AnonSec Shell
Server IP :  /  Your IP : 10.244.4.16   [ Reverse IP ]
Web Server : nginx/1.25.3
System : Linux escuela-portal-app-54f56585bc-kst6g 5.15.0-1084-azure #93-Ubuntu SMP Sat Mar 15 14:12:29 UTC 2025 x86_64
User : root ( 0)
PHP Version : 8.2.13
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,
Domains : 0 Domains
MySQL : OFF  |  cURL : ON  |  WGET : OFF  |  Perl : ON  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /var/www/app/public/js/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ HOME ]     [ BACKUP SHELL ]     [ JUMPING ]     [ MASS DEFACE ]     [ SCAN ROOT ]     [ SYMLINK ]     

Current File : /var/www/app/public/js/directory.js
/*
 * ATTENTION: An "eval-source-map" devtool has been used.
 * This devtool is neither made for production nor for readable output files.
 * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
 * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
 * or disable the default devtool with "devtool: false".
 * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
 */
/******/ (() => { // webpackBootstrap
/******/ 	var __webpack_modules__ = ({

/***/ "./node_modules/@desislavsd/vue-select/dist/vue-select.umd.min.js":
/*!************************************************************************!*\
  !*** ./node_modules/@desislavsd/vue-select/dist/vue-select.umd.min.js ***!
  \************************************************************************/
/***/ (function(module) {

eval("(function(t,e){ true?module.exports=e():0})(\"undefined\"!==typeof self?self:this,(function(){return function(t){var e={};function n(r){if(e[r])return e[r].exports;var i=e[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){\"undefined\"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&\"object\"===typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,\"default\",{enumerable:!0,value:t}),2&e&&\"string\"!=typeof t)for(var i in t)n.d(r,i,function(e){return t[e]}.bind(null,i));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t[\"default\"]}:function(){return t};return n.d(e,\"a\",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p=\"\",n(n.s=\"fb15\")}({\"014b\":function(t,e,n){\"use strict\";var r=n(\"e53d\"),i=n(\"07e3\"),o=n(\"8e60\"),c=n(\"63b6\"),u=n(\"9138\"),a=n(\"ebfd\").KEY,s=n(\"294c\"),f=n(\"dbdb\"),l=n(\"45f2\"),p=n(\"62a0\"),h=n(\"5168\"),v=n(\"ccb9\"),d=n(\"6718\"),y=n(\"47ee\"),b=n(\"9003\"),g=n(\"e4ae\"),m=n(\"f772\"),x=n(\"241e\"),w=n(\"36c3\"),_=n(\"1bc3\"),S=n(\"aebd\"),O=n(\"a159\"),k=n(\"0395\"),j=n(\"bf0b\"),E=n(\"9aa9\"),P=n(\"d9f6\"),A=n(\"c3a1\"),L=j.f,T=P.f,M=k.f,C=r.Symbol,F=r.JSON,I=F&&F.stringify,R=\"prototype\",N=h(\"_hidden\"),q=h(\"toPrimitive\"),D={}.propertyIsEnumerable,$=f(\"symbol-registry\"),G=f(\"symbols\"),V=f(\"op-symbols\"),B=Object[R],U=\"function\"==typeof C&&!!E.f,K=r.QObject,H=!K||!K[R]||!K[R].findChild,W=o&&s((function(){return 7!=O(T({},\"a\",{get:function(){return T(this,\"a\",{value:7}).a}})).a}))?function(t,e,n){var r=L(B,e);r&&delete B[e],T(t,e,n),r&&t!==B&&T(B,e,r)}:T,J=function(t){var e=G[t]=O(C[R]);return e._k=t,e},Y=U&&\"symbol\"==typeof C.iterator?function(t){return\"symbol\"==typeof t}:function(t){return t instanceof C},z=function(t,e,n){return t===B&&z(V,e,n),g(t),e=_(e,!0),g(n),i(G,e)?(n.enumerable?(i(t,N)&&t[N][e]&&(t[N][e]=!1),n=O(n,{enumerable:S(0,!1)})):(i(t,N)||T(t,N,S(1,{})),t[N][e]=!0),W(t,e,n)):T(t,e,n)},X=function(t,e){g(t);var n,r=y(e=w(e)),i=0,o=r.length;while(o>i)z(t,n=r[i++],e[n]);return t},Q=function(t,e){return void 0===e?O(t):X(O(t),e)},Z=function(t){var e=D.call(this,t=_(t,!0));return!(this===B&&i(G,t)&&!i(V,t))&&(!(e||!i(this,t)||!i(G,t)||i(this,N)&&this[N][t])||e)},tt=function(t,e){if(t=w(t),e=_(e,!0),t!==B||!i(G,e)||i(V,e)){var n=L(t,e);return!n||!i(G,e)||i(t,N)&&t[N][e]||(n.enumerable=!0),n}},et=function(t){var e,n=M(w(t)),r=[],o=0;while(n.length>o)i(G,e=n[o++])||e==N||e==a||r.push(e);return r},nt=function(t){var e,n=t===B,r=M(n?V:w(t)),o=[],c=0;while(r.length>c)!i(G,e=r[c++])||n&&!i(B,e)||o.push(G[e]);return o};U||(C=function(){if(this instanceof C)throw TypeError(\"Symbol is not a constructor!\");var t=p(arguments.length>0?arguments[0]:void 0),e=function(n){this===B&&e.call(V,n),i(this,N)&&i(this[N],t)&&(this[N][t]=!1),W(this,t,S(1,n))};return o&&H&&W(B,t,{configurable:!0,set:e}),J(t)},u(C[R],\"toString\",(function(){return this._k})),j.f=tt,P.f=z,n(\"6abf\").f=k.f=et,n(\"355d\").f=Z,E.f=nt,o&&!n(\"b8e3\")&&u(B,\"propertyIsEnumerable\",Z,!0),v.f=function(t){return J(h(t))}),c(c.G+c.W+c.F*!U,{Symbol:C});for(var rt=\"hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables\".split(\",\"),it=0;rt.length>it;)h(rt[it++]);for(var ot=A(h.store),ct=0;ot.length>ct;)d(ot[ct++]);c(c.S+c.F*!U,\"Symbol\",{for:function(t){return i($,t+=\"\")?$[t]:$[t]=C(t)},keyFor:function(t){if(!Y(t))throw TypeError(t+\" is not a symbol!\");for(var e in $)if($[e]===t)return e},useSetter:function(){H=!0},useSimple:function(){H=!1}}),c(c.S+c.F*!U,\"Object\",{create:Q,defineProperty:z,defineProperties:X,getOwnPropertyDescriptor:tt,getOwnPropertyNames:et,getOwnPropertySymbols:nt});var ut=s((function(){E.f(1)}));c(c.S+c.F*ut,\"Object\",{getOwnPropertySymbols:function(t){return E.f(x(t))}}),F&&c(c.S+c.F*(!U||s((function(){var t=C();return\"[null]\"!=I([t])||\"{}\"!=I({a:t})||\"{}\"!=I(Object(t))}))),\"JSON\",{stringify:function(t){var e,n,r=[t],i=1;while(arguments.length>i)r.push(arguments[i++]);if(n=e=r[1],(m(e)||void 0!==t)&&!Y(t))return b(e)||(e=function(t,e){if(\"function\"==typeof n&&(e=n.call(this,t,e)),!Y(e))return e}),r[1]=e,I.apply(F,r)}}),C[R][q]||n(\"35e8\")(C[R],q,C[R].valueOf),l(C,\"Symbol\"),l(Math,\"Math\",!0),l(r.JSON,\"JSON\",!0)},\"01f9\":function(t,e,n){\"use strict\";var r=n(\"2d00\"),i=n(\"5ca1\"),o=n(\"2aba\"),c=n(\"32e9\"),u=n(\"84f2\"),a=n(\"41a0\"),s=n(\"7f20\"),f=n(\"38fd\"),l=n(\"2b4c\")(\"iterator\"),p=!([].keys&&\"next\"in[].keys()),h=\"@@iterator\",v=\"keys\",d=\"values\",y=function(){return this};t.exports=function(t,e,n,b,g,m,x){a(n,e,b);var w,_,S,O=function(t){if(!p&&t in P)return P[t];switch(t){case v:return function(){return new n(this,t)};case d:return function(){return new n(this,t)}}return function(){return new n(this,t)}},k=e+\" Iterator\",j=g==d,E=!1,P=t.prototype,A=P[l]||P[h]||g&&P[g],L=A||O(g),T=g?j?O(\"entries\"):L:void 0,M=\"Array\"==e&&P.entries||A;if(M&&(S=f(M.call(new t)),S!==Object.prototype&&S.next&&(s(S,k,!0),r||\"function\"==typeof S[l]||c(S,l,y))),j&&A&&A.name!==d&&(E=!0,L=function(){return A.call(this)}),r&&!x||!p&&!E&&P[l]||c(P,l,L),u[e]=L,u[k]=y,g)if(w={values:j?L:O(d),keys:m?L:O(v),entries:T},x)for(_ in w)_ in P||o(P,_,w[_]);else i(i.P+i.F*(p||E),e,w);return w}},\"02f4\":function(t,e,n){var r=n(\"4588\"),i=n(\"be13\");t.exports=function(t){return function(e,n){var o,c,u=String(i(e)),a=r(n),s=u.length;return a<0||a>=s?t?\"\":void 0:(o=u.charCodeAt(a),o<55296||o>56319||a+1===s||(c=u.charCodeAt(a+1))<56320||c>57343?t?u.charAt(a):o:t?u.slice(a,a+2):c-56320+(o-55296<<10)+65536)}}},\"0390\":function(t,e,n){\"use strict\";var r=n(\"02f4\")(!0);t.exports=function(t,e,n){return e+(n?r(t,e).length:1)}},\"0395\":function(t,e,n){var r=n(\"36c3\"),i=n(\"6abf\").f,o={}.toString,c=\"object\"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],u=function(t){try{return i(t)}catch(e){return c.slice()}};t.exports.f=function(t){return c&&\"[object Window]\"==o.call(t)?u(t):i(r(t))}},\"07e3\":function(t,e){var n={}.hasOwnProperty;t.exports=function(t,e){return n.call(t,e)}},\"0a49\":function(t,e,n){var r=n(\"9b43\"),i=n(\"626a\"),o=n(\"4bf8\"),c=n(\"9def\"),u=n(\"cd1c\");t.exports=function(t,e){var n=1==t,a=2==t,s=3==t,f=4==t,l=6==t,p=5==t||l,h=e||u;return function(e,u,v){for(var d,y,b=o(e),g=i(b),m=r(u,v,3),x=c(g.length),w=0,_=n?h(e,x):a?h(e,0):void 0;x>w;w++)if((p||w in g)&&(d=g[w],y=m(d,w,b),t))if(n)_[w]=y;else if(y)switch(t){case 3:return!0;case 5:return d;case 6:return w;case 2:_.push(d)}else if(f)return!1;return l?-1:s||f?f:_}}},\"0bfb\":function(t,e,n){\"use strict\";var r=n(\"cb7c\");t.exports=function(){var t=r(this),e=\"\";return t.global&&(e+=\"g\"),t.ignoreCase&&(e+=\"i\"),t.multiline&&(e+=\"m\"),t.unicode&&(e+=\"u\"),t.sticky&&(e+=\"y\"),e}},\"0d58\":function(t,e,n){var r=n(\"ce10\"),i=n(\"e11e\");t.exports=Object.keys||function(t){return r(t,i)}},\"0fc9\":function(t,e,n){var r=n(\"3a38\"),i=Math.max,o=Math.min;t.exports=function(t,e){return t=r(t),t<0?i(t+e,0):o(t,e)}},1169:function(t,e,n){var r=n(\"2d95\");t.exports=Array.isArray||function(t){return\"Array\"==r(t)}},1173:function(t,e){t.exports=function(t,e,n,r){if(!(t instanceof e)||void 0!==r&&r in t)throw TypeError(n+\": incorrect invocation!\");return t}},\"11e9\":function(t,e,n){var r=n(\"52a7\"),i=n(\"4630\"),o=n(\"6821\"),c=n(\"6a99\"),u=n(\"69a8\"),a=n(\"c69a\"),s=Object.getOwnPropertyDescriptor;e.f=n(\"9e1e\")?s:function(t,e){if(t=o(t),e=c(e,!0),a)try{return s(t,e)}catch(n){}if(u(t,e))return i(!r.f.call(t,e),t[e])}},1495:function(t,e,n){var r=n(\"86cc\"),i=n(\"cb7c\"),o=n(\"0d58\");t.exports=n(\"9e1e\")?Object.defineProperties:function(t,e){i(t);var n,c=o(e),u=c.length,a=0;while(u>a)r.f(t,n=c[a++],e[n]);return t}},1654:function(t,e,n){\"use strict\";var r=n(\"71c1\")(!0);n(\"30f1\")(String,\"String\",(function(t){this._t=String(t),this._i=0}),(function(){var t,e=this._t,n=this._i;return n>=e.length?{value:void 0,done:!0}:(t=r(e,n),this._i+=t.length,{value:t,done:!1})}))},1691:function(t,e){t.exports=\"constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf\".split(\",\")},1991:function(t,e,n){var r,i,o,c=n(\"9b43\"),u=n(\"31f4\"),a=n(\"fab2\"),s=n(\"230e\"),f=n(\"7726\"),l=f.process,p=f.setImmediate,h=f.clearImmediate,v=f.MessageChannel,d=f.Dispatch,y=0,b={},g=\"onreadystatechange\",m=function(){var t=+this;if(b.hasOwnProperty(t)){var e=b[t];delete b[t],e()}},x=function(t){m.call(t.data)};p&&h||(p=function(t){var e=[],n=1;while(arguments.length>n)e.push(arguments[n++]);return b[++y]=function(){u(\"function\"==typeof t?t:Function(t),e)},r(y),y},h=function(t){delete b[t]},\"process\"==n(\"2d95\")(l)?r=function(t){l.nextTick(c(m,t,1))}:d&&d.now?r=function(t){d.now(c(m,t,1))}:v?(i=new v,o=i.port2,i.port1.onmessage=x,r=c(o.postMessage,o,1)):f.addEventListener&&\"function\"==typeof postMessage&&!f.importScripts?(r=function(t){f.postMessage(t+\"\",\"*\")},f.addEventListener(\"message\",x,!1)):r=g in s(\"script\")?function(t){a.appendChild(s(\"script\"))[g]=function(){a.removeChild(this),m.call(t)}}:function(t){setTimeout(c(m,t,1),0)}),t.exports={set:p,clear:h}},\"1af6\":function(t,e,n){var r=n(\"63b6\");r(r.S,\"Array\",{isArray:n(\"9003\")})},\"1bc3\":function(t,e,n){var r=n(\"f772\");t.exports=function(t,e){if(!r(t))return t;var n,i;if(e&&\"function\"==typeof(n=t.toString)&&!r(i=n.call(t)))return i;if(\"function\"==typeof(n=t.valueOf)&&!r(i=n.call(t)))return i;if(!e&&\"function\"==typeof(n=t.toString)&&!r(i=n.call(t)))return i;throw TypeError(\"Can't convert object to primitive value\")}},\"1ec9\":function(t,e,n){var r=n(\"f772\"),i=n(\"e53d\").document,o=r(i)&&r(i.createElement);t.exports=function(t){return o?i.createElement(t):{}}},\"1fa8\":function(t,e,n){var r=n(\"cb7c\");t.exports=function(t,e,n,i){try{return i?e(r(n)[0],n[1]):e(n)}catch(c){var o=t[\"return\"];throw void 0!==o&&r(o.call(t)),c}}},\"20d6\":function(t,e,n){\"use strict\";var r=n(\"5ca1\"),i=n(\"0a49\")(6),o=\"findIndex\",c=!0;o in[]&&Array(1)[o]((function(){c=!1})),r(r.P+r.F*c,\"Array\",{findIndex:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}}),n(\"9c6c\")(o)},\"20fd\":function(t,e,n){\"use strict\";var r=n(\"d9f6\"),i=n(\"aebd\");t.exports=function(t,e,n){e in t?r.f(t,e,i(0,n)):t[e]=n}},\"214f\":function(t,e,n){\"use strict\";n(\"b0c5\");var r=n(\"2aba\"),i=n(\"32e9\"),o=n(\"79e5\"),c=n(\"be13\"),u=n(\"2b4c\"),a=n(\"520a\"),s=u(\"species\"),f=!o((function(){var t=/./;return t.exec=function(){var t=[];return t.groups={a:\"7\"},t},\"7\"!==\"\".replace(t,\"$<a>\")})),l=function(){var t=/(?:)/,e=t.exec;t.exec=function(){return e.apply(this,arguments)};var n=\"ab\".split(t);return 2===n.length&&\"a\"===n[0]&&\"b\"===n[1]}();t.exports=function(t,e,n){var p=u(t),h=!o((function(){var e={};return e[p]=function(){return 7},7!=\"\"[t](e)})),v=h?!o((function(){var e=!1,n=/a/;return n.exec=function(){return e=!0,null},\"split\"===t&&(n.constructor={},n.constructor[s]=function(){return n}),n[p](\"\"),!e})):void 0;if(!h||!v||\"replace\"===t&&!f||\"split\"===t&&!l){var d=/./[p],y=n(c,p,\"\"[t],(function(t,e,n,r,i){return e.exec===a?h&&!i?{done:!0,value:d.call(e,n,r)}:{done:!0,value:t.call(n,e,r)}:{done:!1}})),b=y[0],g=y[1];r(String.prototype,t,b),i(RegExp.prototype,p,2==e?function(t,e){return g.call(t,this,e)}:function(t){return g.call(t,this)})}}},\"230e\":function(t,e,n){var r=n(\"d3f4\"),i=n(\"7726\").document,o=r(i)&&r(i.createElement);t.exports=function(t){return o?i.createElement(t):{}}},\"23c6\":function(t,e,n){var r=n(\"2d95\"),i=n(\"2b4c\")(\"toStringTag\"),o=\"Arguments\"==r(function(){return arguments}()),c=function(t,e){try{return t[e]}catch(n){}};t.exports=function(t){var e,n,u;return void 0===t?\"Undefined\":null===t?\"Null\":\"string\"==typeof(n=c(e=Object(t),i))?n:o?r(e):\"Object\"==(u=r(e))&&\"function\"==typeof e.callee?\"Arguments\":u}},\"241e\":function(t,e,n){var r=n(\"25eb\");t.exports=function(t){return Object(r(t))}},\"24c5\":function(t,e,n){\"use strict\";var r,i,o,c,u=n(\"b8e3\"),a=n(\"e53d\"),s=n(\"d864\"),f=n(\"40c3\"),l=n(\"63b6\"),p=n(\"f772\"),h=n(\"79aa\"),v=n(\"1173\"),d=n(\"a22a\"),y=n(\"f201\"),b=n(\"4178\").set,g=n(\"aba2\")(),m=n(\"656e\"),x=n(\"4439\"),w=n(\"bc13\"),_=n(\"cd78\"),S=\"Promise\",O=a.TypeError,k=a.process,j=k&&k.versions,E=j&&j.v8||\"\",P=a[S],A=\"process\"==f(k),L=function(){},T=i=m.f,M=!!function(){try{var t=P.resolve(1),e=(t.constructor={})[n(\"5168\")(\"species\")]=function(t){t(L,L)};return(A||\"function\"==typeof PromiseRejectionEvent)&&t.then(L)instanceof e&&0!==E.indexOf(\"6.6\")&&-1===w.indexOf(\"Chrome/66\")}catch(r){}}(),C=function(t){var e;return!(!p(t)||\"function\"!=typeof(e=t.then))&&e},F=function(t,e){if(!t._n){t._n=!0;var n=t._c;g((function(){var r=t._v,i=1==t._s,o=0,c=function(e){var n,o,c,u=i?e.ok:e.fail,a=e.resolve,s=e.reject,f=e.domain;try{u?(i||(2==t._h&&N(t),t._h=1),!0===u?n=r:(f&&f.enter(),n=u(r),f&&(f.exit(),c=!0)),n===e.promise?s(O(\"Promise-chain cycle\")):(o=C(n))?o.call(n,a,s):a(n)):s(r)}catch(l){f&&!c&&f.exit(),s(l)}};while(n.length>o)c(n[o++]);t._c=[],t._n=!1,e&&!t._h&&I(t)}))}},I=function(t){b.call(a,(function(){var e,n,r,i=t._v,o=R(t);if(o&&(e=x((function(){A?k.emit(\"unhandledRejection\",i,t):(n=a.onunhandledrejection)?n({promise:t,reason:i}):(r=a.console)&&r.error&&r.error(\"Unhandled promise rejection\",i)})),t._h=A||R(t)?2:1),t._a=void 0,o&&e.e)throw e.v}))},R=function(t){return 1!==t._h&&0===(t._a||t._c).length},N=function(t){b.call(a,(function(){var e;A?k.emit(\"rejectionHandled\",t):(e=a.onrejectionhandled)&&e({promise:t,reason:t._v})}))},q=function(t){var e=this;e._d||(e._d=!0,e=e._w||e,e._v=t,e._s=2,e._a||(e._a=e._c.slice()),F(e,!0))},D=function(t){var e,n=this;if(!n._d){n._d=!0,n=n._w||n;try{if(n===t)throw O(\"Promise can't be resolved itself\");(e=C(t))?g((function(){var r={_w:n,_d:!1};try{e.call(t,s(D,r,1),s(q,r,1))}catch(i){q.call(r,i)}})):(n._v=t,n._s=1,F(n,!1))}catch(r){q.call({_w:n,_d:!1},r)}}};M||(P=function(t){v(this,P,S,\"_h\"),h(t),r.call(this);try{t(s(D,this,1),s(q,this,1))}catch(e){q.call(this,e)}},r=function(t){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1},r.prototype=n(\"5c95\")(P.prototype,{then:function(t,e){var n=T(y(this,P));return n.ok=\"function\"!=typeof t||t,n.fail=\"function\"==typeof e&&e,n.domain=A?k.domain:void 0,this._c.push(n),this._a&&this._a.push(n),this._s&&F(this,!1),n.promise},catch:function(t){return this.then(void 0,t)}}),o=function(){var t=new r;this.promise=t,this.resolve=s(D,t,1),this.reject=s(q,t,1)},m.f=T=function(t){return t===P||t===c?new o(t):i(t)}),l(l.G+l.W+l.F*!M,{Promise:P}),n(\"45f2\")(P,S),n(\"4c95\")(S),c=n(\"584a\")[S],l(l.S+l.F*!M,S,{reject:function(t){var e=T(this),n=e.reject;return n(t),e.promise}}),l(l.S+l.F*(u||!M),S,{resolve:function(t){return _(u&&this===c?P:this,t)}}),l(l.S+l.F*!(M&&n(\"4ee1\")((function(t){P.all(t)[\"catch\"](L)}))),S,{all:function(t){var e=this,n=T(e),r=n.resolve,i=n.reject,o=x((function(){var n=[],o=0,c=1;d(t,!1,(function(t){var u=o++,a=!1;n.push(void 0),c++,e.resolve(t).then((function(t){a||(a=!0,n[u]=t,--c||r(n))}),i)})),--c||r(n)}));return o.e&&i(o.v),n.promise},race:function(t){var e=this,n=T(e),r=n.reject,i=x((function(){d(t,!1,(function(t){e.resolve(t).then(n.resolve,r)}))}));return i.e&&r(i.v),n.promise}})},\"25eb\":function(t,e){t.exports=function(t){if(void 0==t)throw TypeError(\"Can't call method on  \"+t);return t}},2621:function(t,e){e.f=Object.getOwnPropertySymbols},\"27ee\":function(t,e,n){var r=n(\"23c6\"),i=n(\"2b4c\")(\"iterator\"),o=n(\"84f2\");t.exports=n(\"8378\").getIteratorMethod=function(t){if(void 0!=t)return t[i]||t[\"@@iterator\"]||o[r(t)]}},\"28a5\":function(t,e,n){\"use strict\";var r=n(\"aae3\"),i=n(\"cb7c\"),o=n(\"ebd6\"),c=n(\"0390\"),u=n(\"9def\"),a=n(\"5f1b\"),s=n(\"520a\"),f=n(\"79e5\"),l=Math.min,p=[].push,h=\"split\",v=\"length\",d=\"lastIndex\",y=4294967295,b=!f((function(){RegExp(y,\"y\")}));n(\"214f\")(\"split\",2,(function(t,e,n,f){var g;return g=\"c\"==\"abbc\"[h](/(b)*/)[1]||4!=\"test\"[h](/(?:)/,-1)[v]||2!=\"ab\"[h](/(?:ab)*/)[v]||4!=\".\"[h](/(.?)(.?)/)[v]||\".\"[h](/()()/)[v]>1||\"\"[h](/.?/)[v]?function(t,e){var i=String(this);if(void 0===t&&0===e)return[];if(!r(t))return n.call(i,t,e);var o,c,u,a=[],f=(t.ignoreCase?\"i\":\"\")+(t.multiline?\"m\":\"\")+(t.unicode?\"u\":\"\")+(t.sticky?\"y\":\"\"),l=0,h=void 0===e?y:e>>>0,b=new RegExp(t.source,f+\"g\");while(o=s.call(b,i)){if(c=b[d],c>l&&(a.push(i.slice(l,o.index)),o[v]>1&&o.index<i[v]&&p.apply(a,o.slice(1)),u=o[0][v],l=c,a[v]>=h))break;b[d]===o.index&&b[d]++}return l===i[v]?!u&&b.test(\"\")||a.push(\"\"):a.push(i.slice(l)),a[v]>h?a.slice(0,h):a}:\"0\"[h](void 0,0)[v]?function(t,e){return void 0===t&&0===e?[]:n.call(this,t,e)}:n,[function(n,r){var i=t(this),o=void 0==n?void 0:n[e];return void 0!==o?o.call(n,i,r):g.call(String(i),n,r)},function(t,e){var r=f(g,t,this,e,g!==n);if(r.done)return r.value;var s=i(t),p=String(this),h=o(s,RegExp),v=s.unicode,d=(s.ignoreCase?\"i\":\"\")+(s.multiline?\"m\":\"\")+(s.unicode?\"u\":\"\")+(b?\"y\":\"g\"),m=new h(b?s:\"^(?:\"+s.source+\")\",d),x=void 0===e?y:e>>>0;if(0===x)return[];if(0===p.length)return null===a(m,p)?[p]:[];var w=0,_=0,S=[];while(_<p.length){m.lastIndex=b?_:0;var O,k=a(m,b?p:p.slice(_));if(null===k||(O=l(u(m.lastIndex+(b?0:_)),p.length))===w)_=c(p,_,v);else{if(S.push(p.slice(w,_)),S.length===x)return S;for(var j=1;j<=k.length-1;j++)if(S.push(k[j]),S.length===x)return S;_=w=O}}return S.push(p.slice(w)),S}]}))},\"294c\":function(t,e){t.exports=function(t){try{return!!t()}catch(e){return!0}}},\"2aba\":function(t,e,n){var r=n(\"7726\"),i=n(\"32e9\"),o=n(\"69a8\"),c=n(\"ca5a\")(\"src\"),u=n(\"fa5b\"),a=\"toString\",s=(\"\"+u).split(a);n(\"8378\").inspectSource=function(t){return u.call(t)},(t.exports=function(t,e,n,u){var a=\"function\"==typeof n;a&&(o(n,\"name\")||i(n,\"name\",e)),t[e]!==n&&(a&&(o(n,c)||i(n,c,t[e]?\"\"+t[e]:s.join(String(e)))),t===r?t[e]=n:u?t[e]?t[e]=n:i(t,e,n):(delete t[e],i(t,e,n)))})(Function.prototype,a,(function(){return\"function\"==typeof this&&this[c]||u.call(this)}))},\"2aeb\":function(t,e,n){var r=n(\"cb7c\"),i=n(\"1495\"),o=n(\"e11e\"),c=n(\"613b\")(\"IE_PROTO\"),u=function(){},a=\"prototype\",s=function(){var t,e=n(\"230e\")(\"iframe\"),r=o.length,i=\"<\",c=\">\";e.style.display=\"none\",n(\"fab2\").appendChild(e),e.src=\"javascript:\",t=e.contentWindow.document,t.open(),t.write(i+\"script\"+c+\"document.F=Object\"+i+\"/script\"+c),t.close(),s=t.F;while(r--)delete s[a][o[r]];return s()};t.exports=Object.create||function(t,e){var n;return null!==t?(u[a]=r(t),n=new u,u[a]=null,n[c]=t):n=s(),void 0===e?n:i(n,e)}},\"2b4c\":function(t,e,n){var r=n(\"5537\")(\"wks\"),i=n(\"ca5a\"),o=n(\"7726\").Symbol,c=\"function\"==typeof o,u=t.exports=function(t){return r[t]||(r[t]=c&&o[t]||(c?o:i)(\"Symbol.\"+t))};u.store=r},\"2d00\":function(t,e){t.exports=!1},\"2d95\":function(t,e){var n={}.toString;t.exports=function(t){return n.call(t).slice(8,-1)}},\"2fdb\":function(t,e,n){\"use strict\";var r=n(\"5ca1\"),i=n(\"d2c8\"),o=\"includes\";r(r.P+r.F*n(\"5147\")(o),\"String\",{includes:function(t){return!!~i(this,t,o).indexOf(t,arguments.length>1?arguments[1]:void 0)}})},3024:function(t,e){t.exports=function(t,e,n){var r=void 0===n;switch(e.length){case 0:return r?t():t.call(n);case 1:return r?t(e[0]):t.call(n,e[0]);case 2:return r?t(e[0],e[1]):t.call(n,e[0],e[1]);case 3:return r?t(e[0],e[1],e[2]):t.call(n,e[0],e[1],e[2]);case 4:return r?t(e[0],e[1],e[2],e[3]):t.call(n,e[0],e[1],e[2],e[3])}return t.apply(n,e)}},\"30f1\":function(t,e,n){\"use strict\";var r=n(\"b8e3\"),i=n(\"63b6\"),o=n(\"9138\"),c=n(\"35e8\"),u=n(\"481b\"),a=n(\"8f60\"),s=n(\"45f2\"),f=n(\"53e2\"),l=n(\"5168\")(\"iterator\"),p=!([].keys&&\"next\"in[].keys()),h=\"@@iterator\",v=\"keys\",d=\"values\",y=function(){return this};t.exports=function(t,e,n,b,g,m,x){a(n,e,b);var w,_,S,O=function(t){if(!p&&t in P)return P[t];switch(t){case v:return function(){return new n(this,t)};case d:return function(){return new n(this,t)}}return function(){return new n(this,t)}},k=e+\" Iterator\",j=g==d,E=!1,P=t.prototype,A=P[l]||P[h]||g&&P[g],L=A||O(g),T=g?j?O(\"entries\"):L:void 0,M=\"Array\"==e&&P.entries||A;if(M&&(S=f(M.call(new t)),S!==Object.prototype&&S.next&&(s(S,k,!0),r||\"function\"==typeof S[l]||c(S,l,y))),j&&A&&A.name!==d&&(E=!0,L=function(){return A.call(this)}),r&&!x||!p&&!E&&P[l]||c(P,l,L),u[e]=L,u[k]=y,g)if(w={values:j?L:O(d),keys:m?L:O(v),entries:T},x)for(_ in w)_ in P||o(P,_,w[_]);else i(i.P+i.F*(p||E),e,w);return w}},\"31f4\":function(t,e){t.exports=function(t,e,n){var r=void 0===n;switch(e.length){case 0:return r?t():t.call(n);case 1:return r?t(e[0]):t.call(n,e[0]);case 2:return r?t(e[0],e[1]):t.call(n,e[0],e[1]);case 3:return r?t(e[0],e[1],e[2]):t.call(n,e[0],e[1],e[2]);case 4:return r?t(e[0],e[1],e[2],e[3]):t.call(n,e[0],e[1],e[2],e[3])}return t.apply(n,e)}},\"32e9\":function(t,e,n){var r=n(\"86cc\"),i=n(\"4630\");t.exports=n(\"9e1e\")?function(t,e,n){return r.f(t,e,i(1,n))}:function(t,e,n){return t[e]=n,t}},\"32fc\":function(t,e,n){var r=n(\"e53d\").document;t.exports=r&&r.documentElement},\"335c\":function(t,e,n){var r=n(\"6b4c\");t.exports=Object(\"z\").propertyIsEnumerable(0)?Object:function(t){return\"String\"==r(t)?t.split(\"\"):Object(t)}},\"33a4\":function(t,e,n){var r=n(\"84f2\"),i=n(\"2b4c\")(\"iterator\"),o=Array.prototype;t.exports=function(t){return void 0!==t&&(r.Array===t||o[i]===t)}},\"355d\":function(t,e){e.f={}.propertyIsEnumerable},\"35e8\":function(t,e,n){var r=n(\"d9f6\"),i=n(\"aebd\");t.exports=n(\"8e60\")?function(t,e,n){return r.f(t,e,i(1,n))}:function(t,e,n){return t[e]=n,t}},3620:function(t,e,n){},\"36c3\":function(t,e,n){var r=n(\"335c\"),i=n(\"25eb\");t.exports=function(t){return r(i(t))}},3702:function(t,e,n){var r=n(\"481b\"),i=n(\"5168\")(\"iterator\"),o=Array.prototype;t.exports=function(t){return void 0!==t&&(r.Array===t||o[i]===t)}},3846:function(t,e,n){n(\"9e1e\")&&\"g\"!=/./g.flags&&n(\"86cc\").f(RegExp.prototype,\"flags\",{configurable:!0,get:n(\"0bfb\")})},\"386d\":function(t,e,n){\"use strict\";var r=n(\"cb7c\"),i=n(\"83a1\"),o=n(\"5f1b\");n(\"214f\")(\"search\",1,(function(t,e,n,c){return[function(n){var r=t(this),i=void 0==n?void 0:n[e];return void 0!==i?i.call(n,r):new RegExp(n)[e](String(r))},function(t){var e=c(n,t,this);if(e.done)return e.value;var u=r(t),a=String(this),s=u.lastIndex;i(s,0)||(u.lastIndex=0);var f=o(u,a);return i(u.lastIndex,s)||(u.lastIndex=s),null===f?-1:f.index}]}))},\"38fd\":function(t,e,n){var r=n(\"69a8\"),i=n(\"4bf8\"),o=n(\"613b\")(\"IE_PROTO\"),c=Object.prototype;t.exports=Object.getPrototypeOf||function(t){return t=i(t),r(t,o)?t[o]:\"function\"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?c:null}},\"3a38\":function(t,e){var n=Math.ceil,r=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?r:n)(t)}},\"3c11\":function(t,e,n){\"use strict\";var r=n(\"63b6\"),i=n(\"584a\"),o=n(\"e53d\"),c=n(\"f201\"),u=n(\"cd78\");r(r.P+r.R,\"Promise\",{finally:function(t){var e=c(this,i.Promise||o.Promise),n=\"function\"==typeof t;return this.then(n?function(n){return u(e,t()).then((function(){return n}))}:t,n?function(n){return u(e,t()).then((function(){throw n}))}:t)}})},\"3cba\":function(t,e,n){\"use strict\";var r=n(\"ecf0\"),i=n.n(r);i.a},\"40c3\":function(t,e,n){var r=n(\"6b4c\"),i=n(\"5168\")(\"toStringTag\"),o=\"Arguments\"==r(function(){return arguments}()),c=function(t,e){try{return t[e]}catch(n){}};t.exports=function(t){var e,n,u;return void 0===t?\"Undefined\":null===t?\"Null\":\"string\"==typeof(n=c(e=Object(t),i))?n:o?r(e):\"Object\"==(u=r(e))&&\"function\"==typeof e.callee?\"Arguments\":u}},4178:function(t,e,n){var r,i,o,c=n(\"d864\"),u=n(\"3024\"),a=n(\"32fc\"),s=n(\"1ec9\"),f=n(\"e53d\"),l=f.process,p=f.setImmediate,h=f.clearImmediate,v=f.MessageChannel,d=f.Dispatch,y=0,b={},g=\"onreadystatechange\",m=function(){var t=+this;if(b.hasOwnProperty(t)){var e=b[t];delete b[t],e()}},x=function(t){m.call(t.data)};p&&h||(p=function(t){var e=[],n=1;while(arguments.length>n)e.push(arguments[n++]);return b[++y]=function(){u(\"function\"==typeof t?t:Function(t),e)},r(y),y},h=function(t){delete b[t]},\"process\"==n(\"6b4c\")(l)?r=function(t){l.nextTick(c(m,t,1))}:d&&d.now?r=function(t){d.now(c(m,t,1))}:v?(i=new v,o=i.port2,i.port1.onmessage=x,r=c(o.postMessage,o,1)):f.addEventListener&&\"function\"==typeof postMessage&&!f.importScripts?(r=function(t){f.postMessage(t+\"\",\"*\")},f.addEventListener(\"message\",x,!1)):r=g in s(\"script\")?function(t){a.appendChild(s(\"script\"))[g]=function(){a.removeChild(this),m.call(t)}}:function(t){setTimeout(c(m,t,1),0)}),t.exports={set:p,clear:h}},\"41a0\":function(t,e,n){\"use strict\";var r=n(\"2aeb\"),i=n(\"4630\"),o=n(\"7f20\"),c={};n(\"32e9\")(c,n(\"2b4c\")(\"iterator\"),(function(){return this})),t.exports=function(t,e,n){t.prototype=r(c,{next:i(1,n)}),o(t,e+\" Iterator\")}},\"43fc\":function(t,e,n){\"use strict\";var r=n(\"63b6\"),i=n(\"656e\"),o=n(\"4439\");r(r.S,\"Promise\",{try:function(t){var e=i.f(this),n=o(t);return(n.e?e.reject:e.resolve)(n.v),e.promise}})},4439:function(t,e){t.exports=function(t){try{return{e:!1,v:t()}}catch(e){return{e:!0,v:e}}}},\"454f\":function(t,e,n){n(\"46a7\");var r=n(\"584a\").Object;t.exports=function(t,e,n){return r.defineProperty(t,e,n)}},\"456d\":function(t,e,n){var r=n(\"4bf8\"),i=n(\"0d58\");n(\"5eda\")(\"keys\",(function(){return function(t){return i(r(t))}}))},4588:function(t,e){var n=Math.ceil,r=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?r:n)(t)}},\"45f2\":function(t,e,n){var r=n(\"d9f6\").f,i=n(\"07e3\"),o=n(\"5168\")(\"toStringTag\");t.exports=function(t,e,n){t&&!i(t=n?t:t.prototype,o)&&r(t,o,{configurable:!0,value:e})}},4630:function(t,e){t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},\"46a7\":function(t,e,n){var r=n(\"63b6\");r(r.S+r.F*!n(\"8e60\"),\"Object\",{defineProperty:n(\"d9f6\").f})},\"47ee\":function(t,e,n){var r=n(\"c3a1\"),i=n(\"9aa9\"),o=n(\"355d\");t.exports=function(t){var e=r(t),n=i.f;if(n){var c,u=n(t),a=o.f,s=0;while(u.length>s)a.call(t,c=u[s++])&&e.push(c)}return e}},\"481b\":function(t,e){t.exports={}},\"4a59\":function(t,e,n){var r=n(\"9b43\"),i=n(\"1fa8\"),o=n(\"33a4\"),c=n(\"cb7c\"),u=n(\"9def\"),a=n(\"27ee\"),s={},f={};e=t.exports=function(t,e,n,l,p){var h,v,d,y,b=p?function(){return t}:a(t),g=r(n,l,e?2:1),m=0;if(\"function\"!=typeof b)throw TypeError(t+\" is not iterable!\");if(o(b)){for(h=u(t.length);h>m;m++)if(y=e?g(c(v=t[m])[0],v[1]):g(t[m]),y===s||y===f)return y}else for(d=b.call(t);!(v=d.next()).done;)if(y=i(d,g,v.value,e),y===s||y===f)return y};e.BREAK=s,e.RETURN=f},\"4bf8\":function(t,e,n){var r=n(\"be13\");t.exports=function(t){return Object(r(t))}},\"4c95\":function(t,e,n){\"use strict\";var r=n(\"e53d\"),i=n(\"584a\"),o=n(\"d9f6\"),c=n(\"8e60\"),u=n(\"5168\")(\"species\");t.exports=function(t){var e=\"function\"==typeof i[t]?i[t]:r[t];c&&e&&!e[u]&&o.f(e,u,{configurable:!0,get:function(){return this}})}},\"4ee1\":function(t,e,n){var r=n(\"5168\")(\"iterator\"),i=!1;try{var o=[7][r]();o[\"return\"]=function(){i=!0},Array.from(o,(function(){throw 2}))}catch(c){}t.exports=function(t,e){if(!e&&!i)return!1;var n=!1;try{var o=[7],u=o[r]();u.next=function(){return{done:n=!0}},o[r]=function(){return u},t(o)}catch(c){}return n}},\"504c\":function(t,e,n){var r=n(\"9e1e\"),i=n(\"0d58\"),o=n(\"6821\"),c=n(\"52a7\").f;t.exports=function(t){return function(e){var n,u=o(e),a=i(u),s=a.length,f=0,l=[];while(s>f)n=a[f++],r&&!c.call(u,n)||l.push(t?[n,u[n]]:u[n]);return l}}},\"50ed\":function(t,e){t.exports=function(t,e){return{value:e,done:!!t}}},5147:function(t,e,n){var r=n(\"2b4c\")(\"match\");t.exports=function(t){var e=/./;try{\"/./\"[t](e)}catch(n){try{return e[r]=!1,!\"/./\"[t](e)}catch(i){}}return!0}},5168:function(t,e,n){var r=n(\"dbdb\")(\"wks\"),i=n(\"62a0\"),o=n(\"e53d\").Symbol,c=\"function\"==typeof o,u=t.exports=function(t){return r[t]||(r[t]=c&&o[t]||(c?o:i)(\"Symbol.\"+t))};u.store=r},\"520a\":function(t,e,n){\"use strict\";var r=n(\"0bfb\"),i=RegExp.prototype.exec,o=String.prototype.replace,c=i,u=\"lastIndex\",a=function(){var t=/a/,e=/b*/g;return i.call(t,\"a\"),i.call(e,\"a\"),0!==t[u]||0!==e[u]}(),s=void 0!==/()??/.exec(\"\")[1],f=a||s;f&&(c=function(t){var e,n,c,f,l=this;return s&&(n=new RegExp(\"^\"+l.source+\"$(?!\\\\s)\",r.call(l))),a&&(e=l[u]),c=i.call(l,t),a&&c&&(l[u]=l.global?c.index+c[0].length:e),s&&c&&c.length>1&&o.call(c[0],n,(function(){for(f=1;f<arguments.length-2;f++)void 0===arguments[f]&&(c[f]=void 0)})),c}),t.exports=c},\"52a7\":function(t,e){e.f={}.propertyIsEnumerable},\"53e2\":function(t,e,n){var r=n(\"07e3\"),i=n(\"241e\"),o=n(\"5559\")(\"IE_PROTO\"),c=Object.prototype;t.exports=Object.getPrototypeOf||function(t){return t=i(t),r(t,o)?t[o]:\"function\"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?c:null}},\"549b\":function(t,e,n){\"use strict\";var r=n(\"d864\"),i=n(\"63b6\"),o=n(\"241e\"),c=n(\"b0dc\"),u=n(\"3702\"),a=n(\"b447\"),s=n(\"20fd\"),f=n(\"7cd6\");i(i.S+i.F*!n(\"4ee1\")((function(t){Array.from(t)})),\"Array\",{from:function(t){var e,n,i,l,p=o(t),h=\"function\"==typeof this?this:Array,v=arguments.length,d=v>1?arguments[1]:void 0,y=void 0!==d,b=0,g=f(p);if(y&&(d=r(d,v>2?arguments[2]:void 0,2)),void 0==g||h==Array&&u(g))for(e=a(p.length),n=new h(e);e>b;b++)s(n,b,y?d(p[b],b):p[b]);else for(l=g.call(p),n=new h;!(i=l.next()).done;b++)s(n,b,y?c(l,d,[i.value,b],!0):i.value);return n.length=b,n}})},\"54a1\":function(t,e,n){n(\"6c1c\"),n(\"1654\"),t.exports=n(\"95d5\")},\"551c\":function(t,e,n){\"use strict\";var r,i,o,c,u=n(\"2d00\"),a=n(\"7726\"),s=n(\"9b43\"),f=n(\"23c6\"),l=n(\"5ca1\"),p=n(\"d3f4\"),h=n(\"d8e8\"),v=n(\"f605\"),d=n(\"4a59\"),y=n(\"ebd6\"),b=n(\"1991\").set,g=n(\"8079\")(),m=n(\"a5b8\"),x=n(\"9c80\"),w=n(\"a25f\"),_=n(\"bcaa\"),S=\"Promise\",O=a.TypeError,k=a.process,j=k&&k.versions,E=j&&j.v8||\"\",P=a[S],A=\"process\"==f(k),L=function(){},T=i=m.f,M=!!function(){try{var t=P.resolve(1),e=(t.constructor={})[n(\"2b4c\")(\"species\")]=function(t){t(L,L)};return(A||\"function\"==typeof PromiseRejectionEvent)&&t.then(L)instanceof e&&0!==E.indexOf(\"6.6\")&&-1===w.indexOf(\"Chrome/66\")}catch(r){}}(),C=function(t){var e;return!(!p(t)||\"function\"!=typeof(e=t.then))&&e},F=function(t,e){if(!t._n){t._n=!0;var n=t._c;g((function(){var r=t._v,i=1==t._s,o=0,c=function(e){var n,o,c,u=i?e.ok:e.fail,a=e.resolve,s=e.reject,f=e.domain;try{u?(i||(2==t._h&&N(t),t._h=1),!0===u?n=r:(f&&f.enter(),n=u(r),f&&(f.exit(),c=!0)),n===e.promise?s(O(\"Promise-chain cycle\")):(o=C(n))?o.call(n,a,s):a(n)):s(r)}catch(l){f&&!c&&f.exit(),s(l)}};while(n.length>o)c(n[o++]);t._c=[],t._n=!1,e&&!t._h&&I(t)}))}},I=function(t){b.call(a,(function(){var e,n,r,i=t._v,o=R(t);if(o&&(e=x((function(){A?k.emit(\"unhandledRejection\",i,t):(n=a.onunhandledrejection)?n({promise:t,reason:i}):(r=a.console)&&r.error&&r.error(\"Unhandled promise rejection\",i)})),t._h=A||R(t)?2:1),t._a=void 0,o&&e.e)throw e.v}))},R=function(t){return 1!==t._h&&0===(t._a||t._c).length},N=function(t){b.call(a,(function(){var e;A?k.emit(\"rejectionHandled\",t):(e=a.onrejectionhandled)&&e({promise:t,reason:t._v})}))},q=function(t){var e=this;e._d||(e._d=!0,e=e._w||e,e._v=t,e._s=2,e._a||(e._a=e._c.slice()),F(e,!0))},D=function(t){var e,n=this;if(!n._d){n._d=!0,n=n._w||n;try{if(n===t)throw O(\"Promise can't be resolved itself\");(e=C(t))?g((function(){var r={_w:n,_d:!1};try{e.call(t,s(D,r,1),s(q,r,1))}catch(i){q.call(r,i)}})):(n._v=t,n._s=1,F(n,!1))}catch(r){q.call({_w:n,_d:!1},r)}}};M||(P=function(t){v(this,P,S,\"_h\"),h(t),r.call(this);try{t(s(D,this,1),s(q,this,1))}catch(e){q.call(this,e)}},r=function(t){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1},r.prototype=n(\"dcbc\")(P.prototype,{then:function(t,e){var n=T(y(this,P));return n.ok=\"function\"!=typeof t||t,n.fail=\"function\"==typeof e&&e,n.domain=A?k.domain:void 0,this._c.push(n),this._a&&this._a.push(n),this._s&&F(this,!1),n.promise},catch:function(t){return this.then(void 0,t)}}),o=function(){var t=new r;this.promise=t,this.resolve=s(D,t,1),this.reject=s(q,t,1)},m.f=T=function(t){return t===P||t===c?new o(t):i(t)}),l(l.G+l.W+l.F*!M,{Promise:P}),n(\"7f20\")(P,S),n(\"7a56\")(S),c=n(\"8378\")[S],l(l.S+l.F*!M,S,{reject:function(t){var e=T(this),n=e.reject;return n(t),e.promise}}),l(l.S+l.F*(u||!M),S,{resolve:function(t){return _(u&&this===c?P:this,t)}}),l(l.S+l.F*!(M&&n(\"5cc5\")((function(t){P.all(t)[\"catch\"](L)}))),S,{all:function(t){var e=this,n=T(e),r=n.resolve,i=n.reject,o=x((function(){var n=[],o=0,c=1;d(t,!1,(function(t){var u=o++,a=!1;n.push(void 0),c++,e.resolve(t).then((function(t){a||(a=!0,n[u]=t,--c||r(n))}),i)})),--c||r(n)}));return o.e&&i(o.v),n.promise},race:function(t){var e=this,n=T(e),r=n.reject,i=x((function(){d(t,!1,(function(t){e.resolve(t).then(n.resolve,r)}))}));return i.e&&r(i.v),n.promise}})},5537:function(t,e,n){var r=n(\"8378\"),i=n(\"7726\"),o=\"__core-js_shared__\",c=i[o]||(i[o]={});(t.exports=function(t,e){return c[t]||(c[t]=void 0!==e?e:{})})(\"versions\",[]).push({version:r.version,mode:n(\"2d00\")?\"pure\":\"global\",copyright:\"© 2019 Denis Pushkarev (zloirock.ru)\"})},5559:function(t,e,n){var r=n(\"dbdb\")(\"keys\"),i=n(\"62a0\");t.exports=function(t){return r[t]||(r[t]=i(t))}},\"584a\":function(t,e){var n=t.exports={version:\"2.6.10\"};\"number\"==typeof __e&&(__e=n)},\"5b4e\":function(t,e,n){var r=n(\"36c3\"),i=n(\"b447\"),o=n(\"0fc9\");t.exports=function(t){return function(e,n,c){var u,a=r(e),s=i(a.length),f=o(c,s);if(t&&n!=n){while(s>f)if(u=a[f++],u!=u)return!0}else for(;s>f;f++)if((t||f in a)&&a[f]===n)return t||f||0;return!t&&-1}}},\"5c95\":function(t,e,n){var r=n(\"35e8\");t.exports=function(t,e,n){for(var i in e)n&&t[i]?t[i]=e[i]:r(t,i,e[i]);return t}},\"5ca1\":function(t,e,n){var r=n(\"7726\"),i=n(\"8378\"),o=n(\"32e9\"),c=n(\"2aba\"),u=n(\"9b43\"),a=\"prototype\",s=function(t,e,n){var f,l,p,h,v=t&s.F,d=t&s.G,y=t&s.S,b=t&s.P,g=t&s.B,m=d?r:y?r[e]||(r[e]={}):(r[e]||{})[a],x=d?i:i[e]||(i[e]={}),w=x[a]||(x[a]={});for(f in d&&(n=e),n)l=!v&&m&&void 0!==m[f],p=(l?m:n)[f],h=g&&l?u(p,r):b&&\"function\"==typeof p?u(Function.call,p):p,m&&c(m,f,p,t&s.U),x[f]!=p&&o(x,f,h),b&&w[f]!=p&&(w[f]=p)};r.core=i,s.F=1,s.G=2,s.S=4,s.P=8,s.B=16,s.W=32,s.U=64,s.R=128,t.exports=s},\"5cc5\":function(t,e,n){var r=n(\"2b4c\")(\"iterator\"),i=!1;try{var o=[7][r]();o[\"return\"]=function(){i=!0},Array.from(o,(function(){throw 2}))}catch(c){}t.exports=function(t,e){if(!e&&!i)return!1;var n=!1;try{var o=[7],u=o[r]();u.next=function(){return{done:n=!0}},o[r]=function(){return u},t(o)}catch(c){}return n}},\"5d58\":function(t,e,n){t.exports=n(\"d8d6\")},\"5dbc\":function(t,e,n){var r=n(\"d3f4\"),i=n(\"8b97\").set;t.exports=function(t,e,n){var o,c=e.constructor;return c!==n&&\"function\"==typeof c&&(o=c.prototype)!==n.prototype&&r(o)&&i&&i(t,o),t}},\"5eda\":function(t,e,n){var r=n(\"5ca1\"),i=n(\"8378\"),o=n(\"79e5\");t.exports=function(t,e){var n=(i.Object||{})[t]||Object[t],c={};c[t]=e(n),r(r.S+r.F*o((function(){n(1)})),\"Object\",c)}},\"5f1b\":function(t,e,n){\"use strict\";var r=n(\"23c6\"),i=RegExp.prototype.exec;t.exports=function(t,e){var n=t.exec;if(\"function\"===typeof n){var o=n.call(t,e);if(\"object\"!==typeof o)throw new TypeError(\"RegExp exec method returned something other than an Object or null\");return o}if(\"RegExp\"!==r(t))throw new TypeError(\"RegExp#exec called on incompatible receiver\");return i.call(t,e)}},\"613b\":function(t,e,n){var r=n(\"5537\")(\"keys\"),i=n(\"ca5a\");t.exports=function(t){return r[t]||(r[t]=i(t))}},\"626a\":function(t,e,n){var r=n(\"2d95\");t.exports=Object(\"z\").propertyIsEnumerable(0)?Object:function(t){return\"String\"==r(t)?t.split(\"\"):Object(t)}},\"62a0\":function(t,e){var n=0,r=Math.random();t.exports=function(t){return\"Symbol(\".concat(void 0===t?\"\":t,\")_\",(++n+r).toString(36))}},\"63b6\":function(t,e,n){var r=n(\"e53d\"),i=n(\"584a\"),o=n(\"d864\"),c=n(\"35e8\"),u=n(\"07e3\"),a=\"prototype\",s=function(t,e,n){var f,l,p,h=t&s.F,v=t&s.G,d=t&s.S,y=t&s.P,b=t&s.B,g=t&s.W,m=v?i:i[e]||(i[e]={}),x=m[a],w=v?r:d?r[e]:(r[e]||{})[a];for(f in v&&(n=e),n)l=!h&&w&&void 0!==w[f],l&&u(m,f)||(p=l?w[f]:n[f],m[f]=v&&\"function\"!=typeof w[f]?n[f]:b&&l?o(p,r):g&&w[f]==p?function(t){var e=function(e,n,r){if(this instanceof t){switch(arguments.length){case 0:return new t;case 1:return new t(e);case 2:return new t(e,n)}return new t(e,n,r)}return t.apply(this,arguments)};return e[a]=t[a],e}(p):y&&\"function\"==typeof p?o(Function.call,p):p,y&&((m.virtual||(m.virtual={}))[f]=p,t&s.R&&x&&!x[f]&&c(x,f,p)))};s.F=1,s.G=2,s.S=4,s.P=8,s.B=16,s.W=32,s.U=64,s.R=128,t.exports=s},\"63c6\":function(t,e,n){\"use strict\";var r=n(\"3620\"),i=n.n(r);i.a},\"656e\":function(t,e,n){\"use strict\";var r=n(\"79aa\");function i(t){var e,n;this.promise=new t((function(t,r){if(void 0!==e||void 0!==n)throw TypeError(\"Bad Promise constructor\");e=t,n=r})),this.resolve=r(e),this.reject=r(n)}t.exports.f=function(t){return new i(t)}},6718:function(t,e,n){var r=n(\"e53d\"),i=n(\"584a\"),o=n(\"b8e3\"),c=n(\"ccb9\"),u=n(\"d9f6\").f;t.exports=function(t){var e=i.Symbol||(i.Symbol=o?{}:r.Symbol||{});\"_\"==t.charAt(0)||t in e||u(e,t,{value:c.f(t)})}},6762:function(t,e,n){\"use strict\";var r=n(\"5ca1\"),i=n(\"c366\")(!0);r(r.P,\"Array\",{includes:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}}),n(\"9c6c\")(\"includes\")},\"67bb\":function(t,e,n){t.exports=n(\"f921\")},6821:function(t,e,n){var r=n(\"626a\"),i=n(\"be13\");t.exports=function(t){return r(i(t))}},\"696e\":function(t,e,n){n(\"c207\"),n(\"1654\"),n(\"6c1c\"),n(\"24c5\"),n(\"3c11\"),n(\"43fc\"),t.exports=n(\"584a\").Promise},\"69a8\":function(t,e){var n={}.hasOwnProperty;t.exports=function(t,e){return n.call(t,e)}},\"69d3\":function(t,e,n){n(\"6718\")(\"asyncIterator\")},\"6a99\":function(t,e,n){var r=n(\"d3f4\");t.exports=function(t,e){if(!r(t))return t;var n,i;if(e&&\"function\"==typeof(n=t.toString)&&!r(i=n.call(t)))return i;if(\"function\"==typeof(n=t.valueOf)&&!r(i=n.call(t)))return i;if(!e&&\"function\"==typeof(n=t.toString)&&!r(i=n.call(t)))return i;throw TypeError(\"Can't convert object to primitive value\")}},\"6abf\":function(t,e,n){var r=n(\"e6f3\"),i=n(\"1691\").concat(\"length\",\"prototype\");e.f=Object.getOwnPropertyNames||function(t){return r(t,i)}},\"6b4c\":function(t,e){var n={}.toString;t.exports=function(t){return n.call(t).slice(8,-1)}},\"6c1c\":function(t,e,n){n(\"c367\");for(var r=n(\"e53d\"),i=n(\"35e8\"),o=n(\"481b\"),c=n(\"5168\")(\"toStringTag\"),u=\"CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,TextTrackList,TouchList\".split(\",\"),a=0;a<u.length;a++){var s=u[a],f=r[s],l=f&&f.prototype;l&&!l[c]&&i(l,c,s),o[s]=o.Array}},\"71c1\":function(t,e,n){var r=n(\"3a38\"),i=n(\"25eb\");t.exports=function(t){return function(e,n){var o,c,u=String(i(e)),a=r(n),s=u.length;return a<0||a>=s?t?\"\":void 0:(o=u.charCodeAt(a),o<55296||o>56319||a+1===s||(c=u.charCodeAt(a+1))<56320||c>57343?t?u.charAt(a):o:t?u.slice(a,a+2):c-56320+(o-55296<<10)+65536)}}},7333:function(t,e,n){\"use strict\";var r=n(\"9e1e\"),i=n(\"0d58\"),o=n(\"2621\"),c=n(\"52a7\"),u=n(\"4bf8\"),a=n(\"626a\"),s=Object.assign;t.exports=!s||n(\"79e5\")((function(){var t={},e={},n=Symbol(),r=\"abcdefghijklmnopqrst\";return t[n]=7,r.split(\"\").forEach((function(t){e[t]=t})),7!=s({},t)[n]||Object.keys(s({},e)).join(\"\")!=r}))?function(t,e){var n=u(t),s=arguments.length,f=1,l=o.f,p=c.f;while(s>f){var h,v=a(arguments[f++]),d=l?i(v).concat(l(v)):i(v),y=d.length,b=0;while(y>b)h=d[b++],r&&!p.call(v,h)||(n[h]=v[h])}return n}:s},7514:function(t,e,n){\"use strict\";var r=n(\"5ca1\"),i=n(\"0a49\")(5),o=\"find\",c=!0;o in[]&&Array(1)[o]((function(){c=!1})),r(r.P+r.F*c,\"Array\",{find:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}}),n(\"9c6c\")(o)},\"765d\":function(t,e,n){n(\"6718\")(\"observable\")},7726:function(t,e){var n=t.exports=\"undefined\"!=typeof window&&window.Math==Math?window:\"undefined\"!=typeof self&&self.Math==Math?self:Function(\"return this\")();\"number\"==typeof __g&&(__g=n)},\"774e\":function(t,e,n){t.exports=n(\"d2d5\")},\"77f1\":function(t,e,n){var r=n(\"4588\"),i=Math.max,o=Math.min;t.exports=function(t,e){return t=r(t),t<0?i(t+e,0):o(t,e)}},\"794b\":function(t,e,n){t.exports=!n(\"8e60\")&&!n(\"294c\")((function(){return 7!=Object.defineProperty(n(\"1ec9\")(\"div\"),\"a\",{get:function(){return 7}}).a}))},\"795b\":function(t,e,n){t.exports=n(\"696e\")},\"79aa\":function(t,e){t.exports=function(t){if(\"function\"!=typeof t)throw TypeError(t+\" is not a function!\");return t}},\"79e5\":function(t,e){t.exports=function(t){try{return!!t()}catch(e){return!0}}},\"7a56\":function(t,e,n){\"use strict\";var r=n(\"7726\"),i=n(\"86cc\"),o=n(\"9e1e\"),c=n(\"2b4c\")(\"species\");t.exports=function(t){var e=r[t];o&&e&&!e[c]&&i.f(e,c,{configurable:!0,get:function(){return this}})}},\"7cd6\":function(t,e,n){var r=n(\"40c3\"),i=n(\"5168\")(\"iterator\"),o=n(\"481b\");t.exports=n(\"584a\").getIteratorMethod=function(t){if(void 0!=t)return t[i]||t[\"@@iterator\"]||o[r(t)]}},\"7e90\":function(t,e,n){var r=n(\"d9f6\"),i=n(\"e4ae\"),o=n(\"c3a1\");t.exports=n(\"8e60\")?Object.defineProperties:function(t,e){i(t);var n,c=o(e),u=c.length,a=0;while(u>a)r.f(t,n=c[a++],e[n]);return t}},\"7f20\":function(t,e,n){var r=n(\"86cc\").f,i=n(\"69a8\"),o=n(\"2b4c\")(\"toStringTag\");t.exports=function(t,e,n){t&&!i(t=n?t:t.prototype,o)&&r(t,o,{configurable:!0,value:e})}},\"7f7f\":function(t,e,n){var r=n(\"86cc\").f,i=Function.prototype,o=/^\\s*function ([^ (]*)/,c=\"name\";c in i||n(\"9e1e\")&&r(i,c,{configurable:!0,get:function(){try{return(\"\"+this).match(o)[1]}catch(t){return\"\"}}})},8079:function(t,e,n){var r=n(\"7726\"),i=n(\"1991\").set,o=r.MutationObserver||r.WebKitMutationObserver,c=r.process,u=r.Promise,a=\"process\"==n(\"2d95\")(c);t.exports=function(){var t,e,n,s=function(){var r,i;a&&(r=c.domain)&&r.exit();while(t){i=t.fn,t=t.next;try{i()}catch(o){throw t?n():e=void 0,o}}e=void 0,r&&r.enter()};if(a)n=function(){c.nextTick(s)};else if(!o||r.navigator&&r.navigator.standalone)if(u&&u.resolve){var f=u.resolve(void 0);n=function(){f.then(s)}}else n=function(){i.call(r,s)};else{var l=!0,p=document.createTextNode(\"\");new o(s).observe(p,{characterData:!0}),n=function(){p.data=l=!l}}return function(r){var i={fn:r,next:void 0};e&&(e.next=i),t||(t=i,n()),e=i}}},8378:function(t,e){var n=t.exports={version:\"2.6.10\"};\"number\"==typeof __e&&(__e=n)},\"83a1\":function(t,e){t.exports=Object.is||function(t,e){return t===e?0!==t||1/t===1/e:t!=t&&e!=e}},8436:function(t,e){t.exports=function(){}},\"84f2\":function(t,e){t.exports={}},\"85f2\":function(t,e,n){t.exports=n(\"454f\")},8615:function(t,e,n){var r=n(\"5ca1\"),i=n(\"504c\")(!1);r(r.S,\"Object\",{values:function(t){return i(t)}})},\"86cc\":function(t,e,n){var r=n(\"cb7c\"),i=n(\"c69a\"),o=n(\"6a99\"),c=Object.defineProperty;e.f=n(\"9e1e\")?Object.defineProperty:function(t,e,n){if(r(t),e=o(e,!0),r(n),i)try{return c(t,e,n)}catch(u){}if(\"get\"in n||\"set\"in n)throw TypeError(\"Accessors not supported!\");return\"value\"in n&&(t[e]=n.value),t}},\"8b97\":function(t,e,n){var r=n(\"d3f4\"),i=n(\"cb7c\"),o=function(t,e){if(i(t),!r(e)&&null!==e)throw TypeError(e+\": can't set as prototype!\")};t.exports={set:Object.setPrototypeOf||(\"__proto__\"in{}?function(t,e,r){try{r=n(\"9b43\")(Function.call,n(\"11e9\").f(Object.prototype,\"__proto__\").set,2),r(t,[]),e=!(t instanceof Array)}catch(i){e=!0}return function(t,n){return o(t,n),e?t.__proto__=n:r(t,n),t}}({},!1):void 0),check:o}},\"8e60\":function(t,e,n){t.exports=!n(\"294c\")((function(){return 7!=Object.defineProperty({},\"a\",{get:function(){return 7}}).a}))},\"8e6e\":function(t,e,n){var r=n(\"5ca1\"),i=n(\"990b\"),o=n(\"6821\"),c=n(\"11e9\"),u=n(\"f1ae\");r(r.S,\"Object\",{getOwnPropertyDescriptors:function(t){var e,n,r=o(t),a=c.f,s=i(r),f={},l=0;while(s.length>l)n=a(r,e=s[l++]),void 0!==n&&u(f,e,n);return f}})},\"8f60\":function(t,e,n){\"use strict\";var r=n(\"a159\"),i=n(\"aebd\"),o=n(\"45f2\"),c={};n(\"35e8\")(c,n(\"5168\")(\"iterator\"),(function(){return this})),t.exports=function(t,e,n){t.prototype=r(c,{next:i(1,n)}),o(t,e+\" Iterator\")}},9003:function(t,e,n){var r=n(\"6b4c\");t.exports=Array.isArray||function(t){return\"Array\"==r(t)}},9093:function(t,e,n){var r=n(\"ce10\"),i=n(\"e11e\").concat(\"length\",\"prototype\");e.f=Object.getOwnPropertyNames||function(t){return r(t,i)}},9138:function(t,e,n){t.exports=n(\"35e8\")},9224:function(t){t.exports=JSON.parse('{\"a\":\"0.5.1\"}')},\"95d5\":function(t,e,n){var r=n(\"40c3\"),i=n(\"5168\")(\"iterator\"),o=n(\"481b\");t.exports=n(\"584a\").isIterable=function(t){var e=Object(t);return void 0!==e[i]||\"@@iterator\"in e||o.hasOwnProperty(r(e))}},\"96cf\":function(t,e,n){var r=function(t){\"use strict\";var e,n=Object.prototype,r=n.hasOwnProperty,i=\"function\"===typeof Symbol?Symbol:{},o=i.iterator||\"@@iterator\",c=i.asyncIterator||\"@@asyncIterator\",u=i.toStringTag||\"@@toStringTag\";function a(t,e,n,r){var i=e&&e.prototype instanceof d?e:d,o=Object.create(i.prototype),c=new P(r||[]);return o._invoke=O(t,n,c),o}function s(t,e,n){try{return{type:\"normal\",arg:t.call(e,n)}}catch(r){return{type:\"throw\",arg:r}}}t.wrap=a;var f=\"suspendedStart\",l=\"suspendedYield\",p=\"executing\",h=\"completed\",v={};function d(){}function y(){}function b(){}var g={};g[o]=function(){return this};var m=Object.getPrototypeOf,x=m&&m(m(A([])));x&&x!==n&&r.call(x,o)&&(g=x);var w=b.prototype=d.prototype=Object.create(g);function _(t){[\"next\",\"throw\",\"return\"].forEach((function(e){t[e]=function(t){return this._invoke(e,t)}}))}function S(t){function e(n,i,o,c){var u=s(t[n],t,i);if(\"throw\"!==u.type){var a=u.arg,f=a.value;return f&&\"object\"===typeof f&&r.call(f,\"__await\")?Promise.resolve(f.__await).then((function(t){e(\"next\",t,o,c)}),(function(t){e(\"throw\",t,o,c)})):Promise.resolve(f).then((function(t){a.value=t,o(a)}),(function(t){return e(\"throw\",t,o,c)}))}c(u.arg)}var n;function i(t,r){function i(){return new Promise((function(n,i){e(t,r,n,i)}))}return n=n?n.then(i,i):i()}this._invoke=i}function O(t,e,n){var r=f;return function(i,o){if(r===p)throw new Error(\"Generator is already running\");if(r===h){if(\"throw\"===i)throw o;return L()}n.method=i,n.arg=o;while(1){var c=n.delegate;if(c){var u=k(c,n);if(u){if(u===v)continue;return u}}if(\"next\"===n.method)n.sent=n._sent=n.arg;else if(\"throw\"===n.method){if(r===f)throw r=h,n.arg;n.dispatchException(n.arg)}else\"return\"===n.method&&n.abrupt(\"return\",n.arg);r=p;var a=s(t,e,n);if(\"normal\"===a.type){if(r=n.done?h:l,a.arg===v)continue;return{value:a.arg,done:n.done}}\"throw\"===a.type&&(r=h,n.method=\"throw\",n.arg=a.arg)}}}function k(t,n){var r=t.iterator[n.method];if(r===e){if(n.delegate=null,\"throw\"===n.method){if(t.iterator[\"return\"]&&(n.method=\"return\",n.arg=e,k(t,n),\"throw\"===n.method))return v;n.method=\"throw\",n.arg=new TypeError(\"The iterator does not provide a 'throw' method\")}return v}var i=s(r,t.iterator,n.arg);if(\"throw\"===i.type)return n.method=\"throw\",n.arg=i.arg,n.delegate=null,v;var o=i.arg;return o?o.done?(n[t.resultName]=o.value,n.next=t.nextLoc,\"return\"!==n.method&&(n.method=\"next\",n.arg=e),n.delegate=null,v):o:(n.method=\"throw\",n.arg=new TypeError(\"iterator result is not an object\"),n.delegate=null,v)}function j(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function E(t){var e=t.completion||{};e.type=\"normal\",delete e.arg,t.completion=e}function P(t){this.tryEntries=[{tryLoc:\"root\"}],t.forEach(j,this),this.reset(!0)}function A(t){if(t){var n=t[o];if(n)return n.call(t);if(\"function\"===typeof t.next)return t;if(!isNaN(t.length)){var i=-1,c=function n(){while(++i<t.length)if(r.call(t,i))return n.value=t[i],n.done=!1,n;return n.value=e,n.done=!0,n};return c.next=c}}return{next:L}}function L(){return{value:e,done:!0}}return y.prototype=w.constructor=b,b.constructor=y,b[u]=y.displayName=\"GeneratorFunction\",t.isGeneratorFunction=function(t){var e=\"function\"===typeof t&&t.constructor;return!!e&&(e===y||\"GeneratorFunction\"===(e.displayName||e.name))},t.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,b):(t.__proto__=b,u in t||(t[u]=\"GeneratorFunction\")),t.prototype=Object.create(w),t},t.awrap=function(t){return{__await:t}},_(S.prototype),S.prototype[c]=function(){return this},t.AsyncIterator=S,t.async=function(e,n,r,i){var o=new S(a(e,n,r,i));return t.isGeneratorFunction(n)?o:o.next().then((function(t){return t.done?t.value:o.next()}))},_(w),w[u]=\"Generator\",w[o]=function(){return this},w.toString=function(){return\"[object Generator]\"},t.keys=function(t){var e=[];for(var n in t)e.push(n);return e.reverse(),function n(){while(e.length){var r=e.pop();if(r in t)return n.value=r,n.done=!1,n}return n.done=!0,n}},t.values=A,P.prototype={constructor:P,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method=\"next\",this.arg=e,this.tryEntries.forEach(E),!t)for(var n in this)\"t\"===n.charAt(0)&&r.call(this,n)&&!isNaN(+n.slice(1))&&(this[n]=e)},stop:function(){this.done=!0;var t=this.tryEntries[0],e=t.completion;if(\"throw\"===e.type)throw e.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var n=this;function i(r,i){return u.type=\"throw\",u.arg=t,n.next=r,i&&(n.method=\"next\",n.arg=e),!!i}for(var o=this.tryEntries.length-1;o>=0;--o){var c=this.tryEntries[o],u=c.completion;if(\"root\"===c.tryLoc)return i(\"end\");if(c.tryLoc<=this.prev){var a=r.call(c,\"catchLoc\"),s=r.call(c,\"finallyLoc\");if(a&&s){if(this.prev<c.catchLoc)return i(c.catchLoc,!0);if(this.prev<c.finallyLoc)return i(c.finallyLoc)}else if(a){if(this.prev<c.catchLoc)return i(c.catchLoc,!0)}else{if(!s)throw new Error(\"try statement without catch or finally\");if(this.prev<c.finallyLoc)return i(c.finallyLoc)}}}},abrupt:function(t,e){for(var n=this.tryEntries.length-1;n>=0;--n){var i=this.tryEntries[n];if(i.tryLoc<=this.prev&&r.call(i,\"finallyLoc\")&&this.prev<i.finallyLoc){var o=i;break}}o&&(\"break\"===t||\"continue\"===t)&&o.tryLoc<=e&&e<=o.finallyLoc&&(o=null);var c=o?o.completion:{};return c.type=t,c.arg=e,o?(this.method=\"next\",this.next=o.finallyLoc,v):this.complete(c)},complete:function(t,e){if(\"throw\"===t.type)throw t.arg;return\"break\"===t.type||\"continue\"===t.type?this.next=t.arg:\"return\"===t.type?(this.rval=this.arg=t.arg,this.method=\"return\",this.next=\"end\"):\"normal\"===t.type&&e&&(this.next=e),v},finish:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.finallyLoc===t)return this.complete(n.completion,n.afterLoc),E(n),v}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.tryLoc===t){var r=n.completion;if(\"throw\"===r.type){var i=r.arg;E(n)}return i}}throw new Error(\"illegal catch attempt\")},delegateYield:function(t,n,r){return this.delegate={iterator:A(t),resultName:n,nextLoc:r},\"next\"===this.method&&(this.arg=e),v}},t}(t.exports);try{regeneratorRuntime=r}catch(i){Function(\"r\",\"regeneratorRuntime = r\")(r)}},\"990b\":function(t,e,n){var r=n(\"9093\"),i=n(\"2621\"),o=n(\"cb7c\"),c=n(\"7726\").Reflect;t.exports=c&&c.ownKeys||function(t){var e=r.f(o(t)),n=i.f;return n?e.concat(n(t)):e}},\"9aa9\":function(t,e){e.f=Object.getOwnPropertySymbols},\"9b43\":function(t,e,n){var r=n(\"d8e8\");t.exports=function(t,e,n){if(r(t),void 0===e)return t;switch(n){case 1:return function(n){return t.call(e,n)};case 2:return function(n,r){return t.call(e,n,r)};case 3:return function(n,r,i){return t.call(e,n,r,i)}}return function(){return t.apply(e,arguments)}}},\"9c6c\":function(t,e,n){var r=n(\"2b4c\")(\"unscopables\"),i=Array.prototype;void 0==i[r]&&n(\"32e9\")(i,r,{}),t.exports=function(t){i[r][t]=!0}},\"9c80\":function(t,e){t.exports=function(t){try{return{e:!1,v:t()}}catch(e){return{e:!0,v:e}}}},\"9def\":function(t,e,n){var r=n(\"4588\"),i=Math.min;t.exports=function(t){return t>0?i(r(t),9007199254740991):0}},\"9e1e\":function(t,e,n){t.exports=!n(\"79e5\")((function(){return 7!=Object.defineProperty({},\"a\",{get:function(){return 7}}).a}))},a159:function(t,e,n){var r=n(\"e4ae\"),i=n(\"7e90\"),o=n(\"1691\"),c=n(\"5559\")(\"IE_PROTO\"),u=function(){},a=\"prototype\",s=function(){var t,e=n(\"1ec9\")(\"iframe\"),r=o.length,i=\"<\",c=\">\";e.style.display=\"none\",n(\"32fc\").appendChild(e),e.src=\"javascript:\",t=e.contentWindow.document,t.open(),t.write(i+\"script\"+c+\"document.F=Object\"+i+\"/script\"+c),t.close(),s=t.F;while(r--)delete s[a][o[r]];return s()};t.exports=Object.create||function(t,e){var n;return null!==t?(u[a]=r(t),n=new u,u[a]=null,n[c]=t):n=s(),void 0===e?n:i(n,e)}},a22a:function(t,e,n){var r=n(\"d864\"),i=n(\"b0dc\"),o=n(\"3702\"),c=n(\"e4ae\"),u=n(\"b447\"),a=n(\"7cd6\"),s={},f={};e=t.exports=function(t,e,n,l,p){var h,v,d,y,b=p?function(){return t}:a(t),g=r(n,l,e?2:1),m=0;if(\"function\"!=typeof b)throw TypeError(t+\" is not iterable!\");if(o(b)){for(h=u(t.length);h>m;m++)if(y=e?g(c(v=t[m])[0],v[1]):g(t[m]),y===s||y===f)return y}else for(d=b.call(t);!(v=d.next()).done;)if(y=i(d,g,v.value,e),y===s||y===f)return y};e.BREAK=s,e.RETURN=f},a25f:function(t,e,n){var r=n(\"7726\"),i=r.navigator;t.exports=i&&i.userAgent||\"\"},a481:function(t,e,n){\"use strict\";var r=n(\"cb7c\"),i=n(\"4bf8\"),o=n(\"9def\"),c=n(\"4588\"),u=n(\"0390\"),a=n(\"5f1b\"),s=Math.max,f=Math.min,l=Math.floor,p=/\\$([$&`']|\\d\\d?|<[^>]*>)/g,h=/\\$([$&`']|\\d\\d?)/g,v=function(t){return void 0===t?t:String(t)};n(\"214f\")(\"replace\",2,(function(t,e,n,d){return[function(r,i){var o=t(this),c=void 0==r?void 0:r[e];return void 0!==c?c.call(r,o,i):n.call(String(o),r,i)},function(t,e){var i=d(n,t,this,e);if(i.done)return i.value;var l=r(t),p=String(this),h=\"function\"===typeof e;h||(e=String(e));var b=l.global;if(b){var g=l.unicode;l.lastIndex=0}var m=[];while(1){var x=a(l,p);if(null===x)break;if(m.push(x),!b)break;var w=String(x[0]);\"\"===w&&(l.lastIndex=u(p,o(l.lastIndex),g))}for(var _=\"\",S=0,O=0;O<m.length;O++){x=m[O];for(var k=String(x[0]),j=s(f(c(x.index),p.length),0),E=[],P=1;P<x.length;P++)E.push(v(x[P]));var A=x.groups;if(h){var L=[k].concat(E,j,p);void 0!==A&&L.push(A);var T=String(e.apply(void 0,L))}else T=y(k,p,j,E,A,e);j>=S&&(_+=p.slice(S,j)+T,S=j+k.length)}return _+p.slice(S)}];function y(t,e,r,o,c,u){var a=r+t.length,s=o.length,f=h;return void 0!==c&&(c=i(c),f=p),n.call(u,f,(function(n,i){var u;switch(i.charAt(0)){case\"$\":return\"$\";case\"&\":return t;case\"`\":return e.slice(0,r);case\"'\":return e.slice(a);case\"<\":u=c[i.slice(1,-1)];break;default:var f=+i;if(0===f)return n;if(f>s){var p=l(f/10);return 0===p?n:p<=s?void 0===o[p-1]?i.charAt(1):o[p-1]+i.charAt(1):n}u=o[f-1]}return void 0===u?\"\":u}))}}))},a5b8:function(t,e,n){\"use strict\";var r=n(\"d8e8\");function i(t){var e,n;this.promise=new t((function(t,r){if(void 0!==e||void 0!==n)throw TypeError(\"Bad Promise constructor\");e=t,n=r})),this.resolve=r(e),this.reject=r(n)}t.exports.f=function(t){return new i(t)}},a745:function(t,e,n){t.exports=n(\"f410\")},aa77:function(t,e,n){var r=n(\"5ca1\"),i=n(\"be13\"),o=n(\"79e5\"),c=n(\"fdef\"),u=\"[\"+c+\"]\",a=\"​…\",s=RegExp(\"^\"+u+u+\"*\"),f=RegExp(u+u+\"*$\"),l=function(t,e,n){var i={},u=o((function(){return!!c[t]()||a[t]()!=a})),s=i[t]=u?e(p):c[t];n&&(i[n]=s),r(r.P+r.F*u,\"String\",i)},p=l.trim=function(t,e){return t=String(i(t)),1&e&&(t=t.replace(s,\"\")),2&e&&(t=t.replace(f,\"\")),t};t.exports=l},aae3:function(t,e,n){var r=n(\"d3f4\"),i=n(\"2d95\"),o=n(\"2b4c\")(\"match\");t.exports=function(t){var e;return r(t)&&(void 0!==(e=t[o])?!!e:\"RegExp\"==i(t))}},aba2:function(t,e,n){var r=n(\"e53d\"),i=n(\"4178\").set,o=r.MutationObserver||r.WebKitMutationObserver,c=r.process,u=r.Promise,a=\"process\"==n(\"6b4c\")(c);t.exports=function(){var t,e,n,s=function(){var r,i;a&&(r=c.domain)&&r.exit();while(t){i=t.fn,t=t.next;try{i()}catch(o){throw t?n():e=void 0,o}}e=void 0,r&&r.enter()};if(a)n=function(){c.nextTick(s)};else if(!o||r.navigator&&r.navigator.standalone)if(u&&u.resolve){var f=u.resolve(void 0);n=function(){f.then(s)}}else n=function(){i.call(r,s)};else{var l=!0,p=document.createTextNode(\"\");new o(s).observe(p,{characterData:!0}),n=function(){p.data=l=!l}}return function(r){var i={fn:r,next:void 0};e&&(e.next=i),t||(t=i,n()),e=i}}},ac6a:function(t,e,n){for(var r=n(\"cadf\"),i=n(\"0d58\"),o=n(\"2aba\"),c=n(\"7726\"),u=n(\"32e9\"),a=n(\"84f2\"),s=n(\"2b4c\"),f=s(\"iterator\"),l=s(\"toStringTag\"),p=a.Array,h={CSSRuleList:!0,CSSStyleDeclaration:!1,CSSValueList:!1,ClientRectList:!1,DOMRectList:!1,DOMStringList:!1,DOMTokenList:!0,DataTransferItemList:!1,FileList:!1,HTMLAllCollection:!1,HTMLCollection:!1,HTMLFormElement:!1,HTMLSelectElement:!1,MediaList:!0,MimeTypeArray:!1,NamedNodeMap:!1,NodeList:!0,PaintRequestList:!1,Plugin:!1,PluginArray:!1,SVGLengthList:!1,SVGNumberList:!1,SVGPathSegList:!1,SVGPointList:!1,SVGStringList:!1,SVGTransformList:!1,SourceBufferList:!1,StyleSheetList:!0,TextTrackCueList:!1,TextTrackList:!1,TouchList:!1},v=i(h),d=0;d<v.length;d++){var y,b=v[d],g=h[b],m=c[b],x=m&&m.prototype;if(x&&(x[f]||u(x,f,p),x[l]||u(x,l,b),a[b]=p,g))for(y in r)x[y]||o(x,y,r[y],!0)}},aebd:function(t,e){t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},b0c5:function(t,e,n){\"use strict\";var r=n(\"520a\");n(\"5ca1\")({target:\"RegExp\",proto:!0,forced:r!==/./.exec},{exec:r})},b0dc:function(t,e,n){var r=n(\"e4ae\");t.exports=function(t,e,n,i){try{return i?e(r(n)[0],n[1]):e(n)}catch(c){var o=t[\"return\"];throw void 0!==o&&r(o.call(t)),c}}},b447:function(t,e,n){var r=n(\"3a38\"),i=Math.min;t.exports=function(t){return t>0?i(r(t),9007199254740991):0}},b8e3:function(t,e){t.exports=!0},bc13:function(t,e,n){var r=n(\"e53d\"),i=r.navigator;t.exports=i&&i.userAgent||\"\"},bcaa:function(t,e,n){var r=n(\"cb7c\"),i=n(\"d3f4\"),o=n(\"a5b8\");t.exports=function(t,e){if(r(t),i(e)&&e.constructor===t)return e;var n=o.f(t),c=n.resolve;return c(e),n.promise}},be13:function(t,e){t.exports=function(t){if(void 0==t)throw TypeError(\"Can't call method on  \"+t);return t}},bf0b:function(t,e,n){var r=n(\"355d\"),i=n(\"aebd\"),o=n(\"36c3\"),c=n(\"1bc3\"),u=n(\"07e3\"),a=n(\"794b\"),s=Object.getOwnPropertyDescriptor;e.f=n(\"8e60\")?s:function(t,e){if(t=o(t),e=c(e,!0),a)try{return s(t,e)}catch(n){}if(u(t,e))return i(!r.f.call(t,e),t[e])}},c207:function(t,e){},c366:function(t,e,n){var r=n(\"6821\"),i=n(\"9def\"),o=n(\"77f1\");t.exports=function(t){return function(e,n,c){var u,a=r(e),s=i(a.length),f=o(c,s);if(t&&n!=n){while(s>f)if(u=a[f++],u!=u)return!0}else for(;s>f;f++)if((t||f in a)&&a[f]===n)return t||f||0;return!t&&-1}}},c367:function(t,e,n){\"use strict\";var r=n(\"8436\"),i=n(\"50ed\"),o=n(\"481b\"),c=n(\"36c3\");t.exports=n(\"30f1\")(Array,\"Array\",(function(t,e){this._t=c(t),this._i=0,this._k=e}),(function(){var t=this._t,e=this._k,n=this._i++;return!t||n>=t.length?(this._t=void 0,i(1)):i(0,\"keys\"==e?n:\"values\"==e?t[n]:[n,t[n]])}),\"values\"),o.Arguments=o.Array,r(\"keys\"),r(\"values\"),r(\"entries\")},c3a1:function(t,e,n){var r=n(\"e6f3\"),i=n(\"1691\");t.exports=Object.keys||function(t){return r(t,i)}},c5f6:function(t,e,n){\"use strict\";var r=n(\"7726\"),i=n(\"69a8\"),o=n(\"2d95\"),c=n(\"5dbc\"),u=n(\"6a99\"),a=n(\"79e5\"),s=n(\"9093\").f,f=n(\"11e9\").f,l=n(\"86cc\").f,p=n(\"aa77\").trim,h=\"Number\",v=r[h],d=v,y=v.prototype,b=o(n(\"2aeb\")(y))==h,g=\"trim\"in String.prototype,m=function(t){var e=u(t,!1);if(\"string\"==typeof e&&e.length>2){e=g?e.trim():p(e,3);var n,r,i,o=e.charCodeAt(0);if(43===o||45===o){if(n=e.charCodeAt(2),88===n||120===n)return NaN}else if(48===o){switch(e.charCodeAt(1)){case 66:case 98:r=2,i=49;break;case 79:case 111:r=8,i=55;break;default:return+e}for(var c,a=e.slice(2),s=0,f=a.length;s<f;s++)if(c=a.charCodeAt(s),c<48||c>i)return NaN;return parseInt(a,r)}}return+e};if(!v(\" 0o1\")||!v(\"0b1\")||v(\"+0x1\")){v=function(t){var e=arguments.length<1?0:t,n=this;return n instanceof v&&(b?a((function(){y.valueOf.call(n)})):o(n)!=h)?c(new d(m(e)),n,v):m(e)};for(var x,w=n(\"9e1e\")?s(d):\"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger\".split(\",\"),_=0;w.length>_;_++)i(d,x=w[_])&&!i(v,x)&&l(v,x,f(d,x));v.prototype=y,y.constructor=v,n(\"2aba\")(r,h,v)}},c69a:function(t,e,n){t.exports=!n(\"9e1e\")&&!n(\"79e5\")((function(){return 7!=Object.defineProperty(n(\"230e\")(\"div\"),\"a\",{get:function(){return 7}}).a}))},c8bb:function(t,e,n){t.exports=n(\"54a1\")},ca5a:function(t,e){var n=0,r=Math.random();t.exports=function(t){return\"Symbol(\".concat(void 0===t?\"\":t,\")_\",(++n+r).toString(36))}},cadf:function(t,e,n){\"use strict\";var r=n(\"9c6c\"),i=n(\"d53b\"),o=n(\"84f2\"),c=n(\"6821\");t.exports=n(\"01f9\")(Array,\"Array\",(function(t,e){this._t=c(t),this._i=0,this._k=e}),(function(){var t=this._t,e=this._k,n=this._i++;return!t||n>=t.length?(this._t=void 0,i(1)):i(0,\"keys\"==e?n:\"values\"==e?t[n]:[n,t[n]])}),\"values\"),o.Arguments=o.Array,r(\"keys\"),r(\"values\"),r(\"entries\")},cb7c:function(t,e,n){var r=n(\"d3f4\");t.exports=function(t){if(!r(t))throw TypeError(t+\" is not an object!\");return t}},ccb9:function(t,e,n){e.f=n(\"5168\")},cd1c:function(t,e,n){var r=n(\"e853\");t.exports=function(t,e){return new(r(t))(e)}},cd78:function(t,e,n){var r=n(\"e4ae\"),i=n(\"f772\"),o=n(\"656e\");t.exports=function(t,e){if(r(t),i(e)&&e.constructor===t)return e;var n=o.f(t),c=n.resolve;return c(e),n.promise}},ce10:function(t,e,n){var r=n(\"69a8\"),i=n(\"6821\"),o=n(\"c366\")(!1),c=n(\"613b\")(\"IE_PROTO\");t.exports=function(t,e){var n,u=i(t),a=0,s=[];for(n in u)n!=c&&r(u,n)&&s.push(n);while(e.length>a)r(u,n=e[a++])&&(~o(s,n)||s.push(n));return s}},d2c8:function(t,e,n){var r=n(\"aae3\"),i=n(\"be13\");t.exports=function(t,e,n){if(r(e))throw TypeError(\"String#\"+n+\" doesn't accept regex!\");return String(i(t))}},d2d5:function(t,e,n){n(\"1654\"),n(\"549b\"),t.exports=n(\"584a\").Array.from},d3f4:function(t,e){t.exports=function(t){return\"object\"===typeof t?null!==t:\"function\"===typeof t}},d53b:function(t,e){t.exports=function(t,e){return{value:e,done:!!t}}},d864:function(t,e,n){var r=n(\"79aa\");t.exports=function(t,e,n){if(r(t),void 0===e)return t;switch(n){case 1:return function(n){return t.call(e,n)};case 2:return function(n,r){return t.call(e,n,r)};case 3:return function(n,r,i){return t.call(e,n,r,i)}}return function(){return t.apply(e,arguments)}}},d8d6:function(t,e,n){n(\"1654\"),n(\"6c1c\"),t.exports=n(\"ccb9\").f(\"iterator\")},d8e8:function(t,e){t.exports=function(t){if(\"function\"!=typeof t)throw TypeError(t+\" is not a function!\");return t}},d9f6:function(t,e,n){var r=n(\"e4ae\"),i=n(\"794b\"),o=n(\"1bc3\"),c=Object.defineProperty;e.f=n(\"8e60\")?Object.defineProperty:function(t,e,n){if(r(t),e=o(e,!0),r(n),i)try{return c(t,e,n)}catch(u){}if(\"get\"in n||\"set\"in n)throw TypeError(\"Accessors not supported!\");return\"value\"in n&&(t[e]=n.value),t}},dbdb:function(t,e,n){var r=n(\"584a\"),i=n(\"e53d\"),o=\"__core-js_shared__\",c=i[o]||(i[o]={});(t.exports=function(t,e){return c[t]||(c[t]=void 0!==e?e:{})})(\"versions\",[]).push({version:r.version,mode:n(\"b8e3\")?\"pure\":\"global\",copyright:\"© 2019 Denis Pushkarev (zloirock.ru)\"})},dcbc:function(t,e,n){var r=n(\"2aba\");t.exports=function(t,e,n){for(var i in e)r(t,i,e[i],n);return t}},e11e:function(t,e){t.exports=\"constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf\".split(\",\")},e4ae:function(t,e,n){var r=n(\"f772\");t.exports=function(t){if(!r(t))throw TypeError(t+\" is not an object!\");return t}},e53d:function(t,e){var n=t.exports=\"undefined\"!=typeof window&&window.Math==Math?window:\"undefined\"!=typeof self&&self.Math==Math?self:Function(\"return this\")();\"number\"==typeof __g&&(__g=n)},e6f3:function(t,e,n){var r=n(\"07e3\"),i=n(\"36c3\"),o=n(\"5b4e\")(!1),c=n(\"5559\")(\"IE_PROTO\");t.exports=function(t,e){var n,u=i(t),a=0,s=[];for(n in u)n!=c&&r(u,n)&&s.push(n);while(e.length>a)r(u,n=e[a++])&&(~o(s,n)||s.push(n));return s}},e853:function(t,e,n){var r=n(\"d3f4\"),i=n(\"1169\"),o=n(\"2b4c\")(\"species\");t.exports=function(t){var e;return i(t)&&(e=t.constructor,\"function\"!=typeof e||e!==Array&&!i(e.prototype)||(e=void 0),r(e)&&(e=e[o],null===e&&(e=void 0))),void 0===e?Array:e}},ebd6:function(t,e,n){var r=n(\"cb7c\"),i=n(\"d8e8\"),o=n(\"2b4c\")(\"species\");t.exports=function(t,e){var n,c=r(t).constructor;return void 0===c||void 0==(n=r(c)[o])?e:i(n)}},ebfd:function(t,e,n){var r=n(\"62a0\")(\"meta\"),i=n(\"f772\"),o=n(\"07e3\"),c=n(\"d9f6\").f,u=0,a=Object.isExtensible||function(){return!0},s=!n(\"294c\")((function(){return a(Object.preventExtensions({}))})),f=function(t){c(t,r,{value:{i:\"O\"+ ++u,w:{}}})},l=function(t,e){if(!i(t))return\"symbol\"==typeof t?t:(\"string\"==typeof t?\"S\":\"P\")+t;if(!o(t,r)){if(!a(t))return\"F\";if(!e)return\"E\";f(t)}return t[r].i},p=function(t,e){if(!o(t,r)){if(!a(t))return!0;if(!e)return!1;f(t)}return t[r].w},h=function(t){return s&&v.NEED&&a(t)&&!o(t,r)&&f(t),t},v=t.exports={KEY:r,NEED:!1,fastKey:l,getWeak:p,onFreeze:h}},ecf0:function(t,e,n){},f1ae:function(t,e,n){\"use strict\";var r=n(\"86cc\"),i=n(\"4630\");t.exports=function(t,e,n){e in t?r.f(t,e,i(0,n)):t[e]=n}},f201:function(t,e,n){var r=n(\"e4ae\"),i=n(\"79aa\"),o=n(\"5168\")(\"species\");t.exports=function(t,e){var n,c=r(t).constructor;return void 0===c||void 0==(n=r(c)[o])?e:i(n)}},f410:function(t,e,n){n(\"1af6\"),t.exports=n(\"584a\").Array.isArray},f605:function(t,e){t.exports=function(t,e,n,r){if(!(t instanceof e)||void 0!==r&&r in t)throw TypeError(n+\": incorrect invocation!\");return t}},f6fd:function(t,e){(function(t){var e=\"currentScript\",n=t.getElementsByTagName(\"script\");e in t||Object.defineProperty(t,e,{get:function(){try{throw new Error}catch(r){var t,e=(/.*at [^\\(]*\\((.*):.+:.+\\)$/gi.exec(r.stack)||[!1])[1];for(t in n)if(n[t].src==e||\"interactive\"==n[t].readyState)return n[t];return null}}})})(document)},f751:function(t,e,n){var r=n(\"5ca1\");r(r.S+r.F,\"Object\",{assign:n(\"7333\")})},f772:function(t,e){t.exports=function(t){return\"object\"===typeof t?null!==t:\"function\"===typeof t}},f921:function(t,e,n){n(\"014b\"),n(\"c207\"),n(\"69d3\"),n(\"765d\"),t.exports=n(\"584a\").Symbol},fa5b:function(t,e,n){t.exports=n(\"5537\")(\"native-function-to-string\",Function.toString)},fab2:function(t,e,n){var r=n(\"7726\").document;t.exports=r&&r.documentElement},fb15:function(t,e,n){\"use strict\";var r;(n.r(e),\"undefined\"!==typeof window)&&(n(\"f6fd\"),(r=window.document.currentScript)&&(r=r.src.match(/(.+\\/)[^/]+\\.js(\\?.*)?$/))&&(n.p=r[1]));n(\"7f7f\");var i=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n(\"Layout\",{ref:\"layout\",staticClass:\"v-select\",class:t.classes,attrs:{tabindex:\"-1\"},nativeOn:{mouseup:function(e){return!e.type.indexOf(\"key\")&&t._k(e.keyCode,\"left\",37,e.key,[\"Left\",\"ArrowLeft\"])?null:\"button\"in e&&0!==e.button?null:void(t.isMultiple&&t.$refs.inp.focus())},focusin:function(e){t.$refs.inp.focus(),t.checkFocus_()},focusout:function(e){return t.checkFocus_()},keydown:[function(e){return!e.type.indexOf(\"key\")&&t._k(e.keyCode,\"down\",40,e.key,[\"Down\",\"ArrowDown\"])?null:(e.preventDefault(),t.next())},function(e){return!e.type.indexOf(\"key\")&&t._k(e.keyCode,\"up\",38,e.key,[\"Up\",\"ArrowUp\"])?null:(e.preventDefault(),t.next(!0))},function(e){return!e.type.indexOf(\"key\")&&t._k(e.keyCode,\"home\",void 0,e.key,void 0)?null:(e.preventDefault(),t.mark(0))},function(e){return!e.type.indexOf(\"key\")&&t._k(e.keyCode,\"end\",void 0,e.key,void 0)?null:(e.preventDefault(),t.mark(1/0))},function(e){if(!e.type.indexOf(\"key\")&&t._k(e.keyCode,\"esc\",27,e.key,[\"Esc\",\"Escape\"]))return null;e.stopPropagation(),~t.marked?t.mark():t.close()},function(e){return!e.type.indexOf(\"key\")&&t._k(e.keyCode,\"delete\",[8,46],e.key,[\"Backspace\",\"Delete\",\"Del\"])?null:t.onKeyDel()},function(e){return!e.type.indexOf(\"key\")&&t._k(e.keyCode,\"enter\",13,e.key,\"Enter\")?null:t.onKeyDownEnter(e)}],mousedown:function(e){return!e.type.indexOf(\"key\")&&t._k(e.keyCode,\"left\",37,e.key,[\"Left\",\"ArrowLeft\"])?null:\"button\"in e&&0!==e.button?null:t.open()}},scopedSlots:t._u([{key:\"selected\",fn:function(){return t._l(t.value_,(function(e,r){return n(\"Selected\",t._b({key:e.index,staticClass:\"v-select-btn v-select-selected\",nativeOn:{mouseup:function(e){return!e.type.indexOf(\"key\")&&t._k(e.keyCode,\"left\",37,e.key,[\"Left\",\"ArrowLeft\"])?null:\"button\"in e&&0!==e.button?null:t.deselect(r)}}},\"Selected\",{option:e,state:t.state,index:r,select:this},!1),[t._l([\"both\",\"selected\"],(function(n){return t._t(n,null,null,{option:e,state:t.state,index:r,select:this})}))],2)}))},proxy:!0},{key:\"input\",fn:function(){return[n(\"input\",t._b({directives:[{name:\"model\",rawName:\"v-model.trim\",value:t.q,expression:\"q\",modifiers:{trim:!0}}],ref:\"inp\",staticClass:\"v-select-inp\",attrs:{placeholder:t.placeholder},domProps:{value:t.q},on:{focus:function(e){t.open().search()},keydown:t.onKeyDown,input:[function(e){e.target.composing||(t.q=e.target.value.trim())},function(e){return t.open()}],blur:function(e){return t.$forceUpdate()}}},\"input\",t.$attrs,!1))]},proxy:!0},{key:\"actions\",fn:function(){return[n(\"button\",{staticClass:\"v-select-btn-clear\",attrs:{type:\"button\",tabindex:\"-1\"},on:{mouseup:function(e){return t.clear()}}}),n(\"button\",{staticClass:\"v-select-btn-dd\",attrs:{type:\"button\",tabindex:\"-1\"},on:{click:function(e){return t.open()}}}),n(\"button\",{staticClass:\"v-select-btn-spinner\",attrs:{type:\"button\",tabindex:\"-1\"}},[t._t(\"spinner\")],2)]},proxy:!0},{key:\"options\",fn:function(){return t._l(t.filtered,(function(e,r){return n(\"Option\",t._b({key:e.index,ref:\"option\"+r,refInFor:!0,staticClass:\"v-select-option\",nativeOn:{mouseup:function(n){return!n.type.indexOf(\"key\")&&t._k(n.keyCode,\"left\",37,n.key,[\"Left\",\"ArrowLeft\"])?null:\"button\"in n&&0!==n.button?null:t.select(e)}}},\"Option\",{option:e,state:t.state,index:r,select:this},!1),[t._l([\"both\",\"option\"],(function(n){return t._t(n,null,null,{option:e,state:t.state,index:r,select:this})}))],2)}))},proxy:!0},t._l(t.layoutSlots,(function(e){return{key:e,fn:function(n){return[t._t(e,null,null,Object.assign({},{state:t.state,select:this},n))]}}}))],null,!0)})},o=[],c=(n(\"8e6e\"),n(\"a745\")),u=n.n(c);function a(t){if(u()(t)){for(var e=0,n=new Array(t.length);e<t.length;e++)n[e]=t[e];return n}}var s=n(\"774e\"),f=n.n(s),l=n(\"c8bb\"),p=n.n(l);function h(t){if(p()(Object(t))||\"[object Arguments]\"===Object.prototype.toString.call(t))return f()(t)}function v(){throw new TypeError(\"Invalid attempt to spread non-iterable instance\")}function d(t){return a(t)||h(t)||v()}n(\"2fdb\"),n(\"7514\"),n(\"6762\"),n(\"456d\"),n(\"20d6\"),n(\"386d\"),n(\"3846\");var y=n(\"85f2\"),b=n.n(y);function g(t,e,n){return e in t?b()(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}n(\"ac6a\"),n(\"8615\"),n(\"28a5\"),n(\"c5f6\"),n(\"a481\"),n(\"96cf\");var m=n(\"795b\"),x=n.n(m);function w(t,e,n,r,i,o,c){try{var u=t[o](c),a=u.value}catch(N){return void n(N)}u.done?e(a):x.a.resolve(a).then(r,i)}function _(t){return function(){var e=this,n=arguments;return new x.a((function(r,i){var o=t.apply(e,n);function c(t){w(o,r,i,c,u,\"next\",t)}function u(t){w(o,r,i,c,u,\"throw\",t)}c(void 0)}))}}n(\"551c\");var S=n(\"5d58\"),O=n.n(S),k=n(\"67bb\"),j=n.n(k);function E(t){return E=\"function\"===typeof j.a&&\"symbol\"===typeof O.a?function(t){return typeof t}:function(t){return t&&\"function\"===typeof j.a&&t.constructor===j.a&&t!==j.a.prototype?\"symbol\":typeof t},E(t)}function P(t){return P=\"function\"===typeof j.a&&\"symbol\"===E(O.a)?function(t){return E(t)}:function(t){return t&&\"function\"===typeof j.a&&t.constructor===j.a&&t!==j.a.prototype?\"symbol\":E(t)},P(t)}function A(){return L.apply(this,arguments)}function L(){return L=_(regeneratorRuntime.mark((function t(){var e,n,r=arguments;return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:return e=r.length>0&&void 0!==r[0]?r[0]:\"\",t.next=3,fetch(e);case 3:if(n=t.sent,n.ok){t.next=6;break}return t.abrupt(\"return\",Promise.reject(n));case 6:return t.next=8,n.json();case 8:return t.abrupt(\"return\",t.sent);case 9:case\"end\":return t.stop()}}),t)}))),L.apply(this,arguments)}function T(t,e,n){return Math.min(Math.max(t,e),n)}function M(t,e,n){return t=V(t),arguments.length>2?C(t.slice(0,-1),e,{})[t[t.length-1]]=n:C(t,e)}function C(t,e,n){t=V(t);var r=-1,i=t.length,o=arguments.length>2;while(++r<i){var c=e;if(e=e[t[r]],\"object\"!=P(e)){if(!o)return r==i-1?e:void 0;e=c[t[r]]=r<i-1?{}:R(c[t[r]])?n:c[t[r]]}}return e}function F(t){t=V(t);for(var e=arguments.length,n=new Array(e>1?e-1:0),r=1;r<e;r++)n[r-1]=arguments[r];return M.bind.apply(M,[null,t].concat(n))}function I(t){return![void 0,\"\",null,NaN].includes(t)}function R(t){return t!==Object(t)}function N(){var t;(t=console).error.apply(t,[\"[@desislavsd/vue-select]: \"].concat(Array.prototype.slice.call(arguments)))}function q(t){return\"[@desislavsd/vue-select]: \"+t}function D(t,e,n){var r;function i(){for(var i=this,o=arguments.length,c=new Array(o),u=0;u<o;u++)c[u]=arguments[u];return clearTimeout(r),r=setTimeout((function(){return e.apply(i,c)}),t),n}return t?i:e}var $=function(t){return t};function G(t){for(var e=arguments.length,n=new Array(e>1?e-1:0),r=1;r<e;r++)n[r-1]=arguments[r];return(Element.prototype.matches||Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector).apply(t,n)}function V(t){return Array.isArray(t)?t:t.split(\".\").filter(Boolean)}n(\"f751\");var B,U,K={name:\"Option\",props:{option:{},index:{},state:{},tag:{default:\"span\"}},computed:{classes:function(){return{\"-marked\":this.state.marked==this.option,\"-selected\":this.state.selected.includes(this.option)}}},render:function(t){var e=this.classes,n=this.tag,r=this.option,i=this.$slots.default,o=i&&1==i.length&&i[0];return o&&o.tag?(o.data=o.data||{},o.data.class=Object.assign({},o.data.class,e),o):t(n,{class:e},i||[r.label])}},H=K;function W(t,e,n,r,i,o,c,u){var a,s=\"function\"===typeof t?t.options:t;if(e&&(s.render=e,s.staticRenderFns=n,s._compiled=!0),r&&(s.functional=!0),o&&(s._scopeId=\"data-v-\"+o),c?(a=function(t){t=t||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,t||\"undefined\"===typeof __VUE_SSR_CONTEXT__||(t=__VUE_SSR_CONTEXT__),i&&i.call(this,t),t&&t._registeredComponents&&t._registeredComponents.add(c)},s._ssrRegister=a):i&&(a=u?function(){i.call(this,this.$root.$options.shadowRoot)}:i),a)if(s.functional){s._injectStyles=a;var f=s.render;s.render=function(t,e){return a.call(e),f(t,e)}}else{var l=s.beforeCreate;s.beforeCreate=l?[].concat(l,a):[a]}return{exports:t,options:s}}var J,Y,z=W(H,B,U,!1,null,null,null),X=z.exports,Q={mixins:[X]},Z=Q,tt=W(Z,J,Y,!1,null,null,null),et=tt.exports,nt=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n(\"div\",[n(\"div\",{staticClass:\"v-select-bar\"},[t._t(\"selected\"),n(\"div\",{staticClass:\"v-select-inp-group\"},[t._t(\"input\"),t._t(\"actions\")],2)],2),n(\"div\",{ref:\"list\",staticClass:\"v-select-list\"},[t._t(\"beforelist\"),t._t(\"options\"),t._t(\"afterlist\")],2)])},rt=[],it={inject:[\"select\"]},ot=it,ct=(n(\"63c6\"),W(ot,nt,rt,!1,null,null,null)),ut=ct.exports;function at(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function st(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?at(n,!0).forEach((function(e){g(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):at(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}var ft={name:\"Select\",components:{Option:X,Selected:et,Layout:ut},provide:{select:function(){return this},state:function(){return this.state}},props:{value:{},query:String,from:{type:[Array,Function,String,Object],default:function(){return[]}},as:[String,Array],parse:{type:[Function,String],default:$},fetch:{type:Function,default:function(){var t=_(regeneratorRuntime.mark((function t(e,n){var r;return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:return r=n.url||n,t.next=3,A(r.replace(\"%s\",encodeURIComponent(e)));case 3:return t.abrupt(\"return\",t.sent);case 4:case\"end\":return t.stop()}}),t)})));function e(e,n){return t.apply(this,arguments)}return e}()},filter:{type:[Boolean,Function],default:void 0},filterBy:{type:Function,default:function(t,e){var n=t.label;return~(n+\"\").toLowerCase().indexOf(e.toLowerCase())}},debounce:{type:Number,default:250},tagging:{type:[Boolean,Function]},multiple:{type:Boolean,default:void 0},dynamic:{type:Boolean,default:void 0},tags:{},tagKeys:{type:Array,default:function(){return[]}},validate:{type:Function,default:function(t){var e=this.$attrs;return(t||!e.hasOwnProperty(\"minlength\"))&&(!this.$refs.inp||G(this.$refs.inp,\":valid\"))}},watchAttrs:{default:function(){return[\"required\",\"disabled\",\"readonly\"]}},stateful:Boolean,find:{type:[Function,Boolean],default:function(t){return this.from_(t.filter((function(t){return t.poor})).map((function(t){return t.label})).join(\",\"))}},closeOnSelect:{type:Boolean,default:void 0},clearOnSelect:{type:Boolean,default:void 0},clearOnClose:{type:Boolean,default:void 0}},inheritAttrs:!1,data:function(){return{q:this.query||\"\",marked:-1,queue:null,flags:{loading:!1,focused:!1,opened:!1},value_:[],options:[],asSpec:{rx:/\\s*[,:]\\s*/,order:\"label:value:index\".split(\":\")},checkFocus_:D(10,this.checkFocus)}},computed:{isMultiple:function(){return void 0!=this.multiple?this.multiple:Array.isArray(this.value)},isAsync:function(){return!Array.isArray(this.from)},isDynamic:function(){var t=this.from;return void 0!=this.dynamic?this.dynamic:!(Array.isArray(t)||\"string\"==typeof t&&!~t.indexOf(\"%s\")||\"function\"==typeof t&&!t.length)},isPrimitive:function(){var t=this.as_;return!t||!Object.values(t).some(Boolean)},isInsufficient:function(){var t=this.as_;return Boolean(t&&t.poor)},as_:function(){var t=this;if(this.as&&this.as.length){var e=Array.isArray(this.as)?this.as:(this.as||\"\").split(this.asSpec.rx),n=Boolean(e[0]&&e[1]&&e[0]!=e[1]);return e=this.asSpec.order.map((function(t,n){return\"function\"==typeof e[n]&&e[n]||e[n]&&F(e[n])})).reduce((function(e,n,r){return st({},e,g({},t.asSpec.order[r],n))}),{poor:n}),e.index||N(\"`index` field is required when working with non primitive options\"),e}},filtered:function(){var t=this,e=this.q,n=\"function\"==typeof this.filter?this.filter:this.filterBy;return(I(this.filter)?this.filter:this.isDynamic||!e.length)?this.options:this.options.filter((function(r){return n.call(t,r,e)}))},state:function(){return st({},this.flags,{multiple:this.isMultiple,searching:!!this.q,empty:!this.value_.length,marked:this.filtered[this.marked],selected:this.value_})},classes:function(){var t=this.state,e=this.$attrs;return st({\"-empty\":t.empty,\"-opened\":t.opened,\"-focused\":t.focused,\"-loading\":t.loading,\"-multiple\":t.multiple,\"-selected\":t.selected.length,\"-searching\":t.searching},this.watchAttrs.reduce((function(t,n){return st({},t,g({},\"-\".concat(n),e[n]))}),{}))},debouncedSearch:function(){return D(this.debounce,this.search)},parse_:function(){return\"string\"==typeof this.parse?F(this.parse):this.parse},placeholder:function(){return this.value_.length&&!this.isMultiple?\"\":this.$attrs.placeholder||\"Search..\"},matched:function(){var t=this.q.toLowerCase();return t?this.filtered.findIndex((function(e){return(e.label+\"\").toLowerCase()==t})):-1},layoutSlots:function(){var t=\"selected options both input actions spinner\".split(\" \");return Object.keys(this.$scopedSlots).filter((function(e){return!t.includes(e)}))}},watch:{value:{immediate:!0,handler:function(){var t=_(regeneratorRuntime.mark((function t(e){var n;return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:if(this.value_=this.parseValue(e),this.onChange(),this.value_.some((function(t){return t.poor}))){t.next=4;break}return t.abrupt(\"return\");case 4:if(this.isDynamic){t.next=6;break}return t.abrupt(\"return\",this.search());case 6:if(this.find){t.next=8;break}return t.abrupt(\"return\");case 8:return t.next=10,this.find(this.value_);case 10:n=t.sent,this.value_=this.parseValue(this.value_,n);case 12:case\"end\":return t.stop()}}),t,this)})));function e(e){return t.apply(this,arguments)}return e}()},from:function(){this.queue=null},options:function(t){t&&t.length&&(this.value_=this.parseValue(this.value_))},value_:{immediate:!0,handler:function(t){this.$emit(\"update:tags\",t)}},filtered:function(){this.mark(!this.isDynamic||0)},q:function(t){this.isDynamic&&(this.options=[]),this.debouncedSearch(),this.$emit(\"update:query\",t)},query:function(t){this.q=t||\"\"},queue:function(t){var e=this;this.flags.loading=t&&!!t.finally((function(){t==e.queue&&(e.flags.loading=!1)}))},\"flags.focused\":function(t){return this.$emit(t?\"focus\":\"blur\",this),t?this.open():this.close(!I(this.clearOnClose)||this.clearOnClose)},\"flags.opened\":function(t){this.$emit(t?\"open\":\"close\",this)}},methods:{set:function(t){this.stateful&&(this.value_=I(t)?Array.isArray(t)?t:[t]:[],this.onChange()),I(t)&&(t=Array.isArray(t)?t.map((function(t){return t.value})):t.value),this.$emit(\"input\",t)},search:function(){var t=_(regeneratorRuntime.mark((function t(){var e,n,r,i,o=arguments;return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:if(e=o.length>0&&void 0!==o[0]&&o[0],n=this.q,\"string\"==typeof e&&(n=e),this.validate(n)){t.next=5;break}return t.abrupt(\"return\",new Error(q(\"Invalid query: \"+n)));case 5:return r=this.queue=e||!this.queue||this.isDynamic&&this.queue.q!=n?this.from_(n):this.queue,r.q=n,t.prev=7,t.next=10,r;case 10:i=t.sent,t.next=17;break;case 13:throw t.prev=13,t.t0=t[\"catch\"](7),r==this.queue&&(this.queue=null),t.t0;case 17:if(r==this.queue&&this.q==this.queue.q){t.next=19;break}return t.abrupt(\"return\");case 19:this.options=i;case 20:case\"end\":return t.stop()}}),t,this,[[7,13]])})));function e(){return t.apply(this,arguments)}return e}(),from_:function(){var t=_(regeneratorRuntime.mark((function t(e){var n,r,i,o=this;return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:if(n=this.from,r=this.fetch,!Array.isArray(n)){t.next=5;break}i=n,t.next=14;break;case 5:if(\"function\"!=typeof n){t.next=11;break}return t.next=8,n(e);case 8:i=t.sent,t.next=14;break;case 11:return t.next=13,r(e,n);case 13:i=t.sent;case 14:return t.abrupt(\"return\",(this.parse_(i)||[]).map((function(t){return o.ofRaw(t)})));case 15:case\"end\":return t.stop()}}),t,this)})));function e(e){return t.apply(this,arguments)}return e}(),ofRaw:function(t){var e=this.as_,n=this.asSpec.order.reduce((function(n,r){return st({},n,g({},r,e&&e[r]?e[r](t):t))}),{raw:t});return I(n.label)||(n.label=n.value),I(n.index)||(n.index=n.label),new lt(n)},ofValue:function(t){var e=this.isInsufficient;if(this.isPrimitive)return this.ofRaw(t);var n=t,r=this.as_;r&&r.value&&r.value(n={},t);var i=this.ofRaw(n);return Object.assign(i,{poor:e})},ofPhrase:function(t){var e=this.isInsufficient;if(this.isPrimitive)return this.ofRaw(t);var n={},r=this.as_;return r.value&&r.value(n,t),r.label&&r.label(n,t),Object.assign(this.ofRaw(n),{poor:e,new:!0})},select:function(){var t=_(regeneratorRuntime.mark((function t(e){var n,r,i,o=this,c=arguments;return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:if(n=c.length>1&&void 0!==c[1]&&c[1],r=this.value_.findIndex((function(t){return o.equals(t,e)})),this.$emit(\"select\",e),!~r){t.next=5;break}return t.abrupt(\"return\",this.isMultiple?this.deselect(r):this);case 5:if(!n){t.next=16;break}if(this.$emit(\"create\",e),this.tagging){t.next=9;break}return t.abrupt(\"return\");case 9:if(\"function\"!=typeof this.tagging){t.next=16;break}return t.next=12,this.tagging.call(this.$parent,e,this);case 12:if(i=t.sent,![!1].includes(i)){t.next=15;break}return t.abrupt(\"return\");case 15:e=i instanceof lt?i:this.ofRaw(i);case 16:this.isMultiple&&(e=this.value_.concat(e)),this.set(e);case 18:case\"end\":return t.stop()}}),t,this)})));function e(e){return t.apply(this,arguments)}return e}(),deselect:function(t){if(!this.isMultiple)return this.clear();var e=d(this.value_);e.splice(t,1),this.set(e)},clear:function(){this.set(this.isMultiple?[]:void 0)},exists:function(t){var e=this;return this.value_.some((function(n){return e.equals(n,t)}))},parseValue:function(t,e){var n=this;return I(t)?(e=e||this.options.concat(this.value_),[].concat(t).map((function(t){return t instanceof lt?t:n.ofValue(t)})).map((function(t){return e.find((function(e){return n.equals(t,e)}))||t}))):[]},mark:function(t){if(arguments.length&&!1!==t?!0===t&&(t=~this.matched?this.matched:this.tagging?-1:0):t=-1,t=this.marked=T(-1,t,this.filtered.length-1),~t){var e=this.$refs[\"option\"+t];e=e&&e[0]&&e[0].$el,e&&this.scrollTo(e)}return this},next:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(!this.flags.opened)return this.open();this.mark(this.marked+Math.pow(-1,t))},equals:function(t,e){if(t.index===e.index)return!0;if(t.index==e.index&&[t.index,e.index].every(I))return!0;try{return JSON.stringify(t.index)===JSON.stringify(e.index)}catch(n){return!1}},open:function(){return this.flags.opened?this:(this.flags.opened=!0,this.mark(!0))},close:function(t){return this.flags.opened=!1,(t||(I(this.clearOnSelect)?this.clearOnSelect:!this.isMultiple))&&(this.q=\"\"),this},blur:function(){if(!this.$el)return this;var t=G(this.$el,\":focus\")?this.$el:this.$el.querySelector(\":focus\");return t&&t.blur(),this},scrollTo:function(t){var e=this.$refs.layout.$refs.list;e.scrollTop=Math.round(t.offsetTop+t.offsetHeight-e.offsetHeight/2)},checkFocus:function(){return this.flags.focused=G(this.$el,\":focus\")||!!this.$el.querySelector(\":focus\"),this},onKeyDel:function(){if(!this.q){var t=this.value_.length;t&&this.isMultiple?this.deselect(t-1):this.clear()}},onKeyDownEnter:function(t){if(this.q||~this.marked){t.preventDefault();var e=this.filtered[this.marked];this.select(e||this.ofPhrase(this.q),!e)}},onKeyDown:function(t){this.tagging&&this.q&&this.tagKeys.includes(t.which||t.keyCode||0)&&(!~this.marked||this.filtered[this.marked].label!==this.q)&&(t.preventDefault(),t.stopPropagation(),this.select(this.ofPhrase(this.q)))},onChange:function(){(I(this.closeOnSelect)?this.closeOnSelect:!this.isMultiple||this.isDynamic)&&this.close(),I(this.clearOnSelect)&&!this.clearOnSelect||(this.q=\"\"),this.$emit(\"change\",this.isMultiple?pt(this.value_):this.value_[0])}}};function lt(){Object.assign.apply(Object,[this].concat(Array.prototype.slice.call(arguments)))}function pt(t){return t=d(t),t.raw=t.map((function(t){return t.value})),t}var ht,vt=ft,dt=(n(\"3cba\"),W(vt,i,o,!1,null,null,null)),yt=dt.exports,bt=n(\"9224\"),gt=ht={version:bt[\"a\"],install:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=e.name,r=void 0===n?\"vSelect\":n,i=e.mixin,o=void 0===i?{}:i;t.component(r,{mixins:[yt,o]})},vSelect:yt,vSelectLayout:ut,vSelectOption:X,vSelectSelected:et};\"undefined\"!=typeof window&&\"undefined\"!=typeof window.Vue&&(window.VueSelect=ht),n.d(e,\"vSelect\",(function(){return yt})),n.d(e,\"vSelectLayout\",(function(){return ut})),n.d(e,\"vSelectOption\",(function(){return X})),n.d(e,\"vSelectSelected\",(function(){return et}));e[\"default\"]=gt},fdef:function(t,e){t.exports=\"\\t\\n\\v\\f\\r   ᠎              \\u2028\\u2029\\ufeff\"}})}));\n//# sourceMappingURL=vue-select.umd.min.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGRlc2lzbGF2c2QvdnVlLXNlbGVjdC9kaXN0L3Z1ZS1zZWxlY3QudW1kLm1pbi5qcyIsIm1hcHBpbmdzIjoiQUFBQSxlQUFlLEtBQW1ELG9CQUFvQixDQUEySCxDQUFDLGtEQUFrRCxtQkFBbUIsU0FBUyxjQUFjLDRCQUE0QixZQUFZLHFCQUFxQiwyREFBMkQsdUNBQXVDLHFDQUFxQyxvQkFBb0IsRUFBRSxpQkFBaUIsNkZBQTZGLGVBQWUsd0NBQXdDLFNBQVMsRUFBRSxtQkFBbUIsOEJBQThCLHNEQUFzRCwwQkFBMEIsNkNBQTZDLHNCQUFzQiw2REFBNkQsWUFBWSxlQUFlLFNBQVMsaUJBQWlCLGlDQUFpQyxvQkFBb0IsWUFBWSxVQUFVLHNCQUFzQixtQkFBbUIsaURBQWlELHNCQUFzQixFQUFFLHVCQUF1QixhQUFhLHViQUF1YixvTEFBb0wsZ0JBQWdCLE1BQU0sZUFBZSxtQkFBbUIsUUFBUSxLQUFLLEtBQUssbUJBQW1CLGFBQWEsMkNBQTJDLGlCQUFpQixtQkFBbUIsZ0JBQWdCLDhDQUE4Qyx5QkFBeUIsYUFBYSxzQkFBc0IsbUJBQW1CLHNHQUFzRyxtQkFBbUIsd0JBQXdCLGtDQUFrQyxpQkFBaUIsS0FBSyxpQ0FBaUMsNkJBQTZCLFNBQVMsaUJBQWlCLGlDQUFpQyxlQUFlLDZCQUE2QiwwRkFBMEYsa0JBQWtCLDRDQUE0QyxhQUFhLHlEQUF5RCxnQkFBZ0IseUJBQXlCLHNEQUFzRCxTQUFTLGdCQUFnQixxQ0FBcUMsMERBQTBELFVBQVUsaUJBQWlCLHFFQUFxRSw4REFBOEQsaUZBQWlGLG9CQUFvQixzQkFBc0IsT0FBTywrQkFBK0IsZUFBZSx3SEFBd0gsZUFBZSxvQkFBb0IsU0FBUyxFQUFFLDRJQUE0SSxhQUFhLGFBQWEsMkJBQTJCLGFBQWEsYUFBYSx1QkFBdUIsZ0JBQWdCLGlDQUFpQyxvQkFBb0IsZ0RBQWdELG9DQUFvQyxzQkFBc0IsS0FBSyxzQkFBc0IsTUFBTSx5QkFBeUIseUhBQXlILEVBQUUscUJBQXFCLE9BQU8sR0FBRyx1QkFBdUIsa0NBQWtDLGtCQUFrQixrQ0FBa0MsVUFBVSwyQkFBMkIsTUFBTSxJQUFJLE1BQU0sZ0JBQWdCLFlBQVksc0JBQXNCLGtCQUFrQixnREFBZ0Qsb0VBQW9FLDZEQUE2RCx1QkFBdUIsOEZBQThGLHdCQUF3QixhQUFhLDRNQUE0TSxhQUFhLGtDQUFrQyxTQUFTLHdCQUF3QiwwQkFBMEIsVUFBVSx5QkFBeUIsc0JBQXNCLHlCQUF5QixzQkFBc0Isa0JBQWtCLHNCQUFzQixrSUFBa0ksK0lBQStJLG9CQUFvQixzREFBc0Qsd0NBQXdDLGtDQUFrQywyQkFBMkIsVUFBVSx3QkFBd0IsNEJBQTRCLHNCQUFzQixxQkFBcUIseUNBQXlDLGdMQUFnTCx3QkFBd0IsYUFBYSxvQkFBb0IsMEJBQTBCLDhCQUE4Qix3QkFBd0Isa0NBQWtDLDRIQUE0SCxJQUFJLFlBQVksU0FBUyxtQkFBbUIsd0JBQXdCLHFEQUFxRCxzQkFBc0IsUUFBUSxnQkFBZ0Isd0JBQXdCLG9CQUFvQix3QkFBd0IsZ0VBQWdFLHdCQUF3Qix3REFBd0QsdUJBQXVCLGtGQUFrRixJQUFJLHNEQUFzRCxvQkFBb0IsZ0JBQWdCLGdCQUFnQixnQkFBZ0IsaUJBQWlCLG1CQUFtQix1QkFBdUIsd0JBQXdCLGFBQWEsZ0JBQWdCLHFCQUFxQixtQkFBbUIsaUhBQWlILHdCQUF3Qiw0QkFBNEIsbUNBQW1DLGVBQWUsd0JBQXdCLHNDQUFzQyx3QkFBd0IsbUNBQW1DLHNCQUFzQixnQkFBZ0IscUNBQXFDLHFCQUFxQixvQkFBb0IsNEJBQTRCLHNGQUFzRixVQUFVLHdCQUF3Qiw4R0FBOEcsOEJBQThCLDBCQUEwQixjQUFjLFVBQVUseUNBQXlDLHNCQUFzQix3Q0FBd0MsMERBQTBELEtBQUssNEJBQTRCLCtCQUErQixVQUFVLHNCQUFzQixhQUFhLG9CQUFvQix1Q0FBdUMsNEJBQTRCLGNBQWMsMEJBQTBCLG9CQUFvQixxQkFBcUIsOEJBQThCLGdCQUFnQixFQUFFLEdBQUcsb0JBQW9CLHFIQUFxSCxzQkFBc0IsOEpBQThKLHFDQUFxQyxZQUFZLHdCQUF3QixXQUFXLGlCQUFpQixlQUFlLGdCQUFnQixxQkFBcUIsYUFBYSxnREFBZ0QseUJBQXlCLHdDQUF3QyxRQUFRLGVBQWUsWUFBWSx1Q0FBdUMscUJBQXFCLHdCQUF3QixnQkFBZ0Isc0pBQXNKLHdCQUF3QixvRUFBb0UseUNBQXlDLCtCQUErQixhQUFhLHVCQUF1QixhQUFhLGVBQWUsd0JBQXdCLGdCQUFnQixlQUFlLGtCQUFrQixFQUFFLHdCQUF3QixnQkFBZ0Isd0JBQXdCLGtCQUFrQixRQUFRLGlFQUFpRSw2REFBNkQsa0VBQWtFLDREQUE0RCx3QkFBd0IsZ0VBQWdFLHNCQUFzQixnQ0FBZ0Msd0JBQXdCLGdCQUFnQiw0QkFBNEIsSUFBSSw4QkFBOEIsU0FBUyxrQkFBa0IsbUNBQW1DLHdCQUF3QixhQUFhLGtEQUFrRCxnQ0FBZ0MsS0FBSyx3QkFBd0Isc0JBQXNCLHlEQUF5RCxlQUFlLHdCQUF3QixhQUFhLDRCQUE0QiwwQkFBMEIsK0JBQStCLHdCQUF3QixhQUFhLFVBQVUsNEdBQTRHLFVBQVUseUJBQXlCLFNBQVMsaUJBQWlCLE1BQU0sR0FBRyw0QkFBNEIsZ0JBQWdCLHNCQUFzQixrQkFBa0IsZ0NBQWdDLG9CQUFvQiw0Q0FBNEMsR0FBRywwQkFBMEIsNEJBQTRCLFNBQVMsdUJBQXVCLFNBQVMsYUFBYSxzQkFBc0IsZUFBZSx5QkFBeUIsaUJBQWlCLCtCQUErQiw2QkFBNkIsU0FBUyxjQUFjLFVBQVUsK0NBQStDLGdEQUFnRCx5QkFBeUIsNEJBQTRCLEVBQUUsNEJBQTRCLEVBQUUsU0FBUyxpQkFBaUIsZ0VBQWdFLHdCQUF3QixhQUFhLHNCQUFzQixJQUFJLHdCQUF3QixnRUFBZ0Usc0JBQXNCLGdDQUFnQyx3QkFBd0IsdUVBQXVFLGlCQUFpQixvQkFBb0IsSUFBSSxZQUFZLFlBQVksc0JBQXNCLFVBQVUsMkpBQTJKLHdCQUF3QixnQkFBZ0Isc0JBQXNCLHFCQUFxQix3QkFBd0IsYUFBYSw2VEFBNlQsd0JBQXdCLElBQUksc0NBQXNDLG9DQUFvQyxRQUFRLDhIQUE4SCxXQUFXLGlCQUFpQixNQUFNLGdEQUFnRCxpQkFBaUIsVUFBVSxRQUFRLFdBQVcsY0FBYyx1Q0FBdUMsNERBQTRELElBQUksNkpBQTZKLFNBQVMsdUJBQXVCLDJCQUEyQiwrQkFBK0IsSUFBSSxlQUFlLHFCQUFxQix3QkFBd0IsdUJBQXVCLGlFQUFpRSxtQkFBbUIsbUVBQW1FLGtEQUFrRCxHQUFHLGVBQWUseUNBQXlDLGVBQWUscUJBQXFCLE1BQU0sNERBQTRELHNCQUFzQixFQUFFLEdBQUcsZUFBZSxXQUFXLDBFQUEwRSxlQUFlLGFBQWEsVUFBVSxrQkFBa0IsSUFBSSxxREFBcUQsdUJBQXVCLE9BQU8sWUFBWSxJQUFJLDRCQUE0QixTQUFTLGFBQWEsMkJBQTJCLFNBQVMsUUFBUSxXQUFXLE9BQU8sa0JBQWtCLG1DQUFtQyxJQUFJLDJCQUEyQixTQUFTLGdCQUFnQixlQUFlLG1GQUFtRixvQ0FBb0MsbUJBQW1CLG1CQUFtQixxS0FBcUssbUJBQW1CLDRCQUE0QixlQUFlLFlBQVksMERBQTBELG1CQUFtQixrQ0FBa0Msb0JBQW9CLFVBQVUsNkRBQTZELG1CQUFtQix5QkFBeUIsdUJBQXVCLHVCQUF1QixvQkFBb0IsZ0NBQWdDLHdDQUF3QyxxQkFBcUIsT0FBTyxnQkFBZ0IseURBQXlELGlCQUFpQixvQkFBb0IsZUFBZSxrREFBa0QsMkJBQTJCLEtBQUssYUFBYSxHQUFHLDZCQUE2QixrQkFBa0IsNkNBQTZDLG9CQUFvQiwrQkFBK0IsR0FBRyxHQUFHLDhCQUE4QixFQUFFLHNCQUFzQixzQkFBc0IseURBQXlELFVBQVUsb0JBQW9CLGlDQUFpQyx3QkFBd0Isb0RBQW9ELGtEQUFrRCxvREFBb0Qsd0JBQXdCLGFBQWEsMExBQTBMLGNBQWMsR0FBRyx1Q0FBdUMsTUFBTSxzS0FBc0ssbUJBQW1CLDhCQUE4Qiw4QkFBOEIsdUpBQXVKLHFCQUFxQixvSEFBb0gsdUJBQXVCLG9GQUFvRixtQ0FBbUMsNkNBQTZDLGtCQUFrQixzQ0FBc0Msc0RBQXNELGVBQWUsMEJBQTBCLHlCQUF5Qix3TEFBd0wsa0JBQWtCLDRDQUE0QyxpQkFBaUIsa0JBQWtCLGtCQUFrQiw0QkFBNEIsbUVBQW1FLEtBQUssOENBQThDLFlBQVksY0FBYywwQ0FBMEMsT0FBTyw0QkFBNEIsRUFBRSxHQUFHLHNCQUFzQixzQkFBc0IsSUFBSSxZQUFZLFNBQVMsV0FBVyx3QkFBd0Isc0dBQXNHLG9DQUFvQyxpQkFBaUIsOEJBQThCLDJCQUEyQiwwSkFBMEosbUNBQW1DLHFEQUFxRCxHQUFHLHdCQUF3Qiw4RUFBOEUsNEJBQTRCLG1EQUFtRCxnTEFBZ0wsNEJBQTRCLFlBQVksdUNBQXVDLE1BQU0sZ0ZBQWdGLHdCQUF3QixxR0FBcUcsbURBQW1ELFVBQVUsc0JBQXNCLGFBQWEsc0JBQXNCLFFBQVEsVUFBVSxzQkFBc0IsOEJBQThCLHdCQUF3QixhQUFhLHlDQUF5QyxpQ0FBaUMscUJBQXFCLHdFQUF3RSxFQUFFLG9CQUFvQiwwQkFBMEIsaUJBQWlCLGlCQUFpQiw4QkFBOEIsdUNBQXVDLGlEQUFpRCwyREFBMkQscUVBQXFFLHFCQUFxQix3QkFBd0IsYUFBYSw0TUFBNE0sYUFBYSxrQ0FBa0MsU0FBUyx3QkFBd0IsMEJBQTBCLFVBQVUseUJBQXlCLHNCQUFzQix5QkFBeUIsc0JBQXNCLGtCQUFrQixzQkFBc0Isa0lBQWtJLCtJQUErSSxvQkFBb0Isc0RBQXNELHdDQUF3QyxrQ0FBa0MsMkJBQTJCLFVBQVUsc0JBQXNCLDBCQUEwQixpQkFBaUIsaUJBQWlCLDhCQUE4Qix1Q0FBdUMsaURBQWlELDJEQUEyRCxxRUFBcUUscUJBQXFCLHdCQUF3Qiw0QkFBNEIsb0NBQW9DLHVCQUF1QixpQkFBaUIsaUJBQWlCLHdCQUF3Qix5QkFBeUIsK0JBQStCLHdCQUF3QixnQkFBZ0IsaUVBQWlFLDRDQUE0Qyx3QkFBd0IsMERBQTBELHNCQUFzQiw0Q0FBNEMsc0JBQXNCLE1BQU0sc0JBQXNCLHdCQUF3Qiw0QkFBNEIsb0NBQW9DLHVCQUF1QixpQkFBaUIsaUJBQWlCLHVCQUF1Qix3QkFBd0IsNEJBQTRCLHNCQUFzQixnQkFBZ0Isc0JBQXNCLDBEQUEwRCxzQkFBc0IsNENBQTRDLHNCQUFzQixrRUFBa0UsOEJBQThCLEVBQUUsd0JBQXdCLGFBQWEsd0NBQXdDLHdDQUF3QyxtQkFBbUIsc0NBQXNDLDBEQUEwRCxhQUFhLGtCQUFrQix5QkFBeUIsd0NBQXdDLHdCQUF3QixhQUFhLDZEQUE2RCxFQUFFLEdBQUcsd0JBQXdCLHVFQUF1RSw2Q0FBNkMsMklBQTJJLHNCQUFzQiw2QkFBNkIsc0JBQXNCLG1DQUFtQyx3QkFBd0IsYUFBYSxnRUFBZ0UscUJBQXFCLG9CQUFvQiwwREFBMEQsK0JBQStCLGlDQUFpQyxTQUFTLEdBQUcsaUJBQWlCLGlDQUFpQyxRQUFRLEdBQUcsS0FBSyxFQUFFLHdCQUF3QixhQUFhLHlCQUF5QixJQUFJLHdCQUF3Qix1RUFBdUUsaUJBQWlCLG9CQUFvQixJQUFJLFlBQVksWUFBWSxzQkFBc0IsVUFBVSwySkFBMkosc0JBQXNCLDhKQUE4SixxQ0FBcUMsWUFBWSx3QkFBd0IsV0FBVyxpQkFBaUIsZUFBZSxnQkFBZ0IscUJBQXFCLGFBQWEsZ0RBQWdELHlCQUF5Qix3Q0FBd0MsUUFBUSxlQUFlLFlBQVksdUNBQXVDLHFCQUFxQix3QkFBd0IsZ0JBQWdCLHNKQUFzSix3QkFBd0Isb0VBQW9FLHlDQUF5QywrQkFBK0IsYUFBYSx1QkFBdUIsYUFBYSxlQUFlLHdCQUF3QixhQUFhLDZDQUE2Qyw4Q0FBOEMsWUFBWSw2QkFBNkIsaUJBQWlCLFlBQVksc0JBQXNCLHdCQUF3QixhQUFhLHdDQUF3QyxpQkFBaUIsZ0JBQWdCLHVCQUF1QiwrQ0FBK0MsRUFBRSxvQkFBb0Isc0JBQXNCLElBQUksT0FBTyxZQUFZLFNBQVMsT0FBTyxZQUFZLHdCQUF3QixVQUFVLHVCQUF1QiwwQkFBMEIsZ0NBQWdDLHdCQUF3Qiw0QkFBNEIsNkJBQTZCLG1CQUFtQixnQkFBZ0IsR0FBRyxvQkFBb0IsNkJBQTZCLHNCQUFzQixtQ0FBbUMsd0JBQXdCLHlEQUF5RCwwQkFBMEIsbUNBQW1DLHdCQUF3QixHQUFHLG9CQUFvQix3QkFBd0IsT0FBTyxnRUFBZ0Usd0JBQXdCLGdCQUFnQiwrQkFBK0IsMkJBQTJCLEVBQUUsd0JBQXdCLHdDQUF3QyxzQkFBc0IsaUJBQWlCLE1BQU0sdUJBQXVCLCtDQUErQyxVQUFVLHNCQUFzQixhQUFhLHdCQUF3QixnRkFBZ0YsTUFBTSxnQ0FBZ0MsMkJBQTJCLFNBQVMseUJBQXlCLCtEQUErRCxTQUFTLGtCQUFrQixJQUFJLDhEQUE4RCxxQkFBcUIsbUJBQW1CLDhDQUE4QyxxQkFBcUIsd0JBQXdCLGdCQUFnQixzQkFBc0IscUJBQXFCLHdCQUF3QixhQUFhLDJFQUEyRSxzQkFBc0Isd0NBQXdDLHNCQUFzQiwrQkFBK0IsYUFBYSxHQUFHLHdCQUF3QixpQ0FBaUMsSUFBSSxlQUFlLHVCQUF1QixLQUFLLDBCQUEwQixRQUFRLEdBQUcsVUFBVSx3QkFBd0IsbUJBQW1CLFNBQVMsSUFBSSxtQkFBbUIsa0JBQWtCLE9BQU8sV0FBVyxpQkFBaUIsU0FBUyxNQUFNLFVBQVUsVUFBVSx3QkFBd0Isc0RBQXNELHNCQUFzQixtQkFBbUIsd0NBQXdDLDREQUE0RCxXQUFXLHNCQUFzQix3QkFBd0IsT0FBTyxtQkFBbUIsc0JBQXNCLHlCQUF5QixzQkFBc0IsVUFBVSxJQUFJLFlBQVksU0FBUyxJQUFJLDRCQUE0QixXQUFXLFVBQVUsc0JBQXNCLHFHQUFxRyxtREFBbUQsVUFBVSx3QkFBd0IsYUFBYSxrR0FBa0csa0JBQWtCLHNEQUFzRCx3Q0FBd0Msa0JBQWtCLG1CQUFtQiw4S0FBOEssUUFBUSxxQkFBcUIseUNBQXlDLEtBQUssY0FBYyxzQkFBc0IsTUFBTSxzQkFBc0Isd0JBQXdCLHVFQUF1RSw2Q0FBNkMsMklBQTJJLHdCQUF3QixhQUFhLG9HQUFvRyxrQ0FBa0MsY0FBYyxZQUFZLGlCQUFpQiw2SEFBNkgsZ0dBQWdHLElBQUksNEJBQTRCLDZCQUE2QixtQkFBbUIsMkNBQTJDLHFCQUFxQixFQUFFLHdCQUF3Qix3Q0FBd0Msd0JBQXdCLGFBQWEsNlRBQTZULHdCQUF3QixJQUFJLHNDQUFzQyxvQ0FBb0MsUUFBUSw4SEFBOEgsV0FBVyxpQkFBaUIsTUFBTSxnREFBZ0QsaUJBQWlCLFVBQVUsUUFBUSxXQUFXLGNBQWMsdUNBQXVDLDREQUE0RCxJQUFJLDZKQUE2SixTQUFTLHVCQUF1QiwyQkFBMkIsK0JBQStCLElBQUksZUFBZSxxQkFBcUIsd0JBQXdCLHVCQUF1QixpRUFBaUUsbUJBQW1CLG1FQUFtRSxrREFBa0QsR0FBRyxlQUFlLHlDQUF5QyxlQUFlLHFCQUFxQixNQUFNLDREQUE0RCxzQkFBc0IsRUFBRSxHQUFHLGVBQWUsV0FBVywwRUFBMEUsZUFBZSxhQUFhLFVBQVUsa0JBQWtCLElBQUkscURBQXFELHVCQUF1QixPQUFPLFlBQVksSUFBSSw0QkFBNEIsU0FBUyxhQUFhLDJCQUEyQixTQUFTLFFBQVEsV0FBVyxPQUFPLGtCQUFrQixtQ0FBbUMsSUFBSSwyQkFBMkIsU0FBUyxnQkFBZ0IsZUFBZSxtRkFBbUYsb0NBQW9DLG1CQUFtQixtQkFBbUIscUtBQXFLLG1CQUFtQiw0QkFBNEIsZUFBZSxZQUFZLDBEQUEwRCxtQkFBbUIsa0NBQWtDLG9CQUFvQixVQUFVLDZEQUE2RCxtQkFBbUIseUJBQXlCLHVCQUF1Qix1QkFBdUIsb0JBQW9CLGdDQUFnQyx3Q0FBd0MscUJBQXFCLE9BQU8sZ0JBQWdCLHlEQUF5RCxpQkFBaUIsb0JBQW9CLGVBQWUsa0RBQWtELDJCQUEyQixLQUFLLGFBQWEsR0FBRyw2QkFBNkIsa0JBQWtCLDZDQUE2QyxvQkFBb0IsK0JBQStCLEdBQUcsR0FBRyw4QkFBOEIsRUFBRSxzQkFBc0IsbUVBQW1FLEVBQUUseUJBQXlCLGtDQUFrQyxFQUFFLHVCQUF1QixrR0FBa0csRUFBRSxzQkFBc0Isb0NBQW9DLHNCQUFzQiwwQkFBMEIsc0JBQXNCLGlCQUFpQixrQkFBa0IsOEJBQThCLHdCQUF3Qix3Q0FBd0Msc0JBQXNCLHVCQUF1QixvQ0FBb0MsWUFBWSxvQ0FBb0MsVUFBVSxJQUFJLDRDQUE0QyxlQUFlLHdCQUF3QixnQkFBZ0IsMEJBQTBCLDZDQUE2QyxVQUFVLHdCQUF3QixnR0FBZ0csMEVBQTBFLFdBQVcseUJBQXlCLGtCQUFrQixFQUFFLDZLQUE2SywwRUFBMEUsd0JBQXdCLGlDQUFpQyxJQUFJLGVBQWUsdUJBQXVCLEtBQUssMEJBQTBCLFFBQVEsR0FBRyxVQUFVLHdCQUF3QixtQkFBbUIsU0FBUyxJQUFJLG1CQUFtQixrQkFBa0IsT0FBTyxXQUFXLGlCQUFpQixTQUFTLE1BQU0sVUFBVSxVQUFVLHdCQUF3QixvQkFBb0Isd0JBQXdCLGdDQUFnQywwQkFBMEIsc0JBQXNCLHNGQUFzRix3QkFBd0Isd0NBQXdDLHdCQUF3QixtQkFBbUIscUJBQXFCLGtDQUFrQyxLQUFLLGdCQUFnQix3QkFBd0IsYUFBYSx3Q0FBd0Msd0JBQXdCLGFBQWEsMEJBQTBCLGtCQUFrQixpSEFBaUgsU0FBUyxzRkFBc0Ysb0JBQW9CLHdCQUF3QixvQ0FBb0Msc0JBQXNCLDBCQUEwQix3QkFBd0IsZ0JBQWdCLGlFQUFpRSw0Q0FBNEMsc0JBQXNCLHdCQUF3QixzQkFBc0IsbUVBQW1FLHdCQUF3QixnR0FBZ0csOEVBQThFLCtCQUErQixLQUFLLDZJQUE2SSxzQkFBc0Isc0JBQXNCLHlCQUF5QixvQkFBb0IsdUJBQXVCLHlCQUF5QixvQkFBb0IsZ0NBQWdDLG1CQUFtQiw4RUFBOEUscUNBQXFDLGlFQUFpRSx3QkFBd0IsYUFBYSx5QkFBeUIsSUFBSSx3QkFBd0IsYUFBYSxnQkFBZ0IsY0FBYyxRQUFRLGtDQUFrQyxxRUFBcUUsUUFBUSxzQ0FBc0Msd0JBQXdCLGlCQUFpQixzQkFBc0Isa0VBQWtFLHNCQUFzQiw4QkFBOEIsYUFBYSxFQUFFLGlDQUFpQyxhQUFhLEdBQUcsc0JBQXNCLGFBQWEsZ0NBQWdDLGVBQWUscUJBQXFCLHlEQUF5RCx3QkFBd0Isd0JBQXdCLG9CQUFvQixzQkFBc0IsNEJBQTRCLHNCQUFzQixnQkFBZ0Isd0JBQXdCLHdGQUF3RixzQkFBc0IsUUFBUSxnQkFBZ0Isd0JBQXdCLG9CQUFvQix3QkFBd0IsMkJBQTJCLHdCQUF3QixnQkFBZ0Isd0JBQXdCLGtCQUFrQixRQUFRLGlFQUFpRSw2REFBNkQsa0VBQWtFLDREQUE0RCx3QkFBd0IseURBQXlELDRDQUE0QyxlQUFlLHNCQUFzQixRQUFRLFVBQVUsc0JBQXNCLDhCQUE4Qix3QkFBd0IsVUFBVSxnaEJBQWdoQixXQUFXLEtBQUssbUNBQW1DLGlDQUFpQyx3QkFBd0IsNEJBQTRCLHNCQUFzQixxQkFBcUIseUNBQXlDLGdMQUFnTCxzQkFBc0IsYUFBYSw0RkFBNEYsb0NBQW9DLFFBQVEsS0FBSyxxQ0FBcUMsK0NBQStDLE9BQU8sVUFBVSx3QkFBd0IsaUJBQWlCLGlCQUFpQiw4Q0FBOEMsV0FBVyxvRUFBb0UsZ0RBQWdELFNBQVMsR0FBRyxzQkFBc0IsYUFBYSw2Q0FBNkMsZ0NBQWdDLEtBQUssd0JBQXdCLGlCQUFpQix5REFBeUQsZUFBZSx3QkFBd0Isd0JBQXdCLG9CQUFvQiw4SUFBOEksOEJBQThCLHdCQUF3QixvQkFBb0Isd0JBQXdCLHNDQUFzQyx3QkFBd0IsbUNBQW1DLHdCQUF3Qiw2Q0FBNkMsc0RBQXNELGVBQWUsVUFBVSxJQUFJLEdBQUcsd0JBQXdCLG9CQUFvQixzQkFBc0Isc0JBQXNCLGlFQUFpRSxVQUFVLHNCQUFzQixzQkFBc0IsSUFBSSxZQUFZLFNBQVMsV0FBVyx3QkFBd0IsYUFBYSwrREFBK0Qsc0JBQXNCLFdBQVcsc0JBQXNCLCtCQUErQixhQUFhLEdBQUcsd0JBQXdCLG9EQUFvRCxrREFBa0Qsb0RBQW9ELHdCQUF3Qix3Q0FBd0MsMERBQTBELEtBQUssNEJBQTRCLCtCQUErQixVQUFVLHdCQUF3Qix5REFBeUQsMEJBQTBCLG1DQUFtQyx3QkFBd0IsR0FBRyx3QkFBd0IsMEVBQTBFLDBCQUEwQiwrQkFBK0IsSUFBSSw0QkFBNEIsU0FBUyxXQUFXLEVBQUUsc0JBQXNCLGlJQUFpSSxxQkFBcUIsdUJBQXVCLFFBQVEsMEJBQTBCLFNBQVMsZ0JBQWdCLElBQUksSUFBSSxTQUFTLHdCQUF3Qix1QkFBdUIsa0JBQWtCLGVBQWUsaUVBQWlFLHdCQUF3QixhQUFhLFdBQVcsa0JBQWtCLGFBQWEsS0FBSyx1Q0FBdUMsb0JBQW9CLGlCQUFpQixlQUFlLGFBQWEsbUJBQW1CLE9BQU8sa0JBQWtCLGlDQUFpQyxvQkFBb0IsaUJBQWlCLGtCQUFrQiw4QkFBOEIsc0JBQXNCLG1DQUFtQywwQ0FBMEMsb0JBQW9CLHVCQUF1QixzQkFBc0IsYUFBYSx3QkFBd0Isb0JBQW9CLHNCQUFzQixnQ0FBZ0MsZ0JBQWdCLG1CQUFtQixhQUFhLEVBQUUsd0JBQXdCLGdFQUFnRSxvREFBb0QsNkJBQTZCLGdCQUFnQixVQUFVLG9FQUFvRSxxQ0FBcUMsd0JBQXdCLDRDQUE0Qyx3RUFBd0UsV0FBVywyQ0FBMkMsaUJBQWlCLElBQUksMkdBQTJHLFNBQVMsS0FBSyxxQkFBcUIsd0NBQXdDLEdBQUcsc0JBQXNCLHdCQUF3QixpQ0FBaUMsa0NBQWtDLE1BQU0sZUFBZSxVQUFVLElBQUksR0FBRyx3QkFBd0IsZ0VBQWdFLGdCQUFnQixzQ0FBc0MsZ0NBQWdDLEtBQUssc0RBQXNELFVBQVUsRUFBRSx3QkFBd0IsYUFBYSw2Q0FBNkMsOENBQThDLFlBQVksNkJBQTZCLGlCQUFpQixZQUFZLHNCQUFzQixzQkFBc0IsZ0JBQWdCLHFDQUFxQyxxQkFBcUIsc0JBQXNCLHlEQUF5RCw0Q0FBNEMsZUFBZSxzQkFBc0Isb0JBQW9CLGtCQUFrQix1QkFBdUIsWUFBWSxHQUFHLHdCQUF3QixvREFBb0QsMkNBQTJDLGdCQUFnQixnRUFBZ0Usd0JBQXdCLGtCQUFrQixhQUFhLGtGQUFrRixrR0FBa0csb0JBQW9CLGtGQUFrRiw0QkFBNEIsa0JBQWtCLElBQUksT0FBTywrQkFBK0IsU0FBUyxPQUFPLHFCQUFxQixTQUFTLDJFQUEyRSxjQUFjLGNBQWMsY0FBYyxTQUFTLGdCQUFnQixhQUFhLDZDQUE2Qyw2QkFBNkIsK0NBQStDLGNBQWMsK0NBQStDLGlCQUFpQiwwQkFBMEIsR0FBRyxjQUFjLG9CQUFvQixrQkFBa0IscUJBQXFCLHNCQUFzQixnR0FBZ0csZ0JBQWdCLGVBQWUsaUJBQWlCLHdDQUF3QyxlQUFlLGVBQWUsd0JBQXdCLEdBQUcsU0FBUyxNQUFNLGdCQUFnQixhQUFhLGtDQUFrQyxXQUFXLEdBQUcsMkJBQTJCLGVBQWUsa0JBQWtCLFFBQVEscUJBQXFCLHlEQUF5RCxVQUFVLHVCQUF1QixXQUFXLG1CQUFtQixTQUFTLGlCQUFpQixNQUFNLGFBQWEsTUFBTSxrQkFBa0IsVUFBVSwwQ0FBMEMsNEJBQTRCLHlCQUF5QiwyQkFBMkIsa0RBQWtELElBQUksZUFBZSxzQkFBc0IsbUNBQW1DLE9BQU8seUJBQXlCLHVEQUF1RCxnQkFBZ0IsMkJBQTJCLFVBQVUsdUNBQXVDLHdGQUF3Rix1RkFBdUYsU0FBUyw0QkFBNEIsMEVBQTBFLFlBQVksMk5BQTJOLGNBQWMsT0FBTyxhQUFhLDhGQUE4RixjQUFjLHVCQUF1Qiw0Q0FBNEMsY0FBYyxrQkFBa0IsY0FBYyxtQ0FBbUMsY0FBYyxNQUFNLFdBQVcsc0JBQXNCLHVDQUF1QyxxQkFBcUIsd0JBQXdCLGtFQUFrRSw4QkFBOEIsaUJBQWlCLE9BQU8sUUFBUSxhQUFhLE9BQU8saUJBQWlCLDRIQUE0SCwyQ0FBMkMsa0VBQWtFLG9CQUFvQiwwSUFBMEkscUJBQXFCLE9BQU8sV0FBVywwQ0FBMEMsWUFBWSw2Q0FBNkMsd0JBQXdCLDZEQUE2RCwrQkFBK0IsR0FBRyx1Q0FBdUMsWUFBWSx1QkFBdUIsMkJBQTJCLG9CQUFvQixTQUFTLHlCQUF5QixnQ0FBZ0MsZ0JBQWdCLGNBQWMsdUNBQXVDLG9CQUFvQix5QkFBeUIsZ0NBQWdDLG9PQUFvTyxpQkFBaUIsYUFBYSx3Q0FBd0MsZ0NBQWdDLGlCQUFpQiwrQkFBK0IscUJBQXFCLFdBQVcsZ0JBQWdCLHdFQUF3RSxtQ0FBbUMsS0FBSyxLQUFLLHdDQUF3QyxxQ0FBcUMsd0JBQXdCLG9EQUFvRCxTQUFTLGdEQUFnRCxpREFBaUQsV0FBVyxnREFBZ0QsS0FBSyxnRUFBZ0Usb0RBQW9ELHNCQUFzQixtQ0FBbUMsS0FBSyxLQUFLLHlCQUF5Qix3RUFBd0UsUUFBUSxPQUFPLHlFQUF5RSx3QkFBd0IseUZBQXlGLHdCQUF3QixnQ0FBZ0Msb0xBQW9MLG9CQUFvQixtQ0FBbUMsS0FBSyxLQUFLLHlCQUF5QiwwRUFBMEUsbUJBQW1CLG1DQUFtQyxLQUFLLEtBQUsseUJBQXlCLGlCQUFpQixtQkFBbUIscUJBQXFCLFlBQVksS0FBSyxVQUFVLHlDQUF5QywrQkFBK0Isc0JBQXNCLHFDQUFxQyx1Q0FBdUMsR0FBRyxZQUFZLElBQUkscUJBQXFCLFNBQVMsMkNBQTJDLHdCQUF3Qiw0REFBNEQsb0NBQW9DLHNCQUFzQiwyQkFBMkIsc0JBQXNCLGlDQUFpQyx3QkFBd0IsZ0JBQWdCLDBCQUEwQiw0QkFBNEIsVUFBVSwwQkFBMEIsb0JBQW9CLDRCQUE0QixzQkFBc0IsOEJBQThCLHdCQUF3QixrQkFBa0IsOEJBQThCLHdCQUF3QixpREFBaUQsOEJBQThCLHdCQUF3QixZQUFZLHNCQUFzQixzQkFBc0IsSUFBSSxPQUFPLFlBQVksU0FBUyxPQUFPLFlBQVksd0JBQXdCLDJCQUEyQixzQkFBc0IsdUNBQXVDLHdCQUF3QixpQ0FBaUMsa0NBQWtDLE1BQU0sZUFBZSxVQUFVLElBQUksR0FBRyxzQkFBc0IsOEVBQThFLDRCQUE0QixtREFBbUQsZ0xBQWdMLDRCQUE0QixZQUFZLHVDQUF1QyxNQUFNLGdGQUFnRixzQkFBc0IsZ0ZBQWdGLE1BQU0sZ0NBQWdDLDJCQUEyQixTQUFTLHlCQUF5QiwrREFBK0QsU0FBUyxrQkFBa0IsSUFBSSw4REFBOEQscUJBQXFCLG1CQUFtQiw4Q0FBOEMscUJBQXFCLHNCQUFzQiw4QkFBOEIsNkJBQTZCLHNCQUFzQixhQUFhLGlMQUFpTCwrQkFBK0IseUNBQXlDLHFCQUFxQixzQ0FBc0Msc0RBQXNELGVBQWUsb0JBQW9CLHlCQUF5QixrREFBa0QsaUJBQWlCLGVBQWUsTUFBTSxnQkFBZ0IsY0FBYyxTQUFTLFNBQVMsYUFBYSxrQkFBa0Isc0JBQXNCLG1CQUFtQiw0Q0FBNEMscUJBQXFCLFdBQVcsS0FBSyxPQUFPLDhEQUE4RCxXQUFXLG9CQUFvQixlQUFlLE1BQU0sd0JBQXdCLHNCQUFzQixnQ0FBZ0Msc0JBQXNCLHVDQUF1QyxvQkFBb0IsRUFBRSx3QkFBd0IsZ0NBQWdDLDBEQUEwRCxNQUFNLG9CQUFvQixrQkFBa0IsaUJBQWlCLDRCQUE0QiwwQkFBMEIsMkJBQTJCLE1BQU0saUJBQWlCLGtCQUFrQixRQUFRLGNBQWMscUVBQXFFLFNBQVMsdUJBQXVCLElBQUksR0FBRyxzQkFBc0IsYUFBYSxnQkFBZ0IsY0FBYyxRQUFRLGtDQUFrQyxxRUFBcUUsUUFBUSxzQ0FBc0Msd0JBQXdCLGlCQUFpQixzQkFBc0Isb0JBQW9CLHNCQUFzQixrSUFBa0ksUUFBUSxpQkFBaUIsMEJBQTBCLHNCQUFzQixvQ0FBb0Msd0JBQXdCLDJFQUEyRSxZQUFZLHNCQUFzQixpREFBaUQsc0JBQXNCLE1BQU0scURBQXFELHNCQUFzQixpSUFBaUkscUJBQXFCLHVCQUF1QixRQUFRLDBCQUEwQixTQUFTLGdCQUFnQixJQUFJLElBQUksU0FBUyx3QkFBd0IsdUJBQXVCLGtCQUFrQixlQUFlLGlFQUFpRSx3QkFBd0IsYUFBYSxXQUFXLGtCQUFrQixhQUFhLEtBQUssdUNBQXVDLG9CQUFvQixpQkFBaUIsZUFBZSxhQUFhLG1CQUFtQixPQUFPLGtCQUFrQixpQ0FBaUMsc0JBQXNCLDRJQUE0SSxtaEJBQW1oQixZQUFZLFdBQVcsS0FBSyw0Q0FBNEMsZ0ZBQWdGLG9CQUFvQix3QkFBd0IsT0FBTyxnRUFBZ0Usc0JBQXNCLGFBQWEsZ0JBQWdCLFdBQVcsNkNBQTZDLEVBQUUsT0FBTyxFQUFFLHNCQUFzQixnQkFBZ0IsNEJBQTRCLElBQUksOEJBQThCLFNBQVMsa0JBQWtCLG1DQUFtQyxzQkFBc0IsMkJBQTJCLHNCQUFzQix1Q0FBdUMsb0JBQW9CLGFBQWEsc0JBQXNCLDhCQUE4Qiw2QkFBNkIsc0JBQXNCLHdDQUF3Qyx3QkFBd0IseUNBQXlDLHlCQUF5Qix1QkFBdUIsb0JBQW9CLHNCQUFzQix5REFBeUQsVUFBVSxzQkFBc0IsOEdBQThHLDhCQUE4QiwwQkFBMEIsY0FBYyxVQUFVLHlDQUF5QyxxQkFBcUIsc0JBQXNCLHdDQUF3QyxzQkFBc0IsdUJBQXVCLG9DQUFvQyxZQUFZLG9DQUFvQyxVQUFVLElBQUksNENBQTRDLGVBQWUsc0JBQXNCLGFBQWEsb0RBQW9ELGlEQUFpRCxpQ0FBaUMsY0FBYyxvQ0FBb0MsdUZBQXVGLG1FQUFtRSxzQkFBc0IsNEJBQTRCLG1DQUFtQyxlQUFlLHNCQUFzQixhQUFhLDBPQUEwTyxjQUFjLG1DQUFtQyxvQkFBb0IsNEJBQTRCLG1CQUFtQixnREFBZ0QsZ0JBQWdCLHdCQUF3Qix5QkFBeUIsTUFBTSwwQkFBMEIsTUFBTSxpQkFBaUIsc0NBQXNDLElBQUksOENBQThDLHNCQUFzQixVQUFVLHFDQUFxQyxjQUFjLG9DQUFvQyx3Q0FBd0Msa0JBQWtCLHFDQUFxQyx1TkFBdU4sV0FBVyx3Q0FBd0MsZ0RBQWdELHNCQUFzQiw2Q0FBNkMsc0RBQXNELGVBQWUsVUFBVSxJQUFJLEdBQUcsc0JBQXNCLG9CQUFvQixvQkFBb0Isd0JBQXdCLHNCQUFzQixtRUFBbUUsc0JBQXNCLGFBQWEsb0RBQW9ELGlEQUFpRCxpQ0FBaUMsY0FBYyxvQ0FBb0MsdUZBQXVGLG1FQUFtRSxzQkFBc0IsZ0JBQWdCLHNCQUFzQixpREFBaUQsVUFBVSxzQkFBc0IsY0FBYyxzQkFBc0IsZ0JBQWdCLHdCQUF3QixxQkFBcUIsc0JBQXNCLHdDQUF3Qyx3QkFBd0IseUNBQXlDLHlCQUF5Qix1QkFBdUIsc0JBQXNCLG9FQUFvRSx3QkFBd0Isc0JBQXNCLG1DQUFtQyxxREFBcUQsVUFBVSxzQkFBc0IsNEJBQTRCLDBCQUEwQiw4REFBOEQscUJBQXFCLHNCQUFzQixtREFBbUQsb0JBQW9CLHNCQUFzQiwwREFBMEQsb0JBQW9CLHdCQUF3QixPQUFPLG1CQUFtQixzQkFBc0IsZ0JBQWdCLDBCQUEwQiw0QkFBNEIsVUFBVSwwQkFBMEIsb0JBQW9CLDRCQUE0QixzQkFBc0IsOEJBQThCLHdCQUF3QixrQkFBa0IsOEJBQThCLHNCQUFzQixzREFBc0Qsb0JBQW9CLHNCQUFzQixpRUFBaUUsVUFBVSxzQkFBc0IsZ0VBQWdFLG9EQUFvRCw2QkFBNkIsZ0JBQWdCLFVBQVUsb0VBQW9FLHFDQUFxQyxzQkFBc0IsbUVBQW1FLEVBQUUseUJBQXlCLGtDQUFrQyxFQUFFLHVCQUF1QixrR0FBa0csRUFBRSxzQkFBc0IsZ0JBQWdCLDBCQUEwQiw2QkFBNkIsVUFBVSxvQkFBb0IscUhBQXFILHNCQUFzQixnQkFBZ0Isc0JBQXNCLGlEQUFpRCxVQUFVLG9CQUFvQiw4SUFBOEksOEJBQThCLHNCQUFzQixvRUFBb0Usd0JBQXdCLHNCQUFzQixtQ0FBbUMscURBQXFELFVBQVUsc0JBQXNCLG1EQUFtRCxzQkFBc0IsTUFBTSxvSkFBb0osc0JBQXNCLG1EQUFtRCx3QkFBd0IseUJBQXlCLCtDQUErQyxzQkFBc0Isb0dBQW9HLFNBQVMsMEJBQTBCLG9DQUFvQyxHQUFHLGlCQUFpQixPQUFPLE9BQU8saUJBQWlCLEVBQUUsaUJBQWlCLG1FQUFtRSxZQUFZLG1CQUFtQixnQkFBZ0IsS0FBSyxjQUFjLGlCQUFpQixZQUFZLGtCQUFrQixlQUFlLEtBQUssY0FBYyxlQUFlLHdDQUF3QyxjQUFjLDhDQUE4Qyx1QkFBdUIsc0JBQXNCLGFBQWEsNEJBQTRCLDBCQUEwQiwrQkFBK0Isc0JBQXNCLG1EQUFtRCx3QkFBd0IseUJBQXlCLCtDQUErQyxzQkFBc0IsNENBQTRDLG9CQUFvQiw0QkFBNEIsc0ZBQXNGLFVBQVUsb0JBQW9CLGFBQWEseURBQXlELG1DQUFtQyxlQUFlLElBQUksZ0JBQWdCLFNBQVMsZ0VBQWdFLHNFQUFzRSxjQUFjLEVBQUUsWUFBWSxzQkFBc0IsZ0JBQWdCLG9CQUFvQixpQkFBaUIsRUFBRSxvQkFBb0Isc0JBQXNCLDBEQUEwRCxzQkFBc0IsbUVBQW1FLHNCQUFzQixtRUFBbUUsc0JBQXNCLHlCQUF5QiwrQkFBK0Isc0JBQXNCLGFBQWEsTUFBTSw0SUFBNEksVUFBVSxpQkFBaUIsOENBQThDLG1CQUFtQiwyREFBMkQsY0FBYyxXQUFXLG9CQUFvQixnS0FBZ0sscUJBQXFCLG9DQUFvQyxzQkFBc0IsdUJBQXVCLHNCQUFzQixzSEFBc0gsYUFBYSxrSEFBa0gsYUFBYSw2R0FBNkcsYUFBYSw4R0FBOEcsYUFBYSx1RkFBdUYsaURBQWlELGFBQWEsbUhBQW1ILGFBQWEsZ0dBQWdHLHdCQUF3QixrSUFBa0ksb0JBQW9CLDZCQUE2QixvQ0FBb0MsMEJBQTBCLG1FQUFtRSxvQkFBb0Isd0lBQXdJLGFBQWEsMkNBQTJDLDRDQUE0Qyx5QkFBeUIsMkNBQTJDLEVBQUUsT0FBTyxHQUFHLFVBQVUsRUFBRSwwQkFBMEIsdUJBQXVCLGFBQWEsd0VBQXdFLFNBQVMsOENBQThDLDBCQUEwQixXQUFXLFVBQVUsS0FBSyxrQkFBa0Isa0JBQWtCLHdDQUF3QyxnREFBZ0QsYUFBYSxnQkFBZ0IsbUJBQW1CLDBCQUEwQix3QkFBd0IsVUFBVSxFQUFFLDRCQUE0QixtQkFBbUIsd0NBQXdDLDRCQUE0QixLQUFLLG9CQUFvQixtQkFBbUIsY0FBYyxxQ0FBcUMsNEJBQTRCLEtBQUssa0JBQWtCLGtCQUFrQixjQUFjLDBDQUEwQyw2QkFBNkIsdUJBQXVCLFVBQVUsRUFBRSw0QkFBNEIsc0NBQXNDLHdCQUF3QiwrRUFBK0Usb0JBQW9CLHNJQUFzSSxXQUFXLDJDQUEyQywwQ0FBMEMseUJBQXlCLDJDQUEyQyxFQUFFLE9BQU8sR0FBRyxVQUFVLGlDQUFpQyxPQUFPLHFCQUFxQix3Q0FBd0MsRUFBRSwwQkFBMEIsUUFBUSxhQUFhLEVBQUUsdUNBQXVDLGNBQWMsV0FBVyxrQ0FBa0MsV0FBVyxjQUFjLFVBQVUsOENBQThDLGNBQWMsMEZBQTBGLGFBQWEsdUVBQXVFLGNBQWMsdUJBQXVCLHNFQUFzRSx5QkFBeUIsa0JBQWtCLHVCQUF1QixrREFBa0QsV0FBVyw0REFBNEQseUJBQXlCLDBCQUEwQixJQUFJLHdCQUF3QixTQUFTLGlCQUFpQixxQ0FBcUMsY0FBYyxrQkFBa0IsdUJBQXVCLDhCQUE4QixtQkFBbUIsY0FBYyxzQkFBc0IsY0FBYyx1QkFBdUIsVUFBVSxJQUFJLFVBQVUsOENBQThDLGNBQWMsb0VBQW9FLGdCQUFnQixhQUFhLDRGQUE0RixNQUFNLGNBQWMsZ0VBQWdFLFlBQVksYUFBYSx3RkFBd0YsTUFBTSxhQUFhLCtCQUErQixhQUFhLGlEQUFpRCxvQkFBb0IsNENBQTRDLDhCQUE4QixvRUFBb0UseUJBQXlCLFNBQVMsTUFBTSw0Q0FBNEMsZ0NBQWdDLHdDQUF3QyxrQ0FBa0MsS0FBSyw0QkFBNEIsa0JBQWtCLGlDQUFpQyxrQkFBa0IscURBQXFELDBCQUEwQixrQkFBa0IsT0FBTyx5Q0FBeUMsYUFBYSxRQUFRLDZCQUE2Qiw2QkFBNkIsa0JBQWtCLHVCQUF1QixTQUFTLGNBQWMsT0FBTyxzREFBc0QsSUFBSSx3QkFBd0IsMENBQTBDLGNBQWMsd0NBQXdDLGNBQWMscUJBQXFCLGFBQWEsTUFBTSx3R0FBd0csY0FBYyxxQ0FBcUMsa0JBQWtCLE1BQU0sYUFBYSxxREFBcUQsSUFBSSxzQkFBc0IsZ0RBQWdELG9CQUFvQixPQUFPLGFBQWEsa0JBQWtCLFVBQVUsY0FBYyxzREFBc0QsSUFBSSx3QkFBd0IsMkhBQTJILGNBQWMsdURBQXVELFVBQVUsV0FBVyxxQkFBcUIsU0FBUyxTQUFTLFNBQVMsTUFBTSxnQkFBZ0IsV0FBVyxtQkFBbUIsT0FBTyxpR0FBaUcsb0JBQW9CLHlGQUF5RixrQ0FBa0MsOEJBQThCLHlCQUF5QixRQUFRLGdCQUFnQixLQUFLLDRCQUE0QiwwQ0FBMEMsd0hBQXdILDJQQUEyUCxzQ0FBc0MsNENBQTRDLHVCQUF1QixrQkFBa0IsZUFBZSx1QkFBdUIseUJBQXlCLEtBQUsscUJBQXFCLG9DQUFvQyxPQUFPLHFCQUFxQixvREFBb0QsV0FBVywrREFBK0QsOENBQThDLHlCQUF5QiwyQkFBMkIsNEJBQTRCLGlDQUFpQyxpREFBaUQsdUNBQXVDLDZEQUE2RCxXQUFXLGtCQUFrQixrRUFBa0UsaUJBQWlCLHFCQUFxQixpQ0FBaUMsc0NBQXNDLDRCQUE0Qix1REFBdUQsc0JBQXNCLFNBQVMsZUFBZSxZQUFZLG1CQUFtQixLQUFLLHlDQUF5QyxrQ0FBa0MsWUFBWSw4SEFBOEgsZ0VBQWdFLEdBQUcsU0FBUyxRQUFRLDBCQUEwQiwrQkFBK0IsVUFBVSxrQkFBa0IsWUFBWSxrQkFBa0IsbUJBQW1CLFFBQVEsUUFBUSxvQkFBb0IsdURBQXVELFVBQVUsMEJBQTBCLGlDQUFpQyxRQUFRLGlDQUFpQyxpREFBaUQsTUFBTSw0Q0FBNEMsOEJBQThCLDJFQUEyRSx3Q0FBd0Msa0NBQWtDLEtBQUssSUFBSSxnQkFBZ0IsK0JBQStCLFNBQVMsR0FBRyxTQUFTLHVDQUF1QyxXQUFXLG9DQUFvQyxjQUFjLHNEQUFzRCxXQUFXLHdCQUF3QixVQUFVLHdCQUF3QixXQUFXLDRCQUE0QixVQUFVLDRCQUE0QixRQUFRLFVBQVUsOEJBQThCLFVBQVUsV0FBVyxrQ0FBa0Msa0JBQWtCLDBGQUEwRixhQUFhLG1CQUFtQiwwQ0FBMEMsd0JBQXdCLDRDQUE0Qyx3Q0FBd0MsY0FBYyxvQkFBb0IsZUFBZSxlQUFlLGdCQUFnQiw0QkFBNEIsZ0JBQWdCLDRCQUE0QixlQUFlLDZCQUE2QixpQ0FBaUMsT0FBTyw2Q0FBNkMsZ0NBQWdDLDhCQUE4QixxREFBcUQsb0NBQW9DLFdBQVcsc0JBQXNCLHFFQUFxRSxvQkFBb0IsZ0NBQWdDLHNCQUFzQixnQkFBZ0IscUlBQXFJLHdCQUF3QixlQUFlLDBDQUEwQywyQkFBMkIsZUFBZSwwQkFBMEIsZ0JBQWdCLFdBQVcsNEJBQTRCLDJHQUEyRyw4Q0FBOEMsbURBQW1ELDJCQUEyQixZQUFZLE9BQU8sdUJBQXVCLEdBQUcsT0FBTyxxRkFBcUYscUJBQXFCLCtFQUErRSwyR0FBMkcscUJBQXFCLEdBQUcsa0JBQWtCLFlBQVksYUFBYSw2SEFBNkgsRUFBRSxvQkFBb0IsK0JBQStCLFdBQVcsNEpBQTRKLHVDQUF1QyxZQUFZLE9BQU8sc0JBQXNCLElBQUksR0FBRyw0QkFBNEIsb0NBQW9DLG1CQUFtQiwyREFBMkQsd0JBQXdCLG1GQUFtRixvQkFBb0IsMkJBQTJCLDhDQUE4QyxvQ0FBb0MsTUFBTSx3QkFBd0IsK0RBQStELDBEQUEwRCxxQkFBcUIsSUFBSSxRQUFRLE9BQU8sZ0NBQWdDLCtDQUErQyxNQUFNLDRDQUE0Qyw4QkFBOEIsdUZBQXVGLGNBQWMsSUFBSSxTQUFTLE1BQU0sMEJBQTBCLDBCQUEwQixTQUFTLE1BQU0sd0NBQXdDLHFCQUFxQixTQUFTLE1BQU0sMEJBQTBCLCtDQUErQyw0REFBNEQsbUNBQW1DLFVBQVUsSUFBSSxjQUFjLCtCQUErQixTQUFTLEdBQUcsaUJBQWlCLGdCQUFnQixxQkFBcUIsd0RBQXdELFNBQVMsaUNBQWlDLDZCQUE2QixxQkFBcUIsOEJBQThCLGVBQWUsc0ZBQXNGLG1CQUFtQixhQUFhLG1CQUFtQixXQUFXLDhDQUE4QyxpQ0FBaUMsR0FBRyw2QkFBNkIsNEdBQTRHLDRCQUE0QixtQ0FBbUMsVUFBVSxnQkFBZ0IseUhBQXlILGVBQWUsa0NBQWtDLG1CQUFtQiw4Q0FBOEMsd0JBQXdCLDRDQUE0Qyw4QkFBOEIsaUdBQWlHLFNBQVMsTUFBTSw0REFBNEQsK0hBQStILDJCQUEyQixNQUFNLGlGQUFpRixnREFBZ0QsVUFBVSxNQUFNLDBCQUEwQix1QkFBdUIsbUNBQW1DLG1CQUFtQixJQUFJLGFBQWEsK0JBQStCLFNBQVMsb0JBQW9CLCtDQUErQyxpQkFBaUIsNENBQTRDLDhCQUE4QixzREFBc0QsU0FBUyxNQUFNLGNBQWMsTUFBTSxnQ0FBZ0MsVUFBVSxNQUFNLHFCQUFxQiwwQkFBMEIsTUFBTSxnQ0FBZ0MsaUJBQWlCLHVFQUF1RSxrQkFBa0IsSUFBSSxtQ0FBbUMsVUFBVSxJQUFJLGNBQWMsK0JBQStCLFNBQVMscUJBQXFCLHlEQUF5RCxZQUFZLE9BQU8sdUJBQXVCLEdBQUcsTUFBTSxFQUFFLDZFQUE2RSxxQkFBcUIsMEJBQTBCLHlDQUF5QyxtQkFBbUIsd0JBQXdCLElBQUksb0JBQW9CLHdCQUF3QixPQUFPLEVBQUUsc0JBQXNCLDBCQUEwQix5Q0FBeUMsUUFBUSxZQUFZLGdGQUFnRixjQUFjLEVBQUUsbUJBQW1CLCtDQUErQyw2QkFBNkIsNENBQTRDLDhCQUE4QixpRkFBaUYscUJBQXFCLCtCQUErQixTQUFTLE1BQU0sZ0VBQWdFLGNBQWMsVUFBVSxNQUFNLHdDQUF3QyxTQUFTLE1BQU0sMEJBQTBCLDJDQUEyQyxVQUFVLE1BQU0sd0RBQXdELHVDQUF1QyxVQUFVLE1BQU0sMEJBQTBCLDBDQUEwQywrREFBK0QsbUNBQW1DLFVBQVUsSUFBSSxjQUFjLCtCQUErQixTQUFTLHdCQUF3Qix3Q0FBd0MscUJBQXFCLDBCQUEwQixrQkFBa0Isb0NBQW9DLG9CQUFvQixXQUFXLHFDQUFxQyxxQkFBcUIsR0FBRywwQkFBMEIsV0FBVyxpRkFBaUYsc0NBQXNDLG9CQUFvQiwyQkFBMkIscUJBQXFCLE1BQU0sT0FBTyxrQkFBa0IsMklBQTJJLDZCQUE2Qix3Q0FBd0MsWUFBWSxpQkFBaUIsOERBQThELHlDQUF5QyxzQ0FBc0Msc0JBQXNCLDhCQUE4Qix5REFBeUQsSUFBSSx5REFBeUQsU0FBUyxVQUFVLGlCQUFpQixtRUFBbUUsbUJBQW1CLCtHQUErRyxpQkFBaUIseUJBQXlCLHFFQUFxRSx3QkFBd0Isc0JBQXNCLG1DQUFtQyxvRUFBb0UsdUJBQXVCLHdGQUF3RixxQkFBcUIsWUFBWSx5QkFBeUIsb0RBQW9ELDRCQUE0Qix5QkFBeUIsbUJBQW1CLGlDQUFpQywwQ0FBMEMsdUJBQXVCLDRNQUE0TSxxQkFBcUIseU5BQXlOLGNBQWMsaUZBQWlGLGVBQWUsdUNBQXVDLGVBQWUsS0FBSywwRkFBMEYsb0NBQW9DLCtEQUErRCw0REFBNEQsR0FBRyxlQUFlLGNBQWMsRUFBRSxpRUFBaUUsOEdBQThHLFVBQVUscUNBQXFDLFVBQVUscUNBQXFDLFNBQVMsdUNBQXVDLFVBQVUsR0FBRyxnQkFBZ0Isb0JBQW9CLDREQUE0RCxFQUFFO0FBQ3I5bkYiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRlc2lzbGF2c2QvdnVlLXNlbGVjdC9kaXN0L3Z1ZS1zZWxlY3QudW1kLm1pbi5qcz8zMTI2Il0sInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbih0LGUpe1wib2JqZWN0XCI9PT10eXBlb2YgZXhwb3J0cyYmXCJvYmplY3RcIj09PXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9ZSgpOlwiZnVuY3Rpb25cIj09PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtdLGUpOlwib2JqZWN0XCI9PT10eXBlb2YgZXhwb3J0cz9leHBvcnRzW1widnVlLXNlbGVjdFwiXT1lKCk6dFtcInZ1ZS1zZWxlY3RcIl09ZSgpfSkoXCJ1bmRlZmluZWRcIiE9PXR5cGVvZiBzZWxmP3NlbGY6dGhpcywoZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9e307ZnVuY3Rpb24gbihyKXtpZihlW3JdKXJldHVybiBlW3JdLmV4cG9ydHM7dmFyIGk9ZVtyXT17aTpyLGw6ITEsZXhwb3J0czp7fX07cmV0dXJuIHRbcl0uY2FsbChpLmV4cG9ydHMsaSxpLmV4cG9ydHMsbiksaS5sPSEwLGkuZXhwb3J0c31yZXR1cm4gbi5tPXQsbi5jPWUsbi5kPWZ1bmN0aW9uKHQsZSxyKXtuLm8odCxlKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSx7ZW51bWVyYWJsZTohMCxnZXQ6cn0pfSxuLnI9ZnVuY3Rpb24odCl7XCJ1bmRlZmluZWRcIiE9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZTpcIk1vZHVsZVwifSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSl9LG4udD1mdW5jdGlvbih0LGUpe2lmKDEmZSYmKHQ9bih0KSksOCZlKXJldHVybiB0O2lmKDQmZSYmXCJvYmplY3RcIj09PXR5cGVvZiB0JiZ0JiZ0Ll9fZXNNb2R1bGUpcmV0dXJuIHQ7dmFyIHI9T2JqZWN0LmNyZWF0ZShudWxsKTtpZihuLnIociksT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsXCJkZWZhdWx0XCIse2VudW1lcmFibGU6ITAsdmFsdWU6dH0pLDImZSYmXCJzdHJpbmdcIiE9dHlwZW9mIHQpZm9yKHZhciBpIGluIHQpbi5kKHIsaSxmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0uYmluZChudWxsLGkpKTtyZXR1cm4gcn0sbi5uPWZ1bmN0aW9uKHQpe3ZhciBlPXQmJnQuX19lc01vZHVsZT9mdW5jdGlvbigpe3JldHVybiB0W1wiZGVmYXVsdFwiXX06ZnVuY3Rpb24oKXtyZXR1cm4gdH07cmV0dXJuIG4uZChlLFwiYVwiLGUpLGV9LG4ubz1mdW5jdGlvbih0LGUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxlKX0sbi5wPVwiXCIsbihuLnM9XCJmYjE1XCIpfSh7XCIwMTRiXCI6ZnVuY3Rpb24odCxlLG4pe1widXNlIHN0cmljdFwiO3ZhciByPW4oXCJlNTNkXCIpLGk9bihcIjA3ZTNcIiksbz1uKFwiOGU2MFwiKSxjPW4oXCI2M2I2XCIpLHU9bihcIjkxMzhcIiksYT1uKFwiZWJmZFwiKS5LRVkscz1uKFwiMjk0Y1wiKSxmPW4oXCJkYmRiXCIpLGw9bihcIjQ1ZjJcIikscD1uKFwiNjJhMFwiKSxoPW4oXCI1MTY4XCIpLHY9bihcImNjYjlcIiksZD1uKFwiNjcxOFwiKSx5PW4oXCI0N2VlXCIpLGI9bihcIjkwMDNcIiksZz1uKFwiZTRhZVwiKSxtPW4oXCJmNzcyXCIpLHg9bihcIjI0MWVcIiksdz1uKFwiMzZjM1wiKSxfPW4oXCIxYmMzXCIpLFM9bihcImFlYmRcIiksTz1uKFwiYTE1OVwiKSxrPW4oXCIwMzk1XCIpLGo9bihcImJmMGJcIiksRT1uKFwiOWFhOVwiKSxQPW4oXCJkOWY2XCIpLEE9bihcImMzYTFcIiksTD1qLmYsVD1QLmYsTT1rLmYsQz1yLlN5bWJvbCxGPXIuSlNPTixJPUYmJkYuc3RyaW5naWZ5LFI9XCJwcm90b3R5cGVcIixOPWgoXCJfaGlkZGVuXCIpLHE9aChcInRvUHJpbWl0aXZlXCIpLEQ9e30ucHJvcGVydHlJc0VudW1lcmFibGUsJD1mKFwic3ltYm9sLXJlZ2lzdHJ5XCIpLEc9ZihcInN5bWJvbHNcIiksVj1mKFwib3Atc3ltYm9sc1wiKSxCPU9iamVjdFtSXSxVPVwiZnVuY3Rpb25cIj09dHlwZW9mIEMmJiEhRS5mLEs9ci5RT2JqZWN0LEg9IUt8fCFLW1JdfHwhS1tSXS5maW5kQ2hpbGQsVz1vJiZzKChmdW5jdGlvbigpe3JldHVybiA3IT1PKFQoe30sXCJhXCIse2dldDpmdW5jdGlvbigpe3JldHVybiBUKHRoaXMsXCJhXCIse3ZhbHVlOjd9KS5hfX0pKS5hfSkpP2Z1bmN0aW9uKHQsZSxuKXt2YXIgcj1MKEIsZSk7ciYmZGVsZXRlIEJbZV0sVCh0LGUsbiksciYmdCE9PUImJlQoQixlLHIpfTpULEo9ZnVuY3Rpb24odCl7dmFyIGU9R1t0XT1PKENbUl0pO3JldHVybiBlLl9rPXQsZX0sWT1VJiZcInN5bWJvbFwiPT10eXBlb2YgQy5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm5cInN5bWJvbFwiPT10eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBDfSx6PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdD09PUImJnooVixlLG4pLGcodCksZT1fKGUsITApLGcobiksaShHLGUpPyhuLmVudW1lcmFibGU/KGkodCxOKSYmdFtOXVtlXSYmKHRbTl1bZV09ITEpLG49TyhuLHtlbnVtZXJhYmxlOlMoMCwhMSl9KSk6KGkodCxOKXx8VCh0LE4sUygxLHt9KSksdFtOXVtlXT0hMCksVyh0LGUsbikpOlQodCxlLG4pfSxYPWZ1bmN0aW9uKHQsZSl7Zyh0KTt2YXIgbixyPXkoZT13KGUpKSxpPTAsbz1yLmxlbmd0aDt3aGlsZShvPmkpeih0LG49cltpKytdLGVbbl0pO3JldHVybiB0fSxRPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWU/Tyh0KTpYKE8odCksZSl9LFo9ZnVuY3Rpb24odCl7dmFyIGU9RC5jYWxsKHRoaXMsdD1fKHQsITApKTtyZXR1cm4hKHRoaXM9PT1CJiZpKEcsdCkmJiFpKFYsdCkpJiYoIShlfHwhaSh0aGlzLHQpfHwhaShHLHQpfHxpKHRoaXMsTikmJnRoaXNbTl1bdF0pfHxlKX0sdHQ9ZnVuY3Rpb24odCxlKXtpZih0PXcodCksZT1fKGUsITApLHQhPT1CfHwhaShHLGUpfHxpKFYsZSkpe3ZhciBuPUwodCxlKTtyZXR1cm4hbnx8IWkoRyxlKXx8aSh0LE4pJiZ0W05dW2VdfHwobi5lbnVtZXJhYmxlPSEwKSxufX0sZXQ9ZnVuY3Rpb24odCl7dmFyIGUsbj1NKHcodCkpLHI9W10sbz0wO3doaWxlKG4ubGVuZ3RoPm8paShHLGU9bltvKytdKXx8ZT09Tnx8ZT09YXx8ci5wdXNoKGUpO3JldHVybiByfSxudD1mdW5jdGlvbih0KXt2YXIgZSxuPXQ9PT1CLHI9TShuP1Y6dyh0KSksbz1bXSxjPTA7d2hpbGUoci5sZW5ndGg+YykhaShHLGU9cltjKytdKXx8biYmIWkoQixlKXx8by5wdXNoKEdbZV0pO3JldHVybiBvfTtVfHwoQz1mdW5jdGlvbigpe2lmKHRoaXMgaW5zdGFuY2VvZiBDKXRocm93IFR5cGVFcnJvcihcIlN5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvciFcIik7dmFyIHQ9cChhcmd1bWVudHMubGVuZ3RoPjA/YXJndW1lbnRzWzBdOnZvaWQgMCksZT1mdW5jdGlvbihuKXt0aGlzPT09QiYmZS5jYWxsKFYsbiksaSh0aGlzLE4pJiZpKHRoaXNbTl0sdCkmJih0aGlzW05dW3RdPSExKSxXKHRoaXMsdCxTKDEsbikpfTtyZXR1cm4gbyYmSCYmVyhCLHQse2NvbmZpZ3VyYWJsZTohMCxzZXQ6ZX0pLEoodCl9LHUoQ1tSXSxcInRvU3RyaW5nXCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2t9KSksai5mPXR0LFAuZj16LG4oXCI2YWJmXCIpLmY9ay5mPWV0LG4oXCIzNTVkXCIpLmY9WixFLmY9bnQsbyYmIW4oXCJiOGUzXCIpJiZ1KEIsXCJwcm9wZXJ0eUlzRW51bWVyYWJsZVwiLFosITApLHYuZj1mdW5jdGlvbih0KXtyZXR1cm4gSihoKHQpKX0pLGMoYy5HK2MuVytjLkYqIVUse1N5bWJvbDpDfSk7Zm9yKHZhciBydD1cImhhc0luc3RhbmNlLGlzQ29uY2F0U3ByZWFkYWJsZSxpdGVyYXRvcixtYXRjaCxyZXBsYWNlLHNlYXJjaCxzcGVjaWVzLHNwbGl0LHRvUHJpbWl0aXZlLHRvU3RyaW5nVGFnLHVuc2NvcGFibGVzXCIuc3BsaXQoXCIsXCIpLGl0PTA7cnQubGVuZ3RoPml0OyloKHJ0W2l0KytdKTtmb3IodmFyIG90PUEoaC5zdG9yZSksY3Q9MDtvdC5sZW5ndGg+Y3Q7KWQob3RbY3QrK10pO2MoYy5TK2MuRiohVSxcIlN5bWJvbFwiLHtmb3I6ZnVuY3Rpb24odCl7cmV0dXJuIGkoJCx0Kz1cIlwiKT8kW3RdOiRbdF09Qyh0KX0sa2V5Rm9yOmZ1bmN0aW9uKHQpe2lmKCFZKHQpKXRocm93IFR5cGVFcnJvcih0K1wiIGlzIG5vdCBhIHN5bWJvbCFcIik7Zm9yKHZhciBlIGluICQpaWYoJFtlXT09PXQpcmV0dXJuIGV9LHVzZVNldHRlcjpmdW5jdGlvbigpe0g9ITB9LHVzZVNpbXBsZTpmdW5jdGlvbigpe0g9ITF9fSksYyhjLlMrYy5GKiFVLFwiT2JqZWN0XCIse2NyZWF0ZTpRLGRlZmluZVByb3BlcnR5OnosZGVmaW5lUHJvcGVydGllczpYLGdldE93blByb3BlcnR5RGVzY3JpcHRvcjp0dCxnZXRPd25Qcm9wZXJ0eU5hbWVzOmV0LGdldE93blByb3BlcnR5U3ltYm9sczpudH0pO3ZhciB1dD1zKChmdW5jdGlvbigpe0UuZigxKX0pKTtjKGMuUytjLkYqdXQsXCJPYmplY3RcIix7Z2V0T3duUHJvcGVydHlTeW1ib2xzOmZ1bmN0aW9uKHQpe3JldHVybiBFLmYoeCh0KSl9fSksRiYmYyhjLlMrYy5GKighVXx8cygoZnVuY3Rpb24oKXt2YXIgdD1DKCk7cmV0dXJuXCJbbnVsbF1cIiE9SShbdF0pfHxcInt9XCIhPUkoe2E6dH0pfHxcInt9XCIhPUkoT2JqZWN0KHQpKX0pKSksXCJKU09OXCIse3N0cmluZ2lmeTpmdW5jdGlvbih0KXt2YXIgZSxuLHI9W3RdLGk9MTt3aGlsZShhcmd1bWVudHMubGVuZ3RoPmkpci5wdXNoKGFyZ3VtZW50c1tpKytdKTtpZihuPWU9clsxXSwobShlKXx8dm9pZCAwIT09dCkmJiFZKHQpKXJldHVybiBiKGUpfHwoZT1mdW5jdGlvbih0LGUpe2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIG4mJihlPW4uY2FsbCh0aGlzLHQsZSkpLCFZKGUpKXJldHVybiBlfSksclsxXT1lLEkuYXBwbHkoRixyKX19KSxDW1JdW3FdfHxuKFwiMzVlOFwiKShDW1JdLHEsQ1tSXS52YWx1ZU9mKSxsKEMsXCJTeW1ib2xcIiksbChNYXRoLFwiTWF0aFwiLCEwKSxsKHIuSlNPTixcIkpTT05cIiwhMCl9LFwiMDFmOVwiOmZ1bmN0aW9uKHQsZSxuKXtcInVzZSBzdHJpY3RcIjt2YXIgcj1uKFwiMmQwMFwiKSxpPW4oXCI1Y2ExXCIpLG89bihcIjJhYmFcIiksYz1uKFwiMzJlOVwiKSx1PW4oXCI4NGYyXCIpLGE9bihcIjQxYTBcIikscz1uKFwiN2YyMFwiKSxmPW4oXCIzOGZkXCIpLGw9bihcIjJiNGNcIikoXCJpdGVyYXRvclwiKSxwPSEoW10ua2V5cyYmXCJuZXh0XCJpbltdLmtleXMoKSksaD1cIkBAaXRlcmF0b3JcIix2PVwia2V5c1wiLGQ9XCJ2YWx1ZXNcIix5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9O3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbixiLGcsbSx4KXthKG4sZSxiKTt2YXIgdyxfLFMsTz1mdW5jdGlvbih0KXtpZighcCYmdCBpbiBQKXJldHVybiBQW3RdO3N3aXRjaCh0KXtjYXNlIHY6cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuKHRoaXMsdCl9O2Nhc2UgZDpyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG4odGhpcyx0KX19cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuKHRoaXMsdCl9fSxrPWUrXCIgSXRlcmF0b3JcIixqPWc9PWQsRT0hMSxQPXQucHJvdG90eXBlLEE9UFtsXXx8UFtoXXx8ZyYmUFtnXSxMPUF8fE8oZyksVD1nP2o/TyhcImVudHJpZXNcIik6TDp2b2lkIDAsTT1cIkFycmF5XCI9PWUmJlAuZW50cmllc3x8QTtpZihNJiYoUz1mKE0uY2FsbChuZXcgdCkpLFMhPT1PYmplY3QucHJvdG90eXBlJiZTLm5leHQmJihzKFMsaywhMCkscnx8XCJmdW5jdGlvblwiPT10eXBlb2YgU1tsXXx8YyhTLGwseSkpKSxqJiZBJiZBLm5hbWUhPT1kJiYoRT0hMCxMPWZ1bmN0aW9uKCl7cmV0dXJuIEEuY2FsbCh0aGlzKX0pLHImJiF4fHwhcCYmIUUmJlBbbF18fGMoUCxsLEwpLHVbZV09TCx1W2tdPXksZylpZih3PXt2YWx1ZXM6aj9MOk8oZCksa2V5czptP0w6Tyh2KSxlbnRyaWVzOlR9LHgpZm9yKF8gaW4gdylfIGluIFB8fG8oUCxfLHdbX10pO2Vsc2UgaShpLlAraS5GKihwfHxFKSxlLHcpO3JldHVybiB3fX0sXCIwMmY0XCI6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oXCI0NTg4XCIpLGk9bihcImJlMTNcIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3ZhciBvLGMsdT1TdHJpbmcoaShlKSksYT1yKG4pLHM9dS5sZW5ndGg7cmV0dXJuIGE8MHx8YT49cz90P1wiXCI6dm9pZCAwOihvPXUuY2hhckNvZGVBdChhKSxvPDU1Mjk2fHxvPjU2MzE5fHxhKzE9PT1zfHwoYz11LmNoYXJDb2RlQXQoYSsxKSk8NTYzMjB8fGM+NTczNDM/dD91LmNoYXJBdChhKTpvOnQ/dS5zbGljZShhLGErMik6Yy01NjMyMCsoby01NTI5Njw8MTApKzY1NTM2KX19fSxcIjAzOTBcIjpmdW5jdGlvbih0LGUsbil7XCJ1c2Ugc3RyaWN0XCI7dmFyIHI9bihcIjAyZjRcIikoITApO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIGUrKG4/cih0LGUpLmxlbmd0aDoxKX19LFwiMDM5NVwiOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKFwiMzZjM1wiKSxpPW4oXCI2YWJmXCIpLmYsbz17fS50b1N0cmluZyxjPVwib2JqZWN0XCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdyYmT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM/T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luZG93KTpbXSx1PWZ1bmN0aW9uKHQpe3RyeXtyZXR1cm4gaSh0KX1jYXRjaChlKXtyZXR1cm4gYy5zbGljZSgpfX07dC5leHBvcnRzLmY9ZnVuY3Rpb24odCl7cmV0dXJuIGMmJlwiW29iamVjdCBXaW5kb3ddXCI9PW8uY2FsbCh0KT91KHQpOmkocih0KSl9fSxcIjA3ZTNcIjpmdW5jdGlvbih0LGUpe3ZhciBuPXt9Lmhhc093blByb3BlcnR5O3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBuLmNhbGwodCxlKX19LFwiMGE0OVwiOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKFwiOWI0M1wiKSxpPW4oXCI2MjZhXCIpLG89bihcIjRiZjhcIiksYz1uKFwiOWRlZlwiKSx1PW4oXCJjZDFjXCIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPTE9PXQsYT0yPT10LHM9Mz09dCxmPTQ9PXQsbD02PT10LHA9NT09dHx8bCxoPWV8fHU7cmV0dXJuIGZ1bmN0aW9uKGUsdSx2KXtmb3IodmFyIGQseSxiPW8oZSksZz1pKGIpLG09cih1LHYsMykseD1jKGcubGVuZ3RoKSx3PTAsXz1uP2goZSx4KTphP2goZSwwKTp2b2lkIDA7eD53O3crKylpZigocHx8dyBpbiBnKSYmKGQ9Z1t3XSx5PW0oZCx3LGIpLHQpKWlmKG4pX1t3XT15O2Vsc2UgaWYoeSlzd2l0Y2godCl7Y2FzZSAzOnJldHVybiEwO2Nhc2UgNTpyZXR1cm4gZDtjYXNlIDY6cmV0dXJuIHc7Y2FzZSAyOl8ucHVzaChkKX1lbHNlIGlmKGYpcmV0dXJuITE7cmV0dXJuIGw/LTE6c3x8Zj9mOl99fX0sXCIwYmZiXCI6ZnVuY3Rpb24odCxlLG4pe1widXNlIHN0cmljdFwiO3ZhciByPW4oXCJjYjdjXCIpO3QuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0PXIodGhpcyksZT1cIlwiO3JldHVybiB0Lmdsb2JhbCYmKGUrPVwiZ1wiKSx0Lmlnbm9yZUNhc2UmJihlKz1cImlcIiksdC5tdWx0aWxpbmUmJihlKz1cIm1cIiksdC51bmljb2RlJiYoZSs9XCJ1XCIpLHQuc3RpY2t5JiYoZSs9XCJ5XCIpLGV9fSxcIjBkNThcIjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bihcImNlMTBcIiksaT1uKFwiZTExZVwiKTt0LmV4cG9ydHM9T2JqZWN0LmtleXN8fGZ1bmN0aW9uKHQpe3JldHVybiByKHQsaSl9fSxcIjBmYzlcIjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bihcIjNhMzhcIiksaT1NYXRoLm1heCxvPU1hdGgubWluO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0PXIodCksdDwwP2kodCtlLDApOm8odCxlKX19LDExNjk6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oXCIyZDk1XCIpO3QuZXhwb3J0cz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbih0KXtyZXR1cm5cIkFycmF5XCI9PXIodCl9fSwxMTczOmZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuLHIpe2lmKCEodCBpbnN0YW5jZW9mIGUpfHx2b2lkIDAhPT1yJiZyIGluIHQpdGhyb3cgVHlwZUVycm9yKG4rXCI6IGluY29ycmVjdCBpbnZvY2F0aW9uIVwiKTtyZXR1cm4gdH19LFwiMTFlOVwiOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKFwiNTJhN1wiKSxpPW4oXCI0NjMwXCIpLG89bihcIjY4MjFcIiksYz1uKFwiNmE5OVwiKSx1PW4oXCI2OWE4XCIpLGE9bihcImM2OWFcIikscz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO2UuZj1uKFwiOWUxZVwiKT9zOmZ1bmN0aW9uKHQsZSl7aWYodD1vKHQpLGU9YyhlLCEwKSxhKXRyeXtyZXR1cm4gcyh0LGUpfWNhdGNoKG4pe31pZih1KHQsZSkpcmV0dXJuIGkoIXIuZi5jYWxsKHQsZSksdFtlXSl9fSwxNDk1OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKFwiODZjY1wiKSxpPW4oXCJjYjdjXCIpLG89bihcIjBkNThcIik7dC5leHBvcnRzPW4oXCI5ZTFlXCIpP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzOmZ1bmN0aW9uKHQsZSl7aSh0KTt2YXIgbixjPW8oZSksdT1jLmxlbmd0aCxhPTA7d2hpbGUodT5hKXIuZih0LG49Y1thKytdLGVbbl0pO3JldHVybiB0fX0sMTY1NDpmdW5jdGlvbih0LGUsbil7XCJ1c2Ugc3RyaWN0XCI7dmFyIHI9bihcIjcxYzFcIikoITApO24oXCIzMGYxXCIpKFN0cmluZyxcIlN0cmluZ1wiLChmdW5jdGlvbih0KXt0aGlzLl90PVN0cmluZyh0KSx0aGlzLl9pPTB9KSwoZnVuY3Rpb24oKXt2YXIgdCxlPXRoaXMuX3Qsbj10aGlzLl9pO3JldHVybiBuPj1lLmxlbmd0aD97dmFsdWU6dm9pZCAwLGRvbmU6ITB9Oih0PXIoZSxuKSx0aGlzLl9pKz10Lmxlbmd0aCx7dmFsdWU6dCxkb25lOiExfSl9KSl9LDE2OTE6ZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9XCJjb25zdHJ1Y3RvcixoYXNPd25Qcm9wZXJ0eSxpc1Byb3RvdHlwZU9mLHByb3BlcnR5SXNFbnVtZXJhYmxlLHRvTG9jYWxlU3RyaW5nLHRvU3RyaW5nLHZhbHVlT2ZcIi5zcGxpdChcIixcIil9LDE5OTE6ZnVuY3Rpb24odCxlLG4pe3ZhciByLGksbyxjPW4oXCI5YjQzXCIpLHU9bihcIjMxZjRcIiksYT1uKFwiZmFiMlwiKSxzPW4oXCIyMzBlXCIpLGY9bihcIjc3MjZcIiksbD1mLnByb2Nlc3MscD1mLnNldEltbWVkaWF0ZSxoPWYuY2xlYXJJbW1lZGlhdGUsdj1mLk1lc3NhZ2VDaGFubmVsLGQ9Zi5EaXNwYXRjaCx5PTAsYj17fSxnPVwib25yZWFkeXN0YXRlY2hhbmdlXCIsbT1mdW5jdGlvbigpe3ZhciB0PSt0aGlzO2lmKGIuaGFzT3duUHJvcGVydHkodCkpe3ZhciBlPWJbdF07ZGVsZXRlIGJbdF0sZSgpfX0seD1mdW5jdGlvbih0KXttLmNhbGwodC5kYXRhKX07cCYmaHx8KHA9ZnVuY3Rpb24odCl7dmFyIGU9W10sbj0xO3doaWxlKGFyZ3VtZW50cy5sZW5ndGg+billLnB1c2goYXJndW1lbnRzW24rK10pO3JldHVybiBiWysreV09ZnVuY3Rpb24oKXt1KFwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpGdW5jdGlvbih0KSxlKX0scih5KSx5fSxoPWZ1bmN0aW9uKHQpe2RlbGV0ZSBiW3RdfSxcInByb2Nlc3NcIj09bihcIjJkOTVcIikobCk/cj1mdW5jdGlvbih0KXtsLm5leHRUaWNrKGMobSx0LDEpKX06ZCYmZC5ub3c/cj1mdW5jdGlvbih0KXtkLm5vdyhjKG0sdCwxKSl9OnY/KGk9bmV3IHYsbz1pLnBvcnQyLGkucG9ydDEub25tZXNzYWdlPXgscj1jKG8ucG9zdE1lc3NhZ2UsbywxKSk6Zi5hZGRFdmVudExpc3RlbmVyJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBwb3N0TWVzc2FnZSYmIWYuaW1wb3J0U2NyaXB0cz8ocj1mdW5jdGlvbih0KXtmLnBvc3RNZXNzYWdlKHQrXCJcIixcIipcIil9LGYuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIix4LCExKSk6cj1nIGluIHMoXCJzY3JpcHRcIik/ZnVuY3Rpb24odCl7YS5hcHBlbmRDaGlsZChzKFwic2NyaXB0XCIpKVtnXT1mdW5jdGlvbigpe2EucmVtb3ZlQ2hpbGQodGhpcyksbS5jYWxsKHQpfX06ZnVuY3Rpb24odCl7c2V0VGltZW91dChjKG0sdCwxKSwwKX0pLHQuZXhwb3J0cz17c2V0OnAsY2xlYXI6aH19LFwiMWFmNlwiOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKFwiNjNiNlwiKTtyKHIuUyxcIkFycmF5XCIse2lzQXJyYXk6bihcIjkwMDNcIil9KX0sXCIxYmMzXCI6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oXCJmNzcyXCIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKCFyKHQpKXJldHVybiB0O3ZhciBuLGk7aWYoZSYmXCJmdW5jdGlvblwiPT10eXBlb2Yobj10LnRvU3RyaW5nKSYmIXIoaT1uLmNhbGwodCkpKXJldHVybiBpO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mKG49dC52YWx1ZU9mKSYmIXIoaT1uLmNhbGwodCkpKXJldHVybiBpO2lmKCFlJiZcImZ1bmN0aW9uXCI9PXR5cGVvZihuPXQudG9TdHJpbmcpJiYhcihpPW4uY2FsbCh0KSkpcmV0dXJuIGk7dGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpfX0sXCIxZWM5XCI6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oXCJmNzcyXCIpLGk9bihcImU1M2RcIikuZG9jdW1lbnQsbz1yKGkpJiZyKGkuY3JlYXRlRWxlbWVudCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBvP2kuY3JlYXRlRWxlbWVudCh0KTp7fX19LFwiMWZhOFwiOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKFwiY2I3Y1wiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4saSl7dHJ5e3JldHVybiBpP2UocihuKVswXSxuWzFdKTplKG4pfWNhdGNoKGMpe3ZhciBvPXRbXCJyZXR1cm5cIl07dGhyb3cgdm9pZCAwIT09byYmcihvLmNhbGwodCkpLGN9fX0sXCIyMGQ2XCI6ZnVuY3Rpb24odCxlLG4pe1widXNlIHN0cmljdFwiO3ZhciByPW4oXCI1Y2ExXCIpLGk9bihcIjBhNDlcIikoNiksbz1cImZpbmRJbmRleFwiLGM9ITA7byBpbltdJiZBcnJheSgxKVtvXSgoZnVuY3Rpb24oKXtjPSExfSkpLHIoci5QK3IuRipjLFwiQXJyYXlcIix7ZmluZEluZGV4OmZ1bmN0aW9uKHQpe3JldHVybiBpKHRoaXMsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSksbihcIjljNmNcIikobyl9LFwiMjBmZFwiOmZ1bmN0aW9uKHQsZSxuKXtcInVzZSBzdHJpY3RcIjt2YXIgcj1uKFwiZDlmNlwiKSxpPW4oXCJhZWJkXCIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7ZSBpbiB0P3IuZih0LGUsaSgwLG4pKTp0W2VdPW59fSxcIjIxNGZcIjpmdW5jdGlvbih0LGUsbil7XCJ1c2Ugc3RyaWN0XCI7bihcImIwYzVcIik7dmFyIHI9bihcIjJhYmFcIiksaT1uKFwiMzJlOVwiKSxvPW4oXCI3OWU1XCIpLGM9bihcImJlMTNcIiksdT1uKFwiMmI0Y1wiKSxhPW4oXCI1MjBhXCIpLHM9dShcInNwZWNpZXNcIiksZj0hbygoZnVuY3Rpb24oKXt2YXIgdD0vLi87cmV0dXJuIHQuZXhlYz1mdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0Lmdyb3Vwcz17YTpcIjdcIn0sdH0sXCI3XCIhPT1cIlwiLnJlcGxhY2UodCxcIiQ8YT5cIil9KSksbD1mdW5jdGlvbigpe3ZhciB0PS8oPzopLyxlPXQuZXhlYzt0LmV4ZWM9ZnVuY3Rpb24oKXtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O3ZhciBuPVwiYWJcIi5zcGxpdCh0KTtyZXR1cm4gMj09PW4ubGVuZ3RoJiZcImFcIj09PW5bMF0mJlwiYlwiPT09blsxXX0oKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3ZhciBwPXUodCksaD0hbygoZnVuY3Rpb24oKXt2YXIgZT17fTtyZXR1cm4gZVtwXT1mdW5jdGlvbigpe3JldHVybiA3fSw3IT1cIlwiW3RdKGUpfSkpLHY9aD8hbygoZnVuY3Rpb24oKXt2YXIgZT0hMSxuPS9hLztyZXR1cm4gbi5leGVjPWZ1bmN0aW9uKCl7cmV0dXJuIGU9ITAsbnVsbH0sXCJzcGxpdFwiPT09dCYmKG4uY29uc3RydWN0b3I9e30sbi5jb25zdHJ1Y3RvcltzXT1mdW5jdGlvbigpe3JldHVybiBufSksbltwXShcIlwiKSwhZX0pKTp2b2lkIDA7aWYoIWh8fCF2fHxcInJlcGxhY2VcIj09PXQmJiFmfHxcInNwbGl0XCI9PT10JiYhbCl7dmFyIGQ9Ly4vW3BdLHk9bihjLHAsXCJcIlt0XSwoZnVuY3Rpb24odCxlLG4scixpKXtyZXR1cm4gZS5leGVjPT09YT9oJiYhaT97ZG9uZTohMCx2YWx1ZTpkLmNhbGwoZSxuLHIpfTp7ZG9uZTohMCx2YWx1ZTp0LmNhbGwobixlLHIpfTp7ZG9uZTohMX19KSksYj15WzBdLGc9eVsxXTtyKFN0cmluZy5wcm90b3R5cGUsdCxiKSxpKFJlZ0V4cC5wcm90b3R5cGUscCwyPT1lP2Z1bmN0aW9uKHQsZSl7cmV0dXJuIGcuY2FsbCh0LHRoaXMsZSl9OmZ1bmN0aW9uKHQpe3JldHVybiBnLmNhbGwodCx0aGlzKX0pfX19LFwiMjMwZVwiOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKFwiZDNmNFwiKSxpPW4oXCI3NzI2XCIpLmRvY3VtZW50LG89cihpKSYmcihpLmNyZWF0ZUVsZW1lbnQpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbz9pLmNyZWF0ZUVsZW1lbnQodCk6e319fSxcIjIzYzZcIjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bihcIjJkOTVcIiksaT1uKFwiMmI0Y1wiKShcInRvU3RyaW5nVGFnXCIpLG89XCJBcmd1bWVudHNcIj09cihmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpLGM9ZnVuY3Rpb24odCxlKXt0cnl7cmV0dXJuIHRbZV19Y2F0Y2gobil7fX07dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLG4sdTtyZXR1cm4gdm9pZCAwPT09dD9cIlVuZGVmaW5lZFwiOm51bGw9PT10P1wiTnVsbFwiOlwic3RyaW5nXCI9PXR5cGVvZihuPWMoZT1PYmplY3QodCksaSkpP246bz9yKGUpOlwiT2JqZWN0XCI9PSh1PXIoZSkpJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLmNhbGxlZT9cIkFyZ3VtZW50c1wiOnV9fSxcIjI0MWVcIjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bihcIjI1ZWJcIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3Qocih0KSl9fSxcIjI0YzVcIjpmdW5jdGlvbih0LGUsbil7XCJ1c2Ugc3RyaWN0XCI7dmFyIHIsaSxvLGMsdT1uKFwiYjhlM1wiKSxhPW4oXCJlNTNkXCIpLHM9bihcImQ4NjRcIiksZj1uKFwiNDBjM1wiKSxsPW4oXCI2M2I2XCIpLHA9bihcImY3NzJcIiksaD1uKFwiNzlhYVwiKSx2PW4oXCIxMTczXCIpLGQ9bihcImEyMmFcIikseT1uKFwiZjIwMVwiKSxiPW4oXCI0MTc4XCIpLnNldCxnPW4oXCJhYmEyXCIpKCksbT1uKFwiNjU2ZVwiKSx4PW4oXCI0NDM5XCIpLHc9bihcImJjMTNcIiksXz1uKFwiY2Q3OFwiKSxTPVwiUHJvbWlzZVwiLE89YS5UeXBlRXJyb3Isaz1hLnByb2Nlc3Msaj1rJiZrLnZlcnNpb25zLEU9aiYmai52OHx8XCJcIixQPWFbU10sQT1cInByb2Nlc3NcIj09ZihrKSxMPWZ1bmN0aW9uKCl7fSxUPWk9bS5mLE09ISFmdW5jdGlvbigpe3RyeXt2YXIgdD1QLnJlc29sdmUoMSksZT0odC5jb25zdHJ1Y3Rvcj17fSlbbihcIjUxNjhcIikoXCJzcGVjaWVzXCIpXT1mdW5jdGlvbih0KXt0KEwsTCl9O3JldHVybihBfHxcImZ1bmN0aW9uXCI9PXR5cGVvZiBQcm9taXNlUmVqZWN0aW9uRXZlbnQpJiZ0LnRoZW4oTClpbnN0YW5jZW9mIGUmJjAhPT1FLmluZGV4T2YoXCI2LjZcIikmJi0xPT09dy5pbmRleE9mKFwiQ2hyb21lLzY2XCIpfWNhdGNoKHIpe319KCksQz1mdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4hKCFwKHQpfHxcImZ1bmN0aW9uXCIhPXR5cGVvZihlPXQudGhlbikpJiZlfSxGPWZ1bmN0aW9uKHQsZSl7aWYoIXQuX24pe3QuX249ITA7dmFyIG49dC5fYztnKChmdW5jdGlvbigpe3ZhciByPXQuX3YsaT0xPT10Ll9zLG89MCxjPWZ1bmN0aW9uKGUpe3ZhciBuLG8sYyx1PWk/ZS5vazplLmZhaWwsYT1lLnJlc29sdmUscz1lLnJlamVjdCxmPWUuZG9tYWluO3RyeXt1PyhpfHwoMj09dC5faCYmTih0KSx0Ll9oPTEpLCEwPT09dT9uPXI6KGYmJmYuZW50ZXIoKSxuPXUociksZiYmKGYuZXhpdCgpLGM9ITApKSxuPT09ZS5wcm9taXNlP3MoTyhcIlByb21pc2UtY2hhaW4gY3ljbGVcIikpOihvPUMobikpP28uY2FsbChuLGEscyk6YShuKSk6cyhyKX1jYXRjaChsKXtmJiYhYyYmZi5leGl0KCkscyhsKX19O3doaWxlKG4ubGVuZ3RoPm8pYyhuW28rK10pO3QuX2M9W10sdC5fbj0hMSxlJiYhdC5faCYmSSh0KX0pKX19LEk9ZnVuY3Rpb24odCl7Yi5jYWxsKGEsKGZ1bmN0aW9uKCl7dmFyIGUsbixyLGk9dC5fdixvPVIodCk7aWYobyYmKGU9eCgoZnVuY3Rpb24oKXtBP2suZW1pdChcInVuaGFuZGxlZFJlamVjdGlvblwiLGksdCk6KG49YS5vbnVuaGFuZGxlZHJlamVjdGlvbik/bih7cHJvbWlzZTp0LHJlYXNvbjppfSk6KHI9YS5jb25zb2xlKSYmci5lcnJvciYmci5lcnJvcihcIlVuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvblwiLGkpfSkpLHQuX2g9QXx8Uih0KT8yOjEpLHQuX2E9dm9pZCAwLG8mJmUuZSl0aHJvdyBlLnZ9KSl9LFI9ZnVuY3Rpb24odCl7cmV0dXJuIDEhPT10Ll9oJiYwPT09KHQuX2F8fHQuX2MpLmxlbmd0aH0sTj1mdW5jdGlvbih0KXtiLmNhbGwoYSwoZnVuY3Rpb24oKXt2YXIgZTtBP2suZW1pdChcInJlamVjdGlvbkhhbmRsZWRcIix0KTooZT1hLm9ucmVqZWN0aW9uaGFuZGxlZCkmJmUoe3Byb21pc2U6dCxyZWFzb246dC5fdn0pfSkpfSxxPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7ZS5fZHx8KGUuX2Q9ITAsZT1lLl93fHxlLGUuX3Y9dCxlLl9zPTIsZS5fYXx8KGUuX2E9ZS5fYy5zbGljZSgpKSxGKGUsITApKX0sRD1mdW5jdGlvbih0KXt2YXIgZSxuPXRoaXM7aWYoIW4uX2Qpe24uX2Q9ITAsbj1uLl93fHxuO3RyeXtpZihuPT09dCl0aHJvdyBPKFwiUHJvbWlzZSBjYW4ndCBiZSByZXNvbHZlZCBpdHNlbGZcIik7KGU9Qyh0KSk/ZygoZnVuY3Rpb24oKXt2YXIgcj17X3c6bixfZDohMX07dHJ5e2UuY2FsbCh0LHMoRCxyLDEpLHMocSxyLDEpKX1jYXRjaChpKXtxLmNhbGwocixpKX19KSk6KG4uX3Y9dCxuLl9zPTEsRihuLCExKSl9Y2F0Y2gocil7cS5jYWxsKHtfdzpuLF9kOiExfSxyKX19fTtNfHwoUD1mdW5jdGlvbih0KXt2KHRoaXMsUCxTLFwiX2hcIiksaCh0KSxyLmNhbGwodGhpcyk7dHJ5e3QocyhELHRoaXMsMSkscyhxLHRoaXMsMSkpfWNhdGNoKGUpe3EuY2FsbCh0aGlzLGUpfX0scj1mdW5jdGlvbih0KXt0aGlzLl9jPVtdLHRoaXMuX2E9dm9pZCAwLHRoaXMuX3M9MCx0aGlzLl9kPSExLHRoaXMuX3Y9dm9pZCAwLHRoaXMuX2g9MCx0aGlzLl9uPSExfSxyLnByb3RvdHlwZT1uKFwiNWM5NVwiKShQLnByb3RvdHlwZSx7dGhlbjpmdW5jdGlvbih0LGUpe3ZhciBuPVQoeSh0aGlzLFApKTtyZXR1cm4gbi5vaz1cImZ1bmN0aW9uXCIhPXR5cGVvZiB0fHx0LG4uZmFpbD1cImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiZlLG4uZG9tYWluPUE/ay5kb21haW46dm9pZCAwLHRoaXMuX2MucHVzaChuKSx0aGlzLl9hJiZ0aGlzLl9hLnB1c2gobiksdGhpcy5fcyYmRih0aGlzLCExKSxuLnByb21pc2V9LGNhdGNoOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnRoZW4odm9pZCAwLHQpfX0pLG89ZnVuY3Rpb24oKXt2YXIgdD1uZXcgcjt0aGlzLnByb21pc2U9dCx0aGlzLnJlc29sdmU9cyhELHQsMSksdGhpcy5yZWplY3Q9cyhxLHQsMSl9LG0uZj1UPWZ1bmN0aW9uKHQpe3JldHVybiB0PT09UHx8dD09PWM/bmV3IG8odCk6aSh0KX0pLGwobC5HK2wuVytsLkYqIU0se1Byb21pc2U6UH0pLG4oXCI0NWYyXCIpKFAsUyksbihcIjRjOTVcIikoUyksYz1uKFwiNTg0YVwiKVtTXSxsKGwuUytsLkYqIU0sUyx7cmVqZWN0OmZ1bmN0aW9uKHQpe3ZhciBlPVQodGhpcyksbj1lLnJlamVjdDtyZXR1cm4gbih0KSxlLnByb21pc2V9fSksbChsLlMrbC5GKih1fHwhTSksUyx7cmVzb2x2ZTpmdW5jdGlvbih0KXtyZXR1cm4gXyh1JiZ0aGlzPT09Yz9QOnRoaXMsdCl9fSksbChsLlMrbC5GKiEoTSYmbihcIjRlZTFcIikoKGZ1bmN0aW9uKHQpe1AuYWxsKHQpW1wiY2F0Y2hcIl0oTCl9KSkpLFMse2FsbDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLG49VChlKSxyPW4ucmVzb2x2ZSxpPW4ucmVqZWN0LG89eCgoZnVuY3Rpb24oKXt2YXIgbj1bXSxvPTAsYz0xO2QodCwhMSwoZnVuY3Rpb24odCl7dmFyIHU9bysrLGE9ITE7bi5wdXNoKHZvaWQgMCksYysrLGUucmVzb2x2ZSh0KS50aGVuKChmdW5jdGlvbih0KXthfHwoYT0hMCxuW3VdPXQsLS1jfHxyKG4pKX0pLGkpfSkpLC0tY3x8cihuKX0pKTtyZXR1cm4gby5lJiZpKG8udiksbi5wcm9taXNlfSxyYWNlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1UKGUpLHI9bi5yZWplY3QsaT14KChmdW5jdGlvbigpe2QodCwhMSwoZnVuY3Rpb24odCl7ZS5yZXNvbHZlKHQpLnRoZW4obi5yZXNvbHZlLHIpfSkpfSkpO3JldHVybiBpLmUmJnIoaS52KSxuLnByb21pc2V9fSl9LFwiMjVlYlwiOmZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKHZvaWQgMD09dCl0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiAgXCIrdCk7cmV0dXJuIHR9fSwyNjIxOmZ1bmN0aW9uKHQsZSl7ZS5mPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHN9LFwiMjdlZVwiOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKFwiMjNjNlwiKSxpPW4oXCIyYjRjXCIpKFwiaXRlcmF0b3JcIiksbz1uKFwiODRmMlwiKTt0LmV4cG9ydHM9bihcIjgzNzhcIikuZ2V0SXRlcmF0b3JNZXRob2Q9ZnVuY3Rpb24odCl7aWYodm9pZCAwIT10KXJldHVybiB0W2ldfHx0W1wiQEBpdGVyYXRvclwiXXx8b1tyKHQpXX19LFwiMjhhNVwiOmZ1bmN0aW9uKHQsZSxuKXtcInVzZSBzdHJpY3RcIjt2YXIgcj1uKFwiYWFlM1wiKSxpPW4oXCJjYjdjXCIpLG89bihcImViZDZcIiksYz1uKFwiMDM5MFwiKSx1PW4oXCI5ZGVmXCIpLGE9bihcIjVmMWJcIikscz1uKFwiNTIwYVwiKSxmPW4oXCI3OWU1XCIpLGw9TWF0aC5taW4scD1bXS5wdXNoLGg9XCJzcGxpdFwiLHY9XCJsZW5ndGhcIixkPVwibGFzdEluZGV4XCIseT00Mjk0OTY3Mjk1LGI9IWYoKGZ1bmN0aW9uKCl7UmVnRXhwKHksXCJ5XCIpfSkpO24oXCIyMTRmXCIpKFwic3BsaXRcIiwyLChmdW5jdGlvbih0LGUsbixmKXt2YXIgZztyZXR1cm4gZz1cImNcIj09XCJhYmJjXCJbaF0oLyhiKSovKVsxXXx8NCE9XCJ0ZXN0XCJbaF0oLyg/OikvLC0xKVt2XXx8MiE9XCJhYlwiW2hdKC8oPzphYikqLylbdl18fDQhPVwiLlwiW2hdKC8oLj8pKC4/KS8pW3ZdfHxcIi5cIltoXSgvKCkoKS8pW3ZdPjF8fFwiXCJbaF0oLy4/Lylbdl0/ZnVuY3Rpb24odCxlKXt2YXIgaT1TdHJpbmcodGhpcyk7aWYodm9pZCAwPT09dCYmMD09PWUpcmV0dXJuW107aWYoIXIodCkpcmV0dXJuIG4uY2FsbChpLHQsZSk7dmFyIG8sYyx1LGE9W10sZj0odC5pZ25vcmVDYXNlP1wiaVwiOlwiXCIpKyh0Lm11bHRpbGluZT9cIm1cIjpcIlwiKSsodC51bmljb2RlP1widVwiOlwiXCIpKyh0LnN0aWNreT9cInlcIjpcIlwiKSxsPTAsaD12b2lkIDA9PT1lP3k6ZT4+PjAsYj1uZXcgUmVnRXhwKHQuc291cmNlLGYrXCJnXCIpO3doaWxlKG89cy5jYWxsKGIsaSkpe2lmKGM9YltkXSxjPmwmJihhLnB1c2goaS5zbGljZShsLG8uaW5kZXgpKSxvW3ZdPjEmJm8uaW5kZXg8aVt2XSYmcC5hcHBseShhLG8uc2xpY2UoMSkpLHU9b1swXVt2XSxsPWMsYVt2XT49aCkpYnJlYWs7YltkXT09PW8uaW5kZXgmJmJbZF0rK31yZXR1cm4gbD09PWlbdl0/IXUmJmIudGVzdChcIlwiKXx8YS5wdXNoKFwiXCIpOmEucHVzaChpLnNsaWNlKGwpKSxhW3ZdPmg/YS5zbGljZSgwLGgpOmF9OlwiMFwiW2hdKHZvaWQgMCwwKVt2XT9mdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDA9PT10JiYwPT09ZT9bXTpuLmNhbGwodGhpcyx0LGUpfTpuLFtmdW5jdGlvbihuLHIpe3ZhciBpPXQodGhpcyksbz12b2lkIDA9PW4/dm9pZCAwOm5bZV07cmV0dXJuIHZvaWQgMCE9PW8/by5jYWxsKG4saSxyKTpnLmNhbGwoU3RyaW5nKGkpLG4scil9LGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZihnLHQsdGhpcyxlLGchPT1uKTtpZihyLmRvbmUpcmV0dXJuIHIudmFsdWU7dmFyIHM9aSh0KSxwPVN0cmluZyh0aGlzKSxoPW8ocyxSZWdFeHApLHY9cy51bmljb2RlLGQ9KHMuaWdub3JlQ2FzZT9cImlcIjpcIlwiKSsocy5tdWx0aWxpbmU/XCJtXCI6XCJcIikrKHMudW5pY29kZT9cInVcIjpcIlwiKSsoYj9cInlcIjpcImdcIiksbT1uZXcgaChiP3M6XCJeKD86XCIrcy5zb3VyY2UrXCIpXCIsZCkseD12b2lkIDA9PT1lP3k6ZT4+PjA7aWYoMD09PXgpcmV0dXJuW107aWYoMD09PXAubGVuZ3RoKXJldHVybiBudWxsPT09YShtLHApP1twXTpbXTt2YXIgdz0wLF89MCxTPVtdO3doaWxlKF88cC5sZW5ndGgpe20ubGFzdEluZGV4PWI/XzowO3ZhciBPLGs9YShtLGI/cDpwLnNsaWNlKF8pKTtpZihudWxsPT09a3x8KE89bCh1KG0ubGFzdEluZGV4KyhiPzA6XykpLHAubGVuZ3RoKSk9PT13KV89YyhwLF8sdik7ZWxzZXtpZihTLnB1c2gocC5zbGljZSh3LF8pKSxTLmxlbmd0aD09PXgpcmV0dXJuIFM7Zm9yKHZhciBqPTE7ajw9ay5sZW5ndGgtMTtqKyspaWYoUy5wdXNoKGtbal0pLFMubGVuZ3RoPT09eClyZXR1cm4gUztfPXc9T319cmV0dXJuIFMucHVzaChwLnNsaWNlKHcpKSxTfV19KSl9LFwiMjk0Y1wiOmZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3RyeXtyZXR1cm4hIXQoKX1jYXRjaChlKXtyZXR1cm4hMH19fSxcIjJhYmFcIjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bihcIjc3MjZcIiksaT1uKFwiMzJlOVwiKSxvPW4oXCI2OWE4XCIpLGM9bihcImNhNWFcIikoXCJzcmNcIiksdT1uKFwiZmE1YlwiKSxhPVwidG9TdHJpbmdcIixzPShcIlwiK3UpLnNwbGl0KGEpO24oXCI4Mzc4XCIpLmluc3BlY3RTb3VyY2U9ZnVuY3Rpb24odCl7cmV0dXJuIHUuY2FsbCh0KX0sKHQuZXhwb3J0cz1mdW5jdGlvbih0LGUsbix1KXt2YXIgYT1cImZ1bmN0aW9uXCI9PXR5cGVvZiBuO2EmJihvKG4sXCJuYW1lXCIpfHxpKG4sXCJuYW1lXCIsZSkpLHRbZV0hPT1uJiYoYSYmKG8obixjKXx8aShuLGMsdFtlXT9cIlwiK3RbZV06cy5qb2luKFN0cmluZyhlKSkpKSx0PT09cj90W2VdPW46dT90W2VdP3RbZV09bjppKHQsZSxuKTooZGVsZXRlIHRbZV0saSh0LGUsbikpKX0pKEZ1bmN0aW9uLnByb3RvdHlwZSxhLChmdW5jdGlvbigpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHRoaXMmJnRoaXNbY118fHUuY2FsbCh0aGlzKX0pKX0sXCIyYWViXCI6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oXCJjYjdjXCIpLGk9bihcIjE0OTVcIiksbz1uKFwiZTExZVwiKSxjPW4oXCI2MTNiXCIpKFwiSUVfUFJPVE9cIiksdT1mdW5jdGlvbigpe30sYT1cInByb3RvdHlwZVwiLHM9ZnVuY3Rpb24oKXt2YXIgdCxlPW4oXCIyMzBlXCIpKFwiaWZyYW1lXCIpLHI9by5sZW5ndGgsaT1cIjxcIixjPVwiPlwiO2Uuc3R5bGUuZGlzcGxheT1cIm5vbmVcIixuKFwiZmFiMlwiKS5hcHBlbmRDaGlsZChlKSxlLnNyYz1cImphdmFzY3JpcHQ6XCIsdD1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQsdC5vcGVuKCksdC53cml0ZShpK1wic2NyaXB0XCIrYytcImRvY3VtZW50LkY9T2JqZWN0XCIraStcIi9zY3JpcHRcIitjKSx0LmNsb3NlKCkscz10LkY7d2hpbGUoci0tKWRlbGV0ZSBzW2FdW29bcl1dO3JldHVybiBzKCl9O3QuZXhwb3J0cz1PYmplY3QuY3JlYXRlfHxmdW5jdGlvbih0LGUpe3ZhciBuO3JldHVybiBudWxsIT09dD8odVthXT1yKHQpLG49bmV3IHUsdVthXT1udWxsLG5bY109dCk6bj1zKCksdm9pZCAwPT09ZT9uOmkobixlKX19LFwiMmI0Y1wiOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKFwiNTUzN1wiKShcIndrc1wiKSxpPW4oXCJjYTVhXCIpLG89bihcIjc3MjZcIikuU3ltYm9sLGM9XCJmdW5jdGlvblwiPT10eXBlb2Ygbyx1PXQuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gclt0XXx8KHJbdF09YyYmb1t0XXx8KGM/bzppKShcIlN5bWJvbC5cIit0KSl9O3Uuc3RvcmU9cn0sXCIyZDAwXCI6ZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ITF9LFwiMmQ5NVwiOmZ1bmN0aW9uKHQsZSl7dmFyIG49e30udG9TdHJpbmc7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuLmNhbGwodCkuc2xpY2UoOCwtMSl9fSxcIjJmZGJcIjpmdW5jdGlvbih0LGUsbil7XCJ1c2Ugc3RyaWN0XCI7dmFyIHI9bihcIjVjYTFcIiksaT1uKFwiZDJjOFwiKSxvPVwiaW5jbHVkZXNcIjtyKHIuUCtyLkYqbihcIjUxNDdcIikobyksXCJTdHJpbmdcIix7aW5jbHVkZXM6ZnVuY3Rpb24odCl7cmV0dXJuISF+aSh0aGlzLHQsbykuaW5kZXhPZih0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX19KX0sMzAyNDpmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7dmFyIHI9dm9pZCAwPT09bjtzd2l0Y2goZS5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gcj90KCk6dC5jYWxsKG4pO2Nhc2UgMTpyZXR1cm4gcj90KGVbMF0pOnQuY2FsbChuLGVbMF0pO2Nhc2UgMjpyZXR1cm4gcj90KGVbMF0sZVsxXSk6dC5jYWxsKG4sZVswXSxlWzFdKTtjYXNlIDM6cmV0dXJuIHI/dChlWzBdLGVbMV0sZVsyXSk6dC5jYWxsKG4sZVswXSxlWzFdLGVbMl0pO2Nhc2UgNDpyZXR1cm4gcj90KGVbMF0sZVsxXSxlWzJdLGVbM10pOnQuY2FsbChuLGVbMF0sZVsxXSxlWzJdLGVbM10pfXJldHVybiB0LmFwcGx5KG4sZSl9fSxcIjMwZjFcIjpmdW5jdGlvbih0LGUsbil7XCJ1c2Ugc3RyaWN0XCI7dmFyIHI9bihcImI4ZTNcIiksaT1uKFwiNjNiNlwiKSxvPW4oXCI5MTM4XCIpLGM9bihcIjM1ZThcIiksdT1uKFwiNDgxYlwiKSxhPW4oXCI4ZjYwXCIpLHM9bihcIjQ1ZjJcIiksZj1uKFwiNTNlMlwiKSxsPW4oXCI1MTY4XCIpKFwiaXRlcmF0b3JcIikscD0hKFtdLmtleXMmJlwibmV4dFwiaW5bXS5rZXlzKCkpLGg9XCJAQGl0ZXJhdG9yXCIsdj1cImtleXNcIixkPVwidmFsdWVzXCIseT1mdW5jdGlvbigpe3JldHVybiB0aGlzfTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4sYixnLG0seCl7YShuLGUsYik7dmFyIHcsXyxTLE89ZnVuY3Rpb24odCl7aWYoIXAmJnQgaW4gUClyZXR1cm4gUFt0XTtzd2l0Y2godCl7Y2FzZSB2OnJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgbih0aGlzLHQpfTtjYXNlIGQ6cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuKHRoaXMsdCl9fXJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgbih0aGlzLHQpfX0saz1lK1wiIEl0ZXJhdG9yXCIsaj1nPT1kLEU9ITEsUD10LnByb3RvdHlwZSxBPVBbbF18fFBbaF18fGcmJlBbZ10sTD1BfHxPKGcpLFQ9Zz9qP08oXCJlbnRyaWVzXCIpOkw6dm9pZCAwLE09XCJBcnJheVwiPT1lJiZQLmVudHJpZXN8fEE7aWYoTSYmKFM9ZihNLmNhbGwobmV3IHQpKSxTIT09T2JqZWN0LnByb3RvdHlwZSYmUy5uZXh0JiYocyhTLGssITApLHJ8fFwiZnVuY3Rpb25cIj09dHlwZW9mIFNbbF18fGMoUyxsLHkpKSksaiYmQSYmQS5uYW1lIT09ZCYmKEU9ITAsTD1mdW5jdGlvbigpe3JldHVybiBBLmNhbGwodGhpcyl9KSxyJiYheHx8IXAmJiFFJiZQW2xdfHxjKFAsbCxMKSx1W2VdPUwsdVtrXT15LGcpaWYodz17dmFsdWVzOmo/TDpPKGQpLGtleXM6bT9MOk8odiksZW50cmllczpUfSx4KWZvcihfIGluIHcpXyBpbiBQfHxvKFAsXyx3W19dKTtlbHNlIGkoaS5QK2kuRioocHx8RSksZSx3KTtyZXR1cm4gd319LFwiMzFmNFwiOmZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj12b2lkIDA9PT1uO3N3aXRjaChlLmxlbmd0aCl7Y2FzZSAwOnJldHVybiByP3QoKTp0LmNhbGwobik7Y2FzZSAxOnJldHVybiByP3QoZVswXSk6dC5jYWxsKG4sZVswXSk7Y2FzZSAyOnJldHVybiByP3QoZVswXSxlWzFdKTp0LmNhbGwobixlWzBdLGVbMV0pO2Nhc2UgMzpyZXR1cm4gcj90KGVbMF0sZVsxXSxlWzJdKTp0LmNhbGwobixlWzBdLGVbMV0sZVsyXSk7Y2FzZSA0OnJldHVybiByP3QoZVswXSxlWzFdLGVbMl0sZVszXSk6dC5jYWxsKG4sZVswXSxlWzFdLGVbMl0sZVszXSl9cmV0dXJuIHQuYXBwbHkobixlKX19LFwiMzJlOVwiOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKFwiODZjY1wiKSxpPW4oXCI0NjMwXCIpO3QuZXhwb3J0cz1uKFwiOWUxZVwiKT9mdW5jdGlvbih0LGUsbil7cmV0dXJuIHIuZih0LGUsaSgxLG4pKX06ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0W2VdPW4sdH19LFwiMzJmY1wiOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKFwiZTUzZFwiKS5kb2N1bWVudDt0LmV4cG9ydHM9ciYmci5kb2N1bWVudEVsZW1lbnR9LFwiMzM1Y1wiOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKFwiNmI0Y1wiKTt0LmV4cG9ydHM9T2JqZWN0KFwielwiKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKT9PYmplY3Q6ZnVuY3Rpb24odCl7cmV0dXJuXCJTdHJpbmdcIj09cih0KT90LnNwbGl0KFwiXCIpOk9iamVjdCh0KX19LFwiMzNhNFwiOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKFwiODRmMlwiKSxpPW4oXCIyYjRjXCIpKFwiaXRlcmF0b3JcIiksbz1BcnJheS5wcm90b3R5cGU7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDAhPT10JiYoci5BcnJheT09PXR8fG9baV09PT10KX19LFwiMzU1ZFwiOmZ1bmN0aW9uKHQsZSl7ZS5mPXt9LnByb3BlcnR5SXNFbnVtZXJhYmxlfSxcIjM1ZThcIjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bihcImQ5ZjZcIiksaT1uKFwiYWViZFwiKTt0LmV4cG9ydHM9bihcIjhlNjBcIik/ZnVuY3Rpb24odCxlLG4pe3JldHVybiByLmYodCxlLGkoMSxuKSl9OmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdFtlXT1uLHR9fSwzNjIwOmZ1bmN0aW9uKHQsZSxuKXt9LFwiMzZjM1wiOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKFwiMzM1Y1wiKSxpPW4oXCIyNWViXCIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gcihpKHQpKX19LDM3MDI6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oXCI0ODFiXCIpLGk9bihcIjUxNjhcIikoXCJpdGVyYXRvclwiKSxvPUFycmF5LnByb3RvdHlwZTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMCE9PXQmJihyLkFycmF5PT09dHx8b1tpXT09PXQpfX0sMzg0NjpmdW5jdGlvbih0LGUsbil7bihcIjllMWVcIikmJlwiZ1wiIT0vLi9nLmZsYWdzJiZuKFwiODZjY1wiKS5mKFJlZ0V4cC5wcm90b3R5cGUsXCJmbGFnc1wiLHtjb25maWd1cmFibGU6ITAsZ2V0Om4oXCIwYmZiXCIpfSl9LFwiMzg2ZFwiOmZ1bmN0aW9uKHQsZSxuKXtcInVzZSBzdHJpY3RcIjt2YXIgcj1uKFwiY2I3Y1wiKSxpPW4oXCI4M2ExXCIpLG89bihcIjVmMWJcIik7bihcIjIxNGZcIikoXCJzZWFyY2hcIiwxLChmdW5jdGlvbih0LGUsbixjKXtyZXR1cm5bZnVuY3Rpb24obil7dmFyIHI9dCh0aGlzKSxpPXZvaWQgMD09bj92b2lkIDA6bltlXTtyZXR1cm4gdm9pZCAwIT09aT9pLmNhbGwobixyKTpuZXcgUmVnRXhwKG4pW2VdKFN0cmluZyhyKSl9LGZ1bmN0aW9uKHQpe3ZhciBlPWMobix0LHRoaXMpO2lmKGUuZG9uZSlyZXR1cm4gZS52YWx1ZTt2YXIgdT1yKHQpLGE9U3RyaW5nKHRoaXMpLHM9dS5sYXN0SW5kZXg7aShzLDApfHwodS5sYXN0SW5kZXg9MCk7dmFyIGY9byh1LGEpO3JldHVybiBpKHUubGFzdEluZGV4LHMpfHwodS5sYXN0SW5kZXg9cyksbnVsbD09PWY/LTE6Zi5pbmRleH1dfSkpfSxcIjM4ZmRcIjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bihcIjY5YThcIiksaT1uKFwiNGJmOFwiKSxvPW4oXCI2MTNiXCIpKFwiSUVfUFJPVE9cIiksYz1PYmplY3QucHJvdG90eXBlO3QuZXhwb3J0cz1PYmplY3QuZ2V0UHJvdG90eXBlT2Z8fGZ1bmN0aW9uKHQpe3JldHVybiB0PWkodCkscih0LG8pP3Rbb106XCJmdW5jdGlvblwiPT10eXBlb2YgdC5jb25zdHJ1Y3RvciYmdCBpbnN0YW5jZW9mIHQuY29uc3RydWN0b3I/dC5jb25zdHJ1Y3Rvci5wcm90b3R5cGU6dCBpbnN0YW5jZW9mIE9iamVjdD9jOm51bGx9fSxcIjNhMzhcIjpmdW5jdGlvbih0LGUpe3ZhciBuPU1hdGguY2VpbCxyPU1hdGguZmxvb3I7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpc05hTih0PSt0KT8wOih0PjA/cjpuKSh0KX19LFwiM2MxMVwiOmZ1bmN0aW9uKHQsZSxuKXtcInVzZSBzdHJpY3RcIjt2YXIgcj1uKFwiNjNiNlwiKSxpPW4oXCI1ODRhXCIpLG89bihcImU1M2RcIiksYz1uKFwiZjIwMVwiKSx1PW4oXCJjZDc4XCIpO3Ioci5QK3IuUixcIlByb21pc2VcIix7ZmluYWxseTpmdW5jdGlvbih0KXt2YXIgZT1jKHRoaXMsaS5Qcm9taXNlfHxvLlByb21pc2UpLG49XCJmdW5jdGlvblwiPT10eXBlb2YgdDtyZXR1cm4gdGhpcy50aGVuKG4/ZnVuY3Rpb24obil7cmV0dXJuIHUoZSx0KCkpLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIG59KSl9OnQsbj9mdW5jdGlvbihuKXtyZXR1cm4gdShlLHQoKSkudGhlbigoZnVuY3Rpb24oKXt0aHJvdyBufSkpfTp0KX19KX0sXCIzY2JhXCI6ZnVuY3Rpb24odCxlLG4pe1widXNlIHN0cmljdFwiO3ZhciByPW4oXCJlY2YwXCIpLGk9bi5uKHIpO2kuYX0sXCI0MGMzXCI6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oXCI2YjRjXCIpLGk9bihcIjUxNjhcIikoXCJ0b1N0cmluZ1RhZ1wiKSxvPVwiQXJndW1lbnRzXCI9PXIoZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzfSgpKSxjPWZ1bmN0aW9uKHQsZSl7dHJ5e3JldHVybiB0W2VdfWNhdGNoKG4pe319O3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZSxuLHU7cmV0dXJuIHZvaWQgMD09PXQ/XCJVbmRlZmluZWRcIjpudWxsPT09dD9cIk51bGxcIjpcInN0cmluZ1wiPT10eXBlb2Yobj1jKGU9T2JqZWN0KHQpLGkpKT9uOm8/cihlKTpcIk9iamVjdFwiPT0odT1yKGUpKSYmXCJmdW5jdGlvblwiPT10eXBlb2YgZS5jYWxsZWU/XCJBcmd1bWVudHNcIjp1fX0sNDE3ODpmdW5jdGlvbih0LGUsbil7dmFyIHIsaSxvLGM9bihcImQ4NjRcIiksdT1uKFwiMzAyNFwiKSxhPW4oXCIzMmZjXCIpLHM9bihcIjFlYzlcIiksZj1uKFwiZTUzZFwiKSxsPWYucHJvY2VzcyxwPWYuc2V0SW1tZWRpYXRlLGg9Zi5jbGVhckltbWVkaWF0ZSx2PWYuTWVzc2FnZUNoYW5uZWwsZD1mLkRpc3BhdGNoLHk9MCxiPXt9LGc9XCJvbnJlYWR5c3RhdGVjaGFuZ2VcIixtPWZ1bmN0aW9uKCl7dmFyIHQ9K3RoaXM7aWYoYi5oYXNPd25Qcm9wZXJ0eSh0KSl7dmFyIGU9Ylt0XTtkZWxldGUgYlt0XSxlKCl9fSx4PWZ1bmN0aW9uKHQpe20uY2FsbCh0LmRhdGEpfTtwJiZofHwocD1mdW5jdGlvbih0KXt2YXIgZT1bXSxuPTE7d2hpbGUoYXJndW1lbnRzLmxlbmd0aD5uKWUucHVzaChhcmd1bWVudHNbbisrXSk7cmV0dXJuIGJbKyt5XT1mdW5jdGlvbigpe3UoXCJmdW5jdGlvblwiPT10eXBlb2YgdD90OkZ1bmN0aW9uKHQpLGUpfSxyKHkpLHl9LGg9ZnVuY3Rpb24odCl7ZGVsZXRlIGJbdF19LFwicHJvY2Vzc1wiPT1uKFwiNmI0Y1wiKShsKT9yPWZ1bmN0aW9uKHQpe2wubmV4dFRpY2soYyhtLHQsMSkpfTpkJiZkLm5vdz9yPWZ1bmN0aW9uKHQpe2Qubm93KGMobSx0LDEpKX06dj8oaT1uZXcgdixvPWkucG9ydDIsaS5wb3J0MS5vbm1lc3NhZ2U9eCxyPWMoby5wb3N0TWVzc2FnZSxvLDEpKTpmLmFkZEV2ZW50TGlzdGVuZXImJlwiZnVuY3Rpb25cIj09dHlwZW9mIHBvc3RNZXNzYWdlJiYhZi5pbXBvcnRTY3JpcHRzPyhyPWZ1bmN0aW9uKHQpe2YucG9zdE1lc3NhZ2UodCtcIlwiLFwiKlwiKX0sZi5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLHgsITEpKTpyPWcgaW4gcyhcInNjcmlwdFwiKT9mdW5jdGlvbih0KXthLmFwcGVuZENoaWxkKHMoXCJzY3JpcHRcIikpW2ddPWZ1bmN0aW9uKCl7YS5yZW1vdmVDaGlsZCh0aGlzKSxtLmNhbGwodCl9fTpmdW5jdGlvbih0KXtzZXRUaW1lb3V0KGMobSx0LDEpLDApfSksdC5leHBvcnRzPXtzZXQ6cCxjbGVhcjpofX0sXCI0MWEwXCI6ZnVuY3Rpb24odCxlLG4pe1widXNlIHN0cmljdFwiO3ZhciByPW4oXCIyYWViXCIpLGk9bihcIjQ2MzBcIiksbz1uKFwiN2YyMFwiKSxjPXt9O24oXCIzMmU5XCIpKGMsbihcIjJiNGNcIikoXCJpdGVyYXRvclwiKSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSx0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3QucHJvdG90eXBlPXIoYyx7bmV4dDppKDEsbil9KSxvKHQsZStcIiBJdGVyYXRvclwiKX19LFwiNDNmY1wiOmZ1bmN0aW9uKHQsZSxuKXtcInVzZSBzdHJpY3RcIjt2YXIgcj1uKFwiNjNiNlwiKSxpPW4oXCI2NTZlXCIpLG89bihcIjQ0MzlcIik7cihyLlMsXCJQcm9taXNlXCIse3RyeTpmdW5jdGlvbih0KXt2YXIgZT1pLmYodGhpcyksbj1vKHQpO3JldHVybihuLmU/ZS5yZWplY3Q6ZS5yZXNvbHZlKShuLnYpLGUucHJvbWlzZX19KX0sNDQzOTpmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXt0cnl7cmV0dXJue2U6ITEsdjp0KCl9fWNhdGNoKGUpe3JldHVybntlOiEwLHY6ZX19fX0sXCI0NTRmXCI6ZnVuY3Rpb24odCxlLG4pe24oXCI0NmE3XCIpO3ZhciByPW4oXCI1ODRhXCIpLk9iamVjdDt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiByLmRlZmluZVByb3BlcnR5KHQsZSxuKX19LFwiNDU2ZFwiOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKFwiNGJmOFwiKSxpPW4oXCIwZDU4XCIpO24oXCI1ZWRhXCIpKFwia2V5c1wiLChmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gaShyKHQpKX19KSl9LDQ1ODg6ZnVuY3Rpb24odCxlKXt2YXIgbj1NYXRoLmNlaWwscj1NYXRoLmZsb29yO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaXNOYU4odD0rdCk/MDoodD4wP3I6bikodCl9fSxcIjQ1ZjJcIjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bihcImQ5ZjZcIikuZixpPW4oXCIwN2UzXCIpLG89bihcIjUxNjhcIikoXCJ0b1N0cmluZ1RhZ1wiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3QmJiFpKHQ9bj90OnQucHJvdG90eXBlLG8pJiZyKHQsbyx7Y29uZmlndXJhYmxlOiEwLHZhbHVlOmV9KX19LDQ2MzA6ZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm57ZW51bWVyYWJsZTohKDEmdCksY29uZmlndXJhYmxlOiEoMiZ0KSx3cml0YWJsZTohKDQmdCksdmFsdWU6ZX19fSxcIjQ2YTdcIjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bihcIjYzYjZcIik7cihyLlMrci5GKiFuKFwiOGU2MFwiKSxcIk9iamVjdFwiLHtkZWZpbmVQcm9wZXJ0eTpuKFwiZDlmNlwiKS5mfSl9LFwiNDdlZVwiOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKFwiYzNhMVwiKSxpPW4oXCI5YWE5XCIpLG89bihcIjM1NWRcIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXIodCksbj1pLmY7aWYobil7dmFyIGMsdT1uKHQpLGE9by5mLHM9MDt3aGlsZSh1Lmxlbmd0aD5zKWEuY2FsbCh0LGM9dVtzKytdKSYmZS5wdXNoKGMpfXJldHVybiBlfX0sXCI0ODFiXCI6ZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9e319LFwiNGE1OVwiOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKFwiOWI0M1wiKSxpPW4oXCIxZmE4XCIpLG89bihcIjMzYTRcIiksYz1uKFwiY2I3Y1wiKSx1PW4oXCI5ZGVmXCIpLGE9bihcIjI3ZWVcIikscz17fSxmPXt9O2U9dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuLGwscCl7dmFyIGgsdixkLHksYj1wP2Z1bmN0aW9uKCl7cmV0dXJuIHR9OmEodCksZz1yKG4sbCxlPzI6MSksbT0wO2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGIpdGhyb3cgVHlwZUVycm9yKHQrXCIgaXMgbm90IGl0ZXJhYmxlIVwiKTtpZihvKGIpKXtmb3IoaD11KHQubGVuZ3RoKTtoPm07bSsrKWlmKHk9ZT9nKGModj10W21dKVswXSx2WzFdKTpnKHRbbV0pLHk9PT1zfHx5PT09ZilyZXR1cm4geX1lbHNlIGZvcihkPWIuY2FsbCh0KTshKHY9ZC5uZXh0KCkpLmRvbmU7KWlmKHk9aShkLGcsdi52YWx1ZSxlKSx5PT09c3x8eT09PWYpcmV0dXJuIHl9O2UuQlJFQUs9cyxlLlJFVFVSTj1mfSxcIjRiZjhcIjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bihcImJlMTNcIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3Qocih0KSl9fSxcIjRjOTVcIjpmdW5jdGlvbih0LGUsbil7XCJ1c2Ugc3RyaWN0XCI7dmFyIHI9bihcImU1M2RcIiksaT1uKFwiNTg0YVwiKSxvPW4oXCJkOWY2XCIpLGM9bihcIjhlNjBcIiksdT1uKFwiNTE2OFwiKShcInNwZWNpZXNcIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPVwiZnVuY3Rpb25cIj09dHlwZW9mIGlbdF0/aVt0XTpyW3RdO2MmJmUmJiFlW3VdJiZvLmYoZSx1LHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9fSl9fSxcIjRlZTFcIjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bihcIjUxNjhcIikoXCJpdGVyYXRvclwiKSxpPSExO3RyeXt2YXIgbz1bN11bcl0oKTtvW1wicmV0dXJuXCJdPWZ1bmN0aW9uKCl7aT0hMH0sQXJyYXkuZnJvbShvLChmdW5jdGlvbigpe3Rocm93IDJ9KSl9Y2F0Y2goYyl7fXQuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKCFlJiYhaSlyZXR1cm4hMTt2YXIgbj0hMTt0cnl7dmFyIG89WzddLHU9b1tyXSgpO3UubmV4dD1mdW5jdGlvbigpe3JldHVybntkb25lOm49ITB9fSxvW3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHV9LHQobyl9Y2F0Y2goYyl7fXJldHVybiBufX0sXCI1MDRjXCI6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oXCI5ZTFlXCIpLGk9bihcIjBkNThcIiksbz1uKFwiNjgyMVwiKSxjPW4oXCI1MmE3XCIpLmY7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgbix1PW8oZSksYT1pKHUpLHM9YS5sZW5ndGgsZj0wLGw9W107d2hpbGUocz5mKW49YVtmKytdLHImJiFjLmNhbGwodSxuKXx8bC5wdXNoKHQ/W24sdVtuXV06dVtuXSk7cmV0dXJuIGx9fX0sXCI1MGVkXCI6ZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm57dmFsdWU6ZSxkb25lOiEhdH19fSw1MTQ3OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKFwiMmI0Y1wiKShcIm1hdGNoXCIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT0vLi87dHJ5e1wiLy4vXCJbdF0oZSl9Y2F0Y2gobil7dHJ5e3JldHVybiBlW3JdPSExLCFcIi8uL1wiW3RdKGUpfWNhdGNoKGkpe319cmV0dXJuITB9fSw1MTY4OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKFwiZGJkYlwiKShcIndrc1wiKSxpPW4oXCI2MmEwXCIpLG89bihcImU1M2RcIikuU3ltYm9sLGM9XCJmdW5jdGlvblwiPT10eXBlb2Ygbyx1PXQuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gclt0XXx8KHJbdF09YyYmb1t0XXx8KGM/bzppKShcIlN5bWJvbC5cIit0KSl9O3Uuc3RvcmU9cn0sXCI1MjBhXCI6ZnVuY3Rpb24odCxlLG4pe1widXNlIHN0cmljdFwiO3ZhciByPW4oXCIwYmZiXCIpLGk9UmVnRXhwLnByb3RvdHlwZS5leGVjLG89U3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlLGM9aSx1PVwibGFzdEluZGV4XCIsYT1mdW5jdGlvbigpe3ZhciB0PS9hLyxlPS9iKi9nO3JldHVybiBpLmNhbGwodCxcImFcIiksaS5jYWxsKGUsXCJhXCIpLDAhPT10W3VdfHwwIT09ZVt1XX0oKSxzPXZvaWQgMCE9PS8oKT8/Ly5leGVjKFwiXCIpWzFdLGY9YXx8cztmJiYoYz1mdW5jdGlvbih0KXt2YXIgZSxuLGMsZixsPXRoaXM7cmV0dXJuIHMmJihuPW5ldyBSZWdFeHAoXCJeXCIrbC5zb3VyY2UrXCIkKD8hXFxcXHMpXCIsci5jYWxsKGwpKSksYSYmKGU9bFt1XSksYz1pLmNhbGwobCx0KSxhJiZjJiYobFt1XT1sLmdsb2JhbD9jLmluZGV4K2NbMF0ubGVuZ3RoOmUpLHMmJmMmJmMubGVuZ3RoPjEmJm8uY2FsbChjWzBdLG4sKGZ1bmN0aW9uKCl7Zm9yKGY9MTtmPGFyZ3VtZW50cy5sZW5ndGgtMjtmKyspdm9pZCAwPT09YXJndW1lbnRzW2ZdJiYoY1tmXT12b2lkIDApfSkpLGN9KSx0LmV4cG9ydHM9Y30sXCI1MmE3XCI6ZnVuY3Rpb24odCxlKXtlLmY9e30ucHJvcGVydHlJc0VudW1lcmFibGV9LFwiNTNlMlwiOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKFwiMDdlM1wiKSxpPW4oXCIyNDFlXCIpLG89bihcIjU1NTlcIikoXCJJRV9QUk9UT1wiKSxjPU9iamVjdC5wcm90b3R5cGU7dC5leHBvcnRzPU9iamVjdC5nZXRQcm90b3R5cGVPZnx8ZnVuY3Rpb24odCl7cmV0dXJuIHQ9aSh0KSxyKHQsbyk/dFtvXTpcImZ1bmN0aW9uXCI9PXR5cGVvZiB0LmNvbnN0cnVjdG9yJiZ0IGluc3RhbmNlb2YgdC5jb25zdHJ1Y3Rvcj90LmNvbnN0cnVjdG9yLnByb3RvdHlwZTp0IGluc3RhbmNlb2YgT2JqZWN0P2M6bnVsbH19LFwiNTQ5YlwiOmZ1bmN0aW9uKHQsZSxuKXtcInVzZSBzdHJpY3RcIjt2YXIgcj1uKFwiZDg2NFwiKSxpPW4oXCI2M2I2XCIpLG89bihcIjI0MWVcIiksYz1uKFwiYjBkY1wiKSx1PW4oXCIzNzAyXCIpLGE9bihcImI0NDdcIikscz1uKFwiMjBmZFwiKSxmPW4oXCI3Y2Q2XCIpO2koaS5TK2kuRiohbihcIjRlZTFcIikoKGZ1bmN0aW9uKHQpe0FycmF5LmZyb20odCl9KSksXCJBcnJheVwiLHtmcm9tOmZ1bmN0aW9uKHQpe3ZhciBlLG4saSxsLHA9byh0KSxoPVwiZnVuY3Rpb25cIj09dHlwZW9mIHRoaXM/dGhpczpBcnJheSx2PWFyZ3VtZW50cy5sZW5ndGgsZD12PjE/YXJndW1lbnRzWzFdOnZvaWQgMCx5PXZvaWQgMCE9PWQsYj0wLGc9ZihwKTtpZih5JiYoZD1yKGQsdj4yP2FyZ3VtZW50c1syXTp2b2lkIDAsMikpLHZvaWQgMD09Z3x8aD09QXJyYXkmJnUoZykpZm9yKGU9YShwLmxlbmd0aCksbj1uZXcgaChlKTtlPmI7YisrKXMobixiLHk/ZChwW2JdLGIpOnBbYl0pO2Vsc2UgZm9yKGw9Zy5jYWxsKHApLG49bmV3IGg7IShpPWwubmV4dCgpKS5kb25lO2IrKylzKG4sYix5P2MobCxkLFtpLnZhbHVlLGJdLCEwKTppLnZhbHVlKTtyZXR1cm4gbi5sZW5ndGg9YixufX0pfSxcIjU0YTFcIjpmdW5jdGlvbih0LGUsbil7bihcIjZjMWNcIiksbihcIjE2NTRcIiksdC5leHBvcnRzPW4oXCI5NWQ1XCIpfSxcIjU1MWNcIjpmdW5jdGlvbih0LGUsbil7XCJ1c2Ugc3RyaWN0XCI7dmFyIHIsaSxvLGMsdT1uKFwiMmQwMFwiKSxhPW4oXCI3NzI2XCIpLHM9bihcIjliNDNcIiksZj1uKFwiMjNjNlwiKSxsPW4oXCI1Y2ExXCIpLHA9bihcImQzZjRcIiksaD1uKFwiZDhlOFwiKSx2PW4oXCJmNjA1XCIpLGQ9bihcIjRhNTlcIikseT1uKFwiZWJkNlwiKSxiPW4oXCIxOTkxXCIpLnNldCxnPW4oXCI4MDc5XCIpKCksbT1uKFwiYTViOFwiKSx4PW4oXCI5YzgwXCIpLHc9bihcImEyNWZcIiksXz1uKFwiYmNhYVwiKSxTPVwiUHJvbWlzZVwiLE89YS5UeXBlRXJyb3Isaz1hLnByb2Nlc3Msaj1rJiZrLnZlcnNpb25zLEU9aiYmai52OHx8XCJcIixQPWFbU10sQT1cInByb2Nlc3NcIj09ZihrKSxMPWZ1bmN0aW9uKCl7fSxUPWk9bS5mLE09ISFmdW5jdGlvbigpe3RyeXt2YXIgdD1QLnJlc29sdmUoMSksZT0odC5jb25zdHJ1Y3Rvcj17fSlbbihcIjJiNGNcIikoXCJzcGVjaWVzXCIpXT1mdW5jdGlvbih0KXt0KEwsTCl9O3JldHVybihBfHxcImZ1bmN0aW9uXCI9PXR5cGVvZiBQcm9taXNlUmVqZWN0aW9uRXZlbnQpJiZ0LnRoZW4oTClpbnN0YW5jZW9mIGUmJjAhPT1FLmluZGV4T2YoXCI2LjZcIikmJi0xPT09dy5pbmRleE9mKFwiQ2hyb21lLzY2XCIpfWNhdGNoKHIpe319KCksQz1mdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4hKCFwKHQpfHxcImZ1bmN0aW9uXCIhPXR5cGVvZihlPXQudGhlbikpJiZlfSxGPWZ1bmN0aW9uKHQsZSl7aWYoIXQuX24pe3QuX249ITA7dmFyIG49dC5fYztnKChmdW5jdGlvbigpe3ZhciByPXQuX3YsaT0xPT10Ll9zLG89MCxjPWZ1bmN0aW9uKGUpe3ZhciBuLG8sYyx1PWk/ZS5vazplLmZhaWwsYT1lLnJlc29sdmUscz1lLnJlamVjdCxmPWUuZG9tYWluO3RyeXt1PyhpfHwoMj09dC5faCYmTih0KSx0Ll9oPTEpLCEwPT09dT9uPXI6KGYmJmYuZW50ZXIoKSxuPXUociksZiYmKGYuZXhpdCgpLGM9ITApKSxuPT09ZS5wcm9taXNlP3MoTyhcIlByb21pc2UtY2hhaW4gY3ljbGVcIikpOihvPUMobikpP28uY2FsbChuLGEscyk6YShuKSk6cyhyKX1jYXRjaChsKXtmJiYhYyYmZi5leGl0KCkscyhsKX19O3doaWxlKG4ubGVuZ3RoPm8pYyhuW28rK10pO3QuX2M9W10sdC5fbj0hMSxlJiYhdC5faCYmSSh0KX0pKX19LEk9ZnVuY3Rpb24odCl7Yi5jYWxsKGEsKGZ1bmN0aW9uKCl7dmFyIGUsbixyLGk9dC5fdixvPVIodCk7aWYobyYmKGU9eCgoZnVuY3Rpb24oKXtBP2suZW1pdChcInVuaGFuZGxlZFJlamVjdGlvblwiLGksdCk6KG49YS5vbnVuaGFuZGxlZHJlamVjdGlvbik/bih7cHJvbWlzZTp0LHJlYXNvbjppfSk6KHI9YS5jb25zb2xlKSYmci5lcnJvciYmci5lcnJvcihcIlVuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvblwiLGkpfSkpLHQuX2g9QXx8Uih0KT8yOjEpLHQuX2E9dm9pZCAwLG8mJmUuZSl0aHJvdyBlLnZ9KSl9LFI9ZnVuY3Rpb24odCl7cmV0dXJuIDEhPT10Ll9oJiYwPT09KHQuX2F8fHQuX2MpLmxlbmd0aH0sTj1mdW5jdGlvbih0KXtiLmNhbGwoYSwoZnVuY3Rpb24oKXt2YXIgZTtBP2suZW1pdChcInJlamVjdGlvbkhhbmRsZWRcIix0KTooZT1hLm9ucmVqZWN0aW9uaGFuZGxlZCkmJmUoe3Byb21pc2U6dCxyZWFzb246dC5fdn0pfSkpfSxxPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7ZS5fZHx8KGUuX2Q9ITAsZT1lLl93fHxlLGUuX3Y9dCxlLl9zPTIsZS5fYXx8KGUuX2E9ZS5fYy5zbGljZSgpKSxGKGUsITApKX0sRD1mdW5jdGlvbih0KXt2YXIgZSxuPXRoaXM7aWYoIW4uX2Qpe24uX2Q9ITAsbj1uLl93fHxuO3RyeXtpZihuPT09dCl0aHJvdyBPKFwiUHJvbWlzZSBjYW4ndCBiZSByZXNvbHZlZCBpdHNlbGZcIik7KGU9Qyh0KSk/ZygoZnVuY3Rpb24oKXt2YXIgcj17X3c6bixfZDohMX07dHJ5e2UuY2FsbCh0LHMoRCxyLDEpLHMocSxyLDEpKX1jYXRjaChpKXtxLmNhbGwocixpKX19KSk6KG4uX3Y9dCxuLl9zPTEsRihuLCExKSl9Y2F0Y2gocil7cS5jYWxsKHtfdzpuLF9kOiExfSxyKX19fTtNfHwoUD1mdW5jdGlvbih0KXt2KHRoaXMsUCxTLFwiX2hcIiksaCh0KSxyLmNhbGwodGhpcyk7dHJ5e3QocyhELHRoaXMsMSkscyhxLHRoaXMsMSkpfWNhdGNoKGUpe3EuY2FsbCh0aGlzLGUpfX0scj1mdW5jdGlvbih0KXt0aGlzLl9jPVtdLHRoaXMuX2E9dm9pZCAwLHRoaXMuX3M9MCx0aGlzLl9kPSExLHRoaXMuX3Y9dm9pZCAwLHRoaXMuX2g9MCx0aGlzLl9uPSExfSxyLnByb3RvdHlwZT1uKFwiZGNiY1wiKShQLnByb3RvdHlwZSx7dGhlbjpmdW5jdGlvbih0LGUpe3ZhciBuPVQoeSh0aGlzLFApKTtyZXR1cm4gbi5vaz1cImZ1bmN0aW9uXCIhPXR5cGVvZiB0fHx0LG4uZmFpbD1cImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiZlLG4uZG9tYWluPUE/ay5kb21haW46dm9pZCAwLHRoaXMuX2MucHVzaChuKSx0aGlzLl9hJiZ0aGlzLl9hLnB1c2gobiksdGhpcy5fcyYmRih0aGlzLCExKSxuLnByb21pc2V9LGNhdGNoOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnRoZW4odm9pZCAwLHQpfX0pLG89ZnVuY3Rpb24oKXt2YXIgdD1uZXcgcjt0aGlzLnByb21pc2U9dCx0aGlzLnJlc29sdmU9cyhELHQsMSksdGhpcy5yZWplY3Q9cyhxLHQsMSl9LG0uZj1UPWZ1bmN0aW9uKHQpe3JldHVybiB0PT09UHx8dD09PWM/bmV3IG8odCk6aSh0KX0pLGwobC5HK2wuVytsLkYqIU0se1Byb21pc2U6UH0pLG4oXCI3ZjIwXCIpKFAsUyksbihcIjdhNTZcIikoUyksYz1uKFwiODM3OFwiKVtTXSxsKGwuUytsLkYqIU0sUyx7cmVqZWN0OmZ1bmN0aW9uKHQpe3ZhciBlPVQodGhpcyksbj1lLnJlamVjdDtyZXR1cm4gbih0KSxlLnByb21pc2V9fSksbChsLlMrbC5GKih1fHwhTSksUyx7cmVzb2x2ZTpmdW5jdGlvbih0KXtyZXR1cm4gXyh1JiZ0aGlzPT09Yz9QOnRoaXMsdCl9fSksbChsLlMrbC5GKiEoTSYmbihcIjVjYzVcIikoKGZ1bmN0aW9uKHQpe1AuYWxsKHQpW1wiY2F0Y2hcIl0oTCl9KSkpLFMse2FsbDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLG49VChlKSxyPW4ucmVzb2x2ZSxpPW4ucmVqZWN0LG89eCgoZnVuY3Rpb24oKXt2YXIgbj1bXSxvPTAsYz0xO2QodCwhMSwoZnVuY3Rpb24odCl7dmFyIHU9bysrLGE9ITE7bi5wdXNoKHZvaWQgMCksYysrLGUucmVzb2x2ZSh0KS50aGVuKChmdW5jdGlvbih0KXthfHwoYT0hMCxuW3VdPXQsLS1jfHxyKG4pKX0pLGkpfSkpLC0tY3x8cihuKX0pKTtyZXR1cm4gby5lJiZpKG8udiksbi5wcm9taXNlfSxyYWNlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1UKGUpLHI9bi5yZWplY3QsaT14KChmdW5jdGlvbigpe2QodCwhMSwoZnVuY3Rpb24odCl7ZS5yZXNvbHZlKHQpLnRoZW4obi5yZXNvbHZlLHIpfSkpfSkpO3JldHVybiBpLmUmJnIoaS52KSxuLnByb21pc2V9fSl9LDU1Mzc6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oXCI4Mzc4XCIpLGk9bihcIjc3MjZcIiksbz1cIl9fY29yZS1qc19zaGFyZWRfX1wiLGM9aVtvXXx8KGlbb109e30pOyh0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gY1t0XXx8KGNbdF09dm9pZCAwIT09ZT9lOnt9KX0pKFwidmVyc2lvbnNcIixbXSkucHVzaCh7dmVyc2lvbjpyLnZlcnNpb24sbW9kZTpuKFwiMmQwMFwiKT9cInB1cmVcIjpcImdsb2JhbFwiLGNvcHlyaWdodDpcIsKpIDIwMTkgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSlcIn0pfSw1NTU5OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKFwiZGJkYlwiKShcImtleXNcIiksaT1uKFwiNjJhMFwiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHJbdF18fChyW3RdPWkodCkpfX0sXCI1ODRhXCI6ZnVuY3Rpb24odCxlKXt2YXIgbj10LmV4cG9ydHM9e3ZlcnNpb246XCIyLjYuMTBcIn07XCJudW1iZXJcIj09dHlwZW9mIF9fZSYmKF9fZT1uKX0sXCI1YjRlXCI6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oXCIzNmMzXCIpLGk9bihcImI0NDdcIiksbz1uKFwiMGZjOVwiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUsbixjKXt2YXIgdSxhPXIoZSkscz1pKGEubGVuZ3RoKSxmPW8oYyxzKTtpZih0JiZuIT1uKXt3aGlsZShzPmYpaWYodT1hW2YrK10sdSE9dSlyZXR1cm4hMH1lbHNlIGZvcig7cz5mO2YrKylpZigodHx8ZiBpbiBhKSYmYVtmXT09PW4pcmV0dXJuIHR8fGZ8fDA7cmV0dXJuIXQmJi0xfX19LFwiNWM5NVwiOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKFwiMzVlOFwiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgaSBpbiBlKW4mJnRbaV0/dFtpXT1lW2ldOnIodCxpLGVbaV0pO3JldHVybiB0fX0sXCI1Y2ExXCI6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oXCI3NzI2XCIpLGk9bihcIjgzNzhcIiksbz1uKFwiMzJlOVwiKSxjPW4oXCIyYWJhXCIpLHU9bihcIjliNDNcIiksYT1cInByb3RvdHlwZVwiLHM9ZnVuY3Rpb24odCxlLG4pe3ZhciBmLGwscCxoLHY9dCZzLkYsZD10JnMuRyx5PXQmcy5TLGI9dCZzLlAsZz10JnMuQixtPWQ/cjp5P3JbZV18fChyW2VdPXt9KToocltlXXx8e30pW2FdLHg9ZD9pOmlbZV18fChpW2VdPXt9KSx3PXhbYV18fCh4W2FdPXt9KTtmb3IoZiBpbiBkJiYobj1lKSxuKWw9IXYmJm0mJnZvaWQgMCE9PW1bZl0scD0obD9tOm4pW2ZdLGg9ZyYmbD91KHAscik6YiYmXCJmdW5jdGlvblwiPT10eXBlb2YgcD91KEZ1bmN0aW9uLmNhbGwscCk6cCxtJiZjKG0sZixwLHQmcy5VKSx4W2ZdIT1wJiZvKHgsZixoKSxiJiZ3W2ZdIT1wJiYod1tmXT1wKX07ci5jb3JlPWkscy5GPTEscy5HPTIscy5TPTQscy5QPTgscy5CPTE2LHMuVz0zMixzLlU9NjQscy5SPTEyOCx0LmV4cG9ydHM9c30sXCI1Y2M1XCI6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oXCIyYjRjXCIpKFwiaXRlcmF0b3JcIiksaT0hMTt0cnl7dmFyIG89WzddW3JdKCk7b1tcInJldHVyblwiXT1mdW5jdGlvbigpe2k9ITB9LEFycmF5LmZyb20obywoZnVuY3Rpb24oKXt0aHJvdyAyfSkpfWNhdGNoKGMpe310LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZighZSYmIWkpcmV0dXJuITE7dmFyIG49ITE7dHJ5e3ZhciBvPVs3XSx1PW9bcl0oKTt1Lm5leHQ9ZnVuY3Rpb24oKXtyZXR1cm57ZG9uZTpuPSEwfX0sb1tyXT1mdW5jdGlvbigpe3JldHVybiB1fSx0KG8pfWNhdGNoKGMpe31yZXR1cm4gbn19LFwiNWQ1OFwiOmZ1bmN0aW9uKHQsZSxuKXt0LmV4cG9ydHM9bihcImQ4ZDZcIil9LFwiNWRiY1wiOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKFwiZDNmNFwiKSxpPW4oXCI4Yjk3XCIpLnNldDt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3ZhciBvLGM9ZS5jb25zdHJ1Y3RvcjtyZXR1cm4gYyE9PW4mJlwiZnVuY3Rpb25cIj09dHlwZW9mIGMmJihvPWMucHJvdG90eXBlKSE9PW4ucHJvdG90eXBlJiZyKG8pJiZpJiZpKHQsbyksdH19LFwiNWVkYVwiOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKFwiNWNhMVwiKSxpPW4oXCI4Mzc4XCIpLG89bihcIjc5ZTVcIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49KGkuT2JqZWN0fHx7fSlbdF18fE9iamVjdFt0XSxjPXt9O2NbdF09ZShuKSxyKHIuUytyLkYqbygoZnVuY3Rpb24oKXtuKDEpfSkpLFwiT2JqZWN0XCIsYyl9fSxcIjVmMWJcIjpmdW5jdGlvbih0LGUsbil7XCJ1c2Ugc3RyaWN0XCI7dmFyIHI9bihcIjIzYzZcIiksaT1SZWdFeHAucHJvdG90eXBlLmV4ZWM7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dC5leGVjO2lmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBuKXt2YXIgbz1uLmNhbGwodCxlKTtpZihcIm9iamVjdFwiIT09dHlwZW9mIG8pdGhyb3cgbmV3IFR5cGVFcnJvcihcIlJlZ0V4cCBleGVjIG1ldGhvZCByZXR1cm5lZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBhbiBPYmplY3Qgb3IgbnVsbFwiKTtyZXR1cm4gb31pZihcIlJlZ0V4cFwiIT09cih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiUmVnRXhwI2V4ZWMgY2FsbGVkIG9uIGluY29tcGF0aWJsZSByZWNlaXZlclwiKTtyZXR1cm4gaS5jYWxsKHQsZSl9fSxcIjYxM2JcIjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bihcIjU1MzdcIikoXCJrZXlzXCIpLGk9bihcImNhNWFcIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiByW3RdfHwoclt0XT1pKHQpKX19LFwiNjI2YVwiOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKFwiMmQ5NVwiKTt0LmV4cG9ydHM9T2JqZWN0KFwielwiKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKT9PYmplY3Q6ZnVuY3Rpb24odCl7cmV0dXJuXCJTdHJpbmdcIj09cih0KT90LnNwbGl0KFwiXCIpOk9iamVjdCh0KX19LFwiNjJhMFwiOmZ1bmN0aW9uKHQsZSl7dmFyIG49MCxyPU1hdGgucmFuZG9tKCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVyblwiU3ltYm9sKFwiLmNvbmNhdCh2b2lkIDA9PT10P1wiXCI6dCxcIilfXCIsKCsrbityKS50b1N0cmluZygzNikpfX0sXCI2M2I2XCI6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oXCJlNTNkXCIpLGk9bihcIjU4NGFcIiksbz1uKFwiZDg2NFwiKSxjPW4oXCIzNWU4XCIpLHU9bihcIjA3ZTNcIiksYT1cInByb3RvdHlwZVwiLHM9ZnVuY3Rpb24odCxlLG4pe3ZhciBmLGwscCxoPXQmcy5GLHY9dCZzLkcsZD10JnMuUyx5PXQmcy5QLGI9dCZzLkIsZz10JnMuVyxtPXY/aTppW2VdfHwoaVtlXT17fSkseD1tW2FdLHc9dj9yOmQ/cltlXToocltlXXx8e30pW2FdO2ZvcihmIGluIHYmJihuPWUpLG4pbD0haCYmdyYmdm9pZCAwIT09d1tmXSxsJiZ1KG0sZil8fChwPWw/d1tmXTpuW2ZdLG1bZl09diYmXCJmdW5jdGlvblwiIT10eXBlb2Ygd1tmXT9uW2ZdOmImJmw/byhwLHIpOmcmJndbZl09PXA/ZnVuY3Rpb24odCl7dmFyIGU9ZnVuY3Rpb24oZSxuLHIpe2lmKHRoaXMgaW5zdGFuY2VvZiB0KXtzd2l0Y2goYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBuZXcgdDtjYXNlIDE6cmV0dXJuIG5ldyB0KGUpO2Nhc2UgMjpyZXR1cm4gbmV3IHQoZSxuKX1yZXR1cm4gbmV3IHQoZSxuLHIpfXJldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX07cmV0dXJuIGVbYV09dFthXSxlfShwKTp5JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBwP28oRnVuY3Rpb24uY2FsbCxwKTpwLHkmJigobS52aXJ0dWFsfHwobS52aXJ0dWFsPXt9KSlbZl09cCx0JnMuUiYmeCYmIXhbZl0mJmMoeCxmLHApKSl9O3MuRj0xLHMuRz0yLHMuUz00LHMuUD04LHMuQj0xNixzLlc9MzIscy5VPTY0LHMuUj0xMjgsdC5leHBvcnRzPXN9LFwiNjNjNlwiOmZ1bmN0aW9uKHQsZSxuKXtcInVzZSBzdHJpY3RcIjt2YXIgcj1uKFwiMzYyMFwiKSxpPW4ubihyKTtpLmF9LFwiNjU2ZVwiOmZ1bmN0aW9uKHQsZSxuKXtcInVzZSBzdHJpY3RcIjt2YXIgcj1uKFwiNzlhYVwiKTtmdW5jdGlvbiBpKHQpe3ZhciBlLG47dGhpcy5wcm9taXNlPW5ldyB0KChmdW5jdGlvbih0LHIpe2lmKHZvaWQgMCE9PWV8fHZvaWQgMCE9PW4pdGhyb3cgVHlwZUVycm9yKFwiQmFkIFByb21pc2UgY29uc3RydWN0b3JcIik7ZT10LG49cn0pKSx0aGlzLnJlc29sdmU9cihlKSx0aGlzLnJlamVjdD1yKG4pfXQuZXhwb3J0cy5mPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgaSh0KX19LDY3MTg6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oXCJlNTNkXCIpLGk9bihcIjU4NGFcIiksbz1uKFwiYjhlM1wiKSxjPW4oXCJjY2I5XCIpLHU9bihcImQ5ZjZcIikuZjt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9aS5TeW1ib2x8fChpLlN5bWJvbD1vP3t9OnIuU3ltYm9sfHx7fSk7XCJfXCI9PXQuY2hhckF0KDApfHx0IGluIGV8fHUoZSx0LHt2YWx1ZTpjLmYodCl9KX19LDY3NjI6ZnVuY3Rpb24odCxlLG4pe1widXNlIHN0cmljdFwiO3ZhciByPW4oXCI1Y2ExXCIpLGk9bihcImMzNjZcIikoITApO3Ioci5QLFwiQXJyYXlcIix7aW5jbHVkZXM6ZnVuY3Rpb24odCl7cmV0dXJuIGkodGhpcyx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX19KSxuKFwiOWM2Y1wiKShcImluY2x1ZGVzXCIpfSxcIjY3YmJcIjpmdW5jdGlvbih0LGUsbil7dC5leHBvcnRzPW4oXCJmOTIxXCIpfSw2ODIxOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKFwiNjI2YVwiKSxpPW4oXCJiZTEzXCIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gcihpKHQpKX19LFwiNjk2ZVwiOmZ1bmN0aW9uKHQsZSxuKXtuKFwiYzIwN1wiKSxuKFwiMTY1NFwiKSxuKFwiNmMxY1wiKSxuKFwiMjRjNVwiKSxuKFwiM2MxMVwiKSxuKFwiNDNmY1wiKSx0LmV4cG9ydHM9bihcIjU4NGFcIikuUHJvbWlzZX0sXCI2OWE4XCI6ZnVuY3Rpb24odCxlKXt2YXIgbj17fS5oYXNPd25Qcm9wZXJ0eTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbi5jYWxsKHQsZSl9fSxcIjY5ZDNcIjpmdW5jdGlvbih0LGUsbil7bihcIjY3MThcIikoXCJhc3luY0l0ZXJhdG9yXCIpfSxcIjZhOTlcIjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bihcImQzZjRcIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoIXIodCkpcmV0dXJuIHQ7dmFyIG4saTtpZihlJiZcImZ1bmN0aW9uXCI9PXR5cGVvZihuPXQudG9TdHJpbmcpJiYhcihpPW4uY2FsbCh0KSkpcmV0dXJuIGk7aWYoXCJmdW5jdGlvblwiPT10eXBlb2Yobj10LnZhbHVlT2YpJiYhcihpPW4uY2FsbCh0KSkpcmV0dXJuIGk7aWYoIWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mKG49dC50b1N0cmluZykmJiFyKGk9bi5jYWxsKHQpKSlyZXR1cm4gaTt0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIil9fSxcIjZhYmZcIjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bihcImU2ZjNcIiksaT1uKFwiMTY5MVwiKS5jb25jYXQoXCJsZW5ndGhcIixcInByb3RvdHlwZVwiKTtlLmY9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXN8fGZ1bmN0aW9uKHQpe3JldHVybiByKHQsaSl9fSxcIjZiNGNcIjpmdW5jdGlvbih0LGUpe3ZhciBuPXt9LnRvU3RyaW5nO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbi5jYWxsKHQpLnNsaWNlKDgsLTEpfX0sXCI2YzFjXCI6ZnVuY3Rpb24odCxlLG4pe24oXCJjMzY3XCIpO2Zvcih2YXIgcj1uKFwiZTUzZFwiKSxpPW4oXCIzNWU4XCIpLG89bihcIjQ4MWJcIiksYz1uKFwiNTE2OFwiKShcInRvU3RyaW5nVGFnXCIpLHU9XCJDU1NSdWxlTGlzdCxDU1NTdHlsZURlY2xhcmF0aW9uLENTU1ZhbHVlTGlzdCxDbGllbnRSZWN0TGlzdCxET01SZWN0TGlzdCxET01TdHJpbmdMaXN0LERPTVRva2VuTGlzdCxEYXRhVHJhbnNmZXJJdGVtTGlzdCxGaWxlTGlzdCxIVE1MQWxsQ29sbGVjdGlvbixIVE1MQ29sbGVjdGlvbixIVE1MRm9ybUVsZW1lbnQsSFRNTFNlbGVjdEVsZW1lbnQsTWVkaWFMaXN0LE1pbWVUeXBlQXJyYXksTmFtZWROb2RlTWFwLE5vZGVMaXN0LFBhaW50UmVxdWVzdExpc3QsUGx1Z2luLFBsdWdpbkFycmF5LFNWR0xlbmd0aExpc3QsU1ZHTnVtYmVyTGlzdCxTVkdQYXRoU2VnTGlzdCxTVkdQb2ludExpc3QsU1ZHU3RyaW5nTGlzdCxTVkdUcmFuc2Zvcm1MaXN0LFNvdXJjZUJ1ZmZlckxpc3QsU3R5bGVTaGVldExpc3QsVGV4dFRyYWNrQ3VlTGlzdCxUZXh0VHJhY2tMaXN0LFRvdWNoTGlzdFwiLnNwbGl0KFwiLFwiKSxhPTA7YTx1Lmxlbmd0aDthKyspe3ZhciBzPXVbYV0sZj1yW3NdLGw9ZiYmZi5wcm90b3R5cGU7bCYmIWxbY10mJmkobCxjLHMpLG9bc109by5BcnJheX19LFwiNzFjMVwiOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKFwiM2EzOFwiKSxpPW4oXCIyNWViXCIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXt2YXIgbyxjLHU9U3RyaW5nKGkoZSkpLGE9cihuKSxzPXUubGVuZ3RoO3JldHVybiBhPDB8fGE+PXM/dD9cIlwiOnZvaWQgMDoobz11LmNoYXJDb2RlQXQoYSksbzw1NTI5Nnx8bz41NjMxOXx8YSsxPT09c3x8KGM9dS5jaGFyQ29kZUF0KGErMSkpPDU2MzIwfHxjPjU3MzQzP3Q/dS5jaGFyQXQoYSk6bzp0P3Uuc2xpY2UoYSxhKzIpOmMtNTYzMjArKG8tNTUyOTY8PDEwKSs2NTUzNil9fX0sNzMzMzpmdW5jdGlvbih0LGUsbil7XCJ1c2Ugc3RyaWN0XCI7dmFyIHI9bihcIjllMWVcIiksaT1uKFwiMGQ1OFwiKSxvPW4oXCIyNjIxXCIpLGM9bihcIjUyYTdcIiksdT1uKFwiNGJmOFwiKSxhPW4oXCI2MjZhXCIpLHM9T2JqZWN0LmFzc2lnbjt0LmV4cG9ydHM9IXN8fG4oXCI3OWU1XCIpKChmdW5jdGlvbigpe3ZhciB0PXt9LGU9e30sbj1TeW1ib2woKSxyPVwiYWJjZGVmZ2hpamtsbW5vcHFyc3RcIjtyZXR1cm4gdFtuXT03LHIuc3BsaXQoXCJcIikuZm9yRWFjaCgoZnVuY3Rpb24odCl7ZVt0XT10fSkpLDchPXMoe30sdClbbl18fE9iamVjdC5rZXlzKHMoe30sZSkpLmpvaW4oXCJcIikhPXJ9KSk/ZnVuY3Rpb24odCxlKXt2YXIgbj11KHQpLHM9YXJndW1lbnRzLmxlbmd0aCxmPTEsbD1vLmYscD1jLmY7d2hpbGUocz5mKXt2YXIgaCx2PWEoYXJndW1lbnRzW2YrK10pLGQ9bD9pKHYpLmNvbmNhdChsKHYpKTppKHYpLHk9ZC5sZW5ndGgsYj0wO3doaWxlKHk+YiloPWRbYisrXSxyJiYhcC5jYWxsKHYsaCl8fChuW2hdPXZbaF0pfXJldHVybiBufTpzfSw3NTE0OmZ1bmN0aW9uKHQsZSxuKXtcInVzZSBzdHJpY3RcIjt2YXIgcj1uKFwiNWNhMVwiKSxpPW4oXCIwYTQ5XCIpKDUpLG89XCJmaW5kXCIsYz0hMDtvIGluW10mJkFycmF5KDEpW29dKChmdW5jdGlvbigpe2M9ITF9KSkscihyLlArci5GKmMsXCJBcnJheVwiLHtmaW5kOmZ1bmN0aW9uKHQpe3JldHVybiBpKHRoaXMsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSksbihcIjljNmNcIikobyl9LFwiNzY1ZFwiOmZ1bmN0aW9uKHQsZSxuKXtuKFwiNjcxOFwiKShcIm9ic2VydmFibGVcIil9LDc3MjY6ZnVuY3Rpb24odCxlKXt2YXIgbj10LmV4cG9ydHM9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdyYmd2luZG93Lk1hdGg9PU1hdGg/d2luZG93OlwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmJiZzZWxmLk1hdGg9PU1hdGg/c2VsZjpGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7XCJudW1iZXJcIj09dHlwZW9mIF9fZyYmKF9fZz1uKX0sXCI3NzRlXCI6ZnVuY3Rpb24odCxlLG4pe3QuZXhwb3J0cz1uKFwiZDJkNVwiKX0sXCI3N2YxXCI6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oXCI0NTg4XCIpLGk9TWF0aC5tYXgsbz1NYXRoLm1pbjt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD1yKHQpLHQ8MD9pKHQrZSwwKTpvKHQsZSl9fSxcIjc5NGJcIjpmdW5jdGlvbih0LGUsbil7dC5leHBvcnRzPSFuKFwiOGU2MFwiKSYmIW4oXCIyOTRjXCIpKChmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkobihcIjFlYzlcIikoXCJkaXZcIiksXCJhXCIse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pLmF9KSl9LFwiNzk1YlwiOmZ1bmN0aW9uKHQsZSxuKXt0LmV4cG9ydHM9bihcIjY5NmVcIil9LFwiNzlhYVwiOmZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIHQpdGhyb3cgVHlwZUVycm9yKHQrXCIgaXMgbm90IGEgZnVuY3Rpb24hXCIpO3JldHVybiB0fX0sXCI3OWU1XCI6ZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dHJ5e3JldHVybiEhdCgpfWNhdGNoKGUpe3JldHVybiEwfX19LFwiN2E1NlwiOmZ1bmN0aW9uKHQsZSxuKXtcInVzZSBzdHJpY3RcIjt2YXIgcj1uKFwiNzcyNlwiKSxpPW4oXCI4NmNjXCIpLG89bihcIjllMWVcIiksYz1uKFwiMmI0Y1wiKShcInNwZWNpZXNcIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXJbdF07byYmZSYmIWVbY10mJmkuZihlLGMse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc319KX19LFwiN2NkNlwiOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKFwiNDBjM1wiKSxpPW4oXCI1MTY4XCIpKFwiaXRlcmF0b3JcIiksbz1uKFwiNDgxYlwiKTt0LmV4cG9ydHM9bihcIjU4NGFcIikuZ2V0SXRlcmF0b3JNZXRob2Q9ZnVuY3Rpb24odCl7aWYodm9pZCAwIT10KXJldHVybiB0W2ldfHx0W1wiQEBpdGVyYXRvclwiXXx8b1tyKHQpXX19LFwiN2U5MFwiOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKFwiZDlmNlwiKSxpPW4oXCJlNGFlXCIpLG89bihcImMzYTFcIik7dC5leHBvcnRzPW4oXCI4ZTYwXCIpP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzOmZ1bmN0aW9uKHQsZSl7aSh0KTt2YXIgbixjPW8oZSksdT1jLmxlbmd0aCxhPTA7d2hpbGUodT5hKXIuZih0LG49Y1thKytdLGVbbl0pO3JldHVybiB0fX0sXCI3ZjIwXCI6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oXCI4NmNjXCIpLmYsaT1uKFwiNjlhOFwiKSxvPW4oXCIyYjRjXCIpKFwidG9TdHJpbmdUYWdcIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXt0JiYhaSh0PW4/dDp0LnByb3RvdHlwZSxvKSYmcih0LG8se2NvbmZpZ3VyYWJsZTohMCx2YWx1ZTplfSl9fSxcIjdmN2ZcIjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bihcIjg2Y2NcIikuZixpPUZ1bmN0aW9uLnByb3RvdHlwZSxvPS9eXFxzKmZ1bmN0aW9uIChbXiAoXSopLyxjPVwibmFtZVwiO2MgaW4gaXx8bihcIjllMWVcIikmJnIoaSxjLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7dHJ5e3JldHVybihcIlwiK3RoaXMpLm1hdGNoKG8pWzFdfWNhdGNoKHQpe3JldHVyblwiXCJ9fX0pfSw4MDc5OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKFwiNzcyNlwiKSxpPW4oXCIxOTkxXCIpLnNldCxvPXIuTXV0YXRpb25PYnNlcnZlcnx8ci5XZWJLaXRNdXRhdGlvbk9ic2VydmVyLGM9ci5wcm9jZXNzLHU9ci5Qcm9taXNlLGE9XCJwcm9jZXNzXCI9PW4oXCIyZDk1XCIpKGMpO3QuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0LGUsbixzPWZ1bmN0aW9uKCl7dmFyIHIsaTthJiYocj1jLmRvbWFpbikmJnIuZXhpdCgpO3doaWxlKHQpe2k9dC5mbix0PXQubmV4dDt0cnl7aSgpfWNhdGNoKG8pe3Rocm93IHQ/bigpOmU9dm9pZCAwLG99fWU9dm9pZCAwLHImJnIuZW50ZXIoKX07aWYoYSluPWZ1bmN0aW9uKCl7Yy5uZXh0VGljayhzKX07ZWxzZSBpZighb3x8ci5uYXZpZ2F0b3ImJnIubmF2aWdhdG9yLnN0YW5kYWxvbmUpaWYodSYmdS5yZXNvbHZlKXt2YXIgZj11LnJlc29sdmUodm9pZCAwKTtuPWZ1bmN0aW9uKCl7Zi50aGVuKHMpfX1lbHNlIG49ZnVuY3Rpb24oKXtpLmNhbGwocixzKX07ZWxzZXt2YXIgbD0hMCxwPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFwiXCIpO25ldyBvKHMpLm9ic2VydmUocCx7Y2hhcmFjdGVyRGF0YTohMH0pLG49ZnVuY3Rpb24oKXtwLmRhdGE9bD0hbH19cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBpPXtmbjpyLG5leHQ6dm9pZCAwfTtlJiYoZS5uZXh0PWkpLHR8fCh0PWksbigpKSxlPWl9fX0sODM3ODpmdW5jdGlvbih0LGUpe3ZhciBuPXQuZXhwb3J0cz17dmVyc2lvbjpcIjIuNi4xMFwifTtcIm51bWJlclwiPT10eXBlb2YgX19lJiYoX19lPW4pfSxcIjgzYTFcIjpmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1PYmplY3QuaXN8fGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9PT1lPzAhPT10fHwxL3Q9PT0xL2U6dCE9dCYmZSE9ZX19LDg0MzY6ZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24oKXt9fSxcIjg0ZjJcIjpmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz17fX0sXCI4NWYyXCI6ZnVuY3Rpb24odCxlLG4pe3QuZXhwb3J0cz1uKFwiNDU0ZlwiKX0sODYxNTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bihcIjVjYTFcIiksaT1uKFwiNTA0Y1wiKSghMSk7cihyLlMsXCJPYmplY3RcIix7dmFsdWVzOmZ1bmN0aW9uKHQpe3JldHVybiBpKHQpfX0pfSxcIjg2Y2NcIjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bihcImNiN2NcIiksaT1uKFwiYzY5YVwiKSxvPW4oXCI2YTk5XCIpLGM9T2JqZWN0LmRlZmluZVByb3BlcnR5O2UuZj1uKFwiOWUxZVwiKT9PYmplY3QuZGVmaW5lUHJvcGVydHk6ZnVuY3Rpb24odCxlLG4pe2lmKHIodCksZT1vKGUsITApLHIobiksaSl0cnl7cmV0dXJuIGModCxlLG4pfWNhdGNoKHUpe31pZihcImdldFwiaW4gbnx8XCJzZXRcImluIG4pdGhyb3cgVHlwZUVycm9yKFwiQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQhXCIpO3JldHVyblwidmFsdWVcImluIG4mJih0W2VdPW4udmFsdWUpLHR9fSxcIjhiOTdcIjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bihcImQzZjRcIiksaT1uKFwiY2I3Y1wiKSxvPWZ1bmN0aW9uKHQsZSl7aWYoaSh0KSwhcihlKSYmbnVsbCE9PWUpdGhyb3cgVHlwZUVycm9yKGUrXCI6IGNhbid0IHNldCBhcyBwcm90b3R5cGUhXCIpfTt0LmV4cG9ydHM9e3NldDpPYmplY3Quc2V0UHJvdG90eXBlT2Z8fChcIl9fcHJvdG9fX1wiaW57fT9mdW5jdGlvbih0LGUscil7dHJ5e3I9bihcIjliNDNcIikoRnVuY3Rpb24uY2FsbCxuKFwiMTFlOVwiKS5mKE9iamVjdC5wcm90b3R5cGUsXCJfX3Byb3RvX19cIikuc2V0LDIpLHIodCxbXSksZT0hKHQgaW5zdGFuY2VvZiBBcnJheSl9Y2F0Y2goaSl7ZT0hMH1yZXR1cm4gZnVuY3Rpb24odCxuKXtyZXR1cm4gbyh0LG4pLGU/dC5fX3Byb3RvX189bjpyKHQsbiksdH19KHt9LCExKTp2b2lkIDApLGNoZWNrOm99fSxcIjhlNjBcIjpmdW5jdGlvbih0LGUsbil7dC5leHBvcnRzPSFuKFwiMjk0Y1wiKSgoZnVuY3Rpb24oKXtyZXR1cm4gNyE9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LFwiYVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSkpfSxcIjhlNmVcIjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bihcIjVjYTFcIiksaT1uKFwiOTkwYlwiKSxvPW4oXCI2ODIxXCIpLGM9bihcIjExZTlcIiksdT1uKFwiZjFhZVwiKTtyKHIuUyxcIk9iamVjdFwiLHtnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzOmZ1bmN0aW9uKHQpe3ZhciBlLG4scj1vKHQpLGE9Yy5mLHM9aShyKSxmPXt9LGw9MDt3aGlsZShzLmxlbmd0aD5sKW49YShyLGU9c1tsKytdKSx2b2lkIDAhPT1uJiZ1KGYsZSxuKTtyZXR1cm4gZn19KX0sXCI4ZjYwXCI6ZnVuY3Rpb24odCxlLG4pe1widXNlIHN0cmljdFwiO3ZhciByPW4oXCJhMTU5XCIpLGk9bihcImFlYmRcIiksbz1uKFwiNDVmMlwiKSxjPXt9O24oXCIzNWU4XCIpKGMsbihcIjUxNjhcIikoXCJpdGVyYXRvclwiKSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSx0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3QucHJvdG90eXBlPXIoYyx7bmV4dDppKDEsbil9KSxvKHQsZStcIiBJdGVyYXRvclwiKX19LDkwMDM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oXCI2YjRjXCIpO3QuZXhwb3J0cz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbih0KXtyZXR1cm5cIkFycmF5XCI9PXIodCl9fSw5MDkzOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKFwiY2UxMFwiKSxpPW4oXCJlMTFlXCIpLmNvbmNhdChcImxlbmd0aFwiLFwicHJvdG90eXBlXCIpO2UuZj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc3x8ZnVuY3Rpb24odCl7cmV0dXJuIHIodCxpKX19LDkxMzg6ZnVuY3Rpb24odCxlLG4pe3QuZXhwb3J0cz1uKFwiMzVlOFwiKX0sOTIyNDpmdW5jdGlvbih0KXt0LmV4cG9ydHM9SlNPTi5wYXJzZSgne1wiYVwiOlwiMC41LjFcIn0nKX0sXCI5NWQ1XCI6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oXCI0MGMzXCIpLGk9bihcIjUxNjhcIikoXCJpdGVyYXRvclwiKSxvPW4oXCI0ODFiXCIpO3QuZXhwb3J0cz1uKFwiNTg0YVwiKS5pc0l0ZXJhYmxlPWZ1bmN0aW9uKHQpe3ZhciBlPU9iamVjdCh0KTtyZXR1cm4gdm9pZCAwIT09ZVtpXXx8XCJAQGl0ZXJhdG9yXCJpbiBlfHxvLmhhc093blByb3BlcnR5KHIoZSkpfX0sXCI5NmNmXCI6ZnVuY3Rpb24odCxlLG4pe3ZhciByPWZ1bmN0aW9uKHQpe1widXNlIHN0cmljdFwiO3ZhciBlLG49T2JqZWN0LnByb3RvdHlwZSxyPW4uaGFzT3duUHJvcGVydHksaT1cImZ1bmN0aW9uXCI9PT10eXBlb2YgU3ltYm9sP1N5bWJvbDp7fSxvPWkuaXRlcmF0b3J8fFwiQEBpdGVyYXRvclwiLGM9aS5hc3luY0l0ZXJhdG9yfHxcIkBAYXN5bmNJdGVyYXRvclwiLHU9aS50b1N0cmluZ1RhZ3x8XCJAQHRvU3RyaW5nVGFnXCI7ZnVuY3Rpb24gYSh0LGUsbixyKXt2YXIgaT1lJiZlLnByb3RvdHlwZSBpbnN0YW5jZW9mIGQ/ZTpkLG89T2JqZWN0LmNyZWF0ZShpLnByb3RvdHlwZSksYz1uZXcgUChyfHxbXSk7cmV0dXJuIG8uX2ludm9rZT1PKHQsbixjKSxvfWZ1bmN0aW9uIHModCxlLG4pe3RyeXtyZXR1cm57dHlwZTpcIm5vcm1hbFwiLGFyZzp0LmNhbGwoZSxuKX19Y2F0Y2gocil7cmV0dXJue3R5cGU6XCJ0aHJvd1wiLGFyZzpyfX19dC53cmFwPWE7dmFyIGY9XCJzdXNwZW5kZWRTdGFydFwiLGw9XCJzdXNwZW5kZWRZaWVsZFwiLHA9XCJleGVjdXRpbmdcIixoPVwiY29tcGxldGVkXCIsdj17fTtmdW5jdGlvbiBkKCl7fWZ1bmN0aW9uIHkoKXt9ZnVuY3Rpb24gYigpe312YXIgZz17fTtnW29dPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9O3ZhciBtPU9iamVjdC5nZXRQcm90b3R5cGVPZix4PW0mJm0obShBKFtdKSkpO3gmJnghPT1uJiZyLmNhbGwoeCxvKSYmKGc9eCk7dmFyIHc9Yi5wcm90b3R5cGU9ZC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShnKTtmdW5jdGlvbiBfKHQpe1tcIm5leHRcIixcInRocm93XCIsXCJyZXR1cm5cIl0uZm9yRWFjaCgoZnVuY3Rpb24oZSl7dFtlXT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5faW52b2tlKGUsdCl9fSkpfWZ1bmN0aW9uIFModCl7ZnVuY3Rpb24gZShuLGksbyxjKXt2YXIgdT1zKHRbbl0sdCxpKTtpZihcInRocm93XCIhPT11LnR5cGUpe3ZhciBhPXUuYXJnLGY9YS52YWx1ZTtyZXR1cm4gZiYmXCJvYmplY3RcIj09PXR5cGVvZiBmJiZyLmNhbGwoZixcIl9fYXdhaXRcIik/UHJvbWlzZS5yZXNvbHZlKGYuX19hd2FpdCkudGhlbigoZnVuY3Rpb24odCl7ZShcIm5leHRcIix0LG8sYyl9KSwoZnVuY3Rpb24odCl7ZShcInRocm93XCIsdCxvLGMpfSkpOlByb21pc2UucmVzb2x2ZShmKS50aGVuKChmdW5jdGlvbih0KXthLnZhbHVlPXQsbyhhKX0pLChmdW5jdGlvbih0KXtyZXR1cm4gZShcInRocm93XCIsdCxvLGMpfSkpfWModS5hcmcpfXZhciBuO2Z1bmN0aW9uIGkodCxyKXtmdW5jdGlvbiBpKCl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLGkpe2UodCxyLG4saSl9KSl9cmV0dXJuIG49bj9uLnRoZW4oaSxpKTppKCl9dGhpcy5faW52b2tlPWl9ZnVuY3Rpb24gTyh0LGUsbil7dmFyIHI9ZjtyZXR1cm4gZnVuY3Rpb24oaSxvKXtpZihyPT09cCl0aHJvdyBuZXcgRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nXCIpO2lmKHI9PT1oKXtpZihcInRocm93XCI9PT1pKXRocm93IG87cmV0dXJuIEwoKX1uLm1ldGhvZD1pLG4uYXJnPW87d2hpbGUoMSl7dmFyIGM9bi5kZWxlZ2F0ZTtpZihjKXt2YXIgdT1rKGMsbik7aWYodSl7aWYodT09PXYpY29udGludWU7cmV0dXJuIHV9fWlmKFwibmV4dFwiPT09bi5tZXRob2Qpbi5zZW50PW4uX3NlbnQ9bi5hcmc7ZWxzZSBpZihcInRocm93XCI9PT1uLm1ldGhvZCl7aWYocj09PWYpdGhyb3cgcj1oLG4uYXJnO24uZGlzcGF0Y2hFeGNlcHRpb24obi5hcmcpfWVsc2VcInJldHVyblwiPT09bi5tZXRob2QmJm4uYWJydXB0KFwicmV0dXJuXCIsbi5hcmcpO3I9cDt2YXIgYT1zKHQsZSxuKTtpZihcIm5vcm1hbFwiPT09YS50eXBlKXtpZihyPW4uZG9uZT9oOmwsYS5hcmc9PT12KWNvbnRpbnVlO3JldHVybnt2YWx1ZTphLmFyZyxkb25lOm4uZG9uZX19XCJ0aHJvd1wiPT09YS50eXBlJiYocj1oLG4ubWV0aG9kPVwidGhyb3dcIixuLmFyZz1hLmFyZyl9fX1mdW5jdGlvbiBrKHQsbil7dmFyIHI9dC5pdGVyYXRvcltuLm1ldGhvZF07aWYocj09PWUpe2lmKG4uZGVsZWdhdGU9bnVsbCxcInRocm93XCI9PT1uLm1ldGhvZCl7aWYodC5pdGVyYXRvcltcInJldHVyblwiXSYmKG4ubWV0aG9kPVwicmV0dXJuXCIsbi5hcmc9ZSxrKHQsbiksXCJ0aHJvd1wiPT09bi5tZXRob2QpKXJldHVybiB2O24ubWV0aG9kPVwidGhyb3dcIixuLmFyZz1uZXcgVHlwZUVycm9yKFwiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAndGhyb3cnIG1ldGhvZFwiKX1yZXR1cm4gdn12YXIgaT1zKHIsdC5pdGVyYXRvcixuLmFyZyk7aWYoXCJ0aHJvd1wiPT09aS50eXBlKXJldHVybiBuLm1ldGhvZD1cInRocm93XCIsbi5hcmc9aS5hcmcsbi5kZWxlZ2F0ZT1udWxsLHY7dmFyIG89aS5hcmc7cmV0dXJuIG8/by5kb25lPyhuW3QucmVzdWx0TmFtZV09by52YWx1ZSxuLm5leHQ9dC5uZXh0TG9jLFwicmV0dXJuXCIhPT1uLm1ldGhvZCYmKG4ubWV0aG9kPVwibmV4dFwiLG4uYXJnPWUpLG4uZGVsZWdhdGU9bnVsbCx2KTpvOihuLm1ldGhvZD1cInRocm93XCIsbi5hcmc9bmV3IFR5cGVFcnJvcihcIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0XCIpLG4uZGVsZWdhdGU9bnVsbCx2KX1mdW5jdGlvbiBqKHQpe3ZhciBlPXt0cnlMb2M6dFswXX07MSBpbiB0JiYoZS5jYXRjaExvYz10WzFdKSwyIGluIHQmJihlLmZpbmFsbHlMb2M9dFsyXSxlLmFmdGVyTG9jPXRbM10pLHRoaXMudHJ5RW50cmllcy5wdXNoKGUpfWZ1bmN0aW9uIEUodCl7dmFyIGU9dC5jb21wbGV0aW9ufHx7fTtlLnR5cGU9XCJub3JtYWxcIixkZWxldGUgZS5hcmcsdC5jb21wbGV0aW9uPWV9ZnVuY3Rpb24gUCh0KXt0aGlzLnRyeUVudHJpZXM9W3t0cnlMb2M6XCJyb290XCJ9XSx0LmZvckVhY2goaix0aGlzKSx0aGlzLnJlc2V0KCEwKX1mdW5jdGlvbiBBKHQpe2lmKHQpe3ZhciBuPXRbb107aWYobilyZXR1cm4gbi5jYWxsKHQpO2lmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiB0Lm5leHQpcmV0dXJuIHQ7aWYoIWlzTmFOKHQubGVuZ3RoKSl7dmFyIGk9LTEsYz1mdW5jdGlvbiBuKCl7d2hpbGUoKytpPHQubGVuZ3RoKWlmKHIuY2FsbCh0LGkpKXJldHVybiBuLnZhbHVlPXRbaV0sbi5kb25lPSExLG47cmV0dXJuIG4udmFsdWU9ZSxuLmRvbmU9ITAsbn07cmV0dXJuIGMubmV4dD1jfX1yZXR1cm57bmV4dDpMfX1mdW5jdGlvbiBMKCl7cmV0dXJue3ZhbHVlOmUsZG9uZTohMH19cmV0dXJuIHkucHJvdG90eXBlPXcuY29uc3RydWN0b3I9YixiLmNvbnN0cnVjdG9yPXksYlt1XT15LmRpc3BsYXlOYW1lPVwiR2VuZXJhdG9yRnVuY3Rpb25cIix0LmlzR2VuZXJhdG9yRnVuY3Rpb249ZnVuY3Rpb24odCl7dmFyIGU9XCJmdW5jdGlvblwiPT09dHlwZW9mIHQmJnQuY29uc3RydWN0b3I7cmV0dXJuISFlJiYoZT09PXl8fFwiR2VuZXJhdG9yRnVuY3Rpb25cIj09PShlLmRpc3BsYXlOYW1lfHxlLm5hbWUpKX0sdC5tYXJrPWZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKHQsYik6KHQuX19wcm90b19fPWIsdSBpbiB0fHwodFt1XT1cIkdlbmVyYXRvckZ1bmN0aW9uXCIpKSx0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHcpLHR9LHQuYXdyYXA9ZnVuY3Rpb24odCl7cmV0dXJue19fYXdhaXQ6dH19LF8oUy5wcm90b3R5cGUpLFMucHJvdG90eXBlW2NdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LHQuQXN5bmNJdGVyYXRvcj1TLHQuYXN5bmM9ZnVuY3Rpb24oZSxuLHIsaSl7dmFyIG89bmV3IFMoYShlLG4scixpKSk7cmV0dXJuIHQuaXNHZW5lcmF0b3JGdW5jdGlvbihuKT9vOm8ubmV4dCgpLnRoZW4oKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRvbmU/dC52YWx1ZTpvLm5leHQoKX0pKX0sXyh3KSx3W3VdPVwiR2VuZXJhdG9yXCIsd1tvXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSx3LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuXCJbb2JqZWN0IEdlbmVyYXRvcl1cIn0sdC5rZXlzPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Zvcih2YXIgbiBpbiB0KWUucHVzaChuKTtyZXR1cm4gZS5yZXZlcnNlKCksZnVuY3Rpb24gbigpe3doaWxlKGUubGVuZ3RoKXt2YXIgcj1lLnBvcCgpO2lmKHIgaW4gdClyZXR1cm4gbi52YWx1ZT1yLG4uZG9uZT0hMSxufXJldHVybiBuLmRvbmU9ITAsbn19LHQudmFsdWVzPUEsUC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlAscmVzZXQ6ZnVuY3Rpb24odCl7aWYodGhpcy5wcmV2PTAsdGhpcy5uZXh0PTAsdGhpcy5zZW50PXRoaXMuX3NlbnQ9ZSx0aGlzLmRvbmU9ITEsdGhpcy5kZWxlZ2F0ZT1udWxsLHRoaXMubWV0aG9kPVwibmV4dFwiLHRoaXMuYXJnPWUsdGhpcy50cnlFbnRyaWVzLmZvckVhY2goRSksIXQpZm9yKHZhciBuIGluIHRoaXMpXCJ0XCI9PT1uLmNoYXJBdCgwKSYmci5jYWxsKHRoaXMsbikmJiFpc05hTigrbi5zbGljZSgxKSkmJih0aGlzW25dPWUpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5kb25lPSEwO3ZhciB0PXRoaXMudHJ5RW50cmllc1swXSxlPXQuY29tcGxldGlvbjtpZihcInRocm93XCI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuIHRoaXMucnZhbH0sZGlzcGF0Y2hFeGNlcHRpb246ZnVuY3Rpb24odCl7aWYodGhpcy5kb25lKXRocm93IHQ7dmFyIG49dGhpcztmdW5jdGlvbiBpKHIsaSl7cmV0dXJuIHUudHlwZT1cInRocm93XCIsdS5hcmc9dCxuLm5leHQ9cixpJiYobi5tZXRob2Q9XCJuZXh0XCIsbi5hcmc9ZSksISFpfWZvcih2YXIgbz10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7bz49MDstLW8pe3ZhciBjPXRoaXMudHJ5RW50cmllc1tvXSx1PWMuY29tcGxldGlvbjtpZihcInJvb3RcIj09PWMudHJ5TG9jKXJldHVybiBpKFwiZW5kXCIpO2lmKGMudHJ5TG9jPD10aGlzLnByZXYpe3ZhciBhPXIuY2FsbChjLFwiY2F0Y2hMb2NcIikscz1yLmNhbGwoYyxcImZpbmFsbHlMb2NcIik7aWYoYSYmcyl7aWYodGhpcy5wcmV2PGMuY2F0Y2hMb2MpcmV0dXJuIGkoYy5jYXRjaExvYywhMCk7aWYodGhpcy5wcmV2PGMuZmluYWxseUxvYylyZXR1cm4gaShjLmZpbmFsbHlMb2MpfWVsc2UgaWYoYSl7aWYodGhpcy5wcmV2PGMuY2F0Y2hMb2MpcmV0dXJuIGkoYy5jYXRjaExvYywhMCl9ZWxzZXtpZighcyl0aHJvdyBuZXcgRXJyb3IoXCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseVwiKTtpZih0aGlzLnByZXY8Yy5maW5hbGx5TG9jKXJldHVybiBpKGMuZmluYWxseUxvYyl9fX19LGFicnVwdDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7bj49MDstLW4pe3ZhciBpPXRoaXMudHJ5RW50cmllc1tuXTtpZihpLnRyeUxvYzw9dGhpcy5wcmV2JiZyLmNhbGwoaSxcImZpbmFsbHlMb2NcIikmJnRoaXMucHJldjxpLmZpbmFsbHlMb2Mpe3ZhciBvPWk7YnJlYWt9fW8mJihcImJyZWFrXCI9PT10fHxcImNvbnRpbnVlXCI9PT10KSYmby50cnlMb2M8PWUmJmU8PW8uZmluYWxseUxvYyYmKG89bnVsbCk7dmFyIGM9bz9vLmNvbXBsZXRpb246e307cmV0dXJuIGMudHlwZT10LGMuYXJnPWUsbz8odGhpcy5tZXRob2Q9XCJuZXh0XCIsdGhpcy5uZXh0PW8uZmluYWxseUxvYyx2KTp0aGlzLmNvbXBsZXRlKGMpfSxjb21wbGV0ZTpmdW5jdGlvbih0LGUpe2lmKFwidGhyb3dcIj09PXQudHlwZSl0aHJvdyB0LmFyZztyZXR1cm5cImJyZWFrXCI9PT10LnR5cGV8fFwiY29udGludWVcIj09PXQudHlwZT90aGlzLm5leHQ9dC5hcmc6XCJyZXR1cm5cIj09PXQudHlwZT8odGhpcy5ydmFsPXRoaXMuYXJnPXQuYXJnLHRoaXMubWV0aG9kPVwicmV0dXJuXCIsdGhpcy5uZXh0PVwiZW5kXCIpOlwibm9ybWFsXCI9PT10LnR5cGUmJmUmJih0aGlzLm5leHQ9ZSksdn0sZmluaXNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7ZT49MDstLWUpe3ZhciBuPXRoaXMudHJ5RW50cmllc1tlXTtpZihuLmZpbmFsbHlMb2M9PT10KXJldHVybiB0aGlzLmNvbXBsZXRlKG4uY29tcGxldGlvbixuLmFmdGVyTG9jKSxFKG4pLHZ9fSxjYXRjaDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2U+PTA7LS1lKXt2YXIgbj10aGlzLnRyeUVudHJpZXNbZV07aWYobi50cnlMb2M9PT10KXt2YXIgcj1uLmNvbXBsZXRpb247aWYoXCJ0aHJvd1wiPT09ci50eXBlKXt2YXIgaT1yLmFyZztFKG4pfXJldHVybiBpfX10aHJvdyBuZXcgRXJyb3IoXCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHRcIil9LGRlbGVnYXRlWWllbGQ6ZnVuY3Rpb24odCxuLHIpe3JldHVybiB0aGlzLmRlbGVnYXRlPXtpdGVyYXRvcjpBKHQpLHJlc3VsdE5hbWU6bixuZXh0TG9jOnJ9LFwibmV4dFwiPT09dGhpcy5tZXRob2QmJih0aGlzLmFyZz1lKSx2fX0sdH0odC5leHBvcnRzKTt0cnl7cmVnZW5lcmF0b3JSdW50aW1lPXJ9Y2F0Y2goaSl7RnVuY3Rpb24oXCJyXCIsXCJyZWdlbmVyYXRvclJ1bnRpbWUgPSByXCIpKHIpfX0sXCI5OTBiXCI6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oXCI5MDkzXCIpLGk9bihcIjI2MjFcIiksbz1uKFwiY2I3Y1wiKSxjPW4oXCI3NzI2XCIpLlJlZmxlY3Q7dC5leHBvcnRzPWMmJmMub3duS2V5c3x8ZnVuY3Rpb24odCl7dmFyIGU9ci5mKG8odCkpLG49aS5mO3JldHVybiBuP2UuY29uY2F0KG4odCkpOmV9fSxcIjlhYTlcIjpmdW5jdGlvbih0LGUpe2UuZj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzfSxcIjliNDNcIjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bihcImQ4ZThcIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtpZihyKHQpLHZvaWQgMD09PWUpcmV0dXJuIHQ7c3dpdGNoKG4pe2Nhc2UgMTpyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHQuY2FsbChlLG4pfTtjYXNlIDI6cmV0dXJuIGZ1bmN0aW9uKG4scil7cmV0dXJuIHQuY2FsbChlLG4scil9O2Nhc2UgMzpyZXR1cm4gZnVuY3Rpb24obixyLGkpe3JldHVybiB0LmNhbGwoZSxuLHIsaSl9fXJldHVybiBmdW5jdGlvbigpe3JldHVybiB0LmFwcGx5KGUsYXJndW1lbnRzKX19fSxcIjljNmNcIjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bihcIjJiNGNcIikoXCJ1bnNjb3BhYmxlc1wiKSxpPUFycmF5LnByb3RvdHlwZTt2b2lkIDA9PWlbcl0mJm4oXCIzMmU5XCIpKGkscix7fSksdC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lbcl1bdF09ITB9fSxcIjljODBcIjpmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXt0cnl7cmV0dXJue2U6ITEsdjp0KCl9fWNhdGNoKGUpe3JldHVybntlOiEwLHY6ZX19fX0sXCI5ZGVmXCI6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oXCI0NTg4XCIpLGk9TWF0aC5taW47dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0PjA/aShyKHQpLDkwMDcxOTkyNTQ3NDA5OTEpOjB9fSxcIjllMWVcIjpmdW5jdGlvbih0LGUsbil7dC5leHBvcnRzPSFuKFwiNzllNVwiKSgoZnVuY3Rpb24oKXtyZXR1cm4gNyE9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LFwiYVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSkpfSxhMTU5OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKFwiZTRhZVwiKSxpPW4oXCI3ZTkwXCIpLG89bihcIjE2OTFcIiksYz1uKFwiNTU1OVwiKShcIklFX1BST1RPXCIpLHU9ZnVuY3Rpb24oKXt9LGE9XCJwcm90b3R5cGVcIixzPWZ1bmN0aW9uKCl7dmFyIHQsZT1uKFwiMWVjOVwiKShcImlmcmFtZVwiKSxyPW8ubGVuZ3RoLGk9XCI8XCIsYz1cIj5cIjtlLnN0eWxlLmRpc3BsYXk9XCJub25lXCIsbihcIjMyZmNcIikuYXBwZW5kQ2hpbGQoZSksZS5zcmM9XCJqYXZhc2NyaXB0OlwiLHQ9ZS5jb250ZW50V2luZG93LmRvY3VtZW50LHQub3BlbigpLHQud3JpdGUoaStcInNjcmlwdFwiK2MrXCJkb2N1bWVudC5GPU9iamVjdFwiK2krXCIvc2NyaXB0XCIrYyksdC5jbG9zZSgpLHM9dC5GO3doaWxlKHItLSlkZWxldGUgc1thXVtvW3JdXTtyZXR1cm4gcygpfTt0LmV4cG9ydHM9T2JqZWN0LmNyZWF0ZXx8ZnVuY3Rpb24odCxlKXt2YXIgbjtyZXR1cm4gbnVsbCE9PXQ/KHVbYV09cih0KSxuPW5ldyB1LHVbYV09bnVsbCxuW2NdPXQpOm49cygpLHZvaWQgMD09PWU/bjppKG4sZSl9fSxhMjJhOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKFwiZDg2NFwiKSxpPW4oXCJiMGRjXCIpLG89bihcIjM3MDJcIiksYz1uKFwiZTRhZVwiKSx1PW4oXCJiNDQ3XCIpLGE9bihcIjdjZDZcIikscz17fSxmPXt9O2U9dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuLGwscCl7dmFyIGgsdixkLHksYj1wP2Z1bmN0aW9uKCl7cmV0dXJuIHR9OmEodCksZz1yKG4sbCxlPzI6MSksbT0wO2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGIpdGhyb3cgVHlwZUVycm9yKHQrXCIgaXMgbm90IGl0ZXJhYmxlIVwiKTtpZihvKGIpKXtmb3IoaD11KHQubGVuZ3RoKTtoPm07bSsrKWlmKHk9ZT9nKGModj10W21dKVswXSx2WzFdKTpnKHRbbV0pLHk9PT1zfHx5PT09ZilyZXR1cm4geX1lbHNlIGZvcihkPWIuY2FsbCh0KTshKHY9ZC5uZXh0KCkpLmRvbmU7KWlmKHk9aShkLGcsdi52YWx1ZSxlKSx5PT09c3x8eT09PWYpcmV0dXJuIHl9O2UuQlJFQUs9cyxlLlJFVFVSTj1mfSxhMjVmOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKFwiNzcyNlwiKSxpPXIubmF2aWdhdG9yO3QuZXhwb3J0cz1pJiZpLnVzZXJBZ2VudHx8XCJcIn0sYTQ4MTpmdW5jdGlvbih0LGUsbil7XCJ1c2Ugc3RyaWN0XCI7dmFyIHI9bihcImNiN2NcIiksaT1uKFwiNGJmOFwiKSxvPW4oXCI5ZGVmXCIpLGM9bihcIjQ1ODhcIiksdT1uKFwiMDM5MFwiKSxhPW4oXCI1ZjFiXCIpLHM9TWF0aC5tYXgsZj1NYXRoLm1pbixsPU1hdGguZmxvb3IscD0vXFwkKFskJmAnXXxcXGRcXGQ/fDxbXj5dKj4pL2csaD0vXFwkKFskJmAnXXxcXGRcXGQ/KS9nLHY9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQ/dDpTdHJpbmcodCl9O24oXCIyMTRmXCIpKFwicmVwbGFjZVwiLDIsKGZ1bmN0aW9uKHQsZSxuLGQpe3JldHVybltmdW5jdGlvbihyLGkpe3ZhciBvPXQodGhpcyksYz12b2lkIDA9PXI/dm9pZCAwOnJbZV07cmV0dXJuIHZvaWQgMCE9PWM/Yy5jYWxsKHIsbyxpKTpuLmNhbGwoU3RyaW5nKG8pLHIsaSl9LGZ1bmN0aW9uKHQsZSl7dmFyIGk9ZChuLHQsdGhpcyxlKTtpZihpLmRvbmUpcmV0dXJuIGkudmFsdWU7dmFyIGw9cih0KSxwPVN0cmluZyh0aGlzKSxoPVwiZnVuY3Rpb25cIj09PXR5cGVvZiBlO2h8fChlPVN0cmluZyhlKSk7dmFyIGI9bC5nbG9iYWw7aWYoYil7dmFyIGc9bC51bmljb2RlO2wubGFzdEluZGV4PTB9dmFyIG09W107d2hpbGUoMSl7dmFyIHg9YShsLHApO2lmKG51bGw9PT14KWJyZWFrO2lmKG0ucHVzaCh4KSwhYilicmVhazt2YXIgdz1TdHJpbmcoeFswXSk7XCJcIj09PXcmJihsLmxhc3RJbmRleD11KHAsbyhsLmxhc3RJbmRleCksZykpfWZvcih2YXIgXz1cIlwiLFM9MCxPPTA7TzxtLmxlbmd0aDtPKyspe3g9bVtPXTtmb3IodmFyIGs9U3RyaW5nKHhbMF0pLGo9cyhmKGMoeC5pbmRleCkscC5sZW5ndGgpLDApLEU9W10sUD0xO1A8eC5sZW5ndGg7UCsrKUUucHVzaCh2KHhbUF0pKTt2YXIgQT14Lmdyb3VwcztpZihoKXt2YXIgTD1ba10uY29uY2F0KEUsaixwKTt2b2lkIDAhPT1BJiZMLnB1c2goQSk7dmFyIFQ9U3RyaW5nKGUuYXBwbHkodm9pZCAwLEwpKX1lbHNlIFQ9eShrLHAsaixFLEEsZSk7aj49UyYmKF8rPXAuc2xpY2UoUyxqKStULFM9aitrLmxlbmd0aCl9cmV0dXJuIF8rcC5zbGljZShTKX1dO2Z1bmN0aW9uIHkodCxlLHIsbyxjLHUpe3ZhciBhPXIrdC5sZW5ndGgscz1vLmxlbmd0aCxmPWg7cmV0dXJuIHZvaWQgMCE9PWMmJihjPWkoYyksZj1wKSxuLmNhbGwodSxmLChmdW5jdGlvbihuLGkpe3ZhciB1O3N3aXRjaChpLmNoYXJBdCgwKSl7Y2FzZVwiJFwiOnJldHVyblwiJFwiO2Nhc2VcIiZcIjpyZXR1cm4gdDtjYXNlXCJgXCI6cmV0dXJuIGUuc2xpY2UoMCxyKTtjYXNlXCInXCI6cmV0dXJuIGUuc2xpY2UoYSk7Y2FzZVwiPFwiOnU9Y1tpLnNsaWNlKDEsLTEpXTticmVhaztkZWZhdWx0OnZhciBmPStpO2lmKDA9PT1mKXJldHVybiBuO2lmKGY+cyl7dmFyIHA9bChmLzEwKTtyZXR1cm4gMD09PXA/bjpwPD1zP3ZvaWQgMD09PW9bcC0xXT9pLmNoYXJBdCgxKTpvW3AtMV0raS5jaGFyQXQoMSk6bn11PW9bZi0xXX1yZXR1cm4gdm9pZCAwPT09dT9cIlwiOnV9KSl9fSkpfSxhNWI4OmZ1bmN0aW9uKHQsZSxuKXtcInVzZSBzdHJpY3RcIjt2YXIgcj1uKFwiZDhlOFwiKTtmdW5jdGlvbiBpKHQpe3ZhciBlLG47dGhpcy5wcm9taXNlPW5ldyB0KChmdW5jdGlvbih0LHIpe2lmKHZvaWQgMCE9PWV8fHZvaWQgMCE9PW4pdGhyb3cgVHlwZUVycm9yKFwiQmFkIFByb21pc2UgY29uc3RydWN0b3JcIik7ZT10LG49cn0pKSx0aGlzLnJlc29sdmU9cihlKSx0aGlzLnJlamVjdD1yKG4pfXQuZXhwb3J0cy5mPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgaSh0KX19LGE3NDU6ZnVuY3Rpb24odCxlLG4pe3QuZXhwb3J0cz1uKFwiZjQxMFwiKX0sYWE3NzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bihcIjVjYTFcIiksaT1uKFwiYmUxM1wiKSxvPW4oXCI3OWU1XCIpLGM9bihcImZkZWZcIiksdT1cIltcIitjK1wiXVwiLGE9XCLigIvChVwiLHM9UmVnRXhwKFwiXlwiK3UrdStcIipcIiksZj1SZWdFeHAodSt1K1wiKiRcIiksbD1mdW5jdGlvbih0LGUsbil7dmFyIGk9e30sdT1vKChmdW5jdGlvbigpe3JldHVybiEhY1t0XSgpfHxhW3RdKCkhPWF9KSkscz1pW3RdPXU/ZShwKTpjW3RdO24mJihpW25dPXMpLHIoci5QK3IuRip1LFwiU3RyaW5nXCIsaSl9LHA9bC50cmltPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9U3RyaW5nKGkodCkpLDEmZSYmKHQ9dC5yZXBsYWNlKHMsXCJcIikpLDImZSYmKHQ9dC5yZXBsYWNlKGYsXCJcIikpLHR9O3QuZXhwb3J0cz1sfSxhYWUzOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKFwiZDNmNFwiKSxpPW4oXCIyZDk1XCIpLG89bihcIjJiNGNcIikoXCJtYXRjaFwiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuIHIodCkmJih2b2lkIDAhPT0oZT10W29dKT8hIWU6XCJSZWdFeHBcIj09aSh0KSl9fSxhYmEyOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKFwiZTUzZFwiKSxpPW4oXCI0MTc4XCIpLnNldCxvPXIuTXV0YXRpb25PYnNlcnZlcnx8ci5XZWJLaXRNdXRhdGlvbk9ic2VydmVyLGM9ci5wcm9jZXNzLHU9ci5Qcm9taXNlLGE9XCJwcm9jZXNzXCI9PW4oXCI2YjRjXCIpKGMpO3QuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0LGUsbixzPWZ1bmN0aW9uKCl7dmFyIHIsaTthJiYocj1jLmRvbWFpbikmJnIuZXhpdCgpO3doaWxlKHQpe2k9dC5mbix0PXQubmV4dDt0cnl7aSgpfWNhdGNoKG8pe3Rocm93IHQ/bigpOmU9dm9pZCAwLG99fWU9dm9pZCAwLHImJnIuZW50ZXIoKX07aWYoYSluPWZ1bmN0aW9uKCl7Yy5uZXh0VGljayhzKX07ZWxzZSBpZighb3x8ci5uYXZpZ2F0b3ImJnIubmF2aWdhdG9yLnN0YW5kYWxvbmUpaWYodSYmdS5yZXNvbHZlKXt2YXIgZj11LnJlc29sdmUodm9pZCAwKTtuPWZ1bmN0aW9uKCl7Zi50aGVuKHMpfX1lbHNlIG49ZnVuY3Rpb24oKXtpLmNhbGwocixzKX07ZWxzZXt2YXIgbD0hMCxwPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFwiXCIpO25ldyBvKHMpLm9ic2VydmUocCx7Y2hhcmFjdGVyRGF0YTohMH0pLG49ZnVuY3Rpb24oKXtwLmRhdGE9bD0hbH19cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBpPXtmbjpyLG5leHQ6dm9pZCAwfTtlJiYoZS5uZXh0PWkpLHR8fCh0PWksbigpKSxlPWl9fX0sYWM2YTpmdW5jdGlvbih0LGUsbil7Zm9yKHZhciByPW4oXCJjYWRmXCIpLGk9bihcIjBkNThcIiksbz1uKFwiMmFiYVwiKSxjPW4oXCI3NzI2XCIpLHU9bihcIjMyZTlcIiksYT1uKFwiODRmMlwiKSxzPW4oXCIyYjRjXCIpLGY9cyhcIml0ZXJhdG9yXCIpLGw9cyhcInRvU3RyaW5nVGFnXCIpLHA9YS5BcnJheSxoPXtDU1NSdWxlTGlzdDohMCxDU1NTdHlsZURlY2xhcmF0aW9uOiExLENTU1ZhbHVlTGlzdDohMSxDbGllbnRSZWN0TGlzdDohMSxET01SZWN0TGlzdDohMSxET01TdHJpbmdMaXN0OiExLERPTVRva2VuTGlzdDohMCxEYXRhVHJhbnNmZXJJdGVtTGlzdDohMSxGaWxlTGlzdDohMSxIVE1MQWxsQ29sbGVjdGlvbjohMSxIVE1MQ29sbGVjdGlvbjohMSxIVE1MRm9ybUVsZW1lbnQ6ITEsSFRNTFNlbGVjdEVsZW1lbnQ6ITEsTWVkaWFMaXN0OiEwLE1pbWVUeXBlQXJyYXk6ITEsTmFtZWROb2RlTWFwOiExLE5vZGVMaXN0OiEwLFBhaW50UmVxdWVzdExpc3Q6ITEsUGx1Z2luOiExLFBsdWdpbkFycmF5OiExLFNWR0xlbmd0aExpc3Q6ITEsU1ZHTnVtYmVyTGlzdDohMSxTVkdQYXRoU2VnTGlzdDohMSxTVkdQb2ludExpc3Q6ITEsU1ZHU3RyaW5nTGlzdDohMSxTVkdUcmFuc2Zvcm1MaXN0OiExLFNvdXJjZUJ1ZmZlckxpc3Q6ITEsU3R5bGVTaGVldExpc3Q6ITAsVGV4dFRyYWNrQ3VlTGlzdDohMSxUZXh0VHJhY2tMaXN0OiExLFRvdWNoTGlzdDohMX0sdj1pKGgpLGQ9MDtkPHYubGVuZ3RoO2QrKyl7dmFyIHksYj12W2RdLGc9aFtiXSxtPWNbYl0seD1tJiZtLnByb3RvdHlwZTtpZih4JiYoeFtmXXx8dSh4LGYscCkseFtsXXx8dSh4LGwsYiksYVtiXT1wLGcpKWZvcih5IGluIHIpeFt5XXx8byh4LHksclt5XSwhMCl9fSxhZWJkOmZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJue2VudW1lcmFibGU6ISgxJnQpLGNvbmZpZ3VyYWJsZTohKDImdCksd3JpdGFibGU6ISg0JnQpLHZhbHVlOmV9fX0sYjBjNTpmdW5jdGlvbih0LGUsbil7XCJ1c2Ugc3RyaWN0XCI7dmFyIHI9bihcIjUyMGFcIik7bihcIjVjYTFcIikoe3RhcmdldDpcIlJlZ0V4cFwiLHByb3RvOiEwLGZvcmNlZDpyIT09Ly4vLmV4ZWN9LHtleGVjOnJ9KX0sYjBkYzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bihcImU0YWVcIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuLGkpe3RyeXtyZXR1cm4gaT9lKHIobilbMF0sblsxXSk6ZShuKX1jYXRjaChjKXt2YXIgbz10W1wicmV0dXJuXCJdO3Rocm93IHZvaWQgMCE9PW8mJnIoby5jYWxsKHQpKSxjfX19LGI0NDc6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oXCIzYTM4XCIpLGk9TWF0aC5taW47dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0PjA/aShyKHQpLDkwMDcxOTkyNTQ3NDA5OTEpOjB9fSxiOGUzOmZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPSEwfSxiYzEzOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKFwiZTUzZFwiKSxpPXIubmF2aWdhdG9yO3QuZXhwb3J0cz1pJiZpLnVzZXJBZ2VudHx8XCJcIn0sYmNhYTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bihcImNiN2NcIiksaT1uKFwiZDNmNFwiKSxvPW4oXCJhNWI4XCIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKHIodCksaShlKSYmZS5jb25zdHJ1Y3Rvcj09PXQpcmV0dXJuIGU7dmFyIG49by5mKHQpLGM9bi5yZXNvbHZlO3JldHVybiBjKGUpLG4ucHJvbWlzZX19LGJlMTM6ZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYodm9pZCAwPT10KXRocm93IFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uICBcIit0KTtyZXR1cm4gdH19LGJmMGI6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oXCIzNTVkXCIpLGk9bihcImFlYmRcIiksbz1uKFwiMzZjM1wiKSxjPW4oXCIxYmMzXCIpLHU9bihcIjA3ZTNcIiksYT1uKFwiNzk0YlwiKSxzPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7ZS5mPW4oXCI4ZTYwXCIpP3M6ZnVuY3Rpb24odCxlKXtpZih0PW8odCksZT1jKGUsITApLGEpdHJ5e3JldHVybiBzKHQsZSl9Y2F0Y2gobil7fWlmKHUodCxlKSlyZXR1cm4gaSghci5mLmNhbGwodCxlKSx0W2VdKX19LGMyMDc6ZnVuY3Rpb24odCxlKXt9LGMzNjY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oXCI2ODIxXCIpLGk9bihcIjlkZWZcIiksbz1uKFwiNzdmMVwiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUsbixjKXt2YXIgdSxhPXIoZSkscz1pKGEubGVuZ3RoKSxmPW8oYyxzKTtpZih0JiZuIT1uKXt3aGlsZShzPmYpaWYodT1hW2YrK10sdSE9dSlyZXR1cm4hMH1lbHNlIGZvcig7cz5mO2YrKylpZigodHx8ZiBpbiBhKSYmYVtmXT09PW4pcmV0dXJuIHR8fGZ8fDA7cmV0dXJuIXQmJi0xfX19LGMzNjc6ZnVuY3Rpb24odCxlLG4pe1widXNlIHN0cmljdFwiO3ZhciByPW4oXCI4NDM2XCIpLGk9bihcIjUwZWRcIiksbz1uKFwiNDgxYlwiKSxjPW4oXCIzNmMzXCIpO3QuZXhwb3J0cz1uKFwiMzBmMVwiKShBcnJheSxcIkFycmF5XCIsKGZ1bmN0aW9uKHQsZSl7dGhpcy5fdD1jKHQpLHRoaXMuX2k9MCx0aGlzLl9rPWV9KSwoZnVuY3Rpb24oKXt2YXIgdD10aGlzLl90LGU9dGhpcy5fayxuPXRoaXMuX2krKztyZXR1cm4hdHx8bj49dC5sZW5ndGg/KHRoaXMuX3Q9dm9pZCAwLGkoMSkpOmkoMCxcImtleXNcIj09ZT9uOlwidmFsdWVzXCI9PWU/dFtuXTpbbix0W25dXSl9KSxcInZhbHVlc1wiKSxvLkFyZ3VtZW50cz1vLkFycmF5LHIoXCJrZXlzXCIpLHIoXCJ2YWx1ZXNcIikscihcImVudHJpZXNcIil9LGMzYTE6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oXCJlNmYzXCIpLGk9bihcIjE2OTFcIik7dC5leHBvcnRzPU9iamVjdC5rZXlzfHxmdW5jdGlvbih0KXtyZXR1cm4gcih0LGkpfX0sYzVmNjpmdW5jdGlvbih0LGUsbil7XCJ1c2Ugc3RyaWN0XCI7dmFyIHI9bihcIjc3MjZcIiksaT1uKFwiNjlhOFwiKSxvPW4oXCIyZDk1XCIpLGM9bihcIjVkYmNcIiksdT1uKFwiNmE5OVwiKSxhPW4oXCI3OWU1XCIpLHM9bihcIjkwOTNcIikuZixmPW4oXCIxMWU5XCIpLmYsbD1uKFwiODZjY1wiKS5mLHA9bihcImFhNzdcIikudHJpbSxoPVwiTnVtYmVyXCIsdj1yW2hdLGQ9dix5PXYucHJvdG90eXBlLGI9byhuKFwiMmFlYlwiKSh5KSk9PWgsZz1cInRyaW1cImluIFN0cmluZy5wcm90b3R5cGUsbT1mdW5jdGlvbih0KXt2YXIgZT11KHQsITEpO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlJiZlLmxlbmd0aD4yKXtlPWc/ZS50cmltKCk6cChlLDMpO3ZhciBuLHIsaSxvPWUuY2hhckNvZGVBdCgwKTtpZig0Mz09PW98fDQ1PT09byl7aWYobj1lLmNoYXJDb2RlQXQoMiksODg9PT1ufHwxMjA9PT1uKXJldHVybiBOYU59ZWxzZSBpZig0OD09PW8pe3N3aXRjaChlLmNoYXJDb2RlQXQoMSkpe2Nhc2UgNjY6Y2FzZSA5ODpyPTIsaT00OTticmVhaztjYXNlIDc5OmNhc2UgMTExOnI9OCxpPTU1O2JyZWFrO2RlZmF1bHQ6cmV0dXJuK2V9Zm9yKHZhciBjLGE9ZS5zbGljZSgyKSxzPTAsZj1hLmxlbmd0aDtzPGY7cysrKWlmKGM9YS5jaGFyQ29kZUF0KHMpLGM8NDh8fGM+aSlyZXR1cm4gTmFOO3JldHVybiBwYXJzZUludChhLHIpfX1yZXR1cm4rZX07aWYoIXYoXCIgMG8xXCIpfHwhdihcIjBiMVwiKXx8dihcIisweDFcIikpe3Y9ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aDwxPzA6dCxuPXRoaXM7cmV0dXJuIG4gaW5zdGFuY2VvZiB2JiYoYj9hKChmdW5jdGlvbigpe3kudmFsdWVPZi5jYWxsKG4pfSkpOm8obikhPWgpP2MobmV3IGQobShlKSksbix2KTptKGUpfTtmb3IodmFyIHgsdz1uKFwiOWUxZVwiKT9zKGQpOlwiTUFYX1ZBTFVFLE1JTl9WQUxVRSxOYU4sTkVHQVRJVkVfSU5GSU5JVFksUE9TSVRJVkVfSU5GSU5JVFksRVBTSUxPTixpc0Zpbml0ZSxpc0ludGVnZXIsaXNOYU4saXNTYWZlSW50ZWdlcixNQVhfU0FGRV9JTlRFR0VSLE1JTl9TQUZFX0lOVEVHRVIscGFyc2VGbG9hdCxwYXJzZUludCxpc0ludGVnZXJcIi5zcGxpdChcIixcIiksXz0wO3cubGVuZ3RoPl87XysrKWkoZCx4PXdbX10pJiYhaSh2LHgpJiZsKHYseCxmKGQseCkpO3YucHJvdG90eXBlPXkseS5jb25zdHJ1Y3Rvcj12LG4oXCIyYWJhXCIpKHIsaCx2KX19LGM2OWE6ZnVuY3Rpb24odCxlLG4pe3QuZXhwb3J0cz0hbihcIjllMWVcIikmJiFuKFwiNzllNVwiKSgoZnVuY3Rpb24oKXtyZXR1cm4gNyE9T2JqZWN0LmRlZmluZVByb3BlcnR5KG4oXCIyMzBlXCIpKFwiZGl2XCIpLFwiYVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSkpfSxjOGJiOmZ1bmN0aW9uKHQsZSxuKXt0LmV4cG9ydHM9bihcIjU0YTFcIil9LGNhNWE6ZnVuY3Rpb24odCxlKXt2YXIgbj0wLHI9TWF0aC5yYW5kb20oKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuXCJTeW1ib2woXCIuY29uY2F0KHZvaWQgMD09PXQ/XCJcIjp0LFwiKV9cIiwoKytuK3IpLnRvU3RyaW5nKDM2KSl9fSxjYWRmOmZ1bmN0aW9uKHQsZSxuKXtcInVzZSBzdHJpY3RcIjt2YXIgcj1uKFwiOWM2Y1wiKSxpPW4oXCJkNTNiXCIpLG89bihcIjg0ZjJcIiksYz1uKFwiNjgyMVwiKTt0LmV4cG9ydHM9bihcIjAxZjlcIikoQXJyYXksXCJBcnJheVwiLChmdW5jdGlvbih0LGUpe3RoaXMuX3Q9Yyh0KSx0aGlzLl9pPTAsdGhpcy5faz1lfSksKGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fdCxlPXRoaXMuX2ssbj10aGlzLl9pKys7cmV0dXJuIXR8fG4+PXQubGVuZ3RoPyh0aGlzLl90PXZvaWQgMCxpKDEpKTppKDAsXCJrZXlzXCI9PWU/bjpcInZhbHVlc1wiPT1lP3Rbbl06W24sdFtuXV0pfSksXCJ2YWx1ZXNcIiksby5Bcmd1bWVudHM9by5BcnJheSxyKFwia2V5c1wiKSxyKFwidmFsdWVzXCIpLHIoXCJlbnRyaWVzXCIpfSxjYjdjOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKFwiZDNmNFwiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoIXIodCkpdGhyb3cgVHlwZUVycm9yKHQrXCIgaXMgbm90IGFuIG9iamVjdCFcIik7cmV0dXJuIHR9fSxjY2I5OmZ1bmN0aW9uKHQsZSxuKXtlLmY9bihcIjUxNjhcIil9LGNkMWM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oXCJlODUzXCIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcocih0KSkoZSl9fSxjZDc4OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKFwiZTRhZVwiKSxpPW4oXCJmNzcyXCIpLG89bihcIjY1NmVcIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYocih0KSxpKGUpJiZlLmNvbnN0cnVjdG9yPT09dClyZXR1cm4gZTt2YXIgbj1vLmYodCksYz1uLnJlc29sdmU7cmV0dXJuIGMoZSksbi5wcm9taXNlfX0sY2UxMDpmdW5jdGlvbih0LGUsbil7dmFyIHI9bihcIjY5YThcIiksaT1uKFwiNjgyMVwiKSxvPW4oXCJjMzY2XCIpKCExKSxjPW4oXCI2MTNiXCIpKFwiSUVfUFJPVE9cIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG4sdT1pKHQpLGE9MCxzPVtdO2ZvcihuIGluIHUpbiE9YyYmcih1LG4pJiZzLnB1c2gobik7d2hpbGUoZS5sZW5ndGg+YSlyKHUsbj1lW2ErK10pJiYofm8ocyxuKXx8cy5wdXNoKG4pKTtyZXR1cm4gc319LGQyYzg6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oXCJhYWUzXCIpLGk9bihcImJlMTNcIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtpZihyKGUpKXRocm93IFR5cGVFcnJvcihcIlN0cmluZyNcIituK1wiIGRvZXNuJ3QgYWNjZXB0IHJlZ2V4IVwiKTtyZXR1cm4gU3RyaW5nKGkodCkpfX0sZDJkNTpmdW5jdGlvbih0LGUsbil7bihcIjE2NTRcIiksbihcIjU0OWJcIiksdC5leHBvcnRzPW4oXCI1ODRhXCIpLkFycmF5LmZyb219LGQzZjQ6ZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuXCJvYmplY3RcIj09PXR5cGVvZiB0P251bGwhPT10OlwiZnVuY3Rpb25cIj09PXR5cGVvZiB0fX0sZDUzYjpmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybnt2YWx1ZTplLGRvbmU6ISF0fX19LGQ4NjQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oXCI3OWFhXCIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7aWYocih0KSx2b2lkIDA9PT1lKXJldHVybiB0O3N3aXRjaChuKXtjYXNlIDE6cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB0LmNhbGwoZSxuKX07Y2FzZSAyOnJldHVybiBmdW5jdGlvbihuLHIpe3JldHVybiB0LmNhbGwoZSxuLHIpfTtjYXNlIDM6cmV0dXJuIGZ1bmN0aW9uKG4scixpKXtyZXR1cm4gdC5jYWxsKGUsbixyLGkpfX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdC5hcHBseShlLGFyZ3VtZW50cyl9fX0sZDhkNjpmdW5jdGlvbih0LGUsbil7bihcIjE2NTRcIiksbihcIjZjMWNcIiksdC5leHBvcnRzPW4oXCJjY2I5XCIpLmYoXCJpdGVyYXRvclwiKX0sZDhlODpmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0KXRocm93IFR5cGVFcnJvcih0K1wiIGlzIG5vdCBhIGZ1bmN0aW9uIVwiKTtyZXR1cm4gdH19LGQ5ZjY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oXCJlNGFlXCIpLGk9bihcIjc5NGJcIiksbz1uKFwiMWJjM1wiKSxjPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTtlLmY9bihcIjhlNjBcIik/T2JqZWN0LmRlZmluZVByb3BlcnR5OmZ1bmN0aW9uKHQsZSxuKXtpZihyKHQpLGU9byhlLCEwKSxyKG4pLGkpdHJ5e3JldHVybiBjKHQsZSxuKX1jYXRjaCh1KXt9aWYoXCJnZXRcImluIG58fFwic2V0XCJpbiBuKXRocm93IFR5cGVFcnJvcihcIkFjY2Vzc29ycyBub3Qgc3VwcG9ydGVkIVwiKTtyZXR1cm5cInZhbHVlXCJpbiBuJiYodFtlXT1uLnZhbHVlKSx0fX0sZGJkYjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bihcIjU4NGFcIiksaT1uKFwiZTUzZFwiKSxvPVwiX19jb3JlLWpzX3NoYXJlZF9fXCIsYz1pW29dfHwoaVtvXT17fSk7KHQuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBjW3RdfHwoY1t0XT12b2lkIDAhPT1lP2U6e30pfSkoXCJ2ZXJzaW9uc1wiLFtdKS5wdXNoKHt2ZXJzaW9uOnIudmVyc2lvbixtb2RlOm4oXCJiOGUzXCIpP1wicHVyZVwiOlwiZ2xvYmFsXCIsY29weXJpZ2h0OlwiwqkgMjAxOSBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KVwifSl9LGRjYmM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oXCIyYWJhXCIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7Zm9yKHZhciBpIGluIGUpcih0LGksZVtpXSxuKTtyZXR1cm4gdH19LGUxMWU6ZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9XCJjb25zdHJ1Y3RvcixoYXNPd25Qcm9wZXJ0eSxpc1Byb3RvdHlwZU9mLHByb3BlcnR5SXNFbnVtZXJhYmxlLHRvTG9jYWxlU3RyaW5nLHRvU3RyaW5nLHZhbHVlT2ZcIi5zcGxpdChcIixcIil9LGU0YWU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oXCJmNzcyXCIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighcih0KSl0aHJvdyBUeXBlRXJyb3IodCtcIiBpcyBub3QgYW4gb2JqZWN0IVwiKTtyZXR1cm4gdH19LGU1M2Q6ZnVuY3Rpb24odCxlKXt2YXIgbj10LmV4cG9ydHM9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdyYmd2luZG93Lk1hdGg9PU1hdGg/d2luZG93OlwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmJiZzZWxmLk1hdGg9PU1hdGg/c2VsZjpGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7XCJudW1iZXJcIj09dHlwZW9mIF9fZyYmKF9fZz1uKX0sZTZmMzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bihcIjA3ZTNcIiksaT1uKFwiMzZjM1wiKSxvPW4oXCI1YjRlXCIpKCExKSxjPW4oXCI1NTU5XCIpKFwiSUVfUFJPVE9cIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG4sdT1pKHQpLGE9MCxzPVtdO2ZvcihuIGluIHUpbiE9YyYmcih1LG4pJiZzLnB1c2gobik7d2hpbGUoZS5sZW5ndGg+YSlyKHUsbj1lW2ErK10pJiYofm8ocyxuKXx8cy5wdXNoKG4pKTtyZXR1cm4gc319LGU4NTM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oXCJkM2Y0XCIpLGk9bihcIjExNjlcIiksbz1uKFwiMmI0Y1wiKShcInNwZWNpZXNcIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiBpKHQpJiYoZT10LmNvbnN0cnVjdG9yLFwiZnVuY3Rpb25cIiE9dHlwZW9mIGV8fGUhPT1BcnJheSYmIWkoZS5wcm90b3R5cGUpfHwoZT12b2lkIDApLHIoZSkmJihlPWVbb10sbnVsbD09PWUmJihlPXZvaWQgMCkpKSx2b2lkIDA9PT1lP0FycmF5OmV9fSxlYmQ2OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKFwiY2I3Y1wiKSxpPW4oXCJkOGU4XCIpLG89bihcIjJiNGNcIikoXCJzcGVjaWVzXCIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuLGM9cih0KS5jb25zdHJ1Y3RvcjtyZXR1cm4gdm9pZCAwPT09Y3x8dm9pZCAwPT0obj1yKGMpW29dKT9lOmkobil9fSxlYmZkOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKFwiNjJhMFwiKShcIm1ldGFcIiksaT1uKFwiZjc3MlwiKSxvPW4oXCIwN2UzXCIpLGM9bihcImQ5ZjZcIikuZix1PTAsYT1PYmplY3QuaXNFeHRlbnNpYmxlfHxmdW5jdGlvbigpe3JldHVybiEwfSxzPSFuKFwiMjk0Y1wiKSgoZnVuY3Rpb24oKXtyZXR1cm4gYShPYmplY3QucHJldmVudEV4dGVuc2lvbnMoe30pKX0pKSxmPWZ1bmN0aW9uKHQpe2ModCxyLHt2YWx1ZTp7aTpcIk9cIisgKyt1LHc6e319fSl9LGw9ZnVuY3Rpb24odCxlKXtpZighaSh0KSlyZXR1cm5cInN5bWJvbFwiPT10eXBlb2YgdD90OihcInN0cmluZ1wiPT10eXBlb2YgdD9cIlNcIjpcIlBcIikrdDtpZighbyh0LHIpKXtpZighYSh0KSlyZXR1cm5cIkZcIjtpZighZSlyZXR1cm5cIkVcIjtmKHQpfXJldHVybiB0W3JdLml9LHA9ZnVuY3Rpb24odCxlKXtpZighbyh0LHIpKXtpZighYSh0KSlyZXR1cm4hMDtpZighZSlyZXR1cm4hMTtmKHQpfXJldHVybiB0W3JdLnd9LGg9ZnVuY3Rpb24odCl7cmV0dXJuIHMmJnYuTkVFRCYmYSh0KSYmIW8odCxyKSYmZih0KSx0fSx2PXQuZXhwb3J0cz17S0VZOnIsTkVFRDohMSxmYXN0S2V5OmwsZ2V0V2VhazpwLG9uRnJlZXplOmh9fSxlY2YwOmZ1bmN0aW9uKHQsZSxuKXt9LGYxYWU6ZnVuY3Rpb24odCxlLG4pe1widXNlIHN0cmljdFwiO3ZhciByPW4oXCI4NmNjXCIpLGk9bihcIjQ2MzBcIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtlIGluIHQ/ci5mKHQsZSxpKDAsbikpOnRbZV09bn19LGYyMDE6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oXCJlNGFlXCIpLGk9bihcIjc5YWFcIiksbz1uKFwiNTE2OFwiKShcInNwZWNpZXNcIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG4sYz1yKHQpLmNvbnN0cnVjdG9yO3JldHVybiB2b2lkIDA9PT1jfHx2b2lkIDA9PShuPXIoYylbb10pP2U6aShuKX19LGY0MTA6ZnVuY3Rpb24odCxlLG4pe24oXCIxYWY2XCIpLHQuZXhwb3J0cz1uKFwiNTg0YVwiKS5BcnJheS5pc0FycmF5fSxmNjA1OmZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuLHIpe2lmKCEodCBpbnN0YW5jZW9mIGUpfHx2b2lkIDAhPT1yJiZyIGluIHQpdGhyb3cgVHlwZUVycm9yKG4rXCI6IGluY29ycmVjdCBpbnZvY2F0aW9uIVwiKTtyZXR1cm4gdH19LGY2ZmQ6ZnVuY3Rpb24odCxlKXsoZnVuY3Rpb24odCl7dmFyIGU9XCJjdXJyZW50U2NyaXB0XCIsbj10LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwic2NyaXB0XCIpO2UgaW4gdHx8T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSx7Z2V0OmZ1bmN0aW9uKCl7dHJ5e3Rocm93IG5ldyBFcnJvcn1jYXRjaChyKXt2YXIgdCxlPSgvLiphdCBbXlxcKF0qXFwoKC4qKTouKzouK1xcKSQvZ2kuZXhlYyhyLnN0YWNrKXx8WyExXSlbMV07Zm9yKHQgaW4gbilpZihuW3RdLnNyYz09ZXx8XCJpbnRlcmFjdGl2ZVwiPT1uW3RdLnJlYWR5U3RhdGUpcmV0dXJuIG5bdF07cmV0dXJuIG51bGx9fX0pfSkoZG9jdW1lbnQpfSxmNzUxOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKFwiNWNhMVwiKTtyKHIuUytyLkYsXCJPYmplY3RcIix7YXNzaWduOm4oXCI3MzMzXCIpfSl9LGY3NzI6ZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuXCJvYmplY3RcIj09PXR5cGVvZiB0P251bGwhPT10OlwiZnVuY3Rpb25cIj09PXR5cGVvZiB0fX0sZjkyMTpmdW5jdGlvbih0LGUsbil7bihcIjAxNGJcIiksbihcImMyMDdcIiksbihcIjY5ZDNcIiksbihcIjc2NWRcIiksdC5leHBvcnRzPW4oXCI1ODRhXCIpLlN5bWJvbH0sZmE1YjpmdW5jdGlvbih0LGUsbil7dC5leHBvcnRzPW4oXCI1NTM3XCIpKFwibmF0aXZlLWZ1bmN0aW9uLXRvLXN0cmluZ1wiLEZ1bmN0aW9uLnRvU3RyaW5nKX0sZmFiMjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bihcIjc3MjZcIikuZG9jdW1lbnQ7dC5leHBvcnRzPXImJnIuZG9jdW1lbnRFbGVtZW50fSxmYjE1OmZ1bmN0aW9uKHQsZSxuKXtcInVzZSBzdHJpY3RcIjt2YXIgcjsobi5yKGUpLFwidW5kZWZpbmVkXCIhPT10eXBlb2Ygd2luZG93KSYmKG4oXCJmNmZkXCIpLChyPXdpbmRvdy5kb2N1bWVudC5jdXJyZW50U2NyaXB0KSYmKHI9ci5zcmMubWF0Y2goLyguK1xcLylbXi9dK1xcLmpzKFxcPy4qKT8kLykpJiYobi5wPXJbMV0pKTtuKFwiN2Y3ZlwiKTt2YXIgaT1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10LiRjcmVhdGVFbGVtZW50LG49dC5fc2VsZi5fY3x8ZTtyZXR1cm4gbihcIkxheW91dFwiLHtyZWY6XCJsYXlvdXRcIixzdGF0aWNDbGFzczpcInYtc2VsZWN0XCIsY2xhc3M6dC5jbGFzc2VzLGF0dHJzOnt0YWJpbmRleDpcIi0xXCJ9LG5hdGl2ZU9uOnttb3VzZXVwOmZ1bmN0aW9uKGUpe3JldHVybiFlLnR5cGUuaW5kZXhPZihcImtleVwiKSYmdC5fayhlLmtleUNvZGUsXCJsZWZ0XCIsMzcsZS5rZXksW1wiTGVmdFwiLFwiQXJyb3dMZWZ0XCJdKT9udWxsOlwiYnV0dG9uXCJpbiBlJiYwIT09ZS5idXR0b24/bnVsbDp2b2lkKHQuaXNNdWx0aXBsZSYmdC4kcmVmcy5pbnAuZm9jdXMoKSl9LGZvY3VzaW46ZnVuY3Rpb24oZSl7dC4kcmVmcy5pbnAuZm9jdXMoKSx0LmNoZWNrRm9jdXNfKCl9LGZvY3Vzb3V0OmZ1bmN0aW9uKGUpe3JldHVybiB0LmNoZWNrRm9jdXNfKCl9LGtleWRvd246W2Z1bmN0aW9uKGUpe3JldHVybiFlLnR5cGUuaW5kZXhPZihcImtleVwiKSYmdC5fayhlLmtleUNvZGUsXCJkb3duXCIsNDAsZS5rZXksW1wiRG93blwiLFwiQXJyb3dEb3duXCJdKT9udWxsOihlLnByZXZlbnREZWZhdWx0KCksdC5uZXh0KCkpfSxmdW5jdGlvbihlKXtyZXR1cm4hZS50eXBlLmluZGV4T2YoXCJrZXlcIikmJnQuX2soZS5rZXlDb2RlLFwidXBcIiwzOCxlLmtleSxbXCJVcFwiLFwiQXJyb3dVcFwiXSk/bnVsbDooZS5wcmV2ZW50RGVmYXVsdCgpLHQubmV4dCghMCkpfSxmdW5jdGlvbihlKXtyZXR1cm4hZS50eXBlLmluZGV4T2YoXCJrZXlcIikmJnQuX2soZS5rZXlDb2RlLFwiaG9tZVwiLHZvaWQgMCxlLmtleSx2b2lkIDApP251bGw6KGUucHJldmVudERlZmF1bHQoKSx0Lm1hcmsoMCkpfSxmdW5jdGlvbihlKXtyZXR1cm4hZS50eXBlLmluZGV4T2YoXCJrZXlcIikmJnQuX2soZS5rZXlDb2RlLFwiZW5kXCIsdm9pZCAwLGUua2V5LHZvaWQgMCk/bnVsbDooZS5wcmV2ZW50RGVmYXVsdCgpLHQubWFyaygxLzApKX0sZnVuY3Rpb24oZSl7aWYoIWUudHlwZS5pbmRleE9mKFwia2V5XCIpJiZ0Ll9rKGUua2V5Q29kZSxcImVzY1wiLDI3LGUua2V5LFtcIkVzY1wiLFwiRXNjYXBlXCJdKSlyZXR1cm4gbnVsbDtlLnN0b3BQcm9wYWdhdGlvbigpLH50Lm1hcmtlZD90Lm1hcmsoKTp0LmNsb3NlKCl9LGZ1bmN0aW9uKGUpe3JldHVybiFlLnR5cGUuaW5kZXhPZihcImtleVwiKSYmdC5fayhlLmtleUNvZGUsXCJkZWxldGVcIixbOCw0Nl0sZS5rZXksW1wiQmFja3NwYWNlXCIsXCJEZWxldGVcIixcIkRlbFwiXSk/bnVsbDp0Lm9uS2V5RGVsKCl9LGZ1bmN0aW9uKGUpe3JldHVybiFlLnR5cGUuaW5kZXhPZihcImtleVwiKSYmdC5fayhlLmtleUNvZGUsXCJlbnRlclwiLDEzLGUua2V5LFwiRW50ZXJcIik/bnVsbDp0Lm9uS2V5RG93bkVudGVyKGUpfV0sbW91c2Vkb3duOmZ1bmN0aW9uKGUpe3JldHVybiFlLnR5cGUuaW5kZXhPZihcImtleVwiKSYmdC5fayhlLmtleUNvZGUsXCJsZWZ0XCIsMzcsZS5rZXksW1wiTGVmdFwiLFwiQXJyb3dMZWZ0XCJdKT9udWxsOlwiYnV0dG9uXCJpbiBlJiYwIT09ZS5idXR0b24/bnVsbDp0Lm9wZW4oKX19LHNjb3BlZFNsb3RzOnQuX3UoW3trZXk6XCJzZWxlY3RlZFwiLGZuOmZ1bmN0aW9uKCl7cmV0dXJuIHQuX2wodC52YWx1ZV8sKGZ1bmN0aW9uKGUscil7cmV0dXJuIG4oXCJTZWxlY3RlZFwiLHQuX2Ioe2tleTplLmluZGV4LHN0YXRpY0NsYXNzOlwidi1zZWxlY3QtYnRuIHYtc2VsZWN0LXNlbGVjdGVkXCIsbmF0aXZlT246e21vdXNldXA6ZnVuY3Rpb24oZSl7cmV0dXJuIWUudHlwZS5pbmRleE9mKFwia2V5XCIpJiZ0Ll9rKGUua2V5Q29kZSxcImxlZnRcIiwzNyxlLmtleSxbXCJMZWZ0XCIsXCJBcnJvd0xlZnRcIl0pP251bGw6XCJidXR0b25cImluIGUmJjAhPT1lLmJ1dHRvbj9udWxsOnQuZGVzZWxlY3Qocil9fX0sXCJTZWxlY3RlZFwiLHtvcHRpb246ZSxzdGF0ZTp0LnN0YXRlLGluZGV4OnIsc2VsZWN0OnRoaXN9LCExKSxbdC5fbChbXCJib3RoXCIsXCJzZWxlY3RlZFwiXSwoZnVuY3Rpb24obil7cmV0dXJuIHQuX3QobixudWxsLG51bGwse29wdGlvbjplLHN0YXRlOnQuc3RhdGUsaW5kZXg6cixzZWxlY3Q6dGhpc30pfSkpXSwyKX0pKX0scHJveHk6ITB9LHtrZXk6XCJpbnB1dFwiLGZuOmZ1bmN0aW9uKCl7cmV0dXJuW24oXCJpbnB1dFwiLHQuX2Ioe2RpcmVjdGl2ZXM6W3tuYW1lOlwibW9kZWxcIixyYXdOYW1lOlwidi1tb2RlbC50cmltXCIsdmFsdWU6dC5xLGV4cHJlc3Npb246XCJxXCIsbW9kaWZpZXJzOnt0cmltOiEwfX1dLHJlZjpcImlucFwiLHN0YXRpY0NsYXNzOlwidi1zZWxlY3QtaW5wXCIsYXR0cnM6e3BsYWNlaG9sZGVyOnQucGxhY2Vob2xkZXJ9LGRvbVByb3BzOnt2YWx1ZTp0LnF9LG9uOntmb2N1czpmdW5jdGlvbihlKXt0Lm9wZW4oKS5zZWFyY2goKX0sa2V5ZG93bjp0Lm9uS2V5RG93bixpbnB1dDpbZnVuY3Rpb24oZSl7ZS50YXJnZXQuY29tcG9zaW5nfHwodC5xPWUudGFyZ2V0LnZhbHVlLnRyaW0oKSl9LGZ1bmN0aW9uKGUpe3JldHVybiB0Lm9wZW4oKX1dLGJsdXI6ZnVuY3Rpb24oZSl7cmV0dXJuIHQuJGZvcmNlVXBkYXRlKCl9fX0sXCJpbnB1dFwiLHQuJGF0dHJzLCExKSldfSxwcm94eTohMH0se2tleTpcImFjdGlvbnNcIixmbjpmdW5jdGlvbigpe3JldHVybltuKFwiYnV0dG9uXCIse3N0YXRpY0NsYXNzOlwidi1zZWxlY3QtYnRuLWNsZWFyXCIsYXR0cnM6e3R5cGU6XCJidXR0b25cIix0YWJpbmRleDpcIi0xXCJ9LG9uOnttb3VzZXVwOmZ1bmN0aW9uKGUpe3JldHVybiB0LmNsZWFyKCl9fX0pLG4oXCJidXR0b25cIix7c3RhdGljQ2xhc3M6XCJ2LXNlbGVjdC1idG4tZGRcIixhdHRyczp7dHlwZTpcImJ1dHRvblwiLHRhYmluZGV4OlwiLTFcIn0sb246e2NsaWNrOmZ1bmN0aW9uKGUpe3JldHVybiB0Lm9wZW4oKX19fSksbihcImJ1dHRvblwiLHtzdGF0aWNDbGFzczpcInYtc2VsZWN0LWJ0bi1zcGlubmVyXCIsYXR0cnM6e3R5cGU6XCJidXR0b25cIix0YWJpbmRleDpcIi0xXCJ9fSxbdC5fdChcInNwaW5uZXJcIildLDIpXX0scHJveHk6ITB9LHtrZXk6XCJvcHRpb25zXCIsZm46ZnVuY3Rpb24oKXtyZXR1cm4gdC5fbCh0LmZpbHRlcmVkLChmdW5jdGlvbihlLHIpe3JldHVybiBuKFwiT3B0aW9uXCIsdC5fYih7a2V5OmUuaW5kZXgscmVmOlwib3B0aW9uXCIrcixyZWZJbkZvcjohMCxzdGF0aWNDbGFzczpcInYtc2VsZWN0LW9wdGlvblwiLG5hdGl2ZU9uOnttb3VzZXVwOmZ1bmN0aW9uKG4pe3JldHVybiFuLnR5cGUuaW5kZXhPZihcImtleVwiKSYmdC5fayhuLmtleUNvZGUsXCJsZWZ0XCIsMzcsbi5rZXksW1wiTGVmdFwiLFwiQXJyb3dMZWZ0XCJdKT9udWxsOlwiYnV0dG9uXCJpbiBuJiYwIT09bi5idXR0b24/bnVsbDp0LnNlbGVjdChlKX19fSxcIk9wdGlvblwiLHtvcHRpb246ZSxzdGF0ZTp0LnN0YXRlLGluZGV4OnIsc2VsZWN0OnRoaXN9LCExKSxbdC5fbChbXCJib3RoXCIsXCJvcHRpb25cIl0sKGZ1bmN0aW9uKG4pe3JldHVybiB0Ll90KG4sbnVsbCxudWxsLHtvcHRpb246ZSxzdGF0ZTp0LnN0YXRlLGluZGV4OnIsc2VsZWN0OnRoaXN9KX0pKV0sMil9KSl9LHByb3h5OiEwfSx0Ll9sKHQubGF5b3V0U2xvdHMsKGZ1bmN0aW9uKGUpe3JldHVybntrZXk6ZSxmbjpmdW5jdGlvbihuKXtyZXR1cm5bdC5fdChlLG51bGwsbnVsbCxPYmplY3QuYXNzaWduKHt9LHtzdGF0ZTp0LnN0YXRlLHNlbGVjdDp0aGlzfSxuKSldfX19KSldLG51bGwsITApfSl9LG89W10sYz0obihcIjhlNmVcIiksbihcImE3NDVcIikpLHU9bi5uKGMpO2Z1bmN0aW9uIGEodCl7aWYodSgpKHQpKXtmb3IodmFyIGU9MCxuPW5ldyBBcnJheSh0Lmxlbmd0aCk7ZTx0Lmxlbmd0aDtlKyspbltlXT10W2VdO3JldHVybiBufX12YXIgcz1uKFwiNzc0ZVwiKSxmPW4ubihzKSxsPW4oXCJjOGJiXCIpLHA9bi5uKGwpO2Z1bmN0aW9uIGgodCl7aWYocCgpKE9iamVjdCh0KSl8fFwiW29iamVjdCBBcmd1bWVudHNdXCI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkpcmV0dXJuIGYoKSh0KX1mdW5jdGlvbiB2KCl7dGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlXCIpfWZ1bmN0aW9uIGQodCl7cmV0dXJuIGEodCl8fGgodCl8fHYoKX1uKFwiMmZkYlwiKSxuKFwiNzUxNFwiKSxuKFwiNjc2MlwiKSxuKFwiNDU2ZFwiKSxuKFwiMjBkNlwiKSxuKFwiMzg2ZFwiKSxuKFwiMzg0NlwiKTt2YXIgeT1uKFwiODVmMlwiKSxiPW4ubih5KTtmdW5jdGlvbiBnKHQsZSxuKXtyZXR1cm4gZSBpbiB0P2IoKSh0LGUse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTp0W2VdPW4sdH1uKFwiYWM2YVwiKSxuKFwiODYxNVwiKSxuKFwiMjhhNVwiKSxuKFwiYzVmNlwiKSxuKFwiYTQ4MVwiKSxuKFwiOTZjZlwiKTt2YXIgbT1uKFwiNzk1YlwiKSx4PW4ubihtKTtmdW5jdGlvbiB3KHQsZSxuLHIsaSxvLGMpe3RyeXt2YXIgdT10W29dKGMpLGE9dS52YWx1ZX1jYXRjaChOKXtyZXR1cm4gdm9pZCBuKE4pfXUuZG9uZT9lKGEpOnguYS5yZXNvbHZlKGEpLnRoZW4ocixpKX1mdW5jdGlvbiBfKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMsbj1hcmd1bWVudHM7cmV0dXJuIG5ldyB4LmEoKGZ1bmN0aW9uKHIsaSl7dmFyIG89dC5hcHBseShlLG4pO2Z1bmN0aW9uIGModCl7dyhvLHIsaSxjLHUsXCJuZXh0XCIsdCl9ZnVuY3Rpb24gdSh0KXt3KG8scixpLGMsdSxcInRocm93XCIsdCl9Yyh2b2lkIDApfSkpfX1uKFwiNTUxY1wiKTt2YXIgUz1uKFwiNWQ1OFwiKSxPPW4ubihTKSxrPW4oXCI2N2JiXCIpLGo9bi5uKGspO2Z1bmN0aW9uIEUodCl7cmV0dXJuIEU9XCJmdW5jdGlvblwiPT09dHlwZW9mIGouYSYmXCJzeW1ib2xcIj09PXR5cGVvZiBPLmE/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmXCJmdW5jdGlvblwiPT09dHlwZW9mIGouYSYmdC5jb25zdHJ1Y3Rvcj09PWouYSYmdCE9PWouYS5wcm90b3R5cGU/XCJzeW1ib2xcIjp0eXBlb2YgdH0sRSh0KX1mdW5jdGlvbiBQKHQpe3JldHVybiBQPVwiZnVuY3Rpb25cIj09PXR5cGVvZiBqLmEmJlwic3ltYm9sXCI9PT1FKE8uYSk/ZnVuY3Rpb24odCl7cmV0dXJuIEUodCl9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiZcImZ1bmN0aW9uXCI9PT10eXBlb2Ygai5hJiZ0LmNvbnN0cnVjdG9yPT09ai5hJiZ0IT09ai5hLnByb3RvdHlwZT9cInN5bWJvbFwiOkUodCl9LFAodCl9ZnVuY3Rpb24gQSgpe3JldHVybiBMLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBMKCl7cmV0dXJuIEw9XyhyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gdCgpe3ZhciBlLG4scj1hcmd1bWVudHM7cmV0dXJuIHJlZ2VuZXJhdG9yUnVudGltZS53cmFwKChmdW5jdGlvbih0KXt3aGlsZSgxKXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIGU9ci5sZW5ndGg+MCYmdm9pZCAwIT09clswXT9yWzBdOlwiXCIsdC5uZXh0PTMsZmV0Y2goZSk7Y2FzZSAzOmlmKG49dC5zZW50LG4ub2spe3QubmV4dD02O2JyZWFrfXJldHVybiB0LmFicnVwdChcInJldHVyblwiLFByb21pc2UucmVqZWN0KG4pKTtjYXNlIDY6cmV0dXJuIHQubmV4dD04LG4uanNvbigpO2Nhc2UgODpyZXR1cm4gdC5hYnJ1cHQoXCJyZXR1cm5cIix0LnNlbnQpO2Nhc2UgOTpjYXNlXCJlbmRcIjpyZXR1cm4gdC5zdG9wKCl9fSksdCl9KSkpLEwuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIFQodCxlLG4pe3JldHVybiBNYXRoLm1pbihNYXRoLm1heCh0LGUpLG4pfWZ1bmN0aW9uIE0odCxlLG4pe3JldHVybiB0PVYodCksYXJndW1lbnRzLmxlbmd0aD4yP0ModC5zbGljZSgwLC0xKSxlLHt9KVt0W3QubGVuZ3RoLTFdXT1uOkModCxlKX1mdW5jdGlvbiBDKHQsZSxuKXt0PVYodCk7dmFyIHI9LTEsaT10Lmxlbmd0aCxvPWFyZ3VtZW50cy5sZW5ndGg+Mjt3aGlsZSgrK3I8aSl7dmFyIGM9ZTtpZihlPWVbdFtyXV0sXCJvYmplY3RcIiE9UChlKSl7aWYoIW8pcmV0dXJuIHI9PWktMT9lOnZvaWQgMDtlPWNbdFtyXV09cjxpLTE/e306UihjW3Rbcl1dKT9uOmNbdFtyXV19fXJldHVybiBlfWZ1bmN0aW9uIEYodCl7dD1WKHQpO2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLG49bmV3IEFycmF5KGU+MT9lLTE6MCkscj0xO3I8ZTtyKyspbltyLTFdPWFyZ3VtZW50c1tyXTtyZXR1cm4gTS5iaW5kLmFwcGx5KE0sW251bGwsdF0uY29uY2F0KG4pKX1mdW5jdGlvbiBJKHQpe3JldHVybiFbdm9pZCAwLFwiXCIsbnVsbCxOYU5dLmluY2x1ZGVzKHQpfWZ1bmN0aW9uIFIodCl7cmV0dXJuIHQhPT1PYmplY3QodCl9ZnVuY3Rpb24gTigpe3ZhciB0Oyh0PWNvbnNvbGUpLmVycm9yLmFwcGx5KHQsW1wiW0BkZXNpc2xhdnNkL3Z1ZS1zZWxlY3RdOiBcIl0uY29uY2F0KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpKX1mdW5jdGlvbiBxKHQpe3JldHVyblwiW0BkZXNpc2xhdnNkL3Z1ZS1zZWxlY3RdOiBcIit0fWZ1bmN0aW9uIEQodCxlLG4pe3ZhciByO2Z1bmN0aW9uIGkoKXtmb3IodmFyIGk9dGhpcyxvPWFyZ3VtZW50cy5sZW5ndGgsYz1uZXcgQXJyYXkobyksdT0wO3U8bzt1KyspY1t1XT1hcmd1bWVudHNbdV07cmV0dXJuIGNsZWFyVGltZW91dChyKSxyPXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkoaSxjKX0pLHQpLG59cmV0dXJuIHQ/aTplfXZhciAkPWZ1bmN0aW9uKHQpe3JldHVybiB0fTtmdW5jdGlvbiBHKHQpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLG49bmV3IEFycmF5KGU+MT9lLTE6MCkscj0xO3I8ZTtyKyspbltyLTFdPWFyZ3VtZW50c1tyXTtyZXR1cm4oRWxlbWVudC5wcm90b3R5cGUubWF0Y2hlc3x8RWxlbWVudC5wcm90b3R5cGUubXNNYXRjaGVzU2VsZWN0b3J8fEVsZW1lbnQucHJvdG90eXBlLndlYmtpdE1hdGNoZXNTZWxlY3RvcikuYXBwbHkodCxuKX1mdW5jdGlvbiBWKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP3Q6dC5zcGxpdChcIi5cIikuZmlsdGVyKEJvb2xlYW4pfW4oXCJmNzUxXCIpO3ZhciBCLFUsSz17bmFtZTpcIk9wdGlvblwiLHByb3BzOntvcHRpb246e30saW5kZXg6e30sc3RhdGU6e30sdGFnOntkZWZhdWx0Olwic3BhblwifX0sY29tcHV0ZWQ6e2NsYXNzZXM6ZnVuY3Rpb24oKXtyZXR1cm57XCItbWFya2VkXCI6dGhpcy5zdGF0ZS5tYXJrZWQ9PXRoaXMub3B0aW9uLFwiLXNlbGVjdGVkXCI6dGhpcy5zdGF0ZS5zZWxlY3RlZC5pbmNsdWRlcyh0aGlzLm9wdGlvbil9fX0scmVuZGVyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY2xhc3NlcyxuPXRoaXMudGFnLHI9dGhpcy5vcHRpb24saT10aGlzLiRzbG90cy5kZWZhdWx0LG89aSYmMT09aS5sZW5ndGgmJmlbMF07cmV0dXJuIG8mJm8udGFnPyhvLmRhdGE9by5kYXRhfHx7fSxvLmRhdGEuY2xhc3M9T2JqZWN0LmFzc2lnbih7fSxvLmRhdGEuY2xhc3MsZSksbyk6dChuLHtjbGFzczplfSxpfHxbci5sYWJlbF0pfX0sSD1LO2Z1bmN0aW9uIFcodCxlLG4scixpLG8sYyx1KXt2YXIgYSxzPVwiZnVuY3Rpb25cIj09PXR5cGVvZiB0P3Qub3B0aW9uczp0O2lmKGUmJihzLnJlbmRlcj1lLHMuc3RhdGljUmVuZGVyRm5zPW4scy5fY29tcGlsZWQ9ITApLHImJihzLmZ1bmN0aW9uYWw9ITApLG8mJihzLl9zY29wZUlkPVwiZGF0YS12LVwiK28pLGM/KGE9ZnVuY3Rpb24odCl7dD10fHx0aGlzLiR2bm9kZSYmdGhpcy4kdm5vZGUuc3NyQ29udGV4dHx8dGhpcy5wYXJlbnQmJnRoaXMucGFyZW50LiR2bm9kZSYmdGhpcy5wYXJlbnQuJHZub2RlLnNzckNvbnRleHQsdHx8XCJ1bmRlZmluZWRcIj09PXR5cGVvZiBfX1ZVRV9TU1JfQ09OVEVYVF9ffHwodD1fX1ZVRV9TU1JfQ09OVEVYVF9fKSxpJiZpLmNhbGwodGhpcyx0KSx0JiZ0Ll9yZWdpc3RlcmVkQ29tcG9uZW50cyYmdC5fcmVnaXN0ZXJlZENvbXBvbmVudHMuYWRkKGMpfSxzLl9zc3JSZWdpc3Rlcj1hKTppJiYoYT11P2Z1bmN0aW9uKCl7aS5jYWxsKHRoaXMsdGhpcy4kcm9vdC4kb3B0aW9ucy5zaGFkb3dSb290KX06aSksYSlpZihzLmZ1bmN0aW9uYWwpe3MuX2luamVjdFN0eWxlcz1hO3ZhciBmPXMucmVuZGVyO3MucmVuZGVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGEuY2FsbChlKSxmKHQsZSl9fWVsc2V7dmFyIGw9cy5iZWZvcmVDcmVhdGU7cy5iZWZvcmVDcmVhdGU9bD9bXS5jb25jYXQobCxhKTpbYV19cmV0dXJue2V4cG9ydHM6dCxvcHRpb25zOnN9fXZhciBKLFksej1XKEgsQixVLCExLG51bGwsbnVsbCxudWxsKSxYPXouZXhwb3J0cyxRPXttaXhpbnM6W1hdfSxaPVEsdHQ9VyhaLEosWSwhMSxudWxsLG51bGwsbnVsbCksZXQ9dHQuZXhwb3J0cyxudD1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10LiRjcmVhdGVFbGVtZW50LG49dC5fc2VsZi5fY3x8ZTtyZXR1cm4gbihcImRpdlwiLFtuKFwiZGl2XCIse3N0YXRpY0NsYXNzOlwidi1zZWxlY3QtYmFyXCJ9LFt0Ll90KFwic2VsZWN0ZWRcIiksbihcImRpdlwiLHtzdGF0aWNDbGFzczpcInYtc2VsZWN0LWlucC1ncm91cFwifSxbdC5fdChcImlucHV0XCIpLHQuX3QoXCJhY3Rpb25zXCIpXSwyKV0sMiksbihcImRpdlwiLHtyZWY6XCJsaXN0XCIsc3RhdGljQ2xhc3M6XCJ2LXNlbGVjdC1saXN0XCJ9LFt0Ll90KFwiYmVmb3JlbGlzdFwiKSx0Ll90KFwib3B0aW9uc1wiKSx0Ll90KFwiYWZ0ZXJsaXN0XCIpXSwyKV0pfSxydD1bXSxpdD17aW5qZWN0OltcInNlbGVjdFwiXX0sb3Q9aXQsY3Q9KG4oXCI2M2M2XCIpLFcob3QsbnQscnQsITEsbnVsbCxudWxsLG51bGwpKSx1dD1jdC5leHBvcnRzO2Z1bmN0aW9uIGF0KHQsZSl7dmFyIG49T2JqZWN0LmtleXModCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KTtlJiYocj1yLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn1mdW5jdGlvbiBzdCh0KXtmb3IodmFyIGU9MTtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbZV0/YXJndW1lbnRzW2VdOnt9O2UlMj9hdChuLCEwKS5mb3JFYWNoKChmdW5jdGlvbihlKXtnKHQsZSxuW2VdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyh0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTphdChuKS5mb3JFYWNoKChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobixlKSl9KSl9cmV0dXJuIHR9dmFyIGZ0PXtuYW1lOlwiU2VsZWN0XCIsY29tcG9uZW50czp7T3B0aW9uOlgsU2VsZWN0ZWQ6ZXQsTGF5b3V0OnV0fSxwcm92aWRlOntzZWxlY3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sc3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGF0ZX19LHByb3BzOnt2YWx1ZTp7fSxxdWVyeTpTdHJpbmcsZnJvbTp7dHlwZTpbQXJyYXksRnVuY3Rpb24sU3RyaW5nLE9iamVjdF0sZGVmYXVsdDpmdW5jdGlvbigpe3JldHVybltdfX0sYXM6W1N0cmluZyxBcnJheV0scGFyc2U6e3R5cGU6W0Z1bmN0aW9uLFN0cmluZ10sZGVmYXVsdDokfSxmZXRjaDp7dHlwZTpGdW5jdGlvbixkZWZhdWx0OmZ1bmN0aW9uKCl7dmFyIHQ9XyhyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gdChlLG4pe3ZhciByO3JldHVybiByZWdlbmVyYXRvclJ1bnRpbWUud3JhcCgoZnVuY3Rpb24odCl7d2hpbGUoMSlzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiByPW4udXJsfHxuLHQubmV4dD0zLEEoci5yZXBsYWNlKFwiJXNcIixlbmNvZGVVUklDb21wb25lbnQoZSkpKTtjYXNlIDM6cmV0dXJuIHQuYWJydXB0KFwicmV0dXJuXCIsdC5zZW50KTtjYXNlIDQ6Y2FzZVwiZW5kXCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQpfSkpKTtmdW5jdGlvbiBlKGUsbil7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiBlfSgpfSxmaWx0ZXI6e3R5cGU6W0Jvb2xlYW4sRnVuY3Rpb25dLGRlZmF1bHQ6dm9pZCAwfSxmaWx0ZXJCeTp7dHlwZTpGdW5jdGlvbixkZWZhdWx0OmZ1bmN0aW9uKHQsZSl7dmFyIG49dC5sYWJlbDtyZXR1cm5+KG4rXCJcIikudG9Mb3dlckNhc2UoKS5pbmRleE9mKGUudG9Mb3dlckNhc2UoKSl9fSxkZWJvdW5jZTp7dHlwZTpOdW1iZXIsZGVmYXVsdDoyNTB9LHRhZ2dpbmc6e3R5cGU6W0Jvb2xlYW4sRnVuY3Rpb25dfSxtdWx0aXBsZTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6dm9pZCAwfSxkeW5hbWljOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDp2b2lkIDB9LHRhZ3M6e30sdGFnS2V5czp7dHlwZTpBcnJheSxkZWZhdWx0OmZ1bmN0aW9uKCl7cmV0dXJuW119fSx2YWxpZGF0ZTp7dHlwZTpGdW5jdGlvbixkZWZhdWx0OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuJGF0dHJzO3JldHVybih0fHwhZS5oYXNPd25Qcm9wZXJ0eShcIm1pbmxlbmd0aFwiKSkmJighdGhpcy4kcmVmcy5pbnB8fEcodGhpcy4kcmVmcy5pbnAsXCI6dmFsaWRcIikpfX0sd2F0Y2hBdHRyczp7ZGVmYXVsdDpmdW5jdGlvbigpe3JldHVybltcInJlcXVpcmVkXCIsXCJkaXNhYmxlZFwiLFwicmVhZG9ubHlcIl19fSxzdGF0ZWZ1bDpCb29sZWFuLGZpbmQ6e3R5cGU6W0Z1bmN0aW9uLEJvb2xlYW5dLGRlZmF1bHQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZnJvbV8odC5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBvb3J9KSkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5sYWJlbH0pKS5qb2luKFwiLFwiKSl9fSxjbG9zZU9uU2VsZWN0Ont0eXBlOkJvb2xlYW4sZGVmYXVsdDp2b2lkIDB9LGNsZWFyT25TZWxlY3Q6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OnZvaWQgMH0sY2xlYXJPbkNsb3NlOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDp2b2lkIDB9fSxpbmhlcml0QXR0cnM6ITEsZGF0YTpmdW5jdGlvbigpe3JldHVybntxOnRoaXMucXVlcnl8fFwiXCIsbWFya2VkOi0xLHF1ZXVlOm51bGwsZmxhZ3M6e2xvYWRpbmc6ITEsZm9jdXNlZDohMSxvcGVuZWQ6ITF9LHZhbHVlXzpbXSxvcHRpb25zOltdLGFzU3BlYzp7cng6L1xccypbLDpdXFxzKi8sb3JkZXI6XCJsYWJlbDp2YWx1ZTppbmRleFwiLnNwbGl0KFwiOlwiKX0sY2hlY2tGb2N1c186RCgxMCx0aGlzLmNoZWNrRm9jdXMpfX0sY29tcHV0ZWQ6e2lzTXVsdGlwbGU6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT10aGlzLm11bHRpcGxlP3RoaXMubXVsdGlwbGU6QXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKX0saXNBc3luYzpmdW5jdGlvbigpe3JldHVybiFBcnJheS5pc0FycmF5KHRoaXMuZnJvbSl9LGlzRHluYW1pYzpmdW5jdGlvbigpe3ZhciB0PXRoaXMuZnJvbTtyZXR1cm4gdm9pZCAwIT10aGlzLmR5bmFtaWM/dGhpcy5keW5hbWljOiEoQXJyYXkuaXNBcnJheSh0KXx8XCJzdHJpbmdcIj09dHlwZW9mIHQmJiF+dC5pbmRleE9mKFwiJXNcIil8fFwiZnVuY3Rpb25cIj09dHlwZW9mIHQmJiF0Lmxlbmd0aCl9LGlzUHJpbWl0aXZlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5hc187cmV0dXJuIXR8fCFPYmplY3QudmFsdWVzKHQpLnNvbWUoQm9vbGVhbil9LGlzSW5zdWZmaWNpZW50OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5hc187cmV0dXJuIEJvb2xlYW4odCYmdC5wb29yKX0sYXNfOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztpZih0aGlzLmFzJiZ0aGlzLmFzLmxlbmd0aCl7dmFyIGU9QXJyYXkuaXNBcnJheSh0aGlzLmFzKT90aGlzLmFzOih0aGlzLmFzfHxcIlwiKS5zcGxpdCh0aGlzLmFzU3BlYy5yeCksbj1Cb29sZWFuKGVbMF0mJmVbMV0mJmVbMF0hPWVbMV0pO3JldHVybiBlPXRoaXMuYXNTcGVjLm9yZGVyLm1hcCgoZnVuY3Rpb24odCxuKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBlW25dJiZlW25dfHxlW25dJiZGKGVbbl0pfSkpLnJlZHVjZSgoZnVuY3Rpb24oZSxuLHIpe3JldHVybiBzdCh7fSxlLGcoe30sdC5hc1NwZWMub3JkZXJbcl0sbikpfSkse3Bvb3I6bn0pLGUuaW5kZXh8fE4oXCJgaW5kZXhgIGZpZWxkIGlzIHJlcXVpcmVkIHdoZW4gd29ya2luZyB3aXRoIG5vbiBwcmltaXRpdmUgb3B0aW9uc1wiKSxlfX0sZmlsdGVyZWQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dGhpcy5xLG49XCJmdW5jdGlvblwiPT10eXBlb2YgdGhpcy5maWx0ZXI/dGhpcy5maWx0ZXI6dGhpcy5maWx0ZXJCeTtyZXR1cm4oSSh0aGlzLmZpbHRlcik/dGhpcy5maWx0ZXI6dGhpcy5pc0R5bmFtaWN8fCFlLmxlbmd0aCk/dGhpcy5vcHRpb25zOnRoaXMub3B0aW9ucy5maWx0ZXIoKGZ1bmN0aW9uKHIpe3JldHVybiBuLmNhbGwodCxyLGUpfSkpfSxzdGF0ZTpmdW5jdGlvbigpe3JldHVybiBzdCh7fSx0aGlzLmZsYWdzLHttdWx0aXBsZTp0aGlzLmlzTXVsdGlwbGUsc2VhcmNoaW5nOiEhdGhpcy5xLGVtcHR5OiF0aGlzLnZhbHVlXy5sZW5ndGgsbWFya2VkOnRoaXMuZmlsdGVyZWRbdGhpcy5tYXJrZWRdLHNlbGVjdGVkOnRoaXMudmFsdWVffSl9LGNsYXNzZXM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnN0YXRlLGU9dGhpcy4kYXR0cnM7cmV0dXJuIHN0KHtcIi1lbXB0eVwiOnQuZW1wdHksXCItb3BlbmVkXCI6dC5vcGVuZWQsXCItZm9jdXNlZFwiOnQuZm9jdXNlZCxcIi1sb2FkaW5nXCI6dC5sb2FkaW5nLFwiLW11bHRpcGxlXCI6dC5tdWx0aXBsZSxcIi1zZWxlY3RlZFwiOnQuc2VsZWN0ZWQubGVuZ3RoLFwiLXNlYXJjaGluZ1wiOnQuc2VhcmNoaW5nfSx0aGlzLndhdGNoQXR0cnMucmVkdWNlKChmdW5jdGlvbih0LG4pe3JldHVybiBzdCh7fSx0LGcoe30sXCItXCIuY29uY2F0KG4pLGVbbl0pKX0pLHt9KSl9LGRlYm91bmNlZFNlYXJjaDpmdW5jdGlvbigpe3JldHVybiBEKHRoaXMuZGVib3VuY2UsdGhpcy5zZWFyY2gpfSxwYXJzZV86ZnVuY3Rpb24oKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgdGhpcy5wYXJzZT9GKHRoaXMucGFyc2UpOnRoaXMucGFyc2V9LHBsYWNlaG9sZGVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmFsdWVfLmxlbmd0aCYmIXRoaXMuaXNNdWx0aXBsZT9cIlwiOnRoaXMuJGF0dHJzLnBsYWNlaG9sZGVyfHxcIlNlYXJjaC4uXCJ9LG1hdGNoZWQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnEudG9Mb3dlckNhc2UoKTtyZXR1cm4gdD90aGlzLmZpbHRlcmVkLmZpbmRJbmRleCgoZnVuY3Rpb24oZSl7cmV0dXJuKGUubGFiZWwrXCJcIikudG9Mb3dlckNhc2UoKT09dH0pKTotMX0sbGF5b3V0U2xvdHM6ZnVuY3Rpb24oKXt2YXIgdD1cInNlbGVjdGVkIG9wdGlvbnMgYm90aCBpbnB1dCBhY3Rpb25zIHNwaW5uZXJcIi5zcGxpdChcIiBcIik7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuJHNjb3BlZFNsb3RzKS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiF0LmluY2x1ZGVzKGUpfSkpfX0sd2F0Y2g6e3ZhbHVlOntpbW1lZGlhdGU6ITAsaGFuZGxlcjpmdW5jdGlvbigpe3ZhciB0PV8ocmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoKGZ1bmN0aW9uIHQoZSl7dmFyIG47cmV0dXJuIHJlZ2VuZXJhdG9yUnVudGltZS53cmFwKChmdW5jdGlvbih0KXt3aGlsZSgxKXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6aWYodGhpcy52YWx1ZV89dGhpcy5wYXJzZVZhbHVlKGUpLHRoaXMub25DaGFuZ2UoKSx0aGlzLnZhbHVlXy5zb21lKChmdW5jdGlvbih0KXtyZXR1cm4gdC5wb29yfSkpKXt0Lm5leHQ9NDticmVha31yZXR1cm4gdC5hYnJ1cHQoXCJyZXR1cm5cIik7Y2FzZSA0OmlmKHRoaXMuaXNEeW5hbWljKXt0Lm5leHQ9NjticmVha31yZXR1cm4gdC5hYnJ1cHQoXCJyZXR1cm5cIix0aGlzLnNlYXJjaCgpKTtjYXNlIDY6aWYodGhpcy5maW5kKXt0Lm5leHQ9ODticmVha31yZXR1cm4gdC5hYnJ1cHQoXCJyZXR1cm5cIik7Y2FzZSA4OnJldHVybiB0Lm5leHQ9MTAsdGhpcy5maW5kKHRoaXMudmFsdWVfKTtjYXNlIDEwOm49dC5zZW50LHRoaXMudmFsdWVfPXRoaXMucGFyc2VWYWx1ZSh0aGlzLnZhbHVlXyxuKTtjYXNlIDEyOmNhc2VcImVuZFwiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKTtmdW5jdGlvbiBlKGUpe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gZX0oKX0sZnJvbTpmdW5jdGlvbigpe3RoaXMucXVldWU9bnVsbH0sb3B0aW9uczpmdW5jdGlvbih0KXt0JiZ0Lmxlbmd0aCYmKHRoaXMudmFsdWVfPXRoaXMucGFyc2VWYWx1ZSh0aGlzLnZhbHVlXykpfSx2YWx1ZV86e2ltbWVkaWF0ZTohMCxoYW5kbGVyOmZ1bmN0aW9uKHQpe3RoaXMuJGVtaXQoXCJ1cGRhdGU6dGFnc1wiLHQpfX0sZmlsdGVyZWQ6ZnVuY3Rpb24oKXt0aGlzLm1hcmsoIXRoaXMuaXNEeW5hbWljfHwwKX0scTpmdW5jdGlvbih0KXt0aGlzLmlzRHluYW1pYyYmKHRoaXMub3B0aW9ucz1bXSksdGhpcy5kZWJvdW5jZWRTZWFyY2goKSx0aGlzLiRlbWl0KFwidXBkYXRlOnF1ZXJ5XCIsdCl9LHF1ZXJ5OmZ1bmN0aW9uKHQpe3RoaXMucT10fHxcIlwifSxxdWV1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuZmxhZ3MubG9hZGluZz10JiYhIXQuZmluYWxseSgoZnVuY3Rpb24oKXt0PT1lLnF1ZXVlJiYoZS5mbGFncy5sb2FkaW5nPSExKX0pKX0sXCJmbGFncy5mb2N1c2VkXCI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuJGVtaXQodD9cImZvY3VzXCI6XCJibHVyXCIsdGhpcyksdD90aGlzLm9wZW4oKTp0aGlzLmNsb3NlKCFJKHRoaXMuY2xlYXJPbkNsb3NlKXx8dGhpcy5jbGVhck9uQ2xvc2UpfSxcImZsYWdzLm9wZW5lZFwiOmZ1bmN0aW9uKHQpe3RoaXMuJGVtaXQodD9cIm9wZW5cIjpcImNsb3NlXCIsdGhpcyl9fSxtZXRob2RzOntzZXQ6ZnVuY3Rpb24odCl7dGhpcy5zdGF0ZWZ1bCYmKHRoaXMudmFsdWVfPUkodCk/QXJyYXkuaXNBcnJheSh0KT90Olt0XTpbXSx0aGlzLm9uQ2hhbmdlKCkpLEkodCkmJih0PUFycmF5LmlzQXJyYXkodCk/dC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnZhbHVlfSkpOnQudmFsdWUpLHRoaXMuJGVtaXQoXCJpbnB1dFwiLHQpfSxzZWFyY2g6ZnVuY3Rpb24oKXt2YXIgdD1fKHJlZ2VuZXJhdG9yUnVudGltZS5tYXJrKChmdW5jdGlvbiB0KCl7dmFyIGUsbixyLGksbz1hcmd1bWVudHM7cmV0dXJuIHJlZ2VuZXJhdG9yUnVudGltZS53cmFwKChmdW5jdGlvbih0KXt3aGlsZSgxKXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6aWYoZT1vLmxlbmd0aD4wJiZ2b2lkIDAhPT1vWzBdJiZvWzBdLG49dGhpcy5xLFwic3RyaW5nXCI9PXR5cGVvZiBlJiYobj1lKSx0aGlzLnZhbGlkYXRlKG4pKXt0Lm5leHQ9NTticmVha31yZXR1cm4gdC5hYnJ1cHQoXCJyZXR1cm5cIixuZXcgRXJyb3IocShcIkludmFsaWQgcXVlcnk6IFwiK24pKSk7Y2FzZSA1OnJldHVybiByPXRoaXMucXVldWU9ZXx8IXRoaXMucXVldWV8fHRoaXMuaXNEeW5hbWljJiZ0aGlzLnF1ZXVlLnEhPW4/dGhpcy5mcm9tXyhuKTp0aGlzLnF1ZXVlLHIucT1uLHQucHJldj03LHQubmV4dD0xMCxyO2Nhc2UgMTA6aT10LnNlbnQsdC5uZXh0PTE3O2JyZWFrO2Nhc2UgMTM6dGhyb3cgdC5wcmV2PTEzLHQudDA9dFtcImNhdGNoXCJdKDcpLHI9PXRoaXMucXVldWUmJih0aGlzLnF1ZXVlPW51bGwpLHQudDA7Y2FzZSAxNzppZihyPT10aGlzLnF1ZXVlJiZ0aGlzLnE9PXRoaXMucXVldWUucSl7dC5uZXh0PTE5O2JyZWFrfXJldHVybiB0LmFicnVwdChcInJldHVyblwiKTtjYXNlIDE5OnRoaXMub3B0aW9ucz1pO2Nhc2UgMjA6Y2FzZVwiZW5kXCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyxbWzcsMTNdXSl9KSkpO2Z1bmN0aW9uIGUoKXtyZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIGV9KCksZnJvbV86ZnVuY3Rpb24oKXt2YXIgdD1fKHJlZ2VuZXJhdG9yUnVudGltZS5tYXJrKChmdW5jdGlvbiB0KGUpe3ZhciBuLHIsaSxvPXRoaXM7cmV0dXJuIHJlZ2VuZXJhdG9yUnVudGltZS53cmFwKChmdW5jdGlvbih0KXt3aGlsZSgxKXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6aWYobj10aGlzLmZyb20scj10aGlzLmZldGNoLCFBcnJheS5pc0FycmF5KG4pKXt0Lm5leHQ9NTticmVha31pPW4sdC5uZXh0PTE0O2JyZWFrO2Nhc2UgNTppZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBuKXt0Lm5leHQ9MTE7YnJlYWt9cmV0dXJuIHQubmV4dD04LG4oZSk7Y2FzZSA4Omk9dC5zZW50LHQubmV4dD0xNDticmVhaztjYXNlIDExOnJldHVybiB0Lm5leHQ9MTMscihlLG4pO2Nhc2UgMTM6aT10LnNlbnQ7Y2FzZSAxNDpyZXR1cm4gdC5hYnJ1cHQoXCJyZXR1cm5cIiwodGhpcy5wYXJzZV8oaSl8fFtdKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBvLm9mUmF3KHQpfSkpKTtjYXNlIDE1OmNhc2VcImVuZFwiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKTtmdW5jdGlvbiBlKGUpe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gZX0oKSxvZlJhdzpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmFzXyxuPXRoaXMuYXNTcGVjLm9yZGVyLnJlZHVjZSgoZnVuY3Rpb24obixyKXtyZXR1cm4gc3Qoe30sbixnKHt9LHIsZSYmZVtyXT9lW3JdKHQpOnQpKX0pLHtyYXc6dH0pO3JldHVybiBJKG4ubGFiZWwpfHwobi5sYWJlbD1uLnZhbHVlKSxJKG4uaW5kZXgpfHwobi5pbmRleD1uLmxhYmVsKSxuZXcgbHQobil9LG9mVmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5pc0luc3VmZmljaWVudDtpZih0aGlzLmlzUHJpbWl0aXZlKXJldHVybiB0aGlzLm9mUmF3KHQpO3ZhciBuPXQscj10aGlzLmFzXztyJiZyLnZhbHVlJiZyLnZhbHVlKG49e30sdCk7dmFyIGk9dGhpcy5vZlJhdyhuKTtyZXR1cm4gT2JqZWN0LmFzc2lnbihpLHtwb29yOmV9KX0sb2ZQaHJhc2U6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5pc0luc3VmZmljaWVudDtpZih0aGlzLmlzUHJpbWl0aXZlKXJldHVybiB0aGlzLm9mUmF3KHQpO3ZhciBuPXt9LHI9dGhpcy5hc187cmV0dXJuIHIudmFsdWUmJnIudmFsdWUobix0KSxyLmxhYmVsJiZyLmxhYmVsKG4sdCksT2JqZWN0LmFzc2lnbih0aGlzLm9mUmF3KG4pLHtwb29yOmUsbmV3OiEwfSl9LHNlbGVjdDpmdW5jdGlvbigpe3ZhciB0PV8ocmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoKGZ1bmN0aW9uIHQoZSl7dmFyIG4scixpLG89dGhpcyxjPWFyZ3VtZW50cztyZXR1cm4gcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoKGZ1bmN0aW9uKHQpe3doaWxlKDEpc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDppZihuPWMubGVuZ3RoPjEmJnZvaWQgMCE9PWNbMV0mJmNbMV0scj10aGlzLnZhbHVlXy5maW5kSW5kZXgoKGZ1bmN0aW9uKHQpe3JldHVybiBvLmVxdWFscyh0LGUpfSkpLHRoaXMuJGVtaXQoXCJzZWxlY3RcIixlKSwhfnIpe3QubmV4dD01O2JyZWFrfXJldHVybiB0LmFicnVwdChcInJldHVyblwiLHRoaXMuaXNNdWx0aXBsZT90aGlzLmRlc2VsZWN0KHIpOnRoaXMpO2Nhc2UgNTppZighbil7dC5uZXh0PTE2O2JyZWFrfWlmKHRoaXMuJGVtaXQoXCJjcmVhdGVcIixlKSx0aGlzLnRhZ2dpbmcpe3QubmV4dD05O2JyZWFrfXJldHVybiB0LmFicnVwdChcInJldHVyblwiKTtjYXNlIDk6aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgdGhpcy50YWdnaW5nKXt0Lm5leHQ9MTY7YnJlYWt9cmV0dXJuIHQubmV4dD0xMix0aGlzLnRhZ2dpbmcuY2FsbCh0aGlzLiRwYXJlbnQsZSx0aGlzKTtjYXNlIDEyOmlmKGk9dC5zZW50LCFbITFdLmluY2x1ZGVzKGkpKXt0Lm5leHQ9MTU7YnJlYWt9cmV0dXJuIHQuYWJydXB0KFwicmV0dXJuXCIpO2Nhc2UgMTU6ZT1pIGluc3RhbmNlb2YgbHQ/aTp0aGlzLm9mUmF3KGkpO2Nhc2UgMTY6dGhpcy5pc011bHRpcGxlJiYoZT10aGlzLnZhbHVlXy5jb25jYXQoZSkpLHRoaXMuc2V0KGUpO2Nhc2UgMTg6Y2FzZVwiZW5kXCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyl9KSkpO2Z1bmN0aW9uIGUoZSl7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiBlfSgpLGRlc2VsZWN0OmZ1bmN0aW9uKHQpe2lmKCF0aGlzLmlzTXVsdGlwbGUpcmV0dXJuIHRoaXMuY2xlYXIoKTt2YXIgZT1kKHRoaXMudmFsdWVfKTtlLnNwbGljZSh0LDEpLHRoaXMuc2V0KGUpfSxjbGVhcjpmdW5jdGlvbigpe3RoaXMuc2V0KHRoaXMuaXNNdWx0aXBsZT9bXTp2b2lkIDApfSxleGlzdHM6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gdGhpcy52YWx1ZV8uc29tZSgoZnVuY3Rpb24obil7cmV0dXJuIGUuZXF1YWxzKG4sdCl9KSl9LHBhcnNlVmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO3JldHVybiBJKHQpPyhlPWV8fHRoaXMub3B0aW9ucy5jb25jYXQodGhpcy52YWx1ZV8pLFtdLmNvbmNhdCh0KS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgbHQ/dDpuLm9mVmFsdWUodCl9KSkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gZS5maW5kKChmdW5jdGlvbihlKXtyZXR1cm4gbi5lcXVhbHModCxlKX0pKXx8dH0pKSk6W119LG1hcms6ZnVuY3Rpb24odCl7aWYoYXJndW1lbnRzLmxlbmd0aCYmITEhPT10PyEwPT09dCYmKHQ9fnRoaXMubWF0Y2hlZD90aGlzLm1hdGNoZWQ6dGhpcy50YWdnaW5nPy0xOjApOnQ9LTEsdD10aGlzLm1hcmtlZD1UKC0xLHQsdGhpcy5maWx0ZXJlZC5sZW5ndGgtMSksfnQpe3ZhciBlPXRoaXMuJHJlZnNbXCJvcHRpb25cIit0XTtlPWUmJmVbMF0mJmVbMF0uJGVsLGUmJnRoaXMuc2Nyb2xsVG8oZSl9cmV0dXJuIHRoaXN9LG5leHQ6ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO2lmKCF0aGlzLmZsYWdzLm9wZW5lZClyZXR1cm4gdGhpcy5vcGVuKCk7dGhpcy5tYXJrKHRoaXMubWFya2VkK01hdGgucG93KC0xLHQpKX0sZXF1YWxzOmZ1bmN0aW9uKHQsZSl7aWYodC5pbmRleD09PWUuaW5kZXgpcmV0dXJuITA7aWYodC5pbmRleD09ZS5pbmRleCYmW3QuaW5kZXgsZS5pbmRleF0uZXZlcnkoSSkpcmV0dXJuITA7dHJ5e3JldHVybiBKU09OLnN0cmluZ2lmeSh0LmluZGV4KT09PUpTT04uc3RyaW5naWZ5KGUuaW5kZXgpfWNhdGNoKG4pe3JldHVybiExfX0sb3BlbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZsYWdzLm9wZW5lZD90aGlzOih0aGlzLmZsYWdzLm9wZW5lZD0hMCx0aGlzLm1hcmsoITApKX0sY2xvc2U6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZmxhZ3Mub3BlbmVkPSExLCh0fHwoSSh0aGlzLmNsZWFyT25TZWxlY3QpP3RoaXMuY2xlYXJPblNlbGVjdDohdGhpcy5pc011bHRpcGxlKSkmJih0aGlzLnE9XCJcIiksdGhpc30sYmx1cjpmdW5jdGlvbigpe2lmKCF0aGlzLiRlbClyZXR1cm4gdGhpczt2YXIgdD1HKHRoaXMuJGVsLFwiOmZvY3VzXCIpP3RoaXMuJGVsOnRoaXMuJGVsLnF1ZXJ5U2VsZWN0b3IoXCI6Zm9jdXNcIik7cmV0dXJuIHQmJnQuYmx1cigpLHRoaXN9LHNjcm9sbFRvOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuJHJlZnMubGF5b3V0LiRyZWZzLmxpc3Q7ZS5zY3JvbGxUb3A9TWF0aC5yb3VuZCh0Lm9mZnNldFRvcCt0Lm9mZnNldEhlaWdodC1lLm9mZnNldEhlaWdodC8yKX0sY2hlY2tGb2N1czpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZsYWdzLmZvY3VzZWQ9Ryh0aGlzLiRlbCxcIjpmb2N1c1wiKXx8ISF0aGlzLiRlbC5xdWVyeVNlbGVjdG9yKFwiOmZvY3VzXCIpLHRoaXN9LG9uS2V5RGVsOmZ1bmN0aW9uKCl7aWYoIXRoaXMucSl7dmFyIHQ9dGhpcy52YWx1ZV8ubGVuZ3RoO3QmJnRoaXMuaXNNdWx0aXBsZT90aGlzLmRlc2VsZWN0KHQtMSk6dGhpcy5jbGVhcigpfX0sb25LZXlEb3duRW50ZXI6ZnVuY3Rpb24odCl7aWYodGhpcy5xfHx+dGhpcy5tYXJrZWQpe3QucHJldmVudERlZmF1bHQoKTt2YXIgZT10aGlzLmZpbHRlcmVkW3RoaXMubWFya2VkXTt0aGlzLnNlbGVjdChlfHx0aGlzLm9mUGhyYXNlKHRoaXMucSksIWUpfX0sb25LZXlEb3duOmZ1bmN0aW9uKHQpe3RoaXMudGFnZ2luZyYmdGhpcy5xJiZ0aGlzLnRhZ0tleXMuaW5jbHVkZXModC53aGljaHx8dC5rZXlDb2RlfHwwKSYmKCF+dGhpcy5tYXJrZWR8fHRoaXMuZmlsdGVyZWRbdGhpcy5tYXJrZWRdLmxhYmVsIT09dGhpcy5xKSYmKHQucHJldmVudERlZmF1bHQoKSx0LnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuc2VsZWN0KHRoaXMub2ZQaHJhc2UodGhpcy5xKSkpfSxvbkNoYW5nZTpmdW5jdGlvbigpeyhJKHRoaXMuY2xvc2VPblNlbGVjdCk/dGhpcy5jbG9zZU9uU2VsZWN0OiF0aGlzLmlzTXVsdGlwbGV8fHRoaXMuaXNEeW5hbWljKSYmdGhpcy5jbG9zZSgpLEkodGhpcy5jbGVhck9uU2VsZWN0KSYmIXRoaXMuY2xlYXJPblNlbGVjdHx8KHRoaXMucT1cIlwiKSx0aGlzLiRlbWl0KFwiY2hhbmdlXCIsdGhpcy5pc011bHRpcGxlP3B0KHRoaXMudmFsdWVfKTp0aGlzLnZhbHVlX1swXSl9fX07ZnVuY3Rpb24gbHQoKXtPYmplY3QuYXNzaWduLmFwcGx5KE9iamVjdCxbdGhpc10uY29uY2F0KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpKX1mdW5jdGlvbiBwdCh0KXtyZXR1cm4gdD1kKHQpLHQucmF3PXQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC52YWx1ZX0pKSx0fXZhciBodCx2dD1mdCxkdD0obihcIjNjYmFcIiksVyh2dCxpLG8sITEsbnVsbCxudWxsLG51bGwpKSx5dD1kdC5leHBvcnRzLGJ0PW4oXCI5MjI0XCIpLGd0PWh0PXt2ZXJzaW9uOmJ0W1wiYVwiXSxpbnN0YWxsOmZ1bmN0aW9uKHQpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSxuPWUubmFtZSxyPXZvaWQgMD09PW4/XCJ2U2VsZWN0XCI6bixpPWUubWl4aW4sbz12b2lkIDA9PT1pP3t9Omk7dC5jb21wb25lbnQocix7bWl4aW5zOlt5dCxvXX0pfSx2U2VsZWN0Onl0LHZTZWxlY3RMYXlvdXQ6dXQsdlNlbGVjdE9wdGlvbjpYLHZTZWxlY3RTZWxlY3RlZDpldH07XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdyYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdy5WdWUmJih3aW5kb3cuVnVlU2VsZWN0PWh0KSxuLmQoZSxcInZTZWxlY3RcIiwoZnVuY3Rpb24oKXtyZXR1cm4geXR9KSksbi5kKGUsXCJ2U2VsZWN0TGF5b3V0XCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHV0fSkpLG4uZChlLFwidlNlbGVjdE9wdGlvblwiLChmdW5jdGlvbigpe3JldHVybiBYfSkpLG4uZChlLFwidlNlbGVjdFNlbGVjdGVkXCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGV0fSkpO2VbXCJkZWZhdWx0XCJdPWd0fSxmZGVmOmZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPVwiXFx0XFxuXFx2XFxmXFxyIMKg4ZqA4aCO4oCA4oCB4oCC4oCD4oCE4oCF4oCG4oCH4oCI4oCJ4oCK4oCv4oGf44CAXFx1MjAyOFxcdTIwMjlcXHVmZWZmXCJ9fSl9KSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD12dWUtc2VsZWN0LnVtZC5taW4uanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@desislavsd/vue-select/dist/vue-select.umd.min.js\n");

/***/ }),

/***/ "./node_modules/@mathieustan/vue-datepicker/dist/vue-datepicker.esm.js":
/*!*****************************************************************************!*\
  !*** ./node_modules/@mathieustan/vue-datepicker/dist/vue-datepicker.esm.js ***!
  \*****************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   VueDatePicker: () => (/* binding */ Me),\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var body_scroll_lock__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! body-scroll-lock */ \"./node_modules/body-scroll-lock/lib/bodyScrollLock.min.js\");\n/* harmony import */ var body_scroll_lock__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(body_scroll_lock__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.esm.js\");\n/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! dayjs */ \"./node_modules/dayjs/dayjs.min.js\");\n/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(dayjs__WEBPACK_IMPORTED_MODULE_1__);\n/*!\n * Vue-datepicker v0.2.11\n * (c) 2019-2020 Mathieu Stanowski\n */\nvar a=function(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t},o={name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),weekdaysShort:\"Sun_Mon_Tue_Wed_Thu_Fri_Sat\".split(\"_\"),weekdaysMin:\"Su_Mo_Tu_We_Th_Fr_Sa\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),monthsShort:\"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec\".split(\"_\"),weekStart:0,formats:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},ordinal:function(t){var e=[\"th\",\"st\",\"nd\",\"rd\"],n=t%100;return\"[\".concat(t).concat(e[(n-20)%10]||e[n]||e[0],\"]\")},buttonValidate:\"Ok\",buttonCancel:\"Cancel\",rangeHeaderText:\"From %d To %d\"},s={name:\"fr\",weekdays:\"Dimanche_Lundi_Mardi_Mercredi_Jeudi_Vendredi_Samedi\".split(\"_\"),months:\"Janvier_Février_Mars_Avril_Mai_Juin_Juillet_Août_Septembre_Octobre_Novembre_Décembre\".split(\"_\"),weekStart:1,weekdaysShort:\"Dim_Lun_Mar_Mer_Jeu_Ven_Sam\".split(\"_\"),monthsShort:\"Janv_Févr_Mars_Avr_Mai_Juin_Juil_Août_Sept_Oct_Nov_Déc\".split(\"_\"),weekdaysMin:\"Di_Lu_Ma_Me_Je_Ve_Sa\".split(\"_\"),ordinal:function(t){return t},formats:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},buttonValidate:\"Ok\",buttonCancel:\"Annuler\",rangeHeaderText:\"Du %d Au %d\"},c={name:\"es\",monthsShort:\"ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic\".split(\"_\"),weekdays:\"domingo_lunes_martes_miércoles_jueves_viernes_sábado\".split(\"_\"),weekdaysShort:\"dom._lun._mar._mié._jue._vie._sáb.\".split(\"_\"),weekdaysMin:\"do_lu_ma_mi_ju_vi_sá\".split(\"_\"),months:\"Enero_Febrero_Marzo_Abril_Mayo_Junio_Julio_Agosto_Septiembre_Octubre_Noviembre_Diciembre\".split(\"_\"),weekStart:1,formats:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D [de] MMMM [de] YYYY\",LLL:\"D [de] MMMM [de] YYYY H:mm\",LLLL:\"dddd, D [de] MMMM [de] YYYY H:mm\"},ordinal:function(t){return\"\".concat(t,\"º\")},buttonValidate:\"Ok\",buttonCancel:\"Anular\",rangeHeaderText:\"Del %d Al %d\"},l={name:\"de\",weekdays:\"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag\".split(\"_\"),weekdaysShort:\"So._Mo._Di._Mi._Do._Fr._Sa.\".split(\"_\"),months:\"Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember\".split(\"_\"),monthsShort:\"Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.\".split(\"_\"),ordinal:function(t){return\"\".concat(t,\".\")},weekStart:1,formats:{LTS:\"HH:mm:ss\",LT:\"HH:mm\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY HH:mm\",LLLL:\"dddd, D. MMMM YYYY HH:mm\"},buttonValidate:\"Ok\",buttonCancel:\"Abbrechen\",rangeHeaderText:\"Vom %d Bis %d\"},u={name:\"he\",weekdays:\"ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת\".split(\"_\"),weekdaysShort:\"א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳\".split(\"_\"),weekdaysMin:\"א׳_ב׳_ג׳_ד׳_ה׳_ו_ש׳\".split(\"_\"),months:\"ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר\".split(\"_\"),monthsShort:\"ינו_פבר_מרץ_אפר_מאי_יונ_יול_אוג_ספט_אוק_נוב_דצמ\".split(\"_\"),ordinal:function(t){return t},formats:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D [ב]MMMM YYYY\",LLL:\"D [ב]MMMM YYYY HH:mm\",LLLL:\"dddd, D [ב]MMMM YYYY HH:mm\",l:\"D/M/YYYY\",ll:\"D MMM YYYY\",lll:\"D MMM YYYY HH:mm\",llll:\"ddd, D MMM YYYY HH:mm\"},buttonValidate:\"אישור\",buttonCancel:\"ביטול\",rangeHeaderText:\"מתאריך %d עד תאריך %d\"},d={name:\"ru\",weekdays:\"Воскресенье_Понедельник_Вторник_Среда_Четверг_Пятница_Суббота\".split(\"_\"),weekdaysShort:\"Вс_Пн_Вт_Ср_Чт_Пт_Сб\".split(\"_\"),weekdaysMin:\"Вс_Пн_Вт_Ср_Чт_Пт_Сб\".split(\"_\"),months:\"Январь_Февраль_Март_Апрель_Май_Июнь_Июль_Август_Сентябрь_Октябрь_Ноябрь_Декабрь\".split(\"_\"),monthsShort:\"Янв_Фев_Мар_Апр_Май_Июн_Июл_Авг_Сен_Окт_Ноя_Дек\".split(\"_\"),weekStart:1,formats:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},ordinal:function(t){return t},buttonValidate:\"Ок\",buttonCancel:\"Отмена\",rangeHeaderText:\"От %d До %d\"},h={name:\"sv\",weekdays:\"Söndag_Måndag_Tisdag_Onsdag_Torsdag_Fredag_Lördag\".split(\"_\"),weekdaysShort:\"Sön_Mån_Tis_Ons_Tor_Fre_Lör\".split(\"_\"),weekdaysMin:\"Sö_Må_Ti_On_To_Fr_Lö\".split(\"_\"),months:\"januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december\".split(\"_\"),monthsShort:\"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec\".split(\"_\"),weekStart:0,formats:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"YYYY-MM-DD\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},ordinal:function(t){var e=[\"th\",\"st\",\"nd\",\"rd\"],n=t%100;return\"[\".concat(t).concat(e[(n-20)%10]||e[n]||e[0],\"]\")},buttonValidate:\"Ok\",buttonCancel:\"Avbryt\",rangeHeaderText:\"Från %d till %d\"},p=Object.freeze({__proto__:null,fr:s,en:o,es:c,de:l,he:u,ru:d,sv:h}),f=[\"name\",\"weekdays\",\"weekdaysShort\",\"weekdaysMin\",\"weekStart\",\"months\",\"monthsShort\",\"ordinal\",\"formats\",\"buttonCancel\",\"buttonValidate\",\"rangeHeaderText\"],m={date:\"DD MMMM YYYY\",month:\"MMMM YYYY\",quarter:\"YYYY-[Q]Q\",year:\"YYYY\",range:\"DD MMMM YYYY\"},v={date:\"YYYY-MM-DD\",month:\"YYYY-MM\",quarter:\"YYYY-Q\",year:\"YYYY\",range:\"YYYY-MM-DD\"},y={date:\"dddd DD MMMM\",month:\"MMMM\",quarter:\"[Q]Q\",year:\"YYYY\",range:\"DD MMMM YYYY\"},g=1900,b=3e3,D=\"date\",_=\"month\",k=\"quarter\",O=\"year\",M=/(%d)+/,w=Object.freeze({enter:13,tab:9,delete:46,esc:27,space:32,up:38,down:40,left:37,right:39,end:35,home:36,del:46,backspace:8,insert:45,pageup:33,pagedown:34});function Y(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function S(t){for(var e=arguments,n=1;n<arguments.length;n++){var r=null!=e[n]?e[n]:{};n%2?Y(Object(r),!0).forEach((function(e){a(t,e,r[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):Y(Object(r)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}))}return t}var x=vue__WEBPACK_IMPORTED_MODULE_2__[\"default\"].extend({name:\"Localable\",props:{locale:{type:Object,default:function(){return{lang:void 0}}}},computed:{currentLocale:function(){var t=this.locale.lang;return S(S({},this.locale),{},{lang:this.getLocale(t)})}},methods:{getDefaultLang:function(){return(this.$vuedatepicker&&this.$vuedatepicker.lang||window.navigator.userLanguage||window.navigator.language||\"en\").substr(0,2)},isValidLocale:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=Object.keys(t);return e.length>0&&e.every((function(t){return f.includes(t)}))},getLocale:function(t){return this.isValidLocale(t)?t:p[t]||this.getLocale(this.getDefaultLang())}}}),C=vue__WEBPACK_IMPORTED_MODULE_2__[\"default\"].extend({name:\"Mobile\",props:{mobileBreakpoint:{type:[Number,String],default:576,validator:function(t){return!isNaN(Number(t))}}},data:function(){return{width:0,mobile:!1,resizeTimeout:void 0}},computed:{isMobile:function(){return this.mobile}},created:function(){var t=this;window&&(window.addEventListener(\"resize\",this.onResize,{passive:!0}),this.$on(\"hook:destroyed\",(function(){window.removeEventListener(\"resize\",t.onResize,{passive:!0})})),this.update())},methods:{onResize:function(){clearTimeout(this.resizeTimeout),this.resizeTimeout=setTimeout(this.update,200)},update:function(){var t=this.getClientWidth();this.width=t,this.mobile=t<parseInt(this.mobileBreakpoint,10)},getClientWidth:function(){return\"undefined\"==typeof document?0:Math.max(document.documentElement.clientWidth,window.innerWidth||0)}}});\"undefined\"!=typeof globalThis?globalThis:\"undefined\"!=typeof window?window:\"undefined\"!=typeof __webpack_require__.g?__webpack_require__.g:\"undefined\"!=typeof self&&self;function $(t,e){return t(e={exports:{}},e.exports),e.exports}var L=$((function(t){function e(n){return\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?t.exports=e=function(t){return typeof t}:t.exports=e=function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},e(n)}t.exports=e})),j=[\"click\"],P=[],T={instances:P,bind:E,update:function(t,e){JSON.stringify(e.value)!==JSON.stringify(e.oldValue)&&E(t,e)},unbind:A};function E(t,e){var n=e.value;A(t);var r=n,i=\"function\"==typeof r,a=\"object\"===L(r);if((i||a)&&!(!1===r.isActive)){var o=function(t){var e=t.el,n=t.handler;return{el:e,eventHandlers:j.map((function(t){return{event:t,handler:function(t){return function(t){var e=t.event,n=t.el,r=t.handler,i=e.path||(e.composedPath?e.composedPath():void 0);if(i?i.indexOf(n)<0:!n.contains(e.target))return r(e,n)}({event:t,el:e,handler:n})}}}))}}({el:t,handler:i?r:r.handler});o.eventHandlers.forEach((function(t){var e=t.event,n=t.handler;return setTimeout((function(){return document.addEventListener(e,n,!1)}),0)})),P.push(o)}}function A(t){var e=P.findIndex((function(e){return e.el===t}));-1!==e&&(P[e].eventHandlers.forEach((function(t){var e=t.event,n=t.handler;return document.removeEventListener(e,n,!1)})),P.splice(e,1))}var H={model:{prop:\"value\",event:\"input\"},props:{value:{type:Boolean,required:!1}},data:function(){return{isActive:!1}},watch:{value:{handler:function(t){this.isActive=t},immediate:!0},isActive:function(t){t!==this.value&&this.$emit(\"input\",t)}}};function N(t,e,n){var r=arguments.length>3&&void 0!==arguments[3]&&arguments[3],i=function i(a){n(a),t.removeEventListener(e,i,r)};t.addEventListener(e,i,r)}function B(t){var e=L(t);return\"boolean\"===e||\"string\"===e||t.nodeType===Node.ELEMENT_NODE}function F(t){if(null!=t&&\"\"!==t)return isNaN(+t)?String(t):\"\".concat(Number(t),\"px\")}function I(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"default\",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=arguments.length>3&&void 0!==arguments[3]&&arguments[3];return t.$scopedSlots[e]?t.$scopedSlots[e]&&t.$scopedSlots[e](n):!t.$slots[e]||n&&!r?void 0:t.$slots[e]}function V(t){if(!t||t.nodeType!==Node.ELEMENT_NODE)return 0;var e=+window.getComputedStyle(t).getPropertyValue(\"z-index\");return e||V(t.parentNode)}var z={mixins:[H],props:{activator:{default:void 0,validator:function(t){return[\"string\",\"object\"].includes(L(t))}},disabled:{type:Boolean,default:!1}},data:function(){return{activatorElement:void 0,activatorNode:[]}},watch:{activator:\"resetActivator\"},mounted:function(){var t,e,n,r=(e=\"activator\",n=!0,(t=this).$slots[e]&&t.$scopedSlots[e]&&t.$scopedSlots[e].name?n?\"v-slot\":\"scoped\":t.$slots[e]?\"normal\":t.$scopedSlots[e]?\"scoped\":void 0);r&&[\"v-slot\",\"normal\"].includes(r)&&console.error('The activator slot must be bound, try \\'<template v-slot:activator=\"{ on }\"><button v-on=\"on\">\\'',this),this.getActivator()},methods:{resetActivator:function(){this.activatorElement=void 0,this.getActivator()},genActivator:function(){var t=I(this,\"activator\",Object.assign(this.getValueProxy(),{attrs:{role:\"button\",\"aria-haspopup\":!0,\"aria-expanded\":String(this.isActive)}}))||[];return this.activatorNode=t,t},getActivator:function(t){if(this.activatorElement)return this.activatorElement;var e;if(this.activator){var n=document;e=\"string\"==typeof this.activator?n.querySelector(this.activator):this.activator.$el?this.activator.$el:this.activator}else t?e=t.currentTarget||t.target:this.activatorNode.length&&(e=this.activatorNode[0].elm);return this.activatorElement=e,this.activatorElement},getContentSlot:function(){return I(this,\"default\",this.getValueProxy(),!0)},getValueProxy:function(){var t=this;return{get value(){return t.isActive},set value(e){t.isActive=e}}}}};var W=function(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n<e;n++)r[n]=t[n];return r};var q=function(t){if(Array.isArray(t))return W(t)};var R=function(t){if(\"undefined\"!=typeof Symbol&&Symbol.iterator in Object(t))return Array.from(t)};var J=function(t,e){if(t){if(\"string\"==typeof t)return W(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return\"Object\"===n&&t.constructor&&(n=t.constructor.name),\"Map\"===n||\"Set\"===n?Array.from(t):\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?W(t,e):void 0}};var X=function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")};var Q=function(t){return q(t)||R(t)||J(t)||X()};function U(t,e){if(t){var n=function(t){var e=t.getBoundingClientRect();return{top:Math.round(e.top),left:Math.round(e.left),bottom:Math.round(e.bottom),right:Math.round(e.right),width:Math.round(e.width),height:Math.round(e.height)}}(t);if(!1!==e){var r=window.getComputedStyle(t);n.left=parseInt(r.marginLeft||0),n.top=parseInt(r.marginTop||0)}return n}}function Z(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function G(t){for(var e=arguments,n=1;n<arguments.length;n++){var r=null!=e[n]?e[n]:{};n%2?Z(Object(r),!0).forEach((function(e){a(t,e,r[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):Z(Object(r)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}))}return t}var K={name:\"VDMenu\",mixins:[z,{name:\"Detachable\",mixins:[{name:\"Bootable\",data:function(){return{isBooted:!1}},computed:{hasContent:function(){return this.isBooted||this.isActive}},watch:{isActive:function(){this.isBooted=!0}},methods:{showLazyContent:function(t){return this.hasContent&&t?t():[this.$createElement()]}}}],props:{attach:{validator:B,default:!1},contentClass:{type:String,default:\"\"}},data:function(){return{activatorNode:void 0,hasDetached:!1}},watch:{attach:function(){this.hasDetached=!1,this.initDetach()},hasContent:function(){this.$nextTick(this.initDetach)}},beforeMount:function(){var t=this;this.$nextTick((function(){t.activatorNode&&(Array.isArray(t.activatorNode)?t.activatorNode:[t.activatorNode]).forEach((function(e){if(e.elm&&t.$el.parentNode){var n=t.$el===t.$el.parentNode.firstChild?t.$el:t.$el.nextSibling;t.$el.parentNode.insertBefore(e.elm,n)}}))}))},mounted:function(){this.hasContent&&this.initDetach()},deactivated:function(){this.isActive=!1},beforeDestroy:function(){try{if(this.$refs.content&&this.$refs.content.parentNode&&this.$refs.content.parentNode.removeChild(this.$refs.content),this.activatorNode)(Array.isArray(this.activatorNode)?this.activatorNode:[this.activatorNode]).forEach((function(t){t.elm&&t.elm.parentNode&&t.elm.parentNode.removeChild(t.elm)}))}catch(t){console.error(t)}},methods:{initDetach:function(){var t;this._isDestroyed||!this.$refs.content||this.hasDetached||\"\"===this.attach||!0===this.attach||((t=!1===this.attach?document.querySelector(\"#app\")||document.querySelector(\"body\"):\"string\"==typeof this.attach?document.querySelector(this.attach):this.attach)?(t.appendChild(this.$refs.content),this.hasDetached=!0):console.error(\"Unable to locate target '\".concat(this.attach,\"'\"),this))}}},{name:\"DynamicPosition\",data:function(){return{activatorFixed:!1,dimensions:{activator:{top:0,left:0,bottom:0,right:0,width:0,height:0,offsetTop:0,scrollHeight:0,offsetLeft:0},content:{top:0,left:0,bottom:0,right:0,width:0,height:0,offsetTop:0,scrollHeight:0}},isContentActive:!1,pageWidth:0,pageYOffset:0}},computed:{isAttached:function(){return!1!==this.attach},computedLeft:function(){var t=this.dimensions,e=t.activator,n=t.content,r=(this.isAttached?e.offsetLeft:e.left)||0;return this.rtl?e.right-n.width:r},computedTop:function(){var t=this.dimensions.activator,e=t.height;return((this.isAttached?t.offsetTop:t.top+this.pageYOffset)||0)+e},hasActivator:function(){return Boolean(this.$slots.activator)||Boolean(this.$scopedSlots.activator)||Boolean(this.activator)}},watch:{disabled:function(t){t&&this.callDeactivate()},isActive:function(t){this.disabled||(t?this.callActivate():this.callDeactivate())}},methods:{activate:function(){},deactivate:function(){},callActivate:function(){this.activate()},callDeactivate:function(){this.isContentActive=!1,this.deactivate()},calcLeft:function(t){return F(this.isAttached?this.computedLeft:this.calcXOverflow(this.computedLeft,t))},calcTop:function(){return F(this.isAttached?this.computedTop:this.calcYOverflow(this.computedTop))},calcXOverflow:function(t,e){var n=t+e-this.pageWidth+12;return(t=(!this.left||this.right)&&n>0?Math.max(t-n,0):Math.max(t,12))+(window.pageXOffset||document.documentElement.scrollLeft)},calcYOverflow:function(t){var e=this.pageYOffset+(window.innerHeight||document.documentElement.clientHeight),n=this.dimensions,r=n.activator,i=(n.content||{}).height,a=e<t+i;return a&&r.top>i?t=this.pageYOffset+(r.top-i):a&&!this.allowOverflow?t=e-i-12:t<this.pageYOffset&&!this.allowOverflow&&(t=this.pageYOffset+12),t<12?12:t},detectOrigin:function(t,e){var n=parseInt(t.split(\"px\")[0]),r=parseInt(e.split(\"px\")[0]),i=this.dimensions.activator,a=[];return a.push(i.top<r-this.pageYOffset?\"top\":\"bottom\"),a.push(i.left===n?\"left\":\"right\"),this.origin||a.join(\" \")},checkForPageYOffset:function(){this.pageYOffset=this.activatorFixed?0:window.pageYOffset||document.documentElement.scrollTop},checkActivatorFixed:function(){if(!this.isAttached){var t=this.getActivator();this.activatorFixed=function(t){for(var e=[\"fixed\",\"sticky\"],n=t;n;){if(e.includes(window.getComputedStyle(n).position))return!0;n=n.offsetParent}return!1}(t)}},sneakPeek:function(t){var e=this;requestAnimationFrame((function(){var n=e.$refs.content;n&&\"none\"===n.style.display?(n.style.display=\"inline-block\",t(),n.style.display=\"none\"):t()}))},startTransition:function(){var t=this;return new Promise((function(e){return requestAnimationFrame((function(){t.isContentActive=t.isActive,e()}))}))},updateDimensions:function(){var t=this;this.checkActivatorFixed(),this.checkForPageYOffset(),this.pageWidth=window.innerWidth||document.documentElement.clientWidth;var e={},n=this.getActivator();n&&(e.activator=U(n,this.attach),e.activator.offsetLeft=n.offsetLeft,this.isAttached?e.activator.offsetTop=n.offsetTop:e.activator.offsetTop=0,this.sneakPeek((function(){e.content=U(t.$refs.content,t.attach),t.dimensions=e})))}}},{data:function(){return{stackMinZIndex:1e3}},computed:{activeZIndex:function(){var t=this.$refs.content,e=this.isActive?this.getMaxZIndex()+2:V(t);return parseInt(e)}},methods:{getMaxZIndex:function(){var t=this.$el,e=Q(document.getElementsByClassName(\"menu__content--active\")),n=[this.stackMinZIndex,V(t)].concat(Q(e.map((function(t){return V(t)}))));return Math.max.apply(Math,Q(n))}}}],directives:{Resize:{inserted:function(t,e){var n=e.value,r=e.options||{passive:!0},i=!1,a=function(){i||(i=!0,window.requestAnimationFrame(n),i=!1)};window.addEventListener(\"resize\",a,r),Object.assign(t,{onResize:{resizeCallback:a,options:r,running:i}}),e.modifiers&&e.modifiers.quiet||a()},unbind:function(t){if(t.onResize){var e=t.onResize,n=e.resizeCallback,r=e.options;window.removeEventListener(\"resize\",n,r),delete t.onResize}}}},props:{transition:{type:String,default:\"menu-transition\"},origin:{type:String,default:void 0},allowOverflow:{type:Boolean,default:!1},rtl:{type:Boolean,default:!1},minWidth:{type:[Number,String],default:void 0},maxWidth:{type:[Number,String],default:void 0},maxHeight:{type:[Number,String],default:\"auto\"},zIndex:{type:Number,default:void 0},bottomSheet:{type:Boolean,default:!1}},data:function(){return{resizeTimeout:0,defaultOffset:8}},computed:{styles:function(){return{maxHeight:this.calculedMenuMaxHeight,minWidth:this.calculedMenuWidth,maxWidth:this.calculedMaxWidth,top:this.calculedTop,left:this.calculedLeft,transformOrigin:this.detectedOrigin,zIndex:this.zIndex||this.activeZIndex}},calculedMenuMaxHeight:function(){return F(this.maxHeight)},calculedMaxWidth:function(){return F(this.maxWidth)},calculedMenuWidth:function(){if(this.minWidth)return F(this.minWidth);var t=Math.min(this.dimensions.activator.width,Math.max(this.pageWidth-24,0)),e=(parseInt(this.calculedMaxWidth)===1*this.calculedMaxWidth?this.calculedMaxWidth:parseInt((this.calculedMaxWidth||\"\").split(\"px\")[0]))||t;return F(Math.min(e,t))},calculedLeft:function(){var t=Math.max(this.dimensions.content.width,parseFloat(this.calculedMenuWidth));return this.calcLeft(t)||\"0\"},calculedTop:function(){return this.calcTop()||\"0\"},detectedOrigin:function(){return this.detectOrigin(this.calculedLeft,this.calculedTop)}},mounted:function(){this.isActive&&this.callActivate()},methods:{activate:function(){var t=this;this.updateDimensions(),requestAnimationFrame((function(){t.startTransition().then((function(){t.$emit(\"transitionEnd\")}))}))},callDeactivate:function(){this.isContentActive=!1},onResize:function(){this.isActive&&(this.$refs.content.offsetWidth,this.updateDimensions(),clearTimeout(this.resizeTimeout),this.resizeTimeout=setTimeout(this.updateDimensions,100))},genTransition:function(){return this.$createElement(\"transition\",{props:{name:this.transition}},[this.genContent()])},genContent:function(){var t={attrs:{role:this.$attrs.role||\"menu\"},staticClass:\"vd-menu__content\",class:G(G({},this.contentClass&&a({},this.contentClass,!0)),{},{\"vd-menu__content--active\":this.isActive,\"vd-menu__content--fixed\":this.activatorFixed,\"vd-menu__content--bottomsheet\":this.bottomSheet}),style:this.styles,directives:[{name:\"show\",value:this.isContentActive}],ref:\"content\",on:{click:function(t){return t.stopPropagation()}}};return this.$createElement(\"div\",t,[this.hasContent&&this.getContentSlot()])}},render:function(t){var e=this;return t(\"div\",{staticClass:\"vd-menu\",class:{\"menu--attached\":this.isAttached},directives:[{arg:\"500\",name:\"resize\",value:this.onResize}]},[!this.activator&&this.genActivator(),this.showLazyContent((function(){return[e.genTransition()]}))])}};function tt(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function et(t){for(var e=arguments,n=1;n<arguments.length;n++){var r=null!=e[n]?e[n]:{};n%2?tt(Object(r),!0).forEach((function(e){a(t,e,r[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):tt(Object(r)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}))}return t}function nt(t){return Boolean(t)&&Boolean(t.match(/^(#|(rgb|hsl)a?\\()/))}var rt={props:{color:{type:String}},methods:{setBackgroundColor:function(t,e){return nt(t)?e?et(et({},e),{},{style:et(et({},e.style),{},{\"background-color\":\"\".concat(t),\"border-color\":\"\".concat(t)})}):{\"background-color\":\"\".concat(t),\"border-color\":\"\".concat(t)}:e},setTextColor:function(t,e){return nt(t)?e?et(et({},e),{},{style:et(et({},e.style),{},{color:\"\".concat(t)})}):{color:\"\".concat(t)}:e}}},it={close:{path:\"M193.94 256L296.5 153.44l21.15-21.15c3.12-3.12 3.12-8.19 0-11.31l-22.63-22.63c-3.12-3.12-8.19-3.12-11.31 0L160 222.06 36.29 98.34c-3.12-3.12-8.19-3.12-11.31 0L2.34 120.97c-3.12 3.12-3.12 8.19 0 11.31L126.06 256 2.34 379.71c-3.12 3.12-3.12 8.19 0 11.31l22.63 22.63c3.12 3.12 8.19 3.12 11.31 0L160 289.94 262.56 392.5l21.15 21.15c3.12 3.12 8.19 3.12 11.31 0l22.63-22.63c3.12-3.12 3.12-8.19 0-11.31L193.94 256z\",viewBox:\"0 0 320 512\"},calendarAlt:{path:\"M400 64h-48V12c0-6.6-5.4-12-12-12h-8c-6.6 0-12 5.4-12 12v52H128V12c0-6.6-5.4-12-12-12h-8c-6.6 0-12 5.4-12 12v52H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM48 96h352c8.8 0 16 7.2 16 16v48H32v-48c0-8.8 7.2-16 16-16zm352 384H48c-8.8 0-16-7.2-16-16V192h384v272c0 8.8-7.2 16-16 16zM148 320h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12zm96 0h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12zm96 0h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12zm-96 96h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12zm-96 0h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12zm192 0h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12z\",viewBox:\"0 0 448 512\"},chevronLeft:{path:\"M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z\",viewBox:\"0 0 24 24\"},chevronRight:{path:\"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\",viewBox:\"0 0 24 24\"}};function at(){for(var t=arguments,e=arguments.length,n=new Array(e),i=0;i<e;i++)n[i]=t[i];return vue__WEBPACK_IMPORTED_MODULE_2__[\"default\"].extend({mixins:n})}function ot(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function st(t){for(var e=arguments,n=1;n<arguments.length;n++){var r=null!=e[n]?e[n]:{};n%2?ot(Object(r),!0).forEach((function(e){a(t,e,r[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):ot(Object(r)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}))}return t}var ct=at(rt).extend({name:\"VDIcon\",inheritAttrs:!1,props:{size:{type:[Number,String]},disabled:{type:Boolean,default:!1}},computed:{hasClickListener:function(){return Boolean(this.$listeners.click)}},methods:{getIconName:function(){return this.$slots.default?this.$slots.default[0].text&&this.$slots.default[0].text.trim():\"\"},getIcon:function(){var t=this.getIconName();return it[t]||t},getDefaultData:function(){return{staticClass:\"vd-icon\",class:{\"vd-icon--disabled\":this.disabled,\"vd-icon--link\":this.hasClickListener},attrs:st({\"aria-hidden\":!this.hasClickListener,disabled:this.hasClickListener&&this.disabled,type:this.hasClickListener?\"button\":void 0},this.$attrs),on:this.$listeners}},renderSvgIcon:function(t,e){var n=this.hasClickListener?\"button\":\"span\",r=F(this.size),i=st(st({},this.getDefaultData()),{},{style:st({},r&&{fontSize:r,height:r,width:r})}),a={attrs:{xmlns:\"http://www.w3.org/2000/svg\",viewBox:t.viewBox,height:this.size||16,width:this.size||16,role:\"img\",\"aria-hidden\":!0,\"data-icon\":this.getIconName()}};return e(n,this.setTextColor(this.color,i),[e(\"svg\",a,[e(\"path\",{attrs:{fill:\"currentColor\",d:t.path}})])])}},render:function(t){var e=this.getIcon();return this.renderSvgIcon(e,t)}}),lt=at(rt).extend({name:\"VDPickerCustomInput\",inject:[\"VDPicker\"],props:{clearable:{type:Boolean},closeOnClickOutside:{type:Boolean,default:!0},color:{type:String},date:{type:[Object,Date,String]},disabled:{type:Boolean,default:!1},id:{type:String},isDateDefined:{type:Boolean,default:!1},isMenuActive:{type:Boolean,default:!1},name:{type:String},noCalendarIcon:{type:Boolean,default:!1},placeholder:{type:String},tabindex:{type:[String,Number]}},computed:{classes:function(){return{\"vd-picker__input--disabled\":this.disabled,\"vd-picker__input--is-active\":this.isMenuActive,\"vd-picker__input--no-date\":!this.isDateDefined}},computedColor:function(){return this.disabled?\"\":this.isMenuActive?this.color:\"\"},isDirty:function(){return this.isDateDefined}},methods:{onKeyDown:function(t){this.$emit(\"keydown\",t)},clearableCallback:function(){this.$emit(\"clearDate\")},genCalendarIcon:function(){var t=[];this.VDPicker.$slots[\"input-icon\"]?t.push(this.VDPicker.$slots[\"input-icon\"]):t.push(this.$createElement(ct,{props:{disabled:this.disabled}},[\"calendarAlt\"]));var e=this.$createElement(\"div\",{staticClass:\"vd-picker__input-icon__wrapper\"},t);return this.$createElement(\"div\",{staticClass:\"vd-picker__input-icon\"},[e])},genInput:function(){return this.$createElement(\"input\",{attrs:{id:this.id,name:this.name,disabled:this.disabled,\"aria-disabled\":this.disabled,placeholder:this.placeholder,tabindex:this.tabindex,role:\"text\",type:\"text\",readonly:!0,\"aria-readonly\":!0},domProps:{value:this.date},on:{keydown:this.onKeyDown},ref:\"input\"})},genClearIcon:function(){var t=this,e=this.isDirty?\"close\":\"\",n={attrs:{\"aria-label\":\"clearable icon\",color:this.color,disabled:this.disabled},on:{click:function(e){e.preventDefault(),e.stopPropagation(),t.clearableCallback()},mouseup:function(t){t.preventDefault(),t.stopPropagation()}}},r=this.$createElement(\"div\",{staticClass:\"vd-picker__input-clear__icon\"},[this.$createElement(ct,n,e)]);return this.$createElement(\"div\",{staticClass:\"vd-picker__input-clear\"},[r])}},render:function(t){return t(\"div\",this.setTextColor(this.computedColor,{staticClass:\"vd-picker__input\",class:this.classes}),[!this.noCalendarIcon&&this.genCalendarIcon(),this.genInput(),this.clearable&&this.genClearIcon()])}}),ut=at(rt,H).extend({name:\"VDOverlay\",props:{absolute:{type:Boolean,default:!1},color:{type:String,default:\"rgba(93, 106, 137)\"},opacity:{type:[Number,String],default:.84},value:{default:!0},zIndex:{type:[Number,String],default:void 0}},computed:{classes:function(){return{\"vd-overlay--absolute\":this.absolute,\"vd-overlay--active\":this.isActive}},styles:function(){return{zIndex:this.zIndex}},computedOpacity:function(){return Number(this.isActive?this.opacity:0)},overlayInner:function(){var t=this.setBackgroundColor(this.color,{staticClass:\"vd-overlay__inner\",style:{opacity:this.computedOpacity}});return this.$createElement(\"div\",t)}},methods:{genContent:function(){return this.$createElement(\"div\",{staticClass:\"vd-overlay__content\"},this.$slots.default)}},render:function(t){var e=[this.overlayInner];return this.isActive&&e.push(this.genContent()),t(\"div\",{staticClass:\"vd-overlay\",class:this.classes,style:this.styles},e)}}),dt=vue__WEBPACK_IMPORTED_MODULE_2__[\"default\"].extend(ut),ht=vue__WEBPACK_IMPORTED_MODULE_2__[\"default\"].extend({name:\"Overlayable\",props:{overlayColor:{type:String,default:void 0},overlayOpacity:{type:[Number,String],default:void 0}},data:function(){return{overlay:void 0}},beforeDestroy:function(){this.removeOverlay()},methods:{scrollListener:function(t){if(\"keydown\"===t.type){if([\"INPUT\",\"TEXTAREA\",\"SELECT\"].includes(t.target.tagName)||t.target.isContentEditable)return;var e=[w.up,w.pageup],n=[w.down,w.pagedown];if(e.includes(t.keyCode))t.deltaY=-1;else{if(!n.includes(t.keyCode))return;t.deltaY=1}}(t.target===this.overlay||\"keydown\"!==t.type&&t.target===document.body||this.checkPath(t))&&t.preventDefault()},hasScrollbar:function(t){if(!t||t.nodeType!==Node.ELEMENT_NODE)return!1;var e=window.getComputedStyle(t);return[\"auto\",\"scroll\"].includes(e.overflowY)&&t.scrollHeight>t.clientHeight},shouldScroll:function(t,e){return 0===t.scrollTop&&e<0||t.scrollTop+t.clientHeight===t.scrollHeight&&e>0},isInside:function(t,e){return t===e||null!==t&&t!==document.body&&this.isInside(t.parentNode,e)},checkPath:function(t){var e=t.path||this.composedPath(t),n=t.deltaY;if(\"keydown\"===t.type&&e[0]===document.body){var r=this.$refs.dialog,i=window.getSelection()&&window.getSelection().anchorNode;return!(r&&this.hasScrollbar(r)&&this.isInside(i,r))||this.shouldScroll(r,n)}for(var a=0;a<e.length;a++){var o=e[a];if(o===document)return!0;if(o===document.documentElement)return!0;if(o===this.$refs.content)return!0;if(this.hasScrollbar(o))return this.shouldScroll(o,n)}return!0},composedPath:function(t){if(t.composedPath)return t.composedPath();for(var e=[],n=t.target;n;){if(e.push(n),\"HTML\"===n.tagName)return e.push(document),e.push(window),e;n=n.parentElement}return e},hideScroll:function(){window.addEventListener(\"wheel\",this.scrollListener,{passive:!1}),window.addEventListener(\"keydown\",this.scrollListener)},showScroll:function(){document.documentElement.classList.remove(\"overflow-y-hidden\"),window.removeEventListener(\"wheel\",this.scrollListener),window.removeEventListener(\"keydown\",this.scrollListener)},createOverlay:function(){var t=new dt({propsData:{absolute:this.absolute,value:!1,color:this.overlayColor,opacity:this.overlayOpacity}});t.$mount();var e=document.querySelector(\"#app\")||document.querySelector(\"body\"),n=this.absolute?this.$el.parentNode:e;n&&n.insertBefore(t.$el,n.firstChild),this.overlay=t},genOverlay:function(){var t=this;return this.hideScroll(),this.overlay||this.createOverlay(),requestAnimationFrame((function(){t.overlay&&(void 0!==t.activeZIndex?t.overlay.zIndex=String(t.activeZIndex-1):t.$el&&(t.overlay.zIndex=V(t.$el)),t.overlay.value=!0)})),!0},removeOverlay:function(){var t=this,e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.overlay&&(N(this.overlay.$el,\"transitionend\",(function(){t.overlay&&t.overlay.$el&&t.overlay.$el.parentNode&&!t.overlay.value&&(t.overlay.$el.parentNode.removeChild(t.overlay.$el),t.overlay.$destroy(),t.overlay=null)})),this.overlay.value=!1),e&&this.showScroll()}}});var pt=function(t){if(Array.isArray(t))return t};var ft=function(t,e){if(\"undefined\"!=typeof Symbol&&Symbol.iterator in Object(t)){var n=[],r=!0,i=!1,a=void 0;try{for(var o,s=t[Symbol.iterator]();!(r=(o=s.next()).done)&&(n.push(o.value),!e||n.length!==e);r=!0);}catch(t){i=!0,a=t}finally{try{r||null==s.return||s.return()}finally{if(i)throw a}}return n}};var mt=function(){throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")};var vt=function(t,e){return pt(t)||ft(t,e)||J(t,e)||mt()},yt=$((function(t,e){t.exports=function(t,e,n){var r=e.prototype,i=r.format;n.en.ordinal=function(t){var e=[\"th\",\"st\",\"nd\",\"rd\"],n=t%100;return\"[\"+t+(e[(n-20)%10]||e[n]||e[0])+\"]\"},r.format=function(t){var e=this,n=this.$locale(),r=this.$utils(),a=(t||\"YYYY-MM-DDTHH:mm:ssZ\").replace(/\\[([^\\]]+)]|Q|wo|ww|w|gggg|Do|X|x|k{1,2}|S/g,(function(t){switch(t){case\"Q\":return Math.ceil((e.$M+1)/3);case\"Do\":return n.ordinal(e.$D);case\"gggg\":return e.weekYear();case\"wo\":return n.ordinal(e.week(),\"W\");case\"w\":case\"ww\":return r.s(e.week(),\"w\"===t?1:2,\"0\");case\"k\":case\"kk\":return r.s(String(0===e.$H?24:e.$H),\"k\"===t?1:2,\"0\");case\"X\":return Math.floor(e.$d.getTime()/1e3);case\"x\":return e.$d.getTime();default:return t}}));return i.bind(this)(a)}}})),gt=$((function(t,e){t.exports=function(t,e){e.prototype.isSameOrAfter=function(t,e){return this.isSame(t,e)||this.isAfter(t,e)}}})),bt=$((function(t,e){t.exports=function(t,e){e.prototype.isSameOrBefore=function(t,e){return this.isSame(t,e)||this.isBefore(t,e)}}})),Dt=$((function(t,e){t.exports=function(t,e,n){e.prototype.isToday=function(){var t=n();return this.format(\"YYYY-MM-DD\")===t.format(\"YYYY-MM-DD\")}}})),_t=$((function(t,e){var n,r;t.exports=(n=\"month\",r=\"quarter\",function(t,e){var i=e.prototype;i.quarter=function(t){return this.$utils().u(t)?Math.ceil((this.month()+1)/3):this.month(this.month()%3+3*(t-1))};var a=i.add;i.add=function(t,e){return t=Number(t),this.$utils().p(e)===r?this.add(3*t,n):a.bind(this)(t,e)};var o=i.startOf;i.startOf=function(t,e){var i=this.$utils(),a=!!i.u(e)||e;if(i.p(t)===r){var s=this.quarter()-1;return a?this.month(3*s).startOf(n).startOf(\"day\"):this.month(3*s+2).endOf(n).endOf(\"day\")}return o.bind(this)(t,e)}})})),kt=$((function(t,e){t.exports=function(t,e,n){var r=(new Date).getTimezoneOffset(),i=e.prototype;n.utc=function(t,n){return new e({date:t,utc:!0,format:n})},i.utc=function(){return n(this.toDate(),{locale:this.$L,utc:!0})},i.local=function(){return n(this.toDate(),{locale:this.$L,utc:!1})};var a=i.parse;i.parse=function(t){t.utc&&(this.$u=!0),this.$utils().u(t.$offset)||(this.$offset=t.$offset),a.call(this,t)};var o=i.init;i.init=function(){if(this.$u){var t=this.$d;this.$y=t.getUTCFullYear(),this.$M=t.getUTCMonth(),this.$D=t.getUTCDate(),this.$W=t.getUTCDay(),this.$H=t.getUTCHours(),this.$m=t.getUTCMinutes(),this.$s=t.getUTCSeconds(),this.$ms=t.getUTCMilliseconds()}else o.call(this)};var s=i.utcOffset;i.utcOffset=function(t){var e=this.$utils().u;if(e(t))return this.$u?0:e(this.$offset)?s.call(this):this.$offset;var n,i=Math.abs(t)<=16?60*t:t;return 0!==t?(n=this.local().add(i+r,\"minute\")).$offset=i:n=this.utc(),n};var c=i.format;i.format=function(t){var e=t||(this.$u?\"YYYY-MM-DDTHH:mm:ss[Z]\":\"\");return c.call(this,e)},i.valueOf=function(){var t=this.$utils().u(this.$offset)?0:this.$offset+r;return this.$d.valueOf()-6e4*t},i.isUTC=function(){return!!this.$u},i.toISOString=function(){return this.toDate().toISOString()},i.toString=function(){return this.toDate().toUTCString()}}})),Ot=$((function(t,e){t.exports=function(t,e){e.prototype.weekday=function(t){var e=this.$locale().weekStart||0,n=this.$W,r=(n<e?n+7:n)-e;return this.$utils().u(t)?r:this.subtract(r,\"day\").add(t,\"day\")}}})),Mt=$((function(t,e){var n,r;t.exports=(n=\"week\",r=\"year\",function(t,e){var i=e.prototype;i.week=function(t){if(void 0===t&&(t=null),null!==t)return this.add(7*(t-this.week()),\"day\");var e=this.$locale().yearStart||1;if(11===this.month()&&this.date()>25){var i=this.startOf(r).add(1,r).date(e),a=this.endOf(n);if(i.isBefore(a))return 1}var o=this.startOf(r).date(e).startOf(n).subtract(1,\"millisecond\"),s=this.diff(o,n,!0);return s<0?this.startOf(\"week\").week():Math.ceil(s)},i.weeks=function(t){return void 0===t&&(t=null),this.week(t)}})}));function wt(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"date\";return v[t]}function Yt(t,e){var n=t.regexText,r=t.startDate,i=t.endDate,a=n.replace(M,\"\".concat(r).concat(e?\"|\":\"\")).replace(M,\"\".concat(i).concat(e?\"|\":\"\"));return e?a.split(\"|\"):a}function St(t){return 3*t}function xt(t){var e=t.date,n=t.min,r=t.max,i=t.type,a=void 0===i?\"date\":i,o=t.allowedFn,s=e.format(wt(a));return(!o||o(s))&&(!n||$t(s,n,a)||jt(s,n,a))&&(!r||$t(s,r,a)||Lt(s,r,a))}function Ct(t){var e=t.date,n=t.type,r=void 0===n?\"date\":n,i=t.locale;return $t(Et({date:e,locale:i,format:wt(r)}),Et({date:void 0,locale:i,format:wt(r)}),\"quarter\"===r?\"month\":r)}function $t(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:\"date\";return dayjs__WEBPACK_IMPORTED_MODULE_1___default()(t,wt(n)).isSame(dayjs__WEBPACK_IMPORTED_MODULE_1___default()(e,wt(n)),n)}function Lt(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:\"day\";if(\"year\"===n)return Boolean(e)&&t<dayjs__WEBPACK_IMPORTED_MODULE_1___default()(e,\"YYYY-MM-DD\").get(n);var r=dayjs__WEBPACK_IMPORTED_MODULE_1___default().isDayjs(t)?t:dayjs__WEBPACK_IMPORTED_MODULE_1___default()(t).startOf(\"day\");return Boolean(e)&&r.isBefore(dayjs__WEBPACK_IMPORTED_MODULE_1___default()(e).startOf(\"day\"),n)}function jt(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:\"day\";if(\"year\"===n)return Boolean(e)&&t>dayjs__WEBPACK_IMPORTED_MODULE_1___default()(e,\"YYYY-MM-DD\").get(n);var r=dayjs__WEBPACK_IMPORTED_MODULE_1___default().isDayjs(t)?t:dayjs__WEBPACK_IMPORTED_MODULE_1___default()(t).startOf(\"day\");return Boolean(e)&&r.isAfter(dayjs__WEBPACK_IMPORTED_MODULE_1___default()(e).startOf(\"day\"),n)}function Pt(t,e,n){return jt(t,e)&&Lt(t,n)}function Tt(t){var e=t.date,n=t.locale,r=void 0===n?{lang:o}:n,a=t.type;return\"year\"===(void 0===a?\"date\":a)?dayjs__WEBPACK_IMPORTED_MODULE_1___default()(e).utc():dayjs__WEBPACK_IMPORTED_MODULE_1___default()(e).locale(r.lang)}function Et(t){var e=t.date,n=t.locale,r=t.format;return Tt({date:e,locale:n}).format(r)}function At(t){var e=t.year,n=t.month;return Tt({locale:t.locale}).year(e).month(n).startOf(\"month\")}function Ht(t){var e=t.startDate,n=t.endDate,r=t.locale,i=t.interval,a=void 0===i?\"day\":i,o=Tt({date:e,locale:r}),s=Tt({date:n,locale:r}).diff(o,a);return Q(Array(s+1).keys()).map((function(t){return o.add(t,a)}))}function Nt(t){var e=t.headerFormat,n=t.locale,r=t.date,i=t.range,a=t.rangeHeaderText;if(i&&a){var o=Ft({dates:r,locale:n,format:e}).split(\" ~ \"),s=vt(o,2),c=Yt({regexText:a,startDate:s[0],endDate:s[1]},!0),l=vt(c,2),u=l[0],d=l[1];return[u.trim(),d.trim()]}return r?Et({date:r,locale:n,format:e}):\"--\"}function Bt(t){var e=t.date,n=t.type,r=t.locale;if(e)return Et({date:e,locale:r,format:wt(n)})}function Ft(t){var e=t.dates,n=void 0===e?{}:e,r=t.locale,i=t.format,a=n.start,o=n.end;return a||o?!a&&o?\"__ ~ \".concat(Tt({date:o,locale:r}).startOf(\"day\").format(i)):a&&!o?\"\".concat(Tt({date:a,locale:r}).startOf(\"day\").format(i),\" ~ __\"):\"\".concat(Tt({date:a,locale:r}).startOf(\"day\").format(i),\" ~ \").concat(Tt({date:o,locale:r}).startOf(\"day\").format(i)):\"__ ~ __\"}dayjs__WEBPACK_IMPORTED_MODULE_1___default().extend(yt),dayjs__WEBPACK_IMPORTED_MODULE_1___default().extend(gt),dayjs__WEBPACK_IMPORTED_MODULE_1___default().extend(bt),dayjs__WEBPACK_IMPORTED_MODULE_1___default().extend(Dt),dayjs__WEBPACK_IMPORTED_MODULE_1___default().extend(_t),dayjs__WEBPACK_IMPORTED_MODULE_1___default().extend(kt),dayjs__WEBPACK_IMPORTED_MODULE_1___default().extend(Ot),dayjs__WEBPACK_IMPORTED_MODULE_1___default().extend(Mt);var It=at(rt).extend({name:\"VDPickerControls\",props:{pickerDate:{type:Object,required:!0},transitionName:{type:String},color:{type:String},mode:{type:String,default:\"date\"},min:{type:[String,Number,Date]},max:{type:[String,Number,Date]}},computed:{monthFormatted:function(){return this.pickerDate.getMonthFormatted()},yearFormatted:function(){return this.pickerDate.getYearFormatted()},isPreviousDateDisabled:function(){var t=[\"month\",\"quarter\"].includes(this.mode),e=parseInt(this.yearFormatted,10)-1;return Lt(t?e:\"\".concat(this.yearFormatted,\"-\").concat(this.pickerDate.month),this.min,t?\"year\":\"month\")},isNextDateDisabled:function(){var t=[\"month\",\"quarter\"].includes(this.mode),e=parseInt(this.yearFormatted,10)+1;return jt(t?e:\"\".concat(this.yearFormatted,\"-\").concat(this.pickerDate.month+2),this.max,t?\"year\":\"month\")}},methods:{onNavigationClick:function(t){this.$emit(\"on-navigation-click\",t)},genPrevButton:function(){var t=this,e=this.$createElement(ct,\"chevronLeft\");return this.$createElement(\"button\",{staticClass:\"vd-picker__controls-prev\",attrs:{disabled:this.isPreviousDateDisabled,type:\"button\"},on:{click:function(){return t.onNavigationClick(\"prev\")}}},[e])},genNextButton:function(){var t=this,e=this.$createElement(ct,\"chevronRight\");return this.$createElement(\"button\",{staticClass:\"vd-picker__controls-next\",attrs:{disabled:this.isNextDateDisabled,type:\"button\"},on:{click:function(){return t.onNavigationClick(\"next\")}}},[e])},genSelectors:function(){return this.$createElement(\"div\",{staticClass:\"vd-picker__controls-wrapper\"},[\"date\"===this.mode&&this.genMonthSelector(),this.genYearSelector()])},genChildrenSelectors:function(t){var e=this,n=t.value,r=t.key,i=t.type;return this.$createElement(\"div\",this.setTextColor(this.color,{key:r,staticClass:\"vd-picker__controls-label\"}),[this.$createElement(\"button\",{attrs:{type:\"button\"},on:{click:function(){return e.$emit(\"update-mode\",i)}}},[n])])},genMonthSelector:function(){var t=this;return this.$createElement(\"transition-group\",{staticClass:\"vd-picker__controls-month\",props:{name:this.transitionName,tag:\"span\"}},[this.pickerDate.month].map((function(e){return t.genChildrenSelectors({value:t.monthFormatted,key:e,type:\"month\"})})))},genYearSelector:function(){var t=this;return this.$createElement(\"transition-group\",{staticClass:\"vd-picker__controls-year\",class:{\"vd-picker__controls-year--center\":[\"month\",\"quarter\"].includes(this.mode)},props:{name:this.transitionName,tag:\"span\"}},[this.pickerDate.year].map((function(e){return t.genChildrenSelectors({value:t.yearFormatted,key:e,type:\"year\"})})))}},render:function(t){return t(\"div\",{staticClass:\"vd-picker__controls\"},[this.genPrevButton(),this.genSelectors(),this.genNextButton()])}});function Vt(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function zt(t){for(var e=arguments,n=1;n<arguments.length;n++){var r=null!=e[n]?e[n]:{};n%2?Vt(Object(r),!0).forEach((function(e){a(t,e,r[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):Vt(Object(r)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}))}return t}var Wt=at(rt).extend({name:\"VDPickerHeader\",props:{formattedHeaderYear:{type:String},formattedHeaderDate:{type:[Array,String]},color:{type:String},mode:{type:String},mutableDate:{type:[String,Object]},range:{type:Boolean},transitionName:{type:String},type:{tpye:Boolean}},computed:{classes:function(){return a({\"vd-picker-header--range\":this.range},\"vd-picker-header--\".concat(this.type),this.type)},year:function(){return this.mutableDate?this.formattedHeaderYear:\"-\"},dateFormatted:function(){return this.formattedHeaderDate},isDateVisible:function(){return!this.range&&\"year\"!==this.type}},methods:{genYear:function(){var t=this,e=this.$createElement(\"span\",{staticClass:\"vd-picker-header__year-button\",on:{click:function(){return t.$emit(\"update-mode\",\"year\")}}},[this.year]),n={staticClass:\"vd-picker-header__year\",class:{\"vd-picker-header__year--active\":\"year\"===this.mode}};return this.$createElement(\"div\",n,[e])},genDate:function(){var t=this,e=this.genTransitionGroup({date:this.dateFormatted,isActive:\"year\"!==this.mode,onClick:function(){return t.$emit(\"update-mode\",\"date\")}});return this.$createElement(\"div\",{staticClass:\"vd-picker-header__wrap\"},[e])},genRangeDate:function(){var t=this.genTransitionGroup({date:this.dateFormatted[0],isActive:Boolean(this.mutableDate.start)}),e=this.genTransitionGroup({date:this.dateFormatted[1],isActive:Boolean(this.mutableDate.end)});return this.$createElement(\"div\",{staticClass:\"vd-picker-header__wrap\"},[t,e])},genTransitionGroup:function(t){var e=this,n=t.date,r=t.isActive,i=t.onClick;return this.$createElement(\"transition-group\",{staticClass:\"vd-picker-header__date\",class:{\"vd-picker-header__date--active\":r},props:{name:this.transitionName,tag:\"div\"}},[n].map((function(t){return function(t){return e.$createElement(\"span\",{staticClass:\"vd-picker-header__wrap-button\",key:t,on:zt({},i&&{click:i})},[t])}(t)})))}},render:function(t){return t(\"div\",this.setBackgroundColor(this.color,{staticClass:\"vd-picker-header\",class:this.classes}),[!this.range&&this.genYear(),this.isDateVisible&&this.genDate(),this.range&&this.genRangeDate()])}});function qt(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function Rt(t){for(var e=arguments,n=1;n<arguments.length;n++){var r=null!=e[n]?e[n]:{};n%2?qt(Object(r),!0).forEach((function(e){a(t,e,r[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):qt(Object(r)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}))}return t}var Jt=at(rt,x).extend({name:\"VDPickerPresets\",props:{rangePresets:{type:Array},mutableDate:{type:Object},minDate:{type:[String,Number,Date]},maxDate:{type:[String,Number,Date]},color:{type:String}},computed:{presetsFormatted:function(){var t=this;if(this.rangePresets)return this.rangePresets.map((function(e){return Rt(Rt({},e),{},{availableDates:(n={dates:e.dates,minDate:t.minDate,maxDate:t.maxDate,locale:t.currentLocale},r=n.dates,a=void 0===r?{}:r,o=n.minDate,s=n.maxDate,c=n.locale,l=a.start,u=a.end,d=o||Tt({locale:c}).year(g),h=s||Tt({locale:c}).year(b),Ht({startDate:l,endDate:u,locale:c}).filter((function(t){return t.isSameOrAfter(d,\"day\")&&t.isSameOrBefore(dayjs__WEBPACK_IMPORTED_MODULE_1___default()(h,\"day\"))})))});var n,r,a,o,s,c,l,u,d,h})).splice(0,6)}},methods:{isPresetSelected:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.availableDates,n=void 0===e?[]:e;return!(0===n.length||!this.mutableDate)&&($t(n[0],this.mutableDate.start)&&$t(n[n.length-1],this.mutableDate.end))},isPresetValid:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.availableDates,n=void 0===e?[]:e;return!!this.mutableDate&&n.length>0},setPresetDates:function(t){var e=t.availableDates;this.isPresetSelected({availableDates:e})||this.$emit(\"update-range\",{start:e[0],end:e[e.length-1]})},genWrapper:function(){return this.$createElement(\"div\",{staticClass:\"vd-picker-presets__wrapper\"},this.presetsFormatted.map(this.genButton))},genButton:function(t,e){var n=this,r=this.$createElement(\"div\",this.setBackgroundColor(this.color,{staticClass:\"vd-picker-preset__effect\"})),i=this.$createElement(\"div\",{staticClass:\"vd-picker-preset__name\",domProps:{innerHTML:t.name}});return this.$createElement(\"button\",{key:e,staticClass:\"vd-picker-preset\",class:{\"vd-picker-preset--selected\":this.isPresetSelected(t),\"vd-picker-preset--disabled\":!this.isPresetValid(t)},attrs:{type:\"button\"},on:{click:function(){return n.setPresetDates(t)}}},[r,i])}},render:function(t){if(this.presetsFormatted)return t(\"div\",{staticClass:\"vd-picker-presets\"},[this.genWrapper()])}});function Xt(t,e){var n=t.changedTouches[0];e.touchendX=n.clientX,e.touchendY=n.clientY,e.end&&e.end(Object.assign(t,e)),function(t){var e=t.touchstartX,n=t.touchendX,r=t.touchstartY,i=t.touchendY;t.offsetX=n-e,t.offsetY=i-r,Math.abs(t.offsetY)<.5*Math.abs(t.offsetX)&&(t.left&&n<e-16&&t.left(t),t.right&&n>e+16&&t.right(t)),Math.abs(t.offsetX)<.5*Math.abs(t.offsetY)&&(t.up&&i<r-16&&t.up(t),t.down&&i>r+16&&t.down(t))}(e)}function Qt(t){var e={touchstartX:0,touchstartY:0,touchendX:0,touchendY:0,touchmoveX:0,touchmoveY:0,offsetX:0,offsetY:0,left:t.left,right:t.right,up:t.up,down:t.down,start:t.start,move:t.move,end:t.end};return{touchstart:function(t){return function(t,e){var n=t.changedTouches[0];e.touchstartX=n.clientX,e.touchstartY=n.clientY,e.start&&e.start(Object.assign(t,e))}(t,e)},touchend:function(t){return Xt(t,e)},touchmove:function(t){return function(t,e){var n=t.changedTouches[0];e.touchmoveX=n.clientX,e.touchmoveY=n.clientY,e.move&&e.move(Object.assign(t,e))}(t,e)}}}var Ut={inserted:function(t,e,n){var r=e.value,i=r.parent?t.parentElement:t,a=r.options||{passive:!0};if(i){var o=Qt(e.value);i._touchHandlers=Object(i._touchHandlers),i._touchHandlers[n.context._uid]=o,Object.keys(o).forEach((function(t){i.addEventListener(t,o[t],a)}))}},unbind:function(t,e,n){var r=e.value.parent?t.parentElement:t;if(r&&r._touchHandlers){var i=r._touchHandlers[n.context._uid];Object.keys(i).forEach((function(t){r.removeEventListener(t,i[t])})),delete r._touchHandlers[n.context._uid]}}};function Zt(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}var Gt=at(rt,x).extend({name:\"VDPickerTableDay\",inject:[\"VDPicker\"],props:{allowedDates:{type:Function},color:{type:String},day:{type:Object,required:!0},maxDate:{type:[String,Number,Date]},minDate:{type:[String,Number,Date]},mutableDate:{type:[String,Object]},range:{type:Boolean},rangeCurrentHoveredDay:{type:String,default:void 0}},computed:{classes:function(){return{\"vd-picker__table-day--selected\":this.isSelected&&!this.isDisabled,\"vd-picker__table-day--between\":this.range&&this.isBetween,\"vd-picker__table-day--in-range\":this.range&&this.isInRange,\"vd-picker__table-day--first\":this.range&&this.firstInRange,\"vd-picker__table-day--last\":this.range&&this.lastInRange&&Boolean(this.mutableDate.end),\"vd-picker__table-day--select-start\":this.range&&!this.mutableDate.start,\"vd-picker__table-day--select-end\":this.range&&this.mutableDate.start&&!this.mutableDate.end,\"vd-picker__table-day--disabled\":this.isDisabled}},formattedDay:function(){return this.day.format(\"D\")},isCurrent:function(){return Ct({date:this.day,type:\"date\",locale:this.currentLocale})},isSelected:function(){return this.range?[].concat(Q(this.mutableDate.start?[this.mutableDate.start.startOf(\"day\").unix()]:[]),Q(this.mutableDate.end?[this.mutableDate.end.startOf(\"day\").unix()]:[])).includes(this.day.unix()):this.mutableDate&&this.mutableDate.startOf(\"day\").unix()===this.day.unix()},isBetween:function(){return!(!this.mutableDate.start&&!this.mutableDate.end)&&Pt(this.day,this.mutableDate.start,this.mutableDate.end)},isInRange:function(){return!!this.rangeCurrentHoveredDay&&(Lt(this.rangeCurrentHoveredDay,this.mutableDate.end)?Pt(this.day,this.rangeCurrentHoveredDay,this.mutableDate.end):Pt(this.day,this.mutableDate.start,this.rangeCurrentHoveredDay))},firstInRange:function(){return this.mutableDate.start&&this.mutableDate.start.startOf(\"day\").unix()===this.day.unix()},lastInRange:function(){return this.mutableDate.end&&this.mutableDate.end.startOf(\"day\").unix()===this.day.unix()},isDateAllowed:function(){return xt({date:this.day,min:this.minDate,max:this.maxDate,allowedFn:this.allowedDates})},isDisabled:function(){return!this.isDateAllowed},scopedSlotDay:function(){return I(this.VDPicker,\"day\")}},methods:{onDayClick:function(t){this.$emit(\"select-day\",t)},genWrapper:function(){return this.$createElement(\"div\",{staticClass:\"vd-picker__table-day__wrapper\",attrs:{\"data-date\":this.day.format(\"YYYY-MM-DD\")}},[this.isCurrent&&this.genDayCurrent(),this.genDayEffect(),this.genDayText()])},genDayCurrent:function(){return this.$createElement(\"span\",{staticClass:\"vd-picker__table-day__current\"})},genDayEffect:function(){return this.$createElement(\"span\",{staticClass:\"vd-picker__table-day__effect\"})},genDayText:function(){if(!this.scopedSlotDay)return this.$createElement(\"span\",{staticClass:\"vd-picker__table-day__text\"},[this.formattedDay]);var t={formattedDay:this.formattedDay,isCurrent:this.isToday,isSelected:this.isSelected&&!this.isDisabled,isBetween:this.range&&this.isBetween,isInRange:this.range&&this.isInRange,isFirstRangeDay:this.range&&this.firstInRange,isLastRangeDay:this.range&&this.lastInRange&&Boolean(this.mutableDate.end),isFirstSelectedDay:this.range&&!this.mutableDate.start,isLastSelectedDay:this.range&&this.mutableDate.start&&!this.mutableDate.end,isDisabled:this.isDisabled},e=this.VDPicker.$scopedSlots.day(function(t){for(var e=arguments,n=1;n<arguments.length;n++){var r=null!=e[n]?e[n]:{};n%2?Zt(Object(r),!0).forEach((function(e){a(t,e,r[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):Zt(Object(r)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}))}return t}({day:this.formattedDay},t));return this.$createElement(\"span\",{staticClass:\"vd-picker__table-day__text\"},[e])}},render:function(t){var e=this,n={staticClass:\"vd-picker__table-day\",class:this.classes,attrs:{type:\"button\",disabled:this.isDisabled,\"data-date\":this.day.format(\"YYYY-MM-DD\")},on:{click:function(){return e.onDayClick(e.day)}}};return t(\"button\",this.setTextColor(this.color,n),[this.genWrapper()])}}),Kt=at(rt).extend({name:\"VDPickerTableDate\",directives:{Touch:Ut},props:{allowedDates:{type:Function},color:{type:String},pickerDate:{type:[String,Object]},isRangeSelected:{type:Boolean},maxDate:{type:[String,Number,Date]},minDate:{type:[String,Number,Date]},mutableDate:{type:[String,Object]},range:{type:Boolean},transitionName:{type:String}},data:function(){return{rangeCurrentHoveredDay:void 0}},computed:{weekDays:function(){return this.pickerDate.getWeekDays()},spaceBeforeFirstDay:function(){return Q(Array(this.pickerDate.getWeekStart()).keys())}},watch:{rangeCurrentHoveredDay:function(t){t&&this.$emit(\"update-hovered-day\",t)}},methods:{onDayClick:function(t){this.rangeCurrentHoveredDay=void 0,this.$emit(\"select-date\",t)},handleMouseMove:function(t){var e=t.target,n=\"string\"==typeof e.className&&\"vd-picker__table-days\"===e.className.split(\" \")[0];if(this.range&&!this.isRangeSelected&&!n){var r=e.dataset.date;if(!r)return this.handleMouseMove({target:e.parentNode});var i=r===this.rangeCurrentHoveredDay;r&&!i&&(this.rangeCurrentHoveredDay=e.dataset.date)}},genWeek:function(){var t=this;return this.$createElement(\"div\",{staticClass:\"vd-picker__table-week\"},this.weekDays.map((function(e,n){return t.$createElement(\"div\",{key:n,domProps:{innerHTML:e},staticClass:\"vd-picker__table-weekday\"})})))},genDaysWrapper:function(){return this.$createElement(\"transition-group\",{staticClass:\"vd-picker__table-days__wrapper\",props:{name:this.transitionName,tag:\"div\"}},[this.pickerDate].map(this.genDays))},genDays:function(t){var e=this;return this.$createElement(\"div\",{staticClass:\"vd-picker__table-days\",key:t.month,on:{mousemove:this.handleMouseMove}},[this.spaceBeforeFirstDay.map((function(t){return e.$createElement(\"div\",{staticClass:\"vd-picker__table-day\",key:\"space-\".concat(t)})})),this.pickerDate.getDays().map(this.genDay)])},genDay:function(t,e){return this.$createElement(Gt,{key:e,props:{allowedDates:this.allowedDates,color:this.color,day:t,maxDate:this.maxDate,minDate:this.minDate,mutableDate:this.mutableDate,range:this.range,rangeCurrentHoveredDay:this.rangeCurrentHoveredDay,locale:this.currentLocale},on:{\"select-day\":this.onDayClick}})}},render:function(t){var e=this;return t(\"div\",{staticClass:\"vd-picker__table\",directives:[{name:\"touch\",value:{left:function(){return e.$emit(\"update-month\",\"next\")},right:function(){return e.$emit(\"update-month\",\"prev\")}}}],on:{touchstart:function(t){return t.stopPropagation()}}},[this.genWeek(),this.genDaysWrapper()])}}),te={name:\"VDPickerValidate\",mixins:[rt],props:{buttonValidate:{type:String},buttonCancel:{type:String},color:{type:String},range:{type:Boolean},mutableDate:{type:Object}},computed:{isDisabledValidation:function(){return!!this.range&&(\"object\"!==L(this.mutableDate)||!Object.values(this.mutableDate).every((function(t){return Boolean(t)})))}},methods:{genButtonCancel:function(){var t=this;return this.$createElement(\"button\",{staticClass:\"vd-picker-validate__button vd-picker-validate__button-cancel\",attrs:{type:\"button\"},on:{click:function(){return t.$emit(\"cancel\")}}},[this.genButtonEffect(),this.genButtonText(this.buttonCancel)])},genButtonValidate:function(){var t=this;return this.$createElement(\"button\",this.setTextColor(this.color,{staticClass:\"vd-picker-validate__button vd-picker-validate__button-validate\",attrs:{type:\"button\",disabled:this.isDisabledValidation},on:{click:function(){return t.$emit(\"validate\")}}}),[this.genButtonEffect(),this.genButtonText(this.buttonValidate)])},genButtonEffect:function(){return this.$createElement(\"div\",this.setBackgroundColor(this.color,{staticClass:\"vd-picker-validate__effect\"}))},genButtonText:function(t){return this.$createElement(\"div\",{staticClass:\"vd-picker-validate__name\",domProps:{innerHTML:t}})}},render:function(t){return t(\"div\",{staticClass:\"vd-picker-validate\"},[this.genButtonCancel(),this.genButtonValidate()])}};function ee(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function ne(t){for(var e=arguments,n=1;n<arguments.length;n++){var r=null!=e[n]?e[n]:{};n%2?ee(Object(r),!0).forEach((function(e){a(t,e,r[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):ee(Object(r)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}))}return t}var re=at(rt,x).extend({name:\"VDPickerMonths\",props:{active:{type:Boolean,default:!1},allowedDates:{type:Function},color:{type:String,default:String},pickerDate:{type:Object,default:Object},max:{type:[String,Number,Date]},min:{type:[String,Number,Date]},mutableDate:{type:Object,default:void 0},range:{type:Boolean,default:!1},transitionName:{type:String,default:String},type:{type:String},visibleYearsNumber:{type:Number,default:10}},computed:{yearFormatted:function(){return this.pickerDate.getYearFormatted()},getMonths:function(){return this.pickerDate.getMonths()}},methods:{isCurrent:function(t){return Ct({date:At({year:this.pickerDate.year,month:t,locale:this.currentLocale}),type:\"month\",locale:this.currentLocale})},isSelected:function(t){if(this.range||!this.mutableDate)return!1;var e=At({year:this.pickerDate.year,month:t,locale:this.currentLocale});return $t(this.mutableDate.format(\"YYYY-MM\"),e.format(\"YYYY-MM\"),\"month\")},isAllowed:function(t){return xt({date:At({year:this.yearFormatted,month:t,locale:this.currentLocale}),min:this.min,max:this.max,type:\"month\",allowedFn:this.allowedDates})},genTransition:function(){return this.$createElement(\"transition-group\",{staticClass:\"vd-picker__months-inner\",props:{tag:\"div\",name:this.transitionName}},[this.pickerDate.year].map(this.genMonthList))},genMonthList:function(t){return this.$createElement(\"div\",{staticClass:\"vd-picker__months-list\",key:t},[this.getMonths.map(this.genMonthButton)])},genMonthButton:function(t,e){var n=this,r=this.isCurrent(e)&&!this.isSelected(e),i=this.isSelected(e),a=this.$createElement(\"button\",{key:e,staticClass:\"vd-picker__months-button\",style:ne(ne({},r&&{\"border-color\":this.color}),i&&ne(ne({},this.setTextColor(\"#fff\")),this.setBackgroundColor(this.color))),attrs:{type:\"button\",disabled:!this.isAllowed(e)},on:{click:function(){return n.$emit(\"input\",e,\"month\")}}},[t]);return this.$createElement(\"div\",{staticClass:\"vd-picker__months-button__wrapper\"},[a])}},render:function(t){return t(\"div\",{staticClass:\"vd-picker__months\"},[this.genTransition()])}});function ie(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function ae(t){for(var e=arguments,n=1;n<arguments.length;n++){var r=null!=e[n]?e[n]:{};n%2?ie(Object(r),!0).forEach((function(e){a(t,e,r[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):ie(Object(r)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}))}return t}var oe=at(rt,x).extend({name:\"VDPickerQuarters\",props:{active:{type:Boolean,default:!1},allowedDates:{type:Function},color:{type:String,default:String},pickerDate:{type:Object,default:Object},max:{type:[String,Number,Date]},min:{type:[String,Number,Date]},mutableDate:{type:Object,default:void 0},transitionName:{type:String,default:String}},computed:{getQuarters:function(){return this.pickerDate.getQuarters()}},methods:{isCurrent:function(t){return Ct({date:At({year:this.pickerDate.year,month:t,locale:this.currentLocale}),type:\"quarter\",locale:this.currentLocale})},isSelected:function(t){if(!this.mutableDate)return!1;var e=At({year:this.pickerDate.year,month:t,locale:this.currentLocale});return $t(this.mutableDate.format(\"YYYY-MM\"),e.format(\"YYYY-MM\"),\"month\")},isAllowed:function(t){return xt({date:At({year:this.pickerDate.year,month:t,locale:this.currentLocale}),min:this.min,max:this.max,type:\"month\",allowedFn:this.allowedDates})},genTransition:function(){return this.$createElement(\"transition-group\",{staticClass:\"vd-picker__quarters-inner\",props:{tag:\"div\",name:this.transitionName}},[this.pickerDate.year].map(this.genQuarterList))},genQuarterList:function(t){return this.$createElement(\"div\",{staticClass:\"vd-picker__quarters-list\",key:t},[this.getQuarters.map(this.genQuarterButton)])},genQuarterButton:function(t,e){var n=this,r=St(e),i=this.isCurrent(r)&&!this.isSelected(r),a=this.isSelected(r),o=this.$createElement(\"button\",{key:e,staticClass:\"vd-picker__quarters-button\",style:ae(ae({},i&&{\"border-color\":this.color}),a&&ae(ae({},this.setTextColor(\"#fff\")),this.setBackgroundColor(this.color))),attrs:{type:\"button\",disabled:!this.isAllowed(e)},on:{click:function(){return n.$emit(\"input\",e,\"quarter\")}}},[t]);return this.$createElement(\"div\",{staticClass:\"vd-picker__quarters-button__wrapper\"},[o])}},render:function(t){return t(\"div\",{staticClass:\"vd-picker__quarters\"},[this.genTransition()])}});function se(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function ce(t){for(var e=arguments,n=1;n<arguments.length;n++){var r=null!=e[n]?e[n]:{};n%2?se(Object(r),!0).forEach((function(e){a(t,e,r[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):se(Object(r)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}))}return t}var le=at(rt).extend({name:\"VDPickerYears\",props:{active:{type:Boolean,default:!1},allowedDates:{type:Function},color:{type:String,default:String},mutableDate:{type:Object,default:void 0},pickerDate:{type:Object,default:Object},max:{type:[String,Number,Date]},min:{type:[String,Number,Date]},visibleYearsNumber:{type:Number,default:10},range:{type:Boolean,default:!1}},computed:{yearFormatted:function(){return this.pickerDate.getYearFormatted()},activeYear:function(){if(!this.range)return this.mutableDate&&this.mutableDate.format(\"YYYY\")},getYears:function(){return this.pickerDate.generateYearsRange({activeYear:this.activeYear,visibleYearsNumber:this.visibleYearsNumber,min:this.min,max:this.max})}},watch:{active:{handler:function(t){t&&!this.range&&setTimeout(this.computeScrollPosition)},immediate:!0}},methods:{isCurrent:function(t){return Ct({date:At({year:t,month:0,locale:this.currentLocale}),type:\"year\",locale:this.currentLocale})},isSelected:function(t){return this.activeYear===String(t)},isAllowed:function(t){return xt({date:At({year:t,month:0,locale:this.currentLocale}),min:this.min,max:this.max,type:\"year\",allowedFn:this.allowedDates})},computeScrollPosition:function(){var t=this.$el.getElementsByClassName(\"active\")[0];this.$el.scrollTop=function(t){var e=t.activeItem,n=t.container,r=t.min,i=t.max;return e?e.offsetTop-n.offsetHeight/2+e.offsetHeight/2:r||i?0:n.scrollHeight/2-n.offsetHeight/2}({activeItem:t,container:this.$el,min:this.min,max:this.max})},genYearButton:function(t){var e=this,n=this.isCurrent(t)&&!this.isSelected(t),r=this.isSelected(t);return this.$createElement(\"li\",{key:t,staticClass:\"vd-picker__years-button\",class:{active:this.isSelected(t)},style:ce(ce({},n&&{\"border-color\":this.color}),r&&ce(ce({},this.setTextColor(\"#fff\")),this.setBackgroundColor(this.color))),attrs:{disabled:!this.isAllowed(t)},on:{click:function(){return e.$emit(\"input\",t,\"year\")}}},[t])}},render:function(t){var e=this;return t(\"ul\",{staticClass:\"vd-picker__years\"},this.getYears.map((function(t){return e.genYearButton(t)})))}});var ue=function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")};function de(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}var he=function(t,e,n){return e&&de(t.prototype,e),n&&de(t,n),t},pe=function(){function t(e,n){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{lang:o};ue(this,t),dayjs__WEBPACK_IMPORTED_MODULE_1___default().locale(r.lang),this.locale=r,this.start=dayjs__WEBPACK_IMPORTED_MODULE_1___default()().year(n).month(e).startOf(\"month\"),this.end=this.start.endOf(\"month\"),this.month=e,this.year=n}return he(t,[{key:\"getWeekStart\",value:function(){return this.start.weekday()}},{key:\"getDays\",value:function(){return Array.from(Ht({startDate:this.start,endDate:this.end,locale:this.locale}))}},{key:\"getWeekDays\",value:function(){var t=this.locale,e=t.lang,n=t.weekDays,r=Q(e.weekdaysShort);return e.weekStart&&1===e.weekStart&&r.push(r.shift()),n||r}},{key:\"getMonths\",value:function(){return Array.apply(0,Array(12)).map((function(t,e){return dayjs__WEBPACK_IMPORTED_MODULE_1___default()().month(e).format(\"MMM\")}))}},{key:\"getQuarters\",value:function(){return Array.apply(0,Array(4)).map((function(t,e){var n=dayjs__WEBPACK_IMPORTED_MODULE_1___default()().quarter(e+1).startOf(\"quarter\").format(\"MMMM\"),r=dayjs__WEBPACK_IMPORTED_MODULE_1___default()().quarter(e+1).endOf(\"quarter\").format(\"MMMM\");return\"\".concat(n,\" - \").concat(r)}))}},{key:\"getMonthFormatted\",value:function(){return this.start.format(\"MMMM\")}},{key:\"getYearFormatted\",value:function(){return this.start.format(\"YYYY\")}},{key:\"generateYearsRange\",value:function(t){var e=t.activeYear,n=t.visibleYearsNumber,r=t.min,a=t.max,o=parseInt(e,10)||parseInt(dayjs__WEBPACK_IMPORTED_MODULE_1___default()().format(\"YYYY\"),10),s=a?parseInt(a,10):o+n,c=Math.min(s,r?parseInt(r,10):o-n);return Q(Array(s-c+1).keys()).map((function(t){return s-t}))}}]),t}();function fe(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function me(t){for(var e=arguments,n=1;n<arguments.length;n++){var r=null!=e[n]?e[n]:{};n%2?fe(Object(r),!0).forEach((function(e){a(t,e,r[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):fe(Object(r)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}))}return t}var ve=at(rt,ht,x).extend({name:\"VDPickerAgenda\",props:{allowedDates:{type:Function},buttonCancel:{type:String},buttonValidate:{type:String},color:{type:String},date:{type:[Date,Object]},headerFormat:{type:String},fullscreen:{type:Boolean,default:!1},maxDate:{type:[String,Number,Date]},minDate:{type:[String,Number,Date]},name:{type:String},noHeader:{type:Boolean,default:!1},range:{type:Boolean,default:!1},rangeHeaderText:{type:String,default:String},rangePresets:{type:Array,default:void 0},rtl:{type:Boolean,default:!1},type:{type:String,default:\"date\"},validate:{type:Boolean,default:!1},value:{type:Boolean,default:!1},visibleYearsNumber:{type:Number}},data:function(){return{height:\"auto\",pickerDate:void 0,mutableDate:void 0,mode:D,transitionDaysName:\"slide-h-next\",transitionLabelName:\"slide-v-next\"}},computed:{classes:function(){return{\"vd-picker--rtl\":this.rtl,\"vd-picker--bottomsheet\":this.fullscreen,\"vd-picker--no-header\":this.noHeader,\"vd-picker--validate\":this.validate,\"vd-picker--range\":this.range,\"vd-picker--range-selecting\":this.range&&!this.isRangeSelected}},isRangeSelected:function(){return!!this.range&&(\"object\"===L(this.mutableDate)&&Object.values(this.mutableDate).every((function(t){return Boolean(t)})))},formatters:function(){return t={headerFormat:this.headerFormat,locale:this.locale,maxDate:this.maxDate,minDate:this.minDate,mutableDate:this.mutableDate,range:this.range,rangeHeaderText:this.rangeHeaderText},e=t.headerFormat,n=t.locale,r=t.maxDate,i=t.minDate,a=t.mutableDate,o=t.range,s=t.rangeHeaderText,{formattedHeaderYear:Et({date:a,locale:n,format:\"YYYY\"}),formattedHeaderDate:Nt({date:a,headerFormat:e,locale:n,range:o,rangeHeaderText:s}),minDate:i,maxDate:r,minMonth:Bt({date:i,type:\"month\",locale:n}),maxMonth:Bt({date:r,type:\"month\",locale:n}),minYear:Bt({date:i,type:\"year\",locale:n}),maxYear:Bt({date:r,type:\"year\",locale:n})};var t,e,n,r,i,a,o,s}},created:function(){this.initAgenda()},beforeDestroy:function(){(0,body_scroll_lock__WEBPACK_IMPORTED_MODULE_0__.clearAllBodyScrollLocks)()},watch:{value:\"initAgenda\",date:\"initDatesForPicker\",type:\"updateMode\",fullscreen:{handler:function(t){var r=this;this.$nextTick((function(){var i=r.$refs.body;t?((0,body_scroll_lock__WEBPACK_IMPORTED_MODULE_0__.disableBodyScroll)(i),r.genOverlay()):(r.removeOverlay(!1),(0,body_scroll_lock__WEBPACK_IMPORTED_MODULE_0__.enableBodyScroll)(i))}))},immediate:!0},mode:function(t){var r=this;\"year\"===t&&this.fullscreen&&((0,body_scroll_lock__WEBPACK_IMPORTED_MODULE_0__.enableBodyScroll)(this.$refs.body),this.$nextTick((function(){(0,body_scroll_lock__WEBPACK_IMPORTED_MODULE_0__.disableBodyScroll)(r.$el.querySelector(\".vd-picker__years\"))})))}},methods:{initAgenda:function(){this.initDatesForPicker(this.date),this.updateMode(this.type)},updateTransitions:function(t){this.transitionDaysName=\"slide-h-\".concat(t),this.transitionLabelName=\"slide-v-\".concat(t)},reOrderSelectedDate:function(t){this.mutableDate&&(Lt(t,this.mutableDate.start)?this.mutableDate={start:void 0,end:this.mutableDate.start}:jt(t,this.mutableDate.end)&&(this.mutableDate={start:this.mutableDate.end,end:void 0}))},selectDate:function(t){if(this.range)return this.isRangeSelected||!this.mutableDate.start&&!this.mutableDate.end?void(this.mutableDate={start:t.clone(),end:void 0}):(this.reOrderSelectedDate(t),void this.emitSelectedDate(me(me(me({},this.mutableDate),this.mutableDate.start&&{end:t.clone()}),this.mutableDate.end&&{start:t.clone()})));var e,n,r=(e=t,n=this.mutableDate,dayjs__WEBPACK_IMPORTED_MODULE_1___default()(e).isAfter(dayjs__WEBPACK_IMPORTED_MODULE_1___default()(n))?\"next\":\"prev\");this.updateTransitions(r),this.emitSelectedDate(t.clone())},emitSelectedDate:function(t){this.range&&(this.pickerDate=new pe(t.end.month(),t.end.year(),this.currentLocale)),this.mutableDate=t,this.$emit(\"selectDate\",this.mutableDate)},initDatesForPicker:function(t){var e=Tt({date:this.range?t.end||t.start:t,locale:this.currentLocale});if(jt(e,this.maxDate)&&(e=Tt({date:this.maxDate,locale:this.currentLocale})),this.range)return this.pickerDate=new pe(e.month(),e.year(),this.currentLocale),void(this.mutableDate=t);null==t&&\"quarter\"===this.type&&(e=e.month(e.quarter())),null!=t&&\"quarter\"===this.type&&(e=e.month(St(e.month()))),this.pickerDate=new pe(e.month(),e.year(),this.currentLocale),this.mutableDate=t&&t.month(e.month()).clone()},changeMonth:function(t){var e=this.pickerDate.month+(\"prev\"===t?-1:1),n=this.pickerDate.year;(e>11||e<0)&&(n+=\"prev\"===t?-1:1,e=\"prev\"===t?11:0),this.updateTransitions(t),this.pickerDate=new pe(e,n,this.currentLocale)},changeYear:function(t){var e=this.pickerDate.year+(\"prev\"===t?-1:1),n=this.pickerDate.month;this.updateTransitions(t),this.pickerDate=new pe(n,e,this.currentLocale)},updateMode:function(t){this.mode=t},updateSelectedYearMonth:function(t,e){var n=function(t,e,n){return\"year\"===n?{year:t,month:e.month}:\"quarter\"===n?{year:e.year,month:St(t)}:{year:e.year,month:t}}(t,this.pickerDate,e),r=n.year,i=n.month;if(this.pickerDate=new pe(i,r,this.currentLocale),e===O&&\"year\"!==this.type){var a=\"quarter\"===this.type?\"quarter\":\"month\";return this.updateMode(a)}if(\"date\"===this.type)this.updateMode(\"date\");else{var o=At({year:this.pickerDate.year,month:this.pickerDate.month,locale:this.currentLocale});this.selectDate(o)}},genTitle:function(){var t=this,e=this.$createElement(\"p\",this.name),n=this.$createElement(ct,{on:{click:function(){return t.$emit(\"close\")}}},[\"close\"]);return this.$createElement(\"div\",{staticClass:\"vd-picker__title\"},[e,this.$createElement(\"div\",{staticClass:\"vd-picker__title-close\"},[n])])},genHeader:function(){return this.$createElement(Wt,{props:me(me({},this.formatters),{},{color:this.color,mode:this.yearMonthMode,mutableDate:this.mutableDate,range:this.range,transitionName:this.transitionLabelName,type:this.type}),on:{\"update-mode\":this.updateMode}})},genPresets:function(){return this.$createElement(Jt,{props:{rangePresets:this.rangePresets,mutableDate:this.mutableDate,minDate:this.minDate,maxDate:this.maxDate,color:this.color,locale:this.locale},on:{\"update-range\":this.emitSelectedDate}})},genBody:function(){var t=[this.mode!==O&&this.genControls(),this.mode===D&&this.genTableDate(),this.mode===_&&this.genMonths(),this.mode===k&&this.genQuarters(),this.mode===O&&this.genYears()];return this.$createElement(\"div\",{staticClass:\"vd-picker__body\",ref:\"body\"},t)},genControls:function(){return this.$createElement(It,{props:{pickerDate:this.pickerDate,transitionName:this.transitionLabelName,color:this.color,min:this.minDate,max:this.maxDate,mode:this.mode},on:{\"on-navigation-click\":this.mode===D?this.changeMonth:this.changeYear,\"update-mode\":this.updateMode}})},genTableDate:function(){return this.$createElement(Kt,{props:{allowedDates:this.allowedDates,color:this.color,pickerDate:this.pickerDate,isRangeSelected:this.isRangeSelected,locale:this.currentLocale,maxDate:this.maxDate,minDate:this.minDate,mutableDate:this.mutableDate,range:this.range,transitionName:this.transitionDaysName},on:{\"update-month\":this.changeMonth,\"update-hovered-day\":this.reOrderSelectedDate,\"select-date\":this.selectDate}})},genMonths:function(){var t=this.formatters,e=t.minMonth,n=t.maxMonth;return this.$createElement(re,{props:{active:this.mode===_,allowedDates:this.type===_?this.allowedDates:void 0,color:this.color,locale:this.currentLocale,max:n,min:e,mutableDate:this.mutableDate,pickerDate:this.pickerDate,range:this.range,transitionName:this.transitionDaysName},on:{input:this.updateSelectedYearMonth}})},genQuarters:function(){var t=this.formatters,e=t.minMonth,n=t.maxMonth;return this.$createElement(oe,{props:{active:this.mode===k,allowedDates:this.type===k?this.allowedDates:void 0,color:this.color,locale:this.currentLocale,max:n,min:e,mutableDate:this.mutableDate,pickerDate:this.pickerDate,transitionName:this.transitionDaysName},on:{input:this.updateSelectedYearMonth}})},genYears:function(){var t=this.formatters,e=t.minYear,n=t.maxYear;return this.$createElement(le,{props:{active:this.mode===O,allowedDates:this.type===O?this.allowedDates:void 0,color:this.color,max:n,min:e,mutableDate:this.mutableDate,pickerDate:this.pickerDate,range:this.range,visibleYearsNumber:this.visibleYearsNumber},on:{input:this.updateSelectedYearMonth}})},genValidate:function(){var t=this;return this.$createElement(te,{props:{buttonValidate:this.buttonValidate,buttonCancel:this.buttonCancel,color:this.color,mutableDate:this.mutableDate,range:this.range},on:{cancel:function(){return t.$emit(\"close\")},validate:function(){return t.$emit(\"validateDate\")}}})}},render:function(t){return t(\"div\",{staticClass:\"vd-picker\",class:this.classes,ref:\"datepicker\"},[this.fullscreen&&this.genTitle(),!this.noHeader&&this.genHeader(),this.range&&this.genPresets(),this.genBody(),this.validate&&this.genValidate()])}});function ye(t){var e=t.message,n=t.vm;if(n){if(n.$_alreadyWarned=n.$_alreadyWarned||[],n.$_alreadyWarned.includes(e))return;n.$_alreadyWarned.push(e)}return\"[VueDatePicker] \".concat(e)+(n?function(t){if(t._isVue&&t.$parent){for(var e=[],n=0;t;){if(e.length>0){var r=e[e.length-1];if(r.constructor===t.constructor){n++,t=t.$parent;continue}n>0&&(e[e.length-1]=[r,n],n=0)}e.push(t),t=t.$parent}return\"\\n\\nfound in\\n\\n\"+e.map((function(t,e){return\"\".concat(0===e?\"---\\x3e \":\" \".repeat(5+2*e)).concat(Array.isArray(t)?\"\".concat(De(t[0]),\"... (\").concat(t[1],\" recursive calls)\"):De(t))})).join(\"\\n\")}return\"\\n\\n(found in \".concat(De(t),\")\")}(n):\"\")}function ge(t,e){var n=ye({message:t,vm:e});null!=n&&console.warn(n)}var be=/(?:^|[-_])(\\w)/g;function De(t,e){if(t.$root===t)return\"<Root>\";var n=\"function\"==typeof t&&null!=t.cid?t.options:t._isVue?t.$options||t.constructor.options:t||{},r=n.name||n._componentTag,i=n.__file;if(!r&&i){var a=i.match(/([^/\\\\]+)\\.vue$/);r=a&&a[1]}return(r?\"<\".concat(r.replace(be,(function(t){return t.toUpperCase()})).replace(/[-_]/g,\"\"),\">\"):\"<Anonymous>\")+(i&&!1!==e?\" at \".concat(i):\"\")}function _e(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function ke(t){for(var e=arguments,n=1;n<arguments.length;n++){var r=null!=e[n]?e[n]:{};n%2?_e(Object(r),!0).forEach((function(e){a(t,e,r[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):_e(Object(r)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}))}return t}var Oe={minWidth:\"290px\",maxWidth:\"315px\"},Me=at(x,C).extend({name:\"VDPicker\",provide:function(){return{VDPicker:this}},directives:{ClickOutside:T},props:{id:{type:String,default:void 0},name:{type:String,default:\"datepicker\"},clearable:{type:Boolean,default:!1},validate:{type:Boolean,default:!1},buttonValidate:{type:String,default:void 0},buttonCancel:{type:String,default:void 0},type:{type:String,default:\"date\"},range:{type:Boolean,default:!1},rangeInputText:{type:String,default:\"%d ~ %d\"},rangeHeaderText:{type:String,default:void 0},rangePresets:{type:Array,default:void 0},value:{type:[String,Object,Number,Date]},format:{type:String,default:void 0},formatHeader:{type:String,default:void 0},visible:{type:Boolean,default:!1},placeholder:{type:String,default:\"YYYY-MM-DD\"},color:{type:String,default:\"#4f88ff\"},contentClass:{type:String,default:\"\"},allowedDates:{type:Function},minDate:{type:[String,Number,Date]},maxDate:{type:[String,Number,Date]},visibleYearsNumber:{type:Number,default:10},disabled:{type:Boolean,default:!1},inline:{type:Boolean,default:!1},noHeader:{type:Boolean,default:!1},noCalendarIcon:{type:Boolean,default:!1},fullscreenMobile:{type:Boolean,default:!1},tabindex:{type:[String,Number],default:\"0\"},rtl:{type:Boolean,default:!1},origin:{type:String,default:void 0},allowOverflow:{type:Boolean,default:!0},attach:{validator:B,default:!1},zIndex:{type:Number,default:1002}},data:function(){return{date:void 0,isMenuActive:!1,isBooted:!1,activator:void 0}},computed:{classes:function(){return{\"vd-wrapper--inline\":this.inline,\"vd-wrapper--disabled\":this.disabled,\"vd-wrapper--rtl\":this.rtl}},componentId:function(){return this.id||\"datepicker_\".concat(\"_\".concat(Math.random().toString(36).substr(2,9)))},inputFormat:function(){return this.format?this.format:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"date\";return m[t]}(this.range?\"range\":this.type)},headerFormat:function(){return this.formatHeader?this.formatHeader:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"date\";return y[t]}(this.range?\"range\":this.type)},outputFormat:function(){return wt(this.range?\"range\":this.type)},textsFormat:function(){var t=this.currentLocale.lang,e=t.buttonValidate,n=t.buttonCancel,r=t.rangeHeaderText;return{buttonValidate:this.buttonValidate||e,buttonCancel:this.buttonCancel||n,rangeHeaderText:this.rangeHeaderText||r}},internalDate:{get:function(){return t=this.value,e={range:this.range,locale:this.currentLocale,type:this.type},n=e.range,r=e.locale,i=e.type,n?{start:t&&null!=t.start?Tt({date:t.start,locale:r}):void 0,end:t&&null!=t.end?Tt({date:t.end,locale:r}):void 0}:null!=t?Tt({date:t,locale:r,type:i}):void 0;var t,e,n,r,i},set:function(t){this.date=t}},isDateDefined:function(){var t=!this.range&&this.internalDate,e=this.range&&this.internalDate&&this.internalDate.start&&this.internalDate.end;return Boolean(t)||Boolean(e)},formattedInputDate:function(){return function(t){var e=t.inputFormat,n=t.internalDate,r=t.isDateDefined,i=t.locale,a=t.range,o=t.rangeInputText,s=t.type;if(r){if(a&&o){var c=Ft({dates:n,locale:i,format:e}).split(\" ~ \"),l=vt(c,2);return Yt({regexText:o,startDate:l[0],endDate:l[1]})}var u=n.month(),d=\"quarter\"===s?St(u):u;return Et({date:n.set(\"month\",d),locale:i,format:e})}}({inputFormat:this.inputFormat,internalDate:this.internalDate,isDateDefined:this.isDateDefined,locale:this.currentLocale,range:this.range,rangeInputText:this.rangeInputText,type:this.type})},isFullScreenMode:function(){return this.fullscreenMobile&&this.isMobile}},watch:{visible:{handler:function(t){this.isMenuActive=t},immediate:!0},isFullScreenMode:function(){var t=this;this.isMenuActive&&(this.hideDatePicker(),setTimeout((function(){t.showDatePicker()}),200))}},created:function(){var t,e,n,r,i=this;[\"no-input\"].forEach((function(t){var e,n,r;i.$attrs.hasOwnProperty(t)&&(n=(e={original:t,vm:i}).original,r=e.vm,ge(\"[REMOVED] '\".concat(n,\"' has been removed. You can safely omit it.\"),r))})),this.$attrs.hasOwnProperty(\"fullscreen-breakpoint\")&&(e=(t={original:\"fullscreen-mobile\",replacement:\"mobile-breakpoint\",vm:this}).original,n=t.replacement,r=t.vm,ge(\"[UPGRADE] '\".concat(e,\"' is deprecated, use '\").concat(n,\"' instead.\"),r))},mounted:function(){this.activator=this.$refs.activator},beforeDestroy:function(){this.hideDatePicker(),this.$emit(\"onDestroy\")},methods:{showDatePicker:function(){this.disabled||(this.isMenuActive=!0,this.$emit(\"onOpen\"))},hideDatePicker:function(){this.isMenuActive&&(this.isMenuActive=!1,this.isBooted=!1,(0,body_scroll_lock__WEBPACK_IMPORTED_MODULE_0__.clearAllBodyScrollLocks)(),this.$emit(\"onClose\"))},changeDate:function(t){this.internalDate=t,this.validate||this.validateDate()},validateDate:function(){var t,e;this.date?(this.$emit(\"input\",(t=this.date,e=this.outputFormat,this.range?{start:t.start.format(e),end:t.end&&t.end.format(e)}:t.format(e))),this.$emit(\"onChange\"),this.hideDatePicker()):this.hideDatePicker()},onKeyDown:function(t){var e=t.keyCode;if(this.$refs.menu)return[w.esc,w.tab].includes(e)?this.hideDatePicker(t):void 0},onClearDate:function(){this.$emit(\"input\",void 0),this.$emit(\"onChange\")},genContent:function(){return this.inline?[this.genAgenda()]:[this.$scopedSlots.activator?this.genActivator():this.genCustomInput(),this.genMenuWithContent()]},genActivator:function(){return this.$createElement(\"div\",{staticClass:\"vd-activator\",directives:[{name:\"click-outside\",value:{isActive:this.isMenuActive&&!this.isFullScreenMode,handler:this.hideDatePicker}}],on:{click:this.showDatePicker,keydown:this.onKeyDown},ref:\"activator\"},[this.$scopedSlots.activator({date:this.formattedInputDate})])},genCustomInput:function(){return this.$createElement(lt,{props:{clearable:this.clearable,color:this.color,date:this.formattedInputDate,disabled:this.disabled,id:this.componentId,isDateDefined:this.isDateDefined,isMenuActive:this.isMenuActive,name:this.name,noCalendarIcon:this.noCalendarIcon,placeholder:this.placeholder,tabindex:this.tabindex},directives:[{name:\"click-outside\",value:{isActive:this.isMenuActive&&!this.isFullScreenMode,handler:this.hideDatePicker}}],nativeOn:{click:this.showDatePicker},on:{keydown:this.onKeyDown,clearDate:this.onClearDate},ref:\"activator\"})},genMenuWithContent:function(){var t=this,e=this.isFullScreenMode,n=ke(ke({},Oe),{},{value:this.isMenuActive,origin:this.origin,allowOverflow:this.allowOverflow,attach:!e&&this.attach,transition:e?\"slide-in-out-transition\":\"scale-transition\",bottomSheet:e}),r=this.activator;return this.$createElement(K,{attrs:{role:\"menu\"},props:ke(ke({},n),{},{activator:r}),on:{transitionEnd:function(){t.isBooted=!0}},ref:\"menu\"},[this.genAgenda()])},genAgenda:function(){return this.$createElement(ve,{props:{allowedDates:this.allowedDates,buttonCancel:this.textsFormat.buttonCancel,buttonValidate:this.textsFormat.buttonValidate,color:this.color,date:this.internalDate,fullscreen:this.isBooted&&this.isMenuActive&&this.isFullScreenMode,headerFormat:this.headerFormat,locale:this.currentLocale,maxDate:this.maxDate,minDate:this.minDate,name:this.name,noHeader:this.noHeader,range:this.range,rangeHeaderText:this.textsFormat.rangeHeaderText,rangePresets:this.rangePresets,rtl:this.rtl,type:this.type,validate:this.validate,value:this.isMenuActive,visibleYearsNumber:this.visibleYearsNumber},on:{selectDate:this.changeDate,validateDate:this.validateDate,close:this.hideDatePicker},directives:[{name:\"click-outside\",value:{isActive:this.isBooted&&this.isMenuActive,handler:this.hideDatePicker}}],ref:\"agenda\"})}},render:function(t){return t(\"div\",{staticClass:\"vd-wrapper\",class:this.classes},this.genContent())}}),we=Object.freeze({__proto__:null,VueDatePicker:Me});var Ye={installed:!1,version:\"0.2.11\",install:function t(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!t.installed){t.installed=!0,vue__WEBPACK_IMPORTED_MODULE_2__[\"default\"]!==e&&console.error(\"Multiple instances of Vue detected.\");var i=n.components||{},a=n.options||{};e.prototype.$vuedatepicker=a,vue__WEBPACK_IMPORTED_MODULE_2__[\"default\"].prototype.$vuedatepicker=a,Object.entries(i).forEach((function(t){var n=vt(t,2),r=n[0],i=n[1];e.component(r,i)}))}}},Se=Ye.install;Ye.install=function(t,e){Se.call(Ye,t,{components:we,options:e})},\"undefined\"!=typeof window&&window.Vue&&window.Vue.use(Ye);/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Ye);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQG1hdGhpZXVzdGFuL3Z1ZS1kYXRlcGlja2VyL2Rpc3QvdnVlLWRhdGVwaWNrZXIuZXNtLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNnSixzQkFBc0IseUNBQXlDLGtEQUFrRCxXQUFXLElBQUksc1lBQXNZLGlIQUFpSCxxQkFBcUIsb0NBQW9DLHlEQUF5RCwyRUFBMkUsSUFBSSxrWkFBa1osU0FBUyxVQUFVLGdIQUFnSCwwRUFBMEUsSUFBSSw0WUFBNFksMklBQTJJLHFCQUFxQix1QkFBdUIsMEVBQTBFLElBQUksa1dBQWtXLHVCQUF1QixzQkFBc0Isb0hBQW9ILDhFQUE4RSxJQUFJLDJWQUEyVixTQUFTLFVBQVUsMk1BQTJNLHFGQUFxRixJQUFJLDhYQUE4WCxpSEFBaUgscUJBQXFCLFNBQVMseUVBQXlFLElBQUksK1hBQStYLGlIQUFpSCxxQkFBcUIsb0NBQW9DLHlEQUF5RCw2RUFBNkUsa0JBQWtCLGtEQUFrRCxrS0FBa0ssMkZBQTJGLElBQUksa0ZBQWtGLElBQUksaUZBQWlGLGlGQUFpRiwwSUFBMEksRUFBRSxnQkFBZ0IscUJBQXFCLGlDQUFpQyxzQ0FBc0MsNEJBQTRCLHVEQUF1RCxzQkFBc0IsU0FBUyxjQUFjLHdCQUF3QixtQkFBbUIsS0FBSyx5QkFBeUIseUNBQXlDLFlBQVkscUlBQXFJLGdFQUFnRSxHQUFHLFNBQVMsTUFBTSwyQ0FBQyxTQUFTLHdCQUF3QixRQUFRLCtCQUErQixPQUFPLGVBQWUsV0FBVyx5QkFBeUIsdUJBQXVCLGFBQWEsZ0JBQWdCLEVBQUUsdUJBQXVCLEdBQUcsVUFBVSwwQkFBMEIsa0lBQWtJLDBCQUEwQiwrREFBK0Qsa0JBQWtCLHdDQUF3QyxxQkFBcUIsR0FBRyx1QkFBdUIsNkVBQTZFLElBQUksMkNBQUMsU0FBUyxxQkFBcUIsa0JBQWtCLHVEQUF1RCwwQkFBMEIsaUJBQWlCLE9BQU8sd0NBQXdDLFdBQVcsb0JBQW9CLG9CQUFvQixvQkFBb0IsV0FB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LDBEQUEwRCx5RUFBQywwQkFBMEIsd0JBQXdCLHVEQUF1RCx5QkFBeUIsUUFBUSwyRUFBMkUsbURBQW1ELG1GQUFtRix1QkFBdUIsZ0JBQWdCLGlGQUFpRix3QkFBd0Isa0RBQWtELHVCQUF1Qix3SUFBd0kseUJBQXlCLGtDQUFrQyx3Q0FBd0MsNEJBQTRCLGdGQUFnRixNQUFNLGlEQUFpRCxpQkFBaUIsK0JBQStCLDZCQUE2QixJQUFJLDJCQUEyQiwrQkFBK0IsT0FBTyx3UkFBd1IsY0FBYyw0QkFBNEIsZ0ZBQWdGLFlBQVksMEJBQTBCLEtBQUssa0RBQWtELGlCQUFpQixFQUFFLCtCQUErQiw2Q0FBNkMsT0FBTyxFQUFFLDJLQUEySyxtQkFBbUIsOEJBQThCLE9BQU8sWUFBWSxlQUFlLE1BQU0sRUFBRSxZQUFZLE1BQU0seUJBQXlCLGVBQWUsWUFBWSxxQkFBcUIsc0JBQXNCLCtCQUErQixPQUFPLG9rQkFBb2tCLEtBQUssb0ZBQW9GLGNBQWMsNEJBQTRCLHVFQUF1RSxlQUFlLEdBQUcsb0JBQW9CLGdCQUFnQiw0Q0FBNEMscUJBQXFCLG9CQUFvQixnQ0FBZ0MsRUFBRSxRQUFRLG9EQUFvRCxnRUFBZ0UsaUJBQWlCLGVBQWUsMkNBQUMsMkRBQTJELHNCQUFzQixpQkFBaUIsNkJBQTZCLDJDQUFDLG1FQUFtRSw0QkFBNEIsaUJBQWlCLEtBQUssZUFBZSx5QkFBeUIsY0FBYyx3QkFBd0IsRUFBRSw0REFBNEQsaUVBQWUsRUFBRSxFQUE2QiIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AbWF0aGlldXN0YW4vdnVlLWRhdGVwaWNrZXIvZGlzdC92dWUtZGF0ZXBpY2tlci5lc20uanM/MTY3OSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIFZ1ZS1kYXRlcGlja2VyIHYwLjIuMTFcbiAqIChjKSAyMDE5LTIwMjAgTWF0aGlldSBTdGFub3dza2lcbiAqL1xuaW1wb3J0e2NsZWFyQWxsQm9keVNjcm9sbExvY2tzIGFzIHQsZGlzYWJsZUJvZHlTY3JvbGwgYXMgZSxlbmFibGVCb2R5U2Nyb2xsIGFzIG59ZnJvbVwiYm9keS1zY3JvbGwtbG9ja1wiO2ltcG9ydCByIGZyb21cInZ1ZVwiO2ltcG9ydCBpIGZyb21cImRheWpzXCI7dmFyIGE9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBlIGluIHQ/T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSx7dmFsdWU6bixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnRbZV09bix0fSxvPXtuYW1lOlwiZW5cIix3ZWVrZGF5czpcIlN1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5XCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzU2hvcnQ6XCJTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXRcIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCJTdV9Nb19UdV9XZV9UaF9Gcl9TYVwiLnNwbGl0KFwiX1wiKSxtb250aHM6XCJKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0OlwiSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWNcIi5zcGxpdChcIl9cIiksd2Vla1N0YXJ0OjAsZm9ybWF0czp7TFQ6XCJISDptbVwiLExUUzpcIkhIOm1tOnNzXCIsTDpcIkREL01NL1lZWVlcIixMTDpcIkQgTU1NTSBZWVlZXCIsTExMOlwiRCBNTU1NIFlZWVkgSEg6bW1cIixMTExMOlwiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW1cIn0sb3JkaW5hbDpmdW5jdGlvbih0KXt2YXIgZT1bXCJ0aFwiLFwic3RcIixcIm5kXCIsXCJyZFwiXSxuPXQlMTAwO3JldHVyblwiW1wiLmNvbmNhdCh0KS5jb25jYXQoZVsobi0yMCklMTBdfHxlW25dfHxlWzBdLFwiXVwiKX0sYnV0dG9uVmFsaWRhdGU6XCJPa1wiLGJ1dHRvbkNhbmNlbDpcIkNhbmNlbFwiLHJhbmdlSGVhZGVyVGV4dDpcIkZyb20gJWQgVG8gJWRcIn0scz17bmFtZTpcImZyXCIsd2Vla2RheXM6XCJEaW1hbmNoZV9MdW5kaV9NYXJkaV9NZXJjcmVkaV9KZXVkaV9WZW5kcmVkaV9TYW1lZGlcIi5zcGxpdChcIl9cIiksbW9udGhzOlwiSmFudmllcl9Gw6l2cmllcl9NYXJzX0F2cmlsX01haV9KdWluX0p1aWxsZXRfQW/Du3RfU2VwdGVtYnJlX09jdG9icmVfTm92ZW1icmVfRMOpY2VtYnJlXCIuc3BsaXQoXCJfXCIpLHdlZWtTdGFydDoxLHdlZWtkYXlzU2hvcnQ6XCJEaW1fTHVuX01hcl9NZXJfSmV1X1Zlbl9TYW1cIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCJKYW52X0bDqXZyX01hcnNfQXZyX01haV9KdWluX0p1aWxfQW/Du3RfU2VwdF9PY3RfTm92X0TDqWNcIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCJEaV9MdV9NYV9NZV9KZV9WZV9TYVwiLnNwbGl0KFwiX1wiKSxvcmRpbmFsOmZ1bmN0aW9uKHQpe3JldHVybiB0fSxmb3JtYXRzOntMVDpcIkhIOm1tXCIsTFRTOlwiSEg6bW06c3NcIixMOlwiREQuTU0uWVlZWVwiLExMOlwiRCBNTU1NIFlZWVlcIixMTEw6XCJEIE1NTU0gWVlZWSBISDptbVwiLExMTEw6XCJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tXCJ9LGJ1dHRvblZhbGlkYXRlOlwiT2tcIixidXR0b25DYW5jZWw6XCJBbm51bGVyXCIscmFuZ2VIZWFkZXJUZXh0OlwiRHUgJWQgQXUgJWRcIn0sYz17bmFtZTpcImVzXCIsbW9udGhzU2hvcnQ6XCJlbmVfZmViX21hcl9hYnJfbWF5X2p1bl9qdWxfYWdvX3NlcF9vY3Rfbm92X2RpY1wiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5czpcImRvbWluZ29fbHVuZXNfbWFydGVzX21pw6lyY29sZXNfanVldmVzX3ZpZXJuZXNfc8OhYmFkb1wiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1Nob3J0OlwiZG9tLl9sdW4uX21hci5fbWnDqS5fanVlLl92aWUuX3PDoWIuXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwiZG9fbHVfbWFfbWlfanVfdmlfc8OhXCIuc3BsaXQoXCJfXCIpLG1vbnRoczpcIkVuZXJvX0ZlYnJlcm9fTWFyem9fQWJyaWxfTWF5b19KdW5pb19KdWxpb19BZ29zdG9fU2VwdGllbWJyZV9PY3R1YnJlX05vdmllbWJyZV9EaWNpZW1icmVcIi5zcGxpdChcIl9cIiksd2Vla1N0YXJ0OjEsZm9ybWF0czp7TFQ6XCJIOm1tXCIsTFRTOlwiSDptbTpzc1wiLEw6XCJERC9NTS9ZWVlZXCIsTEw6XCJEIFtkZV0gTU1NTSBbZGVdIFlZWVlcIixMTEw6XCJEIFtkZV0gTU1NTSBbZGVdIFlZWVkgSDptbVwiLExMTEw6XCJkZGRkLCBEIFtkZV0gTU1NTSBbZGVdIFlZWVkgSDptbVwifSxvcmRpbmFsOmZ1bmN0aW9uKHQpe3JldHVyblwiXCIuY29uY2F0KHQsXCLCulwiKX0sYnV0dG9uVmFsaWRhdGU6XCJPa1wiLGJ1dHRvbkNhbmNlbDpcIkFudWxhclwiLHJhbmdlSGVhZGVyVGV4dDpcIkRlbCAlZCBBbCAlZFwifSxsPXtuYW1lOlwiZGVcIix3ZWVrZGF5czpcIlNvbm50YWdfTW9udGFnX0RpZW5zdGFnX01pdHR3b2NoX0Rvbm5lcnN0YWdfRnJlaXRhZ19TYW1zdGFnXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzU2hvcnQ6XCJTby5fTW8uX0RpLl9NaS5fRG8uX0ZyLl9TYS5cIi5zcGxpdChcIl9cIiksbW9udGhzOlwiSmFudWFyX0ZlYnJ1YXJfTcOkcnpfQXByaWxfTWFpX0p1bmlfSnVsaV9BdWd1c3RfU2VwdGVtYmVyX09rdG9iZXJfTm92ZW1iZXJfRGV6ZW1iZXJcIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCJKYW4uX0ZlYi5fTcOkcnpfQXByLl9NYWlfSnVuaV9KdWxpX0F1Zy5fU2VwLl9Pa3QuX05vdi5fRGV6LlwiLnNwbGl0KFwiX1wiKSxvcmRpbmFsOmZ1bmN0aW9uKHQpe3JldHVyblwiXCIuY29uY2F0KHQsXCIuXCIpfSx3ZWVrU3RhcnQ6MSxmb3JtYXRzOntMVFM6XCJISDptbTpzc1wiLExUOlwiSEg6bW1cIixMOlwiREQuTU0uWVlZWVwiLExMOlwiRC4gTU1NTSBZWVlZXCIsTExMOlwiRC4gTU1NTSBZWVlZIEhIOm1tXCIsTExMTDpcImRkZGQsIEQuIE1NTU0gWVlZWSBISDptbVwifSxidXR0b25WYWxpZGF0ZTpcIk9rXCIsYnV0dG9uQ2FuY2VsOlwiQWJicmVjaGVuXCIscmFuZ2VIZWFkZXJUZXh0OlwiVm9tICVkIEJpcyAlZFwifSx1PXtuYW1lOlwiaGVcIix3ZWVrZGF5czpcIteo15DXqdeV159f16nXoNeZX9ep15zXmdep15lf16jXkdeZ16LXmV/Xl9ee15nXqdeZX9ep15nXqdeZX9ep15HXqlwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1Nob3J0Olwi15DXs1/XkdezX9eS17Nf15PXs1/XlNezX9eV17Nf16nXs1wiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcIteQ17Nf15HXs1/XktezX9eT17Nf15TXs1/XlV/XqdezXCIuc3BsaXQoXCJfXCIpLG1vbnRoczpcIteZ16DXldeQ16hf16TXkdeo15XXkNeoX9ee16jXpV/XkNek16jXmdecX9ee15DXmV/XmdeV16DXmV/XmdeV15zXmV/XkNeV15LXldeh15hf16HXpNeY157XkdeoX9eQ15XXp9eY15XXkdeoX9eg15XXkdee15HXqF/Xk9em157XkdeoXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0Olwi15nXoNeVX9ek15HXqF/Xnteo16Vf15DXpNeoX9ee15DXmV/XmdeV16Bf15nXldecX9eQ15XXkl/Xodek15hf15DXldenX9eg15XXkV/Xk9em155cIi5zcGxpdChcIl9cIiksb3JkaW5hbDpmdW5jdGlvbih0KXtyZXR1cm4gdH0sZm9ybWF0czp7TFQ6XCJISDptbVwiLExUUzpcIkhIOm1tOnNzXCIsTDpcIkREL01NL1lZWVlcIixMTDpcIkQgW9eRXU1NTU0gWVlZWVwiLExMTDpcIkQgW9eRXU1NTU0gWVlZWSBISDptbVwiLExMTEw6XCJkZGRkLCBEIFvXkV1NTU1NIFlZWVkgSEg6bW1cIixsOlwiRC9NL1lZWVlcIixsbDpcIkQgTU1NIFlZWVlcIixsbGw6XCJEIE1NTSBZWVlZIEhIOm1tXCIsbGxsbDpcImRkZCwgRCBNTU0gWVlZWSBISDptbVwifSxidXR0b25WYWxpZGF0ZTpcIteQ15nXqdeV16hcIixidXR0b25DYW5jZWw6XCLXkdeZ15jXldecXCIscmFuZ2VIZWFkZXJUZXh0Olwi157XqteQ16jXmdeaICVkINei15Mg16rXkNeo15nXmiAlZFwifSxkPXtuYW1lOlwicnVcIix3ZWVrZGF5czpcItCS0L7RgdC60YDQtdGB0LXQvdGM0LVf0J/QvtC90LXQtNC10LvRjNC90LjQul/QktGC0L7RgNC90LjQul/QodGA0LXQtNCwX9Cn0LXRgtCy0LXRgNCzX9Cf0Y/RgtC90LjRhtCwX9Ch0YPQsdCx0L7RgtCwXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzU2hvcnQ6XCLQktGBX9Cf0L1f0JLRgl/QodGAX9Cn0YJf0J/Rgl/QodCxXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwi0JLRgV/Qn9C9X9CS0YJf0KHRgF/Qp9GCX9Cf0YJf0KHQsVwiLnNwbGl0KFwiX1wiKSxtb250aHM6XCLQr9C90LLQsNGA0Yxf0KTQtdCy0YDQsNC70Yxf0JzQsNGA0YJf0JDQv9GA0LXQu9GMX9Cc0LDQuV/QmNGO0L3RjF/QmNGO0LvRjF/QkNCy0LPRg9GB0YJf0KHQtdC90YLRj9Cx0YDRjF/QntC60YLRj9Cx0YDRjF/QndC+0Y/QsdGA0Yxf0JTQtdC60LDQsdGA0YxcIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCLQr9C90LJf0KTQtdCyX9Cc0LDRgF/QkNC/0YBf0JzQsNC5X9CY0Y7QvV/QmNGO0Ltf0JDQstCzX9Ch0LXQvV/QntC60YJf0J3QvtGPX9CU0LXQulwiLnNwbGl0KFwiX1wiKSx3ZWVrU3RhcnQ6MSxmb3JtYXRzOntMVDpcIkhIOm1tXCIsTFRTOlwiSEg6bW06c3NcIixMOlwiREQuTU0uWVlZWVwiLExMOlwiRCBNTU1NIFlZWVlcIixMTEw6XCJEIE1NTU0gWVlZWSBISDptbVwiLExMTEw6XCJkZGRkLCBEIE1NTU0gWVlZWSBISDptbVwifSxvcmRpbmFsOmZ1bmN0aW9uKHQpe3JldHVybiB0fSxidXR0b25WYWxpZGF0ZTpcItCe0LpcIixidXR0b25DYW5jZWw6XCLQntGC0LzQtdC90LBcIixyYW5nZUhlYWRlclRleHQ6XCLQntGCICVkINCU0L4gJWRcIn0saD17bmFtZTpcInN2XCIsd2Vla2RheXM6XCJTw7ZuZGFnX03DpW5kYWdfVGlzZGFnX09uc2RhZ19Ub3JzZGFnX0ZyZWRhZ19Mw7ZyZGFnXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzU2hvcnQ6XCJTw7ZuX03DpW5fVGlzX09uc19Ub3JfRnJlX0zDtnJcIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCJTw7ZfTcOlX1RpX09uX1RvX0ZyX0zDtlwiLnNwbGl0KFwiX1wiKSxtb250aHM6XCJqYW51YXJpX2ZlYnJ1YXJpX21hcnNfYXByaWxfbWFqX2p1bmlfanVsaV9hdWd1c3RpX3NlcHRlbWJlcl9va3RvYmVyX25vdmVtYmVyX2RlY2VtYmVyXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0OlwiamFuX2ZlYl9tYXJfYXByX21hal9qdW5fanVsX2F1Z19zZXBfb2t0X25vdl9kZWNcIi5zcGxpdChcIl9cIiksd2Vla1N0YXJ0OjAsZm9ybWF0czp7TFQ6XCJISDptbVwiLExUUzpcIkhIOm1tOnNzXCIsTDpcIllZWVktTU0tRERcIixMTDpcIkQgTU1NTSBZWVlZXCIsTExMOlwiRCBNTU1NIFlZWVkgSEg6bW1cIixMTExMOlwiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW1cIn0sb3JkaW5hbDpmdW5jdGlvbih0KXt2YXIgZT1bXCJ0aFwiLFwic3RcIixcIm5kXCIsXCJyZFwiXSxuPXQlMTAwO3JldHVyblwiW1wiLmNvbmNhdCh0KS5jb25jYXQoZVsobi0yMCklMTBdfHxlW25dfHxlWzBdLFwiXVwiKX0sYnV0dG9uVmFsaWRhdGU6XCJPa1wiLGJ1dHRvbkNhbmNlbDpcIkF2YnJ5dFwiLHJhbmdlSGVhZGVyVGV4dDpcIkZyw6VuICVkIHRpbGwgJWRcIn0scD1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxmcjpzLGVuOm8sZXM6YyxkZTpsLGhlOnUscnU6ZCxzdjpofSksZj1bXCJuYW1lXCIsXCJ3ZWVrZGF5c1wiLFwid2Vla2RheXNTaG9ydFwiLFwid2Vla2RheXNNaW5cIixcIndlZWtTdGFydFwiLFwibW9udGhzXCIsXCJtb250aHNTaG9ydFwiLFwib3JkaW5hbFwiLFwiZm9ybWF0c1wiLFwiYnV0dG9uQ2FuY2VsXCIsXCJidXR0b25WYWxpZGF0ZVwiLFwicmFuZ2VIZWFkZXJUZXh0XCJdLG09e2RhdGU6XCJERCBNTU1NIFlZWVlcIixtb250aDpcIk1NTU0gWVlZWVwiLHF1YXJ0ZXI6XCJZWVlZLVtRXVFcIix5ZWFyOlwiWVlZWVwiLHJhbmdlOlwiREQgTU1NTSBZWVlZXCJ9LHY9e2RhdGU6XCJZWVlZLU1NLUREXCIsbW9udGg6XCJZWVlZLU1NXCIscXVhcnRlcjpcIllZWVktUVwiLHllYXI6XCJZWVlZXCIscmFuZ2U6XCJZWVlZLU1NLUREXCJ9LHk9e2RhdGU6XCJkZGRkIEREIE1NTU1cIixtb250aDpcIk1NTU1cIixxdWFydGVyOlwiW1FdUVwiLHllYXI6XCJZWVlZXCIscmFuZ2U6XCJERCBNTU1NIFlZWVlcIn0sZz0xOTAwLGI9M2UzLEQ9XCJkYXRlXCIsXz1cIm1vbnRoXCIsaz1cInF1YXJ0ZXJcIixPPVwieWVhclwiLE09LyglZCkrLyx3PU9iamVjdC5mcmVlemUoe2VudGVyOjEzLHRhYjo5LGRlbGV0ZTo0Nixlc2M6Mjcsc3BhY2U6MzIsdXA6MzgsZG93bjo0MCxsZWZ0OjM3LHJpZ2h0OjM5LGVuZDozNSxob21lOjM2LGRlbDo0NixiYWNrc3BhY2U6OCxpbnNlcnQ6NDUscGFnZXVwOjMzLHBhZ2Vkb3duOjM0fSk7ZnVuY3Rpb24gWSh0LGUpe3ZhciBuPU9iamVjdC5rZXlzKHQpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCk7ZSYmKHI9ci5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkuZW51bWVyYWJsZX0pKSksbi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59ZnVuY3Rpb24gUyh0KXtmb3IodmFyIGU9YXJndW1lbnRzLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXt2YXIgcj1udWxsIT1lW25dP2Vbbl06e307biUyP1koT2JqZWN0KHIpLCEwKS5mb3JFYWNoKChmdW5jdGlvbihlKXthKHQsZSxyW2VdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyh0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHIpKTpZKE9iamVjdChyKSkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsZSkpfSkpfXJldHVybiB0fXZhciB4PXIuZXh0ZW5kKHtuYW1lOlwiTG9jYWxhYmxlXCIscHJvcHM6e2xvY2FsZTp7dHlwZTpPYmplY3QsZGVmYXVsdDpmdW5jdGlvbigpe3JldHVybntsYW5nOnZvaWQgMH19fX0sY29tcHV0ZWQ6e2N1cnJlbnRMb2NhbGU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmxvY2FsZS5sYW5nO3JldHVybiBTKFMoe30sdGhpcy5sb2NhbGUpLHt9LHtsYW5nOnRoaXMuZ2V0TG9jYWxlKHQpfSl9fSxtZXRob2RzOntnZXREZWZhdWx0TGFuZzpmdW5jdGlvbigpe3JldHVybih0aGlzLiR2dWVkYXRlcGlja2VyJiZ0aGlzLiR2dWVkYXRlcGlja2VyLmxhbmd8fHdpbmRvdy5uYXZpZ2F0b3IudXNlckxhbmd1YWdlfHx3aW5kb3cubmF2aWdhdG9yLmxhbmd1YWdlfHxcImVuXCIpLnN1YnN0cigwLDIpfSxpc1ZhbGlkTG9jYWxlOmZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LGU9T2JqZWN0LmtleXModCk7cmV0dXJuIGUubGVuZ3RoPjAmJmUuZXZlcnkoKGZ1bmN0aW9uKHQpe3JldHVybiBmLmluY2x1ZGVzKHQpfSkpfSxnZXRMb2NhbGU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaXNWYWxpZExvY2FsZSh0KT90OnBbdF18fHRoaXMuZ2V0TG9jYWxlKHRoaXMuZ2V0RGVmYXVsdExhbmcoKSl9fX0pLEM9ci5leHRlbmQoe25hbWU6XCJNb2JpbGVcIixwcm9wczp7bW9iaWxlQnJlYWtwb2ludDp7dHlwZTpbTnVtYmVyLFN0cmluZ10sZGVmYXVsdDo1NzYsdmFsaWRhdG9yOmZ1bmN0aW9uKHQpe3JldHVybiFpc05hTihOdW1iZXIodCkpfX19LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57d2lkdGg6MCxtb2JpbGU6ITEscmVzaXplVGltZW91dDp2b2lkIDB9fSxjb21wdXRlZDp7aXNNb2JpbGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tb2JpbGV9fSxjcmVhdGVkOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt3aW5kb3cmJih3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLHRoaXMub25SZXNpemUse3Bhc3NpdmU6ITB9KSx0aGlzLiRvbihcImhvb2s6ZGVzdHJveWVkXCIsKGZ1bmN0aW9uKCl7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIix0Lm9uUmVzaXplLHtwYXNzaXZlOiEwfSl9KSksdGhpcy51cGRhdGUoKSl9LG1ldGhvZHM6e29uUmVzaXplOmZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KHRoaXMucmVzaXplVGltZW91dCksdGhpcy5yZXNpemVUaW1lb3V0PXNldFRpbWVvdXQodGhpcy51cGRhdGUsMjAwKX0sdXBkYXRlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nZXRDbGllbnRXaWR0aCgpO3RoaXMud2lkdGg9dCx0aGlzLm1vYmlsZT10PHBhcnNlSW50KHRoaXMubW9iaWxlQnJlYWtwb2ludCwxMCl9LGdldENsaWVudFdpZHRoOmZ1bmN0aW9uKCl7cmV0dXJuXCJ1bmRlZmluZWRcIj09dHlwZW9mIGRvY3VtZW50PzA6TWF0aC5tYXgoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoLHdpbmRvdy5pbm5lcldpZHRofHwwKX19fSk7XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczpcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdzpcInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDpcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZiYmc2VsZjtmdW5jdGlvbiAkKHQsZSl7cmV0dXJuIHQoZT17ZXhwb3J0czp7fX0sZS5leHBvcnRzKSxlLmV4cG9ydHN9dmFyIEw9JCgoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJlwic3ltYm9sXCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/dC5leHBvcnRzPWU9ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTp0LmV4cG9ydHM9ZT1mdW5jdGlvbih0KXtyZXR1cm4gdCYmXCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT9cInN5bWJvbFwiOnR5cGVvZiB0fSxlKG4pfXQuZXhwb3J0cz1lfSkpLGo9W1wiY2xpY2tcIl0sUD1bXSxUPXtpbnN0YW5jZXM6UCxiaW5kOkUsdXBkYXRlOmZ1bmN0aW9uKHQsZSl7SlNPTi5zdHJpbmdpZnkoZS52YWx1ZSkhPT1KU09OLnN0cmluZ2lmeShlLm9sZFZhbHVlKSYmRSh0LGUpfSx1bmJpbmQ6QX07ZnVuY3Rpb24gRSh0LGUpe3ZhciBuPWUudmFsdWU7QSh0KTt2YXIgcj1uLGk9XCJmdW5jdGlvblwiPT10eXBlb2YgcixhPVwib2JqZWN0XCI9PT1MKHIpO2lmKChpfHxhKSYmISghMT09PXIuaXNBY3RpdmUpKXt2YXIgbz1mdW5jdGlvbih0KXt2YXIgZT10LmVsLG49dC5oYW5kbGVyO3JldHVybntlbDplLGV2ZW50SGFuZGxlcnM6ai5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybntldmVudDp0LGhhbmRsZXI6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPXQuZXZlbnQsbj10LmVsLHI9dC5oYW5kbGVyLGk9ZS5wYXRofHwoZS5jb21wb3NlZFBhdGg/ZS5jb21wb3NlZFBhdGgoKTp2b2lkIDApO2lmKGk/aS5pbmRleE9mKG4pPDA6IW4uY29udGFpbnMoZS50YXJnZXQpKXJldHVybiByKGUsbil9KHtldmVudDp0LGVsOmUsaGFuZGxlcjpufSl9fX0pKX19KHtlbDp0LGhhbmRsZXI6aT9yOnIuaGFuZGxlcn0pO28uZXZlbnRIYW5kbGVycy5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZT10LmV2ZW50LG49dC5oYW5kbGVyO3JldHVybiBzZXRUaW1lb3V0KChmdW5jdGlvbigpe3JldHVybiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKGUsbiwhMSl9KSwwKX0pKSxQLnB1c2gobyl9fWZ1bmN0aW9uIEEodCl7dmFyIGU9UC5maW5kSW5kZXgoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmVsPT09dH0pKTstMSE9PWUmJihQW2VdLmV2ZW50SGFuZGxlcnMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9dC5ldmVudCxuPXQuaGFuZGxlcjtyZXR1cm4gZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLG4sITEpfSkpLFAuc3BsaWNlKGUsMSkpfXZhciBIPXttb2RlbDp7cHJvcDpcInZhbHVlXCIsZXZlbnQ6XCJpbnB1dFwifSxwcm9wczp7dmFsdWU6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX19LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57aXNBY3RpdmU6ITF9fSx3YXRjaDp7dmFsdWU6e2hhbmRsZXI6ZnVuY3Rpb24odCl7dGhpcy5pc0FjdGl2ZT10fSxpbW1lZGlhdGU6ITB9LGlzQWN0aXZlOmZ1bmN0aW9uKHQpe3QhPT10aGlzLnZhbHVlJiZ0aGlzLiRlbWl0KFwiaW5wdXRcIix0KX19fTtmdW5jdGlvbiBOKHQsZSxuKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXSYmYXJndW1lbnRzWzNdLGk9ZnVuY3Rpb24gaShhKXtuKGEpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLGkscil9O3QuYWRkRXZlbnRMaXN0ZW5lcihlLGkscil9ZnVuY3Rpb24gQih0KXt2YXIgZT1MKHQpO3JldHVyblwiYm9vbGVhblwiPT09ZXx8XCJzdHJpbmdcIj09PWV8fHQubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERX1mdW5jdGlvbiBGKHQpe2lmKG51bGwhPXQmJlwiXCIhPT10KXJldHVybiBpc05hTigrdCk/U3RyaW5nKHQpOlwiXCIuY29uY2F0KE51bWJlcih0KSxcInB4XCIpfWZ1bmN0aW9uIEkodCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOlwiZGVmYXVsdFwiLG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnt9LHI9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10mJmFyZ3VtZW50c1szXTtyZXR1cm4gdC4kc2NvcGVkU2xvdHNbZV0/dC4kc2NvcGVkU2xvdHNbZV0mJnQuJHNjb3BlZFNsb3RzW2VdKG4pOiF0LiRzbG90c1tlXXx8biYmIXI/dm9pZCAwOnQuJHNsb3RzW2VdfWZ1bmN0aW9uIFYodCl7aWYoIXR8fHQubm9kZVR5cGUhPT1Ob2RlLkVMRU1FTlRfTk9ERSlyZXR1cm4gMDt2YXIgZT0rd2luZG93LmdldENvbXB1dGVkU3R5bGUodCkuZ2V0UHJvcGVydHlWYWx1ZShcInotaW5kZXhcIik7cmV0dXJuIGV8fFYodC5wYXJlbnROb2RlKX12YXIgej17bWl4aW5zOltIXSxwcm9wczp7YWN0aXZhdG9yOntkZWZhdWx0OnZvaWQgMCx2YWxpZGF0b3I6ZnVuY3Rpb24odCl7cmV0dXJuW1wic3RyaW5nXCIsXCJvYmplY3RcIl0uaW5jbHVkZXMoTCh0KSl9fSxkaXNhYmxlZDp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9fSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue2FjdGl2YXRvckVsZW1lbnQ6dm9pZCAwLGFjdGl2YXRvck5vZGU6W119fSx3YXRjaDp7YWN0aXZhdG9yOlwicmVzZXRBY3RpdmF0b3JcIn0sbW91bnRlZDpmdW5jdGlvbigpe3ZhciB0LGUsbixyPShlPVwiYWN0aXZhdG9yXCIsbj0hMCwodD10aGlzKS4kc2xvdHNbZV0mJnQuJHNjb3BlZFNsb3RzW2VdJiZ0LiRzY29wZWRTbG90c1tlXS5uYW1lP24/XCJ2LXNsb3RcIjpcInNjb3BlZFwiOnQuJHNsb3RzW2VdP1wibm9ybWFsXCI6dC4kc2NvcGVkU2xvdHNbZV0/XCJzY29wZWRcIjp2b2lkIDApO3ImJltcInYtc2xvdFwiLFwibm9ybWFsXCJdLmluY2x1ZGVzKHIpJiZjb25zb2xlLmVycm9yKCdUaGUgYWN0aXZhdG9yIHNsb3QgbXVzdCBiZSBib3VuZCwgdHJ5IFxcJzx0ZW1wbGF0ZSB2LXNsb3Q6YWN0aXZhdG9yPVwieyBvbiB9XCI+PGJ1dHRvbiB2LW9uPVwib25cIj5cXCcnLHRoaXMpLHRoaXMuZ2V0QWN0aXZhdG9yKCl9LG1ldGhvZHM6e3Jlc2V0QWN0aXZhdG9yOmZ1bmN0aW9uKCl7dGhpcy5hY3RpdmF0b3JFbGVtZW50PXZvaWQgMCx0aGlzLmdldEFjdGl2YXRvcigpfSxnZW5BY3RpdmF0b3I6ZnVuY3Rpb24oKXt2YXIgdD1JKHRoaXMsXCJhY3RpdmF0b3JcIixPYmplY3QuYXNzaWduKHRoaXMuZ2V0VmFsdWVQcm94eSgpLHthdHRyczp7cm9sZTpcImJ1dHRvblwiLFwiYXJpYS1oYXNwb3B1cFwiOiEwLFwiYXJpYS1leHBhbmRlZFwiOlN0cmluZyh0aGlzLmlzQWN0aXZlKX19KSl8fFtdO3JldHVybiB0aGlzLmFjdGl2YXRvck5vZGU9dCx0fSxnZXRBY3RpdmF0b3I6ZnVuY3Rpb24odCl7aWYodGhpcy5hY3RpdmF0b3JFbGVtZW50KXJldHVybiB0aGlzLmFjdGl2YXRvckVsZW1lbnQ7dmFyIGU7aWYodGhpcy5hY3RpdmF0b3Ipe3ZhciBuPWRvY3VtZW50O2U9XCJzdHJpbmdcIj09dHlwZW9mIHRoaXMuYWN0aXZhdG9yP24ucXVlcnlTZWxlY3Rvcih0aGlzLmFjdGl2YXRvcik6dGhpcy5hY3RpdmF0b3IuJGVsP3RoaXMuYWN0aXZhdG9yLiRlbDp0aGlzLmFjdGl2YXRvcn1lbHNlIHQ/ZT10LmN1cnJlbnRUYXJnZXR8fHQudGFyZ2V0OnRoaXMuYWN0aXZhdG9yTm9kZS5sZW5ndGgmJihlPXRoaXMuYWN0aXZhdG9yTm9kZVswXS5lbG0pO3JldHVybiB0aGlzLmFjdGl2YXRvckVsZW1lbnQ9ZSx0aGlzLmFjdGl2YXRvckVsZW1lbnR9LGdldENvbnRlbnRTbG90OmZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyxcImRlZmF1bHRcIix0aGlzLmdldFZhbHVlUHJveHkoKSwhMCl9LGdldFZhbHVlUHJveHk6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybntnZXQgdmFsdWUoKXtyZXR1cm4gdC5pc0FjdGl2ZX0sc2V0IHZhbHVlKGUpe3QuaXNBY3RpdmU9ZX19fX19O3ZhciBXPWZ1bmN0aW9uKHQsZSl7KG51bGw9PWV8fGU+dC5sZW5ndGgpJiYoZT10Lmxlbmd0aCk7Zm9yKHZhciBuPTAscj1uZXcgQXJyYXkoZSk7bjxlO24rKylyW25dPXRbbl07cmV0dXJuIHJ9O3ZhciBxPWZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIFcodCl9O3ZhciBSPWZ1bmN0aW9uKHQpe2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QodCkpcmV0dXJuIEFycmF5LmZyb20odCl9O3ZhciBKPWZ1bmN0aW9uKHQsZSl7aWYodCl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQpcmV0dXJuIFcodCxlKTt2YXIgbj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkuc2xpY2UoOCwtMSk7cmV0dXJuXCJPYmplY3RcIj09PW4mJnQuY29uc3RydWN0b3ImJihuPXQuY29uc3RydWN0b3IubmFtZSksXCJNYXBcIj09PW58fFwiU2V0XCI9PT1uP0FycmF5LmZyb20odCk6XCJBcmd1bWVudHNcIj09PW58fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pP1codCxlKTp2b2lkIDB9fTt2YXIgWD1mdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfTt2YXIgUT1mdW5jdGlvbih0KXtyZXR1cm4gcSh0KXx8Uih0KXx8Sih0KXx8WCgpfTtmdW5jdGlvbiBVKHQsZSl7aWYodCl7dmFyIG49ZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm57dG9wOk1hdGgucm91bmQoZS50b3ApLGxlZnQ6TWF0aC5yb3VuZChlLmxlZnQpLGJvdHRvbTpNYXRoLnJvdW5kKGUuYm90dG9tKSxyaWdodDpNYXRoLnJvdW5kKGUucmlnaHQpLHdpZHRoOk1hdGgucm91bmQoZS53aWR0aCksaGVpZ2h0Ok1hdGgucm91bmQoZS5oZWlnaHQpfX0odCk7aWYoITEhPT1lKXt2YXIgcj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KTtuLmxlZnQ9cGFyc2VJbnQoci5tYXJnaW5MZWZ0fHwwKSxuLnRvcD1wYXJzZUludChyLm1hcmdpblRvcHx8MCl9cmV0dXJuIG59fWZ1bmN0aW9uIFoodCxlKXt2YXIgbj1PYmplY3Qua2V5cyh0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpO2UmJihyPXIuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLG4ucHVzaC5hcHBseShuLHIpfXJldHVybiBufWZ1bmN0aW9uIEcodCl7Zm9yKHZhciBlPWFyZ3VtZW50cyxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl7dmFyIHI9bnVsbCE9ZVtuXT9lW25dOnt9O24lMj9aKE9iamVjdChyKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7YSh0LGUscltlXSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXModCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhyKSk6WihPYmplY3QocikpLmZvckVhY2goKGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLGUpKX0pKX1yZXR1cm4gdH12YXIgSz17bmFtZTpcIlZETWVudVwiLG1peGluczpbeix7bmFtZTpcIkRldGFjaGFibGVcIixtaXhpbnM6W3tuYW1lOlwiQm9vdGFibGVcIixkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue2lzQm9vdGVkOiExfX0sY29tcHV0ZWQ6e2hhc0NvbnRlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0Jvb3RlZHx8dGhpcy5pc0FjdGl2ZX19LHdhdGNoOntpc0FjdGl2ZTpmdW5jdGlvbigpe3RoaXMuaXNCb290ZWQ9ITB9fSxtZXRob2RzOntzaG93TGF6eUNvbnRlbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaGFzQ29udGVudCYmdD90KCk6W3RoaXMuJGNyZWF0ZUVsZW1lbnQoKV19fX1dLHByb3BzOnthdHRhY2g6e3ZhbGlkYXRvcjpCLGRlZmF1bHQ6ITF9LGNvbnRlbnRDbGFzczp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcIlwifX0sZGF0YTpmdW5jdGlvbigpe3JldHVybnthY3RpdmF0b3JOb2RlOnZvaWQgMCxoYXNEZXRhY2hlZDohMX19LHdhdGNoOnthdHRhY2g6ZnVuY3Rpb24oKXt0aGlzLmhhc0RldGFjaGVkPSExLHRoaXMuaW5pdERldGFjaCgpfSxoYXNDb250ZW50OmZ1bmN0aW9uKCl7dGhpcy4kbmV4dFRpY2sodGhpcy5pbml0RGV0YWNoKX19LGJlZm9yZU1vdW50OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLiRuZXh0VGljaygoZnVuY3Rpb24oKXt0LmFjdGl2YXRvck5vZGUmJihBcnJheS5pc0FycmF5KHQuYWN0aXZhdG9yTm9kZSk/dC5hY3RpdmF0b3JOb2RlOlt0LmFjdGl2YXRvck5vZGVdKS5mb3JFYWNoKChmdW5jdGlvbihlKXtpZihlLmVsbSYmdC4kZWwucGFyZW50Tm9kZSl7dmFyIG49dC4kZWw9PT10LiRlbC5wYXJlbnROb2RlLmZpcnN0Q2hpbGQ/dC4kZWw6dC4kZWwubmV4dFNpYmxpbmc7dC4kZWwucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZS5lbG0sbil9fSkpfSkpfSxtb3VudGVkOmZ1bmN0aW9uKCl7dGhpcy5oYXNDb250ZW50JiZ0aGlzLmluaXREZXRhY2goKX0sZGVhY3RpdmF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLmlzQWN0aXZlPSExfSxiZWZvcmVEZXN0cm95OmZ1bmN0aW9uKCl7dHJ5e2lmKHRoaXMuJHJlZnMuY29udGVudCYmdGhpcy4kcmVmcy5jb250ZW50LnBhcmVudE5vZGUmJnRoaXMuJHJlZnMuY29udGVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuJHJlZnMuY29udGVudCksdGhpcy5hY3RpdmF0b3JOb2RlKShBcnJheS5pc0FycmF5KHRoaXMuYWN0aXZhdG9yTm9kZSk/dGhpcy5hY3RpdmF0b3JOb2RlOlt0aGlzLmFjdGl2YXRvck5vZGVdKS5mb3JFYWNoKChmdW5jdGlvbih0KXt0LmVsbSYmdC5lbG0ucGFyZW50Tm9kZSYmdC5lbG0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0LmVsbSl9KSl9Y2F0Y2godCl7Y29uc29sZS5lcnJvcih0KX19LG1ldGhvZHM6e2luaXREZXRhY2g6ZnVuY3Rpb24oKXt2YXIgdDt0aGlzLl9pc0Rlc3Ryb3llZHx8IXRoaXMuJHJlZnMuY29udGVudHx8dGhpcy5oYXNEZXRhY2hlZHx8XCJcIj09PXRoaXMuYXR0YWNofHwhMD09PXRoaXMuYXR0YWNofHwoKHQ9ITE9PT10aGlzLmF0dGFjaD9kb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI2FwcFwiKXx8ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcImJvZHlcIik6XCJzdHJpbmdcIj09dHlwZW9mIHRoaXMuYXR0YWNoP2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5hdHRhY2gpOnRoaXMuYXR0YWNoKT8odC5hcHBlbmRDaGlsZCh0aGlzLiRyZWZzLmNvbnRlbnQpLHRoaXMuaGFzRGV0YWNoZWQ9ITApOmNvbnNvbGUuZXJyb3IoXCJVbmFibGUgdG8gbG9jYXRlIHRhcmdldCAnXCIuY29uY2F0KHRoaXMuYXR0YWNoLFwiJ1wiKSx0aGlzKSl9fX0se25hbWU6XCJEeW5hbWljUG9zaXRpb25cIixkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue2FjdGl2YXRvckZpeGVkOiExLGRpbWVuc2lvbnM6e2FjdGl2YXRvcjp7dG9wOjAsbGVmdDowLGJvdHRvbTowLHJpZ2h0OjAsd2lkdGg6MCxoZWlnaHQ6MCxvZmZzZXRUb3A6MCxzY3JvbGxIZWlnaHQ6MCxvZmZzZXRMZWZ0OjB9LGNvbnRlbnQ6e3RvcDowLGxlZnQ6MCxib3R0b206MCxyaWdodDowLHdpZHRoOjAsaGVpZ2h0OjAsb2Zmc2V0VG9wOjAsc2Nyb2xsSGVpZ2h0OjB9fSxpc0NvbnRlbnRBY3RpdmU6ITEscGFnZVdpZHRoOjAscGFnZVlPZmZzZXQ6MH19LGNvbXB1dGVkOntpc0F0dGFjaGVkOmZ1bmN0aW9uKCl7cmV0dXJuITEhPT10aGlzLmF0dGFjaH0sY29tcHV0ZWRMZWZ0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5kaW1lbnNpb25zLGU9dC5hY3RpdmF0b3Isbj10LmNvbnRlbnQscj0odGhpcy5pc0F0dGFjaGVkP2Uub2Zmc2V0TGVmdDplLmxlZnQpfHwwO3JldHVybiB0aGlzLnJ0bD9lLnJpZ2h0LW4ud2lkdGg6cn0sY29tcHV0ZWRUb3A6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmRpbWVuc2lvbnMuYWN0aXZhdG9yLGU9dC5oZWlnaHQ7cmV0dXJuKCh0aGlzLmlzQXR0YWNoZWQ/dC5vZmZzZXRUb3A6dC50b3ArdGhpcy5wYWdlWU9mZnNldCl8fDApK2V9LGhhc0FjdGl2YXRvcjpmdW5jdGlvbigpe3JldHVybiBCb29sZWFuKHRoaXMuJHNsb3RzLmFjdGl2YXRvcil8fEJvb2xlYW4odGhpcy4kc2NvcGVkU2xvdHMuYWN0aXZhdG9yKXx8Qm9vbGVhbih0aGlzLmFjdGl2YXRvcil9fSx3YXRjaDp7ZGlzYWJsZWQ6ZnVuY3Rpb24odCl7dCYmdGhpcy5jYWxsRGVhY3RpdmF0ZSgpfSxpc0FjdGl2ZTpmdW5jdGlvbih0KXt0aGlzLmRpc2FibGVkfHwodD90aGlzLmNhbGxBY3RpdmF0ZSgpOnRoaXMuY2FsbERlYWN0aXZhdGUoKSl9fSxtZXRob2RzOnthY3RpdmF0ZTpmdW5jdGlvbigpe30sZGVhY3RpdmF0ZTpmdW5jdGlvbigpe30sY2FsbEFjdGl2YXRlOmZ1bmN0aW9uKCl7dGhpcy5hY3RpdmF0ZSgpfSxjYWxsRGVhY3RpdmF0ZTpmdW5jdGlvbigpe3RoaXMuaXNDb250ZW50QWN0aXZlPSExLHRoaXMuZGVhY3RpdmF0ZSgpfSxjYWxjTGVmdDpmdW5jdGlvbih0KXtyZXR1cm4gRih0aGlzLmlzQXR0YWNoZWQ/dGhpcy5jb21wdXRlZExlZnQ6dGhpcy5jYWxjWE92ZXJmbG93KHRoaXMuY29tcHV0ZWRMZWZ0LHQpKX0sY2FsY1RvcDpmdW5jdGlvbigpe3JldHVybiBGKHRoaXMuaXNBdHRhY2hlZD90aGlzLmNvbXB1dGVkVG9wOnRoaXMuY2FsY1lPdmVyZmxvdyh0aGlzLmNvbXB1dGVkVG9wKSl9LGNhbGNYT3ZlcmZsb3c6ZnVuY3Rpb24odCxlKXt2YXIgbj10K2UtdGhpcy5wYWdlV2lkdGgrMTI7cmV0dXJuKHQ9KCF0aGlzLmxlZnR8fHRoaXMucmlnaHQpJiZuPjA/TWF0aC5tYXgodC1uLDApOk1hdGgubWF4KHQsMTIpKSsod2luZG93LnBhZ2VYT2Zmc2V0fHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdCl9LGNhbGNZT3ZlcmZsb3c6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5wYWdlWU9mZnNldCsod2luZG93LmlubmVySGVpZ2h0fHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0KSxuPXRoaXMuZGltZW5zaW9ucyxyPW4uYWN0aXZhdG9yLGk9KG4uY29udGVudHx8e30pLmhlaWdodCxhPWU8dCtpO3JldHVybiBhJiZyLnRvcD5pP3Q9dGhpcy5wYWdlWU9mZnNldCsoci50b3AtaSk6YSYmIXRoaXMuYWxsb3dPdmVyZmxvdz90PWUtaS0xMjp0PHRoaXMucGFnZVlPZmZzZXQmJiF0aGlzLmFsbG93T3ZlcmZsb3cmJih0PXRoaXMucGFnZVlPZmZzZXQrMTIpLHQ8MTI/MTI6dH0sZGV0ZWN0T3JpZ2luOmZ1bmN0aW9uKHQsZSl7dmFyIG49cGFyc2VJbnQodC5zcGxpdChcInB4XCIpWzBdKSxyPXBhcnNlSW50KGUuc3BsaXQoXCJweFwiKVswXSksaT10aGlzLmRpbWVuc2lvbnMuYWN0aXZhdG9yLGE9W107cmV0dXJuIGEucHVzaChpLnRvcDxyLXRoaXMucGFnZVlPZmZzZXQ/XCJ0b3BcIjpcImJvdHRvbVwiKSxhLnB1c2goaS5sZWZ0PT09bj9cImxlZnRcIjpcInJpZ2h0XCIpLHRoaXMub3JpZ2lufHxhLmpvaW4oXCIgXCIpfSxjaGVja0ZvclBhZ2VZT2Zmc2V0OmZ1bmN0aW9uKCl7dGhpcy5wYWdlWU9mZnNldD10aGlzLmFjdGl2YXRvckZpeGVkPzA6d2luZG93LnBhZ2VZT2Zmc2V0fHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wfSxjaGVja0FjdGl2YXRvckZpeGVkOmZ1bmN0aW9uKCl7aWYoIXRoaXMuaXNBdHRhY2hlZCl7dmFyIHQ9dGhpcy5nZXRBY3RpdmF0b3IoKTt0aGlzLmFjdGl2YXRvckZpeGVkPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXCJmaXhlZFwiLFwic3RpY2t5XCJdLG49dDtuOyl7aWYoZS5pbmNsdWRlcyh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShuKS5wb3NpdGlvbikpcmV0dXJuITA7bj1uLm9mZnNldFBhcmVudH1yZXR1cm4hMX0odCl9fSxzbmVha1BlZWs6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKGZ1bmN0aW9uKCl7dmFyIG49ZS4kcmVmcy5jb250ZW50O24mJlwibm9uZVwiPT09bi5zdHlsZS5kaXNwbGF5PyhuLnN0eWxlLmRpc3BsYXk9XCJpbmxpbmUtYmxvY2tcIix0KCksbi5zdHlsZS5kaXNwbGF5PVwibm9uZVwiKTp0KCl9KSl9LHN0YXJ0VHJhbnNpdGlvbjpmdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihlKXtyZXR1cm4gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKChmdW5jdGlvbigpe3QuaXNDb250ZW50QWN0aXZlPXQuaXNBY3RpdmUsZSgpfSkpfSkpfSx1cGRhdGVEaW1lbnNpb25zOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLmNoZWNrQWN0aXZhdG9yRml4ZWQoKSx0aGlzLmNoZWNrRm9yUGFnZVlPZmZzZXQoKSx0aGlzLnBhZ2VXaWR0aD13aW5kb3cuaW5uZXJXaWR0aHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoO3ZhciBlPXt9LG49dGhpcy5nZXRBY3RpdmF0b3IoKTtuJiYoZS5hY3RpdmF0b3I9VShuLHRoaXMuYXR0YWNoKSxlLmFjdGl2YXRvci5vZmZzZXRMZWZ0PW4ub2Zmc2V0TGVmdCx0aGlzLmlzQXR0YWNoZWQ/ZS5hY3RpdmF0b3Iub2Zmc2V0VG9wPW4ub2Zmc2V0VG9wOmUuYWN0aXZhdG9yLm9mZnNldFRvcD0wLHRoaXMuc25lYWtQZWVrKChmdW5jdGlvbigpe2UuY29udGVudD1VKHQuJHJlZnMuY29udGVudCx0LmF0dGFjaCksdC5kaW1lbnNpb25zPWV9KSkpfX19LHtkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue3N0YWNrTWluWkluZGV4OjFlM319LGNvbXB1dGVkOnthY3RpdmVaSW5kZXg6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLiRyZWZzLmNvbnRlbnQsZT10aGlzLmlzQWN0aXZlP3RoaXMuZ2V0TWF4WkluZGV4KCkrMjpWKHQpO3JldHVybiBwYXJzZUludChlKX19LG1ldGhvZHM6e2dldE1heFpJbmRleDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuJGVsLGU9UShkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwibWVudV9fY29udGVudC0tYWN0aXZlXCIpKSxuPVt0aGlzLnN0YWNrTWluWkluZGV4LFYodCldLmNvbmNhdChRKGUubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gVih0KX0pKSkpO3JldHVybiBNYXRoLm1heC5hcHBseShNYXRoLFEobikpfX19XSxkaXJlY3RpdmVzOntSZXNpemU6e2luc2VydGVkOmZ1bmN0aW9uKHQsZSl7dmFyIG49ZS52YWx1ZSxyPWUub3B0aW9uc3x8e3Bhc3NpdmU6ITB9LGk9ITEsYT1mdW5jdGlvbigpe2l8fChpPSEwLHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUobiksaT0hMSl9O3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIsYSxyKSxPYmplY3QuYXNzaWduKHQse29uUmVzaXplOntyZXNpemVDYWxsYmFjazphLG9wdGlvbnM6cixydW5uaW5nOml9fSksZS5tb2RpZmllcnMmJmUubW9kaWZpZXJzLnF1aWV0fHxhKCl9LHVuYmluZDpmdW5jdGlvbih0KXtpZih0Lm9uUmVzaXplKXt2YXIgZT10Lm9uUmVzaXplLG49ZS5yZXNpemVDYWxsYmFjayxyPWUub3B0aW9uczt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLG4sciksZGVsZXRlIHQub25SZXNpemV9fX19LHByb3BzOnt0cmFuc2l0aW9uOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwibWVudS10cmFuc2l0aW9uXCJ9LG9yaWdpbjp7dHlwZTpTdHJpbmcsZGVmYXVsdDp2b2lkIDB9LGFsbG93T3ZlcmZsb3c6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxydGw6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxtaW5XaWR0aDp7dHlwZTpbTnVtYmVyLFN0cmluZ10sZGVmYXVsdDp2b2lkIDB9LG1heFdpZHRoOnt0eXBlOltOdW1iZXIsU3RyaW5nXSxkZWZhdWx0OnZvaWQgMH0sbWF4SGVpZ2h0Ont0eXBlOltOdW1iZXIsU3RyaW5nXSxkZWZhdWx0OlwiYXV0b1wifSx6SW5kZXg6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6dm9pZCAwfSxib3R0b21TaGVldDp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9fSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue3Jlc2l6ZVRpbWVvdXQ6MCxkZWZhdWx0T2Zmc2V0Ojh9fSxjb21wdXRlZDp7c3R5bGVzOmZ1bmN0aW9uKCl7cmV0dXJue21heEhlaWdodDp0aGlzLmNhbGN1bGVkTWVudU1heEhlaWdodCxtaW5XaWR0aDp0aGlzLmNhbGN1bGVkTWVudVdpZHRoLG1heFdpZHRoOnRoaXMuY2FsY3VsZWRNYXhXaWR0aCx0b3A6dGhpcy5jYWxjdWxlZFRvcCxsZWZ0OnRoaXMuY2FsY3VsZWRMZWZ0LHRyYW5zZm9ybU9yaWdpbjp0aGlzLmRldGVjdGVkT3JpZ2luLHpJbmRleDp0aGlzLnpJbmRleHx8dGhpcy5hY3RpdmVaSW5kZXh9fSxjYWxjdWxlZE1lbnVNYXhIZWlnaHQ6ZnVuY3Rpb24oKXtyZXR1cm4gRih0aGlzLm1heEhlaWdodCl9LGNhbGN1bGVkTWF4V2lkdGg6ZnVuY3Rpb24oKXtyZXR1cm4gRih0aGlzLm1heFdpZHRoKX0sY2FsY3VsZWRNZW51V2lkdGg6ZnVuY3Rpb24oKXtpZih0aGlzLm1pbldpZHRoKXJldHVybiBGKHRoaXMubWluV2lkdGgpO3ZhciB0PU1hdGgubWluKHRoaXMuZGltZW5zaW9ucy5hY3RpdmF0b3Iud2lkdGgsTWF0aC5tYXgodGhpcy5wYWdlV2lkdGgtMjQsMCkpLGU9KHBhcnNlSW50KHRoaXMuY2FsY3VsZWRNYXhXaWR0aCk9PT0xKnRoaXMuY2FsY3VsZWRNYXhXaWR0aD90aGlzLmNhbGN1bGVkTWF4V2lkdGg6cGFyc2VJbnQoKHRoaXMuY2FsY3VsZWRNYXhXaWR0aHx8XCJcIikuc3BsaXQoXCJweFwiKVswXSkpfHx0O3JldHVybiBGKE1hdGgubWluKGUsdCkpfSxjYWxjdWxlZExlZnQ6ZnVuY3Rpb24oKXt2YXIgdD1NYXRoLm1heCh0aGlzLmRpbWVuc2lvbnMuY29udGVudC53aWR0aCxwYXJzZUZsb2F0KHRoaXMuY2FsY3VsZWRNZW51V2lkdGgpKTtyZXR1cm4gdGhpcy5jYWxjTGVmdCh0KXx8XCIwXCJ9LGNhbGN1bGVkVG9wOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2FsY1RvcCgpfHxcIjBcIn0sZGV0ZWN0ZWRPcmlnaW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZXRlY3RPcmlnaW4odGhpcy5jYWxjdWxlZExlZnQsdGhpcy5jYWxjdWxlZFRvcCl9fSxtb3VudGVkOmZ1bmN0aW9uKCl7dGhpcy5pc0FjdGl2ZSYmdGhpcy5jYWxsQWN0aXZhdGUoKX0sbWV0aG9kczp7YWN0aXZhdGU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMudXBkYXRlRGltZW5zaW9ucygpLHJlcXVlc3RBbmltYXRpb25GcmFtZSgoZnVuY3Rpb24oKXt0LnN0YXJ0VHJhbnNpdGlvbigpLnRoZW4oKGZ1bmN0aW9uKCl7dC4kZW1pdChcInRyYW5zaXRpb25FbmRcIil9KSl9KSl9LGNhbGxEZWFjdGl2YXRlOmZ1bmN0aW9uKCl7dGhpcy5pc0NvbnRlbnRBY3RpdmU9ITF9LG9uUmVzaXplOmZ1bmN0aW9uKCl7dGhpcy5pc0FjdGl2ZSYmKHRoaXMuJHJlZnMuY29udGVudC5vZmZzZXRXaWR0aCx0aGlzLnVwZGF0ZURpbWVuc2lvbnMoKSxjbGVhclRpbWVvdXQodGhpcy5yZXNpemVUaW1lb3V0KSx0aGlzLnJlc2l6ZVRpbWVvdXQ9c2V0VGltZW91dCh0aGlzLnVwZGF0ZURpbWVuc2lvbnMsMTAwKSl9LGdlblRyYW5zaXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kY3JlYXRlRWxlbWVudChcInRyYW5zaXRpb25cIix7cHJvcHM6e25hbWU6dGhpcy50cmFuc2l0aW9ufX0sW3RoaXMuZ2VuQ29udGVudCgpXSl9LGdlbkNvbnRlbnQ6ZnVuY3Rpb24oKXt2YXIgdD17YXR0cnM6e3JvbGU6dGhpcy4kYXR0cnMucm9sZXx8XCJtZW51XCJ9LHN0YXRpY0NsYXNzOlwidmQtbWVudV9fY29udGVudFwiLGNsYXNzOkcoRyh7fSx0aGlzLmNvbnRlbnRDbGFzcyYmYSh7fSx0aGlzLmNvbnRlbnRDbGFzcywhMCkpLHt9LHtcInZkLW1lbnVfX2NvbnRlbnQtLWFjdGl2ZVwiOnRoaXMuaXNBY3RpdmUsXCJ2ZC1tZW51X19jb250ZW50LS1maXhlZFwiOnRoaXMuYWN0aXZhdG9yRml4ZWQsXCJ2ZC1tZW51X19jb250ZW50LS1ib3R0b21zaGVldFwiOnRoaXMuYm90dG9tU2hlZXR9KSxzdHlsZTp0aGlzLnN0eWxlcyxkaXJlY3RpdmVzOlt7bmFtZTpcInNob3dcIix2YWx1ZTp0aGlzLmlzQ29udGVudEFjdGl2ZX1dLHJlZjpcImNvbnRlbnRcIixvbjp7Y2xpY2s6ZnVuY3Rpb24odCl7cmV0dXJuIHQuc3RvcFByb3BhZ2F0aW9uKCl9fX07cmV0dXJuIHRoaXMuJGNyZWF0ZUVsZW1lbnQoXCJkaXZcIix0LFt0aGlzLmhhc0NvbnRlbnQmJnRoaXMuZ2V0Q29udGVudFNsb3QoKV0pfX0scmVuZGVyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJ2ZC1tZW51XCIsY2xhc3M6e1wibWVudS0tYXR0YWNoZWRcIjp0aGlzLmlzQXR0YWNoZWR9LGRpcmVjdGl2ZXM6W3thcmc6XCI1MDBcIixuYW1lOlwicmVzaXplXCIsdmFsdWU6dGhpcy5vblJlc2l6ZX1dfSxbIXRoaXMuYWN0aXZhdG9yJiZ0aGlzLmdlbkFjdGl2YXRvcigpLHRoaXMuc2hvd0xhenlDb250ZW50KChmdW5jdGlvbigpe3JldHVybltlLmdlblRyYW5zaXRpb24oKV19KSldKX19O2Z1bmN0aW9uIHR0KHQsZSl7dmFyIG49T2JqZWN0LmtleXModCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KTtlJiYocj1yLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn1mdW5jdGlvbiBldCh0KXtmb3IodmFyIGU9YXJndW1lbnRzLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXt2YXIgcj1udWxsIT1lW25dP2Vbbl06e307biUyP3R0KE9iamVjdChyKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7YSh0LGUscltlXSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXModCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhyKSk6dHQoT2JqZWN0KHIpKS5mb3JFYWNoKChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixlKSl9KSl9cmV0dXJuIHR9ZnVuY3Rpb24gbnQodCl7cmV0dXJuIEJvb2xlYW4odCkmJkJvb2xlYW4odC5tYXRjaCgvXigjfChyZ2J8aHNsKWE/XFwoKS8pKX12YXIgcnQ9e3Byb3BzOntjb2xvcjp7dHlwZTpTdHJpbmd9fSxtZXRob2RzOntzZXRCYWNrZ3JvdW5kQ29sb3I6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbnQodCk/ZT9ldChldCh7fSxlKSx7fSx7c3R5bGU6ZXQoZXQoe30sZS5zdHlsZSkse30se1wiYmFja2dyb3VuZC1jb2xvclwiOlwiXCIuY29uY2F0KHQpLFwiYm9yZGVyLWNvbG9yXCI6XCJcIi5jb25jYXQodCl9KX0pOntcImJhY2tncm91bmQtY29sb3JcIjpcIlwiLmNvbmNhdCh0KSxcImJvcmRlci1jb2xvclwiOlwiXCIuY29uY2F0KHQpfTplfSxzZXRUZXh0Q29sb3I6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbnQodCk/ZT9ldChldCh7fSxlKSx7fSx7c3R5bGU6ZXQoZXQoe30sZS5zdHlsZSkse30se2NvbG9yOlwiXCIuY29uY2F0KHQpfSl9KTp7Y29sb3I6XCJcIi5jb25jYXQodCl9OmV9fX0saXQ9e2Nsb3NlOntwYXRoOlwiTTE5My45NCAyNTZMMjk2LjUgMTUzLjQ0bDIxLjE1LTIxLjE1YzMuMTItMy4xMiAzLjEyLTguMTkgMC0xMS4zMWwtMjIuNjMtMjIuNjNjLTMuMTItMy4xMi04LjE5LTMuMTItMTEuMzEgMEwxNjAgMjIyLjA2IDM2LjI5IDk4LjM0Yy0zLjEyLTMuMTItOC4xOS0zLjEyLTExLjMxIDBMMi4zNCAxMjAuOTdjLTMuMTIgMy4xMi0zLjEyIDguMTkgMCAxMS4zMUwxMjYuMDYgMjU2IDIuMzQgMzc5LjcxYy0zLjEyIDMuMTItMy4xMiA4LjE5IDAgMTEuMzFsMjIuNjMgMjIuNjNjMy4xMiAzLjEyIDguMTkgMy4xMiAxMS4zMSAwTDE2MCAyODkuOTQgMjYyLjU2IDM5Mi41bDIxLjE1IDIxLjE1YzMuMTIgMy4xMiA4LjE5IDMuMTIgMTEuMzEgMGwyMi42My0yMi42M2MzLjEyLTMuMTIgMy4xMi04LjE5IDAtMTEuMzFMMTkzLjk0IDI1NnpcIix2aWV3Qm94OlwiMCAwIDMyMCA1MTJcIn0sY2FsZW5kYXJBbHQ6e3BhdGg6XCJNNDAwIDY0aC00OFYxMmMwLTYuNi01LjQtMTItMTItMTJoLThjLTYuNiAwLTEyIDUuNC0xMiAxMnY1MkgxMjhWMTJjMC02LjYtNS40LTEyLTEyLTEyaC04Yy02LjYgMC0xMiA1LjQtMTIgMTJ2NTJINDhDMjEuNSA2NCAwIDg1LjUgMCAxMTJ2MzUyYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4aDM1MmMyNi41IDAgNDgtMjEuNSA0OC00OFYxMTJjMC0yNi41LTIxLjUtNDgtNDgtNDh6TTQ4IDk2aDM1MmM4LjggMCAxNiA3LjIgMTYgMTZ2NDhIMzJ2LTQ4YzAtOC44IDcuMi0xNiAxNi0xNnptMzUyIDM4NEg0OGMtOC44IDAtMTYtNy4yLTE2LTE2VjE5MmgzODR2MjcyYzAgOC44LTcuMiAxNi0xNiAxNnpNMTQ4IDMyMGgtNDBjLTYuNiAwLTEyLTUuNC0xMi0xMnYtNDBjMC02LjYgNS40LTEyIDEyLTEyaDQwYzYuNiAwIDEyIDUuNCAxMiAxMnY0MGMwIDYuNi01LjQgMTItMTIgMTJ6bTk2IDBoLTQwYy02LjYgMC0xMi01LjQtMTItMTJ2LTQwYzAtNi42IDUuNC0xMiAxMi0xMmg0MGM2LjYgMCAxMiA1LjQgMTIgMTJ2NDBjMCA2LjYtNS40IDEyLTEyIDEyem05NiAwaC00MGMtNi42IDAtMTItNS40LTEyLTEydi00MGMwLTYuNiA1LjQtMTIgMTItMTJoNDBjNi42IDAgMTIgNS40IDEyIDEydjQwYzAgNi42LTUuNCAxMi0xMiAxMnptLTk2IDk2aC00MGMtNi42IDAtMTItNS40LTEyLTEydi00MGMwLTYuNiA1LjQtMTIgMTItMTJoNDBjNi42IDAgMTIgNS40IDEyIDEydjQwYzAgNi42LTUuNCAxMi0xMiAxMnptLTk2IDBoLTQwYy02LjYgMC0xMi01LjQtMTItMTJ2LTQwYzAtNi42IDUuNC0xMiAxMi0xMmg0MGM2LjYgMCAxMiA1LjQgMTIgMTJ2NDBjMCA2LjYtNS40IDEyLTEyIDEyem0xOTIgMGgtNDBjLTYuNiAwLTEyLTUuNC0xMi0xMnYtNDBjMC02LjYgNS40LTEyIDEyLTEyaDQwYzYuNiAwIDEyIDUuNCAxMiAxMnY0MGMwIDYuNi01LjQgMTItMTIgMTJ6XCIsdmlld0JveDpcIjAgMCA0NDggNTEyXCJ9LGNoZXZyb25MZWZ0OntwYXRoOlwiTTE1LjQxIDcuNDFMMTQgNmwtNiA2IDYgNiAxLjQxLTEuNDFMMTAuODMgMTJ6XCIsdmlld0JveDpcIjAgMCAyNCAyNFwifSxjaGV2cm9uUmlnaHQ6e3BhdGg6XCJNMTAgNkw4LjU5IDcuNDEgMTMuMTcgMTJsLTQuNTggNC41OUwxMCAxOGw2LTZ6XCIsdmlld0JveDpcIjAgMCAyNCAyNFwifX07ZnVuY3Rpb24gYXQoKXtmb3IodmFyIHQ9YXJndW1lbnRzLGU9YXJndW1lbnRzLmxlbmd0aCxuPW5ldyBBcnJheShlKSxpPTA7aTxlO2krKyluW2ldPXRbaV07cmV0dXJuIHIuZXh0ZW5kKHttaXhpbnM6bn0pfWZ1bmN0aW9uIG90KHQsZSl7dmFyIG49T2JqZWN0LmtleXModCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KTtlJiYocj1yLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn1mdW5jdGlvbiBzdCh0KXtmb3IodmFyIGU9YXJndW1lbnRzLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXt2YXIgcj1udWxsIT1lW25dP2Vbbl06e307biUyP290KE9iamVjdChyKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7YSh0LGUscltlXSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXModCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhyKSk6b3QoT2JqZWN0KHIpKS5mb3JFYWNoKChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixlKSl9KSl9cmV0dXJuIHR9dmFyIGN0PWF0KHJ0KS5leHRlbmQoe25hbWU6XCJWREljb25cIixpbmhlcml0QXR0cnM6ITEscHJvcHM6e3NpemU6e3R5cGU6W051bWJlcixTdHJpbmddfSxkaXNhYmxlZDp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9fSxjb21wdXRlZDp7aGFzQ2xpY2tMaXN0ZW5lcjpmdW5jdGlvbigpe3JldHVybiBCb29sZWFuKHRoaXMuJGxpc3RlbmVycy5jbGljayl9fSxtZXRob2RzOntnZXRJY29uTmFtZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLiRzbG90cy5kZWZhdWx0P3RoaXMuJHNsb3RzLmRlZmF1bHRbMF0udGV4dCYmdGhpcy4kc2xvdHMuZGVmYXVsdFswXS50ZXh0LnRyaW0oKTpcIlwifSxnZXRJY29uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nZXRJY29uTmFtZSgpO3JldHVybiBpdFt0XXx8dH0sZ2V0RGVmYXVsdERhdGE6ZnVuY3Rpb24oKXtyZXR1cm57c3RhdGljQ2xhc3M6XCJ2ZC1pY29uXCIsY2xhc3M6e1widmQtaWNvbi0tZGlzYWJsZWRcIjp0aGlzLmRpc2FibGVkLFwidmQtaWNvbi0tbGlua1wiOnRoaXMuaGFzQ2xpY2tMaXN0ZW5lcn0sYXR0cnM6c3Qoe1wiYXJpYS1oaWRkZW5cIjohdGhpcy5oYXNDbGlja0xpc3RlbmVyLGRpc2FibGVkOnRoaXMuaGFzQ2xpY2tMaXN0ZW5lciYmdGhpcy5kaXNhYmxlZCx0eXBlOnRoaXMuaGFzQ2xpY2tMaXN0ZW5lcj9cImJ1dHRvblwiOnZvaWQgMH0sdGhpcy4kYXR0cnMpLG9uOnRoaXMuJGxpc3RlbmVyc319LHJlbmRlclN2Z0ljb246ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLmhhc0NsaWNrTGlzdGVuZXI/XCJidXR0b25cIjpcInNwYW5cIixyPUYodGhpcy5zaXplKSxpPXN0KHN0KHt9LHRoaXMuZ2V0RGVmYXVsdERhdGEoKSkse30se3N0eWxlOnN0KHt9LHImJntmb250U2l6ZTpyLGhlaWdodDpyLHdpZHRoOnJ9KX0pLGE9e2F0dHJzOnt4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsdmlld0JveDp0LnZpZXdCb3gsaGVpZ2h0OnRoaXMuc2l6ZXx8MTYsd2lkdGg6dGhpcy5zaXplfHwxNixyb2xlOlwiaW1nXCIsXCJhcmlhLWhpZGRlblwiOiEwLFwiZGF0YS1pY29uXCI6dGhpcy5nZXRJY29uTmFtZSgpfX07cmV0dXJuIGUobix0aGlzLnNldFRleHRDb2xvcih0aGlzLmNvbG9yLGkpLFtlKFwic3ZnXCIsYSxbZShcInBhdGhcIix7YXR0cnM6e2ZpbGw6XCJjdXJyZW50Q29sb3JcIixkOnQucGF0aH19KV0pXSl9fSxyZW5kZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nZXRJY29uKCk7cmV0dXJuIHRoaXMucmVuZGVyU3ZnSWNvbihlLHQpfX0pLGx0PWF0KHJ0KS5leHRlbmQoe25hbWU6XCJWRFBpY2tlckN1c3RvbUlucHV0XCIsaW5qZWN0OltcIlZEUGlja2VyXCJdLHByb3BzOntjbGVhcmFibGU6e3R5cGU6Qm9vbGVhbn0sY2xvc2VPbkNsaWNrT3V0c2lkZTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITB9LGNvbG9yOnt0eXBlOlN0cmluZ30sZGF0ZTp7dHlwZTpbT2JqZWN0LERhdGUsU3RyaW5nXX0sZGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxpZDp7dHlwZTpTdHJpbmd9LGlzRGF0ZURlZmluZWQ6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxpc01lbnVBY3RpdmU6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxuYW1lOnt0eXBlOlN0cmluZ30sbm9DYWxlbmRhckljb246e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxwbGFjZWhvbGRlcjp7dHlwZTpTdHJpbmd9LHRhYmluZGV4Ont0eXBlOltTdHJpbmcsTnVtYmVyXX19LGNvbXB1dGVkOntjbGFzc2VzOmZ1bmN0aW9uKCl7cmV0dXJue1widmQtcGlja2VyX19pbnB1dC0tZGlzYWJsZWRcIjp0aGlzLmRpc2FibGVkLFwidmQtcGlja2VyX19pbnB1dC0taXMtYWN0aXZlXCI6dGhpcy5pc01lbnVBY3RpdmUsXCJ2ZC1waWNrZXJfX2lucHV0LS1uby1kYXRlXCI6IXRoaXMuaXNEYXRlRGVmaW5lZH19LGNvbXB1dGVkQ29sb3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNhYmxlZD9cIlwiOnRoaXMuaXNNZW51QWN0aXZlP3RoaXMuY29sb3I6XCJcIn0saXNEaXJ0eTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmlzRGF0ZURlZmluZWR9fSxtZXRob2RzOntvbktleURvd246ZnVuY3Rpb24odCl7dGhpcy4kZW1pdChcImtleWRvd25cIix0KX0sY2xlYXJhYmxlQ2FsbGJhY2s6ZnVuY3Rpb24oKXt0aGlzLiRlbWl0KFwiY2xlYXJEYXRlXCIpfSxnZW5DYWxlbmRhckljb246ZnVuY3Rpb24oKXt2YXIgdD1bXTt0aGlzLlZEUGlja2VyLiRzbG90c1tcImlucHV0LWljb25cIl0/dC5wdXNoKHRoaXMuVkRQaWNrZXIuJHNsb3RzW1wiaW5wdXQtaWNvblwiXSk6dC5wdXNoKHRoaXMuJGNyZWF0ZUVsZW1lbnQoY3Qse3Byb3BzOntkaXNhYmxlZDp0aGlzLmRpc2FibGVkfX0sW1wiY2FsZW5kYXJBbHRcIl0pKTt2YXIgZT10aGlzLiRjcmVhdGVFbGVtZW50KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwidmQtcGlja2VyX19pbnB1dC1pY29uX193cmFwcGVyXCJ9LHQpO3JldHVybiB0aGlzLiRjcmVhdGVFbGVtZW50KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwidmQtcGlja2VyX19pbnB1dC1pY29uXCJ9LFtlXSl9LGdlbklucHV0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiLHthdHRyczp7aWQ6dGhpcy5pZCxuYW1lOnRoaXMubmFtZSxkaXNhYmxlZDp0aGlzLmRpc2FibGVkLFwiYXJpYS1kaXNhYmxlZFwiOnRoaXMuZGlzYWJsZWQscGxhY2Vob2xkZXI6dGhpcy5wbGFjZWhvbGRlcix0YWJpbmRleDp0aGlzLnRhYmluZGV4LHJvbGU6XCJ0ZXh0XCIsdHlwZTpcInRleHRcIixyZWFkb25seTohMCxcImFyaWEtcmVhZG9ubHlcIjohMH0sZG9tUHJvcHM6e3ZhbHVlOnRoaXMuZGF0ZX0sb246e2tleWRvd246dGhpcy5vbktleURvd259LHJlZjpcImlucHV0XCJ9KX0sZ2VuQ2xlYXJJY29uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXRoaXMuaXNEaXJ0eT9cImNsb3NlXCI6XCJcIixuPXthdHRyczp7XCJhcmlhLWxhYmVsXCI6XCJjbGVhcmFibGUgaWNvblwiLGNvbG9yOnRoaXMuY29sb3IsZGlzYWJsZWQ6dGhpcy5kaXNhYmxlZH0sb246e2NsaWNrOmZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKSxlLnN0b3BQcm9wYWdhdGlvbigpLHQuY2xlYXJhYmxlQ2FsbGJhY2soKX0sbW91c2V1cDpmdW5jdGlvbih0KXt0LnByZXZlbnREZWZhdWx0KCksdC5zdG9wUHJvcGFnYXRpb24oKX19fSxyPXRoaXMuJGNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJ2ZC1waWNrZXJfX2lucHV0LWNsZWFyX19pY29uXCJ9LFt0aGlzLiRjcmVhdGVFbGVtZW50KGN0LG4sZSldKTtyZXR1cm4gdGhpcy4kY3JlYXRlRWxlbWVudChcImRpdlwiLHtzdGF0aWNDbGFzczpcInZkLXBpY2tlcl9faW5wdXQtY2xlYXJcIn0sW3JdKX19LHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcImRpdlwiLHRoaXMuc2V0VGV4dENvbG9yKHRoaXMuY29tcHV0ZWRDb2xvcix7c3RhdGljQ2xhc3M6XCJ2ZC1waWNrZXJfX2lucHV0XCIsY2xhc3M6dGhpcy5jbGFzc2VzfSksWyF0aGlzLm5vQ2FsZW5kYXJJY29uJiZ0aGlzLmdlbkNhbGVuZGFySWNvbigpLHRoaXMuZ2VuSW5wdXQoKSx0aGlzLmNsZWFyYWJsZSYmdGhpcy5nZW5DbGVhckljb24oKV0pfX0pLHV0PWF0KHJ0LEgpLmV4dGVuZCh7bmFtZTpcIlZET3ZlcmxheVwiLHByb3BzOnthYnNvbHV0ZTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LGNvbG9yOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwicmdiYSg5MywgMTA2LCAxMzcpXCJ9LG9wYWNpdHk6e3R5cGU6W051bWJlcixTdHJpbmddLGRlZmF1bHQ6Ljg0fSx2YWx1ZTp7ZGVmYXVsdDohMH0sekluZGV4Ont0eXBlOltOdW1iZXIsU3RyaW5nXSxkZWZhdWx0OnZvaWQgMH19LGNvbXB1dGVkOntjbGFzc2VzOmZ1bmN0aW9uKCl7cmV0dXJue1widmQtb3ZlcmxheS0tYWJzb2x1dGVcIjp0aGlzLmFic29sdXRlLFwidmQtb3ZlcmxheS0tYWN0aXZlXCI6dGhpcy5pc0FjdGl2ZX19LHN0eWxlczpmdW5jdGlvbigpe3JldHVybnt6SW5kZXg6dGhpcy56SW5kZXh9fSxjb21wdXRlZE9wYWNpdHk6ZnVuY3Rpb24oKXtyZXR1cm4gTnVtYmVyKHRoaXMuaXNBY3RpdmU/dGhpcy5vcGFjaXR5OjApfSxvdmVybGF5SW5uZXI6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnNldEJhY2tncm91bmRDb2xvcih0aGlzLmNvbG9yLHtzdGF0aWNDbGFzczpcInZkLW92ZXJsYXlfX2lubmVyXCIsc3R5bGU6e29wYWNpdHk6dGhpcy5jb21wdXRlZE9wYWNpdHl9fSk7cmV0dXJuIHRoaXMuJGNyZWF0ZUVsZW1lbnQoXCJkaXZcIix0KX19LG1ldGhvZHM6e2dlbkNvbnRlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kY3JlYXRlRWxlbWVudChcImRpdlwiLHtzdGF0aWNDbGFzczpcInZkLW92ZXJsYXlfX2NvbnRlbnRcIn0sdGhpcy4kc2xvdHMuZGVmYXVsdCl9fSxyZW5kZXI6ZnVuY3Rpb24odCl7dmFyIGU9W3RoaXMub3ZlcmxheUlubmVyXTtyZXR1cm4gdGhpcy5pc0FjdGl2ZSYmZS5wdXNoKHRoaXMuZ2VuQ29udGVudCgpKSx0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwidmQtb3ZlcmxheVwiLGNsYXNzOnRoaXMuY2xhc3NlcyxzdHlsZTp0aGlzLnN0eWxlc30sZSl9fSksZHQ9ci5leHRlbmQodXQpLGh0PXIuZXh0ZW5kKHtuYW1lOlwiT3ZlcmxheWFibGVcIixwcm9wczp7b3ZlcmxheUNvbG9yOnt0eXBlOlN0cmluZyxkZWZhdWx0OnZvaWQgMH0sb3ZlcmxheU9wYWNpdHk6e3R5cGU6W051bWJlcixTdHJpbmddLGRlZmF1bHQ6dm9pZCAwfX0sZGF0YTpmdW5jdGlvbigpe3JldHVybntvdmVybGF5OnZvaWQgMH19LGJlZm9yZURlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLnJlbW92ZU92ZXJsYXkoKX0sbWV0aG9kczp7c2Nyb2xsTGlzdGVuZXI6ZnVuY3Rpb24odCl7aWYoXCJrZXlkb3duXCI9PT10LnR5cGUpe2lmKFtcIklOUFVUXCIsXCJURVhUQVJFQVwiLFwiU0VMRUNUXCJdLmluY2x1ZGVzKHQudGFyZ2V0LnRhZ05hbWUpfHx0LnRhcmdldC5pc0NvbnRlbnRFZGl0YWJsZSlyZXR1cm47dmFyIGU9W3cudXAsdy5wYWdldXBdLG49W3cuZG93bix3LnBhZ2Vkb3duXTtpZihlLmluY2x1ZGVzKHQua2V5Q29kZSkpdC5kZWx0YVk9LTE7ZWxzZXtpZighbi5pbmNsdWRlcyh0LmtleUNvZGUpKXJldHVybjt0LmRlbHRhWT0xfX0odC50YXJnZXQ9PT10aGlzLm92ZXJsYXl8fFwia2V5ZG93blwiIT09dC50eXBlJiZ0LnRhcmdldD09PWRvY3VtZW50LmJvZHl8fHRoaXMuY2hlY2tQYXRoKHQpKSYmdC5wcmV2ZW50RGVmYXVsdCgpfSxoYXNTY3JvbGxiYXI6ZnVuY3Rpb24odCl7aWYoIXR8fHQubm9kZVR5cGUhPT1Ob2RlLkVMRU1FTlRfTk9ERSlyZXR1cm4hMTt2YXIgZT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KTtyZXR1cm5bXCJhdXRvXCIsXCJzY3JvbGxcIl0uaW5jbHVkZXMoZS5vdmVyZmxvd1kpJiZ0LnNjcm9sbEhlaWdodD50LmNsaWVudEhlaWdodH0sc2hvdWxkU2Nyb2xsOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIDA9PT10LnNjcm9sbFRvcCYmZTwwfHx0LnNjcm9sbFRvcCt0LmNsaWVudEhlaWdodD09PXQuc2Nyb2xsSGVpZ2h0JiZlPjB9LGlzSW5zaWRlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9PT1lfHxudWxsIT09dCYmdCE9PWRvY3VtZW50LmJvZHkmJnRoaXMuaXNJbnNpZGUodC5wYXJlbnROb2RlLGUpfSxjaGVja1BhdGg6ZnVuY3Rpb24odCl7dmFyIGU9dC5wYXRofHx0aGlzLmNvbXBvc2VkUGF0aCh0KSxuPXQuZGVsdGFZO2lmKFwia2V5ZG93blwiPT09dC50eXBlJiZlWzBdPT09ZG9jdW1lbnQuYm9keSl7dmFyIHI9dGhpcy4kcmVmcy5kaWFsb2csaT13aW5kb3cuZ2V0U2VsZWN0aW9uKCkmJndpbmRvdy5nZXRTZWxlY3Rpb24oKS5hbmNob3JOb2RlO3JldHVybiEociYmdGhpcy5oYXNTY3JvbGxiYXIocikmJnRoaXMuaXNJbnNpZGUoaSxyKSl8fHRoaXMuc2hvdWxkU2Nyb2xsKHIsbil9Zm9yKHZhciBhPTA7YTxlLmxlbmd0aDthKyspe3ZhciBvPWVbYV07aWYobz09PWRvY3VtZW50KXJldHVybiEwO2lmKG89PT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpcmV0dXJuITA7aWYobz09PXRoaXMuJHJlZnMuY29udGVudClyZXR1cm4hMDtpZih0aGlzLmhhc1Njcm9sbGJhcihvKSlyZXR1cm4gdGhpcy5zaG91bGRTY3JvbGwobyxuKX1yZXR1cm4hMH0sY29tcG9zZWRQYXRoOmZ1bmN0aW9uKHQpe2lmKHQuY29tcG9zZWRQYXRoKXJldHVybiB0LmNvbXBvc2VkUGF0aCgpO2Zvcih2YXIgZT1bXSxuPXQudGFyZ2V0O247KXtpZihlLnB1c2gobiksXCJIVE1MXCI9PT1uLnRhZ05hbWUpcmV0dXJuIGUucHVzaChkb2N1bWVudCksZS5wdXNoKHdpbmRvdyksZTtuPW4ucGFyZW50RWxlbWVudH1yZXR1cm4gZX0saGlkZVNjcm9sbDpmdW5jdGlvbigpe3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwid2hlZWxcIix0aGlzLnNjcm9sbExpc3RlbmVyLHtwYXNzaXZlOiExfSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsdGhpcy5zY3JvbGxMaXN0ZW5lcil9LHNob3dTY3JvbGw6ZnVuY3Rpb24oKXtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShcIm92ZXJmbG93LXktaGlkZGVuXCIpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwid2hlZWxcIix0aGlzLnNjcm9sbExpc3RlbmVyKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIix0aGlzLnNjcm9sbExpc3RlbmVyKX0sY3JlYXRlT3ZlcmxheTpmdW5jdGlvbigpe3ZhciB0PW5ldyBkdCh7cHJvcHNEYXRhOnthYnNvbHV0ZTp0aGlzLmFic29sdXRlLHZhbHVlOiExLGNvbG9yOnRoaXMub3ZlcmxheUNvbG9yLG9wYWNpdHk6dGhpcy5vdmVybGF5T3BhY2l0eX19KTt0LiRtb3VudCgpO3ZhciBlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjYXBwXCIpfHxkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiYm9keVwiKSxuPXRoaXMuYWJzb2x1dGU/dGhpcy4kZWwucGFyZW50Tm9kZTplO24mJm4uaW5zZXJ0QmVmb3JlKHQuJGVsLG4uZmlyc3RDaGlsZCksdGhpcy5vdmVybGF5PXR9LGdlbk92ZXJsYXk6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiB0aGlzLmhpZGVTY3JvbGwoKSx0aGlzLm92ZXJsYXl8fHRoaXMuY3JlYXRlT3ZlcmxheSgpLHJlcXVlc3RBbmltYXRpb25GcmFtZSgoZnVuY3Rpb24oKXt0Lm92ZXJsYXkmJih2b2lkIDAhPT10LmFjdGl2ZVpJbmRleD90Lm92ZXJsYXkuekluZGV4PVN0cmluZyh0LmFjdGl2ZVpJbmRleC0xKTp0LiRlbCYmKHQub3ZlcmxheS56SW5kZXg9Vih0LiRlbCkpLHQub3ZlcmxheS52YWx1ZT0hMCl9KSksITB9LHJlbW92ZU92ZXJsYXk6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9IShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSl8fGFyZ3VtZW50c1swXTt0aGlzLm92ZXJsYXkmJihOKHRoaXMub3ZlcmxheS4kZWwsXCJ0cmFuc2l0aW9uZW5kXCIsKGZ1bmN0aW9uKCl7dC5vdmVybGF5JiZ0Lm92ZXJsYXkuJGVsJiZ0Lm92ZXJsYXkuJGVsLnBhcmVudE5vZGUmJiF0Lm92ZXJsYXkudmFsdWUmJih0Lm92ZXJsYXkuJGVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodC5vdmVybGF5LiRlbCksdC5vdmVybGF5LiRkZXN0cm95KCksdC5vdmVybGF5PW51bGwpfSkpLHRoaXMub3ZlcmxheS52YWx1ZT0hMSksZSYmdGhpcy5zaG93U2Nyb2xsKCl9fX0pO3ZhciBwdD1mdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0fTt2YXIgZnQ9ZnVuY3Rpb24odCxlKXtpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KHQpKXt2YXIgbj1bXSxyPSEwLGk9ITEsYT12b2lkIDA7dHJ5e2Zvcih2YXIgbyxzPXRbU3ltYm9sLml0ZXJhdG9yXSgpOyEocj0obz1zLm5leHQoKSkuZG9uZSkmJihuLnB1c2goby52YWx1ZSksIWV8fG4ubGVuZ3RoIT09ZSk7cj0hMCk7fWNhdGNoKHQpe2k9ITAsYT10fWZpbmFsbHl7dHJ5e3J8fG51bGw9PXMucmV0dXJufHxzLnJldHVybigpfWZpbmFsbHl7aWYoaSl0aHJvdyBhfX1yZXR1cm4gbn19O3ZhciBtdD1mdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9O3ZhciB2dD1mdW5jdGlvbih0LGUpe3JldHVybiBwdCh0KXx8ZnQodCxlKXx8Sih0LGUpfHxtdCgpfSx5dD0kKChmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7dmFyIHI9ZS5wcm90b3R5cGUsaT1yLmZvcm1hdDtuLmVuLm9yZGluYWw9ZnVuY3Rpb24odCl7dmFyIGU9W1widGhcIixcInN0XCIsXCJuZFwiLFwicmRcIl0sbj10JTEwMDtyZXR1cm5cIltcIit0KyhlWyhuLTIwKSUxMF18fGVbbl18fGVbMF0pK1wiXVwifSxyLmZvcm1hdD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49dGhpcy4kbG9jYWxlKCkscj10aGlzLiR1dGlscygpLGE9KHR8fFwiWVlZWS1NTS1ERFRISDptbTpzc1pcIikucmVwbGFjZSgvXFxbKFteXFxdXSspXXxRfHdvfHd3fHd8Z2dnZ3xEb3xYfHh8a3sxLDJ9fFMvZywoZnVuY3Rpb24odCl7c3dpdGNoKHQpe2Nhc2VcIlFcIjpyZXR1cm4gTWF0aC5jZWlsKChlLiRNKzEpLzMpO2Nhc2VcIkRvXCI6cmV0dXJuIG4ub3JkaW5hbChlLiREKTtjYXNlXCJnZ2dnXCI6cmV0dXJuIGUud2Vla1llYXIoKTtjYXNlXCJ3b1wiOnJldHVybiBuLm9yZGluYWwoZS53ZWVrKCksXCJXXCIpO2Nhc2VcIndcIjpjYXNlXCJ3d1wiOnJldHVybiByLnMoZS53ZWVrKCksXCJ3XCI9PT10PzE6MixcIjBcIik7Y2FzZVwia1wiOmNhc2VcImtrXCI6cmV0dXJuIHIucyhTdHJpbmcoMD09PWUuJEg/MjQ6ZS4kSCksXCJrXCI9PT10PzE6MixcIjBcIik7Y2FzZVwiWFwiOnJldHVybiBNYXRoLmZsb29yKGUuJGQuZ2V0VGltZSgpLzFlMyk7Y2FzZVwieFwiOnJldHVybiBlLiRkLmdldFRpbWUoKTtkZWZhdWx0OnJldHVybiB0fX0pKTtyZXR1cm4gaS5iaW5kKHRoaXMpKGEpfX19KSksZ3Q9JCgoZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtlLnByb3RvdHlwZS5pc1NhbWVPckFmdGVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuaXNTYW1lKHQsZSl8fHRoaXMuaXNBZnRlcih0LGUpfX19KSksYnQ9JCgoZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtlLnByb3RvdHlwZS5pc1NhbWVPckJlZm9yZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmlzU2FtZSh0LGUpfHx0aGlzLmlzQmVmb3JlKHQsZSl9fX0pKSxEdD0kKChmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7ZS5wcm90b3R5cGUuaXNUb2RheT1mdW5jdGlvbigpe3ZhciB0PW4oKTtyZXR1cm4gdGhpcy5mb3JtYXQoXCJZWVlZLU1NLUREXCIpPT09dC5mb3JtYXQoXCJZWVlZLU1NLUREXCIpfX19KSksX3Q9JCgoZnVuY3Rpb24odCxlKXt2YXIgbixyO3QuZXhwb3J0cz0obj1cIm1vbnRoXCIscj1cInF1YXJ0ZXJcIixmdW5jdGlvbih0LGUpe3ZhciBpPWUucHJvdG90eXBlO2kucXVhcnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy4kdXRpbHMoKS51KHQpP01hdGguY2VpbCgodGhpcy5tb250aCgpKzEpLzMpOnRoaXMubW9udGgodGhpcy5tb250aCgpJTMrMyoodC0xKSl9O3ZhciBhPWkuYWRkO2kuYWRkPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9TnVtYmVyKHQpLHRoaXMuJHV0aWxzKCkucChlKT09PXI/dGhpcy5hZGQoMyp0LG4pOmEuYmluZCh0aGlzKSh0LGUpfTt2YXIgbz1pLnN0YXJ0T2Y7aS5zdGFydE9mPWZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy4kdXRpbHMoKSxhPSEhaS51KGUpfHxlO2lmKGkucCh0KT09PXIpe3ZhciBzPXRoaXMucXVhcnRlcigpLTE7cmV0dXJuIGE/dGhpcy5tb250aCgzKnMpLnN0YXJ0T2Yobikuc3RhcnRPZihcImRheVwiKTp0aGlzLm1vbnRoKDMqcysyKS5lbmRPZihuKS5lbmRPZihcImRheVwiKX1yZXR1cm4gby5iaW5kKHRoaXMpKHQsZSl9fSl9KSksa3Q9JCgoZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3ZhciByPShuZXcgRGF0ZSkuZ2V0VGltZXpvbmVPZmZzZXQoKSxpPWUucHJvdG90eXBlO24udXRjPWZ1bmN0aW9uKHQsbil7cmV0dXJuIG5ldyBlKHtkYXRlOnQsdXRjOiEwLGZvcm1hdDpufSl9LGkudXRjPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy50b0RhdGUoKSx7bG9jYWxlOnRoaXMuJEwsdXRjOiEwfSl9LGkubG9jYWw9ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnRvRGF0ZSgpLHtsb2NhbGU6dGhpcy4kTCx1dGM6ITF9KX07dmFyIGE9aS5wYXJzZTtpLnBhcnNlPWZ1bmN0aW9uKHQpe3QudXRjJiYodGhpcy4kdT0hMCksdGhpcy4kdXRpbHMoKS51KHQuJG9mZnNldCl8fCh0aGlzLiRvZmZzZXQ9dC4kb2Zmc2V0KSxhLmNhbGwodGhpcyx0KX07dmFyIG89aS5pbml0O2kuaW5pdD1mdW5jdGlvbigpe2lmKHRoaXMuJHUpe3ZhciB0PXRoaXMuJGQ7dGhpcy4keT10LmdldFVUQ0Z1bGxZZWFyKCksdGhpcy4kTT10LmdldFVUQ01vbnRoKCksdGhpcy4kRD10LmdldFVUQ0RhdGUoKSx0aGlzLiRXPXQuZ2V0VVRDRGF5KCksdGhpcy4kSD10LmdldFVUQ0hvdXJzKCksdGhpcy4kbT10LmdldFVUQ01pbnV0ZXMoKSx0aGlzLiRzPXQuZ2V0VVRDU2Vjb25kcygpLHRoaXMuJG1zPXQuZ2V0VVRDTWlsbGlzZWNvbmRzKCl9ZWxzZSBvLmNhbGwodGhpcyl9O3ZhciBzPWkudXRjT2Zmc2V0O2kudXRjT2Zmc2V0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuJHV0aWxzKCkudTtpZihlKHQpKXJldHVybiB0aGlzLiR1PzA6ZSh0aGlzLiRvZmZzZXQpP3MuY2FsbCh0aGlzKTp0aGlzLiRvZmZzZXQ7dmFyIG4saT1NYXRoLmFicyh0KTw9MTY/NjAqdDp0O3JldHVybiAwIT09dD8obj10aGlzLmxvY2FsKCkuYWRkKGkrcixcIm1pbnV0ZVwiKSkuJG9mZnNldD1pOm49dGhpcy51dGMoKSxufTt2YXIgYz1pLmZvcm1hdDtpLmZvcm1hdD1mdW5jdGlvbih0KXt2YXIgZT10fHwodGhpcy4kdT9cIllZWVktTU0tRERUSEg6bW06c3NbWl1cIjpcIlwiKTtyZXR1cm4gYy5jYWxsKHRoaXMsZSl9LGkudmFsdWVPZj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuJHV0aWxzKCkudSh0aGlzLiRvZmZzZXQpPzA6dGhpcy4kb2Zmc2V0K3I7cmV0dXJuIHRoaXMuJGQudmFsdWVPZigpLTZlNCp0fSxpLmlzVVRDPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLiR1fSxpLnRvSVNPU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9EYXRlKCkudG9JU09TdHJpbmcoKX0saS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvRGF0ZSgpLnRvVVRDU3RyaW5nKCl9fX0pKSxPdD0kKChmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2UucHJvdG90eXBlLndlZWtkYXk9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy4kbG9jYWxlKCkud2Vla1N0YXJ0fHwwLG49dGhpcy4kVyxyPShuPGU/bis3Om4pLWU7cmV0dXJuIHRoaXMuJHV0aWxzKCkudSh0KT9yOnRoaXMuc3VidHJhY3QocixcImRheVwiKS5hZGQodCxcImRheVwiKX19fSkpLE10PSQoKGZ1bmN0aW9uKHQsZSl7dmFyIG4scjt0LmV4cG9ydHM9KG49XCJ3ZWVrXCIscj1cInllYXJcIixmdW5jdGlvbih0LGUpe3ZhciBpPWUucHJvdG90eXBlO2kud2Vlaz1mdW5jdGlvbih0KXtpZih2b2lkIDA9PT10JiYodD1udWxsKSxudWxsIT09dClyZXR1cm4gdGhpcy5hZGQoNyoodC10aGlzLndlZWsoKSksXCJkYXlcIik7dmFyIGU9dGhpcy4kbG9jYWxlKCkueWVhclN0YXJ0fHwxO2lmKDExPT09dGhpcy5tb250aCgpJiZ0aGlzLmRhdGUoKT4yNSl7dmFyIGk9dGhpcy5zdGFydE9mKHIpLmFkZCgxLHIpLmRhdGUoZSksYT10aGlzLmVuZE9mKG4pO2lmKGkuaXNCZWZvcmUoYSkpcmV0dXJuIDF9dmFyIG89dGhpcy5zdGFydE9mKHIpLmRhdGUoZSkuc3RhcnRPZihuKS5zdWJ0cmFjdCgxLFwibWlsbGlzZWNvbmRcIikscz10aGlzLmRpZmYobyxuLCEwKTtyZXR1cm4gczwwP3RoaXMuc3RhcnRPZihcIndlZWtcIikud2VlaygpOk1hdGguY2VpbChzKX0saS53ZWVrcz1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9bnVsbCksdGhpcy53ZWVrKHQpfX0pfSkpO2Z1bmN0aW9uIHd0KCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOlwiZGF0ZVwiO3JldHVybiB2W3RdfWZ1bmN0aW9uIFl0KHQsZSl7dmFyIG49dC5yZWdleFRleHQscj10LnN0YXJ0RGF0ZSxpPXQuZW5kRGF0ZSxhPW4ucmVwbGFjZShNLFwiXCIuY29uY2F0KHIpLmNvbmNhdChlP1wifFwiOlwiXCIpKS5yZXBsYWNlKE0sXCJcIi5jb25jYXQoaSkuY29uY2F0KGU/XCJ8XCI6XCJcIikpO3JldHVybiBlP2Euc3BsaXQoXCJ8XCIpOmF9ZnVuY3Rpb24gU3QodCl7cmV0dXJuIDMqdH1mdW5jdGlvbiB4dCh0KXt2YXIgZT10LmRhdGUsbj10Lm1pbixyPXQubWF4LGk9dC50eXBlLGE9dm9pZCAwPT09aT9cImRhdGVcIjppLG89dC5hbGxvd2VkRm4scz1lLmZvcm1hdCh3dChhKSk7cmV0dXJuKCFvfHxvKHMpKSYmKCFufHwkdChzLG4sYSl8fGp0KHMsbixhKSkmJighcnx8JHQocyxyLGEpfHxMdChzLHIsYSkpfWZ1bmN0aW9uIEN0KHQpe3ZhciBlPXQuZGF0ZSxuPXQudHlwZSxyPXZvaWQgMD09PW4/XCJkYXRlXCI6bixpPXQubG9jYWxlO3JldHVybiAkdChFdCh7ZGF0ZTplLGxvY2FsZTppLGZvcm1hdDp3dChyKX0pLEV0KHtkYXRlOnZvaWQgMCxsb2NhbGU6aSxmb3JtYXQ6d3Qocil9KSxcInF1YXJ0ZXJcIj09PXI/XCJtb250aFwiOnIpfWZ1bmN0aW9uICR0KHQsZSl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOlwiZGF0ZVwiO3JldHVybiBpKHQsd3QobikpLmlzU2FtZShpKGUsd3QobikpLG4pfWZ1bmN0aW9uIEx0KHQsZSl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOlwiZGF5XCI7aWYoXCJ5ZWFyXCI9PT1uKXJldHVybiBCb29sZWFuKGUpJiZ0PGkoZSxcIllZWVktTU0tRERcIikuZ2V0KG4pO3ZhciByPWkuaXNEYXlqcyh0KT90OmkodCkuc3RhcnRPZihcImRheVwiKTtyZXR1cm4gQm9vbGVhbihlKSYmci5pc0JlZm9yZShpKGUpLnN0YXJ0T2YoXCJkYXlcIiksbil9ZnVuY3Rpb24ganQodCxlKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06XCJkYXlcIjtpZihcInllYXJcIj09PW4pcmV0dXJuIEJvb2xlYW4oZSkmJnQ+aShlLFwiWVlZWS1NTS1ERFwiKS5nZXQobik7dmFyIHI9aS5pc0RheWpzKHQpP3Q6aSh0KS5zdGFydE9mKFwiZGF5XCIpO3JldHVybiBCb29sZWFuKGUpJiZyLmlzQWZ0ZXIoaShlKS5zdGFydE9mKFwiZGF5XCIpLG4pfWZ1bmN0aW9uIFB0KHQsZSxuKXtyZXR1cm4ganQodCxlKSYmTHQodCxuKX1mdW5jdGlvbiBUdCh0KXt2YXIgZT10LmRhdGUsbj10LmxvY2FsZSxyPXZvaWQgMD09PW4/e2xhbmc6b306bixhPXQudHlwZTtyZXR1cm5cInllYXJcIj09PSh2b2lkIDA9PT1hP1wiZGF0ZVwiOmEpP2koZSkudXRjKCk6aShlKS5sb2NhbGUoci5sYW5nKX1mdW5jdGlvbiBFdCh0KXt2YXIgZT10LmRhdGUsbj10LmxvY2FsZSxyPXQuZm9ybWF0O3JldHVybiBUdCh7ZGF0ZTplLGxvY2FsZTpufSkuZm9ybWF0KHIpfWZ1bmN0aW9uIEF0KHQpe3ZhciBlPXQueWVhcixuPXQubW9udGg7cmV0dXJuIFR0KHtsb2NhbGU6dC5sb2NhbGV9KS55ZWFyKGUpLm1vbnRoKG4pLnN0YXJ0T2YoXCJtb250aFwiKX1mdW5jdGlvbiBIdCh0KXt2YXIgZT10LnN0YXJ0RGF0ZSxuPXQuZW5kRGF0ZSxyPXQubG9jYWxlLGk9dC5pbnRlcnZhbCxhPXZvaWQgMD09PWk/XCJkYXlcIjppLG89VHQoe2RhdGU6ZSxsb2NhbGU6cn0pLHM9VHQoe2RhdGU6bixsb2NhbGU6cn0pLmRpZmYobyxhKTtyZXR1cm4gUShBcnJheShzKzEpLmtleXMoKSkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gby5hZGQodCxhKX0pKX1mdW5jdGlvbiBOdCh0KXt2YXIgZT10LmhlYWRlckZvcm1hdCxuPXQubG9jYWxlLHI9dC5kYXRlLGk9dC5yYW5nZSxhPXQucmFuZ2VIZWFkZXJUZXh0O2lmKGkmJmEpe3ZhciBvPUZ0KHtkYXRlczpyLGxvY2FsZTpuLGZvcm1hdDplfSkuc3BsaXQoXCIgfiBcIikscz12dChvLDIpLGM9WXQoe3JlZ2V4VGV4dDphLHN0YXJ0RGF0ZTpzWzBdLGVuZERhdGU6c1sxXX0sITApLGw9dnQoYywyKSx1PWxbMF0sZD1sWzFdO3JldHVyblt1LnRyaW0oKSxkLnRyaW0oKV19cmV0dXJuIHI/RXQoe2RhdGU6cixsb2NhbGU6bixmb3JtYXQ6ZX0pOlwiLS1cIn1mdW5jdGlvbiBCdCh0KXt2YXIgZT10LmRhdGUsbj10LnR5cGUscj10LmxvY2FsZTtpZihlKXJldHVybiBFdCh7ZGF0ZTplLGxvY2FsZTpyLGZvcm1hdDp3dChuKX0pfWZ1bmN0aW9uIEZ0KHQpe3ZhciBlPXQuZGF0ZXMsbj12b2lkIDA9PT1lP3t9OmUscj10LmxvY2FsZSxpPXQuZm9ybWF0LGE9bi5zdGFydCxvPW4uZW5kO3JldHVybiBhfHxvPyFhJiZvP1wiX18gfiBcIi5jb25jYXQoVHQoe2RhdGU6byxsb2NhbGU6cn0pLnN0YXJ0T2YoXCJkYXlcIikuZm9ybWF0KGkpKTphJiYhbz9cIlwiLmNvbmNhdChUdCh7ZGF0ZTphLGxvY2FsZTpyfSkuc3RhcnRPZihcImRheVwiKS5mb3JtYXQoaSksXCIgfiBfX1wiKTpcIlwiLmNvbmNhdChUdCh7ZGF0ZTphLGxvY2FsZTpyfSkuc3RhcnRPZihcImRheVwiKS5mb3JtYXQoaSksXCIgfiBcIikuY29uY2F0KFR0KHtkYXRlOm8sbG9jYWxlOnJ9KS5zdGFydE9mKFwiZGF5XCIpLmZvcm1hdChpKSk6XCJfXyB+IF9fXCJ9aS5leHRlbmQoeXQpLGkuZXh0ZW5kKGd0KSxpLmV4dGVuZChidCksaS5leHRlbmQoRHQpLGkuZXh0ZW5kKF90KSxpLmV4dGVuZChrdCksaS5leHRlbmQoT3QpLGkuZXh0ZW5kKE10KTt2YXIgSXQ9YXQocnQpLmV4dGVuZCh7bmFtZTpcIlZEUGlja2VyQ29udHJvbHNcIixwcm9wczp7cGlja2VyRGF0ZTp7dHlwZTpPYmplY3QscmVxdWlyZWQ6ITB9LHRyYW5zaXRpb25OYW1lOnt0eXBlOlN0cmluZ30sY29sb3I6e3R5cGU6U3RyaW5nfSxtb2RlOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwiZGF0ZVwifSxtaW46e3R5cGU6W1N0cmluZyxOdW1iZXIsRGF0ZV19LG1heDp7dHlwZTpbU3RyaW5nLE51bWJlcixEYXRlXX19LGNvbXB1dGVkOnttb250aEZvcm1hdHRlZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBpY2tlckRhdGUuZ2V0TW9udGhGb3JtYXR0ZWQoKX0seWVhckZvcm1hdHRlZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBpY2tlckRhdGUuZ2V0WWVhckZvcm1hdHRlZCgpfSxpc1ByZXZpb3VzRGF0ZURpc2FibGVkOmZ1bmN0aW9uKCl7dmFyIHQ9W1wibW9udGhcIixcInF1YXJ0ZXJcIl0uaW5jbHVkZXModGhpcy5tb2RlKSxlPXBhcnNlSW50KHRoaXMueWVhckZvcm1hdHRlZCwxMCktMTtyZXR1cm4gTHQodD9lOlwiXCIuY29uY2F0KHRoaXMueWVhckZvcm1hdHRlZCxcIi1cIikuY29uY2F0KHRoaXMucGlja2VyRGF0ZS5tb250aCksdGhpcy5taW4sdD9cInllYXJcIjpcIm1vbnRoXCIpfSxpc05leHREYXRlRGlzYWJsZWQ6ZnVuY3Rpb24oKXt2YXIgdD1bXCJtb250aFwiLFwicXVhcnRlclwiXS5pbmNsdWRlcyh0aGlzLm1vZGUpLGU9cGFyc2VJbnQodGhpcy55ZWFyRm9ybWF0dGVkLDEwKSsxO3JldHVybiBqdCh0P2U6XCJcIi5jb25jYXQodGhpcy55ZWFyRm9ybWF0dGVkLFwiLVwiKS5jb25jYXQodGhpcy5waWNrZXJEYXRlLm1vbnRoKzIpLHRoaXMubWF4LHQ/XCJ5ZWFyXCI6XCJtb250aFwiKX19LG1ldGhvZHM6e29uTmF2aWdhdGlvbkNsaWNrOmZ1bmN0aW9uKHQpe3RoaXMuJGVtaXQoXCJvbi1uYXZpZ2F0aW9uLWNsaWNrXCIsdCl9LGdlblByZXZCdXR0b246ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dGhpcy4kY3JlYXRlRWxlbWVudChjdCxcImNoZXZyb25MZWZ0XCIpO3JldHVybiB0aGlzLiRjcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIse3N0YXRpY0NsYXNzOlwidmQtcGlja2VyX19jb250cm9scy1wcmV2XCIsYXR0cnM6e2Rpc2FibGVkOnRoaXMuaXNQcmV2aW91c0RhdGVEaXNhYmxlZCx0eXBlOlwiYnV0dG9uXCJ9LG9uOntjbGljazpmdW5jdGlvbigpe3JldHVybiB0Lm9uTmF2aWdhdGlvbkNsaWNrKFwicHJldlwiKX19fSxbZV0pfSxnZW5OZXh0QnV0dG9uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXRoaXMuJGNyZWF0ZUVsZW1lbnQoY3QsXCJjaGV2cm9uUmlnaHRcIik7cmV0dXJuIHRoaXMuJGNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIix7c3RhdGljQ2xhc3M6XCJ2ZC1waWNrZXJfX2NvbnRyb2xzLW5leHRcIixhdHRyczp7ZGlzYWJsZWQ6dGhpcy5pc05leHREYXRlRGlzYWJsZWQsdHlwZTpcImJ1dHRvblwifSxvbjp7Y2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gdC5vbk5hdmlnYXRpb25DbGljayhcIm5leHRcIil9fX0sW2VdKX0sZ2VuU2VsZWN0b3JzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJ2ZC1waWNrZXJfX2NvbnRyb2xzLXdyYXBwZXJcIn0sW1wiZGF0ZVwiPT09dGhpcy5tb2RlJiZ0aGlzLmdlbk1vbnRoU2VsZWN0b3IoKSx0aGlzLmdlblllYXJTZWxlY3RvcigpXSl9LGdlbkNoaWxkcmVuU2VsZWN0b3JzOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj10LnZhbHVlLHI9dC5rZXksaT10LnR5cGU7cmV0dXJuIHRoaXMuJGNyZWF0ZUVsZW1lbnQoXCJkaXZcIix0aGlzLnNldFRleHRDb2xvcih0aGlzLmNvbG9yLHtrZXk6cixzdGF0aWNDbGFzczpcInZkLXBpY2tlcl9fY29udHJvbHMtbGFiZWxcIn0pLFt0aGlzLiRjcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIse2F0dHJzOnt0eXBlOlwiYnV0dG9uXCJ9LG9uOntjbGljazpmdW5jdGlvbigpe3JldHVybiBlLiRlbWl0KFwidXBkYXRlLW1vZGVcIixpKX19fSxbbl0pXSl9LGdlbk1vbnRoU2VsZWN0b3I6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiB0aGlzLiRjcmVhdGVFbGVtZW50KFwidHJhbnNpdGlvbi1ncm91cFwiLHtzdGF0aWNDbGFzczpcInZkLXBpY2tlcl9fY29udHJvbHMtbW9udGhcIixwcm9wczp7bmFtZTp0aGlzLnRyYW5zaXRpb25OYW1lLHRhZzpcInNwYW5cIn19LFt0aGlzLnBpY2tlckRhdGUubW9udGhdLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHQuZ2VuQ2hpbGRyZW5TZWxlY3RvcnMoe3ZhbHVlOnQubW9udGhGb3JtYXR0ZWQsa2V5OmUsdHlwZTpcIm1vbnRoXCJ9KX0pKSl9LGdlblllYXJTZWxlY3RvcjpmdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIHRoaXMuJGNyZWF0ZUVsZW1lbnQoXCJ0cmFuc2l0aW9uLWdyb3VwXCIse3N0YXRpY0NsYXNzOlwidmQtcGlja2VyX19jb250cm9scy15ZWFyXCIsY2xhc3M6e1widmQtcGlja2VyX19jb250cm9scy15ZWFyLS1jZW50ZXJcIjpbXCJtb250aFwiLFwicXVhcnRlclwiXS5pbmNsdWRlcyh0aGlzLm1vZGUpfSxwcm9wczp7bmFtZTp0aGlzLnRyYW5zaXRpb25OYW1lLHRhZzpcInNwYW5cIn19LFt0aGlzLnBpY2tlckRhdGUueWVhcl0ubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gdC5nZW5DaGlsZHJlblNlbGVjdG9ycyh7dmFsdWU6dC55ZWFyRm9ybWF0dGVkLGtleTplLHR5cGU6XCJ5ZWFyXCJ9KX0pKSl9fSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJ2ZC1waWNrZXJfX2NvbnRyb2xzXCJ9LFt0aGlzLmdlblByZXZCdXR0b24oKSx0aGlzLmdlblNlbGVjdG9ycygpLHRoaXMuZ2VuTmV4dEJ1dHRvbigpXSl9fSk7ZnVuY3Rpb24gVnQodCxlKXt2YXIgbj1PYmplY3Qua2V5cyh0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpO2UmJihyPXIuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLG4ucHVzaC5hcHBseShuLHIpfXJldHVybiBufWZ1bmN0aW9uIHp0KHQpe2Zvcih2YXIgZT1hcmd1bWVudHMsbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspe3ZhciByPW51bGwhPWVbbl0/ZVtuXTp7fTtuJTI/VnQoT2JqZWN0KHIpLCEwKS5mb3JFYWNoKChmdW5jdGlvbihlKXthKHQsZSxyW2VdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyh0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHIpKTpWdChPYmplY3QocikpLmZvckVhY2goKGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLGUpKX0pKX1yZXR1cm4gdH12YXIgV3Q9YXQocnQpLmV4dGVuZCh7bmFtZTpcIlZEUGlja2VySGVhZGVyXCIscHJvcHM6e2Zvcm1hdHRlZEhlYWRlclllYXI6e3R5cGU6U3RyaW5nfSxmb3JtYXR0ZWRIZWFkZXJEYXRlOnt0eXBlOltBcnJheSxTdHJpbmddfSxjb2xvcjp7dHlwZTpTdHJpbmd9LG1vZGU6e3R5cGU6U3RyaW5nfSxtdXRhYmxlRGF0ZTp7dHlwZTpbU3RyaW5nLE9iamVjdF19LHJhbmdlOnt0eXBlOkJvb2xlYW59LHRyYW5zaXRpb25OYW1lOnt0eXBlOlN0cmluZ30sdHlwZTp7dHB5ZTpCb29sZWFufX0sY29tcHV0ZWQ6e2NsYXNzZXM6ZnVuY3Rpb24oKXtyZXR1cm4gYSh7XCJ2ZC1waWNrZXItaGVhZGVyLS1yYW5nZVwiOnRoaXMucmFuZ2V9LFwidmQtcGlja2VyLWhlYWRlci0tXCIuY29uY2F0KHRoaXMudHlwZSksdGhpcy50eXBlKX0seWVhcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLm11dGFibGVEYXRlP3RoaXMuZm9ybWF0dGVkSGVhZGVyWWVhcjpcIi1cIn0sZGF0ZUZvcm1hdHRlZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZvcm1hdHRlZEhlYWRlckRhdGV9LGlzRGF0ZVZpc2libGU6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5yYW5nZSYmXCJ5ZWFyXCIhPT10aGlzLnR5cGV9fSxtZXRob2RzOntnZW5ZZWFyOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXRoaXMuJGNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIse3N0YXRpY0NsYXNzOlwidmQtcGlja2VyLWhlYWRlcl9feWVhci1idXR0b25cIixvbjp7Y2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gdC4kZW1pdChcInVwZGF0ZS1tb2RlXCIsXCJ5ZWFyXCIpfX19LFt0aGlzLnllYXJdKSxuPXtzdGF0aWNDbGFzczpcInZkLXBpY2tlci1oZWFkZXJfX3llYXJcIixjbGFzczp7XCJ2ZC1waWNrZXItaGVhZGVyX195ZWFyLS1hY3RpdmVcIjpcInllYXJcIj09PXRoaXMubW9kZX19O3JldHVybiB0aGlzLiRjcmVhdGVFbGVtZW50KFwiZGl2XCIsbixbZV0pfSxnZW5EYXRlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXRoaXMuZ2VuVHJhbnNpdGlvbkdyb3VwKHtkYXRlOnRoaXMuZGF0ZUZvcm1hdHRlZCxpc0FjdGl2ZTpcInllYXJcIiE9PXRoaXMubW9kZSxvbkNsaWNrOmZ1bmN0aW9uKCl7cmV0dXJuIHQuJGVtaXQoXCJ1cGRhdGUtbW9kZVwiLFwiZGF0ZVwiKX19KTtyZXR1cm4gdGhpcy4kY3JlYXRlRWxlbWVudChcImRpdlwiLHtzdGF0aWNDbGFzczpcInZkLXBpY2tlci1oZWFkZXJfX3dyYXBcIn0sW2VdKX0sZ2VuUmFuZ2VEYXRlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nZW5UcmFuc2l0aW9uR3JvdXAoe2RhdGU6dGhpcy5kYXRlRm9ybWF0dGVkWzBdLGlzQWN0aXZlOkJvb2xlYW4odGhpcy5tdXRhYmxlRGF0ZS5zdGFydCl9KSxlPXRoaXMuZ2VuVHJhbnNpdGlvbkdyb3VwKHtkYXRlOnRoaXMuZGF0ZUZvcm1hdHRlZFsxXSxpc0FjdGl2ZTpCb29sZWFuKHRoaXMubXV0YWJsZURhdGUuZW5kKX0pO3JldHVybiB0aGlzLiRjcmVhdGVFbGVtZW50KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwidmQtcGlja2VyLWhlYWRlcl9fd3JhcFwifSxbdCxlXSl9LGdlblRyYW5zaXRpb25Hcm91cDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLG49dC5kYXRlLHI9dC5pc0FjdGl2ZSxpPXQub25DbGljaztyZXR1cm4gdGhpcy4kY3JlYXRlRWxlbWVudChcInRyYW5zaXRpb24tZ3JvdXBcIix7c3RhdGljQ2xhc3M6XCJ2ZC1waWNrZXItaGVhZGVyX19kYXRlXCIsY2xhc3M6e1widmQtcGlja2VyLWhlYWRlcl9fZGF0ZS0tYWN0aXZlXCI6cn0scHJvcHM6e25hbWU6dGhpcy50cmFuc2l0aW9uTmFtZSx0YWc6XCJkaXZcIn19LFtuXS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZS4kY3JlYXRlRWxlbWVudChcInNwYW5cIix7c3RhdGljQ2xhc3M6XCJ2ZC1waWNrZXItaGVhZGVyX193cmFwLWJ1dHRvblwiLGtleTp0LG9uOnp0KHt9LGkmJntjbGljazppfSl9LFt0XSl9KHQpfSkpKX19LHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcImRpdlwiLHRoaXMuc2V0QmFja2dyb3VuZENvbG9yKHRoaXMuY29sb3Ise3N0YXRpY0NsYXNzOlwidmQtcGlja2VyLWhlYWRlclwiLGNsYXNzOnRoaXMuY2xhc3Nlc30pLFshdGhpcy5yYW5nZSYmdGhpcy5nZW5ZZWFyKCksdGhpcy5pc0RhdGVWaXNpYmxlJiZ0aGlzLmdlbkRhdGUoKSx0aGlzLnJhbmdlJiZ0aGlzLmdlblJhbmdlRGF0ZSgpXSl9fSk7ZnVuY3Rpb24gcXQodCxlKXt2YXIgbj1PYmplY3Qua2V5cyh0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpO2UmJihyPXIuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLG4ucHVzaC5hcHBseShuLHIpfXJldHVybiBufWZ1bmN0aW9uIFJ0KHQpe2Zvcih2YXIgZT1hcmd1bWVudHMsbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspe3ZhciByPW51bGwhPWVbbl0/ZVtuXTp7fTtuJTI/cXQoT2JqZWN0KHIpLCEwKS5mb3JFYWNoKChmdW5jdGlvbihlKXthKHQsZSxyW2VdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyh0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHIpKTpxdChPYmplY3QocikpLmZvckVhY2goKGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLGUpKX0pKX1yZXR1cm4gdH12YXIgSnQ9YXQocnQseCkuZXh0ZW5kKHtuYW1lOlwiVkRQaWNrZXJQcmVzZXRzXCIscHJvcHM6e3JhbmdlUHJlc2V0czp7dHlwZTpBcnJheX0sbXV0YWJsZURhdGU6e3R5cGU6T2JqZWN0fSxtaW5EYXRlOnt0eXBlOltTdHJpbmcsTnVtYmVyLERhdGVdfSxtYXhEYXRlOnt0eXBlOltTdHJpbmcsTnVtYmVyLERhdGVdfSxjb2xvcjp7dHlwZTpTdHJpbmd9fSxjb21wdXRlZDp7cHJlc2V0c0Zvcm1hdHRlZDpmdW5jdGlvbigpe3ZhciB0PXRoaXM7aWYodGhpcy5yYW5nZVByZXNldHMpcmV0dXJuIHRoaXMucmFuZ2VQcmVzZXRzLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIFJ0KFJ0KHt9LGUpLHt9LHthdmFpbGFibGVEYXRlczoobj17ZGF0ZXM6ZS5kYXRlcyxtaW5EYXRlOnQubWluRGF0ZSxtYXhEYXRlOnQubWF4RGF0ZSxsb2NhbGU6dC5jdXJyZW50TG9jYWxlfSxyPW4uZGF0ZXMsYT12b2lkIDA9PT1yP3t9OnIsbz1uLm1pbkRhdGUscz1uLm1heERhdGUsYz1uLmxvY2FsZSxsPWEuc3RhcnQsdT1hLmVuZCxkPW98fFR0KHtsb2NhbGU6Y30pLnllYXIoZyksaD1zfHxUdCh7bG9jYWxlOmN9KS55ZWFyKGIpLEh0KHtzdGFydERhdGU6bCxlbmREYXRlOnUsbG9jYWxlOmN9KS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlzU2FtZU9yQWZ0ZXIoZCxcImRheVwiKSYmdC5pc1NhbWVPckJlZm9yZShpKGgsXCJkYXlcIikpfSkpKX0pO3ZhciBuLHIsYSxvLHMsYyxsLHUsZCxofSkpLnNwbGljZSgwLDYpfX0sbWV0aG9kczp7aXNQcmVzZXRTZWxlY3RlZDpmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fSxlPXQuYXZhaWxhYmxlRGF0ZXMsbj12b2lkIDA9PT1lP1tdOmU7cmV0dXJuISgwPT09bi5sZW5ndGh8fCF0aGlzLm11dGFibGVEYXRlKSYmKCR0KG5bMF0sdGhpcy5tdXRhYmxlRGF0ZS5zdGFydCkmJiR0KG5bbi5sZW5ndGgtMV0sdGhpcy5tdXRhYmxlRGF0ZS5lbmQpKX0saXNQcmVzZXRWYWxpZDpmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fSxlPXQuYXZhaWxhYmxlRGF0ZXMsbj12b2lkIDA9PT1lP1tdOmU7cmV0dXJuISF0aGlzLm11dGFibGVEYXRlJiZuLmxlbmd0aD4wfSxzZXRQcmVzZXREYXRlczpmdW5jdGlvbih0KXt2YXIgZT10LmF2YWlsYWJsZURhdGVzO3RoaXMuaXNQcmVzZXRTZWxlY3RlZCh7YXZhaWxhYmxlRGF0ZXM6ZX0pfHx0aGlzLiRlbWl0KFwidXBkYXRlLXJhbmdlXCIse3N0YXJ0OmVbMF0sZW5kOmVbZS5sZW5ndGgtMV19KX0sZ2VuV3JhcHBlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLiRjcmVhdGVFbGVtZW50KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwidmQtcGlja2VyLXByZXNldHNfX3dyYXBwZXJcIn0sdGhpcy5wcmVzZXRzRm9ybWF0dGVkLm1hcCh0aGlzLmdlbkJ1dHRvbikpfSxnZW5CdXR0b246ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLHI9dGhpcy4kY3JlYXRlRWxlbWVudChcImRpdlwiLHRoaXMuc2V0QmFja2dyb3VuZENvbG9yKHRoaXMuY29sb3Ise3N0YXRpY0NsYXNzOlwidmQtcGlja2VyLXByZXNldF9fZWZmZWN0XCJ9KSksaT10aGlzLiRjcmVhdGVFbGVtZW50KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwidmQtcGlja2VyLXByZXNldF9fbmFtZVwiLGRvbVByb3BzOntpbm5lckhUTUw6dC5uYW1lfX0pO3JldHVybiB0aGlzLiRjcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIse2tleTplLHN0YXRpY0NsYXNzOlwidmQtcGlja2VyLXByZXNldFwiLGNsYXNzOntcInZkLXBpY2tlci1wcmVzZXQtLXNlbGVjdGVkXCI6dGhpcy5pc1ByZXNldFNlbGVjdGVkKHQpLFwidmQtcGlja2VyLXByZXNldC0tZGlzYWJsZWRcIjohdGhpcy5pc1ByZXNldFZhbGlkKHQpfSxhdHRyczp7dHlwZTpcImJ1dHRvblwifSxvbjp7Y2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gbi5zZXRQcmVzZXREYXRlcyh0KX19fSxbcixpXSl9fSxyZW5kZXI6ZnVuY3Rpb24odCl7aWYodGhpcy5wcmVzZXRzRm9ybWF0dGVkKXJldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwidmQtcGlja2VyLXByZXNldHNcIn0sW3RoaXMuZ2VuV3JhcHBlcigpXSl9fSk7ZnVuY3Rpb24gWHQodCxlKXt2YXIgbj10LmNoYW5nZWRUb3VjaGVzWzBdO2UudG91Y2hlbmRYPW4uY2xpZW50WCxlLnRvdWNoZW5kWT1uLmNsaWVudFksZS5lbmQmJmUuZW5kKE9iamVjdC5hc3NpZ24odCxlKSksZnVuY3Rpb24odCl7dmFyIGU9dC50b3VjaHN0YXJ0WCxuPXQudG91Y2hlbmRYLHI9dC50b3VjaHN0YXJ0WSxpPXQudG91Y2hlbmRZO3Qub2Zmc2V0WD1uLWUsdC5vZmZzZXRZPWktcixNYXRoLmFicyh0Lm9mZnNldFkpPC41Kk1hdGguYWJzKHQub2Zmc2V0WCkmJih0LmxlZnQmJm48ZS0xNiYmdC5sZWZ0KHQpLHQucmlnaHQmJm4+ZSsxNiYmdC5yaWdodCh0KSksTWF0aC5hYnModC5vZmZzZXRYKTwuNSpNYXRoLmFicyh0Lm9mZnNldFkpJiYodC51cCYmaTxyLTE2JiZ0LnVwKHQpLHQuZG93biYmaT5yKzE2JiZ0LmRvd24odCkpfShlKX1mdW5jdGlvbiBRdCh0KXt2YXIgZT17dG91Y2hzdGFydFg6MCx0b3VjaHN0YXJ0WTowLHRvdWNoZW5kWDowLHRvdWNoZW5kWTowLHRvdWNobW92ZVg6MCx0b3VjaG1vdmVZOjAsb2Zmc2V0WDowLG9mZnNldFk6MCxsZWZ0OnQubGVmdCxyaWdodDp0LnJpZ2h0LHVwOnQudXAsZG93bjp0LmRvd24sc3RhcnQ6dC5zdGFydCxtb3ZlOnQubW92ZSxlbmQ6dC5lbmR9O3JldHVybnt0b3VjaHN0YXJ0OmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbih0LGUpe3ZhciBuPXQuY2hhbmdlZFRvdWNoZXNbMF07ZS50b3VjaHN0YXJ0WD1uLmNsaWVudFgsZS50b3VjaHN0YXJ0WT1uLmNsaWVudFksZS5zdGFydCYmZS5zdGFydChPYmplY3QuYXNzaWduKHQsZSkpfSh0LGUpfSx0b3VjaGVuZDpmdW5jdGlvbih0KXtyZXR1cm4gWHQodCxlKX0sdG91Y2htb3ZlOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbih0LGUpe3ZhciBuPXQuY2hhbmdlZFRvdWNoZXNbMF07ZS50b3VjaG1vdmVYPW4uY2xpZW50WCxlLnRvdWNobW92ZVk9bi5jbGllbnRZLGUubW92ZSYmZS5tb3ZlKE9iamVjdC5hc3NpZ24odCxlKSl9KHQsZSl9fX12YXIgVXQ9e2luc2VydGVkOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1lLnZhbHVlLGk9ci5wYXJlbnQ/dC5wYXJlbnRFbGVtZW50OnQsYT1yLm9wdGlvbnN8fHtwYXNzaXZlOiEwfTtpZihpKXt2YXIgbz1RdChlLnZhbHVlKTtpLl90b3VjaEhhbmRsZXJzPU9iamVjdChpLl90b3VjaEhhbmRsZXJzKSxpLl90b3VjaEhhbmRsZXJzW24uY29udGV4dC5fdWlkXT1vLE9iamVjdC5rZXlzKG8pLmZvckVhY2goKGZ1bmN0aW9uKHQpe2kuYWRkRXZlbnRMaXN0ZW5lcih0LG9bdF0sYSl9KSl9fSx1bmJpbmQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByPWUudmFsdWUucGFyZW50P3QucGFyZW50RWxlbWVudDp0O2lmKHImJnIuX3RvdWNoSGFuZGxlcnMpe3ZhciBpPXIuX3RvdWNoSGFuZGxlcnNbbi5jb250ZXh0Ll91aWRdO09iamVjdC5rZXlzKGkpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3IucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LGlbdF0pfSkpLGRlbGV0ZSByLl90b3VjaEhhbmRsZXJzW24uY29udGV4dC5fdWlkXX19fTtmdW5jdGlvbiBadCh0LGUpe3ZhciBuPU9iamVjdC5rZXlzKHQpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCk7ZSYmKHI9ci5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkuZW51bWVyYWJsZX0pKSksbi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59dmFyIEd0PWF0KHJ0LHgpLmV4dGVuZCh7bmFtZTpcIlZEUGlja2VyVGFibGVEYXlcIixpbmplY3Q6W1wiVkRQaWNrZXJcIl0scHJvcHM6e2FsbG93ZWREYXRlczp7dHlwZTpGdW5jdGlvbn0sY29sb3I6e3R5cGU6U3RyaW5nfSxkYXk6e3R5cGU6T2JqZWN0LHJlcXVpcmVkOiEwfSxtYXhEYXRlOnt0eXBlOltTdHJpbmcsTnVtYmVyLERhdGVdfSxtaW5EYXRlOnt0eXBlOltTdHJpbmcsTnVtYmVyLERhdGVdfSxtdXRhYmxlRGF0ZTp7dHlwZTpbU3RyaW5nLE9iamVjdF19LHJhbmdlOnt0eXBlOkJvb2xlYW59LHJhbmdlQ3VycmVudEhvdmVyZWREYXk6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6dm9pZCAwfX0sY29tcHV0ZWQ6e2NsYXNzZXM6ZnVuY3Rpb24oKXtyZXR1cm57XCJ2ZC1waWNrZXJfX3RhYmxlLWRheS0tc2VsZWN0ZWRcIjp0aGlzLmlzU2VsZWN0ZWQmJiF0aGlzLmlzRGlzYWJsZWQsXCJ2ZC1waWNrZXJfX3RhYmxlLWRheS0tYmV0d2VlblwiOnRoaXMucmFuZ2UmJnRoaXMuaXNCZXR3ZWVuLFwidmQtcGlja2VyX190YWJsZS1kYXktLWluLXJhbmdlXCI6dGhpcy5yYW5nZSYmdGhpcy5pc0luUmFuZ2UsXCJ2ZC1waWNrZXJfX3RhYmxlLWRheS0tZmlyc3RcIjp0aGlzLnJhbmdlJiZ0aGlzLmZpcnN0SW5SYW5nZSxcInZkLXBpY2tlcl9fdGFibGUtZGF5LS1sYXN0XCI6dGhpcy5yYW5nZSYmdGhpcy5sYXN0SW5SYW5nZSYmQm9vbGVhbih0aGlzLm11dGFibGVEYXRlLmVuZCksXCJ2ZC1waWNrZXJfX3RhYmxlLWRheS0tc2VsZWN0LXN0YXJ0XCI6dGhpcy5yYW5nZSYmIXRoaXMubXV0YWJsZURhdGUuc3RhcnQsXCJ2ZC1waWNrZXJfX3RhYmxlLWRheS0tc2VsZWN0LWVuZFwiOnRoaXMucmFuZ2UmJnRoaXMubXV0YWJsZURhdGUuc3RhcnQmJiF0aGlzLm11dGFibGVEYXRlLmVuZCxcInZkLXBpY2tlcl9fdGFibGUtZGF5LS1kaXNhYmxlZFwiOnRoaXMuaXNEaXNhYmxlZH19LGZvcm1hdHRlZERheTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRheS5mb3JtYXQoXCJEXCIpfSxpc0N1cnJlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gQ3Qoe2RhdGU6dGhpcy5kYXksdHlwZTpcImRhdGVcIixsb2NhbGU6dGhpcy5jdXJyZW50TG9jYWxlfSl9LGlzU2VsZWN0ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yYW5nZT9bXS5jb25jYXQoUSh0aGlzLm11dGFibGVEYXRlLnN0YXJ0P1t0aGlzLm11dGFibGVEYXRlLnN0YXJ0LnN0YXJ0T2YoXCJkYXlcIikudW5peCgpXTpbXSksUSh0aGlzLm11dGFibGVEYXRlLmVuZD9bdGhpcy5tdXRhYmxlRGF0ZS5lbmQuc3RhcnRPZihcImRheVwiKS51bml4KCldOltdKSkuaW5jbHVkZXModGhpcy5kYXkudW5peCgpKTp0aGlzLm11dGFibGVEYXRlJiZ0aGlzLm11dGFibGVEYXRlLnN0YXJ0T2YoXCJkYXlcIikudW5peCgpPT09dGhpcy5kYXkudW5peCgpfSxpc0JldHdlZW46ZnVuY3Rpb24oKXtyZXR1cm4hKCF0aGlzLm11dGFibGVEYXRlLnN0YXJ0JiYhdGhpcy5tdXRhYmxlRGF0ZS5lbmQpJiZQdCh0aGlzLmRheSx0aGlzLm11dGFibGVEYXRlLnN0YXJ0LHRoaXMubXV0YWJsZURhdGUuZW5kKX0saXNJblJhbmdlOmZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLnJhbmdlQ3VycmVudEhvdmVyZWREYXkmJihMdCh0aGlzLnJhbmdlQ3VycmVudEhvdmVyZWREYXksdGhpcy5tdXRhYmxlRGF0ZS5lbmQpP1B0KHRoaXMuZGF5LHRoaXMucmFuZ2VDdXJyZW50SG92ZXJlZERheSx0aGlzLm11dGFibGVEYXRlLmVuZCk6UHQodGhpcy5kYXksdGhpcy5tdXRhYmxlRGF0ZS5zdGFydCx0aGlzLnJhbmdlQ3VycmVudEhvdmVyZWREYXkpKX0sZmlyc3RJblJhbmdlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXV0YWJsZURhdGUuc3RhcnQmJnRoaXMubXV0YWJsZURhdGUuc3RhcnQuc3RhcnRPZihcImRheVwiKS51bml4KCk9PT10aGlzLmRheS51bml4KCl9LGxhc3RJblJhbmdlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXV0YWJsZURhdGUuZW5kJiZ0aGlzLm11dGFibGVEYXRlLmVuZC5zdGFydE9mKFwiZGF5XCIpLnVuaXgoKT09PXRoaXMuZGF5LnVuaXgoKX0saXNEYXRlQWxsb3dlZDpmdW5jdGlvbigpe3JldHVybiB4dCh7ZGF0ZTp0aGlzLmRheSxtaW46dGhpcy5taW5EYXRlLG1heDp0aGlzLm1heERhdGUsYWxsb3dlZEZuOnRoaXMuYWxsb3dlZERhdGVzfSl9LGlzRGlzYWJsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5pc0RhdGVBbGxvd2VkfSxzY29wZWRTbG90RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5WRFBpY2tlcixcImRheVwiKX19LG1ldGhvZHM6e29uRGF5Q2xpY2s6ZnVuY3Rpb24odCl7dGhpcy4kZW1pdChcInNlbGVjdC1kYXlcIix0KX0sZ2VuV3JhcHBlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLiRjcmVhdGVFbGVtZW50KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwidmQtcGlja2VyX190YWJsZS1kYXlfX3dyYXBwZXJcIixhdHRyczp7XCJkYXRhLWRhdGVcIjp0aGlzLmRheS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpfX0sW3RoaXMuaXNDdXJyZW50JiZ0aGlzLmdlbkRheUN1cnJlbnQoKSx0aGlzLmdlbkRheUVmZmVjdCgpLHRoaXMuZ2VuRGF5VGV4dCgpXSl9LGdlbkRheUN1cnJlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kY3JlYXRlRWxlbWVudChcInNwYW5cIix7c3RhdGljQ2xhc3M6XCJ2ZC1waWNrZXJfX3RhYmxlLWRheV9fY3VycmVudFwifSl9LGdlbkRheUVmZmVjdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLiRjcmVhdGVFbGVtZW50KFwic3BhblwiLHtzdGF0aWNDbGFzczpcInZkLXBpY2tlcl9fdGFibGUtZGF5X19lZmZlY3RcIn0pfSxnZW5EYXlUZXh0OmZ1bmN0aW9uKCl7aWYoIXRoaXMuc2NvcGVkU2xvdERheSlyZXR1cm4gdGhpcy4kY3JlYXRlRWxlbWVudChcInNwYW5cIix7c3RhdGljQ2xhc3M6XCJ2ZC1waWNrZXJfX3RhYmxlLWRheV9fdGV4dFwifSxbdGhpcy5mb3JtYXR0ZWREYXldKTt2YXIgdD17Zm9ybWF0dGVkRGF5OnRoaXMuZm9ybWF0dGVkRGF5LGlzQ3VycmVudDp0aGlzLmlzVG9kYXksaXNTZWxlY3RlZDp0aGlzLmlzU2VsZWN0ZWQmJiF0aGlzLmlzRGlzYWJsZWQsaXNCZXR3ZWVuOnRoaXMucmFuZ2UmJnRoaXMuaXNCZXR3ZWVuLGlzSW5SYW5nZTp0aGlzLnJhbmdlJiZ0aGlzLmlzSW5SYW5nZSxpc0ZpcnN0UmFuZ2VEYXk6dGhpcy5yYW5nZSYmdGhpcy5maXJzdEluUmFuZ2UsaXNMYXN0UmFuZ2VEYXk6dGhpcy5yYW5nZSYmdGhpcy5sYXN0SW5SYW5nZSYmQm9vbGVhbih0aGlzLm11dGFibGVEYXRlLmVuZCksaXNGaXJzdFNlbGVjdGVkRGF5OnRoaXMucmFuZ2UmJiF0aGlzLm11dGFibGVEYXRlLnN0YXJ0LGlzTGFzdFNlbGVjdGVkRGF5OnRoaXMucmFuZ2UmJnRoaXMubXV0YWJsZURhdGUuc3RhcnQmJiF0aGlzLm11dGFibGVEYXRlLmVuZCxpc0Rpc2FibGVkOnRoaXMuaXNEaXNhYmxlZH0sZT10aGlzLlZEUGlja2VyLiRzY29wZWRTbG90cy5kYXkoZnVuY3Rpb24odCl7Zm9yKHZhciBlPWFyZ3VtZW50cyxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl7dmFyIHI9bnVsbCE9ZVtuXT9lW25dOnt9O24lMj9adChPYmplY3QociksITApLmZvckVhY2goKGZ1bmN0aW9uKGUpe2EodCxlLHJbZV0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMocikpOlp0KE9iamVjdChyKSkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsZSkpfSkpfXJldHVybiB0fSh7ZGF5OnRoaXMuZm9ybWF0dGVkRGF5fSx0KSk7cmV0dXJuIHRoaXMuJGNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIse3N0YXRpY0NsYXNzOlwidmQtcGlja2VyX190YWJsZS1kYXlfX3RleHRcIn0sW2VdKX19LHJlbmRlcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLG49e3N0YXRpY0NsYXNzOlwidmQtcGlja2VyX190YWJsZS1kYXlcIixjbGFzczp0aGlzLmNsYXNzZXMsYXR0cnM6e3R5cGU6XCJidXR0b25cIixkaXNhYmxlZDp0aGlzLmlzRGlzYWJsZWQsXCJkYXRhLWRhdGVcIjp0aGlzLmRheS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpfSxvbjp7Y2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gZS5vbkRheUNsaWNrKGUuZGF5KX19fTtyZXR1cm4gdChcImJ1dHRvblwiLHRoaXMuc2V0VGV4dENvbG9yKHRoaXMuY29sb3IsbiksW3RoaXMuZ2VuV3JhcHBlcigpXSl9fSksS3Q9YXQocnQpLmV4dGVuZCh7bmFtZTpcIlZEUGlja2VyVGFibGVEYXRlXCIsZGlyZWN0aXZlczp7VG91Y2g6VXR9LHByb3BzOnthbGxvd2VkRGF0ZXM6e3R5cGU6RnVuY3Rpb259LGNvbG9yOnt0eXBlOlN0cmluZ30scGlja2VyRGF0ZTp7dHlwZTpbU3RyaW5nLE9iamVjdF19LGlzUmFuZ2VTZWxlY3RlZDp7dHlwZTpCb29sZWFufSxtYXhEYXRlOnt0eXBlOltTdHJpbmcsTnVtYmVyLERhdGVdfSxtaW5EYXRlOnt0eXBlOltTdHJpbmcsTnVtYmVyLERhdGVdfSxtdXRhYmxlRGF0ZTp7dHlwZTpbU3RyaW5nLE9iamVjdF19LHJhbmdlOnt0eXBlOkJvb2xlYW59LHRyYW5zaXRpb25OYW1lOnt0eXBlOlN0cmluZ319LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57cmFuZ2VDdXJyZW50SG92ZXJlZERheTp2b2lkIDB9fSxjb21wdXRlZDp7d2Vla0RheXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5waWNrZXJEYXRlLmdldFdlZWtEYXlzKCl9LHNwYWNlQmVmb3JlRmlyc3REYXk6ZnVuY3Rpb24oKXtyZXR1cm4gUShBcnJheSh0aGlzLnBpY2tlckRhdGUuZ2V0V2Vla1N0YXJ0KCkpLmtleXMoKSl9fSx3YXRjaDp7cmFuZ2VDdXJyZW50SG92ZXJlZERheTpmdW5jdGlvbih0KXt0JiZ0aGlzLiRlbWl0KFwidXBkYXRlLWhvdmVyZWQtZGF5XCIsdCl9fSxtZXRob2RzOntvbkRheUNsaWNrOmZ1bmN0aW9uKHQpe3RoaXMucmFuZ2VDdXJyZW50SG92ZXJlZERheT12b2lkIDAsdGhpcy4kZW1pdChcInNlbGVjdC1kYXRlXCIsdCl9LGhhbmRsZU1vdXNlTW92ZTpmdW5jdGlvbih0KXt2YXIgZT10LnRhcmdldCxuPVwic3RyaW5nXCI9PXR5cGVvZiBlLmNsYXNzTmFtZSYmXCJ2ZC1waWNrZXJfX3RhYmxlLWRheXNcIj09PWUuY2xhc3NOYW1lLnNwbGl0KFwiIFwiKVswXTtpZih0aGlzLnJhbmdlJiYhdGhpcy5pc1JhbmdlU2VsZWN0ZWQmJiFuKXt2YXIgcj1lLmRhdGFzZXQuZGF0ZTtpZighcilyZXR1cm4gdGhpcy5oYW5kbGVNb3VzZU1vdmUoe3RhcmdldDplLnBhcmVudE5vZGV9KTt2YXIgaT1yPT09dGhpcy5yYW5nZUN1cnJlbnRIb3ZlcmVkRGF5O3ImJiFpJiYodGhpcy5yYW5nZUN1cnJlbnRIb3ZlcmVkRGF5PWUuZGF0YXNldC5kYXRlKX19LGdlbldlZWs6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiB0aGlzLiRjcmVhdGVFbGVtZW50KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwidmQtcGlja2VyX190YWJsZS13ZWVrXCJ9LHRoaXMud2Vla0RheXMubWFwKChmdW5jdGlvbihlLG4pe3JldHVybiB0LiRjcmVhdGVFbGVtZW50KFwiZGl2XCIse2tleTpuLGRvbVByb3BzOntpbm5lckhUTUw6ZX0sc3RhdGljQ2xhc3M6XCJ2ZC1waWNrZXJfX3RhYmxlLXdlZWtkYXlcIn0pfSkpKX0sZ2VuRGF5c1dyYXBwZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kY3JlYXRlRWxlbWVudChcInRyYW5zaXRpb24tZ3JvdXBcIix7c3RhdGljQ2xhc3M6XCJ2ZC1waWNrZXJfX3RhYmxlLWRheXNfX3dyYXBwZXJcIixwcm9wczp7bmFtZTp0aGlzLnRyYW5zaXRpb25OYW1lLHRhZzpcImRpdlwifX0sW3RoaXMucGlja2VyRGF0ZV0ubWFwKHRoaXMuZ2VuRGF5cykpfSxnZW5EYXlzOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHRoaXMuJGNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJ2ZC1waWNrZXJfX3RhYmxlLWRheXNcIixrZXk6dC5tb250aCxvbjp7bW91c2Vtb3ZlOnRoaXMuaGFuZGxlTW91c2VNb3ZlfX0sW3RoaXMuc3BhY2VCZWZvcmVGaXJzdERheS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBlLiRjcmVhdGVFbGVtZW50KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwidmQtcGlja2VyX190YWJsZS1kYXlcIixrZXk6XCJzcGFjZS1cIi5jb25jYXQodCl9KX0pKSx0aGlzLnBpY2tlckRhdGUuZ2V0RGF5cygpLm1hcCh0aGlzLmdlbkRheSldKX0sZ2VuRGF5OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuJGNyZWF0ZUVsZW1lbnQoR3Qse2tleTplLHByb3BzOnthbGxvd2VkRGF0ZXM6dGhpcy5hbGxvd2VkRGF0ZXMsY29sb3I6dGhpcy5jb2xvcixkYXk6dCxtYXhEYXRlOnRoaXMubWF4RGF0ZSxtaW5EYXRlOnRoaXMubWluRGF0ZSxtdXRhYmxlRGF0ZTp0aGlzLm11dGFibGVEYXRlLHJhbmdlOnRoaXMucmFuZ2UscmFuZ2VDdXJyZW50SG92ZXJlZERheTp0aGlzLnJhbmdlQ3VycmVudEhvdmVyZWREYXksbG9jYWxlOnRoaXMuY3VycmVudExvY2FsZX0sb246e1wic2VsZWN0LWRheVwiOnRoaXMub25EYXlDbGlja319KX19LHJlbmRlcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwidmQtcGlja2VyX190YWJsZVwiLGRpcmVjdGl2ZXM6W3tuYW1lOlwidG91Y2hcIix2YWx1ZTp7bGVmdDpmdW5jdGlvbigpe3JldHVybiBlLiRlbWl0KFwidXBkYXRlLW1vbnRoXCIsXCJuZXh0XCIpfSxyaWdodDpmdW5jdGlvbigpe3JldHVybiBlLiRlbWl0KFwidXBkYXRlLW1vbnRoXCIsXCJwcmV2XCIpfX19XSxvbjp7dG91Y2hzdGFydDpmdW5jdGlvbih0KXtyZXR1cm4gdC5zdG9wUHJvcGFnYXRpb24oKX19fSxbdGhpcy5nZW5XZWVrKCksdGhpcy5nZW5EYXlzV3JhcHBlcigpXSl9fSksdGU9e25hbWU6XCJWRFBpY2tlclZhbGlkYXRlXCIsbWl4aW5zOltydF0scHJvcHM6e2J1dHRvblZhbGlkYXRlOnt0eXBlOlN0cmluZ30sYnV0dG9uQ2FuY2VsOnt0eXBlOlN0cmluZ30sY29sb3I6e3R5cGU6U3RyaW5nfSxyYW5nZTp7dHlwZTpCb29sZWFufSxtdXRhYmxlRGF0ZTp7dHlwZTpPYmplY3R9fSxjb21wdXRlZDp7aXNEaXNhYmxlZFZhbGlkYXRpb246ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMucmFuZ2UmJihcIm9iamVjdFwiIT09TCh0aGlzLm11dGFibGVEYXRlKXx8IU9iamVjdC52YWx1ZXModGhpcy5tdXRhYmxlRGF0ZSkuZXZlcnkoKGZ1bmN0aW9uKHQpe3JldHVybiBCb29sZWFuKHQpfSkpKX19LG1ldGhvZHM6e2dlbkJ1dHRvbkNhbmNlbDpmdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIHRoaXMuJGNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIix7c3RhdGljQ2xhc3M6XCJ2ZC1waWNrZXItdmFsaWRhdGVfX2J1dHRvbiB2ZC1waWNrZXItdmFsaWRhdGVfX2J1dHRvbi1jYW5jZWxcIixhdHRyczp7dHlwZTpcImJ1dHRvblwifSxvbjp7Y2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gdC4kZW1pdChcImNhbmNlbFwiKX19fSxbdGhpcy5nZW5CdXR0b25FZmZlY3QoKSx0aGlzLmdlbkJ1dHRvblRleHQodGhpcy5idXR0b25DYW5jZWwpXSl9LGdlbkJ1dHRvblZhbGlkYXRlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gdGhpcy4kY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLHRoaXMuc2V0VGV4dENvbG9yKHRoaXMuY29sb3Ise3N0YXRpY0NsYXNzOlwidmQtcGlja2VyLXZhbGlkYXRlX19idXR0b24gdmQtcGlja2VyLXZhbGlkYXRlX19idXR0b24tdmFsaWRhdGVcIixhdHRyczp7dHlwZTpcImJ1dHRvblwiLGRpc2FibGVkOnRoaXMuaXNEaXNhYmxlZFZhbGlkYXRpb259LG9uOntjbGljazpmdW5jdGlvbigpe3JldHVybiB0LiRlbWl0KFwidmFsaWRhdGVcIil9fX0pLFt0aGlzLmdlbkJ1dHRvbkVmZmVjdCgpLHRoaXMuZ2VuQnV0dG9uVGV4dCh0aGlzLmJ1dHRvblZhbGlkYXRlKV0pfSxnZW5CdXR0b25FZmZlY3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kY3JlYXRlRWxlbWVudChcImRpdlwiLHRoaXMuc2V0QmFja2dyb3VuZENvbG9yKHRoaXMuY29sb3Ise3N0YXRpY0NsYXNzOlwidmQtcGlja2VyLXZhbGlkYXRlX19lZmZlY3RcIn0pKX0sZ2VuQnV0dG9uVGV4dDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy4kY3JlYXRlRWxlbWVudChcImRpdlwiLHtzdGF0aWNDbGFzczpcInZkLXBpY2tlci12YWxpZGF0ZV9fbmFtZVwiLGRvbVByb3BzOntpbm5lckhUTUw6dH19KX19LHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInZkLXBpY2tlci12YWxpZGF0ZVwifSxbdGhpcy5nZW5CdXR0b25DYW5jZWwoKSx0aGlzLmdlbkJ1dHRvblZhbGlkYXRlKCldKX19O2Z1bmN0aW9uIGVlKHQsZSl7dmFyIG49T2JqZWN0LmtleXModCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KTtlJiYocj1yLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn1mdW5jdGlvbiBuZSh0KXtmb3IodmFyIGU9YXJndW1lbnRzLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXt2YXIgcj1udWxsIT1lW25dP2Vbbl06e307biUyP2VlKE9iamVjdChyKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7YSh0LGUscltlXSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXModCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhyKSk6ZWUoT2JqZWN0KHIpKS5mb3JFYWNoKChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixlKSl9KSl9cmV0dXJuIHR9dmFyIHJlPWF0KHJ0LHgpLmV4dGVuZCh7bmFtZTpcIlZEUGlja2VyTW9udGhzXCIscHJvcHM6e2FjdGl2ZTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LGFsbG93ZWREYXRlczp7dHlwZTpGdW5jdGlvbn0sY29sb3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6U3RyaW5nfSxwaWNrZXJEYXRlOnt0eXBlOk9iamVjdCxkZWZhdWx0Ok9iamVjdH0sbWF4Ont0eXBlOltTdHJpbmcsTnVtYmVyLERhdGVdfSxtaW46e3R5cGU6W1N0cmluZyxOdW1iZXIsRGF0ZV19LG11dGFibGVEYXRlOnt0eXBlOk9iamVjdCxkZWZhdWx0OnZvaWQgMH0scmFuZ2U6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSx0cmFuc2l0aW9uTmFtZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDpTdHJpbmd9LHR5cGU6e3R5cGU6U3RyaW5nfSx2aXNpYmxlWWVhcnNOdW1iZXI6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6MTB9fSxjb21wdXRlZDp7eWVhckZvcm1hdHRlZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBpY2tlckRhdGUuZ2V0WWVhckZvcm1hdHRlZCgpfSxnZXRNb250aHM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5waWNrZXJEYXRlLmdldE1vbnRocygpfX0sbWV0aG9kczp7aXNDdXJyZW50OmZ1bmN0aW9uKHQpe3JldHVybiBDdCh7ZGF0ZTpBdCh7eWVhcjp0aGlzLnBpY2tlckRhdGUueWVhcixtb250aDp0LGxvY2FsZTp0aGlzLmN1cnJlbnRMb2NhbGV9KSx0eXBlOlwibW9udGhcIixsb2NhbGU6dGhpcy5jdXJyZW50TG9jYWxlfSl9LGlzU2VsZWN0ZWQ6ZnVuY3Rpb24odCl7aWYodGhpcy5yYW5nZXx8IXRoaXMubXV0YWJsZURhdGUpcmV0dXJuITE7dmFyIGU9QXQoe3llYXI6dGhpcy5waWNrZXJEYXRlLnllYXIsbW9udGg6dCxsb2NhbGU6dGhpcy5jdXJyZW50TG9jYWxlfSk7cmV0dXJuICR0KHRoaXMubXV0YWJsZURhdGUuZm9ybWF0KFwiWVlZWS1NTVwiKSxlLmZvcm1hdChcIllZWVktTU1cIiksXCJtb250aFwiKX0saXNBbGxvd2VkOmZ1bmN0aW9uKHQpe3JldHVybiB4dCh7ZGF0ZTpBdCh7eWVhcjp0aGlzLnllYXJGb3JtYXR0ZWQsbW9udGg6dCxsb2NhbGU6dGhpcy5jdXJyZW50TG9jYWxlfSksbWluOnRoaXMubWluLG1heDp0aGlzLm1heCx0eXBlOlwibW9udGhcIixhbGxvd2VkRm46dGhpcy5hbGxvd2VkRGF0ZXN9KX0sZ2VuVHJhbnNpdGlvbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLiRjcmVhdGVFbGVtZW50KFwidHJhbnNpdGlvbi1ncm91cFwiLHtzdGF0aWNDbGFzczpcInZkLXBpY2tlcl9fbW9udGhzLWlubmVyXCIscHJvcHM6e3RhZzpcImRpdlwiLG5hbWU6dGhpcy50cmFuc2l0aW9uTmFtZX19LFt0aGlzLnBpY2tlckRhdGUueWVhcl0ubWFwKHRoaXMuZ2VuTW9udGhMaXN0KSl9LGdlbk1vbnRoTGlzdDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy4kY3JlYXRlRWxlbWVudChcImRpdlwiLHtzdGF0aWNDbGFzczpcInZkLXBpY2tlcl9fbW9udGhzLWxpc3RcIixrZXk6dH0sW3RoaXMuZ2V0TW9udGhzLm1hcCh0aGlzLmdlbk1vbnRoQnV0dG9uKV0pfSxnZW5Nb250aEJ1dHRvbjpmdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMscj10aGlzLmlzQ3VycmVudChlKSYmIXRoaXMuaXNTZWxlY3RlZChlKSxpPXRoaXMuaXNTZWxlY3RlZChlKSxhPXRoaXMuJGNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIix7a2V5OmUsc3RhdGljQ2xhc3M6XCJ2ZC1waWNrZXJfX21vbnRocy1idXR0b25cIixzdHlsZTpuZShuZSh7fSxyJiZ7XCJib3JkZXItY29sb3JcIjp0aGlzLmNvbG9yfSksaSYmbmUobmUoe30sdGhpcy5zZXRUZXh0Q29sb3IoXCIjZmZmXCIpKSx0aGlzLnNldEJhY2tncm91bmRDb2xvcih0aGlzLmNvbG9yKSkpLGF0dHJzOnt0eXBlOlwiYnV0dG9uXCIsZGlzYWJsZWQ6IXRoaXMuaXNBbGxvd2VkKGUpfSxvbjp7Y2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gbi4kZW1pdChcImlucHV0XCIsZSxcIm1vbnRoXCIpfX19LFt0XSk7cmV0dXJuIHRoaXMuJGNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJ2ZC1waWNrZXJfX21vbnRocy1idXR0b25fX3dyYXBwZXJcIn0sW2FdKX19LHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInZkLXBpY2tlcl9fbW9udGhzXCJ9LFt0aGlzLmdlblRyYW5zaXRpb24oKV0pfX0pO2Z1bmN0aW9uIGllKHQsZSl7dmFyIG49T2JqZWN0LmtleXModCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KTtlJiYocj1yLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn1mdW5jdGlvbiBhZSh0KXtmb3IodmFyIGU9YXJndW1lbnRzLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXt2YXIgcj1udWxsIT1lW25dP2Vbbl06e307biUyP2llKE9iamVjdChyKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7YSh0LGUscltlXSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXModCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhyKSk6aWUoT2JqZWN0KHIpKS5mb3JFYWNoKChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixlKSl9KSl9cmV0dXJuIHR9dmFyIG9lPWF0KHJ0LHgpLmV4dGVuZCh7bmFtZTpcIlZEUGlja2VyUXVhcnRlcnNcIixwcm9wczp7YWN0aXZlOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sYWxsb3dlZERhdGVzOnt0eXBlOkZ1bmN0aW9ufSxjb2xvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDpTdHJpbmd9LHBpY2tlckRhdGU6e3R5cGU6T2JqZWN0LGRlZmF1bHQ6T2JqZWN0fSxtYXg6e3R5cGU6W1N0cmluZyxOdW1iZXIsRGF0ZV19LG1pbjp7dHlwZTpbU3RyaW5nLE51bWJlcixEYXRlXX0sbXV0YWJsZURhdGU6e3R5cGU6T2JqZWN0LGRlZmF1bHQ6dm9pZCAwfSx0cmFuc2l0aW9uTmFtZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDpTdHJpbmd9fSxjb21wdXRlZDp7Z2V0UXVhcnRlcnM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5waWNrZXJEYXRlLmdldFF1YXJ0ZXJzKCl9fSxtZXRob2RzOntpc0N1cnJlbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIEN0KHtkYXRlOkF0KHt5ZWFyOnRoaXMucGlja2VyRGF0ZS55ZWFyLG1vbnRoOnQsbG9jYWxlOnRoaXMuY3VycmVudExvY2FsZX0pLHR5cGU6XCJxdWFydGVyXCIsbG9jYWxlOnRoaXMuY3VycmVudExvY2FsZX0pfSxpc1NlbGVjdGVkOmZ1bmN0aW9uKHQpe2lmKCF0aGlzLm11dGFibGVEYXRlKXJldHVybiExO3ZhciBlPUF0KHt5ZWFyOnRoaXMucGlja2VyRGF0ZS55ZWFyLG1vbnRoOnQsbG9jYWxlOnRoaXMuY3VycmVudExvY2FsZX0pO3JldHVybiAkdCh0aGlzLm11dGFibGVEYXRlLmZvcm1hdChcIllZWVktTU1cIiksZS5mb3JtYXQoXCJZWVlZLU1NXCIpLFwibW9udGhcIil9LGlzQWxsb3dlZDpmdW5jdGlvbih0KXtyZXR1cm4geHQoe2RhdGU6QXQoe3llYXI6dGhpcy5waWNrZXJEYXRlLnllYXIsbW9udGg6dCxsb2NhbGU6dGhpcy5jdXJyZW50TG9jYWxlfSksbWluOnRoaXMubWluLG1heDp0aGlzLm1heCx0eXBlOlwibW9udGhcIixhbGxvd2VkRm46dGhpcy5hbGxvd2VkRGF0ZXN9KX0sZ2VuVHJhbnNpdGlvbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLiRjcmVhdGVFbGVtZW50KFwidHJhbnNpdGlvbi1ncm91cFwiLHtzdGF0aWNDbGFzczpcInZkLXBpY2tlcl9fcXVhcnRlcnMtaW5uZXJcIixwcm9wczp7dGFnOlwiZGl2XCIsbmFtZTp0aGlzLnRyYW5zaXRpb25OYW1lfX0sW3RoaXMucGlja2VyRGF0ZS55ZWFyXS5tYXAodGhpcy5nZW5RdWFydGVyTGlzdCkpfSxnZW5RdWFydGVyTGlzdDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy4kY3JlYXRlRWxlbWVudChcImRpdlwiLHtzdGF0aWNDbGFzczpcInZkLXBpY2tlcl9fcXVhcnRlcnMtbGlzdFwiLGtleTp0fSxbdGhpcy5nZXRRdWFydGVycy5tYXAodGhpcy5nZW5RdWFydGVyQnV0dG9uKV0pfSxnZW5RdWFydGVyQnV0dG9uOmZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyxyPVN0KGUpLGk9dGhpcy5pc0N1cnJlbnQocikmJiF0aGlzLmlzU2VsZWN0ZWQociksYT10aGlzLmlzU2VsZWN0ZWQociksbz10aGlzLiRjcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIse2tleTplLHN0YXRpY0NsYXNzOlwidmQtcGlja2VyX19xdWFydGVycy1idXR0b25cIixzdHlsZTphZShhZSh7fSxpJiZ7XCJib3JkZXItY29sb3JcIjp0aGlzLmNvbG9yfSksYSYmYWUoYWUoe30sdGhpcy5zZXRUZXh0Q29sb3IoXCIjZmZmXCIpKSx0aGlzLnNldEJhY2tncm91bmRDb2xvcih0aGlzLmNvbG9yKSkpLGF0dHJzOnt0eXBlOlwiYnV0dG9uXCIsZGlzYWJsZWQ6IXRoaXMuaXNBbGxvd2VkKGUpfSxvbjp7Y2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gbi4kZW1pdChcImlucHV0XCIsZSxcInF1YXJ0ZXJcIil9fX0sW3RdKTtyZXR1cm4gdGhpcy4kY3JlYXRlRWxlbWVudChcImRpdlwiLHtzdGF0aWNDbGFzczpcInZkLXBpY2tlcl9fcXVhcnRlcnMtYnV0dG9uX193cmFwcGVyXCJ9LFtvXSl9fSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJ2ZC1waWNrZXJfX3F1YXJ0ZXJzXCJ9LFt0aGlzLmdlblRyYW5zaXRpb24oKV0pfX0pO2Z1bmN0aW9uIHNlKHQsZSl7dmFyIG49T2JqZWN0LmtleXModCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KTtlJiYocj1yLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn1mdW5jdGlvbiBjZSh0KXtmb3IodmFyIGU9YXJndW1lbnRzLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXt2YXIgcj1udWxsIT1lW25dP2Vbbl06e307biUyP3NlKE9iamVjdChyKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7YSh0LGUscltlXSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXModCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhyKSk6c2UoT2JqZWN0KHIpKS5mb3JFYWNoKChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixlKSl9KSl9cmV0dXJuIHR9dmFyIGxlPWF0KHJ0KS5leHRlbmQoe25hbWU6XCJWRFBpY2tlclllYXJzXCIscHJvcHM6e2FjdGl2ZTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LGFsbG93ZWREYXRlczp7dHlwZTpGdW5jdGlvbn0sY29sb3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6U3RyaW5nfSxtdXRhYmxlRGF0ZTp7dHlwZTpPYmplY3QsZGVmYXVsdDp2b2lkIDB9LHBpY2tlckRhdGU6e3R5cGU6T2JqZWN0LGRlZmF1bHQ6T2JqZWN0fSxtYXg6e3R5cGU6W1N0cmluZyxOdW1iZXIsRGF0ZV19LG1pbjp7dHlwZTpbU3RyaW5nLE51bWJlcixEYXRlXX0sdmlzaWJsZVllYXJzTnVtYmVyOnt0eXBlOk51bWJlcixkZWZhdWx0OjEwfSxyYW5nZTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9fSxjb21wdXRlZDp7eWVhckZvcm1hdHRlZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBpY2tlckRhdGUuZ2V0WWVhckZvcm1hdHRlZCgpfSxhY3RpdmVZZWFyOmZ1bmN0aW9uKCl7aWYoIXRoaXMucmFuZ2UpcmV0dXJuIHRoaXMubXV0YWJsZURhdGUmJnRoaXMubXV0YWJsZURhdGUuZm9ybWF0KFwiWVlZWVwiKX0sZ2V0WWVhcnM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5waWNrZXJEYXRlLmdlbmVyYXRlWWVhcnNSYW5nZSh7YWN0aXZlWWVhcjp0aGlzLmFjdGl2ZVllYXIsdmlzaWJsZVllYXJzTnVtYmVyOnRoaXMudmlzaWJsZVllYXJzTnVtYmVyLG1pbjp0aGlzLm1pbixtYXg6dGhpcy5tYXh9KX19LHdhdGNoOnthY3RpdmU6e2hhbmRsZXI6ZnVuY3Rpb24odCl7dCYmIXRoaXMucmFuZ2UmJnNldFRpbWVvdXQodGhpcy5jb21wdXRlU2Nyb2xsUG9zaXRpb24pfSxpbW1lZGlhdGU6ITB9fSxtZXRob2RzOntpc0N1cnJlbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIEN0KHtkYXRlOkF0KHt5ZWFyOnQsbW9udGg6MCxsb2NhbGU6dGhpcy5jdXJyZW50TG9jYWxlfSksdHlwZTpcInllYXJcIixsb2NhbGU6dGhpcy5jdXJyZW50TG9jYWxlfSl9LGlzU2VsZWN0ZWQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYWN0aXZlWWVhcj09PVN0cmluZyh0KX0saXNBbGxvd2VkOmZ1bmN0aW9uKHQpe3JldHVybiB4dCh7ZGF0ZTpBdCh7eWVhcjp0LG1vbnRoOjAsbG9jYWxlOnRoaXMuY3VycmVudExvY2FsZX0pLG1pbjp0aGlzLm1pbixtYXg6dGhpcy5tYXgsdHlwZTpcInllYXJcIixhbGxvd2VkRm46dGhpcy5hbGxvd2VkRGF0ZXN9KX0sY29tcHV0ZVNjcm9sbFBvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy4kZWwuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImFjdGl2ZVwiKVswXTt0aGlzLiRlbC5zY3JvbGxUb3A9ZnVuY3Rpb24odCl7dmFyIGU9dC5hY3RpdmVJdGVtLG49dC5jb250YWluZXIscj10Lm1pbixpPXQubWF4O3JldHVybiBlP2Uub2Zmc2V0VG9wLW4ub2Zmc2V0SGVpZ2h0LzIrZS5vZmZzZXRIZWlnaHQvMjpyfHxpPzA6bi5zY3JvbGxIZWlnaHQvMi1uLm9mZnNldEhlaWdodC8yfSh7YWN0aXZlSXRlbTp0LGNvbnRhaW5lcjp0aGlzLiRlbCxtaW46dGhpcy5taW4sbWF4OnRoaXMubWF4fSl9LGdlblllYXJCdXR0b246ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXRoaXMuaXNDdXJyZW50KHQpJiYhdGhpcy5pc1NlbGVjdGVkKHQpLHI9dGhpcy5pc1NlbGVjdGVkKHQpO3JldHVybiB0aGlzLiRjcmVhdGVFbGVtZW50KFwibGlcIix7a2V5OnQsc3RhdGljQ2xhc3M6XCJ2ZC1waWNrZXJfX3llYXJzLWJ1dHRvblwiLGNsYXNzOnthY3RpdmU6dGhpcy5pc1NlbGVjdGVkKHQpfSxzdHlsZTpjZShjZSh7fSxuJiZ7XCJib3JkZXItY29sb3JcIjp0aGlzLmNvbG9yfSksciYmY2UoY2Uoe30sdGhpcy5zZXRUZXh0Q29sb3IoXCIjZmZmXCIpKSx0aGlzLnNldEJhY2tncm91bmRDb2xvcih0aGlzLmNvbG9yKSkpLGF0dHJzOntkaXNhYmxlZDohdGhpcy5pc0FsbG93ZWQodCl9LG9uOntjbGljazpmdW5jdGlvbigpe3JldHVybiBlLiRlbWl0KFwiaW5wdXRcIix0LFwieWVhclwiKX19fSxbdF0pfX0scmVuZGVyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHQoXCJ1bFwiLHtzdGF0aWNDbGFzczpcInZkLXBpY2tlcl9feWVhcnNcIn0sdGhpcy5nZXRZZWFycy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBlLmdlblllYXJCdXR0b24odCl9KSkpfX0pO3ZhciB1ZT1mdW5jdGlvbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9O2Z1bmN0aW9uIGRlKHQsZSl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciByPWVbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsXCJ2YWx1ZVwiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LHIua2V5LHIpfX12YXIgaGU9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBlJiZkZSh0LnByb3RvdHlwZSxlKSxuJiZkZSh0LG4pLHR9LHBlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLG4pe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp7bGFuZzpvfTt1ZSh0aGlzLHQpLGkubG9jYWxlKHIubGFuZyksdGhpcy5sb2NhbGU9cix0aGlzLnN0YXJ0PWkoKS55ZWFyKG4pLm1vbnRoKGUpLnN0YXJ0T2YoXCJtb250aFwiKSx0aGlzLmVuZD10aGlzLnN0YXJ0LmVuZE9mKFwibW9udGhcIiksdGhpcy5tb250aD1lLHRoaXMueWVhcj1ufXJldHVybiBoZSh0LFt7a2V5OlwiZ2V0V2Vla1N0YXJ0XCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGFydC53ZWVrZGF5KCl9fSx7a2V5OlwiZ2V0RGF5c1wiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIEFycmF5LmZyb20oSHQoe3N0YXJ0RGF0ZTp0aGlzLnN0YXJ0LGVuZERhdGU6dGhpcy5lbmQsbG9jYWxlOnRoaXMubG9jYWxlfSkpfX0se2tleTpcImdldFdlZWtEYXlzXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmxvY2FsZSxlPXQubGFuZyxuPXQud2Vla0RheXMscj1RKGUud2Vla2RheXNTaG9ydCk7cmV0dXJuIGUud2Vla1N0YXJ0JiYxPT09ZS53ZWVrU3RhcnQmJnIucHVzaChyLnNoaWZ0KCkpLG58fHJ9fSx7a2V5OlwiZ2V0TW9udGhzXCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gQXJyYXkuYXBwbHkoMCxBcnJheSgxMikpLm1hcCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gaSgpLm1vbnRoKGUpLmZvcm1hdChcIk1NTVwiKX0pKX19LHtrZXk6XCJnZXRRdWFydGVyc1wiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIEFycmF5LmFwcGx5KDAsQXJyYXkoNCkpLm1hcCgoZnVuY3Rpb24odCxlKXt2YXIgbj1pKCkucXVhcnRlcihlKzEpLnN0YXJ0T2YoXCJxdWFydGVyXCIpLmZvcm1hdChcIk1NTU1cIikscj1pKCkucXVhcnRlcihlKzEpLmVuZE9mKFwicXVhcnRlclwiKS5mb3JtYXQoXCJNTU1NXCIpO3JldHVyblwiXCIuY29uY2F0KG4sXCIgLSBcIikuY29uY2F0KHIpfSkpfX0se2tleTpcImdldE1vbnRoRm9ybWF0dGVkXCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGFydC5mb3JtYXQoXCJNTU1NXCIpfX0se2tleTpcImdldFllYXJGb3JtYXR0ZWRcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXJ0LmZvcm1hdChcIllZWVlcIil9fSx7a2V5OlwiZ2VuZXJhdGVZZWFyc1JhbmdlXCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dC5hY3RpdmVZZWFyLG49dC52aXNpYmxlWWVhcnNOdW1iZXIscj10Lm1pbixhPXQubWF4LG89cGFyc2VJbnQoZSwxMCl8fHBhcnNlSW50KGkoKS5mb3JtYXQoXCJZWVlZXCIpLDEwKSxzPWE/cGFyc2VJbnQoYSwxMCk6bytuLGM9TWF0aC5taW4ocyxyP3BhcnNlSW50KHIsMTApOm8tbik7cmV0dXJuIFEoQXJyYXkocy1jKzEpLmtleXMoKSkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gcy10fSkpfX1dKSx0fSgpO2Z1bmN0aW9uIGZlKHQsZSl7dmFyIG49T2JqZWN0LmtleXModCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KTtlJiYocj1yLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn1mdW5jdGlvbiBtZSh0KXtmb3IodmFyIGU9YXJndW1lbnRzLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXt2YXIgcj1udWxsIT1lW25dP2Vbbl06e307biUyP2ZlKE9iamVjdChyKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7YSh0LGUscltlXSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXModCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhyKSk6ZmUoT2JqZWN0KHIpKS5mb3JFYWNoKChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixlKSl9KSl9cmV0dXJuIHR9dmFyIHZlPWF0KHJ0LGh0LHgpLmV4dGVuZCh7bmFtZTpcIlZEUGlja2VyQWdlbmRhXCIscHJvcHM6e2FsbG93ZWREYXRlczp7dHlwZTpGdW5jdGlvbn0sYnV0dG9uQ2FuY2VsOnt0eXBlOlN0cmluZ30sYnV0dG9uVmFsaWRhdGU6e3R5cGU6U3RyaW5nfSxjb2xvcjp7dHlwZTpTdHJpbmd9LGRhdGU6e3R5cGU6W0RhdGUsT2JqZWN0XX0saGVhZGVyRm9ybWF0Ont0eXBlOlN0cmluZ30sZnVsbHNjcmVlbjp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LG1heERhdGU6e3R5cGU6W1N0cmluZyxOdW1iZXIsRGF0ZV19LG1pbkRhdGU6e3R5cGU6W1N0cmluZyxOdW1iZXIsRGF0ZV19LG5hbWU6e3R5cGU6U3RyaW5nfSxub0hlYWRlcjp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LHJhbmdlOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0scmFuZ2VIZWFkZXJUZXh0Ont0eXBlOlN0cmluZyxkZWZhdWx0OlN0cmluZ30scmFuZ2VQcmVzZXRzOnt0eXBlOkFycmF5LGRlZmF1bHQ6dm9pZCAwfSxydGw6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSx0eXBlOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwiZGF0ZVwifSx2YWxpZGF0ZTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LHZhbHVlOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sdmlzaWJsZVllYXJzTnVtYmVyOnt0eXBlOk51bWJlcn19LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57aGVpZ2h0OlwiYXV0b1wiLHBpY2tlckRhdGU6dm9pZCAwLG11dGFibGVEYXRlOnZvaWQgMCxtb2RlOkQsdHJhbnNpdGlvbkRheXNOYW1lOlwic2xpZGUtaC1uZXh0XCIsdHJhbnNpdGlvbkxhYmVsTmFtZTpcInNsaWRlLXYtbmV4dFwifX0sY29tcHV0ZWQ6e2NsYXNzZXM6ZnVuY3Rpb24oKXtyZXR1cm57XCJ2ZC1waWNrZXItLXJ0bFwiOnRoaXMucnRsLFwidmQtcGlja2VyLS1ib3R0b21zaGVldFwiOnRoaXMuZnVsbHNjcmVlbixcInZkLXBpY2tlci0tbm8taGVhZGVyXCI6dGhpcy5ub0hlYWRlcixcInZkLXBpY2tlci0tdmFsaWRhdGVcIjp0aGlzLnZhbGlkYXRlLFwidmQtcGlja2VyLS1yYW5nZVwiOnRoaXMucmFuZ2UsXCJ2ZC1waWNrZXItLXJhbmdlLXNlbGVjdGluZ1wiOnRoaXMucmFuZ2UmJiF0aGlzLmlzUmFuZ2VTZWxlY3RlZH19LGlzUmFuZ2VTZWxlY3RlZDpmdW5jdGlvbigpe3JldHVybiEhdGhpcy5yYW5nZSYmKFwib2JqZWN0XCI9PT1MKHRoaXMubXV0YWJsZURhdGUpJiZPYmplY3QudmFsdWVzKHRoaXMubXV0YWJsZURhdGUpLmV2ZXJ5KChmdW5jdGlvbih0KXtyZXR1cm4gQm9vbGVhbih0KX0pKSl9LGZvcm1hdHRlcnM6ZnVuY3Rpb24oKXtyZXR1cm4gdD17aGVhZGVyRm9ybWF0OnRoaXMuaGVhZGVyRm9ybWF0LGxvY2FsZTp0aGlzLmxvY2FsZSxtYXhEYXRlOnRoaXMubWF4RGF0ZSxtaW5EYXRlOnRoaXMubWluRGF0ZSxtdXRhYmxlRGF0ZTp0aGlzLm11dGFibGVEYXRlLHJhbmdlOnRoaXMucmFuZ2UscmFuZ2VIZWFkZXJUZXh0OnRoaXMucmFuZ2VIZWFkZXJUZXh0fSxlPXQuaGVhZGVyRm9ybWF0LG49dC5sb2NhbGUscj10Lm1heERhdGUsaT10Lm1pbkRhdGUsYT10Lm11dGFibGVEYXRlLG89dC5yYW5nZSxzPXQucmFuZ2VIZWFkZXJUZXh0LHtmb3JtYXR0ZWRIZWFkZXJZZWFyOkV0KHtkYXRlOmEsbG9jYWxlOm4sZm9ybWF0OlwiWVlZWVwifSksZm9ybWF0dGVkSGVhZGVyRGF0ZTpOdCh7ZGF0ZTphLGhlYWRlckZvcm1hdDplLGxvY2FsZTpuLHJhbmdlOm8scmFuZ2VIZWFkZXJUZXh0OnN9KSxtaW5EYXRlOmksbWF4RGF0ZTpyLG1pbk1vbnRoOkJ0KHtkYXRlOmksdHlwZTpcIm1vbnRoXCIsbG9jYWxlOm59KSxtYXhNb250aDpCdCh7ZGF0ZTpyLHR5cGU6XCJtb250aFwiLGxvY2FsZTpufSksbWluWWVhcjpCdCh7ZGF0ZTppLHR5cGU6XCJ5ZWFyXCIsbG9jYWxlOm59KSxtYXhZZWFyOkJ0KHtkYXRlOnIsdHlwZTpcInllYXJcIixsb2NhbGU6bn0pfTt2YXIgdCxlLG4scixpLGEsbyxzfX0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMuaW5pdEFnZW5kYSgpfSxiZWZvcmVEZXN0cm95OmZ1bmN0aW9uKCl7dCgpfSx3YXRjaDp7dmFsdWU6XCJpbml0QWdlbmRhXCIsZGF0ZTpcImluaXREYXRlc0ZvclBpY2tlclwiLHR5cGU6XCJ1cGRhdGVNb2RlXCIsZnVsbHNjcmVlbjp7aGFuZGxlcjpmdW5jdGlvbih0KXt2YXIgcj10aGlzO3RoaXMuJG5leHRUaWNrKChmdW5jdGlvbigpe3ZhciBpPXIuJHJlZnMuYm9keTt0PyhlKGkpLHIuZ2VuT3ZlcmxheSgpKTooci5yZW1vdmVPdmVybGF5KCExKSxuKGkpKX0pKX0saW1tZWRpYXRlOiEwfSxtb2RlOmZ1bmN0aW9uKHQpe3ZhciByPXRoaXM7XCJ5ZWFyXCI9PT10JiZ0aGlzLmZ1bGxzY3JlZW4mJihuKHRoaXMuJHJlZnMuYm9keSksdGhpcy4kbmV4dFRpY2soKGZ1bmN0aW9uKCl7ZShyLiRlbC5xdWVyeVNlbGVjdG9yKFwiLnZkLXBpY2tlcl9feWVhcnNcIikpfSkpKX19LG1ldGhvZHM6e2luaXRBZ2VuZGE6ZnVuY3Rpb24oKXt0aGlzLmluaXREYXRlc0ZvclBpY2tlcih0aGlzLmRhdGUpLHRoaXMudXBkYXRlTW9kZSh0aGlzLnR5cGUpfSx1cGRhdGVUcmFuc2l0aW9uczpmdW5jdGlvbih0KXt0aGlzLnRyYW5zaXRpb25EYXlzTmFtZT1cInNsaWRlLWgtXCIuY29uY2F0KHQpLHRoaXMudHJhbnNpdGlvbkxhYmVsTmFtZT1cInNsaWRlLXYtXCIuY29uY2F0KHQpfSxyZU9yZGVyU2VsZWN0ZWREYXRlOmZ1bmN0aW9uKHQpe3RoaXMubXV0YWJsZURhdGUmJihMdCh0LHRoaXMubXV0YWJsZURhdGUuc3RhcnQpP3RoaXMubXV0YWJsZURhdGU9e3N0YXJ0OnZvaWQgMCxlbmQ6dGhpcy5tdXRhYmxlRGF0ZS5zdGFydH06anQodCx0aGlzLm11dGFibGVEYXRlLmVuZCkmJih0aGlzLm11dGFibGVEYXRlPXtzdGFydDp0aGlzLm11dGFibGVEYXRlLmVuZCxlbmQ6dm9pZCAwfSkpfSxzZWxlY3REYXRlOmZ1bmN0aW9uKHQpe2lmKHRoaXMucmFuZ2UpcmV0dXJuIHRoaXMuaXNSYW5nZVNlbGVjdGVkfHwhdGhpcy5tdXRhYmxlRGF0ZS5zdGFydCYmIXRoaXMubXV0YWJsZURhdGUuZW5kP3ZvaWQodGhpcy5tdXRhYmxlRGF0ZT17c3RhcnQ6dC5jbG9uZSgpLGVuZDp2b2lkIDB9KToodGhpcy5yZU9yZGVyU2VsZWN0ZWREYXRlKHQpLHZvaWQgdGhpcy5lbWl0U2VsZWN0ZWREYXRlKG1lKG1lKG1lKHt9LHRoaXMubXV0YWJsZURhdGUpLHRoaXMubXV0YWJsZURhdGUuc3RhcnQmJntlbmQ6dC5jbG9uZSgpfSksdGhpcy5tdXRhYmxlRGF0ZS5lbmQmJntzdGFydDp0LmNsb25lKCl9KSkpO3ZhciBlLG4scj0oZT10LG49dGhpcy5tdXRhYmxlRGF0ZSxpKGUpLmlzQWZ0ZXIoaShuKSk/XCJuZXh0XCI6XCJwcmV2XCIpO3RoaXMudXBkYXRlVHJhbnNpdGlvbnMociksdGhpcy5lbWl0U2VsZWN0ZWREYXRlKHQuY2xvbmUoKSl9LGVtaXRTZWxlY3RlZERhdGU6ZnVuY3Rpb24odCl7dGhpcy5yYW5nZSYmKHRoaXMucGlja2VyRGF0ZT1uZXcgcGUodC5lbmQubW9udGgoKSx0LmVuZC55ZWFyKCksdGhpcy5jdXJyZW50TG9jYWxlKSksdGhpcy5tdXRhYmxlRGF0ZT10LHRoaXMuJGVtaXQoXCJzZWxlY3REYXRlXCIsdGhpcy5tdXRhYmxlRGF0ZSl9LGluaXREYXRlc0ZvclBpY2tlcjpmdW5jdGlvbih0KXt2YXIgZT1UdCh7ZGF0ZTp0aGlzLnJhbmdlP3QuZW5kfHx0LnN0YXJ0OnQsbG9jYWxlOnRoaXMuY3VycmVudExvY2FsZX0pO2lmKGp0KGUsdGhpcy5tYXhEYXRlKSYmKGU9VHQoe2RhdGU6dGhpcy5tYXhEYXRlLGxvY2FsZTp0aGlzLmN1cnJlbnRMb2NhbGV9KSksdGhpcy5yYW5nZSlyZXR1cm4gdGhpcy5waWNrZXJEYXRlPW5ldyBwZShlLm1vbnRoKCksZS55ZWFyKCksdGhpcy5jdXJyZW50TG9jYWxlKSx2b2lkKHRoaXMubXV0YWJsZURhdGU9dCk7bnVsbD09dCYmXCJxdWFydGVyXCI9PT10aGlzLnR5cGUmJihlPWUubW9udGgoZS5xdWFydGVyKCkpKSxudWxsIT10JiZcInF1YXJ0ZXJcIj09PXRoaXMudHlwZSYmKGU9ZS5tb250aChTdChlLm1vbnRoKCkpKSksdGhpcy5waWNrZXJEYXRlPW5ldyBwZShlLm1vbnRoKCksZS55ZWFyKCksdGhpcy5jdXJyZW50TG9jYWxlKSx0aGlzLm11dGFibGVEYXRlPXQmJnQubW9udGgoZS5tb250aCgpKS5jbG9uZSgpfSxjaGFuZ2VNb250aDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLnBpY2tlckRhdGUubW9udGgrKFwicHJldlwiPT09dD8tMToxKSxuPXRoaXMucGlja2VyRGF0ZS55ZWFyOyhlPjExfHxlPDApJiYobis9XCJwcmV2XCI9PT10Py0xOjEsZT1cInByZXZcIj09PXQ/MTE6MCksdGhpcy51cGRhdGVUcmFuc2l0aW9ucyh0KSx0aGlzLnBpY2tlckRhdGU9bmV3IHBlKGUsbix0aGlzLmN1cnJlbnRMb2NhbGUpfSxjaGFuZ2VZZWFyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucGlja2VyRGF0ZS55ZWFyKyhcInByZXZcIj09PXQ/LTE6MSksbj10aGlzLnBpY2tlckRhdGUubW9udGg7dGhpcy51cGRhdGVUcmFuc2l0aW9ucyh0KSx0aGlzLnBpY2tlckRhdGU9bmV3IHBlKG4sZSx0aGlzLmN1cnJlbnRMb2NhbGUpfSx1cGRhdGVNb2RlOmZ1bmN0aW9uKHQpe3RoaXMubW9kZT10fSx1cGRhdGVTZWxlY3RlZFllYXJNb250aDpmdW5jdGlvbih0LGUpe3ZhciBuPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm5cInllYXJcIj09PW4/e3llYXI6dCxtb250aDplLm1vbnRofTpcInF1YXJ0ZXJcIj09PW4/e3llYXI6ZS55ZWFyLG1vbnRoOlN0KHQpfTp7eWVhcjplLnllYXIsbW9udGg6dH19KHQsdGhpcy5waWNrZXJEYXRlLGUpLHI9bi55ZWFyLGk9bi5tb250aDtpZih0aGlzLnBpY2tlckRhdGU9bmV3IHBlKGkscix0aGlzLmN1cnJlbnRMb2NhbGUpLGU9PT1PJiZcInllYXJcIiE9PXRoaXMudHlwZSl7dmFyIGE9XCJxdWFydGVyXCI9PT10aGlzLnR5cGU/XCJxdWFydGVyXCI6XCJtb250aFwiO3JldHVybiB0aGlzLnVwZGF0ZU1vZGUoYSl9aWYoXCJkYXRlXCI9PT10aGlzLnR5cGUpdGhpcy51cGRhdGVNb2RlKFwiZGF0ZVwiKTtlbHNle3ZhciBvPUF0KHt5ZWFyOnRoaXMucGlja2VyRGF0ZS55ZWFyLG1vbnRoOnRoaXMucGlja2VyRGF0ZS5tb250aCxsb2NhbGU6dGhpcy5jdXJyZW50TG9jYWxlfSk7dGhpcy5zZWxlY3REYXRlKG8pfX0sZ2VuVGl0bGU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dGhpcy4kY3JlYXRlRWxlbWVudChcInBcIix0aGlzLm5hbWUpLG49dGhpcy4kY3JlYXRlRWxlbWVudChjdCx7b246e2NsaWNrOmZ1bmN0aW9uKCl7cmV0dXJuIHQuJGVtaXQoXCJjbG9zZVwiKX19fSxbXCJjbG9zZVwiXSk7cmV0dXJuIHRoaXMuJGNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJ2ZC1waWNrZXJfX3RpdGxlXCJ9LFtlLHRoaXMuJGNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJ2ZC1waWNrZXJfX3RpdGxlLWNsb3NlXCJ9LFtuXSldKX0sZ2VuSGVhZGVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGNyZWF0ZUVsZW1lbnQoV3Qse3Byb3BzOm1lKG1lKHt9LHRoaXMuZm9ybWF0dGVycykse30se2NvbG9yOnRoaXMuY29sb3IsbW9kZTp0aGlzLnllYXJNb250aE1vZGUsbXV0YWJsZURhdGU6dGhpcy5tdXRhYmxlRGF0ZSxyYW5nZTp0aGlzLnJhbmdlLHRyYW5zaXRpb25OYW1lOnRoaXMudHJhbnNpdGlvbkxhYmVsTmFtZSx0eXBlOnRoaXMudHlwZX0pLG9uOntcInVwZGF0ZS1tb2RlXCI6dGhpcy51cGRhdGVNb2RlfX0pfSxnZW5QcmVzZXRzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGNyZWF0ZUVsZW1lbnQoSnQse3Byb3BzOntyYW5nZVByZXNldHM6dGhpcy5yYW5nZVByZXNldHMsbXV0YWJsZURhdGU6dGhpcy5tdXRhYmxlRGF0ZSxtaW5EYXRlOnRoaXMubWluRGF0ZSxtYXhEYXRlOnRoaXMubWF4RGF0ZSxjb2xvcjp0aGlzLmNvbG9yLGxvY2FsZTp0aGlzLmxvY2FsZX0sb246e1widXBkYXRlLXJhbmdlXCI6dGhpcy5lbWl0U2VsZWN0ZWREYXRlfX0pfSxnZW5Cb2R5OmZ1bmN0aW9uKCl7dmFyIHQ9W3RoaXMubW9kZSE9PU8mJnRoaXMuZ2VuQ29udHJvbHMoKSx0aGlzLm1vZGU9PT1EJiZ0aGlzLmdlblRhYmxlRGF0ZSgpLHRoaXMubW9kZT09PV8mJnRoaXMuZ2VuTW9udGhzKCksdGhpcy5tb2RlPT09ayYmdGhpcy5nZW5RdWFydGVycygpLHRoaXMubW9kZT09PU8mJnRoaXMuZ2VuWWVhcnMoKV07cmV0dXJuIHRoaXMuJGNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJ2ZC1waWNrZXJfX2JvZHlcIixyZWY6XCJib2R5XCJ9LHQpfSxnZW5Db250cm9sczpmdW5jdGlvbigpe3JldHVybiB0aGlzLiRjcmVhdGVFbGVtZW50KEl0LHtwcm9wczp7cGlja2VyRGF0ZTp0aGlzLnBpY2tlckRhdGUsdHJhbnNpdGlvbk5hbWU6dGhpcy50cmFuc2l0aW9uTGFiZWxOYW1lLGNvbG9yOnRoaXMuY29sb3IsbWluOnRoaXMubWluRGF0ZSxtYXg6dGhpcy5tYXhEYXRlLG1vZGU6dGhpcy5tb2RlfSxvbjp7XCJvbi1uYXZpZ2F0aW9uLWNsaWNrXCI6dGhpcy5tb2RlPT09RD90aGlzLmNoYW5nZU1vbnRoOnRoaXMuY2hhbmdlWWVhcixcInVwZGF0ZS1tb2RlXCI6dGhpcy51cGRhdGVNb2RlfX0pfSxnZW5UYWJsZURhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kY3JlYXRlRWxlbWVudChLdCx7cHJvcHM6e2FsbG93ZWREYXRlczp0aGlzLmFsbG93ZWREYXRlcyxjb2xvcjp0aGlzLmNvbG9yLHBpY2tlckRhdGU6dGhpcy5waWNrZXJEYXRlLGlzUmFuZ2VTZWxlY3RlZDp0aGlzLmlzUmFuZ2VTZWxlY3RlZCxsb2NhbGU6dGhpcy5jdXJyZW50TG9jYWxlLG1heERhdGU6dGhpcy5tYXhEYXRlLG1pbkRhdGU6dGhpcy5taW5EYXRlLG11dGFibGVEYXRlOnRoaXMubXV0YWJsZURhdGUscmFuZ2U6dGhpcy5yYW5nZSx0cmFuc2l0aW9uTmFtZTp0aGlzLnRyYW5zaXRpb25EYXlzTmFtZX0sb246e1widXBkYXRlLW1vbnRoXCI6dGhpcy5jaGFuZ2VNb250aCxcInVwZGF0ZS1ob3ZlcmVkLWRheVwiOnRoaXMucmVPcmRlclNlbGVjdGVkRGF0ZSxcInNlbGVjdC1kYXRlXCI6dGhpcy5zZWxlY3REYXRlfX0pfSxnZW5Nb250aHM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmZvcm1hdHRlcnMsZT10Lm1pbk1vbnRoLG49dC5tYXhNb250aDtyZXR1cm4gdGhpcy4kY3JlYXRlRWxlbWVudChyZSx7cHJvcHM6e2FjdGl2ZTp0aGlzLm1vZGU9PT1fLGFsbG93ZWREYXRlczp0aGlzLnR5cGU9PT1fP3RoaXMuYWxsb3dlZERhdGVzOnZvaWQgMCxjb2xvcjp0aGlzLmNvbG9yLGxvY2FsZTp0aGlzLmN1cnJlbnRMb2NhbGUsbWF4Om4sbWluOmUsbXV0YWJsZURhdGU6dGhpcy5tdXRhYmxlRGF0ZSxwaWNrZXJEYXRlOnRoaXMucGlja2VyRGF0ZSxyYW5nZTp0aGlzLnJhbmdlLHRyYW5zaXRpb25OYW1lOnRoaXMudHJhbnNpdGlvbkRheXNOYW1lfSxvbjp7aW5wdXQ6dGhpcy51cGRhdGVTZWxlY3RlZFllYXJNb250aH19KX0sZ2VuUXVhcnRlcnM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmZvcm1hdHRlcnMsZT10Lm1pbk1vbnRoLG49dC5tYXhNb250aDtyZXR1cm4gdGhpcy4kY3JlYXRlRWxlbWVudChvZSx7cHJvcHM6e2FjdGl2ZTp0aGlzLm1vZGU9PT1rLGFsbG93ZWREYXRlczp0aGlzLnR5cGU9PT1rP3RoaXMuYWxsb3dlZERhdGVzOnZvaWQgMCxjb2xvcjp0aGlzLmNvbG9yLGxvY2FsZTp0aGlzLmN1cnJlbnRMb2NhbGUsbWF4Om4sbWluOmUsbXV0YWJsZURhdGU6dGhpcy5tdXRhYmxlRGF0ZSxwaWNrZXJEYXRlOnRoaXMucGlja2VyRGF0ZSx0cmFuc2l0aW9uTmFtZTp0aGlzLnRyYW5zaXRpb25EYXlzTmFtZX0sb246e2lucHV0OnRoaXMudXBkYXRlU2VsZWN0ZWRZZWFyTW9udGh9fSl9LGdlblllYXJzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5mb3JtYXR0ZXJzLGU9dC5taW5ZZWFyLG49dC5tYXhZZWFyO3JldHVybiB0aGlzLiRjcmVhdGVFbGVtZW50KGxlLHtwcm9wczp7YWN0aXZlOnRoaXMubW9kZT09PU8sYWxsb3dlZERhdGVzOnRoaXMudHlwZT09PU8/dGhpcy5hbGxvd2VkRGF0ZXM6dm9pZCAwLGNvbG9yOnRoaXMuY29sb3IsbWF4Om4sbWluOmUsbXV0YWJsZURhdGU6dGhpcy5tdXRhYmxlRGF0ZSxwaWNrZXJEYXRlOnRoaXMucGlja2VyRGF0ZSxyYW5nZTp0aGlzLnJhbmdlLHZpc2libGVZZWFyc051bWJlcjp0aGlzLnZpc2libGVZZWFyc051bWJlcn0sb246e2lucHV0OnRoaXMudXBkYXRlU2VsZWN0ZWRZZWFyTW9udGh9fSl9LGdlblZhbGlkYXRlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gdGhpcy4kY3JlYXRlRWxlbWVudCh0ZSx7cHJvcHM6e2J1dHRvblZhbGlkYXRlOnRoaXMuYnV0dG9uVmFsaWRhdGUsYnV0dG9uQ2FuY2VsOnRoaXMuYnV0dG9uQ2FuY2VsLGNvbG9yOnRoaXMuY29sb3IsbXV0YWJsZURhdGU6dGhpcy5tdXRhYmxlRGF0ZSxyYW5nZTp0aGlzLnJhbmdlfSxvbjp7Y2FuY2VsOmZ1bmN0aW9uKCl7cmV0dXJuIHQuJGVtaXQoXCJjbG9zZVwiKX0sdmFsaWRhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdC4kZW1pdChcInZhbGlkYXRlRGF0ZVwiKX19fSl9fSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJ2ZC1waWNrZXJcIixjbGFzczp0aGlzLmNsYXNzZXMscmVmOlwiZGF0ZXBpY2tlclwifSxbdGhpcy5mdWxsc2NyZWVuJiZ0aGlzLmdlblRpdGxlKCksIXRoaXMubm9IZWFkZXImJnRoaXMuZ2VuSGVhZGVyKCksdGhpcy5yYW5nZSYmdGhpcy5nZW5QcmVzZXRzKCksdGhpcy5nZW5Cb2R5KCksdGhpcy52YWxpZGF0ZSYmdGhpcy5nZW5WYWxpZGF0ZSgpXSl9fSk7ZnVuY3Rpb24geWUodCl7dmFyIGU9dC5tZXNzYWdlLG49dC52bTtpZihuKXtpZihuLiRfYWxyZWFkeVdhcm5lZD1uLiRfYWxyZWFkeVdhcm5lZHx8W10sbi4kX2FscmVhZHlXYXJuZWQuaW5jbHVkZXMoZSkpcmV0dXJuO24uJF9hbHJlYWR5V2FybmVkLnB1c2goZSl9cmV0dXJuXCJbVnVlRGF0ZVBpY2tlcl0gXCIuY29uY2F0KGUpKyhuP2Z1bmN0aW9uKHQpe2lmKHQuX2lzVnVlJiZ0LiRwYXJlbnQpe2Zvcih2YXIgZT1bXSxuPTA7dDspe2lmKGUubGVuZ3RoPjApe3ZhciByPWVbZS5sZW5ndGgtMV07aWYoci5jb25zdHJ1Y3Rvcj09PXQuY29uc3RydWN0b3Ipe24rKyx0PXQuJHBhcmVudDtjb250aW51ZX1uPjAmJihlW2UubGVuZ3RoLTFdPVtyLG5dLG49MCl9ZS5wdXNoKHQpLHQ9dC4kcGFyZW50fXJldHVyblwiXFxuXFxuZm91bmQgaW5cXG5cXG5cIitlLm1hcCgoZnVuY3Rpb24odCxlKXtyZXR1cm5cIlwiLmNvbmNhdCgwPT09ZT9cIi0tLVxceDNlIFwiOlwiIFwiLnJlcGVhdCg1KzIqZSkpLmNvbmNhdChBcnJheS5pc0FycmF5KHQpP1wiXCIuY29uY2F0KERlKHRbMF0pLFwiLi4uIChcIikuY29uY2F0KHRbMV0sXCIgcmVjdXJzaXZlIGNhbGxzKVwiKTpEZSh0KSl9KSkuam9pbihcIlxcblwiKX1yZXR1cm5cIlxcblxcbihmb3VuZCBpbiBcIi5jb25jYXQoRGUodCksXCIpXCIpfShuKTpcIlwiKX1mdW5jdGlvbiBnZSh0LGUpe3ZhciBuPXllKHttZXNzYWdlOnQsdm06ZX0pO251bGwhPW4mJmNvbnNvbGUud2FybihuKX12YXIgYmU9Lyg/Ol58Wy1fXSkoXFx3KS9nO2Z1bmN0aW9uIERlKHQsZSl7aWYodC4kcm9vdD09PXQpcmV0dXJuXCI8Um9vdD5cIjt2YXIgbj1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0JiZudWxsIT10LmNpZD90Lm9wdGlvbnM6dC5faXNWdWU/dC4kb3B0aW9uc3x8dC5jb25zdHJ1Y3Rvci5vcHRpb25zOnR8fHt9LHI9bi5uYW1lfHxuLl9jb21wb25lbnRUYWcsaT1uLl9fZmlsZTtpZighciYmaSl7dmFyIGE9aS5tYXRjaCgvKFteL1xcXFxdKylcXC52dWUkLyk7cj1hJiZhWzFdfXJldHVybihyP1wiPFwiLmNvbmNhdChyLnJlcGxhY2UoYmUsKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRvVXBwZXJDYXNlKCl9KSkucmVwbGFjZSgvWy1fXS9nLFwiXCIpLFwiPlwiKTpcIjxBbm9ueW1vdXM+XCIpKyhpJiYhMSE9PWU/XCIgYXQgXCIuY29uY2F0KGkpOlwiXCIpfWZ1bmN0aW9uIF9lKHQsZSl7dmFyIG49T2JqZWN0LmtleXModCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KTtlJiYocj1yLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn1mdW5jdGlvbiBrZSh0KXtmb3IodmFyIGU9YXJndW1lbnRzLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXt2YXIgcj1udWxsIT1lW25dP2Vbbl06e307biUyP19lKE9iamVjdChyKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7YSh0LGUscltlXSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXModCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhyKSk6X2UoT2JqZWN0KHIpKS5mb3JFYWNoKChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixlKSl9KSl9cmV0dXJuIHR9dmFyIE9lPXttaW5XaWR0aDpcIjI5MHB4XCIsbWF4V2lkdGg6XCIzMTVweFwifSxNZT1hdCh4LEMpLmV4dGVuZCh7bmFtZTpcIlZEUGlja2VyXCIscHJvdmlkZTpmdW5jdGlvbigpe3JldHVybntWRFBpY2tlcjp0aGlzfX0sZGlyZWN0aXZlczp7Q2xpY2tPdXRzaWRlOlR9LHByb3BzOntpZDp7dHlwZTpTdHJpbmcsZGVmYXVsdDp2b2lkIDB9LG5hbWU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJkYXRlcGlja2VyXCJ9LGNsZWFyYWJsZTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LHZhbGlkYXRlOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sYnV0dG9uVmFsaWRhdGU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6dm9pZCAwfSxidXR0b25DYW5jZWw6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6dm9pZCAwfSx0eXBlOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwiZGF0ZVwifSxyYW5nZTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LHJhbmdlSW5wdXRUZXh0Ont0eXBlOlN0cmluZyxkZWZhdWx0OlwiJWQgfiAlZFwifSxyYW5nZUhlYWRlclRleHQ6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6dm9pZCAwfSxyYW5nZVByZXNldHM6e3R5cGU6QXJyYXksZGVmYXVsdDp2b2lkIDB9LHZhbHVlOnt0eXBlOltTdHJpbmcsT2JqZWN0LE51bWJlcixEYXRlXX0sZm9ybWF0Ont0eXBlOlN0cmluZyxkZWZhdWx0OnZvaWQgMH0sZm9ybWF0SGVhZGVyOnt0eXBlOlN0cmluZyxkZWZhdWx0OnZvaWQgMH0sdmlzaWJsZTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LHBsYWNlaG9sZGVyOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwiWVlZWS1NTS1ERFwifSxjb2xvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcIiM0Zjg4ZmZcIn0sY29udGVudENsYXNzOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwiXCJ9LGFsbG93ZWREYXRlczp7dHlwZTpGdW5jdGlvbn0sbWluRGF0ZTp7dHlwZTpbU3RyaW5nLE51bWJlcixEYXRlXX0sbWF4RGF0ZTp7dHlwZTpbU3RyaW5nLE51bWJlcixEYXRlXX0sdmlzaWJsZVllYXJzTnVtYmVyOnt0eXBlOk51bWJlcixkZWZhdWx0OjEwfSxkaXNhYmxlZDp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LGlubGluZTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LG5vSGVhZGVyOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sbm9DYWxlbmRhckljb246e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxmdWxsc2NyZWVuTW9iaWxlOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sdGFiaW5kZXg6e3R5cGU6W1N0cmluZyxOdW1iZXJdLGRlZmF1bHQ6XCIwXCJ9LHJ0bDp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LG9yaWdpbjp7dHlwZTpTdHJpbmcsZGVmYXVsdDp2b2lkIDB9LGFsbG93T3ZlcmZsb3c6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiEwfSxhdHRhY2g6e3ZhbGlkYXRvcjpCLGRlZmF1bHQ6ITF9LHpJbmRleDp7dHlwZTpOdW1iZXIsZGVmYXVsdDoxMDAyfX0sZGF0YTpmdW5jdGlvbigpe3JldHVybntkYXRlOnZvaWQgMCxpc01lbnVBY3RpdmU6ITEsaXNCb290ZWQ6ITEsYWN0aXZhdG9yOnZvaWQgMH19LGNvbXB1dGVkOntjbGFzc2VzOmZ1bmN0aW9uKCl7cmV0dXJue1widmQtd3JhcHBlci0taW5saW5lXCI6dGhpcy5pbmxpbmUsXCJ2ZC13cmFwcGVyLS1kaXNhYmxlZFwiOnRoaXMuZGlzYWJsZWQsXCJ2ZC13cmFwcGVyLS1ydGxcIjp0aGlzLnJ0bH19LGNvbXBvbmVudElkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaWR8fFwiZGF0ZXBpY2tlcl9cIi5jb25jYXQoXCJfXCIuY29uY2F0KE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cigyLDkpKSl9LGlucHV0Rm9ybWF0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZm9ybWF0P3RoaXMuZm9ybWF0OmZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOlwiZGF0ZVwiO3JldHVybiBtW3RdfSh0aGlzLnJhbmdlP1wicmFuZ2VcIjp0aGlzLnR5cGUpfSxoZWFkZXJGb3JtYXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mb3JtYXRIZWFkZXI/dGhpcy5mb3JtYXRIZWFkZXI6ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06XCJkYXRlXCI7cmV0dXJuIHlbdF19KHRoaXMucmFuZ2U/XCJyYW5nZVwiOnRoaXMudHlwZSl9LG91dHB1dEZvcm1hdDpmdW5jdGlvbigpe3JldHVybiB3dCh0aGlzLnJhbmdlP1wicmFuZ2VcIjp0aGlzLnR5cGUpfSx0ZXh0c0Zvcm1hdDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuY3VycmVudExvY2FsZS5sYW5nLGU9dC5idXR0b25WYWxpZGF0ZSxuPXQuYnV0dG9uQ2FuY2VsLHI9dC5yYW5nZUhlYWRlclRleHQ7cmV0dXJue2J1dHRvblZhbGlkYXRlOnRoaXMuYnV0dG9uVmFsaWRhdGV8fGUsYnV0dG9uQ2FuY2VsOnRoaXMuYnV0dG9uQ2FuY2VsfHxuLHJhbmdlSGVhZGVyVGV4dDp0aGlzLnJhbmdlSGVhZGVyVGV4dHx8cn19LGludGVybmFsRGF0ZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHQ9dGhpcy52YWx1ZSxlPXtyYW5nZTp0aGlzLnJhbmdlLGxvY2FsZTp0aGlzLmN1cnJlbnRMb2NhbGUsdHlwZTp0aGlzLnR5cGV9LG49ZS5yYW5nZSxyPWUubG9jYWxlLGk9ZS50eXBlLG4/e3N0YXJ0OnQmJm51bGwhPXQuc3RhcnQ/VHQoe2RhdGU6dC5zdGFydCxsb2NhbGU6cn0pOnZvaWQgMCxlbmQ6dCYmbnVsbCE9dC5lbmQ/VHQoe2RhdGU6dC5lbmQsbG9jYWxlOnJ9KTp2b2lkIDB9Om51bGwhPXQ/VHQoe2RhdGU6dCxsb2NhbGU6cix0eXBlOml9KTp2b2lkIDA7dmFyIHQsZSxuLHIsaX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuZGF0ZT10fX0saXNEYXRlRGVmaW5lZDpmdW5jdGlvbigpe3ZhciB0PSF0aGlzLnJhbmdlJiZ0aGlzLmludGVybmFsRGF0ZSxlPXRoaXMucmFuZ2UmJnRoaXMuaW50ZXJuYWxEYXRlJiZ0aGlzLmludGVybmFsRGF0ZS5zdGFydCYmdGhpcy5pbnRlcm5hbERhdGUuZW5kO3JldHVybiBCb29sZWFuKHQpfHxCb29sZWFuKGUpfSxmb3JtYXR0ZWRJbnB1dERhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9dC5pbnB1dEZvcm1hdCxuPXQuaW50ZXJuYWxEYXRlLHI9dC5pc0RhdGVEZWZpbmVkLGk9dC5sb2NhbGUsYT10LnJhbmdlLG89dC5yYW5nZUlucHV0VGV4dCxzPXQudHlwZTtpZihyKXtpZihhJiZvKXt2YXIgYz1GdCh7ZGF0ZXM6bixsb2NhbGU6aSxmb3JtYXQ6ZX0pLnNwbGl0KFwiIH4gXCIpLGw9dnQoYywyKTtyZXR1cm4gWXQoe3JlZ2V4VGV4dDpvLHN0YXJ0RGF0ZTpsWzBdLGVuZERhdGU6bFsxXX0pfXZhciB1PW4ubW9udGgoKSxkPVwicXVhcnRlclwiPT09cz9TdCh1KTp1O3JldHVybiBFdCh7ZGF0ZTpuLnNldChcIm1vbnRoXCIsZCksbG9jYWxlOmksZm9ybWF0OmV9KX19KHtpbnB1dEZvcm1hdDp0aGlzLmlucHV0Rm9ybWF0LGludGVybmFsRGF0ZTp0aGlzLmludGVybmFsRGF0ZSxpc0RhdGVEZWZpbmVkOnRoaXMuaXNEYXRlRGVmaW5lZCxsb2NhbGU6dGhpcy5jdXJyZW50TG9jYWxlLHJhbmdlOnRoaXMucmFuZ2UscmFuZ2VJbnB1dFRleHQ6dGhpcy5yYW5nZUlucHV0VGV4dCx0eXBlOnRoaXMudHlwZX0pfSxpc0Z1bGxTY3JlZW5Nb2RlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZnVsbHNjcmVlbk1vYmlsZSYmdGhpcy5pc01vYmlsZX19LHdhdGNoOnt2aXNpYmxlOntoYW5kbGVyOmZ1bmN0aW9uKHQpe3RoaXMuaXNNZW51QWN0aXZlPXR9LGltbWVkaWF0ZTohMH0saXNGdWxsU2NyZWVuTW9kZTpmdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5pc01lbnVBY3RpdmUmJih0aGlzLmhpZGVEYXRlUGlja2VyKCksc2V0VGltZW91dCgoZnVuY3Rpb24oKXt0LnNob3dEYXRlUGlja2VyKCl9KSwyMDApKX19LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt2YXIgdCxlLG4scixpPXRoaXM7W1wibm8taW5wdXRcIl0uZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGUsbixyO2kuJGF0dHJzLmhhc093blByb3BlcnR5KHQpJiYobj0oZT17b3JpZ2luYWw6dCx2bTppfSkub3JpZ2luYWwscj1lLnZtLGdlKFwiW1JFTU9WRURdICdcIi5jb25jYXQobixcIicgaGFzIGJlZW4gcmVtb3ZlZC4gWW91IGNhbiBzYWZlbHkgb21pdCBpdC5cIikscikpfSkpLHRoaXMuJGF0dHJzLmhhc093blByb3BlcnR5KFwiZnVsbHNjcmVlbi1icmVha3BvaW50XCIpJiYoZT0odD17b3JpZ2luYWw6XCJmdWxsc2NyZWVuLW1vYmlsZVwiLHJlcGxhY2VtZW50OlwibW9iaWxlLWJyZWFrcG9pbnRcIix2bTp0aGlzfSkub3JpZ2luYWwsbj10LnJlcGxhY2VtZW50LHI9dC52bSxnZShcIltVUEdSQURFXSAnXCIuY29uY2F0KGUsXCInIGlzIGRlcHJlY2F0ZWQsIHVzZSAnXCIpLmNvbmNhdChuLFwiJyBpbnN0ZWFkLlwiKSxyKSl9LG1vdW50ZWQ6ZnVuY3Rpb24oKXt0aGlzLmFjdGl2YXRvcj10aGlzLiRyZWZzLmFjdGl2YXRvcn0sYmVmb3JlRGVzdHJveTpmdW5jdGlvbigpe3RoaXMuaGlkZURhdGVQaWNrZXIoKSx0aGlzLiRlbWl0KFwib25EZXN0cm95XCIpfSxtZXRob2RzOntzaG93RGF0ZVBpY2tlcjpmdW5jdGlvbigpe3RoaXMuZGlzYWJsZWR8fCh0aGlzLmlzTWVudUFjdGl2ZT0hMCx0aGlzLiRlbWl0KFwib25PcGVuXCIpKX0saGlkZURhdGVQaWNrZXI6ZnVuY3Rpb24oKXt0aGlzLmlzTWVudUFjdGl2ZSYmKHRoaXMuaXNNZW51QWN0aXZlPSExLHRoaXMuaXNCb290ZWQ9ITEsdCgpLHRoaXMuJGVtaXQoXCJvbkNsb3NlXCIpKX0sY2hhbmdlRGF0ZTpmdW5jdGlvbih0KXt0aGlzLmludGVybmFsRGF0ZT10LHRoaXMudmFsaWRhdGV8fHRoaXMudmFsaWRhdGVEYXRlKCl9LHZhbGlkYXRlRGF0ZTpmdW5jdGlvbigpe3ZhciB0LGU7dGhpcy5kYXRlPyh0aGlzLiRlbWl0KFwiaW5wdXRcIiwodD10aGlzLmRhdGUsZT10aGlzLm91dHB1dEZvcm1hdCx0aGlzLnJhbmdlP3tzdGFydDp0LnN0YXJ0LmZvcm1hdChlKSxlbmQ6dC5lbmQmJnQuZW5kLmZvcm1hdChlKX06dC5mb3JtYXQoZSkpKSx0aGlzLiRlbWl0KFwib25DaGFuZ2VcIiksdGhpcy5oaWRlRGF0ZVBpY2tlcigpKTp0aGlzLmhpZGVEYXRlUGlja2VyKCl9LG9uS2V5RG93bjpmdW5jdGlvbih0KXt2YXIgZT10LmtleUNvZGU7aWYodGhpcy4kcmVmcy5tZW51KXJldHVyblt3LmVzYyx3LnRhYl0uaW5jbHVkZXMoZSk/dGhpcy5oaWRlRGF0ZVBpY2tlcih0KTp2b2lkIDB9LG9uQ2xlYXJEYXRlOmZ1bmN0aW9uKCl7dGhpcy4kZW1pdChcImlucHV0XCIsdm9pZCAwKSx0aGlzLiRlbWl0KFwib25DaGFuZ2VcIil9LGdlbkNvbnRlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbmxpbmU/W3RoaXMuZ2VuQWdlbmRhKCldOlt0aGlzLiRzY29wZWRTbG90cy5hY3RpdmF0b3I/dGhpcy5nZW5BY3RpdmF0b3IoKTp0aGlzLmdlbkN1c3RvbUlucHV0KCksdGhpcy5nZW5NZW51V2l0aENvbnRlbnQoKV19LGdlbkFjdGl2YXRvcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLiRjcmVhdGVFbGVtZW50KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwidmQtYWN0aXZhdG9yXCIsZGlyZWN0aXZlczpbe25hbWU6XCJjbGljay1vdXRzaWRlXCIsdmFsdWU6e2lzQWN0aXZlOnRoaXMuaXNNZW51QWN0aXZlJiYhdGhpcy5pc0Z1bGxTY3JlZW5Nb2RlLGhhbmRsZXI6dGhpcy5oaWRlRGF0ZVBpY2tlcn19XSxvbjp7Y2xpY2s6dGhpcy5zaG93RGF0ZVBpY2tlcixrZXlkb3duOnRoaXMub25LZXlEb3dufSxyZWY6XCJhY3RpdmF0b3JcIn0sW3RoaXMuJHNjb3BlZFNsb3RzLmFjdGl2YXRvcih7ZGF0ZTp0aGlzLmZvcm1hdHRlZElucHV0RGF0ZX0pXSl9LGdlbkN1c3RvbUlucHV0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGNyZWF0ZUVsZW1lbnQobHQse3Byb3BzOntjbGVhcmFibGU6dGhpcy5jbGVhcmFibGUsY29sb3I6dGhpcy5jb2xvcixkYXRlOnRoaXMuZm9ybWF0dGVkSW5wdXREYXRlLGRpc2FibGVkOnRoaXMuZGlzYWJsZWQsaWQ6dGhpcy5jb21wb25lbnRJZCxpc0RhdGVEZWZpbmVkOnRoaXMuaXNEYXRlRGVmaW5lZCxpc01lbnVBY3RpdmU6dGhpcy5pc01lbnVBY3RpdmUsbmFtZTp0aGlzLm5hbWUsbm9DYWxlbmRhckljb246dGhpcy5ub0NhbGVuZGFySWNvbixwbGFjZWhvbGRlcjp0aGlzLnBsYWNlaG9sZGVyLHRhYmluZGV4OnRoaXMudGFiaW5kZXh9LGRpcmVjdGl2ZXM6W3tuYW1lOlwiY2xpY2stb3V0c2lkZVwiLHZhbHVlOntpc0FjdGl2ZTp0aGlzLmlzTWVudUFjdGl2ZSYmIXRoaXMuaXNGdWxsU2NyZWVuTW9kZSxoYW5kbGVyOnRoaXMuaGlkZURhdGVQaWNrZXJ9fV0sbmF0aXZlT246e2NsaWNrOnRoaXMuc2hvd0RhdGVQaWNrZXJ9LG9uOntrZXlkb3duOnRoaXMub25LZXlEb3duLGNsZWFyRGF0ZTp0aGlzLm9uQ2xlYXJEYXRlfSxyZWY6XCJhY3RpdmF0b3JcIn0pfSxnZW5NZW51V2l0aENvbnRlbnQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dGhpcy5pc0Z1bGxTY3JlZW5Nb2RlLG49a2Uoa2Uoe30sT2UpLHt9LHt2YWx1ZTp0aGlzLmlzTWVudUFjdGl2ZSxvcmlnaW46dGhpcy5vcmlnaW4sYWxsb3dPdmVyZmxvdzp0aGlzLmFsbG93T3ZlcmZsb3csYXR0YWNoOiFlJiZ0aGlzLmF0dGFjaCx0cmFuc2l0aW9uOmU/XCJzbGlkZS1pbi1vdXQtdHJhbnNpdGlvblwiOlwic2NhbGUtdHJhbnNpdGlvblwiLGJvdHRvbVNoZWV0OmV9KSxyPXRoaXMuYWN0aXZhdG9yO3JldHVybiB0aGlzLiRjcmVhdGVFbGVtZW50KEsse2F0dHJzOntyb2xlOlwibWVudVwifSxwcm9wczprZShrZSh7fSxuKSx7fSx7YWN0aXZhdG9yOnJ9KSxvbjp7dHJhbnNpdGlvbkVuZDpmdW5jdGlvbigpe3QuaXNCb290ZWQ9ITB9fSxyZWY6XCJtZW51XCJ9LFt0aGlzLmdlbkFnZW5kYSgpXSl9LGdlbkFnZW5kYTpmdW5jdGlvbigpe3JldHVybiB0aGlzLiRjcmVhdGVFbGVtZW50KHZlLHtwcm9wczp7YWxsb3dlZERhdGVzOnRoaXMuYWxsb3dlZERhdGVzLGJ1dHRvbkNhbmNlbDp0aGlzLnRleHRzRm9ybWF0LmJ1dHRvbkNhbmNlbCxidXR0b25WYWxpZGF0ZTp0aGlzLnRleHRzRm9ybWF0LmJ1dHRvblZhbGlkYXRlLGNvbG9yOnRoaXMuY29sb3IsZGF0ZTp0aGlzLmludGVybmFsRGF0ZSxmdWxsc2NyZWVuOnRoaXMuaXNCb290ZWQmJnRoaXMuaXNNZW51QWN0aXZlJiZ0aGlzLmlzRnVsbFNjcmVlbk1vZGUsaGVhZGVyRm9ybWF0OnRoaXMuaGVhZGVyRm9ybWF0LGxvY2FsZTp0aGlzLmN1cnJlbnRMb2NhbGUsbWF4RGF0ZTp0aGlzLm1heERhdGUsbWluRGF0ZTp0aGlzLm1pbkRhdGUsbmFtZTp0aGlzLm5hbWUsbm9IZWFkZXI6dGhpcy5ub0hlYWRlcixyYW5nZTp0aGlzLnJhbmdlLHJhbmdlSGVhZGVyVGV4dDp0aGlzLnRleHRzRm9ybWF0LnJhbmdlSGVhZGVyVGV4dCxyYW5nZVByZXNldHM6dGhpcy5yYW5nZVByZXNldHMscnRsOnRoaXMucnRsLHR5cGU6dGhpcy50eXBlLHZhbGlkYXRlOnRoaXMudmFsaWRhdGUsdmFsdWU6dGhpcy5pc01lbnVBY3RpdmUsdmlzaWJsZVllYXJzTnVtYmVyOnRoaXMudmlzaWJsZVllYXJzTnVtYmVyfSxvbjp7c2VsZWN0RGF0ZTp0aGlzLmNoYW5nZURhdGUsdmFsaWRhdGVEYXRlOnRoaXMudmFsaWRhdGVEYXRlLGNsb3NlOnRoaXMuaGlkZURhdGVQaWNrZXJ9LGRpcmVjdGl2ZXM6W3tuYW1lOlwiY2xpY2stb3V0c2lkZVwiLHZhbHVlOntpc0FjdGl2ZTp0aGlzLmlzQm9vdGVkJiZ0aGlzLmlzTWVudUFjdGl2ZSxoYW5kbGVyOnRoaXMuaGlkZURhdGVQaWNrZXJ9fV0scmVmOlwiYWdlbmRhXCJ9KX19LHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInZkLXdyYXBwZXJcIixjbGFzczp0aGlzLmNsYXNzZXN9LHRoaXMuZ2VuQ29udGVudCgpKX19KSx3ZT1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxWdWVEYXRlUGlja2VyOk1lfSk7dmFyIFllPXtpbnN0YWxsZWQ6ITEsdmVyc2lvbjpcIjAuMi4xMVwiLGluc3RhbGw6ZnVuY3Rpb24gdChlKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307aWYoIXQuaW5zdGFsbGVkKXt0Lmluc3RhbGxlZD0hMCxyIT09ZSYmY29uc29sZS5lcnJvcihcIk11bHRpcGxlIGluc3RhbmNlcyBvZiBWdWUgZGV0ZWN0ZWQuXCIpO3ZhciBpPW4uY29tcG9uZW50c3x8e30sYT1uLm9wdGlvbnN8fHt9O2UucHJvdG90eXBlLiR2dWVkYXRlcGlja2VyPWEsci5wcm90b3R5cGUuJHZ1ZWRhdGVwaWNrZXI9YSxPYmplY3QuZW50cmllcyhpKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgbj12dCh0LDIpLHI9blswXSxpPW5bMV07ZS5jb21wb25lbnQocixpKX0pKX19fSxTZT1ZZS5pbnN0YWxsO1llLmluc3RhbGw9ZnVuY3Rpb24odCxlKXtTZS5jYWxsKFllLHQse2NvbXBvbmVudHM6d2Usb3B0aW9uczplfSl9LFwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvdy5WdWUmJndpbmRvdy5WdWUudXNlKFllKTtleHBvcnQgZGVmYXVsdCBZZTtleHBvcnR7TWUgYXMgVnVlRGF0ZVBpY2tlcn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@mathieustan/vue-datepicker/dist/vue-datepicker.esm.js\n");

/***/ }),

/***/ "./node_modules/async-validator/es/index.js":
/*!**************************************************!*\
  !*** ./node_modules/async-validator/es/index.js ***!
  \**************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! babel-runtime/helpers/extends */ \"./node_modules/babel-runtime/helpers/extends.js\");\n/* harmony import */ var babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babel-runtime/helpers/typeof */ \"./node_modules/babel-runtime/helpers/typeof.js\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ \"./node_modules/async-validator/es/util.js\");\n/* harmony import */ var _validator___WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./validator/ */ \"./node_modules/async-validator/es/validator/index.js\");\n/* harmony import */ var _messages__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./messages */ \"./node_modules/async-validator/es/messages.js\");\n\n\n\n\n\n\n/**\n *  Encapsulates a validation schema.\n *\n *  @param descriptor An object declaring validation rules\n *  for this schema.\n */\nfunction Schema(descriptor) {\n  this.rules = null;\n  this._messages = _messages__WEBPACK_IMPORTED_MODULE_4__.messages;\n  this.define(descriptor);\n}\n\nSchema.prototype = {\n  messages: function messages(_messages) {\n    if (_messages) {\n      this._messages = (0,_util__WEBPACK_IMPORTED_MODULE_2__.deepMerge)((0,_messages__WEBPACK_IMPORTED_MODULE_4__.newMessages)(), _messages);\n    }\n    return this._messages;\n  },\n  define: function define(rules) {\n    if (!rules) {\n      throw new Error('Cannot configure a schema with no rules');\n    }\n    if ((typeof rules === 'undefined' ? 'undefined' : (0,babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(rules)) !== 'object' || Array.isArray(rules)) {\n      throw new Error('Rules must be an object');\n    }\n    this.rules = {};\n    var z = void 0;\n    var item = void 0;\n    for (z in rules) {\n      if (rules.hasOwnProperty(z)) {\n        item = rules[z];\n        this.rules[z] = Array.isArray(item) ? item : [item];\n      }\n    }\n  },\n  validate: function validate(source_) {\n    var _this = this;\n\n    var o = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    var oc = arguments[2];\n\n    var source = source_;\n    var options = o;\n    var callback = oc;\n    if (typeof options === 'function') {\n      callback = options;\n      options = {};\n    }\n    if (!this.rules || Object.keys(this.rules).length === 0) {\n      if (callback) {\n        callback();\n      }\n      return;\n    }\n    function complete(results) {\n      var i = void 0;\n      var field = void 0;\n      var errors = [];\n      var fields = {};\n\n      function add(e) {\n        if (Array.isArray(e)) {\n          errors = errors.concat.apply(errors, e);\n        } else {\n          errors.push(e);\n        }\n      }\n\n      for (i = 0; i < results.length; i++) {\n        add(results[i]);\n      }\n      if (!errors.length) {\n        errors = null;\n        fields = null;\n      } else {\n        for (i = 0; i < errors.length; i++) {\n          field = errors[i].field;\n          fields[field] = fields[field] || [];\n          fields[field].push(errors[i]);\n        }\n      }\n      callback(errors, fields);\n    }\n\n    if (options.messages) {\n      var messages = this.messages();\n      if (messages === _messages__WEBPACK_IMPORTED_MODULE_4__.messages) {\n        messages = (0,_messages__WEBPACK_IMPORTED_MODULE_4__.newMessages)();\n      }\n      (0,_util__WEBPACK_IMPORTED_MODULE_2__.deepMerge)(messages, options.messages);\n      options.messages = messages;\n    } else {\n      options.messages = this.messages();\n    }\n    var arr = void 0;\n    var value = void 0;\n    var series = {};\n    var keys = options.keys || Object.keys(this.rules);\n    keys.forEach(function (z) {\n      arr = _this.rules[z];\n      value = source[z];\n      arr.forEach(function (r) {\n        var rule = r;\n        if (typeof rule.transform === 'function') {\n          if (source === source_) {\n            source = (0,babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, source);\n          }\n          value = source[z] = rule.transform(value);\n        }\n        if (typeof rule === 'function') {\n          rule = {\n            validator: rule\n          };\n        } else {\n          rule = (0,babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, rule);\n        }\n        rule.validator = _this.getValidationMethod(rule);\n        rule.field = z;\n        rule.fullField = rule.fullField || z;\n        rule.type = _this.getType(rule);\n        if (!rule.validator) {\n          return;\n        }\n        series[z] = series[z] || [];\n        series[z].push({\n          rule: rule,\n          value: value,\n          source: source,\n          field: z\n        });\n      });\n    });\n    var errorFields = {};\n    (0,_util__WEBPACK_IMPORTED_MODULE_2__.asyncMap)(series, options, function (data, doIt) {\n      var rule = data.rule;\n      var deep = (rule.type === 'object' || rule.type === 'array') && ((0,babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(rule.fields) === 'object' || (0,babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(rule.defaultField) === 'object');\n      deep = deep && (rule.required || !rule.required && data.value);\n      rule.field = data.field;\n      function addFullfield(key, schema) {\n        return (0,babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, schema, {\n          fullField: rule.fullField + '.' + key\n        });\n      }\n\n      function cb() {\n        var e = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\n        var errors = e;\n        if (!Array.isArray(errors)) {\n          errors = [errors];\n        }\n        if (errors.length) {\n          (0,_util__WEBPACK_IMPORTED_MODULE_2__.warning)('async-validator:', errors);\n        }\n        if (errors.length && rule.message) {\n          errors = [].concat(rule.message);\n        }\n\n        errors = errors.map((0,_util__WEBPACK_IMPORTED_MODULE_2__.complementError)(rule));\n\n        if (options.first && errors.length) {\n          errorFields[rule.field] = 1;\n          return doIt(errors);\n        }\n        if (!deep) {\n          doIt(errors);\n        } else {\n          // if rule is required but the target object\n          // does not exist fail at the rule level and don't\n          // go deeper\n          if (rule.required && !data.value) {\n            if (rule.message) {\n              errors = [].concat(rule.message).map((0,_util__WEBPACK_IMPORTED_MODULE_2__.complementError)(rule));\n            } else if (options.error) {\n              errors = [options.error(rule, (0,_util__WEBPACK_IMPORTED_MODULE_2__.format)(options.messages.required, rule.field))];\n            } else {\n              errors = [];\n            }\n            return doIt(errors);\n          }\n\n          var fieldsSchema = {};\n          if (rule.defaultField) {\n            for (var k in data.value) {\n              if (data.value.hasOwnProperty(k)) {\n                fieldsSchema[k] = rule.defaultField;\n              }\n            }\n          }\n          fieldsSchema = (0,babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, fieldsSchema, data.rule.fields);\n          for (var f in fieldsSchema) {\n            if (fieldsSchema.hasOwnProperty(f)) {\n              var fieldSchema = Array.isArray(fieldsSchema[f]) ? fieldsSchema[f] : [fieldsSchema[f]];\n              fieldsSchema[f] = fieldSchema.map(addFullfield.bind(null, f));\n            }\n          }\n          var schema = new Schema(fieldsSchema);\n          schema.messages(options.messages);\n          if (data.rule.options) {\n            data.rule.options.messages = options.messages;\n            data.rule.options.error = options.error;\n          }\n          schema.validate(data.value, data.rule.options || options, function (errs) {\n            doIt(errs && errs.length ? errors.concat(errs) : errs);\n          });\n        }\n      }\n\n      var res = rule.validator(rule, data.value, cb, data.source, options);\n      if (res && res.then) {\n        res.then(function () {\n          return cb();\n        }, function (e) {\n          return cb(e);\n        });\n      }\n    }, function (results) {\n      complete(results);\n    });\n  },\n  getType: function getType(rule) {\n    if (rule.type === undefined && rule.pattern instanceof RegExp) {\n      rule.type = 'pattern';\n    }\n    if (typeof rule.validator !== 'function' && rule.type && !_validator___WEBPACK_IMPORTED_MODULE_3__[\"default\"].hasOwnProperty(rule.type)) {\n      throw new Error((0,_util__WEBPACK_IMPORTED_MODULE_2__.format)('Unknown rule type %s', rule.type));\n    }\n    return rule.type || 'string';\n  },\n  getValidationMethod: function getValidationMethod(rule) {\n    if (typeof rule.validator === 'function') {\n      return rule.validator;\n    }\n    var keys = Object.keys(rule);\n    var messageIndex = keys.indexOf('message');\n    if (messageIndex !== -1) {\n      keys.splice(messageIndex, 1);\n    }\n    if (keys.length === 1 && keys[0] === 'required') {\n      return _validator___WEBPACK_IMPORTED_MODULE_3__[\"default\"].required;\n    }\n    return _validator___WEBPACK_IMPORTED_MODULE_3__[\"default\"][this.getType(rule)] || false;\n  }\n};\n\nSchema.register = function register(type, validator) {\n  if (typeof validator !== 'function') {\n    throw new Error('Cannot register a validator by type, validator is not a function');\n  }\n  _validator___WEBPACK_IMPORTED_MODULE_3__[\"default\"][type] = validator;\n};\n\nSchema.messages = _messages__WEBPACK_IMPORTED_MODULE_4__.messages;\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Schema);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXN5bmMtdmFsaWRhdG9yL2VzL2luZGV4LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFxRDtBQUNGO0FBQzRCO0FBQ3pDO0FBQ2dDOztBQUV0RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLCtDQUFlO0FBQ2xDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLGdEQUFTLENBQUMsc0RBQVc7QUFDNUM7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNEQUFzRCx3RUFBTztBQUM3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0Isb0JBQW9CO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1Isb0JBQW9CLG1CQUFtQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsdUJBQXVCLCtDQUFlO0FBQ3RDLG1CQUFtQixzREFBVztBQUM5QjtBQUNBLE1BQU0sZ0RBQVM7QUFDZjtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQix5RUFBUSxHQUFHO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWLGlCQUFpQix5RUFBUSxHQUFHO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLElBQUksK0NBQVE7QUFDWjtBQUNBLHVFQUF1RSx3RUFBTyw4QkFBOEIsd0VBQU87QUFDbkg7QUFDQTtBQUNBO0FBQ0EsZUFBZSx5RUFBUSxHQUFHO0FBQzFCO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsOENBQU87QUFDakI7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNEJBQTRCLHNEQUFlOztBQUUzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1EQUFtRCxzREFBZTtBQUNsRSxjQUFjO0FBQ2QsNENBQTRDLDZDQUFNO0FBQ2xELGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLHlFQUFRLEdBQUc7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhEQUE4RCxtREFBVTtBQUN4RSxzQkFBc0IsNkNBQU07QUFDNUI7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsbURBQVU7QUFDdkI7QUFDQSxXQUFXLG1EQUFVO0FBQ3JCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLG1EQUFVO0FBQ1o7O0FBRUEsa0JBQWtCLCtDQUFlOztBQUVqQyxpRUFBZSxNQUFNIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FzeW5jLXZhbGlkYXRvci9lcy9pbmRleC5qcz9lNmFiIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfZXh0ZW5kcyBmcm9tICdiYWJlbC1ydW50aW1lL2hlbHBlcnMvZXh0ZW5kcyc7XG5pbXBvcnQgX3R5cGVvZiBmcm9tICdiYWJlbC1ydW50aW1lL2hlbHBlcnMvdHlwZW9mJztcbmltcG9ydCB7IGZvcm1hdCwgY29tcGxlbWVudEVycm9yLCBhc3luY01hcCwgd2FybmluZywgZGVlcE1lcmdlIH0gZnJvbSAnLi91dGlsJztcbmltcG9ydCB2YWxpZGF0b3JzIGZyb20gJy4vdmFsaWRhdG9yLyc7XG5pbXBvcnQgeyBtZXNzYWdlcyBhcyBkZWZhdWx0TWVzc2FnZXMsIG5ld01lc3NhZ2VzIH0gZnJvbSAnLi9tZXNzYWdlcyc7XG5cbi8qKlxuICogIEVuY2Fwc3VsYXRlcyBhIHZhbGlkYXRpb24gc2NoZW1hLlxuICpcbiAqICBAcGFyYW0gZGVzY3JpcHRvciBBbiBvYmplY3QgZGVjbGFyaW5nIHZhbGlkYXRpb24gcnVsZXNcbiAqICBmb3IgdGhpcyBzY2hlbWEuXG4gKi9cbmZ1bmN0aW9uIFNjaGVtYShkZXNjcmlwdG9yKSB7XG4gIHRoaXMucnVsZXMgPSBudWxsO1xuICB0aGlzLl9tZXNzYWdlcyA9IGRlZmF1bHRNZXNzYWdlcztcbiAgdGhpcy5kZWZpbmUoZGVzY3JpcHRvcik7XG59XG5cblNjaGVtYS5wcm90b3R5cGUgPSB7XG4gIG1lc3NhZ2VzOiBmdW5jdGlvbiBtZXNzYWdlcyhfbWVzc2FnZXMpIHtcbiAgICBpZiAoX21lc3NhZ2VzKSB7XG4gICAgICB0aGlzLl9tZXNzYWdlcyA9IGRlZXBNZXJnZShuZXdNZXNzYWdlcygpLCBfbWVzc2FnZXMpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fbWVzc2FnZXM7XG4gIH0sXG4gIGRlZmluZTogZnVuY3Rpb24gZGVmaW5lKHJ1bGVzKSB7XG4gICAgaWYgKCFydWxlcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY29uZmlndXJlIGEgc2NoZW1hIHdpdGggbm8gcnVsZXMnKTtcbiAgICB9XG4gICAgaWYgKCh0eXBlb2YgcnVsZXMgPT09ICd1bmRlZmluZWQnID8gJ3VuZGVmaW5lZCcgOiBfdHlwZW9mKHJ1bGVzKSkgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkocnVsZXMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1J1bGVzIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gICAgfVxuICAgIHRoaXMucnVsZXMgPSB7fTtcbiAgICB2YXIgeiA9IHZvaWQgMDtcbiAgICB2YXIgaXRlbSA9IHZvaWQgMDtcbiAgICBmb3IgKHogaW4gcnVsZXMpIHtcbiAgICAgIGlmIChydWxlcy5oYXNPd25Qcm9wZXJ0eSh6KSkge1xuICAgICAgICBpdGVtID0gcnVsZXNbel07XG4gICAgICAgIHRoaXMucnVsZXNbel0gPSBBcnJheS5pc0FycmF5KGl0ZW0pID8gaXRlbSA6IFtpdGVtXTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIHZhbGlkYXRlOiBmdW5jdGlvbiB2YWxpZGF0ZShzb3VyY2VfKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHZhciBvID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgICB2YXIgb2MgPSBhcmd1bWVudHNbMl07XG5cbiAgICB2YXIgc291cmNlID0gc291cmNlXztcbiAgICB2YXIgb3B0aW9ucyA9IG87XG4gICAgdmFyIGNhbGxiYWNrID0gb2M7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjYWxsYmFjayA9IG9wdGlvbnM7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuICAgIGlmICghdGhpcy5ydWxlcyB8fCBPYmplY3Qua2V5cyh0aGlzLnJ1bGVzKS5sZW5ndGggPT09IDApIHtcbiAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb21wbGV0ZShyZXN1bHRzKSB7XG4gICAgICB2YXIgaSA9IHZvaWQgMDtcbiAgICAgIHZhciBmaWVsZCA9IHZvaWQgMDtcbiAgICAgIHZhciBlcnJvcnMgPSBbXTtcbiAgICAgIHZhciBmaWVsZHMgPSB7fTtcblxuICAgICAgZnVuY3Rpb24gYWRkKGUpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZSkpIHtcbiAgICAgICAgICBlcnJvcnMgPSBlcnJvcnMuY29uY2F0LmFwcGx5KGVycm9ycywgZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZXJyb3JzLnB1c2goZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9yIChpID0gMDsgaSA8IHJlc3VsdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYWRkKHJlc3VsdHNbaV0pO1xuICAgICAgfVxuICAgICAgaWYgKCFlcnJvcnMubGVuZ3RoKSB7XG4gICAgICAgIGVycm9ycyA9IG51bGw7XG4gICAgICAgIGZpZWxkcyA9IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZXJyb3JzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgZmllbGQgPSBlcnJvcnNbaV0uZmllbGQ7XG4gICAgICAgICAgZmllbGRzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF0gfHwgW107XG4gICAgICAgICAgZmllbGRzW2ZpZWxkXS5wdXNoKGVycm9yc1tpXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNhbGxiYWNrKGVycm9ycywgZmllbGRzKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5tZXNzYWdlcykge1xuICAgICAgdmFyIG1lc3NhZ2VzID0gdGhpcy5tZXNzYWdlcygpO1xuICAgICAgaWYgKG1lc3NhZ2VzID09PSBkZWZhdWx0TWVzc2FnZXMpIHtcbiAgICAgICAgbWVzc2FnZXMgPSBuZXdNZXNzYWdlcygpO1xuICAgICAgfVxuICAgICAgZGVlcE1lcmdlKG1lc3NhZ2VzLCBvcHRpb25zLm1lc3NhZ2VzKTtcbiAgICAgIG9wdGlvbnMubWVzc2FnZXMgPSBtZXNzYWdlcztcbiAgICB9IGVsc2Uge1xuICAgICAgb3B0aW9ucy5tZXNzYWdlcyA9IHRoaXMubWVzc2FnZXMoKTtcbiAgICB9XG4gICAgdmFyIGFyciA9IHZvaWQgMDtcbiAgICB2YXIgdmFsdWUgPSB2b2lkIDA7XG4gICAgdmFyIHNlcmllcyA9IHt9O1xuICAgIHZhciBrZXlzID0gb3B0aW9ucy5rZXlzIHx8IE9iamVjdC5rZXlzKHRoaXMucnVsZXMpO1xuICAgIGtleXMuZm9yRWFjaChmdW5jdGlvbiAoeikge1xuICAgICAgYXJyID0gX3RoaXMucnVsZXNbel07XG4gICAgICB2YWx1ZSA9IHNvdXJjZVt6XTtcbiAgICAgIGFyci5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7XG4gICAgICAgIHZhciBydWxlID0gcjtcbiAgICAgICAgaWYgKHR5cGVvZiBydWxlLnRyYW5zZm9ybSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGlmIChzb3VyY2UgPT09IHNvdXJjZV8pIHtcbiAgICAgICAgICAgIHNvdXJjZSA9IF9leHRlbmRzKHt9LCBzb3VyY2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YWx1ZSA9IHNvdXJjZVt6XSA9IHJ1bGUudHJhbnNmb3JtKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHJ1bGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBydWxlID0ge1xuICAgICAgICAgICAgdmFsaWRhdG9yOiBydWxlXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBydWxlID0gX2V4dGVuZHMoe30sIHJ1bGUpO1xuICAgICAgICB9XG4gICAgICAgIHJ1bGUudmFsaWRhdG9yID0gX3RoaXMuZ2V0VmFsaWRhdGlvbk1ldGhvZChydWxlKTtcbiAgICAgICAgcnVsZS5maWVsZCA9IHo7XG4gICAgICAgIHJ1bGUuZnVsbEZpZWxkID0gcnVsZS5mdWxsRmllbGQgfHwgejtcbiAgICAgICAgcnVsZS50eXBlID0gX3RoaXMuZ2V0VHlwZShydWxlKTtcbiAgICAgICAgaWYgKCFydWxlLnZhbGlkYXRvcikge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzZXJpZXNbel0gPSBzZXJpZXNbel0gfHwgW107XG4gICAgICAgIHNlcmllc1t6XS5wdXNoKHtcbiAgICAgICAgICBydWxlOiBydWxlLFxuICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICAgICAgICBmaWVsZDogelxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHZhciBlcnJvckZpZWxkcyA9IHt9O1xuICAgIGFzeW5jTWFwKHNlcmllcywgb3B0aW9ucywgZnVuY3Rpb24gKGRhdGEsIGRvSXQpIHtcbiAgICAgIHZhciBydWxlID0gZGF0YS5ydWxlO1xuICAgICAgdmFyIGRlZXAgPSAocnVsZS50eXBlID09PSAnb2JqZWN0JyB8fCBydWxlLnR5cGUgPT09ICdhcnJheScpICYmIChfdHlwZW9mKHJ1bGUuZmllbGRzKSA9PT0gJ29iamVjdCcgfHwgX3R5cGVvZihydWxlLmRlZmF1bHRGaWVsZCkgPT09ICdvYmplY3QnKTtcbiAgICAgIGRlZXAgPSBkZWVwICYmIChydWxlLnJlcXVpcmVkIHx8ICFydWxlLnJlcXVpcmVkICYmIGRhdGEudmFsdWUpO1xuICAgICAgcnVsZS5maWVsZCA9IGRhdGEuZmllbGQ7XG4gICAgICBmdW5jdGlvbiBhZGRGdWxsZmllbGQoa2V5LCBzY2hlbWEpIHtcbiAgICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzY2hlbWEsIHtcbiAgICAgICAgICBmdWxsRmllbGQ6IHJ1bGUuZnVsbEZpZWxkICsgJy4nICsga2V5XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBjYigpIHtcbiAgICAgICAgdmFyIGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IFtdO1xuXG4gICAgICAgIHZhciBlcnJvcnMgPSBlO1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZXJyb3JzKSkge1xuICAgICAgICAgIGVycm9ycyA9IFtlcnJvcnNdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlcnJvcnMubGVuZ3RoKSB7XG4gICAgICAgICAgd2FybmluZygnYXN5bmMtdmFsaWRhdG9yOicsIGVycm9ycyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycm9ycy5sZW5ndGggJiYgcnVsZS5tZXNzYWdlKSB7XG4gICAgICAgICAgZXJyb3JzID0gW10uY29uY2F0KHJ1bGUubWVzc2FnZSk7XG4gICAgICAgIH1cblxuICAgICAgICBlcnJvcnMgPSBlcnJvcnMubWFwKGNvbXBsZW1lbnRFcnJvcihydWxlKSk7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuZmlyc3QgJiYgZXJyb3JzLmxlbmd0aCkge1xuICAgICAgICAgIGVycm9yRmllbGRzW3J1bGUuZmllbGRdID0gMTtcbiAgICAgICAgICByZXR1cm4gZG9JdChlcnJvcnMpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZGVlcCkge1xuICAgICAgICAgIGRvSXQoZXJyb3JzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBpZiBydWxlIGlzIHJlcXVpcmVkIGJ1dCB0aGUgdGFyZ2V0IG9iamVjdFxuICAgICAgICAgIC8vIGRvZXMgbm90IGV4aXN0IGZhaWwgYXQgdGhlIHJ1bGUgbGV2ZWwgYW5kIGRvbid0XG4gICAgICAgICAgLy8gZ28gZGVlcGVyXG4gICAgICAgICAgaWYgKHJ1bGUucmVxdWlyZWQgJiYgIWRhdGEudmFsdWUpIHtcbiAgICAgICAgICAgIGlmIChydWxlLm1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgZXJyb3JzID0gW10uY29uY2F0KHJ1bGUubWVzc2FnZSkubWFwKGNvbXBsZW1lbnRFcnJvcihydWxlKSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMuZXJyb3IpIHtcbiAgICAgICAgICAgICAgZXJyb3JzID0gW29wdGlvbnMuZXJyb3IocnVsZSwgZm9ybWF0KG9wdGlvbnMubWVzc2FnZXMucmVxdWlyZWQsIHJ1bGUuZmllbGQpKV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBlcnJvcnMgPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBkb0l0KGVycm9ycyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIGZpZWxkc1NjaGVtYSA9IHt9O1xuICAgICAgICAgIGlmIChydWxlLmRlZmF1bHRGaWVsZCkge1xuICAgICAgICAgICAgZm9yICh2YXIgayBpbiBkYXRhLnZhbHVlKSB7XG4gICAgICAgICAgICAgIGlmIChkYXRhLnZhbHVlLmhhc093blByb3BlcnR5KGspKSB7XG4gICAgICAgICAgICAgICAgZmllbGRzU2NoZW1hW2tdID0gcnVsZS5kZWZhdWx0RmllbGQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZmllbGRzU2NoZW1hID0gX2V4dGVuZHMoe30sIGZpZWxkc1NjaGVtYSwgZGF0YS5ydWxlLmZpZWxkcyk7XG4gICAgICAgICAgZm9yICh2YXIgZiBpbiBmaWVsZHNTY2hlbWEpIHtcbiAgICAgICAgICAgIGlmIChmaWVsZHNTY2hlbWEuaGFzT3duUHJvcGVydHkoZikpIHtcbiAgICAgICAgICAgICAgdmFyIGZpZWxkU2NoZW1hID0gQXJyYXkuaXNBcnJheShmaWVsZHNTY2hlbWFbZl0pID8gZmllbGRzU2NoZW1hW2ZdIDogW2ZpZWxkc1NjaGVtYVtmXV07XG4gICAgICAgICAgICAgIGZpZWxkc1NjaGVtYVtmXSA9IGZpZWxkU2NoZW1hLm1hcChhZGRGdWxsZmllbGQuYmluZChudWxsLCBmKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBzY2hlbWEgPSBuZXcgU2NoZW1hKGZpZWxkc1NjaGVtYSk7XG4gICAgICAgICAgc2NoZW1hLm1lc3NhZ2VzKG9wdGlvbnMubWVzc2FnZXMpO1xuICAgICAgICAgIGlmIChkYXRhLnJ1bGUub3B0aW9ucykge1xuICAgICAgICAgICAgZGF0YS5ydWxlLm9wdGlvbnMubWVzc2FnZXMgPSBvcHRpb25zLm1lc3NhZ2VzO1xuICAgICAgICAgICAgZGF0YS5ydWxlLm9wdGlvbnMuZXJyb3IgPSBvcHRpb25zLmVycm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzY2hlbWEudmFsaWRhdGUoZGF0YS52YWx1ZSwgZGF0YS5ydWxlLm9wdGlvbnMgfHwgb3B0aW9ucywgZnVuY3Rpb24gKGVycnMpIHtcbiAgICAgICAgICAgIGRvSXQoZXJycyAmJiBlcnJzLmxlbmd0aCA/IGVycm9ycy5jb25jYXQoZXJycykgOiBlcnJzKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgcmVzID0gcnVsZS52YWxpZGF0b3IocnVsZSwgZGF0YS52YWx1ZSwgY2IsIGRhdGEuc291cmNlLCBvcHRpb25zKTtcbiAgICAgIGlmIChyZXMgJiYgcmVzLnRoZW4pIHtcbiAgICAgICAgcmVzLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBjYigpO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgIHJldHVybiBjYihlKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSwgZnVuY3Rpb24gKHJlc3VsdHMpIHtcbiAgICAgIGNvbXBsZXRlKHJlc3VsdHMpO1xuICAgIH0pO1xuICB9LFxuICBnZXRUeXBlOiBmdW5jdGlvbiBnZXRUeXBlKHJ1bGUpIHtcbiAgICBpZiAocnVsZS50eXBlID09PSB1bmRlZmluZWQgJiYgcnVsZS5wYXR0ZXJuIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICBydWxlLnR5cGUgPSAncGF0dGVybic7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgcnVsZS52YWxpZGF0b3IgIT09ICdmdW5jdGlvbicgJiYgcnVsZS50eXBlICYmICF2YWxpZGF0b3JzLmhhc093blByb3BlcnR5KHJ1bGUudHlwZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihmb3JtYXQoJ1Vua25vd24gcnVsZSB0eXBlICVzJywgcnVsZS50eXBlKSk7XG4gICAgfVxuICAgIHJldHVybiBydWxlLnR5cGUgfHwgJ3N0cmluZyc7XG4gIH0sXG4gIGdldFZhbGlkYXRpb25NZXRob2Q6IGZ1bmN0aW9uIGdldFZhbGlkYXRpb25NZXRob2QocnVsZSkge1xuICAgIGlmICh0eXBlb2YgcnVsZS52YWxpZGF0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBydWxlLnZhbGlkYXRvcjtcbiAgICB9XG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhydWxlKTtcbiAgICB2YXIgbWVzc2FnZUluZGV4ID0ga2V5cy5pbmRleE9mKCdtZXNzYWdlJyk7XG4gICAgaWYgKG1lc3NhZ2VJbmRleCAhPT0gLTEpIHtcbiAgICAgIGtleXMuc3BsaWNlKG1lc3NhZ2VJbmRleCwgMSk7XG4gICAgfVxuICAgIGlmIChrZXlzLmxlbmd0aCA9PT0gMSAmJiBrZXlzWzBdID09PSAncmVxdWlyZWQnKSB7XG4gICAgICByZXR1cm4gdmFsaWRhdG9ycy5yZXF1aXJlZDtcbiAgICB9XG4gICAgcmV0dXJuIHZhbGlkYXRvcnNbdGhpcy5nZXRUeXBlKHJ1bGUpXSB8fCBmYWxzZTtcbiAgfVxufTtcblxuU2NoZW1hLnJlZ2lzdGVyID0gZnVuY3Rpb24gcmVnaXN0ZXIodHlwZSwgdmFsaWRhdG9yKSB7XG4gIGlmICh0eXBlb2YgdmFsaWRhdG9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgcmVnaXN0ZXIgYSB2YWxpZGF0b3IgYnkgdHlwZSwgdmFsaWRhdG9yIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gIH1cbiAgdmFsaWRhdG9yc1t0eXBlXSA9IHZhbGlkYXRvcjtcbn07XG5cblNjaGVtYS5tZXNzYWdlcyA9IGRlZmF1bHRNZXNzYWdlcztcblxuZXhwb3J0IGRlZmF1bHQgU2NoZW1hOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/async-validator/es/index.js\n");

/***/ }),

/***/ "./node_modules/async-validator/es/messages.js":
/*!*****************************************************!*\
  !*** ./node_modules/async-validator/es/messages.js ***!
  \*****************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   messages: () => (/* binding */ messages),\n/* harmony export */   newMessages: () => (/* binding */ newMessages)\n/* harmony export */ });\nfunction newMessages() {\n  return {\n    'default': 'Validation error on field %s',\n    required: '%s is required',\n    'enum': '%s must be one of %s',\n    whitespace: '%s cannot be empty',\n    date: {\n      format: '%s date %s is invalid for format %s',\n      parse: '%s date could not be parsed, %s is invalid ',\n      invalid: '%s date %s is invalid'\n    },\n    types: {\n      string: '%s is not a %s',\n      method: '%s is not a %s (function)',\n      array: '%s is not an %s',\n      object: '%s is not an %s',\n      number: '%s is not a %s',\n      date: '%s is not a %s',\n      boolean: '%s is not a %s',\n      integer: '%s is not an %s',\n      float: '%s is not a %s',\n      regexp: '%s is not a valid %s',\n      email: '%s is not a valid %s',\n      url: '%s is not a valid %s',\n      hex: '%s is not a valid %s'\n    },\n    string: {\n      len: '%s must be exactly %s characters',\n      min: '%s must be at least %s characters',\n      max: '%s cannot be longer than %s characters',\n      range: '%s must be between %s and %s characters'\n    },\n    number: {\n      len: '%s must equal %s',\n      min: '%s cannot be less than %s',\n      max: '%s cannot be greater than %s',\n      range: '%s must be between %s and %s'\n    },\n    array: {\n      len: '%s must be exactly %s in length',\n      min: '%s cannot be less than %s in length',\n      max: '%s cannot be greater than %s in length',\n      range: '%s must be between %s and %s in length'\n    },\n    pattern: {\n      mismatch: '%s value %s does not match pattern %s'\n    },\n    clone: function clone() {\n      var cloned = JSON.parse(JSON.stringify(this));\n      cloned.clone = this.clone;\n      return cloned;\n    }\n  };\n}\n\nvar messages = newMessages();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXN5bmMtdmFsaWRhdG9yL2VzL21lc3NhZ2VzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVPIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FzeW5jLXZhbGlkYXRvci9lcy9tZXNzYWdlcy5qcz81ZjYzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBuZXdNZXNzYWdlcygpIHtcbiAgcmV0dXJuIHtcbiAgICAnZGVmYXVsdCc6ICdWYWxpZGF0aW9uIGVycm9yIG9uIGZpZWxkICVzJyxcbiAgICByZXF1aXJlZDogJyVzIGlzIHJlcXVpcmVkJyxcbiAgICAnZW51bSc6ICclcyBtdXN0IGJlIG9uZSBvZiAlcycsXG4gICAgd2hpdGVzcGFjZTogJyVzIGNhbm5vdCBiZSBlbXB0eScsXG4gICAgZGF0ZToge1xuICAgICAgZm9ybWF0OiAnJXMgZGF0ZSAlcyBpcyBpbnZhbGlkIGZvciBmb3JtYXQgJXMnLFxuICAgICAgcGFyc2U6ICclcyBkYXRlIGNvdWxkIG5vdCBiZSBwYXJzZWQsICVzIGlzIGludmFsaWQgJyxcbiAgICAgIGludmFsaWQ6ICclcyBkYXRlICVzIGlzIGludmFsaWQnXG4gICAgfSxcbiAgICB0eXBlczoge1xuICAgICAgc3RyaW5nOiAnJXMgaXMgbm90IGEgJXMnLFxuICAgICAgbWV0aG9kOiAnJXMgaXMgbm90IGEgJXMgKGZ1bmN0aW9uKScsXG4gICAgICBhcnJheTogJyVzIGlzIG5vdCBhbiAlcycsXG4gICAgICBvYmplY3Q6ICclcyBpcyBub3QgYW4gJXMnLFxuICAgICAgbnVtYmVyOiAnJXMgaXMgbm90IGEgJXMnLFxuICAgICAgZGF0ZTogJyVzIGlzIG5vdCBhICVzJyxcbiAgICAgIGJvb2xlYW46ICclcyBpcyBub3QgYSAlcycsXG4gICAgICBpbnRlZ2VyOiAnJXMgaXMgbm90IGFuICVzJyxcbiAgICAgIGZsb2F0OiAnJXMgaXMgbm90IGEgJXMnLFxuICAgICAgcmVnZXhwOiAnJXMgaXMgbm90IGEgdmFsaWQgJXMnLFxuICAgICAgZW1haWw6ICclcyBpcyBub3QgYSB2YWxpZCAlcycsXG4gICAgICB1cmw6ICclcyBpcyBub3QgYSB2YWxpZCAlcycsXG4gICAgICBoZXg6ICclcyBpcyBub3QgYSB2YWxpZCAlcydcbiAgICB9LFxuICAgIHN0cmluZzoge1xuICAgICAgbGVuOiAnJXMgbXVzdCBiZSBleGFjdGx5ICVzIGNoYXJhY3RlcnMnLFxuICAgICAgbWluOiAnJXMgbXVzdCBiZSBhdCBsZWFzdCAlcyBjaGFyYWN0ZXJzJyxcbiAgICAgIG1heDogJyVzIGNhbm5vdCBiZSBsb25nZXIgdGhhbiAlcyBjaGFyYWN0ZXJzJyxcbiAgICAgIHJhbmdlOiAnJXMgbXVzdCBiZSBiZXR3ZWVuICVzIGFuZCAlcyBjaGFyYWN0ZXJzJ1xuICAgIH0sXG4gICAgbnVtYmVyOiB7XG4gICAgICBsZW46ICclcyBtdXN0IGVxdWFsICVzJyxcbiAgICAgIG1pbjogJyVzIGNhbm5vdCBiZSBsZXNzIHRoYW4gJXMnLFxuICAgICAgbWF4OiAnJXMgY2Fubm90IGJlIGdyZWF0ZXIgdGhhbiAlcycsXG4gICAgICByYW5nZTogJyVzIG11c3QgYmUgYmV0d2VlbiAlcyBhbmQgJXMnXG4gICAgfSxcbiAgICBhcnJheToge1xuICAgICAgbGVuOiAnJXMgbXVzdCBiZSBleGFjdGx5ICVzIGluIGxlbmd0aCcsXG4gICAgICBtaW46ICclcyBjYW5ub3QgYmUgbGVzcyB0aGFuICVzIGluIGxlbmd0aCcsXG4gICAgICBtYXg6ICclcyBjYW5ub3QgYmUgZ3JlYXRlciB0aGFuICVzIGluIGxlbmd0aCcsXG4gICAgICByYW5nZTogJyVzIG11c3QgYmUgYmV0d2VlbiAlcyBhbmQgJXMgaW4gbGVuZ3RoJ1xuICAgIH0sXG4gICAgcGF0dGVybjoge1xuICAgICAgbWlzbWF0Y2g6ICclcyB2YWx1ZSAlcyBkb2VzIG5vdCBtYXRjaCBwYXR0ZXJuICVzJ1xuICAgIH0sXG4gICAgY2xvbmU6IGZ1bmN0aW9uIGNsb25lKCkge1xuICAgICAgdmFyIGNsb25lZCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcykpO1xuICAgICAgY2xvbmVkLmNsb25lID0gdGhpcy5jbG9uZTtcbiAgICAgIHJldHVybiBjbG9uZWQ7XG4gICAgfVxuICB9O1xufVxuXG5leHBvcnQgdmFyIG1lc3NhZ2VzID0gbmV3TWVzc2FnZXMoKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/async-validator/es/messages.js\n");

/***/ }),

/***/ "./node_modules/async-validator/es/rule/enum.js":
/*!******************************************************!*\
  !*** ./node_modules/async-validator/es/rule/enum.js ***!
  \******************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util */ \"./node_modules/async-validator/es/util.js\");\n\nvar ENUM = 'enum';\n\n/**\n *  Rule for validating a value exists in an enumerable list.\n *\n *  @param rule The validation rule.\n *  @param value The value of the field on the source object.\n *  @param source The source object being validated.\n *  @param errors An array of errors that this rule may add\n *  validation errors to.\n *  @param options The validation options.\n *  @param options.messages The validation messages.\n */\nfunction enumerable(rule, value, source, errors, options) {\n  rule[ENUM] = Array.isArray(rule[ENUM]) ? rule[ENUM] : [];\n  if (rule[ENUM].indexOf(value) === -1) {\n    errors.push(_util__WEBPACK_IMPORTED_MODULE_0__.format(options.messages[ENUM], rule.fullField, rule[ENUM].join(', ')));\n  }\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (enumerable);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXN5bmMtdmFsaWRhdG9yL2VzL3J1bGUvZW51bS5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFnQztBQUNoQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLHlDQUFXO0FBQzNCO0FBQ0E7O0FBRUEsaUVBQWUsVUFBVSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9hc3luYy12YWxpZGF0b3IvZXMvcnVsZS9lbnVtLmpzPzJkMTIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgdXRpbCBmcm9tICcuLi91dGlsJztcbnZhciBFTlVNID0gJ2VudW0nO1xuXG4vKipcbiAqICBSdWxlIGZvciB2YWxpZGF0aW5nIGEgdmFsdWUgZXhpc3RzIGluIGFuIGVudW1lcmFibGUgbGlzdC5cbiAqXG4gKiAgQHBhcmFtIHJ1bGUgVGhlIHZhbGlkYXRpb24gcnVsZS5cbiAqICBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIG9mIHRoZSBmaWVsZCBvbiB0aGUgc291cmNlIG9iamVjdC5cbiAqICBAcGFyYW0gc291cmNlIFRoZSBzb3VyY2Ugb2JqZWN0IGJlaW5nIHZhbGlkYXRlZC5cbiAqICBAcGFyYW0gZXJyb3JzIEFuIGFycmF5IG9mIGVycm9ycyB0aGF0IHRoaXMgcnVsZSBtYXkgYWRkXG4gKiAgdmFsaWRhdGlvbiBlcnJvcnMgdG8uXG4gKiAgQHBhcmFtIG9wdGlvbnMgVGhlIHZhbGlkYXRpb24gb3B0aW9ucy5cbiAqICBAcGFyYW0gb3B0aW9ucy5tZXNzYWdlcyBUaGUgdmFsaWRhdGlvbiBtZXNzYWdlcy5cbiAqL1xuZnVuY3Rpb24gZW51bWVyYWJsZShydWxlLCB2YWx1ZSwgc291cmNlLCBlcnJvcnMsIG9wdGlvbnMpIHtcbiAgcnVsZVtFTlVNXSA9IEFycmF5LmlzQXJyYXkocnVsZVtFTlVNXSkgPyBydWxlW0VOVU1dIDogW107XG4gIGlmIChydWxlW0VOVU1dLmluZGV4T2YodmFsdWUpID09PSAtMSkge1xuICAgIGVycm9ycy5wdXNoKHV0aWwuZm9ybWF0KG9wdGlvbnMubWVzc2FnZXNbRU5VTV0sIHJ1bGUuZnVsbEZpZWxkLCBydWxlW0VOVU1dLmpvaW4oJywgJykpKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBlbnVtZXJhYmxlOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/async-validator/es/rule/enum.js\n");

/***/ }),

/***/ "./node_modules/async-validator/es/rule/index.js":
/*!*******************************************************!*\
  !*** ./node_modules/async-validator/es/rule/index.js ***!
  \*******************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _required__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./required */ \"./node_modules/async-validator/es/rule/required.js\");\n/* harmony import */ var _whitespace__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./whitespace */ \"./node_modules/async-validator/es/rule/whitespace.js\");\n/* harmony import */ var _type__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./type */ \"./node_modules/async-validator/es/rule/type.js\");\n/* harmony import */ var _range__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./range */ \"./node_modules/async-validator/es/rule/range.js\");\n/* harmony import */ var _enum__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./enum */ \"./node_modules/async-validator/es/rule/enum.js\");\n/* harmony import */ var _pattern__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./pattern */ \"./node_modules/async-validator/es/rule/pattern.js\");\n\n\n\n\n\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n  required: _required__WEBPACK_IMPORTED_MODULE_0__[\"default\"],\n  whitespace: _whitespace__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  type: _type__WEBPACK_IMPORTED_MODULE_2__[\"default\"],\n  range: _range__WEBPACK_IMPORTED_MODULE_3__[\"default\"],\n  'enum': _enum__WEBPACK_IMPORTED_MODULE_4__[\"default\"],\n  pattern: _pattern__WEBPACK_IMPORTED_MODULE_5__[\"default\"]\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXN5bmMtdmFsaWRhdG9yL2VzL3J1bGUvaW5kZXguanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFrQztBQUNJO0FBQ1o7QUFDRTtBQUNFO0FBQ0U7O0FBRWhDLGlFQUFlO0FBQ2YsWUFBWSxpREFBUTtBQUNwQixjQUFjLG1EQUFVO0FBQ3hCLFFBQVEsNkNBQUk7QUFDWixTQUFTLDhDQUFLO0FBQ2QsVUFBVSw2Q0FBUTtBQUNsQixXQUFXLGdEQUFPO0FBQ2xCLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXN5bmMtdmFsaWRhdG9yL2VzL3J1bGUvaW5kZXguanM/MWVkYyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcmVxdWlyZWQgZnJvbSAnLi9yZXF1aXJlZCc7XG5pbXBvcnQgd2hpdGVzcGFjZSBmcm9tICcuL3doaXRlc3BhY2UnO1xuaW1wb3J0IHR5cGUgZnJvbSAnLi90eXBlJztcbmltcG9ydCByYW5nZSBmcm9tICcuL3JhbmdlJztcbmltcG9ydCBlbnVtUnVsZSBmcm9tICcuL2VudW0nO1xuaW1wb3J0IHBhdHRlcm4gZnJvbSAnLi9wYXR0ZXJuJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICByZXF1aXJlZDogcmVxdWlyZWQsXG4gIHdoaXRlc3BhY2U6IHdoaXRlc3BhY2UsXG4gIHR5cGU6IHR5cGUsXG4gIHJhbmdlOiByYW5nZSxcbiAgJ2VudW0nOiBlbnVtUnVsZSxcbiAgcGF0dGVybjogcGF0dGVyblxufTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/async-validator/es/rule/index.js\n");

/***/ }),

/***/ "./node_modules/async-validator/es/rule/pattern.js":
/*!*********************************************************!*\
  !*** ./node_modules/async-validator/es/rule/pattern.js ***!
  \*********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util */ \"./node_modules/async-validator/es/util.js\");\n\n\n/**\n *  Rule for validating a regular expression pattern.\n *\n *  @param rule The validation rule.\n *  @param value The value of the field on the source object.\n *  @param source The source object being validated.\n *  @param errors An array of errors that this rule may add\n *  validation errors to.\n *  @param options The validation options.\n *  @param options.messages The validation messages.\n */\nfunction pattern(rule, value, source, errors, options) {\n  if (rule.pattern) {\n    if (rule.pattern instanceof RegExp) {\n      // if a RegExp instance is passed, reset `lastIndex` in case its `global`\n      // flag is accidentally set to `true`, which in a validation scenario\n      // is not necessary and the result might be misleading\n      rule.pattern.lastIndex = 0;\n      if (!rule.pattern.test(value)) {\n        errors.push(_util__WEBPACK_IMPORTED_MODULE_0__.format(options.messages.pattern.mismatch, rule.fullField, value, rule.pattern));\n      }\n    } else if (typeof rule.pattern === 'string') {\n      var _pattern = new RegExp(rule.pattern);\n      if (!_pattern.test(value)) {\n        errors.push(_util__WEBPACK_IMPORTED_MODULE_0__.format(options.messages.pattern.mismatch, rule.fullField, value, rule.pattern));\n      }\n    }\n  }\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (pattern);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXN5bmMtdmFsaWRhdG9yL2VzL3J1bGUvcGF0dGVybi5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFnQzs7QUFFaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IseUNBQVc7QUFDL0I7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLG9CQUFvQix5Q0FBVztBQUMvQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpRUFBZSxPQUFPIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FzeW5jLXZhbGlkYXRvci9lcy9ydWxlL3BhdHRlcm4uanM/ODY3OCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4uL3V0aWwnO1xuXG4vKipcbiAqICBSdWxlIGZvciB2YWxpZGF0aW5nIGEgcmVndWxhciBleHByZXNzaW9uIHBhdHRlcm4uXG4gKlxuICogIEBwYXJhbSBydWxlIFRoZSB2YWxpZGF0aW9uIHJ1bGUuXG4gKiAgQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgZmllbGQgb24gdGhlIHNvdXJjZSBvYmplY3QuXG4gKiAgQHBhcmFtIHNvdXJjZSBUaGUgc291cmNlIG9iamVjdCBiZWluZyB2YWxpZGF0ZWQuXG4gKiAgQHBhcmFtIGVycm9ycyBBbiBhcnJheSBvZiBlcnJvcnMgdGhhdCB0aGlzIHJ1bGUgbWF5IGFkZFxuICogIHZhbGlkYXRpb24gZXJyb3JzIHRvLlxuICogIEBwYXJhbSBvcHRpb25zIFRoZSB2YWxpZGF0aW9uIG9wdGlvbnMuXG4gKiAgQHBhcmFtIG9wdGlvbnMubWVzc2FnZXMgVGhlIHZhbGlkYXRpb24gbWVzc2FnZXMuXG4gKi9cbmZ1bmN0aW9uIHBhdHRlcm4ocnVsZSwgdmFsdWUsIHNvdXJjZSwgZXJyb3JzLCBvcHRpb25zKSB7XG4gIGlmIChydWxlLnBhdHRlcm4pIHtcbiAgICBpZiAocnVsZS5wYXR0ZXJuIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAvLyBpZiBhIFJlZ0V4cCBpbnN0YW5jZSBpcyBwYXNzZWQsIHJlc2V0IGBsYXN0SW5kZXhgIGluIGNhc2UgaXRzIGBnbG9iYWxgXG4gICAgICAvLyBmbGFnIGlzIGFjY2lkZW50YWxseSBzZXQgdG8gYHRydWVgLCB3aGljaCBpbiBhIHZhbGlkYXRpb24gc2NlbmFyaW9cbiAgICAgIC8vIGlzIG5vdCBuZWNlc3NhcnkgYW5kIHRoZSByZXN1bHQgbWlnaHQgYmUgbWlzbGVhZGluZ1xuICAgICAgcnVsZS5wYXR0ZXJuLmxhc3RJbmRleCA9IDA7XG4gICAgICBpZiAoIXJ1bGUucGF0dGVybi50ZXN0KHZhbHVlKSkge1xuICAgICAgICBlcnJvcnMucHVzaCh1dGlsLmZvcm1hdChvcHRpb25zLm1lc3NhZ2VzLnBhdHRlcm4ubWlzbWF0Y2gsIHJ1bGUuZnVsbEZpZWxkLCB2YWx1ZSwgcnVsZS5wYXR0ZXJuKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgcnVsZS5wYXR0ZXJuID09PSAnc3RyaW5nJykge1xuICAgICAgdmFyIF9wYXR0ZXJuID0gbmV3IFJlZ0V4cChydWxlLnBhdHRlcm4pO1xuICAgICAgaWYgKCFfcGF0dGVybi50ZXN0KHZhbHVlKSkge1xuICAgICAgICBlcnJvcnMucHVzaCh1dGlsLmZvcm1hdChvcHRpb25zLm1lc3NhZ2VzLnBhdHRlcm4ubWlzbWF0Y2gsIHJ1bGUuZnVsbEZpZWxkLCB2YWx1ZSwgcnVsZS5wYXR0ZXJuKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHBhdHRlcm47Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/async-validator/es/rule/pattern.js\n");

/***/ }),

/***/ "./node_modules/async-validator/es/rule/range.js":
/*!*******************************************************!*\
  !*** ./node_modules/async-validator/es/rule/range.js ***!
  \*******************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util */ \"./node_modules/async-validator/es/util.js\");\n\n\n/**\n *  Rule for validating minimum and maximum allowed values.\n *\n *  @param rule The validation rule.\n *  @param value The value of the field on the source object.\n *  @param source The source object being validated.\n *  @param errors An array of errors that this rule may add\n *  validation errors to.\n *  @param options The validation options.\n *  @param options.messages The validation messages.\n */\nfunction range(rule, value, source, errors, options) {\n  var len = typeof rule.len === 'number';\n  var min = typeof rule.min === 'number';\n  var max = typeof rule.max === 'number';\n  // 正则匹配码点范围从U+010000一直到U+10FFFF的文字(补充平面Supplementary Plane)\n  var spRegexp = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n  var val = value;\n  var key = null;\n  var num = typeof value === 'number';\n  var str = typeof value === 'string';\n  var arr = Array.isArray(value);\n  if (num) {\n    key = 'number';\n  } else if (str) {\n    key = 'string';\n  } else if (arr) {\n    key = 'array';\n  }\n  // if the value is not of a supported type for range validation\n  // the validation rule rule should use the\n  // type property to also test for a particular type\n  if (!key) {\n    return false;\n  }\n  if (arr) {\n    val = value.length;\n  }\n  if (str) {\n    // 处理码点大于U+010000的文字length属性不准确的bug,如\"𠮷𠮷𠮷\".lenght !== 3\n    val = value.replace(spRegexp, '_').length;\n  }\n  if (len) {\n    if (val !== rule.len) {\n      errors.push(_util__WEBPACK_IMPORTED_MODULE_0__.format(options.messages[key].len, rule.fullField, rule.len));\n    }\n  } else if (min && !max && val < rule.min) {\n    errors.push(_util__WEBPACK_IMPORTED_MODULE_0__.format(options.messages[key].min, rule.fullField, rule.min));\n  } else if (max && !min && val > rule.max) {\n    errors.push(_util__WEBPACK_IMPORTED_MODULE_0__.format(options.messages[key].max, rule.fullField, rule.max));\n  } else if (min && max && (val < rule.min || val > rule.max)) {\n    errors.push(_util__WEBPACK_IMPORTED_MODULE_0__.format(options.messages[key].range, rule.fullField, rule.min, rule.max));\n  }\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (range);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXN5bmMtdmFsaWRhdG9yL2VzL3J1bGUvcmFuZ2UuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBZ0M7O0FBRWhDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLHlDQUFXO0FBQzdCO0FBQ0EsSUFBSTtBQUNKLGdCQUFnQix5Q0FBVztBQUMzQixJQUFJO0FBQ0osZ0JBQWdCLHlDQUFXO0FBQzNCLElBQUk7QUFDSixnQkFBZ0IseUNBQVc7QUFDM0I7QUFDQTs7QUFFQSxpRUFBZSxLQUFLIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FzeW5jLXZhbGlkYXRvci9lcy9ydWxlL3JhbmdlLmpzPzcyZjkiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgdXRpbCBmcm9tICcuLi91dGlsJztcblxuLyoqXG4gKiAgUnVsZSBmb3IgdmFsaWRhdGluZyBtaW5pbXVtIGFuZCBtYXhpbXVtIGFsbG93ZWQgdmFsdWVzLlxuICpcbiAqICBAcGFyYW0gcnVsZSBUaGUgdmFsaWRhdGlvbiBydWxlLlxuICogIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgb2YgdGhlIGZpZWxkIG9uIHRoZSBzb3VyY2Ugb2JqZWN0LlxuICogIEBwYXJhbSBzb3VyY2UgVGhlIHNvdXJjZSBvYmplY3QgYmVpbmcgdmFsaWRhdGVkLlxuICogIEBwYXJhbSBlcnJvcnMgQW4gYXJyYXkgb2YgZXJyb3JzIHRoYXQgdGhpcyBydWxlIG1heSBhZGRcbiAqICB2YWxpZGF0aW9uIGVycm9ycyB0by5cbiAqICBAcGFyYW0gb3B0aW9ucyBUaGUgdmFsaWRhdGlvbiBvcHRpb25zLlxuICogIEBwYXJhbSBvcHRpb25zLm1lc3NhZ2VzIFRoZSB2YWxpZGF0aW9uIG1lc3NhZ2VzLlxuICovXG5mdW5jdGlvbiByYW5nZShydWxlLCB2YWx1ZSwgc291cmNlLCBlcnJvcnMsIG9wdGlvbnMpIHtcbiAgdmFyIGxlbiA9IHR5cGVvZiBydWxlLmxlbiA9PT0gJ251bWJlcic7XG4gIHZhciBtaW4gPSB0eXBlb2YgcnVsZS5taW4gPT09ICdudW1iZXInO1xuICB2YXIgbWF4ID0gdHlwZW9mIHJ1bGUubWF4ID09PSAnbnVtYmVyJztcbiAgLy8g5q2j5YiZ5Yy56YWN56CB54K56IyD5Zu05LuOVSswMTAwMDDkuIDnm7TliLBVKzEwRkZGRueahOaWh+Wtl++8iOihpeWFheW5s+mdolN1cHBsZW1lbnRhcnkgUGxhbmXvvIlcbiAgdmFyIHNwUmVnZXhwID0gL1tcXHVEODAwLVxcdURCRkZdW1xcdURDMDAtXFx1REZGRl0vZztcbiAgdmFyIHZhbCA9IHZhbHVlO1xuICB2YXIga2V5ID0gbnVsbDtcbiAgdmFyIG51bSA9IHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcic7XG4gIHZhciBzdHIgPSB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnO1xuICB2YXIgYXJyID0gQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG4gIGlmIChudW0pIHtcbiAgICBrZXkgPSAnbnVtYmVyJztcbiAgfSBlbHNlIGlmIChzdHIpIHtcbiAgICBrZXkgPSAnc3RyaW5nJztcbiAgfSBlbHNlIGlmIChhcnIpIHtcbiAgICBrZXkgPSAnYXJyYXknO1xuICB9XG4gIC8vIGlmIHRoZSB2YWx1ZSBpcyBub3Qgb2YgYSBzdXBwb3J0ZWQgdHlwZSBmb3IgcmFuZ2UgdmFsaWRhdGlvblxuICAvLyB0aGUgdmFsaWRhdGlvbiBydWxlIHJ1bGUgc2hvdWxkIHVzZSB0aGVcbiAgLy8gdHlwZSBwcm9wZXJ0eSB0byBhbHNvIHRlc3QgZm9yIGEgcGFydGljdWxhciB0eXBlXG4gIGlmICgha2V5KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChhcnIpIHtcbiAgICB2YWwgPSB2YWx1ZS5sZW5ndGg7XG4gIH1cbiAgaWYgKHN0cikge1xuICAgIC8vIOWkhOeQhueggeeCueWkp+S6jlUrMDEwMDAw55qE5paH5a2XbGVuZ3Ro5bGe5oCn5LiN5YeG56Gu55qEYnVn77yM5aaCXCLwoK638KCut/CgrrdcIi5sZW5naHQgIT09IDNcbiAgICB2YWwgPSB2YWx1ZS5yZXBsYWNlKHNwUmVnZXhwLCAnXycpLmxlbmd0aDtcbiAgfVxuICBpZiAobGVuKSB7XG4gICAgaWYgKHZhbCAhPT0gcnVsZS5sZW4pIHtcbiAgICAgIGVycm9ycy5wdXNoKHV0aWwuZm9ybWF0KG9wdGlvbnMubWVzc2FnZXNba2V5XS5sZW4sIHJ1bGUuZnVsbEZpZWxkLCBydWxlLmxlbikpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChtaW4gJiYgIW1heCAmJiB2YWwgPCBydWxlLm1pbikge1xuICAgIGVycm9ycy5wdXNoKHV0aWwuZm9ybWF0KG9wdGlvbnMubWVzc2FnZXNba2V5XS5taW4sIHJ1bGUuZnVsbEZpZWxkLCBydWxlLm1pbikpO1xuICB9IGVsc2UgaWYgKG1heCAmJiAhbWluICYmIHZhbCA+IHJ1bGUubWF4KSB7XG4gICAgZXJyb3JzLnB1c2godXRpbC5mb3JtYXQob3B0aW9ucy5tZXNzYWdlc1trZXldLm1heCwgcnVsZS5mdWxsRmllbGQsIHJ1bGUubWF4KSk7XG4gIH0gZWxzZSBpZiAobWluICYmIG1heCAmJiAodmFsIDwgcnVsZS5taW4gfHwgdmFsID4gcnVsZS5tYXgpKSB7XG4gICAgZXJyb3JzLnB1c2godXRpbC5mb3JtYXQob3B0aW9ucy5tZXNzYWdlc1trZXldLnJhbmdlLCBydWxlLmZ1bGxGaWVsZCwgcnVsZS5taW4sIHJ1bGUubWF4KSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgcmFuZ2U7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/async-validator/es/rule/range.js\n");

/***/ }),

/***/ "./node_modules/async-validator/es/rule/required.js":
/*!**********************************************************!*\
  !*** ./node_modules/async-validator/es/rule/required.js ***!
  \**********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util */ \"./node_modules/async-validator/es/util.js\");\n\n\n/**\n *  Rule for validating required fields.\n *\n *  @param rule The validation rule.\n *  @param value The value of the field on the source object.\n *  @param source The source object being validated.\n *  @param errors An array of errors that this rule may add\n *  validation errors to.\n *  @param options The validation options.\n *  @param options.messages The validation messages.\n */\nfunction required(rule, value, source, errors, options, type) {\n  if (rule.required && (!source.hasOwnProperty(rule.field) || _util__WEBPACK_IMPORTED_MODULE_0__.isEmptyValue(value, type || rule.type))) {\n    errors.push(_util__WEBPACK_IMPORTED_MODULE_0__.format(options.messages.required, rule.fullField));\n  }\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (required);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXN5bmMtdmFsaWRhdG9yL2VzL3J1bGUvcmVxdWlyZWQuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBZ0M7O0FBRWhDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhEQUE4RCwrQ0FBaUI7QUFDL0UsZ0JBQWdCLHlDQUFXO0FBQzNCO0FBQ0E7O0FBRUEsaUVBQWUsUUFBUSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9hc3luYy12YWxpZGF0b3IvZXMvcnVsZS9yZXF1aXJlZC5qcz83Nzc1Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi4vdXRpbCc7XG5cbi8qKlxuICogIFJ1bGUgZm9yIHZhbGlkYXRpbmcgcmVxdWlyZWQgZmllbGRzLlxuICpcbiAqICBAcGFyYW0gcnVsZSBUaGUgdmFsaWRhdGlvbiBydWxlLlxuICogIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgb2YgdGhlIGZpZWxkIG9uIHRoZSBzb3VyY2Ugb2JqZWN0LlxuICogIEBwYXJhbSBzb3VyY2UgVGhlIHNvdXJjZSBvYmplY3QgYmVpbmcgdmFsaWRhdGVkLlxuICogIEBwYXJhbSBlcnJvcnMgQW4gYXJyYXkgb2YgZXJyb3JzIHRoYXQgdGhpcyBydWxlIG1heSBhZGRcbiAqICB2YWxpZGF0aW9uIGVycm9ycyB0by5cbiAqICBAcGFyYW0gb3B0aW9ucyBUaGUgdmFsaWRhdGlvbiBvcHRpb25zLlxuICogIEBwYXJhbSBvcHRpb25zLm1lc3NhZ2VzIFRoZSB2YWxpZGF0aW9uIG1lc3NhZ2VzLlxuICovXG5mdW5jdGlvbiByZXF1aXJlZChydWxlLCB2YWx1ZSwgc291cmNlLCBlcnJvcnMsIG9wdGlvbnMsIHR5cGUpIHtcbiAgaWYgKHJ1bGUucmVxdWlyZWQgJiYgKCFzb3VyY2UuaGFzT3duUHJvcGVydHkocnVsZS5maWVsZCkgfHwgdXRpbC5pc0VtcHR5VmFsdWUodmFsdWUsIHR5cGUgfHwgcnVsZS50eXBlKSkpIHtcbiAgICBlcnJvcnMucHVzaCh1dGlsLmZvcm1hdChvcHRpb25zLm1lc3NhZ2VzLnJlcXVpcmVkLCBydWxlLmZ1bGxGaWVsZCkpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHJlcXVpcmVkOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/async-validator/es/rule/required.js\n");

/***/ }),

/***/ "./node_modules/async-validator/es/rule/type.js":
/*!******************************************************!*\
  !*** ./node_modules/async-validator/es/rule/type.js ***!
  \******************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! babel-runtime/helpers/typeof */ \"./node_modules/babel-runtime/helpers/typeof.js\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util */ \"./node_modules/async-validator/es/util.js\");\n/* harmony import */ var _required__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./required */ \"./node_modules/async-validator/es/rule/required.js\");\n\n\n\n\n/* eslint max-len:0 */\n\nvar pattern = {\n  // http://emailregex.com/\n  email: /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/,\n  url: new RegExp('^(?!mailto:)(?:(?:http|https|ftp)://|//)(?:\\\\S+(?::\\\\S*)?@)?(?:(?:(?:[1-9]\\\\d?|1\\\\d\\\\d|2[01]\\\\d|22[0-3])(?:\\\\.(?:1?\\\\d{1,2}|2[0-4]\\\\d|25[0-5])){2}(?:\\\\.(?:[0-9]\\\\d?|1\\\\d\\\\d|2[0-4]\\\\d|25[0-4]))|(?:(?:[a-z\\\\u00a1-\\\\uffff0-9]+-?)*[a-z\\\\u00a1-\\\\uffff0-9]+)(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff0-9]+-?)*[a-z\\\\u00a1-\\\\uffff0-9]+)*(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff]{2,})))|localhost)(?::\\\\d{2,5})?(?:(/|\\\\?|#)[^\\\\s]*)?$', 'i'),\n  hex: /^#?([a-f0-9]{6}|[a-f0-9]{3})$/i\n};\n\nvar types = {\n  integer: function integer(value) {\n    return types.number(value) && parseInt(value, 10) === value;\n  },\n  float: function float(value) {\n    return types.number(value) && !types.integer(value);\n  },\n  array: function array(value) {\n    return Array.isArray(value);\n  },\n  regexp: function regexp(value) {\n    if (value instanceof RegExp) {\n      return true;\n    }\n    try {\n      return !!new RegExp(value);\n    } catch (e) {\n      return false;\n    }\n  },\n  date: function date(value) {\n    return typeof value.getTime === 'function' && typeof value.getMonth === 'function' && typeof value.getYear === 'function';\n  },\n  number: function number(value) {\n    if (isNaN(value)) {\n      return false;\n    }\n    return typeof value === 'number';\n  },\n  object: function object(value) {\n    return (typeof value === 'undefined' ? 'undefined' : (0,babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(value)) === 'object' && !types.array(value);\n  },\n  method: function method(value) {\n    return typeof value === 'function';\n  },\n  email: function email(value) {\n    return typeof value === 'string' && !!value.match(pattern.email) && value.length < 255;\n  },\n  url: function url(value) {\n    return typeof value === 'string' && !!value.match(pattern.url);\n  },\n  hex: function hex(value) {\n    return typeof value === 'string' && !!value.match(pattern.hex);\n  }\n};\n\n/**\n *  Rule for validating the type of a value.\n *\n *  @param rule The validation rule.\n *  @param value The value of the field on the source object.\n *  @param source The source object being validated.\n *  @param errors An array of errors that this rule may add\n *  validation errors to.\n *  @param options The validation options.\n *  @param options.messages The validation messages.\n */\nfunction type(rule, value, source, errors, options) {\n  if (rule.required && value === undefined) {\n    (0,_required__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(rule, value, source, errors, options);\n    return;\n  }\n  var custom = ['integer', 'float', 'array', 'regexp', 'object', 'method', 'email', 'number', 'date', 'url', 'hex'];\n  var ruleType = rule.type;\n  if (custom.indexOf(ruleType) > -1) {\n    if (!types[ruleType](value)) {\n      errors.push(_util__WEBPACK_IMPORTED_MODULE_1__.format(options.messages.types[ruleType], rule.fullField, rule.type));\n    }\n    // straight typeof check\n  } else if (ruleType && (typeof value === 'undefined' ? 'undefined' : (0,babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(value)) !== rule.type) {\n    errors.push(_util__WEBPACK_IMPORTED_MODULE_1__.format(options.messages.types[ruleType], rule.fullField, rule.type));\n  }\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (type);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXN5bmMtdmFsaWRhdG9yL2VzL3J1bGUvdHlwZS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQW1EO0FBQ25CO0FBQ0U7O0FBRWxDOztBQUVBO0FBQ0E7QUFDQSw0QkFBNEIseUJBQXlCLDZCQUE2QixJQUFJLFFBQVEsSUFBSSxRQUFRLElBQUksUUFBUSxJQUFJLGdDQUFnQyxHQUFHO0FBQzdKLDBJQUEwSSxJQUFJLHFCQUFxQixFQUFFLHVNQUF1TSxHQUFHLHNCQUFzQixJQUFJO0FBQ3pZLHFCQUFxQixFQUFFLFVBQVUsRUFBRTtBQUNuQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLHlEQUF5RCx3RUFBTztBQUNoRSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLHFEQUFRO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLHlDQUFXO0FBQzdCO0FBQ0E7QUFDQSxJQUFJLG1FQUFtRSx3RUFBTztBQUM5RSxnQkFBZ0IseUNBQVc7QUFDM0I7QUFDQTs7QUFFQSxpRUFBZSxJQUFJIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FzeW5jLXZhbGlkYXRvci9lcy9ydWxlL3R5cGUuanM/MzJiZiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgX3R5cGVvZiBmcm9tICdiYWJlbC1ydW50aW1lL2hlbHBlcnMvdHlwZW9mJztcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi4vdXRpbCc7XG5pbXBvcnQgcmVxdWlyZWQgZnJvbSAnLi9yZXF1aXJlZCc7XG5cbi8qIGVzbGludCBtYXgtbGVuOjAgKi9cblxudmFyIHBhdHRlcm4gPSB7XG4gIC8vIGh0dHA6Ly9lbWFpbHJlZ2V4LmNvbS9cbiAgZW1haWw6IC9eKChbXjw+KClcXFtcXF1cXFxcLiw7Olxcc0BcIl0rKFxcLltePD4oKVxcW1xcXVxcXFwuLDs6XFxzQFwiXSspKil8KFwiLitcIikpQCgoXFxbWzAtOV17MSwzfVxcLlswLTldezEsM31cXC5bMC05XXsxLDN9XFwuWzAtOV17MSwzfV0pfCgoW2EtekEtWlxcLTAtOV0rXFwuKStbYS16QS1aXXsyLH0pKSQvLFxuICB1cmw6IG5ldyBSZWdFeHAoJ14oPyFtYWlsdG86KSg/Oig/Omh0dHB8aHR0cHN8ZnRwKTovL3wvLykoPzpcXFxcUysoPzo6XFxcXFMqKT9AKT8oPzooPzooPzpbMS05XVxcXFxkP3wxXFxcXGRcXFxcZHwyWzAxXVxcXFxkfDIyWzAtM10pKD86XFxcXC4oPzoxP1xcXFxkezEsMn18MlswLTRdXFxcXGR8MjVbMC01XSkpezJ9KD86XFxcXC4oPzpbMC05XVxcXFxkP3wxXFxcXGRcXFxcZHwyWzAtNF1cXFxcZHwyNVswLTRdKSl8KD86KD86W2EtelxcXFx1MDBhMS1cXFxcdWZmZmYwLTldKy0/KSpbYS16XFxcXHUwMGExLVxcXFx1ZmZmZjAtOV0rKSg/OlxcXFwuKD86W2EtelxcXFx1MDBhMS1cXFxcdWZmZmYwLTldKy0/KSpbYS16XFxcXHUwMGExLVxcXFx1ZmZmZjAtOV0rKSooPzpcXFxcLig/OlthLXpcXFxcdTAwYTEtXFxcXHVmZmZmXXsyLH0pKSl8bG9jYWxob3N0KSg/OjpcXFxcZHsyLDV9KT8oPzooL3xcXFxcP3wjKVteXFxcXHNdKik/JCcsICdpJyksXG4gIGhleDogL14jPyhbYS1mMC05XXs2fXxbYS1mMC05XXszfSkkL2lcbn07XG5cbnZhciB0eXBlcyA9IHtcbiAgaW50ZWdlcjogZnVuY3Rpb24gaW50ZWdlcih2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlcy5udW1iZXIodmFsdWUpICYmIHBhcnNlSW50KHZhbHVlLCAxMCkgPT09IHZhbHVlO1xuICB9LFxuICBmbG9hdDogZnVuY3Rpb24gZmxvYXQodmFsdWUpIHtcbiAgICByZXR1cm4gdHlwZXMubnVtYmVyKHZhbHVlKSAmJiAhdHlwZXMuaW50ZWdlcih2YWx1ZSk7XG4gIH0sXG4gIGFycmF5OiBmdW5jdGlvbiBhcnJheSh2YWx1ZSkge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKTtcbiAgfSxcbiAgcmVnZXhwOiBmdW5jdGlvbiByZWdleHAodmFsdWUpIHtcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgcmV0dXJuICEhbmV3IFJlZ0V4cCh2YWx1ZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSxcbiAgZGF0ZTogZnVuY3Rpb24gZGF0ZSh2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUuZ2V0VGltZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgdmFsdWUuZ2V0TW9udGggPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbHVlLmdldFllYXIgPT09ICdmdW5jdGlvbic7XG4gIH0sXG4gIG51bWJlcjogZnVuY3Rpb24gbnVtYmVyKHZhbHVlKSB7XG4gICAgaWYgKGlzTmFOKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJztcbiAgfSxcbiAgb2JqZWN0OiBmdW5jdGlvbiBvYmplY3QodmFsdWUpIHtcbiAgICByZXR1cm4gKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcgPyAndW5kZWZpbmVkJyA6IF90eXBlb2YodmFsdWUpKSA9PT0gJ29iamVjdCcgJiYgIXR5cGVzLmFycmF5KHZhbHVlKTtcbiAgfSxcbiAgbWV0aG9kOiBmdW5jdGlvbiBtZXRob2QodmFsdWUpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nO1xuICB9LFxuICBlbWFpbDogZnVuY3Rpb24gZW1haWwodmFsdWUpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiAhIXZhbHVlLm1hdGNoKHBhdHRlcm4uZW1haWwpICYmIHZhbHVlLmxlbmd0aCA8IDI1NTtcbiAgfSxcbiAgdXJsOiBmdW5jdGlvbiB1cmwodmFsdWUpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiAhIXZhbHVlLm1hdGNoKHBhdHRlcm4udXJsKTtcbiAgfSxcbiAgaGV4OiBmdW5jdGlvbiBoZXgodmFsdWUpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiAhIXZhbHVlLm1hdGNoKHBhdHRlcm4uaGV4KTtcbiAgfVxufTtcblxuLyoqXG4gKiAgUnVsZSBmb3IgdmFsaWRhdGluZyB0aGUgdHlwZSBvZiBhIHZhbHVlLlxuICpcbiAqICBAcGFyYW0gcnVsZSBUaGUgdmFsaWRhdGlvbiBydWxlLlxuICogIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgb2YgdGhlIGZpZWxkIG9uIHRoZSBzb3VyY2Ugb2JqZWN0LlxuICogIEBwYXJhbSBzb3VyY2UgVGhlIHNvdXJjZSBvYmplY3QgYmVpbmcgdmFsaWRhdGVkLlxuICogIEBwYXJhbSBlcnJvcnMgQW4gYXJyYXkgb2YgZXJyb3JzIHRoYXQgdGhpcyBydWxlIG1heSBhZGRcbiAqICB2YWxpZGF0aW9uIGVycm9ycyB0by5cbiAqICBAcGFyYW0gb3B0aW9ucyBUaGUgdmFsaWRhdGlvbiBvcHRpb25zLlxuICogIEBwYXJhbSBvcHRpb25zLm1lc3NhZ2VzIFRoZSB2YWxpZGF0aW9uIG1lc3NhZ2VzLlxuICovXG5mdW5jdGlvbiB0eXBlKHJ1bGUsIHZhbHVlLCBzb3VyY2UsIGVycm9ycywgb3B0aW9ucykge1xuICBpZiAocnVsZS5yZXF1aXJlZCAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmVxdWlyZWQocnVsZSwgdmFsdWUsIHNvdXJjZSwgZXJyb3JzLCBvcHRpb25zKTtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIGN1c3RvbSA9IFsnaW50ZWdlcicsICdmbG9hdCcsICdhcnJheScsICdyZWdleHAnLCAnb2JqZWN0JywgJ21ldGhvZCcsICdlbWFpbCcsICdudW1iZXInLCAnZGF0ZScsICd1cmwnLCAnaGV4J107XG4gIHZhciBydWxlVHlwZSA9IHJ1bGUudHlwZTtcbiAgaWYgKGN1c3RvbS5pbmRleE9mKHJ1bGVUeXBlKSA+IC0xKSB7XG4gICAgaWYgKCF0eXBlc1tydWxlVHlwZV0odmFsdWUpKSB7XG4gICAgICBlcnJvcnMucHVzaCh1dGlsLmZvcm1hdChvcHRpb25zLm1lc3NhZ2VzLnR5cGVzW3J1bGVUeXBlXSwgcnVsZS5mdWxsRmllbGQsIHJ1bGUudHlwZSkpO1xuICAgIH1cbiAgICAvLyBzdHJhaWdodCB0eXBlb2YgY2hlY2tcbiAgfSBlbHNlIGlmIChydWxlVHlwZSAmJiAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJyA/ICd1bmRlZmluZWQnIDogX3R5cGVvZih2YWx1ZSkpICE9PSBydWxlLnR5cGUpIHtcbiAgICBlcnJvcnMucHVzaCh1dGlsLmZvcm1hdChvcHRpb25zLm1lc3NhZ2VzLnR5cGVzW3J1bGVUeXBlXSwgcnVsZS5mdWxsRmllbGQsIHJ1bGUudHlwZSkpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHR5cGU7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/async-validator/es/rule/type.js\n");

/***/ }),

/***/ "./node_modules/async-validator/es/rule/whitespace.js":
/*!************************************************************!*\
  !*** ./node_modules/async-validator/es/rule/whitespace.js ***!
  \************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util */ \"./node_modules/async-validator/es/util.js\");\n\n\n/**\n *  Rule for validating whitespace.\n *\n *  @param rule The validation rule.\n *  @param value The value of the field on the source object.\n *  @param source The source object being validated.\n *  @param errors An array of errors that this rule may add\n *  validation errors to.\n *  @param options The validation options.\n *  @param options.messages The validation messages.\n */\nfunction whitespace(rule, value, source, errors, options) {\n  if (/^\\s+$/.test(value) || value === '') {\n    errors.push(_util__WEBPACK_IMPORTED_MODULE_0__.format(options.messages.whitespace, rule.fullField));\n  }\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (whitespace);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXN5bmMtdmFsaWRhdG9yL2VzL3J1bGUvd2hpdGVzcGFjZS5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFnQzs7QUFFaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IseUNBQVc7QUFDM0I7QUFDQTs7QUFFQSxpRUFBZSxVQUFVIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FzeW5jLXZhbGlkYXRvci9lcy9ydWxlL3doaXRlc3BhY2UuanM/NjBjNiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4uL3V0aWwnO1xuXG4vKipcbiAqICBSdWxlIGZvciB2YWxpZGF0aW5nIHdoaXRlc3BhY2UuXG4gKlxuICogIEBwYXJhbSBydWxlIFRoZSB2YWxpZGF0aW9uIHJ1bGUuXG4gKiAgQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgZmllbGQgb24gdGhlIHNvdXJjZSBvYmplY3QuXG4gKiAgQHBhcmFtIHNvdXJjZSBUaGUgc291cmNlIG9iamVjdCBiZWluZyB2YWxpZGF0ZWQuXG4gKiAgQHBhcmFtIGVycm9ycyBBbiBhcnJheSBvZiBlcnJvcnMgdGhhdCB0aGlzIHJ1bGUgbWF5IGFkZFxuICogIHZhbGlkYXRpb24gZXJyb3JzIHRvLlxuICogIEBwYXJhbSBvcHRpb25zIFRoZSB2YWxpZGF0aW9uIG9wdGlvbnMuXG4gKiAgQHBhcmFtIG9wdGlvbnMubWVzc2FnZXMgVGhlIHZhbGlkYXRpb24gbWVzc2FnZXMuXG4gKi9cbmZ1bmN0aW9uIHdoaXRlc3BhY2UocnVsZSwgdmFsdWUsIHNvdXJjZSwgZXJyb3JzLCBvcHRpb25zKSB7XG4gIGlmICgvXlxccyskLy50ZXN0KHZhbHVlKSB8fCB2YWx1ZSA9PT0gJycpIHtcbiAgICBlcnJvcnMucHVzaCh1dGlsLmZvcm1hdChvcHRpb25zLm1lc3NhZ2VzLndoaXRlc3BhY2UsIHJ1bGUuZnVsbEZpZWxkKSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgd2hpdGVzcGFjZTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/async-validator/es/rule/whitespace.js\n");

/***/ }),

/***/ "./node_modules/async-validator/es/util.js":
/*!*************************************************!*\
  !*** ./node_modules/async-validator/es/util.js ***!
  \*************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   asyncMap: () => (/* binding */ asyncMap),\n/* harmony export */   complementError: () => (/* binding */ complementError),\n/* harmony export */   deepMerge: () => (/* binding */ deepMerge),\n/* harmony export */   format: () => (/* binding */ format),\n/* harmony export */   isEmptyObject: () => (/* binding */ isEmptyObject),\n/* harmony export */   isEmptyValue: () => (/* binding */ isEmptyValue),\n/* harmony export */   warning: () => (/* binding */ warning)\n/* harmony export */ });\n/* harmony import */ var babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! babel-runtime/helpers/extends */ \"./node_modules/babel-runtime/helpers/extends.js\");\n/* harmony import */ var babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babel-runtime/helpers/typeof */ \"./node_modules/babel-runtime/helpers/typeof.js\");\n\n\nvar formatRegExp = /%[sdj%]/g;\n\nvar warning = function warning() {};\n\n// don't print warning message when in production env or node runtime\nif ( true && typeof window !== 'undefined' && typeof document !== 'undefined') {\n  warning = function warning(type, errors) {\n    if (typeof console !== 'undefined' && console.warn) {\n      if (errors.every(function (e) {\n        return typeof e === 'string';\n      })) {\n        console.warn(type, errors);\n      }\n    }\n  };\n}\n\nfunction format() {\n  for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n\n  var i = 1;\n  var f = args[0];\n  var len = args.length;\n  if (typeof f === 'function') {\n    return f.apply(null, args.slice(1));\n  }\n  if (typeof f === 'string') {\n    var str = String(f).replace(formatRegExp, function (x) {\n      if (x === '%%') {\n        return '%';\n      }\n      if (i >= len) {\n        return x;\n      }\n      switch (x) {\n        case '%s':\n          return String(args[i++]);\n        case '%d':\n          return Number(args[i++]);\n        case '%j':\n          try {\n            return JSON.stringify(args[i++]);\n          } catch (_) {\n            return '[Circular]';\n          }\n          break;\n        default:\n          return x;\n      }\n    });\n    for (var arg = args[i]; i < len; arg = args[++i]) {\n      str += ' ' + arg;\n    }\n    return str;\n  }\n  return f;\n}\n\nfunction isNativeStringType(type) {\n  return type === 'string' || type === 'url' || type === 'hex' || type === 'email' || type === 'pattern';\n}\n\nfunction isEmptyValue(value, type) {\n  if (value === undefined || value === null) {\n    return true;\n  }\n  if (type === 'array' && Array.isArray(value) && !value.length) {\n    return true;\n  }\n  if (isNativeStringType(type) && typeof value === 'string' && !value) {\n    return true;\n  }\n  return false;\n}\n\nfunction isEmptyObject(obj) {\n  return Object.keys(obj).length === 0;\n}\n\nfunction asyncParallelArray(arr, func, callback) {\n  var results = [];\n  var total = 0;\n  var arrLength = arr.length;\n\n  function count(errors) {\n    results.push.apply(results, errors);\n    total++;\n    if (total === arrLength) {\n      callback(results);\n    }\n  }\n\n  arr.forEach(function (a) {\n    func(a, count);\n  });\n}\n\nfunction asyncSerialArray(arr, func, callback) {\n  var index = 0;\n  var arrLength = arr.length;\n\n  function next(errors) {\n    if (errors && errors.length) {\n      callback(errors);\n      return;\n    }\n    var original = index;\n    index = index + 1;\n    if (original < arrLength) {\n      func(arr[original], next);\n    } else {\n      callback([]);\n    }\n  }\n\n  next([]);\n}\n\nfunction flattenObjArr(objArr) {\n  var ret = [];\n  Object.keys(objArr).forEach(function (k) {\n    ret.push.apply(ret, objArr[k]);\n  });\n  return ret;\n}\n\nfunction asyncMap(objArr, option, func, callback) {\n  if (option.first) {\n    var flattenArr = flattenObjArr(objArr);\n    return asyncSerialArray(flattenArr, func, callback);\n  }\n  var firstFields = option.firstFields || [];\n  if (firstFields === true) {\n    firstFields = Object.keys(objArr);\n  }\n  var objArrKeys = Object.keys(objArr);\n  var objArrLength = objArrKeys.length;\n  var total = 0;\n  var results = [];\n  var next = function next(errors) {\n    results.push.apply(results, errors);\n    total++;\n    if (total === objArrLength) {\n      callback(results);\n    }\n  };\n  objArrKeys.forEach(function (key) {\n    var arr = objArr[key];\n    if (firstFields.indexOf(key) !== -1) {\n      asyncSerialArray(arr, func, next);\n    } else {\n      asyncParallelArray(arr, func, next);\n    }\n  });\n}\n\nfunction complementError(rule) {\n  return function (oe) {\n    if (oe && oe.message) {\n      oe.field = oe.field || rule.fullField;\n      return oe;\n    }\n    return {\n      message: oe,\n      field: oe.field || rule.fullField\n    };\n  };\n}\n\nfunction deepMerge(target, source) {\n  if (source) {\n    for (var s in source) {\n      if (source.hasOwnProperty(s)) {\n        var value = source[s];\n        if ((typeof value === 'undefined' ? 'undefined' : (0,babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(value)) === 'object' && (0,babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(target[s]) === 'object') {\n          target[s] = (0,babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, target[s], value);\n        } else {\n          target[s] = value;\n        }\n      }\n    }\n  }\n  return target;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXN5bmMtdmFsaWRhdG9yL2VzL3V0aWwuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQXFEO0FBQ0Y7QUFDbkQ7O0FBRU87O0FBRVA7QUFDQSxJQUFJLEtBQXFDO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRU87QUFDUCxrRUFBa0UsYUFBYTtBQUMvRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCw0QkFBNEIsU0FBUztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwREFBMEQsd0VBQU8seUJBQXlCLHdFQUFPO0FBQ2pHLHNCQUFzQix5RUFBUSxHQUFHO0FBQ2pDLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9hc3luYy12YWxpZGF0b3IvZXMvdXRpbC5qcz8zM2E3Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfZXh0ZW5kcyBmcm9tICdiYWJlbC1ydW50aW1lL2hlbHBlcnMvZXh0ZW5kcyc7XG5pbXBvcnQgX3R5cGVvZiBmcm9tICdiYWJlbC1ydW50aW1lL2hlbHBlcnMvdHlwZW9mJztcbnZhciBmb3JtYXRSZWdFeHAgPSAvJVtzZGolXS9nO1xuXG5leHBvcnQgdmFyIHdhcm5pbmcgPSBmdW5jdGlvbiB3YXJuaW5nKCkge307XG5cbi8vIGRvbid0IHByaW50IHdhcm5pbmcgbWVzc2FnZSB3aGVuIGluIHByb2R1Y3Rpb24gZW52IG9yIG5vZGUgcnVudGltZVxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJykge1xuICB3YXJuaW5nID0gZnVuY3Rpb24gd2FybmluZyh0eXBlLCBlcnJvcnMpIHtcbiAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmIGNvbnNvbGUud2Fybikge1xuICAgICAgaWYgKGVycm9ycy5ldmVyeShmdW5jdGlvbiAoZSkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIGUgPT09ICdzdHJpbmcnO1xuICAgICAgfSkpIHtcbiAgICAgICAgY29uc29sZS53YXJuKHR5cGUsIGVycm9ycyk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0KCkge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICB2YXIgaSA9IDE7XG4gIHZhciBmID0gYXJnc1swXTtcbiAgdmFyIGxlbiA9IGFyZ3MubGVuZ3RoO1xuICBpZiAodHlwZW9mIGYgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZi5hcHBseShudWxsLCBhcmdzLnNsaWNlKDEpKTtcbiAgfVxuICBpZiAodHlwZW9mIGYgPT09ICdzdHJpbmcnKSB7XG4gICAgdmFyIHN0ciA9IFN0cmluZyhmKS5yZXBsYWNlKGZvcm1hdFJlZ0V4cCwgZnVuY3Rpb24gKHgpIHtcbiAgICAgIGlmICh4ID09PSAnJSUnKSB7XG4gICAgICAgIHJldHVybiAnJSc7XG4gICAgICB9XG4gICAgICBpZiAoaSA+PSBsZW4pIHtcbiAgICAgICAgcmV0dXJuIHg7XG4gICAgICB9XG4gICAgICBzd2l0Y2ggKHgpIHtcbiAgICAgICAgY2FzZSAnJXMnOlxuICAgICAgICAgIHJldHVybiBTdHJpbmcoYXJnc1tpKytdKTtcbiAgICAgICAgY2FzZSAnJWQnOlxuICAgICAgICAgIHJldHVybiBOdW1iZXIoYXJnc1tpKytdKTtcbiAgICAgICAgY2FzZSAnJWonOlxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoYXJnc1tpKytdKTtcbiAgICAgICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgICAgICByZXR1cm4gJ1tDaXJjdWxhcl0nO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4geDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBmb3IgKHZhciBhcmcgPSBhcmdzW2ldOyBpIDwgbGVuOyBhcmcgPSBhcmdzWysraV0pIHtcbiAgICAgIHN0ciArPSAnICcgKyBhcmc7XG4gICAgfVxuICAgIHJldHVybiBzdHI7XG4gIH1cbiAgcmV0dXJuIGY7XG59XG5cbmZ1bmN0aW9uIGlzTmF0aXZlU3RyaW5nVHlwZSh0eXBlKSB7XG4gIHJldHVybiB0eXBlID09PSAnc3RyaW5nJyB8fCB0eXBlID09PSAndXJsJyB8fCB0eXBlID09PSAnaGV4JyB8fCB0eXBlID09PSAnZW1haWwnIHx8IHR5cGUgPT09ICdwYXR0ZXJuJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRW1wdHlWYWx1ZSh2YWx1ZSwgdHlwZSkge1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmICh0eXBlID09PSAnYXJyYXknICYmIEFycmF5LmlzQXJyYXkodmFsdWUpICYmICF2YWx1ZS5sZW5ndGgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoaXNOYXRpdmVTdHJpbmdUeXBlKHR5cGUpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgIXZhbHVlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNFbXB0eU9iamVjdChvYmopIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaikubGVuZ3RoID09PSAwO1xufVxuXG5mdW5jdGlvbiBhc3luY1BhcmFsbGVsQXJyYXkoYXJyLCBmdW5jLCBjYWxsYmFjaykge1xuICB2YXIgcmVzdWx0cyA9IFtdO1xuICB2YXIgdG90YWwgPSAwO1xuICB2YXIgYXJyTGVuZ3RoID0gYXJyLmxlbmd0aDtcblxuICBmdW5jdGlvbiBjb3VudChlcnJvcnMpIHtcbiAgICByZXN1bHRzLnB1c2guYXBwbHkocmVzdWx0cywgZXJyb3JzKTtcbiAgICB0b3RhbCsrO1xuICAgIGlmICh0b3RhbCA9PT0gYXJyTGVuZ3RoKSB7XG4gICAgICBjYWxsYmFjayhyZXN1bHRzKTtcbiAgICB9XG4gIH1cblxuICBhcnIuZm9yRWFjaChmdW5jdGlvbiAoYSkge1xuICAgIGZ1bmMoYSwgY291bnQpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gYXN5bmNTZXJpYWxBcnJheShhcnIsIGZ1bmMsIGNhbGxiYWNrKSB7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBhcnJMZW5ndGggPSBhcnIubGVuZ3RoO1xuXG4gIGZ1bmN0aW9uIG5leHQoZXJyb3JzKSB7XG4gICAgaWYgKGVycm9ycyAmJiBlcnJvcnMubGVuZ3RoKSB7XG4gICAgICBjYWxsYmFjayhlcnJvcnMpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgb3JpZ2luYWwgPSBpbmRleDtcbiAgICBpbmRleCA9IGluZGV4ICsgMTtcbiAgICBpZiAob3JpZ2luYWwgPCBhcnJMZW5ndGgpIHtcbiAgICAgIGZ1bmMoYXJyW29yaWdpbmFsXSwgbmV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhbGxiYWNrKFtdKTtcbiAgICB9XG4gIH1cblxuICBuZXh0KFtdKTtcbn1cblxuZnVuY3Rpb24gZmxhdHRlbk9iakFycihvYmpBcnIpIHtcbiAgdmFyIHJldCA9IFtdO1xuICBPYmplY3Qua2V5cyhvYmpBcnIpLmZvckVhY2goZnVuY3Rpb24gKGspIHtcbiAgICByZXQucHVzaC5hcHBseShyZXQsIG9iakFycltrXSk7XG4gIH0pO1xuICByZXR1cm4gcmV0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXN5bmNNYXAob2JqQXJyLCBvcHRpb24sIGZ1bmMsIGNhbGxiYWNrKSB7XG4gIGlmIChvcHRpb24uZmlyc3QpIHtcbiAgICB2YXIgZmxhdHRlbkFyciA9IGZsYXR0ZW5PYmpBcnIob2JqQXJyKTtcbiAgICByZXR1cm4gYXN5bmNTZXJpYWxBcnJheShmbGF0dGVuQXJyLCBmdW5jLCBjYWxsYmFjayk7XG4gIH1cbiAgdmFyIGZpcnN0RmllbGRzID0gb3B0aW9uLmZpcnN0RmllbGRzIHx8IFtdO1xuICBpZiAoZmlyc3RGaWVsZHMgPT09IHRydWUpIHtcbiAgICBmaXJzdEZpZWxkcyA9IE9iamVjdC5rZXlzKG9iakFycik7XG4gIH1cbiAgdmFyIG9iakFycktleXMgPSBPYmplY3Qua2V5cyhvYmpBcnIpO1xuICB2YXIgb2JqQXJyTGVuZ3RoID0gb2JqQXJyS2V5cy5sZW5ndGg7XG4gIHZhciB0b3RhbCA9IDA7XG4gIHZhciByZXN1bHRzID0gW107XG4gIHZhciBuZXh0ID0gZnVuY3Rpb24gbmV4dChlcnJvcnMpIHtcbiAgICByZXN1bHRzLnB1c2guYXBwbHkocmVzdWx0cywgZXJyb3JzKTtcbiAgICB0b3RhbCsrO1xuICAgIGlmICh0b3RhbCA9PT0gb2JqQXJyTGVuZ3RoKSB7XG4gICAgICBjYWxsYmFjayhyZXN1bHRzKTtcbiAgICB9XG4gIH07XG4gIG9iakFycktleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIGFyciA9IG9iakFycltrZXldO1xuICAgIGlmIChmaXJzdEZpZWxkcy5pbmRleE9mKGtleSkgIT09IC0xKSB7XG4gICAgICBhc3luY1NlcmlhbEFycmF5KGFyciwgZnVuYywgbmV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFzeW5jUGFyYWxsZWxBcnJheShhcnIsIGZ1bmMsIG5leHQpO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wbGVtZW50RXJyb3IocnVsZSkge1xuICByZXR1cm4gZnVuY3Rpb24gKG9lKSB7XG4gICAgaWYgKG9lICYmIG9lLm1lc3NhZ2UpIHtcbiAgICAgIG9lLmZpZWxkID0gb2UuZmllbGQgfHwgcnVsZS5mdWxsRmllbGQ7XG4gICAgICByZXR1cm4gb2U7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBtZXNzYWdlOiBvZSxcbiAgICAgIGZpZWxkOiBvZS5maWVsZCB8fCBydWxlLmZ1bGxGaWVsZFxuICAgIH07XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWVwTWVyZ2UodGFyZ2V0LCBzb3VyY2UpIHtcbiAgaWYgKHNvdXJjZSkge1xuICAgIGZvciAodmFyIHMgaW4gc291cmNlKSB7XG4gICAgICBpZiAoc291cmNlLmhhc093blByb3BlcnR5KHMpKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IHNvdXJjZVtzXTtcbiAgICAgICAgaWYgKCh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnID8gJ3VuZGVmaW5lZCcgOiBfdHlwZW9mKHZhbHVlKSkgPT09ICdvYmplY3QnICYmIF90eXBlb2YodGFyZ2V0W3NdKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICB0YXJnZXRbc10gPSBfZXh0ZW5kcyh7fSwgdGFyZ2V0W3NdLCB2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGFyZ2V0W3NdID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRhcmdldDtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/async-validator/es/util.js\n");

/***/ }),

/***/ "./node_modules/async-validator/es/validator/array.js":
/*!************************************************************!*\
  !*** ./node_modules/async-validator/es/validator/array.js ***!
  \************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _rule___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../rule/ */ \"./node_modules/async-validator/es/rule/index.js\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util */ \"./node_modules/async-validator/es/util.js\");\n\n\n/**\n *  Validates an array.\n *\n *  @param rule The validation rule.\n *  @param value The value of the field on the source object.\n *  @param callback The callback function.\n *  @param source The source object being validated.\n *  @param options The validation options.\n *  @param options.messages The validation messages.\n */\nfunction array(rule, value, callback, source, options) {\n  var errors = [];\n  var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n  if (validate) {\n    if ((0,_util__WEBPACK_IMPORTED_MODULE_1__.isEmptyValue)(value, 'array') && !rule.required) {\n      return callback();\n    }\n    _rule___WEBPACK_IMPORTED_MODULE_0__[\"default\"].required(rule, value, source, errors, options, 'array');\n    if (!(0,_util__WEBPACK_IMPORTED_MODULE_1__.isEmptyValue)(value, 'array')) {\n      _rule___WEBPACK_IMPORTED_MODULE_0__[\"default\"].type(rule, value, source, errors, options);\n      _rule___WEBPACK_IMPORTED_MODULE_0__[\"default\"].range(rule, value, source, errors, options);\n    }\n  }\n  callback(errors);\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (array);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXN5bmMtdmFsaWRhdG9yL2VzL3ZhbGlkYXRvci9hcnJheS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBNkI7QUFDVTtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxtREFBWTtBQUNwQjtBQUNBO0FBQ0EsSUFBSSw4Q0FBSztBQUNULFNBQVMsbURBQVk7QUFDckIsTUFBTSw4Q0FBSztBQUNYLE1BQU0sOENBQUs7QUFDWDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpRUFBZSxLQUFLIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FzeW5jLXZhbGlkYXRvci9lcy92YWxpZGF0b3IvYXJyYXkuanM/NzVkNSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcnVsZXMgZnJvbSAnLi4vcnVsZS8nO1xuaW1wb3J0IHsgaXNFbXB0eVZhbHVlIH0gZnJvbSAnLi4vdXRpbCc7XG4vKipcbiAqICBWYWxpZGF0ZXMgYW4gYXJyYXkuXG4gKlxuICogIEBwYXJhbSBydWxlIFRoZSB2YWxpZGF0aW9uIHJ1bGUuXG4gKiAgQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgZmllbGQgb24gdGhlIHNvdXJjZSBvYmplY3QuXG4gKiAgQHBhcmFtIGNhbGxiYWNrIFRoZSBjYWxsYmFjayBmdW5jdGlvbi5cbiAqICBAcGFyYW0gc291cmNlIFRoZSBzb3VyY2Ugb2JqZWN0IGJlaW5nIHZhbGlkYXRlZC5cbiAqICBAcGFyYW0gb3B0aW9ucyBUaGUgdmFsaWRhdGlvbiBvcHRpb25zLlxuICogIEBwYXJhbSBvcHRpb25zLm1lc3NhZ2VzIFRoZSB2YWxpZGF0aW9uIG1lc3NhZ2VzLlxuICovXG5mdW5jdGlvbiBhcnJheShydWxlLCB2YWx1ZSwgY2FsbGJhY2ssIHNvdXJjZSwgb3B0aW9ucykge1xuICB2YXIgZXJyb3JzID0gW107XG4gIHZhciB2YWxpZGF0ZSA9IHJ1bGUucmVxdWlyZWQgfHwgIXJ1bGUucmVxdWlyZWQgJiYgc291cmNlLmhhc093blByb3BlcnR5KHJ1bGUuZmllbGQpO1xuICBpZiAodmFsaWRhdGUpIHtcbiAgICBpZiAoaXNFbXB0eVZhbHVlKHZhbHVlLCAnYXJyYXknKSAmJiAhcnVsZS5yZXF1aXJlZCkge1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgfVxuICAgIHJ1bGVzLnJlcXVpcmVkKHJ1bGUsIHZhbHVlLCBzb3VyY2UsIGVycm9ycywgb3B0aW9ucywgJ2FycmF5Jyk7XG4gICAgaWYgKCFpc0VtcHR5VmFsdWUodmFsdWUsICdhcnJheScpKSB7XG4gICAgICBydWxlcy50eXBlKHJ1bGUsIHZhbHVlLCBzb3VyY2UsIGVycm9ycywgb3B0aW9ucyk7XG4gICAgICBydWxlcy5yYW5nZShydWxlLCB2YWx1ZSwgc291cmNlLCBlcnJvcnMsIG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuICBjYWxsYmFjayhlcnJvcnMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBhcnJheTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/async-validator/es/validator/array.js\n");

/***/ }),

/***/ "./node_modules/async-validator/es/validator/boolean.js":
/*!**************************************************************!*\
  !*** ./node_modules/async-validator/es/validator/boolean.js ***!
  \**************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util */ \"./node_modules/async-validator/es/util.js\");\n/* harmony import */ var _rule___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../rule/ */ \"./node_modules/async-validator/es/rule/index.js\");\n\n\n\n/**\n *  Validates a boolean.\n *\n *  @param rule The validation rule.\n *  @param value The value of the field on the source object.\n *  @param callback The callback function.\n *  @param source The source object being validated.\n *  @param options The validation options.\n *  @param options.messages The validation messages.\n */\nfunction boolean(rule, value, callback, source, options) {\n  var errors = [];\n  var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n  if (validate) {\n    if ((0,_util__WEBPACK_IMPORTED_MODULE_0__.isEmptyValue)(value) && !rule.required) {\n      return callback();\n    }\n    _rule___WEBPACK_IMPORTED_MODULE_1__[\"default\"].required(rule, value, source, errors, options);\n    if (value !== undefined) {\n      _rule___WEBPACK_IMPORTED_MODULE_1__[\"default\"].type(rule, value, source, errors, options);\n    }\n  }\n  callback(errors);\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (boolean);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXN5bmMtdmFsaWRhdG9yL2VzL3ZhbGlkYXRvci9ib29sZWFuLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUF1QztBQUNWOztBQUU3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxtREFBWTtBQUNwQjtBQUNBO0FBQ0EsSUFBSSw4Q0FBSztBQUNUO0FBQ0EsTUFBTSw4Q0FBSztBQUNYO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlFQUFlLE9BQU8iLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXN5bmMtdmFsaWRhdG9yL2VzL3ZhbGlkYXRvci9ib29sZWFuLmpzP2E1OTkiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNFbXB0eVZhbHVlIH0gZnJvbSAnLi4vdXRpbCc7XG5pbXBvcnQgcnVsZXMgZnJvbSAnLi4vcnVsZS8nO1xuXG4vKipcbiAqICBWYWxpZGF0ZXMgYSBib29sZWFuLlxuICpcbiAqICBAcGFyYW0gcnVsZSBUaGUgdmFsaWRhdGlvbiBydWxlLlxuICogIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgb2YgdGhlIGZpZWxkIG9uIHRoZSBzb3VyY2Ugb2JqZWN0LlxuICogIEBwYXJhbSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgZnVuY3Rpb24uXG4gKiAgQHBhcmFtIHNvdXJjZSBUaGUgc291cmNlIG9iamVjdCBiZWluZyB2YWxpZGF0ZWQuXG4gKiAgQHBhcmFtIG9wdGlvbnMgVGhlIHZhbGlkYXRpb24gb3B0aW9ucy5cbiAqICBAcGFyYW0gb3B0aW9ucy5tZXNzYWdlcyBUaGUgdmFsaWRhdGlvbiBtZXNzYWdlcy5cbiAqL1xuZnVuY3Rpb24gYm9vbGVhbihydWxlLCB2YWx1ZSwgY2FsbGJhY2ssIHNvdXJjZSwgb3B0aW9ucykge1xuICB2YXIgZXJyb3JzID0gW107XG4gIHZhciB2YWxpZGF0ZSA9IHJ1bGUucmVxdWlyZWQgfHwgIXJ1bGUucmVxdWlyZWQgJiYgc291cmNlLmhhc093blByb3BlcnR5KHJ1bGUuZmllbGQpO1xuICBpZiAodmFsaWRhdGUpIHtcbiAgICBpZiAoaXNFbXB0eVZhbHVlKHZhbHVlKSAmJiAhcnVsZS5yZXF1aXJlZCkge1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgfVxuICAgIHJ1bGVzLnJlcXVpcmVkKHJ1bGUsIHZhbHVlLCBzb3VyY2UsIGVycm9ycywgb3B0aW9ucyk7XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJ1bGVzLnR5cGUocnVsZSwgdmFsdWUsIHNvdXJjZSwgZXJyb3JzLCBvcHRpb25zKTtcbiAgICB9XG4gIH1cbiAgY2FsbGJhY2soZXJyb3JzKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYm9vbGVhbjsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/async-validator/es/validator/boolean.js\n");

/***/ }),

/***/ "./node_modules/async-validator/es/validator/date.js":
/*!***********************************************************!*\
  !*** ./node_modules/async-validator/es/validator/date.js ***!
  \***********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _rule___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../rule/ */ \"./node_modules/async-validator/es/rule/index.js\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util */ \"./node_modules/async-validator/es/util.js\");\n\n\n\nfunction date(rule, value, callback, source, options) {\n  // console.log('integer rule called %j', rule);\n  var errors = [];\n  var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n  // console.log('validate on %s value', value);\n  if (validate) {\n    if ((0,_util__WEBPACK_IMPORTED_MODULE_1__.isEmptyValue)(value) && !rule.required) {\n      return callback();\n    }\n    _rule___WEBPACK_IMPORTED_MODULE_0__[\"default\"].required(rule, value, source, errors, options);\n    if (!(0,_util__WEBPACK_IMPORTED_MODULE_1__.isEmptyValue)(value)) {\n      var dateObject = void 0;\n\n      if (typeof value === 'number') {\n        dateObject = new Date(value);\n      } else {\n        dateObject = value;\n      }\n\n      _rule___WEBPACK_IMPORTED_MODULE_0__[\"default\"].type(rule, dateObject, source, errors, options);\n      if (dateObject) {\n        _rule___WEBPACK_IMPORTED_MODULE_0__[\"default\"].range(rule, dateObject.getTime(), source, errors, options);\n      }\n    }\n  }\n  callback(errors);\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (date);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXN5bmMtdmFsaWRhdG9yL2VzL3ZhbGlkYXRvci9kYXRlLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUE2QjtBQUNVOztBQUV2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLG1EQUFZO0FBQ3BCO0FBQ0E7QUFDQSxJQUFJLDhDQUFLO0FBQ1QsU0FBUyxtREFBWTtBQUNyQjs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7O0FBRUEsTUFBTSw4Q0FBSztBQUNYO0FBQ0EsUUFBUSw4Q0FBSztBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUVBQWUsSUFBSSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9hc3luYy12YWxpZGF0b3IvZXMvdmFsaWRhdG9yL2RhdGUuanM/MjVlZiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcnVsZXMgZnJvbSAnLi4vcnVsZS8nO1xuaW1wb3J0IHsgaXNFbXB0eVZhbHVlIH0gZnJvbSAnLi4vdXRpbCc7XG5cbmZ1bmN0aW9uIGRhdGUocnVsZSwgdmFsdWUsIGNhbGxiYWNrLCBzb3VyY2UsIG9wdGlvbnMpIHtcbiAgLy8gY29uc29sZS5sb2coJ2ludGVnZXIgcnVsZSBjYWxsZWQgJWonLCBydWxlKTtcbiAgdmFyIGVycm9ycyA9IFtdO1xuICB2YXIgdmFsaWRhdGUgPSBydWxlLnJlcXVpcmVkIHx8ICFydWxlLnJlcXVpcmVkICYmIHNvdXJjZS5oYXNPd25Qcm9wZXJ0eShydWxlLmZpZWxkKTtcbiAgLy8gY29uc29sZS5sb2coJ3ZhbGlkYXRlIG9uICVzIHZhbHVlJywgdmFsdWUpO1xuICBpZiAodmFsaWRhdGUpIHtcbiAgICBpZiAoaXNFbXB0eVZhbHVlKHZhbHVlKSAmJiAhcnVsZS5yZXF1aXJlZCkge1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgfVxuICAgIHJ1bGVzLnJlcXVpcmVkKHJ1bGUsIHZhbHVlLCBzb3VyY2UsIGVycm9ycywgb3B0aW9ucyk7XG4gICAgaWYgKCFpc0VtcHR5VmFsdWUodmFsdWUpKSB7XG4gICAgICB2YXIgZGF0ZU9iamVjdCA9IHZvaWQgMDtcblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgZGF0ZU9iamVjdCA9IG5ldyBEYXRlKHZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRhdGVPYmplY3QgPSB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgcnVsZXMudHlwZShydWxlLCBkYXRlT2JqZWN0LCBzb3VyY2UsIGVycm9ycywgb3B0aW9ucyk7XG4gICAgICBpZiAoZGF0ZU9iamVjdCkge1xuICAgICAgICBydWxlcy5yYW5nZShydWxlLCBkYXRlT2JqZWN0LmdldFRpbWUoKSwgc291cmNlLCBlcnJvcnMsIG9wdGlvbnMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjYWxsYmFjayhlcnJvcnMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBkYXRlOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/async-validator/es/validator/date.js\n");

/***/ }),

/***/ "./node_modules/async-validator/es/validator/enum.js":
/*!***********************************************************!*\
  !*** ./node_modules/async-validator/es/validator/enum.js ***!
  \***********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _rule___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../rule/ */ \"./node_modules/async-validator/es/rule/index.js\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util */ \"./node_modules/async-validator/es/util.js\");\n\n\nvar ENUM = 'enum';\n\n/**\n *  Validates an enumerable list.\n *\n *  @param rule The validation rule.\n *  @param value The value of the field on the source object.\n *  @param callback The callback function.\n *  @param source The source object being validated.\n *  @param options The validation options.\n *  @param options.messages The validation messages.\n */\nfunction enumerable(rule, value, callback, source, options) {\n  var errors = [];\n  var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n  if (validate) {\n    if ((0,_util__WEBPACK_IMPORTED_MODULE_1__.isEmptyValue)(value) && !rule.required) {\n      return callback();\n    }\n    _rule___WEBPACK_IMPORTED_MODULE_0__[\"default\"].required(rule, value, source, errors, options);\n    if (value) {\n      _rule___WEBPACK_IMPORTED_MODULE_0__[\"default\"][ENUM](rule, value, source, errors, options);\n    }\n  }\n  callback(errors);\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (enumerable);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXN5bmMtdmFsaWRhdG9yL2VzL3ZhbGlkYXRvci9lbnVtLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUE2QjtBQUNVO0FBQ3ZDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLG1EQUFZO0FBQ3BCO0FBQ0E7QUFDQSxJQUFJLDhDQUFLO0FBQ1Q7QUFDQSxNQUFNLDhDQUFLO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUVBQWUsVUFBVSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9hc3luYy12YWxpZGF0b3IvZXMvdmFsaWRhdG9yL2VudW0uanM/Njg2NCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcnVsZXMgZnJvbSAnLi4vcnVsZS8nO1xuaW1wb3J0IHsgaXNFbXB0eVZhbHVlIH0gZnJvbSAnLi4vdXRpbCc7XG52YXIgRU5VTSA9ICdlbnVtJztcblxuLyoqXG4gKiAgVmFsaWRhdGVzIGFuIGVudW1lcmFibGUgbGlzdC5cbiAqXG4gKiAgQHBhcmFtIHJ1bGUgVGhlIHZhbGlkYXRpb24gcnVsZS5cbiAqICBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIG9mIHRoZSBmaWVsZCBvbiB0aGUgc291cmNlIG9iamVjdC5cbiAqICBAcGFyYW0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICogIEBwYXJhbSBzb3VyY2UgVGhlIHNvdXJjZSBvYmplY3QgYmVpbmcgdmFsaWRhdGVkLlxuICogIEBwYXJhbSBvcHRpb25zIFRoZSB2YWxpZGF0aW9uIG9wdGlvbnMuXG4gKiAgQHBhcmFtIG9wdGlvbnMubWVzc2FnZXMgVGhlIHZhbGlkYXRpb24gbWVzc2FnZXMuXG4gKi9cbmZ1bmN0aW9uIGVudW1lcmFibGUocnVsZSwgdmFsdWUsIGNhbGxiYWNrLCBzb3VyY2UsIG9wdGlvbnMpIHtcbiAgdmFyIGVycm9ycyA9IFtdO1xuICB2YXIgdmFsaWRhdGUgPSBydWxlLnJlcXVpcmVkIHx8ICFydWxlLnJlcXVpcmVkICYmIHNvdXJjZS5oYXNPd25Qcm9wZXJ0eShydWxlLmZpZWxkKTtcbiAgaWYgKHZhbGlkYXRlKSB7XG4gICAgaWYgKGlzRW1wdHlWYWx1ZSh2YWx1ZSkgJiYgIXJ1bGUucmVxdWlyZWQpIHtcbiAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgIH1cbiAgICBydWxlcy5yZXF1aXJlZChydWxlLCB2YWx1ZSwgc291cmNlLCBlcnJvcnMsIG9wdGlvbnMpO1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgcnVsZXNbRU5VTV0ocnVsZSwgdmFsdWUsIHNvdXJjZSwgZXJyb3JzLCBvcHRpb25zKTtcbiAgICB9XG4gIH1cbiAgY2FsbGJhY2soZXJyb3JzKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZW51bWVyYWJsZTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/async-validator/es/validator/enum.js\n");

/***/ }),

/***/ "./node_modules/async-validator/es/validator/float.js":
/*!************************************************************!*\
  !*** ./node_modules/async-validator/es/validator/float.js ***!
  \************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _rule___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../rule/ */ \"./node_modules/async-validator/es/rule/index.js\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util */ \"./node_modules/async-validator/es/util.js\");\n\n\n\n/**\n *  Validates a number is a floating point number.\n *\n *  @param rule The validation rule.\n *  @param value The value of the field on the source object.\n *  @param callback The callback function.\n *  @param source The source object being validated.\n *  @param options The validation options.\n *  @param options.messages The validation messages.\n */\nfunction floatFn(rule, value, callback, source, options) {\n  var errors = [];\n  var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n  if (validate) {\n    if ((0,_util__WEBPACK_IMPORTED_MODULE_1__.isEmptyValue)(value) && !rule.required) {\n      return callback();\n    }\n    _rule___WEBPACK_IMPORTED_MODULE_0__[\"default\"].required(rule, value, source, errors, options);\n    if (value !== undefined) {\n      _rule___WEBPACK_IMPORTED_MODULE_0__[\"default\"].type(rule, value, source, errors, options);\n      _rule___WEBPACK_IMPORTED_MODULE_0__[\"default\"].range(rule, value, source, errors, options);\n    }\n  }\n  callback(errors);\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (floatFn);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXN5bmMtdmFsaWRhdG9yL2VzL3ZhbGlkYXRvci9mbG9hdC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBNkI7QUFDVTs7QUFFdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsbURBQVk7QUFDcEI7QUFDQTtBQUNBLElBQUksOENBQUs7QUFDVDtBQUNBLE1BQU0sOENBQUs7QUFDWCxNQUFNLDhDQUFLO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUVBQWUsT0FBTyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9hc3luYy12YWxpZGF0b3IvZXMvdmFsaWRhdG9yL2Zsb2F0LmpzP2UwZjIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHJ1bGVzIGZyb20gJy4uL3J1bGUvJztcbmltcG9ydCB7IGlzRW1wdHlWYWx1ZSB9IGZyb20gJy4uL3V0aWwnO1xuXG4vKipcbiAqICBWYWxpZGF0ZXMgYSBudW1iZXIgaXMgYSBmbG9hdGluZyBwb2ludCBudW1iZXIuXG4gKlxuICogIEBwYXJhbSBydWxlIFRoZSB2YWxpZGF0aW9uIHJ1bGUuXG4gKiAgQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgZmllbGQgb24gdGhlIHNvdXJjZSBvYmplY3QuXG4gKiAgQHBhcmFtIGNhbGxiYWNrIFRoZSBjYWxsYmFjayBmdW5jdGlvbi5cbiAqICBAcGFyYW0gc291cmNlIFRoZSBzb3VyY2Ugb2JqZWN0IGJlaW5nIHZhbGlkYXRlZC5cbiAqICBAcGFyYW0gb3B0aW9ucyBUaGUgdmFsaWRhdGlvbiBvcHRpb25zLlxuICogIEBwYXJhbSBvcHRpb25zLm1lc3NhZ2VzIFRoZSB2YWxpZGF0aW9uIG1lc3NhZ2VzLlxuICovXG5mdW5jdGlvbiBmbG9hdEZuKHJ1bGUsIHZhbHVlLCBjYWxsYmFjaywgc291cmNlLCBvcHRpb25zKSB7XG4gIHZhciBlcnJvcnMgPSBbXTtcbiAgdmFyIHZhbGlkYXRlID0gcnVsZS5yZXF1aXJlZCB8fCAhcnVsZS5yZXF1aXJlZCAmJiBzb3VyY2UuaGFzT3duUHJvcGVydHkocnVsZS5maWVsZCk7XG4gIGlmICh2YWxpZGF0ZSkge1xuICAgIGlmIChpc0VtcHR5VmFsdWUodmFsdWUpICYmICFydWxlLnJlcXVpcmVkKSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICB9XG4gICAgcnVsZXMucmVxdWlyZWQocnVsZSwgdmFsdWUsIHNvdXJjZSwgZXJyb3JzLCBvcHRpb25zKTtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcnVsZXMudHlwZShydWxlLCB2YWx1ZSwgc291cmNlLCBlcnJvcnMsIG9wdGlvbnMpO1xuICAgICAgcnVsZXMucmFuZ2UocnVsZSwgdmFsdWUsIHNvdXJjZSwgZXJyb3JzLCBvcHRpb25zKTtcbiAgICB9XG4gIH1cbiAgY2FsbGJhY2soZXJyb3JzKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZmxvYXRGbjsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/async-validator/es/validator/float.js\n");

/***/ }),

/***/ "./node_modules/async-validator/es/validator/index.js":
/*!************************************************************!*\
  !*** ./node_modules/async-validator/es/validator/index.js ***!
  \************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _string__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./string */ \"./node_modules/async-validator/es/validator/string.js\");\n/* harmony import */ var _method__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./method */ \"./node_modules/async-validator/es/validator/method.js\");\n/* harmony import */ var _number__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./number */ \"./node_modules/async-validator/es/validator/number.js\");\n/* harmony import */ var _boolean__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./boolean */ \"./node_modules/async-validator/es/validator/boolean.js\");\n/* harmony import */ var _regexp__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./regexp */ \"./node_modules/async-validator/es/validator/regexp.js\");\n/* harmony import */ var _integer__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./integer */ \"./node_modules/async-validator/es/validator/integer.js\");\n/* harmony import */ var _float__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./float */ \"./node_modules/async-validator/es/validator/float.js\");\n/* harmony import */ var _array__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./array */ \"./node_modules/async-validator/es/validator/array.js\");\n/* harmony import */ var _object__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./object */ \"./node_modules/async-validator/es/validator/object.js\");\n/* harmony import */ var _enum__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./enum */ \"./node_modules/async-validator/es/validator/enum.js\");\n/* harmony import */ var _pattern__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./pattern */ \"./node_modules/async-validator/es/validator/pattern.js\");\n/* harmony import */ var _date__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./date */ \"./node_modules/async-validator/es/validator/date.js\");\n/* harmony import */ var _required__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./required */ \"./node_modules/async-validator/es/validator/required.js\");\n/* harmony import */ var _type__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./type */ \"./node_modules/async-validator/es/validator/type.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n  string: _string__WEBPACK_IMPORTED_MODULE_0__[\"default\"],\n  method: _method__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  number: _number__WEBPACK_IMPORTED_MODULE_2__[\"default\"],\n  boolean: _boolean__WEBPACK_IMPORTED_MODULE_3__[\"default\"],\n  regexp: _regexp__WEBPACK_IMPORTED_MODULE_4__[\"default\"],\n  integer: _integer__WEBPACK_IMPORTED_MODULE_5__[\"default\"],\n  float: _float__WEBPACK_IMPORTED_MODULE_6__[\"default\"],\n  array: _array__WEBPACK_IMPORTED_MODULE_7__[\"default\"],\n  object: _object__WEBPACK_IMPORTED_MODULE_8__[\"default\"],\n  'enum': _enum__WEBPACK_IMPORTED_MODULE_9__[\"default\"],\n  pattern: _pattern__WEBPACK_IMPORTED_MODULE_10__[\"default\"],\n  date: _date__WEBPACK_IMPORTED_MODULE_11__[\"default\"],\n  url: _type__WEBPACK_IMPORTED_MODULE_13__[\"default\"],\n  hex: _type__WEBPACK_IMPORTED_MODULE_13__[\"default\"],\n  email: _type__WEBPACK_IMPORTED_MODULE_13__[\"default\"],\n  required: _required__WEBPACK_IMPORTED_MODULE_12__[\"default\"]\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXN5bmMtdmFsaWRhdG9yL2VzL3ZhbGlkYXRvci9pbmRleC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBOEI7QUFDQTtBQUNBO0FBQ0U7QUFDRjtBQUNFO0FBQ0o7QUFDQTtBQUNFO0FBQ0s7QUFDSDtBQUNOO0FBQ1E7QUFDUjs7QUFFMUIsaUVBQWU7QUFDZixVQUFVLCtDQUFNO0FBQ2hCLFVBQVUsK0NBQU07QUFDaEIsVUFBVSwrQ0FBTTtBQUNoQixXQUFXLGdEQUFPO0FBQ2xCLFVBQVUsK0NBQU07QUFDaEIsV0FBVyxnREFBTztBQUNsQixTQUFTLDhDQUFLO0FBQ2QsU0FBUyw4Q0FBSztBQUNkLFVBQVUsK0NBQU07QUFDaEIsVUFBVSw2Q0FBYTtBQUN2QixXQUFXLGlEQUFPO0FBQ2xCLFFBQVEsOENBQUk7QUFDWixPQUFPLDhDQUFJO0FBQ1gsT0FBTyw4Q0FBSTtBQUNYLFNBQVMsOENBQUk7QUFDYixZQUFZLGtEQUFRO0FBQ3BCLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXN5bmMtdmFsaWRhdG9yL2VzL3ZhbGlkYXRvci9pbmRleC5qcz83N2EyIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBzdHJpbmcgZnJvbSAnLi9zdHJpbmcnO1xuaW1wb3J0IG1ldGhvZCBmcm9tICcuL21ldGhvZCc7XG5pbXBvcnQgbnVtYmVyIGZyb20gJy4vbnVtYmVyJztcbmltcG9ydCBib29sZWFuIGZyb20gJy4vYm9vbGVhbic7XG5pbXBvcnQgcmVnZXhwIGZyb20gJy4vcmVnZXhwJztcbmltcG9ydCBpbnRlZ2VyIGZyb20gJy4vaW50ZWdlcic7XG5pbXBvcnQgZmxvYXQgZnJvbSAnLi9mbG9hdCc7XG5pbXBvcnQgYXJyYXkgZnJvbSAnLi9hcnJheSc7XG5pbXBvcnQgb2JqZWN0IGZyb20gJy4vb2JqZWN0JztcbmltcG9ydCBlbnVtVmFsaWRhdG9yIGZyb20gJy4vZW51bSc7XG5pbXBvcnQgcGF0dGVybiBmcm9tICcuL3BhdHRlcm4nO1xuaW1wb3J0IGRhdGUgZnJvbSAnLi9kYXRlJztcbmltcG9ydCByZXF1aXJlZCBmcm9tICcuL3JlcXVpcmVkJztcbmltcG9ydCB0eXBlIGZyb20gJy4vdHlwZSc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgc3RyaW5nOiBzdHJpbmcsXG4gIG1ldGhvZDogbWV0aG9kLFxuICBudW1iZXI6IG51bWJlcixcbiAgYm9vbGVhbjogYm9vbGVhbixcbiAgcmVnZXhwOiByZWdleHAsXG4gIGludGVnZXI6IGludGVnZXIsXG4gIGZsb2F0OiBmbG9hdCxcbiAgYXJyYXk6IGFycmF5LFxuICBvYmplY3Q6IG9iamVjdCxcbiAgJ2VudW0nOiBlbnVtVmFsaWRhdG9yLFxuICBwYXR0ZXJuOiBwYXR0ZXJuLFxuICBkYXRlOiBkYXRlLFxuICB1cmw6IHR5cGUsXG4gIGhleDogdHlwZSxcbiAgZW1haWw6IHR5cGUsXG4gIHJlcXVpcmVkOiByZXF1aXJlZFxufTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/async-validator/es/validator/index.js\n");

/***/ }),

/***/ "./node_modules/async-validator/es/validator/integer.js":
/*!**************************************************************!*\
  !*** ./node_modules/async-validator/es/validator/integer.js ***!
  \**************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _rule___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../rule/ */ \"./node_modules/async-validator/es/rule/index.js\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util */ \"./node_modules/async-validator/es/util.js\");\n\n\n\n/**\n *  Validates a number is an integer.\n *\n *  @param rule The validation rule.\n *  @param value The value of the field on the source object.\n *  @param callback The callback function.\n *  @param source The source object being validated.\n *  @param options The validation options.\n *  @param options.messages The validation messages.\n */\nfunction integer(rule, value, callback, source, options) {\n  var errors = [];\n  var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n  if (validate) {\n    if ((0,_util__WEBPACK_IMPORTED_MODULE_1__.isEmptyValue)(value) && !rule.required) {\n      return callback();\n    }\n    _rule___WEBPACK_IMPORTED_MODULE_0__[\"default\"].required(rule, value, source, errors, options);\n    if (value !== undefined) {\n      _rule___WEBPACK_IMPORTED_MODULE_0__[\"default\"].type(rule, value, source, errors, options);\n      _rule___WEBPACK_IMPORTED_MODULE_0__[\"default\"].range(rule, value, source, errors, options);\n    }\n  }\n  callback(errors);\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (integer);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXN5bmMtdmFsaWRhdG9yL2VzL3ZhbGlkYXRvci9pbnRlZ2VyLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUE2QjtBQUNVOztBQUV2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxtREFBWTtBQUNwQjtBQUNBO0FBQ0EsSUFBSSw4Q0FBSztBQUNUO0FBQ0EsTUFBTSw4Q0FBSztBQUNYLE1BQU0sOENBQUs7QUFDWDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpRUFBZSxPQUFPIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FzeW5jLXZhbGlkYXRvci9lcy92YWxpZGF0b3IvaW50ZWdlci5qcz80Y2E3Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBydWxlcyBmcm9tICcuLi9ydWxlLyc7XG5pbXBvcnQgeyBpc0VtcHR5VmFsdWUgfSBmcm9tICcuLi91dGlsJztcblxuLyoqXG4gKiAgVmFsaWRhdGVzIGEgbnVtYmVyIGlzIGFuIGludGVnZXIuXG4gKlxuICogIEBwYXJhbSBydWxlIFRoZSB2YWxpZGF0aW9uIHJ1bGUuXG4gKiAgQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgZmllbGQgb24gdGhlIHNvdXJjZSBvYmplY3QuXG4gKiAgQHBhcmFtIGNhbGxiYWNrIFRoZSBjYWxsYmFjayBmdW5jdGlvbi5cbiAqICBAcGFyYW0gc291cmNlIFRoZSBzb3VyY2Ugb2JqZWN0IGJlaW5nIHZhbGlkYXRlZC5cbiAqICBAcGFyYW0gb3B0aW9ucyBUaGUgdmFsaWRhdGlvbiBvcHRpb25zLlxuICogIEBwYXJhbSBvcHRpb25zLm1lc3NhZ2VzIFRoZSB2YWxpZGF0aW9uIG1lc3NhZ2VzLlxuICovXG5mdW5jdGlvbiBpbnRlZ2VyKHJ1bGUsIHZhbHVlLCBjYWxsYmFjaywgc291cmNlLCBvcHRpb25zKSB7XG4gIHZhciBlcnJvcnMgPSBbXTtcbiAgdmFyIHZhbGlkYXRlID0gcnVsZS5yZXF1aXJlZCB8fCAhcnVsZS5yZXF1aXJlZCAmJiBzb3VyY2UuaGFzT3duUHJvcGVydHkocnVsZS5maWVsZCk7XG4gIGlmICh2YWxpZGF0ZSkge1xuICAgIGlmIChpc0VtcHR5VmFsdWUodmFsdWUpICYmICFydWxlLnJlcXVpcmVkKSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICB9XG4gICAgcnVsZXMucmVxdWlyZWQocnVsZSwgdmFsdWUsIHNvdXJjZSwgZXJyb3JzLCBvcHRpb25zKTtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcnVsZXMudHlwZShydWxlLCB2YWx1ZSwgc291cmNlLCBlcnJvcnMsIG9wdGlvbnMpO1xuICAgICAgcnVsZXMucmFuZ2UocnVsZSwgdmFsdWUsIHNvdXJjZSwgZXJyb3JzLCBvcHRpb25zKTtcbiAgICB9XG4gIH1cbiAgY2FsbGJhY2soZXJyb3JzKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaW50ZWdlcjsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/async-validator/es/validator/integer.js\n");

/***/ }),

/***/ "./node_modules/async-validator/es/validator/method.js":
/*!*************************************************************!*\
  !*** ./node_modules/async-validator/es/validator/method.js ***!
  \*************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _rule___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../rule/ */ \"./node_modules/async-validator/es/rule/index.js\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util */ \"./node_modules/async-validator/es/util.js\");\n\n\n\n/**\n *  Validates a function.\n *\n *  @param rule The validation rule.\n *  @param value The value of the field on the source object.\n *  @param callback The callback function.\n *  @param source The source object being validated.\n *  @param options The validation options.\n *  @param options.messages The validation messages.\n */\nfunction method(rule, value, callback, source, options) {\n  var errors = [];\n  var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n  if (validate) {\n    if ((0,_util__WEBPACK_IMPORTED_MODULE_1__.isEmptyValue)(value) && !rule.required) {\n      return callback();\n    }\n    _rule___WEBPACK_IMPORTED_MODULE_0__[\"default\"].required(rule, value, source, errors, options);\n    if (value !== undefined) {\n      _rule___WEBPACK_IMPORTED_MODULE_0__[\"default\"].type(rule, value, source, errors, options);\n    }\n  }\n  callback(errors);\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (method);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXN5bmMtdmFsaWRhdG9yL2VzL3ZhbGlkYXRvci9tZXRob2QuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQTZCO0FBQ1U7O0FBRXZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLG1EQUFZO0FBQ3BCO0FBQ0E7QUFDQSxJQUFJLDhDQUFLO0FBQ1Q7QUFDQSxNQUFNLDhDQUFLO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUVBQWUsTUFBTSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9hc3luYy12YWxpZGF0b3IvZXMvdmFsaWRhdG9yL21ldGhvZC5qcz80N2M1Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBydWxlcyBmcm9tICcuLi9ydWxlLyc7XG5pbXBvcnQgeyBpc0VtcHR5VmFsdWUgfSBmcm9tICcuLi91dGlsJztcblxuLyoqXG4gKiAgVmFsaWRhdGVzIGEgZnVuY3Rpb24uXG4gKlxuICogIEBwYXJhbSBydWxlIFRoZSB2YWxpZGF0aW9uIHJ1bGUuXG4gKiAgQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgZmllbGQgb24gdGhlIHNvdXJjZSBvYmplY3QuXG4gKiAgQHBhcmFtIGNhbGxiYWNrIFRoZSBjYWxsYmFjayBmdW5jdGlvbi5cbiAqICBAcGFyYW0gc291cmNlIFRoZSBzb3VyY2Ugb2JqZWN0IGJlaW5nIHZhbGlkYXRlZC5cbiAqICBAcGFyYW0gb3B0aW9ucyBUaGUgdmFsaWRhdGlvbiBvcHRpb25zLlxuICogIEBwYXJhbSBvcHRpb25zLm1lc3NhZ2VzIFRoZSB2YWxpZGF0aW9uIG1lc3NhZ2VzLlxuICovXG5mdW5jdGlvbiBtZXRob2QocnVsZSwgdmFsdWUsIGNhbGxiYWNrLCBzb3VyY2UsIG9wdGlvbnMpIHtcbiAgdmFyIGVycm9ycyA9IFtdO1xuICB2YXIgdmFsaWRhdGUgPSBydWxlLnJlcXVpcmVkIHx8ICFydWxlLnJlcXVpcmVkICYmIHNvdXJjZS5oYXNPd25Qcm9wZXJ0eShydWxlLmZpZWxkKTtcbiAgaWYgKHZhbGlkYXRlKSB7XG4gICAgaWYgKGlzRW1wdHlWYWx1ZSh2YWx1ZSkgJiYgIXJ1bGUucmVxdWlyZWQpIHtcbiAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgIH1cbiAgICBydWxlcy5yZXF1aXJlZChydWxlLCB2YWx1ZSwgc291cmNlLCBlcnJvcnMsIG9wdGlvbnMpO1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBydWxlcy50eXBlKHJ1bGUsIHZhbHVlLCBzb3VyY2UsIGVycm9ycywgb3B0aW9ucyk7XG4gICAgfVxuICB9XG4gIGNhbGxiYWNrKGVycm9ycyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1ldGhvZDsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/async-validator/es/validator/method.js\n");

/***/ }),

/***/ "./node_modules/async-validator/es/validator/number.js":
/*!*************************************************************!*\
  !*** ./node_modules/async-validator/es/validator/number.js ***!
  \*************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _rule___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../rule/ */ \"./node_modules/async-validator/es/rule/index.js\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util */ \"./node_modules/async-validator/es/util.js\");\n\n\n\n/**\n *  Validates a number.\n *\n *  @param rule The validation rule.\n *  @param value The value of the field on the source object.\n *  @param callback The callback function.\n *  @param source The source object being validated.\n *  @param options The validation options.\n *  @param options.messages The validation messages.\n */\nfunction number(rule, value, callback, source, options) {\n  var errors = [];\n  var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n  if (validate) {\n    if ((0,_util__WEBPACK_IMPORTED_MODULE_1__.isEmptyValue)(value) && !rule.required) {\n      return callback();\n    }\n    _rule___WEBPACK_IMPORTED_MODULE_0__[\"default\"].required(rule, value, source, errors, options);\n    if (value !== undefined) {\n      _rule___WEBPACK_IMPORTED_MODULE_0__[\"default\"].type(rule, value, source, errors, options);\n      _rule___WEBPACK_IMPORTED_MODULE_0__[\"default\"].range(rule, value, source, errors, options);\n    }\n  }\n  callback(errors);\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (number);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXN5bmMtdmFsaWRhdG9yL2VzL3ZhbGlkYXRvci9udW1iZXIuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQTZCO0FBQ1U7O0FBRXZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLG1EQUFZO0FBQ3BCO0FBQ0E7QUFDQSxJQUFJLDhDQUFLO0FBQ1Q7QUFDQSxNQUFNLDhDQUFLO0FBQ1gsTUFBTSw4Q0FBSztBQUNYO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlFQUFlLE1BQU0iLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXN5bmMtdmFsaWRhdG9yL2VzL3ZhbGlkYXRvci9udW1iZXIuanM/MzdjZSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcnVsZXMgZnJvbSAnLi4vcnVsZS8nO1xuaW1wb3J0IHsgaXNFbXB0eVZhbHVlIH0gZnJvbSAnLi4vdXRpbCc7XG5cbi8qKlxuICogIFZhbGlkYXRlcyBhIG51bWJlci5cbiAqXG4gKiAgQHBhcmFtIHJ1bGUgVGhlIHZhbGlkYXRpb24gcnVsZS5cbiAqICBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIG9mIHRoZSBmaWVsZCBvbiB0aGUgc291cmNlIG9iamVjdC5cbiAqICBAcGFyYW0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICogIEBwYXJhbSBzb3VyY2UgVGhlIHNvdXJjZSBvYmplY3QgYmVpbmcgdmFsaWRhdGVkLlxuICogIEBwYXJhbSBvcHRpb25zIFRoZSB2YWxpZGF0aW9uIG9wdGlvbnMuXG4gKiAgQHBhcmFtIG9wdGlvbnMubWVzc2FnZXMgVGhlIHZhbGlkYXRpb24gbWVzc2FnZXMuXG4gKi9cbmZ1bmN0aW9uIG51bWJlcihydWxlLCB2YWx1ZSwgY2FsbGJhY2ssIHNvdXJjZSwgb3B0aW9ucykge1xuICB2YXIgZXJyb3JzID0gW107XG4gIHZhciB2YWxpZGF0ZSA9IHJ1bGUucmVxdWlyZWQgfHwgIXJ1bGUucmVxdWlyZWQgJiYgc291cmNlLmhhc093blByb3BlcnR5KHJ1bGUuZmllbGQpO1xuICBpZiAodmFsaWRhdGUpIHtcbiAgICBpZiAoaXNFbXB0eVZhbHVlKHZhbHVlKSAmJiAhcnVsZS5yZXF1aXJlZCkge1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgfVxuICAgIHJ1bGVzLnJlcXVpcmVkKHJ1bGUsIHZhbHVlLCBzb3VyY2UsIGVycm9ycywgb3B0aW9ucyk7XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJ1bGVzLnR5cGUocnVsZSwgdmFsdWUsIHNvdXJjZSwgZXJyb3JzLCBvcHRpb25zKTtcbiAgICAgIHJ1bGVzLnJhbmdlKHJ1bGUsIHZhbHVlLCBzb3VyY2UsIGVycm9ycywgb3B0aW9ucyk7XG4gICAgfVxuICB9XG4gIGNhbGxiYWNrKGVycm9ycyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG51bWJlcjsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/async-validator/es/validator/number.js\n");

/***/ }),

/***/ "./node_modules/async-validator/es/validator/object.js":
/*!*************************************************************!*\
  !*** ./node_modules/async-validator/es/validator/object.js ***!
  \*************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _rule___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../rule/ */ \"./node_modules/async-validator/es/rule/index.js\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util */ \"./node_modules/async-validator/es/util.js\");\n\n\n\n/**\n *  Validates an object.\n *\n *  @param rule The validation rule.\n *  @param value The value of the field on the source object.\n *  @param callback The callback function.\n *  @param source The source object being validated.\n *  @param options The validation options.\n *  @param options.messages The validation messages.\n */\nfunction object(rule, value, callback, source, options) {\n  var errors = [];\n  var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n  if (validate) {\n    if ((0,_util__WEBPACK_IMPORTED_MODULE_1__.isEmptyValue)(value) && !rule.required) {\n      return callback();\n    }\n    _rule___WEBPACK_IMPORTED_MODULE_0__[\"default\"].required(rule, value, source, errors, options);\n    if (value !== undefined) {\n      _rule___WEBPACK_IMPORTED_MODULE_0__[\"default\"].type(rule, value, source, errors, options);\n    }\n  }\n  callback(errors);\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (object);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXN5bmMtdmFsaWRhdG9yL2VzL3ZhbGlkYXRvci9vYmplY3QuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQTZCO0FBQ1U7O0FBRXZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLG1EQUFZO0FBQ3BCO0FBQ0E7QUFDQSxJQUFJLDhDQUFLO0FBQ1Q7QUFDQSxNQUFNLDhDQUFLO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUVBQWUsTUFBTSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9hc3luYy12YWxpZGF0b3IvZXMvdmFsaWRhdG9yL29iamVjdC5qcz8wOThmIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBydWxlcyBmcm9tICcuLi9ydWxlLyc7XG5pbXBvcnQgeyBpc0VtcHR5VmFsdWUgfSBmcm9tICcuLi91dGlsJztcblxuLyoqXG4gKiAgVmFsaWRhdGVzIGFuIG9iamVjdC5cbiAqXG4gKiAgQHBhcmFtIHJ1bGUgVGhlIHZhbGlkYXRpb24gcnVsZS5cbiAqICBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIG9mIHRoZSBmaWVsZCBvbiB0aGUgc291cmNlIG9iamVjdC5cbiAqICBAcGFyYW0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICogIEBwYXJhbSBzb3VyY2UgVGhlIHNvdXJjZSBvYmplY3QgYmVpbmcgdmFsaWRhdGVkLlxuICogIEBwYXJhbSBvcHRpb25zIFRoZSB2YWxpZGF0aW9uIG9wdGlvbnMuXG4gKiAgQHBhcmFtIG9wdGlvbnMubWVzc2FnZXMgVGhlIHZhbGlkYXRpb24gbWVzc2FnZXMuXG4gKi9cbmZ1bmN0aW9uIG9iamVjdChydWxlLCB2YWx1ZSwgY2FsbGJhY2ssIHNvdXJjZSwgb3B0aW9ucykge1xuICB2YXIgZXJyb3JzID0gW107XG4gIHZhciB2YWxpZGF0ZSA9IHJ1bGUucmVxdWlyZWQgfHwgIXJ1bGUucmVxdWlyZWQgJiYgc291cmNlLmhhc093blByb3BlcnR5KHJ1bGUuZmllbGQpO1xuICBpZiAodmFsaWRhdGUpIHtcbiAgICBpZiAoaXNFbXB0eVZhbHVlKHZhbHVlKSAmJiAhcnVsZS5yZXF1aXJlZCkge1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgfVxuICAgIHJ1bGVzLnJlcXVpcmVkKHJ1bGUsIHZhbHVlLCBzb3VyY2UsIGVycm9ycywgb3B0aW9ucyk7XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJ1bGVzLnR5cGUocnVsZSwgdmFsdWUsIHNvdXJjZSwgZXJyb3JzLCBvcHRpb25zKTtcbiAgICB9XG4gIH1cbiAgY2FsbGJhY2soZXJyb3JzKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgb2JqZWN0OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/async-validator/es/validator/object.js\n");

/***/ }),

/***/ "./node_modules/async-validator/es/validator/pattern.js":
/*!**************************************************************!*\
  !*** ./node_modules/async-validator/es/validator/pattern.js ***!
  \**************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _rule___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../rule/ */ \"./node_modules/async-validator/es/rule/index.js\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util */ \"./node_modules/async-validator/es/util.js\");\n\n\n\n/**\n *  Validates a regular expression pattern.\n *\n *  Performs validation when a rule only contains\n *  a pattern property but is not declared as a string type.\n *\n *  @param rule The validation rule.\n *  @param value The value of the field on the source object.\n *  @param callback The callback function.\n *  @param source The source object being validated.\n *  @param options The validation options.\n *  @param options.messages The validation messages.\n */\nfunction pattern(rule, value, callback, source, options) {\n  var errors = [];\n  var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n  if (validate) {\n    if ((0,_util__WEBPACK_IMPORTED_MODULE_1__.isEmptyValue)(value, 'string') && !rule.required) {\n      return callback();\n    }\n    _rule___WEBPACK_IMPORTED_MODULE_0__[\"default\"].required(rule, value, source, errors, options);\n    if (!(0,_util__WEBPACK_IMPORTED_MODULE_1__.isEmptyValue)(value, 'string')) {\n      _rule___WEBPACK_IMPORTED_MODULE_0__[\"default\"].pattern(rule, value, source, errors, options);\n    }\n  }\n  callback(errors);\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (pattern);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXN5bmMtdmFsaWRhdG9yL2VzL3ZhbGlkYXRvci9wYXR0ZXJuLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUE2QjtBQUNVOztBQUV2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxtREFBWTtBQUNwQjtBQUNBO0FBQ0EsSUFBSSw4Q0FBSztBQUNULFNBQVMsbURBQVk7QUFDckIsTUFBTSw4Q0FBSztBQUNYO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlFQUFlLE9BQU8iLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXN5bmMtdmFsaWRhdG9yL2VzL3ZhbGlkYXRvci9wYXR0ZXJuLmpzPzk5YjAiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHJ1bGVzIGZyb20gJy4uL3J1bGUvJztcbmltcG9ydCB7IGlzRW1wdHlWYWx1ZSB9IGZyb20gJy4uL3V0aWwnO1xuXG4vKipcbiAqICBWYWxpZGF0ZXMgYSByZWd1bGFyIGV4cHJlc3Npb24gcGF0dGVybi5cbiAqXG4gKiAgUGVyZm9ybXMgdmFsaWRhdGlvbiB3aGVuIGEgcnVsZSBvbmx5IGNvbnRhaW5zXG4gKiAgYSBwYXR0ZXJuIHByb3BlcnR5IGJ1dCBpcyBub3QgZGVjbGFyZWQgYXMgYSBzdHJpbmcgdHlwZS5cbiAqXG4gKiAgQHBhcmFtIHJ1bGUgVGhlIHZhbGlkYXRpb24gcnVsZS5cbiAqICBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIG9mIHRoZSBmaWVsZCBvbiB0aGUgc291cmNlIG9iamVjdC5cbiAqICBAcGFyYW0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICogIEBwYXJhbSBzb3VyY2UgVGhlIHNvdXJjZSBvYmplY3QgYmVpbmcgdmFsaWRhdGVkLlxuICogIEBwYXJhbSBvcHRpb25zIFRoZSB2YWxpZGF0aW9uIG9wdGlvbnMuXG4gKiAgQHBhcmFtIG9wdGlvbnMubWVzc2FnZXMgVGhlIHZhbGlkYXRpb24gbWVzc2FnZXMuXG4gKi9cbmZ1bmN0aW9uIHBhdHRlcm4ocnVsZSwgdmFsdWUsIGNhbGxiYWNrLCBzb3VyY2UsIG9wdGlvbnMpIHtcbiAgdmFyIGVycm9ycyA9IFtdO1xuICB2YXIgdmFsaWRhdGUgPSBydWxlLnJlcXVpcmVkIHx8ICFydWxlLnJlcXVpcmVkICYmIHNvdXJjZS5oYXNPd25Qcm9wZXJ0eShydWxlLmZpZWxkKTtcbiAgaWYgKHZhbGlkYXRlKSB7XG4gICAgaWYgKGlzRW1wdHlWYWx1ZSh2YWx1ZSwgJ3N0cmluZycpICYmICFydWxlLnJlcXVpcmVkKSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICB9XG4gICAgcnVsZXMucmVxdWlyZWQocnVsZSwgdmFsdWUsIHNvdXJjZSwgZXJyb3JzLCBvcHRpb25zKTtcbiAgICBpZiAoIWlzRW1wdHlWYWx1ZSh2YWx1ZSwgJ3N0cmluZycpKSB7XG4gICAgICBydWxlcy5wYXR0ZXJuKHJ1bGUsIHZhbHVlLCBzb3VyY2UsIGVycm9ycywgb3B0aW9ucyk7XG4gICAgfVxuICB9XG4gIGNhbGxiYWNrKGVycm9ycyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHBhdHRlcm47Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/async-validator/es/validator/pattern.js\n");

/***/ }),

/***/ "./node_modules/async-validator/es/validator/regexp.js":
/*!*************************************************************!*\
  !*** ./node_modules/async-validator/es/validator/regexp.js ***!
  \*************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _rule___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../rule/ */ \"./node_modules/async-validator/es/rule/index.js\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util */ \"./node_modules/async-validator/es/util.js\");\n\n\n\n/**\n *  Validates the regular expression type.\n *\n *  @param rule The validation rule.\n *  @param value The value of the field on the source object.\n *  @param callback The callback function.\n *  @param source The source object being validated.\n *  @param options The validation options.\n *  @param options.messages The validation messages.\n */\nfunction regexp(rule, value, callback, source, options) {\n  var errors = [];\n  var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n  if (validate) {\n    if ((0,_util__WEBPACK_IMPORTED_MODULE_1__.isEmptyValue)(value) && !rule.required) {\n      return callback();\n    }\n    _rule___WEBPACK_IMPORTED_MODULE_0__[\"default\"].required(rule, value, source, errors, options);\n    if (!(0,_util__WEBPACK_IMPORTED_MODULE_1__.isEmptyValue)(value)) {\n      _rule___WEBPACK_IMPORTED_MODULE_0__[\"default\"].type(rule, value, source, errors, options);\n    }\n  }\n  callback(errors);\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (regexp);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXN5bmMtdmFsaWRhdG9yL2VzL3ZhbGlkYXRvci9yZWdleHAuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQTZCO0FBQ1U7O0FBRXZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLG1EQUFZO0FBQ3BCO0FBQ0E7QUFDQSxJQUFJLDhDQUFLO0FBQ1QsU0FBUyxtREFBWTtBQUNyQixNQUFNLDhDQUFLO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUVBQWUsTUFBTSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9hc3luYy12YWxpZGF0b3IvZXMvdmFsaWRhdG9yL3JlZ2V4cC5qcz9iYmU1Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBydWxlcyBmcm9tICcuLi9ydWxlLyc7XG5pbXBvcnQgeyBpc0VtcHR5VmFsdWUgfSBmcm9tICcuLi91dGlsJztcblxuLyoqXG4gKiAgVmFsaWRhdGVzIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gdHlwZS5cbiAqXG4gKiAgQHBhcmFtIHJ1bGUgVGhlIHZhbGlkYXRpb24gcnVsZS5cbiAqICBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIG9mIHRoZSBmaWVsZCBvbiB0aGUgc291cmNlIG9iamVjdC5cbiAqICBAcGFyYW0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICogIEBwYXJhbSBzb3VyY2UgVGhlIHNvdXJjZSBvYmplY3QgYmVpbmcgdmFsaWRhdGVkLlxuICogIEBwYXJhbSBvcHRpb25zIFRoZSB2YWxpZGF0aW9uIG9wdGlvbnMuXG4gKiAgQHBhcmFtIG9wdGlvbnMubWVzc2FnZXMgVGhlIHZhbGlkYXRpb24gbWVzc2FnZXMuXG4gKi9cbmZ1bmN0aW9uIHJlZ2V4cChydWxlLCB2YWx1ZSwgY2FsbGJhY2ssIHNvdXJjZSwgb3B0aW9ucykge1xuICB2YXIgZXJyb3JzID0gW107XG4gIHZhciB2YWxpZGF0ZSA9IHJ1bGUucmVxdWlyZWQgfHwgIXJ1bGUucmVxdWlyZWQgJiYgc291cmNlLmhhc093blByb3BlcnR5KHJ1bGUuZmllbGQpO1xuICBpZiAodmFsaWRhdGUpIHtcbiAgICBpZiAoaXNFbXB0eVZhbHVlKHZhbHVlKSAmJiAhcnVsZS5yZXF1aXJlZCkge1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgfVxuICAgIHJ1bGVzLnJlcXVpcmVkKHJ1bGUsIHZhbHVlLCBzb3VyY2UsIGVycm9ycywgb3B0aW9ucyk7XG4gICAgaWYgKCFpc0VtcHR5VmFsdWUodmFsdWUpKSB7XG4gICAgICBydWxlcy50eXBlKHJ1bGUsIHZhbHVlLCBzb3VyY2UsIGVycm9ycywgb3B0aW9ucyk7XG4gICAgfVxuICB9XG4gIGNhbGxiYWNrKGVycm9ycyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHJlZ2V4cDsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/async-validator/es/validator/regexp.js\n");

/***/ }),

/***/ "./node_modules/async-validator/es/validator/required.js":
/*!***************************************************************!*\
  !*** ./node_modules/async-validator/es/validator/required.js ***!
  \***************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! babel-runtime/helpers/typeof */ \"./node_modules/babel-runtime/helpers/typeof.js\");\n/* harmony import */ var _rule___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../rule/ */ \"./node_modules/async-validator/es/rule/index.js\");\n\n\n\nfunction required(rule, value, callback, source, options) {\n  var errors = [];\n  var type = Array.isArray(value) ? 'array' : typeof value === 'undefined' ? 'undefined' : (0,babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(value);\n  _rule___WEBPACK_IMPORTED_MODULE_1__[\"default\"].required(rule, value, source, errors, options, type);\n  callback(errors);\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (required);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXN5bmMtdmFsaWRhdG9yL2VzL3ZhbGlkYXRvci9yZXF1aXJlZC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBbUQ7QUFDdEI7O0FBRTdCO0FBQ0E7QUFDQSwyRkFBMkYsd0VBQU87QUFDbEcsRUFBRSw4Q0FBSztBQUNQO0FBQ0E7O0FBRUEsaUVBQWUsUUFBUSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9hc3luYy12YWxpZGF0b3IvZXMvdmFsaWRhdG9yL3JlcXVpcmVkLmpzPzg5NmUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF90eXBlb2YgZnJvbSAnYmFiZWwtcnVudGltZS9oZWxwZXJzL3R5cGVvZic7XG5pbXBvcnQgcnVsZXMgZnJvbSAnLi4vcnVsZS8nO1xuXG5mdW5jdGlvbiByZXF1aXJlZChydWxlLCB2YWx1ZSwgY2FsbGJhY2ssIHNvdXJjZSwgb3B0aW9ucykge1xuICB2YXIgZXJyb3JzID0gW107XG4gIHZhciB0eXBlID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyAnYXJyYXknIDogdHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJyA/ICd1bmRlZmluZWQnIDogX3R5cGVvZih2YWx1ZSk7XG4gIHJ1bGVzLnJlcXVpcmVkKHJ1bGUsIHZhbHVlLCBzb3VyY2UsIGVycm9ycywgb3B0aW9ucywgdHlwZSk7XG4gIGNhbGxiYWNrKGVycm9ycyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHJlcXVpcmVkOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/async-validator/es/validator/required.js\n");

/***/ }),

/***/ "./node_modules/async-validator/es/validator/string.js":
/*!*************************************************************!*\
  !*** ./node_modules/async-validator/es/validator/string.js ***!
  \*************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _rule___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../rule/ */ \"./node_modules/async-validator/es/rule/index.js\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util */ \"./node_modules/async-validator/es/util.js\");\n\n\n\n/**\n *  Performs validation for string types.\n *\n *  @param rule The validation rule.\n *  @param value The value of the field on the source object.\n *  @param callback The callback function.\n *  @param source The source object being validated.\n *  @param options The validation options.\n *  @param options.messages The validation messages.\n */\nfunction string(rule, value, callback, source, options) {\n  var errors = [];\n  var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n  if (validate) {\n    if ((0,_util__WEBPACK_IMPORTED_MODULE_1__.isEmptyValue)(value, 'string') && !rule.required) {\n      return callback();\n    }\n    _rule___WEBPACK_IMPORTED_MODULE_0__[\"default\"].required(rule, value, source, errors, options, 'string');\n    if (!(0,_util__WEBPACK_IMPORTED_MODULE_1__.isEmptyValue)(value, 'string')) {\n      _rule___WEBPACK_IMPORTED_MODULE_0__[\"default\"].type(rule, value, source, errors, options);\n      _rule___WEBPACK_IMPORTED_MODULE_0__[\"default\"].range(rule, value, source, errors, options);\n      _rule___WEBPACK_IMPORTED_MODULE_0__[\"default\"].pattern(rule, value, source, errors, options);\n      if (rule.whitespace === true) {\n        _rule___WEBPACK_IMPORTED_MODULE_0__[\"default\"].whitespace(rule, value, source, errors, options);\n      }\n    }\n  }\n  callback(errors);\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (string);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXN5bmMtdmFsaWRhdG9yL2VzL3ZhbGlkYXRvci9zdHJpbmcuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQTZCO0FBQ1U7O0FBRXZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLG1EQUFZO0FBQ3BCO0FBQ0E7QUFDQSxJQUFJLDhDQUFLO0FBQ1QsU0FBUyxtREFBWTtBQUNyQixNQUFNLDhDQUFLO0FBQ1gsTUFBTSw4Q0FBSztBQUNYLE1BQU0sOENBQUs7QUFDWDtBQUNBLFFBQVEsOENBQUs7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlFQUFlLE1BQU0iLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXN5bmMtdmFsaWRhdG9yL2VzL3ZhbGlkYXRvci9zdHJpbmcuanM/MDM2MiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcnVsZXMgZnJvbSAnLi4vcnVsZS8nO1xuaW1wb3J0IHsgaXNFbXB0eVZhbHVlIH0gZnJvbSAnLi4vdXRpbCc7XG5cbi8qKlxuICogIFBlcmZvcm1zIHZhbGlkYXRpb24gZm9yIHN0cmluZyB0eXBlcy5cbiAqXG4gKiAgQHBhcmFtIHJ1bGUgVGhlIHZhbGlkYXRpb24gcnVsZS5cbiAqICBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIG9mIHRoZSBmaWVsZCBvbiB0aGUgc291cmNlIG9iamVjdC5cbiAqICBAcGFyYW0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICogIEBwYXJhbSBzb3VyY2UgVGhlIHNvdXJjZSBvYmplY3QgYmVpbmcgdmFsaWRhdGVkLlxuICogIEBwYXJhbSBvcHRpb25zIFRoZSB2YWxpZGF0aW9uIG9wdGlvbnMuXG4gKiAgQHBhcmFtIG9wdGlvbnMubWVzc2FnZXMgVGhlIHZhbGlkYXRpb24gbWVzc2FnZXMuXG4gKi9cbmZ1bmN0aW9uIHN0cmluZyhydWxlLCB2YWx1ZSwgY2FsbGJhY2ssIHNvdXJjZSwgb3B0aW9ucykge1xuICB2YXIgZXJyb3JzID0gW107XG4gIHZhciB2YWxpZGF0ZSA9IHJ1bGUucmVxdWlyZWQgfHwgIXJ1bGUucmVxdWlyZWQgJiYgc291cmNlLmhhc093blByb3BlcnR5KHJ1bGUuZmllbGQpO1xuICBpZiAodmFsaWRhdGUpIHtcbiAgICBpZiAoaXNFbXB0eVZhbHVlKHZhbHVlLCAnc3RyaW5nJykgJiYgIXJ1bGUucmVxdWlyZWQpIHtcbiAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgIH1cbiAgICBydWxlcy5yZXF1aXJlZChydWxlLCB2YWx1ZSwgc291cmNlLCBlcnJvcnMsIG9wdGlvbnMsICdzdHJpbmcnKTtcbiAgICBpZiAoIWlzRW1wdHlWYWx1ZSh2YWx1ZSwgJ3N0cmluZycpKSB7XG4gICAgICBydWxlcy50eXBlKHJ1bGUsIHZhbHVlLCBzb3VyY2UsIGVycm9ycywgb3B0aW9ucyk7XG4gICAgICBydWxlcy5yYW5nZShydWxlLCB2YWx1ZSwgc291cmNlLCBlcnJvcnMsIG9wdGlvbnMpO1xuICAgICAgcnVsZXMucGF0dGVybihydWxlLCB2YWx1ZSwgc291cmNlLCBlcnJvcnMsIG9wdGlvbnMpO1xuICAgICAgaWYgKHJ1bGUud2hpdGVzcGFjZSA9PT0gdHJ1ZSkge1xuICAgICAgICBydWxlcy53aGl0ZXNwYWNlKHJ1bGUsIHZhbHVlLCBzb3VyY2UsIGVycm9ycywgb3B0aW9ucyk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNhbGxiYWNrKGVycm9ycyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHN0cmluZzsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/async-validator/es/validator/string.js\n");

/***/ }),

/***/ "./node_modules/async-validator/es/validator/type.js":
/*!***********************************************************!*\
  !*** ./node_modules/async-validator/es/validator/type.js ***!
  \***********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _rule___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../rule/ */ \"./node_modules/async-validator/es/rule/index.js\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util */ \"./node_modules/async-validator/es/util.js\");\n\n\n\nfunction type(rule, value, callback, source, options) {\n  var ruleType = rule.type;\n  var errors = [];\n  var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n  if (validate) {\n    if ((0,_util__WEBPACK_IMPORTED_MODULE_1__.isEmptyValue)(value, ruleType) && !rule.required) {\n      return callback();\n    }\n    _rule___WEBPACK_IMPORTED_MODULE_0__[\"default\"].required(rule, value, source, errors, options, ruleType);\n    if (!(0,_util__WEBPACK_IMPORTED_MODULE_1__.isEmptyValue)(value, ruleType)) {\n      _rule___WEBPACK_IMPORTED_MODULE_0__[\"default\"].type(rule, value, source, errors, options);\n    }\n  }\n  callback(errors);\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (type);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXN5bmMtdmFsaWRhdG9yL2VzL3ZhbGlkYXRvci90eXBlLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUE2QjtBQUNVOztBQUV2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxtREFBWTtBQUNwQjtBQUNBO0FBQ0EsSUFBSSw4Q0FBSztBQUNULFNBQVMsbURBQVk7QUFDckIsTUFBTSw4Q0FBSztBQUNYO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlFQUFlLElBQUkiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXN5bmMtdmFsaWRhdG9yL2VzL3ZhbGlkYXRvci90eXBlLmpzPzcxMTIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHJ1bGVzIGZyb20gJy4uL3J1bGUvJztcbmltcG9ydCB7IGlzRW1wdHlWYWx1ZSB9IGZyb20gJy4uL3V0aWwnO1xuXG5mdW5jdGlvbiB0eXBlKHJ1bGUsIHZhbHVlLCBjYWxsYmFjaywgc291cmNlLCBvcHRpb25zKSB7XG4gIHZhciBydWxlVHlwZSA9IHJ1bGUudHlwZTtcbiAgdmFyIGVycm9ycyA9IFtdO1xuICB2YXIgdmFsaWRhdGUgPSBydWxlLnJlcXVpcmVkIHx8ICFydWxlLnJlcXVpcmVkICYmIHNvdXJjZS5oYXNPd25Qcm9wZXJ0eShydWxlLmZpZWxkKTtcbiAgaWYgKHZhbGlkYXRlKSB7XG4gICAgaWYgKGlzRW1wdHlWYWx1ZSh2YWx1ZSwgcnVsZVR5cGUpICYmICFydWxlLnJlcXVpcmVkKSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICB9XG4gICAgcnVsZXMucmVxdWlyZWQocnVsZSwgdmFsdWUsIHNvdXJjZSwgZXJyb3JzLCBvcHRpb25zLCBydWxlVHlwZSk7XG4gICAgaWYgKCFpc0VtcHR5VmFsdWUodmFsdWUsIHJ1bGVUeXBlKSkge1xuICAgICAgcnVsZXMudHlwZShydWxlLCB2YWx1ZSwgc291cmNlLCBlcnJvcnMsIG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuICBjYWxsYmFjayhlcnJvcnMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCB0eXBlOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/async-validator/es/validator/type.js\n");

/***/ }),

/***/ "./node_modules/axios/index.js":
/*!*************************************!*\
  !*** ./node_modules/axios/index.js ***!
  \*************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

eval("module.exports = __webpack_require__(/*! ./lib/axios */ \"./node_modules/axios/lib/axios.js\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXhpb3MvaW5kZXguanMiLCJtYXBwaW5ncyI6IkFBQUEsNEZBQXVDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2luZGV4LmpzPzUzZTkiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2xpYi9heGlvcycpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/axios/index.js\n");

/***/ }),

/***/ "./node_modules/axios/lib/adapters/xhr.js":
/*!************************************************!*\
  !*** ./node_modules/axios/lib/adapters/xhr.js ***!
  \************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";
eval("\n\nvar utils = __webpack_require__(/*! ./../utils */ \"./node_modules/axios/lib/utils.js\");\nvar settle = __webpack_require__(/*! ./../core/settle */ \"./node_modules/axios/lib/core/settle.js\");\nvar cookies = __webpack_require__(/*! ./../helpers/cookies */ \"./node_modules/axios/lib/helpers/cookies.js\");\nvar buildURL = __webpack_require__(/*! ./../helpers/buildURL */ \"./node_modules/axios/lib/helpers/buildURL.js\");\nvar buildFullPath = __webpack_require__(/*! ../core/buildFullPath */ \"./node_modules/axios/lib/core/buildFullPath.js\");\nvar parseHeaders = __webpack_require__(/*! ./../helpers/parseHeaders */ \"./node_modules/axios/lib/helpers/parseHeaders.js\");\nvar isURLSameOrigin = __webpack_require__(/*! ./../helpers/isURLSameOrigin */ \"./node_modules/axios/lib/helpers/isURLSameOrigin.js\");\nvar createError = __webpack_require__(/*! ../core/createError */ \"./node_modules/axios/lib/core/createError.js\");\n\nmodule.exports = function xhrAdapter(config) {\n  return new Promise(function dispatchXhrRequest(resolve, reject) {\n    var requestData = config.data;\n    var requestHeaders = config.headers;\n    var responseType = config.responseType;\n\n    if (utils.isFormData(requestData)) {\n      delete requestHeaders['Content-Type']; // Let the browser set it\n    }\n\n    var request = new XMLHttpRequest();\n\n    // HTTP basic authentication\n    if (config.auth) {\n      var username = config.auth.username || '';\n      var password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : '';\n      requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n    }\n\n    var fullPath = buildFullPath(config.baseURL, config.url);\n    request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);\n\n    // Set the request timeout in MS\n    request.timeout = config.timeout;\n\n    function onloadend() {\n      if (!request) {\n        return;\n      }\n      // Prepare the response\n      var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n      var responseData = !responseType || responseType === 'text' ||  responseType === 'json' ?\n        request.responseText : request.response;\n      var response = {\n        data: responseData,\n        status: request.status,\n        statusText: request.statusText,\n        headers: responseHeaders,\n        config: config,\n        request: request\n      };\n\n      settle(resolve, reject, response);\n\n      // Clean up request\n      request = null;\n    }\n\n    if ('onloadend' in request) {\n      // Use onloadend if available\n      request.onloadend = onloadend;\n    } else {\n      // Listen for ready state to emulate onloadend\n      request.onreadystatechange = function handleLoad() {\n        if (!request || request.readyState !== 4) {\n          return;\n        }\n\n        // The request errored out and we didn't get a response, this will be\n        // handled by onerror instead\n        // With one exception: request that using file: protocol, most browsers\n        // will return status as 0 even though it's a successful request\n        if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n          return;\n        }\n        // readystate handler is calling before onerror or ontimeout handlers,\n        // so we should call onloadend on the next 'tick'\n        setTimeout(onloadend);\n      };\n    }\n\n    // Handle browser request cancellation (as opposed to a manual cancellation)\n    request.onabort = function handleAbort() {\n      if (!request) {\n        return;\n      }\n\n      reject(createError('Request aborted', config, 'ECONNABORTED', request));\n\n      // Clean up request\n      request = null;\n    };\n\n    // Handle low level network errors\n    request.onerror = function handleError() {\n      // Real errors are hidden from us by the browser\n      // onerror should only fire if it's a network error\n      reject(createError('Network Error', config, null, request));\n\n      // Clean up request\n      request = null;\n    };\n\n    // Handle timeout\n    request.ontimeout = function handleTimeout() {\n      var timeoutErrorMessage = 'timeout of ' + config.timeout + 'ms exceeded';\n      if (config.timeoutErrorMessage) {\n        timeoutErrorMessage = config.timeoutErrorMessage;\n      }\n      reject(createError(\n        timeoutErrorMessage,\n        config,\n        config.transitional && config.transitional.clarifyTimeoutError ? 'ETIMEDOUT' : 'ECONNABORTED',\n        request));\n\n      // Clean up request\n      request = null;\n    };\n\n    // Add xsrf header\n    // This is only done if running in a standard browser environment.\n    // Specifically not if we're in a web worker, or react-native.\n    if (utils.isStandardBrowserEnv()) {\n      // Add xsrf header\n      var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ?\n        cookies.read(config.xsrfCookieName) :\n        undefined;\n\n      if (xsrfValue) {\n        requestHeaders[config.xsrfHeaderName] = xsrfValue;\n      }\n    }\n\n    // Add headers to the request\n    if ('setRequestHeader' in request) {\n      utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n        if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n          // Remove Content-Type if data is undefined\n          delete requestHeaders[key];\n        } else {\n          // Otherwise add header to the request\n          request.setRequestHeader(key, val);\n        }\n      });\n    }\n\n    // Add withCredentials to request if needed\n    if (!utils.isUndefined(config.withCredentials)) {\n      request.withCredentials = !!config.withCredentials;\n    }\n\n    // Add responseType to request if needed\n    if (responseType && responseType !== 'json') {\n      request.responseType = config.responseType;\n    }\n\n    // Handle progress if needed\n    if (typeof config.onDownloadProgress === 'function') {\n      request.addEventListener('progress', config.onDownloadProgress);\n    }\n\n    // Not all browsers support upload events\n    if (typeof config.onUploadProgress === 'function' && request.upload) {\n      request.upload.addEventListener('progress', config.onUploadProgress);\n    }\n\n    if (config.cancelToken) {\n      // Handle cancellation\n      config.cancelToken.promise.then(function onCanceled(cancel) {\n        if (!request) {\n          return;\n        }\n\n        request.abort();\n        reject(cancel);\n        // Clean up request\n        request = null;\n      });\n    }\n\n    if (!requestData) {\n      requestData = null;\n    }\n\n    // Send the request\n    request.send(requestData);\n  });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2FkYXB0ZXJzL3hoci5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMscURBQVk7QUFDaEMsYUFBYSxtQkFBTyxDQUFDLGlFQUFrQjtBQUN2QyxjQUFjLG1CQUFPLENBQUMseUVBQXNCO0FBQzVDLGVBQWUsbUJBQU8sQ0FBQywyRUFBdUI7QUFDOUMsb0JBQW9CLG1CQUFPLENBQUMsNkVBQXVCO0FBQ25ELG1CQUFtQixtQkFBTyxDQUFDLG1GQUEyQjtBQUN0RCxzQkFBc0IsbUJBQU8sQ0FBQyx5RkFBOEI7QUFDNUQsa0JBQWtCLG1CQUFPLENBQUMseUVBQXFCOztBQUUvQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsNkNBQTZDO0FBQzdDOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9hZGFwdGVycy94aHIuanM/MWE1YyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcbnZhciBzZXR0bGUgPSByZXF1aXJlKCcuLy4uL2NvcmUvc2V0dGxlJyk7XG52YXIgY29va2llcyA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9jb29raWVzJyk7XG52YXIgYnVpbGRVUkwgPSByZXF1aXJlKCcuLy4uL2hlbHBlcnMvYnVpbGRVUkwnKTtcbnZhciBidWlsZEZ1bGxQYXRoID0gcmVxdWlyZSgnLi4vY29yZS9idWlsZEZ1bGxQYXRoJyk7XG52YXIgcGFyc2VIZWFkZXJzID0gcmVxdWlyZSgnLi8uLi9oZWxwZXJzL3BhcnNlSGVhZGVycycpO1xudmFyIGlzVVJMU2FtZU9yaWdpbiA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9pc1VSTFNhbWVPcmlnaW4nKTtcbnZhciBjcmVhdGVFcnJvciA9IHJlcXVpcmUoJy4uL2NvcmUvY3JlYXRlRXJyb3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB4aHJBZGFwdGVyKGNvbmZpZykge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gZGlzcGF0Y2hYaHJSZXF1ZXN0KHJlc29sdmUsIHJlamVjdCkge1xuICAgIHZhciByZXF1ZXN0RGF0YSA9IGNvbmZpZy5kYXRhO1xuICAgIHZhciByZXF1ZXN0SGVhZGVycyA9IGNvbmZpZy5oZWFkZXJzO1xuICAgIHZhciByZXNwb25zZVR5cGUgPSBjb25maWcucmVzcG9uc2VUeXBlO1xuXG4gICAgaWYgKHV0aWxzLmlzRm9ybURhdGEocmVxdWVzdERhdGEpKSB7XG4gICAgICBkZWxldGUgcmVxdWVzdEhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddOyAvLyBMZXQgdGhlIGJyb3dzZXIgc2V0IGl0XG4gICAgfVxuXG4gICAgdmFyIHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgIC8vIEhUVFAgYmFzaWMgYXV0aGVudGljYXRpb25cbiAgICBpZiAoY29uZmlnLmF1dGgpIHtcbiAgICAgIHZhciB1c2VybmFtZSA9IGNvbmZpZy5hdXRoLnVzZXJuYW1lIHx8ICcnO1xuICAgICAgdmFyIHBhc3N3b3JkID0gY29uZmlnLmF1dGgucGFzc3dvcmQgPyB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoY29uZmlnLmF1dGgucGFzc3dvcmQpKSA6ICcnO1xuICAgICAgcmVxdWVzdEhlYWRlcnMuQXV0aG9yaXphdGlvbiA9ICdCYXNpYyAnICsgYnRvYSh1c2VybmFtZSArICc6JyArIHBhc3N3b3JkKTtcbiAgICB9XG5cbiAgICB2YXIgZnVsbFBhdGggPSBidWlsZEZ1bGxQYXRoKGNvbmZpZy5iYXNlVVJMLCBjb25maWcudXJsKTtcbiAgICByZXF1ZXN0Lm9wZW4oY29uZmlnLm1ldGhvZC50b1VwcGVyQ2FzZSgpLCBidWlsZFVSTChmdWxsUGF0aCwgY29uZmlnLnBhcmFtcywgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIpLCB0cnVlKTtcblxuICAgIC8vIFNldCB0aGUgcmVxdWVzdCB0aW1lb3V0IGluIE1TXG4gICAgcmVxdWVzdC50aW1lb3V0ID0gY29uZmlnLnRpbWVvdXQ7XG5cbiAgICBmdW5jdGlvbiBvbmxvYWRlbmQoKSB7XG4gICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gUHJlcGFyZSB0aGUgcmVzcG9uc2VcbiAgICAgIHZhciByZXNwb25zZUhlYWRlcnMgPSAnZ2V0QWxsUmVzcG9uc2VIZWFkZXJzJyBpbiByZXF1ZXN0ID8gcGFyc2VIZWFkZXJzKHJlcXVlc3QuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpIDogbnVsbDtcbiAgICAgIHZhciByZXNwb25zZURhdGEgPSAhcmVzcG9uc2VUeXBlIHx8IHJlc3BvbnNlVHlwZSA9PT0gJ3RleHQnIHx8ICByZXNwb25zZVR5cGUgPT09ICdqc29uJyA/XG4gICAgICAgIHJlcXVlc3QucmVzcG9uc2VUZXh0IDogcmVxdWVzdC5yZXNwb25zZTtcbiAgICAgIHZhciByZXNwb25zZSA9IHtcbiAgICAgICAgZGF0YTogcmVzcG9uc2VEYXRhLFxuICAgICAgICBzdGF0dXM6IHJlcXVlc3Quc3RhdHVzLFxuICAgICAgICBzdGF0dXNUZXh0OiByZXF1ZXN0LnN0YXR1c1RleHQsXG4gICAgICAgIGhlYWRlcnM6IHJlc3BvbnNlSGVhZGVycyxcbiAgICAgICAgY29uZmlnOiBjb25maWcsXG4gICAgICAgIHJlcXVlc3Q6IHJlcXVlc3RcbiAgICAgIH07XG5cbiAgICAgIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHJlc3BvbnNlKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKCdvbmxvYWRlbmQnIGluIHJlcXVlc3QpIHtcbiAgICAgIC8vIFVzZSBvbmxvYWRlbmQgaWYgYXZhaWxhYmxlXG4gICAgICByZXF1ZXN0Lm9ubG9hZGVuZCA9IG9ubG9hZGVuZDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTGlzdGVuIGZvciByZWFkeSBzdGF0ZSB0byBlbXVsYXRlIG9ubG9hZGVuZFxuICAgICAgcmVxdWVzdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiBoYW5kbGVMb2FkKCkge1xuICAgICAgICBpZiAoIXJlcXVlc3QgfHwgcmVxdWVzdC5yZWFkeVN0YXRlICE9PSA0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhlIHJlcXVlc3QgZXJyb3JlZCBvdXQgYW5kIHdlIGRpZG4ndCBnZXQgYSByZXNwb25zZSwgdGhpcyB3aWxsIGJlXG4gICAgICAgIC8vIGhhbmRsZWQgYnkgb25lcnJvciBpbnN0ZWFkXG4gICAgICAgIC8vIFdpdGggb25lIGV4Y2VwdGlvbjogcmVxdWVzdCB0aGF0IHVzaW5nIGZpbGU6IHByb3RvY29sLCBtb3N0IGJyb3dzZXJzXG4gICAgICAgIC8vIHdpbGwgcmV0dXJuIHN0YXR1cyBhcyAwIGV2ZW4gdGhvdWdoIGl0J3MgYSBzdWNjZXNzZnVsIHJlcXVlc3RcbiAgICAgICAgaWYgKHJlcXVlc3Quc3RhdHVzID09PSAwICYmICEocmVxdWVzdC5yZXNwb25zZVVSTCAmJiByZXF1ZXN0LnJlc3BvbnNlVVJMLmluZGV4T2YoJ2ZpbGU6JykgPT09IDApKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIHJlYWR5c3RhdGUgaGFuZGxlciBpcyBjYWxsaW5nIGJlZm9yZSBvbmVycm9yIG9yIG9udGltZW91dCBoYW5kbGVycyxcbiAgICAgICAgLy8gc28gd2Ugc2hvdWxkIGNhbGwgb25sb2FkZW5kIG9uIHRoZSBuZXh0ICd0aWNrJ1xuICAgICAgICBzZXRUaW1lb3V0KG9ubG9hZGVuZCk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBicm93c2VyIHJlcXVlc3QgY2FuY2VsbGF0aW9uIChhcyBvcHBvc2VkIHRvIGEgbWFudWFsIGNhbmNlbGxhdGlvbilcbiAgICByZXF1ZXN0Lm9uYWJvcnQgPSBmdW5jdGlvbiBoYW5kbGVBYm9ydCgpIHtcbiAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHJlamVjdChjcmVhdGVFcnJvcignUmVxdWVzdCBhYm9ydGVkJywgY29uZmlnLCAnRUNPTk5BQk9SVEVEJywgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gSGFuZGxlIGxvdyBsZXZlbCBuZXR3b3JrIGVycm9yc1xuICAgIHJlcXVlc3Qub25lcnJvciA9IGZ1bmN0aW9uIGhhbmRsZUVycm9yKCkge1xuICAgICAgLy8gUmVhbCBlcnJvcnMgYXJlIGhpZGRlbiBmcm9tIHVzIGJ5IHRoZSBicm93c2VyXG4gICAgICAvLyBvbmVycm9yIHNob3VsZCBvbmx5IGZpcmUgaWYgaXQncyBhIG5ldHdvcmsgZXJyb3JcbiAgICAgIHJlamVjdChjcmVhdGVFcnJvcignTmV0d29yayBFcnJvcicsIGNvbmZpZywgbnVsbCwgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gSGFuZGxlIHRpbWVvdXRcbiAgICByZXF1ZXN0Lm9udGltZW91dCA9IGZ1bmN0aW9uIGhhbmRsZVRpbWVvdXQoKSB7XG4gICAgICB2YXIgdGltZW91dEVycm9yTWVzc2FnZSA9ICd0aW1lb3V0IG9mICcgKyBjb25maWcudGltZW91dCArICdtcyBleGNlZWRlZCc7XG4gICAgICBpZiAoY29uZmlnLnRpbWVvdXRFcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgdGltZW91dEVycm9yTWVzc2FnZSA9IGNvbmZpZy50aW1lb3V0RXJyb3JNZXNzYWdlO1xuICAgICAgfVxuICAgICAgcmVqZWN0KGNyZWF0ZUVycm9yKFxuICAgICAgICB0aW1lb3V0RXJyb3JNZXNzYWdlLFxuICAgICAgICBjb25maWcsXG4gICAgICAgIGNvbmZpZy50cmFuc2l0aW9uYWwgJiYgY29uZmlnLnRyYW5zaXRpb25hbC5jbGFyaWZ5VGltZW91dEVycm9yID8gJ0VUSU1FRE9VVCcgOiAnRUNPTk5BQk9SVEVEJyxcbiAgICAgICAgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gQWRkIHhzcmYgaGVhZGVyXG4gICAgLy8gVGhpcyBpcyBvbmx5IGRvbmUgaWYgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgZW52aXJvbm1lbnQuXG4gICAgLy8gU3BlY2lmaWNhbGx5IG5vdCBpZiB3ZSdyZSBpbiBhIHdlYiB3b3JrZXIsIG9yIHJlYWN0LW5hdGl2ZS5cbiAgICBpZiAodXRpbHMuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSkge1xuICAgICAgLy8gQWRkIHhzcmYgaGVhZGVyXG4gICAgICB2YXIgeHNyZlZhbHVlID0gKGNvbmZpZy53aXRoQ3JlZGVudGlhbHMgfHwgaXNVUkxTYW1lT3JpZ2luKGZ1bGxQYXRoKSkgJiYgY29uZmlnLnhzcmZDb29raWVOYW1lID9cbiAgICAgICAgY29va2llcy5yZWFkKGNvbmZpZy54c3JmQ29va2llTmFtZSkgOlxuICAgICAgICB1bmRlZmluZWQ7XG5cbiAgICAgIGlmICh4c3JmVmFsdWUpIHtcbiAgICAgICAgcmVxdWVzdEhlYWRlcnNbY29uZmlnLnhzcmZIZWFkZXJOYW1lXSA9IHhzcmZWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBZGQgaGVhZGVycyB0byB0aGUgcmVxdWVzdFxuICAgIGlmICgnc2V0UmVxdWVzdEhlYWRlcicgaW4gcmVxdWVzdCkge1xuICAgICAgdXRpbHMuZm9yRWFjaChyZXF1ZXN0SGVhZGVycywgZnVuY3Rpb24gc2V0UmVxdWVzdEhlYWRlcih2YWwsIGtleSkge1xuICAgICAgICBpZiAodHlwZW9mIHJlcXVlc3REYXRhID09PSAndW5kZWZpbmVkJyAmJiBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbnRlbnQtdHlwZScpIHtcbiAgICAgICAgICAvLyBSZW1vdmUgQ29udGVudC1UeXBlIGlmIGRhdGEgaXMgdW5kZWZpbmVkXG4gICAgICAgICAgZGVsZXRlIHJlcXVlc3RIZWFkZXJzW2tleV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gT3RoZXJ3aXNlIGFkZCBoZWFkZXIgdG8gdGhlIHJlcXVlc3RcbiAgICAgICAgICByZXF1ZXN0LnNldFJlcXVlc3RIZWFkZXIoa2V5LCB2YWwpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBBZGQgd2l0aENyZWRlbnRpYWxzIHRvIHJlcXVlc3QgaWYgbmVlZGVkXG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChjb25maWcud2l0aENyZWRlbnRpYWxzKSkge1xuICAgICAgcmVxdWVzdC53aXRoQ3JlZGVudGlhbHMgPSAhIWNvbmZpZy53aXRoQ3JlZGVudGlhbHM7XG4gICAgfVxuXG4gICAgLy8gQWRkIHJlc3BvbnNlVHlwZSB0byByZXF1ZXN0IGlmIG5lZWRlZFxuICAgIGlmIChyZXNwb25zZVR5cGUgJiYgcmVzcG9uc2VUeXBlICE9PSAnanNvbicpIHtcbiAgICAgIHJlcXVlc3QucmVzcG9uc2VUeXBlID0gY29uZmlnLnJlc3BvbnNlVHlwZTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgcHJvZ3Jlc3MgaWYgbmVlZGVkXG4gICAgaWYgKHR5cGVvZiBjb25maWcub25Eb3dubG9hZFByb2dyZXNzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgY29uZmlnLm9uRG93bmxvYWRQcm9ncmVzcyk7XG4gICAgfVxuXG4gICAgLy8gTm90IGFsbCBicm93c2VycyBzdXBwb3J0IHVwbG9hZCBldmVudHNcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5vblVwbG9hZFByb2dyZXNzID09PSAnZnVuY3Rpb24nICYmIHJlcXVlc3QudXBsb2FkKSB7XG4gICAgICByZXF1ZXN0LnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIGNvbmZpZy5vblVwbG9hZFByb2dyZXNzKTtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnLmNhbmNlbFRva2VuKSB7XG4gICAgICAvLyBIYW5kbGUgY2FuY2VsbGF0aW9uXG4gICAgICBjb25maWcuY2FuY2VsVG9rZW4ucHJvbWlzZS50aGVuKGZ1bmN0aW9uIG9uQ2FuY2VsZWQoY2FuY2VsKSB7XG4gICAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlcXVlc3QuYWJvcnQoKTtcbiAgICAgICAgcmVqZWN0KGNhbmNlbCk7XG4gICAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoIXJlcXVlc3REYXRhKSB7XG4gICAgICByZXF1ZXN0RGF0YSA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gU2VuZCB0aGUgcmVxdWVzdFxuICAgIHJlcXVlc3Quc2VuZChyZXF1ZXN0RGF0YSk7XG4gIH0pO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/axios/lib/adapters/xhr.js\n");

/***/ }),

/***/ "./node_modules/axios/lib/axios.js":
/*!*****************************************!*\
  !*** ./node_modules/axios/lib/axios.js ***!
  \*****************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";
eval("\n\nvar utils = __webpack_require__(/*! ./utils */ \"./node_modules/axios/lib/utils.js\");\nvar bind = __webpack_require__(/*! ./helpers/bind */ \"./node_modules/axios/lib/helpers/bind.js\");\nvar Axios = __webpack_require__(/*! ./core/Axios */ \"./node_modules/axios/lib/core/Axios.js\");\nvar mergeConfig = __webpack_require__(/*! ./core/mergeConfig */ \"./node_modules/axios/lib/core/mergeConfig.js\");\nvar defaults = __webpack_require__(/*! ./defaults */ \"./node_modules/axios/lib/defaults.js\");\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n * @return {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n  var context = new Axios(defaultConfig);\n  var instance = bind(Axios.prototype.request, context);\n\n  // Copy axios.prototype to instance\n  utils.extend(instance, Axios.prototype, context);\n\n  // Copy context to instance\n  utils.extend(instance, context);\n\n  return instance;\n}\n\n// Create the default instance to be exported\nvar axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Factory for creating new instances\naxios.create = function create(instanceConfig) {\n  return createInstance(mergeConfig(axios.defaults, instanceConfig));\n};\n\n// Expose Cancel & CancelToken\naxios.Cancel = __webpack_require__(/*! ./cancel/Cancel */ \"./node_modules/axios/lib/cancel/Cancel.js\");\naxios.CancelToken = __webpack_require__(/*! ./cancel/CancelToken */ \"./node_modules/axios/lib/cancel/CancelToken.js\");\naxios.isCancel = __webpack_require__(/*! ./cancel/isCancel */ \"./node_modules/axios/lib/cancel/isCancel.js\");\n\n// Expose all/spread\naxios.all = function all(promises) {\n  return Promise.all(promises);\n};\naxios.spread = __webpack_require__(/*! ./helpers/spread */ \"./node_modules/axios/lib/helpers/spread.js\");\n\n// Expose isAxiosError\naxios.isAxiosError = __webpack_require__(/*! ./helpers/isAxiosError */ \"./node_modules/axios/lib/helpers/isAxiosError.js\");\n\nmodule.exports = axios;\n\n// Allow use of default import syntax in TypeScript\nmodule.exports[\"default\"] = axios;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2F4aW9zLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFlBQVksbUJBQU8sQ0FBQyxrREFBUztBQUM3QixXQUFXLG1CQUFPLENBQUMsZ0VBQWdCO0FBQ25DLFlBQVksbUJBQU8sQ0FBQyw0REFBYztBQUNsQyxrQkFBa0IsbUJBQU8sQ0FBQyx3RUFBb0I7QUFDOUMsZUFBZSxtQkFBTyxDQUFDLHdEQUFZOztBQUVuQztBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGVBQWUsbUJBQU8sQ0FBQyxrRUFBaUI7QUFDeEMsb0JBQW9CLG1CQUFPLENBQUMsNEVBQXNCO0FBQ2xELGlCQUFpQixtQkFBTyxDQUFDLHNFQUFtQjs7QUFFNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLG1CQUFPLENBQUMsb0VBQWtCOztBQUV6QztBQUNBLHFCQUFxQixtQkFBTyxDQUFDLGdGQUF3Qjs7QUFFckQ7O0FBRUE7QUFDQSx5QkFBc0IiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2F4aW9zLmpzP2ZhZDYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4vaGVscGVycy9iaW5kJyk7XG52YXIgQXhpb3MgPSByZXF1aXJlKCcuL2NvcmUvQXhpb3MnKTtcbnZhciBtZXJnZUNvbmZpZyA9IHJlcXVpcmUoJy4vY29yZS9tZXJnZUNvbmZpZycpO1xudmFyIGRlZmF1bHRzID0gcmVxdWlyZSgnLi9kZWZhdWx0cycpO1xuXG4vKipcbiAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiBBeGlvc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBkZWZhdWx0Q29uZmlnIFRoZSBkZWZhdWx0IGNvbmZpZyBmb3IgdGhlIGluc3RhbmNlXG4gKiBAcmV0dXJuIHtBeGlvc30gQSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqL1xuZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2UoZGVmYXVsdENvbmZpZykge1xuICB2YXIgY29udGV4dCA9IG5ldyBBeGlvcyhkZWZhdWx0Q29uZmlnKTtcbiAgdmFyIGluc3RhbmNlID0gYmluZChBeGlvcy5wcm90b3R5cGUucmVxdWVzdCwgY29udGV4dCk7XG5cbiAgLy8gQ29weSBheGlvcy5wcm90b3R5cGUgdG8gaW5zdGFuY2VcbiAgdXRpbHMuZXh0ZW5kKGluc3RhbmNlLCBBeGlvcy5wcm90b3R5cGUsIGNvbnRleHQpO1xuXG4gIC8vIENvcHkgY29udGV4dCB0byBpbnN0YW5jZVxuICB1dGlscy5leHRlbmQoaW5zdGFuY2UsIGNvbnRleHQpO1xuXG4gIHJldHVybiBpbnN0YW5jZTtcbn1cblxuLy8gQ3JlYXRlIHRoZSBkZWZhdWx0IGluc3RhbmNlIHRvIGJlIGV4cG9ydGVkXG52YXIgYXhpb3MgPSBjcmVhdGVJbnN0YW5jZShkZWZhdWx0cyk7XG5cbi8vIEV4cG9zZSBBeGlvcyBjbGFzcyB0byBhbGxvdyBjbGFzcyBpbmhlcml0YW5jZVxuYXhpb3MuQXhpb3MgPSBBeGlvcztcblxuLy8gRmFjdG9yeSBmb3IgY3JlYXRpbmcgbmV3IGluc3RhbmNlc1xuYXhpb3MuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKGluc3RhbmNlQ29uZmlnKSB7XG4gIHJldHVybiBjcmVhdGVJbnN0YW5jZShtZXJnZUNvbmZpZyhheGlvcy5kZWZhdWx0cywgaW5zdGFuY2VDb25maWcpKTtcbn07XG5cbi8vIEV4cG9zZSBDYW5jZWwgJiBDYW5jZWxUb2tlblxuYXhpb3MuQ2FuY2VsID0gcmVxdWlyZSgnLi9jYW5jZWwvQ2FuY2VsJyk7XG5heGlvcy5DYW5jZWxUb2tlbiA9IHJlcXVpcmUoJy4vY2FuY2VsL0NhbmNlbFRva2VuJyk7XG5heGlvcy5pc0NhbmNlbCA9IHJlcXVpcmUoJy4vY2FuY2VsL2lzQ2FuY2VsJyk7XG5cbi8vIEV4cG9zZSBhbGwvc3ByZWFkXG5heGlvcy5hbGwgPSBmdW5jdGlvbiBhbGwocHJvbWlzZXMpIHtcbiAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKTtcbn07XG5heGlvcy5zcHJlYWQgPSByZXF1aXJlKCcuL2hlbHBlcnMvc3ByZWFkJyk7XG5cbi8vIEV4cG9zZSBpc0F4aW9zRXJyb3JcbmF4aW9zLmlzQXhpb3NFcnJvciA9IHJlcXVpcmUoJy4vaGVscGVycy9pc0F4aW9zRXJyb3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBheGlvcztcblxuLy8gQWxsb3cgdXNlIG9mIGRlZmF1bHQgaW1wb3J0IHN5bnRheCBpbiBUeXBlU2NyaXB0XG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gYXhpb3M7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/axios/lib/axios.js\n");

/***/ }),

/***/ "./node_modules/axios/lib/cancel/Cancel.js":
/*!*************************************************!*\
  !*** ./node_modules/axios/lib/cancel/Cancel.js ***!
  \*************************************************/
/***/ ((module) => {

"use strict";
eval("\n\n/**\n * A `Cancel` is an object that is thrown when an operation is canceled.\n *\n * @class\n * @param {string=} message The message.\n */\nfunction Cancel(message) {\n  this.message = message;\n}\n\nCancel.prototype.toString = function toString() {\n  return 'Cancel' + (this.message ? ': ' + this.message : '');\n};\n\nCancel.prototype.__CANCEL__ = true;\n\nmodule.exports = Cancel;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NhbmNlbC9DYW5jZWwuanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFNBQVM7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvQ2FuY2VsLmpzP2QyYTIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIEEgYENhbmNlbGAgaXMgYW4gb2JqZWN0IHRoYXQgaXMgdGhyb3duIHdoZW4gYW4gb3BlcmF0aW9uIGlzIGNhbmNlbGVkLlxuICpcbiAqIEBjbGFzc1xuICogQHBhcmFtIHtzdHJpbmc9fSBtZXNzYWdlIFRoZSBtZXNzYWdlLlxuICovXG5mdW5jdGlvbiBDYW5jZWwobWVzc2FnZSkge1xuICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xufVxuXG5DYW5jZWwucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiAnQ2FuY2VsJyArICh0aGlzLm1lc3NhZ2UgPyAnOiAnICsgdGhpcy5tZXNzYWdlIDogJycpO1xufTtcblxuQ2FuY2VsLnByb3RvdHlwZS5fX0NBTkNFTF9fID0gdHJ1ZTtcblxubW9kdWxlLmV4cG9ydHMgPSBDYW5jZWw7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/axios/lib/cancel/Cancel.js\n");

/***/ }),

/***/ "./node_modules/axios/lib/cancel/CancelToken.js":
/*!******************************************************!*\
  !*** ./node_modules/axios/lib/cancel/CancelToken.js ***!
  \******************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";
eval("\n\nvar Cancel = __webpack_require__(/*! ./Cancel */ \"./node_modules/axios/lib/cancel/Cancel.js\");\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @class\n * @param {Function} executor The executor function.\n */\nfunction CancelToken(executor) {\n  if (typeof executor !== 'function') {\n    throw new TypeError('executor must be a function.');\n  }\n\n  var resolvePromise;\n  this.promise = new Promise(function promiseExecutor(resolve) {\n    resolvePromise = resolve;\n  });\n\n  var token = this;\n  executor(function cancel(message) {\n    if (token.reason) {\n      // Cancellation has already been requested\n      return;\n    }\n\n    token.reason = new Cancel(message);\n    resolvePromise(token.reason);\n  });\n}\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nCancelToken.prototype.throwIfRequested = function throwIfRequested() {\n  if (this.reason) {\n    throw this.reason;\n  }\n};\n\n/**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\nCancelToken.source = function source() {\n  var cancel;\n  var token = new CancelToken(function executor(c) {\n    cancel = c;\n  });\n  return {\n    token: token,\n    cancel: cancel\n  };\n};\n\nmodule.exports = CancelToken;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NhbmNlbC9DYW5jZWxUb2tlbi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsMkRBQVU7O0FBRS9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxVQUFVO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL0NhbmNlbFRva2VuLmpzPzcyYzgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgQ2FuY2VsID0gcmVxdWlyZSgnLi9DYW5jZWwnKTtcblxuLyoqXG4gKiBBIGBDYW5jZWxUb2tlbmAgaXMgYW4gb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVxdWVzdCBjYW5jZWxsYXRpb24gb2YgYW4gb3BlcmF0aW9uLlxuICpcbiAqIEBjbGFzc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gZXhlY3V0b3IgVGhlIGV4ZWN1dG9yIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBDYW5jZWxUb2tlbihleGVjdXRvcikge1xuICBpZiAodHlwZW9mIGV4ZWN1dG9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLicpO1xuICB9XG5cbiAgdmFyIHJlc29sdmVQcm9taXNlO1xuICB0aGlzLnByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiBwcm9taXNlRXhlY3V0b3IocmVzb2x2ZSkge1xuICAgIHJlc29sdmVQcm9taXNlID0gcmVzb2x2ZTtcbiAgfSk7XG5cbiAgdmFyIHRva2VuID0gdGhpcztcbiAgZXhlY3V0b3IoZnVuY3Rpb24gY2FuY2VsKG1lc3NhZ2UpIHtcbiAgICBpZiAodG9rZW4ucmVhc29uKSB7XG4gICAgICAvLyBDYW5jZWxsYXRpb24gaGFzIGFscmVhZHkgYmVlbiByZXF1ZXN0ZWRcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0b2tlbi5yZWFzb24gPSBuZXcgQ2FuY2VsKG1lc3NhZ2UpO1xuICAgIHJlc29sdmVQcm9taXNlKHRva2VuLnJlYXNvbik7XG4gIH0pO1xufVxuXG4vKipcbiAqIFRocm93cyBhIGBDYW5jZWxgIGlmIGNhbmNlbGxhdGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQuXG4gKi9cbkNhbmNlbFRva2VuLnByb3RvdHlwZS50aHJvd0lmUmVxdWVzdGVkID0gZnVuY3Rpb24gdGhyb3dJZlJlcXVlc3RlZCgpIHtcbiAgaWYgKHRoaXMucmVhc29uKSB7XG4gICAgdGhyb3cgdGhpcy5yZWFzb247XG4gIH1cbn07XG5cbi8qKlxuICogUmV0dXJucyBhbiBvYmplY3QgdGhhdCBjb250YWlucyBhIG5ldyBgQ2FuY2VsVG9rZW5gIGFuZCBhIGZ1bmN0aW9uIHRoYXQsIHdoZW4gY2FsbGVkLFxuICogY2FuY2VscyB0aGUgYENhbmNlbFRva2VuYC5cbiAqL1xuQ2FuY2VsVG9rZW4uc291cmNlID0gZnVuY3Rpb24gc291cmNlKCkge1xuICB2YXIgY2FuY2VsO1xuICB2YXIgdG9rZW4gPSBuZXcgQ2FuY2VsVG9rZW4oZnVuY3Rpb24gZXhlY3V0b3IoYykge1xuICAgIGNhbmNlbCA9IGM7XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIHRva2VuOiB0b2tlbixcbiAgICBjYW5jZWw6IGNhbmNlbFxuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBDYW5jZWxUb2tlbjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/axios/lib/cancel/CancelToken.js\n");

/***/ }),

/***/ "./node_modules/axios/lib/cancel/isCancel.js":
/*!***************************************************!*\
  !*** ./node_modules/axios/lib/cancel/isCancel.js ***!
  \***************************************************/
/***/ ((module) => {

"use strict";
eval("\n\nmodule.exports = function isCancel(value) {\n  return !!(value && value.__CANCEL__);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NhbmNlbC9pc0NhbmNlbC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NhbmNlbC9pc0NhbmNlbC5qcz9jMTdhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0NhbmNlbCh2YWx1ZSkge1xuICByZXR1cm4gISEodmFsdWUgJiYgdmFsdWUuX19DQU5DRUxfXyk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/axios/lib/cancel/isCancel.js\n");

/***/ }),

/***/ "./node_modules/axios/lib/core/Axios.js":
/*!**********************************************!*\
  !*** ./node_modules/axios/lib/core/Axios.js ***!
  \**********************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";
eval("\n\nvar utils = __webpack_require__(/*! ./../utils */ \"./node_modules/axios/lib/utils.js\");\nvar buildURL = __webpack_require__(/*! ../helpers/buildURL */ \"./node_modules/axios/lib/helpers/buildURL.js\");\nvar InterceptorManager = __webpack_require__(/*! ./InterceptorManager */ \"./node_modules/axios/lib/core/InterceptorManager.js\");\nvar dispatchRequest = __webpack_require__(/*! ./dispatchRequest */ \"./node_modules/axios/lib/core/dispatchRequest.js\");\nvar mergeConfig = __webpack_require__(/*! ./mergeConfig */ \"./node_modules/axios/lib/core/mergeConfig.js\");\nvar validator = __webpack_require__(/*! ../helpers/validator */ \"./node_modules/axios/lib/helpers/validator.js\");\n\nvar validators = validator.validators;\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n */\nfunction Axios(instanceConfig) {\n  this.defaults = instanceConfig;\n  this.interceptors = {\n    request: new InterceptorManager(),\n    response: new InterceptorManager()\n  };\n}\n\n/**\n * Dispatch a request\n *\n * @param {Object} config The config specific for this request (merged with this.defaults)\n */\nAxios.prototype.request = function request(config) {\n  /*eslint no-param-reassign:0*/\n  // Allow for axios('example/url'[, config]) a la fetch API\n  if (typeof config === 'string') {\n    config = arguments[1] || {};\n    config.url = arguments[0];\n  } else {\n    config = config || {};\n  }\n\n  config = mergeConfig(this.defaults, config);\n\n  // Set config.method\n  if (config.method) {\n    config.method = config.method.toLowerCase();\n  } else if (this.defaults.method) {\n    config.method = this.defaults.method.toLowerCase();\n  } else {\n    config.method = 'get';\n  }\n\n  var transitional = config.transitional;\n\n  if (transitional !== undefined) {\n    validator.assertOptions(transitional, {\n      silentJSONParsing: validators.transitional(validators.boolean, '1.0.0'),\n      forcedJSONParsing: validators.transitional(validators.boolean, '1.0.0'),\n      clarifyTimeoutError: validators.transitional(validators.boolean, '1.0.0')\n    }, false);\n  }\n\n  // filter out skipped interceptors\n  var requestInterceptorChain = [];\n  var synchronousRequestInterceptors = true;\n  this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n    if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n      return;\n    }\n\n    synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n    requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n  });\n\n  var responseInterceptorChain = [];\n  this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n    responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n  });\n\n  var promise;\n\n  if (!synchronousRequestInterceptors) {\n    var chain = [dispatchRequest, undefined];\n\n    Array.prototype.unshift.apply(chain, requestInterceptorChain);\n    chain = chain.concat(responseInterceptorChain);\n\n    promise = Promise.resolve(config);\n    while (chain.length) {\n      promise = promise.then(chain.shift(), chain.shift());\n    }\n\n    return promise;\n  }\n\n\n  var newConfig = config;\n  while (requestInterceptorChain.length) {\n    var onFulfilled = requestInterceptorChain.shift();\n    var onRejected = requestInterceptorChain.shift();\n    try {\n      newConfig = onFulfilled(newConfig);\n    } catch (error) {\n      onRejected(error);\n      break;\n    }\n  }\n\n  try {\n    promise = dispatchRequest(newConfig);\n  } catch (error) {\n    return Promise.reject(error);\n  }\n\n  while (responseInterceptorChain.length) {\n    promise = promise.then(responseInterceptorChain.shift(), responseInterceptorChain.shift());\n  }\n\n  return promise;\n};\n\nAxios.prototype.getUri = function getUri(config) {\n  config = mergeConfig(this.defaults, config);\n  return buildURL(config.url, config.params, config.paramsSerializer).replace(/^\\?/, '');\n};\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n  /*eslint func-names:0*/\n  Axios.prototype[method] = function(url, config) {\n    return this.request(mergeConfig(config || {}, {\n      method: method,\n      url: url,\n      data: (config || {}).data\n    }));\n  };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n  /*eslint func-names:0*/\n  Axios.prototype[method] = function(url, data, config) {\n    return this.request(mergeConfig(config || {}, {\n      method: method,\n      url: url,\n      data: data\n    }));\n  };\n});\n\nmodule.exports = Axios;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvQXhpb3MuanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsWUFBWSxtQkFBTyxDQUFDLHFEQUFZO0FBQ2hDLGVBQWUsbUJBQU8sQ0FBQyx5RUFBcUI7QUFDNUMseUJBQXlCLG1CQUFPLENBQUMsaUZBQXNCO0FBQ3ZELHNCQUFzQixtQkFBTyxDQUFDLDJFQUFtQjtBQUNqRCxrQkFBa0IsbUJBQU8sQ0FBQyxtRUFBZTtBQUN6QyxnQkFBZ0IsbUJBQU8sQ0FBQywyRUFBc0I7O0FBRTlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRDtBQUNoRDtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCLEtBQUs7QUFDTDtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0EsZ0RBQWdEO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLENBQUM7O0FBRUQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvQXhpb3MuanM/MjlmYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcbnZhciBidWlsZFVSTCA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvYnVpbGRVUkwnKTtcbnZhciBJbnRlcmNlcHRvck1hbmFnZXIgPSByZXF1aXJlKCcuL0ludGVyY2VwdG9yTWFuYWdlcicpO1xudmFyIGRpc3BhdGNoUmVxdWVzdCA9IHJlcXVpcmUoJy4vZGlzcGF0Y2hSZXF1ZXN0Jyk7XG52YXIgbWVyZ2VDb25maWcgPSByZXF1aXJlKCcuL21lcmdlQ29uZmlnJyk7XG52YXIgdmFsaWRhdG9yID0gcmVxdWlyZSgnLi4vaGVscGVycy92YWxpZGF0b3InKTtcblxudmFyIHZhbGlkYXRvcnMgPSB2YWxpZGF0b3IudmFsaWRhdG9ycztcbi8qKlxuICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlQ29uZmlnIFRoZSBkZWZhdWx0IGNvbmZpZyBmb3IgdGhlIGluc3RhbmNlXG4gKi9cbmZ1bmN0aW9uIEF4aW9zKGluc3RhbmNlQ29uZmlnKSB7XG4gIHRoaXMuZGVmYXVsdHMgPSBpbnN0YW5jZUNvbmZpZztcbiAgdGhpcy5pbnRlcmNlcHRvcnMgPSB7XG4gICAgcmVxdWVzdDogbmV3IEludGVyY2VwdG9yTWFuYWdlcigpLFxuICAgIHJlc3BvbnNlOiBuZXcgSW50ZXJjZXB0b3JNYW5hZ2VyKClcbiAgfTtcbn1cblxuLyoqXG4gKiBEaXNwYXRjaCBhIHJlcXVlc3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIFRoZSBjb25maWcgc3BlY2lmaWMgZm9yIHRoaXMgcmVxdWVzdCAobWVyZ2VkIHdpdGggdGhpcy5kZWZhdWx0cylcbiAqL1xuQXhpb3MucHJvdG90eXBlLnJlcXVlc3QgPSBmdW5jdGlvbiByZXF1ZXN0KGNvbmZpZykge1xuICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgLy8gQWxsb3cgZm9yIGF4aW9zKCdleGFtcGxlL3VybCdbLCBjb25maWddKSBhIGxhIGZldGNoIEFQSVxuICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ3N0cmluZycpIHtcbiAgICBjb25maWcgPSBhcmd1bWVudHNbMV0gfHwge307XG4gICAgY29uZmlnLnVybCA9IGFyZ3VtZW50c1swXTtcbiAgfSBlbHNlIHtcbiAgICBjb25maWcgPSBjb25maWcgfHwge307XG4gIH1cblxuICBjb25maWcgPSBtZXJnZUNvbmZpZyh0aGlzLmRlZmF1bHRzLCBjb25maWcpO1xuXG4gIC8vIFNldCBjb25maWcubWV0aG9kXG4gIGlmIChjb25maWcubWV0aG9kKSB7XG4gICAgY29uZmlnLm1ldGhvZCA9IGNvbmZpZy5tZXRob2QudG9Mb3dlckNhc2UoKTtcbiAgfSBlbHNlIGlmICh0aGlzLmRlZmF1bHRzLm1ldGhvZCkge1xuICAgIGNvbmZpZy5tZXRob2QgPSB0aGlzLmRlZmF1bHRzLm1ldGhvZC50b0xvd2VyQ2FzZSgpO1xuICB9IGVsc2Uge1xuICAgIGNvbmZpZy5tZXRob2QgPSAnZ2V0JztcbiAgfVxuXG4gIHZhciB0cmFuc2l0aW9uYWwgPSBjb25maWcudHJhbnNpdGlvbmFsO1xuXG4gIGlmICh0cmFuc2l0aW9uYWwgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhbGlkYXRvci5hc3NlcnRPcHRpb25zKHRyYW5zaXRpb25hbCwge1xuICAgICAgc2lsZW50SlNPTlBhcnNpbmc6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbiwgJzEuMC4wJyksXG4gICAgICBmb3JjZWRKU09OUGFyc2luZzogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuLCAnMS4wLjAnKSxcbiAgICAgIGNsYXJpZnlUaW1lb3V0RXJyb3I6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbiwgJzEuMC4wJylcbiAgICB9LCBmYWxzZSk7XG4gIH1cblxuICAvLyBmaWx0ZXIgb3V0IHNraXBwZWQgaW50ZXJjZXB0b3JzXG4gIHZhciByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbiA9IFtdO1xuICB2YXIgc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzID0gdHJ1ZTtcbiAgdGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKGZ1bmN0aW9uIHVuc2hpZnRSZXF1ZXN0SW50ZXJjZXB0b3JzKGludGVyY2VwdG9yKSB7XG4gICAgaWYgKHR5cGVvZiBpbnRlcmNlcHRvci5ydW5XaGVuID09PSAnZnVuY3Rpb24nICYmIGludGVyY2VwdG9yLnJ1bldoZW4oY29uZmlnKSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgPSBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgJiYgaW50ZXJjZXB0b3Iuc3luY2hyb25vdXM7XG5cbiAgICByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbi51bnNoaWZ0KGludGVyY2VwdG9yLmZ1bGZpbGxlZCwgaW50ZXJjZXB0b3IucmVqZWN0ZWQpO1xuICB9KTtcblxuICB2YXIgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluID0gW107XG4gIHRoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24gcHVzaFJlc3BvbnNlSW50ZXJjZXB0b3JzKGludGVyY2VwdG9yKSB7XG4gICAgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluLnB1c2goaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gIH0pO1xuXG4gIHZhciBwcm9taXNlO1xuXG4gIGlmICghc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzKSB7XG4gICAgdmFyIGNoYWluID0gW2Rpc3BhdGNoUmVxdWVzdCwgdW5kZWZpbmVkXTtcblxuICAgIEFycmF5LnByb3RvdHlwZS51bnNoaWZ0LmFwcGx5KGNoYWluLCByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbik7XG4gICAgY2hhaW4gPSBjaGFpbi5jb25jYXQocmVzcG9uc2VJbnRlcmNlcHRvckNoYWluKTtcblxuICAgIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoY29uZmlnKTtcbiAgICB3aGlsZSAoY2hhaW4ubGVuZ3RoKSB7XG4gICAgICBwcm9taXNlID0gcHJvbWlzZS50aGVuKGNoYWluLnNoaWZ0KCksIGNoYWluLnNoaWZ0KCkpO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9taXNlO1xuICB9XG5cblxuICB2YXIgbmV3Q29uZmlnID0gY29uZmlnO1xuICB3aGlsZSAocmVxdWVzdEludGVyY2VwdG9yQ2hhaW4ubGVuZ3RoKSB7XG4gICAgdmFyIG9uRnVsZmlsbGVkID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4uc2hpZnQoKTtcbiAgICB2YXIgb25SZWplY3RlZCA9IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluLnNoaWZ0KCk7XG4gICAgdHJ5IHtcbiAgICAgIG5ld0NvbmZpZyA9IG9uRnVsZmlsbGVkKG5ld0NvbmZpZyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIG9uUmVqZWN0ZWQoZXJyb3IpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgdHJ5IHtcbiAgICBwcm9taXNlID0gZGlzcGF0Y2hSZXF1ZXN0KG5ld0NvbmZpZyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgfVxuXG4gIHdoaWxlIChyZXNwb25zZUludGVyY2VwdG9yQ2hhaW4ubGVuZ3RoKSB7XG4gICAgcHJvbWlzZSA9IHByb21pc2UudGhlbihyZXNwb25zZUludGVyY2VwdG9yQ2hhaW4uc2hpZnQoKSwgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluLnNoaWZ0KCkpO1xuICB9XG5cbiAgcmV0dXJuIHByb21pc2U7XG59O1xuXG5BeGlvcy5wcm90b3R5cGUuZ2V0VXJpID0gZnVuY3Rpb24gZ2V0VXJpKGNvbmZpZykge1xuICBjb25maWcgPSBtZXJnZUNvbmZpZyh0aGlzLmRlZmF1bHRzLCBjb25maWcpO1xuICByZXR1cm4gYnVpbGRVUkwoY29uZmlnLnVybCwgY29uZmlnLnBhcmFtcywgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIpLnJlcGxhY2UoL15cXD8vLCAnJyk7XG59O1xuXG4vLyBQcm92aWRlIGFsaWFzZXMgZm9yIHN1cHBvcnRlZCByZXF1ZXN0IG1ldGhvZHNcbnV0aWxzLmZvckVhY2goWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAnb3B0aW9ucyddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kTm9EYXRhKG1ldGhvZCkge1xuICAvKmVzbGludCBmdW5jLW5hbWVzOjAqL1xuICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uKHVybCwgY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdChtZXJnZUNvbmZpZyhjb25maWcgfHwge30sIHtcbiAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgdXJsOiB1cmwsXG4gICAgICBkYXRhOiAoY29uZmlnIHx8IHt9KS5kYXRhXG4gICAgfSkpO1xuICB9O1xufSk7XG5cbnV0aWxzLmZvckVhY2goWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kV2l0aERhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24odXJsLCBkYXRhLCBjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KG1lcmdlQ29uZmlnKGNvbmZpZyB8fCB7fSwge1xuICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICB1cmw6IHVybCxcbiAgICAgIGRhdGE6IGRhdGFcbiAgICB9KSk7XG4gIH07XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBBeGlvcztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/axios/lib/core/Axios.js\n");

/***/ }),

/***/ "./node_modules/axios/lib/core/InterceptorManager.js":
/*!***********************************************************!*\
  !*** ./node_modules/axios/lib/core/InterceptorManager.js ***!
  \***********************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";
eval("\n\nvar utils = __webpack_require__(/*! ./../utils */ \"./node_modules/axios/lib/utils.js\");\n\nfunction InterceptorManager() {\n  this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function use(fulfilled, rejected, options) {\n  this.handlers.push({\n    fulfilled: fulfilled,\n    rejected: rejected,\n    synchronous: options ? options.synchronous : false,\n    runWhen: options ? options.runWhen : null\n  });\n  return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function eject(id) {\n  if (this.handlers[id]) {\n    this.handlers[id] = null;\n  }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function forEach(fn) {\n  utils.forEach(this.handlers, function forEachHandler(h) {\n    if (h !== null) {\n      fn(h);\n    }\n  });\n};\n\nmodule.exports = InterceptorManager;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvSW50ZXJjZXB0b3JNYW5hZ2VyLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFlBQVksbUJBQU8sQ0FBQyxxREFBWTs7QUFFaEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsVUFBVTtBQUNyQixXQUFXLFVBQVU7QUFDckI7QUFDQSxZQUFZLFFBQVE7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsVUFBVTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvSW50ZXJjZXB0b3JNYW5hZ2VyLmpzP2M3OTIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbmZ1bmN0aW9uIEludGVyY2VwdG9yTWFuYWdlcigpIHtcbiAgdGhpcy5oYW5kbGVycyA9IFtdO1xufVxuXG4vKipcbiAqIEFkZCBhIG5ldyBpbnRlcmNlcHRvciB0byB0aGUgc3RhY2tcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdWxmaWxsZWQgVGhlIGZ1bmN0aW9uIHRvIGhhbmRsZSBgdGhlbmAgZm9yIGEgYFByb21pc2VgXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWplY3RlZCBUaGUgZnVuY3Rpb24gdG8gaGFuZGxlIGByZWplY3RgIGZvciBhIGBQcm9taXNlYFxuICpcbiAqIEByZXR1cm4ge051bWJlcn0gQW4gSUQgdXNlZCB0byByZW1vdmUgaW50ZXJjZXB0b3IgbGF0ZXJcbiAqL1xuSW50ZXJjZXB0b3JNYW5hZ2VyLnByb3RvdHlwZS51c2UgPSBmdW5jdGlvbiB1c2UoZnVsZmlsbGVkLCByZWplY3RlZCwgb3B0aW9ucykge1xuICB0aGlzLmhhbmRsZXJzLnB1c2goe1xuICAgIGZ1bGZpbGxlZDogZnVsZmlsbGVkLFxuICAgIHJlamVjdGVkOiByZWplY3RlZCxcbiAgICBzeW5jaHJvbm91czogb3B0aW9ucyA/IG9wdGlvbnMuc3luY2hyb25vdXMgOiBmYWxzZSxcbiAgICBydW5XaGVuOiBvcHRpb25zID8gb3B0aW9ucy5ydW5XaGVuIDogbnVsbFxuICB9KTtcbiAgcmV0dXJuIHRoaXMuaGFuZGxlcnMubGVuZ3RoIC0gMTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGFuIGludGVyY2VwdG9yIGZyb20gdGhlIHN0YWNrXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IGlkIFRoZSBJRCB0aGF0IHdhcyByZXR1cm5lZCBieSBgdXNlYFxuICovXG5JbnRlcmNlcHRvck1hbmFnZXIucHJvdG90eXBlLmVqZWN0ID0gZnVuY3Rpb24gZWplY3QoaWQpIHtcbiAgaWYgKHRoaXMuaGFuZGxlcnNbaWRdKSB7XG4gICAgdGhpcy5oYW5kbGVyc1tpZF0gPSBudWxsO1xuICB9XG59O1xuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBhbGwgdGhlIHJlZ2lzdGVyZWQgaW50ZXJjZXB0b3JzXG4gKlxuICogVGhpcyBtZXRob2QgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3Igc2tpcHBpbmcgb3ZlciBhbnlcbiAqIGludGVyY2VwdG9ycyB0aGF0IG1heSBoYXZlIGJlY29tZSBgbnVsbGAgY2FsbGluZyBgZWplY3RgLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBmdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIGludGVyY2VwdG9yXG4gKi9cbkludGVyY2VwdG9yTWFuYWdlci5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIGZvckVhY2goZm4pIHtcbiAgdXRpbHMuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLCBmdW5jdGlvbiBmb3JFYWNoSGFuZGxlcihoKSB7XG4gICAgaWYgKGggIT09IG51bGwpIHtcbiAgICAgIGZuKGgpO1xuICAgIH1cbiAgfSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEludGVyY2VwdG9yTWFuYWdlcjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/axios/lib/core/InterceptorManager.js\n");

/***/ }),

/***/ "./node_modules/axios/lib/core/buildFullPath.js":
/*!******************************************************!*\
  !*** ./node_modules/axios/lib/core/buildFullPath.js ***!
  \******************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";
eval("\n\nvar isAbsoluteURL = __webpack_require__(/*! ../helpers/isAbsoluteURL */ \"./node_modules/axios/lib/helpers/isAbsoluteURL.js\");\nvar combineURLs = __webpack_require__(/*! ../helpers/combineURLs */ \"./node_modules/axios/lib/helpers/combineURLs.js\");\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n * @returns {string} The combined full path\n */\nmodule.exports = function buildFullPath(baseURL, requestedURL) {\n  if (baseURL && !isAbsoluteURL(requestedURL)) {\n    return combineURLs(baseURL, requestedURL);\n  }\n  return requestedURL;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvYnVpbGRGdWxsUGF0aC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixvQkFBb0IsbUJBQU8sQ0FBQyxtRkFBMEI7QUFDdEQsa0JBQWtCLG1CQUFPLENBQUMsK0VBQXdCOztBQUVsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvYnVpbGRGdWxsUGF0aC5qcz9mMDJkIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGlzQWJzb2x1dGVVUkwgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzQWJzb2x1dGVVUkwnKTtcbnZhciBjb21iaW5lVVJMcyA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvY29tYmluZVVSTHMnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IFVSTCBieSBjb21iaW5pbmcgdGhlIGJhc2VVUkwgd2l0aCB0aGUgcmVxdWVzdGVkVVJMLFxuICogb25seSB3aGVuIHRoZSByZXF1ZXN0ZWRVUkwgaXMgbm90IGFscmVhZHkgYW4gYWJzb2x1dGUgVVJMLlxuICogSWYgdGhlIHJlcXVlc3RVUkwgaXMgYWJzb2x1dGUsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgcmVxdWVzdGVkVVJMIHVudG91Y2hlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZVVSTCBUaGUgYmFzZSBVUkxcbiAqIEBwYXJhbSB7c3RyaW5nfSByZXF1ZXN0ZWRVUkwgQWJzb2x1dGUgb3IgcmVsYXRpdmUgVVJMIHRvIGNvbWJpbmVcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb21iaW5lZCBmdWxsIHBhdGhcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBidWlsZEZ1bGxQYXRoKGJhc2VVUkwsIHJlcXVlc3RlZFVSTCkge1xuICBpZiAoYmFzZVVSTCAmJiAhaXNBYnNvbHV0ZVVSTChyZXF1ZXN0ZWRVUkwpKSB7XG4gICAgcmV0dXJuIGNvbWJpbmVVUkxzKGJhc2VVUkwsIHJlcXVlc3RlZFVSTCk7XG4gIH1cbiAgcmV0dXJuIHJlcXVlc3RlZFVSTDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/axios/lib/core/buildFullPath.js\n");

/***/ }),

/***/ "./node_modules/axios/lib/core/createError.js":
/*!****************************************************!*\
  !*** ./node_modules/axios/lib/core/createError.js ***!
  \****************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";
eval("\n\nvar enhanceError = __webpack_require__(/*! ./enhanceError */ \"./node_modules/axios/lib/core/enhanceError.js\");\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The created error.\n */\nmodule.exports = function createError(message, config, code, request, response) {\n  var error = new Error(message);\n  return enhanceError(error, config, code, request, response);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvY3JlYXRlRXJyb3IuanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsbUJBQW1CLG1CQUFPLENBQUMscUVBQWdCOztBQUUzQztBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLGFBQWEsT0FBTztBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL2NyZWF0ZUVycm9yLmpzPzc3MGMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZW5oYW5jZUVycm9yID0gcmVxdWlyZSgnLi9lbmhhbmNlRXJyb3InKTtcblxuLyoqXG4gKiBDcmVhdGUgYW4gRXJyb3Igd2l0aCB0aGUgc3BlY2lmaWVkIG1lc3NhZ2UsIGNvbmZpZywgZXJyb3IgY29kZSwgcmVxdWVzdCBhbmQgcmVzcG9uc2UuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIFRoZSBjb25maWcuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2NvZGVdIFRoZSBlcnJvciBjb2RlIChmb3IgZXhhbXBsZSwgJ0VDT05OQUJPUlRFRCcpLlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXF1ZXN0XSBUaGUgcmVxdWVzdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVzcG9uc2VdIFRoZSByZXNwb25zZS5cbiAqIEByZXR1cm5zIHtFcnJvcn0gVGhlIGNyZWF0ZWQgZXJyb3IuXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY3JlYXRlRXJyb3IobWVzc2FnZSwgY29uZmlnLCBjb2RlLCByZXF1ZXN0LCByZXNwb25zZSkge1xuICB2YXIgZXJyb3IgPSBuZXcgRXJyb3IobWVzc2FnZSk7XG4gIHJldHVybiBlbmhhbmNlRXJyb3IoZXJyb3IsIGNvbmZpZywgY29kZSwgcmVxdWVzdCwgcmVzcG9uc2UpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/axios/lib/core/createError.js\n");

/***/ }),

/***/ "./node_modules/axios/lib/core/dispatchRequest.js":
/*!********************************************************!*\
  !*** ./node_modules/axios/lib/core/dispatchRequest.js ***!
  \********************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";
eval("\n\nvar utils = __webpack_require__(/*! ./../utils */ \"./node_modules/axios/lib/utils.js\");\nvar transformData = __webpack_require__(/*! ./transformData */ \"./node_modules/axios/lib/core/transformData.js\");\nvar isCancel = __webpack_require__(/*! ../cancel/isCancel */ \"./node_modules/axios/lib/cancel/isCancel.js\");\nvar defaults = __webpack_require__(/*! ../defaults */ \"./node_modules/axios/lib/defaults.js\");\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nfunction throwIfCancellationRequested(config) {\n  if (config.cancelToken) {\n    config.cancelToken.throwIfRequested();\n  }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n  throwIfCancellationRequested(config);\n\n  // Ensure headers exist\n  config.headers = config.headers || {};\n\n  // Transform request data\n  config.data = transformData.call(\n    config,\n    config.data,\n    config.headers,\n    config.transformRequest\n  );\n\n  // Flatten headers\n  config.headers = utils.merge(\n    config.headers.common || {},\n    config.headers[config.method] || {},\n    config.headers\n  );\n\n  utils.forEach(\n    ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n    function cleanHeaderConfig(method) {\n      delete config.headers[method];\n    }\n  );\n\n  var adapter = config.adapter || defaults.adapter;\n\n  return adapter(config).then(function onAdapterResolution(response) {\n    throwIfCancellationRequested(config);\n\n    // Transform response data\n    response.data = transformData.call(\n      config,\n      response.data,\n      response.headers,\n      config.transformResponse\n    );\n\n    return response;\n  }, function onAdapterRejection(reason) {\n    if (!isCancel(reason)) {\n      throwIfCancellationRequested(config);\n\n      // Transform response data\n      if (reason && reason.response) {\n        reason.response.data = transformData.call(\n          config,\n          reason.response.data,\n          reason.response.headers,\n          config.transformResponse\n        );\n      }\n    }\n\n    return Promise.reject(reason);\n  });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvZGlzcGF0Y2hSZXF1ZXN0LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFlBQVksbUJBQU8sQ0FBQyxxREFBWTtBQUNoQyxvQkFBb0IsbUJBQU8sQ0FBQyx1RUFBaUI7QUFDN0MsZUFBZSxtQkFBTyxDQUFDLHVFQUFvQjtBQUMzQyxlQUFlLG1CQUFPLENBQUMseURBQWE7O0FBRXBDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLGFBQWEsU0FBUztBQUN0QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsK0JBQStCO0FBQy9CLHVDQUF1QztBQUN2QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0giLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvZGlzcGF0Y2hSZXF1ZXN0LmpzPzRkYzkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG52YXIgdHJhbnNmb3JtRGF0YSA9IHJlcXVpcmUoJy4vdHJhbnNmb3JtRGF0YScpO1xudmFyIGlzQ2FuY2VsID0gcmVxdWlyZSgnLi4vY2FuY2VsL2lzQ2FuY2VsJyk7XG52YXIgZGVmYXVsdHMgPSByZXF1aXJlKCcuLi9kZWZhdWx0cycpO1xuXG4vKipcbiAqIFRocm93cyBhIGBDYW5jZWxgIGlmIGNhbmNlbGxhdGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQuXG4gKi9cbmZ1bmN0aW9uIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKSB7XG4gIGlmIChjb25maWcuY2FuY2VsVG9rZW4pIHtcbiAgICBjb25maWcuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpO1xuICB9XG59XG5cbi8qKlxuICogRGlzcGF0Y2ggYSByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIgdXNpbmcgdGhlIGNvbmZpZ3VyZWQgYWRhcHRlci5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gY29uZmlnIFRoZSBjb25maWcgdGhhdCBpcyB0byBiZSB1c2VkIGZvciB0aGUgcmVxdWVzdFxuICogQHJldHVybnMge1Byb21pc2V9IFRoZSBQcm9taXNlIHRvIGJlIGZ1bGZpbGxlZFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRpc3BhdGNoUmVxdWVzdChjb25maWcpIHtcbiAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gIC8vIEVuc3VyZSBoZWFkZXJzIGV4aXN0XG4gIGNvbmZpZy5oZWFkZXJzID0gY29uZmlnLmhlYWRlcnMgfHwge307XG5cbiAgLy8gVHJhbnNmb3JtIHJlcXVlc3QgZGF0YVxuICBjb25maWcuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICBjb25maWcsXG4gICAgY29uZmlnLmRhdGEsXG4gICAgY29uZmlnLmhlYWRlcnMsXG4gICAgY29uZmlnLnRyYW5zZm9ybVJlcXVlc3RcbiAgKTtcblxuICAvLyBGbGF0dGVuIGhlYWRlcnNcbiAgY29uZmlnLmhlYWRlcnMgPSB1dGlscy5tZXJnZShcbiAgICBjb25maWcuaGVhZGVycy5jb21tb24gfHwge30sXG4gICAgY29uZmlnLmhlYWRlcnNbY29uZmlnLm1ldGhvZF0gfHwge30sXG4gICAgY29uZmlnLmhlYWRlcnNcbiAgKTtcblxuICB1dGlscy5mb3JFYWNoKFxuICAgIFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJywgJ2NvbW1vbiddLFxuICAgIGZ1bmN0aW9uIGNsZWFuSGVhZGVyQ29uZmlnKG1ldGhvZCkge1xuICAgICAgZGVsZXRlIGNvbmZpZy5oZWFkZXJzW21ldGhvZF07XG4gICAgfVxuICApO1xuXG4gIHZhciBhZGFwdGVyID0gY29uZmlnLmFkYXB0ZXIgfHwgZGVmYXVsdHMuYWRhcHRlcjtcblxuICByZXR1cm4gYWRhcHRlcihjb25maWcpLnRoZW4oZnVuY3Rpb24gb25BZGFwdGVyUmVzb2x1dGlvbihyZXNwb25zZSkge1xuICAgIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICAgIC8vIFRyYW5zZm9ybSByZXNwb25zZSBkYXRhXG4gICAgcmVzcG9uc2UuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICAgIGNvbmZpZyxcbiAgICAgIHJlc3BvbnNlLmRhdGEsXG4gICAgICByZXNwb25zZS5oZWFkZXJzLFxuICAgICAgY29uZmlnLnRyYW5zZm9ybVJlc3BvbnNlXG4gICAgKTtcblxuICAgIHJldHVybiByZXNwb25zZTtcbiAgfSwgZnVuY3Rpb24gb25BZGFwdGVyUmVqZWN0aW9uKHJlYXNvbikge1xuICAgIGlmICghaXNDYW5jZWwocmVhc29uKSkge1xuICAgICAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gICAgICAvLyBUcmFuc2Zvcm0gcmVzcG9uc2UgZGF0YVxuICAgICAgaWYgKHJlYXNvbiAmJiByZWFzb24ucmVzcG9uc2UpIHtcbiAgICAgICAgcmVhc29uLnJlc3BvbnNlLmRhdGEgPSB0cmFuc2Zvcm1EYXRhLmNhbGwoXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIHJlYXNvbi5yZXNwb25zZS5kYXRhLFxuICAgICAgICAgIHJlYXNvbi5yZXNwb25zZS5oZWFkZXJzLFxuICAgICAgICAgIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZWFzb24pO1xuICB9KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/axios/lib/core/dispatchRequest.js\n");

/***/ }),

/***/ "./node_modules/axios/lib/core/enhanceError.js":
/*!*****************************************************!*\
  !*** ./node_modules/axios/lib/core/enhanceError.js ***!
  \*****************************************************/
/***/ ((module) => {

"use strict";
eval("\n\n/**\n * Update an Error with the specified config, error code, and response.\n *\n * @param {Error} error The error to update.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The error.\n */\nmodule.exports = function enhanceError(error, config, code, request, response) {\n  error.config = config;\n  if (code) {\n    error.code = code;\n  }\n\n  error.request = request;\n  error.response = response;\n  error.isAxiosError = true;\n\n  error.toJSON = function toJSON() {\n    return {\n      // Standard\n      message: this.message,\n      name: this.name,\n      // Microsoft\n      description: this.description,\n      number: this.number,\n      // Mozilla\n      fileName: this.fileName,\n      lineNumber: this.lineNumber,\n      columnNumber: this.columnNumber,\n      stack: this.stack,\n      // Axios\n      config: this.config,\n      code: this.code\n    };\n  };\n  return error;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvZW5oYW5jZUVycm9yLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsYUFBYSxPQUFPO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9lbmhhbmNlRXJyb3IuanM/MGRmMyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogVXBkYXRlIGFuIEVycm9yIHdpdGggdGhlIHNwZWNpZmllZCBjb25maWcsIGVycm9yIGNvZGUsIGFuZCByZXNwb25zZS5cbiAqXG4gKiBAcGFyYW0ge0Vycm9yfSBlcnJvciBUaGUgZXJyb3IgdG8gdXBkYXRlLlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnLlxuICogQHBhcmFtIHtzdHJpbmd9IFtjb2RlXSBUaGUgZXJyb3IgY29kZSAoZm9yIGV4YW1wbGUsICdFQ09OTkFCT1JURUQnKS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVxdWVzdF0gVGhlIHJlcXVlc3QuXG4gKiBAcGFyYW0ge09iamVjdH0gW3Jlc3BvbnNlXSBUaGUgcmVzcG9uc2UuXG4gKiBAcmV0dXJucyB7RXJyb3J9IFRoZSBlcnJvci5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBlbmhhbmNlRXJyb3IoZXJyb3IsIGNvbmZpZywgY29kZSwgcmVxdWVzdCwgcmVzcG9uc2UpIHtcbiAgZXJyb3IuY29uZmlnID0gY29uZmlnO1xuICBpZiAoY29kZSkge1xuICAgIGVycm9yLmNvZGUgPSBjb2RlO1xuICB9XG5cbiAgZXJyb3IucmVxdWVzdCA9IHJlcXVlc3Q7XG4gIGVycm9yLnJlc3BvbnNlID0gcmVzcG9uc2U7XG4gIGVycm9yLmlzQXhpb3NFcnJvciA9IHRydWU7XG5cbiAgZXJyb3IudG9KU09OID0gZnVuY3Rpb24gdG9KU09OKCkge1xuICAgIHJldHVybiB7XG4gICAgICAvLyBTdGFuZGFyZFxuICAgICAgbWVzc2FnZTogdGhpcy5tZXNzYWdlLFxuICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgLy8gTWljcm9zb2Z0XG4gICAgICBkZXNjcmlwdGlvbjogdGhpcy5kZXNjcmlwdGlvbixcbiAgICAgIG51bWJlcjogdGhpcy5udW1iZXIsXG4gICAgICAvLyBNb3ppbGxhXG4gICAgICBmaWxlTmFtZTogdGhpcy5maWxlTmFtZSxcbiAgICAgIGxpbmVOdW1iZXI6IHRoaXMubGluZU51bWJlcixcbiAgICAgIGNvbHVtbk51bWJlcjogdGhpcy5jb2x1bW5OdW1iZXIsXG4gICAgICBzdGFjazogdGhpcy5zdGFjayxcbiAgICAgIC8vIEF4aW9zXG4gICAgICBjb25maWc6IHRoaXMuY29uZmlnLFxuICAgICAgY29kZTogdGhpcy5jb2RlXG4gICAgfTtcbiAgfTtcbiAgcmV0dXJuIGVycm9yO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/axios/lib/core/enhanceError.js\n");

/***/ }),

/***/ "./node_modules/axios/lib/core/mergeConfig.js":
/*!****************************************************!*\
  !*** ./node_modules/axios/lib/core/mergeConfig.js ***!
  \****************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";
eval("\n\nvar utils = __webpack_require__(/*! ../utils */ \"./node_modules/axios/lib/utils.js\");\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n * @returns {Object} New object resulting from merging config2 to config1\n */\nmodule.exports = function mergeConfig(config1, config2) {\n  // eslint-disable-next-line no-param-reassign\n  config2 = config2 || {};\n  var config = {};\n\n  var valueFromConfig2Keys = ['url', 'method', 'data'];\n  var mergeDeepPropertiesKeys = ['headers', 'auth', 'proxy', 'params'];\n  var defaultToConfig2Keys = [\n    'baseURL', 'transformRequest', 'transformResponse', 'paramsSerializer',\n    'timeout', 'timeoutMessage', 'withCredentials', 'adapter', 'responseType', 'xsrfCookieName',\n    'xsrfHeaderName', 'onUploadProgress', 'onDownloadProgress', 'decompress',\n    'maxContentLength', 'maxBodyLength', 'maxRedirects', 'transport', 'httpAgent',\n    'httpsAgent', 'cancelToken', 'socketPath', 'responseEncoding'\n  ];\n  var directMergeKeys = ['validateStatus'];\n\n  function getMergedValue(target, source) {\n    if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n      return utils.merge(target, source);\n    } else if (utils.isPlainObject(source)) {\n      return utils.merge({}, source);\n    } else if (utils.isArray(source)) {\n      return source.slice();\n    }\n    return source;\n  }\n\n  function mergeDeepProperties(prop) {\n    if (!utils.isUndefined(config2[prop])) {\n      config[prop] = getMergedValue(config1[prop], config2[prop]);\n    } else if (!utils.isUndefined(config1[prop])) {\n      config[prop] = getMergedValue(undefined, config1[prop]);\n    }\n  }\n\n  utils.forEach(valueFromConfig2Keys, function valueFromConfig2(prop) {\n    if (!utils.isUndefined(config2[prop])) {\n      config[prop] = getMergedValue(undefined, config2[prop]);\n    }\n  });\n\n  utils.forEach(mergeDeepPropertiesKeys, mergeDeepProperties);\n\n  utils.forEach(defaultToConfig2Keys, function defaultToConfig2(prop) {\n    if (!utils.isUndefined(config2[prop])) {\n      config[prop] = getMergedValue(undefined, config2[prop]);\n    } else if (!utils.isUndefined(config1[prop])) {\n      config[prop] = getMergedValue(undefined, config1[prop]);\n    }\n  });\n\n  utils.forEach(directMergeKeys, function merge(prop) {\n    if (prop in config2) {\n      config[prop] = getMergedValue(config1[prop], config2[prop]);\n    } else if (prop in config1) {\n      config[prop] = getMergedValue(undefined, config1[prop]);\n    }\n  });\n\n  var axiosKeys = valueFromConfig2Keys\n    .concat(mergeDeepPropertiesKeys)\n    .concat(defaultToConfig2Keys)\n    .concat(directMergeKeys);\n\n  var otherKeys = Object\n    .keys(config1)\n    .concat(Object.keys(config2))\n    .filter(function filterAxiosKeys(key) {\n      return axiosKeys.indexOf(key) === -1;\n    });\n\n  utils.forEach(otherKeys, mergeDeepProperties);\n\n  return config;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvbWVyZ2VDb25maWcuanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsWUFBWSxtQkFBTyxDQUFDLG1EQUFVOztBQUU5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOLDJCQUEyQjtBQUMzQixNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL21lcmdlQ29uZmlnLmpzP2JkMTMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG4vKipcbiAqIENvbmZpZy1zcGVjaWZpYyBtZXJnZS1mdW5jdGlvbiB3aGljaCBjcmVhdGVzIGEgbmV3IGNvbmZpZy1vYmplY3RcbiAqIGJ5IG1lcmdpbmcgdHdvIGNvbmZpZ3VyYXRpb24gb2JqZWN0cyB0b2dldGhlci5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnMVxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZzJcbiAqIEByZXR1cm5zIHtPYmplY3R9IE5ldyBvYmplY3QgcmVzdWx0aW5nIGZyb20gbWVyZ2luZyBjb25maWcyIHRvIGNvbmZpZzFcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBtZXJnZUNvbmZpZyhjb25maWcxLCBjb25maWcyKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBjb25maWcyID0gY29uZmlnMiB8fCB7fTtcbiAgdmFyIGNvbmZpZyA9IHt9O1xuXG4gIHZhciB2YWx1ZUZyb21Db25maWcyS2V5cyA9IFsndXJsJywgJ21ldGhvZCcsICdkYXRhJ107XG4gIHZhciBtZXJnZURlZXBQcm9wZXJ0aWVzS2V5cyA9IFsnaGVhZGVycycsICdhdXRoJywgJ3Byb3h5JywgJ3BhcmFtcyddO1xuICB2YXIgZGVmYXVsdFRvQ29uZmlnMktleXMgPSBbXG4gICAgJ2Jhc2VVUkwnLCAndHJhbnNmb3JtUmVxdWVzdCcsICd0cmFuc2Zvcm1SZXNwb25zZScsICdwYXJhbXNTZXJpYWxpemVyJyxcbiAgICAndGltZW91dCcsICd0aW1lb3V0TWVzc2FnZScsICd3aXRoQ3JlZGVudGlhbHMnLCAnYWRhcHRlcicsICdyZXNwb25zZVR5cGUnLCAneHNyZkNvb2tpZU5hbWUnLFxuICAgICd4c3JmSGVhZGVyTmFtZScsICdvblVwbG9hZFByb2dyZXNzJywgJ29uRG93bmxvYWRQcm9ncmVzcycsICdkZWNvbXByZXNzJyxcbiAgICAnbWF4Q29udGVudExlbmd0aCcsICdtYXhCb2R5TGVuZ3RoJywgJ21heFJlZGlyZWN0cycsICd0cmFuc3BvcnQnLCAnaHR0cEFnZW50JyxcbiAgICAnaHR0cHNBZ2VudCcsICdjYW5jZWxUb2tlbicsICdzb2NrZXRQYXRoJywgJ3Jlc3BvbnNlRW5jb2RpbmcnXG4gIF07XG4gIHZhciBkaXJlY3RNZXJnZUtleXMgPSBbJ3ZhbGlkYXRlU3RhdHVzJ107XG5cbiAgZnVuY3Rpb24gZ2V0TWVyZ2VkVmFsdWUodGFyZ2V0LCBzb3VyY2UpIHtcbiAgICBpZiAodXRpbHMuaXNQbGFpbk9iamVjdCh0YXJnZXQpICYmIHV0aWxzLmlzUGxhaW5PYmplY3Qoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHV0aWxzLm1lcmdlKHRhcmdldCwgc291cmNlKTtcbiAgICB9IGVsc2UgaWYgKHV0aWxzLmlzUGxhaW5PYmplY3Qoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHV0aWxzLm1lcmdlKHt9LCBzb3VyY2UpO1xuICAgIH0gZWxzZSBpZiAodXRpbHMuaXNBcnJheShzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gc291cmNlLnNsaWNlKCk7XG4gICAgfVxuICAgIHJldHVybiBzb3VyY2U7XG4gIH1cblxuICBmdW5jdGlvbiBtZXJnZURlZXBQcm9wZXJ0aWVzKHByb3ApIHtcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZzJbcHJvcF0pKSB7XG4gICAgICBjb25maWdbcHJvcF0gPSBnZXRNZXJnZWRWYWx1ZShjb25maWcxW3Byb3BdLCBjb25maWcyW3Byb3BdKTtcbiAgICB9IGVsc2UgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChjb25maWcxW3Byb3BdKSkge1xuICAgICAgY29uZmlnW3Byb3BdID0gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBjb25maWcxW3Byb3BdKTtcbiAgICB9XG4gIH1cblxuICB1dGlscy5mb3JFYWNoKHZhbHVlRnJvbUNvbmZpZzJLZXlzLCBmdW5jdGlvbiB2YWx1ZUZyb21Db25maWcyKHByb3ApIHtcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZzJbcHJvcF0pKSB7XG4gICAgICBjb25maWdbcHJvcF0gPSBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGNvbmZpZzJbcHJvcF0pO1xuICAgIH1cbiAgfSk7XG5cbiAgdXRpbHMuZm9yRWFjaChtZXJnZURlZXBQcm9wZXJ0aWVzS2V5cywgbWVyZ2VEZWVwUHJvcGVydGllcyk7XG5cbiAgdXRpbHMuZm9yRWFjaChkZWZhdWx0VG9Db25maWcyS2V5cywgZnVuY3Rpb24gZGVmYXVsdFRvQ29uZmlnMihwcm9wKSB7XG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChjb25maWcyW3Byb3BdKSkge1xuICAgICAgY29uZmlnW3Byb3BdID0gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBjb25maWcyW3Byb3BdKTtcbiAgICB9IGVsc2UgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChjb25maWcxW3Byb3BdKSkge1xuICAgICAgY29uZmlnW3Byb3BdID0gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBjb25maWcxW3Byb3BdKTtcbiAgICB9XG4gIH0pO1xuXG4gIHV0aWxzLmZvckVhY2goZGlyZWN0TWVyZ2VLZXlzLCBmdW5jdGlvbiBtZXJnZShwcm9wKSB7XG4gICAgaWYgKHByb3AgaW4gY29uZmlnMikge1xuICAgICAgY29uZmlnW3Byb3BdID0gZ2V0TWVyZ2VkVmFsdWUoY29uZmlnMVtwcm9wXSwgY29uZmlnMltwcm9wXSk7XG4gICAgfSBlbHNlIGlmIChwcm9wIGluIGNvbmZpZzEpIHtcbiAgICAgIGNvbmZpZ1twcm9wXSA9IGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgY29uZmlnMVtwcm9wXSk7XG4gICAgfVxuICB9KTtcblxuICB2YXIgYXhpb3NLZXlzID0gdmFsdWVGcm9tQ29uZmlnMktleXNcbiAgICAuY29uY2F0KG1lcmdlRGVlcFByb3BlcnRpZXNLZXlzKVxuICAgIC5jb25jYXQoZGVmYXVsdFRvQ29uZmlnMktleXMpXG4gICAgLmNvbmNhdChkaXJlY3RNZXJnZUtleXMpO1xuXG4gIHZhciBvdGhlcktleXMgPSBPYmplY3RcbiAgICAua2V5cyhjb25maWcxKVxuICAgIC5jb25jYXQoT2JqZWN0LmtleXMoY29uZmlnMikpXG4gICAgLmZpbHRlcihmdW5jdGlvbiBmaWx0ZXJBeGlvc0tleXMoa2V5KSB7XG4gICAgICByZXR1cm4gYXhpb3NLZXlzLmluZGV4T2Yoa2V5KSA9PT0gLTE7XG4gICAgfSk7XG5cbiAgdXRpbHMuZm9yRWFjaChvdGhlcktleXMsIG1lcmdlRGVlcFByb3BlcnRpZXMpO1xuXG4gIHJldHVybiBjb25maWc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/axios/lib/core/mergeConfig.js\n");

/***/ }),

/***/ "./node_modules/axios/lib/core/settle.js":
/*!***********************************************!*\
  !*** ./node_modules/axios/lib/core/settle.js ***!
  \***********************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";
eval("\n\nvar createError = __webpack_require__(/*! ./createError */ \"./node_modules/axios/lib/core/createError.js\");\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n */\nmodule.exports = function settle(resolve, reject, response) {\n  var validateStatus = response.config.validateStatus;\n  if (!response.status || !validateStatus || validateStatus(response.status)) {\n    resolve(response);\n  } else {\n    reject(createError(\n      'Request failed with status code ' + response.status,\n      response.config,\n      null,\n      response.request,\n      response\n    ));\n  }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvc2V0dGxlLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLGtCQUFrQixtQkFBTyxDQUFDLG1FQUFlOztBQUV6QztBQUNBO0FBQ0E7QUFDQSxXQUFXLFVBQVU7QUFDckIsV0FBVyxVQUFVO0FBQ3JCLFdBQVcsUUFBUTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9zZXR0bGUuanM/ODc2OCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBjcmVhdGVFcnJvciA9IHJlcXVpcmUoJy4vY3JlYXRlRXJyb3InKTtcblxuLyoqXG4gKiBSZXNvbHZlIG9yIHJlamVjdCBhIFByb21pc2UgYmFzZWQgb24gcmVzcG9uc2Ugc3RhdHVzLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlc29sdmUgQSBmdW5jdGlvbiB0aGF0IHJlc29sdmVzIHRoZSBwcm9taXNlLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0IEEgZnVuY3Rpb24gdGhhdCByZWplY3RzIHRoZSBwcm9taXNlLlxuICogQHBhcmFtIHtvYmplY3R9IHJlc3BvbnNlIFRoZSByZXNwb25zZS5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCByZXNwb25zZSkge1xuICB2YXIgdmFsaWRhdGVTdGF0dXMgPSByZXNwb25zZS5jb25maWcudmFsaWRhdGVTdGF0dXM7XG4gIGlmICghcmVzcG9uc2Uuc3RhdHVzIHx8ICF2YWxpZGF0ZVN0YXR1cyB8fCB2YWxpZGF0ZVN0YXR1cyhyZXNwb25zZS5zdGF0dXMpKSB7XG4gICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gIH0gZWxzZSB7XG4gICAgcmVqZWN0KGNyZWF0ZUVycm9yKFxuICAgICAgJ1JlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgJyArIHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIHJlc3BvbnNlLmNvbmZpZyxcbiAgICAgIG51bGwsXG4gICAgICByZXNwb25zZS5yZXF1ZXN0LFxuICAgICAgcmVzcG9uc2VcbiAgICApKTtcbiAgfVxufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/axios/lib/core/settle.js\n");

/***/ }),

/***/ "./node_modules/axios/lib/core/transformData.js":
/*!******************************************************!*\
  !*** ./node_modules/axios/lib/core/transformData.js ***!
  \******************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";
eval("\n\nvar utils = __webpack_require__(/*! ./../utils */ \"./node_modules/axios/lib/utils.js\");\nvar defaults = __webpack_require__(/*! ./../defaults */ \"./node_modules/axios/lib/defaults.js\");\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n  var context = this || defaults;\n  /*eslint no-param-reassign:0*/\n  utils.forEach(fns, function transform(fn) {\n    data = fn.call(context, data, headers);\n  });\n\n  return data;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvdHJhbnNmb3JtRGF0YS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMscURBQVk7QUFDaEMsZUFBZSxtQkFBTyxDQUFDLDJEQUFlOztBQUV0QztBQUNBO0FBQ0E7QUFDQSxXQUFXLGVBQWU7QUFDMUIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsZ0JBQWdCO0FBQzNCLGFBQWEsR0FBRztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvdHJhbnNmb3JtRGF0YS5qcz83NjYyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xudmFyIGRlZmF1bHRzID0gcmVxdWlyZSgnLi8uLi9kZWZhdWx0cycpO1xuXG4vKipcbiAqIFRyYW5zZm9ybSB0aGUgZGF0YSBmb3IgYSByZXF1ZXN0IG9yIGEgcmVzcG9uc2VcbiAqXG4gKiBAcGFyYW0ge09iamVjdHxTdHJpbmd9IGRhdGEgVGhlIGRhdGEgdG8gYmUgdHJhbnNmb3JtZWRcbiAqIEBwYXJhbSB7QXJyYXl9IGhlYWRlcnMgVGhlIGhlYWRlcnMgZm9yIHRoZSByZXF1ZXN0IG9yIHJlc3BvbnNlXG4gKiBAcGFyYW0ge0FycmF5fEZ1bmN0aW9ufSBmbnMgQSBzaW5nbGUgZnVuY3Rpb24gb3IgQXJyYXkgb2YgZnVuY3Rpb25zXG4gKiBAcmV0dXJucyB7Kn0gVGhlIHJlc3VsdGluZyB0cmFuc2Zvcm1lZCBkYXRhXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gdHJhbnNmb3JtRGF0YShkYXRhLCBoZWFkZXJzLCBmbnMpIHtcbiAgdmFyIGNvbnRleHQgPSB0aGlzIHx8IGRlZmF1bHRzO1xuICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgdXRpbHMuZm9yRWFjaChmbnMsIGZ1bmN0aW9uIHRyYW5zZm9ybShmbikge1xuICAgIGRhdGEgPSBmbi5jYWxsKGNvbnRleHQsIGRhdGEsIGhlYWRlcnMpO1xuICB9KTtcblxuICByZXR1cm4gZGF0YTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/axios/lib/core/transformData.js\n");

/***/ }),

/***/ "./node_modules/axios/lib/defaults.js":
/*!********************************************!*\
  !*** ./node_modules/axios/lib/defaults.js ***!
  \********************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";
eval("/* provided dependency */ var process = __webpack_require__(/*! process/browser.js */ \"./node_modules/process/browser.js\");\n\n\nvar utils = __webpack_require__(/*! ./utils */ \"./node_modules/axios/lib/utils.js\");\nvar normalizeHeaderName = __webpack_require__(/*! ./helpers/normalizeHeaderName */ \"./node_modules/axios/lib/helpers/normalizeHeaderName.js\");\nvar enhanceError = __webpack_require__(/*! ./core/enhanceError */ \"./node_modules/axios/lib/core/enhanceError.js\");\n\nvar DEFAULT_CONTENT_TYPE = {\n  'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nfunction setContentTypeIfUnset(headers, value) {\n  if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n    headers['Content-Type'] = value;\n  }\n}\n\nfunction getDefaultAdapter() {\n  var adapter;\n  if (typeof XMLHttpRequest !== 'undefined') {\n    // For browsers use XHR adapter\n    adapter = __webpack_require__(/*! ./adapters/xhr */ \"./node_modules/axios/lib/adapters/xhr.js\");\n  } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {\n    // For node use HTTP adapter\n    adapter = __webpack_require__(/*! ./adapters/http */ \"./node_modules/axios/lib/adapters/xhr.js\");\n  }\n  return adapter;\n}\n\nfunction stringifySafely(rawValue, parser, encoder) {\n  if (utils.isString(rawValue)) {\n    try {\n      (parser || JSON.parse)(rawValue);\n      return utils.trim(rawValue);\n    } catch (e) {\n      if (e.name !== 'SyntaxError') {\n        throw e;\n      }\n    }\n  }\n\n  return (encoder || JSON.stringify)(rawValue);\n}\n\nvar defaults = {\n\n  transitional: {\n    silentJSONParsing: true,\n    forcedJSONParsing: true,\n    clarifyTimeoutError: false\n  },\n\n  adapter: getDefaultAdapter(),\n\n  transformRequest: [function transformRequest(data, headers) {\n    normalizeHeaderName(headers, 'Accept');\n    normalizeHeaderName(headers, 'Content-Type');\n\n    if (utils.isFormData(data) ||\n      utils.isArrayBuffer(data) ||\n      utils.isBuffer(data) ||\n      utils.isStream(data) ||\n      utils.isFile(data) ||\n      utils.isBlob(data)\n    ) {\n      return data;\n    }\n    if (utils.isArrayBufferView(data)) {\n      return data.buffer;\n    }\n    if (utils.isURLSearchParams(data)) {\n      setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n      return data.toString();\n    }\n    if (utils.isObject(data) || (headers && headers['Content-Type'] === 'application/json')) {\n      setContentTypeIfUnset(headers, 'application/json');\n      return stringifySafely(data);\n    }\n    return data;\n  }],\n\n  transformResponse: [function transformResponse(data) {\n    var transitional = this.transitional;\n    var silentJSONParsing = transitional && transitional.silentJSONParsing;\n    var forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n    var strictJSONParsing = !silentJSONParsing && this.responseType === 'json';\n\n    if (strictJSONParsing || (forcedJSONParsing && utils.isString(data) && data.length)) {\n      try {\n        return JSON.parse(data);\n      } catch (e) {\n        if (strictJSONParsing) {\n          if (e.name === 'SyntaxError') {\n            throw enhanceError(e, this, 'E_JSON_PARSE');\n          }\n          throw e;\n        }\n      }\n    }\n\n    return data;\n  }],\n\n  /**\n   * A timeout in milliseconds to abort a request. If set to 0 (default) a\n   * timeout is not created.\n   */\n  timeout: 0,\n\n  xsrfCookieName: 'XSRF-TOKEN',\n  xsrfHeaderName: 'X-XSRF-TOKEN',\n\n  maxContentLength: -1,\n  maxBodyLength: -1,\n\n  validateStatus: function validateStatus(status) {\n    return status >= 200 && status < 300;\n  }\n};\n\ndefaults.headers = {\n  common: {\n    'Accept': 'application/json, text/plain, */*'\n  }\n};\n\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n  defaults.headers[method] = {};\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n  defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\n\nmodule.exports = defaults;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2RlZmF1bHRzLmpzIiwibWFwcGluZ3MiOiI7QUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsa0RBQVM7QUFDN0IsMEJBQTBCLG1CQUFPLENBQUMsOEZBQStCO0FBQ2pFLG1CQUFtQixtQkFBTyxDQUFDLDBFQUFxQjs7QUFFaEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLG1CQUFPLENBQUMsZ0VBQWdCO0FBQ3RDLElBQUksZ0JBQWdCLE9BQU8sbURBQW1ELE9BQU87QUFDckY7QUFDQSxjQUFjLG1CQUFPLENBQUMsaUVBQWlCO0FBQ3ZDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0VBQXdFO0FBQ3hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQSxDQUFDOztBQUVEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9kZWZhdWx0cy5qcz9lMjIxIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xudmFyIG5vcm1hbGl6ZUhlYWRlck5hbWUgPSByZXF1aXJlKCcuL2hlbHBlcnMvbm9ybWFsaXplSGVhZGVyTmFtZScpO1xudmFyIGVuaGFuY2VFcnJvciA9IHJlcXVpcmUoJy4vY29yZS9lbmhhbmNlRXJyb3InKTtcblxudmFyIERFRkFVTFRfQ09OVEVOVF9UWVBFID0ge1xuICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCdcbn07XG5cbmZ1bmN0aW9uIHNldENvbnRlbnRUeXBlSWZVbnNldChoZWFkZXJzLCB2YWx1ZSkge1xuICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGhlYWRlcnMpICYmIHV0aWxzLmlzVW5kZWZpbmVkKGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddKSkge1xuICAgIGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gdmFsdWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0RGVmYXVsdEFkYXB0ZXIoKSB7XG4gIHZhciBhZGFwdGVyO1xuICBpZiAodHlwZW9mIFhNTEh0dHBSZXF1ZXN0ICE9PSAndW5kZWZpbmVkJykge1xuICAgIC8vIEZvciBicm93c2VycyB1c2UgWEhSIGFkYXB0ZXJcbiAgICBhZGFwdGVyID0gcmVxdWlyZSgnLi9hZGFwdGVycy94aHInKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHByb2Nlc3MpID09PSAnW29iamVjdCBwcm9jZXNzXScpIHtcbiAgICAvLyBGb3Igbm9kZSB1c2UgSFRUUCBhZGFwdGVyXG4gICAgYWRhcHRlciA9IHJlcXVpcmUoJy4vYWRhcHRlcnMvaHR0cCcpO1xuICB9XG4gIHJldHVybiBhZGFwdGVyO1xufVxuXG5mdW5jdGlvbiBzdHJpbmdpZnlTYWZlbHkocmF3VmFsdWUsIHBhcnNlciwgZW5jb2Rlcikge1xuICBpZiAodXRpbHMuaXNTdHJpbmcocmF3VmFsdWUpKSB7XG4gICAgdHJ5IHtcbiAgICAgIChwYXJzZXIgfHwgSlNPTi5wYXJzZSkocmF3VmFsdWUpO1xuICAgICAgcmV0dXJuIHV0aWxzLnRyaW0ocmF3VmFsdWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChlLm5hbWUgIT09ICdTeW50YXhFcnJvcicpIHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gKGVuY29kZXIgfHwgSlNPTi5zdHJpbmdpZnkpKHJhd1ZhbHVlKTtcbn1cblxudmFyIGRlZmF1bHRzID0ge1xuXG4gIHRyYW5zaXRpb25hbDoge1xuICAgIHNpbGVudEpTT05QYXJzaW5nOiB0cnVlLFxuICAgIGZvcmNlZEpTT05QYXJzaW5nOiB0cnVlLFxuICAgIGNsYXJpZnlUaW1lb3V0RXJyb3I6IGZhbHNlXG4gIH0sXG5cbiAgYWRhcHRlcjogZ2V0RGVmYXVsdEFkYXB0ZXIoKSxcblxuICB0cmFuc2Zvcm1SZXF1ZXN0OiBbZnVuY3Rpb24gdHJhbnNmb3JtUmVxdWVzdChkYXRhLCBoZWFkZXJzKSB7XG4gICAgbm9ybWFsaXplSGVhZGVyTmFtZShoZWFkZXJzLCAnQWNjZXB0Jyk7XG4gICAgbm9ybWFsaXplSGVhZGVyTmFtZShoZWFkZXJzLCAnQ29udGVudC1UeXBlJyk7XG5cbiAgICBpZiAodXRpbHMuaXNGb3JtRGF0YShkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNBcnJheUJ1ZmZlcihkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNCdWZmZXIoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzU3RyZWFtKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0ZpbGUoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzQmxvYihkYXRhKVxuICAgICkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIGlmICh1dGlscy5pc0FycmF5QnVmZmVyVmlldyhkYXRhKSkge1xuICAgICAgcmV0dXJuIGRhdGEuYnVmZmVyO1xuICAgIH1cbiAgICBpZiAodXRpbHMuaXNVUkxTZWFyY2hQYXJhbXMoZGF0YSkpIHtcbiAgICAgIHNldENvbnRlbnRUeXBlSWZVbnNldChoZWFkZXJzLCAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTgnKTtcbiAgICAgIHJldHVybiBkYXRhLnRvU3RyaW5nKCk7XG4gICAgfVxuICAgIGlmICh1dGlscy5pc09iamVjdChkYXRhKSB8fCAoaGVhZGVycyAmJiBoZWFkZXJzWydDb250ZW50LVR5cGUnXSA9PT0gJ2FwcGxpY2F0aW9uL2pzb24nKSkge1xuICAgICAgc2V0Q29udGVudFR5cGVJZlVuc2V0KGhlYWRlcnMsICdhcHBsaWNhdGlvbi9qc29uJyk7XG4gICAgICByZXR1cm4gc3RyaW5naWZ5U2FmZWx5KGRhdGEpO1xuICAgIH1cbiAgICByZXR1cm4gZGF0YTtcbiAgfV0sXG5cbiAgdHJhbnNmb3JtUmVzcG9uc2U6IFtmdW5jdGlvbiB0cmFuc2Zvcm1SZXNwb25zZShkYXRhKSB7XG4gICAgdmFyIHRyYW5zaXRpb25hbCA9IHRoaXMudHJhbnNpdGlvbmFsO1xuICAgIHZhciBzaWxlbnRKU09OUGFyc2luZyA9IHRyYW5zaXRpb25hbCAmJiB0cmFuc2l0aW9uYWwuc2lsZW50SlNPTlBhcnNpbmc7XG4gICAgdmFyIGZvcmNlZEpTT05QYXJzaW5nID0gdHJhbnNpdGlvbmFsICYmIHRyYW5zaXRpb25hbC5mb3JjZWRKU09OUGFyc2luZztcbiAgICB2YXIgc3RyaWN0SlNPTlBhcnNpbmcgPSAhc2lsZW50SlNPTlBhcnNpbmcgJiYgdGhpcy5yZXNwb25zZVR5cGUgPT09ICdqc29uJztcblxuICAgIGlmIChzdHJpY3RKU09OUGFyc2luZyB8fCAoZm9yY2VkSlNPTlBhcnNpbmcgJiYgdXRpbHMuaXNTdHJpbmcoZGF0YSkgJiYgZGF0YS5sZW5ndGgpKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShkYXRhKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKHN0cmljdEpTT05QYXJzaW5nKSB7XG4gICAgICAgICAgaWYgKGUubmFtZSA9PT0gJ1N5bnRheEVycm9yJykge1xuICAgICAgICAgICAgdGhyb3cgZW5oYW5jZUVycm9yKGUsIHRoaXMsICdFX0pTT05fUEFSU0UnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XSxcblxuICAvKipcbiAgICogQSB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyB0byBhYm9ydCBhIHJlcXVlc3QuIElmIHNldCB0byAwIChkZWZhdWx0KSBhXG4gICAqIHRpbWVvdXQgaXMgbm90IGNyZWF0ZWQuXG4gICAqL1xuICB0aW1lb3V0OiAwLFxuXG4gIHhzcmZDb29raWVOYW1lOiAnWFNSRi1UT0tFTicsXG4gIHhzcmZIZWFkZXJOYW1lOiAnWC1YU1JGLVRPS0VOJyxcblxuICBtYXhDb250ZW50TGVuZ3RoOiAtMSxcbiAgbWF4Qm9keUxlbmd0aDogLTEsXG5cbiAgdmFsaWRhdGVTdGF0dXM6IGZ1bmN0aW9uIHZhbGlkYXRlU3RhdHVzKHN0YXR1cykge1xuICAgIHJldHVybiBzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMDtcbiAgfVxufTtcblxuZGVmYXVsdHMuaGVhZGVycyA9IHtcbiAgY29tbW9uOiB7XG4gICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyonXG4gIH1cbn07XG5cbnV0aWxzLmZvckVhY2goWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZE5vRGF0YShtZXRob2QpIHtcbiAgZGVmYXVsdHMuaGVhZGVyc1ttZXRob2RdID0ge307XG59KTtcblxudXRpbHMuZm9yRWFjaChbJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2RXaXRoRGF0YShtZXRob2QpIHtcbiAgZGVmYXVsdHMuaGVhZGVyc1ttZXRob2RdID0gdXRpbHMubWVyZ2UoREVGQVVMVF9DT05URU5UX1RZUEUpO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmYXVsdHM7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/axios/lib/defaults.js\n");

/***/ }),

/***/ "./node_modules/axios/lib/helpers/bind.js":
/*!************************************************!*\
  !*** ./node_modules/axios/lib/helpers/bind.js ***!
  \************************************************/
/***/ ((module) => {

"use strict";
eval("\n\nmodule.exports = function bind(fn, thisArg) {\n  return function wrap() {\n    var args = new Array(arguments.length);\n    for (var i = 0; i < args.length; i++) {\n      args[i] = arguments[i];\n    }\n    return fn.apply(thisArg, args);\n  };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvYmluZC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsaUJBQWlCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvYmluZC5qcz80YmVhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBiaW5kKGZuLCB0aGlzQXJnKSB7XG4gIHJldHVybiBmdW5jdGlvbiB3cmFwKCkge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgYXJnc1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoaXNBcmcsIGFyZ3MpO1xuICB9O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/axios/lib/helpers/bind.js\n");

/***/ }),

/***/ "./node_modules/axios/lib/helpers/buildURL.js":
/*!****************************************************!*\
  !*** ./node_modules/axios/lib/helpers/buildURL.js ***!
  \****************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";
eval("\n\nvar utils = __webpack_require__(/*! ./../utils */ \"./node_modules/axios/lib/utils.js\");\n\nfunction encode(val) {\n  return encodeURIComponent(val).\n    replace(/%3A/gi, ':').\n    replace(/%24/g, '$').\n    replace(/%2C/gi, ',').\n    replace(/%20/g, '+').\n    replace(/%5B/gi, '[').\n    replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n  /*eslint no-param-reassign:0*/\n  if (!params) {\n    return url;\n  }\n\n  var serializedParams;\n  if (paramsSerializer) {\n    serializedParams = paramsSerializer(params);\n  } else if (utils.isURLSearchParams(params)) {\n    serializedParams = params.toString();\n  } else {\n    var parts = [];\n\n    utils.forEach(params, function serialize(val, key) {\n      if (val === null || typeof val === 'undefined') {\n        return;\n      }\n\n      if (utils.isArray(val)) {\n        key = key + '[]';\n      } else {\n        val = [val];\n      }\n\n      utils.forEach(val, function parseValue(v) {\n        if (utils.isDate(v)) {\n          v = v.toISOString();\n        } else if (utils.isObject(v)) {\n          v = JSON.stringify(v);\n        }\n        parts.push(encode(key) + '=' + encode(v));\n      });\n    });\n\n    serializedParams = parts.join('&');\n  }\n\n  if (serializedParams) {\n    var hashmarkIndex = url.indexOf('#');\n    if (hashmarkIndex !== -1) {\n      url = url.slice(0, hashmarkIndex);\n    }\n\n    url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n  }\n\n  return url;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvYnVpbGRVUkwuanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsWUFBWSxtQkFBTyxDQUFDLHFEQUFZOztBQUVoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvYnVpbGRVUkwuanM/YzE3OCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxuZnVuY3Rpb24gZW5jb2RlKHZhbCkge1xuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHZhbCkuXG4gICAgcmVwbGFjZSgvJTNBL2dpLCAnOicpLlxuICAgIHJlcGxhY2UoLyUyNC9nLCAnJCcpLlxuICAgIHJlcGxhY2UoLyUyQy9naSwgJywnKS5cbiAgICByZXBsYWNlKC8lMjAvZywgJysnKS5cbiAgICByZXBsYWNlKC8lNUIvZ2ksICdbJykuXG4gICAgcmVwbGFjZSgvJTVEL2dpLCAnXScpO1xufVxuXG4vKipcbiAqIEJ1aWxkIGEgVVJMIGJ5IGFwcGVuZGluZyBwYXJhbXMgdG8gdGhlIGVuZFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIGJhc2Ugb2YgdGhlIHVybCAoZS5nLiwgaHR0cDovL3d3dy5nb29nbGUuY29tKVxuICogQHBhcmFtIHtvYmplY3R9IFtwYXJhbXNdIFRoZSBwYXJhbXMgdG8gYmUgYXBwZW5kZWRcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBmb3JtYXR0ZWQgdXJsXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYnVpbGRVUkwodXJsLCBwYXJhbXMsIHBhcmFtc1NlcmlhbGl6ZXIpIHtcbiAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gIGlmICghcGFyYW1zKSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuXG4gIHZhciBzZXJpYWxpemVkUGFyYW1zO1xuICBpZiAocGFyYW1zU2VyaWFsaXplcikge1xuICAgIHNlcmlhbGl6ZWRQYXJhbXMgPSBwYXJhbXNTZXJpYWxpemVyKHBhcmFtcyk7XG4gIH0gZWxzZSBpZiAodXRpbHMuaXNVUkxTZWFyY2hQYXJhbXMocGFyYW1zKSkge1xuICAgIHNlcmlhbGl6ZWRQYXJhbXMgPSBwYXJhbXMudG9TdHJpbmcoKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgcGFydHMgPSBbXTtcblxuICAgIHV0aWxzLmZvckVhY2gocGFyYW1zLCBmdW5jdGlvbiBzZXJpYWxpemUodmFsLCBrZXkpIHtcbiAgICAgIGlmICh2YWwgPT09IG51bGwgfHwgdHlwZW9mIHZhbCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAodXRpbHMuaXNBcnJheSh2YWwpKSB7XG4gICAgICAgIGtleSA9IGtleSArICdbXSc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWwgPSBbdmFsXTtcbiAgICAgIH1cblxuICAgICAgdXRpbHMuZm9yRWFjaCh2YWwsIGZ1bmN0aW9uIHBhcnNlVmFsdWUodikge1xuICAgICAgICBpZiAodXRpbHMuaXNEYXRlKHYpKSB7XG4gICAgICAgICAgdiA9IHYudG9JU09TdHJpbmcoKTtcbiAgICAgICAgfSBlbHNlIGlmICh1dGlscy5pc09iamVjdCh2KSkge1xuICAgICAgICAgIHYgPSBKU09OLnN0cmluZ2lmeSh2KTtcbiAgICAgICAgfVxuICAgICAgICBwYXJ0cy5wdXNoKGVuY29kZShrZXkpICsgJz0nICsgZW5jb2RlKHYpKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHBhcnRzLmpvaW4oJyYnKTtcbiAgfVxuXG4gIGlmIChzZXJpYWxpemVkUGFyYW1zKSB7XG4gICAgdmFyIGhhc2htYXJrSW5kZXggPSB1cmwuaW5kZXhPZignIycpO1xuICAgIGlmIChoYXNobWFya0luZGV4ICE9PSAtMSkge1xuICAgICAgdXJsID0gdXJsLnNsaWNlKDAsIGhhc2htYXJrSW5kZXgpO1xuICAgIH1cblxuICAgIHVybCArPSAodXJsLmluZGV4T2YoJz8nKSA9PT0gLTEgPyAnPycgOiAnJicpICsgc2VyaWFsaXplZFBhcmFtcztcbiAgfVxuXG4gIHJldHVybiB1cmw7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/axios/lib/helpers/buildURL.js\n");

/***/ }),

/***/ "./node_modules/axios/lib/helpers/combineURLs.js":
/*!*******************************************************!*\
  !*** ./node_modules/axios/lib/helpers/combineURLs.js ***!
  \*******************************************************/
/***/ ((module) => {

"use strict";
eval("\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n  return relativeURL\n    ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n    : baseURL;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvY29tYmluZVVSTHMuanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2NvbWJpbmVVUkxzLmpzPzZiYzYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgVVJMIGJ5IGNvbWJpbmluZyB0aGUgc3BlY2lmaWVkIFVSTHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZVVSTCBUaGUgYmFzZSBVUkxcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWxhdGl2ZVVSTCBUaGUgcmVsYXRpdmUgVVJMXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29tYmluZWQgVVJMXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY29tYmluZVVSTHMoYmFzZVVSTCwgcmVsYXRpdmVVUkwpIHtcbiAgcmV0dXJuIHJlbGF0aXZlVVJMXG4gICAgPyBiYXNlVVJMLnJlcGxhY2UoL1xcLyskLywgJycpICsgJy8nICsgcmVsYXRpdmVVUkwucmVwbGFjZSgvXlxcLysvLCAnJylcbiAgICA6IGJhc2VVUkw7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/axios/lib/helpers/combineURLs.js\n");

/***/ }),

/***/ "./node_modules/axios/lib/helpers/cookies.js":
/*!***************************************************!*\
  !*** ./node_modules/axios/lib/helpers/cookies.js ***!
  \***************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";
eval("\n\nvar utils = __webpack_require__(/*! ./../utils */ \"./node_modules/axios/lib/utils.js\");\n\nmodule.exports = (\n  utils.isStandardBrowserEnv() ?\n\n  // Standard browser envs support document.cookie\n    (function standardBrowserEnv() {\n      return {\n        write: function write(name, value, expires, path, domain, secure) {\n          var cookie = [];\n          cookie.push(name + '=' + encodeURIComponent(value));\n\n          if (utils.isNumber(expires)) {\n            cookie.push('expires=' + new Date(expires).toGMTString());\n          }\n\n          if (utils.isString(path)) {\n            cookie.push('path=' + path);\n          }\n\n          if (utils.isString(domain)) {\n            cookie.push('domain=' + domain);\n          }\n\n          if (secure === true) {\n            cookie.push('secure');\n          }\n\n          document.cookie = cookie.join('; ');\n        },\n\n        read: function read(name) {\n          var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n          return (match ? decodeURIComponent(match[3]) : null);\n        },\n\n        remove: function remove(name) {\n          this.write(name, '', Date.now() - 86400000);\n        }\n      };\n    })() :\n\n  // Non standard browser env (web workers, react-native) lack needed support.\n    (function nonStandardBrowserEnv() {\n      return {\n        write: function write() {},\n        read: function read() { return null; },\n        remove: function remove() {}\n      };\n    })()\n);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvY29va2llcy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMscURBQVk7O0FBRWhDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSwyQ0FBMkM7QUFDM0MsU0FBUzs7QUFFVDtBQUNBLDREQUE0RCx3QkFBd0I7QUFDcEY7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0M7QUFDbEMsZ0NBQWdDLGNBQWM7QUFDOUM7QUFDQTtBQUNBLEtBQUs7QUFDTCIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9jb29raWVzLmpzPzFkM2YiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gKFxuICB1dGlscy5pc1N0YW5kYXJkQnJvd3NlckVudigpID9cblxuICAvLyBTdGFuZGFyZCBicm93c2VyIGVudnMgc3VwcG9ydCBkb2N1bWVudC5jb29raWVcbiAgICAoZnVuY3Rpb24gc3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgd3JpdGU6IGZ1bmN0aW9uIHdyaXRlKG5hbWUsIHZhbHVlLCBleHBpcmVzLCBwYXRoLCBkb21haW4sIHNlY3VyZSkge1xuICAgICAgICAgIHZhciBjb29raWUgPSBbXTtcbiAgICAgICAgICBjb29raWUucHVzaChuYW1lICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKSk7XG5cbiAgICAgICAgICBpZiAodXRpbHMuaXNOdW1iZXIoZXhwaXJlcykpIHtcbiAgICAgICAgICAgIGNvb2tpZS5wdXNoKCdleHBpcmVzPScgKyBuZXcgRGF0ZShleHBpcmVzKS50b0dNVFN0cmluZygpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodXRpbHMuaXNTdHJpbmcocGF0aCkpIHtcbiAgICAgICAgICAgIGNvb2tpZS5wdXNoKCdwYXRoPScgKyBwYXRoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodXRpbHMuaXNTdHJpbmcoZG9tYWluKSkge1xuICAgICAgICAgICAgY29va2llLnB1c2goJ2RvbWFpbj0nICsgZG9tYWluKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoc2VjdXJlID09PSB0cnVlKSB7XG4gICAgICAgICAgICBjb29raWUucHVzaCgnc2VjdXJlJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZG9jdW1lbnQuY29va2llID0gY29va2llLmpvaW4oJzsgJyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcmVhZDogZnVuY3Rpb24gcmVhZChuYW1lKSB7XG4gICAgICAgICAgdmFyIG1hdGNoID0gZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoJyhefDtcXFxccyopKCcgKyBuYW1lICsgJyk9KFteO10qKScpKTtcbiAgICAgICAgICByZXR1cm4gKG1hdGNoID8gZGVjb2RlVVJJQ29tcG9uZW50KG1hdGNoWzNdKSA6IG51bGwpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlKG5hbWUpIHtcbiAgICAgICAgICB0aGlzLndyaXRlKG5hbWUsICcnLCBEYXRlLm5vdygpIC0gODY0MDAwMDApO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0pKCkgOlxuXG4gIC8vIE5vbiBzdGFuZGFyZCBicm93c2VyIGVudiAod2ViIHdvcmtlcnMsIHJlYWN0LW5hdGl2ZSkgbGFjayBuZWVkZWQgc3VwcG9ydC5cbiAgICAoZnVuY3Rpb24gbm9uU3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgd3JpdGU6IGZ1bmN0aW9uIHdyaXRlKCkge30sXG4gICAgICAgIHJlYWQ6IGZ1bmN0aW9uIHJlYWQoKSB7IHJldHVybiBudWxsOyB9LFxuICAgICAgICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZSgpIHt9XG4gICAgICB9O1xuICAgIH0pKClcbik7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/axios/lib/helpers/cookies.js\n");

/***/ }),

/***/ "./node_modules/axios/lib/helpers/isAbsoluteURL.js":
/*!*********************************************************!*\
  !*** ./node_modules/axios/lib/helpers/isAbsoluteURL.js ***!
  \*********************************************************/
/***/ ((module) => {

"use strict";
eval("\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nmodule.exports = function isAbsoluteURL(url) {\n  // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n  // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n  // by any combination of letters, digits, plus, period, or hyphen.\n  return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNBYnNvbHV0ZVVSTC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsYUFBYSxTQUFTO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2lzQWJzb2x1dGVVUkwuanM/YTIyNyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgVVJMIGlzIGFic29sdXRlXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgVVJMIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBzcGVjaWZpZWQgVVJMIGlzIGFic29sdXRlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0Fic29sdXRlVVJMKHVybCkge1xuICAvLyBBIFVSTCBpcyBjb25zaWRlcmVkIGFic29sdXRlIGlmIGl0IGJlZ2lucyB3aXRoIFwiPHNjaGVtZT46Ly9cIiBvciBcIi8vXCIgKHByb3RvY29sLXJlbGF0aXZlIFVSTCkuXG4gIC8vIFJGQyAzOTg2IGRlZmluZXMgc2NoZW1lIG5hbWUgYXMgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIGJlZ2lubmluZyB3aXRoIGEgbGV0dGVyIGFuZCBmb2xsb3dlZFxuICAvLyBieSBhbnkgY29tYmluYXRpb24gb2YgbGV0dGVycywgZGlnaXRzLCBwbHVzLCBwZXJpb2QsIG9yIGh5cGhlbi5cbiAgcmV0dXJuIC9eKFthLXpdW2EtelxcZFxcK1xcLVxcLl0qOik/XFwvXFwvL2kudGVzdCh1cmwpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/axios/lib/helpers/isAbsoluteURL.js\n");

/***/ }),

/***/ "./node_modules/axios/lib/helpers/isAxiosError.js":
/*!********************************************************!*\
  !*** ./node_modules/axios/lib/helpers/isAxiosError.js ***!
  \********************************************************/
/***/ ((module) => {

"use strict";
eval("\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nmodule.exports = function isAxiosError(payload) {\n  return (typeof payload === 'object') && (payload.isAxiosError === true);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNBeGlvc0Vycm9yLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBLFdBQVcsR0FBRztBQUNkLGFBQWEsU0FBUztBQUN0QjtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc0F4aW9zRXJyb3IuanM/YmQ5ZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBwYXlsb2FkIGlzIGFuIGVycm9yIHRocm93biBieSBBeGlvc1xuICpcbiAqIEBwYXJhbSB7Kn0gcGF5bG9hZCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHBheWxvYWQgaXMgYW4gZXJyb3IgdGhyb3duIGJ5IEF4aW9zLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0F4aW9zRXJyb3IocGF5bG9hZCkge1xuICByZXR1cm4gKHR5cGVvZiBwYXlsb2FkID09PSAnb2JqZWN0JykgJiYgKHBheWxvYWQuaXNBeGlvc0Vycm9yID09PSB0cnVlKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/axios/lib/helpers/isAxiosError.js\n");

/***/ }),

/***/ "./node_modules/axios/lib/helpers/isURLSameOrigin.js":
/*!***********************************************************!*\
  !*** ./node_modules/axios/lib/helpers/isURLSameOrigin.js ***!
  \***********************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";
eval("\n\nvar utils = __webpack_require__(/*! ./../utils */ \"./node_modules/axios/lib/utils.js\");\n\nmodule.exports = (\n  utils.isStandardBrowserEnv() ?\n\n  // Standard browser envs have full support of the APIs needed to test\n  // whether the request URL is of the same origin as current location.\n    (function standardBrowserEnv() {\n      var msie = /(msie|trident)/i.test(navigator.userAgent);\n      var urlParsingNode = document.createElement('a');\n      var originURL;\n\n      /**\n    * Parse a URL to discover it's components\n    *\n    * @param {String} url The URL to be parsed\n    * @returns {Object}\n    */\n      function resolveURL(url) {\n        var href = url;\n\n        if (msie) {\n        // IE needs attribute set twice to normalize properties\n          urlParsingNode.setAttribute('href', href);\n          href = urlParsingNode.href;\n        }\n\n        urlParsingNode.setAttribute('href', href);\n\n        // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n        return {\n          href: urlParsingNode.href,\n          protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n          host: urlParsingNode.host,\n          search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n          hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n          hostname: urlParsingNode.hostname,\n          port: urlParsingNode.port,\n          pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n            urlParsingNode.pathname :\n            '/' + urlParsingNode.pathname\n        };\n      }\n\n      originURL = resolveURL(window.location.href);\n\n      /**\n    * Determine if a URL shares the same origin as the current location\n    *\n    * @param {String} requestURL The URL to test\n    * @returns {boolean} True if URL shares the same origin, otherwise false\n    */\n      return function isURLSameOrigin(requestURL) {\n        var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n        return (parsed.protocol === originURL.protocol &&\n            parsed.host === originURL.host);\n      };\n    })() :\n\n  // Non standard browser envs (web workers, react-native) lack needed support.\n    (function nonStandardBrowserEnv() {\n      return function isURLSameOrigin() {\n        return true;\n      };\n    })()\n);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNVUkxTYW1lT3JpZ2luLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFlBQVksbUJBQU8sQ0FBQyxxREFBWTs7QUFFaEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsY0FBYyxRQUFRO0FBQ3RCLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsUUFBUTtBQUN0QixnQkFBZ0IsU0FBUztBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNVUkxTYW1lT3JpZ2luLmpzPzg3OTUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gKFxuICB1dGlscy5pc1N0YW5kYXJkQnJvd3NlckVudigpID9cblxuICAvLyBTdGFuZGFyZCBicm93c2VyIGVudnMgaGF2ZSBmdWxsIHN1cHBvcnQgb2YgdGhlIEFQSXMgbmVlZGVkIHRvIHRlc3RcbiAgLy8gd2hldGhlciB0aGUgcmVxdWVzdCBVUkwgaXMgb2YgdGhlIHNhbWUgb3JpZ2luIGFzIGN1cnJlbnQgbG9jYXRpb24uXG4gICAgKGZ1bmN0aW9uIHN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICAgIHZhciBtc2llID0gLyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbiAgICAgIHZhciB1cmxQYXJzaW5nTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICAgIHZhciBvcmlnaW5VUkw7XG5cbiAgICAgIC8qKlxuICAgICogUGFyc2UgYSBVUkwgdG8gZGlzY292ZXIgaXQncyBjb21wb25lbnRzXG4gICAgKlxuICAgICogQHBhcmFtIHtTdHJpbmd9IHVybCBUaGUgVVJMIHRvIGJlIHBhcnNlZFxuICAgICogQHJldHVybnMge09iamVjdH1cbiAgICAqL1xuICAgICAgZnVuY3Rpb24gcmVzb2x2ZVVSTCh1cmwpIHtcbiAgICAgICAgdmFyIGhyZWYgPSB1cmw7XG5cbiAgICAgICAgaWYgKG1zaWUpIHtcbiAgICAgICAgLy8gSUUgbmVlZHMgYXR0cmlidXRlIHNldCB0d2ljZSB0byBub3JtYWxpemUgcHJvcGVydGllc1xuICAgICAgICAgIHVybFBhcnNpbmdOb2RlLnNldEF0dHJpYnV0ZSgnaHJlZicsIGhyZWYpO1xuICAgICAgICAgIGhyZWYgPSB1cmxQYXJzaW5nTm9kZS5ocmVmO1xuICAgICAgICB9XG5cbiAgICAgICAgdXJsUGFyc2luZ05vZGUuc2V0QXR0cmlidXRlKCdocmVmJywgaHJlZik7XG5cbiAgICAgICAgLy8gdXJsUGFyc2luZ05vZGUgcHJvdmlkZXMgdGhlIFVybFV0aWxzIGludGVyZmFjZSAtIGh0dHA6Ly91cmwuc3BlYy53aGF0d2cub3JnLyN1cmx1dGlsc1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGhyZWY6IHVybFBhcnNpbmdOb2RlLmhyZWYsXG4gICAgICAgICAgcHJvdG9jb2w6IHVybFBhcnNpbmdOb2RlLnByb3RvY29sID8gdXJsUGFyc2luZ05vZGUucHJvdG9jb2wucmVwbGFjZSgvOiQvLCAnJykgOiAnJyxcbiAgICAgICAgICBob3N0OiB1cmxQYXJzaW5nTm9kZS5ob3N0LFxuICAgICAgICAgIHNlYXJjaDogdXJsUGFyc2luZ05vZGUuc2VhcmNoID8gdXJsUGFyc2luZ05vZGUuc2VhcmNoLnJlcGxhY2UoL15cXD8vLCAnJykgOiAnJyxcbiAgICAgICAgICBoYXNoOiB1cmxQYXJzaW5nTm9kZS5oYXNoID8gdXJsUGFyc2luZ05vZGUuaGFzaC5yZXBsYWNlKC9eIy8sICcnKSA6ICcnLFxuICAgICAgICAgIGhvc3RuYW1lOiB1cmxQYXJzaW5nTm9kZS5ob3N0bmFtZSxcbiAgICAgICAgICBwb3J0OiB1cmxQYXJzaW5nTm9kZS5wb3J0LFxuICAgICAgICAgIHBhdGhuYW1lOiAodXJsUGFyc2luZ05vZGUucGF0aG5hbWUuY2hhckF0KDApID09PSAnLycpID9cbiAgICAgICAgICAgIHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lIDpcbiAgICAgICAgICAgICcvJyArIHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIG9yaWdpblVSTCA9IHJlc29sdmVVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO1xuXG4gICAgICAvKipcbiAgICAqIERldGVybWluZSBpZiBhIFVSTCBzaGFyZXMgdGhlIHNhbWUgb3JpZ2luIGFzIHRoZSBjdXJyZW50IGxvY2F0aW9uXG4gICAgKlxuICAgICogQHBhcmFtIHtTdHJpbmd9IHJlcXVlc3RVUkwgVGhlIFVSTCB0byB0ZXN0XG4gICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiBVUkwgc2hhcmVzIHRoZSBzYW1lIG9yaWdpbiwgb3RoZXJ3aXNlIGZhbHNlXG4gICAgKi9cbiAgICAgIHJldHVybiBmdW5jdGlvbiBpc1VSTFNhbWVPcmlnaW4ocmVxdWVzdFVSTCkge1xuICAgICAgICB2YXIgcGFyc2VkID0gKHV0aWxzLmlzU3RyaW5nKHJlcXVlc3RVUkwpKSA/IHJlc29sdmVVUkwocmVxdWVzdFVSTCkgOiByZXF1ZXN0VVJMO1xuICAgICAgICByZXR1cm4gKHBhcnNlZC5wcm90b2NvbCA9PT0gb3JpZ2luVVJMLnByb3RvY29sICYmXG4gICAgICAgICAgICBwYXJzZWQuaG9zdCA9PT0gb3JpZ2luVVJMLmhvc3QpO1xuICAgICAgfTtcbiAgICB9KSgpIDpcblxuICAvLyBOb24gc3RhbmRhcmQgYnJvd3NlciBlbnZzICh3ZWIgd29ya2VycywgcmVhY3QtbmF0aXZlKSBsYWNrIG5lZWRlZCBzdXBwb3J0LlxuICAgIChmdW5jdGlvbiBub25TdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gaXNVUkxTYW1lT3JpZ2luKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH07XG4gICAgfSkoKVxuKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/axios/lib/helpers/isURLSameOrigin.js\n");

/***/ }),

/***/ "./node_modules/axios/lib/helpers/normalizeHeaderName.js":
/*!***************************************************************!*\
  !*** ./node_modules/axios/lib/helpers/normalizeHeaderName.js ***!
  \***************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";
eval("\n\nvar utils = __webpack_require__(/*! ../utils */ \"./node_modules/axios/lib/utils.js\");\n\nmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n  utils.forEach(headers, function processHeader(value, name) {\n    if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n      headers[normalizedName] = value;\n      delete headers[name];\n    }\n  });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvbm9ybWFsaXplSGVhZGVyTmFtZS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsbURBQVU7O0FBRTlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9ub3JtYWxpemVIZWFkZXJOYW1lLmpzPzZiMTUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIG5vcm1hbGl6ZUhlYWRlck5hbWUoaGVhZGVycywgbm9ybWFsaXplZE5hbWUpIHtcbiAgdXRpbHMuZm9yRWFjaChoZWFkZXJzLCBmdW5jdGlvbiBwcm9jZXNzSGVhZGVyKHZhbHVlLCBuYW1lKSB7XG4gICAgaWYgKG5hbWUgIT09IG5vcm1hbGl6ZWROYW1lICYmIG5hbWUudG9VcHBlckNhc2UoKSA9PT0gbm9ybWFsaXplZE5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgaGVhZGVyc1tub3JtYWxpemVkTmFtZV0gPSB2YWx1ZTtcbiAgICAgIGRlbGV0ZSBoZWFkZXJzW25hbWVdO1xuICAgIH1cbiAgfSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/axios/lib/helpers/normalizeHeaderName.js\n");

/***/ }),

/***/ "./node_modules/axios/lib/helpers/parseHeaders.js":
/*!********************************************************!*\
  !*** ./node_modules/axios/lib/helpers/parseHeaders.js ***!
  \********************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";
eval("\n\nvar utils = __webpack_require__(/*! ./../utils */ \"./node_modules/axios/lib/utils.js\");\n\n// Headers whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nvar ignoreDuplicateOf = [\n  'age', 'authorization', 'content-length', 'content-type', 'etag',\n  'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n  'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n  'referer', 'retry-after', 'user-agent'\n];\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n  var parsed = {};\n  var key;\n  var val;\n  var i;\n\n  if (!headers) { return parsed; }\n\n  utils.forEach(headers.split('\\n'), function parser(line) {\n    i = line.indexOf(':');\n    key = utils.trim(line.substr(0, i)).toLowerCase();\n    val = utils.trim(line.substr(i + 1));\n\n    if (key) {\n      if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {\n        return;\n      }\n      if (key === 'set-cookie') {\n        parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);\n      } else {\n        parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n      }\n    }\n  });\n\n  return parsed;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvcGFyc2VIZWFkZXJzLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFlBQVksbUJBQU8sQ0FBQyxxREFBWTs7QUFFaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtCQUFrQjs7QUFFbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9wYXJzZUhlYWRlcnMuanM/NTRlOSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxuLy8gSGVhZGVycyB3aG9zZSBkdXBsaWNhdGVzIGFyZSBpZ25vcmVkIGJ5IG5vZGVcbi8vIGMuZi4gaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9odHRwLmh0bWwjaHR0cF9tZXNzYWdlX2hlYWRlcnNcbnZhciBpZ25vcmVEdXBsaWNhdGVPZiA9IFtcbiAgJ2FnZScsICdhdXRob3JpemF0aW9uJywgJ2NvbnRlbnQtbGVuZ3RoJywgJ2NvbnRlbnQtdHlwZScsICdldGFnJyxcbiAgJ2V4cGlyZXMnLCAnZnJvbScsICdob3N0JywgJ2lmLW1vZGlmaWVkLXNpbmNlJywgJ2lmLXVubW9kaWZpZWQtc2luY2UnLFxuICAnbGFzdC1tb2RpZmllZCcsICdsb2NhdGlvbicsICdtYXgtZm9yd2FyZHMnLCAncHJveHktYXV0aG9yaXphdGlvbicsXG4gICdyZWZlcmVyJywgJ3JldHJ5LWFmdGVyJywgJ3VzZXItYWdlbnQnXG5dO1xuXG4vKipcbiAqIFBhcnNlIGhlYWRlcnMgaW50byBhbiBvYmplY3RcbiAqXG4gKiBgYGBcbiAqIERhdGU6IFdlZCwgMjcgQXVnIDIwMTQgMDg6NTg6NDkgR01UXG4gKiBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb25cbiAqIENvbm5lY3Rpb246IGtlZXAtYWxpdmVcbiAqIFRyYW5zZmVyLUVuY29kaW5nOiBjaHVua2VkXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaGVhZGVycyBIZWFkZXJzIG5lZWRpbmcgdG8gYmUgcGFyc2VkXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBIZWFkZXJzIHBhcnNlZCBpbnRvIGFuIG9iamVjdFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHBhcnNlSGVhZGVycyhoZWFkZXJzKSB7XG4gIHZhciBwYXJzZWQgPSB7fTtcbiAgdmFyIGtleTtcbiAgdmFyIHZhbDtcbiAgdmFyIGk7XG5cbiAgaWYgKCFoZWFkZXJzKSB7IHJldHVybiBwYXJzZWQ7IH1cblxuICB1dGlscy5mb3JFYWNoKGhlYWRlcnMuc3BsaXQoJ1xcbicpLCBmdW5jdGlvbiBwYXJzZXIobGluZSkge1xuICAgIGkgPSBsaW5lLmluZGV4T2YoJzonKTtcbiAgICBrZXkgPSB1dGlscy50cmltKGxpbmUuc3Vic3RyKDAsIGkpKS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhbCA9IHV0aWxzLnRyaW0obGluZS5zdWJzdHIoaSArIDEpKTtcblxuICAgIGlmIChrZXkpIHtcbiAgICAgIGlmIChwYXJzZWRba2V5XSAmJiBpZ25vcmVEdXBsaWNhdGVPZi5pbmRleE9mKGtleSkgPj0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoa2V5ID09PSAnc2V0LWNvb2tpZScpIHtcbiAgICAgICAgcGFyc2VkW2tleV0gPSAocGFyc2VkW2tleV0gPyBwYXJzZWRba2V5XSA6IFtdKS5jb25jYXQoW3ZhbF0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyc2VkW2tleV0gPSBwYXJzZWRba2V5XSA/IHBhcnNlZFtrZXldICsgJywgJyArIHZhbCA6IHZhbDtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBwYXJzZWQ7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/axios/lib/helpers/parseHeaders.js\n");

/***/ }),

/***/ "./node_modules/axios/lib/helpers/spread.js":
/*!**************************************************!*\
  !*** ./node_modules/axios/lib/helpers/spread.js ***!
  \**************************************************/
/***/ ((module) => {

"use strict";
eval("\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n *  ```js\n *  function f(x, y, z) {}\n *  var args = [1, 2, 3];\n *  f.apply(null, args);\n *  ```\n *\n * With `spread` this example can be re-written.\n *\n *  ```js\n *  spread(function(x, y, z) {})([1, 2, 3]);\n *  ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n  return function wrap(arr) {\n    return callback.apply(null, arr);\n  };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvc3ByZWFkLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0I7QUFDL0I7QUFDQTtBQUNBLFdBQVcsVUFBVTtBQUNyQixhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3NwcmVhZC5qcz8yNzI5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBTeW50YWN0aWMgc3VnYXIgZm9yIGludm9raW5nIGEgZnVuY3Rpb24gYW5kIGV4cGFuZGluZyBhbiBhcnJheSBmb3IgYXJndW1lbnRzLlxuICpcbiAqIENvbW1vbiB1c2UgY2FzZSB3b3VsZCBiZSB0byB1c2UgYEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseWAuXG4gKlxuICogIGBgYGpzXG4gKiAgZnVuY3Rpb24gZih4LCB5LCB6KSB7fVxuICogIHZhciBhcmdzID0gWzEsIDIsIDNdO1xuICogIGYuYXBwbHkobnVsbCwgYXJncyk7XG4gKiAgYGBgXG4gKlxuICogV2l0aCBgc3ByZWFkYCB0aGlzIGV4YW1wbGUgY2FuIGJlIHJlLXdyaXR0ZW4uXG4gKlxuICogIGBgYGpzXG4gKiAgc3ByZWFkKGZ1bmN0aW9uKHgsIHksIHopIHt9KShbMSwgMiwgM10pO1xuICogIGBgYFxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc3ByZWFkKGNhbGxiYWNrKSB7XG4gIHJldHVybiBmdW5jdGlvbiB3cmFwKGFycikge1xuICAgIHJldHVybiBjYWxsYmFjay5hcHBseShudWxsLCBhcnIpO1xuICB9O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/axios/lib/helpers/spread.js\n");

/***/ }),

/***/ "./node_modules/axios/lib/helpers/validator.js":
/*!*****************************************************!*\
  !*** ./node_modules/axios/lib/helpers/validator.js ***!
  \*****************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";
eval("\n\nvar pkg = __webpack_require__(/*! ./../../package.json */ \"./node_modules/axios/package.json\");\n\nvar validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach(function(type, i) {\n  validators[type] = function validator(thing) {\n    return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n  };\n});\n\nvar deprecatedWarnings = {};\nvar currentVerArr = pkg.version.split('.');\n\n/**\n * Compare package versions\n * @param {string} version\n * @param {string?} thanVersion\n * @returns {boolean}\n */\nfunction isOlderVersion(version, thanVersion) {\n  var pkgVersionArr = thanVersion ? thanVersion.split('.') : currentVerArr;\n  var destVer = version.split('.');\n  for (var i = 0; i < 3; i++) {\n    if (pkgVersionArr[i] > destVer[i]) {\n      return true;\n    } else if (pkgVersionArr[i] < destVer[i]) {\n      return false;\n    }\n  }\n  return false;\n}\n\n/**\n * Transitional option validator\n * @param {function|boolean?} validator\n * @param {string?} version\n * @param {string} message\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n  var isDeprecated = version && isOlderVersion(version);\n\n  function formatMessage(opt, desc) {\n    return '[Axios v' + pkg.version + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n  }\n\n  // eslint-disable-next-line func-names\n  return function(value, opt, opts) {\n    if (validator === false) {\n      throw new Error(formatMessage(opt, ' has been removed in ' + version));\n    }\n\n    if (isDeprecated && !deprecatedWarnings[opt]) {\n      deprecatedWarnings[opt] = true;\n      // eslint-disable-next-line no-console\n      console.warn(\n        formatMessage(\n          opt,\n          ' has been deprecated since v' + version + ' and will be removed in the near future'\n        )\n      );\n    }\n\n    return validator ? validator(value, opt, opts) : true;\n  };\n};\n\n/**\n * Assert object's properties type\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n  if (typeof options !== 'object') {\n    throw new TypeError('options must be an object');\n  }\n  var keys = Object.keys(options);\n  var i = keys.length;\n  while (i-- > 0) {\n    var opt = keys[i];\n    var validator = schema[opt];\n    if (validator) {\n      var value = options[opt];\n      var result = value === undefined || validator(value, opt, options);\n      if (result !== true) {\n        throw new TypeError('option ' + opt + ' must be ' + result);\n      }\n      continue;\n    }\n    if (allowUnknown !== true) {\n      throw Error('Unknown option ' + opt);\n    }\n  }\n}\n\nmodule.exports = {\n  isOlderVersion: isOlderVersion,\n  assertOptions: assertOptions,\n  validators: validators\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvdmFsaWRhdG9yLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFVBQVUsbUJBQU8sQ0FBQywrREFBc0I7O0FBRXhDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLFNBQVM7QUFDcEIsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLE9BQU87QUFDekI7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLG1CQUFtQjtBQUM5QixXQUFXLFNBQVM7QUFDcEIsV0FBVyxRQUFRO0FBQ25CLGFBQWE7QUFDYjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsVUFBVTtBQUNyQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3ZhbGlkYXRvci5qcz8wMTMyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHBrZyA9IHJlcXVpcmUoJy4vLi4vLi4vcGFja2FnZS5qc29uJyk7XG5cbnZhciB2YWxpZGF0b3JzID0ge307XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5bJ29iamVjdCcsICdib29sZWFuJywgJ251bWJlcicsICdmdW5jdGlvbicsICdzdHJpbmcnLCAnc3ltYm9sJ10uZm9yRWFjaChmdW5jdGlvbih0eXBlLCBpKSB7XG4gIHZhbGlkYXRvcnNbdHlwZV0gPSBmdW5jdGlvbiB2YWxpZGF0b3IodGhpbmcpIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaW5nID09PSB0eXBlIHx8ICdhJyArIChpIDwgMSA/ICduICcgOiAnICcpICsgdHlwZTtcbiAgfTtcbn0pO1xuXG52YXIgZGVwcmVjYXRlZFdhcm5pbmdzID0ge307XG52YXIgY3VycmVudFZlckFyciA9IHBrZy52ZXJzaW9uLnNwbGl0KCcuJyk7XG5cbi8qKlxuICogQ29tcGFyZSBwYWNrYWdlIHZlcnNpb25zXG4gKiBAcGFyYW0ge3N0cmluZ30gdmVyc2lvblxuICogQHBhcmFtIHtzdHJpbmc/fSB0aGFuVmVyc2lvblxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzT2xkZXJWZXJzaW9uKHZlcnNpb24sIHRoYW5WZXJzaW9uKSB7XG4gIHZhciBwa2dWZXJzaW9uQXJyID0gdGhhblZlcnNpb24gPyB0aGFuVmVyc2lvbi5zcGxpdCgnLicpIDogY3VycmVudFZlckFycjtcbiAgdmFyIGRlc3RWZXIgPSB2ZXJzaW9uLnNwbGl0KCcuJyk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMzsgaSsrKSB7XG4gICAgaWYgKHBrZ1ZlcnNpb25BcnJbaV0gPiBkZXN0VmVyW2ldKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKHBrZ1ZlcnNpb25BcnJbaV0gPCBkZXN0VmVyW2ldKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBUcmFuc2l0aW9uYWwgb3B0aW9uIHZhbGlkYXRvclxuICogQHBhcmFtIHtmdW5jdGlvbnxib29sZWFuP30gdmFsaWRhdG9yXG4gKiBAcGFyYW0ge3N0cmluZz99IHZlcnNpb25cbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259XG4gKi9cbnZhbGlkYXRvcnMudHJhbnNpdGlvbmFsID0gZnVuY3Rpb24gdHJhbnNpdGlvbmFsKHZhbGlkYXRvciwgdmVyc2lvbiwgbWVzc2FnZSkge1xuICB2YXIgaXNEZXByZWNhdGVkID0gdmVyc2lvbiAmJiBpc09sZGVyVmVyc2lvbih2ZXJzaW9uKTtcblxuICBmdW5jdGlvbiBmb3JtYXRNZXNzYWdlKG9wdCwgZGVzYykge1xuICAgIHJldHVybiAnW0F4aW9zIHYnICsgcGtnLnZlcnNpb24gKyAnXSBUcmFuc2l0aW9uYWwgb3B0aW9uIFxcJycgKyBvcHQgKyAnXFwnJyArIGRlc2MgKyAobWVzc2FnZSA/ICcuICcgKyBtZXNzYWdlIDogJycpO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlLCBvcHQsIG9wdHMpIHtcbiAgICBpZiAodmFsaWRhdG9yID09PSBmYWxzZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGZvcm1hdE1lc3NhZ2Uob3B0LCAnIGhhcyBiZWVuIHJlbW92ZWQgaW4gJyArIHZlcnNpb24pKTtcbiAgICB9XG5cbiAgICBpZiAoaXNEZXByZWNhdGVkICYmICFkZXByZWNhdGVkV2FybmluZ3Nbb3B0XSkge1xuICAgICAgZGVwcmVjYXRlZFdhcm5pbmdzW29wdF0gPSB0cnVlO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgZm9ybWF0TWVzc2FnZShcbiAgICAgICAgICBvcHQsXG4gICAgICAgICAgJyBoYXMgYmVlbiBkZXByZWNhdGVkIHNpbmNlIHYnICsgdmVyc2lvbiArICcgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUnXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRvciA/IHZhbGlkYXRvcih2YWx1ZSwgb3B0LCBvcHRzKSA6IHRydWU7XG4gIH07XG59O1xuXG4vKipcbiAqIEFzc2VydCBvYmplY3QncyBwcm9wZXJ0aWVzIHR5cGVcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gKiBAcGFyYW0ge29iamVjdH0gc2NoZW1hXG4gKiBAcGFyYW0ge2Jvb2xlYW4/fSBhbGxvd1Vua25vd25cbiAqL1xuXG5mdW5jdGlvbiBhc3NlcnRPcHRpb25zKG9wdGlvbnMsIHNjaGVtYSwgYWxsb3dVbmtub3duKSB7XG4gIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gIH1cbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvcHRpb25zKTtcbiAgdmFyIGkgPSBrZXlzLmxlbmd0aDtcbiAgd2hpbGUgKGktLSA+IDApIHtcbiAgICB2YXIgb3B0ID0ga2V5c1tpXTtcbiAgICB2YXIgdmFsaWRhdG9yID0gc2NoZW1hW29wdF07XG4gICAgaWYgKHZhbGlkYXRvcikge1xuICAgICAgdmFyIHZhbHVlID0gb3B0aW9uc1tvcHRdO1xuICAgICAgdmFyIHJlc3VsdCA9IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsaWRhdG9yKHZhbHVlLCBvcHQsIG9wdGlvbnMpO1xuICAgICAgaWYgKHJlc3VsdCAhPT0gdHJ1ZSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb24gJyArIG9wdCArICcgbXVzdCBiZSAnICsgcmVzdWx0KTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoYWxsb3dVbmtub3duICE9PSB0cnVlKSB7XG4gICAgICB0aHJvdyBFcnJvcignVW5rbm93biBvcHRpb24gJyArIG9wdCk7XG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpc09sZGVyVmVyc2lvbjogaXNPbGRlclZlcnNpb24sXG4gIGFzc2VydE9wdGlvbnM6IGFzc2VydE9wdGlvbnMsXG4gIHZhbGlkYXRvcnM6IHZhbGlkYXRvcnNcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/axios/lib/helpers/validator.js\n");

/***/ }),

/***/ "./node_modules/axios/lib/utils.js":
/*!*****************************************!*\
  !*** ./node_modules/axios/lib/utils.js ***!
  \*****************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";
eval("\n\nvar bind = __webpack_require__(/*! ./helpers/bind */ \"./node_modules/axios/lib/helpers/bind.js\");\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n  return toString.call(val) === '[object Array]';\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n  return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n  return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n    && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nfunction isArrayBuffer(val) {\n  return toString.call(val) === '[object ArrayBuffer]';\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(val) {\n  return (typeof FormData !== 'undefined') && (val instanceof FormData);\n}\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n  var result;\n  if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n    result = ArrayBuffer.isView(val);\n  } else {\n    result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n  }\n  return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n  return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n  return typeof val === 'number';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n  return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {Object} val The value to test\n * @return {boolean} True if value is a plain Object, otherwise false\n */\nfunction isPlainObject(val) {\n  if (toString.call(val) !== '[object Object]') {\n    return false;\n  }\n\n  var prototype = Object.getPrototypeOf(val);\n  return prototype === null || prototype === Object.prototype;\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nfunction isDate(val) {\n  return toString.call(val) === '[object Date]';\n}\n\n/**\n * Determine if a value is a File\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nfunction isFile(val) {\n  return toString.call(val) === '[object File]';\n}\n\n/**\n * Determine if a value is a Blob\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nfunction isBlob(val) {\n  return toString.call(val) === '[object Blob]';\n}\n\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nfunction isFunction(val) {\n  return toString.call(val) === '[object Function]';\n}\n\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nfunction isStream(val) {\n  return isObject(val) && isFunction(val.pipe);\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nfunction isURLSearchParams(val) {\n  return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;\n}\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n  return str.trim ? str.trim() : str.replace(/^\\s+|\\s+$/g, '');\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n *  typeof window -> undefined\n *  typeof document -> undefined\n *\n * react-native:\n *  navigator.product -> 'ReactNative'\n * nativescript\n *  navigator.product -> 'NativeScript' or 'NS'\n */\nfunction isStandardBrowserEnv() {\n  if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' ||\n                                           navigator.product === 'NativeScript' ||\n                                           navigator.product === 'NS')) {\n    return false;\n  }\n  return (\n    typeof window !== 'undefined' &&\n    typeof document !== 'undefined'\n  );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n  // Don't bother if no value provided\n  if (obj === null || typeof obj === 'undefined') {\n    return;\n  }\n\n  // Force an array if not already something iterable\n  if (typeof obj !== 'object') {\n    /*eslint no-param-reassign:0*/\n    obj = [obj];\n  }\n\n  if (isArray(obj)) {\n    // Iterate over array values\n    for (var i = 0, l = obj.length; i < l; i++) {\n      fn.call(null, obj[i], i, obj);\n    }\n  } else {\n    // Iterate over object keys\n    for (var key in obj) {\n      if (Object.prototype.hasOwnProperty.call(obj, key)) {\n        fn.call(null, obj[key], key, obj);\n      }\n    }\n  }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n  var result = {};\n  function assignValue(val, key) {\n    if (isPlainObject(result[key]) && isPlainObject(val)) {\n      result[key] = merge(result[key], val);\n    } else if (isPlainObject(val)) {\n      result[key] = merge({}, val);\n    } else if (isArray(val)) {\n      result[key] = val.slice();\n    } else {\n      result[key] = val;\n    }\n  }\n\n  for (var i = 0, l = arguments.length; i < l; i++) {\n    forEach(arguments[i], assignValue);\n  }\n  return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n * @return {Object} The resulting value of object a\n */\nfunction extend(a, b, thisArg) {\n  forEach(b, function assignValue(val, key) {\n    if (thisArg && typeof val === 'function') {\n      a[key] = bind(val, thisArg);\n    } else {\n      a[key] = val;\n    }\n  });\n  return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n * @return {string} content value without BOM\n */\nfunction stripBOM(content) {\n  if (content.charCodeAt(0) === 0xFEFF) {\n    content = content.slice(1);\n  }\n  return content;\n}\n\nmodule.exports = {\n  isArray: isArray,\n  isArrayBuffer: isArrayBuffer,\n  isBuffer: isBuffer,\n  isFormData: isFormData,\n  isArrayBufferView: isArrayBufferView,\n  isString: isString,\n  isNumber: isNumber,\n  isObject: isObject,\n  isPlainObject: isPlainObject,\n  isUndefined: isUndefined,\n  isDate: isDate,\n  isFile: isFile,\n  isBlob: isBlob,\n  isFunction: isFunction,\n  isStream: isStream,\n  isURLSearchParams: isURLSearchParams,\n  isStandardBrowserEnv: isStandardBrowserEnv,\n  forEach: forEach,\n  merge: merge,\n  extend: extend,\n  trim: trim,\n  stripBOM: stripBOM\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QVE7QUFDbkIsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTiw0QkFBNEI7QUFDNUIsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQSx3Q0FBd0MsT0FBTztBQUMvQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixZQUFZLFFBQVE7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFlBQVksUUFBUTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3V0aWxzLmpzP2M5ZWIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJy4vaGVscGVycy9iaW5kJyk7XG5cbi8vIHV0aWxzIGlzIGEgbGlicmFyeSBvZiBnZW5lcmljIGhlbHBlciBmdW5jdGlvbnMgbm9uLXNwZWNpZmljIHRvIGF4aW9zXG5cbnZhciB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gQXJyYXlcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBBcnJheSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXkodmFsKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgdW5kZWZpbmVkXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHZhbHVlIGlzIHVuZGVmaW5lZCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzVW5kZWZpbmVkKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ3VuZGVmaW5lZCc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCdWZmZXJcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQnVmZmVyKHZhbCkge1xuICByZXR1cm4gdmFsICE9PSBudWxsICYmICFpc1VuZGVmaW5lZCh2YWwpICYmIHZhbC5jb25zdHJ1Y3RvciAhPT0gbnVsbCAmJiAhaXNVbmRlZmluZWQodmFsLmNvbnN0cnVjdG9yKVxuICAgICYmIHR5cGVvZiB2YWwuY29uc3RydWN0b3IuaXNCdWZmZXIgPT09ICdmdW5jdGlvbicgJiYgdmFsLmNvbnN0cnVjdG9yLmlzQnVmZmVyKHZhbCk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gQXJyYXlCdWZmZXJcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBBcnJheUJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlCdWZmZXIodmFsKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IEFycmF5QnVmZmVyXSc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGb3JtRGF0YVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEZvcm1EYXRhLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGb3JtRGF0YSh2YWwpIHtcbiAgcmV0dXJuICh0eXBlb2YgRm9ybURhdGEgIT09ICd1bmRlZmluZWQnKSAmJiAodmFsIGluc3RhbmNlb2YgRm9ybURhdGEpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgdmlldyBvbiBhbiBBcnJheUJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgdmlldyBvbiBhbiBBcnJheUJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlCdWZmZXJWaWV3KHZhbCkge1xuICB2YXIgcmVzdWx0O1xuICBpZiAoKHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcpICYmIChBcnJheUJ1ZmZlci5pc1ZpZXcpKSB7XG4gICAgcmVzdWx0ID0gQXJyYXlCdWZmZXIuaXNWaWV3KHZhbCk7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gKHZhbCkgJiYgKHZhbC5idWZmZXIpICYmICh2YWwuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBTdHJpbmdcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFN0cmluZywgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3RyaW5nKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ3N0cmluZyc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBOdW1iZXJcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIE51bWJlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzTnVtYmVyKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ251bWJlcic7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gT2JqZWN0XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gT2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsKSB7XG4gIHJldHVybiB2YWwgIT09IG51bGwgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBwbGFpbiBPYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgcGxhaW4gT2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWwpIHtcbiAgaWYgKHRvU3RyaW5nLmNhbGwodmFsKSAhPT0gJ1tvYmplY3QgT2JqZWN0XScpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgcHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbCk7XG4gIHJldHVybiBwcm90b3R5cGUgPT09IG51bGwgfHwgcHJvdG90eXBlID09PSBPYmplY3QucHJvdG90eXBlO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRGF0ZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRGF0ZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRGF0ZSh2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgRGF0ZV0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRmlsZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRmlsZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRmlsZSh2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgRmlsZV0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQmxvYlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQmxvYiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQmxvYih2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgQmxvYl0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZ1bmN0aW9uLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFN0cmVhbVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgU3RyZWFtLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTdHJlYW0odmFsKSB7XG4gIHJldHVybiBpc09iamVjdCh2YWwpICYmIGlzRnVuY3Rpb24odmFsLnBpcGUpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzVVJMU2VhcmNoUGFyYW1zKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIFVSTFNlYXJjaFBhcmFtcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdmFsIGluc3RhbmNlb2YgVVJMU2VhcmNoUGFyYW1zO1xufVxuXG4vKipcbiAqIFRyaW0gZXhjZXNzIHdoaXRlc3BhY2Ugb2ZmIHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiBhIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgVGhlIFN0cmluZyB0byB0cmltXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgU3RyaW5nIGZyZWVkIG9mIGV4Y2VzcyB3aGl0ZXNwYWNlXG4gKi9cbmZ1bmN0aW9uIHRyaW0oc3RyKSB7XG4gIHJldHVybiBzdHIudHJpbSA/IHN0ci50cmltKCkgOiBzdHIucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgJycpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiB3ZSdyZSBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciBlbnZpcm9ubWVudFxuICpcbiAqIFRoaXMgYWxsb3dzIGF4aW9zIHRvIHJ1biBpbiBhIHdlYiB3b3JrZXIsIGFuZCByZWFjdC1uYXRpdmUuXG4gKiBCb3RoIGVudmlyb25tZW50cyBzdXBwb3J0IFhNTEh0dHBSZXF1ZXN0LCBidXQgbm90IGZ1bGx5IHN0YW5kYXJkIGdsb2JhbHMuXG4gKlxuICogd2ViIHdvcmtlcnM6XG4gKiAgdHlwZW9mIHdpbmRvdyAtPiB1bmRlZmluZWRcbiAqICB0eXBlb2YgZG9jdW1lbnQgLT4gdW5kZWZpbmVkXG4gKlxuICogcmVhY3QtbmF0aXZlOlxuICogIG5hdmlnYXRvci5wcm9kdWN0IC0+ICdSZWFjdE5hdGl2ZSdcbiAqIG5hdGl2ZXNjcmlwdFxuICogIG5hdmlnYXRvci5wcm9kdWN0IC0+ICdOYXRpdmVTY3JpcHQnIG9yICdOUydcbiAqL1xuZnVuY3Rpb24gaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gIGlmICh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiAobmF2aWdhdG9yLnByb2R1Y3QgPT09ICdSZWFjdE5hdGl2ZScgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0b3IucHJvZHVjdCA9PT0gJ05hdGl2ZVNjcmlwdCcgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0b3IucHJvZHVjdCA9PT0gJ05TJykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIChcbiAgICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCdcbiAgKTtcbn1cblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgYW4gQXJyYXkgb3IgYW4gT2JqZWN0IGludm9raW5nIGEgZnVuY3Rpb24gZm9yIGVhY2ggaXRlbS5cbiAqXG4gKiBJZiBgb2JqYCBpcyBhbiBBcnJheSBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBwYXNzaW5nXG4gKiB0aGUgdmFsdWUsIGluZGV4LCBhbmQgY29tcGxldGUgYXJyYXkgZm9yIGVhY2ggaXRlbS5cbiAqXG4gKiBJZiAnb2JqJyBpcyBhbiBPYmplY3QgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgcGFzc2luZ1xuICogdGhlIHZhbHVlLCBrZXksIGFuZCBjb21wbGV0ZSBvYmplY3QgZm9yIGVhY2ggcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHtPYmplY3R8QXJyYXl9IG9iaiBUaGUgb2JqZWN0IHRvIGl0ZXJhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBjYWxsYmFjayB0byBpbnZva2UgZm9yIGVhY2ggaXRlbVxuICovXG5mdW5jdGlvbiBmb3JFYWNoKG9iaiwgZm4pIHtcbiAgLy8gRG9uJ3QgYm90aGVyIGlmIG5vIHZhbHVlIHByb3ZpZGVkXG4gIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBGb3JjZSBhbiBhcnJheSBpZiBub3QgYWxyZWFkeSBzb21ldGhpbmcgaXRlcmFibGVcbiAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XG4gICAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gICAgb2JqID0gW29ial07XG4gIH1cblxuICBpZiAoaXNBcnJheShvYmopKSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIGFycmF5IHZhbHVlc1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gb2JqLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgZm4uY2FsbChudWxsLCBvYmpbaV0sIGksIG9iaik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIEl0ZXJhdGUgb3ZlciBvYmplY3Qga2V5c1xuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSB7XG4gICAgICAgIGZuLmNhbGwobnVsbCwgb2JqW2tleV0sIGtleSwgb2JqKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBBY2NlcHRzIHZhcmFyZ3MgZXhwZWN0aW5nIGVhY2ggYXJndW1lbnQgdG8gYmUgYW4gb2JqZWN0LCB0aGVuXG4gKiBpbW11dGFibHkgbWVyZ2VzIHRoZSBwcm9wZXJ0aWVzIG9mIGVhY2ggb2JqZWN0IGFuZCByZXR1cm5zIHJlc3VsdC5cbiAqXG4gKiBXaGVuIG11bHRpcGxlIG9iamVjdHMgY29udGFpbiB0aGUgc2FtZSBrZXkgdGhlIGxhdGVyIG9iamVjdCBpblxuICogdGhlIGFyZ3VtZW50cyBsaXN0IHdpbGwgdGFrZSBwcmVjZWRlbmNlLlxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogYGBganNcbiAqIHZhciByZXN1bHQgPSBtZXJnZSh7Zm9vOiAxMjN9LCB7Zm9vOiA0NTZ9KTtcbiAqIGNvbnNvbGUubG9nKHJlc3VsdC5mb28pOyAvLyBvdXRwdXRzIDQ1NlxuICogYGBgXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iajEgT2JqZWN0IHRvIG1lcmdlXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXN1bHQgb2YgYWxsIG1lcmdlIHByb3BlcnRpZXNcbiAqL1xuZnVuY3Rpb24gbWVyZ2UoLyogb2JqMSwgb2JqMiwgb2JqMywgLi4uICovKSB7XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgZnVuY3Rpb24gYXNzaWduVmFsdWUodmFsLCBrZXkpIHtcbiAgICBpZiAoaXNQbGFpbk9iamVjdChyZXN1bHRba2V5XSkgJiYgaXNQbGFpbk9iamVjdCh2YWwpKSB7XG4gICAgICByZXN1bHRba2V5XSA9IG1lcmdlKHJlc3VsdFtrZXldLCB2YWwpO1xuICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdCh2YWwpKSB7XG4gICAgICByZXN1bHRba2V5XSA9IG1lcmdlKHt9LCB2YWwpO1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheSh2YWwpKSB7XG4gICAgICByZXN1bHRba2V5XSA9IHZhbC5zbGljZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHRba2V5XSA9IHZhbDtcbiAgICB9XG4gIH1cblxuICBmb3IgKHZhciBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBmb3JFYWNoKGFyZ3VtZW50c1tpXSwgYXNzaWduVmFsdWUpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRXh0ZW5kcyBvYmplY3QgYSBieSBtdXRhYmx5IGFkZGluZyB0byBpdCB0aGUgcHJvcGVydGllcyBvZiBvYmplY3QgYi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gYSBUaGUgb2JqZWN0IHRvIGJlIGV4dGVuZGVkXG4gKiBAcGFyYW0ge09iamVjdH0gYiBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tXG4gKiBAcGFyYW0ge09iamVjdH0gdGhpc0FyZyBUaGUgb2JqZWN0IHRvIGJpbmQgZnVuY3Rpb24gdG9cbiAqIEByZXR1cm4ge09iamVjdH0gVGhlIHJlc3VsdGluZyB2YWx1ZSBvZiBvYmplY3QgYVxuICovXG5mdW5jdGlvbiBleHRlbmQoYSwgYiwgdGhpc0FyZykge1xuICBmb3JFYWNoKGIsIGZ1bmN0aW9uIGFzc2lnblZhbHVlKHZhbCwga2V5KSB7XG4gICAgaWYgKHRoaXNBcmcgJiYgdHlwZW9mIHZhbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgYVtrZXldID0gYmluZCh2YWwsIHRoaXNBcmcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhW2tleV0gPSB2YWw7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGE7XG59XG5cbi8qKlxuICogUmVtb3ZlIGJ5dGUgb3JkZXIgbWFya2VyLiBUaGlzIGNhdGNoZXMgRUYgQkIgQkYgKHRoZSBVVEYtOCBCT00pXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbnRlbnQgd2l0aCBCT01cbiAqIEByZXR1cm4ge3N0cmluZ30gY29udGVudCB2YWx1ZSB3aXRob3V0IEJPTVxuICovXG5mdW5jdGlvbiBzdHJpcEJPTShjb250ZW50KSB7XG4gIGlmIChjb250ZW50LmNoYXJDb2RlQXQoMCkgPT09IDB4RkVGRikge1xuICAgIGNvbnRlbnQgPSBjb250ZW50LnNsaWNlKDEpO1xuICB9XG4gIHJldHVybiBjb250ZW50O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaXNBcnJheTogaXNBcnJheSxcbiAgaXNBcnJheUJ1ZmZlcjogaXNBcnJheUJ1ZmZlcixcbiAgaXNCdWZmZXI6IGlzQnVmZmVyLFxuICBpc0Zvcm1EYXRhOiBpc0Zvcm1EYXRhLFxuICBpc0FycmF5QnVmZmVyVmlldzogaXNBcnJheUJ1ZmZlclZpZXcsXG4gIGlzU3RyaW5nOiBpc1N0cmluZyxcbiAgaXNOdW1iZXI6IGlzTnVtYmVyLFxuICBpc09iamVjdDogaXNPYmplY3QsXG4gIGlzUGxhaW5PYmplY3Q6IGlzUGxhaW5PYmplY3QsXG4gIGlzVW5kZWZpbmVkOiBpc1VuZGVmaW5lZCxcbiAgaXNEYXRlOiBpc0RhdGUsXG4gIGlzRmlsZTogaXNGaWxlLFxuICBpc0Jsb2I6IGlzQmxvYixcbiAgaXNGdW5jdGlvbjogaXNGdW5jdGlvbixcbiAgaXNTdHJlYW06IGlzU3RyZWFtLFxuICBpc1VSTFNlYXJjaFBhcmFtczogaXNVUkxTZWFyY2hQYXJhbXMsXG4gIGlzU3RhbmRhcmRCcm93c2VyRW52OiBpc1N0YW5kYXJkQnJvd3NlckVudixcbiAgZm9yRWFjaDogZm9yRWFjaCxcbiAgbWVyZ2U6IG1lcmdlLFxuICBleHRlbmQ6IGV4dGVuZCxcbiAgdHJpbTogdHJpbSxcbiAgc3RyaXBCT006IHN0cmlwQk9NXG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/axios/lib/utils.js\n");

/***/ }),

/***/ "./node_modules/babel-helper-vue-jsx-merge-props/index.js":
/*!****************************************************************!*\
  !*** ./node_modules/babel-helper-vue-jsx-merge-props/index.js ***!
  \****************************************************************/
/***/ ((module) => {

eval("var nestRE = /^(attrs|props|on|nativeOn|class|style|hook)$/\n\nmodule.exports = function mergeJSXProps (objs) {\n  return objs.reduce(function (a, b) {\n    var aa, bb, key, nestedKey, temp\n    for (key in b) {\n      aa = a[key]\n      bb = b[key]\n      if (aa && nestRE.test(key)) {\n        // normalize class\n        if (key === 'class') {\n          if (typeof aa === 'string') {\n            temp = aa\n            a[key] = aa = {}\n            aa[temp] = true\n          }\n          if (typeof bb === 'string') {\n            temp = bb\n            b[key] = bb = {}\n            bb[temp] = true\n          }\n        }\n        if (key === 'on' || key === 'nativeOn' || key === 'hook') {\n          // merge functions\n          for (nestedKey in bb) {\n            aa[nestedKey] = mergeFn(aa[nestedKey], bb[nestedKey])\n          }\n        } else if (Array.isArray(aa)) {\n          a[key] = aa.concat(bb)\n        } else if (Array.isArray(bb)) {\n          a[key] = [aa].concat(bb)\n        } else {\n          for (nestedKey in bb) {\n            aa[nestedKey] = bb[nestedKey]\n          }\n        }\n      } else {\n        a[key] = b[key]\n      }\n    }\n    return a\n  }, {})\n}\n\nfunction mergeFn (a, b) {\n  return function () {\n    a && a.apply(this, arguments)\n    b && b.apply(this, arguments)\n  }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtaGVscGVyLXZ1ZS1qc3gtbWVyZ2UtcHJvcHMvaW5kZXguanMiLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQSxVQUFVO0FBQ1Y7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHLElBQUk7QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtaGVscGVyLXZ1ZS1qc3gtbWVyZ2UtcHJvcHMvaW5kZXguanM/Y2JmNSJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgbmVzdFJFID0gL14oYXR0cnN8cHJvcHN8b258bmF0aXZlT258Y2xhc3N8c3R5bGV8aG9vaykkL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIG1lcmdlSlNYUHJvcHMgKG9ianMpIHtcbiAgcmV0dXJuIG9ianMucmVkdWNlKGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgdmFyIGFhLCBiYiwga2V5LCBuZXN0ZWRLZXksIHRlbXBcbiAgICBmb3IgKGtleSBpbiBiKSB7XG4gICAgICBhYSA9IGFba2V5XVxuICAgICAgYmIgPSBiW2tleV1cbiAgICAgIGlmIChhYSAmJiBuZXN0UkUudGVzdChrZXkpKSB7XG4gICAgICAgIC8vIG5vcm1hbGl6ZSBjbGFzc1xuICAgICAgICBpZiAoa2V5ID09PSAnY2xhc3MnKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBhYSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRlbXAgPSBhYVxuICAgICAgICAgICAgYVtrZXldID0gYWEgPSB7fVxuICAgICAgICAgICAgYWFbdGVtcF0gPSB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0eXBlb2YgYmIgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0ZW1wID0gYmJcbiAgICAgICAgICAgIGJba2V5XSA9IGJiID0ge31cbiAgICAgICAgICAgIGJiW3RlbXBdID0gdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoa2V5ID09PSAnb24nIHx8IGtleSA9PT0gJ25hdGl2ZU9uJyB8fCBrZXkgPT09ICdob29rJykge1xuICAgICAgICAgIC8vIG1lcmdlIGZ1bmN0aW9uc1xuICAgICAgICAgIGZvciAobmVzdGVkS2V5IGluIGJiKSB7XG4gICAgICAgICAgICBhYVtuZXN0ZWRLZXldID0gbWVyZ2VGbihhYVtuZXN0ZWRLZXldLCBiYltuZXN0ZWRLZXldKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGFhKSkge1xuICAgICAgICAgIGFba2V5XSA9IGFhLmNvbmNhdChiYilcbiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGJiKSkge1xuICAgICAgICAgIGFba2V5XSA9IFthYV0uY29uY2F0KGJiKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZvciAobmVzdGVkS2V5IGluIGJiKSB7XG4gICAgICAgICAgICBhYVtuZXN0ZWRLZXldID0gYmJbbmVzdGVkS2V5XVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYVtrZXldID0gYltrZXldXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhXG4gIH0sIHt9KVxufVxuXG5mdW5jdGlvbiBtZXJnZUZuIChhLCBiKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgYSAmJiBhLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICBiICYmIGIuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICB9XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/babel-helper-vue-jsx-merge-props/index.js\n");

/***/ }),

/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/DashboardComponent.vue?vue&type=script&lang=js&":
/*!*************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/DashboardComponent.vue?vue&type=script&lang=js& ***!
  \*************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _components_admin_widgets_BoxColorWidget_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../components/admin/widgets/BoxColorWidget.vue */ \"./resources/js/components/admin/widgets/BoxColorWidget.vue\");\n/* harmony import */ var _components_admin_widgets_ChartWidget_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../components/admin/widgets/ChartWidget.vue */ \"./resources/js/components/admin/widgets/ChartWidget.vue\");\n/* harmony import */ var _components_admin_widgets_HeaderWidget_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../components/admin/widgets/HeaderWidget.vue */ \"./resources/js/components/admin/widgets/HeaderWidget.vue\");\n/* harmony import */ var _components_admin_widgets_IframeGroupWidget_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../components/admin/widgets/IframeGroupWidget.vue */ \"./resources/js/components/admin/widgets/IframeGroupWidget.vue\");\n\n\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n  components: {\n    HeaderWidget: _components_admin_widgets_HeaderWidget_vue__WEBPACK_IMPORTED_MODULE_2__[\"default\"],\n    BoxColorWidget: _components_admin_widgets_BoxColorWidget_vue__WEBPACK_IMPORTED_MODULE_0__[\"default\"],\n    ChartWidget: _components_admin_widgets_ChartWidget_vue__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n    IframeGroupWidget: _components_admin_widgets_IframeGroupWidget_vue__WEBPACK_IMPORTED_MODULE_3__[\"default\"]\n  },\n  data: function data() {\n    return {\n      breadcrumbs: [],\n      chartLabels: [],\n      chartDatasets: [],\n      _modules: [],\n      search: \"\",\n      organizationType: 0,\n      organizationList: null,\n      count_characterization: 0\n    };\n  },\n  created: function created() {\n    this.breadcrumbs = [{\n      url: \"/\",\n      text: \"Bitácora\"\n    }];\n  },\n  mounted: function mounted() {\n    this.loadStats();\n  },\n  methods: {\n    loadStats: function loadStats() {\n      var chart2_Canvas = document.getElementById(\"graph2\").getContext(\"2d\");\n      var chart2_Data = {\n        labels: ['a', 'b', 'c'],\n        datasets: [{\n          label: \"Información de Prueba\",\n          backgroundColor: \"rgba(60,141,188,0.9)\",\n          borderColor: \"rgba(60,141,188,0.8)\",\n          pointRadius: false,\n          pointColor: \"#3b8bba\",\n          pointStrokeColor: \"rgba(60,141,188,1)\",\n          pointHighlightFill: \"#fff\",\n          pointHighlightStroke: \"rgba(60,141,188,1)\",\n          data: [1, 2, 1.5]\n        }],\n        backgroundColor: [\"rgba(255, 99, 132, 0.2)\", \"rgba(54, 162, 235, 0.2)\", \"rgba(255, 206, 86, 0.2)\"],\n        borderColor: [\"rgba(255, 99, 132, 1)\", \"rgba(54, 162, 235, 1)\", \"rgba(255, 206, 86, 1)\"],\n        borderWidth: 1\n      };\n      var chart2_Options = {\n        maintainAspectRatio: false,\n        responsive: true,\n        legend: {\n          display: true\n        },\n        scales: {\n          xAxes: [{\n            gridLines: {\n              display: false\n            }\n          }],\n          yAxes: [{\n            gridLines: {\n              display: false\n            }\n          }]\n        }\n      };\n      new Chart(chart2_Canvas, {\n        type: \"bar\",\n        data: chart2_Data,\n        options: chart2_Options\n      });\n      var chart1_Canvas = document.getElementById(\"graph1\").getContext(\"2d\");\n      var chart1_Data = {\n        labels: ['x', 'y', 'z'],\n        datasets: [{\n          label: \"Información de Prueba 2\",\n          backgroundColor: \"rgba(60,141,188,0.9)\",\n          borderColor: \"rgba(60,141,188,0.8)\",\n          pointRadius: false,\n          pointColor: \"#3b8bba\",\n          pointStrokeColor: \"rgba(60,141,188,1)\",\n          pointHighlightFill: \"#fff\",\n          pointHighlightStroke: \"rgba(60,141,188,1)\",\n          data: [4, 2, 3]\n        }],\n        backgroundColor: [\"rgba(255, 99, 132, 0.2)\", \"rgba(54, 162, 235, 0.2)\", \"rgba(255, 206, 86, 0.2)\"],\n        borderColor: [\"rgba(255, 99, 132, 1)\", \"rgba(54, 162, 235, 1)\", \"rgba(255, 206, 86, 1)\"],\n        borderWidth: 1\n      };\n      var chart1_Options = {\n        maintainAspectRatio: false,\n        responsive: true,\n        legend: {\n          display: true\n        },\n        scales: {\n          xAxes: [{\n            gridLines: {\n              display: false\n            }\n          }],\n          yAxes: [{\n            gridLines: {\n              display: false\n            }\n          }]\n        }\n      };\n      new Chart(chart1_Canvas, {\n        type: \"bar\",\n        data: chart1_Data,\n        options: chart1_Options\n      });\n    }\n  }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvRGFzaGJvYXJkQ29tcG9uZW50LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUEwR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpRUFBZTtFQUNmSSxVQUFBO0lBQ0FGLFlBQUEsRUFBQUEsa0ZBQUE7SUFDQUYsY0FBQSxFQUFBQSxvRkFBQTtJQUNBQyxXQUFBLEVBQUFBLGlGQUFBO0lBQ0FFLGlCQUFBLEVBQUFBLHVGQUFBQTtFQUNBO0VBQ0FFLElBQUEsV0FBQUEsS0FBQTtJQUNBO01BQ0FDLFdBQUE7TUFDQUMsV0FBQTtNQUNBQyxhQUFBO01BQ0FDLFFBQUE7TUFDQUMsTUFBQTtNQUNBQyxnQkFBQTtNQUNBQyxnQkFBQTtNQUNBQyxzQkFBQTtJQUNBO0VBQ0E7RUFDQUMsT0FBQSxXQUFBQSxRQUFBO0lBQ0EsS0FBQVIsV0FBQTtNQUFBUyxHQUFBO01BQUFDLElBQUE7SUFBQTtFQUNBO0VBQ0FDLE9BQUEsV0FBQUEsUUFBQTtJQUNBLEtBQUFDLFNBQUE7RUFDQTtFQUNBQyxPQUFBO0lBQ0FELFNBQUEsV0FBQUEsVUFBQTtNQUNBLElBQUFFLGFBQUEsR0FBQUMsUUFBQSxDQUFBQyxjQUFBLFdBQUFDLFVBQUE7TUFDQSxJQUFBQyxXQUFBO1FBQ0FDLE1BQUE7UUFDQUMsUUFBQSxHQUNBO1VBQ0FDLEtBQUE7VUFDQUMsZUFBQTtVQUNBQyxXQUFBO1VBQ0FDLFdBQUE7VUFDQUMsVUFBQTtVQUNBQyxnQkFBQTtVQUNBQyxrQkFBQTtVQUNBQyxvQkFBQTtVQUNBN0IsSUFBQTtRQUNBLEVBQ0E7UUFDQXVCLGVBQUEsR0FDQSwyQkFDQSwyQkFDQSwwQkFDQTtRQUNBQyxXQUFBLEdBQ0EseUJBQ0EseUJBQ0Esd0JBQ0E7UUFDQU0sV0FBQTtNQUNBO01BQ0EsSUFBQUMsY0FBQTtRQUNBQyxtQkFBQTtRQUNBQyxVQUFBO1FBQ0FDLE1BQUE7VUFDQUMsT0FBQTtRQUNBO1FBQ0FDLE1BQUE7VUFDQUMsS0FBQSxHQUNBO1lBQ0FDLFNBQUE7Y0FDQUgsT0FBQTtZQUNBO1VBQ0EsRUFDQTtVQUNBSSxLQUFBLEdBQ0E7WUFDQUQsU0FBQTtjQUNBSCxPQUFBO1lBQ0E7VUFDQTtRQUVBO01BQ0E7TUFFQSxJQUFBSyxLQUFBLENBQUF6QixhQUFBO1FBQ0EwQixJQUFBO1FBQ0F6QyxJQUFBLEVBQUFtQixXQUFBO1FBQ0F1QixPQUFBLEVBQUFYO01BQ0E7TUFFQSxJQUFBWSxhQUFBLEdBQUEzQixRQUFBLENBQ0FDLGNBQUEsV0FDQUMsVUFBQTtNQUNBLElBQUEwQixXQUFBO1FBQ0F4QixNQUFBO1FBQ0FDLFFBQUEsR0FDQTtVQUNBQyxLQUFBO1VBQ0FDLGVBQUE7VUFDQUMsV0FBQTtVQUNBQyxXQUFBO1VBQ0FDLFVBQUE7VUFDQUMsZ0JBQUE7VUFDQUMsa0JBQUE7VUFDQUMsb0JBQUE7VUFDQTdCLElBQUE7UUFDQSxFQUNBO1FBQ0F1QixlQUFBLEdBQ0EsMkJBQ0EsMkJBQ0EsMEJBQ0E7UUFDQUMsV0FBQSxHQUNBLHlCQUNBLHlCQUNBLHdCQUNBO1FBQ0FNLFdBQUE7TUFDQTtNQUNBLElBQUFlLGNBQUE7UUFDQWIsbUJBQUE7UUFDQUMsVUFBQTtRQUNBQyxNQUFBO1VBQ0FDLE9BQUE7UUFDQTtRQUNBQyxNQUFBO1VBQ0FDLEtBQUEsR0FDQTtZQUNBQyxTQUFBO2NBQ0FILE9BQUE7WUFDQTtVQUNBLEVBQ0E7VUFDQUksS0FBQSxHQUNBO1lBQ0FELFNBQUE7Y0FDQUgsT0FBQTtZQUNBO1VBQ0E7UUFFQTtNQUNBO01BRUEsSUFBQUssS0FBQSxDQUFBRyxhQUFBO1FBQ0FGLElBQUE7UUFDQXpDLElBQUEsRUFBQTRDLFdBQUE7UUFDQUYsT0FBQSxFQUFBRztNQUNBO0lBQ0E7RUFDQTtBQUNBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvRGFzaGJvYXJkQ29tcG9uZW50LnZ1ZT8wMjQwIl0sInNvdXJjZXNDb250ZW50IjpbIjx0ZW1wbGF0ZT5cbiAgPGRpdj5cbiAgICA8YnIgLz5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTEyXCI+XG4gICAgICA8c2VjdGlvbiBjbGFzcz1cImNvbnRlbnRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWdyb3VwXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgdGV4dC1yaWdodFwiPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS11c2VycyBjLWljb25cIj48L2k+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtdmFsdWUtbGdcIj4wPC9kaXY+XG4gICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1tdXRlZCB0ZXh0LXVwcGVyY2FzZSBmb250LXdlaWdodC1ib2xkXCJcbiAgICAgICAgICAgICAgICAgID5EYXRvIDE8L3NtYWxsXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzcyBwcm9ncmVzcy14cyBtdC0zIG1iLTBcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwcm9ncmVzcy1iYXIgYmctaW5mb1wiXG4gICAgICAgICAgICAgICAgICAgIHJvbGU9XCJwcm9ncmVzc2JhclwiXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDEwMCVcIlxuICAgICAgICAgICAgICAgICAgICBhcmlhLXZhbHVlbm93PVwiMTAwXCJcbiAgICAgICAgICAgICAgICAgICAgYXJpYS12YWx1ZW1pbj1cIjBcIlxuICAgICAgICAgICAgICAgICAgICBhcmlhLXZhbHVlbWF4PVwiMTAwXCJcbiAgICAgICAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCB0ZXh0LXJpZ2h0XCI+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWN1YmVzIGMtaWNvblwiPjwvaT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC12YWx1ZS1sZ1wiPjA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LW11dGVkIHRleHQtdXBwZXJjYXNlIGZvbnQtd2VpZ2h0LWJvbGRcIlxuICAgICAgICAgICAgICAgICAgPkRhdG8gMjwvc21hbGxcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyZXNzIHByb2dyZXNzLXhzIG10LTMgbWItMFwiPlxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInByb2dyZXNzLWJhciBiZy1zdWNjZXNzXCJcbiAgICAgICAgICAgICAgICAgICAgcm9sZT1cInByb2dyZXNzYmFyXCJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogMTAwJVwiXG4gICAgICAgICAgICAgICAgICAgIGFyaWEtdmFsdWVub3c9XCIxMDBcIlxuICAgICAgICAgICAgICAgICAgICBhcmlhLXZhbHVlbWluPVwiMFwiXG4gICAgICAgICAgICAgICAgICAgIGFyaWEtdmFsdWVtYXg9XCIxMDBcIlxuICAgICAgICAgICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxiciAvPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiY29sLW1kLTYgY29ubmVjdGVkU29ydGFibGUgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgY2FyZC1zdWNjZXNzXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJjYXJkLXRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWNoYXJ0LXBpZSBtci0xXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICBEaWFncmFtYSAxXG4gICAgICAgICAgICAgICAgICA8L2gzPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjaGFydFwiXG4gICAgICAgICAgICAgICAgICAgIGlkPVwicmV2ZW51ZS1jaGFydDFcIlxuICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZTsgaGVpZ2h0OiAyNTBweFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxjYW52YXNcbiAgICAgICAgICAgICAgICAgICAgICBpZD1cImdyYXBoMlwiXG4gICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMjUwXCJcbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImhlaWdodDogMjUwcHhcIlxuICAgICAgICAgICAgICAgICAgICA+PC9jYW52YXM+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImNvbC1tZC02IGNvbm5lY3RlZFNvcnRhYmxlIHRleHQtY2VudGVyXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIGNhcmQtZGFuZ2VyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJjYXJkLXRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWNoYXJ0LXBpZSBtci0xXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICBEaWFncmFtYSAyXG4gICAgICAgICAgICAgICAgICA8L2gzPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjaGFydFwiXG4gICAgICAgICAgICAgICAgICAgIGlkPVwicmV2ZW51ZS1jaGFydDJcIlxuICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZTsgaGVpZ2h0OiAyNTBweFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxjYW52YXNcbiAgICAgICAgICAgICAgICAgICAgICBpZD1cImdyYXBoMVwiXG4gICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMjUwXCJcbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImhlaWdodDogMjUwcHhcIlxuICAgICAgICAgICAgICAgICAgICA+PC9jYW52YXM+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9zZWN0aW9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgQm94Q29sb3JXaWRnZXQgZnJvbSBcIi4uL2NvbXBvbmVudHMvYWRtaW4vd2lkZ2V0cy9Cb3hDb2xvcldpZGdldC52dWVcIjtcbmltcG9ydCBDaGFydFdpZGdldCBmcm9tIFwiLi4vY29tcG9uZW50cy9hZG1pbi93aWRnZXRzL0NoYXJ0V2lkZ2V0LnZ1ZVwiO1xuaW1wb3J0IEhlYWRlcldpZGdldCBmcm9tIFwiLi4vY29tcG9uZW50cy9hZG1pbi93aWRnZXRzL0hlYWRlcldpZGdldC52dWVcIjtcbmltcG9ydCBJZnJhbWVHcm91cFdpZGdldCBmcm9tIFwiLi4vY29tcG9uZW50cy9hZG1pbi93aWRnZXRzL0lmcmFtZUdyb3VwV2lkZ2V0LnZ1ZVwiO1xuZXhwb3J0IGRlZmF1bHQge1xuICBjb21wb25lbnRzOiB7XG4gICAgSGVhZGVyV2lkZ2V0LFxuICAgIEJveENvbG9yV2lkZ2V0LFxuICAgIENoYXJ0V2lkZ2V0LFxuICAgIElmcmFtZUdyb3VwV2lkZ2V0LFxuICB9LFxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBicmVhZGNydW1iczogW10sXG4gICAgICBjaGFydExhYmVsczogW10sXG4gICAgICBjaGFydERhdGFzZXRzOiBbXSxcbiAgICAgIF9tb2R1bGVzOiBbXSxcbiAgICAgIHNlYXJjaDogXCJcIixcbiAgICAgIG9yZ2FuaXphdGlvblR5cGU6IDAsXG4gICAgICBvcmdhbml6YXRpb25MaXN0OiBudWxsLFxuICAgICAgY291bnRfY2hhcmFjdGVyaXphdGlvbjogMCxcbiAgICB9O1xuICB9LFxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuYnJlYWRjcnVtYnMgPSBbeyB1cmw6IFwiL1wiLCB0ZXh0OiBcIkJpdMOhY29yYVwiIH1dO1xuICB9LFxuICBtb3VudGVkKCkge1xuICAgIHRoaXMubG9hZFN0YXRzKCk7XG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICBsb2FkU3RhdHMoKSB7XG4gICAgICB2YXIgY2hhcnQyX0NhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZ3JhcGgyXCIpLmdldENvbnRleHQoXCIyZFwiKTtcbiAgICAgIHZhciBjaGFydDJfRGF0YSA9IHtcbiAgICAgICAgbGFiZWxzOiBbJ2EnLCAnYicsICdjJ10sXG4gICAgICAgIGRhdGFzZXRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbGFiZWw6IFwiSW5mb3JtYWNpw7NuIGRlIFBydWViYVwiLFxuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBcInJnYmEoNjAsMTQxLDE4OCwwLjkpXCIsXG4gICAgICAgICAgICBib3JkZXJDb2xvcjogXCJyZ2JhKDYwLDE0MSwxODgsMC44KVwiLFxuICAgICAgICAgICAgcG9pbnRSYWRpdXM6IGZhbHNlLFxuICAgICAgICAgICAgcG9pbnRDb2xvcjogXCIjM2I4YmJhXCIsXG4gICAgICAgICAgICBwb2ludFN0cm9rZUNvbG9yOiBcInJnYmEoNjAsMTQxLDE4OCwxKVwiLFxuICAgICAgICAgICAgcG9pbnRIaWdobGlnaHRGaWxsOiBcIiNmZmZcIixcbiAgICAgICAgICAgIHBvaW50SGlnaGxpZ2h0U3Ryb2tlOiBcInJnYmEoNjAsMTQxLDE4OCwxKVwiLFxuICAgICAgICAgICAgZGF0YTogWzEsMiwxLjVdLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogW1xuICAgICAgICAgIFwicmdiYSgyNTUsIDk5LCAxMzIsIDAuMilcIixcbiAgICAgICAgICBcInJnYmEoNTQsIDE2MiwgMjM1LCAwLjIpXCIsXG4gICAgICAgICAgXCJyZ2JhKDI1NSwgMjA2LCA4NiwgMC4yKVwiLFxuICAgICAgICBdLFxuICAgICAgICBib3JkZXJDb2xvcjogW1xuICAgICAgICAgIFwicmdiYSgyNTUsIDk5LCAxMzIsIDEpXCIsXG4gICAgICAgICAgXCJyZ2JhKDU0LCAxNjIsIDIzNSwgMSlcIixcbiAgICAgICAgICBcInJnYmEoMjU1LCAyMDYsIDg2LCAxKVwiLFxuICAgICAgICBdLFxuICAgICAgICBib3JkZXJXaWR0aDogMSxcbiAgICAgIH07XG4gICAgICB2YXIgY2hhcnQyX09wdGlvbnMgPSB7XG4gICAgICAgIG1haW50YWluQXNwZWN0UmF0aW86IGZhbHNlLFxuICAgICAgICByZXNwb25zaXZlOiB0cnVlLFxuICAgICAgICBsZWdlbmQ6IHtcbiAgICAgICAgICBkaXNwbGF5OiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBzY2FsZXM6IHtcbiAgICAgICAgICB4QXhlczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBncmlkTGluZXM6IHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBmYWxzZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICB5QXhlczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBncmlkTGluZXM6IHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBmYWxzZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIG5ldyBDaGFydChjaGFydDJfQ2FudmFzLCB7XG4gICAgICAgIHR5cGU6IFwiYmFyXCIsXG4gICAgICAgIGRhdGE6IGNoYXJ0Ml9EYXRhLFxuICAgICAgICBvcHRpb25zOiBjaGFydDJfT3B0aW9ucyxcbiAgICAgIH0pO1xuXG4gICAgICAgICAgdmFyIGNoYXJ0MV9DYW52YXMgPSBkb2N1bWVudFxuICAgICAgICAgICAgLmdldEVsZW1lbnRCeUlkKFwiZ3JhcGgxXCIpXG4gICAgICAgICAgICAuZ2V0Q29udGV4dChcIjJkXCIpO1xuICAgICAgICAgIHZhciBjaGFydDFfRGF0YSA9IHtcbiAgICAgICAgICAgIGxhYmVsczogWyd4JywgJ3knLCAneiddLFxuICAgICAgICAgICAgZGF0YXNldHM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxhYmVsOiBcIkluZm9ybWFjacOzbiBkZSBQcnVlYmEgMlwiLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogXCJyZ2JhKDYwLDE0MSwxODgsMC45KVwiLFxuICAgICAgICAgICAgICAgIGJvcmRlckNvbG9yOiBcInJnYmEoNjAsMTQxLDE4OCwwLjgpXCIsXG4gICAgICAgICAgICAgICAgcG9pbnRSYWRpdXM6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHBvaW50Q29sb3I6IFwiIzNiOGJiYVwiLFxuICAgICAgICAgICAgICAgIHBvaW50U3Ryb2tlQ29sb3I6IFwicmdiYSg2MCwxNDEsMTg4LDEpXCIsXG4gICAgICAgICAgICAgICAgcG9pbnRIaWdobGlnaHRGaWxsOiBcIiNmZmZcIixcbiAgICAgICAgICAgICAgICBwb2ludEhpZ2hsaWdodFN0cm9rZTogXCJyZ2JhKDYwLDE0MSwxODgsMSlcIixcbiAgICAgICAgICAgICAgICBkYXRhOiBbNCwyLDNdLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogW1xuICAgICAgICAgICAgICBcInJnYmEoMjU1LCA5OSwgMTMyLCAwLjIpXCIsXG4gICAgICAgICAgICAgIFwicmdiYSg1NCwgMTYyLCAyMzUsIDAuMilcIixcbiAgICAgICAgICAgICAgXCJyZ2JhKDI1NSwgMjA2LCA4NiwgMC4yKVwiLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGJvcmRlckNvbG9yOiBbXG4gICAgICAgICAgICAgIFwicmdiYSgyNTUsIDk5LCAxMzIsIDEpXCIsXG4gICAgICAgICAgICAgIFwicmdiYSg1NCwgMTYyLCAyMzUsIDEpXCIsXG4gICAgICAgICAgICAgIFwicmdiYSgyNTUsIDIwNiwgODYsIDEpXCIsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgYm9yZGVyV2lkdGg6IDEsXG4gICAgICAgICAgfTtcbiAgICAgICAgICB2YXIgY2hhcnQxX09wdGlvbnMgPSB7XG4gICAgICAgICAgICBtYWludGFpbkFzcGVjdFJhdGlvOiBmYWxzZSxcbiAgICAgICAgICAgIHJlc3BvbnNpdmU6IHRydWUsXG4gICAgICAgICAgICBsZWdlbmQ6IHtcbiAgICAgICAgICAgICAgZGlzcGxheTogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzY2FsZXM6IHtcbiAgICAgICAgICAgICAgeEF4ZXM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBncmlkTGluZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIHlBeGVzOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZ3JpZExpbmVzOiB7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgbmV3IENoYXJ0KGNoYXJ0MV9DYW52YXMsIHtcbiAgICAgICAgICAgIHR5cGU6IFwiYmFyXCIsXG4gICAgICAgICAgICBkYXRhOiBjaGFydDFfRGF0YSxcbiAgICAgICAgICAgIG9wdGlvbnM6IGNoYXJ0MV9PcHRpb25zLFxuICAgICAgICAgIH0pO1xuICAgIH0sXG4gIH0sXG59O1xuPC9zY3JpcHQ+XG4iXSwibmFtZXMiOlsiQm94Q29sb3JXaWRnZXQiLCJDaGFydFdpZGdldCIsIkhlYWRlcldpZGdldCIsIklmcmFtZUdyb3VwV2lkZ2V0IiwiY29tcG9uZW50cyIsImRhdGEiLCJicmVhZGNydW1icyIsImNoYXJ0TGFiZWxzIiwiY2hhcnREYXRhc2V0cyIsIl9tb2R1bGVzIiwic2VhcmNoIiwib3JnYW5pemF0aW9uVHlwZSIsIm9yZ2FuaXphdGlvbkxpc3QiLCJjb3VudF9jaGFyYWN0ZXJpemF0aW9uIiwiY3JlYXRlZCIsInVybCIsInRleHQiLCJtb3VudGVkIiwibG9hZFN0YXRzIiwibWV0aG9kcyIsImNoYXJ0Ml9DYW52YXMiLCJkb2N1bWVudCIsImdldEVsZW1lbnRCeUlkIiwiZ2V0Q29udGV4dCIsImNoYXJ0Ml9EYXRhIiwibGFiZWxzIiwiZGF0YXNldHMiLCJsYWJlbCIsImJhY2tncm91bmRDb2xvciIsImJvcmRlckNvbG9yIiwicG9pbnRSYWRpdXMiLCJwb2ludENvbG9yIiwicG9pbnRTdHJva2VDb2xvciIsInBvaW50SGlnaGxpZ2h0RmlsbCIsInBvaW50SGlnaGxpZ2h0U3Ryb2tlIiwiYm9yZGVyV2lkdGgiLCJjaGFydDJfT3B0aW9ucyIsIm1haW50YWluQXNwZWN0UmF0aW8iLCJyZXNwb25zaXZlIiwibGVnZW5kIiwiZGlzcGxheSIsInNjYWxlcyIsInhBeGVzIiwiZ3JpZExpbmVzIiwieUF4ZXMiLCJDaGFydCIsInR5cGUiLCJvcHRpb25zIiwiY2hhcnQxX0NhbnZhcyIsImNoYXJ0MV9EYXRhIiwiY2hhcnQxX09wdGlvbnMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/DashboardComponent.vue?vue&type=script&lang=js&\n");

/***/ }),

/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/alliance/create.vue?vue&type=script&lang=js&":
/*!****************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/alliance/create.vue?vue&type=script&lang=js& ***!
  \****************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var survey_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! survey-vue */ \"./node_modules/survey-vue/survey-vue.js\");\n/* harmony import */ var survey_vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(survey_vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _form__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./form */ \"./resources/js/components/admin/alliance/form.js\");\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = \"function\" == typeof Symbol ? Symbol : {}, a = i.iterator || \"@@iterator\", c = i.asyncIterator || \"@@asyncIterator\", u = i.toStringTag || \"@@toStringTag\"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, \"\"); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, \"_invoke\", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: \"normal\", arg: t.call(e, r) }; } catch (t) { return { type: \"throw\", arg: t }; } } e.wrap = wrap; var h = \"suspendedStart\", l = \"suspendedYield\", f = \"executing\", s = \"completed\", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { [\"next\", \"throw\", \"return\"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if (\"throw\" !== c.type) { var u = c.arg, h = u.value; return h && \"object\" == _typeof(h) && n.call(h, \"__await\") ? e.resolve(h.__await).then(function (t) { invoke(\"next\", t, i, a); }, function (t) { invoke(\"throw\", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke(\"throw\", t, i, a); }); } a(c.arg); } var r; o(this, \"_invoke\", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error(\"Generator is already running\"); if (o === s) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = f; var p = tryCatch(e, r, n); if (\"normal\" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } \"throw\" === p.type && (o = s, n.method = \"throw\", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, \"throw\" === n && e.iterator[\"return\"] && (r.method = \"return\", r.arg = t, maybeInvokeDelegate(e, r), \"throw\" === r.method) || \"return\" !== n && (r.method = \"throw\", r.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), y; var i = tryCatch(o, e.iterator, r.arg); if (\"throw\" === i.type) return r.method = \"throw\", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, \"return\" !== r.method && (r.method = \"next\", r.arg = t), r.delegate = null, y) : a : (r.method = \"throw\", r.arg = new TypeError(\"iterator result is not an object\"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = \"normal\", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: \"root\" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || \"\" === e) { var r = e[a]; if (r) return r.call(e); if (\"function\" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, \"constructor\", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, \"constructor\", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), e.isGeneratorFunction = function (t) { var e = \"function\" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || \"GeneratorFunction\" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, \"GeneratorFunction\")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, \"Generator\"), define(g, a, function () { return this; }), define(g, \"toString\", function () { return \"[object Generator]\"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) \"t\" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = \"throw\", a.arg = e, r.next = n, o && (r.method = \"next\", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if (\"root\" === i.tryLoc) return handle(\"end\"); if (i.tryLoc <= this.prev) { var c = n.call(i, \"catchLoc\"), u = n.call(i, \"finallyLoc\"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error(\"try statement without catch or finally\"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, \"finallyLoc\") && this.prev < o.finallyLoc) { var i = o; break; } } i && (\"break\" === t || \"continue\" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = \"next\", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, \"catch\": function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if (\"throw\" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, \"next\" === this.method && (this.arg = t), y; } }, e; }\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nvar Swal = __webpack_require__(/*! sweetalert2 */ \"./node_modules/sweetalert2/dist/sweetalert2.all.js\");\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n  data: function data() {\n    return {\n      survey: null\n    };\n  },\n  mounted: function mounted() {\n    var _this = this;\n    return _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {\n      var _ref;\n      return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n        while (1) switch (_context2.prev = _context2.next) {\n          case 0:\n            _this.survey = new survey_vue__WEBPACK_IMPORTED_MODULE_0__.Model(_form__WEBPACK_IMPORTED_MODULE_1__.json);\n            _this.survey.onCompleting.add(function (_x, _x2) {\n              return (_ref = _ref || _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(result, options) {\n                return _regeneratorRuntime().wrap(function _callee$(_context) {\n                  while (1) switch (_context.prev = _context.next) {\n                    case 0:\n                      options.allowComplete = false;\n                      _context.next = 3;\n                      return axios.post(\"/api/alliance/store\", result.data).then(function (response) {\n                        if (response.data) {\n                          console.log(response.data);\n                          Swal.fire({\n                            title: \"Actualizado\",\n                            text: \"La Alianza ha sido creado con éxito\",\n                            icon: \"success\"\n                            //  timer: 2000,\n                          }).then(function () {\n                            window.location.href = \"/panel-administracion/alianzas\";\n                          });\n                        } else {\n                          Swal.fire({\n                            title: \"Error!\",\n                            text: \"No se pudo crear la alianza. Por favor intente más tarde.\",\n                            icon: \"error\"\n                            //    timer: 3000,\n                          }).then(function (_) {\n                            location.reload();\n                          });\n                        }\n                      });\n                    case 3:\n                    case \"end\":\n                      return _context.stop();\n                  }\n                }, _callee);\n              }))).apply(this, arguments);\n            });\n          case 2:\n          case \"end\":\n            return _context2.stop();\n        }\n      }, _callee2);\n    }))();\n  }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vYWxsaWFuY2UvY3JlYXRlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7K0NBU0EscUpBQUFBLG1CQUFBLFlBQUFBLG9CQUFBLFdBQUFDLENBQUEsU0FBQUMsQ0FBQSxFQUFBRCxDQUFBLE9BQUFFLENBQUEsR0FBQUMsTUFBQSxDQUFBQyxTQUFBLEVBQUFDLENBQUEsR0FBQUgsQ0FBQSxDQUFBSSxjQUFBLEVBQUFDLENBQUEsR0FBQUosTUFBQSxDQUFBSyxjQUFBLGNBQUFQLENBQUEsRUFBQUQsQ0FBQSxFQUFBRSxDQUFBLElBQUFELENBQUEsQ0FBQUQsQ0FBQSxJQUFBRSxDQUFBLENBQUFPLEtBQUEsS0FBQUMsQ0FBQSx3QkFBQUMsTUFBQSxHQUFBQSxNQUFBLE9BQUFDLENBQUEsR0FBQUYsQ0FBQSxDQUFBRyxRQUFBLGtCQUFBQyxDQUFBLEdBQUFKLENBQUEsQ0FBQUssYUFBQSx1QkFBQUMsQ0FBQSxHQUFBTixDQUFBLENBQUFPLFdBQUEsOEJBQUFDLE9BQUFqQixDQUFBLEVBQUFELENBQUEsRUFBQUUsQ0FBQSxXQUFBQyxNQUFBLENBQUFLLGNBQUEsQ0FBQVAsQ0FBQSxFQUFBRCxDQUFBLElBQUFTLEtBQUEsRUFBQVAsQ0FBQSxFQUFBaUIsVUFBQSxNQUFBQyxZQUFBLE1BQUFDLFFBQUEsU0FBQXBCLENBQUEsQ0FBQUQsQ0FBQSxXQUFBa0IsTUFBQSxtQkFBQWpCLENBQUEsSUFBQWlCLE1BQUEsWUFBQUEsT0FBQWpCLENBQUEsRUFBQUQsQ0FBQSxFQUFBRSxDQUFBLFdBQUFELENBQUEsQ0FBQUQsQ0FBQSxJQUFBRSxDQUFBLGdCQUFBb0Is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QkFDQTt3QkFDQTtzQkFDQTtvQkFBQTtvQkFBQTtzQkFBQSxPQUFBZixRQUFBLENBQUE1QyxJQUFBO2tCQUFBO2dCQUFBLEdBQUF3QyxPQUFBO2NBQUEsQ0FDQSxJQUFBcEIsS0FBQSxPQUFBRCxTQUFBO1lBQUE7VUFBQTtVQUFBO1lBQUEsT0FBQWUsU0FBQSxDQUFBbEMsSUFBQTtRQUFBO01BQUEsR0FBQStCLFFBQUE7SUFBQTtFQUNBO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9hbGxpYW5jZS9jcmVhdGUudnVlP2FiYTUiXSwic291cmNlc0NvbnRlbnQiOlsiPHRlbXBsYXRlPlxuICA8ZGl2PlxuICAgIDx2LWFwcCB2LWlmPVwic3VydmV5XCI+XG4gICAgICA8c3VydmV5IDpzdXJ2ZXk9XCJzdXJ2ZXlcIj48L3N1cnZleT5cbiAgICA8L3YtYXBwPlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG4gIFxuICA8c2NyaXB0PlxuaW1wb3J0ICogYXMgU3VydmV5VnVlIGZyb20gXCJzdXJ2ZXktdnVlXCI7XG5jb25zdCBTd2FsID0gcmVxdWlyZShcInN3ZWV0YWxlcnQyXCIpO1xuaW1wb3J0IHsganNvbiB9IGZyb20gXCIuL2Zvcm1cIjtcbmV4cG9ydCBkZWZhdWx0IHtcbiAgZGF0YTogKCkgPT4gKHtcbiAgICBzdXJ2ZXk6IG51bGwsXG4gIH0pLFxuXG4gIGFzeW5jIG1vdW50ZWQoKSB7XG5cbiAgICB0aGlzLnN1cnZleSA9IG5ldyBTdXJ2ZXlWdWUuTW9kZWwoanNvbik7XG5cbiAgICB0aGlzLnN1cnZleS5vbkNvbXBsZXRpbmcuYWRkKGFzeW5jIGZ1bmN0aW9uIChyZXN1bHQsIG9wdGlvbnMpIHtcbiAgICAgIG9wdGlvbnMuYWxsb3dDb21wbGV0ZSA9IGZhbHNlO1xuICAgICAgYXdhaXQgYXhpb3NcbiAgICAgICAgLnBvc3QoXCIvYXBpL2FsbGlhbmNlL3N0b3JlXCIsIHJlc3VsdC5kYXRhKVxuICAgICAgICAudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICBpZiAocmVzcG9uc2UuZGF0YSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2cocmVzcG9uc2UuZGF0YSk7XG4gICAgICAgICAgICBTd2FsLmZpcmUoe1xuICAgICAgICAgICAgICB0aXRsZTogXCJBY3R1YWxpemFkb1wiLFxuICAgICAgICAgICAgICB0ZXh0OiBcIkxhIEFsaWFuemEgaGEgc2lkbyBjcmVhZG8gY29uIMOpeGl0b1wiLFxuICAgICAgICAgICAgICBpY29uOiBcInN1Y2Nlc3NcIixcbiAgICAgICAgICAgIC8vICB0aW1lcjogMjAwMCxcbiAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9XG4gICAgICAgICAgICAgICAgXCIvcGFuZWwtYWRtaW5pc3RyYWNpb24vYWxpYW56YXNcIjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBTd2FsLmZpcmUoe1xuICAgICAgICAgICAgICB0aXRsZTogXCJFcnJvciFcIixcbiAgICAgICAgICAgICAgdGV4dDpcbiAgICAgICAgICAgICAgICBcIk5vIHNlIHB1ZG8gY3JlYXIgbGEgYWxpYW56YS4gUG9yIGZhdm9yIGludGVudGUgbcOhcyB0YXJkZS5cIixcbiAgICAgICAgICAgICAgaWNvbjogXCJlcnJvclwiLFxuICAgICAgICAgIC8vICAgIHRpbWVyOiAzMDAwLFxuICAgICAgICAgICAgfSkudGhlbigoXykgPT4ge1xuICAgICAgICAgICAgICBsb2NhdGlvbi5yZWxvYWQoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH0sXG59O1xuPC9zY3JpcHQ+XG4gIFxuICAiXSwibmFtZXMiOlsiX3JlZ2VuZXJhdG9yUnVudGltZSIsImUiLCJ0IiwiciIsIk9iamVjdCIsInByb3RvdHlwZSIsIm4iLCJoYXNPd25Qcm9wZXJ0eSIsIm8iLCJkZWZpbmVQcm9wZXJ0eSIsInZhbHVlIiwiaSIsIlN5bWJvbCIsImEiLCJpdGVyYXRvciIsImMiLCJhc3luY0l0ZXJhdG9yIiwidSIsInRvU3RyaW5nVGFnIiwiZGVmaW5lIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwid3JhcCIsIkdlbmVyYXRvciIsImNyZWF0ZSIsIkNvbnRleHQiLCJtYWtlSW52b2tlTWV0aG9kIiwidHJ5Q2F0Y2giLCJ0eXBlIiwiYXJnIiwiY2FsbCIsImgiLCJsIiwiZiIsInMiLCJ5IiwiR2VuZXJhdG9yRnVuY3Rpb24iLCJHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSIsInAiLCJkIiwiZ2V0UHJvdG90eXBlT2YiLCJ2IiwidmFsdWVzIiwiZyIsImRlZmluZUl0ZXJhdG9yTWV0aG9kcyIsImZvckVhY2giLCJfaW52b2tlIiwiQXN5bmNJdGVyYXRvciIsImludm9rZSIsIl90eXBlb2YiLCJyZXNvbHZlIiwiX19hd2FpdCIsInRoZW4iLCJjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZyIsIkVycm9yIiwiZG9uZSIsIm1ldGhvZCIsImRlbGVnYXRlIiwibWF5YmVJbnZva2VEZWxlZ2F0ZSIsInNlbnQiLCJfc2VudCIsImRpc3BhdGNoRXhjZXB0aW9uIiwiYWJydXB0IiwiVHlwZUVycm9yIiwicmVzdWx0TmFtZSIsIm5leHQiLCJuZXh0TG9jIiwicHVzaFRyeUVudHJ5IiwidHJ5TG9jIiwiY2F0Y2hMb2MiLCJmaW5hbGx5TG9jIiwiYWZ0ZXJMb2MiLCJ0cnlFbnRyaWVzIiwicHVzaCIsInJlc2V0VHJ5RW50cnkiLCJjb21wbGV0aW9uIiwicmVzZXQiLCJpc05hTiIsImxlbmd0aCIsImRpc3BsYXlOYW1lIiwiaXNHZW5lcmF0b3JGdW5jdGlvbiIsImNvbnN0cnVjdG9yIiwibmFtZSIsIm1hcmsiLCJzZXRQcm90b3R5cGVPZiIsIl9fcHJvdG9fXyIsImF3cmFwIiwiYXN5bmMiLCJQcm9taXNlIiwia2V5cyIsInJldmVyc2UiLCJwb3AiLCJwcmV2IiwiY2hhckF0Iiwic2xpY2UiLCJzdG9wIiwicnZhbCIsImhhbmRsZSIsImNvbXBsZXRlIiwiZmluaXNoIiwiX2NhdGNoIiwiZGVsZWdhdGVZaWVsZCIsImFzeW5jR2VuZXJhdG9yU3RlcCIsImdlbiIsInJlamVjdCIsIl9uZXh0IiwiX3Rocm93Iiwia2V5IiwiaW5mbyIsImVycm9yIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJmbiIsInNlbGYiLCJhcmdzIiwiYXJndW1lbnRzIiwiYXBwbHkiLCJlcnIiLCJ1bmRlZmluZWQiLCJTdXJ2ZXlWdWUiLCJTd2FsIiwicmVxdWlyZSIsImpzb24iLCJkYXRhIiwic3VydmV5IiwibW91bnRlZCIsIl90aGlzIiwiX2NhbGxlZTIiLCJfcmVmIiwiX2NhbGxlZTIkIiwiX2NvbnRleHQyIiwiTW9kZWwiLCJvbkNvbXBsZXRpbmciLCJhZGQiLCJfeCIsIl94MiIsIl9jYWxsZWUiLCJyZXN1bHQiLCJvcHRpb25zIiwiX2NhbGxlZSQiLCJfY29udGV4dCIsImFsbG93Q29tcGxldGUiLCJheGlvcyIsInBvc3QiLCJyZXNwb25zZSIsImNvbnNvbGUiLCJsb2ciLCJmaXJlIiwidGl0bGUiLCJ0ZXh0IiwiaWNvbiIsIndpbmRvdyIsImxvY2F0aW9uIiwiaHJlZiIsIl8iLCJyZWxvYWQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/alliance/create.vue?vue&type=script&lang=js&\n");

/***/ }),

/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/alliance/edit.vue?vue&type=script&lang=js&":
/*!**************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/alliance/edit.vue?vue&type=script&lang=js& ***!
  \**************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var survey_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! survey-vue */ \"./node_modules/survey-vue/survey-vue.js\");\n/* harmony import */ var survey_vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(survey_vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _form__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./form */ \"./resources/js/components/admin/alliance/form.js\");\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = \"function\" == typeof Symbol ? Symbol : {}, a = i.iterator || \"@@iterator\", c = i.asyncIterator || \"@@asyncIterator\", u = i.toStringTag || \"@@toStringTag\"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, \"\"); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, \"_invoke\", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: \"normal\", arg: t.call(e, r) }; } catch (t) { return { type: \"throw\", arg: t }; } } e.wrap = wrap; var h = \"suspendedStart\", l = \"suspendedYield\", f = \"executing\", s = \"completed\", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { [\"next\", \"throw\", \"return\"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if (\"throw\" !== c.type) { var u = c.arg, h = u.value; return h && \"object\" == _typeof(h) && n.call(h, \"__await\") ? e.resolve(h.__await).then(function (t) { invoke(\"next\", t, i, a); }, function (t) { invoke(\"throw\", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke(\"throw\", t, i, a); }); } a(c.arg); } var r; o(this, \"_invoke\", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error(\"Generator is already running\"); if (o === s) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = f; var p = tryCatch(e, r, n); if (\"normal\" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } \"throw\" === p.type && (o = s, n.method = \"throw\", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, \"throw\" === n && e.iterator[\"return\"] && (r.method = \"return\", r.arg = t, maybeInvokeDelegate(e, r), \"throw\" === r.method) || \"return\" !== n && (r.method = \"throw\", r.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), y; var i = tryCatch(o, e.iterator, r.arg); if (\"throw\" === i.type) return r.method = \"throw\", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, \"return\" !== r.method && (r.method = \"next\", r.arg = t), r.delegate = null, y) : a : (r.method = \"throw\", r.arg = new TypeError(\"iterator result is not an object\"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = \"normal\", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: \"root\" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || \"\" === e) { var r = e[a]; if (r) return r.call(e); if (\"function\" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, \"constructor\", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, \"constructor\", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), e.isGeneratorFunction = function (t) { var e = \"function\" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || \"GeneratorFunction\" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, \"GeneratorFunction\")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, \"Generator\"), define(g, a, function () { return this; }), define(g, \"toString\", function () { return \"[object Generator]\"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) \"t\" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = \"throw\", a.arg = e, r.next = n, o && (r.method = \"next\", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if (\"root\" === i.tryLoc) return handle(\"end\"); if (i.tryLoc <= this.prev) { var c = n.call(i, \"catchLoc\"), u = n.call(i, \"finallyLoc\"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error(\"try statement without catch or finally\"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, \"finallyLoc\") && this.prev < o.finallyLoc) { var i = o; break; } } i && (\"break\" === t || \"continue\" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = \"next\", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, \"catch\": function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if (\"throw\" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, \"next\" === this.method && (this.arg = t), y; } }, e; }\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nvar Swal = __webpack_require__(/*! sweetalert2 */ \"./node_modules/sweetalert2/dist/sweetalert2.all.js\");\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n  components: {\n    Survey: survey_vue__WEBPACK_IMPORTED_MODULE_0__.Survey\n  },\n  data: function data() {\n    return {\n      survey: null,\n      data: null\n    };\n  },\n  mounted: function mounted() {\n    var _this = this;\n    return _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {\n      var _ref;\n      var self;\n      return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n        while (1) switch (_context2.prev = _context2.next) {\n          case 0:\n            self = _this;\n            _context2.next = 3;\n            return axios.get(\"/api/alliance/edit/\" + _this.$route.params.id, {\n              headers: {\n                Authorization: AT,\n                Accept: \"application/json\"\n              }\n            }).then(function (response) {\n              _this.data = response.data;\n              console.log(_this.data);\n            });\n          case 3:\n            _this.survey = new survey_vue__WEBPACK_IMPORTED_MODULE_0__.Model(_form__WEBPACK_IMPORTED_MODULE_1__.json);\n            _this.survey.onCompleting.add(function (_x, _x2) {\n              return (_ref = _ref || _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(result, options) {\n                return _regeneratorRuntime().wrap(function _callee$(_context) {\n                  while (1) switch (_context.prev = _context.next) {\n                    case 0:\n                      options.allowComplete = false;\n                      _context.next = 3;\n                      return axios.post(\"/api/alliance/update/\" + self.$route.params.id, result.data).then(function (response) {\n                        console.log(response.data);\n                        if (response.data) {\n                          Swal.fire({\n                            title: \"Actualizado\",\n                            text: \"La alianza ha sido actualizado con éxito\",\n                            icon: \"success\"\n                            //  timer: 2000,\n                          }).then(function () {\n                            window.location.href = \"/panel-administracion/alianzas\";\n                          });\n                        } else {\n                          Swal.fire({\n                            title: \"Error!\",\n                            text: \"No se pudo actualizar la alianza. Por favor intente más tarde.\",\n                            icon: \"error\"\n                            //    timer: 3000,\n                          }).then(function (_) {\n                            location.reload();\n                          });\n                        }\n                      });\n                    case 3:\n                    case \"end\":\n                      return _context.stop();\n                  }\n                }, _callee);\n              }))).apply(this, arguments);\n            });\n            _this.survey.data = self.data;\n          case 6:\n          case \"end\":\n            return _context2.stop();\n        }\n      }, _callee2);\n    }))();\n  }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vYWxsaWFuY2UvZWRpdC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmIiwibWFwcGluZ3MiOiI7Ozs7Ozs7OytDQU9BLHFKQUFBQSxtQkFBQSxZQUFBQSxvQkFBQSxXQUFBQyxDQUFBLFNBQUFDLENBQUEsRUFBQUQsQ0FBQSxPQUFBRSxDQUFBLEdBQUFDLE1BQUEsQ0FBQUMsU0FBQSxFQUFBQyxDQUFBLEdBQUFILENBQUEsQ0FBQUksY0FBQSxFQUFBQyxDQUFBLEdBQUFKLE1BQUEsQ0FBQUssY0FBQSxjQUFBUCxDQUFBLEVBQUFELENBQUEsRUFBQUUsQ0FBQSxJQUFBRCxDQUFBLENBQUFELENBQUEsSUFBQUUsQ0FBQSxDQUFBTyxLQUFBLEtBQUFDLENBQUEsd0JBQUFDLE1BQUEsR0FBQUEsTUFBQSxPQUFBQyxDQUFBLEdBQUFGLENBQUEsQ0FBQUcsUUFBQSxrQkFBQUMsQ0FBQSxHQUFBSixDQUFBLENBQUFLLGFBQUEsdUJBQUFDLENBQUEsR0FBQU4sQ0FBQSxDQUFBTyxXQUFBLDhCQUFBQyxPQUFBakIsQ0FBQSxFQUFBRCxDQUFBLEVBQUFFLENBQUEsV0FBQUMsTUFBQSxDQUFBSyxjQUFBLENBQUFQLENBQUEsRUFBQUQsQ0FBQSxJQUFBUyxLQUFBLEVBQUFQLENBQUEsRUFBQWlCLFVBQUEsTUFBQUMsWUFBQSxNQUFBQyxRQUFBLFNBQUFwQixDQUFBLENBQUFELENBQUEsV0FBQWtCLE1BQUEsbUJBQUFqQixDQUFBLElBQUFpQixNQUFBLFlBQUFBLE9BQUFqQixDQUFBLEVBQUFELENBQUEsRUFBQUUsQ0FBQSxXQUFBRCxDQUFBLENBQUFELENBQUEsSUFBQUUsQ0FBQSxnQkFBQW9CLEtB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QUFBLENBQUFDLE1BQUEsQ0FBQUMsRUFBQSxFQUFBYyxNQUFBLENBQUExQixJQUFBLEVBQ0F4RSxJQUFBLFdBQUF5RixRQUFBO3dCQUNBQyxPQUFBLENBQUFDLEdBQUEsQ0FBQUYsUUFBQSxDQUFBakIsSUFBQTt3QkFDQSxJQUFBaUIsUUFBQSxDQUFBakIsSUFBQTswQkFDQUwsSUFBQSxDQUFBcUMsSUFBQTs0QkFDQUMsS0FBQTs0QkFDQUMsSUFBQTs0QkFDQUMsSUFBQTs0QkFDQTswQkFDQSxHQUFBM0csSUFBQTs0QkFDQTRHLE1BQUEsQ0FBQUMsUUFBQSxDQUFBQyxJQUFBOzBCQUNBO3dCQUNBOzBCQUNBM0MsSUFBQSxDQUFBcUMsSUFBQTs0QkFDQUMsS0FBQTs0QkFDQUMsSUFBQTs0QkFDQUMsSUFBQTs0QkFDQTswQkFDQSxHQUFBM0csSUFBQSxXQUFBK0csQ0FBQTs0QkFDQUYsUUFBQSxDQUFBRyxNQUFBOzBCQUNBO3dCQUNBO3NCQUNBO29CQUFBO29CQUFBO3NCQUFBLE9BQUFYLFFBQUEsQ0FBQTFELElBQUE7a0JBQUE7Z0JBQUEsR0FBQXNELE9BQUE7Y0FBQSxDQUNBLElBQUFsQyxLQUFBLE9BQUFELFNBQUE7WUFBQTtZQUNBYSxLQUFBLENBQUFGLE1BQUEsQ0FBQUQsSUFBQSxHQUFBWixJQUFBLENBQUFZLElBQUE7VUFBQTtVQUFBO1lBQUEsT0FBQU8sU0FBQSxDQUFBcEMsSUFBQTtRQUFBO01BQUEsR0FBQWlDLFFBQUE7SUFBQTtFQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vYWxsaWFuY2UvZWRpdC52dWU/M2Q5YyJdLCJzb3VyY2VzQ29udGVudCI6WyI8dGVtcGxhdGU+XG4gICAgPGRpdiB2LWlmPVwic3VydmV5XCI+XG4gICAgICA8U3VydmV5IDpzdXJ2ZXk9XCJzdXJ2ZXlcIj48L1N1cnZleT5cbiAgICA8L2Rpdj5cbiAgPC90ZW1wbGF0ZT5cbiAgICAgIFxuICAgICAgPHNjcmlwdD5cbiAgaW1wb3J0ICogYXMgU3VydmV5VnVlIGZyb20gXCJzdXJ2ZXktdnVlXCI7XG4gIGNvbnN0IFN3YWwgPSByZXF1aXJlKFwic3dlZXRhbGVydDJcIik7XG4gIGltcG9ydCB7IGpzb24gfSBmcm9tIFwiLi9mb3JtXCI7XG4gIFxuICBleHBvcnQgZGVmYXVsdCB7XG4gICAgY29tcG9uZW50czogeyBTdXJ2ZXk6IFN1cnZleVZ1ZS5TdXJ2ZXkgfSxcbiAgICBkYXRhOiAoKSA9PiAoe1xuICAgICAgc3VydmV5OiBudWxsLFxuICAgICAgZGF0YTogbnVsbCxcbiAgICB9KSxcbiAgXG4gICAgYXN5bmMgbW91bnRlZCgpIHtcbiAgICAgIGxldCBzZWxmID0gdGhpcztcbiAgICAgIGF3YWl0IGF4aW9zXG4gICAgICAgIC5nZXQoXCIvYXBpL2FsbGlhbmNlL2VkaXQvXCIgKyB0aGlzLiRyb3V0ZS5wYXJhbXMuaWQsIHtcbiAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICBBdXRob3JpemF0aW9uOiBBVCxcbiAgICAgICAgICAgIEFjY2VwdDogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgdGhpcy5kYXRhID0gcmVzcG9uc2UuZGF0YTtcbiAgICAgICAgICBjb25zb2xlLmxvZyh0aGlzLmRhdGEpXG4gICAgICAgIH0pO1xuICBcbiAgICAgIHRoaXMuc3VydmV5ID0gbmV3IFN1cnZleVZ1ZS5Nb2RlbChqc29uKTtcbiAgXG4gICAgICB0aGlzLnN1cnZleS5vbkNvbXBsZXRpbmcuYWRkKGFzeW5jIGZ1bmN0aW9uIChyZXN1bHQsIG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucy5hbGxvd0NvbXBsZXRlID0gZmFsc2U7XG4gICAgICAgIGF3YWl0IGF4aW9zXG4gICAgICAgICAgLnBvc3QoXCIvYXBpL2FsbGlhbmNlL3VwZGF0ZS9cIiArIHNlbGYuJHJvdXRlLnBhcmFtcy5pZCwgcmVzdWx0LmRhdGEpXG4gICAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlLmRhdGEpXG4gICAgICAgICAgICBpZiAocmVzcG9uc2UuZGF0YSkge1xuICAgICAgICAgICAgICBTd2FsLmZpcmUoe1xuICAgICAgICAgICAgICAgIHRpdGxlOiBcIkFjdHVhbGl6YWRvXCIsXG4gICAgICAgICAgICAgICAgdGV4dDogXCJMYSBhbGlhbnphIGhhIHNpZG8gYWN0dWFsaXphZG8gY29uIMOpeGl0b1wiLFxuICAgICAgICAgICAgICAgIGljb246IFwic3VjY2Vzc1wiLFxuICAgICAgICAgICAgICAgIC8vICB0aW1lcjogMjAwMCxcbiAgICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBcIi9wYW5lbC1hZG1pbmlzdHJhY2lvbi9hbGlhbnphc1wiO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIFN3YWwuZmlyZSh7XG4gICAgICAgICAgICAgICAgdGl0bGU6IFwiRXJyb3IhXCIsXG4gICAgICAgICAgICAgICAgdGV4dDogXCJObyBzZSBwdWRvIGFjdHVhbGl6YXIgbGEgYWxpYW56YS4gUG9yIGZhdm9yIGludGVudGUgbcOhcyB0YXJkZS5cIixcbiAgICAgICAgICAgICAgICBpY29uOiBcImVycm9yXCIsXG4gICAgICAgICAgICAgICAgLy8gICAgdGltZXI6IDMwMDAsXG4gICAgICAgICAgICAgIH0pLnRoZW4oKF8pID0+IHtcbiAgICAgICAgICAgICAgICBsb2NhdGlvbi5yZWxvYWQoKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuc3VydmV5LmRhdGEgPSBzZWxmLmRhdGE7XG4gICAgfSxcbiAgfTtcbiAgPC9zY3JpcHQ+Il0sIm5hbWVzIjpbIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJlIiwidCIsInIiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJuIiwiaGFzT3duUHJvcGVydHkiLCJvIiwiZGVmaW5lUHJvcGVydHkiLCJ2YWx1ZSIsImkiLCJTeW1ib2wiLCJhIiwiaXRlcmF0b3IiLCJjIiwiYXN5bmNJdGVyYXRvciIsInUiLCJ0b1N0cmluZ1RhZyIsImRlZmluZSIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsIndyYXAiLCJHZW5lcmF0b3IiLCJjcmVhdGUiLCJDb250ZXh0IiwibWFrZUludm9rZU1ldGhvZCIsInRyeUNhdGNoIiwidHlwZSIsImFyZyIsImNhbGwiLCJoIiwibCIsImYiLCJzIiwieSIsIkdlbmVyYXRvckZ1bmN0aW9uIiwiR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUiLCJwIiwiZCIsImdldFByb3RvdHlwZU9mIiwidiIsInZhbHVlcyIsImciLCJkZWZpbmVJdGVyYXRvck1ldGhvZHMiLCJmb3JFYWNoIiwiX2ludm9rZSIsIkFzeW5jSXRlcmF0b3IiLCJpbnZva2UiLCJfdHlwZW9mIiwicmVzb2x2ZSIsIl9fYXdhaXQiLCJ0aGVuIiwiY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmciLCJFcnJvciIsImRvbmUiLCJtZXRob2QiLCJkZWxlZ2F0ZSIsIm1heWJlSW52b2tlRGVsZWdhdGUiLCJzZW50IiwiX3NlbnQiLCJkaXNwYXRjaEV4Y2VwdGlvbiIsImFicnVwdCIsIlR5cGVFcnJvciIsInJlc3VsdE5hbWUiLCJuZXh0IiwibmV4dExvYyIsInB1c2hUcnlFbnRyeSIsInRyeUxvYyIsImNhdGNoTG9jIiwiZmluYWxseUxvYyIsImFmdGVyTG9jIiwidHJ5RW50cmllcyIsInB1c2giLCJyZXNldFRyeUVudHJ5IiwiY29tcGxldGlvbiIsInJlc2V0IiwiaXNOYU4iLCJsZW5ndGgiLCJkaXNwbGF5TmFtZSIsImlzR2VuZXJhdG9yRnVuY3Rpb24iLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJtYXJrIiwic2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJhd3JhcCIsImFzeW5jIiwiUHJvbWlzZSIsImtleXMiLCJyZXZlcnNlIiwicG9wIiwicHJldiIsImNoYXJBdCIsInNsaWNlIiwic3RvcCIsInJ2YWwiLCJoYW5kbGUiLCJjb21wbGV0ZSIsImZpbmlzaCIsIl9jYXRjaCIsImRlbGVnYXRlWWllbGQiLCJhc3luY0dlbmVyYXRvclN0ZXAiLCJnZW4iLCJyZWplY3QiLCJfbmV4dCIsIl90aHJvdyIsImtleSIsImluZm8iLCJlcnJvciIsIl9hc3luY1RvR2VuZXJhdG9yIiwiZm4iLCJzZWxmIiwiYXJncyIsImFyZ3VtZW50cyIsImFwcGx5IiwiZXJyIiwidW5kZWZpbmVkIiwiU3VydmV5VnVlIiwiU3dhbCIsInJlcXVpcmUiLCJqc29uIiwiY29tcG9uZW50cyIsIlN1cnZleSIsImRhdGEiLCJzdXJ2ZXkiLCJtb3VudGVkIiwiX3RoaXMiLCJfY2FsbGVlMiIsIl9yZWYiLCJfY2FsbGVlMiQiLCJfY29udGV4dDIiLCJheGlvcyIsImdldCIsIiRyb3V0ZSIsInBhcmFtcyIsImlkIiwiaGVhZGVycyIsIkF1dGhvcml6YXRpb24iLCJBVCIsIkFjY2VwdCIsInJlc3BvbnNlIiwiY29uc29sZSIsImxvZyIsIk1vZGVsIiwib25Db21wbGV0aW5nIiwiYWRkIiwiX3giLCJfeDIiLCJfY2FsbGVlIiwicmVzdWx0Iiwib3B0aW9ucyIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJhbGxvd0NvbXBsZXRlIiwicG9zdCIsImZpcmUiLCJ0aXRsZSIsInRleHQiLCJpY29uIiwid2luZG93IiwibG9jYXRpb24iLCJocmVmIiwiXyIsInJlbG9hZCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/alliance/edit.vue?vue&type=script&lang=js&\n");

/***/ }),

/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/alliance/index.vue?vue&type=script&lang=js&":
/*!***************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/alliance/index.vue?vue&type=script&lang=js& ***!
  \***************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nvar Swal = __webpack_require__(/*! sweetalert2 */ \"./node_modules/sweetalert2/dist/sweetalert2.all.js\");\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n  data: function data() {\n    return {\n      data: null,\n      search: \"\",\n      headers: [{\n        text: \"Nombre\",\n        value: \"name\"\n      }, {\n        text: \"Logo\",\n        value: \"image\"\n      }, {\n        text: \"Sitio Web\",\n        value: \"link\"\n      }, {\n        text: \"Acciones\",\n        value: \"actions\",\n        sortable: false\n      }]\n    };\n  },\n  mounted: function mounted() {\n    this.loadData();\n  },\n  methods: {\n    loadData: function loadData() {\n      var _this = this;\n      axios.get(\"/api/alliance/index\").then(function (response) {\n        _this.data = response.data;\n      });\n    },\n    edit: function edit(id) {\n      window.location.href = \"/panel-administracion/alianzas/\" + id + \"/editar\";\n    },\n    trash: function trash(id, name) {\n      var _this2 = this;\n      Swal.fire({\n        title: \"Confirmación\",\n        html: \"<p margin-bottom: 10px;\\\">\\n                \\xBFEst\\xE1s seguro de que deseas eliminar la alianza con <b>\\\"\".concat(name, \"\\\"</b>?</p>\\n                    <p style=\\\"font-size: 0.7em;\\\">\\n                        Si lo eliminas, no podr\\xE1s recuperarla.\\n                    </p>\"),\n        icon: \"warning\",\n        showCancelButton: true,\n        confirmButtonColor: \"#3085d6\",\n        cancelButtonColor: \"#d33\",\n        confirmButtonText: \"Sí, eliminar\",\n        cancelButtonText: \"Cancelar\"\n      }).then(function (result) {\n        if (result.isConfirmed) {\n          axios[\"delete\"](\"/api/alliance/delete/\" + id, {\n            headers: {\n              Authorization: AT,\n              Accept: \"application/json\"\n            }\n          }).then(function (response) {\n            Swal.fire({\n              title: \"Eliminado\",\n              text: \"Se ha eliminado la alianza con éxito.\",\n              icon: \"success\",\n              timer: 2000\n            }).then(function (_) {});\n            _this2.loadData();\n          });\n        }\n      });\n    }\n  }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vYWxsaWFuY2UvaW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJiIsIm1hcHBpbmdzIjoiOzs7O0FBK0NBLElBQUFBLElBQUEsR0FBQUMsbUJBQUE7QUFDQSxpRUFBZTtFQUNmQyxJQUFBLFdBQUFBLEtBQUE7SUFDQTtNQUNBQSxJQUFBO01BQ0FDLE1BQUE7TUFDQUMsT0FBQSxHQUNBO1FBQUFDLElBQUE7UUFBQUMsS0FBQTtNQUFBLEdBQ0E7UUFBQUQsSUFBQTtRQUFBQyxLQUFBO01BQUEsR0FDQTtRQUFBRCxJQUFBO1FBQUFDLEtBQUE7TUFBQSxHQUNBO1FBQUFELElBQUE7UUFBQUMsS0FBQTtRQUFBQyxRQUFBO01BQUE7SUFFQTtFQUNBO0VBQ0FDLE9BQUEsV0FBQUEsUUFBQTtJQUNBLEtBQUFDLFFBQUE7RUFDQTtFQUNBQyxPQUFBO0lBQ0FELFFBQUEsV0FBQUEsU0FBQTtNQUFBLElBQUFFLEtBQUE7TUFDQUMsS0FBQSxDQUFBQyxHQUFBLHdCQUFBQyxJQUFBLFdBQUFDLFFBQUE7UUFDQUosS0FBQSxDQUFBVCxJQUFBLEdBQUFhLFFBQUEsQ0FBQWIsSUFBQTtNQUNBO0lBQ0E7SUFDQWMsSUFBQSxXQUFBQSxLQUFBQyxFQUFBO01BQ0FDLE1BQUEsQ0FBQUMsUUFBQSxDQUFBQyxJQUFBLHVDQUFBSCxFQUFBO0lBQ0E7SUFDQUksS0FBQSxXQUFBQSxNQUFBSixFQUFBLEVBQUFLLElBQUE7TUFBQSxJQUFBQyxNQUFBO01BQ0F2QixJQUFBLENBQUF3QixJQUFBO1FBQ0FDLEtBQUE7UUFDQUMsSUFBQSxnSEFBQUMsTUFBQSxDQUNBTCxJQUFBLGtLQUdBO1FBQ0FNLElBQUE7UUFDQUMsZ0JBQUE7UUFDQUMsa0JBQUE7UUFDQUMsaUJBQUE7UUFDQUMsaUJBQUE7UUFDQUMsZ0JBQUE7TUFDQSxHQUFBbkIsSUFBQSxXQUFBb0IsTUFBQTtRQUNBLElBQUFBLE1BQUEsQ0FBQUMsV0FBQTtVQUNBdkIsS0FBQSxVQUNBLDJCQUFBSyxFQUFBO1lBQ0FiLE9BQUE7Y0FDQWdDLGFBQUEsRUFBQUMsRUFBQTtjQUNBQyxNQUFBO1lBQ0E7VUFDQSxHQUNBeEIsSUFBQSxXQUFBQyxRQUFBO1lBQ0FmLElBQUEsQ0FBQXdCLElBQUE7Y0FDQUMsS0FBQTtjQUNBcEIsSUFBQTtjQUNBdUIsSUFBQTtjQUNBVyxLQUFBO1lBQ0EsR0FBQXpCLElBQUEsV0FBQTBCLENBQUE7WUFDQWpCLE1BQUEsQ0FBQWQsUUFBQTtVQUNBO1FBQ0E7TUFDQTtJQUNBO0VBQ0E7QUFDQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vL3Jlc291cmNlcy9qcy9jb21wb25lbnRzL2FkbWluL2FsbGlhbmNlL2luZGV4LnZ1ZT9hOTQ3Il0sInNvdXJjZXNDb250ZW50IjpbIjx0ZW1wbGF0ZT5cbiAgPHYtYXBwPlxuICAgIDx2LWNhcmQgdi1pZj1cImRhdGFcIj5cbiAgICAgIDx2LWNhcmQtdGl0bGU+XG4gICAgICAgIEFkbWluaXN0cmFjacOzbiBkZSBBbGlhbnphc1xuICAgICAgICA8di1zcGFjZXI+PC92LXNwYWNlcj5cbiAgICAgICAgPHYtdGV4dC1maWVsZFxuICAgICAgICAgIHYtbW9kZWw9XCJzZWFyY2hcIlxuICAgICAgICAgIGFwcGVuZC1pY29uPVwibWRpLW1hZ25pZnlcIlxuICAgICAgICAgIGxhYmVsPVwiQnVzY2FyXCJcbiAgICAgICAgICBzaW5nbGUtbGluZVxuICAgICAgICAgIGhpZGUtZGV0YWlsc1xuICAgICAgICA+PC92LXRleHQtZmllbGQ+XG4gICAgICA8L3YtY2FyZC10aXRsZT5cbiAgICAgIDx2LWRhdGEtdGFibGVcbiAgICAgICAgOmhlYWRlcnM9XCJoZWFkZXJzXCJcbiAgICAgICAgOml0ZW1zPVwiZGF0YVwiXG4gICAgICAgIGNsYXNzPVwiZWxldmF0aW9uLTFcIlxuICAgICAgICA6c2VhcmNoPVwic2VhcmNoXCJcbiAgICAgID5cbiAgICAgICAgPHRlbXBsYXRlIHYtc2xvdDppdGVtLmltYWdlPVwieyBpdGVtIH1cIj5cbiAgICAgICAgICA8di1pbWdcbiAgICAgICAgICAgIG1heC1oZWlnaHQ9XCI1MVwiXG4gICAgICAgICAgICBtYXgtd2lkdGg9XCIxMTBcIlxuICAgICAgICAgICAgY29udGFpblxuICAgICAgICAgICAgOnNyYz1cIml0ZW0uaW1hZ2VuXCJcbiAgICAgICAgICA+PC92LWltZ1xuICAgICAgICA+PC90ZW1wbGF0ZT5cbiAgICAgICAgPHRlbXBsYXRlIHYtc2xvdDppdGVtLmxpbms9XCJ7IGl0ZW0gfVwiPlxuICAgICAgICAgIDx2LWJ0biBpY29uIDpocmVmPVwiaXRlbS51cmxcIiBjb2xvcj1cInByaW1hcnlcIiB0YXJnZXQ9XCJfYmxhbmtcIj5cbiAgICAgICAgICAgIDx2LWljb24+bWRpLW9wZW4taW4tbmV3PC92LWljb24+XG4gICAgICAgICAgPC92LWJ0bj5cbiAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgPHRlbXBsYXRlIHYtc2xvdDppdGVtLmFjdGlvbnM9XCJ7IGl0ZW0gfVwiPlxuICAgICAgICAgIDx2LWJ0biBjb2xvcj1cInJlZFwiIGZhYiB4LXNtYWxsIGRhcmsgQGNsaWNrPVwiZWRpdChpdGVtLmlkKVwiPlxuICAgICAgICAgICAgPHYtaWNvbj4gbWRpLXBlbmNpbCA8L3YtaWNvbj5cbiAgICAgICAgICA8L3YtYnRuPlxuICAgICAgICAgIDx2LWJ0biBjb2xvcj1cIndhcm5pbmdcIiBmYWIgeC1zbWFsbCBkYXJrIEBjbGljaz1cInRyYXNoKGl0ZW0uaWQsIGl0ZW0ubmFtZSlcIj5cbiAgICAgICAgICAgIDx2LWljb24+IG1kaS1kZWxldGUgPC92LWljb24+XG4gICAgICAgICAgPC92LWJ0bj5cbiAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgIDwvdi1kYXRhLXRhYmxlPlxuICAgIDwvdi1jYXJkPlxuICA8L3YtYXBwPlxuPC90ZW1wbGF0ZT5cbiAgXG4gIDxzY3JpcHQ+XG4gIGNvbnN0IFN3YWwgPSByZXF1aXJlKFwic3dlZXRhbGVydDJcIik7XG5leHBvcnQgZGVmYXVsdCB7XG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGE6IG51bGwsXG4gICAgICBzZWFyY2g6IFwiXCIsXG4gICAgICBoZWFkZXJzOiBbXG4gICAgICAgIHsgdGV4dDogXCJOb21icmVcIiwgdmFsdWU6IFwibmFtZVwiIH0sXG4gICAgICAgIHsgdGV4dDogXCJMb2dvXCIsIHZhbHVlOiBcImltYWdlXCIgfSxcbiAgICAgICAgeyB0ZXh0OiBcIlNpdGlvIFdlYlwiLCB2YWx1ZTogXCJsaW5rXCIgfSxcbiAgICAgICAgeyB0ZXh0OiBcIkFjY2lvbmVzXCIsIHZhbHVlOiBcImFjdGlvbnNcIiwgc29ydGFibGU6IGZhbHNlIH0sXG4gICAgICBdLFxuICAgIH07XG4gIH0sXG4gIG1vdW50ZWQoKSB7XG4gICAgdGhpcy5sb2FkRGF0YSgpO1xuICB9LFxuICBtZXRob2RzOiB7XG4gICAgbG9hZERhdGEoKSB7XG4gICAgICBheGlvcy5nZXQoXCIvYXBpL2FsbGlhbmNlL2luZGV4XCIpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIHRoaXMuZGF0YSA9IHJlc3BvbnNlLmRhdGE7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGVkaXQoaWQpIHtcbiAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gXCIvcGFuZWwtYWRtaW5pc3RyYWNpb24vYWxpYW56YXMvXCIgKyBpZCArIFwiL2VkaXRhclwiO1xuICAgIH0sXG4gICAgdHJhc2goaWQsIG5hbWUpIHtcbiAgICAgIFN3YWwuZmlyZSh7XG4gICAgICAgIHRpdGxlOiBcIkNvbmZpcm1hY2nDs25cIixcbiAgICAgICAgaHRtbDogYDxwIG1hcmdpbi1ib3R0b206IDEwcHg7XCI+XG4gICAgICAgICAgICAgICAgwr9Fc3TDoXMgc2VndXJvIGRlIHF1ZSBkZXNlYXMgZWxpbWluYXIgbGEgYWxpYW56YSBjb24gPGI+XCIke25hbWV9XCI8L2I+PzwvcD5cbiAgICAgICAgICAgICAgICAgICAgPHAgc3R5bGU9XCJmb250LXNpemU6IDAuN2VtO1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgU2kgbG8gZWxpbWluYXMsIG5vIHBvZHLDoXMgcmVjdXBlcmFybGEuXG4gICAgICAgICAgICAgICAgICAgIDwvcD5gLFxuICAgICAgICBpY29uOiBcIndhcm5pbmdcIixcbiAgICAgICAgc2hvd0NhbmNlbEJ1dHRvbjogdHJ1ZSxcbiAgICAgICAgY29uZmlybUJ1dHRvbkNvbG9yOiBcIiMzMDg1ZDZcIixcbiAgICAgICAgY2FuY2VsQnV0dG9uQ29sb3I6IFwiI2QzM1wiLFxuICAgICAgICBjb25maXJtQnV0dG9uVGV4dDogXCJTw60sIGVsaW1pbmFyXCIsXG4gICAgICAgIGNhbmNlbEJ1dHRvblRleHQ6IFwiQ2FuY2VsYXJcIixcbiAgICAgIH0pLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICBpZiAocmVzdWx0LmlzQ29uZmlybWVkKSB7XG4gICAgICAgICAgYXhpb3NcbiAgICAgICAgICAgIC5kZWxldGUoXCIvYXBpL2FsbGlhbmNlL2RlbGV0ZS9cIiArIGlkLCB7XG4gICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICBBdXRob3JpemF0aW9uOiBBVCxcbiAgICAgICAgICAgICAgICBBY2NlcHQ6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICBTd2FsLmZpcmUoe1xuICAgICAgICAgICAgICAgIHRpdGxlOiBcIkVsaW1pbmFkb1wiLFxuICAgICAgICAgICAgICAgIHRleHQ6IFwiU2UgaGEgZWxpbWluYWRvIGxhIGFsaWFuemEgY29uIMOpeGl0by5cIixcbiAgICAgICAgICAgICAgICBpY29uOiBcInN1Y2Nlc3NcIixcbiAgICAgICAgICAgICAgICB0aW1lcjogMjAwMCxcbiAgICAgICAgICAgICAgfSkudGhlbigoXykgPT4ge30pO1xuICAgICAgICAgICAgICB0aGlzLmxvYWREYXRhKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSxcbiAgfSxcbn07XG48L3NjcmlwdD5cbiAgIl0sIm5hbWVzIjpbIlN3YWwiLCJyZXF1aXJlIiwiZGF0YSIsInNlYXJjaCIsImhlYWRlcnMiLCJ0ZXh0IiwidmFsdWUiLCJzb3J0YWJsZSIsIm1vdW50ZWQiLCJsb2FkRGF0YSIsIm1ldGhvZHMiLCJfdGhpcyIsImF4aW9zIiwiZ2V0IiwidGhlbiIsInJlc3BvbnNlIiwiZWRpdCIsImlkIiwid2luZG93IiwibG9jYXRpb24iLCJocmVmIiwidHJhc2giLCJuYW1lIiwiX3RoaXMyIiwiZmlyZSIsInRpdGxlIiwiaHRtbCIsImNvbmNhdCIsImljb24iLCJzaG93Q2FuY2VsQnV0dG9uIiwiY29uZmlybUJ1dHRvbkNvbG9yIiwiY2FuY2VsQnV0dG9uQ29sb3IiLCJjb25maXJtQnV0dG9uVGV4dCIsImNhbmNlbEJ1dHRvblRleHQiLCJyZXN1bHQiLCJpc0NvbmZpcm1lZCIsIkF1dGhvcml6YXRpb24iLCJBVCIsIkFjY2VwdCIsInRpbWVyIiwiXyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/alliance/index.vue?vue&type=script&lang=js&\n");

/***/ }),

/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/banner/create.vue?vue&type=script&lang=js&":
/*!**************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/banner/create.vue?vue&type=script&lang=js& ***!
  \**************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var survey_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! survey-vue */ \"./node_modules/survey-vue/survey-vue.js\");\n/* harmony import */ var survey_vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(survey_vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _form__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./form */ \"./resources/js/components/admin/banner/form.js\");\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = \"function\" == typeof Symbol ? Symbol : {}, a = i.iterator || \"@@iterator\", c = i.asyncIterator || \"@@asyncIterator\", u = i.toStringTag || \"@@toStringTag\"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, \"\"); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, \"_invoke\", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: \"normal\", arg: t.call(e, r) }; } catch (t) { return { type: \"throw\", arg: t }; } } e.wrap = wrap; var h = \"suspendedStart\", l = \"suspendedYield\", f = \"executing\", s = \"completed\", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { [\"next\", \"throw\", \"return\"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if (\"throw\" !== c.type) { var u = c.arg, h = u.value; return h && \"object\" == _typeof(h) && n.call(h, \"__await\") ? e.resolve(h.__await).then(function (t) { invoke(\"next\", t, i, a); }, function (t) { invoke(\"throw\", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke(\"throw\", t, i, a); }); } a(c.arg); } var r; o(this, \"_invoke\", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error(\"Generator is already running\"); if (o === s) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = f; var p = tryCatch(e, r, n); if (\"normal\" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } \"throw\" === p.type && (o = s, n.method = \"throw\", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, \"throw\" === n && e.iterator[\"return\"] && (r.method = \"return\", r.arg = t, maybeInvokeDelegate(e, r), \"throw\" === r.method) || \"return\" !== n && (r.method = \"throw\", r.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), y; var i = tryCatch(o, e.iterator, r.arg); if (\"throw\" === i.type) return r.method = \"throw\", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, \"return\" !== r.method && (r.method = \"next\", r.arg = t), r.delegate = null, y) : a : (r.method = \"throw\", r.arg = new TypeError(\"iterator result is not an object\"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = \"normal\", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: \"root\" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || \"\" === e) { var r = e[a]; if (r) return r.call(e); if (\"function\" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, \"constructor\", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, \"constructor\", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), e.isGeneratorFunction = function (t) { var e = \"function\" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || \"GeneratorFunction\" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, \"GeneratorFunction\")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, \"Generator\"), define(g, a, function () { return this; }), define(g, \"toString\", function () { return \"[object Generator]\"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) \"t\" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = \"throw\", a.arg = e, r.next = n, o && (r.method = \"next\", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if (\"root\" === i.tryLoc) return handle(\"end\"); if (i.tryLoc <= this.prev) { var c = n.call(i, \"catchLoc\"), u = n.call(i, \"finallyLoc\"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error(\"try statement without catch or finally\"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, \"finallyLoc\") && this.prev < o.finallyLoc) { var i = o; break; } } i && (\"break\" === t || \"continue\" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = \"next\", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, \"catch\": function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if (\"throw\" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, \"next\" === this.method && (this.arg = t), y; } }, e; }\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nvar Swal = __webpack_require__(/*! sweetalert2 */ \"./node_modules/sweetalert2/dist/sweetalert2.all.js\");\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n  components: {\n    Survey: survey_vue__WEBPACK_IMPORTED_MODULE_0__.Survey\n  },\n  data: function data() {\n    return {\n      survey: null\n    };\n  },\n  mounted: function mounted() {\n    var _this = this;\n    return _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {\n      var _ref;\n      return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n        while (1) switch (_context2.prev = _context2.next) {\n          case 0:\n            _this.survey = new survey_vue__WEBPACK_IMPORTED_MODULE_0__.Model(_form__WEBPACK_IMPORTED_MODULE_1__.json);\n            _this.survey.onCompleting.add(function (_x, _x2) {\n              return (_ref = _ref || _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(result, options) {\n                return _regeneratorRuntime().wrap(function _callee$(_context) {\n                  while (1) switch (_context.prev = _context.next) {\n                    case 0:\n                      options.allowComplete = false;\n                      _context.next = 3;\n                      return axios.post(\"/api/banner/store\", result.data).then(function (response) {\n                        console.log(response.data);\n                        if (response.data) {\n                          Swal.fire({\n                            title: \"Actualizado\",\n                            text: \"El Banner ha sido creado con éxito\",\n                            icon: \"success\"\n                            //  timer: 2000,\n                          }).then(function () {\n                            window.location.href = \"/panel-administracion/banner\";\n                          });\n                        } else {\n                          Swal.fire({\n                            title: \"Error!\",\n                            text: \"No se pudo crear el banner. Por favor intente más tarde.\",\n                            icon: \"error\"\n                            //    timer: 3000,\n                          }).then(function (_) {\n                            location.reload();\n                          });\n                        }\n                      });\n                    case 3:\n                    case \"end\":\n                      return _context.stop();\n                  }\n                }, _callee);\n              }))).apply(this, arguments);\n            });\n          case 2:\n          case \"end\":\n            return _context2.stop();\n        }\n      }, _callee2);\n    }))();\n  }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vYmFubmVyL2NyZWF0ZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmIiwibWFwcGluZ3MiOiI7Ozs7Ozs7OytDQU9BLHFKQUFBQSxtQkFBQSxZQUFBQSxvQkFBQSxXQUFBQyxDQUFBLFNBQUFDLENBQUEsRUFBQUQsQ0FBQSxPQUFBRSxDQUFBLEdBQUFDLE1BQUEsQ0FBQUMsU0FBQSxFQUFBQyxDQUFBLEdBQUFILENBQUEsQ0FBQUksY0FBQSxFQUFBQyxDQUFBLEdBQUFKLE1BQUEsQ0FBQUssY0FBQSxjQUFBUCxDQUFBLEVBQUFELENBQUEsRUFBQUUsQ0FBQSxJQUFBRCxDQUFBLENBQUFELENBQUEsSUFBQUUsQ0FBQSxDQUFBTyxLQUFBLEtBQUFDLENBQUEsd0JBQUFDLE1BQUEsR0FBQUEsTUFBQSxPQUFBQyxDQUFBLEdBQUFGLENBQUEsQ0FBQUcsUUFBQSxrQkFBQUMsQ0FBQSxHQUFBSixDQUFBLENBQUFLLGFBQUEsdUJBQUFDLENBQUEsR0FBQU4sQ0FBQSxDQUFBTyxXQUFBLDhCQUFBQyxPQUFBakIsQ0FBQSxFQUFBRCxDQUFBLEVBQUFFLENBQUEsV0FBQUMsTUFBQSxDQUFBSyxjQUFBLENBQUFQLENBQUEsRUFBQUQsQ0FBQSxJQUFBUyxLQUFBLEVBQUFQLENBQUEsRUFBQWlCLFVBQUEsTUFBQUMsWUFBQSxNQUFBQyxRQUFBLFNBQUFwQixDQUFBLENBQUFELENBQUEsV0FBQWtCLE1BQUEsbUJBQUFqQixDQUFBLElBQUFpQixNQUFBLFlBQUFBLE9BQUFqQixDQUFBLEVBQUFELENBQUEsRUFBQUUsQ0FBQSxXQUFBRCxDQUFBLENBQUFELENBQUEsSUFBQUUsQ0FBQSxnQkFBQW9CLEtB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QUEsV0FBQXVHLENBQUE7NEJBQ0FGLFFBQUEsQ0FBQUcsTUFBQTswQkFDQTt3QkFDQTtzQkFDQTtvQkFBQTtvQkFBQTtzQkFBQSxPQUFBZixRQUFBLENBQUE5QyxJQUFBO2tCQUFBO2dCQUFBLEdBQUEwQyxPQUFBO2NBQUEsQ0FDQSxJQUFBdEIsS0FBQSxPQUFBRCxTQUFBO1lBQUE7VUFBQTtVQUFBO1lBQUEsT0FBQWlCLFNBQUEsQ0FBQXBDLElBQUE7UUFBQTtNQUFBLEdBQUFpQyxRQUFBO0lBQUE7RUFDQTtBQUNBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vYmFubmVyL2NyZWF0ZS52dWU/YjZiOSJdLCJzb3VyY2VzQ29udGVudCI6WyI8dGVtcGxhdGU+XG4gIDxkaXYgdi1pZj1cInN1cnZleVwiPlxuICAgIDxTdXJ2ZXkgOnN1cnZleT1cInN1cnZleVwiPjwvU3VydmV5PlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG4gIFxuICA8c2NyaXB0PlxuaW1wb3J0ICogYXMgU3VydmV5VnVlIGZyb20gXCJzdXJ2ZXktdnVlXCI7XG5jb25zdCBTd2FsID0gcmVxdWlyZShcInN3ZWV0YWxlcnQyXCIpO1xuaW1wb3J0IHsganNvbiB9IGZyb20gXCIuL2Zvcm1cIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBjb21wb25lbnRzOiB7IFN1cnZleTogU3VydmV5VnVlLlN1cnZleSB9LFxuICBkYXRhOiAoKSA9PiAoe1xuICAgIHN1cnZleTogbnVsbCxcbiAgfSksXG5cbiAgYXN5bmMgbW91bnRlZCgpIHtcbiAgICB0aGlzLnN1cnZleSA9IG5ldyBTdXJ2ZXlWdWUuTW9kZWwoanNvbik7XG5cbiAgICB0aGlzLnN1cnZleS5vbkNvbXBsZXRpbmcuYWRkKGFzeW5jIGZ1bmN0aW9uIChyZXN1bHQsIG9wdGlvbnMpIHtcbiAgICAgIG9wdGlvbnMuYWxsb3dDb21wbGV0ZSA9IGZhbHNlO1xuICAgICAgYXdhaXQgYXhpb3NcbiAgICAgICAgLnBvc3QoXCIvYXBpL2Jhbm5lci9zdG9yZVwiLCByZXN1bHQuZGF0YSlcbiAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2cocmVzcG9uc2UuZGF0YSlcbiAgICAgICAgICBpZiAocmVzcG9uc2UuZGF0YSkge1xuICAgICAgICAgICAgU3dhbC5maXJlKHtcbiAgICAgICAgICAgICAgdGl0bGU6IFwiQWN0dWFsaXphZG9cIixcbiAgICAgICAgICAgICAgdGV4dDogXCJFbCBCYW5uZXIgaGEgc2lkbyBjcmVhZG8gY29uIMOpeGl0b1wiLFxuICAgICAgICAgICAgICBpY29uOiBcInN1Y2Nlc3NcIixcbiAgICAgICAgICAgIC8vICB0aW1lcjogMjAwMCxcbiAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9XG4gICAgICAgICAgICAgICAgXCIvcGFuZWwtYWRtaW5pc3RyYWNpb24vYmFubmVyXCI7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgU3dhbC5maXJlKHtcbiAgICAgICAgICAgICAgdGl0bGU6IFwiRXJyb3IhXCIsXG4gICAgICAgICAgICAgIHRleHQ6XG4gICAgICAgICAgICAgICAgXCJObyBzZSBwdWRvIGNyZWFyIGVsIGJhbm5lci4gUG9yIGZhdm9yIGludGVudGUgbcOhcyB0YXJkZS5cIixcbiAgICAgICAgICAgICAgaWNvbjogXCJlcnJvclwiLFxuICAgICAgICAgIC8vICAgIHRpbWVyOiAzMDAwLFxuICAgICAgICAgICAgfSkudGhlbigoXykgPT4ge1xuICAgICAgICAgICAgICBsb2NhdGlvbi5yZWxvYWQoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH0sXG59O1xuPC9zY3JpcHQ+XG4gIFxuICBcbiJdLCJuYW1lcyI6WyJfcmVnZW5lcmF0b3JSdW50aW1lIiwiZSIsInQiLCJyIiwiT2JqZWN0IiwicHJvdG90eXBlIiwibiIsImhhc093blByb3BlcnR5IiwibyIsImRlZmluZVByb3BlcnR5IiwidmFsdWUiLCJpIiwiU3ltYm9sIiwiYSIsIml0ZXJhdG9yIiwiYyIsImFzeW5jSXRlcmF0b3IiLCJ1IiwidG9TdHJpbmdUYWciLCJkZWZpbmUiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJ3cmFwIiwiR2VuZXJhdG9yIiwiY3JlYXRlIiwiQ29udGV4dCIsIm1ha2VJbnZva2VNZXRob2QiLCJ0cnlDYXRjaCIsInR5cGUiLCJhcmciLCJjYWxsIiwiaCIsImwiLCJmIiwicyIsInkiLCJHZW5lcmF0b3JGdW5jdGlvbiIsIkdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlIiwicCIsImQiLCJnZXRQcm90b3R5cGVPZiIsInYiLCJ2YWx1ZXMiLCJnIiwiZGVmaW5lSXRlcmF0b3JNZXRob2RzIiwiZm9yRWFjaCIsIl9pbnZva2UiLCJBc3luY0l0ZXJhdG9yIiwiaW52b2tlIiwiX3R5cGVvZiIsInJlc29sdmUiLCJfX2F3YWl0IiwidGhlbiIsImNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnIiwiRXJyb3IiLCJkb25lIiwibWV0aG9kIiwiZGVsZWdhdGUiLCJtYXliZUludm9rZURlbGVnYXRlIiwic2VudCIsIl9zZW50IiwiZGlzcGF0Y2hFeGNlcHRpb24iLCJhYnJ1cHQiLCJUeXBlRXJyb3IiLCJyZXN1bHROYW1lIiwibmV4dCIsIm5leHRMb2MiLCJwdXNoVHJ5RW50cnkiLCJ0cnlMb2MiLCJjYXRjaExvYyIsImZpbmFsbHlMb2MiLCJhZnRlckxvYyIsInRyeUVudHJpZXMiLCJwdXNoIiwicmVzZXRUcnlFbnRyeSIsImNvbXBsZXRpb24iLCJyZXNldCIsImlzTmFOIiwibGVuZ3RoIiwiZGlzcGxheU5hbWUiLCJpc0dlbmVyYXRvckZ1bmN0aW9uIiwiY29uc3RydWN0b3IiLCJuYW1lIiwibWFyayIsInNldFByb3RvdHlwZU9mIiwiX19wcm90b19fIiwiYXdyYXAiLCJhc3luYyIsIlByb21pc2UiLCJrZXlzIiwicmV2ZXJzZSIsInBvcCIsInByZXYiLCJjaGFyQXQiLCJzbGljZSIsInN0b3AiLCJydmFsIiwiaGFuZGxlIiwiY29tcGxldGUiLCJmaW5pc2giLCJfY2F0Y2giLCJkZWxlZ2F0ZVlpZWxkIiwiYXN5bmNHZW5lcmF0b3JTdGVwIiwiZ2VuIiwicmVqZWN0IiwiX25leHQiLCJfdGhyb3ciLCJrZXkiLCJpbmZvIiwiZXJyb3IiLCJfYXN5bmNUb0dlbmVyYXRvciIsImZuIiwic2VsZiIsImFyZ3MiLCJhcmd1bWVudHMiLCJhcHBseSIsImVyciIsInVuZGVmaW5lZCIsIlN1cnZleVZ1ZSIsIlN3YWwiLCJyZXF1aXJlIiwianNvbiIsImNvbXBvbmVudHMiLCJTdXJ2ZXkiLCJkYXRhIiwic3VydmV5IiwibW91bnRlZCIsIl90aGlzIiwiX2NhbGxlZTIiLCJfcmVmIiwiX2NhbGxlZTIkIiwiX2NvbnRleHQyIiwiTW9kZWwiLCJvbkNvbXBsZXRpbmciLCJhZGQiLCJfeCIsIl94MiIsIl9jYWxsZWUiLCJyZXN1bHQiLCJvcHRpb25zIiwiX2NhbGxlZSQiLCJfY29udGV4dCIsImFsbG93Q29tcGxldGUiLCJheGlvcyIsInBvc3QiLCJyZXNwb25zZSIsImNvbnNvbGUiLCJsb2ciLCJmaXJlIiwidGl0bGUiLCJ0ZXh0IiwiaWNvbiIsIndpbmRvdyIsImxvY2F0aW9uIiwiaHJlZiIsIl8iLCJyZWxvYWQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/banner/create.vue?vue&type=script&lang=js&\n");

/***/ }),

/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/banner/edit.vue?vue&type=script&lang=js&":
/*!************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/banner/edit.vue?vue&type=script&lang=js& ***!
  \************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var survey_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! survey-vue */ \"./node_modules/survey-vue/survey-vue.js\");\n/* harmony import */ var survey_vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(survey_vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _form__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./form */ \"./resources/js/components/admin/banner/form.js\");\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = \"function\" == typeof Symbol ? Symbol : {}, a = i.iterator || \"@@iterator\", c = i.asyncIterator || \"@@asyncIterator\", u = i.toStringTag || \"@@toStringTag\"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, \"\"); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, \"_invoke\", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: \"normal\", arg: t.call(e, r) }; } catch (t) { return { type: \"throw\", arg: t }; } } e.wrap = wrap; var h = \"suspendedStart\", l = \"suspendedYield\", f = \"executing\", s = \"completed\", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { [\"next\", \"throw\", \"return\"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if (\"throw\" !== c.type) { var u = c.arg, h = u.value; return h && \"object\" == _typeof(h) && n.call(h, \"__await\") ? e.resolve(h.__await).then(function (t) { invoke(\"next\", t, i, a); }, function (t) { invoke(\"throw\", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke(\"throw\", t, i, a); }); } a(c.arg); } var r; o(this, \"_invoke\", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error(\"Generator is already running\"); if (o === s) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = f; var p = tryCatch(e, r, n); if (\"normal\" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } \"throw\" === p.type && (o = s, n.method = \"throw\", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, \"throw\" === n && e.iterator[\"return\"] && (r.method = \"return\", r.arg = t, maybeInvokeDelegate(e, r), \"throw\" === r.method) || \"return\" !== n && (r.method = \"throw\", r.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), y; var i = tryCatch(o, e.iterator, r.arg); if (\"throw\" === i.type) return r.method = \"throw\", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, \"return\" !== r.method && (r.method = \"next\", r.arg = t), r.delegate = null, y) : a : (r.method = \"throw\", r.arg = new TypeError(\"iterator result is not an object\"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = \"normal\", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: \"root\" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || \"\" === e) { var r = e[a]; if (r) return r.call(e); if (\"function\" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, \"constructor\", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, \"constructor\", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), e.isGeneratorFunction = function (t) { var e = \"function\" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || \"GeneratorFunction\" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, \"GeneratorFunction\")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, \"Generator\"), define(g, a, function () { return this; }), define(g, \"toString\", function () { return \"[object Generator]\"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) \"t\" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = \"throw\", a.arg = e, r.next = n, o && (r.method = \"next\", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if (\"root\" === i.tryLoc) return handle(\"end\"); if (i.tryLoc <= this.prev) { var c = n.call(i, \"catchLoc\"), u = n.call(i, \"finallyLoc\"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error(\"try statement without catch or finally\"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, \"finallyLoc\") && this.prev < o.finallyLoc) { var i = o; break; } } i && (\"break\" === t || \"continue\" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = \"next\", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, \"catch\": function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if (\"throw\" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, \"next\" === this.method && (this.arg = t), y; } }, e; }\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nvar Swal = __webpack_require__(/*! sweetalert2 */ \"./node_modules/sweetalert2/dist/sweetalert2.all.js\");\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n  components: {\n    Survey: survey_vue__WEBPACK_IMPORTED_MODULE_0__.Survey\n  },\n  data: function data() {\n    return {\n      survey: null,\n      data: null\n    };\n  },\n  mounted: function mounted() {\n    var _this = this;\n    return _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {\n      var _ref;\n      var self;\n      return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n        while (1) switch (_context2.prev = _context2.next) {\n          case 0:\n            self = _this;\n            _context2.next = 3;\n            return axios.get(\"/api/banner/edit/\" + _this.$route.params.id, {\n              headers: {\n                Authorization: AT,\n                Accept: \"application/json\"\n              }\n            }).then(function (response) {\n              _this.data = response.data;\n            });\n          case 3:\n            _this.survey = new survey_vue__WEBPACK_IMPORTED_MODULE_0__.Model(_form__WEBPACK_IMPORTED_MODULE_1__.json);\n            _this.survey.onCompleting.add(function (_x, _x2) {\n              return (_ref = _ref || _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(result, options) {\n                return _regeneratorRuntime().wrap(function _callee$(_context) {\n                  while (1) switch (_context.prev = _context.next) {\n                    case 0:\n                      options.allowComplete = false;\n                      _context.next = 3;\n                      return axios.post(\"/api/banner/update/\" + self.$route.params.id, result.data).then(function (response) {\n                        console.log(response.data);\n                        if (response.data) {\n                          Swal.fire({\n                            title: \"Actualizado\",\n                            text: \"El Banner ha sido actualizado con éxito\",\n                            icon: \"success\"\n                            //  timer: 2000,\n                          }).then(function () {\n                            window.location.href = \"/panel-administracion/banner\";\n                          });\n                        } else {\n                          Swal.fire({\n                            title: \"Error!\",\n                            text: \"No se pudo actualizar el banner. Por favor intente más tarde.\",\n                            icon: \"error\"\n                            //    timer: 3000,\n                          }).then(function (_) {\n                            location.reload();\n                          });\n                        }\n                      });\n                    case 3:\n                    case \"end\":\n                      return _context.stop();\n                  }\n                }, _callee);\n              }))).apply(this, arguments);\n            });\n            _this.survey.data = self.data;\n          case 6:\n          case \"end\":\n            return _context2.stop();\n        }\n      }, _callee2);\n    }))();\n  }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vYmFubmVyL2VkaXQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJiIsIm1hcHBpbmdzIjoiOzs7Ozs7OzsrQ0FPQSxxSkFBQUEsbUJBQUEsWUFBQUEsb0JBQUEsV0FBQUMsQ0FBQSxTQUFBQyxDQUFBLEVBQUFELENBQUEsT0FBQUUsQ0FBQSxHQUFBQyxNQUFBLENBQUFDLFNBQUEsRUFBQUMsQ0FBQSxHQUFBSCxDQUFBLENBQUFJLGNBQUEsRUFBQUMsQ0FBQSxHQUFBSixNQUFBLENBQUFLLGNBQUEsY0FBQVAsQ0FBQSxFQUFBRCxDQUFBLEVBQUFFLENBQUEsSUFBQUQsQ0FBQSxDQUFBRCxDQUFBLElBQUFFLENBQUEsQ0FBQU8sS0FBQSxLQUFBQyxDQUFBLHdCQUFBQyxNQUFBLEdBQUFBLE1BQUEsT0FBQUMsQ0FBQSxHQUFBRixDQUFBLENBQUFHLFFBQUEsa0JBQUFDLENBQUEsR0FBQUosQ0FBQSxDQUFBSyxhQUFBLHVCQUFBQyxDQUFBLEdBQUFOLENBQUEsQ0FBQU8sV0FBQSw4QkFBQUMsT0FBQWpCLENBQUEsRUFBQUQsQ0FBQSxFQUFBRSxDQUFBLFdBQUFDLE1BQUEsQ0FBQUssY0FBQSxDQUFBUCxDQUFBLEVBQUFELENBQUEsSUFBQVMsS0FBQSxFQUFBUCxDQUFBLEVBQUFpQixVQUFBLE1BQUFDLFlBQUEsTUFBQUMsUUFBQSxTQUFBcEIsQ0FBQSxDQUFBRCxDQUFBLFdBQUFrQixNQUFBLG1CQUFBakIsQ0FBQSxJQUFBaUIsTUFBQSxZQUFBQSxPQUFBakIsQ0FBQSxFQUFBRCxDQUFBLEVBQUFFLENBQUEsV0FBQUQsQ0FBQSxDQUFBRCxDQUFBLElBQUFFLENBQUEsZ0JBQUFvQixLQUFB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QixJQUFBLEVBQ0F4RSxJQUFBLFdBQUF5RixRQUFBO3dCQUNBYSxPQUFBLENBQUFDLEdBQUEsQ0FBQWQsUUFBQSxDQUFBakIsSUFBQTt3QkFDQSxJQUFBaUIsUUFBQSxDQUFBakIsSUFBQTswQkFDQUwsSUFBQSxDQUFBcUMsSUFBQTs0QkFDQUMsS0FBQTs0QkFDQUMsSUFBQTs0QkFDQUMsSUFBQTs0QkFDQTswQkFDQSxHQUFBM0csSUFBQTs0QkFDQTRHLE1BQUEsQ0FBQUMsUUFBQSxDQUFBQyxJQUFBOzBCQUNBO3dCQUNBOzBCQUNBM0MsSUFBQSxDQUFBcUMsSUFBQTs0QkFDQUMsS0FBQTs0QkFDQUMsSUFBQTs0QkFDQUMsSUFBQTs0QkFDQTswQkFDQSxHQUFBM0csSUFBQSxXQUFBK0csQ0FBQTs0QkFDQUYsUUFBQSxDQUFBRyxNQUFBOzBCQUNBO3dCQUNBO3NCQUNBO29CQUFBO29CQUFBO3NCQUFBLE9BQUFiLFFBQUEsQ0FBQXhELElBQUE7a0JBQUE7Z0JBQUEsR0FBQW9ELE9BQUE7Y0FBQSxDQUNBLElBQUFoQyxLQUFBLE9BQUFELFNBQUE7WUFBQTtZQUNBYSxLQUFBLENBQUFGLE1BQUEsQ0FBQUQsSUFBQSxHQUFBWixJQUFBLENBQUFZLElBQUE7VUFBQTtVQUFBO1lBQUEsT0FBQU8sU0FBQSxDQUFBcEMsSUFBQTtRQUFBO01BQUEsR0FBQWlDLFFBQUE7SUFBQTtFQUNBO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9iYW5uZXIvZWRpdC52dWU/ZDVlZiJdLCJzb3VyY2VzQ29udGVudCI6WyI8dGVtcGxhdGU+XG4gIDxkaXYgdi1pZj1cInN1cnZleVwiPlxuICAgIDxTdXJ2ZXkgOnN1cnZleT1cInN1cnZleVwiPjwvU3VydmV5PlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG4gICAgXG4gICAgPHNjcmlwdD5cbmltcG9ydCAqIGFzIFN1cnZleVZ1ZSBmcm9tIFwic3VydmV5LXZ1ZVwiO1xuY29uc3QgU3dhbCA9IHJlcXVpcmUoXCJzd2VldGFsZXJ0MlwiKTtcbmltcG9ydCB7IGpzb24gfSBmcm9tIFwiLi9mb3JtXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29tcG9uZW50czogeyBTdXJ2ZXk6IFN1cnZleVZ1ZS5TdXJ2ZXkgfSxcbiAgZGF0YTogKCkgPT4gKHtcbiAgICBzdXJ2ZXk6IG51bGwsXG4gICAgZGF0YTogbnVsbCxcbiAgfSksXG5cbiAgYXN5bmMgbW91bnRlZCgpIHtcbiAgICBsZXQgc2VsZiA9IHRoaXM7XG4gICAgYXdhaXQgYXhpb3NcbiAgICAgIC5nZXQoXCIvYXBpL2Jhbm5lci9lZGl0L1wiICsgdGhpcy4kcm91dGUucGFyYW1zLmlkLCB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBBdXRob3JpemF0aW9uOiBBVCxcbiAgICAgICAgICBBY2NlcHQ6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICB0aGlzLmRhdGEgPSByZXNwb25zZS5kYXRhO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLnN1cnZleSA9IG5ldyBTdXJ2ZXlWdWUuTW9kZWwoanNvbik7XG5cbiAgICB0aGlzLnN1cnZleS5vbkNvbXBsZXRpbmcuYWRkKGFzeW5jIGZ1bmN0aW9uIChyZXN1bHQsIG9wdGlvbnMpIHtcbiAgICAgIG9wdGlvbnMuYWxsb3dDb21wbGV0ZSA9IGZhbHNlO1xuICAgICAgYXdhaXQgYXhpb3NcbiAgICAgICAgLnBvc3QoXCIvYXBpL2Jhbm5lci91cGRhdGUvXCIgKyBzZWxmLiRyb3V0ZS5wYXJhbXMuaWQsIHJlc3VsdC5kYXRhKVxuICAgICAgICAudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlLmRhdGEpXG4gICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEpIHtcbiAgICAgICAgICAgIFN3YWwuZmlyZSh7XG4gICAgICAgICAgICAgIHRpdGxlOiBcIkFjdHVhbGl6YWRvXCIsXG4gICAgICAgICAgICAgIHRleHQ6IFwiRWwgQmFubmVyIGhhIHNpZG8gYWN0dWFsaXphZG8gY29uIMOpeGl0b1wiLFxuICAgICAgICAgICAgICBpY29uOiBcInN1Y2Nlc3NcIixcbiAgICAgICAgICAgICAgLy8gIHRpbWVyOiAyMDAwLFxuICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gXCIvcGFuZWwtYWRtaW5pc3RyYWNpb24vYmFubmVyXCI7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgU3dhbC5maXJlKHtcbiAgICAgICAgICAgICAgdGl0bGU6IFwiRXJyb3IhXCIsXG4gICAgICAgICAgICAgIHRleHQ6IFwiTm8gc2UgcHVkbyBhY3R1YWxpemFyIGVsIGJhbm5lci4gUG9yIGZhdm9yIGludGVudGUgbcOhcyB0YXJkZS5cIixcbiAgICAgICAgICAgICAgaWNvbjogXCJlcnJvclwiLFxuICAgICAgICAgICAgICAvLyAgICB0aW1lcjogMzAwMCxcbiAgICAgICAgICAgIH0pLnRoZW4oKF8pID0+IHtcbiAgICAgICAgICAgICAgbG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIHRoaXMuc3VydmV5LmRhdGEgPSBzZWxmLmRhdGE7XG4gIH0sXG59O1xuPC9zY3JpcHQ+Il0sIm5hbWVzIjpbIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJlIiwidCIsInIiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJuIiwiaGFzT3duUHJvcGVydHkiLCJvIiwiZGVmaW5lUHJvcGVydHkiLCJ2YWx1ZSIsImkiLCJTeW1ib2wiLCJhIiwiaXRlcmF0b3IiLCJjIiwiYXN5bmNJdGVyYXRvciIsInUiLCJ0b1N0cmluZ1RhZyIsImRlZmluZSIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsIndyYXAiLCJHZW5lcmF0b3IiLCJjcmVhdGUiLCJDb250ZXh0IiwibWFrZUludm9rZU1ldGhvZCIsInRyeUNhdGNoIiwidHlwZSIsImFyZyIsImNhbGwiLCJoIiwibCIsImYiLCJzIiwieSIsIkdlbmVyYXRvckZ1bmN0aW9uIiwiR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUiLCJwIiwiZCIsImdldFByb3RvdHlwZU9mIiwidiIsInZhbHVlcyIsImciLCJkZWZpbmVJdGVyYXRvck1ldGhvZHMiLCJmb3JFYWNoIiwiX2ludm9rZSIsIkFzeW5jSXRlcmF0b3IiLCJpbnZva2UiLCJfdHlwZW9mIiwicmVzb2x2ZSIsIl9fYXdhaXQiLCJ0aGVuIiwiY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmciLCJFcnJvciIsImRvbmUiLCJtZXRob2QiLCJkZWxlZ2F0ZSIsIm1heWJlSW52b2tlRGVsZWdhdGUiLCJzZW50IiwiX3NlbnQiLCJkaXNwYXRjaEV4Y2VwdGlvbiIsImFicnVwdCIsIlR5cGVFcnJvciIsInJlc3VsdE5hbWUiLCJuZXh0IiwibmV4dExvYyIsInB1c2hUcnlFbnRyeSIsInRyeUxvYyIsImNhdGNoTG9jIiwiZmluYWxseUxvYyIsImFmdGVyTG9jIiwidHJ5RW50cmllcyIsInB1c2giLCJyZXNldFRyeUVudHJ5IiwiY29tcGxldGlvbiIsInJlc2V0IiwiaXNOYU4iLCJsZW5ndGgiLCJkaXNwbGF5TmFtZSIsImlzR2VuZXJhdG9yRnVuY3Rpb24iLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJtYXJrIiwic2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJhd3JhcCIsImFzeW5jIiwiUHJvbWlzZSIsImtleXMiLCJyZXZlcnNlIiwicG9wIiwicHJldiIsImNoYXJBdCIsInNsaWNlIiwic3RvcCIsInJ2YWwiLCJoYW5kbGUiLCJjb21wbGV0ZSIsImZpbmlzaCIsIl9jYXRjaCIsImRlbGVnYXRlWWllbGQiLCJhc3luY0dlbmVyYXRvclN0ZXAiLCJnZW4iLCJyZWplY3QiLCJfbmV4dCIsIl90aHJvdyIsImtleSIsImluZm8iLCJlcnJvciIsIl9hc3luY1RvR2VuZXJhdG9yIiwiZm4iLCJzZWxmIiwiYXJncyIsImFyZ3VtZW50cyIsImFwcGx5IiwiZXJyIiwidW5kZWZpbmVkIiwiU3VydmV5VnVlIiwiU3dhbCIsInJlcXVpcmUiLCJqc29uIiwiY29tcG9uZW50cyIsIlN1cnZleSIsImRhdGEiLCJzdXJ2ZXkiLCJtb3VudGVkIiwiX3RoaXMiLCJfY2FsbGVlMiIsIl9yZWYiLCJfY2FsbGVlMiQiLCJfY29udGV4dDIiLCJheGlvcyIsImdldCIsIiRyb3V0ZSIsInBhcmFtcyIsImlkIiwiaGVhZGVycyIsIkF1dGhvcml6YXRpb24iLCJBVCIsIkFjY2VwdCIsInJlc3BvbnNlIiwiTW9kZWwiLCJvbkNvbXBsZXRpbmciLCJhZGQiLCJfeCIsIl94MiIsIl9jYWxsZWUiLCJyZXN1bHQiLCJvcHRpb25zIiwiX2NhbGxlZSQiLCJfY29udGV4dCIsImFsbG93Q29tcGxldGUiLCJwb3N0IiwiY29uc29sZSIsImxvZyIsImZpcmUiLCJ0aXRsZSIsInRleHQiLCJpY29uIiwid2luZG93IiwibG9jYXRpb24iLCJocmVmIiwiXyIsInJlbG9hZCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/banner/edit.vue?vue&type=script&lang=js&\n");

/***/ }),

/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/banner/index.vue?vue&type=script&lang=js&":
/*!*************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/banner/index.vue?vue&type=script&lang=js& ***!
  \*************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nvar Swal = __webpack_require__(/*! sweetalert2 */ \"./node_modules/sweetalert2/dist/sweetalert2.all.js\");\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n  data: function data() {\n    return {\n      data: null,\n      search: \"\",\n      headers: [{\n        text: \"Titulo\",\n        value: \"title\"\n      }, {\n        text: \"Banner\",\n        value: \"image\"\n      }, {\n        text: \"Pagina\",\n        value: \"name\"\n      }, {\n        text: \"Acciones\",\n        value: \"actions\",\n        sortable: false\n      }]\n    };\n  },\n  mounted: function mounted() {\n    this.loadData();\n  },\n  methods: {\n    loadData: function loadData() {\n      var _this = this;\n      axios.get(\"/api/banner/index\").then(function (response) {\n        _this.data = response.data;\n      });\n    },\n    edit: function edit(id) {\n      window.location.href = \"/panel-administracion/banner/\" + id + \"/editar\";\n    },\n    trash: function trash(id, name) {\n      var _this2 = this;\n      Swal.fire({\n        title: \"Confirmación\",\n        html: \"<p margin-bottom: 10px;\\\">\\n                \\xBFEst\\xE1s seguro de que deseas eliminar el banner <b>\\\"\".concat(name, \"\\\"</b>?</p>\\n                    <p style=\\\"font-size: 0.7em;\\\">\\n                        Si lo eliminas, no podr\\xE1s recuperarlo.\\n                    </p>\"),\n        icon: \"warning\",\n        showCancelButton: true,\n        confirmButtonColor: \"#3085d6\",\n        cancelButtonColor: \"#d33\",\n        confirmButtonText: \"Sí, eliminar\",\n        cancelButtonText: \"Cancelar\"\n      }).then(function (result) {\n        if (result.isConfirmed) {\n          axios[\"delete\"](\"/api/banner/delete/\" + id, {\n            headers: {\n              Authorization: AT,\n              Accept: \"application/json\"\n            }\n          }).then(function (response) {\n            Swal.fire({\n              title: \"Eliminado\",\n              text: \"Se ha eliminado el banner con éxito.\",\n              icon: \"success\",\n              timer: 2000\n            }).then(function (_) {});\n            _this2.loadData();\n          });\n        }\n      });\n    }\n  }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vYmFubmVyL2luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYiLCJtYXBwaW5ncyI6Ijs7OztBQWdEQSxJQUFBQSxJQUFBLEdBQUFDLG1CQUFBO0FBQ0EsaUVBQWU7RUFDZkMsSUFBQSxXQUFBQSxLQUFBO0lBQ0E7TUFDQUEsSUFBQTtNQUNBQyxNQUFBO01BQ0FDLE9BQUEsR0FDQTtRQUFBQyxJQUFBO1FBQUFDLEtBQUE7TUFBQSxHQUNBO1FBQUFELElBQUE7UUFBQUMsS0FBQTtNQUFBLEdBQ0E7UUFBQUQsSUFBQTtRQUFBQyxLQUFBO01BQUEsR0FDQTtRQUFBRCxJQUFBO1FBQUFDLEtBQUE7UUFBQUMsUUFBQTtNQUFBO0lBRUE7RUFDQTtFQUNBQyxPQUFBLFdBQUFBLFFBQUE7SUFDQSxLQUFBQyxRQUFBO0VBQ0E7RUFDQUMsT0FBQTtJQUNBRCxRQUFBLFdBQUFBLFNBQUE7TUFBQSxJQUFBRSxLQUFBO01BQ0FDLEtBQUEsQ0FBQUMsR0FBQSxzQkFBQUMsSUFBQSxXQUFBQyxRQUFBO1FBQ0FKLEtBQUEsQ0FBQVQsSUFBQSxHQUFBYSxRQUFBLENBQUFiLElBQUE7TUFDQTtJQUNBO0lBQ0FjLElBQUEsV0FBQUEsS0FBQUMsRUFBQTtNQUNBQyxNQUFBLENBQUFDLFFBQUEsQ0FBQUMsSUFBQSxxQ0FBQUgsRUFBQTtJQUNBO0lBQ0FJLEtBQUEsV0FBQUEsTUFBQUosRUFBQSxFQUFBSyxJQUFBO01BQUEsSUFBQUMsTUFBQTtNQUNBdkIsSUFBQSxDQUFBd0IsSUFBQTtRQUNBQyxLQUFBO1FBQ0FDLElBQUEsMkdBQUFDLE1BQUEsQ0FDQUwsSUFBQSxrS0FHQTtRQUNBTSxJQUFBO1FBQ0FDLGdCQUFBO1FBQ0FDLGtCQUFBO1FBQ0FDLGlCQUFBO1FBQ0FDLGlCQUFBO1FBQ0FDLGdCQUFBO01BQ0EsR0FBQW5CLElBQUEsV0FBQW9CLE1BQUE7UUFDQSxJQUFBQSxNQUFBLENBQUFDLFdBQUE7VUFDQXZCLEtBQUEsVUFDQSx5QkFBQUssRUFBQTtZQUNBYixPQUFBO2NBQ0FnQyxhQUFBLEVBQUFDLEVBQUE7Y0FDQUMsTUFBQTtZQUNBO1VBQ0EsR0FDQXhCLElBQUEsV0FBQUMsUUFBQTtZQUNBZixJQUFBLENBQUF3QixJQUFBO2NBQ0FDLEtBQUE7Y0FDQXBCLElBQUE7Y0FDQXVCLElBQUE7Y0FDQVcsS0FBQTtZQUNBLEdBQUF6QixJQUFBLFdBQUEwQixDQUFBO1lBQ0FqQixNQUFBLENBQUFkLFFBQUE7VUFDQTtRQUNBO01BQ0E7SUFDQTtFQUNBO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9iYW5uZXIvaW5kZXgudnVlP2NhZTYiXSwic291cmNlc0NvbnRlbnQiOlsiPHRlbXBsYXRlPlxuICA8di1hcHA+XG4gICAgPHYtY2FyZCB2LWlmPVwiZGF0YVwiPlxuICAgICAgPHYtY2FyZC10aXRsZT5cbiAgICAgICAgQWRtaW5pc3RyYWNpw7NuIGRlIEJhbm5lcnNcbiAgICAgICAgPHYtc3BhY2VyPjwvdi1zcGFjZXI+XG4gICAgICAgIDx2LXRleHQtZmllbGRcbiAgICAgICAgICB2LW1vZGVsPVwic2VhcmNoXCJcbiAgICAgICAgICBhcHBlbmQtaWNvbj1cIm1kaS1tYWduaWZ5XCJcbiAgICAgICAgICBsYWJlbD1cIkJ1c2NhclwiXG4gICAgICAgICAgc2luZ2xlLWxpbmVcbiAgICAgICAgICBoaWRlLWRldGFpbHNcbiAgICAgICAgPjwvdi10ZXh0LWZpZWxkPlxuICAgICAgPC92LWNhcmQtdGl0bGU+XG4gICAgICA8di1kYXRhLXRhYmxlXG4gICAgICAgIDpoZWFkZXJzPVwiaGVhZGVyc1wiXG4gICAgICAgIDppdGVtcz1cImRhdGFcIlxuICAgICAgICBjbGFzcz1cImVsZXZhdGlvbi0xXCJcbiAgICAgICAgOnNlYXJjaD1cInNlYXJjaFwiXG4gICAgICA+XG4gICAgICAgIDx0ZW1wbGF0ZSB2LXNsb3Q6aXRlbS5pbWFnZT1cInsgaXRlbSB9XCI+XG4gICAgICAgICAgPHYtaW1nXG4gICAgICAgICAgICBtYXgtaGVpZ2h0PVwiNTFcIlxuICAgICAgICAgICAgbWF4LXdpZHRoPVwiOTBcIlxuICAgICAgICAgICAgY29udGFpblxuICAgICAgICAgICAgOnNyYz1cIml0ZW0uaW1hZ2VuXCJcbiAgICAgICAgICA+PC92LWltZ1xuICAgICAgICA+PC90ZW1wbGF0ZT5cbiAgICAgICAgPHRlbXBsYXRlIHYtc2xvdDppdGVtLmFjdGlvbnM9XCJ7IGl0ZW0gfVwiPlxuICAgICAgICAgIDx2LWJ0biBjb2xvcj1cInByaW1hcnlcIiBmYWIgeC1zbWFsbCBkYXJrIEBjbGljaz1cImVkaXQoaXRlbS5pZClcIj5cbiAgICAgICAgICAgIDx2LWljb24+IG1kaS1wZW5jaWwgPC92LWljb24+XG4gICAgICAgICAgPC92LWJ0bj5cbiAgICAgICAgICA8di1idG5cbiAgICAgICAgICAgIGNvbG9yPVwid2FybmluZ1wiXG4gICAgICAgICAgICBmYWJcbiAgICAgICAgICAgIHgtc21hbGxcbiAgICAgICAgICAgIGRhcmtcbiAgICAgICAgICAgIEBjbGljaz1cInRyYXNoKGl0ZW0uaWQsIGl0ZW0udGl0bGUpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8di1pY29uPiBtZGktZGVsZXRlIDwvdi1pY29uPlxuICAgICAgICAgIDwvdi1idG4+XG4gICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICA8L3YtZGF0YS10YWJsZT5cbiAgICA8L3YtY2FyZD5cbiAgPC92LWFwcD5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5jb25zdCBTd2FsID0gcmVxdWlyZShcInN3ZWV0YWxlcnQyXCIpO1xuZXhwb3J0IGRlZmF1bHQge1xuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBkYXRhOiBudWxsLFxuICAgICAgc2VhcmNoOiBcIlwiLFxuICAgICAgaGVhZGVyczogW1xuICAgICAgICB7IHRleHQ6IFwiVGl0dWxvXCIsIHZhbHVlOiBcInRpdGxlXCIgfSxcbiAgICAgICAgeyB0ZXh0OiBcIkJhbm5lclwiLCB2YWx1ZTogXCJpbWFnZVwiIH0sXG4gICAgICAgIHsgdGV4dDogXCJQYWdpbmFcIiwgdmFsdWU6IFwibmFtZVwiIH0sXG4gICAgICAgIHsgdGV4dDogXCJBY2Npb25lc1wiLCB2YWx1ZTogXCJhY3Rpb25zXCIsIHNvcnRhYmxlOiBmYWxzZSB9LFxuICAgICAgXSxcbiAgICB9O1xuICB9LFxuICBtb3VudGVkKCkge1xuICAgIHRoaXMubG9hZERhdGEoKTtcbiAgfSxcbiAgbWV0aG9kczoge1xuICAgIGxvYWREYXRhKCkge1xuICAgICAgYXhpb3MuZ2V0KFwiL2FwaS9iYW5uZXIvaW5kZXhcIikudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgdGhpcy5kYXRhID0gcmVzcG9uc2UuZGF0YTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgZWRpdChpZCkge1xuICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBcIi9wYW5lbC1hZG1pbmlzdHJhY2lvbi9iYW5uZXIvXCIgKyBpZCArIFwiL2VkaXRhclwiO1xuICAgIH0sXG4gICAgdHJhc2goaWQsIG5hbWUpIHtcbiAgICAgIFN3YWwuZmlyZSh7XG4gICAgICAgIHRpdGxlOiBcIkNvbmZpcm1hY2nDs25cIixcbiAgICAgICAgaHRtbDogYDxwIG1hcmdpbi1ib3R0b206IDEwcHg7XCI+XG4gICAgICAgICAgICAgICAgwr9Fc3TDoXMgc2VndXJvIGRlIHF1ZSBkZXNlYXMgZWxpbWluYXIgZWwgYmFubmVyIDxiPlwiJHtuYW1lfVwiPC9iPj88L3A+XG4gICAgICAgICAgICAgICAgICAgIDxwIHN0eWxlPVwiZm9udC1zaXplOiAwLjdlbTtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIFNpIGxvIGVsaW1pbmFzLCBubyBwb2Ryw6FzIHJlY3VwZXJhcmxvLlxuICAgICAgICAgICAgICAgICAgICA8L3A+YCxcbiAgICAgICAgaWNvbjogXCJ3YXJuaW5nXCIsXG4gICAgICAgIHNob3dDYW5jZWxCdXR0b246IHRydWUsXG4gICAgICAgIGNvbmZpcm1CdXR0b25Db2xvcjogXCIjMzA4NWQ2XCIsXG4gICAgICAgIGNhbmNlbEJ1dHRvbkNvbG9yOiBcIiNkMzNcIixcbiAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6IFwiU8OtLCBlbGltaW5hclwiLFxuICAgICAgICBjYW5jZWxCdXR0b25UZXh0OiBcIkNhbmNlbGFyXCIsXG4gICAgICB9KS50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdC5pc0NvbmZpcm1lZCkge1xuICAgICAgICAgIGF4aW9zXG4gICAgICAgICAgICAuZGVsZXRlKFwiL2FwaS9iYW5uZXIvZGVsZXRlL1wiICsgaWQsIHtcbiAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgIEF1dGhvcml6YXRpb246IEFULFxuICAgICAgICAgICAgICAgIEFjY2VwdDogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgIFN3YWwuZmlyZSh7XG4gICAgICAgICAgICAgICAgdGl0bGU6IFwiRWxpbWluYWRvXCIsXG4gICAgICAgICAgICAgICAgdGV4dDogXCJTZSBoYSBlbGltaW5hZG8gZWwgYmFubmVyIGNvbiDDqXhpdG8uXCIsXG4gICAgICAgICAgICAgICAgaWNvbjogXCJzdWNjZXNzXCIsXG4gICAgICAgICAgICAgICAgdGltZXI6IDIwMDAsXG4gICAgICAgICAgICAgIH0pLnRoZW4oKF8pID0+IHt9KTtcbiAgICAgICAgICAgICAgdGhpcy5sb2FkRGF0YSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sXG4gIH0sXG59O1xuPC9zY3JpcHQ+XG4iXSwibmFtZXMiOlsiU3dhbCIsInJlcXVpcmUiLCJkYXRhIiwic2VhcmNoIiwiaGVhZGVycyIsInRleHQiLCJ2YWx1ZSIsInNvcnRhYmxlIiwibW91bnRlZCIsImxvYWREYXRhIiwibWV0aG9kcyIsIl90aGlzIiwiYXhpb3MiLCJnZXQiLCJ0aGVuIiwicmVzcG9uc2UiLCJlZGl0IiwiaWQiLCJ3aW5kb3ciLCJsb2NhdGlvbiIsImhyZWYiLCJ0cmFzaCIsIm5hbWUiLCJfdGhpczIiLCJmaXJlIiwidGl0bGUiLCJodG1sIiwiY29uY2F0IiwiaWNvbiIsInNob3dDYW5jZWxCdXR0b24iLCJjb25maXJtQnV0dG9uQ29sb3IiLCJjYW5jZWxCdXR0b25Db2xvciIsImNvbmZpcm1CdXR0b25UZXh0IiwiY2FuY2VsQnV0dG9uVGV4dCIsInJlc3VsdCIsImlzQ29uZmlybWVkIiwiQXV0aG9yaXphdGlvbiIsIkFUIiwiQWNjZXB0IiwidGltZXIiLCJfIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/banner/index.vue?vue&type=script&lang=js&\n");

/***/ }),

/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/conference/create.vue?vue&type=script&lang=js&":
/*!******************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/conference/create.vue?vue&type=script&lang=js& ***!
  \******************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var survey_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! survey-vue */ \"./node_modules/survey-vue/survey-vue.js\");\n/* harmony import */ var survey_vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(survey_vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _form__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./form */ \"./resources/js/components/admin/conference/form.js\");\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = \"function\" == typeof Symbol ? Symbol : {}, a = i.iterator || \"@@iterator\", c = i.asyncIterator || \"@@asyncIterator\", u = i.toStringTag || \"@@toStringTag\"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, \"\"); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, \"_invoke\", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: \"normal\", arg: t.call(e, r) }; } catch (t) { return { type: \"throw\", arg: t }; } } e.wrap = wrap; var h = \"suspendedStart\", l = \"suspendedYield\", f = \"executing\", s = \"completed\", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { [\"next\", \"throw\", \"return\"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if (\"throw\" !== c.type) { var u = c.arg, h = u.value; return h && \"object\" == _typeof(h) && n.call(h, \"__await\") ? e.resolve(h.__await).then(function (t) { invoke(\"next\", t, i, a); }, function (t) { invoke(\"throw\", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke(\"throw\", t, i, a); }); } a(c.arg); } var r; o(this, \"_invoke\", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error(\"Generator is already running\"); if (o === s) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = f; var p = tryCatch(e, r, n); if (\"normal\" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } \"throw\" === p.type && (o = s, n.method = \"throw\", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, \"throw\" === n && e.iterator[\"return\"] && (r.method = \"return\", r.arg = t, maybeInvokeDelegate(e, r), \"throw\" === r.method) || \"return\" !== n && (r.method = \"throw\", r.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), y; var i = tryCatch(o, e.iterator, r.arg); if (\"throw\" === i.type) return r.method = \"throw\", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, \"return\" !== r.method && (r.method = \"next\", r.arg = t), r.delegate = null, y) : a : (r.method = \"throw\", r.arg = new TypeError(\"iterator result is not an object\"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = \"normal\", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: \"root\" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || \"\" === e) { var r = e[a]; if (r) return r.call(e); if (\"function\" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, \"constructor\", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, \"constructor\", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), e.isGeneratorFunction = function (t) { var e = \"function\" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || \"GeneratorFunction\" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, \"GeneratorFunction\")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, \"Generator\"), define(g, a, function () { return this; }), define(g, \"toString\", function () { return \"[object Generator]\"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) \"t\" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = \"throw\", a.arg = e, r.next = n, o && (r.method = \"next\", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if (\"root\" === i.tryLoc) return handle(\"end\"); if (i.tryLoc <= this.prev) { var c = n.call(i, \"catchLoc\"), u = n.call(i, \"finallyLoc\"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error(\"try statement without catch or finally\"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, \"finallyLoc\") && this.prev < o.finallyLoc) { var i = o; break; } } i && (\"break\" === t || \"continue\" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = \"next\", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, \"catch\": function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if (\"throw\" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, \"next\" === this.method && (this.arg = t), y; } }, e; }\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nvar Swal = __webpack_require__(/*! sweetalert2 */ \"./node_modules/sweetalert2/dist/sweetalert2.all.js\");\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n  components: {\n    Survey: survey_vue__WEBPACK_IMPORTED_MODULE_0__.Survey\n  },\n  data: function data() {\n    return {\n      survey: null\n    };\n  },\n  mounted: function mounted() {\n    var _this = this;\n    return _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {\n      var _ref;\n      return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n        while (1) switch (_context2.prev = _context2.next) {\n          case 0:\n            _this.survey = new survey_vue__WEBPACK_IMPORTED_MODULE_0__.Model(_form__WEBPACK_IMPORTED_MODULE_1__.json);\n            _this.survey.onCompleting.add(function (_x, _x2) {\n              return (_ref = _ref || _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(result, options) {\n                return _regeneratorRuntime().wrap(function _callee$(_context) {\n                  while (1) switch (_context.prev = _context.next) {\n                    case 0:\n                      options.allowComplete = false;\n                      _context.next = 3;\n                      return axios.post(\"/api/conference/store\", result.data).then(function (response) {\n                        console.log(response.data);\n                        if (response.data) {\n                          Swal.fire({\n                            title: \"Actualizado\",\n                            text: \"El Congreso ha sido creado con éxito\",\n                            icon: \"success\"\n                            //  timer: 2000,\n                          }).then(function () {\n                            window.location.href = \"/panel-administracion/congresos\";\n                          });\n                        } else {\n                          Swal.fire({\n                            title: \"Error!\",\n                            text: \"No se pudo crear el congreso. Por favor intente más tarde.\",\n                            icon: \"error\"\n                            //    timer: 3000,\n                          }).then(function (_) {\n                            location.reload();\n                          });\n                        }\n                      });\n                    case 3:\n                    case \"end\":\n                      return _context.stop();\n                  }\n                }, _callee);\n              }))).apply(this, arguments);\n            });\n          case 2:\n          case \"end\":\n            return _context2.stop();\n        }\n      }, _callee2);\n    }))();\n  }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vY29uZmVyZW5jZS9jcmVhdGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJiIsIm1hcHBpbmdzIjoiOzs7Ozs7OzsrQ0FPQSxxSkFBQUEsbUJBQUEsWUFBQUEsb0JBQUEsV0FBQUMsQ0FBQSxTQUFBQyxDQUFBLEVBQUFELENBQUEsT0FBQUUsQ0FBQSxHQUFBQyxNQUFBLENBQUFDLFNBQUEsRUFBQUMsQ0FBQSxHQUFBSCxDQUFBLENBQUFJLGNBQUEsRUFBQUMsQ0FBQSxHQUFBSixNQUFBLENBQUFLLGNBQUEsY0FBQVAsQ0FBQSxFQUFBRCxDQUFBLEVBQUFFLENBQUEsSUFBQUQsQ0FBQSxDQUFBRCxDQUFBLElBQUFFLENBQUEsQ0FBQU8sS0FBQSxLQUFBQyxDQUFBLHdCQUFBQyxNQUFBLEdBQUFBLE1BQUEsT0FBQUMsQ0FBQSxHQUFBRixDQUFBLENBQUFHLFFBQUEsa0JBQUFDLENBQUEsR0FBQUosQ0FBQSxDQUFBSyxhQUFBLHVCQUFBQyxDQUFBLEdBQUFOLENBQUEsQ0FBQU8sV0FBQSw4QkFBQUMsT0FBQWpCLENBQUEsRUFBQUQsQ0FBQSxFQUFBRSxDQUFBLFdBQUFDLE1BQUEsQ0FBQUssY0FBQSxDQUFBUCxDQUFBLEVBQUFELENBQUEsSUFBQVMsS0FBQSxFQUFBUCxDQUFBLEVBQUFpQixVQUFBLE1BQUFDLFlBQUEsTUFBQUMsUUFBQSxTQUFBcEIsQ0FBQSxDQUFBRCxDQUFBLFdBQUFrQixNQUFBLG1CQUFBakIsQ0FBQSxJQUFBaUIsTUFBQSxZQUFBQSxPQUFBakIsQ0FBQSxFQUFBRCxDQUFBLEVBQUFFLENBQUEsV0FBQUQsQ0FBQSxDQUFBRCxDQUFBLElBQUFFLENBQUEsZ0JBQUFv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QXVHLENBQUE7NEJBQ0FGLFFBQUEsQ0FBQUcsTUFBQTswQkFDQTt3QkFDQTtzQkFDQTtvQkFBQTtvQkFBQTtzQkFBQSxPQUFBZixRQUFBLENBQUE5QyxJQUFBO2tCQUFBO2dCQUFBLEdBQUEwQyxPQUFBO2NBQUEsQ0FDQSxJQUFBdEIsS0FBQSxPQUFBRCxTQUFBO1lBQUE7VUFBQTtVQUFBO1lBQUEsT0FBQWlCLFNBQUEsQ0FBQXBDLElBQUE7UUFBQTtNQUFBLEdBQUFpQyxRQUFBO0lBQUE7RUFDQTtBQUNBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vY29uZmVyZW5jZS9jcmVhdGUudnVlPzkxNDciXSwic291cmNlc0NvbnRlbnQiOlsiPHRlbXBsYXRlPlxuICA8ZGl2IHYtaWY9XCJzdXJ2ZXlcIj5cbiAgICA8U3VydmV5IDpzdXJ2ZXk9XCJzdXJ2ZXlcIj48L1N1cnZleT5cbiAgPC9kaXY+XG48L3RlbXBsYXRlPlxuICAgIFxuICAgIDxzY3JpcHQ+XG5pbXBvcnQgKiBhcyBTdXJ2ZXlWdWUgZnJvbSBcInN1cnZleS12dWVcIjtcbmNvbnN0IFN3YWwgPSByZXF1aXJlKFwic3dlZXRhbGVydDJcIik7XG5pbXBvcnQgeyBqc29uIH0gZnJvbSBcIi4vZm9ybVwiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXBvbmVudHM6IHsgU3VydmV5OiBTdXJ2ZXlWdWUuU3VydmV5IH0sXG4gIGRhdGE6ICgpID0+ICh7XG4gICAgc3VydmV5OiBudWxsLFxuICB9KSxcblxuICBhc3luYyBtb3VudGVkKCkge1xuICAgIHRoaXMuc3VydmV5ID0gbmV3IFN1cnZleVZ1ZS5Nb2RlbChqc29uKTtcblxuICAgIHRoaXMuc3VydmV5Lm9uQ29tcGxldGluZy5hZGQoYXN5bmMgZnVuY3Rpb24gKHJlc3VsdCwgb3B0aW9ucykge1xuICAgICAgb3B0aW9ucy5hbGxvd0NvbXBsZXRlID0gZmFsc2U7XG4gICAgICBhd2FpdCBheGlvc1xuICAgICAgICAucG9zdChcIi9hcGkvY29uZmVyZW5jZS9zdG9yZVwiLCByZXN1bHQuZGF0YSlcbiAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2cocmVzcG9uc2UuZGF0YSk7XG4gICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEpIHtcbiAgICAgICAgICAgIFN3YWwuZmlyZSh7XG4gICAgICAgICAgICAgIHRpdGxlOiBcIkFjdHVhbGl6YWRvXCIsXG4gICAgICAgICAgICAgIHRleHQ6IFwiRWwgQ29uZ3Jlc28gaGEgc2lkbyBjcmVhZG8gY29uIMOpeGl0b1wiLFxuICAgICAgICAgICAgICBpY29uOiBcInN1Y2Nlc3NcIixcbiAgICAgICAgICAgICAgLy8gIHRpbWVyOiAyMDAwLFxuICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gXCIvcGFuZWwtYWRtaW5pc3RyYWNpb24vY29uZ3Jlc29zXCI7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgU3dhbC5maXJlKHtcbiAgICAgICAgICAgICAgdGl0bGU6IFwiRXJyb3IhXCIsXG4gICAgICAgICAgICAgIHRleHQ6IFwiTm8gc2UgcHVkbyBjcmVhciBlbCBjb25ncmVzby4gUG9yIGZhdm9yIGludGVudGUgbcOhcyB0YXJkZS5cIixcbiAgICAgICAgICAgICAgaWNvbjogXCJlcnJvclwiLFxuICAgICAgICAgICAgICAvLyAgICB0aW1lcjogMzAwMCxcbiAgICAgICAgICAgIH0pLnRoZW4oKF8pID0+IHtcbiAgICAgICAgICAgICAgbG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9LFxufTtcbjwvc2NyaXB0PlxuICAgICJdLCJuYW1lcyI6WyJfcmVnZW5lcmF0b3JSdW50aW1lIiwiZSIsInQiLCJyIiwiT2JqZWN0IiwicHJvdG90eXBlIiwibiIsImhhc093blByb3BlcnR5IiwibyIsImRlZmluZVByb3BlcnR5IiwidmFsdWUiLCJpIiwiU3ltYm9sIiwiYSIsIml0ZXJhdG9yIiwiYyIsImFzeW5jSXRlcmF0b3IiLCJ1IiwidG9TdHJpbmdUYWciLCJkZWZpbmUiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJ3cmFwIiwiR2VuZXJhdG9yIiwiY3JlYXRlIiwiQ29udGV4dCIsIm1ha2VJbnZva2VNZXRob2QiLCJ0cnlDYXRjaCIsInR5cGUiLCJhcmciLCJjYWxsIiwiaCIsImwiLCJmIiwicyIsInkiLCJHZW5lcmF0b3JGdW5jdGlvbiIsIkdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlIiwicCIsImQiLCJnZXRQcm90b3R5cGVPZiIsInYiLCJ2YWx1ZXMiLCJnIiwiZGVmaW5lSXRlcmF0b3JNZXRob2RzIiwiZm9yRWFjaCIsIl9pbnZva2UiLCJBc3luY0l0ZXJhdG9yIiwiaW52b2tlIiwiX3R5cGVvZiIsInJlc29sdmUiLCJfX2F3YWl0IiwidGhlbiIsImNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnIiwiRXJyb3IiLCJkb25lIiwibWV0aG9kIiwiZGVsZWdhdGUiLCJtYXliZUludm9rZURlbGVnYXRlIiwic2VudCIsIl9zZW50IiwiZGlzcGF0Y2hFeGNlcHRpb24iLCJhYnJ1cHQiLCJUeXBlRXJyb3IiLCJyZXN1bHROYW1lIiwibmV4dCIsIm5leHRMb2MiLCJwdXNoVHJ5RW50cnkiLCJ0cnlMb2MiLCJjYXRjaExvYyIsImZpbmFsbHlMb2MiLCJhZnRlckxvYyIsInRyeUVudHJpZXMiLCJwdXNoIiwicmVzZXRUcnlFbnRyeSIsImNvbXBsZXRpb24iLCJyZXNldCIsImlzTmFOIiwibGVuZ3RoIiwiZGlzcGxheU5hbWUiLCJpc0dlbmVyYXRvckZ1bmN0aW9uIiwiY29uc3RydWN0b3IiLCJuYW1lIiwibWFyayIsInNldFByb3RvdHlwZU9mIiwiX19wcm90b19fIiwiYXdyYXAiLCJhc3luYyIsIlByb21pc2UiLCJrZXlzIiwicmV2ZXJzZSIsInBvcCIsInByZXYiLCJjaGFyQXQiLCJzbGljZSIsInN0b3AiLCJydmFsIiwiaGFuZGxlIiwiY29tcGxldGUiLCJmaW5pc2giLCJfY2F0Y2giLCJkZWxlZ2F0ZVlpZWxkIiwiYXN5bmNHZW5lcmF0b3JTdGVwIiwiZ2VuIiwicmVqZWN0IiwiX25leHQiLCJfdGhyb3ciLCJrZXkiLCJpbmZvIiwiZXJyb3IiLCJfYXN5bmNUb0dlbmVyYXRvciIsImZuIiwic2VsZiIsImFyZ3MiLCJhcmd1bWVudHMiLCJhcHBseSIsImVyciIsInVuZGVmaW5lZCIsIlN1cnZleVZ1ZSIsIlN3YWwiLCJyZXF1aXJlIiwianNvbiIsImNvbXBvbmVudHMiLCJTdXJ2ZXkiLCJkYXRhIiwic3VydmV5IiwibW91bnRlZCIsIl90aGlzIiwiX2NhbGxlZTIiLCJfcmVmIiwiX2NhbGxlZTIkIiwiX2NvbnRleHQyIiwiTW9kZWwiLCJvbkNvbXBsZXRpbmciLCJhZGQiLCJfeCIsIl94MiIsIl9jYWxsZWUiLCJyZXN1bHQiLCJvcHRpb25zIiwiX2NhbGxlZSQiLCJfY29udGV4dCIsImFsbG93Q29tcGxldGUiLCJheGlvcyIsInBvc3QiLCJyZXNwb25zZSIsImNvbnNvbGUiLCJsb2ciLCJmaXJlIiwidGl0bGUiLCJ0ZXh0IiwiaWNvbiIsIndpbmRvdyIsImxvY2F0aW9uIiwiaHJlZiIsIl8iLCJyZWxvYWQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/conference/create.vue?vue&type=script&lang=js&\n");

/***/ }),

/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/conference/edit.vue?vue&type=script&lang=js&":
/*!****************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/conference/edit.vue?vue&type=script&lang=js& ***!
  \****************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var survey_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! survey-vue */ \"./node_modules/survey-vue/survey-vue.js\");\n/* harmony import */ var survey_vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(survey_vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _form__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./form */ \"./resources/js/components/admin/conference/form.js\");\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = \"function\" == typeof Symbol ? Symbol : {}, a = i.iterator || \"@@iterator\", c = i.asyncIterator || \"@@asyncIterator\", u = i.toStringTag || \"@@toStringTag\"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, \"\"); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, \"_invoke\", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: \"normal\", arg: t.call(e, r) }; } catch (t) { return { type: \"throw\", arg: t }; } } e.wrap = wrap; var h = \"suspendedStart\", l = \"suspendedYield\", f = \"executing\", s = \"completed\", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { [\"next\", \"throw\", \"return\"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if (\"throw\" !== c.type) { var u = c.arg, h = u.value; return h && \"object\" == _typeof(h) && n.call(h, \"__await\") ? e.resolve(h.__await).then(function (t) { invoke(\"next\", t, i, a); }, function (t) { invoke(\"throw\", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke(\"throw\", t, i, a); }); } a(c.arg); } var r; o(this, \"_invoke\", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error(\"Generator is already running\"); if (o === s) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = f; var p = tryCatch(e, r, n); if (\"normal\" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } \"throw\" === p.type && (o = s, n.method = \"throw\", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, \"throw\" === n && e.iterator[\"return\"] && (r.method = \"return\", r.arg = t, maybeInvokeDelegate(e, r), \"throw\" === r.method) || \"return\" !== n && (r.method = \"throw\", r.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), y; var i = tryCatch(o, e.iterator, r.arg); if (\"throw\" === i.type) return r.method = \"throw\", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, \"return\" !== r.method && (r.method = \"next\", r.arg = t), r.delegate = null, y) : a : (r.method = \"throw\", r.arg = new TypeError(\"iterator result is not an object\"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = \"normal\", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: \"root\" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || \"\" === e) { var r = e[a]; if (r) return r.call(e); if (\"function\" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, \"constructor\", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, \"constructor\", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), e.isGeneratorFunction = function (t) { var e = \"function\" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || \"GeneratorFunction\" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, \"GeneratorFunction\")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, \"Generator\"), define(g, a, function () { return this; }), define(g, \"toString\", function () { return \"[object Generator]\"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) \"t\" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = \"throw\", a.arg = e, r.next = n, o && (r.method = \"next\", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if (\"root\" === i.tryLoc) return handle(\"end\"); if (i.tryLoc <= this.prev) { var c = n.call(i, \"catchLoc\"), u = n.call(i, \"finallyLoc\"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error(\"try statement without catch or finally\"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, \"finallyLoc\") && this.prev < o.finallyLoc) { var i = o; break; } } i && (\"break\" === t || \"continue\" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = \"next\", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, \"catch\": function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if (\"throw\" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, \"next\" === this.method && (this.arg = t), y; } }, e; }\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nvar Swal = __webpack_require__(/*! sweetalert2 */ \"./node_modules/sweetalert2/dist/sweetalert2.all.js\");\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n  components: {\n    Survey: survey_vue__WEBPACK_IMPORTED_MODULE_0__.Survey\n  },\n  data: function data() {\n    return {\n      survey: null,\n      data: null\n    };\n  },\n  mounted: function mounted() {\n    var _this = this;\n    return _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {\n      var _ref;\n      var self;\n      return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n        while (1) switch (_context2.prev = _context2.next) {\n          case 0:\n            self = _this;\n            _context2.next = 3;\n            return axios.get(\"/api/conference/edit/\" + _this.$route.params.id, {\n              headers: {\n                Authorization: AT,\n                Accept: \"application/json\"\n              }\n            }).then(function (response) {\n              _this.data = response.data;\n              console.log(_this.data);\n            });\n          case 3:\n            _this.survey = new survey_vue__WEBPACK_IMPORTED_MODULE_0__.Model(_form__WEBPACK_IMPORTED_MODULE_1__.json);\n            _this.survey.onCompleting.add(function (_x, _x2) {\n              return (_ref = _ref || _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(result, options) {\n                return _regeneratorRuntime().wrap(function _callee$(_context) {\n                  while (1) switch (_context.prev = _context.next) {\n                    case 0:\n                      options.allowComplete = false;\n                      _context.next = 3;\n                      return axios.post(\"/api/conference/update/\" + self.$route.params.id, result.data).then(function (response) {\n                        console.log(response.data);\n                        if (response.data) {\n                          Swal.fire({\n                            title: \"Actualizado\",\n                            text: \"El congreso ha sido actualizado con éxito\",\n                            icon: \"success\"\n                            //  timer: 2000,\n                          }).then(function () {\n                            window.location.href = \"/panel-administracion/congresos\";\n                          });\n                        } else {\n                          Swal.fire({\n                            title: \"Error!\",\n                            text: \"No se pudo actualizar el congreso. Por favor intente más tarde.\",\n                            icon: \"error\"\n                            //    timer: 3000,\n                          }).then(function (_) {\n                            location.reload();\n                          });\n                        }\n                      });\n                    case 3:\n                    case \"end\":\n                      return _context.stop();\n                  }\n                }, _callee);\n              }))).apply(this, arguments);\n            });\n            _this.survey.data = self.data;\n          case 6:\n          case \"end\":\n            return _context2.stop();\n        }\n      }, _callee2);\n    }))();\n  }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vY29uZmVyZW5jZS9lZGl0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7K0NBT0EscUpBQUFBLG1CQUFBLFlBQUFBLG9CQUFBLFdBQUFDLENBQUEsU0FBQUMsQ0FBQSxFQUFBRCxDQUFBLE9BQUFFLENBQUEsR0FBQUMsTUFBQSxDQUFBQyxTQUFBLEVBQUFDLENBQUEsR0FBQUgsQ0FBQSxDQUFBSSxjQUFBLEVBQUFDLENBQUEsR0FBQUosTUFBQSxDQUFBSyxjQUFBLGNBQUFQLENBQUEsRUFBQUQsQ0FBQSxFQUFBRSxDQUFBLElBQUFELENBQUEsQ0FBQUQsQ0FBQSxJQUFBRSxDQUFBLENBQUFPLEtBQUEsS0FBQUMsQ0FBQSx3QkFBQUMsTUFBQSxHQUFBQSxNQUFBLE9BQUFDLENBQUEsR0FBQUYsQ0FBQSxDQUFBRyxRQUFBLGtCQUFBQyxDQUFBLEdBQUFKLENBQUEsQ0FBQUssYUFBQSx1QkFBQUMsQ0FBQSxHQUFBTixDQUFBLENBQUFPLFdBQUEsOEJBQUFDLE9BQUFqQixDQUFBLEVBQUFELENBQUEsRUFBQUUsQ0FBQSxXQUFBQyxNQUFBLENBQUFLLGNBQUEsQ0FBQVAsQ0FBQSxFQUFBRCxDQUFBLElBQUFTLEtBQUEsRUFBQVAsQ0FBQSxFQUFBaUIsVUFBQSxNQUFBQyxZQUFBLE1BQUFDLFFBQUEsU0FBQXBCLENBQUEsQ0FBQUQsQ0FBQSxXQUFBa0IsTUFBQSxtQkFBQWpCLENBQUEsSUFBQWlCLE1BQUEsWUFBQUEsT0FBQWpCLENBQUEsRUFBQUQsQ0FBQSxFQUFBRSxDQUFBLFdBQUFELENBQUEsQ0FBQUQsQ0FBQSxJQUFBRSxDQUFBLGdCQUFBb0Is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LE1BQUEsQ0FBQUMsTUFBQSxDQUFBQyxFQUFBLEVBQUFjLE1BQUEsQ0FBQTFCLElBQUEsRUFDQXhFLElBQUEsV0FBQXlGLFFBQUE7d0JBQ0FDLE9BQUEsQ0FBQUMsR0FBQSxDQUFBRixRQUFBLENBQUFqQixJQUFBO3dCQUNBLElBQUFpQixRQUFBLENBQUFqQixJQUFBOzBCQUNBTCxJQUFBLENBQUFxQyxJQUFBOzRCQUNBQyxLQUFBOzRCQUNBQyxJQUFBOzRCQUNBQyxJQUFBOzRCQUNBOzBCQUNBLEdBQUEzRyxJQUFBOzRCQUNBNEcsTUFBQSxDQUFBQyxRQUFBLENBQUFDLElBQUE7MEJBQ0E7d0JBQ0E7MEJBQ0EzQyxJQUFBLENBQUFxQyxJQUFBOzRCQUNBQyxLQUFBOzRCQUNBQyxJQUFBOzRCQUNBQyxJQUFBOzRCQUNBOzBCQUNBLEdBQUEzRyxJQUFBLFdBQUErRyxDQUFBOzRCQUNBRixRQUFBLENBQUFHLE1BQUE7MEJBQ0E7d0JBQ0E7c0JBQ0E7b0JBQUE7b0JBQUE7c0JBQUEsT0FBQVgsUUFBQSxDQUFBMUQsSUFBQTtrQkFBQTtnQkFBQSxHQUFBc0QsT0FBQTtjQUFBLENBQ0EsSUFBQWxDLEtBQUEsT0FBQUQsU0FBQTtZQUFBO1lBQ0FhLEtBQUEsQ0FBQUYsTUFBQSxDQUFBRCxJQUFBLEdBQUFaLElBQUEsQ0FBQVksSUFBQTtVQUFBO1VBQUE7WUFBQSxPQUFBTyxTQUFBLENBQUFwQyxJQUFBO1FBQUE7TUFBQSxHQUFBaUMsUUFBQTtJQUFBO0VBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9jb25mZXJlbmNlL2VkaXQudnVlP2Y4MjYiXSwic291cmNlc0NvbnRlbnQiOlsiPHRlbXBsYXRlPlxuICAgIDxkaXYgdi1pZj1cInN1cnZleVwiPlxuICAgICAgPFN1cnZleSA6c3VydmV5PVwic3VydmV5XCI+PC9TdXJ2ZXk+XG4gICAgPC9kaXY+XG4gIDwvdGVtcGxhdGU+XG4gICAgICBcbiAgICAgIDxzY3JpcHQ+XG4gIGltcG9ydCAqIGFzIFN1cnZleVZ1ZSBmcm9tIFwic3VydmV5LXZ1ZVwiO1xuICBjb25zdCBTd2FsID0gcmVxdWlyZShcInN3ZWV0YWxlcnQyXCIpO1xuICBpbXBvcnQgeyBqc29uIH0gZnJvbSBcIi4vZm9ybVwiO1xuICBcbiAgZXhwb3J0IGRlZmF1bHQge1xuICAgIGNvbXBvbmVudHM6IHsgU3VydmV5OiBTdXJ2ZXlWdWUuU3VydmV5IH0sXG4gICAgZGF0YTogKCkgPT4gKHtcbiAgICAgIHN1cnZleTogbnVsbCxcbiAgICAgIGRhdGE6IG51bGwsXG4gICAgfSksXG4gIFxuICAgIGFzeW5jIG1vdW50ZWQoKSB7XG4gICAgICBsZXQgc2VsZiA9IHRoaXM7XG4gICAgICBhd2FpdCBheGlvc1xuICAgICAgICAuZ2V0KFwiL2FwaS9jb25mZXJlbmNlL2VkaXQvXCIgKyB0aGlzLiRyb3V0ZS5wYXJhbXMuaWQsIHtcbiAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICBBdXRob3JpemF0aW9uOiBBVCxcbiAgICAgICAgICAgIEFjY2VwdDogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgdGhpcy5kYXRhID0gcmVzcG9uc2UuZGF0YTtcbiAgICAgICAgICBjb25zb2xlLmxvZyh0aGlzLmRhdGEpXG4gICAgICAgIH0pO1xuICBcbiAgICAgIHRoaXMuc3VydmV5ID0gbmV3IFN1cnZleVZ1ZS5Nb2RlbChqc29uKTtcbiAgXG4gICAgICB0aGlzLnN1cnZleS5vbkNvbXBsZXRpbmcuYWRkKGFzeW5jIGZ1bmN0aW9uIChyZXN1bHQsIG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucy5hbGxvd0NvbXBsZXRlID0gZmFsc2U7XG4gICAgICAgIGF3YWl0IGF4aW9zXG4gICAgICAgICAgLnBvc3QoXCIvYXBpL2NvbmZlcmVuY2UvdXBkYXRlL1wiICsgc2VsZi4kcm91dGUucGFyYW1zLmlkLCByZXN1bHQuZGF0YSlcbiAgICAgICAgICAudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2cocmVzcG9uc2UuZGF0YSlcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhKSB7XG4gICAgICAgICAgICAgIFN3YWwuZmlyZSh7XG4gICAgICAgICAgICAgICAgdGl0bGU6IFwiQWN0dWFsaXphZG9cIixcbiAgICAgICAgICAgICAgICB0ZXh0OiBcIkVsIGNvbmdyZXNvIGhhIHNpZG8gYWN0dWFsaXphZG8gY29uIMOpeGl0b1wiLFxuICAgICAgICAgICAgICAgIGljb246IFwic3VjY2Vzc1wiLFxuICAgICAgICAgICAgICAgIC8vICB0aW1lcjogMjAwMCxcbiAgICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBcIi9wYW5lbC1hZG1pbmlzdHJhY2lvbi9jb25ncmVzb3NcIjtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBTd2FsLmZpcmUoe1xuICAgICAgICAgICAgICAgIHRpdGxlOiBcIkVycm9yIVwiLFxuICAgICAgICAgICAgICAgIHRleHQ6IFwiTm8gc2UgcHVkbyBhY3R1YWxpemFyIGVsIGNvbmdyZXNvLiBQb3IgZmF2b3IgaW50ZW50ZSBtw6FzIHRhcmRlLlwiLFxuICAgICAgICAgICAgICAgIGljb246IFwiZXJyb3JcIixcbiAgICAgICAgICAgICAgICAvLyAgICB0aW1lcjogMzAwMCxcbiAgICAgICAgICAgICAgfSkudGhlbigoXykgPT4ge1xuICAgICAgICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5zdXJ2ZXkuZGF0YSA9IHNlbGYuZGF0YTtcbiAgICB9LFxuICB9O1xuICA8L3NjcmlwdD4iXSwibmFtZXMiOlsiX3JlZ2VuZXJhdG9yUnVudGltZSIsImUiLCJ0IiwiciIsIk9iamVjdCIsInByb3RvdHlwZSIsIm4iLCJoYXNPd25Qcm9wZXJ0eSIsIm8iLCJkZWZpbmVQcm9wZXJ0eSIsInZhbHVlIiwiaSIsIlN5bWJvbCIsImEiLCJpdGVyYXRvciIsImMiLCJhc3luY0l0ZXJhdG9yIiwidSIsInRvU3RyaW5nVGFnIiwiZGVmaW5lIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwid3JhcCIsIkdlbmVyYXRvciIsImNyZWF0ZSIsIkNvbnRleHQiLCJtYWtlSW52b2tlTWV0aG9kIiwidHJ5Q2F0Y2giLCJ0eXBlIiwiYXJnIiwiY2FsbCIsImgiLCJsIiwiZiIsInMiLCJ5IiwiR2VuZXJhdG9yRnVuY3Rpb24iLCJHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSIsInAiLCJkIiwiZ2V0UHJvdG90eXBlT2YiLCJ2IiwidmFsdWVzIiwiZyIsImRlZmluZUl0ZXJhdG9yTWV0aG9kcyIsImZvckVhY2giLCJfaW52b2tlIiwiQXN5bmNJdGVyYXRvciIsImludm9rZSIsIl90eXBlb2YiLCJyZXNvbHZlIiwiX19hd2FpdCIsInRoZW4iLCJjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZyIsIkVycm9yIiwiZG9uZSIsIm1ldGhvZCIsImRlbGVnYXRlIiwibWF5YmVJbnZva2VEZWxlZ2F0ZSIsInNlbnQiLCJfc2VudCIsImRpc3BhdGNoRXhjZXB0aW9uIiwiYWJydXB0IiwiVHlwZUVycm9yIiwicmVzdWx0TmFtZSIsIm5leHQiLCJuZXh0TG9jIiwicHVzaFRyeUVudHJ5IiwidHJ5TG9jIiwiY2F0Y2hMb2MiLCJmaW5hbGx5TG9jIiwiYWZ0ZXJMb2MiLCJ0cnlFbnRyaWVzIiwicHVzaCIsInJlc2V0VHJ5RW50cnkiLCJjb21wbGV0aW9uIiwicmVzZXQiLCJpc05hTiIsImxlbmd0aCIsImRpc3BsYXlOYW1lIiwiaXNHZW5lcmF0b3JGdW5jdGlvbiIsImNvbnN0cnVjdG9yIiwibmFtZSIsIm1hcmsiLCJzZXRQcm90b3R5cGVPZiIsIl9fcHJvdG9fXyIsImF3cmFwIiwiYXN5bmMiLCJQcm9taXNlIiwia2V5cyIsInJldmVyc2UiLCJwb3AiLCJwcmV2IiwiY2hhckF0Iiwic2xpY2UiLCJzdG9wIiwicnZhbCIsImhhbmRsZSIsImNvbXBsZXRlIiwiZmluaXNoIiwiX2NhdGNoIiwiZGVsZWdhdGVZaWVsZCIsImFzeW5jR2VuZXJhdG9yU3RlcCIsImdlbiIsInJlamVjdCIsIl9uZXh0IiwiX3Rocm93Iiwia2V5IiwiaW5mbyIsImVycm9yIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJmbiIsInNlbGYiLCJhcmdzIiwiYXJndW1lbnRzIiwiYXBwbHkiLCJlcnIiLCJ1bmRlZmluZWQiLCJTdXJ2ZXlWdWUiLCJTd2FsIiwicmVxdWlyZSIsImpzb24iLCJjb21wb25lbnRzIiwiU3VydmV5IiwiZGF0YSIsInN1cnZleSIsIm1vdW50ZWQiLCJfdGhpcyIsIl9jYWxsZWUyIiwiX3JlZiIsIl9jYWxsZWUyJCIsIl9jb250ZXh0MiIsImF4aW9zIiwiZ2V0IiwiJHJvdXRlIiwicGFyYW1zIiwiaWQiLCJoZWFkZXJzIiwiQXV0aG9yaXphdGlvbiIsIkFUIiwiQWNjZXB0IiwicmVzcG9uc2UiLCJjb25zb2xlIiwibG9nIiwiTW9kZWwiLCJvbkNvbXBsZXRpbmciLCJhZGQiLCJfeCIsIl94MiIsIl9jYWxsZWUiLCJyZXN1bHQiLCJvcHRpb25zIiwiX2NhbGxlZSQiLCJfY29udGV4dCIsImFsbG93Q29tcGxldGUiLCJwb3N0IiwiZmlyZSIsInRpdGxlIiwidGV4dCIsImljb24iLCJ3aW5kb3ciLCJsb2NhdGlvbiIsImhyZWYiLCJfIiwicmVsb2FkIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/conference/edit.vue?vue&type=script&lang=js&\n");

/***/ }),

/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/conference/gallery.vue?vue&type=script&lang=js&":
/*!*******************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/conference/gallery.vue?vue&type=script&lang=js& ***!
  \*******************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var survey_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! survey-vue */ \"./node_modules/survey-vue/survey-vue.js\");\n/* harmony import */ var survey_vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(survey_vue__WEBPACK_IMPORTED_MODULE_0__);\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = \"function\" == typeof Symbol ? Symbol : {}, a = i.iterator || \"@@iterator\", c = i.asyncIterator || \"@@asyncIterator\", u = i.toStringTag || \"@@toStringTag\"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, \"\"); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, \"_invoke\", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: \"normal\", arg: t.call(e, r) }; } catch (t) { return { type: \"throw\", arg: t }; } } e.wrap = wrap; var h = \"suspendedStart\", l = \"suspendedYield\", f = \"executing\", s = \"completed\", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { [\"next\", \"throw\", \"return\"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if (\"throw\" !== c.type) { var u = c.arg, h = u.value; return h && \"object\" == _typeof(h) && n.call(h, \"__await\") ? e.resolve(h.__await).then(function (t) { invoke(\"next\", t, i, a); }, function (t) { invoke(\"throw\", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke(\"throw\", t, i, a); }); } a(c.arg); } var r; o(this, \"_invoke\", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error(\"Generator is already running\"); if (o === s) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = f; var p = tryCatch(e, r, n); if (\"normal\" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } \"throw\" === p.type && (o = s, n.method = \"throw\", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, \"throw\" === n && e.iterator[\"return\"] && (r.method = \"return\", r.arg = t, maybeInvokeDelegate(e, r), \"throw\" === r.method) || \"return\" !== n && (r.method = \"throw\", r.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), y; var i = tryCatch(o, e.iterator, r.arg); if (\"throw\" === i.type) return r.method = \"throw\", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, \"return\" !== r.method && (r.method = \"next\", r.arg = t), r.delegate = null, y) : a : (r.method = \"throw\", r.arg = new TypeError(\"iterator result is not an object\"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = \"normal\", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: \"root\" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || \"\" === e) { var r = e[a]; if (r) return r.call(e); if (\"function\" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, \"constructor\", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, \"constructor\", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), e.isGeneratorFunction = function (t) { var e = \"function\" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || \"GeneratorFunction\" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, \"GeneratorFunction\")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, \"Generator\"), define(g, a, function () { return this; }), define(g, \"toString\", function () { return \"[object Generator]\"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) \"t\" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = \"throw\", a.arg = e, r.next = n, o && (r.method = \"next\", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if (\"root\" === i.tryLoc) return handle(\"end\"); if (i.tryLoc <= this.prev) { var c = n.call(i, \"catchLoc\"), u = n.call(i, \"finallyLoc\"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error(\"try statement without catch or finally\"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, \"finallyLoc\") && this.prev < o.finallyLoc) { var i = o; break; } } i && (\"break\" === t || \"continue\" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = \"next\", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, \"catch\": function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if (\"throw\" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, \"next\" === this.method && (this.arg = t), y; } }, e; }\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nvar Swal = __webpack_require__(/*! sweetalert2 */ \"./node_modules/sweetalert2/dist/sweetalert2.all.js\");\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n  components: {\n    Survey: survey_vue__WEBPACK_IMPORTED_MODULE_0__.Survey\n  },\n  data: function data() {\n    return {\n      survey: null,\n      data: null\n    };\n  },\n  mounted: function mounted() {\n    var _this = this;\n    return _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {\n      var _ref;\n      var self, json;\n      return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n        while (1) switch (_context2.prev = _context2.next) {\n          case 0:\n            self = _this;\n            _context2.next = 3;\n            return axios.get(\"/api/conference/edit-gallery/\" + _this.$route.params.id, {\n              headers: {\n                Authorization: AT,\n                Accept: \"application/json\"\n              }\n            }).then(function (response) {\n              _this.data = response.data;\n              console.log(_this.data);\n            });\n          case 3:\n            json = {\n              locale: \"es\",\n              title: \"Galeria\",\n              pages: [{\n                name: \"page1\",\n                elements: [{\n                  type: \"file\",\n                  name: \"images\",\n                  title: \"Imagenes\",\n                  hideNumber: true,\n                  allowMultiple: true,\n                  acceptedTypes: \".jpg\",\n                  needConfirmRemoveFile: true\n                }]\n              }],\n              showCompletedPage: false\n            };\n            _this.survey = new survey_vue__WEBPACK_IMPORTED_MODULE_0__.Model(json);\n            _this.survey.onComplete.add(function (_x) {\n              return (_ref = _ref || _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(result) {\n                return _regeneratorRuntime().wrap(function _callee$(_context) {\n                  while (1) switch (_context.prev = _context.next) {\n                    case 0:\n                      _context.next = 2;\n                      return axios.post(\"/api/conference/update-gallery/\" + self.$route.params.id, result.data).then(function (response) {\n                        console.log(response.data);\n                        if (response.data) {\n                          Swal.fire({\n                            title: \"Actualizado\",\n                            text: \"La galeria ha sido actualizado con éxito\",\n                            icon: \"success\"\n                            //  timer: 2000,\n                          }).then(function () {\n                            window.location.href = \"/panel-administracion/banner\";\n                          });\n                        } else {\n                          Swal.fire({\n                            title: \"Error!\",\n                            text: \"No se pudo actualizar la galeria. Por favor intente más tarde.\",\n                            icon: \"error\"\n                            //    timer: 3000,\n                          }).then(function (_) {\n                            location.reload();\n                          });\n                        }\n                      });\n                    case 2:\n                    case \"end\":\n                      return _context.stop();\n                  }\n                }, _callee);\n              }))).apply(this, arguments);\n            });\n            _this.survey.data = self.data;\n          case 7:\n          case \"end\":\n            return _context2.stop();\n        }\n      }, _callee2);\n    }))();\n  }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vY29uZmVyZW5jZS9nYWxsZXJ5LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYiLCJtYXBwaW5ncyI6Ijs7Ozs7OzsrQ0FPQSxxSkFBQUEsbUJBQUEsWUFBQUEsb0JBQUEsV0FBQUMsQ0FBQSxTQUFBQyxDQUFBLEVBQUFELENBQUEsT0FBQUUsQ0FBQSxHQUFBQyxNQUFBLENBQUFDLFNBQUEsRUFBQUMsQ0FBQSxHQUFBSCxDQUFBLENBQUFJLGNBQUEsRUFBQUMsQ0FBQSxHQUFBSixNQUFBLENBQUFLLGNBQUEsY0FBQVAsQ0FBQSxFQUFBRCxDQUFBLEVBQUFFLENBQUEsSUFBQUQsQ0FBQSxDQUFBRCxDQUFBLElBQUFFLENBQUEsQ0FBQU8sS0FBQSxLQUFBQyxDQUFBLHdCQUFBQyxNQUFBLEdBQUFBLE1BQUEsT0FBQUMsQ0FBQSxHQUFBRixDQUFBLENBQUFHLFFBQUEsa0JBQUFDLENBQUEsR0FBQUosQ0FBQSxDQUFBSyxhQUFBLHVCQUFBQyxDQUFBLEdBQUFOLENBQUEsQ0FBQU8sV0FBQSw4QkFBQUMsT0FBQWpCLENBQUEsRUFBQUQsQ0FBQSxFQUFBRSxDQUFBLFdBQUFDLE1BQUEsQ0FBQUssY0FBQSxDQUFBUCxDQUFBLEVBQUFELENBQUEsSUFBQVMsS0FBQSxFQUFBUCxDQUFBLEVBQUFpQixVQUFBLE1BQUFDLFlBQUEsTUFBQUMsUUFBQSxTQUFBcEIsQ0FBQSxDQUFBRCxDQUFBLFdBQUFrQixNQUFBLG1CQUFBakIsQ0FBQSxJQUFBaUIsTUFBQSxZQUFBQSxPQUFBakIsQ0FBQSxFQUFBRCxDQUFBLEVBQUFFLENBQUEsV0FBQUQsQ0FBQSxDQUFBRCxDQUFBLElBQUFFLENBQUEsZ0JBQUFv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YWxsZXJ5LnZ1ZT9iYjBiIl0sInNvdXJjZXNDb250ZW50IjpbIjx0ZW1wbGF0ZT5cbiAgPGRpdiB2LWlmPVwic3VydmV5XCI+XG4gICAgPFN1cnZleSA6c3VydmV5PVwic3VydmV5XCI+PC9TdXJ2ZXk+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cbiAgICAgIFxuICAgICAgPHNjcmlwdD5cbmltcG9ydCAqIGFzIFN1cnZleVZ1ZSBmcm9tIFwic3VydmV5LXZ1ZVwiO1xuY29uc3QgU3dhbCA9IHJlcXVpcmUoXCJzd2VldGFsZXJ0MlwiKTtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBjb21wb25lbnRzOiB7IFN1cnZleTogU3VydmV5VnVlLlN1cnZleSB9LFxuICBkYXRhOiAoKSA9PiAoe1xuICAgIHN1cnZleTogbnVsbCxcbiAgICBkYXRhOiBudWxsLFxuICB9KSxcblxuICBhc3luYyBtb3VudGVkKCkge1xuICAgIGxldCBzZWxmID0gdGhpcztcbiAgICBhd2FpdCBheGlvc1xuICAgICAgLmdldChcIi9hcGkvY29uZmVyZW5jZS9lZGl0LWdhbGxlcnkvXCIgKyB0aGlzLiRyb3V0ZS5wYXJhbXMuaWQsIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIEF1dGhvcml6YXRpb246IEFULFxuICAgICAgICAgIEFjY2VwdDogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIHRoaXMuZGF0YSA9IHJlc3BvbnNlLmRhdGE7XG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMuZGF0YSk7XG4gICAgICB9KTtcbiAgICBsZXQganNvbiA9IHtcbiAgICAgIGxvY2FsZTogXCJlc1wiLFxuICAgICAgdGl0bGU6IFwiR2FsZXJpYVwiLFxuICAgICAgcGFnZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwicGFnZTFcIixcbiAgICAgICAgICBlbGVtZW50czogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiBcImZpbGVcIixcbiAgICAgICAgICAgICAgbmFtZTogXCJpbWFnZXNcIixcbiAgICAgICAgICAgICAgdGl0bGU6IFwiSW1hZ2VuZXNcIixcbiAgICAgICAgICAgICAgaGlkZU51bWJlcjogdHJ1ZSxcbiAgICAgICAgICAgICAgYWxsb3dNdWx0aXBsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgYWNjZXB0ZWRUeXBlczogXCIuanBnXCIsXG4gICAgICAgICAgICAgIG5lZWRDb25maXJtUmVtb3ZlRmlsZTogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBzaG93Q29tcGxldGVkUGFnZTogZmFsc2UsXG4gICAgfTtcblxuICAgIHRoaXMuc3VydmV5ID0gbmV3IFN1cnZleVZ1ZS5Nb2RlbChqc29uKTtcblxuICAgIHRoaXMuc3VydmV5Lm9uQ29tcGxldGUuYWRkKGFzeW5jIGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgIGF3YWl0IGF4aW9zXG4gICAgICAgIC5wb3N0KFwiL2FwaS9jb25mZXJlbmNlL3VwZGF0ZS1nYWxsZXJ5L1wiICsgc2VsZi4kcm91dGUucGFyYW1zLmlkLCByZXN1bHQuZGF0YSlcbiAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2cocmVzcG9uc2UuZGF0YSk7XG4gICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEpIHtcbiAgICAgICAgICAgIFN3YWwuZmlyZSh7XG4gICAgICAgICAgICAgIHRpdGxlOiBcIkFjdHVhbGl6YWRvXCIsXG4gICAgICAgICAgICAgIHRleHQ6IFwiTGEgZ2FsZXJpYSBoYSBzaWRvIGFjdHVhbGl6YWRvIGNvbiDDqXhpdG9cIixcbiAgICAgICAgICAgICAgaWNvbjogXCJzdWNjZXNzXCIsXG4gICAgICAgICAgICAgIC8vICB0aW1lcjogMjAwMCxcbiAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IFwiL3BhbmVsLWFkbWluaXN0cmFjaW9uL2Jhbm5lclwiO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIFN3YWwuZmlyZSh7XG4gICAgICAgICAgICAgIHRpdGxlOiBcIkVycm9yIVwiLFxuICAgICAgICAgICAgICB0ZXh0OiBcIk5vIHNlIHB1ZG8gYWN0dWFsaXphciBsYSBnYWxlcmlhLiBQb3IgZmF2b3IgaW50ZW50ZSBtw6FzIHRhcmRlLlwiLFxuICAgICAgICAgICAgICBpY29uOiBcImVycm9yXCIsXG4gICAgICAgICAgICAgIC8vICAgIHRpbWVyOiAzMDAwLFxuICAgICAgICAgICAgfSkudGhlbigoXykgPT4ge1xuICAgICAgICAgICAgICBsb2NhdGlvbi5yZWxvYWQoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgdGhpcy5zdXJ2ZXkuZGF0YSA9IHNlbGYuZGF0YTtcbiAgfSxcbn07XG48L3NjcmlwdD4iXSwibmFtZXMiOlsiX3JlZ2VuZXJhdG9yUnVudGltZSIsImUiLCJ0IiwiciIsIk9iamVjdCIsInByb3RvdHlwZSIsIm4iLCJoYXNPd25Qcm9wZXJ0eSIsIm8iLCJkZWZpbmVQcm9wZXJ0eSIsInZhbHVlIiwiaSIsIlN5bWJvbCIsImEiLCJpdGVyYXRvciIsImMiLCJhc3luY0l0ZXJhdG9yIiwidSIsInRvU3RyaW5nVGFnIiwiZGVmaW5lIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwid3JhcCIsIkdlbmVyYXRvciIsImNyZWF0ZSIsIkNvbnRleHQiLCJtYWtlSW52b2tlTWV0aG9kIiwidHJ5Q2F0Y2giLCJ0eXBlIiwiYXJnIiwiY2FsbCIsImgiLCJsIiwiZiIsInMiLCJ5IiwiR2VuZXJhdG9yRnVuY3Rpb24iLCJHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSIsInAiLCJkIiwiZ2V0UHJvdG90eXBlT2YiLCJ2IiwidmFsdWVzIiwiZyIsImRlZmluZUl0ZXJhdG9yTWV0aG9kcyIsImZvckVhY2giLCJfaW52b2tlIiwiQXN5bmNJdGVyYXRvciIsImludm9rZSIsIl90eXBlb2YiLCJyZXNvbHZlIiwiX19hd2FpdCIsInRoZW4iLCJjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZyIsIkVycm9yIiwiZG9uZSIsIm1ldGhvZCIsImRlbGVnYXRlIiwibWF5YmVJbnZva2VEZWxlZ2F0ZSIsInNlbnQiLCJfc2VudCIsImRpc3BhdGNoRXhjZXB0aW9uIiwiYWJydXB0IiwiVHlwZUVycm9yIiwicmVzdWx0TmFtZSIsIm5leHQiLCJuZXh0TG9jIiwicHVzaFRyeUVudHJ5IiwidHJ5TG9jIiwiY2F0Y2hMb2MiLCJmaW5hbGx5TG9jIiwiYWZ0ZXJMb2MiLCJ0cnlFbnRyaWVzIiwicHVzaCIsInJlc2V0VHJ5RW50cnkiLCJjb21wbGV0aW9uIiwicmVzZXQiLCJpc05hTiIsImxlbmd0aCIsImRpc3BsYXlOYW1lIiwiaXNHZW5lcmF0b3JGdW5jdGlvbiIsImNvbnN0cnVjdG9yIiwibmFtZSIsIm1hcmsiLCJzZXRQcm90b3R5cGVPZiIsIl9fcHJvdG9fXyIsImF3cmFwIiwiYXN5bmMiLCJQcm9taXNlIiwia2V5cyIsInJldmVyc2UiLCJwb3AiLCJwcmV2IiwiY2hhckF0Iiwic2xpY2UiLCJzdG9wIiwicnZhbCIsImhhbmRsZSIsImNvbXBsZXRlIiwiZmluaXNoIiwiX2NhdGNoIiwiZGVsZWdhdGVZaWVsZCIsImFzeW5jR2VuZXJhdG9yU3RlcCIsImdlbiIsInJlamVjdCIsIl9uZXh0IiwiX3Rocm93Iiwia2V5IiwiaW5mbyIsImVycm9yIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJmbiIsInNlbGYiLCJhcmdzIiwiYXJndW1lbnRzIiwiYXBwbHkiLCJlcnIiLCJ1bmRlZmluZWQiLCJTdXJ2ZXlWdWUiLCJTd2FsIiwicmVxdWlyZSIsImNvbXBvbmVudHMiLCJTdXJ2ZXkiLCJkYXRhIiwic3VydmV5IiwibW91bnRlZCIsIl90aGlzIiwiX2NhbGxlZTIiLCJfcmVmIiwianNvbiIsIl9jYWxsZWUyJCIsIl9jb250ZXh0MiIsImF4aW9zIiwiZ2V0IiwiJHJvdXRlIiwicGFyYW1zIiwiaWQiLCJoZWFkZXJzIiwiQXV0aG9yaXphdGlvbiIsIkFUIiwiQWNjZXB0IiwicmVzcG9uc2UiLCJjb25zb2xlIiwibG9nIiwibG9jYWxlIiwidGl0bGUiLCJwYWdlcyIsImVsZW1lbnRzIiwiaGlkZU51bWJlciIsImFsbG93TXVsdGlwbGUiLCJhY2NlcHRlZFR5cGVzIiwibmVlZENvbmZpcm1SZW1vdmVGaWxlIiwic2hvd0NvbXBsZXRlZFBhZ2UiLCJNb2RlbCIsIm9uQ29tcGxldGUiLCJhZGQiLCJfeCIsIl9jYWxsZWUiLCJyZXN1bHQiLCJfY2FsbGVlJCIsIl9jb250ZXh0IiwicG9zdCIsImZpcmUiLCJ0ZXh0IiwiaWNvbiIsIndpbmRvdyIsImxvY2F0aW9uIiwiaHJlZiIsIl8iLCJyZWxvYWQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/conference/gallery.vue?vue&type=script&lang=js&\n");

/***/ }),

/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/conference/index.vue?vue&type=script&lang=js&":
/*!*****************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/conference/index.vue?vue&type=script&lang=js& ***!
  \*****************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nvar Swal = __webpack_require__(/*! sweetalert2 */ \"./node_modules/sweetalert2/dist/sweetalert2.all.js\");\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n  data: function data() {\n    return {\n      data: null,\n      search: \"\",\n      headers: [{\n        text: \"Nombre\",\n        value: \"name\"\n      }, {\n        text: \"Fecha de Inicio\",\n        value: \"start_date\"\n      }, {\n        text: \"Fecha de Finalización\",\n        value: \"end_date\"\n      }, {\n        text: \"Acciones\",\n        value: \"actions\",\n        sortable: false\n      }]\n    };\n  },\n  mounted: function mounted() {\n    this.loadData();\n  },\n  methods: {\n    loadData: function loadData() {\n      var _this = this;\n      axios.get(\"/api/conference/index\").then(function (response) {\n        _this.data = response.data;\n      });\n    },\n    edit: function edit(id) {\n      window.location.href = \"/panel-administracion/congresos/\" + id + \"/editar\";\n    },\n    gallery: function gallery(id) {\n      window.location.href = \"/panel-administracion/congresos/\" + id + \"/galeria\";\n    },\n    trash: function trash(id, name) {\n      var _this2 = this;\n      Swal.fire({\n        title: \"Confirmación\",\n        html: \"<p margin-bottom: 10px;\\\">\\n                \\xBFEst\\xE1s seguro de que deseas eliminar el <b>\\\"\".concat(name, \"\\\"</b>?</p>\\n                    <p style=\\\"font-size: 0.7em;\\\">\\n                      Si lo eliminas, no podr\\xE1s recuperarlo.\\n                    </p>\"),\n        icon: \"warning\",\n        showCancelButton: true,\n        confirmButtonColor: \"#3085d6\",\n        cancelButtonColor: \"#d33\",\n        confirmButtonText: \"Sí, eliminar\",\n        cancelButtonText: \"Cancelar\"\n      }).then(function (result) {\n        if (result.isConfirmed) {\n          axios[\"delete\"](\"/api/conference/delete/\" + id, {\n            headers: {\n              Authorization: AT,\n              Accept: \"application/json\"\n            }\n          }).then(function (response) {\n            console.log(response.data);\n            Swal.fire({\n              title: \"Eliminado\",\n              text: \"Se ha eliminado el congreso con éxito.\",\n              icon: \"success\",\n              timer: 2000\n            }).then(function (_) {});\n            _this2.loadData();\n          });\n        }\n      });\n    }\n  }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vY29uZmVyZW5jZS9pbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmIiwibWFwcGluZ3MiOiI7Ozs7QUE4Q0EsSUFBQUEsSUFBQSxHQUFBQyxtQkFBQTtBQUNBLGlFQUFlO0VBQ2ZDLElBQUEsV0FBQUEsS0FBQTtJQUNBO01BQ0FBLElBQUE7TUFDQUMsTUFBQTtNQUNBQyxPQUFBLEdBQ0E7UUFBQUMsSUFBQTtRQUFBQyxLQUFBO01BQUEsR0FDQTtRQUFBRCxJQUFBO1FBQUFDLEtBQUE7TUFBQSxHQUNBO1FBQUFELElBQUE7UUFBQUMsS0FBQTtNQUFBLEdBQ0E7UUFBQUQsSUFBQTtRQUFBQyxLQUFBO1FBQUFDLFFBQUE7TUFBQTtJQUVBO0VBQ0E7RUFDQUMsT0FBQSxXQUFBQSxRQUFBO0lBQ0EsS0FBQUMsUUFBQTtFQUNBO0VBQ0FDLE9BQUE7SUFDQUQsUUFBQSxXQUFBQSxTQUFBO01BQUEsSUFBQUUsS0FBQTtNQUNBQyxLQUFBLENBQUFDLEdBQUEsMEJBQUFDLElBQUEsV0FBQUMsUUFBQTtRQUNBSixLQUFBLENBQUFULElBQUEsR0FBQWEsUUFBQSxDQUFBYixJQUFBO01BQ0E7SUFDQTtJQUNBYyxJQUFBLFdBQUFBLEtBQUFDLEVBQUE7TUFDQUMsTUFBQSxDQUFBQyxRQUFBLENBQUFDLElBQUEsd0NBQUFILEVBQUE7SUFDQTtJQUNBSSxPQUFBLFdBQUFBLFFBQUFKLEVBQUE7TUFDQUMsTUFBQSxDQUFBQyxRQUFBLENBQUFDLElBQUEsd0NBQUFILEVBQUE7SUFDQTtJQUNBSyxLQUFBLFdBQUFBLE1BQUFMLEVBQUEsRUFBQU0sSUFBQTtNQUFBLElBQUFDLE1BQUE7TUFDQXhCLElBQUEsQ0FBQXlCLElBQUE7UUFDQUMsS0FBQTtRQUNBQyxJQUFBLG9HQUFBQyxNQUFBLENBQ0FMLElBQUEsZ0tBR0E7UUFDQU0sSUFBQTtRQUNBQyxnQkFBQTtRQUNBQyxrQkFBQTtRQUNBQyxpQkFBQTtRQUNBQyxpQkFBQTtRQUNBQyxnQkFBQTtNQUNBLEdBQUFwQixJQUFBLFdBQUFxQixNQUFBO1FBQ0EsSUFBQUEsTUFBQSxDQUFBQyxXQUFBO1VBQ0F4QixLQUFBLFVBQ0EsNkJBQUFLLEVBQUE7WUFDQWIsT0FBQTtjQUNBaUMsYUFBQSxFQUFBQyxFQUFBO2NBQ0FDLE1BQUE7WUFDQTtVQUNBLEdBQ0F6QixJQUFBLFdBQUFDLFFBQUE7WUFDQXlCLE9BQUEsQ0FBQUMsR0FBQSxDQUFBMUIsUUFBQSxDQUFBYixJQUFBO1lBQ0FGLElBQUEsQ0FBQXlCLElBQUE7Y0FDQUMsS0FBQTtjQUNBckIsSUFBQTtjQUNBd0IsSUFBQTtjQUNBYSxLQUFBO1lBQ0EsR0FBQTVCLElBQUEsV0FBQTZCLENBQUE7WUFDQW5CLE1BQUEsQ0FBQWYsUUFBQTtVQUNBO1FBQ0E7TUFDQTtJQUNBO0VBQ0E7QUFDQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vL3Jlc291cmNlcy9qcy9jb21wb25lbnRzL2FkbWluL2NvbmZlcmVuY2UvaW5kZXgudnVlP2VlYWMiXSwic291cmNlc0NvbnRlbnQiOlsiPHRlbXBsYXRlPlxuICA8di1hcHA+XG4gICAgPHYtY2FyZCB2LWlmPVwiZGF0YVwiPlxuICAgICAgPHYtY2FyZC10aXRsZT5cbiAgICAgICAgQWRtaW5pc3RyYWNpw7NuIGRlIENvbmdyZXNvc1xuICAgICAgICA8di1zcGFjZXI+PC92LXNwYWNlcj5cbiAgICAgICAgPHYtdGV4dC1maWVsZFxuICAgICAgICAgIHYtbW9kZWw9XCJzZWFyY2hcIlxuICAgICAgICAgIGFwcGVuZC1pY29uPVwibWRpLW1hZ25pZnlcIlxuICAgICAgICAgIGxhYmVsPVwiQnVzY2FyXCJcbiAgICAgICAgICBzaW5nbGUtbGluZVxuICAgICAgICAgIGhpZGUtZGV0YWlsc1xuICAgICAgICA+PC92LXRleHQtZmllbGQ+XG4gICAgICA8L3YtY2FyZC10aXRsZT5cbiAgICAgIDx2LWRhdGEtdGFibGVcbiAgICAgICAgOmhlYWRlcnM9XCJoZWFkZXJzXCJcbiAgICAgICAgOml0ZW1zPVwiZGF0YVwiXG4gICAgICAgIGNsYXNzPVwiZWxldmF0aW9uLTFcIlxuICAgICAgICA6c2VhcmNoPVwic2VhcmNoXCJcbiAgICAgID5cbiAgICAgICAgPHRlbXBsYXRlIHYtc2xvdDppdGVtLmltYWdlPVwieyBpdGVtIH1cIj5cbiAgICAgICAgICA8di1pbWdcbiAgICAgICAgICAgIG1heC1oZWlnaHQ9XCI1MVwiXG4gICAgICAgICAgICBtYXgtd2lkdGg9XCIxMTBcIlxuICAgICAgICAgICAgY29udGFpblxuICAgICAgICAgICAgOnNyYz1cIml0ZW0uaW1hZ2VuXCJcbiAgICAgICAgICA+PC92LWltZ1xuICAgICAgICA+PC90ZW1wbGF0ZT5cbiAgICAgICAgPHRlbXBsYXRlIHYtc2xvdDppdGVtLmFjdGlvbnM9XCJ7IGl0ZW0gfVwiPlxuICAgICAgICAgIDx2LWJ0biBjb2xvcj1cInByaW1hcnlcIiBmYWIgeC1zbWFsbCBkYXJrIEBjbGljaz1cImVkaXQoaXRlbS5pZClcIj5cbiAgICAgICAgICAgIDx2LWljb24+IG1kaS1wZW5jaWwgPC92LWljb24+XG4gICAgICAgICAgPC92LWJ0bj5cbiAgICAgICAgICA8di1idG4gY29sb3I9XCJpbmZvXCIgZmFiIHgtc21hbGwgZGFyayBAY2xpY2s9XCJnYWxsZXJ5KGl0ZW0uaWQpXCI+XG4gICAgICAgICAgICA8di1pY29uPiBtZGktZm9sZGVyLW11bHRpcGxlLWltYWdlIDwvdi1pY29uPlxuICAgICAgICAgIDwvdi1idG4+XG4gICAgICAgICAgPHYtYnRuIGNvbG9yPVwid2FybmluZ1wiIGZhYiB4LXNtYWxsIGRhcmsgQGNsaWNrPVwidHJhc2goaXRlbS5pZCwgaXRlbS5uYW1lKVwiPlxuICAgICAgICAgICAgPHYtaWNvbj4gbWRpLWRlbGV0ZSA8L3YtaWNvbj5cbiAgICAgICAgICA8L3YtYnRuPlxuICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgPC92LWRhdGEtdGFibGU+XG4gICAgPC92LWNhcmQ+XG4gIDwvdi1hcHA+XG48L3RlbXBsYXRlPlxuICBcbiAgPHNjcmlwdD5cblxuY29uc3QgU3dhbCA9IHJlcXVpcmUoXCJzd2VldGFsZXJ0MlwiKTtcbmV4cG9ydCBkZWZhdWx0IHtcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZGF0YTogbnVsbCxcbiAgICAgIHNlYXJjaDogXCJcIixcbiAgICAgIGhlYWRlcnM6IFtcbiAgICAgICAgeyB0ZXh0OiBcIk5vbWJyZVwiLCB2YWx1ZTogXCJuYW1lXCIgfSxcbiAgICAgICAgeyB0ZXh0OiBcIkZlY2hhIGRlIEluaWNpb1wiLCB2YWx1ZTogXCJzdGFydF9kYXRlXCIgfSxcbiAgICAgICAgeyB0ZXh0OiBcIkZlY2hhIGRlIEZpbmFsaXphY2nDs25cIiwgdmFsdWU6IFwiZW5kX2RhdGVcIiB9LFxuICAgICAgICB7IHRleHQ6IFwiQWNjaW9uZXNcIiwgdmFsdWU6IFwiYWN0aW9uc1wiLCBzb3J0YWJsZTogZmFsc2UgfSxcbiAgICAgIF0sXG4gICAgfTtcbiAgfSxcbiAgbW91bnRlZCgpIHtcbiAgICB0aGlzLmxvYWREYXRhKCk7XG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICBsb2FkRGF0YSgpIHtcbiAgICAgIGF4aW9zLmdldChcIi9hcGkvY29uZmVyZW5jZS9pbmRleFwiKS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICB0aGlzLmRhdGEgPSByZXNwb25zZS5kYXRhO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBlZGl0KGlkKSB7XG4gICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IFwiL3BhbmVsLWFkbWluaXN0cmFjaW9uL2NvbmdyZXNvcy9cIiArIGlkICsgXCIvZWRpdGFyXCI7XG4gICAgfSxcbiAgICBnYWxsZXJ5KGlkKXtcbiAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gXCIvcGFuZWwtYWRtaW5pc3RyYWNpb24vY29uZ3Jlc29zL1wiICsgaWQgKyBcIi9nYWxlcmlhXCI7XG4gICAgfSxcbiAgICB0cmFzaChpZCwgbmFtZSkge1xuICAgICAgU3dhbC5maXJlKHtcbiAgICAgICAgdGl0bGU6IFwiQ29uZmlybWFjacOzblwiLFxuICAgICAgICBodG1sOiBgPHAgbWFyZ2luLWJvdHRvbTogMTBweDtcIj5cbiAgICAgICAgICAgICAgICDCv0VzdMOhcyBzZWd1cm8gZGUgcXVlIGRlc2VhcyBlbGltaW5hciBlbCA8Yj5cIiR7bmFtZX1cIjwvYj4/PC9wPlxuICAgICAgICAgICAgICAgICAgICA8cCBzdHlsZT1cImZvbnQtc2l6ZTogMC43ZW07XCI+XG4gICAgICAgICAgICAgICAgICAgICAgU2kgbG8gZWxpbWluYXMsIG5vIHBvZHLDoXMgcmVjdXBlcmFybG8uXG4gICAgICAgICAgICAgICAgICAgIDwvcD5gLFxuICAgICAgICBpY29uOiBcIndhcm5pbmdcIixcbiAgICAgICAgc2hvd0NhbmNlbEJ1dHRvbjogdHJ1ZSxcbiAgICAgICAgY29uZmlybUJ1dHRvbkNvbG9yOiBcIiMzMDg1ZDZcIixcbiAgICAgICAgY2FuY2VsQnV0dG9uQ29sb3I6IFwiI2QzM1wiLFxuICAgICAgICBjb25maXJtQnV0dG9uVGV4dDogXCJTw60sIGVsaW1pbmFyXCIsXG4gICAgICAgIGNhbmNlbEJ1dHRvblRleHQ6IFwiQ2FuY2VsYXJcIixcbiAgICAgIH0pLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICBpZiAocmVzdWx0LmlzQ29uZmlybWVkKSB7XG4gICAgICAgICAgYXhpb3NcbiAgICAgICAgICAgIC5kZWxldGUoXCIvYXBpL2NvbmZlcmVuY2UvZGVsZXRlL1wiICsgaWQsIHtcbiAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgIEF1dGhvcml6YXRpb246IEFULFxuICAgICAgICAgICAgICAgIEFjY2VwdDogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlLmRhdGEpXG4gICAgICAgICAgICAgIFN3YWwuZmlyZSh7XG4gICAgICAgICAgICAgICAgdGl0bGU6IFwiRWxpbWluYWRvXCIsXG4gICAgICAgICAgICAgICAgdGV4dDogXCJTZSBoYSBlbGltaW5hZG8gZWwgY29uZ3Jlc28gY29uIMOpeGl0by5cIixcbiAgICAgICAgICAgICAgICBpY29uOiBcInN1Y2Nlc3NcIixcbiAgICAgICAgICAgICAgICB0aW1lcjogMjAwMCxcbiAgICAgICAgICAgICAgfSkudGhlbigoXykgPT4ge30pO1xuICAgICAgICAgICAgICB0aGlzLmxvYWREYXRhKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSxcbiAgfSxcbn07XG48L3NjcmlwdD4iXSwibmFtZXMiOlsiU3dhbCIsInJlcXVpcmUiLCJkYXRhIiwic2VhcmNoIiwiaGVhZGVycyIsInRleHQiLCJ2YWx1ZSIsInNvcnRhYmxlIiwibW91bnRlZCIsImxvYWREYXRhIiwibWV0aG9kcyIsIl90aGlzIiwiYXhpb3MiLCJnZXQiLCJ0aGVuIiwicmVzcG9uc2UiLCJlZGl0IiwiaWQiLCJ3aW5kb3ciLCJsb2NhdGlvbiIsImhyZWYiLCJnYWxsZXJ5IiwidHJhc2giLCJuYW1lIiwiX3RoaXMyIiwiZmlyZSIsInRpdGxlIiwiaHRtbCIsImNvbmNhdCIsImljb24iLCJzaG93Q2FuY2VsQnV0dG9uIiwiY29uZmlybUJ1dHRvbkNvbG9yIiwiY2FuY2VsQnV0dG9uQ29sb3IiLCJjb25maXJtQnV0dG9uVGV4dCIsImNhbmNlbEJ1dHRvblRleHQiLCJyZXN1bHQiLCJpc0NvbmZpcm1lZCIsIkF1dGhvcml6YXRpb24iLCJBVCIsIkFjY2VwdCIsImNvbnNvbGUiLCJsb2ciLCJ0aW1lciIsIl8iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/conference/index.vue?vue&type=script&lang=js&\n");

/***/ }),

/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/course/create.vue?vue&type=script&lang=js&":
/*!**************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/course/create.vue?vue&type=script&lang=js& ***!
  \**************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var survey_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! survey-vue */ \"./node_modules/survey-vue/survey-vue.js\");\n/* harmony import */ var survey_vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(survey_vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _form__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./form */ \"./resources/js/components/admin/course/form.js\");\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = \"function\" == typeof Symbol ? Symbol : {}, a = i.iterator || \"@@iterator\", c = i.asyncIterator || \"@@asyncIterator\", u = i.toStringTag || \"@@toStringTag\"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, \"\"); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, \"_invoke\", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: \"normal\", arg: t.call(e, r) }; } catch (t) { return { type: \"throw\", arg: t }; } } e.wrap = wrap; var h = \"suspendedStart\", l = \"suspendedYield\", f = \"executing\", s = \"completed\", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { [\"next\", \"throw\", \"return\"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if (\"throw\" !== c.type) { var u = c.arg, h = u.value; return h && \"object\" == _typeof(h) && n.call(h, \"__await\") ? e.resolve(h.__await).then(function (t) { invoke(\"next\", t, i, a); }, function (t) { invoke(\"throw\", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke(\"throw\", t, i, a); }); } a(c.arg); } var r; o(this, \"_invoke\", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error(\"Generator is already running\"); if (o === s) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = f; var p = tryCatch(e, r, n); if (\"normal\" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } \"throw\" === p.type && (o = s, n.method = \"throw\", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, \"throw\" === n && e.iterator[\"return\"] && (r.method = \"return\", r.arg = t, maybeInvokeDelegate(e, r), \"throw\" === r.method) || \"return\" !== n && (r.method = \"throw\", r.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), y; var i = tryCatch(o, e.iterator, r.arg); if (\"throw\" === i.type) return r.method = \"throw\", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, \"return\" !== r.method && (r.method = \"next\", r.arg = t), r.delegate = null, y) : a : (r.method = \"throw\", r.arg = new TypeError(\"iterator result is not an object\"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = \"normal\", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: \"root\" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || \"\" === e) { var r = e[a]; if (r) return r.call(e); if (\"function\" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, \"constructor\", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, \"constructor\", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), e.isGeneratorFunction = function (t) { var e = \"function\" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || \"GeneratorFunction\" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, \"GeneratorFunction\")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, \"Generator\"), define(g, a, function () { return this; }), define(g, \"toString\", function () { return \"[object Generator]\"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) \"t\" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = \"throw\", a.arg = e, r.next = n, o && (r.method = \"next\", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if (\"root\" === i.tryLoc) return handle(\"end\"); if (i.tryLoc <= this.prev) { var c = n.call(i, \"catchLoc\"), u = n.call(i, \"finallyLoc\"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error(\"try statement without catch or finally\"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, \"finallyLoc\") && this.prev < o.finallyLoc) { var i = o; break; } } i && (\"break\" === t || \"continue\" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = \"next\", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, \"catch\": function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if (\"throw\" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, \"next\" === this.method && (this.arg = t), y; } }, e; }\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nvar Swal = __webpack_require__(/*! sweetalert2 */ \"./node_modules/sweetalert2/dist/sweetalert2.all.js\");\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n  components: {\n    Survey: survey_vue__WEBPACK_IMPORTED_MODULE_0__.Survey\n  },\n  data: function data() {\n    return {\n      survey: null\n    };\n  },\n  mounted: function mounted() {\n    var _this = this;\n    return _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {\n      var _ref;\n      return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n        while (1) switch (_context2.prev = _context2.next) {\n          case 0:\n            _this.survey = new survey_vue__WEBPACK_IMPORTED_MODULE_0__.Model(_form__WEBPACK_IMPORTED_MODULE_1__.json);\n            _this.survey.onCompleting.add(function (_x, _x2) {\n              return (_ref = _ref || _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(result, options) {\n                return _regeneratorRuntime().wrap(function _callee$(_context) {\n                  while (1) switch (_context.prev = _context.next) {\n                    case 0:\n                      options.allowComplete = false;\n                      _context.next = 3;\n                      return axios.post(\"/api/course/store\", result.data).then(function (response) {\n                        if (response.data) {\n                          console.log(response.data);\n                          Swal.fire({\n                            title: \"Actualizado\",\n                            text: \"El curso ha sido creado con éxito\",\n                            icon: \"success\"\n                            //  timer: 2000,\n                          }).then(function () {\n                            window.location.href = \"/panel-administracion/courses\";\n                          });\n                        } else {\n                          Swal.fire({\n                            title: \"Error!\",\n                            text: \"No se pudo crear el curso. Por favor intente más tarde.\",\n                            icon: \"error\"\n                            //    timer: 3000,\n                          }).then(function (_) {\n                            location.reload();\n                          });\n                        }\n                      });\n                    case 3:\n                    case \"end\":\n                      return _context.stop();\n                  }\n                }, _callee);\n              }))).apply(this, arguments);\n            });\n          case 2:\n          case \"end\":\n            return _context2.stop();\n        }\n      }, _callee2);\n    }))();\n  }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vY291cnNlL2NyZWF0ZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmIiwibWFwcGluZ3MiOiI7Ozs7Ozs7OytDQU9BLHFKQUFBQSxtQkFBQSxZQUFBQSxvQkFBQSxXQUFBQyxDQUFBLFNBQUFDLENBQUEsRUFBQUQsQ0FBQSxPQUFBRSxDQUFBLEdBQUFDLE1BQUEsQ0FBQUMsU0FBQSxFQUFBQyxDQUFBLEdBQUFILENBQUEsQ0FBQUksY0FBQSxFQUFBQyxDQUFBLEdBQUFKLE1BQUEsQ0FBQUssY0FBQSxjQUFBUCxDQUFBLEVBQUFELENBQUEsRUFBQUUsQ0FBQSxJQUFBRCxDQUFBLENBQUFELENBQUEsSUFBQUUsQ0FBQSxDQUFBTyxLQUFBLEtBQUFDLENBQUEsd0JBQUFDLE1BQUEsR0FBQUEsTUFBQSxPQUFBQyxDQUFBLEdBQUFGLENBQUEsQ0FBQUcsUUFBQSxrQkFBQUMsQ0FBQSxHQUFBSixDQUFBLENBQUFLLGFBQUEsdUJBQUFDLENBQUEsR0FBQU4sQ0FBQSxDQUFBTyxXQUFBLDhCQUFBQyxPQUFBakIsQ0FBQSxFQUFBRCxDQUFBLEVBQUFFLENBQUEsV0FBQUMsTUFBQSxDQUFBSyxjQUFBLENBQUFQLENBQUEsRUFBQUQsQ0FBQSxJQUFBUyxLQUFBLEVBQUFQLENBQUEsRUFBQWlCLFVBQUEsTUFBQUMsWUFBQSxNQUFBQyxRQUFBLFNBQUFwQixDQUFBLENBQUFELENBQUEsV0FBQWtCLE1BQUEsbUJBQUFqQixDQUFBLElBQUFpQixNQUFBLFlBQUFBLE9BQUFqQixDQUFBLEVBQUFELENBQUEsRUFBQUUsQ0FBQSxXQUFBRCxDQUFBLENBQUFELENBQUEsSUFBQUUsQ0FBQSxnQkFBQW9CLEtBQUFyQixDQUFBLEVBQUFELENBQUEsRUFBQUUsQ0FBQSxFQUFBRyxDQUFBLFFBQUFLLENBQUEsR0FBQVYsQ0FBQSxJQUFBQSxDQUFBLENBQUFJLFNBQUEsWUFBQW1CLFNBQUEsR0FBQXZCLENBQUEsR0FBQXVCLFNBQUEsRUFBQVgsQ0FBQSxHQUFBVCxNQUFBLENBQUFxQixNQUFBLENBQUFkLENBQUEsQ0FBQU4sU0FBQSxHQUFBVSxDQUFBLE9BQUFXLE9BQUEsQ0FBQXBCLENBQUEsZ0JBQUFFLENBQUEsQ0FBQUssQ0FBQSxlQUFBSCxLQUFBLEVBQUFpQixnQkFBQSxDQUFBekIsQ0FBQSxFQUFBQyxDQUFBLEVBQUFZLENBQUEsTUFBQUYsQ0FBQSxhQUFBZSxTQUFBMUIsQ0FBQSxFQUFBRCxDQUFBLEVBQUFFLENBQUEsbUJBQUEwQixJQUFBLFlBQUFDLEdBQUEsRUFBQTVCLENBQUEsQ0FBQTZCLElBQUEsQ0FBQTlCLENBQUEsRUFBQUUsQ0FBQSxjQUFBRCxDQUFBLGFBQUEyQixJQUFBLFdBQUFDLEdBQUEsRUFBQTVCLENBQUEsUUFBQUQsQ0FBQSxDQUFBc0IsSUFBQSxHQUFBQSxJQUFBLE1BQUFTLENBQUEscUJBQUFDLENBQUEscUJBQUFDLENBQUEsZ0JBQUFDLENBQUEsZ0JBQUFDLENBQUEsZ0JBQUFaLFVBQUEsY0FBQWEsa0JBQUEsY0FBQUMsMkJBQUEsU0FBQUMsQ0FBQSxPQUFBcEIsTUFBQSxDQUFBb0IsQ0FBQSxFQUFBMUIsQ0FBQSxxQ0FBQTJCLENBQUEsR0FBQXBDLE1BQUEsQ0FBQXFDLGNBQUEsRUFBQUMsQ0FBQSxHQUFBRixDQUFBLElBQUFBLENBQUEsQ0FBQUEsQ0FBQSxDQUFBRyxNQUFBLFFBQUFELENBQUEsSUFBQUEsQ0FBQSxLQUFBdkMsQ0FBQSxJQUFBRyxDQUFBLENBQUF5QixJQUFBLENBQUFXLENBQUEsRUFBQTdCLENBQUEsTUFBQTBCLENBQUEsR0FBQUcsQ0FBQSxPQUFBRSxDQUFBLEdBQUFOLDBCQUFBLENBQUFqQyxTQUFBLEdBQUFtQixTQUFBLENBQUFuQixTQUFBLEdBQUFELE1BQUEsQ0FBQXFCLE1BQUEsQ0FBQWMsQ0FBQSxZQUFBTSxzQkFBQTNDLENBQUEsZ0NBQUE0QyxPQUFBLFdBQUE3QyxDQUFBLElBQUFrQixNQUFBLENBQUFqQixDQUFBLEVBQUFELENBQUEsWUFBQUMsQ0FBQSxnQkFBQTZDLE9BQUEsQ0FBQTlDLENBQUEsRUFBQUMsQ0FBQSxzQkFBQThDLGNBQUE5QyxDQUFBLEVBQUFELENBQUEsYUFBQWdELE9BQUE5QyxDQUFBLEVBQUFLLENBQUEsRUFBQUcsQ0FBQSxFQUFBRSxDQUFBLFFBQUFFLENBQUEsR0FBQWEsUUFBQSxDQUFBMUIsQ0FBQSxDQUFBQyxDQUFBLEdBQUFELENBQUEsRUFBQU0sQ0FBQSxtQkFBQU8sQ0FBQSxDQUFBYyxJQUFBLFFBQUFaLENBQUEsR0FBQUYsQ0FBQSxDQUFBZSxHQUFBLEVBQUFFLENBQUEsR0FBQWYsQ0FBQSxDQUFBUCxLQUFBLFNBQUFzQixDQUFBLGdCQUFBa0IsT0FBQSxDQUFBbEIsQ0FBQSxLQUFBMUIsQ0FBQSxDQUFBeUIsSUFBQSxDQUFBQyxDQUFBLGVBQUEvQixDQUFBLENBQUFrRCxPQUFBLENBQUFuQixDQUFBLENBQUFvQixPQUFBLEVBQUFDLElBQUEsV0FBQW5ELENBQUEsSUFBQStDLE1BQUEsU0FBQS9DLENBQUEsRUFBQVMsQ0FBQSxFQUFBRSxDQUFBLGdCQUFBWCxDQUFBLElBQUErQyxNQUFBLFVBQUEvQyxDQUFBLEVBQUFTLENBQUEsRUFBQUUsQ0FBQSxRQUFBWixDQUFBLENBQUFrRCxPQUFBLENBQUFuQixDQUFBLEVBQUFxQixJQUFBLFdBQUFuRCxDQUFBLElBQUFlLENBQUEsQ0FBQVAsS0FBQSxHQUFBUixDQUFBLEVBQUFTLENBQUEsQ0FBQU0sQ0FBQSxnQkFBQWYsQ0FBQSxXQUFBK0MsTUFBQSxVQUFBL0MsQ0FBQSxFQUFBUyxDQUFBLEVBQUFFLENBQUEsU0FBQUEsQ0FBQSxDQUFBRSxDQUFBLENBQUFlLEdBQUEsU0FBQTNCLENBQUEsRUFBQUssQ0FBQSxvQkFBQUUsS0FBQSxXQUFBQSxNQUFBUixDQUFBLEVBQUFJLENBQUEsYUFBQWdELDJCQUFBLGVBQUFyRCxDQUFBLFdBQUFBLENBQUEsRUFBQUUsQ0FBQSxJQUFBOEMsTUFBQSxDQUFBL0MsQ0FBQSxFQUFBSSxDQUFBLEVBQUFMLENBQUEsRUFBQUUsQ0FBQSxnQkFBQUEsQ0FBQSxHQUFBQSxDQUFBLEdBQUFBLENBQUEsQ0FBQWtELElBQUEsQ0FBQUMsMEJBQUEsRUFBQUEsMEJBQUEsSUFBQUEsMEJBQUEscUJBQUEzQixpQkFBQTFCLENBQUEsRUFBQUUsQ0FBQSxFQUFBRyxDQUFBLFFBQUFFLENBQUEsR0FBQXdCLENBQUEsbUJBQUFyQixDQUFBLEVBQUFFLENBQUEsUUFBQUwsQ0FBQSxLQUFBMEIsQ0FBQSxZQUFBcUIsS0FBQSxzQ0FBQS9DLENBQUEsS0FBQTJCLENBQUEsb0JBQUF4QixDQUFBLFFBQUFFLENBQUEsV0FBQUgsS0FBQSxFQUFBUixDQUFBLEVBQUFzRCxJQUFBLGVBQUFsRCxDQUFBLENBQUFtRCxNQUFBLEdBQUE5QyxDQUFBLEVBQUFMLENBQUEsQ0FBQXdCLEdBQUEsR0FBQWpCLENBQUEsVUFBQUUsQ0FBQSxHQUFBVCxDQUFBLENBQUFvRCxRQUFBLE1BQUEzQyxDQUFBLFFBQUFFLENBQUEsR0FBQTBDLG1CQUFBLENBQUE1QyxDQUFBLEVBQUFULENBQUEsT0FBQVcsQ0FBQSxRQUFBQSxDQUFBLEtBQUFtQixDQUFBLG1CQUFBbkIsQ0FBQSxxQkFBQVgsQ0FBQSxDQUFBbUQsTUFBQSxFQUFBbkQsQ0FBQSxDQUFBc0QsSUFBQSxHQUFBdEQsQ0FBQSxDQUFBdUQsS0FBQSxHQUFBdkQsQ0FBQSxDQUFBd0IsR0FBQSxzQkFBQXhCLENBQUEsQ0FBQW1ELE1BQUEsUUFBQWpELENBQUEsS0FBQXdCLENBQUEsUUFBQXhCLENBQUEsR0FBQTJCLENBQUEsRUFBQTdCLENBQUEsQ0FBQXdCLEdBQUEsRUFBQXhCLENBQUEsQ0FBQXdELGlCQUFBLENBQUF4RCxDQUFBLENBQUF3QixHQUFBLHVCQUFBeEIsQ0FBQSxDQUFBbUQsTUFBQSxJQUFBbkQsQ0FBQSxDQUFBeUQsTUFBQSxXQUFBekQsQ0FBQSxDQUFBd0IsR0FBQSxHQUFBdEIsQ0FBQSxHQUFBMEIsQ0FBQSxNQUFBSyxDQUFBLEdBQUFYLFFBQUEsQ0FBQTNCLENBQUEsRUFBQUUsQ0FBQSxFQUFBRyxDQUFBLG9CQUFBaUMsQ0FBQSxDQUFBVixJQUFBLFFBQUFyQixDQUFBLEdBQUFGLENBQUEsQ0FBQWtELElBQUEsR0FBQXJCLENBQUEsR0FBQUYsQ0FBQSxFQUFBTSxDQUFBLENBQUFULEdBQUEsS0FBQU0sQ0FBQSxxQkFBQTFCLEtBQUEsRUFBQTZCLENBQUEsQ0FBQVQsR0FBQSxFQUFBMEIsSUFBQSxFQUFBbEQsQ0FBQSxDQUFBa0QsSUFBQSxrQkFBQWpCLENBQUEsQ0FBQVYsSUFBQSxLQUFBckIsQ0FBQSxHQUFBMkIsQ0FBQSxFQUFBN0IsQ0FBQSxDQUFBbUQsTUFBQSxZQUFBbkQsQ0FBQSxDQUFBd0IsR0FBQSxHQUFBUyxDQUFBLENBQUFULEdBQUEsbUJBQUE2QixvQkFBQTFELENBQUEsRUFBQUUsQ0FBQSxRQUFBRyxDQUFBLEdBQUFILENBQUEsQ0FBQXNELE1BQUEsRUFBQWpELENBQUEsR0FBQVAsQ0FBQSxDQUFBYSxRQUFBLENBQUFSLENBQUEsT0FBQUUsQ0FBQSxLQUFBTixDQUFBLFNBQUFDLENBQUEsQ0FBQXVELFFBQUEscUJBQUFwRCxDQUFBLElBQUFMLENBQUEsQ0FBQWEsUUFBQSxlQUFBWCxDQUFBLENBQUFzRCxNQUFBLGFBQUF0RCxDQUFBLENBQUEyQixHQUFBLEdBQUE1QixDQUFBLEVBQUF5RCxtQkFBQSxDQUFBMUQsQ0FBQSxFQUFBRSxDQUFBLGVBQUFBLENBQUEsQ0FBQXNELE1BQUEsa0JBQUFuRCxDQUFBLEtBQUFILENBQUEsQ0FBQXNELE1BQUEsWUFBQXRELENBQUEsQ0FBQTJCLEdBQUEsT0FBQWtDLFNBQUEsdUNBQUExRCxDQUFBLGlCQUFBOEIsQ0FBQSxNQUFBekIsQ0FBQSxHQUFBaUIsUUFBQSxDQUFBcEIsQ0FBQSxFQUFBUCxDQUFBLENBQUFhLFFBQUEsRUFBQVgsQ0FBQSxDQUFBMkIsR0FBQSxtQkFBQW5CLENBQUEsQ0FBQWtCLElBQUEsU0FBQTFCLENBQUEsQ0FBQXNELE1BQUEsWUFBQXRELENBQUEsQ0FBQTJCLEdBQUEsR0FBQW5CLENBQUEsQ0FBQW1CLEdBQUEsRUFBQTNCLENBQUEsQ0FBQXVELFFBQUEsU0FBQXRCLENBQUEsTUFBQXZCLENBQUEsR0FBQUYsQ0FBQSxDQUFBbUIsR0FBQSxTQUFBakIsQ0FBQSxHQUFBQSxDQUFBLENBQUEyQyxJQUFBLElBQUFyRCxDQUFBLENBQUFGLENBQUEsQ0FBQWdFLFVBQUEsSUFBQXBELENBQUEsQ0FBQUgsS0FBQSxFQUFBUCxDQUFBLENBQUErRCxJQUFBLEdBQUFqRSxDQUFBLENBQUFrRSxPQUFBLGVBQUFoRSxDQUFBLENBQUFzRCxNQUFBLEtBQUF0RCxDQUFBLENBQUFzRCxNQUFBLFdBQUF0RCxDQUFBLENBQUEyQixHQUFBLEdBQUE1QixDQUFBLEdBQUFDLENBQUEsQ0FBQXVELFFBQUEsU0FBQXRCLENBQUEsSUFBQXZCLENBQUEsSUFBQVYsQ0FBQSxDQUFBc0QsTUFBQSxZQUFBdEQsQ0FBQSxDQUFBMkIsR0FBQSxPQUFBa0MsU0FBQSxzQ0FBQTdELENBQUEsQ0FBQXVELFFBQUEsU0FBQXRCLENBQUEsY0FBQWdDLGFBQUFsRSxDQUFBLFFBQUFELENBQUEsS0FBQW9FLE1BQUEsRUFBQW5FLENBQUEsWUFBQUEsQ0FBQSxLQUFBRCxDQUFBLENBQUFxRSxRQUFBLEdBQUFwRSxDQUFBLFdBQUFBLENBQUEsS0FBQUQsQ0FBQSxDQUFBc0UsVUFBQSxHQUFBckUsQ0FBQSxLQUFBRCxDQUFBLENBQUF1RSxRQUFBLEdBQUF0RSxDQUFBLFdBQUF1RSxVQUFBLENBQUFDLElBQUEsQ0FBQXpFLENBQUEsY0FBQTBFLGNBQUF6RSxDQUFBLFFBQUFELENBQUEsR0FBQUMsQ0FBQSxDQUFBMEUsVUFBQSxRQUFBM0UsQ0FBQSxDQUFBNEIsSUFBQSxvQkFBQTVCLENBQUEsQ0FBQTZCLEdBQUEsRUFBQTVCLENBQUEsQ0FBQTBFLFVBQUEsR0FBQTNFLENBQUEsYUFBQXlCLFFBQUF4QixDQUFBLFNBQUF1RSxVQUFBLE1BQUFKLE1BQUEsYUFBQW5FLENBQUEsQ0FBQTRDLE9BQUEsQ0FBQXNCLFlBQUEsY0FBQVMsS0FBQSxpQkFBQWxDLE9BQUExQyxDQUFBLFFBQUFBLENBQUEsV0FBQUEsQ0FBQSxRQUFBRSxDQUFBLEdBQUFGLENBQUEsQ0FBQVksQ0FBQSxPQUFBVixDQUFBLFNBQUFBLENBQUEsQ0FBQTRCLElBQUEsQ0FBQTlCLENBQUEsNEJBQUFBLENBQUEsQ0FBQWlFLElBQUEsU0FBQWpFLENBQUEsT0FBQTZFLEtBQUEsQ0FBQTdFLENBQUEsQ0FBQThFLE1BQUEsU0FBQXZFLENBQUEsT0FBQUcsQ0FBQSxZQUFBdUQsS0FBQSxhQUFBMUQsQ0FBQSxHQUFBUCxDQUFBLENBQUE4RSxNQUFBLE9BQUF6RSxDQUFBLENBQUF5QixJQUFBLENBQUE5QixDQUFBLEVBQUFPLENBQUEsVUFBQTBELElBQUEsQ0FBQXhELEtBQUEsR0FBQVQsQ0FBQSxDQUFBTyxDQUFBLEdBQUEwRCxJQUFBLENBQUFWLElBQUEsT0FBQVUsSUFBQSxTQUFBQSxJQUFBLENBQUF4RCxLQUFBLEdBQUFSLENBQUEsRUFBQWdFLElBQUEsQ0FBQVYsSUFBQSxPQUFBVSxJQUFBLFlBQUF2RCxDQUFBLENBQUF1RCxJQUFBLEdBQUF2RCxDQUFBLGdCQUFBcUQsU0FBQSxDQUFBZCxPQUFBLENBQUFqRCxDQUFBLGtDQUFBb0MsaUJBQUEsQ0FBQWhDLFNBQUEsR0FBQWlDLDBCQUFBLEVBQUE5QixDQUFBLENBQUFvQyxDQUFBLG1CQUFBbEMsS0FBQSxFQUFBNEIsMEJBQUEsRUFBQWpCLFlBQUEsU0FBQWIsQ0FBQSxDQUFBOEIsMEJBQUEsbUJBQUE1QixLQUFBLEVBQUEyQixpQkFBQSxFQUFBaEIsWUFBQSxTQUFBZ0IsaUJBQUEsQ0FBQTJDLFdBQUEsR0FBQTdELE1BQUEsQ0FBQW1CLDBCQUFBLEVBQUFyQixDQUFBLHdCQUFBaEIsQ0FBQSxDQUFBZ0YsbUJBQUEsYUFBQS9FLENBQUEsUUFBQUQsQ0FBQSx3QkFBQUMsQ0FBQSxJQUFBQSxDQUFBLENBQUFnRixXQUFBLFdBQUFqRixDQUFBLEtBQUFBLENBQUEsS0FBQW9DLGlCQUFBLDZCQUFBcEMsQ0FBQSxDQUFBK0UsV0FBQSxJQUFBL0UsQ0FBQSxDQUFBa0YsSUFBQSxPQUFBbEYsQ0FBQSxDQUFBbUYsSUFBQSxhQUFBbEYsQ0FBQSxXQUFBRSxNQUFBLENBQUFpRixjQUFBLEdBQUFqRixNQUFBLENBQUFpRixjQUFBLENBQUFuRixDQUFBLEVBQUFvQywwQkFBQSxLQUFBcEMsQ0FBQSxDQUFBb0YsU0FBQSxHQUFBaEQsMEJBQUEsRUFBQW5CLE1BQUEsQ0FBQWpCLENBQUEsRUFBQWUsQ0FBQSx5QkFBQWYsQ0FBQSxDQUFBRyxTQUFBLEdBQUFELE1BQUEsQ0FBQXFCLE1BQUEsQ0FBQW1CLENBQUEsR0FBQTFDLENBQUEsS0FBQUQsQ0FBQSxDQUFBc0YsS0FBQSxhQUFBckYsQ0FBQSxhQUFBa0QsT0FBQSxFQUFBbEQsQ0FBQSxPQUFBMkMscUJBQUEsQ0FBQUcsYUFBQSxDQUFBM0MsU0FBQSxHQUFBYyxNQUFBLENBQUE2QixhQUFBLENBQUEzQyxTQUFBLEVBQUFVLENBQUEsaUNBQUFkLENBQUEsQ0FBQStDLGFBQUEsR0FBQUEsYUFBQSxFQUFBL0MsQ0FBQSxDQUFBdUYsS0FBQSxhQUFBdEYsQ0FBQSxFQUFBQyxDQUFBLEVBQUFHLENBQUEsRUFBQUUsQ0FBQSxFQUFBRyxDQUFBLGVBQUFBLENBQUEsS0FBQUEsQ0FBQSxHQUFBOEUsT0FBQSxPQUFBNUUsQ0FBQSxPQUFBbUMsYUFBQSxDQUFBekIsSUFBQSxDQUFBckIsQ0FBQSxFQUFBQyxDQUFBLEVBQUFHLENBQUEsRUFBQUUsQ0FBQSxHQUFBRyxDQUFBLFVBQUFWLENBQUEsQ0FBQWdGLG1CQUFBLENBQUE5RSxDQUFBLElBQUFVLENBQUEsR0FBQUEsQ0FBQSxDQUFBcUQsSUFBQSxHQUFBYixJQUFBLFdBQUFuRCxDQUFBLFdBQUFBLENBQUEsQ0FBQXNELElBQUEsR0FBQXRELENBQUEsQ0FBQVEsS0FBQSxHQUFBRyxDQUFBLENBQUFxRCxJQUFBLFdBQUFyQixxQkFBQSxDQUFBRCxDQUFBLEdBQUF6QixNQUFBLENBQUF5QixDQUFBLEVBQUEzQixDQUFBLGdCQUFBRSxNQUFBLENBQUF5QixDQUFBLEVBQUEvQixDQUFBLGlDQUFBTSxNQUFBLENBQUF5QixDQUFBLDZEQUFBM0MsQ0FBQSxDQUFBeUYsSUFBQSxhQUFBeEYsQ0FBQSxRQUFBRCxDQUFBLEdBQUFHLE1BQUEsQ0FBQUYsQ0FBQSxHQUFBQyxDQUFBLGdCQUFBRyxDQUFBLElBQUFMLENBQUEsRUFBQUUsQ0FBQSxDQUFBdUUsSUFBQSxDQUFBcEUsQ0FBQSxVQUFBSCxDQUFBLENBQUF3RixPQUFBLGFBQUF6QixLQUFBLFdBQUEvRCxDQUFBLENBQUE0RSxNQUFBLFNBQUE3RSxDQUFBLEdBQUFDLENBQUEsQ0FBQXlGLEdBQUEsUUFBQTFGLENBQUEsSUFBQUQsQ0FBQSxTQUFBaUUsSUFBQSxDQUFBeEQsS0FBQSxHQUFBUixDQUFBLEVBQUFnRSxJQUFBLENBQUFWLElBQUEsT0FBQVUsSUFBQSxXQUFBQSxJQUFBLENBQUFWLElBQUEsT0FBQVUsSUFBQSxRQUFBakUsQ0FBQSxDQUFBMEMsTUFBQSxHQUFBQSxNQUFBLEVBQUFqQixPQUFBLENBQUFyQixTQUFBLEtBQUE2RSxXQUFBLEVBQUF4RCxPQUFBLEVBQUFtRCxLQUFBLFdBQUFBLE1BQUE1RSxDQUFBLGFBQUE0RixJQUFBLFdBQUEzQixJQUFBLFdBQUFOLElBQUEsUUFBQUMsS0FBQSxHQUFBM0QsQ0FBQSxPQUFBc0QsSUFBQSxZQUFBRSxRQUFBLGNBQUFELE1BQUEsZ0JBQUEzQixHQUFBLEdBQUE1QixDQUFBLE9BQUF1RSxVQUFBLENBQUEzQixPQUFBLENBQUE2QixhQUFBLElBQUExRSxDQUFBLFdBQUFFLENBQUEsa0JBQUFBLENBQUEsQ0FBQTJGLE1BQUEsT0FBQXhGLENBQUEsQ0FBQXlCLElBQUEsT0FBQTVCLENBQUEsTUFBQTJFLEtBQUEsRUFBQTNFLENBQUEsQ0FBQTRGLEtBQUEsY0FBQTVGLENBQUEsSUFBQUQsQ0FBQSxNQUFBOEYsSUFBQSxXQUFBQSxLQUFBLFNBQUF4QyxJQUFBLFdBQUF0RCxDQUFBLFFBQUF1RSxVQUFBLElBQUFHLFVBQUEsa0JBQUExRSxDQUFBLENBQUEyQixJQUFBLFFBQUEzQixDQUFBLENBQUE0QixHQUFBLGNBQUFtRSxJQUFBLEtBQUFuQyxpQkFBQSxXQUFBQSxrQkFBQTdELENBQUEsYUFBQXVELElBQUEsUUFBQXZELENBQUEsTUFBQUUsQ0FBQSxrQkFBQStGLE9BQUE1RixDQUFBLEVBQUFFLENBQUEsV0FBQUssQ0FBQSxDQUFBZ0IsSUFBQSxZQUFBaEIsQ0FBQSxDQUFBaUIsR0FBQSxHQUFBN0IsQ0FBQSxFQUFBRSxDQUFBLENBQUErRCxJQUFBLEdBQUE1RCxDQUFBLEVBQUFFLENBQUEsS0FBQUwsQ0FBQSxDQUFBc0QsTUFBQSxXQUFBdEQsQ0FBQSxDQUFBMkIsR0FBQSxHQUFBNUIsQ0FBQSxLQUFBTSxDQUFBLGFBQUFBLENBQUEsUUFBQWlFLFVBQUEsQ0FBQU0sTUFBQSxNQUFBdkUsQ0FBQSxTQUFBQSxDQUFBLFFBQUFHLENBQUEsUUFBQThELFVBQUEsQ0FBQWpFLENBQUEsR0FBQUssQ0FBQSxHQUFBRixDQUFBLENBQUFpRSxVQUFBLGlCQUFBakUsQ0FBQSxDQUFBMEQsTUFBQSxTQUFBNkIsTUFBQSxhQUFBdkYsQ0FBQSxDQUFBMEQsTUFBQSxTQUFBd0IsSUFBQSxRQUFBOUUsQ0FBQSxHQUFBVCxDQUFBLENBQUF5QixJQUFBLENBQUFwQixDQUFBLGVBQUFNLENBQUEsR0FBQVgsQ0FBQSxDQUFBeUIsSUFBQSxDQUFBcEIsQ0FBQSxxQkFBQUksQ0FBQSxJQUFBRSxDQUFBLGFBQUE0RSxJQUFBLEdBQUFsRixDQUFBLENBQUEyRCxRQUFBLFNBQUE0QixNQUFBLENBQUF2RixDQUFBLENBQUEyRCxRQUFBLGdCQUFBdUIsSUFBQSxHQUFBbEYsQ0FBQSxDQUFBNEQsVUFBQSxTQUFBMkIsTUFBQSxDQUFBdkYsQ0FBQSxDQUFBNEQsVUFBQSxjQUFBeEQsQ0FBQSxhQUFBOEUsSUFBQSxHQUFBbEYsQ0FBQSxDQUFBMkQsUUFBQSxTQUFBNEIsTUFBQSxDQUFBdkYsQ0FBQSxDQUFBMkQsUUFBQSxxQkFBQXJELENBQUEsWUFBQXNDLEtBQUEscURBQUFzQyxJQUFBLEdBQUFsRixDQUFBLENBQUE0RCxVQUFBLFNBQUEyQixNQUFBLENBQUF2RixDQUFBLENBQUE0RCxVQUFBLFlBQUFSLE1BQUEsV0FBQUEsT0FBQTdELENBQUEsRUFBQUQsQ0FBQSxhQUFBRSxDQUFBLFFBQUFzRSxVQUFBLENBQUFNLE1BQUEsTUFBQTVFLENBQUEsU0FBQUEsQ0FBQSxRQUFBSyxDQUFBLFFBQUFpRSxVQUFBLENBQUF0RSxDQUFBLE9BQUFLLENBQUEsQ0FBQTZELE1BQUEsU0FBQXdCLElBQUEsSUFBQXZGLENBQUEsQ0FBQXlCLElBQUEsQ0FBQXZCLENBQUEsd0JBQUFxRixJQUFBLEdBQUFyRixDQUFBLENBQUErRCxVQUFBLFFBQUE1RCxDQUFBLEdBQUFILENBQUEsYUFBQUcsQ0FBQSxpQkFBQVQsQ0FBQSxtQkFBQUEsQ0FBQSxLQUFBUyxDQUFBLENBQUEwRCxNQUFBLElBQUFwRSxDQUFBLElBQUFBLENBQUEsSUFBQVUsQ0FBQSxDQUFBNEQsVUFBQSxLQUFBNUQsQ0FBQSxjQUFBRSxDQUFBLEdBQUFGLENBQUEsR0FBQUEsQ0FBQSxDQUFBaUUsVUFBQSxjQUFBL0QsQ0FBQSxDQUFBZ0IsSUFBQSxHQUFBM0IsQ0FBQSxFQUFBVyxDQUFBLENBQUFpQixHQUFBLEdBQUE3QixDQUFBLEVBQUFVLENBQUEsU0FBQThDLE1BQUEsZ0JBQUFTLElBQUEsR0FBQXZELENBQUEsQ0FBQTRELFVBQUEsRUFBQW5DLENBQUEsU0FBQStELFFBQUEsQ0FBQXRGLENBQUEsTUFBQXNGLFFBQUEsV0FBQUEsU0FBQWpHLENBQUEsRUFBQUQsQ0FBQSxvQkFBQUMsQ0FBQSxDQUFBMkIsSUFBQSxRQUFBM0IsQ0FBQSxDQUFBNEIsR0FBQSxxQkFBQTVCLENBQUEsQ0FBQTJCLElBQUEsbUJBQUEzQixDQUFBLENBQUEyQixJQUFBLFFBQUFxQyxJQUFBLEdBQUFoRSxDQUFBLENBQUE0QixHQUFBLGdCQUFBNUIsQ0FBQSxDQUFBMkIsSUFBQSxTQUFBb0UsSUFBQSxRQUFBbkUsR0FBQSxHQUFBNUIsQ0FBQSxDQUFBNEIsR0FBQSxPQUFBMkIsTUFBQSxrQkFBQVMsSUFBQSx5QkFBQWhFLENBQUEsQ0FBQTJCLElBQUEsSUFBQTVCLENBQUEsVUFBQWlFLElBQUEsR0FBQWpFLENBQUEsR0FBQW1DLENBQUEsS0FBQWdFLE1BQUEsV0FBQUEsT0FBQWxHLENBQUEsYUFBQUQsQ0FBQSxRQUFBd0UsVUFBQSxDQUFBTSxNQUFBLE1BQUE5RSxDQUFBLFNBQUFBLENBQUEsUUFBQUUsQ0FBQSxRQUFBc0UsVUFBQSxDQUFBeEUsQ0FBQSxPQUFBRSxDQUFBLENBQUFvRSxVQUFBLEtBQUFyRSxDQUFBLGNBQUFpRyxRQUFBLENBQUFoRyxDQUFBLENBQUF5RSxVQUFBLEVBQUF6RSxDQUFBLENBQUFxRSxRQUFBLEdBQUFHLGFBQUEsQ0FBQXhFLENBQUEsR0FBQWlDLENBQUEseUJBQUFpRSxPQUFBbkcsQ0FBQSxhQUFBRCxDQUFBLFFBQUF3RSxVQUFBLENBQUFNLE1BQUEsTUFBQTlFLENBQUEsU0FBQUEsQ0FBQSxRQUFBRSxDQUFBLFFBQUFzRSxVQUFBLENBQUF4RSxDQUFBLE9BQUFFLENBQUEsQ0FBQWtFLE1BQUEsS0FBQW5FLENBQUEsUUFBQUksQ0FBQSxHQUFBSCxDQUFBLENBQUF5RSxVQUFBLGtCQUFBdEUsQ0FBQSxDQUFBdUIsSUFBQSxRQUFBckIsQ0FBQSxHQUFBRixDQUFBLENBQUF3QixHQUFBLEVBQUE2QyxhQUFBLENBQUF4RSxDQUFBLFlBQUFLLENBQUEsZ0JBQUErQyxLQUFBLDhCQUFBK0MsYUFBQSxXQUFBQSxjQUFBckcsQ0FBQSxFQUFBRSxDQUFBLEVBQUFHLENBQUEsZ0JBQUFvRCxRQUFBLEtBQUE1QyxRQUFBLEVBQUE2QixNQUFBLENBQUExQyxDQUFBLEdBQUFnRSxVQUFBLEVBQUE5RCxDQUFBLEVBQUFnRSxPQUFBLEVBQUE3RCxDQUFBLG9CQUFBbUQsTUFBQSxVQUFBM0IsR0FBQSxHQUFBNUIsQ0FBQSxHQUFBa0MsQ0FBQSxPQUFBbkMsQ0FBQTtBQUFBLFNBQUFzRyxtQkFBQUMsR0FBQSxFQUFBckQsT0FBQSxFQUFBc0QsTUFBQSxFQUFBQyxLQUFBLEVBQUFDLE1BQUEsRUFBQUMsR0FBQSxFQUFBOUUsR0FBQSxjQUFBK0UsSUFBQSxHQUFBTCxHQUFBLENBQUFJLEdBQUEsRUFBQTlFLEdBQUEsT0FBQXBCLEtBQUEsR0FBQW1HLElBQUEsQ0FBQW5HLEtBQUEsV0FBQW9HLEtBQUEsSUFBQUwsTUFBQSxDQUFBSyxLQUFBLGlCQUFBRCxJQUFBLENBQUFyRCxJQUFBLElBQUFMLE9BQUEsQ0FBQXpDLEtBQUEsWUFBQStFLE9BQUEsQ0FBQXRDLE9BQUEsQ0FBQXpDLEtBQUEsRUFBQTJDLElBQUEsQ0FBQXFELEtBQUEsRUFBQUMsTUFBQTtBQUFBLFNBQUFJLGtCQUFBQyxFQUFBLDZCQUFBQyxJQUFBLFNBQUFDLElBQUEsR0FBQUMsU0FBQSxhQUFBMUIsT0FBQSxXQUFBdEMsT0FBQSxFQUFBc0QsTUFBQSxRQUFBRCxHQUFBLEdBQUFRLEVBQUEsQ0FBQUksS0FBQSxDQUFBSCxJQUFBLEVBQUFDLElBQUEsWUFBQVIsTUFBQWhHLEtBQUEsSUFBQTZGLGtCQUFBLENBQUFDLEdBQUEsRUFBQXJELE9BQUEsRUFBQXNELE1BQUEsRUFBQUMsS0FBQSxFQUFBQyxNQUFBLFVBQUFqRyxLQUFBLGNBQUFpRyxPQUFBVSxHQUFBLElBQUFkLGtCQUFBLENBQUFDLEdBQUEsRUFBQXJELE9BQUEsRUFBQXNELE1BQUEsRUFBQUMsS0FBQSxFQUFBQyxNQUFBLFdBQUFVLEdBQUEsS0FBQVgsS0FBQSxDQUFBWSxTQUFBO0FBQUE7QUFDQSxJQUFBRSxJQUFBLEdBQUFDLG1CQUFBO0FBQ0E7QUFFQTtFQUNBRSxVQUFBO0lBQUFDLE1BQUEsRUFBQUwsOENBQUFLO0VBQUE7RUFDQUMsSUFBQSxXQUFBQSxLQUFBO0lBQUE7TUFDQUMsTUFBQTtJQUNBO0VBQUE7RUFFQUMsT0FBQSxXQUFBQSxRQUFBO0lBQUEsSUFBQUMsS0FBQTtJQUFBLE9BQUFqQixpQkFBQSxlQUFBL0csbUJBQUEsR0FBQW9GLElBQUEsVUFBQTZDLFNBQUE7TUFBQSxJQUFBQyxJQUFBO01BQUEsT0FBQWxJLG1CQUFBLEdBQUF1QixJQUFBLFVBQUE0RyxVQUFBQyxTQUFBO1FBQUEsa0JBQUFBLFNBQUEsQ0FBQXZDLElBQUEsR0FBQXVDLFNBQUEsQ0FBQWxFLElBQUE7VUFBQTtZQUVBOEQsS0FBQSxDQUFBRixNQUFBLE9BQUFQLDZDQUFBLENBQUFHLHVDQUFBO1lBRUFNLEtBQUEsQ0FBQUYsTUFBQSxDQUFBUSxZQUFBLENBQUFDLEdBQUEsV0FBQUMsRUFBQSxFQUFBQyxHQUFBO2NBQUEsUUFBQVAsSUFBQSxHQUFBQSxJQUFBLElBQUFuQixpQkFBQSxlQUFBL0csbUJBQUEsR0FBQW9GLElBQUEsVUFBQXNELFFBQUFDLE1BQUEsRUFBQUMsT0FBQTtnQkFBQSxPQUFBNUksbUJBQUEsR0FBQXVCLElBQUEsVUFBQXNILFNBQUFDLFFBQUE7a0JBQUEsa0JBQUFBLFFBQUEsQ0FBQWpELElBQUEsR0FBQWlELFFBQUEsQ0FBQTVFLElBQUE7b0JBQUE7c0JBQ0EwRSxPQUFBLENBQUFHLGFBQUE7c0JBQUFELFFBQUEsQ0FBQTVFLElBQUE7c0JBQUEsT0FDQThFLEtBQUEsQ0FDQUMsSUFBQSxzQkFBQU4sTUFBQSxDQUFBZCxJQUFBLEVBQ0F4RSxJQUFBLFdBQUE2RixRQUFBO3dCQUNBLElBQUFBLFFBQUEsQ0FBQXJCLElBQUE7MEJBQ0FzQixPQUFBLENBQUFDLEdBQUEsQ0FBQUYsUUFBQSxDQUFBckIsSUFBQTswQkFDQUwsSUFBQSxDQUFBNkIsSUFBQTs0QkFDQUMsS0FBQTs0QkFDQUMsSUFBQTs0QkFDQUMsSUFBQTs0QkFDQTswQkFDQSxHQUFBbkcsSUFBQTs0QkFDQW9HLE1BQUEsQ0FBQUMsUUFBQSxDQUFBQyxJQUFBLEdBQ0E7MEJBQ0E7d0JBQ0E7MEJBQ0FuQyxJQUFBLENBQUE2QixJQUFBOzRCQUNBQyxLQUFBOzRCQUNBQyxJQUFBLEVBQ0E7NEJBQ0FDLElBQUE7NEJBQ0E7MEJBQ0EsR0FBQW5HLElBQUEsV0FBQXVHLENBQUE7NEJBQ0FGLFFBQUEsQ0FBQUcsTUFBQTswQkFDQTt3QkFDQTtzQkFDQTtvQkFBQTtvQkFBQTtzQkFBQSxPQUFBZixRQUFBLENBQUE5QyxJQUFBO2tCQUFBO2dCQUFBLEdBQUEwQyxPQUFBO2NBQUEsQ0FDQSxJQUFBdEIsS0FBQSxPQUFBRCxTQUFBO1lBQUE7VUFBQTtVQUFBO1lBQUEsT0FBQWlCLFNBQUEsQ0FBQXBDLElBQUE7UUFBQTtNQUFBLEdBQUFpQyxRQUFBO0lBQUE7RUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vL3Jlc291cmNlcy9qcy9jb21wb25lbnRzL2FkbWluL2NvdXJzZS9jcmVhdGUudnVlPzFjOGIiXSwic291cmNlc0NvbnRlbnQiOlsiPHRlbXBsYXRlPlxuICAgIDxkaXYgdi1pZj1cInN1cnZleVwiPlxuICAgICAgICA8U3VydmV5IDpzdXJ2ZXk9XCJzdXJ2ZXlcIj48L1N1cnZleT5cbiAgICA8L2Rpdj5cbiAgPC90ZW1wbGF0ZT5cbiAgICBcbiAgICA8c2NyaXB0PlxuICBpbXBvcnQgKiBhcyBTdXJ2ZXlWdWUgZnJvbSAnc3VydmV5LXZ1ZSc7XG4gIGNvbnN0IFN3YWwgPSByZXF1aXJlKFwic3dlZXRhbGVydDJcIik7XG4gIGltcG9ydCB7IGpzb24gfSBmcm9tIFwiLi9mb3JtXCI7XG4gIFxuICBleHBvcnQgZGVmYXVsdCB7XG4gICAgY29tcG9uZW50czogeyBTdXJ2ZXk6IFN1cnZleVZ1ZS5TdXJ2ZXkgfSxcbiAgICBkYXRhOiAoKSA9PiAoe1xuICAgICAgc3VydmV5OiBudWxsLFxuICAgIH0pLFxuICBcbiAgICBhc3luYyBtb3VudGVkKCkge1xuICBcbiAgICAgIHRoaXMuc3VydmV5ID0gbmV3IFN1cnZleVZ1ZS5Nb2RlbChqc29uKTtcbiAgXG4gICAgICB0aGlzLnN1cnZleS5vbkNvbXBsZXRpbmcuYWRkKGFzeW5jIGZ1bmN0aW9uIChyZXN1bHQsIG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucy5hbGxvd0NvbXBsZXRlID0gZmFsc2U7XG4gICAgICAgIGF3YWl0IGF4aW9zXG4gICAgICAgIC5wb3N0KFwiL2FwaS9jb3Vyc2Uvc3RvcmVcIiwgcmVzdWx0LmRhdGEpXG4gICAgICAgIC50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhyZXNwb25zZS5kYXRhKTtcbiAgICAgICAgICAgIFN3YWwuZmlyZSh7XG4gICAgICAgICAgICAgIHRpdGxlOiBcIkFjdHVhbGl6YWRvXCIsXG4gICAgICAgICAgICAgIHRleHQ6IFwiRWwgY3Vyc28gaGEgc2lkbyBjcmVhZG8gY29uIMOpeGl0b1wiLFxuICAgICAgICAgICAgICBpY29uOiBcInN1Y2Nlc3NcIixcbiAgICAgICAgICAgIC8vICB0aW1lcjogMjAwMCxcbiAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9XG4gICAgICAgICAgICAgICAgXCIvcGFuZWwtYWRtaW5pc3RyYWNpb24vY291cnNlc1wiO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIFN3YWwuZmlyZSh7XG4gICAgICAgICAgICAgIHRpdGxlOiBcIkVycm9yIVwiLFxuICAgICAgICAgICAgICB0ZXh0OlxuICAgICAgICAgICAgICAgIFwiTm8gc2UgcHVkbyBjcmVhciBlbCBjdXJzby4gUG9yIGZhdm9yIGludGVudGUgbcOhcyB0YXJkZS5cIixcbiAgICAgICAgICAgICAgaWNvbjogXCJlcnJvclwiLFxuICAgICAgICAgIC8vICAgIHRpbWVyOiAzMDAwLFxuICAgICAgICAgICAgfSkudGhlbigoXykgPT4ge1xuICAgICAgICAgICAgICBsb2NhdGlvbi5yZWxvYWQoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9LFxuICB9O1xuICA8L3NjcmlwdD5cbiAgICAiXSwibmFtZXMiOlsiX3JlZ2VuZXJhdG9yUnVudGltZSIsImUiLCJ0IiwiciIsIk9iamVjdCIsInByb3RvdHlwZSIsIm4iLCJoYXNPd25Qcm9wZXJ0eSIsIm8iLCJkZWZpbmVQcm9wZXJ0eSIsInZhbHVlIiwiaSIsIlN5bWJvbCIsImEiLCJpdGVyYXRvciIsImMiLCJhc3luY0l0ZXJhdG9yIiwidSIsInRvU3RyaW5nVGFnIiwiZGVmaW5lIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwid3JhcCIsIkdlbmVyYXRvciIsImNyZWF0ZSIsIkNvbnRleHQiLCJtYWtlSW52b2tlTWV0aG9kIiwidHJ5Q2F0Y2giLCJ0eXBlIiwiYXJnIiwiY2FsbCIsImgiLCJsIiwiZiIsInMiLCJ5IiwiR2VuZXJhdG9yRnVuY3Rpb24iLCJHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSIsInAiLCJkIiwiZ2V0UHJvdG90eXBlT2YiLCJ2IiwidmFsdWVzIiwiZyIsImRlZmluZUl0ZXJhdG9yTWV0aG9kcyIsImZvckVhY2giLCJfaW52b2tlIiwiQXN5bmNJdGVyYXRvciIsImludm9rZSIsIl90eXBlb2YiLCJyZXNvbHZlIiwiX19hd2FpdCIsInRoZW4iLCJjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZyIsIkVycm9yIiwiZG9uZSIsIm1ldGhvZCIsImRlbGVnYXRlIiwibWF5YmVJbnZva2VEZWxlZ2F0ZSIsInNlbnQiLCJfc2VudCIsImRpc3BhdGNoRXhjZXB0aW9uIiwiYWJydXB0IiwiVHlwZUVycm9yIiwicmVzdWx0TmFtZSIsIm5leHQiLCJuZXh0TG9jIiwicHVzaFRyeUVudHJ5IiwidHJ5TG9jIiwiY2F0Y2hMb2MiLCJmaW5hbGx5TG9jIiwiYWZ0ZXJMb2MiLCJ0cnlFbnRyaWVzIiwicHVzaCIsInJlc2V0VHJ5RW50cnkiLCJjb21wbGV0aW9uIiwicmVzZXQiLCJpc05hTiIsImxlbmd0aCIsImRpc3BsYXlOYW1lIiwiaXNHZW5lcmF0b3JGdW5jdGlvbiIsImNvbnN0cnVjdG9yIiwibmFtZSIsIm1hcmsiLCJzZXRQcm90b3R5cGVPZiIsIl9fcHJvdG9fXyIsImF3cmFwIiwiYXN5bmMiLCJQcm9taXNlIiwia2V5cyIsInJldmVyc2UiLCJwb3AiLCJwcmV2IiwiY2hhckF0Iiwic2xpY2UiLCJzdG9wIiwicnZhbCIsImhhbmRsZSIsImNvbXBsZXRlIiwiZmluaXNoIiwiX2NhdGNoIiwiZGVsZWdhdGVZaWVsZCIsImFzeW5jR2VuZXJhdG9yU3RlcCIsImdlbiIsInJlamVjdCIsIl9uZXh0IiwiX3Rocm93Iiwia2V5IiwiaW5mbyIsImVycm9yIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJmbiIsInNlbGYiLCJhcmdzIiwiYXJndW1lbnRzIiwiYXBwbHkiLCJlcnIiLCJ1bmRlZmluZWQiLCJTdXJ2ZXlWdWUiLCJTd2FsIiwicmVxdWlyZSIsImpzb24iLCJjb21wb25lbnRzIiwiU3VydmV5IiwiZGF0YSIsInN1cnZleSIsIm1vdW50ZWQiLCJfdGhpcyIsIl9jYWxsZWUyIiwiX3JlZiIsIl9jYWxsZWUyJCIsIl9jb250ZXh0MiIsIk1vZGVsIiwib25Db21wbGV0aW5nIiwiYWRkIiwiX3giLCJfeDIiLCJfY2FsbGVlIiwicmVzdWx0Iiwib3B0aW9ucyIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJhbGxvd0NvbXBsZXRlIiwiYXhpb3MiLCJwb3N0IiwicmVzcG9uc2UiLCJjb25zb2xlIiwibG9nIiwiZmlyZSIsInRpdGxlIiwidGV4dCIsImljb24iLCJ3aW5kb3ciLCJsb2NhdGlvbiIsImhyZWYiLCJfIiwicmVsb2FkIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/course/create.vue?vue&type=script&lang=js&\n");

/***/ }),

/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/course/edit.vue?vue&type=script&lang=js&":
/*!************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/course/edit.vue?vue&type=script&lang=js& ***!
  \************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var survey_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! survey-vue */ \"./node_modules/survey-vue/survey-vue.js\");\n/* harmony import */ var survey_vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(survey_vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _form__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./form */ \"./resources/js/components/admin/course/form.js\");\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = \"function\" == typeof Symbol ? Symbol : {}, a = i.iterator || \"@@iterator\", c = i.asyncIterator || \"@@asyncIterator\", u = i.toStringTag || \"@@toStringTag\"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, \"\"); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, \"_invoke\", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: \"normal\", arg: t.call(e, r) }; } catch (t) { return { type: \"throw\", arg: t }; } } e.wrap = wrap; var h = \"suspendedStart\", l = \"suspendedYield\", f = \"executing\", s = \"completed\", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { [\"next\", \"throw\", \"return\"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if (\"throw\" !== c.type) { var u = c.arg, h = u.value; return h && \"object\" == _typeof(h) && n.call(h, \"__await\") ? e.resolve(h.__await).then(function (t) { invoke(\"next\", t, i, a); }, function (t) { invoke(\"throw\", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke(\"throw\", t, i, a); }); } a(c.arg); } var r; o(this, \"_invoke\", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error(\"Generator is already running\"); if (o === s) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = f; var p = tryCatch(e, r, n); if (\"normal\" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } \"throw\" === p.type && (o = s, n.method = \"throw\", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, \"throw\" === n && e.iterator[\"return\"] && (r.method = \"return\", r.arg = t, maybeInvokeDelegate(e, r), \"throw\" === r.method) || \"return\" !== n && (r.method = \"throw\", r.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), y; var i = tryCatch(o, e.iterator, r.arg); if (\"throw\" === i.type) return r.method = \"throw\", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, \"return\" !== r.method && (r.method = \"next\", r.arg = t), r.delegate = null, y) : a : (r.method = \"throw\", r.arg = new TypeError(\"iterator result is not an object\"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = \"normal\", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: \"root\" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || \"\" === e) { var r = e[a]; if (r) return r.call(e); if (\"function\" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, \"constructor\", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, \"constructor\", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), e.isGeneratorFunction = function (t) { var e = \"function\" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || \"GeneratorFunction\" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, \"GeneratorFunction\")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, \"Generator\"), define(g, a, function () { return this; }), define(g, \"toString\", function () { return \"[object Generator]\"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) \"t\" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = \"throw\", a.arg = e, r.next = n, o && (r.method = \"next\", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if (\"root\" === i.tryLoc) return handle(\"end\"); if (i.tryLoc <= this.prev) { var c = n.call(i, \"catchLoc\"), u = n.call(i, \"finallyLoc\"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error(\"try statement without catch or finally\"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, \"finallyLoc\") && this.prev < o.finallyLoc) { var i = o; break; } } i && (\"break\" === t || \"continue\" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = \"next\", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, \"catch\": function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if (\"throw\" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, \"next\" === this.method && (this.arg = t), y; } }, e; }\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nvar Swal = __webpack_require__(/*! sweetalert2 */ \"./node_modules/sweetalert2/dist/sweetalert2.all.js\");\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n  components: {\n    Survey: survey_vue__WEBPACK_IMPORTED_MODULE_0__.Survey\n  },\n  data: function data() {\n    return {\n      survey: null,\n      data: null\n    };\n  },\n  mounted: function mounted() {\n    var _this = this;\n    return _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {\n      var _ref;\n      var self;\n      return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n        while (1) switch (_context2.prev = _context2.next) {\n          case 0:\n            self = _this;\n            _context2.next = 3;\n            return axios.get(\"/api/course/edit/\" + _this.$route.params.id, {\n              headers: {\n                Authorization: AT,\n                Accept: \"application/json\"\n              }\n            }).then(function (response) {\n              _this.data = response.data;\n              console.log(_this.data);\n            });\n          case 3:\n            _this.survey = new survey_vue__WEBPACK_IMPORTED_MODULE_0__.Model(_form__WEBPACK_IMPORTED_MODULE_1__.json);\n            _this.survey.onCompleting.add(function (_x, _x2) {\n              return (_ref = _ref || _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(result, options) {\n                return _regeneratorRuntime().wrap(function _callee$(_context) {\n                  while (1) switch (_context.prev = _context.next) {\n                    case 0:\n                      options.allowComplete = false;\n                      _context.next = 3;\n                      return axios.post(\"/api/course/update/\" + self.$route.params.id, result.data).then(function (response) {\n                        console.log(response.data);\n                        if (response.data) {\n                          Swal.fire({\n                            title: \"Actualizado\",\n                            text: \"El curso ha sido actualizado con éxito\",\n                            icon: \"success\"\n                            //  timer: 2000,\n                          }).then(function () {\n                            window.location.href = \"/panel-administracion/cursos\";\n                          });\n                        } else {\n                          Swal.fire({\n                            title: \"Error!\",\n                            text: \"No se pudo actualizar el curso. Por favor intente más tarde.\",\n                            icon: \"error\"\n                            //    timer: 3000,\n                          }).then(function (_) {\n                            location.reload();\n                          });\n                        }\n                      });\n                    case 3:\n                    case \"end\":\n                      return _context.stop();\n                  }\n                }, _callee);\n              }))).apply(this, arguments);\n            });\n            _this.survey.data = self.data;\n          case 6:\n          case \"end\":\n            return _context2.stop();\n        }\n      }, _callee2);\n    }))();\n  }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vY291cnNlL2VkaXQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJiIsIm1hcHBpbmdzIjoiOzs7Ozs7OzsrQ0FPQSxxSkFBQUEsbUJBQUEsWUFBQUEsb0JBQUEsV0FBQUMsQ0FBQSxTQUFBQyxDQUFBLEVBQUFELENBQUEsT0FBQUUsQ0FBQSxHQUFBQyxNQUFBLENBQUFDLFNBQUEsRUFBQUMsQ0FBQSxHQUFBSCxDQUFBLENBQUFJLGNBQUEsRUFBQUMsQ0FBQSxHQUFBSixNQUFBLENBQUFLLGNBQUEsY0FBQVAsQ0FBQSxFQUFBRCxDQUFBLEVBQUFFLENBQUEsSUFBQUQsQ0FBQSxDQUFBRCxDQUFBLElBQUFFLENBQUEsQ0FBQU8sS0FBQSxLQUFBQyxDQUFBLHdCQUFBQyxNQUFBLEdBQUFBLE1BQUEsT0FBQUMsQ0FBQSxHQUFBRixDQUFBLENBQUFHLFFBQUEsa0JBQUFDLENBQUEsR0FBQUosQ0FBQSxDQUFBSyxhQUFBLHVCQUFBQyxDQUFBLEdBQUFOLENBQUEsQ0FBQU8sV0FBQSw4QkFBQUMsT0FBQWpCLENBQUEsRUFBQUQsQ0FBQSxFQUFBRSxDQUFBLFdBQUFDLE1BQUEsQ0FBQUssY0FBQSxDQUFBUCxDQUFBLEVBQUFELENBQUEsSUFBQVMsS0FBQSxFQUFBUCxDQUFBLEVBQUFpQixVQUFBLE1BQUFDLFlBQUEsTUFBQUMsUUFBQSxTQUFBcEIsQ0FBQSxDQUFBRCxDQUFBLFdBQUFrQixNQUFBLG1CQUFBakIsQ0FBQSxJQUFBaUIsTUFBQSxZQUFBQSxPQUFBakIsQ0FBQSxFQUFBRCxDQUFBLEVBQUFFLENBQUEsV0FBQUQsQ0FBQSxDQUFBRCxDQUFBLElBQUFFLENBQUEsZ0JBQUFvQixLQUFB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QSxDQUFBQyxNQUFBLENBQUFDLEVBQUEsRUFBQWMsTUFBQSxDQUFBMUIsSUFBQSxFQUNBeEUsSUFBQSxXQUFBeUYsUUFBQTt3QkFDQUMsT0FBQSxDQUFBQyxHQUFBLENBQUFGLFFBQUEsQ0FBQWpCLElBQUE7d0JBQ0EsSUFBQWlCLFFBQUEsQ0FBQWpCLElBQUE7MEJBQ0FMLElBQUEsQ0FBQXFDLElBQUE7NEJBQ0FDLEtBQUE7NEJBQ0FDLElBQUE7NEJBQ0FDLElBQUE7NEJBQ0E7MEJBQ0EsR0FBQTNHLElBQUE7NEJBQ0E0RyxNQUFBLENBQUFDLFFBQUEsQ0FBQUMsSUFBQTswQkFDQTt3QkFDQTswQkFDQTNDLElBQUEsQ0FBQXFDLElBQUE7NEJBQ0FDLEtBQUE7NEJBQ0FDLElBQUE7NEJBQ0FDLElBQUE7NEJBQ0E7MEJBQ0EsR0FBQTNHLElBQUEsV0FBQStHLENBQUE7NEJBQ0FGLFFBQUEsQ0FBQUcsTUFBQTswQkFDQTt3QkFDQTtzQkFDQTtvQkFBQTtvQkFBQTtzQkFBQSxPQUFBWCxRQUFBLENBQUExRCxJQUFBO2tCQUFBO2dCQUFBLEdBQUFzRCxPQUFBO2NBQUEsQ0FDQSxJQUFBbEMsS0FBQSxPQUFBRCxTQUFBO1lBQUE7WUFDQWEsS0FBQSxDQUFBRixNQUFBLENBQUFELElBQUEsR0FBQVosSUFBQSxDQUFBWSxJQUFBO1VBQUE7VUFBQTtZQUFBLE9BQUFPLFNBQUEsQ0FBQXBDLElBQUE7UUFBQTtNQUFBLEdBQUFpQyxRQUFBO0lBQUE7RUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vL3Jlc291cmNlcy9qcy9jb21wb25lbnRzL2FkbWluL2NvdXJzZS9lZGl0LnZ1ZT9lYTAyIl0sInNvdXJjZXNDb250ZW50IjpbIjx0ZW1wbGF0ZT5cbiAgICA8ZGl2IHYtaWY9XCJzdXJ2ZXlcIj5cbiAgICAgIDxTdXJ2ZXkgOnN1cnZleT1cInN1cnZleVwiPjwvU3VydmV5PlxuICAgIDwvZGl2PlxuICA8L3RlbXBsYXRlPlxuICAgICAgXG4gICAgICA8c2NyaXB0PlxuICBpbXBvcnQgKiBhcyBTdXJ2ZXlWdWUgZnJvbSBcInN1cnZleS12dWVcIjtcbiAgY29uc3QgU3dhbCA9IHJlcXVpcmUoXCJzd2VldGFsZXJ0MlwiKTtcbiAgaW1wb3J0IHsganNvbiB9IGZyb20gXCIuL2Zvcm1cIjtcbiAgXG4gIGV4cG9ydCBkZWZhdWx0IHtcbiAgICBjb21wb25lbnRzOiB7IFN1cnZleTogU3VydmV5VnVlLlN1cnZleSB9LFxuICAgIGRhdGE6ICgpID0+ICh7XG4gICAgICBzdXJ2ZXk6IG51bGwsXG4gICAgICBkYXRhOiBudWxsLFxuICAgIH0pLFxuICBcbiAgICBhc3luYyBtb3VudGVkKCkge1xuICAgICAgbGV0IHNlbGYgPSB0aGlzO1xuICAgICAgYXdhaXQgYXhpb3NcbiAgICAgICAgLmdldChcIi9hcGkvY291cnNlL2VkaXQvXCIgKyB0aGlzLiRyb3V0ZS5wYXJhbXMuaWQsIHtcbiAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICBBdXRob3JpemF0aW9uOiBBVCxcbiAgICAgICAgICAgIEFjY2VwdDogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgdGhpcy5kYXRhID0gcmVzcG9uc2UuZGF0YTtcbiAgICAgICAgICBjb25zb2xlLmxvZyh0aGlzLmRhdGEpXG4gICAgICAgIH0pO1xuICBcbiAgICAgIHRoaXMuc3VydmV5ID0gbmV3IFN1cnZleVZ1ZS5Nb2RlbChqc29uKTtcbiAgXG4gICAgICB0aGlzLnN1cnZleS5vbkNvbXBsZXRpbmcuYWRkKGFzeW5jIGZ1bmN0aW9uIChyZXN1bHQsIG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucy5hbGxvd0NvbXBsZXRlID0gZmFsc2U7XG4gICAgICAgIGF3YWl0IGF4aW9zXG4gICAgICAgICAgLnBvc3QoXCIvYXBpL2NvdXJzZS91cGRhdGUvXCIgKyBzZWxmLiRyb3V0ZS5wYXJhbXMuaWQsIHJlc3VsdC5kYXRhKVxuICAgICAgICAgIC50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhyZXNwb25zZS5kYXRhKVxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEpIHtcbiAgICAgICAgICAgICAgU3dhbC5maXJlKHtcbiAgICAgICAgICAgICAgICB0aXRsZTogXCJBY3R1YWxpemFkb1wiLFxuICAgICAgICAgICAgICAgIHRleHQ6IFwiRWwgY3Vyc28gaGEgc2lkbyBhY3R1YWxpemFkbyBjb24gw6l4aXRvXCIsXG4gICAgICAgICAgICAgICAgaWNvbjogXCJzdWNjZXNzXCIsXG4gICAgICAgICAgICAgICAgLy8gIHRpbWVyOiAyMDAwLFxuICAgICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IFwiL3BhbmVsLWFkbWluaXN0cmFjaW9uL2N1cnNvc1wiO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIFN3YWwuZmlyZSh7XG4gICAgICAgICAgICAgICAgdGl0bGU6IFwiRXJyb3IhXCIsXG4gICAgICAgICAgICAgICAgdGV4dDogXCJObyBzZSBwdWRvIGFjdHVhbGl6YXIgZWwgY3Vyc28uIFBvciBmYXZvciBpbnRlbnRlIG3DoXMgdGFyZGUuXCIsXG4gICAgICAgICAgICAgICAgaWNvbjogXCJlcnJvclwiLFxuICAgICAgICAgICAgICAgIC8vICAgIHRpbWVyOiAzMDAwLFxuICAgICAgICAgICAgICB9KS50aGVuKChfKSA9PiB7XG4gICAgICAgICAgICAgICAgbG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnN1cnZleS5kYXRhID0gc2VsZi5kYXRhO1xuICAgIH0sXG4gIH07XG4gIDwvc2NyaXB0PiJdLCJuYW1lcyI6WyJfcmVnZW5lcmF0b3JSdW50aW1lIiwiZSIsInQiLCJyIiwiT2JqZWN0IiwicHJvdG90eXBlIiwibiIsImhhc093blByb3BlcnR5IiwibyIsImRlZmluZVByb3BlcnR5IiwidmFsdWUiLCJpIiwiU3ltYm9sIiwiYSIsIml0ZXJhdG9yIiwiYyIsImFzeW5jSXRlcmF0b3IiLCJ1IiwidG9TdHJpbmdUYWciLCJkZWZpbmUiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJ3cmFwIiwiR2VuZXJhdG9yIiwiY3JlYXRlIiwiQ29udGV4dCIsIm1ha2VJbnZva2VNZXRob2QiLCJ0cnlDYXRjaCIsInR5cGUiLCJhcmciLCJjYWxsIiwiaCIsImwiLCJmIiwicyIsInkiLCJHZW5lcmF0b3JGdW5jdGlvbiIsIkdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlIiwicCIsImQiLCJnZXRQcm90b3R5cGVPZiIsInYiLCJ2YWx1ZXMiLCJnIiwiZGVmaW5lSXRlcmF0b3JNZXRob2RzIiwiZm9yRWFjaCIsIl9pbnZva2UiLCJBc3luY0l0ZXJhdG9yIiwiaW52b2tlIiwiX3R5cGVvZiIsInJlc29sdmUiLCJfX2F3YWl0IiwidGhlbiIsImNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnIiwiRXJyb3IiLCJkb25lIiwibWV0aG9kIiwiZGVsZWdhdGUiLCJtYXliZUludm9rZURlbGVnYXRlIiwic2VudCIsIl9zZW50IiwiZGlzcGF0Y2hFeGNlcHRpb24iLCJhYnJ1cHQiLCJUeXBlRXJyb3IiLCJyZXN1bHROYW1lIiwibmV4dCIsIm5leHRMb2MiLCJwdXNoVHJ5RW50cnkiLCJ0cnlMb2MiLCJjYXRjaExvYyIsImZpbmFsbHlMb2MiLCJhZnRlckxvYyIsInRyeUVudHJpZXMiLCJwdXNoIiwicmVzZXRUcnlFbnRyeSIsImNvbXBsZXRpb24iLCJyZXNldCIsImlzTmFOIiwibGVuZ3RoIiwiZGlzcGxheU5hbWUiLCJpc0dlbmVyYXRvckZ1bmN0aW9uIiwiY29uc3RydWN0b3IiLCJuYW1lIiwibWFyayIsInNldFByb3RvdHlwZU9mIiwiX19wcm90b19fIiwiYXdyYXAiLCJhc3luYyIsIlByb21pc2UiLCJrZXlzIiwicmV2ZXJzZSIsInBvcCIsInByZXYiLCJjaGFyQXQiLCJzbGljZSIsInN0b3AiLCJydmFsIiwiaGFuZGxlIiwiY29tcGxldGUiLCJmaW5pc2giLCJfY2F0Y2giLCJkZWxlZ2F0ZVlpZWxkIiwiYXN5bmNHZW5lcmF0b3JTdGVwIiwiZ2VuIiwicmVqZWN0IiwiX25leHQiLCJfdGhyb3ciLCJrZXkiLCJpbmZvIiwiZXJyb3IiLCJfYXN5bmNUb0dlbmVyYXRvciIsImZuIiwic2VsZiIsImFyZ3MiLCJhcmd1bWVudHMiLCJhcHBseSIsImVyciIsInVuZGVmaW5lZCIsIlN1cnZleVZ1ZSIsIlN3YWwiLCJyZXF1aXJlIiwianNvbiIsImNvbXBvbmVudHMiLCJTdXJ2ZXkiLCJkYXRhIiwic3VydmV5IiwibW91bnRlZCIsIl90aGlzIiwiX2NhbGxlZTIiLCJfcmVmIiwiX2NhbGxlZTIkIiwiX2NvbnRleHQyIiwiYXhpb3MiLCJnZXQiLCIkcm91dGUiLCJwYXJhbXMiLCJpZCIsImhlYWRlcnMiLCJBdXRob3JpemF0aW9uIiwiQVQiLCJBY2NlcHQiLCJyZXNwb25zZSIsImNvbnNvbGUiLCJsb2ciLCJNb2RlbCIsIm9uQ29tcGxldGluZyIsImFkZCIsIl94IiwiX3gyIiwiX2NhbGxlZSIsInJlc3VsdCIsIm9wdGlvbnMiLCJfY2FsbGVlJCIsIl9jb250ZXh0IiwiYWxsb3dDb21wbGV0ZSIsInBvc3QiLCJmaXJlIiwidGl0bGUiLCJ0ZXh0IiwiaWNvbiIsIndpbmRvdyIsImxvY2F0aW9uIiwiaHJlZiIsIl8iLCJyZWxvYWQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/course/edit.vue?vue&type=script&lang=js&\n");

/***/ }),

/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/course/index.vue?vue&type=script&lang=js&":
/*!*************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/course/index.vue?vue&type=script&lang=js& ***!
  \*************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nvar Swal = __webpack_require__(/*! sweetalert2 */ \"./node_modules/sweetalert2/dist/sweetalert2.all.js\");\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n  data: function data() {\n    return {\n      data: null,\n      search: \"\",\n      headers: [{\n        text: \"Nombre\",\n        value: \"name\"\n      }, {\n        text: \"Ciclo\",\n        value: \"cycle\"\n      }, {\n        text: \"Fecha Inicio\",\n        value: \"start_date\"\n      }, {\n        text: \"Fecha Fin\",\n        value: \"end_date\"\n      }, {\n        text: \"Acciones\",\n        value: \"actions\",\n        sortable: false\n      }]\n    };\n  },\n  mounted: function mounted() {\n    this.loadData();\n  },\n  methods: {\n    loadData: function loadData() {\n      var _this = this;\n      axios.get(\"/api/course/index\").then(function (response) {\n        _this.data = response.data;\n      });\n    },\n    edit: function edit(id) {\n      window.location.href = \"/panel-administracion/cursos/\" + id + \"/editar\";\n    },\n    trash: function trash(id, name) {\n      var _this2 = this;\n      Swal.fire({\n        title: \"Confirmación\",\n        html: \"<p margin-bottom: 10px;\\\">\\n                \\xBFEst\\xE1s seguro de que deseas eliminar el curso <b>\\\"\".concat(name, \"\\\"</b>?</p>\\n                    <p style=\\\"font-size: 0.7em;\\\">\\n                      Si lo eliminas, no podr\\xE1s recuperarlo.\\n                    </p>\"),\n        icon: \"warning\",\n        showCancelButton: true,\n        confirmButtonColor: \"#3085d6\",\n        cancelButtonColor: \"#d33\",\n        confirmButtonText: \"Sí, eliminar\",\n        cancelButtonText: \"Cancelar\"\n      }).then(function (result) {\n        if (result.isConfirmed) {\n          axios[\"delete\"](\"/api/course/delete/\" + id, {\n            headers: {\n              Authorization: AT,\n              Accept: \"application/json\"\n            }\n          }).then(function (response) {\n            Swal.fire({\n              title: \"Eliminado\",\n              text: \"Se ha eliminado el curso con éxito.\",\n              icon: \"success\",\n              timer: 2000\n            }).then(function (_) {});\n            _this2.loadData();\n          });\n        }\n      });\n    }\n  }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vY291cnNlL2luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYiLCJtYXBwaW5ncyI6Ijs7OztBQXdDQSxJQUFBQSxJQUFBLEdBQUFDLG1CQUFBO0FBQ0EsaUVBQWU7RUFDZkMsSUFBQSxXQUFBQSxLQUFBO0lBQ0E7TUFDQUEsSUFBQTtNQUNBQyxNQUFBO01BQ0FDLE9BQUEsR0FDQTtRQUFBQyxJQUFBO1FBQUFDLEtBQUE7TUFBQSxHQUNBO1FBQUFELElBQUE7UUFBQUMsS0FBQTtNQUFBLEdBQ0E7UUFBQUQsSUFBQTtRQUFBQyxLQUFBO01BQUEsR0FDQTtRQUFBRCxJQUFBO1FBQUFDLEtBQUE7TUFBQSxHQUNBO1FBQUFELElBQUE7UUFBQUMsS0FBQTtRQUFBQyxRQUFBO01BQUE7SUFFQTtFQUNBO0VBQ0FDLE9BQUEsV0FBQUEsUUFBQTtJQUNBLEtBQUFDLFFBQUE7RUFDQTtFQUNBQyxPQUFBO0lBQ0FELFFBQUEsV0FBQUEsU0FBQTtNQUFBLElBQUFFLEtBQUE7TUFDQUMsS0FBQSxDQUFBQyxHQUFBLHNCQUFBQyxJQUFBLFdBQUFDLFFBQUE7UUFDQUosS0FBQSxDQUFBVCxJQUFBLEdBQUFhLFFBQUEsQ0FBQWIsSUFBQTtNQUNBO0lBQ0E7SUFDQWMsSUFBQSxXQUFBQSxLQUFBQyxFQUFBO01BQ0FDLE1BQUEsQ0FBQUMsUUFBQSxDQUFBQyxJQUFBLHFDQUFBSCxFQUFBO0lBQ0E7SUFDQUksS0FBQSxXQUFBQSxNQUFBSixFQUFBLEVBQUFLLElBQUE7TUFBQSxJQUFBQyxNQUFBO01BQ0F2QixJQUFBLENBQUF3QixJQUFBO1FBQ0FDLEtBQUE7UUFDQUMsSUFBQSwwR0FBQUMsTUFBQSxDQUNBTCxJQUFBLGdLQUdBO1FBQ0FNLElBQUE7UUFDQUMsZ0JBQUE7UUFDQUMsa0JBQUE7UUFDQUMsaUJBQUE7UUFDQUMsaUJBQUE7UUFDQUMsZ0JBQUE7TUFDQSxHQUFBbkIsSUFBQSxXQUFBb0IsTUFBQTtRQUNBLElBQUFBLE1BQUEsQ0FBQUMsV0FBQTtVQUNBdkIsS0FBQSxVQUNBLHlCQUFBSyxFQUFBO1lBQ0FiLE9BQUE7Y0FDQWdDLGFBQUEsRUFBQUMsRUFBQTtjQUNBQyxNQUFBO1lBQ0E7VUFDQSxHQUNBeEIsSUFBQSxXQUFBQyxRQUFBO1lBQ0FmLElBQUEsQ0FBQXdCLElBQUE7Y0FDQUMsS0FBQTtjQUNBcEIsSUFBQTtjQUNBdUIsSUFBQTtjQUNBVyxLQUFBO1lBQ0EsR0FBQXpCLElBQUEsV0FBQTBCLENBQUE7WUFDQWpCLE1BQUEsQ0FBQWQsUUFBQTtVQUNBO1FBQ0E7TUFDQTtJQUNBO0VBQ0E7QUFDQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vL3Jlc291cmNlcy9qcy9jb21wb25lbnRzL2FkbWluL2NvdXJzZS9pbmRleC52dWU/MjhkNCJdLCJzb3VyY2VzQ29udGVudCI6WyI8dGVtcGxhdGU+XG4gIDx2LWFwcD5cbiAgICA8di1jYXJkIHYtaWY9XCJkYXRhXCI+XG4gICAgICA8di1jYXJkLXRpdGxlPlxuICAgICAgICBBZG1pbmlzdHJhY2nDs24gZGUgQ3Vyc29zXG4gICAgICAgIDx2LXNwYWNlcj48L3Ytc3BhY2VyPlxuICAgICAgICA8di10ZXh0LWZpZWxkXG4gICAgICAgICAgdi1tb2RlbD1cInNlYXJjaFwiXG4gICAgICAgICAgYXBwZW5kLWljb249XCJtZGktbWFnbmlmeVwiXG4gICAgICAgICAgbGFiZWw9XCJCdXNjYXJcIlxuICAgICAgICAgIHNpbmdsZS1saW5lXG4gICAgICAgICAgaGlkZS1kZXRhaWxzXG4gICAgICAgID48L3YtdGV4dC1maWVsZD5cbiAgICAgIDwvdi1jYXJkLXRpdGxlPlxuICAgICAgPHYtZGF0YS10YWJsZVxuICAgICAgICA6aGVhZGVycz1cImhlYWRlcnNcIlxuICAgICAgICA6aXRlbXM9XCJkYXRhXCJcbiAgICAgICAgY2xhc3M9XCJlbGV2YXRpb24tMVwiXG4gICAgICAgIDpzZWFyY2g9XCJzZWFyY2hcIlxuICAgICAgPlxuICAgICAgICA8dGVtcGxhdGUgdi1zbG90Oml0ZW0uYWN0aW9ucz1cInsgaXRlbSB9XCI+XG4gICAgICAgICAgPHYtYnRuIGNvbG9yPVwicmVkXCIgZmFiIHgtc21hbGwgZGFyayBAY2xpY2s9XCJlZGl0KGl0ZW0uaWQpXCI+XG4gICAgICAgICAgICA8di1pY29uPiBtZGktcGVuY2lsIDwvdi1pY29uPlxuICAgICAgICAgIDwvdi1idG4+XG4gICAgICAgICAgPHYtYnRuXG4gICAgICAgICAgICBjb2xvcj1cIndhcm5pbmdcIlxuICAgICAgICAgICAgZmFiXG4gICAgICAgICAgICB4LXNtYWxsXG4gICAgICAgICAgICBkYXJrXG4gICAgICAgICAgICBAY2xpY2s9XCJ0cmFzaChpdGVtLmlkLCBpdGVtLm5hbWUpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8di1pY29uPiBtZGktZGVsZXRlIDwvdi1pY29uPlxuICAgICAgICAgIDwvdi1idG4+XG4gICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICA8L3YtZGF0YS10YWJsZT5cbiAgICA8L3YtY2FyZD5cbiAgPC92LWFwcD5cbjwvdGVtcGxhdGU+XG4gIFxuICA8c2NyaXB0PlxuY29uc3QgU3dhbCA9IHJlcXVpcmUoXCJzd2VldGFsZXJ0MlwiKTtcbmV4cG9ydCBkZWZhdWx0IHtcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZGF0YTogbnVsbCxcbiAgICAgIHNlYXJjaDogXCJcIixcbiAgICAgIGhlYWRlcnM6IFtcbiAgICAgICAgeyB0ZXh0OiBcIk5vbWJyZVwiLCB2YWx1ZTogXCJuYW1lXCIgfSxcbiAgICAgICAgeyB0ZXh0OiBcIkNpY2xvXCIsIHZhbHVlOiBcImN5Y2xlXCIgfSxcbiAgICAgICAgeyB0ZXh0OiBcIkZlY2hhIEluaWNpb1wiLCB2YWx1ZTogXCJzdGFydF9kYXRlXCIgfSxcbiAgICAgICAgeyB0ZXh0OiBcIkZlY2hhIEZpblwiLCB2YWx1ZTogXCJlbmRfZGF0ZVwiIH0sXG4gICAgICAgIHsgdGV4dDogXCJBY2Npb25lc1wiLCB2YWx1ZTogXCJhY3Rpb25zXCIsIHNvcnRhYmxlOiBmYWxzZSB9LFxuICAgICAgXSxcbiAgICB9O1xuICB9LFxuICBtb3VudGVkKCkge1xuICAgIHRoaXMubG9hZERhdGEoKTtcbiAgfSxcbiAgbWV0aG9kczoge1xuICAgIGxvYWREYXRhKCkge1xuICAgICAgYXhpb3MuZ2V0KFwiL2FwaS9jb3Vyc2UvaW5kZXhcIikudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgdGhpcy5kYXRhID0gcmVzcG9uc2UuZGF0YTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgZWRpdChpZCkge1xuICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBcIi9wYW5lbC1hZG1pbmlzdHJhY2lvbi9jdXJzb3MvXCIgKyBpZCArIFwiL2VkaXRhclwiO1xuICAgIH0sXG4gICAgdHJhc2goaWQsIG5hbWUpIHtcbiAgICAgIFN3YWwuZmlyZSh7XG4gICAgICAgIHRpdGxlOiBcIkNvbmZpcm1hY2nDs25cIixcbiAgICAgICAgaHRtbDogYDxwIG1hcmdpbi1ib3R0b206IDEwcHg7XCI+XG4gICAgICAgICAgICAgICAgwr9Fc3TDoXMgc2VndXJvIGRlIHF1ZSBkZXNlYXMgZWxpbWluYXIgZWwgY3Vyc28gPGI+XCIke25hbWV9XCI8L2I+PzwvcD5cbiAgICAgICAgICAgICAgICAgICAgPHAgc3R5bGU9XCJmb250LXNpemU6IDAuN2VtO1wiPlxuICAgICAgICAgICAgICAgICAgICAgIFNpIGxvIGVsaW1pbmFzLCBubyBwb2Ryw6FzIHJlY3VwZXJhcmxvLlxuICAgICAgICAgICAgICAgICAgICA8L3A+YCxcbiAgICAgICAgaWNvbjogXCJ3YXJuaW5nXCIsXG4gICAgICAgIHNob3dDYW5jZWxCdXR0b246IHRydWUsXG4gICAgICAgIGNvbmZpcm1CdXR0b25Db2xvcjogXCIjMzA4NWQ2XCIsXG4gICAgICAgIGNhbmNlbEJ1dHRvbkNvbG9yOiBcIiNkMzNcIixcbiAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6IFwiU8OtLCBlbGltaW5hclwiLFxuICAgICAgICBjYW5jZWxCdXR0b25UZXh0OiBcIkNhbmNlbGFyXCIsXG4gICAgICB9KS50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdC5pc0NvbmZpcm1lZCkge1xuICAgICAgICAgIGF4aW9zXG4gICAgICAgICAgICAuZGVsZXRlKFwiL2FwaS9jb3Vyc2UvZGVsZXRlL1wiICsgaWQsIHtcbiAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgIEF1dGhvcml6YXRpb246IEFULFxuICAgICAgICAgICAgICAgIEFjY2VwdDogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgIFN3YWwuZmlyZSh7XG4gICAgICAgICAgICAgICAgdGl0bGU6IFwiRWxpbWluYWRvXCIsXG4gICAgICAgICAgICAgICAgdGV4dDogXCJTZSBoYSBlbGltaW5hZG8gZWwgY3Vyc28gY29uIMOpeGl0by5cIixcbiAgICAgICAgICAgICAgICBpY29uOiBcInN1Y2Nlc3NcIixcbiAgICAgICAgICAgICAgICB0aW1lcjogMjAwMCxcbiAgICAgICAgICAgICAgfSkudGhlbigoXykgPT4ge30pO1xuICAgICAgICAgICAgICB0aGlzLmxvYWREYXRhKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSxcbiAgfSxcbn07XG48L3NjcmlwdD4iXSwibmFtZXMiOlsiU3dhbCIsInJlcXVpcmUiLCJkYXRhIiwic2VhcmNoIiwiaGVhZGVycyIsInRleHQiLCJ2YWx1ZSIsInNvcnRhYmxlIiwibW91bnRlZCIsImxvYWREYXRhIiwibWV0aG9kcyIsIl90aGlzIiwiYXhpb3MiLCJnZXQiLCJ0aGVuIiwicmVzcG9uc2UiLCJlZGl0IiwiaWQiLCJ3aW5kb3ciLCJsb2NhdGlvbiIsImhyZWYiLCJ0cmFzaCIsIm5hbWUiLCJfdGhpczIiLCJmaXJlIiwidGl0bGUiLCJodG1sIiwiY29uY2F0IiwiaWNvbiIsInNob3dDYW5jZWxCdXR0b24iLCJjb25maXJtQnV0dG9uQ29sb3IiLCJjYW5jZWxCdXR0b25Db2xvciIsImNvbmZpcm1CdXR0b25UZXh0IiwiY2FuY2VsQnV0dG9uVGV4dCIsInJlc3VsdCIsImlzQ29uZmlybWVkIiwiQXV0aG9yaXphdGlvbiIsIkFUIiwiQWNjZXB0IiwidGltZXIiLCJfIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/course/index.vue?vue&type=script&lang=js&\n");

/***/ }),

/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/cycle/create.vue?vue&type=script&lang=js&":
/*!*************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/cycle/create.vue?vue&type=script&lang=js& ***!
  \*************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var survey_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! survey-vue */ \"./node_modules/survey-vue/survey-vue.js\");\n/* harmony import */ var survey_vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(survey_vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _form__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./form */ \"./resources/js/components/admin/cycle/form.js\");\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = \"function\" == typeof Symbol ? Symbol : {}, a = i.iterator || \"@@iterator\", c = i.asyncIterator || \"@@asyncIterator\", u = i.toStringTag || \"@@toStringTag\"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, \"\"); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, \"_invoke\", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: \"normal\", arg: t.call(e, r) }; } catch (t) { return { type: \"throw\", arg: t }; } } e.wrap = wrap; var h = \"suspendedStart\", l = \"suspendedYield\", f = \"executing\", s = \"completed\", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { [\"next\", \"throw\", \"return\"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if (\"throw\" !== c.type) { var u = c.arg, h = u.value; return h && \"object\" == _typeof(h) && n.call(h, \"__await\") ? e.resolve(h.__await).then(function (t) { invoke(\"next\", t, i, a); }, function (t) { invoke(\"throw\", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke(\"throw\", t, i, a); }); } a(c.arg); } var r; o(this, \"_invoke\", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error(\"Generator is already running\"); if (o === s) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = f; var p = tryCatch(e, r, n); if (\"normal\" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } \"throw\" === p.type && (o = s, n.method = \"throw\", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, \"throw\" === n && e.iterator[\"return\"] && (r.method = \"return\", r.arg = t, maybeInvokeDelegate(e, r), \"throw\" === r.method) || \"return\" !== n && (r.method = \"throw\", r.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), y; var i = tryCatch(o, e.iterator, r.arg); if (\"throw\" === i.type) return r.method = \"throw\", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, \"return\" !== r.method && (r.method = \"next\", r.arg = t), r.delegate = null, y) : a : (r.method = \"throw\", r.arg = new TypeError(\"iterator result is not an object\"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = \"normal\", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: \"root\" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || \"\" === e) { var r = e[a]; if (r) return r.call(e); if (\"function\" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, \"constructor\", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, \"constructor\", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), e.isGeneratorFunction = function (t) { var e = \"function\" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || \"GeneratorFunction\" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, \"GeneratorFunction\")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, \"Generator\"), define(g, a, function () { return this; }), define(g, \"toString\", function () { return \"[object Generator]\"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) \"t\" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = \"throw\", a.arg = e, r.next = n, o && (r.method = \"next\", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if (\"root\" === i.tryLoc) return handle(\"end\"); if (i.tryLoc <= this.prev) { var c = n.call(i, \"catchLoc\"), u = n.call(i, \"finallyLoc\"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error(\"try statement without catch or finally\"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, \"finallyLoc\") && this.prev < o.finallyLoc) { var i = o; break; } } i && (\"break\" === t || \"continue\" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = \"next\", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, \"catch\": function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if (\"throw\" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, \"next\" === this.method && (this.arg = t), y; } }, e; }\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nvar Swal = __webpack_require__(/*! sweetalert2 */ \"./node_modules/sweetalert2/dist/sweetalert2.all.js\");\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n  components: {\n    Survey: survey_vue__WEBPACK_IMPORTED_MODULE_0__.Survey\n  },\n  data: function data() {\n    return {\n      survey: null\n    };\n  },\n  mounted: function mounted() {\n    var _this = this;\n    return _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {\n      var _ref;\n      return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n        while (1) switch (_context2.prev = _context2.next) {\n          case 0:\n            _this.survey = new survey_vue__WEBPACK_IMPORTED_MODULE_0__.Model(_form__WEBPACK_IMPORTED_MODULE_1__.json);\n            _this.survey.onCompleting.add(function (_x, _x2) {\n              return (_ref = _ref || _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(result, options) {\n                return _regeneratorRuntime().wrap(function _callee$(_context) {\n                  while (1) switch (_context.prev = _context.next) {\n                    case 0:\n                      options.allowComplete = false;\n                      _context.next = 3;\n                      return axios.post(\"/api/cycle/store\", result.data).then(function (response) {\n                        if (response.data) {\n                          console.log(response.data);\n                          Swal.fire({\n                            title: \"Actualizado\",\n                            text: \"El Ciclo ha sido creado con éxito\",\n                            icon: \"success\"\n                            //  timer: 2000,\n                          }).then(function () {\n                            window.location.href = \"/panel-administracion/ciclos\";\n                          });\n                        } else {\n                          Swal.fire({\n                            title: \"Error!\",\n                            text: \"No se pudo crear el Ciclo. Por favor intente más tarde.\",\n                            icon: \"error\"\n                            //    timer: 3000,\n                          }).then(function (_) {\n                            location.reload();\n                          });\n                        }\n                      });\n                    case 3:\n                    case \"end\":\n                      return _context.stop();\n                  }\n                }, _callee);\n              }))).apply(this, arguments);\n            });\n          case 2:\n          case \"end\":\n            return _context2.stop();\n        }\n      }, _callee2);\n    }))();\n  }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vY3ljbGUvY3JlYXRlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7K0NBT0EscUpBQUFBLG1CQUFBLFlBQUFBLG9CQUFBLFdBQUFDLENBQUEsU0FBQUMsQ0FBQSxFQUFBRCxDQUFBLE9BQUFFLENBQUEsR0FBQUMsTUFBQSxDQUFBQyxTQUFBLEVBQUFDLENBQUEsR0FBQUgsQ0FBQSxDQUFBSSxjQUFBLEVBQUFDLENBQUEsR0FBQUosTUFBQSxDQUFBSyxjQUFBLGNBQUFQLENBQUEsRUFBQUQsQ0FBQSxFQUFBRSxDQUFBLElBQUFELENBQUEsQ0FBQUQsQ0FBQSxJQUFBRSxDQUFBLENBQUFPLEtBQUEsS0FBQUMsQ0FBQSx3QkFBQUMsTUFBQSxHQUFBQSxNQUFBLE9BQUFDLENBQUEsR0FBQUYsQ0FBQSxDQUFBRyxRQUFBLGtCQUFBQyxDQUFBLEdBQUFKLENBQUEsQ0FBQUssYUFBQSx1QkFBQUMsQ0FBQSxHQUFBTixDQUFBLENBQUFPLFdBQUEsOEJBQUFDLE9BQUFqQixDQUFBLEVBQUFELENBQUEsRUFBQUUsQ0FBQSxXQUFBQyxNQUFBLENBQUFLLGNBQUEsQ0FBQVAsQ0FBQSxFQUFBRCxDQUFBLElBQUFTLEtBQUEsRUFBQVAsQ0FBQSxFQUFBaUIsVUFBQSxNQUFBQyxZQUFBLE1BQUFDLFFBQUEsU0FBQXBCLENBQUEsQ0FBQUQsQ0FBQSxXQUFBa0IsTUFBQSxtQkFBQWpCLENBQUEsSUFBQWlCLE1BQUEsWUFBQUEsT0FBQWpCLENBQUEsRUFBQUQsQ0FBQSxFQUFBRSxDQUFBLFdBQUFELENBQUEsQ0FBQUQsQ0FBQSxJQUFBRSxDQUFBLGdCQUFBb0IsS0FB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QSxXQUFBdUcsQ0FBQTs0QkFDQUYsUUFBQSxDQUFBRyxNQUFBOzBCQUNBO3dCQUNBO3NCQUNBO29CQUFBO29CQUFBO3NCQUFBLE9BQUFmLFFBQUEsQ0FBQTlDLElBQUE7a0JBQUE7Z0JBQUEsR0FBQTBDLE9BQUE7Y0FBQSxDQUNBLElBQUF0QixLQUFBLE9BQUFELFNBQUE7WUFBQTtVQUFBO1VBQUE7WUFBQSxPQUFBaUIsU0FBQSxDQUFBcEMsSUFBQTtRQUFBO01BQUEsR0FBQWlDLFFBQUE7SUFBQTtFQUNBO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9jeWNsZS9jcmVhdGUudnVlPzIwNWUiXSwic291cmNlc0NvbnRlbnQiOlsiPHRlbXBsYXRlPlxuICA8ZGl2IHYtaWY9XCJzdXJ2ZXlcIj5cbiAgICA8U3VydmV5IDpzdXJ2ZXk9XCJzdXJ2ZXlcIj48L1N1cnZleT5cbiAgPC9kaXY+XG48L3RlbXBsYXRlPlxuICBcbiAgPHNjcmlwdD5cbmltcG9ydCAqIGFzIFN1cnZleVZ1ZSBmcm9tIFwic3VydmV5LXZ1ZVwiO1xuY29uc3QgU3dhbCA9IHJlcXVpcmUoXCJzd2VldGFsZXJ0MlwiKTtcbmltcG9ydCB7IGpzb24gfSBmcm9tIFwiLi9mb3JtXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29tcG9uZW50czogeyBTdXJ2ZXk6IFN1cnZleVZ1ZS5TdXJ2ZXkgfSxcbiAgZGF0YTogKCkgPT4gKHtcbiAgICBzdXJ2ZXk6IG51bGwsXG4gIH0pLFxuXG4gIGFzeW5jIG1vdW50ZWQoKSB7XG4gICAgdGhpcy5zdXJ2ZXkgPSBuZXcgU3VydmV5VnVlLk1vZGVsKGpzb24pO1xuXG4gICAgdGhpcy5zdXJ2ZXkub25Db21wbGV0aW5nLmFkZChhc3luYyBmdW5jdGlvbiAocmVzdWx0LCBvcHRpb25zKSB7XG4gICAgICBvcHRpb25zLmFsbG93Q29tcGxldGUgPSBmYWxzZTtcbiAgICAgIGF3YWl0IGF4aW9zXG4gICAgICAgIC5wb3N0KFwiL2FwaS9jeWNsZS9zdG9yZVwiLCByZXN1bHQuZGF0YSlcbiAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlLmRhdGEpO1xuICAgICAgICAgICAgU3dhbC5maXJlKHtcbiAgICAgICAgICAgICAgdGl0bGU6IFwiQWN0dWFsaXphZG9cIixcbiAgICAgICAgICAgICAgdGV4dDogXCJFbCBDaWNsbyBoYSBzaWRvIGNyZWFkbyBjb24gw6l4aXRvXCIsXG4gICAgICAgICAgICAgIGljb246IFwic3VjY2Vzc1wiLFxuICAgICAgICAgICAgLy8gIHRpbWVyOiAyMDAwLFxuICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID1cbiAgICAgICAgICAgICAgICBcIi9wYW5lbC1hZG1pbmlzdHJhY2lvbi9jaWNsb3NcIjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBTd2FsLmZpcmUoe1xuICAgICAgICAgICAgICB0aXRsZTogXCJFcnJvciFcIixcbiAgICAgICAgICAgICAgdGV4dDpcbiAgICAgICAgICAgICAgICBcIk5vIHNlIHB1ZG8gY3JlYXIgZWwgQ2ljbG8uIFBvciBmYXZvciBpbnRlbnRlIG3DoXMgdGFyZGUuXCIsXG4gICAgICAgICAgICAgIGljb246IFwiZXJyb3JcIixcbiAgICAgICAgICAvLyAgICB0aW1lcjogMzAwMCxcbiAgICAgICAgICAgIH0pLnRoZW4oKF8pID0+IHtcbiAgICAgICAgICAgICAgbG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9LFxufTtcbjwvc2NyaXB0PlxuICAiXSwibmFtZXMiOlsiX3JlZ2VuZXJhdG9yUnVudGltZSIsImUiLCJ0IiwiciIsIk9iamVjdCIsInByb3RvdHlwZSIsIm4iLCJoYXNPd25Qcm9wZXJ0eSIsIm8iLCJkZWZpbmVQcm9wZXJ0eSIsInZhbHVlIiwiaSIsIlN5bWJvbCIsImEiLCJpdGVyYXRvciIsImMiLCJhc3luY0l0ZXJhdG9yIiwidSIsInRvU3RyaW5nVGFnIiwiZGVmaW5lIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwid3JhcCIsIkdlbmVyYXRvciIsImNyZWF0ZSIsIkNvbnRleHQiLCJtYWtlSW52b2tlTWV0aG9kIiwidHJ5Q2F0Y2giLCJ0eXBlIiwiYXJnIiwiY2FsbCIsImgiLCJsIiwiZiIsInMiLCJ5IiwiR2VuZXJhdG9yRnVuY3Rpb24iLCJHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSIsInAiLCJkIiwiZ2V0UHJvdG90eXBlT2YiLCJ2IiwidmFsdWVzIiwiZyIsImRlZmluZUl0ZXJhdG9yTWV0aG9kcyIsImZvckVhY2giLCJfaW52b2tlIiwiQXN5bmNJdGVyYXRvciIsImludm9rZSIsIl90eXBlb2YiLCJyZXNvbHZlIiwiX19hd2FpdCIsInRoZW4iLCJjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZyIsIkVycm9yIiwiZG9uZSIsIm1ldGhvZCIsImRlbGVnYXRlIiwibWF5YmVJbnZva2VEZWxlZ2F0ZSIsInNlbnQiLCJfc2VudCIsImRpc3BhdGNoRXhjZXB0aW9uIiwiYWJydXB0IiwiVHlwZUVycm9yIiwicmVzdWx0TmFtZSIsIm5leHQiLCJuZXh0TG9jIiwicHVzaFRyeUVudHJ5IiwidHJ5TG9jIiwiY2F0Y2hMb2MiLCJmaW5hbGx5TG9jIiwiYWZ0ZXJMb2MiLCJ0cnlFbnRyaWVzIiwicHVzaCIsInJlc2V0VHJ5RW50cnkiLCJjb21wbGV0aW9uIiwicmVzZXQiLCJpc05hTiIsImxlbmd0aCIsImRpc3BsYXlOYW1lIiwiaXNHZW5lcmF0b3JGdW5jdGlvbiIsImNvbnN0cnVjdG9yIiwibmFtZSIsIm1hcmsiLCJzZXRQcm90b3R5cGVPZiIsIl9fcHJvdG9fXyIsImF3cmFwIiwiYXN5bmMiLCJQcm9taXNlIiwia2V5cyIsInJldmVyc2UiLCJwb3AiLCJwcmV2IiwiY2hhckF0Iiwic2xpY2UiLCJzdG9wIiwicnZhbCIsImhhbmRsZSIsImNvbXBsZXRlIiwiZmluaXNoIiwiX2NhdGNoIiwiZGVsZWdhdGVZaWVsZCIsImFzeW5jR2VuZXJhdG9yU3RlcCIsImdlbiIsInJlamVjdCIsIl9uZXh0IiwiX3Rocm93Iiwia2V5IiwiaW5mbyIsImVycm9yIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJmbiIsInNlbGYiLCJhcmdzIiwiYXJndW1lbnRzIiwiYXBwbHkiLCJlcnIiLCJ1bmRlZmluZWQiLCJTdXJ2ZXlWdWUiLCJTd2FsIiwicmVxdWlyZSIsImpzb24iLCJjb21wb25lbnRzIiwiU3VydmV5IiwiZGF0YSIsInN1cnZleSIsIm1vdW50ZWQiLCJfdGhpcyIsIl9jYWxsZWUyIiwiX3JlZiIsIl9jYWxsZWUyJCIsIl9jb250ZXh0MiIsIk1vZGVsIiwib25Db21wbGV0aW5nIiwiYWRkIiwiX3giLCJfeDIiLCJfY2FsbGVlIiwicmVzdWx0Iiwib3B0aW9ucyIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJhbGxvd0NvbXBsZXRlIiwiYXhpb3MiLCJwb3N0IiwicmVzcG9uc2UiLCJjb25zb2xlIiwibG9nIiwiZmlyZSIsInRpdGxlIiwidGV4dCIsImljb24iLCJ3aW5kb3ciLCJsb2NhdGlvbiIsImhyZWYiLCJfIiwicmVsb2FkIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/cycle/create.vue?vue&type=script&lang=js&\n");

/***/ }),

/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/cycle/edit.vue?vue&type=script&lang=js&":
/*!***********************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/cycle/edit.vue?vue&type=script&lang=js& ***!
  \***********************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var survey_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! survey-vue */ \"./node_modules/survey-vue/survey-vue.js\");\n/* harmony import */ var survey_vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(survey_vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _form__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./form */ \"./resources/js/components/admin/cycle/form.js\");\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = \"function\" == typeof Symbol ? Symbol : {}, a = i.iterator || \"@@iterator\", c = i.asyncIterator || \"@@asyncIterator\", u = i.toStringTag || \"@@toStringTag\"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, \"\"); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, \"_invoke\", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: \"normal\", arg: t.call(e, r) }; } catch (t) { return { type: \"throw\", arg: t }; } } e.wrap = wrap; var h = \"suspendedStart\", l = \"suspendedYield\", f = \"executing\", s = \"completed\", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { [\"next\", \"throw\", \"return\"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if (\"throw\" !== c.type) { var u = c.arg, h = u.value; return h && \"object\" == _typeof(h) && n.call(h, \"__await\") ? e.resolve(h.__await).then(function (t) { invoke(\"next\", t, i, a); }, function (t) { invoke(\"throw\", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke(\"throw\", t, i, a); }); } a(c.arg); } var r; o(this, \"_invoke\", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error(\"Generator is already running\"); if (o === s) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = f; var p = tryCatch(e, r, n); if (\"normal\" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } \"throw\" === p.type && (o = s, n.method = \"throw\", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, \"throw\" === n && e.iterator[\"return\"] && (r.method = \"return\", r.arg = t, maybeInvokeDelegate(e, r), \"throw\" === r.method) || \"return\" !== n && (r.method = \"throw\", r.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), y; var i = tryCatch(o, e.iterator, r.arg); if (\"throw\" === i.type) return r.method = \"throw\", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, \"return\" !== r.method && (r.method = \"next\", r.arg = t), r.delegate = null, y) : a : (r.method = \"throw\", r.arg = new TypeError(\"iterator result is not an object\"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = \"normal\", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: \"root\" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || \"\" === e) { var r = e[a]; if (r) return r.call(e); if (\"function\" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, \"constructor\", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, \"constructor\", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), e.isGeneratorFunction = function (t) { var e = \"function\" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || \"GeneratorFunction\" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, \"GeneratorFunction\")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, \"Generator\"), define(g, a, function () { return this; }), define(g, \"toString\", function () { return \"[object Generator]\"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) \"t\" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = \"throw\", a.arg = e, r.next = n, o && (r.method = \"next\", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if (\"root\" === i.tryLoc) return handle(\"end\"); if (i.tryLoc <= this.prev) { var c = n.call(i, \"catchLoc\"), u = n.call(i, \"finallyLoc\"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error(\"try statement without catch or finally\"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, \"finallyLoc\") && this.prev < o.finallyLoc) { var i = o; break; } } i && (\"break\" === t || \"continue\" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = \"next\", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, \"catch\": function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if (\"throw\" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, \"next\" === this.method && (this.arg = t), y; } }, e; }\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nvar Swal = __webpack_require__(/*! sweetalert2 */ \"./node_modules/sweetalert2/dist/sweetalert2.all.js\");\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n  components: {\n    Survey: survey_vue__WEBPACK_IMPORTED_MODULE_0__.Survey\n  },\n  data: function data() {\n    return {\n      survey: null,\n      data: null\n    };\n  },\n  mounted: function mounted() {\n    var _this = this;\n    return _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {\n      var _ref;\n      var self;\n      return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n        while (1) switch (_context2.prev = _context2.next) {\n          case 0:\n            self = _this;\n            _context2.next = 3;\n            return axios.get(\"/api/cycle/edit/\" + _this.$route.params.id, {\n              headers: {\n                Authorization: AT,\n                Accept: \"application/json\"\n              }\n            }).then(function (response) {\n              _this.data = response.data;\n              console.log(_this.data);\n            });\n          case 3:\n            _this.survey = new survey_vue__WEBPACK_IMPORTED_MODULE_0__.Model(_form__WEBPACK_IMPORTED_MODULE_1__.json);\n            _this.survey.onCompleting.add(function (_x, _x2) {\n              return (_ref = _ref || _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(result, options) {\n                return _regeneratorRuntime().wrap(function _callee$(_context) {\n                  while (1) switch (_context.prev = _context.next) {\n                    case 0:\n                      options.allowComplete = false;\n                      _context.next = 3;\n                      return axios.post(\"/api/cycle/update/\" + self.$route.params.id, result.data).then(function (response) {\n                        console.log(response.data);\n                        if (response.data) {\n                          Swal.fire({\n                            title: \"Actualizado\",\n                            text: \"El ciclo ha sido actualizado con éxito\",\n                            icon: \"success\"\n                            //  timer: 2000,\n                          }).then(function () {\n                            window.location.href = \"/panel-administracion/ciclos\";\n                          });\n                        } else {\n                          Swal.fire({\n                            title: \"Error!\",\n                            text: \"No se pudo actualizar el ciclo. Por favor intente más tarde.\",\n                            icon: \"error\"\n                            //    timer: 3000,\n                          }).then(function (_) {\n                            location.reload();\n                          });\n                        }\n                      });\n                    case 3:\n                    case \"end\":\n                      return _context.stop();\n                  }\n                }, _callee);\n              }))).apply(this, arguments);\n            });\n            _this.survey.data = self.data;\n          case 6:\n          case \"end\":\n            return _context2.stop();\n        }\n      }, _callee2);\n    }))();\n  }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vY3ljbGUvZWRpdC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmIiwibWFwcGluZ3MiOiI7Ozs7Ozs7OytDQU9BLHFKQUFBQSxtQkFBQSxZQUFBQSxvQkFBQSxXQUFBQyxDQUFBLFNBQUFDLENBQUEsRUFBQUQsQ0FBQSxPQUFBRSxDQUFBLEdBQUFDLE1BQUEsQ0FBQUMsU0FBQSxFQUFBQyxDQUFBLEdBQUFILENBQUEsQ0FBQUksY0FBQSxFQUFBQyxDQUFBLEdBQUFKLE1BQUEsQ0FBQUssY0FBQSxjQUFBUCxDQUFBLEVBQUFELENBQUEsRUFBQUUsQ0FBQSxJQUFBRCxDQUFBLENBQUFELENBQUEsSUFBQUUsQ0FBQSxDQUFBTyxLQUFBLEtBQUFDLENBQUEsd0JBQUFDLE1BQUEsR0FBQUEsTUFBQSxPQUFBQyxDQUFBLEdBQUFGLENBQUEsQ0FBQUcsUUFBQSxrQkFBQUMsQ0FBQSxHQUFBSixDQUFBLENBQUFLLGFBQUEsdUJBQUFDLENBQUEsR0FBQU4sQ0FBQSxDQUFBTyxXQUFBLDhCQUFBQyxPQUFBakIsQ0FBQSxFQUFBRCxDQUFBLEVBQUFFLENBQUEsV0FBQUMsTUFBQSxDQUFBSyxjQUFBLENBQUFQLENBQUEsRUFBQUQsQ0FBQSxJQUFBUyxLQUFBLEVBQUFQLENBQUEsRUFBQWlCLFVBQUEsTUFBQUMsWUFBQSxNQUFBQyxRQUFBLFNBQUFwQixDQUFBLENBQUFELENBQUEsV0FBQWtCLE1BQUEsbUJBQUFqQixDQUFBLElBQUFpQixNQUFBLFlBQUFBLE9BQUFqQixDQUFBLEVBQUFELENBQUEsRUFBQUUsQ0FBQSxXQUFBRCxDQUFBLENBQUFELENBQUEsSUFBQUUsQ0FBQSxnQkFBQW9CLEtBQUFy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LENBQUFDLE1BQUEsQ0FBQUMsRUFBQSxFQUFBYyxNQUFBLENBQUExQixJQUFBLEVBQ0F4RSxJQUFBLFdBQUF5RixRQUFBO3dCQUNBQyxPQUFBLENBQUFDLEdBQUEsQ0FBQUYsUUFBQSxDQUFBakIsSUFBQTt3QkFDQSxJQUFBaUIsUUFBQSxDQUFBakIsSUFBQTswQkFDQUwsSUFBQSxDQUFBcUMsSUFBQTs0QkFDQUMsS0FBQTs0QkFDQUMsSUFBQTs0QkFDQUMsSUFBQTs0QkFDQTswQkFDQSxHQUFBM0csSUFBQTs0QkFDQTRHLE1BQUEsQ0FBQUMsUUFBQSxDQUFBQyxJQUFBOzBCQUNBO3dCQUNBOzBCQUNBM0MsSUFBQSxDQUFBcUMsSUFBQTs0QkFDQUMsS0FBQTs0QkFDQUMsSUFBQTs0QkFDQUMsSUFBQTs0QkFDQTswQkFDQSxHQUFBM0csSUFBQSxXQUFBK0csQ0FBQTs0QkFDQUYsUUFBQSxDQUFBRyxNQUFBOzBCQUNBO3dCQUNBO3NCQUNBO29CQUFBO29CQUFBO3NCQUFBLE9BQUFYLFFBQUEsQ0FBQTFELElBQUE7a0JBQUE7Z0JBQUEsR0FBQXNELE9BQUE7Y0FBQSxDQUNBLElBQUFsQyxLQUFBLE9BQUFELFNBQUE7WUFBQTtZQUNBYSxLQUFBLENBQUFGLE1BQUEsQ0FBQUQsSUFBQSxHQUFBWixJQUFBLENBQUFZLElBQUE7VUFBQTtVQUFBO1lBQUEsT0FBQU8sU0FBQSxDQUFBcEMsSUFBQTtRQUFBO01BQUEsR0FBQWlDLFFBQUE7SUFBQTtFQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vY3ljbGUvZWRpdC52dWU/YWVhNCJdLCJzb3VyY2VzQ29udGVudCI6WyI8dGVtcGxhdGU+XG4gICAgPGRpdiB2LWlmPVwic3VydmV5XCI+XG4gICAgICA8U3VydmV5IDpzdXJ2ZXk9XCJzdXJ2ZXlcIj48L1N1cnZleT5cbiAgICA8L2Rpdj5cbiAgPC90ZW1wbGF0ZT5cbiAgICAgIFxuICAgICAgPHNjcmlwdD5cbiAgaW1wb3J0ICogYXMgU3VydmV5VnVlIGZyb20gXCJzdXJ2ZXktdnVlXCI7XG4gIGNvbnN0IFN3YWwgPSByZXF1aXJlKFwic3dlZXRhbGVydDJcIik7XG4gIGltcG9ydCB7IGpzb24gfSBmcm9tIFwiLi9mb3JtXCI7XG4gIFxuICBleHBvcnQgZGVmYXVsdCB7XG4gICAgY29tcG9uZW50czogeyBTdXJ2ZXk6IFN1cnZleVZ1ZS5TdXJ2ZXkgfSxcbiAgICBkYXRhOiAoKSA9PiAoe1xuICAgICAgc3VydmV5OiBudWxsLFxuICAgICAgZGF0YTogbnVsbCxcbiAgICB9KSxcbiAgXG4gICAgYXN5bmMgbW91bnRlZCgpIHtcbiAgICAgIGxldCBzZWxmID0gdGhpcztcbiAgICAgIGF3YWl0IGF4aW9zXG4gICAgICAgIC5nZXQoXCIvYXBpL2N5Y2xlL2VkaXQvXCIgKyB0aGlzLiRyb3V0ZS5wYXJhbXMuaWQsIHtcbiAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICBBdXRob3JpemF0aW9uOiBBVCxcbiAgICAgICAgICAgIEFjY2VwdDogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgdGhpcy5kYXRhID0gcmVzcG9uc2UuZGF0YTtcbiAgICAgICAgICBjb25zb2xlLmxvZyh0aGlzLmRhdGEpXG4gICAgICAgIH0pO1xuICBcbiAgICAgIHRoaXMuc3VydmV5ID0gbmV3IFN1cnZleVZ1ZS5Nb2RlbChqc29uKTtcbiAgXG4gICAgICB0aGlzLnN1cnZleS5vbkNvbXBsZXRpbmcuYWRkKGFzeW5jIGZ1bmN0aW9uIChyZXN1bHQsIG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucy5hbGxvd0NvbXBsZXRlID0gZmFsc2U7XG4gICAgICAgIGF3YWl0IGF4aW9zXG4gICAgICAgICAgLnBvc3QoXCIvYXBpL2N5Y2xlL3VwZGF0ZS9cIiArIHNlbGYuJHJvdXRlLnBhcmFtcy5pZCwgcmVzdWx0LmRhdGEpXG4gICAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlLmRhdGEpXG4gICAgICAgICAgICBpZiAocmVzcG9uc2UuZGF0YSkge1xuICAgICAgICAgICAgICBTd2FsLmZpcmUoe1xuICAgICAgICAgICAgICAgIHRpdGxlOiBcIkFjdHVhbGl6YWRvXCIsXG4gICAgICAgICAgICAgICAgdGV4dDogXCJFbCBjaWNsbyBoYSBzaWRvIGFjdHVhbGl6YWRvIGNvbiDDqXhpdG9cIixcbiAgICAgICAgICAgICAgICBpY29uOiBcInN1Y2Nlc3NcIixcbiAgICAgICAgICAgICAgICAvLyAgdGltZXI6IDIwMDAsXG4gICAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gXCIvcGFuZWwtYWRtaW5pc3RyYWNpb24vY2ljbG9zXCI7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgU3dhbC5maXJlKHtcbiAgICAgICAgICAgICAgICB0aXRsZTogXCJFcnJvciFcIixcbiAgICAgICAgICAgICAgICB0ZXh0OiBcIk5vIHNlIHB1ZG8gYWN0dWFsaXphciBlbCBjaWNsby4gUG9yIGZhdm9yIGludGVudGUgbcOhcyB0YXJkZS5cIixcbiAgICAgICAgICAgICAgICBpY29uOiBcImVycm9yXCIsXG4gICAgICAgICAgICAgICAgLy8gICAgdGltZXI6IDMwMDAsXG4gICAgICAgICAgICAgIH0pLnRoZW4oKF8pID0+IHtcbiAgICAgICAgICAgICAgICBsb2NhdGlvbi5yZWxvYWQoKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuc3VydmV5LmRhdGEgPSBzZWxmLmRhdGE7XG4gICAgfSxcbiAgfTtcbiAgPC9zY3JpcHQ+Il0sIm5hbWVzIjpbIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJlIiwidCIsInIiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJuIiwiaGFzT3duUHJvcGVydHkiLCJvIiwiZGVmaW5lUHJvcGVydHkiLCJ2YWx1ZSIsImkiLCJTeW1ib2wiLCJhIiwiaXRlcmF0b3IiLCJjIiwiYXN5bmNJdGVyYXRvciIsInUiLCJ0b1N0cmluZ1RhZyIsImRlZmluZSIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsIndyYXAiLCJHZW5lcmF0b3IiLCJjcmVhdGUiLCJDb250ZXh0IiwibWFrZUludm9rZU1ldGhvZCIsInRyeUNhdGNoIiwidHlwZSIsImFyZyIsImNhbGwiLCJoIiwibCIsImYiLCJzIiwieSIsIkdlbmVyYXRvckZ1bmN0aW9uIiwiR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUiLCJwIiwiZCIsImdldFByb3RvdHlwZU9mIiwidiIsInZhbHVlcyIsImciLCJkZWZpbmVJdGVyYXRvck1ldGhvZHMiLCJmb3JFYWNoIiwiX2ludm9rZSIsIkFzeW5jSXRlcmF0b3IiLCJpbnZva2UiLCJfdHlwZW9mIiwicmVzb2x2ZSIsIl9fYXdhaXQiLCJ0aGVuIiwiY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmciLCJFcnJvciIsImRvbmUiLCJtZXRob2QiLCJkZWxlZ2F0ZSIsIm1heWJlSW52b2tlRGVsZWdhdGUiLCJzZW50IiwiX3NlbnQiLCJkaXNwYXRjaEV4Y2VwdGlvbiIsImFicnVwdCIsIlR5cGVFcnJvciIsInJlc3VsdE5hbWUiLCJuZXh0IiwibmV4dExvYyIsInB1c2hUcnlFbnRyeSIsInRyeUxvYyIsImNhdGNoTG9jIiwiZmluYWxseUxvYyIsImFmdGVyTG9jIiwidHJ5RW50cmllcyIsInB1c2giLCJyZXNldFRyeUVudHJ5IiwiY29tcGxldGlvbiIsInJlc2V0IiwiaXNOYU4iLCJsZW5ndGgiLCJkaXNwbGF5TmFtZSIsImlzR2VuZXJhdG9yRnVuY3Rpb24iLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJtYXJrIiwic2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJhd3JhcCIsImFzeW5jIiwiUHJvbWlzZSIsImtleXMiLCJyZXZlcnNlIiwicG9wIiwicHJldiIsImNoYXJBdCIsInNsaWNlIiwic3RvcCIsInJ2YWwiLCJoYW5kbGUiLCJjb21wbGV0ZSIsImZpbmlzaCIsIl9jYXRjaCIsImRlbGVnYXRlWWllbGQiLCJhc3luY0dlbmVyYXRvclN0ZXAiLCJnZW4iLCJyZWplY3QiLCJfbmV4dCIsIl90aHJvdyIsImtleSIsImluZm8iLCJlcnJvciIsIl9hc3luY1RvR2VuZXJhdG9yIiwiZm4iLCJzZWxmIiwiYXJncyIsImFyZ3VtZW50cyIsImFwcGx5IiwiZXJyIiwidW5kZWZpbmVkIiwiU3VydmV5VnVlIiwiU3dhbCIsInJlcXVpcmUiLCJqc29uIiwiY29tcG9uZW50cyIsIlN1cnZleSIsImRhdGEiLCJzdXJ2ZXkiLCJtb3VudGVkIiwiX3RoaXMiLCJfY2FsbGVlMiIsIl9yZWYiLCJfY2FsbGVlMiQiLCJfY29udGV4dDIiLCJheGlvcyIsImdldCIsIiRyb3V0ZSIsInBhcmFtcyIsImlkIiwiaGVhZGVycyIsIkF1dGhvcml6YXRpb24iLCJBVCIsIkFjY2VwdCIsInJlc3BvbnNlIiwiY29uc29sZSIsImxvZyIsIk1vZGVsIiwib25Db21wbGV0aW5nIiwiYWRkIiwiX3giLCJfeDIiLCJfY2FsbGVlIiwicmVzdWx0Iiwib3B0aW9ucyIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJhbGxvd0NvbXBsZXRlIiwicG9zdCIsImZpcmUiLCJ0aXRsZSIsInRleHQiLCJpY29uIiwid2luZG93IiwibG9jYXRpb24iLCJocmVmIiwiXyIsInJlbG9hZCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/cycle/edit.vue?vue&type=script&lang=js&\n");

/***/ }),

/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/cycle/index.vue?vue&type=script&lang=js&":
/*!************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/cycle/index.vue?vue&type=script&lang=js& ***!
  \************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nvar Swal = __webpack_require__(/*! sweetalert2 */ \"./node_modules/sweetalert2/dist/sweetalert2.all.js\");\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n  data: function data() {\n    return {\n      data: null,\n      search: \"\",\n      headers: [{\n        text: \"Nombre\",\n        value: \"name\"\n      }, {\n        text: \"Modalidad\",\n        value: \"modality\"\n      }, {\n        text: \"Tipo de Certificación\",\n        value: \"certification\"\n      }, {\n        text: \"Icono\",\n        value: \"image\"\n      }, {\n        text: \"Cantidad de Cursos\",\n        value: \"courses\"\n      }, {\n        text: \"Acciones\",\n        value: \"actions\",\n        sortable: false\n      }]\n    };\n  },\n  mounted: function mounted() {\n    this.loadData();\n  },\n  methods: {\n    loadData: function loadData() {\n      var _this = this;\n      axios.get(\"/api/cycle/index\").then(function (response) {\n        _this.data = response.data;\n      });\n    },\n    edit: function edit(id) {\n      window.location.href = \"/panel-administracion/ciclos/\" + id + \"/editar\";\n    },\n    trash: function trash(id, name) {\n      var _this2 = this;\n      Swal.fire({\n        title: \"Confirmación\",\n        html: \"<p margin-bottom: 10px;\\\">\\n                \\xBFEst\\xE1s seguro de que deseas eliminar el ciclo <b>\\\"\".concat(name, \"\\\"</b>?</p>\\n                    <p style=\\\"font-size: 0.7em;\\\">\\n                        Si lo eliminas, se eliminaran los cursos asociados.\\n                    </p>\"),\n        icon: \"warning\",\n        showCancelButton: true,\n        confirmButtonColor: \"#3085d6\",\n        cancelButtonColor: \"#d33\",\n        confirmButtonText: \"Sí, eliminar\",\n        cancelButtonText: \"Cancelar\"\n      }).then(function (result) {\n        if (result.isConfirmed) {\n          axios[\"delete\"](\"/api/cycle/delete/\" + id, {\n            headers: {\n              Authorization: AT,\n              Accept: \"application/json\"\n            }\n          }).then(function (response) {\n            Swal.fire({\n              title: \"Eliminado\",\n              text: \"Se ha eliminado el ciclo con éxito.\",\n              icon: \"success\",\n              timer: 2000\n            }).then(function (_) {});\n            _this2.loadData();\n          });\n        }\n      });\n    }\n  }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vY3ljbGUvaW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJiIsIm1hcHBpbmdzIjoiOzs7O0FBcUNBLElBQUFBLElBQUEsR0FBQUMsbUJBQUE7QUFDQSxpRUFBZTtFQUNmQyxJQUFBLFdBQUFBLEtBQUE7SUFDQTtNQUNBQSxJQUFBO01BQ0FDLE1BQUE7TUFDQUMsT0FBQSxHQUNBO1FBQUFDLElBQUE7UUFBQUMsS0FBQTtNQUFBLEdBQ0E7UUFBQUQsSUFBQTtRQUFBQyxLQUFBO01BQUEsR0FDQTtRQUFBRCxJQUFBO1FBQUFDLEtBQUE7TUFBQSxHQUNBO1FBQUFELElBQUE7UUFBQUMsS0FBQTtNQUFBLEdBQ0E7UUFBQUQsSUFBQTtRQUFBQyxLQUFBO01BQUEsR0FDQTtRQUFBRCxJQUFBO1FBQUFDLEtBQUE7UUFBQUMsUUFBQTtNQUFBO0lBRUE7RUFDQTtFQUNBQyxPQUFBLFdBQUFBLFFBQUE7SUFDQSxLQUFBQyxRQUFBO0VBQ0E7RUFDQUMsT0FBQTtJQUNBRCxRQUFBLFdBQUFBLFNBQUE7TUFBQSxJQUFBRSxLQUFBO01BQ0FDLEtBQUEsQ0FBQUMsR0FBQSxxQkFBQUMsSUFBQSxXQUFBQyxRQUFBO1FBQ0FKLEtBQUEsQ0FBQVQsSUFBQSxHQUFBYSxRQUFBLENBQUFiLElBQUE7TUFDQTtJQUNBO0lBQ0FjLElBQUEsV0FBQUEsS0FBQUMsRUFBQTtNQUNBQyxNQUFBLENBQUFDLFFBQUEsQ0FBQUMsSUFBQSxxQ0FBQUgsRUFBQTtJQUNBO0lBQ0FJLEtBQUEsV0FBQUEsTUFBQUosRUFBQSxFQUFBSyxJQUFBO01BQUEsSUFBQUMsTUFBQTtNQUNBdkIsSUFBQSxDQUFBd0IsSUFBQTtRQUNBQyxLQUFBO1FBQ0FDLElBQUEsMEdBQUFDLE1BQUEsQ0FDQUwsSUFBQSw0S0FHQTtRQUNBTSxJQUFBO1FBQ0FDLGdCQUFBO1FBQ0FDLGtCQUFBO1FBQ0FDLGlCQUFBO1FBQ0FDLGlCQUFBO1FBQ0FDLGdCQUFBO01BQ0EsR0FBQW5CLElBQUEsV0FBQW9CLE1BQUE7UUFDQSxJQUFBQSxNQUFBLENBQUFDLFdBQUE7VUFDQXZCLEtBQUEsVUFDQSx3QkFBQUssRUFBQTtZQUNBYixPQUFBO2NBQ0FnQyxhQUFBLEVBQUFDLEVBQUE7Y0FDQUMsTUFBQTtZQUNBO1VBQ0EsR0FDQXhCLElBQUEsV0FBQUMsUUFBQTtZQUNBZixJQUFBLENBQUF3QixJQUFBO2NBQ0FDLEtBQUE7Y0FDQXBCLElBQUE7Y0FDQXVCLElBQUE7Y0FDQVcsS0FBQTtZQUNBLEdBQUF6QixJQUFBLFdBQUEwQixDQUFBO1lBQ0FqQixNQUFBLENBQUFkLFFBQUE7VUFDQTtRQUNBO01BQ0E7SUFDQTtFQUNBO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9jeWNsZS9pbmRleC52dWU/NzY2ZCJdLCJzb3VyY2VzQ29udGVudCI6WyI8dGVtcGxhdGU+XG4gIDx2LWFwcD5cbiAgICA8di1jYXJkIHYtaWY9XCJkYXRhXCI+XG4gICAgICA8di1jYXJkLXRpdGxlPlxuICAgICAgICBBZG1pbmlzdHJhY2nDs24gZGUgQ2ljbG9zXG4gICAgICAgIDx2LXNwYWNlcj48L3Ytc3BhY2VyPlxuICAgICAgICA8di10ZXh0LWZpZWxkXG4gICAgICAgICAgdi1tb2RlbD1cInNlYXJjaFwiXG4gICAgICAgICAgYXBwZW5kLWljb249XCJtZGktbWFnbmlmeVwiXG4gICAgICAgICAgbGFiZWw9XCJCdXNjYXJcIlxuICAgICAgICAgIHNpbmdsZS1saW5lXG4gICAgICAgICAgaGlkZS1kZXRhaWxzXG4gICAgICAgID48L3YtdGV4dC1maWVsZD5cbiAgICAgIDwvdi1jYXJkLXRpdGxlPlxuICAgICAgPHYtZGF0YS10YWJsZVxuICAgICAgICA6aGVhZGVycz1cImhlYWRlcnNcIlxuICAgICAgICA6aXRlbXM9XCJkYXRhXCJcbiAgICAgICAgY2xhc3M9XCJlbGV2YXRpb24tMVwiXG4gICAgICAgIDpzZWFyY2g9XCJzZWFyY2hcIlxuICAgICAgPlxuICAgICAgICA8dGVtcGxhdGUgdi1zbG90Oml0ZW0uaW1hZ2U9XCJ7IGl0ZW0gfVwiPlxuICAgICAgICAgIDx2LWltZyBtYXgtaGVpZ2h0PVwiNDBcIiBtYXgtd2lkdGg9XCI4MFwiIGNvbnRhaW4gOnNyYz1cIml0ZW0uaW1hZ2VuXCI+PC92LWltZ1xuICAgICAgICA+PC90ZW1wbGF0ZT5cbiAgICAgICAgPHRlbXBsYXRlIHYtc2xvdDppdGVtLmFjdGlvbnM9XCJ7IGl0ZW0gfVwiPlxuICAgICAgICAgIDx2LWJ0biBjb2xvcj1cInJlZFwiIGZhYiB4LXNtYWxsIGRhcmsgQGNsaWNrPVwiZWRpdChpdGVtLmlkKVwiPlxuICAgICAgICAgICAgPHYtaWNvbj4gbWRpLXBlbmNpbCA8L3YtaWNvbj5cbiAgICAgICAgICA8L3YtYnRuPlxuICAgICAgICAgIDx2LWJ0biBjb2xvcj1cIndhcm5pbmdcIiBmYWIgeC1zbWFsbCBkYXJrIEBjbGljaz1cInRyYXNoKGl0ZW0uaWQsIGl0ZW0ubmFtZSlcIj5cbiAgICAgICAgICAgIDx2LWljb24+IG1kaS1kZWxldGUgPC92LWljb24+XG4gICAgICAgICAgPC92LWJ0bj5cbiAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgIDwvdi1kYXRhLXRhYmxlPlxuICAgIDwvdi1jYXJkPlxuICA8L3YtYXBwPlxuPC90ZW1wbGF0ZT5cbiAgXG4gIDxzY3JpcHQ+XG4gIGNvbnN0IFN3YWwgPSByZXF1aXJlKFwic3dlZXRhbGVydDJcIik7XG5leHBvcnQgZGVmYXVsdCB7XG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGE6IG51bGwsXG4gICAgICBzZWFyY2g6IFwiXCIsXG4gICAgICBoZWFkZXJzOiBbXG4gICAgICAgIHsgdGV4dDogXCJOb21icmVcIiwgdmFsdWU6IFwibmFtZVwiIH0sXG4gICAgICAgIHsgdGV4dDogXCJNb2RhbGlkYWRcIiwgdmFsdWU6IFwibW9kYWxpdHlcIiB9LFxuICAgICAgICB7IHRleHQ6IFwiVGlwbyBkZSBDZXJ0aWZpY2FjacOzblwiLCB2YWx1ZTogXCJjZXJ0aWZpY2F0aW9uXCIgfSxcbiAgICAgICAgeyB0ZXh0OiBcIkljb25vXCIsIHZhbHVlOiBcImltYWdlXCIgfSxcbiAgICAgICAgeyB0ZXh0OiBcIkNhbnRpZGFkIGRlIEN1cnNvc1wiLCB2YWx1ZTogXCJjb3Vyc2VzXCIgfSxcbiAgICAgICAgeyB0ZXh0OiBcIkFjY2lvbmVzXCIsIHZhbHVlOiBcImFjdGlvbnNcIiwgc29ydGFibGU6IGZhbHNlIH0sXG4gICAgICBdLFxuICAgIH07XG4gIH0sXG4gIG1vdW50ZWQoKSB7XG4gICAgdGhpcy5sb2FkRGF0YSgpO1xuICB9LFxuICBtZXRob2RzOiB7XG4gICAgbG9hZERhdGEoKSB7XG4gICAgICBheGlvcy5nZXQoXCIvYXBpL2N5Y2xlL2luZGV4XCIpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIHRoaXMuZGF0YSA9IHJlc3BvbnNlLmRhdGE7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGVkaXQoaWQpIHtcbiAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gXCIvcGFuZWwtYWRtaW5pc3RyYWNpb24vY2ljbG9zL1wiICsgaWQgKyBcIi9lZGl0YXJcIjtcbiAgICB9LFxuICAgIHRyYXNoKGlkLCBuYW1lKSB7XG4gICAgICBTd2FsLmZpcmUoe1xuICAgICAgICB0aXRsZTogXCJDb25maXJtYWNpw7NuXCIsXG4gICAgICAgIGh0bWw6IGA8cCBtYXJnaW4tYm90dG9tOiAxMHB4O1wiPlxuICAgICAgICAgICAgICAgIMK/RXN0w6FzIHNlZ3VybyBkZSBxdWUgZGVzZWFzIGVsaW1pbmFyIGVsIGNpY2xvIDxiPlwiJHtuYW1lfVwiPC9iPj88L3A+XG4gICAgICAgICAgICAgICAgICAgIDxwIHN0eWxlPVwiZm9udC1zaXplOiAwLjdlbTtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIFNpIGxvIGVsaW1pbmFzLCBzZSBlbGltaW5hcmFuIGxvcyBjdXJzb3MgYXNvY2lhZG9zLlxuICAgICAgICAgICAgICAgICAgICA8L3A+YCxcbiAgICAgICAgaWNvbjogXCJ3YXJuaW5nXCIsXG4gICAgICAgIHNob3dDYW5jZWxCdXR0b246IHRydWUsXG4gICAgICAgIGNvbmZpcm1CdXR0b25Db2xvcjogXCIjMzA4NWQ2XCIsXG4gICAgICAgIGNhbmNlbEJ1dHRvbkNvbG9yOiBcIiNkMzNcIixcbiAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6IFwiU8OtLCBlbGltaW5hclwiLFxuICAgICAgICBjYW5jZWxCdXR0b25UZXh0OiBcIkNhbmNlbGFyXCIsXG4gICAgICB9KS50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdC5pc0NvbmZpcm1lZCkge1xuICAgICAgICAgIGF4aW9zXG4gICAgICAgICAgICAuZGVsZXRlKFwiL2FwaS9jeWNsZS9kZWxldGUvXCIgKyBpZCwge1xuICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgQXV0aG9yaXphdGlvbjogQVQsXG4gICAgICAgICAgICAgICAgQWNjZXB0OiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgU3dhbC5maXJlKHtcbiAgICAgICAgICAgICAgICB0aXRsZTogXCJFbGltaW5hZG9cIixcbiAgICAgICAgICAgICAgICB0ZXh0OiBcIlNlIGhhIGVsaW1pbmFkbyBlbCBjaWNsbyBjb24gw6l4aXRvLlwiLFxuICAgICAgICAgICAgICAgIGljb246IFwic3VjY2Vzc1wiLFxuICAgICAgICAgICAgICAgIHRpbWVyOiAyMDAwLFxuICAgICAgICAgICAgICB9KS50aGVuKChfKSA9PiB7fSk7XG4gICAgICAgICAgICAgIHRoaXMubG9hZERhdGEoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuICB9LFxufTtcbjwvc2NyaXB0PiJdLCJuYW1lcyI6WyJTd2FsIiwicmVxdWlyZSIsImRhdGEiLCJzZWFyY2giLCJoZWFkZXJzIiwidGV4dCIsInZhbHVlIiwic29ydGFibGUiLCJtb3VudGVkIiwibG9hZERhdGEiLCJtZXRob2RzIiwiX3RoaXMiLCJheGlvcyIsImdldCIsInRoZW4iLCJyZXNwb25zZSIsImVkaXQiLCJpZCIsIndpbmRvdyIsImxvY2F0aW9uIiwiaHJlZiIsInRyYXNoIiwibmFtZSIsIl90aGlzMiIsImZpcmUiLCJ0aXRsZSIsImh0bWwiLCJjb25jYXQiLCJpY29uIiwic2hvd0NhbmNlbEJ1dHRvbiIsImNvbmZpcm1CdXR0b25Db2xvciIsImNhbmNlbEJ1dHRvbkNvbG9yIiwiY29uZmlybUJ1dHRvblRleHQiLCJjYW5jZWxCdXR0b25UZXh0IiwicmVzdWx0IiwiaXNDb25maXJtZWQiLCJBdXRob3JpemF0aW9uIiwiQVQiLCJBY2NlcHQiLCJ0aW1lciIsIl8iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/cycle/index.vue?vue&type=script&lang=js&\n");

/***/ }),

/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/library/create.vue?vue&type=script&lang=js&":
/*!***************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/library/create.vue?vue&type=script&lang=js& ***!
  \***************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var survey_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! survey-vue */ \"./node_modules/survey-vue/survey-vue.js\");\n/* harmony import */ var survey_vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(survey_vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _form__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./form */ \"./resources/js/components/admin/library/form.js\");\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = \"function\" == typeof Symbol ? Symbol : {}, a = i.iterator || \"@@iterator\", c = i.asyncIterator || \"@@asyncIterator\", u = i.toStringTag || \"@@toStringTag\"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, \"\"); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, \"_invoke\", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: \"normal\", arg: t.call(e, r) }; } catch (t) { return { type: \"throw\", arg: t }; } } e.wrap = wrap; var h = \"suspendedStart\", l = \"suspendedYield\", f = \"executing\", s = \"completed\", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { [\"next\", \"throw\", \"return\"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if (\"throw\" !== c.type) { var u = c.arg, h = u.value; return h && \"object\" == _typeof(h) && n.call(h, \"__await\") ? e.resolve(h.__await).then(function (t) { invoke(\"next\", t, i, a); }, function (t) { invoke(\"throw\", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke(\"throw\", t, i, a); }); } a(c.arg); } var r; o(this, \"_invoke\", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error(\"Generator is already running\"); if (o === s) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = f; var p = tryCatch(e, r, n); if (\"normal\" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } \"throw\" === p.type && (o = s, n.method = \"throw\", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, \"throw\" === n && e.iterator[\"return\"] && (r.method = \"return\", r.arg = t, maybeInvokeDelegate(e, r), \"throw\" === r.method) || \"return\" !== n && (r.method = \"throw\", r.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), y; var i = tryCatch(o, e.iterator, r.arg); if (\"throw\" === i.type) return r.method = \"throw\", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, \"return\" !== r.method && (r.method = \"next\", r.arg = t), r.delegate = null, y) : a : (r.method = \"throw\", r.arg = new TypeError(\"iterator result is not an object\"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = \"normal\", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: \"root\" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || \"\" === e) { var r = e[a]; if (r) return r.call(e); if (\"function\" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, \"constructor\", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, \"constructor\", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), e.isGeneratorFunction = function (t) { var e = \"function\" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || \"GeneratorFunction\" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, \"GeneratorFunction\")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, \"Generator\"), define(g, a, function () { return this; }), define(g, \"toString\", function () { return \"[object Generator]\"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) \"t\" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = \"throw\", a.arg = e, r.next = n, o && (r.method = \"next\", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if (\"root\" === i.tryLoc) return handle(\"end\"); if (i.tryLoc <= this.prev) { var c = n.call(i, \"catchLoc\"), u = n.call(i, \"finallyLoc\"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error(\"try statement without catch or finally\"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, \"finallyLoc\") && this.prev < o.finallyLoc) { var i = o; break; } } i && (\"break\" === t || \"continue\" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = \"next\", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, \"catch\": function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if (\"throw\" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, \"next\" === this.method && (this.arg = t), y; } }, e; }\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nvar Swal = __webpack_require__(/*! sweetalert2 */ \"./node_modules/sweetalert2/dist/sweetalert2.all.js\");\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n  components: {\n    Survey: survey_vue__WEBPACK_IMPORTED_MODULE_0__.Survey\n  },\n  data: function data() {\n    return {\n      survey: null\n    };\n  },\n  mounted: function mounted() {\n    var _this = this;\n    return _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {\n      var _ref;\n      return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n        while (1) switch (_context2.prev = _context2.next) {\n          case 0:\n            _this.survey = new survey_vue__WEBPACK_IMPORTED_MODULE_0__.Model(_form__WEBPACK_IMPORTED_MODULE_1__.json);\n            _this.survey.onCompleting.add(function (_x, _x2) {\n              return (_ref = _ref || _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(result, options) {\n                return _regeneratorRuntime().wrap(function _callee$(_context) {\n                  while (1) switch (_context.prev = _context.next) {\n                    case 0:\n                      options.allowComplete = false;\n                      _context.next = 3;\n                      return axios.post(\"/api/library/store\", result.data).then(function (response) {\n                        if (response.data) {\n                          console.log(response.data);\n                          Swal.fire({\n                            title: \"Actualizado\",\n                            text: \"El elemento en la biblioteca ha sido creado con éxito\",\n                            icon: \"success\"\n                            //  timer: 2000,\n                          }).then(function () {\n                            window.location.href = \"/panel-administracion/biblioteca\";\n                          });\n                        } else {\n                          Swal.fire({\n                            title: \"Error!\",\n                            text: \"No se pudo crear el elemento en la biblioteca. Por favor intente más tarde.\",\n                            icon: \"error\"\n                            //    timer: 3000,\n                          }).then(function (_) {\n                            location.reload();\n                          });\n                        }\n                      });\n                    case 3:\n                    case \"end\":\n                      return _context.stop();\n                  }\n                }, _callee);\n              }))).apply(this, arguments);\n            });\n          case 2:\n          case \"end\":\n            return _context2.stop();\n        }\n      }, _callee2);\n    }))();\n  }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vbGlicmFyeS9jcmVhdGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJiIsIm1hcHBpbmdzIjoiOzs7Ozs7OzsrQ0FPQSxxSkFBQUEsbUJBQUEsWUFBQUEsb0JBQUEsV0FBQUMsQ0FBQSxTQUFBQyxDQUFBLEVBQUFELENBQUEsT0FBQUUsQ0FBQSxHQUFBQyxNQUFBLENBQUFDLFNBQUEsRUFBQUMsQ0FBQSxHQUFBSCxDQUFBLENBQUFJLGNBQUEsRUFBQUMsQ0FBQSxHQUFBSixNQUFBLENBQUFLLGNBQUEsY0FBQVAsQ0FBQSxFQUFBRCxDQUFBLEVBQUFFLENBQUEsSUFBQUQsQ0FBQSxDQUFBRCxDQUFBLElBQUFFLENBQUEsQ0FBQU8sS0FBQSxLQUFBQyxDQUFBLHdCQUFBQyxNQUFBLEdBQUFBLE1BQUEsT0FBQUMsQ0FBQSxHQUFBRixDQUFBLENBQUFHLFFBQUEsa0JBQUFDLENBQUEsR0FBQUosQ0FBQSxDQUFBSyxhQUFBLHVCQUFBQyxDQUFBLEdBQUFOLENBQUEsQ0FBQU8sV0FBQSw4QkFBQUMsT0FBQWpCLENBQUEsRUFBQUQsQ0FBQSxFQUFBRSxDQUFBLFdBQUFDLE1BQUEsQ0FBQUssY0FBQSxDQUFBUCxDQUFBLEVBQUFELENBQUEsSUFBQVMsS0FBQSxFQUFBUCxDQUFBLEVBQUFpQixVQUFBLE1BQUFDLFlBQUEsTUFBQUMsUUFBQSxTQUFBcEIsQ0FBQSxDQUFBRCxDQUFBLFdBQUFrQixNQUFBLG1CQUFBakIsQ0FBQSxJQUFBaUIsTUFBQSxZQUFBQSxPQUFBakIsQ0FBQSxFQUFBRCxDQUFBLEVBQUFFLENBQUEsV0FBQUQsQ0FBQSxDQUFBRCxDQUFBLElBQUFFLENBQUEsZ0JBQUFvQixL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QUF1RyxDQUFBOzRCQUNBRixRQUFBLENBQUFHLE1BQUE7MEJBQ0E7d0JBQ0E7c0JBQ0E7b0JBQUE7b0JBQUE7c0JBQUEsT0FBQWYsUUFBQSxDQUFBOUMsSUFBQTtrQkFBQTtnQkFBQSxHQUFBMEMsT0FBQTtjQUFBLENBQ0EsSUFBQXRCLEtBQUEsT0FBQUQsU0FBQTtZQUFBO1VBQUE7VUFBQTtZQUFBLE9BQUFpQixTQUFBLENBQUFwQyxJQUFBO1FBQUE7TUFBQSxHQUFBaUMsUUFBQTtJQUFBO0VBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9saWJyYXJ5L2NyZWF0ZS52dWU/NjA2MCJdLCJzb3VyY2VzQ29udGVudCI6WyI8dGVtcGxhdGU+XG4gICAgPGRpdiB2LWlmPVwic3VydmV5XCI+XG4gICAgICAgIDxTdXJ2ZXkgOnN1cnZleT1cInN1cnZleVwiPjwvU3VydmV5PlxuICAgIDwvZGl2PlxuICA8L3RlbXBsYXRlPlxuICAgIFxuICAgIDxzY3JpcHQ+XG4gIGltcG9ydCAqIGFzIFN1cnZleVZ1ZSBmcm9tICdzdXJ2ZXktdnVlJztcbiAgY29uc3QgU3dhbCA9IHJlcXVpcmUoXCJzd2VldGFsZXJ0MlwiKTtcbiAgaW1wb3J0IHsganNvbiB9IGZyb20gXCIuL2Zvcm1cIjtcbiAgXG4gIGV4cG9ydCBkZWZhdWx0IHtcbiAgICBjb21wb25lbnRzOiB7IFN1cnZleTogU3VydmV5VnVlLlN1cnZleSB9LFxuICAgIGRhdGE6ICgpID0+ICh7XG4gICAgICBzdXJ2ZXk6IG51bGwsXG4gICAgfSksXG4gIFxuICAgIGFzeW5jIG1vdW50ZWQoKSB7XG4gIFxuICAgICAgdGhpcy5zdXJ2ZXkgPSBuZXcgU3VydmV5VnVlLk1vZGVsKGpzb24pO1xuICBcbiAgICAgIHRoaXMuc3VydmV5Lm9uQ29tcGxldGluZy5hZGQoYXN5bmMgZnVuY3Rpb24gKHJlc3VsdCwgb3B0aW9ucykge1xuICAgICAgICBvcHRpb25zLmFsbG93Q29tcGxldGUgPSBmYWxzZTtcbiAgICAgICAgYXdhaXQgYXhpb3NcbiAgICAgICAgLnBvc3QoXCIvYXBpL2xpYnJhcnkvc3RvcmVcIiwgcmVzdWx0LmRhdGEpXG4gICAgICAgIC50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhyZXNwb25zZS5kYXRhKTtcbiAgICAgICAgICAgIFN3YWwuZmlyZSh7XG4gICAgICAgICAgICAgIHRpdGxlOiBcIkFjdHVhbGl6YWRvXCIsXG4gICAgICAgICAgICAgIHRleHQ6IFwiRWwgZWxlbWVudG8gZW4gbGEgYmlibGlvdGVjYSBoYSBzaWRvIGNyZWFkbyBjb24gw6l4aXRvXCIsXG4gICAgICAgICAgICAgIGljb246IFwic3VjY2Vzc1wiLFxuICAgICAgICAgICAgLy8gIHRpbWVyOiAyMDAwLFxuICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID1cbiAgICAgICAgICAgICAgICBcIi9wYW5lbC1hZG1pbmlzdHJhY2lvbi9iaWJsaW90ZWNhXCI7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgU3dhbC5maXJlKHtcbiAgICAgICAgICAgICAgdGl0bGU6IFwiRXJyb3IhXCIsXG4gICAgICAgICAgICAgIHRleHQ6XG4gICAgICAgICAgICAgICAgXCJObyBzZSBwdWRvIGNyZWFyIGVsIGVsZW1lbnRvIGVuIGxhIGJpYmxpb3RlY2EuIFBvciBmYXZvciBpbnRlbnRlIG3DoXMgdGFyZGUuXCIsXG4gICAgICAgICAgICAgIGljb246IFwiZXJyb3JcIixcbiAgICAgICAgICAvLyAgICB0aW1lcjogMzAwMCxcbiAgICAgICAgICAgIH0pLnRoZW4oKF8pID0+IHtcbiAgICAgICAgICAgICAgbG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSxcbiAgfTtcbiAgPC9zY3JpcHQ+XG4gICAgIl0sIm5hbWVzIjpbIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJlIiwidCIsInIiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJuIiwiaGFzT3duUHJvcGVydHkiLCJvIiwiZGVmaW5lUHJvcGVydHkiLCJ2YWx1ZSIsImkiLCJTeW1ib2wiLCJhIiwiaXRlcmF0b3IiLCJjIiwiYXN5bmNJdGVyYXRvciIsInUiLCJ0b1N0cmluZ1RhZyIsImRlZmluZSIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsIndyYXAiLCJHZW5lcmF0b3IiLCJjcmVhdGUiLCJDb250ZXh0IiwibWFrZUludm9rZU1ldGhvZCIsInRyeUNhdGNoIiwidHlwZSIsImFyZyIsImNhbGwiLCJoIiwibCIsImYiLCJzIiwieSIsIkdlbmVyYXRvckZ1bmN0aW9uIiwiR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUiLCJwIiwiZCIsImdldFByb3RvdHlwZU9mIiwidiIsInZhbHVlcyIsImciLCJkZWZpbmVJdGVyYXRvck1ldGhvZHMiLCJmb3JFYWNoIiwiX2ludm9rZSIsIkFzeW5jSXRlcmF0b3IiLCJpbnZva2UiLCJfdHlwZW9mIiwicmVzb2x2ZSIsIl9fYXdhaXQiLCJ0aGVuIiwiY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmciLCJFcnJvciIsImRvbmUiLCJtZXRob2QiLCJkZWxlZ2F0ZSIsIm1heWJlSW52b2tlRGVsZWdhdGUiLCJzZW50IiwiX3NlbnQiLCJkaXNwYXRjaEV4Y2VwdGlvbiIsImFicnVwdCIsIlR5cGVFcnJvciIsInJlc3VsdE5hbWUiLCJuZXh0IiwibmV4dExvYyIsInB1c2hUcnlFbnRyeSIsInRyeUxvYyIsImNhdGNoTG9jIiwiZmluYWxseUxvYyIsImFmdGVyTG9jIiwidHJ5RW50cmllcyIsInB1c2giLCJyZXNldFRyeUVudHJ5IiwiY29tcGxldGlvbiIsInJlc2V0IiwiaXNOYU4iLCJsZW5ndGgiLCJkaXNwbGF5TmFtZSIsImlzR2VuZXJhdG9yRnVuY3Rpb24iLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJtYXJrIiwic2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJhd3JhcCIsImFzeW5jIiwiUHJvbWlzZSIsImtleXMiLCJyZXZlcnNlIiwicG9wIiwicHJldiIsImNoYXJBdCIsInNsaWNlIiwic3RvcCIsInJ2YWwiLCJoYW5kbGUiLCJjb21wbGV0ZSIsImZpbmlzaCIsIl9jYXRjaCIsImRlbGVnYXRlWWllbGQiLCJhc3luY0dlbmVyYXRvclN0ZXAiLCJnZW4iLCJyZWplY3QiLCJfbmV4dCIsIl90aHJvdyIsImtleSIsImluZm8iLCJlcnJvciIsIl9hc3luY1RvR2VuZXJhdG9yIiwiZm4iLCJzZWxmIiwiYXJncyIsImFyZ3VtZW50cyIsImFwcGx5IiwiZXJyIiwidW5kZWZpbmVkIiwiU3VydmV5VnVlIiwiU3dhbCIsInJlcXVpcmUiLCJqc29uIiwiY29tcG9uZW50cyIsIlN1cnZleSIsImRhdGEiLCJzdXJ2ZXkiLCJtb3VudGVkIiwiX3RoaXMiLCJfY2FsbGVlMiIsIl9yZWYiLCJfY2FsbGVlMiQiLCJfY29udGV4dDIiLCJNb2RlbCIsIm9uQ29tcGxldGluZyIsImFkZCIsIl94IiwiX3gyIiwiX2NhbGxlZSIsInJlc3VsdCIsIm9wdGlvbnMiLCJfY2FsbGVlJCIsIl9jb250ZXh0IiwiYWxsb3dDb21wbGV0ZSIsImF4aW9zIiwicG9zdCIsInJlc3BvbnNlIiwiY29uc29sZSIsImxvZyIsImZpcmUiLCJ0aXRsZSIsInRleHQiLCJpY29uIiwid2luZG93IiwibG9jYXRpb24iLCJocmVmIiwiXyIsInJlbG9hZCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/library/create.vue?vue&type=script&lang=js&\n");

/***/ }),

/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/library/edit.vue?vue&type=script&lang=js&":
/*!*************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/library/edit.vue?vue&type=script&lang=js& ***!
  \*************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var survey_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! survey-vue */ \"./node_modules/survey-vue/survey-vue.js\");\n/* harmony import */ var survey_vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(survey_vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _form__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./form */ \"./resources/js/components/admin/library/form.js\");\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = \"function\" == typeof Symbol ? Symbol : {}, a = i.iterator || \"@@iterator\", c = i.asyncIterator || \"@@asyncIterator\", u = i.toStringTag || \"@@toStringTag\"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, \"\"); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, \"_invoke\", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: \"normal\", arg: t.call(e, r) }; } catch (t) { return { type: \"throw\", arg: t }; } } e.wrap = wrap; var h = \"suspendedStart\", l = \"suspendedYield\", f = \"executing\", s = \"completed\", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { [\"next\", \"throw\", \"return\"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if (\"throw\" !== c.type) { var u = c.arg, h = u.value; return h && \"object\" == _typeof(h) && n.call(h, \"__await\") ? e.resolve(h.__await).then(function (t) { invoke(\"next\", t, i, a); }, function (t) { invoke(\"throw\", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke(\"throw\", t, i, a); }); } a(c.arg); } var r; o(this, \"_invoke\", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error(\"Generator is already running\"); if (o === s) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = f; var p = tryCatch(e, r, n); if (\"normal\" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } \"throw\" === p.type && (o = s, n.method = \"throw\", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, \"throw\" === n && e.iterator[\"return\"] && (r.method = \"return\", r.arg = t, maybeInvokeDelegate(e, r), \"throw\" === r.method) || \"return\" !== n && (r.method = \"throw\", r.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), y; var i = tryCatch(o, e.iterator, r.arg); if (\"throw\" === i.type) return r.method = \"throw\", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, \"return\" !== r.method && (r.method = \"next\", r.arg = t), r.delegate = null, y) : a : (r.method = \"throw\", r.arg = new TypeError(\"iterator result is not an object\"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = \"normal\", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: \"root\" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || \"\" === e) { var r = e[a]; if (r) return r.call(e); if (\"function\" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, \"constructor\", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, \"constructor\", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), e.isGeneratorFunction = function (t) { var e = \"function\" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || \"GeneratorFunction\" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, \"GeneratorFunction\")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, \"Generator\"), define(g, a, function () { return this; }), define(g, \"toString\", function () { return \"[object Generator]\"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) \"t\" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = \"throw\", a.arg = e, r.next = n, o && (r.method = \"next\", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if (\"root\" === i.tryLoc) return handle(\"end\"); if (i.tryLoc <= this.prev) { var c = n.call(i, \"catchLoc\"), u = n.call(i, \"finallyLoc\"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error(\"try statement without catch or finally\"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, \"finallyLoc\") && this.prev < o.finallyLoc) { var i = o; break; } } i && (\"break\" === t || \"continue\" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = \"next\", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, \"catch\": function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if (\"throw\" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, \"next\" === this.method && (this.arg = t), y; } }, e; }\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nvar Swal = __webpack_require__(/*! sweetalert2 */ \"./node_modules/sweetalert2/dist/sweetalert2.all.js\");\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n  components: {\n    Survey: survey_vue__WEBPACK_IMPORTED_MODULE_0__.Survey\n  },\n  data: function data() {\n    return {\n      survey: null,\n      data: null\n    };\n  },\n  mounted: function mounted() {\n    var _this = this;\n    return _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {\n      var _ref;\n      var self;\n      return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n        while (1) switch (_context2.prev = _context2.next) {\n          case 0:\n            self = _this;\n            _context2.next = 3;\n            return axios.get(\"/api/library/edit/\" + _this.$route.params.id, {\n              headers: {\n                Authorization: AT,\n                Accept: \"application/json\"\n              }\n            }).then(function (response) {\n              _this.data = response.data;\n              console.log(_this.data);\n            });\n          case 3:\n            _this.survey = new survey_vue__WEBPACK_IMPORTED_MODULE_0__.Model(_form__WEBPACK_IMPORTED_MODULE_1__.json);\n            _this.survey.onCompleting.add(function (_x, _x2) {\n              return (_ref = _ref || _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(result, options) {\n                return _regeneratorRuntime().wrap(function _callee$(_context) {\n                  while (1) switch (_context.prev = _context.next) {\n                    case 0:\n                      options.allowComplete = false;\n                      _context.next = 3;\n                      return axios.post(\"/api/library/update/\" + self.$route.params.id, result.data).then(function (response) {\n                        console.log(response.data);\n                        if (response.data) {\n                          Swal.fire({\n                            title: \"Actualizado\",\n                            text: \"El elemento en la biblioteca ha sido actualizado con éxito\",\n                            icon: \"success\"\n                            //  timer: 2000,\n                          }).then(function () {\n                            window.location.href = \"/panel-administracion/biblioteca\";\n                          });\n                        } else {\n                          Swal.fire({\n                            title: \"Error!\",\n                            text: \"No se pudo actualizar el elemento en la biblioteca. Por favor intente más tarde.\",\n                            icon: \"error\"\n                            //    timer: 3000,\n                          }).then(function (_) {\n                            location.reload();\n                          });\n                        }\n                      });\n                    case 3:\n                    case \"end\":\n                      return _context.stop();\n                  }\n                }, _callee);\n              }))).apply(this, arguments);\n            });\n            _this.survey.data = self.data;\n          case 6:\n          case \"end\":\n            return _context2.stop();\n        }\n      }, _callee2);\n    }))();\n  }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vbGlicmFyeS9lZGl0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7K0NBT0EscUpBQUFBLG1CQUFBLFlBQUFBLG9CQUFBLFdBQUFDLENBQUEsU0FBQUMsQ0FBQSxFQUFBRCxDQUFBLE9BQUFFLENBQUEsR0FBQUMsTUFBQSxDQUFBQyxTQUFBLEVBQUFDLENBQUEsR0FBQUgsQ0FBQSxDQUFBSSxjQUFBLEVBQUFDLENBQUEsR0FBQUosTUFBQSxDQUFBSyxjQUFBLGNBQUFQLENBQUEsRUFBQUQsQ0FBQSxFQUFBRSxDQUFBLElBQUFELENBQUEsQ0FBQUQsQ0FBQSxJQUFBRSxDQUFBLENBQUFPLEtBQUEsS0FBQUMsQ0FBQSx3QkFBQUMsTUFBQSxHQUFBQSxNQUFBLE9BQUFDLENBQUEsR0FBQUYsQ0FBQSxDQUFBRyxRQUFBLGtCQUFBQyxDQUFBLEdBQUFKLENBQUEsQ0FBQUssYUFBQSx1QkFBQUMsQ0FBQSxHQUFBTixDQUFBLENBQUFPLFdBQUEsOEJBQUFDLE9BQUFqQixDQUFBLEVBQUFELENBQUEsRUFBQUUsQ0FBQSxXQUFBQyxNQUFBLENBQUFLLGNBQUEsQ0FBQVAsQ0FBQSxFQUFBRCxDQUFBLElBQUFTLEtBQUEsRUFBQVAsQ0FBQSxFQUFBaUIsVUFBQSxNQUFBQyxZQUFBLE1BQUFDLFFBQUEsU0FBQXBCLENBQUEsQ0FBQUQsQ0FBQSxXQUFBa0IsTUFBQSxtQkFBQWpCLENBQUEsSUFBQWlCLE1BQUEsWUFBQUEsT0FBQWpCLENBQUEsRUFBQUQsQ0FBQSxFQUFBRSxDQUFBLFdBQUFELENBQUEsQ0FBQUQsQ0FBQSxJQUFBRSxDQUFBLGdCQUFBb0IsS0FB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QUEsQ0FBQUMsTUFBQSxDQUFBQyxFQUFBLEVBQUFjLE1BQUEsQ0FBQTFCLElBQUEsRUFDQXhFLElBQUEsV0FBQXlGLFFBQUE7d0JBQ0FDLE9BQUEsQ0FBQUMsR0FBQSxDQUFBRixRQUFBLENBQUFqQixJQUFBO3dCQUNBLElBQUFpQixRQUFBLENBQUFqQixJQUFBOzBCQUNBTCxJQUFBLENBQUFxQyxJQUFBOzRCQUNBQyxLQUFBOzRCQUNBQyxJQUFBOzRCQUNBQyxJQUFBOzRCQUNBOzBCQUNBLEdBQUEzRyxJQUFBOzRCQUNBNEcsTUFBQSxDQUFBQyxRQUFBLENBQUFDLElBQUE7MEJBQ0E7d0JBQ0E7MEJBQ0EzQyxJQUFBLENBQUFxQyxJQUFBOzRCQUNBQyxLQUFBOzRCQUNBQyxJQUFBOzRCQUNBQyxJQUFBOzRCQUNBOzBCQUNBLEdBQUEzRyxJQUFBLFdBQUErRyxDQUFBOzRCQUNBRixRQUFBLENBQUFHLE1BQUE7MEJBQ0E7d0JBQ0E7c0JBQ0E7b0JBQUE7b0JBQUE7c0JBQUEsT0FBQVgsUUFBQSxDQUFBMUQsSUFBQTtrQkFBQTtnQkFBQSxHQUFBc0QsT0FBQTtjQUFBLENBQ0EsSUFBQWxDLEtBQUEsT0FBQUQsU0FBQTtZQUFBO1lBQ0FhLEtBQUEsQ0FBQUYsTUFBQSxDQUFBRCxJQUFBLEdBQUFaLElBQUEsQ0FBQVksSUFBQTtVQUFBO1VBQUE7WUFBQSxPQUFBTyxTQUFBLENBQUFwQyxJQUFBO1FBQUE7TUFBQSxHQUFBaUMsUUFBQTtJQUFBO0VBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9saWJyYXJ5L2VkaXQudnVlPzg2YjAiXSwic291cmNlc0NvbnRlbnQiOlsiPHRlbXBsYXRlPlxuICAgIDxkaXYgdi1pZj1cInN1cnZleVwiPlxuICAgICAgPFN1cnZleSA6c3VydmV5PVwic3VydmV5XCI+PC9TdXJ2ZXk+XG4gICAgPC9kaXY+XG4gIDwvdGVtcGxhdGU+XG4gICAgICBcbiAgICAgIDxzY3JpcHQ+XG4gIGltcG9ydCAqIGFzIFN1cnZleVZ1ZSBmcm9tIFwic3VydmV5LXZ1ZVwiO1xuICBjb25zdCBTd2FsID0gcmVxdWlyZShcInN3ZWV0YWxlcnQyXCIpO1xuICBpbXBvcnQgeyBqc29uIH0gZnJvbSBcIi4vZm9ybVwiO1xuICBcbiAgZXhwb3J0IGRlZmF1bHQge1xuICAgIGNvbXBvbmVudHM6IHsgU3VydmV5OiBTdXJ2ZXlWdWUuU3VydmV5IH0sXG4gICAgZGF0YTogKCkgPT4gKHtcbiAgICAgIHN1cnZleTogbnVsbCxcbiAgICAgIGRhdGE6IG51bGwsXG4gICAgfSksXG4gIFxuICAgIGFzeW5jIG1vdW50ZWQoKSB7XG4gICAgICBsZXQgc2VsZiA9IHRoaXM7XG4gICAgICBhd2FpdCBheGlvc1xuICAgICAgICAuZ2V0KFwiL2FwaS9saWJyYXJ5L2VkaXQvXCIgKyB0aGlzLiRyb3V0ZS5wYXJhbXMuaWQsIHtcbiAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICBBdXRob3JpemF0aW9uOiBBVCxcbiAgICAgICAgICAgIEFjY2VwdDogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgdGhpcy5kYXRhID0gcmVzcG9uc2UuZGF0YTtcbiAgICAgICAgICBjb25zb2xlLmxvZyh0aGlzLmRhdGEpXG4gICAgICAgIH0pO1xuICBcbiAgICAgIHRoaXMuc3VydmV5ID0gbmV3IFN1cnZleVZ1ZS5Nb2RlbChqc29uKTtcbiAgXG4gICAgICB0aGlzLnN1cnZleS5vbkNvbXBsZXRpbmcuYWRkKGFzeW5jIGZ1bmN0aW9uIChyZXN1bHQsIG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucy5hbGxvd0NvbXBsZXRlID0gZmFsc2U7XG4gICAgICAgIGF3YWl0IGF4aW9zXG4gICAgICAgICAgLnBvc3QoXCIvYXBpL2xpYnJhcnkvdXBkYXRlL1wiICsgc2VsZi4kcm91dGUucGFyYW1zLmlkLCByZXN1bHQuZGF0YSlcbiAgICAgICAgICAudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2cocmVzcG9uc2UuZGF0YSlcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhKSB7XG4gICAgICAgICAgICAgIFN3YWwuZmlyZSh7XG4gICAgICAgICAgICAgICAgdGl0bGU6IFwiQWN0dWFsaXphZG9cIixcbiAgICAgICAgICAgICAgICB0ZXh0OiBcIkVsIGVsZW1lbnRvIGVuIGxhIGJpYmxpb3RlY2EgaGEgc2lkbyBhY3R1YWxpemFkbyBjb24gw6l4aXRvXCIsXG4gICAgICAgICAgICAgICAgaWNvbjogXCJzdWNjZXNzXCIsXG4gICAgICAgICAgICAgICAgLy8gIHRpbWVyOiAyMDAwLFxuICAgICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IFwiL3BhbmVsLWFkbWluaXN0cmFjaW9uL2JpYmxpb3RlY2FcIjtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBTd2FsLmZpcmUoe1xuICAgICAgICAgICAgICAgIHRpdGxlOiBcIkVycm9yIVwiLFxuICAgICAgICAgICAgICAgIHRleHQ6IFwiTm8gc2UgcHVkbyBhY3R1YWxpemFyIGVsIGVsZW1lbnRvIGVuIGxhIGJpYmxpb3RlY2EuIFBvciBmYXZvciBpbnRlbnRlIG3DoXMgdGFyZGUuXCIsXG4gICAgICAgICAgICAgICAgaWNvbjogXCJlcnJvclwiLFxuICAgICAgICAgICAgICAgIC8vICAgIHRpbWVyOiAzMDAwLFxuICAgICAgICAgICAgICB9KS50aGVuKChfKSA9PiB7XG4gICAgICAgICAgICAgICAgbG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnN1cnZleS5kYXRhID0gc2VsZi5kYXRhO1xuICAgIH0sXG4gIH07XG4gIDwvc2NyaXB0PiJdLCJuYW1lcyI6WyJfcmVnZW5lcmF0b3JSdW50aW1lIiwiZSIsInQiLCJyIiwiT2JqZWN0IiwicHJvdG90eXBlIiwibiIsImhhc093blByb3BlcnR5IiwibyIsImRlZmluZVByb3BlcnR5IiwidmFsdWUiLCJpIiwiU3ltYm9sIiwiYSIsIml0ZXJhdG9yIiwiYyIsImFzeW5jSXRlcmF0b3IiLCJ1IiwidG9TdHJpbmdUYWciLCJkZWZpbmUiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJ3cmFwIiwiR2VuZXJhdG9yIiwiY3JlYXRlIiwiQ29udGV4dCIsIm1ha2VJbnZva2VNZXRob2QiLCJ0cnlDYXRjaCIsInR5cGUiLCJhcmciLCJjYWxsIiwiaCIsImwiLCJmIiwicyIsInkiLCJHZW5lcmF0b3JGdW5jdGlvbiIsIkdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlIiwicCIsImQiLCJnZXRQcm90b3R5cGVPZiIsInYiLCJ2YWx1ZXMiLCJnIiwiZGVmaW5lSXRlcmF0b3JNZXRob2RzIiwiZm9yRWFjaCIsIl9pbnZva2UiLCJBc3luY0l0ZXJhdG9yIiwiaW52b2tlIiwiX3R5cGVvZiIsInJlc29sdmUiLCJfX2F3YWl0IiwidGhlbiIsImNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnIiwiRXJyb3IiLCJkb25lIiwibWV0aG9kIiwiZGVsZWdhdGUiLCJtYXliZUludm9rZURlbGVnYXRlIiwic2VudCIsIl9zZW50IiwiZGlzcGF0Y2hFeGNlcHRpb24iLCJhYnJ1cHQiLCJUeXBlRXJyb3IiLCJyZXN1bHROYW1lIiwibmV4dCIsIm5leHRMb2MiLCJwdXNoVHJ5RW50cnkiLCJ0cnlMb2MiLCJjYXRjaExvYyIsImZpbmFsbHlMb2MiLCJhZnRlckxvYyIsInRyeUVudHJpZXMiLCJwdXNoIiwicmVzZXRUcnlFbnRyeSIsImNvbXBsZXRpb24iLCJyZXNldCIsImlzTmFOIiwibGVuZ3RoIiwiZGlzcGxheU5hbWUiLCJpc0dlbmVyYXRvckZ1bmN0aW9uIiwiY29uc3RydWN0b3IiLCJuYW1lIiwibWFyayIsInNldFByb3RvdHlwZU9mIiwiX19wcm90b19fIiwiYXdyYXAiLCJhc3luYyIsIlByb21pc2UiLCJrZXlzIiwicmV2ZXJzZSIsInBvcCIsInByZXYiLCJjaGFyQXQiLCJzbGljZSIsInN0b3AiLCJydmFsIiwiaGFuZGxlIiwiY29tcGxldGUiLCJmaW5pc2giLCJfY2F0Y2giLCJkZWxlZ2F0ZVlpZWxkIiwiYXN5bmNHZW5lcmF0b3JTdGVwIiwiZ2VuIiwicmVqZWN0IiwiX25leHQiLCJfdGhyb3ciLCJrZXkiLCJpbmZvIiwiZXJyb3IiLCJfYXN5bmNUb0dlbmVyYXRvciIsImZuIiwic2VsZiIsImFyZ3MiLCJhcmd1bWVudHMiLCJhcHBseSIsImVyciIsInVuZGVmaW5lZCIsIlN1cnZleVZ1ZSIsIlN3YWwiLCJyZXF1aXJlIiwianNvbiIsImNvbXBvbmVudHMiLCJTdXJ2ZXkiLCJkYXRhIiwic3VydmV5IiwibW91bnRlZCIsIl90aGlzIiwiX2NhbGxlZTIiLCJfcmVmIiwiX2NhbGxlZTIkIiwiX2NvbnRleHQyIiwiYXhpb3MiLCJnZXQiLCIkcm91dGUiLCJwYXJhbXMiLCJpZCIsImhlYWRlcnMiLCJBdXRob3JpemF0aW9uIiwiQVQiLCJBY2NlcHQiLCJyZXNwb25zZSIsImNvbnNvbGUiLCJsb2ciLCJNb2RlbCIsIm9uQ29tcGxldGluZyIsImFkZCIsIl94IiwiX3gyIiwiX2NhbGxlZSIsInJlc3VsdCIsIm9wdGlvbnMiLCJfY2FsbGVlJCIsIl9jb250ZXh0IiwiYWxsb3dDb21wbGV0ZSIsInBvc3QiLCJmaXJlIiwidGl0bGUiLCJ0ZXh0IiwiaWNvbiIsIndpbmRvdyIsImxvY2F0aW9uIiwiaHJlZiIsIl8iLCJyZWxvYWQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/library/edit.vue?vue&type=script&lang=js&\n");

/***/ }),

/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/library/index.vue?vue&type=script&lang=js&":
/*!**************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/library/index.vue?vue&type=script&lang=js& ***!
  \**************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nvar Swal = __webpack_require__(/*! sweetalert2 */ \"./node_modules/sweetalert2/dist/sweetalert2.all.js\");\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n  data: function data() {\n    return {\n      data: null,\n      search: \"\",\n      headers: [{\n        text: \"Nombre\",\n        value: \"name\"\n      }, {\n        text: \"Tipo\",\n        value: \"type\"\n      }, {\n        text: \"Icono\",\n        value: \"image\"\n      }, {\n        text: \"Documento\",\n        value: \"doc\"\n      }, {\n        text: \"Acciones\",\n        value: \"actions\",\n        sortable: false\n      }]\n    };\n  },\n  mounted: function mounted() {\n    this.loadData();\n  },\n  methods: {\n    loadData: function loadData() {\n      var _this = this;\n      axios.get(\"/api/library/index\").then(function (response) {\n        _this.data = response.data;\n        console.log(_this.data);\n      });\n    },\n    edit: function edit(id) {\n      window.location.href = \"/panel-administracion/biblioteca/\" + id + \"/editar\";\n    },\n    trash: function trash(id, name) {\n      var _this2 = this;\n      Swal.fire({\n        title: \"Confirmación\",\n        html: \"<p margin-bottom: 10px;\\\">\\n                \\xBFEst\\xE1s seguro de que deseas eliminar elemento en la biblioteca <b>\\\"\".concat(name, \"\\\"</b>?</p>\\n                    <p style=\\\"font-size: 0.7em;\\\">\\n                      Si lo eliminas, no podr\\xE1s recuperarlo.\\n                    </p>\"),\n        icon: \"warning\",\n        showCancelButton: true,\n        confirmButtonColor: \"#3085d6\",\n        cancelButtonColor: \"#d33\",\n        confirmButtonText: \"Sí, eliminar\",\n        cancelButtonText: \"Cancelar\"\n      }).then(function (result) {\n        if (result.isConfirmed) {\n          axios[\"delete\"](\"/api/library/delete/\" + id, {\n            headers: {\n              Authorization: AT,\n              Accept: \"application/json\"\n            }\n          }).then(function (response) {\n            Swal.fire({\n              title: \"Eliminado\",\n              text: \"Se ha eliminado el elemento en la biblioteca con éxito.\",\n              icon: \"success\",\n              timer: 2000\n            }).then(function (_) {});\n            _this2.loadData();\n          });\n        }\n      });\n    },\n    download: function download(id) {\n      window.open(\"/api/library/download/\" + id, \"_blank\");\n    }\n  }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vbGlicmFyeS9pbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmIiwibWFwcGluZ3MiOiI7Ozs7QUFxREEsSUFBQUEsSUFBQSxHQUFBQyxtQkFBQTtBQUNBLGlFQUFlO0VBQ2ZDLElBQUEsV0FBQUEsS0FBQTtJQUNBO01BQ0FBLElBQUE7TUFDQUMsTUFBQTtNQUNBQyxPQUFBLEdBQ0E7UUFBQUMsSUFBQTtRQUFBQyxLQUFBO01BQUEsR0FDQTtRQUFBRCxJQUFBO1FBQUFDLEtBQUE7TUFBQSxHQUNBO1FBQUFELElBQUE7UUFBQUMsS0FBQTtNQUFBLEdBQ0E7UUFBQUQsSUFBQTtRQUFBQyxLQUFBO01BQUEsR0FDQTtRQUFBRCxJQUFBO1FBQUFDLEtBQUE7UUFBQUMsUUFBQTtNQUFBO0lBRUE7RUFDQTtFQUNBQyxPQUFBLFdBQUFBLFFBQUE7SUFDQSxLQUFBQyxRQUFBO0VBQ0E7RUFDQUMsT0FBQTtJQUNBRCxRQUFBLFdBQUFBLFNBQUE7TUFBQSxJQUFBRSxLQUFBO01BQ0FDLEtBQUEsQ0FBQUMsR0FBQSx1QkFBQUMsSUFBQSxXQUFBQyxRQUFBO1FBQ0FKLEtBQUEsQ0FBQVQsSUFBQSxHQUFBYSxRQUFBLENBQUFiLElBQUE7UUFDQWMsT0FBQSxDQUFBQyxHQUFBLENBQUFOLEtBQUEsQ0FBQVQsSUFBQTtNQUNBO0lBQ0E7SUFDQWdCLElBQUEsV0FBQUEsS0FBQUMsRUFBQTtNQUNBQyxNQUFBLENBQUFDLFFBQUEsQ0FBQUMsSUFBQSxHQUNBLHNDQUFBSCxFQUFBO0lBQ0E7SUFDQUksS0FBQSxXQUFBQSxNQUFBSixFQUFBLEVBQUFLLElBQUE7TUFBQSxJQUFBQyxNQUFBO01BQ0F6QixJQUFBLENBQUEwQixJQUFBO1FBQ0FDLEtBQUE7UUFDQUMsSUFBQSwySEFBQUMsTUFBQSxDQUNBTCxJQUFBLGdLQUdBO1FBQ0FNLElBQUE7UUFDQUMsZ0JBQUE7UUFDQUMsa0JBQUE7UUFDQUMsaUJBQUE7UUFDQUMsaUJBQUE7UUFDQUMsZ0JBQUE7TUFDQSxHQUFBckIsSUFBQSxXQUFBc0IsTUFBQTtRQUNBLElBQUFBLE1BQUEsQ0FBQUMsV0FBQTtVQUNBekIsS0FBQSxVQUNBLDBCQUFBTyxFQUFBO1lBQ0FmLE9BQUE7Y0FDQWtDLGFBQUEsRUFBQUMsRUFBQTtjQUNBQyxNQUFBO1lBQ0E7VUFDQSxHQUNBMUIsSUFBQSxXQUFBQyxRQUFBO1lBQ0FmLElBQUEsQ0FBQTBCLElBQUE7Y0FDQUMsS0FBQTtjQUNBdEIsSUFBQTtjQUNBeUIsSUFBQTtjQUNBVyxLQUFBO1lBQ0EsR0FBQTNCLElBQUEsV0FBQTRCLENBQUE7WUFDQWpCLE1BQUEsQ0FBQWhCLFFBQUE7VUFDQTtRQUNBO01BQ0E7SUFDQTtJQUNBa0MsUUFBQSxXQUFBQSxTQUFBeEIsRUFBQTtNQUNBQyxNQUFBLENBQUF3QixJQUFBLDRCQUFBekIsRUFBQTtJQUNBO0VBQ0E7QUFDQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vL3Jlc291cmNlcy9qcy9jb21wb25lbnRzL2FkbWluL2xpYnJhcnkvaW5kZXgudnVlPzRmNmYiXSwic291cmNlc0NvbnRlbnQiOlsiPHRlbXBsYXRlPlxuICA8di1hcHA+XG4gICAgPHYtY2FyZCB2LWlmPVwiZGF0YVwiPlxuICAgICAgPHYtY2FyZC10aXRsZT5cbiAgICAgICAgQWRtaW5pc3RyYWNpw7NuIGRlIEJpYmxpb3RlY2FcbiAgICAgICAgPHYtc3BhY2VyPjwvdi1zcGFjZXI+XG4gICAgICAgIDx2LXRleHQtZmllbGRcbiAgICAgICAgICB2LW1vZGVsPVwic2VhcmNoXCJcbiAgICAgICAgICBhcHBlbmQtaWNvbj1cIm1kaS1tYWduaWZ5XCJcbiAgICAgICAgICBsYWJlbD1cIkJ1c2NhclwiXG4gICAgICAgICAgc2luZ2xlLWxpbmVcbiAgICAgICAgICBoaWRlLWRldGFpbHNcbiAgICAgICAgPjwvdi10ZXh0LWZpZWxkPlxuICAgICAgPC92LWNhcmQtdGl0bGU+XG4gICAgICA8di1kYXRhLXRhYmxlXG4gICAgICAgIDpoZWFkZXJzPVwiaGVhZGVyc1wiXG4gICAgICAgIDppdGVtcz1cImRhdGFcIlxuICAgICAgICBjbGFzcz1cImVsZXZhdGlvbi0xXCJcbiAgICAgICAgOnNlYXJjaD1cInNlYXJjaFwiXG4gICAgICA+XG4gICAgICAgIDx0ZW1wbGF0ZSB2LXNsb3Q6aXRlbS5pbWFnZT1cInsgaXRlbSB9XCI+XG4gICAgICAgICAgPHYtaW1nXG4gICAgICAgICAgICBtYXgtaGVpZ2h0PVwiNTFcIlxuICAgICAgICAgICAgbWF4LXdpZHRoPVwiMTEwXCJcbiAgICAgICAgICAgIGNvbnRhaW5cbiAgICAgICAgICAgIDpzcmM9XCJpdGVtLmljb25cIlxuICAgICAgICAgID48L3YtaW1nXG4gICAgICAgID48L3RlbXBsYXRlPlxuICAgICAgICA8dGVtcGxhdGUgdi1zbG90Oml0ZW0uZG9jPVwieyBpdGVtIH1cIj5cbiAgICAgICAgICA8di1idG4gaWNvbiBAY2xpY2s9XCJkb3dubG9hZChpdGVtLmlkKVwiIGNvbG9yPVwicHJpbWFyeVwiIHYtaWY9XCJpdGVtLmZpbGVcIj5cbiAgICAgICAgICAgIDx2LWljb24+bWRpLWNsb3VkLWRvd25sb2FkPC92LWljb24+XG4gICAgICAgICAgPC92LWJ0bj5cbiAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgPHRlbXBsYXRlIHYtc2xvdDppdGVtLmFjdGlvbnM9XCJ7IGl0ZW0gfVwiPlxuICAgICAgICAgIDx2LWJ0biBjb2xvcj1cInJlZFwiIGZhYiB4LXNtYWxsIGRhcmsgQGNsaWNrPVwiZWRpdChpdGVtLmlkKVwiPlxuICAgICAgICAgICAgPHYtaWNvbj4gbWRpLXBlbmNpbCA8L3YtaWNvbj5cbiAgICAgICAgICA8L3YtYnRuPlxuICAgICAgICAgIDx2LWJ0blxuICAgICAgICAgICAgY29sb3I9XCJ3YXJuaW5nXCJcbiAgICAgICAgICAgIGZhYlxuICAgICAgICAgICAgeC1zbWFsbFxuICAgICAgICAgICAgZGFya1xuICAgICAgICAgICAgQGNsaWNrPVwidHJhc2goaXRlbS5pZCwgaXRlbS5uYW1lKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHYtaWNvbj4gbWRpLWRlbGV0ZSA8L3YtaWNvbj5cbiAgICAgICAgICA8L3YtYnRuPlxuICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgPC92LWRhdGEtdGFibGU+XG4gICAgPC92LWNhcmQ+XG4gIDwvdi1hcHA+XG48L3RlbXBsYXRlPlxuICBcbiAgPHNjcmlwdD5cbmNvbnN0IFN3YWwgPSByZXF1aXJlKFwic3dlZXRhbGVydDJcIik7XG5leHBvcnQgZGVmYXVsdCB7XG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGE6IG51bGwsXG4gICAgICBzZWFyY2g6IFwiXCIsXG4gICAgICBoZWFkZXJzOiBbXG4gICAgICAgIHsgdGV4dDogXCJOb21icmVcIiwgdmFsdWU6IFwibmFtZVwiIH0sXG4gICAgICAgIHsgdGV4dDogXCJUaXBvXCIsIHZhbHVlOiBcInR5cGVcIiB9LFxuICAgICAgICB7IHRleHQ6IFwiSWNvbm9cIiwgdmFsdWU6IFwiaW1hZ2VcIiB9LFxuICAgICAgICB7IHRleHQ6IFwiRG9jdW1lbnRvXCIsIHZhbHVlOiBcImRvY1wiIH0sXG4gICAgICAgIHsgdGV4dDogXCJBY2Npb25lc1wiLCB2YWx1ZTogXCJhY3Rpb25zXCIsIHNvcnRhYmxlOiBmYWxzZSB9LFxuICAgICAgXSxcbiAgICB9O1xuICB9LFxuICBtb3VudGVkKCkge1xuICAgIHRoaXMubG9hZERhdGEoKTtcbiAgfSxcbiAgbWV0aG9kczoge1xuICAgIGxvYWREYXRhKCkge1xuICAgICAgYXhpb3MuZ2V0KFwiL2FwaS9saWJyYXJ5L2luZGV4XCIpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIHRoaXMuZGF0YSA9IHJlc3BvbnNlLmRhdGE7XG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMuZGF0YSk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGVkaXQoaWQpIHtcbiAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID1cbiAgICAgICAgXCIvcGFuZWwtYWRtaW5pc3RyYWNpb24vYmlibGlvdGVjYS9cIiArIGlkICsgXCIvZWRpdGFyXCI7XG4gICAgfSxcbiAgICB0cmFzaChpZCwgbmFtZSkge1xuICAgICAgU3dhbC5maXJlKHtcbiAgICAgICAgdGl0bGU6IFwiQ29uZmlybWFjacOzblwiLFxuICAgICAgICBodG1sOiBgPHAgbWFyZ2luLWJvdHRvbTogMTBweDtcIj5cbiAgICAgICAgICAgICAgICDCv0VzdMOhcyBzZWd1cm8gZGUgcXVlIGRlc2VhcyBlbGltaW5hciBlbGVtZW50byBlbiBsYSBiaWJsaW90ZWNhIDxiPlwiJHtuYW1lfVwiPC9iPj88L3A+XG4gICAgICAgICAgICAgICAgICAgIDxwIHN0eWxlPVwiZm9udC1zaXplOiAwLjdlbTtcIj5cbiAgICAgICAgICAgICAgICAgICAgICBTaSBsbyBlbGltaW5hcywgbm8gcG9kcsOhcyByZWN1cGVyYXJsby5cbiAgICAgICAgICAgICAgICAgICAgPC9wPmAsXG4gICAgICAgIGljb246IFwid2FybmluZ1wiLFxuICAgICAgICBzaG93Q2FuY2VsQnV0dG9uOiB0cnVlLFxuICAgICAgICBjb25maXJtQnV0dG9uQ29sb3I6IFwiIzMwODVkNlwiLFxuICAgICAgICBjYW5jZWxCdXR0b25Db2xvcjogXCIjZDMzXCIsXG4gICAgICAgIGNvbmZpcm1CdXR0b25UZXh0OiBcIlPDrSwgZWxpbWluYXJcIixcbiAgICAgICAgY2FuY2VsQnV0dG9uVGV4dDogXCJDYW5jZWxhclwiLFxuICAgICAgfSkudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQuaXNDb25maXJtZWQpIHtcbiAgICAgICAgICBheGlvc1xuICAgICAgICAgICAgLmRlbGV0ZShcIi9hcGkvbGlicmFyeS9kZWxldGUvXCIgKyBpZCwge1xuICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgQXV0aG9yaXphdGlvbjogQVQsXG4gICAgICAgICAgICAgICAgQWNjZXB0OiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgU3dhbC5maXJlKHtcbiAgICAgICAgICAgICAgICB0aXRsZTogXCJFbGltaW5hZG9cIixcbiAgICAgICAgICAgICAgICB0ZXh0OiBcIlNlIGhhIGVsaW1pbmFkbyBlbCBlbGVtZW50byBlbiBsYSBiaWJsaW90ZWNhIGNvbiDDqXhpdG8uXCIsXG4gICAgICAgICAgICAgICAgaWNvbjogXCJzdWNjZXNzXCIsXG4gICAgICAgICAgICAgICAgdGltZXI6IDIwMDAsXG4gICAgICAgICAgICAgIH0pLnRoZW4oKF8pID0+IHt9KTtcbiAgICAgICAgICAgICAgdGhpcy5sb2FkRGF0YSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sXG4gICAgZG93bmxvYWQoaWQpIHtcbiAgICAgIHdpbmRvdy5vcGVuKFwiL2FwaS9saWJyYXJ5L2Rvd25sb2FkL1wiICsgaWQsIFwiX2JsYW5rXCIpO1xuICAgIH0sXG4gIH0sXG59O1xuPC9zY3JpcHQ+Il0sIm5hbWVzIjpbIlN3YWwiLCJyZXF1aXJlIiwiZGF0YSIsInNlYXJjaCIsImhlYWRlcnMiLCJ0ZXh0IiwidmFsdWUiLCJzb3J0YWJsZSIsIm1vdW50ZWQiLCJsb2FkRGF0YSIsIm1ldGhvZHMiLCJfdGhpcyIsImF4aW9zIiwiZ2V0IiwidGhlbiIsInJlc3BvbnNlIiwiY29uc29sZSIsImxvZyIsImVkaXQiLCJpZCIsIndpbmRvdyIsImxvY2F0aW9uIiwiaHJlZiIsInRyYXNoIiwibmFtZSIsIl90aGlzMiIsImZpcmUiLCJ0aXRsZSIsImh0bWwiLCJjb25jYXQiLCJpY29uIiwic2hvd0NhbmNlbEJ1dHRvbiIsImNvbmZpcm1CdXR0b25Db2xvciIsImNhbmNlbEJ1dHRvbkNvbG9yIiwiY29uZmlybUJ1dHRvblRleHQiLCJjYW5jZWxCdXR0b25UZXh0IiwicmVzdWx0IiwiaXNDb25maXJtZWQiLCJBdXRob3JpemF0aW9uIiwiQVQiLCJBY2NlcHQiLCJ0aW1lciIsIl8iLCJkb3dubG9hZCIsIm9wZW4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/library/index.vue?vue&type=script&lang=js&\n");

/***/ }),

/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/page/edit.vue?vue&type=script&lang=js&":
/*!**********************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/page/edit.vue?vue&type=script&lang=js& ***!
  \**********************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var survey_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! survey-vue */ \"./node_modules/survey-vue/survey-vue.js\");\n/* harmony import */ var survey_vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(survey_vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _form__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./form */ \"./resources/js/components/admin/page/form.js\");\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = \"function\" == typeof Symbol ? Symbol : {}, a = i.iterator || \"@@iterator\", c = i.asyncIterator || \"@@asyncIterator\", u = i.toStringTag || \"@@toStringTag\"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, \"\"); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, \"_invoke\", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: \"normal\", arg: t.call(e, r) }; } catch (t) { return { type: \"throw\", arg: t }; } } e.wrap = wrap; var h = \"suspendedStart\", l = \"suspendedYield\", f = \"executing\", s = \"completed\", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { [\"next\", \"throw\", \"return\"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if (\"throw\" !== c.type) { var u = c.arg, h = u.value; return h && \"object\" == _typeof(h) && n.call(h, \"__await\") ? e.resolve(h.__await).then(function (t) { invoke(\"next\", t, i, a); }, function (t) { invoke(\"throw\", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke(\"throw\", t, i, a); }); } a(c.arg); } var r; o(this, \"_invoke\", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error(\"Generator is already running\"); if (o === s) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = f; var p = tryCatch(e, r, n); if (\"normal\" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } \"throw\" === p.type && (o = s, n.method = \"throw\", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, \"throw\" === n && e.iterator[\"return\"] && (r.method = \"return\", r.arg = t, maybeInvokeDelegate(e, r), \"throw\" === r.method) || \"return\" !== n && (r.method = \"throw\", r.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), y; var i = tryCatch(o, e.iterator, r.arg); if (\"throw\" === i.type) return r.method = \"throw\", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, \"return\" !== r.method && (r.method = \"next\", r.arg = t), r.delegate = null, y) : a : (r.method = \"throw\", r.arg = new TypeError(\"iterator result is not an object\"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = \"normal\", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: \"root\" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || \"\" === e) { var r = e[a]; if (r) return r.call(e); if (\"function\" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, \"constructor\", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, \"constructor\", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), e.isGeneratorFunction = function (t) { var e = \"function\" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || \"GeneratorFunction\" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, \"GeneratorFunction\")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, \"Generator\"), define(g, a, function () { return this; }), define(g, \"toString\", function () { return \"[object Generator]\"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) \"t\" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = \"throw\", a.arg = e, r.next = n, o && (r.method = \"next\", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if (\"root\" === i.tryLoc) return handle(\"end\"); if (i.tryLoc <= this.prev) { var c = n.call(i, \"catchLoc\"), u = n.call(i, \"finallyLoc\"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error(\"try statement without catch or finally\"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, \"finallyLoc\") && this.prev < o.finallyLoc) { var i = o; break; } } i && (\"break\" === t || \"continue\" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = \"next\", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, \"catch\": function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if (\"throw\" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, \"next\" === this.method && (this.arg = t), y; } }, e; }\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nvar Swal = __webpack_require__(/*! sweetalert2 */ \"./node_modules/sweetalert2/dist/sweetalert2.all.js\");\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n  components: {\n    Survey: survey_vue__WEBPACK_IMPORTED_MODULE_0__.Survey\n  },\n  data: function data() {\n    return {\n      survey: null,\n      data: null\n    };\n  },\n  mounted: function mounted() {\n    var _this = this;\n    return _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {\n      var _ref;\n      var self;\n      return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n        while (1) switch (_context2.prev = _context2.next) {\n          case 0:\n            self = _this;\n            _context2.next = 3;\n            return axios.get(\"/api/page/edit/\" + _this.$route.params.id, {\n              headers: {\n                Authorization: AT,\n                Accept: \"application/json\"\n              }\n            }).then(function (response) {\n              _this.data = response.data;\n            });\n          case 3:\n            _this.survey = new survey_vue__WEBPACK_IMPORTED_MODULE_0__.Model(_form__WEBPACK_IMPORTED_MODULE_1__.json);\n            _this.survey.onCompleting.add(function (_x, _x2) {\n              return (_ref = _ref || _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(result, options) {\n                return _regeneratorRuntime().wrap(function _callee$(_context) {\n                  while (1) switch (_context.prev = _context.next) {\n                    case 0:\n                      options.allowComplete = false;\n                      _context.next = 3;\n                      return axios.post(\"/api/page/update/\" + self.$route.params.id, result.data).then(function (response) {\n                        if (response.data) {\n                          console.log(response.data);\n                          Swal.fire({\n                            title: \"Actualizado\",\n                            text: \"La pagina ha sido actualizada con éxito\",\n                            icon: \"success\"\n                            //  timer: 2000,\n                          }).then(function () {\n                            window.location.href = \"/panel-administracion/paginas\";\n                          });\n                        } else {\n                          Swal.fire({\n                            title: \"Error!\",\n                            text: \"No se pudo actualiza la pagina. Por favor intente más tarde.\",\n                            icon: \"error\"\n                            //    timer: 3000,\n                          }).then(function (_) {\n                            location.reload();\n                          });\n                        }\n                      });\n                    case 3:\n                    case \"end\":\n                      return _context.stop();\n                  }\n                }, _callee);\n              }))).apply(this, arguments);\n            });\n            _this.survey.data = self.data;\n          case 6:\n          case \"end\":\n            return _context2.stop();\n        }\n      }, _callee2);\n    }))();\n  },\n  methods: {}\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vcGFnZS9lZGl0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7K0NBT0EscUpBQUFBLG1CQUFBLFlBQUFBLG9CQUFBLFdBQUFDLENBQUEsU0FBQUMsQ0FBQSxFQUFBRCxDQUFBLE9BQUFFLENBQUEsR0FBQUMsTUFBQSxDQUFBQyxTQUFBLEVBQUFDLENBQUEsR0FBQUgsQ0FBQSxDQUFBSSxjQUFBLEVBQUFDLENBQUEsR0FBQUosTUFBQSxDQUFBSyxjQUFBLGNBQUFQLENBQUEsRUFBQUQsQ0FBQSxFQUFBRSxDQUFBLElBQUFELENBQUEsQ0FBQUQsQ0FBQSxJQUFBRSxDQUFBLENBQUFPLEtBQUEsS0FBQUMsQ0FBQSx3QkFBQUMsTUFBQSxHQUFBQSxNQUFBLE9BQUFDLENBQUEsR0FBQUYsQ0FBQSxDQUFBRyxRQUFBLGtCQUFBQyxDQUFBLEdBQUFKLENBQUEsQ0FBQUssYUFBQSx1QkFBQUMsQ0FBQSxHQUFBTixDQUFBLENBQUFPLFdBQUEsOEJBQUFDLE9BQUFqQixDQUFBLEVBQUFELENBQUEsRUFBQUUsQ0FBQSxXQUFBQyxNQUFBLENBQUFLLGNBQUEsQ0FBQVAsQ0FBQSxFQUFBRCxDQUFBLElBQUFTLEtBQUEsRUFBQVAsQ0FBQSxFQUFBaUIsVUFBQSxNQUFBQyxZQUFBLE1BQUFDLFFBQUEsU0FBQXBCLENBQUEsQ0FBQUQsQ0FBQSxXQUFBa0IsTUFBQSxtQkFBQWpCLENBQUEsSUFBQWlCLE1BQUEsWUFBQUEsT0FBQWpCLENBQUEsRUFBQUQsQ0FBQSxFQUFBRSxDQUFBLFdBQUFELENBQUEsQ0FBQUQsQ0FBQSxJQUFBRSxDQUFBLGdCQUFBb0IsS0FBQXJCLENBQUEsRUFBQUQsQ0FBQSxFQUFBRSxDQUFBLEVBQUFHLENBQUEsUUFBQUssQ0FBQSxHQUFBVixDQUFBLElBQUFBLENBQUEsQ0FBQUksU0FBQSxZQUFBbUIsU0FBQSxHQUFBdkIsQ0FBQSxHQUFBdUIsU0FBQSxFQUFBWCxDQUFBLEdBQUFULE1BQUEsQ0FBQXFCLE1BQUEsQ0FBQWQsQ0FBQSxDQUFBTixTQUFBLEdBQUFVLENBQUEsT0FBQVcsT0FBQSxDQUFBcEIsQ0FBQSxnQkFBQUUsQ0FBQSxDQUFBSyxDQUFBLGVBQUFILEtBQUEsRUFBQWlCLGdCQUFBLENBQUF6QixDQUFBLEVBQUFDLENBQUEsRUFBQVksQ0FBQSxNQUFBRixDQUFBLGFBQUFlLFNBQUExQixDQUFBLEVBQUFELENBQUEsRUFBQUUsQ0FBQSxtQkFBQTBCLElBQUEsWUFBQUMsR0FBQSxFQUFBNUIsQ0FBQSxDQUFBNkIsSUFBQSxDQUFBOUIsQ0FBQSxFQUFBRSxDQUFBLGNBQUFELENBQUEsYUFBQTJCLElBQUEsV0FBQUMsR0FBQSxFQUFBNUIsQ0FBQSxRQUFBRCxDQUFBLENBQUFzQixJQUFBLEdBQUFBLElBQUEsTUFBQVMsQ0FBQSxxQkFBQUMsQ0FBQSxxQkFBQUMsQ0FBQSxnQkFBQUMsQ0FBQSxnQkFBQUMsQ0FBQSxnQkFBQVosVUFBQSxjQUFBYSxrQkFBQSxjQUFBQywyQkFBQSxTQUFBQyxDQUFBLE9BQUFwQixNQUFBLENBQUFvQixDQUFBLEVBQUExQixDQUFBLHFDQUFBMkIsQ0FBQSxHQUFBcEMsTUFBQSxDQUFBcUMsY0FBQSxFQUFBQyxDQUFBLEdBQUFGLENBQUEsSUFBQUEsQ0FBQSxDQUFBQSxDQUFBLENBQUFHLE1BQUEsUUFBQUQsQ0FBQSxJQUFBQSxDQUFBLEtBQUF2QyxDQUFBLElBQUFHLENBQUEsQ0FBQXlCLElBQUEsQ0FBQVcsQ0FBQSxFQUFBN0IsQ0FBQSxNQUFBMEIsQ0FBQSxHQUFBRyxDQUFBLE9BQUFFLENBQUEsR0FBQU4sMEJBQUEsQ0FBQWpDLFNBQUEsR0FBQW1CLFNBQUEsQ0FBQW5CLFNBQUEsR0FBQUQsTUFBQSxDQUFBcUIsTUFBQSxDQUFBYyxDQUFBLFlBQUFNLHNCQUFBM0MsQ0FBQSxnQ0FBQTRDLE9BQUEsV0FBQTdDLENBQUEsSUFBQWtCLE1BQUEsQ0FBQWpCLENBQUEsRUFBQUQsQ0FBQSxZQUFBQyxDQUFBLGdCQUFBNkMsT0FBQSxDQUFBOUMsQ0FBQSxFQUFBQyxDQUFBLHNCQUFBOEMsY0FBQTlDLENBQUEsRUFBQUQsQ0FBQSxhQUFBZ0QsT0FBQTlDLENBQUEsRUFBQUssQ0FBQSxFQUFBRyxDQUFBLEVBQUFFLENBQUEsUUFBQUUsQ0FBQSxHQUFBYSxRQUFBLENBQUExQixDQUFBLENBQUFDLENBQUEsR0FBQUQsQ0FBQSxFQUFBTSxDQUFBLG1CQUFBTyxDQUFBLENBQUFjLElBQUEsUUFBQVosQ0FBQSxHQUFBRixDQUFBLENBQUFlLEdBQUEsRUFBQUUsQ0FBQSxHQUFBZixDQUFBLENBQUFQLEtBQUEsU0FBQXNCLENBQUEsZ0JBQUFrQixPQUFBLENBQUFsQixDQUFBLEtBQUExQixDQUFBLENBQUF5QixJQUFBLENBQUFDLENBQUEsZUFBQS9CLENBQUEsQ0FBQWtELE9BQUEsQ0FBQW5CLENBQUEsQ0FBQW9CLE9BQUEsRUFBQUMsSUFBQSxXQUFBbkQsQ0FBQSxJQUFBK0MsTUFBQSxTQUFBL0MsQ0FBQSxFQUFBUyxDQUFBLEVBQUFFLENBQUEsZ0JBQUFYLENBQUEsSUFBQStDLE1BQUEsVUFBQS9DLENBQUEsRUFBQVMsQ0FBQSxFQUFBRSxDQUFBLFFBQUFaLENBQUEsQ0FBQWtELE9BQUEsQ0FBQW5CLENBQUEsRUFBQXFCLElBQUEsV0FBQW5ELENBQUEsSUFBQWUsQ0FBQSxDQUFBUCxLQUFBLEdBQUFSLENBQUEsRUFBQVMsQ0FBQSxDQUFBTSxDQUFBLGdCQUFBZixDQUFBLFdBQUErQyxNQUFBLFVBQUEvQyxDQUFBLEVBQUFTLENBQUEsRUFBQUUsQ0FBQSxTQUFBQSxDQUFBLENBQUFFLENBQUEsQ0FBQWUsR0FBQSxTQUFBM0IsQ0FBQSxFQUFBSyxDQUFBLG9CQUFBRSxLQUFBLFdBQUFBLE1BQUFSLENBQUEsRUFBQUksQ0FBQSxhQUFBZ0QsMkJBQUEsZUFBQXJELENBQUEsV0FBQUEsQ0FBQSxFQUFBRSxDQUFBLElBQUE4QyxNQUFBLENBQUEvQyxDQUFBLEVBQUFJLENBQUEsRUFBQUwsQ0FBQSxFQUFBRSxDQUFBLGdCQUFBQSxDQUFBLEdBQUFBLENBQUEsR0FBQUEsQ0FBQSxDQUFBa0QsSUFBQSxDQUFBQywwQkFBQSxFQUFBQSwwQkFBQSxJQUFBQSwwQkFBQSxxQkFBQTNCLGlCQUFBMUIsQ0FBQSxFQUFBRSxDQUFBLEVBQUFHLENBQUEsUUFBQUUsQ0FBQSxHQUFBd0IsQ0FBQSxtQkFBQXJCLENBQUEsRUFBQUUsQ0FBQSxRQUFBTCxDQUFBLEtBQUEwQixDQUFBLFlBQUFxQixLQUFBLHNDQUFBL0MsQ0FBQSxLQUFBMkIsQ0FBQSxvQkFBQXhCLENBQUEsUUFBQUUsQ0FBQSxXQUFBSCxLQUFBLEVBQUFSLENBQUEsRUFBQXNELElBQUEsZUFBQWxELENBQUEsQ0FBQW1ELE1BQUEsR0FBQTlDLENBQUEsRUFBQUwsQ0FBQSxDQUFBd0IsR0FBQSxHQUFBakIsQ0FBQSxVQUFBRSxDQUFBLEdBQUFULENBQUEsQ0FBQW9ELFFBQUEsTUFBQTNDLENBQUEsUUFBQUUsQ0FBQSxHQUFBMEMsbUJBQUEsQ0FBQTVDLENBQUEsRUFBQVQsQ0FBQSxPQUFBVyxDQUFBLFFBQUFBLENBQUEsS0FBQW1CLENBQUEsbUJBQUFuQixDQUFBLHFCQUFBWCxDQUFBLENBQUFtRCxNQUFBLEVBQUFuRCxDQUFBLENBQUFzRCxJQUFBLEdBQUF0RCxDQUFBLENBQUF1RCxLQUFBLEdBQUF2RCxDQUFBLENBQUF3QixHQUFBLHNCQUFBeEIsQ0FBQSxDQUFBbUQsTUFBQSxRQUFBakQsQ0FBQSxLQUFBd0IsQ0FBQSxRQUFBeEIsQ0FBQSxHQUFBMkIsQ0FBQSxFQUFBN0IsQ0FBQSxDQUFBd0IsR0FBQSxFQUFBeEIsQ0FBQSxDQUFBd0QsaUJBQUEsQ0FBQXhELENBQUEsQ0FBQXdCLEdBQUEsdUJBQUF4QixDQUFBLENBQUFtRCxNQUFBLElBQUFuRCxDQUFBLENBQUF5RCxNQUFBLFdBQUF6RCxDQUFBLENBQUF3QixHQUFBLEdBQUF0QixDQUFBLEdBQUEwQixDQUFBLE1BQUFLLENBQUEsR0FBQVgsUUFBQSxDQUFBM0IsQ0FBQSxFQUFBRSxDQUFBLEVBQUFHLENBQUEsb0JBQUFpQyxDQUFBLENBQUFWLElBQUEsUUFBQXJCLENBQUEsR0FBQUYsQ0FBQSxDQUFBa0QsSUFBQSxHQUFBckIsQ0FBQSxHQUFBRixDQUFBLEVBQUFNLENBQUEsQ0FBQVQsR0FBQSxLQUFBTSxDQUFBLHFCQUFBMUIsS0FBQSxFQUFBNkIsQ0FBQSxDQUFBVCxHQUFBLEVBQUEwQixJQUFBLEVBQUFsRCxDQUFBLENBQUFrRCxJQUFBLGtCQUFBakIsQ0FBQSxDQUFBVixJQUFBLEtBQUFyQixDQUFBLEdBQUEyQixDQUFBLEVBQUE3QixDQUFBLENBQUFtRCxNQUFBLFlBQUFuRCxDQUFBLENBQUF3QixHQUFBLEdBQUFTLENBQUEsQ0FBQVQsR0FBQSxtQkFBQTZCLG9CQUFBMUQsQ0FBQSxFQUFBRSxDQUFBLFFBQUFHLENBQUEsR0FBQUgsQ0FBQSxDQUFBc0QsTUFBQSxFQUFBakQsQ0FBQSxHQUFBUCxDQUFBLENBQUFhLFFBQUEsQ0FBQVIsQ0FBQSxPQUFBRSxDQUFBLEtBQUFOLENBQUEsU0FBQUMsQ0FBQSxDQUFBdUQsUUFBQSxxQkFBQXBELENBQUEsSUFBQUwsQ0FBQSxDQUFBYSxRQUFBLGVBQUFYLENBQUEsQ0FBQXNELE1BQUEsYUFBQXRELENBQUEsQ0FBQTJCLEdBQUEsR0FBQTVCLENBQUEsRUFBQXlELG1CQUFBLENBQUExRCxDQUFBLEVBQUFFLENBQUEsZUFBQUEsQ0FBQSxDQUFBc0QsTUFBQSxrQkFBQW5ELENBQUEsS0FBQUgsQ0FBQSxDQUFBc0QsTUFBQSxZQUFBdEQsQ0FBQSxDQUFBMkIsR0FBQSxPQUFBa0MsU0FBQSx1Q0FBQTFELENBQUEsaUJBQUE4QixDQUFBLE1BQUF6QixDQUFBLEdBQUFpQixRQUFBLENBQUFwQixDQUFBLEVBQUFQLENBQUEsQ0FBQWEsUUFBQSxFQUFBWCxDQUFBLENBQUEyQixHQUFBLG1CQUFBbkIsQ0FBQSxDQUFBa0IsSUFBQSxTQUFBMUIsQ0FBQSxDQUFBc0QsTUFBQSxZQUFBdEQsQ0FBQSxDQUFBMkIsR0FBQSxHQUFBbkIsQ0FBQSxDQUFBbUIsR0FBQSxFQUFBM0IsQ0FBQSxDQUFBdUQsUUFBQSxTQUFBdEIsQ0FBQSxNQUFBdkIsQ0FBQSxHQUFBRixDQUFBLENBQUFtQixHQUFBLFNBQUFqQixDQUFBLEdBQUFBLENBQUEsQ0FBQTJDLElBQUEsSUFBQXJELENBQUEsQ0FBQUYsQ0FBQSxDQUFBZ0UsVUFBQSxJQUFBcEQsQ0FBQSxDQUFBSCxLQUFBLEVBQUFQLENBQUEsQ0FBQStELElBQUEsR0FBQWpFLENBQUEsQ0FBQWtFLE9BQUEsZUFBQWhFLENBQUEsQ0FBQXNELE1BQUEsS0FBQXRELENBQUEsQ0FBQXNELE1BQUEsV0FBQXRELENBQUEsQ0FBQTJCLEdBQUEsR0FBQTVCLENBQUEsR0FBQUMsQ0FBQSxDQUFBdUQsUUFBQSxTQUFBdEIsQ0FBQSxJQUFBdkIsQ0FBQSxJQUFBVixDQUFBLENBQUFzRCxNQUFBLFlBQUF0RCxDQUFBLENBQUEyQixHQUFBLE9BQUFrQyxTQUFBLHNDQUFBN0QsQ0FBQSxDQUFBdUQsUUFBQSxTQUFBdEIsQ0FBQSxjQUFBZ0MsYUFBQWxFLENBQUEsUUFBQUQsQ0FBQSxLQUFBb0UsTUFBQSxFQUFBbkUsQ0FBQSxZQUFBQSxDQUFBLEtBQUFELENBQUEsQ0FBQXFFLFFBQUEsR0FBQXBFLENBQUEsV0FBQUEsQ0FBQSxLQUFBRCxDQUFBLENBQUFzRSxVQUFBLEdBQUFyRSxDQUFBLEtBQUFELENBQUEsQ0FBQXVFLFFBQUEsR0FBQXRFLENBQUEsV0FBQXVFLFVBQUEsQ0FBQUMsSUFBQSxDQUFBekUsQ0FBQSxjQUFBMEUsY0FBQXpFLENBQUEsUUFBQUQsQ0FBQSxHQUFBQyxDQUFBLENBQUEwRSxVQUFBLFFBQUEzRSxDQUFBLENBQUE0QixJQUFBLG9CQUFBNUIsQ0FBQSxDQUFBNkIsR0FBQSxFQUFBNUIsQ0FBQSxDQUFBMEUsVUFBQSxHQUFBM0UsQ0FBQSxhQUFBeUIsUUFBQXhCLENBQUEsU0FBQXVFLFVBQUEsTUFBQUosTUFBQSxhQUFBbkUsQ0FBQSxDQUFBNEMsT0FBQSxDQUFBc0IsWUFBQSxjQUFBUyxLQUFBLGlCQUFBbEMsT0FBQTFDLENBQUEsUUFBQUEsQ0FBQSxXQUFBQSxDQUFBLFFBQUFFLENBQUEsR0FBQUYsQ0FBQSxDQUFBWSxDQUFBLE9BQUFWLENBQUEsU0FBQUEsQ0FBQSxDQUFBNEIsSUFBQSxDQUFBOUIsQ0FBQSw0QkFBQUEsQ0FBQSxDQUFBaUUsSUFBQSxTQUFBakUsQ0FBQSxPQUFBNkUsS0FBQSxDQUFBN0UsQ0FBQSxDQUFBOEUsTUFBQSxTQUFBdkUsQ0FBQSxPQUFBRyxDQUFBLFlBQUF1RCxLQUFBLGFBQUExRCxDQUFBLEdBQUFQLENBQUEsQ0FBQThFLE1BQUEsT0FBQXpFLENBQUEsQ0FBQXlCLElBQUEsQ0FBQTlCLENBQUEsRUFBQU8sQ0FBQSxVQUFBMEQsSUFBQSxDQUFBeEQsS0FBQSxHQUFBVCxDQUFBLENBQUFPLENBQUEsR0FBQTBELElBQUEsQ0FBQVYsSUFBQSxPQUFBVSxJQUFBLFNBQUFBLElBQUEsQ0FBQXhELEtBQUEsR0FBQVIsQ0FBQSxFQUFBZ0UsSUFBQSxDQUFBVixJQUFBLE9BQUFVLElBQUEsWUFBQXZELENBQUEsQ0FBQXVELElBQUEsR0FBQXZELENBQUEsZ0JBQUFxRCxTQUFBLENBQUFkLE9BQUEsQ0FBQWpELENBQUEsa0NBQUFvQyxpQkFBQSxDQUFBaEMsU0FBQSxHQUFBaUMsMEJBQUEsRUFBQTlCLENBQUEsQ0FBQW9DLENBQUEsbUJBQUFsQyxLQUFBLEVBQUE0QiwwQkFBQSxFQUFBakIsWUFBQSxTQUFBYixDQUFBLENBQUE4QiwwQkFBQSxtQkFBQTVCLEtBQUEsRUFBQTJCLGlCQUFBLEVBQUFoQixZQUFBLFNBQUFnQixpQkFBQSxDQUFBMkMsV0FBQSxHQUFBN0QsTUFBQSxDQUFBbUIsMEJBQUEsRUFBQXJCLENBQUEsd0JBQUFoQixDQUFBLENBQUFnRixtQkFBQSxhQUFBL0UsQ0FBQSxRQUFBRCxDQUFBLHdCQUFBQyxDQUFBLElBQUFBLENBQUEsQ0FBQWdGLFdBQUEsV0FBQWpGLENBQUEsS0FBQUEsQ0FBQSxLQUFBb0MsaUJBQUEsNkJBQUFwQyxDQUFBLENBQUErRSxXQUFBLElBQUEvRSxDQUFBLENBQUFrRixJQUFBLE9BQUFsRixDQUFBLENBQUFtRixJQUFBLGFBQUFsRixDQUFBLFdBQUFFLE1BQUEsQ0FBQWlGLGNBQUEsR0FBQWpGLE1BQUEsQ0FBQWlGLGNBQUEsQ0FBQW5GLENBQUEsRUFBQW9DLDBCQUFBLEtBQUFwQyxDQUFBLENBQUFvRixTQUFBLEdBQUFoRCwwQkFBQSxFQUFBbkIsTUFBQSxDQUFBakIsQ0FBQSxFQUFBZSxDQUFBLHlCQUFBZixDQUFBLENBQUFHLFNBQUEsR0FBQUQsTUFBQSxDQUFBcUIsTUFBQSxDQUFBbUIsQ0FBQSxHQUFBMUMsQ0FBQSxLQUFBRCxDQUFBLENBQUFzRixLQUFBLGFBQUFyRixDQUFBLGFBQUFrRCxPQUFBLEVBQUFsRCxDQUFBLE9BQUEyQyxxQkFBQSxDQUFBRyxhQUFBLENBQUEzQyxTQUFBLEdBQUFjLE1BQUEsQ0FBQTZCLGFBQUEsQ0FBQTNDLFNBQUEsRUFBQVUsQ0FBQSxpQ0FBQWQsQ0FBQSxDQUFBK0MsYUFBQSxHQUFBQSxhQUFBLEVBQUEvQyxDQUFBLENBQUF1RixLQUFBLGFBQUF0RixDQUFBLEVBQUFDLENBQUEsRUFBQUcsQ0FBQSxFQUFBRSxDQUFBLEVBQUFHLENBQUEsZUFBQUEsQ0FBQSxLQUFBQSxDQUFBLEdBQUE4RSxPQUFBLE9BQUE1RSxDQUFBLE9BQUFtQyxhQUFBLENBQUF6QixJQUFBLENBQUFyQixDQUFBLEVBQUFDLENBQUEsRUFBQUcsQ0FBQSxFQUFBRSxDQUFBLEdBQUFHLENBQUEsVUFBQVYsQ0FBQSxDQUFBZ0YsbUJBQUEsQ0FBQTlFLENBQUEsSUFBQVUsQ0FBQSxHQUFBQSxDQUFBLENBQUFxRCxJQUFBLEdBQUFiLElBQUEsV0FBQW5ELENBQUEsV0FBQUEsQ0FBQSxDQUFBc0QsSUFBQSxHQUFBdEQsQ0FBQSxDQUFBUSxLQUFBLEdBQUFHLENBQUEsQ0FBQXFELElBQUEsV0FBQXJCLHFCQUFBLENBQUFELENBQUEsR0FBQXpCLE1BQUEsQ0FBQXlCLENBQUEsRUFBQTNCLENBQUEsZ0JBQUFFLE1BQUEsQ0FBQXlCLENBQUEsRUFBQS9CLENBQUEsaUNBQUFNLE1BQUEsQ0FBQXlCLENBQUEsNkRBQUEzQyxDQUFBLENBQUF5RixJQUFBLGFBQUF4RixDQUFBLFFBQUFELENBQUEsR0FBQUcsTUFBQSxDQUFBRixDQUFBLEdBQUFDLENBQUEsZ0JBQUFHLENBQUEsSUFBQUwsQ0FBQSxFQUFBRSxDQUFBLENBQUF1RSxJQUFBLENBQUFwRSxDQUFBLFVBQUFILENBQUEsQ0FBQXdGLE9BQUEsYUFBQXpCLEtBQUEsV0FBQS9ELENBQUEsQ0FBQTRFLE1BQUEsU0FBQTdFLENBQUEsR0FBQUMsQ0FBQSxDQUFBeUYsR0FBQSxRQUFBMUYsQ0FBQSxJQUFBRCxDQUFBLFNBQUFpRSxJQUFBLENBQUF4RCxLQUFBLEdBQUFSLENBQUEsRUFBQWdFLElBQUEsQ0FBQVYsSUFBQSxPQUFBVSxJQUFBLFdBQUFBLElBQUEsQ0FBQVYsSUFBQSxPQUFBVSxJQUFBLFFBQUFqRSxDQUFBLENBQUEwQyxNQUFBLEdBQUFBLE1BQUEsRUFBQWpCLE9BQUEsQ0FBQXJCLFNBQUEsS0FBQTZFLFdBQUEsRUFBQXhELE9BQUEsRUFBQW1ELEtBQUEsV0FBQUEsTUFBQTVFLENBQUEsYUFBQTRGLElBQUEsV0FBQTNCLElBQUEsV0FBQU4sSUFBQSxRQUFBQyxLQUFBLEdBQUEzRCxDQUFBLE9BQUFzRCxJQUFBLFlBQUFFLFFBQUEsY0FBQUQsTUFBQSxnQkFBQTNCLEdBQUEsR0FBQTVCLENBQUEsT0FBQXVFLFVBQUEsQ0FBQTNCLE9BQUEsQ0FBQTZCLGFBQUEsSUFBQTFFLENBQUEsV0FBQUUsQ0FBQSxrQkFBQUEsQ0FBQSxDQUFBMkYsTUFBQSxPQUFBeEYsQ0FBQSxDQUFBeUIsSUFBQSxPQUFBNUIsQ0FBQSxNQUFBMkUsS0FBQSxFQUFBM0UsQ0FBQSxDQUFBNEYsS0FBQSxjQUFBNUYsQ0FBQSxJQUFBRCxDQUFBLE1BQUE4RixJQUFBLFdBQUFBLEtBQUEsU0FBQXhDLElBQUEsV0FBQXRELENBQUEsUUFBQXVFLFVBQUEsSUFBQUcsVUFBQSxrQkFBQTFFLENBQUEsQ0FBQTJCLElBQUEsUUFBQTNCLENBQUEsQ0FBQTRCLEdBQUEsY0FBQW1FLElBQUEsS0FBQW5DLGlCQUFBLFdBQUFBLGtCQUFBN0QsQ0FBQSxhQUFBdUQsSUFBQSxRQUFBdkQsQ0FBQSxNQUFBRSxDQUFBLGtCQUFBK0YsT0FBQTVGLENBQUEsRUFBQUUsQ0FBQSxXQUFBSyxDQUFBLENBQUFnQixJQUFBLFlBQUFoQixDQUFBLENBQUFpQixHQUFBLEdBQUE3QixDQUFBLEVBQUFFLENBQUEsQ0FBQStELElBQUEsR0FBQTVELENBQUEsRUFBQUUsQ0FBQSxLQUFBTCxDQUFBLENBQUFzRCxNQUFBLFdBQUF0RCxDQUFBLENBQUEyQixHQUFBLEdBQUE1QixDQUFBLEtBQUFNLENBQUEsYUFBQUEsQ0FBQSxRQUFBaUUsVUFBQSxDQUFBTSxNQUFBLE1BQUF2RSxDQUFBLFNBQUFBLENBQUEsUUFBQUcsQ0FBQSxRQUFBOEQsVUFBQSxDQUFBakUsQ0FBQSxHQUFBSyxDQUFBLEdBQUFGLENBQUEsQ0FBQWlFLFVBQUEsaUJBQUFqRSxDQUFBLENBQUEwRCxNQUFBLFNBQUE2QixNQUFBLGFBQUF2RixDQUFBLENBQUEwRCxNQUFBLFNBQUF3QixJQUFBLFFBQUE5RSxDQUFBLEdBQUFULENBQUEsQ0FBQXlCLElBQUEsQ0FBQXBCLENBQUEsZUFBQU0sQ0FBQSxHQUFBWCxDQUFBLENBQUF5QixJQUFBLENBQUFwQixDQUFBLHFCQUFBSSxDQUFBLElBQUFFLENBQUEsYUFBQTRFLElBQUEsR0FBQWxGLENBQUEsQ0FBQTJELFFBQUEsU0FBQTRCLE1BQUEsQ0FBQXZGLENBQUEsQ0FBQTJELFFBQUEsZ0JBQUF1QixJQUFBLEdBQUFsRixDQUFBLENBQUE0RCxVQUFBLFNBQUEyQixNQUFBLENBQUF2RixDQUFBLENBQUE0RCxVQUFBLGNBQUF4RCxDQUFBLGFBQUE4RSxJQUFBLEdBQUFsRixDQUFBLENBQUEyRCxRQUFBLFNBQUE0QixNQUFBLENBQUF2RixDQUFBLENBQUEyRCxRQUFBLHFCQUFBckQsQ0FBQSxZQUFBc0MsS0FBQSxxREFBQXNDLElBQUEsR0FBQWxGLENBQUEsQ0FBQTRELFVBQUEsU0FBQTJCLE1BQUEsQ0FBQXZGLENBQUEsQ0FBQTRELFVBQUEsWUFBQVIsTUFBQSxXQUFBQSxPQUFBN0QsQ0FBQSxFQUFBRCxDQUFBLGFBQUFFLENBQUEsUUFBQXNFLFVBQUEsQ0FBQU0sTUFBQSxNQUFBNUUsQ0FBQSxTQUFBQSxDQUFBLFFBQUFLLENBQUEsUUFBQWlFLFVBQUEsQ0FBQXRFLENBQUEsT0FBQUssQ0FBQSxDQUFBNkQsTUFBQSxTQUFBd0IsSUFBQSxJQUFBdkYsQ0FBQSxDQUFBeUIsSUFBQSxDQUFBdkIsQ0FBQSx3QkFBQXFGLElBQUEsR0FBQXJGLENBQUEsQ0FBQStELFVBQUEsUUFBQTVELENBQUEsR0FBQUgsQ0FBQSxhQUFBRyxDQUFBLGlCQUFBVCxDQUFBLG1CQUFBQSxDQUFBLEtBQUFTLENBQUEsQ0FBQTBELE1BQUEsSUFBQXBFLENBQUEsSUFBQUEsQ0FBQSxJQUFBVSxDQUFBLENBQUE0RCxVQUFBLEtBQUE1RCxDQUFBLGNBQUFFLENBQUEsR0FBQUYsQ0FBQSxHQUFBQSxDQUFBLENBQUFpRSxVQUFBLGNBQUEvRCxDQUFBLENBQUFnQixJQUFBLEdBQUEzQixDQUFBLEVBQUFXLENBQUEsQ0FBQWlCLEdBQUEsR0FBQTdCLENBQUEsRUFBQVUsQ0FBQSxTQUFBOEMsTUFBQSxnQkFBQVMsSUFBQSxHQUFBdkQsQ0FBQSxDQUFBNEQsVUFBQSxFQUFBbkMsQ0FBQSxTQUFBK0QsUUFBQSxDQUFBdEYsQ0FBQSxNQUFBc0YsUUFBQSxXQUFBQSxTQUFBakcsQ0FBQSxFQUFBRCxDQUFBLG9CQUFBQyxDQUFBLENBQUEyQixJQUFBLFFBQUEzQixDQUFBLENBQUE0QixHQUFBLHFCQUFBNUIsQ0FBQSxDQUFBMkIsSUFBQSxtQkFBQTNCLENBQUEsQ0FBQTJCLElBQUEsUUFBQXFDLElBQUEsR0FBQWhFLENBQUEsQ0FBQTRCLEdBQUEsZ0JBQUE1QixDQUFBLENBQUEyQixJQUFBLFNBQUFvRSxJQUFBLFFBQUFuRSxHQUFBLEdBQUE1QixDQUFBLENBQUE0QixHQUFBLE9BQUEyQixNQUFBLGtCQUFBUyxJQUFBLHlCQUFBaEUsQ0FBQSxDQUFBMkIsSUFBQSxJQUFBNUIsQ0FBQSxVQUFBaUUsSUFBQSxHQUFBakUsQ0FBQSxHQUFBbUMsQ0FBQSxLQUFBZ0UsTUFBQSxXQUFBQSxPQUFBbEcsQ0FBQSxhQUFBRCxDQUFBLFFBQUF3RSxVQUFBLENBQUFNLE1BQUEsTUFBQTlFLENBQUEsU0FBQUEsQ0FBQSxRQUFBRSxDQUFBLFFBQUFzRSxVQUFBLENBQUF4RSxDQUFBLE9BQUFFLENBQUEsQ0FBQW9FLFVBQUEsS0FBQXJFLENBQUEsY0FBQWlHLFFBQUEsQ0FBQWhHLENBQUEsQ0FBQXlFLFVBQUEsRUFBQXpFLENBQUEsQ0FBQXFFLFFBQUEsR0FBQUcsYUFBQSxDQUFBeEUsQ0FBQSxHQUFBaUMsQ0FBQSx5QkFBQWlFLE9BQUFuRyxDQUFBLGFBQUFELENBQUEsUUFBQXdFLFVBQUEsQ0FBQU0sTUFBQSxNQUFBOUUsQ0FBQSxTQUFBQSxDQUFBLFFBQUFFLENBQUEsUUFBQXNFLFVBQUEsQ0FBQXhFLENBQUEsT0FBQUUsQ0FBQSxDQUFBa0UsTUFBQSxLQUFBbkUsQ0FBQSxRQUFBSSxDQUFBLEdBQUFILENBQUEsQ0FBQXlFLFVBQUEsa0JBQUF0RSxDQUFBLENBQUF1QixJQUFBLFFBQUFyQixDQUFBLEdBQUFGLENBQUEsQ0FBQXdCLEdBQUEsRUFBQTZDLGFBQUEsQ0FBQXhFLENBQUEsWUFBQUssQ0FBQSxnQkFBQStDLEtBQUEsOEJBQUErQyxhQUFBLFdBQUFBLGNBQUFyRyxDQUFBLEVBQUFFLENBQUEsRUFBQUcsQ0FBQSxnQkFBQW9ELFFBQUEsS0FBQTVDLFFBQUEsRUFBQTZCLE1BQUEsQ0FBQTFDLENBQUEsR0FBQWdFLFVBQUEsRUFBQTlELENBQUEsRUFBQWdFLE9BQUEsRUFBQTdELENBQUEsb0JBQUFtRCxNQUFBLFVBQUEzQixHQUFBLEdBQUE1QixDQUFBLEdBQUFrQyxDQUFBLE9BQUFuQyxDQUFBO0FBQUEsU0FBQXNHLG1CQUFBQyxHQUFBLEVBQUFyRCxPQUFBLEVBQUFzRCxNQUFBLEVBQUFDLEtBQUEsRUFBQUMsTUFBQSxFQUFBQyxHQUFBLEVBQUE5RSxHQUFBLGNBQUErRSxJQUFBLEdBQUFMLEdBQUEsQ0FBQUksR0FBQSxFQUFBOUUsR0FBQSxPQUFBcEIsS0FBQSxHQUFBbUcsSUFBQSxDQUFBbkcsS0FBQSxXQUFBb0csS0FBQSxJQUFBTCxNQUFBLENBQUFLLEtBQUEsaUJBQUFELElBQUEsQ0FBQXJELElBQUEsSUFBQUwsT0FBQSxDQUFBekMsS0FBQSxZQUFBK0UsT0FBQSxDQUFBdEMsT0FBQSxDQUFBekMsS0FBQSxFQUFBMkMsSUFBQSxDQUFBcUQsS0FBQSxFQUFBQyxNQUFBO0FBQUEsU0FBQUksa0JBQUFDLEVBQUEsNkJBQUFDLElBQUEsU0FBQUMsSUFBQSxHQUFBQyxTQUFBLGFBQUExQixPQUFBLFdBQUF0QyxPQUFBLEVBQUFzRCxNQUFBLFFBQUFELEdBQUEsR0FBQVEsRUFBQSxDQUFBSSxLQUFBLENBQUFILElBQUEsRUFBQUMsSUFBQSxZQUFBUixNQUFBaEcsS0FBQSxJQUFBNkYsa0JBQUEsQ0FBQUMsR0FBQSxFQUFBckQsT0FBQSxFQUFBc0QsTUFBQSxFQUFBQyxLQUFBLEVBQUFDLE1BQUEsVUFBQWpHLEtBQUEsY0FBQWlHLE9BQUFVLEdBQUEsSUFBQWQsa0JBQUEsQ0FBQUMsR0FBQSxFQUFBckQsT0FBQSxFQUFBc0QsTUFBQSxFQUFBQyxLQUFBLEVBQUFDLE1BQUEsV0FBQVUsR0FBQSxLQUFBWCxLQUFBLENBQUFZLFNBQUE7QUFBQTtBQUNBLElBQUFFLElBQUEsR0FBQUMsbUJBQUE7QUFDQTtBQUVBLGlFQUFlO0VBQ2ZFLFVBQUE7SUFBQUMsTUFBQSxFQUFBTCw4Q0FBQUs7RUFBQTtFQUNBQyxJQUFBLFdBQUFBLEtBQUE7SUFBQTtNQUNBQyxNQUFBO01BQ0FELElBQUE7SUFDQTtFQUFBO0VBRUFFLE9BQUEsV0FBQUEsUUFBQTtJQUFBLElBQUFDLEtBQUE7SUFBQSxPQUFBakIsaUJBQUEsZUFBQS9HLG1CQUFBLEdBQUFvRixJQUFBLFVBQUE2QyxTQUFBO01BQUEsSUFBQUMsSUFBQTtNQUFBLElBQUFqQixJQUFBO01BQUEsT0FBQWpILG1CQUFBLEdBQUF1QixJQUFBLFVBQUE0RyxVQUFBQyxTQUFBO1FBQUEsa0JBQUFBLFNBQUEsQ0FBQXZDLElBQUEsR0FBQXVDLFNBQUEsQ0FBQWxFLElBQUE7VUFBQTtZQUNBK0MsSUFBQSxHQUFBZSxLQUFBO1lBQUFJLFNBQUEsQ0FBQWxFLElBQUE7WUFBQSxPQUNBbUUsS0FBQSxDQUNBQyxHQUFBLHFCQUFBTixLQUFBLENBQUFPLE1BQUEsQ0FBQUMsTUFBQSxDQUFBQyxFQUFBO2NBQ0FDLE9BQUE7Z0JBQ0FDLGFBQUEsRUFBQUMsRUFBQTtnQkFDQUMsTUFBQTtjQUNBO1lBQ0EsR0FDQXhGLElBQUEsV0FBQXlGLFFBQUE7Y0FDQWQsS0FBQSxDQUFBSCxJQUFBLEdBQUFpQixRQUFBLENBQUFqQixJQUFBO1lBQ0E7VUFBQTtZQUNBRyxLQUFBLENBQUFGLE1BQUEsT0FBQVAsNkNBQUEsQ0FBQUcsdUNBQUE7WUFFQU0sS0FBQSxDQUFBRixNQUFBLENBQUFrQixZQUFBLENBQUFDLEdBQUEsV0FBQUMsRUFBQSxFQUFBQyxHQUFBO2NBQUEsUUFBQWpCLElBQUEsR0FBQUEsSUFBQSxJQUFBbkIsaUJBQUEsZUFBQS9HLG1CQUFBLEdBQUFvRixJQUFBLFVBQUFnRSxRQUFBQyxNQUFBLEVBQUFDLE9BQUE7Z0JBQUEsT0FBQXRKLG1CQUFBLEdBQUF1QixJQUFBLFVBQUFnSSxTQUFBQyxRQUFBO2tCQUFBLGtCQUFBQSxRQUFBLENBQUEzRCxJQUFBLEdBQUEyRCxRQUFBLENBQUF0RixJQUFBO29CQUFBO3NCQUNBb0YsT0FBQSxDQUFBRyxhQUFBO3NCQUFBRCxRQUFBLENBQUF0RixJQUFBO3NCQUFBLE9BQ0FtRSxLQUFBLENBQ0FxQixJQUFBLHVCQUFBekMsSUFBQSxDQUFBc0IsTUFBQSxDQUFBQyxNQUFBLENBQUFDLEVBQUEsRUFBQVksTUFBQSxDQUFBeEIsSUFBQSxFQUNBeEUsSUFBQSxXQUFBeUYsUUFBQTt3QkFDQSxJQUFBQSxRQUFBLENBQUFqQixJQUFBOzBCQUNBOEIsT0FBQSxDQUFBQyxHQUFBLENBQUFkLFFBQUEsQ0FBQWpCLElBQUE7MEJBQ0FMLElBQUEsQ0FBQXFDLElBQUE7NEJBQ0FDLEtBQUE7NEJBQ0FDLElBQUE7NEJBQ0FDLElBQUE7NEJBQ0E7MEJBQ0EsR0FBQTNHLElBQUE7NEJBQ0E0RyxNQUFBLENBQUFDLFFBQUEsQ0FBQUMsSUFBQSxHQUNBOzBCQUNBO3dCQUNBOzBCQUNBM0MsSUFBQSxDQUFBcUMsSUFBQTs0QkFDQUMsS0FBQTs0QkFDQUMsSUFBQSxFQUNBOzRCQUNBQyxJQUFBOzRCQUNBOzBCQUNBLEdBQUEzRyxJQUFBLFdBQUErRyxDQUFBOzRCQUNBRixRQUFBLENBQUFHLE1BQUE7MEJBQ0E7d0JBQ0E7c0JBQ0E7b0JBQUE7b0JBQUE7c0JBQUEsT0FBQWIsUUFBQSxDQUFBeEQsSUFBQTtrQkFBQTtnQkFBQSxHQUFBb0QsT0FBQTtjQUFBLENBQ0EsSUFBQWhDLEtBQUEsT0FBQUQsU0FBQTtZQUFBO1lBQ0FhLEtBQUEsQ0FBQUYsTUFBQSxDQUFBRCxJQUFBLEdBQUFaLElBQUEsQ0FBQVksSUFBQTtVQUFBO1VBQUE7WUFBQSxPQUFBTyxTQUFBLENBQUFwQyxJQUFBO1FBQUE7TUFBQSxHQUFBaUMsUUFBQTtJQUFBO0VBQ0E7RUFDQXFDLE9BQUE7QUFDQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vL3Jlc291cmNlcy9qcy9jb21wb25lbnRzL2FkbWluL3BhZ2UvZWRpdC52dWU/YzJjOSJdLCJzb3VyY2VzQ29udGVudCI6WyI8dGVtcGxhdGU+XG4gIDxkaXYgdi1pZj1cInN1cnZleVwiPlxuICAgIDxTdXJ2ZXkgOnN1cnZleT1cInN1cnZleVwiPjwvU3VydmV5PlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG4gICAgXG4gICAgPHNjcmlwdD5cbmltcG9ydCAqIGFzIFN1cnZleVZ1ZSBmcm9tIFwic3VydmV5LXZ1ZVwiO1xuY29uc3QgU3dhbCA9IHJlcXVpcmUoXCJzd2VldGFsZXJ0MlwiKTtcbmltcG9ydCB7IGpzb24gfSBmcm9tIFwiLi9mb3JtXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29tcG9uZW50czogeyBTdXJ2ZXk6IFN1cnZleVZ1ZS5TdXJ2ZXkgfSxcbiAgZGF0YTogKCkgPT4gKHtcbiAgICBzdXJ2ZXk6IG51bGwsXG4gICAgZGF0YTpudWxsXG4gIH0pLFxuXG4gIGFzeW5jIG1vdW50ZWQoKSB7XG4gICAgbGV0IHNlbGYgPSB0aGlzO1xuICAgIGF3YWl0IGF4aW9zXG4gICAgICAuZ2V0KFwiL2FwaS9wYWdlL2VkaXQvXCIgKyB0aGlzLiRyb3V0ZS5wYXJhbXMuaWQsIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIEF1dGhvcml6YXRpb246IEFULFxuICAgICAgICAgIEFjY2VwdDogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIHRoaXMuZGF0YSA9IHJlc3BvbnNlLmRhdGE7XG4gICAgICB9KTtcbiAgICB0aGlzLnN1cnZleSA9IG5ldyBTdXJ2ZXlWdWUuTW9kZWwoanNvbik7XG5cbiAgICB0aGlzLnN1cnZleS5vbkNvbXBsZXRpbmcuYWRkKGFzeW5jIGZ1bmN0aW9uIChyZXN1bHQsIG9wdGlvbnMpIHtcbiAgICAgIG9wdGlvbnMuYWxsb3dDb21wbGV0ZSA9IGZhbHNlO1xuICAgICAgYXdhaXQgYXhpb3NcbiAgICAgICAgLnBvc3QoXCIvYXBpL3BhZ2UvdXBkYXRlL1wiK3NlbGYuJHJvdXRlLnBhcmFtcy5pZCwgcmVzdWx0LmRhdGEpXG4gICAgICAgIC50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhyZXNwb25zZS5kYXRhKVxuICAgICAgICAgICAgU3dhbC5maXJlKHtcbiAgICAgICAgICAgICAgdGl0bGU6IFwiQWN0dWFsaXphZG9cIixcbiAgICAgICAgICAgICAgdGV4dDogXCJMYSBwYWdpbmEgaGEgc2lkbyBhY3R1YWxpemFkYSBjb24gw6l4aXRvXCIsXG4gICAgICAgICAgICAgIGljb246IFwic3VjY2Vzc1wiLFxuICAgICAgICAgICAgLy8gIHRpbWVyOiAyMDAwLFxuICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID1cbiAgICAgICAgICAgICAgICBcIi9wYW5lbC1hZG1pbmlzdHJhY2lvbi9wYWdpbmFzXCI7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgU3dhbC5maXJlKHtcbiAgICAgICAgICAgICAgdGl0bGU6IFwiRXJyb3IhXCIsXG4gICAgICAgICAgICAgIHRleHQ6XG4gICAgICAgICAgICAgICAgXCJObyBzZSBwdWRvIGFjdHVhbGl6YSBsYSBwYWdpbmEuIFBvciBmYXZvciBpbnRlbnRlIG3DoXMgdGFyZGUuXCIsXG4gICAgICAgICAgICAgIGljb246IFwiZXJyb3JcIixcbiAgICAgICAgICAvLyAgICB0aW1lcjogMzAwMCxcbiAgICAgICAgICAgIH0pLnRoZW4oKF8pID0+IHtcbiAgICAgICAgICAgICAgbG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIHRoaXMuc3VydmV5LmRhdGEgPSBzZWxmLmRhdGE7XG4gIH0sXG4gIG1ldGhvZHM6IHt9LFxufTtcbjwvc2NyaXB0PlxuICAgICJdLCJuYW1lcyI6WyJfcmVnZW5lcmF0b3JSdW50aW1lIiwiZSIsInQiLCJyIiwiT2JqZWN0IiwicHJvdG90eXBlIiwibiIsImhhc093blByb3BlcnR5IiwibyIsImRlZmluZVByb3BlcnR5IiwidmFsdWUiLCJpIiwiU3ltYm9sIiwiYSIsIml0ZXJhdG9yIiwiYyIsImFzeW5jSXRlcmF0b3IiLCJ1IiwidG9TdHJpbmdUYWciLCJkZWZpbmUiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJ3cmFwIiwiR2VuZXJhdG9yIiwiY3JlYXRlIiwiQ29udGV4dCIsIm1ha2VJbnZva2VNZXRob2QiLCJ0cnlDYXRjaCIsInR5cGUiLCJhcmciLCJjYWxsIiwiaCIsImwiLCJmIiwicyIsInkiLCJHZW5lcmF0b3JGdW5jdGlvbiIsIkdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlIiwicCIsImQiLCJnZXRQcm90b3R5cGVPZiIsInYiLCJ2YWx1ZXMiLCJnIiwiZGVmaW5lSXRlcmF0b3JNZXRob2RzIiwiZm9yRWFjaCIsIl9pbnZva2UiLCJBc3luY0l0ZXJhdG9yIiwiaW52b2tlIiwiX3R5cGVvZiIsInJlc29sdmUiLCJfX2F3YWl0IiwidGhlbiIsImNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnIiwiRXJyb3IiLCJkb25lIiwibWV0aG9kIiwiZGVsZWdhdGUiLCJtYXliZUludm9rZURlbGVnYXRlIiwic2VudCIsIl9zZW50IiwiZGlzcGF0Y2hFeGNlcHRpb24iLCJhYnJ1cHQiLCJUeXBlRXJyb3IiLCJyZXN1bHROYW1lIiwibmV4dCIsIm5leHRMb2MiLCJwdXNoVHJ5RW50cnkiLCJ0cnlMb2MiLCJjYXRjaExvYyIsImZpbmFsbHlMb2MiLCJhZnRlckxvYyIsInRyeUVudHJpZXMiLCJwdXNoIiwicmVzZXRUcnlFbnRyeSIsImNvbXBsZXRpb24iLCJyZXNldCIsImlzTmFOIiwibGVuZ3RoIiwiZGlzcGxheU5hbWUiLCJpc0dlbmVyYXRvckZ1bmN0aW9uIiwiY29uc3RydWN0b3IiLCJuYW1lIiwibWFyayIsInNldFByb3RvdHlwZU9mIiwiX19wcm90b19fIiwiYXdyYXAiLCJhc3luYyIsIlByb21pc2UiLCJrZXlzIiwicmV2ZXJzZSIsInBvcCIsInByZXYiLCJjaGFyQXQiLCJzbGljZSIsInN0b3AiLCJydmFsIiwiaGFuZGxlIiwiY29tcGxldGUiLCJmaW5pc2giLCJfY2F0Y2giLCJkZWxlZ2F0ZVlpZWxkIiwiYXN5bmNHZW5lcmF0b3JTdGVwIiwiZ2VuIiwicmVqZWN0IiwiX25leHQiLCJfdGhyb3ciLCJrZXkiLCJpbmZvIiwiZXJyb3IiLCJfYXN5bmNUb0dlbmVyYXRvciIsImZuIiwic2VsZiIsImFyZ3MiLCJhcmd1bWVudHMiLCJhcHBseSIsImVyciIsInVuZGVmaW5lZCIsIlN1cnZleVZ1ZSIsIlN3YWwiLCJyZXF1aXJlIiwianNvbiIsImNvbXBvbmVudHMiLCJTdXJ2ZXkiLCJkYXRhIiwic3VydmV5IiwibW91bnRlZCIsIl90aGlzIiwiX2NhbGxlZTIiLCJfcmVmIiwiX2NhbGxlZTIkIiwiX2NvbnRleHQyIiwiYXhpb3MiLCJnZXQiLCIkcm91dGUiLCJwYXJhbXMiLCJpZCIsImhlYWRlcnMiLCJBdXRob3JpemF0aW9uIiwiQVQiLCJBY2NlcHQiLCJyZXNwb25zZSIsIk1vZGVsIiwib25Db21wbGV0aW5nIiwiYWRkIiwiX3giLCJfeDIiLCJfY2FsbGVlIiwicmVzdWx0Iiwib3B0aW9ucyIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJhbGxvd0NvbXBsZXRlIiwicG9zdCIsImNvbnNvbGUiLCJsb2ciLCJmaXJlIiwidGl0bGUiLCJ0ZXh0IiwiaWNvbiIsIndpbmRvdyIsImxvY2F0aW9uIiwiaHJlZiIsIl8iLCJyZWxvYWQiLCJtZXRob2RzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/page/edit.vue?vue&type=script&lang=js&\n");

/***/ }),

/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/page/index.vue?vue&type=script&lang=js&":
/*!***********************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/page/index.vue?vue&type=script&lang=js& ***!
  \***********************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n  data: function data() {\n    return {\n      data: null,\n      search: \"\",\n      headers: [{\n        text: \"Nombre\",\n        value: \"name\"\n      }, {\n        text: \"Url\",\n        value: \"link\"\n      }, {\n        text: \"Secciones\",\n        value: \"sections\"\n      }, {\n        text: \"Menu\",\n        value: \"menu\"\n      }, {\n        text: \"Acciones\",\n        value: \"actions\",\n        sortable: false\n      }]\n    };\n  },\n  mounted: function mounted() {\n    this.loadData();\n  },\n  methods: {\n    loadData: function loadData() {\n      var _this = this;\n      axios.get(\"/api/page/get-pages\").then(function (response) {\n        _this.data = response.data;\n      });\n    },\n    edit: function edit(id) {\n      window.location.href = \"/panel-administracion/paginas/\" + id + \"/editar\";\n    }\n  }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vcGFnZS9pbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmIiwibWFwcGluZ3MiOiI7Ozs7QUF1Q0EsaUVBQWU7RUFDZkEsSUFBQSxXQUFBQSxLQUFBO0lBQ0E7TUFDQUEsSUFBQTtNQUNBQyxNQUFBO01BQ0FDLE9BQUEsR0FDQTtRQUFBQyxJQUFBO1FBQUFDLEtBQUE7TUFBQSxHQUNBO1FBQUFELElBQUE7UUFBQUMsS0FBQTtNQUFBLEdBQ0E7UUFBQUQsSUFBQTtRQUFBQyxLQUFBO01BQUEsR0FDQTtRQUFBRCxJQUFBO1FBQUFDLEtBQUE7TUFBQSxHQUNBO1FBQUFELElBQUE7UUFBQUMsS0FBQTtRQUFBQyxRQUFBO01BQUE7SUFFQTtFQUNBO0VBQ0FDLE9BQUEsV0FBQUEsUUFBQTtJQUNBLEtBQUFDLFFBQUE7RUFDQTtFQUNBQyxPQUFBO0lBQ0FELFFBQUEsV0FBQUEsU0FBQTtNQUFBLElBQUFFLEtBQUE7TUFDQUMsS0FBQSxDQUFBQyxHQUFBLHdCQUFBQyxJQUFBLFdBQUFDLFFBQUE7UUFDQUosS0FBQSxDQUFBVCxJQUFBLEdBQUFhLFFBQUEsQ0FBQWIsSUFBQTtNQUNBO0lBQ0E7SUFDQWMsSUFBQSxXQUFBQSxLQUFBQyxFQUFBO01BQ0FDLE1BQUEsQ0FBQUMsUUFBQSxDQUFBQyxJQUFBLHNDQUFBSCxFQUFBO0lBQ0E7RUFDQTtBQUNBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vcGFnZS9pbmRleC52dWU/MDFiOSJdLCJzb3VyY2VzQ29udGVudCI6WyI8dGVtcGxhdGU+XG4gIDx2LWFwcD5cbiAgICA8di1jYXJkIHYtaWY9XCJkYXRhXCI+XG4gICAgICA8di1jYXJkLXRpdGxlPlxuICAgICAgICBBZG1pbmlzdHJhY2nDs24gZGUgUGFnaW5hc1xuICAgICAgICA8di1zcGFjZXI+PC92LXNwYWNlcj5cbiAgICAgICAgPHYtdGV4dC1maWVsZFxuICAgICAgICAgIHYtbW9kZWw9XCJzZWFyY2hcIlxuICAgICAgICAgIGFwcGVuZC1pY29uPVwibWRpLW1hZ25pZnlcIlxuICAgICAgICAgIGxhYmVsPVwiQnVzY2FyXCJcbiAgICAgICAgICBzaW5nbGUtbGluZVxuICAgICAgICAgIGhpZGUtZGV0YWlsc1xuICAgICAgICA+PC92LXRleHQtZmllbGQ+XG4gICAgICA8L3YtY2FyZC10aXRsZT5cbiAgICAgIDx2LWRhdGEtdGFibGVcbiAgICAgICAgOmhlYWRlcnM9XCJoZWFkZXJzXCJcbiAgICAgICAgOml0ZW1zPVwiZGF0YVwiXG4gICAgICAgIGNsYXNzPVwiZWxldmF0aW9uLTFcIlxuICAgICAgICA6c2VhcmNoPVwic2VhcmNoXCJcbiAgICAgID5cbiAgICAgICAgPHRlbXBsYXRlIHYtc2xvdDppdGVtLmxpbms9XCJ7IGl0ZW0gfVwiPlxuICAgICAgICAgIDx2LWJ0biBpY29uIDpocmVmPVwiaXRlbS5zbHVnXCIgY29sb3I9XCJwcmltYXJ5XCIgdGFyZ2V0PVwiX2JsYW5rXCI+XG4gICAgICAgICAgICA8di1pY29uPm1kaS1vcGVuLWluLW5ldzwvdi1pY29uPlxuICAgICAgICAgIDwvdi1idG4+XG4gICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgIDx0ZW1wbGF0ZSB2LXNsb3Q6aXRlbS5tZW51PVwieyBpdGVtIH1cIj5cbiAgICAgICAgICB7eyBpdGVtLmlzX21lbnUgPyBcIlNpXCIgOiBcIk5vXCIgfX1cbiAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgPHRlbXBsYXRlIHYtc2xvdDppdGVtLmFjdGlvbnM9XCJ7IGl0ZW0gfVwiPlxuICAgICAgICAgIDx2LWJ0biBjb2xvcj1cInJlZFwiIGZhYiB4LXNtYWxsIGRhcmsgQGNsaWNrPVwiZWRpdChpdGVtLmlkKVwiPlxuICAgICAgICAgICAgPHYtaWNvbj4gbWRpLXBlbmNpbCA8L3YtaWNvbj5cbiAgICAgICAgICA8L3YtYnRuPlxuICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgPC92LWRhdGEtdGFibGU+XG4gICAgPC92LWNhcmQ+XG4gIDwvdi1hcHA+XG48L3RlbXBsYXRlPlxuICBcbiAgPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZGF0YTogbnVsbCxcbiAgICAgIHNlYXJjaDogXCJcIixcbiAgICAgIGhlYWRlcnM6IFtcbiAgICAgICAgeyB0ZXh0OiBcIk5vbWJyZVwiLCB2YWx1ZTogXCJuYW1lXCIgfSxcbiAgICAgICAgeyB0ZXh0OiBcIlVybFwiLCB2YWx1ZTogXCJsaW5rXCIgfSxcbiAgICAgICAgeyB0ZXh0OiBcIlNlY2Npb25lc1wiLCB2YWx1ZTogXCJzZWN0aW9uc1wiIH0sXG4gICAgICAgIHsgdGV4dDogXCJNZW51XCIsIHZhbHVlOiBcIm1lbnVcIiB9LFxuICAgICAgICB7IHRleHQ6IFwiQWNjaW9uZXNcIiwgdmFsdWU6IFwiYWN0aW9uc1wiLCBzb3J0YWJsZTogZmFsc2UgfSxcbiAgICAgIF0sXG4gICAgfTtcbiAgfSxcbiAgbW91bnRlZCgpIHtcbiAgICB0aGlzLmxvYWREYXRhKCk7XG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICBsb2FkRGF0YSgpIHtcbiAgICAgIGF4aW9zLmdldChcIi9hcGkvcGFnZS9nZXQtcGFnZXNcIikudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgdGhpcy5kYXRhID0gcmVzcG9uc2UuZGF0YTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgZWRpdChpZCkge1xuICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBcIi9wYW5lbC1hZG1pbmlzdHJhY2lvbi9wYWdpbmFzL1wiICsgaWQgKyBcIi9lZGl0YXJcIjtcbiAgICB9LFxuICB9LFxufTtcbjwvc2NyaXB0PiJdLCJuYW1lcyI6WyJkYXRhIiwic2VhcmNoIiwiaGVhZGVycyIsInRleHQiLCJ2YWx1ZSIsInNvcnRhYmxlIiwibW91bnRlZCIsImxvYWREYXRhIiwibWV0aG9kcyIsIl90aGlzIiwiYXhpb3MiLCJnZXQiLCJ0aGVuIiwicmVzcG9uc2UiLCJlZGl0IiwiaWQiLCJ3aW5kb3ciLCJsb2NhdGlvbiIsImhyZWYiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/page/index.vue?vue&type=script&lang=js&\n");

/***/ }),

/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/video/create.vue?vue&type=script&lang=js&":
/*!*************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/video/create.vue?vue&type=script&lang=js& ***!
  \*************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var survey_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! survey-vue */ \"./node_modules/survey-vue/survey-vue.js\");\n/* harmony import */ var survey_vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(survey_vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _form__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./form */ \"./resources/js/components/admin/video/form.js\");\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = \"function\" == typeof Symbol ? Symbol : {}, a = i.iterator || \"@@iterator\", c = i.asyncIterator || \"@@asyncIterator\", u = i.toStringTag || \"@@toStringTag\"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, \"\"); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, \"_invoke\", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: \"normal\", arg: t.call(e, r) }; } catch (t) { return { type: \"throw\", arg: t }; } } e.wrap = wrap; var h = \"suspendedStart\", l = \"suspendedYield\", f = \"executing\", s = \"completed\", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { [\"next\", \"throw\", \"return\"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if (\"throw\" !== c.type) { var u = c.arg, h = u.value; return h && \"object\" == _typeof(h) && n.call(h, \"__await\") ? e.resolve(h.__await).then(function (t) { invoke(\"next\", t, i, a); }, function (t) { invoke(\"throw\", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke(\"throw\", t, i, a); }); } a(c.arg); } var r; o(this, \"_invoke\", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error(\"Generator is already running\"); if (o === s) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = f; var p = tryCatch(e, r, n); if (\"normal\" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } \"throw\" === p.type && (o = s, n.method = \"throw\", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, \"throw\" === n && e.iterator[\"return\"] && (r.method = \"return\", r.arg = t, maybeInvokeDelegate(e, r), \"throw\" === r.method) || \"return\" !== n && (r.method = \"throw\", r.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), y; var i = tryCatch(o, e.iterator, r.arg); if (\"throw\" === i.type) return r.method = \"throw\", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, \"return\" !== r.method && (r.method = \"next\", r.arg = t), r.delegate = null, y) : a : (r.method = \"throw\", r.arg = new TypeError(\"iterator result is not an object\"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = \"normal\", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: \"root\" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || \"\" === e) { var r = e[a]; if (r) return r.call(e); if (\"function\" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, \"constructor\", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, \"constructor\", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), e.isGeneratorFunction = function (t) { var e = \"function\" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || \"GeneratorFunction\" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, \"GeneratorFunction\")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, \"Generator\"), define(g, a, function () { return this; }), define(g, \"toString\", function () { return \"[object Generator]\"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) \"t\" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = \"throw\", a.arg = e, r.next = n, o && (r.method = \"next\", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if (\"root\" === i.tryLoc) return handle(\"end\"); if (i.tryLoc <= this.prev) { var c = n.call(i, \"catchLoc\"), u = n.call(i, \"finallyLoc\"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error(\"try statement without catch or finally\"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, \"finallyLoc\") && this.prev < o.finallyLoc) { var i = o; break; } } i && (\"break\" === t || \"continue\" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = \"next\", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, \"catch\": function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if (\"throw\" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, \"next\" === this.method && (this.arg = t), y; } }, e; }\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n  components: {\n    Survey: survey_vue__WEBPACK_IMPORTED_MODULE_0__.Survey\n  },\n  data: function data() {\n    return {\n      survey: null\n    };\n  },\n  mounted: function mounted() {\n    var _this = this;\n    return _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {\n      var _ref;\n      return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n        while (1) switch (_context2.prev = _context2.next) {\n          case 0:\n            _this.survey = new survey_vue__WEBPACK_IMPORTED_MODULE_0__.Model(_form__WEBPACK_IMPORTED_MODULE_1__.json);\n            _this.survey.onCompleting.add(function (_x, _x2) {\n              return (_ref = _ref || _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(result, options) {\n                return _regeneratorRuntime().wrap(function _callee$(_context) {\n                  while (1) switch (_context.prev = _context.next) {\n                    case 0:\n                      options.allowComplete = false;\n                      _context.next = 3;\n                      return axios.post(\"/api/video/store\", result.data).then(function (response) {\n                        if (response.data) {\n                          console.log(response.data);\n                          Swal.fire({\n                            title: \"Actualizado\",\n                            text: \"El video ha sido creado o actualizado con éxito\",\n                            icon: \"success\"\n                            //  timer: 2000,\n                          }).then(function () {\n                            window.location.href = \"/panel-administracion/alianzas\";\n                          });\n                        } else {\n                          Swal.fire({\n                            title: \"Error!\",\n                            text: \"No se pudo crear el video. Por favor intente más tarde.\",\n                            icon: \"error\"\n                            //    timer: 3000,\n                          }).then(function (_) {\n                            location.reload();\n                          });\n                        }\n                      });\n                    case 3:\n                    case \"end\":\n                      return _context.stop();\n                  }\n                }, _callee);\n              }))).apply(this, arguments);\n            });\n          case 2:\n          case \"end\":\n            return _context2.stop();\n        }\n      }, _callee2);\n    }))();\n  }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vdmlkZW8vY3JlYXRlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7K0NBT0EscUpBQUFBLG1CQUFBLFlBQUFBLG9CQUFBLFdBQUFDLENBQUEsU0FBQUMsQ0FBQSxFQUFBRCxDQUFBLE9BQUFFLENBQUEsR0FBQUMsTUFBQSxDQUFBQyxTQUFBLEVBQUFDLENBQUEsR0FBQUgsQ0FBQSxDQUFBSSxjQUFBLEVBQUFDLENBQUEsR0FBQUosTUFBQSxDQUFBSyxjQUFBLGNBQUFQLENBQUEsRUFBQUQsQ0FBQSxFQUFBRSxDQUFBLElBQUFELENBQUEsQ0FBQUQsQ0FBQSxJQUFBRSxDQUFBLENBQUFPLEtBQUEsS0FBQUMsQ0FBQSx3QkFBQUMsTUFBQSxHQUFBQSxNQUFBLE9BQUFDLENBQUEsR0FBQUYsQ0FBQSxDQUFBRyxRQUFBLGtCQUFBQyxDQUFBLEdBQUFKLENBQUEsQ0FBQUssYUFBQSx1QkFBQUMsQ0FBQSxHQUFBTixDQUFBLENBQUFPLFdBQUEsOEJBQUFDLE9BQUFqQixDQUFBLEVBQUFELENBQUEsRUFBQUUsQ0FBQSxXQUFBQyxNQUFBLENBQUFLLGNBQUEsQ0FBQVAsQ0FBQSxFQUFBRCxDQUFBLElBQUFTLEtBQUEsRUFBQVAsQ0FBQSxFQUFBaUIsVUFBQSxNQUFBQyxZQUFBLE1BQUFDLFFBQUEsU0FBQXBCLENBQUEsQ0FBQUQsQ0FBQSxXQUFBa0IsTUFBQSxtQkFBQWpCLENBQUEsSUFBQWlCLE1BQUEsWUFBQUEsT0FBQWpCLENBQUEsRUFBQUQsQ0FBQSxFQUFBRSxDQUFBLFdBQUFELENBQUEsQ0FBQUQsQ0FBQSxJQUFBRSxDQUFBLGdCQUFBb0IsS0FB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QTt3QkFDQTtzQkFDQTtvQkFBQTtvQkFBQTtzQkFBQSxPQUFBaEIsUUFBQSxDQUFBNUMsSUFBQTtrQkFBQTtnQkFBQSxHQUFBd0MsT0FBQTtjQUFBLENBQ0EsSUFBQXBCLEtBQUEsT0FBQUQsU0FBQTtZQUFBO1VBQUE7VUFBQTtZQUFBLE9BQUFlLFNBQUEsQ0FBQWxDLElBQUE7UUFBQTtNQUFBLEdBQUErQixRQUFBO0lBQUE7RUFDQTtBQUNBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vdmlkZW8vY3JlYXRlLnZ1ZT9lNWUyIl0sInNvdXJjZXNDb250ZW50IjpbIjx0ZW1wbGF0ZT5cbiAgPGRpdiB2LWlmPVwic3VydmV5XCI+XG4gICAgPFN1cnZleSA6c3VydmV5PVwic3VydmV5XCI+PC9TdXJ2ZXk+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cbiAgICBcbiAgICA8c2NyaXB0PlxuaW1wb3J0ICogYXMgU3VydmV5VnVlIGZyb20gXCJzdXJ2ZXktdnVlXCI7XG5pbXBvcnQgeyBqc29uIH0gZnJvbSBcIi4vZm9ybVwiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXBvbmVudHM6IHsgU3VydmV5OiBTdXJ2ZXlWdWUuU3VydmV5IH0sXG4gIGRhdGE6ICgpID0+ICh7XG4gICAgc3VydmV5OiBudWxsLFxuICB9KSxcblxuICBhc3luYyBtb3VudGVkKCkge1xuICAgIHRoaXMuc3VydmV5ID0gbmV3IFN1cnZleVZ1ZS5Nb2RlbChqc29uKTtcblxuICAgIHRoaXMuc3VydmV5Lm9uQ29tcGxldGluZy5hZGQoYXN5bmMgZnVuY3Rpb24gKHJlc3VsdCwgb3B0aW9ucykge1xuICAgICAgb3B0aW9ucy5hbGxvd0NvbXBsZXRlID0gZmFsc2U7XG4gICAgICBhd2FpdCBheGlvcy5wb3N0KFwiL2FwaS92aWRlby9zdG9yZVwiLCByZXN1bHQuZGF0YSkudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhyZXNwb25zZS5kYXRhKTtcbiAgICAgICAgICBTd2FsLmZpcmUoe1xuICAgICAgICAgICAgdGl0bGU6IFwiQWN0dWFsaXphZG9cIixcbiAgICAgICAgICAgIHRleHQ6IFwiRWwgdmlkZW8gaGEgc2lkbyBjcmVhZG8gbyBhY3R1YWxpemFkbyBjb24gw6l4aXRvXCIsXG4gICAgICAgICAgICBpY29uOiBcInN1Y2Nlc3NcIixcbiAgICAgICAgICAgIC8vICB0aW1lcjogMjAwMCxcbiAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gXCIvcGFuZWwtYWRtaW5pc3RyYWNpb24vYWxpYW56YXNcIjtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBTd2FsLmZpcmUoe1xuICAgICAgICAgICAgdGl0bGU6IFwiRXJyb3IhXCIsXG4gICAgICAgICAgICB0ZXh0OiBcIk5vIHNlIHB1ZG8gY3JlYXIgZWwgdmlkZW8uIFBvciBmYXZvciBpbnRlbnRlIG3DoXMgdGFyZGUuXCIsXG4gICAgICAgICAgICBpY29uOiBcImVycm9yXCIsXG4gICAgICAgICAgICAvLyAgICB0aW1lcjogMzAwMCxcbiAgICAgICAgICB9KS50aGVuKChfKSA9PiB7XG4gICAgICAgICAgICBsb2NhdGlvbi5yZWxvYWQoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0sXG59O1xuPC9zY3JpcHQ+XG4gICAgIl0sIm5hbWVzIjpbIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJlIiwidCIsInIiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJuIiwiaGFzT3duUHJvcGVydHkiLCJvIiwiZGVmaW5lUHJvcGVydHkiLCJ2YWx1ZSIsImkiLCJTeW1ib2wiLCJhIiwiaXRlcmF0b3IiLCJjIiwiYXN5bmNJdGVyYXRvciIsInUiLCJ0b1N0cmluZ1RhZyIsImRlZmluZSIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsIndyYXAiLCJHZW5lcmF0b3IiLCJjcmVhdGUiLCJDb250ZXh0IiwibWFrZUludm9rZU1ldGhvZCIsInRyeUNhdGNoIiwidHlwZSIsImFyZyIsImNhbGwiLCJoIiwibCIsImYiLCJzIiwieSIsIkdlbmVyYXRvckZ1bmN0aW9uIiwiR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUiLCJwIiwiZCIsImdldFByb3RvdHlwZU9mIiwidiIsInZhbHVlcyIsImciLCJkZWZpbmVJdGVyYXRvck1ldGhvZHMiLCJmb3JFYWNoIiwiX2ludm9rZSIsIkFzeW5jSXRlcmF0b3IiLCJpbnZva2UiLCJfdHlwZW9mIiwicmVzb2x2ZSIsIl9fYXdhaXQiLCJ0aGVuIiwiY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmciLCJFcnJvciIsImRvbmUiLCJtZXRob2QiLCJkZWxlZ2F0ZSIsIm1heWJlSW52b2tlRGVsZWdhdGUiLCJzZW50IiwiX3NlbnQiLCJkaXNwYXRjaEV4Y2VwdGlvbiIsImFicnVwdCIsIlR5cGVFcnJvciIsInJlc3VsdE5hbWUiLCJuZXh0IiwibmV4dExvYyIsInB1c2hUcnlFbnRyeSIsInRyeUxvYyIsImNhdGNoTG9jIiwiZmluYWxseUxvYyIsImFmdGVyTG9jIiwidHJ5RW50cmllcyIsInB1c2giLCJyZXNldFRyeUVudHJ5IiwiY29tcGxldGlvbiIsInJlc2V0IiwiaXNOYU4iLCJsZW5ndGgiLCJkaXNwbGF5TmFtZSIsImlzR2VuZXJhdG9yRnVuY3Rpb24iLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJtYXJrIiwic2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJhd3JhcCIsImFzeW5jIiwiUHJvbWlzZSIsImtleXMiLCJyZXZlcnNlIiwicG9wIiwicHJldiIsImNoYXJBdCIsInNsaWNlIiwic3RvcCIsInJ2YWwiLCJoYW5kbGUiLCJjb21wbGV0ZSIsImZpbmlzaCIsIl9jYXRjaCIsImRlbGVnYXRlWWllbGQiLCJhc3luY0dlbmVyYXRvclN0ZXAiLCJnZW4iLCJyZWplY3QiLCJfbmV4dCIsIl90aHJvdyIsImtleSIsImluZm8iLCJlcnJvciIsIl9hc3luY1RvR2VuZXJhdG9yIiwiZm4iLCJzZWxmIiwiYXJncyIsImFyZ3VtZW50cyIsImFwcGx5IiwiZXJyIiwidW5kZWZpbmVkIiwiU3VydmV5VnVlIiwianNvbiIsImNvbXBvbmVudHMiLCJTdXJ2ZXkiLCJkYXRhIiwic3VydmV5IiwibW91bnRlZCIsIl90aGlzIiwiX2NhbGxlZTIiLCJfcmVmIiwiX2NhbGxlZTIkIiwiX2NvbnRleHQyIiwiTW9kZWwiLCJvbkNvbXBsZXRpbmciLCJhZGQiLCJfeCIsIl94MiIsIl9jYWxsZWUiLCJyZXN1bHQiLCJvcHRpb25zIiwiX2NhbGxlZSQiLCJfY29udGV4dCIsImFsbG93Q29tcGxldGUiLCJheGlvcyIsInBvc3QiLCJyZXNwb25zZSIsImNvbnNvbGUiLCJsb2ciLCJTd2FsIiwiZmlyZSIsInRpdGxlIiwidGV4dCIsImljb24iLCJ3aW5kb3ciLCJsb2NhdGlvbiIsImhyZWYiLCJfIiwicmVsb2FkIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/video/create.vue?vue&type=script&lang=js&\n");

/***/ }),

/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/video/edit.vue?vue&type=script&lang=js&":
/*!***********************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/video/edit.vue?vue&type=script&lang=js& ***!
  \***********************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var survey_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! survey-vue */ \"./node_modules/survey-vue/survey-vue.js\");\n/* harmony import */ var survey_vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(survey_vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _form__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./form */ \"./resources/js/components/admin/video/form.js\");\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = \"function\" == typeof Symbol ? Symbol : {}, a = i.iterator || \"@@iterator\", c = i.asyncIterator || \"@@asyncIterator\", u = i.toStringTag || \"@@toStringTag\"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, \"\"); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, \"_invoke\", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: \"normal\", arg: t.call(e, r) }; } catch (t) { return { type: \"throw\", arg: t }; } } e.wrap = wrap; var h = \"suspendedStart\", l = \"suspendedYield\", f = \"executing\", s = \"completed\", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { [\"next\", \"throw\", \"return\"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if (\"throw\" !== c.type) { var u = c.arg, h = u.value; return h && \"object\" == _typeof(h) && n.call(h, \"__await\") ? e.resolve(h.__await).then(function (t) { invoke(\"next\", t, i, a); }, function (t) { invoke(\"throw\", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke(\"throw\", t, i, a); }); } a(c.arg); } var r; o(this, \"_invoke\", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error(\"Generator is already running\"); if (o === s) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = f; var p = tryCatch(e, r, n); if (\"normal\" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } \"throw\" === p.type && (o = s, n.method = \"throw\", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, \"throw\" === n && e.iterator[\"return\"] && (r.method = \"return\", r.arg = t, maybeInvokeDelegate(e, r), \"throw\" === r.method) || \"return\" !== n && (r.method = \"throw\", r.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), y; var i = tryCatch(o, e.iterator, r.arg); if (\"throw\" === i.type) return r.method = \"throw\", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, \"return\" !== r.method && (r.method = \"next\", r.arg = t), r.delegate = null, y) : a : (r.method = \"throw\", r.arg = new TypeError(\"iterator result is not an object\"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = \"normal\", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: \"root\" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || \"\" === e) { var r = e[a]; if (r) return r.call(e); if (\"function\" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, \"constructor\", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, \"constructor\", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), e.isGeneratorFunction = function (t) { var e = \"function\" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || \"GeneratorFunction\" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, \"GeneratorFunction\")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, \"Generator\"), define(g, a, function () { return this; }), define(g, \"toString\", function () { return \"[object Generator]\"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) \"t\" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = \"throw\", a.arg = e, r.next = n, o && (r.method = \"next\", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if (\"root\" === i.tryLoc) return handle(\"end\"); if (i.tryLoc <= this.prev) { var c = n.call(i, \"catchLoc\"), u = n.call(i, \"finallyLoc\"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error(\"try statement without catch or finally\"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, \"finallyLoc\") && this.prev < o.finallyLoc) { var i = o; break; } } i && (\"break\" === t || \"continue\" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = \"next\", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, \"catch\": function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if (\"throw\" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, \"next\" === this.method && (this.arg = t), y; } }, e; }\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nvar Swal = __webpack_require__(/*! sweetalert2 */ \"./node_modules/sweetalert2/dist/sweetalert2.all.js\");\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n  components: {\n    Survey: survey_vue__WEBPACK_IMPORTED_MODULE_0__.Survey\n  },\n  data: function data() {\n    return {\n      survey: null,\n      data: null\n    };\n  },\n  mounted: function mounted() {\n    var _this = this;\n    return _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {\n      var _ref;\n      var self;\n      return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n        while (1) switch (_context2.prev = _context2.next) {\n          case 0:\n            self = _this;\n            _context2.next = 3;\n            return axios.get(\"/api/video/edit/\" + _this.$route.params.id, {\n              headers: {\n                Authorization: AT,\n                Accept: \"application/json\"\n              }\n            }).then(function (response) {\n              _this.data = response.data;\n              console.log(_this.data);\n            });\n          case 3:\n            _this.survey = new survey_vue__WEBPACK_IMPORTED_MODULE_0__.Model(_form__WEBPACK_IMPORTED_MODULE_1__.json);\n            _this.survey.onCompleting.add(function (_x, _x2) {\n              return (_ref = _ref || _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(result, options) {\n                return _regeneratorRuntime().wrap(function _callee$(_context) {\n                  while (1) switch (_context.prev = _context.next) {\n                    case 0:\n                      options.allowComplete = false;\n                      _context.next = 3;\n                      return axios.post(\"/api/video/update/\" + self.$route.params.id, result.data).then(function (response) {\n                        console.log(response.data);\n                        if (response.data) {\n                          Swal.fire({\n                            title: \"Actualizado\",\n                            text: \"El video ha sido actualizado con éxito\",\n                            icon: \"success\"\n                            //  timer: 2000,\n                          }).then(function () {\n                            window.location.href = \"/panel-administracion/video\";\n                          });\n                        } else {\n                          Swal.fire({\n                            title: \"Error!\",\n                            text: \"No se pudo actualizar el video. Por favor intente más tarde.\",\n                            icon: \"error\"\n                            //    timer: 3000,\n                          }).then(function (_) {\n                            location.reload();\n                          });\n                        }\n                      });\n                    case 3:\n                    case \"end\":\n                      return _context.stop();\n                  }\n                }, _callee);\n              }))).apply(this, arguments);\n            });\n            _this.survey.data = self.data;\n          case 6:\n          case \"end\":\n            return _context2.stop();\n        }\n      }, _callee2);\n    }))();\n  }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vdmlkZW8vZWRpdC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmIiwibWFwcGluZ3MiOiI7Ozs7Ozs7OytDQU9BLHFKQUFBQSxtQkFBQSxZQUFBQSxvQkFBQSxXQUFBQyxDQUFBLFNBQUFDLENBQUEsRUFBQUQsQ0FBQSxPQUFBRSxDQUFBLEdBQUFDLE1BQUEsQ0FBQUMsU0FBQSxFQUFBQyxDQUFBLEdBQUFILENBQUEsQ0FBQUksY0FBQSxFQUFBQyxDQUFBLEdBQUFKLE1BQUEsQ0FBQUssY0FBQSxjQUFBUCxDQUFBLEVBQUFELENBQUEsRUFBQUUsQ0FBQSxJQUFBRCxDQUFBLENBQUFELENBQUEsSUFBQUUsQ0FBQSxDQUFBTyxLQUFBLEtBQUFDLENBQUEsd0JBQUFDLE1BQUEsR0FBQUEsTUFBQSxPQUFBQyxDQUFBLEdBQUFGLENBQUEsQ0FBQUcsUUFBQSxrQkFBQUMsQ0FBQSxHQUFBSixDQUFBLENBQUFLLGFBQUEsdUJBQUFDLENBQUEsR0FBQU4sQ0FBQSxDQUFBTyxXQUFBLDhCQUFBQyxPQUFBakIsQ0FBQSxFQUFBRCxDQUFBLEVBQUFFLENBQUEsV0FBQUMsTUFBQSxDQUFBSyxjQUFBLENBQUFQLENBQUEsRUFBQUQsQ0FBQSxJQUFBUyxLQUFBLEVBQUFQLENBQUEsRUFBQWlCLFVBQUEsTUFBQUMsWUFBQSxNQUFBQyxRQUFBLFNBQUFwQixDQUFBLENBQUFELENBQUEsV0FBQWtCLE1BQUEsbUJBQUFqQixDQUFBLElBQUFpQixNQUFBLFlBQUFBLE9BQUFqQixDQUFBLEVBQUFELENBQUEsRUFBQUUsQ0FBQSxXQUFBRCxDQUFBLENBQUFELENBQUEsSUFBQUUsQ0FBQSxnQkFBQW9CLEtBQUFy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QixNQUFBLENBQUFDLE1BQUEsQ0FBQUMsRUFBQSxFQUFBYyxNQUFBLENBQUExQixJQUFBLEVBQ0F4RSxJQUFBLFdBQUF5RixRQUFBO3dCQUNBQyxPQUFBLENBQUFDLEdBQUEsQ0FBQUYsUUFBQSxDQUFBakIsSUFBQTt3QkFDQSxJQUFBaUIsUUFBQSxDQUFBakIsSUFBQTswQkFDQUwsSUFBQSxDQUFBcUMsSUFBQTs0QkFDQUMsS0FBQTs0QkFDQUMsSUFBQTs0QkFDQUMsSUFBQTs0QkFDQTswQkFDQSxHQUFBM0csSUFBQTs0QkFDQTRHLE1BQUEsQ0FBQUMsUUFBQSxDQUFBQyxJQUFBOzBCQUNBO3dCQUNBOzBCQUNBM0MsSUFBQSxDQUFBcUMsSUFBQTs0QkFDQUMsS0FBQTs0QkFDQUMsSUFBQTs0QkFDQUMsSUFBQTs0QkFDQTswQkFDQSxHQUFBM0csSUFBQSxXQUFBK0csQ0FBQTs0QkFDQUYsUUFBQSxDQUFBRyxNQUFBOzBCQUNBO3dCQUNBO3NCQUNBO29CQUFBO29CQUFBO3NCQUFBLE9BQUFYLFFBQUEsQ0FBQTFELElBQUE7a0JBQUE7Z0JBQUEsR0FBQXNELE9BQUE7Y0FBQSxDQUNBLElBQUFsQyxLQUFBLE9BQUFELFNBQUE7WUFBQTtZQUNBYSxLQUFBLENBQUFGLE1BQUEsQ0FBQUQsSUFBQSxHQUFBWixJQUFBLENBQUFZLElBQUE7VUFBQTtVQUFBO1lBQUEsT0FBQU8sU0FBQSxDQUFBcEMsSUFBQTtRQUFBO01BQUEsR0FBQWlDLFFBQUE7SUFBQTtFQUNBO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi92aWRlby9lZGl0LnZ1ZT85MTg5Il0sInNvdXJjZXNDb250ZW50IjpbIjx0ZW1wbGF0ZT5cbiAgPGRpdiB2LWlmPVwic3VydmV5XCI+XG4gICAgPFN1cnZleSA6c3VydmV5PVwic3VydmV5XCI+PC9TdXJ2ZXk+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cbiAgICBcbiAgICA8c2NyaXB0PlxuaW1wb3J0ICogYXMgU3VydmV5VnVlIGZyb20gXCJzdXJ2ZXktdnVlXCI7XG5jb25zdCBTd2FsID0gcmVxdWlyZShcInN3ZWV0YWxlcnQyXCIpO1xuaW1wb3J0IHsganNvbiB9IGZyb20gXCIuL2Zvcm1cIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBjb21wb25lbnRzOiB7IFN1cnZleTogU3VydmV5VnVlLlN1cnZleSB9LFxuICBkYXRhOiAoKSA9PiAoe1xuICAgIHN1cnZleTogbnVsbCxcbiAgICBkYXRhOiBudWxsXG4gIH0pLFxuXG4gIGFzeW5jIG1vdW50ZWQoKSB7XG4gICAgbGV0IHNlbGYgPSB0aGlzO1xuICAgIGF3YWl0IGF4aW9zXG4gICAgICAuZ2V0KFwiL2FwaS92aWRlby9lZGl0L1wiICsgdGhpcy4kcm91dGUucGFyYW1zLmlkLCB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBBdXRob3JpemF0aW9uOiBBVCxcbiAgICAgICAgICBBY2NlcHQ6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICB0aGlzLmRhdGEgPSByZXNwb25zZS5kYXRhO1xuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLmRhdGEpO1xuICAgICAgfSk7XG4gICAgdGhpcy5zdXJ2ZXkgPSBuZXcgU3VydmV5VnVlLk1vZGVsKGpzb24pO1xuXG4gICAgdGhpcy5zdXJ2ZXkub25Db21wbGV0aW5nLmFkZChhc3luYyBmdW5jdGlvbiAocmVzdWx0LCBvcHRpb25zKSB7XG4gICAgICBvcHRpb25zLmFsbG93Q29tcGxldGUgPSBmYWxzZTtcbiAgICAgIGF3YWl0IGF4aW9zXG4gICAgICAgIC5wb3N0KFwiL2FwaS92aWRlby91cGRhdGUvXCIgKyBzZWxmLiRyb3V0ZS5wYXJhbXMuaWQsIHJlc3VsdC5kYXRhKVxuICAgICAgICAudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhyZXNwb25zZS5kYXRhKTtcbiAgICAgICAgICBpZiAocmVzcG9uc2UuZGF0YSkge1xuICAgICAgICAgICAgU3dhbC5maXJlKHtcbiAgICAgICAgICAgICAgdGl0bGU6IFwiQWN0dWFsaXphZG9cIixcbiAgICAgICAgICAgICAgdGV4dDogXCJFbCB2aWRlbyBoYSBzaWRvIGFjdHVhbGl6YWRvIGNvbiDDqXhpdG9cIixcbiAgICAgICAgICAgICAgaWNvbjogXCJzdWNjZXNzXCIsXG4gICAgICAgICAgICAgIC8vICB0aW1lcjogMjAwMCxcbiAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IFwiL3BhbmVsLWFkbWluaXN0cmFjaW9uL3ZpZGVvXCI7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgU3dhbC5maXJlKHtcbiAgICAgICAgICAgICAgdGl0bGU6IFwiRXJyb3IhXCIsXG4gICAgICAgICAgICAgIHRleHQ6IFwiTm8gc2UgcHVkbyBhY3R1YWxpemFyIGVsIHZpZGVvLiBQb3IgZmF2b3IgaW50ZW50ZSBtw6FzIHRhcmRlLlwiLFxuICAgICAgICAgICAgICBpY29uOiBcImVycm9yXCIsXG4gICAgICAgICAgICAgIC8vICAgIHRpbWVyOiAzMDAwLFxuICAgICAgICAgICAgfSkudGhlbigoXykgPT4ge1xuICAgICAgICAgICAgICBsb2NhdGlvbi5yZWxvYWQoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgdGhpcy5zdXJ2ZXkuZGF0YSA9IHNlbGYuZGF0YTtcbiAgfSxcbn07XG48L3NjcmlwdD4iXSwibmFtZXMiOlsiX3JlZ2VuZXJhdG9yUnVudGltZSIsImUiLCJ0IiwiciIsIk9iamVjdCIsInByb3RvdHlwZSIsIm4iLCJoYXNPd25Qcm9wZXJ0eSIsIm8iLCJkZWZpbmVQcm9wZXJ0eSIsInZhbHVlIiwiaSIsIlN5bWJvbCIsImEiLCJpdGVyYXRvciIsImMiLCJhc3luY0l0ZXJhdG9yIiwidSIsInRvU3RyaW5nVGFnIiwiZGVmaW5lIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwid3JhcCIsIkdlbmVyYXRvciIsImNyZWF0ZSIsIkNvbnRleHQiLCJtYWtlSW52b2tlTWV0aG9kIiwidHJ5Q2F0Y2giLCJ0eXBlIiwiYXJnIiwiY2FsbCIsImgiLCJsIiwiZiIsInMiLCJ5IiwiR2VuZXJhdG9yRnVuY3Rpb24iLCJHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSIsInAiLCJkIiwiZ2V0UHJvdG90eXBlT2YiLCJ2IiwidmFsdWVzIiwiZyIsImRlZmluZUl0ZXJhdG9yTWV0aG9kcyIsImZvckVhY2giLCJfaW52b2tlIiwiQXN5bmNJdGVyYXRvciIsImludm9rZSIsIl90eXBlb2YiLCJyZXNvbHZlIiwiX19hd2FpdCIsInRoZW4iLCJjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZyIsIkVycm9yIiwiZG9uZSIsIm1ldGhvZCIsImRlbGVnYXRlIiwibWF5YmVJbnZva2VEZWxlZ2F0ZSIsInNlbnQiLCJfc2VudCIsImRpc3BhdGNoRXhjZXB0aW9uIiwiYWJydXB0IiwiVHlwZUVycm9yIiwicmVzdWx0TmFtZSIsIm5leHQiLCJuZXh0TG9jIiwicHVzaFRyeUVudHJ5IiwidHJ5TG9jIiwiY2F0Y2hMb2MiLCJmaW5hbGx5TG9jIiwiYWZ0ZXJMb2MiLCJ0cnlFbnRyaWVzIiwicHVzaCIsInJlc2V0VHJ5RW50cnkiLCJjb21wbGV0aW9uIiwicmVzZXQiLCJpc05hTiIsImxlbmd0aCIsImRpc3BsYXlOYW1lIiwiaXNHZW5lcmF0b3JGdW5jdGlvbiIsImNvbnN0cnVjdG9yIiwibmFtZSIsIm1hcmsiLCJzZXRQcm90b3R5cGVPZiIsIl9fcHJvdG9fXyIsImF3cmFwIiwiYXN5bmMiLCJQcm9taXNlIiwia2V5cyIsInJldmVyc2UiLCJwb3AiLCJwcmV2IiwiY2hhckF0Iiwic2xpY2UiLCJzdG9wIiwicnZhbCIsImhhbmRsZSIsImNvbXBsZXRlIiwiZmluaXNoIiwiX2NhdGNoIiwiZGVsZWdhdGVZaWVsZCIsImFzeW5jR2VuZXJhdG9yU3RlcCIsImdlbiIsInJlamVjdCIsIl9uZXh0IiwiX3Rocm93Iiwia2V5IiwiaW5mbyIsImVycm9yIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJmbiIsInNlbGYiLCJhcmdzIiwiYXJndW1lbnRzIiwiYXBwbHkiLCJlcnIiLCJ1bmRlZmluZWQiLCJTdXJ2ZXlWdWUiLCJTd2FsIiwicmVxdWlyZSIsImpzb24iLCJjb21wb25lbnRzIiwiU3VydmV5IiwiZGF0YSIsInN1cnZleSIsIm1vdW50ZWQiLCJfdGhpcyIsIl9jYWxsZWUyIiwiX3JlZiIsIl9jYWxsZWUyJCIsIl9jb250ZXh0MiIsImF4aW9zIiwiZ2V0IiwiJHJvdXRlIiwicGFyYW1zIiwiaWQiLCJoZWFkZXJzIiwiQXV0aG9yaXphdGlvbiIsIkFUIiwiQWNjZXB0IiwicmVzcG9uc2UiLCJjb25zb2xlIiwibG9nIiwiTW9kZWwiLCJvbkNvbXBsZXRpbmciLCJhZGQiLCJfeCIsIl94MiIsIl9jYWxsZWUiLCJyZXN1bHQiLCJvcHRpb25zIiwiX2NhbGxlZSQiLCJfY29udGV4dCIsImFsbG93Q29tcGxldGUiLCJwb3N0IiwiZmlyZSIsInRpdGxlIiwidGV4dCIsImljb24iLCJ3aW5kb3ciLCJsb2NhdGlvbiIsImhyZWYiLCJfIiwicmVsb2FkIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/video/edit.vue?vue&type=script&lang=js&\n");

/***/ }),

/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/video/index.vue?vue&type=script&lang=js&":
/*!************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/video/index.vue?vue&type=script&lang=js& ***!
  \************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nvar Swal = __webpack_require__(/*! sweetalert2 */ \"./node_modules/sweetalert2/dist/sweetalert2.all.js\");\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n  data: function data() {\n    return {\n      data: null,\n      search: \"\",\n      headers: [{\n        text: \"Pagina\",\n        value: \"name\"\n      }, {\n        text: \"Enlace Video\",\n        value: \"link\"\n      }, {\n        text: \"Acciones\",\n        value: \"actions\",\n        sortable: false\n      }]\n    };\n  },\n  mounted: function mounted() {\n    this.loadData();\n  },\n  methods: {\n    loadData: function loadData() {\n      var _this = this;\n      axios.get(\"/api/video/index\").then(function (response) {\n        _this.data = response.data;\n      });\n    },\n    edit: function edit(id) {\n      window.location.href = \"/panel-administracion/video/\" + id + \"/editar\";\n    },\n    trash: function trash(id, name) {\n      var _this2 = this;\n      Swal.fire({\n        title: \"Confirmación\",\n        html: \"<p margin-bottom: 10px;\\\">\\n                \\xBFEst\\xE1s seguro de que deseas eliminar el video de la pagina <b>\\\"\".concat(name, \"\\\"</b>?</p>\\n                    <p style=\\\"font-size: 0.7em;\\\">\\n                        Si lo eliminas, no podr\\xE1s recuperarlo.\\n                    </p>\"),\n        icon: \"warning\",\n        showCancelButton: true,\n        confirmButtonColor: \"#3085d6\",\n        cancelButtonColor: \"#d33\",\n        confirmButtonText: \"Sí, eliminar\",\n        cancelButtonText: \"Cancelar\"\n      }).then(function (result) {\n        if (result.isConfirmed) {\n          axios[\"delete\"](\"/api/video/delete/\" + id, {\n            headers: {\n              Authorization: AT,\n              Accept: \"application/json\"\n            }\n          }).then(function (response) {\n            Swal.fire({\n              title: \"Eliminado\",\n              text: \"Se ha eliminado el video con éxito.\",\n              icon: \"success\",\n              timer: 2000\n            }).then(function (_) {});\n            _this2.loadData();\n          });\n        }\n      });\n    }\n  }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vdmlkZW8vaW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJiIsIm1hcHBpbmdzIjoiOzs7O0FBdUNBLElBQUFBLElBQUEsR0FBQUMsbUJBQUE7QUFDQSxpRUFBZTtFQUNmQyxJQUFBLFdBQUFBLEtBQUE7SUFDQTtNQUNBQSxJQUFBO01BQ0FDLE1BQUE7TUFDQUMsT0FBQSxHQUNBO1FBQUFDLElBQUE7UUFBQUMsS0FBQTtNQUFBLEdBQ0E7UUFBQUQsSUFBQTtRQUFBQyxLQUFBO01BQUEsR0FDQTtRQUFBRCxJQUFBO1FBQUFDLEtBQUE7UUFBQUMsUUFBQTtNQUFBO0lBRUE7RUFDQTtFQUNBQyxPQUFBLFdBQUFBLFFBQUE7SUFDQSxLQUFBQyxRQUFBO0VBQ0E7RUFDQUMsT0FBQTtJQUNBRCxRQUFBLFdBQUFBLFNBQUE7TUFBQSxJQUFBRSxLQUFBO01BQ0FDLEtBQUEsQ0FBQUMsR0FBQSxxQkFBQUMsSUFBQSxXQUFBQyxRQUFBO1FBQ0FKLEtBQUEsQ0FBQVQsSUFBQSxHQUFBYSxRQUFBLENBQUFiLElBQUE7TUFDQTtJQUNBO0lBQ0FjLElBQUEsV0FBQUEsS0FBQUMsRUFBQTtNQUNBQyxNQUFBLENBQUFDLFFBQUEsQ0FBQUMsSUFBQSxvQ0FBQUgsRUFBQTtJQUNBO0lBQ0FJLEtBQUEsV0FBQUEsTUFBQUosRUFBQSxFQUFBSyxJQUFBO01BQUEsSUFBQUMsTUFBQTtNQUNBdkIsSUFBQSxDQUFBd0IsSUFBQTtRQUNBQyxLQUFBO1FBQ0FDLElBQUEsdUhBQUFDLE1BQUEsQ0FDQUwsSUFBQSxrS0FHQTtRQUNBTSxJQUFBO1FBQ0FDLGdCQUFBO1FBQ0FDLGtCQUFBO1FBQ0FDLGlCQUFBO1FBQ0FDLGlCQUFBO1FBQ0FDLGdCQUFBO01BQ0EsR0FBQW5CLElBQUEsV0FBQW9CLE1BQUE7UUFDQSxJQUFBQSxNQUFBLENBQUFDLFdBQUE7VUFDQXZCLEtBQUEsVUFDQSx3QkFBQUssRUFBQTtZQUNBYixPQUFBO2NBQ0FnQyxhQUFBLEVBQUFDLEVBQUE7Y0FDQUMsTUFBQTtZQUNBO1VBQ0EsR0FDQXhCLElBQUEsV0FBQUMsUUFBQTtZQUNBZixJQUFBLENBQUF3QixJQUFBO2NBQ0FDLEtBQUE7Y0FDQXBCLElBQUE7Y0FDQXVCLElBQUE7Y0FDQVcsS0FBQTtZQUNBLEdBQUF6QixJQUFBLFdBQUEwQixDQUFBO1lBQ0FqQixNQUFBLENBQUFkLFFBQUE7VUFDQTtRQUNBO01BQ0E7SUFDQTtFQUNBO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi92aWRlby9pbmRleC52dWU/ZGFhNSJdLCJzb3VyY2VzQ29udGVudCI6WyI8dGVtcGxhdGU+XG4gIDx2LWFwcD5cbiAgICA8di1jYXJkIHYtaWY9XCJkYXRhXCI+XG4gICAgICA8di1jYXJkLXRpdGxlPlxuICAgICAgICBBZG1pbmlzdHJhY2nDs24gZGUgVmlkZW9zXG4gICAgICAgIDx2LXNwYWNlcj48L3Ytc3BhY2VyPlxuICAgICAgICA8di10ZXh0LWZpZWxkXG4gICAgICAgICAgdi1tb2RlbD1cInNlYXJjaFwiXG4gICAgICAgICAgYXBwZW5kLWljb249XCJtZGktbWFnbmlmeVwiXG4gICAgICAgICAgbGFiZWw9XCJCdXNjYXJcIlxuICAgICAgICAgIHNpbmdsZS1saW5lXG4gICAgICAgICAgaGlkZS1kZXRhaWxzXG4gICAgICAgID48L3YtdGV4dC1maWVsZD5cbiAgICAgIDwvdi1jYXJkLXRpdGxlPlxuICAgICAgPHYtZGF0YS10YWJsZVxuICAgICAgICA6aGVhZGVycz1cImhlYWRlcnNcIlxuICAgICAgICA6aXRlbXM9XCJkYXRhXCJcbiAgICAgICAgY2xhc3M9XCJlbGV2YXRpb24tMVwiXG4gICAgICAgIDpzZWFyY2g9XCJzZWFyY2hcIlxuICAgICAgPlxuICAgICAgICA8dGVtcGxhdGUgdi1zbG90Oml0ZW0ubGluaz1cInsgaXRlbSB9XCI+XG4gICAgICAgICAgPHYtYnRuIGljb24gOmhyZWY9XCJpdGVtLnVybFwiIGNvbG9yPVwicHJpbWFyeVwiIHRhcmdldD1cIl9ibGFua1wiPlxuICAgICAgICAgICAgPHYtaWNvbj5tZGktb3Blbi1pbi1uZXc8L3YtaWNvbj5cbiAgICAgICAgICA8L3YtYnRuPlxuICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICA8dGVtcGxhdGUgdi1zbG90Oml0ZW0uYWN0aW9ucz1cInsgaXRlbSB9XCI+XG4gICAgICAgICAgPHYtYnRuIGNvbG9yPVwicmVkXCIgZmFiIHgtc21hbGwgZGFyayBAY2xpY2s9XCJlZGl0KGl0ZW0uaWQpXCI+XG4gICAgICAgICAgICA8di1pY29uPiBtZGktcGVuY2lsIDwvdi1pY29uPlxuICAgICAgICAgIDwvdi1idG4+XG4gICAgICAgICAgPHYtYnRuIGNvbG9yPVwid2FybmluZ1wiIGZhYiB4LXNtYWxsIGRhcmsgQGNsaWNrPVwidHJhc2goaXRlbS5pZCwgaXRlbS5uYW1lKVwiPlxuICAgICAgICAgICAgPHYtaWNvbj4gbWRpLWRlbGV0ZSA8L3YtaWNvbj5cbiAgICAgICAgICA8L3YtYnRuPlxuICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgPC92LWRhdGEtdGFibGU+XG4gICAgPC92LWNhcmQ+XG4gIDwvdi1hcHA+XG48L3RlbXBsYXRlPlxuICBcbiAgPHNjcmlwdD5cbiAgY29uc3QgU3dhbCA9IHJlcXVpcmUoXCJzd2VldGFsZXJ0MlwiKTtcbmV4cG9ydCBkZWZhdWx0IHtcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZGF0YTogbnVsbCxcbiAgICAgIHNlYXJjaDogXCJcIixcbiAgICAgIGhlYWRlcnM6IFtcbiAgICAgICAgeyB0ZXh0OiBcIlBhZ2luYVwiLCB2YWx1ZTogXCJuYW1lXCIgfSxcbiAgICAgICAgeyB0ZXh0OiBcIkVubGFjZSBWaWRlb1wiLCB2YWx1ZTogXCJsaW5rXCIgfSxcbiAgICAgICAgeyB0ZXh0OiBcIkFjY2lvbmVzXCIsIHZhbHVlOiBcImFjdGlvbnNcIiwgc29ydGFibGU6IGZhbHNlIH0sXG4gICAgICBdLFxuICAgIH07XG4gIH0sXG4gIG1vdW50ZWQoKSB7XG4gICAgdGhpcy5sb2FkRGF0YSgpO1xuICB9LFxuICBtZXRob2RzOiB7XG4gICAgbG9hZERhdGEoKSB7XG4gICAgICBheGlvcy5nZXQoXCIvYXBpL3ZpZGVvL2luZGV4XCIpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIHRoaXMuZGF0YSA9IHJlc3BvbnNlLmRhdGE7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGVkaXQoaWQpIHtcbiAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gXCIvcGFuZWwtYWRtaW5pc3RyYWNpb24vdmlkZW8vXCIgKyBpZCArIFwiL2VkaXRhclwiO1xuICAgIH0sXG4gICAgdHJhc2goaWQsIG5hbWUpIHtcbiAgICAgIFN3YWwuZmlyZSh7XG4gICAgICAgIHRpdGxlOiBcIkNvbmZpcm1hY2nDs25cIixcbiAgICAgICAgaHRtbDogYDxwIG1hcmdpbi1ib3R0b206IDEwcHg7XCI+XG4gICAgICAgICAgICAgICAgwr9Fc3TDoXMgc2VndXJvIGRlIHF1ZSBkZXNlYXMgZWxpbWluYXIgZWwgdmlkZW8gZGUgbGEgcGFnaW5hIDxiPlwiJHtuYW1lfVwiPC9iPj88L3A+XG4gICAgICAgICAgICAgICAgICAgIDxwIHN0eWxlPVwiZm9udC1zaXplOiAwLjdlbTtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIFNpIGxvIGVsaW1pbmFzLCBubyBwb2Ryw6FzIHJlY3VwZXJhcmxvLlxuICAgICAgICAgICAgICAgICAgICA8L3A+YCxcbiAgICAgICAgaWNvbjogXCJ3YXJuaW5nXCIsXG4gICAgICAgIHNob3dDYW5jZWxCdXR0b246IHRydWUsXG4gICAgICAgIGNvbmZpcm1CdXR0b25Db2xvcjogXCIjMzA4NWQ2XCIsXG4gICAgICAgIGNhbmNlbEJ1dHRvbkNvbG9yOiBcIiNkMzNcIixcbiAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6IFwiU8OtLCBlbGltaW5hclwiLFxuICAgICAgICBjYW5jZWxCdXR0b25UZXh0OiBcIkNhbmNlbGFyXCIsXG4gICAgICB9KS50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdC5pc0NvbmZpcm1lZCkge1xuICAgICAgICAgIGF4aW9zXG4gICAgICAgICAgICAuZGVsZXRlKFwiL2FwaS92aWRlby9kZWxldGUvXCIgKyBpZCwge1xuICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgQXV0aG9yaXphdGlvbjogQVQsXG4gICAgICAgICAgICAgICAgQWNjZXB0OiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgU3dhbC5maXJlKHtcbiAgICAgICAgICAgICAgICB0aXRsZTogXCJFbGltaW5hZG9cIixcbiAgICAgICAgICAgICAgICB0ZXh0OiBcIlNlIGhhIGVsaW1pbmFkbyBlbCB2aWRlbyBjb24gw6l4aXRvLlwiLFxuICAgICAgICAgICAgICAgIGljb246IFwic3VjY2Vzc1wiLFxuICAgICAgICAgICAgICAgIHRpbWVyOiAyMDAwLFxuICAgICAgICAgICAgICB9KS50aGVuKChfKSA9PiB7fSk7XG4gICAgICAgICAgICAgIHRoaXMubG9hZERhdGEoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuICB9LFxufTtcbjwvc2NyaXB0PlxuICAiXSwibmFtZXMiOlsiU3dhbCIsInJlcXVpcmUiLCJkYXRhIiwic2VhcmNoIiwiaGVhZGVycyIsInRleHQiLCJ2YWx1ZSIsInNvcnRhYmxlIiwibW91bnRlZCIsImxvYWREYXRhIiwibWV0aG9kcyIsIl90aGlzIiwiYXhpb3MiLCJnZXQiLCJ0aGVuIiwicmVzcG9uc2UiLCJlZGl0IiwiaWQiLCJ3aW5kb3ciLCJsb2NhdGlvbiIsImhyZWYiLCJ0cmFzaCIsIm5hbWUiLCJfdGhpczIiLCJmaXJlIiwidGl0bGUiLCJodG1sIiwiY29uY2F0IiwiaWNvbiIsInNob3dDYW5jZWxCdXR0b24iLCJjb25maXJtQnV0dG9uQ29sb3IiLCJjYW5jZWxCdXR0b25Db2xvciIsImNvbmZpcm1CdXR0b25UZXh0IiwiY2FuY2VsQnV0dG9uVGV4dCIsInJlc3VsdCIsImlzQ29uZmlybWVkIiwiQXV0aG9yaXphdGlvbiIsIkFUIiwiQWNjZXB0IiwidGltZXIiLCJfIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/video/index.vue?vue&type=script&lang=js&\n");

/***/ }),

/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/widgets/BoxColorWidget.vue?vue&type=script&lang=js&":
/*!***********************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/widgets/BoxColorWidget.vue?vue&type=script&lang=js& ***!
  \***********************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n  props: {\n    color: String,\n    title: String,\n    value: String,\n    textLink: String,\n    url: String,\n    icon: String\n  }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vd2lkZ2V0cy9Cb3hDb2xvcldpZGdldC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmIiwibWFwcGluZ3MiOiI7Ozs7QUFpQkEsaUVBQWU7RUFDZkEsS0FBQTtJQUNBQyxLQUFBLEVBQUFDLE1BQUE7SUFDQUMsS0FBQSxFQUFBRCxNQUFBO0lBQ0FFLEtBQUEsRUFBQUYsTUFBQTtJQUNBRyxRQUFBLEVBQUFILE1BQUE7SUFDQUksR0FBQSxFQUFBSixNQUFBO0lBQ0FLLElBQUEsRUFBQUw7RUFDQTtBQUNBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vd2lkZ2V0cy9Cb3hDb2xvcldpZGdldC52dWU/MzZlOCJdLCJzb3VyY2VzQ29udGVudCI6WyI8dGVtcGxhdGU+XG4gICAgPGRpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNtYWxsLWJveFwiIHYtYmluZDpjbGFzcz1cImNvbG9yID8gY29sb3IgOiAnYmctaW5mbydcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbm5lclwiPlxuICAgICAgICAgICAgICAgIDxoMz57e3ZhbHVlID8gdmFsdWUgOiAnMCd9fTwvaDM+XG5cbiAgICAgICAgICAgICAgICA8cD57e3RpdGxlfX08L3A+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpY29uXCI+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpb25cIiB2LWJpbmQ6Y2xhc3M9XCJpY29uID8gaWNvbiA6ICdpb24tYm9va21hcmsnXCI+PC9pPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8YSB2LWJpbmQ6aHJlZj1cInVybCA/IHVybCA6ICcjJ1wiIGNsYXNzPVwic21hbGwtYm94LWZvb3RlclwiPnt7dGV4dExpbmsgPyB0ZXh0TGluayA6ICdNw6FzIGluZm9ybWFjacOzbid9fSA8aSBjbGFzcz1cImZhcyBmYS1hcnJvdy1jaXJjbGUtcmlnaHRcIj48L2k+PC9hPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gICAgcHJvcHM6IHtcbiAgICAgICAgY29sb3I6IFN0cmluZyxcbiAgICAgICAgdGl0bGU6IFN0cmluZyxcbiAgICAgICAgdmFsdWU6IFN0cmluZyxcbiAgICAgICAgdGV4dExpbms6IFN0cmluZyxcbiAgICAgICAgdXJsOiBTdHJpbmcsXG4gICAgICAgIGljb246IFN0cmluZyxcbiAgICB9XG59O1xuPC9zY3JpcHQ+XG5cbjxzdHlsZT48L3N0eWxlPlxuIl0sIm5hbWVzIjpbInByb3BzIiwiY29sb3IiLCJTdHJpbmciLCJ0aXRsZSIsInZhbHVlIiwidGV4dExpbmsiLCJ1cmwiLCJpY29uIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/widgets/BoxColorWidget.vue?vue&type=script&lang=js&\n");

/***/ }),

/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/widgets/ChartWidget.vue?vue&type=script&lang=js&":
/*!********************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/widgets/ChartWidget.vue?vue&type=script&lang=js& ***!
  \********************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n  props: {\n    title: {\n      type: String,\n      \"default\": 'Gráfico'\n    },\n    id: String,\n    type: String,\n    className: String,\n    labels: Array,\n    datasets: Array,\n    height: {\n      type: Number,\n      \"default\": 500\n    }\n  },\n  mounted: function mounted() {\n    var salesChartCanvas = document.getElementById(this.id).getContext(\"2d\");\n    var salesChartData = {\n      labels: this.labels,\n      datasets: this.datasets,\n      backgroundColor: ['rgba(255, 99, 132, 0.2)', 'rgba(54, 162, 235, 0.2)', 'rgba(255, 206, 86, 0.2)', 'rgba(75, 192, 192, 0.2)', 'rgba(153, 102, 255, 0.2)', 'rgba(255, 159, 64, 0.2)'],\n      borderColor: ['rgba(255, 99, 132, 1)', 'rgba(54, 162, 235, 1)', 'rgba(255, 206, 86, 1)', 'rgba(75, 192, 192, 1)', 'rgba(153, 102, 255, 1)', 'rgba(255, 159, 64, 1)'],\n      borderWidth: 1\n    };\n    var salesChartOptions = {\n      maintainAspectRatio: false,\n      responsive: true,\n      legend: {\n        display: true\n      },\n      scales: {\n        xAxes: [{\n          gridLines: {\n            display: false\n          }\n        }],\n        yAxes: [{\n          gridLines: {\n            display: false\n          }\n        }]\n      }\n    };\n    new Chart(salesChartCanvas, {\n      type: this.type || 'line',\n      data: salesChartData,\n      options: salesChartOptions\n    });\n  }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vd2lkZ2V0cy9DaGFydFdpZGdldC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmIiwibWFwcGluZ3MiOiI7Ozs7QUFtQkEsaUVBQWU7RUFDZkEsS0FBQTtJQUNBQyxLQUFBO01BQ0FDLElBQUEsRUFBQUMsTUFBQTtNQUNBO0lBQ0E7SUFDQUMsRUFBQSxFQUFBRCxNQUFBO0lBQ0FELElBQUEsRUFBQUMsTUFBQTtJQUNBRSxTQUFBLEVBQUFGLE1BQUE7SUFDQUcsTUFBQSxFQUFBQyxLQUFBO0lBQ0FDLFFBQUEsRUFBQUQsS0FBQTtJQUNBRSxNQUFBO01BQ0FQLElBQUEsRUFBQVEsTUFBQTtNQUNBO0lBQ0E7RUFDQTtFQUNBQyxPQUFBLFdBQUFBLFFBQUE7SUFDQSxJQUFBQyxnQkFBQSxHQUFBQyxRQUFBLENBQUFDLGNBQUEsTUFBQVYsRUFBQSxFQUFBVyxVQUFBO0lBQ0EsSUFBQUMsY0FBQTtNQUNBVixNQUFBLE9BQUFBLE1BQUE7TUFDQUUsUUFBQSxPQUFBQSxRQUFBO01BQ0FTLGVBQUEsR0FDQSwyQkFDQSwyQkFDQSwyQkFDQSwyQkFDQSw0QkFDQSwwQkFDQTtNQUNBQyxXQUFBLEdBQ0EseUJBQ0EseUJBQ0EseUJBQ0EseUJBQ0EsMEJBQ0Esd0JBQ0E7TUFDQUMsV0FBQTtJQUNBO0lBRUEsSUFBQUMsaUJBQUE7TUFDQUMsbUJBQUE7TUFDQUMsVUFBQTtNQUNBQyxNQUFBO1FBQ0FDLE9BQUE7TUFDQTtNQUNBQyxNQUFBO1FBQ0FDLEtBQUEsR0FDQTtVQUNBQyxTQUFBO1lBQ0FILE9BQUE7VUFDQTtRQUNBLEVBQ0E7UUFDQUksS0FBQSxHQUNBO1VBQ0FELFNBQUE7WUFDQUgsT0FBQTtVQUNBO1FBQ0E7TUFFQTtJQUNBO0lBRUEsSUFBQUssS0FBQSxDQUFBakIsZ0JBQUE7TUFDQVYsSUFBQSxPQUFBQSxJQUFBO01BQ0E0QixJQUFBLEVBQUFkLGNBQUE7TUFDQWUsT0FBQSxFQUFBWDtJQUNBO0VBQ0E7QUFDQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vL3Jlc291cmNlcy9qcy9jb21wb25lbnRzL2FkbWluL3dpZGdldHMvQ2hhcnRXaWRnZXQudnVlPzExODIiXSwic291cmNlc0NvbnRlbnQiOlsiPHRlbXBsYXRlPlxuICAgIDxkaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkXCIgOmNsYXNzPVwiY2xhc3NOYW1lXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJjYXJkLXRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWNoYXJ0LXBpZSBtci0xXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICB7e3RpdGxlfX1cbiAgICAgICAgICAgICAgICA8L2gzPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoYXJ0XCIgaWQ9XCJyZXZlbnVlLWNoYXJ0XCIgc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmU7XCIgdi1iaW5kOnN0eWxlPVwieydoZWlnaHQnOiBoZWlnaHQgKyAncHgnfVwiPlxuICAgICAgICAgICAgICAgICAgICA8Y2FudmFzIHYtYmluZDppZD1cImlkXCIgdi1iaW5kOmhlaWdodD1cImhlaWdodFwiIHYtYmluZDpzdHlsZT1cInsnaGVpZ2h0JzogaGVpZ2h0ICsgJ3B4J31cIj48L2NhbnZhcz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gICAgcHJvcHM6IHtcbiAgICAgICAgdGl0bGU6IHtcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgICAgIGRlZmF1bHQ6ICdHcsOhZmljbydcbiAgICAgICAgfSxcbiAgICAgICAgaWQ6IFN0cmluZyxcbiAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICBjbGFzc05hbWU6IFN0cmluZyxcbiAgICAgICAgbGFiZWxzOiBBcnJheSxcbiAgICAgICAgZGF0YXNldHM6IEFycmF5LFxuICAgICAgICBoZWlnaHQ6IHtcbiAgICAgICAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgICAgICAgIGRlZmF1bHQ6IDUwMFxuICAgICAgICB9XG4gICAgfSxcbiAgICBtb3VudGVkKCkge1xuICAgICAgICB2YXIgc2FsZXNDaGFydENhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuaWQpLmdldENvbnRleHQoXCIyZFwiKTtcbiAgICAgICAgdmFyIHNhbGVzQ2hhcnREYXRhID0ge1xuICAgICAgICAgICAgbGFiZWxzOiB0aGlzLmxhYmVscyxcbiAgICAgICAgICAgIGRhdGFzZXRzOiB0aGlzLmRhdGFzZXRzLFxuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBbXG4gICAgICAgICAgICAgICAgJ3JnYmEoMjU1LCA5OSwgMTMyLCAwLjIpJyxcbiAgICAgICAgICAgICAgICAncmdiYSg1NCwgMTYyLCAyMzUsIDAuMiknLFxuICAgICAgICAgICAgICAgICdyZ2JhKDI1NSwgMjA2LCA4NiwgMC4yKScsXG4gICAgICAgICAgICAgICAgJ3JnYmEoNzUsIDE5MiwgMTkyLCAwLjIpJyxcbiAgICAgICAgICAgICAgICAncmdiYSgxNTMsIDEwMiwgMjU1LCAwLjIpJyxcbiAgICAgICAgICAgICAgICAncmdiYSgyNTUsIDE1OSwgNjQsIDAuMiknXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgYm9yZGVyQ29sb3I6IFtcbiAgICAgICAgICAgICAgICAncmdiYSgyNTUsIDk5LCAxMzIsIDEpJyxcbiAgICAgICAgICAgICAgICAncmdiYSg1NCwgMTYyLCAyMzUsIDEpJyxcbiAgICAgICAgICAgICAgICAncmdiYSgyNTUsIDIwNiwgODYsIDEpJyxcbiAgICAgICAgICAgICAgICAncmdiYSg3NSwgMTkyLCAxOTIsIDEpJyxcbiAgICAgICAgICAgICAgICAncmdiYSgxNTMsIDEwMiwgMjU1LCAxKScsXG4gICAgICAgICAgICAgICAgJ3JnYmEoMjU1LCAxNTksIDY0LCAxKSdcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBib3JkZXJXaWR0aDogMVxuICAgICAgICB9O1xuXG4gICAgICAgIHZhciBzYWxlc0NoYXJ0T3B0aW9ucyA9IHtcbiAgICAgICAgICAgIG1haW50YWluQXNwZWN0UmF0aW86IGZhbHNlLFxuICAgICAgICAgICAgcmVzcG9uc2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgIGxlZ2VuZDoge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IHRydWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2NhbGVzOiB7XG4gICAgICAgICAgICAgICAgeEF4ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZExpbmVzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgeUF4ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZExpbmVzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuXG4gICAgICAgIG5ldyBDaGFydChzYWxlc0NoYXJ0Q2FudmFzLCB7XG4gICAgICAgICAgICB0eXBlOiB0aGlzLnR5cGUgfHwgJ2xpbmUnLFxuICAgICAgICAgICAgZGF0YTogc2FsZXNDaGFydERhdGEsXG4gICAgICAgICAgICBvcHRpb25zOiBzYWxlc0NoYXJ0T3B0aW9ucyxcbiAgICAgICAgfSk7XG4gICAgfSxcbn07XG48L3NjcmlwdD5cbiJdLCJuYW1lcyI6WyJwcm9wcyIsInRpdGxlIiwidHlwZSIsIlN0cmluZyIsImlkIiwiY2xhc3NOYW1lIiwibGFiZWxzIiwiQXJyYXkiLCJkYXRhc2V0cyIsImhlaWdodCIsIk51bWJlciIsIm1vdW50ZWQiLCJzYWxlc0NoYXJ0Q2FudmFzIiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImdldENvbnRleHQiLCJzYWxlc0NoYXJ0RGF0YSIsImJhY2tncm91bmRDb2xvciIsImJvcmRlckNvbG9yIiwiYm9yZGVyV2lkdGgiLCJzYWxlc0NoYXJ0T3B0aW9ucyIsIm1haW50YWluQXNwZWN0UmF0aW8iLCJyZXNwb25zaXZlIiwibGVnZW5kIiwiZGlzcGxheSIsInNjYWxlcyIsInhBeGVzIiwiZ3JpZExpbmVzIiwieUF4ZXMiLCJDaGFydCIsImRhdGEiLCJvcHRpb25zIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/widgets/ChartWidget.vue?vue&type=script&lang=js&\n");

/***/ }),

/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/widgets/FooterWidget.vue?vue&type=script&lang=js&":
/*!*********************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/widgets/FooterWidget.vue?vue&type=script&lang=js& ***!
  \*********************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vd2lkZ2V0cy9Gb290ZXJXaWRnZXQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJiIsIm1hcHBpbmdzIjoiOzs7O0FBV0EsaUVBQWUsRUFBRSIsInNvdXJjZXMiOlsid2VicGFjazovLy9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi93aWRnZXRzL0Zvb3RlcldpZGdldC52dWU/N2M3NSJdLCJzb3VyY2VzQ29udGVudCI6WyI8dGVtcGxhdGU+XG4gICAgPGRpdj5cbiAgICAgICAgPGZvb3RlciBjbGFzcz1cIm1haW4tZm9vdGVyXCI+XG4gICAgICAgICAgICA8c3Ryb25nPkNvcHlyaWdodCAmY29weTsgMjAyMyBQYW5lbCBkZSBBZG1pbmlzdHJhY2nDs24gRXNjdWVsYSBkZSBsYSBQYXJ0aWNpcGFjacOzbi48L3N0cm9uZz5cbiAgICAgICAgICAgIFRvZG9zIGxvcyBkZXJlY2hvcyByZXNlcnZhZG9zLlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsb2F0LXJpZ2h0IGQtbm9uZSBkLXNtLWlubGluZS1ibG9ja1wiPjxiPlZlcnNpb248L2I+IDEuMC4wPC9kaXY+XG4gICAgICAgIDwvZm9vdGVyPlxuICAgIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHt9O1xuPC9zY3JpcHQ+XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/widgets/FooterWidget.vue?vue&type=script&lang=js&\n");

/***/ }),

/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/widgets/HeaderWidget.vue?vue&type=script&lang=js&":
/*!*********************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/widgets/HeaderWidget.vue?vue&type=script&lang=js& ***!
  \*********************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n  props: {\n    title: String,\n    breadcrumbs: Array\n  },\n  mounted: function mounted() {\n    window.document.title = this.title + ' - ' + this.$appName;\n  }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vd2lkZ2V0cy9IZWFkZXJXaWRnZXQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJiIsIm1hcHBpbmdzIjoiOzs7O0FBeUJBLGlFQUFlO0VBQ2ZBLEtBQUE7SUFDQUMsS0FBQSxFQUFBQyxNQUFBO0lBQ0FDLFdBQUEsRUFBQUM7RUFDQTtFQUNBQyxPQUFBLFdBQUFBLFFBQUE7SUFDQUMsTUFBQSxDQUFBQyxRQUFBLENBQUFOLEtBQUEsUUFBQUEsS0FBQSxnQkFBQU8sUUFBQTtFQUNBO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi93aWRnZXRzL0hlYWRlcldpZGdldC52dWU/YzNlNSJdLCJzb3VyY2VzQ29udGVudCI6WyI8dGVtcGxhdGU+XG4gICAgPGRpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbnQtaGVhZGVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtYi0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGgxIGNsYXNzPVwibS0wXCI+e3t0aXRsZX19PC9oMT5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS02XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8b2wgY2xhc3M9XCJicmVhZGNydW1iIGZsb2F0LXNtLXJpZ2h0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIHYtZm9yPVwicGFnZSBpbiBicmVhZGNydW1ic1wiIGNsYXNzPVwiYnJlYWRjcnVtYi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyb3V0ZXItbGluayA6dGFnPVwiKHBhZ2UudXJsID09ICcjJyA/ICdzcGFuJyA6ICdhJylcIiA6dG89XCJwYWdlLnVybFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3BhZ2UudGV4dH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcm91dGVyLWxpbms+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvb2w+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBwcm9wczoge1xuICAgICAgICB0aXRsZTogU3RyaW5nLFxuICAgICAgICBicmVhZGNydW1iczogQXJyYXlcbiAgICB9LFxuICAgIG1vdW50ZWQoKSB7XG4gICAgICAgIHdpbmRvdy5kb2N1bWVudC50aXRsZSA9IHRoaXMudGl0bGUgKyAnIC0gJyArIHRoaXMuJGFwcE5hbWVcbiAgICB9LFxufTtcbjwvc2NyaXB0PlxuIl0sIm5hbWVzIjpbInByb3BzIiwidGl0bGUiLCJTdHJpbmciLCJicmVhZGNydW1icyIsIkFycmF5IiwibW91bnRlZCIsIndpbmRvdyIsImRvY3VtZW50IiwiJGFwcE5hbWUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/widgets/HeaderWidget.vue?vue&type=script&lang=js&\n");

/***/ }),

/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/widgets/IframeGroupWidget.vue?vue&type=script&lang=js&":
/*!**************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/widgets/IframeGroupWidget.vue?vue&type=script&lang=js& ***!
  \**************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n  data: function data() {\n    return {\n      iframes: []\n    };\n  },\n  props: {\n    icon: {\n      type: String,\n      \"default\": \"fa-chart-pie\"\n    },\n    type: String,\n    className: String,\n    slug: String,\n    height: {\n      type: Number,\n      \"default\": 500\n    }\n  },\n  mounted: function mounted() {\n    var _this = this;\n    axios.get(\"\".concat($urlPlatform, \"/iframe-group/\").concat(this.slug)).then(function (resp) {\n      _this.iframes = resp.data;\n    });\n  }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vd2lkZ2V0cy9JZnJhbWVHcm91cFdpZGdldC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmIiwibWFwcGluZ3MiOiI7Ozs7QUFtQkEsaUVBQWU7RUFDZkEsSUFBQSxXQUFBQSxLQUFBO0lBQ0E7TUFDQUMsT0FBQTtJQUNBO0VBQ0E7RUFDQUMsS0FBQTtJQUNBQyxJQUFBO01BQ0FDLElBQUEsRUFBQUMsTUFBQTtNQUNBO0lBQ0E7SUFDQUQsSUFBQSxFQUFBQyxNQUFBO0lBQ0FDLFNBQUEsRUFBQUQsTUFBQTtJQUNBRSxJQUFBLEVBQUFGLE1BQUE7SUFDQUcsTUFBQTtNQUNBSixJQUFBLEVBQUFLLE1BQUE7TUFDQTtJQUNBO0VBQ0E7RUFDQUMsT0FBQSxXQUFBQSxRQUFBO0lBQUEsSUFBQUMsS0FBQTtJQUNBQyxLQUFBLENBQUFDLEdBQUEsSUFBQUMsTUFBQSxDQUFBQyxZQUFBLG9CQUFBRCxNQUFBLE1BQUFQLElBQUEsR0FBQVMsSUFBQSxXQUFBQyxJQUFBO01BQ0FOLEtBQUEsQ0FBQVYsT0FBQSxHQUFBZ0IsSUFBQSxDQUFBakIsSUFBQTtJQUNBO0VBQ0E7QUFDQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vL3Jlc291cmNlcy9qcy9jb21wb25lbnRzL2FkbWluL3dpZGdldHMvSWZyYW1lR3JvdXBXaWRnZXQudnVlP2JhNTMiXSwic291cmNlc0NvbnRlbnQiOlsiPHRlbXBsYXRlPlxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgPGRpdiB2LWZvcj1cImlmcmFtZSBvZiBpZnJhbWVzXCIgOmNsYXNzPVwiaWZyYW1lLmNvbHVtbnNcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkXCIgOmNsYXNzPVwiY2xhc3NOYW1lXCIgOmlkPVwiaWZyYW1lLnNsdWdcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwiY2FyZC10aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgbXItMVwiIDpjbGFzcz1cImljb25cIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBpZnJhbWUubmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2gzPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbnQtaWZyYW1lXCIgdi1odG1sPVwiaWZyYW1lLmNvbnRlbnRfaWZyYW1lXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuZXhwb3J0IGRlZmF1bHQge1xuICAgIGRhdGEoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpZnJhbWVzOiBbXSxcbiAgICAgICAgfTtcbiAgICB9LFxuICAgIHByb3BzOiB7XG4gICAgICAgIGljb246IHtcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgICAgIGRlZmF1bHQ6IFwiZmEtY2hhcnQtcGllXCIsXG4gICAgICAgIH0sXG4gICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgY2xhc3NOYW1lOiBTdHJpbmcsXG4gICAgICAgIHNsdWc6IFN0cmluZyxcbiAgICAgICAgaGVpZ2h0OiB7XG4gICAgICAgICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICAgICAgICBkZWZhdWx0OiA1MDAsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBtb3VudGVkKCkge1xuICAgICAgICBheGlvcy5nZXQoYCR7JHVybFBsYXRmb3JtfS9pZnJhbWUtZ3JvdXAvJHt0aGlzLnNsdWd9YCkudGhlbigocmVzcCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pZnJhbWVzID0gcmVzcC5kYXRhO1xuICAgICAgICB9KTtcbiAgICB9LFxufTtcbjwvc2NyaXB0PlxuIl0sIm5hbWVzIjpbImRhdGEiLCJpZnJhbWVzIiwicHJvcHMiLCJpY29uIiwidHlwZSIsIlN0cmluZyIsImNsYXNzTmFtZSIsInNsdWciLCJoZWlnaHQiLCJOdW1iZXIiLCJtb3VudGVkIiwiX3RoaXMiLCJheGlvcyIsImdldCIsImNvbmNhdCIsIiR1cmxQbGF0Zm9ybSIsInRoZW4iLCJyZXNwIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/widgets/IframeGroupWidget.vue?vue&type=script&lang=js&\n");

/***/ }),

/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/widgets/NavbarWidget.vue?vue&type=script&lang=js&":
/*!*********************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/widgets/NavbarWidget.vue?vue&type=script&lang=js& ***!
  \*********************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n  data: function data() {\n    return {\n      modules: [],\n      fontSize: 100\n    };\n  },\n  mounted: function mounted() {\n    var _this = this;\n    this.modules = window.PLATFORMS;\n    if (window.AT == \"\") {\n      this.UserData = null;\n      window.localStorage.removeItem('userDataIF');\n    }\n    jQuery('.btn-decrease').click(function () {\n      if (_this.fontSize > 65) {\n        _this.fontSize = _this.fontSize - 5;\n        window.localStorage.setItem('fontSize', _this.fontSize);\n      }\n      jQuery('div#fontSize').html(\"\\n            <style>\\n                * {\\n                    font-size: \".concat((_this.fontSize / 100).toFixed(2), \"rem;\\n                }\\n                .nav-item.with-child span, .nav-item.with-child a {\\n                    font-size: \").concat((_this.fontSize / 100).toFixed(2), \"rem !important;\\n                }\\n            </style>\\n            \"));\n    });\n    jQuery('.btn-increment').click(function () {\n      if (_this.fontSize <= 120) {\n        _this.fontSize = _this.fontSize + 5;\n        window.localStorage.setItem('fontSize', _this.fontSize);\n      }\n      jQuery('div#fontSize').html(\"\\n            <style>\\n                * {\\n                    font-size: \".concat((_this.fontSize / 100).toFixed(2), \"rem;\\n                }\\n                .nav-item.with-child span, .nav-item.with-child a {\\n                    font-size: \").concat((_this.fontSize / 100).toFixed(2), \"rem !important;\\n                }\\n            </style>\\n            \"));\n    });\n    jQuery('.btn-contrast').click(function () {\n      jQuery(\"body\").toggleClass(\"contrast\");\n      window.localStorage.setItem('contrast', jQuery(\"body\").hasClass('contrast') ? 1 : 0);\n    });\n    if (window.localStorage.getItem('contrast') == 1) {\n      jQuery(\"body\").addClass(\"contrast\");\n    }\n    if (window.localStorage.getItem('fontSize') != null) {\n      setTimeout(function (_) {\n        _this.fontSize = parseFloat(window.localStorage.getItem('fontSize'));\n        jQuery('div#fontSize').html(\"\\n                <style>\\n                    * {\\n                        font-size: \".concat((_this.fontSize / 100).toFixed(2), \"rem;\\n                    }\\n                    .nav-item.with-child span, .nav-item.with-child a {\\n                        font-size: \").concat((_this.fontSize / 100).toFixed(2), \"rem !important;\\n                    }\\n                </style>\\n                \"));\n      }, 1500);\n    }\n  },\n  methods: {\n    LogOut: function LogOut() {\n      window.localStorage.removeItem('userDataIF');\n      window.open('/logout', '_top');\n    }\n  }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vd2lkZ2V0cy9OYXZiYXJXaWRnZXQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJiIsIm1hcHBpbmdzIjoiOzs7O0FBOERBLGlFQUFlO0VBQ2ZBLElBQUEsV0FBQUEsS0FBQTtJQUNBO01BQ0FDLE9BQUE7TUFDQUMsUUFBQTtJQUNBO0VBQ0E7RUFDQUMsT0FBQSxXQUFBQSxRQUFBO0lBQUEsSUFBQUMsS0FBQTtJQUNBLEtBQUFILE9BQUEsR0FBQUksTUFBQSxDQUFBQyxTQUFBO0lBQ0EsSUFBQUQsTUFBQSxDQUFBRSxFQUFBO01BQ0EsS0FBQUMsUUFBQTtNQUNBSCxNQUFBLENBQUFJLFlBQUEsQ0FBQUMsVUFBQTtJQUNBO0lBQ0FDLE1BQUEsa0JBQUFDLEtBQUE7TUFDQSxJQUFBUixLQUFBLENBQUFGLFFBQUE7UUFDQUUsS0FBQSxDQUFBRixRQUFBLEdBQUFFLEtBQUEsQ0FBQUYsUUFBQTtRQUNBRyxNQUFBLENBQUFJLFlBQUEsQ0FBQUksT0FBQSxhQUFBVCxLQUFBLENBQUFGLFFBQUE7TUFDQTtNQUNBUyxNQUFBLGlCQUFBRyxJQUFBLCtFQUFBQyxNQUFBLENBR0EsQ0FBQVgsS0FBQSxDQUFBRixRQUFBLFFBQUFjLE9BQUEsc0lBQUFELE1BQUEsQ0FHQSxDQUFBWCxLQUFBLENBQUFGLFFBQUEsUUFBQWMsT0FBQSw4RUFHQTtJQUNBO0lBQ0FMLE1BQUEsbUJBQUFDLEtBQUE7TUFDQSxJQUFBUixLQUFBLENBQUFGLFFBQUE7UUFDQUUsS0FBQSxDQUFBRixRQUFBLEdBQUFFLEtBQUEsQ0FBQUYsUUFBQTtRQUNBRyxNQUFBLENBQUFJLFlBQUEsQ0FBQUksT0FBQSxhQUFBVCxLQUFBLENBQUFGLFFBQUE7TUFDQTtNQUNBUyxNQUFBLGlCQUFBRyxJQUFBLCtFQUFBQyxNQUFBLENBR0EsQ0FBQVgsS0FBQSxDQUFBRixRQUFBLFFBQUFjLE9BQUEsc0lBQUFELE1BQUEsQ0FHQSxDQUFBWCxLQUFBLENBQUFGLFFBQUEsUUFBQWMsT0FBQSw4RUFHQTtJQUNBO0lBQ0FMLE1BQUEsa0JBQUFDLEtBQUE7TUFDQUQsTUFBQSxTQUFBTSxXQUFBO01BQ0FaLE1BQUEsQ0FBQUksWUFBQSxDQUFBSSxPQUFBLGFBQUFGLE1BQUEsU0FBQU8sUUFBQTtJQUNBO0lBQ0EsSUFBQWIsTUFBQSxDQUFBSSxZQUFBLENBQUFVLE9BQUE7TUFDQVIsTUFBQSxTQUFBUyxRQUFBO0lBQ0E7SUFDQSxJQUFBZixNQUFBLENBQUFJLFlBQUEsQ0FBQVUsT0FBQTtNQUNBRSxVQUFBLFdBQUFDLENBQUE7UUFDQWxCLEtBQUEsQ0FBQUYsUUFBQSxHQUFBcUIsVUFBQSxDQUFBbEIsTUFBQSxDQUFBSSxZQUFBLENBQUFVLE9BQUE7UUFDQVIsTUFBQSxpQkFBQUcsSUFBQSwyRkFBQUMsTUFBQSxDQUdBLENBQUFYLEtBQUEsQ0FBQUYsUUFBQSxRQUFBYyxPQUFBLGtKQUFBRCxNQUFBLENBR0EsQ0FBQVgsS0FBQSxDQUFBRixRQUFBLFFBQUFjLE9BQUEsMEZBR0E7TUFDQTtJQUNBO0VBQ0E7RUFDQVEsT0FBQTtJQUNBQyxNQUFBLFdBQUFBLE9BQUE7TUFDQXBCLE1BQUEsQ0FBQUksWUFBQSxDQUFBQyxVQUFBO01BQ0FMLE1BQUEsQ0FBQXFCLElBQUE7SUFDQTtFQUNBO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi93aWRnZXRzL05hdmJhcldpZGdldC52dWU/YzhiZCJdLCJzb3VyY2VzQ29udGVudCI6WyI8dGVtcGxhdGU+XG4gICAgPGRpdj5cbiAgICAgICAgPG5hdiBjbGFzcz1cIm1haW4taGVhZGVyIG5hdmJhciBuYXZiYXItZXhwYW5kIG5hdmJhci13aGl0ZSBuYXZiYXItbGlnaHRcIj5cbiAgICAgICAgICAgIDx1bCBjbGFzcz1cIm5hdmJhci1uYXZcIj5cbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cIm5hdi1saW5rXCIgZGF0YS13aWRnZXQ9XCJwdXNobWVudVwiIGhyZWY9XCIjXCIgcm9sZT1cImJ1dHRvblwiPjxpIGNsYXNzPVwiZmFzIGZhLWJhcnNcIj48L2k+PC9hPlxuICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW0gZC1ub25lIGQtc20taW5saW5lLWJsb2NrXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwibmF2LWxpbmtcIj57eyAkYXBwTmFtZSB9fTwvYT5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIDx1bCBjbGFzcz1cIm5hdmJhci1uYXYgbWwtYXV0b1wiPlxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwibmF2LWxpbmsgbmF2LWxpbmstcGxhdGZvcm1zIHJlZCBidG4tZGVjcmVhc2VcIiBocmVmPVwiamF2YXNjcmlwdDo7XCIgdGl0bGU9XCJEaXNtaW51aXIgdGFtYcOxbyBkZSBsZXRyYVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGI+QS08L2I+XG4gICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwibmF2LWxpbmsgbmF2LWxpbmstcGxhdGZvcm1zIHJlZCBidG4taW5jcmVtZW50XCIgaHJlZj1cImphdmFzY3JpcHQ6O1wiIHRpdGxlPVwiQXVtZW50YXIgdGFtYcOxbyBkZSBsZXRyYVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGI+QSs8L2I+XG4gICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwibmF2LWxpbmsgbmF2LWxpbmstcGxhdGZvcm1zIGJsYWNrIGJ0bi1jb250cmFzdFwiIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiB0aXRsZT1cIkNhbWJpYXIgY29udHJhc3RlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1hZGp1c3RcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCIgdi1pZj1cIlVzZXJEYXRhICE9IG51bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImJ0biBkcm9wZG93bi10b2dnbGVcIiBocmVmPVwiI1wiIHJvbGU9XCJidXR0b25cIiBpZD1cImRyb3Bkb3duTWVudUxpbmtcIiBkYXRhLXRvZ2dsZT1cImRyb3Bkb3duXCIgYXJpYS1oYXNwb3B1cD1cInRydWVcIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5Nw7NkdWxvczwvYj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnVcIiBhcmlhLWxhYmVsbGVkYnk9XCJkcm9wZG93bk1lbnVMaW5rXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgOmhyZWY9XCJtb2QudXJsX2xvZ2luXCIgdi1mb3I9XCJtb2Qgb2YgbW9kdWxlc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxpIGNsYXNzPVwiZmFzXCIgOmNsYXNzPVwibW9kLmljb25cIj48L2k+IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBtb2QubmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwibmF2LWxpbmtcIiBocmVmPVwiamF2YXNjcmlwdDo7XCIgcm9sZT1cImJ1dHRvblwiIHYtaWY9XCJVc2VyRGF0YSAhPSBudWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Yj57eyBVc2VyRGF0YS5uYW1lIH19PC9iPlxuICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbVwiIHYtaWY9XCJVc2VyRGF0YSAhPSBudWxsXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiBjbGFzcz1cIm5hdi1saW5rXCIgdi1vbjpjbGljaz1cIkxvZ091dCgpXCIgdGl0bGU9XCJDZXJyYXIgc2VzacOzblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtc2lnbi1vdXQtYWx0XCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbVwiIHYtaWY9XCJVc2VyRGF0YSA9PSBudWxsXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCIvbG9naW5cIiBjbGFzcz1cIm5hdi1saW5rXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Yj5JbmljaWFyIHNlc2nDs248L2I+XG4gICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgPC9uYXY+XG4gICAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuZXhwb3J0IGRlZmF1bHQge1xuICAgIGRhdGEoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBtb2R1bGVzOiBbXSxcbiAgICAgICAgICAgIGZvbnRTaXplOiAxMDBcbiAgICAgICAgfVxuICAgIH0sXG4gICAgbW91bnRlZCgpIHtcbiAgICAgICAgdGhpcy5tb2R1bGVzID0gd2luZG93LlBMQVRGT1JNUztcbiAgICAgICAgaWYod2luZG93LkFUID09IFwiXCIpIHtcbiAgICAgICAgICAgdGhpcy5Vc2VyRGF0YSA9IG51bGw7XG4gICAgICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgndXNlckRhdGFJRicpO1xuICAgICAgICB9XG4gICAgICAgIGpRdWVyeSgnLmJ0bi1kZWNyZWFzZScpLmNsaWNrKCgpID0+IHtcbiAgICAgICAgICAgIGlmKHRoaXMuZm9udFNpemUgPiA2NSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9udFNpemUgPSB0aGlzLmZvbnRTaXplIC0gNTtcbiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2ZvbnRTaXplJywgdGhpcy5mb250U2l6ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBqUXVlcnkoJ2RpdiNmb250U2l6ZScpLmh0bWwoYFxuICAgICAgICAgICAgPHN0eWxlPlxuICAgICAgICAgICAgICAgICoge1xuICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6ICR7KHRoaXMuZm9udFNpemUvMTAwKS50b0ZpeGVkKDIpfXJlbTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLm5hdi1pdGVtLndpdGgtY2hpbGQgc3BhbiwgLm5hdi1pdGVtLndpdGgtY2hpbGQgYSB7XG4gICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogJHsodGhpcy5mb250U2l6ZS8xMDApLnRvRml4ZWQoMil9cmVtICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9zdHlsZT5cbiAgICAgICAgICAgIGApO1xuICAgICAgICB9KTtcbiAgICAgICAgalF1ZXJ5KCcuYnRuLWluY3JlbWVudCcpLmNsaWNrKCgpID0+IHtcbiAgICAgICAgICAgIGlmKHRoaXMuZm9udFNpemUgPD0gMTIwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb250U2l6ZSA9IHRoaXMuZm9udFNpemUgKyA1O1xuICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnZm9udFNpemUnLCB0aGlzLmZvbnRTaXplKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGpRdWVyeSgnZGl2I2ZvbnRTaXplJykuaHRtbChgXG4gICAgICAgICAgICA8c3R5bGU+XG4gICAgICAgICAgICAgICAgKiB7XG4gICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogJHsodGhpcy5mb250U2l6ZS8xMDApLnRvRml4ZWQoMil9cmVtO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAubmF2LWl0ZW0ud2l0aC1jaGlsZCBzcGFuLCAubmF2LWl0ZW0ud2l0aC1jaGlsZCBhIHtcbiAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAkeyh0aGlzLmZvbnRTaXplLzEwMCkudG9GaXhlZCgyKX1yZW0gIWltcG9ydGFudDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3N0eWxlPlxuICAgICAgICAgICAgYCk7XG4gICAgICAgIH0pO1xuICAgICAgICBqUXVlcnkoJy5idG4tY29udHJhc3QnKS5jbGljaygoKSA9PiB7XG4gICAgICAgICAgICBqUXVlcnkoXCJib2R5XCIpLnRvZ2dsZUNsYXNzKFwiY29udHJhc3RcIik7XG4gICAgICAgICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2NvbnRyYXN0JywgalF1ZXJ5KFwiYm9keVwiKS5oYXNDbGFzcygnY29udHJhc3QnKSA/IDEgOiAwKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmKHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnY29udHJhc3QnKSA9PSAxKSB7XG4gICAgICAgICAgICBqUXVlcnkoXCJib2R5XCIpLmFkZENsYXNzKFwiY29udHJhc3RcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYod2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCdmb250U2l6ZScpICE9IG51bGwpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoXyA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb250U2l6ZSA9IHBhcnNlRmxvYXQod2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCdmb250U2l6ZScpKTtcbiAgICAgICAgICAgICAgICBqUXVlcnkoJ2RpdiNmb250U2l6ZScpLmh0bWwoYFxuICAgICAgICAgICAgICAgIDxzdHlsZT5cbiAgICAgICAgICAgICAgICAgICAgKiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6ICR7KHRoaXMuZm9udFNpemUvMTAwKS50b0ZpeGVkKDIpfXJlbTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAubmF2LWl0ZW0ud2l0aC1jaGlsZCBzcGFuLCAubmF2LWl0ZW0ud2l0aC1jaGlsZCBhIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogJHsodGhpcy5mb250U2l6ZS8xMDApLnRvRml4ZWQoMil9cmVtICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L3N0eWxlPlxuICAgICAgICAgICAgICAgIGApO1xuICAgICAgICAgICAgfSwgMTUwMCk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIG1ldGhvZHM6IHtcbiAgICAgICAgTG9nT3V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ3VzZXJEYXRhSUYnKTtcbiAgICAgICAgICAgIHdpbmRvdy5vcGVuKCcvbG9nb3V0JywgJ190b3AnKTtcbiAgICAgICAgfVxuICAgIH0sXG59O1xuPC9zY3JpcHQ+XG4iXSwibmFtZXMiOlsiZGF0YSIsIm1vZHVsZXMiLCJmb250U2l6ZSIsIm1vdW50ZWQiLCJfdGhpcyIsIndpbmRvdyIsIlBMQVRGT1JNUyIsIkFUIiwiVXNlckRhdGEiLCJsb2NhbFN0b3JhZ2UiLCJyZW1vdmVJdGVtIiwialF1ZXJ5IiwiY2xpY2siLCJzZXRJdGVtIiwiaHRtbCIsImNvbmNhdCIsInRvRml4ZWQiLCJ0b2dnbGVDbGFzcyIsImhhc0NsYXNzIiwiZ2V0SXRlbSIsImFkZENsYXNzIiwic2V0VGltZW91dCIsIl8iLCJwYXJzZUZsb2F0IiwibWV0aG9kcyIsIkxvZ091dCIsIm9wZW4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/widgets/NavbarWidget.vue?vue&type=script&lang=js&\n");

/***/ }),

/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/widgets/SidebarWidget.vue?vue&type=script&lang=js&":
/*!**********************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/widgets/SidebarWidget.vue?vue&type=script&lang=js& ***!
  \**********************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n  data: function data() {\n    return {\n      menu: [],\n      organizationTypeList: [],\n      organizationType: 0\n    };\n  },\n  mounted: function mounted() {\n    var _this = this;\n    if (window.AT == \"\") {\n      this.UserData = null;\n      window.localStorage.removeItem('userDataIF');\n    }\n    if (this.UserData != null) {\n      axios.post(\"/api/menu\", {}, {\n        headers: {\n          Authorization: AT\n        }\n      }).then(function (resp) {\n        _this.menu = resp.data;\n      });\n    }\n    this.loadOrganizationType();\n  },\n  methods: {\n    loadOrganizationType: function loadOrganizationType() {\n      var _this2 = this;\n      axios.get($urlPlatform + \"/api/organizationsTypeGrouped\", {}, {}).then(function (response) {\n        var items = response.data;\n        var _arr = [];\n        var _iterator = _createForOfIteratorHelper(items),\n          _step;\n        try {\n          for (_iterator.s(); !(_step = _iterator.n()).done;) {\n            var item = _step.value;\n            _arr.push(item);\n          }\n        } catch (err) {\n          _iterator.e(err);\n        } finally {\n          _iterator.f();\n        }\n        _this2.organizationTypeList = _arr;\n      });\n    },\n    goToHome: function goToHome(id) {\n      var _this3 = this;\n      if (this.$route.path != \"/\") {\n        this.$router.push('/');\n      }\n      setTimeout(function (_) {\n        _this3.organizationType = id;\n        _this3.$root.$emit('updateOrganizationType', id);\n        jQuery('html, body').animate({\n          scrollTop: jQuery('.organizations-title').offset().top\n        }, 500);\n      }, 1000);\n    },\n    goToPlatform: function goToPlatform() {\n      window.location.href = window.$urlPlatform;\n    }\n  }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vd2lkZ2V0cy9TaWRlYmFyV2lkZ2V0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQW1EQSxpRUFBZTtFQUNmQSxJQUFBLFdBQUFBLEtBQUE7SUFDQTtNQUNBQyxJQUFBO01BQ0FDLG9CQUFBO01BQ0FDLGdCQUFBO0lBQ0E7RUFDQTtFQUNBQyxPQUFBLFdBQUFBLFFBQUE7SUFBQSxJQUFBQyxLQUFBO0lBQ0EsSUFBQUMsTUFBQSxDQUFBQyxFQUFBO01BQ0EsS0FBQUMsUUFBQTtNQUNBRixNQUFBLENBQUFHLFlBQUEsQ0FBQUMsVUFBQTtJQUNBO0lBRUEsU0FBQUYsUUFBQTtNQUNBRyxLQUFBLENBQ0FDLElBQUEsQ0FDQSxhQUNBLElBQ0E7UUFDQUMsT0FBQTtVQUNBQyxhQUFBLEVBQUFQO1FBQ0E7TUFDQSxDQUNBLEVBQ0FRLElBQUEsV0FBQUMsSUFBQTtRQUNBWCxLQUFBLENBQUFKLElBQUEsR0FBQWUsSUFBQSxDQUFBaEIsSUFBQTtNQUNBO0lBQ0E7SUFDQSxLQUFBaUIsb0JBQUE7RUFDQTtFQUNBQyxPQUFBO0lBQ0FELG9CQUFBLFdBQUFBLHFCQUFBO01BQUEsSUFBQUUsTUFBQTtNQUNBUixLQUFBLENBQUFTLEdBQUEsQ0FBQUMsWUFBQSw0Q0FBQU4sSUFBQSxXQUFBTyxRQUFBO1FBQ0EsSUFBQUMsS0FBQSxHQUFBRCxRQUFBLENBQUF0QixJQUFBO1FBQ0EsSUFBQXdCLElBQUE7UUFBQSxJQUFBQyxTQUFBLEdBQUFDLDBCQUFBLENBQ0FILEtBQUE7VUFBQUksS0FBQTtRQUFBO1VBQUEsS0FBQUYsU0FBQSxDQUFBRyxDQUFBLE1BQUFELEtBQUEsR0FBQUYsU0FBQSxDQUFBSSxDQUFBLElBQUFDLElBQUE7WUFBQSxJQUFBQyxJQUFBLEdBQUFKLEtBQUEsQ0FBQUssS0FBQTtZQUNBUixJQUFBLENBQUFTLElBQUEsQ0FBQUYsSUFBQTtVQUNBO1FBQUEsU0FBQUcsR0FBQTtVQUFBVCxTQUFBLENBQUFVLENBQUEsQ0FBQUQsR0FBQTtRQUFBO1VBQUFULFNBQUEsQ0FBQVcsQ0FBQTtRQUFBO1FBQ0FqQixNQUFBLENBQUFqQixvQkFBQSxHQUFBc0IsSUFBQTtNQUNBO0lBQ0E7SUFDQWEsUUFBQSxXQUFBQSxTQUFBQyxFQUFBO01BQUEsSUFBQUMsTUFBQTtNQUNBLFNBQUFDLE1BQUEsQ0FBQUMsSUFBQTtRQUNBLEtBQUFDLE9BQUEsQ0FBQVQsSUFBQTtNQUNBO01BQ0FVLFVBQUEsV0FBQUMsQ0FBQTtRQUNBTCxNQUFBLENBQUFwQyxnQkFBQSxHQUFBbUMsRUFBQTtRQUNBQyxNQUFBLENBQUFNLEtBQUEsQ0FBQUMsS0FBQSwyQkFBQVIsRUFBQTtRQUNBUyxNQUFBLGVBQUFDLE9BQUE7VUFDQUMsU0FBQSxFQUFBRixNQUFBLHlCQUFBRyxNQUFBLEdBQUFDO1FBQ0E7TUFDQTtJQUNBO0lBQ0FDLFlBQUEsV0FBQUEsYUFBQTtNQUNBOUMsTUFBQSxDQUFBK0MsUUFBQSxDQUFBQyxJQUFBLEdBQUFoRCxNQUFBLENBQUFlLFlBQUE7SUFDQTtFQUNBO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi93aWRnZXRzL1NpZGViYXJXaWRnZXQudnVlPzM3ZjEiXSwic291cmNlc0NvbnRlbnQiOlsiPHRlbXBsYXRlPlxuICAgIDxhc2lkZSBjbGFzcz1cIm1haW4tc2lkZWJhciBzaWRlYmFyLWRhcmstcmVkIGVsZXZhdGlvbi00XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiIGlkPVwibG9nby1wcGFsXCI+XG4gICAgICAgICAgICA8aW1nIHNyYz1cInN2Zy9sb2dvcy9sb2dvLXBsYXRhZm9ybWEuc3ZnXCIgY2xhc3M9XCJpbWctcmVzcG9zaXZlIHBvaW50ZXJcIiBAY2xpY2s9XCJnb1RvUGxhdGZvcm0oKVwiIC8+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzaWRlYmFyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidXNlci1wYW5lbCBtdC0zIHBiLTMgbWItMyBkLWZsZXhcIj5cbiAgICAgICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJpbWFnZVwiPlxuICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz1cInN2Zy9hdmF0YXJzL2F2YXRhci1kZWZhdWx0LnN2Z1wiIGNsYXNzPVwiaW1nLWNpcmNsZSBlbGV2YXRpb24tMlwiIGFsdD1cIlVzZXIgSW1hZ2VcIiAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFVzZXJEYXRhLm5hbWUgfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPG5hdiBjbGFzcz1cIm9wdGlvbnNcIj5cbiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJuYXYgbmF2LXBpbGxzIG5hdi1zaWRlYmFyIGZsZXgtY29sdW1uXCIgZGF0YS13aWRnZXQ9XCJ0cmVldmlld1wiIHJvbGU9XCJtZW51XCIgZGF0YS1hY2NvcmRpb249XCJ0cnVlXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgPGxpIHYtYmluZDpjbGFzcz1cIihpdGVtLmlzX3NlcGFyYXRvciA9PSAxID8gJ25hdi1oZWFkZXInIDogJ25hdi1pdGVtJykgKyAnICcgKyAoaXRlbS5jaGlsZHMubGVuZ3RoID4gMCA/ICd3aXRoLWNoaWxkJyA6ICcnKVwiIHYtZm9yPVwiaXRlbSBvZiBtZW51XCIgdi1pZj1cIlVzZXJEYXRhICE9IG51bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxyb3V0ZXItbGluayBjbGFzcz1cIm5hdi1saW5rXCIgOnRhZz1cIihpdGVtLmNoaWxkcy5sZW5ndGggPiAwID8gJ3NwYW4nIDogJ2EnKVwiIDp0bz1cIihpdGVtLmNoaWxkcy5sZW5ndGggPiAwID8gJyMnIDogaXRlbS5saW5rKVwiIHYtaWY9XCJpdGVtLmlzX3NlcGFyYXRvciAhPSAxXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXNcIiA6Y2xhc3M9XCJpdGVtLmljb25cIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3JvdXRlci1saW5rPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gdi1pZj1cIml0ZW0uaXNfc2VwYXJhdG9yID09IDFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhc1wiIDpjbGFzcz1cIml0ZW0uaWNvblwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwibmF2IG5hdi10cmVldmlld1wiIHYtaWY9XCJpdGVtLmlzX3NlcGFyYXRvciAhPSAxICYmIGl0ZW0uY2hpbGRzLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbVwiIHYtZm9yPVwiY2hpbGQgb2YgaXRlbS5jaGlsZHNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJvdXRlci1saW5rIHRhZz1cImFcIiBjbGFzcz1cIm5hdi1saW5rXCIgOnRvPVwiY2hpbGQubGlua1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1kb3QtY2lyY2xlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGNoaWxkLm5hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9yb3V0ZXItbGluaz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPC9uYXY+XG4gICAgICAgICAgICA8YnIgLz5cbiAgICAgICAgICAgIDxiciAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImxvZ2luLWZvb3Rlci1tZW51XCI+PC9kaXY+XG4gICAgPC9hc2lkZT5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gICAgZGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG1lbnU6IFtdLFxuICAgICAgICAgICAgb3JnYW5pemF0aW9uVHlwZUxpc3Q6IFtdLFxuICAgICAgICAgICAgb3JnYW5pemF0aW9uVHlwZTogMFxuICAgICAgICB9O1xuICAgIH0sXG4gICAgbW91bnRlZCgpIHtcbiAgICAgICAgaWYod2luZG93LkFUID09IFwiXCIpIHtcbiAgICAgICAgICAgdGhpcy5Vc2VyRGF0YSA9IG51bGw7XG4gICAgICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgndXNlckRhdGFJRicpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYodGhpcy5Vc2VyRGF0YSAhPSBudWxsKSB7XG4gICAgICAgICAgICBheGlvc1xuICAgICAgICAgICAgICAgIC5wb3N0KFxuICAgICAgICAgICAgICAgICAgICBcIi9hcGkvbWVudVwiLFxuICAgICAgICAgICAgICAgICAgICB7fSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF1dGhvcml6YXRpb246IEFULFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAudGhlbigocmVzcCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1lbnUgPSByZXNwLmRhdGE7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sb2FkT3JnYW5pemF0aW9uVHlwZSgpO1xuICAgIH0sXG4gICAgbWV0aG9kczoge1xuICAgICAgICBsb2FkT3JnYW5pemF0aW9uVHlwZSgpIHtcbiAgICAgICAgICAgIGF4aW9zLmdldCgkdXJsUGxhdGZvcm0gKyBcIi9hcGkvb3JnYW5pemF0aW9uc1R5cGVHcm91cGVkXCIsIHt9LCB7fSkudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgaXRlbXMgPSByZXNwb25zZS5kYXRhO1xuICAgICAgICAgICAgICAgIGxldCBfYXJyID0gW107XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaXRlbSBvZiBpdGVtcykge1xuICAgICAgICAgICAgICAgICAgICBfYXJyLnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMub3JnYW5pemF0aW9uVHlwZUxpc3QgPSBfYXJyO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGdvVG9Ib21lKGlkKSB7XG4gICAgICAgICAgICBpZih0aGlzLiRyb3V0ZS5wYXRoICE9IFwiL1wiKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goJy8nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNldFRpbWVvdXQoXyA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcmdhbml6YXRpb25UeXBlID0gaWQ7XG4gICAgICAgICAgICAgICAgdGhpcy4kcm9vdC4kZW1pdCgndXBkYXRlT3JnYW5pemF0aW9uVHlwZScsIGlkKTtcbiAgICAgICAgICAgICAgICBqUXVlcnkoJ2h0bWwsIGJvZHknKS5hbmltYXRlKHtcbiAgICAgICAgICAgICAgICAgICAgc2Nyb2xsVG9wOiBqUXVlcnkoJy5vcmdhbml6YXRpb25zLXRpdGxlJykub2Zmc2V0KCkudG9wXG4gICAgICAgICAgICAgICAgfSwgNTAwKTtcbiAgICAgICAgICAgIH0sIDEwMDApO1xuICAgICAgICB9LFxuICAgICAgICBnb1RvUGxhdGZvcm0oKSB7XG4gICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHdpbmRvdy4kdXJsUGxhdGZvcm07XG4gICAgICAgIH1cbiAgICB9LFxufTtcbjwvc2NyaXB0PlxuPHN0eWxlPlxuLmJyYW5kLWxpbmsge1xuICAgIHBhZGRpbmc6IDJweDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG4udXNlci1wYW5lbCAuaW5mbyAuZC1ibG9jayB7XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xufVxuPC9zdHlsZT5cbiJdLCJuYW1lcyI6WyJkYXRhIiwibWVudSIsIm9yZ2FuaXphdGlvblR5cGVMaXN0Iiwib3JnYW5pemF0aW9uVHlwZSIsIm1vdW50ZWQiLCJfdGhpcyIsIndpbmRvdyIsIkFUIiwiVXNlckRhdGEiLCJsb2NhbFN0b3JhZ2UiLCJyZW1vdmVJdGVtIiwiYXhpb3MiLCJwb3N0IiwiaGVhZGVycyIsIkF1dGhvcml6YXRpb24iLCJ0aGVuIiwicmVzcCIsImxvYWRPcmdhbml6YXRpb25UeXBlIiwibWV0aG9kcyIsIl90aGlzMiIsImdldCIsIiR1cmxQbGF0Zm9ybSIsInJlc3BvbnNlIiwiaXRlbXMiLCJfYXJyIiwiX2l0ZXJhdG9yIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJfc3RlcCIsInMiLCJuIiwiZG9uZSIsIml0ZW0iLCJ2YWx1ZSIsInB1c2giLCJlcnIiLCJlIiwiZiIsImdvVG9Ib21lIiwiaWQiLCJfdGhpczMiLCIkcm91dGUiLCJwYXRoIiwiJHJvdXRlciIsInNldFRpbWVvdXQiLCJfIiwiJHJvb3QiLCIkZW1pdCIsImpRdWVyeSIsImFuaW1hdGUiLCJzY3JvbGxUb3AiLCJvZmZzZXQiLCJ0b3AiLCJnb1RvUGxhdGZvcm0iLCJsb2NhdGlvbiIsImhyZWYiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/widgets/SidebarWidget.vue?vue&type=script&lang=js&\n");

/***/ }),

/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/DashboardComponent.vue?vue&type=template&id=01ab55f4&":
/*!************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/DashboardComponent.vue?vue&type=template&id=01ab55f4& ***!
  \************************************************************************************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   render: () => (/* binding */ render),\n/* harmony export */   staticRenderFns: () => (/* binding */ staticRenderFns)\n/* harmony export */ });\nvar render = function render() {\n  var _vm = this,\n    _c = _vm._self._c;\n  return _vm._m(0);\n};\nvar staticRenderFns = [function () {\n  var _vm = this,\n    _c = _vm._self._c;\n  return _c(\"div\", [_c(\"br\"), _vm._v(\" \"), _c(\"div\", {\n    staticClass: \"col-lg-12\"\n  }, [_c(\"section\", {\n    staticClass: \"content\"\n  }, [_c(\"div\", {\n    staticClass: \"container-fluid\"\n  }, [_c(\"div\", {\n    staticClass: \"card-group\"\n  }, [_c(\"div\", {\n    staticClass: \"card\"\n  }, [_c(\"div\", {\n    staticClass: \"card-body\"\n  }, [_c(\"div\", {\n    staticClass: \"text-muted text-right\"\n  }, [_c(\"i\", {\n    staticClass: \"fa fa-users c-icon\"\n  })]), _vm._v(\" \"), _c(\"div\", {\n    staticClass: \"text-value-lg\"\n  }, [_vm._v(\"0\")]), _vm._v(\" \"), _c(\"small\", {\n    staticClass: \"text-muted text-uppercase font-weight-bold\"\n  }, [_vm._v(\"Dato 1\")]), _vm._v(\" \"), _c(\"div\", {\n    staticClass: \"progress progress-xs mt-3 mb-0\"\n  }, [_c(\"div\", {\n    staticClass: \"progress-bar bg-info\",\n    staticStyle: {\n      width: \"100%\"\n    },\n    attrs: {\n      role: \"progressbar\",\n      \"aria-valuenow\": \"100\",\n      \"aria-valuemin\": \"0\",\n      \"aria-valuemax\": \"100\"\n    }\n  })])])]), _vm._v(\" \"), _c(\"div\", {\n    staticClass: \"card\"\n  }, [_c(\"div\", {\n    staticClass: \"card-body\"\n  }, [_c(\"div\", {\n    staticClass: \"text-muted text-right\"\n  }, [_c(\"i\", {\n    staticClass: \"fa fa-cubes c-icon\"\n  })]), _vm._v(\" \"), _c(\"div\", {\n    staticClass: \"text-value-lg\"\n  }, [_vm._v(\"0\")]), _vm._v(\" \"), _c(\"small\", {\n    staticClass: \"text-muted text-uppercase font-weight-bold\"\n  }, [_vm._v(\"Dato 2\")]), _vm._v(\" \"), _c(\"div\", {\n    staticClass: \"progress progress-xs mt-3 mb-0\"\n  }, [_c(\"div\", {\n    staticClass: \"progress-bar bg-success\",\n    staticStyle: {\n      width: \"100%\"\n    },\n    attrs: {\n      role: \"progressbar\",\n      \"aria-valuenow\": \"100\",\n      \"aria-valuemin\": \"0\",\n      \"aria-valuemax\": \"100\"\n    }\n  })])])])]), _vm._v(\" \"), _c(\"br\"), _vm._v(\" \"), _c(\"div\", {\n    staticClass: \"row\"\n  }, [_c(\"section\", {\n    staticClass: \"col-md-6 connectedSortable text-center\"\n  }, [_c(\"div\", {\n    staticClass: \"card card-success\"\n  }, [_c(\"div\", {\n    staticClass: \"card-header\"\n  }, [_c(\"h3\", {\n    staticClass: \"card-title\"\n  }, [_c(\"i\", {\n    staticClass: \"fas fa-chart-pie mr-1\"\n  }), _vm._v(\"\\n                  Diagrama 1\\n                \")])]), _vm._v(\" \"), _c(\"div\", {\n    staticClass: \"card-body\"\n  }, [_c(\"div\", {\n    staticClass: \"chart\",\n    staticStyle: {\n      position: \"relative\",\n      height: \"250px\"\n    },\n    attrs: {\n      id: \"revenue-chart1\"\n    }\n  }, [_c(\"canvas\", {\n    staticStyle: {\n      height: \"250px\"\n    },\n    attrs: {\n      id: \"graph2\",\n      height: \"250\"\n    }\n  })])])])]), _vm._v(\" \"), _c(\"section\", {\n    staticClass: \"col-md-6 connectedSortable text-center\"\n  }, [_c(\"div\", {\n    staticClass: \"card card-danger\"\n  }, [_c(\"div\", {\n    staticClass: \"card-header\"\n  }, [_c(\"h3\", {\n    staticClass: \"card-title\"\n  }, [_c(\"i\", {\n    staticClass: \"fas fa-chart-pie mr-1\"\n  }), _vm._v(\"\\n                  Diagrama 2\\n                \")])]), _vm._v(\" \"), _c(\"div\", {\n    staticClass: \"card-body\"\n  }, [_c(\"div\", {\n    staticClass: \"chart\",\n    staticStyle: {\n      position: \"relative\",\n      height: \"250px\"\n    },\n    attrs: {\n      id: \"revenue-chart2\"\n    }\n  }, [_c(\"canvas\", {\n    staticStyle: {\n      height: \"250px\"\n    },\n    attrs: {\n      id: \"graph1\",\n      height: \"250\"\n    }\n  })])])])])])])])])]);\n}];\nrender._withStripped = true;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz9ydWxlU2V0WzFdLnJ1bGVzWzJdIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9EYXNoYm9hcmRDb21wb25lbnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTAxYWI1NWY0JiIsIm1hcHBpbmdzIjoiOzs7OztBQUFBLElBQUlBLE1BQU0sR0FBRyxTQUFTQSxNQUFNQSxDQUFBLEVBQUc7RUFDN0IsSUFBSUMsR0FBRyxHQUFHLElBQUk7SUFDWkMsRUFBRSxHQUFHRCxHQUFHLENBQUNFLEtBQUssQ0FBQ0QsRUFBRTtFQUNuQixPQUFPRCxHQUFHLENBQUNHLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDbEIsQ0FBQztBQUNELElBQUlDLGVBQWUsR0FBRyxDQUNwQixZQUFZO0VBQ1YsSUFBSUosR0FBRyxHQUFHLElBQUk7SUFDWkMsRUFBRSxHQUFHRCxHQUFHLENBQUNFLEtBQUssQ0FBQ0QsRUFBRTtFQUNuQixPQUFPQSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQ2ZBLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFDUkQsR0FBRyxDQUFDSyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQ1hKLEVBQUUsQ0FBQyxLQUFLLEVBQUU7SUFBRUssV0FBVyxFQUFFO0VBQVksQ0FBQyxFQUFFLENBQ3RDTCxFQUFFLENBQUMsU0FBUyxFQUFFO0lBQUVLLFdBQVcsRUFBRTtFQUFVLENBQUMsRUFBRSxDQUN4Q0wsRUFBRSxDQUFDLEtBQUssRUFBRTtJQUFFSyxXQUFXLEVBQUU7RUFBa0IsQ0FBQyxFQUFFLENBQzVDTCxFQUFFLENBQUMsS0FBSyxFQUFFO0lBQUVLLFdBQVcsRUFB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Q0gsQ0FBQyxDQUNILENBQUMsQ0FDSCxDQUFDO0FBQ0osQ0FBQyxDQUNGO0FBQ0RiLE1BQU0sQ0FBQ2UsYUFBYSxHQUFHLElBQUkiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9EYXNoYm9hcmRDb21wb25lbnQudnVlPzExYjAiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIHJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgdmFyIF92bSA9IHRoaXMsXG4gICAgX2MgPSBfdm0uX3NlbGYuX2NcbiAgcmV0dXJuIF92bS5fbSgwKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtcbiAgZnVuY3Rpb24gKCkge1xuICAgIHZhciBfdm0gPSB0aGlzLFxuICAgICAgX2MgPSBfdm0uX3NlbGYuX2NcbiAgICByZXR1cm4gX2MoXCJkaXZcIiwgW1xuICAgICAgX2MoXCJiclwiKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImNvbC1sZy0xMlwiIH0sIFtcbiAgICAgICAgX2MoXCJzZWN0aW9uXCIsIHsgc3RhdGljQ2xhc3M6IFwiY29udGVudFwiIH0sIFtcbiAgICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImNvbnRhaW5lci1mbHVpZFwiIH0sIFtcbiAgICAgICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiY2FyZC1ncm91cFwiIH0sIFtcbiAgICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJjYXJkXCIgfSwgW1xuICAgICAgICAgICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiY2FyZC1ib2R5XCIgfSwgW1xuICAgICAgICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJ0ZXh0LW11dGVkIHRleHQtcmlnaHRcIiB9LCBbXG4gICAgICAgICAgICAgICAgICAgIF9jKFwiaVwiLCB7IHN0YXRpY0NsYXNzOiBcImZhIGZhLXVzZXJzIGMtaWNvblwiIH0pLFxuICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJ0ZXh0LXZhbHVlLWxnXCIgfSwgW192bS5fdihcIjBcIildKSxcbiAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgXCJzbWFsbFwiLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwidGV4dC1tdXRlZCB0ZXh0LXVwcGVyY2FzZSBmb250LXdlaWdodC1ib2xkXCIsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFtfdm0uX3YoXCJEYXRvIDFcIildXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwicHJvZ3Jlc3MgcHJvZ3Jlc3MteHMgbXQtMyBtYi0wXCIgfSwgW1xuICAgICAgICAgICAgICAgICAgICBfYyhcImRpdlwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwicHJvZ3Jlc3MtYmFyIGJnLWluZm9cIixcbiAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogeyB3aWR0aDogXCIxMDAlXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgcm9sZTogXCJwcm9ncmVzc2JhclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJhcmlhLXZhbHVlbm93XCI6IFwiMTAwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImFyaWEtdmFsdWVtaW5cIjogXCIwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImFyaWEtdmFsdWVtYXhcIjogXCIxMDBcIixcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJjYXJkXCIgfSwgW1xuICAgICAgICAgICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiY2FyZC1ib2R5XCIgfSwgW1xuICAgICAgICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJ0ZXh0LW11dGVkIHRleHQtcmlnaHRcIiB9LCBbXG4gICAgICAgICAgICAgICAgICAgIF9jKFwiaVwiLCB7IHN0YXRpY0NsYXNzOiBcImZhIGZhLWN1YmVzIGMtaWNvblwiIH0pLFxuICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJ0ZXh0LXZhbHVlLWxnXCIgfSwgW192bS5fdihcIjBcIildKSxcbiAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgXCJzbWFsbFwiLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwidGV4dC1tdXRlZCB0ZXh0LXVwcGVyY2FzZSBmb250LXdlaWdodC1ib2xkXCIsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFtfdm0uX3YoXCJEYXRvIDJcIildXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwicHJvZ3Jlc3MgcHJvZ3Jlc3MteHMgbXQtMyBtYi0wXCIgfSwgW1xuICAgICAgICAgICAgICAgICAgICBfYyhcImRpdlwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwicHJvZ3Jlc3MtYmFyIGJnLXN1Y2Nlc3NcIixcbiAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogeyB3aWR0aDogXCIxMDAlXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgcm9sZTogXCJwcm9ncmVzc2JhclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJhcmlhLXZhbHVlbm93XCI6IFwiMTAwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImFyaWEtdmFsdWVtaW5cIjogXCIwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImFyaWEtdmFsdWVtYXhcIjogXCIxMDBcIixcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgIF9jKFwiYnJcIiksXG4gICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJyb3dcIiB9LCBbXG4gICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgIFwic2VjdGlvblwiLFxuICAgICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwiY29sLW1kLTYgY29ubmVjdGVkU29ydGFibGUgdGV4dC1jZW50ZXJcIiB9LFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiY2FyZCBjYXJkLXN1Y2Nlc3NcIiB9LCBbXG4gICAgICAgICAgICAgICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiY2FyZC1oZWFkZXJcIiB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgX2MoXCJoM1wiLCB7IHN0YXRpY0NsYXNzOiBcImNhcmQtdGl0bGVcIiB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgICBfYyhcImlcIiwgeyBzdGF0aWNDbGFzczogXCJmYXMgZmEtY2hhcnQtcGllIG1yLTFcIiB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgICAgICAgICAgICBEaWFncmFtYSAxXFxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJjYXJkLWJvZHlcIiB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJjaGFydFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNTdHlsZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBcInJlbGF0aXZlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBcIjI1MHB4XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IGlkOiBcInJldmVudWUtY2hhcnQxXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFwiY2FudmFzXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogeyBoZWlnaHQ6IFwiMjUwcHhcIiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IGlkOiBcImdyYXBoMlwiLCBoZWlnaHQ6IFwiMjUwXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgIFwic2VjdGlvblwiLFxuICAgICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwiY29sLW1kLTYgY29ubmVjdGVkU29ydGFibGUgdGV4dC1jZW50ZXJcIiB9LFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiY2FyZCBjYXJkLWRhbmdlclwiIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJjYXJkLWhlYWRlclwiIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICBfYyhcImgzXCIsIHsgc3RhdGljQ2xhc3M6IFwiY2FyZC10aXRsZVwiIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9jKFwiaVwiLCB7IHN0YXRpY0NsYXNzOiBcImZhcyBmYS1jaGFydC1waWUgbXItMVwiIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgICAgICAgICAgIERpYWdyYW1hIDJcXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImNhcmQtYm9keVwiIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImNoYXJ0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IFwicmVsYXRpdmVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IFwiMjUwcHhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgaWQ6IFwicmV2ZW51ZS1jaGFydDJcIiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJjYW52YXNcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7IGhlaWdodDogXCIyNTBweFwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgaWQ6IFwiZ3JhcGgxXCIsIGhlaWdodDogXCIyNTBcIiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgIF0pLFxuICAgICAgICBdKSxcbiAgICAgIF0pLFxuICAgIF0pXG4gIH0sXG5dXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSJdLCJuYW1lcyI6WyJyZW5kZXIiLCJfdm0iLCJfYyIsIl9zZWxmIiwiX20iLCJzdGF0aWNSZW5kZXJGbnMiLCJfdiIsInN0YXRpY0NsYXNzIiwic3RhdGljU3R5bGUiLCJ3aWR0aCIsImF0dHJzIiwicm9sZSIsInBvc2l0aW9uIiwiaGVpZ2h0IiwiaWQiLCJfd2l0aFN0cmlwcGVkIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/DashboardComponent.vue?vue&type=template&id=01ab55f4&\n");

/***/ }),

/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/alliance/create.vue?vue&type=template&id=632f584e&":
/*!***************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/alliance/create.vue?vue&type=template&id=632f584e& ***!
  \***************************************************************************************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   render: () => (/* binding */ render),\n/* harmony export */   staticRenderFns: () => (/* binding */ staticRenderFns)\n/* harmony export */ });\nvar render = function render() {\n  var _vm = this,\n    _c = _vm._self._c;\n  return _c(\"div\", [_vm.survey ? _c(\"v-app\", [_c(\"survey\", {\n    attrs: {\n      survey: _vm.survey\n    }\n  })], 1) : _vm._e()], 1);\n};\nvar staticRenderFns = [];\nrender._withStripped = true;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz9ydWxlU2V0WzFdLnJ1bGVzWzJdIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9hbGxpYW5jZS9jcmVhdGUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTYzMmY1ODRlJiIsIm1hcHBpbmdzIjoiOzs7OztBQUFBLElBQUlBLE1BQU0sR0FBRyxTQUFTQSxNQUFNQSxDQUFBLEVBQUc7RUFDN0IsSUFBSUMsR0FBRyxHQUFHLElBQUk7SUFDWkMsRUFBRSxHQUFHRCxHQUFHLENBQUNFLEtBQUssQ0FBQ0QsRUFBRTtFQUNuQixPQUFPQSxFQUFFLENBQ1AsS0FBSyxFQUNMLENBQ0VELEdBQUcsQ0FBQ0csTUFBTSxHQUNORixFQUFFLENBQUMsT0FBTyxFQUFFLENBQUNBLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFBRUcsS0FBSyxFQUFFO01BQUVELE1BQU0sRUFBRUgsR0FBRyxDQUFDRztJQUFPO0VBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FDakVILEdBQUcsQ0FBQ0ssRUFBRSxDQUFDLENBQUMsQ0FDYixFQUNELENBQ0YsQ0FBQztBQUNILENBQUM7QUFDRCxJQUFJQyxlQUFlLEdBQUcsRUFBRTtBQUN4QlAsTUFBTSxDQUFDUSxhQUFhLEdBQUcsSUFBSSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9jb21wb25lbnRzL2FkbWluL2FsbGlhbmNlL2NyZWF0ZS52dWU/YzE4NCJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgcmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICB2YXIgX3ZtID0gdGhpcyxcbiAgICBfYyA9IF92bS5fc2VsZi5fY1xuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICBbXG4gICAgICBfdm0uc3VydmV5XG4gICAgICAgID8gX2MoXCJ2LWFwcFwiLCBbX2MoXCJzdXJ2ZXlcIiwgeyBhdHRyczogeyBzdXJ2ZXk6IF92bS5zdXJ2ZXkgfSB9KV0sIDEpXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgXSxcbiAgICAxXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iXSwibmFtZXMiOlsicmVuZGVyIiwiX3ZtIiwiX2MiLCJfc2VsZiIsInN1cnZleSIsImF0dHJzIiwiX2UiLCJzdGF0aWNSZW5kZXJGbnMiLCJfd2l0aFN0cmlwcGVkIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/alliance/create.vue?vue&type=template&id=632f584e&\n");

/***/ }),

/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/alliance/edit.vue?vue&type=template&id=c7f491b2&":
/*!*************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/alliance/edit.vue?vue&type=template&id=c7f491b2& ***!
  \*************************************************************************************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   render: () => (/* binding */ render),\n/* harmony export */   staticRenderFns: () => (/* binding */ staticRenderFns)\n/* harmony export */ });\nvar render = function render() {\n  var _vm = this,\n    _c = _vm._self._c;\n  return _vm.survey ? _c(\"div\", [_c(\"Survey\", {\n    attrs: {\n      survey: _vm.survey\n    }\n  })], 1) : _vm._e();\n};\nvar staticRenderFns = [];\nrender._withStripped = true;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz9ydWxlU2V0WzFdLnJ1bGVzWzJdIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9hbGxpYW5jZS9lZGl0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1jN2Y0OTFiMiYiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxJQUFJQSxNQUFNLEdBQUcsU0FBU0EsTUFBTUEsQ0FBQSxFQUFHO0VBQzdCLElBQUlDLEdBQUcsR0FBRyxJQUFJO0lBQ1pDLEVBQUUsR0FBR0QsR0FBRyxDQUFDRSxLQUFLLENBQUNELEVBQUU7RUFDbkIsT0FBT0QsR0FBRyxDQUFDRyxNQUFNLEdBQ2JGLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQ0EsRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUFFRyxLQUFLLEVBQUU7TUFBRUQsTUFBTSxFQUFFSCxHQUFHLENBQUNHO0lBQU87RUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUMvREgsR0FBRyxDQUFDSyxFQUFFLENBQUMsQ0FBQztBQUNkLENBQUM7QUFDRCxJQUFJQyxlQUFlLEdBQUcsRUFBRTtBQUN4QlAsTUFBTSxDQUFDUSxhQUFhLEdBQUcsSUFBSSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9jb21wb25lbnRzL2FkbWluL2FsbGlhbmNlL2VkaXQudnVlPzE1NjUiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIHJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgdmFyIF92bSA9IHRoaXMsXG4gICAgX2MgPSBfdm0uX3NlbGYuX2NcbiAgcmV0dXJuIF92bS5zdXJ2ZXlcbiAgICA/IF9jKFwiZGl2XCIsIFtfYyhcIlN1cnZleVwiLCB7IGF0dHJzOiB7IHN1cnZleTogX3ZtLnN1cnZleSB9IH0pXSwgMSlcbiAgICA6IF92bS5fZSgpXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9Il0sIm5hbWVzIjpbInJlbmRlciIsIl92bSIsIl9jIiwiX3NlbGYiLCJzdXJ2ZXkiLCJhdHRycyIsIl9lIiwic3RhdGljUmVuZGVyRm5zIiwiX3dpdGhTdHJpcHBlZCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/alliance/edit.vue?vue&type=template&id=c7f491b2&\n");

/***/ }),

/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/alliance/index.vue?vue&type=template&id=2668e785&":
/*!**************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/alliance/index.vue?vue&type=template&id=2668e785& ***!
  \**************************************************************************************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   render: () => (/* binding */ render),\n/* harmony export */   staticRenderFns: () => (/* binding */ staticRenderFns)\n/* harmony export */ });\nvar render = function render() {\n  var _vm = this,\n    _c = _vm._self._c;\n  return _c(\"v-app\", [_vm.data ? _c(\"v-card\", [_c(\"v-card-title\", [_vm._v(\"\\n      Administración de Alianzas\\n      \"), _c(\"v-spacer\"), _vm._v(\" \"), _c(\"v-text-field\", {\n    attrs: {\n      \"append-icon\": \"mdi-magnify\",\n      label: \"Buscar\",\n      \"single-line\": \"\",\n      \"hide-details\": \"\"\n    },\n    model: {\n      value: _vm.search,\n      callback: function callback($$v) {\n        _vm.search = $$v;\n      },\n      expression: \"search\"\n    }\n  })], 1), _vm._v(\" \"), _c(\"v-data-table\", {\n    staticClass: \"elevation-1\",\n    attrs: {\n      headers: _vm.headers,\n      items: _vm.data,\n      search: _vm.search\n    },\n    scopedSlots: _vm._u([{\n      key: \"item.image\",\n      fn: function fn(_ref) {\n        var item = _ref.item;\n        return [_c(\"v-img\", {\n          attrs: {\n            \"max-height\": \"51\",\n            \"max-width\": \"110\",\n            contain: \"\",\n            src: item.imagen\n          }\n        })];\n      }\n    }, {\n      key: \"item.link\",\n      fn: function fn(_ref2) {\n        var item = _ref2.item;\n        return [_c(\"v-btn\", {\n          attrs: {\n            icon: \"\",\n            href: item.url,\n            color: \"primary\",\n            target: \"_blank\"\n          }\n        }, [_c(\"v-icon\", [_vm._v(\"mdi-open-in-new\")])], 1)];\n      }\n    }, {\n      key: \"item.actions\",\n      fn: function fn(_ref3) {\n        var item = _ref3.item;\n        return [_c(\"v-btn\", {\n          attrs: {\n            color: \"red\",\n            fab: \"\",\n            \"x-small\": \"\",\n            dark: \"\"\n          },\n          on: {\n            click: function click($event) {\n              return _vm.edit(item.id);\n            }\n          }\n        }, [_c(\"v-icon\", [_vm._v(\" mdi-pencil \")])], 1), _vm._v(\" \"), _c(\"v-btn\", {\n          attrs: {\n            color: \"warning\",\n            fab: \"\",\n            \"x-small\": \"\",\n            dark: \"\"\n          },\n          on: {\n            click: function click($event) {\n              return _vm.trash(item.id, item.name);\n            }\n          }\n        }, [_c(\"v-icon\", [_vm._v(\" mdi-delete \")])], 1)];\n      }\n    }], null, false, 984660133)\n  })], 1) : _vm._e()], 1);\n};\nvar staticRenderFns = [];\nrender._withStripped = true;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz9ydWxlU2V0WzFdLnJ1bGVzWzJdIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9hbGxpYW5jZS9pbmRleC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MjY2OGU3ODUmIiwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsSUFBSUEsTUFBTSxHQUFHLFNBQVNBLE1BQU1BLENBQUEsRUFBRztFQUM3QixJQUFJQyxHQUFHLEdBQUcsSUFBSTtJQUNaQyxFQUFFLEdBQUdELEdBQUcsQ0FBQ0UsS0FBSyxDQUFDRCxFQUFFO0VBQ25CLE9BQU9BLEVBQUUsQ0FDUCxPQUFPLEVBQ1AsQ0FDRUQsR0FBRyxDQUFDRyxJQUFJLEdBQ0pGLEVBQUUsQ0FDQSxRQUFRLEVBQ1IsQ0FDRUEsRUFBRSxDQUNBLGNBQWMsRUFDZCxDQUNFRCxHQUFHLENBQUNJLEVBQUUsQ0FBQyw0Q0FBNEMsQ0FBQyxFQUNwREgsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUNkRCxHQUFHLENBQUNJLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFDWEgsRUFBRSxDQUFDLGNBQWMsRUFBRTtJQUNqQkksS0FBSyxFQUFFO01BQ0wsYUFBYSxFQUFFLGFBQWE7TUFDNUJDLEtBQUssRUFBRSxRQUFRO01BQ2YsYUFBYSxFQUFFLEVBQUU7TUFDakIsY0FBYyxFQUFFO0lBQ2xCLENBQUM7SUFDREMsS0FBSyxFQUFFO01BQ0xDLEtBQUssRUFBRVIsR0FBRyxDQUFDUyxNQUFNO01BQ2pCQyxRQUFRLEVBQUUsU0FBQUEsU0FBVUMsR0FBRyxFQUFFO1FBQ3ZCWCxHQUFHLENBQUNTLE1BQU0sR0FBR0UsR0FBRztN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RUFDRCxDQUFDdkMsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDRCxHQUFHLENBQUNJLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDeEMsQ0FDRixDQUFDLENBQ0Y7TUFDSDtJQUNGLENBQUMsQ0FDRixFQUNELElBQUksRUFDSixLQUFLLEVBQ0wsU0FDRjtFQUNGLENBQUMsQ0FBQyxDQUNILEVBQ0QsQ0FDRixDQUFDLEdBQ0RKLEdBQUcsQ0FBQ3lDLEVBQUUsQ0FBQyxDQUFDLENBQ2IsRUFDRCxDQUNGLENBQUM7QUFDSCxDQUFDO0FBQ0QsSUFBSUMsZUFBZSxHQUFHLEVBQUU7QUFDeEIzQyxNQUFNLENBQUM0QyxhQUFhLEdBQUcsSUFBSSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9jb21wb25lbnRzL2FkbWluL2FsbGlhbmNlL2luZGV4LnZ1ZT81NDE4Il0sInNvdXJjZXNDb250ZW50IjpbInZhciByZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gIHZhciBfdm0gPSB0aGlzLFxuICAgIF9jID0gX3ZtLl9zZWxmLl9jXG4gIHJldHVybiBfYyhcbiAgICBcInYtYXBwXCIsXG4gICAgW1xuICAgICAgX3ZtLmRhdGFcbiAgICAgICAgPyBfYyhcbiAgICAgICAgICAgIFwidi1jYXJkXCIsXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgIFwidi1jYXJkLXRpdGxlXCIsXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiXFxuICAgICAgQWRtaW5pc3RyYWNpw7NuIGRlIEFsaWFuemFzXFxuICAgICAgXCIpLFxuICAgICAgICAgICAgICAgICAgX2MoXCJ2LXNwYWNlclwiKSxcbiAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICBfYyhcInYtdGV4dC1maWVsZFwiLCB7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgXCJhcHBlbmQtaWNvblwiOiBcIm1kaS1tYWduaWZ5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IFwiQnVzY2FyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgXCJzaW5nbGUtbGluZVwiOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICAgIFwiaGlkZS1kZXRhaWxzXCI6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIG1vZGVsOiB7XG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IF92bS5zZWFyY2gsXG4gICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IGZ1bmN0aW9uICgkJHYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS5zZWFyY2ggPSAkJHZcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwic2VhcmNoXCIsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgX2MoXCJ2LWRhdGEtdGFibGVcIiwge1xuICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsZXZhdGlvbi0xXCIsXG4gICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IF92bS5oZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgaXRlbXM6IF92bS5kYXRhLFxuICAgICAgICAgICAgICAgICAgc2VhcmNoOiBfdm0uc2VhcmNoLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2NvcGVkU2xvdHM6IF92bS5fdShcbiAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJpdGVtLmltYWdlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgZm46IGZ1bmN0aW9uICh7IGl0ZW0gfSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJ2LWltZ1wiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibWF4LWhlaWdodFwiOiBcIjUxXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm1heC13aWR0aFwiOiBcIjExMFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbjogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYzogaXRlbS5pbWFnZW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJpdGVtLmxpbmtcIixcbiAgICAgICAgICAgICAgICAgICAgICBmbjogZnVuY3Rpb24gKHsgaXRlbSB9KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInYtYnRuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbjogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlZjogaXRlbS51cmwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBcInByaW1hcnlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiBcIl9ibGFua1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtfYyhcInYtaWNvblwiLCBbX3ZtLl92KFwibWRpLW9wZW4taW4tbmV3XCIpXSldLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAga2V5OiBcIml0ZW0uYWN0aW9uc1wiLFxuICAgICAgICAgICAgICAgICAgICAgIGZuOiBmdW5jdGlvbiAoeyBpdGVtIH0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidi1idG5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogXCJyZWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFiOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIngtc21hbGxcIjogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGFyazogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0uZWRpdChpdGVtLmlkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtfYyhcInYtaWNvblwiLCBbX3ZtLl92KFwiIG1kaS1wZW5jaWwgXCIpXSldLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ2LWJ0blwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBcIndhcm5pbmdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFiOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIngtc21hbGxcIjogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGFyazogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0udHJhc2goaXRlbS5pZCwgaXRlbS5uYW1lKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtfYyhcInYtaWNvblwiLCBbX3ZtLl92KFwiIG1kaS1kZWxldGUgXCIpXSldLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICAgIDk4NDY2MDEzM1xuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIDFcbiAgICAgICAgICApXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgXSxcbiAgICAxXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iXSwibmFtZXMiOlsicmVuZGVyIiwiX3ZtIiwiX2MiLCJfc2VsZiIsImRhdGEiLCJfdiIsImF0dHJzIiwibGFiZWwiLCJtb2RlbCIsInZhbHVlIiwic2VhcmNoIiwiY2FsbGJhY2siLCIkJHYiLCJleHByZXNzaW9uIiwic3RhdGljQ2xhc3MiLCJoZWFkZXJzIiwiaXRlbXMiLCJzY29wZWRTbG90cyIsIl91Iiwia2V5IiwiZm4iLCJfcmVmIiwiaXRlbSIsImNvbnRhaW4iLCJzcmMiLCJpbWFnZW4iLCJfcmVmMiIsImljb24iLCJocmVmIiwidXJsIiwiY29sb3IiLCJ0YXJnZXQiLCJfcmVmMyIsImZhYiIsImRhcmsiLCJvbiIsImNsaWNrIiwiJGV2ZW50IiwiZWRpdCIsImlkIiwidHJhc2giLCJuYW1lIiwiX2UiLCJzdGF0aWNSZW5kZXJGbnMiLCJfd2l0aFN0cmlwcGVkIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/alliance/index.vue?vue&type=template&id=2668e785&\n");

/***/ }),

/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/banner/create.vue?vue&type=template&id=4b6a9904&":
/*!*************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/banner/create.vue?vue&type=template&id=4b6a9904& ***!
  \*************************************************************************************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   render: () => (/* binding */ render),\n/* harmony export */   staticRenderFns: () => (/* binding */ staticRenderFns)\n/* harmony export */ });\nvar render = function render() {\n  var _vm = this,\n    _c = _vm._self._c;\n  return _vm.survey ? _c(\"div\", [_c(\"Survey\", {\n    attrs: {\n      survey: _vm.survey\n    }\n  })], 1) : _vm._e();\n};\nvar staticRenderFns = [];\nrender._withStripped = true;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz9ydWxlU2V0WzFdLnJ1bGVzWzJdIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9iYW5uZXIvY3JlYXRlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00YjZhOTkwNCYiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxJQUFJQSxNQUFNLEdBQUcsU0FBU0EsTUFBTUEsQ0FBQSxFQUFHO0VBQzdCLElBQUlDLEdBQUcsR0FBRyxJQUFJO0lBQ1pDLEVBQUUsR0FBR0QsR0FBRyxDQUFDRSxLQUFLLENBQUNELEVBQUU7RUFDbkIsT0FBT0QsR0FBRyxDQUFDRyxNQUFNLEdBQ2JGLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQ0EsRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUFFRyxLQUFLLEVBQUU7TUFBRUQsTUFBTSxFQUFFSCxHQUFHLENBQUNHO0lBQU87RUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUMvREgsR0FBRyxDQUFDSyxFQUFFLENBQUMsQ0FBQztBQUNkLENBQUM7QUFDRCxJQUFJQyxlQUFlLEdBQUcsRUFBRTtBQUN4QlAsTUFBTSxDQUFDUSxhQUFhLEdBQUcsSUFBSSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9jb21wb25lbnRzL2FkbWluL2Jhbm5lci9jcmVhdGUudnVlP2NmYjIiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIHJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgdmFyIF92bSA9IHRoaXMsXG4gICAgX2MgPSBfdm0uX3NlbGYuX2NcbiAgcmV0dXJuIF92bS5zdXJ2ZXlcbiAgICA/IF9jKFwiZGl2XCIsIFtfYyhcIlN1cnZleVwiLCB7IGF0dHJzOiB7IHN1cnZleTogX3ZtLnN1cnZleSB9IH0pXSwgMSlcbiAgICA6IF92bS5fZSgpXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9Il0sIm5hbWVzIjpbInJlbmRlciIsIl92bSIsIl9jIiwiX3NlbGYiLCJzdXJ2ZXkiLCJhdHRycyIsIl9lIiwic3RhdGljUmVuZGVyRm5zIiwiX3dpdGhTdHJpcHBlZCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/banner/create.vue?vue&type=template&id=4b6a9904&\n");

/***/ }),

/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/banner/edit.vue?vue&type=template&id=3ec569dc&":
/*!***********************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/banner/edit.vue?vue&type=template&id=3ec569dc& ***!
  \***********************************************************************************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   render: () => (/* binding */ render),\n/* harmony export */   staticRenderFns: () => (/* binding */ staticRenderFns)\n/* harmony export */ });\nvar render = function render() {\n  var _vm = this,\n    _c = _vm._self._c;\n  return _vm.survey ? _c(\"div\", [_c(\"Survey\", {\n    attrs: {\n      survey: _vm.survey\n    }\n  })], 1) : _vm._e();\n};\nvar staticRenderFns = [];\nrender._withStripped = true;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz9ydWxlU2V0WzFdLnJ1bGVzWzJdIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9iYW5uZXIvZWRpdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9M2VjNTY5ZGMmIiwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsSUFBSUEsTUFBTSxHQUFHLFNBQVNBLE1BQU1BLENBQUEsRUFBRztFQUM3QixJQUFJQyxHQUFHLEdBQUcsSUFBSTtJQUNaQyxFQUFFLEdBQUdELEdBQUcsQ0FBQ0UsS0FBSyxDQUFDRCxFQUFFO0VBQ25CLE9BQU9ELEdBQUcsQ0FBQ0csTUFBTSxHQUNiRixFQUFFLENBQUMsS0FBSyxFQUFFLENBQUNBLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFBRUcsS0FBSyxFQUFFO01BQUVELE1BQU0sRUFBRUgsR0FBRyxDQUFDRztJQUFPO0VBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FDL0RILEdBQUcsQ0FBQ0ssRUFBRSxDQUFDLENBQUM7QUFDZCxDQUFDO0FBQ0QsSUFBSUMsZUFBZSxHQUFHLEVBQUU7QUFDeEJQLE1BQU0sQ0FBQ1EsYUFBYSxHQUFHLElBQUkiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9iYW5uZXIvZWRpdC52dWU/NmViMCJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgcmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICB2YXIgX3ZtID0gdGhpcyxcbiAgICBfYyA9IF92bS5fc2VsZi5fY1xuICByZXR1cm4gX3ZtLnN1cnZleVxuICAgID8gX2MoXCJkaXZcIiwgW19jKFwiU3VydmV5XCIsIHsgYXR0cnM6IHsgc3VydmV5OiBfdm0uc3VydmV5IH0gfSldLCAxKVxuICAgIDogX3ZtLl9lKClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iXSwibmFtZXMiOlsicmVuZGVyIiwiX3ZtIiwiX2MiLCJfc2VsZiIsInN1cnZleSIsImF0dHJzIiwiX2UiLCJzdGF0aWNSZW5kZXJGbnMiLCJfd2l0aFN0cmlwcGVkIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/banner/edit.vue?vue&type=template&id=3ec569dc&\n");

/***/ }),

/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/banner/index.vue?vue&type=template&id=74c3d0fa&":
/*!************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/banner/index.vue?vue&type=template&id=74c3d0fa& ***!
  \************************************************************************************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   render: () => (/* binding */ render),\n/* harmony export */   staticRenderFns: () => (/* binding */ staticRenderFns)\n/* harmony export */ });\nvar render = function render() {\n  var _vm = this,\n    _c = _vm._self._c;\n  return _c(\"v-app\", [_vm.data ? _c(\"v-card\", [_c(\"v-card-title\", [_vm._v(\"\\n      Administración de Banners\\n      \"), _c(\"v-spacer\"), _vm._v(\" \"), _c(\"v-text-field\", {\n    attrs: {\n      \"append-icon\": \"mdi-magnify\",\n      label: \"Buscar\",\n      \"single-line\": \"\",\n      \"hide-details\": \"\"\n    },\n    model: {\n      value: _vm.search,\n      callback: function callback($$v) {\n        _vm.search = $$v;\n      },\n      expression: \"search\"\n    }\n  })], 1), _vm._v(\" \"), _c(\"v-data-table\", {\n    staticClass: \"elevation-1\",\n    attrs: {\n      headers: _vm.headers,\n      items: _vm.data,\n      search: _vm.search\n    },\n    scopedSlots: _vm._u([{\n      key: \"item.image\",\n      fn: function fn(_ref) {\n        var item = _ref.item;\n        return [_c(\"v-img\", {\n          attrs: {\n            \"max-height\": \"51\",\n            \"max-width\": \"90\",\n            contain: \"\",\n            src: item.imagen\n          }\n        })];\n      }\n    }, {\n      key: \"item.actions\",\n      fn: function fn(_ref2) {\n        var item = _ref2.item;\n        return [_c(\"v-btn\", {\n          attrs: {\n            color: \"primary\",\n            fab: \"\",\n            \"x-small\": \"\",\n            dark: \"\"\n          },\n          on: {\n            click: function click($event) {\n              return _vm.edit(item.id);\n            }\n          }\n        }, [_c(\"v-icon\", [_vm._v(\" mdi-pencil \")])], 1), _vm._v(\" \"), _c(\"v-btn\", {\n          attrs: {\n            color: \"warning\",\n            fab: \"\",\n            \"x-small\": \"\",\n            dark: \"\"\n          },\n          on: {\n            click: function click($event) {\n              return _vm.trash(item.id, item.title);\n            }\n          }\n        }, [_c(\"v-icon\", [_vm._v(\" mdi-delete \")])], 1)];\n      }\n    }], null, false, 3450691413)\n  })], 1) : _vm._e()], 1);\n};\nvar staticRenderFns = [];\nrender._withStripped = true;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz9ydWxlU2V0WzFdLnJ1bGVzWzJdIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9iYW5uZXIvaW5kZXgudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTc0YzNkMGZhJiIsIm1hcHBpbmdzIjoiOzs7OztBQUFBLElBQUlBLE1BQU0sR0FBRyxTQUFTQSxNQUFNQSxDQUFBLEVBQUc7RUFDN0IsSUFBSUMsR0FBRyxHQUFHLElBQUk7SUFDWkMsRUFBRSxHQUFHRCxHQUFHLENBQUNFLEtBQUssQ0FBQ0QsRUFBRTtFQUNuQixPQUFPQSxFQUFFLENBQ1AsT0FBTyxFQUNQLENBQ0VELEdBQUcsQ0FBQ0csSUFBSSxHQUNKRixFQUFFLENBQ0EsUUFBUSxFQUNSLENBQ0VBLEVBQUUsQ0FDQSxjQUFjLEVBQ2QsQ0FDRUQsR0FBRyxDQUFDSSxFQUFFLENBQUMsMkNBQTJDLENBQUMsRUFDbkRILEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFDZEQsR0FBRyxDQUFDSSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQ1hILEVBQUUsQ0FBQyxjQUFjLEVBQUU7SUFDakJJLEtBQUssRUFBRTtNQUNMLGFBQWEsRUFBRSxhQUFhO01BQzVCQyxLQUFLLEVBQUUsUUFBUTtNQUNmLGFBQWEsRUFBRSxFQUFFO01BQ2pCLGNBQWMsRUFBRTtJQUNsQixDQUFDO0lBQ0RDLEtBQUssRUFBRTtNQUNMQyxLQUFLLEVBQUVSLEdBQUcsQ0FBQ1MsTUFBTTtNQUNqQkMsUUFBUSxFQUFFLFNBQUFBLFNBQVVDLEdBQUcsRUFBRTtRQUN2QlgsR0FBRyxDQUFDUyxNQUFNLEdBQUdFLEdBQUc7TUFDbEIsQ0FBQztNQUNEQyxVQUFVLEVBQUU7SUFDZDtFQUNGLENBQUMsQ0FBQyxDQUNILEVBQ0QsQ0FDRixDQUFDLEVBQ0RaLEdBQUcsQ0FBQ0ksRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUNYSCxFQUFFLENBQUMsY0FBYyxFQUFFO0lBQ2pCWSxXQUFXLEVBQUUsYUFBYTtJQUMxQlIsS0FBSyxFQUFFO01BQ0xTLE9BQU8sRUFBRWQsR0FBRyxDQUFDYyxPQUFPO01BQ3BCQyxLQUFLLEVBQUVmLEdBQUcsQ0FBQ0csSUFBSTtNQUNmTSxNQUFNLEVBQUVULEdBQUcsQ0FBQ1M7SUFDZCxDQUFDO0lBQ0RPLFdBQVcsRUFBRWhCLEdBQUcsQ0FBQ2lCLEVBQUUsQ0FDakIsQ0FDRTtNQUNFQyxHQUFHLEVBQUUsWUFBWTtNQUNqQkMsRUFBRSxFQUFFLFNBQUFBLEdBQUFDLElBQUEsRUFBb0I7UUFBQSxJQUFSQyxJQUFJLEdBQUFELElBQUEsQ0FBSkMsSUFBSTtRQUNsQixPQUFPLENBQ0xwQixFQUFFLENBQUMsT0FBTyxFQUFFO1VBQ1ZJLEtBQUssRUFBRTtZQUNMLFlBQVksRUFBRSxJQUFJO1lBQ2xCLFdBQVcsRUFBRSxJQUFJO1lBQ2pCaUIsT0FBTyxFQUFFLEVBQUU7WUFDWEMsR0FBRyxFQUFFRixJQUFJLENBQUNHO1VBQ1o7UUFDRixDQUFDLENBQUMsQ0FDSDtNQUNIO0lBQ0YsQ0FBQyxFQUNEO01BQ0VOLEdBQUcsRUFBRSxjQUFjO01BQ25CQyxFQUFFLEVBQUUsU0FBQUEsR0FBQU0sS0FBQSxFQUFvQjtRQUFBLElBQVJKLElBQUksR0FBQUksS0FBQSxDQUFKSixJQUFJO1FBQ2xCLE9BQU8sQ0FDTHBCLEVBQUUsQ0FDQSxPQUFPLEVBQ1A7VUFDRUksS0FBSyxFQUFFO1lBQ0xxQixLQUFLLEVBQUUsU0FBUztZQUNoQkMsR0FBRyxFQUFFLEVBQUU7WUFDUCxTQUFTLEVBQUUsRUFBRTtZQUNiQyxJQUFJLEVBQUU7VUFDUixDQUFDO1VBQ0RDLEVBQUUsRUFBRTtZQUNGQyxLQUFLLEVBQUUsU0FBQUEsTUFBVUMsTUFBTSxFQUFFO2NBQ3ZCLE9BQU8vQixHQUFHLENBQUNnQyxJQUFJLENBQUNYLElBQUksQ0FBQ1ksRUFBRSxDQUFDO1lBQzFCO1VBQ0Y7UUFDRixDQUFDLEVBQ0QsQ0FBQ2hDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQ0QsR0FBRyxDQUFDSSxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQ3hDLENBQ0YsQ0FBQyxFQUNESixHQUFHLENBQUNJLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFDWEgsRUFBRSxDQUNBLE9BQU8sRUFDUDtVQUNFSSxLQUFLLEVBQUU7WUFDTHFCLEtBQUssRUFBRSxTQUFTO1lBQ2hCQyxHQUFHLEVBQUUsRUFBRTtZQUNQLFNBQVMsRUFBRSxFQUFFO1lBQ2JDLElBQUksRUFBRTtVQUNSLENBQUM7VUFDREMsRUFBRSxFQUFFO1lBQ0ZDLEtBQUssRUFBRSxTQUFBQSxNQUFVQyxNQUFNLEVBQUU7Y0FDdkIsT0FBTy9CLEdBQUcsQ0FBQ2tDLEtBQUssQ0FBQ2IsSUFBSSxDQUFDWSxFQUFFLEVBQUVaLElBQUksQ0FBQ2MsS0FBSyxDQUFDO1lBQ3ZDO1VBQ0Y7UUFDRixDQUFDLEVBQ0QsQ0FBQ2xDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQ0QsR0FBRyxDQUFDSSxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQ3hDLENBQ0YsQ0FBQyxDQUNGO01BQ0g7SUFDRixDQUFDLENBQ0YsRUFDRCxJQUFJLEVBQ0osS0FBSyxFQUNMLFVBQ0Y7RUFDRixDQUFDLENBQUMsQ0FDSCxFQUNELENBQ0YsQ0FBQyxHQUNESixHQUFHLENBQUNvQyxFQUFFLENBQUMsQ0FBQyxDQUNiLEVBQ0QsQ0FDRixDQUFDO0FBQ0gsQ0FBQztBQUNELElBQUlDLGVBQWUsR0FBRyxFQUFFO0FBQ3hCdEMsTUFBTSxDQUFDdUMsYUFBYSxHQUFHLElBQUkiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9iYW5uZXIvaW5kZXgudnVlPzJhZWYiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIHJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgdmFyIF92bSA9IHRoaXMsXG4gICAgX2MgPSBfdm0uX3NlbGYuX2NcbiAgcmV0dXJuIF9jKFxuICAgIFwidi1hcHBcIixcbiAgICBbXG4gICAgICBfdm0uZGF0YVxuICAgICAgICA/IF9jKFxuICAgICAgICAgICAgXCJ2LWNhcmRcIixcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgXCJ2LWNhcmQtdGl0bGVcIixcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBfdm0uX3YoXCJcXG4gICAgICBBZG1pbmlzdHJhY2nDs24gZGUgQmFubmVyc1xcbiAgICAgIFwiKSxcbiAgICAgICAgICAgICAgICAgIF9jKFwidi1zcGFjZXJcIiksXG4gICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgX2MoXCJ2LXRleHQtZmllbGRcIiwge1xuICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgIFwiYXBwZW5kLWljb25cIjogXCJtZGktbWFnbmlmeVwiLFxuICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBcIkJ1c2NhclwiLFxuICAgICAgICAgICAgICAgICAgICAgIFwic2luZ2xlLWxpbmVcIjogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgICBcImhpZGUtZGV0YWlsc1wiOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBtb2RlbDoge1xuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0uc2VhcmNoLFxuICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiBmdW5jdGlvbiAoJCR2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfdm0uc2VhcmNoID0gJCR2XG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcInNlYXJjaFwiLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgIF9jKFwidi1kYXRhLXRhYmxlXCIsIHtcbiAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbGV2YXRpb24tMVwiLFxuICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICBoZWFkZXJzOiBfdm0uaGVhZGVycyxcbiAgICAgICAgICAgICAgICAgIGl0ZW1zOiBfdm0uZGF0YSxcbiAgICAgICAgICAgICAgICAgIHNlYXJjaDogX3ZtLnNlYXJjaCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNjb3BlZFNsb3RzOiBfdm0uX3UoXG4gICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiaXRlbS5pbWFnZVwiLFxuICAgICAgICAgICAgICAgICAgICAgIGZuOiBmdW5jdGlvbiAoeyBpdGVtIH0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFwidi1pbWdcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm1heC1oZWlnaHRcIjogXCI1MVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJtYXgtd2lkdGhcIjogXCI5MFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbjogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYzogaXRlbS5pbWFnZW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJpdGVtLmFjdGlvbnNcIixcbiAgICAgICAgICAgICAgICAgICAgICBmbjogZnVuY3Rpb24gKHsgaXRlbSB9KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInYtYnRuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IFwicHJpbWFyeVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWI6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwieC1zbWFsbFwiOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXJrOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAoJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS5lZGl0KGl0ZW0uaWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW19jKFwidi1pY29uXCIsIFtfdm0uX3YoXCIgbWRpLXBlbmNpbCBcIildKV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInYtYnRuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IFwid2FybmluZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWI6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwieC1zbWFsbFwiOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXJrOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAoJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS50cmFzaChpdGVtLmlkLCBpdGVtLnRpdGxlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtfYyhcInYtaWNvblwiLCBbX3ZtLl92KFwiIG1kaS1kZWxldGUgXCIpXSldLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICAgIDM0NTA2OTE0MTNcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAxXG4gICAgICAgICAgKVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgIF0sXG4gICAgMVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9Il0sIm5hbWVzIjpbInJlbmRlciIsIl92bSIsIl9jIiwiX3NlbGYiLCJkYXRhIiwiX3YiLCJhdHRycyIsImxhYmVsIiwibW9kZWwiLCJ2YWx1ZSIsInNlYXJjaCIsImNhbGxiYWNrIiwiJCR2IiwiZXhwcmVzc2lvbiIsInN0YXRpY0NsYXNzIiwiaGVhZGVycyIsIml0ZW1zIiwic2NvcGVkU2xvdHMiLCJfdSIsImtleSIsImZuIiwiX3JlZiIsIml0ZW0iLCJjb250YWluIiwic3JjIiwiaW1hZ2VuIiwiX3JlZjIiLCJjb2xvciIsImZhYiIsImRhcmsiLCJvbiIsImNsaWNrIiwiJGV2ZW50IiwiZWRpdCIsImlkIiwidHJhc2giLCJ0aXRsZSIsIl9lIiwic3RhdGljUmVuZGVyRm5zIiwiX3dpdGhTdHJpcHBlZCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/banner/index.vue?vue&type=template&id=74c3d0fa&\n");

/***/ }),

/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/conference/create.vue?vue&type=template&id=67829e94&":
/*!*****************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/conference/create.vue?vue&type=template&id=67829e94& ***!
  \*****************************************************************************************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   render: () => (/* binding */ render),\n/* harmony export */   staticRenderFns: () => (/* binding */ staticRenderFns)\n/* harmony export */ });\nvar render = function render() {\n  var _vm = this,\n    _c = _vm._self._c;\n  return _vm.survey ? _c(\"div\", [_c(\"Survey\", {\n    attrs: {\n      survey: _vm.survey\n    }\n  })], 1) : _vm._e();\n};\nvar staticRenderFns = [];\nrender._withStripped = true;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz9ydWxlU2V0WzFdLnJ1bGVzWzJdIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9jb25mZXJlbmNlL2NyZWF0ZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9Njc4MjllOTQmIiwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsSUFBSUEsTUFBTSxHQUFHLFNBQVNBLE1BQU1BLENBQUEsRUFBRztFQUM3QixJQUFJQyxHQUFHLEdBQUcsSUFBSTtJQUNaQyxFQUFFLEdBQUdELEdBQUcsQ0FBQ0UsS0FBSyxDQUFDRCxFQUFFO0VBQ25CLE9BQU9ELEdBQUcsQ0FBQ0csTUFBTSxHQUNiRixFQUFFLENBQUMsS0FBSyxFQUFFLENBQUNBLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFBRUcsS0FBSyxFQUFFO01BQUVELE1BQU0sRUFBRUgsR0FBRyxDQUFDRztJQUFPO0VBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FDL0RILEdBQUcsQ0FBQ0ssRUFBRSxDQUFDLENBQUM7QUFDZCxDQUFDO0FBQ0QsSUFBSUMsZUFBZSxHQUFHLEVBQUU7QUFDeEJQLE1BQU0sQ0FBQ1EsYUFBYSxHQUFHLElBQUkiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9jb25mZXJlbmNlL2NyZWF0ZS52dWU/MWQ3MCJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgcmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICB2YXIgX3ZtID0gdGhpcyxcbiAgICBfYyA9IF92bS5fc2VsZi5fY1xuICByZXR1cm4gX3ZtLnN1cnZleVxuICAgID8gX2MoXCJkaXZcIiwgW19jKFwiU3VydmV5XCIsIHsgYXR0cnM6IHsgc3VydmV5OiBfdm0uc3VydmV5IH0gfSldLCAxKVxuICAgIDogX3ZtLl9lKClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iXSwibmFtZXMiOlsicmVuZGVyIiwiX3ZtIiwiX2MiLCJfc2VsZiIsInN1cnZleSIsImF0dHJzIiwiX2UiLCJzdGF0aWNSZW5kZXJGbnMiLCJfd2l0aFN0cmlwcGVkIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/conference/create.vue?vue&type=template&id=67829e94&\n");

/***/ }),

/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/conference/edit.vue?vue&type=template&id=a9cd16bc&":
/*!***************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/conference/edit.vue?vue&type=template&id=a9cd16bc& ***!
  \***************************************************************************************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   render: () => (/* binding */ render),\n/* harmony export */   staticRenderFns: () => (/* binding */ staticRenderFns)\n/* harmony export */ });\nvar render = function render() {\n  var _vm = this,\n    _c = _vm._self._c;\n  return _vm.survey ? _c(\"div\", [_c(\"Survey\", {\n    attrs: {\n      survey: _vm.survey\n    }\n  })], 1) : _vm._e();\n};\nvar staticRenderFns = [];\nrender._withStripped = true;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz9ydWxlU2V0WzFdLnJ1bGVzWzJdIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9jb25mZXJlbmNlL2VkaXQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWE5Y2QxNmJjJiIsIm1hcHBpbmdzIjoiOzs7OztBQUFBLElBQUlBLE1BQU0sR0FBRyxTQUFTQSxNQUFNQSxDQUFBLEVBQUc7RUFDN0IsSUFBSUMsR0FBRyxHQUFHLElBQUk7SUFDWkMsRUFBRSxHQUFHRCxHQUFHLENBQUNFLEtBQUssQ0FBQ0QsRUFBRTtFQUNuQixPQUFPRCxHQUFHLENBQUNHLE1BQU0sR0FDYkYsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDQSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQUVHLEtBQUssRUFBRTtNQUFFRCxNQUFNLEVBQUVILEdBQUcsQ0FBQ0c7SUFBTztFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQy9ESCxHQUFHLENBQUNLLEVBQUUsQ0FBQyxDQUFDO0FBQ2QsQ0FBQztBQUNELElBQUlDLGVBQWUsR0FBRyxFQUFFO0FBQ3hCUCxNQUFNLENBQUNRLGFBQWEsR0FBRyxJQUFJIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vY29uZmVyZW5jZS9lZGl0LnZ1ZT8zOGI5Il0sInNvdXJjZXNDb250ZW50IjpbInZhciByZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gIHZhciBfdm0gPSB0aGlzLFxuICAgIF9jID0gX3ZtLl9zZWxmLl9jXG4gIHJldHVybiBfdm0uc3VydmV5XG4gICAgPyBfYyhcImRpdlwiLCBbX2MoXCJTdXJ2ZXlcIiwgeyBhdHRyczogeyBzdXJ2ZXk6IF92bS5zdXJ2ZXkgfSB9KV0sIDEpXG4gICAgOiBfdm0uX2UoKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSJdLCJuYW1lcyI6WyJyZW5kZXIiLCJfdm0iLCJfYyIsIl9zZWxmIiwic3VydmV5IiwiYXR0cnMiLCJfZSIsInN0YXRpY1JlbmRlckZucyIsIl93aXRoU3RyaXBwZWQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/conference/edit.vue?vue&type=template&id=a9cd16bc&\n");

/***/ }),

/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/conference/gallery.vue?vue&type=template&id=28c127ea&":
/*!******************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/conference/gallery.vue?vue&type=template&id=28c127ea& ***!
  \******************************************************************************************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   render: () => (/* binding */ render),\n/* harmony export */   staticRenderFns: () => (/* binding */ staticRenderFns)\n/* harmony export */ });\nvar render = function render() {\n  var _vm = this,\n    _c = _vm._self._c;\n  return _vm.survey ? _c(\"div\", [_c(\"Survey\", {\n    attrs: {\n      survey: _vm.survey\n    }\n  })], 1) : _vm._e();\n};\nvar staticRenderFns = [];\nrender._withStripped = true;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz9ydWxlU2V0WzFdLnJ1bGVzWzJdIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9jb25mZXJlbmNlL2dhbGxlcnkudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTI4YzEyN2VhJiIsIm1hcHBpbmdzIjoiOzs7OztBQUFBLElBQUlBLE1BQU0sR0FBRyxTQUFTQSxNQUFNQSxDQUFBLEVBQUc7RUFDN0IsSUFBSUMsR0FBRyxHQUFHLElBQUk7SUFDWkMsRUFBRSxHQUFHRCxHQUFHLENBQUNFLEtBQUssQ0FBQ0QsRUFBRTtFQUNuQixPQUFPRCxHQUFHLENBQUNHLE1BQU0sR0FDYkYsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDQSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQUVHLEtBQUssRUFBRTtNQUFFRCxNQUFNLEVBQUVILEdBQUcsQ0FBQ0c7SUFBTztFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQy9ESCxHQUFHLENBQUNLLEVBQUUsQ0FBQyxDQUFDO0FBQ2QsQ0FBQztBQUNELElBQUlDLGVBQWUsR0FBRyxFQUFFO0FBQ3hCUCxNQUFNLENBQUNRLGFBQWEsR0FBRyxJQUFJIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vY29uZmVyZW5jZS9nYWxsZXJ5LnZ1ZT8wNjAxIl0sInNvdXJjZXNDb250ZW50IjpbInZhciByZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gIHZhciBfdm0gPSB0aGlzLFxuICAgIF9jID0gX3ZtLl9zZWxmLl9jXG4gIHJldHVybiBfdm0uc3VydmV5XG4gICAgPyBfYyhcImRpdlwiLCBbX2MoXCJTdXJ2ZXlcIiwgeyBhdHRyczogeyBzdXJ2ZXk6IF92bS5zdXJ2ZXkgfSB9KV0sIDEpXG4gICAgOiBfdm0uX2UoKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSJdLCJuYW1lcyI6WyJyZW5kZXIiLCJfdm0iLCJfYyIsIl9zZWxmIiwic3VydmV5IiwiYXR0cnMiLCJfZSIsInN0YXRpY1JlbmRlckZucyIsIl93aXRoU3RyaXBwZWQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/conference/gallery.vue?vue&type=template&id=28c127ea&\n");

/***/ }),

/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/conference/index.vue?vue&type=template&id=0c664d2c&":
/*!****************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/conference/index.vue?vue&type=template&id=0c664d2c& ***!
  \****************************************************************************************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   render: () => (/* binding */ render),\n/* harmony export */   staticRenderFns: () => (/* binding */ staticRenderFns)\n/* harmony export */ });\nvar render = function render() {\n  var _vm = this,\n    _c = _vm._self._c;\n  return _c(\"v-app\", [_vm.data ? _c(\"v-card\", [_c(\"v-card-title\", [_vm._v(\"\\n      Administración de Congresos\\n      \"), _c(\"v-spacer\"), _vm._v(\" \"), _c(\"v-text-field\", {\n    attrs: {\n      \"append-icon\": \"mdi-magnify\",\n      label: \"Buscar\",\n      \"single-line\": \"\",\n      \"hide-details\": \"\"\n    },\n    model: {\n      value: _vm.search,\n      callback: function callback($$v) {\n        _vm.search = $$v;\n      },\n      expression: \"search\"\n    }\n  })], 1), _vm._v(\" \"), _c(\"v-data-table\", {\n    staticClass: \"elevation-1\",\n    attrs: {\n      headers: _vm.headers,\n      items: _vm.data,\n      search: _vm.search\n    },\n    scopedSlots: _vm._u([{\n      key: \"item.image\",\n      fn: function fn(_ref) {\n        var item = _ref.item;\n        return [_c(\"v-img\", {\n          attrs: {\n            \"max-height\": \"51\",\n            \"max-width\": \"110\",\n            contain: \"\",\n            src: item.imagen\n          }\n        })];\n      }\n    }, {\n      key: \"item.actions\",\n      fn: function fn(_ref2) {\n        var item = _ref2.item;\n        return [_c(\"v-btn\", {\n          attrs: {\n            color: \"primary\",\n            fab: \"\",\n            \"x-small\": \"\",\n            dark: \"\"\n          },\n          on: {\n            click: function click($event) {\n              return _vm.edit(item.id);\n            }\n          }\n        }, [_c(\"v-icon\", [_vm._v(\" mdi-pencil \")])], 1), _vm._v(\" \"), _c(\"v-btn\", {\n          attrs: {\n            color: \"info\",\n            fab: \"\",\n            \"x-small\": \"\",\n            dark: \"\"\n          },\n          on: {\n            click: function click($event) {\n              return _vm.gallery(item.id);\n            }\n          }\n        }, [_c(\"v-icon\", [_vm._v(\" mdi-folder-multiple-image \")])], 1), _vm._v(\" \"), _c(\"v-btn\", {\n          attrs: {\n            color: \"warning\",\n            fab: \"\",\n            \"x-small\": \"\",\n            dark: \"\"\n          },\n          on: {\n            click: function click($event) {\n              return _vm.trash(item.id, item.name);\n            }\n          }\n        }, [_c(\"v-icon\", [_vm._v(\" mdi-delete \")])], 1)];\n      }\n    }], null, false, 2787325646)\n  })], 1) : _vm._e()], 1);\n};\nvar staticRenderFns = [];\nrender._withStripped = true;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz9ydWxlU2V0WzFdLnJ1bGVzWzJdIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9jb25mZXJlbmNlL2luZGV4LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wYzY2NGQyYyYiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxJQUFJQSxNQUFNLEdBQUcsU0FBU0EsTUFBTUEsQ0FBQSxFQUFHO0VBQzdCLElBQUlDLEdBQUcsR0FBRyxJQUFJO0lBQ1pDLEVBQUUsR0FBR0QsR0FBRyxDQUFDRSxLQUFLLENBQUNELEVBQUU7RUFDbkIsT0FBT0EsRUFBRSxDQUNQLE9BQU8sRUFDUCxDQUNFRCxHQUFHLENBQUNHLElBQUksR0FDSkYsRUFBRSxDQUNBLFFBQVEsRUFDUixDQUNFQSxFQUFFLENBQ0EsY0FBYyxFQUNkLENBQ0VELEdBQUcsQ0FBQ0ksRUFBRSxDQUFDLDZDQUE2QyxDQUFDLEVBQ3JESCxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQ2RELEdBQUcsQ0FBQ0ksRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUNYSCxFQUFFLENBQUMsY0FBYyxFQUFFO0lBQ2pCSSxLQUFLLEVBQUU7TUFDTCxhQUFhLEVBQUUsYUFBYTtNQUM1QkMsS0FBSyxFQUFFLFFBQVE7TUFDZixhQUFhLEVBQUUsRUFBRTtNQUNqQixjQUFjLEVBQUU7SUFDbEIsQ0FBQztJQUNEQyxLQUFLLEVBQUU7TUFDTEMsS0FBSyxFQUFFUixHQUFHLENBQUNTLE1BQU07TUFDakJDLFFBQVEsRUFBRSxTQUFBQSxTQUFVQyxHQUFHLEVBQUU7UUFDdkJYLEdBQUcsQ0FBQ1MsTUFBTSxHQUFHRSxHQUFH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O1FBQ0YsQ0FBQyxFQUNELENBQUNuQyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUNELEdBQUcsQ0FBQ0ksRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUN4QyxDQUNGLENBQUMsQ0FDRjtNQUNIO0lBQ0YsQ0FBQyxDQUNGLEVBQ0QsSUFBSSxFQUNKLEtBQUssRUFDTCxVQUNGO0VBQ0YsQ0FBQyxDQUFDLENBQ0gsRUFDRCxDQUNGLENBQUMsR0FDREosR0FBRyxDQUFDcUMsRUFBRSxDQUFDLENBQUMsQ0FDYixFQUNELENBQ0YsQ0FBQztBQUNILENBQUM7QUFDRCxJQUFJQyxlQUFlLEdBQUcsRUFBRTtBQUN4QnZDLE1BQU0sQ0FBQ3dDLGFBQWEsR0FBRyxJQUFJIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vY29uZmVyZW5jZS9pbmRleC52dWU/ZTg2OCJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgcmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICB2YXIgX3ZtID0gdGhpcyxcbiAgICBfYyA9IF92bS5fc2VsZi5fY1xuICByZXR1cm4gX2MoXG4gICAgXCJ2LWFwcFwiLFxuICAgIFtcbiAgICAgIF92bS5kYXRhXG4gICAgICAgID8gX2MoXG4gICAgICAgICAgICBcInYtY2FyZFwiLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICBcInYtY2FyZC10aXRsZVwiLFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgIF92bS5fdihcIlxcbiAgICAgIEFkbWluaXN0cmFjacOzbiBkZSBDb25ncmVzb3NcXG4gICAgICBcIiksXG4gICAgICAgICAgICAgICAgICBfYyhcInYtc3BhY2VyXCIpLFxuICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgIF9jKFwidi10ZXh0LWZpZWxkXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICBcImFwcGVuZC1pY29uXCI6IFwibWRpLW1hZ25pZnlcIixcbiAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogXCJCdXNjYXJcIixcbiAgICAgICAgICAgICAgICAgICAgICBcInNpbmdsZS1saW5lXCI6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgICAgXCJoaWRlLWRldGFpbHNcIjogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgbW9kZWw6IHtcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLnNlYXJjaCxcbiAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjazogZnVuY3Rpb24gKCQkdikge1xuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLnNlYXJjaCA9ICQkdlxuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJzZWFyY2hcIixcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICBfYyhcInYtZGF0YS10YWJsZVwiLCB7XG4gICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWxldmF0aW9uLTFcIixcbiAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgaGVhZGVyczogX3ZtLmhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICBpdGVtczogX3ZtLmRhdGEsXG4gICAgICAgICAgICAgICAgICBzZWFyY2g6IF92bS5zZWFyY2gsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzY29wZWRTbG90czogX3ZtLl91KFxuICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAga2V5OiBcIml0ZW0uaW1hZ2VcIixcbiAgICAgICAgICAgICAgICAgICAgICBmbjogZnVuY3Rpb24gKHsgaXRlbSB9KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcInYtaW1nXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJtYXgtaGVpZ2h0XCI6IFwiNTFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibWF4LXdpZHRoXCI6IFwiMTEwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjOiBpdGVtLmltYWdlbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAga2V5OiBcIml0ZW0uYWN0aW9uc1wiLFxuICAgICAgICAgICAgICAgICAgICAgIGZuOiBmdW5jdGlvbiAoeyBpdGVtIH0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidi1idG5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogXCJwcmltYXJ5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhYjogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ4LXNtYWxsXCI6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhcms6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uICgkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLmVkaXQoaXRlbS5pZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbX2MoXCJ2LWljb25cIiwgW192bS5fdihcIiBtZGktcGVuY2lsIFwiKV0pXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidi1idG5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogXCJpbmZvXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhYjogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ4LXNtYWxsXCI6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhcms6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uICgkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLmdhbGxlcnkoaXRlbS5pZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcInYtaWNvblwiLCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBtZGktZm9sZGVyLW11bHRpcGxlLWltYWdlIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInYtYnRuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IFwid2FybmluZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWI6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwieC1zbWFsbFwiOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXJrOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAoJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS50cmFzaChpdGVtLmlkLCBpdGVtLm5hbWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW19jKFwidi1pY29uXCIsIFtfdm0uX3YoXCIgbWRpLWRlbGV0ZSBcIildKV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgICAgMjc4NzMyNTY0NlxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIDFcbiAgICAgICAgICApXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgXSxcbiAgICAxXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iXSwibmFtZXMiOlsicmVuZGVyIiwiX3ZtIiwiX2MiLCJfc2VsZiIsImRhdGEiLCJfdiIsImF0dHJzIiwibGFiZWwiLCJtb2RlbCIsInZhbHVlIiwic2VhcmNoIiwiY2FsbGJhY2siLCIkJHYiLCJleHByZXNzaW9uIiwic3RhdGljQ2xhc3MiLCJoZWFkZXJzIiwiaXRlbXMiLCJzY29wZWRTbG90cyIsIl91Iiwia2V5IiwiZm4iLCJfcmVmIiwiaXRlbSIsImNvbnRhaW4iLCJzcmMiLCJpbWFnZW4iLCJfcmVmMiIsImNvbG9yIiwiZmFiIiwiZGFyayIsIm9uIiwiY2xpY2siLCIkZXZlbnQiLCJlZGl0IiwiaWQiLCJnYWxsZXJ5IiwidHJhc2giLCJuYW1lIiwiX2UiLCJzdGF0aWNSZW5kZXJGbnMiLCJfd2l0aFN0cmlwcGVkIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/conference/index.vue?vue&type=template&id=0c664d2c&\n");

/***/ }),

/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/course/create.vue?vue&type=template&id=d4aac696&":
/*!*************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/course/create.vue?vue&type=template&id=d4aac696& ***!
  \*************************************************************************************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   render: () => (/* binding */ render),\n/* harmony export */   staticRenderFns: () => (/* binding */ staticRenderFns)\n/* harmony export */ });\nvar render = function render() {\n  var _vm = this,\n    _c = _vm._self._c;\n  return _vm.survey ? _c(\"div\", [_c(\"Survey\", {\n    attrs: {\n      survey: _vm.survey\n    }\n  })], 1) : _vm._e();\n};\nvar staticRenderFns = [];\nrender._withStripped = true;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz9ydWxlU2V0WzFdLnJ1bGVzWzJdIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9jb3Vyc2UvY3JlYXRlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1kNGFhYzY5NiYiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxJQUFJQSxNQUFNLEdBQUcsU0FBU0EsTUFBTUEsQ0FBQSxFQUFHO0VBQzdCLElBQUlDLEdBQUcsR0FBRyxJQUFJO0lBQ1pDLEVBQUUsR0FBR0QsR0FBRyxDQUFDRSxLQUFLLENBQUNELEVBQUU7RUFDbkIsT0FBT0QsR0FBRyxDQUFDRyxNQUFNLEdBQ2JGLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQ0EsRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUFFRyxLQUFLLEVBQUU7TUFBRUQsTUFBTSxFQUFFSCxHQUFHLENBQUNHO0lBQU87RUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUMvREgsR0FBRyxDQUFDSyxFQUFFLENBQUMsQ0FBQztBQUNkLENBQUM7QUFDRCxJQUFJQyxlQUFlLEdBQUcsRUFBRTtBQUN4QlAsTUFBTSxDQUFDUSxhQUFhLEdBQUcsSUFBSSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9jb21wb25lbnRzL2FkbWluL2NvdXJzZS9jcmVhdGUudnVlPzI5NjIiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIHJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgdmFyIF92bSA9IHRoaXMsXG4gICAgX2MgPSBfdm0uX3NlbGYuX2NcbiAgcmV0dXJuIF92bS5zdXJ2ZXlcbiAgICA/IF9jKFwiZGl2XCIsIFtfYyhcIlN1cnZleVwiLCB7IGF0dHJzOiB7IHN1cnZleTogX3ZtLnN1cnZleSB9IH0pXSwgMSlcbiAgICA6IF92bS5fZSgpXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9Il0sIm5hbWVzIjpbInJlbmRlciIsIl92bSIsIl9jIiwiX3NlbGYiLCJzdXJ2ZXkiLCJhdHRycyIsIl9lIiwic3RhdGljUmVuZGVyRm5zIiwiX3dpdGhTdHJpcHBlZCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/course/create.vue?vue&type=template&id=d4aac696&\n");

/***/ }),

/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/course/edit.vue?vue&type=template&id=1486f1fa&":
/*!***********************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/course/edit.vue?vue&type=template&id=1486f1fa& ***!
  \***********************************************************************************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   render: () => (/* binding */ render),\n/* harmony export */   staticRenderFns: () => (/* binding */ staticRenderFns)\n/* harmony export */ });\nvar render = function render() {\n  var _vm = this,\n    _c = _vm._self._c;\n  return _vm.survey ? _c(\"div\", [_c(\"Survey\", {\n    attrs: {\n      survey: _vm.survey\n    }\n  })], 1) : _vm._e();\n};\nvar staticRenderFns = [];\nrender._withStripped = true;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz9ydWxlU2V0WzFdLnJ1bGVzWzJdIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9jb3Vyc2UvZWRpdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MTQ4NmYxZmEmIiwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsSUFBSUEsTUFBTSxHQUFHLFNBQVNBLE1BQU1BLENBQUEsRUFBRztFQUM3QixJQUFJQyxHQUFHLEdBQUcsSUFBSTtJQUNaQyxFQUFFLEdBQUdELEdBQUcsQ0FBQ0UsS0FBSyxDQUFDRCxFQUFFO0VBQ25CLE9BQU9ELEdBQUcsQ0FBQ0csTUFBTSxHQUNiRixFQUFFLENBQUMsS0FBSyxFQUFFLENBQUNBLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFBRUcsS0FBSyxFQUFFO01BQUVELE1BQU0sRUFBRUgsR0FBRyxDQUFDRztJQUFPO0VBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FDL0RILEdBQUcsQ0FBQ0ssRUFBRSxDQUFDLENBQUM7QUFDZCxDQUFDO0FBQ0QsSUFBSUMsZUFBZSxHQUFHLEVBQUU7QUFDeEJQLE1BQU0sQ0FBQ1EsYUFBYSxHQUFHLElBQUkiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9jb3Vyc2UvZWRpdC52dWU/ZjQxMiJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgcmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICB2YXIgX3ZtID0gdGhpcyxcbiAgICBfYyA9IF92bS5fc2VsZi5fY1xuICByZXR1cm4gX3ZtLnN1cnZleVxuICAgID8gX2MoXCJkaXZcIiwgW19jKFwiU3VydmV5XCIsIHsgYXR0cnM6IHsgc3VydmV5OiBfdm0uc3VydmV5IH0gfSldLCAxKVxuICAgIDogX3ZtLl9lKClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iXSwibmFtZXMiOlsicmVuZGVyIiwiX3ZtIiwiX2MiLCJfc2VsZiIsInN1cnZleSIsImF0dHJzIiwiX2UiLCJzdGF0aWNSZW5kZXJGbnMiLCJfd2l0aFN0cmlwcGVkIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/course/edit.vue?vue&type=template&id=1486f1fa&\n");

/***/ }),

/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/course/index.vue?vue&type=template&id=038c1329&":
/*!************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/course/index.vue?vue&type=template&id=038c1329& ***!
  \************************************************************************************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   render: () => (/* binding */ render),\n/* harmony export */   staticRenderFns: () => (/* binding */ staticRenderFns)\n/* harmony export */ });\nvar render = function render() {\n  var _vm = this,\n    _c = _vm._self._c;\n  return _c(\"v-app\", [_vm.data ? _c(\"v-card\", [_c(\"v-card-title\", [_vm._v(\"\\n      Administración de Cursos\\n      \"), _c(\"v-spacer\"), _vm._v(\" \"), _c(\"v-text-field\", {\n    attrs: {\n      \"append-icon\": \"mdi-magnify\",\n      label: \"Buscar\",\n      \"single-line\": \"\",\n      \"hide-details\": \"\"\n    },\n    model: {\n      value: _vm.search,\n      callback: function callback($$v) {\n        _vm.search = $$v;\n      },\n      expression: \"search\"\n    }\n  })], 1), _vm._v(\" \"), _c(\"v-data-table\", {\n    staticClass: \"elevation-1\",\n    attrs: {\n      headers: _vm.headers,\n      items: _vm.data,\n      search: _vm.search\n    },\n    scopedSlots: _vm._u([{\n      key: \"item.actions\",\n      fn: function fn(_ref) {\n        var item = _ref.item;\n        return [_c(\"v-btn\", {\n          attrs: {\n            color: \"red\",\n            fab: \"\",\n            \"x-small\": \"\",\n            dark: \"\"\n          },\n          on: {\n            click: function click($event) {\n              return _vm.edit(item.id);\n            }\n          }\n        }, [_c(\"v-icon\", [_vm._v(\" mdi-pencil \")])], 1), _vm._v(\" \"), _c(\"v-btn\", {\n          attrs: {\n            color: \"warning\",\n            fab: \"\",\n            \"x-small\": \"\",\n            dark: \"\"\n          },\n          on: {\n            click: function click($event) {\n              return _vm.trash(item.id, item.name);\n            }\n          }\n        }, [_c(\"v-icon\", [_vm._v(\" mdi-delete \")])], 1)];\n      }\n    }], null, false, 3153591193)\n  })], 1) : _vm._e()], 1);\n};\nvar staticRenderFns = [];\nrender._withStripped = true;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz9ydWxlU2V0WzFdLnJ1bGVzWzJdIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9jb3Vyc2UvaW5kZXgudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTAzOGMxMzI5JiIsIm1hcHBpbmdzIjoiOzs7OztBQUFBLElBQUlBLE1BQU0sR0FBRyxTQUFTQSxNQUFNQSxDQUFBLEVBQUc7RUFDN0IsSUFBSUMsR0FBRyxHQUFHLElBQUk7SUFDWkMsRUFBRSxHQUFHRCxHQUFHLENBQUNFLEtBQUssQ0FBQ0QsRUFBRTtFQUNuQixPQUFPQSxFQUFFLENBQ1AsT0FBTyxFQUNQLENBQ0VELEdBQUcsQ0FBQ0csSUFBSSxHQUNKRixFQUFFLENBQ0EsUUFBUSxFQUNSLENBQ0VBLEVBQUUsQ0FDQSxjQUFjLEVBQ2QsQ0FDRUQsR0FBRyxDQUFDSSxFQUFFLENBQUMsMENBQTBDLENBQUMsRUFDbERILEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFDZEQsR0FBRyxDQUFDSSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQ1hILEVBQUUsQ0FBQyxjQUFjLEVBQUU7SUFDakJJLEtBQUssRUFBRTtNQUNMLGFBQWEsRUFBRSxhQUFhO01BQzVCQyxLQUFLLEVBQUUsUUFBUTtNQUNmLGFBQWEsRUFBRSxFQUFFO01BQ2pCLGNBQWMsRUFBRTtJQUNsQixDQUFDO0lBQ0RDLEtBQUssRUFBRTtNQUNMQyxLQUFLLEVBQUVSLEdBQUcsQ0FBQ1MsTUFBTTtNQUNqQkMsUUFBUSxFQUFFLFNBQUFBLFNBQVVDLEdBQUcsRUFBRTtRQUN2QlgsR0FBRyxDQUFDUyxNQUFNLEdBQUdFLEdBQUc7TUFDbEIsQ0FBQztNQUNEQyxVQUFVLEVBQUU7SUFDZDtFQUNGLENBQUMsQ0FBQyxDQUNILEVBQ0QsQ0FDRixDQUFDLEVBQ0RaLEdBQUcsQ0FBQ0ksRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUNYSCxFQUFFLENBQUMsY0FBYyxFQUFFO0lBQ2pCWSxXQUFXLEVBQUUsYUFBYTtJQUMxQlIsS0FBSyxFQUFFO01BQ0xTLE9BQU8sRUFBRWQsR0FBRyxDQUFDYyxPQUFPO01BQ3BCQyxLQUFLLEVBQUVmLEdBQUcsQ0FBQ0csSUFBSTtNQUNmTSxNQUFNLEVBQUVULEdBQUcsQ0FBQ1M7SUFDZCxDQUFDO0lBQ0RPLFdBQVcsRUFBRWhCLEdBQUcsQ0FBQ2lCLEVBQUUsQ0FDakIsQ0FDRTtNQUNFQyxHQUFHLEVBQUUsY0FBYztNQUNuQkMsRUFBRSxFQUFFLFNBQUFBLEdBQUFDLElBQUEsRUFBb0I7UUFBQSxJQUFSQyxJQUFJLEdBQUFELElBQUEsQ0FBSkMsSUFBSTtRQUNsQixPQUFPLENBQ0xwQixFQUFFLENBQ0EsT0FBTyxFQUNQO1VBQ0VJLEtBQUssRUFBRTtZQUNMaUIsS0FBSyxFQUFFLEtBQUs7WUFDWkMsR0FBRyxFQUFFLEVBQUU7WUFDUCxTQUFTLEVBQUUsRUFBRTtZQUNiQyxJQUFJLEVBQUU7VUFDUixDQUFDO1VBQ0RDLEVBQUUsRUFBRTtZQUNGQyxLQUFLLEVBQUUsU0FBQUEsTUFBVUMsTUFBTSxFQUFFO2NBQ3ZCLE9BQU8zQixHQUFHLENBQUM0QixJQUFJLENBQUNQLElBQUksQ0FBQ1EsRUFBRSxDQUFDO1lBQzFCO1VBQ0Y7UUFDRixDQUFDLEVBQ0QsQ0FBQzVCLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQ0QsR0FBRyxDQUFDSSxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQ3hDLENBQ0YsQ0FBQyxFQUNESixHQUFHLENBQUNJLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFDWEgsRUFBRSxDQUNBLE9BQU8sRUFDUDtVQUNFSSxLQUFLLEVBQUU7WUFDTGlCLEtBQUssRUFBRSxTQUFTO1lBQ2hCQyxHQUFHLEVBQUUsRUFBRTtZQUNQLFNBQVMsRUFBRSxFQUFFO1lBQ2JDLElBQUksRUFBRTtVQUNSLENBQUM7VUFDREMsRUFBRSxFQUFFO1lBQ0ZDLEtBQUssRUFBRSxTQUFBQSxNQUFVQyxNQUFNLEVBQUU7Y0FDdkIsT0FBTzNCLEdBQUcsQ0FBQzhCLEtBQUssQ0FBQ1QsSUFBSSxDQUFDUSxFQUFFLEVBQUVSLElBQUksQ0FBQ1UsSUFBSSxDQUFDO1lBQ3RDO1VBQ0Y7UUFDRixDQUFDLEVBQ0QsQ0FBQzlCLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQ0QsR0FBRyxDQUFDSSxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQ3hDLENBQ0YsQ0FBQyxDQUNGO01BQ0g7SUFDRixDQUFDLENBQ0YsRUFDRCxJQUFJLEVBQ0osS0FBSyxFQUNMLFVBQ0Y7RUFDRixDQUFDLENBQUMsQ0FDSCxFQUNELENBQ0YsQ0FBQyxHQUNESixHQUFHLENBQUNnQyxFQUFFLENBQUMsQ0FBQyxDQUNiLEVBQ0QsQ0FDRixDQUFDO0FBQ0gsQ0FBQztBQUNELElBQUlDLGVBQWUsR0FBRyxFQUFFO0FBQ3hCbEMsTUFBTSxDQUFDbUMsYUFBYSxHQUFHLElBQUkiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9jb3Vyc2UvaW5kZXgudnVlPzhkNWYiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIHJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgdmFyIF92bSA9IHRoaXMsXG4gICAgX2MgPSBfdm0uX3NlbGYuX2NcbiAgcmV0dXJuIF9jKFxuICAgIFwidi1hcHBcIixcbiAgICBbXG4gICAgICBfdm0uZGF0YVxuICAgICAgICA/IF9jKFxuICAgICAgICAgICAgXCJ2LWNhcmRcIixcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgXCJ2LWNhcmQtdGl0bGVcIixcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBfdm0uX3YoXCJcXG4gICAgICBBZG1pbmlzdHJhY2nDs24gZGUgQ3Vyc29zXFxuICAgICAgXCIpLFxuICAgICAgICAgICAgICAgICAgX2MoXCJ2LXNwYWNlclwiKSxcbiAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICBfYyhcInYtdGV4dC1maWVsZFwiLCB7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgXCJhcHBlbmQtaWNvblwiOiBcIm1kaS1tYWduaWZ5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IFwiQnVzY2FyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgXCJzaW5nbGUtbGluZVwiOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICAgIFwiaGlkZS1kZXRhaWxzXCI6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIG1vZGVsOiB7XG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IF92bS5zZWFyY2gsXG4gICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IGZ1bmN0aW9uICgkJHYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS5zZWFyY2ggPSAkJHZcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwic2VhcmNoXCIsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgX2MoXCJ2LWRhdGEtdGFibGVcIiwge1xuICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsZXZhdGlvbi0xXCIsXG4gICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IF92bS5oZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgaXRlbXM6IF92bS5kYXRhLFxuICAgICAgICAgICAgICAgICAgc2VhcmNoOiBfdm0uc2VhcmNoLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2NvcGVkU2xvdHM6IF92bS5fdShcbiAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJpdGVtLmFjdGlvbnNcIixcbiAgICAgICAgICAgICAgICAgICAgICBmbjogZnVuY3Rpb24gKHsgaXRlbSB9KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInYtYnRuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IFwicmVkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhYjogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ4LXNtYWxsXCI6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhcms6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uICgkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLmVkaXQoaXRlbS5pZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbX2MoXCJ2LWljb25cIiwgW192bS5fdihcIiBtZGktcGVuY2lsIFwiKV0pXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidi1idG5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogXCJ3YXJuaW5nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhYjogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ4LXNtYWxsXCI6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhcms6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uICgkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLnRyYXNoKGl0ZW0uaWQsIGl0ZW0ubmFtZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbX2MoXCJ2LWljb25cIiwgW192bS5fdihcIiBtZGktZGVsZXRlIFwiKV0pXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgICAzMTUzNTkxMTkzXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgMVxuICAgICAgICAgIClcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICBdLFxuICAgIDFcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSJdLCJuYW1lcyI6WyJyZW5kZXIiLCJfdm0iLCJfYyIsIl9zZWxmIiwiZGF0YSIsIl92IiwiYXR0cnMiLCJsYWJlbCIsIm1vZGVsIiwidmFsdWUiLCJzZWFyY2giLCJjYWxsYmFjayIsIiQkdiIsImV4cHJlc3Npb24iLCJzdGF0aWNDbGFzcyIsImhlYWRlcnMiLCJpdGVtcyIsInNjb3BlZFNsb3RzIiwiX3UiLCJrZXkiLCJmbiIsIl9yZWYiLCJpdGVtIiwiY29sb3IiLCJmYWIiLCJkYXJrIiwib24iLCJjbGljayIsIiRldmVudCIsImVkaXQiLCJpZCIsInRyYXNoIiwibmFtZSIsIl9lIiwic3RhdGljUmVuZGVyRm5zIiwiX3dpdGhTdHJpcHBlZCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/course/index.vue?vue&type=template&id=038c1329&\n");

/***/ }),

/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/cycle/create.vue?vue&type=template&id=3c7c97e0&":
/*!************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/cycle/create.vue?vue&type=template&id=3c7c97e0& ***!
  \************************************************************************************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   render: () => (/* binding */ render),\n/* harmony export */   staticRenderFns: () => (/* binding */ staticRenderFns)\n/* harmony export */ });\nvar render = function render() {\n  var _vm = this,\n    _c = _vm._self._c;\n  return _vm.survey ? _c(\"div\", [_c(\"Survey\", {\n    attrs: {\n      survey: _vm.survey\n    }\n  })], 1) : _vm._e();\n};\nvar staticRenderFns = [];\nrender._withStripped = true;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz9ydWxlU2V0WzFdLnJ1bGVzWzJdIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9jeWNsZS9jcmVhdGUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTNjN2M5N2UwJiIsIm1hcHBpbmdzIjoiOzs7OztBQUFBLElBQUlBLE1BQU0sR0FBRyxTQUFTQSxNQUFNQSxDQUFBLEVBQUc7RUFDN0IsSUFBSUMsR0FBRyxHQUFHLElBQUk7SUFDWkMsRUFBRSxHQUFHRCxHQUFHLENBQUNFLEtBQUssQ0FBQ0QsRUFBRTtFQUNuQixPQUFPRCxHQUFHLENBQUNHLE1BQU0sR0FDYkYsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDQSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQUVHLEtBQUssRUFBRTtNQUFFRCxNQUFNLEVBQUVILEdBQUcsQ0FBQ0c7SUFBTztFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQy9ESCxHQUFHLENBQUNLLEVBQUUsQ0FBQyxDQUFDO0FBQ2QsQ0FBQztBQUNELElBQUlDLGVBQWUsR0FBRyxFQUFFO0FBQ3hCUCxNQUFNLENBQUNRLGFBQWEsR0FBRyxJQUFJIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vY3ljbGUvY3JlYXRlLnZ1ZT9mNDdlIl0sInNvdXJjZXNDb250ZW50IjpbInZhciByZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gIHZhciBfdm0gPSB0aGlzLFxuICAgIF9jID0gX3ZtLl9zZWxmLl9jXG4gIHJldHVybiBfdm0uc3VydmV5XG4gICAgPyBfYyhcImRpdlwiLCBbX2MoXCJTdXJ2ZXlcIiwgeyBhdHRyczogeyBzdXJ2ZXk6IF92bS5zdXJ2ZXkgfSB9KV0sIDEpXG4gICAgOiBfdm0uX2UoKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSJdLCJuYW1lcyI6WyJyZW5kZXIiLCJfdm0iLCJfYyIsIl9zZWxmIiwic3VydmV5IiwiYXR0cnMiLCJfZSIsInN0YXRpY1JlbmRlckZucyIsIl93aXRoU3RyaXBwZWQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/cycle/create.vue?vue&type=template&id=3c7c97e0&\n");

/***/ }),

/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/cycle/edit.vue?vue&type=template&id=5bd7b91e&":
/*!**********************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/cycle/edit.vue?vue&type=template&id=5bd7b91e& ***!
  \**********************************************************************************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   render: () => (/* binding */ render),\n/* harmony export */   staticRenderFns: () => (/* binding */ staticRenderFns)\n/* harmony export */ });\nvar render = function render() {\n  var _vm = this,\n    _c = _vm._self._c;\n  return _vm.survey ? _c(\"div\", [_c(\"Survey\", {\n    attrs: {\n      survey: _vm.survey\n    }\n  })], 1) : _vm._e();\n};\nvar staticRenderFns = [];\nrender._withStripped = true;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz9ydWxlU2V0WzFdLnJ1bGVzWzJdIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9jeWNsZS9lZGl0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01YmQ3YjkxZSYiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxJQUFJQSxNQUFNLEdBQUcsU0FBU0EsTUFBTUEsQ0FBQSxFQUFHO0VBQzdCLElBQUlDLEdBQUcsR0FBRyxJQUFJO0lBQ1pDLEVBQUUsR0FBR0QsR0FBRyxDQUFDRSxLQUFLLENBQUNELEVBQUU7RUFDbkIsT0FBT0QsR0FBRyxDQUFDRyxNQUFNLEdBQ2JGLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQ0EsRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUFFRyxLQUFLLEVBQUU7TUFBRUQsTUFBTSxFQUFFSCxHQUFHLENBQUNHO0lBQU87RUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUMvREgsR0FBRyxDQUFDSyxFQUFFLENBQUMsQ0FBQztBQUNkLENBQUM7QUFDRCxJQUFJQyxlQUFlLEdBQUcsRUFBRTtBQUN4QlAsTUFBTSxDQUFDUSxhQUFhLEdBQUcsSUFBSSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9jb21wb25lbnRzL2FkbWluL2N5Y2xlL2VkaXQudnVlP2I0NjMiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIHJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgdmFyIF92bSA9IHRoaXMsXG4gICAgX2MgPSBfdm0uX3NlbGYuX2NcbiAgcmV0dXJuIF92bS5zdXJ2ZXlcbiAgICA/IF9jKFwiZGl2XCIsIFtfYyhcIlN1cnZleVwiLCB7IGF0dHJzOiB7IHN1cnZleTogX3ZtLnN1cnZleSB9IH0pXSwgMSlcbiAgICA6IF92bS5fZSgpXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9Il0sIm5hbWVzIjpbInJlbmRlciIsIl92bSIsIl9jIiwiX3NlbGYiLCJzdXJ2ZXkiLCJhdHRycyIsIl9lIiwic3RhdGljUmVuZGVyRm5zIiwiX3dpdGhTdHJpcHBlZCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/cycle/edit.vue?vue&type=template&id=5bd7b91e&\n");

/***/ }),

/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/cycle/index.vue?vue&type=template&id=60d7246e&":
/*!***********************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/cycle/index.vue?vue&type=template&id=60d7246e& ***!
  \***********************************************************************************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   render: () => (/* binding */ render),\n/* harmony export */   staticRenderFns: () => (/* binding */ staticRenderFns)\n/* harmony export */ });\nvar render = function render() {\n  var _vm = this,\n    _c = _vm._self._c;\n  return _c(\"v-app\", [_vm.data ? _c(\"v-card\", [_c(\"v-card-title\", [_vm._v(\"\\n      Administración de Ciclos\\n      \"), _c(\"v-spacer\"), _vm._v(\" \"), _c(\"v-text-field\", {\n    attrs: {\n      \"append-icon\": \"mdi-magnify\",\n      label: \"Buscar\",\n      \"single-line\": \"\",\n      \"hide-details\": \"\"\n    },\n    model: {\n      value: _vm.search,\n      callback: function callback($$v) {\n        _vm.search = $$v;\n      },\n      expression: \"search\"\n    }\n  })], 1), _vm._v(\" \"), _c(\"v-data-table\", {\n    staticClass: \"elevation-1\",\n    attrs: {\n      headers: _vm.headers,\n      items: _vm.data,\n      search: _vm.search\n    },\n    scopedSlots: _vm._u([{\n      key: \"item.image\",\n      fn: function fn(_ref) {\n        var item = _ref.item;\n        return [_c(\"v-img\", {\n          attrs: {\n            \"max-height\": \"40\",\n            \"max-width\": \"80\",\n            contain: \"\",\n            src: item.imagen\n          }\n        })];\n      }\n    }, {\n      key: \"item.actions\",\n      fn: function fn(_ref2) {\n        var item = _ref2.item;\n        return [_c(\"v-btn\", {\n          attrs: {\n            color: \"red\",\n            fab: \"\",\n            \"x-small\": \"\",\n            dark: \"\"\n          },\n          on: {\n            click: function click($event) {\n              return _vm.edit(item.id);\n            }\n          }\n        }, [_c(\"v-icon\", [_vm._v(\" mdi-pencil \")])], 1), _vm._v(\" \"), _c(\"v-btn\", {\n          attrs: {\n            color: \"warning\",\n            fab: \"\",\n            \"x-small\": \"\",\n            dark: \"\"\n          },\n          on: {\n            click: function click($event) {\n              return _vm.trash(item.id, item.name);\n            }\n          }\n        }, [_c(\"v-icon\", [_vm._v(\" mdi-delete \")])], 1)];\n      }\n    }], null, false, 526602956)\n  })], 1) : _vm._e()], 1);\n};\nvar staticRenderFns = [];\nrender._withStripped = true;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz9ydWxlU2V0WzFdLnJ1bGVzWzJdIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9jeWNsZS9pbmRleC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NjBkNzI0NmUmIiwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsSUFBSUEsTUFBTSxHQUFHLFNBQVNBLE1BQU1BLENBQUEsRUFBRztFQUM3QixJQUFJQyxHQUFHLEdBQUcsSUFBSTtJQUNaQyxFQUFFLEdBQUdELEdBQUcsQ0FBQ0UsS0FBSyxDQUFDRCxFQUFFO0VBQ25CLE9BQU9BLEVBQUUsQ0FDUCxPQUFPLEVBQ1AsQ0FDRUQsR0FBRyxDQUFDRyxJQUFJLEdBQ0pGLEVBQUUsQ0FDQSxRQUFRLEVBQ1IsQ0FDRUEsRUFBRSxDQUNBLGNBQWMsRUFDZCxDQUNFRCxHQUFHLENBQUNJLEVBQUUsQ0FBQywwQ0FBMEMsQ0FBQyxFQUNsREgsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUNkRCxHQUFHLENBQUNJLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFDWEgsRUFBRSxDQUFDLGNBQWMsRUFBRTtJQUNqQkksS0FBSyxFQUFFO01BQ0wsYUFBYSxFQUFFLGFBQWE7TUFDNUJDLEtBQUssRUFBRSxRQUFRO01BQ2YsYUFBYSxFQUFFLEVBQUU7TUFDakIsY0FBYyxFQUFFO0lBQ2xCLENBQUM7SUFDREMsS0FBSyxFQUFFO01BQ0xDLEtBQUssRUFBRVIsR0FBRyxDQUFDUyxNQUFNO01BQ2pCQyxRQUFRLEVBQUUsU0FBQUEsU0FBVUMsR0FBRyxFQUFFO1FBQ3ZCWCxHQUFHLENBQUNTLE1BQU0sR0FBR0UsR0FBRztNQUNsQixDQUFDO01BQ0RDLFVBQVUsRUFBRTtJQUNkO0VBQ0YsQ0FBQyxDQUFDLENBQ0gsRUFDRCxDQUNGLENBQUMsRUFDRFosR0FBRyxDQUFDSSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQ1hILEVBQUUsQ0FBQyxjQUFjLEVBQUU7SUFDakJZLFdBQVcsRUFBRSxhQUFhO0lBQzFCUixLQUFLLEVBQUU7TUFDTFMsT0FBTyxFQUFFZCxHQUFHLENBQUNjLE9BQU87TUFDcEJDLEtBQUssRUFBRWYsR0FBRyxDQUFDRyxJQUFJO01BQ2ZNLE1BQU0sRUFBRVQsR0FBRyxDQUFDUztJQUNkLENBQUM7SUFDRE8sV0FBVyxFQUFFaEIsR0FBRyxDQUFDaUIsRUFBRSxDQUNqQixDQUNFO01BQ0VDLEdBQUcsRUFBRSxZQUFZO01BQ2pCQyxFQUFFLEVBQUUsU0FBQUEsR0FBQUMsSUFBQSxFQUFvQjtRQUFBLElBQVJDLElBQUksR0FBQUQsSUFBQSxDQUFKQyxJQUFJO1FBQ2xCLE9BQU8sQ0FDTHBCLEVBQUUsQ0FBQyxPQUFPLEVBQUU7VUFDVkksS0FBSyxFQUFFO1lBQ0wsWUFBWSxFQUFFLElBQUk7WUFDbEIsV0FBVyxFQUFFLElBQUk7WUFDakJpQixPQUFPLEVBQUUsRUFBRTtZQUNYQyxHQUFHLEVBQUVGLElBQUksQ0FBQ0c7VUFDWjtRQUNGLENBQUMsQ0FBQyxDQUNIO01BQ0g7SUFDRixDQUFDLEVBQ0Q7TUFDRU4sR0FBRyxFQUFFLGNBQWM7TUFDbkJDLEVBQUUsRUFBRSxTQUFBQSxHQUFBTSxLQUFBLEVBQW9CO1FBQUEsSUFBUkosSUFBSSxHQUFBSSxLQUFBLENBQUpKLElBQUk7UUFDbEIsT0FBTyxDQUNMcEIsRUFBRSxDQUNBLE9BQU8sRUFDUDtVQUNFSSxLQUFLLEVBQUU7WUFDTHFCLEtBQUssRUFBRSxLQUFLO1lBQ1pDLEdBQUcsRUFBRSxFQUFFO1lBQ1AsU0FBUyxFQUFFLEVBQUU7WUFDYkMsSUFBSSxFQUFFO1VBQ1IsQ0FBQztVQUNEQyxFQUFFLEVBQUU7WUFDRkMsS0FBSyxFQUFFLFNBQUFBLE1BQVVDLE1BQU0sRUFBRTtjQUN2QixPQUFPL0IsR0FBRyxDQUFDZ0MsSUFBSSxDQUFDWCxJQUFJLENBQUNZLEVBQUUsQ0FBQztZQUMxQjtVQUNGO1FBQ0YsQ0FBQyxFQUNELENBQUNoQyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUNELEdBQUcsQ0FBQ0ksRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUN4QyxDQUNGLENBQUMsRUFDREosR0FBRyxDQUFDSSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQ1hILEVBQUUsQ0FDQSxPQUFPLEVBQ1A7VUFDRUksS0FBSyxFQUFFO1lBQ0xxQixLQUFLLEVBQUUsU0FBUztZQUNoQkMsR0FBRyxFQUFFLEVBQUU7WUFDUCxTQUFTLEVBQUUsRUFBRTtZQUNiQyxJQUFJLEVBQUU7VUFDUixDQUFDO1VBQ0RDLEVBQUUsRUFBRTtZQUNGQyxLQUFLLEVBQUUsU0FBQUEsTUFBVUMsTUFBTSxFQUFFO2NBQ3ZCLE9BQU8vQixHQUFHLENBQUNrQyxLQUFLLENBQUNiLElBQUksQ0FBQ1ksRUFBRSxFQUFFWixJQUFJLENBQUNjLElBQUksQ0FBQztZQUN0QztVQUNGO1FBQ0YsQ0FBQyxFQUNELENBQUNsQyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUNELEdBQUcsQ0FBQ0ksRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUN4QyxDQUNGLENBQUMsQ0FDRjtNQUNIO0lBQ0YsQ0FBQyxDQUNGLEVBQ0QsSUFBSSxFQUNKLEtBQUssRUFDTCxTQUNGO0VBQ0YsQ0FBQyxDQUFDLENBQ0gsRUFDRCxDQUNGLENBQUMsR0FDREosR0FBRyxDQUFDb0MsRUFBRSxDQUFDLENBQUMsQ0FDYixFQUNELENBQ0YsQ0FBQztBQUNILENBQUM7QUFDRCxJQUFJQyxlQUFlLEdBQUcsRUFBRTtBQUN4QnRDLE1BQU0sQ0FBQ3VDLGFBQWEsR0FBRyxJQUFJIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vY3ljbGUvaW5kZXgudnVlP2RhYjIiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIHJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgdmFyIF92bSA9IHRoaXMsXG4gICAgX2MgPSBfdm0uX3NlbGYuX2NcbiAgcmV0dXJuIF9jKFxuICAgIFwidi1hcHBcIixcbiAgICBbXG4gICAgICBfdm0uZGF0YVxuICAgICAgICA/IF9jKFxuICAgICAgICAgICAgXCJ2LWNhcmRcIixcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgXCJ2LWNhcmQtdGl0bGVcIixcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBfdm0uX3YoXCJcXG4gICAgICBBZG1pbmlzdHJhY2nDs24gZGUgQ2ljbG9zXFxuICAgICAgXCIpLFxuICAgICAgICAgICAgICAgICAgX2MoXCJ2LXNwYWNlclwiKSxcbiAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICBfYyhcInYtdGV4dC1maWVsZFwiLCB7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgXCJhcHBlbmQtaWNvblwiOiBcIm1kaS1tYWduaWZ5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IFwiQnVzY2FyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgXCJzaW5nbGUtbGluZVwiOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICAgIFwiaGlkZS1kZXRhaWxzXCI6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIG1vZGVsOiB7XG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IF92bS5zZWFyY2gsXG4gICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IGZ1bmN0aW9uICgkJHYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS5zZWFyY2ggPSAkJHZcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwic2VhcmNoXCIsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgX2MoXCJ2LWRhdGEtdGFibGVcIiwge1xuICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsZXZhdGlvbi0xXCIsXG4gICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IF92bS5oZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgaXRlbXM6IF92bS5kYXRhLFxuICAgICAgICAgICAgICAgICAgc2VhcmNoOiBfdm0uc2VhcmNoLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2NvcGVkU2xvdHM6IF92bS5fdShcbiAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJpdGVtLmltYWdlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgZm46IGZ1bmN0aW9uICh7IGl0ZW0gfSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJ2LWltZ1wiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibWF4LWhlaWdodFwiOiBcIjQwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm1heC13aWR0aFwiOiBcIjgwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjOiBpdGVtLmltYWdlbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAga2V5OiBcIml0ZW0uYWN0aW9uc1wiLFxuICAgICAgICAgICAgICAgICAgICAgIGZuOiBmdW5jdGlvbiAoeyBpdGVtIH0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidi1idG5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogXCJyZWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFiOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIngtc21hbGxcIjogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGFyazogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0uZWRpdChpdGVtLmlkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtfYyhcInYtaWNvblwiLCBbX3ZtLl92KFwiIG1kaS1wZW5jaWwgXCIpXSldLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ2LWJ0blwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBcIndhcm5pbmdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFiOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIngtc21hbGxcIjogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGFyazogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0udHJhc2goaXRlbS5pZCwgaXRlbS5uYW1lKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtfYyhcInYtaWNvblwiLCBbX3ZtLl92KFwiIG1kaS1kZWxldGUgXCIpXSldLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICAgIDUyNjYwMjk1NlxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIDFcbiAgICAgICAgICApXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgXSxcbiAgICAxXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iXSwibmFtZXMiOlsicmVuZGVyIiwiX3ZtIiwiX2MiLCJfc2VsZiIsImRhdGEiLCJfdiIsImF0dHJzIiwibGFiZWwiLCJtb2RlbCIsInZhbHVlIiwic2VhcmNoIiwiY2FsbGJhY2siLCIkJHYiLCJleHByZXNzaW9uIiwic3RhdGljQ2xhc3MiLCJoZWFkZXJzIiwiaXRlbXMiLCJzY29wZWRTbG90cyIsIl91Iiwia2V5IiwiZm4iLCJfcmVmIiwiaXRlbSIsImNvbnRhaW4iLCJzcmMiLCJpbWFnZW4iLCJfcmVmMiIsImNvbG9yIiwiZmFiIiwiZGFyayIsIm9uIiwiY2xpY2siLCIkZXZlbnQiLCJlZGl0IiwiaWQiLCJ0cmFzaCIsIm5hbWUiLCJfZSIsInN0YXRpY1JlbmRlckZucyIsIl93aXRoU3RyaXBwZWQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/cycle/index.vue?vue&type=template&id=60d7246e&\n");

/***/ }),

/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/library/create.vue?vue&type=template&id=b9ed7f4a&":
/*!**************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/library/create.vue?vue&type=template&id=b9ed7f4a& ***!
  \**************************************************************************************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   render: () => (/* binding */ render),\n/* harmony export */   staticRenderFns: () => (/* binding */ staticRenderFns)\n/* harmony export */ });\nvar render = function render() {\n  var _vm = this,\n    _c = _vm._self._c;\n  return _vm.survey ? _c(\"div\", [_c(\"Survey\", {\n    attrs: {\n      survey: _vm.survey\n    }\n  })], 1) : _vm._e();\n};\nvar staticRenderFns = [];\nrender._withStripped = true;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz9ydWxlU2V0WzFdLnJ1bGVzWzJdIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9saWJyYXJ5L2NyZWF0ZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9YjllZDdmNGEmIiwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsSUFBSUEsTUFBTSxHQUFHLFNBQVNBLE1BQU1BLENBQUEsRUFBRztFQUM3QixJQUFJQyxHQUFHLEdBQUcsSUFBSTtJQUNaQyxFQUFFLEdBQUdELEdBQUcsQ0FBQ0UsS0FBSyxDQUFDRCxFQUFFO0VBQ25CLE9BQU9ELEdBQUcsQ0FBQ0csTUFBTSxHQUNiRixFQUFFLENBQUMsS0FBSyxFQUFFLENBQUNBLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFBRUcsS0FBSyxFQUFFO01BQUVELE1BQU0sRUFBRUgsR0FBRyxDQUFDRztJQUFPO0VBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FDL0RILEdBQUcsQ0FBQ0ssRUFBRSxDQUFDLENBQUM7QUFDZCxDQUFDO0FBQ0QsSUFBSUMsZUFBZSxHQUFHLEVBQUU7QUFDeEJQLE1BQU0sQ0FBQ1EsYUFBYSxHQUFHLElBQUkiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9saWJyYXJ5L2NyZWF0ZS52dWU/MmQ3YyJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgcmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICB2YXIgX3ZtID0gdGhpcyxcbiAgICBfYyA9IF92bS5fc2VsZi5fY1xuICByZXR1cm4gX3ZtLnN1cnZleVxuICAgID8gX2MoXCJkaXZcIiwgW19jKFwiU3VydmV5XCIsIHsgYXR0cnM6IHsgc3VydmV5OiBfdm0uc3VydmV5IH0gfSldLCAxKVxuICAgIDogX3ZtLl9lKClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iXSwibmFtZXMiOlsicmVuZGVyIiwiX3ZtIiwiX2MiLCJfc2VsZiIsInN1cnZleSIsImF0dHJzIiwiX2UiLCJzdGF0aWNSZW5kZXJGbnMiLCJfd2l0aFN0cmlwcGVkIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/library/create.vue?vue&type=template&id=b9ed7f4a&\n");

/***/ }),

/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/library/edit.vue?vue&type=template&id=7d9bdc29&":
/*!************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/library/edit.vue?vue&type=template&id=7d9bdc29& ***!
  \************************************************************************************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   render: () => (/* binding */ render),\n/* harmony export */   staticRenderFns: () => (/* binding */ staticRenderFns)\n/* harmony export */ });\nvar render = function render() {\n  var _vm = this,\n    _c = _vm._self._c;\n  return _vm.survey ? _c(\"div\", [_c(\"Survey\", {\n    attrs: {\n      survey: _vm.survey\n    }\n  })], 1) : _vm._e();\n};\nvar staticRenderFns = [];\nrender._withStripped = true;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz9ydWxlU2V0WzFdLnJ1bGVzWzJdIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9saWJyYXJ5L2VkaXQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTdkOWJkYzI5JiIsIm1hcHBpbmdzIjoiOzs7OztBQUFBLElBQUlBLE1BQU0sR0FBRyxTQUFTQSxNQUFNQSxDQUFBLEVBQUc7RUFDN0IsSUFBSUMsR0FBRyxHQUFHLElBQUk7SUFDWkMsRUFBRSxHQUFHRCxHQUFHLENBQUNFLEtBQUssQ0FBQ0QsRUFBRTtFQUNuQixPQUFPRCxHQUFHLENBQUNHLE1BQU0sR0FDYkYsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDQSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQUVHLEtBQUssRUFBRTtNQUFFRCxNQUFNLEVBQUVILEdBQUcsQ0FBQ0c7SUFBTztFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQy9ESCxHQUFHLENBQUNLLEVBQUUsQ0FBQyxDQUFDO0FBQ2QsQ0FBQztBQUNELElBQUlDLGVBQWUsR0FBRyxFQUFFO0FBQ3hCUCxNQUFNLENBQUNRLGFBQWEsR0FBRyxJQUFJIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vbGlicmFyeS9lZGl0LnZ1ZT82ZDBlIl0sInNvdXJjZXNDb250ZW50IjpbInZhciByZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gIHZhciBfdm0gPSB0aGlzLFxuICAgIF9jID0gX3ZtLl9zZWxmLl9jXG4gIHJldHVybiBfdm0uc3VydmV5XG4gICAgPyBfYyhcImRpdlwiLCBbX2MoXCJTdXJ2ZXlcIiwgeyBhdHRyczogeyBzdXJ2ZXk6IF92bS5zdXJ2ZXkgfSB9KV0sIDEpXG4gICAgOiBfdm0uX2UoKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSJdLCJuYW1lcyI6WyJyZW5kZXIiLCJfdm0iLCJfYyIsIl9zZWxmIiwic3VydmV5IiwiYXR0cnMiLCJfZSIsInN0YXRpY1JlbmRlckZucyIsIl93aXRoU3RyaXBwZWQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/library/edit.vue?vue&type=template&id=7d9bdc29&\n");

/***/ }),

/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/library/index.vue?vue&type=template&id=779762c3&":
/*!*************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/library/index.vue?vue&type=template&id=779762c3& ***!
  \*************************************************************************************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   render: () => (/* binding */ render),\n/* harmony export */   staticRenderFns: () => (/* binding */ staticRenderFns)\n/* harmony export */ });\nvar render = function render() {\n  var _vm = this,\n    _c = _vm._self._c;\n  return _c(\"v-app\", [_vm.data ? _c(\"v-card\", [_c(\"v-card-title\", [_vm._v(\"\\n      Administración de Biblioteca\\n      \"), _c(\"v-spacer\"), _vm._v(\" \"), _c(\"v-text-field\", {\n    attrs: {\n      \"append-icon\": \"mdi-magnify\",\n      label: \"Buscar\",\n      \"single-line\": \"\",\n      \"hide-details\": \"\"\n    },\n    model: {\n      value: _vm.search,\n      callback: function callback($$v) {\n        _vm.search = $$v;\n      },\n      expression: \"search\"\n    }\n  })], 1), _vm._v(\" \"), _c(\"v-data-table\", {\n    staticClass: \"elevation-1\",\n    attrs: {\n      headers: _vm.headers,\n      items: _vm.data,\n      search: _vm.search\n    },\n    scopedSlots: _vm._u([{\n      key: \"item.image\",\n      fn: function fn(_ref) {\n        var item = _ref.item;\n        return [_c(\"v-img\", {\n          attrs: {\n            \"max-height\": \"51\",\n            \"max-width\": \"110\",\n            contain: \"\",\n            src: item.icon\n          }\n        })];\n      }\n    }, {\n      key: \"item.doc\",\n      fn: function fn(_ref2) {\n        var item = _ref2.item;\n        return [item.file ? _c(\"v-btn\", {\n          attrs: {\n            icon: \"\",\n            color: \"primary\"\n          },\n          on: {\n            click: function click($event) {\n              return _vm.download(item.id);\n            }\n          }\n        }, [_c(\"v-icon\", [_vm._v(\"mdi-cloud-download\")])], 1) : _vm._e()];\n      }\n    }, {\n      key: \"item.actions\",\n      fn: function fn(_ref3) {\n        var item = _ref3.item;\n        return [_c(\"v-btn\", {\n          attrs: {\n            color: \"red\",\n            fab: \"\",\n            \"x-small\": \"\",\n            dark: \"\"\n          },\n          on: {\n            click: function click($event) {\n              return _vm.edit(item.id);\n            }\n          }\n        }, [_c(\"v-icon\", [_vm._v(\" mdi-pencil \")])], 1), _vm._v(\" \"), _c(\"v-btn\", {\n          attrs: {\n            color: \"warning\",\n            fab: \"\",\n            \"x-small\": \"\",\n            dark: \"\"\n          },\n          on: {\n            click: function click($event) {\n              return _vm.trash(item.id, item.name);\n            }\n          }\n        }, [_c(\"v-icon\", [_vm._v(\" mdi-delete \")])], 1)];\n      }\n    }], null, false, 1372619974)\n  })], 1) : _vm._e()], 1);\n};\nvar staticRenderFns = [];\nrender._withStripped = true;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz9ydWxlU2V0WzFdLnJ1bGVzWzJdIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9saWJyYXJ5L2luZGV4LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03Nzk3NjJjMyYiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxJQUFJQSxNQUFNLEdBQUcsU0FBU0EsTUFBTUEsQ0FBQSxFQUFHO0VBQzdCLElBQUlDLEdBQUcsR0FBRyxJQUFJO0lBQ1pDLEVBQUUsR0FBR0QsR0FBRyxDQUFDRSxLQUFLLENBQUNELEVBQUU7RUFDbkIsT0FBT0EsRUFBRSxDQUNQLE9BQU8sRUFDUCxDQUNFRCxHQUFHLENBQUNHLElBQUksR0FDSkYsRUFBRSxDQUNBLFFBQVEsRUFDUixDQUNFQSxFQUFFLENBQ0EsY0FBYyxFQUNkLENBQ0VELEdBQUcsQ0FBQ0ksRUFBRSxDQUFDLDhDQUE4QyxDQUFDLEVBQ3RESCxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQ2RELEdBQUcsQ0FBQ0ksRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUNYSCxFQUFFLENBQUMsY0FBYyxFQUFFO0lBQ2pCSSxLQUFLLEVBQUU7TUFDTCxhQUFhLEVBQUUsYUFBYTtNQUM1QkMsS0FBSyxFQUFFLFFBQVE7TUFDZixhQUFhLEVBQUUsRUFBRTtNQUNqQixjQUFjLEVBQUU7SUFDbEIsQ0FBQztJQUNEQyxLQUFLLEVBQUU7TUFDTEMsS0FBSyxFQUFFUixHQUFHLENBQUNTLE1BQU07TUFDakJDLFFBQVEsRUFBRSxTQUFBQSxTQUFVQyxHQUFHLEVBQUU7UUFDdkJYLEdBQUcsQ0FBQ1MsTUFBTSxHQUFHRSxHQUFHO01B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QUFBQSxNQUFVQyxNQUFNLEVBQUU7Y0FDdkIsT0FBTzlCLEdBQUcsQ0FBQ3NDLEtBQUssQ0FBQ2pCLElBQUksQ0FBQ1csRUFBRSxFQUFFWCxJQUFJLENBQUNrQixJQUFJLENBQUM7WUFDdEM7VUFDRjtRQUNGLENBQUMsRUFDRCxDQUFDdEMsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDRCxHQUFHLENBQUNJLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDeEMsQ0FDRixDQUFDLENBQ0Y7TUFDSDtJQUNGLENBQUMsQ0FDRixFQUNELElBQUksRUFDSixLQUFLLEVBQ0wsVUFDRjtFQUNGLENBQUMsQ0FBQyxDQUNILEVBQ0QsQ0FDRixDQUFDLEdBQ0RKLEdBQUcsQ0FBQ2lDLEVBQUUsQ0FBQyxDQUFDLENBQ2IsRUFDRCxDQUNGLENBQUM7QUFDSCxDQUFDO0FBQ0QsSUFBSU8sZUFBZSxHQUFHLEVBQUU7QUFDeEJ6QyxNQUFNLENBQUMwQyxhQUFhLEdBQUcsSUFBSSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9jb21wb25lbnRzL2FkbWluL2xpYnJhcnkvaW5kZXgudnVlPzhlNWEiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIHJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgdmFyIF92bSA9IHRoaXMsXG4gICAgX2MgPSBfdm0uX3NlbGYuX2NcbiAgcmV0dXJuIF9jKFxuICAgIFwidi1hcHBcIixcbiAgICBbXG4gICAgICBfdm0uZGF0YVxuICAgICAgICA/IF9jKFxuICAgICAgICAgICAgXCJ2LWNhcmRcIixcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgXCJ2LWNhcmQtdGl0bGVcIixcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBfdm0uX3YoXCJcXG4gICAgICBBZG1pbmlzdHJhY2nDs24gZGUgQmlibGlvdGVjYVxcbiAgICAgIFwiKSxcbiAgICAgICAgICAgICAgICAgIF9jKFwidi1zcGFjZXJcIiksXG4gICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgX2MoXCJ2LXRleHQtZmllbGRcIiwge1xuICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgIFwiYXBwZW5kLWljb25cIjogXCJtZGktbWFnbmlmeVwiLFxuICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBcIkJ1c2NhclwiLFxuICAgICAgICAgICAgICAgICAgICAgIFwic2luZ2xlLWxpbmVcIjogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgICBcImhpZGUtZGV0YWlsc1wiOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBtb2RlbDoge1xuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0uc2VhcmNoLFxuICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiBmdW5jdGlvbiAoJCR2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfdm0uc2VhcmNoID0gJCR2XG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcInNlYXJjaFwiLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgIF9jKFwidi1kYXRhLXRhYmxlXCIsIHtcbiAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbGV2YXRpb24tMVwiLFxuICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICBoZWFkZXJzOiBfdm0uaGVhZGVycyxcbiAgICAgICAgICAgICAgICAgIGl0ZW1zOiBfdm0uZGF0YSxcbiAgICAgICAgICAgICAgICAgIHNlYXJjaDogX3ZtLnNlYXJjaCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNjb3BlZFNsb3RzOiBfdm0uX3UoXG4gICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiaXRlbS5pbWFnZVwiLFxuICAgICAgICAgICAgICAgICAgICAgIGZuOiBmdW5jdGlvbiAoeyBpdGVtIH0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFwidi1pbWdcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm1heC1oZWlnaHRcIjogXCI1MVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJtYXgtd2lkdGhcIjogXCIxMTBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW46IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM6IGl0ZW0uaWNvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAga2V5OiBcIml0ZW0uZG9jXCIsXG4gICAgICAgICAgICAgICAgICAgICAgZm46IGZ1bmN0aW9uICh7IGl0ZW0gfSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5maWxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ2LWJ0blwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgaWNvbjogXCJcIiwgY29sb3I6IFwicHJpbWFyeVwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAoJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0uZG93bmxvYWQoaXRlbS5pZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW19jKFwidi1pY29uXCIsIFtfdm0uX3YoXCJtZGktY2xvdWQtZG93bmxvYWRcIildKV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiaXRlbS5hY3Rpb25zXCIsXG4gICAgICAgICAgICAgICAgICAgICAgZm46IGZ1bmN0aW9uICh7IGl0ZW0gfSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ2LWJ0blwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBcInJlZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWI6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwieC1zbWFsbFwiOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXJrOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAoJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS5lZGl0KGl0ZW0uaWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW19jKFwidi1pY29uXCIsIFtfdm0uX3YoXCIgbWRpLXBlbmNpbCBcIildKV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInYtYnRuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IFwid2FybmluZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWI6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwieC1zbWFsbFwiOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXJrOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAoJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS50cmFzaChpdGVtLmlkLCBpdGVtLm5hbWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW19jKFwidi1pY29uXCIsIFtfdm0uX3YoXCIgbWRpLWRlbGV0ZSBcIildKV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgICAgMTM3MjYxOTk3NFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIDFcbiAgICAgICAgICApXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgXSxcbiAgICAxXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iXSwibmFtZXMiOlsicmVuZGVyIiwiX3ZtIiwiX2MiLCJfc2VsZiIsImRhdGEiLCJfdiIsImF0dHJzIiwibGFiZWwiLCJtb2RlbCIsInZhbHVlIiwic2VhcmNoIiwiY2FsbGJhY2siLCIkJHYiLCJleHByZXNzaW9uIiwic3RhdGljQ2xhc3MiLCJoZWFkZXJzIiwiaXRlbXMiLCJzY29wZWRTbG90cyIsIl91Iiwia2V5IiwiZm4iLCJfcmVmIiwiaXRlbSIsImNvbnRhaW4iLCJzcmMiLCJpY29uIiwiX3JlZjIiLCJmaWxlIiwiY29sb3IiLCJvbiIsImNsaWNrIiwiJGV2ZW50IiwiZG93bmxvYWQiLCJpZCIsIl9lIiwiX3JlZjMiLCJmYWIiLCJkYXJrIiwiZWRpdCIsInRyYXNoIiwibmFtZSIsInN0YXRpY1JlbmRlckZucyIsIl93aXRoU3RyaXBwZWQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/library/index.vue?vue&type=template&id=779762c3&\n");

/***/ }),

/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/page/edit.vue?vue&type=template&id=31209e4f&":
/*!*********************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/page/edit.vue?vue&type=template&id=31209e4f& ***!
  \*********************************************************************************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   render: () => (/* binding */ render),\n/* harmony export */   staticRenderFns: () => (/* binding */ staticRenderFns)\n/* harmony export */ });\nvar render = function render() {\n  var _vm = this,\n    _c = _vm._self._c;\n  return _vm.survey ? _c(\"div\", [_c(\"Survey\", {\n    attrs: {\n      survey: _vm.survey\n    }\n  })], 1) : _vm._e();\n};\nvar staticRenderFns = [];\nrender._withStripped = true;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz9ydWxlU2V0WzFdLnJ1bGVzWzJdIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9wYWdlL2VkaXQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTMxMjA5ZTRmJiIsIm1hcHBpbmdzIjoiOzs7OztBQUFBLElBQUlBLE1BQU0sR0FBRyxTQUFTQSxNQUFNQSxDQUFBLEVBQUc7RUFDN0IsSUFBSUMsR0FBRyxHQUFHLElBQUk7SUFDWkMsRUFBRSxHQUFHRCxHQUFHLENBQUNFLEtBQUssQ0FBQ0QsRUFBRTtFQUNuQixPQUFPRCxHQUFHLENBQUNHLE1BQU0sR0FDYkYsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDQSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQUVHLEtBQUssRUFBRTtNQUFFRCxNQUFNLEVBQUVILEdBQUcsQ0FBQ0c7SUFBTztFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQy9ESCxHQUFHLENBQUNLLEVBQUUsQ0FBQyxDQUFDO0FBQ2QsQ0FBQztBQUNELElBQUlDLGVBQWUsR0FBRyxFQUFFO0FBQ3hCUCxNQUFNLENBQUNRLGFBQWEsR0FBRyxJQUFJIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vcGFnZS9lZGl0LnZ1ZT9iZmNhIl0sInNvdXJjZXNDb250ZW50IjpbInZhciByZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gIHZhciBfdm0gPSB0aGlzLFxuICAgIF9jID0gX3ZtLl9zZWxmLl9jXG4gIHJldHVybiBfdm0uc3VydmV5XG4gICAgPyBfYyhcImRpdlwiLCBbX2MoXCJTdXJ2ZXlcIiwgeyBhdHRyczogeyBzdXJ2ZXk6IF92bS5zdXJ2ZXkgfSB9KV0sIDEpXG4gICAgOiBfdm0uX2UoKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSJdLCJuYW1lcyI6WyJyZW5kZXIiLCJfdm0iLCJfYyIsIl9zZWxmIiwic3VydmV5IiwiYXR0cnMiLCJfZSIsInN0YXRpY1JlbmRlckZucyIsIl93aXRoU3RyaXBwZWQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/page/edit.vue?vue&type=template&id=31209e4f&\n");

/***/ }),

/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/page/index.vue?vue&type=template&id=34aae55d&":
/*!**********************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/page/index.vue?vue&type=template&id=34aae55d& ***!
  \**********************************************************************************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   render: () => (/* binding */ render),\n/* harmony export */   staticRenderFns: () => (/* binding */ staticRenderFns)\n/* harmony export */ });\nvar render = function render() {\n  var _vm = this,\n    _c = _vm._self._c;\n  return _c(\"v-app\", [_vm.data ? _c(\"v-card\", [_c(\"v-card-title\", [_vm._v(\"\\n      Administración de Paginas\\n      \"), _c(\"v-spacer\"), _vm._v(\" \"), _c(\"v-text-field\", {\n    attrs: {\n      \"append-icon\": \"mdi-magnify\",\n      label: \"Buscar\",\n      \"single-line\": \"\",\n      \"hide-details\": \"\"\n    },\n    model: {\n      value: _vm.search,\n      callback: function callback($$v) {\n        _vm.search = $$v;\n      },\n      expression: \"search\"\n    }\n  })], 1), _vm._v(\" \"), _c(\"v-data-table\", {\n    staticClass: \"elevation-1\",\n    attrs: {\n      headers: _vm.headers,\n      items: _vm.data,\n      search: _vm.search\n    },\n    scopedSlots: _vm._u([{\n      key: \"item.link\",\n      fn: function fn(_ref) {\n        var item = _ref.item;\n        return [_c(\"v-btn\", {\n          attrs: {\n            icon: \"\",\n            href: item.slug,\n            color: \"primary\",\n            target: \"_blank\"\n          }\n        }, [_c(\"v-icon\", [_vm._v(\"mdi-open-in-new\")])], 1)];\n      }\n    }, {\n      key: \"item.menu\",\n      fn: function fn(_ref2) {\n        var item = _ref2.item;\n        return [_vm._v(\"\\n        \" + _vm._s(item.is_menu ? \"Si\" : \"No\") + \"\\n      \")];\n      }\n    }, {\n      key: \"item.actions\",\n      fn: function fn(_ref3) {\n        var item = _ref3.item;\n        return [_c(\"v-btn\", {\n          attrs: {\n            color: \"red\",\n            fab: \"\",\n            \"x-small\": \"\",\n            dark: \"\"\n          },\n          on: {\n            click: function click($event) {\n              return _vm.edit(item.id);\n            }\n          }\n        }, [_c(\"v-icon\", [_vm._v(\" mdi-pencil \")])], 1)];\n      }\n    }], null, false, 2184112430)\n  })], 1) : _vm._e()], 1);\n};\nvar staticRenderFns = [];\nrender._withStripped = true;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz9ydWxlU2V0WzFdLnJ1bGVzWzJdIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9wYWdlL2luZGV4LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zNGFhZTU1ZCYiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxJQUFJQSxNQUFNLEdBQUcsU0FBU0EsTUFBTUEsQ0FBQSxFQUFHO0VBQzdCLElBQUlDLEdBQUcsR0FBRyxJQUFJO0lBQ1pDLEVBQUUsR0FBR0QsR0FBRyxDQUFDRSxLQUFLLENBQUNELEVBQUU7RUFDbkIsT0FBT0EsRUFBRSxDQUNQLE9BQU8sRUFDUCxDQUNFRCxHQUFHLENBQUNHLElBQUksR0FDSkYsRUFBRSxDQUNBLFFBQVEsRUFDUixDQUNFQSxFQUFFLENBQ0EsY0FBYyxFQUNkLENBQ0VELEdBQUcsQ0FBQ0ksRUFBRSxDQUFDLDJDQUEyQyxDQUFDLEVBQ25ESCxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQ2RELEdBQUcsQ0FBQ0ksRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUNYSCxFQUFFLENBQUMsY0FBYyxFQUFFO0lBQ2pCSSxLQUFLLEVBQUU7TUFDTCxhQUFhLEVBQUUsYUFBYTtNQUM1QkMsS0FBSyxFQUFFLFFBQVE7TUFDZixhQUFhLEVBQUUsRUFBRTtNQUNqQixjQUFjLEVBQUU7SUFDbEIsQ0FBQztJQUNEQyxLQUFLLEVBQUU7TUFDTEMsS0FBSyxFQUFFUixHQUFHLENBQUNTLE1BQU07TUFDakJDLFFBQVEsRUFBRSxTQUFBQSxTQUFVQyxHQUFHLEVBQUU7UUFDdkJYLEdBQUcsQ0FBQ1MsTUFBTSxHQUFHRSxHQUFHO01BQ2xCLENBQUM7TUFDREMsVUFBVSxFQUFFO0lBQ2Q7RUFDRixDQUFDLENBQUMsQ0FDSCxFQUNELENBQ0YsQ0FBQyxFQUNEWixHQUFHLENBQUNJLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFDWEgsRUFBRSxDQUFDLGNBQWMsRUFBRTtJQUNqQlksV0FBVyxFQUFFLGFBQWE7SUFDMUJSLEtBQUssRUFBRTtNQUNMUyxPQUFPLEVBQUVkLEdBQUcsQ0FBQ2MsT0FBTztNQUNwQkMsS0FBSyxFQUFFZixHQUFHLENBQUNHLElBQUk7TUFDZk0sTUFBTSxFQUFFVCxHQUFHLENBQUNTO0lBQ2QsQ0FBQztJQUNETyxXQUFXLEVBQUVoQixHQUFHLENBQUNpQixFQUFFLENBQ2pCLENBQ0U7TUFDRUMsR0FBRyxFQUFFLFdBQVc7TUFDaEJDLEVBQUUsRUFBRSxTQUFBQSxHQUFBQyxJQUFBLEVBQW9CO1FBQUEsSUFBUkMsSUFBSSxHQUFBRCxJQUFBLENBQUpDLElBQUk7UUFDbEIsT0FBTyxDQUNMcEIsRUFBRSxDQUNBLE9BQU8sRUFDUDtVQUNFSSxLQUFLLEVBQUU7WUFDTGlCLElBQUksRUFBRSxFQUFFO1lBQ1JDLElBQUksRUFBRUYsSUFBSSxDQUFDRyxJQUFJO1lBQ2ZDLEtBQUssRUFBRSxTQUFTO1lBQ2hCQyxNQUFNLEVBQUU7VUFDVjtRQUNGLENBQUMsRUFDRCxDQUFDekIsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDRCxHQUFHLENBQUNJLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUMzQyxDQUNGLENBQUMsQ0FDRjtNQUNIO0lBQ0YsQ0FBQyxFQUNEO01BQ0VjLEdBQUcsRUFBRSxXQUFXO01BQ2hCQyxFQUFFLEVBQUUsU0FBQUEsR0FBQVEsS0FBQSxFQUFvQjtRQUFBLElBQVJOLElBQUksR0FBQU0sS0FBQSxDQUFKTixJQUFJO1FBQ2xCLE9BQU8sQ0FDTHJCLEdBQUcsQ0FBQ0ksRUFBRSxDQUNKLFlBQVksR0FDVkosR0FBRyxDQUFDNEIsRUFBRSxDQUFDUCxJQUFJLENBQUNRLE9BQU8sR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQ2xDLFVBQ0osQ0FBQyxDQUNGO01BQ0g7SUFDRixDQUFDLEVBQ0Q7TUFDRVgsR0FBRyxFQUFFLGNBQWM7TUFDbkJDLEVBQUUsRUFBRSxTQUFBQSxHQUFBVyxLQUFBLEVBQW9CO1FBQUEsSUFBUlQsSUFBSSxHQUFBUyxLQUFBLENBQUpULElBQUk7UUFDbEIsT0FBTyxDQUNMcEIsRUFBRSxDQUNBLE9BQU8sRUFDUDtVQUNFSSxLQUFLLEVBQUU7WUFDTG9CLEtBQUssRUFBRSxLQUFLO1lBQ1pNLEdBQUcsRUFBRSxFQUFFO1lBQ1AsU0FBUyxFQUFFLEVBQUU7WUFDYkMsSUFBSSxFQUFFO1VBQ1IsQ0FBQztVQUNEQyxFQUFFLEVBQUU7WUFDRkMsS0FBSyxFQUFFLFNBQUFBLE1BQVVDLE1BQU0sRUFBRTtjQUN2QixPQUFPbkMsR0FBRyxDQUFDb0MsSUFBSSxDQUFDZixJQUFJLENBQUNnQixFQUFFLENBQUM7WUFDMUI7VUFDRjtRQUNGLENBQUMsRUFDRCxDQUFDcEMsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDRCxHQUFHLENBQUNJLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDeEMsQ0FDRixDQUFDLENBQ0Y7TUFDSDtJQUNGLENBQUMsQ0FDRixFQUNELElBQUksRUFDSixLQUFLLEVBQ0wsVUFDRjtFQUNGLENBQUMsQ0FBQyxDQUNILEVBQ0QsQ0FDRixDQUFDLEdBQ0RKLEdBQUcsQ0FBQ3NDLEVBQUUsQ0FBQyxDQUFDLENBQ2IsRUFDRCxDQUNGLENBQUM7QUFDSCxDQUFDO0FBQ0QsSUFBSUMsZUFBZSxHQUFHLEVBQUU7QUFDeEJ4QyxNQUFNLENBQUN5QyxhQUFhLEdBQUcsSUFBSSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9jb21wb25lbnRzL2FkbWluL3BhZ2UvaW5kZXgudnVlPzg0NDEiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIHJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgdmFyIF92bSA9IHRoaXMsXG4gICAgX2MgPSBfdm0uX3NlbGYuX2NcbiAgcmV0dXJuIF9jKFxuICAgIFwidi1hcHBcIixcbiAgICBbXG4gICAgICBfdm0uZGF0YVxuICAgICAgICA/IF9jKFxuICAgICAgICAgICAgXCJ2LWNhcmRcIixcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgXCJ2LWNhcmQtdGl0bGVcIixcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBfdm0uX3YoXCJcXG4gICAgICBBZG1pbmlzdHJhY2nDs24gZGUgUGFnaW5hc1xcbiAgICAgIFwiKSxcbiAgICAgICAgICAgICAgICAgIF9jKFwidi1zcGFjZXJcIiksXG4gICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgX2MoXCJ2LXRleHQtZmllbGRcIiwge1xuICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgIFwiYXBwZW5kLWljb25cIjogXCJtZGktbWFnbmlmeVwiLFxuICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBcIkJ1c2NhclwiLFxuICAgICAgICAgICAgICAgICAgICAgIFwic2luZ2xlLWxpbmVcIjogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgICBcImhpZGUtZGV0YWlsc1wiOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBtb2RlbDoge1xuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0uc2VhcmNoLFxuICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiBmdW5jdGlvbiAoJCR2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfdm0uc2VhcmNoID0gJCR2XG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcInNlYXJjaFwiLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgIF9jKFwidi1kYXRhLXRhYmxlXCIsIHtcbiAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbGV2YXRpb24tMVwiLFxuICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICBoZWFkZXJzOiBfdm0uaGVhZGVycyxcbiAgICAgICAgICAgICAgICAgIGl0ZW1zOiBfdm0uZGF0YSxcbiAgICAgICAgICAgICAgICAgIHNlYXJjaDogX3ZtLnNlYXJjaCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNjb3BlZFNsb3RzOiBfdm0uX3UoXG4gICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiaXRlbS5saW5rXCIsXG4gICAgICAgICAgICAgICAgICAgICAgZm46IGZ1bmN0aW9uICh7IGl0ZW0gfSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ2LWJ0blwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb246IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY6IGl0ZW0uc2x1ZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IFwicHJpbWFyeVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IFwiX2JsYW5rXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW19jKFwidi1pY29uXCIsIFtfdm0uX3YoXCJtZGktb3Blbi1pbi1uZXdcIildKV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiaXRlbS5tZW51XCIsXG4gICAgICAgICAgICAgICAgICAgICAgZm46IGZ1bmN0aW9uICh7IGl0ZW0gfSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3MoaXRlbS5pc19tZW51ID8gXCJTaVwiIDogXCJOb1wiKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJpdGVtLmFjdGlvbnNcIixcbiAgICAgICAgICAgICAgICAgICAgICBmbjogZnVuY3Rpb24gKHsgaXRlbSB9KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInYtYnRuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IFwicmVkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhYjogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ4LXNtYWxsXCI6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhcms6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uICgkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLmVkaXQoaXRlbS5pZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbX2MoXCJ2LWljb25cIiwgW192bS5fdihcIiBtZGktcGVuY2lsIFwiKV0pXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgICAyMTg0MTEyNDMwXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgMVxuICAgICAgICAgIClcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICBdLFxuICAgIDFcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSJdLCJuYW1lcyI6WyJyZW5kZXIiLCJfdm0iLCJfYyIsIl9zZWxmIiwiZGF0YSIsIl92IiwiYXR0cnMiLCJsYWJlbCIsIm1vZGVsIiwidmFsdWUiLCJzZWFyY2giLCJjYWxsYmFjayIsIiQkdiIsImV4cHJlc3Npb24iLCJzdGF0aWNDbGFzcyIsImhlYWRlcnMiLCJpdGVtcyIsInNjb3BlZFNsb3RzIiwiX3UiLCJrZXkiLCJmbiIsIl9yZWYiLCJpdGVtIiwiaWNvbiIsImhyZWYiLCJzbHVnIiwiY29sb3IiLCJ0YXJnZXQiLCJfcmVmMiIsIl9zIiwiaXNfbWVudSIsIl9yZWYzIiwiZmFiIiwiZGFyayIsIm9uIiwiY2xpY2siLCIkZXZlbnQiLCJlZGl0IiwiaWQiLCJfZSIsInN0YXRpY1JlbmRlckZucyIsIl93aXRoU3RyaXBwZWQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/page/index.vue?vue&type=template&id=34aae55d&\n");

/***/ }),

/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/video/create.vue?vue&type=template&id=a9d0cd4a&":
/*!************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/video/create.vue?vue&type=template&id=a9d0cd4a& ***!
  \************************************************************************************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   render: () => (/* binding */ render),\n/* harmony export */   staticRenderFns: () => (/* binding */ staticRenderFns)\n/* harmony export */ });\nvar render = function render() {\n  var _vm = this,\n    _c = _vm._self._c;\n  return _vm.survey ? _c(\"div\", [_c(\"Survey\", {\n    attrs: {\n      survey: _vm.survey\n    }\n  })], 1) : _vm._e();\n};\nvar staticRenderFns = [];\nrender._withStripped = true;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz9ydWxlU2V0WzFdLnJ1bGVzWzJdIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi92aWRlby9jcmVhdGUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWE5ZDBjZDRhJiIsIm1hcHBpbmdzIjoiOzs7OztBQUFBLElBQUlBLE1BQU0sR0FBRyxTQUFTQSxNQUFNQSxDQUFBLEVBQUc7RUFDN0IsSUFBSUMsR0FBRyxHQUFHLElBQUk7SUFDWkMsRUFBRSxHQUFHRCxHQUFHLENBQUNFLEtBQUssQ0FBQ0QsRUFBRTtFQUNuQixPQUFPRCxHQUFHLENBQUNHLE1BQU0sR0FDYkYsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDQSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQUVHLEtBQUssRUFBRTtNQUFFRCxNQUFNLEVBQUVILEdBQUcsQ0FBQ0c7SUFBTztFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQy9ESCxHQUFHLENBQUNLLEVBQUUsQ0FBQyxDQUFDO0FBQ2QsQ0FBQztBQUNELElBQUlDLGVBQWUsR0FBRyxFQUFFO0FBQ3hCUCxNQUFNLENBQUNRLGFBQWEsR0FBRyxJQUFJIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vdmlkZW8vY3JlYXRlLnZ1ZT8yMDlmIl0sInNvdXJjZXNDb250ZW50IjpbInZhciByZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gIHZhciBfdm0gPSB0aGlzLFxuICAgIF9jID0gX3ZtLl9zZWxmLl9jXG4gIHJldHVybiBfdm0uc3VydmV5XG4gICAgPyBfYyhcImRpdlwiLCBbX2MoXCJTdXJ2ZXlcIiwgeyBhdHRyczogeyBzdXJ2ZXk6IF92bS5zdXJ2ZXkgfSB9KV0sIDEpXG4gICAgOiBfdm0uX2UoKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSJdLCJuYW1lcyI6WyJyZW5kZXIiLCJfdm0iLCJfYyIsIl9zZWxmIiwic3VydmV5IiwiYXR0cnMiLCJfZSIsInN0YXRpY1JlbmRlckZucyIsIl93aXRoU3RyaXBwZWQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/video/create.vue?vue&type=template&id=a9d0cd4a&\n");

/***/ }),

/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/video/edit.vue?vue&type=template&id=912715ae&":
/*!**********************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/video/edit.vue?vue&type=template&id=912715ae& ***!
  \**********************************************************************************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   render: () => (/* binding */ render),\n/* harmony export */   staticRenderFns: () => (/* binding */ staticRenderFns)\n/* harmony export */ });\nvar render = function render() {\n  var _vm = this,\n    _c = _vm._self._c;\n  return _vm.survey ? _c(\"div\", [_c(\"Survey\", {\n    attrs: {\n      survey: _vm.survey\n    }\n  })], 1) : _vm._e();\n};\nvar staticRenderFns = [];\nrender._withStripped = true;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz9ydWxlU2V0WzFdLnJ1bGVzWzJdIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi92aWRlby9lZGl0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD05MTI3MTVhZSYiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxJQUFJQSxNQUFNLEdBQUcsU0FBU0EsTUFBTUEsQ0FBQSxFQUFHO0VBQzdCLElBQUlDLEdBQUcsR0FBRyxJQUFJO0lBQ1pDLEVBQUUsR0FBR0QsR0FBRyxDQUFDRSxLQUFLLENBQUNELEVBQUU7RUFDbkIsT0FBT0QsR0FBRyxDQUFDRyxNQUFNLEdBQ2JGLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQ0EsRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUFFRyxLQUFLLEVBQUU7TUFBRUQsTUFBTSxFQUFFSCxHQUFHLENBQUNHO0lBQU87RUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUMvREgsR0FBRyxDQUFDSyxFQUFFLENBQUMsQ0FBQztBQUNkLENBQUM7QUFDRCxJQUFJQyxlQUFlLEdBQUcsRUFBRTtBQUN4QlAsTUFBTSxDQUFDUSxhQUFhLEdBQUcsSUFBSSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9jb21wb25lbnRzL2FkbWluL3ZpZGVvL2VkaXQudnVlPzYyYTgiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIHJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgdmFyIF92bSA9IHRoaXMsXG4gICAgX2MgPSBfdm0uX3NlbGYuX2NcbiAgcmV0dXJuIF92bS5zdXJ2ZXlcbiAgICA/IF9jKFwiZGl2XCIsIFtfYyhcIlN1cnZleVwiLCB7IGF0dHJzOiB7IHN1cnZleTogX3ZtLnN1cnZleSB9IH0pXSwgMSlcbiAgICA6IF92bS5fZSgpXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9Il0sIm5hbWVzIjpbInJlbmRlciIsIl92bSIsIl9jIiwiX3NlbGYiLCJzdXJ2ZXkiLCJhdHRycyIsIl9lIiwic3RhdGljUmVuZGVyRm5zIiwiX3dpdGhTdHJpcHBlZCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/video/edit.vue?vue&type=template&id=912715ae&\n");

/***/ }),

/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/video/index.vue?vue&type=template&id=77d9e9c3&":
/*!***********************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/video/index.vue?vue&type=template&id=77d9e9c3& ***!
  \***********************************************************************************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   render: () => (/* binding */ render),\n/* harmony export */   staticRenderFns: () => (/* binding */ staticRenderFns)\n/* harmony export */ });\nvar render = function render() {\n  var _vm = this,\n    _c = _vm._self._c;\n  return _c(\"v-app\", [_vm.data ? _c(\"v-card\", [_c(\"v-card-title\", [_vm._v(\"\\n      Administración de Videos\\n      \"), _c(\"v-spacer\"), _vm._v(\" \"), _c(\"v-text-field\", {\n    attrs: {\n      \"append-icon\": \"mdi-magnify\",\n      label: \"Buscar\",\n      \"single-line\": \"\",\n      \"hide-details\": \"\"\n    },\n    model: {\n      value: _vm.search,\n      callback: function callback($$v) {\n        _vm.search = $$v;\n      },\n      expression: \"search\"\n    }\n  })], 1), _vm._v(\" \"), _c(\"v-data-table\", {\n    staticClass: \"elevation-1\",\n    attrs: {\n      headers: _vm.headers,\n      items: _vm.data,\n      search: _vm.search\n    },\n    scopedSlots: _vm._u([{\n      key: \"item.link\",\n      fn: function fn(_ref) {\n        var item = _ref.item;\n        return [_c(\"v-btn\", {\n          attrs: {\n            icon: \"\",\n            href: item.url,\n            color: \"primary\",\n            target: \"_blank\"\n          }\n        }, [_c(\"v-icon\", [_vm._v(\"mdi-open-in-new\")])], 1)];\n      }\n    }, {\n      key: \"item.actions\",\n      fn: function fn(_ref2) {\n        var item = _ref2.item;\n        return [_c(\"v-btn\", {\n          attrs: {\n            color: \"red\",\n            fab: \"\",\n            \"x-small\": \"\",\n            dark: \"\"\n          },\n          on: {\n            click: function click($event) {\n              return _vm.edit(item.id);\n            }\n          }\n        }, [_c(\"v-icon\", [_vm._v(\" mdi-pencil \")])], 1), _vm._v(\" \"), _c(\"v-btn\", {\n          attrs: {\n            color: \"warning\",\n            fab: \"\",\n            \"x-small\": \"\",\n            dark: \"\"\n          },\n          on: {\n            click: function click($event) {\n              return _vm.trash(item.id, item.name);\n            }\n          }\n        }, [_c(\"v-icon\", [_vm._v(\" mdi-delete \")])], 1)];\n      }\n    }], null, false, 4289663272)\n  })], 1) : _vm._e()], 1);\n};\nvar staticRenderFns = [];\nrender._withStripped = true;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz9ydWxlU2V0WzFdLnJ1bGVzWzJdIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi92aWRlby9pbmRleC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NzdkOWU5YzMmIiwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsSUFBSUEsTUFBTSxHQUFHLFNBQVNBLE1BQU1BLENBQUEsRUFBRztFQUM3QixJQUFJQyxHQUFHLEdBQUcsSUFBSTtJQUNaQyxFQUFFLEdBQUdELEdBQUcsQ0FBQ0UsS0FBSyxDQUFDRCxFQUFFO0VBQ25CLE9BQU9BLEVBQUUsQ0FDUCxPQUFPLEVBQ1AsQ0FDRUQsR0FBRyxDQUFDRyxJQUFJLEdBQ0pGLEVBQUUsQ0FDQSxRQUFRLEVBQ1IsQ0FDRUEsRUFBRSxDQUNBLGNBQWMsRUFDZCxDQUNFRCxHQUFHLENBQUNJLEVBQUUsQ0FBQywwQ0FBMEMsQ0FBQyxFQUNsREgsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUNkRCxHQUFHLENBQUNJLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFDWEgsRUFBRSxDQUFDLGNBQWMsRUFBRTtJQUNqQkksS0FBSyxFQUFFO01BQ0wsYUFBYSxFQUFFLGFBQWE7TUFDNUJDLEtBQUssRUFBRSxRQUFRO01BQ2YsYUFBYSxFQUFFLEVBQUU7TUFDakIsY0FBYyxFQUFFO0lBQ2xCLENBQUM7SUFDREMsS0FBSyxFQUFFO01BQ0xDLEtBQUssRUFBRVIsR0FBRyxDQUFDUyxNQUFNO01BQ2pCQyxRQUFRLEVBQUUsU0FBQUEsU0FBVUMsR0FBRyxFQUFFO1FBQ3ZCWCxHQUFHLENBQUNTLE1BQU0sR0FBR0UsR0FBRztNQUNs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YUFBYSxHQUFHLElBQUkiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi92aWRlby9pbmRleC52dWU/OWM4MyJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgcmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICB2YXIgX3ZtID0gdGhpcyxcbiAgICBfYyA9IF92bS5fc2VsZi5fY1xuICByZXR1cm4gX2MoXG4gICAgXCJ2LWFwcFwiLFxuICAgIFtcbiAgICAgIF92bS5kYXRhXG4gICAgICAgID8gX2MoXG4gICAgICAgICAgICBcInYtY2FyZFwiLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICBcInYtY2FyZC10aXRsZVwiLFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgIF92bS5fdihcIlxcbiAgICAgIEFkbWluaXN0cmFjacOzbiBkZSBWaWRlb3NcXG4gICAgICBcIiksXG4gICAgICAgICAgICAgICAgICBfYyhcInYtc3BhY2VyXCIpLFxuICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgIF9jKFwidi10ZXh0LWZpZWxkXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICBcImFwcGVuZC1pY29uXCI6IFwibWRpLW1hZ25pZnlcIixcbiAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogXCJCdXNjYXJcIixcbiAgICAgICAgICAgICAgICAgICAgICBcInNpbmdsZS1saW5lXCI6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgICAgXCJoaWRlLWRldGFpbHNcIjogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgbW9kZWw6IHtcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLnNlYXJjaCxcbiAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjazogZnVuY3Rpb24gKCQkdikge1xuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLnNlYXJjaCA9ICQkdlxuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJzZWFyY2hcIixcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICBfYyhcInYtZGF0YS10YWJsZVwiLCB7XG4gICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWxldmF0aW9uLTFcIixcbiAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgaGVhZGVyczogX3ZtLmhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICBpdGVtczogX3ZtLmRhdGEsXG4gICAgICAgICAgICAgICAgICBzZWFyY2g6IF92bS5zZWFyY2gsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzY29wZWRTbG90czogX3ZtLl91KFxuICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAga2V5OiBcIml0ZW0ubGlua1wiLFxuICAgICAgICAgICAgICAgICAgICAgIGZuOiBmdW5jdGlvbiAoeyBpdGVtIH0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidi1idG5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmOiBpdGVtLnVybCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IFwicHJpbWFyeVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IFwiX2JsYW5rXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW19jKFwidi1pY29uXCIsIFtfdm0uX3YoXCJtZGktb3Blbi1pbi1uZXdcIildKV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiaXRlbS5hY3Rpb25zXCIsXG4gICAgICAgICAgICAgICAgICAgICAgZm46IGZ1bmN0aW9uICh7IGl0ZW0gfSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ2LWJ0blwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBcInJlZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWI6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwieC1zbWFsbFwiOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXJrOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAoJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS5lZGl0KGl0ZW0uaWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW19jKFwidi1pY29uXCIsIFtfdm0uX3YoXCIgbWRpLXBlbmNpbCBcIildKV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInYtYnRuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IFwid2FybmluZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWI6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwieC1zbWFsbFwiOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXJrOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAoJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS50cmFzaChpdGVtLmlkLCBpdGVtLm5hbWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW19jKFwidi1pY29uXCIsIFtfdm0uX3YoXCIgbWRpLWRlbGV0ZSBcIildKV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgICAgNDI4OTY2MzI3MlxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIDFcbiAgICAgICAgICApXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgXSxcbiAgICAxXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iXSwibmFtZXMiOlsicmVuZGVyIiwiX3ZtIiwiX2MiLCJfc2VsZiIsImRhdGEiLCJfdiIsImF0dHJzIiwibGFiZWwiLCJtb2RlbCIsInZhbHVlIiwic2VhcmNoIiwiY2FsbGJhY2siLCIkJHYiLCJleHByZXNzaW9uIiwic3RhdGljQ2xhc3MiLCJoZWFkZXJzIiwiaXRlbXMiLCJzY29wZWRTbG90cyIsIl91Iiwia2V5IiwiZm4iLCJfcmVmIiwiaXRlbSIsImljb24iLCJocmVmIiwidXJsIiwiY29sb3IiLCJ0YXJnZXQiLCJfcmVmMiIsImZhYiIsImRhcmsiLCJvbiIsImNsaWNrIiwiJGV2ZW50IiwiZWRpdCIsImlkIiwidHJhc2giLCJuYW1lIiwiX2UiLCJzdGF0aWNSZW5kZXJGbnMiLCJfd2l0aFN0cmlwcGVkIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/video/index.vue?vue&type=template&id=77d9e9c3&\n");

/***/ }),

/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/widgets/BoxColorWidget.vue?vue&type=template&id=34660a72&":
/*!**********************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/widgets/BoxColorWidget.vue?vue&type=template&id=34660a72& ***!
  \**********************************************************************************************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   render: () => (/* binding */ render),\n/* harmony export */   staticRenderFns: () => (/* binding */ staticRenderFns)\n/* harmony export */ });\nvar render = function render() {\n  var _vm = this,\n    _c = _vm._self._c;\n  return _c(\"div\", [_c(\"div\", {\n    staticClass: \"small-box\",\n    \"class\": _vm.color ? _vm.color : \"bg-info\"\n  }, [_c(\"div\", {\n    staticClass: \"inner\"\n  }, [_c(\"h3\", [_vm._v(_vm._s(_vm.value ? _vm.value : \"0\"))]), _vm._v(\" \"), _c(\"p\", [_vm._v(_vm._s(_vm.title))])]), _vm._v(\" \"), _c(\"div\", {\n    staticClass: \"icon\"\n  }, [_c(\"i\", {\n    staticClass: \"ion\",\n    \"class\": _vm.icon ? _vm.icon : \"ion-bookmark\"\n  })]), _vm._v(\" \"), _c(\"a\", {\n    staticClass: \"small-box-footer\",\n    attrs: {\n      href: _vm.url ? _vm.url : \"#\"\n    }\n  }, [_vm._v(_vm._s(_vm.textLink ? _vm.textLink : \"Más información\") + \" \"), _c(\"i\", {\n    staticClass: \"fas fa-arrow-circle-right\"\n  })])])]);\n};\nvar staticRenderFns = [];\nrender._withStripped = true;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz9ydWxlU2V0WzFdLnJ1bGVzWzJdIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi93aWRnZXRzL0JveENvbG9yV2lkZ2V0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zNDY2MGE3MiYiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxJQUFJQSxNQUFNLEdBQUcsU0FBU0EsTUFBTUEsQ0FBQSxFQUFHO0VBQzdCLElBQUlDLEdBQUcsR0FBRyxJQUFJO0lBQ1pDLEVBQUUsR0FBR0QsR0FBRyxDQUFDRSxLQUFLLENBQUNELEVBQUU7RUFDbkIsT0FBT0EsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUNmQSxFQUFFLENBQ0EsS0FBSyxFQUNMO0lBQUVFLFdBQVcsRUFBRSxXQUFXO0lBQUUsU0FBT0gsR0FBRyxDQUFDSSxLQUFLLEdBQUdKLEdBQUcsQ0FBQ0ksS0FBSyxHQUFHO0VBQVUsQ0FBQyxFQUN0RSxDQUNFSCxFQUFFLENBQUMsS0FBSyxFQUFFO0lBQUVFLFdBQVcsRUFBRTtFQUFRLENBQUMsRUFBRSxDQUNsQ0YsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDRCxHQUFHLENBQUNLLEVBQUUsQ0FBQ0wsR0FBRyxDQUFDTSxFQUFFLENBQUNOLEdBQUcsQ0FBQ08sS0FBSyxHQUFHUCxHQUFHLENBQUNPLEtBQUssR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDdkRQLEdBQUcsQ0FBQ0ssRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUNYSixFQUFFLENBQUMsR0FBRyxFQUFFLENBQUNELEdBQUcsQ0FBQ0ssRUFBRSxDQUFDTCxHQUFHLENBQUNNLEVBQUUsQ0FBQ04sR0FBRyxDQUFDUSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDckMsQ0FBQyxFQUNGUixHQUFHLENBQUNLLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFDWEosRUFBRSxDQUFDLEtBQUssRUFBRTtJQUFFRSxXQUFXLEVBQUU7RUFBTyxDQUFDLEVBQUUsQ0FDakNGLEVBQUUsQ0FBQyxHQUFHLEVBQUU7SUFDTkUsV0FBVyxFQUFFLEtBQUs7SUFDbEIsU0FBT0gsR0FBRyxDQUFDUyxJQUFJLEdBQUdULEdBQUcsQ0FBQ1MsSUFBSSxHQUFHO0VBQy9CLENBQUMsQ0FBQyxDQUNILENBQUMsRUFDRlQsR0FBRyxDQUFDSyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQ1hKLEVBQUUsQ0FDQSxHQUFHLEVBQ0g7SUFDRUUsV0FBVyxFQUFFLGtCQUFrQjtJQUMvQk8sS0FBSyxFQUFFO01BQUVDLElBQUksRUFBRVgsR0FBRyxDQUFDWSxHQUFHLEdBQUdaLEdBQUcsQ0FBQ1ksR0FBRyxHQUFHO0lBQUk7RUFDekMsQ0FBQyxFQUNELENBQ0VaLEdBQUcsQ0FBQ0ssRUFBRSxDQUNKTCxHQUFHLENBQUNNLEVBQUUsQ0FBQ04sR0FBRyxDQUFDYSxRQUFRLEdBQUdiLEdBQUcsQ0FBQ2EsUUFBUSxHQUFHLGlCQUFpQixDQUFDLEdBQUcsR0FDNUQsQ0FBQyxFQUNEWixFQUFFLENBQUMsR0FBRyxFQUFFO0lBQUVFLFdBQVcsRUFBRTtFQUE0QixDQUFDLENBQUMsQ0FFekQsQ0FBQyxDQUVMLENBQUMsQ0FDRixDQUFDO0FBQ0osQ0FBQztBQUNELElBQUlXLGVBQWUsR0FBRyxFQUFFO0FBQ3hCZixNQUFNLENBQUNnQixhQUFhLEdBQUcsSUFBSSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9jb21wb25lbnRzL2FkbWluL3dpZGdldHMvQm94Q29sb3JXaWRnZXQudnVlP2RiZDEiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIHJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgdmFyIF92bSA9IHRoaXMsXG4gICAgX2MgPSBfdm0uX3NlbGYuX2NcbiAgcmV0dXJuIF9jKFwiZGl2XCIsIFtcbiAgICBfYyhcbiAgICAgIFwiZGl2XCIsXG4gICAgICB7IHN0YXRpY0NsYXNzOiBcInNtYWxsLWJveFwiLCBjbGFzczogX3ZtLmNvbG9yID8gX3ZtLmNvbG9yIDogXCJiZy1pbmZvXCIgfSxcbiAgICAgIFtcbiAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJpbm5lclwiIH0sIFtcbiAgICAgICAgICBfYyhcImgzXCIsIFtfdm0uX3YoX3ZtLl9zKF92bS52YWx1ZSA/IF92bS52YWx1ZSA6IFwiMFwiKSldKSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgIF9jKFwicFwiLCBbX3ZtLl92KF92bS5fcyhfdm0udGl0bGUpKV0pLFxuICAgICAgICBdKSxcbiAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJpY29uXCIgfSwgW1xuICAgICAgICAgIF9jKFwiaVwiLCB7XG4gICAgICAgICAgICBzdGF0aWNDbGFzczogXCJpb25cIixcbiAgICAgICAgICAgIGNsYXNzOiBfdm0uaWNvbiA/IF92bS5pY29uIDogXCJpb24tYm9va21hcmtcIixcbiAgICAgICAgICB9KSxcbiAgICAgICAgXSksXG4gICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgIF9jKFxuICAgICAgICAgIFwiYVwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcInNtYWxsLWJveC1mb290ZXJcIixcbiAgICAgICAgICAgIGF0dHJzOiB7IGhyZWY6IF92bS51cmwgPyBfdm0udXJsIDogXCIjXCIgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIFtcbiAgICAgICAgICAgIF92bS5fdihcbiAgICAgICAgICAgICAgX3ZtLl9zKF92bS50ZXh0TGluayA/IF92bS50ZXh0TGluayA6IFwiTcOhcyBpbmZvcm1hY2nDs25cIikgKyBcIiBcIlxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIF9jKFwiaVwiLCB7IHN0YXRpY0NsYXNzOiBcImZhcyBmYS1hcnJvdy1jaXJjbGUtcmlnaHRcIiB9KSxcbiAgICAgICAgICBdXG4gICAgICAgICksXG4gICAgICBdXG4gICAgKSxcbiAgXSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iXSwibmFtZXMiOlsicmVuZGVyIiwiX3ZtIiwiX2MiLCJfc2VsZiIsInN0YXRpY0NsYXNzIiwiY29sb3IiLCJfdiIsIl9zIiwidmFsdWUiLCJ0aXRsZSIsImljb24iLCJhdHRycyIsImhyZWYiLCJ1cmwiLCJ0ZXh0TGluayIsInN0YXRpY1JlbmRlckZucyIsIl93aXRoU3RyaXBwZWQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/widgets/BoxColorWidget.vue?vue&type=template&id=34660a72&\n");

/***/ }),

/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/widgets/ChartWidget.vue?vue&type=template&id=3bb034c7&":
/*!*******************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/widgets/ChartWidget.vue?vue&type=template&id=3bb034c7& ***!
  \*******************************************************************************************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   render: () => (/* binding */ render),\n/* harmony export */   staticRenderFns: () => (/* binding */ staticRenderFns)\n/* harmony export */ });\nvar render = function render() {\n  var _vm = this,\n    _c = _vm._self._c;\n  return _c(\"div\", [_c(\"div\", {\n    staticClass: \"card\",\n    \"class\": _vm.className\n  }, [_c(\"div\", {\n    staticClass: \"card-header\"\n  }, [_c(\"h3\", {\n    staticClass: \"card-title\"\n  }, [_c(\"i\", {\n    staticClass: \"fas fa-chart-pie mr-1\"\n  }), _vm._v(\"\\n                \" + _vm._s(_vm.title) + \"\\n            \")])]), _vm._v(\" \"), _c(\"div\", {\n    staticClass: \"card-body\"\n  }, [_c(\"div\", {\n    staticClass: \"chart\",\n    staticStyle: {\n      position: \"relative\"\n    },\n    style: {\n      height: _vm.height + \"px\"\n    },\n    attrs: {\n      id: \"revenue-chart\"\n    }\n  }, [_c(\"canvas\", {\n    style: {\n      height: _vm.height + \"px\"\n    },\n    attrs: {\n      id: _vm.id,\n      height: _vm.height\n    }\n  })])])])]);\n};\nvar staticRenderFns = [];\nrender._withStripped = true;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz9ydWxlU2V0WzFdLnJ1bGVzWzJdIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi93aWRnZXRzL0NoYXJ0V2lkZ2V0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zYmIwMzRjNyYiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxJQUFJQSxNQUFNLEdBQUcsU0FBU0EsTUFBTUEsQ0FBQSxFQUFHO0VBQzdCLElBQUlDLEdBQUcsR0FBRyxJQUFJO0lBQ1pDLEVBQUUsR0FBR0QsR0FBRyxDQUFDRSxLQUFLLENBQUNELEVBQUU7RUFDbkIsT0FBT0EsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUNmQSxFQUFFLENBQUMsS0FBSyxFQUFFO0lBQUVFLFdBQVcsRUFBRSxNQUFNO0lBQUUsU0FBT0gsR0FBRyxDQUFDSTtFQUFVLENBQUMsRUFBRSxDQUN2REgsRUFBRSxDQUFDLEtBQUssRUFBRTtJQUFFRSxXQUFXLEVBQUU7RUFBYyxDQUFDLEVBQUUsQ0FDeENGLEVBQUUsQ0FBQyxJQUFJLEVBQUU7SUFBRUUsV0FBVyxFQUFFO0VBQWEsQ0FBQyxFQUFFLENBQ3RDRixFQUFFLENBQUMsR0FBRyxFQUFFO0lBQUVFLFdBQVcsRUFBRTtFQUF3QixDQUFDLENBQUMsRUFDakRILEdBQUcsQ0FBQ0ssRUFBRSxDQUFDLG9CQUFvQixHQUFHTCxHQUFHLENBQUNNLEVBQUUsQ0FBQ04sR0FBRyxDQUFDTyxLQUFLLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxDQUNwRSxDQUFDLENBQ0gsQ0FBQyxFQUNGUCxHQUFHLENBQUNLLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFDWEosRUFBRSxDQUFDLEtBQUssRUFBRTtJQUFFRSxXQUFXLEVBQUU7RUFBWSxDQUFDLEVBQUUsQ0FDdENGLEVBQUUsQ0FDQSxLQUFLLEVBQ0w7SUFDRUUsV0FBVyxFQUFFLE9BQU87SUFDcEJLLFdBQVcsRUFBRTtNQUFFQyxRQUFRLEVBQUU7SUFBVyxDQUFDO0lBQ3JDQyxLQUFLLEVBQUU7TUFBRUMsTUFBTSxFQUFFWCxHQUFHLENBQUNXLE1BQU0sR0FBRztJQUFLLENBQUM7SUFDcENDLEtBQUssRUFBRTtNQUFFQyxFQUFFLEVBQUU7SUFBZ0I7RUFDL0IsQ0FBQyxFQUNELENBQ0VaLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDWFMsS0FBSyxFQUFFO01BQUVDLE1BQU0sRUFBRVgsR0FBRyxDQUFDVyxNQUFNLEdBQUc7SUFBSyxDQUFDO0lBQ3BDQyxLQUFLLEVBQUU7TUFBRUMsRUFBRSxFQUFFYixHQUFHLENBQUNhLEVBQUU7TUFBRUYsTUFBTSxFQUFFWCxHQUFHLENBQUNXO0lBQU87RUFDMUMsQ0FBQyxDQUFDLENBRU4sQ0FBQyxDQUNGLENBQUMsQ0FDSCxDQUFDLENBQ0gsQ0FBQztBQUNKLENBQUM7QUFDRCxJQUFJRyxlQUFlLEdBQUcsRUFBRTtBQUN4QmYsTUFBTSxDQUFDZ0IsYUFBYSxHQUFHLElBQUkiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi93aWRnZXRzL0NoYXJ0V2lkZ2V0LnZ1ZT8yYzVlIl0sInNvdXJjZXNDb250ZW50IjpbInZhciByZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gIHZhciBfdm0gPSB0aGlzLFxuICAgIF9jID0gX3ZtLl9zZWxmLl9jXG4gIHJldHVybiBfYyhcImRpdlwiLCBbXG4gICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJjYXJkXCIsIGNsYXNzOiBfdm0uY2xhc3NOYW1lIH0sIFtcbiAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiY2FyZC1oZWFkZXJcIiB9LCBbXG4gICAgICAgIF9jKFwiaDNcIiwgeyBzdGF0aWNDbGFzczogXCJjYXJkLXRpdGxlXCIgfSwgW1xuICAgICAgICAgIF9jKFwiaVwiLCB7IHN0YXRpY0NsYXNzOiBcImZhcyBmYS1jaGFydC1waWUgbXItMVwiIH0pLFxuICAgICAgICAgIF92bS5fdihcIlxcbiAgICAgICAgICAgICAgICBcIiArIF92bS5fcyhfdm0udGl0bGUpICsgXCJcXG4gICAgICAgICAgICBcIiksXG4gICAgICAgIF0pLFxuICAgICAgXSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJjYXJkLWJvZHlcIiB9LCBbXG4gICAgICAgIF9jKFxuICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiY2hhcnRcIixcbiAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7IHBvc2l0aW9uOiBcInJlbGF0aXZlXCIgfSxcbiAgICAgICAgICAgIHN0eWxlOiB7IGhlaWdodDogX3ZtLmhlaWdodCArIFwicHhcIiB9LFxuICAgICAgICAgICAgYXR0cnM6IHsgaWQ6IFwicmV2ZW51ZS1jaGFydFwiIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBbXG4gICAgICAgICAgICBfYyhcImNhbnZhc1wiLCB7XG4gICAgICAgICAgICAgIHN0eWxlOiB7IGhlaWdodDogX3ZtLmhlaWdodCArIFwicHhcIiB9LFxuICAgICAgICAgICAgICBhdHRyczogeyBpZDogX3ZtLmlkLCBoZWlnaHQ6IF92bS5oZWlnaHQgfSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIF1cbiAgICAgICAgKSxcbiAgICAgIF0pLFxuICAgIF0pLFxuICBdKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSJdLCJuYW1lcyI6WyJyZW5kZXIiLCJfdm0iLCJfYyIsIl9zZWxmIiwic3RhdGljQ2xhc3MiLCJjbGFzc05hbWUiLCJfdiIsIl9zIiwidGl0bGUiLCJzdGF0aWNTdHlsZSIsInBvc2l0aW9uIiwic3R5bGUiLCJoZWlnaHQiLCJhdHRycyIsImlkIiwic3RhdGljUmVuZGVyRm5zIiwiX3dpdGhTdHJpcHBlZCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/widgets/ChartWidget.vue?vue&type=template&id=3bb034c7&\n");

/***/ }),

/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/widgets/FooterWidget.vue?vue&type=template&id=bf415dec&":
/*!********************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/widgets/FooterWidget.vue?vue&type=template&id=bf415dec& ***!
  \********************************************************************************************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   render: () => (/* binding */ render),\n/* harmony export */   staticRenderFns: () => (/* binding */ staticRenderFns)\n/* harmony export */ });\nvar render = function render() {\n  var _vm = this,\n    _c = _vm._self._c;\n  return _vm._m(0);\n};\nvar staticRenderFns = [function () {\n  var _vm = this,\n    _c = _vm._self._c;\n  return _c(\"div\", [_c(\"footer\", {\n    staticClass: \"main-footer\"\n  }, [_c(\"strong\", [_vm._v(\"Copyright © 2023 Panel de Administración Escuela de la Participación.\")]), _vm._v(\"\\n        Todos los derechos reservados.\\n        \"), _c(\"div\", {\n    staticClass: \"float-right d-none d-sm-inline-block\"\n  }, [_c(\"b\", [_vm._v(\"Version\")]), _vm._v(\" 1.0.0\")])])]);\n}];\nrender._withStripped = true;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz9ydWxlU2V0WzFdLnJ1bGVzWzJdIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi93aWRnZXRzL0Zvb3RlcldpZGdldC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9YmY0MTVkZWMmIiwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsSUFBSUEsTUFBTSxHQUFHLFNBQVNBLE1BQU1BLENBQUEsRUFBRztFQUM3QixJQUFJQyxHQUFHLEdBQUcsSUFBSTtJQUNaQyxFQUFFLEdBQUdELEdBQUcsQ0FBQ0UsS0FBSyxDQUFDRCxFQUFFO0VBQ25CLE9BQU9ELEdBQUcsQ0FBQ0csRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNsQixDQUFDO0FBQ0QsSUFBSUMsZUFBZSxHQUFHLENBQ3BCLFlBQVk7RUFDVixJQUFJSixHQUFHLEdBQUcsSUFBSTtJQUNaQyxFQUFFLEdBQUdELEdBQUcsQ0FBQ0UsS0FBSyxDQUFDRCxFQUFFO0VBQ25CLE9BQU9BLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FDZkEsRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUFFSSxXQUFXLEVBQUU7RUFBYyxDQUFDLEVBQUUsQ0FDM0NKLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FDWEQsR0FBRyxDQUFDTSxFQUFFLENBQ0osdUVBQ0YsQ0FBQyxDQUNGLENBQUMsRUFDRk4sR0FBRyxDQUFDTSxFQUFFLENBQUMsb0RBQW9ELENBQUMsRUFDNURMLEVBQUUsQ0FBQyxLQUFLLEVBQUU7SUFBRUksV0FBVyxFQUFFO0VBQXVDLENBQUMsRUFBRSxDQUNqRUosRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDRCxHQUFHLENBQUNNLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQzVCTixHQUFHLENBQUNNLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FDakIsQ0FBQyxDQUNILENBQUMsQ0FDSCxDQUFDO0FBQ0osQ0FBQyxDQUNGO0FBQ0RQLE1BQU0sQ0FBQ1EsYUFBYSxHQUFHLElBQUkiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi93aWRnZXRzL0Zvb3RlcldpZGdldC52dWU/MDNmZSJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgcmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICB2YXIgX3ZtID0gdGhpcyxcbiAgICBfYyA9IF92bS5fc2VsZi5fY1xuICByZXR1cm4gX3ZtLl9tKDApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW1xuICBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIF92bSA9IHRoaXMsXG4gICAgICBfYyA9IF92bS5fc2VsZi5fY1xuICAgIHJldHVybiBfYyhcImRpdlwiLCBbXG4gICAgICBfYyhcImZvb3RlclwiLCB7IHN0YXRpY0NsYXNzOiBcIm1haW4tZm9vdGVyXCIgfSwgW1xuICAgICAgICBfYyhcInN0cm9uZ1wiLCBbXG4gICAgICAgICAgX3ZtLl92KFxuICAgICAgICAgICAgXCJDb3B5cmlnaHQgwqkgMjAyMyBQYW5lbCBkZSBBZG1pbmlzdHJhY2nDs24gRXNjdWVsYSBkZSBsYSBQYXJ0aWNpcGFjacOzbi5cIlxuICAgICAgICAgICksXG4gICAgICAgIF0pLFxuICAgICAgICBfdm0uX3YoXCJcXG4gICAgICAgIFRvZG9zIGxvcyBkZXJlY2hvcyByZXNlcnZhZG9zLlxcbiAgICAgICAgXCIpLFxuICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImZsb2F0LXJpZ2h0IGQtbm9uZSBkLXNtLWlubGluZS1ibG9ja1wiIH0sIFtcbiAgICAgICAgICBfYyhcImJcIiwgW192bS5fdihcIlZlcnNpb25cIildKSxcbiAgICAgICAgICBfdm0uX3YoXCIgMS4wLjBcIiksXG4gICAgICAgIF0pLFxuICAgICAgXSksXG4gICAgXSlcbiAgfSxcbl1cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9Il0sIm5hbWVzIjpbInJlbmRlciIsIl92bSIsIl9jIiwiX3NlbGYiLCJfbSIsInN0YXRpY1JlbmRlckZucyIsInN0YXRpY0NsYXNzIiwiX3YiLCJfd2l0aFN0cmlwcGVkIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/widgets/FooterWidget.vue?vue&type=template&id=bf415dec&\n");

/***/ }),

/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/widgets/HeaderWidget.vue?vue&type=template&id=c2c11108&":
/*!********************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/widgets/HeaderWidget.vue?vue&type=template&id=c2c11108& ***!
  \********************************************************************************************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   render: () => (/* binding */ render),\n/* harmony export */   staticRenderFns: () => (/* binding */ staticRenderFns)\n/* harmony export */ });\nvar render = function render() {\n  var _vm = this,\n    _c = _vm._self._c;\n  return _c(\"div\", [_c(\"div\", {\n    staticClass: \"content-header\"\n  }, [_c(\"div\", {\n    staticClass: \"container-fluid\"\n  }, [_c(\"div\", {\n    staticClass: \"row mb-2\"\n  }, [_c(\"div\", {\n    staticClass: \"col-sm-6\"\n  }, [_c(\"h1\", {\n    staticClass: \"m-0\"\n  }, [_vm._v(_vm._s(_vm.title))])]), _vm._v(\" \"), _c(\"div\", {\n    staticClass: \"col-sm-6\"\n  }, [_c(\"ol\", {\n    staticClass: \"breadcrumb float-sm-right\"\n  }, _vm._l(_vm.breadcrumbs, function (page) {\n    return _c(\"li\", {\n      staticClass: \"breadcrumb-item\"\n    }, [_c(\"router-link\", {\n      attrs: {\n        tag: page.url == \"#\" ? \"span\" : \"a\",\n        to: page.url\n      }\n    }, [_vm._v(\"\\n                            \" + _vm._s(page.text) + \"\\n                            \")])], 1);\n  }), 0)])])])])]);\n};\nvar staticRenderFns = [];\nrender._withStripped = true;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz9ydWxlU2V0WzFdLnJ1bGVzWzJdIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi93aWRnZXRzL0hlYWRlcldpZGdldC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9YzJjMTExMDgmIiwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsSUFBSUEsTUFBTSxHQUFHLFNBQVNBLE1BQU1BLENBQUEsRUFBRztFQUM3QixJQUFJQyxHQUFHLEdBQUcsSUFBSTtJQUNaQyxFQUFFLEdBQUdELEdBQUcsQ0FBQ0UsS0FBSyxDQUFDRCxFQUFFO0VBQ25CLE9BQU9BLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FDZkEsRUFBRSxDQUFDLEtBQUssRUFBRTtJQUFFRSxXQUFXLEVBQUU7RUFBaUIsQ0FBQyxFQUFFLENBQzNDRixFQUFFLENBQUMsS0FBSyxFQUFFO0lBQUVFLFdBQVcsRUFBRTtFQUFrQixDQUFDLEVBQUUsQ0FDNUNGLEVBQUUsQ0FBQyxLQUFLLEVBQUU7SUFBRUUsV0FBVyxFQUFFO0VBQVcsQ0FBQyxFQUFFLENBQ3JDRixFQUFFLENBQUMsS0FBSyxFQUFFO0lBQUVFLFdBQVcsRUFBRTtFQUFXLENBQUMsRUFBRSxDQUNyQ0YsRUFBRSxDQUFDLElBQUksRUFBRTtJQUFFRSxXQUFXLEVBQUU7RUFBTSxDQUFDLEVBQUUsQ0FBQ0gsR0FBRyxDQUFDSSxFQUFFLENBQUNKLEdBQUcsQ0FBQ0ssRUFBRSxDQUFDTCxHQUFHLENBQUNNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUM5RCxDQUFDLEVBQ0ZOLEdBQUcsQ0FBQ0ksRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUNYSCxFQUFFLENBQUMsS0FBSyxFQUFFO0lBQUVFLFdBQVcsRUFBRTtFQUFXLENBQUMsRUFBRSxDQUNyQ0YsRUFBRSxDQUNBLElBQUksRUFDSjtJQUFFRSxXQUFXLEVBQUU7RUFBNEIsQ0FBQyxFQUM1Q0gsR0FBRyxDQUFDTyxFQUFFLENBQUNQLEdBQUcsQ0FBQ1EsV0FBVyxFQUFFLFVBQVVDLElBQUksRUFBRTtJQUN0QyxPQUFPUixFQUFFLENBQ1AsSUFBSSxFQUNKO01BQUVFLFdBQVcsRUFBRTtJQUFrQixDQUFDLEVBQ2xDLENBQ0VGLEVBQUUsQ0FDQSxhQUFhLEVBQ2I7TUFDRVMsS0FBSyxFQUFFO1FBQ0xDLEdBQUcsRUFBRUYsSUFBSSxDQUFDRyxHQUFHLElBQUksR0FBRyxHQUFHLE1BQU0sR0FBRyxHQUFHO1FBQ25DQyxFQUFFLEVBQUVKLElBQUksQ0FBQ0c7TUFDWDtJQUNGLENBQUMsRUFDRCxDQUNFWixHQUFHLENBQUNJLEVBQUUsQ0FDSixnQ0FBZ0MsR0FDOUJKLEdBQUcsQ0FBQ0ssRUFBRSxDQUFDSSxJQUFJLENBQUNLLElBQUksQ0FBQyxHQUNqQixnQ0FDSixDQUFDLENBRUwsQ0FBQyxDQUNGLEVBQ0QsQ0FDRixDQUFDO0VBQ0gsQ0FBQyxDQUFDLEVBQ0YsQ0FDRixDQUFDLENBQ0YsQ0FBQyxDQUNILENBQUMsQ0FDSCxDQUFDLENBQ0gsQ0FBQyxDQUNILENBQUM7QUFDSixDQUFDO0FBQ0QsSUFBSUMsZUFBZSxHQUFHLEVBQUU7QUFDeEJoQixNQUFNLENBQUNpQixhQUFhLEdBQUcsSUFBSSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9jb21wb25lbnRzL2FkbWluL3dpZGdldHMvSGVhZGVyV2lkZ2V0LnZ1ZT80N2I4Il0sInNvdXJjZXNDb250ZW50IjpbInZhciByZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gIHZhciBfdm0gPSB0aGlzLFxuICAgIF9jID0gX3ZtLl9zZWxmLl9jXG4gIHJldHVybiBfYyhcImRpdlwiLCBbXG4gICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJjb250ZW50LWhlYWRlclwiIH0sIFtcbiAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiY29udGFpbmVyLWZsdWlkXCIgfSwgW1xuICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcInJvdyBtYi0yXCIgfSwgW1xuICAgICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiY29sLXNtLTZcIiB9LCBbXG4gICAgICAgICAgICBfYyhcImgxXCIsIHsgc3RhdGljQ2xhc3M6IFwibS0wXCIgfSwgW192bS5fdihfdm0uX3MoX3ZtLnRpdGxlKSldKSxcbiAgICAgICAgICBdKSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiY29sLXNtLTZcIiB9LCBbXG4gICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgXCJvbFwiLFxuICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiBcImJyZWFkY3J1bWIgZmxvYXQtc20tcmlnaHRcIiB9LFxuICAgICAgICAgICAgICBfdm0uX2woX3ZtLmJyZWFkY3J1bWJzLCBmdW5jdGlvbiAocGFnZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfYyhcbiAgICAgICAgICAgICAgICAgIFwibGlcIixcbiAgICAgICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwiYnJlYWRjcnVtYi1pdGVtXCIgfSxcbiAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgICAgXCJyb3V0ZXItbGlua1wiLFxuICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRhZzogcGFnZS51cmwgPT0gXCIjXCIgPyBcInNwYW5cIiA6IFwiYVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0bzogcGFnZS51cmwsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl9zKHBhZ2UudGV4dCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICBdKSxcbiAgICAgICAgXSksXG4gICAgICBdKSxcbiAgICBdKSxcbiAgXSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iXSwibmFtZXMiOlsicmVuZGVyIiwiX3ZtIiwiX2MiLCJfc2VsZiIsInN0YXRpY0NsYXNzIiwiX3YiLCJfcyIsInRpdGxlIiwiX2wiLCJicmVhZGNydW1icyIsInBhZ2UiLCJhdHRycyIsInRhZyIsInVybCIsInRvIiwidGV4dCIsInN0YXRpY1JlbmRlckZucyIsIl93aXRoU3RyaXBwZWQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/widgets/HeaderWidget.vue?vue&type=template&id=c2c11108&\n");

/***/ }),

/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/widgets/IframeGroupWidget.vue?vue&type=template&id=aeeb5db8&":
/*!*************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/widgets/IframeGroupWidget.vue?vue&type=template&id=aeeb5db8& ***!
  \*************************************************************************************************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   render: () => (/* binding */ render),\n/* harmony export */   staticRenderFns: () => (/* binding */ staticRenderFns)\n/* harmony export */ });\nvar render = function render() {\n  var _vm = this,\n    _c = _vm._self._c;\n  return _c(\"div\", {\n    staticClass: \"row\"\n  }, _vm._l(_vm.iframes, function (iframe) {\n    return _c(\"div\", {\n      \"class\": iframe.columns\n    }, [_c(\"div\", {\n      staticClass: \"card\",\n      \"class\": _vm.className,\n      attrs: {\n        id: iframe.slug\n      }\n    }, [_c(\"div\", {\n      staticClass: \"card-header\"\n    }, [_c(\"h3\", {\n      staticClass: \"card-title\"\n    }, [_c(\"i\", {\n      staticClass: \"fas mr-1\",\n      \"class\": _vm.icon\n    }), _vm._v(\"\\n                    \" + _vm._s(iframe.name) + \"\\n                \")])]), _vm._v(\" \"), _c(\"div\", {\n      staticClass: \"card-body\"\n    }, [_c(\"div\", {\n      staticClass: \"content-iframe\",\n      domProps: {\n        innerHTML: _vm._s(iframe.content_iframe)\n      }\n    })])])]);\n  }), 0);\n};\nvar staticRenderFns = [];\nrender._withStripped = true;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz9ydWxlU2V0WzFdLnJ1bGVzWzJdIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi93aWRnZXRzL0lmcmFtZUdyb3VwV2lkZ2V0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1hZWViNWRiOCYiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxJQUFJQSxNQUFNLEdBQUcsU0FBU0EsTUFBTUEsQ0FBQSxFQUFHO0VBQzdCLElBQUlDLEdBQUcsR0FBRyxJQUFJO0lBQ1pDLEVBQUUsR0FBR0QsR0FBRyxDQUFDRSxLQUFLLENBQUNELEVBQUU7RUFDbkIsT0FBT0EsRUFBRSxDQUNQLEtBQUssRUFDTDtJQUFFRSxXQUFXLEVBQUU7RUFBTSxDQUFDLEVBQ3RCSCxHQUFHLENBQUNJLEVBQUUsQ0FBQ0osR0FBRyxDQUFDSyxPQUFPLEVBQUUsVUFBVUMsTUFBTSxFQUFFO0lBQ3BDLE9BQU9MLEVBQUUsQ0FBQyxLQUFLLEVBQUU7TUFBRSxTQUFPSyxNQUFNLENBQUNDO0lBQVEsQ0FBQyxFQUFFLENBQzFDTixFQUFFLENBQ0EsS0FBSyxFQUNMO01BQ0VFLFdBQVcsRUFBRSxNQUFNO01BQ25CLFNBQU9ILEdBQUcsQ0FBQ1EsU0FBUztNQUNwQkMsS0FBSyxFQUFFO1FBQUVDLEVBQUUsRUFBRUosTUFBTSxDQUFDSztNQUFLO0lBQzNCLENBQUMsRUFDRCxDQUNFVixFQUFFLENBQUMsS0FBSyxFQUFFO01BQUVFLFdBQVcsRUFBRTtJQUFjLENBQUMsRUFBRSxDQUN4Q0YsRUFBRSxDQUFDLElBQUksRUFBRTtNQUFFRSxXQUFXLEVBQUU7SUFBYSxDQUFDLEVBQUUsQ0FDdENGLEVBQUUsQ0FBQyxHQUFHLEVBQUU7TUFBRUUsV0FBVyxFQUFFLFVBQVU7TUFBRSxTQUFPSCxHQUFHLENBQUNZO0lBQUssQ0FBQyxDQUFDLEVBQ3JEWixHQUFHLENBQUNhLEVBQUUsQ0FDSix3QkFBd0IsR0FDdEJiLEdBQUcsQ0FBQ2MsRUFBRSxDQUFDUixNQUFNLENBQUNTLElBQUksQ0FBQyxHQUNuQixvQkFDSixDQUFDLENBQ0YsQ0FBQyxDQUNILENBQUMsRUFDRmYsR0FBRyxDQUFDYSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQ1haLEVBQUUsQ0FBQyxLQUFLLEVBQUU7TUFBRUUsV0FBVyxFQUFFO0lBQVksQ0FBQyxFQUFFLENBQ3RDRixFQUFFLENBQUMsS0FBSyxFQUFFO01BQ1JFLFdBQVcsRUFBRSxnQkFBZ0I7TUFDN0JhLFFBQVEsRUFBRTtRQUFFQyxTQUFTLEVBQUVqQixHQUFHLENBQUNjLEVBQUUsQ0FBQ1IsTUFBTSxDQUFDWSxjQUFjO01BQUU7SUFDdkQsQ0FBQyxDQUFDLENBQ0gsQ0FBQyxDQUVOLENBQUMsQ0FDRixDQUFDO0VBQ0osQ0FBQyxDQUFDLEVBQ0YsQ0FDRixDQUFDO0FBQ0gsQ0FBQztBQUNELElBQUlDLGVBQWUsR0FBRyxFQUFFO0FBQ3hCcEIsTUFBTSxDQUFDcUIsYUFBYSxHQUFHLElBQUkiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi93aWRnZXRzL0lmcmFtZUdyb3VwV2lkZ2V0LnZ1ZT9jMWEzIl0sInNvdXJjZXNDb250ZW50IjpbInZhciByZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gIHZhciBfdm0gPSB0aGlzLFxuICAgIF9jID0gX3ZtLl9zZWxmLl9jXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHsgc3RhdGljQ2xhc3M6IFwicm93XCIgfSxcbiAgICBfdm0uX2woX3ZtLmlmcmFtZXMsIGZ1bmN0aW9uIChpZnJhbWUpIHtcbiAgICAgIHJldHVybiBfYyhcImRpdlwiLCB7IGNsYXNzOiBpZnJhbWUuY29sdW1ucyB9LCBbXG4gICAgICAgIF9jKFxuICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiY2FyZFwiLFxuICAgICAgICAgICAgY2xhc3M6IF92bS5jbGFzc05hbWUsXG4gICAgICAgICAgICBhdHRyczogeyBpZDogaWZyYW1lLnNsdWcgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIFtcbiAgICAgICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiY2FyZC1oZWFkZXJcIiB9LCBbXG4gICAgICAgICAgICAgIF9jKFwiaDNcIiwgeyBzdGF0aWNDbGFzczogXCJjYXJkLXRpdGxlXCIgfSwgW1xuICAgICAgICAgICAgICAgIF9jKFwiaVwiLCB7IHN0YXRpY0NsYXNzOiBcImZhcyBtci0xXCIsIGNsYXNzOiBfdm0uaWNvbiB9KSxcbiAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgICAgICAgICAgICAgXCIgK1xuICAgICAgICAgICAgICAgICAgICBfdm0uX3MoaWZyYW1lLm5hbWUpICtcbiAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiY2FyZC1ib2R5XCIgfSwgW1xuICAgICAgICAgICAgICBfYyhcImRpdlwiLCB7XG4gICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiY29udGVudC1pZnJhbWVcIixcbiAgICAgICAgICAgICAgICBkb21Qcm9wczogeyBpbm5lckhUTUw6IF92bS5fcyhpZnJhbWUuY29udGVudF9pZnJhbWUpIH0sXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgXVxuICAgICAgICApLFxuICAgICAgXSlcbiAgICB9KSxcbiAgICAwXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iXSwibmFtZXMiOlsicmVuZGVyIiwiX3ZtIiwiX2MiLCJfc2VsZiIsInN0YXRpY0NsYXNzIiwiX2wiLCJpZnJhbWVzIiwiaWZyYW1lIiwiY29sdW1ucyIsImNsYXNzTmFtZSIsImF0dHJzIiwiaWQiLCJzbHVnIiwiaWNvbiIsIl92IiwiX3MiLCJuYW1lIiwiZG9tUHJvcHMiLCJpbm5lckhUTUwiLCJjb250ZW50X2lmcmFtZSIsInN0YXRpY1JlbmRlckZucyIsIl93aXRoU3RyaXBwZWQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/widgets/IframeGroupWidget.vue?vue&type=template&id=aeeb5db8&\n");

/***/ }),

/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/widgets/NavbarWidget.vue?vue&type=template&id=0c01e93f&":
/*!********************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/widgets/NavbarWidget.vue?vue&type=template&id=0c01e93f& ***!
  \********************************************************************************************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   render: () => (/* binding */ render),\n/* harmony export */   staticRenderFns: () => (/* binding */ staticRenderFns)\n/* harmony export */ });\nvar render = function render() {\n  var _vm = this,\n    _c = _vm._self._c;\n  return _c(\"div\", [_c(\"nav\", {\n    staticClass: \"main-header navbar navbar-expand navbar-white navbar-light\"\n  }, [_c(\"ul\", {\n    staticClass: \"navbar-nav\"\n  }, [_vm._m(0), _vm._v(\" \"), _c(\"li\", {\n    staticClass: \"nav-item d-none d-sm-inline-block\"\n  }, [_c(\"a\", {\n    staticClass: \"nav-link\"\n  }, [_vm._v(_vm._s(_vm.$appName))])])]), _vm._v(\" \"), _c(\"ul\", {\n    staticClass: \"navbar-nav ml-auto\"\n  }, [_vm._m(1), _vm._v(\" \"), _vm._m(2), _vm._v(\" \"), _vm._m(3), _vm._v(\" \"), _vm.UserData != null ? _c(\"li\", {\n    staticClass: \"nav-item\"\n  }, [_c(\"div\", {\n    staticClass: \"dropdown\"\n  }, [_vm._m(4), _vm._v(\" \"), _c(\"div\", {\n    staticClass: \"dropdown-menu\",\n    attrs: {\n      \"aria-labelledby\": \"dropdownMenuLink\"\n    }\n  }, _vm._l(_vm.modules, function (mod) {\n    return _c(\"a\", {\n      staticClass: \"dropdown-item\",\n      attrs: {\n        href: mod.url_login\n      }\n    }, [_vm._v(\"\\n                            \" + _vm._s(mod.name) + \"\\n                        \")]);\n  }), 0)])]) : _vm._e(), _vm._v(\" \"), _c(\"li\", {\n    staticClass: \"nav-item\"\n  }, [_vm.UserData != null ? _c(\"a\", {\n    staticClass: \"nav-link\",\n    attrs: {\n      href: \"javascript:;\",\n      role: \"button\"\n    }\n  }, [_c(\"b\", [_vm._v(_vm._s(_vm.UserData.name))])]) : _vm._e()]), _vm._v(\" \"), _vm.UserData != null ? _c(\"li\", {\n    staticClass: \"nav-item\"\n  }, [_c(\"a\", {\n    staticClass: \"nav-link\",\n    attrs: {\n      href: \"javascript:;\",\n      title: \"Cerrar sesión\"\n    },\n    on: {\n      click: function click($event) {\n        return _vm.LogOut();\n      }\n    }\n  }, [_c(\"i\", {\n    staticClass: \"fas fa-sign-out-alt\"\n  })])]) : _vm._e(), _vm._v(\" \"), _vm.UserData == null ? _c(\"li\", {\n    staticClass: \"nav-item\"\n  }, [_vm._m(5)]) : _vm._e()])])]);\n};\nvar staticRenderFns = [function () {\n  var _vm = this,\n    _c = _vm._self._c;\n  return _c(\"li\", {\n    staticClass: \"nav-item\"\n  }, [_c(\"a\", {\n    staticClass: \"nav-link\",\n    attrs: {\n      \"data-widget\": \"pushmenu\",\n      href: \"#\",\n      role: \"button\"\n    }\n  }, [_c(\"i\", {\n    staticClass: \"fas fa-bars\"\n  })])]);\n}, function () {\n  var _vm = this,\n    _c = _vm._self._c;\n  return _c(\"li\", {\n    staticClass: \"nav-item\"\n  }, [_c(\"a\", {\n    staticClass: \"nav-link nav-link-platforms red btn-decrease\",\n    attrs: {\n      href: \"javascript:;\",\n      title: \"Disminuir tamaño de letra\"\n    }\n  }, [_c(\"b\", [_vm._v(\"A-\")])])]);\n}, function () {\n  var _vm = this,\n    _c = _vm._self._c;\n  return _c(\"li\", {\n    staticClass: \"nav-item\"\n  }, [_c(\"a\", {\n    staticClass: \"nav-link nav-link-platforms red btn-increment\",\n    attrs: {\n      href: \"javascript:;\",\n      title: \"Aumentar tamaño de letra\"\n    }\n  }, [_c(\"b\", [_vm._v(\"A+\")])])]);\n}, function () {\n  var _vm = this,\n    _c = _vm._self._c;\n  return _c(\"li\", {\n    staticClass: \"nav-item\"\n  }, [_c(\"a\", {\n    staticClass: \"nav-link nav-link-platforms black btn-contrast\",\n    attrs: {\n      href: \"javascript:;\",\n      title: \"Cambiar contraste\"\n    }\n  }, [_c(\"i\", {\n    staticClass: \"fas fa-adjust\"\n  })])]);\n}, function () {\n  var _vm = this,\n    _c = _vm._self._c;\n  return _c(\"a\", {\n    staticClass: \"btn dropdown-toggle\",\n    attrs: {\n      href: \"#\",\n      role: \"button\",\n      id: \"dropdownMenuLink\",\n      \"data-toggle\": \"dropdown\",\n      \"aria-haspopup\": \"true\",\n      \"aria-expanded\": \"false\"\n    }\n  }, [_c(\"b\", [_vm._v(\"Módulos\")])]);\n}, function () {\n  var _vm = this,\n    _c = _vm._self._c;\n  return _c(\"a\", {\n    staticClass: \"nav-link\",\n    attrs: {\n      href: \"/login\"\n    }\n  }, [_c(\"b\", [_vm._v(\"Iniciar sesión\")])]);\n}];\nrender._withStripped = true;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz9ydWxlU2V0WzFdLnJ1bGVzWzJdIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi93aWRnZXRzL05hdmJhcldpZGdldC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MGMwMWU5M2YmIiwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsSUFBSUEsTUFBTSxHQUFHLFNBQVNBLE1BQU1BLENBQUEsRUFBRztFQUM3QixJQUFJQyxHQUFHLEdBQUcsSUFBSTtJQUNaQyxFQUFFLEdBQUdELEdBQUcsQ0FBQ0UsS0FBSyxDQUFDRCxFQUFFO0VBQ25CLE9BQU9BLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FDZkEsRUFBRSxDQUNBLEtBQUssRUFDTDtJQUNFRSxXQUFXLEVBQ1Q7RUFDSixDQUFDLEVBQ0QsQ0FDRUYsRUFBRSxDQUFDLElBQUksRUFBRTtJQUFFRSxXQUFXLEVBQUU7RUFBYSxDQUFDLEVBQUUsQ0FDdENILEdBQUcsQ0FBQ0ksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUNUSixHQUFHLENBQUNLLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFDWEosRUFBRSxDQUFDLElBQUksRUFBRTtJQUFFRSxXQUFXLEVBQUU7RUFBb0MsQ0FBQyxFQUFFLENBQzdERixFQUFFLENBQUMsR0FBRyxFQUFFO0lBQUVFLFdBQVcsRUFBRTtFQUFXLENBQUMsRUFBRSxDQUNuQ0gsR0FBRyxDQUFDSyxFQUFFLENBQUNMLEdBQUcsQ0FBQ00sRUFBRSxDQUFDTixHQUFHLENBQUNPLFFBQVEsQ0FBQyxDQUFDLENBQzdCLENBQUMsQ0FDSCxDQUFDLENBQ0gsQ0FBQyxFQUNGUCxHQUFHLENB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QUFFRSxXQUFXLEVBQUU7RUFBZ0IsQ0FBQyxDQUFDLENBQzVDLENBQUMsQ0FDRixDQUFDO0FBQ0osQ0FBQyxFQUNELFlBQVk7RUFDVixJQUFJSCxHQUFHLEdBQUcsSUFBSTtJQUNaQyxFQUFFLEdBQUdELEdBQUcsQ0FBQ0UsS0FBSyxDQUFDRCxFQUFFO0VBQ25CLE9BQU9BLEVBQUUsQ0FDUCxHQUFHLEVBQ0g7SUFDRUUsV0FBVyxFQUFFLHFCQUFxQjtJQUNsQ00sS0FBSyxFQUFFO01BQ0xJLElBQUksRUFBRSxHQUFHO01BQ1RJLElBQUksRUFBRSxRQUFRO01BQ2RPLEVBQUUsRUFBRSxrQkFBa0I7TUFDdEIsYUFBYSxFQUFFLFVBQVU7TUFDekIsZUFBZSxFQUFFLE1BQU07TUFDdkIsZUFBZSxFQUFFO0lBQ25CO0VBQ0YsQ0FBQyxFQUNELENBQUN2QixFQUFFLENBQUMsR0FBRyxFQUFFLENBQUNELEdBQUcsQ0FBQ0ssRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FDL0IsQ0FBQztBQUNILENBQUMsRUFDRCxZQUFZO0VBQ1YsSUFBSUwsR0FBRyxHQUFHLElBQUk7SUFDWkMsRUFBRSxHQUFHRCxHQUFHLENBQUNFLEtBQUssQ0FBQ0QsRUFBRTtFQUNuQixPQUFPQSxFQUFFLENBQUMsR0FBRyxFQUFFO0lBQUVFLFdBQVcsRUFBRSxVQUFVO0lBQUVNLEtBQUssRUFBRTtNQUFFSSxJQUFJLEVBQUU7SUFBUztFQUFFLENBQUMsRUFBRSxDQUNyRVosRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDRCxHQUFHLENBQUNLLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FDcEMsQ0FBQztBQUNKLENBQUMsQ0FDRjtBQUNETixNQUFNLENBQUMwQixhQUFhLEdBQUcsSUFBSSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9jb21wb25lbnRzL2FkbWluL3dpZGdldHMvTmF2YmFyV2lkZ2V0LnZ1ZT83ODNmIl0sInNvdXJjZXNDb250ZW50IjpbInZhciByZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gIHZhciBfdm0gPSB0aGlzLFxuICAgIF9jID0gX3ZtLl9zZWxmLl9jXG4gIHJldHVybiBfYyhcImRpdlwiLCBbXG4gICAgX2MoXG4gICAgICBcIm5hdlwiLFxuICAgICAge1xuICAgICAgICBzdGF0aWNDbGFzczpcbiAgICAgICAgICBcIm1haW4taGVhZGVyIG5hdmJhciBuYXZiYXItZXhwYW5kIG5hdmJhci13aGl0ZSBuYXZiYXItbGlnaHRcIixcbiAgICAgIH0sXG4gICAgICBbXG4gICAgICAgIF9jKFwidWxcIiwgeyBzdGF0aWNDbGFzczogXCJuYXZiYXItbmF2XCIgfSwgW1xuICAgICAgICAgIF92bS5fbSgwKSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgIF9jKFwibGlcIiwgeyBzdGF0aWNDbGFzczogXCJuYXYtaXRlbSBkLW5vbmUgZC1zbS1pbmxpbmUtYmxvY2tcIiB9LCBbXG4gICAgICAgICAgICBfYyhcImFcIiwgeyBzdGF0aWNDbGFzczogXCJuYXYtbGlua1wiIH0sIFtcbiAgICAgICAgICAgICAgX3ZtLl92KF92bS5fcyhfdm0uJGFwcE5hbWUpKSxcbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgIF0pLFxuICAgICAgICBdKSxcbiAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgX2MoXCJ1bFwiLCB7IHN0YXRpY0NsYXNzOiBcIm5hdmJhci1uYXYgbWwtYXV0b1wiIH0sIFtcbiAgICAgICAgICBfdm0uX20oMSksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICBfdm0uX20oMiksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICBfdm0uX20oMyksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICBfdm0uVXNlckRhdGEgIT0gbnVsbFxuICAgICAgICAgICAgPyBfYyhcImxpXCIsIHsgc3RhdGljQ2xhc3M6IFwibmF2LWl0ZW1cIiB9LCBbXG4gICAgICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJkcm9wZG93blwiIH0sIFtcbiAgICAgICAgICAgICAgICAgIF92bS5fbSg0KSxcbiAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImRyb3Bkb3duLW1lbnVcIixcbiAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBcImFyaWEtbGFiZWxsZWRieVwiOiBcImRyb3Bkb3duTWVudUxpbmtcIiB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBfdm0uX2woX3ZtLm1vZHVsZXMsIGZ1bmN0aW9uIChtb2QpIHtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICBcImFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZHJvcGRvd24taXRlbVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBocmVmOiBtb2QudXJsX2xvZ2luIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl9zKG1vZC5uYW1lKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICBfYyhcImxpXCIsIHsgc3RhdGljQ2xhc3M6IFwibmF2LWl0ZW1cIiB9LCBbXG4gICAgICAgICAgICBfdm0uVXNlckRhdGEgIT0gbnVsbFxuICAgICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgICAgXCJhXCIsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcIm5hdi1saW5rXCIsXG4gICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IGhyZWY6IFwiamF2YXNjcmlwdDo7XCIsIHJvbGU6IFwiYnV0dG9uXCIgfSxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBbX2MoXCJiXCIsIFtfdm0uX3YoX3ZtLl9zKF92bS5Vc2VyRGF0YS5uYW1lKSldKV1cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgXSksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICBfdm0uVXNlckRhdGEgIT0gbnVsbFxuICAgICAgICAgICAgPyBfYyhcImxpXCIsIHsgc3RhdGljQ2xhc3M6IFwibmF2LWl0ZW1cIiB9LCBbXG4gICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICBcImFcIixcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwibmF2LWxpbmtcIixcbiAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgaHJlZjogXCJqYXZhc2NyaXB0OjtcIiwgdGl0bGU6IFwiQ2VycmFyIHNlc2nDs25cIiB9LFxuICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAoJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLkxvZ091dCgpXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBbX2MoXCJpXCIsIHsgc3RhdGljQ2xhc3M6IFwiZmFzIGZhLXNpZ24tb3V0LWFsdFwiIH0pXVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgX3ZtLlVzZXJEYXRhID09IG51bGxcbiAgICAgICAgICAgID8gX2MoXCJsaVwiLCB7IHN0YXRpY0NsYXNzOiBcIm5hdi1pdGVtXCIgfSwgW192bS5fbSg1KV0pXG4gICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICBdKSxcbiAgICAgIF1cbiAgICApLFxuICBdKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtcbiAgZnVuY3Rpb24gKCkge1xuICAgIHZhciBfdm0gPSB0aGlzLFxuICAgICAgX2MgPSBfdm0uX3NlbGYuX2NcbiAgICByZXR1cm4gX2MoXCJsaVwiLCB7IHN0YXRpY0NsYXNzOiBcIm5hdi1pdGVtXCIgfSwgW1xuICAgICAgX2MoXG4gICAgICAgIFwiYVwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3RhdGljQ2xhc3M6IFwibmF2LWxpbmtcIixcbiAgICAgICAgICBhdHRyczogeyBcImRhdGEtd2lkZ2V0XCI6IFwicHVzaG1lbnVcIiwgaHJlZjogXCIjXCIsIHJvbGU6IFwiYnV0dG9uXCIgfSxcbiAgICAgICAgfSxcbiAgICAgICAgW19jKFwiaVwiLCB7IHN0YXRpY0NsYXNzOiBcImZhcyBmYS1iYXJzXCIgfSldXG4gICAgICApLFxuICAgIF0pXG4gIH0sXG4gIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgX3ZtID0gdGhpcyxcbiAgICAgIF9jID0gX3ZtLl9zZWxmLl9jXG4gICAgcmV0dXJuIF9jKFwibGlcIiwgeyBzdGF0aWNDbGFzczogXCJuYXYtaXRlbVwiIH0sIFtcbiAgICAgIF9jKFxuICAgICAgICBcImFcIixcbiAgICAgICAge1xuICAgICAgICAgIHN0YXRpY0NsYXNzOiBcIm5hdi1saW5rIG5hdi1saW5rLXBsYXRmb3JtcyByZWQgYnRuLWRlY3JlYXNlXCIsXG4gICAgICAgICAgYXR0cnM6IHsgaHJlZjogXCJqYXZhc2NyaXB0OjtcIiwgdGl0bGU6IFwiRGlzbWludWlyIHRhbWHDsW8gZGUgbGV0cmFcIiB9LFxuICAgICAgICB9LFxuICAgICAgICBbX2MoXCJiXCIsIFtfdm0uX3YoXCJBLVwiKV0pXVxuICAgICAgKSxcbiAgICBdKVxuICB9LFxuICBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIF92bSA9IHRoaXMsXG4gICAgICBfYyA9IF92bS5fc2VsZi5fY1xuICAgIHJldHVybiBfYyhcImxpXCIsIHsgc3RhdGljQ2xhc3M6IFwibmF2LWl0ZW1cIiB9LCBbXG4gICAgICBfYyhcbiAgICAgICAgXCJhXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdGF0aWNDbGFzczogXCJuYXYtbGluayBuYXYtbGluay1wbGF0Zm9ybXMgcmVkIGJ0bi1pbmNyZW1lbnRcIixcbiAgICAgICAgICBhdHRyczogeyBocmVmOiBcImphdmFzY3JpcHQ6O1wiLCB0aXRsZTogXCJBdW1lbnRhciB0YW1hw7FvIGRlIGxldHJhXCIgfSxcbiAgICAgICAgfSxcbiAgICAgICAgW19jKFwiYlwiLCBbX3ZtLl92KFwiQStcIildKV1cbiAgICAgICksXG4gICAgXSlcbiAgfSxcbiAgZnVuY3Rpb24gKCkge1xuICAgIHZhciBfdm0gPSB0aGlzLFxuICAgICAgX2MgPSBfdm0uX3NlbGYuX2NcbiAgICByZXR1cm4gX2MoXCJsaVwiLCB7IHN0YXRpY0NsYXNzOiBcIm5hdi1pdGVtXCIgfSwgW1xuICAgICAgX2MoXG4gICAgICAgIFwiYVwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3RhdGljQ2xhc3M6IFwibmF2LWxpbmsgbmF2LWxpbmstcGxhdGZvcm1zIGJsYWNrIGJ0bi1jb250cmFzdFwiLFxuICAgICAgICAgIGF0dHJzOiB7IGhyZWY6IFwiamF2YXNjcmlwdDo7XCIsIHRpdGxlOiBcIkNhbWJpYXIgY29udHJhc3RlXCIgfSxcbiAgICAgICAgfSxcbiAgICAgICAgW19jKFwiaVwiLCB7IHN0YXRpY0NsYXNzOiBcImZhcyBmYS1hZGp1c3RcIiB9KV1cbiAgICAgICksXG4gICAgXSlcbiAgfSxcbiAgZnVuY3Rpb24gKCkge1xuICAgIHZhciBfdm0gPSB0aGlzLFxuICAgICAgX2MgPSBfdm0uX3NlbGYuX2NcbiAgICByZXR1cm4gX2MoXG4gICAgICBcImFcIixcbiAgICAgIHtcbiAgICAgICAgc3RhdGljQ2xhc3M6IFwiYnRuIGRyb3Bkb3duLXRvZ2dsZVwiLFxuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIGhyZWY6IFwiI1wiLFxuICAgICAgICAgIHJvbGU6IFwiYnV0dG9uXCIsXG4gICAgICAgICAgaWQ6IFwiZHJvcGRvd25NZW51TGlua1wiLFxuICAgICAgICAgIFwiZGF0YS10b2dnbGVcIjogXCJkcm9wZG93blwiLFxuICAgICAgICAgIFwiYXJpYS1oYXNwb3B1cFwiOiBcInRydWVcIixcbiAgICAgICAgICBcImFyaWEtZXhwYW5kZWRcIjogXCJmYWxzZVwiLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIFtfYyhcImJcIiwgW192bS5fdihcIk3Ds2R1bG9zXCIpXSldXG4gICAgKVxuICB9LFxuICBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIF92bSA9IHRoaXMsXG4gICAgICBfYyA9IF92bS5fc2VsZi5fY1xuICAgIHJldHVybiBfYyhcImFcIiwgeyBzdGF0aWNDbGFzczogXCJuYXYtbGlua1wiLCBhdHRyczogeyBocmVmOiBcIi9sb2dpblwiIH0gfSwgW1xuICAgICAgX2MoXCJiXCIsIFtfdm0uX3YoXCJJbmljaWFyIHNlc2nDs25cIildKSxcbiAgICBdKVxuICB9LFxuXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iXSwibmFtZXMiOlsicmVuZGVyIiwiX3ZtIiwiX2MiLCJfc2VsZiIsInN0YXRpY0NsYXNzIiwiX20iLCJfdiIsIl9zIiwiJGFwcE5hbWUiLCJVc2VyRGF0YSIsImF0dHJzIiwiX2wiLCJtb2R1bGVzIiwibW9kIiwiaHJlZiIsInVybF9sb2dpbiIsIm5hbWUiLCJfZSIsInJvbGUiLCJ0aXRsZSIsIm9uIiwiY2xpY2siLCIkZXZlbnQiLCJMb2dPdXQiLCJzdGF0aWNSZW5kZXJGbnMiLCJpZCIsIl93aXRoU3RyaXBwZWQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/widgets/NavbarWidget.vue?vue&type=template&id=0c01e93f&\n");

/***/ }),

/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/widgets/SidebarWidget.vue?vue&type=template&id=5c937b85&":
/*!*********************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/widgets/SidebarWidget.vue?vue&type=template&id=5c937b85& ***!
  \*********************************************************************************************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   render: () => (/* binding */ render),\n/* harmony export */   staticRenderFns: () => (/* binding */ staticRenderFns)\n/* harmony export */ });\nvar render = function render() {\n  var _vm = this,\n    _c = _vm._self._c;\n  return _c(\"aside\", {\n    staticClass: \"main-sidebar sidebar-dark-red elevation-4\"\n  }, [_c(\"div\", {\n    staticClass: \"text-center\",\n    attrs: {\n      id: \"logo-ppal\"\n    }\n  }, [_c(\"img\", {\n    staticClass: \"img-resposive pointer\",\n    attrs: {\n      src: \"svg/logos/logo-plataforma.svg\"\n    },\n    on: {\n      click: function click($event) {\n        return _vm.goToPlatform();\n      }\n    }\n  })]), _vm._v(\" \"), _c(\"div\", {\n    staticClass: \"sidebar\"\n  }, [_c(\"div\", {\n    staticClass: \"user-panel mt-3 pb-3 mb-3 d-flex\"\n  }), _vm._v(\" \"), _c(\"nav\", {\n    staticClass: \"options\"\n  }, [_c(\"ul\", {\n    staticClass: \"nav nav-pills nav-sidebar flex-column\",\n    attrs: {\n      \"data-widget\": \"treeview\",\n      role: \"menu\",\n      \"data-accordion\": \"true\"\n    }\n  }, _vm._l(_vm.menu, function (item) {\n    return _vm.UserData != null ? _c(\"li\", {\n      \"class\": (item.is_separator == 1 ? \"nav-header\" : \"nav-item\") + \" \" + (item.childs.length > 0 ? \"with-child\" : \"\")\n    }, [item.is_separator != 1 ? _c(\"router-link\", {\n      staticClass: \"nav-link\",\n      attrs: {\n        tag: item.childs.length > 0 ? \"span\" : \"a\",\n        to: item.childs.length > 0 ? \"#\" : item.link\n      }\n    }, [_c(\"i\", {\n      staticClass: \"fas\",\n      \"class\": item.icon\n    }), _vm._v(\"\\n                        \" + _vm._s(item.name) + \"\\n                    \")]) : _vm._e(), _vm._v(\" \"), item.is_separator == 1 ? _c(\"span\", [_c(\"i\", {\n      staticClass: \"fas\",\n      \"class\": item.icon\n    }), _vm._v(\" \"), _c(\"p\", [_vm._v(\"\\n                            \" + _vm._s(item.name) + \"\\n                        \")])]) : _vm._e(), _vm._v(\" \"), item.is_separator != 1 && item.childs.length > 0 ? _c(\"ul\", {\n      staticClass: \"nav nav-treeview\"\n    }, _vm._l(item.childs, function (child) {\n      return _c(\"li\", {\n        staticClass: \"nav-item\"\n      }, [_c(\"router-link\", {\n        staticClass: \"nav-link\",\n        attrs: {\n          tag: \"a\",\n          to: child.link\n        }\n      }, [_c(\"span\", [_c(\"i\", {\n        staticClass: \"fa fa-dot-circle\"\n      }), _vm._v(\"\\n                                    \" + _vm._s(child.name) + \"\\n                                \")])])], 1);\n    }), 0) : _vm._e()], 1) : _vm._e();\n  }), 0)]), _vm._v(\" \"), _c(\"br\"), _vm._v(\" \"), _c(\"br\")]), _vm._v(\" \"), _c(\"div\", {\n    staticClass: \"login-footer-menu\"\n  })]);\n};\nvar staticRenderFns = [];\nrender._withStripped = true;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz9ydWxlU2V0WzFdLnJ1bGVzWzJdIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi93aWRnZXRzL1NpZGViYXJXaWRnZXQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTVjOTM3Yjg1JiIsIm1hcHBpbmdzIjoiOzs7OztBQUFBLElBQUlBLE1BQU0sR0FBRyxTQUFTQSxNQUFNQSxDQUFBLEVBQUc7RUFDN0IsSUFBSUMsR0FBRyxHQUFHLElBQUk7SUFDWkMsRUFBRSxHQUFHRCxHQUFHLENBQUNFLEtBQUssQ0FBQ0QsRUFBRTtFQUNuQixPQUFPQSxFQUFFLENBQ1AsT0FBTyxFQUNQO0lBQUVFLFdBQVcsRUFBRTtFQUE0QyxDQUFDLEVBQzVELENBQ0VGLEVBQUUsQ0FBQyxLQUFLLEVBQUU7SUFBRUUsV0FBVyxFQUFFLGFBQWE7SUFBRUMsS0FBSyxFQUFFO01BQUVDLEVBQUUsRUFBRTtJQUFZO0VBQUUsQ0FBQyxFQUFFLENBQ3BFSixFQUFFLENBQUMsS0FBSyxFQUFFO0lBQ1JFLFdBQVcsRUFBRSx1QkFBdUI7SUFDcENDLEtBQUssRUFBRTtNQUFFRSxHQUFHLEVBQUU7SUFBZ0MsQ0FBQztJQUMvQ0MsRUFBRSxFQUFFO01BQ0ZDLEtBQUssRUFBRSxTQUFBQSxNQUFVQyxNQUFNLEVBQUU7UUFDdkIsT0FBT1QsR0FBRyxDQUFDVSxZQUFZLENBQUMsQ0FBQztNQUMzQjtJQUNGO0VBQ0YsQ0FBQyxDQUFDLENBQ0gsQ0FBQyxFQUNGVixHQUFHLENBQUNXLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFDWFYsRUFBRSxDQUFDLEtBQUssRUFBRTtJQUFFRSxX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bWluL3dpZGdldHMvU2lkZWJhcldpZGdldC52dWU/YmRlZCJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgcmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICB2YXIgX3ZtID0gdGhpcyxcbiAgICBfYyA9IF92bS5fc2VsZi5fY1xuICByZXR1cm4gX2MoXG4gICAgXCJhc2lkZVwiLFxuICAgIHsgc3RhdGljQ2xhc3M6IFwibWFpbi1zaWRlYmFyIHNpZGViYXItZGFyay1yZWQgZWxldmF0aW9uLTRcIiB9LFxuICAgIFtcbiAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwidGV4dC1jZW50ZXJcIiwgYXR0cnM6IHsgaWQ6IFwibG9nby1wcGFsXCIgfSB9LCBbXG4gICAgICAgIF9jKFwiaW1nXCIsIHtcbiAgICAgICAgICBzdGF0aWNDbGFzczogXCJpbWctcmVzcG9zaXZlIHBvaW50ZXJcIixcbiAgICAgICAgICBhdHRyczogeyBzcmM6IFwic3ZnL2xvZ29zL2xvZ28tcGxhdGFmb3JtYS5zdmdcIiB9LFxuICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKCRldmVudCkge1xuICAgICAgICAgICAgICByZXR1cm4gX3ZtLmdvVG9QbGF0Zm9ybSgpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgXSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJzaWRlYmFyXCIgfSwgW1xuICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcInVzZXItcGFuZWwgbXQtMyBwYi0zIG1iLTMgZC1mbGV4XCIgfSksXG4gICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgIF9jKFwibmF2XCIsIHsgc3RhdGljQ2xhc3M6IFwib3B0aW9uc1wiIH0sIFtcbiAgICAgICAgICBfYyhcbiAgICAgICAgICAgIFwidWxcIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwibmF2IG5hdi1waWxscyBuYXYtc2lkZWJhciBmbGV4LWNvbHVtblwiLFxuICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgIFwiZGF0YS13aWRnZXRcIjogXCJ0cmVldmlld1wiLFxuICAgICAgICAgICAgICAgIHJvbGU6IFwibWVudVwiLFxuICAgICAgICAgICAgICAgIFwiZGF0YS1hY2NvcmRpb25cIjogXCJ0cnVlXCIsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgX3ZtLl9sKF92bS5tZW51LCBmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgICAgICByZXR1cm4gX3ZtLlVzZXJEYXRhICE9IG51bGxcbiAgICAgICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgICAgICBcImxpXCIsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzczpcbiAgICAgICAgICAgICAgICAgICAgICAgIChpdGVtLmlzX3NlcGFyYXRvciA9PSAxID8gXCJuYXYtaGVhZGVyXCIgOiBcIm5hdi1pdGVtXCIpICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIChpdGVtLmNoaWxkcy5sZW5ndGggPiAwID8gXCJ3aXRoLWNoaWxkXCIgOiBcIlwiKSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uaXNfc2VwYXJhdG9yICE9IDFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJyb3V0ZXItbGlua1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcIm5hdi1saW5rXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWc6IGl0ZW0uY2hpbGRzLmxlbmd0aCA+IDAgPyBcInNwYW5cIiA6IFwiYVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bzogaXRlbS5jaGlsZHMubGVuZ3RoID4gMCA/IFwiI1wiIDogaXRlbS5saW5rLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFwiaVwiLCB7IHN0YXRpY0NsYXNzOiBcImZhc1wiLCBjbGFzczogaXRlbS5pY29uIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3MoaXRlbS5uYW1lKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uaXNfc2VwYXJhdG9yID09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gX2MoXCJzcGFuXCIsIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcImlcIiwgeyBzdGF0aWNDbGFzczogXCJmYXNcIiwgY2xhc3M6IGl0ZW0uaWNvbiB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFwicFwiLCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3MoaXRlbS5uYW1lKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICBpdGVtLmlzX3NlcGFyYXRvciAhPSAxICYmIGl0ZW0uY2hpbGRzLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ1bFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwibmF2IG5hdi10cmVldmlld1wiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl9sKGl0ZW0uY2hpbGRzLCBmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJsaVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiBcIm5hdi1pdGVtXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJyb3V0ZXItbGlua1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJuYXYtbGlua1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyB0YWc6IFwiYVwiLCB0bzogY2hpbGQubGluayB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJzcGFuXCIsIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcImlcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZmEgZmEtZG90LWNpcmNsZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3MoY2hpbGQubmFtZSkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAwXG4gICAgICAgICAgKSxcbiAgICAgICAgXSksXG4gICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgIF9jKFwiYnJcIiksXG4gICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgIF9jKFwiYnJcIiksXG4gICAgICBdKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImxvZ2luLWZvb3Rlci1tZW51XCIgfSksXG4gICAgXVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9Il0sIm5hbWVzIjpbInJlbmRlciIsIl92bSIsIl9jIiwiX3NlbGYiLCJzdGF0aWNDbGFzcyIsImF0dHJzIiwiaWQiLCJzcmMiLCJvbiIsImNsaWNrIiwiJGV2ZW50IiwiZ29Ub1BsYXRmb3JtIiwiX3YiLCJyb2xlIiwiX2wiLCJtZW51IiwiaXRlbSIsIlVzZXJEYXRhIiwiaXNfc2VwYXJhdG9yIiwiY2hpbGRzIiwibGVuZ3RoIiwidGFnIiwidG8iLCJsaW5rIiwiaWNvbiIsIl9zIiwibmFtZSIsIl9lIiwiY2hpbGQiLCJzdGF0aWNSZW5kZXJGbnMiLCJfd2l0aFN0cmlwcGVkIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/widgets/SidebarWidget.vue?vue&type=template&id=5c937b85&\n");

/***/ }),

/***/ "./resources/js/bootstrap.js":
/*!***********************************!*\
  !*** ./resources/js/bootstrap.js ***!
  \***********************************/
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {

eval("window._ = __webpack_require__(/*! lodash */ \"./node_modules/lodash/lodash.js\");\n\n/**\n * We'll load the axios HTTP library which allows us to easily issue requests\n * to our Laravel back-end. This library automatically handles sending the\n * CSRF token as a header based on the value of the \"XSRF\" token cookie.\n */\n\nwindow.axios = __webpack_require__(/*! axios */ \"./node_modules/axios/index.js\");\nwindow.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';\n\n/**\n * Echo exposes an expressive API for subscribing to channels and listening\n * for events that are broadcast by Laravel. Echo and event broadcasting\n * allows your team to easily build robust real-time web applications.\n */\n\n// import Echo from 'laravel-echo';\n\n// window.Pusher = require('pusher-js');\n\n// window.Echo = new Echo({\n//     broadcaster: 'pusher',\n//     key: process.env.MIX_PUSHER_APP_KEY,\n//     cluster: process.env.MIX_PUSHER_APP_CLUSTER,\n//     forceTLS: true\n// });//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvYm9vdHN0cmFwLmpzIiwibWFwcGluZ3MiOiJBQUFBQSxNQUFNLENBQUNDLENBQUMsR0FBR0MsbUJBQU8sQ0FBQywrQ0FBUSxDQUFDOztBQUU1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBRixNQUFNLENBQUNHLEtBQUssR0FBR0QsbUJBQU8sQ0FBQyw0Q0FBTyxDQUFDO0FBRS9CRixNQUFNLENBQUNHLEtBQUssQ0FBQ0MsUUFBUSxDQUFDQyxPQUFPLENBQUNDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLGdCQUFnQjs7QUFFM0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvYm9vdHN0cmFwLmpzPzZkZTciXSwic291cmNlc0NvbnRlbnQiOlsid2luZG93Ll8gPSByZXF1aXJlKCdsb2Rhc2gnKTtcblxuLyoqXG4gKiBXZSdsbCBsb2FkIHRoZSBheGlvcyBIVFRQIGxpYnJhcnkgd2hpY2ggYWxsb3dzIHVzIHRvIGVhc2lseSBpc3N1ZSByZXF1ZXN0c1xuICogdG8gb3VyIExhcmF2ZWwgYmFjay1lbmQuIFRoaXMgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGhhbmRsZXMgc2VuZGluZyB0aGVcbiAqIENTUkYgdG9rZW4gYXMgYSBoZWFkZXIgYmFzZWQgb24gdGhlIHZhbHVlIG9mIHRoZSBcIlhTUkZcIiB0b2tlbiBjb29raWUuXG4gKi9cblxud2luZG93LmF4aW9zID0gcmVxdWlyZSgnYXhpb3MnKTtcblxud2luZG93LmF4aW9zLmRlZmF1bHRzLmhlYWRlcnMuY29tbW9uWydYLVJlcXVlc3RlZC1XaXRoJ10gPSAnWE1MSHR0cFJlcXVlc3QnO1xuXG4vKipcbiAqIEVjaG8gZXhwb3NlcyBhbiBleHByZXNzaXZlIEFQSSBmb3Igc3Vic2NyaWJpbmcgdG8gY2hhbm5lbHMgYW5kIGxpc3RlbmluZ1xuICogZm9yIGV2ZW50cyB0aGF0IGFyZSBicm9hZGNhc3QgYnkgTGFyYXZlbC4gRWNobyBhbmQgZXZlbnQgYnJvYWRjYXN0aW5nXG4gKiBhbGxvd3MgeW91ciB0ZWFtIHRvIGVhc2lseSBidWlsZCByb2J1c3QgcmVhbC10aW1lIHdlYiBhcHBsaWNhdGlvbnMuXG4gKi9cblxuLy8gaW1wb3J0IEVjaG8gZnJvbSAnbGFyYXZlbC1lY2hvJztcblxuLy8gd2luZG93LlB1c2hlciA9IHJlcXVpcmUoJ3B1c2hlci1qcycpO1xuXG4vLyB3aW5kb3cuRWNobyA9IG5ldyBFY2hvKHtcbi8vICAgICBicm9hZGNhc3RlcjogJ3B1c2hlcicsXG4vLyAgICAga2V5OiBwcm9jZXNzLmVudi5NSVhfUFVTSEVSX0FQUF9LRVksXG4vLyAgICAgY2x1c3RlcjogcHJvY2Vzcy5lbnYuTUlYX1BVU0hFUl9BUFBfQ0xVU1RFUixcbi8vICAgICBmb3JjZVRMUzogdHJ1ZVxuLy8gfSk7XG4iXSwibmFtZXMiOlsid2luZG93IiwiXyIsInJlcXVpcmUiLCJheGlvcyIsImRlZmF1bHRzIiwiaGVhZGVycyIsImNvbW1vbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./resources/js/bootstrap.js\n");

/***/ }),

/***/ "./resources/js/components/admin/alliance/form.js":
/*!********************************************************!*\
  !*** ./resources/js/components/admin/alliance/form.js ***!
  \********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   json: () => (/* binding */ json)\n/* harmony export */ });\nvar json = {\n  \"locale\": \"es\",\n  \"title\": \"Alianzas\",\n  \"pages\": [{\n    \"name\": \"page1\",\n    \"elements\": [{\n      \"type\": \"text\",\n      \"name\": \"name\",\n      \"title\": \"Nombre\",\n      \"hideNumber\": true,\n      \"isRequired\": true\n    }, {\n      \"type\": \"text\",\n      \"name\": \"url\",\n      \"title\": \"Url\",\n      \"hideNumber\": true,\n      \"isRequired\": true,\n      \"startWithNewLine\": false,\n      \"inputType\": \"url\"\n    }, {\n      \"type\": \"file\",\n      \"name\": \"image\",\n      \"title\": \"Logo\",\n      \"hideNumber\": true,\n      \"isRequired\": true\n    }]\n  }],\n  \"showCompletedPage\": false\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9hbGxpYW5jZS9mb3JtLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBTyxJQUFNQSxJQUFJLEdBQUc7RUFDaEIsUUFBUSxFQUFFLElBQUk7RUFDZCxPQUFPLEVBQUUsVUFBVTtFQUNuQixPQUFPLEVBQUUsQ0FDUjtJQUNDLE1BQU0sRUFBRSxPQUFPO0lBQ2YsVUFBVSxFQUFFLENBQ1g7TUFDQyxNQUFNLEVBQUUsTUFBTTtNQUNkLE1BQU0sRUFBRSxNQUFNO01BQ2QsT0FBTyxFQUFFLFFBQVE7TUFDakIsWUFBWSxFQUFFLElBQUk7TUFDbEIsWUFBWSxFQUFFO0lBQ2YsQ0FBQyxFQUNEO01BQ0MsTUFBTSxFQUFFLE1BQU07TUFDZCxNQUFNLEVBQUUsS0FBSztNQUNiLE9BQU8sRUFBRSxLQUFLO01BQ2QsWUFBWSxFQUFFLElBQUk7TUFDbEIsWUFBWSxFQUFFLElBQUk7TUFDbEIsa0JBQWtCLEVBQUUsS0FBSztNQUN6QixXQUFXLEVBQUU7SUFDZCxDQUFDLEVBQ0Q7TUFDQyxNQUFNLEVBQUUsTUFBTTtNQUNkLE1BQU0sRUFBRSxPQUFPO01BQ2YsT0FBTyxFQUFFLE1BQU07TUFDZixZQUFZLEVBQUUsSUFBSTtNQUNsQixZQUFZLEVBQUU7SUFDZixDQUFDO0VBRUgsQ0FBQyxDQUNEO0VBQ0QsbUJBQW1CLEVBQUU7QUFDdEIsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9jb21wb25lbnRzL2FkbWluL2FsbGlhbmNlL2Zvcm0uanM/Njk1YSJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QganNvbiA9IHtcbiAgICBcImxvY2FsZVwiOiBcImVzXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkFsaWFuemFzXCIsXG4gICAgXCJwYWdlc1wiOiBbXG4gICAgIHtcbiAgICAgIFwibmFtZVwiOiBcInBhZ2UxXCIsXG4gICAgICBcImVsZW1lbnRzXCI6IFtcbiAgICAgICB7XG4gICAgICAgIFwidHlwZVwiOiBcInRleHRcIixcbiAgICAgICAgXCJuYW1lXCI6IFwibmFtZVwiLFxuICAgICAgICBcInRpdGxlXCI6IFwiTm9tYnJlXCIsXG4gICAgICAgIFwiaGlkZU51bWJlclwiOiB0cnVlLFxuICAgICAgICBcImlzUmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgIH0sXG4gICAgICAge1xuICAgICAgICBcInR5cGVcIjogXCJ0ZXh0XCIsXG4gICAgICAgIFwibmFtZVwiOiBcInVybFwiLFxuICAgICAgICBcInRpdGxlXCI6IFwiVXJsXCIsXG4gICAgICAgIFwiaGlkZU51bWJlclwiOiB0cnVlLFxuICAgICAgICBcImlzUmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgXCJzdGFydFdpdGhOZXdMaW5lXCI6IGZhbHNlLFxuICAgICAgICBcImlucHV0VHlwZVwiOiBcInVybFwiXG4gICAgICAgfSxcbiAgICAgICB7XG4gICAgICAgIFwidHlwZVwiOiBcImZpbGVcIixcbiAgICAgICAgXCJuYW1lXCI6IFwiaW1hZ2VcIixcbiAgICAgICAgXCJ0aXRsZVwiOiBcIkxvZ29cIixcbiAgICAgICAgXCJoaWRlTnVtYmVyXCI6IHRydWUsXG4gICAgICAgIFwiaXNSZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgfVxuICAgICAgXVxuICAgICB9XG4gICAgXSxcbiAgICBcInNob3dDb21wbGV0ZWRQYWdlXCI6IGZhbHNlXG4gICB9OyJdLCJuYW1lcyI6WyJqc29uIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./resources/js/components/admin/alliance/form.js\n");

/***/ }),

/***/ "./resources/js/components/admin/banner/form.js":
/*!******************************************************!*\
  !*** ./resources/js/components/admin/banner/form.js ***!
  \******************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   json: () => (/* binding */ json)\n/* harmony export */ });\nvar json = {\n  \"locale\": \"es\",\n  \"title\": \"Administración de banners\",\n  \"pages\": [{\n    \"name\": \"page1\",\n    \"elements\": [{\n      \"type\": \"dropdown\",\n      \"name\": \"page_id\",\n      \"title\": \"Página de ubicación\",\n      \"hideNumber\": true,\n      \"isRequired\": true,\n      choicesByUrl: {\n        url: \"/api/page/index\",\n        valueName: \"id\",\n        titleName: \"name\"\n      }\n    }, {\n      \"type\": \"panel\",\n      \"name\": \"question1\",\n      \"elements\": [{\n        \"type\": \"text\",\n        \"name\": \"name\",\n        \"title\": \"Título\",\n        \"hideNumber\": true,\n        \"isRequired\": true\n      }, {\n        \"type\": \"comment\",\n        \"name\": \"description\",\n        \"startWithNewLine\": false,\n        \"title\": \"Texto\",\n        \"hideNumber\": true\n      }, {\n        \"type\": \"boolean\",\n        \"name\": \"action->include\",\n        \"title\": \"Tiene botón de redirección\",\n        \"hideNumber\": true,\n        \"defaultValueExpression\": \"0\",\n        \"isRequired\": true\n      }, {\n        \"type\": \"text\",\n        \"name\": \"action->name\",\n        \"visibleIf\": \"{action->include} = true\",\n        \"startWithNewLine\": false,\n        \"title\": \"Titulo del botón\",\n        \"isRequired\": true,\n        \"hideNumber\": true\n      }, {\n        \"type\": \"text\",\n        \"name\": \"action->link\",\n        \"visibleIf\": \"{action->include} = true\",\n        \"title\": \"Url\",\n        \"hideNumber\": true,\n        \"isRequired\": true,\n        \"inputType\": \"url\"\n      }],\n      \"title\": \"Contenido del banner\"\n    }, {\n      \"type\": \"file\",\n      \"name\": \"image\",\n      \"title\": \"Imagen\",\n      \"hideNumber\": true\n    }]\n  }],\n  \"showCompletedPage\": false\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9iYW5uZXIvZm9ybS5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQU8sSUFBTUEsSUFBSSxHQUFHO0VBQ2hCLFFBQVEsRUFBRSxJQUFJO0VBQ2QsT0FBTyxFQUFFLDJCQUEyQjtFQUNwQyxPQUFPLEVBQUUsQ0FDTDtJQUNJLE1BQU0sRUFBRSxPQUFPO0lBQ2YsVUFBVSxFQUFFLENBQ1I7TUFDSSxNQUFNLEVBQUUsVUFBVTtNQUNsQixNQUFNLEVBQUUsU0FBUztNQUNqQixPQUFPLEVBQUUscUJBQXFCO01BQzlCLFlBQVksRUFBRSxJQUFJO01BQ2xCLFlBQVksRUFBRSxJQUFJO01BQ2xCQyxZQUFZLEVBQUU7UUFDVkMsR0FBRyxFQUFFLGlCQUFpQjtRQUN0QkMsU0FBUyxFQUFFLElBQUk7UUFDZkMsU0FBUyxFQUFFO01BQ2Y7SUFDSixDQUFDLEVBQ0Q7TUFDSSxNQUFNLEVBQUUsT0FBTztNQUNmLE1BQU0sRUFBRSxXQUFXO01BQ25CLFVBQVUsRUFBRSxDQUNSO1FBQ0ksTUFBTSxFQUFFLE1BQU07UUFDZCxNQUFNLEVBQUUsTUFBTTtRQUNkLE9BQU8sRUFBRSxRQUFRO1FBQ2pCLFlBQVksRUFBRSxJQUFJO1FBQ2xCLFlBQVksRUFBRTtNQUNsQixDQUFDLEVBQ0Q7UUFDSSxNQUFNLEVBQUUsU0FBUztRQUNqQixNQUFNLEVBQUUsYUFBYTtRQUNyQixrQkFBa0IsRUFBRSxLQUFLO1FBQ3pCLE9BQU8sRUFBRSxPQUFPO1FBQ2hCLFlBQVksRUFBRTtNQUNsQixDQUFDLEVBQ0Q7UUFDSSxNQUFNLEVBQUUsU0FBUztRQUNqQixNQUFNLEVBQUUsaUJBQWlCO1FBQ3pCLE9BQU8sRUFBRSw0QkFBNEI7UUFDckMsWUFBWSxFQUFFLElBQUk7UUFDbEIsd0JBQXdCLEVBQUUsR0FBRztRQUM3QixZQUFZLEVBQUU7TUFDbEIsQ0FBQyxFQUNEO1FBQ0ksTUFBTSxFQUFFLE1BQU07UUFDZCxNQUFNLEVBQUUsY0FBYztRQUN0QixXQUFXLEVBQUUsMEJBQTBCO1FBQ3ZDLGtCQUFrQixFQUFFLEtBQUs7UUFDekIsT0FBTyxFQUFFLGtCQUFrQjtRQUMzQixZQUFZLEVBQUUsSUFBSTtRQUNsQixZQUFZLEVBQUU7TUFDbEIsQ0FBQyxFQUNEO1FBQ0ksTUFBTSxFQUFFLE1BQU07UUFDZCxNQUFNLEVBQUUsY0FBYztRQUN0QixXQUFXLEVBQUUsMEJBQTBCO1FBQ3ZDLE9BQU8sRUFBRSxLQUFLO1FBQ2QsWUFBWSxFQUFFLElBQUk7UUFDbEIsWUFBWSxFQUFFLElBQUk7UUFDbEIsV0FBVyxFQUFFO01BQ2QsQ0FBQyxDQUNQO01BQ0QsT0FBTyxFQUFFO0lBQ2IsQ0FBQyxFQUNEO01BQ0ksTUFBTSxFQUFFLE1BQU07TUFDZCxNQUFNLEVBQUUsT0FBTztNQUNmLE9BQU8sRUFBRSxRQUFRO01BQ2pCLFlBQVksRUFBRTtJQUNsQixDQUFDO0VBRVQsQ0FBQyxDQUNKO0VBQ0QsbUJBQW1CLEVBQUU7QUFDekIsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9jb21wb25lbnRzL2FkbWluL2Jhbm5lci9mb3JtLmpzP2E1M2UiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IGpzb24gPSB7XG4gICAgXCJsb2NhbGVcIjogXCJlc1wiLFxuICAgIFwidGl0bGVcIjogXCJBZG1pbmlzdHJhY2nDs24gZGUgYmFubmVyc1wiLFxuICAgIFwicGFnZXNcIjogW1xuICAgICAgICB7XG4gICAgICAgICAgICBcIm5hbWVcIjogXCJwYWdlMVwiLFxuICAgICAgICAgICAgXCJlbGVtZW50c1wiOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJkcm9wZG93blwiLFxuICAgICAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJwYWdlX2lkXCIsXG4gICAgICAgICAgICAgICAgICAgIFwidGl0bGVcIjogXCJQw6FnaW5hIGRlIHViaWNhY2nDs25cIixcbiAgICAgICAgICAgICAgICAgICAgXCJoaWRlTnVtYmVyXCI6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIFwiaXNSZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBjaG9pY2VzQnlVcmw6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogXCIvYXBpL3BhZ2UvaW5kZXhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlTmFtZTogXCJpZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGVOYW1lOiBcIm5hbWVcIixcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwicGFuZWxcIixcbiAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwicXVlc3Rpb24xXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiZWxlbWVudHNcIjogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJuYW1lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0aXRsZVwiOiBcIlTDrXR1bG9cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImhpZGVOdW1iZXJcIjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImlzUmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJjb21tZW50XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwiZGVzY3JpcHRpb25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInN0YXJ0V2l0aE5ld0xpbmVcIjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0aXRsZVwiOiBcIlRleHRvXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJoaWRlTnVtYmVyXCI6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibmFtZVwiOiBcImFjdGlvbi0+aW5jbHVkZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidGl0bGVcIjogXCJUaWVuZSBib3TDs24gZGUgcmVkaXJlY2Npw7NuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJoaWRlTnVtYmVyXCI6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkZWZhdWx0VmFsdWVFeHByZXNzaW9uXCI6IFwiMFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaXNSZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJhY3Rpb24tPm5hbWVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInZpc2libGVJZlwiOiBcInthY3Rpb24tPmluY2x1ZGV9ID0gdHJ1ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic3RhcnRXaXRoTmV3TGluZVwiOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInRpdGxlXCI6IFwiVGl0dWxvIGRlbCBib3TDs25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImlzUmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImhpZGVOdW1iZXJcIjogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwiYWN0aW9uLT5saW5rXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ2aXNpYmxlSWZcIjogXCJ7YWN0aW9uLT5pbmNsdWRlfSA9IHRydWVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInRpdGxlXCI6IFwiVXJsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJoaWRlTnVtYmVyXCI6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJpc1JlcXVpcmVkXCI6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJpbnB1dFR5cGVcIjogXCJ1cmxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgXCJ0aXRsZVwiOiBcIkNvbnRlbmlkbyBkZWwgYmFubmVyXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwiZmlsZVwiLFxuICAgICAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJpbWFnZVwiLFxuICAgICAgICAgICAgICAgICAgICBcInRpdGxlXCI6IFwiSW1hZ2VuXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiaGlkZU51bWJlclwiOiB0cnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICB9XG4gICAgXSxcbiAgICBcInNob3dDb21wbGV0ZWRQYWdlXCI6IGZhbHNlXG59OyJdLCJuYW1lcyI6WyJqc29uIiwiY2hvaWNlc0J5VXJsIiwidXJsIiwidmFsdWVOYW1lIiwidGl0bGVOYW1lIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./resources/js/components/admin/banner/form.js\n");

/***/ }),

/***/ "./resources/js/components/admin/conference/form.js":
/*!**********************************************************!*\
  !*** ./resources/js/components/admin/conference/form.js ***!
  \**********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   json: () => (/* binding */ json)\n/* harmony export */ });\nvar json = {\n  \"locale\": \"es\",\n  \"title\": \"Congreso\",\n  \"pages\": [{\n    \"name\": \"page1\",\n    \"elements\": [{\n      \"type\": \"text\",\n      \"name\": \"name\",\n      \"startWithNewLine\": false,\n      \"title\": \"Nombre\",\n      \"hideNumber\": true,\n      \"isRequired\": true\n    }, {\n      \"type\": \"text\",\n      \"name\": \"start_date\",\n      \"title\": \"Fecha Inicio\",\n      \"hideNumber\": true,\n      \"inputType\": \"date\"\n    }, {\n      \"type\": \"text\",\n      \"name\": \"end_date\",\n      \"startWithNewLine\": false,\n      \"title\": \"Fecha Fin\",\n      \"hideNumber\": true,\n      \"inputType\": \"date\"\n    }, {\n      \"type\": \"file\",\n      \"name\": \"document\",\n      \"title\": \"Documento\",\n      \"hideNumber\": true,\n      \"acceptedTypes\": \".pdf\"\n    }, {\n      \"type\": \"paneldynamic\",\n      \"name\": \"guests\",\n      \"title\": \"Invitados\",\n      \"hideNumber\": true,\n      \"templateElements\": [{\n        \"type\": \"text\",\n        \"name\": \"id\",\n        \"width\": \"100px\",\n        \"minWidth\": \"50px\",\n        \"maxWidth\": \"50%\",\n        \"title\": \"Id\",\n        \"readOnly\": true,\n        \"inputType\": \"number\"\n      }, {\n        \"type\": \"text\",\n        \"name\": \"name\",\n        \"title\": \"Nombre\",\n        \"startWithNewLine\": false,\n        \"hideNumber\": true,\n        \"isRequired\": true\n      }, {\n        \"type\": \"text\",\n        \"name\": \"country\",\n        \"startWithNewLine\": false,\n        \"title\": \"Pais\",\n        \"hideNumber\": true,\n        \"isRequired\": true,\n        \"autocomplete\": \"country\"\n      }, {\n        \"type\": \"comment\",\n        \"name\": \"description\",\n        \"title\": \"Descripción\",\n        \"isRequired\": true\n      }, {\n        \"type\": \"file\",\n        \"name\": \"image\",\n        \"startWithNewLine\": false,\n        \"title\": \"Foto\",\n        \"isRequired\": true,\n        \"acceptedTypes\": \".jpg\"\n      }],\n      \"templateTabTitle\": \"Invitado {panelIndex}\",\n      \"renderMode\": \"tab\"\n    }]\n  }],\n  \"showCompletedPage\": false\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9jb25mZXJlbmNlL2Zvcm0uanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFPLElBQU1BLElBQUksR0FBRztFQUNoQixRQUFRLEVBQUUsSUFBSTtFQUNkLE9BQU8sRUFBRSxVQUFVO0VBQ25CLE9BQU8sRUFBRSxDQUNMO0lBQ0ksTUFBTSxFQUFFLE9BQU87SUFDZixVQUFVLEVBQUUsQ0FDUjtNQUNJLE1BQU0sRUFBRSxNQUFNO01BQ2QsTUFBTSxFQUFFLE1BQU07TUFDZCxrQkFBa0IsRUFBRSxLQUFLO01BQ3pCLE9BQU8sRUFBRSxRQUFRO01BQ2pCLFlBQVksRUFBRSxJQUFJO01BQ2xCLFlBQVksRUFBRTtJQUNsQixDQUFDLEVBQ0Q7TUFDSSxNQUFNLEVBQUUsTUFBTTtNQUNkLE1BQU0sRUFBRSxZQUFZO01BQ3BCLE9BQU8sRUFBRSxjQUFjO01BQ3ZCLFlBQVksRUFBRSxJQUFJO01BQ2xCLFdBQVcsRUFBRTtJQUNqQixDQUFDLEVBQ0Q7TUFDSSxNQUFNLEVBQUUsTUFBTTtNQUNkLE1BQU0sRUFBRSxVQUFVO01BQ2xCLGtCQUFrQixFQUFFLEtBQUs7TUFDekIsT0FBTyxFQUFFLFdBQVc7TUFDcEIsWUFBWSxFQUFFLElBQUk7TUFDbEIsV0FBVyxFQUFFO0lBQ2pCLENBQUMsRUFDRDtNQUNJLE1BQU0sRUFBRSxNQUFNO01BQ2QsTUFBTSxFQUFFLFVBQVU7TUFDbEIsT0FBTyxFQUFFLFdBQVc7TUFDcEIsWUFBWSxFQUFFLElBQUk7TUFDbEIsZUFBZSxFQUFFO0lBQ3JCLENBQUMsRUFDRDtNQUNJLE1BQU0sRUFBRSxjQUFjO01BQ3RCLE1BQU0sRUFBRSxRQUFRO01BQ2hCLE9BQU8sRUFBRSxXQUFXO01BQ3BCLFlBQVksRUFBRSxJQUFJO01BQ2xCLGtCQUFrQixFQUFFLENBQ2hCO1FBQ0ksTUFBTSxFQUFFLE1BQU07UUFDZCxNQUFNLEVBQUUsSUFBSTtRQUNaLE9BQU8sRUFBRSxPQUFPO1FBQ2hCLFVBQVUsRUFBRSxNQUFNO1FBQ2xCLFVBQVUsRUFBRSxLQUFLO1FBQ2pCLE9BQU8sRUFBRSxJQUFJO1FBQ2IsVUFBVSxFQUFFLElBQUk7UUFDaEIsV0FBVyxFQUFFO01BQ2pCLENBQUMsRUFDRDtRQUNJLE1BQU0sRUFBRSxNQUFNO1FBQ2QsTUFBTSxFQUFFLE1BQU07UUFDZCxPQUFPLEVBQUUsUUFBUTtRQUNqQixrQkFBa0IsRUFBRSxLQUFLO1FBQ3pCLFlBQVksRUFBRSxJQUFJO1FBQ2xCLFlBQVksRUFBRTtNQUNsQixDQUFDLEVBQ0Q7UUFDSSxNQUFNLEVBQUUsTUFBTTtRQUNkLE1BQU0sRUFBRSxTQUFTO1FBQ2pCLGtCQUFrQixFQUFFLEtBQUs7UUFDekIsT0FBTyxFQUFFLE1BQU07UUFDZixZQUFZLEVBQUUsSUFBSTtRQUNsQixZQUFZLEVBQUUsSUFBSTtRQUNsQixjQUFjLEVBQUU7TUFDcEIsQ0FBQyxFQUNEO1FBQ0ksTUFBTSxFQUFFLFNBQVM7UUFDakIsTUFBTSxFQUFFLGFBQWE7UUFDckIsT0FBTyxFQUFFLGFBQWE7UUFDdEIsWUFBWSxFQUFFO01BQ2xCLENBQUMsRUFDRDtRQUNJLE1BQU0sRUFBRSxNQUFNO1FBQ2QsTUFBTSxFQUFFLE9BQU87UUFDZixrQkFBa0IsRUFBRSxLQUFLO1FBQ3pCLE9BQU8sRUFBRSxNQUFNO1FBQ2YsWUFBWSxFQUFFLElBQUk7UUFDbEIsZUFBZSxFQUFFO01BQ3JCLENBQUMsQ0FDSjtNQUNELGtCQUFrQixFQUFFLHVCQUF1QjtNQUMzQyxZQUFZLEVBQUU7SUFDbEIsQ0FBQztFQUVULENBQUMsQ0FDSjtFQUNELG1CQUFtQixFQUFFO0FBQ3pCLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9jb25mZXJlbmNlL2Zvcm0uanM/MTA1YSJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QganNvbiA9IHtcbiAgICBcImxvY2FsZVwiOiBcImVzXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkNvbmdyZXNvXCIsXG4gICAgXCJwYWdlc1wiOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwibmFtZVwiOiBcInBhZ2UxXCIsXG4gICAgICAgICAgICBcImVsZW1lbnRzXCI6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwibmFtZVwiLFxuICAgICAgICAgICAgICAgICAgICBcInN0YXJ0V2l0aE5ld0xpbmVcIjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIFwidGl0bGVcIjogXCJOb21icmVcIixcbiAgICAgICAgICAgICAgICAgICAgXCJoaWRlTnVtYmVyXCI6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIFwiaXNSZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwic3RhcnRfZGF0ZVwiLFxuICAgICAgICAgICAgICAgICAgICBcInRpdGxlXCI6IFwiRmVjaGEgSW5pY2lvXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiaGlkZU51bWJlclwiOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBcImlucHV0VHlwZVwiOiBcImRhdGVcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgICAgIFwibmFtZVwiOiBcImVuZF9kYXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIFwic3RhcnRXaXRoTmV3TGluZVwiOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgXCJ0aXRsZVwiOiBcIkZlY2hhIEZpblwiLFxuICAgICAgICAgICAgICAgICAgICBcImhpZGVOdW1iZXJcIjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgXCJpbnB1dFR5cGVcIjogXCJkYXRlXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwiZmlsZVwiLFxuICAgICAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJkb2N1bWVudFwiLFxuICAgICAgICAgICAgICAgICAgICBcInRpdGxlXCI6IFwiRG9jdW1lbnRvXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiaGlkZU51bWJlclwiOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBcImFjY2VwdGVkVHlwZXNcIjogXCIucGRmXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwicGFuZWxkeW5hbWljXCIsXG4gICAgICAgICAgICAgICAgICAgIFwibmFtZVwiOiBcImd1ZXN0c1wiLFxuICAgICAgICAgICAgICAgICAgICBcInRpdGxlXCI6IFwiSW52aXRhZG9zXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiaGlkZU51bWJlclwiOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBcInRlbXBsYXRlRWxlbWVudHNcIjogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJpZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwid2lkdGhcIjogXCIxMDBweFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibWluV2lkdGhcIjogXCI1MHB4XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJtYXhXaWR0aFwiOiBcIjUwJVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidGl0bGVcIjogXCJJZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicmVhZE9ubHlcIjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImlucHV0VHlwZVwiOiBcIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJuYW1lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0aXRsZVwiOiBcIk5vbWJyZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic3RhcnRXaXRoTmV3TGluZVwiOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImhpZGVOdW1iZXJcIjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImlzUmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwiY291bnRyeVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic3RhcnRXaXRoTmV3TGluZVwiOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInRpdGxlXCI6IFwiUGFpc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaGlkZU51bWJlclwiOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaXNSZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYXV0b2NvbXBsZXRlXCI6IFwiY291bnRyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcImNvbW1lbnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJkZXNjcmlwdGlvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidGl0bGVcIjogXCJEZXNjcmlwY2nDs25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImlzUmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJmaWxlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwiaW1hZ2VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInN0YXJ0V2l0aE5ld0xpbmVcIjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0aXRsZVwiOiBcIkZvdG9cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImlzUmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImFjY2VwdGVkVHlwZXNcIjogXCIuanBnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgXCJ0ZW1wbGF0ZVRhYlRpdGxlXCI6IFwiSW52aXRhZG8ge3BhbmVsSW5kZXh9XCIsXG4gICAgICAgICAgICAgICAgICAgIFwicmVuZGVyTW9kZVwiOiBcInRhYlwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgIF0sXG4gICAgXCJzaG93Q29tcGxldGVkUGFnZVwiOiBmYWxzZVxufSJdLCJuYW1lcyI6WyJqc29uIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./resources/js/components/admin/conference/form.js\n");

/***/ }),

/***/ "./resources/js/components/admin/course/form.js":
/*!******************************************************!*\
  !*** ./resources/js/components/admin/course/form.js ***!
  \******************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   json: () => (/* binding */ json)\n/* harmony export */ });\nvar json = {\n  \"locale\": \"es\",\n  \"title\": \"Nuevo Video\",\n  \"pages\": [{\n    name: \"page1\",\n    \"elements\": [{\n      \"type\": \"dropdown\",\n      \"name\": \"cycle_id\",\n      \"title\": \"Ciclo\",\n      \"hideNumber\": true,\n      \"isRequired\": true,\n      choicesByUrl: {\n        url: \"/api/cycle/index\",\n        valueName: \"id\",\n        titleName: \"name\"\n      }\n    }, {\n      \"type\": \"text\",\n      \"name\": \"name\",\n      \"title\": \"Nombre\",\n      \"startWithNewLine\": false,\n      \"hideNumber\": true,\n      \"isRequired\": true\n    }, {\n      \"type\": \"comment\",\n      \"name\": \"description\",\n      \"title\": \"Descripción\",\n      \"hideNumber\": true,\n      \"isRequired\": true\n    }, {\n      \"type\": \"text\",\n      \"name\": \"url\",\n      \"title\": \"Url Registro\",\n      \"hideNumber\": true,\n      \"isRequired\": true,\n      \"inputType\": \"url\"\n    }, {\n      \"type\": \"text\",\n      \"name\": \"data->duration\",\n      \"startWithNewLine\": false,\n      \"title\": \"Duración (Horas)\",\n      \"hideNumber\": true,\n      \"inputType\": \"number\"\n    }, {\n      \"type\": \"text\",\n      \"name\": \"start_date\",\n      \"title\": \"Fecha Inicio\",\n      \"hideNumber\": true,\n      \"inputType\": \"date\"\n    }, {\n      \"type\": \"text\",\n      \"name\": \"end_date\",\n      \"startWithNewLine\": false,\n      \"title\": \"Fecha Final\",\n      \"hideNumber\": true,\n      \"inputType\": \"date\"\n    }, {\n      \"type\": \"tagbox\",\n      \"name\": \"alliances\",\n      \"hideNumber\": true,\n      \"title\": \"Aliados\",\n      choicesByUrl: {\n        url: \"/api/alliance/index\",\n        valueName: \"id\",\n        titleName: \"name\"\n      }\n    }, {\n      \"type\": \"comment\",\n      \"name\": \"data->objectives\",\n      \"title\": \"Objetivo\",\n      \"hideNumber\": true,\n      \"isRequired\": true\n    }, {\n      \"type\": \"comment\",\n      \"name\": \"data->content\",\n      \"title\": \"Contenido\",\n      \"hideNumber\": true,\n      \"isRequired\": true\n    }, {\n      \"type\": \"file\",\n      \"name\": \"image\",\n      \"title\": \"Imagen\",\n      \"hideNumber\": true,\n      \"isRequired\": true,\n      \"acceptedTypes\": \".png, .jpg\"\n    }],\n    \"title\": \"Nuevo Curso\"\n  }],\n  \"showCompletedPage\": false\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9jb3Vyc2UvZm9ybS5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQU8sSUFBTUEsSUFBSSxHQUFHO0VBQ2hCLFFBQVEsRUFBRSxJQUFJO0VBQ2QsT0FBTyxFQUFFLGFBQWE7RUFDdEIsT0FBTyxFQUFFLENBQ0w7SUFDSUMsSUFBSSxFQUFFLE9BQU87SUFDYixVQUFVLEVBQUUsQ0FDUjtNQUNJLE1BQU0sRUFBRSxVQUFVO01BQ2xCLE1BQU0sRUFBRSxVQUFVO01BQ2xCLE9BQU8sRUFBRSxPQUFPO01BQ2hCLFlBQVksRUFBRSxJQUFJO01BQ2xCLFlBQVksRUFBRSxJQUFJO01BQ2xCQyxZQUFZLEVBQUU7UUFDVkMsR0FBRyxFQUFFLGtCQUFrQjtRQUN2QkMsU0FBUyxFQUFFLElBQUk7UUFDZkMsU0FBUyxFQUFFO01BQ2Y7SUFDSixDQUFDLEVBQ0Q7TUFDSSxNQUFNLEVBQUUsTUFBTTtNQUNkLE1BQU0sRUFBRSxNQUFNO01BQ2QsT0FBTyxFQUFFLFFBQVE7TUFDakIsa0JBQWtCLEVBQUUsS0FBSztNQUN6QixZQUFZLEVBQUUsSUFBSTtNQUNsQixZQUFZLEVBQUU7SUFDbEIsQ0FBQyxFQUNEO01BQ0ksTUFBTSxFQUFFLFNBQVM7TUFDakIsTUFBTSxFQUFFLGFBQWE7TUFDckIsT0FBTyxFQUFFLGFBQWE7TUFDdEIsWUFBWSxFQUFFLElBQUk7TUFDbEIsWUFBWSxFQUFFO0lBQ2xCLENBQUMsRUFDRDtNQUNJLE1BQU0sRUFBRSxNQUFNO01BQ2QsTUFBTSxFQUFFLEtBQUs7TUFDYixPQUFPLEVBQUUsY0FBYztNQUN2QixZQUFZLEVBQUUsSUFBSTtNQUNsQixZQUFZLEVBQUUsSUFBSTtNQUNsQixXQUFXLEVBQUU7SUFDakIsQ0FBQyxFQUNEO01BQ0ksTUFBTSxFQUFFLE1BQU07TUFDZCxNQUFNLEVBQUUsZ0JBQWdCO01BQ3hCLGtCQUFrQixFQUFFLEtBQUs7TUFDekIsT0FBTyxFQUFFLGtCQUFrQjtNQUMzQixZQUFZLEVBQUUsSUFBSTtNQUNsQixXQUFXLEVBQUU7SUFDakIsQ0FBQyxFQUNEO01BQ0ksTUFBTSxFQUFFLE1BQU07TUFDZCxNQUFNLEVBQUUsWUFBWTtNQUNwQixPQUFPLEVBQUUsY0FBYztNQUN2QixZQUFZLEVBQUUsSUFBSTtNQUNsQixXQUFXLEVBQUU7SUFFakIsQ0FBQyxFQUNEO01BQ0ksTUFBTSxFQUFFLE1BQU07TUFDZCxNQUFNLEVBQUUsVUFBVTtNQUNsQixrQkFBa0IsRUFBRSxLQUFLO01BQ3pCLE9BQU8sRUFBRSxhQUFhO01BQ3RCLFlBQVksRUFBRSxJQUFJO01BQ2xCLFdBQVcsRUFBRTtJQUNqQixDQUFDLEVBQ0Q7TUFDSSxNQUFNLEVBQUUsUUFBUTtNQUNoQixNQUFNLEVBQUUsV0FBVztNQUNuQixZQUFZLEVBQUUsSUFBSTtNQUNsQixPQUFPLEVBQUUsU0FBUztNQUNsQkgsWUFBWSxFQUFFO1FBQ1ZDLEdBQUcsRUFBRSxxQkFBcUI7UUFDMUJDLFNBQVMsRUFBRSxJQUFJO1FBQ2ZDLFNBQVMsRUFBRTtNQUNmO0lBQ0osQ0FBQyxFQUNEO01BQ0ksTUFBTSxFQUFFLFNBQVM7TUFDakIsTUFBTSxFQUFFLGtCQUFrQjtNQUMxQixPQUFPLEVBQUUsVUFBVTtNQUNuQixZQUFZLEVBQUUsSUFBSTtNQUNsQixZQUFZLEVBQUU7SUFDbEIsQ0FBQyxFQUNEO01BQ0ksTUFBTSxFQUFFLFNBQVM7TUFDakIsTUFBTSxFQUFFLGVBQWU7TUFDdkIsT0FBTyxFQUFFLFdBQVc7TUFDcEIsWUFBWSxFQUFFLElBQUk7TUFDbEIsWUFBWSxFQUFFO0lBQ2xCLENBQUMsRUFDRDtNQUNJLE1BQU0sRUFBRSxNQUFNO01BQ2QsTUFBTSxFQUFFLE9BQU87TUFDZixPQUFPLEVBQUUsUUFBUTtNQUNqQixZQUFZLEVBQUUsSUFBSTtNQUNsQixZQUFZLEVBQUUsSUFBSTtNQUNsQixlQUFlLEVBQUU7SUFDckIsQ0FBQyxDQUNKO0lBQ0QsT0FBTyxFQUFFO0VBQ2IsQ0FBQyxDQUNKO0VBQ0QsbUJBQW1CLEVBQUU7QUFDekIsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9jb21wb25lbnRzL2FkbWluL2NvdXJzZS9mb3JtLmpzPzkxNGMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IGpzb24gPSB7XG4gICAgXCJsb2NhbGVcIjogXCJlc1wiLFxuICAgIFwidGl0bGVcIjogXCJOdWV2byBWaWRlb1wiLFxuICAgIFwicGFnZXNcIjogW1xuICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcInBhZ2UxXCIsXG4gICAgICAgICAgICBcImVsZW1lbnRzXCI6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcImRyb3Bkb3duXCIsXG4gICAgICAgICAgICAgICAgICAgIFwibmFtZVwiOiBcImN5Y2xlX2lkXCIsXG4gICAgICAgICAgICAgICAgICAgIFwidGl0bGVcIjogXCJDaWNsb1wiLFxuICAgICAgICAgICAgICAgICAgICBcImhpZGVOdW1iZXJcIjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgXCJpc1JlcXVpcmVkXCI6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGNob2ljZXNCeVVybDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBcIi9hcGkvY3ljbGUvaW5kZXhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlTmFtZTogXCJpZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGVOYW1lOiBcIm5hbWVcIixcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwidGV4dFwiLFxuICAgICAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJuYW1lXCIsXG4gICAgICAgICAgICAgICAgICAgIFwidGl0bGVcIjogXCJOb21icmVcIixcbiAgICAgICAgICAgICAgICAgICAgXCJzdGFydFdpdGhOZXdMaW5lXCI6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBcImhpZGVOdW1iZXJcIjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgXCJpc1JlcXVpcmVkXCI6IHRydWVcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwiY29tbWVudFwiLFxuICAgICAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJkZXNjcmlwdGlvblwiLFxuICAgICAgICAgICAgICAgICAgICBcInRpdGxlXCI6IFwiRGVzY3JpcGNpw7NuXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiaGlkZU51bWJlclwiOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBcImlzUmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgICAgIFwibmFtZVwiOiBcInVybFwiLFxuICAgICAgICAgICAgICAgICAgICBcInRpdGxlXCI6IFwiVXJsIFJlZ2lzdHJvXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiaGlkZU51bWJlclwiOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBcImlzUmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgXCJpbnB1dFR5cGVcIjogXCJ1cmxcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgICAgIFwibmFtZVwiOiBcImRhdGEtPmR1cmF0aW9uXCIsXG4gICAgICAgICAgICAgICAgICAgIFwic3RhcnRXaXRoTmV3TGluZVwiOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgXCJ0aXRsZVwiOiBcIkR1cmFjacOzbiAoSG9yYXMpXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiaGlkZU51bWJlclwiOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBcImlucHV0VHlwZVwiOiBcIm51bWJlclwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwic3RhcnRfZGF0ZVwiLFxuICAgICAgICAgICAgICAgICAgICBcInRpdGxlXCI6IFwiRmVjaGEgSW5pY2lvXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiaGlkZU51bWJlclwiOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBcImlucHV0VHlwZVwiOiBcImRhdGVcIlxuXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwiZW5kX2RhdGVcIixcbiAgICAgICAgICAgICAgICAgICAgXCJzdGFydFdpdGhOZXdMaW5lXCI6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBcInRpdGxlXCI6IFwiRmVjaGEgRmluYWxcIixcbiAgICAgICAgICAgICAgICAgICAgXCJoaWRlTnVtYmVyXCI6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIFwiaW5wdXRUeXBlXCI6IFwiZGF0ZVwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcInRhZ2JveFwiLFxuICAgICAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJhbGxpYW5jZXNcIixcbiAgICAgICAgICAgICAgICAgICAgXCJoaWRlTnVtYmVyXCI6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIFwidGl0bGVcIjogXCJBbGlhZG9zXCIsXG4gICAgICAgICAgICAgICAgICAgIGNob2ljZXNCeVVybDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBcIi9hcGkvYWxsaWFuY2UvaW5kZXhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlTmFtZTogXCJpZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGVOYW1lOiBcIm5hbWVcIixcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwiY29tbWVudFwiLFxuICAgICAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJkYXRhLT5vYmplY3RpdmVzXCIsXG4gICAgICAgICAgICAgICAgICAgIFwidGl0bGVcIjogXCJPYmpldGl2b1wiLFxuICAgICAgICAgICAgICAgICAgICBcImhpZGVOdW1iZXJcIjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgXCJpc1JlcXVpcmVkXCI6IHRydWVcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwiY29tbWVudFwiLFxuICAgICAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJkYXRhLT5jb250ZW50XCIsXG4gICAgICAgICAgICAgICAgICAgIFwidGl0bGVcIjogXCJDb250ZW5pZG9cIixcbiAgICAgICAgICAgICAgICAgICAgXCJoaWRlTnVtYmVyXCI6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIFwiaXNSZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcImZpbGVcIixcbiAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwiaW1hZ2VcIixcbiAgICAgICAgICAgICAgICAgICAgXCJ0aXRsZVwiOiBcIkltYWdlblwiLFxuICAgICAgICAgICAgICAgICAgICBcImhpZGVOdW1iZXJcIjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgXCJpc1JlcXVpcmVkXCI6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIFwiYWNjZXB0ZWRUeXBlc1wiOiBcIi5wbmcsIC5qcGdcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBcInRpdGxlXCI6IFwiTnVldm8gQ3Vyc29cIlxuICAgICAgICB9XG4gICAgXSxcbiAgICBcInNob3dDb21wbGV0ZWRQYWdlXCI6IGZhbHNlXG59Il0sIm5hbWVzIjpbImpzb24iLCJuYW1lIiwiY2hvaWNlc0J5VXJsIiwidXJsIiwidmFsdWVOYW1lIiwidGl0bGVOYW1lIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./resources/js/components/admin/course/form.js\n");

/***/ }),

/***/ "./resources/js/components/admin/cycle/form.js":
/*!*****************************************************!*\
  !*** ./resources/js/components/admin/cycle/form.js ***!
  \*****************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   json: () => (/* binding */ json)\n/* harmony export */ });\nvar json = {\n  \"locale\": \"es\",\n  \"title\": \"Ciclos\",\n  \"pages\": [{\n    \"name\": \"page1\",\n    \"elements\": [{\n      \"type\": \"text\",\n      \"name\": \"name\",\n      \"title\": \"Nombre\",\n      \"hideNumber\": true,\n      \"isRequired\": true\n    }, {\n      \"type\": \"comment\",\n      \"name\": \"description\",\n      \"title\": \"Descripción General\",\n      \"hideNumber\": true,\n      \"isRequired\": true\n    }, {\n      \"type\": \"dropdown\",\n      \"name\": \"modality_type_id\",\n      \"startWithNewLine\": false,\n      \"title\": \"Modalidad\",\n      \"hideNumber\": true,\n      choicesByUrl: {\n        url: \"/api/library/get-options/modalidades-formacion\",\n        valueName: \"id\",\n        titleName: \"name\"\n      }\n    }, {\n      \"type\": \"text\",\n      \"name\": \"duration\",\n      \"title\": \"Duración\",\n      \"hideNumber\": true,\n      \"isRequired\": true\n    }, {\n      \"type\": \"file\",\n      \"name\": \"file\",\n      \"startWithNewLine\": false,\n      \"title\": \"Documento de Requisitos\",\n      \"hideNumber\": true,\n      \"acceptedTypes\": \".pdf\"\n    }, {\n      \"type\": \"tagbox\",\n      \"name\": \"alliances\",\n      \"title\": \"Aliados\",\n      \"hideNumber\": true,\n      choicesByUrl: {\n        url: \"/api/alliance/index\",\n        valueName: \"id\",\n        titleName: \"name\"\n      }\n    }, {\n      \"type\": \"file\",\n      \"name\": \"image\",\n      \"title\": \"Imagen\",\n      \"hideNumber\": true,\n      \"isRequired\": true,\n      \"acceptedTypes\": \".png\"\n    }]\n  }]\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9jeWNsZS9mb3JtLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBTyxJQUFNQSxJQUFJLEdBQUc7RUFDaEIsUUFBUSxFQUFFLElBQUk7RUFDZCxPQUFPLEVBQUUsUUFBUTtFQUNqQixPQUFPLEVBQUUsQ0FDTDtJQUNJLE1BQU0sRUFBRSxPQUFPO0lBQ2YsVUFBVSxFQUFFLENBQ1I7TUFDSSxNQUFNLEVBQUUsTUFBTTtNQUNkLE1BQU0sRUFBRSxNQUFNO01BQ2QsT0FBTyxFQUFFLFFBQVE7TUFDakIsWUFBWSxFQUFFLElBQUk7TUFDbEIsWUFBWSxFQUFFO0lBQ2xCLENBQUMsRUFDRDtNQUNJLE1BQU0sRUFBRSxTQUFTO01BQ2pCLE1BQU0sRUFBRSxhQUFhO01BQ3JCLE9BQU8sRUFBRSxxQkFBcUI7TUFDOUIsWUFBWSxFQUFFLElBQUk7TUFDbEIsWUFBWSxFQUFFO0lBQ2xCLENBQUMsRUFDRDtNQUNJLE1BQU0sRUFBRSxVQUFVO01BQ2xCLE1BQU0sRUFBRSxrQkFBa0I7TUFDMUIsa0JBQWtCLEVBQUUsS0FBSztNQUN6QixPQUFPLEVBQUUsV0FBVztNQUNwQixZQUFZLEVBQUUsSUFBSTtNQUNsQkMsWUFBWSxFQUFFO1FBQ1ZDLEdBQUcsRUFBRSxnREFBZ0Q7UUFDckRDLFNBQVMsRUFBRSxJQUFJO1FBQ2ZDLFNBQVMsRUFBRTtNQUNmO0lBQ0osQ0FBQyxFQUNEO01BQ0ksTUFBTSxFQUFFLE1BQU07TUFDZCxNQUFNLEVBQUUsVUFBVTtNQUNsQixPQUFPLEVBQUUsVUFBVTtNQUNuQixZQUFZLEVBQUUsSUFBSTtNQUNsQixZQUFZLEVBQUU7SUFDbEIsQ0FBQyxFQUNEO01BQ0ksTUFBTSxFQUFFLE1BQU07TUFDZCxNQUFNLEVBQUUsTUFBTTtNQUNkLGtCQUFrQixFQUFFLEtBQUs7TUFDekIsT0FBTyxFQUFFLHlCQUF5QjtNQUNsQyxZQUFZLEVBQUUsSUFBSTtNQUNsQixlQUFlLEVBQUU7SUFDckIsQ0FBQyxFQUNEO01BQ0ksTUFBTSxFQUFFLFFBQVE7TUFDaEIsTUFBTSxFQUFFLFdBQVc7TUFDbkIsT0FBTyxFQUFFLFNBQVM7TUFDbEIsWUFBWSxFQUFFLElBQUk7TUFDbEJILFlBQVksRUFBRTtRQUNWQyxHQUFHLEVBQUUscUJBQXFCO1FBQzFCQyxTQUFTLEVBQUUsSUFBSTtRQUNmQyxTQUFTLEVBQUU7TUFDZjtJQUNKLENBQUMsRUFDRDtNQUNJLE1BQU0sRUFBRSxNQUFNO01BQ2QsTUFBTSxFQUFFLE9BQU87TUFDZixPQUFPLEVBQUUsUUFBUTtNQUNqQixZQUFZLEVBQUUsSUFBSTtNQUNsQixZQUFZLEVBQUUsSUFBSTtNQUNsQixlQUFlLEVBQUU7SUFDckIsQ0FBQztFQUVULENBQUM7QUFFVCxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vY3ljbGUvZm9ybS5qcz81ZDM2Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBqc29uID0ge1xuICAgIFwibG9jYWxlXCI6IFwiZXNcIixcbiAgICBcInRpdGxlXCI6IFwiQ2ljbG9zXCIsXG4gICAgXCJwYWdlc1wiOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwibmFtZVwiOiBcInBhZ2UxXCIsXG4gICAgICAgICAgICBcImVsZW1lbnRzXCI6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwibmFtZVwiLFxuICAgICAgICAgICAgICAgICAgICBcInRpdGxlXCI6IFwiTm9tYnJlXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiaGlkZU51bWJlclwiOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBcImlzUmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJjb21tZW50XCIsXG4gICAgICAgICAgICAgICAgICAgIFwibmFtZVwiOiBcImRlc2NyaXB0aW9uXCIsXG4gICAgICAgICAgICAgICAgICAgIFwidGl0bGVcIjogXCJEZXNjcmlwY2nDs24gR2VuZXJhbFwiLFxuICAgICAgICAgICAgICAgICAgICBcImhpZGVOdW1iZXJcIjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgXCJpc1JlcXVpcmVkXCI6IHRydWVcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwiZHJvcGRvd25cIixcbiAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwibW9kYWxpdHlfdHlwZV9pZFwiLFxuICAgICAgICAgICAgICAgICAgICBcInN0YXJ0V2l0aE5ld0xpbmVcIjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIFwidGl0bGVcIjogXCJNb2RhbGlkYWRcIixcbiAgICAgICAgICAgICAgICAgICAgXCJoaWRlTnVtYmVyXCI6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGNob2ljZXNCeVVybDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBcIi9hcGkvbGlicmFyeS9nZXQtb3B0aW9ucy9tb2RhbGlkYWRlcy1mb3JtYWNpb25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlTmFtZTogXCJpZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGVOYW1lOiBcIm5hbWVcIixcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwidGV4dFwiLFxuICAgICAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJkdXJhdGlvblwiLFxuICAgICAgICAgICAgICAgICAgICBcInRpdGxlXCI6IFwiRHVyYWNpw7NuXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiaGlkZU51bWJlclwiOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBcImlzUmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJmaWxlXCIsXG4gICAgICAgICAgICAgICAgICAgIFwibmFtZVwiOiBcImZpbGVcIixcbiAgICAgICAgICAgICAgICAgICAgXCJzdGFydFdpdGhOZXdMaW5lXCI6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBcInRpdGxlXCI6IFwiRG9jdW1lbnRvIGRlIFJlcXVpc2l0b3NcIixcbiAgICAgICAgICAgICAgICAgICAgXCJoaWRlTnVtYmVyXCI6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIFwiYWNjZXB0ZWRUeXBlc1wiOiBcIi5wZGZcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJ0YWdib3hcIixcbiAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwiYWxsaWFuY2VzXCIsXG4gICAgICAgICAgICAgICAgICAgIFwidGl0bGVcIjogXCJBbGlhZG9zXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiaGlkZU51bWJlclwiOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBjaG9pY2VzQnlVcmw6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogXCIvYXBpL2FsbGlhbmNlL2luZGV4XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZU5hbWU6IFwiaWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlTmFtZTogXCJuYW1lXCIsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcImZpbGVcIixcbiAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwiaW1hZ2VcIixcbiAgICAgICAgICAgICAgICAgICAgXCJ0aXRsZVwiOiBcIkltYWdlblwiLFxuICAgICAgICAgICAgICAgICAgICBcImhpZGVOdW1iZXJcIjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgXCJpc1JlcXVpcmVkXCI6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIFwiYWNjZXB0ZWRUeXBlc1wiOiBcIi5wbmdcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgIF1cbn0iXSwibmFtZXMiOlsianNvbiIsImNob2ljZXNCeVVybCIsInVybCIsInZhbHVlTmFtZSIsInRpdGxlTmFtZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./resources/js/components/admin/cycle/form.js\n");

/***/ }),

/***/ "./resources/js/components/admin/library/form.js":
/*!*******************************************************!*\
  !*** ./resources/js/components/admin/library/form.js ***!
  \*******************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   json: () => (/* binding */ json)\n/* harmony export */ });\nvar json = {\n  \"locale\": \"es\",\n  \"title\": \"Biblioteca\",\n  \"pages\": [{\n    \"name\": \"page1\",\n    \"elements\": [{\n      \"type\": \"dropdown\",\n      \"name\": \"type\",\n      \"title\": \"Tipo de Recurso\",\n      \"hideNumber\": true,\n      \"isRequired\": true,\n      \"choices\": [\"Datos Abiertos\", \"Herramientas Pedagogicas\"]\n    }, {\n      \"type\": \"text\",\n      \"name\": \"name\",\n      \"startWithNewLine\": false,\n      \"title\": \"Nombre\",\n      \"hideNumber\": true,\n      \"isRequired\": true\n    }, {\n      \"type\": \"file\",\n      \"name\": \"document\",\n      \"title\": \"Documento\",\n      \"hideNumber\": true,\n      \"isRequired\": true,\n      \"acceptedTypes\": \".pdf\"\n    }, {\n      \"type\": \"file\",\n      \"name\": \"image\",\n      \"title\": \"Icono\",\n      \"hideNumber\": true,\n      \"isRequired\": true,\n      \"acceptedTypes\": \".svg\"\n    }]\n  }]\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9saWJyYXJ5L2Zvcm0uanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFPLElBQU1BLElBQUksR0FBRztFQUNoQixRQUFRLEVBQUUsSUFBSTtFQUNkLE9BQU8sRUFBRSxZQUFZO0VBQ3JCLE9BQU8sRUFBRSxDQUNMO0lBQ0ksTUFBTSxFQUFFLE9BQU87SUFDZixVQUFVLEVBQUUsQ0FDUjtNQUNJLE1BQU0sRUFBRSxVQUFVO01BQ2xCLE1BQU0sRUFBRSxNQUFNO01BQ2QsT0FBTyxFQUFFLGlCQUFpQjtNQUMxQixZQUFZLEVBQUUsSUFBSTtNQUNsQixZQUFZLEVBQUUsSUFBSTtNQUNsQixTQUFTLEVBQUUsQ0FDUCxnQkFBZ0IsRUFDaEIsMEJBQTBCO0lBRWxDLENBQUMsRUFDRDtNQUNJLE1BQU0sRUFBRSxNQUFNO01BQ2QsTUFBTSxFQUFFLE1BQU07TUFDZCxrQkFBa0IsRUFBRSxLQUFLO01BQ3pCLE9BQU8sRUFBRSxRQUFRO01BQ2pCLFlBQVksRUFBRSxJQUFJO01BQ2xCLFlBQVksRUFBRTtJQUNsQixDQUFDLEVBQ0Q7TUFDSSxNQUFNLEVBQUUsTUFBTTtNQUNkLE1BQU0sRUFBRSxVQUFVO01BQ2xCLE9BQU8sRUFBRSxXQUFXO01BQ3BCLFlBQVksRUFBRSxJQUFJO01BQ2xCLFlBQVksRUFBRSxJQUFJO01BQ2xCLGVBQWUsRUFBRTtJQUNyQixDQUFDLEVBQ0Q7TUFDSSxNQUFNLEVBQUUsTUFBTTtNQUNkLE1BQU0sRUFBRSxPQUFPO01BQ2YsT0FBTyxFQUFFLE9BQU87TUFDaEIsWUFBWSxFQUFFLElBQUk7TUFDbEIsWUFBWSxFQUFFLElBQUk7TUFDbEIsZUFBZSxFQUFFO0lBQ3JCLENBQUM7RUFFVCxDQUFDO0FBRVQsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9jb21wb25lbnRzL2FkbWluL2xpYnJhcnkvZm9ybS5qcz9hMmZjIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBqc29uID0ge1xuICAgIFwibG9jYWxlXCI6IFwiZXNcIixcbiAgICBcInRpdGxlXCI6IFwiQmlibGlvdGVjYVwiLFxuICAgIFwicGFnZXNcIjogW1xuICAgICAgICB7XG4gICAgICAgICAgICBcIm5hbWVcIjogXCJwYWdlMVwiLFxuICAgICAgICAgICAgXCJlbGVtZW50c1wiOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJkcm9wZG93blwiLFxuICAgICAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJ0eXBlXCIsXG4gICAgICAgICAgICAgICAgICAgIFwidGl0bGVcIjogXCJUaXBvIGRlIFJlY3Vyc29cIixcbiAgICAgICAgICAgICAgICAgICAgXCJoaWRlTnVtYmVyXCI6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIFwiaXNSZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBcImNob2ljZXNcIjogW1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJEYXRvcyBBYmllcnRvc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJIZXJyYW1pZW50YXMgUGVkYWdvZ2ljYXNcIlxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwibmFtZVwiLFxuICAgICAgICAgICAgICAgICAgICBcInN0YXJ0V2l0aE5ld0xpbmVcIjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIFwidGl0bGVcIjogXCJOb21icmVcIixcbiAgICAgICAgICAgICAgICAgICAgXCJoaWRlTnVtYmVyXCI6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIFwiaXNSZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcImZpbGVcIixcbiAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwiZG9jdW1lbnRcIixcbiAgICAgICAgICAgICAgICAgICAgXCJ0aXRsZVwiOiBcIkRvY3VtZW50b1wiLFxuICAgICAgICAgICAgICAgICAgICBcImhpZGVOdW1iZXJcIjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgXCJpc1JlcXVpcmVkXCI6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIFwiYWNjZXB0ZWRUeXBlc1wiOiBcIi5wZGZcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJmaWxlXCIsXG4gICAgICAgICAgICAgICAgICAgIFwibmFtZVwiOiBcImltYWdlXCIsXG4gICAgICAgICAgICAgICAgICAgIFwidGl0bGVcIjogXCJJY29ub1wiLFxuICAgICAgICAgICAgICAgICAgICBcImhpZGVOdW1iZXJcIjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgXCJpc1JlcXVpcmVkXCI6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIFwiYWNjZXB0ZWRUeXBlc1wiOiBcIi5zdmdcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgIF1cbn0iXSwibmFtZXMiOlsianNvbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./resources/js/components/admin/library/form.js\n");

/***/ }),

/***/ "./resources/js/components/admin/page/form.js":
/*!****************************************************!*\
  !*** ./resources/js/components/admin/page/form.js ***!
  \****************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   json: () => (/* binding */ json)\n/* harmony export */ });\nvar json = {\n  \"locale\": \"es\",\n  \"pages\": [{\n    \"name\": \"page1\",\n    \"elements\": [{\n      \"type\": \"text\",\n      \"name\": \"name\",\n      \"title\": \"Nombre\",\n      \"hideNumber\": true,\n      \"isRequired\": true\n    }, {\n      \"type\": \"text\",\n      \"name\": \"url\",\n      \"startWithNewLine\": false,\n      \"title\": \"Url\",\n      \"hideNumber\": true,\n      \"readOnly\": true\n    }, {\n      \"type\": \"paneldynamic\",\n      \"name\": \"sections\",\n      \"title\": \"Secciones\",\n      \"hideNumber\": true,\n      \"templateElements\": [{\n        \"type\": \"text\",\n        \"name\": \"id\",\n        \"title\": \"Id\",\n        \"readOnly\": true\n      }, {\n        \"type\": \"dropdown\",\n        \"name\": \"section_id\",\n        \"startWithNewLine\": false,\n        \"isRequired\": true,\n        \"title\": \"Sección\",\n        choicesByUrl: {\n          url: \"/api/page/get-sections\",\n          valueName: \"id\",\n          titleName: \"name\"\n        }\n      }, {\n        \"type\": \"text\",\n        \"name\": \"data->title\",\n        \"title\": \"Titulo\"\n      }, {\n        \"type\": \"comment\",\n        \"name\": \"data->text\",\n        \"title\": \"Texto\"\n      }],\n      \"templateTabTitle\": \"Sección {panelIndex}\",\n      \"renderMode\": \"tab\"\n    }]\n  }]\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9wYWdlL2Zvcm0uanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFPLElBQU1BLElBQUksR0FBRztFQUNoQixRQUFRLEVBQUUsSUFBSTtFQUNkLE9BQU8sRUFBRSxDQUNMO0lBQ0ksTUFBTSxFQUFFLE9BQU87SUFDZixVQUFVLEVBQUUsQ0FDUjtNQUNJLE1BQU0sRUFBRSxNQUFNO01BQ2QsTUFBTSxFQUFFLE1BQU07TUFDZCxPQUFPLEVBQUUsUUFBUTtNQUNqQixZQUFZLEVBQUUsSUFBSTtNQUNsQixZQUFZLEVBQUU7SUFDbEIsQ0FBQyxFQUNEO01BQ0ksTUFBTSxFQUFFLE1BQU07TUFDZCxNQUFNLEVBQUUsS0FBSztNQUNiLGtCQUFrQixFQUFFLEtBQUs7TUFDekIsT0FBTyxFQUFFLEtBQUs7TUFDZCxZQUFZLEVBQUUsSUFBSTtNQUNsQixVQUFVLEVBQUU7SUFDaEIsQ0FBQyxFQUNEO01BQ0ksTUFBTSxFQUFFLGNBQWM7TUFDdEIsTUFBTSxFQUFFLFVBQVU7TUFDbEIsT0FBTyxFQUFFLFdBQVc7TUFDcEIsWUFBWSxFQUFFLElBQUk7TUFDbEIsa0JBQWtCLEVBQUUsQ0FDaEI7UUFDSSxNQUFNLEVBQUUsTUFBTTtRQUNkLE1BQU0sRUFBRSxJQUFJO1FBQ1osT0FBTyxFQUFFLElBQUk7UUFDYixVQUFVLEVBQUU7TUFDaEIsQ0FBQyxFQUNEO1FBQ0ksTUFBTSxFQUFFLFVBQVU7UUFDbEIsTUFBTSxFQUFFLFlBQVk7UUFDcEIsa0JBQWtCLEVBQUUsS0FBSztRQUN6QixZQUFZLEVBQUUsSUFBSTtRQUNsQixPQUFPLEVBQUUsU0FBUztRQUNsQkMsWUFBWSxFQUFFO1VBQ1ZDLEdBQUcsRUFBRSx3QkFBd0I7VUFDN0JDLFNBQVMsRUFBRSxJQUFJO1VBQ2ZDLFNBQVMsRUFBRTtRQUNmO01BQ0osQ0FBQyxFQUNEO1FBQ0ksTUFBTSxFQUFFLE1BQU07UUFDZCxNQUFNLEVBQUUsYUFBYTtRQUNyQixPQUFPLEVBQUU7TUFDYixDQUFDLEVBQ0Q7UUFDSSxNQUFNLEVBQUUsU0FBUztRQUNqQixNQUFNLEVBQUUsWUFBWTtRQUNwQixPQUFPLEVBQUU7TUFDYixDQUFDLENBQ0o7TUFDRCxrQkFBa0IsRUFBRSxzQkFBc0I7TUFDMUMsWUFBWSxFQUFFO0lBQ2xCLENBQUM7RUFFVCxDQUFDO0FBRVQsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9jb21wb25lbnRzL2FkbWluL3BhZ2UvZm9ybS5qcz80OTQxIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBqc29uID0ge1xuICAgIFwibG9jYWxlXCI6IFwiZXNcIixcbiAgICBcInBhZ2VzXCI6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgXCJuYW1lXCI6IFwicGFnZTFcIixcbiAgICAgICAgICAgIFwiZWxlbWVudHNcIjogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwidGV4dFwiLFxuICAgICAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJuYW1lXCIsXG4gICAgICAgICAgICAgICAgICAgIFwidGl0bGVcIjogXCJOb21icmVcIixcbiAgICAgICAgICAgICAgICAgICAgXCJoaWRlTnVtYmVyXCI6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIFwiaXNSZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwidXJsXCIsXG4gICAgICAgICAgICAgICAgICAgIFwic3RhcnRXaXRoTmV3TGluZVwiOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgXCJ0aXRsZVwiOiBcIlVybFwiLFxuICAgICAgICAgICAgICAgICAgICBcImhpZGVOdW1iZXJcIjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgXCJyZWFkT25seVwiOiB0cnVlXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcInBhbmVsZHluYW1pY1wiLFxuICAgICAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJzZWN0aW9uc1wiLFxuICAgICAgICAgICAgICAgICAgICBcInRpdGxlXCI6IFwiU2VjY2lvbmVzXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiaGlkZU51bWJlclwiOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBcInRlbXBsYXRlRWxlbWVudHNcIjogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJpZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidGl0bGVcIjogXCJJZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicmVhZE9ubHlcIjogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJkcm9wZG93blwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibmFtZVwiOiBcInNlY3Rpb25faWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInN0YXJ0V2l0aE5ld0xpbmVcIjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJpc1JlcXVpcmVkXCI6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0aXRsZVwiOiBcIlNlY2Npw7NuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hvaWNlc0J5VXJsOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogXCIvYXBpL3BhZ2UvZ2V0LXNlY3Rpb25zXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlTmFtZTogXCJpZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZU5hbWU6IFwibmFtZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJkYXRhLT50aXRsZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidGl0bGVcIjogXCJUaXR1bG9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJjb21tZW50XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwiZGF0YS0+dGV4dFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidGl0bGVcIjogXCJUZXh0b1wiXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIFwidGVtcGxhdGVUYWJUaXRsZVwiOiBcIlNlY2Npw7NuIHtwYW5lbEluZGV4fVwiLFxuICAgICAgICAgICAgICAgICAgICBcInJlbmRlck1vZGVcIjogXCJ0YWJcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgIF1cbn0iXSwibmFtZXMiOlsianNvbiIsImNob2ljZXNCeVVybCIsInVybCIsInZhbHVlTmFtZSIsInRpdGxlTmFtZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./resources/js/components/admin/page/form.js\n");

/***/ }),

/***/ "./resources/js/components/admin/video/form.js":
/*!*****************************************************!*\
  !*** ./resources/js/components/admin/video/form.js ***!
  \*****************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   json: () => (/* binding */ json)\n/* harmony export */ });\nvar json = {\n  \"locale\": \"es\",\n  \"title\": {\n    \"default\": \"Alianzas\",\n    \"es\": \"Nuevo Video\"\n  },\n  \"pages\": [{\n    \"name\": \"page1\",\n    \"elements\": [{\n      \"type\": \"dropdown\",\n      \"name\": \"page_id\",\n      \"title\": \"Página de ubicación\",\n      \"hideNumber\": true,\n      \"isRequired\": true,\n      choicesByUrl: {\n        url: \"/api/page/index\",\n        valueName: \"id\",\n        titleName: \"name\"\n      }\n    }, {\n      \"type\": \"text\",\n      \"name\": \"name\",\n      \"title\": \"Nombre\",\n      \"hideNumber\": true\n    }, {\n      \"type\": \"comment\",\n      \"name\": \"description\",\n      \"startWithNewLine\": false,\n      \"title\": \"Texto\",\n      \"hideNumber\": true\n    }, {\n      \"type\": \"text\",\n      \"name\": \"url\",\n      \"title\": \"Url Video\",\n      \"hideNumber\": true,\n      \"isRequired\": true,\n      \"inputType\": \"url\"\n    }]\n  }],\n  \"showCompletedPage\": false\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi92aWRlby9mb3JtLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBTyxJQUFNQSxJQUFJLEdBQUc7RUFDaEIsUUFBUSxFQUFFLElBQUk7RUFDZCxPQUFPLEVBQUU7SUFDTCxTQUFTLEVBQUUsVUFBVTtJQUNyQixJQUFJLEVBQUU7RUFDVixDQUFDO0VBQ0QsT0FBTyxFQUFFLENBQ0w7SUFDSSxNQUFNLEVBQUUsT0FBTztJQUNmLFVBQVUsRUFBRSxDQUNSO01BQ0ksTUFBTSxFQUFFLFVBQVU7TUFDbEIsTUFBTSxFQUFFLFNBQVM7TUFDakIsT0FBTyxFQUFFLHFCQUFxQjtNQUM5QixZQUFZLEVBQUUsSUFBSTtNQUNsQixZQUFZLEVBQUUsSUFBSTtNQUNsQkMsWUFBWSxFQUFFO1FBQ1ZDLEdBQUcsRUFBRSxpQkFBaUI7UUFDdEJDLFNBQVMsRUFBRSxJQUFJO1FBQ2ZDLFNBQVMsRUFBRTtNQUNmO0lBQ0osQ0FBQyxFQUNEO01BQ0ksTUFBTSxFQUFFLE1BQU07TUFDZCxNQUFNLEVBQUUsTUFBTTtNQUNkLE9BQU8sRUFBRSxRQUFRO01BQ2pCLFlBQVksRUFBRTtJQUNsQixDQUFDLEVBQ0Q7TUFDSSxNQUFNLEVBQUUsU0FBUztNQUNqQixNQUFNLEVBQUUsYUFBYTtNQUNyQixrQkFBa0IsRUFBRSxLQUFLO01BQ3pCLE9BQU8sRUFBRSxPQUFPO01BQ2hCLFlBQVksRUFBRTtJQUNsQixDQUFDLEVBQ0Q7TUFDSSxNQUFNLEVBQUUsTUFBTTtNQUNkLE1BQU0sRUFBRSxLQUFLO01BQ2IsT0FBTyxFQUFFLFdBQVc7TUFDcEIsWUFBWSxFQUFFLElBQUk7TUFDbEIsWUFBWSxFQUFFLElBQUk7TUFDbEIsV0FBVyxFQUFFO0lBQ2pCLENBQUM7RUFFVCxDQUFDLENBQ0o7RUFDRCxtQkFBbUIsRUFBRTtBQUN6QixDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vdmlkZW8vZm9ybS5qcz8zNDI0Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBqc29uID0ge1xuICAgIFwibG9jYWxlXCI6IFwiZXNcIixcbiAgICBcInRpdGxlXCI6IHtcbiAgICAgICAgXCJkZWZhdWx0XCI6IFwiQWxpYW56YXNcIixcbiAgICAgICAgXCJlc1wiOiBcIk51ZXZvIFZpZGVvXCJcbiAgICB9LFxuICAgIFwicGFnZXNcIjogW1xuICAgICAgICB7XG4gICAgICAgICAgICBcIm5hbWVcIjogXCJwYWdlMVwiLFxuICAgICAgICAgICAgXCJlbGVtZW50c1wiOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJkcm9wZG93blwiLFxuICAgICAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJwYWdlX2lkXCIsXG4gICAgICAgICAgICAgICAgICAgIFwidGl0bGVcIjogXCJQw6FnaW5hIGRlIHViaWNhY2nDs25cIixcbiAgICAgICAgICAgICAgICAgICAgXCJoaWRlTnVtYmVyXCI6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIFwiaXNSZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBjaG9pY2VzQnlVcmw6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogXCIvYXBpL3BhZ2UvaW5kZXhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlTmFtZTogXCJpZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGVOYW1lOiBcIm5hbWVcIixcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwidGV4dFwiLFxuICAgICAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJuYW1lXCIsXG4gICAgICAgICAgICAgICAgICAgIFwidGl0bGVcIjogXCJOb21icmVcIixcbiAgICAgICAgICAgICAgICAgICAgXCJoaWRlTnVtYmVyXCI6IHRydWVcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwiY29tbWVudFwiLFxuICAgICAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJkZXNjcmlwdGlvblwiLFxuICAgICAgICAgICAgICAgICAgICBcInN0YXJ0V2l0aE5ld0xpbmVcIjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIFwidGl0bGVcIjogXCJUZXh0b1wiLFxuICAgICAgICAgICAgICAgICAgICBcImhpZGVOdW1iZXJcIjogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwidGV4dFwiLFxuICAgICAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJ1cmxcIixcbiAgICAgICAgICAgICAgICAgICAgXCJ0aXRsZVwiOiBcIlVybCBWaWRlb1wiLFxuICAgICAgICAgICAgICAgICAgICBcImhpZGVOdW1iZXJcIjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgXCJpc1JlcXVpcmVkXCI6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIFwiaW5wdXRUeXBlXCI6IFwidXJsXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICBdLFxuICAgIFwic2hvd0NvbXBsZXRlZFBhZ2VcIjogZmFsc2Vcbn07Il0sIm5hbWVzIjpbImpzb24iLCJjaG9pY2VzQnlVcmwiLCJ1cmwiLCJ2YWx1ZU5hbWUiLCJ0aXRsZU5hbWUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./resources/js/components/admin/video/form.js\n");

/***/ }),

/***/ "./resources/js/directory.js":
/*!***********************************!*\
  !*** ./resources/js/directory.js ***!
  \***********************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.esm.js\");\n/* harmony import */ var moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! moment */ \"./node_modules/moment/moment.js\");\n/* harmony import */ var moment__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(moment__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_router__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! vue-router */ \"./node_modules/vue-router/dist/vue-router.esm.js\");\n/* harmony import */ var _components_admin_widgets_FooterWidget__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./components/admin/widgets/FooterWidget */ \"./resources/js/components/admin/widgets/FooterWidget.vue\");\n/* harmony import */ var _components_admin_widgets_NavbarWidget__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./components/admin/widgets/NavbarWidget */ \"./resources/js/components/admin/widgets/NavbarWidget.vue\");\n/* harmony import */ var _components_admin_widgets_SidebarWidget__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./components/admin/widgets/SidebarWidget */ \"./resources/js/components/admin/widgets/SidebarWidget.vue\");\n/* harmony import */ var _desislavsd_vue_select__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @desislavsd/vue-select */ \"./node_modules/@desislavsd/vue-select/dist/vue-select.umd.min.js\");\n/* harmony import */ var _desislavsd_vue_select__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_desislavsd_vue_select__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var vue_data_tables__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! vue-data-tables */ \"./node_modules/vue-data-tables/dist/data-tables.min.js\");\n/* harmony import */ var vue_data_tables__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(vue_data_tables__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var element_ui__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! element-ui */ \"./node_modules/element-ui/lib/element-ui.common.js\");\n/* harmony import */ var element_ui__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(element_ui__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var element_ui_lib_theme_chalk_index_css__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! element-ui/lib/theme-chalk/index.css */ \"./node_modules/element-ui/lib/theme-chalk/index.css\");\n/* harmony import */ var element_ui_lib_locale_lang_es__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! element-ui/lib/locale/lang/es */ \"./node_modules/element-ui/lib/locale/lang/es.js\");\n/* harmony import */ var element_ui_lib_locale__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! element-ui/lib/locale */ \"./node_modules/element-ui/lib/locale/index.js\");\n/* harmony import */ var _mathieustan_vue_datepicker__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mathieustan/vue-datepicker */ \"./node_modules/@mathieustan/vue-datepicker/dist/vue-datepicker.esm.js\");\n/* harmony import */ var _mathieustan_vue_datepicker_dist_vue_datepicker_min_css__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mathieustan/vue-datepicker/dist/vue-datepicker.min.css */ \"./node_modules/@mathieustan/vue-datepicker/dist/vue-datepicker.min.css\");\n__webpack_require__(/*! ./bootstrap */ \"./resources/js/bootstrap.js\");\nvar routes = __webpack_require__(/*! ./routes */ \"./resources/js/routes.js\");\n\n//import DirectoryComponent from \"./components/DirectoryComponent\";\n\n\n\n\n\n\n\n\n\n\n\n\n\nvue__WEBPACK_IMPORTED_MODULE_12__[\"default\"].use((_desislavsd_vue_select__WEBPACK_IMPORTED_MODULE_4___default()), {\n  name: 'vueSelect',\n  mixin: {}\n});\nelement_ui_lib_locale__WEBPACK_IMPORTED_MODULE_9__[\"default\"].use(element_ui_lib_locale_lang_es__WEBPACK_IMPORTED_MODULE_8__[\"default\"]);\nvar PluginLaravelPermissions = {\n  install: function install(Vue, options) {\n    Vue.prototype.LaravelPermission = window.LaravelPermission;\n  }\n};\nvar PluginAccessToken = {\n  install: function install(Vue, options) {\n    Vue.prototype.AccessToken = window.AT;\n  }\n};\nvar PluginUserData = {\n  install: function install(Vue, options) {\n    Vue.prototype.UserData = window.localStorage.getItem('userDataIF') ? JSON.parse(window.localStorage.getItem('userDataIF')) : null;\n  }\n};\nvue__WEBPACK_IMPORTED_MODULE_12__[\"default\"].filter('formatDate', function (value) {\n  if (value) {\n    return moment__WEBPACK_IMPORTED_MODULE_0___default()(String(value)).format('DD/MM/YYYY hh:mm A');\n  }\n});\nvue__WEBPACK_IMPORTED_MODULE_12__[\"default\"].filter('formatDateSimple', function (value) {\n  if (value) {\n    return moment__WEBPACK_IMPORTED_MODULE_0___default()(String(value)).format('DD/MM/YYYY');\n  }\n});\nvue__WEBPACK_IMPORTED_MODULE_12__[\"default\"].use(_mathieustan_vue_datepicker__WEBPACK_IMPORTED_MODULE_10__[\"default\"]);\nvue__WEBPACK_IMPORTED_MODULE_12__[\"default\"].use((element_ui__WEBPACK_IMPORTED_MODULE_6___default()));\nvue__WEBPACK_IMPORTED_MODULE_12__[\"default\"].use(vue_data_tables__WEBPACK_IMPORTED_MODULE_5__.DataTables);\nvue__WEBPACK_IMPORTED_MODULE_12__[\"default\"].use(vue_router__WEBPACK_IMPORTED_MODULE_13__[\"default\"]);\nvue__WEBPACK_IMPORTED_MODULE_12__[\"default\"].use(PluginLaravelPermissions);\nvue__WEBPACK_IMPORTED_MODULE_12__[\"default\"].use(PluginAccessToken);\nvue__WEBPACK_IMPORTED_MODULE_12__[\"default\"].use(PluginUserData);\nvue__WEBPACK_IMPORTED_MODULE_12__[\"default\"].use((_desislavsd_vue_select__WEBPACK_IMPORTED_MODULE_4___default()), {\n  name: 'vueSelect',\n  mixin: {}\n});\nvue__WEBPACK_IMPORTED_MODULE_12__[\"default\"].prototype.$appName = 'Plataforma de caracterización e indice de fortalecimiento';\nvar router = new vue_router__WEBPACK_IMPORTED_MODULE_13__[\"default\"]({\n  routes: routes.routes,\n  mode: 'history',\n  history: true,\n  linkActiveClass: \"active\"\n});\nvar app = new vue__WEBPACK_IMPORTED_MODULE_12__[\"default\"]({\n  el: '#directory',\n  router: router,\n  data: {},\n  components: {\n    NavbarWidget: _components_admin_widgets_NavbarWidget__WEBPACK_IMPORTED_MODULE_2__[\"default\"],\n    FooterWidget: _components_admin_widgets_FooterWidget__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n    SidebarWidget: _components_admin_widgets_SidebarWidget__WEBPACK_IMPORTED_MODULE_3__[\"default\"],\n    VueDatePicker: _mathieustan_vue_datepicker__WEBPACK_IMPORTED_MODULE_10__[\"default\"],\n    //   DirectoryComponent,\n    vueSelect: (_desislavsd_vue_select__WEBPACK_IMPORTED_MODULE_4___default().vueSelect)\n  }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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ZkMsT0FBTyxFQUFFLElBQUk7RUFDYkMsZUFBZSxFQUFFO0FBQ3JCLENBQUMsQ0FBQztBQUtGLElBQU1DLEdBQUcsR0FBRyxJQUFJdkMsNENBQUcsQ0FBQztFQUNoQndDLEVBQUUsRUFBRSxZQUFZO0VBQ2hCTCxNQUFNLEVBQUVBLE1BQU07RUFDZE0sSUFBSSxFQUFFLENBQUMsQ0FBQztFQUNSQyxVQUFVLEVBQUU7SUFDUnRDLFlBQVksRUFBWkEsOEVBQVk7SUFDWkQsWUFBWSxFQUFaQSw4RUFBWTtJQUNaRSxhQUFhLEVBQWJBLCtFQUFhO0lBQ2JNLGFBQWEsRUFBYkEsb0VBQWE7SUFDaEI7SUFDR2dDLFNBQVMsRUFBRXJDLHlFQUFtQnFDO0VBQ2xDO0FBQ0osQ0FBQyxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL2RpcmVjdG9yeS5qcz84MjBlIl0sInNvdXJjZXNDb250ZW50IjpbInJlcXVpcmUoJy4vYm9vdHN0cmFwJyk7XG5jb25zdCByb3V0ZXMgPSByZXF1aXJlKCcuL3JvdXRlcycpO1xuXG5cbmltcG9ydCBWdWUgZnJvbSAndnVlJztcbi8vaW1wb3J0IERpcmVjdG9yeUNvbXBvbmVudCBmcm9tIFwiLi9jb21wb25lbnRzL0RpcmVjdG9yeUNvbXBvbmVudFwiO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IFZ1ZVJvdXRlciBmcm9tICd2dWUtcm91dGVyJztcbmltcG9ydCBGb290ZXJXaWRnZXQgZnJvbSAnLi9jb21wb25lbnRzL2FkbWluL3dpZGdldHMvRm9vdGVyV2lkZ2V0JztcbmltcG9ydCBOYXZiYXJXaWRnZXQgZnJvbSAnLi9jb21wb25lbnRzL2FkbWluL3dpZGdldHMvTmF2YmFyV2lkZ2V0JztcbmltcG9ydCBTaWRlYmFyV2lkZ2V0IGZyb20gJy4vY29tcG9uZW50cy9hZG1pbi93aWRnZXRzL1NpZGViYXJXaWRnZXQnO1xuaW1wb3J0IFZ1ZVNlbGVjdCBmcm9tICdAZGVzaXNsYXZzZC92dWUtc2VsZWN0J1xuaW1wb3J0IHsgRGF0YVRhYmxlcyB9IGZyb20gJ3Z1ZS1kYXRhLXRhYmxlcydcbmltcG9ydCBFbGVtZW50VUkgZnJvbSAnZWxlbWVudC11aSc7XG5pbXBvcnQgJ2VsZW1lbnQtdWkvbGliL3RoZW1lLWNoYWxrL2luZGV4LmNzcyc7XG5cbmltcG9ydCBsYW5nIGZyb20gJ2VsZW1lbnQtdWkvbGliL2xvY2FsZS9sYW5nL2VzJztcbmltcG9ydCBsb2NhbGUgZnJvbSAnZWxlbWVudC11aS9saWIvbG9jYWxlJztcbmltcG9ydCBWdWVEYXRlUGlja2VyIGZyb20gJ0BtYXRoaWV1c3Rhbi92dWUtZGF0ZXBpY2tlcic7XG5pbXBvcnQgJ0BtYXRoaWV1c3Rhbi92dWUtZGF0ZXBpY2tlci9kaXN0L3Z1ZS1kYXRlcGlja2VyLm1pbi5jc3MnO1xuXG5cblxuXG5WdWUudXNlKFZ1ZVNlbGVjdCwge1xuICAgIG5hbWU6ICd2dWVTZWxlY3QnLFxuICAgIG1peGluOiB7fVxufSk7XG5cbmxvY2FsZS51c2UobGFuZylcbmNvbnN0IFBsdWdpbkxhcmF2ZWxQZXJtaXNzaW9ucyA9IHtcbiAgICBpbnN0YWxsKFZ1ZSwgb3B0aW9ucykge1xuICAgICAgICBWdWUucHJvdG90eXBlLkxhcmF2ZWxQZXJtaXNzaW9uID0gd2luZG93LkxhcmF2ZWxQZXJtaXNzaW9uO1xuICAgIH0sXG59XG5cbmNvbnN0IFBsdWdpbkFjY2Vzc1Rva2VuID0ge1xuICAgIGluc3RhbGwoVnVlLCBvcHRpb25zKSB7XG4gICAgICAgIFZ1ZS5wcm90b3R5cGUuQWNjZXNzVG9rZW4gPSB3aW5kb3cuQVQ7XG4gICAgfSxcbn1cblxuY29uc3QgUGx1Z2luVXNlckRhdGEgPSB7XG4gICAgaW5zdGFsbChWdWUsIG9wdGlvbnMpIHtcbiAgICAgICAgVnVlLnByb3RvdHlwZS5Vc2VyRGF0YSA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndXNlckRhdGFJRicpID8gSlNPTi5wYXJzZSh3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3VzZXJEYXRhSUYnKSkgOiBudWxsO1xuICAgIH0sXG59XG5cblZ1ZS5maWx0ZXIoJ2Zvcm1hdERhdGUnLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIG1vbWVudChTdHJpbmcodmFsdWUpKS5mb3JtYXQoJ0REL01NL1lZWVkgaGg6bW0gQScpXG4gICAgfVxufSk7XG5cblZ1ZS5maWx0ZXIoJ2Zvcm1hdERhdGVTaW1wbGUnLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIG1vbWVudChTdHJpbmcodmFsdWUpKS5mb3JtYXQoJ0REL01NL1lZWVknKVxuICAgIH1cbn0pO1xuXG5WdWUudXNlKFZ1ZURhdGVQaWNrZXIpO1xuVnVlLnVzZShFbGVtZW50VUkpO1xuVnVlLnVzZShEYXRhVGFibGVzKTtcblZ1ZS51c2UoVnVlUm91dGVyKTtcblZ1ZS51c2UoUGx1Z2luTGFyYXZlbFBlcm1pc3Npb25zKTtcblZ1ZS51c2UoUGx1Z2luQWNjZXNzVG9rZW4pO1xuVnVlLnVzZShQbHVnaW5Vc2VyRGF0YSk7XG5WdWUudXNlKFZ1ZVNlbGVjdCwge1xuICAgIG5hbWU6ICd2dWVTZWxlY3QnLFxuICAgIG1peGluOiB7fVxufSk7XG5cblZ1ZS5wcm90b3R5cGUuJGFwcE5hbWUgPSAnUGxhdGFmb3JtYSBkZSBjYXJhY3Rlcml6YWNpw7NuIGUgaW5kaWNlIGRlIGZvcnRhbGVjaW1pZW50byc7XG5cbmNvbnN0IHJvdXRlciA9IG5ldyBWdWVSb3V0ZXIoe1xuICAgIHJvdXRlczogcm91dGVzLnJvdXRlcyxcbiAgICBtb2RlOiAnaGlzdG9yeScsXG4gICAgaGlzdG9yeTogdHJ1ZSxcbiAgICBsaW5rQWN0aXZlQ2xhc3M6IFwiYWN0aXZlXCJcbn0pO1xuXG5cblxuXG5jb25zdCBhcHAgPSBuZXcgVnVlKHtcbiAgICBlbDogJyNkaXJlY3RvcnknLFxuICAgIHJvdXRlcjogcm91dGVyLFxuICAgIGRhdGE6IHt9LFxuICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgTmF2YmFyV2lkZ2V0LFxuICAgICAgICBGb290ZXJXaWRnZXQsXG4gICAgICAgIFNpZGViYXJXaWRnZXQsXG4gICAgICAgIFZ1ZURhdGVQaWNrZXIsXG4gICAgIC8vICAgRGlyZWN0b3J5Q29tcG9uZW50LFxuICAgICAgICB2dWVTZWxlY3Q6IFZ1ZVNlbGVjdC52dWVTZWxlY3RcbiAgICB9XG59KTtcbiJdLCJuYW1lcyI6WyJyZXF1aXJlIiwicm91dGVzIiwiVnVlIiwibW9tZW50IiwiVnVlUm91dGVyIiwiRm9vdGVyV2lkZ2V0IiwiTmF2YmFyV2lkZ2V0IiwiU2lkZWJhcldpZGdldCIsIlZ1ZVNlbGVjdCIsIkRhdGFUYWJsZXMiLCJFbGVtZW50VUkiLCJsYW5nIiwibG9jYWxlIiwiVnVlRGF0ZVBpY2tlciIsInVzZSIsIm5hbWUiLCJtaXhpbiIsIlBsdWdpbkxhcmF2ZWxQZXJtaXNzaW9ucyIsImluc3RhbGwiLCJvcHRpb25zIiwicHJvdG90eXBlIiwiTGFyYXZlbFBlcm1pc3Npb24iLCJ3aW5kb3ciLCJQbHVnaW5BY2Nlc3NUb2tlbiIsIkFjY2Vzc1Rva2VuIiwiQVQiLCJQbHVnaW5Vc2VyRGF0YSIsIlVzZXJEYXRhIiwibG9jYWxTdG9yYWdlIiwiZ2V0SXRlbSIsIkpTT04iLCJwYXJzZSIsImZpbHRlciIsInZhbHVlIiwiU3RyaW5nIiwiZm9ybWF0IiwiJGFwcE5hbWUiLCJyb3V0ZXIiLCJtb2RlIiwiaGlzdG9yeSIsImxpbmtBY3RpdmVDbGFzcyIsImFwcCIsImVsIiwiZGF0YSIsImNvbXBvbmVudHMiLCJ2dWVTZWxlY3QiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./resources/js/directory.js\n");

/***/ }),

/***/ "./resources/js/routes.js":
/*!********************************!*\
  !*** ./resources/js/routes.js ***!
  \********************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   routes: () => (/* binding */ routes)\n/* harmony export */ });\n/* harmony import */ var _components_DashboardComponent__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./components/DashboardComponent */ \"./resources/js/components/DashboardComponent.vue\");\n/* harmony import */ var _components_admin_banner_index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./components/admin/banner/index */ \"./resources/js/components/admin/banner/index.vue\");\n/* harmony import */ var _components_admin_banner_create__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./components/admin/banner/create */ \"./resources/js/components/admin/banner/create.vue\");\n/* harmony import */ var _components_admin_banner_edit__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./components/admin/banner/edit */ \"./resources/js/components/admin/banner/edit.vue\");\n/* harmony import */ var _components_admin_cycle_index__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./components/admin/cycle/index */ \"./resources/js/components/admin/cycle/index.vue\");\n/* harmony import */ var _components_admin_cycle_create__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./components/admin/cycle/create */ \"./resources/js/components/admin/cycle/create.vue\");\n/* harmony import */ var _components_admin_cycle_edit__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./components/admin/cycle/edit */ \"./resources/js/components/admin/cycle/edit.vue\");\n/* harmony import */ var _components_admin_conference_index__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./components/admin/conference/index */ \"./resources/js/components/admin/conference/index.vue\");\n/* harmony import */ var _components_admin_conference_create__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./components/admin/conference/create */ \"./resources/js/components/admin/conference/create.vue\");\n/* harmony import */ var _components_admin_conference_edit__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./components/admin/conference/edit */ \"./resources/js/components/admin/conference/edit.vue\");\n/* harmony import */ var _components_admin_conference_gallery__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./components/admin/conference/gallery */ \"./resources/js/components/admin/conference/gallery.vue\");\n/* harmony import */ var _components_admin_library_index__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./components/admin/library/index */ \"./resources/js/components/admin/library/index.vue\");\n/* harmony import */ var _components_admin_library_create__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./components/admin/library/create */ \"./resources/js/components/admin/library/create.vue\");\n/* harmony import */ var _components_admin_library_edit__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./components/admin/library/edit */ \"./resources/js/components/admin/library/edit.vue\");\n/* harmony import */ var _components_admin_alliance_index__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./components/admin/alliance/index */ \"./resources/js/components/admin/alliance/index.vue\");\n/* harmony import */ var _components_admin_alliance_create__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./components/admin/alliance/create */ \"./resources/js/components/admin/alliance/create.vue\");\n/* harmony import */ var _components_admin_alliance_edit__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./components/admin/alliance/edit */ \"./resources/js/components/admin/alliance/edit.vue\");\n/* harmony import */ var _components_admin_video_index__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./components/admin/video/index */ \"./resources/js/components/admin/video/index.vue\");\n/* harmony import */ var _components_admin_video_create__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./components/admin/video/create */ \"./resources/js/components/admin/video/create.vue\");\n/* harmony import */ var _components_admin_video_edit__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./components/admin/video/edit */ \"./resources/js/components/admin/video/edit.vue\");\n/* harmony import */ var _components_admin_course_create__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./components/admin/course/create */ \"./resources/js/components/admin/course/create.vue\");\n/* harmony import */ var _components_admin_course_index__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./components/admin/course/index */ \"./resources/js/components/admin/course/index.vue\");\n/* harmony import */ var _components_admin_course_edit__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./components/admin/course/edit */ \"./resources/js/components/admin/course/edit.vue\");\n/* harmony import */ var _components_admin_page_index__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./components/admin/page/index */ \"./resources/js/components/admin/page/index.vue\");\n/* harmony import */ var _components_admin_page_edit__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./components/admin/page/edit */ \"./resources/js/components/admin/page/edit.vue\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar routes = [\n//Rutas del panel de administración\n{\n  path: '/panel-administracion/',\n  component: _components_DashboardComponent__WEBPACK_IMPORTED_MODULE_0__[\"default\"]\n}, {\n  path: '/panel-administracion/banner',\n  component: _components_admin_banner_index__WEBPACK_IMPORTED_MODULE_1__[\"default\"]\n}, {\n  path: '/panel-administracion/banner/nuevo',\n  component: _components_admin_banner_create__WEBPACK_IMPORTED_MODULE_2__[\"default\"]\n}, {\n  path: '/panel-administracion/banner/:id/editar',\n  component: _components_admin_banner_edit__WEBPACK_IMPORTED_MODULE_3__[\"default\"]\n}, {\n  path: '/panel-administracion/ciclos',\n  component: _components_admin_cycle_index__WEBPACK_IMPORTED_MODULE_4__[\"default\"]\n}, {\n  path: '/panel-administracion/ciclos/nuevo',\n  component: _components_admin_cycle_create__WEBPACK_IMPORTED_MODULE_5__[\"default\"]\n}, {\n  path: '/panel-administracion/ciclos/:id/editar',\n  component: _components_admin_cycle_edit__WEBPACK_IMPORTED_MODULE_6__[\"default\"]\n}, {\n  path: '/panel-administracion/cursos/nuevo',\n  component: _components_admin_course_create__WEBPACK_IMPORTED_MODULE_20__[\"default\"]\n}, {\n  path: '/panel-administracion/cursos',\n  component: _components_admin_course_index__WEBPACK_IMPORTED_MODULE_21__[\"default\"]\n}, {\n  path: '/panel-administracion/cursos/:id/editar',\n  component: _components_admin_course_edit__WEBPACK_IMPORTED_MODULE_22__[\"default\"]\n}, {\n  path: '/panel-administracion/congresos',\n  component: _components_admin_conference_index__WEBPACK_IMPORTED_MODULE_7__[\"default\"]\n}, {\n  path: '/panel-administracion/congresos/nuevo',\n  component: _components_admin_conference_create__WEBPACK_IMPORTED_MODULE_8__[\"default\"]\n}, {\n  path: '/panel-administracion/congresos/:id/editar',\n  component: _components_admin_conference_edit__WEBPACK_IMPORTED_MODULE_9__[\"default\"]\n}, {\n  path: '/panel-administracion/congresos/:id/galeria',\n  component: _components_admin_conference_gallery__WEBPACK_IMPORTED_MODULE_10__[\"default\"]\n}, {\n  path: '/panel-administracion/biblioteca',\n  component: _components_admin_library_index__WEBPACK_IMPORTED_MODULE_11__[\"default\"]\n}, {\n  path: '/panel-administracion/biblioteca/nuevo',\n  component: _components_admin_library_create__WEBPACK_IMPORTED_MODULE_12__[\"default\"]\n}, {\n  path: '/panel-administracion/biblioteca/:id/editar',\n  component: _components_admin_library_edit__WEBPACK_IMPORTED_MODULE_13__[\"default\"]\n}, {\n  path: '/panel-administracion/alianzas',\n  component: _components_admin_alliance_index__WEBPACK_IMPORTED_MODULE_14__[\"default\"]\n}, {\n  path: '/panel-administracion/alianzas/nuevo',\n  component: _components_admin_alliance_create__WEBPACK_IMPORTED_MODULE_15__[\"default\"]\n}, {\n  path: '/panel-administracion/alianzas/:id/editar',\n  component: _components_admin_alliance_edit__WEBPACK_IMPORTED_MODULE_16__[\"default\"]\n}, {\n  path: '/panel-administracion/video',\n  component: _components_admin_video_index__WEBPACK_IMPORTED_MODULE_17__[\"default\"]\n}, {\n  path: '/panel-administracion/video/nuevo',\n  component: _components_admin_video_create__WEBPACK_IMPORTED_MODULE_18__[\"default\"]\n}, {\n  path: '/panel-administracion/video/:id/editar',\n  component: _components_admin_video_edit__WEBPACK_IMPORTED_MODULE_19__[\"default\"]\n}, {\n  path: '/panel-administracion/paginas',\n  component: _components_admin_page_index__WEBPACK_IMPORTED_MODULE_23__[\"default\"]\n}, {\n  path: '/panel-administracion/paginas/:id/editar',\n  component: _components_admin_page_edit__WEBPACK_IMPORTED_MODULE_24__[\"default\"]\n}];//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LEVBQUVKLHFFQUFpQkE7QUFDaEMsQ0FBQyxFQUNEO0VBQ0lHLElBQUksRUFBRSwwQ0FBMEM7RUFDaERDLFNBQVMsRUFBRUgsb0VBQWlCQTtBQUNoQyxDQUFDLENBRUoiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvcm91dGVzLmpzP2IwYjMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IERhc2hib2FyZENvbXBvbmVudCBmcm9tICcuL2NvbXBvbmVudHMvRGFzaGJvYXJkQ29tcG9uZW50JztcbmltcG9ydCBMaXN0QmFubmVyQ29tcG9uZW50IGZyb20gJy4vY29tcG9uZW50cy9hZG1pbi9iYW5uZXIvaW5kZXgnO1xuaW1wb3J0IE5ld0Jhbm5lckNvbXBvbmVudCBmcm9tICcuL2NvbXBvbmVudHMvYWRtaW4vYmFubmVyL2NyZWF0ZSc7XG5pbXBvcnQgRWRpdEJhbm5lckNvbXBvbmVudCBmcm9tICcuL2NvbXBvbmVudHMvYWRtaW4vYmFubmVyL2VkaXQnO1xuaW1wb3J0IExpc3RDeWNsZUNvbXBvbmVudCBmcm9tICcuL2NvbXBvbmVudHMvYWRtaW4vY3ljbGUvaW5kZXgnO1xuaW1wb3J0IE5ld0N5Y2xlQ29tcG9uZW50IGZyb20gJy4vY29tcG9uZW50cy9hZG1pbi9jeWNsZS9jcmVhdGUnO1xuaW1wb3J0IEVkaXRDeWNsZUNvbXBvbmVudCBmcm9tICcuL2NvbXBvbmVudHMvYWRtaW4vY3ljbGUvZWRpdCc7XG5pbXBvcnQgTGlzdENvbmZlcmVuY2VDb21wb25lbnQgZnJvbSAnLi9jb21wb25lbnRzL2FkbWluL2NvbmZlcmVuY2UvaW5kZXgnO1xuaW1wb3J0IE5ld0NvbmZlcmVuY2VDb21wb25lbnQgZnJvbSAnLi9jb21wb25lbnRzL2FkbWluL2NvbmZlcmVuY2UvY3JlYXRlJztcbmltcG9ydCBFZGl0Q29uZmVyZW5jZUNvbXBvbmVudCBmcm9tICcuL2NvbXBvbmVudHMvYWRtaW4vY29uZmVyZW5jZS9lZGl0JztcbmltcG9ydCBHYWxsZXJ5Q29uZmVyZW5jZUNvbXBvbmVudCBmcm9tICcuL2NvbXBvbmVudHMvYWRtaW4vY29uZmVyZW5jZS9nYWxsZXJ5JztcbmltcG9ydCBMaXN0TGlicmFyeUNvbXBvbmVudCBmcm9tICcuL2NvbXBvbmVudHMvYWRtaW4vbGlicmFyeS9pbmRleCc7XG5pbXBvcnQgTmV3TGlicmFyeUNvbXBvbmVudCBmcm9tICcuL2NvbXBvbmVudHMvYWRtaW4vbGlicmFyeS9jcmVhdGUnO1xuaW1wb3J0IEVkaXRMaWJyYXJ5Q29tcG9uZW50IGZyb20gJy4vY29tcG9uZW50cy9hZG1pbi9saWJyYXJ5L2VkaXQnO1xuaW1wb3J0IExpc3RBbGxpYW5jZUNvbXBvbmVudCBmcm9tICcuL2NvbXBvbmVudHMvYWRtaW4vYWxsaWFuY2UvaW5kZXgnO1xuaW1wb3J0IE5ld0FsbGlhbmNlQ29tcG9uZW50IGZyb20gJy4vY29tcG9uZW50cy9hZG1pbi9hbGxpYW5jZS9jcmVhdGUnO1xuaW1wb3J0IEVkaXRBbGxpYW5jZUNvbXBvbmVudCBmcm9tICcuL2NvbXBvbmVudHMvYWRtaW4vYWxsaWFuY2UvZWRpdCc7XG5pbXBvcnQgTGlzdFZpZGVvQ29tcG9uZW50IGZyb20gJy4vY29tcG9uZW50cy9hZG1pbi92aWRlby9pbmRleCc7XG5pbXBvcnQgTmV3VmlkZW9Db21wb25lbnQgZnJvbSAnLi9jb21wb25lbnRzL2FkbWluL3ZpZGVvL2NyZWF0ZSc7XG5pbXBvcnQgRWRpdFZpZGVvQ29tcG9uZW50IGZyb20gJy4vY29tcG9uZW50cy9hZG1pbi92aWRlby9lZGl0JztcbmltcG9ydCBOZXdDb3Vyc2VDb21wb25lbnQgZnJvbSAnLi9jb21wb25lbnRzL2FkbWluL2NvdXJzZS9jcmVhdGUnO1xuaW1wb3J0IExpc3RDb3Vyc2VDb21wb25lbnQgZnJvbSAnLi9jb21wb25lbnRzL2FkbWluL2NvdXJzZS9pbmRleCc7XG5pbXBvcnQgRWRpdENvdXJzZUNvbXBvbmVudCBmcm9tICcuL2NvbXBvbmVudHMvYWRtaW4vY291cnNlL2VkaXQnO1xuaW1wb3J0IExpc3RQYWdlQ29tcG9uZW50IGZyb20gJy4vY29tcG9uZW50cy9hZG1pbi9wYWdlL2luZGV4JztcbmltcG9ydCBFZGl0UGFnZUNvbXBvbmVudCBmcm9tICcuL2NvbXBvbmVudHMvYWRtaW4vcGFnZS9lZGl0JztcblxuXG5leHBvcnQgY29uc3Qgcm91dGVzID0gW1xuICAgIC8vUnV0YXMgZGVsIHBhbmVsIGRlIGFkbWluaXN0cmFjacOzblxuICAgIHtcbiAgICAgICAgcGF0aDogJy9wYW5lbC1hZG1pbmlzdHJhY2lvbi8nLFxuICAgICAgICBjb21wb25lbnQ6IERhc2hib2FyZENvbXBvbmVudFxuICAgIH0sXG4gICAge1xuICAgICAgICBwYXRoOiAnL3BhbmVsLWFkbWluaXN0cmFjaW9uL2Jhbm5lcicsXG4gICAgICAgIGNvbXBvbmVudDogTGlzdEJhbm5lckNvbXBvbmVudFxuICAgIH0sXG4gICAge1xuICAgICAgICBwYXRoOiAnL3BhbmVsLWFkbWluaXN0cmFjaW9uL2Jhbm5lci9udWV2bycsXG4gICAgICAgIGNvbXBvbmVudDogTmV3QmFubmVyQ29tcG9uZW50XG4gICAgfSxcbiAgICB7XG4gICAgICAgIHBhdGg6ICcvcGFuZWwtYWRtaW5pc3RyYWNpb24vYmFubmVyLzppZC9lZGl0YXInLFxuICAgICAgICBjb21wb25lbnQ6IEVkaXRCYW5uZXJDb21wb25lbnRcbiAgICB9LFxuICAgIHtcbiAgICAgICAgcGF0aDogJy9wYW5lbC1hZG1pbmlzdHJhY2lvbi9jaWNsb3MnLFxuICAgICAgICBjb21wb25lbnQ6IExpc3RDeWNsZUNvbXBvbmVudFxuICAgIH0sXG4gICAge1xuICAgICAgICBwYXRoOiAnL3BhbmVsLWFkbWluaXN0cmFjaW9uL2NpY2xvcy9udWV2bycsXG4gICAgICAgIGNvbXBvbmVudDogTmV3Q3ljbGVDb21wb25lbnRcbiAgICB9LFxuICAgIHtcbiAgICAgICAgcGF0aDogJy9wYW5lbC1hZG1pbmlzdHJhY2lvbi9jaWNsb3MvOmlkL2VkaXRhcicsXG4gICAgICAgIGNvbXBvbmVudDogRWRpdEN5Y2xlQ29tcG9uZW50XG4gICAgfSxcbiAgICB7XG4gICAgICAgIHBhdGg6ICcvcGFuZWwtYWRtaW5pc3RyYWNpb24vY3Vyc29zL251ZXZvJyxcbiAgICAgICAgY29tcG9uZW50OiBOZXdDb3Vyc2VDb21wb25lbnRcbiAgICB9LFxuICAgIHtcbiAgICAgICAgcGF0aDogJy9wYW5lbC1hZG1pbmlzdHJhY2lvbi9jdXJzb3MnLFxuICAgICAgICBjb21wb25lbnQ6IExpc3RDb3Vyc2VDb21wb25lbnRcbiAgICB9LFxuICAgIHtcbiAgICAgICAgcGF0aDogJy9wYW5lbC1hZG1pbmlzdHJhY2lvbi9jdXJzb3MvOmlkL2VkaXRhcicsXG4gICAgICAgIGNvbXBvbmVudDogRWRpdENvdXJzZUNvbXBvbmVudFxuICAgIH0sXG4gICAge1xuICAgICAgICBwYXRoOiAnL3BhbmVsLWFkbWluaXN0cmFjaW9uL2NvbmdyZXNvcycsXG4gICAgICAgIGNvbXBvbmVudDogTGlzdENvbmZlcmVuY2VDb21wb25lbnRcbiAgICB9LFxuICAgIHtcbiAgICAgICAgcGF0aDogJy9wYW5lbC1hZG1pbmlzdHJhY2lvbi9jb25ncmVzb3MvbnVldm8nLFxuICAgICAgICBjb21wb25lbnQ6IE5ld0NvbmZlcmVuY2VDb21wb25lbnRcbiAgICB9LFxuICAgIHtcbiAgICAgICAgcGF0aDogJy9wYW5lbC1hZG1pbmlzdHJhY2lvbi9jb25ncmVzb3MvOmlkL2VkaXRhcicsXG4gICAgICAgIGNvbXBvbmVudDogRWRpdENvbmZlcmVuY2VDb21wb25lbnRcbiAgICB9LFxuICAgIHtcbiAgICAgICAgcGF0aDogJy9wYW5lbC1hZG1pbmlzdHJhY2lvbi9jb25ncmVzb3MvOmlkL2dhbGVyaWEnLFxuICAgICAgICBjb21wb25lbnQ6IEdhbGxlcnlDb25mZXJlbmNlQ29tcG9uZW50XG4gICAgfSxcbiAgICB7XG4gICAgICAgIHBhdGg6ICcvcGFuZWwtYWRtaW5pc3RyYWNpb24vYmlibGlvdGVjYScsXG4gICAgICAgIGNvbXBvbmVudDogTGlzdExpYnJhcnlDb21wb25lbnRcbiAgICB9LFxuICAgIHtcbiAgICAgICAgcGF0aDogJy9wYW5lbC1hZG1pbmlzdHJhY2lvbi9iaWJsaW90ZWNhL251ZXZvJyxcbiAgICAgICAgY29tcG9uZW50OiBOZXdMaWJyYXJ5Q29tcG9uZW50XG4gICAgfSxcbiAgICB7XG4gICAgICAgIHBhdGg6ICcvcGFuZWwtYWRtaW5pc3RyYWNpb24vYmlibGlvdGVjYS86aWQvZWRpdGFyJyxcbiAgICAgICAgY29tcG9uZW50OiBFZGl0TGlicmFyeUNvbXBvbmVudFxuICAgIH0sXG4gICAge1xuICAgICAgICBwYXRoOiAnL3BhbmVsLWFkbWluaXN0cmFjaW9uL2FsaWFuemFzJyxcbiAgICAgICAgY29tcG9uZW50OiBMaXN0QWxsaWFuY2VDb21wb25lbnRcbiAgICB9LFxuICAgIHtcbiAgICAgICAgcGF0aDogJy9wYW5lbC1hZG1pbmlzdHJhY2lvbi9hbGlhbnphcy9udWV2bycsXG4gICAgICAgIGNvbXBvbmVudDogTmV3QWxsaWFuY2VDb21wb25lbnRcbiAgICB9LFxuICAgIHtcbiAgICAgICAgcGF0aDogJy9wYW5lbC1hZG1pbmlzdHJhY2lvbi9hbGlhbnphcy86aWQvZWRpdGFyJyxcbiAgICAgICAgY29tcG9uZW50OiBFZGl0QWxsaWFuY2VDb21wb25lbnRcbiAgICB9LFxuICAgIHtcbiAgICAgICAgcGF0aDogJy9wYW5lbC1hZG1pbmlzdHJhY2lvbi92aWRlbycsXG4gICAgICAgIGNvbXBvbmVudDogTGlzdFZpZGVvQ29tcG9uZW50XG4gICAgfSxcbiAgICB7XG4gICAgICAgIHBhdGg6ICcvcGFuZWwtYWRtaW5pc3RyYWNpb24vdmlkZW8vbnVldm8nLFxuICAgICAgICBjb21wb25lbnQ6IE5ld1ZpZGVvQ29tcG9uZW50XG4gICAgfSxcbiAgICB7XG4gICAgICAgIHBhdGg6ICcvcGFuZWwtYWRtaW5pc3RyYWNpb24vdmlkZW8vOmlkL2VkaXRhcicsXG4gICAgICAgIGNvbXBvbmVudDogRWRpdFZpZGVvQ29tcG9uZW50XG4gICAgfSxcbiAgICB7XG4gICAgICAgIHBhdGg6ICcvcGFuZWwtYWRtaW5pc3RyYWNpb24vcGFnaW5hcycsXG4gICAgICAgIGNvbXBvbmVudDogTGlzdFBhZ2VDb21wb25lbnRcbiAgICB9LFxuICAgIHtcbiAgICAgICAgcGF0aDogJy9wYW5lbC1hZG1pbmlzdHJhY2lvbi9wYWdpbmFzLzppZC9lZGl0YXInLFxuICAgICAgICBjb21wb25lbnQ6IEVkaXRQYWdlQ29tcG9uZW50XG4gICAgfSxcblxuXTtcblxuXG4iXSwibmFtZXMiOlsiRGFzaGJvYXJkQ29tcG9uZW50IiwiTGlzdEJhbm5lckNvbXBvbmVudCIsIk5ld0Jhbm5lckNvbXBvbmVudCIsIkVkaXRCYW5uZXJDb21wb25lbnQiLCJMaXN0Q3ljbGVDb21wb25lbnQiLCJOZXdDeWNsZUNvbXBvbmVudCIsIkVkaXRDeWNsZUNvbXBvbmVudCIsIkxpc3RDb25mZXJlbmNlQ29tcG9uZW50IiwiTmV3Q29uZmVyZW5jZUNvbXBvbmVudCIsIkVkaXRDb25mZXJlbmNlQ29tcG9uZW50IiwiR2FsbGVyeUNvbmZlcmVuY2VDb21wb25lbnQiLCJMaXN0TGlicmFyeUNvbXBvbmVudCIsIk5ld0xpYnJhcnlDb21wb25lbnQiLCJFZGl0TGlicmFyeUNvbXBvbmVudCIsIkxpc3RBbGxpYW5jZUNvbXBvbmVudCIsIk5ld0FsbGlhbmNlQ29tcG9uZW50IiwiRWRpdEFsbGlhbmNlQ29tcG9uZW50IiwiTGlzdFZpZGVvQ29tcG9uZW50IiwiTmV3VmlkZW9Db21wb25lbnQiLCJFZGl0VmlkZW9Db21wb25lbnQiLCJOZXdDb3Vyc2VDb21wb25lbnQiLCJMaXN0Q291cnNlQ29tcG9uZW50IiwiRWRpdENvdXJzZUNvbXBvbmVudCIsIkxpc3RQYWdlQ29tcG9uZW50IiwiRWRpdFBhZ2VDb21wb25lbnQiLCJyb3V0ZXMiLCJwYXRoIiwiY29tcG9uZW50Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./resources/js/routes.js\n");

/***/ }),

/***/ "./node_modules/babel-runtime/core-js/object/assign.js":
/*!*************************************************************!*\
  !*** ./node_modules/babel-runtime/core-js/object/assign.js ***!
  \*************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

eval("module.exports = { \"default\": __webpack_require__(/*! core-js/library/fn/object/assign */ \"./node_modules/babel-runtime/node_modules/core-js/library/fn/object/assign.js\"), __esModule: true };//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9hc3NpZ24uanMiLCJtYXBwaW5ncyI6IkFBQUEsbUJBQW1CLFdBQVcsbUJBQU8sQ0FBQyx1SEFBa0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9hc3NpZ24uanM/ZWVlMyJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IHJlcXVpcmUoXCJjb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2Fzc2lnblwiKSwgX19lc01vZHVsZTogdHJ1ZSB9OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/babel-runtime/core-js/object/assign.js\n");

/***/ }),

/***/ "./node_modules/babel-runtime/core-js/symbol.js":
/*!******************************************************!*\
  !*** ./node_modules/babel-runtime/core-js/symbol.js ***!
  \******************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

eval("module.exports = { \"default\": __webpack_require__(/*! core-js/library/fn/symbol */ \"./node_modules/babel-runtime/node_modules/core-js/library/fn/symbol/index.js\"), __esModule: true };//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL3N5bWJvbC5qcyIsIm1hcHBpbmdzIjoiQUFBQSxtQkFBbUIsV0FBVyxtQkFBTyxDQUFDLCtHQUEyQiIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvc3ltYm9sLmpzPzViOWEiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiByZXF1aXJlKFwiY29yZS1qcy9saWJyYXJ5L2ZuL3N5bWJvbFwiKSwgX19lc01vZHVsZTogdHJ1ZSB9OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/babel-runtime/core-js/symbol.js\n");

/***/ }),

/***/ "./node_modules/babel-runtime/core-js/symbol/iterator.js":
/*!***************************************************************!*\
  !*** ./node_modules/babel-runtime/core-js/symbol/iterator.js ***!
  \***************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

eval("module.exports = { \"default\": __webpack_require__(/*! core-js/library/fn/symbol/iterator */ \"./node_modules/babel-runtime/node_modules/core-js/library/fn/symbol/iterator.js\"), __esModule: true };//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL3N5bWJvbC9pdGVyYXRvci5qcyIsIm1hcHBpbmdzIjoiQUFBQSxtQkFBbUIsV0FBVyxtQkFBTyxDQUFDLDJIQUFvQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvc3ltYm9sL2l0ZXJhdG9yLmpzPzExNTIiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiByZXF1aXJlKFwiY29yZS1qcy9saWJyYXJ5L2ZuL3N5bWJvbC9pdGVyYXRvclwiKSwgX19lc01vZHVsZTogdHJ1ZSB9OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/babel-runtime/core-js/symbol/iterator.js\n");

/***/ }),

/***/ "./node_modules/babel-runtime/helpers/extends.js":
/*!*******************************************************!*\
  !*** ./node_modules/babel-runtime/helpers/extends.js ***!
  \*******************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";
eval("\n\nexports.__esModule = true;\n\nvar _assign = __webpack_require__(/*! ../core-js/object/assign */ \"./node_modules/babel-runtime/core-js/object/assign.js\");\n\nvar _assign2 = _interopRequireDefault(_assign);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports[\"default\"] = _assign2.default || function (target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i];\n\n    for (var key in source) {\n      if (Object.prototype.hasOwnProperty.call(source, key)) {\n        target[key] = source[key];\n      }\n    }\n  }\n\n  return target;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2V4dGVuZHMuanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsa0JBQWtCOztBQUVsQixjQUFjLG1CQUFPLENBQUMsdUZBQTBCOztBQUVoRDs7QUFFQSx1Q0FBdUMsdUNBQXVDOztBQUU5RSxrQkFBZTtBQUNmLGtCQUFrQixzQkFBc0I7QUFDeEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2V4dGVuZHMuanM/ZWNiMSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxudmFyIF9hc3NpZ24gPSByZXF1aXJlKFwiLi4vY29yZS1qcy9vYmplY3QvYXNzaWduXCIpO1xuXG52YXIgX2Fzc2lnbjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9hc3NpZ24pO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5leHBvcnRzLmRlZmF1bHQgPSBfYXNzaWduMi5kZWZhdWx0IHx8IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldO1xuXG4gICAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHtcbiAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/babel-runtime/helpers/extends.js\n");

/***/ }),

/***/ "./node_modules/babel-runtime/helpers/typeof.js":
/*!******************************************************!*\
  !*** ./node_modules/babel-runtime/helpers/typeof.js ***!
  \******************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";
eval("\n\nexports.__esModule = true;\n\nvar _iterator = __webpack_require__(/*! ../core-js/symbol/iterator */ \"./node_modules/babel-runtime/core-js/symbol/iterator.js\");\n\nvar _iterator2 = _interopRequireDefault(_iterator);\n\nvar _symbol = __webpack_require__(/*! ../core-js/symbol */ \"./node_modules/babel-runtime/core-js/symbol.js\");\n\nvar _symbol2 = _interopRequireDefault(_symbol);\n\nvar _typeof = typeof _symbol2.default === \"function\" && typeof _iterator2.default === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof _symbol2.default === \"function\" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? \"symbol\" : typeof obj; };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports[\"default\"] = typeof _symbol2.default === \"function\" && _typeof(_iterator2.default) === \"symbol\" ? function (obj) {\n  return typeof obj === \"undefined\" ? \"undefined\" : _typeof(obj);\n} : function (obj) {\n  return obj && typeof _symbol2.default === \"function\" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? \"symbol\" : typeof obj === \"undefined\" ? \"undefined\" : _typeof(obj);\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3R5cGVvZi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0I7O0FBRWxCLGdCQUFnQixtQkFBTyxDQUFDLDJGQUE0Qjs7QUFFcEQ7O0FBRUEsY0FBYyxtQkFBTyxDQUFDLHlFQUFtQjs7QUFFekM7O0FBRUEsa0hBQWtILHFCQUFxQixtQkFBbUI7O0FBRTFKLHVDQUF1Qyx1Q0FBdUM7O0FBRTlFLGtCQUFlO0FBQ2Y7QUFDQSxFQUFFO0FBQ0Y7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvdHlwZW9mLmpzP2UxM2EiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbnZhciBfaXRlcmF0b3IgPSByZXF1aXJlKFwiLi4vY29yZS1qcy9zeW1ib2wvaXRlcmF0b3JcIik7XG5cbnZhciBfaXRlcmF0b3IyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaXRlcmF0b3IpO1xuXG52YXIgX3N5bWJvbCA9IHJlcXVpcmUoXCIuLi9jb3JlLWpzL3N5bWJvbFwiKTtcblxudmFyIF9zeW1ib2wyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfc3ltYm9sKTtcblxudmFyIF90eXBlb2YgPSB0eXBlb2YgX3N5bWJvbDIuZGVmYXVsdCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBfaXRlcmF0b3IyLmRlZmF1bHQgPT09IFwic3ltYm9sXCIgPyBmdW5jdGlvbiAob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9IDogZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBfc3ltYm9sMi5kZWZhdWx0ID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBfc3ltYm9sMi5kZWZhdWx0ICYmIG9iaiAhPT0gX3N5bWJvbDIuZGVmYXVsdC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZXhwb3J0cy5kZWZhdWx0ID0gdHlwZW9mIF9zeW1ib2wyLmRlZmF1bHQgPT09IFwiZnVuY3Rpb25cIiAmJiBfdHlwZW9mKF9pdGVyYXRvcjIuZGVmYXVsdCkgPT09IFwic3ltYm9sXCIgPyBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiB0eXBlb2Ygb2JqID09PSBcInVuZGVmaW5lZFwiID8gXCJ1bmRlZmluZWRcIiA6IF90eXBlb2Yob2JqKTtcbn0gOiBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiBvYmogJiYgdHlwZW9mIF9zeW1ib2wyLmRlZmF1bHQgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IF9zeW1ib2wyLmRlZmF1bHQgJiYgb2JqICE9PSBfc3ltYm9sMi5kZWZhdWx0LnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqID09PSBcInVuZGVmaW5lZFwiID8gXCJ1bmRlZmluZWRcIiA6IF90eXBlb2Yob2JqKTtcbn07Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/babel-runtime/helpers/typeof.js\n");

/***/ }),

/***/ "./node_modules/babel-runtime/node_modules/core-js/library/fn/object/assign.js":
/*!*************************************************************************************!*\
  !*** ./node_modules/babel-runtime/node_modules/core-js/library/fn/object/assign.js ***!
  \*************************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

eval("__webpack_require__(/*! ../../modules/es6.object.assign */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/es6.object.assign.js\");\nmodule.exports = __webpack_require__(/*! ../../modules/_core */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_core.js\").Object.assign;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9hc3NpZ24uanMiLCJtYXBwaW5ncyI6IkFBQUEsbUJBQU8sQ0FBQywrSEFBaUM7QUFDekMsMkpBQTZEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9mbi9vYmplY3QvYXNzaWduLmpzP2NkOGUiXSwic291cmNlc0NvbnRlbnQiOlsicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczYub2JqZWN0LmFzc2lnbicpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9tb2R1bGVzL19jb3JlJykuT2JqZWN0LmFzc2lnbjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/babel-runtime/node_modules/core-js/library/fn/object/assign.js\n");

/***/ }),

/***/ "./node_modules/babel-runtime/node_modules/core-js/library/fn/symbol/index.js":
/*!************************************************************************************!*\
  !*** ./node_modules/babel-runtime/node_modules/core-js/library/fn/symbol/index.js ***!
  \************************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

eval("__webpack_require__(/*! ../../modules/es6.symbol */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/es6.symbol.js\");\n__webpack_require__(/*! ../../modules/es6.object.to-string */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/es6.object.to-string.js\");\n__webpack_require__(/*! ../../modules/es7.symbol.async-iterator */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/es7.symbol.async-iterator.js\");\n__webpack_require__(/*! ../../modules/es7.symbol.observable */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/es7.symbol.observable.js\");\nmodule.exports = __webpack_require__(/*! ../../modules/_core */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_core.js\").Symbol;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL3N5bWJvbC9pbmRleC5qcyIsIm1hcHBpbmdzIjoiQUFBQSxtQkFBTyxDQUFDLGlIQUEwQjtBQUNsQyxtQkFBTyxDQUFDLHFJQUFvQztBQUM1QyxtQkFBTyxDQUFDLCtJQUF5QztBQUNqRCxtQkFBTyxDQUFDLHVJQUFxQztBQUM3QyxvSkFBc0QiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL3N5bWJvbC9pbmRleC5qcz8yNzA5Il0sInNvdXJjZXNDb250ZW50IjpbInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM2LnN5bWJvbCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczYub2JqZWN0LnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczcuc3ltYm9sLmFzeW5jLWl0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNy5zeW1ib2wub2JzZXJ2YWJsZScpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9tb2R1bGVzL19jb3JlJykuU3ltYm9sO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/babel-runtime/node_modules/core-js/library/fn/symbol/index.js\n");

/***/ }),

/***/ "./node_modules/babel-runtime/node_modules/core-js/library/fn/symbol/iterator.js":
/*!***************************************************************************************!*\
  !*** ./node_modules/babel-runtime/node_modules/core-js/library/fn/symbol/iterator.js ***!
  \***************************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

eval("__webpack_require__(/*! ../../modules/es6.string.iterator */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/es6.string.iterator.js\");\n__webpack_require__(/*! ../../modules/web.dom.iterable */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/web.dom.iterable.js\");\nmodule.exports = (__webpack_require__(/*! ../../modules/_wks-ext */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_wks-ext.js\").f)('iterator');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL3N5bWJvbC9pdGVyYXRvci5qcyIsIm1hcHBpbmdzIjoiQUFBQSxtQkFBTyxDQUFDLG1JQUFtQztBQUMzQyxtQkFBTyxDQUFDLDZIQUFnQztBQUN4QyxpQkFBaUIsc0lBQW1DIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9mbi9zeW1ib2wvaXRlcmF0b3IuanM/ZmU1ZiJdLCJzb3VyY2VzQ29udGVudCI6WyJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNi5zdHJpbmcuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvd2ViLmRvbS5pdGVyYWJsZScpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9tb2R1bGVzL193a3MtZXh0JykuZignaXRlcmF0b3InKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/babel-runtime/node_modules/core-js/library/fn/symbol/iterator.js\n");

/***/ }),

/***/ "./node_modules/babel-runtime/node_modules/core-js/library/modules/_a-function.js":
/*!****************************************************************************************!*\
  !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_a-function.js ***!
  \****************************************************************************************/
/***/ ((module) => {

eval("module.exports = function (it) {\n  if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n  return it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2EtZnVuY3Rpb24uanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2EtZnVuY3Rpb24uanM/YmY5OCJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAodHlwZW9mIGl0ICE9ICdmdW5jdGlvbicpIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGEgZnVuY3Rpb24hJyk7XG4gIHJldHVybiBpdDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/babel-runtime/node_modules/core-js/library/modules/_a-function.js\n");

/***/ }),

/***/ "./node_modules/babel-runtime/node_modules/core-js/library/modules/_add-to-unscopables.js":
/*!************************************************************************************************!*\
  !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_add-to-unscopables.js ***!
  \************************************************************************************************/
/***/ ((module) => {

eval("module.exports = function () { /* empty */ };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FkZC10by11bnNjb3BhYmxlcy5qcyIsIm1hcHBpbmdzIjoiQUFBQSwrQkFBK0IiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FkZC10by11bnNjb3BhYmxlcy5qcz8wNTRlIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/babel-runtime/node_modules/core-js/library/modules/_add-to-unscopables.js\n");

/***/ }),

/***/ "./node_modules/babel-runtime/node_modules/core-js/library/modules/_an-object.js":
/*!***************************************************************************************!*\
  !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_an-object.js ***!
  \***************************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

eval("var isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_is-object.js\");\nmodule.exports = function (it) {\n  if (!isObject(it)) throw TypeError(it + ' is not an object!');\n  return it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FuLW9iamVjdC5qcyIsIm1hcHBpbmdzIjoiQUFBQSxlQUFlLG1CQUFPLENBQUMscUdBQWM7QUFDckM7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FuLW9iamVjdC5qcz82YjY5Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKCFpc09iamVjdChpdCkpIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGFuIG9iamVjdCEnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/babel-runtime/node_modules/core-js/library/modules/_an-object.js\n");

/***/ }),

/***/ "./node_modules/babel-runtime/node_modules/core-js/library/modules/_array-includes.js":
/*!********************************************************************************************!*\
  !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_array-includes.js ***!
  \********************************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

eval("// false -> Array#indexOf\n// true  -> Array#includes\nvar toIObject = __webpack_require__(/*! ./_to-iobject */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_to-iobject.js\");\nvar toLength = __webpack_require__(/*! ./_to-length */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_to-length.js\");\nvar toAbsoluteIndex = __webpack_require__(/*! ./_to-absolute-index */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_to-absolute-index.js\");\nmodule.exports = function (IS_INCLUDES) {\n  return function ($this, el, fromIndex) {\n    var O = toIObject($this);\n    var length = toLength(O.length);\n    var index = toAbsoluteIndex(fromIndex, length);\n    var value;\n    // Array#includes uses SameValueZero equality algorithm\n    // eslint-disable-next-line no-self-compare\n    if (IS_INCLUDES && el != el) while (length > index) {\n      value = O[index++];\n      // eslint-disable-next-line no-self-compare\n      if (value != value) return true;\n    // Array#indexOf ignores holes, Array#includes - not\n    } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n      if (O[index] === el) return IS_INCLUDES || index || 0;\n    } return !IS_INCLUDES && -1;\n  };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FycmF5LWluY2x1ZGVzLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQSxnQkFBZ0IsbUJBQU8sQ0FBQyx1R0FBZTtBQUN2QyxlQUFlLG1CQUFPLENBQUMscUdBQWM7QUFDckMsc0JBQXNCLG1CQUFPLENBQUMscUhBQXNCO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxXQUFXLGdCQUFnQjtBQUNqQztBQUNBLE1BQU07QUFDTjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hcnJheS1pbmNsdWRlcy5qcz80YTkzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIGZhbHNlIC0+IEFycmF5I2luZGV4T2Zcbi8vIHRydWUgIC0+IEFycmF5I2luY2x1ZGVzXG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKElTX0lOQ0xVREVTKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGVsLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgTyA9IHRvSU9iamVjdCgkdGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSB0b0Fic29sdXRlSW5kZXgoZnJvbUluZGV4LCBsZW5ndGgpO1xuICAgIHZhciB2YWx1ZTtcbiAgICAvLyBBcnJheSNpbmNsdWRlcyB1c2VzIFNhbWVWYWx1ZVplcm8gZXF1YWxpdHkgYWxnb3JpdGhtXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgIGlmIChJU19JTkNMVURFUyAmJiBlbCAhPSBlbCkgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YWx1ZSA9IE9baW5kZXgrK107XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICBpZiAodmFsdWUgIT0gdmFsdWUpIHJldHVybiB0cnVlO1xuICAgIC8vIEFycmF5I2luZGV4T2YgaWdub3JlcyBob2xlcywgQXJyYXkjaW5jbHVkZXMgLSBub3RcbiAgICB9IGVsc2UgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIGlmIChJU19JTkNMVURFUyB8fCBpbmRleCBpbiBPKSB7XG4gICAgICBpZiAoT1tpbmRleF0gPT09IGVsKSByZXR1cm4gSVNfSU5DTFVERVMgfHwgaW5kZXggfHwgMDtcbiAgICB9IHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gIH07XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/babel-runtime/node_modules/core-js/library/modules/_array-includes.js\n");

/***/ }),

/***/ "./node_modules/babel-runtime/node_modules/core-js/library/modules/_cof.js":
/*!*********************************************************************************!*\
  !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_cof.js ***!
  \*********************************************************************************/
/***/ ((module) => {

eval("var toString = {}.toString;\n\nmodule.exports = function (it) {\n  return toString.call(it).slice(8, -1);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2NvZi5qcyIsIm1hcHBpbmdzIjoiQUFBQSxpQkFBaUI7O0FBRWpCO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY29mLmpzPzU0MDUiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKGl0KS5zbGljZSg4LCAtMSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/babel-runtime/node_modules/core-js/library/modules/_cof.js\n");

/***/ }),

/***/ "./node_modules/babel-runtime/node_modules/core-js/library/modules/_core.js":
/*!**********************************************************************************!*\
  !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_core.js ***!
  \**********************************************************************************/
/***/ ((module) => {

eval("var core = module.exports = { version: '2.6.12' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2NvcmUuanMiLCJtYXBwaW5ncyI6IkFBQUEsOEJBQThCO0FBQzlCLHdDQUF3QyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY29yZS5qcz9mNjFhIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBjb3JlID0gbW9kdWxlLmV4cG9ydHMgPSB7IHZlcnNpb246ICcyLjYuMTInIH07XG5pZiAodHlwZW9mIF9fZSA9PSAnbnVtYmVyJykgX19lID0gY29yZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/babel-runtime/node_modules/core-js/library/modules/_core.js\n");

/***/ }),

/***/ "./node_modules/babel-runtime/node_modules/core-js/library/modules/_ctx.js":
/*!*********************************************************************************!*\
  !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_ctx.js ***!
  \*********************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

eval("// optional / simple context binding\nvar aFunction = __webpack_require__(/*! ./_a-function */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_a-function.js\");\nmodule.exports = function (fn, that, length) {\n  aFunction(fn);\n  if (that === undefined) return fn;\n  switch (length) {\n    case 1: return function (a) {\n      return fn.call(that, a);\n    };\n    case 2: return function (a, b) {\n      return fn.call(that, a, b);\n    };\n    case 3: return function (a, b, c) {\n      return fn.call(that, a, b, c);\n    };\n  }\n  return function (/* ...args */) {\n    return fn.apply(that, arguments);\n  };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2N0eC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGdCQUFnQixtQkFBTyxDQUFDLHVHQUFlO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY3R4LmpzPzFlMmEiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gb3B0aW9uYWwgLyBzaW1wbGUgY29udGV4dCBiaW5kaW5nXG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4sIHRoYXQsIGxlbmd0aCkge1xuICBhRnVuY3Rpb24oZm4pO1xuICBpZiAodGhhdCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZm47XG4gIHN3aXRjaCAobGVuZ3RoKSB7XG4gICAgY2FzZSAxOiByZXR1cm4gZnVuY3Rpb24gKGEpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEpO1xuICAgIH07XG4gICAgY2FzZSAyOiByZXR1cm4gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEsIGIpO1xuICAgIH07XG4gICAgY2FzZSAzOiByZXR1cm4gZnVuY3Rpb24gKGEsIGIsIGMpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEsIGIsIGMpO1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uICgvKiAuLi5hcmdzICovKSB7XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoYXQsIGFyZ3VtZW50cyk7XG4gIH07XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/babel-runtime/node_modules/core-js/library/modules/_ctx.js\n");

/***/ }),

/***/ "./node_modules/babel-runtime/node_modules/core-js/library/modules/_defined.js":
/*!*************************************************************************************!*\
  !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_defined.js ***!
  \*************************************************************************************/
/***/ ((module) => {

eval("// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n  if (it == undefined) throw TypeError(\"Can't call method on  \" + it);\n  return it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2RlZmluZWQuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZGVmaW5lZC5qcz85MDNiIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIDcuMi4xIFJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgPT0gdW5kZWZpbmVkKSB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiAgXCIgKyBpdCk7XG4gIHJldHVybiBpdDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/babel-runtime/node_modules/core-js/library/modules/_defined.js\n");

/***/ }),

/***/ "./node_modules/babel-runtime/node_modules/core-js/library/modules/_descriptors.js":
/*!*****************************************************************************************!*\
  !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_descriptors.js ***!
  \*****************************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

eval("// Thank's IE8 for his funny defineProperty\nmodule.exports = !__webpack_require__(/*! ./_fails */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_fails.js\")(function () {\n  return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2Rlc2NyaXB0b3JzLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0Esa0JBQWtCLG1CQUFPLENBQUMsNkZBQVU7QUFDcEMsaUNBQWlDLFNBQVMsbUJBQW1CLGFBQWE7QUFDMUUsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZGVzY3JpcHRvcnMuanM/ODNkZCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUaGFuaydzIElFOCBmb3IgaGlzIGZ1bm55IGRlZmluZVByb3BlcnR5XG5tb2R1bGUuZXhwb3J0cyA9ICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KS5hICE9IDc7XG59KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/babel-runtime/node_modules/core-js/library/modules/_descriptors.js\n");

/***/ }),

/***/ "./node_modules/babel-runtime/node_modules/core-js/library/modules/_dom-create.js":
/*!****************************************************************************************!*\
  !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_dom-create.js ***!
  \****************************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

eval("var isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_is-object.js\");\nvar document = (__webpack_require__(/*! ./_global */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_global.js\").document);\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n  return is ? document.createElement(it) : {};\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2RvbS1jcmVhdGUuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxtQkFBTyxDQUFDLHFHQUFjO0FBQ3JDLGVBQWUsK0hBQTZCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2RvbS1jcmVhdGUuanM/Y2IxYiJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBkb2N1bWVudCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgaXMgPSBpc09iamVjdChkb2N1bWVudCkgJiYgaXNPYmplY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/babel-runtime/node_modules/core-js/library/modules/_dom-create.js\n");

/***/ }),

/***/ "./node_modules/babel-runtime/node_modules/core-js/library/modules/_enum-bug-keys.js":
/*!*******************************************************************************************!*\
  !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_enum-bug-keys.js ***!
  \*******************************************************************************************/
/***/ ((module) => {

eval("// IE 8- don't enum bug keys\nmodule.exports = (\n  'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2VudW0tYnVnLWtleXMuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2VudW0tYnVnLWtleXMuanM/OTk3YyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBJRSA4LSBkb24ndCBlbnVtIGJ1ZyBrZXlzXG5tb2R1bGUuZXhwb3J0cyA9IChcbiAgJ2NvbnN0cnVjdG9yLGhhc093blByb3BlcnR5LGlzUHJvdG90eXBlT2YscHJvcGVydHlJc0VudW1lcmFibGUsdG9Mb2NhbGVTdHJpbmcsdG9TdHJpbmcsdmFsdWVPZidcbikuc3BsaXQoJywnKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/babel-runtime/node_modules/core-js/library/modules/_enum-bug-keys.js\n");

/***/ }),

/***/ "./node_modules/babel-runtime/node_modules/core-js/library/modules/_enum-keys.js":
/*!***************************************************************************************!*\
  !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_enum-keys.js ***!
  \***************************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

eval("// all enumerable object keys, includes symbols\nvar getKeys = __webpack_require__(/*! ./_object-keys */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-keys.js\");\nvar gOPS = __webpack_require__(/*! ./_object-gops */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-gops.js\");\nvar pIE = __webpack_require__(/*! ./_object-pie */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-pie.js\");\nmodule.exports = function (it) {\n  var result = getKeys(it);\n  var getSymbols = gOPS.f;\n  if (getSymbols) {\n    var symbols = getSymbols(it);\n    var isEnum = pIE.f;\n    var i = 0;\n    var key;\n    while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n  } return result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2VudW0ta2V5cy5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyx5R0FBZ0I7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLHlHQUFnQjtBQUNuQyxVQUFVLG1CQUFPLENBQUMsdUdBQWU7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19lbnVtLWtleXMuanM/NDVlZiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBhbGwgZW51bWVyYWJsZSBvYmplY3Qga2V5cywgaW5jbHVkZXMgc3ltYm9sc1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIGdPUFMgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpO1xudmFyIHBJRSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciByZXN1bHQgPSBnZXRLZXlzKGl0KTtcbiAgdmFyIGdldFN5bWJvbHMgPSBnT1BTLmY7XG4gIGlmIChnZXRTeW1ib2xzKSB7XG4gICAgdmFyIHN5bWJvbHMgPSBnZXRTeW1ib2xzKGl0KTtcbiAgICB2YXIgaXNFbnVtID0gcElFLmY7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKHN5bWJvbHMubGVuZ3RoID4gaSkgaWYgKGlzRW51bS5jYWxsKGl0LCBrZXkgPSBzeW1ib2xzW2krK10pKSByZXN1bHQucHVzaChrZXkpO1xuICB9IHJldHVybiByZXN1bHQ7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/babel-runtime/node_modules/core-js/library/modules/_enum-keys.js\n");

/***/ }),

/***/ "./node_modules/babel-runtime/node_modules/core-js/library/modules/_export.js":
/*!************************************************************************************!*\
  !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_export.js ***!
  \************************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

eval("var global = __webpack_require__(/*! ./_global */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_global.js\");\nvar core = __webpack_require__(/*! ./_core */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_core.js\");\nvar ctx = __webpack_require__(/*! ./_ctx */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_ctx.js\");\nvar hide = __webpack_require__(/*! ./_hide */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_hide.js\");\nvar has = __webpack_require__(/*! ./_has */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_has.js\");\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n  var IS_FORCED = type & $export.F;\n  var IS_GLOBAL = type & $export.G;\n  var IS_STATIC = type & $export.S;\n  var IS_PROTO = type & $export.P;\n  var IS_BIND = type & $export.B;\n  var IS_WRAP = type & $export.W;\n  var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n  var expProto = exports[PROTOTYPE];\n  var target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE];\n  var key, own, out;\n  if (IS_GLOBAL) source = name;\n  for (key in source) {\n    // contains in native\n    own = !IS_FORCED && target && target[key] !== undefined;\n    if (own && has(exports, key)) continue;\n    // export native or passed\n    out = own ? target[key] : source[key];\n    // prevent global pollution for namespaces\n    exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]\n    // bind timers to global for call from export context\n    : IS_BIND && own ? ctx(out, global)\n    // wrap global constructors for prevent change them in library\n    : IS_WRAP && target[key] == out ? (function (C) {\n      var F = function (a, b, c) {\n        if (this instanceof C) {\n          switch (arguments.length) {\n            case 0: return new C();\n            case 1: return new C(a);\n            case 2: return new C(a, b);\n          } return new C(a, b, c);\n        } return C.apply(this, arguments);\n      };\n      F[PROTOTYPE] = C[PROTOTYPE];\n      return F;\n    // make static versions for prototype methods\n    })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n    // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%\n    if (IS_PROTO) {\n      (exports.virtual || (exports.virtual = {}))[key] = out;\n      // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%\n      if (type & $export.R && expProto && !expProto[key]) hide(expProto, key, out);\n    }\n  }\n};\n// type bitmap\n$export.F = 1;   // forced\n$export.G = 2;   // global\n$export.S = 4;   // static\n$export.P = 8;   // proto\n$export.B = 16;  // bind\n$export.W = 32;  // wrap\n$export.U = 64;  // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2V4cG9ydC5qcyIsIm1hcHBpbmdzIjoiQUFBQSxhQUFhLG1CQUFPLENBQUMsK0ZBQVc7QUFDaEMsV0FBVyxtQkFBTyxDQUFDLDJGQUFTO0FBQzVCLFVBQVUsbUJBQU8sQ0FBQyx5RkFBUTtBQUMxQixXQUFXLG1CQUFPLENBQUMsMkZBQVM7QUFDNUIsVUFBVSxtQkFBTyxDQUFDLHlGQUFRO0FBQzFCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUVBQWlFO0FBQ2pFO0FBQ0Esa0ZBQWtGO0FBQ2xGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1osVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSwrQ0FBK0M7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCLGlCQUFpQjtBQUNqQixpQkFBaUI7QUFDakIsaUJBQWlCO0FBQ2pCLGlCQUFpQjtBQUNqQixpQkFBaUI7QUFDakIsaUJBQWlCO0FBQ2pCLGlCQUFpQjtBQUNqQiIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZXhwb3J0LmpzPzgwNWMiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcblxudmFyICRleHBvcnQgPSBmdW5jdGlvbiAodHlwZSwgbmFtZSwgc291cmNlKSB7XG4gIHZhciBJU19GT1JDRUQgPSB0eXBlICYgJGV4cG9ydC5GO1xuICB2YXIgSVNfR0xPQkFMID0gdHlwZSAmICRleHBvcnQuRztcbiAgdmFyIElTX1NUQVRJQyA9IHR5cGUgJiAkZXhwb3J0LlM7XG4gIHZhciBJU19QUk9UTyA9IHR5cGUgJiAkZXhwb3J0LlA7XG4gIHZhciBJU19CSU5EID0gdHlwZSAmICRleHBvcnQuQjtcbiAgdmFyIElTX1dSQVAgPSB0eXBlICYgJGV4cG9ydC5XO1xuICB2YXIgZXhwb3J0cyA9IElTX0dMT0JBTCA/IGNvcmUgOiBjb3JlW25hbWVdIHx8IChjb3JlW25hbWVdID0ge30pO1xuICB2YXIgZXhwUHJvdG8gPSBleHBvcnRzW1BST1RPVFlQRV07XG4gIHZhciB0YXJnZXQgPSBJU19HTE9CQUwgPyBnbG9iYWwgOiBJU19TVEFUSUMgPyBnbG9iYWxbbmFtZV0gOiAoZ2xvYmFsW25hbWVdIHx8IHt9KVtQUk9UT1RZUEVdO1xuICB2YXIga2V5LCBvd24sIG91dDtcbiAgaWYgKElTX0dMT0JBTCkgc291cmNlID0gbmFtZTtcbiAgZm9yIChrZXkgaW4gc291cmNlKSB7XG4gICAgLy8gY29udGFpbnMgaW4gbmF0aXZlXG4gICAgb3duID0gIUlTX0ZPUkNFRCAmJiB0YXJnZXQgJiYgdGFyZ2V0W2tleV0gIT09IHVuZGVmaW5lZDtcbiAgICBpZiAob3duICYmIGhhcyhleHBvcnRzLCBrZXkpKSBjb250aW51ZTtcbiAgICAvLyBleHBvcnQgbmF0aXZlIG9yIHBhc3NlZFxuICAgIG91dCA9IG93biA/IHRhcmdldFtrZXldIDogc291cmNlW2tleV07XG4gICAgLy8gcHJldmVudCBnbG9iYWwgcG9sbHV0aW9uIGZvciBuYW1lc3BhY2VzXG4gICAgZXhwb3J0c1trZXldID0gSVNfR0xPQkFMICYmIHR5cGVvZiB0YXJnZXRba2V5XSAhPSAnZnVuY3Rpb24nID8gc291cmNlW2tleV1cbiAgICAvLyBiaW5kIHRpbWVycyB0byBnbG9iYWwgZm9yIGNhbGwgZnJvbSBleHBvcnQgY29udGV4dFxuICAgIDogSVNfQklORCAmJiBvd24gPyBjdHgob3V0LCBnbG9iYWwpXG4gICAgLy8gd3JhcCBnbG9iYWwgY29uc3RydWN0b3JzIGZvciBwcmV2ZW50IGNoYW5nZSB0aGVtIGluIGxpYnJhcnlcbiAgICA6IElTX1dSQVAgJiYgdGFyZ2V0W2tleV0gPT0gb3V0ID8gKGZ1bmN0aW9uIChDKSB7XG4gICAgICB2YXIgRiA9IGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgQykge1xuICAgICAgICAgIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgY2FzZSAwOiByZXR1cm4gbmV3IEMoKTtcbiAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBDKGEpO1xuICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IEMoYSwgYik7XG4gICAgICAgICAgfSByZXR1cm4gbmV3IEMoYSwgYiwgYyk7XG4gICAgICAgIH0gcmV0dXJuIEMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH07XG4gICAgICBGW1BST1RPVFlQRV0gPSBDW1BST1RPVFlQRV07XG4gICAgICByZXR1cm4gRjtcbiAgICAvLyBtYWtlIHN0YXRpYyB2ZXJzaW9ucyBmb3IgcHJvdG90eXBlIG1ldGhvZHNcbiAgICB9KShvdXQpIDogSVNfUFJPVE8gJiYgdHlwZW9mIG91dCA9PSAnZnVuY3Rpb24nID8gY3R4KEZ1bmN0aW9uLmNhbGwsIG91dCkgOiBvdXQ7XG4gICAgLy8gZXhwb3J0IHByb3RvIG1ldGhvZHMgdG8gY29yZS4lQ09OU1RSVUNUT1IlLm1ldGhvZHMuJU5BTUUlXG4gICAgaWYgKElTX1BST1RPKSB7XG4gICAgICAoZXhwb3J0cy52aXJ0dWFsIHx8IChleHBvcnRzLnZpcnR1YWwgPSB7fSkpW2tleV0gPSBvdXQ7XG4gICAgICAvLyBleHBvcnQgcHJvdG8gbWV0aG9kcyB0byBjb3JlLiVDT05TVFJVQ1RPUiUucHJvdG90eXBlLiVOQU1FJVxuICAgICAgaWYgKHR5cGUgJiAkZXhwb3J0LlIgJiYgZXhwUHJvdG8gJiYgIWV4cFByb3RvW2tleV0pIGhpZGUoZXhwUHJvdG8sIGtleSwgb3V0KTtcbiAgICB9XG4gIH1cbn07XG4vLyB0eXBlIGJpdG1hcFxuJGV4cG9ydC5GID0gMTsgICAvLyBmb3JjZWRcbiRleHBvcnQuRyA9IDI7ICAgLy8gZ2xvYmFsXG4kZXhwb3J0LlMgPSA0OyAgIC8vIHN0YXRpY1xuJGV4cG9ydC5QID0gODsgICAvLyBwcm90b1xuJGV4cG9ydC5CID0gMTY7ICAvLyBiaW5kXG4kZXhwb3J0LlcgPSAzMjsgIC8vIHdyYXBcbiRleHBvcnQuVSA9IDY0OyAgLy8gc2FmZVxuJGV4cG9ydC5SID0gMTI4OyAvLyByZWFsIHByb3RvIG1ldGhvZCBmb3IgYGxpYnJhcnlgXG5tb2R1bGUuZXhwb3J0cyA9ICRleHBvcnQ7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/babel-runtime/node_modules/core-js/library/modules/_export.js\n");

/***/ }),

/***/ "./node_modules/babel-runtime/node_modules/core-js/library/modules/_fails.js":
/*!***********************************************************************************!*\
  !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_fails.js ***!
  \***********************************************************************************/
/***/ ((module) => {

eval("module.exports = function (exec) {\n  try {\n    return !!exec();\n  } catch (e) {\n    return true;\n  }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2ZhaWxzLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2ZhaWxzLmpzPzk3ZWUiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiAhIWV4ZWMoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/babel-runtime/node_modules/core-js/library/modules/_fails.js\n");

/***/ }),

/***/ "./node_modules/babel-runtime/node_modules/core-js/library/modules/_global.js":
/*!************************************************************************************!*\
  !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_global.js ***!
  \************************************************************************************/
/***/ ((module) => {

eval("// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n  ? window : typeof self != 'undefined' && self.Math == Math ? self\n  // eslint-disable-next-line no-new-func\n  : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2dsb2JhbC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMENBQTBDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19nbG9iYWwuanM/OTVhMCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODYjaXNzdWVjb21tZW50LTExNTc1OTAyOFxudmFyIGdsb2JhbCA9IG1vZHVsZS5leHBvcnRzID0gdHlwZW9mIHdpbmRvdyAhPSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuTWF0aCA9PSBNYXRoXG4gID8gd2luZG93IDogdHlwZW9mIHNlbGYgIT0gJ3VuZGVmaW5lZCcgJiYgc2VsZi5NYXRoID09IE1hdGggPyBzZWxmXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuY1xuICA6IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5pZiAodHlwZW9mIF9fZyA9PSAnbnVtYmVyJykgX19nID0gZ2xvYmFsOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/babel-runtime/node_modules/core-js/library/modules/_global.js\n");

/***/ }),

/***/ "./node_modules/babel-runtime/node_modules/core-js/library/modules/_has.js":
/*!*********************************************************************************!*\
  !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_has.js ***!
  \*********************************************************************************/
/***/ ((module) => {

eval("var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n  return hasOwnProperty.call(it, key);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2hhcy5qcyIsIm1hcHBpbmdzIjoiQUFBQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19oYXMuanM/NTFjNSJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaGFzT3duUHJvcGVydHkgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoaXQsIGtleSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/babel-runtime/node_modules/core-js/library/modules/_has.js\n");

/***/ }),

/***/ "./node_modules/babel-runtime/node_modules/core-js/library/modules/_hide.js":
/*!**********************************************************************************!*\
  !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_hide.js ***!
  \**********************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

eval("var dP = __webpack_require__(/*! ./_object-dp */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-dp.js\");\nvar createDesc = __webpack_require__(/*! ./_property-desc */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_property-desc.js\");\nmodule.exports = __webpack_require__(/*! ./_descriptors */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_descriptors.js\") ? function (object, key, value) {\n  return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n  object[key] = value;\n  return object;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2hpZGUuanMiLCJtYXBwaW5ncyI6IkFBQUEsU0FBUyxtQkFBTyxDQUFDLHFHQUFjO0FBQy9CLGlCQUFpQixtQkFBTyxDQUFDLDZHQUFrQjtBQUMzQyxpQkFBaUIsbUJBQU8sQ0FBQyx5R0FBZ0I7QUFDekM7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19oaWRlLmpzP2MyZTAiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIGRQLmYob2JqZWN0LCBrZXksIGNyZWF0ZURlc2MoMSwgdmFsdWUpKTtcbn0gOiBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIHJldHVybiBvYmplY3Q7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/babel-runtime/node_modules/core-js/library/modules/_hide.js\n");

/***/ }),

/***/ "./node_modules/babel-runtime/node_modules/core-js/library/modules/_html.js":
/*!**********************************************************************************!*\
  !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_html.js ***!
  \**********************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

eval("var document = (__webpack_require__(/*! ./_global */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_global.js\").document);\nmodule.exports = document && document.documentElement;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2h0bWwuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSwrSEFBNkI7QUFDNUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2h0bWwuanM/N2E3NyJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZG9jdW1lbnQgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5kb2N1bWVudDtcbm1vZHVsZS5leHBvcnRzID0gZG9jdW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/babel-runtime/node_modules/core-js/library/modules/_html.js\n");

/***/ }),

/***/ "./node_modules/babel-runtime/node_modules/core-js/library/modules/_ie8-dom-define.js":
/*!********************************************************************************************!*\
  !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_ie8-dom-define.js ***!
  \********************************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

eval("module.exports = !__webpack_require__(/*! ./_descriptors */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_descriptors.js\") && !__webpack_require__(/*! ./_fails */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_fails.js\")(function () {\n  return Object.defineProperty(__webpack_require__(/*! ./_dom-create */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_dom-create.js\")('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2llOC1kb20tZGVmaW5lLmpzIiwibWFwcGluZ3MiOiJBQUFBLGtCQUFrQixtQkFBTyxDQUFDLHlHQUFnQixNQUFNLG1CQUFPLENBQUMsNkZBQVU7QUFDbEUsK0JBQStCLG1CQUFPLENBQUMsdUdBQWUsaUJBQWlCLG1CQUFtQixhQUFhO0FBQ3ZHLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2llOC1kb20tZGVmaW5lLmpzPzRmNGEiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSAhcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVxdWlyZSgnLi9fZG9tLWNyZWF0ZScpKCdkaXYnKSwgJ2EnLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KS5hICE9IDc7XG59KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/babel-runtime/node_modules/core-js/library/modules/_ie8-dom-define.js\n");

/***/ }),

/***/ "./node_modules/babel-runtime/node_modules/core-js/library/modules/_iobject.js":
/*!*************************************************************************************!*\
  !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_iobject.js ***!
  \*************************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

eval("// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = __webpack_require__(/*! ./_cof */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_cof.js\");\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n  return cof(it) == 'String' ? it.split('') : Object(it);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2lvYmplY3QuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxVQUFVLG1CQUFPLENBQUMseUZBQVE7QUFDMUI7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2lvYmplY3QuanM/M2QxNiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQgVjggc3RyaW5nc1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QoJ3onKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKSA/IE9iamVjdCA6IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gY29mKGl0KSA9PSAnU3RyaW5nJyA/IGl0LnNwbGl0KCcnKSA6IE9iamVjdChpdCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/babel-runtime/node_modules/core-js/library/modules/_iobject.js\n");

/***/ }),

/***/ "./node_modules/babel-runtime/node_modules/core-js/library/modules/_is-array.js":
/*!**************************************************************************************!*\
  !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_is-array.js ***!
  \**************************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

eval("// 7.2.2 IsArray(argument)\nvar cof = __webpack_require__(/*! ./_cof */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_cof.js\");\nmodule.exports = Array.isArray || function isArray(arg) {\n  return cof(arg) == 'Array';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2lzLWFycmF5LmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsVUFBVSxtQkFBTyxDQUFDLHlGQUFRO0FBQzFCO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXMtYXJyYXkuanM/NjU5MCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyA3LjIuMiBJc0FycmF5KGFyZ3VtZW50KVxudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xubW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIGlzQXJyYXkoYXJnKSB7XG4gIHJldHVybiBjb2YoYXJnKSA9PSAnQXJyYXknO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/babel-runtime/node_modules/core-js/library/modules/_is-array.js\n");

/***/ }),

/***/ "./node_modules/babel-runtime/node_modules/core-js/library/modules/_is-object.js":
/*!***************************************************************************************!*\
  !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_is-object.js ***!
  \***************************************************************************************/
/***/ ((module) => {

eval("module.exports = function (it) {\n  return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2lzLW9iamVjdC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2lzLW9iamVjdC5qcz9lMjNjIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiB0eXBlb2YgaXQgPT09ICdmdW5jdGlvbic7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/babel-runtime/node_modules/core-js/library/modules/_is-object.js\n");

/***/ }),

/***/ "./node_modules/babel-runtime/node_modules/core-js/library/modules/_iter-create.js":
/*!*****************************************************************************************!*\
  !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_iter-create.js ***!
  \*****************************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";
eval("\nvar create = __webpack_require__(/*! ./_object-create */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-create.js\");\nvar descriptor = __webpack_require__(/*! ./_property-desc */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_property-desc.js\");\nvar setToStringTag = __webpack_require__(/*! ./_set-to-string-tag */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_set-to-string-tag.js\");\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\n__webpack_require__(/*! ./_hide */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_hide.js\")(IteratorPrototype, __webpack_require__(/*! ./_wks */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_wks.js\")('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n  Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n  setToStringTag(Constructor, NAME + ' Iterator');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2l0ZXItY3JlYXRlLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsYUFBYSxtQkFBTyxDQUFDLDZHQUFrQjtBQUN2QyxpQkFBaUIsbUJBQU8sQ0FBQyw2R0FBa0I7QUFDM0MscUJBQXFCLG1CQUFPLENBQUMscUhBQXNCO0FBQ25EOztBQUVBO0FBQ0EsbUJBQU8sQ0FBQywyRkFBUyxxQkFBcUIsbUJBQU8sQ0FBQyx5RkFBUSw2QkFBNkIsY0FBYzs7QUFFakc7QUFDQSxzREFBc0QsMkJBQTJCO0FBQ2pGO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2l0ZXItY3JlYXRlLmpzP2RmOGYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbnZhciBkZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuXG4vLyAyNS4xLjIuMS4xICVJdGVyYXRvclByb3RvdHlwZSVbQEBpdGVyYXRvcl0oKVxucmVxdWlyZSgnLi9faGlkZScpKEl0ZXJhdG9yUHJvdG90eXBlLCByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KSB7XG4gIENvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSwgeyBuZXh0OiBkZXNjcmlwdG9yKDEsIG5leHQpIH0pO1xuICBzZXRUb1N0cmluZ1RhZyhDb25zdHJ1Y3RvciwgTkFNRSArICcgSXRlcmF0b3InKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/babel-runtime/node_modules/core-js/library/modules/_iter-create.js\n");

/***/ }),

/***/ "./node_modules/babel-runtime/node_modules/core-js/library/modules/_iter-define.js":
/*!*****************************************************************************************!*\
  !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_iter-define.js ***!
  \*****************************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";
eval("\nvar LIBRARY = __webpack_require__(/*! ./_library */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_library.js\");\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_export.js\");\nvar redefine = __webpack_require__(/*! ./_redefine */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_redefine.js\");\nvar hide = __webpack_require__(/*! ./_hide */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_hide.js\");\nvar Iterators = __webpack_require__(/*! ./_iterators */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_iterators.js\");\nvar $iterCreate = __webpack_require__(/*! ./_iter-create */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_iter-create.js\");\nvar setToStringTag = __webpack_require__(/*! ./_set-to-string-tag */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_set-to-string-tag.js\");\nvar getPrototypeOf = __webpack_require__(/*! ./_object-gpo */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-gpo.js\");\nvar ITERATOR = __webpack_require__(/*! ./_wks */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_wks.js\")('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n  $iterCreate(Constructor, NAME, next);\n  var getMethod = function (kind) {\n    if (!BUGGY && kind in proto) return proto[kind];\n    switch (kind) {\n      case KEYS: return function keys() { return new Constructor(this, kind); };\n      case VALUES: return function values() { return new Constructor(this, kind); };\n    } return function entries() { return new Constructor(this, kind); };\n  };\n  var TAG = NAME + ' Iterator';\n  var DEF_VALUES = DEFAULT == VALUES;\n  var VALUES_BUG = false;\n  var proto = Base.prototype;\n  var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n  var $default = $native || getMethod(DEFAULT);\n  var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n  var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n  var methods, key, IteratorPrototype;\n  // Fix native\n  if ($anyNative) {\n    IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n    if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n      // Set @@toStringTag to native iterators\n      setToStringTag(IteratorPrototype, TAG, true);\n      // fix for some old engines\n      if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n    }\n  }\n  // fix Array#{values, @@iterator}.name in V8 / FF\n  if (DEF_VALUES && $native && $native.name !== VALUES) {\n    VALUES_BUG = true;\n    $default = function values() { return $native.call(this); };\n  }\n  // Define iterator\n  if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n    hide(proto, ITERATOR, $default);\n  }\n  // Plug for library\n  Iterators[NAME] = $default;\n  Iterators[TAG] = returnThis;\n  if (DEFAULT) {\n    methods = {\n      values: DEF_VALUES ? $default : getMethod(VALUES),\n      keys: IS_SET ? $default : getMethod(KEYS),\n      entries: $entries\n    };\n    if (FORCED) for (key in methods) {\n      if (!(key in proto)) redefine(proto, key, methods[key]);\n    } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n  }\n  return methods;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2l0ZXItZGVmaW5lLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsY0FBYyxtQkFBTyxDQUFDLGlHQUFZO0FBQ2xDLGNBQWMsbUJBQU8sQ0FBQywrRkFBVztBQUNqQyxlQUFlLG1CQUFPLENBQUMsbUdBQWE7QUFDcEMsV0FBVyxtQkFBTyxDQUFDLDJGQUFTO0FBQzVCLGdCQUFnQixtQkFBTyxDQUFDLHFHQUFjO0FBQ3RDLGtCQUFrQixtQkFBTyxDQUFDLHlHQUFnQjtBQUMxQyxxQkFBcUIsbUJBQU8sQ0FBQyxxSEFBc0I7QUFDbkQscUJBQXFCLG1CQUFPLENBQUMsdUdBQWU7QUFDNUMsZUFBZSxtQkFBTyxDQUFDLHlGQUFRO0FBQy9CLCtDQUErQztBQUMvQztBQUNBO0FBQ0E7O0FBRUEsK0JBQStCOztBQUUvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMENBQTBDO0FBQzFDLDhDQUE4QztBQUM5QyxNQUFNLDRCQUE0QjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLG1CQUFtQjtBQUNuQztBQUNBO0FBQ0EsbUNBQW1DO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXRlci1kZWZpbmUuanM/YjMyYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgJGl0ZXJDcmVhdGUgPSByZXF1aXJlKCcuL19pdGVyLWNyZWF0ZScpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIEJVR0dZID0gIShbXS5rZXlzICYmICduZXh0JyBpbiBbXS5rZXlzKCkpOyAvLyBTYWZhcmkgaGFzIGJ1Z2d5IGl0ZXJhdG9ycyB3L28gYG5leHRgXG52YXIgRkZfSVRFUkFUT1IgPSAnQEBpdGVyYXRvcic7XG52YXIgS0VZUyA9ICdrZXlzJztcbnZhciBWQUxVRVMgPSAndmFsdWVzJztcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChCYXNlLCBOQU1FLCBDb25zdHJ1Y3RvciwgbmV4dCwgREVGQVVMVCwgSVNfU0VULCBGT1JDRUQpIHtcbiAgJGl0ZXJDcmVhdGUoQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpO1xuICB2YXIgZ2V0TWV0aG9kID0gZnVuY3Rpb24gKGtpbmQpIHtcbiAgICBpZiAoIUJVR0dZICYmIGtpbmQgaW4gcHJvdG8pIHJldHVybiBwcm90b1traW5kXTtcbiAgICBzd2l0Y2ggKGtpbmQpIHtcbiAgICAgIGNhc2UgS0VZUzogcmV0dXJuIGZ1bmN0aW9uIGtleXMoKSB7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gICAgICBjYXNlIFZBTFVFUzogcmV0dXJuIGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgICB9IHJldHVybiBmdW5jdGlvbiBlbnRyaWVzKCkgeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICB9O1xuICB2YXIgVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICB2YXIgREVGX1ZBTFVFUyA9IERFRkFVTFQgPT0gVkFMVUVTO1xuICB2YXIgVkFMVUVTX0JVRyA9IGZhbHNlO1xuICB2YXIgcHJvdG8gPSBCYXNlLnByb3RvdHlwZTtcbiAgdmFyICRuYXRpdmUgPSBwcm90b1tJVEVSQVRPUl0gfHwgcHJvdG9bRkZfSVRFUkFUT1JdIHx8IERFRkFVTFQgJiYgcHJvdG9bREVGQVVMVF07XG4gIHZhciAkZGVmYXVsdCA9ICRuYXRpdmUgfHwgZ2V0TWV0aG9kKERFRkFVTFQpO1xuICB2YXIgJGVudHJpZXMgPSBERUZBVUxUID8gIURFRl9WQUxVRVMgPyAkZGVmYXVsdCA6IGdldE1ldGhvZCgnZW50cmllcycpIDogdW5kZWZpbmVkO1xuICB2YXIgJGFueU5hdGl2ZSA9IE5BTUUgPT0gJ0FycmF5JyA/IHByb3RvLmVudHJpZXMgfHwgJG5hdGl2ZSA6ICRuYXRpdmU7XG4gIHZhciBtZXRob2RzLCBrZXksIEl0ZXJhdG9yUHJvdG90eXBlO1xuICAvLyBGaXggbmF0aXZlXG4gIGlmICgkYW55TmF0aXZlKSB7XG4gICAgSXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZigkYW55TmF0aXZlLmNhbGwobmV3IEJhc2UoKSkpO1xuICAgIGlmIChJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSAmJiBJdGVyYXRvclByb3RvdHlwZS5uZXh0KSB7XG4gICAgICAvLyBTZXQgQEB0b1N0cmluZ1RhZyB0byBuYXRpdmUgaXRlcmF0b3JzXG4gICAgICBzZXRUb1N0cmluZ1RhZyhJdGVyYXRvclByb3RvdHlwZSwgVEFHLCB0cnVlKTtcbiAgICAgIC8vIGZpeCBmb3Igc29tZSBvbGQgZW5naW5lc1xuICAgICAgaWYgKCFMSUJSQVJZICYmIHR5cGVvZiBJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0gIT0gJ2Z1bmN0aW9uJykgaGlkZShJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIHJldHVyblRoaXMpO1xuICAgIH1cbiAgfVxuICAvLyBmaXggQXJyYXkje3ZhbHVlcywgQEBpdGVyYXRvcn0ubmFtZSBpbiBWOCAvIEZGXG4gIGlmIChERUZfVkFMVUVTICYmICRuYXRpdmUgJiYgJG5hdGl2ZS5uYW1lICE9PSBWQUxVRVMpIHtcbiAgICBWQUxVRVNfQlVHID0gdHJ1ZTtcbiAgICAkZGVmYXVsdCA9IGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuICRuYXRpdmUuY2FsbCh0aGlzKTsgfTtcbiAgfVxuICAvLyBEZWZpbmUgaXRlcmF0b3JcbiAgaWYgKCghTElCUkFSWSB8fCBGT1JDRUQpICYmIChCVUdHWSB8fCBWQUxVRVNfQlVHIHx8ICFwcm90b1tJVEVSQVRPUl0pKSB7XG4gICAgaGlkZShwcm90bywgSVRFUkFUT1IsICRkZWZhdWx0KTtcbiAgfVxuICAvLyBQbHVnIGZvciBsaWJyYXJ5XG4gIEl0ZXJhdG9yc1tOQU1FXSA9ICRkZWZhdWx0O1xuICBJdGVyYXRvcnNbVEFHXSA9IHJldHVyblRoaXM7XG4gIGlmIChERUZBVUxUKSB7XG4gICAgbWV0aG9kcyA9IHtcbiAgICAgIHZhbHVlczogREVGX1ZBTFVFUyA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKFZBTFVFUyksXG4gICAgICBrZXlzOiBJU19TRVQgPyAkZGVmYXVsdCA6IGdldE1ldGhvZChLRVlTKSxcbiAgICAgIGVudHJpZXM6ICRlbnRyaWVzXG4gICAgfTtcbiAgICBpZiAoRk9SQ0VEKSBmb3IgKGtleSBpbiBtZXRob2RzKSB7XG4gICAgICBpZiAoIShrZXkgaW4gcHJvdG8pKSByZWRlZmluZShwcm90bywga2V5LCBtZXRob2RzW2tleV0pO1xuICAgIH0gZWxzZSAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChCVUdHWSB8fCBWQUxVRVNfQlVHKSwgTkFNRSwgbWV0aG9kcyk7XG4gIH1cbiAgcmV0dXJuIG1ldGhvZHM7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/babel-runtime/node_modules/core-js/library/modules/_iter-define.js\n");

/***/ }),

/***/ "./node_modules/babel-runtime/node_modules/core-js/library/modules/_iter-step.js":
/*!***************************************************************************************!*\
  !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_iter-step.js ***!
  \***************************************************************************************/
/***/ ((module) => {

eval("module.exports = function (done, value) {\n  return { value: value, done: !!done };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2l0ZXItc3RlcC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFdBQVc7QUFDWCIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXRlci1zdGVwLmpzP2IzNDciXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZG9uZSwgdmFsdWUpIHtcbiAgcmV0dXJuIHsgdmFsdWU6IHZhbHVlLCBkb25lOiAhIWRvbmUgfTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/babel-runtime/node_modules/core-js/library/modules/_iter-step.js\n");

/***/ }),

/***/ "./node_modules/babel-runtime/node_modules/core-js/library/modules/_iterators.js":
/*!***************************************************************************************!*\
  !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_iterators.js ***!
  \***************************************************************************************/
/***/ ((module) => {

eval("module.exports = {};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2l0ZXJhdG9ycy5qcyIsIm1hcHBpbmdzIjoiQUFBQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXRlcmF0b3JzLmpzPzRlMzMiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSB7fTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/babel-runtime/node_modules/core-js/library/modules/_iterators.js\n");

/***/ }),

/***/ "./node_modules/babel-runtime/node_modules/core-js/library/modules/_library.js":
/*!*************************************************************************************!*\
  !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_library.js ***!
  \*************************************************************************************/
/***/ ((module) => {

eval("module.exports = true;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2xpYnJhcnkuanMiLCJtYXBwaW5ncyI6IkFBQUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2xpYnJhcnkuanM/YTUzZSJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IHRydWU7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/babel-runtime/node_modules/core-js/library/modules/_library.js\n");

/***/ }),

/***/ "./node_modules/babel-runtime/node_modules/core-js/library/modules/_meta.js":
/*!**********************************************************************************!*\
  !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_meta.js ***!
  \**********************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

eval("var META = __webpack_require__(/*! ./_uid */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_uid.js\")('meta');\nvar isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_is-object.js\");\nvar has = __webpack_require__(/*! ./_has */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_has.js\");\nvar setDesc = (__webpack_require__(/*! ./_object-dp */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-dp.js\").f);\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n  return true;\n};\nvar FREEZE = !__webpack_require__(/*! ./_fails */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_fails.js\")(function () {\n  return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n  setDesc(it, META, { value: {\n    i: 'O' + ++id, // object ID\n    w: {}          // weak collections IDs\n  } });\n};\nvar fastKey = function (it, create) {\n  // return primitive with prefix\n  if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n  if (!has(it, META)) {\n    // can't set metadata to uncaught frozen object\n    if (!isExtensible(it)) return 'F';\n    // not necessary to add metadata\n    if (!create) return 'E';\n    // add missing metadata\n    setMeta(it);\n  // return object ID\n  } return it[META].i;\n};\nvar getWeak = function (it, create) {\n  if (!has(it, META)) {\n    // can't set metadata to uncaught frozen object\n    if (!isExtensible(it)) return true;\n    // not necessary to add metadata\n    if (!create) return false;\n    // add missing metadata\n    setMeta(it);\n  // return hash weak collections IDs\n  } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n  if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n  return it;\n};\nvar meta = module.exports = {\n  KEY: META,\n  NEED: false,\n  fastKey: fastKey,\n  getWeak: getWeak,\n  onFreeze: onFreeze\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX21ldGEuanMiLCJtYXBwaW5ncyI6IkFBQUEsV0FBVyxtQkFBTyxDQUFDLHlGQUFRO0FBQzNCLGVBQWUsbUJBQU8sQ0FBQyxxR0FBYztBQUNyQyxVQUFVLG1CQUFPLENBQUMseUZBQVE7QUFDMUIsY0FBYyw4SEFBeUI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLG1CQUFPLENBQUMsNkZBQVU7QUFDaEMsaURBQWlEO0FBQ2pELENBQUM7QUFDRDtBQUNBLHNCQUFzQjtBQUN0QjtBQUNBLG1CQUFtQjtBQUNuQixLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19tZXRhLmpzPzc4OWUiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIE1FVEEgPSByZXF1aXJlKCcuL191aWQnKSgnbWV0YScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgc2V0RGVzYyA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgaWQgPSAwO1xudmFyIGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGUgfHwgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdHJ1ZTtcbn07XG52YXIgRlJFRVpFID0gIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gaXNFeHRlbnNpYmxlKE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh7fSkpO1xufSk7XG52YXIgc2V0TWV0YSA9IGZ1bmN0aW9uIChpdCkge1xuICBzZXREZXNjKGl0LCBNRVRBLCB7IHZhbHVlOiB7XG4gICAgaTogJ08nICsgKytpZCwgLy8gb2JqZWN0IElEXG4gICAgdzoge30gICAgICAgICAgLy8gd2VhayBjb2xsZWN0aW9ucyBJRHNcbiAgfSB9KTtcbn07XG52YXIgZmFzdEtleSA9IGZ1bmN0aW9uIChpdCwgY3JlYXRlKSB7XG4gIC8vIHJldHVybiBwcmltaXRpdmUgd2l0aCBwcmVmaXhcbiAgaWYgKCFpc09iamVjdChpdCkpIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCcgPyBpdCA6ICh0eXBlb2YgaXQgPT0gJ3N0cmluZycgPyAnUycgOiAnUCcpICsgaXQ7XG4gIGlmICghaGFzKGl0LCBNRVRBKSkge1xuICAgIC8vIGNhbid0IHNldCBtZXRhZGF0YSB0byB1bmNhdWdodCBmcm96ZW4gb2JqZWN0XG4gICAgaWYgKCFpc0V4dGVuc2libGUoaXQpKSByZXR1cm4gJ0YnO1xuICAgIC8vIG5vdCBuZWNlc3NhcnkgdG8gYWRkIG1ldGFkYXRhXG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiAnRSc7XG4gICAgLy8gYWRkIG1pc3NpbmcgbWV0YWRhdGFcbiAgICBzZXRNZXRhKGl0KTtcbiAgLy8gcmV0dXJuIG9iamVjdCBJRFxuICB9IHJldHVybiBpdFtNRVRBXS5pO1xufTtcbnZhciBnZXRXZWFrID0gZnVuY3Rpb24gKGl0LCBjcmVhdGUpIHtcbiAgaWYgKCFoYXMoaXQsIE1FVEEpKSB7XG4gICAgLy8gY2FuJ3Qgc2V0IG1ldGFkYXRhIHRvIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RcbiAgICBpZiAoIWlzRXh0ZW5zaWJsZShpdCkpIHJldHVybiB0cnVlO1xuICAgIC8vIG5vdCBuZWNlc3NhcnkgdG8gYWRkIG1ldGFkYXRhXG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiBmYWxzZTtcbiAgICAvLyBhZGQgbWlzc2luZyBtZXRhZGF0YVxuICAgIHNldE1ldGEoaXQpO1xuICAvLyByZXR1cm4gaGFzaCB3ZWFrIGNvbGxlY3Rpb25zIElEc1xuICB9IHJldHVybiBpdFtNRVRBXS53O1xufTtcbi8vIGFkZCBtZXRhZGF0YSBvbiBmcmVlemUtZmFtaWx5IG1ldGhvZHMgY2FsbGluZ1xudmFyIG9uRnJlZXplID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChGUkVFWkUgJiYgbWV0YS5ORUVEICYmIGlzRXh0ZW5zaWJsZShpdCkgJiYgIWhhcyhpdCwgTUVUQSkpIHNldE1ldGEoaXQpO1xuICByZXR1cm4gaXQ7XG59O1xudmFyIG1ldGEgPSBtb2R1bGUuZXhwb3J0cyA9IHtcbiAgS0VZOiBNRVRBLFxuICBORUVEOiBmYWxzZSxcbiAgZmFzdEtleTogZmFzdEtleSxcbiAgZ2V0V2VhazogZ2V0V2VhayxcbiAgb25GcmVlemU6IG9uRnJlZXplXG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/babel-runtime/node_modules/core-js/library/modules/_meta.js\n");

/***/ }),

/***/ "./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-assign.js":
/*!*******************************************************************************************!*\
  !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-assign.js ***!
  \*******************************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";
eval("\n// 19.1.2.1 Object.assign(target, source, ...)\nvar DESCRIPTORS = __webpack_require__(/*! ./_descriptors */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_descriptors.js\");\nvar getKeys = __webpack_require__(/*! ./_object-keys */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-keys.js\");\nvar gOPS = __webpack_require__(/*! ./_object-gops */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-gops.js\");\nvar pIE = __webpack_require__(/*! ./_object-pie */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-pie.js\");\nvar toObject = __webpack_require__(/*! ./_to-object */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_to-object.js\");\nvar IObject = __webpack_require__(/*! ./_iobject */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_iobject.js\");\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || __webpack_require__(/*! ./_fails */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_fails.js\")(function () {\n  var A = {};\n  var B = {};\n  // eslint-disable-next-line no-undef\n  var S = Symbol();\n  var K = 'abcdefghijklmnopqrst';\n  A[S] = 7;\n  K.split('').forEach(function (k) { B[k] = k; });\n  return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n  var T = toObject(target);\n  var aLen = arguments.length;\n  var index = 1;\n  var getSymbols = gOPS.f;\n  var isEnum = pIE.f;\n  while (aLen > index) {\n    var S = IObject(arguments[index++]);\n    var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n    var length = keys.length;\n    var j = 0;\n    var key;\n    while (length > j) {\n      key = keys[j++];\n      if (!DESCRIPTORS || isEnum.call(S, key)) T[key] = S[key];\n    }\n  } return T;\n} : $assign;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1hc3NpZ24uanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLGtCQUFrQixtQkFBTyxDQUFDLHlHQUFnQjtBQUMxQyxjQUFjLG1CQUFPLENBQUMseUdBQWdCO0FBQ3RDLFdBQVcsbUJBQU8sQ0FBQyx5R0FBZ0I7QUFDbkMsVUFBVSxtQkFBTyxDQUFDLHVHQUFlO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxxR0FBYztBQUNyQyxjQUFjLG1CQUFPLENBQUMsaUdBQVk7QUFDbEM7O0FBRUE7QUFDQSw2QkFBNkIsbUJBQU8sQ0FBQyw2RkFBVTtBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUMsV0FBVztBQUNoRCxtQkFBbUIsc0NBQXNDO0FBQ3pELENBQUMsc0NBQXNDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixFQUFFIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtYXNzaWduLmpzPzM5ODUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gMTkuMS4yLjEgT2JqZWN0LmFzc2lnbih0YXJnZXQsIHNvdXJjZSwgLi4uKVxudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciBnT1BTID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKTtcbnZhciBwSUUgPSByZXF1aXJlKCcuL19vYmplY3QtcGllJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBJT2JqZWN0ID0gcmVxdWlyZSgnLi9faW9iamVjdCcpO1xudmFyICRhc3NpZ24gPSBPYmplY3QuYXNzaWduO1xuXG4vLyBzaG91bGQgd29yayB3aXRoIHN5bWJvbHMgYW5kIHNob3VsZCBoYXZlIGRldGVybWluaXN0aWMgcHJvcGVydHkgb3JkZXIgKFY4IGJ1Zylcbm1vZHVsZS5leHBvcnRzID0gISRhc3NpZ24gfHwgcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHZhciBBID0ge307XG4gIHZhciBCID0ge307XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICB2YXIgUyA9IFN5bWJvbCgpO1xuICB2YXIgSyA9ICdhYmNkZWZnaGlqa2xtbm9wcXJzdCc7XG4gIEFbU10gPSA3O1xuICBLLnNwbGl0KCcnKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7IEJba10gPSBrOyB9KTtcbiAgcmV0dXJuICRhc3NpZ24oe30sIEEpW1NdICE9IDcgfHwgT2JqZWN0LmtleXMoJGFzc2lnbih7fSwgQikpLmpvaW4oJycpICE9IEs7XG59KSA/IGZ1bmN0aW9uIGFzc2lnbih0YXJnZXQsIHNvdXJjZSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gIHZhciBUID0gdG9PYmplY3QodGFyZ2V0KTtcbiAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICB2YXIgaW5kZXggPSAxO1xuICB2YXIgZ2V0U3ltYm9scyA9IGdPUFMuZjtcbiAgdmFyIGlzRW51bSA9IHBJRS5mO1xuICB3aGlsZSAoYUxlbiA+IGluZGV4KSB7XG4gICAgdmFyIFMgPSBJT2JqZWN0KGFyZ3VtZW50c1tpbmRleCsrXSk7XG4gICAgdmFyIGtleXMgPSBnZXRTeW1ib2xzID8gZ2V0S2V5cyhTKS5jb25jYXQoZ2V0U3ltYm9scyhTKSkgOiBnZXRLZXlzKFMpO1xuICAgIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICB2YXIgaiA9IDA7XG4gICAgdmFyIGtleTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaikge1xuICAgICAga2V5ID0ga2V5c1tqKytdO1xuICAgICAgaWYgKCFERVNDUklQVE9SUyB8fCBpc0VudW0uY2FsbChTLCBrZXkpKSBUW2tleV0gPSBTW2tleV07XG4gICAgfVxuICB9IHJldHVybiBUO1xufSA6ICRhc3NpZ247XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-assign.js\n");

/***/ }),

/***/ "./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-create.js":
/*!*******************************************************************************************!*\
  !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-create.js ***!
  \*******************************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

eval("// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_an-object.js\");\nvar dPs = __webpack_require__(/*! ./_object-dps */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-dps.js\");\nvar enumBugKeys = __webpack_require__(/*! ./_enum-bug-keys */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_enum-bug-keys.js\");\nvar IE_PROTO = __webpack_require__(/*! ./_shared-key */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_shared-key.js\")('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n  // Thrash, waste and sodomy: IE GC bug\n  var iframe = __webpack_require__(/*! ./_dom-create */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_dom-create.js\")('iframe');\n  var i = enumBugKeys.length;\n  var lt = '<';\n  var gt = '>';\n  var iframeDocument;\n  iframe.style.display = 'none';\n  (__webpack_require__(/*! ./_html */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_html.js\").appendChild)(iframe);\n  iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n  // createDict = iframe.contentWindow.Object;\n  // html.removeChild(iframe);\n  iframeDocument = iframe.contentWindow.document;\n  iframeDocument.open();\n  iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n  iframeDocument.close();\n  createDict = iframeDocument.F;\n  while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n  return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n  var result;\n  if (O !== null) {\n    Empty[PROTOTYPE] = anObject(O);\n    result = new Empty();\n    Empty[PROTOTYPE] = null;\n    // add \"__proto__\" for Object.getPrototypeOf polyfill\n    result[IE_PROTO] = O;\n  } else result = createDict();\n  return Properties === undefined ? result : dPs(result, Properties);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1jcmVhdGUuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxlQUFlLG1CQUFPLENBQUMscUdBQWM7QUFDckMsVUFBVSxtQkFBTyxDQUFDLHVHQUFlO0FBQ2pDLGtCQUFrQixtQkFBTyxDQUFDLDZHQUFrQjtBQUM1QyxlQUFlLG1CQUFPLENBQUMsdUdBQWU7QUFDdEMsMEJBQTBCO0FBQzFCOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsbUJBQU8sQ0FBQyx1R0FBZTtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSw4SEFBOEI7QUFDaEMsOEJBQThCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWNyZWF0ZS5qcz83Mzk1Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjEuMi4yIC8gMTUuMi4zLjUgT2JqZWN0LmNyZWF0ZShPIFssIFByb3BlcnRpZXNdKVxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZFBzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwcycpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi9fZW51bS1idWcta2V5cycpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xudmFyIEVtcHR5ID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG4vLyBDcmVhdGUgb2JqZWN0IHdpdGggZmFrZSBgbnVsbGAgcHJvdG90eXBlOiB1c2UgaWZyYW1lIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgY3JlYXRlRGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gVGhyYXNoLCB3YXN0ZSBhbmQgc29kb215OiBJRSBHQyBidWdcbiAgdmFyIGlmcmFtZSA9IHJlcXVpcmUoJy4vX2RvbS1jcmVhdGUnKSgnaWZyYW1lJyk7XG4gIHZhciBpID0gZW51bUJ1Z0tleXMubGVuZ3RoO1xuICB2YXIgbHQgPSAnPCc7XG4gIHZhciBndCA9ICc+JztcbiAgdmFyIGlmcmFtZURvY3VtZW50O1xuICBpZnJhbWUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgcmVxdWlyZSgnLi9faHRtbCcpLmFwcGVuZENoaWxkKGlmcmFtZSk7XG4gIGlmcmFtZS5zcmMgPSAnamF2YXNjcmlwdDonOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNjcmlwdC11cmxcbiAgLy8gY3JlYXRlRGljdCA9IGlmcmFtZS5jb250ZW50V2luZG93Lk9iamVjdDtcbiAgLy8gaHRtbC5yZW1vdmVDaGlsZChpZnJhbWUpO1xuICBpZnJhbWVEb2N1bWVudCA9IGlmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50O1xuICBpZnJhbWVEb2N1bWVudC5vcGVuKCk7XG4gIGlmcmFtZURvY3VtZW50LndyaXRlKGx0ICsgJ3NjcmlwdCcgKyBndCArICdkb2N1bWVudC5GPU9iamVjdCcgKyBsdCArICcvc2NyaXB0JyArIGd0KTtcbiAgaWZyYW1lRG9jdW1lbnQuY2xvc2UoKTtcbiAgY3JlYXRlRGljdCA9IGlmcmFtZURvY3VtZW50LkY7XG4gIHdoaWxlIChpLS0pIGRlbGV0ZSBjcmVhdGVEaWN0W1BST1RPVFlQRV1bZW51bUJ1Z0tleXNbaV1dO1xuICByZXR1cm4gY3JlYXRlRGljdCgpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuY3JlYXRlIHx8IGZ1bmN0aW9uIGNyZWF0ZShPLCBQcm9wZXJ0aWVzKSB7XG4gIHZhciByZXN1bHQ7XG4gIGlmIChPICE9PSBudWxsKSB7XG4gICAgRW1wdHlbUFJPVE9UWVBFXSA9IGFuT2JqZWN0KE8pO1xuICAgIHJlc3VsdCA9IG5ldyBFbXB0eSgpO1xuICAgIEVtcHR5W1BST1RPVFlQRV0gPSBudWxsO1xuICAgIC8vIGFkZCBcIl9fcHJvdG9fX1wiIGZvciBPYmplY3QuZ2V0UHJvdG90eXBlT2YgcG9seWZpbGxcbiAgICByZXN1bHRbSUVfUFJPVE9dID0gTztcbiAgfSBlbHNlIHJlc3VsdCA9IGNyZWF0ZURpY3QoKTtcbiAgcmV0dXJuIFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IGRQcyhyZXN1bHQsIFByb3BlcnRpZXMpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-create.js\n");

/***/ }),

/***/ "./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-dp.js":
/*!***************************************************************************************!*\
  !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-dp.js ***!
  \***************************************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

eval("var anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_an-object.js\");\nvar IE8_DOM_DEFINE = __webpack_require__(/*! ./_ie8-dom-define */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_ie8-dom-define.js\");\nvar toPrimitive = __webpack_require__(/*! ./_to-primitive */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_to-primitive.js\");\nvar dP = Object.defineProperty;\n\nexports.f = __webpack_require__(/*! ./_descriptors */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_descriptors.js\") ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n  anObject(O);\n  P = toPrimitive(P, true);\n  anObject(Attributes);\n  if (IE8_DOM_DEFINE) try {\n    return dP(O, P, Attributes);\n  } catch (e) { /* empty */ }\n  if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n  if ('value' in Attributes) O[P] = Attributes.value;\n  return O;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1kcC5qcyIsIm1hcHBpbmdzIjoiQUFBQSxlQUFlLG1CQUFPLENBQUMscUdBQWM7QUFDckMscUJBQXFCLG1CQUFPLENBQUMsK0dBQW1CO0FBQ2hELGtCQUFrQixtQkFBTyxDQUFDLDJHQUFpQjtBQUMzQzs7QUFFQSxTQUFTLEdBQUcsbUJBQU8sQ0FBQyx5R0FBZ0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksWUFBWTtBQUNoQjtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWRwLmpzP2E5YTkiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuL19pZTgtZG9tLWRlZmluZScpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgZFAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbmV4cG9ydHMuZiA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuIGRQKE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCEnKTtcbiAgaWYgKCd2YWx1ZScgaW4gQXR0cmlidXRlcykgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gIHJldHVybiBPO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-dp.js\n");

/***/ }),

/***/ "./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-dps.js":
/*!****************************************************************************************!*\
  !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-dps.js ***!
  \****************************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

eval("var dP = __webpack_require__(/*! ./_object-dp */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-dp.js\");\nvar anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_an-object.js\");\nvar getKeys = __webpack_require__(/*! ./_object-keys */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-keys.js\");\n\nmodule.exports = __webpack_require__(/*! ./_descriptors */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_descriptors.js\") ? Object.defineProperties : function defineProperties(O, Properties) {\n  anObject(O);\n  var keys = getKeys(Properties);\n  var length = keys.length;\n  var i = 0;\n  var P;\n  while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n  return O;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1kcHMuanMiLCJtYXBwaW5ncyI6IkFBQUEsU0FBUyxtQkFBTyxDQUFDLHFHQUFjO0FBQy9CLGVBQWUsbUJBQU8sQ0FBQyxxR0FBYztBQUNyQyxjQUFjLG1CQUFPLENBQUMseUdBQWdCOztBQUV0QyxpQkFBaUIsbUJBQU8sQ0FBQyx5R0FBZ0I7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWRwcy5qcz9iMmRhIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzIDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIga2V5cyA9IGdldEtleXMoUHJvcGVydGllcyk7XG4gIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGkgPSAwO1xuICB2YXIgUDtcbiAgd2hpbGUgKGxlbmd0aCA+IGkpIGRQLmYoTywgUCA9IGtleXNbaSsrXSwgUHJvcGVydGllc1tQXSk7XG4gIHJldHVybiBPO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-dps.js\n");

/***/ }),

/***/ "./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-gopd.js":
/*!*****************************************************************************************!*\
  !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-gopd.js ***!
  \*****************************************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

eval("var pIE = __webpack_require__(/*! ./_object-pie */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-pie.js\");\nvar createDesc = __webpack_require__(/*! ./_property-desc */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_property-desc.js\");\nvar toIObject = __webpack_require__(/*! ./_to-iobject */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_to-iobject.js\");\nvar toPrimitive = __webpack_require__(/*! ./_to-primitive */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_to-primitive.js\");\nvar has = __webpack_require__(/*! ./_has */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_has.js\");\nvar IE8_DOM_DEFINE = __webpack_require__(/*! ./_ie8-dom-define */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_ie8-dom-define.js\");\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = __webpack_require__(/*! ./_descriptors */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_descriptors.js\") ? gOPD : function getOwnPropertyDescriptor(O, P) {\n  O = toIObject(O);\n  P = toPrimitive(P, true);\n  if (IE8_DOM_DEFINE) try {\n    return gOPD(O, P);\n  } catch (e) { /* empty */ }\n  if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1nb3BkLmpzIiwibWFwcGluZ3MiOiJBQUFBLFVBQVUsbUJBQU8sQ0FBQyx1R0FBZTtBQUNqQyxpQkFBaUIsbUJBQU8sQ0FBQyw2R0FBa0I7QUFDM0MsZ0JBQWdCLG1CQUFPLENBQUMsdUdBQWU7QUFDdkMsa0JBQWtCLG1CQUFPLENBQUMsMkdBQWlCO0FBQzNDLFVBQVUsbUJBQU8sQ0FBQyx5RkFBUTtBQUMxQixxQkFBcUIsbUJBQU8sQ0FBQywrR0FBbUI7QUFDaEQ7O0FBRUEsU0FBUyxHQUFHLG1CQUFPLENBQUMseUdBQWdCO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxZQUFZO0FBQ2hCO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1nb3BkLmpzP2Q4OTQiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIHBJRSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi9faWU4LWRvbS1kZWZpbmUnKTtcbnZhciBnT1BEID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuZXhwb3J0cy5mID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IGdPUEQgOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCkge1xuICBPID0gdG9JT2JqZWN0KE8pO1xuICBQID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gZ09QRChPLCBQKTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG4gIGlmIChoYXMoTywgUCkpIHJldHVybiBjcmVhdGVEZXNjKCFwSUUuZi5jYWxsKE8sIFApLCBPW1BdKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-gopd.js\n");

/***/ }),

/***/ "./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-gopn-ext.js":
/*!*********************************************************************************************!*\
  !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-gopn-ext.js ***!
  \*********************************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

eval("// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = __webpack_require__(/*! ./_to-iobject */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_to-iobject.js\");\nvar gOPN = (__webpack_require__(/*! ./_object-gopn */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-gopn.js\").f);\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n  ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n  try {\n    return gOPN(it);\n  } catch (e) {\n    return windowNames.slice();\n  }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n  return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1nb3BuLWV4dC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGdCQUFnQixtQkFBTyxDQUFDLHVHQUFlO0FBQ3ZDLFdBQVcsa0lBQTJCO0FBQ3RDLGlCQUFpQjs7QUFFakI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBLGdCQUFnQjtBQUNoQjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZ29wbi1leHQuanM/NWUwZSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBmYWxsYmFjayBmb3IgSUUxMSBidWdneSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB3aXRoIGlmcmFtZSBhbmQgd2luZG93XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmY7XG52YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxudmFyIHdpbmRvd05hbWVzID0gdHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cgJiYgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNcbiAgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3aW5kb3cpIDogW107XG5cbnZhciBnZXRXaW5kb3dOYW1lcyA9IGZ1bmN0aW9uIChpdCkge1xuICB0cnkge1xuICAgIHJldHVybiBnT1BOKGl0KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB3aW5kb3dOYW1lcy5zbGljZSgpO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCkge1xuICByZXR1cm4gd2luZG93TmFtZXMgJiYgdG9TdHJpbmcuY2FsbChpdCkgPT0gJ1tvYmplY3QgV2luZG93XScgPyBnZXRXaW5kb3dOYW1lcyhpdCkgOiBnT1BOKHRvSU9iamVjdChpdCkpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-gopn-ext.js\n");

/***/ }),

/***/ "./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-gopn.js":
/*!*****************************************************************************************!*\
  !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-gopn.js ***!
  \*****************************************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

eval("// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = __webpack_require__(/*! ./_object-keys-internal */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-keys-internal.js\");\nvar hiddenKeys = (__webpack_require__(/*! ./_enum-bug-keys */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_enum-bug-keys.js\").concat)('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n  return $keys(O, hiddenKeys);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1nb3BuLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsWUFBWSxtQkFBTyxDQUFDLDJIQUF5QjtBQUM3QyxpQkFBaUIsMklBQWtDOztBQUVuRCxTQUFTO0FBQ1Q7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWdvcG4uanM/ODUzNiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAxOS4xLjIuNyAvIDE1LjIuMy40IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKE8pXG52YXIgJGtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJykuY29uY2F0KCdsZW5ndGgnLCAncHJvdG90eXBlJyk7XG5cbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoTykge1xuICByZXR1cm4gJGtleXMoTywgaGlkZGVuS2V5cyk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-gopn.js\n");

/***/ }),

/***/ "./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-gops.js":
/*!*****************************************************************************************!*\
  !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-gops.js ***!
  \*****************************************************************************************/
/***/ ((__unused_webpack_module, exports) => {

eval("exports.f = Object.getOwnPropertySymbols;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1nb3BzLmpzIiwibWFwcGluZ3MiOiJBQUFBLFNBQVMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1nb3BzLmpzPzkwMTQiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-gops.js\n");

/***/ }),

/***/ "./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-gpo.js":
/*!****************************************************************************************!*\
  !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-gpo.js ***!
  \****************************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

eval("// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = __webpack_require__(/*! ./_has */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_has.js\");\nvar toObject = __webpack_require__(/*! ./_to-object */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_to-object.js\");\nvar IE_PROTO = __webpack_require__(/*! ./_shared-key */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_shared-key.js\")('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n  O = toObject(O);\n  if (has(O, IE_PROTO)) return O[IE_PROTO];\n  if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n    return O.constructor.prototype;\n  } return O instanceof Object ? ObjectProto : null;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1ncG8uanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxVQUFVLG1CQUFPLENBQUMseUZBQVE7QUFDMUIsZUFBZSxtQkFBTyxDQUFDLHFHQUFjO0FBQ3JDLGVBQWUsbUJBQU8sQ0FBQyx1R0FBZTtBQUN0Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZ3BvLmpzPzEwZDQiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMS4yLjkgLyAxNS4yLjMuMiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoTylcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xudmFyIE9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gKE8pIHtcbiAgTyA9IHRvT2JqZWN0KE8pO1xuICBpZiAoaGFzKE8sIElFX1BST1RPKSkgcmV0dXJuIE9bSUVfUFJPVE9dO1xuICBpZiAodHlwZW9mIE8uY29uc3RydWN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBPIGluc3RhbmNlb2YgTy5jb25zdHJ1Y3Rvcikge1xuICAgIHJldHVybiBPLmNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgfSByZXR1cm4gTyBpbnN0YW5jZW9mIE9iamVjdCA/IE9iamVjdFByb3RvIDogbnVsbDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-gpo.js\n");

/***/ }),

/***/ "./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-keys-internal.js":
/*!**************************************************************************************************!*\
  !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-keys-internal.js ***!
  \**************************************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

eval("var has = __webpack_require__(/*! ./_has */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_has.js\");\nvar toIObject = __webpack_require__(/*! ./_to-iobject */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_to-iobject.js\");\nvar arrayIndexOf = __webpack_require__(/*! ./_array-includes */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_array-includes.js\")(false);\nvar IE_PROTO = __webpack_require__(/*! ./_shared-key */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_shared-key.js\")('IE_PROTO');\n\nmodule.exports = function (object, names) {\n  var O = toIObject(object);\n  var i = 0;\n  var result = [];\n  var key;\n  for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n  // Don't enum bug & hidden keys\n  while (names.length > i) if (has(O, key = names[i++])) {\n    ~arrayIndexOf(result, key) || result.push(key);\n  }\n  return result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1rZXlzLWludGVybmFsLmpzIiwibWFwcGluZ3MiOiJBQUFBLFVBQVUsbUJBQU8sQ0FBQyx5RkFBUTtBQUMxQixnQkFBZ0IsbUJBQU8sQ0FBQyx1R0FBZTtBQUN2QyxtQkFBbUIsbUJBQU8sQ0FBQywrR0FBbUI7QUFDOUMsZUFBZSxtQkFBTyxDQUFDLHVHQUFlOztBQUV0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1rZXlzLWludGVybmFsLmpzPzU2ZTgiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBhcnJheUluZGV4T2YgPSByZXF1aXJlKCcuL19hcnJheS1pbmNsdWRlcycpKGZhbHNlKTtcbnZhciBJRV9QUk9UTyA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lcykge1xuICB2YXIgTyA9IHRvSU9iamVjdChvYmplY3QpO1xuICB2YXIgaSA9IDA7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGtleTtcbiAgZm9yIChrZXkgaW4gTykgaWYgKGtleSAhPSBJRV9QUk9UTykgaGFzKE8sIGtleSkgJiYgcmVzdWx0LnB1c2goa2V5KTtcbiAgLy8gRG9uJ3QgZW51bSBidWcgJiBoaWRkZW4ga2V5c1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkgaWYgKGhhcyhPLCBrZXkgPSBuYW1lc1tpKytdKSkge1xuICAgIH5hcnJheUluZGV4T2YocmVzdWx0LCBrZXkpIHx8IHJlc3VsdC5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-keys-internal.js\n");

/***/ }),

/***/ "./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-keys.js":
/*!*****************************************************************************************!*\
  !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-keys.js ***!
  \*****************************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

eval("// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = __webpack_require__(/*! ./_object-keys-internal */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-keys-internal.js\");\nvar enumBugKeys = __webpack_require__(/*! ./_enum-bug-keys */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_enum-bug-keys.js\");\n\nmodule.exports = Object.keys || function keys(O) {\n  return $keys(O, enumBugKeys);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1rZXlzLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsWUFBWSxtQkFBTyxDQUFDLDJIQUF5QjtBQUM3QyxrQkFBa0IsbUJBQU8sQ0FBQyw2R0FBa0I7O0FBRTVDO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWtleXMuanM/NTA0NSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAxOS4xLjIuMTQgLyAxNS4yLjMuMTQgT2JqZWN0LmtleXMoTylcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24ga2V5cyhPKSB7XG4gIHJldHVybiAka2V5cyhPLCBlbnVtQnVnS2V5cyk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-keys.js\n");

/***/ }),

/***/ "./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-pie.js":
/*!****************************************************************************************!*\
  !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-pie.js ***!
  \****************************************************************************************/
/***/ ((__unused_webpack_module, exports) => {

eval("exports.f = {}.propertyIsEnumerable;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1waWUuanMiLCJtYXBwaW5ncyI6IkFBQUEsU0FBUyxLQUFLIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtcGllLmpzPzk4ZTIiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0cy5mID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-pie.js\n");

/***/ }),

/***/ "./node_modules/babel-runtime/node_modules/core-js/library/modules/_property-desc.js":
/*!*******************************************************************************************!*\
  !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_property-desc.js ***!
  \*******************************************************************************************/
/***/ ((module) => {

eval("module.exports = function (bitmap, value) {\n  return {\n    enumerable: !(bitmap & 1),\n    configurable: !(bitmap & 2),\n    writable: !(bitmap & 4),\n    value: value\n  };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3Byb3BlcnR5LWRlc2MuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fcHJvcGVydHktZGVzYy5qcz85NzM1Il0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJpdG1hcCwgdmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBlbnVtZXJhYmxlOiAhKGJpdG1hcCAmIDEpLFxuICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSxcbiAgICB3cml0YWJsZTogIShiaXRtYXAgJiA0KSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/babel-runtime/node_modules/core-js/library/modules/_property-desc.js\n");

/***/ }),

/***/ "./node_modules/babel-runtime/node_modules/core-js/library/modules/_redefine.js":
/*!**************************************************************************************!*\
  !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_redefine.js ***!
  \**************************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

eval("module.exports = __webpack_require__(/*! ./_hide */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_hide.js\");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3JlZGVmaW5lLmpzIiwibWFwcGluZ3MiOiJBQUFBLGlJQUFtQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fcmVkZWZpbmUuanM/MmE5MCJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/babel-runtime/node_modules/core-js/library/modules/_redefine.js\n");

/***/ }),

/***/ "./node_modules/babel-runtime/node_modules/core-js/library/modules/_set-to-string-tag.js":
/*!***********************************************************************************************!*\
  !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_set-to-string-tag.js ***!
  \***********************************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

eval("var def = (__webpack_require__(/*! ./_object-dp */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-dp.js\").f);\nvar has = __webpack_require__(/*! ./_has */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_has.js\");\nvar TAG = __webpack_require__(/*! ./_wks */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_wks.js\")('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n  if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3NldC10by1zdHJpbmctdGFnLmpzIiwibWFwcGluZ3MiOiJBQUFBLFVBQVUsOEhBQXlCO0FBQ25DLFVBQVUsbUJBQU8sQ0FBQyx5RkFBUTtBQUMxQixVQUFVLG1CQUFPLENBQUMseUZBQVE7O0FBRTFCO0FBQ0EscUVBQXFFLGdDQUFnQztBQUNyRyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fc2V0LXRvLXN0cmluZy10YWcuanM/ZTNjYSJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZGVmID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBUQUcgPSByZXF1aXJlKCcuL193a3MnKSgndG9TdHJpbmdUYWcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIHRhZywgc3RhdCkge1xuICBpZiAoaXQgJiYgIWhhcyhpdCA9IHN0YXQgPyBpdCA6IGl0LnByb3RvdHlwZSwgVEFHKSkgZGVmKGl0LCBUQUcsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogdGFnIH0pO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/babel-runtime/node_modules/core-js/library/modules/_set-to-string-tag.js\n");

/***/ }),

/***/ "./node_modules/babel-runtime/node_modules/core-js/library/modules/_shared-key.js":
/*!****************************************************************************************!*\
  !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_shared-key.js ***!
  \****************************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

eval("var shared = __webpack_require__(/*! ./_shared */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_shared.js\")('keys');\nvar uid = __webpack_require__(/*! ./_uid */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_uid.js\");\nmodule.exports = function (key) {\n  return shared[key] || (shared[key] = uid(key));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3NoYXJlZC1rZXkuanMiLCJtYXBwaW5ncyI6IkFBQUEsYUFBYSxtQkFBTyxDQUFDLCtGQUFXO0FBQ2hDLFVBQVUsbUJBQU8sQ0FBQyx5RkFBUTtBQUMxQjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3NoYXJlZC1rZXkuanM/MTE1OCJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgc2hhcmVkID0gcmVxdWlyZSgnLi9fc2hhcmVkJykoJ2tleXMnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gc2hhcmVkW2tleV0gfHwgKHNoYXJlZFtrZXldID0gdWlkKGtleSkpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/babel-runtime/node_modules/core-js/library/modules/_shared-key.js\n");

/***/ }),

/***/ "./node_modules/babel-runtime/node_modules/core-js/library/modules/_shared.js":
/*!************************************************************************************!*\
  !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_shared.js ***!
  \************************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

eval("var core = __webpack_require__(/*! ./_core */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_core.js\");\nvar global = __webpack_require__(/*! ./_global */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_global.js\");\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n  return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n  version: core.version,\n  mode: __webpack_require__(/*! ./_library */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_library.js\") ? 'pure' : 'global',\n  copyright: '© 2020 Denis Pushkarev (zloirock.ru)'\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3NoYXJlZC5qcyIsIm1hcHBpbmdzIjoiQUFBQSxXQUFXLG1CQUFPLENBQUMsMkZBQVM7QUFDNUIsYUFBYSxtQkFBTyxDQUFDLCtGQUFXO0FBQ2hDO0FBQ0Esa0RBQWtEOztBQUVsRDtBQUNBLHFFQUFxRTtBQUNyRSxDQUFDO0FBQ0Q7QUFDQSxRQUFRLG1CQUFPLENBQUMsaUdBQVk7QUFDNUI7QUFDQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19zaGFyZWQuanM/ODFkZiJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBTSEFSRUQgPSAnX19jb3JlLWpzX3NoYXJlZF9fJztcbnZhciBzdG9yZSA9IGdsb2JhbFtTSEFSRURdIHx8IChnbG9iYWxbU0hBUkVEXSA9IHt9KTtcblxuKG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIHN0b3JlW2tleV0gfHwgKHN0b3JlW2tleV0gPSB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUgOiB7fSk7XG59KSgndmVyc2lvbnMnLCBbXSkucHVzaCh7XG4gIHZlcnNpb246IGNvcmUudmVyc2lvbixcbiAgbW9kZTogcmVxdWlyZSgnLi9fbGlicmFyeScpID8gJ3B1cmUnIDogJ2dsb2JhbCcsXG4gIGNvcHlyaWdodDogJ8KpIDIwMjAgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSknXG59KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/babel-runtime/node_modules/core-js/library/modules/_shared.js\n");

/***/ }),

/***/ "./node_modules/babel-runtime/node_modules/core-js/library/modules/_string-at.js":
/*!***************************************************************************************!*\
  !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_string-at.js ***!
  \***************************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

eval("var toInteger = __webpack_require__(/*! ./_to-integer */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_to-integer.js\");\nvar defined = __webpack_require__(/*! ./_defined */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_defined.js\");\n// true  -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n  return function (that, pos) {\n    var s = String(defined(that));\n    var i = toInteger(pos);\n    var l = s.length;\n    var a, b;\n    if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n    a = s.charCodeAt(i);\n    return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n      ? TO_STRING ? s.charAt(i) : a\n      : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n  };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3N0cmluZy1hdC5qcyIsIm1hcHBpbmdzIjoiQUFBQSxnQkFBZ0IsbUJBQU8sQ0FBQyx1R0FBZTtBQUN2QyxjQUFjLG1CQUFPLENBQUMsaUdBQVk7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19zdHJpbmctYXQuanM/OWE5NiJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG4vLyB0cnVlICAtPiBTdHJpbmcjYXRcbi8vIGZhbHNlIC0+IFN0cmluZyNjb2RlUG9pbnRBdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoVE9fU1RSSU5HKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGhhdCwgcG9zKSB7XG4gICAgdmFyIHMgPSBTdHJpbmcoZGVmaW5lZCh0aGF0KSk7XG4gICAgdmFyIGkgPSB0b0ludGVnZXIocG9zKTtcbiAgICB2YXIgbCA9IHMubGVuZ3RoO1xuICAgIHZhciBhLCBiO1xuICAgIGlmIChpIDwgMCB8fCBpID49IGwpIHJldHVybiBUT19TVFJJTkcgPyAnJyA6IHVuZGVmaW5lZDtcbiAgICBhID0gcy5jaGFyQ29kZUF0KGkpO1xuICAgIHJldHVybiBhIDwgMHhkODAwIHx8IGEgPiAweGRiZmYgfHwgaSArIDEgPT09IGwgfHwgKGIgPSBzLmNoYXJDb2RlQXQoaSArIDEpKSA8IDB4ZGMwMCB8fCBiID4gMHhkZmZmXG4gICAgICA/IFRPX1NUUklORyA/IHMuY2hhckF0KGkpIDogYVxuICAgICAgOiBUT19TVFJJTkcgPyBzLnNsaWNlKGksIGkgKyAyKSA6IChhIC0gMHhkODAwIDw8IDEwKSArIChiIC0gMHhkYzAwKSArIDB4MTAwMDA7XG4gIH07XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/babel-runtime/node_modules/core-js/library/modules/_string-at.js\n");

/***/ }),

/***/ "./node_modules/babel-runtime/node_modules/core-js/library/modules/_to-absolute-index.js":
/*!***********************************************************************************************!*\
  !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_to-absolute-index.js ***!
  \***********************************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

eval("var toInteger = __webpack_require__(/*! ./_to-integer */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_to-integer.js\");\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n  index = toInteger(index);\n  return index < 0 ? max(index + length, 0) : min(index, length);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLWFic29sdXRlLWluZGV4LmpzIiwibWFwcGluZ3MiOiJBQUFBLGdCQUFnQixtQkFBTyxDQUFDLHVHQUFlO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8tYWJzb2x1dGUtaW5kZXguanM/ZDZmZiJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5kZXgsIGxlbmd0aCkge1xuICBpbmRleCA9IHRvSW50ZWdlcihpbmRleCk7XG4gIHJldHVybiBpbmRleCA8IDAgPyBtYXgoaW5kZXggKyBsZW5ndGgsIDApIDogbWluKGluZGV4LCBsZW5ndGgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/babel-runtime/node_modules/core-js/library/modules/_to-absolute-index.js\n");

/***/ }),

/***/ "./node_modules/babel-runtime/node_modules/core-js/library/modules/_to-integer.js":
/*!****************************************************************************************!*\
  !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_to-integer.js ***!
  \****************************************************************************************/
/***/ ((module) => {

eval("// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLWludGVnZXIuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1pbnRlZ2VyLmpzP2QwZTYiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gNy4xLjQgVG9JbnRlZ2VyXG52YXIgY2VpbCA9IE1hdGguY2VpbDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXNOYU4oaXQgPSAraXQpID8gMCA6IChpdCA+IDAgPyBmbG9vciA6IGNlaWwpKGl0KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/babel-runtime/node_modules/core-js/library/modules/_to-integer.js\n");

/***/ }),

/***/ "./node_modules/babel-runtime/node_modules/core-js/library/modules/_to-iobject.js":
/*!****************************************************************************************!*\
  !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_to-iobject.js ***!
  \****************************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

eval("// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = __webpack_require__(/*! ./_iobject */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_iobject.js\");\nvar defined = __webpack_require__(/*! ./_defined */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_defined.js\");\nmodule.exports = function (it) {\n  return IObject(defined(it));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLWlvYmplY3QuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsaUdBQVk7QUFDbEMsY0FBYyxtQkFBTyxDQUFDLGlHQUFZO0FBQ2xDO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8taW9iamVjdC5qcz81OWE2Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIHRvIGluZGV4ZWQgb2JqZWN0LCB0b09iamVjdCB3aXRoIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgc3RyaW5nc1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0Jyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBJT2JqZWN0KGRlZmluZWQoaXQpKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/babel-runtime/node_modules/core-js/library/modules/_to-iobject.js\n");

/***/ }),

/***/ "./node_modules/babel-runtime/node_modules/core-js/library/modules/_to-length.js":
/*!***************************************************************************************!*\
  !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_to-length.js ***!
  \***************************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

eval("// 7.1.15 ToLength\nvar toInteger = __webpack_require__(/*! ./_to-integer */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_to-integer.js\");\nvar min = Math.min;\nmodule.exports = function (it) {\n  return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLWxlbmd0aC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGdCQUFnQixtQkFBTyxDQUFDLHVHQUFlO0FBQ3ZDO0FBQ0E7QUFDQSw0REFBNEQ7QUFDNUQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLWxlbmd0aC5qcz83Y2IyIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIDcuMS4xNSBUb0xlbmd0aFxudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA+IDAgPyBtaW4odG9JbnRlZ2VyKGl0KSwgMHgxZmZmZmZmZmZmZmZmZikgOiAwOyAvLyBwb3coMiwgNTMpIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/babel-runtime/node_modules/core-js/library/modules/_to-length.js\n");

/***/ }),

/***/ "./node_modules/babel-runtime/node_modules/core-js/library/modules/_to-object.js":
/*!***************************************************************************************!*\
  !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_to-object.js ***!
  \***************************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

eval("// 7.1.13 ToObject(argument)\nvar defined = __webpack_require__(/*! ./_defined */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_defined.js\");\nmodule.exports = function (it) {\n  return Object(defined(it));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLW9iamVjdC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxpR0FBWTtBQUNsQztBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLW9iamVjdC5qcz9mZDlkIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIDcuMS4xMyBUb09iamVjdChhcmd1bWVudClcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIE9iamVjdChkZWZpbmVkKGl0KSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/babel-runtime/node_modules/core-js/library/modules/_to-object.js\n");

/***/ }),

/***/ "./node_modules/babel-runtime/node_modules/core-js/library/modules/_to-primitive.js":
/*!******************************************************************************************!*\
  !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_to-primitive.js ***!
  \******************************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

eval("// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_is-object.js\");\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n  if (!isObject(it)) return it;\n  var fn, val;\n  if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n  if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n  if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n  throw TypeError(\"Can't convert object to primitive value\");\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLXByaW1pdGl2ZS5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGVBQWUsbUJBQU8sQ0FBQyxxR0FBYztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8tcHJpbWl0aXZlLmpzP2Q0M2IiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gNy4xLjEgVG9QcmltaXRpdmUoaW5wdXQgWywgUHJlZmVycmVkVHlwZV0pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbi8vIGluc3RlYWQgb2YgdGhlIEVTNiBzcGVjIHZlcnNpb24sIHdlIGRpZG4ndCBpbXBsZW1lbnQgQEB0b1ByaW1pdGl2ZSBjYXNlXG4vLyBhbmQgdGhlIHNlY29uZCBhcmd1bWVudCAtIGZsYWcgLSBwcmVmZXJyZWQgdHlwZSBpcyBhIHN0cmluZ1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIFMpIHtcbiAgaWYgKCFpc09iamVjdChpdCkpIHJldHVybiBpdDtcbiAgdmFyIGZuLCB2YWw7XG4gIGlmIChTICYmIHR5cGVvZiAoZm4gPSBpdC50b1N0cmluZykgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFsO1xuICBpZiAodHlwZW9mIChmbiA9IGl0LnZhbHVlT2YpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKCFTICYmIHR5cGVvZiAoZm4gPSBpdC50b1N0cmluZykgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFsO1xuICB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/babel-runtime/node_modules/core-js/library/modules/_to-primitive.js\n");

/***/ }),

/***/ "./node_modules/babel-runtime/node_modules/core-js/library/modules/_uid.js":
/*!*********************************************************************************!*\
  !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_uid.js ***!
  \*********************************************************************************/
/***/ ((module) => {

eval("var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3VpZC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL191aWQuanM/OTYyNCJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaWQgPSAwO1xudmFyIHB4ID0gTWF0aC5yYW5kb20oKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gJ1N5bWJvbCgnLmNvbmNhdChrZXkgPT09IHVuZGVmaW5lZCA/ICcnIDoga2V5LCAnKV8nLCAoKytpZCArIHB4KS50b1N0cmluZygzNikpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/babel-runtime/node_modules/core-js/library/modules/_uid.js\n");

/***/ }),

/***/ "./node_modules/babel-runtime/node_modules/core-js/library/modules/_wks-define.js":
/*!****************************************************************************************!*\
  !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_wks-define.js ***!
  \****************************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

eval("var global = __webpack_require__(/*! ./_global */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_global.js\");\nvar core = __webpack_require__(/*! ./_core */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_core.js\");\nvar LIBRARY = __webpack_require__(/*! ./_library */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_library.js\");\nvar wksExt = __webpack_require__(/*! ./_wks-ext */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_wks-ext.js\");\nvar defineProperty = (__webpack_require__(/*! ./_object-dp */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-dp.js\").f);\nmodule.exports = function (name) {\n  var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n  if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3drcy1kZWZpbmUuanMiLCJtYXBwaW5ncyI6IkFBQUEsYUFBYSxtQkFBTyxDQUFDLCtGQUFXO0FBQ2hDLFdBQVcsbUJBQU8sQ0FBQywyRkFBUztBQUM1QixjQUFjLG1CQUFPLENBQUMsaUdBQVk7QUFDbEMsYUFBYSxtQkFBTyxDQUFDLGlHQUFZO0FBQ2pDLHFCQUFxQiw4SEFBeUI7QUFDOUM7QUFDQSwyREFBMkQscUJBQXFCO0FBQ2hGLG1GQUFtRix1QkFBdUI7QUFDMUciLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3drcy1kZWZpbmUuanM/YzM4ZiJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBMSUJSQVJZID0gcmVxdWlyZSgnLi9fbGlicmFyeScpO1xudmFyIHdrc0V4dCA9IHJlcXVpcmUoJy4vX3drcy1leHQnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIHZhciAkU3ltYm9sID0gY29yZS5TeW1ib2wgfHwgKGNvcmUuU3ltYm9sID0gTElCUkFSWSA/IHt9IDogZ2xvYmFsLlN5bWJvbCB8fCB7fSk7XG4gIGlmIChuYW1lLmNoYXJBdCgwKSAhPSAnXycgJiYgIShuYW1lIGluICRTeW1ib2wpKSBkZWZpbmVQcm9wZXJ0eSgkU3ltYm9sLCBuYW1lLCB7IHZhbHVlOiB3a3NFeHQuZihuYW1lKSB9KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/babel-runtime/node_modules/core-js/library/modules/_wks-define.js\n");

/***/ }),

/***/ "./node_modules/babel-runtime/node_modules/core-js/library/modules/_wks-ext.js":
/*!*************************************************************************************!*\
  !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_wks-ext.js ***!
  \*************************************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

eval("exports.f = __webpack_require__(/*! ./_wks */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_wks.js\");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3drcy1leHQuanMiLCJtYXBwaW5ncyI6IkFBQUEsMEhBQTZCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL193a3MtZXh0LmpzPzJkOGYiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0cy5mID0gcmVxdWlyZSgnLi9fd2tzJyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/babel-runtime/node_modules/core-js/library/modules/_wks-ext.js\n");

/***/ }),

/***/ "./node_modules/babel-runtime/node_modules/core-js/library/modules/_wks.js":
/*!*********************************************************************************!*\
  !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_wks.js ***!
  \*********************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

eval("var store = __webpack_require__(/*! ./_shared */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_shared.js\")('wks');\nvar uid = __webpack_require__(/*! ./_uid */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_uid.js\");\nvar Symbol = (__webpack_require__(/*! ./_global */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_global.js\").Symbol);\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n  return store[name] || (store[name] =\n    USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3drcy5qcyIsIm1hcHBpbmdzIjoiQUFBQSxZQUFZLG1CQUFPLENBQUMsK0ZBQVc7QUFDL0IsVUFBVSxtQkFBTyxDQUFDLHlGQUFRO0FBQzFCLGFBQWEsNkhBQTJCO0FBQ3hDOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL193a3MuanM/Njk2YSJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgc3RvcmUgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgnd2tzJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG52YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuU3ltYm9sO1xudmFyIFVTRV9TWU1CT0wgPSB0eXBlb2YgU3ltYm9sID09ICdmdW5jdGlvbic7XG5cbnZhciAkZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgcmV0dXJuIHN0b3JlW25hbWVdIHx8IChzdG9yZVtuYW1lXSA9XG4gICAgVVNFX1NZTUJPTCAmJiBTeW1ib2xbbmFtZV0gfHwgKFVTRV9TWU1CT0wgPyBTeW1ib2wgOiB1aWQpKCdTeW1ib2wuJyArIG5hbWUpKTtcbn07XG5cbiRleHBvcnRzLnN0b3JlID0gc3RvcmU7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/babel-runtime/node_modules/core-js/library/modules/_wks.js\n");

/***/ }),

/***/ "./node_modules/babel-runtime/node_modules/core-js/library/modules/es6.array.iterator.js":
/*!***********************************************************************************************!*\
  !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/es6.array.iterator.js ***!
  \***********************************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";
eval("\nvar addToUnscopables = __webpack_require__(/*! ./_add-to-unscopables */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_add-to-unscopables.js\");\nvar step = __webpack_require__(/*! ./_iter-step */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_iter-step.js\");\nvar Iterators = __webpack_require__(/*! ./_iterators */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_iterators.js\");\nvar toIObject = __webpack_require__(/*! ./_to-iobject */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_to-iobject.js\");\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = __webpack_require__(/*! ./_iter-define */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_iter-define.js\")(Array, 'Array', function (iterated, kind) {\n  this._t = toIObject(iterated); // target\n  this._i = 0;                   // next index\n  this._k = kind;                // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n  var O = this._t;\n  var kind = this._k;\n  var index = this._i++;\n  if (!O || index >= O.length) {\n    this._t = undefined;\n    return step(1);\n  }\n  if (kind == 'keys') return step(0, index);\n  if (kind == 'values') return step(0, O[index]);\n  return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2LmFycmF5Lml0ZXJhdG9yLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsdUJBQXVCLG1CQUFPLENBQUMsdUhBQXVCO0FBQ3RELFdBQVcsbUJBQU8sQ0FBQyxxR0FBYztBQUNqQyxnQkFBZ0IsbUJBQU8sQ0FBQyxxR0FBYztBQUN0QyxnQkFBZ0IsbUJBQU8sQ0FBQyx1R0FBZTs7QUFFdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsbUJBQU8sQ0FBQyx5R0FBZ0I7QUFDekMsaUNBQWlDO0FBQ2pDLGlDQUFpQztBQUNqQyxpQ0FBaUM7QUFDakM7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5hcnJheS5pdGVyYXRvci5qcz9jNWRmIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJyk7XG52YXIgc3RlcCA9IHJlcXVpcmUoJy4vX2l0ZXItc3RlcCcpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcblxuLy8gMjIuMS4zLjQgQXJyYXkucHJvdG90eXBlLmVudHJpZXMoKVxuLy8gMjIuMS4zLjEzIEFycmF5LnByb3RvdHlwZS5rZXlzKClcbi8vIDIyLjEuMy4yOSBBcnJheS5wcm90b3R5cGUudmFsdWVzKClcbi8vIDIyLjEuMy4zMCBBcnJheS5wcm90b3R5cGVbQEBpdGVyYXRvcl0oKVxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19pdGVyLWRlZmluZScpKEFycmF5LCAnQXJyYXknLCBmdW5jdGlvbiAoaXRlcmF0ZWQsIGtpbmQpIHtcbiAgdGhpcy5fdCA9IHRvSU9iamVjdChpdGVyYXRlZCk7IC8vIHRhcmdldFxuICB0aGlzLl9pID0gMDsgICAgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuICB0aGlzLl9rID0ga2luZDsgICAgICAgICAgICAgICAgLy8ga2luZFxuLy8gMjIuMS41LjIuMSAlQXJyYXlJdGVyYXRvclByb3RvdHlwZSUubmV4dCgpXG59LCBmdW5jdGlvbiAoKSB7XG4gIHZhciBPID0gdGhpcy5fdDtcbiAgdmFyIGtpbmQgPSB0aGlzLl9rO1xuICB2YXIgaW5kZXggPSB0aGlzLl9pKys7XG4gIGlmICghTyB8fCBpbmRleCA+PSBPLmxlbmd0aCkge1xuICAgIHRoaXMuX3QgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHN0ZXAoMSk7XG4gIH1cbiAgaWYgKGtpbmQgPT0gJ2tleXMnKSByZXR1cm4gc3RlcCgwLCBpbmRleCk7XG4gIGlmIChraW5kID09ICd2YWx1ZXMnKSByZXR1cm4gc3RlcCgwLCBPW2luZGV4XSk7XG4gIHJldHVybiBzdGVwKDAsIFtpbmRleCwgT1tpbmRleF1dKTtcbn0sICd2YWx1ZXMnKTtcblxuLy8gYXJndW1lbnRzTGlzdFtAQGl0ZXJhdG9yXSBpcyAlQXJyYXlQcm90b192YWx1ZXMlICg5LjQuNC42LCA5LjQuNC43KVxuSXRlcmF0b3JzLkFyZ3VtZW50cyA9IEl0ZXJhdG9ycy5BcnJheTtcblxuYWRkVG9VbnNjb3BhYmxlcygna2V5cycpO1xuYWRkVG9VbnNjb3BhYmxlcygndmFsdWVzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCdlbnRyaWVzJyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/babel-runtime/node_modules/core-js/library/modules/es6.array.iterator.js\n");

/***/ }),

/***/ "./node_modules/babel-runtime/node_modules/core-js/library/modules/es6.object.assign.js":
/*!**********************************************************************************************!*\
  !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/es6.object.assign.js ***!
  \**********************************************************************************************/
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {

eval("// 19.1.3.1 Object.assign(target, source)\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_export.js\");\n\n$export($export.S + $export.F, 'Object', { assign: __webpack_require__(/*! ./_object-assign */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-assign.js\") });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2Lm9iamVjdC5hc3NpZ24uanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsK0ZBQVc7O0FBRWpDLDJDQUEyQyxRQUFRLG1CQUFPLENBQUMsNkdBQWtCLEdBQUciLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2Lm9iamVjdC5hc3NpZ24uanM/MTljYSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAxOS4xLjMuMSBPYmplY3QuYXNzaWduKHRhcmdldCwgc291cmNlKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYsICdPYmplY3QnLCB7IGFzc2lnbjogcmVxdWlyZSgnLi9fb2JqZWN0LWFzc2lnbicpIH0pO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/babel-runtime/node_modules/core-js/library/modules/es6.object.assign.js\n");

/***/ }),

/***/ "./node_modules/babel-runtime/node_modules/core-js/library/modules/es6.object.to-string.js":
/*!*************************************************************************************************!*\
  !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/es6.object.to-string.js ***!
  \*************************************************************************************************/
/***/ (() => {



/***/ }),

/***/ "./node_modules/babel-runtime/node_modules/core-js/library/modules/es6.string.iterator.js":
/*!************************************************************************************************!*\
  !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/es6.string.iterator.js ***!
  \************************************************************************************************/
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {

"use strict";
eval("\nvar $at = __webpack_require__(/*! ./_string-at */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_string-at.js\")(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\n__webpack_require__(/*! ./_iter-define */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_iter-define.js\")(String, 'String', function (iterated) {\n  this._t = String(iterated); // target\n  this._i = 0;                // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function () {\n  var O = this._t;\n  var index = this._i;\n  var point;\n  if (index >= O.length) return { value: undefined, done: true };\n  point = $at(O, index);\n  this._i += point.length;\n  return { value: point, done: false };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvci5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLFVBQVUsbUJBQU8sQ0FBQyxxR0FBYzs7QUFFaEM7QUFDQSxtQkFBTyxDQUFDLHlHQUFnQjtBQUN4Qiw4QkFBOEI7QUFDOUIsOEJBQThCO0FBQzlCO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQztBQUNsQztBQUNBO0FBQ0EsV0FBVztBQUNYLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvci5qcz9hZmU5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkYXQgPSByZXF1aXJlKCcuL19zdHJpbmctYXQnKSh0cnVlKTtcblxuLy8gMjEuMS4zLjI3IFN0cmluZy5wcm90b3R5cGVbQEBpdGVyYXRvcl0oKVxucmVxdWlyZSgnLi9faXRlci1kZWZpbmUnKShTdHJpbmcsICdTdHJpbmcnLCBmdW5jdGlvbiAoaXRlcmF0ZWQpIHtcbiAgdGhpcy5fdCA9IFN0cmluZyhpdGVyYXRlZCk7IC8vIHRhcmdldFxuICB0aGlzLl9pID0gMDsgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuLy8gMjEuMS41LjIuMSAlU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlLm5leHQoKVxufSwgZnVuY3Rpb24gKCkge1xuICB2YXIgTyA9IHRoaXMuX3Q7XG4gIHZhciBpbmRleCA9IHRoaXMuX2k7XG4gIHZhciBwb2ludDtcbiAgaWYgKGluZGV4ID49IE8ubGVuZ3RoKSByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XG4gIHBvaW50ID0gJGF0KE8sIGluZGV4KTtcbiAgdGhpcy5faSArPSBwb2ludC5sZW5ndGg7XG4gIHJldHVybiB7IHZhbHVlOiBwb2ludCwgZG9uZTogZmFsc2UgfTtcbn0pO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/babel-runtime/node_modules/core-js/library/modules/es6.string.iterator.js\n");

/***/ }),

/***/ "./node_modules/babel-runtime/node_modules/core-js/library/modules/es6.symbol.js":
/*!***************************************************************************************!*\
  !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/es6.symbol.js ***!
  \***************************************************************************************/
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {

"use strict";
eval("\n// ECMAScript 6 symbols shim\nvar global = __webpack_require__(/*! ./_global */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_global.js\");\nvar has = __webpack_require__(/*! ./_has */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_has.js\");\nvar DESCRIPTORS = __webpack_require__(/*! ./_descriptors */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_descriptors.js\");\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_export.js\");\nvar redefine = __webpack_require__(/*! ./_redefine */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_redefine.js\");\nvar META = (__webpack_require__(/*! ./_meta */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_meta.js\").KEY);\nvar $fails = __webpack_require__(/*! ./_fails */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_fails.js\");\nvar shared = __webpack_require__(/*! ./_shared */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_shared.js\");\nvar setToStringTag = __webpack_require__(/*! ./_set-to-string-tag */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_set-to-string-tag.js\");\nvar uid = __webpack_require__(/*! ./_uid */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_uid.js\");\nvar wks = __webpack_require__(/*! ./_wks */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_wks.js\");\nvar wksExt = __webpack_require__(/*! ./_wks-ext */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_wks-ext.js\");\nvar wksDefine = __webpack_require__(/*! ./_wks-define */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_wks-define.js\");\nvar enumKeys = __webpack_require__(/*! ./_enum-keys */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_enum-keys.js\");\nvar isArray = __webpack_require__(/*! ./_is-array */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_is-array.js\");\nvar anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_an-object.js\");\nvar isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_is-object.js\");\nvar toObject = __webpack_require__(/*! ./_to-object */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_to-object.js\");\nvar toIObject = __webpack_require__(/*! ./_to-iobject */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_to-iobject.js\");\nvar toPrimitive = __webpack_require__(/*! ./_to-primitive */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_to-primitive.js\");\nvar createDesc = __webpack_require__(/*! ./_property-desc */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_property-desc.js\");\nvar _create = __webpack_require__(/*! ./_object-create */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-create.js\");\nvar gOPNExt = __webpack_require__(/*! ./_object-gopn-ext */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-gopn-ext.js\");\nvar $GOPD = __webpack_require__(/*! ./_object-gopd */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-gopd.js\");\nvar $GOPS = __webpack_require__(/*! ./_object-gops */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-gops.js\");\nvar $DP = __webpack_require__(/*! ./_object-dp */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-dp.js\");\nvar $keys = __webpack_require__(/*! ./_object-keys */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-keys.js\");\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function' && !!$GOPS.f;\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n  return _create(dP({}, 'a', {\n    get: function () { return dP(this, 'a', { value: 7 }).a; }\n  })).a != 7;\n}) ? function (it, key, D) {\n  var protoDesc = gOPD(ObjectProto, key);\n  if (protoDesc) delete ObjectProto[key];\n  dP(it, key, D);\n  if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n  var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n  sym._k = tag;\n  return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n  return typeof it == 'symbol';\n} : function (it) {\n  return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n  if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n  anObject(it);\n  key = toPrimitive(key, true);\n  anObject(D);\n  if (has(AllSymbols, key)) {\n    if (!D.enumerable) {\n      if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n      it[HIDDEN][key] = true;\n    } else {\n      if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n      D = _create(D, { enumerable: createDesc(0, false) });\n    } return setSymbolDesc(it, key, D);\n  } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n  anObject(it);\n  var keys = enumKeys(P = toIObject(P));\n  var i = 0;\n  var l = keys.length;\n  var key;\n  while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n  return it;\n};\nvar $create = function create(it, P) {\n  return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n  var E = isEnum.call(this, key = toPrimitive(key, true));\n  if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n  return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n  it = toIObject(it);\n  key = toPrimitive(key, true);\n  if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n  var D = gOPD(it, key);\n  if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n  return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n  var names = gOPN(toIObject(it));\n  var result = [];\n  var i = 0;\n  var key;\n  while (names.length > i) {\n    if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n  } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n  var IS_OP = it === ObjectProto;\n  var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n  var result = [];\n  var i = 0;\n  var key;\n  while (names.length > i) {\n    if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n  } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n  $Symbol = function Symbol() {\n    if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n    var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n    var $set = function (value) {\n      if (this === ObjectProto) $set.call(OPSymbols, value);\n      if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n      setSymbolDesc(this, tag, createDesc(1, value));\n    };\n    if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n    return wrap(tag);\n  };\n  redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n    return this._k;\n  });\n\n  $GOPD.f = $getOwnPropertyDescriptor;\n  $DP.f = $defineProperty;\n  (__webpack_require__(/*! ./_object-gopn */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-gopn.js\").f) = gOPNExt.f = $getOwnPropertyNames;\n  (__webpack_require__(/*! ./_object-pie */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-pie.js\").f) = $propertyIsEnumerable;\n  $GOPS.f = $getOwnPropertySymbols;\n\n  if (DESCRIPTORS && !__webpack_require__(/*! ./_library */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_library.js\")) {\n    redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n  }\n\n  wksExt.f = function (name) {\n    return wrap(wks(name));\n  };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n  // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n  'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n  // 19.4.2.1 Symbol.for(key)\n  'for': function (key) {\n    return has(SymbolRegistry, key += '')\n      ? SymbolRegistry[key]\n      : SymbolRegistry[key] = $Symbol(key);\n  },\n  // 19.4.2.5 Symbol.keyFor(sym)\n  keyFor: function keyFor(sym) {\n    if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n    for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n  },\n  useSetter: function () { setter = true; },\n  useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n  // 19.1.2.2 Object.create(O [, Properties])\n  create: $create,\n  // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n  defineProperty: $defineProperty,\n  // 19.1.2.3 Object.defineProperties(O, Properties)\n  defineProperties: $defineProperties,\n  // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n  getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n  // 19.1.2.7 Object.getOwnPropertyNames(O)\n  getOwnPropertyNames: $getOwnPropertyNames,\n  // 19.1.2.8 Object.getOwnPropertySymbols(O)\n  getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\nvar FAILS_ON_PRIMITIVES = $fails(function () { $GOPS.f(1); });\n\n$export($export.S + $export.F * FAILS_ON_PRIMITIVES, 'Object', {\n  getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n    return $GOPS.f(toObject(it));\n  }\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n  var S = $Symbol();\n  // MS Edge converts symbol values to JSON as {}\n  // WebKit converts symbol values to JSON as null\n  // V8 throws on boxed symbols\n  return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n  stringify: function stringify(it) {\n    var args = [it];\n    var i = 1;\n    var replacer, $replacer;\n    while (arguments.length > i) args.push(arguments[i++]);\n    $replacer = replacer = args[1];\n    if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n    if (!isArray(replacer)) replacer = function (key, value) {\n      if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n      if (!isSymbol(value)) return value;\n    };\n    args[1] = replacer;\n    return _stringify.apply($JSON, args);\n  }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || __webpack_require__(/*! ./_hide */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_hide.js\")($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2LnN5bWJvbC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsYUFBYSxtQkFBTyxDQUFDLCtGQUFXO0FBQ2hDLFVBQVUsbUJBQU8sQ0FBQyx5RkFBUTtBQUMxQixrQkFBa0IsbUJBQU8sQ0FBQyx5R0FBZ0I7QUFDMUMsY0FBYyxtQkFBTyxDQUFDLCtGQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxtR0FBYTtBQUNwQyxXQUFXLHNIQUFzQjtBQUNqQyxhQUFhLG1CQUFPLENBQUMsNkZBQVU7QUFDL0IsYUFBYSxtQkFBTyxDQUFDLCtGQUFXO0FBQ2hDLHFCQUFxQixtQkFBTyxDQUFDLHFIQUFzQjtBQUNuRCxVQUFVLG1CQUFPLENBQUMseUZBQVE7QUFDMUIsVUFBVSxtQkFBTyxDQUFDLHlGQUFRO0FBQzFCLGFBQWEsbUJBQU8sQ0FBQyxpR0FBWTtBQUNqQyxnQkFBZ0IsbUJBQU8sQ0FBQyx1R0FBZTtBQUN2QyxlQUFlLG1CQUFPLENBQUMscUdBQWM7QUFDckMsY0FBYyxtQkFBTyxDQUFDLG1HQUFhO0FBQ25DLGVBQWUsbUJBQU8sQ0FBQyxxR0FBYztBQUNyQyxlQUFlLG1CQUFPLENBQUMscUdBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLHFHQUFjO0FBQ3JDLGdCQUFnQixtQkFBTyxDQUFDLHVHQUFlO0FBQ3ZDLGtCQUFrQixtQkFBTyxDQUFDLDJHQUFpQjtBQUMzQyxpQkFBaUIsbUJBQU8sQ0FBQyw2R0FBa0I7QUFDM0MsY0FBYyxtQkFBTyxDQUFDLDZHQUFrQjtBQUN4QyxjQUFjLG1CQUFPLENBQUMsaUhBQW9CO0FBQzFDLFlBQVksbUJBQU8sQ0FBQyx5R0FBZ0I7QUFDcEMsWUFBWSxtQkFBTyxDQUFDLHlHQUFnQjtBQUNwQyxVQUFVLG1CQUFPLENBQUMscUdBQWM7QUFDaEMsWUFBWSxtQkFBTyxDQUFDLHlHQUFnQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esc0JBQXNCO0FBQ3RCLHVCQUF1Qix1QkFBdUIsVUFBVTtBQUN4RCxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJEQUEyRDtBQUMzRDtBQUNBLE1BQU07QUFDTjtBQUNBLHVCQUF1QixrQ0FBa0M7QUFDekQsTUFBTTtBQUNOLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUVBQWlFLCtCQUErQjtBQUNoRztBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEVBQUUsa0lBQTJCO0FBQzdCLEVBQUUsZ0lBQTBCO0FBQzVCOztBQUVBLHNCQUFzQixtQkFBTyxDQUFDLGlHQUFZO0FBQzFDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsMkRBQTJELGlCQUFpQjs7QUFFNUU7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLHNCQUFzQjs7QUFFM0MscURBQXFELDRCQUE0Qjs7QUFFakY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILDJCQUEyQixnQkFBZ0I7QUFDM0MsMkJBQTJCO0FBQzNCLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQSwrQ0FBK0MsYUFBYTs7QUFFNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFEQUFxRCxNQUFNLFFBQVEsaUNBQWlDO0FBQ3BHLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5RUFBeUU7QUFDekU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0Esb0NBQW9DLG1CQUFPLENBQUMsMkZBQVM7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5zeW1ib2wuanM/Yzg3ZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBFQ01BU2NyaXB0IDYgc3ltYm9scyBzaGltXG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgTUVUQSA9IHJlcXVpcmUoJy4vX21ldGEnKS5LRVk7XG52YXIgJGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuL19zaGFyZWQnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG52YXIgd2tzID0gcmVxdWlyZSgnLi9fd2tzJyk7XG52YXIgd2tzRXh0ID0gcmVxdWlyZSgnLi9fd2tzLWV4dCcpO1xudmFyIHdrc0RlZmluZSA9IHJlcXVpcmUoJy4vX3drcy1kZWZpbmUnKTtcbnZhciBlbnVtS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0ta2V5cycpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuL19pcy1hcnJheScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG52YXIgX2NyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbnZhciBnT1BORXh0ID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4tZXh0Jyk7XG52YXIgJEdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xudmFyICRHT1BTID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKTtcbnZhciAkRFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgZ09QRCA9ICRHT1BELmY7XG52YXIgZFAgPSAkRFAuZjtcbnZhciBnT1BOID0gZ09QTkV4dC5mO1xudmFyICRTeW1ib2wgPSBnbG9iYWwuU3ltYm9sO1xudmFyICRKU09OID0gZ2xvYmFsLkpTT047XG52YXIgX3N0cmluZ2lmeSA9ICRKU09OICYmICRKU09OLnN0cmluZ2lmeTtcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcbnZhciBISURERU4gPSB3a3MoJ19oaWRkZW4nKTtcbnZhciBUT19QUklNSVRJVkUgPSB3a3MoJ3RvUHJpbWl0aXZlJyk7XG52YXIgaXNFbnVtID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG52YXIgU3ltYm9sUmVnaXN0cnkgPSBzaGFyZWQoJ3N5bWJvbC1yZWdpc3RyeScpO1xudmFyIEFsbFN5bWJvbHMgPSBzaGFyZWQoJ3N5bWJvbHMnKTtcbnZhciBPUFN5bWJvbHMgPSBzaGFyZWQoJ29wLXN5bWJvbHMnKTtcbnZhciBPYmplY3RQcm90byA9IE9iamVjdFtQUk9UT1RZUEVdO1xudmFyIFVTRV9OQVRJVkUgPSB0eXBlb2YgJFN5bWJvbCA9PSAnZnVuY3Rpb24nICYmICEhJEdPUFMuZjtcbnZhciBRT2JqZWN0ID0gZ2xvYmFsLlFPYmplY3Q7XG4vLyBEb24ndCB1c2Ugc2V0dGVycyBpbiBRdCBTY3JpcHQsIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8xNzNcbnZhciBzZXR0ZXIgPSAhUU9iamVjdCB8fCAhUU9iamVjdFtQUk9UT1RZUEVdIHx8ICFRT2JqZWN0W1BST1RPVFlQRV0uZmluZENoaWxkO1xuXG4vLyBmYWxsYmFjayBmb3Igb2xkIEFuZHJvaWQsIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvdjgvaXNzdWVzL2RldGFpbD9pZD02ODdcbnZhciBzZXRTeW1ib2xEZXNjID0gREVTQ1JJUFRPUlMgJiYgJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIF9jcmVhdGUoZFAoe30sICdhJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZFAodGhpcywgJ2EnLCB7IHZhbHVlOiA3IH0pLmE7IH1cbiAgfSkpLmEgIT0gNztcbn0pID8gZnVuY3Rpb24gKGl0LCBrZXksIEQpIHtcbiAgdmFyIHByb3RvRGVzYyA9IGdPUEQoT2JqZWN0UHJvdG8sIGtleSk7XG4gIGlmIChwcm90b0Rlc2MpIGRlbGV0ZSBPYmplY3RQcm90b1trZXldO1xuICBkUChpdCwga2V5LCBEKTtcbiAgaWYgKHByb3RvRGVzYyAmJiBpdCAhPT0gT2JqZWN0UHJvdG8pIGRQKE9iamVjdFByb3RvLCBrZXksIHByb3RvRGVzYyk7XG59IDogZFA7XG5cbnZhciB3cmFwID0gZnVuY3Rpb24gKHRhZykge1xuICB2YXIgc3ltID0gQWxsU3ltYm9sc1t0YWddID0gX2NyZWF0ZSgkU3ltYm9sW1BST1RPVFlQRV0pO1xuICBzeW0uX2sgPSB0YWc7XG4gIHJldHVybiBzeW07XG59O1xuXG52YXIgaXNTeW1ib2wgPSBVU0VfTkFUSVZFICYmIHR5cGVvZiAkU3ltYm9sLml0ZXJhdG9yID09ICdzeW1ib2wnID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCc7XG59IDogZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCBpbnN0YW5jZW9mICRTeW1ib2w7XG59O1xuXG52YXIgJGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoaXQsIGtleSwgRCkge1xuICBpZiAoaXQgPT09IE9iamVjdFByb3RvKSAkZGVmaW5lUHJvcGVydHkoT1BTeW1ib2xzLCBrZXksIEQpO1xuICBhbk9iamVjdChpdCk7XG4gIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSk7XG4gIGFuT2JqZWN0KEQpO1xuICBpZiAoaGFzKEFsbFN5bWJvbHMsIGtleSkpIHtcbiAgICBpZiAoIUQuZW51bWVyYWJsZSkge1xuICAgICAgaWYgKCFoYXMoaXQsIEhJRERFTikpIGRQKGl0LCBISURERU4sIGNyZWF0ZURlc2MoMSwge30pKTtcbiAgICAgIGl0W0hJRERFTl1ba2V5XSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChoYXMoaXQsIEhJRERFTikgJiYgaXRbSElEREVOXVtrZXldKSBpdFtISURERU5dW2tleV0gPSBmYWxzZTtcbiAgICAgIEQgPSBfY3JlYXRlKEQsIHsgZW51bWVyYWJsZTogY3JlYXRlRGVzYygwLCBmYWxzZSkgfSk7XG4gICAgfSByZXR1cm4gc2V0U3ltYm9sRGVzYyhpdCwga2V5LCBEKTtcbiAgfSByZXR1cm4gZFAoaXQsIGtleSwgRCk7XG59O1xudmFyICRkZWZpbmVQcm9wZXJ0aWVzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhpdCwgUCkge1xuICBhbk9iamVjdChpdCk7XG4gIHZhciBrZXlzID0gZW51bUtleXMoUCA9IHRvSU9iamVjdChQKSk7XG4gIHZhciBpID0gMDtcbiAgdmFyIGwgPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKGwgPiBpKSAkZGVmaW5lUHJvcGVydHkoaXQsIGtleSA9IGtleXNbaSsrXSwgUFtrZXldKTtcbiAgcmV0dXJuIGl0O1xufTtcbnZhciAkY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKGl0LCBQKSB7XG4gIHJldHVybiBQID09PSB1bmRlZmluZWQgPyBfY3JlYXRlKGl0KSA6ICRkZWZpbmVQcm9wZXJ0aWVzKF9jcmVhdGUoaXQpLCBQKTtcbn07XG52YXIgJHByb3BlcnR5SXNFbnVtZXJhYmxlID0gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoa2V5KSB7XG4gIHZhciBFID0gaXNFbnVtLmNhbGwodGhpcywga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKSk7XG4gIGlmICh0aGlzID09PSBPYmplY3RQcm90byAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhaGFzKE9QU3ltYm9scywga2V5KSkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gRSB8fCAhaGFzKHRoaXMsIGtleSkgfHwgIWhhcyhBbGxTeW1ib2xzLCBrZXkpIHx8IGhhcyh0aGlzLCBISURERU4pICYmIHRoaXNbSElEREVOXVtrZXldID8gRSA6IHRydWU7XG59O1xudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSkge1xuICBpdCA9IHRvSU9iamVjdChpdCk7XG4gIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSk7XG4gIGlmIChpdCA9PT0gT2JqZWN0UHJvdG8gJiYgaGFzKEFsbFN5bWJvbHMsIGtleSkgJiYgIWhhcyhPUFN5bWJvbHMsIGtleSkpIHJldHVybjtcbiAgdmFyIEQgPSBnT1BEKGl0LCBrZXkpO1xuICBpZiAoRCAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhKGhhcyhpdCwgSElEREVOKSAmJiBpdFtISURERU5dW2tleV0pKSBELmVudW1lcmFibGUgPSB0cnVlO1xuICByZXR1cm4gRDtcbn07XG52YXIgJGdldE93blByb3BlcnR5TmFtZXMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KSB7XG4gIHZhciBuYW1lcyA9IGdPUE4odG9JT2JqZWN0KGl0KSk7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGkgPSAwO1xuICB2YXIga2V5O1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkge1xuICAgIGlmICghaGFzKEFsbFN5bWJvbHMsIGtleSA9IG5hbWVzW2krK10pICYmIGtleSAhPSBISURERU4gJiYga2V5ICE9IE1FVEEpIHJlc3VsdC5wdXNoKGtleSk7XG4gIH0gcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgJGdldE93blByb3BlcnR5U3ltYm9scyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkge1xuICB2YXIgSVNfT1AgPSBpdCA9PT0gT2JqZWN0UHJvdG87XG4gIHZhciBuYW1lcyA9IGdPUE4oSVNfT1AgPyBPUFN5bWJvbHMgOiB0b0lPYmplY3QoaXQpKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIgaSA9IDA7XG4gIHZhciBrZXk7XG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSB7XG4gICAgaWYgKGhhcyhBbGxTeW1ib2xzLCBrZXkgPSBuYW1lc1tpKytdKSAmJiAoSVNfT1AgPyBoYXMoT2JqZWN0UHJvdG8sIGtleSkgOiB0cnVlKSkgcmVzdWx0LnB1c2goQWxsU3ltYm9sc1trZXldKTtcbiAgfSByZXR1cm4gcmVzdWx0O1xufTtcblxuLy8gMTkuNC4xLjEgU3ltYm9sKFtkZXNjcmlwdGlvbl0pXG5pZiAoIVVTRV9OQVRJVkUpIHtcbiAgJFN5bWJvbCA9IGZ1bmN0aW9uIFN5bWJvbCgpIHtcbiAgICBpZiAodGhpcyBpbnN0YW5jZW9mICRTeW1ib2wpIHRocm93IFR5cGVFcnJvcignU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yIScpO1xuICAgIHZhciB0YWcgPSB1aWQoYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpO1xuICAgIHZhciAkc2V0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBpZiAodGhpcyA9PT0gT2JqZWN0UHJvdG8pICRzZXQuY2FsbChPUFN5bWJvbHMsIHZhbHVlKTtcbiAgICAgIGlmIChoYXModGhpcywgSElEREVOKSAmJiBoYXModGhpc1tISURERU5dLCB0YWcpKSB0aGlzW0hJRERFTl1bdGFnXSA9IGZhbHNlO1xuICAgICAgc2V0U3ltYm9sRGVzYyh0aGlzLCB0YWcsIGNyZWF0ZURlc2MoMSwgdmFsdWUpKTtcbiAgICB9O1xuICAgIGlmIChERVNDUklQVE9SUyAmJiBzZXR0ZXIpIHNldFN5bWJvbERlc2MoT2JqZWN0UHJvdG8sIHRhZywgeyBjb25maWd1cmFibGU6IHRydWUsIHNldDogJHNldCB9KTtcbiAgICByZXR1cm4gd3JhcCh0YWcpO1xuICB9O1xuICByZWRlZmluZSgkU3ltYm9sW1BST1RPVFlQRV0sICd0b1N0cmluZycsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl9rO1xuICB9KTtcblxuICAkR09QRC5mID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbiAgJERQLmYgPSAkZGVmaW5lUHJvcGVydHk7XG4gIHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZiA9IGdPUE5FeHQuZiA9ICRnZXRPd25Qcm9wZXJ0eU5hbWVzO1xuICByZXF1aXJlKCcuL19vYmplY3QtcGllJykuZiA9ICRwcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiAgJEdPUFMuZiA9ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cbiAgaWYgKERFU0NSSVBUT1JTICYmICFyZXF1aXJlKCcuL19saWJyYXJ5JykpIHtcbiAgICByZWRlZmluZShPYmplY3RQcm90bywgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJywgJHByb3BlcnR5SXNFbnVtZXJhYmxlLCB0cnVlKTtcbiAgfVxuXG4gIHdrc0V4dC5mID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICByZXR1cm4gd3JhcCh3a3MobmFtZSkpO1xuICB9O1xufVxuXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCB7IFN5bWJvbDogJFN5bWJvbCB9KTtcblxuZm9yICh2YXIgZXM2U3ltYm9scyA9IChcbiAgLy8gMTkuNC4yLjIsIDE5LjQuMi4zLCAxOS40LjIuNCwgMTkuNC4yLjYsIDE5LjQuMi44LCAxOS40LjIuOSwgMTkuNC4yLjEwLCAxOS40LjIuMTEsIDE5LjQuMi4xMiwgMTkuNC4yLjEzLCAxOS40LjIuMTRcbiAgJ2hhc0luc3RhbmNlLGlzQ29uY2F0U3ByZWFkYWJsZSxpdGVyYXRvcixtYXRjaCxyZXBsYWNlLHNlYXJjaCxzcGVjaWVzLHNwbGl0LHRvUHJpbWl0aXZlLHRvU3RyaW5nVGFnLHVuc2NvcGFibGVzJ1xuKS5zcGxpdCgnLCcpLCBqID0gMDsgZXM2U3ltYm9scy5sZW5ndGggPiBqOyl3a3MoZXM2U3ltYm9sc1tqKytdKTtcblxuZm9yICh2YXIgd2VsbEtub3duU3ltYm9scyA9ICRrZXlzKHdrcy5zdG9yZSksIGsgPSAwOyB3ZWxsS25vd25TeW1ib2xzLmxlbmd0aCA+IGs7KSB3a3NEZWZpbmUod2VsbEtub3duU3ltYm9sc1trKytdKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgJ1N5bWJvbCcsIHtcbiAgLy8gMTkuNC4yLjEgU3ltYm9sLmZvcihrZXkpXG4gICdmb3InOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuIGhhcyhTeW1ib2xSZWdpc3RyeSwga2V5ICs9ICcnKVxuICAgICAgPyBTeW1ib2xSZWdpc3RyeVtrZXldXG4gICAgICA6IFN5bWJvbFJlZ2lzdHJ5W2tleV0gPSAkU3ltYm9sKGtleSk7XG4gIH0sXG4gIC8vIDE5LjQuMi41IFN5bWJvbC5rZXlGb3Ioc3ltKVxuICBrZXlGb3I6IGZ1bmN0aW9uIGtleUZvcihzeW0pIHtcbiAgICBpZiAoIWlzU3ltYm9sKHN5bSkpIHRocm93IFR5cGVFcnJvcihzeW0gKyAnIGlzIG5vdCBhIHN5bWJvbCEnKTtcbiAgICBmb3IgKHZhciBrZXkgaW4gU3ltYm9sUmVnaXN0cnkpIGlmIChTeW1ib2xSZWdpc3RyeVtrZXldID09PSBzeW0pIHJldHVybiBrZXk7XG4gIH0sXG4gIHVzZVNldHRlcjogZnVuY3Rpb24gKCkgeyBzZXR0ZXIgPSB0cnVlOyB9LFxuICB1c2VTaW1wbGU6IGZ1bmN0aW9uICgpIHsgc2V0dGVyID0gZmFsc2U7IH1cbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCAnT2JqZWN0Jywge1xuICAvLyAxOS4xLjIuMiBPYmplY3QuY3JlYXRlKE8gWywgUHJvcGVydGllc10pXG4gIGNyZWF0ZTogJGNyZWF0ZSxcbiAgLy8gMTkuMS4yLjQgT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpXG4gIGRlZmluZVByb3BlcnR5OiAkZGVmaW5lUHJvcGVydHksXG4gIC8vIDE5LjEuMi4zIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpXG4gIGRlZmluZVByb3BlcnRpZXM6ICRkZWZpbmVQcm9wZXJ0aWVzLFxuICAvLyAxOS4xLjIuNiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApXG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogJGdldE93blByb3BlcnR5RGVzY3JpcHRvcixcbiAgLy8gMTkuMS4yLjcgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoTylcbiAgZ2V0T3duUHJvcGVydHlOYW1lczogJGdldE93blByb3BlcnR5TmFtZXMsXG4gIC8vIDE5LjEuMi44IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoTylcbiAgZ2V0T3duUHJvcGVydHlTeW1ib2xzOiAkZ2V0T3duUHJvcGVydHlTeW1ib2xzXG59KTtcblxuLy8gQ2hyb21lIDM4IGFuZCAzOSBgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sc2AgZmFpbHMgb24gcHJpbWl0aXZlc1xuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzQ0M1xudmFyIEZBSUxTX09OX1BSSU1JVElWRVMgPSAkZmFpbHMoZnVuY3Rpb24gKCkgeyAkR09QUy5mKDEpOyB9KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiBGQUlMU19PTl9QUklNSVRJVkVTLCAnT2JqZWN0Jywge1xuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkge1xuICAgIHJldHVybiAkR09QUy5mKHRvT2JqZWN0KGl0KSk7XG4gIH1cbn0pO1xuXG4vLyAyNC4zLjIgSlNPTi5zdHJpbmdpZnkodmFsdWUgWywgcmVwbGFjZXIgWywgc3BhY2VdXSlcbiRKU09OICYmICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKCFVU0VfTkFUSVZFIHx8ICRmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBTID0gJFN5bWJvbCgpO1xuICAvLyBNUyBFZGdlIGNvbnZlcnRzIHN5bWJvbCB2YWx1ZXMgdG8gSlNPTiBhcyB7fVxuICAvLyBXZWJLaXQgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIG51bGxcbiAgLy8gVjggdGhyb3dzIG9uIGJveGVkIHN5bWJvbHNcbiAgcmV0dXJuIF9zdHJpbmdpZnkoW1NdKSAhPSAnW251bGxdJyB8fCBfc3RyaW5naWZ5KHsgYTogUyB9KSAhPSAne30nIHx8IF9zdHJpbmdpZnkoT2JqZWN0KFMpKSAhPSAne30nO1xufSkpLCAnSlNPTicsIHtcbiAgc3RyaW5naWZ5OiBmdW5jdGlvbiBzdHJpbmdpZnkoaXQpIHtcbiAgICB2YXIgYXJncyA9IFtpdF07XG4gICAgdmFyIGkgPSAxO1xuICAgIHZhciByZXBsYWNlciwgJHJlcGxhY2VyO1xuICAgIHdoaWxlIChhcmd1bWVudHMubGVuZ3RoID4gaSkgYXJncy5wdXNoKGFyZ3VtZW50c1tpKytdKTtcbiAgICAkcmVwbGFjZXIgPSByZXBsYWNlciA9IGFyZ3NbMV07XG4gICAgaWYgKCFpc09iamVjdChyZXBsYWNlcikgJiYgaXQgPT09IHVuZGVmaW5lZCB8fCBpc1N5bWJvbChpdCkpIHJldHVybjsgLy8gSUU4IHJldHVybnMgc3RyaW5nIG9uIHVuZGVmaW5lZFxuICAgIGlmICghaXNBcnJheShyZXBsYWNlcikpIHJlcGxhY2VyID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgIGlmICh0eXBlb2YgJHJlcGxhY2VyID09ICdmdW5jdGlvbicpIHZhbHVlID0gJHJlcGxhY2VyLmNhbGwodGhpcywga2V5LCB2YWx1ZSk7XG4gICAgICBpZiAoIWlzU3ltYm9sKHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuICAgIH07XG4gICAgYXJnc1sxXSA9IHJlcGxhY2VyO1xuICAgIHJldHVybiBfc3RyaW5naWZ5LmFwcGx5KCRKU09OLCBhcmdzKTtcbiAgfVxufSk7XG5cbi8vIDE5LjQuMy40IFN5bWJvbC5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV0oaGludClcbiRTeW1ib2xbUFJPVE9UWVBFXVtUT19QUklNSVRJVkVdIHx8IHJlcXVpcmUoJy4vX2hpZGUnKSgkU3ltYm9sW1BST1RPVFlQRV0sIFRPX1BSSU1JVElWRSwgJFN5bWJvbFtQUk9UT1RZUEVdLnZhbHVlT2YpO1xuLy8gMTkuNC4zLjUgU3ltYm9sLnByb3RvdHlwZVtAQHRvU3RyaW5nVGFnXVxuc2V0VG9TdHJpbmdUYWcoJFN5bWJvbCwgJ1N5bWJvbCcpO1xuLy8gMjAuMi4xLjkgTWF0aFtAQHRvU3RyaW5nVGFnXVxuc2V0VG9TdHJpbmdUYWcoTWF0aCwgJ01hdGgnLCB0cnVlKTtcbi8vIDI0LjMuMyBKU09OW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZyhnbG9iYWwuSlNPTiwgJ0pTT04nLCB0cnVlKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/babel-runtime/node_modules/core-js/library/modules/es6.symbol.js\n");

/***/ }),

/***/ "./node_modules/babel-runtime/node_modules/core-js/library/modules/es7.symbol.async-iterator.js":
/*!******************************************************************************************************!*\
  !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/es7.symbol.async-iterator.js ***!
  \******************************************************************************************************/
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {

eval("__webpack_require__(/*! ./_wks-define */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_wks-define.js\")('asyncIterator');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM3LnN5bWJvbC5hc3luYy1pdGVyYXRvci5qcyIsIm1hcHBpbmdzIjoiQUFBQSxtQkFBTyxDQUFDLHVHQUFlIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNy5zeW1ib2wuYXN5bmMtaXRlcmF0b3IuanM/OGE2OSJdLCJzb3VyY2VzQ29udGVudCI6WyJyZXF1aXJlKCcuL193a3MtZGVmaW5lJykoJ2FzeW5jSXRlcmF0b3InKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/babel-runtime/node_modules/core-js/library/modules/es7.symbol.async-iterator.js\n");

/***/ }),

/***/ "./node_modules/babel-runtime/node_modules/core-js/library/modules/es7.symbol.observable.js":
/*!**************************************************************************************************!*\
  !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/es7.symbol.observable.js ***!
  \**************************************************************************************************/
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {

eval("__webpack_require__(/*! ./_wks-define */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_wks-define.js\")('observable');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM3LnN5bWJvbC5vYnNlcnZhYmxlLmpzIiwibWFwcGluZ3MiOiJBQUFBLG1CQUFPLENBQUMsdUdBQWUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM3LnN5bWJvbC5vYnNlcnZhYmxlLmpzPzljYWYiXSwic291cmNlc0NvbnRlbnQiOlsicmVxdWlyZSgnLi9fd2tzLWRlZmluZScpKCdvYnNlcnZhYmxlJyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/babel-runtime/node_modules/core-js/library/modules/es7.symbol.observable.js\n");

/***/ }),

/***/ "./node_modules/babel-runtime/node_modules/core-js/library/modules/web.dom.iterable.js":
/*!*********************************************************************************************!*\
  !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/web.dom.iterable.js ***!
  \*********************************************************************************************/
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {

eval("__webpack_require__(/*! ./es6.array.iterator */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/es6.array.iterator.js\");\nvar global = __webpack_require__(/*! ./_global */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_global.js\");\nvar hide = __webpack_require__(/*! ./_hide */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_hide.js\");\nvar Iterators = __webpack_require__(/*! ./_iterators */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_iterators.js\");\nvar TO_STRING_TAG = __webpack_require__(/*! ./_wks */ \"./node_modules/babel-runtime/node_modules/core-js/library/modules/_wks.js\")('toStringTag');\n\nvar DOMIterables = ('CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,' +\n  'DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,' +\n  'MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,' +\n  'SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,' +\n  'TextTrackList,TouchList').split(',');\n\nfor (var i = 0; i < DOMIterables.length; i++) {\n  var NAME = DOMIterables[i];\n  var Collection = global[NAME];\n  var proto = Collection && Collection.prototype;\n  if (proto && !proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n  Iterators[NAME] = Iterators.Array;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvd2ViLmRvbS5pdGVyYWJsZS5qcyIsIm1hcHBpbmdzIjoiQUFBQSxtQkFBTyxDQUFDLHFIQUFzQjtBQUM5QixhQUFhLG1CQUFPLENBQUMsK0ZBQVc7QUFDaEMsV0FBVyxtQkFBTyxDQUFDLDJGQUFTO0FBQzVCLGdCQUFnQixtQkFBTyxDQUFDLHFHQUFjO0FBQ3RDLG9CQUFvQixtQkFBTyxDQUFDLHlGQUFROztBQUVwQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGdCQUFnQix5QkFBeUI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL3dlYi5kb20uaXRlcmFibGUuanM/ZjdhZSJdLCJzb3VyY2VzQ29udGVudCI6WyJyZXF1aXJlKCcuL2VzNi5hcnJheS5pdGVyYXRvcicpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgVE9fU1RSSU5HX1RBRyA9IHJlcXVpcmUoJy4vX3drcycpKCd0b1N0cmluZ1RhZycpO1xuXG52YXIgRE9NSXRlcmFibGVzID0gKCdDU1NSdWxlTGlzdCxDU1NTdHlsZURlY2xhcmF0aW9uLENTU1ZhbHVlTGlzdCxDbGllbnRSZWN0TGlzdCxET01SZWN0TGlzdCxET01TdHJpbmdMaXN0LCcgK1xuICAnRE9NVG9rZW5MaXN0LERhdGFUcmFuc2Zlckl0ZW1MaXN0LEZpbGVMaXN0LEhUTUxBbGxDb2xsZWN0aW9uLEhUTUxDb2xsZWN0aW9uLEhUTUxGb3JtRWxlbWVudCxIVE1MU2VsZWN0RWxlbWVudCwnICtcbiAgJ01lZGlhTGlzdCxNaW1lVHlwZUFycmF5LE5hbWVkTm9kZU1hcCxOb2RlTGlzdCxQYWludFJlcXVlc3RMaXN0LFBsdWdpbixQbHVnaW5BcnJheSxTVkdMZW5ndGhMaXN0LFNWR051bWJlckxpc3QsJyArXG4gICdTVkdQYXRoU2VnTGlzdCxTVkdQb2ludExpc3QsU1ZHU3RyaW5nTGlzdCxTVkdUcmFuc2Zvcm1MaXN0LFNvdXJjZUJ1ZmZlckxpc3QsU3R5bGVTaGVldExpc3QsVGV4dFRyYWNrQ3VlTGlzdCwnICtcbiAgJ1RleHRUcmFja0xpc3QsVG91Y2hMaXN0Jykuc3BsaXQoJywnKTtcblxuZm9yICh2YXIgaSA9IDA7IGkgPCBET01JdGVyYWJsZXMubGVuZ3RoOyBpKyspIHtcbiAgdmFyIE5BTUUgPSBET01JdGVyYWJsZXNbaV07XG4gIHZhciBDb2xsZWN0aW9uID0gZ2xvYmFsW05BTUVdO1xuICB2YXIgcHJvdG8gPSBDb2xsZWN0aW9uICYmIENvbGxlY3Rpb24ucHJvdG90eXBlO1xuICBpZiAocHJvdG8gJiYgIXByb3RvW1RPX1NUUklOR19UQUddKSBoaWRlKHByb3RvLCBUT19TVFJJTkdfVEFHLCBOQU1FKTtcbiAgSXRlcmF0b3JzW05BTUVdID0gSXRlcmF0b3JzLkFycmF5O1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/babel-runtime/node_modules/core-js/library/modules/web.dom.iterable.js\n");

/***/ }),

/***/ "./node_modules/body-scroll-lock/lib/bodyScrollLock.min.js":
/*!*****************************************************************!*\
  !*** ./node_modules/body-scroll-lock/lib/bodyScrollLock.min.js ***!
  \*****************************************************************/
/***/ (function(module, exports) {

eval("var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!function(e,t){if(true)!(__WEBPACK_AMD_DEFINE_ARRAY__ = [exports], __WEBPACK_AMD_DEFINE_FACTORY__ = (t),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));else { var o; }}(this,function(exports){\"use strict\";function i(e){if(Array.isArray(e)){for(var t=0,o=Array(e.length);t<e.length;t++)o[t]=e[t];return o}return Array.from(e)}Object.defineProperty(exports,\"__esModule\",{value:!0});var l=!1;if(\"undefined\"!=typeof window){var e={get passive(){l=!0}};window.addEventListener(\"testPassive\",null,e),window.removeEventListener(\"testPassive\",null,e)}function d(t){return u.some(function(e){return!(!e.options.allowTouchMove||!e.options.allowTouchMove(t))})}function c(e){var t=e||window.event;return!!d(t.target)||(1<t.touches.length||(t.preventDefault&&t.preventDefault(),!1))}function o(){setTimeout(function(){void 0!==m&&(document.body.style.paddingRight=m,m=void 0),void 0!==f&&(document.body.style.overflow=f,f=void 0)})}var a=\"undefined\"!=typeof window&&window.navigator&&window.navigator.platform&&(/iP(ad|hone|od)/.test(window.navigator.platform)||\"MacIntel\"===window.navigator.platform&&1<window.navigator.maxTouchPoints),u=[],s=!1,v=-1,f=void 0,m=void 0;exports.disableBodyScroll=function(r,e){if(a){if(!r)return void console.error(\"disableBodyScroll unsuccessful - targetElement must be provided when calling disableBodyScroll on IOS devices.\");if(r&&!u.some(function(e){return e.targetElement===r})){var t={targetElement:r,options:e||{}};u=[].concat(i(u),[t]),r.ontouchstart=function(e){1===e.targetTouches.length&&(v=e.targetTouches[0].clientY)},r.ontouchmove=function(e){var t,o,n,i;1===e.targetTouches.length&&(o=r,i=(t=e).targetTouches[0].clientY-v,d(t.target)||(o&&0===o.scrollTop&&0<i||(n=o)&&n.scrollHeight-n.scrollTop<=n.clientHeight&&i<0?c(t):t.stopPropagation()))},s||(document.addEventListener(\"touchmove\",c,l?{passive:!1}:void 0),s=!0)}}else{n=e,setTimeout(function(){if(void 0===m){var e=!!n&&!0===n.reserveScrollBarGap,t=window.innerWidth-document.documentElement.clientWidth;e&&0<t&&(m=document.body.style.paddingRight,document.body.style.paddingRight=t+\"px\")}void 0===f&&(f=document.body.style.overflow,document.body.style.overflow=\"hidden\")});var o={targetElement:r,options:e||{}};u=[].concat(i(u),[o])}var n},exports.clearAllBodyScrollLocks=function(){a?(u.forEach(function(e){e.targetElement.ontouchstart=null,e.targetElement.ontouchmove=null}),s&&(document.removeEventListener(\"touchmove\",c,l?{passive:!1}:void 0),s=!1),u=[],v=-1):(o(),u=[])},exports.enableBodyScroll=function(t){if(a){if(!t)return void console.error(\"enableBodyScroll unsuccessful - targetElement must be provided when calling enableBodyScroll on IOS devices.\");t.ontouchstart=null,t.ontouchmove=null,u=u.filter(function(e){return e.targetElement!==t}),s&&0===u.length&&(document.removeEventListener(\"touchmove\",c,l?{passive:!1}:void 0),s=!1)}else(u=u.filter(function(e){return e.targetElement!==t})).length||o()}});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYm9keS1zY3JvbGwtbG9jay9saWIvYm9keVNjcm9sbExvY2subWluLmpzIiwibWFwcGluZ3MiOiJBQUFBLCtHQUFlLEdBQUcsSUFBcUMsQ0FBQyxpQ0FBTyxDQUFDLE9BQVMsQ0FBQyxvQ0FBQyxDQUFDO0FBQUE7QUFBQTtBQUFBLGtHQUFDLENBQUMsS0FBSyxVQUFnRixDQUFDLHdCQUF3QixhQUFhLGNBQWMscUJBQXFCLDhCQUE4QixXQUFXLGNBQWMsU0FBUyxxQkFBcUIsNENBQTRDLFNBQVMsRUFBRSxTQUFTLCtCQUErQixPQUFPLGNBQWMsT0FBTywrRkFBK0YsY0FBYywwQkFBMEIsaUVBQWlFLEVBQUUsY0FBYyxzQkFBc0IscUZBQXFGLGFBQWEsc0JBQXNCLGdIQUFnSCxFQUFFLDhPQUE4Tyx3Q0FBd0MsTUFBTSxrSkFBa0osMEJBQTBCLDJCQUEyQixHQUFHLE9BQU8sK0JBQStCLGlEQUFpRCwyREFBMkQsMkJBQTJCLFlBQVksNkxBQTZMLGdEQUFnRCxXQUFXLGdCQUFnQixLQUFLLDBCQUEwQixlQUFlLCtGQUErRixxRkFBcUYsbUZBQW1GLEVBQUUsT0FBTywrQkFBK0Isc0JBQXNCLE1BQU0sNENBQTRDLHlCQUF5QixtRUFBbUUsb0RBQW9ELFdBQVcscUNBQXFDLHNDQUFzQyxNQUFNLGdKQUFnSiw4REFBOEQsMkJBQTJCLGtFQUFrRSxXQUFXLGVBQWUsNEJBQTRCLDJCQUEyQixnQkFBZ0IiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYm9keS1zY3JvbGwtbG9jay9saWIvYm9keVNjcm9sbExvY2subWluLmpzPzg1NDMiXSwic291cmNlc0NvbnRlbnQiOlsiIWZ1bmN0aW9uKGUsdCl7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kKWRlZmluZShbXCJleHBvcnRzXCJdLHQpO2Vsc2UgaWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGV4cG9ydHMpdChleHBvcnRzKTtlbHNle3ZhciBvPXt9O3QobyksZS5ib2R5U2Nyb2xsTG9jaz1vfX0odGhpcyxmdW5jdGlvbihleHBvcnRzKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBpKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpe2Zvcih2YXIgdD0wLG89QXJyYXkoZS5sZW5ndGgpO3Q8ZS5sZW5ndGg7dCsrKW9bdF09ZVt0XTtyZXR1cm4gb31yZXR1cm4gQXJyYXkuZnJvbShlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cyxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTt2YXIgbD0hMTtpZihcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93KXt2YXIgZT17Z2V0IHBhc3NpdmUoKXtsPSEwfX07d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJ0ZXN0UGFzc2l2ZVwiLG51bGwsZSksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0ZXN0UGFzc2l2ZVwiLG51bGwsZSl9ZnVuY3Rpb24gZCh0KXtyZXR1cm4gdS5zb21lKGZ1bmN0aW9uKGUpe3JldHVybiEoIWUub3B0aW9ucy5hbGxvd1RvdWNoTW92ZXx8IWUub3B0aW9ucy5hbGxvd1RvdWNoTW92ZSh0KSl9KX1mdW5jdGlvbiBjKGUpe3ZhciB0PWV8fHdpbmRvdy5ldmVudDtyZXR1cm4hIWQodC50YXJnZXQpfHwoMTx0LnRvdWNoZXMubGVuZ3RofHwodC5wcmV2ZW50RGVmYXVsdCYmdC5wcmV2ZW50RGVmYXVsdCgpLCExKSl9ZnVuY3Rpb24gbygpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXt2b2lkIDAhPT1tJiYoZG9jdW1lbnQuYm9keS5zdHlsZS5wYWRkaW5nUmlnaHQ9bSxtPXZvaWQgMCksdm9pZCAwIT09ZiYmKGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3c9ZixmPXZvaWQgMCl9KX12YXIgYT1cInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3cubmF2aWdhdG9yJiZ3aW5kb3cubmF2aWdhdG9yLnBsYXRmb3JtJiYoL2lQKGFkfGhvbmV8b2QpLy50ZXN0KHdpbmRvdy5uYXZpZ2F0b3IucGxhdGZvcm0pfHxcIk1hY0ludGVsXCI9PT13aW5kb3cubmF2aWdhdG9yLnBsYXRmb3JtJiYxPHdpbmRvdy5uYXZpZ2F0b3IubWF4VG91Y2hQb2ludHMpLHU9W10scz0hMSx2PS0xLGY9dm9pZCAwLG09dm9pZCAwO2V4cG9ydHMuZGlzYWJsZUJvZHlTY3JvbGw9ZnVuY3Rpb24ocixlKXtpZihhKXtpZighcilyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKFwiZGlzYWJsZUJvZHlTY3JvbGwgdW5zdWNjZXNzZnVsIC0gdGFyZ2V0RWxlbWVudCBtdXN0IGJlIHByb3ZpZGVkIHdoZW4gY2FsbGluZyBkaXNhYmxlQm9keVNjcm9sbCBvbiBJT1MgZGV2aWNlcy5cIik7aWYociYmIXUuc29tZShmdW5jdGlvbihlKXtyZXR1cm4gZS50YXJnZXRFbGVtZW50PT09cn0pKXt2YXIgdD17dGFyZ2V0RWxlbWVudDpyLG9wdGlvbnM6ZXx8e319O3U9W10uY29uY2F0KGkodSksW3RdKSxyLm9udG91Y2hzdGFydD1mdW5jdGlvbihlKXsxPT09ZS50YXJnZXRUb3VjaGVzLmxlbmd0aCYmKHY9ZS50YXJnZXRUb3VjaGVzWzBdLmNsaWVudFkpfSxyLm9udG91Y2htb3ZlPWZ1bmN0aW9uKGUpe3ZhciB0LG8sbixpOzE9PT1lLnRhcmdldFRvdWNoZXMubGVuZ3RoJiYobz1yLGk9KHQ9ZSkudGFyZ2V0VG91Y2hlc1swXS5jbGllbnRZLXYsZCh0LnRhcmdldCl8fChvJiYwPT09by5zY3JvbGxUb3AmJjA8aXx8KG49bykmJm4uc2Nyb2xsSGVpZ2h0LW4uc2Nyb2xsVG9wPD1uLmNsaWVudEhlaWdodCYmaTwwP2ModCk6dC5zdG9wUHJvcGFnYXRpb24oKSkpfSxzfHwoZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNobW92ZVwiLGMsbD97cGFzc2l2ZTohMX06dm9pZCAwKSxzPSEwKX19ZWxzZXtuPWUsc2V0VGltZW91dChmdW5jdGlvbigpe2lmKHZvaWQgMD09PW0pe3ZhciBlPSEhbiYmITA9PT1uLnJlc2VydmVTY3JvbGxCYXJHYXAsdD13aW5kb3cuaW5uZXJXaWR0aC1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGg7ZSYmMDx0JiYobT1kb2N1bWVudC5ib2R5LnN0eWxlLnBhZGRpbmdSaWdodCxkb2N1bWVudC5ib2R5LnN0eWxlLnBhZGRpbmdSaWdodD10K1wicHhcIil9dm9pZCAwPT09ZiYmKGY9ZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyxkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93PVwiaGlkZGVuXCIpfSk7dmFyIG89e3RhcmdldEVsZW1lbnQ6cixvcHRpb25zOmV8fHt9fTt1PVtdLmNvbmNhdChpKHUpLFtvXSl9dmFyIG59LGV4cG9ydHMuY2xlYXJBbGxCb2R5U2Nyb2xsTG9ja3M9ZnVuY3Rpb24oKXthPyh1LmZvckVhY2goZnVuY3Rpb24oZSl7ZS50YXJnZXRFbGVtZW50Lm9udG91Y2hzdGFydD1udWxsLGUudGFyZ2V0RWxlbWVudC5vbnRvdWNobW92ZT1udWxsfSkscyYmKGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0b3VjaG1vdmVcIixjLGw/e3Bhc3NpdmU6ITF9OnZvaWQgMCkscz0hMSksdT1bXSx2PS0xKToobygpLHU9W10pfSxleHBvcnRzLmVuYWJsZUJvZHlTY3JvbGw9ZnVuY3Rpb24odCl7aWYoYSl7aWYoIXQpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcihcImVuYWJsZUJvZHlTY3JvbGwgdW5zdWNjZXNzZnVsIC0gdGFyZ2V0RWxlbWVudCBtdXN0IGJlIHByb3ZpZGVkIHdoZW4gY2FsbGluZyBlbmFibGVCb2R5U2Nyb2xsIG9uIElPUyBkZXZpY2VzLlwiKTt0Lm9udG91Y2hzdGFydD1udWxsLHQub250b3VjaG1vdmU9bnVsbCx1PXUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLnRhcmdldEVsZW1lbnQhPT10fSkscyYmMD09PXUubGVuZ3RoJiYoZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRvdWNobW92ZVwiLGMsbD97cGFzc2l2ZTohMX06dm9pZCAwKSxzPSExKX1lbHNlKHU9dS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUudGFyZ2V0RWxlbWVudCE9PXR9KSkubGVuZ3RofHxvKCl9fSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/body-scroll-lock/lib/bodyScrollLock.min.js\n");

/***/ }),

/***/ "./node_modules/css-loader/dist/cjs.js??clonedRuleSet-9.use[1]!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-9.use[2]!./node_modules/@mathieustan/vue-datepicker/dist/vue-datepicker.min.css":
/*!**************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-9.use[1]!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-9.use[2]!./node_modules/@mathieustan/vue-datepicker/dist/vue-datepicker.min.css ***!
  \**************************************************************************************************************************************************************************************************************/
/***/ ((module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../css-loader/dist/runtime/cssWithMappingToString.js */ \"./node_modules/css-loader/dist/runtime/cssWithMappingToString.js\");\n/* harmony import */ var _css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\n/* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".vd-wrapper,.vd-wrapper *,.vd-wrapper :after,.vd-wrapper :before{box-sizing:border-box}.vd-wrapper{position:relative;display:flex;flex:1 1 auto;align-items:center;max-width:100%;cursor:default}.vd-wrapper:not(.vd-wrapper--inline){cursor:pointer}.vd-wrapper:active,.vd-wrapper:focus{outline:0}.vd-wrapper--inline{width:304px;box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12)}.vd-wrapper--disabled{pointer-events:none}.vd-activator{display:flex;flex:1 1 auto;max-width:100%}.vd-menu,.vd-menu *,.vd-menu :after,.vd-menu :before{box-sizing:border-box}.vd-menu{display:none}.vd-menu--attached{display:inline}.vd-menu__activator{display:flex;align-items:center;cursor:pointer}.vd-menu *{cursor:pointer}.vd-menu__content{position:absolute;display:inline-block;border-radius:6px;max-width:80%;overflow-y:auto;overflow-x:hidden;contain:content;background-color:#fff;will-change:transform;box-shadow:0 2px 8px rgba(50,50,93,.2)}.vd-menu__content--fixed{position:fixed}.vd-menu__content--bottomsheet{position:fixed;top:auto!important;bottom:0!important;left:0!important;right:0!important;width:100%!important;min-width:100%!important;border-radius:12px 12px 0 0}@supports (padding-bottom:constant(safe-area-inset-bottom)){.vd-menu__content--bottomsheet{--safe-area-inset-bottom:constant(safe-area-inset-bottom);padding-bottom:var(--safe-area-inset-bottom)}}@supports (padding-bottom:env(safe-area-inset-bottom)){.vd-menu__content--bottomsheet{--safe-area-inset-bottom:env(safe-area-inset-bottom);padding-bottom:var(--safe-area-inset-bottom)}}.vd-menu-transition-leave-active,.vd-menu-transition-leave-to{pointer-events:none}.vd-menu-transition-enter,.vd-menu-transition-leave-to{opacity:0}.vd-menu-transition-enter-active,.vd-menu-transition-leave-active{transition:all .3s cubic-bezier(.25,.8,.25,1);transition-property:opacity,transform}.vd-picker__input-clear__icon button{border:none;margin:0;padding:0;width:auto;overflow:visible;background:transparent;color:inherit;font:inherit;line-height:normal;-webkit-font-smoothing:inherit;-moz-osx-font-smoothing:inherit;-webkit-appearance:none}.vd-picker__input-clear__icon button:active,.vd-picker__input-clear__icon button:focus{outline:0;box-shadow:0}.vd-picker__input-clear__icon button[role=button],.vd-picker__input-clear__icon button[type=button],.vd-picker__input-clear__icon button[type=reset],.vd-picker__input-clear__icon button[type=submit]{cursor:pointer}.vd-picker__input{position:relative;display:flex;flex:1 1 auto;align-items:center;color:inherit;min-height:inherit}.vd-wrapper--rtl .vd-picker__input{direction:rtl}.vd-wrapper--rtl .vd-picker__input button,.vd-wrapper--rtl .vd-picker__input input[type=text]{margin:0 8px 0 0}.vd-picker__input--disabled{cursor:not-allowed;pointer-events:none}.vd-picker__input--disabled .vd-picker__input-icon__wrapper,.vd-picker__input--disabled input{opacity:.38}.vd-picker__input--no-calendar-icon button,.vd-picker__input--no-calendar-icon input{margin:0}.vd-picker__input-clear{align-self:flex-start;line-height:1;-webkit-user-select:none;-moz-user-select:none;user-select:none}.vd-picker__input-clear,.vd-picker__input-clear__icon{display:inline-flex}.vd-picker__input-clear__icon{justify-content:center;align-items:center;flex:1 0 auto}.vd-picker__input-clear__icon,.vd-picker__input-clear__icon .vd-icon.vd-icon{height:24px;min-width:24px;width:24px}.vd-picker__input-icon{align-self:flex-start;margin-top:4px;margin-right:auto;padding-right:4px;line-height:1;-webkit-user-select:none;-moz-user-select:none;user-select:none}.vd-picker__input-icon,.vd-picker__input-icon__wrapper{display:inline-flex}.vd-picker__input-icon__wrapper{align-items:center;height:24px;flex:1 0 auto;justify-content:center;min-width:24px;width:24px}.vd-picker__input input{position:relative;flex:1 1 auto;max-height:32px;padding:8px 0;max-width:100%;min-width:0;width:100%;background-color:transparent;border-style:none;color:inherit;font-stretch:normal;line-height:inherit;font-size:16px!important;font-weight:400;font-family:inherit;color:currentColor;cursor:inherit}.vd-picker__input input:active,.vd-picker__input input:focus{outline:0;box-shadow:none}.vd-picker__input input.placeholder{opacity:.6}.vd-picker__input input::-moz-placeholder{opacity:.6}.vd-picker__input input::placeholder{opacity:.6}.vd-picker__input input:-moz-placeholder,.vd-picker__input input::-moz-placeholder{opacity:.6}.vd-picker__input input:-ms-input-placeholder{opacity:.6}.vd-picker__input input::-webkit-input-placeholder{opacity:.6}.vd-icon.vd-icon{display:inline-flex;align-items:center;justify-content:center;letter-spacing:normal;line-height:1;text-indent:0;transition:all .3s cubic-bezier(.25,.8,.5,1);transition-property:transform,color;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;user-select:none}.vd-icon--link{cursor:pointer}.vd-icon--disabled{pointer-events:none;opacity:.6}.vd-picker__title-close button{border:none;margin:0;padding:0;width:auto;overflow:visible;background:transparent;color:inherit;font:inherit;line-height:normal;-webkit-font-smoothing:inherit;-moz-osx-font-smoothing:inherit;-webkit-appearance:none}.vd-picker__title-close button:active,.vd-picker__title-close button:focus{outline:0;box-shadow:0}.vd-picker__title-close button[role=button],.vd-picker__title-close button[type=button],.vd-picker__title-close button[type=reset],.vd-picker__title-close button[type=submit]{cursor:pointer}.vd-picker,.vd-picker *,.vd-picker :after,.vd-picker :before{box-sizing:border-box}.vd-picker{display:flex;flex-direction:column;width:304px;background-color:#fff;border-radius:6px;box-shadow:0 2px 8px rgba(50,50,93,.2)}.vd-picker:active,.vd-picker:focus{outline:0}.vd-picker--bottomsheet{width:100%;box-shadow:none}.vd-picker--bottomsheet .vd-picker-header{border-radius:0}.vd-picker--rtl{direction:rtl}.vd-picker__title{position:relative;display:flex;justify-content:space-between;align-items:center;height:48px;padding:8px 16px;border-radius:12px 12px 0 0}.vd-picker--rtl .vd-picker__title{padding:0 16px 0 0}@media only screen and (min-width:480px){.vd-picker__title{display:none}}.vd-picker__title p{margin:0}.vd-picker__title-close{position:relative;display:flex;align-items:center;justify-content:flex-end;height:24px;width:24px;border:none;outline:none;background-color:transparent;-webkit-user-select:none;-moz-user-select:none;user-select:none}.vd-picker__title-close svg{width:24px;height:24px}.vd-picker__body{position:relative;flex:1 1 100%;flex-direction:column;height:auto;overflow:hidden;z-index:0}.vd-overlay,.vd-picker__body{display:flex}.vd-overlay{position:fixed;top:0;left:0;right:0;bottom:0;align-items:center;border-radius:inherit;justify-content:center;pointer-events:none;transition:.3s cubic-bezier(.25,.8,.5,1),z-index 1ms}.vd-overlay__content{position:relative}.vd-overlay__inner{position:absolute;left:0;right:0;top:0;bottom:0;height:100%;width:100%;border-radius:inherit;transition:inherit;will-change:opacity}.vd-overlay--absolute{position:absolute}.vd-overlay--active{pointer-events:auto}.vd-picker__controls-label button{margin:0;width:auto;overflow:visible;background:transparent;color:inherit;font:inherit;line-height:normal;-webkit-font-smoothing:inherit;-moz-osx-font-smoothing:inherit;-webkit-appearance:none}.vd-picker__controls-label button:active,.vd-picker__controls-label button:focus{outline:0;box-shadow:0}.vd-picker__controls-label button[role=button],.vd-picker__controls-label button[type=button],.vd-picker__controls-label button[type=reset],.vd-picker__controls-label button[type=submit]{cursor:pointer}.vd-picker__controls{display:flex;height:48px;text-align:center;position:relative;width:100%}.vd-picker__controls-wrapper{overflow:hidden;justify-content:center}.vd-picker__controls-month,.vd-picker__controls-wrapper,.vd-picker__controls-year{position:relative;display:flex;align-items:center;flex:1}.vd-picker__controls-month{justify-content:flex-end}.vd-picker__controls-year{justify-content:flex-start}.vd-picker__controls-year.vd-picker__controls-year--center{justify-content:center}.vd-picker__controls-label{padding:8px 4px}.vd-picker__controls-label button{position:relative;display:flex;font-size:15px;font-weight:500;line-height:15px;padding:0;border:none;outline:none;transition:color .3s}.vd-picker__controls-label button:not(:hover):not(:focus){color:rgba(0,0,0,.87)}.vd-picker__controls-label button:disabled,.vd-picker__controls-label button[disabled]{cursor:default;color:rgba(0,0,0,.26)}.vd-picker__controls button.vd-picker__controls-next,.vd-picker__controls button.vd-picker__controls-prev{position:relative;flex:0 0 40px;height:48px;width:48px;padding:0 0 0 24px;border:none;outline:none;color:rgba(0,0,0,.87);background-color:transparent;-webkit-user-select:none;-moz-user-select:none;user-select:none;cursor:pointer}@media only screen and (min-width:768px){.vd-picker__controls button.vd-picker__controls-next,.vd-picker__controls button.vd-picker__controls-prev{padding:0 8px}}.vd-picker__controls button.vd-picker__controls-next:disabled,.vd-picker__controls button.vd-picker__controls-next[disabled],.vd-picker__controls button.vd-picker__controls-prev:disabled,.vd-picker__controls button.vd-picker__controls-prev[disabled]{cursor:default}.vd-picker__controls button.vd-picker__controls-next:disabled svg,.vd-picker__controls button.vd-picker__controls-next[disabled] svg,.vd-picker__controls button.vd-picker__controls-prev:disabled svg,.vd-picker__controls button.vd-picker__controls-prev[disabled] svg{color:rgba(0,0,0,.26)}.vd-picker--rtl .vd-picker__controls button.vd-picker__controls-next,.vd-picker--rtl .vd-picker__controls button.vd-picker__controls-prev{transform:rotate(180deg)}.vd-picker__controls button.vd-picker__controls-next{padding:0 24px 0 0}@media only screen and (min-width:768px){.vd-picker__controls button.vd-picker__controls-next{padding:0 8px}}.vd-picker__controls svg{width:24px;height:24px;vertical-align:middle}.vd-picker-header{color:#fff;padding:16px;display:flex;justify-content:space-between;flex-direction:column;flex-wrap:wrap;line-height:1;min-height:80px;height:80px;border-radius:6px 6px 0 0}@media only screen and (min-width:768px){.vd-picker-header{min-height:85px;height:85px}}.vd-picker-header--range .vd-picker-header__wrap{flex:1 1 auto;flex-direction:column;justify-content:space-between}.vd-picker-header--range .vd-picker-header__date{font-size:18px;height:26px}@media only screen and (min-width:768px){.vd-picker-header--range .vd-picker-header__date{font-size:22px;height:30px}}.vd-picker-header--year .vd-picker-header__year{flex:1 1 auto;font-size:22px;height:30px}.vd-picker-header__year{align-items:center;display:inline-flex;font-size:14px;margin-bottom:8px;opacity:.6;transition:opacity .3s}.vd-picker-header__year:focus:not(.vd-picker-header__year--active),.vd-picker-header__year:hover:not(.vd-picker-header__year--active){cursor:pointer;opacity:1}.vd-picker-header__year--active{opacity:1;cursor:default}.vd-picker-header__date,.vd-picker-header__wrap{position:relative;display:flex;width:100%}.vd-picker-header__date{font-size:22px;height:30px;text-align:left;overflow:hidden;padding-bottom:8px;margin-bottom:-8px;opacity:.6;transition:opacity .3s}.vd-picker-header__date:focus:not(.vd-picker-header__date--active),.vd-picker-header__date:hover:not(.vd-picker-header__date--active){cursor:pointer;opacity:1}.vd-picker-header__date--active{opacity:1;cursor:default}@media only screen and (min-width:768px){.vd-picker-header__date{font-size:24px;height:32px}}.vd-picker-preset{border:none;margin:0;padding:0;width:auto;overflow:visible;background:transparent;color:inherit;font:inherit;line-height:normal;-webkit-font-smoothing:inherit;-moz-osx-font-smoothing:inherit;-webkit-appearance:none}.vd-picker-preset:active,.vd-picker-preset:focus{outline:0;box-shadow:0}.vd-picker-preset[role=button],.vd-picker-preset[type=button],.vd-picker-preset[type=reset],.vd-picker-preset[type=submit]{cursor:pointer}.vd-picker-presets{position:relative;display:flex;padding:16px 12px}@media only screen and (min-width:480px){.vd-picker-presets{padding:16px 12px 8px}}.vd-picker-presets__wrapper{flex:1 1 auto;flex-wrap:wrap;width:100%}.vd-picker-preset,.vd-picker-presets__wrapper{position:relative;display:flex}.vd-picker-preset{align-items:center;justify-content:center;flex:0 0 50%;max-width:50%;padding:0 8px;font-size:14px;line-height:14px;overflow:hidden;border:0 solid #eef1f8;transition:opacity .3s cubic-bezier(.25,.8,.5,1)}.vd-picker--bottomsheet .vd-picker-preset,.vd-picker-preset{min-height:32px;height:32px}.vd-picker-preset:nth-child(odd){border-width:0 1px 1px}.vd-picker-preset:nth-child(odd):first-child{border-width:1px}.vd-picker-preset:nth-child(2n){border-width:0 1px 1px 0}.vd-picker-preset:nth-child(2n):nth-child(2){border-width:1px 1px 1px 0}.vd-picker-preset__effect{position:absolute;top:0;left:0;right:0;bottom:0;opacity:0;transition:opacity .3s cubic-bezier(.25,.8,.5,1);z-index:0}.vd-picker-preset__name{position:relative;z-index:1}.vd-picker-preset--selected,.vd-picker-preset:hover:not(.vd-picker-preset--disabled){color:#fff}.vd-picker-preset--selected .vd-picker-preset__effect,.vd-picker-preset:hover:not(.vd-picker-preset--disabled) .vd-picker-preset__effect{opacity:1}.vd-picker-preset--selected{pointer-events:none}.vd-picker-preset--disabled{color:rgba(93,106,137,.2);cursor:not-allowed;pointer-events:none}.vd-picker__table{position:relative;padding:0 12px;height:274px}.vd-picker--bottomsheet .vd-picker__table{height:322px}.vd-picker__table-week{display:flex;flex-wrap:nowrap;flex:1 1 100%;max-width:100%;padding:8px 0;font-weight:600;font-size:12px;line-height:18px;font-weight:500;color:rgba(0,0,0,.38)}.vd-picker__table-weekday{flex:0 0 14.28571%;max-width:14.28571%;text-align:center}.vd-picker__table-days__wrapper{position:relative;overflow:hidden;height:240px}.vd-picker--bottomsheet .vd-picker__table-days__wrapper{height:288px}.vd-picker__table-days{display:flex;flex-wrap:wrap;overflow:hidden;width:100%}.vd-picker__table-day{border:none;margin:0;padding:0;width:auto;overflow:visible;background:transparent;color:inherit;font:inherit;line-height:normal;-webkit-font-smoothing:inherit;-moz-osx-font-smoothing:inherit;-webkit-appearance:none}.vd-picker__table-day:active,.vd-picker__table-day:focus{outline:0;box-shadow:0}.vd-picker__table-day[role=button],.vd-picker__table-day[type=button],.vd-picker__table-day[type=reset],.vd-picker__table-day[type=submit]{cursor:pointer}.vd-picker__table-day{position:relative;width:14.28571%;height:40px;line-height:1;font-size:12px;float:left;text-align:center;color:currentColor;font-weight:500;transition:all .45s cubic-bezier(.23,1,.32,1);overflow:hidden}.vd-picker--bottomsheet .vd-picker__table-day{height:48px}.vd-picker__table-day__wrapper{position:absolute;top:2px;bottom:2px;left:0;right:0;border:none}.vd-picker__table-day__wrapper:before{content:\\\"\\\";position:absolute;top:0;bottom:0;opacity:0;width:50%;background-color:#fff;z-index:1;transition-property:opacity}.vd-picker__table-day__wrapper:after{content:\\\"\\\";position:absolute;top:0;left:50%;width:calc(100% + 1px);height:36px;border:1px solid;background-color:currentColor;opacity:.12;transform:translateX(-50%) scale(0)}.vd-picker--bottomsheet .vd-picker__table-day__wrapper:after{height:44px}.vd-picker__table-day__current,.vd-picker__table-day__effect{position:absolute;top:0;left:50%;transform:translateX(-50%);width:36px;height:36px;border-radius:50%;border:1px solid}.vd-picker--bottomsheet .vd-picker__table-day__current,.vd-picker--bottomsheet .vd-picker__table-day__effect{width:44px;height:44px}.vd-picker__table-day__current{color:rgba(0,0,0,.87);z-index:1}.vd-picker__table-day__effect{background-color:currentColor;transform:translateX(-50%) scale(0);transition:all .45s cubic-bezier(.23,1,.32,1);z-index:1}.vd-picker--range-selecting .vd-picker__table-day__effect{transition:unset}.vd-picker__table-day__text{position:relative;display:inline-flex;align-items:center;justify-content:center;margin:auto;width:36px;height:36px;color:rgba(0,0,0,.87);z-index:1}.vd-picker--bottomsheet .vd-picker__table-day__text{width:44px;height:44px}.vd-picker__table-day:hover:not(.vd-picker__table-day--disabled):not(.vd-picker__table-day--selected):not(.vd-picker__table-day--between) .vd-picker__table-day__effect{transform:translateX(-50%) scale(1);opacity:.12}.vd-picker__table-day:hover:not(.vd-picker__table-day--disabled):not(.vd-picker__table-day--selected):not(.vd-picker__table-day--between).vd-picker__table-day--select-end .vd-picker__table-day__wrapper:before,.vd-picker__table-day:hover:not(.vd-picker__table-day--disabled):not(.vd-picker__table-day--selected):not(.vd-picker__table-day--between).vd-picker__table-day--select-start .vd-picker__table-day__wrapper:before{opacity:1;right:0}.vd-picker--rtl .vd-picker__table-day:hover:not(.vd-picker__table-day--disabled):not(.vd-picker__table-day--selected):not(.vd-picker__table-day--between).vd-picker__table-day--select-end .vd-picker__table-day__wrapper:before,.vd-picker--rtl .vd-picker__table-day:hover:not(.vd-picker__table-day--disabled):not(.vd-picker__table-day--selected):not(.vd-picker__table-day--between).vd-picker__table-day--select-start .vd-picker__table-day__wrapper:before{left:0;right:unset}.vd-picker__table-day:hover:not(.vd-picker__table-day--disabled):not(.vd-picker__table-day--selected):not(.vd-picker__table-day--between).vd-picker__table-day--select-end .vd-picker__table-day__wrapper:after,.vd-picker__table-day:hover:not(.vd-picker__table-day--disabled):not(.vd-picker__table-day--selected):not(.vd-picker__table-day--between).vd-picker__table-day--select-start .vd-picker__table-day__wrapper:after{transform:translateX(-50%) scale(1);opacity:.08}.vd-picker__table-day:hover:not(.vd-picker__table-day--disabled):not(.vd-picker__table-day--selected):not(.vd-picker__table-day--between).vd-picker__table-day--select-end .vd-picker__table-day__effect,.vd-picker__table-day:hover:not(.vd-picker__table-day--disabled):not(.vd-picker__table-day--selected):not(.vd-picker__table-day--between).vd-picker__table-day--select-start .vd-picker__table-day__effect{opacity:1;transition:unset}.vd-picker__table-day:hover:not(.vd-picker__table-day--disabled):not(.vd-picker__table-day--selected):not(.vd-picker__table-day--between).vd-picker__table-day--select-end .vd-picker__table-day__text,.vd-picker__table-day:hover:not(.vd-picker__table-day--disabled):not(.vd-picker__table-day--selected):not(.vd-picker__table-day--between).vd-picker__table-day--select-start .vd-picker__table-day__text{color:#fff}.vd-picker__table-day:hover:not(.vd-picker__table-day--disabled):not(.vd-picker__table-day--selected):not(.vd-picker__table-day--between).vd-picker__table-day--select-start .vd-picker__table-day__wrapper:before{left:0}.vd-picker--rtl .vd-picker__table-day:hover:not(.vd-picker__table-day--disabled):not(.vd-picker__table-day--selected):not(.vd-picker__table-day--between).vd-picker__table-day--select-start .vd-picker__table-day__wrapper:before{right:0;left:unset}.vd-picker__table-day--selected .vd-picker__table-day__effect{transform:translateX(-50%) scale(1);opacity:1}.vd-picker__table-day--selected .vd-picker__table-day__text{color:#fff}.vd-picker__table-day--between:not(.vd-picker__table-day--disabled) .vd-picker__table-day__wrapper:after,.vd-picker__table-day--first .vd-picker__table-day__wrapper:after,.vd-picker__table-day--in-range:not(.vd-picker__table-day--disabled) .vd-picker__table-day__wrapper:after,.vd-picker__table-day--last .vd-picker__table-day__wrapper:after{transform:translateX(-50%) scale(1)}.vd-picker--range-selecting .vd-picker__table-day--first .vd-picker__table-day__wrapper:after,.vd-picker--range-selecting .vd-picker__table-day--last .vd-picker__table-day__wrapper:after,.vd-picker__table-day--in-range:not(.vd-picker__table-day--disabled) .vd-picker__table-day__wrapper:after{opacity:.08}.vd-picker__table-day--first .vd-picker__table-day__wrapper:before{opacity:1;left:0}.vd-picker--rtl .vd-picker__table-day--first .vd-picker__table-day__wrapper:before{right:0;left:unset}.vd-picker__table-day--last .vd-picker__table-day__wrapper:before{opacity:1;right:0}.vd-picker--rtl .vd-picker__table-day--last .vd-picker__table-day__wrapper:before{left:0;right:unset}.vd-picker__table-day--last:not(.vd-picker__table-day--select-start) .vd-picker__table-day__effect{opacity:1}.vd-picker__table-day--disabled.vd-picker__table-day{cursor:default}.vd-picker__table-day--disabled.vd-picker__table-day .vd-picker__table-day__text{color:rgba(93,106,137,.2)}.vd-picker-validate__button{border:none;margin:0;padding:0;width:auto;overflow:visible;background:transparent;color:inherit;font:inherit;line-height:normal;-webkit-font-smoothing:inherit;-moz-osx-font-smoothing:inherit;-webkit-appearance:none}.vd-picker-validate__button:active,.vd-picker-validate__button:focus{outline:0;box-shadow:0}.vd-picker-validate__button[role=button],.vd-picker-validate__button[type=button],.vd-picker-validate__button[type=reset],.vd-picker-validate__button[type=submit]{cursor:pointer}.vd-picker-validate{display:flex;-ms-flex-align:center;justify-content:flex-end;padding:8px}.vd-picker-validate,.vd-picker-validate__button{position:relative;align-items:center}.vd-picker-validate__button{display:inline-flex;flex:0 0 auto;-ms-flex-align:center;justify-content:center;height:36px;min-width:44px;font-size:14px;font-weight:500;border-radius:4px;padding:6px 8px;outline:0;text-transform:uppercase;text-decoration:none;overflow:hidden}.vd-picker-validate__button+.vd-picker-validate__button{margin-left:8px}.vd-picker-validate__button:hover:not(:disabled) .vd-picker-validate__effect{opacity:.1}.vd-picker-validate__button:disabled,.vd-picker-validate__button[disabled]{color:rgba(0,0,0,.26)!important;cursor:default}.vd-picker-validate__effect{position:absolute;top:0;left:0;right:0;bottom:0;opacity:0;transition:opacity .45s cubic-bezier(.23,1,.32,1);z-index:-1}.vd-picker__months-button{border:none;margin:0;padding:0;width:auto;overflow:visible;background:transparent;color:inherit;font:inherit;line-height:normal;-webkit-font-smoothing:inherit;-moz-osx-font-smoothing:inherit;-webkit-appearance:none}.vd-picker__months-button:active,.vd-picker__months-button:focus{outline:0;box-shadow:0}.vd-picker__months-button[role=button],.vd-picker__months-button[type=button],.vd-picker__months-button[type=reset],.vd-picker__months-button[type=submit]{cursor:pointer}.vd-picker__months{position:relative;display:flex;flex:1 1 auto;height:274px}.vd-picker--bottomsheet .vd-picker__months{height:322px}@supports (padding-bottom:constant(safe-area-inset-bottom)){.vd-picker__months{--safe-area-inset-bottom:constant(safe-area-inset-bottom);padding-bottom:var(--safe-area-inset-bottom)}}@supports (padding-bottom:env(safe-area-inset-bottom)){.vd-picker__months{--safe-area-inset-bottom:env(safe-area-inset-bottom);padding-bottom:var(--safe-area-inset-bottom)}}.vd-picker__months-inner{position:relative;width:100%;height:100%;padding:0 12px}.vd-picker__months-inner,.vd-picker__months-list{display:flex}.vd-picker__months-list{position:absolute;top:0;left:0;right:0;bottom:0;flex:1 1 auto;flex-wrap:wrap;justify-items:center;align-items:center}.vd-picker__months-button{position:relative;height:48px;min-height:48px;width:100%;font-size:15px;font-weight:500;border-radius:2px;outline:none;transition:background-color .3s;border:thin solid transparent}.vd-picker__months-button:hover{background-color:#eef1f8}.vd-picker__months-button:disabled,.vd-picker__months-button[disabled]{cursor:default;color:rgba(0,0,0,.26);pointer-events:none}.vd-picker__months-button__wrapper{position:relative;display:flex;flex:0 0 33.33333%;max-width:33.33333%;justify-content:center;align-items:center;height:25%;min-height:25%;padding:4px 8px}.vd-picker__quarters-button{border:none;margin:0;padding:0;width:auto;overflow:visible;background:transparent;color:inherit;font:inherit;line-height:normal;-webkit-font-smoothing:inherit;-moz-osx-font-smoothing:inherit;-webkit-appearance:none}.vd-picker__quarters-button:active,.vd-picker__quarters-button:focus{outline:0;box-shadow:0}.vd-picker__quarters-button[role=button],.vd-picker__quarters-button[type=button],.vd-picker__quarters-button[type=reset],.vd-picker__quarters-button[type=submit]{cursor:pointer}.vd-picker__quarters{position:relative;display:flex;flex:1 1 auto;height:274px}.vd-picker--bottomsheet .vd-picker__quarters{height:274px}@supports (padding-bottom:constant(safe-area-inset-bottom)){.vd-picker__quarters{--safe-area-inset-bottom:constant(safe-area-inset-bottom);padding-bottom:var(--safe-area-inset-bottom)}}@supports (padding-bottom:env(safe-area-inset-bottom)){.vd-picker__quarters{--safe-area-inset-bottom:env(safe-area-inset-bottom);padding-bottom:var(--safe-area-inset-bottom)}}.vd-picker__quarters-inner{position:relative;display:flex;width:100%;height:100%;padding:0 12px}.vd-picker__quarters-list{position:absolute;top:0;left:0;right:0;bottom:0;display:flex;flex:1 1 auto;flex-wrap:wrap;justify-items:center;align-items:center}.vd-picker__quarters-button{position:relative;height:48px;min-height:48px;width:100%;font-size:15px;font-weight:500;border-radius:2px;outline:none;transition:background-color .3s;border:thin solid transparent}.vd-picker__quarters-button:hover{background-color:#eef1f8}.vd-picker__quarters-button:disabled,.vd-picker__quarters-button[disabled]{cursor:default;color:rgba(0,0,0,.26);pointer-events:none}.vd-picker__quarters-button__wrapper{position:relative;display:flex;flex:1 1 100%;max-width:1 1 100%;justify-content:center;align-items:center;height:25%;min-height:25%;padding:4px 8px}.slide-x-transition-enter-active,.slide-x-transition-leave-active{transition:all .3s cubic-bezier(.25,.8,.5,1);transition-property:opacity,transform,height}.slide-x-transition-enter,.slide-x-transition-leave-to{opacity:0;transform:translateX(-15px)}.slide-y-transition-enter-active,.slide-y-transition-leave-active{transition:all .3s cubic-bezier(.25,.8,.5,1);transition-property:opacity,transform,height}.slide-y-transition-enter,.slide-y-transition-leave-to{opacity:0;transform:translateY(-15px)}.scale-transition-enter-active,.scale-transition-leave-active{transition:all .3s cubic-bezier(.25,.8,.5,1);transition-property:opacity,transform,height}.scale-transition-enter,.scale-transition-leave,.scale-transition-leave-to{opacity:0;transform:scale(0)}.slide-in-out-transition-enter-active,.slide-in-out-transition-leave-active{transition:all .3s cubic-bezier(.25,.8,.5,1);transition-property:opacity,transform,height}.slide-in-out-transition-enter,.slide-in-out-transition-leave-to{opacity:0;transform:translateY(100%)}.slide-h-next-enter-active,.slide-h-next-leave-active,.slide-h-prev-enter-active,.slide-h-prev-leave-active,.slide-v-next-enter-active,.slide-v-next-leave-active,.slide-v-prev-enter-active,.slide-v-prev-leave-active{transition:all .3s cubic-bezier(.25,.8,.5,1);transition-property:opacity,transform,height;position:absolute}.slide-h-next-enter{opacity:0;transform:translateX(100%)}.slide-h-next-leave-to{opacity:0;transform:translateX(-100%)}.slide-h-prev-leave-to{opacity:0;transform:translateX(100%)}.slide-h-prev-enter{opacity:0;transform:translateX(-100%)}.vd-picker__controls-year.vd-picker__controls-year--center .slide-h-next-enter,.vd-picker__controls-year.vd-picker__controls-year--center .slide-h-prev-leave-to{transform:translateX(-50%) translateY(150%)}.vd-picker__controls-year.vd-picker__controls-year--center .slide-h-next-leave-to,.vd-picker__controls-year.vd-picker__controls-year--center .slide-h-prev-enter{transform:translateX(-50%) translateY(-150%)}.vd-picker--rtl .slide-h-next-enter,.vd-picker--rtl .slide-h-prev-leave-to{transform:translateX(-100%)}.vd-picker--rtl .slide-h-next-leave-to,.vd-picker--rtl .slide-h-prev-enter{transform:translateX(100%)}.slide-v-next-leave-to{opacity:0;transform:translateY(100%)}.slide-v-next-enter{opacity:0;transform:translateY(-100%)}.slide-v-prev-enter{opacity:0;transform:translateY(100%)}.slide-v-prev-leave-to{opacity:0;transform:translateY(-100%)}.yearMonth-enter-active,.yearMonth-leave-active{position:absolute;transition:opacity .3s}.yearMonth-enter,.yearMonth-leave-to{opacity:0}.vd-picker__years{position:relative;height:322px;list-style-type:none;text-align:center;margin:0;padding:8px 0;overflow-y:scroll;-webkit-overflow-scrolling:touch}.vd-picker--bottomsheet .vd-picker__years{height:370px}@supports (padding-bottom:constant(safe-area-inset-bottom)){.vd-picker__years{--safe-area-inset-bottom:constant(safe-area-inset-bottom);padding-bottom:calc(8px + var(--safe-area-inset-bottom))}}@supports (padding-bottom:env(safe-area-inset-bottom)){.vd-picker__years{--safe-area-inset-bottom:env(safe-area-inset-bottom);padding-bottom:calc(8px + var(--safe-area-inset-bottom))}}.vd-picker--validate .vd-picker__years{border-bottom:1px solid #eef1f8}.vd-picker__years li{position:relative;cursor:pointer;display:flex;justify-content:center;align-items:center;align-content:center;padding:8px 0;margin-left:12px;margin-right:12px;height:40px;min-height:40px;width:calc(100% - 24px);font-size:15px;font-weight:500;outline:none;transition:background-color .3s;border:thin solid transparent}.vd-picker--bottomsheet .vd-picker__years li{height:48px;min-height:48px}.vd-picker__years li:hover{background-color:#eef1f8}.vd-picker__years li:disabled,.vd-picker__years li[disabled]{cursor:default;color:rgba(0,0,0,.26);pointer-events:none}.vd-picker__years li+li{margin-top:2px}\", \"\",{\"version\":3,\"sources\":[\"webpack://./node_modules/@mathieustan/vue-datepicker/dist/vue-datepicker.min.css\"],\"names\":[],\"mappings\":\"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\",\"sourcesContent\":[\".vd-wrapper,.vd-wrapper *,.vd-wrapper :after,.vd-wrapper :before{-webkit-box-sizing:border-box;box-sizing:border-box}.vd-wrapper{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;max-width:100%;cursor:default}.vd-wrapper:not(.vd-wrapper--inline){cursor:pointer}.vd-wrapper:active,.vd-wrapper:focus{outline:0}.vd-wrapper--inline{width:304px;-webkit-box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12);box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12)}.vd-wrapper--disabled{pointer-events:none}.vd-activator{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;max-width:100%}.vd-menu,.vd-menu *,.vd-menu :after,.vd-menu :before{-webkit-box-sizing:border-box;box-sizing:border-box}.vd-menu{display:none}.vd-menu--attached{display:inline}.vd-menu__activator{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;cursor:pointer}.vd-menu *{cursor:pointer}.vd-menu__content{position:absolute;display:inline-block;border-radius:6px;max-width:80%;overflow-y:auto;overflow-x:hidden;contain:content;background-color:#fff;will-change:transform;-webkit-box-shadow:0 2px 8px rgba(50,50,93,.2);box-shadow:0 2px 8px rgba(50,50,93,.2)}.vd-menu__content--fixed{position:fixed}.vd-menu__content--bottomsheet{position:fixed;top:auto!important;bottom:0!important;left:0!important;right:0!important;width:100%!important;min-width:100%!important;border-radius:12px 12px 0 0}@supports (padding-bottom:constant(safe-area-inset-bottom)){.vd-menu__content--bottomsheet{--safe-area-inset-bottom:constant(safe-area-inset-bottom);padding-bottom:var(--safe-area-inset-bottom)}}@supports (padding-bottom:env(safe-area-inset-bottom)){.vd-menu__content--bottomsheet{--safe-area-inset-bottom:env(safe-area-inset-bottom);padding-bottom:var(--safe-area-inset-bottom)}}.vd-menu-transition-leave-active,.vd-menu-transition-leave-to{pointer-events:none}.vd-menu-transition-enter,.vd-menu-transition-leave-to{opacity:0}.vd-menu-transition-enter-active,.vd-menu-transition-leave-active{-webkit-transition:all .3s cubic-bezier(.25,.8,.25,1);transition:all .3s cubic-bezier(.25,.8,.25,1);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform}.vd-picker__input-clear__icon button{border:none;margin:0;padding:0;width:auto;overflow:visible;background:transparent;color:inherit;font:inherit;line-height:normal;-webkit-font-smoothing:inherit;-moz-osx-font-smoothing:inherit;-webkit-appearance:none}.vd-picker__input-clear__icon button:active,.vd-picker__input-clear__icon button:focus{outline:0;-webkit-box-shadow:0;box-shadow:0}.vd-picker__input-clear__icon button[role=button],.vd-picker__input-clear__icon button[type=button],.vd-picker__input-clear__icon button[type=reset],.vd-picker__input-clear__icon button[type=submit]{cursor:pointer}.vd-picker__input{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:inherit;min-height:inherit}.vd-wrapper--rtl .vd-picker__input{direction:rtl}.vd-wrapper--rtl .vd-picker__input button,.vd-wrapper--rtl .vd-picker__input input[type=text]{margin:0 8px 0 0}.vd-picker__input--disabled{cursor:not-allowed;pointer-events:none}.vd-picker__input--disabled .vd-picker__input-icon__wrapper,.vd-picker__input--disabled input{opacity:.38}.vd-picker__input--no-calendar-icon button,.vd-picker__input--no-calendar-icon input{margin:0}.vd-picker__input-clear{-ms-flex-item-align:start;align-self:flex-start;line-height:1;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.vd-picker__input-clear,.vd-picker__input-clear__icon{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.vd-picker__input-clear__icon{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-flex:1;-ms-flex:1 0 auto;flex:1 0 auto}.vd-picker__input-clear__icon,.vd-picker__input-clear__icon .vd-icon.vd-icon{height:24px;min-width:24px;width:24px}.vd-picker__input-icon{-ms-flex-item-align:start;align-self:flex-start;margin-top:4px;margin-right:auto;padding-right:4px;line-height:1;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.vd-picker__input-icon,.vd-picker__input-icon__wrapper{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.vd-picker__input-icon__wrapper{-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:24px;-webkit-box-flex:1;-ms-flex:1 0 auto;flex:1 0 auto;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;min-width:24px;width:24px}.vd-picker__input input{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;max-height:32px;padding:8px 0;max-width:100%;min-width:0;width:100%;background-color:transparent;border-style:none;color:inherit;font-stretch:normal;line-height:inherit;font-size:16px!important;font-weight:400;font-family:inherit;color:currentColor;cursor:inherit}.vd-picker__input input:active,.vd-picker__input input:focus{outline:0;-webkit-box-shadow:none;box-shadow:none}.vd-picker__input input.placeholder{opacity:.6}.vd-picker__input input::-ms-input-placeholder{opacity:.6}.vd-picker__input input::-moz-placeholder{opacity:.6}.vd-picker__input input::placeholder{opacity:.6}.vd-picker__input input:-moz-placeholder,.vd-picker__input input::-moz-placeholder{opacity:.6}.vd-picker__input input:-ms-input-placeholder{opacity:.6}.vd-picker__input input::-webkit-input-placeholder{opacity:.6}.vd-icon.vd-icon{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;letter-spacing:normal;line-height:1;text-indent:0;-webkit-transition:all .3s cubic-bezier(.25,.8,.5,1);transition:all .3s cubic-bezier(.25,.8,.5,1);-webkit-transition-property:color,-webkit-transform;transition-property:color,-webkit-transform;transition-property:transform,color;transition-property:transform,color,-webkit-transform;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.vd-icon--link{cursor:pointer}.vd-icon--disabled{pointer-events:none;opacity:.6}.vd-picker__title-close button{border:none;margin:0;padding:0;width:auto;overflow:visible;background:transparent;color:inherit;font:inherit;line-height:normal;-webkit-font-smoothing:inherit;-moz-osx-font-smoothing:inherit;-webkit-appearance:none}.vd-picker__title-close button:active,.vd-picker__title-close button:focus{outline:0;-webkit-box-shadow:0;box-shadow:0}.vd-picker__title-close button[role=button],.vd-picker__title-close button[type=button],.vd-picker__title-close button[type=reset],.vd-picker__title-close button[type=submit]{cursor:pointer}.vd-picker,.vd-picker *,.vd-picker :after,.vd-picker :before{-webkit-box-sizing:border-box;box-sizing:border-box}.vd-picker{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:304px;background-color:#fff;border-radius:6px;-webkit-box-shadow:0 2px 8px rgba(50,50,93,.2);box-shadow:0 2px 8px rgba(50,50,93,.2)}.vd-picker:active,.vd-picker:focus{outline:0}.vd-picker--bottomsheet{width:100%;-webkit-box-shadow:none;box-shadow:none}.vd-picker--bottomsheet .vd-picker-header{border-radius:0}.vd-picker--rtl{direction:rtl}.vd-picker__title{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:48px;padding:8px 16px;border-radius:12px 12px 0 0}.vd-picker--rtl .vd-picker__title{padding:0 16px 0 0}@media only screen and (min-width:480px){.vd-picker__title{display:none}}.vd-picker__title p{margin:0}.vd-picker__title-close{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;height:24px;width:24px;border:none;outline:none;background-color:transparent;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.vd-picker__title-close svg{width:24px;height:24px}.vd-picker__body{position:relative;-webkit-box-flex:1;-ms-flex:1 1 100%;flex:1 1 100%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;height:auto;overflow:hidden;z-index:0}.vd-overlay,.vd-picker__body{display:-webkit-box;display:-ms-flexbox;display:flex}.vd-overlay{position:fixed;top:0;left:0;right:0;bottom:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-radius:inherit;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;pointer-events:none;-webkit-transition:.3s cubic-bezier(.25,.8,.5,1),z-index 1ms;transition:.3s cubic-bezier(.25,.8,.5,1),z-index 1ms}.vd-overlay__content{position:relative}.vd-overlay__inner{position:absolute;left:0;right:0;top:0;bottom:0;height:100%;width:100%;border-radius:inherit;-webkit-transition:inherit;transition:inherit;will-change:opacity}.vd-overlay--absolute{position:absolute}.vd-overlay--active{pointer-events:auto}.vd-picker__controls-label button{margin:0;width:auto;overflow:visible;background:transparent;color:inherit;font:inherit;line-height:normal;-webkit-font-smoothing:inherit;-moz-osx-font-smoothing:inherit;-webkit-appearance:none}.vd-picker__controls-label button:active,.vd-picker__controls-label button:focus{outline:0;-webkit-box-shadow:0;box-shadow:0}.vd-picker__controls-label button[role=button],.vd-picker__controls-label button[type=button],.vd-picker__controls-label button[type=reset],.vd-picker__controls-label button[type=submit]{cursor:pointer}.vd-picker__controls{display:-webkit-box;display:-ms-flexbox;display:flex;height:48px;text-align:center;position:relative;width:100%}.vd-picker__controls-wrapper{overflow:hidden;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.vd-picker__controls-month,.vd-picker__controls-wrapper,.vd-picker__controls-year{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-flex:1;-ms-flex:1;flex:1}.vd-picker__controls-month{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.vd-picker__controls-year{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.vd-picker__controls-year.vd-picker__controls-year--center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.vd-picker__controls-label{padding:8px 4px}.vd-picker__controls-label button{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;font-size:15px;font-weight:500;line-height:15px;padding:0;border:none;outline:none;-webkit-transition:color .3s;transition:color .3s}.vd-picker__controls-label button:not(:hover):not(:focus){color:rgba(0,0,0,.87)}.vd-picker__controls-label button:disabled,.vd-picker__controls-label button[disabled]{cursor:default;color:rgba(0,0,0,.26)}.vd-picker__controls button.vd-picker__controls-next,.vd-picker__controls button.vd-picker__controls-prev{position:relative;-webkit-box-flex:0;-ms-flex:0 0 40px;flex:0 0 40px;height:48px;width:48px;padding:0 0 0 24px;border:none;outline:none;color:rgba(0,0,0,.87);background-color:transparent;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer}@media only screen and (min-width:768px){.vd-picker__controls button.vd-picker__controls-next,.vd-picker__controls button.vd-picker__controls-prev{padding:0 8px}}.vd-picker__controls button.vd-picker__controls-next:disabled,.vd-picker__controls button.vd-picker__controls-next[disabled],.vd-picker__controls button.vd-picker__controls-prev:disabled,.vd-picker__controls button.vd-picker__controls-prev[disabled]{cursor:default}.vd-picker__controls button.vd-picker__controls-next:disabled svg,.vd-picker__controls button.vd-picker__controls-next[disabled] svg,.vd-picker__controls button.vd-picker__controls-prev:disabled svg,.vd-picker__controls button.vd-picker__controls-prev[disabled] svg{color:rgba(0,0,0,.26)}.vd-picker--rtl .vd-picker__controls button.vd-picker__controls-next,.vd-picker--rtl .vd-picker__controls button.vd-picker__controls-prev{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.vd-picker__controls button.vd-picker__controls-next{padding:0 24px 0 0}@media only screen and (min-width:768px){.vd-picker__controls button.vd-picker__controls-next{padding:0 8px}}.vd-picker__controls svg{width:24px;height:24px;vertical-align:middle}.vd-picker-header{color:#fff;padding:16px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-ms-flex-wrap:wrap;flex-wrap:wrap;line-height:1;min-height:80px;height:80px;border-radius:6px 6px 0 0}@media only screen and (min-width:768px){.vd-picker-header{min-height:85px;height:85px}}.vd-picker-header--range .vd-picker-header__wrap{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.vd-picker-header--range .vd-picker-header__date{font-size:18px;height:26px}@media only screen and (min-width:768px){.vd-picker-header--range .vd-picker-header__date{font-size:22px;height:30px}}.vd-picker-header--year .vd-picker-header__year{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;font-size:22px;height:30px}.vd-picker-header__year{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-size:14px;margin-bottom:8px;opacity:.6;-webkit-transition:opacity .3s;transition:opacity .3s}.vd-picker-header__year:focus:not(.vd-picker-header__year--active),.vd-picker-header__year:hover:not(.vd-picker-header__year--active){cursor:pointer;opacity:1}.vd-picker-header__year--active{opacity:1;cursor:default}.vd-picker-header__date,.vd-picker-header__wrap{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.vd-picker-header__date{font-size:22px;height:30px;text-align:left;overflow:hidden;padding-bottom:8px;margin-bottom:-8px;opacity:.6;-webkit-transition:opacity .3s;transition:opacity .3s}.vd-picker-header__date:focus:not(.vd-picker-header__date--active),.vd-picker-header__date:hover:not(.vd-picker-header__date--active){cursor:pointer;opacity:1}.vd-picker-header__date--active{opacity:1;cursor:default}@media only screen and (min-width:768px){.vd-picker-header__date{font-size:24px;height:32px}}.vd-picker-preset{border:none;margin:0;padding:0;width:auto;overflow:visible;background:transparent;color:inherit;font:inherit;line-height:normal;-webkit-font-smoothing:inherit;-moz-osx-font-smoothing:inherit;-webkit-appearance:none}.vd-picker-preset:active,.vd-picker-preset:focus{outline:0;-webkit-box-shadow:0;box-shadow:0}.vd-picker-preset[role=button],.vd-picker-preset[type=button],.vd-picker-preset[type=reset],.vd-picker-preset[type=submit]{cursor:pointer}.vd-picker-presets{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;padding:16px 12px}@media only screen and (min-width:480px){.vd-picker-presets{padding:16px 12px 8px}}.vd-picker-presets__wrapper{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;-ms-flex-wrap:wrap;flex-wrap:wrap;width:100%}.vd-picker-preset,.vd-picker-presets__wrapper{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex}.vd-picker-preset{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%;padding:0 8px;font-size:14px;line-height:14px;overflow:hidden;border:0 solid #eef1f8;-webkit-transition:opacity .3s cubic-bezier(.25,.8,.5,1);transition:opacity .3s cubic-bezier(.25,.8,.5,1)}.vd-picker--bottomsheet .vd-picker-preset,.vd-picker-preset{min-height:32px;height:32px}.vd-picker-preset:nth-child(odd){border-width:0 1px 1px}.vd-picker-preset:nth-child(odd):first-child{border-width:1px}.vd-picker-preset:nth-child(2n){border-width:0 1px 1px 0}.vd-picker-preset:nth-child(2n):nth-child(2){border-width:1px 1px 1px 0}.vd-picker-preset__effect{position:absolute;top:0;left:0;right:0;bottom:0;opacity:0;-webkit-transition:opacity .3s cubic-bezier(.25,.8,.5,1);transition:opacity .3s cubic-bezier(.25,.8,.5,1);z-index:0}.vd-picker-preset__name{position:relative;z-index:1}.vd-picker-preset--selected,.vd-picker-preset:hover:not(.vd-picker-preset--disabled){color:#fff}.vd-picker-preset--selected .vd-picker-preset__effect,.vd-picker-preset:hover:not(.vd-picker-preset--disabled) .vd-picker-preset__effect{opacity:1}.vd-picker-preset--selected{pointer-events:none}.vd-picker-preset--disabled{color:rgba(93,106,137,.2);cursor:not-allowed;pointer-events:none}.vd-picker__table{position:relative;padding:0 12px;height:274px}.vd-picker--bottomsheet .vd-picker__table{height:322px}.vd-picker__table-week{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-flex:1;-ms-flex:1 1 100%;flex:1 1 100%;max-width:100%;padding:8px 0;font-weight:600;font-size:12px;line-height:18px;font-weight:500;color:rgba(0,0,0,.38)}.vd-picker__table-weekday{-webkit-box-flex:0;-ms-flex:0 0 14.28571%;flex:0 0 14.28571%;max-width:14.28571%;text-align:center}.vd-picker__table-days__wrapper{position:relative;overflow:hidden;height:240px}.vd-picker--bottomsheet .vd-picker__table-days__wrapper{height:288px}.vd-picker__table-days{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;overflow:hidden;width:100%}.vd-picker__table-day{border:none;margin:0;padding:0;width:auto;overflow:visible;background:transparent;color:inherit;font:inherit;line-height:normal;-webkit-font-smoothing:inherit;-moz-osx-font-smoothing:inherit;-webkit-appearance:none}.vd-picker__table-day:active,.vd-picker__table-day:focus{outline:0;-webkit-box-shadow:0;box-shadow:0}.vd-picker__table-day[role=button],.vd-picker__table-day[type=button],.vd-picker__table-day[type=reset],.vd-picker__table-day[type=submit]{cursor:pointer}.vd-picker__table-day{position:relative;width:14.28571%;height:40px;line-height:1;font-size:12px;float:left;text-align:center;color:currentColor;font-weight:500;-webkit-transition:all .45s cubic-bezier(.23,1,.32,1);transition:all .45s cubic-bezier(.23,1,.32,1);overflow:hidden}.vd-picker--bottomsheet .vd-picker__table-day{height:48px}.vd-picker__table-day__wrapper{position:absolute;top:2px;bottom:2px;left:0;right:0;border:none}.vd-picker__table-day__wrapper:before{content:\\\"\\\";position:absolute;top:0;bottom:0;opacity:0;width:50%;background-color:#fff;z-index:1;-webkit-transition-property:opacity;transition-property:opacity}.vd-picker__table-day__wrapper:after{content:\\\"\\\";position:absolute;top:0;left:50%;width:calc(100% + 1px);height:36px;border:1px solid;background-color:currentColor;opacity:.12;-webkit-transform:translateX(-50%) scale(0);transform:translateX(-50%) scale(0)}.vd-picker--bottomsheet .vd-picker__table-day__wrapper:after{height:44px}.vd-picker__table-day__current,.vd-picker__table-day__effect{position:absolute;top:0;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);width:36px;height:36px;border-radius:50%;border:1px solid}.vd-picker--bottomsheet .vd-picker__table-day__current,.vd-picker--bottomsheet .vd-picker__table-day__effect{width:44px;height:44px}.vd-picker__table-day__current{color:rgba(0,0,0,.87);z-index:1}.vd-picker__table-day__effect{background-color:currentColor;-webkit-transform:translateX(-50%) scale(0);transform:translateX(-50%) scale(0);-webkit-transition:all .45s cubic-bezier(.23,1,.32,1);transition:all .45s cubic-bezier(.23,1,.32,1);z-index:1}.vd-picker--range-selecting .vd-picker__table-day__effect{-webkit-transition:unset;transition:unset}.vd-picker__table-day__text{position:relative;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin:auto;width:36px;height:36px;color:rgba(0,0,0,.87);z-index:1}.vd-picker--bottomsheet .vd-picker__table-day__text{width:44px;height:44px}.vd-picker__table-day:hover:not(.vd-picker__table-day--disabled):not(.vd-picker__table-day--selected):not(.vd-picker__table-day--between) .vd-picker__table-day__effect{-webkit-transform:translateX(-50%) scale(1);transform:translateX(-50%) scale(1);opacity:.12}.vd-picker__table-day:hover:not(.vd-picker__table-day--disabled):not(.vd-picker__table-day--selected):not(.vd-picker__table-day--between).vd-picker__table-day--select-end .vd-picker__table-day__wrapper:before,.vd-picker__table-day:hover:not(.vd-picker__table-day--disabled):not(.vd-picker__table-day--selected):not(.vd-picker__table-day--between).vd-picker__table-day--select-start .vd-picker__table-day__wrapper:before{opacity:1;right:0}.vd-picker--rtl .vd-picker__table-day:hover:not(.vd-picker__table-day--disabled):not(.vd-picker__table-day--selected):not(.vd-picker__table-day--between).vd-picker__table-day--select-end .vd-picker__table-day__wrapper:before,.vd-picker--rtl .vd-picker__table-day:hover:not(.vd-picker__table-day--disabled):not(.vd-picker__table-day--selected):not(.vd-picker__table-day--between).vd-picker__table-day--select-start .vd-picker__table-day__wrapper:before{left:0;right:unset}.vd-picker__table-day:hover:not(.vd-picker__table-day--disabled):not(.vd-picker__table-day--selected):not(.vd-picker__table-day--between).vd-picker__table-day--select-end .vd-picker__table-day__wrapper:after,.vd-picker__table-day:hover:not(.vd-picker__table-day--disabled):not(.vd-picker__table-day--selected):not(.vd-picker__table-day--between).vd-picker__table-day--select-start .vd-picker__table-day__wrapper:after{-webkit-transform:translateX(-50%) scale(1);transform:translateX(-50%) scale(1);opacity:.08}.vd-picker__table-day:hover:not(.vd-picker__table-day--disabled):not(.vd-picker__table-day--selected):not(.vd-picker__table-day--between).vd-picker__table-day--select-end .vd-picker__table-day__effect,.vd-picker__table-day:hover:not(.vd-picker__table-day--disabled):not(.vd-picker__table-day--selected):not(.vd-picker__table-day--between).vd-picker__table-day--select-start .vd-picker__table-day__effect{opacity:1;-webkit-transition:unset;transition:unset}.vd-picker__table-day:hover:not(.vd-picker__table-day--disabled):not(.vd-picker__table-day--selected):not(.vd-picker__table-day--between).vd-picker__table-day--select-end .vd-picker__table-day__text,.vd-picker__table-day:hover:not(.vd-picker__table-day--disabled):not(.vd-picker__table-day--selected):not(.vd-picker__table-day--between).vd-picker__table-day--select-start .vd-picker__table-day__text{color:#fff}.vd-picker__table-day:hover:not(.vd-picker__table-day--disabled):not(.vd-picker__table-day--selected):not(.vd-picker__table-day--between).vd-picker__table-day--select-start .vd-picker__table-day__wrapper:before{left:0}.vd-picker--rtl .vd-picker__table-day:hover:not(.vd-picker__table-day--disabled):not(.vd-picker__table-day--selected):not(.vd-picker__table-day--between).vd-picker__table-day--select-start .vd-picker__table-day__wrapper:before{right:0;left:unset}.vd-picker__table-day--selected .vd-picker__table-day__effect{-webkit-transform:translateX(-50%) scale(1);transform:translateX(-50%) scale(1);opacity:1}.vd-picker__table-day--selected .vd-picker__table-day__text{color:#fff}.vd-picker__table-day--between:not(.vd-picker__table-day--disabled) .vd-picker__table-day__wrapper:after,.vd-picker__table-day--first .vd-picker__table-day__wrapper:after,.vd-picker__table-day--in-range:not(.vd-picker__table-day--disabled) .vd-picker__table-day__wrapper:after,.vd-picker__table-day--last .vd-picker__table-day__wrapper:after{-webkit-transform:translateX(-50%) scale(1);transform:translateX(-50%) scale(1)}.vd-picker--range-selecting .vd-picker__table-day--first .vd-picker__table-day__wrapper:after,.vd-picker--range-selecting .vd-picker__table-day--last .vd-picker__table-day__wrapper:after,.vd-picker__table-day--in-range:not(.vd-picker__table-day--disabled) .vd-picker__table-day__wrapper:after{opacity:.08}.vd-picker__table-day--first .vd-picker__table-day__wrapper:before{opacity:1;left:0}.vd-picker--rtl .vd-picker__table-day--first .vd-picker__table-day__wrapper:before{right:0;left:unset}.vd-picker__table-day--last .vd-picker__table-day__wrapper:before{opacity:1;right:0}.vd-picker--rtl .vd-picker__table-day--last .vd-picker__table-day__wrapper:before{left:0;right:unset}.vd-picker__table-day--last:not(.vd-picker__table-day--select-start) .vd-picker__table-day__effect{opacity:1}.vd-picker__table-day--disabled.vd-picker__table-day{cursor:default}.vd-picker__table-day--disabled.vd-picker__table-day .vd-picker__table-day__text{color:rgba(93,106,137,.2)}.vd-picker-validate__button{border:none;margin:0;padding:0;width:auto;overflow:visible;background:transparent;color:inherit;font:inherit;line-height:normal;-webkit-font-smoothing:inherit;-moz-osx-font-smoothing:inherit;-webkit-appearance:none}.vd-picker-validate__button:active,.vd-picker-validate__button:focus{outline:0;-webkit-box-shadow:0;box-shadow:0}.vd-picker-validate__button[role=button],.vd-picker-validate__button[type=button],.vd-picker-validate__button[type=reset],.vd-picker-validate__button[type=submit]{cursor:pointer}.vd-picker-validate{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-align:center;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;padding:8px}.vd-picker-validate,.vd-picker-validate__button{position:relative;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.vd-picker-validate__button{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-ms-flex-align:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;height:36px;min-width:44px;font-size:14px;font-weight:500;border-radius:4px;padding:6px 8px;outline:0;text-transform:uppercase;text-decoration:none;overflow:hidden}.vd-picker-validate__button+.vd-picker-validate__button{margin-left:8px}.vd-picker-validate__button:hover:not(:disabled) .vd-picker-validate__effect{opacity:.1}.vd-picker-validate__button:disabled,.vd-picker-validate__button[disabled]{color:rgba(0,0,0,.26)!important;cursor:default}.vd-picker-validate__effect{position:absolute;top:0;left:0;right:0;bottom:0;opacity:0;-webkit-transition:opacity .45s cubic-bezier(.23,1,.32,1);transition:opacity .45s cubic-bezier(.23,1,.32,1);z-index:-1}.vd-picker__months-button{border:none;margin:0;padding:0;width:auto;overflow:visible;background:transparent;color:inherit;font:inherit;line-height:normal;-webkit-font-smoothing:inherit;-moz-osx-font-smoothing:inherit;-webkit-appearance:none}.vd-picker__months-button:active,.vd-picker__months-button:focus{outline:0;-webkit-box-shadow:0;box-shadow:0}.vd-picker__months-button[role=button],.vd-picker__months-button[type=button],.vd-picker__months-button[type=reset],.vd-picker__months-button[type=submit]{cursor:pointer}.vd-picker__months{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;height:274px}.vd-picker--bottomsheet .vd-picker__months{height:322px}@supports (padding-bottom:constant(safe-area-inset-bottom)){.vd-picker__months{--safe-area-inset-bottom:constant(safe-area-inset-bottom);padding-bottom:var(--safe-area-inset-bottom)}}@supports (padding-bottom:env(safe-area-inset-bottom)){.vd-picker__months{--safe-area-inset-bottom:env(safe-area-inset-bottom);padding-bottom:var(--safe-area-inset-bottom)}}.vd-picker__months-inner{position:relative;width:100%;height:100%;padding:0 12px}.vd-picker__months-inner,.vd-picker__months-list{display:-webkit-box;display:-ms-flexbox;display:flex}.vd-picker__months-list{position:absolute;top:0;left:0;right:0;bottom:0;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;-ms-flex-wrap:wrap;flex-wrap:wrap;justify-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.vd-picker__months-button{position:relative;height:48px;min-height:48px;width:100%;font-size:15px;font-weight:500;border-radius:2px;outline:none;-webkit-transition:background-color .3s;transition:background-color .3s;border:thin solid transparent}.vd-picker__months-button:hover{background-color:#eef1f8}.vd-picker__months-button:disabled,.vd-picker__months-button[disabled]{cursor:default;color:rgba(0,0,0,.26);pointer-events:none}.vd-picker__months-button__wrapper{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 33.33333%;flex:0 0 33.33333%;max-width:33.33333%;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:25%;min-height:25%;padding:4px 8px}.vd-picker__quarters-button{border:none;margin:0;padding:0;width:auto;overflow:visible;background:transparent;color:inherit;font:inherit;line-height:normal;-webkit-font-smoothing:inherit;-moz-osx-font-smoothing:inherit;-webkit-appearance:none}.vd-picker__quarters-button:active,.vd-picker__quarters-button:focus{outline:0;-webkit-box-shadow:0;box-shadow:0}.vd-picker__quarters-button[role=button],.vd-picker__quarters-button[type=button],.vd-picker__quarters-button[type=reset],.vd-picker__quarters-button[type=submit]{cursor:pointer}.vd-picker__quarters{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;height:274px}.vd-picker--bottomsheet .vd-picker__quarters{height:274px}@supports (padding-bottom:constant(safe-area-inset-bottom)){.vd-picker__quarters{--safe-area-inset-bottom:constant(safe-area-inset-bottom);padding-bottom:var(--safe-area-inset-bottom)}}@supports (padding-bottom:env(safe-area-inset-bottom)){.vd-picker__quarters{--safe-area-inset-bottom:env(safe-area-inset-bottom);padding-bottom:var(--safe-area-inset-bottom)}}.vd-picker__quarters-inner{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;width:100%;height:100%;padding:0 12px}.vd-picker__quarters-list{position:absolute;top:0;left:0;right:0;bottom:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;-ms-flex-wrap:wrap;flex-wrap:wrap;justify-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.vd-picker__quarters-button{position:relative;height:48px;min-height:48px;width:100%;font-size:15px;font-weight:500;border-radius:2px;outline:none;-webkit-transition:background-color .3s;transition:background-color .3s;border:thin solid transparent}.vd-picker__quarters-button:hover{background-color:#eef1f8}.vd-picker__quarters-button:disabled,.vd-picker__quarters-button[disabled]{cursor:default;color:rgba(0,0,0,.26);pointer-events:none}.vd-picker__quarters-button__wrapper{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 1 100%;flex:1 1 100%;max-width:1 1 100%;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:25%;min-height:25%;padding:4px 8px}.slide-x-transition-enter-active,.slide-x-transition-leave-active{-webkit-transition:all .3s cubic-bezier(.25,.8,.5,1);transition:all .3s cubic-bezier(.25,.8,.5,1);-webkit-transition-property:opacity,height,-webkit-transform;transition-property:opacity,height,-webkit-transform;transition-property:opacity,transform,height;transition-property:opacity,transform,height,-webkit-transform}.slide-x-transition-enter,.slide-x-transition-leave-to{opacity:0;-webkit-transform:translateX(-15px);transform:translateX(-15px)}.slide-y-transition-enter-active,.slide-y-transition-leave-active{-webkit-transition:all .3s cubic-bezier(.25,.8,.5,1);transition:all .3s cubic-bezier(.25,.8,.5,1);-webkit-transition-property:opacity,height,-webkit-transform;transition-property:opacity,height,-webkit-transform;transition-property:opacity,transform,height;transition-property:opacity,transform,height,-webkit-transform}.slide-y-transition-enter,.slide-y-transition-leave-to{opacity:0;-webkit-transform:translateY(-15px);transform:translateY(-15px)}.scale-transition-enter-active,.scale-transition-leave-active{-webkit-transition:all .3s cubic-bezier(.25,.8,.5,1);transition:all .3s cubic-bezier(.25,.8,.5,1);-webkit-transition-property:opacity,height,-webkit-transform;transition-property:opacity,height,-webkit-transform;transition-property:opacity,transform,height;transition-property:opacity,transform,height,-webkit-transform}.scale-transition-enter,.scale-transition-leave,.scale-transition-leave-to{opacity:0;-webkit-transform:scale(0);transform:scale(0)}.slide-in-out-transition-enter-active,.slide-in-out-transition-leave-active{-webkit-transition:all .3s cubic-bezier(.25,.8,.5,1);transition:all .3s cubic-bezier(.25,.8,.5,1);-webkit-transition-property:opacity,height,-webkit-transform;transition-property:opacity,height,-webkit-transform;transition-property:opacity,transform,height;transition-property:opacity,transform,height,-webkit-transform}.slide-in-out-transition-enter,.slide-in-out-transition-leave-to{opacity:0;-webkit-transform:translateY(100%);transform:translateY(100%)}.slide-h-next-enter-active,.slide-h-next-leave-active,.slide-h-prev-enter-active,.slide-h-prev-leave-active,.slide-v-next-enter-active,.slide-v-next-leave-active,.slide-v-prev-enter-active,.slide-v-prev-leave-active{-webkit-transition:all .3s cubic-bezier(.25,.8,.5,1);transition:all .3s cubic-bezier(.25,.8,.5,1);-webkit-transition-property:opacity,height,-webkit-transform;transition-property:opacity,height,-webkit-transform;transition-property:opacity,transform,height;transition-property:opacity,transform,height,-webkit-transform;position:absolute}.slide-h-next-enter{opacity:0;-webkit-transform:translateX(100%);transform:translateX(100%)}.slide-h-next-leave-to{opacity:0;-webkit-transform:translateX(-100%);transform:translateX(-100%)}.slide-h-prev-leave-to{opacity:0;-webkit-transform:translateX(100%);transform:translateX(100%)}.slide-h-prev-enter{opacity:0;-webkit-transform:translateX(-100%);transform:translateX(-100%)}.vd-picker__controls-year.vd-picker__controls-year--center .slide-h-next-enter,.vd-picker__controls-year.vd-picker__controls-year--center .slide-h-prev-leave-to{-webkit-transform:translateX(-50%) translateY(150%);transform:translateX(-50%) translateY(150%)}.vd-picker__controls-year.vd-picker__controls-year--center .slide-h-next-leave-to,.vd-picker__controls-year.vd-picker__controls-year--center .slide-h-prev-enter{-webkit-transform:translateX(-50%) translateY(-150%);transform:translateX(-50%) translateY(-150%)}.vd-picker--rtl .slide-h-next-enter,.vd-picker--rtl .slide-h-prev-leave-to{-webkit-transform:translateX(-100%);transform:translateX(-100%)}.vd-picker--rtl .slide-h-next-leave-to,.vd-picker--rtl .slide-h-prev-enter{-webkit-transform:translateX(100%);transform:translateX(100%)}.slide-v-next-leave-to{opacity:0;-webkit-transform:translateY(100%);transform:translateY(100%)}.slide-v-next-enter{opacity:0;-webkit-transform:translateY(-100%);transform:translateY(-100%)}.slide-v-prev-enter{opacity:0;-webkit-transform:translateY(100%);transform:translateY(100%)}.slide-v-prev-leave-to{opacity:0;-webkit-transform:translateY(-100%);transform:translateY(-100%)}.yearMonth-enter-active,.yearMonth-leave-active{position:absolute;-webkit-transition:opacity .3s;transition:opacity .3s}.yearMonth-enter,.yearMonth-leave-to{opacity:0}.vd-picker__years{position:relative;height:322px;list-style-type:none;text-align:center;margin:0;padding:8px 0;overflow-y:scroll;-webkit-overflow-scrolling:touch}.vd-picker--bottomsheet .vd-picker__years{height:370px}@supports (padding-bottom:constant(safe-area-inset-bottom)){.vd-picker__years{--safe-area-inset-bottom:constant(safe-area-inset-bottom);padding-bottom:calc(8px + var(--safe-area-inset-bottom))}}@supports (padding-bottom:env(safe-area-inset-bottom)){.vd-picker__years{--safe-area-inset-bottom:env(safe-area-inset-bottom);padding-bottom:calc(8px + var(--safe-area-inset-bottom))}}.vd-picker--validate .vd-picker__years{border-bottom:1px solid #eef1f8}.vd-picker__years li{position:relative;cursor:pointer;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-line-pack:center;align-content:center;padding:8px 0;margin-left:12px;margin-right:12px;height:40px;min-height:40px;width:calc(100% - 24px);font-size:15px;font-weight:500;outline:none;-webkit-transition:background-color .3s;transition:background-color .3s;border:thin solid transparent}.vd-picker--bottomsheet .vd-picker__years li{height:48px;min-height:48px}.vd-picker__years li:hover{background-color:#eef1f8}.vd-picker__years li:disabled,.vd-picker__years li[disabled]{cursor:default;color:rgba(0,0,0,.26);pointer-events:none}.vd-picker__years li+li{margin-top:2px}\"],\"sourceRoot\":\"\"}]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC05LnVzZVsxXSEuL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC05LnVzZVsyXSEuL25vZGVfbW9kdWxlcy9AbWF0aGlldXN0YW4vdnVlLWRhdGVwaWNrZXIvZGlzdC92dWUtZGF0ZXBpY2tlci5taW4uY3NzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7QUFDK0c7QUFDN0I7QUFDbEYsOEJBQThCLHNFQUEyQixDQUFDLDJGQUFxQztBQUMvRjtBQUNBLDJHQUEyRyxzQkFBc0IsWUFBWSxrQkFBa0IsYUFBYSxjQUFjLG1CQUFtQixlQUFlLGVBQWUscUNBQXFDLGVBQWUscUNBQXFDLFVBQVUsb0JBQW9CLFlBQVksaUdBQWlHLHNCQUFzQixvQkFBb0IsY0FBYyxhQUFhLGNBQWMsZUFBZSxxREFBcUQsc0JBQXNCLFNBQVMsYUFBYSxtQkFBbUIsZUFBZSxvQkFBb0IsYUFBYSxtQkFBbUIsZUFBZSxXQUFXLGVBQWUsa0JBQWtCLGtCQUFrQixxQkFBcUIsa0JBQWtCLGNBQWMsZ0JBQWdCLGtCQUFrQixnQkFBZ0Isc0JBQXNCLHNCQUFzQix1Q0FBdUMseUJBQXlCLGVBQWUsK0JBQStCLGVBQWUsbUJBQW1CLG1CQUFtQixpQkFBaUIsa0JBQWtCLHFCQUFxQix5QkFBeUIsNEJBQTRCLDREQUE0RCwrQkFBK0IsMERBQTBELDhDQUE4Qyx1REFBdUQsK0JBQStCLHFEQUFxRCw4Q0FBOEMsOERBQThELG9CQUFvQix1REFBdUQsVUFBVSxrRUFBa0UsOENBQThDLHNDQUFzQyxxQ0FBcUMsWUFBWSxTQUFTLFVBQVUsV0FBVyxpQkFBaUIsdUJBQXVCLGNBQWMsYUFBYSxtQkFBbUIsK0JBQStCLGdDQUFnQyx3QkFBd0IsdUZBQXVGLFVBQVUsYUFBYSx1TUFBdU0sZUFBZSxrQkFBa0Isa0JBQWtCLGFBQWEsY0FBYyxtQkFBbUIsY0FBYyxtQkFB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Q0FBbUMsMkJBQTJCLHdOQUF3TixxREFBcUQsNkNBQTZDLDZEQUE2RCxxREFBcUQsNkNBQTZDLCtEQUErRCxrQkFBa0Isb0JBQW9CLFVBQVUsbUNBQW1DLDJCQUEyQix1QkFBdUIsVUFBVSxvQ0FBb0MsNEJBQTRCLHVCQUF1QixVQUFVLG1DQUFtQywyQkFBMkIsb0JBQW9CLFVBQVUsb0NBQW9DLDRCQUE0QixpS0FBaUssb0RBQW9ELDRDQUE0QyxpS0FBaUsscURBQXFELDZDQUE2QywyRUFBMkUsb0NBQW9DLDRCQUE0QiwyRUFBMkUsbUNBQW1DLDJCQUEyQix1QkFBdUIsVUFBVSxtQ0FBbUMsMkJBQTJCLG9CQUFvQixVQUFVLG9DQUFvQyw0QkFBNEIsb0JBQW9CLFVBQVUsbUNBQW1DLDJCQUEyQix1QkFBdUIsVUFBVSxvQ0FBb0MsNEJBQTRCLGdEQUFnRCxrQkFBa0IsK0JBQStCLHVCQUF1QixxQ0FBcUMsVUFBVSxrQkFBa0Isa0JBQWtCLGFBQWEscUJBQXFCLGtCQUFrQixTQUFTLGNBQWMsa0JBQWtCLGlDQUFpQywwQ0FBMEMsYUFBYSw0REFBNEQsa0JBQWtCLDBEQUEwRCwwREFBMEQsdURBQXVELGtCQUFrQixxREFBcUQsMERBQTBELHVDQUF1QyxnQ0FBZ0MscUJBQXFCLGtCQUFrQixlQUFlLG9CQUFvQixvQkFBb0IsYUFBYSx3QkFBd0IscUJBQXFCLHVCQUF1Qix5QkFBeUIsc0JBQXNCLG1CQUFtQiwwQkFBMEIscUJBQXFCLGNBQWMsaUJBQWlCLGtCQUFrQixZQUFZLGdCQUFnQix3QkFBd0IsZUFBZSxnQkFBZ0IsYUFBYSx3Q0FBd0MsZ0NBQWdDLDhCQUE4Qiw2Q0FBNkMsWUFBWSxnQkFBZ0IsMkJBQTJCLHlCQUF5Qiw2REFBNkQsZUFBZSxzQkFBc0Isb0JBQW9CLHdCQUF3QixlQUFlLG1CQUFtQjtBQUNqcjRFO0FBQ0EsaUVBQWUsdUJBQXVCLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQG1hdGhpZXVzdGFuL3Z1ZS1kYXRlcGlja2VyL2Rpc3QvdnVlLWRhdGVwaWNrZXIubWluLmNzcz8wOGNhIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9jc3NXaXRoTWFwcGluZ1RvU3RyaW5nLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBcIi52ZC13cmFwcGVyLC52ZC13cmFwcGVyICosLnZkLXdyYXBwZXIgOmFmdGVyLC52ZC13cmFwcGVyIDpiZWZvcmV7Ym94LXNpemluZzpib3JkZXItYm94fS52ZC13cmFwcGVye3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6ZmxleDtmbGV4OjEgMSBhdXRvO2FsaWduLWl0ZW1zOmNlbnRlcjttYXgtd2lkdGg6MTAwJTtjdXJzb3I6ZGVmYXVsdH0udmQtd3JhcHBlcjpub3QoLnZkLXdyYXBwZXItLWlubGluZSl7Y3Vyc29yOnBvaW50ZXJ9LnZkLXdyYXBwZXI6YWN0aXZlLC52ZC13cmFwcGVyOmZvY3Vze291dGxpbmU6MH0udmQtd3JhcHBlci0taW5saW5le3dpZHRoOjMwNHB4O2JveC1zaGFkb3c6MCAzcHggMXB4IC0ycHggcmdiYSgwLDAsMCwuMiksMCAycHggMnB4IDAgcmdiYSgwLDAsMCwuMTQpLDAgMXB4IDVweCAwIHJnYmEoMCwwLDAsLjEyKX0udmQtd3JhcHBlci0tZGlzYWJsZWR7cG9pbnRlci1ldmVudHM6bm9uZX0udmQtYWN0aXZhdG9ye2Rpc3BsYXk6ZmxleDtmbGV4OjEgMSBhdXRvO21heC13aWR0aDoxMDAlfS52ZC1tZW51LC52ZC1tZW51ICosLnZkLW1lbnUgOmFmdGVyLC52ZC1tZW51IDpiZWZvcmV7Ym94LXNpemluZzpib3JkZXItYm94fS52ZC1tZW51e2Rpc3BsYXk6bm9uZX0udmQtbWVudS0tYXR0YWNoZWR7ZGlzcGxheTppbmxpbmV9LnZkLW1lbnVfX2FjdGl2YXRvcntkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2N1cnNvcjpwb2ludGVyfS52ZC1tZW51ICp7Y3Vyc29yOnBvaW50ZXJ9LnZkLW1lbnVfX2NvbnRlbnR7cG9zaXRpb246YWJzb2x1dGU7ZGlzcGxheTppbmxpbmUtYmxvY2s7Ym9yZGVyLXJhZGl1czo2cHg7bWF4LXdpZHRoOjgwJTtvdmVyZmxvdy15OmF1dG87b3ZlcmZsb3cteDpoaWRkZW47Y29udGFpbjpjb250ZW50O2JhY2tncm91bmQtY29sb3I6I2ZmZjt3aWxsLWNoYW5nZTp0cmFuc2Zvcm07Ym94LXNoYWRvdzowIDJweCA4cHggcmdiYSg1MCw1MCw5MywuMil9LnZkLW1lbnVfX2NvbnRlbnQtLWZpeGVke3Bvc2l0aW9uOmZpeGVkfS52ZC1tZW51X19jb250ZW50LS1ib3R0b21zaGVldHtwb3NpdGlvbjpmaXhlZDt0b3A6YXV0byFpbXBvcnRhbnQ7Ym90dG9tOjAhaW1wb3J0YW50O2xlZnQ6MCFpbXBvcnRhbnQ7cmlnaHQ6MCFpbXBvcnRhbnQ7d2lkdGg6MTAwJSFpbXBvcnRhbnQ7bWluLXdpZHRoOjEwMCUhaW1wb3J0YW50O2JvcmRlci1yYWRpdXM6MTJweCAxMnB4IDAgMH1Ac3VwcG9ydHMgKHBhZGRpbmctYm90dG9tOmNvbnN0YW50KHNhZmUtYXJlYS1pbnNldC1ib3R0b20pKXsudmQtbWVudV9fY29udGVudC0tYm90dG9tc2hlZXR7LS1zYWZlLWFyZWEtaW5zZXQtYm90dG9tOmNvbnN0YW50KHNhZmUtYXJlYS1pbnNldC1ib3R0b20pO3BhZGRpbmctYm90dG9tOnZhcigtLXNhZmUtYXJlYS1pbnNldC1ib3R0b20pfX1Ac3VwcG9ydHMgKHBhZGRpbmctYm90dG9tOmVudihzYWZlLWFyZWEtaW5zZXQtYm90dG9tKSl7LnZkLW1lbnVfX2NvbnRlbnQtLWJvdHRvbXNoZWV0ey0tc2FmZS1hcmVhLWluc2V0LWJvdHRvbTplbnYoc2FmZS1hcmVhLWluc2V0LWJvdHRvbSk7cGFkZGluZy1ib3R0b206dmFyKC0tc2FmZS1hcmVhLWluc2V0LWJvdHRvbSl9fS52ZC1tZW51LXRyYW5zaXRpb24tbGVhdmUtYWN0aXZlLC52ZC1tZW51LXRyYW5zaXRpb24tbGVhdmUtdG97cG9pbnRlci1ldmVudHM6bm9uZX0udmQtbWVudS10cmFuc2l0aW9uLWVudGVyLC52ZC1tZW51LXRyYW5zaXRpb24tbGVhdmUtdG97b3BhY2l0eTowfS52ZC1tZW51LXRyYW5zaXRpb24tZW50ZXItYWN0aXZlLC52ZC1tZW51LXRyYW5zaXRpb24tbGVhdmUtYWN0aXZle3RyYW5zaXRpb246YWxsIC4zcyBjdWJpYy1iZXppZXIoLjI1LC44LC4yNSwxKTt0cmFuc2l0aW9uLXByb3BlcnR5Om9wYWNpdHksdHJhbnNmb3JtfS52ZC1waWNrZXJfX2lucHV0LWNsZWFyX19pY29uIGJ1dHRvbntib3JkZXI6bm9uZTttYXJnaW46MDtwYWRkaW5nOjA7d2lkdGg6YXV0bztvdmVyZmxvdzp2aXNpYmxlO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Y29sb3I6aW5oZXJpdDtmb250OmluaGVyaXQ7bGluZS1oZWlnaHQ6bm9ybWFsOy13ZWJraXQtZm9udC1zbW9vdGhpbmc6aW5oZXJpdDstbW96LW9zeC1mb250LXNtb290aGluZzppbmhlcml0Oy13ZWJraXQtYXBwZWFyYW5jZTpub25lfS52ZC1waWNrZXJfX2lucHV0LWNsZWFyX19pY29uIGJ1dHRvbjphY3RpdmUsLnZkLXBpY2tlcl9faW5wdXQtY2xlYXJfX2ljb24gYnV0dG9uOmZvY3Vze291dGxpbmU6MDtib3gtc2hhZG93OjB9LnZkLXBpY2tlcl9faW5wdXQtY2xlYXJfX2ljb24gYnV0dG9uW3JvbGU9YnV0dG9uXSwudmQtcGlja2VyX19pbnB1dC1jbGVhcl9faWNvbiBidXR0b25bdHlwZT1idXR0b25dLC52ZC1waWNrZXJfX2lucHV0LWNsZWFyX19pY29uIGJ1dHRvblt0eXBlPXJlc2V0XSwudmQtcGlja2VyX19pbnB1dC1jbGVhcl9faWNvbiBidXR0b25bdHlwZT1zdWJtaXRde2N1cnNvcjpwb2ludGVyfS52ZC1waWNrZXJfX2lucHV0e3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6ZmxleDtmbGV4OjEgMSBhdXRvO2FsaWduLWl0ZW1zOmNlbnRlcjtjb2xvcjppbmhlcml0O21pbi1oZWlnaHQ6aW5oZXJpdH0udmQtd3JhcHBlci0tcnRsIC52ZC1waWNrZXJfX2lucHV0e2RpcmVjdGlvbjpydGx9LnZkLXdyYXBwZXItLXJ0bCAudmQtcGlja2VyX19pbnB1dCBidXR0b24sLnZkLXdyYXBwZXItLXJ0bCAudmQtcGlja2VyX19pbnB1dCBpbnB1dFt0eXBlPXRleHRde21hcmdpbjowIDhweCAwIDB9LnZkLXBpY2tlcl9faW5wdXQtLWRpc2FibGVke2N1cnNvcjpub3QtYWxsb3dlZDtwb2ludGVyLWV2ZW50czpub25lfS52ZC1waWNrZXJfX2lucHV0LS1kaXNhYmxlZCAudmQtcGlja2VyX19pbnB1dC1pY29uX193cmFwcGVyLC52ZC1waWNrZXJfX2lucHV0LS1kaXNhYmxlZCBpbnB1dHtvcGFjaXR5Oi4zOH0udmQtcGlja2VyX19pbnB1dC0tbm8tY2FsZW5kYXItaWNvbiBidXR0b24sLnZkLXBpY2tlcl9faW5wdXQtLW5vLWNhbGVuZGFyLWljb24gaW5wdXR7bWFyZ2luOjB9LnZkLXBpY2tlcl9faW5wdXQtY2xlYXJ7YWxpZ24tc2VsZjpmbGV4LXN0YXJ0O2xpbmUtaGVpZ2h0OjE7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lfS52ZC1waWNrZXJfX2lucHV0LWNsZWFyLC52ZC1waWNrZXJfX2lucHV0LWNsZWFyX19pY29ue2Rpc3BsYXk6aW5saW5lLWZsZXh9LnZkLXBpY2tlcl9faW5wdXQtY2xlYXJfX2ljb257anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7ZmxleDoxIDAgYXV0b30udmQtcGlja2VyX19pbnB1dC1jbGVhcl9faWNvbiwudmQtcGlja2VyX19pbnB1dC1jbGVhcl9faWNvbiAudmQtaWNvbi52ZC1pY29ue2hlaWdodDoyNHB4O21pbi13aWR0aDoyNHB4O3dpZHRoOjI0cHh9LnZkLXBpY2tlcl9faW5wdXQtaWNvbnthbGlnbi1zZWxmOmZsZXgtc3RhcnQ7bWFyZ2luLXRvcDo0cHg7bWFyZ2luLXJpZ2h0OmF1dG87cGFkZGluZy1yaWdodDo0cHg7bGluZS1oZWlnaHQ6MTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmV9LnZkLXBpY2tlcl9faW5wdXQtaWNvbiwudmQtcGlja2VyX19pbnB1dC1pY29uX193cmFwcGVye2Rpc3BsYXk6aW5saW5lLWZsZXh9LnZkLXBpY2tlcl9faW5wdXQtaWNvbl9fd3JhcHBlcnthbGlnbi1pdGVtczpjZW50ZXI7aGVpZ2h0OjI0cHg7ZmxleDoxIDAgYXV0bztqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO21pbi13aWR0aDoyNHB4O3dpZHRoOjI0cHh9LnZkLXBpY2tlcl9faW5wdXQgaW5wdXR7cG9zaXRpb246cmVsYXRpdmU7ZmxleDoxIDEgYXV0bzttYXgtaGVpZ2h0OjMycHg7cGFkZGluZzo4cHggMDttYXgtd2lkdGg6MTAwJTttaW4td2lkdGg6MDt3aWR0aDoxMDAlO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyLXN0eWxlOm5vbmU7Y29sb3I6aW5oZXJpdDtmb250LXN0cmV0Y2g6bm9ybWFsO2xpbmUtaGVpZ2h0OmluaGVyaXQ7Zm9udC1zaXplOjE2cHghaW1wb3J0YW50O2ZvbnQtd2VpZ2h0OjQwMDtmb250LWZhbWlseTppbmhlcml0O2NvbG9yOmN1cnJlbnRDb2xvcjtjdXJzb3I6aW5oZXJpdH0udmQtcGlja2VyX19pbnB1dCBpbnB1dDphY3RpdmUsLnZkLXBpY2tlcl9faW5wdXQgaW5wdXQ6Zm9jdXN7b3V0bGluZTowO2JveC1zaGFkb3c6bm9uZX0udmQtcGlja2VyX19pbnB1dCBpbnB1dC5wbGFjZWhvbGRlcntvcGFjaXR5Oi42fS52ZC1waWNrZXJfX2lucHV0IGlucHV0OjotbW96LXBsYWNlaG9sZGVye29wYWNpdHk6LjZ9LnZkLXBpY2tlcl9faW5wdXQgaW5wdXQ6OnBsYWNlaG9sZGVye29wYWNpdHk6LjZ9LnZkLXBpY2tlcl9faW5wdXQgaW5wdXQ6LW1vei1wbGFjZWhvbGRlciwudmQtcGlja2VyX19pbnB1dCBpbnB1dDo6LW1vei1wbGFjZWhvbGRlcntvcGFjaXR5Oi42fS52ZC1waWNrZXJfX2lucHV0IGlucHV0Oi1tcy1pbnB1dC1wbGFjZWhvbGRlcntvcGFjaXR5Oi42fS52ZC1waWNrZXJfX2lucHV0IGlucHV0Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVye29wYWNpdHk6LjZ9LnZkLWljb24udmQtaWNvbntkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xldHRlci1zcGFjaW5nOm5vcm1hbDtsaW5lLWhlaWdodDoxO3RleHQtaW5kZW50OjA7dHJhbnNpdGlvbjphbGwgLjNzIGN1YmljLWJlemllciguMjUsLjgsLjUsMSk7dHJhbnNpdGlvbi1wcm9wZXJ0eTp0cmFuc2Zvcm0sY29sb3I7dmVydGljYWwtYWxpZ246bWlkZGxlOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZX0udmQtaWNvbi0tbGlua3tjdXJzb3I6cG9pbnRlcn0udmQtaWNvbi0tZGlzYWJsZWR7cG9pbnRlci1ldmVudHM6bm9uZTtvcGFjaXR5Oi42fS52ZC1waWNrZXJfX3RpdGxlLWNsb3NlIGJ1dHRvbntib3JkZXI6bm9uZTttYXJnaW46MDtwYWRkaW5nOjA7d2lkdGg6YXV0bztvdmVyZmxvdzp2aXNpYmxlO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Y29sb3I6aW5oZXJpdDtmb250OmluaGVyaXQ7bGluZS1oZWlnaHQ6bm9ybWFsOy13ZWJraXQtZm9udC1zbW9vdGhpbmc6aW5oZXJpdDstbW96LW9zeC1mb250LXNtb290aGluZzppbmhlcml0Oy13ZWJraXQtYXBwZWFyYW5jZTpub25lfS52ZC1waWNrZXJfX3RpdGxlLWNsb3NlIGJ1dHRvbjphY3RpdmUsLnZkLXBpY2tlcl9fdGl0bGUtY2xvc2UgYnV0dG9uOmZvY3Vze291dGxpbmU6MDtib3gtc2hhZG93OjB9LnZkLXBpY2tlcl9fdGl0bGUtY2xvc2UgYnV0dG9uW3JvbGU9YnV0dG9uXSwudmQtcGlja2VyX190aXRsZS1jbG9zZSBidXR0b25bdHlwZT1idXR0b25dLC52ZC1waWNrZXJfX3RpdGxlLWNsb3NlIGJ1dHRvblt0eXBlPXJlc2V0XSwudmQtcGlja2VyX190aXRsZS1jbG9zZSBidXR0b25bdHlwZT1zdWJtaXRde2N1cnNvcjpwb2ludGVyfS52ZC1waWNrZXIsLnZkLXBpY2tlciAqLC52ZC1waWNrZXIgOmFmdGVyLC52ZC1waWNrZXIgOmJlZm9yZXtib3gtc2l6aW5nOmJvcmRlci1ib3h9LnZkLXBpY2tlcntkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3dpZHRoOjMwNHB4O2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXItcmFkaXVzOjZweDtib3gtc2hhZG93OjAgMnB4IDhweCByZ2JhKDUwLDUwLDkzLC4yKX0udmQtcGlja2VyOmFjdGl2ZSwudmQtcGlja2VyOmZvY3Vze291dGxpbmU6MH0udmQtcGlja2VyLS1ib3R0b21zaGVldHt3aWR0aDoxMDAlO2JveC1zaGFkb3c6bm9uZX0udmQtcGlja2VyLS1ib3R0b21zaGVldCAudmQtcGlja2VyLWhlYWRlcntib3JkZXItcmFkaXVzOjB9LnZkLXBpY2tlci0tcnRse2RpcmVjdGlvbjpydGx9LnZkLXBpY2tlcl9fdGl0bGV7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2FsaWduLWl0ZW1zOmNlbnRlcjtoZWlnaHQ6NDhweDtwYWRkaW5nOjhweCAxNnB4O2JvcmRlci1yYWRpdXM6MTJweCAxMnB4IDAgMH0udmQtcGlja2VyLS1ydGwgLnZkLXBpY2tlcl9fdGl0bGV7cGFkZGluZzowIDE2cHggMCAwfUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDo0ODBweCl7LnZkLXBpY2tlcl9fdGl0bGV7ZGlzcGxheTpub25lfX0udmQtcGlja2VyX190aXRsZSBwe21hcmdpbjowfS52ZC1waWNrZXJfX3RpdGxlLWNsb3Nle3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO2hlaWdodDoyNHB4O3dpZHRoOjI0cHg7Ym9yZGVyOm5vbmU7b3V0bGluZTpub25lO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lfS52ZC1waWNrZXJfX3RpdGxlLWNsb3NlIHN2Z3t3aWR0aDoyNHB4O2hlaWdodDoyNHB4fS52ZC1waWNrZXJfX2JvZHl7cG9zaXRpb246cmVsYXRpdmU7ZmxleDoxIDEgMTAwJTtmbGV4LWRpcmVjdGlvbjpjb2x1bW47aGVpZ2h0OmF1dG87b3ZlcmZsb3c6aGlkZGVuO3otaW5kZXg6MH0udmQtb3ZlcmxheSwudmQtcGlja2VyX19ib2R5e2Rpc3BsYXk6ZmxleH0udmQtb3ZlcmxheXtwb3NpdGlvbjpmaXhlZDt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDthbGlnbi1pdGVtczpjZW50ZXI7Ym9yZGVyLXJhZGl1czppbmhlcml0O2p1c3RpZnktY29udGVudDpjZW50ZXI7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2l0aW9uOi4zcyBjdWJpYy1iZXppZXIoLjI1LC44LC41LDEpLHotaW5kZXggMW1zfS52ZC1vdmVybGF5X19jb250ZW50e3Bvc2l0aW9uOnJlbGF0aXZlfS52ZC1vdmVybGF5X19pbm5lcntwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7cmlnaHQ6MDt0b3A6MDtib3R0b206MDtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlO2JvcmRlci1yYWRpdXM6aW5oZXJpdDt0cmFuc2l0aW9uOmluaGVyaXQ7d2lsbC1jaGFuZ2U6b3BhY2l0eX0udmQtb3ZlcmxheS0tYWJzb2x1dGV7cG9zaXRpb246YWJzb2x1dGV9LnZkLW92ZXJsYXktLWFjdGl2ZXtwb2ludGVyLWV2ZW50czphdXRvfS52ZC1waWNrZXJfX2NvbnRyb2xzLWxhYmVsIGJ1dHRvbnttYXJnaW46MDt3aWR0aDphdXRvO292ZXJmbG93OnZpc2libGU7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtjb2xvcjppbmhlcml0O2ZvbnQ6aW5oZXJpdDtsaW5lLWhlaWdodDpub3JtYWw7LXdlYmtpdC1mb250LXNtb290aGluZzppbmhlcml0Oy1tb3otb3N4LWZvbnQtc21vb3RoaW5nOmluaGVyaXQ7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmV9LnZkLXBpY2tlcl9fY29udHJvbHMtbGFiZWwgYnV0dG9uOmFjdGl2ZSwudmQtcGlja2VyX19jb250cm9scy1sYWJlbCBidXR0b246Zm9jdXN7b3V0bGluZTowO2JveC1zaGFkb3c6MH0udmQtcGlja2VyX19jb250cm9scy1sYWJlbCBidXR0b25bcm9sZT1idXR0b25dLC52ZC1waWNrZXJfX2NvbnRyb2xzLWxhYmVsIGJ1dHRvblt0eXBlPWJ1dHRvbl0sLnZkLXBpY2tlcl9fY29udHJvbHMtbGFiZWwgYnV0dG9uW3R5cGU9cmVzZXRdLC52ZC1waWNrZXJfX2NvbnRyb2xzLWxhYmVsIGJ1dHRvblt0eXBlPXN1Ym1pdF17Y3Vyc29yOnBvaW50ZXJ9LnZkLXBpY2tlcl9fY29udHJvbHN7ZGlzcGxheTpmbGV4O2hlaWdodDo0OHB4O3RleHQtYWxpZ246Y2VudGVyO3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjEwMCV9LnZkLXBpY2tlcl9fY29udHJvbHMtd3JhcHBlcntvdmVyZmxvdzpoaWRkZW47anVzdGlmeS1jb250ZW50OmNlbnRlcn0udmQtcGlja2VyX19jb250cm9scy1tb250aCwudmQtcGlja2VyX19jb250cm9scy13cmFwcGVyLC52ZC1waWNrZXJfX2NvbnRyb2xzLXllYXJ7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtmbGV4OjF9LnZkLXBpY2tlcl9fY29udHJvbHMtbW9udGh7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS52ZC1waWNrZXJfX2NvbnRyb2xzLXllYXJ7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9LnZkLXBpY2tlcl9fY29udHJvbHMteWVhci52ZC1waWNrZXJfX2NvbnRyb2xzLXllYXItLWNlbnRlcntqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS52ZC1waWNrZXJfX2NvbnRyb2xzLWxhYmVse3BhZGRpbmc6OHB4IDRweH0udmQtcGlja2VyX19jb250cm9scy1sYWJlbCBidXR0b257cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpmbGV4O2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjUwMDtsaW5lLWhlaWdodDoxNXB4O3BhZGRpbmc6MDtib3JkZXI6bm9uZTtvdXRsaW5lOm5vbmU7dHJhbnNpdGlvbjpjb2xvciAuM3N9LnZkLXBpY2tlcl9fY29udHJvbHMtbGFiZWwgYnV0dG9uOm5vdCg6aG92ZXIpOm5vdCg6Zm9jdXMpe2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0udmQtcGlja2VyX19jb250cm9scy1sYWJlbCBidXR0b246ZGlzYWJsZWQsLnZkLXBpY2tlcl9fY29udHJvbHMtbGFiZWwgYnV0dG9uW2Rpc2FibGVkXXtjdXJzb3I6ZGVmYXVsdDtjb2xvcjpyZ2JhKDAsMCwwLC4yNil9LnZkLXBpY2tlcl9fY29udHJvbHMgYnV0dG9uLnZkLXBpY2tlcl9fY29udHJvbHMtbmV4dCwudmQtcGlja2VyX19jb250cm9scyBidXR0b24udmQtcGlja2VyX19jb250cm9scy1wcmV2e3Bvc2l0aW9uOnJlbGF0aXZlO2ZsZXg6MCAwIDQwcHg7aGVpZ2h0OjQ4cHg7d2lkdGg6NDhweDtwYWRkaW5nOjAgMCAwIDI0cHg7Ym9yZGVyOm5vbmU7b3V0bGluZTpub25lO2NvbG9yOnJnYmEoMCwwLDAsLjg3KTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50Oy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6cG9pbnRlcn1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6NzY4cHgpey52ZC1waWNrZXJfX2NvbnRyb2xzIGJ1dHRvbi52ZC1waWNrZXJfX2NvbnRyb2xzLW5leHQsLnZkLXBpY2tlcl9fY29udHJvbHMgYnV0dG9uLnZkLXBpY2tlcl9fY29udHJvbHMtcHJldntwYWRkaW5nOjAgOHB4fX0udmQtcGlja2VyX19jb250cm9scyBidXR0b24udmQtcGlja2VyX19jb250cm9scy1uZXh0OmRpc2FibGVkLC52ZC1waWNrZXJfX2NvbnRyb2xzIGJ1dHRvbi52ZC1waWNrZXJfX2NvbnRyb2xzLW5leHRbZGlzYWJsZWRdLC52ZC1waWNrZXJfX2NvbnRyb2xzIGJ1dHRvbi52ZC1waWNrZXJfX2NvbnRyb2xzLXByZXY6ZGlzYWJsZWQsLnZkLXBpY2tlcl9fY29udHJvbHMgYnV0dG9uLnZkLXBpY2tlcl9fY29udHJvbHMtcHJldltkaXNhYmxlZF17Y3Vyc29yOmRlZmF1bHR9LnZkLXBpY2tlcl9fY29udHJvbHMgYnV0dG9uLnZkLXBpY2tlcl9fY29udHJvbHMtbmV4dDpkaXNhYmxlZCBzdmcsLnZkLXBpY2tlcl9fY29udHJvbHMgYnV0dG9uLnZkLXBpY2tlcl9fY29udHJvbHMtbmV4dFtkaXNhYmxlZF0gc3ZnLC52ZC1waWNrZXJfX2NvbnRyb2xzIGJ1dHRvbi52ZC1waWNrZXJfX2NvbnRyb2xzLXByZXY6ZGlzYWJsZWQgc3ZnLC52ZC1waWNrZXJfX2NvbnRyb2xzIGJ1dHRvbi52ZC1waWNrZXJfX2NvbnRyb2xzLXByZXZbZGlzYWJsZWRdIHN2Z3tjb2xvcjpyZ2JhKDAsMCwwLC4yNil9LnZkLXBpY2tlci0tcnRsIC52ZC1waWNrZXJfX2NvbnRyb2xzIGJ1dHRvbi52ZC1waWNrZXJfX2NvbnRyb2xzLW5leHQsLnZkLXBpY2tlci0tcnRsIC52ZC1waWNrZXJfX2NvbnRyb2xzIGJ1dHRvbi52ZC1waWNrZXJfX2NvbnRyb2xzLXByZXZ7dHJhbnNmb3JtOnJvdGF0ZSgxODBkZWcpfS52ZC1waWNrZXJfX2NvbnRyb2xzIGJ1dHRvbi52ZC1waWNrZXJfX2NvbnRyb2xzLW5leHR7cGFkZGluZzowIDI0cHggMCAwfUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDo3NjhweCl7LnZkLXBpY2tlcl9fY29udHJvbHMgYnV0dG9uLnZkLXBpY2tlcl9fY29udHJvbHMtbmV4dHtwYWRkaW5nOjAgOHB4fX0udmQtcGlja2VyX19jb250cm9scyBzdmd7d2lkdGg6MjRweDtoZWlnaHQ6MjRweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LnZkLXBpY2tlci1oZWFkZXJ7Y29sb3I6I2ZmZjtwYWRkaW5nOjE2cHg7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmbGV4LXdyYXA6d3JhcDtsaW5lLWhlaWdodDoxO21pbi1oZWlnaHQ6ODBweDtoZWlnaHQ6ODBweDtib3JkZXItcmFkaXVzOjZweCA2cHggMCAwfUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDo3NjhweCl7LnZkLXBpY2tlci1oZWFkZXJ7bWluLWhlaWdodDo4NXB4O2hlaWdodDo4NXB4fX0udmQtcGlja2VyLWhlYWRlci0tcmFuZ2UgLnZkLXBpY2tlci1oZWFkZXJfX3dyYXB7ZmxleDoxIDEgYXV0bztmbGV4LWRpcmVjdGlvbjpjb2x1bW47anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59LnZkLXBpY2tlci1oZWFkZXItLXJhbmdlIC52ZC1waWNrZXItaGVhZGVyX19kYXRle2ZvbnQtc2l6ZToxOHB4O2hlaWdodDoyNnB4fUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDo3NjhweCl7LnZkLXBpY2tlci1oZWFkZXItLXJhbmdlIC52ZC1waWNrZXItaGVhZGVyX19kYXRle2ZvbnQtc2l6ZToyMnB4O2hlaWdodDozMHB4fX0udmQtcGlja2VyLWhlYWRlci0teWVhciAudmQtcGlja2VyLWhlYWRlcl9feWVhcntmbGV4OjEgMSBhdXRvO2ZvbnQtc2l6ZToyMnB4O2hlaWdodDozMHB4fS52ZC1waWNrZXItaGVhZGVyX195ZWFye2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmlubGluZS1mbGV4O2ZvbnQtc2l6ZToxNHB4O21hcmdpbi1ib3R0b206OHB4O29wYWNpdHk6LjY7dHJhbnNpdGlvbjpvcGFjaXR5IC4zc30udmQtcGlja2VyLWhlYWRlcl9feWVhcjpmb2N1czpub3QoLnZkLXBpY2tlci1oZWFkZXJfX3llYXItLWFjdGl2ZSksLnZkLXBpY2tlci1oZWFkZXJfX3llYXI6aG92ZXI6bm90KC52ZC1waWNrZXItaGVhZGVyX195ZWFyLS1hY3RpdmUpe2N1cnNvcjpwb2ludGVyO29wYWNpdHk6MX0udmQtcGlja2VyLWhlYWRlcl9feWVhci0tYWN0aXZle29wYWNpdHk6MTtjdXJzb3I6ZGVmYXVsdH0udmQtcGlja2VyLWhlYWRlcl9fZGF0ZSwudmQtcGlja2VyLWhlYWRlcl9fd3JhcHtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmZsZXg7d2lkdGg6MTAwJX0udmQtcGlja2VyLWhlYWRlcl9fZGF0ZXtmb250LXNpemU6MjJweDtoZWlnaHQ6MzBweDt0ZXh0LWFsaWduOmxlZnQ7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmctYm90dG9tOjhweDttYXJnaW4tYm90dG9tOi04cHg7b3BhY2l0eTouNjt0cmFuc2l0aW9uOm9wYWNpdHkgLjNzfS52ZC1waWNrZXItaGVhZGVyX19kYXRlOmZvY3VzOm5vdCgudmQtcGlja2VyLWhlYWRlcl9fZGF0ZS0tYWN0aXZlKSwudmQtcGlja2VyLWhlYWRlcl9fZGF0ZTpob3Zlcjpub3QoLnZkLXBpY2tlci1oZWFkZXJfX2RhdGUtLWFjdGl2ZSl7Y3Vyc29yOnBvaW50ZXI7b3BhY2l0eToxfS52ZC1waWNrZXItaGVhZGVyX19kYXRlLS1hY3RpdmV7b3BhY2l0eToxO2N1cnNvcjpkZWZhdWx0fUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDo3NjhweCl7LnZkLXBpY2tlci1oZWFkZXJfX2RhdGV7Zm9udC1zaXplOjI0cHg7aGVpZ2h0OjMycHh9fS52ZC1waWNrZXItcHJlc2V0e2JvcmRlcjpub25lO21hcmdpbjowO3BhZGRpbmc6MDt3aWR0aDphdXRvO292ZXJmbG93OnZpc2libGU7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtjb2xvcjppbmhlcml0O2ZvbnQ6aW5oZXJpdDtsaW5lLWhlaWdodDpub3JtYWw7LXdlYmtpdC1mb250LXNtb290aGluZzppbmhlcml0Oy1tb3otb3N4LWZvbnQtc21vb3RoaW5nOmluaGVyaXQ7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmV9LnZkLXBpY2tlci1wcmVzZXQ6YWN0aXZlLC52ZC1waWNrZXItcHJlc2V0OmZvY3Vze291dGxpbmU6MDtib3gtc2hhZG93OjB9LnZkLXBpY2tlci1wcmVzZXRbcm9sZT1idXR0b25dLC52ZC1waWNrZXItcHJlc2V0W3R5cGU9YnV0dG9uXSwudmQtcGlja2VyLXByZXNldFt0eXBlPXJlc2V0XSwudmQtcGlja2VyLXByZXNldFt0eXBlPXN1Ym1pdF17Y3Vyc29yOnBvaW50ZXJ9LnZkLXBpY2tlci1wcmVzZXRze3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6ZmxleDtwYWRkaW5nOjE2cHggMTJweH1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6NDgwcHgpey52ZC1waWNrZXItcHJlc2V0c3twYWRkaW5nOjE2cHggMTJweCA4cHh9fS52ZC1waWNrZXItcHJlc2V0c19fd3JhcHBlcntmbGV4OjEgMSBhdXRvO2ZsZXgtd3JhcDp3cmFwO3dpZHRoOjEwMCV9LnZkLXBpY2tlci1wcmVzZXQsLnZkLXBpY2tlci1wcmVzZXRzX193cmFwcGVye3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6ZmxleH0udmQtcGlja2VyLXByZXNldHthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtmbGV4OjAgMCA1MCU7bWF4LXdpZHRoOjUwJTtwYWRkaW5nOjAgOHB4O2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjE0cHg7b3ZlcmZsb3c6aGlkZGVuO2JvcmRlcjowIHNvbGlkICNlZWYxZjg7dHJhbnNpdGlvbjpvcGFjaXR5IC4zcyBjdWJpYy1iZXppZXIoLjI1LC44LC41LDEpfS52ZC1waWNrZXItLWJvdHRvbXNoZWV0IC52ZC1waWNrZXItcHJlc2V0LC52ZC1waWNrZXItcHJlc2V0e21pbi1oZWlnaHQ6MzJweDtoZWlnaHQ6MzJweH0udmQtcGlja2VyLXByZXNldDpudGgtY2hpbGQob2RkKXtib3JkZXItd2lkdGg6MCAxcHggMXB4fS52ZC1waWNrZXItcHJlc2V0Om50aC1jaGlsZChvZGQpOmZpcnN0LWNoaWxke2JvcmRlci13aWR0aDoxcHh9LnZkLXBpY2tlci1wcmVzZXQ6bnRoLWNoaWxkKDJuKXtib3JkZXItd2lkdGg6MCAxcHggMXB4IDB9LnZkLXBpY2tlci1wcmVzZXQ6bnRoLWNoaWxkKDJuKTpudGgtY2hpbGQoMil7Ym9yZGVyLXdpZHRoOjFweCAxcHggMXB4IDB9LnZkLXBpY2tlci1wcmVzZXRfX2VmZmVjdHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtvcGFjaXR5OjA7dHJhbnNpdGlvbjpvcGFjaXR5IC4zcyBjdWJpYy1iZXppZXIoLjI1LC44LC41LDEpO3otaW5kZXg6MH0udmQtcGlja2VyLXByZXNldF9fbmFtZXtwb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4OjF9LnZkLXBpY2tlci1wcmVzZXQtLXNlbGVjdGVkLC52ZC1waWNrZXItcHJlc2V0OmhvdmVyOm5vdCgudmQtcGlja2VyLXByZXNldC0tZGlzYWJsZWQpe2NvbG9yOiNmZmZ9LnZkLXBpY2tlci1wcmVzZXQtLXNlbGVjdGVkIC52ZC1waWNrZXItcHJlc2V0X19lZmZlY3QsLnZkLXBpY2tlci1wcmVzZXQ6aG92ZXI6bm90KC52ZC1waWNrZXItcHJlc2V0LS1kaXNhYmxlZCkgLnZkLXBpY2tlci1wcmVzZXRfX2VmZmVjdHtvcGFjaXR5OjF9LnZkLXBpY2tlci1wcmVzZXQtLXNlbGVjdGVke3BvaW50ZXItZXZlbnRzOm5vbmV9LnZkLXBpY2tlci1wcmVzZXQtLWRpc2FibGVke2NvbG9yOnJnYmEoOTMsMTA2LDEzNywuMik7Y3Vyc29yOm5vdC1hbGxvd2VkO3BvaW50ZXItZXZlbnRzOm5vbmV9LnZkLXBpY2tlcl9fdGFibGV7cG9zaXRpb246cmVsYXRpdmU7cGFkZGluZzowIDEycHg7aGVpZ2h0OjI3NHB4fS52ZC1waWNrZXItLWJvdHRvbXNoZWV0IC52ZC1waWNrZXJfX3RhYmxle2hlaWdodDozMjJweH0udmQtcGlja2VyX190YWJsZS13ZWVre2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6bm93cmFwO2ZsZXg6MSAxIDEwMCU7bWF4LXdpZHRoOjEwMCU7cGFkZGluZzo4cHggMDtmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MThweDtmb250LXdlaWdodDo1MDA7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS52ZC1waWNrZXJfX3RhYmxlLXdlZWtkYXl7ZmxleDowIDAgMTQuMjg1NzElO21heC13aWR0aDoxNC4yODU3MSU7dGV4dC1hbGlnbjpjZW50ZXJ9LnZkLXBpY2tlcl9fdGFibGUtZGF5c19fd3JhcHBlcntwb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdzpoaWRkZW47aGVpZ2h0OjI0MHB4fS52ZC1waWNrZXItLWJvdHRvbXNoZWV0IC52ZC1waWNrZXJfX3RhYmxlLWRheXNfX3dyYXBwZXJ7aGVpZ2h0OjI4OHB4fS52ZC1waWNrZXJfX3RhYmxlLWRheXN7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO292ZXJmbG93OmhpZGRlbjt3aWR0aDoxMDAlfS52ZC1waWNrZXJfX3RhYmxlLWRheXtib3JkZXI6bm9uZTttYXJnaW46MDtwYWRkaW5nOjA7d2lkdGg6YXV0bztvdmVyZmxvdzp2aXNpYmxlO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Y29sb3I6aW5oZXJpdDtmb250OmluaGVyaXQ7bGluZS1oZWlnaHQ6bm9ybWFsOy13ZWJraXQtZm9udC1zbW9vdGhpbmc6aW5oZXJpdDstbW96LW9zeC1mb250LXNtb290aGluZzppbmhlcml0Oy13ZWJraXQtYXBwZWFyYW5jZTpub25lfS52ZC1waWNrZXJfX3RhYmxlLWRheTphY3RpdmUsLnZkLXBpY2tlcl9fdGFibGUtZGF5OmZvY3Vze291dGxpbmU6MDtib3gtc2hhZG93OjB9LnZkLXBpY2tlcl9fdGFibGUtZGF5W3JvbGU9YnV0dG9uXSwudmQtcGlja2VyX190YWJsZS1kYXlbdHlwZT1idXR0b25dLC52ZC1waWNrZXJfX3RhYmxlLWRheVt0eXBlPXJlc2V0XSwudmQtcGlja2VyX190YWJsZS1kYXlbdHlwZT1zdWJtaXRde2N1cnNvcjpwb2ludGVyfS52ZC1waWNrZXJfX3RhYmxlLWRheXtwb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDoxNC4yODU3MSU7aGVpZ2h0OjQwcHg7bGluZS1oZWlnaHQ6MTtmb250LXNpemU6MTJweDtmbG9hdDpsZWZ0O3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOmN1cnJlbnRDb2xvcjtmb250LXdlaWdodDo1MDA7dHJhbnNpdGlvbjphbGwgLjQ1cyBjdWJpYy1iZXppZXIoLjIzLDEsLjMyLDEpO292ZXJmbG93OmhpZGRlbn0udmQtcGlja2VyLS1ib3R0b21zaGVldCAudmQtcGlja2VyX190YWJsZS1kYXl7aGVpZ2h0OjQ4cHh9LnZkLXBpY2tlcl9fdGFibGUtZGF5X193cmFwcGVye3Bvc2l0aW9uOmFic29sdXRlO3RvcDoycHg7Ym90dG9tOjJweDtsZWZ0OjA7cmlnaHQ6MDtib3JkZXI6bm9uZX0udmQtcGlja2VyX190YWJsZS1kYXlfX3dyYXBwZXI6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7b3BhY2l0eTowO3dpZHRoOjUwJTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7ei1pbmRleDoxO3RyYW5zaXRpb24tcHJvcGVydHk6b3BhY2l0eX0udmQtcGlja2VyX190YWJsZS1kYXlfX3dyYXBwZXI6YWZ0ZXJ7Y29udGVudDpcXFwiXFxcIjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjUwJTt3aWR0aDpjYWxjKDEwMCUgKyAxcHgpO2hlaWdodDozNnB4O2JvcmRlcjoxcHggc29saWQ7YmFja2dyb3VuZC1jb2xvcjpjdXJyZW50Q29sb3I7b3BhY2l0eTouMTI7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTUwJSkgc2NhbGUoMCl9LnZkLXBpY2tlci0tYm90dG9tc2hlZXQgLnZkLXBpY2tlcl9fdGFibGUtZGF5X193cmFwcGVyOmFmdGVye2hlaWdodDo0NHB4fS52ZC1waWNrZXJfX3RhYmxlLWRheV9fY3VycmVudCwudmQtcGlja2VyX190YWJsZS1kYXlfX2VmZmVjdHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtNTAlKTt3aWR0aDozNnB4O2hlaWdodDozNnB4O2JvcmRlci1yYWRpdXM6NTAlO2JvcmRlcjoxcHggc29saWR9LnZkLXBpY2tlci0tYm90dG9tc2hlZXQgLnZkLXBpY2tlcl9fdGFibGUtZGF5X19jdXJyZW50LC52ZC1waWNrZXItLWJvdHRvbXNoZWV0IC52ZC1waWNrZXJfX3RhYmxlLWRheV9fZWZmZWN0e3dpZHRoOjQ0cHg7aGVpZ2h0OjQ0cHh9LnZkLXBpY2tlcl9fdGFibGUtZGF5X19jdXJyZW50e2NvbG9yOnJnYmEoMCwwLDAsLjg3KTt6LWluZGV4OjF9LnZkLXBpY2tlcl9fdGFibGUtZGF5X19lZmZlY3R7YmFja2dyb3VuZC1jb2xvcjpjdXJyZW50Q29sb3I7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTUwJSkgc2NhbGUoMCk7dHJhbnNpdGlvbjphbGwgLjQ1cyBjdWJpYy1iZXppZXIoLjIzLDEsLjMyLDEpO3otaW5kZXg6MX0udmQtcGlja2VyLS1yYW5nZS1zZWxlY3RpbmcgLnZkLXBpY2tlcl9fdGFibGUtZGF5X19lZmZlY3R7dHJhbnNpdGlvbjp1bnNldH0udmQtcGlja2VyX190YWJsZS1kYXlfX3RleHR7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjttYXJnaW46YXV0bzt3aWR0aDozNnB4O2hlaWdodDozNnB4O2NvbG9yOnJnYmEoMCwwLDAsLjg3KTt6LWluZGV4OjF9LnZkLXBpY2tlci0tYm90dG9tc2hlZXQgLnZkLXBpY2tlcl9fdGFibGUtZGF5X190ZXh0e3dpZHRoOjQ0cHg7aGVpZ2h0OjQ0cHh9LnZkLXBpY2tlcl9fdGFibGUtZGF5OmhvdmVyOm5vdCgudmQtcGlja2VyX190YWJsZS1kYXktLWRpc2FibGVkKTpub3QoLnZkLXBpY2tlcl9fdGFibGUtZGF5LS1zZWxlY3RlZCk6bm90KC52ZC1waWNrZXJfX3RhYmxlLWRheS0tYmV0d2VlbikgLnZkLXBpY2tlcl9fdGFibGUtZGF5X19lZmZlY3R7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTUwJSkgc2NhbGUoMSk7b3BhY2l0eTouMTJ9LnZkLXBpY2tlcl9fdGFibGUtZGF5OmhvdmVyOm5vdCgudmQtcGlja2VyX190YWJsZS1kYXktLWRpc2FibGVkKTpub3QoLnZkLXBpY2tlcl9fdGFibGUtZGF5LS1zZWxlY3RlZCk6bm90KC52ZC1waWNrZXJfX3RhYmxlLWRheS0tYmV0d2VlbikudmQtcGlja2VyX190YWJsZS1kYXktLXNlbGVjdC1lbmQgLnZkLXBpY2tlcl9fdGFibGUtZGF5X193cmFwcGVyOmJlZm9yZSwudmQtcGlja2VyX190YWJsZS1kYXk6aG92ZXI6bm90KC52ZC1waWNrZXJfX3RhYmxlLWRheS0tZGlzYWJsZWQpOm5vdCgudmQtcGlja2VyX190YWJsZS1kYXktLXNlbGVjdGVkKTpub3QoLnZkLXBpY2tlcl9fdGFibGUtZGF5LS1iZXR3ZWVuKS52ZC1waWNrZXJfX3RhYmxlLWRheS0tc2VsZWN0LXN0YXJ0IC52ZC1waWNrZXJfX3RhYmxlLWRheV9fd3JhcHBlcjpiZWZvcmV7b3BhY2l0eToxO3JpZ2h0OjB9LnZkLXBpY2tlci0tcnRsIC52ZC1waWNrZXJfX3RhYmxlLWRheTpob3Zlcjpub3QoLnZkLXBpY2tlcl9fdGFibGUtZGF5LS1kaXNhYmxlZCk6bm90KC52ZC1waWNrZXJfX3RhYmxlLWRheS0tc2VsZWN0ZWQpOm5vdCgudmQtcGlja2VyX190YWJsZS1kYXktLWJldHdlZW4pLnZkLXBpY2tlcl9fdGFibGUtZGF5LS1zZWxlY3QtZW5kIC52ZC1waWNrZXJfX3RhYmxlLWRheV9fd3JhcHBlcjpiZWZvcmUsLnZkLXBpY2tlci0tcnRsIC52ZC1waWNrZXJfX3RhYmxlLWRheTpob3Zlcjpub3QoLnZkLXBpY2tlcl9fdGFibGUtZGF5LS1kaXNhYmxlZCk6bm90KC52ZC1waWNrZXJfX3RhYmxlLWRheS0tc2VsZWN0ZWQpOm5vdCgudmQtcGlja2VyX190YWJsZS1kYXktLWJldHdlZW4pLnZkLXBpY2tlcl9fdGFibGUtZGF5LS1zZWxlY3Qtc3RhcnQgLnZkLXBpY2tlcl9fdGFibGUtZGF5X193cmFwcGVyOmJlZm9yZXtsZWZ0OjA7cmlnaHQ6dW5zZXR9LnZkLXBpY2tlcl9fdGFibGUtZGF5OmhvdmVyOm5vdCgudmQtcGlja2VyX190YWJsZS1kYXktLWRpc2FibGVkKTpub3QoLnZkLXBpY2tlcl9fdGFibGUtZGF5LS1zZWxlY3RlZCk6bm90KC52ZC1waWNrZXJfX3RhYmxlLWRheS0tYmV0d2VlbikudmQtcGlja2VyX190YWJsZS1kYXktLXNlbGVjdC1lbmQgLnZkLXBpY2tlcl9fdGFibGUtZGF5X193cmFwcGVyOmFmdGVyLC52ZC1waWNrZXJfX3RhYmxlLWRheTpob3Zlcjpub3QoLnZkLXBpY2tlcl9fdGFibGUtZGF5LS1kaXNhYmxlZCk6bm90KC52ZC1waWNrZXJfX3RhYmxlLWRheS0tc2VsZWN0ZWQpOm5vdCgudmQtcGlja2VyX190YWJsZS1kYXktLWJldHdlZW4pLnZkLXBpY2tlcl9fdGFibGUtZGF5LS1zZWxlY3Qtc3RhcnQgLnZkLXBpY2tlcl9fdGFibGUtZGF5X193cmFwcGVyOmFmdGVye3RyYW5zZm9ybTp0cmFuc2xhdGVYKC01MCUpIHNjYWxlKDEpO29wYWNpdHk6LjA4fS52ZC1waWNrZXJfX3RhYmxlLWRheTpob3Zlcjpub3QoLnZkLXBpY2tlcl9fdGFibGUtZGF5LS1kaXNhYmxlZCk6bm90KC52ZC1waWNrZXJfX3RhYmxlLWRheS0tc2VsZWN0ZWQpOm5vdCgudmQtcGlja2VyX190YWJsZS1kYXktLWJldHdlZW4pLnZkLXBpY2tlcl9fdGFibGUtZGF5LS1zZWxlY3QtZW5kIC52ZC1waWNrZXJfX3RhYmxlLWRheV9fZWZmZWN0LC52ZC1waWNrZXJfX3RhYmxlLWRheTpob3Zlcjpub3QoLnZkLXBpY2tlcl9fdGFibGUtZGF5LS1kaXNhYmxlZCk6bm90KC52ZC1waWNrZXJfX3RhYmxlLWRheS0tc2VsZWN0ZWQpOm5vdCgudmQtcGlja2VyX190YWJsZS1kYXktLWJldHdlZW4pLnZkLXBpY2tlcl9fdGFibGUtZGF5LS1zZWxlY3Qtc3RhcnQgLnZkLXBpY2tlcl9fdGFibGUtZGF5X19lZmZlY3R7b3BhY2l0eToxO3RyYW5zaXRpb246dW5zZXR9LnZkLXBpY2tlcl9fdGFibGUtZGF5OmhvdmVyOm5vdCgudmQtcGlja2VyX190YWJsZS1kYXktLWRpc2FibGVkKTpub3QoLnZkLXBpY2tlcl9fdGFibGUtZGF5LS1zZWxlY3RlZCk6bm90KC52ZC1waWNrZXJfX3RhYmxlLWRheS0tYmV0d2VlbikudmQtcGlja2VyX190YWJsZS1kYXktLXNlbGVjdC1lbmQgLnZkLXBpY2tlcl9fdGFibGUtZGF5X190ZXh0LC52ZC1waWNrZXJfX3RhYmxlLWRheTpob3Zlcjpub3QoLnZkLXBpY2tlcl9fdGFibGUtZGF5LS1kaXNhYmxlZCk6bm90KC52ZC1waWNrZXJfX3RhYmxlLWRheS0tc2VsZWN0ZWQpOm5vdCgudmQtcGlja2VyX190YWJsZS1kYXktLWJldHdlZW4pLnZkLXBpY2tlcl9fdGFibGUtZGF5LS1zZWxlY3Qtc3RhcnQgLnZkLXBpY2tlcl9fdGFibGUtZGF5X190ZXh0e2NvbG9yOiNmZmZ9LnZkLXBpY2tlcl9fdGFibGUtZGF5OmhvdmVyOm5vdCgudmQtcGlja2VyX190YWJsZS1kYXktLWRpc2FibGVkKTpub3QoLnZkLXBpY2tlcl9fdGFibGUtZGF5LS1zZWxlY3RlZCk6bm90KC52ZC1waWNrZXJfX3RhYmxlLWRheS0tYmV0d2VlbikudmQtcGlja2VyX190YWJsZS1kYXktLXNlbGVjdC1zdGFydCAudmQtcGlja2VyX190YWJsZS1kYXlfX3dyYXBwZXI6YmVmb3Jle2xlZnQ6MH0udmQtcGlja2VyLS1ydGwgLnZkLXBpY2tlcl9fdGFibGUtZGF5OmhvdmVyOm5vdCgudmQtcGlja2VyX190YWJsZS1kYXktLWRpc2FibGVkKTpub3QoLnZkLXBpY2tlcl9fdGFibGUtZGF5LS1zZWxlY3RlZCk6bm90KC52ZC1waWNrZXJfX3RhYmxlLWRheS0tYmV0d2VlbikudmQtcGlja2VyX190YWJsZS1kYXktLXNlbGVjdC1zdGFydCAudmQtcGlja2VyX190YWJsZS1kYXlfX3dyYXBwZXI6YmVmb3Jle3JpZ2h0OjA7bGVmdDp1bnNldH0udmQtcGlja2VyX190YWJsZS1kYXktLXNlbGVjdGVkIC52ZC1waWNrZXJfX3RhYmxlLWRheV9fZWZmZWN0e3RyYW5zZm9ybTp0cmFuc2xhdGVYKC01MCUpIHNjYWxlKDEpO29wYWNpdHk6MX0udmQtcGlja2VyX190YWJsZS1kYXktLXNlbGVjdGVkIC52ZC1waWNrZXJfX3RhYmxlLWRheV9fdGV4dHtjb2xvcjojZmZmfS52ZC1waWNrZXJfX3RhYmxlLWRheS0tYmV0d2Vlbjpub3QoLnZkLXBpY2tlcl9fdGFibGUtZGF5LS1kaXNhYmxlZCkgLnZkLXBpY2tlcl9fdGFibGUtZGF5X193cmFwcGVyOmFmdGVyLC52ZC1waWNrZXJfX3RhYmxlLWRheS0tZmlyc3QgLnZkLXBpY2tlcl9fdGFibGUtZGF5X193cmFwcGVyOmFmdGVyLC52ZC1waWNrZXJfX3RhYmxlLWRheS0taW4tcmFuZ2U6bm90KC52ZC1waWNrZXJfX3RhYmxlLWRheS0tZGlzYWJsZWQpIC52ZC1waWNrZXJfX3RhYmxlLWRheV9fd3JhcHBlcjphZnRlciwudmQtcGlja2VyX190YWJsZS1kYXktLWxhc3QgLnZkLXBpY2tlcl9fdGFibGUtZGF5X193cmFwcGVyOmFmdGVye3RyYW5zZm9ybTp0cmFuc2xhdGVYKC01MCUpIHNjYWxlKDEpfS52ZC1waWNrZXItLXJhbmdlLXNlbGVjdGluZyAudmQtcGlja2VyX190YWJsZS1kYXktLWZpcnN0IC52ZC1waWNrZXJfX3RhYmxlLWRheV9fd3JhcHBlcjphZnRlciwudmQtcGlja2VyLS1yYW5nZS1zZWxlY3RpbmcgLnZkLXBpY2tlcl9fdGFibGUtZGF5LS1sYXN0IC52ZC1waWNrZXJfX3RhYmxlLWRheV9fd3JhcHBlcjphZnRlciwudmQtcGlja2VyX190YWJsZS1kYXktLWluLXJhbmdlOm5vdCgudmQtcGlja2VyX190YWJsZS1kYXktLWRpc2FibGVkKSAudmQtcGlja2VyX190YWJsZS1kYXlfX3dyYXBwZXI6YWZ0ZXJ7b3BhY2l0eTouMDh9LnZkLXBpY2tlcl9fdGFibGUtZGF5LS1maXJzdCAudmQtcGlja2VyX190YWJsZS1kYXlfX3dyYXBwZXI6YmVmb3Jle29wYWNpdHk6MTtsZWZ0OjB9LnZkLXBpY2tlci0tcnRsIC52ZC1waWNrZXJfX3RhYmxlLWRheS0tZmlyc3QgLnZkLXBpY2tlcl9fdGFibGUtZGF5X193cmFwcGVyOmJlZm9yZXtyaWdodDowO2xlZnQ6dW5zZXR9LnZkLXBpY2tlcl9fdGFibGUtZGF5LS1sYXN0IC52ZC1waWNrZXJfX3RhYmxlLWRheV9fd3JhcHBlcjpiZWZvcmV7b3BhY2l0eToxO3JpZ2h0OjB9LnZkLXBpY2tlci0tcnRsIC52ZC1waWNrZXJfX3RhYmxlLWRheS0tbGFzdCAudmQtcGlja2VyX190YWJsZS1kYXlfX3dyYXBwZXI6YmVmb3Jle2xlZnQ6MDtyaWdodDp1bnNldH0udmQtcGlja2VyX190YWJsZS1kYXktLWxhc3Q6bm90KC52ZC1waWNrZXJfX3RhYmxlLWRheS0tc2VsZWN0LXN0YXJ0KSAudmQtcGlja2VyX190YWJsZS1kYXlfX2VmZmVjdHtvcGFjaXR5OjF9LnZkLXBpY2tlcl9fdGFibGUtZGF5LS1kaXNhYmxlZC52ZC1waWNrZXJfX3RhYmxlLWRheXtjdXJzb3I6ZGVmYXVsdH0udmQtcGlja2VyX190YWJsZS1kYXktLWRpc2FibGVkLnZkLXBpY2tlcl9fdGFibGUtZGF5IC52ZC1waWNrZXJfX3RhYmxlLWRheV9fdGV4dHtjb2xvcjpyZ2JhKDkzLDEwNiwxMzcsLjIpfS52ZC1waWNrZXItdmFsaWRhdGVfX2J1dHRvbntib3JkZXI6bm9uZTttYXJnaW46MDtwYWRkaW5nOjA7d2lkdGg6YXV0bztvdmVyZmxvdzp2aXNpYmxlO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Y29sb3I6aW5oZXJpdDtmb250OmluaGVyaXQ7bGluZS1oZWlnaHQ6bm9ybWFsOy13ZWJraXQtZm9udC1zbW9vdGhpbmc6aW5oZXJpdDstbW96LW9zeC1mb250LXNtb290aGluZzppbmhlcml0Oy13ZWJraXQtYXBwZWFyYW5jZTpub25lfS52ZC1waWNrZXItdmFsaWRhdGVfX2J1dHRvbjphY3RpdmUsLnZkLXBpY2tlci12YWxpZGF0ZV9fYnV0dG9uOmZvY3Vze291dGxpbmU6MDtib3gtc2hhZG93OjB9LnZkLXBpY2tlci12YWxpZGF0ZV9fYnV0dG9uW3JvbGU9YnV0dG9uXSwudmQtcGlja2VyLXZhbGlkYXRlX19idXR0b25bdHlwZT1idXR0b25dLC52ZC1waWNrZXItdmFsaWRhdGVfX2J1dHRvblt0eXBlPXJlc2V0XSwudmQtcGlja2VyLXZhbGlkYXRlX19idXR0b25bdHlwZT1zdWJtaXRde2N1cnNvcjpwb2ludGVyfS52ZC1waWNrZXItdmFsaWRhdGV7ZGlzcGxheTpmbGV4Oy1tcy1mbGV4LWFsaWduOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQ7cGFkZGluZzo4cHh9LnZkLXBpY2tlci12YWxpZGF0ZSwudmQtcGlja2VyLXZhbGlkYXRlX19idXR0b257cG9zaXRpb246cmVsYXRpdmU7YWxpZ24taXRlbXM6Y2VudGVyfS52ZC1waWNrZXItdmFsaWRhdGVfX2J1dHRvbntkaXNwbGF5OmlubGluZS1mbGV4O2ZsZXg6MCAwIGF1dG87LW1zLWZsZXgtYWxpZ246Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7aGVpZ2h0OjM2cHg7bWluLXdpZHRoOjQ0cHg7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwO2JvcmRlci1yYWRpdXM6NHB4O3BhZGRpbmc6NnB4IDhweDtvdXRsaW5lOjA7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO3RleHQtZGVjb3JhdGlvbjpub25lO292ZXJmbG93OmhpZGRlbn0udmQtcGlja2VyLXZhbGlkYXRlX19idXR0b24rLnZkLXBpY2tlci12YWxpZGF0ZV9fYnV0dG9ue21hcmdpbi1sZWZ0OjhweH0udmQtcGlja2VyLXZhbGlkYXRlX19idXR0b246aG92ZXI6bm90KDpkaXNhYmxlZCkgLnZkLXBpY2tlci12YWxpZGF0ZV9fZWZmZWN0e29wYWNpdHk6LjF9LnZkLXBpY2tlci12YWxpZGF0ZV9fYnV0dG9uOmRpc2FibGVkLC52ZC1waWNrZXItdmFsaWRhdGVfX2J1dHRvbltkaXNhYmxlZF17Y29sb3I6cmdiYSgwLDAsMCwuMjYpIWltcG9ydGFudDtjdXJzb3I6ZGVmYXVsdH0udmQtcGlja2VyLXZhbGlkYXRlX19lZmZlY3R7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7b3BhY2l0eTowO3RyYW5zaXRpb246b3BhY2l0eSAuNDVzIGN1YmljLWJlemllciguMjMsMSwuMzIsMSk7ei1pbmRleDotMX0udmQtcGlja2VyX19tb250aHMtYnV0dG9ue2JvcmRlcjpub25lO21hcmdpbjowO3BhZGRpbmc6MDt3aWR0aDphdXRvO292ZXJmbG93OnZpc2libGU7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtjb2xvcjppbmhlcml0O2ZvbnQ6aW5oZXJpdDtsaW5lLWhlaWdodDpub3JtYWw7LXdlYmtpdC1mb250LXNtb290aGluZzppbmhlcml0Oy1tb3otb3N4LWZvbnQtc21vb3RoaW5nOmluaGVyaXQ7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmV9LnZkLXBpY2tlcl9fbW9udGhzLWJ1dHRvbjphY3RpdmUsLnZkLXBpY2tlcl9fbW9udGhzLWJ1dHRvbjpmb2N1c3tvdXRsaW5lOjA7Ym94LXNoYWRvdzowfS52ZC1waWNrZXJfX21vbnRocy1idXR0b25bcm9sZT1idXR0b25dLC52ZC1waWNrZXJfX21vbnRocy1idXR0b25bdHlwZT1idXR0b25dLC52ZC1waWNrZXJfX21vbnRocy1idXR0b25bdHlwZT1yZXNldF0sLnZkLXBpY2tlcl9fbW9udGhzLWJ1dHRvblt0eXBlPXN1Ym1pdF17Y3Vyc29yOnBvaW50ZXJ9LnZkLXBpY2tlcl9fbW9udGhze3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6ZmxleDtmbGV4OjEgMSBhdXRvO2hlaWdodDoyNzRweH0udmQtcGlja2VyLS1ib3R0b21zaGVldCAudmQtcGlja2VyX19tb250aHN7aGVpZ2h0OjMyMnB4fUBzdXBwb3J0cyAocGFkZGluZy1ib3R0b206Y29uc3RhbnQoc2FmZS1hcmVhLWluc2V0LWJvdHRvbSkpey52ZC1waWNrZXJfX21vbnRoc3stLXNhZmUtYXJlYS1pbnNldC1ib3R0b206Y29uc3RhbnQoc2FmZS1hcmVhLWluc2V0LWJvdHRvbSk7cGFkZGluZy1ib3R0b206dmFyKC0tc2FmZS1hcmVhLWluc2V0LWJvdHRvbSl9fUBzdXBwb3J0cyAocGFkZGluZy1ib3R0b206ZW52KHNhZmUtYXJlYS1pbnNldC1ib3R0b20pKXsudmQtcGlja2VyX19tb250aHN7LS1zYWZlLWFyZWEtaW5zZXQtYm90dG9tOmVudihzYWZlLWFyZWEtaW5zZXQtYm90dG9tKTtwYWRkaW5nLWJvdHRvbTp2YXIoLS1zYWZlLWFyZWEtaW5zZXQtYm90dG9tKX19LnZkLXBpY2tlcl9fbW9udGhzLWlubmVye3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7cGFkZGluZzowIDEycHh9LnZkLXBpY2tlcl9fbW9udGhzLWlubmVyLC52ZC1waWNrZXJfX21vbnRocy1saXN0e2Rpc3BsYXk6ZmxleH0udmQtcGlja2VyX19tb250aHMtbGlzdHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtmbGV4OjEgMSBhdXRvO2ZsZXgtd3JhcDp3cmFwO2p1c3RpZnktaXRlbXM6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcn0udmQtcGlja2VyX19tb250aHMtYnV0dG9ue3Bvc2l0aW9uOnJlbGF0aXZlO2hlaWdodDo0OHB4O21pbi1oZWlnaHQ6NDhweDt3aWR0aDoxMDAlO2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjUwMDtib3JkZXItcmFkaXVzOjJweDtvdXRsaW5lOm5vbmU7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIC4zcztib3JkZXI6dGhpbiBzb2xpZCB0cmFuc3BhcmVudH0udmQtcGlja2VyX19tb250aHMtYnV0dG9uOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2VlZjFmOH0udmQtcGlja2VyX19tb250aHMtYnV0dG9uOmRpc2FibGVkLC52ZC1waWNrZXJfX21vbnRocy1idXR0b25bZGlzYWJsZWRde2N1cnNvcjpkZWZhdWx0O2NvbG9yOnJnYmEoMCwwLDAsLjI2KTtwb2ludGVyLWV2ZW50czpub25lfS52ZC1waWNrZXJfX21vbnRocy1idXR0b25fX3dyYXBwZXJ7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpmbGV4O2ZsZXg6MCAwIDMzLjMzMzMzJTttYXgtd2lkdGg6MzMuMzMzMzMlO2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2hlaWdodDoyNSU7bWluLWhlaWdodDoyNSU7cGFkZGluZzo0cHggOHB4fS52ZC1waWNrZXJfX3F1YXJ0ZXJzLWJ1dHRvbntib3JkZXI6bm9uZTttYXJnaW46MDtwYWRkaW5nOjA7d2lkdGg6YXV0bztvdmVyZmxvdzp2aXNpYmxlO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Y29sb3I6aW5oZXJpdDtmb250OmluaGVyaXQ7bGluZS1oZWlnaHQ6bm9ybWFsOy13ZWJraXQtZm9udC1zbW9vdGhpbmc6aW5oZXJpdDstbW96LW9zeC1mb250LXNtb290aGluZzppbmhlcml0Oy13ZWJraXQtYXBwZWFyYW5jZTpub25lfS52ZC1waWNrZXJfX3F1YXJ0ZXJzLWJ1dHRvbjphY3RpdmUsLnZkLXBpY2tlcl9fcXVhcnRlcnMtYnV0dG9uOmZvY3Vze291dGxpbmU6MDtib3gtc2hhZG93OjB9LnZkLXBpY2tlcl9fcXVhcnRlcnMtYnV0dG9uW3JvbGU9YnV0dG9uXSwudmQtcGlja2VyX19xdWFydGVycy1idXR0b25bdHlwZT1idXR0b25dLC52ZC1waWNrZXJfX3F1YXJ0ZXJzLWJ1dHRvblt0eXBlPXJlc2V0XSwudmQtcGlja2VyX19xdWFydGVycy1idXR0b25bdHlwZT1zdWJtaXRde2N1cnNvcjpwb2ludGVyfS52ZC1waWNrZXJfX3F1YXJ0ZXJze3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6ZmxleDtmbGV4OjEgMSBhdXRvO2hlaWdodDoyNzRweH0udmQtcGlja2VyLS1ib3R0b21zaGVldCAudmQtcGlja2VyX19xdWFydGVyc3toZWlnaHQ6Mjc0cHh9QHN1cHBvcnRzIChwYWRkaW5nLWJvdHRvbTpjb25zdGFudChzYWZlLWFyZWEtaW5zZXQtYm90dG9tKSl7LnZkLXBpY2tlcl9fcXVhcnRlcnN7LS1zYWZlLWFyZWEtaW5zZXQtYm90dG9tOmNvbnN0YW50KHNhZmUtYXJlYS1pbnNldC1ib3R0b20pO3BhZGRpbmctYm90dG9tOnZhcigtLXNhZmUtYXJlYS1pbnNldC1ib3R0b20pfX1Ac3VwcG9ydHMgKHBhZGRpbmctYm90dG9tOmVudihzYWZlLWFyZWEtaW5zZXQtYm90dG9tKSl7LnZkLXBpY2tlcl9fcXVhcnRlcnN7LS1zYWZlLWFyZWEtaW5zZXQtYm90dG9tOmVudihzYWZlLWFyZWEtaW5zZXQtYm90dG9tKTtwYWRkaW5nLWJvdHRvbTp2YXIoLS1zYWZlLWFyZWEtaW5zZXQtYm90dG9tKX19LnZkLXBpY2tlcl9fcXVhcnRlcnMtaW5uZXJ7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpmbGV4O3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7cGFkZGluZzowIDEycHh9LnZkLXBpY2tlcl9fcXVhcnRlcnMtbGlzdHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtkaXNwbGF5OmZsZXg7ZmxleDoxIDEgYXV0bztmbGV4LXdyYXA6d3JhcDtqdXN0aWZ5LWl0ZW1zOmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXJ9LnZkLXBpY2tlcl9fcXVhcnRlcnMtYnV0dG9ue3Bvc2l0aW9uOnJlbGF0aXZlO2hlaWdodDo0OHB4O21pbi1oZWlnaHQ6NDhweDt3aWR0aDoxMDAlO2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjUwMDtib3JkZXItcmFkaXVzOjJweDtvdXRsaW5lOm5vbmU7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIC4zcztib3JkZXI6dGhpbiBzb2xpZCB0cmFuc3BhcmVudH0udmQtcGlja2VyX19xdWFydGVycy1idXR0b246aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZWVmMWY4fS52ZC1waWNrZXJfX3F1YXJ0ZXJzLWJ1dHRvbjpkaXNhYmxlZCwudmQtcGlja2VyX19xdWFydGVycy1idXR0b25bZGlzYWJsZWRde2N1cnNvcjpkZWZhdWx0O2NvbG9yOnJnYmEoMCwwLDAsLjI2KTtwb2ludGVyLWV2ZW50czpub25lfS52ZC1waWNrZXJfX3F1YXJ0ZXJzLWJ1dHRvbl9fd3JhcHBlcntwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmZsZXg7ZmxleDoxIDEgMTAwJTttYXgtd2lkdGg6MSAxIDEwMCU7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7aGVpZ2h0OjI1JTttaW4taGVpZ2h0OjI1JTtwYWRkaW5nOjRweCA4cHh9LnNsaWRlLXgtdHJhbnNpdGlvbi1lbnRlci1hY3RpdmUsLnNsaWRlLXgtdHJhbnNpdGlvbi1sZWF2ZS1hY3RpdmV7dHJhbnNpdGlvbjphbGwgLjNzIGN1YmljLWJlemllciguMjUsLjgsLjUsMSk7dHJhbnNpdGlvbi1wcm9wZXJ0eTpvcGFjaXR5LHRyYW5zZm9ybSxoZWlnaHR9LnNsaWRlLXgtdHJhbnNpdGlvbi1lbnRlciwuc2xpZGUteC10cmFuc2l0aW9uLWxlYXZlLXRve29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtMTVweCl9LnNsaWRlLXktdHJhbnNpdGlvbi1lbnRlci1hY3RpdmUsLnNsaWRlLXktdHJhbnNpdGlvbi1sZWF2ZS1hY3RpdmV7dHJhbnNpdGlvbjphbGwgLjNzIGN1YmljLWJlemllciguMjUsLjgsLjUsMSk7dHJhbnNpdGlvbi1wcm9wZXJ0eTpvcGFjaXR5LHRyYW5zZm9ybSxoZWlnaHR9LnNsaWRlLXktdHJhbnNpdGlvbi1lbnRlciwuc2xpZGUteS10cmFuc2l0aW9uLWxlYXZlLXRve29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMTVweCl9LnNjYWxlLXRyYW5zaXRpb24tZW50ZXItYWN0aXZlLC5zY2FsZS10cmFuc2l0aW9uLWxlYXZlLWFjdGl2ZXt0cmFuc2l0aW9uOmFsbCAuM3MgY3ViaWMtYmV6aWVyKC4yNSwuOCwuNSwxKTt0cmFuc2l0aW9uLXByb3BlcnR5Om9wYWNpdHksdHJhbnNmb3JtLGhlaWdodH0uc2NhbGUtdHJhbnNpdGlvbi1lbnRlciwuc2NhbGUtdHJhbnNpdGlvbi1sZWF2ZSwuc2NhbGUtdHJhbnNpdGlvbi1sZWF2ZS10b3tvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlKDApfS5zbGlkZS1pbi1vdXQtdHJhbnNpdGlvbi1lbnRlci1hY3RpdmUsLnNsaWRlLWluLW91dC10cmFuc2l0aW9uLWxlYXZlLWFjdGl2ZXt0cmFuc2l0aW9uOmFsbCAuM3MgY3ViaWMtYmV6aWVyKC4yNSwuOCwuNSwxKTt0cmFuc2l0aW9uLXByb3BlcnR5Om9wYWNpdHksdHJhbnNmb3JtLGhlaWdodH0uc2xpZGUtaW4tb3V0LXRyYW5zaXRpb24tZW50ZXIsLnNsaWRlLWluLW91dC10cmFuc2l0aW9uLWxlYXZlLXRve29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlWSgxMDAlKX0uc2xpZGUtaC1uZXh0LWVudGVyLWFjdGl2ZSwuc2xpZGUtaC1uZXh0LWxlYXZlLWFjdGl2ZSwuc2xpZGUtaC1wcmV2LWVudGVyLWFjdGl2ZSwuc2xpZGUtaC1wcmV2LWxlYXZlLWFjdGl2ZSwuc2xpZGUtdi1uZXh0LWVudGVyLWFjdGl2ZSwuc2xpZGUtdi1uZXh0LWxlYXZlLWFjdGl2ZSwuc2xpZGUtdi1wcmV2LWVudGVyLWFjdGl2ZSwuc2xpZGUtdi1wcmV2LWxlYXZlLWFjdGl2ZXt0cmFuc2l0aW9uOmFsbCAuM3MgY3ViaWMtYmV6aWVyKC4yNSwuOCwuNSwxKTt0cmFuc2l0aW9uLXByb3BlcnR5Om9wYWNpdHksdHJhbnNmb3JtLGhlaWdodDtwb3NpdGlvbjphYnNvbHV0ZX0uc2xpZGUtaC1uZXh0LWVudGVye29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlWCgxMDAlKX0uc2xpZGUtaC1uZXh0LWxlYXZlLXRve29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtMTAwJSl9LnNsaWRlLWgtcHJldi1sZWF2ZS10b3tvcGFjaXR5OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoMTAwJSl9LnNsaWRlLWgtcHJldi1lbnRlcntvcGFjaXR5OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTEwMCUpfS52ZC1waWNrZXJfX2NvbnRyb2xzLXllYXIudmQtcGlja2VyX19jb250cm9scy15ZWFyLS1jZW50ZXIgLnNsaWRlLWgtbmV4dC1lbnRlciwudmQtcGlja2VyX19jb250cm9scy15ZWFyLnZkLXBpY2tlcl9fY29udHJvbHMteWVhci0tY2VudGVyIC5zbGlkZS1oLXByZXYtbGVhdmUtdG97dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTUwJSkgdHJhbnNsYXRlWSgxNTAlKX0udmQtcGlja2VyX19jb250cm9scy15ZWFyLnZkLXBpY2tlcl9fY29udHJvbHMteWVhci0tY2VudGVyIC5zbGlkZS1oLW5leHQtbGVhdmUtdG8sLnZkLXBpY2tlcl9fY29udHJvbHMteWVhci52ZC1waWNrZXJfX2NvbnRyb2xzLXllYXItLWNlbnRlciAuc2xpZGUtaC1wcmV2LWVudGVye3RyYW5zZm9ybTp0cmFuc2xhdGVYKC01MCUpIHRyYW5zbGF0ZVkoLTE1MCUpfS52ZC1waWNrZXItLXJ0bCAuc2xpZGUtaC1uZXh0LWVudGVyLC52ZC1waWNrZXItLXJ0bCAuc2xpZGUtaC1wcmV2LWxlYXZlLXRve3RyYW5zZm9ybTp0cmFuc2xhdGVYKC0xMDAlKX0udmQtcGlja2VyLS1ydGwgLnNsaWRlLWgtbmV4dC1sZWF2ZS10bywudmQtcGlja2VyLS1ydGwgLnNsaWRlLWgtcHJldi1lbnRlcnt0cmFuc2Zvcm06dHJhbnNsYXRlWCgxMDAlKX0uc2xpZGUtdi1uZXh0LWxlYXZlLXRve29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlWSgxMDAlKX0uc2xpZGUtdi1uZXh0LWVudGVye29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMTAwJSl9LnNsaWRlLXYtcHJldi1lbnRlcntvcGFjaXR5OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMTAwJSl9LnNsaWRlLXYtcHJldi1sZWF2ZS10b3tvcGFjaXR5OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEwMCUpfS55ZWFyTW9udGgtZW50ZXItYWN0aXZlLC55ZWFyTW9udGgtbGVhdmUtYWN0aXZle3Bvc2l0aW9uOmFic29sdXRlO3RyYW5zaXRpb246b3BhY2l0eSAuM3N9LnllYXJNb250aC1lbnRlciwueWVhck1vbnRoLWxlYXZlLXRve29wYWNpdHk6MH0udmQtcGlja2VyX195ZWFyc3twb3NpdGlvbjpyZWxhdGl2ZTtoZWlnaHQ6MzIycHg7bGlzdC1zdHlsZS10eXBlOm5vbmU7dGV4dC1hbGlnbjpjZW50ZXI7bWFyZ2luOjA7cGFkZGluZzo4cHggMDtvdmVyZmxvdy15OnNjcm9sbDstd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzp0b3VjaH0udmQtcGlja2VyLS1ib3R0b21zaGVldCAudmQtcGlja2VyX195ZWFyc3toZWlnaHQ6MzcwcHh9QHN1cHBvcnRzIChwYWRkaW5nLWJvdHRvbTpjb25zdGFudChzYWZlLWFyZWEtaW5zZXQtYm90dG9tKSl7LnZkLXBpY2tlcl9feWVhcnN7LS1zYWZlLWFyZWEtaW5zZXQtYm90dG9tOmNvbnN0YW50KHNhZmUtYXJlYS1pbnNldC1ib3R0b20pO3BhZGRpbmctYm90dG9tOmNhbGMoOHB4ICsgdmFyKC0tc2FmZS1hcmVhLWluc2V0LWJvdHRvbSkpfX1Ac3VwcG9ydHMgKHBhZGRpbmctYm90dG9tOmVudihzYWZlLWFyZWEtaW5zZXQtYm90dG9tKSl7LnZkLXBpY2tlcl9feWVhcnN7LS1zYWZlLWFyZWEtaW5zZXQtYm90dG9tOmVudihzYWZlLWFyZWEtaW5zZXQtYm90dG9tKTtwYWRkaW5nLWJvdHRvbTpjYWxjKDhweCArIHZhcigtLXNhZmUtYXJlYS1pbnNldC1ib3R0b20pKX19LnZkLXBpY2tlci0tdmFsaWRhdGUgLnZkLXBpY2tlcl9feWVhcnN7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2VlZjFmOH0udmQtcGlja2VyX195ZWFycyBsaXtwb3NpdGlvbjpyZWxhdGl2ZTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tY29udGVudDpjZW50ZXI7cGFkZGluZzo4cHggMDttYXJnaW4tbGVmdDoxMnB4O21hcmdpbi1yaWdodDoxMnB4O2hlaWdodDo0MHB4O21pbi1oZWlnaHQ6NDBweDt3aWR0aDpjYWxjKDEwMCUgLSAyNHB4KTtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo1MDA7b3V0bGluZTpub25lO3RyYW5zaXRpb246YmFja2dyb3VuZC1jb2xvciAuM3M7Ym9yZGVyOnRoaW4gc29saWQgdHJhbnNwYXJlbnR9LnZkLXBpY2tlci0tYm90dG9tc2hlZXQgLnZkLXBpY2tlcl9feWVhcnMgbGl7aGVpZ2h0OjQ4cHg7bWluLWhlaWdodDo0OHB4fS52ZC1waWNrZXJfX3llYXJzIGxpOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2VlZjFmOH0udmQtcGlja2VyX195ZWFycyBsaTpkaXNhYmxlZCwudmQtcGlja2VyX195ZWFycyBsaVtkaXNhYmxlZF17Y3Vyc29yOmRlZmF1bHQ7Y29sb3I6cmdiYSgwLDAsMCwuMjYpO3BvaW50ZXItZXZlbnRzOm5vbmV9LnZkLXBpY2tlcl9feWVhcnMgbGkrbGl7bWFyZ2luLXRvcDoycHh9XCIsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL0BtYXRoaWV1c3Rhbi92dWUtZGF0ZXBpY2tlci9kaXN0L3Z1ZS1kYXRlcGlja2VyLm1pbi5jc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBQUEsaUVBQStGLHFCQUFxQixDQUFDLFlBQVksaUJBQWlCLENBQXlDLFlBQVksQ0FBc0MsYUFBYSxDQUFnRCxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLHFDQUFxQyxjQUFjLENBQUMscUNBQXFDLFNBQVMsQ0FBQyxvQkFBb0IsV0FBVyxDQUEwRyxnR0FBZ0csQ0FBQyxzQkFBc0IsbUJBQW1CLENBQUMsY0FBc0QsWUFBWSxDQUFzQyxhQUFhLENBQUMsY0FBYyxDQUFDLHFEQUFtRixxQkFBcUIsQ0FBQyxTQUFTLFlBQVksQ0FBQyxtQkFBbUIsY0FBYyxDQUFDLG9CQUE0RCxZQUFZLENBQWdELGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxXQUFXLGNBQWMsQ0FBQyxrQkFBa0IsaUJBQWlCLENBQUMsb0JBQW9CLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLENBQUMscUJBQXFCLENBQUMscUJBQXFCLENBQWdELHNDQUFzQyxDQUFDLHlCQUF5QixjQUFjLENBQUMsK0JBQStCLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxrQkFBa0IsQ0FBQyxn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QkFBbUIsQ0FBQyx3QkFBd0IsY0FBY1wiLFwic291cmNlc0NvbnRlbnRcIjpbXCIudmQtd3JhcHBlciwudmQtd3JhcHBlciAqLC52ZC13cmFwcGVyIDphZnRlciwudmQtd3JhcHBlciA6YmVmb3Jley13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveH0udmQtd3JhcHBlcntwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5Oi13ZWJraXQtYm94O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4Oy13ZWJraXQtYm94LWZsZXg6MTstbXMtZmxleDoxIDEgYXV0bztmbGV4OjEgMSBhdXRvOy13ZWJraXQtYm94LWFsaWduOmNlbnRlcjstbXMtZmxleC1hbGlnbjpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO21heC13aWR0aDoxMDAlO2N1cnNvcjpkZWZhdWx0fS52ZC13cmFwcGVyOm5vdCgudmQtd3JhcHBlci0taW5saW5lKXtjdXJzb3I6cG9pbnRlcn0udmQtd3JhcHBlcjphY3RpdmUsLnZkLXdyYXBwZXI6Zm9jdXN7b3V0bGluZTowfS52ZC13cmFwcGVyLS1pbmxpbmV7d2lkdGg6MzA0cHg7LXdlYmtpdC1ib3gtc2hhZG93OjAgM3B4IDFweCAtMnB4IHJnYmEoMCwwLDAsLjIpLDAgMnB4IDJweCAwIHJnYmEoMCwwLDAsLjE0KSwwIDFweCA1cHggMCByZ2JhKDAsMCwwLC4xMik7Ym94LXNoYWRvdzowIDNweCAxcHggLTJweCByZ2JhKDAsMCwwLC4yKSwwIDJweCAycHggMCByZ2JhKDAsMCwwLC4xNCksMCAxcHggNXB4IDAgcmdiYSgwLDAsMCwuMTIpfS52ZC13cmFwcGVyLS1kaXNhYmxlZHtwb2ludGVyLWV2ZW50czpub25lfS52ZC1hY3RpdmF0b3J7ZGlzcGxheTotd2Via2l0LWJveDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDstd2Via2l0LWJveC1mbGV4OjE7LW1zLWZsZXg6MSAxIGF1dG87ZmxleDoxIDEgYXV0bzttYXgtd2lkdGg6MTAwJX0udmQtbWVudSwudmQtbWVudSAqLC52ZC1tZW51IDphZnRlciwudmQtbWVudSA6YmVmb3Jley13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveH0udmQtbWVudXtkaXNwbGF5Om5vbmV9LnZkLW1lbnUtLWF0dGFjaGVke2Rpc3BsYXk6aW5saW5lfS52ZC1tZW51X19hY3RpdmF0b3J7ZGlzcGxheTotd2Via2l0LWJveDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDstd2Via2l0LWJveC1hbGlnbjpjZW50ZXI7LW1zLWZsZXgtYWxpZ246Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtjdXJzb3I6cG9pbnRlcn0udmQtbWVudSAqe2N1cnNvcjpwb2ludGVyfS52ZC1tZW51X19jb250ZW50e3Bvc2l0aW9uOmFic29sdXRlO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2JvcmRlci1yYWRpdXM6NnB4O21heC13aWR0aDo4MCU7b3ZlcmZsb3cteTphdXRvO292ZXJmbG93LXg6aGlkZGVuO2NvbnRhaW46Y29udGVudDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7d2lsbC1jaGFuZ2U6dHJhbnNmb3JtOy13ZWJraXQtYm94LXNoYWRvdzowIDJweCA4cHggcmdiYSg1MCw1MCw5MywuMik7Ym94LXNoYWRvdzowIDJweCA4cHggcmdiYSg1MCw1MCw5MywuMil9LnZkLW1lbnVfX2NvbnRlbnQtLWZpeGVke3Bvc2l0aW9uOmZpeGVkfS52ZC1tZW51X19jb250ZW50LS1ib3R0b21zaGVldHtwb3NpdGlvbjpmaXhlZDt0b3A6YXV0byFpbXBvcnRhbnQ7Ym90dG9tOjAhaW1wb3J0YW50O2xlZnQ6MCFpbXBvcnRhbnQ7cmlnaHQ6MCFpbXBvcnRhbnQ7d2lkdGg6MTAwJSFpbXBvcnRhbnQ7bWluLXdpZHRoOjEwMCUhaW1wb3J0YW50O2JvcmRlci1yYWRpdXM6MTJweCAxMnB4IDAgMH1Ac3VwcG9ydHMgKHBhZGRpbmctYm90dG9tOmNvbnN0YW50KHNhZmUtYXJlYS1pbnNldC1ib3R0b20pKXsudmQtbWVudV9fY29udGVudC0tYm90dG9tc2hlZXR7LS1zYWZlLWFyZWEtaW5zZXQtYm90dG9tOmNvbnN0YW50KHNhZmUtYXJlYS1pbnNldC1ib3R0b20pO3BhZGRpbmctYm90dG9tOnZhcigtLXNhZmUtYXJlYS1pbnNldC1ib3R0b20pfX1Ac3VwcG9ydHMgKHBhZGRpbmctYm90dG9tOmVudihzYWZlLWFyZWEtaW5zZXQtYm90dG9tKSl7LnZkLW1lbnVfX2NvbnRlbnQtLWJvdHRvbXNoZWV0ey0tc2FmZS1hcmVhLWluc2V0LWJvdHRvbTplbnYoc2FmZS1hcmVhLWluc2V0LWJvdHRvbSk7cGFkZGluZy1ib3R0b206dmFyKC0tc2FmZS1hcmVhLWluc2V0LWJvdHRvbSl9fS52ZC1tZW51LXRyYW5zaXRpb24tbGVhdmUtYWN0aXZlLC52ZC1tZW51LXRyYW5zaXRpb24tbGVhdmUtdG97cG9pbnRlci1ldmVudHM6bm9uZX0udmQtbWVudS10cmFuc2l0aW9uLWVudGVyLC52ZC1tZW51LXRyYW5zaXRpb24tbGVhdmUtdG97b3BhY2l0eTowfS52ZC1tZW51LXRyYW5zaXRpb24tZW50ZXItYWN0aXZlLC52ZC1tZW51LXRyYW5zaXRpb24tbGVhdmUtYWN0aXZley13ZWJraXQtdHJhbnNpdGlvbjphbGwgLjNzIGN1YmljLWJlemllciguMjUsLjgsLjI1LDEpO3RyYW5zaXRpb246YWxsIC4zcyBjdWJpYy1iZXppZXIoLjI1LC44LC4yNSwxKTstd2Via2l0LXRyYW5zaXRpb24tcHJvcGVydHk6b3BhY2l0eSwtd2Via2l0LXRyYW5zZm9ybTt0cmFuc2l0aW9uLXByb3BlcnR5Om9wYWNpdHksLXdlYmtpdC10cmFuc2Zvcm07dHJhbnNpdGlvbi1wcm9wZXJ0eTpvcGFjaXR5LHRyYW5zZm9ybTt0cmFuc2l0aW9uLXByb3BlcnR5Om9wYWNpdHksdHJhbnNmb3JtLC13ZWJraXQtdHJhbnNmb3JtfS52ZC1waWNrZXJfX2lucHV0LWNsZWFyX19pY29uIGJ1dHRvbntib3JkZXI6bm9uZTttYXJnaW46MDtwYWRkaW5nOjA7d2lkdGg6YXV0bztvdmVyZmxvdzp2aXNpYmxlO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Y29sb3I6aW5oZXJpdDtmb250OmluaGVyaXQ7bGluZS1oZWlnaHQ6bm9ybWFsOy13ZWJraXQtZm9udC1zbW9vdGhpbmc6aW5oZXJpdDstbW96LW9zeC1mb250LXNtb290aGluZzppbmhlcml0Oy13ZWJraXQtYXBwZWFyYW5jZTpub25lfS52ZC1waWNrZXJfX2lucHV0LWNsZWFyX19pY29uIGJ1dHRvbjphY3RpdmUsLnZkLXBpY2tlcl9faW5wdXQtY2xlYXJfX2ljb24gYnV0dG9uOmZvY3Vze291dGxpbmU6MDstd2Via2l0LWJveC1zaGFkb3c6MDtib3gtc2hhZG93OjB9LnZkLXBpY2tlcl9faW5wdXQtY2xlYXJfX2ljb24gYnV0dG9uW3JvbGU9YnV0dG9uXSwudmQtcGlja2VyX19pbnB1dC1jbGVhcl9faWNvbiBidXR0b25bdHlwZT1idXR0b25dLC52ZC1waWNrZXJfX2lucHV0LWNsZWFyX19pY29uIGJ1dHRvblt0eXBlPXJlc2V0XSwudmQtcGlja2VyX19pbnB1dC1jbGVhcl9faWNvbiBidXR0b25bdHlwZT1zdWJtaXRde2N1cnNvcjpwb2ludGVyfS52ZC1waWNrZXJfX2lucHV0e3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6LXdlYmtpdC1ib3g7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7LXdlYmtpdC1ib3gtZmxleDoxOy1tcy1mbGV4OjEgMSBhdXRvO2ZsZXg6MSAxIGF1dG87LXdlYmtpdC1ib3gtYWxpZ246Y2VudGVyOy1tcy1mbGV4LWFsaWduOmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7Y29sb3I6aW5oZXJpdDttaW4taGVpZ2h0OmluaGVyaXR9LnZkLXdyYXBwZXItLXJ0bCAudmQtcGlja2VyX19pbnB1dHtkaXJlY3Rpb246cnRsfS52ZC13cmFwcGVyLS1ydGwgLnZkLXBpY2tlcl9faW5wdXQgYnV0dG9uLC52ZC13cmFwcGVyLS1ydGwgLnZkLXBpY2tlcl9faW5wdXQgaW5wdXRbdHlwZT10ZXh0XXttYXJnaW46MCA4cHggMCAwfS52ZC1waWNrZXJfX2lucHV0LS1kaXNhYmxlZHtjdXJzb3I6bm90LWFsbG93ZWQ7cG9pbnRlci1ldmVudHM6bm9uZX0udmQtcGlja2VyX19pbnB1dC0tZGlzYWJsZWQgLnZkLXBpY2tlcl9faW5wdXQtaWNvbl9fd3JhcHBlciwudmQtcGlja2VyX19pbnB1dC0tZGlzYWJsZWQgaW5wdXR7b3BhY2l0eTouMzh9LnZkLXBpY2tlcl9faW5wdXQtLW5vLWNhbGVuZGFyLWljb24gYnV0dG9uLC52ZC1waWNrZXJfX2lucHV0LS1uby1jYWxlbmRhci1pY29uIGlucHV0e21hcmdpbjowfS52ZC1waWNrZXJfX2lucHV0LWNsZWFyey1tcy1mbGV4LWl0ZW0tYWxpZ246c3RhcnQ7YWxpZ24tc2VsZjpmbGV4LXN0YXJ0O2xpbmUtaGVpZ2h0OjE7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lfS52ZC1waWNrZXJfX2lucHV0LWNsZWFyLC52ZC1waWNrZXJfX2lucHV0LWNsZWFyX19pY29ue2Rpc3BsYXk6LXdlYmtpdC1pbmxpbmUtYm94O2Rpc3BsYXk6LW1zLWlubGluZS1mbGV4Ym94O2Rpc3BsYXk6aW5saW5lLWZsZXh9LnZkLXBpY2tlcl9faW5wdXQtY2xlYXJfX2ljb257LXdlYmtpdC1ib3gtcGFjazpjZW50ZXI7LW1zLWZsZXgtcGFjazpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjstd2Via2l0LWJveC1hbGlnbjpjZW50ZXI7LW1zLWZsZXgtYWxpZ246Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjstd2Via2l0LWJveC1mbGV4OjE7LW1zLWZsZXg6MSAwIGF1dG87ZmxleDoxIDAgYXV0b30udmQtcGlja2VyX19pbnB1dC1jbGVhcl9faWNvbiwudmQtcGlja2VyX19pbnB1dC1jbGVhcl9faWNvbiAudmQtaWNvbi52ZC1pY29ue2hlaWdodDoyNHB4O21pbi13aWR0aDoyNHB4O3dpZHRoOjI0cHh9LnZkLXBpY2tlcl9faW5wdXQtaWNvbnstbXMtZmxleC1pdGVtLWFsaWduOnN0YXJ0O2FsaWduLXNlbGY6ZmxleC1zdGFydDttYXJnaW4tdG9wOjRweDttYXJnaW4tcmlnaHQ6YXV0bztwYWRkaW5nLXJpZ2h0OjRweDtsaW5lLWhlaWdodDoxOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZX0udmQtcGlja2VyX19pbnB1dC1pY29uLC52ZC1waWNrZXJfX2lucHV0LWljb25fX3dyYXBwZXJ7ZGlzcGxheTotd2Via2l0LWlubGluZS1ib3g7ZGlzcGxheTotbXMtaW5saW5lLWZsZXhib3g7ZGlzcGxheTppbmxpbmUtZmxleH0udmQtcGlja2VyX19pbnB1dC1pY29uX193cmFwcGVyey13ZWJraXQtYm94LWFsaWduOmNlbnRlcjstbXMtZmxleC1hbGlnbjpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2hlaWdodDoyNHB4Oy13ZWJraXQtYm94LWZsZXg6MTstbXMtZmxleDoxIDAgYXV0bztmbGV4OjEgMCBhdXRvOy13ZWJraXQtYm94LXBhY2s6Y2VudGVyOy1tcy1mbGV4LXBhY2s6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7bWluLXdpZHRoOjI0cHg7d2lkdGg6MjRweH0udmQtcGlja2VyX19pbnB1dCBpbnB1dHtwb3NpdGlvbjpyZWxhdGl2ZTstd2Via2l0LWJveC1mbGV4OjE7LW1zLWZsZXg6MSAxIGF1dG87ZmxleDoxIDEgYXV0bzttYXgtaGVpZ2h0OjMycHg7cGFkZGluZzo4cHggMDttYXgtd2lkdGg6MTAwJTttaW4td2lkdGg6MDt3aWR0aDoxMDAlO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyLXN0eWxlOm5vbmU7Y29sb3I6aW5oZXJpdDtmb250LXN0cmV0Y2g6bm9ybWFsO2xpbmUtaGVpZ2h0OmluaGVyaXQ7Zm9udC1zaXplOjE2cHghaW1wb3J0YW50O2ZvbnQtd2VpZ2h0OjQwMDtmb250LWZhbWlseTppbmhlcml0O2NvbG9yOmN1cnJlbnRDb2xvcjtjdXJzb3I6aW5oZXJpdH0udmQtcGlja2VyX19pbnB1dCBpbnB1dDphY3RpdmUsLnZkLXBpY2tlcl9faW5wdXQgaW5wdXQ6Zm9jdXN7b3V0bGluZTowOy13ZWJraXQtYm94LXNoYWRvdzpub25lO2JveC1zaGFkb3c6bm9uZX0udmQtcGlja2VyX19pbnB1dCBpbnB1dC5wbGFjZWhvbGRlcntvcGFjaXR5Oi42fS52ZC1waWNrZXJfX2lucHV0IGlucHV0OjotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7b3BhY2l0eTouNn0udmQtcGlja2VyX19pbnB1dCBpbnB1dDo6LW1vei1wbGFjZWhvbGRlcntvcGFjaXR5Oi42fS52ZC1waWNrZXJfX2lucHV0IGlucHV0OjpwbGFjZWhvbGRlcntvcGFjaXR5Oi42fS52ZC1waWNrZXJfX2lucHV0IGlucHV0Oi1tb3otcGxhY2Vob2xkZXIsLnZkLXBpY2tlcl9faW5wdXQgaW5wdXQ6Oi1tb3otcGxhY2Vob2xkZXJ7b3BhY2l0eTouNn0udmQtcGlja2VyX19pbnB1dCBpbnB1dDotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7b3BhY2l0eTouNn0udmQtcGlja2VyX19pbnB1dCBpbnB1dDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcntvcGFjaXR5Oi42fS52ZC1pY29uLnZkLWljb257ZGlzcGxheTotd2Via2l0LWlubGluZS1ib3g7ZGlzcGxheTotbXMtaW5saW5lLWZsZXhib3g7ZGlzcGxheTppbmxpbmUtZmxleDstd2Via2l0LWJveC1hbGlnbjpjZW50ZXI7LW1zLWZsZXgtYWxpZ246Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjstd2Via2l0LWJveC1wYWNrOmNlbnRlcjstbXMtZmxleC1wYWNrOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xldHRlci1zcGFjaW5nOm5vcm1hbDtsaW5lLWhlaWdodDoxO3RleHQtaW5kZW50OjA7LXdlYmtpdC10cmFuc2l0aW9uOmFsbCAuM3MgY3ViaWMtYmV6aWVyKC4yNSwuOCwuNSwxKTt0cmFuc2l0aW9uOmFsbCAuM3MgY3ViaWMtYmV6aWVyKC4yNSwuOCwuNSwxKTstd2Via2l0LXRyYW5zaXRpb24tcHJvcGVydHk6Y29sb3IsLXdlYmtpdC10cmFuc2Zvcm07dHJhbnNpdGlvbi1wcm9wZXJ0eTpjb2xvciwtd2Via2l0LXRyYW5zZm9ybTt0cmFuc2l0aW9uLXByb3BlcnR5OnRyYW5zZm9ybSxjb2xvcjt0cmFuc2l0aW9uLXByb3BlcnR5OnRyYW5zZm9ybSxjb2xvciwtd2Via2l0LXRyYW5zZm9ybTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lfS52ZC1pY29uLS1saW5re2N1cnNvcjpwb2ludGVyfS52ZC1pY29uLS1kaXNhYmxlZHtwb2ludGVyLWV2ZW50czpub25lO29wYWNpdHk6LjZ9LnZkLXBpY2tlcl9fdGl0bGUtY2xvc2UgYnV0dG9ue2JvcmRlcjpub25lO21hcmdpbjowO3BhZGRpbmc6MDt3aWR0aDphdXRvO292ZXJmbG93OnZpc2libGU7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtjb2xvcjppbmhlcml0O2ZvbnQ6aW5oZXJpdDtsaW5lLWhlaWdodDpub3JtYWw7LXdlYmtpdC1mb250LXNtb290aGluZzppbmhlcml0Oy1tb3otb3N4LWZvbnQtc21vb3RoaW5nOmluaGVyaXQ7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmV9LnZkLXBpY2tlcl9fdGl0bGUtY2xvc2UgYnV0dG9uOmFjdGl2ZSwudmQtcGlja2VyX190aXRsZS1jbG9zZSBidXR0b246Zm9jdXN7b3V0bGluZTowOy13ZWJraXQtYm94LXNoYWRvdzowO2JveC1zaGFkb3c6MH0udmQtcGlja2VyX190aXRsZS1jbG9zZSBidXR0b25bcm9sZT1idXR0b25dLC52ZC1waWNrZXJfX3RpdGxlLWNsb3NlIGJ1dHRvblt0eXBlPWJ1dHRvbl0sLnZkLXBpY2tlcl9fdGl0bGUtY2xvc2UgYnV0dG9uW3R5cGU9cmVzZXRdLC52ZC1waWNrZXJfX3RpdGxlLWNsb3NlIGJ1dHRvblt0eXBlPXN1Ym1pdF17Y3Vyc29yOnBvaW50ZXJ9LnZkLXBpY2tlciwudmQtcGlja2VyICosLnZkLXBpY2tlciA6YWZ0ZXIsLnZkLXBpY2tlciA6YmVmb3Jley13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveH0udmQtcGlja2Vye2Rpc3BsYXk6LXdlYmtpdC1ib3g7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7LXdlYmtpdC1ib3gtb3JpZW50OnZlcnRpY2FsOy13ZWJraXQtYm94LWRpcmVjdGlvbjpub3JtYWw7LW1zLWZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmbGV4LWRpcmVjdGlvbjpjb2x1bW47d2lkdGg6MzA0cHg7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlci1yYWRpdXM6NnB4Oy13ZWJraXQtYm94LXNoYWRvdzowIDJweCA4cHggcmdiYSg1MCw1MCw5MywuMik7Ym94LXNoYWRvdzowIDJweCA4cHggcmdiYSg1MCw1MCw5MywuMil9LnZkLXBpY2tlcjphY3RpdmUsLnZkLXBpY2tlcjpmb2N1c3tvdXRsaW5lOjB9LnZkLXBpY2tlci0tYm90dG9tc2hlZXR7d2lkdGg6MTAwJTstd2Via2l0LWJveC1zaGFkb3c6bm9uZTtib3gtc2hhZG93Om5vbmV9LnZkLXBpY2tlci0tYm90dG9tc2hlZXQgLnZkLXBpY2tlci1oZWFkZXJ7Ym9yZGVyLXJhZGl1czowfS52ZC1waWNrZXItLXJ0bHtkaXJlY3Rpb246cnRsfS52ZC1waWNrZXJfX3RpdGxle3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6LXdlYmtpdC1ib3g7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7LXdlYmtpdC1ib3gtcGFjazpqdXN0aWZ5Oy1tcy1mbGV4LXBhY2s6anVzdGlmeTtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbjstd2Via2l0LWJveC1hbGlnbjpjZW50ZXI7LW1zLWZsZXgtYWxpZ246Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtoZWlnaHQ6NDhweDtwYWRkaW5nOjhweCAxNnB4O2JvcmRlci1yYWRpdXM6MTJweCAxMnB4IDAgMH0udmQtcGlja2VyLS1ydGwgLnZkLXBpY2tlcl9fdGl0bGV7cGFkZGluZzowIDE2cHggMCAwfUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDo0ODBweCl7LnZkLXBpY2tlcl9fdGl0bGV7ZGlzcGxheTpub25lfX0udmQtcGlja2VyX190aXRsZSBwe21hcmdpbjowfS52ZC1waWNrZXJfX3RpdGxlLWNsb3Nle3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6LXdlYmtpdC1ib3g7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7LXdlYmtpdC1ib3gtYWxpZ246Y2VudGVyOy1tcy1mbGV4LWFsaWduOmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7LXdlYmtpdC1ib3gtcGFjazplbmQ7LW1zLWZsZXgtcGFjazplbmQ7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO2hlaWdodDoyNHB4O3dpZHRoOjI0cHg7Ym9yZGVyOm5vbmU7b3V0bGluZTpub25lO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lfS52ZC1waWNrZXJfX3RpdGxlLWNsb3NlIHN2Z3t3aWR0aDoyNHB4O2hlaWdodDoyNHB4fS52ZC1waWNrZXJfX2JvZHl7cG9zaXRpb246cmVsYXRpdmU7LXdlYmtpdC1ib3gtZmxleDoxOy1tcy1mbGV4OjEgMSAxMDAlO2ZsZXg6MSAxIDEwMCU7LXdlYmtpdC1ib3gtb3JpZW50OnZlcnRpY2FsOy13ZWJraXQtYm94LWRpcmVjdGlvbjpub3JtYWw7LW1zLWZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmbGV4LWRpcmVjdGlvbjpjb2x1bW47aGVpZ2h0OmF1dG87b3ZlcmZsb3c6aGlkZGVuO3otaW5kZXg6MH0udmQtb3ZlcmxheSwudmQtcGlja2VyX19ib2R5e2Rpc3BsYXk6LXdlYmtpdC1ib3g7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXh9LnZkLW92ZXJsYXl7cG9zaXRpb246Zml4ZWQ7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7LXdlYmtpdC1ib3gtYWxpZ246Y2VudGVyOy1tcy1mbGV4LWFsaWduOmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7Ym9yZGVyLXJhZGl1czppbmhlcml0Oy13ZWJraXQtYm94LXBhY2s6Y2VudGVyOy1tcy1mbGV4LXBhY2s6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7cG9pbnRlci1ldmVudHM6bm9uZTstd2Via2l0LXRyYW5zaXRpb246LjNzIGN1YmljLWJlemllciguMjUsLjgsLjUsMSksei1pbmRleCAxbXM7dHJhbnNpdGlvbjouM3MgY3ViaWMtYmV6aWVyKC4yNSwuOCwuNSwxKSx6LWluZGV4IDFtc30udmQtb3ZlcmxheV9fY29udGVudHtwb3NpdGlvbjpyZWxhdGl2ZX0udmQtb3ZlcmxheV9faW5uZXJ7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3JpZ2h0OjA7dG9wOjA7Ym90dG9tOjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJTtib3JkZXItcmFkaXVzOmluaGVyaXQ7LXdlYmtpdC10cmFuc2l0aW9uOmluaGVyaXQ7dHJhbnNpdGlvbjppbmhlcml0O3dpbGwtY2hhbmdlOm9wYWNpdHl9LnZkLW92ZXJsYXktLWFic29sdXRle3Bvc2l0aW9uOmFic29sdXRlfS52ZC1vdmVybGF5LS1hY3RpdmV7cG9pbnRlci1ldmVudHM6YXV0b30udmQtcGlja2VyX19jb250cm9scy1sYWJlbCBidXR0b257bWFyZ2luOjA7d2lkdGg6YXV0bztvdmVyZmxvdzp2aXNpYmxlO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Y29sb3I6aW5oZXJpdDtmb250OmluaGVyaXQ7bGluZS1oZWlnaHQ6bm9ybWFsOy13ZWJraXQtZm9udC1zbW9vdGhpbmc6aW5oZXJpdDstbW96LW9zeC1mb250LXNtb290aGluZzppbmhlcml0Oy13ZWJraXQtYXBwZWFyYW5jZTpub25lfS52ZC1waWNrZXJfX2NvbnRyb2xzLWxhYmVsIGJ1dHRvbjphY3RpdmUsLnZkLXBpY2tlcl9fY29udHJvbHMtbGFiZWwgYnV0dG9uOmZvY3Vze291dGxpbmU6MDstd2Via2l0LWJveC1zaGFkb3c6MDtib3gtc2hhZG93OjB9LnZkLXBpY2tlcl9fY29udHJvbHMtbGFiZWwgYnV0dG9uW3JvbGU9YnV0dG9uXSwudmQtcGlja2VyX19jb250cm9scy1sYWJlbCBidXR0b25bdHlwZT1idXR0b25dLC52ZC1waWNrZXJfX2NvbnRyb2xzLWxhYmVsIGJ1dHRvblt0eXBlPXJlc2V0XSwudmQtcGlja2VyX19jb250cm9scy1sYWJlbCBidXR0b25bdHlwZT1zdWJtaXRde2N1cnNvcjpwb2ludGVyfS52ZC1waWNrZXJfX2NvbnRyb2xze2Rpc3BsYXk6LXdlYmtpdC1ib3g7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7aGVpZ2h0OjQ4cHg7dGV4dC1hbGlnbjpjZW50ZXI7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6MTAwJX0udmQtcGlja2VyX19jb250cm9scy13cmFwcGVye292ZXJmbG93OmhpZGRlbjstd2Via2l0LWJveC1wYWNrOmNlbnRlcjstbXMtZmxleC1wYWNrOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS52ZC1waWNrZXJfX2NvbnRyb2xzLW1vbnRoLC52ZC1waWNrZXJfX2NvbnRyb2xzLXdyYXBwZXIsLnZkLXBpY2tlcl9fY29udHJvbHMteWVhcntwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5Oi13ZWJraXQtYm94O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4Oy13ZWJraXQtYm94LWFsaWduOmNlbnRlcjstbXMtZmxleC1hbGlnbjpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyOy13ZWJraXQtYm94LWZsZXg6MTstbXMtZmxleDoxO2ZsZXg6MX0udmQtcGlja2VyX19jb250cm9scy1tb250aHstd2Via2l0LWJveC1wYWNrOmVuZDstbXMtZmxleC1wYWNrOmVuZDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9LnZkLXBpY2tlcl9fY29udHJvbHMteWVhcnstd2Via2l0LWJveC1wYWNrOnN0YXJ0Oy1tcy1mbGV4LXBhY2s6c3RhcnQ7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9LnZkLXBpY2tlcl9fY29udHJvbHMteWVhci52ZC1waWNrZXJfX2NvbnRyb2xzLXllYXItLWNlbnRlcnstd2Via2l0LWJveC1wYWNrOmNlbnRlcjstbXMtZmxleC1wYWNrOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS52ZC1waWNrZXJfX2NvbnRyb2xzLWxhYmVse3BhZGRpbmc6OHB4IDRweH0udmQtcGlja2VyX19jb250cm9scy1sYWJlbCBidXR0b257cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTotd2Via2l0LWJveDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo1MDA7bGluZS1oZWlnaHQ6MTVweDtwYWRkaW5nOjA7Ym9yZGVyOm5vbmU7b3V0bGluZTpub25lOy13ZWJraXQtdHJhbnNpdGlvbjpjb2xvciAuM3M7dHJhbnNpdGlvbjpjb2xvciAuM3N9LnZkLXBpY2tlcl9fY29udHJvbHMtbGFiZWwgYnV0dG9uOm5vdCg6aG92ZXIpOm5vdCg6Zm9jdXMpe2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0udmQtcGlja2VyX19jb250cm9scy1sYWJlbCBidXR0b246ZGlzYWJsZWQsLnZkLXBpY2tlcl9fY29udHJvbHMtbGFiZWwgYnV0dG9uW2Rpc2FibGVkXXtjdXJzb3I6ZGVmYXVsdDtjb2xvcjpyZ2JhKDAsMCwwLC4yNil9LnZkLXBpY2tlcl9fY29udHJvbHMgYnV0dG9uLnZkLXBpY2tlcl9fY29udHJvbHMtbmV4dCwudmQtcGlja2VyX19jb250cm9scyBidXR0b24udmQtcGlja2VyX19jb250cm9scy1wcmV2e3Bvc2l0aW9uOnJlbGF0aXZlOy13ZWJraXQtYm94LWZsZXg6MDstbXMtZmxleDowIDAgNDBweDtmbGV4OjAgMCA0MHB4O2hlaWdodDo0OHB4O3dpZHRoOjQ4cHg7cGFkZGluZzowIDAgMCAyNHB4O2JvcmRlcjpub25lO291dGxpbmU6bm9uZTtjb2xvcjpyZ2JhKDAsMCwwLC44Nyk7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7Y3Vyc29yOnBvaW50ZXJ9QG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOjc2OHB4KXsudmQtcGlja2VyX19jb250cm9scyBidXR0b24udmQtcGlja2VyX19jb250cm9scy1uZXh0LC52ZC1waWNrZXJfX2NvbnRyb2xzIGJ1dHRvbi52ZC1waWNrZXJfX2NvbnRyb2xzLXByZXZ7cGFkZGluZzowIDhweH19LnZkLXBpY2tlcl9fY29udHJvbHMgYnV0dG9uLnZkLXBpY2tlcl9fY29udHJvbHMtbmV4dDpkaXNhYmxlZCwudmQtcGlja2VyX19jb250cm9scyBidXR0b24udmQtcGlja2VyX19jb250cm9scy1uZXh0W2Rpc2FibGVkXSwudmQtcGlja2VyX19jb250cm9scyBidXR0b24udmQtcGlja2VyX19jb250cm9scy1wcmV2OmRpc2FibGVkLC52ZC1waWNrZXJfX2NvbnRyb2xzIGJ1dHRvbi52ZC1waWNrZXJfX2NvbnRyb2xzLXByZXZbZGlzYWJsZWRde2N1cnNvcjpkZWZhdWx0fS52ZC1waWNrZXJfX2NvbnRyb2xzIGJ1dHRvbi52ZC1waWNrZXJfX2NvbnRyb2xzLW5leHQ6ZGlzYWJsZWQgc3ZnLC52ZC1waWNrZXJfX2NvbnRyb2xzIGJ1dHRvbi52ZC1waWNrZXJfX2NvbnRyb2xzLW5leHRbZGlzYWJsZWRdIHN2ZywudmQtcGlja2VyX19jb250cm9scyBidXR0b24udmQtcGlja2VyX19jb250cm9scy1wcmV2OmRpc2FibGVkIHN2ZywudmQtcGlja2VyX19jb250cm9scyBidXR0b24udmQtcGlja2VyX19jb250cm9scy1wcmV2W2Rpc2FibGVkXSBzdmd7Y29sb3I6cmdiYSgwLDAsMCwuMjYpfS52ZC1waWNrZXItLXJ0bCAudmQtcGlja2VyX19jb250cm9scyBidXR0b24udmQtcGlja2VyX19jb250cm9scy1uZXh0LC52ZC1waWNrZXItLXJ0bCAudmQtcGlja2VyX19jb250cm9scyBidXR0b24udmQtcGlja2VyX19jb250cm9scy1wcmV2ey13ZWJraXQtdHJhbnNmb3JtOnJvdGF0ZSgxODBkZWcpO3RyYW5zZm9ybTpyb3RhdGUoMTgwZGVnKX0udmQtcGlja2VyX19jb250cm9scyBidXR0b24udmQtcGlja2VyX19jb250cm9scy1uZXh0e3BhZGRpbmc6MCAyNHB4IDAgMH1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6NzY4cHgpey52ZC1waWNrZXJfX2NvbnRyb2xzIGJ1dHRvbi52ZC1waWNrZXJfX2NvbnRyb2xzLW5leHR7cGFkZGluZzowIDhweH19LnZkLXBpY2tlcl9fY29udHJvbHMgc3Zne3dpZHRoOjI0cHg7aGVpZ2h0OjI0cHg7dmVydGljYWwtYWxpZ246bWlkZGxlfS52ZC1waWNrZXItaGVhZGVye2NvbG9yOiNmZmY7cGFkZGluZzoxNnB4O2Rpc3BsYXk6LXdlYmtpdC1ib3g7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7LXdlYmtpdC1ib3gtcGFjazpqdXN0aWZ5Oy1tcy1mbGV4LXBhY2s6anVzdGlmeTtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbjstd2Via2l0LWJveC1vcmllbnQ6dmVydGljYWw7LXdlYmtpdC1ib3gtZGlyZWN0aW9uOm5vcm1hbDstbXMtZmxleC1kaXJlY3Rpb246Y29sdW1uO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjstbXMtZmxleC13cmFwOndyYXA7ZmxleC13cmFwOndyYXA7bGluZS1oZWlnaHQ6MTttaW4taGVpZ2h0OjgwcHg7aGVpZ2h0OjgwcHg7Ym9yZGVyLXJhZGl1czo2cHggNnB4IDAgMH1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6NzY4cHgpey52ZC1waWNrZXItaGVhZGVye21pbi1oZWlnaHQ6ODVweDtoZWlnaHQ6ODVweH19LnZkLXBpY2tlci1oZWFkZXItLXJhbmdlIC52ZC1waWNrZXItaGVhZGVyX193cmFwey13ZWJraXQtYm94LWZsZXg6MTstbXMtZmxleDoxIDEgYXV0bztmbGV4OjEgMSBhdXRvOy13ZWJraXQtYm94LW9yaWVudDp2ZXJ0aWNhbDstd2Via2l0LWJveC1kaXJlY3Rpb246bm9ybWFsOy1tcy1mbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleC1kaXJlY3Rpb246Y29sdW1uOy13ZWJraXQtYm94LXBhY2s6anVzdGlmeTstbXMtZmxleC1wYWNrOmp1c3RpZnk7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59LnZkLXBpY2tlci1oZWFkZXItLXJhbmdlIC52ZC1waWNrZXItaGVhZGVyX19kYXRle2ZvbnQtc2l6ZToxOHB4O2hlaWdodDoyNnB4fUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDo3NjhweCl7LnZkLXBpY2tlci1oZWFkZXItLXJhbmdlIC52ZC1waWNrZXItaGVhZGVyX19kYXRle2ZvbnQtc2l6ZToyMnB4O2hlaWdodDozMHB4fX0udmQtcGlja2VyLWhlYWRlci0teWVhciAudmQtcGlja2VyLWhlYWRlcl9feWVhcnstd2Via2l0LWJveC1mbGV4OjE7LW1zLWZsZXg6MSAxIGF1dG87ZmxleDoxIDEgYXV0bztmb250LXNpemU6MjJweDtoZWlnaHQ6MzBweH0udmQtcGlja2VyLWhlYWRlcl9feWVhcnstd2Via2l0LWJveC1hbGlnbjpjZW50ZXI7LW1zLWZsZXgtYWxpZ246Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5Oi13ZWJraXQtaW5saW5lLWJveDtkaXNwbGF5Oi1tcy1pbmxpbmUtZmxleGJveDtkaXNwbGF5OmlubGluZS1mbGV4O2ZvbnQtc2l6ZToxNHB4O21hcmdpbi1ib3R0b206OHB4O29wYWNpdHk6LjY7LXdlYmtpdC10cmFuc2l0aW9uOm9wYWNpdHkgLjNzO3RyYW5zaXRpb246b3BhY2l0eSAuM3N9LnZkLXBpY2tlci1oZWFkZXJfX3llYXI6Zm9jdXM6bm90KC52ZC1waWNrZXItaGVhZGVyX195ZWFyLS1hY3RpdmUpLC52ZC1waWNrZXItaGVhZGVyX195ZWFyOmhvdmVyOm5vdCgudmQtcGlja2VyLWhlYWRlcl9feWVhci0tYWN0aXZlKXtjdXJzb3I6cG9pbnRlcjtvcGFjaXR5OjF9LnZkLXBpY2tlci1oZWFkZXJfX3llYXItLWFjdGl2ZXtvcGFjaXR5OjE7Y3Vyc29yOmRlZmF1bHR9LnZkLXBpY2tlci1oZWFkZXJfX2RhdGUsLnZkLXBpY2tlci1oZWFkZXJfX3dyYXB7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTotd2Via2l0LWJveDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDt3aWR0aDoxMDAlfS52ZC1waWNrZXItaGVhZGVyX19kYXRle2ZvbnQtc2l6ZToyMnB4O2hlaWdodDozMHB4O3RleHQtYWxpZ246bGVmdDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZy1ib3R0b206OHB4O21hcmdpbi1ib3R0b206LThweDtvcGFjaXR5Oi42Oy13ZWJraXQtdHJhbnNpdGlvbjpvcGFjaXR5IC4zczt0cmFuc2l0aW9uOm9wYWNpdHkgLjNzfS52ZC1waWNrZXItaGVhZGVyX19kYXRlOmZvY3VzOm5vdCgudmQtcGlja2VyLWhlYWRlcl9fZGF0ZS0tYWN0aXZlKSwudmQtcGlja2VyLWhlYWRlcl9fZGF0ZTpob3Zlcjpub3QoLnZkLXBpY2tlci1oZWFkZXJfX2RhdGUtLWFjdGl2ZSl7Y3Vyc29yOnBvaW50ZXI7b3BhY2l0eToxfS52ZC1waWNrZXItaGVhZGVyX19kYXRlLS1hY3RpdmV7b3BhY2l0eToxO2N1cnNvcjpkZWZhdWx0fUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDo3NjhweCl7LnZkLXBpY2tlci1oZWFkZXJfX2RhdGV7Zm9udC1zaXplOjI0cHg7aGVpZ2h0OjMycHh9fS52ZC1waWNrZXItcHJlc2V0e2JvcmRlcjpub25lO21hcmdpbjowO3BhZGRpbmc6MDt3aWR0aDphdXRvO292ZXJmbG93OnZpc2libGU7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtjb2xvcjppbmhlcml0O2ZvbnQ6aW5oZXJpdDtsaW5lLWhlaWdodDpub3JtYWw7LXdlYmtpdC1mb250LXNtb290aGluZzppbmhlcml0Oy1tb3otb3N4LWZvbnQtc21vb3RoaW5nOmluaGVyaXQ7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmV9LnZkLXBpY2tlci1wcmVzZXQ6YWN0aXZlLC52ZC1waWNrZXItcHJlc2V0OmZvY3Vze291dGxpbmU6MDstd2Via2l0LWJveC1zaGFkb3c6MDtib3gtc2hhZG93OjB9LnZkLXBpY2tlci1wcmVzZXRbcm9sZT1idXR0b25dLC52ZC1waWNrZXItcHJlc2V0W3R5cGU9YnV0dG9uXSwudmQtcGlja2VyLXByZXNldFt0eXBlPXJlc2V0XSwudmQtcGlja2VyLXByZXNldFt0eXBlPXN1Ym1pdF17Y3Vyc29yOnBvaW50ZXJ9LnZkLXBpY2tlci1wcmVzZXRze3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6LXdlYmtpdC1ib3g7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7cGFkZGluZzoxNnB4IDEycHh9QG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOjQ4MHB4KXsudmQtcGlja2VyLXByZXNldHN7cGFkZGluZzoxNnB4IDEycHggOHB4fX0udmQtcGlja2VyLXByZXNldHNfX3dyYXBwZXJ7LXdlYmtpdC1ib3gtZmxleDoxOy1tcy1mbGV4OjEgMSBhdXRvO2ZsZXg6MSAxIGF1dG87LW1zLWZsZXgtd3JhcDp3cmFwO2ZsZXgtd3JhcDp3cmFwO3dpZHRoOjEwMCV9LnZkLXBpY2tlci1wcmVzZXQsLnZkLXBpY2tlci1wcmVzZXRzX193cmFwcGVye3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6LXdlYmtpdC1ib3g7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXh9LnZkLXBpY2tlci1wcmVzZXR7LXdlYmtpdC1ib3gtYWxpZ246Y2VudGVyOy1tcy1mbGV4LWFsaWduOmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7LXdlYmtpdC1ib3gtcGFjazpjZW50ZXI7LW1zLWZsZXgtcGFjazpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjstd2Via2l0LWJveC1mbGV4OjA7LW1zLWZsZXg6MCAwIDUwJTtmbGV4OjAgMCA1MCU7bWF4LXdpZHRoOjUwJTtwYWRkaW5nOjAgOHB4O2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjE0cHg7b3ZlcmZsb3c6aGlkZGVuO2JvcmRlcjowIHNvbGlkICNlZWYxZjg7LXdlYmtpdC10cmFuc2l0aW9uOm9wYWNpdHkgLjNzIGN1YmljLWJlemllciguMjUsLjgsLjUsMSk7dHJhbnNpdGlvbjpvcGFjaXR5IC4zcyBjdWJpYy1iZXppZXIoLjI1LC44LC41LDEpfS52ZC1waWNrZXItLWJvdHRvbXNoZWV0IC52ZC1waWNrZXItcHJlc2V0LC52ZC1waWNrZXItcHJlc2V0e21pbi1oZWlnaHQ6MzJweDtoZWlnaHQ6MzJweH0udmQtcGlja2VyLXByZXNldDpudGgtY2hpbGQob2RkKXtib3JkZXItd2lkdGg6MCAxcHggMXB4fS52ZC1waWNrZXItcHJlc2V0Om50aC1jaGlsZChvZGQpOmZpcnN0LWNoaWxke2JvcmRlci13aWR0aDoxcHh9LnZkLXBpY2tlci1wcmVzZXQ6bnRoLWNoaWxkKDJuKXtib3JkZXItd2lkdGg6MCAxcHggMXB4IDB9LnZkLXBpY2tlci1wcmVzZXQ6bnRoLWNoaWxkKDJuKTpudGgtY2hpbGQoMil7Ym9yZGVyLXdpZHRoOjFweCAxcHggMXB4IDB9LnZkLXBpY2tlci1wcmVzZXRfX2VmZmVjdHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtvcGFjaXR5OjA7LXdlYmtpdC10cmFuc2l0aW9uOm9wYWNpdHkgLjNzIGN1YmljLWJlemllciguMjUsLjgsLjUsMSk7dHJhbnNpdGlvbjpvcGFjaXR5IC4zcyBjdWJpYy1iZXppZXIoLjI1LC44LC41LDEpO3otaW5kZXg6MH0udmQtcGlja2VyLXByZXNldF9fbmFtZXtwb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4OjF9LnZkLXBpY2tlci1wcmVzZXQtLXNlbGVjdGVkLC52ZC1waWNrZXItcHJlc2V0OmhvdmVyOm5vdCgudmQtcGlja2VyLXByZXNldC0tZGlzYWJsZWQpe2NvbG9yOiNmZmZ9LnZkLXBpY2tlci1wcmVzZXQtLXNlbGVjdGVkIC52ZC1waWNrZXItcHJlc2V0X19lZmZlY3QsLnZkLXBpY2tlci1wcmVzZXQ6aG92ZXI6bm90KC52ZC1waWNrZXItcHJlc2V0LS1kaXNhYmxlZCkgLnZkLXBpY2tlci1wcmVzZXRfX2VmZmVjdHtvcGFjaXR5OjF9LnZkLXBpY2tlci1wcmVzZXQtLXNlbGVjdGVke3BvaW50ZXItZXZlbnRzOm5vbmV9LnZkLXBpY2tlci1wcmVzZXQtLWRpc2FibGVke2NvbG9yOnJnYmEoOTMsMTA2LDEzNywuMik7Y3Vyc29yOm5vdC1hbGxvd2VkO3BvaW50ZXItZXZlbnRzOm5vbmV9LnZkLXBpY2tlcl9fdGFibGV7cG9zaXRpb246cmVsYXRpdmU7cGFkZGluZzowIDEycHg7aGVpZ2h0OjI3NHB4fS52ZC1waWNrZXItLWJvdHRvbXNoZWV0IC52ZC1waWNrZXJfX3RhYmxle2hlaWdodDozMjJweH0udmQtcGlja2VyX190YWJsZS13ZWVre2Rpc3BsYXk6LXdlYmtpdC1ib3g7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7LW1zLWZsZXgtd3JhcDpub3dyYXA7ZmxleC13cmFwOm5vd3JhcDstd2Via2l0LWJveC1mbGV4OjE7LW1zLWZsZXg6MSAxIDEwMCU7ZmxleDoxIDEgMTAwJTttYXgtd2lkdGg6MTAwJTtwYWRkaW5nOjhweCAwO2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxOHB4O2ZvbnQtd2VpZ2h0OjUwMDtjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9LnZkLXBpY2tlcl9fdGFibGUtd2Vla2RheXstd2Via2l0LWJveC1mbGV4OjA7LW1zLWZsZXg6MCAwIDE0LjI4NTcxJTtmbGV4OjAgMCAxNC4yODU3MSU7bWF4LXdpZHRoOjE0LjI4NTcxJTt0ZXh0LWFsaWduOmNlbnRlcn0udmQtcGlja2VyX190YWJsZS1kYXlzX193cmFwcGVye3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OmhpZGRlbjtoZWlnaHQ6MjQwcHh9LnZkLXBpY2tlci0tYm90dG9tc2hlZXQgLnZkLXBpY2tlcl9fdGFibGUtZGF5c19fd3JhcHBlcntoZWlnaHQ6Mjg4cHh9LnZkLXBpY2tlcl9fdGFibGUtZGF5c3tkaXNwbGF5Oi13ZWJraXQtYm94O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4Oy1tcy1mbGV4LXdyYXA6d3JhcDtmbGV4LXdyYXA6d3JhcDtvdmVyZmxvdzpoaWRkZW47d2lkdGg6MTAwJX0udmQtcGlja2VyX190YWJsZS1kYXl7Ym9yZGVyOm5vbmU7bWFyZ2luOjA7cGFkZGluZzowO3dpZHRoOmF1dG87b3ZlcmZsb3c6dmlzaWJsZTtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2NvbG9yOmluaGVyaXQ7Zm9udDppbmhlcml0O2xpbmUtaGVpZ2h0Om5vcm1hbDstd2Via2l0LWZvbnQtc21vb3RoaW5nOmluaGVyaXQ7LW1vei1vc3gtZm9udC1zbW9vdGhpbmc6aW5oZXJpdDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX0udmQtcGlja2VyX190YWJsZS1kYXk6YWN0aXZlLC52ZC1waWNrZXJfX3RhYmxlLWRheTpmb2N1c3tvdXRsaW5lOjA7LXdlYmtpdC1ib3gtc2hhZG93OjA7Ym94LXNoYWRvdzowfS52ZC1waWNrZXJfX3RhYmxlLWRheVtyb2xlPWJ1dHRvbl0sLnZkLXBpY2tlcl9fdGFibGUtZGF5W3R5cGU9YnV0dG9uXSwudmQtcGlja2VyX190YWJsZS1kYXlbdHlwZT1yZXNldF0sLnZkLXBpY2tlcl9fdGFibGUtZGF5W3R5cGU9c3VibWl0XXtjdXJzb3I6cG9pbnRlcn0udmQtcGlja2VyX190YWJsZS1kYXl7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6MTQuMjg1NzElO2hlaWdodDo0MHB4O2xpbmUtaGVpZ2h0OjE7Zm9udC1zaXplOjEycHg7ZmxvYXQ6bGVmdDt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjpjdXJyZW50Q29sb3I7Zm9udC13ZWlnaHQ6NTAwOy13ZWJraXQtdHJhbnNpdGlvbjphbGwgLjQ1cyBjdWJpYy1iZXppZXIoLjIzLDEsLjMyLDEpO3RyYW5zaXRpb246YWxsIC40NXMgY3ViaWMtYmV6aWVyKC4yMywxLC4zMiwxKTtvdmVyZmxvdzpoaWRkZW59LnZkLXBpY2tlci0tYm90dG9tc2hlZXQgLnZkLXBpY2tlcl9fdGFibGUtZGF5e2hlaWdodDo0OHB4fS52ZC1waWNrZXJfX3RhYmxlLWRheV9fd3JhcHBlcntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MnB4O2JvdHRvbToycHg7bGVmdDowO3JpZ2h0OjA7Ym9yZGVyOm5vbmV9LnZkLXBpY2tlcl9fdGFibGUtZGF5X193cmFwcGVyOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO29wYWNpdHk6MDt3aWR0aDo1MCU7YmFja2dyb3VuZC1jb2xvcjojZmZmO3otaW5kZXg6MTstd2Via2l0LXRyYW5zaXRpb24tcHJvcGVydHk6b3BhY2l0eTt0cmFuc2l0aW9uLXByb3BlcnR5Om9wYWNpdHl9LnZkLXBpY2tlcl9fdGFibGUtZGF5X193cmFwcGVyOmFmdGVye2NvbnRlbnQ6XFxcIlxcXCI7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDo1MCU7d2lkdGg6Y2FsYygxMDAlICsgMXB4KTtoZWlnaHQ6MzZweDtib3JkZXI6MXB4IHNvbGlkO2JhY2tncm91bmQtY29sb3I6Y3VycmVudENvbG9yO29wYWNpdHk6LjEyOy13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTUwJSkgc2NhbGUoMCk7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTUwJSkgc2NhbGUoMCl9LnZkLXBpY2tlci0tYm90dG9tc2hlZXQgLnZkLXBpY2tlcl9fdGFibGUtZGF5X193cmFwcGVyOmFmdGVye2hlaWdodDo0NHB4fS52ZC1waWNrZXJfX3RhYmxlLWRheV9fY3VycmVudCwudmQtcGlja2VyX190YWJsZS1kYXlfX2VmZmVjdHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjUwJTstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVYKC01MCUpO3RyYW5zZm9ybTp0cmFuc2xhdGVYKC01MCUpO3dpZHRoOjM2cHg7aGVpZ2h0OjM2cHg7Ym9yZGVyLXJhZGl1czo1MCU7Ym9yZGVyOjFweCBzb2xpZH0udmQtcGlja2VyLS1ib3R0b21zaGVldCAudmQtcGlja2VyX190YWJsZS1kYXlfX2N1cnJlbnQsLnZkLXBpY2tlci0tYm90dG9tc2hlZXQgLnZkLXBpY2tlcl9fdGFibGUtZGF5X19lZmZlY3R7d2lkdGg6NDRweDtoZWlnaHQ6NDRweH0udmQtcGlja2VyX190YWJsZS1kYXlfX2N1cnJlbnR7Y29sb3I6cmdiYSgwLDAsMCwuODcpO3otaW5kZXg6MX0udmQtcGlja2VyX190YWJsZS1kYXlfX2VmZmVjdHtiYWNrZ3JvdW5kLWNvbG9yOmN1cnJlbnRDb2xvcjstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVYKC01MCUpIHNjYWxlKDApO3RyYW5zZm9ybTp0cmFuc2xhdGVYKC01MCUpIHNjYWxlKDApOy13ZWJraXQtdHJhbnNpdGlvbjphbGwgLjQ1cyBjdWJpYy1iZXppZXIoLjIzLDEsLjMyLDEpO3RyYW5zaXRpb246YWxsIC40NXMgY3ViaWMtYmV6aWVyKC4yMywxLC4zMiwxKTt6LWluZGV4OjF9LnZkLXBpY2tlci0tcmFuZ2Utc2VsZWN0aW5nIC52ZC1waWNrZXJfX3RhYmxlLWRheV9fZWZmZWN0ey13ZWJraXQtdHJhbnNpdGlvbjp1bnNldDt0cmFuc2l0aW9uOnVuc2V0fS52ZC1waWNrZXJfX3RhYmxlLWRheV9fdGV4dHtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5Oi13ZWJraXQtaW5saW5lLWJveDtkaXNwbGF5Oi1tcy1pbmxpbmUtZmxleGJveDtkaXNwbGF5OmlubGluZS1mbGV4Oy13ZWJraXQtYm94LWFsaWduOmNlbnRlcjstbXMtZmxleC1hbGlnbjpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyOy13ZWJraXQtYm94LXBhY2s6Y2VudGVyOy1tcy1mbGV4LXBhY2s6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7bWFyZ2luOmF1dG87d2lkdGg6MzZweDtoZWlnaHQ6MzZweDtjb2xvcjpyZ2JhKDAsMCwwLC44Nyk7ei1pbmRleDoxfS52ZC1waWNrZXItLWJvdHRvbXNoZWV0IC52ZC1waWNrZXJfX3RhYmxlLWRheV9fdGV4dHt3aWR0aDo0NHB4O2hlaWdodDo0NHB4fS52ZC1waWNrZXJfX3RhYmxlLWRheTpob3Zlcjpub3QoLnZkLXBpY2tlcl9fdGFibGUtZGF5LS1kaXNhYmxlZCk6bm90KC52ZC1waWNrZXJfX3RhYmxlLWRheS0tc2VsZWN0ZWQpOm5vdCgudmQtcGlja2VyX190YWJsZS1kYXktLWJldHdlZW4pIC52ZC1waWNrZXJfX3RhYmxlLWRheV9fZWZmZWN0ey13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTUwJSkgc2NhbGUoMSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTUwJSkgc2NhbGUoMSk7b3BhY2l0eTouMTJ9LnZkLXBpY2tlcl9fdGFibGUtZGF5OmhvdmVyOm5vdCgudmQtcGlja2VyX190YWJsZS1kYXktLWRpc2FibGVkKTpub3QoLnZkLXBpY2tlcl9fdGFibGUtZGF5LS1zZWxlY3RlZCk6bm90KC52ZC1waWNrZXJfX3RhYmxlLWRheS0tYmV0d2VlbikudmQtcGlja2VyX190YWJsZS1kYXktLXNlbGVjdC1lbmQgLnZkLXBpY2tlcl9fdGFibGUtZGF5X193cmFwcGVyOmJlZm9yZSwudmQtcGlja2VyX190YWJsZS1kYXk6aG92ZXI6bm90KC52ZC1waWNrZXJfX3RhYmxlLWRheS0tZGlzYWJsZWQpOm5vdCgudmQtcGlja2VyX190YWJsZS1kYXktLXNlbGVjdGVkKTpub3QoLnZkLXBpY2tlcl9fdGFibGUtZGF5LS1iZXR3ZWVuKS52ZC1waWNrZXJfX3RhYmxlLWRheS0tc2VsZWN0LXN0YXJ0IC52ZC1waWNrZXJfX3RhYmxlLWRheV9fd3JhcHBlcjpiZWZvcmV7b3BhY2l0eToxO3JpZ2h0OjB9LnZkLXBpY2tlci0tcnRsIC52ZC1waWNrZXJfX3RhYmxlLWRheTpob3Zlcjpub3QoLnZkLXBpY2tlcl9fdGFibGUtZGF5LS1kaXNhYmxlZCk6bm90KC52ZC1waWNrZXJfX3RhYmxlLWRheS0tc2VsZWN0ZWQpOm5vdCgudmQtcGlja2VyX190YWJsZS1kYXktLWJldHdlZW4pLnZkLXBpY2tlcl9fdGFibGUtZGF5LS1zZWxlY3QtZW5kIC52ZC1waWNrZXJfX3RhYmxlLWRheV9fd3JhcHBlcjpiZWZvcmUsLnZkLXBpY2tlci0tcnRsIC52ZC1waWNrZXJfX3RhYmxlLWRheTpob3Zlcjpub3QoLnZkLXBpY2tlcl9fdGFibGUtZGF5LS1kaXNhYmxlZCk6bm90KC52ZC1waWNrZXJfX3RhYmxlLWRheS0tc2VsZWN0ZWQpOm5vdCgudmQtcGlja2VyX190YWJsZS1kYXktLWJldHdlZW4pLnZkLXBpY2tlcl9fdGFibGUtZGF5LS1zZWxlY3Qtc3RhcnQgLnZkLXBpY2tlcl9fdGFibGUtZGF5X193cmFwcGVyOmJlZm9yZXtsZWZ0OjA7cmlnaHQ6dW5zZXR9LnZkLXBpY2tlcl9fdGFibGUtZGF5OmhvdmVyOm5vdCgudmQtcGlja2VyX190YWJsZS1kYXktLWRpc2FibGVkKTpub3QoLnZkLXBpY2tlcl9fdGFibGUtZGF5LS1zZWxlY3RlZCk6bm90KC52ZC1waWNrZXJfX3RhYmxlLWRheS0tYmV0d2VlbikudmQtcGlja2VyX190YWJsZS1kYXktLXNlbGVjdC1lbmQgLnZkLXBpY2tlcl9fdGFibGUtZGF5X193cmFwcGVyOmFmdGVyLC52ZC1waWNrZXJfX3RhYmxlLWRheTpob3Zlcjpub3QoLnZkLXBpY2tlcl9fdGFibGUtZGF5LS1kaXNhYmxlZCk6bm90KC52ZC1waWNrZXJfX3RhYmxlLWRheS0tc2VsZWN0ZWQpOm5vdCgudmQtcGlja2VyX190YWJsZS1kYXktLWJldHdlZW4pLnZkLXBpY2tlcl9fdGFibGUtZGF5LS1zZWxlY3Qtc3RhcnQgLnZkLXBpY2tlcl9fdGFibGUtZGF5X193cmFwcGVyOmFmdGVyey13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTUwJSkgc2NhbGUoMSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTUwJSkgc2NhbGUoMSk7b3BhY2l0eTouMDh9LnZkLXBpY2tlcl9fdGFibGUtZGF5OmhvdmVyOm5vdCgudmQtcGlja2VyX190YWJsZS1kYXktLWRpc2FibGVkKTpub3QoLnZkLXBpY2tlcl9fdGFibGUtZGF5LS1zZWxlY3RlZCk6bm90KC52ZC1waWNrZXJfX3RhYmxlLWRheS0tYmV0d2VlbikudmQtcGlja2VyX190YWJsZS1kYXktLXNlbGVjdC1lbmQgLnZkLXBpY2tlcl9fdGFibGUtZGF5X19lZmZlY3QsLnZkLXBpY2tlcl9fdGFibGUtZGF5OmhvdmVyOm5vdCgudmQtcGlja2VyX190YWJsZS1kYXktLWRpc2FibGVkKTpub3QoLnZkLXBpY2tlcl9fdGFibGUtZGF5LS1zZWxlY3RlZCk6bm90KC52ZC1waWNrZXJfX3RhYmxlLWRheS0tYmV0d2VlbikudmQtcGlja2VyX190YWJsZS1kYXktLXNlbGVjdC1zdGFydCAudmQtcGlja2VyX190YWJsZS1kYXlfX2VmZmVjdHtvcGFjaXR5OjE7LXdlYmtpdC10cmFuc2l0aW9uOnVuc2V0O3RyYW5zaXRpb246dW5zZXR9LnZkLXBpY2tlcl9fdGFibGUtZGF5OmhvdmVyOm5vdCgudmQtcGlja2VyX190YWJsZS1kYXktLWRpc2FibGVkKTpub3QoLnZkLXBpY2tlcl9fdGFibGUtZGF5LS1zZWxlY3RlZCk6bm90KC52ZC1waWNrZXJfX3RhYmxlLWRheS0tYmV0d2VlbikudmQtcGlja2VyX190YWJsZS1kYXktLXNlbGVjdC1lbmQgLnZkLXBpY2tlcl9fdGFibGUtZGF5X190ZXh0LC52ZC1waWNrZXJfX3RhYmxlLWRheTpob3Zlcjpub3QoLnZkLXBpY2tlcl9fdGFibGUtZGF5LS1kaXNhYmxlZCk6bm90KC52ZC1waWNrZXJfX3RhYmxlLWRheS0tc2VsZWN0ZWQpOm5vdCgudmQtcGlja2VyX190YWJsZS1kYXktLWJldHdlZW4pLnZkLXBpY2tlcl9fdGFibGUtZGF5LS1zZWxlY3Qtc3RhcnQgLnZkLXBpY2tlcl9fdGFibGUtZGF5X190ZXh0e2NvbG9yOiNmZmZ9LnZkLXBpY2tlcl9fdGFibGUtZGF5OmhvdmVyOm5vdCgudmQtcGlja2VyX190YWJsZS1kYXktLWRpc2FibGVkKTpub3QoLnZkLXBpY2tlcl9fdGFibGUtZGF5LS1zZWxlY3RlZCk6bm90KC52ZC1waWNrZXJfX3RhYmxlLWRheS0tYmV0d2VlbikudmQtcGlja2VyX190YWJsZS1kYXktLXNlbGVjdC1zdGFydCAudmQtcGlja2VyX190YWJsZS1kYXlfX3dyYXBwZXI6YmVmb3Jle2xlZnQ6MH0udmQtcGlja2VyLS1ydGwgLnZkLXBpY2tlcl9fdGFibGUtZGF5OmhvdmVyOm5vdCgudmQtcGlja2VyX190YWJsZS1kYXktLWRpc2FibGVkKTpub3QoLnZkLXBpY2tlcl9fdGFibGUtZGF5LS1zZWxlY3RlZCk6bm90KC52ZC1waWNrZXJfX3RhYmxlLWRheS0tYmV0d2VlbikudmQtcGlja2VyX190YWJsZS1kYXktLXNlbGVjdC1zdGFydCAudmQtcGlja2VyX190YWJsZS1kYXlfX3dyYXBwZXI6YmVmb3Jle3JpZ2h0OjA7bGVmdDp1bnNldH0udmQtcGlja2VyX190YWJsZS1kYXktLXNlbGVjdGVkIC52ZC1waWNrZXJfX3RhYmxlLWRheV9fZWZmZWN0ey13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTUwJSkgc2NhbGUoMSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTUwJSkgc2NhbGUoMSk7b3BhY2l0eToxfS52ZC1waWNrZXJfX3RhYmxlLWRheS0tc2VsZWN0ZWQgLnZkLXBpY2tlcl9fdGFibGUtZGF5X190ZXh0e2NvbG9yOiNmZmZ9LnZkLXBpY2tlcl9fdGFibGUtZGF5LS1iZXR3ZWVuOm5vdCgudmQtcGlja2VyX190YWJsZS1kYXktLWRpc2FibGVkKSAudmQtcGlja2VyX190YWJsZS1kYXlfX3dyYXBwZXI6YWZ0ZXIsLnZkLXBpY2tlcl9fdGFibGUtZGF5LS1maXJzdCAudmQtcGlja2VyX190YWJsZS1kYXlfX3dyYXBwZXI6YWZ0ZXIsLnZkLXBpY2tlcl9fdGFibGUtZGF5LS1pbi1yYW5nZTpub3QoLnZkLXBpY2tlcl9fdGFibGUtZGF5LS1kaXNhYmxlZCkgLnZkLXBpY2tlcl9fdGFibGUtZGF5X193cmFwcGVyOmFmdGVyLC52ZC1waWNrZXJfX3RhYmxlLWRheS0tbGFzdCAudmQtcGlja2VyX190YWJsZS1kYXlfX3dyYXBwZXI6YWZ0ZXJ7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWCgtNTAlKSBzY2FsZSgxKTt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtNTAlKSBzY2FsZSgxKX0udmQtcGlja2VyLS1yYW5nZS1zZWxlY3RpbmcgLnZkLXBpY2tlcl9fdGFibGUtZGF5LS1maXJzdCAudmQtcGlja2VyX190YWJsZS1kYXlfX3dyYXBwZXI6YWZ0ZXIsLnZkLXBpY2tlci0tcmFuZ2Utc2VsZWN0aW5nIC52ZC1waWNrZXJfX3RhYmxlLWRheS0tbGFzdCAudmQtcGlja2VyX190YWJsZS1kYXlfX3dyYXBwZXI6YWZ0ZXIsLnZkLXBpY2tlcl9fdGFibGUtZGF5LS1pbi1yYW5nZTpub3QoLnZkLXBpY2tlcl9fdGFibGUtZGF5LS1kaXNhYmxlZCkgLnZkLXBpY2tlcl9fdGFibGUtZGF5X193cmFwcGVyOmFmdGVye29wYWNpdHk6LjA4fS52ZC1waWNrZXJfX3RhYmxlLWRheS0tZmlyc3QgLnZkLXBpY2tlcl9fdGFibGUtZGF5X193cmFwcGVyOmJlZm9yZXtvcGFjaXR5OjE7bGVmdDowfS52ZC1waWNrZXItLXJ0bCAudmQtcGlja2VyX190YWJsZS1kYXktLWZpcnN0IC52ZC1waWNrZXJfX3RhYmxlLWRheV9fd3JhcHBlcjpiZWZvcmV7cmlnaHQ6MDtsZWZ0OnVuc2V0fS52ZC1waWNrZXJfX3RhYmxlLWRheS0tbGFzdCAudmQtcGlja2VyX190YWJsZS1kYXlfX3dyYXBwZXI6YmVmb3Jle29wYWNpdHk6MTtyaWdodDowfS52ZC1waWNrZXItLXJ0bCAudmQtcGlja2VyX190YWJsZS1kYXktLWxhc3QgLnZkLXBpY2tlcl9fdGFibGUtZGF5X193cmFwcGVyOmJlZm9yZXtsZWZ0OjA7cmlnaHQ6dW5zZXR9LnZkLXBpY2tlcl9fdGFibGUtZGF5LS1sYXN0Om5vdCgudmQtcGlja2VyX190YWJsZS1kYXktLXNlbGVjdC1zdGFydCkgLnZkLXBpY2tlcl9fdGFibGUtZGF5X19lZmZlY3R7b3BhY2l0eToxfS52ZC1waWNrZXJfX3RhYmxlLWRheS0tZGlzYWJsZWQudmQtcGlja2VyX190YWJsZS1kYXl7Y3Vyc29yOmRlZmF1bHR9LnZkLXBpY2tlcl9fdGFibGUtZGF5LS1kaXNhYmxlZC52ZC1waWNrZXJfX3RhYmxlLWRheSAudmQtcGlja2VyX190YWJsZS1kYXlfX3RleHR7Y29sb3I6cmdiYSg5MywxMDYsMTM3LC4yKX0udmQtcGlja2VyLXZhbGlkYXRlX19idXR0b257Ym9yZGVyOm5vbmU7bWFyZ2luOjA7cGFkZGluZzowO3dpZHRoOmF1dG87b3ZlcmZsb3c6dmlzaWJsZTtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2NvbG9yOmluaGVyaXQ7Zm9udDppbmhlcml0O2xpbmUtaGVpZ2h0Om5vcm1hbDstd2Via2l0LWZvbnQtc21vb3RoaW5nOmluaGVyaXQ7LW1vei1vc3gtZm9udC1zbW9vdGhpbmc6aW5oZXJpdDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX0udmQtcGlja2VyLXZhbGlkYXRlX19idXR0b246YWN0aXZlLC52ZC1waWNrZXItdmFsaWRhdGVfX2J1dHRvbjpmb2N1c3tvdXRsaW5lOjA7LXdlYmtpdC1ib3gtc2hhZG93OjA7Ym94LXNoYWRvdzowfS52ZC1waWNrZXItdmFsaWRhdGVfX2J1dHRvbltyb2xlPWJ1dHRvbl0sLnZkLXBpY2tlci12YWxpZGF0ZV9fYnV0dG9uW3R5cGU9YnV0dG9uXSwudmQtcGlja2VyLXZhbGlkYXRlX19idXR0b25bdHlwZT1yZXNldF0sLnZkLXBpY2tlci12YWxpZGF0ZV9fYnV0dG9uW3R5cGU9c3VibWl0XXtjdXJzb3I6cG9pbnRlcn0udmQtcGlja2VyLXZhbGlkYXRle2Rpc3BsYXk6LXdlYmtpdC1ib3g7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7LW1zLWZsZXgtYWxpZ246Y2VudGVyOy13ZWJraXQtYm94LXBhY2s6ZW5kOy1tcy1mbGV4LXBhY2s6ZW5kO2p1c3RpZnktY29udGVudDpmbGV4LWVuZDtwYWRkaW5nOjhweH0udmQtcGlja2VyLXZhbGlkYXRlLC52ZC1waWNrZXItdmFsaWRhdGVfX2J1dHRvbntwb3NpdGlvbjpyZWxhdGl2ZTstd2Via2l0LWJveC1hbGlnbjpjZW50ZXI7LW1zLWZsZXgtYWxpZ246Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcn0udmQtcGlja2VyLXZhbGlkYXRlX19idXR0b257ZGlzcGxheTotd2Via2l0LWlubGluZS1ib3g7ZGlzcGxheTotbXMtaW5saW5lLWZsZXhib3g7ZGlzcGxheTppbmxpbmUtZmxleDstd2Via2l0LWJveC1mbGV4OjA7LW1zLWZsZXg6MCAwIGF1dG87ZmxleDowIDAgYXV0bzstbXMtZmxleC1hbGlnbjpjZW50ZXI7LXdlYmtpdC1ib3gtcGFjazpjZW50ZXI7LW1zLWZsZXgtcGFjazpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtoZWlnaHQ6MzZweDttaW4td2lkdGg6NDRweDtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDA7Ym9yZGVyLXJhZGl1czo0cHg7cGFkZGluZzo2cHggOHB4O291dGxpbmU6MDt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7dGV4dC1kZWNvcmF0aW9uOm5vbmU7b3ZlcmZsb3c6aGlkZGVufS52ZC1waWNrZXItdmFsaWRhdGVfX2J1dHRvbisudmQtcGlja2VyLXZhbGlkYXRlX19idXR0b257bWFyZ2luLWxlZnQ6OHB4fS52ZC1waWNrZXItdmFsaWRhdGVfX2J1dHRvbjpob3Zlcjpub3QoOmRpc2FibGVkKSAudmQtcGlja2VyLXZhbGlkYXRlX19lZmZlY3R7b3BhY2l0eTouMX0udmQtcGlja2VyLXZhbGlkYXRlX19idXR0b246ZGlzYWJsZWQsLnZkLXBpY2tlci12YWxpZGF0ZV9fYnV0dG9uW2Rpc2FibGVkXXtjb2xvcjpyZ2JhKDAsMCwwLC4yNikhaW1wb3J0YW50O2N1cnNvcjpkZWZhdWx0fS52ZC1waWNrZXItdmFsaWRhdGVfX2VmZmVjdHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtvcGFjaXR5OjA7LXdlYmtpdC10cmFuc2l0aW9uOm9wYWNpdHkgLjQ1cyBjdWJpYy1iZXppZXIoLjIzLDEsLjMyLDEpO3RyYW5zaXRpb246b3BhY2l0eSAuNDVzIGN1YmljLWJlemllciguMjMsMSwuMzIsMSk7ei1pbmRleDotMX0udmQtcGlja2VyX19tb250aHMtYnV0dG9ue2JvcmRlcjpub25lO21hcmdpbjowO3BhZGRpbmc6MDt3aWR0aDphdXRvO292ZXJmbG93OnZpc2libGU7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtjb2xvcjppbmhlcml0O2ZvbnQ6aW5oZXJpdDtsaW5lLWhlaWdodDpub3JtYWw7LXdlYmtpdC1mb250LXNtb290aGluZzppbmhlcml0Oy1tb3otb3N4LWZvbnQtc21vb3RoaW5nOmluaGVyaXQ7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmV9LnZkLXBpY2tlcl9fbW9udGhzLWJ1dHRvbjphY3RpdmUsLnZkLXBpY2tlcl9fbW9udGhzLWJ1dHRvbjpmb2N1c3tvdXRsaW5lOjA7LXdlYmtpdC1ib3gtc2hhZG93OjA7Ym94LXNoYWRvdzowfS52ZC1waWNrZXJfX21vbnRocy1idXR0b25bcm9sZT1idXR0b25dLC52ZC1waWNrZXJfX21vbnRocy1idXR0b25bdHlwZT1idXR0b25dLC52ZC1waWNrZXJfX21vbnRocy1idXR0b25bdHlwZT1yZXNldF0sLnZkLXBpY2tlcl9fbW9udGhzLWJ1dHRvblt0eXBlPXN1Ym1pdF17Y3Vyc29yOnBvaW50ZXJ9LnZkLXBpY2tlcl9fbW9udGhze3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6LXdlYmtpdC1ib3g7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7LXdlYmtpdC1ib3gtZmxleDoxOy1tcy1mbGV4OjEgMSBhdXRvO2ZsZXg6MSAxIGF1dG87aGVpZ2h0OjI3NHB4fS52ZC1waWNrZXItLWJvdHRvbXNoZWV0IC52ZC1waWNrZXJfX21vbnRoc3toZWlnaHQ6MzIycHh9QHN1cHBvcnRzIChwYWRkaW5nLWJvdHRvbTpjb25zdGFudChzYWZlLWFyZWEtaW5zZXQtYm90dG9tKSl7LnZkLXBpY2tlcl9fbW9udGhzey0tc2FmZS1hcmVhLWluc2V0LWJvdHRvbTpjb25zdGFudChzYWZlLWFyZWEtaW5zZXQtYm90dG9tKTtwYWRkaW5nLWJvdHRvbTp2YXIoLS1zYWZlLWFyZWEtaW5zZXQtYm90dG9tKX19QHN1cHBvcnRzIChwYWRkaW5nLWJvdHRvbTplbnYoc2FmZS1hcmVhLWluc2V0LWJvdHRvbSkpey52ZC1waWNrZXJfX21vbnRoc3stLXNhZmUtYXJlYS1pbnNldC1ib3R0b206ZW52KHNhZmUtYXJlYS1pbnNldC1ib3R0b20pO3BhZGRpbmctYm90dG9tOnZhcigtLXNhZmUtYXJlYS1pbnNldC1ib3R0b20pfX0udmQtcGlja2VyX19tb250aHMtaW5uZXJ7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtwYWRkaW5nOjAgMTJweH0udmQtcGlja2VyX19tb250aHMtaW5uZXIsLnZkLXBpY2tlcl9fbW9udGhzLWxpc3R7ZGlzcGxheTotd2Via2l0LWJveDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleH0udmQtcGlja2VyX19tb250aHMtbGlzdHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDstd2Via2l0LWJveC1mbGV4OjE7LW1zLWZsZXg6MSAxIGF1dG87ZmxleDoxIDEgYXV0bzstbXMtZmxleC13cmFwOndyYXA7ZmxleC13cmFwOndyYXA7anVzdGlmeS1pdGVtczpjZW50ZXI7LXdlYmtpdC1ib3gtYWxpZ246Y2VudGVyOy1tcy1mbGV4LWFsaWduOmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXJ9LnZkLXBpY2tlcl9fbW9udGhzLWJ1dHRvbntwb3NpdGlvbjpyZWxhdGl2ZTtoZWlnaHQ6NDhweDttaW4taGVpZ2h0OjQ4cHg7d2lkdGg6MTAwJTtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo1MDA7Ym9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lOy13ZWJraXQtdHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIC4zczt0cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgLjNzO2JvcmRlcjp0aGluIHNvbGlkIHRyYW5zcGFyZW50fS52ZC1waWNrZXJfX21vbnRocy1idXR0b246aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZWVmMWY4fS52ZC1waWNrZXJfX21vbnRocy1idXR0b246ZGlzYWJsZWQsLnZkLXBpY2tlcl9fbW9udGhzLWJ1dHRvbltkaXNhYmxlZF17Y3Vyc29yOmRlZmF1bHQ7Y29sb3I6cmdiYSgwLDAsMCwuMjYpO3BvaW50ZXItZXZlbnRzOm5vbmV9LnZkLXBpY2tlcl9fbW9udGhzLWJ1dHRvbl9fd3JhcHBlcntwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5Oi13ZWJraXQtYm94O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4Oy13ZWJraXQtYm94LWZsZXg6MDstbXMtZmxleDowIDAgMzMuMzMzMzMlO2ZsZXg6MCAwIDMzLjMzMzMzJTttYXgtd2lkdGg6MzMuMzMzMzMlOy13ZWJraXQtYm94LXBhY2s6Y2VudGVyOy1tcy1mbGV4LXBhY2s6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7LXdlYmtpdC1ib3gtYWxpZ246Y2VudGVyOy1tcy1mbGV4LWFsaWduOmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7aGVpZ2h0OjI1JTttaW4taGVpZ2h0OjI1JTtwYWRkaW5nOjRweCA4cHh9LnZkLXBpY2tlcl9fcXVhcnRlcnMtYnV0dG9ue2JvcmRlcjpub25lO21hcmdpbjowO3BhZGRpbmc6MDt3aWR0aDphdXRvO292ZXJmbG93OnZpc2libGU7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtjb2xvcjppbmhlcml0O2ZvbnQ6aW5oZXJpdDtsaW5lLWhlaWdodDpub3JtYWw7LXdlYmtpdC1mb250LXNtb290aGluZzppbmhlcml0Oy1tb3otb3N4LWZvbnQtc21vb3RoaW5nOmluaGVyaXQ7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmV9LnZkLXBpY2tlcl9fcXVhcnRlcnMtYnV0dG9uOmFjdGl2ZSwudmQtcGlja2VyX19xdWFydGVycy1idXR0b246Zm9jdXN7b3V0bGluZTowOy13ZWJraXQtYm94LXNoYWRvdzowO2JveC1zaGFkb3c6MH0udmQtcGlja2VyX19xdWFydGVycy1idXR0b25bcm9sZT1idXR0b25dLC52ZC1waWNrZXJfX3F1YXJ0ZXJzLWJ1dHRvblt0eXBlPWJ1dHRvbl0sLnZkLXBpY2tlcl9fcXVhcnRlcnMtYnV0dG9uW3R5cGU9cmVzZXRdLC52ZC1waWNrZXJfX3F1YXJ0ZXJzLWJ1dHRvblt0eXBlPXN1Ym1pdF17Y3Vyc29yOnBvaW50ZXJ9LnZkLXBpY2tlcl9fcXVhcnRlcnN7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTotd2Via2l0LWJveDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDstd2Via2l0LWJveC1mbGV4OjE7LW1zLWZsZXg6MSAxIGF1dG87ZmxleDoxIDEgYXV0bztoZWlnaHQ6Mjc0cHh9LnZkLXBpY2tlci0tYm90dG9tc2hlZXQgLnZkLXBpY2tlcl9fcXVhcnRlcnN7aGVpZ2h0OjI3NHB4fUBzdXBwb3J0cyAocGFkZGluZy1ib3R0b206Y29uc3RhbnQoc2FmZS1hcmVhLWluc2V0LWJvdHRvbSkpey52ZC1waWNrZXJfX3F1YXJ0ZXJzey0tc2FmZS1hcmVhLWluc2V0LWJvdHRvbTpjb25zdGFudChzYWZlLWFyZWEtaW5zZXQtYm90dG9tKTtwYWRkaW5nLWJvdHRvbTp2YXIoLS1zYWZlLWFyZWEtaW5zZXQtYm90dG9tKX19QHN1cHBvcnRzIChwYWRkaW5nLWJvdHRvbTplbnYoc2FmZS1hcmVhLWluc2V0LWJvdHRvbSkpey52ZC1waWNrZXJfX3F1YXJ0ZXJzey0tc2FmZS1hcmVhLWluc2V0LWJvdHRvbTplbnYoc2FmZS1hcmVhLWluc2V0LWJvdHRvbSk7cGFkZGluZy1ib3R0b206dmFyKC0tc2FmZS1hcmVhLWluc2V0LWJvdHRvbSl9fS52ZC1waWNrZXJfX3F1YXJ0ZXJzLWlubmVye3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6LXdlYmtpdC1ib3g7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtwYWRkaW5nOjAgMTJweH0udmQtcGlja2VyX19xdWFydGVycy1saXN0e3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO2Rpc3BsYXk6LXdlYmtpdC1ib3g7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7LXdlYmtpdC1ib3gtZmxleDoxOy1tcy1mbGV4OjEgMSBhdXRvO2ZsZXg6MSAxIGF1dG87LW1zLWZsZXgtd3JhcDp3cmFwO2ZsZXgtd3JhcDp3cmFwO2p1c3RpZnktaXRlbXM6Y2VudGVyOy13ZWJraXQtYm94LWFsaWduOmNlbnRlcjstbXMtZmxleC1hbGlnbjpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyfS52ZC1waWNrZXJfX3F1YXJ0ZXJzLWJ1dHRvbntwb3NpdGlvbjpyZWxhdGl2ZTtoZWlnaHQ6NDhweDttaW4taGVpZ2h0OjQ4cHg7d2lkdGg6MTAwJTtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo1MDA7Ym9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lOy13ZWJraXQtdHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIC4zczt0cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgLjNzO2JvcmRlcjp0aGluIHNvbGlkIHRyYW5zcGFyZW50fS52ZC1waWNrZXJfX3F1YXJ0ZXJzLWJ1dHRvbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNlZWYxZjh9LnZkLXBpY2tlcl9fcXVhcnRlcnMtYnV0dG9uOmRpc2FibGVkLC52ZC1waWNrZXJfX3F1YXJ0ZXJzLWJ1dHRvbltkaXNhYmxlZF17Y3Vyc29yOmRlZmF1bHQ7Y29sb3I6cmdiYSgwLDAsMCwuMjYpO3BvaW50ZXItZXZlbnRzOm5vbmV9LnZkLXBpY2tlcl9fcXVhcnRlcnMtYnV0dG9uX193cmFwcGVye3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6LXdlYmtpdC1ib3g7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7LXdlYmtpdC1ib3gtZmxleDoxOy1tcy1mbGV4OjEgMSAxMDAlO2ZsZXg6MSAxIDEwMCU7bWF4LXdpZHRoOjEgMSAxMDAlOy13ZWJraXQtYm94LXBhY2s6Y2VudGVyOy1tcy1mbGV4LXBhY2s6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7LXdlYmtpdC1ib3gtYWxpZ246Y2VudGVyOy1tcy1mbGV4LWFsaWduOmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7aGVpZ2h0OjI1JTttaW4taGVpZ2h0OjI1JTtwYWRkaW5nOjRweCA4cHh9LnNsaWRlLXgtdHJhbnNpdGlvbi1lbnRlci1hY3RpdmUsLnNsaWRlLXgtdHJhbnNpdGlvbi1sZWF2ZS1hY3RpdmV7LXdlYmtpdC10cmFuc2l0aW9uOmFsbCAuM3MgY3ViaWMtYmV6aWVyKC4yNSwuOCwuNSwxKTt0cmFuc2l0aW9uOmFsbCAuM3MgY3ViaWMtYmV6aWVyKC4yNSwuOCwuNSwxKTstd2Via2l0LXRyYW5zaXRpb24tcHJvcGVydHk6b3BhY2l0eSxoZWlnaHQsLXdlYmtpdC10cmFuc2Zvcm07dHJhbnNpdGlvbi1wcm9wZXJ0eTpvcGFjaXR5LGhlaWdodCwtd2Via2l0LXRyYW5zZm9ybTt0cmFuc2l0aW9uLXByb3BlcnR5Om9wYWNpdHksdHJhbnNmb3JtLGhlaWdodDt0cmFuc2l0aW9uLXByb3BlcnR5Om9wYWNpdHksdHJhbnNmb3JtLGhlaWdodCwtd2Via2l0LXRyYW5zZm9ybX0uc2xpZGUteC10cmFuc2l0aW9uLWVudGVyLC5zbGlkZS14LXRyYW5zaXRpb24tbGVhdmUtdG97b3BhY2l0eTowOy13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTE1cHgpO3RyYW5zZm9ybTp0cmFuc2xhdGVYKC0xNXB4KX0uc2xpZGUteS10cmFuc2l0aW9uLWVudGVyLWFjdGl2ZSwuc2xpZGUteS10cmFuc2l0aW9uLWxlYXZlLWFjdGl2ZXstd2Via2l0LXRyYW5zaXRpb246YWxsIC4zcyBjdWJpYy1iZXppZXIoLjI1LC44LC41LDEpO3RyYW5zaXRpb246YWxsIC4zcyBjdWJpYy1iZXppZXIoLjI1LC44LC41LDEpOy13ZWJraXQtdHJhbnNpdGlvbi1wcm9wZXJ0eTpvcGFjaXR5LGhlaWdodCwtd2Via2l0LXRyYW5zZm9ybTt0cmFuc2l0aW9uLXByb3BlcnR5Om9wYWNpdHksaGVpZ2h0LC13ZWJraXQtdHJhbnNmb3JtO3RyYW5zaXRpb24tcHJvcGVydHk6b3BhY2l0eSx0cmFuc2Zvcm0saGVpZ2h0O3RyYW5zaXRpb24tcHJvcGVydHk6b3BhY2l0eSx0cmFuc2Zvcm0saGVpZ2h0LC13ZWJraXQtdHJhbnNmb3JtfS5zbGlkZS15LXRyYW5zaXRpb24tZW50ZXIsLnNsaWRlLXktdHJhbnNpdGlvbi1sZWF2ZS10b3tvcGFjaXR5OjA7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMTVweCk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTE1cHgpfS5zY2FsZS10cmFuc2l0aW9uLWVudGVyLWFjdGl2ZSwuc2NhbGUtdHJhbnNpdGlvbi1sZWF2ZS1hY3RpdmV7LXdlYmtpdC10cmFuc2l0aW9uOmFsbCAuM3MgY3ViaWMtYmV6aWVyKC4yNSwuOCwuNSwxKTt0cmFuc2l0aW9uOmFsbCAuM3MgY3ViaWMtYmV6aWVyKC4yNSwuOCwuNSwxKTstd2Via2l0LXRyYW5zaXRpb24tcHJvcGVydHk6b3BhY2l0eSxoZWlnaHQsLXdlYmtpdC10cmFuc2Zvcm07dHJhbnNpdGlvbi1wcm9wZXJ0eTpvcGFjaXR5LGhlaWdodCwtd2Via2l0LXRyYW5zZm9ybTt0cmFuc2l0aW9uLXByb3BlcnR5Om9wYWNpdHksdHJhbnNmb3JtLGhlaWdodDt0cmFuc2l0aW9uLXByb3BlcnR5Om9wYWNpdHksdHJhbnNmb3JtLGhlaWdodCwtd2Via2l0LXRyYW5zZm9ybX0uc2NhbGUtdHJhbnNpdGlvbi1lbnRlciwuc2NhbGUtdHJhbnNpdGlvbi1sZWF2ZSwuc2NhbGUtdHJhbnNpdGlvbi1sZWF2ZS10b3tvcGFjaXR5OjA7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoMCk7dHJhbnNmb3JtOnNjYWxlKDApfS5zbGlkZS1pbi1vdXQtdHJhbnNpdGlvbi1lbnRlci1hY3RpdmUsLnNsaWRlLWluLW91dC10cmFuc2l0aW9uLWxlYXZlLWFjdGl2ZXstd2Via2l0LXRyYW5zaXRpb246YWxsIC4zcyBjdWJpYy1iZXppZXIoLjI1LC44LC41LDEpO3RyYW5zaXRpb246YWxsIC4zcyBjdWJpYy1iZXppZXIoLjI1LC44LC41LDEpOy13ZWJraXQtdHJhbnNpdGlvbi1wcm9wZXJ0eTpvcGFjaXR5LGhlaWdodCwtd2Via2l0LXRyYW5zZm9ybTt0cmFuc2l0aW9uLXByb3BlcnR5Om9wYWNpdHksaGVpZ2h0LC13ZWJraXQtdHJhbnNmb3JtO3RyYW5zaXRpb24tcHJvcGVydHk6b3BhY2l0eSx0cmFuc2Zvcm0saGVpZ2h0O3RyYW5zaXRpb24tcHJvcGVydHk6b3BhY2l0eSx0cmFuc2Zvcm0saGVpZ2h0LC13ZWJraXQtdHJhbnNmb3JtfS5zbGlkZS1pbi1vdXQtdHJhbnNpdGlvbi1lbnRlciwuc2xpZGUtaW4tb3V0LXRyYW5zaXRpb24tbGVhdmUtdG97b3BhY2l0eTowOy13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoMTAwJSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMTAwJSl9LnNsaWRlLWgtbmV4dC1lbnRlci1hY3RpdmUsLnNsaWRlLWgtbmV4dC1sZWF2ZS1hY3RpdmUsLnNsaWRlLWgtcHJldi1lbnRlci1hY3RpdmUsLnNsaWRlLWgtcHJldi1sZWF2ZS1hY3RpdmUsLnNsaWRlLXYtbmV4dC1lbnRlci1hY3RpdmUsLnNsaWRlLXYtbmV4dC1sZWF2ZS1hY3RpdmUsLnNsaWRlLXYtcHJldi1lbnRlci1hY3RpdmUsLnNsaWRlLXYtcHJldi1sZWF2ZS1hY3RpdmV7LXdlYmtpdC10cmFuc2l0aW9uOmFsbCAuM3MgY3ViaWMtYmV6aWVyKC4yNSwuOCwuNSwxKTt0cmFuc2l0aW9uOmFsbCAuM3MgY3ViaWMtYmV6aWVyKC4yNSwuOCwuNSwxKTstd2Via2l0LXRyYW5zaXRpb24tcHJvcGVydHk6b3BhY2l0eSxoZWlnaHQsLXdlYmtpdC10cmFuc2Zvcm07dHJhbnNpdGlvbi1wcm9wZXJ0eTpvcGFjaXR5LGhlaWdodCwtd2Via2l0LXRyYW5zZm9ybTt0cmFuc2l0aW9uLXByb3BlcnR5Om9wYWNpdHksdHJhbnNmb3JtLGhlaWdodDt0cmFuc2l0aW9uLXByb3BlcnR5Om9wYWNpdHksdHJhbnNmb3JtLGhlaWdodCwtd2Via2l0LXRyYW5zZm9ybTtwb3NpdGlvbjphYnNvbHV0ZX0uc2xpZGUtaC1uZXh0LWVudGVye29wYWNpdHk6MDstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVYKDEwMCUpO3RyYW5zZm9ybTp0cmFuc2xhdGVYKDEwMCUpfS5zbGlkZS1oLW5leHQtbGVhdmUtdG97b3BhY2l0eTowOy13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTEwMCUpO3RyYW5zZm9ybTp0cmFuc2xhdGVYKC0xMDAlKX0uc2xpZGUtaC1wcmV2LWxlYXZlLXRve29wYWNpdHk6MDstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVYKDEwMCUpO3RyYW5zZm9ybTp0cmFuc2xhdGVYKDEwMCUpfS5zbGlkZS1oLXByZXYtZW50ZXJ7b3BhY2l0eTowOy13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTEwMCUpO3RyYW5zZm9ybTp0cmFuc2xhdGVYKC0xMDAlKX0udmQtcGlja2VyX19jb250cm9scy15ZWFyLnZkLXBpY2tlcl9fY29udHJvbHMteWVhci0tY2VudGVyIC5zbGlkZS1oLW5leHQtZW50ZXIsLnZkLXBpY2tlcl9fY29udHJvbHMteWVhci52ZC1waWNrZXJfX2NvbnRyb2xzLXllYXItLWNlbnRlciAuc2xpZGUtaC1wcmV2LWxlYXZlLXRvey13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTUwJSkgdHJhbnNsYXRlWSgxNTAlKTt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtNTAlKSB0cmFuc2xhdGVZKDE1MCUpfS52ZC1waWNrZXJfX2NvbnRyb2xzLXllYXIudmQtcGlja2VyX19jb250cm9scy15ZWFyLS1jZW50ZXIgLnNsaWRlLWgtbmV4dC1sZWF2ZS10bywudmQtcGlja2VyX19jb250cm9scy15ZWFyLnZkLXBpY2tlcl9fY29udHJvbHMteWVhci0tY2VudGVyIC5zbGlkZS1oLXByZXYtZW50ZXJ7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWCgtNTAlKSB0cmFuc2xhdGVZKC0xNTAlKTt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtNTAlKSB0cmFuc2xhdGVZKC0xNTAlKX0udmQtcGlja2VyLS1ydGwgLnNsaWRlLWgtbmV4dC1lbnRlciwudmQtcGlja2VyLS1ydGwgLnNsaWRlLWgtcHJldi1sZWF2ZS10b3std2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVYKC0xMDAlKTt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtMTAwJSl9LnZkLXBpY2tlci0tcnRsIC5zbGlkZS1oLW5leHQtbGVhdmUtdG8sLnZkLXBpY2tlci0tcnRsIC5zbGlkZS1oLXByZXYtZW50ZXJ7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWCgxMDAlKTt0cmFuc2Zvcm06dHJhbnNsYXRlWCgxMDAlKX0uc2xpZGUtdi1uZXh0LWxlYXZlLXRve29wYWNpdHk6MDstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVZKDEwMCUpO3RyYW5zZm9ybTp0cmFuc2xhdGVZKDEwMCUpfS5zbGlkZS12LW5leHQtZW50ZXJ7b3BhY2l0eTowOy13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEwMCUpO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xMDAlKX0uc2xpZGUtdi1wcmV2LWVudGVye29wYWNpdHk6MDstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVZKDEwMCUpO3RyYW5zZm9ybTp0cmFuc2xhdGVZKDEwMCUpfS5zbGlkZS12LXByZXYtbGVhdmUtdG97b3BhY2l0eTowOy13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEwMCUpO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xMDAlKX0ueWVhck1vbnRoLWVudGVyLWFjdGl2ZSwueWVhck1vbnRoLWxlYXZlLWFjdGl2ZXtwb3NpdGlvbjphYnNvbHV0ZTstd2Via2l0LXRyYW5zaXRpb246b3BhY2l0eSAuM3M7dHJhbnNpdGlvbjpvcGFjaXR5IC4zc30ueWVhck1vbnRoLWVudGVyLC55ZWFyTW9udGgtbGVhdmUtdG97b3BhY2l0eTowfS52ZC1waWNrZXJfX3llYXJze3Bvc2l0aW9uOnJlbGF0aXZlO2hlaWdodDozMjJweDtsaXN0LXN0eWxlLXR5cGU6bm9uZTt0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW46MDtwYWRkaW5nOjhweCAwO292ZXJmbG93LXk6c2Nyb2xsOy13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOnRvdWNofS52ZC1waWNrZXItLWJvdHRvbXNoZWV0IC52ZC1waWNrZXJfX3llYXJze2hlaWdodDozNzBweH1Ac3VwcG9ydHMgKHBhZGRpbmctYm90dG9tOmNvbnN0YW50KHNhZmUtYXJlYS1pbnNldC1ib3R0b20pKXsudmQtcGlja2VyX195ZWFyc3stLXNhZmUtYXJlYS1pbnNldC1ib3R0b206Y29uc3RhbnQoc2FmZS1hcmVhLWluc2V0LWJvdHRvbSk7cGFkZGluZy1ib3R0b206Y2FsYyg4cHggKyB2YXIoLS1zYWZlLWFyZWEtaW5zZXQtYm90dG9tKSl9fUBzdXBwb3J0cyAocGFkZGluZy1ib3R0b206ZW52KHNhZmUtYXJlYS1pbnNldC1ib3R0b20pKXsudmQtcGlja2VyX195ZWFyc3stLXNhZmUtYXJlYS1pbnNldC1ib3R0b206ZW52KHNhZmUtYXJlYS1pbnNldC1ib3R0b20pO3BhZGRpbmctYm90dG9tOmNhbGMoOHB4ICsgdmFyKC0tc2FmZS1hcmVhLWluc2V0LWJvdHRvbSkpfX0udmQtcGlja2VyLS12YWxpZGF0ZSAudmQtcGlja2VyX195ZWFyc3tib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWVmMWY4fS52ZC1waWNrZXJfX3llYXJzIGxpe3Bvc2l0aW9uOnJlbGF0aXZlO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6LXdlYmtpdC1ib3g7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7LXdlYmtpdC1ib3gtcGFjazpjZW50ZXI7LW1zLWZsZXgtcGFjazpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjstd2Via2l0LWJveC1hbGlnbjpjZW50ZXI7LW1zLWZsZXgtYWxpZ246Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjstbXMtZmxleC1saW5lLXBhY2s6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyO3BhZGRpbmc6OHB4IDA7bWFyZ2luLWxlZnQ6MTJweDttYXJnaW4tcmlnaHQ6MTJweDtoZWlnaHQ6NDBweDttaW4taGVpZ2h0OjQwcHg7d2lkdGg6Y2FsYygxMDAlIC0gMjRweCk7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NTAwO291dGxpbmU6bm9uZTstd2Via2l0LXRyYW5zaXRpb246YmFja2dyb3VuZC1jb2xvciAuM3M7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIC4zcztib3JkZXI6dGhpbiBzb2xpZCB0cmFuc3BhcmVudH0udmQtcGlja2VyLS1ib3R0b21zaGVldCAudmQtcGlja2VyX195ZWFycyBsaXtoZWlnaHQ6NDhweDttaW4taGVpZ2h0OjQ4cHh9LnZkLXBpY2tlcl9feWVhcnMgbGk6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZWVmMWY4fS52ZC1waWNrZXJfX3llYXJzIGxpOmRpc2FibGVkLC52ZC1waWNrZXJfX3llYXJzIGxpW2Rpc2FibGVkXXtjdXJzb3I6ZGVmYXVsdDtjb2xvcjpyZ2JhKDAsMCwwLC4yNik7cG9pbnRlci1ldmVudHM6bm9uZX0udmQtcGlja2VyX195ZWFycyBsaStsaXttYXJnaW4tdG9wOjJweH1cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/css-loader/dist/cjs.js??clonedRuleSet-9.use[1]!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-9.use[2]!./node_modules/@mathieustan/vue-datepicker/dist/vue-datepicker.min.css\n");

/***/ }),

/***/ "./node_modules/css-loader/dist/cjs.js??clonedRuleSet-9.use[1]!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-9.use[2]!./node_modules/element-ui/lib/theme-chalk/index.css":
/*!*******************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-9.use[1]!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-9.use[2]!./node_modules/element-ui/lib/theme-chalk/index.css ***!
  \*******************************************************************************************************************************************************************************************/
/***/ ((module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../css-loader/dist/runtime/cssWithMappingToString.js */ \"./node_modules/css-loader/dist/runtime/cssWithMappingToString.js\");\n/* harmony import */ var _css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\n/* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../css-loader/dist/runtime/getUrl.js */ \"./node_modules/css-loader/dist/runtime/getUrl.js\");\n/* harmony import */ var _css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _fonts_element_icons_woff__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./fonts/element-icons.woff */ \"./node_modules/element-ui/lib/theme-chalk/fonts/element-icons.woff\");\n/* harmony import */ var _fonts_element_icons_woff__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_fonts_element_icons_woff__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _fonts_element_icons_ttf__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./fonts/element-icons.ttf */ \"./node_modules/element-ui/lib/theme-chalk/fonts/element-icons.ttf\");\n/* harmony import */ var _fonts_element_icons_ttf__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_fonts_element_icons_ttf__WEBPACK_IMPORTED_MODULE_4__);\n// Imports\n\n\n\n\n\nvar ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default()));\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = _css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()((_fonts_element_icons_woff__WEBPACK_IMPORTED_MODULE_3___default()));\nvar ___CSS_LOADER_URL_REPLACEMENT_1___ = _css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()((_fonts_element_icons_ttf__WEBPACK_IMPORTED_MODULE_4___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"@charset \\\"UTF-8\\\";@font-face{font-family:element-icons;src:url(\" + ___CSS_LOADER_URL_REPLACEMENT_0___ + \") format(\\\"woff\\\"),url(\" + ___CSS_LOADER_URL_REPLACEMENT_1___ + \") format(\\\"truetype\\\");font-weight:400;font-display:\\\"auto\\\";font-style:normal}[class*=\\\" el-icon-\\\"],[class^=el-icon-]{font-family:element-icons!important;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;vertical-align:baseline;display:inline-block;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.el-icon-ice-cream-round:before{content:\\\"\\\\e6a0\\\"}.el-icon-ice-cream-square:before{content:\\\"\\\\e6a3\\\"}.el-icon-lollipop:before{content:\\\"\\\\e6a4\\\"}.el-icon-potato-strips:before{content:\\\"\\\\e6a5\\\"}.el-icon-milk-tea:before{content:\\\"\\\\e6a6\\\"}.el-icon-ice-drink:before{content:\\\"\\\\e6a7\\\"}.el-icon-ice-tea:before{content:\\\"\\\\e6a9\\\"}.el-icon-coffee:before{content:\\\"\\\\e6aa\\\"}.el-icon-orange:before{content:\\\"\\\\e6ab\\\"}.el-icon-pear:before{content:\\\"\\\\e6ac\\\"}.el-icon-apple:before{content:\\\"\\\\e6ad\\\"}.el-icon-cherry:before{content:\\\"\\\\e6ae\\\"}.el-icon-watermelon:before{content:\\\"\\\\e6af\\\"}.el-icon-grape:before{content:\\\"\\\\e6b0\\\"}.el-icon-refrigerator:before{content:\\\"\\\\e6b1\\\"}.el-icon-goblet-square-full:before{content:\\\"\\\\e6b2\\\"}.el-icon-goblet-square:before{content:\\\"\\\\e6b3\\\"}.el-icon-goblet-full:before{content:\\\"\\\\e6b4\\\"}.el-icon-goblet:before{content:\\\"\\\\e6b5\\\"}.el-icon-cold-drink:before{content:\\\"\\\\e6b6\\\"}.el-icon-coffee-cup:before{content:\\\"\\\\e6b8\\\"}.el-icon-water-cup:before{content:\\\"\\\\e6b9\\\"}.el-icon-hot-water:before{content:\\\"\\\\e6ba\\\"}.el-icon-ice-cream:before{content:\\\"\\\\e6bb\\\"}.el-icon-dessert:before{content:\\\"\\\\e6bc\\\"}.el-icon-sugar:before{content:\\\"\\\\e6bd\\\"}.el-icon-tableware:before{content:\\\"\\\\e6be\\\"}.el-icon-burger:before{content:\\\"\\\\e6bf\\\"}.el-icon-knife-fork:before{content:\\\"\\\\e6c1\\\"}.el-icon-fork-spoon:before{content:\\\"\\\\e6c2\\\"}.el-icon-chicken:before{content:\\\"\\\\e6c3\\\"}.el-icon-food:before{content:\\\"\\\\e6c4\\\"}.el-icon-dish-1:before{content:\\\"\\\\e6c5\\\"}.el-icon-dish:before{content:\\\"\\\\e6c6\\\"}.el-icon-moon-night:before{content:\\\"\\\\e6ee\\\"}.el-icon-moon:before{content:\\\"\\\\e6f0\\\"}.el-icon-cloudy-and-sunny:before{content:\\\"\\\\e6f1\\\"}.el-icon-partly-cloudy:before{content:\\\"\\\\e6f2\\\"}.el-icon-cloudy:before{content:\\\"\\\\e6f3\\\"}.el-icon-sunny:before{content:\\\"\\\\e6f6\\\"}.el-icon-sunset:before{content:\\\"\\\\e6f7\\\"}.el-icon-sunrise-1:before{content:\\\"\\\\e6f8\\\"}.el-icon-sunrise:before{content:\\\"\\\\e6f9\\\"}.el-icon-heavy-rain:before{content:\\\"\\\\e6fa\\\"}.el-icon-lightning:before{content:\\\"\\\\e6fb\\\"}.el-icon-light-rain:before{content:\\\"\\\\e6fc\\\"}.el-icon-wind-power:before{content:\\\"\\\\e6fd\\\"}.el-icon-baseball:before{content:\\\"\\\\e712\\\"}.el-icon-soccer:before{content:\\\"\\\\e713\\\"}.el-icon-football:before{content:\\\"\\\\e715\\\"}.el-icon-basketball:before{content:\\\"\\\\e716\\\"}.el-icon-ship:before{content:\\\"\\\\e73f\\\"}.el-icon-truck:before{content:\\\"\\\\e740\\\"}.el-icon-bicycle:before{content:\\\"\\\\e741\\\"}.el-icon-mobile-phone:before{content:\\\"\\\\e6d3\\\"}.el-icon-service:before{content:\\\"\\\\e6d4\\\"}.el-icon-key:before{content:\\\"\\\\e6e2\\\"}.el-icon-unlock:before{content:\\\"\\\\e6e4\\\"}.el-icon-lock:before{content:\\\"\\\\e6e5\\\"}.el-icon-watch:before{content:\\\"\\\\e6fe\\\"}.el-icon-watch-1:before{content:\\\"\\\\e6ff\\\"}.el-icon-timer:before{content:\\\"\\\\e702\\\"}.el-icon-alarm-clock:before{content:\\\"\\\\e703\\\"}.el-icon-map-location:before{content:\\\"\\\\e704\\\"}.el-icon-delete-location:before{content:\\\"\\\\e705\\\"}.el-icon-add-location:before{content:\\\"\\\\e706\\\"}.el-icon-location-information:before{content:\\\"\\\\e707\\\"}.el-icon-location-outline:before{content:\\\"\\\\e708\\\"}.el-icon-location:before{content:\\\"\\\\e79e\\\"}.el-icon-place:before{content:\\\"\\\\e709\\\"}.el-icon-discover:before{content:\\\"\\\\e70a\\\"}.el-icon-first-aid-kit:before{content:\\\"\\\\e70b\\\"}.el-icon-trophy-1:before{content:\\\"\\\\e70c\\\"}.el-icon-trophy:before{content:\\\"\\\\e70d\\\"}.el-icon-medal:before{content:\\\"\\\\e70e\\\"}.el-icon-medal-1:before{content:\\\"\\\\e70f\\\"}.el-icon-stopwatch:before{content:\\\"\\\\e710\\\"}.el-icon-mic:before{content:\\\"\\\\e711\\\"}.el-icon-copy-document:before{content:\\\"\\\\e718\\\"}.el-icon-full-screen:before{content:\\\"\\\\e719\\\"}.el-icon-switch-button:before{content:\\\"\\\\e71b\\\"}.el-icon-aim:before{content:\\\"\\\\e71c\\\"}.el-icon-crop:before{content:\\\"\\\\e71d\\\"}.el-icon-odometer:before{content:\\\"\\\\e71e\\\"}.el-icon-time:before{content:\\\"\\\\e71f\\\"}.el-icon-bangzhu:before{content:\\\"\\\\e724\\\"}.el-icon-close-notification:before{content:\\\"\\\\e726\\\"}.el-icon-microphone:before{content:\\\"\\\\e727\\\"}.el-icon-turn-off-microphone:before{content:\\\"\\\\e728\\\"}.el-icon-position:before{content:\\\"\\\\e729\\\"}.el-icon-postcard:before{content:\\\"\\\\e72a\\\"}.el-icon-message:before{content:\\\"\\\\e72b\\\"}.el-icon-chat-line-square:before{content:\\\"\\\\e72d\\\"}.el-icon-chat-dot-square:before{content:\\\"\\\\e72e\\\"}.el-icon-chat-dot-round:before{content:\\\"\\\\e72f\\\"}.el-icon-chat-square:before{content:\\\"\\\\e730\\\"}.el-icon-chat-line-round:before{content:\\\"\\\\e731\\\"}.el-icon-chat-round:before{content:\\\"\\\\e732\\\"}.el-icon-set-up:before{content:\\\"\\\\e733\\\"}.el-icon-turn-off:before{content:\\\"\\\\e734\\\"}.el-icon-open:before{content:\\\"\\\\e735\\\"}.el-icon-connection:before{content:\\\"\\\\e736\\\"}.el-icon-link:before{content:\\\"\\\\e737\\\"}.el-icon-cpu:before{content:\\\"\\\\e738\\\"}.el-icon-thumb:before{content:\\\"\\\\e739\\\"}.el-icon-female:before{content:\\\"\\\\e73a\\\"}.el-icon-male:before{content:\\\"\\\\e73b\\\"}.el-icon-guide:before{content:\\\"\\\\e73c\\\"}.el-icon-news:before{content:\\\"\\\\e73e\\\"}.el-icon-price-tag:before{content:\\\"\\\\e744\\\"}.el-icon-discount:before{content:\\\"\\\\e745\\\"}.el-icon-wallet:before{content:\\\"\\\\e747\\\"}.el-icon-coin:before{content:\\\"\\\\e748\\\"}.el-icon-money:before{content:\\\"\\\\e749\\\"}.el-icon-bank-card:before{content:\\\"\\\\e74a\\\"}.el-icon-box:before{content:\\\"\\\\e74b\\\"}.el-icon-present:before{content:\\\"\\\\e74c\\\"}.el-icon-sell:before{content:\\\"\\\\e6d5\\\"}.el-icon-sold-out:before{content:\\\"\\\\e6d6\\\"}.el-icon-shopping-bag-2:before{content:\\\"\\\\e74d\\\"}.el-icon-shopping-bag-1:before{content:\\\"\\\\e74e\\\"}.el-icon-shopping-cart-2:before{content:\\\"\\\\e74f\\\"}.el-icon-shopping-cart-1:before{content:\\\"\\\\e750\\\"}.el-icon-shopping-cart-full:before{content:\\\"\\\\e751\\\"}.el-icon-smoking:before{content:\\\"\\\\e752\\\"}.el-icon-no-smoking:before{content:\\\"\\\\e753\\\"}.el-icon-house:before{content:\\\"\\\\e754\\\"}.el-icon-table-lamp:before{content:\\\"\\\\e755\\\"}.el-icon-school:before{content:\\\"\\\\e756\\\"}.el-icon-office-building:before{content:\\\"\\\\e757\\\"}.el-icon-toilet-paper:before{content:\\\"\\\\e758\\\"}.el-icon-notebook-2:before{content:\\\"\\\\e759\\\"}.el-icon-notebook-1:before{content:\\\"\\\\e75a\\\"}.el-icon-files:before{content:\\\"\\\\e75b\\\"}.el-icon-collection:before{content:\\\"\\\\e75c\\\"}.el-icon-receiving:before{content:\\\"\\\\e75d\\\"}.el-icon-suitcase-1:before{content:\\\"\\\\e760\\\"}.el-icon-suitcase:before{content:\\\"\\\\e761\\\"}.el-icon-film:before{content:\\\"\\\\e763\\\"}.el-icon-collection-tag:before{content:\\\"\\\\e765\\\"}.el-icon-data-analysis:before{content:\\\"\\\\e766\\\"}.el-icon-pie-chart:before{content:\\\"\\\\e767\\\"}.el-icon-data-board:before{content:\\\"\\\\e768\\\"}.el-icon-data-line:before{content:\\\"\\\\e76d\\\"}.el-icon-reading:before{content:\\\"\\\\e769\\\"}.el-icon-magic-stick:before{content:\\\"\\\\e76a\\\"}.el-icon-coordinate:before{content:\\\"\\\\e76b\\\"}.el-icon-mouse:before{content:\\\"\\\\e76c\\\"}.el-icon-brush:before{content:\\\"\\\\e76e\\\"}.el-icon-headset:before{content:\\\"\\\\e76f\\\"}.el-icon-umbrella:before{content:\\\"\\\\e770\\\"}.el-icon-scissors:before{content:\\\"\\\\e771\\\"}.el-icon-mobile:before{content:\\\"\\\\e773\\\"}.el-icon-attract:before{content:\\\"\\\\e774\\\"}.el-icon-monitor:before{content:\\\"\\\\e775\\\"}.el-icon-search:before{content:\\\"\\\\e778\\\"}.el-icon-takeaway-box:before{content:\\\"\\\\e77a\\\"}.el-icon-paperclip:before{content:\\\"\\\\e77d\\\"}.el-icon-printer:before{content:\\\"\\\\e77e\\\"}.el-icon-document-add:before{content:\\\"\\\\e782\\\"}.el-icon-document:before{content:\\\"\\\\e785\\\"}.el-icon-document-checked:before{content:\\\"\\\\e786\\\"}.el-icon-document-copy:before{content:\\\"\\\\e787\\\"}.el-icon-document-delete:before{content:\\\"\\\\e788\\\"}.el-icon-document-remove:before{content:\\\"\\\\e789\\\"}.el-icon-tickets:before{content:\\\"\\\\e78b\\\"}.el-icon-folder-checked:before{content:\\\"\\\\e77f\\\"}.el-icon-folder-delete:before{content:\\\"\\\\e780\\\"}.el-icon-folder-remove:before{content:\\\"\\\\e781\\\"}.el-icon-folder-add:before{content:\\\"\\\\e783\\\"}.el-icon-folder-opened:before{content:\\\"\\\\e784\\\"}.el-icon-folder:before{content:\\\"\\\\e78a\\\"}.el-icon-edit-outline:before{content:\\\"\\\\e764\\\"}.el-icon-edit:before{content:\\\"\\\\e78c\\\"}.el-icon-date:before{content:\\\"\\\\e78e\\\"}.el-icon-c-scale-to-original:before{content:\\\"\\\\e7c6\\\"}.el-icon-view:before{content:\\\"\\\\e6ce\\\"}.el-icon-loading:before{content:\\\"\\\\e6cf\\\"}.el-icon-rank:before{content:\\\"\\\\e6d1\\\"}.el-icon-sort-down:before{content:\\\"\\\\e7c4\\\"}.el-icon-sort-up:before{content:\\\"\\\\e7c5\\\"}.el-icon-sort:before{content:\\\"\\\\e6d2\\\"}.el-icon-finished:before{content:\\\"\\\\e6cd\\\"}.el-icon-refresh-left:before{content:\\\"\\\\e6c7\\\"}.el-icon-refresh-right:before{content:\\\"\\\\e6c8\\\"}.el-icon-refresh:before{content:\\\"\\\\e6d0\\\"}.el-icon-video-play:before{content:\\\"\\\\e7c0\\\"}.el-icon-video-pause:before{content:\\\"\\\\e7c1\\\"}.el-icon-d-arrow-right:before{content:\\\"\\\\e6dc\\\"}.el-icon-d-arrow-left:before{content:\\\"\\\\e6dd\\\"}.el-icon-arrow-up:before{content:\\\"\\\\e6e1\\\"}.el-icon-arrow-down:before{content:\\\"\\\\e6df\\\"}.el-icon-arrow-right:before{content:\\\"\\\\e6e0\\\"}.el-icon-arrow-left:before{content:\\\"\\\\e6de\\\"}.el-icon-top-right:before{content:\\\"\\\\e6e7\\\"}.el-icon-top-left:before{content:\\\"\\\\e6e8\\\"}.el-icon-top:before{content:\\\"\\\\e6e6\\\"}.el-icon-bottom:before{content:\\\"\\\\e6eb\\\"}.el-icon-right:before{content:\\\"\\\\e6e9\\\"}.el-icon-back:before{content:\\\"\\\\e6ea\\\"}.el-icon-bottom-right:before{content:\\\"\\\\e6ec\\\"}.el-icon-bottom-left:before{content:\\\"\\\\e6ed\\\"}.el-icon-caret-top:before{content:\\\"\\\\e78f\\\"}.el-icon-caret-bottom:before{content:\\\"\\\\e790\\\"}.el-icon-caret-right:before{content:\\\"\\\\e791\\\"}.el-icon-caret-left:before{content:\\\"\\\\e792\\\"}.el-icon-d-caret:before{content:\\\"\\\\e79a\\\"}.el-icon-share:before{content:\\\"\\\\e793\\\"}.el-icon-menu:before{content:\\\"\\\\e798\\\"}.el-icon-s-grid:before{content:\\\"\\\\e7a6\\\"}.el-icon-s-check:before{content:\\\"\\\\e7a7\\\"}.el-icon-s-data:before{content:\\\"\\\\e7a8\\\"}.el-icon-s-opportunity:before{content:\\\"\\\\e7aa\\\"}.el-icon-s-custom:before{content:\\\"\\\\e7ab\\\"}.el-icon-s-claim:before{content:\\\"\\\\e7ad\\\"}.el-icon-s-finance:before{content:\\\"\\\\e7ae\\\"}.el-icon-s-comment:before{content:\\\"\\\\e7af\\\"}.el-icon-s-flag:before{content:\\\"\\\\e7b0\\\"}.el-icon-s-marketing:before{content:\\\"\\\\e7b1\\\"}.el-icon-s-shop:before{content:\\\"\\\\e7b4\\\"}.el-icon-s-open:before{content:\\\"\\\\e7b5\\\"}.el-icon-s-management:before{content:\\\"\\\\e7b6\\\"}.el-icon-s-ticket:before{content:\\\"\\\\e7b7\\\"}.el-icon-s-release:before{content:\\\"\\\\e7b8\\\"}.el-icon-s-home:before{content:\\\"\\\\e7b9\\\"}.el-icon-s-promotion:before{content:\\\"\\\\e7ba\\\"}.el-icon-s-operation:before{content:\\\"\\\\e7bb\\\"}.el-icon-s-unfold:before{content:\\\"\\\\e7bc\\\"}.el-icon-s-fold:before{content:\\\"\\\\e7a9\\\"}.el-icon-s-platform:before{content:\\\"\\\\e7bd\\\"}.el-icon-s-order:before{content:\\\"\\\\e7be\\\"}.el-icon-s-cooperation:before{content:\\\"\\\\e7bf\\\"}.el-icon-bell:before{content:\\\"\\\\e725\\\"}.el-icon-message-solid:before{content:\\\"\\\\e799\\\"}.el-icon-video-camera:before{content:\\\"\\\\e772\\\"}.el-icon-video-camera-solid:before{content:\\\"\\\\e796\\\"}.el-icon-camera:before{content:\\\"\\\\e779\\\"}.el-icon-camera-solid:before{content:\\\"\\\\e79b\\\"}.el-icon-download:before{content:\\\"\\\\e77c\\\"}.el-icon-upload2:before{content:\\\"\\\\e77b\\\"}.el-icon-upload:before{content:\\\"\\\\e7c3\\\"}.el-icon-picture-outline-round:before{content:\\\"\\\\e75f\\\"}.el-icon-picture-outline:before{content:\\\"\\\\e75e\\\"}.el-icon-picture:before{content:\\\"\\\\e79f\\\"}.el-icon-close:before{content:\\\"\\\\e6db\\\"}.el-icon-check:before{content:\\\"\\\\e6da\\\"}.el-icon-plus:before{content:\\\"\\\\e6d9\\\"}.el-icon-minus:before{content:\\\"\\\\e6d8\\\"}.el-icon-help:before{content:\\\"\\\\e73d\\\"}.el-icon-s-help:before{content:\\\"\\\\e7b3\\\"}.el-icon-circle-close:before{content:\\\"\\\\e78d\\\"}.el-icon-circle-check:before{content:\\\"\\\\e720\\\"}.el-icon-circle-plus-outline:before{content:\\\"\\\\e723\\\"}.el-icon-remove-outline:before{content:\\\"\\\\e722\\\"}.el-icon-zoom-out:before{content:\\\"\\\\e776\\\"}.el-icon-zoom-in:before{content:\\\"\\\\e777\\\"}.el-icon-error:before{content:\\\"\\\\e79d\\\"}.el-icon-success:before{content:\\\"\\\\e79c\\\"}.el-icon-circle-plus:before{content:\\\"\\\\e7a0\\\"}.el-icon-remove:before{content:\\\"\\\\e7a2\\\"}.el-icon-info:before{content:\\\"\\\\e7a1\\\"}.el-icon-question:before{content:\\\"\\\\e7a4\\\"}.el-icon-warning-outline:before{content:\\\"\\\\e6c9\\\"}.el-icon-warning:before{content:\\\"\\\\e7a3\\\"}.el-icon-goods:before{content:\\\"\\\\e7c2\\\"}.el-icon-s-goods:before{content:\\\"\\\\e7b2\\\"}.el-icon-star-off:before{content:\\\"\\\\e717\\\"}.el-icon-star-on:before{content:\\\"\\\\e797\\\"}.el-icon-more-outline:before{content:\\\"\\\\e6cc\\\"}.el-icon-more:before{content:\\\"\\\\e794\\\"}.el-icon-phone-outline:before{content:\\\"\\\\e6cb\\\"}.el-icon-phone:before{content:\\\"\\\\e795\\\"}.el-icon-user:before{content:\\\"\\\\e6e3\\\"}.el-icon-user-solid:before{content:\\\"\\\\e7a5\\\"}.el-icon-setting:before{content:\\\"\\\\e6ca\\\"}.el-icon-s-tools:before{content:\\\"\\\\e7ac\\\"}.el-icon-delete:before{content:\\\"\\\\e6d7\\\"}.el-icon-delete-solid:before{content:\\\"\\\\e7c9\\\"}.el-icon-eleme:before{content:\\\"\\\\e7c7\\\"}.el-icon-platform-eleme:before{content:\\\"\\\\e7ca\\\"}.el-icon-loading{animation:rotating 2s linear infinite}.el-icon--right{margin-left:5px}.el-icon--left{margin-right:5px}@keyframes rotating{0%{transform:rotateZ(0)}100%{transform:rotateZ(360deg)}}.el-pagination{white-space:nowrap;padding:2px 5px;color:#303133;font-weight:700}.el-pagination::after,.el-pagination::before{display:table;content:\\\"\\\"}.el-pagination::after{clear:both}.el-pagination button,.el-pagination span:not([class*=suffix]){display:inline-block;font-size:13px;min-width:35.5px;height:28px;line-height:28px;vertical-align:top;box-sizing:border-box}.el-pagination .el-input__inner{text-align:center;-moz-appearance:textfield;line-height:normal}.el-pagination .el-input__suffix{right:0;transform:scale(.8)}.el-pagination .el-select .el-input{width:100px;margin:0 5px}.el-pagination .el-select .el-input .el-input__inner{padding-right:25px;border-radius:3px}.el-pagination button{border:none;padding:0 6px;background:0 0}.el-pagination button:focus{outline:0}.el-pagination button:hover{color:#409EFF}.el-pagination button:disabled{color:#C0C4CC;background-color:#FFF;cursor:not-allowed}.el-pagination .btn-next,.el-pagination .btn-prev{background:center center no-repeat #FFF;background-size:16px;cursor:pointer;margin:0;color:#303133}.el-pagination .btn-next .el-icon,.el-pagination .btn-prev .el-icon{display:block;font-size:12px;font-weight:700}.el-pagination .btn-prev{padding-right:12px}.el-pagination .btn-next{padding-left:12px}.el-pagination .el-pager li.disabled{color:#C0C4CC;cursor:not-allowed}.el-pager li,.el-pager li.btn-quicknext:hover,.el-pager li.btn-quickprev:hover{cursor:pointer}.el-pagination--small .btn-next,.el-pagination--small .btn-prev,.el-pagination--small .el-pager li,.el-pagination--small .el-pager li.btn-quicknext,.el-pagination--small .el-pager li.btn-quickprev,.el-pagination--small .el-pager li:last-child{border-color:transparent;font-size:12px;line-height:22px;height:22px;min-width:22px}.el-pagination--small .arrow.disabled{visibility:hidden}.el-pagination--small .more::before,.el-pagination--small li.more::before{line-height:24px}.el-pagination--small button,.el-pagination--small span:not([class*=suffix]){height:22px;line-height:22px}.el-pagination--small .el-pagination__editor,.el-pagination--small .el-pagination__editor.el-input .el-input__inner{height:22px}.el-pagination__sizes{margin:0 10px 0 0;font-weight:400;color:#606266}.el-pagination__sizes .el-input .el-input__inner{font-size:13px;padding-left:8px}.el-pagination__sizes .el-input .el-input__inner:hover{border-color:#409EFF}.el-pagination__total{margin-right:10px;font-weight:400;color:#606266}.el-pagination__jump{margin-left:24px;font-weight:400;color:#606266}.el-pagination__jump .el-input__inner{padding:0 3px}.el-pagination__rightwrapper{float:right}.el-pagination__editor{line-height:18px;padding:0 2px;height:28px;text-align:center;margin:0 2px;box-sizing:border-box;border-radius:3px}.el-pager,.el-pagination.is-background .btn-next,.el-pagination.is-background .btn-prev{padding:0}.el-dialog,.el-pager li{-webkit-box-sizing:border-box}.el-pagination__editor.el-input{width:50px}.el-pagination__editor.el-input .el-input__inner{height:28px}.el-pagination__editor .el-input__inner::-webkit-inner-spin-button,.el-pagination__editor .el-input__inner::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.el-pagination.is-background .btn-next,.el-pagination.is-background .btn-prev,.el-pagination.is-background .el-pager li{margin:0 5px;background-color:#f4f4f5;color:#606266;min-width:30px;border-radius:2px}.el-pagination.is-background .btn-next.disabled,.el-pagination.is-background .btn-next:disabled,.el-pagination.is-background .btn-prev.disabled,.el-pagination.is-background .btn-prev:disabled,.el-pagination.is-background .el-pager li.disabled{color:#C0C4CC}.el-pagination.is-background .el-pager li:not(.disabled):hover{color:#409EFF}.el-pagination.is-background .el-pager li:not(.disabled).active{background-color:#409EFF;color:#FFF}.el-pagination.is-background.el-pagination--small .btn-next,.el-pagination.is-background.el-pagination--small .btn-prev,.el-pagination.is-background.el-pagination--small .el-pager li{margin:0 3px;min-width:22px}.el-pager,.el-pager li{vertical-align:top;margin:0;display:inline-block}.el-pager{-webkit-user-select:none;-moz-user-select:none;user-select:none;list-style:none;font-size:0}.el-pager .more::before{line-height:30px}.el-pager li{padding:0 4px;background:#FFF;font-size:13px;min-width:35.5px;height:28px;line-height:28px;box-sizing:border-box;text-align:center}.el-pager li.btn-quicknext,.el-pager li.btn-quickprev{line-height:28px;color:#303133}.el-pager li.btn-quicknext.disabled,.el-pager li.btn-quickprev.disabled{color:#C0C4CC}.el-pager li.active+li{border-left:0}.el-pager li:hover{color:#409EFF}.el-pager li.active{color:#409EFF;cursor:default}.el-dialog{position:relative;margin:0 auto 50px;background:#FFF;border-radius:2px;box-shadow:0 1px 3px rgba(0,0,0,.3);box-sizing:border-box;width:50%}.el-dialog.is-fullscreen{width:100%;margin-top:0;margin-bottom:0;height:100%;overflow:auto}.el-dialog__wrapper{position:fixed;top:0;right:0;bottom:0;left:0;overflow:auto;margin:0}.el-dialog__header{padding:20px 20px 10px}.el-dialog__headerbtn{position:absolute;top:20px;right:20px;padding:0;background:0 0;border:none;outline:0;cursor:pointer;font-size:16px}.el-dialog__headerbtn .el-dialog__close{color:#909399}.el-dialog__headerbtn:focus .el-dialog__close,.el-dialog__headerbtn:hover .el-dialog__close{color:#409EFF}.el-dialog__title{line-height:24px;font-size:18px;color:#303133}.el-dialog__body{padding:30px 20px;color:#606266;font-size:14px;word-break:break-all}.el-dialog__footer{padding:10px 20px 20px;text-align:right;box-sizing:border-box}.el-dialog--center{text-align:center}.el-dialog--center .el-dialog__body{text-align:initial;padding:25px 25px 30px}.el-dialog--center .el-dialog__footer{text-align:inherit}.dialog-fade-enter-active{animation:dialog-fade-in .3s}.dialog-fade-leave-active{animation:dialog-fade-out .3s}@keyframes dialog-fade-in{0%{transform:translate3d(0,-20px,0);opacity:0}100%{transform:translate3d(0,0,0);opacity:1}}@keyframes dialog-fade-out{0%{transform:translate3d(0,0,0);opacity:1}100%{transform:translate3d(0,-20px,0);opacity:0}}.el-autocomplete{position:relative;display:inline-block}.el-autocomplete-suggestion{margin:5px 0;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);border-radius:4px;border:1px solid #E4E7ED;box-sizing:border-box;background-color:#FFF}.el-autocomplete-suggestion__wrap{max-height:280px;padding:10px 0;box-sizing:border-box}.el-autocomplete-suggestion__list{margin:0;padding:0}.el-autocomplete-suggestion li{padding:0 20px;margin:0;line-height:34px;cursor:pointer;color:#606266;font-size:14px;list-style:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.el-autocomplete-suggestion li.highlighted,.el-autocomplete-suggestion li:hover{background-color:#F5F7FA}.el-autocomplete-suggestion li.divider{margin-top:6px;border-top:1px solid #000}.el-autocomplete-suggestion li.divider:last-child{margin-bottom:-6px}.el-autocomplete-suggestion.is-loading li{text-align:center;height:100px;line-height:100px;font-size:20px;color:#999}.el-autocomplete-suggestion.is-loading li::after{display:inline-block;content:\\\"\\\";height:100%;vertical-align:middle}.el-autocomplete-suggestion.is-loading li:hover{background-color:#FFF}.el-autocomplete-suggestion.is-loading .el-icon-loading{vertical-align:middle}.el-dropdown{display:inline-block;position:relative;color:#606266;font-size:14px}.el-dropdown .el-button-group{display:block}.el-dropdown .el-button-group .el-button{float:none}.el-dropdown .el-dropdown__caret-button{padding-left:5px;padding-right:5px;position:relative;border-left:none}.el-dropdown .el-dropdown__caret-button::before{content:'';position:absolute;display:block;width:1px;top:5px;bottom:5px;left:0;background:rgba(255,255,255,.5)}.el-dropdown .el-dropdown__caret-button.el-button--default::before{background:rgba(220,223,230,.5)}.el-dropdown .el-dropdown__caret-button:hover:not(.is-disabled)::before{top:0;bottom:0}.el-dropdown .el-dropdown__caret-button .el-dropdown__icon{padding-left:0}.el-dropdown__icon{font-size:12px;margin:0 3px}.el-dropdown .el-dropdown-selfdefine:focus:active,.el-dropdown .el-dropdown-selfdefine:focus:not(.focusing){outline-width:0}.el-dropdown [disabled]{cursor:not-allowed;color:#bbb}.el-dropdown-menu{position:absolute;top:0;left:0;z-index:10;padding:10px 0;margin:5px 0;background-color:#FFF;border:1px solid #EBEEF5;border-radius:4px;box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-dropdown-menu__item,.el-menu-item{font-size:14px;padding:0 20px;cursor:pointer}.el-dropdown-menu__item{list-style:none;line-height:36px;margin:0;color:#606266;outline:0}.el-dropdown-menu__item:focus,.el-dropdown-menu__item:not(.is-disabled):hover{background-color:#ecf5ff;color:#66b1ff}.el-dropdown-menu__item i{margin-right:5px}.el-dropdown-menu__item--divided{position:relative;margin-top:6px;border-top:1px solid #EBEEF5}.el-dropdown-menu__item--divided:before{content:'';height:6px;display:block;margin:0 -20px;background-color:#FFF}.el-dropdown-menu__item.is-disabled{cursor:default;color:#bbb;pointer-events:none}.el-dropdown-menu--medium{padding:6px 0}.el-dropdown-menu--medium .el-dropdown-menu__item{line-height:30px;padding:0 17px;font-size:14px}.el-dropdown-menu--medium .el-dropdown-menu__item.el-dropdown-menu__item--divided{margin-top:6px}.el-dropdown-menu--medium .el-dropdown-menu__item.el-dropdown-menu__item--divided:before{height:6px;margin:0 -17px}.el-dropdown-menu--small{padding:6px 0}.el-dropdown-menu--small .el-dropdown-menu__item{line-height:27px;padding:0 15px;font-size:13px}.el-dropdown-menu--small .el-dropdown-menu__item.el-dropdown-menu__item--divided{margin-top:4px}.el-dropdown-menu--small .el-dropdown-menu__item.el-dropdown-menu__item--divided:before{height:4px;margin:0 -15px}.el-dropdown-menu--mini{padding:3px 0}.el-dropdown-menu--mini .el-dropdown-menu__item{line-height:24px;padding:0 10px;font-size:12px}.el-dropdown-menu--mini .el-dropdown-menu__item.el-dropdown-menu__item--divided{margin-top:3px}.el-dropdown-menu--mini .el-dropdown-menu__item.el-dropdown-menu__item--divided:before{height:3px;margin:0 -10px}.el-menu{border-right:solid 1px #e6e6e6;list-style:none;position:relative;margin:0;padding-left:0;background-color:#FFF}.el-menu--horizontal>.el-menu-item:not(.is-disabled):focus,.el-menu--horizontal>.el-menu-item:not(.is-disabled):hover,.el-menu--horizontal>.el-submenu .el-submenu__title:hover{background-color:#fff}.el-menu::after,.el-menu::before{display:table;content:\\\"\\\"}.el-breadcrumb__item:last-child .el-breadcrumb__separator,.el-menu--collapse>.el-menu-item .el-submenu__icon-arrow,.el-menu--collapse>.el-submenu>.el-submenu__title .el-submenu__icon-arrow{display:none}.el-menu::after{clear:both}.el-menu.el-menu--horizontal{border-bottom:solid 1px #e6e6e6}.el-menu--horizontal{border-right:none}.el-menu--horizontal>.el-menu-item{float:left;height:60px;line-height:60px;margin:0;border-bottom:2px solid transparent;color:#909399}.el-menu--horizontal>.el-menu-item a,.el-menu--horizontal>.el-menu-item a:hover{color:inherit}.el-menu--horizontal>.el-submenu{float:left}.el-menu--horizontal>.el-submenu:focus,.el-menu--horizontal>.el-submenu:hover{outline:0}.el-menu--horizontal>.el-submenu:focus .el-submenu__title,.el-menu--horizontal>.el-submenu:hover .el-submenu__title{color:#303133}.el-menu--horizontal>.el-submenu.is-active .el-submenu__title{border-bottom:2px solid #409EFF;color:#303133}.el-menu--horizontal>.el-submenu .el-submenu__title{height:60px;line-height:60px;border-bottom:2px solid transparent;color:#909399}.el-menu--horizontal>.el-submenu .el-submenu__icon-arrow{position:static;vertical-align:middle;margin-left:8px;margin-top:-3px}.el-menu--collapse .el-submenu,.el-menu-item{position:relative}.el-menu--horizontal .el-menu .el-menu-item,.el-menu--horizontal .el-menu .el-submenu__title{background-color:#FFF;float:none;height:36px;line-height:36px;padding:0 10px;color:#909399}.el-menu--horizontal .el-menu .el-menu-item.is-active,.el-menu--horizontal .el-menu .el-submenu.is-active>.el-submenu__title{color:#303133}.el-menu--horizontal .el-menu-item:not(.is-disabled):focus,.el-menu--horizontal .el-menu-item:not(.is-disabled):hover{outline:0;color:#303133}.el-menu--horizontal>.el-menu-item.is-active{border-bottom:2px solid #409EFF;color:#303133}.el-menu--collapse{width:64px}.el-menu--collapse>.el-menu-item [class^=el-icon-],.el-menu--collapse>.el-submenu>.el-submenu__title [class^=el-icon-]{margin:0;vertical-align:middle;width:24px;text-align:center}.el-menu--collapse>.el-menu-item span,.el-menu--collapse>.el-submenu>.el-submenu__title span{height:0;width:0;overflow:hidden;visibility:hidden;display:inline-block}.el-menu-item,.el-submenu__title{height:56px;line-height:56px;list-style:none}.el-menu--collapse>.el-menu-item.is-active i{color:inherit}.el-menu--collapse .el-menu .el-submenu{min-width:200px}.el-menu--collapse .el-submenu .el-menu{position:absolute;margin-left:5px;top:0;left:100%;z-index:10;border:1px solid #E4E7ED;border-radius:2px;box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-menu--collapse .el-submenu.is-opened>.el-submenu__title .el-submenu__icon-arrow{transform:none}.el-menu--popup{z-index:100;min-width:200px;border:none;padding:5px 0;border-radius:2px;box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-menu--popup-bottom-start{margin-top:5px}.el-menu--popup-right-start{margin-left:5px;margin-right:5px}.el-menu-item{color:#303133;transition:border-color .3s,background-color .3s,color .3s;box-sizing:border-box;white-space:nowrap}.el-radio-button__inner,.el-submenu__title{-webkit-box-sizing:border-box;position:relative;white-space:nowrap}.el-menu-item *{vertical-align:middle}.el-menu-item i{color:#909399}.el-menu-item:focus,.el-menu-item:hover{outline:0;background-color:#ecf5ff}.el-menu-item.is-disabled{opacity:.25;cursor:not-allowed;background:0 0!important}.el-menu-item [class^=el-icon-]{margin-right:5px;width:24px;text-align:center;font-size:18px;vertical-align:middle}.el-menu-item.is-active{color:#409EFF}.el-menu-item.is-active i{color:inherit}.el-submenu{list-style:none;margin:0;padding-left:0}.el-submenu__title{font-size:14px;color:#303133;padding:0 20px;cursor:pointer;transition:border-color .3s,background-color .3s,color .3s;box-sizing:border-box}.el-submenu__title *{vertical-align:middle}.el-submenu__title i{color:#909399}.el-submenu__title:focus,.el-submenu__title:hover{outline:0;background-color:#ecf5ff}.el-submenu__title.is-disabled{opacity:.25;cursor:not-allowed;background:0 0!important}.el-submenu__title:hover{background-color:#ecf5ff}.el-submenu .el-menu{border:none}.el-submenu .el-menu-item{height:50px;line-height:50px;padding:0 45px;min-width:200px}.el-submenu__icon-arrow{position:absolute;top:50%;right:20px;margin-top:-7px;transition:transform .3s;font-size:12px}.el-submenu.is-active .el-submenu__title{border-bottom-color:#409EFF}.el-submenu.is-opened>.el-submenu__title .el-submenu__icon-arrow{transform:rotateZ(180deg)}.el-submenu.is-disabled .el-menu-item,.el-submenu.is-disabled .el-submenu__title{opacity:.25;cursor:not-allowed;background:0 0!important}.el-submenu [class^=el-icon-]{vertical-align:middle;margin-right:5px;width:24px;text-align:center;font-size:18px}.el-menu-item-group>ul{padding:0}.el-menu-item-group__title{padding:7px 0 7px 20px;line-height:normal;font-size:12px;color:#909399}.el-radio-button__inner,.el-radio-group{display:inline-block;line-height:1;vertical-align:middle}.horizontal-collapse-transition .el-submenu__title .el-submenu__icon-arrow{transition:.2s;opacity:0}.el-radio-group{font-size:0}.el-radio-button{position:relative;display:inline-block;outline:0}.el-radio-button__inner{background:#FFF;border:1px solid #DCDFE6;font-weight:500;border-left:0;color:#606266;-webkit-appearance:none;text-align:center;box-sizing:border-box;outline:0;margin:0;cursor:pointer;transition:all .3s cubic-bezier(.645,.045,.355,1);padding:12px 20px;font-size:14px;border-radius:0}.el-radio-button__inner.is-round{padding:12px 20px}.el-radio-button__inner:hover{color:#409EFF}.el-radio-button__inner [class*=el-icon-]{line-height:.9}.el-radio-button__inner [class*=el-icon-]+span{margin-left:5px}.el-radio-button:first-child .el-radio-button__inner{border-left:1px solid #DCDFE6;border-radius:4px 0 0 4px;box-shadow:none!important}.el-radio-button__orig-radio{opacity:0;outline:0;position:absolute;z-index:-1}.el-radio-button__orig-radio:checked+.el-radio-button__inner{color:#FFF;background-color:#409EFF;border-color:#409EFF;box-shadow:-1px 0 0 0 #409EFF}.el-radio-button__orig-radio:disabled+.el-radio-button__inner{color:#C0C4CC;cursor:not-allowed;background-image:none;background-color:#FFF;border-color:#EBEEF5;box-shadow:none}.el-radio-button__orig-radio:disabled:checked+.el-radio-button__inner{background-color:#F2F6FC}.el-radio-button:last-child .el-radio-button__inner{border-radius:0 4px 4px 0}.el-radio-button:first-child:last-child .el-radio-button__inner{border-radius:4px}.el-radio-button--medium .el-radio-button__inner{padding:10px 20px;font-size:14px;border-radius:0}.el-radio-button--medium .el-radio-button__inner.is-round{padding:10px 20px}.el-radio-button--small .el-radio-button__inner{padding:9px 15px;font-size:12px;border-radius:0}.el-radio-button--small .el-radio-button__inner.is-round{padding:9px 15px}.el-radio-button--mini .el-radio-button__inner{padding:7px 15px;font-size:12px;border-radius:0}.el-radio-button--mini .el-radio-button__inner.is-round{padding:7px 15px}.el-radio-button:focus:not(.is-focus):not(:active):not(.is-disabled){box-shadow:0 0 2px 2px #409EFF}.el-picker-panel,.el-popover,.el-select-dropdown,.el-table-filter,.el-time-panel{-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-switch{display:inline-flex;align-items:center;position:relative;font-size:14px;line-height:20px;height:20px;vertical-align:middle}.el-switch__core,.el-switch__label{display:inline-block;cursor:pointer}.el-switch.is-disabled .el-switch__core,.el-switch.is-disabled .el-switch__label{cursor:not-allowed}.el-switch__label{transition:.2s;height:20px;font-size:14px;font-weight:500;vertical-align:middle;color:#303133}.el-switch__label.is-active{color:#409EFF}.el-switch__label--left{margin-right:10px}.el-switch__label--right{margin-left:10px}.el-switch__label *{line-height:1;font-size:14px;display:inline-block}.el-switch__input{position:absolute;width:0;height:0;opacity:0;margin:0}.el-switch__core{margin:0;position:relative;width:40px;height:20px;border:1px solid #DCDFE6;outline:0;border-radius:10px;box-sizing:border-box;background:#DCDFE6;transition:border-color .3s,background-color .3s;vertical-align:middle}.el-input__prefix,.el-input__suffix{-webkit-transition:all .3s;color:#C0C4CC}.el-switch__core:after{content:\\\"\\\";position:absolute;top:1px;left:1px;border-radius:100%;transition:all .3s;width:16px;height:16px;background-color:#FFF}.el-switch.is-checked .el-switch__core{border-color:#409EFF;background-color:#409EFF}.el-switch.is-checked .el-switch__core::after{left:100%;margin-left:-17px}.el-switch.is-disabled{opacity:.6}.el-switch--wide .el-switch__label.el-switch__label--left span{left:10px}.el-switch--wide .el-switch__label.el-switch__label--right span{right:10px}.el-switch .label-fade-enter,.el-switch .label-fade-leave-active{opacity:0}.el-select-dropdown{position:absolute;z-index:1001;border:1px solid #E4E7ED;border-radius:4px;background-color:#FFF;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-sizing:border-box;margin:5px 0}.el-select-dropdown.is-multiple .el-select-dropdown__item{padding-right:40px}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected{color:#409EFF;background-color:#FFF}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected.hover{background-color:#F5F7FA}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected::after{position:absolute;right:20px;font-family:element-icons;content:\\\"\\\\e6da\\\";font-size:12px;font-weight:700;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.el-select-dropdown .el-scrollbar.is-empty .el-select-dropdown__list{padding:0}.el-select-dropdown__empty{padding:10px 0;margin:0;text-align:center;color:#999;font-size:14px}.el-select-dropdown__wrap{max-height:274px}.el-select-dropdown__list{list-style:none;padding:6px 0;margin:0;box-sizing:border-box}.el-select-dropdown__item{font-size:14px;padding:0 20px;position:relative;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#606266;height:34px;line-height:34px;box-sizing:border-box;cursor:pointer}.el-select-dropdown__item.is-disabled{color:#C0C4CC;cursor:not-allowed}.el-select-dropdown__item.is-disabled:hover{background-color:#FFF}.el-select-dropdown__item.hover,.el-select-dropdown__item:hover{background-color:#F5F7FA}.el-select-dropdown__item.selected{color:#409EFF;font-weight:700}.el-select-group{margin:0;padding:0}.el-select-group__wrap{position:relative;list-style:none;margin:0;padding:0}.el-select-group__wrap:not(:last-of-type){padding-bottom:24px}.el-select-group__wrap:not(:last-of-type)::after{content:'';position:absolute;display:block;left:20px;right:20px;bottom:12px;height:1px;background:#E4E7ED}.el-select-group__title{padding-left:20px;font-size:12px;color:#909399;line-height:30px}.el-select-group .el-select-dropdown__item{padding-left:20px}.el-select{display:inline-block;position:relative}.el-select .el-select__tags>span{display:contents}.el-select:hover .el-input__inner{border-color:#C0C4CC}.el-select .el-input__inner{cursor:pointer;padding-right:35px}.el-select .el-input__inner:focus{border-color:#409EFF}.el-select .el-input .el-select__caret{color:#C0C4CC;font-size:14px;transition:transform .3s;transform:rotateZ(180deg);cursor:pointer}.el-select .el-input .el-select__caret.is-reverse{transform:rotateZ(0)}.el-select .el-input .el-select__caret.is-show-close{font-size:14px;text-align:center;transform:rotateZ(180deg);border-radius:100%;color:#C0C4CC;transition:color .2s cubic-bezier(.645,.045,.355,1)}.el-select .el-input .el-select__caret.is-show-close:hover{color:#909399}.el-select .el-input.is-disabled .el-input__inner{cursor:not-allowed}.el-select .el-input.is-disabled .el-input__inner:hover{border-color:#E4E7ED}.el-range-editor.is-active,.el-range-editor.is-active:hover,.el-select .el-input.is-focus .el-input__inner{border-color:#409EFF}.el-select>.el-input{display:block}.el-select__input{border:none;outline:0;padding:0;margin-left:15px;color:#666;font-size:14px;-webkit-appearance:none;-moz-appearance:none;appearance:none;height:28px;background-color:transparent}.el-select__input.is-mini{height:14px}.el-select__close{cursor:pointer;position:absolute;top:8px;z-index:1000;right:25px;color:#C0C4CC;line-height:18px;font-size:14px}.el-select__close:hover{color:#909399}.el-select__tags{position:absolute;line-height:normal;white-space:normal;z-index:1;top:50%;transform:translateY(-50%);display:flex;align-items:center;flex-wrap:wrap}.el-select__tags-text{overflow:hidden;text-overflow:ellipsis}.el-select .el-tag{box-sizing:border-box;border-color:transparent;margin:2px 0 2px 6px;background-color:#f0f2f5;display:flex;max-width:100%;align-items:center}.el-select .el-tag__close.el-icon-close{background-color:#C0C4CC;top:0;color:#FFF;flex-shrink:0}.el-select .el-tag__close.el-icon-close:hover{background-color:#909399}.el-table,.el-table__expanded-cell{background-color:#FFF}.el-select .el-tag__close.el-icon-close::before{display:block;transform:translate(0,.5px)}.el-table{position:relative;overflow:hidden;box-sizing:border-box;flex:1;width:100%;max-width:100%;font-size:14px;color:#606266}.el-table__empty-block{min-height:60px;text-align:center;width:100%;display:flex;justify-content:center;align-items:center}.el-table__empty-text{line-height:60px;width:50%;color:#909399}.el-table__expand-column .cell{padding:0;text-align:center}.el-table__expand-icon{position:relative;cursor:pointer;color:#666;font-size:12px;transition:transform .2s ease-in-out;height:20px}.el-table__expand-icon--expanded{transform:rotate(90deg)}.el-table__expand-icon>.el-icon{position:absolute;left:50%;top:50%;margin-left:-5px;margin-top:-5px}.el-table__expanded-cell[class*=cell]{padding:20px 50px}.el-table__expanded-cell:hover{background-color:transparent!important}.el-table__placeholder{display:inline-block;width:20px}.el-table__append-wrapper{overflow:hidden}.el-table--fit{border-right:0;border-bottom:0}.el-table--fit .el-table__cell.gutter{border-right-width:1px}.el-table--scrollable-x .el-table__body-wrapper{overflow-x:auto}.el-table--scrollable-y .el-table__body-wrapper{overflow-y:auto}.el-table thead{color:#909399;font-weight:500}.el-table thead.is-group th.el-table__cell{background:#F5F7FA}.el-table .el-table__cell{padding:12px 0;min-width:0;box-sizing:border-box;text-overflow:ellipsis;vertical-align:middle;position:relative;text-align:left}.el-table .el-table__cell.is-center{text-align:center}.el-table .el-table__cell.is-right{text-align:right}.el-table .el-table__cell.gutter{width:15px;border-right-width:0;border-bottom-width:0;padding:0}.el-table .el-table__cell.is-hidden>*{visibility:hidden}.el-table--medium .el-table__cell{padding:10px 0}.el-table--small{font-size:12px}.el-table--small .el-table__cell{padding:8px 0}.el-table--mini{font-size:12px}.el-table--mini .el-table__cell{padding:6px 0}.el-table tr{background-color:#FFF}.el-table tr input[type=checkbox]{margin:0}.el-table td.el-table__cell,.el-table th.el-table__cell.is-leaf{border-bottom:1px solid #EBEEF5}.el-table th.el-table__cell.is-sortable{cursor:pointer}.el-table th.el-table__cell{overflow:hidden;-webkit-user-select:none;-moz-user-select:none;user-select:none;background-color:#FFF}.el-table th.el-table__cell>.cell{display:inline-block;box-sizing:border-box;position:relative;vertical-align:middle;padding-left:10px;padding-right:10px;width:100%}.el-table th.el-table__cell>.cell.highlight{color:#409EFF}.el-table th.el-table__cell.required>div::before{display:inline-block;content:\\\"\\\";width:8px;height:8px;border-radius:50%;background:#ff4d51;margin-right:5px;vertical-align:middle}.el-table td.el-table__cell div{box-sizing:border-box}.el-date-table td,.el-table .cell,.el-table-filter{-webkit-box-sizing:border-box}.el-table td.el-table__cell.gutter{width:0}.el-table .cell{box-sizing:border-box;overflow:hidden;text-overflow:ellipsis;white-space:normal;word-break:break-all;line-height:23px;padding-left:10px;padding-right:10px}.el-table .cell.el-tooltip{white-space:nowrap;min-width:50px}.el-table--border,.el-table--group{border:1px solid #EBEEF5}.el-table--border::after,.el-table--group::after,.el-table::before{content:'';position:absolute;background-color:#EBEEF5;z-index:1}.el-table--border::after,.el-table--group::after{top:0;right:0;width:1px;height:100%}.el-table::before{left:0;bottom:0;width:100%;height:1px}.el-table--border{border-right:none;border-bottom:none}.el-table--border.el-loading-parent--relative{border-color:transparent}.el-table--border .el-table__cell,.el-table__body-wrapper .el-table--border.is-scrolling-left~.el-table__fixed{border-right:1px solid #EBEEF5}.el-table--border .el-table__cell:first-child .cell{padding-left:10px}.el-table--border th.el-table__cell.gutter:last-of-type{border-bottom:1px solid #EBEEF5;border-bottom-width:1px}.el-table--border th.el-table__cell,.el-table__fixed-right-patch{border-bottom:1px solid #EBEEF5}.el-table--hidden{visibility:hidden}.el-table__fixed,.el-table__fixed-right{position:absolute;top:0;left:0;overflow-x:hidden;overflow-y:hidden;box-shadow:0 0 10px rgba(0,0,0,.12)}.el-table__fixed-right::before,.el-table__fixed::before{content:'';position:absolute;left:0;bottom:0;width:100%;height:1px;background-color:#EBEEF5;z-index:4}.el-table__fixed-right-patch{position:absolute;top:-1px;right:0;background-color:#FFF}.el-table__fixed-right{top:0;left:auto;right:0}.el-table__fixed-right .el-table__fixed-body-wrapper,.el-table__fixed-right .el-table__fixed-footer-wrapper,.el-table__fixed-right .el-table__fixed-header-wrapper{left:auto;right:0}.el-table__fixed-header-wrapper{position:absolute;left:0;top:0;z-index:3}.el-table__fixed-footer-wrapper{position:absolute;left:0;bottom:0;z-index:3}.el-table__fixed-footer-wrapper tbody td.el-table__cell{border-top:1px solid #EBEEF5;background-color:#F5F7FA;color:#606266}.el-table__fixed-body-wrapper{position:absolute;left:0;top:37px;overflow:hidden;z-index:3}.el-table__body-wrapper,.el-table__footer-wrapper,.el-table__header-wrapper{width:100%}.el-table__footer-wrapper{margin-top:-1px}.el-table__footer-wrapper td.el-table__cell{border-top:1px solid #EBEEF5}.el-table__body,.el-table__footer,.el-table__header{table-layout:fixed;border-collapse:separate}.el-table__footer-wrapper,.el-table__header-wrapper{overflow:hidden}.el-table__footer-wrapper tbody td.el-table__cell,.el-table__header-wrapper tbody td.el-table__cell{background-color:#F5F7FA;color:#606266}.el-table__body-wrapper{overflow:hidden;position:relative}.el-table__body-wrapper.is-scrolling-left~.el-table__fixed,.el-table__body-wrapper.is-scrolling-none~.el-table__fixed,.el-table__body-wrapper.is-scrolling-none~.el-table__fixed-right,.el-table__body-wrapper.is-scrolling-right~.el-table__fixed-right{box-shadow:none}.el-table__body-wrapper .el-table--border.is-scrolling-right~.el-table__fixed-right{border-left:1px solid #EBEEF5}.el-table .caret-wrapper{display:inline-flex;flex-direction:column;align-items:center;height:34px;width:24px;vertical-align:middle;cursor:pointer;overflow:initial;position:relative}.el-table .sort-caret{width:0;height:0;border:5px solid transparent;position:absolute;left:7px}.el-table .sort-caret.ascending{border-bottom-color:#C0C4CC;top:5px}.el-table .sort-caret.descending{border-top-color:#C0C4CC;bottom:7px}.el-table .ascending .sort-caret.ascending{border-bottom-color:#409EFF}.el-table .descending .sort-caret.descending{border-top-color:#409EFF}.el-table .hidden-columns{visibility:hidden;position:absolute;z-index:-1}.el-table--striped .el-table__body tr.el-table__row--striped td.el-table__cell{background:#FAFAFA}.el-table--striped .el-table__body tr.el-table__row--striped.current-row td.el-table__cell,.el-table--striped .el-table__body tr.el-table__row--striped.selection-row td.el-table__cell{background-color:#ecf5ff}.el-table__body tr.hover-row.current-row>td.el-table__cell,.el-table__body tr.hover-row.el-table__row--striped.current-row>td.el-table__cell,.el-table__body tr.hover-row.el-table__row--striped.selection-row>td.el-table__cell,.el-table__body tr.hover-row.el-table__row--striped>td.el-table__cell,.el-table__body tr.hover-row.selection-row>td.el-table__cell,.el-table__body tr.hover-row>td.el-table__cell{background-color:#F5F7FA}.el-table__body tr.current-row>td.el-table__cell,.el-table__body tr.selection-row>td.el-table__cell{background-color:#ecf5ff}.el-table__column-resize-proxy{position:absolute;left:200px;top:0;bottom:0;width:0;border-left:1px solid #EBEEF5;z-index:10}.el-table__column-filter-trigger{display:inline-block;line-height:34px;cursor:pointer}.el-table__column-filter-trigger i{color:#909399;font-size:12px;transform:scale(.75)}.el-table--enable-row-transition .el-table__body td.el-table__cell{transition:background-color .25s ease}.el-table--enable-row-hover .el-table__body tr:hover>td.el-table__cell{background-color:#F5F7FA}.el-table--fluid-height .el-table__fixed,.el-table--fluid-height .el-table__fixed-right{bottom:0;overflow:hidden}.el-table [class*=el-table__row--level] .el-table__expand-icon{display:inline-block;width:20px;line-height:20px;height:20px;text-align:center;margin-right:3px}.el-table-column--selection .cell{padding-left:14px;padding-right:14px}.el-table-filter{border:1px solid #EBEEF5;border-radius:2px;background-color:#FFF;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-sizing:border-box;margin:2px 0}.el-table-filter__list{padding:5px 0;margin:0;list-style:none;min-width:100px}.el-table-filter__list-item{line-height:36px;padding:0 10px;cursor:pointer;font-size:14px}.el-table-filter__list-item:hover{background-color:#ecf5ff;color:#66b1ff}.el-table-filter__list-item.is-active{background-color:#409EFF;color:#FFF}.el-table-filter__content{min-width:100px}.el-table-filter__bottom{border-top:1px solid #EBEEF5;padding:8px}.el-table-filter__bottom button{background:0 0;border:none;color:#606266;cursor:pointer;font-size:13px;padding:0 3px}.el-date-table td.in-range div,.el-date-table td.in-range div:hover,.el-date-table.is-week-mode .el-date-table__row.current div,.el-date-table.is-week-mode .el-date-table__row:hover div{background-color:#F2F6FC}.el-table-filter__bottom button:hover{color:#409EFF}.el-table-filter__bottom button:focus{outline:0}.el-table-filter__bottom button.is-disabled{color:#C0C4CC;cursor:not-allowed}.el-table-filter__wrap{max-height:280px}.el-table-filter__checkbox-group{padding:10px}.el-table-filter__checkbox-group label.el-checkbox{display:block;margin-right:5px;margin-bottom:8px;margin-left:5px}.el-table-filter__checkbox-group .el-checkbox:last-child{margin-bottom:0}.el-date-table{font-size:12px;-webkit-user-select:none;-moz-user-select:none;user-select:none}.el-date-table.is-week-mode .el-date-table__row:hover td.available:hover{color:#606266}.el-date-table.is-week-mode .el-date-table__row:hover td:first-child div{margin-left:5px;border-top-left-radius:15px;border-bottom-left-radius:15px}.el-date-table.is-week-mode .el-date-table__row:hover td:last-child div{margin-right:5px;border-top-right-radius:15px;border-bottom-right-radius:15px}.el-date-table td{width:32px;height:30px;padding:4px 0;box-sizing:border-box;text-align:center;cursor:pointer;position:relative}.el-date-table td div{height:30px;padding:3px 0;box-sizing:border-box}.el-date-table td span{width:24px;height:24px;display:block;margin:0 auto;line-height:24px;position:absolute;left:50%;transform:translateX(-50%);border-radius:50%}.el-date-table td.next-month,.el-date-table td.prev-month{color:#C0C4CC}.el-date-table td.today{position:relative}.el-date-table td.today span{color:#409EFF;font-weight:700}.el-date-table td.today.end-date span,.el-date-table td.today.start-date span{color:#FFF}.el-date-table td.available:hover{color:#409EFF}.el-date-table td.current:not(.disabled) span{color:#FFF;background-color:#409EFF}.el-date-table td.end-date div,.el-date-table td.start-date div{color:#FFF}.el-date-table td.end-date span,.el-date-table td.start-date span{background-color:#409EFF}.el-date-table td.start-date div{margin-left:5px;border-top-left-radius:15px;border-bottom-left-radius:15px}.el-date-table td.end-date div{margin-right:5px;border-top-right-radius:15px;border-bottom-right-radius:15px}.el-date-table td.disabled div{background-color:#F5F7FA;opacity:1;cursor:not-allowed;color:#C0C4CC}.el-date-table td.selected div{margin-left:5px;margin-right:5px;background-color:#F2F6FC;border-radius:15px}.el-date-table td.selected div:hover{background-color:#F2F6FC}.el-date-table td.selected span{background-color:#409EFF;color:#FFF;border-radius:15px}.el-date-table td.week{font-size:80%;color:#606266}.el-month-table,.el-year-table{font-size:12px;border-collapse:collapse}.el-date-table th{padding:5px;color:#606266;font-weight:400;border-bottom:solid 1px #EBEEF5}.el-month-table{margin:-1px}.el-month-table td{text-align:center;padding:8px 0;cursor:pointer}.el-month-table td div{height:48px;padding:6px 0;box-sizing:border-box}.el-month-table td.today .cell{color:#409EFF;font-weight:700}.el-month-table td.today.end-date .cell,.el-month-table td.today.start-date .cell{color:#FFF}.el-month-table td.disabled .cell{background-color:#F5F7FA;cursor:not-allowed;color:#C0C4CC}.el-month-table td.disabled .cell:hover{color:#C0C4CC}.el-month-table td .cell{width:60px;height:36px;display:block;line-height:36px;color:#606266;margin:0 auto;border-radius:18px}.el-month-table td .cell:hover{color:#409EFF}.el-month-table td.in-range div,.el-month-table td.in-range div:hover{background-color:#F2F6FC}.el-month-table td.end-date div,.el-month-table td.start-date div{color:#FFF}.el-month-table td.end-date .cell,.el-month-table td.start-date .cell{color:#FFF;background-color:#409EFF}.el-month-table td.start-date div{border-top-left-radius:24px;border-bottom-left-radius:24px}.el-month-table td.end-date div{border-top-right-radius:24px;border-bottom-right-radius:24px}.el-month-table td.current:not(.disabled) .cell{color:#409EFF}.el-year-table{margin:-1px}.el-year-table .el-icon{color:#303133}.el-year-table td{text-align:center;padding:20px 3px;cursor:pointer}.el-year-table td.today .cell{color:#409EFF;font-weight:700}.el-year-table td.disabled .cell{background-color:#F5F7FA;cursor:not-allowed;color:#C0C4CC}.el-year-table td.disabled .cell:hover{color:#C0C4CC}.el-year-table td .cell{width:48px;height:32px;display:block;line-height:32px;color:#606266;margin:0 auto}.el-year-table td .cell:hover,.el-year-table td.current:not(.disabled) .cell{color:#409EFF}.el-date-range-picker{width:646px}.el-date-range-picker.has-sidebar{width:756px}.el-date-range-picker table{table-layout:fixed;width:100%}.el-date-range-picker .el-picker-panel__body{min-width:513px}.el-date-range-picker .el-picker-panel__content{margin:0}.el-date-range-picker__header{position:relative;text-align:center;height:28px}.el-date-range-picker__header [class*=arrow-left]{float:left}.el-date-range-picker__header [class*=arrow-right]{float:right}.el-date-range-picker__header div{font-size:16px;font-weight:500;margin-right:50px}.el-date-range-picker__content{float:left;width:50%;box-sizing:border-box;margin:0;padding:16px}.el-date-range-picker__content.is-left{border-right:1px solid #e4e4e4}.el-date-range-picker__content .el-date-range-picker__header div{margin-left:50px;margin-right:50px}.el-date-range-picker__editors-wrap{box-sizing:border-box;display:table-cell}.el-date-range-picker__editors-wrap.is-right{text-align:right}.el-date-range-picker__time-header{position:relative;border-bottom:1px solid #e4e4e4;font-size:12px;padding:8px 5px 5px;display:table;width:100%;box-sizing:border-box}.el-date-range-picker__time-header>.el-icon-arrow-right{font-size:20px;vertical-align:middle;display:table-cell;color:#303133}.el-date-range-picker__time-picker-wrap{position:relative;display:table-cell;padding:0 5px}.el-date-range-picker__time-picker-wrap .el-picker-panel{position:absolute;top:13px;right:0;z-index:1;background:#FFF}.el-date-picker{width:322px}.el-date-picker.has-sidebar.has-time{width:434px}.el-date-picker.has-sidebar{width:438px}.el-date-picker.has-time .el-picker-panel__body-wrapper{position:relative}.el-date-picker .el-picker-panel__content{width:292px}.el-date-picker table{table-layout:fixed;width:100%}.el-date-picker__editor-wrap{position:relative;display:table-cell;padding:0 5px}.el-date-picker__time-header{position:relative;border-bottom:1px solid #e4e4e4;font-size:12px;padding:8px 5px 5px;display:table;width:100%;box-sizing:border-box}.el-date-picker__header{margin:12px;text-align:center}.el-date-picker__header--bordered{margin-bottom:0;padding-bottom:12px;border-bottom:solid 1px #EBEEF5}.el-date-picker__header--bordered+.el-picker-panel__content{margin-top:0}.el-date-picker__header-label{font-size:16px;font-weight:500;padding:0 5px;line-height:22px;text-align:center;cursor:pointer;color:#606266}.el-date-picker__header-label.active,.el-date-picker__header-label:hover{color:#409EFF}.el-date-picker__prev-btn{float:left}.el-date-picker__next-btn{float:right}.el-date-picker__time-wrap{padding:10px;text-align:center}.el-date-picker__time-label{float:left;cursor:pointer;line-height:30px;margin-left:10px}.time-select{margin:5px 0;min-width:0}.time-select .el-picker-panel__content{max-height:200px;margin:0}.time-select-item{padding:8px 10px;font-size:14px;line-height:20px}.time-select-item.selected:not(.disabled){color:#409EFF;font-weight:700}.time-select-item.disabled{color:#E4E7ED;cursor:not-allowed}.time-select-item:hover{background-color:#F5F7FA;font-weight:700;cursor:pointer}.el-date-editor{position:relative;display:inline-block;text-align:left}.el-date-editor.el-input,.el-date-editor.el-input__inner{width:220px}.el-date-editor--monthrange.el-input,.el-date-editor--monthrange.el-input__inner{width:300px}.el-date-editor--daterange.el-input,.el-date-editor--daterange.el-input__inner,.el-date-editor--timerange.el-input,.el-date-editor--timerange.el-input__inner{width:350px}.el-date-editor--datetimerange.el-input,.el-date-editor--datetimerange.el-input__inner{width:400px}.el-date-editor--dates .el-input__inner{text-overflow:ellipsis;white-space:nowrap}.el-date-editor .el-icon-circle-close{cursor:pointer}.el-date-editor .el-range__icon{font-size:14px;margin-left:-5px;color:#C0C4CC;float:left;line-height:32px}.el-date-editor .el-range-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:none;outline:0;display:inline-block;height:100%;margin:0;padding:0;width:39%;text-align:center;font-size:14px;color:#606266}.el-date-editor .el-range-input::-moz-placeholder{color:#C0C4CC}.el-date-editor .el-range-input::placeholder{color:#C0C4CC}.el-date-editor .el-range-separator{display:inline-block;height:100%;padding:0 5px;margin:0;text-align:center;line-height:32px;font-size:14px;width:5%;color:#303133}.el-date-editor .el-range__close-icon{font-size:14px;color:#C0C4CC;width:25px;display:inline-block;float:right;line-height:32px}.el-range-editor.el-input__inner{display:inline-flex;align-items:center;padding:3px 10px}.el-range-editor .el-range-input{line-height:1}.el-range-editor--medium.el-input__inner{height:36px}.el-range-editor--medium .el-range-separator{line-height:28px;font-size:14px}.el-range-editor--medium .el-range-input{font-size:14px}.el-range-editor--medium .el-range__close-icon,.el-range-editor--medium .el-range__icon{line-height:28px}.el-range-editor--small.el-input__inner{height:32px}.el-range-editor--small .el-range-separator{line-height:24px;font-size:13px}.el-range-editor--small .el-range-input{font-size:13px}.el-range-editor--small .el-range__close-icon,.el-range-editor--small .el-range__icon{line-height:24px}.el-range-editor--mini.el-input__inner{height:28px}.el-range-editor--mini .el-range-separator{line-height:20px;font-size:12px}.el-range-editor--mini .el-range-input{font-size:12px}.el-range-editor--mini .el-range__close-icon,.el-range-editor--mini .el-range__icon{line-height:20px}.el-range-editor.is-disabled{background-color:#F5F7FA;border-color:#E4E7ED;color:#C0C4CC;cursor:not-allowed}.el-range-editor.is-disabled:focus,.el-range-editor.is-disabled:hover{border-color:#E4E7ED}.el-range-editor.is-disabled input{background-color:#F5F7FA;color:#C0C4CC;cursor:not-allowed}.el-range-editor.is-disabled input::-moz-placeholder{color:#C0C4CC}.el-range-editor.is-disabled input::placeholder{color:#C0C4CC}.el-range-editor.is-disabled .el-range-separator{color:#C0C4CC}.el-picker-panel{color:#606266;border:1px solid #E4E7ED;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);background:#FFF;border-radius:4px;line-height:30px;margin:5px 0}.el-picker-panel__body-wrapper::after,.el-picker-panel__body::after{content:\\\"\\\";display:table;clear:both}.el-picker-panel__content{position:relative;margin:15px}.el-picker-panel__footer{border-top:1px solid #e4e4e4;padding:4px;text-align:right;background-color:#FFF;position:relative;font-size:0}.el-picker-panel__shortcut{display:block;width:100%;border:0;background-color:transparent;line-height:28px;font-size:14px;color:#606266;padding-left:12px;text-align:left;outline:0;cursor:pointer}.el-picker-panel__shortcut:hover{color:#409EFF}.el-picker-panel__shortcut.active{background-color:#e6f1fe;color:#409EFF}.el-picker-panel__btn{border:1px solid #dcdcdc;color:#333;line-height:24px;border-radius:2px;padding:0 20px;cursor:pointer;background-color:transparent;outline:0;font-size:12px}.el-picker-panel__btn[disabled]{color:#ccc;cursor:not-allowed}.el-picker-panel__icon-btn{font-size:12px;color:#303133;border:0;background:0 0;cursor:pointer;outline:0;margin-top:8px}.el-picker-panel__icon-btn:hover{color:#409EFF}.el-picker-panel__icon-btn.is-disabled{color:#bbb}.el-picker-panel__icon-btn.is-disabled:hover{cursor:not-allowed}.el-picker-panel__link-btn{vertical-align:middle}.el-picker-panel [slot=sidebar],.el-picker-panel__sidebar{position:absolute;top:0;bottom:0;width:110px;border-right:1px solid #e4e4e4;box-sizing:border-box;padding-top:6px;background-color:#FFF;overflow:auto}.el-picker-panel [slot=sidebar]+.el-picker-panel__body,.el-picker-panel__sidebar+.el-picker-panel__body{margin-left:110px}.el-time-spinner.has-seconds .el-time-spinner__wrapper{width:33.3%}.el-time-spinner__wrapper{max-height:190px;overflow:auto;display:inline-block;width:50%;vertical-align:top;position:relative}.el-time-spinner__wrapper .el-scrollbar__wrap:not(.el-scrollbar__wrap--hidden-default){padding-bottom:15px}.el-time-spinner__input.el-input .el-input__inner,.el-time-spinner__list{padding:0;text-align:center}.el-time-spinner__wrapper.is-arrow{box-sizing:border-box;text-align:center;overflow:hidden}.el-time-spinner__wrapper.is-arrow .el-time-spinner__list{transform:translateY(-32px)}.el-time-spinner__wrapper.is-arrow .el-time-spinner__item:hover:not(.disabled):not(.active){background:#FFF;cursor:default}.el-time-spinner__arrow{font-size:12px;color:#909399;position:absolute;left:0;width:100%;z-index:1;text-align:center;height:30px;line-height:30px;cursor:pointer}.el-time-spinner__arrow:hover{color:#409EFF}.el-time-spinner__arrow.el-icon-arrow-up{top:10px}.el-time-spinner__arrow.el-icon-arrow-down{bottom:10px}.el-time-spinner__input.el-input{width:70%}.el-time-spinner__list{margin:0;list-style:none}.el-time-spinner__list::after,.el-time-spinner__list::before{content:'';display:block;width:100%;height:80px}.el-time-spinner__item{height:32px;line-height:32px;font-size:12px;color:#606266}.el-time-spinner__item:hover:not(.disabled):not(.active){background:#F5F7FA;cursor:pointer}.el-time-spinner__item.active:not(.disabled){color:#303133;font-weight:700}.el-time-spinner__item.disabled{color:#C0C4CC;cursor:not-allowed}.el-time-panel{margin:5px 0;border:1px solid #E4E7ED;background-color:#FFF;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);border-radius:2px;position:absolute;width:180px;left:0;z-index:1000;-webkit-user-select:none;-moz-user-select:none;user-select:none;box-sizing:content-box}.el-time-panel__content{font-size:0;position:relative;overflow:hidden}.el-time-panel__content::after,.el-time-panel__content::before{content:\\\"\\\";top:50%;position:absolute;margin-top:-15px;height:32px;z-index:-1;left:0;right:0;box-sizing:border-box;padding-top:6px;text-align:left;border-top:1px solid #E4E7ED;border-bottom:1px solid #E4E7ED}.el-time-panel__content::after{left:50%;margin-left:12%;margin-right:12%}.el-time-panel__content::before{padding-left:50%;margin-right:12%;margin-left:12%}.el-time-panel__content.has-seconds::after{left:calc(100% / 3 * 2)}.el-time-panel__content.has-seconds::before{padding-left:calc(100% / 3)}.el-time-panel__footer{border-top:1px solid #e4e4e4;padding:4px;height:36px;line-height:25px;text-align:right;box-sizing:border-box}.el-time-panel__btn{border:none;line-height:28px;padding:0 5px;margin:0 5px;cursor:pointer;background-color:transparent;outline:0;font-size:12px;color:#303133}.el-time-panel__btn.confirm{font-weight:800;color:#409EFF}.el-time-range-picker{width:354px;overflow:visible}.el-time-range-picker__content{position:relative;text-align:center;padding:10px}.el-time-range-picker__cell{box-sizing:border-box;margin:0;padding:4px 7px 7px;width:50%;display:inline-block}.el-time-range-picker__header{margin-bottom:5px;text-align:center;font-size:14px}.el-time-range-picker__body{border-radius:2px;border:1px solid #E4E7ED}.el-popover{position:absolute;background:#FFF;min-width:150px;border-radius:4px;border:1px solid #EBEEF5;padding:12px;z-index:2000;color:#606266;line-height:1.4;text-align:justify;font-size:14px;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);word-break:break-all}.el-card.is-always-shadow,.el-card.is-hover-shadow:focus,.el-card.is-hover-shadow:hover,.el-cascader__dropdown,.el-color-picker__panel,.el-message-box,.el-notification{-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-popover--plain{padding:18px 20px}.el-popover__title{color:#303133;font-size:16px;line-height:1;margin-bottom:12px}.el-popover:focus,.el-popover:focus:active,.el-popover__reference:focus:hover,.el-popover__reference:focus:not(.focusing){outline-width:0}.v-modal-enter{animation:v-modal-in .2s ease}.v-modal-leave{animation:v-modal-out .2s ease forwards}@keyframes v-modal-in{0%{opacity:0}}@keyframes v-modal-out{100%{opacity:0}}.v-modal{position:fixed;left:0;top:0;width:100%;height:100%;opacity:.5;background:#000}.el-popup-parent--hidden{overflow:hidden}.el-message-box{display:inline-block;width:420px;padding-bottom:10px;vertical-align:middle;background-color:#FFF;border-radius:4px;border:1px solid #EBEEF5;font-size:18px;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);text-align:left;overflow:hidden;backface-visibility:hidden}.el-message-box__wrapper{position:fixed;top:0;bottom:0;left:0;right:0;text-align:center}.el-message-box__wrapper::after{content:\\\"\\\";display:inline-block;height:100%;width:0;vertical-align:middle}.el-message-box__header{position:relative;padding:15px 15px 10px}.el-message-box__title{padding-left:0;margin-bottom:0;font-size:18px;line-height:1;color:#303133}.el-message-box__headerbtn{position:absolute;top:15px;right:15px;padding:0;border:none;outline:0;background:0 0;font-size:16px;cursor:pointer}.el-form-item.is-error .el-input__inner,.el-form-item.is-error .el-input__inner:focus,.el-form-item.is-error .el-textarea__inner,.el-form-item.is-error .el-textarea__inner:focus,.el-message-box__input input.invalid,.el-message-box__input input.invalid:focus{border-color:#F56C6C}.el-message-box__headerbtn .el-message-box__close{color:#909399}.el-message-box__headerbtn:focus .el-message-box__close,.el-message-box__headerbtn:hover .el-message-box__close{color:#409EFF}.el-message-box__content{padding:10px 15px;color:#606266;font-size:14px}.el-message-box__container{position:relative}.el-message-box__input{padding-top:15px}.el-message-box__status{position:absolute;top:50%;transform:translateY(-50%);font-size:24px!important}.el-message-box__status::before{padding-left:1px}.el-message-box__status+.el-message-box__message{padding-left:36px;padding-right:12px}.el-message-box__status.el-icon-success{color:#67C23A}.el-message-box__status.el-icon-info{color:#909399}.el-message-box__status.el-icon-warning{color:#E6A23C}.el-message-box__status.el-icon-error{color:#F56C6C}.el-message-box__message{margin:0}.el-message-box__message p{margin:0;line-height:24px}.el-message-box__errormsg{color:#F56C6C;font-size:12px;min-height:18px;margin-top:2px}.el-message-box__btns{padding:5px 15px 0;text-align:right}.el-message-box__btns button:nth-child(2){margin-left:10px}.el-message-box__btns-reverse{flex-direction:row-reverse}.el-message-box--center{padding-bottom:30px}.el-message-box--center .el-message-box__header{padding-top:30px}.el-message-box--center .el-message-box__title{position:relative;display:flex;align-items:center;justify-content:center}.el-message-box--center .el-message-box__status{position:relative;top:auto;padding-right:5px;text-align:center;transform:translateY(-1px)}.el-message-box--center .el-message-box__message{margin-left:0}.el-message-box--center .el-message-box__btns,.el-message-box--center .el-message-box__content{text-align:center}.el-message-box--center .el-message-box__content{padding-left:27px;padding-right:27px}.msgbox-fade-enter-active{animation:msgbox-fade-in .3s}.msgbox-fade-leave-active{animation:msgbox-fade-out .3s}@keyframes msgbox-fade-in{0%{transform:translate3d(0,-20px,0);opacity:0}100%{transform:translate3d(0,0,0);opacity:1}}@keyframes msgbox-fade-out{0%{transform:translate3d(0,0,0);opacity:1}100%{transform:translate3d(0,-20px,0);opacity:0}}.el-breadcrumb{font-size:14px;line-height:1}.el-breadcrumb::after,.el-breadcrumb::before{display:table;content:\\\"\\\"}.el-breadcrumb::after{clear:both}.el-breadcrumb__separator{margin:0 9px;font-weight:700;color:#C0C4CC}.el-breadcrumb__separator[class*=icon]{margin:0 6px;font-weight:400}.el-breadcrumb__item{float:left}.el-breadcrumb__inner{color:#606266}.el-breadcrumb__inner a,.el-breadcrumb__inner.is-link{font-weight:700;text-decoration:none;transition:color .2s cubic-bezier(.645,.045,.355,1);color:#303133}.el-breadcrumb__inner a:hover,.el-breadcrumb__inner.is-link:hover{color:#409EFF;cursor:pointer}.el-breadcrumb__item:last-child .el-breadcrumb__inner,.el-breadcrumb__item:last-child .el-breadcrumb__inner a,.el-breadcrumb__item:last-child .el-breadcrumb__inner a:hover,.el-breadcrumb__item:last-child .el-breadcrumb__inner:hover{font-weight:400;color:#606266;cursor:text}.el-form--label-left .el-form-item__label{text-align:left}.el-form--label-top .el-form-item__label{float:none;display:inline-block;text-align:left;padding:0 0 10px}.el-form--inline .el-form-item{display:inline-block;margin-right:10px;vertical-align:top}.el-form--inline .el-form-item__label{float:none;display:inline-block}.el-form--inline .el-form-item__content{display:inline-block;vertical-align:top}.el-form--inline.el-form--label-top .el-form-item__content{display:block}.el-form-item{margin-bottom:22px}.el-form-item::after,.el-form-item::before{display:table;content:\\\"\\\"}.el-form-item::after{clear:both}.el-form-item .el-form-item{margin-bottom:0}.el-form-item--mini.el-form-item,.el-form-item--small.el-form-item{margin-bottom:18px}.el-form-item .el-input__validateIcon{display:none}.el-form-item--medium .el-form-item__content,.el-form-item--medium .el-form-item__label{line-height:36px}.el-form-item--small .el-form-item__content,.el-form-item--small .el-form-item__label{line-height:32px}.el-form-item--small .el-form-item__error{padding-top:2px}.el-form-item--mini .el-form-item__content,.el-form-item--mini .el-form-item__label{line-height:28px}.el-form-item--mini .el-form-item__error{padding-top:1px}.el-form-item__label-wrap{float:left}.el-form-item__label-wrap .el-form-item__label{display:inline-block;float:none}.el-form-item__label{text-align:right;vertical-align:middle;float:left;font-size:14px;color:#606266;line-height:40px;padding:0 12px 0 0;box-sizing:border-box}.el-form-item__content{line-height:40px;position:relative;font-size:14px}.el-form-item__content::after,.el-form-item__content::before{display:table;content:\\\"\\\"}.el-form-item__content::after{clear:both}.el-form-item__content .el-input-group{vertical-align:top}.el-form-item__error{color:#F56C6C;font-size:12px;line-height:1;padding-top:4px;position:absolute;top:100%;left:0}.el-form-item__error--inline{position:relative;top:auto;left:auto;display:inline-block;margin-left:10px}.el-form-item.is-required:not(.is-no-asterisk) .el-form-item__label-wrap>.el-form-item__label:before,.el-form-item.is-required:not(.is-no-asterisk)>.el-form-item__label:before{content:'*';color:#F56C6C;margin-right:4px}.el-form-item.is-error .el-input-group__append .el-input__inner,.el-form-item.is-error .el-input-group__prepend .el-input__inner{border-color:transparent}.el-form-item.is-error .el-input__validateIcon{color:#F56C6C}.el-form-item--feedback .el-input__validateIcon{display:inline-block}.el-tabs__header{padding:0;position:relative;margin:0 0 15px}.el-tabs__active-bar{position:absolute;bottom:0;left:0;height:2px;background-color:#409EFF;z-index:1;transition:transform .3s cubic-bezier(.645,.045,.355,1);list-style:none}.el-tabs__new-tab{float:right;border:1px solid #d3dce6;height:18px;width:18px;line-height:18px;margin:12px 0 9px 10px;border-radius:3px;text-align:center;font-size:12px;color:#d3dce6;cursor:pointer;transition:all .15s}.el-tabs__new-tab .el-icon-plus{transform:scale(.8,.8)}.el-tabs__new-tab:hover{color:#409EFF}.el-tabs__nav-wrap{overflow:hidden;margin-bottom:-1px;position:relative}.el-tabs__nav-wrap::after{content:\\\"\\\";position:absolute;left:0;bottom:0;width:100%;height:2px;background-color:#E4E7ED;z-index:1}.el-tabs__nav-wrap.is-scrollable{padding:0 20px;box-sizing:border-box}.el-tabs__nav-scroll{overflow:hidden}.el-tabs__nav-next,.el-tabs__nav-prev{position:absolute;cursor:pointer;line-height:44px;font-size:12px;color:#909399}.el-tabs__nav-next{right:0}.el-tabs__nav-prev{left:0}.el-tabs__nav{white-space:nowrap;position:relative;transition:transform .3s;float:left;z-index:2}.el-tabs__nav.is-stretch{min-width:100%;display:flex}.el-tabs__nav.is-stretch>*{flex:1;text-align:center}.el-tabs__item{padding:0 20px;height:40px;box-sizing:border-box;line-height:40px;display:inline-block;list-style:none;font-size:14px;font-weight:500;color:#303133;position:relative}.el-tabs__item:focus,.el-tabs__item:focus:active{outline:0}.el-tabs__item:focus.is-active.is-focus:not(:active){box-shadow:0 0 2px 2px #409EFF inset;border-radius:3px}.el-tabs__item .el-icon-close{border-radius:50%;text-align:center;transition:all .3s cubic-bezier(.645,.045,.355,1);margin-left:5px}.el-tabs__item .el-icon-close:before{transform:scale(.9);display:inline-block}.el-tabs--card>.el-tabs__header .el-tabs__active-bar,.el-tabs--left.el-tabs--card .el-tabs__active-bar.is-left,.el-tabs--right.el-tabs--card .el-tabs__active-bar.is-right{display:none}.el-tabs__item .el-icon-close:hover{background-color:#C0C4CC;color:#FFF}.el-tabs__item.is-active{color:#409EFF}.el-tabs__item:hover{color:#409EFF;cursor:pointer}.el-tabs__item.is-disabled{color:#C0C4CC;cursor:default}.el-tabs__content{overflow:hidden;position:relative}.el-tabs--card>.el-tabs__header{border-bottom:1px solid #E4E7ED}.el-tabs--card>.el-tabs__header .el-tabs__nav-wrap::after{content:none}.el-tabs--card>.el-tabs__header .el-tabs__nav{border:1px solid #E4E7ED;border-bottom:none;border-radius:4px 4px 0 0;box-sizing:border-box}.el-tabs--card>.el-tabs__header .el-tabs__item .el-icon-close{position:relative;font-size:12px;width:0;height:14px;vertical-align:middle;line-height:15px;overflow:hidden;top:-1px;right:-2px;transform-origin:100% 50%}.el-tabs--card>.el-tabs__header .el-tabs__item{border-bottom:1px solid transparent;border-left:1px solid #E4E7ED;transition:color .3s cubic-bezier(.645,.045,.355,1),padding .3s cubic-bezier(.645,.045,.355,1)}.el-tabs--card>.el-tabs__header .el-tabs__item:first-child{border-left:none}.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover{padding-left:13px;padding-right:13px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover .el-icon-close{width:14px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active{border-bottom-color:#FFF}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable{padding-left:20px;padding-right:20px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable .el-icon-close{width:14px}.el-tabs--border-card{background:#FFF;border:1px solid #DCDFE6;box-shadow:0 2px 4px 0 rgba(0,0,0,.12),0 0 6px 0 rgba(0,0,0,.04)}.el-tabs--border-card>.el-tabs__content{padding:15px}.el-tabs--border-card>.el-tabs__header{background-color:#F5F7FA;border-bottom:1px solid #E4E7ED;margin:0}.el-tabs--border-card>.el-tabs__header .el-tabs__nav-wrap::after{content:none}.el-tabs--border-card>.el-tabs__header .el-tabs__item{transition:all .3s cubic-bezier(.645,.045,.355,1);border:1px solid transparent;margin-top:-1px;color:#909399}.el-tabs--border-card>.el-tabs__header .el-tabs__item+.el-tabs__item,.el-tabs--border-card>.el-tabs__header .el-tabs__item:first-child{margin-left:-1px}.el-col-offset-0,.el-tabs--border-card>.el-tabs__header .is-scrollable .el-tabs__item:first-child{margin-left:0}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active{color:#409EFF;background-color:#FFF;border-right-color:#DCDFE6;border-left-color:#DCDFE6}.el-tabs--border-card>.el-tabs__header .el-tabs__item:not(.is-disabled):hover{color:#409EFF}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-disabled{color:#C0C4CC}.el-tabs--bottom .el-tabs__item.is-bottom:nth-child(2),.el-tabs--bottom .el-tabs__item.is-top:nth-child(2),.el-tabs--top .el-tabs__item.is-bottom:nth-child(2),.el-tabs--top .el-tabs__item.is-top:nth-child(2){padding-left:0}.el-tabs--bottom .el-tabs__item.is-bottom:last-child,.el-tabs--bottom .el-tabs__item.is-top:last-child,.el-tabs--top .el-tabs__item.is-bottom:last-child,.el-tabs--top .el-tabs__item.is-top:last-child{padding-right:0}.el-cascader-menu:last-child .el-cascader-node,.el-tabs--bottom .el-tabs--left>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom .el-tabs--right>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top .el-tabs--left>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top .el-tabs--right>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:last-child{padding-right:20px}.el-tabs--bottom .el-tabs--left>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom .el-tabs--right>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--left>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--right>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2){padding-left:20px}.el-tabs--bottom .el-tabs__header.is-bottom{margin-bottom:0;margin-top:10px}.el-tabs--bottom.el-tabs--border-card .el-tabs__header.is-bottom{border-bottom:0;border-top:1px solid #DCDFE6}.el-tabs--bottom.el-tabs--border-card .el-tabs__nav-wrap.is-bottom{margin-top:-1px;margin-bottom:0}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom:not(.is-active){border:1px solid transparent}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom{margin:0 -1px -1px}.el-tabs--left,.el-tabs--right{overflow:hidden}.el-tabs--left .el-tabs__header.is-left,.el-tabs--left .el-tabs__header.is-right,.el-tabs--left .el-tabs__nav-scroll,.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__header.is-left,.el-tabs--right .el-tabs__header.is-right,.el-tabs--right .el-tabs__nav-scroll,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{height:100%}.el-tabs--left .el-tabs__active-bar.is-left,.el-tabs--left .el-tabs__active-bar.is-right,.el-tabs--right .el-tabs__active-bar.is-left,.el-tabs--right .el-tabs__active-bar.is-right{top:0;bottom:auto;width:2px;height:auto}.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{margin-bottom:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{height:30px;line-height:30px;width:100%;text-align:center;cursor:pointer}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i{transform:rotateZ(90deg)}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{left:auto;top:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next{right:auto;bottom:0}.el-tabs--left .el-tabs__active-bar.is-left,.el-tabs--left .el-tabs__nav-wrap.is-left::after{right:0;left:auto}.el-tabs--left .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--left .el-tabs__nav-wrap.is-right.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-right.is-scrollable{padding:30px 0}.el-tabs--left .el-tabs__nav-wrap.is-left::after,.el-tabs--left .el-tabs__nav-wrap.is-right::after,.el-tabs--right .el-tabs__nav-wrap.is-left::after,.el-tabs--right .el-tabs__nav-wrap.is-right::after{height:100%;width:2px;bottom:auto;top:0}.el-tabs--left .el-tabs__nav.is-left,.el-tabs--left .el-tabs__nav.is-right,.el-tabs--right .el-tabs__nav.is-left,.el-tabs--right .el-tabs__nav.is-right{float:none}.el-tabs--left .el-tabs__item.is-left,.el-tabs--left .el-tabs__item.is-right,.el-tabs--right .el-tabs__item.is-left,.el-tabs--right .el-tabs__item.is-right{display:block}.el-tabs--left .el-tabs__header.is-left{float:left;margin-bottom:0;margin-right:10px}.el-button-group>.el-button:not(:last-child),.el-tabs--left .el-tabs__nav-wrap.is-left{margin-right:-1px}.el-tabs--left .el-tabs__item.is-left{text-align:right}.el-tabs--left.el-tabs--card .el-tabs__item.is-left{border-left:none;border-right:1px solid #E4E7ED;border-bottom:none;border-top:1px solid #E4E7ED;text-align:left}.el-tabs--left.el-tabs--card .el-tabs__item.is-left:first-child{border-right:1px solid #E4E7ED;border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active{border:1px solid #E4E7ED;border-right-color:#fff;border-left:none;border-bottom:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:first-child{border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:last-child{border-bottom:none}.el-tabs--left.el-tabs--card .el-tabs__nav{border-radius:4px 0 0 4px;border-bottom:1px solid #E4E7ED;border-right:none}.el-tabs--left.el-tabs--card .el-tabs__new-tab{float:none}.el-tabs--left.el-tabs--border-card .el-tabs__header.is-left{border-right:1px solid #dfe4ed}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left{border:1px solid transparent;margin:-1px 0 -1px -1px}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left.is-active{border-color:#d1dbe5 transparent}.el-tabs--right .el-tabs__header.is-right{float:right;margin-bottom:0;margin-left:10px}.el-tabs--right .el-tabs__nav-wrap.is-right{margin-left:-1px}.el-tabs--right .el-tabs__nav-wrap.is-right::after{left:0;right:auto}.el-tabs--right .el-tabs__active-bar.is-right{left:0}.el-tabs--right.el-tabs--card .el-tabs__item.is-right{border-bottom:none;border-top:1px solid #E4E7ED}.el-tabs--right.el-tabs--card .el-tabs__item.is-right:first-child{border-left:1px solid #E4E7ED;border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active{border:1px solid #E4E7ED;border-left-color:#fff;border-right:none;border-bottom:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:first-child{border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:last-child{border-bottom:none}.el-tabs--right.el-tabs--card .el-tabs__nav{border-radius:0 4px 4px 0;border-bottom:1px solid #E4E7ED;border-left:none}.el-tabs--right.el-tabs--border-card .el-tabs__header.is-right{border-left:1px solid #dfe4ed}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right{border:1px solid transparent;margin:-1px -1px -1px 0}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right.is-active{border-color:#d1dbe5 transparent}.slideInLeft-transition,.slideInRight-transition{display:inline-block}.slideInRight-enter{animation:slideInRight-enter .3s}.slideInRight-leave{position:absolute;left:0;right:0;animation:slideInRight-leave .3s}.slideInLeft-enter{animation:slideInLeft-enter .3s}.slideInLeft-leave{position:absolute;left:0;right:0;animation:slideInLeft-leave .3s}@keyframes slideInRight-enter{0%{opacity:0;transform-origin:0 0;transform:translateX(100%)}to{opacity:1;transform-origin:0 0;transform:translateX(0)}}@keyframes slideInRight-leave{0%{transform-origin:0 0;transform:translateX(0);opacity:1}100%{transform-origin:0 0;transform:translateX(100%);opacity:0}}@keyframes slideInLeft-enter{0%{opacity:0;transform-origin:0 0;transform:translateX(-100%)}to{opacity:1;transform-origin:0 0;transform:translateX(0)}}@keyframes slideInLeft-leave{0%{transform-origin:0 0;transform:translateX(0);opacity:1}100%{transform-origin:0 0;transform:translateX(-100%);opacity:0}}.el-tree{position:relative;cursor:default;background:#FFF;color:#606266}.el-tree__empty-block{position:relative;min-height:60px;text-align:center;width:100%;height:100%}.el-tree__empty-text{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);color:#909399;font-size:14px}.el-tree__drop-indicator{position:absolute;left:0;right:0;height:1px;background-color:#409EFF}.el-tree-node{white-space:nowrap;outline:0}.el-tree-node:focus>.el-tree-node__content{background-color:#F5F7FA}.el-tree-node.is-drop-inner>.el-tree-node__content .el-tree-node__label{background-color:#409EFF;color:#fff}.el-tree-node__content:hover,.el-upload-list__item:hover{background-color:#F5F7FA}.el-tree-node__content{display:flex;align-items:center;height:26px;cursor:pointer}.el-tree-node__content>.el-tree-node__expand-icon{padding:6px}.el-tree-node__content>label.el-checkbox{margin-right:8px}.el-tree.is-dragging .el-tree-node__content{cursor:move}.el-tree.is-dragging .el-tree-node__content *{pointer-events:none}.el-tree.is-dragging.is-drop-not-allow .el-tree-node__content{cursor:not-allowed}.el-tree-node__expand-icon{cursor:pointer;color:#C0C4CC;font-size:12px;transform:rotate(0);transition:transform .3s ease-in-out}.el-tree-node__expand-icon.expanded{transform:rotate(90deg)}.el-tree-node__expand-icon.is-leaf{color:transparent;cursor:default}.el-tree-node__label{font-size:14px}.el-tree-node__loading-icon{margin-right:8px;font-size:14px;color:#C0C4CC}.el-tree-node>.el-tree-node__children{overflow:hidden;background-color:transparent}.el-tree-node.is-expanded>.el-tree-node__children{display:block}.el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content{background-color:#f0f7ff}.el-alert{width:100%;padding:8px 16px;margin:0;box-sizing:border-box;border-radius:4px;position:relative;background-color:#FFF;overflow:hidden;opacity:1;display:flex;align-items:center;transition:opacity .2s}.el-alert.is-light .el-alert__closebtn{color:#C0C4CC}.el-alert.is-dark .el-alert__closebtn,.el-alert.is-dark .el-alert__description{color:#FFF}.el-alert.is-center{justify-content:center}.el-alert--success.is-light{background-color:#f0f9eb;color:#67C23A}.el-alert--success.is-light .el-alert__description{color:#67C23A}.el-alert--success.is-dark{background-color:#67C23A;color:#FFF}.el-alert--info.is-light{background-color:#f4f4f5;color:#909399}.el-alert--info.is-dark{background-color:#909399;color:#FFF}.el-alert--info .el-alert__description{color:#909399}.el-alert--warning.is-light{background-color:#fdf6ec;color:#E6A23C}.el-alert--warning.is-light .el-alert__description{color:#E6A23C}.el-alert--warning.is-dark{background-color:#E6A23C;color:#FFF}.el-alert--error.is-light{background-color:#fef0f0;color:#F56C6C}.el-alert--error.is-light .el-alert__description{color:#F56C6C}.el-alert--error.is-dark{background-color:#F56C6C;color:#FFF}.el-alert__content{display:table-cell;padding:0 8px}.el-alert__icon{font-size:16px;width:16px}.el-alert__icon.is-big{font-size:28px;width:28px}.el-alert__title{font-size:13px;line-height:18px}.el-alert__title.is-bold{font-weight:700}.el-alert .el-alert__description{font-size:12px;margin:5px 0 0}.el-alert__closebtn{font-size:12px;opacity:1;position:absolute;top:12px;right:15px;cursor:pointer}.el-alert-fade-enter,.el-alert-fade-leave-active,.el-loading-fade-enter,.el-loading-fade-leave-active,.el-notification-fade-leave-active,.el-upload iframe{opacity:0}.el-carousel__arrow--right,.el-notification.right{right:16px}.el-alert__closebtn.is-customed{font-style:normal;font-size:13px;top:9px}.el-notification{display:flex;width:330px;padding:14px 26px 14px 13px;border-radius:8px;box-sizing:border-box;border:1px solid #EBEEF5;position:fixed;background-color:#FFF;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);transition:opacity .3s,transform .3s,left .3s,right .3s,top .4s,bottom .3s;overflow:hidden}.el-notification.left{left:16px}.el-notification__group{margin-left:13px;margin-right:8px}.el-notification__title{font-weight:700;font-size:16px;color:#303133;margin:0}.el-notification__content{font-size:14px;line-height:21px;margin:6px 0 0;color:#606266;text-align:justify}.el-notification__content p{margin:0}.el-notification__icon{height:24px;width:24px;font-size:24px}.el-notification__closeBtn{position:absolute;top:18px;right:15px;cursor:pointer;color:#909399;font-size:16px}.el-notification__closeBtn:hover{color:#606266}.el-notification .el-icon-success{color:#67C23A}.el-notification .el-icon-error{color:#F56C6C}.el-notification .el-icon-info{color:#909399}.el-notification .el-icon-warning{color:#E6A23C}.el-notification-fade-enter.right{right:0;transform:translateX(100%)}.el-notification-fade-enter.left{left:0;transform:translateX(-100%)}.el-input-number{position:relative;display:inline-block;width:180px;line-height:38px}.el-input-number .el-input{display:block}.el-input-number .el-input__inner{-webkit-appearance:none;padding-left:50px;padding-right:50px;text-align:center}.el-input-number__decrease,.el-input-number__increase{position:absolute;z-index:1;top:1px;width:40px;height:auto;text-align:center;background:#F5F7FA;color:#606266;cursor:pointer;font-size:13px}.el-input-number__decrease:hover,.el-input-number__increase:hover{color:#409EFF}.el-input-number__decrease:hover:not(.is-disabled)~.el-input .el-input__inner:not(.is-disabled),.el-input-number__increase:hover:not(.is-disabled)~.el-input .el-input__inner:not(.is-disabled){border-color:#409EFF}.el-input-number__decrease.is-disabled,.el-input-number__increase.is-disabled{color:#C0C4CC;cursor:not-allowed}.el-input-number__increase{right:1px;border-radius:0 4px 4px 0;border-left:1px solid #DCDFE6}.el-input-number__decrease{left:1px;border-radius:4px 0 0 4px;border-right:1px solid #DCDFE6}.el-input-number.is-disabled .el-input-number__decrease,.el-input-number.is-disabled .el-input-number__increase{border-color:#E4E7ED;color:#E4E7ED}.el-input-number.is-disabled .el-input-number__decrease:hover,.el-input-number.is-disabled .el-input-number__increase:hover{color:#E4E7ED;cursor:not-allowed}.el-input-number--medium{width:200px;line-height:34px}.el-input-number--medium .el-input-number__decrease,.el-input-number--medium .el-input-number__increase{width:36px;font-size:14px}.el-input-number--medium .el-input__inner{padding-left:43px;padding-right:43px}.el-input-number--small{width:130px;line-height:30px}.el-input-number--small .el-input-number__decrease,.el-input-number--small .el-input-number__increase{width:32px;font-size:13px}.el-input-number--small .el-input-number__decrease [class*=el-icon],.el-input-number--small .el-input-number__increase [class*=el-icon]{transform:scale(.9)}.el-input-number--small .el-input__inner{padding-left:39px;padding-right:39px}.el-input-number--mini{width:130px;line-height:26px}.el-input-number--mini .el-input-number__decrease,.el-input-number--mini .el-input-number__increase{width:28px;font-size:12px}.el-input-number--mini .el-input-number__decrease [class*=el-icon],.el-input-number--mini .el-input-number__increase [class*=el-icon]{transform:scale(.8)}.el-input-number--mini .el-input__inner{padding-left:35px;padding-right:35px}.el-input-number.is-without-controls .el-input__inner{padding-left:15px;padding-right:15px}.el-input-number.is-controls-right .el-input__inner{padding-left:15px;padding-right:50px}.el-input-number.is-controls-right .el-input-number__decrease,.el-input-number.is-controls-right .el-input-number__increase{height:auto;line-height:19px}.el-input-number.is-controls-right .el-input-number__decrease [class*=el-icon],.el-input-number.is-controls-right .el-input-number__increase [class*=el-icon]{transform:scale(.8)}.el-input-number.is-controls-right .el-input-number__increase{border-radius:0 4px 0 0;border-bottom:1px solid #DCDFE6}.el-input-number.is-controls-right .el-input-number__decrease{right:1px;bottom:1px;top:auto;left:auto;border-right:none;border-left:1px solid #DCDFE6;border-radius:0 0 4px}.el-input-number.is-controls-right[class*=medium] [class*=decrease],.el-input-number.is-controls-right[class*=medium] [class*=increase]{line-height:17px}.el-input-number.is-controls-right[class*=small] [class*=decrease],.el-input-number.is-controls-right[class*=small] [class*=increase]{line-height:15px}.el-input-number.is-controls-right[class*=mini] [class*=decrease],.el-input-number.is-controls-right[class*=mini] [class*=increase]{line-height:13px}.el-tooltip:focus:hover,.el-tooltip:focus:not(.focusing){outline-width:0}.el-tooltip__popper{position:absolute;border-radius:4px;padding:10px;z-index:2000;font-size:12px;line-height:1.2;min-width:10px;word-wrap:break-word}.el-tooltip__popper .popper__arrow,.el-tooltip__popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-tooltip__popper .popper__arrow{border-width:6px}.el-tooltip__popper .popper__arrow::after{content:\\\" \\\";border-width:5px}.el-button-group::after,.el-button-group::before,.el-color-dropdown__main-wrapper::after,.el-link.is-underline:hover:after,.el-page-header__left::after,.el-progress-bar__inner::after,.el-row::after,.el-row::before,.el-slider::after,.el-slider::before,.el-slider__button-wrapper::after,.el-transfer-panel .el-transfer-panel__footer::after,.el-upload-cover::after,.el-upload-list--picture-card .el-upload-list__item-actions::after{content:\\\"\\\"}.el-tooltip__popper[x-placement^=top]{margin-bottom:12px}.el-tooltip__popper[x-placement^=top] .popper__arrow{bottom:-6px;border-top-color:#303133;border-bottom-width:0}.el-tooltip__popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-5px;border-top-color:#303133;border-bottom-width:0}.el-tooltip__popper[x-placement^=bottom]{margin-top:12px}.el-tooltip__popper[x-placement^=bottom] .popper__arrow{top:-6px;border-top-width:0;border-bottom-color:#303133}.el-tooltip__popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-5px;border-top-width:0;border-bottom-color:#303133}.el-tooltip__popper[x-placement^=right]{margin-left:12px}.el-tooltip__popper[x-placement^=right] .popper__arrow{left:-6px;border-right-color:#303133;border-left-width:0}.el-tooltip__popper[x-placement^=right] .popper__arrow::after{bottom:-5px;left:1px;border-right-color:#303133;border-left-width:0}.el-tooltip__popper[x-placement^=left]{margin-right:12px}.el-tooltip__popper[x-placement^=left] .popper__arrow{right:-6px;border-right-width:0;border-left-color:#303133}.el-tooltip__popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-5px;margin-left:-5px;border-right-width:0;border-left-color:#303133}.el-tooltip__popper.is-dark{background:#303133;color:#FFF}.el-tooltip__popper.is-light{background:#FFF;border:1px solid #303133}.el-tooltip__popper.is-light[x-placement^=top] .popper__arrow{border-top-color:#303133}.el-tooltip__popper.is-light[x-placement^=top] .popper__arrow::after{border-top-color:#FFF}.el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow{border-bottom-color:#303133}.el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow::after{border-bottom-color:#FFF}.el-tooltip__popper.is-light[x-placement^=left] .popper__arrow{border-left-color:#303133}.el-tooltip__popper.is-light[x-placement^=left] .popper__arrow::after{border-left-color:#FFF}.el-tooltip__popper.is-light[x-placement^=right] .popper__arrow{border-right-color:#303133}.el-tooltip__popper.is-light[x-placement^=right] .popper__arrow::after{border-right-color:#FFF}.el-slider::after,.el-slider::before{display:table}.el-slider__button-wrapper .el-tooltip,.el-slider__button-wrapper::after{display:inline-block;vertical-align:middle}.el-slider::after{clear:both}.el-slider__runway{width:100%;height:6px;margin:16px 0;background-color:#E4E7ED;border-radius:3px;position:relative;cursor:pointer;vertical-align:middle}.el-slider__runway.show-input{margin-right:160px;width:auto}.el-slider__runway.disabled{cursor:default}.el-slider__runway.disabled .el-slider__bar{background-color:#C0C4CC}.el-slider__runway.disabled .el-slider__button{border-color:#C0C4CC}.el-slider__runway.disabled .el-slider__button-wrapper.dragging,.el-slider__runway.disabled .el-slider__button-wrapper.hover,.el-slider__runway.disabled .el-slider__button-wrapper:hover{cursor:not-allowed}.el-slider__runway.disabled .el-slider__button.dragging,.el-slider__runway.disabled .el-slider__button.hover,.el-slider__runway.disabled .el-slider__button:hover{transform:scale(1);cursor:not-allowed}.el-slider__button-wrapper,.el-slider__stop{-webkit-transform:translateX(-50%);position:absolute}.el-slider__input{float:right;margin-top:3px;width:130px}.el-slider__input.el-input-number--mini{margin-top:5px}.el-slider__input.el-input-number--medium{margin-top:0}.el-slider__input.el-input-number--large{margin-top:-2px}.el-slider__bar{height:6px;background-color:#409EFF;border-top-left-radius:3px;border-bottom-left-radius:3px;position:absolute}.el-slider__button-wrapper{height:36px;width:36px;z-index:1001;top:-15px;transform:translateX(-50%);background-color:transparent;text-align:center;-webkit-user-select:none;-moz-user-select:none;user-select:none;line-height:normal}.el-image-viewer__btn,.el-slider__button,.el-step__icon-inner{-moz-user-select:none;-ms-user-select:none}.el-slider__button-wrapper::after{height:100%}.el-slider__button-wrapper.hover,.el-slider__button-wrapper:hover{cursor:grab}.el-slider__button-wrapper.dragging{cursor:grabbing}.el-slider__button{width:16px;height:16px;border:2px solid #409EFF;background-color:#FFF;border-radius:50%;transition:.2s;-webkit-user-select:none;-moz-user-select:none;user-select:none}.el-slider__button.dragging,.el-slider__button.hover,.el-slider__button:hover{transform:scale(1.2)}.el-slider__button.hover,.el-slider__button:hover{cursor:grab}.el-slider__button.dragging{cursor:grabbing}.el-slider__stop{height:6px;width:6px;border-radius:100%;background-color:#FFF;transform:translateX(-50%)}.el-slider__marks{top:0;left:12px;width:18px;height:100%}.el-slider__marks-text{position:absolute;transform:translateX(-50%);font-size:14px;color:#909399;margin-top:15px}.el-slider.is-vertical{position:relative}.el-slider.is-vertical .el-slider__runway{width:6px;height:100%;margin:0 16px}.el-slider.is-vertical .el-slider__bar{width:6px;height:auto;border-radius:0 0 3px 3px}.el-slider.is-vertical .el-slider__button-wrapper{top:auto;left:-15px;transform:translateY(50%)}.el-slider.is-vertical .el-slider__stop{transform:translateY(50%)}.el-slider.is-vertical.el-slider--with-input{padding-bottom:58px}.el-slider.is-vertical.el-slider--with-input .el-slider__input{overflow:visible;float:none;position:absolute;bottom:22px;width:36px;margin-top:15px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input__inner{text-align:center;padding-left:5px;padding-right:5px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__decrease,.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase{top:32px;margin-top:-1px;border:1px solid #DCDFE6;line-height:20px;box-sizing:border-box;transition:border-color .2s cubic-bezier(.645,.045,.355,1)}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__decrease{width:18px;right:18px;border-bottom-left-radius:4px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase{width:19px;border-bottom-right-radius:4px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase~.el-input .el-input__inner{border-bottom-left-radius:0;border-bottom-right-radius:0}.el-slider.is-vertical.el-slider--with-input .el-slider__input:hover .el-input-number__decrease,.el-slider.is-vertical.el-slider--with-input .el-slider__input:hover .el-input-number__increase{border-color:#C0C4CC}.el-slider.is-vertical.el-slider--with-input .el-slider__input:active .el-input-number__decrease,.el-slider.is-vertical.el-slider--with-input .el-slider__input:active .el-input-number__increase{border-color:#409EFF}.el-slider.is-vertical .el-slider__marks-text{margin-top:0;left:15px;transform:translateY(50%)}.el-loading-parent--relative{position:relative!important}.el-loading-parent--hidden{overflow:hidden!important}.el-loading-mask{position:absolute;z-index:2000;background-color:rgba(255,255,255,.9);margin:0;top:0;right:0;bottom:0;left:0;transition:opacity .3s}.el-loading-mask.is-fullscreen{position:fixed}.el-loading-mask.is-fullscreen .el-loading-spinner{margin-top:-25px}.el-loading-mask.is-fullscreen .el-loading-spinner .circular{height:50px;width:50px}.el-loading-spinner{top:50%;margin-top:-21px;width:100%;text-align:center;position:absolute}.el-col-pull-0,.el-col-pull-1,.el-col-pull-10,.el-col-pull-11,.el-col-pull-12,.el-col-pull-13,.el-col-pull-14,.el-col-pull-15,.el-col-pull-16,.el-col-pull-17,.el-col-pull-18,.el-col-pull-19,.el-col-pull-2,.el-col-pull-20,.el-col-pull-21,.el-col-pull-22,.el-col-pull-23,.el-col-pull-24,.el-col-pull-3,.el-col-pull-4,.el-col-pull-5,.el-col-pull-6,.el-col-pull-7,.el-col-pull-8,.el-col-pull-9,.el-col-push-0,.el-col-push-1,.el-col-push-10,.el-col-push-11,.el-col-push-12,.el-col-push-13,.el-col-push-14,.el-col-push-15,.el-col-push-16,.el-col-push-17,.el-col-push-18,.el-col-push-19,.el-col-push-2,.el-col-push-20,.el-col-push-21,.el-col-push-22,.el-col-push-23,.el-col-push-24,.el-col-push-3,.el-col-push-4,.el-col-push-5,.el-col-push-6,.el-col-push-7,.el-col-push-8,.el-col-push-9,.el-row,.el-upload-dragger,.el-upload-list__item{position:relative}.el-loading-spinner .el-loading-text{color:#409EFF;margin:3px 0;font-size:14px}.el-loading-spinner .circular{height:42px;width:42px;animation:loading-rotate 2s linear infinite}.el-loading-spinner .path{animation:loading-dash 1.5s ease-in-out infinite;stroke-dasharray:90,150;stroke-dashoffset:0;stroke-width:2;stroke:#409EFF;stroke-linecap:round}.el-loading-spinner i{color:#409EFF}@keyframes loading-rotate{100%{transform:rotate(360deg)}}@keyframes loading-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-40px}100%{stroke-dasharray:90,150;stroke-dashoffset:-120px}}.el-row{box-sizing:border-box}.el-row::after,.el-row::before{display:table}.el-row::after{clear:both}.el-row--flex{display:flex}.el-col-0,.el-row--flex:after,.el-row--flex:before{display:none}.el-row--flex.is-justify-center{justify-content:center}.el-row--flex.is-justify-end{justify-content:flex-end}.el-row--flex.is-justify-space-between{justify-content:space-between}.el-row--flex.is-justify-space-around{justify-content:space-around}.el-row--flex.is-align-top{align-items:flex-start}.el-row--flex.is-align-middle{align-items:center}.el-row--flex.is-align-bottom{align-items:flex-end}[class*=el-col-]{float:left;box-sizing:border-box}.el-col-0{width:0%}.el-col-pull-0{right:0}.el-col-push-0{left:0}.el-col-1{width:4.16667%}.el-col-offset-1{margin-left:4.16667%}.el-col-pull-1{right:4.16667%}.el-col-push-1{left:4.16667%}.el-col-2{width:8.33333%}.el-col-offset-2{margin-left:8.33333%}.el-col-pull-2{right:8.33333%}.el-col-push-2{left:8.33333%}.el-col-3{width:12.5%}.el-col-offset-3{margin-left:12.5%}.el-col-pull-3{right:12.5%}.el-col-push-3{left:12.5%}.el-col-4{width:16.66667%}.el-col-offset-4{margin-left:16.66667%}.el-col-pull-4{right:16.66667%}.el-col-push-4{left:16.66667%}.el-col-5{width:20.83333%}.el-col-offset-5{margin-left:20.83333%}.el-col-pull-5{right:20.83333%}.el-col-push-5{left:20.83333%}.el-col-6{width:25%}.el-col-offset-6{margin-left:25%}.el-col-pull-6{right:25%}.el-col-push-6{left:25%}.el-col-7{width:29.16667%}.el-col-offset-7{margin-left:29.16667%}.el-col-pull-7{right:29.16667%}.el-col-push-7{left:29.16667%}.el-col-8{width:33.33333%}.el-col-offset-8{margin-left:33.33333%}.el-col-pull-8{right:33.33333%}.el-col-push-8{left:33.33333%}.el-col-9{width:37.5%}.el-col-offset-9{margin-left:37.5%}.el-col-pull-9{right:37.5%}.el-col-push-9{left:37.5%}.el-col-10{width:41.66667%}.el-col-offset-10{margin-left:41.66667%}.el-col-pull-10{right:41.66667%}.el-col-push-10{left:41.66667%}.el-col-11{width:45.83333%}.el-col-offset-11{margin-left:45.83333%}.el-col-pull-11{right:45.83333%}.el-col-push-11{left:45.83333%}.el-col-12{width:50%}.el-col-offset-12{margin-left:50%}.el-col-pull-12{right:50%}.el-col-push-12{left:50%}.el-col-13{width:54.16667%}.el-col-offset-13{margin-left:54.16667%}.el-col-pull-13{right:54.16667%}.el-col-push-13{left:54.16667%}.el-col-14{width:58.33333%}.el-col-offset-14{margin-left:58.33333%}.el-col-pull-14{right:58.33333%}.el-col-push-14{left:58.33333%}.el-col-15{width:62.5%}.el-col-offset-15{margin-left:62.5%}.el-col-pull-15{right:62.5%}.el-col-push-15{left:62.5%}.el-col-16{width:66.66667%}.el-col-offset-16{margin-left:66.66667%}.el-col-pull-16{right:66.66667%}.el-col-push-16{left:66.66667%}.el-col-17{width:70.83333%}.el-col-offset-17{margin-left:70.83333%}.el-col-pull-17{right:70.83333%}.el-col-push-17{left:70.83333%}.el-col-18{width:75%}.el-col-offset-18{margin-left:75%}.el-col-pull-18{right:75%}.el-col-push-18{left:75%}.el-col-19{width:79.16667%}.el-col-offset-19{margin-left:79.16667%}.el-col-pull-19{right:79.16667%}.el-col-push-19{left:79.16667%}.el-col-20{width:83.33333%}.el-col-offset-20{margin-left:83.33333%}.el-col-pull-20{right:83.33333%}.el-col-push-20{left:83.33333%}.el-col-21{width:87.5%}.el-col-offset-21{margin-left:87.5%}.el-col-pull-21{right:87.5%}.el-col-push-21{left:87.5%}.el-col-22{width:91.66667%}.el-col-offset-22{margin-left:91.66667%}.el-col-pull-22{right:91.66667%}.el-col-push-22{left:91.66667%}.el-col-23{width:95.83333%}.el-col-offset-23{margin-left:95.83333%}.el-col-pull-23{right:95.83333%}.el-col-push-23{left:95.83333%}.el-col-24{width:100%}.el-col-offset-24{margin-left:100%}.el-col-pull-24{right:100%}.el-col-push-24{left:100%}@media only screen and (max-width:767px){.el-col-xs-0{display:none;width:0%}.el-col-xs-offset-0{margin-left:0}.el-col-xs-pull-0{position:relative;right:0}.el-col-xs-push-0{position:relative;left:0}.el-col-xs-1{width:4.16667%}.el-col-xs-offset-1{margin-left:4.16667%}.el-col-xs-pull-1{position:relative;right:4.16667%}.el-col-xs-push-1{position:relative;left:4.16667%}.el-col-xs-2{width:8.33333%}.el-col-xs-offset-2{margin-left:8.33333%}.el-col-xs-pull-2{position:relative;right:8.33333%}.el-col-xs-push-2{position:relative;left:8.33333%}.el-col-xs-3{width:12.5%}.el-col-xs-offset-3{margin-left:12.5%}.el-col-xs-pull-3{position:relative;right:12.5%}.el-col-xs-push-3{position:relative;left:12.5%}.el-col-xs-4{width:16.66667%}.el-col-xs-offset-4{margin-left:16.66667%}.el-col-xs-pull-4{position:relative;right:16.66667%}.el-col-xs-push-4{position:relative;left:16.66667%}.el-col-xs-5{width:20.83333%}.el-col-xs-offset-5{margin-left:20.83333%}.el-col-xs-pull-5{position:relative;right:20.83333%}.el-col-xs-push-5{position:relative;left:20.83333%}.el-col-xs-6{width:25%}.el-col-xs-offset-6{margin-left:25%}.el-col-xs-pull-6{position:relative;right:25%}.el-col-xs-push-6{position:relative;left:25%}.el-col-xs-7{width:29.16667%}.el-col-xs-offset-7{margin-left:29.16667%}.el-col-xs-pull-7{position:relative;right:29.16667%}.el-col-xs-push-7{position:relative;left:29.16667%}.el-col-xs-8{width:33.33333%}.el-col-xs-offset-8{margin-left:33.33333%}.el-col-xs-pull-8{position:relative;right:33.33333%}.el-col-xs-push-8{position:relative;left:33.33333%}.el-col-xs-9{width:37.5%}.el-col-xs-offset-9{margin-left:37.5%}.el-col-xs-pull-9{position:relative;right:37.5%}.el-col-xs-push-9{position:relative;left:37.5%}.el-col-xs-10{width:41.66667%}.el-col-xs-offset-10{margin-left:41.66667%}.el-col-xs-pull-10{position:relative;right:41.66667%}.el-col-xs-push-10{position:relative;left:41.66667%}.el-col-xs-11{width:45.83333%}.el-col-xs-offset-11{margin-left:45.83333%}.el-col-xs-pull-11{position:relative;right:45.83333%}.el-col-xs-push-11{position:relative;left:45.83333%}.el-col-xs-12{width:50%}.el-col-xs-offset-12{margin-left:50%}.el-col-xs-pull-12{position:relative;right:50%}.el-col-xs-push-12{position:relative;left:50%}.el-col-xs-13{width:54.16667%}.el-col-xs-offset-13{margin-left:54.16667%}.el-col-xs-pull-13{position:relative;right:54.16667%}.el-col-xs-push-13{position:relative;left:54.16667%}.el-col-xs-14{width:58.33333%}.el-col-xs-offset-14{margin-left:58.33333%}.el-col-xs-pull-14{position:relative;right:58.33333%}.el-col-xs-push-14{position:relative;left:58.33333%}.el-col-xs-15{width:62.5%}.el-col-xs-offset-15{margin-left:62.5%}.el-col-xs-pull-15{position:relative;right:62.5%}.el-col-xs-push-15{position:relative;left:62.5%}.el-col-xs-16{width:66.66667%}.el-col-xs-offset-16{margin-left:66.66667%}.el-col-xs-pull-16{position:relative;right:66.66667%}.el-col-xs-push-16{position:relative;left:66.66667%}.el-col-xs-17{width:70.83333%}.el-col-xs-offset-17{margin-left:70.83333%}.el-col-xs-pull-17{position:relative;right:70.83333%}.el-col-xs-push-17{position:relative;left:70.83333%}.el-col-xs-18{width:75%}.el-col-xs-offset-18{margin-left:75%}.el-col-xs-pull-18{position:relative;right:75%}.el-col-xs-push-18{position:relative;left:75%}.el-col-xs-19{width:79.16667%}.el-col-xs-offset-19{margin-left:79.16667%}.el-col-xs-pull-19{position:relative;right:79.16667%}.el-col-xs-push-19{position:relative;left:79.16667%}.el-col-xs-20{width:83.33333%}.el-col-xs-offset-20{margin-left:83.33333%}.el-col-xs-pull-20{position:relative;right:83.33333%}.el-col-xs-push-20{position:relative;left:83.33333%}.el-col-xs-21{width:87.5%}.el-col-xs-offset-21{margin-left:87.5%}.el-col-xs-pull-21{position:relative;right:87.5%}.el-col-xs-push-21{position:relative;left:87.5%}.el-col-xs-22{width:91.66667%}.el-col-xs-offset-22{margin-left:91.66667%}.el-col-xs-pull-22{position:relative;right:91.66667%}.el-col-xs-push-22{position:relative;left:91.66667%}.el-col-xs-23{width:95.83333%}.el-col-xs-offset-23{margin-left:95.83333%}.el-col-xs-pull-23{position:relative;right:95.83333%}.el-col-xs-push-23{position:relative;left:95.83333%}.el-col-xs-24{width:100%}.el-col-xs-offset-24{margin-left:100%}.el-col-xs-pull-24{position:relative;right:100%}.el-col-xs-push-24{position:relative;left:100%}}@media only screen and (min-width:768px){.el-col-sm-0{display:none;width:0%}.el-col-sm-offset-0{margin-left:0}.el-col-sm-pull-0{position:relative;right:0}.el-col-sm-push-0{position:relative;left:0}.el-col-sm-1{width:4.16667%}.el-col-sm-offset-1{margin-left:4.16667%}.el-col-sm-pull-1{position:relative;right:4.16667%}.el-col-sm-push-1{position:relative;left:4.16667%}.el-col-sm-2{width:8.33333%}.el-col-sm-offset-2{margin-left:8.33333%}.el-col-sm-pull-2{position:relative;right:8.33333%}.el-col-sm-push-2{position:relative;left:8.33333%}.el-col-sm-3{width:12.5%}.el-col-sm-offset-3{margin-left:12.5%}.el-col-sm-pull-3{position:relative;right:12.5%}.el-col-sm-push-3{position:relative;left:12.5%}.el-col-sm-4{width:16.66667%}.el-col-sm-offset-4{margin-left:16.66667%}.el-col-sm-pull-4{position:relative;right:16.66667%}.el-col-sm-push-4{position:relative;left:16.66667%}.el-col-sm-5{width:20.83333%}.el-col-sm-offset-5{margin-left:20.83333%}.el-col-sm-pull-5{position:relative;right:20.83333%}.el-col-sm-push-5{position:relative;left:20.83333%}.el-col-sm-6{width:25%}.el-col-sm-offset-6{margin-left:25%}.el-col-sm-pull-6{position:relative;right:25%}.el-col-sm-push-6{position:relative;left:25%}.el-col-sm-7{width:29.16667%}.el-col-sm-offset-7{margin-left:29.16667%}.el-col-sm-pull-7{position:relative;right:29.16667%}.el-col-sm-push-7{position:relative;left:29.16667%}.el-col-sm-8{width:33.33333%}.el-col-sm-offset-8{margin-left:33.33333%}.el-col-sm-pull-8{position:relative;right:33.33333%}.el-col-sm-push-8{position:relative;left:33.33333%}.el-col-sm-9{width:37.5%}.el-col-sm-offset-9{margin-left:37.5%}.el-col-sm-pull-9{position:relative;right:37.5%}.el-col-sm-push-9{position:relative;left:37.5%}.el-col-sm-10{width:41.66667%}.el-col-sm-offset-10{margin-left:41.66667%}.el-col-sm-pull-10{position:relative;right:41.66667%}.el-col-sm-push-10{position:relative;left:41.66667%}.el-col-sm-11{width:45.83333%}.el-col-sm-offset-11{margin-left:45.83333%}.el-col-sm-pull-11{position:relative;right:45.83333%}.el-col-sm-push-11{position:relative;left:45.83333%}.el-col-sm-12{width:50%}.el-col-sm-offset-12{margin-left:50%}.el-col-sm-pull-12{position:relative;right:50%}.el-col-sm-push-12{position:relative;left:50%}.el-col-sm-13{width:54.16667%}.el-col-sm-offset-13{margin-left:54.16667%}.el-col-sm-pull-13{position:relative;right:54.16667%}.el-col-sm-push-13{position:relative;left:54.16667%}.el-col-sm-14{width:58.33333%}.el-col-sm-offset-14{margin-left:58.33333%}.el-col-sm-pull-14{position:relative;right:58.33333%}.el-col-sm-push-14{position:relative;left:58.33333%}.el-col-sm-15{width:62.5%}.el-col-sm-offset-15{margin-left:62.5%}.el-col-sm-pull-15{position:relative;right:62.5%}.el-col-sm-push-15{position:relative;left:62.5%}.el-col-sm-16{width:66.66667%}.el-col-sm-offset-16{margin-left:66.66667%}.el-col-sm-pull-16{position:relative;right:66.66667%}.el-col-sm-push-16{position:relative;left:66.66667%}.el-col-sm-17{width:70.83333%}.el-col-sm-offset-17{margin-left:70.83333%}.el-col-sm-pull-17{position:relative;right:70.83333%}.el-col-sm-push-17{position:relative;left:70.83333%}.el-col-sm-18{width:75%}.el-col-sm-offset-18{margin-left:75%}.el-col-sm-pull-18{position:relative;right:75%}.el-col-sm-push-18{position:relative;left:75%}.el-col-sm-19{width:79.16667%}.el-col-sm-offset-19{margin-left:79.16667%}.el-col-sm-pull-19{position:relative;right:79.16667%}.el-col-sm-push-19{position:relative;left:79.16667%}.el-col-sm-20{width:83.33333%}.el-col-sm-offset-20{margin-left:83.33333%}.el-col-sm-pull-20{position:relative;right:83.33333%}.el-col-sm-push-20{position:relative;left:83.33333%}.el-col-sm-21{width:87.5%}.el-col-sm-offset-21{margin-left:87.5%}.el-col-sm-pull-21{position:relative;right:87.5%}.el-col-sm-push-21{position:relative;left:87.5%}.el-col-sm-22{width:91.66667%}.el-col-sm-offset-22{margin-left:91.66667%}.el-col-sm-pull-22{position:relative;right:91.66667%}.el-col-sm-push-22{position:relative;left:91.66667%}.el-col-sm-23{width:95.83333%}.el-col-sm-offset-23{margin-left:95.83333%}.el-col-sm-pull-23{position:relative;right:95.83333%}.el-col-sm-push-23{position:relative;left:95.83333%}.el-col-sm-24{width:100%}.el-col-sm-offset-24{margin-left:100%}.el-col-sm-pull-24{position:relative;right:100%}.el-col-sm-push-24{position:relative;left:100%}}@media only screen and (min-width:992px){.el-col-md-0{display:none;width:0%}.el-col-md-offset-0{margin-left:0}.el-col-md-pull-0{position:relative;right:0}.el-col-md-push-0{position:relative;left:0}.el-col-md-1{width:4.16667%}.el-col-md-offset-1{margin-left:4.16667%}.el-col-md-pull-1{position:relative;right:4.16667%}.el-col-md-push-1{position:relative;left:4.16667%}.el-col-md-2{width:8.33333%}.el-col-md-offset-2{margin-left:8.33333%}.el-col-md-pull-2{position:relative;right:8.33333%}.el-col-md-push-2{position:relative;left:8.33333%}.el-col-md-3{width:12.5%}.el-col-md-offset-3{margin-left:12.5%}.el-col-md-pull-3{position:relative;right:12.5%}.el-col-md-push-3{position:relative;left:12.5%}.el-col-md-4{width:16.66667%}.el-col-md-offset-4{margin-left:16.66667%}.el-col-md-pull-4{position:relative;right:16.66667%}.el-col-md-push-4{position:relative;left:16.66667%}.el-col-md-5{width:20.83333%}.el-col-md-offset-5{margin-left:20.83333%}.el-col-md-pull-5{position:relative;right:20.83333%}.el-col-md-push-5{position:relative;left:20.83333%}.el-col-md-6{width:25%}.el-col-md-offset-6{margin-left:25%}.el-col-md-pull-6{position:relative;right:25%}.el-col-md-push-6{position:relative;left:25%}.el-col-md-7{width:29.16667%}.el-col-md-offset-7{margin-left:29.16667%}.el-col-md-pull-7{position:relative;right:29.16667%}.el-col-md-push-7{position:relative;left:29.16667%}.el-col-md-8{width:33.33333%}.el-col-md-offset-8{margin-left:33.33333%}.el-col-md-pull-8{position:relative;right:33.33333%}.el-col-md-push-8{position:relative;left:33.33333%}.el-col-md-9{width:37.5%}.el-col-md-offset-9{margin-left:37.5%}.el-col-md-pull-9{position:relative;right:37.5%}.el-col-md-push-9{position:relative;left:37.5%}.el-col-md-10{width:41.66667%}.el-col-md-offset-10{margin-left:41.66667%}.el-col-md-pull-10{position:relative;right:41.66667%}.el-col-md-push-10{position:relative;left:41.66667%}.el-col-md-11{width:45.83333%}.el-col-md-offset-11{margin-left:45.83333%}.el-col-md-pull-11{position:relative;right:45.83333%}.el-col-md-push-11{position:relative;left:45.83333%}.el-col-md-12{width:50%}.el-col-md-offset-12{margin-left:50%}.el-col-md-pull-12{position:relative;right:50%}.el-col-md-push-12{position:relative;left:50%}.el-col-md-13{width:54.16667%}.el-col-md-offset-13{margin-left:54.16667%}.el-col-md-pull-13{position:relative;right:54.16667%}.el-col-md-push-13{position:relative;left:54.16667%}.el-col-md-14{width:58.33333%}.el-col-md-offset-14{margin-left:58.33333%}.el-col-md-pull-14{position:relative;right:58.33333%}.el-col-md-push-14{position:relative;left:58.33333%}.el-col-md-15{width:62.5%}.el-col-md-offset-15{margin-left:62.5%}.el-col-md-pull-15{position:relative;right:62.5%}.el-col-md-push-15{position:relative;left:62.5%}.el-col-md-16{width:66.66667%}.el-col-md-offset-16{margin-left:66.66667%}.el-col-md-pull-16{position:relative;right:66.66667%}.el-col-md-push-16{position:relative;left:66.66667%}.el-col-md-17{width:70.83333%}.el-col-md-offset-17{margin-left:70.83333%}.el-col-md-pull-17{position:relative;right:70.83333%}.el-col-md-push-17{position:relative;left:70.83333%}.el-col-md-18{width:75%}.el-col-md-offset-18{margin-left:75%}.el-col-md-pull-18{position:relative;right:75%}.el-col-md-push-18{position:relative;left:75%}.el-col-md-19{width:79.16667%}.el-col-md-offset-19{margin-left:79.16667%}.el-col-md-pull-19{position:relative;right:79.16667%}.el-col-md-push-19{position:relative;left:79.16667%}.el-col-md-20{width:83.33333%}.el-col-md-offset-20{margin-left:83.33333%}.el-col-md-pull-20{position:relative;right:83.33333%}.el-col-md-push-20{position:relative;left:83.33333%}.el-col-md-21{width:87.5%}.el-col-md-offset-21{margin-left:87.5%}.el-col-md-pull-21{position:relative;right:87.5%}.el-col-md-push-21{position:relative;left:87.5%}.el-col-md-22{width:91.66667%}.el-col-md-offset-22{margin-left:91.66667%}.el-col-md-pull-22{position:relative;right:91.66667%}.el-col-md-push-22{position:relative;left:91.66667%}.el-col-md-23{width:95.83333%}.el-col-md-offset-23{margin-left:95.83333%}.el-col-md-pull-23{position:relative;right:95.83333%}.el-col-md-push-23{position:relative;left:95.83333%}.el-col-md-24{width:100%}.el-col-md-offset-24{margin-left:100%}.el-col-md-pull-24{position:relative;right:100%}.el-col-md-push-24{position:relative;left:100%}}@media only screen and (min-width:1200px){.el-col-lg-0{display:none;width:0%}.el-col-lg-offset-0{margin-left:0}.el-col-lg-pull-0{position:relative;right:0}.el-col-lg-push-0{position:relative;left:0}.el-col-lg-1{width:4.16667%}.el-col-lg-offset-1{margin-left:4.16667%}.el-col-lg-pull-1{position:relative;right:4.16667%}.el-col-lg-push-1{position:relative;left:4.16667%}.el-col-lg-2{width:8.33333%}.el-col-lg-offset-2{margin-left:8.33333%}.el-col-lg-pull-2{position:relative;right:8.33333%}.el-col-lg-push-2{position:relative;left:8.33333%}.el-col-lg-3{width:12.5%}.el-col-lg-offset-3{margin-left:12.5%}.el-col-lg-pull-3{position:relative;right:12.5%}.el-col-lg-push-3{position:relative;left:12.5%}.el-col-lg-4{width:16.66667%}.el-col-lg-offset-4{margin-left:16.66667%}.el-col-lg-pull-4{position:relative;right:16.66667%}.el-col-lg-push-4{position:relative;left:16.66667%}.el-col-lg-5{width:20.83333%}.el-col-lg-offset-5{margin-left:20.83333%}.el-col-lg-pull-5{position:relative;right:20.83333%}.el-col-lg-push-5{position:relative;left:20.83333%}.el-col-lg-6{width:25%}.el-col-lg-offset-6{margin-left:25%}.el-col-lg-pull-6{position:relative;right:25%}.el-col-lg-push-6{position:relative;left:25%}.el-col-lg-7{width:29.16667%}.el-col-lg-offset-7{margin-left:29.16667%}.el-col-lg-pull-7{position:relative;right:29.16667%}.el-col-lg-push-7{position:relative;left:29.16667%}.el-col-lg-8{width:33.33333%}.el-col-lg-offset-8{margin-left:33.33333%}.el-col-lg-pull-8{position:relative;right:33.33333%}.el-col-lg-push-8{position:relative;left:33.33333%}.el-col-lg-9{width:37.5%}.el-col-lg-offset-9{margin-left:37.5%}.el-col-lg-pull-9{position:relative;right:37.5%}.el-col-lg-push-9{position:relative;left:37.5%}.el-col-lg-10{width:41.66667%}.el-col-lg-offset-10{margin-left:41.66667%}.el-col-lg-pull-10{position:relative;right:41.66667%}.el-col-lg-push-10{position:relative;left:41.66667%}.el-col-lg-11{width:45.83333%}.el-col-lg-offset-11{margin-left:45.83333%}.el-col-lg-pull-11{position:relative;right:45.83333%}.el-col-lg-push-11{position:relative;left:45.83333%}.el-col-lg-12{width:50%}.el-col-lg-offset-12{margin-left:50%}.el-col-lg-pull-12{position:relative;right:50%}.el-col-lg-push-12{position:relative;left:50%}.el-col-lg-13{width:54.16667%}.el-col-lg-offset-13{margin-left:54.16667%}.el-col-lg-pull-13{position:relative;right:54.16667%}.el-col-lg-push-13{position:relative;left:54.16667%}.el-col-lg-14{width:58.33333%}.el-col-lg-offset-14{margin-left:58.33333%}.el-col-lg-pull-14{position:relative;right:58.33333%}.el-col-lg-push-14{position:relative;left:58.33333%}.el-col-lg-15{width:62.5%}.el-col-lg-offset-15{margin-left:62.5%}.el-col-lg-pull-15{position:relative;right:62.5%}.el-col-lg-push-15{position:relative;left:62.5%}.el-col-lg-16{width:66.66667%}.el-col-lg-offset-16{margin-left:66.66667%}.el-col-lg-pull-16{position:relative;right:66.66667%}.el-col-lg-push-16{position:relative;left:66.66667%}.el-col-lg-17{width:70.83333%}.el-col-lg-offset-17{margin-left:70.83333%}.el-col-lg-pull-17{position:relative;right:70.83333%}.el-col-lg-push-17{position:relative;left:70.83333%}.el-col-lg-18{width:75%}.el-col-lg-offset-18{margin-left:75%}.el-col-lg-pull-18{position:relative;right:75%}.el-col-lg-push-18{position:relative;left:75%}.el-col-lg-19{width:79.16667%}.el-col-lg-offset-19{margin-left:79.16667%}.el-col-lg-pull-19{position:relative;right:79.16667%}.el-col-lg-push-19{position:relative;left:79.16667%}.el-col-lg-20{width:83.33333%}.el-col-lg-offset-20{margin-left:83.33333%}.el-col-lg-pull-20{position:relative;right:83.33333%}.el-col-lg-push-20{position:relative;left:83.33333%}.el-col-lg-21{width:87.5%}.el-col-lg-offset-21{margin-left:87.5%}.el-col-lg-pull-21{position:relative;right:87.5%}.el-col-lg-push-21{position:relative;left:87.5%}.el-col-lg-22{width:91.66667%}.el-col-lg-offset-22{margin-left:91.66667%}.el-col-lg-pull-22{position:relative;right:91.66667%}.el-col-lg-push-22{position:relative;left:91.66667%}.el-col-lg-23{width:95.83333%}.el-col-lg-offset-23{margin-left:95.83333%}.el-col-lg-pull-23{position:relative;right:95.83333%}.el-col-lg-push-23{position:relative;left:95.83333%}.el-col-lg-24{width:100%}.el-col-lg-offset-24{margin-left:100%}.el-col-lg-pull-24{position:relative;right:100%}.el-col-lg-push-24{position:relative;left:100%}}@media only screen and (min-width:1920px){.el-col-xl-0{display:none;width:0%}.el-col-xl-offset-0{margin-left:0}.el-col-xl-pull-0{position:relative;right:0}.el-col-xl-push-0{position:relative;left:0}.el-col-xl-1{width:4.16667%}.el-col-xl-offset-1{margin-left:4.16667%}.el-col-xl-pull-1{position:relative;right:4.16667%}.el-col-xl-push-1{position:relative;left:4.16667%}.el-col-xl-2{width:8.33333%}.el-col-xl-offset-2{margin-left:8.33333%}.el-col-xl-pull-2{position:relative;right:8.33333%}.el-col-xl-push-2{position:relative;left:8.33333%}.el-col-xl-3{width:12.5%}.el-col-xl-offset-3{margin-left:12.5%}.el-col-xl-pull-3{position:relative;right:12.5%}.el-col-xl-push-3{position:relative;left:12.5%}.el-col-xl-4{width:16.66667%}.el-col-xl-offset-4{margin-left:16.66667%}.el-col-xl-pull-4{position:relative;right:16.66667%}.el-col-xl-push-4{position:relative;left:16.66667%}.el-col-xl-5{width:20.83333%}.el-col-xl-offset-5{margin-left:20.83333%}.el-col-xl-pull-5{position:relative;right:20.83333%}.el-col-xl-push-5{position:relative;left:20.83333%}.el-col-xl-6{width:25%}.el-col-xl-offset-6{margin-left:25%}.el-col-xl-pull-6{position:relative;right:25%}.el-col-xl-push-6{position:relative;left:25%}.el-col-xl-7{width:29.16667%}.el-col-xl-offset-7{margin-left:29.16667%}.el-col-xl-pull-7{position:relative;right:29.16667%}.el-col-xl-push-7{position:relative;left:29.16667%}.el-col-xl-8{width:33.33333%}.el-col-xl-offset-8{margin-left:33.33333%}.el-col-xl-pull-8{position:relative;right:33.33333%}.el-col-xl-push-8{position:relative;left:33.33333%}.el-col-xl-9{width:37.5%}.el-col-xl-offset-9{margin-left:37.5%}.el-col-xl-pull-9{position:relative;right:37.5%}.el-col-xl-push-9{position:relative;left:37.5%}.el-col-xl-10{width:41.66667%}.el-col-xl-offset-10{margin-left:41.66667%}.el-col-xl-pull-10{position:relative;right:41.66667%}.el-col-xl-push-10{position:relative;left:41.66667%}.el-col-xl-11{width:45.83333%}.el-col-xl-offset-11{margin-left:45.83333%}.el-col-xl-pull-11{position:relative;right:45.83333%}.el-col-xl-push-11{position:relative;left:45.83333%}.el-col-xl-12{width:50%}.el-col-xl-offset-12{margin-left:50%}.el-col-xl-pull-12{position:relative;right:50%}.el-col-xl-push-12{position:relative;left:50%}.el-col-xl-13{width:54.16667%}.el-col-xl-offset-13{margin-left:54.16667%}.el-col-xl-pull-13{position:relative;right:54.16667%}.el-col-xl-push-13{position:relative;left:54.16667%}.el-col-xl-14{width:58.33333%}.el-col-xl-offset-14{margin-left:58.33333%}.el-col-xl-pull-14{position:relative;right:58.33333%}.el-col-xl-push-14{position:relative;left:58.33333%}.el-col-xl-15{width:62.5%}.el-col-xl-offset-15{margin-left:62.5%}.el-col-xl-pull-15{position:relative;right:62.5%}.el-col-xl-push-15{position:relative;left:62.5%}.el-col-xl-16{width:66.66667%}.el-col-xl-offset-16{margin-left:66.66667%}.el-col-xl-pull-16{position:relative;right:66.66667%}.el-col-xl-push-16{position:relative;left:66.66667%}.el-col-xl-17{width:70.83333%}.el-col-xl-offset-17{margin-left:70.83333%}.el-col-xl-pull-17{position:relative;right:70.83333%}.el-col-xl-push-17{position:relative;left:70.83333%}.el-col-xl-18{width:75%}.el-col-xl-offset-18{margin-left:75%}.el-col-xl-pull-18{position:relative;right:75%}.el-col-xl-push-18{position:relative;left:75%}.el-col-xl-19{width:79.16667%}.el-col-xl-offset-19{margin-left:79.16667%}.el-col-xl-pull-19{position:relative;right:79.16667%}.el-col-xl-push-19{position:relative;left:79.16667%}.el-col-xl-20{width:83.33333%}.el-col-xl-offset-20{margin-left:83.33333%}.el-col-xl-pull-20{position:relative;right:83.33333%}.el-col-xl-push-20{position:relative;left:83.33333%}.el-col-xl-21{width:87.5%}.el-col-xl-offset-21{margin-left:87.5%}.el-col-xl-pull-21{position:relative;right:87.5%}.el-col-xl-push-21{position:relative;left:87.5%}.el-col-xl-22{width:91.66667%}.el-col-xl-offset-22{margin-left:91.66667%}.el-col-xl-pull-22{position:relative;right:91.66667%}.el-col-xl-push-22{position:relative;left:91.66667%}.el-col-xl-23{width:95.83333%}.el-col-xl-offset-23{margin-left:95.83333%}.el-col-xl-pull-23{position:relative;right:95.83333%}.el-col-xl-push-23{position:relative;left:95.83333%}.el-col-xl-24{width:100%}.el-col-xl-offset-24{margin-left:100%}.el-col-xl-pull-24{position:relative;right:100%}.el-col-xl-push-24{position:relative;left:100%}}.el-upload{display:inline-block;text-align:center;cursor:pointer;outline:0}.el-upload__input{display:none}.el-upload__tip{font-size:12px;color:#606266;margin-top:7px}.el-upload iframe{position:absolute;z-index:-1;top:0;left:0;filter:alpha(opacity=0)}.el-upload--picture-card{background-color:#fbfdff;border:1px dashed #c0ccda;border-radius:6px;box-sizing:border-box;width:148px;height:148px;cursor:pointer;line-height:146px;vertical-align:top}.el-upload--picture-card i{font-size:28px;color:#8c939d}.el-upload--picture-card:hover,.el-upload:focus{border-color:#409EFF;color:#409EFF}.el-upload:focus .el-upload-dragger{border-color:#409EFF}.el-upload-dragger{background-color:#fff;border:1px dashed #d9d9d9;border-radius:6px;box-sizing:border-box;width:360px;height:180px;text-align:center;cursor:pointer;overflow:hidden}.el-upload-dragger .el-icon-upload{font-size:67px;color:#C0C4CC;margin:40px 0 16px;line-height:50px}.el-upload-dragger+.el-upload__tip{text-align:center}.el-upload-dragger~.el-upload__files{border-top:1px solid #DCDFE6;margin-top:7px;padding-top:5px}.el-upload-dragger .el-upload__text{color:#606266;font-size:14px;text-align:center}.el-upload-dragger .el-upload__text em{color:#409EFF;font-style:normal}.el-upload-dragger:hover{border-color:#409EFF}.el-upload-dragger.is-dragover{background-color:rgba(32,159,255,.06);border:2px dashed #409EFF}.el-upload-list{margin:0;padding:0;list-style:none}.el-upload-list__item{transition:all .5s cubic-bezier(.55,0,.1,1);font-size:14px;color:#606266;line-height:1.8;margin-top:5px;box-sizing:border-box;border-radius:4px;width:100%}.el-upload-list__item .el-progress{position:absolute;top:20px;width:100%}.el-upload-list__item .el-progress__text{position:absolute;right:0;top:-13px}.el-upload-list__item .el-progress-bar{margin-right:0;padding-right:0}.el-upload-list__item:first-child{margin-top:10px}.el-upload-list__item .el-icon-upload-success{color:#67C23A}.el-upload-list__item .el-icon-close{display:none;position:absolute;top:5px;right:5px;cursor:pointer;opacity:.75;color:#606266}.el-upload-list__item .el-icon-close:hover{opacity:1}.el-upload-list__item .el-icon-close-tip{display:none;position:absolute;top:5px;right:5px;font-size:12px;cursor:pointer;opacity:1;color:#409EFF}.el-upload-list__item:hover .el-icon-close{display:inline-block}.el-upload-list__item:hover .el-progress__text{display:none}.el-upload-list__item.is-success .el-upload-list__item-status-label{display:block}.el-upload-list__item.is-success .el-upload-list__item-name:focus,.el-upload-list__item.is-success .el-upload-list__item-name:hover{color:#409EFF;cursor:pointer}.el-upload-list__item.is-success:focus:not(:hover) .el-icon-close-tip{display:inline-block}.el-upload-list__item.is-success:active,.el-upload-list__item.is-success:not(.focusing):focus{outline-width:0}.el-upload-list__item.is-success:active .el-icon-close-tip,.el-upload-list__item.is-success:focus .el-upload-list__item-status-label,.el-upload-list__item.is-success:hover .el-upload-list__item-status-label,.el-upload-list__item.is-success:not(.focusing):focus .el-icon-close-tip{display:none}.el-upload-list.is-disabled .el-upload-list__item:hover .el-upload-list__item-status-label{display:block}.el-upload-list__item-name{color:#606266;display:block;margin-right:40px;overflow:hidden;padding-left:4px;text-overflow:ellipsis;transition:color .3s;white-space:nowrap}.el-upload-list__item-name [class^=el-icon]{height:100%;margin-right:7px;color:#909399;line-height:inherit}.el-upload-list__item-status-label{position:absolute;right:5px;top:0;line-height:inherit;display:none}.el-upload-list__item-delete{position:absolute;right:10px;top:0;font-size:12px;color:#606266;display:none}.el-upload-list__item-delete:hover{color:#409EFF}.el-upload-list--picture-card{margin:0;display:inline;vertical-align:top}.el-upload-list--picture-card .el-upload-list__item{overflow:hidden;background-color:#fff;border:1px solid #c0ccda;border-radius:6px;box-sizing:border-box;width:148px;height:148px;margin:0 8px 8px 0;display:inline-block}.el-upload-list--picture-card .el-upload-list__item .el-icon-check,.el-upload-list--picture-card .el-upload-list__item .el-icon-circle-check{color:#FFF}.el-upload-list--picture-card .el-upload-list__item .el-icon-close,.el-upload-list--picture-card .el-upload-list__item:hover .el-upload-list__item-status-label{display:none}.el-upload-list--picture-card .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture-card .el-upload-list__item-name{display:none}.el-upload-list--picture-card .el-upload-list__item-thumbnail{width:100%;height:100%}.el-upload-list--picture-card .el-upload-list__item-status-label{position:absolute;right:-15px;top:-6px;width:40px;height:24px;background:#13ce66;text-align:center;transform:rotate(45deg);box-shadow:0 0 1pc 1px rgba(0,0,0,.2)}.el-upload-list--picture-card .el-upload-list__item-status-label i{font-size:12px;margin-top:11px;transform:rotate(-45deg)}.el-upload-list--picture-card .el-upload-list__item-actions{position:absolute;width:100%;height:100%;left:0;top:0;cursor:default;text-align:center;color:#fff;opacity:0;font-size:20px;background-color:rgba(0,0,0,.5);transition:opacity .3s}.el-upload-list--picture-card .el-upload-list__item-actions::after{display:inline-block;height:100%;vertical-align:middle}.el-upload-list--picture-card .el-upload-list__item-actions span{display:none;cursor:pointer}.el-upload-list--picture-card .el-upload-list__item-actions span+span{margin-left:15px}.el-upload-list--picture-card .el-upload-list__item-actions .el-upload-list__item-delete{position:static;font-size:inherit;color:inherit}.el-upload-list--picture-card .el-upload-list__item-actions:hover{opacity:1}.el-upload-list--picture-card .el-upload-list__item-actions:hover span{display:inline-block}.el-upload-list--picture-card .el-progress{top:50%;left:50%;transform:translate(-50%,-50%);bottom:auto;width:126px}.el-upload-list--picture-card .el-progress .el-progress__text{top:50%}.el-upload-list--picture .el-upload-list__item{overflow:hidden;z-index:0;background-color:#fff;border:1px solid #c0ccda;border-radius:6px;box-sizing:border-box;margin-top:10px;padding:10px 10px 10px 90px;height:92px}.el-upload-list--picture .el-upload-list__item .el-icon-check,.el-upload-list--picture .el-upload-list__item .el-icon-circle-check{color:#FFF}.el-upload-list--picture .el-upload-list__item:hover .el-upload-list__item-status-label{background:0 0;box-shadow:none;top:-2px;right:-12px}.el-upload-list--picture .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name{line-height:70px;margin-top:0}.el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name i{display:none}.el-upload-list--picture .el-upload-list__item-thumbnail{vertical-align:middle;display:inline-block;width:70px;height:70px;float:left;position:relative;z-index:1;margin-left:-80px;background-color:#FFF}.el-upload-list--picture .el-upload-list__item-name{display:block;margin-top:20px}.el-upload-list--picture .el-upload-list__item-name i{font-size:70px;line-height:1;position:absolute;left:9px;top:10px}.el-upload-list--picture .el-upload-list__item-status-label{position:absolute;right:-17px;top:-7px;width:46px;height:26px;background:#13ce66;text-align:center;transform:rotate(45deg);box-shadow:0 1px 1px #ccc}.el-upload-list--picture .el-upload-list__item-status-label i{font-size:12px;margin-top:12px;transform:rotate(-45deg)}.el-upload-list--picture .el-progress{position:relative;top:-7px}.el-upload-cover{position:absolute;left:0;top:0;width:100%;height:100%;overflow:hidden;z-index:10;cursor:default}.el-upload-cover::after{display:inline-block;height:100%;vertical-align:middle}.el-upload-cover img{display:block;width:100%;height:100%}.el-upload-cover__label{position:absolute;right:-15px;top:-6px;width:40px;height:24px;background:#13ce66;text-align:center;transform:rotate(45deg);box-shadow:0 0 1pc 1px rgba(0,0,0,.2)}.el-upload-cover__label i{font-size:12px;margin-top:11px;transform:rotate(-45deg);color:#fff}.el-upload-cover__progress{display:inline-block;vertical-align:middle;position:static;width:243px}.el-upload-cover__progress+.el-upload__inner{opacity:0}.el-upload-cover__content{position:absolute;top:0;left:0;width:100%;height:100%}.el-upload-cover__interact{position:absolute;bottom:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,.72);text-align:center}.el-upload-cover__interact .btn{display:inline-block;color:#FFF;font-size:14px;cursor:pointer;vertical-align:middle;transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);margin-top:60px}.el-upload-cover__interact .btn span{opacity:0;transition:opacity .15s linear}.el-upload-cover__interact .btn:not(:first-child){margin-left:35px}.el-upload-cover__interact .btn:hover{transform:translateY(-13px)}.el-upload-cover__interact .btn:hover span{opacity:1}.el-upload-cover__interact .btn i{color:#FFF;display:block;font-size:24px;line-height:inherit;margin:0 auto 5px}.el-upload-cover__title{position:absolute;bottom:0;left:0;background-color:#FFF;height:36px;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:400;text-align:left;padding:0 10px;margin:0;line-height:36px;font-size:14px;color:#303133}.el-upload-cover+.el-upload__inner{opacity:0;position:relative;z-index:1}.el-progress{position:relative;line-height:1}.el-progress__text{font-size:14px;color:#606266;display:inline-block;vertical-align:middle;margin-left:10px;line-height:1}.el-progress__text i{vertical-align:middle;display:block}.el-progress--circle,.el-progress--dashboard{display:inline-block}.el-progress--circle .el-progress__text,.el-progress--dashboard .el-progress__text{position:absolute;top:50%;left:0;width:100%;text-align:center;margin:0;transform:translate(0,-50%)}.el-progress--circle .el-progress__text i,.el-progress--dashboard .el-progress__text i{vertical-align:middle;display:inline-block}.el-progress--without-text .el-progress__text{display:none}.el-progress--without-text .el-progress-bar{padding-right:0;margin-right:0;display:block}.el-progress--text-inside .el-progress-bar{padding-right:0;margin-right:0}.el-progress.is-success .el-progress-bar__inner{background-color:#67C23A}.el-progress.is-success .el-progress__text{color:#67C23A}.el-progress.is-warning .el-progress-bar__inner{background-color:#E6A23C}.el-badge__content,.el-progress.is-exception .el-progress-bar__inner{background-color:#F56C6C}.el-progress.is-warning .el-progress__text{color:#E6A23C}.el-progress.is-exception .el-progress__text{color:#F56C6C}.el-progress-bar{padding-right:50px;display:inline-block;vertical-align:middle;width:100%;margin-right:-55px;box-sizing:border-box}.el-card__header,.el-message,.el-step__icon{-webkit-box-sizing:border-box}.el-progress-bar__outer{height:6px;border-radius:100px;background-color:#EBEEF5;overflow:hidden;position:relative;vertical-align:middle}.el-progress-bar__inner{position:absolute;left:0;top:0;height:100%;background-color:#409EFF;text-align:right;border-radius:100px;line-height:1;white-space:nowrap;transition:width .6s ease}.el-progress-bar__inner::after{display:inline-block;height:100%;vertical-align:middle}.el-progress-bar__innerText{display:inline-block;vertical-align:middle;color:#FFF;font-size:12px;margin:0 5px}@keyframes progress{0%{background-position:0 0}100%{background-position:32px 0}}.el-time-spinner{width:100%;white-space:nowrap}.el-spinner{display:inline-block;vertical-align:middle}.el-spinner-inner{animation:rotate 2s linear infinite;width:50px;height:50px}.el-spinner-inner .path{stroke:#ececec;stroke-linecap:round;animation:dash 1.5s ease-in-out infinite}@keyframes rotate{100%{transform:rotate(360deg)}}@keyframes dash{0%{stroke-dasharray:1,150;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-35}100%{stroke-dasharray:90,150;stroke-dashoffset:-124}}.el-message{min-width:380px;box-sizing:border-box;border-radius:4px;border-width:1px;border-style:solid;border-color:#EBEEF5;position:fixed;left:50%;top:20px;transform:translateX(-50%);background-color:#edf2fc;transition:opacity .3s,transform .4s,top .4s;overflow:hidden;padding:15px 15px 15px 20px;display:flex;align-items:center}.el-message.is-center{justify-content:center}.el-message.is-closable .el-message__content{padding-right:16px}.el-message p{margin:0}.el-message--info .el-message__content{color:#909399}.el-message--success{background-color:#f0f9eb;border-color:#e1f3d8}.el-message--success .el-message__content{color:#67C23A}.el-message--warning{background-color:#fdf6ec;border-color:#faecd8}.el-message--warning .el-message__content{color:#E6A23C}.el-message--error{background-color:#fef0f0;border-color:#fde2e2}.el-message--error .el-message__content{color:#F56C6C}.el-message__icon{margin-right:10px}.el-message__content{padding:0;font-size:14px;line-height:1}.el-message__content:focus{outline-width:0}.el-message__closeBtn{position:absolute;top:50%;right:15px;transform:translateY(-50%);cursor:pointer;color:#C0C4CC;font-size:16px}.el-message__closeBtn:focus{outline-width:0}.el-message__closeBtn:hover{color:#909399}.el-message .el-icon-success{color:#67C23A}.el-message .el-icon-error{color:#F56C6C}.el-message .el-icon-info{color:#909399}.el-message .el-icon-warning{color:#E6A23C}.el-message-fade-enter,.el-message-fade-leave-active{opacity:0;transform:translate(-50%,-100%)}.el-badge{position:relative;vertical-align:middle;display:inline-block}.el-badge__content{border-radius:10px;color:#FFF;display:inline-block;font-size:12px;height:18px;line-height:18px;padding:0 6px;text-align:center;white-space:nowrap;border:1px solid #FFF}.el-badge__content.is-fixed{position:absolute;top:0;right:10px;transform:translateY(-50%) translateX(100%)}.el-rate__icon,.el-rate__item{position:relative;display:inline-block}.el-badge__content.is-fixed.is-dot{right:5px}.el-badge__content.is-dot{height:8px;width:8px;padding:0;right:0;border-radius:50%}.el-badge__content--primary{background-color:#409EFF}.el-badge__content--success{background-color:#67C23A}.el-badge__content--warning{background-color:#E6A23C}.el-badge__content--info{background-color:#909399}.el-badge__content--danger{background-color:#F56C6C}.el-card{border-radius:4px;border:1px solid #EBEEF5;background-color:#FFF;overflow:hidden;color:#303133;transition:.3s}.el-card.is-always-shadow,.el-card.is-hover-shadow:focus,.el-card.is-hover-shadow:hover{box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-card__header{padding:18px 20px;border-bottom:1px solid #EBEEF5;box-sizing:border-box}.el-card__body,.el-main{padding:20px}.el-rate{height:20px;line-height:1}.el-rate:active,.el-rate:focus{outline-width:0}.el-rate__item{font-size:0;vertical-align:middle}.el-rate__icon{font-size:18px;margin-right:6px;color:#C0C4CC;transition:.3s}.el-rate__decimal,.el-rate__icon .path2{position:absolute;top:0;left:0}.el-rate__icon.hover{transform:scale(1.15)}.el-rate__decimal{display:inline-block;overflow:hidden}.el-step.is-vertical,.el-steps{display:-ms-flexbox}.el-rate__text{font-size:14px;vertical-align:middle}.el-steps{display:flex}.el-steps--simple{padding:13px 8%;border-radius:4px;background:#F5F7FA}.el-steps--horizontal{white-space:nowrap}.el-steps--vertical{height:100%;flex-flow:column}.el-step{position:relative;flex-shrink:1}.el-step:last-of-type .el-step__line{display:none}.el-step:last-of-type.is-flex{flex-basis:auto!important;flex-shrink:0;flex-grow:0}.el-step:last-of-type .el-step__description,.el-step:last-of-type .el-step__main{padding-right:0}.el-step__head{position:relative;width:100%}.el-step__head.is-process{color:#303133;border-color:#303133}.el-step__head.is-wait{color:#C0C4CC;border-color:#C0C4CC}.el-step__head.is-success{color:#67C23A;border-color:#67C23A}.el-step__head.is-error{color:#F56C6C;border-color:#F56C6C}.el-step__head.is-finish{color:#409EFF;border-color:#409EFF}.el-step__icon{position:relative;z-index:1;display:inline-flex;justify-content:center;align-items:center;width:24px;height:24px;font-size:14px;box-sizing:border-box;background:#FFF;transition:.15s ease-out}.el-step.is-horizontal,.el-step__icon-inner{display:inline-block}.el-step__icon.is-text{border-radius:50%;border:2px solid;border-color:inherit}.el-step__icon.is-icon{width:40px}.el-step__icon-inner{-webkit-user-select:none;-moz-user-select:none;user-select:none;text-align:center;font-weight:700;line-height:1;color:inherit}.el-step__icon-inner[class*=el-icon]:not(.is-status){font-size:25px;font-weight:400}.el-step__icon-inner.is-status{transform:translateY(1px)}.el-step__line{position:absolute;border-color:inherit;background-color:#C0C4CC}.el-step__line-inner{display:block;border-width:1px;border-style:solid;border-color:inherit;transition:.15s ease-out;box-sizing:border-box;width:0;height:0}.el-step__main{white-space:normal;text-align:left}.el-step__title{font-size:16px;line-height:38px}.el-step__title.is-process{font-weight:700;color:#303133}.el-step__title.is-wait{color:#C0C4CC}.el-step__title.is-success{color:#67C23A}.el-step__title.is-error{color:#F56C6C}.el-step__title.is-finish{color:#409EFF}.el-step__description{padding-right:10%;margin-top:-5px;font-size:12px;line-height:20px;font-weight:400}.el-step__description.is-process{color:#303133}.el-step__description.is-wait{color:#C0C4CC}.el-step__description.is-success{color:#67C23A}.el-step__description.is-error{color:#F56C6C}.el-step__description.is-finish{color:#409EFF}.el-step.is-horizontal .el-step__line{height:2px;top:11px;left:0;right:0}.el-step.is-vertical{display:flex}.el-step.is-vertical .el-step__head{flex-grow:0;width:24px}.el-step.is-vertical .el-step__main{padding-left:10px;flex-grow:1}.el-step.is-vertical .el-step__title{line-height:24px;padding-bottom:8px}.el-step.is-vertical .el-step__line{width:2px;top:0;bottom:0;left:11px}.el-step.is-vertical .el-step__icon.is-icon{width:24px}.el-step.is-center .el-step__head,.el-step.is-center .el-step__main{text-align:center}.el-step.is-center .el-step__description{padding-left:20%;padding-right:20%}.el-step.is-center .el-step__line{left:50%;right:-50%}.el-step.is-simple{display:flex;align-items:center}.el-step.is-simple .el-step__head{width:auto;font-size:0;padding-right:10px}.el-step.is-simple .el-step__icon{background:0 0;width:16px;height:16px;font-size:12px}.el-step.is-simple .el-step__icon-inner[class*=el-icon]:not(.is-status){font-size:18px}.el-step.is-simple .el-step__icon-inner.is-status{transform:scale(.8) translateY(1px)}.el-step.is-simple .el-step__main{position:relative;display:flex;align-items:stretch;flex-grow:1}.el-step.is-simple .el-step__title{font-size:16px;line-height:20px}.el-step.is-simple:not(:last-of-type) .el-step__title{max-width:50%;word-break:break-all}.el-step.is-simple .el-step__arrow{flex-grow:1;display:flex;align-items:center;justify-content:center}.el-step.is-simple .el-step__arrow::after,.el-step.is-simple .el-step__arrow::before{content:'';display:inline-block;position:absolute;height:15px;width:1px;background:#C0C4CC}.el-step.is-simple .el-step__arrow::before{transform:rotate(-45deg) translateY(-4px);transform-origin:0 0}.el-step.is-simple .el-step__arrow::after{transform:rotate(45deg) translateY(4px);transform-origin:100% 100%}.el-step.is-simple:last-of-type .el-step__arrow{display:none}.el-carousel{position:relative}.el-carousel--horizontal{overflow-x:hidden}.el-carousel--vertical{overflow-y:hidden}.el-carousel__container{position:relative;height:300px}.el-carousel__arrow{border:none;outline:0;padding:0;margin:0;height:36px;width:36px;cursor:pointer;transition:.3s;border-radius:50%;background-color:rgba(31,45,61,.11);color:#FFF;position:absolute;top:50%;z-index:10;transform:translateY(-50%);text-align:center;font-size:12px}.el-carousel__arrow--left{left:16px}.el-carousel__arrow:hover{background-color:rgba(31,45,61,.23)}.el-carousel__arrow i{cursor:pointer}.el-carousel__indicators{position:absolute;list-style:none;margin:0;padding:0;z-index:2}.el-carousel__indicators--horizontal{bottom:0;left:50%;transform:translateX(-50%)}.el-carousel__indicators--vertical{right:0;top:50%;transform:translateY(-50%)}.el-carousel__indicators--outside{bottom:26px;text-align:center;position:static;transform:none}.el-carousel__indicators--outside .el-carousel__indicator:hover button{opacity:.64}.el-carousel__indicators--outside button{background-color:#C0C4CC;opacity:.24}.el-carousel__indicators--labels{left:0;right:0;transform:none;text-align:center}.el-carousel__indicators--labels .el-carousel__button{height:auto;width:auto;padding:2px 18px;font-size:12px}.el-carousel__indicators--labels .el-carousel__indicator{padding:6px 4px}.el-carousel__indicator{background-color:transparent;cursor:pointer}.el-carousel__indicator:hover button{opacity:.72}.el-carousel__indicator--horizontal{display:inline-block;padding:12px 4px}.el-carousel__indicator--vertical{padding:4px 12px}.el-carousel__indicator--vertical .el-carousel__button{width:2px;height:15px}.el-carousel__indicator.is-active button{opacity:1}.el-carousel__button{display:block;opacity:.48;width:30px;height:2px;background-color:#FFF;border:none;outline:0;padding:0;margin:0;cursor:pointer;transition:.3s}.el-carousel__item,.el-carousel__mask{height:100%;position:absolute;top:0;left:0}.carousel-arrow-left-enter,.carousel-arrow-left-leave-active{transform:translateY(-50%) translateX(-10px);opacity:0}.carousel-arrow-right-enter,.carousel-arrow-right-leave-active{transform:translateY(-50%) translateX(10px);opacity:0}.el-carousel__item{width:100%;display:inline-block;overflow:hidden;z-index:0}.el-carousel__item.is-active{z-index:2}.el-carousel__item.is-animating{transition:transform .4s ease-in-out}.el-carousel__item--card{width:50%;transition:transform .4s ease-in-out}.el-carousel__item--card.is-in-stage{cursor:pointer;z-index:1}.el-carousel__item--card.is-in-stage.is-hover .el-carousel__mask,.el-carousel__item--card.is-in-stage:hover .el-carousel__mask{opacity:.12}.el-carousel__item--card.is-active{z-index:2}.el-carousel__mask{width:100%;background-color:#FFF;opacity:.24;transition:.2s}.fade-in-linear-enter-active,.fade-in-linear-leave-active{transition:opacity .2s linear}.fade-in-linear-enter,.fade-in-linear-leave,.fade-in-linear-leave-active{opacity:0}.el-fade-in-linear-enter-active,.el-fade-in-linear-leave-active{transition:opacity .2s linear}.el-fade-in-linear-enter,.el-fade-in-linear-leave,.el-fade-in-linear-leave-active{opacity:0}.el-fade-in-enter-active,.el-fade-in-leave-active{transition:all .3s cubic-bezier(.55,0,.1,1)}.el-fade-in-enter,.el-fade-in-leave-active{opacity:0}.el-zoom-in-center-enter-active,.el-zoom-in-center-leave-active{transition:all .3s cubic-bezier(.55,0,.1,1)}.el-zoom-in-center-enter,.el-zoom-in-center-leave-active{opacity:0;transform:scaleX(0)}.el-zoom-in-top-enter-active,.el-zoom-in-top-leave-active{opacity:1;transform:scaleY(1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transform-origin:center top}.el-zoom-in-top-enter,.el-zoom-in-top-leave-active{opacity:0;transform:scaleY(0)}.el-zoom-in-bottom-enter-active,.el-zoom-in-bottom-leave-active{opacity:1;transform:scaleY(1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transform-origin:center bottom}.el-zoom-in-bottom-enter,.el-zoom-in-bottom-leave-active{opacity:0;transform:scaleY(0)}.el-zoom-in-left-enter-active,.el-zoom-in-left-leave-active{opacity:1;transform:scale(1,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transform-origin:top left}.el-zoom-in-left-enter,.el-zoom-in-left-leave-active{opacity:0;transform:scale(.45,.45)}.collapse-transition{transition:.3s height ease-in-out,.3s padding-top ease-in-out,.3s padding-bottom ease-in-out}.horizontal-collapse-transition{transition:.3s width ease-in-out,.3s padding-left ease-in-out,.3s padding-right ease-in-out}.el-list-enter-active,.el-list-leave-active{transition:all 1s}.el-list-enter,.el-list-leave-active{opacity:0;transform:translateY(-30px)}.el-opacity-transition{transition:opacity .3s cubic-bezier(.55,0,.1,1)}.el-collapse{border-top:1px solid #EBEEF5;border-bottom:1px solid #EBEEF5}.el-collapse-item.is-disabled .el-collapse-item__header{color:#bbb;cursor:not-allowed}.el-collapse-item__header{display:flex;align-items:center;height:48px;line-height:48px;background-color:#FFF;color:#303133;cursor:pointer;border-bottom:1px solid #EBEEF5;font-size:13px;font-weight:500;transition:border-bottom-color .3s;outline:0}.el-collapse-item__arrow{margin:0 8px 0 auto;transition:transform .3s;font-weight:300}.el-collapse-item__arrow.is-active{transform:rotate(90deg)}.el-collapse-item__header.focusing:focus:not(:hover){color:#409EFF}.el-collapse-item__header.is-active{border-bottom-color:transparent}.el-collapse-item__wrap{will-change:height;background-color:#FFF;overflow:hidden;box-sizing:border-box;border-bottom:1px solid #EBEEF5}.el-cascader__search-input,.el-cascader__tags,.el-tag{-webkit-box-sizing:border-box}.el-collapse-item__content{padding-bottom:25px;font-size:13px;color:#303133;line-height:1.769230769230769}.el-collapse-item:last-child{margin-bottom:-1px}.el-popper .popper__arrow,.el-popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-cascader,.el-tag{display:inline-block}.el-popper .popper__arrow{border-width:6px;filter:drop-shadow(0 2px 12px rgba(0, 0, 0, .03))}.el-popper .popper__arrow::after{content:\\\" \\\";border-width:6px}.el-popper[x-placement^=top]{margin-bottom:12px}.el-popper[x-placement^=top] .popper__arrow{bottom:-6px;left:50%;margin-right:3px;border-top-color:#EBEEF5;border-bottom-width:0}.el-popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-6px;border-top-color:#FFF;border-bottom-width:0}.el-popper[x-placement^=bottom]{margin-top:12px}.el-popper[x-placement^=bottom] .popper__arrow{top:-6px;left:50%;margin-right:3px;border-top-width:0;border-bottom-color:#EBEEF5}.el-popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-6px;border-top-width:0;border-bottom-color:#FFF}.el-popper[x-placement^=right]{margin-left:12px}.el-popper[x-placement^=right] .popper__arrow{top:50%;left:-6px;margin-bottom:3px;border-right-color:#EBEEF5;border-left-width:0}.el-popper[x-placement^=right] .popper__arrow::after{bottom:-6px;left:1px;border-right-color:#FFF;border-left-width:0}.el-popper[x-placement^=left]{margin-right:12px}.el-popper[x-placement^=left] .popper__arrow{top:50%;right:-6px;margin-bottom:3px;border-right-width:0;border-left-color:#EBEEF5}.el-popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-6px;margin-left:-6px;border-right-width:0;border-left-color:#FFF}.el-tag{background-color:#ecf5ff;border-color:#d9ecff;height:32px;padding:0 10px;line-height:30px;font-size:12px;color:#409EFF;border-width:1px;border-style:solid;border-radius:4px;box-sizing:border-box;white-space:nowrap}.el-tag.is-hit{border-color:#409EFF}.el-tag .el-tag__close{color:#409eff}.el-tag .el-tag__close:hover{color:#FFF;background-color:#409eff}.el-tag.el-tag--info{background-color:#f4f4f5;border-color:#e9e9eb;color:#909399}.el-tag.el-tag--info.is-hit{border-color:#909399}.el-tag.el-tag--info .el-tag__close{color:#909399}.el-tag.el-tag--info .el-tag__close:hover{color:#FFF;background-color:#909399}.el-tag.el-tag--success{background-color:#f0f9eb;border-color:#e1f3d8;color:#67c23a}.el-tag.el-tag--success.is-hit{border-color:#67C23A}.el-tag.el-tag--success .el-tag__close{color:#67c23a}.el-tag.el-tag--success .el-tag__close:hover{color:#FFF;background-color:#67c23a}.el-tag.el-tag--warning{background-color:#fdf6ec;border-color:#faecd8;color:#e6a23c}.el-tag.el-tag--warning.is-hit{border-color:#E6A23C}.el-tag.el-tag--warning .el-tag__close{color:#e6a23c}.el-tag.el-tag--warning .el-tag__close:hover{color:#FFF;background-color:#e6a23c}.el-tag.el-tag--danger{background-color:#fef0f0;border-color:#fde2e2;color:#f56c6c}.el-tag.el-tag--danger.is-hit{border-color:#F56C6C}.el-tag.el-tag--danger .el-tag__close{color:#f56c6c}.el-tag.el-tag--danger .el-tag__close:hover{color:#FFF;background-color:#f56c6c}.el-tag .el-icon-close{border-radius:50%;text-align:center;position:relative;cursor:pointer;font-size:12px;height:16px;width:16px;line-height:16px;vertical-align:middle;top:-1px;right:-5px}.el-tag .el-icon-close::before{display:block}.el-tag--dark{background-color:#409eff;border-color:#409eff;color:#fff}.el-tag--dark.is-hit{border-color:#409EFF}.el-tag--dark .el-tag__close{color:#fff}.el-tag--dark .el-tag__close:hover{color:#FFF;background-color:#66b1ff}.el-tag--dark.el-tag--info{background-color:#909399;border-color:#909399;color:#fff}.el-tag--dark.el-tag--info.is-hit{border-color:#909399}.el-tag--dark.el-tag--info .el-tag__close{color:#fff}.el-tag--dark.el-tag--info .el-tag__close:hover{color:#FFF;background-color:#a6a9ad}.el-tag--dark.el-tag--success{background-color:#67c23a;border-color:#67c23a;color:#fff}.el-tag--dark.el-tag--success.is-hit{border-color:#67C23A}.el-tag--dark.el-tag--success .el-tag__close{color:#fff}.el-tag--dark.el-tag--success .el-tag__close:hover{color:#FFF;background-color:#85ce61}.el-tag--dark.el-tag--warning{background-color:#e6a23c;border-color:#e6a23c;color:#fff}.el-tag--dark.el-tag--warning.is-hit{border-color:#E6A23C}.el-tag--dark.el-tag--warning .el-tag__close{color:#fff}.el-tag--dark.el-tag--warning .el-tag__close:hover{color:#FFF;background-color:#ebb563}.el-tag--dark.el-tag--danger{background-color:#f56c6c;border-color:#f56c6c;color:#fff}.el-tag--dark.el-tag--danger.is-hit{border-color:#F56C6C}.el-tag--dark.el-tag--danger .el-tag__close{color:#fff}.el-tag--dark.el-tag--danger .el-tag__close:hover{color:#FFF;background-color:#f78989}.el-tag--plain{background-color:#fff;border-color:#b3d8ff;color:#409eff}.el-tag--plain.is-hit{border-color:#409EFF}.el-tag--plain .el-tag__close{color:#409eff}.el-tag--plain .el-tag__close:hover{color:#FFF;background-color:#409eff}.el-tag--plain.el-tag--info{background-color:#fff;border-color:#d3d4d6;color:#909399}.el-tag--plain.el-tag--info.is-hit{border-color:#909399}.el-tag--plain.el-tag--info .el-tag__close{color:#909399}.el-tag--plain.el-tag--info .el-tag__close:hover{color:#FFF;background-color:#909399}.el-tag--plain.el-tag--success{background-color:#fff;border-color:#c2e7b0;color:#67c23a}.el-tag--plain.el-tag--success.is-hit{border-color:#67C23A}.el-tag--plain.el-tag--success .el-tag__close{color:#67c23a}.el-tag--plain.el-tag--success .el-tag__close:hover{color:#FFF;background-color:#67c23a}.el-tag--plain.el-tag--warning{background-color:#fff;border-color:#f5dab1;color:#e6a23c}.el-tag--plain.el-tag--warning.is-hit{border-color:#E6A23C}.el-tag--plain.el-tag--warning .el-tag__close{color:#e6a23c}.el-tag--plain.el-tag--warning .el-tag__close:hover{color:#FFF;background-color:#e6a23c}.el-tag--plain.el-tag--danger{background-color:#fff;border-color:#fbc4c4;color:#f56c6c}.el-tag--plain.el-tag--danger.is-hit{border-color:#F56C6C}.el-tag--plain.el-tag--danger .el-tag__close{color:#f56c6c}.el-tag--plain.el-tag--danger .el-tag__close:hover{color:#FFF;background-color:#f56c6c}.el-tag--medium{height:28px;line-height:26px}.el-tag--medium .el-icon-close{transform:scale(.8)}.el-tag--small{height:24px;padding:0 8px;line-height:22px}.el-tag--small .el-icon-close{transform:scale(.8)}.el-tag--mini{height:20px;padding:0 5px;line-height:19px}.el-tag--mini .el-icon-close{margin-left:-3px;transform:scale(.7)}.el-cascader{position:relative;font-size:14px;line-height:40px}.el-cascader:not(.is-disabled):hover .el-input__inner{cursor:pointer;border-color:#C0C4CC}.el-cascader .el-input .el-input__inner:focus,.el-cascader .el-input.is-focus .el-input__inner{border-color:#409EFF}.el-cascader .el-input{cursor:pointer}.el-cascader .el-input .el-input__inner{text-overflow:ellipsis}.el-cascader .el-input .el-icon-arrow-down{transition:transform .3s;font-size:14px}.el-cascader .el-input .el-icon-arrow-down.is-reverse{transform:rotateZ(180deg)}.el-cascader .el-input .el-icon-circle-close:hover{color:#909399}.el-cascader--medium{font-size:14px;line-height:36px}.el-cascader--small{font-size:13px;line-height:32px}.el-cascader--mini{font-size:12px;line-height:28px}.el-cascader.is-disabled .el-cascader__label{z-index:2;color:#C0C4CC}.el-cascader__dropdown{margin:5px 0;font-size:14px;background:#FFF;border:1px solid #E4E7ED;border-radius:4px;box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-cascader__tags{position:absolute;left:0;right:30px;top:50%;transform:translateY(-50%);display:flex;flex-wrap:wrap;line-height:normal;text-align:left;box-sizing:border-box}.el-cascader__tags .el-tag{display:inline-flex;align-items:center;max-width:100%;margin:2px 0 2px 6px;text-overflow:ellipsis;background:#f0f2f5}.el-cascader__tags .el-tag:not(.is-hit){border-color:transparent}.el-cascader__tags .el-tag>span{flex:1;overflow:hidden;text-overflow:ellipsis}.el-cascader__tags .el-tag .el-icon-close{flex:none;background-color:#C0C4CC;color:#FFF}.el-cascader__tags .el-tag .el-icon-close:hover{background-color:#909399}.el-cascader__suggestion-panel{border-radius:4px}.el-cascader__suggestion-list{max-height:204px;margin:0;padding:6px 0;font-size:14px;color:#606266;text-align:center}.el-cascader__suggestion-item{display:flex;justify-content:space-between;align-items:center;height:34px;padding:0 15px;text-align:left;outline:0;cursor:pointer}.el-cascader__suggestion-item:focus,.el-cascader__suggestion-item:hover{background:#F5F7FA}.el-cascader__suggestion-item.is-checked{color:#409EFF;font-weight:700}.el-cascader__suggestion-item>span{margin-right:10px}.el-cascader__empty-text{margin:10px 0;color:#C0C4CC}.el-cascader__search-input{flex:1;height:24px;min-width:60px;margin:2px 0 2px 15px;padding:0;color:#606266;border:none;outline:0;box-sizing:border-box}.el-cascader__search-input::-moz-placeholder{color:#C0C4CC}.el-cascader__search-input::placeholder{color:#C0C4CC}.el-color-predefine{display:flex;font-size:12px;margin-top:8px;width:280px}.el-color-predefine__colors{display:flex;flex:1;flex-wrap:wrap}.el-color-predefine__color-selector{margin:0 0 8px 8px;width:20px;height:20px;border-radius:4px;cursor:pointer}.el-color-predefine__color-selector:nth-child(10n+1){margin-left:0}.el-color-predefine__color-selector.selected{box-shadow:0 0 3px 2px #409EFF}.el-color-predefine__color-selector>div{display:flex;height:100%;border-radius:3px}.el-color-predefine__color-selector.is-alpha{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.el-color-hue-slider{position:relative;box-sizing:border-box;width:280px;height:12px;background-color:red;padding:0 2px}.el-color-hue-slider__bar{position:relative;background:linear-gradient(to right,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%);height:100%}.el-color-hue-slider__thumb{position:absolute;cursor:pointer;box-sizing:border-box;left:0;top:0;width:4px;height:100%;border-radius:1px;background:#fff;border:1px solid #f0f0f0;box-shadow:0 0 2px rgba(0,0,0,.6);z-index:1}.el-color-hue-slider.is-vertical{width:12px;height:180px;padding:2px 0}.el-color-hue-slider.is-vertical .el-color-hue-slider__bar{background:linear-gradient(to bottom,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%)}.el-color-hue-slider.is-vertical .el-color-hue-slider__thumb{left:0;top:0;width:100%;height:4px}.el-color-svpanel{position:relative;width:280px;height:180px}.el-color-svpanel__black,.el-color-svpanel__white{position:absolute;top:0;left:0;right:0;bottom:0}.el-color-svpanel__white{background:linear-gradient(to right,#fff,rgba(255,255,255,0))}.el-color-svpanel__black{background:linear-gradient(to top,#000,rgba(0,0,0,0))}.el-color-svpanel__cursor{position:absolute}.el-color-svpanel__cursor>div{cursor:head;width:4px;height:4px;box-shadow:0 0 0 1.5px #fff,inset 0 0 1px 1px rgba(0,0,0,.3),0 0 1px 2px rgba(0,0,0,.4);border-radius:50%;transform:translate(-2px,-2px)}.el-color-alpha-slider{position:relative;box-sizing:border-box;width:280px;height:12px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.el-color-alpha-slider__bar{position:relative;background:linear-gradient(to right,rgba(255,255,255,0) 0,#fff 100%);height:100%}.el-color-alpha-slider__thumb{position:absolute;cursor:pointer;box-sizing:border-box;left:0;top:0;width:4px;height:100%;border-radius:1px;background:#fff;border:1px solid #f0f0f0;box-shadow:0 0 2px rgba(0,0,0,.6);z-index:1}.el-color-alpha-slider.is-vertical{width:20px;height:180px}.el-color-alpha-slider.is-vertical .el-color-alpha-slider__bar{background:linear-gradient(to bottom,rgba(255,255,255,0) 0,#fff 100%)}.el-color-alpha-slider.is-vertical .el-color-alpha-slider__thumb{left:0;top:0;width:100%;height:4px}.el-color-dropdown{width:300px}.el-color-dropdown__main-wrapper{margin-bottom:6px}.el-color-dropdown__main-wrapper::after{display:table;clear:both}.el-color-dropdown__btns{margin-top:6px;text-align:right}.el-color-dropdown__value{float:left;line-height:26px;font-size:12px;color:#000;width:160px}.el-color-dropdown__btn{border:1px solid #dcdcdc;color:#333;line-height:24px;border-radius:2px;padding:0 20px;cursor:pointer;background-color:transparent;outline:0;font-size:12px}.el-color-dropdown__btn[disabled]{color:#ccc;cursor:not-allowed}.el-color-dropdown__btn:hover{color:#409EFF;border-color:#409EFF}.el-color-dropdown__link-btn{cursor:pointer;color:#409EFF;text-decoration:none;padding:15px;font-size:12px}.el-color-dropdown__link-btn:hover{color:tint(#409EFF,20%)}.el-color-picker{display:inline-block;position:relative;line-height:normal;height:40px}.el-color-picker.is-disabled .el-color-picker__trigger{cursor:not-allowed}.el-color-picker--medium{height:36px}.el-color-picker--medium .el-color-picker__trigger{height:36px;width:36px}.el-color-picker--medium .el-color-picker__mask{height:34px;width:34px}.el-color-picker--small{height:32px}.el-color-picker--small .el-color-picker__trigger{height:32px;width:32px}.el-color-picker--small .el-color-picker__mask{height:30px;width:30px}.el-color-picker--small .el-color-picker__empty,.el-color-picker--small .el-color-picker__icon{transform:translate3d(-50%,-50%,0) scale(.8)}.el-color-picker--mini{height:28px}.el-color-picker--mini .el-color-picker__trigger{height:28px;width:28px}.el-color-picker--mini .el-color-picker__mask{height:26px;width:26px}.el-color-picker--mini .el-color-picker__empty,.el-color-picker--mini .el-color-picker__icon{transform:translate3d(-50%,-50%,0) scale(.8)}.el-color-picker__mask{height:38px;width:38px;border-radius:4px;position:absolute;top:1px;left:1px;z-index:1;cursor:not-allowed;background-color:rgba(255,255,255,.7)}.el-color-picker__trigger{display:inline-block;box-sizing:border-box;height:40px;width:40px;padding:4px;border:1px solid #e6e6e6;border-radius:4px;font-size:0;position:relative;cursor:pointer}.el-color-picker__color{position:relative;display:block;box-sizing:border-box;border:1px solid #999;border-radius:2px;width:100%;height:100%;text-align:center}.el-color-picker__icon,.el-input,.el-textarea{display:inline-block;width:100%}.el-color-picker__color.is-alpha{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.el-color-picker__color-inner{position:absolute;left:0;top:0;right:0;bottom:0}.el-color-picker__empty{font-size:12px;color:#999;position:absolute;top:50%;left:50%;transform:translate3d(-50%,-50%,0)}.el-color-picker__icon{position:absolute;top:50%;left:50%;transform:translate3d(-50%,-50%,0);color:#FFF;text-align:center;font-size:12px}.el-input__prefix,.el-input__suffix{position:absolute;top:0;text-align:center}.el-color-picker__panel{position:absolute;z-index:10;padding:6px;box-sizing:content-box;background-color:#FFF;border:1px solid #EBEEF5;border-radius:4px;box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-input__inner,.el-textarea__inner,.el-transfer-panel{-webkit-box-sizing:border-box}.el-textarea{position:relative;vertical-align:bottom;font-size:14px}.el-textarea__inner{display:block;resize:vertical;padding:5px 15px;line-height:1.5;box-sizing:border-box;width:100%;font-size:inherit;color:#606266;background-color:#FFF;background-image:none;border:1px solid #DCDFE6;border-radius:4px;transition:border-color .2s cubic-bezier(.645,.045,.355,1)}.el-textarea__inner::-moz-placeholder{color:#C0C4CC}.el-textarea__inner::placeholder{color:#C0C4CC}.el-textarea__inner:hover{border-color:#C0C4CC}.el-textarea__inner:focus{outline:0;border-color:#409EFF}.el-textarea .el-input__count{color:#909399;background:#FFF;position:absolute;font-size:12px;bottom:5px;right:10px}.el-textarea.is-disabled .el-textarea__inner{background-color:#F5F7FA;border-color:#E4E7ED;color:#C0C4CC;cursor:not-allowed}.el-textarea.is-disabled .el-textarea__inner::-moz-placeholder{color:#C0C4CC}.el-textarea.is-disabled .el-textarea__inner::placeholder{color:#C0C4CC}.el-textarea.is-exceed .el-textarea__inner{border-color:#F56C6C}.el-textarea.is-exceed .el-input__count{color:#F56C6C}.el-input{position:relative;font-size:14px}.el-input::-webkit-scrollbar{z-index:11;width:6px}.el-input::-webkit-scrollbar:horizontal{height:6px}.el-input::-webkit-scrollbar-thumb{border-radius:5px;width:6px;background:#b4bccc}.el-input::-webkit-scrollbar-corner{background:#fff}.el-input::-webkit-scrollbar-track{background:#fff}.el-input::-webkit-scrollbar-track-piece{background:#fff;width:6px}.el-input .el-input__clear{color:#C0C4CC;font-size:14px;cursor:pointer;transition:color .2s cubic-bezier(.645,.045,.355,1)}.el-input .el-input__clear:hover{color:#909399}.el-input .el-input__count{height:100%;display:inline-flex;align-items:center;color:#909399;font-size:12px}.el-input-group__append .el-button,.el-input-group__append .el-input,.el-input-group__prepend .el-button,.el-input-group__prepend .el-input,.el-input__inner{font-size:inherit}.el-input .el-input__count .el-input__count-inner{background:#FFF;line-height:initial;display:inline-block;padding:0 5px}.el-input__inner{-webkit-appearance:none;background-color:#FFF;background-image:none;border-radius:4px;border:1px solid #DCDFE6;box-sizing:border-box;color:#606266;display:inline-block;height:40px;line-height:40px;outline:0;padding:0 15px;transition:border-color .2s cubic-bezier(.645,.045,.355,1);width:100%}.el-input__inner::-ms-reveal{display:none}.el-input__inner::-moz-placeholder{color:#C0C4CC}.el-input__inner::placeholder{color:#C0C4CC}.el-input__inner:hover{border-color:#C0C4CC}.el-input.is-active .el-input__inner,.el-input__inner:focus{border-color:#409EFF;outline:0}.el-input__suffix{height:100%;right:5px;transition:all .3s;pointer-events:none}.el-input__suffix-inner{pointer-events:all}.el-input__prefix{height:100%;left:5px;transition:all .3s}.el-input__icon{height:100%;width:25px;text-align:center;transition:all .3s;line-height:40px}.el-input__icon:after{content:'';height:100%;width:0;display:inline-block;vertical-align:middle}.el-input__validateIcon{pointer-events:none}.el-input.is-disabled .el-input__inner{background-color:#F5F7FA;border-color:#E4E7ED;color:#C0C4CC;cursor:not-allowed}.el-input.is-disabled .el-input__inner::-moz-placeholder{color:#C0C4CC}.el-input.is-disabled .el-input__inner::placeholder{color:#C0C4CC}.el-input.is-disabled .el-input__icon{cursor:not-allowed}.el-image-viewer__btn,.el-image__preview,.el-link,.el-transfer-panel__filter .el-icon-circle-close{cursor:pointer}.el-input.is-exceed .el-input__inner{border-color:#F56C6C}.el-input.is-exceed .el-input__suffix .el-input__count{color:#F56C6C}.el-input--suffix .el-input__inner{padding-right:30px}.el-input--prefix .el-input__inner{padding-left:30px}.el-input--medium{font-size:14px}.el-input--medium .el-input__inner{height:36px;line-height:36px}.el-input--medium .el-input__icon{line-height:36px}.el-input--small{font-size:13px}.el-input--small .el-input__inner{height:32px;line-height:32px}.el-input--small .el-input__icon{line-height:32px}.el-input--mini{font-size:12px}.el-input--mini .el-input__inner{height:28px;line-height:28px}.el-input--mini .el-input__icon{line-height:28px}.el-input-group{line-height:normal;display:inline-table;width:100%;border-collapse:separate;border-spacing:0}.el-input-group>.el-input__inner{vertical-align:middle;display:table-cell}.el-input-group__append,.el-input-group__prepend{background-color:#F5F7FA;color:#909399;vertical-align:middle;display:table-cell;position:relative;border:1px solid #DCDFE6;border-radius:4px;padding:0 20px;width:1px;white-space:nowrap}.el-input-group--append .el-input__inner,.el-input-group__prepend{border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group__append:focus,.el-input-group__prepend:focus{outline:0}.el-input-group__append .el-button,.el-input-group__append .el-select,.el-input-group__prepend .el-button,.el-input-group__prepend .el-select{display:inline-block;margin:-10px -20px}.el-input-group__append button.el-button,.el-input-group__append div.el-select .el-input__inner,.el-input-group__append div.el-select:hover .el-input__inner,.el-input-group__prepend button.el-button,.el-input-group__prepend div.el-select .el-input__inner,.el-input-group__prepend div.el-select:hover .el-input__inner{border-color:transparent;background-color:transparent;color:inherit;border-top:0;border-bottom:0}.el-input-group__prepend{border-right:0}.el-input-group__append{border-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--append .el-select .el-input.is-focus .el-input__inner,.el-input-group--prepend .el-select .el-input.is-focus .el-input__inner{border-color:transparent}.el-input-group--prepend .el-input__inner{border-top-left-radius:0;border-bottom-left-radius:0}.el-input__inner::-ms-clear{display:none;width:0;height:0}.el-transfer{font-size:14px}.el-transfer__buttons{display:inline-block;vertical-align:middle;padding:0 30px}.el-transfer__button{display:block;margin:0 auto;padding:10px;border-radius:50%;color:#FFF;background-color:#409EFF;font-size:0}.el-button-group>.el-button+.el-button,.el-transfer-panel__item+.el-transfer-panel__item,.el-transfer__button [class*=el-icon-]+span{margin-left:0}.el-divider__text,.el-image__error,.el-link,.el-timeline,.el-transfer__button i,.el-transfer__button span{font-size:14px}.el-transfer__button.is-with-texts{border-radius:4px}.el-transfer__button.is-disabled,.el-transfer__button.is-disabled:hover{border:1px solid #DCDFE6;background-color:#F5F7FA;color:#C0C4CC}.el-transfer__button:first-child{margin-bottom:10px}.el-transfer__button:nth-child(2){margin:0}.el-transfer-panel{border:1px solid #EBEEF5;border-radius:4px;overflow:hidden;background:#FFF;display:inline-block;vertical-align:middle;width:200px;max-height:100%;box-sizing:border-box;position:relative}.el-transfer-panel__body{height:246px}.el-transfer-panel__body.is-with-footer{padding-bottom:40px}.el-transfer-panel__list{margin:0;padding:6px 0;list-style:none;height:246px;overflow:auto;box-sizing:border-box}.el-transfer-panel__list.is-filterable{height:194px;padding-top:0}.el-transfer-panel__item{height:30px;line-height:30px;padding-left:15px;display:block!important}.el-transfer-panel__item.el-checkbox{color:#606266}.el-transfer-panel__item:hover{color:#409EFF}.el-transfer-panel__item.el-checkbox .el-checkbox__label{width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block;box-sizing:border-box;padding-left:24px;line-height:30px}.el-transfer-panel__item .el-checkbox__input{position:absolute;top:8px}.el-transfer-panel__filter{text-align:center;margin:15px;box-sizing:border-box;display:block;width:auto}.el-transfer-panel__filter .el-input__inner{height:32px;width:100%;font-size:12px;display:inline-block;box-sizing:border-box;border-radius:16px;padding-right:10px;padding-left:30px}.el-transfer-panel__filter .el-input__icon{margin-left:5px}.el-transfer-panel .el-transfer-panel__header{height:40px;line-height:40px;background:#F5F7FA;margin:0;padding-left:15px;border-bottom:1px solid #EBEEF5;box-sizing:border-box;color:#000}.el-container,.el-header{-webkit-box-sizing:border-box}.el-transfer-panel .el-transfer-panel__header .el-checkbox{display:block;line-height:40px}.el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label{font-size:16px;color:#303133;font-weight:400}.el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label span{position:absolute;right:15px;color:#909399;font-size:12px;font-weight:400}.el-transfer-panel .el-transfer-panel__footer{height:40px;background:#FFF;margin:0;padding:0;border-top:1px solid #EBEEF5;position:absolute;bottom:0;left:0;width:100%;z-index:1}.el-transfer-panel .el-transfer-panel__footer::after{display:inline-block;height:100%;vertical-align:middle}.el-container,.el-timeline-item__node{display:-ms-flexbox}.el-transfer-panel .el-transfer-panel__footer .el-checkbox{padding-left:20px;color:#606266}.el-transfer-panel .el-transfer-panel__empty{margin:0;height:30px;line-height:30px;padding:6px 15px 0;color:#909399;text-align:center}.el-transfer-panel .el-checkbox__label{padding-left:8px}.el-transfer-panel .el-checkbox__inner{height:14px;width:14px;border-radius:3px}.el-transfer-panel .el-checkbox__inner::after{height:6px;width:3px;left:4px}.el-container{display:flex;flex-direction:row;flex:1;flex-basis:auto;box-sizing:border-box;min-width:0}.el-container.is-vertical,.el-drawer,.el-empty,.el-result{-webkit-box-orient:vertical}.el-container.is-vertical{flex-direction:column}.el-header{padding:0 20px;box-sizing:border-box;flex-shrink:0}.el-aside{overflow:auto;box-sizing:border-box;flex-shrink:0}.el-main{display:block;flex:1;flex-basis:auto;overflow:auto;box-sizing:border-box}.el-footer{padding:0 20px;box-sizing:border-box;flex-shrink:0}.el-timeline{margin:0;list-style:none}.el-timeline .el-timeline-item:last-child .el-timeline-item__tail{display:none}.el-timeline-item{position:relative;padding-bottom:20px}.el-timeline-item__wrapper{position:relative;padding-left:28px;top:-3px}.el-timeline-item__tail{position:absolute;left:4px;height:100%;border-left:2px solid #E4E7ED}.el-timeline-item__icon{color:#FFF;font-size:13px}.el-timeline-item__node{position:absolute;background-color:#E4E7ED;border-radius:50%;display:flex;justify-content:center;align-items:center}.el-image__error,.el-timeline-item__dot{display:-ms-flexbox}.el-timeline-item__node--normal{left:-1px;width:12px;height:12px}.el-timeline-item__node--large{left:-2px;width:14px;height:14px}.el-timeline-item__node--primary{background-color:#409EFF}.el-timeline-item__node--success{background-color:#67C23A}.el-timeline-item__node--warning{background-color:#E6A23C}.el-timeline-item__node--danger{background-color:#F56C6C}.el-timeline-item__node--info{background-color:#909399}.el-timeline-item__dot{position:absolute;display:flex;justify-content:center;align-items:center}.el-timeline-item__content{color:#303133}.el-timeline-item__timestamp{color:#909399;line-height:1;font-size:13px}.el-timeline-item__timestamp.is-top{margin-bottom:8px;padding-top:4px}.el-timeline-item__timestamp.is-bottom{margin-top:8px}.el-link{display:inline-flex;flex-direction:row;align-items:center;justify-content:center;vertical-align:middle;position:relative;text-decoration:none;outline:0;padding:0;font-weight:500}.el-link.is-underline:hover:after{position:absolute;left:0;right:0;height:0;bottom:0;border-bottom:1px solid #409EFF}.el-link.el-link--default:after,.el-link.el-link--primary.is-underline:hover:after,.el-link.el-link--primary:after{border-color:#409EFF}.el-link.is-disabled{cursor:not-allowed}.el-link [class*=el-icon-]+span{margin-left:5px}.el-link.el-link--default{color:#606266}.el-link.el-link--default:hover{color:#409EFF}.el-link.el-link--default.is-disabled{color:#C0C4CC}.el-link.el-link--primary{color:#409EFF}.el-link.el-link--primary:hover{color:#66b1ff}.el-link.el-link--primary.is-disabled{color:#a0cfff}.el-link.el-link--danger.is-underline:hover:after,.el-link.el-link--danger:after{border-color:#F56C6C}.el-link.el-link--danger{color:#F56C6C}.el-link.el-link--danger:hover{color:#f78989}.el-link.el-link--danger.is-disabled{color:#fab6b6}.el-link.el-link--success.is-underline:hover:after,.el-link.el-link--success:after{border-color:#67C23A}.el-link.el-link--success{color:#67C23A}.el-link.el-link--success:hover{color:#85ce61}.el-link.el-link--success.is-disabled{color:#b3e19d}.el-link.el-link--warning.is-underline:hover:after,.el-link.el-link--warning:after{border-color:#E6A23C}.el-link.el-link--warning{color:#E6A23C}.el-link.el-link--warning:hover{color:#ebb563}.el-link.el-link--warning.is-disabled{color:#f3d19e}.el-link.el-link--info.is-underline:hover:after,.el-link.el-link--info:after{border-color:#909399}.el-link.el-link--info{color:#909399}.el-link.el-link--info:hover{color:#a6a9ad}.el-link.el-link--info.is-disabled{color:#c8c9cc}.el-divider{background-color:#DCDFE6;position:relative}.el-divider--horizontal{display:block;height:1px;width:100%;margin:24px 0}.el-divider--vertical{display:inline-block;width:1px;height:1em;margin:0 8px;vertical-align:middle;position:relative}.el-divider__text{position:absolute;background-color:#FFF;padding:0 20px;font-weight:500;color:#303133}.el-image__error,.el-image__placeholder{background:#F5F7FA}.el-divider__text.is-left{left:20px;transform:translateY(-50%)}.el-divider__text.is-center{left:50%;transform:translateX(-50%) translateY(-50%)}.el-divider__text.is-right{right:20px;transform:translateY(-50%)}.el-image__error,.el-image__inner,.el-image__placeholder{width:100%;height:100%}.el-image{position:relative;display:inline-block;overflow:hidden}.el-image__inner{vertical-align:top}.el-image__inner--center{position:relative;top:50%;left:50%;transform:translate(-50%,-50%);display:block}.el-image__error{display:flex;justify-content:center;align-items:center;color:#C0C4CC;vertical-align:middle}.el-image-viewer__wrapper{position:fixed;top:0;right:0;bottom:0;left:0}.el-image-viewer__btn{position:absolute;z-index:1;display:flex;align-items:center;justify-content:center;border-radius:50%;opacity:.8;box-sizing:border-box;-webkit-user-select:none;-moz-user-select:none;user-select:none}.el-button,.el-checkbox,.el-checkbox-button__inner,.el-empty__image img,.el-radio{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.el-image-viewer__close{top:40px;right:40px;width:40px;height:40px;font-size:24px;color:#fff;background-color:#606266}.el-image-viewer__canvas{width:100%;height:100%;display:flex;justify-content:center;align-items:center}.el-image-viewer__actions{left:50%;bottom:30px;transform:translateX(-50%);width:282px;height:44px;padding:0 23px;background-color:#606266;border-color:#fff;border-radius:22px}.el-image-viewer__actions__inner{width:100%;height:100%;text-align:justify;cursor:default;font-size:23px;color:#fff;display:flex;align-items:center;justify-content:space-around}.el-image-viewer__next,.el-image-viewer__prev{width:44px;height:44px;font-size:24px;color:#fff;background-color:#606266;border-color:#fff;top:50%}.el-image-viewer__prev{transform:translateY(-50%);left:40px}.el-image-viewer__next{transform:translateY(-50%);right:40px;text-indent:2px}.el-image-viewer__mask{position:absolute;width:100%;height:100%;top:0;left:0;opacity:.5;background:#000}.viewer-fade-enter-active{animation:viewer-fade-in .3s}.viewer-fade-leave-active{animation:viewer-fade-out .3s}@keyframes viewer-fade-in{0%{transform:translate3d(0,-20px,0);opacity:0}100%{transform:translate3d(0,0,0);opacity:1}}@keyframes viewer-fade-out{0%{transform:translate3d(0,0,0);opacity:1}100%{transform:translate3d(0,-20px,0);opacity:0}}.el-button{display:inline-block;line-height:1;white-space:nowrap;cursor:pointer;background:#FFF;border:1px solid #DCDFE6;color:#606266;-webkit-appearance:none;text-align:center;box-sizing:border-box;outline:0;margin:0;transition:.1s;font-weight:500;padding:12px 20px;font-size:14px;border-radius:4px}.el-button+.el-button,.el-checkbox.is-bordered+.el-checkbox.is-bordered{margin-left:10px}.el-button:focus,.el-button:hover{color:#409EFF;border-color:#c6e2ff;background-color:#ecf5ff}.el-button:active{color:#3a8ee6;border-color:#3a8ee6;outline:0}.el-button::-moz-focus-inner{border:0}.el-button [class*=el-icon-]+span{margin-left:5px}.el-button.is-plain:focus,.el-button.is-plain:hover{background:#FFF;border-color:#409EFF;color:#409EFF}.el-button.is-active,.el-button.is-plain:active{color:#3a8ee6;border-color:#3a8ee6}.el-button.is-plain:active{background:#FFF;outline:0}.el-button.is-disabled,.el-button.is-disabled:focus,.el-button.is-disabled:hover{color:#C0C4CC;cursor:not-allowed;background-image:none;background-color:#FFF;border-color:#EBEEF5}.el-button.is-disabled.el-button--text{background-color:transparent}.el-button.is-disabled.is-plain,.el-button.is-disabled.is-plain:focus,.el-button.is-disabled.is-plain:hover{background-color:#FFF;border-color:#EBEEF5;color:#C0C4CC}.el-button.is-loading{position:relative;pointer-events:none}.el-button.is-loading:before{pointer-events:none;content:'';position:absolute;left:-1px;top:-1px;right:-1px;bottom:-1px;border-radius:inherit;background-color:rgba(255,255,255,.35)}.el-button.is-round{border-radius:20px;padding:12px 23px}.el-button.is-circle{border-radius:50%;padding:12px}.el-button--primary{color:#FFF;background-color:#409EFF;border-color:#409EFF}.el-button--primary:focus,.el-button--primary:hover{background:#66b1ff;border-color:#66b1ff;color:#FFF}.el-button--primary.is-active,.el-button--primary:active{background:#3a8ee6;border-color:#3a8ee6;color:#FFF}.el-button--primary:active{outline:0}.el-button--primary.is-disabled,.el-button--primary.is-disabled:active,.el-button--primary.is-disabled:focus,.el-button--primary.is-disabled:hover{color:#FFF;background-color:#a0cfff;border-color:#a0cfff}.el-button--primary.is-plain{color:#409EFF;background:#ecf5ff;border-color:#b3d8ff}.el-button--primary.is-plain:focus,.el-button--primary.is-plain:hover{background:#409EFF;border-color:#409EFF;color:#FFF}.el-button--primary.is-plain:active{background:#3a8ee6;border-color:#3a8ee6;color:#FFF;outline:0}.el-button--primary.is-plain.is-disabled,.el-button--primary.is-plain.is-disabled:active,.el-button--primary.is-plain.is-disabled:focus,.el-button--primary.is-plain.is-disabled:hover{color:#8cc5ff;background-color:#ecf5ff;border-color:#d9ecff}.el-button--success{color:#FFF;background-color:#67C23A;border-color:#67C23A}.el-button--success:focus,.el-button--success:hover{background:#85ce61;border-color:#85ce61;color:#FFF}.el-button--success.is-active,.el-button--success:active{background:#5daf34;border-color:#5daf34;color:#FFF}.el-button--success:active{outline:0}.el-button--success.is-disabled,.el-button--success.is-disabled:active,.el-button--success.is-disabled:focus,.el-button--success.is-disabled:hover{color:#FFF;background-color:#b3e19d;border-color:#b3e19d}.el-button--success.is-plain{color:#67C23A;background:#f0f9eb;border-color:#c2e7b0}.el-button--success.is-plain:focus,.el-button--success.is-plain:hover{background:#67C23A;border-color:#67C23A;color:#FFF}.el-button--success.is-plain:active{background:#5daf34;border-color:#5daf34;color:#FFF;outline:0}.el-button--success.is-plain.is-disabled,.el-button--success.is-plain.is-disabled:active,.el-button--success.is-plain.is-disabled:focus,.el-button--success.is-plain.is-disabled:hover{color:#a4da89;background-color:#f0f9eb;border-color:#e1f3d8}.el-button--warning{color:#FFF;background-color:#E6A23C;border-color:#E6A23C}.el-button--warning:focus,.el-button--warning:hover{background:#ebb563;border-color:#ebb563;color:#FFF}.el-button--warning.is-active,.el-button--warning:active{background:#cf9236;border-color:#cf9236;color:#FFF}.el-button--warning:active{outline:0}.el-button--warning.is-disabled,.el-button--warning.is-disabled:active,.el-button--warning.is-disabled:focus,.el-button--warning.is-disabled:hover{color:#FFF;background-color:#f3d19e;border-color:#f3d19e}.el-button--warning.is-plain{color:#E6A23C;background:#fdf6ec;border-color:#f5dab1}.el-button--warning.is-plain:focus,.el-button--warning.is-plain:hover{background:#E6A23C;border-color:#E6A23C;color:#FFF}.el-button--warning.is-plain:active{background:#cf9236;border-color:#cf9236;color:#FFF;outline:0}.el-button--warning.is-plain.is-disabled,.el-button--warning.is-plain.is-disabled:active,.el-button--warning.is-plain.is-disabled:focus,.el-button--warning.is-plain.is-disabled:hover{color:#f0c78a;background-color:#fdf6ec;border-color:#faecd8}.el-button--danger{color:#FFF;background-color:#F56C6C;border-color:#F56C6C}.el-button--danger:focus,.el-button--danger:hover{background:#f78989;border-color:#f78989;color:#FFF}.el-button--danger.is-active,.el-button--danger:active{background:#dd6161;border-color:#dd6161;color:#FFF}.el-button--danger:active{outline:0}.el-button--danger.is-disabled,.el-button--danger.is-disabled:active,.el-button--danger.is-disabled:focus,.el-button--danger.is-disabled:hover{color:#FFF;background-color:#fab6b6;border-color:#fab6b6}.el-button--danger.is-plain{color:#F56C6C;background:#fef0f0;border-color:#fbc4c4}.el-button--danger.is-plain:focus,.el-button--danger.is-plain:hover{background:#F56C6C;border-color:#F56C6C;color:#FFF}.el-button--danger.is-plain:active{background:#dd6161;border-color:#dd6161;color:#FFF;outline:0}.el-button--danger.is-plain.is-disabled,.el-button--danger.is-plain.is-disabled:active,.el-button--danger.is-plain.is-disabled:focus,.el-button--danger.is-plain.is-disabled:hover{color:#f9a7a7;background-color:#fef0f0;border-color:#fde2e2}.el-button--info{color:#FFF;background-color:#909399;border-color:#909399}.el-button--info:focus,.el-button--info:hover{background:#a6a9ad;border-color:#a6a9ad;color:#FFF}.el-button--info.is-active,.el-button--info:active{background:#82848a;border-color:#82848a;color:#FFF}.el-button--info:active{outline:0}.el-button--info.is-disabled,.el-button--info.is-disabled:active,.el-button--info.is-disabled:focus,.el-button--info.is-disabled:hover{color:#FFF;background-color:#c8c9cc;border-color:#c8c9cc}.el-button--info.is-plain{color:#909399;background:#f4f4f5;border-color:#d3d4d6}.el-button--info.is-plain:focus,.el-button--info.is-plain:hover{background:#909399;border-color:#909399;color:#FFF}.el-button--info.is-plain:active{background:#82848a;border-color:#82848a;color:#FFF;outline:0}.el-button--info.is-plain.is-disabled,.el-button--info.is-plain.is-disabled:active,.el-button--info.is-plain.is-disabled:focus,.el-button--info.is-plain.is-disabled:hover{color:#bcbec2;background-color:#f4f4f5;border-color:#e9e9eb}.el-button--medium{padding:10px 20px;font-size:14px;border-radius:4px}.el-button--medium.is-round{padding:10px 20px}.el-button--medium.is-circle{padding:10px}.el-button--small{padding:9px 15px;font-size:12px;border-radius:3px}.el-button--small.is-round{padding:9px 15px}.el-button--small.is-circle{padding:9px}.el-button--mini,.el-button--mini.is-round{padding:7px 15px}.el-button--mini{font-size:12px;border-radius:3px}.el-button--mini.is-circle{padding:7px}.el-button--text{border-color:transparent;color:#409EFF;background:0 0;padding-left:0;padding-right:0}.el-button--text:focus,.el-button--text:hover{color:#66b1ff;border-color:transparent;background-color:transparent}.el-button--text:active{color:#3a8ee6;border-color:transparent;background-color:transparent}.el-button--text.is-disabled,.el-button--text.is-disabled:focus,.el-button--text.is-disabled:hover{border-color:transparent}.el-button-group .el-button--danger:last-child,.el-button-group .el-button--danger:not(:first-child):not(:last-child),.el-button-group .el-button--info:last-child,.el-button-group .el-button--info:not(:first-child):not(:last-child),.el-button-group .el-button--primary:last-child,.el-button-group .el-button--primary:not(:first-child):not(:last-child),.el-button-group .el-button--success:last-child,.el-button-group .el-button--success:not(:first-child):not(:last-child),.el-button-group .el-button--warning:last-child,.el-button-group .el-button--warning:not(:first-child):not(:last-child),.el-button-group>.el-dropdown>.el-button{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--danger:first-child,.el-button-group .el-button--danger:not(:first-child):not(:last-child),.el-button-group .el-button--info:first-child,.el-button-group .el-button--info:not(:first-child):not(:last-child),.el-button-group .el-button--primary:first-child,.el-button-group .el-button--primary:not(:first-child):not(:last-child),.el-button-group .el-button--success:first-child,.el-button-group .el-button--success:not(:first-child):not(:last-child),.el-button-group .el-button--warning:first-child,.el-button-group .el-button--warning:not(:first-child):not(:last-child){border-right-color:rgba(255,255,255,.5)}.el-button-group{display:inline-block;vertical-align:middle}.el-button-group::after,.el-button-group::before{display:table}.el-button-group::after{clear:both}.el-button-group>.el-button{float:left;position:relative}.el-button-group>.el-button.is-disabled{z-index:1}.el-button-group>.el-button:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.el-button-group>.el-button:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.el-button-group>.el-button:first-child:last-child{border-radius:4px}.el-button-group>.el-button:first-child:last-child.is-round{border-radius:20px}.el-button-group>.el-button:first-child:last-child.is-circle{border-radius:50%}.el-button-group>.el-button:not(:first-child):not(:last-child){border-radius:0}.el-button-group>.el-button.is-active,.el-button-group>.el-button:not(.is-disabled):active,.el-button-group>.el-button:not(.is-disabled):focus,.el-button-group>.el-button:not(.is-disabled):hover{z-index:1}.el-button-group>.el-dropdown>.el-button{border-top-left-radius:0;border-bottom-left-radius:0}.el-calendar{background-color:#fff}.el-calendar__header{display:flex;justify-content:space-between;padding:12px 20px;border-bottom:1px solid #EBEEF5}.el-backtop,.el-page-header{display:-ms-flexbox}.el-calendar__title{color:#000;align-self:center}.el-calendar__body{padding:12px 20px 35px}.el-calendar-table{table-layout:fixed;width:100%}.el-calendar-table thead th{padding:12px 0;color:#606266;font-weight:400}.el-calendar-table:not(.is-range) td.next,.el-calendar-table:not(.is-range) td.prev{color:#C0C4CC}.el-backtop,.el-calendar-table td.is-today{color:#409EFF}.el-calendar-table td{border-bottom:1px solid #EBEEF5;border-right:1px solid #EBEEF5;vertical-align:top;transition:background-color .2s ease}.el-calendar-table td.is-selected{background-color:#F2F8FE}.el-calendar-table tr:first-child td{border-top:1px solid #EBEEF5}.el-calendar-table tr td:first-child{border-left:1px solid #EBEEF5}.el-calendar-table tr.el-calendar-table__row--hide-border td{border-top:none}.el-calendar-table .el-calendar-day{box-sizing:border-box;padding:8px;height:85px}.el-calendar-table .el-calendar-day:hover{cursor:pointer;background-color:#F2F8FE}.el-backtop{position:fixed;background-color:#FFF;width:40px;height:40px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:20px;box-shadow:0 0 6px rgba(0,0,0,.12);cursor:pointer;z-index:5}.el-backtop:hover{background-color:#F2F6FC}.el-page-header{display:flex;line-height:24px}.el-page-header__left{display:flex;cursor:pointer;margin-right:40px;position:relative}.el-page-header__left::after{position:absolute;width:1px;height:16px;right:-20px;top:50%;transform:translateY(-50%);background-color:#DCDFE6}.el-checkbox,.el-checkbox__input{display:inline-block;position:relative;white-space:nowrap}.el-page-header__left .el-icon-back{font-size:18px;margin-right:6px;align-self:center}.el-page-header__title{font-size:14px;font-weight:500}.el-page-header__content{font-size:18px;color:#303133}.el-checkbox{color:#606266;font-weight:500;font-size:14px;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;margin-right:30px}.el-checkbox.is-bordered{padding:9px 20px 9px 10px;border-radius:4px;border:1px solid #DCDFE6;box-sizing:border-box;line-height:normal;height:40px}.el-checkbox.is-bordered.is-checked{border-color:#409EFF}.el-checkbox.is-bordered.is-disabled{border-color:#EBEEF5;cursor:not-allowed}.el-checkbox.is-bordered.el-checkbox--medium{padding:7px 20px 7px 10px;border-radius:4px;height:36px}.el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__label{line-height:17px;font-size:14px}.el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__inner{height:14px;width:14px}.el-checkbox.is-bordered.el-checkbox--small{padding:5px 15px 5px 10px;border-radius:3px;height:32px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label{line-height:15px;font-size:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner::after{height:6px;width:2px}.el-checkbox.is-bordered.el-checkbox--mini{padding:3px 15px 3px 10px;border-radius:3px;height:28px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__label{line-height:12px;font-size:12px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner::after{height:6px;width:2px}.el-checkbox__input{cursor:pointer;outline:0;line-height:1;vertical-align:middle}.el-checkbox__input.is-disabled .el-checkbox__inner{background-color:#edf2fc;border-color:#DCDFE6;cursor:not-allowed}.el-checkbox__input.is-disabled .el-checkbox__inner::after{cursor:not-allowed;border-color:#C0C4CC}.el-checkbox__input.is-disabled .el-checkbox__inner+.el-checkbox__label{cursor:not-allowed}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner{background-color:#F2F6FC;border-color:#DCDFE6}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after{border-color:#C0C4CC}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner{background-color:#F2F6FC;border-color:#DCDFE6}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner::before{background-color:#C0C4CC;border-color:#C0C4CC}.el-checkbox__input.is-checked .el-checkbox__inner,.el-checkbox__input.is-indeterminate .el-checkbox__inner{background-color:#409EFF;border-color:#409EFF}.el-checkbox__input.is-disabled+span.el-checkbox__label{color:#C0C4CC;cursor:not-allowed}.el-checkbox__input.is-checked .el-checkbox__inner::after{transform:rotate(45deg) scaleY(1)}.el-checkbox__input.is-checked+.el-checkbox__label{color:#409EFF}.el-checkbox__input.is-focus .el-checkbox__inner{border-color:#409EFF}.el-checkbox__input.is-indeterminate .el-checkbox__inner::before{content:'';position:absolute;display:block;background-color:#FFF;height:2px;transform:scale(.5);left:0;right:0;top:5px}.el-checkbox__input.is-indeterminate .el-checkbox__inner::after{display:none}.el-checkbox__inner{display:inline-block;position:relative;border:1px solid #DCDFE6;border-radius:2px;box-sizing:border-box;width:14px;height:14px;background-color:#FFF;z-index:1;transition:border-color .25s cubic-bezier(.71,-.46,.29,1.46),background-color .25s cubic-bezier(.71,-.46,.29,1.46)}.el-checkbox__inner:hover{border-color:#409EFF}.el-checkbox__inner::after{box-sizing:content-box;content:\\\"\\\";border:1px solid #FFF;border-left:0;border-top:0;height:7px;left:4px;position:absolute;top:1px;transform:rotate(45deg) scaleY(0);width:3px;transition:transform .15s ease-in .05s;transform-origin:center}.el-checkbox__original{opacity:0;outline:0;position:absolute;margin:0;width:0;height:0;z-index:-1}.el-checkbox-button,.el-checkbox-button__inner{display:inline-block;position:relative}.el-checkbox__label{display:inline-block;padding-left:10px;line-height:19px;font-size:14px}.el-checkbox:last-of-type{margin-right:0}.el-checkbox-button__inner{line-height:1;font-weight:500;white-space:nowrap;vertical-align:middle;cursor:pointer;background:#FFF;border:1px solid #DCDFE6;border-left:0;color:#606266;-webkit-appearance:none;text-align:center;box-sizing:border-box;outline:0;margin:0;transition:all .3s cubic-bezier(.645,.045,.355,1);padding:12px 20px;font-size:14px;border-radius:0}.el-checkbox-button__inner.is-round{padding:12px 20px}.el-checkbox-button__inner:hover{color:#409EFF}.el-checkbox-button__inner [class*=el-icon-]{line-height:.9}.el-checkbox-button__inner [class*=el-icon-]+span{margin-left:5px}.el-checkbox-button__original{opacity:0;outline:0;position:absolute;margin:0;z-index:-1}.el-radio,.el-radio__inner,.el-radio__input{position:relative;display:inline-block}.el-checkbox-button.is-checked .el-checkbox-button__inner{color:#FFF;background-color:#409EFF;border-color:#409EFF;box-shadow:-1px 0 0 0 #8cc5ff}.el-checkbox-button.is-checked:first-child .el-checkbox-button__inner{border-left-color:#409EFF}.el-checkbox-button.is-disabled .el-checkbox-button__inner{color:#C0C4CC;cursor:not-allowed;background-image:none;background-color:#FFF;border-color:#EBEEF5;box-shadow:none}.el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner{border-left-color:#EBEEF5}.el-checkbox-button:first-child .el-checkbox-button__inner{border-left:1px solid #DCDFE6;border-radius:4px 0 0 4px;box-shadow:none!important}.el-checkbox-button.is-focus .el-checkbox-button__inner{border-color:#409EFF}.el-checkbox-button:last-child .el-checkbox-button__inner{border-radius:0 4px 4px 0}.el-checkbox-button--medium .el-checkbox-button__inner{padding:10px 20px;font-size:14px;border-radius:0}.el-checkbox-button--medium .el-checkbox-button__inner.is-round{padding:10px 20px}.el-checkbox-button--small .el-checkbox-button__inner{padding:9px 15px;font-size:12px;border-radius:0}.el-checkbox-button--small .el-checkbox-button__inner.is-round{padding:9px 15px}.el-checkbox-button--mini .el-checkbox-button__inner{padding:7px 15px;font-size:12px;border-radius:0}.el-checkbox-button--mini .el-checkbox-button__inner.is-round{padding:7px 15px}.el-checkbox-group{font-size:0}.el-avatar,.el-cascader-panel,.el-radio,.el-radio--medium.is-bordered .el-radio__label,.el-radio__label{font-size:14px}.el-radio{color:#606266;font-weight:500;line-height:1;cursor:pointer;white-space:nowrap;outline:0;margin-right:30px}.el-cascader-node>.el-radio,.el-radio:last-child{margin-right:0}.el-radio.is-bordered{padding:12px 20px 0 10px;border-radius:4px;border:1px solid #DCDFE6;box-sizing:border-box;height:40px}.el-cascader-menu,.el-cascader-menu__list,.el-radio__inner{-webkit-box-sizing:border-box}.el-radio.is-bordered.is-checked{border-color:#409EFF}.el-radio.is-bordered.is-disabled{cursor:not-allowed;border-color:#EBEEF5}.el-radio__input.is-disabled .el-radio__inner,.el-radio__input.is-disabled.is-checked .el-radio__inner{background-color:#F5F7FA;border-color:#E4E7ED}.el-radio.is-bordered+.el-radio.is-bordered{margin-left:10px}.el-radio--medium.is-bordered{padding:10px 20px 0 10px;border-radius:4px;height:36px}.el-radio--mini.is-bordered .el-radio__label,.el-radio--small.is-bordered .el-radio__label{font-size:12px}.el-radio--medium.is-bordered .el-radio__inner{height:14px;width:14px}.el-radio--small.is-bordered{padding:8px 15px 0 10px;border-radius:3px;height:32px}.el-radio--small.is-bordered .el-radio__inner{height:12px;width:12px}.el-radio--mini.is-bordered{padding:6px 15px 0 10px;border-radius:3px;height:28px}.el-radio--mini.is-bordered .el-radio__inner{height:12px;width:12px}.el-radio__input{white-space:nowrap;cursor:pointer;outline:0;line-height:1;vertical-align:middle}.el-radio__input.is-disabled .el-radio__inner{cursor:not-allowed}.el-radio__input.is-disabled .el-radio__inner::after{cursor:not-allowed;background-color:#F5F7FA}.el-radio__input.is-disabled .el-radio__inner+.el-radio__label{cursor:not-allowed}.el-radio__input.is-disabled.is-checked .el-radio__inner::after{background-color:#C0C4CC}.el-radio__input.is-disabled+span.el-radio__label{color:#C0C4CC;cursor:not-allowed}.el-radio__input.is-checked .el-radio__inner{border-color:#409EFF;background:#409EFF}.el-radio__input.is-checked .el-radio__inner::after{transform:translate(-50%,-50%) scale(1)}.el-radio__input.is-checked+.el-radio__label{color:#409EFF}.el-radio__input.is-focus .el-radio__inner{border-color:#409EFF}.el-radio__inner{border:1px solid #DCDFE6;border-radius:100%;width:14px;height:14px;background-color:#FFF;cursor:pointer;box-sizing:border-box}.el-radio__inner:hover{border-color:#409EFF}.el-radio__inner::after{width:4px;height:4px;border-radius:100%;background-color:#FFF;content:\\\"\\\";position:absolute;left:50%;top:50%;transform:translate(-50%,-50%) scale(0);transition:transform .15s ease-in}.el-radio__original{opacity:0;outline:0;position:absolute;z-index:-1;top:0;left:0;right:0;bottom:0;margin:0}.el-radio:focus:not(.is-focus):not(:active):not(.is-disabled) .el-radio__inner{box-shadow:0 0 2px 2px #409EFF}.el-radio__label{padding-left:10px}.el-scrollbar{overflow:hidden;position:relative}.el-scrollbar:active>.el-scrollbar__bar,.el-scrollbar:focus>.el-scrollbar__bar,.el-scrollbar:hover>.el-scrollbar__bar{opacity:1;transition:opacity 340ms ease-out}.el-scrollbar__wrap{overflow:scroll;height:100%}.el-scrollbar__wrap--hidden-default{scrollbar-width:none}.el-scrollbar__wrap--hidden-default::-webkit-scrollbar{width:0;height:0}.el-scrollbar__thumb{position:relative;display:block;width:0;height:0;cursor:pointer;border-radius:inherit;background-color:rgba(144,147,153,.3);transition:.3s background-color}.el-scrollbar__thumb:hover{background-color:rgba(144,147,153,.5)}.el-scrollbar__bar{position:absolute;right:2px;bottom:2px;z-index:1;border-radius:4px;opacity:0;transition:opacity 120ms ease-out}.el-scrollbar__bar.is-vertical{width:6px;top:2px}.el-scrollbar__bar.is-vertical>div{width:100%}.el-scrollbar__bar.is-horizontal{height:6px;left:2px}.el-scrollbar__bar.is-horizontal>div{height:100%}.el-cascader-panel{display:flex;border-radius:4px}.el-cascader-panel.is-bordered{border:1px solid #E4E7ED;border-radius:4px}.el-cascader-menu{min-width:180px;box-sizing:border-box;color:#606266;border-right:solid 1px #E4E7ED}.el-cascader-menu:last-child{border-right:none}.el-cascader-menu__wrap{height:204px}.el-cascader-menu__list{position:relative;min-height:100%;margin:0;padding:6px 0;list-style:none;box-sizing:border-box}.el-cascader-menu__hover-zone{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}.el-cascader-menu__empty-text{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);text-align:center;color:#C0C4CC}.el-cascader-node{position:relative;display:flex;align-items:center;padding:0 30px 0 20px;height:34px;line-height:34px;outline:0}.el-cascader-node.is-selectable.in-active-path{color:#606266}.el-cascader-node.in-active-path,.el-cascader-node.is-active,.el-cascader-node.is-selectable.in-checked-path{color:#409EFF;font-weight:700}.el-cascader-node:not(.is-disabled){cursor:pointer}.el-cascader-node:not(.is-disabled):focus,.el-cascader-node:not(.is-disabled):hover{background:#F5F7FA}.el-cascader-node.is-disabled{color:#C0C4CC;cursor:not-allowed}.el-cascader-node__prefix{position:absolute;left:10px}.el-cascader-node__postfix{position:absolute;right:10px}.el-cascader-node__label{flex:1;padding:0 10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.el-cascader-node>.el-radio .el-radio__label{padding-left:0}.el-avatar{display:inline-block;box-sizing:border-box;text-align:center;overflow:hidden;color:#fff;background:#C0C4CC;width:40px;height:40px;line-height:40px}.el-drawer,.el-drawer__body>*{-webkit-box-sizing:border-box}.el-avatar>img{display:block;height:100%;vertical-align:middle}.el-empty__image img,.el-empty__image svg{vertical-align:top;height:100%;width:100%}.el-avatar--circle{border-radius:50%}.el-avatar--square{border-radius:4px}.el-avatar--icon{font-size:18px}.el-avatar--large{width:40px;height:40px;line-height:40px}.el-avatar--medium{width:36px;height:36px;line-height:36px}.el-avatar--small{width:28px;height:28px;line-height:28px}@keyframes el-drawer-fade-in{0%{opacity:0}100%{opacity:1}}@keyframes rtl-drawer-in{0%{transform:translate(100%,0)}100%{transform:translate(0,0)}}@keyframes rtl-drawer-out{0%{transform:translate(0,0)}100%{transform:translate(100%,0)}}@keyframes ltr-drawer-in{0%{transform:translate(-100%,0)}100%{transform:translate(0,0)}}@keyframes ltr-drawer-out{0%{transform:translate(0,0)}100%{transform:translate(-100%,0)}}@keyframes ttb-drawer-in{0%{transform:translate(0,-100%)}100%{transform:translate(0,0)}}@keyframes ttb-drawer-out{0%{transform:translate(0,0)}100%{transform:translate(0,-100%)}}@keyframes btt-drawer-in{0%{transform:translate(0,100%)}100%{transform:translate(0,0)}}@keyframes btt-drawer-out{0%{transform:translate(0,0)}100%{transform:translate(0,100%)}}.el-drawer{position:absolute;box-sizing:border-box;background-color:#FFF;display:flex;flex-direction:column;box-shadow:0 8px 10px -5px rgba(0,0,0,.2),0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12);overflow:hidden;outline:0}.el-drawer.rtl{animation:rtl-drawer-out .3s;right:0}.el-drawer__open .el-drawer.rtl{animation:rtl-drawer-in .3s 1ms}.el-drawer.ltr{animation:ltr-drawer-out .3s;left:0}.el-drawer__open .el-drawer.ltr{animation:ltr-drawer-in .3s 1ms}.el-drawer.ttb{animation:ttb-drawer-out .3s;top:0}.el-drawer__open .el-drawer.ttb{animation:ttb-drawer-in .3s 1ms}.el-drawer.btt{animation:btt-drawer-out .3s;bottom:0}.el-drawer__open .el-drawer.btt{animation:btt-drawer-in .3s 1ms}.el-drawer__wrapper{position:fixed;top:0;right:0;bottom:0;left:0;overflow:hidden;margin:0}.el-drawer__header{align-items:center;color:#72767b;display:flex;margin-bottom:32px;padding:20px 20px 0}.el-drawer__header>:first-child{flex:1}.el-drawer__title{margin:0;flex:1;line-height:inherit;font-size:1rem}.el-drawer__close-btn{border:none;cursor:pointer;font-size:20px;color:inherit;background-color:transparent}.el-drawer__body{flex:1;overflow:auto}.el-drawer__body>*{box-sizing:border-box}.el-drawer.ltr,.el-drawer.rtl{height:100%;top:0;bottom:0}.el-drawer.btt,.el-drawer.ttb{width:100%;left:0;right:0}.el-drawer__container{position:relative;left:0;right:0;top:0;bottom:0;height:100%;width:100%}.el-drawer-fade-enter-active{animation:el-drawer-fade-in .3s}.el-drawer-fade-leave-active{animation:el-drawer-fade-in .3s reverse}.el-statistic{width:100%;box-sizing:border-box;margin:0;padding:0;color:#000;font-variant:tabular-nums;list-style:none;font-feature-settings:\\\"tnum\\\";text-align:center}.el-statistic .head{margin-bottom:4px;color:#606266;font-size:13px}.el-statistic .con{font-family:Sans-serif;display:flex;justify-content:center;align-items:center;color:#303133}.el-statistic .con .number{font-size:20px;padding:0 4px}.el-statistic .con span{display:inline-block;margin:0;line-height:100%}.el-popconfirm__main,.el-skeleton__image{display:-ms-flexbox;-webkit-box-align:center;display:-webkit-box}.el-popconfirm__main{display:flex;align-items:center}.el-popconfirm__icon{margin-right:5px}.el-popconfirm__action{text-align:right;margin:0}@keyframes el-skeleton-loading{0%{background-position:100% 50%}100%{background-position:0 50%}}.el-skeleton{width:100%}.el-skeleton__first-line,.el-skeleton__paragraph{height:16px;margin-top:16px;background:#f2f2f2}.el-skeleton.is-animated .el-skeleton__item{background:linear-gradient(90deg,#f2f2f2 25%,#e6e6e6 37%,#f2f2f2 63%);background-size:400% 100%;animation:el-skeleton-loading 1.4s ease infinite}.el-skeleton__item{background:#f2f2f2;display:inline-block;height:16px;border-radius:4px;width:100%}.el-skeleton__circle{border-radius:50%;width:36px;height:36px;line-height:36px}.el-skeleton__circle--lg{width:40px;height:40px;line-height:40px}.el-skeleton__circle--md{width:28px;height:28px;line-height:28px}.el-skeleton__button{height:40px;width:64px;border-radius:4px}.el-skeleton__p{width:100%}.el-skeleton__p.is-last{width:61%}.el-skeleton__p.is-first{width:33%}.el-skeleton__text{width:100%;height:13px}.el-skeleton__caption{height:12px}.el-skeleton__h1{height:20px}.el-skeleton__h3{height:18px}.el-skeleton__h5{height:16px}.el-skeleton__image{width:unset;display:flex;align-items:center;justify-content:center;border-radius:0}.el-skeleton__image svg{fill:#DCDDE0;width:22%;height:22%}.el-empty{display:flex;justify-content:center;align-items:center;flex-direction:column;text-align:center;box-sizing:border-box;padding:40px 0}.el-empty__image{width:160px}.el-empty__image img{-webkit-user-select:none;-moz-user-select:none;user-select:none;-o-object-fit:contain;object-fit:contain}.el-empty__image svg{fill:#DCDDE0}.el-empty__description{margin-top:20px}.el-empty__description p{margin:0;font-size:14px;color:#909399}.el-empty__bottom,.el-result__title{margin-top:20px}.el-descriptions{box-sizing:border-box;font-size:14px;color:#303133}.el-descriptions__header{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px}.el-descriptions__title{font-size:16px;font-weight:700}.el-descriptions--mini,.el-descriptions--small{font-size:12px}.el-descriptions__body{color:#606266;background-color:#FFF}.el-descriptions__body .el-descriptions__table{border-collapse:collapse;width:100%;table-layout:fixed}.el-descriptions__body .el-descriptions__table .el-descriptions-item__cell{box-sizing:border-box;text-align:left;font-weight:400;line-height:1.5}.el-descriptions__body .el-descriptions__table .el-descriptions-item__cell.is-left{text-align:left}.el-descriptions__body .el-descriptions__table .el-descriptions-item__cell.is-center{text-align:center}.el-descriptions__body .el-descriptions__table .el-descriptions-item__cell.is-right{text-align:right}.el-descriptions .is-bordered{table-layout:auto}.el-descriptions .is-bordered .el-descriptions-item__cell{border:1px solid #EBEEF5;padding:12px 10px}.el-descriptions :not(.is-bordered) .el-descriptions-item__cell{padding-bottom:12px}.el-descriptions--medium.is-bordered .el-descriptions-item__cell{padding:10px}.el-descriptions--medium:not(.is-bordered) .el-descriptions-item__cell{padding-bottom:10px}.el-descriptions--small.is-bordered .el-descriptions-item__cell{padding:8px 10px}.el-descriptions--small:not(.is-bordered) .el-descriptions-item__cell{padding-bottom:8px}.el-descriptions--mini.is-bordered .el-descriptions-item__cell{padding:6px 10px}.el-descriptions--mini:not(.is-bordered) .el-descriptions-item__cell{padding-bottom:6px}.el-descriptions-item{vertical-align:top}.el-descriptions-item__container{display:flex}.el-descriptions-item__container .el-descriptions-item__content,.el-descriptions-item__container .el-descriptions-item__label{display:inline-flex;align-items:baseline}.el-descriptions-item__container .el-descriptions-item__content{flex:1}.el-descriptions-item__label.has-colon::after{content:':';position:relative;top:-.5px}.el-descriptions-item__label.is-bordered-label{font-weight:700;color:#909399;background:#fafafa}.el-descriptions-item__label:not(.is-bordered-label){margin-right:10px}.el-descriptions-item__content{word-break:break-word;overflow-wrap:break-word}.el-result{display:flex;justify-content:center;align-items:center;flex-direction:column;text-align:center;box-sizing:border-box;padding:40px 30px}.el-result__icon svg{width:64px;height:64px}.el-result__title p{margin:0;font-size:20px;color:#303133;line-height:1.3}.el-result__subtitle{margin-top:10px}.el-result__subtitle p{margin:0;font-size:14px;color:#606266;line-height:1.3}.el-result__extra{margin-top:30px}.el-result .icon-success{fill:#67C23A}.el-result .icon-error{fill:#F56C6C}.el-result .icon-info{fill:#909399}.el-result .icon-warning{fill:#E6A23C}\", \"\",{\"version\":3,\"sources\":[\"webpack://./node_modules/element-ui/lib/theme-chalk/index.css\"],\"names\":[],\"mappings\":\"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\",\"sourcesContent\":[\"@charset \\\"UTF-8\\\";@font-face{font-family:element-icons;src:url(fonts/element-icons.woff) format(\\\"woff\\\"),url(fonts/element-icons.ttf) format(\\\"truetype\\\");font-weight:400;font-display:\\\"auto\\\";font-style:normal}[class*=\\\" el-icon-\\\"],[class^=el-icon-]{font-family:element-icons!important;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;vertical-align:baseline;display:inline-block;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.el-icon-ice-cream-round:before{content:\\\"\\\\e6a0\\\"}.el-icon-ice-cream-square:before{content:\\\"\\\\e6a3\\\"}.el-icon-lollipop:before{content:\\\"\\\\e6a4\\\"}.el-icon-potato-strips:before{content:\\\"\\\\e6a5\\\"}.el-icon-milk-tea:before{content:\\\"\\\\e6a6\\\"}.el-icon-ice-drink:before{content:\\\"\\\\e6a7\\\"}.el-icon-ice-tea:before{content:\\\"\\\\e6a9\\\"}.el-icon-coffee:before{content:\\\"\\\\e6aa\\\"}.el-icon-orange:before{content:\\\"\\\\e6ab\\\"}.el-icon-pear:before{content:\\\"\\\\e6ac\\\"}.el-icon-apple:before{content:\\\"\\\\e6ad\\\"}.el-icon-cherry:before{content:\\\"\\\\e6ae\\\"}.el-icon-watermelon:before{content:\\\"\\\\e6af\\\"}.el-icon-grape:before{content:\\\"\\\\e6b0\\\"}.el-icon-refrigerator:before{content:\\\"\\\\e6b1\\\"}.el-icon-goblet-square-full:before{content:\\\"\\\\e6b2\\\"}.el-icon-goblet-square:before{content:\\\"\\\\e6b3\\\"}.el-icon-goblet-full:before{content:\\\"\\\\e6b4\\\"}.el-icon-goblet:before{content:\\\"\\\\e6b5\\\"}.el-icon-cold-drink:before{content:\\\"\\\\e6b6\\\"}.el-icon-coffee-cup:before{content:\\\"\\\\e6b8\\\"}.el-icon-water-cup:before{content:\\\"\\\\e6b9\\\"}.el-icon-hot-water:before{content:\\\"\\\\e6ba\\\"}.el-icon-ice-cream:before{content:\\\"\\\\e6bb\\\"}.el-icon-dessert:before{content:\\\"\\\\e6bc\\\"}.el-icon-sugar:before{content:\\\"\\\\e6bd\\\"}.el-icon-tableware:before{content:\\\"\\\\e6be\\\"}.el-icon-burger:before{content:\\\"\\\\e6bf\\\"}.el-icon-knife-fork:before{content:\\\"\\\\e6c1\\\"}.el-icon-fork-spoon:before{content:\\\"\\\\e6c2\\\"}.el-icon-chicken:before{content:\\\"\\\\e6c3\\\"}.el-icon-food:before{content:\\\"\\\\e6c4\\\"}.el-icon-dish-1:before{content:\\\"\\\\e6c5\\\"}.el-icon-dish:before{content:\\\"\\\\e6c6\\\"}.el-icon-moon-night:before{content:\\\"\\\\e6ee\\\"}.el-icon-moon:before{content:\\\"\\\\e6f0\\\"}.el-icon-cloudy-and-sunny:before{content:\\\"\\\\e6f1\\\"}.el-icon-partly-cloudy:before{content:\\\"\\\\e6f2\\\"}.el-icon-cloudy:before{content:\\\"\\\\e6f3\\\"}.el-icon-sunny:before{content:\\\"\\\\e6f6\\\"}.el-icon-sunset:before{content:\\\"\\\\e6f7\\\"}.el-icon-sunrise-1:before{content:\\\"\\\\e6f8\\\"}.el-icon-sunrise:before{content:\\\"\\\\e6f9\\\"}.el-icon-heavy-rain:before{content:\\\"\\\\e6fa\\\"}.el-icon-lightning:before{content:\\\"\\\\e6fb\\\"}.el-icon-light-rain:before{content:\\\"\\\\e6fc\\\"}.el-icon-wind-power:before{content:\\\"\\\\e6fd\\\"}.el-icon-baseball:before{content:\\\"\\\\e712\\\"}.el-icon-soccer:before{content:\\\"\\\\e713\\\"}.el-icon-football:before{content:\\\"\\\\e715\\\"}.el-icon-basketball:before{content:\\\"\\\\e716\\\"}.el-icon-ship:before{content:\\\"\\\\e73f\\\"}.el-icon-truck:before{content:\\\"\\\\e740\\\"}.el-icon-bicycle:before{content:\\\"\\\\e741\\\"}.el-icon-mobile-phone:before{content:\\\"\\\\e6d3\\\"}.el-icon-service:before{content:\\\"\\\\e6d4\\\"}.el-icon-key:before{content:\\\"\\\\e6e2\\\"}.el-icon-unlock:before{content:\\\"\\\\e6e4\\\"}.el-icon-lock:before{content:\\\"\\\\e6e5\\\"}.el-icon-watch:before{content:\\\"\\\\e6fe\\\"}.el-icon-watch-1:before{content:\\\"\\\\e6ff\\\"}.el-icon-timer:before{content:\\\"\\\\e702\\\"}.el-icon-alarm-clock:before{content:\\\"\\\\e703\\\"}.el-icon-map-location:before{content:\\\"\\\\e704\\\"}.el-icon-delete-location:before{content:\\\"\\\\e705\\\"}.el-icon-add-location:before{content:\\\"\\\\e706\\\"}.el-icon-location-information:before{content:\\\"\\\\e707\\\"}.el-icon-location-outline:before{content:\\\"\\\\e708\\\"}.el-icon-location:before{content:\\\"\\\\e79e\\\"}.el-icon-place:before{content:\\\"\\\\e709\\\"}.el-icon-discover:before{content:\\\"\\\\e70a\\\"}.el-icon-first-aid-kit:before{content:\\\"\\\\e70b\\\"}.el-icon-trophy-1:before{content:\\\"\\\\e70c\\\"}.el-icon-trophy:before{content:\\\"\\\\e70d\\\"}.el-icon-medal:before{content:\\\"\\\\e70e\\\"}.el-icon-medal-1:before{content:\\\"\\\\e70f\\\"}.el-icon-stopwatch:before{content:\\\"\\\\e710\\\"}.el-icon-mic:before{content:\\\"\\\\e711\\\"}.el-icon-copy-document:before{content:\\\"\\\\e718\\\"}.el-icon-full-screen:before{content:\\\"\\\\e719\\\"}.el-icon-switch-button:before{content:\\\"\\\\e71b\\\"}.el-icon-aim:before{content:\\\"\\\\e71c\\\"}.el-icon-crop:before{content:\\\"\\\\e71d\\\"}.el-icon-odometer:before{content:\\\"\\\\e71e\\\"}.el-icon-time:before{content:\\\"\\\\e71f\\\"}.el-icon-bangzhu:before{content:\\\"\\\\e724\\\"}.el-icon-close-notification:before{content:\\\"\\\\e726\\\"}.el-icon-microphone:before{content:\\\"\\\\e727\\\"}.el-icon-turn-off-microphone:before{content:\\\"\\\\e728\\\"}.el-icon-position:before{content:\\\"\\\\e729\\\"}.el-icon-postcard:before{content:\\\"\\\\e72a\\\"}.el-icon-message:before{content:\\\"\\\\e72b\\\"}.el-icon-chat-line-square:before{content:\\\"\\\\e72d\\\"}.el-icon-chat-dot-square:before{content:\\\"\\\\e72e\\\"}.el-icon-chat-dot-round:before{content:\\\"\\\\e72f\\\"}.el-icon-chat-square:before{content:\\\"\\\\e730\\\"}.el-icon-chat-line-round:before{content:\\\"\\\\e731\\\"}.el-icon-chat-round:before{content:\\\"\\\\e732\\\"}.el-icon-set-up:before{content:\\\"\\\\e733\\\"}.el-icon-turn-off:before{content:\\\"\\\\e734\\\"}.el-icon-open:before{content:\\\"\\\\e735\\\"}.el-icon-connection:before{content:\\\"\\\\e736\\\"}.el-icon-link:before{content:\\\"\\\\e737\\\"}.el-icon-cpu:before{content:\\\"\\\\e738\\\"}.el-icon-thumb:before{content:\\\"\\\\e739\\\"}.el-icon-female:before{content:\\\"\\\\e73a\\\"}.el-icon-male:before{content:\\\"\\\\e73b\\\"}.el-icon-guide:before{content:\\\"\\\\e73c\\\"}.el-icon-news:before{content:\\\"\\\\e73e\\\"}.el-icon-price-tag:before{content:\\\"\\\\e744\\\"}.el-icon-discount:before{content:\\\"\\\\e745\\\"}.el-icon-wallet:before{content:\\\"\\\\e747\\\"}.el-icon-coin:before{content:\\\"\\\\e748\\\"}.el-icon-money:before{content:\\\"\\\\e749\\\"}.el-icon-bank-card:before{content:\\\"\\\\e74a\\\"}.el-icon-box:before{content:\\\"\\\\e74b\\\"}.el-icon-present:before{content:\\\"\\\\e74c\\\"}.el-icon-sell:before{content:\\\"\\\\e6d5\\\"}.el-icon-sold-out:before{content:\\\"\\\\e6d6\\\"}.el-icon-shopping-bag-2:before{content:\\\"\\\\e74d\\\"}.el-icon-shopping-bag-1:before{content:\\\"\\\\e74e\\\"}.el-icon-shopping-cart-2:before{content:\\\"\\\\e74f\\\"}.el-icon-shopping-cart-1:before{content:\\\"\\\\e750\\\"}.el-icon-shopping-cart-full:before{content:\\\"\\\\e751\\\"}.el-icon-smoking:before{content:\\\"\\\\e752\\\"}.el-icon-no-smoking:before{content:\\\"\\\\e753\\\"}.el-icon-house:before{content:\\\"\\\\e754\\\"}.el-icon-table-lamp:before{content:\\\"\\\\e755\\\"}.el-icon-school:before{content:\\\"\\\\e756\\\"}.el-icon-office-building:before{content:\\\"\\\\e757\\\"}.el-icon-toilet-paper:before{content:\\\"\\\\e758\\\"}.el-icon-notebook-2:before{content:\\\"\\\\e759\\\"}.el-icon-notebook-1:before{content:\\\"\\\\e75a\\\"}.el-icon-files:before{content:\\\"\\\\e75b\\\"}.el-icon-collection:before{content:\\\"\\\\e75c\\\"}.el-icon-receiving:before{content:\\\"\\\\e75d\\\"}.el-icon-suitcase-1:before{content:\\\"\\\\e760\\\"}.el-icon-suitcase:before{content:\\\"\\\\e761\\\"}.el-icon-film:before{content:\\\"\\\\e763\\\"}.el-icon-collection-tag:before{content:\\\"\\\\e765\\\"}.el-icon-data-analysis:before{content:\\\"\\\\e766\\\"}.el-icon-pie-chart:before{content:\\\"\\\\e767\\\"}.el-icon-data-board:before{content:\\\"\\\\e768\\\"}.el-icon-data-line:before{content:\\\"\\\\e76d\\\"}.el-icon-reading:before{content:\\\"\\\\e769\\\"}.el-icon-magic-stick:before{content:\\\"\\\\e76a\\\"}.el-icon-coordinate:before{content:\\\"\\\\e76b\\\"}.el-icon-mouse:before{content:\\\"\\\\e76c\\\"}.el-icon-brush:before{content:\\\"\\\\e76e\\\"}.el-icon-headset:before{content:\\\"\\\\e76f\\\"}.el-icon-umbrella:before{content:\\\"\\\\e770\\\"}.el-icon-scissors:before{content:\\\"\\\\e771\\\"}.el-icon-mobile:before{content:\\\"\\\\e773\\\"}.el-icon-attract:before{content:\\\"\\\\e774\\\"}.el-icon-monitor:before{content:\\\"\\\\e775\\\"}.el-icon-search:before{content:\\\"\\\\e778\\\"}.el-icon-takeaway-box:before{content:\\\"\\\\e77a\\\"}.el-icon-paperclip:before{content:\\\"\\\\e77d\\\"}.el-icon-printer:before{content:\\\"\\\\e77e\\\"}.el-icon-document-add:before{content:\\\"\\\\e782\\\"}.el-icon-document:before{content:\\\"\\\\e785\\\"}.el-icon-document-checked:before{content:\\\"\\\\e786\\\"}.el-icon-document-copy:before{content:\\\"\\\\e787\\\"}.el-icon-document-delete:before{content:\\\"\\\\e788\\\"}.el-icon-document-remove:before{content:\\\"\\\\e789\\\"}.el-icon-tickets:before{content:\\\"\\\\e78b\\\"}.el-icon-folder-checked:before{content:\\\"\\\\e77f\\\"}.el-icon-folder-delete:before{content:\\\"\\\\e780\\\"}.el-icon-folder-remove:before{content:\\\"\\\\e781\\\"}.el-icon-folder-add:before{content:\\\"\\\\e783\\\"}.el-icon-folder-opened:before{content:\\\"\\\\e784\\\"}.el-icon-folder:before{content:\\\"\\\\e78a\\\"}.el-icon-edit-outline:before{content:\\\"\\\\e764\\\"}.el-icon-edit:before{content:\\\"\\\\e78c\\\"}.el-icon-date:before{content:\\\"\\\\e78e\\\"}.el-icon-c-scale-to-original:before{content:\\\"\\\\e7c6\\\"}.el-icon-view:before{content:\\\"\\\\e6ce\\\"}.el-icon-loading:before{content:\\\"\\\\e6cf\\\"}.el-icon-rank:before{content:\\\"\\\\e6d1\\\"}.el-icon-sort-down:before{content:\\\"\\\\e7c4\\\"}.el-icon-sort-up:before{content:\\\"\\\\e7c5\\\"}.el-icon-sort:before{content:\\\"\\\\e6d2\\\"}.el-icon-finished:before{content:\\\"\\\\e6cd\\\"}.el-icon-refresh-left:before{content:\\\"\\\\e6c7\\\"}.el-icon-refresh-right:before{content:\\\"\\\\e6c8\\\"}.el-icon-refresh:before{content:\\\"\\\\e6d0\\\"}.el-icon-video-play:before{content:\\\"\\\\e7c0\\\"}.el-icon-video-pause:before{content:\\\"\\\\e7c1\\\"}.el-icon-d-arrow-right:before{content:\\\"\\\\e6dc\\\"}.el-icon-d-arrow-left:before{content:\\\"\\\\e6dd\\\"}.el-icon-arrow-up:before{content:\\\"\\\\e6e1\\\"}.el-icon-arrow-down:before{content:\\\"\\\\e6df\\\"}.el-icon-arrow-right:before{content:\\\"\\\\e6e0\\\"}.el-icon-arrow-left:before{content:\\\"\\\\e6de\\\"}.el-icon-top-right:before{content:\\\"\\\\e6e7\\\"}.el-icon-top-left:before{content:\\\"\\\\e6e8\\\"}.el-icon-top:before{content:\\\"\\\\e6e6\\\"}.el-icon-bottom:before{content:\\\"\\\\e6eb\\\"}.el-icon-right:before{content:\\\"\\\\e6e9\\\"}.el-icon-back:before{content:\\\"\\\\e6ea\\\"}.el-icon-bottom-right:before{content:\\\"\\\\e6ec\\\"}.el-icon-bottom-left:before{content:\\\"\\\\e6ed\\\"}.el-icon-caret-top:before{content:\\\"\\\\e78f\\\"}.el-icon-caret-bottom:before{content:\\\"\\\\e790\\\"}.el-icon-caret-right:before{content:\\\"\\\\e791\\\"}.el-icon-caret-left:before{content:\\\"\\\\e792\\\"}.el-icon-d-caret:before{content:\\\"\\\\e79a\\\"}.el-icon-share:before{content:\\\"\\\\e793\\\"}.el-icon-menu:before{content:\\\"\\\\e798\\\"}.el-icon-s-grid:before{content:\\\"\\\\e7a6\\\"}.el-icon-s-check:before{content:\\\"\\\\e7a7\\\"}.el-icon-s-data:before{content:\\\"\\\\e7a8\\\"}.el-icon-s-opportunity:before{content:\\\"\\\\e7aa\\\"}.el-icon-s-custom:before{content:\\\"\\\\e7ab\\\"}.el-icon-s-claim:before{content:\\\"\\\\e7ad\\\"}.el-icon-s-finance:before{content:\\\"\\\\e7ae\\\"}.el-icon-s-comment:before{content:\\\"\\\\e7af\\\"}.el-icon-s-flag:before{content:\\\"\\\\e7b0\\\"}.el-icon-s-marketing:before{content:\\\"\\\\e7b1\\\"}.el-icon-s-shop:before{content:\\\"\\\\e7b4\\\"}.el-icon-s-open:before{content:\\\"\\\\e7b5\\\"}.el-icon-s-management:before{content:\\\"\\\\e7b6\\\"}.el-icon-s-ticket:before{content:\\\"\\\\e7b7\\\"}.el-icon-s-release:before{content:\\\"\\\\e7b8\\\"}.el-icon-s-home:before{content:\\\"\\\\e7b9\\\"}.el-icon-s-promotion:before{content:\\\"\\\\e7ba\\\"}.el-icon-s-operation:before{content:\\\"\\\\e7bb\\\"}.el-icon-s-unfold:before{content:\\\"\\\\e7bc\\\"}.el-icon-s-fold:before{content:\\\"\\\\e7a9\\\"}.el-icon-s-platform:before{content:\\\"\\\\e7bd\\\"}.el-icon-s-order:before{content:\\\"\\\\e7be\\\"}.el-icon-s-cooperation:before{content:\\\"\\\\e7bf\\\"}.el-icon-bell:before{content:\\\"\\\\e725\\\"}.el-icon-message-solid:before{content:\\\"\\\\e799\\\"}.el-icon-video-camera:before{content:\\\"\\\\e772\\\"}.el-icon-video-camera-solid:before{content:\\\"\\\\e796\\\"}.el-icon-camera:before{content:\\\"\\\\e779\\\"}.el-icon-camera-solid:before{content:\\\"\\\\e79b\\\"}.el-icon-download:before{content:\\\"\\\\e77c\\\"}.el-icon-upload2:before{content:\\\"\\\\e77b\\\"}.el-icon-upload:before{content:\\\"\\\\e7c3\\\"}.el-icon-picture-outline-round:before{content:\\\"\\\\e75f\\\"}.el-icon-picture-outline:before{content:\\\"\\\\e75e\\\"}.el-icon-picture:before{content:\\\"\\\\e79f\\\"}.el-icon-close:before{content:\\\"\\\\e6db\\\"}.el-icon-check:before{content:\\\"\\\\e6da\\\"}.el-icon-plus:before{content:\\\"\\\\e6d9\\\"}.el-icon-minus:before{content:\\\"\\\\e6d8\\\"}.el-icon-help:before{content:\\\"\\\\e73d\\\"}.el-icon-s-help:before{content:\\\"\\\\e7b3\\\"}.el-icon-circle-close:before{content:\\\"\\\\e78d\\\"}.el-icon-circle-check:before{content:\\\"\\\\e720\\\"}.el-icon-circle-plus-outline:before{content:\\\"\\\\e723\\\"}.el-icon-remove-outline:before{content:\\\"\\\\e722\\\"}.el-icon-zoom-out:before{content:\\\"\\\\e776\\\"}.el-icon-zoom-in:before{content:\\\"\\\\e777\\\"}.el-icon-error:before{content:\\\"\\\\e79d\\\"}.el-icon-success:before{content:\\\"\\\\e79c\\\"}.el-icon-circle-plus:before{content:\\\"\\\\e7a0\\\"}.el-icon-remove:before{content:\\\"\\\\e7a2\\\"}.el-icon-info:before{content:\\\"\\\\e7a1\\\"}.el-icon-question:before{content:\\\"\\\\e7a4\\\"}.el-icon-warning-outline:before{content:\\\"\\\\e6c9\\\"}.el-icon-warning:before{content:\\\"\\\\e7a3\\\"}.el-icon-goods:before{content:\\\"\\\\e7c2\\\"}.el-icon-s-goods:before{content:\\\"\\\\e7b2\\\"}.el-icon-star-off:before{content:\\\"\\\\e717\\\"}.el-icon-star-on:before{content:\\\"\\\\e797\\\"}.el-icon-more-outline:before{content:\\\"\\\\e6cc\\\"}.el-icon-more:before{content:\\\"\\\\e794\\\"}.el-icon-phone-outline:before{content:\\\"\\\\e6cb\\\"}.el-icon-phone:before{content:\\\"\\\\e795\\\"}.el-icon-user:before{content:\\\"\\\\e6e3\\\"}.el-icon-user-solid:before{content:\\\"\\\\e7a5\\\"}.el-icon-setting:before{content:\\\"\\\\e6ca\\\"}.el-icon-s-tools:before{content:\\\"\\\\e7ac\\\"}.el-icon-delete:before{content:\\\"\\\\e6d7\\\"}.el-icon-delete-solid:before{content:\\\"\\\\e7c9\\\"}.el-icon-eleme:before{content:\\\"\\\\e7c7\\\"}.el-icon-platform-eleme:before{content:\\\"\\\\e7ca\\\"}.el-icon-loading{-webkit-animation:rotating 2s linear infinite;animation:rotating 2s linear infinite}.el-icon--right{margin-left:5px}.el-icon--left{margin-right:5px}@-webkit-keyframes rotating{0%{-webkit-transform:rotateZ(0);transform:rotateZ(0)}100%{-webkit-transform:rotateZ(360deg);transform:rotateZ(360deg)}}@keyframes rotating{0%{-webkit-transform:rotateZ(0);transform:rotateZ(0)}100%{-webkit-transform:rotateZ(360deg);transform:rotateZ(360deg)}}.el-pagination{white-space:nowrap;padding:2px 5px;color:#303133;font-weight:700}.el-pagination::after,.el-pagination::before{display:table;content:\\\"\\\"}.el-pagination::after{clear:both}.el-pagination button,.el-pagination span:not([class*=suffix]){display:inline-block;font-size:13px;min-width:35.5px;height:28px;line-height:28px;vertical-align:top;-webkit-box-sizing:border-box;box-sizing:border-box}.el-pagination .el-input__inner{text-align:center;-moz-appearance:textfield;line-height:normal}.el-pagination .el-input__suffix{right:0;-webkit-transform:scale(.8);transform:scale(.8)}.el-pagination .el-select .el-input{width:100px;margin:0 5px}.el-pagination .el-select .el-input .el-input__inner{padding-right:25px;border-radius:3px}.el-pagination button{border:none;padding:0 6px;background:0 0}.el-pagination button:focus{outline:0}.el-pagination button:hover{color:#409EFF}.el-pagination button:disabled{color:#C0C4CC;background-color:#FFF;cursor:not-allowed}.el-pagination .btn-next,.el-pagination .btn-prev{background:center center no-repeat #FFF;background-size:16px;cursor:pointer;margin:0;color:#303133}.el-pagination .btn-next .el-icon,.el-pagination .btn-prev .el-icon{display:block;font-size:12px;font-weight:700}.el-pagination .btn-prev{padding-right:12px}.el-pagination .btn-next{padding-left:12px}.el-pagination .el-pager li.disabled{color:#C0C4CC;cursor:not-allowed}.el-pager li,.el-pager li.btn-quicknext:hover,.el-pager li.btn-quickprev:hover{cursor:pointer}.el-pagination--small .btn-next,.el-pagination--small .btn-prev,.el-pagination--small .el-pager li,.el-pagination--small .el-pager li.btn-quicknext,.el-pagination--small .el-pager li.btn-quickprev,.el-pagination--small .el-pager li:last-child{border-color:transparent;font-size:12px;line-height:22px;height:22px;min-width:22px}.el-pagination--small .arrow.disabled{visibility:hidden}.el-pagination--small .more::before,.el-pagination--small li.more::before{line-height:24px}.el-pagination--small button,.el-pagination--small span:not([class*=suffix]){height:22px;line-height:22px}.el-pagination--small .el-pagination__editor,.el-pagination--small .el-pagination__editor.el-input .el-input__inner{height:22px}.el-pagination__sizes{margin:0 10px 0 0;font-weight:400;color:#606266}.el-pagination__sizes .el-input .el-input__inner{font-size:13px;padding-left:8px}.el-pagination__sizes .el-input .el-input__inner:hover{border-color:#409EFF}.el-pagination__total{margin-right:10px;font-weight:400;color:#606266}.el-pagination__jump{margin-left:24px;font-weight:400;color:#606266}.el-pagination__jump .el-input__inner{padding:0 3px}.el-pagination__rightwrapper{float:right}.el-pagination__editor{line-height:18px;padding:0 2px;height:28px;text-align:center;margin:0 2px;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:3px}.el-pager,.el-pagination.is-background .btn-next,.el-pagination.is-background .btn-prev{padding:0}.el-dialog,.el-pager li{-webkit-box-sizing:border-box}.el-pagination__editor.el-input{width:50px}.el-pagination__editor.el-input .el-input__inner{height:28px}.el-pagination__editor .el-input__inner::-webkit-inner-spin-button,.el-pagination__editor .el-input__inner::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.el-pagination.is-background .btn-next,.el-pagination.is-background .btn-prev,.el-pagination.is-background .el-pager li{margin:0 5px;background-color:#f4f4f5;color:#606266;min-width:30px;border-radius:2px}.el-pagination.is-background .btn-next.disabled,.el-pagination.is-background .btn-next:disabled,.el-pagination.is-background .btn-prev.disabled,.el-pagination.is-background .btn-prev:disabled,.el-pagination.is-background .el-pager li.disabled{color:#C0C4CC}.el-pagination.is-background .el-pager li:not(.disabled):hover{color:#409EFF}.el-pagination.is-background .el-pager li:not(.disabled).active{background-color:#409EFF;color:#FFF}.el-pagination.is-background.el-pagination--small .btn-next,.el-pagination.is-background.el-pagination--small .btn-prev,.el-pagination.is-background.el-pagination--small .el-pager li{margin:0 3px;min-width:22px}.el-pager,.el-pager li{vertical-align:top;margin:0;display:inline-block}.el-pager{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;list-style:none;font-size:0}.el-pager .more::before{line-height:30px}.el-pager li{padding:0 4px;background:#FFF;font-size:13px;min-width:35.5px;height:28px;line-height:28px;box-sizing:border-box;text-align:center}.el-pager li.btn-quicknext,.el-pager li.btn-quickprev{line-height:28px;color:#303133}.el-pager li.btn-quicknext.disabled,.el-pager li.btn-quickprev.disabled{color:#C0C4CC}.el-pager li.active+li{border-left:0}.el-pager li:hover{color:#409EFF}.el-pager li.active{color:#409EFF;cursor:default}@-webkit-keyframes v-modal-in{0%{opacity:0}}@-webkit-keyframes v-modal-out{100%{opacity:0}}.el-dialog{position:relative;margin:0 auto 50px;background:#FFF;border-radius:2px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.3);box-shadow:0 1px 3px rgba(0,0,0,.3);box-sizing:border-box;width:50%}.el-dialog.is-fullscreen{width:100%;margin-top:0;margin-bottom:0;height:100%;overflow:auto}.el-dialog__wrapper{position:fixed;top:0;right:0;bottom:0;left:0;overflow:auto;margin:0}.el-dialog__header{padding:20px 20px 10px}.el-dialog__headerbtn{position:absolute;top:20px;right:20px;padding:0;background:0 0;border:none;outline:0;cursor:pointer;font-size:16px}.el-dialog__headerbtn .el-dialog__close{color:#909399}.el-dialog__headerbtn:focus .el-dialog__close,.el-dialog__headerbtn:hover .el-dialog__close{color:#409EFF}.el-dialog__title{line-height:24px;font-size:18px;color:#303133}.el-dialog__body{padding:30px 20px;color:#606266;font-size:14px;word-break:break-all}.el-dialog__footer{padding:10px 20px 20px;text-align:right;-webkit-box-sizing:border-box;box-sizing:border-box}.el-dialog--center{text-align:center}.el-dialog--center .el-dialog__body{text-align:initial;padding:25px 25px 30px}.el-dialog--center .el-dialog__footer{text-align:inherit}.dialog-fade-enter-active{-webkit-animation:dialog-fade-in .3s;animation:dialog-fade-in .3s}.dialog-fade-leave-active{-webkit-animation:dialog-fade-out .3s;animation:dialog-fade-out .3s}@-webkit-keyframes dialog-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@keyframes dialog-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@-webkit-keyframes dialog-fade-out{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}100%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}@keyframes dialog-fade-out{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}100%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}.el-autocomplete{position:relative;display:inline-block}.el-autocomplete-suggestion{margin:5px 0;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);border-radius:4px;border:1px solid #E4E7ED;-webkit-box-sizing:border-box;box-sizing:border-box;background-color:#FFF}.el-autocomplete-suggestion__wrap{max-height:280px;padding:10px 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-autocomplete-suggestion__list{margin:0;padding:0}.el-autocomplete-suggestion li{padding:0 20px;margin:0;line-height:34px;cursor:pointer;color:#606266;font-size:14px;list-style:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.el-autocomplete-suggestion li.highlighted,.el-autocomplete-suggestion li:hover{background-color:#F5F7FA}.el-autocomplete-suggestion li.divider{margin-top:6px;border-top:1px solid #000}.el-autocomplete-suggestion li.divider:last-child{margin-bottom:-6px}.el-autocomplete-suggestion.is-loading li{text-align:center;height:100px;line-height:100px;font-size:20px;color:#999}.el-autocomplete-suggestion.is-loading li::after{display:inline-block;content:\\\"\\\";height:100%;vertical-align:middle}.el-autocomplete-suggestion.is-loading li:hover{background-color:#FFF}.el-autocomplete-suggestion.is-loading .el-icon-loading{vertical-align:middle}.el-dropdown{display:inline-block;position:relative;color:#606266;font-size:14px}.el-dropdown .el-button-group{display:block}.el-dropdown .el-button-group .el-button{float:none}.el-dropdown .el-dropdown__caret-button{padding-left:5px;padding-right:5px;position:relative;border-left:none}.el-dropdown .el-dropdown__caret-button::before{content:'';position:absolute;display:block;width:1px;top:5px;bottom:5px;left:0;background:rgba(255,255,255,.5)}.el-dropdown .el-dropdown__caret-button.el-button--default::before{background:rgba(220,223,230,.5)}.el-dropdown .el-dropdown__caret-button:hover:not(.is-disabled)::before{top:0;bottom:0}.el-dropdown .el-dropdown__caret-button .el-dropdown__icon{padding-left:0}.el-dropdown__icon{font-size:12px;margin:0 3px}.el-dropdown .el-dropdown-selfdefine:focus:active,.el-dropdown .el-dropdown-selfdefine:focus:not(.focusing){outline-width:0}.el-dropdown [disabled]{cursor:not-allowed;color:#bbb}.el-dropdown-menu{position:absolute;top:0;left:0;z-index:10;padding:10px 0;margin:5px 0;background-color:#FFF;border:1px solid #EBEEF5;border-radius:4px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-dropdown-menu__item,.el-menu-item{font-size:14px;padding:0 20px;cursor:pointer}.el-dropdown-menu__item{list-style:none;line-height:36px;margin:0;color:#606266;outline:0}.el-dropdown-menu__item:focus,.el-dropdown-menu__item:not(.is-disabled):hover{background-color:#ecf5ff;color:#66b1ff}.el-dropdown-menu__item i{margin-right:5px}.el-dropdown-menu__item--divided{position:relative;margin-top:6px;border-top:1px solid #EBEEF5}.el-dropdown-menu__item--divided:before{content:'';height:6px;display:block;margin:0 -20px;background-color:#FFF}.el-dropdown-menu__item.is-disabled{cursor:default;color:#bbb;pointer-events:none}.el-dropdown-menu--medium{padding:6px 0}.el-dropdown-menu--medium .el-dropdown-menu__item{line-height:30px;padding:0 17px;font-size:14px}.el-dropdown-menu--medium .el-dropdown-menu__item.el-dropdown-menu__item--divided{margin-top:6px}.el-dropdown-menu--medium .el-dropdown-menu__item.el-dropdown-menu__item--divided:before{height:6px;margin:0 -17px}.el-dropdown-menu--small{padding:6px 0}.el-dropdown-menu--small .el-dropdown-menu__item{line-height:27px;padding:0 15px;font-size:13px}.el-dropdown-menu--small .el-dropdown-menu__item.el-dropdown-menu__item--divided{margin-top:4px}.el-dropdown-menu--small .el-dropdown-menu__item.el-dropdown-menu__item--divided:before{height:4px;margin:0 -15px}.el-dropdown-menu--mini{padding:3px 0}.el-dropdown-menu--mini .el-dropdown-menu__item{line-height:24px;padding:0 10px;font-size:12px}.el-dropdown-menu--mini .el-dropdown-menu__item.el-dropdown-menu__item--divided{margin-top:3px}.el-dropdown-menu--mini .el-dropdown-menu__item.el-dropdown-menu__item--divided:before{height:3px;margin:0 -10px}.el-menu{border-right:solid 1px #e6e6e6;list-style:none;position:relative;margin:0;padding-left:0;background-color:#FFF}.el-menu--horizontal>.el-menu-item:not(.is-disabled):focus,.el-menu--horizontal>.el-menu-item:not(.is-disabled):hover,.el-menu--horizontal>.el-submenu .el-submenu__title:hover{background-color:#fff}.el-menu::after,.el-menu::before{display:table;content:\\\"\\\"}.el-breadcrumb__item:last-child .el-breadcrumb__separator,.el-menu--collapse>.el-menu-item .el-submenu__icon-arrow,.el-menu--collapse>.el-submenu>.el-submenu__title .el-submenu__icon-arrow{display:none}.el-menu::after{clear:both}.el-menu.el-menu--horizontal{border-bottom:solid 1px #e6e6e6}.el-menu--horizontal{border-right:none}.el-menu--horizontal>.el-menu-item{float:left;height:60px;line-height:60px;margin:0;border-bottom:2px solid transparent;color:#909399}.el-menu--horizontal>.el-menu-item a,.el-menu--horizontal>.el-menu-item a:hover{color:inherit}.el-menu--horizontal>.el-submenu{float:left}.el-menu--horizontal>.el-submenu:focus,.el-menu--horizontal>.el-submenu:hover{outline:0}.el-menu--horizontal>.el-submenu:focus .el-submenu__title,.el-menu--horizontal>.el-submenu:hover .el-submenu__title{color:#303133}.el-menu--horizontal>.el-submenu.is-active .el-submenu__title{border-bottom:2px solid #409EFF;color:#303133}.el-menu--horizontal>.el-submenu .el-submenu__title{height:60px;line-height:60px;border-bottom:2px solid transparent;color:#909399}.el-menu--horizontal>.el-submenu .el-submenu__icon-arrow{position:static;vertical-align:middle;margin-left:8px;margin-top:-3px}.el-menu--collapse .el-submenu,.el-menu-item{position:relative}.el-menu--horizontal .el-menu .el-menu-item,.el-menu--horizontal .el-menu .el-submenu__title{background-color:#FFF;float:none;height:36px;line-height:36px;padding:0 10px;color:#909399}.el-menu--horizontal .el-menu .el-menu-item.is-active,.el-menu--horizontal .el-menu .el-submenu.is-active>.el-submenu__title{color:#303133}.el-menu--horizontal .el-menu-item:not(.is-disabled):focus,.el-menu--horizontal .el-menu-item:not(.is-disabled):hover{outline:0;color:#303133}.el-menu--horizontal>.el-menu-item.is-active{border-bottom:2px solid #409EFF;color:#303133}.el-menu--collapse{width:64px}.el-menu--collapse>.el-menu-item [class^=el-icon-],.el-menu--collapse>.el-submenu>.el-submenu__title [class^=el-icon-]{margin:0;vertical-align:middle;width:24px;text-align:center}.el-menu--collapse>.el-menu-item span,.el-menu--collapse>.el-submenu>.el-submenu__title span{height:0;width:0;overflow:hidden;visibility:hidden;display:inline-block}.el-menu-item,.el-submenu__title{height:56px;line-height:56px;list-style:none}.el-menu--collapse>.el-menu-item.is-active i{color:inherit}.el-menu--collapse .el-menu .el-submenu{min-width:200px}.el-menu--collapse .el-submenu .el-menu{position:absolute;margin-left:5px;top:0;left:100%;z-index:10;border:1px solid #E4E7ED;border-radius:2px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-menu--collapse .el-submenu.is-opened>.el-submenu__title .el-submenu__icon-arrow{-webkit-transform:none;transform:none}.el-menu--popup{z-index:100;min-width:200px;border:none;padding:5px 0;border-radius:2px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-menu--popup-bottom-start{margin-top:5px}.el-menu--popup-right-start{margin-left:5px;margin-right:5px}.el-menu-item{color:#303133;-webkit-transition:border-color .3s,background-color .3s,color .3s;transition:border-color .3s,background-color .3s,color .3s;-webkit-box-sizing:border-box;box-sizing:border-box;white-space:nowrap}.el-radio-button__inner,.el-submenu__title{-webkit-box-sizing:border-box;position:relative;white-space:nowrap}.el-menu-item *{vertical-align:middle}.el-menu-item i{color:#909399}.el-menu-item:focus,.el-menu-item:hover{outline:0;background-color:#ecf5ff}.el-menu-item.is-disabled{opacity:.25;cursor:not-allowed;background:0 0!important}.el-menu-item [class^=el-icon-]{margin-right:5px;width:24px;text-align:center;font-size:18px;vertical-align:middle}.el-menu-item.is-active{color:#409EFF}.el-menu-item.is-active i{color:inherit}.el-submenu{list-style:none;margin:0;padding-left:0}.el-submenu__title{font-size:14px;color:#303133;padding:0 20px;cursor:pointer;-webkit-transition:border-color .3s,background-color .3s,color .3s;transition:border-color .3s,background-color .3s,color .3s;box-sizing:border-box}.el-submenu__title *{vertical-align:middle}.el-submenu__title i{color:#909399}.el-submenu__title:focus,.el-submenu__title:hover{outline:0;background-color:#ecf5ff}.el-submenu__title.is-disabled{opacity:.25;cursor:not-allowed;background:0 0!important}.el-submenu__title:hover{background-color:#ecf5ff}.el-submenu .el-menu{border:none}.el-submenu .el-menu-item{height:50px;line-height:50px;padding:0 45px;min-width:200px}.el-submenu__icon-arrow{position:absolute;top:50%;right:20px;margin-top:-7px;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;font-size:12px}.el-submenu.is-active .el-submenu__title{border-bottom-color:#409EFF}.el-submenu.is-opened>.el-submenu__title .el-submenu__icon-arrow{-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg)}.el-submenu.is-disabled .el-menu-item,.el-submenu.is-disabled .el-submenu__title{opacity:.25;cursor:not-allowed;background:0 0!important}.el-submenu [class^=el-icon-]{vertical-align:middle;margin-right:5px;width:24px;text-align:center;font-size:18px}.el-menu-item-group>ul{padding:0}.el-menu-item-group__title{padding:7px 0 7px 20px;line-height:normal;font-size:12px;color:#909399}.el-radio-button__inner,.el-radio-group{display:inline-block;line-height:1;vertical-align:middle}.horizontal-collapse-transition .el-submenu__title .el-submenu__icon-arrow{-webkit-transition:.2s;transition:.2s;opacity:0}.el-radio-group{font-size:0}.el-radio-button{position:relative;display:inline-block;outline:0}.el-radio-button__inner{background:#FFF;border:1px solid #DCDFE6;font-weight:500;border-left:0;color:#606266;-webkit-appearance:none;text-align:center;box-sizing:border-box;outline:0;margin:0;cursor:pointer;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);padding:12px 20px;font-size:14px;border-radius:0}.el-radio-button__inner.is-round{padding:12px 20px}.el-radio-button__inner:hover{color:#409EFF}.el-radio-button__inner [class*=el-icon-]{line-height:.9}.el-radio-button__inner [class*=el-icon-]+span{margin-left:5px}.el-radio-button:first-child .el-radio-button__inner{border-left:1px solid #DCDFE6;border-radius:4px 0 0 4px;-webkit-box-shadow:none!important;box-shadow:none!important}.el-radio-button__orig-radio{opacity:0;outline:0;position:absolute;z-index:-1}.el-radio-button__orig-radio:checked+.el-radio-button__inner{color:#FFF;background-color:#409EFF;border-color:#409EFF;-webkit-box-shadow:-1px 0 0 0 #409EFF;box-shadow:-1px 0 0 0 #409EFF}.el-radio-button__orig-radio:disabled+.el-radio-button__inner{color:#C0C4CC;cursor:not-allowed;background-image:none;background-color:#FFF;border-color:#EBEEF5;-webkit-box-shadow:none;box-shadow:none}.el-radio-button__orig-radio:disabled:checked+.el-radio-button__inner{background-color:#F2F6FC}.el-radio-button:last-child .el-radio-button__inner{border-radius:0 4px 4px 0}.el-radio-button:first-child:last-child .el-radio-button__inner{border-radius:4px}.el-radio-button--medium .el-radio-button__inner{padding:10px 20px;font-size:14px;border-radius:0}.el-radio-button--medium .el-radio-button__inner.is-round{padding:10px 20px}.el-radio-button--small .el-radio-button__inner{padding:9px 15px;font-size:12px;border-radius:0}.el-radio-button--small .el-radio-button__inner.is-round{padding:9px 15px}.el-radio-button--mini .el-radio-button__inner{padding:7px 15px;font-size:12px;border-radius:0}.el-radio-button--mini .el-radio-button__inner.is-round{padding:7px 15px}.el-radio-button:focus:not(.is-focus):not(:active):not(.is-disabled){-webkit-box-shadow:0 0 2px 2px #409EFF;box-shadow:0 0 2px 2px #409EFF}.el-picker-panel,.el-popover,.el-select-dropdown,.el-table-filter,.el-time-panel{-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-switch{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;font-size:14px;line-height:20px;height:20px;vertical-align:middle}.el-switch__core,.el-switch__label{display:inline-block;cursor:pointer}.el-switch.is-disabled .el-switch__core,.el-switch.is-disabled .el-switch__label{cursor:not-allowed}.el-switch__label{-webkit-transition:.2s;transition:.2s;height:20px;font-size:14px;font-weight:500;vertical-align:middle;color:#303133}.el-switch__label.is-active{color:#409EFF}.el-switch__label--left{margin-right:10px}.el-switch__label--right{margin-left:10px}.el-switch__label *{line-height:1;font-size:14px;display:inline-block}.el-switch__input{position:absolute;width:0;height:0;opacity:0;margin:0}.el-switch__core{margin:0;position:relative;width:40px;height:20px;border:1px solid #DCDFE6;outline:0;border-radius:10px;-webkit-box-sizing:border-box;box-sizing:border-box;background:#DCDFE6;-webkit-transition:border-color .3s,background-color .3s;transition:border-color .3s,background-color .3s;vertical-align:middle}.el-input__prefix,.el-input__suffix{-webkit-transition:all .3s;color:#C0C4CC}.el-switch__core:after{content:\\\"\\\";position:absolute;top:1px;left:1px;border-radius:100%;-webkit-transition:all .3s;transition:all .3s;width:16px;height:16px;background-color:#FFF}.el-switch.is-checked .el-switch__core{border-color:#409EFF;background-color:#409EFF}.el-switch.is-checked .el-switch__core::after{left:100%;margin-left:-17px}.el-switch.is-disabled{opacity:.6}.el-switch--wide .el-switch__label.el-switch__label--left span{left:10px}.el-switch--wide .el-switch__label.el-switch__label--right span{right:10px}.el-switch .label-fade-enter,.el-switch .label-fade-leave-active{opacity:0}.el-select-dropdown{position:absolute;z-index:1001;border:1px solid #E4E7ED;border-radius:4px;background-color:#FFF;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);-webkit-box-sizing:border-box;box-sizing:border-box;margin:5px 0}.el-select-dropdown.is-multiple .el-select-dropdown__item{padding-right:40px}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected{color:#409EFF;background-color:#FFF}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected.hover{background-color:#F5F7FA}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected::after{position:absolute;right:20px;font-family:element-icons;content:\\\"\\\\e6da\\\";font-size:12px;font-weight:700;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.el-select-dropdown .el-scrollbar.is-empty .el-select-dropdown__list{padding:0}.el-select-dropdown__empty{padding:10px 0;margin:0;text-align:center;color:#999;font-size:14px}.el-select-dropdown__wrap{max-height:274px}.el-select-dropdown__list{list-style:none;padding:6px 0;margin:0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-select-dropdown__item{font-size:14px;padding:0 20px;position:relative;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#606266;height:34px;line-height:34px;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer}.el-select-dropdown__item.is-disabled{color:#C0C4CC;cursor:not-allowed}.el-select-dropdown__item.is-disabled:hover{background-color:#FFF}.el-select-dropdown__item.hover,.el-select-dropdown__item:hover{background-color:#F5F7FA}.el-select-dropdown__item.selected{color:#409EFF;font-weight:700}.el-select-group{margin:0;padding:0}.el-select-group__wrap{position:relative;list-style:none;margin:0;padding:0}.el-select-group__wrap:not(:last-of-type){padding-bottom:24px}.el-select-group__wrap:not(:last-of-type)::after{content:'';position:absolute;display:block;left:20px;right:20px;bottom:12px;height:1px;background:#E4E7ED}.el-select-group__title{padding-left:20px;font-size:12px;color:#909399;line-height:30px}.el-select-group .el-select-dropdown__item{padding-left:20px}.el-select{display:inline-block;position:relative}.el-select .el-select__tags>span{display:contents}.el-select:hover .el-input__inner{border-color:#C0C4CC}.el-select .el-input__inner{cursor:pointer;padding-right:35px}.el-select .el-input__inner:focus{border-color:#409EFF}.el-select .el-input .el-select__caret{color:#C0C4CC;font-size:14px;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg);cursor:pointer}.el-select .el-input .el-select__caret.is-reverse{-webkit-transform:rotateZ(0);transform:rotateZ(0)}.el-select .el-input .el-select__caret.is-show-close{font-size:14px;text-align:center;-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg);border-radius:100%;color:#C0C4CC;-webkit-transition:color .2s cubic-bezier(.645,.045,.355,1);transition:color .2s cubic-bezier(.645,.045,.355,1)}.el-select .el-input .el-select__caret.is-show-close:hover{color:#909399}.el-select .el-input.is-disabled .el-input__inner{cursor:not-allowed}.el-select .el-input.is-disabled .el-input__inner:hover{border-color:#E4E7ED}.el-range-editor.is-active,.el-range-editor.is-active:hover,.el-select .el-input.is-focus .el-input__inner{border-color:#409EFF}.el-select>.el-input{display:block}.el-select__input{border:none;outline:0;padding:0;margin-left:15px;color:#666;font-size:14px;-webkit-appearance:none;-moz-appearance:none;appearance:none;height:28px;background-color:transparent}.el-select__input.is-mini{height:14px}.el-select__close{cursor:pointer;position:absolute;top:8px;z-index:1000;right:25px;color:#C0C4CC;line-height:18px;font-size:14px}.el-select__close:hover{color:#909399}.el-select__tags{position:absolute;line-height:normal;white-space:normal;z-index:1;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-wrap:wrap;flex-wrap:wrap}.el-select__tags-text{overflow:hidden;text-overflow:ellipsis}.el-select .el-tag{-webkit-box-sizing:border-box;box-sizing:border-box;border-color:transparent;margin:2px 0 2px 6px;background-color:#f0f2f5;display:-webkit-box;display:-ms-flexbox;display:flex;max-width:100%;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-select .el-tag__close.el-icon-close{background-color:#C0C4CC;top:0;color:#FFF;-ms-flex-negative:0;flex-shrink:0}.el-select .el-tag__close.el-icon-close:hover{background-color:#909399}.el-table,.el-table__expanded-cell{background-color:#FFF}.el-select .el-tag__close.el-icon-close::before{display:block;-webkit-transform:translate(0,.5px);transform:translate(0,.5px)}.el-table{position:relative;overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:1;-ms-flex:1;flex:1;width:100%;max-width:100%;font-size:14px;color:#606266}.el-table__empty-block{min-height:60px;text-align:center;width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-table__empty-text{line-height:60px;width:50%;color:#909399}.el-table__expand-column .cell{padding:0;text-align:center}.el-table__expand-icon{position:relative;cursor:pointer;color:#666;font-size:12px;-webkit-transition:-webkit-transform .2s ease-in-out;transition:-webkit-transform .2s ease-in-out;transition:transform .2s ease-in-out;transition:transform .2s ease-in-out,-webkit-transform .2s ease-in-out;height:20px}.el-table__expand-icon--expanded{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.el-table__expand-icon>.el-icon{position:absolute;left:50%;top:50%;margin-left:-5px;margin-top:-5px}.el-table__expanded-cell[class*=cell]{padding:20px 50px}.el-table__expanded-cell:hover{background-color:transparent!important}.el-table__placeholder{display:inline-block;width:20px}.el-table__append-wrapper{overflow:hidden}.el-table--fit{border-right:0;border-bottom:0}.el-table--fit .el-table__cell.gutter{border-right-width:1px}.el-table--scrollable-x .el-table__body-wrapper{overflow-x:auto}.el-table--scrollable-y .el-table__body-wrapper{overflow-y:auto}.el-table thead{color:#909399;font-weight:500}.el-table thead.is-group th.el-table__cell{background:#F5F7FA}.el-table .el-table__cell{padding:12px 0;min-width:0;-webkit-box-sizing:border-box;box-sizing:border-box;text-overflow:ellipsis;vertical-align:middle;position:relative;text-align:left}.el-table .el-table__cell.is-center{text-align:center}.el-table .el-table__cell.is-right{text-align:right}.el-table .el-table__cell.gutter{width:15px;border-right-width:0;border-bottom-width:0;padding:0}.el-table .el-table__cell.is-hidden>*{visibility:hidden}.el-table--medium .el-table__cell{padding:10px 0}.el-table--small{font-size:12px}.el-table--small .el-table__cell{padding:8px 0}.el-table--mini{font-size:12px}.el-table--mini .el-table__cell{padding:6px 0}.el-table tr{background-color:#FFF}.el-table tr input[type=checkbox]{margin:0}.el-table td.el-table__cell,.el-table th.el-table__cell.is-leaf{border-bottom:1px solid #EBEEF5}.el-table th.el-table__cell.is-sortable{cursor:pointer}.el-table th.el-table__cell{overflow:hidden;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#FFF}.el-table th.el-table__cell>.cell{display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;position:relative;vertical-align:middle;padding-left:10px;padding-right:10px;width:100%}.el-table th.el-table__cell>.cell.highlight{color:#409EFF}.el-table th.el-table__cell.required>div::before{display:inline-block;content:\\\"\\\";width:8px;height:8px;border-radius:50%;background:#ff4d51;margin-right:5px;vertical-align:middle}.el-table td.el-table__cell div{-webkit-box-sizing:border-box;box-sizing:border-box}.el-date-table td,.el-table .cell,.el-table-filter{-webkit-box-sizing:border-box}.el-table td.el-table__cell.gutter{width:0}.el-table .cell{box-sizing:border-box;overflow:hidden;text-overflow:ellipsis;white-space:normal;word-break:break-all;line-height:23px;padding-left:10px;padding-right:10px}.el-table .cell.el-tooltip{white-space:nowrap;min-width:50px}.el-table--border,.el-table--group{border:1px solid #EBEEF5}.el-table--border::after,.el-table--group::after,.el-table::before{content:'';position:absolute;background-color:#EBEEF5;z-index:1}.el-table--border::after,.el-table--group::after{top:0;right:0;width:1px;height:100%}.el-table::before{left:0;bottom:0;width:100%;height:1px}.el-table--border{border-right:none;border-bottom:none}.el-table--border.el-loading-parent--relative{border-color:transparent}.el-table--border .el-table__cell,.el-table__body-wrapper .el-table--border.is-scrolling-left~.el-table__fixed{border-right:1px solid #EBEEF5}.el-table--border .el-table__cell:first-child .cell{padding-left:10px}.el-table--border th.el-table__cell.gutter:last-of-type{border-bottom:1px solid #EBEEF5;border-bottom-width:1px}.el-table--border th.el-table__cell,.el-table__fixed-right-patch{border-bottom:1px solid #EBEEF5}.el-table--hidden{visibility:hidden}.el-table__fixed,.el-table__fixed-right{position:absolute;top:0;left:0;overflow-x:hidden;overflow-y:hidden;-webkit-box-shadow:0 0 10px rgba(0,0,0,.12);box-shadow:0 0 10px rgba(0,0,0,.12)}.el-table__fixed-right::before,.el-table__fixed::before{content:'';position:absolute;left:0;bottom:0;width:100%;height:1px;background-color:#EBEEF5;z-index:4}.el-table__fixed-right-patch{position:absolute;top:-1px;right:0;background-color:#FFF}.el-table__fixed-right{top:0;left:auto;right:0}.el-table__fixed-right .el-table__fixed-body-wrapper,.el-table__fixed-right .el-table__fixed-footer-wrapper,.el-table__fixed-right .el-table__fixed-header-wrapper{left:auto;right:0}.el-table__fixed-header-wrapper{position:absolute;left:0;top:0;z-index:3}.el-table__fixed-footer-wrapper{position:absolute;left:0;bottom:0;z-index:3}.el-table__fixed-footer-wrapper tbody td.el-table__cell{border-top:1px solid #EBEEF5;background-color:#F5F7FA;color:#606266}.el-table__fixed-body-wrapper{position:absolute;left:0;top:37px;overflow:hidden;z-index:3}.el-table__body-wrapper,.el-table__footer-wrapper,.el-table__header-wrapper{width:100%}.el-table__footer-wrapper{margin-top:-1px}.el-table__footer-wrapper td.el-table__cell{border-top:1px solid #EBEEF5}.el-table__body,.el-table__footer,.el-table__header{table-layout:fixed;border-collapse:separate}.el-table__footer-wrapper,.el-table__header-wrapper{overflow:hidden}.el-table__footer-wrapper tbody td.el-table__cell,.el-table__header-wrapper tbody td.el-table__cell{background-color:#F5F7FA;color:#606266}.el-table__body-wrapper{overflow:hidden;position:relative}.el-table__body-wrapper.is-scrolling-left~.el-table__fixed,.el-table__body-wrapper.is-scrolling-none~.el-table__fixed,.el-table__body-wrapper.is-scrolling-none~.el-table__fixed-right,.el-table__body-wrapper.is-scrolling-right~.el-table__fixed-right{-webkit-box-shadow:none;box-shadow:none}.el-table__body-wrapper .el-table--border.is-scrolling-right~.el-table__fixed-right{border-left:1px solid #EBEEF5}.el-table .caret-wrapper{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:34px;width:24px;vertical-align:middle;cursor:pointer;overflow:initial;position:relative}.el-table .sort-caret{width:0;height:0;border:5px solid transparent;position:absolute;left:7px}.el-table .sort-caret.ascending{border-bottom-color:#C0C4CC;top:5px}.el-table .sort-caret.descending{border-top-color:#C0C4CC;bottom:7px}.el-table .ascending .sort-caret.ascending{border-bottom-color:#409EFF}.el-table .descending .sort-caret.descending{border-top-color:#409EFF}.el-table .hidden-columns{visibility:hidden;position:absolute;z-index:-1}.el-table--striped .el-table__body tr.el-table__row--striped td.el-table__cell{background:#FAFAFA}.el-table--striped .el-table__body tr.el-table__row--striped.current-row td.el-table__cell,.el-table--striped .el-table__body tr.el-table__row--striped.selection-row td.el-table__cell{background-color:#ecf5ff}.el-table__body tr.hover-row.current-row>td.el-table__cell,.el-table__body tr.hover-row.el-table__row--striped.current-row>td.el-table__cell,.el-table__body tr.hover-row.el-table__row--striped.selection-row>td.el-table__cell,.el-table__body tr.hover-row.el-table__row--striped>td.el-table__cell,.el-table__body tr.hover-row.selection-row>td.el-table__cell,.el-table__body tr.hover-row>td.el-table__cell{background-color:#F5F7FA}.el-table__body tr.current-row>td.el-table__cell,.el-table__body tr.selection-row>td.el-table__cell{background-color:#ecf5ff}.el-table__column-resize-proxy{position:absolute;left:200px;top:0;bottom:0;width:0;border-left:1px solid #EBEEF5;z-index:10}.el-table__column-filter-trigger{display:inline-block;line-height:34px;cursor:pointer}.el-table__column-filter-trigger i{color:#909399;font-size:12px;-webkit-transform:scale(.75);transform:scale(.75)}.el-table--enable-row-transition .el-table__body td.el-table__cell{-webkit-transition:background-color .25s ease;transition:background-color .25s ease}.el-table--enable-row-hover .el-table__body tr:hover>td.el-table__cell{background-color:#F5F7FA}.el-table--fluid-height .el-table__fixed,.el-table--fluid-height .el-table__fixed-right{bottom:0;overflow:hidden}.el-table [class*=el-table__row--level] .el-table__expand-icon{display:inline-block;width:20px;line-height:20px;height:20px;text-align:center;margin-right:3px}.el-table-column--selection .cell{padding-left:14px;padding-right:14px}.el-table-filter{border:1px solid #EBEEF5;border-radius:2px;background-color:#FFF;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-sizing:border-box;margin:2px 0}.el-table-filter__list{padding:5px 0;margin:0;list-style:none;min-width:100px}.el-table-filter__list-item{line-height:36px;padding:0 10px;cursor:pointer;font-size:14px}.el-table-filter__list-item:hover{background-color:#ecf5ff;color:#66b1ff}.el-table-filter__list-item.is-active{background-color:#409EFF;color:#FFF}.el-table-filter__content{min-width:100px}.el-table-filter__bottom{border-top:1px solid #EBEEF5;padding:8px}.el-table-filter__bottom button{background:0 0;border:none;color:#606266;cursor:pointer;font-size:13px;padding:0 3px}.el-date-table td.in-range div,.el-date-table td.in-range div:hover,.el-date-table.is-week-mode .el-date-table__row.current div,.el-date-table.is-week-mode .el-date-table__row:hover div{background-color:#F2F6FC}.el-table-filter__bottom button:hover{color:#409EFF}.el-table-filter__bottom button:focus{outline:0}.el-table-filter__bottom button.is-disabled{color:#C0C4CC;cursor:not-allowed}.el-table-filter__wrap{max-height:280px}.el-table-filter__checkbox-group{padding:10px}.el-table-filter__checkbox-group label.el-checkbox{display:block;margin-right:5px;margin-bottom:8px;margin-left:5px}.el-table-filter__checkbox-group .el-checkbox:last-child{margin-bottom:0}.el-date-table{font-size:12px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.el-date-table.is-week-mode .el-date-table__row:hover td.available:hover{color:#606266}.el-date-table.is-week-mode .el-date-table__row:hover td:first-child div{margin-left:5px;border-top-left-radius:15px;border-bottom-left-radius:15px}.el-date-table.is-week-mode .el-date-table__row:hover td:last-child div{margin-right:5px;border-top-right-radius:15px;border-bottom-right-radius:15px}.el-date-table td{width:32px;height:30px;padding:4px 0;box-sizing:border-box;text-align:center;cursor:pointer;position:relative}.el-date-table td div{height:30px;padding:3px 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-date-table td span{width:24px;height:24px;display:block;margin:0 auto;line-height:24px;position:absolute;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);border-radius:50%}.el-date-table td.next-month,.el-date-table td.prev-month{color:#C0C4CC}.el-date-table td.today{position:relative}.el-date-table td.today span{color:#409EFF;font-weight:700}.el-date-table td.today.end-date span,.el-date-table td.today.start-date span{color:#FFF}.el-date-table td.available:hover{color:#409EFF}.el-date-table td.current:not(.disabled) span{color:#FFF;background-color:#409EFF}.el-date-table td.end-date div,.el-date-table td.start-date div{color:#FFF}.el-date-table td.end-date span,.el-date-table td.start-date span{background-color:#409EFF}.el-date-table td.start-date div{margin-left:5px;border-top-left-radius:15px;border-bottom-left-radius:15px}.el-date-table td.end-date div{margin-right:5px;border-top-right-radius:15px;border-bottom-right-radius:15px}.el-date-table td.disabled div{background-color:#F5F7FA;opacity:1;cursor:not-allowed;color:#C0C4CC}.el-date-table td.selected div{margin-left:5px;margin-right:5px;background-color:#F2F6FC;border-radius:15px}.el-date-table td.selected div:hover{background-color:#F2F6FC}.el-date-table td.selected span{background-color:#409EFF;color:#FFF;border-radius:15px}.el-date-table td.week{font-size:80%;color:#606266}.el-month-table,.el-year-table{font-size:12px;border-collapse:collapse}.el-date-table th{padding:5px;color:#606266;font-weight:400;border-bottom:solid 1px #EBEEF5}.el-month-table{margin:-1px}.el-month-table td{text-align:center;padding:8px 0;cursor:pointer}.el-month-table td div{height:48px;padding:6px 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-month-table td.today .cell{color:#409EFF;font-weight:700}.el-month-table td.today.end-date .cell,.el-month-table td.today.start-date .cell{color:#FFF}.el-month-table td.disabled .cell{background-color:#F5F7FA;cursor:not-allowed;color:#C0C4CC}.el-month-table td.disabled .cell:hover{color:#C0C4CC}.el-month-table td .cell{width:60px;height:36px;display:block;line-height:36px;color:#606266;margin:0 auto;border-radius:18px}.el-month-table td .cell:hover{color:#409EFF}.el-month-table td.in-range div,.el-month-table td.in-range div:hover{background-color:#F2F6FC}.el-month-table td.end-date div,.el-month-table td.start-date div{color:#FFF}.el-month-table td.end-date .cell,.el-month-table td.start-date .cell{color:#FFF;background-color:#409EFF}.el-month-table td.start-date div{border-top-left-radius:24px;border-bottom-left-radius:24px}.el-month-table td.end-date div{border-top-right-radius:24px;border-bottom-right-radius:24px}.el-month-table td.current:not(.disabled) .cell{color:#409EFF}.el-year-table{margin:-1px}.el-year-table .el-icon{color:#303133}.el-year-table td{text-align:center;padding:20px 3px;cursor:pointer}.el-year-table td.today .cell{color:#409EFF;font-weight:700}.el-year-table td.disabled .cell{background-color:#F5F7FA;cursor:not-allowed;color:#C0C4CC}.el-year-table td.disabled .cell:hover{color:#C0C4CC}.el-year-table td .cell{width:48px;height:32px;display:block;line-height:32px;color:#606266;margin:0 auto}.el-year-table td .cell:hover,.el-year-table td.current:not(.disabled) .cell{color:#409EFF}.el-date-range-picker{width:646px}.el-date-range-picker.has-sidebar{width:756px}.el-date-range-picker table{table-layout:fixed;width:100%}.el-date-range-picker .el-picker-panel__body{min-width:513px}.el-date-range-picker .el-picker-panel__content{margin:0}.el-date-range-picker__header{position:relative;text-align:center;height:28px}.el-date-range-picker__header [class*=arrow-left]{float:left}.el-date-range-picker__header [class*=arrow-right]{float:right}.el-date-range-picker__header div{font-size:16px;font-weight:500;margin-right:50px}.el-date-range-picker__content{float:left;width:50%;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:16px}.el-date-range-picker__content.is-left{border-right:1px solid #e4e4e4}.el-date-range-picker__content .el-date-range-picker__header div{margin-left:50px;margin-right:50px}.el-date-range-picker__editors-wrap{-webkit-box-sizing:border-box;box-sizing:border-box;display:table-cell}.el-date-range-picker__editors-wrap.is-right{text-align:right}.el-date-range-picker__time-header{position:relative;border-bottom:1px solid #e4e4e4;font-size:12px;padding:8px 5px 5px;display:table;width:100%;-webkit-box-sizing:border-box;box-sizing:border-box}.el-date-range-picker__time-header>.el-icon-arrow-right{font-size:20px;vertical-align:middle;display:table-cell;color:#303133}.el-date-range-picker__time-picker-wrap{position:relative;display:table-cell;padding:0 5px}.el-date-range-picker__time-picker-wrap .el-picker-panel{position:absolute;top:13px;right:0;z-index:1;background:#FFF}.el-date-picker{width:322px}.el-date-picker.has-sidebar.has-time{width:434px}.el-date-picker.has-sidebar{width:438px}.el-date-picker.has-time .el-picker-panel__body-wrapper{position:relative}.el-date-picker .el-picker-panel__content{width:292px}.el-date-picker table{table-layout:fixed;width:100%}.el-date-picker__editor-wrap{position:relative;display:table-cell;padding:0 5px}.el-date-picker__time-header{position:relative;border-bottom:1px solid #e4e4e4;font-size:12px;padding:8px 5px 5px;display:table;width:100%;-webkit-box-sizing:border-box;box-sizing:border-box}.el-date-picker__header{margin:12px;text-align:center}.el-date-picker__header--bordered{margin-bottom:0;padding-bottom:12px;border-bottom:solid 1px #EBEEF5}.el-date-picker__header--bordered+.el-picker-panel__content{margin-top:0}.el-date-picker__header-label{font-size:16px;font-weight:500;padding:0 5px;line-height:22px;text-align:center;cursor:pointer;color:#606266}.el-date-picker__header-label.active,.el-date-picker__header-label:hover{color:#409EFF}.el-date-picker__prev-btn{float:left}.el-date-picker__next-btn{float:right}.el-date-picker__time-wrap{padding:10px;text-align:center}.el-date-picker__time-label{float:left;cursor:pointer;line-height:30px;margin-left:10px}.time-select{margin:5px 0;min-width:0}.time-select .el-picker-panel__content{max-height:200px;margin:0}.time-select-item{padding:8px 10px;font-size:14px;line-height:20px}.time-select-item.selected:not(.disabled){color:#409EFF;font-weight:700}.time-select-item.disabled{color:#E4E7ED;cursor:not-allowed}.time-select-item:hover{background-color:#F5F7FA;font-weight:700;cursor:pointer}.el-date-editor{position:relative;display:inline-block;text-align:left}.el-date-editor.el-input,.el-date-editor.el-input__inner{width:220px}.el-date-editor--monthrange.el-input,.el-date-editor--monthrange.el-input__inner{width:300px}.el-date-editor--daterange.el-input,.el-date-editor--daterange.el-input__inner,.el-date-editor--timerange.el-input,.el-date-editor--timerange.el-input__inner{width:350px}.el-date-editor--datetimerange.el-input,.el-date-editor--datetimerange.el-input__inner{width:400px}.el-date-editor--dates .el-input__inner{text-overflow:ellipsis;white-space:nowrap}.el-date-editor .el-icon-circle-close{cursor:pointer}.el-date-editor .el-range__icon{font-size:14px;margin-left:-5px;color:#C0C4CC;float:left;line-height:32px}.el-date-editor .el-range-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:none;outline:0;display:inline-block;height:100%;margin:0;padding:0;width:39%;text-align:center;font-size:14px;color:#606266}.el-date-editor .el-range-input::-webkit-input-placeholder{color:#C0C4CC}.el-date-editor .el-range-input:-ms-input-placeholder{color:#C0C4CC}.el-date-editor .el-range-input::-ms-input-placeholder{color:#C0C4CC}.el-date-editor .el-range-input::placeholder{color:#C0C4CC}.el-date-editor .el-range-separator{display:inline-block;height:100%;padding:0 5px;margin:0;text-align:center;line-height:32px;font-size:14px;width:5%;color:#303133}.el-date-editor .el-range__close-icon{font-size:14px;color:#C0C4CC;width:25px;display:inline-block;float:right;line-height:32px}.el-range-editor.el-input__inner{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:3px 10px}.el-range-editor .el-range-input{line-height:1}.el-range-editor--medium.el-input__inner{height:36px}.el-range-editor--medium .el-range-separator{line-height:28px;font-size:14px}.el-range-editor--medium .el-range-input{font-size:14px}.el-range-editor--medium .el-range__close-icon,.el-range-editor--medium .el-range__icon{line-height:28px}.el-range-editor--small.el-input__inner{height:32px}.el-range-editor--small .el-range-separator{line-height:24px;font-size:13px}.el-range-editor--small .el-range-input{font-size:13px}.el-range-editor--small .el-range__close-icon,.el-range-editor--small .el-range__icon{line-height:24px}.el-range-editor--mini.el-input__inner{height:28px}.el-range-editor--mini .el-range-separator{line-height:20px;font-size:12px}.el-range-editor--mini .el-range-input{font-size:12px}.el-range-editor--mini .el-range__close-icon,.el-range-editor--mini .el-range__icon{line-height:20px}.el-range-editor.is-disabled{background-color:#F5F7FA;border-color:#E4E7ED;color:#C0C4CC;cursor:not-allowed}.el-range-editor.is-disabled:focus,.el-range-editor.is-disabled:hover{border-color:#E4E7ED}.el-range-editor.is-disabled input{background-color:#F5F7FA;color:#C0C4CC;cursor:not-allowed}.el-range-editor.is-disabled input::-webkit-input-placeholder{color:#C0C4CC}.el-range-editor.is-disabled input:-ms-input-placeholder{color:#C0C4CC}.el-range-editor.is-disabled input::-ms-input-placeholder{color:#C0C4CC}.el-range-editor.is-disabled input::placeholder{color:#C0C4CC}.el-range-editor.is-disabled .el-range-separator{color:#C0C4CC}.el-picker-panel{color:#606266;border:1px solid #E4E7ED;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);background:#FFF;border-radius:4px;line-height:30px;margin:5px 0}.el-picker-panel__body-wrapper::after,.el-picker-panel__body::after{content:\\\"\\\";display:table;clear:both}.el-picker-panel__content{position:relative;margin:15px}.el-picker-panel__footer{border-top:1px solid #e4e4e4;padding:4px;text-align:right;background-color:#FFF;position:relative;font-size:0}.el-picker-panel__shortcut{display:block;width:100%;border:0;background-color:transparent;line-height:28px;font-size:14px;color:#606266;padding-left:12px;text-align:left;outline:0;cursor:pointer}.el-picker-panel__shortcut:hover{color:#409EFF}.el-picker-panel__shortcut.active{background-color:#e6f1fe;color:#409EFF}.el-picker-panel__btn{border:1px solid #dcdcdc;color:#333;line-height:24px;border-radius:2px;padding:0 20px;cursor:pointer;background-color:transparent;outline:0;font-size:12px}.el-picker-panel__btn[disabled]{color:#ccc;cursor:not-allowed}.el-picker-panel__icon-btn{font-size:12px;color:#303133;border:0;background:0 0;cursor:pointer;outline:0;margin-top:8px}.el-picker-panel__icon-btn:hover{color:#409EFF}.el-picker-panel__icon-btn.is-disabled{color:#bbb}.el-picker-panel__icon-btn.is-disabled:hover{cursor:not-allowed}.el-picker-panel__link-btn{vertical-align:middle}.el-picker-panel [slot=sidebar],.el-picker-panel__sidebar{position:absolute;top:0;bottom:0;width:110px;border-right:1px solid #e4e4e4;-webkit-box-sizing:border-box;box-sizing:border-box;padding-top:6px;background-color:#FFF;overflow:auto}.el-picker-panel [slot=sidebar]+.el-picker-panel__body,.el-picker-panel__sidebar+.el-picker-panel__body{margin-left:110px}.el-time-spinner.has-seconds .el-time-spinner__wrapper{width:33.3%}.el-time-spinner__wrapper{max-height:190px;overflow:auto;display:inline-block;width:50%;vertical-align:top;position:relative}.el-time-spinner__wrapper .el-scrollbar__wrap:not(.el-scrollbar__wrap--hidden-default){padding-bottom:15px}.el-time-spinner__input.el-input .el-input__inner,.el-time-spinner__list{padding:0;text-align:center}.el-time-spinner__wrapper.is-arrow{-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;overflow:hidden}.el-time-spinner__wrapper.is-arrow .el-time-spinner__list{-webkit-transform:translateY(-32px);transform:translateY(-32px)}.el-time-spinner__wrapper.is-arrow .el-time-spinner__item:hover:not(.disabled):not(.active){background:#FFF;cursor:default}.el-time-spinner__arrow{font-size:12px;color:#909399;position:absolute;left:0;width:100%;z-index:1;text-align:center;height:30px;line-height:30px;cursor:pointer}.el-time-spinner__arrow:hover{color:#409EFF}.el-time-spinner__arrow.el-icon-arrow-up{top:10px}.el-time-spinner__arrow.el-icon-arrow-down{bottom:10px}.el-time-spinner__input.el-input{width:70%}.el-time-spinner__list{margin:0;list-style:none}.el-time-spinner__list::after,.el-time-spinner__list::before{content:'';display:block;width:100%;height:80px}.el-time-spinner__item{height:32px;line-height:32px;font-size:12px;color:#606266}.el-time-spinner__item:hover:not(.disabled):not(.active){background:#F5F7FA;cursor:pointer}.el-time-spinner__item.active:not(.disabled){color:#303133;font-weight:700}.el-time-spinner__item.disabled{color:#C0C4CC;cursor:not-allowed}.el-time-panel{margin:5px 0;border:1px solid #E4E7ED;background-color:#FFF;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);border-radius:2px;position:absolute;width:180px;left:0;z-index:1000;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-box-sizing:content-box;box-sizing:content-box}.el-time-panel__content{font-size:0;position:relative;overflow:hidden}.el-time-panel__content::after,.el-time-panel__content::before{content:\\\"\\\";top:50%;position:absolute;margin-top:-15px;height:32px;z-index:-1;left:0;right:0;-webkit-box-sizing:border-box;box-sizing:border-box;padding-top:6px;text-align:left;border-top:1px solid #E4E7ED;border-bottom:1px solid #E4E7ED}.el-time-panel__content::after{left:50%;margin-left:12%;margin-right:12%}.el-time-panel__content::before{padding-left:50%;margin-right:12%;margin-left:12%}.el-time-panel__content.has-seconds::after{left:calc(100% / 3 * 2)}.el-time-panel__content.has-seconds::before{padding-left:calc(100% / 3)}.el-time-panel__footer{border-top:1px solid #e4e4e4;padding:4px;height:36px;line-height:25px;text-align:right;-webkit-box-sizing:border-box;box-sizing:border-box}.el-time-panel__btn{border:none;line-height:28px;padding:0 5px;margin:0 5px;cursor:pointer;background-color:transparent;outline:0;font-size:12px;color:#303133}.el-time-panel__btn.confirm{font-weight:800;color:#409EFF}.el-time-range-picker{width:354px;overflow:visible}.el-time-range-picker__content{position:relative;text-align:center;padding:10px}.el-time-range-picker__cell{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:4px 7px 7px;width:50%;display:inline-block}.el-time-range-picker__header{margin-bottom:5px;text-align:center;font-size:14px}.el-time-range-picker__body{border-radius:2px;border:1px solid #E4E7ED}.el-popover{position:absolute;background:#FFF;min-width:150px;border-radius:4px;border:1px solid #EBEEF5;padding:12px;z-index:2000;color:#606266;line-height:1.4;text-align:justify;font-size:14px;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);word-break:break-all}.el-card.is-always-shadow,.el-card.is-hover-shadow:focus,.el-card.is-hover-shadow:hover,.el-cascader__dropdown,.el-color-picker__panel,.el-message-box,.el-notification{-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-popover--plain{padding:18px 20px}.el-popover__title{color:#303133;font-size:16px;line-height:1;margin-bottom:12px}.el-popover:focus,.el-popover:focus:active,.el-popover__reference:focus:hover,.el-popover__reference:focus:not(.focusing){outline-width:0}.v-modal-enter{-webkit-animation:v-modal-in .2s ease;animation:v-modal-in .2s ease}.v-modal-leave{-webkit-animation:v-modal-out .2s ease forwards;animation:v-modal-out .2s ease forwards}@keyframes v-modal-in{0%{opacity:0}}@keyframes v-modal-out{100%{opacity:0}}.v-modal{position:fixed;left:0;top:0;width:100%;height:100%;opacity:.5;background:#000}.el-popup-parent--hidden{overflow:hidden}.el-message-box{display:inline-block;width:420px;padding-bottom:10px;vertical-align:middle;background-color:#FFF;border-radius:4px;border:1px solid #EBEEF5;font-size:18px;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);text-align:left;overflow:hidden;-webkit-backface-visibility:hidden;backface-visibility:hidden}.el-message-box__wrapper{position:fixed;top:0;bottom:0;left:0;right:0;text-align:center}.el-message-box__wrapper::after{content:\\\"\\\";display:inline-block;height:100%;width:0;vertical-align:middle}.el-message-box__header{position:relative;padding:15px 15px 10px}.el-message-box__title{padding-left:0;margin-bottom:0;font-size:18px;line-height:1;color:#303133}.el-message-box__headerbtn{position:absolute;top:15px;right:15px;padding:0;border:none;outline:0;background:0 0;font-size:16px;cursor:pointer}.el-form-item.is-error .el-input__inner,.el-form-item.is-error .el-input__inner:focus,.el-form-item.is-error .el-textarea__inner,.el-form-item.is-error .el-textarea__inner:focus,.el-message-box__input input.invalid,.el-message-box__input input.invalid:focus{border-color:#F56C6C}.el-message-box__headerbtn .el-message-box__close{color:#909399}.el-message-box__headerbtn:focus .el-message-box__close,.el-message-box__headerbtn:hover .el-message-box__close{color:#409EFF}.el-message-box__content{padding:10px 15px;color:#606266;font-size:14px}.el-message-box__container{position:relative}.el-message-box__input{padding-top:15px}.el-message-box__status{position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);font-size:24px!important}.el-message-box__status::before{padding-left:1px}.el-message-box__status+.el-message-box__message{padding-left:36px;padding-right:12px}.el-message-box__status.el-icon-success{color:#67C23A}.el-message-box__status.el-icon-info{color:#909399}.el-message-box__status.el-icon-warning{color:#E6A23C}.el-message-box__status.el-icon-error{color:#F56C6C}.el-message-box__message{margin:0}.el-message-box__message p{margin:0;line-height:24px}.el-message-box__errormsg{color:#F56C6C;font-size:12px;min-height:18px;margin-top:2px}.el-message-box__btns{padding:5px 15px 0;text-align:right}.el-message-box__btns button:nth-child(2){margin-left:10px}.el-message-box__btns-reverse{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.el-message-box--center{padding-bottom:30px}.el-message-box--center .el-message-box__header{padding-top:30px}.el-message-box--center .el-message-box__title{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-message-box--center .el-message-box__status{position:relative;top:auto;padding-right:5px;text-align:center;-webkit-transform:translateY(-1px);transform:translateY(-1px)}.el-message-box--center .el-message-box__message{margin-left:0}.el-message-box--center .el-message-box__btns,.el-message-box--center .el-message-box__content{text-align:center}.el-message-box--center .el-message-box__content{padding-left:27px;padding-right:27px}.msgbox-fade-enter-active{-webkit-animation:msgbox-fade-in .3s;animation:msgbox-fade-in .3s}.msgbox-fade-leave-active{-webkit-animation:msgbox-fade-out .3s;animation:msgbox-fade-out .3s}@-webkit-keyframes msgbox-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@keyframes msgbox-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@-webkit-keyframes msgbox-fade-out{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}100%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}@keyframes msgbox-fade-out{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}100%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}.el-breadcrumb{font-size:14px;line-height:1}.el-breadcrumb::after,.el-breadcrumb::before{display:table;content:\\\"\\\"}.el-breadcrumb::after{clear:both}.el-breadcrumb__separator{margin:0 9px;font-weight:700;color:#C0C4CC}.el-breadcrumb__separator[class*=icon]{margin:0 6px;font-weight:400}.el-breadcrumb__item{float:left}.el-breadcrumb__inner{color:#606266}.el-breadcrumb__inner a,.el-breadcrumb__inner.is-link{font-weight:700;text-decoration:none;-webkit-transition:color .2s cubic-bezier(.645,.045,.355,1);transition:color .2s cubic-bezier(.645,.045,.355,1);color:#303133}.el-breadcrumb__inner a:hover,.el-breadcrumb__inner.is-link:hover{color:#409EFF;cursor:pointer}.el-breadcrumb__item:last-child .el-breadcrumb__inner,.el-breadcrumb__item:last-child .el-breadcrumb__inner a,.el-breadcrumb__item:last-child .el-breadcrumb__inner a:hover,.el-breadcrumb__item:last-child .el-breadcrumb__inner:hover{font-weight:400;color:#606266;cursor:text}.el-form--label-left .el-form-item__label{text-align:left}.el-form--label-top .el-form-item__label{float:none;display:inline-block;text-align:left;padding:0 0 10px}.el-form--inline .el-form-item{display:inline-block;margin-right:10px;vertical-align:top}.el-form--inline .el-form-item__label{float:none;display:inline-block}.el-form--inline .el-form-item__content{display:inline-block;vertical-align:top}.el-form--inline.el-form--label-top .el-form-item__content{display:block}.el-form-item{margin-bottom:22px}.el-form-item::after,.el-form-item::before{display:table;content:\\\"\\\"}.el-form-item::after{clear:both}.el-form-item .el-form-item{margin-bottom:0}.el-form-item--mini.el-form-item,.el-form-item--small.el-form-item{margin-bottom:18px}.el-form-item .el-input__validateIcon{display:none}.el-form-item--medium .el-form-item__content,.el-form-item--medium .el-form-item__label{line-height:36px}.el-form-item--small .el-form-item__content,.el-form-item--small .el-form-item__label{line-height:32px}.el-form-item--small .el-form-item__error{padding-top:2px}.el-form-item--mini .el-form-item__content,.el-form-item--mini .el-form-item__label{line-height:28px}.el-form-item--mini .el-form-item__error{padding-top:1px}.el-form-item__label-wrap{float:left}.el-form-item__label-wrap .el-form-item__label{display:inline-block;float:none}.el-form-item__label{text-align:right;vertical-align:middle;float:left;font-size:14px;color:#606266;line-height:40px;padding:0 12px 0 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-form-item__content{line-height:40px;position:relative;font-size:14px}.el-form-item__content::after,.el-form-item__content::before{display:table;content:\\\"\\\"}.el-form-item__content::after{clear:both}.el-form-item__content .el-input-group{vertical-align:top}.el-form-item__error{color:#F56C6C;font-size:12px;line-height:1;padding-top:4px;position:absolute;top:100%;left:0}.el-form-item__error--inline{position:relative;top:auto;left:auto;display:inline-block;margin-left:10px}.el-form-item.is-required:not(.is-no-asterisk) .el-form-item__label-wrap>.el-form-item__label:before,.el-form-item.is-required:not(.is-no-asterisk)>.el-form-item__label:before{content:'*';color:#F56C6C;margin-right:4px}.el-form-item.is-error .el-input-group__append .el-input__inner,.el-form-item.is-error .el-input-group__prepend .el-input__inner{border-color:transparent}.el-form-item.is-error .el-input__validateIcon{color:#F56C6C}.el-form-item--feedback .el-input__validateIcon{display:inline-block}.el-tabs__header{padding:0;position:relative;margin:0 0 15px}.el-tabs__active-bar{position:absolute;bottom:0;left:0;height:2px;background-color:#409EFF;z-index:1;-webkit-transition:-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:transform .3s cubic-bezier(.645,.045,.355,1);transition:transform .3s cubic-bezier(.645,.045,.355,1),-webkit-transform .3s cubic-bezier(.645,.045,.355,1);list-style:none}.el-tabs__new-tab{float:right;border:1px solid #d3dce6;height:18px;width:18px;line-height:18px;margin:12px 0 9px 10px;border-radius:3px;text-align:center;font-size:12px;color:#d3dce6;cursor:pointer;-webkit-transition:all .15s;transition:all .15s}.el-tabs__new-tab .el-icon-plus{-webkit-transform:scale(.8,.8);transform:scale(.8,.8)}.el-tabs__new-tab:hover{color:#409EFF}.el-tabs__nav-wrap{overflow:hidden;margin-bottom:-1px;position:relative}.el-tabs__nav-wrap::after{content:\\\"\\\";position:absolute;left:0;bottom:0;width:100%;height:2px;background-color:#E4E7ED;z-index:1}.el-tabs__nav-wrap.is-scrollable{padding:0 20px;-webkit-box-sizing:border-box;box-sizing:border-box}.el-tabs__nav-scroll{overflow:hidden}.el-tabs__nav-next,.el-tabs__nav-prev{position:absolute;cursor:pointer;line-height:44px;font-size:12px;color:#909399}.el-tabs__nav-next{right:0}.el-tabs__nav-prev{left:0}.el-tabs__nav{white-space:nowrap;position:relative;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;float:left;z-index:2}.el-tabs__nav.is-stretch{min-width:100%;display:-webkit-box;display:-ms-flexbox;display:flex}.el-tabs__nav.is-stretch>*{-webkit-box-flex:1;-ms-flex:1;flex:1;text-align:center}.el-tabs__item{padding:0 20px;height:40px;-webkit-box-sizing:border-box;box-sizing:border-box;line-height:40px;display:inline-block;list-style:none;font-size:14px;font-weight:500;color:#303133;position:relative}.el-tabs__item:focus,.el-tabs__item:focus:active{outline:0}.el-tabs__item:focus.is-active.is-focus:not(:active){-webkit-box-shadow:0 0 2px 2px #409EFF inset;box-shadow:0 0 2px 2px #409EFF inset;border-radius:3px}.el-tabs__item .el-icon-close{border-radius:50%;text-align:center;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);margin-left:5px}.el-tabs__item .el-icon-close:before{-webkit-transform:scale(.9);transform:scale(.9);display:inline-block}.el-tabs--card>.el-tabs__header .el-tabs__active-bar,.el-tabs--left.el-tabs--card .el-tabs__active-bar.is-left,.el-tabs--right.el-tabs--card .el-tabs__active-bar.is-right{display:none}.el-tabs__item .el-icon-close:hover{background-color:#C0C4CC;color:#FFF}.el-tabs__item.is-active{color:#409EFF}.el-tabs__item:hover{color:#409EFF;cursor:pointer}.el-tabs__item.is-disabled{color:#C0C4CC;cursor:default}.el-tabs__content{overflow:hidden;position:relative}.el-tabs--card>.el-tabs__header{border-bottom:1px solid #E4E7ED}.el-tabs--card>.el-tabs__header .el-tabs__nav-wrap::after{content:none}.el-tabs--card>.el-tabs__header .el-tabs__nav{border:1px solid #E4E7ED;border-bottom:none;border-radius:4px 4px 0 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-tabs--card>.el-tabs__header .el-tabs__item .el-icon-close{position:relative;font-size:12px;width:0;height:14px;vertical-align:middle;line-height:15px;overflow:hidden;top:-1px;right:-2px;-webkit-transform-origin:100% 50%;transform-origin:100% 50%}.el-tabs--card>.el-tabs__header .el-tabs__item{border-bottom:1px solid transparent;border-left:1px solid #E4E7ED;-webkit-transition:color .3s cubic-bezier(.645,.045,.355,1),padding .3s cubic-bezier(.645,.045,.355,1);transition:color .3s cubic-bezier(.645,.045,.355,1),padding .3s cubic-bezier(.645,.045,.355,1)}.el-tabs--card>.el-tabs__header .el-tabs__item:first-child{border-left:none}.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover{padding-left:13px;padding-right:13px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover .el-icon-close{width:14px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active{border-bottom-color:#FFF}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable{padding-left:20px;padding-right:20px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable .el-icon-close{width:14px}.el-tabs--border-card{background:#FFF;border:1px solid #DCDFE6;-webkit-box-shadow:0 2px 4px 0 rgba(0,0,0,.12),0 0 6px 0 rgba(0,0,0,.04);box-shadow:0 2px 4px 0 rgba(0,0,0,.12),0 0 6px 0 rgba(0,0,0,.04)}.el-tabs--border-card>.el-tabs__content{padding:15px}.el-tabs--border-card>.el-tabs__header{background-color:#F5F7FA;border-bottom:1px solid #E4E7ED;margin:0}.el-tabs--border-card>.el-tabs__header .el-tabs__nav-wrap::after{content:none}.el-tabs--border-card>.el-tabs__header .el-tabs__item{-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);border:1px solid transparent;margin-top:-1px;color:#909399}.el-tabs--border-card>.el-tabs__header .el-tabs__item+.el-tabs__item,.el-tabs--border-card>.el-tabs__header .el-tabs__item:first-child{margin-left:-1px}.el-col-offset-0,.el-tabs--border-card>.el-tabs__header .is-scrollable .el-tabs__item:first-child{margin-left:0}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active{color:#409EFF;background-color:#FFF;border-right-color:#DCDFE6;border-left-color:#DCDFE6}.el-tabs--border-card>.el-tabs__header .el-tabs__item:not(.is-disabled):hover{color:#409EFF}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-disabled{color:#C0C4CC}.el-tabs--bottom .el-tabs__item.is-bottom:nth-child(2),.el-tabs--bottom .el-tabs__item.is-top:nth-child(2),.el-tabs--top .el-tabs__item.is-bottom:nth-child(2),.el-tabs--top .el-tabs__item.is-top:nth-child(2){padding-left:0}.el-tabs--bottom .el-tabs__item.is-bottom:last-child,.el-tabs--bottom .el-tabs__item.is-top:last-child,.el-tabs--top .el-tabs__item.is-bottom:last-child,.el-tabs--top .el-tabs__item.is-top:last-child{padding-right:0}.el-cascader-menu:last-child .el-cascader-node,.el-tabs--bottom .el-tabs--left>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom .el-tabs--right>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top .el-tabs--left>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top .el-tabs--right>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:last-child{padding-right:20px}.el-tabs--bottom .el-tabs--left>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom .el-tabs--right>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--left>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--right>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2){padding-left:20px}.el-tabs--bottom .el-tabs__header.is-bottom{margin-bottom:0;margin-top:10px}.el-tabs--bottom.el-tabs--border-card .el-tabs__header.is-bottom{border-bottom:0;border-top:1px solid #DCDFE6}.el-tabs--bottom.el-tabs--border-card .el-tabs__nav-wrap.is-bottom{margin-top:-1px;margin-bottom:0}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom:not(.is-active){border:1px solid transparent}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom{margin:0 -1px -1px}.el-tabs--left,.el-tabs--right{overflow:hidden}.el-tabs--left .el-tabs__header.is-left,.el-tabs--left .el-tabs__header.is-right,.el-tabs--left .el-tabs__nav-scroll,.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__header.is-left,.el-tabs--right .el-tabs__header.is-right,.el-tabs--right .el-tabs__nav-scroll,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{height:100%}.el-tabs--left .el-tabs__active-bar.is-left,.el-tabs--left .el-tabs__active-bar.is-right,.el-tabs--right .el-tabs__active-bar.is-left,.el-tabs--right .el-tabs__active-bar.is-right{top:0;bottom:auto;width:2px;height:auto}.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{margin-bottom:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{height:30px;line-height:30px;width:100%;text-align:center;cursor:pointer}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i{-webkit-transform:rotateZ(90deg);transform:rotateZ(90deg)}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{left:auto;top:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next{right:auto;bottom:0}.el-tabs--left .el-tabs__active-bar.is-left,.el-tabs--left .el-tabs__nav-wrap.is-left::after{right:0;left:auto}.el-tabs--left .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--left .el-tabs__nav-wrap.is-right.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-right.is-scrollable{padding:30px 0}.el-tabs--left .el-tabs__nav-wrap.is-left::after,.el-tabs--left .el-tabs__nav-wrap.is-right::after,.el-tabs--right .el-tabs__nav-wrap.is-left::after,.el-tabs--right .el-tabs__nav-wrap.is-right::after{height:100%;width:2px;bottom:auto;top:0}.el-tabs--left .el-tabs__nav.is-left,.el-tabs--left .el-tabs__nav.is-right,.el-tabs--right .el-tabs__nav.is-left,.el-tabs--right .el-tabs__nav.is-right{float:none}.el-tabs--left .el-tabs__item.is-left,.el-tabs--left .el-tabs__item.is-right,.el-tabs--right .el-tabs__item.is-left,.el-tabs--right .el-tabs__item.is-right{display:block}.el-tabs--left .el-tabs__header.is-left{float:left;margin-bottom:0;margin-right:10px}.el-button-group>.el-button:not(:last-child),.el-tabs--left .el-tabs__nav-wrap.is-left{margin-right:-1px}.el-tabs--left .el-tabs__item.is-left{text-align:right}.el-tabs--left.el-tabs--card .el-tabs__item.is-left{border-left:none;border-right:1px solid #E4E7ED;border-bottom:none;border-top:1px solid #E4E7ED;text-align:left}.el-tabs--left.el-tabs--card .el-tabs__item.is-left:first-child{border-right:1px solid #E4E7ED;border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active{border:1px solid #E4E7ED;border-right-color:#fff;border-left:none;border-bottom:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:first-child{border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:last-child{border-bottom:none}.el-tabs--left.el-tabs--card .el-tabs__nav{border-radius:4px 0 0 4px;border-bottom:1px solid #E4E7ED;border-right:none}.el-tabs--left.el-tabs--card .el-tabs__new-tab{float:none}.el-tabs--left.el-tabs--border-card .el-tabs__header.is-left{border-right:1px solid #dfe4ed}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left{border:1px solid transparent;margin:-1px 0 -1px -1px}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left.is-active{border-color:#d1dbe5 transparent}.el-tabs--right .el-tabs__header.is-right{float:right;margin-bottom:0;margin-left:10px}.el-tabs--right .el-tabs__nav-wrap.is-right{margin-left:-1px}.el-tabs--right .el-tabs__nav-wrap.is-right::after{left:0;right:auto}.el-tabs--right .el-tabs__active-bar.is-right{left:0}.el-tabs--right.el-tabs--card .el-tabs__item.is-right{border-bottom:none;border-top:1px solid #E4E7ED}.el-tabs--right.el-tabs--card .el-tabs__item.is-right:first-child{border-left:1px solid #E4E7ED;border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active{border:1px solid #E4E7ED;border-left-color:#fff;border-right:none;border-bottom:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:first-child{border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:last-child{border-bottom:none}.el-tabs--right.el-tabs--card .el-tabs__nav{border-radius:0 4px 4px 0;border-bottom:1px solid #E4E7ED;border-left:none}.el-tabs--right.el-tabs--border-card .el-tabs__header.is-right{border-left:1px solid #dfe4ed}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right{border:1px solid transparent;margin:-1px -1px -1px 0}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right.is-active{border-color:#d1dbe5 transparent}.slideInLeft-transition,.slideInRight-transition{display:inline-block}.slideInRight-enter{-webkit-animation:slideInRight-enter .3s;animation:slideInRight-enter .3s}.slideInRight-leave{position:absolute;left:0;right:0;-webkit-animation:slideInRight-leave .3s;animation:slideInRight-leave .3s}.slideInLeft-enter{-webkit-animation:slideInLeft-enter .3s;animation:slideInLeft-enter .3s}.slideInLeft-leave{position:absolute;left:0;right:0;-webkit-animation:slideInLeft-leave .3s;animation:slideInLeft-leave .3s}@-webkit-keyframes slideInRight-enter{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes slideInRight-enter{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes slideInRight-leave{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}100%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0}}@keyframes slideInRight-leave{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}100%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0}}@-webkit-keyframes slideInLeft-enter{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes slideInLeft-enter{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes slideInLeft-leave{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}100%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%);opacity:0}}@keyframes slideInLeft-leave{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}100%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%);opacity:0}}.el-tree{position:relative;cursor:default;background:#FFF;color:#606266}.el-tree__empty-block{position:relative;min-height:60px;text-align:center;width:100%;height:100%}.el-tree__empty-text{position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);color:#909399;font-size:14px}.el-tree__drop-indicator{position:absolute;left:0;right:0;height:1px;background-color:#409EFF}.el-tree-node{white-space:nowrap;outline:0}.el-tree-node:focus>.el-tree-node__content{background-color:#F5F7FA}.el-tree-node.is-drop-inner>.el-tree-node__content .el-tree-node__label{background-color:#409EFF;color:#fff}.el-tree-node__content:hover,.el-upload-list__item:hover{background-color:#F5F7FA}.el-tree-node__content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:26px;cursor:pointer}.el-tree-node__content>.el-tree-node__expand-icon{padding:6px}.el-tree-node__content>label.el-checkbox{margin-right:8px}.el-tree.is-dragging .el-tree-node__content{cursor:move}.el-tree.is-dragging .el-tree-node__content *{pointer-events:none}.el-tree.is-dragging.is-drop-not-allow .el-tree-node__content{cursor:not-allowed}.el-tree-node__expand-icon{cursor:pointer;color:#C0C4CC;font-size:12px;-webkit-transform:rotate(0);transform:rotate(0);-webkit-transition:-webkit-transform .3s ease-in-out;transition:-webkit-transform .3s ease-in-out;transition:transform .3s ease-in-out;transition:transform .3s ease-in-out,-webkit-transform .3s ease-in-out}.el-tree-node__expand-icon.expanded{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.el-tree-node__expand-icon.is-leaf{color:transparent;cursor:default}.el-tree-node__label{font-size:14px}.el-tree-node__loading-icon{margin-right:8px;font-size:14px;color:#C0C4CC}.el-tree-node>.el-tree-node__children{overflow:hidden;background-color:transparent}.el-tree-node.is-expanded>.el-tree-node__children{display:block}.el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content{background-color:#f0f7ff}.el-alert{width:100%;padding:8px 16px;margin:0;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:4px;position:relative;background-color:#FFF;overflow:hidden;opacity:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-transition:opacity .2s;transition:opacity .2s}.el-alert.is-light .el-alert__closebtn{color:#C0C4CC}.el-alert.is-dark .el-alert__closebtn,.el-alert.is-dark .el-alert__description{color:#FFF}.el-alert.is-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-alert--success.is-light{background-color:#f0f9eb;color:#67C23A}.el-alert--success.is-light .el-alert__description{color:#67C23A}.el-alert--success.is-dark{background-color:#67C23A;color:#FFF}.el-alert--info.is-light{background-color:#f4f4f5;color:#909399}.el-alert--info.is-dark{background-color:#909399;color:#FFF}.el-alert--info .el-alert__description{color:#909399}.el-alert--warning.is-light{background-color:#fdf6ec;color:#E6A23C}.el-alert--warning.is-light .el-alert__description{color:#E6A23C}.el-alert--warning.is-dark{background-color:#E6A23C;color:#FFF}.el-alert--error.is-light{background-color:#fef0f0;color:#F56C6C}.el-alert--error.is-light .el-alert__description{color:#F56C6C}.el-alert--error.is-dark{background-color:#F56C6C;color:#FFF}.el-alert__content{display:table-cell;padding:0 8px}.el-alert__icon{font-size:16px;width:16px}.el-alert__icon.is-big{font-size:28px;width:28px}.el-alert__title{font-size:13px;line-height:18px}.el-alert__title.is-bold{font-weight:700}.el-alert .el-alert__description{font-size:12px;margin:5px 0 0}.el-alert__closebtn{font-size:12px;opacity:1;position:absolute;top:12px;right:15px;cursor:pointer}.el-alert-fade-enter,.el-alert-fade-leave-active,.el-loading-fade-enter,.el-loading-fade-leave-active,.el-notification-fade-leave-active,.el-upload iframe{opacity:0}.el-carousel__arrow--right,.el-notification.right{right:16px}.el-alert__closebtn.is-customed{font-style:normal;font-size:13px;top:9px}.el-notification{display:-webkit-box;display:-ms-flexbox;display:flex;width:330px;padding:14px 26px 14px 13px;border-radius:8px;-webkit-box-sizing:border-box;box-sizing:border-box;border:1px solid #EBEEF5;position:fixed;background-color:#FFF;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);-webkit-transition:opacity .3s,left .3s,right .3s,top .4s,bottom .3s,-webkit-transform .3s;transition:opacity .3s,left .3s,right .3s,top .4s,bottom .3s,-webkit-transform .3s;transition:opacity .3s,transform .3s,left .3s,right .3s,top .4s,bottom .3s;transition:opacity .3s,transform .3s,left .3s,right .3s,top .4s,bottom .3s,-webkit-transform .3s;overflow:hidden}.el-notification.left{left:16px}.el-notification__group{margin-left:13px;margin-right:8px}.el-notification__title{font-weight:700;font-size:16px;color:#303133;margin:0}.el-notification__content{font-size:14px;line-height:21px;margin:6px 0 0;color:#606266;text-align:justify}.el-notification__content p{margin:0}.el-notification__icon{height:24px;width:24px;font-size:24px}.el-notification__closeBtn{position:absolute;top:18px;right:15px;cursor:pointer;color:#909399;font-size:16px}.el-notification__closeBtn:hover{color:#606266}.el-notification .el-icon-success{color:#67C23A}.el-notification .el-icon-error{color:#F56C6C}.el-notification .el-icon-info{color:#909399}.el-notification .el-icon-warning{color:#E6A23C}.el-notification-fade-enter.right{right:0;-webkit-transform:translateX(100%);transform:translateX(100%)}.el-notification-fade-enter.left{left:0;-webkit-transform:translateX(-100%);transform:translateX(-100%)}.el-input-number{position:relative;display:inline-block;width:180px;line-height:38px}.el-input-number .el-input{display:block}.el-input-number .el-input__inner{-webkit-appearance:none;padding-left:50px;padding-right:50px;text-align:center}.el-input-number__decrease,.el-input-number__increase{position:absolute;z-index:1;top:1px;width:40px;height:auto;text-align:center;background:#F5F7FA;color:#606266;cursor:pointer;font-size:13px}.el-input-number__decrease:hover,.el-input-number__increase:hover{color:#409EFF}.el-input-number__decrease:hover:not(.is-disabled)~.el-input .el-input__inner:not(.is-disabled),.el-input-number__increase:hover:not(.is-disabled)~.el-input .el-input__inner:not(.is-disabled){border-color:#409EFF}.el-input-number__decrease.is-disabled,.el-input-number__increase.is-disabled{color:#C0C4CC;cursor:not-allowed}.el-input-number__increase{right:1px;border-radius:0 4px 4px 0;border-left:1px solid #DCDFE6}.el-input-number__decrease{left:1px;border-radius:4px 0 0 4px;border-right:1px solid #DCDFE6}.el-input-number.is-disabled .el-input-number__decrease,.el-input-number.is-disabled .el-input-number__increase{border-color:#E4E7ED;color:#E4E7ED}.el-input-number.is-disabled .el-input-number__decrease:hover,.el-input-number.is-disabled .el-input-number__increase:hover{color:#E4E7ED;cursor:not-allowed}.el-input-number--medium{width:200px;line-height:34px}.el-input-number--medium .el-input-number__decrease,.el-input-number--medium .el-input-number__increase{width:36px;font-size:14px}.el-input-number--medium .el-input__inner{padding-left:43px;padding-right:43px}.el-input-number--small{width:130px;line-height:30px}.el-input-number--small .el-input-number__decrease,.el-input-number--small .el-input-number__increase{width:32px;font-size:13px}.el-input-number--small .el-input-number__decrease [class*=el-icon],.el-input-number--small .el-input-number__increase [class*=el-icon]{-webkit-transform:scale(.9);transform:scale(.9)}.el-input-number--small .el-input__inner{padding-left:39px;padding-right:39px}.el-input-number--mini{width:130px;line-height:26px}.el-input-number--mini .el-input-number__decrease,.el-input-number--mini .el-input-number__increase{width:28px;font-size:12px}.el-input-number--mini .el-input-number__decrease [class*=el-icon],.el-input-number--mini .el-input-number__increase [class*=el-icon]{-webkit-transform:scale(.8);transform:scale(.8)}.el-input-number--mini .el-input__inner{padding-left:35px;padding-right:35px}.el-input-number.is-without-controls .el-input__inner{padding-left:15px;padding-right:15px}.el-input-number.is-controls-right .el-input__inner{padding-left:15px;padding-right:50px}.el-input-number.is-controls-right .el-input-number__decrease,.el-input-number.is-controls-right .el-input-number__increase{height:auto;line-height:19px}.el-input-number.is-controls-right .el-input-number__decrease [class*=el-icon],.el-input-number.is-controls-right .el-input-number__increase [class*=el-icon]{-webkit-transform:scale(.8);transform:scale(.8)}.el-input-number.is-controls-right .el-input-number__increase{border-radius:0 4px 0 0;border-bottom:1px solid #DCDFE6}.el-input-number.is-controls-right .el-input-number__decrease{right:1px;bottom:1px;top:auto;left:auto;border-right:none;border-left:1px solid #DCDFE6;border-radius:0 0 4px}.el-input-number.is-controls-right[class*=medium] [class*=decrease],.el-input-number.is-controls-right[class*=medium] [class*=increase]{line-height:17px}.el-input-number.is-controls-right[class*=small] [class*=decrease],.el-input-number.is-controls-right[class*=small] [class*=increase]{line-height:15px}.el-input-number.is-controls-right[class*=mini] [class*=decrease],.el-input-number.is-controls-right[class*=mini] [class*=increase]{line-height:13px}.el-tooltip:focus:hover,.el-tooltip:focus:not(.focusing){outline-width:0}.el-tooltip__popper{position:absolute;border-radius:4px;padding:10px;z-index:2000;font-size:12px;line-height:1.2;min-width:10px;word-wrap:break-word}.el-tooltip__popper .popper__arrow,.el-tooltip__popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-tooltip__popper .popper__arrow{border-width:6px}.el-tooltip__popper .popper__arrow::after{content:\\\" \\\";border-width:5px}.el-button-group::after,.el-button-group::before,.el-color-dropdown__main-wrapper::after,.el-link.is-underline:hover:after,.el-page-header__left::after,.el-progress-bar__inner::after,.el-row::after,.el-row::before,.el-slider::after,.el-slider::before,.el-slider__button-wrapper::after,.el-transfer-panel .el-transfer-panel__footer::after,.el-upload-cover::after,.el-upload-list--picture-card .el-upload-list__item-actions::after{content:\\\"\\\"}.el-tooltip__popper[x-placement^=top]{margin-bottom:12px}.el-tooltip__popper[x-placement^=top] .popper__arrow{bottom:-6px;border-top-color:#303133;border-bottom-width:0}.el-tooltip__popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-5px;border-top-color:#303133;border-bottom-width:0}.el-tooltip__popper[x-placement^=bottom]{margin-top:12px}.el-tooltip__popper[x-placement^=bottom] .popper__arrow{top:-6px;border-top-width:0;border-bottom-color:#303133}.el-tooltip__popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-5px;border-top-width:0;border-bottom-color:#303133}.el-tooltip__popper[x-placement^=right]{margin-left:12px}.el-tooltip__popper[x-placement^=right] .popper__arrow{left:-6px;border-right-color:#303133;border-left-width:0}.el-tooltip__popper[x-placement^=right] .popper__arrow::after{bottom:-5px;left:1px;border-right-color:#303133;border-left-width:0}.el-tooltip__popper[x-placement^=left]{margin-right:12px}.el-tooltip__popper[x-placement^=left] .popper__arrow{right:-6px;border-right-width:0;border-left-color:#303133}.el-tooltip__popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-5px;margin-left:-5px;border-right-width:0;border-left-color:#303133}.el-tooltip__popper.is-dark{background:#303133;color:#FFF}.el-tooltip__popper.is-light{background:#FFF;border:1px solid #303133}.el-tooltip__popper.is-light[x-placement^=top] .popper__arrow{border-top-color:#303133}.el-tooltip__popper.is-light[x-placement^=top] .popper__arrow::after{border-top-color:#FFF}.el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow{border-bottom-color:#303133}.el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow::after{border-bottom-color:#FFF}.el-tooltip__popper.is-light[x-placement^=left] .popper__arrow{border-left-color:#303133}.el-tooltip__popper.is-light[x-placement^=left] .popper__arrow::after{border-left-color:#FFF}.el-tooltip__popper.is-light[x-placement^=right] .popper__arrow{border-right-color:#303133}.el-tooltip__popper.is-light[x-placement^=right] .popper__arrow::after{border-right-color:#FFF}.el-slider::after,.el-slider::before{display:table}.el-slider__button-wrapper .el-tooltip,.el-slider__button-wrapper::after{display:inline-block;vertical-align:middle}.el-slider::after{clear:both}.el-slider__runway{width:100%;height:6px;margin:16px 0;background-color:#E4E7ED;border-radius:3px;position:relative;cursor:pointer;vertical-align:middle}.el-slider__runway.show-input{margin-right:160px;width:auto}.el-slider__runway.disabled{cursor:default}.el-slider__runway.disabled .el-slider__bar{background-color:#C0C4CC}.el-slider__runway.disabled .el-slider__button{border-color:#C0C4CC}.el-slider__runway.disabled .el-slider__button-wrapper.dragging,.el-slider__runway.disabled .el-slider__button-wrapper.hover,.el-slider__runway.disabled .el-slider__button-wrapper:hover{cursor:not-allowed}.el-slider__runway.disabled .el-slider__button.dragging,.el-slider__runway.disabled .el-slider__button.hover,.el-slider__runway.disabled .el-slider__button:hover{-webkit-transform:scale(1);transform:scale(1);cursor:not-allowed}.el-slider__button-wrapper,.el-slider__stop{-webkit-transform:translateX(-50%);position:absolute}.el-slider__input{float:right;margin-top:3px;width:130px}.el-slider__input.el-input-number--mini{margin-top:5px}.el-slider__input.el-input-number--medium{margin-top:0}.el-slider__input.el-input-number--large{margin-top:-2px}.el-slider__bar{height:6px;background-color:#409EFF;border-top-left-radius:3px;border-bottom-left-radius:3px;position:absolute}.el-slider__button-wrapper{height:36px;width:36px;z-index:1001;top:-15px;transform:translateX(-50%);background-color:transparent;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;line-height:normal}.el-image-viewer__btn,.el-slider__button,.el-step__icon-inner{-moz-user-select:none;-ms-user-select:none}.el-slider__button-wrapper::after{height:100%}.el-slider__button-wrapper.hover,.el-slider__button-wrapper:hover{cursor:-webkit-grab;cursor:grab}.el-slider__button-wrapper.dragging{cursor:-webkit-grabbing;cursor:grabbing}.el-slider__button{width:16px;height:16px;border:2px solid #409EFF;background-color:#FFF;border-radius:50%;-webkit-transition:.2s;transition:.2s;-webkit-user-select:none;user-select:none}.el-slider__button.dragging,.el-slider__button.hover,.el-slider__button:hover{-webkit-transform:scale(1.2);transform:scale(1.2)}.el-slider__button.hover,.el-slider__button:hover{cursor:-webkit-grab;cursor:grab}.el-slider__button.dragging{cursor:-webkit-grabbing;cursor:grabbing}.el-slider__stop{height:6px;width:6px;border-radius:100%;background-color:#FFF;transform:translateX(-50%)}.el-slider__marks{top:0;left:12px;width:18px;height:100%}.el-slider__marks-text{position:absolute;-webkit-transform:translateX(-50%);transform:translateX(-50%);font-size:14px;color:#909399;margin-top:15px}.el-slider.is-vertical{position:relative}.el-slider.is-vertical .el-slider__runway{width:6px;height:100%;margin:0 16px}.el-slider.is-vertical .el-slider__bar{width:6px;height:auto;border-radius:0 0 3px 3px}.el-slider.is-vertical .el-slider__button-wrapper{top:auto;left:-15px;-webkit-transform:translateY(50%);transform:translateY(50%)}.el-slider.is-vertical .el-slider__stop{-webkit-transform:translateY(50%);transform:translateY(50%)}.el-slider.is-vertical.el-slider--with-input{padding-bottom:58px}.el-slider.is-vertical.el-slider--with-input .el-slider__input{overflow:visible;float:none;position:absolute;bottom:22px;width:36px;margin-top:15px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input__inner{text-align:center;padding-left:5px;padding-right:5px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__decrease,.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase{top:32px;margin-top:-1px;border:1px solid #DCDFE6;line-height:20px;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-transition:border-color .2s cubic-bezier(.645,.045,.355,1);transition:border-color .2s cubic-bezier(.645,.045,.355,1)}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__decrease{width:18px;right:18px;border-bottom-left-radius:4px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase{width:19px;border-bottom-right-radius:4px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase~.el-input .el-input__inner{border-bottom-left-radius:0;border-bottom-right-radius:0}.el-slider.is-vertical.el-slider--with-input .el-slider__input:hover .el-input-number__decrease,.el-slider.is-vertical.el-slider--with-input .el-slider__input:hover .el-input-number__increase{border-color:#C0C4CC}.el-slider.is-vertical.el-slider--with-input .el-slider__input:active .el-input-number__decrease,.el-slider.is-vertical.el-slider--with-input .el-slider__input:active .el-input-number__increase{border-color:#409EFF}.el-slider.is-vertical .el-slider__marks-text{margin-top:0;left:15px;-webkit-transform:translateY(50%);transform:translateY(50%)}.el-loading-parent--relative{position:relative!important}.el-loading-parent--hidden{overflow:hidden!important}.el-loading-mask{position:absolute;z-index:2000;background-color:rgba(255,255,255,.9);margin:0;top:0;right:0;bottom:0;left:0;-webkit-transition:opacity .3s;transition:opacity .3s}.el-loading-mask.is-fullscreen{position:fixed}.el-loading-mask.is-fullscreen .el-loading-spinner{margin-top:-25px}.el-loading-mask.is-fullscreen .el-loading-spinner .circular{height:50px;width:50px}.el-loading-spinner{top:50%;margin-top:-21px;width:100%;text-align:center;position:absolute}.el-col-pull-0,.el-col-pull-1,.el-col-pull-10,.el-col-pull-11,.el-col-pull-12,.el-col-pull-13,.el-col-pull-14,.el-col-pull-15,.el-col-pull-16,.el-col-pull-17,.el-col-pull-18,.el-col-pull-19,.el-col-pull-2,.el-col-pull-20,.el-col-pull-21,.el-col-pull-22,.el-col-pull-23,.el-col-pull-24,.el-col-pull-3,.el-col-pull-4,.el-col-pull-5,.el-col-pull-6,.el-col-pull-7,.el-col-pull-8,.el-col-pull-9,.el-col-push-0,.el-col-push-1,.el-col-push-10,.el-col-push-11,.el-col-push-12,.el-col-push-13,.el-col-push-14,.el-col-push-15,.el-col-push-16,.el-col-push-17,.el-col-push-18,.el-col-push-19,.el-col-push-2,.el-col-push-20,.el-col-push-21,.el-col-push-22,.el-col-push-23,.el-col-push-24,.el-col-push-3,.el-col-push-4,.el-col-push-5,.el-col-push-6,.el-col-push-7,.el-col-push-8,.el-col-push-9,.el-row,.el-upload-dragger,.el-upload-list__item{position:relative}.el-loading-spinner .el-loading-text{color:#409EFF;margin:3px 0;font-size:14px}.el-loading-spinner .circular{height:42px;width:42px;-webkit-animation:loading-rotate 2s linear infinite;animation:loading-rotate 2s linear infinite}.el-loading-spinner .path{-webkit-animation:loading-dash 1.5s ease-in-out infinite;animation:loading-dash 1.5s ease-in-out infinite;stroke-dasharray:90,150;stroke-dashoffset:0;stroke-width:2;stroke:#409EFF;stroke-linecap:round}.el-loading-spinner i{color:#409EFF}@-webkit-keyframes loading-rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes loading-rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes loading-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-40px}100%{stroke-dasharray:90,150;stroke-dashoffset:-120px}}@keyframes loading-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-40px}100%{stroke-dasharray:90,150;stroke-dashoffset:-120px}}.el-row{-webkit-box-sizing:border-box;box-sizing:border-box}.el-row::after,.el-row::before{display:table}.el-row::after{clear:both}.el-row--flex{display:-webkit-box;display:-ms-flexbox;display:flex}.el-col-0,.el-row--flex:after,.el-row--flex:before{display:none}.el-row--flex.is-justify-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-row--flex.is-justify-end{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.el-row--flex.is-justify-space-between{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.el-row--flex.is-justify-space-around{-ms-flex-pack:distribute;justify-content:space-around}.el-row--flex.is-align-top{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.el-row--flex.is-align-middle{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-row--flex.is-align-bottom{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}[class*=el-col-]{float:left;-webkit-box-sizing:border-box;box-sizing:border-box}.el-col-0{width:0%}.el-col-pull-0{right:0}.el-col-push-0{left:0}.el-col-1{width:4.16667%}.el-col-offset-1{margin-left:4.16667%}.el-col-pull-1{right:4.16667%}.el-col-push-1{left:4.16667%}.el-col-2{width:8.33333%}.el-col-offset-2{margin-left:8.33333%}.el-col-pull-2{right:8.33333%}.el-col-push-2{left:8.33333%}.el-col-3{width:12.5%}.el-col-offset-3{margin-left:12.5%}.el-col-pull-3{right:12.5%}.el-col-push-3{left:12.5%}.el-col-4{width:16.66667%}.el-col-offset-4{margin-left:16.66667%}.el-col-pull-4{right:16.66667%}.el-col-push-4{left:16.66667%}.el-col-5{width:20.83333%}.el-col-offset-5{margin-left:20.83333%}.el-col-pull-5{right:20.83333%}.el-col-push-5{left:20.83333%}.el-col-6{width:25%}.el-col-offset-6{margin-left:25%}.el-col-pull-6{right:25%}.el-col-push-6{left:25%}.el-col-7{width:29.16667%}.el-col-offset-7{margin-left:29.16667%}.el-col-pull-7{right:29.16667%}.el-col-push-7{left:29.16667%}.el-col-8{width:33.33333%}.el-col-offset-8{margin-left:33.33333%}.el-col-pull-8{right:33.33333%}.el-col-push-8{left:33.33333%}.el-col-9{width:37.5%}.el-col-offset-9{margin-left:37.5%}.el-col-pull-9{right:37.5%}.el-col-push-9{left:37.5%}.el-col-10{width:41.66667%}.el-col-offset-10{margin-left:41.66667%}.el-col-pull-10{right:41.66667%}.el-col-push-10{left:41.66667%}.el-col-11{width:45.83333%}.el-col-offset-11{margin-left:45.83333%}.el-col-pull-11{right:45.83333%}.el-col-push-11{left:45.83333%}.el-col-12{width:50%}.el-col-offset-12{margin-left:50%}.el-col-pull-12{right:50%}.el-col-push-12{left:50%}.el-col-13{width:54.16667%}.el-col-offset-13{margin-left:54.16667%}.el-col-pull-13{right:54.16667%}.el-col-push-13{left:54.16667%}.el-col-14{width:58.33333%}.el-col-offset-14{margin-left:58.33333%}.el-col-pull-14{right:58.33333%}.el-col-push-14{left:58.33333%}.el-col-15{width:62.5%}.el-col-offset-15{margin-left:62.5%}.el-col-pull-15{right:62.5%}.el-col-push-15{left:62.5%}.el-col-16{width:66.66667%}.el-col-offset-16{margin-left:66.66667%}.el-col-pull-16{right:66.66667%}.el-col-push-16{left:66.66667%}.el-col-17{width:70.83333%}.el-col-offset-17{margin-left:70.83333%}.el-col-pull-17{right:70.83333%}.el-col-push-17{left:70.83333%}.el-col-18{width:75%}.el-col-offset-18{margin-left:75%}.el-col-pull-18{right:75%}.el-col-push-18{left:75%}.el-col-19{width:79.16667%}.el-col-offset-19{margin-left:79.16667%}.el-col-pull-19{right:79.16667%}.el-col-push-19{left:79.16667%}.el-col-20{width:83.33333%}.el-col-offset-20{margin-left:83.33333%}.el-col-pull-20{right:83.33333%}.el-col-push-20{left:83.33333%}.el-col-21{width:87.5%}.el-col-offset-21{margin-left:87.5%}.el-col-pull-21{right:87.5%}.el-col-push-21{left:87.5%}.el-col-22{width:91.66667%}.el-col-offset-22{margin-left:91.66667%}.el-col-pull-22{right:91.66667%}.el-col-push-22{left:91.66667%}.el-col-23{width:95.83333%}.el-col-offset-23{margin-left:95.83333%}.el-col-pull-23{right:95.83333%}.el-col-push-23{left:95.83333%}.el-col-24{width:100%}.el-col-offset-24{margin-left:100%}.el-col-pull-24{right:100%}.el-col-push-24{left:100%}@media only screen and (max-width:767px){.el-col-xs-0{display:none;width:0%}.el-col-xs-offset-0{margin-left:0}.el-col-xs-pull-0{position:relative;right:0}.el-col-xs-push-0{position:relative;left:0}.el-col-xs-1{width:4.16667%}.el-col-xs-offset-1{margin-left:4.16667%}.el-col-xs-pull-1{position:relative;right:4.16667%}.el-col-xs-push-1{position:relative;left:4.16667%}.el-col-xs-2{width:8.33333%}.el-col-xs-offset-2{margin-left:8.33333%}.el-col-xs-pull-2{position:relative;right:8.33333%}.el-col-xs-push-2{position:relative;left:8.33333%}.el-col-xs-3{width:12.5%}.el-col-xs-offset-3{margin-left:12.5%}.el-col-xs-pull-3{position:relative;right:12.5%}.el-col-xs-push-3{position:relative;left:12.5%}.el-col-xs-4{width:16.66667%}.el-col-xs-offset-4{margin-left:16.66667%}.el-col-xs-pull-4{position:relative;right:16.66667%}.el-col-xs-push-4{position:relative;left:16.66667%}.el-col-xs-5{width:20.83333%}.el-col-xs-offset-5{margin-left:20.83333%}.el-col-xs-pull-5{position:relative;right:20.83333%}.el-col-xs-push-5{position:relative;left:20.83333%}.el-col-xs-6{width:25%}.el-col-xs-offset-6{margin-left:25%}.el-col-xs-pull-6{position:relative;right:25%}.el-col-xs-push-6{position:relative;left:25%}.el-col-xs-7{width:29.16667%}.el-col-xs-offset-7{margin-left:29.16667%}.el-col-xs-pull-7{position:relative;right:29.16667%}.el-col-xs-push-7{position:relative;left:29.16667%}.el-col-xs-8{width:33.33333%}.el-col-xs-offset-8{margin-left:33.33333%}.el-col-xs-pull-8{position:relative;right:33.33333%}.el-col-xs-push-8{position:relative;left:33.33333%}.el-col-xs-9{width:37.5%}.el-col-xs-offset-9{margin-left:37.5%}.el-col-xs-pull-9{position:relative;right:37.5%}.el-col-xs-push-9{position:relative;left:37.5%}.el-col-xs-10{width:41.66667%}.el-col-xs-offset-10{margin-left:41.66667%}.el-col-xs-pull-10{position:relative;right:41.66667%}.el-col-xs-push-10{position:relative;left:41.66667%}.el-col-xs-11{width:45.83333%}.el-col-xs-offset-11{margin-left:45.83333%}.el-col-xs-pull-11{position:relative;right:45.83333%}.el-col-xs-push-11{position:relative;left:45.83333%}.el-col-xs-12{width:50%}.el-col-xs-offset-12{margin-left:50%}.el-col-xs-pull-12{position:relative;right:50%}.el-col-xs-push-12{position:relative;left:50%}.el-col-xs-13{width:54.16667%}.el-col-xs-offset-13{margin-left:54.16667%}.el-col-xs-pull-13{position:relative;right:54.16667%}.el-col-xs-push-13{position:relative;left:54.16667%}.el-col-xs-14{width:58.33333%}.el-col-xs-offset-14{margin-left:58.33333%}.el-col-xs-pull-14{position:relative;right:58.33333%}.el-col-xs-push-14{position:relative;left:58.33333%}.el-col-xs-15{width:62.5%}.el-col-xs-offset-15{margin-left:62.5%}.el-col-xs-pull-15{position:relative;right:62.5%}.el-col-xs-push-15{position:relative;left:62.5%}.el-col-xs-16{width:66.66667%}.el-col-xs-offset-16{margin-left:66.66667%}.el-col-xs-pull-16{position:relative;right:66.66667%}.el-col-xs-push-16{position:relative;left:66.66667%}.el-col-xs-17{width:70.83333%}.el-col-xs-offset-17{margin-left:70.83333%}.el-col-xs-pull-17{position:relative;right:70.83333%}.el-col-xs-push-17{position:relative;left:70.83333%}.el-col-xs-18{width:75%}.el-col-xs-offset-18{margin-left:75%}.el-col-xs-pull-18{position:relative;right:75%}.el-col-xs-push-18{position:relative;left:75%}.el-col-xs-19{width:79.16667%}.el-col-xs-offset-19{margin-left:79.16667%}.el-col-xs-pull-19{position:relative;right:79.16667%}.el-col-xs-push-19{position:relative;left:79.16667%}.el-col-xs-20{width:83.33333%}.el-col-xs-offset-20{margin-left:83.33333%}.el-col-xs-pull-20{position:relative;right:83.33333%}.el-col-xs-push-20{position:relative;left:83.33333%}.el-col-xs-21{width:87.5%}.el-col-xs-offset-21{margin-left:87.5%}.el-col-xs-pull-21{position:relative;right:87.5%}.el-col-xs-push-21{position:relative;left:87.5%}.el-col-xs-22{width:91.66667%}.el-col-xs-offset-22{margin-left:91.66667%}.el-col-xs-pull-22{position:relative;right:91.66667%}.el-col-xs-push-22{position:relative;left:91.66667%}.el-col-xs-23{width:95.83333%}.el-col-xs-offset-23{margin-left:95.83333%}.el-col-xs-pull-23{position:relative;right:95.83333%}.el-col-xs-push-23{position:relative;left:95.83333%}.el-col-xs-24{width:100%}.el-col-xs-offset-24{margin-left:100%}.el-col-xs-pull-24{position:relative;right:100%}.el-col-xs-push-24{position:relative;left:100%}}@media only screen and (min-width:768px){.el-col-sm-0{display:none;width:0%}.el-col-sm-offset-0{margin-left:0}.el-col-sm-pull-0{position:relative;right:0}.el-col-sm-push-0{position:relative;left:0}.el-col-sm-1{width:4.16667%}.el-col-sm-offset-1{margin-left:4.16667%}.el-col-sm-pull-1{position:relative;right:4.16667%}.el-col-sm-push-1{position:relative;left:4.16667%}.el-col-sm-2{width:8.33333%}.el-col-sm-offset-2{margin-left:8.33333%}.el-col-sm-pull-2{position:relative;right:8.33333%}.el-col-sm-push-2{position:relative;left:8.33333%}.el-col-sm-3{width:12.5%}.el-col-sm-offset-3{margin-left:12.5%}.el-col-sm-pull-3{position:relative;right:12.5%}.el-col-sm-push-3{position:relative;left:12.5%}.el-col-sm-4{width:16.66667%}.el-col-sm-offset-4{margin-left:16.66667%}.el-col-sm-pull-4{position:relative;right:16.66667%}.el-col-sm-push-4{position:relative;left:16.66667%}.el-col-sm-5{width:20.83333%}.el-col-sm-offset-5{margin-left:20.83333%}.el-col-sm-pull-5{position:relative;right:20.83333%}.el-col-sm-push-5{position:relative;left:20.83333%}.el-col-sm-6{width:25%}.el-col-sm-offset-6{margin-left:25%}.el-col-sm-pull-6{position:relative;right:25%}.el-col-sm-push-6{position:relative;left:25%}.el-col-sm-7{width:29.16667%}.el-col-sm-offset-7{margin-left:29.16667%}.el-col-sm-pull-7{position:relative;right:29.16667%}.el-col-sm-push-7{position:relative;left:29.16667%}.el-col-sm-8{width:33.33333%}.el-col-sm-offset-8{margin-left:33.33333%}.el-col-sm-pull-8{position:relative;right:33.33333%}.el-col-sm-push-8{position:relative;left:33.33333%}.el-col-sm-9{width:37.5%}.el-col-sm-offset-9{margin-left:37.5%}.el-col-sm-pull-9{position:relative;right:37.5%}.el-col-sm-push-9{position:relative;left:37.5%}.el-col-sm-10{width:41.66667%}.el-col-sm-offset-10{margin-left:41.66667%}.el-col-sm-pull-10{position:relative;right:41.66667%}.el-col-sm-push-10{position:relative;left:41.66667%}.el-col-sm-11{width:45.83333%}.el-col-sm-offset-11{margin-left:45.83333%}.el-col-sm-pull-11{position:relative;right:45.83333%}.el-col-sm-push-11{position:relative;left:45.83333%}.el-col-sm-12{width:50%}.el-col-sm-offset-12{margin-left:50%}.el-col-sm-pull-12{position:relative;right:50%}.el-col-sm-push-12{position:relative;left:50%}.el-col-sm-13{width:54.16667%}.el-col-sm-offset-13{margin-left:54.16667%}.el-col-sm-pull-13{position:relative;right:54.16667%}.el-col-sm-push-13{position:relative;left:54.16667%}.el-col-sm-14{width:58.33333%}.el-col-sm-offset-14{margin-left:58.33333%}.el-col-sm-pull-14{position:relative;right:58.33333%}.el-col-sm-push-14{position:relative;left:58.33333%}.el-col-sm-15{width:62.5%}.el-col-sm-offset-15{margin-left:62.5%}.el-col-sm-pull-15{position:relative;right:62.5%}.el-col-sm-push-15{position:relative;left:62.5%}.el-col-sm-16{width:66.66667%}.el-col-sm-offset-16{margin-left:66.66667%}.el-col-sm-pull-16{position:relative;right:66.66667%}.el-col-sm-push-16{position:relative;left:66.66667%}.el-col-sm-17{width:70.83333%}.el-col-sm-offset-17{margin-left:70.83333%}.el-col-sm-pull-17{position:relative;right:70.83333%}.el-col-sm-push-17{position:relative;left:70.83333%}.el-col-sm-18{width:75%}.el-col-sm-offset-18{margin-left:75%}.el-col-sm-pull-18{position:relative;right:75%}.el-col-sm-push-18{position:relative;left:75%}.el-col-sm-19{width:79.16667%}.el-col-sm-offset-19{margin-left:79.16667%}.el-col-sm-pull-19{position:relative;right:79.16667%}.el-col-sm-push-19{position:relative;left:79.16667%}.el-col-sm-20{width:83.33333%}.el-col-sm-offset-20{margin-left:83.33333%}.el-col-sm-pull-20{position:relative;right:83.33333%}.el-col-sm-push-20{position:relative;left:83.33333%}.el-col-sm-21{width:87.5%}.el-col-sm-offset-21{margin-left:87.5%}.el-col-sm-pull-21{position:relative;right:87.5%}.el-col-sm-push-21{position:relative;left:87.5%}.el-col-sm-22{width:91.66667%}.el-col-sm-offset-22{margin-left:91.66667%}.el-col-sm-pull-22{position:relative;right:91.66667%}.el-col-sm-push-22{position:relative;left:91.66667%}.el-col-sm-23{width:95.83333%}.el-col-sm-offset-23{margin-left:95.83333%}.el-col-sm-pull-23{position:relative;right:95.83333%}.el-col-sm-push-23{position:relative;left:95.83333%}.el-col-sm-24{width:100%}.el-col-sm-offset-24{margin-left:100%}.el-col-sm-pull-24{position:relative;right:100%}.el-col-sm-push-24{position:relative;left:100%}}@media only screen and (min-width:992px){.el-col-md-0{display:none;width:0%}.el-col-md-offset-0{margin-left:0}.el-col-md-pull-0{position:relative;right:0}.el-col-md-push-0{position:relative;left:0}.el-col-md-1{width:4.16667%}.el-col-md-offset-1{margin-left:4.16667%}.el-col-md-pull-1{position:relative;right:4.16667%}.el-col-md-push-1{position:relative;left:4.16667%}.el-col-md-2{width:8.33333%}.el-col-md-offset-2{margin-left:8.33333%}.el-col-md-pull-2{position:relative;right:8.33333%}.el-col-md-push-2{position:relative;left:8.33333%}.el-col-md-3{width:12.5%}.el-col-md-offset-3{margin-left:12.5%}.el-col-md-pull-3{position:relative;right:12.5%}.el-col-md-push-3{position:relative;left:12.5%}.el-col-md-4{width:16.66667%}.el-col-md-offset-4{margin-left:16.66667%}.el-col-md-pull-4{position:relative;right:16.66667%}.el-col-md-push-4{position:relative;left:16.66667%}.el-col-md-5{width:20.83333%}.el-col-md-offset-5{margin-left:20.83333%}.el-col-md-pull-5{position:relative;right:20.83333%}.el-col-md-push-5{position:relative;left:20.83333%}.el-col-md-6{width:25%}.el-col-md-offset-6{margin-left:25%}.el-col-md-pull-6{position:relative;right:25%}.el-col-md-push-6{position:relative;left:25%}.el-col-md-7{width:29.16667%}.el-col-md-offset-7{margin-left:29.16667%}.el-col-md-pull-7{position:relative;right:29.16667%}.el-col-md-push-7{position:relative;left:29.16667%}.el-col-md-8{width:33.33333%}.el-col-md-offset-8{margin-left:33.33333%}.el-col-md-pull-8{position:relative;right:33.33333%}.el-col-md-push-8{position:relative;left:33.33333%}.el-col-md-9{width:37.5%}.el-col-md-offset-9{margin-left:37.5%}.el-col-md-pull-9{position:relative;right:37.5%}.el-col-md-push-9{position:relative;left:37.5%}.el-col-md-10{width:41.66667%}.el-col-md-offset-10{margin-left:41.66667%}.el-col-md-pull-10{position:relative;right:41.66667%}.el-col-md-push-10{position:relative;left:41.66667%}.el-col-md-11{width:45.83333%}.el-col-md-offset-11{margin-left:45.83333%}.el-col-md-pull-11{position:relative;right:45.83333%}.el-col-md-push-11{position:relative;left:45.83333%}.el-col-md-12{width:50%}.el-col-md-offset-12{margin-left:50%}.el-col-md-pull-12{position:relative;right:50%}.el-col-md-push-12{position:relative;left:50%}.el-col-md-13{width:54.16667%}.el-col-md-offset-13{margin-left:54.16667%}.el-col-md-pull-13{position:relative;right:54.16667%}.el-col-md-push-13{position:relative;left:54.16667%}.el-col-md-14{width:58.33333%}.el-col-md-offset-14{margin-left:58.33333%}.el-col-md-pull-14{position:relative;right:58.33333%}.el-col-md-push-14{position:relative;left:58.33333%}.el-col-md-15{width:62.5%}.el-col-md-offset-15{margin-left:62.5%}.el-col-md-pull-15{position:relative;right:62.5%}.el-col-md-push-15{position:relative;left:62.5%}.el-col-md-16{width:66.66667%}.el-col-md-offset-16{margin-left:66.66667%}.el-col-md-pull-16{position:relative;right:66.66667%}.el-col-md-push-16{position:relative;left:66.66667%}.el-col-md-17{width:70.83333%}.el-col-md-offset-17{margin-left:70.83333%}.el-col-md-pull-17{position:relative;right:70.83333%}.el-col-md-push-17{position:relative;left:70.83333%}.el-col-md-18{width:75%}.el-col-md-offset-18{margin-left:75%}.el-col-md-pull-18{position:relative;right:75%}.el-col-md-push-18{position:relative;left:75%}.el-col-md-19{width:79.16667%}.el-col-md-offset-19{margin-left:79.16667%}.el-col-md-pull-19{position:relative;right:79.16667%}.el-col-md-push-19{position:relative;left:79.16667%}.el-col-md-20{width:83.33333%}.el-col-md-offset-20{margin-left:83.33333%}.el-col-md-pull-20{position:relative;right:83.33333%}.el-col-md-push-20{position:relative;left:83.33333%}.el-col-md-21{width:87.5%}.el-col-md-offset-21{margin-left:87.5%}.el-col-md-pull-21{position:relative;right:87.5%}.el-col-md-push-21{position:relative;left:87.5%}.el-col-md-22{width:91.66667%}.el-col-md-offset-22{margin-left:91.66667%}.el-col-md-pull-22{position:relative;right:91.66667%}.el-col-md-push-22{position:relative;left:91.66667%}.el-col-md-23{width:95.83333%}.el-col-md-offset-23{margin-left:95.83333%}.el-col-md-pull-23{position:relative;right:95.83333%}.el-col-md-push-23{position:relative;left:95.83333%}.el-col-md-24{width:100%}.el-col-md-offset-24{margin-left:100%}.el-col-md-pull-24{position:relative;right:100%}.el-col-md-push-24{position:relative;left:100%}}@media only screen and (min-width:1200px){.el-col-lg-0{display:none;width:0%}.el-col-lg-offset-0{margin-left:0}.el-col-lg-pull-0{position:relative;right:0}.el-col-lg-push-0{position:relative;left:0}.el-col-lg-1{width:4.16667%}.el-col-lg-offset-1{margin-left:4.16667%}.el-col-lg-pull-1{position:relative;right:4.16667%}.el-col-lg-push-1{position:relative;left:4.16667%}.el-col-lg-2{width:8.33333%}.el-col-lg-offset-2{margin-left:8.33333%}.el-col-lg-pull-2{position:relative;right:8.33333%}.el-col-lg-push-2{position:relative;left:8.33333%}.el-col-lg-3{width:12.5%}.el-col-lg-offset-3{margin-left:12.5%}.el-col-lg-pull-3{position:relative;right:12.5%}.el-col-lg-push-3{position:relative;left:12.5%}.el-col-lg-4{width:16.66667%}.el-col-lg-offset-4{margin-left:16.66667%}.el-col-lg-pull-4{position:relative;right:16.66667%}.el-col-lg-push-4{position:relative;left:16.66667%}.el-col-lg-5{width:20.83333%}.el-col-lg-offset-5{margin-left:20.83333%}.el-col-lg-pull-5{position:relative;right:20.83333%}.el-col-lg-push-5{position:relative;left:20.83333%}.el-col-lg-6{width:25%}.el-col-lg-offset-6{margin-left:25%}.el-col-lg-pull-6{position:relative;right:25%}.el-col-lg-push-6{position:relative;left:25%}.el-col-lg-7{width:29.16667%}.el-col-lg-offset-7{margin-left:29.16667%}.el-col-lg-pull-7{position:relative;right:29.16667%}.el-col-lg-push-7{position:relative;left:29.16667%}.el-col-lg-8{width:33.33333%}.el-col-lg-offset-8{margin-left:33.33333%}.el-col-lg-pull-8{position:relative;right:33.33333%}.el-col-lg-push-8{position:relative;left:33.33333%}.el-col-lg-9{width:37.5%}.el-col-lg-offset-9{margin-left:37.5%}.el-col-lg-pull-9{position:relative;right:37.5%}.el-col-lg-push-9{position:relative;left:37.5%}.el-col-lg-10{width:41.66667%}.el-col-lg-offset-10{margin-left:41.66667%}.el-col-lg-pull-10{position:relative;right:41.66667%}.el-col-lg-push-10{position:relative;left:41.66667%}.el-col-lg-11{width:45.83333%}.el-col-lg-offset-11{margin-left:45.83333%}.el-col-lg-pull-11{position:relative;right:45.83333%}.el-col-lg-push-11{position:relative;left:45.83333%}.el-col-lg-12{width:50%}.el-col-lg-offset-12{margin-left:50%}.el-col-lg-pull-12{position:relative;right:50%}.el-col-lg-push-12{position:relative;left:50%}.el-col-lg-13{width:54.16667%}.el-col-lg-offset-13{margin-left:54.16667%}.el-col-lg-pull-13{position:relative;right:54.16667%}.el-col-lg-push-13{position:relative;left:54.16667%}.el-col-lg-14{width:58.33333%}.el-col-lg-offset-14{margin-left:58.33333%}.el-col-lg-pull-14{position:relative;right:58.33333%}.el-col-lg-push-14{position:relative;left:58.33333%}.el-col-lg-15{width:62.5%}.el-col-lg-offset-15{margin-left:62.5%}.el-col-lg-pull-15{position:relative;right:62.5%}.el-col-lg-push-15{position:relative;left:62.5%}.el-col-lg-16{width:66.66667%}.el-col-lg-offset-16{margin-left:66.66667%}.el-col-lg-pull-16{position:relative;right:66.66667%}.el-col-lg-push-16{position:relative;left:66.66667%}.el-col-lg-17{width:70.83333%}.el-col-lg-offset-17{margin-left:70.83333%}.el-col-lg-pull-17{position:relative;right:70.83333%}.el-col-lg-push-17{position:relative;left:70.83333%}.el-col-lg-18{width:75%}.el-col-lg-offset-18{margin-left:75%}.el-col-lg-pull-18{position:relative;right:75%}.el-col-lg-push-18{position:relative;left:75%}.el-col-lg-19{width:79.16667%}.el-col-lg-offset-19{margin-left:79.16667%}.el-col-lg-pull-19{position:relative;right:79.16667%}.el-col-lg-push-19{position:relative;left:79.16667%}.el-col-lg-20{width:83.33333%}.el-col-lg-offset-20{margin-left:83.33333%}.el-col-lg-pull-20{position:relative;right:83.33333%}.el-col-lg-push-20{position:relative;left:83.33333%}.el-col-lg-21{width:87.5%}.el-col-lg-offset-21{margin-left:87.5%}.el-col-lg-pull-21{position:relative;right:87.5%}.el-col-lg-push-21{position:relative;left:87.5%}.el-col-lg-22{width:91.66667%}.el-col-lg-offset-22{margin-left:91.66667%}.el-col-lg-pull-22{position:relative;right:91.66667%}.el-col-lg-push-22{position:relative;left:91.66667%}.el-col-lg-23{width:95.83333%}.el-col-lg-offset-23{margin-left:95.83333%}.el-col-lg-pull-23{position:relative;right:95.83333%}.el-col-lg-push-23{position:relative;left:95.83333%}.el-col-lg-24{width:100%}.el-col-lg-offset-24{margin-left:100%}.el-col-lg-pull-24{position:relative;right:100%}.el-col-lg-push-24{position:relative;left:100%}}@media only screen and (min-width:1920px){.el-col-xl-0{display:none;width:0%}.el-col-xl-offset-0{margin-left:0}.el-col-xl-pull-0{position:relative;right:0}.el-col-xl-push-0{position:relative;left:0}.el-col-xl-1{width:4.16667%}.el-col-xl-offset-1{margin-left:4.16667%}.el-col-xl-pull-1{position:relative;right:4.16667%}.el-col-xl-push-1{position:relative;left:4.16667%}.el-col-xl-2{width:8.33333%}.el-col-xl-offset-2{margin-left:8.33333%}.el-col-xl-pull-2{position:relative;right:8.33333%}.el-col-xl-push-2{position:relative;left:8.33333%}.el-col-xl-3{width:12.5%}.el-col-xl-offset-3{margin-left:12.5%}.el-col-xl-pull-3{position:relative;right:12.5%}.el-col-xl-push-3{position:relative;left:12.5%}.el-col-xl-4{width:16.66667%}.el-col-xl-offset-4{margin-left:16.66667%}.el-col-xl-pull-4{position:relative;right:16.66667%}.el-col-xl-push-4{position:relative;left:16.66667%}.el-col-xl-5{width:20.83333%}.el-col-xl-offset-5{margin-left:20.83333%}.el-col-xl-pull-5{position:relative;right:20.83333%}.el-col-xl-push-5{position:relative;left:20.83333%}.el-col-xl-6{width:25%}.el-col-xl-offset-6{margin-left:25%}.el-col-xl-pull-6{position:relative;right:25%}.el-col-xl-push-6{position:relative;left:25%}.el-col-xl-7{width:29.16667%}.el-col-xl-offset-7{margin-left:29.16667%}.el-col-xl-pull-7{position:relative;right:29.16667%}.el-col-xl-push-7{position:relative;left:29.16667%}.el-col-xl-8{width:33.33333%}.el-col-xl-offset-8{margin-left:33.33333%}.el-col-xl-pull-8{position:relative;right:33.33333%}.el-col-xl-push-8{position:relative;left:33.33333%}.el-col-xl-9{width:37.5%}.el-col-xl-offset-9{margin-left:37.5%}.el-col-xl-pull-9{position:relative;right:37.5%}.el-col-xl-push-9{position:relative;left:37.5%}.el-col-xl-10{width:41.66667%}.el-col-xl-offset-10{margin-left:41.66667%}.el-col-xl-pull-10{position:relative;right:41.66667%}.el-col-xl-push-10{position:relative;left:41.66667%}.el-col-xl-11{width:45.83333%}.el-col-xl-offset-11{margin-left:45.83333%}.el-col-xl-pull-11{position:relative;right:45.83333%}.el-col-xl-push-11{position:relative;left:45.83333%}.el-col-xl-12{width:50%}.el-col-xl-offset-12{margin-left:50%}.el-col-xl-pull-12{position:relative;right:50%}.el-col-xl-push-12{position:relative;left:50%}.el-col-xl-13{width:54.16667%}.el-col-xl-offset-13{margin-left:54.16667%}.el-col-xl-pull-13{position:relative;right:54.16667%}.el-col-xl-push-13{position:relative;left:54.16667%}.el-col-xl-14{width:58.33333%}.el-col-xl-offset-14{margin-left:58.33333%}.el-col-xl-pull-14{position:relative;right:58.33333%}.el-col-xl-push-14{position:relative;left:58.33333%}.el-col-xl-15{width:62.5%}.el-col-xl-offset-15{margin-left:62.5%}.el-col-xl-pull-15{position:relative;right:62.5%}.el-col-xl-push-15{position:relative;left:62.5%}.el-col-xl-16{width:66.66667%}.el-col-xl-offset-16{margin-left:66.66667%}.el-col-xl-pull-16{position:relative;right:66.66667%}.el-col-xl-push-16{position:relative;left:66.66667%}.el-col-xl-17{width:70.83333%}.el-col-xl-offset-17{margin-left:70.83333%}.el-col-xl-pull-17{position:relative;right:70.83333%}.el-col-xl-push-17{position:relative;left:70.83333%}.el-col-xl-18{width:75%}.el-col-xl-offset-18{margin-left:75%}.el-col-xl-pull-18{position:relative;right:75%}.el-col-xl-push-18{position:relative;left:75%}.el-col-xl-19{width:79.16667%}.el-col-xl-offset-19{margin-left:79.16667%}.el-col-xl-pull-19{position:relative;right:79.16667%}.el-col-xl-push-19{position:relative;left:79.16667%}.el-col-xl-20{width:83.33333%}.el-col-xl-offset-20{margin-left:83.33333%}.el-col-xl-pull-20{position:relative;right:83.33333%}.el-col-xl-push-20{position:relative;left:83.33333%}.el-col-xl-21{width:87.5%}.el-col-xl-offset-21{margin-left:87.5%}.el-col-xl-pull-21{position:relative;right:87.5%}.el-col-xl-push-21{position:relative;left:87.5%}.el-col-xl-22{width:91.66667%}.el-col-xl-offset-22{margin-left:91.66667%}.el-col-xl-pull-22{position:relative;right:91.66667%}.el-col-xl-push-22{position:relative;left:91.66667%}.el-col-xl-23{width:95.83333%}.el-col-xl-offset-23{margin-left:95.83333%}.el-col-xl-pull-23{position:relative;right:95.83333%}.el-col-xl-push-23{position:relative;left:95.83333%}.el-col-xl-24{width:100%}.el-col-xl-offset-24{margin-left:100%}.el-col-xl-pull-24{position:relative;right:100%}.el-col-xl-push-24{position:relative;left:100%}}@-webkit-keyframes progress{0%{background-position:0 0}100%{background-position:32px 0}}.el-upload{display:inline-block;text-align:center;cursor:pointer;outline:0}.el-upload__input{display:none}.el-upload__tip{font-size:12px;color:#606266;margin-top:7px}.el-upload iframe{position:absolute;z-index:-1;top:0;left:0;filter:alpha(opacity=0)}.el-upload--picture-card{background-color:#fbfdff;border:1px dashed #c0ccda;border-radius:6px;-webkit-box-sizing:border-box;box-sizing:border-box;width:148px;height:148px;cursor:pointer;line-height:146px;vertical-align:top}.el-upload--picture-card i{font-size:28px;color:#8c939d}.el-upload--picture-card:hover,.el-upload:focus{border-color:#409EFF;color:#409EFF}.el-upload:focus .el-upload-dragger{border-color:#409EFF}.el-upload-dragger{background-color:#fff;border:1px dashed #d9d9d9;border-radius:6px;-webkit-box-sizing:border-box;box-sizing:border-box;width:360px;height:180px;text-align:center;cursor:pointer;overflow:hidden}.el-upload-dragger .el-icon-upload{font-size:67px;color:#C0C4CC;margin:40px 0 16px;line-height:50px}.el-upload-dragger+.el-upload__tip{text-align:center}.el-upload-dragger~.el-upload__files{border-top:1px solid #DCDFE6;margin-top:7px;padding-top:5px}.el-upload-dragger .el-upload__text{color:#606266;font-size:14px;text-align:center}.el-upload-dragger .el-upload__text em{color:#409EFF;font-style:normal}.el-upload-dragger:hover{border-color:#409EFF}.el-upload-dragger.is-dragover{background-color:rgba(32,159,255,.06);border:2px dashed #409EFF}.el-upload-list{margin:0;padding:0;list-style:none}.el-upload-list__item{-webkit-transition:all .5s cubic-bezier(.55,0,.1,1);transition:all .5s cubic-bezier(.55,0,.1,1);font-size:14px;color:#606266;line-height:1.8;margin-top:5px;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:4px;width:100%}.el-upload-list__item .el-progress{position:absolute;top:20px;width:100%}.el-upload-list__item .el-progress__text{position:absolute;right:0;top:-13px}.el-upload-list__item .el-progress-bar{margin-right:0;padding-right:0}.el-upload-list__item:first-child{margin-top:10px}.el-upload-list__item .el-icon-upload-success{color:#67C23A}.el-upload-list__item .el-icon-close{display:none;position:absolute;top:5px;right:5px;cursor:pointer;opacity:.75;color:#606266}.el-upload-list__item .el-icon-close:hover{opacity:1}.el-upload-list__item .el-icon-close-tip{display:none;position:absolute;top:5px;right:5px;font-size:12px;cursor:pointer;opacity:1;color:#409EFF}.el-upload-list__item:hover .el-icon-close{display:inline-block}.el-upload-list__item:hover .el-progress__text{display:none}.el-upload-list__item.is-success .el-upload-list__item-status-label{display:block}.el-upload-list__item.is-success .el-upload-list__item-name:focus,.el-upload-list__item.is-success .el-upload-list__item-name:hover{color:#409EFF;cursor:pointer}.el-upload-list__item.is-success:focus:not(:hover) .el-icon-close-tip{display:inline-block}.el-upload-list__item.is-success:active,.el-upload-list__item.is-success:not(.focusing):focus{outline-width:0}.el-upload-list__item.is-success:active .el-icon-close-tip,.el-upload-list__item.is-success:focus .el-upload-list__item-status-label,.el-upload-list__item.is-success:hover .el-upload-list__item-status-label,.el-upload-list__item.is-success:not(.focusing):focus .el-icon-close-tip{display:none}.el-upload-list.is-disabled .el-upload-list__item:hover .el-upload-list__item-status-label{display:block}.el-upload-list__item-name{color:#606266;display:block;margin-right:40px;overflow:hidden;padding-left:4px;text-overflow:ellipsis;-webkit-transition:color .3s;transition:color .3s;white-space:nowrap}.el-upload-list__item-name [class^=el-icon]{height:100%;margin-right:7px;color:#909399;line-height:inherit}.el-upload-list__item-status-label{position:absolute;right:5px;top:0;line-height:inherit;display:none}.el-upload-list__item-delete{position:absolute;right:10px;top:0;font-size:12px;color:#606266;display:none}.el-upload-list__item-delete:hover{color:#409EFF}.el-upload-list--picture-card{margin:0;display:inline;vertical-align:top}.el-upload-list--picture-card .el-upload-list__item{overflow:hidden;background-color:#fff;border:1px solid #c0ccda;border-radius:6px;-webkit-box-sizing:border-box;box-sizing:border-box;width:148px;height:148px;margin:0 8px 8px 0;display:inline-block}.el-upload-list--picture-card .el-upload-list__item .el-icon-check,.el-upload-list--picture-card .el-upload-list__item .el-icon-circle-check{color:#FFF}.el-upload-list--picture-card .el-upload-list__item .el-icon-close,.el-upload-list--picture-card .el-upload-list__item:hover .el-upload-list__item-status-label{display:none}.el-upload-list--picture-card .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture-card .el-upload-list__item-name{display:none}.el-upload-list--picture-card .el-upload-list__item-thumbnail{width:100%;height:100%}.el-upload-list--picture-card .el-upload-list__item-status-label{position:absolute;right:-15px;top:-6px;width:40px;height:24px;background:#13ce66;text-align:center;-webkit-transform:rotate(45deg);transform:rotate(45deg);-webkit-box-shadow:0 0 1pc 1px rgba(0,0,0,.2);box-shadow:0 0 1pc 1px rgba(0,0,0,.2)}.el-upload-list--picture-card .el-upload-list__item-status-label i{font-size:12px;margin-top:11px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.el-upload-list--picture-card .el-upload-list__item-actions{position:absolute;width:100%;height:100%;left:0;top:0;cursor:default;text-align:center;color:#fff;opacity:0;font-size:20px;background-color:rgba(0,0,0,.5);-webkit-transition:opacity .3s;transition:opacity .3s}.el-upload-list--picture-card .el-upload-list__item-actions::after{display:inline-block;height:100%;vertical-align:middle}.el-upload-list--picture-card .el-upload-list__item-actions span{display:none;cursor:pointer}.el-upload-list--picture-card .el-upload-list__item-actions span+span{margin-left:15px}.el-upload-list--picture-card .el-upload-list__item-actions .el-upload-list__item-delete{position:static;font-size:inherit;color:inherit}.el-upload-list--picture-card .el-upload-list__item-actions:hover{opacity:1}.el-upload-list--picture-card .el-upload-list__item-actions:hover span{display:inline-block}.el-upload-list--picture-card .el-progress{top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);bottom:auto;width:126px}.el-upload-list--picture-card .el-progress .el-progress__text{top:50%}.el-upload-list--picture .el-upload-list__item{overflow:hidden;z-index:0;background-color:#fff;border:1px solid #c0ccda;border-radius:6px;-webkit-box-sizing:border-box;box-sizing:border-box;margin-top:10px;padding:10px 10px 10px 90px;height:92px}.el-upload-list--picture .el-upload-list__item .el-icon-check,.el-upload-list--picture .el-upload-list__item .el-icon-circle-check{color:#FFF}.el-upload-list--picture .el-upload-list__item:hover .el-upload-list__item-status-label{background:0 0;-webkit-box-shadow:none;box-shadow:none;top:-2px;right:-12px}.el-upload-list--picture .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name{line-height:70px;margin-top:0}.el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name i{display:none}.el-upload-list--picture .el-upload-list__item-thumbnail{vertical-align:middle;display:inline-block;width:70px;height:70px;float:left;position:relative;z-index:1;margin-left:-80px;background-color:#FFF}.el-upload-list--picture .el-upload-list__item-name{display:block;margin-top:20px}.el-upload-list--picture .el-upload-list__item-name i{font-size:70px;line-height:1;position:absolute;left:9px;top:10px}.el-upload-list--picture .el-upload-list__item-status-label{position:absolute;right:-17px;top:-7px;width:46px;height:26px;background:#13ce66;text-align:center;-webkit-transform:rotate(45deg);transform:rotate(45deg);-webkit-box-shadow:0 1px 1px #ccc;box-shadow:0 1px 1px #ccc}.el-upload-list--picture .el-upload-list__item-status-label i{font-size:12px;margin-top:12px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.el-upload-list--picture .el-progress{position:relative;top:-7px}.el-upload-cover{position:absolute;left:0;top:0;width:100%;height:100%;overflow:hidden;z-index:10;cursor:default}.el-upload-cover::after{display:inline-block;height:100%;vertical-align:middle}.el-upload-cover img{display:block;width:100%;height:100%}.el-upload-cover__label{position:absolute;right:-15px;top:-6px;width:40px;height:24px;background:#13ce66;text-align:center;-webkit-transform:rotate(45deg);transform:rotate(45deg);-webkit-box-shadow:0 0 1pc 1px rgba(0,0,0,.2);box-shadow:0 0 1pc 1px rgba(0,0,0,.2)}.el-upload-cover__label i{font-size:12px;margin-top:11px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);color:#fff}.el-upload-cover__progress{display:inline-block;vertical-align:middle;position:static;width:243px}.el-upload-cover__progress+.el-upload__inner{opacity:0}.el-upload-cover__content{position:absolute;top:0;left:0;width:100%;height:100%}.el-upload-cover__interact{position:absolute;bottom:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,.72);text-align:center}.el-upload-cover__interact .btn{display:inline-block;color:#FFF;font-size:14px;cursor:pointer;vertical-align:middle;-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);margin-top:60px}.el-upload-cover__interact .btn span{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.el-upload-cover__interact .btn:not(:first-child){margin-left:35px}.el-upload-cover__interact .btn:hover{-webkit-transform:translateY(-13px);transform:translateY(-13px)}.el-upload-cover__interact .btn:hover span{opacity:1}.el-upload-cover__interact .btn i{color:#FFF;display:block;font-size:24px;line-height:inherit;margin:0 auto 5px}.el-upload-cover__title{position:absolute;bottom:0;left:0;background-color:#FFF;height:36px;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:400;text-align:left;padding:0 10px;margin:0;line-height:36px;font-size:14px;color:#303133}.el-upload-cover+.el-upload__inner{opacity:0;position:relative;z-index:1}.el-progress{position:relative;line-height:1}.el-progress__text{font-size:14px;color:#606266;display:inline-block;vertical-align:middle;margin-left:10px;line-height:1}.el-progress__text i{vertical-align:middle;display:block}.el-progress--circle,.el-progress--dashboard{display:inline-block}.el-progress--circle .el-progress__text,.el-progress--dashboard .el-progress__text{position:absolute;top:50%;left:0;width:100%;text-align:center;margin:0;-webkit-transform:translate(0,-50%);transform:translate(0,-50%)}.el-progress--circle .el-progress__text i,.el-progress--dashboard .el-progress__text i{vertical-align:middle;display:inline-block}.el-progress--without-text .el-progress__text{display:none}.el-progress--without-text .el-progress-bar{padding-right:0;margin-right:0;display:block}.el-progress--text-inside .el-progress-bar{padding-right:0;margin-right:0}.el-progress.is-success .el-progress-bar__inner{background-color:#67C23A}.el-progress.is-success .el-progress__text{color:#67C23A}.el-progress.is-warning .el-progress-bar__inner{background-color:#E6A23C}.el-badge__content,.el-progress.is-exception .el-progress-bar__inner{background-color:#F56C6C}.el-progress.is-warning .el-progress__text{color:#E6A23C}.el-progress.is-exception .el-progress__text{color:#F56C6C}.el-progress-bar{padding-right:50px;display:inline-block;vertical-align:middle;width:100%;margin-right:-55px;-webkit-box-sizing:border-box;box-sizing:border-box}.el-card__header,.el-message,.el-step__icon{-webkit-box-sizing:border-box}.el-progress-bar__outer{height:6px;border-radius:100px;background-color:#EBEEF5;overflow:hidden;position:relative;vertical-align:middle}.el-progress-bar__inner{position:absolute;left:0;top:0;height:100%;background-color:#409EFF;text-align:right;border-radius:100px;line-height:1;white-space:nowrap;-webkit-transition:width .6s ease;transition:width .6s ease}.el-progress-bar__inner::after{display:inline-block;height:100%;vertical-align:middle}.el-progress-bar__innerText{display:inline-block;vertical-align:middle;color:#FFF;font-size:12px;margin:0 5px}@keyframes progress{0%{background-position:0 0}100%{background-position:32px 0}}.el-time-spinner{width:100%;white-space:nowrap}.el-spinner{display:inline-block;vertical-align:middle}.el-spinner-inner{-webkit-animation:rotate 2s linear infinite;animation:rotate 2s linear infinite;width:50px;height:50px}.el-spinner-inner .path{stroke:#ececec;stroke-linecap:round;-webkit-animation:dash 1.5s ease-in-out infinite;animation:dash 1.5s ease-in-out infinite}@-webkit-keyframes rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes dash{0%{stroke-dasharray:1,150;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-35}100%{stroke-dasharray:90,150;stroke-dashoffset:-124}}@keyframes dash{0%{stroke-dasharray:1,150;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-35}100%{stroke-dasharray:90,150;stroke-dashoffset:-124}}.el-message{min-width:380px;box-sizing:border-box;border-radius:4px;border-width:1px;border-style:solid;border-color:#EBEEF5;position:fixed;left:50%;top:20px;-webkit-transform:translateX(-50%);transform:translateX(-50%);background-color:#edf2fc;-webkit-transition:opacity .3s,top .4s,-webkit-transform .4s;transition:opacity .3s,top .4s,-webkit-transform .4s;transition:opacity .3s,transform .4s,top .4s;transition:opacity .3s,transform .4s,top .4s,-webkit-transform .4s;overflow:hidden;padding:15px 15px 15px 20px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-message.is-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-message.is-closable .el-message__content{padding-right:16px}.el-message p{margin:0}.el-message--info .el-message__content{color:#909399}.el-message--success{background-color:#f0f9eb;border-color:#e1f3d8}.el-message--success .el-message__content{color:#67C23A}.el-message--warning{background-color:#fdf6ec;border-color:#faecd8}.el-message--warning .el-message__content{color:#E6A23C}.el-message--error{background-color:#fef0f0;border-color:#fde2e2}.el-message--error .el-message__content{color:#F56C6C}.el-message__icon{margin-right:10px}.el-message__content{padding:0;font-size:14px;line-height:1}.el-message__content:focus{outline-width:0}.el-message__closeBtn{position:absolute;top:50%;right:15px;-webkit-transform:translateY(-50%);transform:translateY(-50%);cursor:pointer;color:#C0C4CC;font-size:16px}.el-message__closeBtn:focus{outline-width:0}.el-message__closeBtn:hover{color:#909399}.el-message .el-icon-success{color:#67C23A}.el-message .el-icon-error{color:#F56C6C}.el-message .el-icon-info{color:#909399}.el-message .el-icon-warning{color:#E6A23C}.el-message-fade-enter,.el-message-fade-leave-active{opacity:0;-webkit-transform:translate(-50%,-100%);transform:translate(-50%,-100%)}.el-badge{position:relative;vertical-align:middle;display:inline-block}.el-badge__content{border-radius:10px;color:#FFF;display:inline-block;font-size:12px;height:18px;line-height:18px;padding:0 6px;text-align:center;white-space:nowrap;border:1px solid #FFF}.el-badge__content.is-fixed{position:absolute;top:0;right:10px;-webkit-transform:translateY(-50%) translateX(100%);transform:translateY(-50%) translateX(100%)}.el-rate__icon,.el-rate__item{position:relative;display:inline-block}.el-badge__content.is-fixed.is-dot{right:5px}.el-badge__content.is-dot{height:8px;width:8px;padding:0;right:0;border-radius:50%}.el-badge__content--primary{background-color:#409EFF}.el-badge__content--success{background-color:#67C23A}.el-badge__content--warning{background-color:#E6A23C}.el-badge__content--info{background-color:#909399}.el-badge__content--danger{background-color:#F56C6C}.el-card{border-radius:4px;border:1px solid #EBEEF5;background-color:#FFF;overflow:hidden;color:#303133;-webkit-transition:.3s;transition:.3s}.el-card.is-always-shadow,.el-card.is-hover-shadow:focus,.el-card.is-hover-shadow:hover{box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-card__header{padding:18px 20px;border-bottom:1px solid #EBEEF5;box-sizing:border-box}.el-card__body,.el-main{padding:20px}.el-rate{height:20px;line-height:1}.el-rate:active,.el-rate:focus{outline-width:0}.el-rate__item{font-size:0;vertical-align:middle}.el-rate__icon{font-size:18px;margin-right:6px;color:#C0C4CC;-webkit-transition:.3s;transition:.3s}.el-rate__decimal,.el-rate__icon .path2{position:absolute;top:0;left:0}.el-rate__icon.hover{-webkit-transform:scale(1.15);transform:scale(1.15)}.el-rate__decimal{display:inline-block;overflow:hidden}.el-step.is-vertical,.el-steps{display:-webkit-box;display:-ms-flexbox}.el-rate__text{font-size:14px;vertical-align:middle}.el-steps{display:flex}.el-steps--simple{padding:13px 8%;border-radius:4px;background:#F5F7FA}.el-steps--horizontal{white-space:nowrap}.el-steps--vertical{height:100%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column;flex-flow:column}.el-step{position:relative;-ms-flex-negative:1;flex-shrink:1}.el-step:last-of-type .el-step__line{display:none}.el-step:last-of-type.is-flex{-ms-flex-preferred-size:auto!important;flex-basis:auto!important;-ms-flex-negative:0;flex-shrink:0;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0}.el-step:last-of-type .el-step__description,.el-step:last-of-type .el-step__main{padding-right:0}.el-step__head{position:relative;width:100%}.el-step__head.is-process{color:#303133;border-color:#303133}.el-step__head.is-wait{color:#C0C4CC;border-color:#C0C4CC}.el-step__head.is-success{color:#67C23A;border-color:#67C23A}.el-step__head.is-error{color:#F56C6C;border-color:#F56C6C}.el-step__head.is-finish{color:#409EFF;border-color:#409EFF}.el-step__icon{position:relative;z-index:1;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:24px;height:24px;font-size:14px;box-sizing:border-box;background:#FFF;-webkit-transition:.15s ease-out;transition:.15s ease-out}.el-step.is-horizontal,.el-step__icon-inner{display:inline-block}.el-step__icon.is-text{border-radius:50%;border:2px solid;border-color:inherit}.el-step__icon.is-icon{width:40px}.el-step__icon-inner{-webkit-user-select:none;user-select:none;text-align:center;font-weight:700;line-height:1;color:inherit}.el-step__icon-inner[class*=el-icon]:not(.is-status){font-size:25px;font-weight:400}.el-step__icon-inner.is-status{-webkit-transform:translateY(1px);transform:translateY(1px)}.el-step__line{position:absolute;border-color:inherit;background-color:#C0C4CC}.el-step__line-inner{display:block;border-width:1px;border-style:solid;border-color:inherit;-webkit-transition:.15s ease-out;transition:.15s ease-out;-webkit-box-sizing:border-box;box-sizing:border-box;width:0;height:0}.el-step__main{white-space:normal;text-align:left}.el-step__title{font-size:16px;line-height:38px}.el-step__title.is-process{font-weight:700;color:#303133}.el-step__title.is-wait{color:#C0C4CC}.el-step__title.is-success{color:#67C23A}.el-step__title.is-error{color:#F56C6C}.el-step__title.is-finish{color:#409EFF}.el-step__description{padding-right:10%;margin-top:-5px;font-size:12px;line-height:20px;font-weight:400}.el-step__description.is-process{color:#303133}.el-step__description.is-wait{color:#C0C4CC}.el-step__description.is-success{color:#67C23A}.el-step__description.is-error{color:#F56C6C}.el-step__description.is-finish{color:#409EFF}.el-step.is-horizontal .el-step__line{height:2px;top:11px;left:0;right:0}.el-step.is-vertical{display:flex}.el-step.is-vertical .el-step__head{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;width:24px}.el-step.is-vertical .el-step__main{padding-left:10px;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.el-step.is-vertical .el-step__title{line-height:24px;padding-bottom:8px}.el-step.is-vertical .el-step__line{width:2px;top:0;bottom:0;left:11px}.el-step.is-vertical .el-step__icon.is-icon{width:24px}.el-step.is-center .el-step__head,.el-step.is-center .el-step__main{text-align:center}.el-step.is-center .el-step__description{padding-left:20%;padding-right:20%}.el-step.is-center .el-step__line{left:50%;right:-50%}.el-step.is-simple{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-step.is-simple .el-step__head{width:auto;font-size:0;padding-right:10px}.el-step.is-simple .el-step__icon{background:0 0;width:16px;height:16px;font-size:12px}.el-step.is-simple .el-step__icon-inner[class*=el-icon]:not(.is-status){font-size:18px}.el-step.is-simple .el-step__icon-inner.is-status{-webkit-transform:scale(.8) translateY(1px);transform:scale(.8) translateY(1px)}.el-step.is-simple .el-step__main{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.el-step.is-simple .el-step__title{font-size:16px;line-height:20px}.el-step.is-simple:not(:last-of-type) .el-step__title{max-width:50%;word-break:break-all}.el-step.is-simple .el-step__arrow{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-step.is-simple .el-step__arrow::after,.el-step.is-simple .el-step__arrow::before{content:'';display:inline-block;position:absolute;height:15px;width:1px;background:#C0C4CC}.el-step.is-simple .el-step__arrow::before{-webkit-transform:rotate(-45deg) translateY(-4px);transform:rotate(-45deg) translateY(-4px);-webkit-transform-origin:0 0;transform-origin:0 0}.el-step.is-simple .el-step__arrow::after{-webkit-transform:rotate(45deg) translateY(4px);transform:rotate(45deg) translateY(4px);-webkit-transform-origin:100% 100%;transform-origin:100% 100%}.el-step.is-simple:last-of-type .el-step__arrow{display:none}.el-carousel{position:relative}.el-carousel--horizontal{overflow-x:hidden}.el-carousel--vertical{overflow-y:hidden}.el-carousel__container{position:relative;height:300px}.el-carousel__arrow{border:none;outline:0;padding:0;margin:0;height:36px;width:36px;cursor:pointer;-webkit-transition:.3s;transition:.3s;border-radius:50%;background-color:rgba(31,45,61,.11);color:#FFF;position:absolute;top:50%;z-index:10;-webkit-transform:translateY(-50%);transform:translateY(-50%);text-align:center;font-size:12px}.el-carousel__arrow--left{left:16px}.el-carousel__arrow:hover{background-color:rgba(31,45,61,.23)}.el-carousel__arrow i{cursor:pointer}.el-carousel__indicators{position:absolute;list-style:none;margin:0;padding:0;z-index:2}.el-carousel__indicators--horizontal{bottom:0;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.el-carousel__indicators--vertical{right:0;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.el-carousel__indicators--outside{bottom:26px;text-align:center;position:static;-webkit-transform:none;transform:none}.el-carousel__indicators--outside .el-carousel__indicator:hover button{opacity:.64}.el-carousel__indicators--outside button{background-color:#C0C4CC;opacity:.24}.el-carousel__indicators--labels{left:0;right:0;-webkit-transform:none;transform:none;text-align:center}.el-carousel__indicators--labels .el-carousel__button{height:auto;width:auto;padding:2px 18px;font-size:12px}.el-carousel__indicators--labels .el-carousel__indicator{padding:6px 4px}.el-carousel__indicator{background-color:transparent;cursor:pointer}.el-carousel__indicator:hover button{opacity:.72}.el-carousel__indicator--horizontal{display:inline-block;padding:12px 4px}.el-carousel__indicator--vertical{padding:4px 12px}.el-carousel__indicator--vertical .el-carousel__button{width:2px;height:15px}.el-carousel__indicator.is-active button{opacity:1}.el-carousel__button{display:block;opacity:.48;width:30px;height:2px;background-color:#FFF;border:none;outline:0;padding:0;margin:0;cursor:pointer;-webkit-transition:.3s;transition:.3s}.el-carousel__item,.el-carousel__mask{height:100%;position:absolute;top:0;left:0}.carousel-arrow-left-enter,.carousel-arrow-left-leave-active{-webkit-transform:translateY(-50%) translateX(-10px);transform:translateY(-50%) translateX(-10px);opacity:0}.carousel-arrow-right-enter,.carousel-arrow-right-leave-active{-webkit-transform:translateY(-50%) translateX(10px);transform:translateY(-50%) translateX(10px);opacity:0}.el-carousel__item{width:100%;display:inline-block;overflow:hidden;z-index:0}.el-carousel__item.is-active{z-index:2}.el-carousel__item.is-animating{-webkit-transition:-webkit-transform .4s ease-in-out;transition:-webkit-transform .4s ease-in-out;transition:transform .4s ease-in-out;transition:transform .4s ease-in-out,-webkit-transform .4s ease-in-out}.el-carousel__item--card{width:50%;-webkit-transition:-webkit-transform .4s ease-in-out;transition:-webkit-transform .4s ease-in-out;transition:transform .4s ease-in-out;transition:transform .4s ease-in-out,-webkit-transform .4s ease-in-out}.el-carousel__item--card.is-in-stage{cursor:pointer;z-index:1}.el-carousel__item--card.is-in-stage.is-hover .el-carousel__mask,.el-carousel__item--card.is-in-stage:hover .el-carousel__mask{opacity:.12}.el-carousel__item--card.is-active{z-index:2}.el-carousel__mask{width:100%;background-color:#FFF;opacity:.24;-webkit-transition:.2s;transition:.2s}.fade-in-linear-enter-active,.fade-in-linear-leave-active{-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.fade-in-linear-enter,.fade-in-linear-leave,.fade-in-linear-leave-active{opacity:0}.el-fade-in-linear-enter-active,.el-fade-in-linear-leave-active{-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.el-fade-in-linear-enter,.el-fade-in-linear-leave,.el-fade-in-linear-leave-active{opacity:0}.el-fade-in-enter-active,.el-fade-in-leave-active{-webkit-transition:all .3s cubic-bezier(.55,0,.1,1);transition:all .3s cubic-bezier(.55,0,.1,1)}.el-fade-in-enter,.el-fade-in-leave-active{opacity:0}.el-zoom-in-center-enter-active,.el-zoom-in-center-leave-active{-webkit-transition:all .3s cubic-bezier(.55,0,.1,1);transition:all .3s cubic-bezier(.55,0,.1,1)}.el-zoom-in-center-enter,.el-zoom-in-center-leave-active{opacity:0;-webkit-transform:scaleX(0);transform:scaleX(0)}.el-zoom-in-top-enter-active,.el-zoom-in-top-leave-active{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);-webkit-transform-origin:center top;transform-origin:center top}.el-zoom-in-top-enter,.el-zoom-in-top-leave-active{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}.el-zoom-in-bottom-enter-active,.el-zoom-in-bottom-leave-active{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);-webkit-transform-origin:center bottom;transform-origin:center bottom}.el-zoom-in-bottom-enter,.el-zoom-in-bottom-leave-active{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}.el-zoom-in-left-enter-active,.el-zoom-in-left-leave-active{opacity:1;-webkit-transform:scale(1,1);transform:scale(1,1);-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);-webkit-transform-origin:top left;transform-origin:top left}.el-zoom-in-left-enter,.el-zoom-in-left-leave-active{opacity:0;-webkit-transform:scale(.45,.45);transform:scale(.45,.45)}.collapse-transition{-webkit-transition:.3s height ease-in-out,.3s padding-top ease-in-out,.3s padding-bottom ease-in-out;transition:.3s height ease-in-out,.3s padding-top ease-in-out,.3s padding-bottom ease-in-out}.horizontal-collapse-transition{-webkit-transition:.3s width ease-in-out,.3s padding-left ease-in-out,.3s padding-right ease-in-out;transition:.3s width ease-in-out,.3s padding-left ease-in-out,.3s padding-right ease-in-out}.el-list-enter-active,.el-list-leave-active{-webkit-transition:all 1s;transition:all 1s}.el-list-enter,.el-list-leave-active{opacity:0;-webkit-transform:translateY(-30px);transform:translateY(-30px)}.el-opacity-transition{-webkit-transition:opacity .3s cubic-bezier(.55,0,.1,1);transition:opacity .3s cubic-bezier(.55,0,.1,1)}.el-collapse{border-top:1px solid #EBEEF5;border-bottom:1px solid #EBEEF5}.el-collapse-item.is-disabled .el-collapse-item__header{color:#bbb;cursor:not-allowed}.el-collapse-item__header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:48px;line-height:48px;background-color:#FFF;color:#303133;cursor:pointer;border-bottom:1px solid #EBEEF5;font-size:13px;font-weight:500;-webkit-transition:border-bottom-color .3s;transition:border-bottom-color .3s;outline:0}.el-collapse-item__arrow{margin:0 8px 0 auto;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;font-weight:300}.el-collapse-item__arrow.is-active{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.el-collapse-item__header.focusing:focus:not(:hover){color:#409EFF}.el-collapse-item__header.is-active{border-bottom-color:transparent}.el-collapse-item__wrap{will-change:height;background-color:#FFF;overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;border-bottom:1px solid #EBEEF5}.el-cascader__search-input,.el-cascader__tags,.el-tag{-webkit-box-sizing:border-box}.el-collapse-item__content{padding-bottom:25px;font-size:13px;color:#303133;line-height:1.769230769230769}.el-collapse-item:last-child{margin-bottom:-1px}.el-popper .popper__arrow,.el-popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-cascader,.el-tag{display:inline-block}.el-popper .popper__arrow{border-width:6px;-webkit-filter:drop-shadow(0 2px 12px rgba(0, 0, 0, .03));filter:drop-shadow(0 2px 12px rgba(0, 0, 0, .03))}.el-popper .popper__arrow::after{content:\\\" \\\";border-width:6px}.el-popper[x-placement^=top]{margin-bottom:12px}.el-popper[x-placement^=top] .popper__arrow{bottom:-6px;left:50%;margin-right:3px;border-top-color:#EBEEF5;border-bottom-width:0}.el-popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-6px;border-top-color:#FFF;border-bottom-width:0}.el-popper[x-placement^=bottom]{margin-top:12px}.el-popper[x-placement^=bottom] .popper__arrow{top:-6px;left:50%;margin-right:3px;border-top-width:0;border-bottom-color:#EBEEF5}.el-popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-6px;border-top-width:0;border-bottom-color:#FFF}.el-popper[x-placement^=right]{margin-left:12px}.el-popper[x-placement^=right] .popper__arrow{top:50%;left:-6px;margin-bottom:3px;border-right-color:#EBEEF5;border-left-width:0}.el-popper[x-placement^=right] .popper__arrow::after{bottom:-6px;left:1px;border-right-color:#FFF;border-left-width:0}.el-popper[x-placement^=left]{margin-right:12px}.el-popper[x-placement^=left] .popper__arrow{top:50%;right:-6px;margin-bottom:3px;border-right-width:0;border-left-color:#EBEEF5}.el-popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-6px;margin-left:-6px;border-right-width:0;border-left-color:#FFF}.el-tag{background-color:#ecf5ff;border-color:#d9ecff;height:32px;padding:0 10px;line-height:30px;font-size:12px;color:#409EFF;border-width:1px;border-style:solid;border-radius:4px;box-sizing:border-box;white-space:nowrap}.el-tag.is-hit{border-color:#409EFF}.el-tag .el-tag__close{color:#409eff}.el-tag .el-tag__close:hover{color:#FFF;background-color:#409eff}.el-tag.el-tag--info{background-color:#f4f4f5;border-color:#e9e9eb;color:#909399}.el-tag.el-tag--info.is-hit{border-color:#909399}.el-tag.el-tag--info .el-tag__close{color:#909399}.el-tag.el-tag--info .el-tag__close:hover{color:#FFF;background-color:#909399}.el-tag.el-tag--success{background-color:#f0f9eb;border-color:#e1f3d8;color:#67c23a}.el-tag.el-tag--success.is-hit{border-color:#67C23A}.el-tag.el-tag--success .el-tag__close{color:#67c23a}.el-tag.el-tag--success .el-tag__close:hover{color:#FFF;background-color:#67c23a}.el-tag.el-tag--warning{background-color:#fdf6ec;border-color:#faecd8;color:#e6a23c}.el-tag.el-tag--warning.is-hit{border-color:#E6A23C}.el-tag.el-tag--warning .el-tag__close{color:#e6a23c}.el-tag.el-tag--warning .el-tag__close:hover{color:#FFF;background-color:#e6a23c}.el-tag.el-tag--danger{background-color:#fef0f0;border-color:#fde2e2;color:#f56c6c}.el-tag.el-tag--danger.is-hit{border-color:#F56C6C}.el-tag.el-tag--danger .el-tag__close{color:#f56c6c}.el-tag.el-tag--danger .el-tag__close:hover{color:#FFF;background-color:#f56c6c}.el-tag .el-icon-close{border-radius:50%;text-align:center;position:relative;cursor:pointer;font-size:12px;height:16px;width:16px;line-height:16px;vertical-align:middle;top:-1px;right:-5px}.el-tag .el-icon-close::before{display:block}.el-tag--dark{background-color:#409eff;border-color:#409eff;color:#fff}.el-tag--dark.is-hit{border-color:#409EFF}.el-tag--dark .el-tag__close{color:#fff}.el-tag--dark .el-tag__close:hover{color:#FFF;background-color:#66b1ff}.el-tag--dark.el-tag--info{background-color:#909399;border-color:#909399;color:#fff}.el-tag--dark.el-tag--info.is-hit{border-color:#909399}.el-tag--dark.el-tag--info .el-tag__close{color:#fff}.el-tag--dark.el-tag--info .el-tag__close:hover{color:#FFF;background-color:#a6a9ad}.el-tag--dark.el-tag--success{background-color:#67c23a;border-color:#67c23a;color:#fff}.el-tag--dark.el-tag--success.is-hit{border-color:#67C23A}.el-tag--dark.el-tag--success .el-tag__close{color:#fff}.el-tag--dark.el-tag--success .el-tag__close:hover{color:#FFF;background-color:#85ce61}.el-tag--dark.el-tag--warning{background-color:#e6a23c;border-color:#e6a23c;color:#fff}.el-tag--dark.el-tag--warning.is-hit{border-color:#E6A23C}.el-tag--dark.el-tag--warning .el-tag__close{color:#fff}.el-tag--dark.el-tag--warning .el-tag__close:hover{color:#FFF;background-color:#ebb563}.el-tag--dark.el-tag--danger{background-color:#f56c6c;border-color:#f56c6c;color:#fff}.el-tag--dark.el-tag--danger.is-hit{border-color:#F56C6C}.el-tag--dark.el-tag--danger .el-tag__close{color:#fff}.el-tag--dark.el-tag--danger .el-tag__close:hover{color:#FFF;background-color:#f78989}.el-tag--plain{background-color:#fff;border-color:#b3d8ff;color:#409eff}.el-tag--plain.is-hit{border-color:#409EFF}.el-tag--plain .el-tag__close{color:#409eff}.el-tag--plain .el-tag__close:hover{color:#FFF;background-color:#409eff}.el-tag--plain.el-tag--info{background-color:#fff;border-color:#d3d4d6;color:#909399}.el-tag--plain.el-tag--info.is-hit{border-color:#909399}.el-tag--plain.el-tag--info .el-tag__close{color:#909399}.el-tag--plain.el-tag--info .el-tag__close:hover{color:#FFF;background-color:#909399}.el-tag--plain.el-tag--success{background-color:#fff;border-color:#c2e7b0;color:#67c23a}.el-tag--plain.el-tag--success.is-hit{border-color:#67C23A}.el-tag--plain.el-tag--success .el-tag__close{color:#67c23a}.el-tag--plain.el-tag--success .el-tag__close:hover{color:#FFF;background-color:#67c23a}.el-tag--plain.el-tag--warning{background-color:#fff;border-color:#f5dab1;color:#e6a23c}.el-tag--plain.el-tag--warning.is-hit{border-color:#E6A23C}.el-tag--plain.el-tag--warning .el-tag__close{color:#e6a23c}.el-tag--plain.el-tag--warning .el-tag__close:hover{color:#FFF;background-color:#e6a23c}.el-tag--plain.el-tag--danger{background-color:#fff;border-color:#fbc4c4;color:#f56c6c}.el-tag--plain.el-tag--danger.is-hit{border-color:#F56C6C}.el-tag--plain.el-tag--danger .el-tag__close{color:#f56c6c}.el-tag--plain.el-tag--danger .el-tag__close:hover{color:#FFF;background-color:#f56c6c}.el-tag--medium{height:28px;line-height:26px}.el-tag--medium .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.el-tag--small{height:24px;padding:0 8px;line-height:22px}.el-tag--small .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.el-tag--mini{height:20px;padding:0 5px;line-height:19px}.el-tag--mini .el-icon-close{margin-left:-3px;-webkit-transform:scale(.7);transform:scale(.7)}.el-cascader{position:relative;font-size:14px;line-height:40px}.el-cascader:not(.is-disabled):hover .el-input__inner{cursor:pointer;border-color:#C0C4CC}.el-cascader .el-input .el-input__inner:focus,.el-cascader .el-input.is-focus .el-input__inner{border-color:#409EFF}.el-cascader .el-input{cursor:pointer}.el-cascader .el-input .el-input__inner{text-overflow:ellipsis}.el-cascader .el-input .el-icon-arrow-down{-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;font-size:14px}.el-cascader .el-input .el-icon-arrow-down.is-reverse{-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg)}.el-cascader .el-input .el-icon-circle-close:hover{color:#909399}.el-cascader--medium{font-size:14px;line-height:36px}.el-cascader--small{font-size:13px;line-height:32px}.el-cascader--mini{font-size:12px;line-height:28px}.el-cascader.is-disabled .el-cascader__label{z-index:2;color:#C0C4CC}.el-cascader__dropdown{margin:5px 0;font-size:14px;background:#FFF;border:1px solid #E4E7ED;border-radius:4px;box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-cascader__tags{position:absolute;left:0;right:30px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;line-height:normal;text-align:left;box-sizing:border-box}.el-cascader__tags .el-tag{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;max-width:100%;margin:2px 0 2px 6px;text-overflow:ellipsis;background:#f0f2f5}.el-cascader__tags .el-tag:not(.is-hit){border-color:transparent}.el-cascader__tags .el-tag>span{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow:hidden;text-overflow:ellipsis}.el-cascader__tags .el-tag .el-icon-close{-webkit-box-flex:0;-ms-flex:none;flex:none;background-color:#C0C4CC;color:#FFF}.el-cascader__tags .el-tag .el-icon-close:hover{background-color:#909399}.el-cascader__suggestion-panel{border-radius:4px}.el-cascader__suggestion-list{max-height:204px;margin:0;padding:6px 0;font-size:14px;color:#606266;text-align:center}.el-cascader__suggestion-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:34px;padding:0 15px;text-align:left;outline:0;cursor:pointer}.el-cascader__suggestion-item:focus,.el-cascader__suggestion-item:hover{background:#F5F7FA}.el-cascader__suggestion-item.is-checked{color:#409EFF;font-weight:700}.el-cascader__suggestion-item>span{margin-right:10px}.el-cascader__empty-text{margin:10px 0;color:#C0C4CC}.el-cascader__search-input{-webkit-box-flex:1;-ms-flex:1;flex:1;height:24px;min-width:60px;margin:2px 0 2px 15px;padding:0;color:#606266;border:none;outline:0;box-sizing:border-box}.el-cascader__search-input::-webkit-input-placeholder{color:#C0C4CC}.el-cascader__search-input:-ms-input-placeholder{color:#C0C4CC}.el-cascader__search-input::-ms-input-placeholder{color:#C0C4CC}.el-cascader__search-input::placeholder{color:#C0C4CC}.el-color-predefine{display:-webkit-box;display:-ms-flexbox;display:flex;font-size:12px;margin-top:8px;width:280px}.el-color-predefine__colors{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-wrap:wrap;flex-wrap:wrap}.el-color-predefine__color-selector{margin:0 0 8px 8px;width:20px;height:20px;border-radius:4px;cursor:pointer}.el-color-predefine__color-selector:nth-child(10n+1){margin-left:0}.el-color-predefine__color-selector.selected{-webkit-box-shadow:0 0 3px 2px #409EFF;box-shadow:0 0 3px 2px #409EFF}.el-color-predefine__color-selector>div{display:-webkit-box;display:-ms-flexbox;display:flex;height:100%;border-radius:3px}.el-color-predefine__color-selector.is-alpha{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.el-color-hue-slider{position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;width:280px;height:12px;background-color:red;padding:0 2px}.el-color-hue-slider__bar{position:relative;background:-webkit-gradient(linear,left top,right top,from(red),color-stop(17%,#ff0),color-stop(33%,#0f0),color-stop(50%,#0ff),color-stop(67%,#00f),color-stop(83%,#f0f),to(red));background:linear-gradient(to right,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%);height:100%}.el-color-hue-slider__thumb{position:absolute;cursor:pointer;-webkit-box-sizing:border-box;box-sizing:border-box;left:0;top:0;width:4px;height:100%;border-radius:1px;background:#fff;border:1px solid #f0f0f0;-webkit-box-shadow:0 0 2px rgba(0,0,0,.6);box-shadow:0 0 2px rgba(0,0,0,.6);z-index:1}.el-color-hue-slider.is-vertical{width:12px;height:180px;padding:2px 0}.el-color-hue-slider.is-vertical .el-color-hue-slider__bar{background:-webkit-gradient(linear,left top,left bottom,from(red),color-stop(17%,#ff0),color-stop(33%,#0f0),color-stop(50%,#0ff),color-stop(67%,#00f),color-stop(83%,#f0f),to(red));background:linear-gradient(to bottom,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%)}.el-color-hue-slider.is-vertical .el-color-hue-slider__thumb{left:0;top:0;width:100%;height:4px}.el-color-svpanel{position:relative;width:280px;height:180px}.el-color-svpanel__black,.el-color-svpanel__white{position:absolute;top:0;left:0;right:0;bottom:0}.el-color-svpanel__white{background:-webkit-gradient(linear,left top,right top,from(#fff),to(rgba(255,255,255,0)));background:linear-gradient(to right,#fff,rgba(255,255,255,0))}.el-color-svpanel__black{background:-webkit-gradient(linear,left bottom,left top,from(#000),to(rgba(0,0,0,0)));background:linear-gradient(to top,#000,rgba(0,0,0,0))}.el-color-svpanel__cursor{position:absolute}.el-color-svpanel__cursor>div{cursor:head;width:4px;height:4px;-webkit-box-shadow:0 0 0 1.5px #fff,inset 0 0 1px 1px rgba(0,0,0,.3),0 0 1px 2px rgba(0,0,0,.4);box-shadow:0 0 0 1.5px #fff,inset 0 0 1px 1px rgba(0,0,0,.3),0 0 1px 2px rgba(0,0,0,.4);border-radius:50%;-webkit-transform:translate(-2px,-2px);transform:translate(-2px,-2px)}.el-color-alpha-slider{position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;width:280px;height:12px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.el-color-alpha-slider__bar{position:relative;background:-webkit-gradient(linear,left top,right top,from(rgba(255,255,255,0)),to(white));background:linear-gradient(to right,rgba(255,255,255,0) 0,#fff 100%);height:100%}.el-color-alpha-slider__thumb{position:absolute;cursor:pointer;-webkit-box-sizing:border-box;box-sizing:border-box;left:0;top:0;width:4px;height:100%;border-radius:1px;background:#fff;border:1px solid #f0f0f0;-webkit-box-shadow:0 0 2px rgba(0,0,0,.6);box-shadow:0 0 2px rgba(0,0,0,.6);z-index:1}.el-color-alpha-slider.is-vertical{width:20px;height:180px}.el-color-alpha-slider.is-vertical .el-color-alpha-slider__bar{background:-webkit-gradient(linear,left top,left bottom,from(rgba(255,255,255,0)),to(white));background:linear-gradient(to bottom,rgba(255,255,255,0) 0,#fff 100%)}.el-color-alpha-slider.is-vertical .el-color-alpha-slider__thumb{left:0;top:0;width:100%;height:4px}.el-color-dropdown{width:300px}.el-color-dropdown__main-wrapper{margin-bottom:6px}.el-color-dropdown__main-wrapper::after{display:table;clear:both}.el-color-dropdown__btns{margin-top:6px;text-align:right}.el-color-dropdown__value{float:left;line-height:26px;font-size:12px;color:#000;width:160px}.el-color-dropdown__btn{border:1px solid #dcdcdc;color:#333;line-height:24px;border-radius:2px;padding:0 20px;cursor:pointer;background-color:transparent;outline:0;font-size:12px}.el-color-dropdown__btn[disabled]{color:#ccc;cursor:not-allowed}.el-color-dropdown__btn:hover{color:#409EFF;border-color:#409EFF}.el-color-dropdown__link-btn{cursor:pointer;color:#409EFF;text-decoration:none;padding:15px;font-size:12px}.el-color-dropdown__link-btn:hover{color:tint(#409EFF,20%)}.el-color-picker{display:inline-block;position:relative;line-height:normal;height:40px}.el-color-picker.is-disabled .el-color-picker__trigger{cursor:not-allowed}.el-color-picker--medium{height:36px}.el-color-picker--medium .el-color-picker__trigger{height:36px;width:36px}.el-color-picker--medium .el-color-picker__mask{height:34px;width:34px}.el-color-picker--small{height:32px}.el-color-picker--small .el-color-picker__trigger{height:32px;width:32px}.el-color-picker--small .el-color-picker__mask{height:30px;width:30px}.el-color-picker--small .el-color-picker__empty,.el-color-picker--small .el-color-picker__icon{-webkit-transform:translate3d(-50%,-50%,0) scale(.8);transform:translate3d(-50%,-50%,0) scale(.8)}.el-color-picker--mini{height:28px}.el-color-picker--mini .el-color-picker__trigger{height:28px;width:28px}.el-color-picker--mini .el-color-picker__mask{height:26px;width:26px}.el-color-picker--mini .el-color-picker__empty,.el-color-picker--mini .el-color-picker__icon{-webkit-transform:translate3d(-50%,-50%,0) scale(.8);transform:translate3d(-50%,-50%,0) scale(.8)}.el-color-picker__mask{height:38px;width:38px;border-radius:4px;position:absolute;top:1px;left:1px;z-index:1;cursor:not-allowed;background-color:rgba(255,255,255,.7)}.el-color-picker__trigger{display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;height:40px;width:40px;padding:4px;border:1px solid #e6e6e6;border-radius:4px;font-size:0;position:relative;cursor:pointer}.el-color-picker__color{position:relative;display:block;-webkit-box-sizing:border-box;box-sizing:border-box;border:1px solid #999;border-radius:2px;width:100%;height:100%;text-align:center}.el-color-picker__icon,.el-input,.el-textarea{display:inline-block;width:100%}.el-color-picker__color.is-alpha{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.el-color-picker__color-inner{position:absolute;left:0;top:0;right:0;bottom:0}.el-color-picker__empty{font-size:12px;color:#999;position:absolute;top:50%;left:50%;-webkit-transform:translate3d(-50%,-50%,0);transform:translate3d(-50%,-50%,0)}.el-color-picker__icon{position:absolute;top:50%;left:50%;-webkit-transform:translate3d(-50%,-50%,0);transform:translate3d(-50%,-50%,0);color:#FFF;text-align:center;font-size:12px}.el-input__prefix,.el-input__suffix{position:absolute;top:0;text-align:center}.el-color-picker__panel{position:absolute;z-index:10;padding:6px;-webkit-box-sizing:content-box;box-sizing:content-box;background-color:#FFF;border:1px solid #EBEEF5;border-radius:4px;box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-input__inner,.el-textarea__inner,.el-transfer-panel{-webkit-box-sizing:border-box}.el-textarea{position:relative;vertical-align:bottom;font-size:14px}.el-textarea__inner{display:block;resize:vertical;padding:5px 15px;line-height:1.5;box-sizing:border-box;width:100%;font-size:inherit;color:#606266;background-color:#FFF;background-image:none;border:1px solid #DCDFE6;border-radius:4px;-webkit-transition:border-color .2s cubic-bezier(.645,.045,.355,1);transition:border-color .2s cubic-bezier(.645,.045,.355,1)}.el-textarea__inner::-webkit-input-placeholder{color:#C0C4CC}.el-textarea__inner:-ms-input-placeholder{color:#C0C4CC}.el-textarea__inner::-ms-input-placeholder{color:#C0C4CC}.el-textarea__inner::placeholder{color:#C0C4CC}.el-textarea__inner:hover{border-color:#C0C4CC}.el-textarea__inner:focus{outline:0;border-color:#409EFF}.el-textarea .el-input__count{color:#909399;background:#FFF;position:absolute;font-size:12px;bottom:5px;right:10px}.el-textarea.is-disabled .el-textarea__inner{background-color:#F5F7FA;border-color:#E4E7ED;color:#C0C4CC;cursor:not-allowed}.el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder{color:#C0C4CC}.el-textarea.is-disabled .el-textarea__inner:-ms-input-placeholder{color:#C0C4CC}.el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder{color:#C0C4CC}.el-textarea.is-disabled .el-textarea__inner::placeholder{color:#C0C4CC}.el-textarea.is-exceed .el-textarea__inner{border-color:#F56C6C}.el-textarea.is-exceed .el-input__count{color:#F56C6C}.el-input{position:relative;font-size:14px}.el-input::-webkit-scrollbar{z-index:11;width:6px}.el-input::-webkit-scrollbar:horizontal{height:6px}.el-input::-webkit-scrollbar-thumb{border-radius:5px;width:6px;background:#b4bccc}.el-input::-webkit-scrollbar-corner{background:#fff}.el-input::-webkit-scrollbar-track{background:#fff}.el-input::-webkit-scrollbar-track-piece{background:#fff;width:6px}.el-input .el-input__clear{color:#C0C4CC;font-size:14px;cursor:pointer;-webkit-transition:color .2s cubic-bezier(.645,.045,.355,1);transition:color .2s cubic-bezier(.645,.045,.355,1)}.el-input .el-input__clear:hover{color:#909399}.el-input .el-input__count{height:100%;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#909399;font-size:12px}.el-input-group__append .el-button,.el-input-group__append .el-input,.el-input-group__prepend .el-button,.el-input-group__prepend .el-input,.el-input__inner{font-size:inherit}.el-input .el-input__count .el-input__count-inner{background:#FFF;line-height:initial;display:inline-block;padding:0 5px}.el-input__inner{-webkit-appearance:none;background-color:#FFF;background-image:none;border-radius:4px;border:1px solid #DCDFE6;box-sizing:border-box;color:#606266;display:inline-block;height:40px;line-height:40px;outline:0;padding:0 15px;-webkit-transition:border-color .2s cubic-bezier(.645,.045,.355,1);transition:border-color .2s cubic-bezier(.645,.045,.355,1);width:100%}.el-input__inner::-ms-reveal{display:none}.el-input__inner::-webkit-input-placeholder{color:#C0C4CC}.el-input__inner:-ms-input-placeholder{color:#C0C4CC}.el-input__inner::-ms-input-placeholder{color:#C0C4CC}.el-input__inner::placeholder{color:#C0C4CC}.el-input__inner:hover{border-color:#C0C4CC}.el-input.is-active .el-input__inner,.el-input__inner:focus{border-color:#409EFF;outline:0}.el-input__suffix{height:100%;right:5px;transition:all .3s;pointer-events:none}.el-input__suffix-inner{pointer-events:all}.el-input__prefix{height:100%;left:5px;transition:all .3s}.el-input__icon{height:100%;width:25px;text-align:center;-webkit-transition:all .3s;transition:all .3s;line-height:40px}.el-input__icon:after{content:'';height:100%;width:0;display:inline-block;vertical-align:middle}.el-input__validateIcon{pointer-events:none}.el-input.is-disabled .el-input__inner{background-color:#F5F7FA;border-color:#E4E7ED;color:#C0C4CC;cursor:not-allowed}.el-input.is-disabled .el-input__inner::-webkit-input-placeholder{color:#C0C4CC}.el-input.is-disabled .el-input__inner:-ms-input-placeholder{color:#C0C4CC}.el-input.is-disabled .el-input__inner::-ms-input-placeholder{color:#C0C4CC}.el-input.is-disabled .el-input__inner::placeholder{color:#C0C4CC}.el-input.is-disabled .el-input__icon{cursor:not-allowed}.el-image-viewer__btn,.el-image__preview,.el-link,.el-transfer-panel__filter .el-icon-circle-close{cursor:pointer}.el-input.is-exceed .el-input__inner{border-color:#F56C6C}.el-input.is-exceed .el-input__suffix .el-input__count{color:#F56C6C}.el-input--suffix .el-input__inner{padding-right:30px}.el-input--prefix .el-input__inner{padding-left:30px}.el-input--medium{font-size:14px}.el-input--medium .el-input__inner{height:36px;line-height:36px}.el-input--medium .el-input__icon{line-height:36px}.el-input--small{font-size:13px}.el-input--small .el-input__inner{height:32px;line-height:32px}.el-input--small .el-input__icon{line-height:32px}.el-input--mini{font-size:12px}.el-input--mini .el-input__inner{height:28px;line-height:28px}.el-input--mini .el-input__icon{line-height:28px}.el-input-group{line-height:normal;display:inline-table;width:100%;border-collapse:separate;border-spacing:0}.el-input-group>.el-input__inner{vertical-align:middle;display:table-cell}.el-input-group__append,.el-input-group__prepend{background-color:#F5F7FA;color:#909399;vertical-align:middle;display:table-cell;position:relative;border:1px solid #DCDFE6;border-radius:4px;padding:0 20px;width:1px;white-space:nowrap}.el-input-group--append .el-input__inner,.el-input-group__prepend{border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group__append:focus,.el-input-group__prepend:focus{outline:0}.el-input-group__append .el-button,.el-input-group__append .el-select,.el-input-group__prepend .el-button,.el-input-group__prepend .el-select{display:inline-block;margin:-10px -20px}.el-input-group__append button.el-button,.el-input-group__append div.el-select .el-input__inner,.el-input-group__append div.el-select:hover .el-input__inner,.el-input-group__prepend button.el-button,.el-input-group__prepend div.el-select .el-input__inner,.el-input-group__prepend div.el-select:hover .el-input__inner{border-color:transparent;background-color:transparent;color:inherit;border-top:0;border-bottom:0}.el-input-group__prepend{border-right:0}.el-input-group__append{border-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--append .el-select .el-input.is-focus .el-input__inner,.el-input-group--prepend .el-select .el-input.is-focus .el-input__inner{border-color:transparent}.el-input-group--prepend .el-input__inner{border-top-left-radius:0;border-bottom-left-radius:0}.el-input__inner::-ms-clear{display:none;width:0;height:0}.el-transfer{font-size:14px}.el-transfer__buttons{display:inline-block;vertical-align:middle;padding:0 30px}.el-transfer__button{display:block;margin:0 auto;padding:10px;border-radius:50%;color:#FFF;background-color:#409EFF;font-size:0}.el-button-group>.el-button+.el-button,.el-transfer-panel__item+.el-transfer-panel__item,.el-transfer__button [class*=el-icon-]+span{margin-left:0}.el-divider__text,.el-image__error,.el-link,.el-timeline,.el-transfer__button i,.el-transfer__button span{font-size:14px}.el-transfer__button.is-with-texts{border-radius:4px}.el-transfer__button.is-disabled,.el-transfer__button.is-disabled:hover{border:1px solid #DCDFE6;background-color:#F5F7FA;color:#C0C4CC}.el-transfer__button:first-child{margin-bottom:10px}.el-transfer__button:nth-child(2){margin:0}.el-transfer-panel{border:1px solid #EBEEF5;border-radius:4px;overflow:hidden;background:#FFF;display:inline-block;vertical-align:middle;width:200px;max-height:100%;box-sizing:border-box;position:relative}.el-transfer-panel__body{height:246px}.el-transfer-panel__body.is-with-footer{padding-bottom:40px}.el-transfer-panel__list{margin:0;padding:6px 0;list-style:none;height:246px;overflow:auto;-webkit-box-sizing:border-box;box-sizing:border-box}.el-transfer-panel__list.is-filterable{height:194px;padding-top:0}.el-transfer-panel__item{height:30px;line-height:30px;padding-left:15px;display:block!important}.el-transfer-panel__item.el-checkbox{color:#606266}.el-transfer-panel__item:hover{color:#409EFF}.el-transfer-panel__item.el-checkbox .el-checkbox__label{width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:24px;line-height:30px}.el-transfer-panel__item .el-checkbox__input{position:absolute;top:8px}.el-transfer-panel__filter{text-align:center;margin:15px;-webkit-box-sizing:border-box;box-sizing:border-box;display:block;width:auto}.el-transfer-panel__filter .el-input__inner{height:32px;width:100%;font-size:12px;display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:16px;padding-right:10px;padding-left:30px}.el-transfer-panel__filter .el-input__icon{margin-left:5px}.el-transfer-panel .el-transfer-panel__header{height:40px;line-height:40px;background:#F5F7FA;margin:0;padding-left:15px;border-bottom:1px solid #EBEEF5;-webkit-box-sizing:border-box;box-sizing:border-box;color:#000}.el-container,.el-header{-webkit-box-sizing:border-box}.el-transfer-panel .el-transfer-panel__header .el-checkbox{display:block;line-height:40px}.el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label{font-size:16px;color:#303133;font-weight:400}.el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label span{position:absolute;right:15px;color:#909399;font-size:12px;font-weight:400}.el-transfer-panel .el-transfer-panel__footer{height:40px;background:#FFF;margin:0;padding:0;border-top:1px solid #EBEEF5;position:absolute;bottom:0;left:0;width:100%;z-index:1}.el-transfer-panel .el-transfer-panel__footer::after{display:inline-block;height:100%;vertical-align:middle}.el-container,.el-timeline-item__node{display:-webkit-box;display:-ms-flexbox}.el-transfer-panel .el-transfer-panel__footer .el-checkbox{padding-left:20px;color:#606266}.el-transfer-panel .el-transfer-panel__empty{margin:0;height:30px;line-height:30px;padding:6px 15px 0;color:#909399;text-align:center}.el-transfer-panel .el-checkbox__label{padding-left:8px}.el-transfer-panel .el-checkbox__inner{height:14px;width:14px;border-radius:3px}.el-transfer-panel .el-checkbox__inner::after{height:6px;width:3px;left:4px}.el-container{display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-preferred-size:auto;flex-basis:auto;box-sizing:border-box;min-width:0}.el-container.is-vertical,.el-drawer,.el-empty,.el-result{-webkit-box-orient:vertical;-webkit-box-direction:normal}.el-container.is-vertical{-ms-flex-direction:column;flex-direction:column}.el-header{padding:0 20px;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0}.el-aside{overflow:auto;-webkit-box-sizing:border-box;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0}.el-main{display:block;-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-preferred-size:auto;flex-basis:auto;overflow:auto;-webkit-box-sizing:border-box;box-sizing:border-box}.el-footer{padding:0 20px;-webkit-box-sizing:border-box;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0}.el-timeline{margin:0;list-style:none}.el-timeline .el-timeline-item:last-child .el-timeline-item__tail{display:none}.el-timeline-item{position:relative;padding-bottom:20px}.el-timeline-item__wrapper{position:relative;padding-left:28px;top:-3px}.el-timeline-item__tail{position:absolute;left:4px;height:100%;border-left:2px solid #E4E7ED}.el-timeline-item__icon{color:#FFF;font-size:13px}.el-timeline-item__node{position:absolute;background-color:#E4E7ED;border-radius:50%;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-image__error,.el-timeline-item__dot{display:-webkit-box;display:-ms-flexbox}.el-timeline-item__node--normal{left:-1px;width:12px;height:12px}.el-timeline-item__node--large{left:-2px;width:14px;height:14px}.el-timeline-item__node--primary{background-color:#409EFF}.el-timeline-item__node--success{background-color:#67C23A}.el-timeline-item__node--warning{background-color:#E6A23C}.el-timeline-item__node--danger{background-color:#F56C6C}.el-timeline-item__node--info{background-color:#909399}.el-timeline-item__dot{position:absolute;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-timeline-item__content{color:#303133}.el-timeline-item__timestamp{color:#909399;line-height:1;font-size:13px}.el-timeline-item__timestamp.is-top{margin-bottom:8px;padding-top:4px}.el-timeline-item__timestamp.is-bottom{margin-top:8px}.el-link{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;vertical-align:middle;position:relative;text-decoration:none;outline:0;padding:0;font-weight:500}.el-link.is-underline:hover:after{position:absolute;left:0;right:0;height:0;bottom:0;border-bottom:1px solid #409EFF}.el-link.el-link--default:after,.el-link.el-link--primary.is-underline:hover:after,.el-link.el-link--primary:after{border-color:#409EFF}.el-link.is-disabled{cursor:not-allowed}.el-link [class*=el-icon-]+span{margin-left:5px}.el-link.el-link--default{color:#606266}.el-link.el-link--default:hover{color:#409EFF}.el-link.el-link--default.is-disabled{color:#C0C4CC}.el-link.el-link--primary{color:#409EFF}.el-link.el-link--primary:hover{color:#66b1ff}.el-link.el-link--primary.is-disabled{color:#a0cfff}.el-link.el-link--danger.is-underline:hover:after,.el-link.el-link--danger:after{border-color:#F56C6C}.el-link.el-link--danger{color:#F56C6C}.el-link.el-link--danger:hover{color:#f78989}.el-link.el-link--danger.is-disabled{color:#fab6b6}.el-link.el-link--success.is-underline:hover:after,.el-link.el-link--success:after{border-color:#67C23A}.el-link.el-link--success{color:#67C23A}.el-link.el-link--success:hover{color:#85ce61}.el-link.el-link--success.is-disabled{color:#b3e19d}.el-link.el-link--warning.is-underline:hover:after,.el-link.el-link--warning:after{border-color:#E6A23C}.el-link.el-link--warning{color:#E6A23C}.el-link.el-link--warning:hover{color:#ebb563}.el-link.el-link--warning.is-disabled{color:#f3d19e}.el-link.el-link--info.is-underline:hover:after,.el-link.el-link--info:after{border-color:#909399}.el-link.el-link--info{color:#909399}.el-link.el-link--info:hover{color:#a6a9ad}.el-link.el-link--info.is-disabled{color:#c8c9cc}.el-divider{background-color:#DCDFE6;position:relative}.el-divider--horizontal{display:block;height:1px;width:100%;margin:24px 0}.el-divider--vertical{display:inline-block;width:1px;height:1em;margin:0 8px;vertical-align:middle;position:relative}.el-divider__text{position:absolute;background-color:#FFF;padding:0 20px;font-weight:500;color:#303133}.el-image__error,.el-image__placeholder{background:#F5F7FA}.el-divider__text.is-left{left:20px;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.el-divider__text.is-center{left:50%;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}.el-divider__text.is-right{right:20px;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.el-image__error,.el-image__inner,.el-image__placeholder{width:100%;height:100%}.el-image{position:relative;display:inline-block;overflow:hidden}.el-image__inner{vertical-align:top}.el-image__inner--center{position:relative;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);display:block}.el-image__error{display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#C0C4CC;vertical-align:middle}.el-image-viewer__wrapper{position:fixed;top:0;right:0;bottom:0;left:0}.el-image-viewer__btn{position:absolute;z-index:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:50%;opacity:.8;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-user-select:none;user-select:none}.el-button,.el-checkbox,.el-checkbox-button__inner,.el-empty__image img,.el-radio{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.el-image-viewer__close{top:40px;right:40px;width:40px;height:40px;font-size:24px;color:#fff;background-color:#606266}.el-image-viewer__canvas{width:100%;height:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-image-viewer__actions{left:50%;bottom:30px;-webkit-transform:translateX(-50%);transform:translateX(-50%);width:282px;height:44px;padding:0 23px;background-color:#606266;border-color:#fff;border-radius:22px}.el-image-viewer__actions__inner{width:100%;height:100%;text-align:justify;cursor:default;font-size:23px;color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-pack:distribute;justify-content:space-around}.el-image-viewer__next,.el-image-viewer__prev{width:44px;height:44px;font-size:24px;color:#fff;background-color:#606266;border-color:#fff;top:50%}.el-image-viewer__prev{-webkit-transform:translateY(-50%);transform:translateY(-50%);left:40px}.el-image-viewer__next{-webkit-transform:translateY(-50%);transform:translateY(-50%);right:40px;text-indent:2px}.el-image-viewer__mask{position:absolute;width:100%;height:100%;top:0;left:0;opacity:.5;background:#000}.viewer-fade-enter-active{-webkit-animation:viewer-fade-in .3s;animation:viewer-fade-in .3s}.viewer-fade-leave-active{-webkit-animation:viewer-fade-out .3s;animation:viewer-fade-out .3s}@-webkit-keyframes viewer-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@keyframes viewer-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@-webkit-keyframes viewer-fade-out{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}100%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}@keyframes viewer-fade-out{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}100%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}.el-button{display:inline-block;line-height:1;white-space:nowrap;cursor:pointer;background:#FFF;border:1px solid #DCDFE6;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;margin:0;-webkit-transition:.1s;transition:.1s;font-weight:500;padding:12px 20px;font-size:14px;border-radius:4px}.el-button+.el-button,.el-checkbox.is-bordered+.el-checkbox.is-bordered{margin-left:10px}.el-button:focus,.el-button:hover{color:#409EFF;border-color:#c6e2ff;background-color:#ecf5ff}.el-button:active{color:#3a8ee6;border-color:#3a8ee6;outline:0}.el-button::-moz-focus-inner{border:0}.el-button [class*=el-icon-]+span{margin-left:5px}.el-button.is-plain:focus,.el-button.is-plain:hover{background:#FFF;border-color:#409EFF;color:#409EFF}.el-button.is-active,.el-button.is-plain:active{color:#3a8ee6;border-color:#3a8ee6}.el-button.is-plain:active{background:#FFF;outline:0}.el-button.is-disabled,.el-button.is-disabled:focus,.el-button.is-disabled:hover{color:#C0C4CC;cursor:not-allowed;background-image:none;background-color:#FFF;border-color:#EBEEF5}.el-button.is-disabled.el-button--text{background-color:transparent}.el-button.is-disabled.is-plain,.el-button.is-disabled.is-plain:focus,.el-button.is-disabled.is-plain:hover{background-color:#FFF;border-color:#EBEEF5;color:#C0C4CC}.el-button.is-loading{position:relative;pointer-events:none}.el-button.is-loading:before{pointer-events:none;content:'';position:absolute;left:-1px;top:-1px;right:-1px;bottom:-1px;border-radius:inherit;background-color:rgba(255,255,255,.35)}.el-button.is-round{border-radius:20px;padding:12px 23px}.el-button.is-circle{border-radius:50%;padding:12px}.el-button--primary{color:#FFF;background-color:#409EFF;border-color:#409EFF}.el-button--primary:focus,.el-button--primary:hover{background:#66b1ff;border-color:#66b1ff;color:#FFF}.el-button--primary.is-active,.el-button--primary:active{background:#3a8ee6;border-color:#3a8ee6;color:#FFF}.el-button--primary:active{outline:0}.el-button--primary.is-disabled,.el-button--primary.is-disabled:active,.el-button--primary.is-disabled:focus,.el-button--primary.is-disabled:hover{color:#FFF;background-color:#a0cfff;border-color:#a0cfff}.el-button--primary.is-plain{color:#409EFF;background:#ecf5ff;border-color:#b3d8ff}.el-button--primary.is-plain:focus,.el-button--primary.is-plain:hover{background:#409EFF;border-color:#409EFF;color:#FFF}.el-button--primary.is-plain:active{background:#3a8ee6;border-color:#3a8ee6;color:#FFF;outline:0}.el-button--primary.is-plain.is-disabled,.el-button--primary.is-plain.is-disabled:active,.el-button--primary.is-plain.is-disabled:focus,.el-button--primary.is-plain.is-disabled:hover{color:#8cc5ff;background-color:#ecf5ff;border-color:#d9ecff}.el-button--success{color:#FFF;background-color:#67C23A;border-color:#67C23A}.el-button--success:focus,.el-button--success:hover{background:#85ce61;border-color:#85ce61;color:#FFF}.el-button--success.is-active,.el-button--success:active{background:#5daf34;border-color:#5daf34;color:#FFF}.el-button--success:active{outline:0}.el-button--success.is-disabled,.el-button--success.is-disabled:active,.el-button--success.is-disabled:focus,.el-button--success.is-disabled:hover{color:#FFF;background-color:#b3e19d;border-color:#b3e19d}.el-button--success.is-plain{color:#67C23A;background:#f0f9eb;border-color:#c2e7b0}.el-button--success.is-plain:focus,.el-button--success.is-plain:hover{background:#67C23A;border-color:#67C23A;color:#FFF}.el-button--success.is-plain:active{background:#5daf34;border-color:#5daf34;color:#FFF;outline:0}.el-button--success.is-plain.is-disabled,.el-button--success.is-plain.is-disabled:active,.el-button--success.is-plain.is-disabled:focus,.el-button--success.is-plain.is-disabled:hover{color:#a4da89;background-color:#f0f9eb;border-color:#e1f3d8}.el-button--warning{color:#FFF;background-color:#E6A23C;border-color:#E6A23C}.el-button--warning:focus,.el-button--warning:hover{background:#ebb563;border-color:#ebb563;color:#FFF}.el-button--warning.is-active,.el-button--warning:active{background:#cf9236;border-color:#cf9236;color:#FFF}.el-button--warning:active{outline:0}.el-button--warning.is-disabled,.el-button--warning.is-disabled:active,.el-button--warning.is-disabled:focus,.el-button--warning.is-disabled:hover{color:#FFF;background-color:#f3d19e;border-color:#f3d19e}.el-button--warning.is-plain{color:#E6A23C;background:#fdf6ec;border-color:#f5dab1}.el-button--warning.is-plain:focus,.el-button--warning.is-plain:hover{background:#E6A23C;border-color:#E6A23C;color:#FFF}.el-button--warning.is-plain:active{background:#cf9236;border-color:#cf9236;color:#FFF;outline:0}.el-button--warning.is-plain.is-disabled,.el-button--warning.is-plain.is-disabled:active,.el-button--warning.is-plain.is-disabled:focus,.el-button--warning.is-plain.is-disabled:hover{color:#f0c78a;background-color:#fdf6ec;border-color:#faecd8}.el-button--danger{color:#FFF;background-color:#F56C6C;border-color:#F56C6C}.el-button--danger:focus,.el-button--danger:hover{background:#f78989;border-color:#f78989;color:#FFF}.el-button--danger.is-active,.el-button--danger:active{background:#dd6161;border-color:#dd6161;color:#FFF}.el-button--danger:active{outline:0}.el-button--danger.is-disabled,.el-button--danger.is-disabled:active,.el-button--danger.is-disabled:focus,.el-button--danger.is-disabled:hover{color:#FFF;background-color:#fab6b6;border-color:#fab6b6}.el-button--danger.is-plain{color:#F56C6C;background:#fef0f0;border-color:#fbc4c4}.el-button--danger.is-plain:focus,.el-button--danger.is-plain:hover{background:#F56C6C;border-color:#F56C6C;color:#FFF}.el-button--danger.is-plain:active{background:#dd6161;border-color:#dd6161;color:#FFF;outline:0}.el-button--danger.is-plain.is-disabled,.el-button--danger.is-plain.is-disabled:active,.el-button--danger.is-plain.is-disabled:focus,.el-button--danger.is-plain.is-disabled:hover{color:#f9a7a7;background-color:#fef0f0;border-color:#fde2e2}.el-button--info{color:#FFF;background-color:#909399;border-color:#909399}.el-button--info:focus,.el-button--info:hover{background:#a6a9ad;border-color:#a6a9ad;color:#FFF}.el-button--info.is-active,.el-button--info:active{background:#82848a;border-color:#82848a;color:#FFF}.el-button--info:active{outline:0}.el-button--info.is-disabled,.el-button--info.is-disabled:active,.el-button--info.is-disabled:focus,.el-button--info.is-disabled:hover{color:#FFF;background-color:#c8c9cc;border-color:#c8c9cc}.el-button--info.is-plain{color:#909399;background:#f4f4f5;border-color:#d3d4d6}.el-button--info.is-plain:focus,.el-button--info.is-plain:hover{background:#909399;border-color:#909399;color:#FFF}.el-button--info.is-plain:active{background:#82848a;border-color:#82848a;color:#FFF;outline:0}.el-button--info.is-plain.is-disabled,.el-button--info.is-plain.is-disabled:active,.el-button--info.is-plain.is-disabled:focus,.el-button--info.is-plain.is-disabled:hover{color:#bcbec2;background-color:#f4f4f5;border-color:#e9e9eb}.el-button--medium{padding:10px 20px;font-size:14px;border-radius:4px}.el-button--medium.is-round{padding:10px 20px}.el-button--medium.is-circle{padding:10px}.el-button--small{padding:9px 15px;font-size:12px;border-radius:3px}.el-button--small.is-round{padding:9px 15px}.el-button--small.is-circle{padding:9px}.el-button--mini,.el-button--mini.is-round{padding:7px 15px}.el-button--mini{font-size:12px;border-radius:3px}.el-button--mini.is-circle{padding:7px}.el-button--text{border-color:transparent;color:#409EFF;background:0 0;padding-left:0;padding-right:0}.el-button--text:focus,.el-button--text:hover{color:#66b1ff;border-color:transparent;background-color:transparent}.el-button--text:active{color:#3a8ee6;border-color:transparent;background-color:transparent}.el-button--text.is-disabled,.el-button--text.is-disabled:focus,.el-button--text.is-disabled:hover{border-color:transparent}.el-button-group .el-button--danger:last-child,.el-button-group .el-button--danger:not(:first-child):not(:last-child),.el-button-group .el-button--info:last-child,.el-button-group .el-button--info:not(:first-child):not(:last-child),.el-button-group .el-button--primary:last-child,.el-button-group .el-button--primary:not(:first-child):not(:last-child),.el-button-group .el-button--success:last-child,.el-button-group .el-button--success:not(:first-child):not(:last-child),.el-button-group .el-button--warning:last-child,.el-button-group .el-button--warning:not(:first-child):not(:last-child),.el-button-group>.el-dropdown>.el-button{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--danger:first-child,.el-button-group .el-button--danger:not(:first-child):not(:last-child),.el-button-group .el-button--info:first-child,.el-button-group .el-button--info:not(:first-child):not(:last-child),.el-button-group .el-button--primary:first-child,.el-button-group .el-button--primary:not(:first-child):not(:last-child),.el-button-group .el-button--success:first-child,.el-button-group .el-button--success:not(:first-child):not(:last-child),.el-button-group .el-button--warning:first-child,.el-button-group .el-button--warning:not(:first-child):not(:last-child){border-right-color:rgba(255,255,255,.5)}.el-button-group{display:inline-block;vertical-align:middle}.el-button-group::after,.el-button-group::before{display:table}.el-button-group::after{clear:both}.el-button-group>.el-button{float:left;position:relative}.el-button-group>.el-button.is-disabled{z-index:1}.el-button-group>.el-button:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.el-button-group>.el-button:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.el-button-group>.el-button:first-child:last-child{border-radius:4px}.el-button-group>.el-button:first-child:last-child.is-round{border-radius:20px}.el-button-group>.el-button:first-child:last-child.is-circle{border-radius:50%}.el-button-group>.el-button:not(:first-child):not(:last-child){border-radius:0}.el-button-group>.el-button.is-active,.el-button-group>.el-button:not(.is-disabled):active,.el-button-group>.el-button:not(.is-disabled):focus,.el-button-group>.el-button:not(.is-disabled):hover{z-index:1}.el-button-group>.el-dropdown>.el-button{border-top-left-radius:0;border-bottom-left-radius:0}.el-calendar{background-color:#fff}.el-calendar__header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:12px 20px;border-bottom:1px solid #EBEEF5}.el-backtop,.el-page-header{display:-webkit-box;display:-ms-flexbox}.el-calendar__title{color:#000;-ms-flex-item-align:center;align-self:center}.el-calendar__body{padding:12px 20px 35px}.el-calendar-table{table-layout:fixed;width:100%}.el-calendar-table thead th{padding:12px 0;color:#606266;font-weight:400}.el-calendar-table:not(.is-range) td.next,.el-calendar-table:not(.is-range) td.prev{color:#C0C4CC}.el-backtop,.el-calendar-table td.is-today{color:#409EFF}.el-calendar-table td{border-bottom:1px solid #EBEEF5;border-right:1px solid #EBEEF5;vertical-align:top;-webkit-transition:background-color .2s ease;transition:background-color .2s ease}.el-calendar-table td.is-selected{background-color:#F2F8FE}.el-calendar-table tr:first-child td{border-top:1px solid #EBEEF5}.el-calendar-table tr td:first-child{border-left:1px solid #EBEEF5}.el-calendar-table tr.el-calendar-table__row--hide-border td{border-top:none}.el-calendar-table .el-calendar-day{-webkit-box-sizing:border-box;box-sizing:border-box;padding:8px;height:85px}.el-calendar-table .el-calendar-day:hover{cursor:pointer;background-color:#F2F8FE}.el-backtop{position:fixed;background-color:#FFF;width:40px;height:40px;border-radius:50%;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;font-size:20px;-webkit-box-shadow:0 0 6px rgba(0,0,0,.12);box-shadow:0 0 6px rgba(0,0,0,.12);cursor:pointer;z-index:5}.el-backtop:hover{background-color:#F2F6FC}.el-page-header{display:flex;line-height:24px}.el-page-header__left{display:-webkit-box;display:-ms-flexbox;display:flex;cursor:pointer;margin-right:40px;position:relative}.el-page-header__left::after{position:absolute;width:1px;height:16px;right:-20px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);background-color:#DCDFE6}.el-checkbox,.el-checkbox__input{display:inline-block;position:relative;white-space:nowrap}.el-page-header__left .el-icon-back{font-size:18px;margin-right:6px;-ms-flex-item-align:center;align-self:center}.el-page-header__title{font-size:14px;font-weight:500}.el-page-header__content{font-size:18px;color:#303133}.el-checkbox{color:#606266;font-weight:500;font-size:14px;cursor:pointer;user-select:none;margin-right:30px}.el-checkbox.is-bordered{padding:9px 20px 9px 10px;border-radius:4px;border:1px solid #DCDFE6;-webkit-box-sizing:border-box;box-sizing:border-box;line-height:normal;height:40px}.el-checkbox.is-bordered.is-checked{border-color:#409EFF}.el-checkbox.is-bordered.is-disabled{border-color:#EBEEF5;cursor:not-allowed}.el-checkbox.is-bordered.el-checkbox--medium{padding:7px 20px 7px 10px;border-radius:4px;height:36px}.el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__label{line-height:17px;font-size:14px}.el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__inner{height:14px;width:14px}.el-checkbox.is-bordered.el-checkbox--small{padding:5px 15px 5px 10px;border-radius:3px;height:32px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label{line-height:15px;font-size:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner::after{height:6px;width:2px}.el-checkbox.is-bordered.el-checkbox--mini{padding:3px 15px 3px 10px;border-radius:3px;height:28px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__label{line-height:12px;font-size:12px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner::after{height:6px;width:2px}.el-checkbox__input{cursor:pointer;outline:0;line-height:1;vertical-align:middle}.el-checkbox__input.is-disabled .el-checkbox__inner{background-color:#edf2fc;border-color:#DCDFE6;cursor:not-allowed}.el-checkbox__input.is-disabled .el-checkbox__inner::after{cursor:not-allowed;border-color:#C0C4CC}.el-checkbox__input.is-disabled .el-checkbox__inner+.el-checkbox__label{cursor:not-allowed}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner{background-color:#F2F6FC;border-color:#DCDFE6}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after{border-color:#C0C4CC}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner{background-color:#F2F6FC;border-color:#DCDFE6}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner::before{background-color:#C0C4CC;border-color:#C0C4CC}.el-checkbox__input.is-checked .el-checkbox__inner,.el-checkbox__input.is-indeterminate .el-checkbox__inner{background-color:#409EFF;border-color:#409EFF}.el-checkbox__input.is-disabled+span.el-checkbox__label{color:#C0C4CC;cursor:not-allowed}.el-checkbox__input.is-checked .el-checkbox__inner::after{-webkit-transform:rotate(45deg) scaleY(1);transform:rotate(45deg) scaleY(1)}.el-checkbox__input.is-checked+.el-checkbox__label{color:#409EFF}.el-checkbox__input.is-focus .el-checkbox__inner{border-color:#409EFF}.el-checkbox__input.is-indeterminate .el-checkbox__inner::before{content:'';position:absolute;display:block;background-color:#FFF;height:2px;-webkit-transform:scale(.5);transform:scale(.5);left:0;right:0;top:5px}.el-checkbox__input.is-indeterminate .el-checkbox__inner::after{display:none}.el-checkbox__inner{display:inline-block;position:relative;border:1px solid #DCDFE6;border-radius:2px;-webkit-box-sizing:border-box;box-sizing:border-box;width:14px;height:14px;background-color:#FFF;z-index:1;-webkit-transition:border-color .25s cubic-bezier(.71,-.46,.29,1.46),background-color .25s cubic-bezier(.71,-.46,.29,1.46);transition:border-color .25s cubic-bezier(.71,-.46,.29,1.46),background-color .25s cubic-bezier(.71,-.46,.29,1.46)}.el-checkbox__inner:hover{border-color:#409EFF}.el-checkbox__inner::after{-webkit-box-sizing:content-box;box-sizing:content-box;content:\\\"\\\";border:1px solid #FFF;border-left:0;border-top:0;height:7px;left:4px;position:absolute;top:1px;-webkit-transform:rotate(45deg) scaleY(0);transform:rotate(45deg) scaleY(0);width:3px;-webkit-transition:-webkit-transform .15s ease-in .05s;transition:-webkit-transform .15s ease-in .05s;transition:transform .15s ease-in .05s;transition:transform .15s ease-in .05s,-webkit-transform .15s ease-in .05s;-webkit-transform-origin:center;transform-origin:center}.el-checkbox__original{opacity:0;outline:0;position:absolute;margin:0;width:0;height:0;z-index:-1}.el-checkbox-button,.el-checkbox-button__inner{display:inline-block;position:relative}.el-checkbox__label{display:inline-block;padding-left:10px;line-height:19px;font-size:14px}.el-checkbox:last-of-type{margin-right:0}.el-checkbox-button__inner{line-height:1;font-weight:500;white-space:nowrap;vertical-align:middle;cursor:pointer;background:#FFF;border:1px solid #DCDFE6;border-left:0;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;margin:0;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);padding:12px 20px;font-size:14px;border-radius:0}.el-checkbox-button__inner.is-round{padding:12px 20px}.el-checkbox-button__inner:hover{color:#409EFF}.el-checkbox-button__inner [class*=el-icon-]{line-height:.9}.el-checkbox-button__inner [class*=el-icon-]+span{margin-left:5px}.el-checkbox-button__original{opacity:0;outline:0;position:absolute;margin:0;z-index:-1}.el-radio,.el-radio__inner,.el-radio__input{position:relative;display:inline-block}.el-checkbox-button.is-checked .el-checkbox-button__inner{color:#FFF;background-color:#409EFF;border-color:#409EFF;-webkit-box-shadow:-1px 0 0 0 #8cc5ff;box-shadow:-1px 0 0 0 #8cc5ff}.el-checkbox-button.is-checked:first-child .el-checkbox-button__inner{border-left-color:#409EFF}.el-checkbox-button.is-disabled .el-checkbox-button__inner{color:#C0C4CC;cursor:not-allowed;background-image:none;background-color:#FFF;border-color:#EBEEF5;-webkit-box-shadow:none;box-shadow:none}.el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner{border-left-color:#EBEEF5}.el-checkbox-button:first-child .el-checkbox-button__inner{border-left:1px solid #DCDFE6;border-radius:4px 0 0 4px;-webkit-box-shadow:none!important;box-shadow:none!important}.el-checkbox-button.is-focus .el-checkbox-button__inner{border-color:#409EFF}.el-checkbox-button:last-child .el-checkbox-button__inner{border-radius:0 4px 4px 0}.el-checkbox-button--medium .el-checkbox-button__inner{padding:10px 20px;font-size:14px;border-radius:0}.el-checkbox-button--medium .el-checkbox-button__inner.is-round{padding:10px 20px}.el-checkbox-button--small .el-checkbox-button__inner{padding:9px 15px;font-size:12px;border-radius:0}.el-checkbox-button--small .el-checkbox-button__inner.is-round{padding:9px 15px}.el-checkbox-button--mini .el-checkbox-button__inner{padding:7px 15px;font-size:12px;border-radius:0}.el-checkbox-button--mini .el-checkbox-button__inner.is-round{padding:7px 15px}.el-checkbox-group{font-size:0}.el-avatar,.el-cascader-panel,.el-radio,.el-radio--medium.is-bordered .el-radio__label,.el-radio__label{font-size:14px}.el-radio{color:#606266;font-weight:500;line-height:1;cursor:pointer;white-space:nowrap;outline:0;margin-right:30px}.el-cascader-node>.el-radio,.el-radio:last-child{margin-right:0}.el-radio.is-bordered{padding:12px 20px 0 10px;border-radius:4px;border:1px solid #DCDFE6;-webkit-box-sizing:border-box;box-sizing:border-box;height:40px}.el-cascader-menu,.el-cascader-menu__list,.el-radio__inner{-webkit-box-sizing:border-box}.el-radio.is-bordered.is-checked{border-color:#409EFF}.el-radio.is-bordered.is-disabled{cursor:not-allowed;border-color:#EBEEF5}.el-radio__input.is-disabled .el-radio__inner,.el-radio__input.is-disabled.is-checked .el-radio__inner{background-color:#F5F7FA;border-color:#E4E7ED}.el-radio.is-bordered+.el-radio.is-bordered{margin-left:10px}.el-radio--medium.is-bordered{padding:10px 20px 0 10px;border-radius:4px;height:36px}.el-radio--mini.is-bordered .el-radio__label,.el-radio--small.is-bordered .el-radio__label{font-size:12px}.el-radio--medium.is-bordered .el-radio__inner{height:14px;width:14px}.el-radio--small.is-bordered{padding:8px 15px 0 10px;border-radius:3px;height:32px}.el-radio--small.is-bordered .el-radio__inner{height:12px;width:12px}.el-radio--mini.is-bordered{padding:6px 15px 0 10px;border-radius:3px;height:28px}.el-radio--mini.is-bordered .el-radio__inner{height:12px;width:12px}.el-radio__input{white-space:nowrap;cursor:pointer;outline:0;line-height:1;vertical-align:middle}.el-radio__input.is-disabled .el-radio__inner{cursor:not-allowed}.el-radio__input.is-disabled .el-radio__inner::after{cursor:not-allowed;background-color:#F5F7FA}.el-radio__input.is-disabled .el-radio__inner+.el-radio__label{cursor:not-allowed}.el-radio__input.is-disabled.is-checked .el-radio__inner::after{background-color:#C0C4CC}.el-radio__input.is-disabled+span.el-radio__label{color:#C0C4CC;cursor:not-allowed}.el-radio__input.is-checked .el-radio__inner{border-color:#409EFF;background:#409EFF}.el-radio__input.is-checked .el-radio__inner::after{-webkit-transform:translate(-50%,-50%) scale(1);transform:translate(-50%,-50%) scale(1)}.el-radio__input.is-checked+.el-radio__label{color:#409EFF}.el-radio__input.is-focus .el-radio__inner{border-color:#409EFF}.el-radio__inner{border:1px solid #DCDFE6;border-radius:100%;width:14px;height:14px;background-color:#FFF;cursor:pointer;box-sizing:border-box}.el-radio__inner:hover{border-color:#409EFF}.el-radio__inner::after{width:4px;height:4px;border-radius:100%;background-color:#FFF;content:\\\"\\\";position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%) scale(0);transform:translate(-50%,-50%) scale(0);-webkit-transition:-webkit-transform .15s ease-in;transition:-webkit-transform .15s ease-in;transition:transform .15s ease-in;transition:transform .15s ease-in,-webkit-transform .15s ease-in}.el-radio__original{opacity:0;outline:0;position:absolute;z-index:-1;top:0;left:0;right:0;bottom:0;margin:0}.el-radio:focus:not(.is-focus):not(:active):not(.is-disabled) .el-radio__inner{-webkit-box-shadow:0 0 2px 2px #409EFF;box-shadow:0 0 2px 2px #409EFF}.el-radio__label{padding-left:10px}.el-scrollbar{overflow:hidden;position:relative}.el-scrollbar:active>.el-scrollbar__bar,.el-scrollbar:focus>.el-scrollbar__bar,.el-scrollbar:hover>.el-scrollbar__bar{opacity:1;-webkit-transition:opacity 340ms ease-out;transition:opacity 340ms ease-out}.el-scrollbar__wrap{overflow:scroll;height:100%}.el-scrollbar__wrap--hidden-default{scrollbar-width:none}.el-scrollbar__wrap--hidden-default::-webkit-scrollbar{width:0;height:0}.el-scrollbar__thumb{position:relative;display:block;width:0;height:0;cursor:pointer;border-radius:inherit;background-color:rgba(144,147,153,.3);-webkit-transition:.3s background-color;transition:.3s background-color}.el-scrollbar__thumb:hover{background-color:rgba(144,147,153,.5)}.el-scrollbar__bar{position:absolute;right:2px;bottom:2px;z-index:1;border-radius:4px;opacity:0;-webkit-transition:opacity 120ms ease-out;transition:opacity 120ms ease-out}.el-scrollbar__bar.is-vertical{width:6px;top:2px}.el-scrollbar__bar.is-vertical>div{width:100%}.el-scrollbar__bar.is-horizontal{height:6px;left:2px}.el-scrollbar__bar.is-horizontal>div{height:100%}.el-cascader-panel{display:-webkit-box;display:-ms-flexbox;display:flex;border-radius:4px}.el-cascader-panel.is-bordered{border:1px solid #E4E7ED;border-radius:4px}.el-cascader-menu{min-width:180px;box-sizing:border-box;color:#606266;border-right:solid 1px #E4E7ED}.el-cascader-menu:last-child{border-right:none}.el-cascader-menu__wrap{height:204px}.el-cascader-menu__list{position:relative;min-height:100%;margin:0;padding:6px 0;list-style:none;box-sizing:border-box}.el-cascader-menu__hover-zone{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}.el-cascader-menu__empty-text{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);text-align:center;color:#C0C4CC}.el-cascader-node{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:0 30px 0 20px;height:34px;line-height:34px;outline:0}.el-cascader-node.is-selectable.in-active-path{color:#606266}.el-cascader-node.in-active-path,.el-cascader-node.is-active,.el-cascader-node.is-selectable.in-checked-path{color:#409EFF;font-weight:700}.el-cascader-node:not(.is-disabled){cursor:pointer}.el-cascader-node:not(.is-disabled):focus,.el-cascader-node:not(.is-disabled):hover{background:#F5F7FA}.el-cascader-node.is-disabled{color:#C0C4CC;cursor:not-allowed}.el-cascader-node__prefix{position:absolute;left:10px}.el-cascader-node__postfix{position:absolute;right:10px}.el-cascader-node__label{-webkit-box-flex:1;-ms-flex:1;flex:1;padding:0 10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.el-cascader-node>.el-radio .el-radio__label{padding-left:0}.el-avatar{display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;overflow:hidden;color:#fff;background:#C0C4CC;width:40px;height:40px;line-height:40px}.el-drawer,.el-drawer__body>*{-webkit-box-sizing:border-box}.el-avatar>img{display:block;height:100%;vertical-align:middle}.el-empty__image img,.el-empty__image svg{vertical-align:top;height:100%;width:100%}.el-avatar--circle{border-radius:50%}.el-avatar--square{border-radius:4px}.el-avatar--icon{font-size:18px}.el-avatar--large{width:40px;height:40px;line-height:40px}.el-avatar--medium{width:36px;height:36px;line-height:36px}.el-avatar--small{width:28px;height:28px;line-height:28px}@-webkit-keyframes el-drawer-fade-in{0%{opacity:0}100%{opacity:1}}@keyframes el-drawer-fade-in{0%{opacity:0}100%{opacity:1}}@-webkit-keyframes rtl-drawer-in{0%{-webkit-transform:translate(100%,0);transform:translate(100%,0)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@keyframes rtl-drawer-in{0%{-webkit-transform:translate(100%,0);transform:translate(100%,0)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@-webkit-keyframes rtl-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(100%,0);transform:translate(100%,0)}}@keyframes rtl-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(100%,0);transform:translate(100%,0)}}@-webkit-keyframes ltr-drawer-in{0%{-webkit-transform:translate(-100%,0);transform:translate(-100%,0)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@keyframes ltr-drawer-in{0%{-webkit-transform:translate(-100%,0);transform:translate(-100%,0)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@-webkit-keyframes ltr-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(-100%,0);transform:translate(-100%,0)}}@keyframes ltr-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(-100%,0);transform:translate(-100%,0)}}@-webkit-keyframes ttb-drawer-in{0%{-webkit-transform:translate(0,-100%);transform:translate(0,-100%)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@keyframes ttb-drawer-in{0%{-webkit-transform:translate(0,-100%);transform:translate(0,-100%)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@-webkit-keyframes ttb-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(0,-100%);transform:translate(0,-100%)}}@keyframes ttb-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(0,-100%);transform:translate(0,-100%)}}@-webkit-keyframes btt-drawer-in{0%{-webkit-transform:translate(0,100%);transform:translate(0,100%)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@keyframes btt-drawer-in{0%{-webkit-transform:translate(0,100%);transform:translate(0,100%)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@-webkit-keyframes btt-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(0,100%);transform:translate(0,100%)}}@keyframes btt-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(0,100%);transform:translate(0,100%)}}.el-drawer{position:absolute;box-sizing:border-box;background-color:#FFF;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-webkit-box-shadow:0 8px 10px -5px rgba(0,0,0,.2),0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12);box-shadow:0 8px 10px -5px rgba(0,0,0,.2),0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12);overflow:hidden;outline:0}.el-drawer.rtl{-webkit-animation:rtl-drawer-out .3s;animation:rtl-drawer-out .3s;right:0}.el-drawer__open .el-drawer.rtl{-webkit-animation:rtl-drawer-in .3s 1ms;animation:rtl-drawer-in .3s 1ms}.el-drawer.ltr{-webkit-animation:ltr-drawer-out .3s;animation:ltr-drawer-out .3s;left:0}.el-drawer__open .el-drawer.ltr{-webkit-animation:ltr-drawer-in .3s 1ms;animation:ltr-drawer-in .3s 1ms}.el-drawer.ttb{-webkit-animation:ttb-drawer-out .3s;animation:ttb-drawer-out .3s;top:0}.el-drawer__open .el-drawer.ttb{-webkit-animation:ttb-drawer-in .3s 1ms;animation:ttb-drawer-in .3s 1ms}.el-drawer.btt{-webkit-animation:btt-drawer-out .3s;animation:btt-drawer-out .3s;bottom:0}.el-drawer__open .el-drawer.btt{-webkit-animation:btt-drawer-in .3s 1ms;animation:btt-drawer-in .3s 1ms}.el-drawer__wrapper{position:fixed;top:0;right:0;bottom:0;left:0;overflow:hidden;margin:0}.el-drawer__header{-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#72767b;display:-webkit-box;display:-ms-flexbox;display:flex;margin-bottom:32px;padding:20px 20px 0}.el-drawer__header>:first-child{-webkit-box-flex:1;-ms-flex:1;flex:1}.el-drawer__title{margin:0;-webkit-box-flex:1;-ms-flex:1;flex:1;line-height:inherit;font-size:1rem}.el-drawer__close-btn{border:none;cursor:pointer;font-size:20px;color:inherit;background-color:transparent}.el-drawer__body{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow:auto}.el-drawer__body>*{box-sizing:border-box}.el-drawer.ltr,.el-drawer.rtl{height:100%;top:0;bottom:0}.el-drawer.btt,.el-drawer.ttb{width:100%;left:0;right:0}.el-drawer__container{position:relative;left:0;right:0;top:0;bottom:0;height:100%;width:100%}.el-drawer-fade-enter-active{-webkit-animation:el-drawer-fade-in .3s;animation:el-drawer-fade-in .3s}.el-drawer-fade-leave-active{animation:el-drawer-fade-in .3s reverse}.el-statistic{width:100%;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:#000;font-variant:tabular-nums;list-style:none;-webkit-font-feature-settings:\\\"tnum\\\";font-feature-settings:\\\"tnum\\\";text-align:center}.el-statistic .head{margin-bottom:4px;color:#606266;font-size:13px}.el-statistic .con{font-family:Sans-serif;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#303133}.el-statistic .con .number{font-size:20px;padding:0 4px}.el-statistic .con span{display:inline-block;margin:0;line-height:100%}.el-popconfirm__main,.el-skeleton__image{display:-ms-flexbox;-webkit-box-align:center;display:-webkit-box}.el-popconfirm__main{display:flex;-ms-flex-align:center;align-items:center}.el-popconfirm__icon{margin-right:5px}.el-popconfirm__action{text-align:right;margin:0}@-webkit-keyframes el-skeleton-loading{0%{background-position:100% 50%}100%{background-position:0 50%}}@keyframes el-skeleton-loading{0%{background-position:100% 50%}100%{background-position:0 50%}}.el-skeleton{width:100%}.el-skeleton__first-line,.el-skeleton__paragraph{height:16px;margin-top:16px;background:#f2f2f2}.el-skeleton.is-animated .el-skeleton__item{background:-webkit-gradient(linear,left top,right top,color-stop(25%,#f2f2f2),color-stop(37%,#e6e6e6),color-stop(63%,#f2f2f2));background:linear-gradient(90deg,#f2f2f2 25%,#e6e6e6 37%,#f2f2f2 63%);background-size:400% 100%;-webkit-animation:el-skeleton-loading 1.4s ease infinite;animation:el-skeleton-loading 1.4s ease infinite}.el-skeleton__item{background:#f2f2f2;display:inline-block;height:16px;border-radius:4px;width:100%}.el-skeleton__circle{border-radius:50%;width:36px;height:36px;line-height:36px}.el-skeleton__circle--lg{width:40px;height:40px;line-height:40px}.el-skeleton__circle--md{width:28px;height:28px;line-height:28px}.el-skeleton__button{height:40px;width:64px;border-radius:4px}.el-skeleton__p{width:100%}.el-skeleton__p.is-last{width:61%}.el-skeleton__p.is-first{width:33%}.el-skeleton__text{width:100%;height:13px}.el-skeleton__caption{height:12px}.el-skeleton__h1{height:20px}.el-skeleton__h3{height:18px}.el-skeleton__h5{height:16px}.el-skeleton__image{width:unset;display:flex;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:0}.el-skeleton__image svg{fill:#DCDDE0;width:22%;height:22%}.el-empty{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-direction:column;flex-direction:column;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;padding:40px 0}.el-empty__image{width:160px}.el-empty__image img{user-select:none;-o-object-fit:contain;object-fit:contain}.el-empty__image svg{fill:#DCDDE0}.el-empty__description{margin-top:20px}.el-empty__description p{margin:0;font-size:14px;color:#909399}.el-empty__bottom,.el-result__title{margin-top:20px}.el-descriptions{-webkit-box-sizing:border-box;box-sizing:border-box;font-size:14px;color:#303133}.el-descriptions__header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-bottom:20px}.el-descriptions__title{font-size:16px;font-weight:700}.el-descriptions--mini,.el-descriptions--small{font-size:12px}.el-descriptions__body{color:#606266;background-color:#FFF}.el-descriptions__body .el-descriptions__table{border-collapse:collapse;width:100%;table-layout:fixed}.el-descriptions__body .el-descriptions__table .el-descriptions-item__cell{-webkit-box-sizing:border-box;box-sizing:border-box;text-align:left;font-weight:400;line-height:1.5}.el-descriptions__body .el-descriptions__table .el-descriptions-item__cell.is-left{text-align:left}.el-descriptions__body .el-descriptions__table .el-descriptions-item__cell.is-center{text-align:center}.el-descriptions__body .el-descriptions__table .el-descriptions-item__cell.is-right{text-align:right}.el-descriptions .is-bordered{table-layout:auto}.el-descriptions .is-bordered .el-descriptions-item__cell{border:1px solid #EBEEF5;padding:12px 10px}.el-descriptions :not(.is-bordered) .el-descriptions-item__cell{padding-bottom:12px}.el-descriptions--medium.is-bordered .el-descriptions-item__cell{padding:10px}.el-descriptions--medium:not(.is-bordered) .el-descriptions-item__cell{padding-bottom:10px}.el-descriptions--small.is-bordered .el-descriptions-item__cell{padding:8px 10px}.el-descriptions--small:not(.is-bordered) .el-descriptions-item__cell{padding-bottom:8px}.el-descriptions--mini.is-bordered .el-descriptions-item__cell{padding:6px 10px}.el-descriptions--mini:not(.is-bordered) .el-descriptions-item__cell{padding-bottom:6px}.el-descriptions-item{vertical-align:top}.el-descriptions-item__container{display:-webkit-box;display:-ms-flexbox;display:flex}.el-descriptions-item__container .el-descriptions-item__content,.el-descriptions-item__container .el-descriptions-item__label{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline}.el-descriptions-item__container .el-descriptions-item__content{-webkit-box-flex:1;-ms-flex:1;flex:1}.el-descriptions-item__label.has-colon::after{content:':';position:relative;top:-.5px}.el-descriptions-item__label.is-bordered-label{font-weight:700;color:#909399;background:#fafafa}.el-descriptions-item__label:not(.is-bordered-label){margin-right:10px}.el-descriptions-item__content{word-break:break-word;overflow-wrap:break-word}.el-result{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-direction:column;flex-direction:column;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;padding:40px 30px}.el-result__icon svg{width:64px;height:64px}.el-result__title p{margin:0;font-size:20px;color:#303133;line-height:1.3}.el-result__subtitle{margin-top:10px}.el-result__subtitle p{margin:0;font-size:14px;color:#606266;line-height:1.3}.el-result__extra{margin-top:30px}.el-result .icon-success{fill:#67C23A}.el-result .icon-error{fill:#F56C6C}.el-result .icon-info{fill:#909399}.el-result .icon-warning{fill:#E6A23C}\"],\"sourceRoot\":\"\"}]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC05LnVzZVsxXSEuL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC05LnVzZVsyXSEuL25vZGVfbW9kdWxlcy9lbGVtZW50LXVpL2xpYi90aGVtZS1jaGFsay9pbmRleC5jc3MiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUMrRztBQUM3QjtBQUNPO0FBQ2xCO0FBQ0Q7QUFDdEUsOEJBQThCLHNFQUEyQixDQUFDLDJGQUFxQztBQUMvRix5Q0FBeUMseUVBQStCLENBQUMsa0VBQTZCO0FBQ3RHLHlDQUF5Qyx5RUFBK0IsQ0FBQyxpRUFBNkI7QUFDdEc7QUFDQSw2REFBNkQsV0FBVywwQkFBMEIsMElBQTBJLGdCQUFnQixzQkFBc0Isa0JBQWtCLHlDQUF5QyxvQ0FBb0MsV0FBVyxrQkFBa0IsZ0JBQWdCLG9CQUFvQixvQkFBb0IsY0FBYyx3QkFBd0IscUJBQXFCLG1DQUFtQyxrQ0FBa0MsZ0NBQWdDLG1CQUFtQixpQ0FBaUMsbUJBQW1CLHlCQUF5QixtQkFBbUIsOEJBQThCLG1CQUFtQix5QkFBeUIsbUJBQW1CLDBCQUEwQixtQkFBbUIsd0JBQXdCLG1CQUFtQix1QkFBdUIsbUJBQW1CLHVCQUF1QixtQkFBbUIscUJBQXFCLG1CQUFtQixzQkFBc0IsbUJBQW1CLHVCQUF1QixtQkFBbUIsMkJBQTJCLG1CQUFtQixzQkFBc0IsbUJBQW1CLDZCQUE2QixtQkFBbUIsbUNBQW1DLG1CQUFtQiw4QkFBOEIsbUJBQW1CLDRCQUE0QixtQkFBbUIsdUJBQXVCLG1CQUFtQiwyQkFBMkIsbUJBQW1CLDJCQUEyQixtQkFBbUIsMEJBQTBCLG1CQUFtQiwwQkFBMEIsbUJBQW1CLDBCQUEwQixtQkFBbUIsd0JBQXdCLG1CQUFtQixzQkFBc0IsbUJBQW1CLDBCQUEwQixtQkFBbUIsdUJBQXVCLG1CQUFtQiwyQkFBMkIsbUJBQW1C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aUJBQWlCLGtCQUFrQixlQUFlLFlBQVksZUFBZSxXQUFXLFVBQVUsZ0JBQWdCLGlCQUFpQixzQkFBc0IsZUFBZSxnQkFBZ0IsZUFBZSxlQUFlLFVBQVUsZ0JBQWdCLGlCQUFpQixzQkFBc0IsZUFBZSxnQkFBZ0IsZUFBZSxlQUFlLFVBQVUsVUFBVSxpQkFBaUIsZ0JBQWdCLGVBQWUsVUFBVSxlQUFlLFNBQVMsVUFBVSxnQkFBZ0IsaUJBQWlCLHNCQUFzQixlQUFlLGdCQUFnQixlQUFlLGVBQWUsVUFBVSxnQkFBZ0IsaUJBQWlCLHNCQUFzQixlQUFlLGdCQUFnQixlQUFlLGVBQWUsVUFBVSxZQUFZLGlCQUFpQixrQkFBa0IsZUFBZSxZQUFZLGVBQWUsV0FBVyxXQUFXLGdCQUFnQixrQkFBa0Isc0JBQXNCLGdCQUFnQixnQkFBZ0IsZ0JBQWdCLGVBQWUsV0FBVyxnQkFBZ0Isa0JBQWtCLHNCQUFzQixnQkFBZ0IsZ0JBQWdCLGdCQUFnQixlQUFlLFdBQVcsVUFBVSxrQkFBa0IsZ0JBQWdCLGdCQUFnQixVQUFVLGdCQUFnQixTQUFTLFdBQVcsZ0JBQWdCLGtCQUFrQixzQkFBc0IsZ0JBQWdCLGdCQUFnQixnQkFBZ0IsZUFBZSxXQUFXLGdCQUFnQixrQkFBa0Isc0JBQXNCLGdCQUFnQixnQkFBZ0IsZ0JBQWdCLGVBQWUsV0FBVyxZQUFZLGtCQUFrQixrQkFBa0IsZ0JBQWdCLFlBQVksZ0JBQWdCLFdBQVcsV0FBVyxnQkFBZ0Isa0JBQWtCLHNCQUFzQixnQkFBZ0IsZ0JBQWdCLGdCQUFnQixlQUFlLFdBQVcsZ0JBQWdCLGtCQUFrQixzQkFBc0IsZ0JBQWdCLGdCQUFnQixnQkFBZ0IsZUFBZSxXQUFXLFVBQVUsa0JBQWtCLGdCQUFnQixnQkFBZ0IsVUFBVSxnQkFBZ0IsU0FBUyxXQUFXLGdCQUFnQixrQkFBa0Isc0JBQXNCLGdCQUFnQixnQkFBZ0IsZ0JBQWdCLGVBQWUsV0FBVyxnQkFBZ0Isa0JBQWtCLHNCQUFzQixnQkFBZ0IsZ0JBQWdCLGdCQUFnQixlQUFlLFdBQVcsWUFBWSxrQkFBa0Isa0JBQWtCLGdCQUFnQixZQUFZLGdCQUFnQixXQUFXLFdBQVcsZ0JBQWdCLGtCQUFrQixzQkFBc0IsZ0JBQWdCLGdCQUFnQixnQkFBZ0IsZUFBZSxXQUFXLGdCQUFnQixrQkFBa0Isc0JBQXNCLGdCQUFnQixnQkFBZ0IsZ0JBQWdCLGVBQWUsV0FBVyxXQUFXLGtCQUFrQixpQkFBaUIsZ0JBQWdCLFdBQVcsZ0JBQWdCLFVBQVUseUNBQXlDLGFBQWEsYUFBYSxTQUFTLG9CQUFvQixjQUFjLGtCQUFrQixrQkFBa0IsUUFBUSxrQkFBa0Isa0JBQWtCLE9BQU8sYUFBYSxlQUFlLG9CQUFvQixxQkFBcUIsa0JBQWtCLGtCQUFrQixlQUFlLGtCQUFrQixrQkFBa0IsY0FBYyxhQUFhLGVBQWUsb0JBQW9CLHFCQUFxQixrQkFBa0Isa0JBQWtCLGVBQWUsa0JBQWtCLGtCQUFrQixjQUFjLGFBQWEsWUFBWSxvQkFBb0Isa0JBQWtCLGtCQUFrQixrQkFBa0IsWUFBWSxrQkFBa0Isa0JBQWtCLFdBQVcsYUFBYSxnQkFBZ0Isb0JBQW9CLHNCQUFzQixrQkFBa0Isa0JBQWtCLGdCQUFnQixrQkFBa0Isa0JBQWtCLGVBQWUsYUFBYSxnQkFBZ0Isb0JBQW9CLHNCQUFzQixrQkFBa0Isa0JBQWtCLGdCQUFnQixrQkFBa0Isa0JBQWtCLGVBQWUsYUFBYSxVQUFVLG9CQUFvQixnQkFBZ0Isa0JBQWtCLGtCQUFrQixVQUFVLGtCQUFrQixrQkFBa0IsU0FBUyxhQUFhLGdCQUFnQixvQkFBb0Isc0JBQXNCLGtCQUFrQixrQkFBa0IsZ0JBQWdCLGtCQUFrQixrQkFBa0IsZUFBZSxhQUFhLGdCQUFnQixvQkFBb0Isc0JBQXNCLGtCQUFrQixrQkFBa0IsZ0JBQWdCLGtCQUFrQixrQkFBa0IsZUFBZSxhQUFhLFlBQVksb0JBQW9CLGtCQUFrQixrQkFBa0Isa0JBQWtCLFlBQVksa0JBQWtCLGtCQUFrQixXQUFXLGNBQWMsZ0JBQWdCLHFCQUFxQixzQkFBc0IsbUJBQW1CLGtCQUFrQixnQkFBZ0IsbUJBQW1CLGtCQUFrQixlQUFlLGNBQWMsZ0JBQWdCLHFCQUFxQixzQkFBc0IsbUJBQW1CLGtCQUFrQixnQkFBZ0IsbUJBQW1CLGtCQUFrQixlQUFlLGNBQWMsVUFBVSxxQkFBcUIsZ0JBQWdCLG1CQUFtQixrQkFBa0IsVUFBVSxtQkFBbUIsa0JBQWtCLFNBQVMsY0FBYyxnQkFBZ0IscUJBQXFCLHNCQUFzQixtQkFBbUIsa0JBQWtCLGdCQUFnQixtQkFBbUIsa0JBQWtCLGVBQWUsY0FBYyxnQkFBZ0IscUJBQXFCLHNCQUFzQixtQkFBbUIsa0JBQWtCLGdCQUFnQixtQkFBbUIsa0JBQWtCLGVBQWUsY0FBYyxZQUFZLHFCQUFxQixrQkFBa0IsbUJBQW1CLGtCQUFrQixZQUFZLG1CQUFtQixrQkFBa0IsV0FBVyxjQUFjLGdCQUFnQixxQkFBcUIsc0JBQXNCLG1CQUFtQixrQkFBa0IsZ0JBQWdCLG1CQUFtQixrQkFBa0IsZUFBZSxjQUFjLGdCQUFnQixxQkFBcUIsc0JBQXNCLG1CQUFtQixrQkFBa0IsZ0JBQWdCLG1CQUFtQixrQkFBa0IsZUFBZSxjQUFjLFVBQVUscUJBQXFCLGdCQUFnQixtQkFBbUIsa0JBQWtCLFVBQVUsbUJBQW1CLGtCQUFrQixTQUFTLGNBQWMsZ0JBQWdCLHFCQUFxQixzQkFBc0IsbUJBQW1CLGtCQUFrQixnQkFBZ0IsbUJBQW1CLGtCQUFrQixlQUFlLGNBQWMsZ0JBQWdCLHFCQUFxQixzQkFBc0IsbUJBQW1CLGtCQUFrQixnQkFBZ0IsbUJBQW1CLGtCQUFrQixlQUFlLGNBQWMsWUFBWSxxQkFBcUIsa0JBQWtCLG1CQUFtQixrQkFBa0IsWUFBWSxtQkFBbUIsa0JBQWtCLFdBQVcsY0FBYyxnQkFBZ0IscUJBQXFCLHNCQUFzQixtQkFBbUIsa0JBQWtCLGdCQUFnQixtQkFBbUIsa0JBQWtCLGVBQWUsY0FBYyxnQkFBZ0IscUJBQXFCLHNCQUFzQixtQkFBbUIsa0JBQWtCLGdCQUFnQixtQkFBbUIsa0JBQWtCLGVBQWUsY0FBYyxXQUFXLHFCQUFxQixpQkFBaUIsbUJBQW1CLGtCQUFrQixXQUFXLG1CQUFtQixrQkFBa0IsV0FBVyx5Q0FBeUMsYUFB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a0JBQWtCLGVBQWUsYUFBYSxVQUFVLG9CQUFvQixnQkFBZ0Isa0JBQWtCLGtCQUFrQixVQUFVLGtCQUFrQixrQkFBa0IsU0FBUyxhQUFhLGdCQUFnQixvQkFBb0Isc0JBQXNCLGtCQUFrQixrQkFBa0IsZ0JBQWdCLGtCQUFrQixrQkFBa0IsZUFBZSxhQUFhLGdCQUFnQixvQkFBb0Isc0JBQXNCLGtCQUFrQixrQkFBa0IsZ0JBQWdCLGtCQUFrQixrQkFBa0IsZUFBZSxhQUFhLFlBQVksb0JBQW9CLGtCQUFrQixrQkFBa0Isa0JBQWtCLFlBQVksa0JBQWtCLGtCQUFrQixXQUFXLGNBQWMsZ0JBQWdCLHFCQUFxQixzQkFBc0IsbUJBQW1CLGtCQUFrQixnQkFBZ0IsbUJBQW1CLGtCQUFrQixlQUFlLGNBQWMsZ0JBQWdCLHFCQUFxQixzQkFBc0IsbUJBQW1CLGtCQUFrQixnQkFBZ0IsbUJBQW1CLGtCQUFrQixlQUFlLGNBQWMsVUFBVSxxQkFBcUIsZ0JBQWdCLG1CQUFtQixrQkFBa0IsVUFBVSxtQkFBbUIsa0JBQWtCLFNBQVMsY0FBYyxnQkFBZ0IscUJBQXFCLHNCQUFzQixtQkFBbUIsa0JBQWtCLGdCQUFnQixtQkFBbUIsa0JBQWtCLGVBQWUsY0FBYyxnQkFBZ0IscUJBQXFCLHNCQUFzQixtQkFBbUIsa0JBQWtCLGdCQUFnQixtQkFBbUIsa0JBQWtCLGVBQWUsY0FBYyxZQUFZLHFCQUFxQixrQkFBa0IsbUJBQW1CLGtCQUFrQixZQUFZLG1CQUFtQixrQkFBa0IsV0FBVyxjQUFjLGdCQUFnQixxQkFBcUIsc0JBQXNCLG1CQUFtQixrQkFBa0IsZ0JBQWdCLG1CQUFtQixrQkFBa0IsZUFBZSxjQUFjLGdCQUFnQixxQkFBcUIsc0JBQXNCLG1CQUFtQixrQkFBa0IsZ0JBQWdCLG1CQUFtQixrQkFBa0IsZUFBZSxjQUFjLFVBQVUscUJBQXFCLGdCQUFnQixtQkFBbUIsa0JBQWtCLFVBQVUsbUJBQW1CLGtCQUFrQixTQUFTLGNBQWMsZ0JBQWdCLHFCQUFxQixzQkFBc0IsbUJBQW1CLGtCQUFrQixnQkFBZ0IsbUJBQW1CLGtCQUFrQixlQUFlLGNBQWMsZ0JBQWdCLHFCQUFxQixzQkFBc0IsbUJBQW1CLGtCQUFrQixnQkFBZ0IsbUJBQW1CLGtCQUFrQixlQUFlLGNBQWMsWUFBWSxxQkFBcUIsa0JBQWtCLG1CQUFtQixrQkFBa0IsWUFBWSxtQkFBbUIsa0JBQWtCLFdBQVcsY0FBYyxnQkFBZ0IscUJBQXFCLHNCQUFzQixtQkFBbUIsa0JBQWtCLGdCQUFnQixtQkFBbUIsa0JBQWtCLGVBQWUsY0FBYyxnQkFBZ0IscUJBQXFCLHNCQUFzQixtQkFBbUIsa0JBQWtCLGdCQUFnQixtQkFBbUIsa0JBQWtCLGVBQWUsY0FBYyxXQUFXLHFCQUFxQixpQkFBaUIsbUJBQW1CLGtCQUFrQixXQUFXLG1CQUFtQixrQkFBa0IsV0FBVywwQ0FBMEMsYUFBYSxhQUFhLFNBQVMsb0JBQW9CLGNBQWMsa0JBQWtCLGtCQUFrQixRQUFRLGtCQUFrQixrQkFBa0IsT0FBTyxhQUFhLGVBQWUsb0JBQW9CLHFCQUFxQixrQkFBa0Isa0JBQWtCLGVBQWUsa0JBQWtCLGtCQUFrQixjQUFjLGFBQWEsZUFBZSxvQkFBb0IscUJBQXFCLGtCQUFrQixrQkFBa0IsZUFBZSxrQkFBa0Isa0JBQWtCLGNBQWMsYUFBYSxZQUFZLG9CQUFvQixrQkFBa0Isa0JBQWtCLGtCQUFrQixZQUFZLGtCQUFrQixrQkFBa0IsV0FBVyxhQUFhLGdCQUFnQixvQkFBb0Isc0JBQXNCLGtCQUFrQixrQkFBa0IsZ0JBQWdCLGtCQUFrQixrQkFBa0IsZUFBZSxhQUFhLGdCQUFnQixvQkFBb0Isc0JBQXNCLGtCQUFrQixrQkFBa0IsZ0JBQWdCLGtCQUFrQixrQkFBa0IsZUFBZSxhQUFhLFVBQVUsb0JBQW9CLGdCQUFnQixrQkFBa0Isa0JBQWtCLFVBQVUsa0JBQWtCLGtCQUFrQixTQUFTLGFBQWEsZ0JBQWdCLG9CQUFvQixzQkFBc0Isa0JBQWtCLGtCQUFrQixnQkFBZ0Isa0JBQWtCLGtCQUFrQixlQUFlLGFBQWEsZ0JBQWdCLG9CQUFvQixzQkFBc0Isa0JBQWtCLGtCQUFrQixnQkFBZ0Isa0JBQWtCLGtCQUFrQixlQUFlLGFBQWEsWUFBWSxvQkFBb0Isa0JBQWtCLGtCQUFrQixrQkFBa0IsWUFBWSxrQkFBa0Isa0JBQWtCLFdBQVcsY0FBYyxnQkFBZ0IscUJBQXFCLHNCQUFzQixtQkFBbUIsa0JBQWtCLGdCQUFnQixtQkFBbUIsa0JBQWtCLGVBQWUsY0FBYyxnQkFBZ0IscUJBQXFCLHNCQUFzQixtQkFBbUIsa0JBQWtCLGdCQUFnQixtQkFBbUIsa0JBQWtCLGVBQWUsY0FBYyxVQUFVLHFCQUFxQixnQkFBZ0IsbUJBQW1CLGtCQUFrQixVQUFVLG1CQUFtQixrQkFBa0IsU0FBUyxjQUFjLGdCQUFnQixxQkFBcUIsc0JBQXNCLG1CQUFtQixrQkFBa0IsZ0JBQWdCLG1CQUFtQixrQkFBa0IsZUFBZSxjQUFjLGdCQUFnQixxQkFBcUIsc0JBQXNCLG1CQUFtQixrQkFBa0IsZ0JBQWdCLG1CQUFtQixrQkFBa0IsZUFBZSxjQUFjLFlBQVkscUJBQXFCLGtCQUFrQixtQkFBbUIsa0JBQWtCLFlBQVksbUJBQW1CLGtCQUFrQixXQUFXLGNBQWMsZ0JBQWdCLHFCQUFxQixzQkFBc0IsbUJBQW1CLGtCQUFrQixnQkFBZ0IsbUJBQW1CLGtCQUFrQixlQUFlLGNBQWMsZ0JBQWdCLHFCQUFxQixzQkFBc0IsbUJBQW1CLGtCQUFrQixnQkFBZ0IsbUJBQW1CLGtCQUFrQixlQUFlLGNBQWMsVUFBVSxxQkFBcUIsZ0JBQWdCLG1CQUFtQixrQkFBa0IsVUFBVSxtQkFBbUIsa0JBQWtCLFNBQVMsY0FBYyxnQkFBZ0IscUJBQXFCLHNCQUFzQixtQkFBbUIsa0JBQWtCLGdCQUFnQixtQkFBbUIsa0JBQWtCLGVBQWUsY0FBYyxnQkFBZ0IscUJBQXFCLHNCQUFzQixtQkFBbUIsa0JBQWtCLGdCQUFnQixtQkFBbUIsa0JBQWtCLGVBQWUsY0FBYyxZQUFZLHFCQUFxQixrQkFBa0IsbUJBQW1CLGtCQUFrQixZQUFZLG1CQUFtQixrQkFBa0IsV0FBVyxjQUFjLGdCQUFnQixxQkFBcUIsc0JBQXNCLG1CQUFtQixrQkFBa0IsZ0JBQWdCLG1CQUFtQixrQkFBa0IsZUFBZSxjQUFjLGdCQUFnQixxQkFBcUIsc0JBQXNCLG1CQUFtQixrQkFBa0IsZ0JBQWdCLG1CQUFtQixrQkFBa0IsZUFBZSxjQUFjLFdBQVcscUJBQXFCLGlCQUFpQixtQkFBbUIsa0JBQWtCLFdBQVcsbUJBQW1CLGtCQUFrQixXQUFXLFdBQVcscUJBQXFCLGtCQUFrQixlQUFlLFVBQVUsa0JBQWtCLGFBQWEsZ0JBQWdCLGVBQWUsY0FBYyxlQUFlLGtCQUFrQixrQkFBa0IsV0FBVyxNQUFNLE9BQU8sd0JBQXdCLHlCQUF5Qix5QkFBeUIsMEJBQTBCLGtCQUFrQixzQkFBc0IsWUFBWSxhQUFhLGVBQWUsa0JBQWtCLG1CQUFtQiwyQkFBMkIsZUFBZSxjQUFjLGdEQUFnRCxxQkFBcUIsY0FBYyxvQ0FBb0MscUJBQXFCLG1CQUFtQixzQkFBc0IsMEJBQTBCLGtCQUFrQixzQkFBc0IsWUFBWSxhQUFhLGtCQUFrQixlQUFlLGdCQUFnQixtQ0FBbUMsZUFBZSxjQUFjLG1CQUFtQixpQkFBaUIsbUNBQW1DLGtCQUFrQixxQ0FBcUMsNkJBQTZCLGVBQWUsZ0JBQWdCLG9DQUFvQyxjQUFjLGVBQWUsa0JBQWtCLHVDQUF1QyxjQUFjLGtCQUFrQix5QkFBeUIscUJBQXFCLCtCQUErQixzQ0FBc0MsMEJBQTBCLGdCQUFnQixTQUFTLFVBQVUsZ0JBQWdCLHNCQUFzQiw0Q0FBNEMsZUFBZSxjQUFjLGdCQUFnQixlQUFlLHNCQUFzQixrQkFBa0IsV0FBVyxtQ0FBbUMsa0JBQWtCLFNBQVMsV0FBVyx5Q0FBeUMsa0JBQWtCLFFBQVEsVUFBVSx1Q0FBdUMsZUFBZSxnQkFBZ0Isa0NBQWtDLGdCQUFnQiw4Q0FBOEMsY0FBYyxxQ0FBcUMsYUFBYSxrQkFBa0IsUUFBUSxVQUFVLGVBQWUsWUFBWSxjQUFjLDJDQUEyQyxVQUFVLHlDQUF5QyxhQUFhLGtCQUFrQixRQUFRLFVBQVUsZUFBZSxlQUFlLFVBQVUsY0FBYywyQ0FBMkMscUJBQXFCLCtDQUErQyxhQUFhLG9FQUFvRSxjQUFjLG9JQUFvSSxjQUFjLGVBQWUsc0VBQXNFLHFCQUFxQiw4RkFBOEYsZ0JBQWdCLHdSQUF3UixhQUFhLDJGQUEyRixjQUFjLDJCQUEyQixjQUFjLGNBQWMsa0JBQWtCLGdCQUFnQixpQkFBaUIsdUJBQXVCLHFCQUFxQixtQkFBbUIsNENBQTRDLFlBQVksaUJBQWlCLGNBQWMsb0JBQW9CLG1DQUFtQyxrQkFBa0IsVUFBVSxNQUFNLG9CQUFvQixhQUFhLDZCQUE2QixrQkFBa0IsV0FBVyxNQUFNLGVBQWUsY0FBYyxhQUFhLG1DQUFtQyxjQUFjLDhCQUE4QixTQUFTLGVBQWUsbUJBQW1CLG9EQUFvRCxnQkFBZ0Isc0JBQXNCLHlCQUF5QixrQkFBa0Isc0JBQXNCLFlBQVksYUFBYSxtQkFBbUIscUJBQXFCLDZJQUE2SSxXQUFXLGdLQUFnSyxhQUFhLDZFQUE2RSxjQUFjLHlEQUF5RCxhQUFhLDhEQUE4RCxXQUFXLFlBQVksaUVBQWlFLGtCQUFrQixZQUFZLFNBQVMsV0FBVyxZQUFZLG1CQUFtQixrQkFBa0Isd0JBQXdCLHNDQUFzQyxtRUFBbUUsZUFBZSxnQkFBZ0IseUJBQXlCLDREQUE0RCxrQkFBa0IsV0FBVyxZQUFZLE9BQU8sTUFBTSxlQUFlLGtCQUFrQixXQUFXLFVBQVUsZUFBZSxnQ0FBZ0MsdUJBQXVCLG1FQUFtRSxxQkFBcUIsWUFBWSxzQkFBc0IsaUVBQWlFLGFBQWEsZUFBZSxzRUFBc0UsaUJBQWlCLHlGQUF5RixnQkFBZ0Isa0JBQWtCLGNBQWMsa0VBQWtFLFVBQVUsdUVBQXVFLHFCQUFxQiwyQ0FBMkMsUUFBUSxTQUFTLCtCQUErQixZQUFZLFlBQVksOERBQThELFFBQVEsK0NBQStDLGdCQUFnQixVQUFVLHNCQUFzQix5QkFBeUIsa0JBQWtCLHNCQUFzQixnQkFBZ0IsNEJBQTRCLFlBQVksbUlBQW1JLFdBQVcsd0ZBQXdGLGVBQWUsZ0JBQWdCLFNBQVMsWUFBWSx3RUFBd0UsY0FBYyxxRkFBcUYsaUJBQWlCLGFBQWEsdUZBQXVGLGFBQWEseURBQXlELHNCQUFzQixxQkFBcUIsV0FBVyxZQUFZLFdBQVcsa0JBQWtCLFVBQVUsa0JBQWtCLHNCQUFzQixvREFBb0QsY0FBYyxnQkFBZ0Isc0RBQXNELGVBQWUsY0FBYyxrQkFBa0IsU0FBUyxTQUFTLDREQUE0RCxrQkFBa0IsWUFBWSxTQUFTLFdBQVcsWUFBWSxtQkFBbUIsa0JBQWtCLHdCQUF3QiwwQkFBMEIsOERBQThELGVBQWUsZ0JBQWdCLHlCQUF5QixzQ0FBc0Msa0JBQWtCLFNBQVMsaUJBQWlCLGtCQUFrQixPQUFPLE1BQU0sV0FBVyxZQUFZLGdCQUFnQixXQUFXLGVBQWUsd0JBQXdCLHFCQUFxQixZQUFZLHNCQUFzQixxQkFBcUIsY0FBYyxXQUFXLFlBQVksd0JBQXdCLGtCQUFrQixZQUFZLFNBQVMsV0FBVyxZQUFZLG1CQUFtQixrQkFBa0Isd0JBQXdCLHNDQUFzQywwQkFBMEIsZUFBZSxnQkFBZ0IseUJBQXlCLFdBQVcsMkJBQTJCLHFCQUFxQixzQkFBc0IsZ0JBQWdCLFlBQVksNkNBQTZDLFVBQVUsMEJBQTBCLGtCQUFrQixNQUFNLE9BQU8sV0FBVyxZQUFZLDJCQUEyQixrQkFBa0IsU0FBUyxPQUFPLFdBQVcsWUFBWSxpQ0FBaUMsa0JBQWtCLGdDQUFnQyxxQkFBcUIsV0FBVyxlQUFlLGVBQWUsc0JBQXNCLHlGQUF5RixnQkFBZ0IscUNBQXFDLFVBQVUsK0JBQStCLGtEQUFrRCxpQkFBaUIsc0NBQXNDLDRCQUE0QiwyQ0FBMkMsVUFBVSxrQ0FBa0MsV0FBVyxjQUFjLGVBQWUsb0JBQW9CLGtCQUFrQix3QkFBd0Isa0JBQWtCLFNBQVMsT0FBTyxzQkFBc0IsWUFBWSxXQUFXLGdCQUFnQix1QkFBdUIsbUJBQW1CLGdCQUFnQixnQkFBZ0IsZUFBZSxTQUFTLGlCQUFpQixlQUFlLGNBQWMsbUNBQW1DLFVBQVUsa0JBQWtCLFVBQVUsYUFBYSxrQkFBa0IsY0FBYyxtQkFBbUIsZUFBZSxjQUFjLHFCQUFxQixzQkFBc0IsaUJBQWlCLGNBQWMscUJBQXFCLHNCQUFzQixjQUFjLDZDQUE2QyxxQkFBcUIsbUZBQW1GLGtCQUFrQixRQUFRLE9BQU8sV0FBVyxrQkFBa0IsU0FBUyw0QkFBNEIsdUZBQXVGLHNCQUFzQixxQkFBcUIsOENBQThDLGFBQWEsNENBQTRDLGdCQUFnQixlQUFlLGNBQWMsMkNBQTJDLGdCQUFnQixlQUFlLGdEQUFnRCx5QkFBeUIsMkNBQTJDLGNBQWMsZ0RBQWdELHlCQUF5QixxRUFBcUUseUJBQXlCLDJDQUEyQyxjQUFjLDZDQUE2QyxjQUFjLGlCQUFpQixtQkFBbUIscUJBQXFCLHNCQUFzQixXQUFXLG1CQUFtQixzQkFBc0IsNENBQTRDLDhCQUE4Qix3QkFBd0IsV0FBVyxvQkFBb0IseUJBQXlCLGdCQUFnQixrQkFBa0Isc0JBQXNCLHdCQUF3QixrQkFBa0IsT0FBTyxNQUFNLFlBQVkseUJBQXlCLGlCQUFpQixvQkFBb0IsY0FBYyxtQkFBbUIsMEJBQTBCLCtCQUErQixxQkFBcUIsWUFBWSxzQkFBc0IsNEJBQTRCLHFCQUFxQixzQkFBc0IsV0FBVyxlQUFlLGFBQWEsb0JBQW9CLEdBQUcsd0JBQXdCLEtBQUssNEJBQTRCLGlCQUFpQixXQUFXLG1CQUFtQixZQUFZLHFCQUFxQixzQkFBc0Isa0JBQWtCLG9DQUFvQyxXQUFXLFlBQVksd0JBQXdCLGVBQWUscUJBQXFCLHlDQUF5QyxrQkFBa0IsS0FBSywwQkFBMEIsZ0JBQWdCLEdBQUcsdUJBQXVCLG9CQUFvQixJQUFJLHdCQUF3QixzQkFBc0IsS0FBSyx3QkFBd0Isd0JBQXdCLFlBQVksZ0JBQWdCLHNCQUFzQixrQkFBa0IsaUJBQWlCLG1CQUFtQixxQkFBcUIsZUFBZSxTQUFTLFNBQVMsMkJBQTJCLHlCQUF5Qiw2Q0FBNkMsZ0JBQWdCLDRCQUE0QixhQUFhLG1CQUFtQixzQkFBc0IsdUJBQXVCLDZDQUE2QyxtQkFBbUIsY0FBYyxTQUFTLHVDQUF1QyxjQUFjLHFCQUFxQix5QkFBeUIscUJBQXFCLDBDQUEwQyxjQUFjLHFCQUFxQix5QkFBeUIscUJBQXFCLDBDQUEwQyxjQUFjLG1CQUFtQix5QkFBeUIscUJBQXFCLHdDQUF3QyxjQUFjLGtCQUFrQixrQkFBa0IscUJBQXFCLFVBQVUsZUFBZSxjQUFjLDJCQUEyQixnQkFBZ0Isc0JBQXNCLGtCQUFrQixRQUFRLFdBQVcsMkJBQTJCLGVBQWUsY0FBYyxlQUFlLDRCQUE0QixnQkFBZ0IsNEJBQTRCLGNBQWMsNkJBQTZCLGNBQWMsMkJBQTJCLGNBQWMsMEJBQTBCLGNBQWMsNkJBQTZCLGNBQWMscURBQXFELFVBQVUsZ0NBQWdDLFVBQVUsa0JBQWtCLHNCQUFzQixxQkFBcUIsbUJBQW1CLG1CQUFtQixXQUFXLHFCQUFxQixlQUFlLFlBQVksaUJBQWlCLGNBQWMsa0JBQWtCLG1CQUFtQixzQkFBc0IsNEJBQTRCLGtCQUFrQixNQUFNLFdBQVcsNENBQTRDLDhCQUE4QixrQkFBa0IscUJBQXFCLG1DQUFtQyxVQUFVLDBCQUEwQixXQUFXLFVBQVUsVUFBVSxRQUFRLGtCQUFrQiw0QkFBNEIseUJBQXlCLDRCQUE0Qix5QkFBeUIsNEJBQTRCLHlCQUF5Qix5QkFBeUIseUJBQXlCLDJCQUEyQix5QkFBeUIsU0FBUyxrQkFBa0IseUJBQXlCLHNCQUFzQixnQkFBZ0IsY0FBYyxlQUFlLHdGQUF3Rix1Q0FBdUMsaUJBQWlCLGtCQUFrQixnQ0FBZ0Msc0JBQXNCLHdCQUF3QixhQUFhLFNBQVMsWUFBWSxjQUFjLCtCQUErQixnQkFBZ0IsZUFBZSxZQUFZLHNCQUFzQixlQUFlLGVBQWUsaUJBQWlCLGNBQWMsZUFBZSx3Q0FBd0Msa0JBQWtCLE1BQU0sT0FBTyxxQkFBcUIsc0JBQXNCLGtCQUFrQixxQkFBcUIsZ0JBQWdCLCtCQUErQixvQkFBb0IsZUFBZSxlQUFlLHNCQUFzQixVQUFVLGFBQWEsa0JBQWtCLGdCQUFnQixrQkFBa0IsbUJBQW1CLHNCQUFzQixtQkFBbUIsb0JBQW9CLFlBQVksaUJBQWlCLFNBQVMsa0JBQWtCLGNBQWMscUNBQXFDLGFBQWEsOEJBQThCLDBCQUEwQixjQUFjLFlBQVksaUZBQWlGLGdCQUFnQixlQUFlLGtCQUFrQixXQUFXLDBCQUEwQixjQUFjLHFCQUFxQix1QkFBdUIsY0FBYyxxQkFBcUIsMEJBQTBCLGNBQWMscUJBQXFCLHdCQUF3QixjQUFjLHFCQUFxQix5QkFBeUIsY0FBYyxxQkFBcUIsZUFBZSxrQkFBa0IsVUFBVSxvQkFBb0IsdUJBQXVCLG1CQUFtQixXQUFXLFlBQVksZUFBZSxzQkFBc0IsZ0JBQWdCLHlCQUF5Qiw0Q0FBNEMscUJBQXFCLHVCQUF1QixrQkFBa0IsaUJBQWlCLHFCQUFxQix1QkFBdUIsV0FBVyxxQkFBcUIseUJBQXlCLHNCQUFzQixpQkFBaUIsa0JBQWtCLGdCQUFnQixjQUFjLGNBQWMscURBQXFELGVBQWUsZ0JBQWdCLCtCQUErQiwwQkFBMEIsZUFBZSxrQkFBa0IscUJBQXFCLHlCQUF5QixxQkFBcUIsY0FBYyxpQkFBaUIsbUJBQW1CLHFCQUFxQix5QkFBeUIsc0JBQXNCLFFBQVEsU0FBUyxlQUFlLG1CQUFtQixnQkFBZ0IsZ0JBQWdCLGVBQWUsaUJBQWlCLDJCQUEyQixnQkFBZ0IsY0FBYyx3QkFBd0IsY0FBYywyQkFBMkIsY0FBYyx5QkFBeUIsY0FBYywwQkFBMEIsY0FBYyxzQkFBc0Isa0JBQWtCLGdCQUFnQixlQUFlLGlCQUFpQixnQkFBZ0IsaUNBQWlDLGNBQWMsOEJBQThCLGNBQWMsaUNBQWlDLGNBQWMsK0JBQStCLGNBQWMsZ0NBQWdDLGNBQWMsc0NBQXNDLFdBQVcsU0FBUyxPQUFPLFFBQVEscUJBQXFCLGFBQWEsb0NBQW9DLFlBQVksV0FBVyxvQ0FBb0Msa0JBQWtCLFlBQVkscUNBQXFDLGlCQUFpQixtQkFBbUIsb0NBQW9DLFVBQVUsTUFBTSxTQUFTLFVBQVUsNENBQTRDLFdBQVcsb0VBQW9FLGtCQUFrQix5Q0FBeUMsaUJBQWlCLGtCQUFrQixrQ0FBa0MsU0FBUyxXQUFXLG1CQUFtQixhQUFhLG1CQUFtQixrQ0FBa0MsV0FBVyxZQUFZLG1CQUFtQixrQ0FBa0MsZUFBZSxXQUFXLFlBQVksZUFBZSx3RUFBd0UsZUFBZSxrREFBa0Qsb0NBQW9DLGtDQUFrQyxrQkFBa0IsYUFBYSxvQkFBb0IsWUFBWSxtQ0FBbUMsZUFBZSxpQkFBaUIsc0RBQXNELGNBQWMscUJBQXFCLG1DQUFtQyxZQUFZLGFBQWEsbUJBQW1CLHVCQUF1QixxRkFBcUYsV0FBVyxxQkFBcUIsa0JBQWtCLFlBQVksVUFBVSxtQkFBbUIsMkNBQTJDLDBDQUEwQyxxQkFBcUIsMENBQTBDLHdDQUF3QywyQkFBMkIsZ0RBQWdELGFBQWEsYUFBYSxrQkFBa0IseUJBQXlCLGtCQUFrQix1QkFBdUIsa0JBQWtCLHdCQUF3QixrQkFBa0IsYUFBYSxvQkFBb0IsWUFBWSxVQUFVLFVBQVUsU0FBUyxZQUFZLFdBQVcsZUFBZSxlQUFlLGtCQUFrQixvQ0FBb0MsV0FBVyxrQkFBa0IsUUFBUSxXQUFXLDJCQUEyQixrQkFBa0IsZUFBZSwwQkFBMEIsVUFBVSwwQkFBMEIsb0NBQW9DLHNCQUFzQixlQUFlLHlCQUF5QixrQkFBa0IsZ0JBQWdCLFNBQVMsVUFBVSxVQUFVLHFDQUFxQyxTQUFTLFNBQVMsMkJBQTJCLG1DQUFtQyxRQUFRLFFBQVEsMkJBQTJCLGtDQUFrQyxZQUFZLGtCQUFrQixnQkFBZ0IsZUFBZSx1RUFBdUUsWUFBWSx5Q0FBeUMseUJBQXlCLFlBQVksaUNBQWlDLE9BQU8sUUFBUSxlQUFlLGtCQUFrQixzREFBc0QsWUFBWSxXQUFXLGlCQUFpQixlQUFlLHlEQUF5RCxnQkFBZ0Isd0JBQXdCLDZCQUE2QixlQUFlLHFDQUFxQyxZQUFZLG9DQUFvQyxxQkFBcUIsaUJBQWlCLGtDQUFrQyxpQkFBaUIsdURBQXVELFVBQVUsWUFBWSx5Q0FBeUMsVUFBVSxxQkFBcUIsY0FBYyxZQUFZLFdBQVcsV0FBVyxzQkFBc0IsWUFBWSxVQUFVLFVBQVUsU0FBUyxlQUFlLGVBQWUsc0NBQXNDLFlBQVksa0JBQWtCLE1BQU0sT0FBTyw2REFBNkQsNkNBQTZDLFVBQVUsK0RBQStELDRDQUE0QyxVQUFVLG1CQUFtQixXQUFXLHFCQUFxQixnQkFBZ0IsVUFBVSw2QkFBNkIsVUFBVSxnQ0FBZ0MscUNBQXFDLHlCQUF5QixVQUFVLHFDQUFxQyxxQ0FBcUMsZUFBZSxVQUFVLCtIQUErSCxZQUFZLG1DQUFtQyxVQUFVLG1CQUFtQixXQUFXLHNCQUFzQixZQUFZLGVBQWUsMERBQTBELDhCQUE4Qix5RUFBeUUsVUFBVSxnRUFBZ0UsOEJBQThCLGtGQUFrRixVQUFVLGtEQUFrRCw0Q0FBNEMsMkNBQTJDLFVBQVUsZ0VBQWdFLDRDQUE0Qyx5REFBeUQsVUFBVSxvQkFBb0IsMERBQTBELFVBQVUsb0JBQW9CLHlGQUF5Riw0QkFBNEIsbURBQW1ELFVBQVUsb0JBQW9CLGdFQUFnRSxVQUFVLG9CQUFvQix5RkFBeUYsK0JBQStCLHlEQUF5RCxVQUFVLG9CQUFvQiw0REFBNEQsVUFBVSxxQkFBcUIseUZBQXlGLDBCQUEwQixxREFBcUQsVUFBVSx5QkFBeUIscUJBQXFCLDZGQUE2RixnQ0FBZ0MsNEZBQTRGLDRDQUE0QyxrQkFBa0IscUNBQXFDLFVBQVUsNEJBQTRCLHVCQUF1QixnREFBZ0QsYUFBYSw2QkFBNkIsZ0NBQWdDLHdEQUF3RCxXQUFXLG1CQUFtQiwwQkFBMEIsYUFBYSxtQkFBbUIsWUFBWSxpQkFBaUIsc0JBQXNCLGNBQWMsZUFBZSxnQ0FBZ0MsZUFBZSxnQkFBZ0IsbUNBQW1DLFVBQVUseUJBQXlCLG9CQUFvQix5QkFBeUIsZ0JBQWdCLG1DQUFtQyx3QkFBd0IscURBQXFELGNBQWMsb0NBQW9DLGdDQUFnQyx3QkFBd0IsbUJBQW1CLHNCQUFzQixnQkFBZ0Isc0JBQXNCLGdDQUFnQyxzREFBc0QsOEJBQThCLDJCQUEyQixvQkFBb0IsZUFBZSxjQUFjLDhCQUE4Qiw2QkFBNkIsbUJBQW1CLDJEQUEyRCxrQkFBa0IsY0FBYyxRQUFRLFNBQVMseUJBQXlCLG1CQUFtQixxQkFBcUIscUJBQXFCLDBCQUEwQixpQkFBaUIsa0RBQWtELGlDQUFpQyxjQUFjLGlCQUFpQiw2QkFBNkIsbUJBQW1CLDRDQUE0QyxZQUFZLFNBQVMsaUJBQWlCLHlCQUF5QixzQkFBc0IsbURBQW1ELFdBQVcsaUJBQWlCLHNCQUFzQixzQkFBc0IsZ0NBQWdDLGdCQUFnQiwrQ0FBK0MsU0FBUyxTQUFTLGlCQUFpQixtQkFBbUIsNEJBQTRCLHNEQUFzRCxRQUFRLGlCQUFpQixtQkFBbUIseUJBQXlCLCtCQUErQixpQkFBaUIsOENBQThDLFFBQVEsVUFBVSxrQkFBa0IsMkJBQTJCLG9CQUFvQixxREFBcUQsWUFBWSxTQUFTLHdCQUF3QixvQkFBb0IsOEJBQThCLGtCQUFrQiw2Q0FBNkMsUUFBUSxXQUFXLGtCQUFrQixxQkFBcUIsMEJBQTBCLG9EQUFvRCxVQUFVLFlBQVksaUJBQWlCLHFCQUFxQix1QkFBdUIsUUFBUSx5QkFBeUIscUJBQXFCLFlBQVksZUFBZSxpQkFBaUIsZUFBZSxjQUFjLGlCQUFpQixtQkFBbUIsa0JBQWtCLHNCQUFzQixtQkFBbUIsZUFBZSxxQkFBcUIsdUJBQXVCLGNBQWMsNkJBQTZCLFdBQVcseUJBQXlCLHFCQUFxQix5QkFBeUIscUJBQXFCLGNBQWMsNEJBQTRCLHFCQUFxQixvQ0FBb0MsY0FBYywwQ0FBMEMsV0FBVyx5QkFBeUIsd0JBQXdCLHlCQUF5QixxQkFBcUIsY0FBYywrQkFBK0IscUJBQXFCLHVDQUF1QyxjQUFjLDZDQUE2QyxXQUFXLHlCQUF5Qix3QkFBd0IseUJBQXlCLHFCQUFxQixjQUFjLCtCQUErQixxQkFBcUIsdUNBQXVDLGNBQWMsNkNBQTZDLFdBQVcseUJBQXlCLHVCQUF1Qix5QkFBeUIscUJBQXFCLGNBQWMsOEJBQThCLHFCQUFxQixzQ0FBc0MsY0FBYyw0Q0FBNEMsV0FBVyx5QkFBeUIsdUJBQXVCLGtCQUFrQixrQkFBa0Isa0JBQWtCLGVBQWUsZUFBZSxZQUFZLFdBQVcsaUJBQWlCLHNCQUFzQixTQUFTLFdBQVcsK0JBQStCLGNBQWMsY0FBYyx5QkFBeUIscUJBQXFCLFdBQVcscUJBQXFCLHFCQUFxQiw2QkFBNkIsV0FBVyxtQ0FBbUMsV0FBVyx5QkFBeUIsMkJBQTJCLHlCQUF5QixxQkFBcUIsV0FBVyxrQ0FBa0MscUJBQXFCLDBDQUEwQyxXQUFXLGdEQUFnRCxXQUFXLHlCQUF5Qiw4QkFBOEIseUJBQXlCLHFCQUFxQixXQUFXLHFDQUFxQyxxQkFBcUIsNkNBQTZDLFdBQVcsbURBQW1ELFdBQVcseUJBQXlCLDhCQUE4Qix5QkFBeUIscUJBQXFCLFdBQVcscUNBQXFDLHFCQUFxQiw2Q0FBNkMsV0FBVyxtREFBbUQsV0FBVyx5QkFBeUIsNkJBQTZCLHlCQUF5QixxQkFBcUIsV0FBVyxvQ0FBb0MscUJBQXFCLDRDQUE0QyxXQUFXLGtEQUFrRCxXQUFXLHlCQUF5QixlQUFlLHNCQUFzQixxQkFBcUIsY0FBYyxzQkFBc0IscUJBQXFCLDhCQUE4QixjQUFjLG9DQUFvQyxXQUFXLHlCQUF5Qiw0QkFBNEIsc0JBQXNCLHFCQUFxQixjQUFjLG1DQUFtQyxxQkFBcUIsMkNBQTJDLGNBQWMsaURBQWlELFdBQVcseUJBQXlCLCtCQUErQixzQkFBc0IscUJBQXFCLGNBQWMsc0NBQXNDLHFCQUFxQiw4Q0FBOEMsY0FBYyxvREFBb0QsV0FBVyx5QkFBeUIsK0JBQStCLHNCQUFzQixxQkFBcUIsY0FBYyxzQ0FBc0MscUJBQXFCLDhDQUE4QyxjQUFjLG9EQUFvRCxXQUFXLHlCQUF5Qiw4QkFBOEIsc0JBQXNCLHFCQUFxQixjQUFjLHFDQUFxQyxxQkFBcUIsNkNBQTZDLGNBQWMsbURBQW1ELFdBQVcseUJBQXlCLGdCQUFnQixZQUFZLGlCQUFpQiwrQkFBK0Isb0JBQW9CLGVBQWUsWUFBWSxjQUFjLGlCQUFpQiw4QkFBOEIsb0JBQW9CLGNBQWMsWUFBWSxjQUFjLGlCQUFpQiw2QkFBNkIsaUJBQWlCLG9CQUFvQixhQUFhLGtCQUFrQixlQUFlLGlCQUFpQixzREFBc0QsZUFBZSxxQkFBcUIsK0ZBQStGLHFCQUFxQix1QkFBdUIsZUFBZSx3Q0FBd0MsdUJBQXVCLDJDQUEyQyx5QkFBeUIsZUFBZSxzREFBc0QsMEJBQTBCLG1EQUFtRCxjQUFjLHFCQUFxQixlQUFlLGlCQUFpQixvQkFBb0IsZUFBZSxpQkFBaUIsbUJBQW1CLGVBQWUsaUJBQWlCLDZDQUE2QyxVQUFVLGNBQWMsdUJBQXVCLGFBQWEsZUFBZSxnQkFBZ0IseUJBQXlCLGtCQUFrQix1Q0FBdUMsbUJBQW1CLGtCQUFrQixPQUFPLFdBQVcsUUFBUSwyQkFBMkIsYUFBYSxlQUFlLG1CQUFtQixnQkFBZ0Isc0JBQXNCLDJCQUEyQixvQkFBb0IsbUJBQW1CLGVBQWUscUJBQXFCLHVCQUF1QixtQkFBbUIsd0NBQXdDLHlCQUF5QixnQ0FBZ0MsT0FBTyxnQkFBZ0IsdUJBQXVCLDBDQUEwQyxVQUFVLHlCQUF5QixXQUFXLGdEQUFnRCx5QkFBeUIsK0JBQStCLGtCQUFrQiw4QkFBOEIsaUJBQWlCLFNBQVMsY0FBYyxlQUFlLGNBQWMsa0JBQWtCLDhCQUE4QixhQUFhLDhCQUE4QixtQkFBbUIsWUFBWSxlQUFlLGdCQUFnQixVQUFVLGVBQWUsd0VBQXdFLG1CQUFtQix5Q0FBeUMsY0FBYyxnQkFBZ0IsbUNBQW1DLGtCQUFrQix5QkFBeUIsY0FBYyxjQUFjLDJCQUEyQixPQUFPLFlBQVksZUFBZSxzQkFBc0IsVUFBVSxjQUFjLFlBQVksVUFBVSxzQkFBc0IsNkNBQTZDLGNBQWMsd0NBQXdDLGNBQWMsb0JBQW9CLGFBQWEsZUFBZSxlQUFlLFlBQVksNEJBQTRCLGFBQWEsT0FBTyxlQUFlLG9DQUFvQyxtQkFBbUIsV0FBVyxZQUFZLGtCQUFrQixlQUFlLHFEQUFxRCxjQUFjLDZDQUE2QywrQkFBK0Isd0NBQXdDLGFBQWEsWUFBWSxrQkFBa0IsNkNBQTZDLG9DQUFvQyx5SEFBeUgscUJBQXFCLGtCQUFrQixzQkFBc0IsWUFBWSxZQUFZLHFCQUFxQixjQUFjLDBCQUEwQixrQkFBa0IsaUdBQWlHLFlBQVksNEJBQTRCLGtCQUFrQixlQUFlLHNCQUFzQixPQUFPLE1BQU0sVUFBVSxZQUFZLGtCQUFrQixnQkFBZ0IseUJBQXlCLGtDQUFrQyxVQUFVLGlDQUFpQyxXQUFXLGFBQWEsY0FBYywyREFBMkQsa0dBQWtHLDZEQUE2RCxPQUFPLE1BQU0sV0FBVyxXQUFXLGtCQUFrQixrQkFBa0IsWUFBWSxhQUFhLGtEQUFrRCxrQkFBa0IsTUFBTSxPQUFPLFFBQVEsU0FBUyx5QkFBeUIsOERBQThELHlCQUF5QixzREFBc0QsMEJBQTBCLGtCQUFrQiw4QkFBOEIsWUFBWSxVQUFVLFdBQVcsd0ZBQXdGLGtCQUFrQiwrQkFBK0IsdUJBQXVCLGtCQUFrQixzQkFBc0IsWUFBWSxZQUFZLDhCQUE4Qix5SEFBeUgsNEJBQTRCLGtCQUFrQixxRUFBcUUsWUFBWSw4QkFBOEIsa0JBQWtCLGVBQWUsc0JBQXNCLE9BQU8sTUFBTSxVQUFVLFlBQVksa0JBQWtCLGdCQUFnQix5QkFBeUIsa0NBQWtDLFVBQVUsbUNBQW1DLFdBQVcsYUFBYSwrREFBK0Qsc0VBQXNFLGlFQUFpRSxPQUFPLE1BQU0sV0FBVyxXQUFXLG1CQUFtQixZQUFZLGlDQUFpQyxrQkFBa0Isd0NBQXdDLGNBQWMsV0FBVyx5QkFBeUIsZUFBZSxpQkFBaUIsMEJBQTBCLFdBQVcsaUJBQWlCLGVBQWUsV0FBVyxZQUFZLHdCQUF3Qix5QkFBeUIsV0FBVyxpQkFBaUIsa0JBQWtCLGVBQWUsZUFBZSw2QkFBNkIsVUFBVSxlQUFlLGtDQUFrQyxXQUFXLG1CQUFtQiw4QkFBOEIsY0FBYyxxQkFBcUIsNkJBQTZCLGVBQWUsY0FBYyxxQkFBcUIsYUFBYSxlQUFlLG1DQUFtQyx3QkFBd0IsaUJBQWlCLHFCQUFxQixrQkFBa0IsbUJBQW1CLFlBQVksdURBQXVELG1CQUFtQix5QkFBeUIsWUFBWSxtREFBbUQsWUFBWSxXQUFXLGdEQUFnRCxZQUFZLFdBQVcsd0JBQXdCLFlBQVksa0RBQWtELFlBQVksV0FBVywrQ0FBK0MsWUFBWSxXQUFXLCtGQUErRiw2Q0FBNkMsdUJBQXVCLFlBQVksaURBQWlELFlBQVksV0FBVyw4Q0FBOEMsWUFBWSxXQUFXLDZGQUE2Riw2Q0FBNkMsdUJBQXVCLFlBQVksV0FBVyxrQkFBa0Isa0JBQWtCLFFBQVEsU0FBUyxVQUFVLG1CQUFtQixzQ0FBc0MsMEJBQTBCLHFCQUFxQixzQkFBc0IsWUFBWSxXQUFXLFlBQVkseUJBQXlCLGtCQUFrQixZQUFZLGtCQUFrQixlQUFlLHdCQUF3QixrQkFBa0IsY0FBYyxzQkFBc0Isc0JBQXNCLGtCQUFrQixXQUFXLFlBQVksa0JBQWtCLDhDQUE4QyxxQkFBcUIsV0FBVyxpQ0FBaUMsb0NBQW9DLHlIQUF5SCw4QkFBOEIsa0JBQWtCLE9BQU8sTUFBTSxRQUFRLFNBQVMsd0JBQXdCLGVBQWUsV0FBVyxrQkFBa0IsUUFBUSxTQUFTLG1DQUFtQyx1QkFBdUIsa0JBQWtCLFFBQVEsU0FBUyxtQ0FBbUMsV0FBVyxrQkFBa0IsZUFBZSxvQ0FBb0Msa0JBQWtCLE1BQU0sa0JBQWtCLHdCQUF3QixrQkFBa0IsV0FBVyxZQUFZLHVCQUF1QixzQkFBc0IseUJBQXlCLGtCQUFrQix1Q0FBdUMsd0RBQXdELDhCQUE4QixhQUFhLGtCQUFrQixzQkFBc0IsZUFBZSxvQkFBb0IsY0FBYyxnQkFBZ0IsaUJBQWlCLGdCQUFnQixzQkFBc0IsV0FBVyxrQkFBa0IsY0FBYyxzQkFBc0Isc0JBQXNCLHlCQUF5QixrQkFBa0IsMkRBQTJELHNDQUFzQyxjQUFjLGlDQUFpQyxjQUFjLDBCQUEwQixxQkFBcUIsMEJBQTBCLFVBQVUscUJBQXFCLDhCQUE4QixjQUFjLGdCQUFnQixrQkFBa0IsZUFBZSxXQUFXLFdBQVcsNkNBQTZDLHlCQUF5QixxQkFBcUIsY0FBYyxtQkFBbUIsK0RBQStELGNBQWMsMERBQTBELGNBQWMsMkNBQTJDLHFCQUFxQix3Q0FBd0MsY0FBYyxVQUFVLGtCQUFrQixlQUFlLDZCQUE2QixXQUFXLFVBQVUsd0NBQXdDLFdBQVcsbUNBQW1DLGtCQUFrQixVQUFVLG1CQUFtQixvQ0FBb0MsZ0JBQWdCLG1DQUFtQyxnQkFBZ0IseUNBQXlDLGdCQUFnQixVQUFVLDJCQUEyQixjQUFjLGVBQWUsZUFBZSxvREFBb0QsaUNBQWlDLGNBQWMsMkJBQTJCLFlBQVksb0JBQW9CLG1CQUFtQixjQUFjLGVBQWUsNkpBQTZKLGtCQUFrQixrREFBa0QsZ0JBQWdCLG9CQUFvQixxQkFBcUIsY0FBYyxpQkFBaUIsd0JBQXdCLHNCQUFzQixzQkFBc0Isa0JBQWtCLHlCQUF5QixzQkFBc0IsY0FBYyxxQkFBcUIsWUFBWSxpQkFBaUIsVUFBVSxlQUFlLDJEQUEyRCxXQUFXLDZCQUE2QixhQUFhLG1DQUFtQyxjQUFjLDhCQUE4QixjQUFjLHVCQUF1QixxQkFBcUIsNERBQTRELHFCQUFxQixVQUFVLGtCQUFrQixZQUFZLFVBQVUsbUJBQW1CLG9CQUFvQix3QkFBd0IsbUJBQW1CLGtCQUFrQixZQUFZLFNBQVMsbUJBQW1CLGdCQUFnQixZQUFZLFdBQVcsa0JBQWtCLG1CQUFtQixpQkFBaUIsc0JBQXNCLFdBQVcsWUFBWSxRQUFRLHFCQUFxQixzQkFBc0Isd0JBQXdCLG9CQUFvQix1Q0FBdUMseUJBQXlCLHFCQUFxQixjQUFjLG1CQUFtQix5REFBeUQsY0FBYyxvREFBb0QsY0FBYyxzQ0FBc0MsbUJBQW1CLG1HQUFtRyxlQUFlLHFDQUFxQyxxQkFBcUIsdURBQXVELGNBQWMsbUNBQW1DLG1CQUFtQixtQ0FBbUMsa0JBQWtCLGtCQUFrQixlQUFlLG1DQUFtQyxZQUFZLGlCQUFpQixrQ0FBa0MsaUJBQWlCLGlCQUFpQixlQUFlLGtDQUFrQyxZQUFZLGlCQUFpQixpQ0FBaUMsaUJBQWlCLGdCQUFnQixlQUFlLGlDQUFpQyxZQUFZLGlCQUFpQixnQ0FBZ0MsaUJBQWlCLGdCQUFnQixtQkFBbUIscUJBQXFCLFdBQVcseUJBQXlCLGlCQUFpQixpQ0FBaUMsc0JBQXNCLG1CQUFtQixpREFBaUQseUJBQXlCLGNBQWMsc0JBQXNCLG1CQUFtQixrQkFBa0IseUJBQXlCLGtCQUFrQixlQUFlLFVBQVUsbUJBQW1CLGtFQUFrRSwwQkFBMEIsNkJBQTZCLDZEQUE2RCxVQUFVLDhJQUE4SSxxQkFBcUIsbUJBQW1CLDZUQUE2VCx5QkFBeUIsNkJBQTZCLGNBQWMsYUFBYSxnQkFBZ0IseUJBQXlCLGVBQWUsd0JBQXdCLGNBQWMseUJBQXlCLDRCQUE0QiwrSUFBK0kseUJBQXlCLDBDQUEwQyx5QkFBeUIsNEJBQTRCLDRCQUE0QixhQUFhLFFBQVEsU0FBUyxhQUFhLGVBQWUsc0JBQXNCLHFCQUFxQixzQkFBc0IsZUFBZSxxQkFBcUIsY0FBYyxjQUFjLGFBQWEsa0JBQWtCLFdBQVcseUJBQXlCLFlBQVkscUlBQXFJLGNBQWMsMEdBQTBHLGVBQWUsbUNBQW1DLGtCQUFrQix3RUFBd0UseUJBQXlCLHlCQUF5QixjQUFjLGlDQUFpQyxtQkFBbUIsa0NBQWtDLFNBQVMsbUJBQW1CLHlCQUF5QixrQkFBa0IsZ0JBQWdCLGdCQUFnQixxQkFBcUIsc0JBQXNCLFlBQVksZ0JBQWdCLHNCQUFzQixrQkFBa0IseUJBQXlCLGFBQWEsd0NBQXdDLG9CQUFvQix5QkFBeUIsU0FBUyxjQUFjLGdCQUFnQixhQUFhLGNBQWMsc0JBQXNCLHVDQUF1QyxhQUFhLGNBQWMseUJBQXlCLFlBQVksaUJBQWlCLGtCQUFrQix3QkFBd0IscUNBQXFDLGNBQWMsK0JBQStCLGNBQWMseURBQXlELFdBQVcsZ0JBQWdCLHVCQUF1QixtQkFBbUIsY0FBYyxzQkFBc0Isa0JBQWtCLGlCQUFpQiw2Q0FBNkMsa0JBQWtCLFFBQVEsMkJBQTJCLGtCQUFrQixZQUFZLHNCQUFzQixjQUFjLFdBQVcsNENBQTRDLFlBQVksV0FBVyxlQUFlLHFCQUFxQixzQkFBc0IsbUJBQW1CLG1CQUFtQixrQkFBa0IsMkNBQTJDLGdCQUFnQiw4Q0FBOEMsWUFBWSxpQkFBaUIsbUJBQW1CLFNBQVMsa0JBQWtCLGdDQUFnQyxzQkFBc0IsV0FBVyx5QkFBeUIsOEJBQThCLDJEQUEyRCxjQUFjLGlCQUFpQiwrRUFBK0UsZUFBZSxjQUFjLGdCQUFnQixvRkFBb0Ysa0JBQWtCLFdBQVcsY0FBYyxlQUFlLGdCQUFnQiw4Q0FBOEMsWUFBWSxnQkFBZ0IsU0FBUyxVQUFVLDZCQUE2QixrQkFBa0IsU0FBUyxPQUFPLFdBQVcsVUFBVSxxREFBcUQscUJBQXFCLFlBQVksc0JBQXNCLHNDQUFzQyxvQkFBb0IsMkRBQTJELGtCQUFrQixjQUFjLDZDQUE2QyxTQUFTLFlBQVksaUJBQWlCLG1CQUFtQixjQUFjLGtCQUFrQix1Q0FBdUMsaUJBQWlCLHVDQUF1QyxZQUFZLFdBQVcsa0JBQWtCLDhDQUE4QyxXQUFXLFVBQVUsU0FBUyxjQUFjLGFBQWEsbUJBQW1CLE9BQU8sZ0JBQWdCLHNCQUFzQixZQUFZLDBEQUEwRCw0QkFBNEIsMEJBQTBCLHNCQUFzQixXQUFXLGVBQWUsc0JBQXNCLGNBQWMsVUFBVSxjQUFjLHNCQUFzQixjQUFjLFNBQVMsY0FBYyxPQUFPLGdCQUFnQixjQUFjLHNCQUFzQixXQUFXLGVBQWUsc0JBQXNCLGNBQWMsYUFBYSxTQUFTLGdCQUFnQixrRUFBa0UsYUFBYSxrQkFBa0Isa0JBQWtCLG9CQUFvQiwyQkFBMkIsa0JBQWtCLGtCQUFrQixTQUFTLHdCQUF3QixrQkFBa0IsU0FBUyxZQUFZLDhCQUE4Qix3QkFBd0IsV0FBVyxlQUFlLHdCQUF3QixrQkFBa0IseUJBQXlCLGtCQUFrQixhQUFhLHVCQUF1QixtQkFBbUIsd0NBQXdDLG9CQUFvQixnQ0FBZ0MsVUFBVSxXQUFXLFlBQVksK0JBQStCLFVBQVUsV0FBVyxZQUFZLGlDQUFpQyx5QkFBeUIsaUNBQWlDLHlCQUF5QixpQ0FBaUMseUJBQXlCLGdDQUFnQyx5QkFBeUIsOEJBQThCLHlCQUF5Qix1QkFBdUIsa0JBQWtCLGFBQWEsdUJBQXVCLG1CQUFtQiwyQkFBMkIsY0FBYyw2QkFBNkIsY0FBYyxjQUFjLGVBQWUsb0NBQW9DLGtCQUFrQixnQkFBZ0IsdUNBQXVDLGVBQWUsU0FBUyxvQkFBb0IsbUJBQW1CLG1CQUFtQix1QkFBdUIsc0JBQXNCLGtCQUFrQixxQkFBcUIsVUFBVSxVQUFVLGdCQUFnQixrQ0FBa0Msa0JBQWtCLE9BQU8sUUFBUSxTQUFTLFNBQVMsZ0NBQWdDLG1IQUFtSCxxQkFBcUIscUJBQXFCLG1CQUFtQixnQ0FBZ0MsZ0JBQWdCLDBCQUEwQixjQUFjLGdDQUFnQyxjQUFjLHNDQUFzQyxjQUFjLDBCQUEwQixjQUFjLGdDQUFnQyxjQUFjLHNDQUFzQyxjQUFjLGlGQUFpRixxQkFBcUIseUJBQXlCLGNBQWMsK0JBQStCLGNBQWMscUNBQXFDLGNBQWMsbUZBQW1GLHFCQUFxQiwwQkFBMEIsY0FBYyxnQ0FBZ0MsY0FBYyxzQ0FBc0MsY0FBYyxtRkFBbUYscUJBQXFCLDBCQUEwQixjQUFjLGdDQUFnQyxjQUFjLHNDQUFzQyxjQUFjLDZFQUE2RSxxQkFBcUIsdUJBQXVCLGNBQWMsNkJBQTZCLGNBQWMsbUNBQW1DLGNBQWMsWUFBWSx5QkFBeUIsa0JBQWtCLHdCQUF3QixjQUFjLFdBQVcsV0FBVyxjQUFjLHNCQUFzQixxQkFBcUIsVUFBVSxXQUFXLGFBQWEsc0JBQXNCLGtCQUFrQixrQkFBa0Isa0JBQWtCLHNCQUFzQixlQUFlLGdCQUFnQixjQUFjLHdDQUF3QyxtQkFBbUIsMEJBQTBCLFVBQVUsMkJBQTJCLDRCQUE0QixTQUFTLDRDQUE0QywyQkFBMkIsV0FBVywyQkFBMkIseURBQXlELFdBQVcsWUFBWSxVQUFVLGtCQUFrQixxQkFBcUIsZ0JBQWdCLGlCQUFpQixtQkFBbUIseUJBQXlCLGtCQUFrQixRQUFRLFNBQVMsK0JBQStCLGNBQWMsaUJBQWlCLGFBQWEsdUJBQXVCLG1CQUFtQixjQUFjLHNCQUFzQiwwQkFBMEIsZUFBZSxNQUFNLFFBQVEsU0FBUyxPQUFPLHNCQUFzQixrQkFBa0IsVUFBVSxhQUFhLG1CQUFtQix1QkFBdUIsa0JBQWtCLFdBQVcsc0JBQXNCLHlCQUF5QixzQkFBc0IsaUJBQWlCLGtGQUFrRix5QkFBeUIsc0JBQXNCLHFCQUFxQix3QkFBd0IsU0FBUyxXQUFXLFdBQVcsWUFBWSxlQUFlLFdBQVcseUJBQXlCLHlCQUF5QixXQUFXLFlBQVksYUFBYSx1QkFBdUIsbUJBQW1CLDBCQUEwQixTQUFTLFlBQVksMkJBQTJCLFlBQVksWUFBWSxlQUFlLHlCQUF5QixrQkFBa0IsbUJBQW1CLGlDQUFpQyxXQUFXLFlBQVksbUJBQW1CLGVBQWUsZUFBZSxXQUFXLGFBQWEsbUJBQW1CLDZCQUE2Qiw4Q0FBOEMsV0FBVyxZQUFZLGVBQWUsV0FBVyx5QkFBeUIsa0JBQWtCLFFBQVEsdUJBQXVCLDJCQUEyQixVQUFVLHVCQUF1QiwyQkFBMkIsV0FBVyxnQkFBZ0IsdUJBQXVCLGtCQUFrQixXQUFXLFlBQVksTUFBTSxPQUFPLFdBQVcsZ0JBQWdCLDBCQUEwQiw2QkFBNkIsMEJBQTBCLDhCQUE4QiwwQkFBMEIsR0FBRyxpQ0FBaUMsVUFBVSxLQUFLLDZCQUE2QixXQUFXLDJCQUEyQixHQUFHLDZCQUE2QixVQUFVLEtBQUssaUNBQWlDLFdBQVcsV0FBVyxxQkFBcUIsY0FBYyxtQkFBbUIsZUFBZSxnQkFBZ0IseUJBQXlCLGNBQWMsd0JBQXdCLGtCQUFrQixzQkFBc0IsVUFBVSxTQUFTLGVBQWUsZ0JBQWdCLGtCQUFrQixlQUFlLGtCQUFrQix3RUFBd0UsaUJBQWlCLGtDQUFrQyxjQUFjLHFCQUFxQix5QkFBeUIsa0JBQWtCLGNBQWMscUJBQXFCLFVBQVUsNkJBQTZCLFNBQVMsa0NBQWtDLGdCQUFnQixvREFBb0QsZ0JBQWdCLHFCQUFxQixjQUFjLGdEQUFnRCxjQUFjLHFCQUFxQiwyQkFBMkIsZ0JBQWdCLFVBQVUsaUZBQWlGLGNBQWMsbUJBQW1CLHNCQUFzQixzQkFBc0IscUJBQXFCLHVDQUF1Qyw2QkFBNkIsNEdBQTRHLHNCQUFzQixxQkFBcUIsY0FBYyxzQkFBc0Isa0JBQWtCLG9CQUFvQiw2QkFBNkIsb0JBQW9CLFdBQVcsa0JBQWtCLFVBQVUsU0FBUyxXQUFXLFlBQVksc0JBQXNCLHVDQUF1QyxvQkFBb0IsbUJBQW1CLGtCQUFrQixxQkFBcUIsa0JBQWtCLGFBQWEsb0JBQW9CLFdBQVcseUJBQXlCLHFCQUFxQixvREFBb0QsbUJBQW1CLHFCQUFxQixXQUFXLHlEQUF5RCxtQkFBbUIscUJBQXFCLFdBQVcsMkJBQTJCLFVBQVUsbUpBQW1KLFdBQVcseUJBQXlCLHFCQUFxQiw2QkFBNkIsY0FBYyxtQkFBbUIscUJBQXFCLHNFQUFzRSxtQkFBbUIscUJBQXFCLFdBQVcsb0NBQW9DLG1CQUFtQixxQkFBcUIsV0FBVyxVQUFVLHVMQUF1TCxjQUFjLHlCQUF5QixxQkFBcUIsb0JBQW9CLFdBQVcseUJBQXlCLHFCQUFxQixvREFBb0QsbUJBQW1CLHFCQUFxQixXQUFXLHlEQUF5RCxtQkFBbUIscUJBQXFCLFdBQVcsMkJBQTJCLFVBQVUsbUpBQW1KLFdBQVcseUJBQXlCLHFCQUFxQiw2QkFBNkIsY0FBYyxtQkFBbUIscUJBQXFCLHNFQUFzRSxtQkFBbUIscUJBQXFCLFdBQVcsb0NBQW9DLG1CQUFtQixxQkFBcUIsV0FBVyxVQUFVLHVMQUF1TCxjQUFjLHlCQUF5QixxQkFBcUIsb0JBQW9CLFdBQVcseUJBQXlCLHFCQUFxQixvREFBb0QsbUJBQW1CLHFCQUFxQixXQUFXLHlEQUF5RCxtQkFBbUIscUJBQXFCLFdBQVcsMkJBQTJCLFVBQVUsbUpBQW1KLFdBQVcseUJBQXlCLHFCQUFxQiw2QkFBNkIsY0FBYyxtQkFBbUIscUJBQXFCLHNFQUFzRSxtQkFBbUIscUJBQXFCLFdBQVcsb0NBQW9DLG1CQUFtQixxQkFBcUIsV0FBVyxVQUFVLHVMQUF1TCxjQUFjLHlCQUF5QixxQkFBcUIsbUJBQW1CLFdBQVcseUJBQXlCLHFCQUFxQixrREFBa0QsbUJBQW1CLHFCQUFxQixXQUFXLHVEQUF1RCxtQkFBbUIscUJBQXFCLFdBQVcsMEJBQTBCLFVBQVUsK0lBQStJLFdBQVcseUJBQXlCLHFCQUFxQiw0QkFBNEIsY0FBYyxtQkFBbUIscUJBQXFCLG9FQUFvRSxtQkFBbUIscUJBQXFCLFdBQVcsbUNBQW1DLG1CQUFtQixxQkFBcUIsV0FBVyxVQUFVLG1MQUFtTCxjQUFjLHlCQUF5QixxQkFBcUIsaUJBQWlCLFdBQVcseUJBQXlCLHFCQUFxQiw4Q0FBOEMsbUJBQW1CLHFCQUFxQixXQUFXLG1EQUFtRCxtQkFBbUIscUJBQXFCLFdBQVcsd0JBQXdCLFVBQVUsdUlBQXVJLFdBQVcseUJBQXlCLHFCQUFxQiwwQkFBMEIsY0FBYyxtQkFBbUIscUJBQXFCLGdFQUFnRSxtQkFBbUIscUJBQXFCLFdBQVcsaUNBQWlDLG1CQUFtQixxQkFBcUIsV0FBVyxVQUFVLDJLQUEySyxjQUFjLHlCQUF5QixxQkFBcUIsbUJBQW1CLGtCQUFrQixlQUFlLGtCQUFrQiw0QkFBNEIsa0JBQWtCLDZCQUE2QixhQUFhLGtCQUFrQixpQkFBaUIsZUFBZSxrQkFBa0IsMkJBQTJCLGlCQUFpQiw0QkFBNEIsWUFBWSwyQ0FBMkMsaUJBQWlCLGlCQUFpQixlQUFlLGtCQUFrQiwyQkFBMkIsWUFBWSxpQkFBaUIseUJBQXlCLGNBQWMsZUFBZSxlQUFlLGdCQUFnQiw4Q0FBOEMsY0FBYyx5QkFBeUIsNkJBQTZCLHdCQUF3QixjQUFjLHlCQUF5Qiw2QkFBNkIsbUdBQW1HLHlCQUF5Qix5bkJBQXluQix1Q0FBdUMscWxCQUFxbEIsd0NBQXdDLGlCQUFpQixxQkFBcUIsc0JBQXNCLGlEQUFpRCxjQUFjLHdCQUF3QixXQUFXLDRCQUE0QixXQUFXLGtCQUFrQix3Q0FBd0MsVUFBVSx3Q0FBd0MsMEJBQTBCLDZCQUE2Qix1Q0FBdUMseUJBQXlCLDRCQUE0QixtREFBbUQsa0JBQWtCLDREQUE0RCxtQkFBbUIsNkRBQTZELGtCQUFrQiwrREFBK0QsZ0JBQWdCLG1NQUFtTSxVQUFVLHlDQUF5Qyx5QkFBeUIsNEJBQTRCLGFBQWEsc0JBQXNCLHFCQUFxQixhQUFhLDhCQUE4QixrQkFBa0IsZ0NBQWdDLDRCQUE0QixvQkFBb0Isb0JBQW9CLFdBQVcsa0JBQWtCLG1CQUFtQix1QkFBdUIsbUJBQW1CLG1CQUFtQixXQUFXLDRCQUE0QixlQUFlLGNBQWMsZ0JBQWdCLG9GQUFvRixjQUFjLDJDQUEyQyxjQUFjLHNCQUFzQixnQ0FBZ0MsK0JBQStCLG1CQUFtQixxQ0FBcUMsa0NBQWtDLHlCQUF5QixxQ0FBcUMsNkJBQTZCLHFDQUFxQyw4QkFBOEIsNkRBQTZELGdCQUFnQixvQ0FBb0Msc0JBQXNCLFlBQVksWUFBWSwwQ0FBMEMsZUFBZSx5QkFBeUIsWUFBWSxlQUFlLHNCQUFzQixXQUFXLFlBQVksa0JBQWtCLGFBQWEsbUJBQW1CLHVCQUF1QixlQUFlLG1DQUFtQyxlQUFlLFVBQVUsa0JBQWtCLHlCQUF5QixnQkFBZ0IsYUFBYSxpQkFBaUIsc0JBQXNCLGFBQWEsZUFBZSxrQkFBa0Isa0JBQWtCLDZCQUE2QixrQkFBa0IsVUFBVSxZQUFZLFlBQVksUUFBUSwyQkFBMkIseUJBQXlCLGlDQUFpQyxxQkFBcUIsa0JBQWtCLG1CQUFtQixvQ0FBb0MsZUFBZSxpQkFBaUIsa0JBQWtCLHVCQUF1QixlQUFlLGdCQUFnQix5QkFBeUIsZUFBZSxjQUFjLGFBQWEsY0FBYyxnQkFBZ0IsZUFBZSxlQUFlLHlCQUF5QixzQkFBc0IsaUJBQWlCLGtCQUFrQix5QkFBeUIsMEJBQTBCLGtCQUFrQix5QkFBeUIsc0JBQXNCLG1CQUFtQixZQUFZLG9DQUFvQyxxQkFBcUIscUNBQXFDLHFCQUFxQixtQkFBbUIsNkNBQTZDLDBCQUEwQixrQkFBa0IsWUFBWSxpRUFBaUUsaUJBQWlCLGVBQWUsaUVBQWlFLFlBQVksV0FBVyw0Q0FBNEMsMEJBQTBCLGtCQUFrQixZQUFZLGdFQUFnRSxpQkFBaUIsZUFBZSxnRUFBZ0UsWUFBWSxXQUFXLHVFQUF1RSxXQUFXLFVBQVUsMkNBQTJDLDBCQUEwQixrQkFBa0IsWUFBWSwrREFBK0QsaUJBQWlCLGVBQWUsK0RBQStELFlBQVksV0FBVyxzRUFBc0UsV0FBVyxVQUFVLG9CQUFvQixlQUFlLFVBQVUsY0FBYyxzQkFBc0Isb0RBQW9ELHlCQUF5QixxQkFBcUIsbUJBQW1CLDJEQUEyRCxtQkFBbUIscUJBQXFCLHdFQUF3RSxtQkFBbUIsK0RBQStELHlCQUF5QixxQkFBcUIsc0VBQXNFLHFCQUFxQixxRUFBcUUseUJBQXlCLHFCQUFxQiw2RUFBNkUseUJBQXlCLHFCQUFxQiw0R0FBNEcseUJBQXlCLHFCQUFxQix3REFBd0QsY0FBYyxtQkFBbUIsMERBQTBELGtDQUFrQyxtREFBbUQsY0FBYyxpREFBaUQscUJBQXFCLGlFQUFpRSxXQUFXLGtCQUFrQixjQUFjLHNCQUFzQixXQUFXLG9CQUFvQixPQUFPLFFBQVEsUUFBUSxnRUFBZ0UsYUFBYSxvQkFBb0IscUJBQXFCLGtCQUFrQix5QkFBeUIsa0JBQWtCLHNCQUFzQixXQUFXLFlBQVksc0JBQXNCLFVBQVUsbUhBQW1ILDBCQUEwQixxQkFBcUIsMkJBQTJCLHVCQUF1QixhQUFhLHNCQUFzQixjQUFjLGFBQWEsV0FBVyxTQUFTLGtCQUFrQixRQUFRLGtDQUFrQyxVQUFVLHVDQUF1Qyx3QkFBd0IsdUJBQXVCLFVBQVUsVUFBVSxrQkFBa0IsU0FBUyxRQUFRLFNBQVMsV0FBVywrQ0FBK0MscUJBQXFCLGtCQUFrQixvQkFBb0IscUJBQXFCLGtCQUFrQixpQkFBaUIsZUFBZSwwQkFBMEIsZUFBZSwyQkFBMkIsY0FBYyxnQkFBZ0IsbUJBQW1CLHNCQUFzQixlQUFlLGdCQUFnQix5QkFBeUIsY0FBYyxjQUFjLHdCQUF3QixrQkFBa0Isc0JBQXNCLFVBQVUsU0FBUyxrREFBa0Qsa0JBQWtCLGVBQWUsZ0JBQWdCLG9DQUFvQyxrQkFBa0IsaUNBQWlDLGNBQWMsNkNBQTZDLGVBQWUsa0RBQWtELGdCQUFnQiw4QkFBOEIsVUFBVSxVQUFVLGtCQUFrQixTQUFTLFdBQVcsNENBQTRDLGtCQUFrQixxQkFBcUIsMERBQTBELFdBQVcseUJBQXlCLHFCQUFxQiw4QkFBOEIsc0VBQXNFLDBCQUEwQiwyREFBMkQsY0FBYyxtQkFBbUIsc0JBQXNCLHNCQUFzQixxQkFBcUIsZ0JBQWdCLHVFQUF1RSwwQkFBMEIsMkRBQTJELDhCQUE4QiwwQkFBMEIsMEJBQTBCLHdEQUF3RCxxQkFBcUIsMERBQTBELDBCQUEwQix1REFBdUQsa0JBQWtCLGVBQWUsZ0JBQWdCLGdFQUFnRSxrQkFBa0Isc0RBQXNELGlCQUFpQixlQUFlLGdCQUFnQiwrREFBK0QsaUJBQWlCLHFEQUFxRCxpQkFBaUIsZUFBZSxnQkFBZ0IsOERBQThELGlCQUFpQixtQkFBbUIsWUFBWSx3R0FBd0csZUFBZSxVQUFVLGNBQWMsZ0JBQWdCLGNBQWMsZUFBZSxtQkFBbUIsVUFBVSxrQkFBa0IsaURBQWlELGVBQWUsc0JBQXNCLHlCQUF5QixrQkFBa0IseUJBQXlCLHNCQUFzQixZQUFZLDJEQUEyRCw4QkFBOEIsaUNBQWlDLHFCQUFxQixrQ0FBa0MsbUJBQW1CLHFCQUFxQix1R0FBdUcseUJBQXlCLHFCQUFxQiw0Q0FBNEMsaUJBQWlCLDhCQUE4Qix5QkFBeUIsa0JBQWtCLFlBQVksMkZBQTJGLGVBQWUsK0NBQStDLFlBQVksV0FBVyw2QkFBNkIsd0JBQXdCLGtCQUFrQixZQUFZLDhDQUE4QyxZQUFZLFdBQVcsNEJBQTRCLHdCQUF3QixrQkFBa0IsWUFBWSw2Q0FBNkMsWUFBWSxXQUFXLGlCQUFpQixtQkFBbUIsZUFBZSxVQUFVLGNBQWMsc0JBQXNCLDhDQUE4QyxtQkFBbUIscURBQXFELG1CQUFtQix5QkFBeUIsK0RBQStELG1CQUFtQixnRUFBZ0UseUJBQXlCLGtEQUFrRCxjQUFjLG1CQUFtQiw2Q0FBNkMscUJBQXFCLG1CQUFtQixvREFBb0Qsd0NBQXdDLDZDQUE2QyxjQUFjLDJDQUEyQyxxQkFBcUIsaUJBQWlCLHlCQUF5QixtQkFBbUIsV0FBVyxZQUFZLHNCQUFzQixlQUFlLHNCQUFzQix1QkFBdUIscUJBQXFCLHdCQUF3QixVQUFVLFdBQVcsbUJBQW1CLHNCQUFzQixhQUFhLGtCQUFrQixTQUFTLFFBQVEsd0NBQXdDLGtDQUFrQyxvQkFBb0IsVUFBVSxVQUFVLGtCQUFrQixXQUFXLE1BQU0sT0FBTyxRQUFRLFNBQVMsU0FBUywrRUFBK0UsK0JBQStCLGlCQUFpQixrQkFBa0IsY0FBYyxnQkFBZ0Isa0JBQWtCLHNIQUFzSCxVQUFVLGtDQUFrQyxvQkFBb0IsZ0JBQWdCLFlBQVksb0NBQW9DLHFCQUFxQix1REFBdUQsUUFBUSxTQUFTLHFCQUFxQixrQkFBa0IsY0FBYyxRQUFRLFNBQVMsZUFBZSxzQkFBc0Isc0NBQXNDLGdDQUFnQywyQkFBMkIsc0NBQXNDLG1CQUFtQixrQkFBa0IsVUFBVSxXQUFXLFVBQVUsa0JBQWtCLFVBQVUsa0NBQWtDLCtCQUErQixVQUFVLFFBQVEsbUNBQW1DLFdBQVcsaUNBQWlDLFdBQVcsU0FBUyxxQ0FBcUMsWUFBWSxtQkFBbUIsYUFBYSxrQkFBa0IsK0JBQStCLHlCQUF5QixrQkFBa0Isa0JBQWtCLGdCQUFnQixzQkFBc0IsY0FBYywrQkFBK0IsNkJBQTZCLGtCQUFrQix3QkFBd0IsYUFBYSx3QkFBd0Isa0JBQWtCLGdCQUFnQixTQUFTLGNBQWMsZ0JBQWdCLHNCQUFzQiw4QkFBOEIsa0JBQWtCLE1BQU0sT0FBTyxXQUFXLFlBQVksb0JBQW9CLDhCQUE4QixrQkFBa0IsUUFBUSxTQUFTLCtCQUErQixrQkFBa0IsY0FBYyxrQkFBa0Isa0JBQWtCLGFBQWEsbUJBQW1CLHNCQUFzQixZQUFZLGlCQUFpQixVQUFVLCtDQUErQyxjQUFjLDZHQUE2RyxjQUFjLGdCQUFnQixvQ0FBb0MsZUFBZSxvRkFBb0YsbUJBQW1CLDhCQUE4QixjQUFjLG1CQUFtQiwwQkFBMEIsa0JBQWtCLFVBQVUsMkJBQTJCLGtCQUFrQixXQUFXLHlCQUF5QixPQUFPLGVBQWUsbUJBQW1CLGdCQUFnQix1QkFBdUIsNkNBQTZDLGVBQWUsV0FBVyxxQkFBcUIsc0JBQXNCLGtCQUFrQixnQkFBZ0IsV0FBVyxtQkFBbUIsV0FBVyxZQUFZLGlCQUFpQiw4QkFBOEIsOEJBQThCLGVBQWUsY0FBYyxZQUFZLHNCQUFzQiwwQ0FBMEMsbUJBQW1CLFlBQVksV0FBVyxtQkFBbUIsa0JBQWtCLG1CQUFtQixrQkFBa0IsaUJBQWlCLGVBQWUsa0JBQWtCLFdBQVcsWUFBWSxpQkFBaUIsbUJBQW1CLFdBQVcsWUFBWSxpQkFBaUIsa0JBQWtCLFdBQVcsWUFBWSxpQkFBaUIsNkJBQTZCLEdBQUcsVUFBVSxLQUFLLFdBQVcseUJBQXlCLEdBQUcsNEJBQTRCLEtBQUssMEJBQTBCLDBCQUEwQixHQUFHLHlCQUF5QixLQUFLLDZCQUE2Qix5QkFBeUIsR0FBRyw2QkFBNkIsS0FBSywwQkFBMEIsMEJBQTBCLEdBQUcseUJBQXlCLEtBQUssOEJBQThCLHlCQUF5QixHQUFHLDZCQUE2QixLQUFLLDBCQUEwQiwwQkFBMEIsR0FBRyx5QkFBeUIsS0FBSyw4QkFBOEIseUJBQXlCLEdBQUcsNEJBQTRCLEtBQUssMEJBQTBCLDBCQUEwQixHQUFHLHlCQUF5QixLQUFLLDZCQUE2QixXQUFXLGtCQUFrQixzQkFBc0Isc0JBQXNCLGFBQWEsc0JBQXNCLHlHQUF5RyxnQkFBZ0IsVUFBVSxlQUFlLDZCQUE2QixRQUFRLGdDQUFnQyxnQ0FBZ0MsZUFBZSw2QkFBNkIsT0FBTyxnQ0FBZ0MsZ0NBQWdDLGVBQWUsNkJBQTZCLE1BQU0sZ0NBQWdDLGdDQUFnQyxlQUFlLDZCQUE2QixTQUFTLGdDQUFnQyxnQ0FBZ0Msb0JBQW9CLGVBQWUsTUFBTSxRQUFRLFNBQVMsT0FBTyxnQkFBZ0IsU0FBUyxtQkFBbUIsbUJBQW1CLGNBQWMsYUFBYSxtQkFBbUIsb0JBQW9CLGdDQUFnQyxPQUFPLGtCQUFrQixTQUFTLE9BQU8sb0JBQW9CLGVBQWUsc0JBQXNCLFlBQVksZUFBZSxlQUFlLGNBQWMsNkJBQTZCLGlCQUFpQixPQUFPLGNBQWMsbUJBQW1CLHNCQUFzQiw4QkFBOEIsWUFBWSxNQUFNLFNBQVMsOEJBQThCLFdBQVcsT0FBTyxRQUFRLHNCQUFzQixrQkFBa0IsT0FBTyxRQUFRLE1BQU0sU0FBUyxZQUFZLFdBQVcsNkJBQTZCLGdDQUFnQyw2QkFBNkIsd0NBQXdDLGNBQWMsV0FBVyxzQkFBc0IsU0FBUyxVQUFVLFdBQVcsMEJBQTBCLGdCQUFnQiwrQkFBK0Isa0JBQWtCLG9CQUFvQixrQkFBa0IsY0FBYyxlQUFlLG1CQUFtQix1QkFBdUIsYUFBYSx1QkFBdUIsbUJBQW1CLGNBQWMsMkJBQTJCLGVBQWUsY0FBYyx3QkFBd0IscUJBQXFCLFNBQVMsaUJBQWlCLHlDQUF5QyxvQkFBb0IseUJBQXlCLG9CQUFvQixxQkFBcUIsYUFBYSxtQkFBbUIscUJBQXFCLGlCQUFpQix1QkFBdUIsaUJBQWlCLFNBQVMsK0JBQStCLEdBQUcsNkJBQTZCLEtBQUssMkJBQTJCLGFBQWEsV0FBVyxpREFBaUQsWUFBWSxnQkFBZ0IsbUJBQW1CLDRDQUE0QyxzRUFBc0UsMEJBQTBCLGlEQUFpRCxtQkFBbUIsbUJBQW1CLHFCQUFxQixZQUFZLGtCQUFrQixXQUFXLHFCQUFxQixrQkFBa0IsV0FBVyxZQUFZLGlCQUFpQix5QkFBeUIsV0FBVyxZQUFZLGlCQUFpQix5QkFBeUIsV0FBVyxZQUFZLGlCQUFpQixxQkFBcUIsWUFBWSxXQUFXLGtCQUFrQixnQkFBZ0IsV0FBVyx3QkFBd0IsVUFBVSx5QkFBeUIsVUFBVSxtQkFBbUIsV0FBVyxZQUFZLHNCQUFzQixZQUFZLGlCQUFpQixZQUFZLGlCQUFpQixZQUFZLGlCQUFpQixZQUFZLG9CQUFvQixZQUFZLGFBQWEsbUJBQW1CLHVCQUF1QixnQkFBZ0Isd0JBQXdCLGFBQWEsVUFBVSxXQUFXLFVBQVUsYUFBYSx1QkFBdUIsbUJBQW1CLHNCQUFzQixrQkFBa0Isc0JBQXNCLGVBQWUsaUJBQWlCLFlBQVkscUJBQXFCLHlCQUF5QixzQkFBc0IsaUJBQWlCLHNCQUFzQixtQkFBbUIscUJBQXFCLGFBQWEsdUJBQXVCLGdCQUFnQix5QkFBeUIsU0FBUyxlQUFlLGNBQWMsb0NBQW9DLGdCQUFnQixpQkFBaUIsc0JBQXNCLGVBQWUsY0FBYyx5QkFBeUIsYUFBYSw4QkFBOEIsbUJBQW1CLG1CQUFtQix3QkFBd0IsZUFBZSxnQkFBZ0IsK0NBQStDLGVBQWUsdUJBQXVCLGNBQWMsc0JBQXNCLCtDQUErQyx5QkFBeUIsV0FBVyxtQkFBbUIsMkVBQTJFLHNCQUFzQixnQkFBZ0IsZ0JBQWdCLGdCQUFnQixtRkFBbUYsZ0JBQWdCLHFGQUFxRixrQkFBa0Isb0ZBQW9GLGlCQUFpQiw4QkFBOEIsa0JBQWtCLDBEQUEwRCx5QkFBeUIsa0JBQWtCLGdFQUFnRSxvQkFBb0IsaUVBQWlFLGFBQWEsdUVBQXVFLG9CQUFvQixnRUFBZ0UsaUJBQWlCLHNFQUFzRSxtQkFBbUIsK0RBQStELGlCQUFpQixxRUFBcUUsbUJBQW1CLHNCQUFzQixtQkFBbUIsaUNBQWlDLGFBQWEsOEhBQThILG9CQUFvQixxQkFBcUIsZ0VBQWdFLE9BQU8sOENBQThDLFlBQVksa0JBQWtCLFVBQVUsK0NBQStDLGdCQUFnQixjQUFjLG1CQUFtQixxREFBcUQsa0JBQWtCLCtCQUErQixzQkFBc0IseUJBQXlCLFdBQVcsYUFBYSx1QkFBdUIsbUJBQW1CLHNCQUFzQixrQkFBa0Isc0JBQXNCLGtCQUFrQixxQkFBcUIsV0FBVyxZQUFZLG9CQUFvQixTQUFTLGVBQWUsY0FBYyxnQkFBZ0IscUJBQXFCLGdCQUFnQix1QkFBdUIsU0FBUyxlQUFlLGNBQWMsZ0JBQWdCLGtCQUFrQixnQkFBZ0IseUJBQXlCLGFBQWEsdUJBQXVCLGFBQWEsc0JBQXNCLGFBQWEseUJBQXlCLGFBQWEsT0FBTyxndXFGQUFndXFGLFdBQVcsMEJBQTBCLHFHQUFxRyxnQkFBZ0Isc0JBQXNCLGtCQUFrQix5Q0FBeUMsb0NBQW9DLFdBQVcsa0JBQWtCLGdCQUFnQixvQkFBb0Isb0JBQW9CLGNBQWMsd0JBQXdCLHFCQUFxQixtQ0FBbUMsa0NBQWtDLGdDQUFnQyxtQkFBbUIsaUNBQWlDLG1CQUFtQix5QkFBeUIsbUJBQW1CLDhCQUE4QixtQkFBbUIseUJBQXlCLG1CQUFtQiwwQkFBMEIsbUJBQW1CLHdCQUF3QixtQkFBbUIsdUJBQXVCLG1CQUFtQix1QkFBdUIsbUJBQW1CLHFCQUFxQixtQkFBbUIsc0JBQXNCLG1CQUFtQix1QkFBdUIsbUJBQW1CLDJCQUEyQixtQkFBbUIsc0JBQXNCLG1CQUFtQiw2QkFBNkIsbUJBQW1CLG1DQUFtQyxtQkFBbUIsOEJBQThCLG1CQUFtQiw0QkFBNEIsbUJBQW1CLHVCQUF1QixtQkFBbUIsMkJBQTJCLG1CQUFtQiwyQkFBMkIsbUJBQW1CLDBCQUEwQixtQkFBbUIsMEJBQTBCLG1CQUFtQiwwQkFBMEIsbUJBQW1CLHdCQUF3QixtQkFBbUIsc0JBQXNCLG1CQUFtQiwwQkFBMEIsbUJBQW1CLHVCQUF1QixtQkFBbUIsMkJBQTJCLG1CQUFtQiwyQkFBMkIsbUJBQW1CLHdCQUF3QixtQkFBbUIscUJBQXFCLG1CQUFtQix1QkFBdUIsbUJBQW1CLHFCQUFxQixtQkFBbUIsMkJBQTJCLG1CQUFtQixxQkFBcUIsbUJBQW1CLGlDQUFpQyxtQkFBbUIsOEJBQThCLG1CQUFtQix1QkFBdUIsbUJBQW1CLHNCQUFzQixtQkFBbUIsdUJBQXVCLG1CQUFtQiwwQkFBMEIsbUJBQW1CLHdCQUF3QixtQkFBbUIsMkJBQTJCLG1CQUFtQiwwQkFBMEIsbUJBQW1CLDJCQUEyQixtQkFBbUIsMkJBQTJCLG1CQUFtQix5QkFBeUIsbUJBQW1CLHVCQUF1QixtQkFBbUIseUJBQXlCLG1CQUFtQiwyQkFBMkIsbUJBQW1CLHFCQUFxQixtQkFBbUIsc0JBQXNCLG1CQUFtQix3QkFBd0IsbUJBQW1CLDZCQUE2QixtQkFBbUIsd0JBQXdCLG1CQUFtQixvQkFBb0IsbUJBQW1CLHVCQUF1QixtQkFBbUIscUJBQXFCLG1CQUFtQixzQkFBc0IsbUJBQW1CLHdCQUF3QixtQkFBbUIsc0JBQXNCLG1CQUFtQiw0QkFBNEIsbUJBQW1CLDZCQUE2QixtQkFBbUIsZ0NBQWdDLG1CQUFtQiw2QkFBNkIsbUJBQW1CLHFDQUFxQyxtQkFBbUIsaUNBQWlDLG1CQUFtQix5QkFBeUIsbUJBQW1CLHNCQUFzQixtQkFBbUIseUJBQXlCLG1CQUFtQiw4QkFBOEIsbUJBQW1CLHlCQUF5QixtQkFBbUIsdUJBQXVCLG1CQUFtQixzQkFBc0IsbUJBQW1CLHdCQUF3QixtQkFBbUIsMEJBQTBCLG1CQUFtQixvQkFBb0IsbUJBQW1CLDhCQUE4QixtQkFBbUIsNEJBQTRCLG1CQUFtQiw4QkFBOEIsbUJBQW1CLG9CQUFvQixtQkFBbUIscUJBQXFCLG1CQUFtQix5QkFBeUIsbUJBQW1CLHFCQUFxQixtQkFBbUIsd0JBQXdCLG1CQUFtQixtQ0FBbUMsbUJBQW1CLDJCQUEyQixtQkFBbUIsb0NBQW9DLG1CQUFtQix5QkFBeUIsbUJBQW1CLHlCQUF5QixtQkFBbUIsd0JBQXdCLG1CQUFtQixpQ0FBaUMsbUJBQW1CLGdDQUFnQyxtQkFBbUIsK0JBQStCLG1CQUFtQiw0QkFBNEIsbUJBQW1CLGdDQUFnQyxtQkFBbUIsMkJBQTJCLG1CQUFtQix1QkFBdUIsbUJBQW1CLHlCQUF5QixtQkFBbUIscUJBQXFCLG1CQUFtQiwyQkFBMkIsbUJBQW1CLHFCQUFxQixtQkFBbUIsb0JBQW9CLG1CQUFtQixzQkFBc0IsbUJBQW1CLHVCQUF1QixtQkFBbUIscUJBQXFCLG1CQUFtQixzQkFBc0IsbUJBQW1CLHFCQUFxQixtQkFBbUIsMEJBQTBCLG1CQUFtQix5QkFBeUIsbUJBQW1CLHVCQUF1QixtQkFBbUIscUJBQXFCLG1CQUFtQixzQkFBc0IsbUJBQW1CLDBCQUEwQixtQkFBbUIsb0JBQW9CLG1CQUFtQix3QkFBd0IsbUJBQW1CLHFCQUFxQixtQkFBbUIseUJBQXlCLG1CQUFtQiwrQkFBK0IsbUJBQW1CLCtCQUErQixtQkFBbUIsZ0NBQWdDLG1CQUFtQixnQ0FBZ0MsbUJBQW1CLG1DQUFtQyxtQkFBbUIsd0JBQXdCLG1CQUFtQiwyQkFBMkIsbUJBQW1CLHNCQUFzQixtQkFBbUIsMkJBQTJCLG1CQUFtQix1QkFBdUIsbUJBQW1CLGdDQUFnQyxtQkFBbUIsNkJBQTZCLG1CQUFtQiwyQkFBMkIsbUJBQW1CLDJCQUEyQixtQkFBbUIsc0JBQXNCLG1CQUFtQiwyQkFBMkIsbUJBQW1CLDBCQUEwQixtQkFBbUIsMkJBQTJCLG1CQUFtQix5QkFBeUIsbUJBQW1CLHFCQUFxQixtQkFBbUIsK0JBQStCLG1CQUFtQiw4QkFBOEIsbUJBQW1CLDBCQUEwQixtQkFBbUIsMkJBQTJCLG1CQUFtQiwwQkFBMEIsbUJBQW1CLHdCQUF3QixtQkFBbUIsNEJBQTRCLG1CQUFtQiwyQkFBMkIsbUJBQW1CLHNCQUFzQixtQkFBbUIsc0JBQXNCLG1CQUFtQix3QkFBd0IsbUJBQW1CLHlCQUF5QixtQkFBbUIseUJBQXlCLG1CQUFtQix1QkFBdUIsbUJBQW1CLHdCQUF3QixtQkFBbUIsd0JBQXdCLG1CQUFtQix1QkFBdUIsbUJBQW1CLDZCQUE2QixtQkFBbUIsMEJBQTBCLG1CQUFtQix3QkFBd0IsbUJBQW1CLDZCQUE2QixtQkFBbUIseUJBQXlCLG1CQUFtQixpQ0FBaUMsbUJBQW1CLDhCQUE4QixtQkFBbUIsZ0NBQWdDLG1CQUFtQixnQ0FBZ0MsbUJBQW1CLHdCQUF3QixtQkFBbUIsK0JBQStCLG1CQUFtQiw4QkFBOEIsbUJBQW1CLDhCQUE4QixtQkFBbUIsMkJBQTJCLG1CQUFtQiw4QkFBOEIsbUJBQW1CLHVCQUF1QixtQkFBbUIsNkJBQTZCLG1CQUFtQixxQkFBcUIsbUJBQW1CLHFCQUFxQixtQkFBbUIsb0NBQW9DLG1CQUFtQixxQkFBcUIsbUJBQW1CLHdCQUF3QixtQkFBbUIscUJBQXFCLG1CQUFtQiwwQkFBMEIsbUJBQW1CLHdCQUF3QixtQkFBbUIscUJBQXFCLG1CQUFtQix5QkFBeUIsbUJBQW1CLDZCQUE2QixtQkFBbUIsOEJBQThCLG1CQUFtQix3QkFBd0IsbUJBQW1CLDJCQUEyQixtQkFBbUIsNEJBQTRCLG1CQUFtQiw4QkFBOEIsbUJBQW1CLDZCQUE2QixtQkFBbUIseUJBQXlCLG1CQUFtQiwyQkFBMkIsbUJBQW1CLDRCQUE0QixtQkFBbUIsMkJBQTJCLG1CQUFtQiwwQkFBMEIsbUJBQW1CLHlCQUF5QixtQkFBbUIsb0JBQW9CLG1CQUFtQix1QkFBdUIsbUJBQW1CLHNCQUFzQixtQkFBbUIscUJBQXFCLG1CQUFtQiw2QkFBNkIsbUJBQW1CLDRCQUE0QixtQkFBbUIsMEJBQTBCLG1CQUFtQiw2QkFBNkIsbUJBQW1CLDRCQUE0QixtQkFBbUIsMkJBQTJCLG1CQUFtQix3QkFBd0IsbUJBQW1CLHNCQUFzQixtQkFBbUIscUJBQXFCLG1CQUFtQix1QkFBdUIsbUJBQW1CLHdCQUF3QixtQkFBbUIsdUJBQXVCLG1CQUFtQiw4QkFBOEIsbUJBQW1CLHlCQUF5QixtQkFBbUIsd0JBQXdCLG1CQUFtQiwwQkFBMEIsbUJBQW1CLDBCQUEwQixtQkFBbUIsdUJBQXVCLG1CQUFtQiw0QkFBNEIsbUJBQW1CLHVCQUF1QixtQkFBbUIsdUJBQXVCLG1CQUFtQiw2QkFBNkIsbUJBQW1CLHlCQUF5QixtQkFBbUIsMEJBQTBCLG1CQUFtQix1QkFBdUIsbUJBQW1CLDRCQUE0QixtQkFBbUIsNEJBQTRCLG1CQUFtQix5QkFBeUIsbUJBQW1CLHVCQUF1QixtQkFBbUIsMkJBQTJCLG1CQUFtQix3QkFBd0IsbUJBQW1CLDhCQUE4QixtQkFBbUIscUJBQXFCLG1CQUFtQiw4QkFBOEIsbUJBQW1CLDZCQUE2QixtQkFBbUIsbUNBQW1DLG1CQUFtQix1QkFBdUIsbUJBQW1CLDZCQUE2QixtQkFBbUIseUJBQXlCLG1CQUFtQix3QkFBd0IsbUJBQW1CLHVCQUF1QixtQkFBbUIsc0NBQXNDLG1CQUFtQixnQ0FBZ0MsbUJBQW1CLHdCQUF3QixtQkFBbUIsc0JBQXNCLG1CQUFtQixzQkFBc0IsbUJBQW1CLHFCQUFxQixtQkFBbUIsc0JBQXNCLG1CQUFtQixxQkFBcUIsbUJBQW1CLHVCQUF1QixtQkFBbUIsNkJBQTZCLG1CQUFtQiw2QkFBNkIsbUJBQW1CLG9DQUFvQyxtQkFBbUIsK0JBQStCLG1CQUFtQix5QkFBeUIsbUJBQW1CLHdCQUF3QixtQkFBbUIsc0JBQXNCLG1CQUFtQix3QkFBd0IsbUJBQW1CLDRCQUE0QixtQkFBbUIsdUJBQXVCLG1CQUFtQixxQkFBcUIsbUJBQW1CLHlCQUF5QixtQkFBbUIsZ0NBQWdDLG1CQUFtQix3QkFBd0IsbUJBQW1CLHNCQUFzQixtQkFBbUIsd0JBQXdCLG1CQUFtQix5QkFBeUIsbUJBQW1CLHdCQUF3QixtQkFBbUIsNkJBQTZCLG1CQUFtQixxQkFBcUIsbUJBQW1CLDhCQUE4QixtQkFBbUIsc0JBQXNCLG1CQUFtQixxQkFBcUIsbUJBQW1CLDJCQUEyQixtQkFBbUIsd0JBQXdCLG1CQUFtQix3QkFBd0IsbUJBQW1CLHVCQUF1QixtQkFBbUIsNkJBQTZCLG1CQUFtQixzQkFBc0IsbUJBQW1CLCtCQUErQixtQkFBbUIsaUJBQWlCLDhDQUE4QyxzQ0FBc0MsZ0JBQWdCLGdCQUFnQixlQUFlLGlCQUFpQiw0QkFBNEIsR0FBRyw2QkFBNkIscUJBQXFCLEtBQUssa0NBQWtDLDJCQUEyQixvQkFBb0IsR0FBRyw2QkFBNkIscUJBQXFCLEtBQUssa0NBQWtDLDJCQUEyQixlQUFlLG1CQUFtQixnQkFBZ0IsY0FBYyxnQkFBZ0IsNkNBQTZDLGNBQWMsYUFBYSxzQkFBc0IsV0FBVywrREFBK0QscUJBQXFCLGVBQWUsaUJBQWlCLFlBQVksaUJBQWlCLG1CQUFtQiw4QkFBOEIsc0JBQXNCLGdDQUFnQyxrQkFBa0IsMEJBQTBCLG1CQUFtQixpQ0FBaUMsUUFBUSw0QkFBNEIsb0JBQW9CLG9DQUFvQyxZQUFZLGFBQWEscURBQXFELG1CQUFtQixrQkFBa0Isc0JBQXNCLFlBQVksY0FBYyxlQUFlLDRCQUE0QixVQUFVLDRCQUE0QixjQUFjLCtCQUErQixjQUFjLHNCQUFzQixtQkFBbUIsa0RBQWtELHdDQUF3QyxxQkFBcUIsZUFBZSxTQUFTLGNBQWMsb0VBQW9FLGNBQWMsZUFBZSxnQkFBZ0IseUJBQXlCLG1CQUFtQix5QkFBeUIsa0JBQWtCLHFDQUFxQyxjQUFjLG1CQUFtQiwrRUFBK0UsZUFBZSxtUEFBbVAseUJBQXlCLGVBQWUsaUJBQWlCLFlBQVksZUFBZSxzQ0FBc0Msa0JBQWtCLDBFQUEwRSxpQkFBaUIsNkVBQTZFLFlBQVksaUJBQWlCLG9IQUFvSCxZQUFZLHNCQUFzQixrQkFBa0IsZ0JBQWdCLGNBQWMsaURBQWlELGVBQWUsaUJBQWlCLHVEQUF1RCxxQkFBcUIsc0JBQXNCLGtCQUFrQixnQkFBZ0IsY0FBYyxxQkFBcUIsaUJBQWlCLGdCQUFnQixjQUFjLHNDQUFzQyxjQUFjLDZCQUE2QixZQUFZLHVCQUF1QixpQkFBaUIsY0FBYyxZQUFZLGtCQUFrQixhQUFhLDhCQUE4QixzQkFBc0Isa0JBQWtCLHdGQUF3RixVQUFVLHdCQUF3Qiw4QkFBOEIsZ0NBQWdDLFdBQVcsaURBQWlELFlBQVksc0lBQXNJLHdCQUF3QixTQUFTLHdIQUF3SCxhQUFhLHlCQUF5QixjQUFjLGVBQWUsa0JBQWtCLG1QQUFtUCxjQUFjLCtEQUErRCxjQUFjLGdFQUFnRSx5QkFBeUIsV0FBVyx1TEFBdUwsYUFBYSxlQUFlLHVCQUF1QixtQkFBbUIsU0FBUyxxQkFBcUIsVUFBVSx5QkFBeUIsc0JBQXNCLHFCQUFxQixpQkFBaUIsZ0JBQWdCLFlBQVksd0JBQXdCLGlCQUFpQixhQUFhLGNBQWMsZ0JBQWdCLGVBQWUsaUJBQWlCLFlBQVksaUJBQWlCLHNCQUFzQixrQkFBa0Isc0RBQXNELGlCQUFpQixjQUFjLHdFQUF3RSxjQUFjLHVCQUF1QixjQUFjLG1CQUFtQixjQUFjLG9CQUFvQixjQUFjLGVBQWUsOEJBQThCLEdBQUcsV0FBVywrQkFBK0IsS0FBSyxXQUFXLFdBQVcsa0JBQWtCLG1CQUFtQixnQkFBZ0Isa0JBQWtCLDRDQUE0QyxvQ0FBb0Msc0JBQXNCLFVBQVUseUJBQXlCLFdBQVcsYUFBYSxnQkFBZ0IsWUFBWSxjQUFjLG9CQUFvQixlQUFlLE1BQU0sUUFBUSxTQUFTLE9BQU8sY0FBYyxTQUFTLG1CQUFtQix1QkFBdUIsc0JBQXNCLGtCQUFrQixTQUFTLFdBQVcsVUFBVSxlQUFlLFlBQVksVUFBVSxlQUFlLGVBQWUsd0NBQXdDLGNBQWMsNEZBQTRGLGNBQWMsa0JBQWtCLGlCQUFpQixlQUFlLGNBQWMsaUJBQWlCLGtCQUFrQixjQUFjLGVBQWUscUJBQXFCLG1CQUFtQix1QkFBdUIsaUJBQWlCLDhCQUE4QixzQkFBc0IsbUJBQW1CLGtCQUFrQixvQ0FBb0MsbUJBQW1CLHVCQUF1QixzQ0FBc0MsbUJBQW1CLDBCQUEwQixxQ0FBcUMsNkJBQTZCLDBCQUEwQixzQ0FBc0MsOEJBQThCLGtDQUFrQyxHQUFHLHlDQUF5QyxpQ0FBaUMsVUFBVSxLQUFLLHFDQUFxQyw2QkFBNkIsV0FBVywwQkFBMEIsR0FBRyx5Q0FBeUMsaUNBQWlDLFVBQVUsS0FBSyxxQ0FBcUMsNkJBQTZCLFdBQVcsbUNBQW1DLEdBQUcscUNBQXFDLDZCQUE2QixVQUFVLEtBQUsseUNBQXlDLGlDQUFpQyxXQUFXLDJCQUEyQixHQUFHLHFDQUFxQyw2QkFBNkIsVUFBVSxLQUFLLHlDQUF5QyxpQ0FBaUMsV0FBVyxpQkFBaUIsa0JBQWtCLHFCQUFxQiw0QkFBNEIsYUFBYSwrQ0FBK0MsdUNBQXVDLGtCQUFrQix5QkFBeUIsOEJBQThCLHNCQUFzQixzQkFBc0Isa0NBQWtDLGlCQUFpQixlQUFlLDhCQUE4QixzQkFBc0Isa0NBQWtDLFNBQVMsVUFBVSwrQkFBK0IsZUFBZSxTQUFTLGlCQUFpQixlQUFlLGNBQWMsZUFBZSxnQkFBZ0IsbUJBQW1CLGdCQUFnQix1QkFBdUIsZ0ZBQWdGLHlCQUF5Qix1Q0FBdUMsZUFBZSwwQkFBMEIsa0RBQWtELG1CQUFtQiwwQ0FBMEMsa0JBQWtCLGFBQWEsa0JBQWtCLGVBQWUsV0FBVyxpREFBaUQscUJBQXFCLGFBQWEsWUFBWSxzQkFBc0IsZ0RBQWdELHNCQUFzQix3REFBd0Qsc0JBQXNCLGFBQWEscUJBQXFCLGtCQUFrQixjQUFjLGVBQWUsOEJBQThCLGNBQWMseUNBQXlDLFdBQVcsd0NBQXdDLGlCQUFpQixrQkFBa0Isa0JBQWtCLGlCQUFpQixnREFBZ0QsV0FBVyxrQkFBa0IsY0FBYyxVQUFVLFFBQVEsV0FBVyxPQUFPLGdDQUFnQyxtRUFBbUUsZ0NBQWdDLHdFQUF3RSxNQUFNLFNBQVMsMkRBQTJELGVBQWUsbUJBQW1CLGVBQWUsYUFBYSw0R0FBNEcsZ0JBQWdCLHdCQUF3QixtQkFBbUIsV0FBVyxrQkFBa0Isa0JBQWtCLE1BQU0sT0FBTyxXQUFXLGVBQWUsYUFBYSxzQkFBc0IseUJBQXlCLGtCQUFrQiwrQ0FBK0MsdUNBQXVDLHNDQUFzQyxlQUFlLGVBQWUsZUFBZSx3QkFBd0IsZ0JBQWdCLGlCQUFpQixTQUFTLGNBQWMsVUFBVSw4RUFBOEUseUJBQXlCLGNBQWMsMEJBQTBCLGlCQUFpQixpQ0FBaUMsa0JBQWtCLGVBQWUsNkJBQTZCLHdDQUF3QyxXQUFXLFdBQVcsY0FBYyxlQUFlLHNCQUFzQixvQ0FBb0MsZUFBZSxXQUFXLG9CQUFvQiwwQkFBMEIsY0FBYyxrREFBa0QsaUJBQWlCLGVBQWUsZUFBZSxrRkFBa0YsZUFBZSx5RkFBeUYsV0FBVyxlQUFlLHlCQUF5QixjQUFjLGlEQUFpRCxpQkFBaUIsZUFBZSxlQUFlLGlGQUFpRixlQUFlLHdGQUF3RixXQUFXLGVBQWUsd0JBQXdCLGNBQWMsZ0RBQWdELGlCQUFpQixlQUFlLGVBQWUsZ0ZBQWdGLGVBQWUsdUZBQXVGLFdBQVcsZUFBZSxTQUFTLCtCQUErQixnQkFBZ0Isa0JBQWtCLFNBQVMsZUFBZSxzQkFBc0IsZ0xBQWdMLHNCQUFzQixpQ0FBaUMsY0FBYyxhQUFhLDZMQUE2TCxhQUFhLGdCQUFnQixXQUFXLDZCQUE2QixnQ0FBZ0MscUJBQXFCLGtCQUFrQixtQ0FBbUMsV0FBVyxZQUFZLGlCQUFpQixTQUFTLG9DQUFvQyxjQUFjLGdGQUFnRixjQUFjLGlDQUFpQyxXQUFXLDhFQUE4RSxVQUFVLG9IQUFvSCxjQUFjLDhEQUE4RCxnQ0FBZ0MsY0FBYyxvREFBb0QsWUFBWSxpQkFBaUIsb0NBQW9DLGNBQWMseURBQXlELGdCQUFnQixzQkFBc0IsZ0JBQWdCLGdCQUFnQiw2Q0FBNkMsa0JBQWtCLDZGQUE2RixzQkFBc0IsV0FBVyxZQUFZLGlCQUFpQixlQUFlLGNBQWMsNkhBQTZILGNBQWMsc0hBQXNILFVBQVUsY0FBYyw2Q0FBNkMsZ0NBQWdDLGNBQWMsbUJBQW1CLFdBQVcsdUhBQXVILFNBQVMsc0JBQXNCLFdBQVcsa0JBQWtCLDZGQUE2RixTQUFTLFFBQVEsZ0JBQWdCLGtCQUFrQixxQkFBcUIsaUNBQWlDLFlBQVksaUJBQWlCLGdCQUFnQiw2Q0FBNkMsY0FBYyx3Q0FBd0MsZ0JBQWdCLHdDQUF3QyxrQkFBa0IsZ0JBQWdCLE1BQU0sVUFBVSxXQUFXLHlCQUF5QixrQkFBa0IsK0NBQStDLHVDQUF1QyxvRkFBb0YsdUJBQXVCLGVBQWUsZ0JBQWdCLFlBQVksZ0JBQWdCLFlBQVksY0FBYyxrQkFBa0IsK0NBQStDLHVDQUF1Qyw2QkFBNkIsZUFBZSw0QkFBNEIsZ0JBQWdCLGlCQUFpQixjQUFjLGNBQWMsbUVBQW1FLDJEQUEyRCw4QkFBOEIsc0JBQXNCLG1CQUFtQiwyQ0FBMkMsOEJBQThCLGtCQUFrQixtQkFBbUIsZ0JBQWdCLHNCQUFzQixnQkFBZ0IsY0FBYyx3Q0FBd0MsVUFBVSx5QkFBeUIsMEJBQTBCLFlBQVksbUJBQW1CLHlCQUF5QixnQ0FBZ0MsaUJBQWlCLFdBQVcsa0JBQWtCLGVBQWUsc0JBQXNCLHdCQUF3QixjQUFjLDBCQUEwQixjQUFjLFlBQVksZ0JBQWdCLFNBQVMsZUFBZSxtQkFBbUIsZUFBZSxjQUFjLGVBQWUsZUFBZSxtRUFBbUUsMkRBQTJELHNCQUFzQixxQkFBcUIsc0JBQXNCLHFCQUFxQixjQUFjLGtEQUFrRCxVQUFVLHlCQUF5QiwrQkFBK0IsWUFBWSxtQkFBbUIseUJBQXlCLHlCQUF5Qix5QkFBeUIscUJBQXFCLFlBQVksMEJBQTBCLFlBQVksaUJBQWlCLGVBQWUsZ0JBQWdCLHdCQUF3QixrQkFBa0IsUUFBUSxXQUFXLGdCQUFnQix5Q0FBeUMsaUNBQWlDLHlCQUF5QiwrQ0FBK0MsZUFBZSx5Q0FBeUMsNEJBQTRCLGlFQUFpRSxrQ0FBa0MsMEJBQTBCLGlGQUFpRixZQUFZLG1CQUFtQix5QkFBeUIsOEJBQThCLHNCQUFzQixpQkFBaUIsV0FBVyxrQkFBa0IsZUFBZSx1QkFBdUIsVUFBVSwyQkFBMkIsdUJBQXVCLG1CQUFtQixlQUFlLGNBQWMsd0NBQXdDLHFCQUFxQixjQUFjLHNCQUFzQiwyRUFBMkUsdUJBQXVCLGVBQWUsVUFBVSxnQkFBZ0IsWUFBWSxpQkFBaUIsa0JBQWtCLHFCQUFxQixVQUFVLHdCQUF3QixnQkFBZ0IseUJBQXlCLGdCQUFnQixjQUFjLGNBQWMsd0JBQXdCLGtCQUFrQixzQkFBc0IsVUFBVSxTQUFTLGVBQWUsMERBQTBELGtEQUFrRCxrQkFBa0IsZUFBZSxnQkFBZ0IsaUNBQWlDLGtCQUFrQiw4QkFBOEIsY0FBYywwQ0FBMEMsZUFBZSwrQ0FBK0MsZ0JBQWdCLHFEQUFxRCw4QkFBOEIsMEJBQTBCLGtDQUFrQywwQkFBMEIsNkJBQTZCLFVBQVUsVUFBVSxrQkFBa0IsV0FBVyw2REFBNkQsV0FBVyx5QkFBeUIscUJBQXFCLHNDQUFzQyw4QkFBOEIsOERBQThELGNBQWMsbUJBQW1CLHNCQUFzQixzQkFBc0IscUJBQXFCLHdCQUF3QixnQkFBZ0Isc0VBQXNFLHlCQUF5QixvREFBb0QsMEJBQTBCLGdFQUFnRSxrQkFBa0IsaURBQWlELGtCQUFrQixlQUFlLGdCQUFnQiwwREFBMEQsa0JBQWtCLGdEQUFnRCxpQkFBaUIsZUFBZSxnQkFBZ0IseURBQXlELGlCQUFpQiwrQ0FBK0MsaUJBQWlCLGVBQWUsZ0JBQWdCLHdEQUF3RCxpQkFBaUIscUVBQXFFLHVDQUF1QywrQkFBK0IsaUZBQWlGLCtDQUErQyxXQUFXLDJCQUEyQiwyQkFBMkIsb0JBQW9CLHlCQUF5QixzQkFBc0IsbUJBQW1CLGtCQUFrQixlQUFlLGlCQUFpQixZQUFZLHNCQUFzQixtQ0FBbUMscUJBQXFCLGVBQWUsaUZBQWlGLG1CQUFtQixrQkFBa0IsdUJBQXVCLGVBQWUsWUFBWSxlQUFlLGdCQUFnQixzQkFBc0IsY0FBYyw0QkFBNEIsY0FBYyx3QkFBd0Isa0JBQWtCLHlCQUF5QixpQkFBaUIsb0JBQW9CLGNBQWMsZUFBZSxxQkFBcUIsa0JBQWtCLGtCQUFrQixRQUFRLFNBQVMsVUFBVSxTQUFTLGlCQUFpQixTQUFTLGtCQUFrQixXQUFXLFlBQVkseUJBQXlCLFVBQVUsbUJBQW1CLDhCQUE4QixzQkFBc0IsbUJBQW1CLHlEQUF5RCxpREFBaUQsc0JBQXNCLG9DQUFvQywyQkFBMkIsY0FBYyx1QkFBdUIsYUFBYSxrQkFBa0IsUUFBUSxTQUFTLG1CQUFtQiwyQkFBMkIsbUJBQW1CLFdBQVcsWUFBWSxzQkFBc0IsdUNBQXVDLHFCQUFxQix5QkFBeUIsOENBQThDLFVBQVUsa0JBQWtCLHVCQUF1QixXQUFXLCtEQUErRCxVQUFVLGdFQUFnRSxXQUFXLGlFQUFpRSxVQUFVLG9CQUFvQixrQkFBa0IsYUFBYSx5QkFBeUIsa0JBQWtCLHNCQUFzQix1Q0FBdUMsOEJBQThCLHNCQUFzQixhQUFhLDBEQUEwRCxtQkFBbUIsbUVBQW1FLGNBQWMsc0JBQXNCLHlFQUF5RSx5QkFBeUIsMEVBQTBFLGtCQUFrQixXQUFXLDBCQUEwQixtQkFBbUIsZUFBZSxnQkFBZ0IsbUNBQW1DLGtDQUFrQyxxRUFBcUUsVUFBVSwyQkFBMkIsZUFBZSxTQUFTLGtCQUFrQixXQUFXLGVBQWUsMEJBQTBCLGlCQUFpQiwwQkFBMEIsZ0JBQWdCLGNBQWMsU0FBUyw4QkFBOEIsc0JBQXNCLDBCQUEwQixlQUFlLGVBQWUsa0JBQWtCLG1CQUFtQixnQkFBZ0IsdUJBQXVCLGNBQWMsWUFBWSxpQkFBaUIsOEJBQThCLHNCQUFzQixlQUFlLHNDQUFzQyxjQUFjLG1CQUFtQiw0Q0FBNEMsc0JBQXNCLGdFQUFnRSx5QkFBeUIsbUNBQW1DLGNBQWMsZ0JBQWdCLGlCQUFpQixTQUFTLFVBQVUsdUJBQXVCLGtCQUFrQixnQkFBZ0IsU0FBUyxVQUFVLDBDQUEwQyxvQkFBb0IsaURBQWlELFdBQVcsa0JBQWtCLGNBQWMsVUFBVSxXQUFXLFlBQVksV0FBVyxtQkFBbUIsd0JBQXdCLGtCQUFrQixlQUFlLGNBQWMsaUJBQWlCLDJDQUEyQyxrQkFBa0IsV0FBVyxxQkFBcUIsa0JBQWtCLGlDQUFpQyxpQkFBaUIsa0NBQWtDLHFCQUFxQiw0QkFBNEIsZUFBZSxtQkFBbUIsa0NBQWtDLHFCQUFxQix1Q0FBdUMsY0FBYyxlQUFlLHlDQUF5QyxpQ0FBaUMseUJBQXlCLCtDQUErQyxrQ0FBa0MsMEJBQTBCLGVBQWUsa0RBQWtELDZCQUE2QixxQkFBcUIscURBQXFELGVBQWUsa0JBQWtCLGtDQUFrQywwQkFBMEIsbUJBQW1CLGNBQWMsNERBQTRELG9EQUFvRCwyREFBMkQsY0FBYyxrREFBa0QsbUJBQW1CLHdEQUF3RCxxQkFBcUIsMkdBQTJHLHFCQUFxQixxQkFBcUIsY0FBYyxrQkFBa0IsWUFBWSxVQUFVLFVBQVUsaUJBQWlCLFdBQVcsZUFBZSx3QkFBd0IscUJBQXFCLGdCQUFnQixZQUFZLDZCQUE2QiwwQkFBMEIsWUFBWSxrQkFBa0IsZUFBZSxrQkFBa0IsUUFBUSxhQUFhLFdBQVcsY0FBYyxpQkFBaUIsZUFBZSx3QkFBd0IsY0FBYyxpQkFBaUIsa0JBQWtCLG1CQUFtQixtQkFBbUIsVUFBVSxRQUFRLG1DQUFtQywyQkFBMkIsb0JBQW9CLG9CQUFvQixhQUFhLHlCQUF5QixzQkFBc0IsbUJBQW1CLG1CQUFtQixlQUFlLHNCQUFzQixnQkFBZ0IsdUJBQXVCLG1CQUFtQiw4QkFBOEIsc0JBQXNCLHlCQUF5QixxQkFBcUIseUJBQXlCLG9CQUFvQixvQkFBb0IsYUFBYSxlQUFlLHlCQUF5QixzQkFBc0IsbUJBQW1CLHdDQUF3Qyx5QkFBeUIsTUFBTSxXQUFXLG9CQUFvQixjQUFjLDhDQUE4Qyx5QkFBeUIsbUNBQW1DLHNCQUFzQixnREFBZ0QsY0FBYyxvQ0FBb0MsNEJBQTRCLFVBQVUsa0JBQWtCLGdCQUFnQiw4QkFBOEIsc0JBQXNCLG1CQUFtQixXQUFXLE9BQU8sV0FBVyxlQUFlLGVBQWUsY0FBYyx1QkFBdUIsZ0JBQWdCLGtCQUFrQixXQUFXLG9CQUFvQixvQkFBb0IsYUFBYSx3QkFBd0IscUJBQXFCLHVCQUF1Qix5QkFBeUIsc0JBQXNCLG1CQUFtQixzQkFBc0IsaUJBQWlCLFVBQVUsY0FBYywrQkFBK0IsVUFBVSxrQkFBa0IsdUJBQXVCLGtCQUFrQixlQUFlLFdBQVcsZUFBZSxxREFBcUQsNkNBQTZDLHFDQUFxQyx1RUFBdUUsWUFBWSxpQ0FBaUMsZ0NBQWdDLHdCQUF3QixnQ0FBZ0Msa0JBQWtCLFNBQVMsUUFBUSxpQkFBaUIsZ0JBQWdCLHNDQUFzQyxrQkFBa0IsK0JBQStCLHVDQUF1Qyx1QkFBdUIscUJBQXFCLFdBQVcsMEJBQTBCLGdCQUFnQixlQUFlLGVBQWUsZ0JBQWdCLHNDQUFzQyx1QkFBdUIsZ0RBQWdELGdCQUFnQixnREFBZ0QsZ0JBQWdCLGdCQUFnQixjQUFjLGdCQUFnQiwyQ0FBMkMsbUJBQW1CLDBCQUEwQixlQUFlLFlBQVksOEJBQThCLHNCQUFzQix1QkFBdUIsc0JBQXNCLGtCQUFrQixnQkFBZ0Isb0NBQW9DLGtCQUFrQixtQ0FBbUMsaUJBQWlCLGlDQUFpQyxXQUFXLHFCQUFxQixzQkFBc0IsVUFBVSxzQ0FBc0Msa0JBQWtCLGtDQUFrQyxlQUFlLGlCQUFpQixlQUFlLGlDQUFpQyxjQUFjLGdCQUFnQixlQUFlLGdDQUFnQyxjQUFjLGFBQWEsc0JBQXNCLGtDQUFrQyxTQUFTLGdFQUFnRSxnQ0FBZ0Msd0NBQXdDLGVBQWUsNEJBQTRCLGdCQUFnQix5QkFBeUIsc0JBQXNCLHFCQUFxQixpQkFBaUIsc0JBQXNCLGtDQUFrQyxxQkFBcUIsOEJBQThCLHNCQUFzQixrQkFBa0Isc0JBQXNCLGtCQUFrQixtQkFBbUIsV0FBVyw0Q0FBNEMsY0FBYyxpREFBaUQscUJBQXFCLGFBQWEsVUFBVSxXQUFXLGtCQUFrQixtQkFBbUIsaUJBQWlCLHNCQUFzQixnQ0FBZ0MsOEJBQThCLHNCQUFzQixtREFBbUQsOEJBQThCLG1DQUFtQyxRQUFRLGdCQUFnQixzQkFBc0IsZ0JBQWdCLHVCQUF1QixtQkFBbUIscUJBQXFCLGlCQUFpQixrQkFBa0IsbUJBQW1CLDJCQUEyQixtQkFBbUIsZUFBZSxtQ0FBbUMseUJBQXlCLG1FQUFtRSxXQUFXLGtCQUFrQix5QkFBeUIsVUFBVSxpREFBaUQsTUFBTSxRQUFRLFVBQVUsWUFBWSxrQkFBa0IsT0FBTyxTQUFTLFdBQVcsV0FBVyxrQkFBa0Isa0JBQWtCLG1CQUFtQiw4Q0FBOEMseUJBQXlCLCtHQUErRywrQkFBK0Isb0RBQW9ELGtCQUFrQix3REFBd0QsZ0NBQWdDLHdCQUF3QixpRUFBaUUsZ0NBQWdDLGtCQUFrQixrQkFBa0Isd0NBQXdDLGtCQUFrQixNQUFNLE9BQU8sa0JBQWtCLGtCQUFrQiw0Q0FBNEMsb0NBQW9DLHdEQUF3RCxXQUFXLGtCQUFrQixPQUFPLFNBQVMsV0FBVyxXQUFXLHlCQUF5QixVQUFVLDZCQUE2QixrQkFBa0IsU0FBUyxRQUFRLHNCQUFzQix1QkFBdUIsTUFBTSxVQUFVLFFBQVEsbUtBQW1LLFVBQVUsUUFBUSxnQ0FBZ0Msa0JBQWtCLE9BQU8sTUFBTSxVQUFVLGdDQUFnQyxrQkFBa0IsT0FBTyxTQUFTLFVBQVUsd0RBQXdELDZCQUE2Qix5QkFBeUIsY0FBYyw4QkFBOEIsa0JBQWtCLE9BQU8sU0FBUyxnQkFBZ0IsVUFBVSw0RUFBNEUsV0FBVywwQkFBMEIsZ0JBQWdCLDRDQUE0Qyw2QkFBNkIsb0RBQW9ELG1CQUFtQix5QkFBeUIsb0RBQW9ELGdCQUFnQixvR0FBb0cseUJBQXlCLGNBQWMsd0JBQXdCLGdCQUFnQixrQkFBa0IseVBBQXlQLHdCQUF3QixnQkFBZ0Isb0ZBQW9GLDhCQUE4Qix5QkFBeUIsMkJBQTJCLDJCQUEyQixvQkFBb0IsNEJBQTRCLDZCQUE2QiwwQkFBMEIsc0JBQXNCLHlCQUF5QixzQkFBc0IsbUJBQW1CLFlBQVksV0FBVyxzQkFBc0IsZUFBZSxpQkFBaUIsa0JBQWtCLHNCQUFzQixRQUFRLFNBQVMsNkJBQTZCLGtCQUFrQixTQUFTLGdDQUFnQyw0QkFBNEIsUUFBUSxpQ0FBaUMseUJBQXlCLFdBQVcsMkNBQTJDLDRCQUE0Qiw2Q0FBNkMseUJBQXlCLDBCQUEwQixrQkFBa0Isa0JBQWtCLFdBQVcsK0VBQStFLG1CQUFtQix3TEFBd0wseUJBQXlCLG1aQUFtWix5QkFBeUIsb0dBQW9HLHlCQUF5QiwrQkFBK0Isa0JBQWtCLFdBQVcsTUFBTSxTQUFTLFFBQVEsOEJBQThCLFdBQVcsaUNBQWlDLHFCQUFxQixpQkFBaUIsZUFBZSxtQ0FBbUMsY0FBYyxlQUFlLDZCQUE2QixxQkFBcUIsbUVBQW1FLDhDQUE4QyxzQ0FBc0MsdUVBQXVFLHlCQUF5Qix3RkFBd0YsU0FBUyxnQkFBZ0IsK0RBQStELHFCQUFxQixXQUFXLGlCQUFpQixZQUFZLGtCQUFrQixpQkFBaUIsa0NBQWtDLGtCQUFrQixtQkFBbUIsaUJBQWlCLHlCQUF5QixrQkFBa0Isc0JBQXNCLHVDQUF1QyxzQkFBc0IsYUFBYSx1QkFBdUIsY0FBYyxTQUFTLGdCQUFnQixnQkFBZ0IsNEJBQTRCLGlCQUFpQixlQUFlLGVBQWUsZUFBZSxrQ0FBa0MseUJBQXlCLGNBQWMsc0NBQXNDLHlCQUF5QixXQUFXLDBCQUEwQixnQkFBZ0IseUJBQXlCLDZCQUE2QixZQUFZLGdDQUFnQyxlQUFlLFlBQVksY0FBYyxlQUFlLGVBQWUsY0FBYywwTEFBMEwseUJBQXlCLHNDQUFzQyxjQUFjLHNDQUFzQyxVQUFVLDRDQUE0QyxjQUFjLG1CQUFtQix1QkFBdUIsaUJBQWlCLGlDQUFpQyxhQUFhLG1EQUFtRCxjQUFjLGlCQUFpQixrQkFBa0IsZ0JBQWdCLHlEQUF5RCxnQkFBZ0IsZUFBZSxlQUFlLHlCQUF5QixzQkFBc0IscUJBQXFCLGlCQUFpQix5RUFBeUUsY0FBYyx5RUFBeUUsZ0JBQWdCLDRCQUE0QiwrQkFBK0Isd0VBQXdFLGlCQUFpQiw2QkFBNkIsZ0NBQWdDLGtCQUFrQixXQUFXLFlBQVksY0FBYyxzQkFBc0Isa0JBQWtCLGVBQWUsa0JBQWtCLHNCQUFzQixZQUFZLGNBQWMsOEJBQThCLHNCQUFzQix1QkFBdUIsV0FBVyxZQUFZLGNBQWMsY0FBYyxpQkFBaUIsa0JBQWtCLFNBQVMsbUNBQW1DLDJCQUEyQixrQkFBa0IsMERBQTBELGNBQWMsd0JBQXdCLGtCQUFrQiw2QkFBNkIsY0FBYyxnQkFBZ0IsOEVBQThFLFdBQVcsa0NBQWtDLGNBQWMsOENBQThDLFdBQVcseUJBQXlCLGdFQUFnRSxXQUFXLGtFQUFrRSx5QkFBeUIsaUNBQWlDLGdCQUFnQiw0QkFBNEIsK0JBQStCLCtCQUErQixpQkFBaUIsNkJBQTZCLGdDQUFnQywrQkFBK0IseUJBQXlCLFVBQVUsbUJBQW1CLGNBQWMsK0JBQStCLGdCQUFnQixpQkFBaUIseUJBQXlCLG1CQUFtQixxQ0FBcUMseUJBQXlCLGdDQUFnQyx5QkFBeUIsV0FBVyxtQkFBbUIsdUJBQXVCLGNBQWMsY0FBYywrQkFBK0IsZUFBZSx5QkFBeUIsa0JBQWtCLFlBQVksY0FBYyxnQkFBZ0IsZ0NBQWdDLGdCQUFnQixZQUFZLG1CQUFtQixrQkFBa0IsY0FBYyxlQUFlLHVCQUF1QixZQUFZLGNBQWMsOEJBQThCLHNCQUFzQiwrQkFBK0IsY0FBYyxnQkFBZ0Isa0ZBQWtGLFdBQVcsa0NBQWtDLHlCQUF5QixtQkFBbUIsY0FBYyx3Q0FBd0MsY0FBYyx5QkFBeUIsV0FBVyxZQUFZLGNBQWMsaUJBQWlCLGNBQWMsY0FBYyxtQkFBbUIsK0JBQStCLGNBQWMsc0VBQXNFLHlCQUF5QixrRUFBa0UsV0FBVyxzRUFBc0UsV0FBVyx5QkFBeUIsa0NBQWtDLDRCQUE0QiwrQkFBK0IsZ0NBQWdDLDZCQUE2QixnQ0FBZ0MsZ0RBQWdELGNBQWMsZUFBZSxZQUFZLHdCQUF3QixjQUFjLGtCQUFrQixrQkFBa0IsaUJBQWlCLGVBQWUsOEJBQThCLGNBQWMsZ0JBQWdCLGlDQUFpQyx5QkFBeUIsbUJBQW1CLGNBQWMsdUNBQXVDLGNBQWMsd0JBQXdCLFdBQVcsWUFBWSxjQUFjLGlCQUFpQixjQUFjLGNBQWMsNkVBQTZFLGNBQWMsc0JBQXNCLFlBQVksa0NBQWtDLFlBQVksNEJBQTRCLG1CQUFtQixXQUFXLDZDQUE2QyxnQkFBZ0IsZ0RBQWdELFNBQVMsOEJBQThCLGtCQUFrQixrQkFBa0IsWUFBWSxrREFBa0QsV0FBVyxtREFBbUQsWUFBWSxrQ0FBa0MsZUFBZSxnQkFBZ0Isa0JBQWtCLCtCQUErQixXQUFXLFVBQVUsOEJBQThCLHNCQUFzQixTQUFTLGFBQWEsdUNBQXVDLCtCQUErQixpRUFBaUUsaUJBQWlCLGtCQUFrQixvQ0FBb0MsOEJBQThCLHNCQUFzQixtQkFBbUIsNkNBQTZDLGlCQUFpQixtQ0FBbUMsa0JBQWtCLGdDQUFnQyxlQUFlLG9CQUFvQixjQUFjLFdBQVcsOEJBQThCLHNCQUFzQix3REFBd0QsZUFBZSxzQkFBc0IsbUJBQW1CLGNBQWMsd0NBQXdDLGtCQUFrQixtQkFBbUIsY0FBYyx5REFBeUQsa0JBQWtCLFNBQVMsUUFBUSxVQUFVLGdCQUFnQixnQkFBZ0IsWUFBWSxxQ0FBcUMsWUFBWSw0QkFBNEIsWUFBWSx3REFBd0Qsa0JBQWtCLDBDQUEwQyxZQUFZLHNCQUFzQixtQkFBbUIsV0FBVyw2QkFBNkIsa0JBQWtCLG1CQUFtQixjQUFjLDZCQUE2QixrQkFBa0IsZ0NBQWdDLGVBQWUsb0JBQW9CLGNBQWMsV0FBVyw4QkFBOEIsc0JBQXNCLHdCQUF3QixZQUFZLGtCQUFrQixrQ0FBa0MsZ0JBQWdCLG9CQUFvQixnQ0FBZ0MsNERBQTRELGFBQWEsOEJBQThCLGVBQWUsZ0JBQWdCLGNBQWMsaUJBQWlCLGtCQUFrQixlQUFlLGNBQWMseUVBQXlFLGNBQWMsMEJBQTBCLFdBQVcsMEJBQTBCLFlBQVksMkJBQTJCLGFBQWEsa0JBQWtCLDRCQUE0QixXQUFXLGVBQWUsaUJBQWlCLGlCQUFpQixhQUFhLGFBQWEsWUFBWSx1Q0FBdUMsaUJBQWlCLFNBQVMsa0JBQWtCLGlCQUFpQixlQUFlLGlCQUFpQiwwQ0FBMEMsY0FBYyxnQkFBZ0IsMkJBQTJCLGNBQWMsbUJBQW1CLHdCQUF3Qix5QkFBeUIsZ0JBQWdCLGVBQWUsZ0JBQWdCLGtCQUFrQixxQkFBcUIsZ0JBQWdCLHlEQUF5RCxZQUFZLGlGQUFpRixZQUFZLDhKQUE4SixZQUFZLHVGQUF1RixZQUFZLHdDQUF3Qyx1QkFBdUIsbUJBQW1CLHNDQUFzQyxlQUFlLGdDQUFnQyxlQUFlLGlCQUFpQixjQUFjLFdBQVcsaUJBQWlCLGdDQUFnQyx3QkFBd0IscUJBQXFCLGdCQUFnQixZQUFZLFVBQVUscUJBQXFCLFlBQVksU0FBUyxVQUFVLFVBQVUsa0JBQWtCLGVBQWUsY0FBYywyREFBMkQsY0FBYyxzREFBc0QsY0FBYyx1REFBdUQsY0FBYyw2Q0FBNkMsY0FBYyxvQ0FBb0MscUJBQXFCLFlBQVksY0FBYyxTQUFTLGtCQUFrQixpQkFBaUIsZUFBZSxTQUFTLGNBQWMsc0NBQXNDLGVBQWUsY0FBYyxXQUFXLHFCQUFxQixZQUFZLGlCQUFpQixpQ0FBaUMsMkJBQTJCLDJCQUEyQixvQkFBb0IseUJBQXlCLHNCQUFzQixtQkFBbUIsaUJBQWlCLGlDQUFpQyxjQUFjLHlDQUF5QyxZQUFZLDZDQUE2QyxpQkFBaUIsZUFBZSx5Q0FBeUMsZUFBZSx3RkFBd0YsaUJBQWlCLHdDQUF3QyxZQUFZLDRDQUE0QyxpQkFBaUIsZUFBZSx3Q0FBd0MsZUFBZSxzRkFBc0YsaUJBQWlCLHVDQUF1QyxZQUFZLDJDQUEyQyxpQkFBaUIsZUFBZSx1Q0FBdUMsZUFBZSxvRkFBb0YsaUJBQWlCLDZCQUE2Qix5QkFBeUIscUJBQXFCLGNBQWMsbUJBQW1CLHNFQUFzRSxxQkFBcUIsbUNBQW1DLHlCQUF5QixjQUFjLG1CQUFtQiw4REFBOEQsY0FBYyx5REFBeUQsY0FBYywwREFBMEQsY0FBYyxnREFBZ0QsY0FBYyxpREFBaUQsY0FBYyxpQkFBaUIsY0FBYyx5QkFBeUIsdUNBQXVDLGdCQUFnQixrQkFBa0IsaUJBQWlCLGFBQWEsb0VBQW9FLGFBQWEsY0FBYyxXQUFXLDBCQUEwQixrQkFBa0IsWUFBWSx5QkFBeUIsNkJBQTZCLFlBQVksaUJBQWlCLHNCQUFzQixrQkFBa0IsWUFBWSwyQkFBMkIsY0FBYyxXQUFXLFNBQVMsNkJBQTZCLGlCQUFpQixlQUFlLGNBQWMsa0JBQWtCLGdCQUFnQixVQUFVLGVBQWUsaUNBQWlDLGNBQWMsa0NBQWtDLHlCQUF5QixjQUFjLHNCQUFzQix5QkFBeUIsV0FBVyxpQkFBaUIsa0JBQWtCLGVBQWUsZUFBZSw2QkFBNkIsVUFBVSxlQUFlLGdDQUFnQyxXQUFXLG1CQUFtQiwyQkFBMkIsZUFBZSxjQUFjLFNBQVMsZUFBZSxlQUFlLFVBQVUsZUFBZSxpQ0FBaUMsY0FBYyx1Q0FBdUMsV0FBVyw2Q0FBNkMsbUJBQW1CLDJCQUEyQixzQkFBc0IsMERBQTBELGtCQUFrQixNQUFNLFNBQVMsWUFBWSwrQkFBK0IsOEJBQThCLHNCQUFzQixnQkFBZ0Isc0JBQXNCLGNBQWMsd0dBQXdHLGtCQUFrQix1REFBdUQsWUFBWSwwQkFBMEIsaUJBQWlCLGNBQWMscUJBQXFCLFVBQVUsbUJBQW1CLGtCQUFrQix1RkFBdUYsb0JBQW9CLHlFQUF5RSxVQUFVLGtCQUFrQixtQ0FBbUMsOEJBQThCLHNCQUFzQixrQkFBa0IsZ0JBQWdCLDBEQUEwRCxvQ0FBb0MsNEJBQTRCLDRGQUE0RixnQkFBZ0IsZUFBZSx3QkFBd0IsZUFBZSxjQUFjLGtCQUFrQixPQUFPLFdBQVcsVUFBVSxrQkFBa0IsWUFBWSxpQkFBaUIsZUFBZSw4QkFBOEIsY0FBYyx5Q0FBeUMsU0FBUywyQ0FBMkMsWUFBWSxpQ0FBaUMsVUFBVSx1QkFBdUIsU0FBUyxnQkFBZ0IsNkRBQTZELFdBQVcsY0FBYyxXQUFXLFlBQVksdUJBQXVCLFlBQVksaUJBQWlCLGVBQWUsY0FBYyx5REFBeUQsbUJBQW1CLGVBQWUsNkNBQTZDLGNBQWMsZ0JBQWdCLGdDQUFnQyxjQUFjLG1CQUFtQixlQUFlLGFBQWEseUJBQXlCLHNCQUFzQix1Q0FBdUMsa0JBQWtCLGtCQUFrQixZQUFZLE9BQU8sYUFBYSx5QkFBeUIsc0JBQXNCLHFCQUFxQixpQkFBaUIsK0JBQStCLHVCQUF1Qix3QkFBd0IsWUFBWSxrQkFBa0IsZ0JBQWdCLCtEQUErRCxhQUFhLFFBQVEsa0JBQWtCLGlCQUFpQixZQUFZLFdBQVcsT0FBTyxRQUFRLDhCQUE4QixzQkFBc0IsZ0JBQWdCLGdCQUFnQiw2QkFBNkIsZ0NBQWdDLCtCQUErQixTQUFTLGdCQUFnQixpQkFBaUIsZ0NBQWdDLGlCQUFpQixpQkFBaUIsZ0JBQWdCLDJDQUEyQyx3QkFBd0IsNENBQTRDLDRCQUE0Qix1QkFBdUIsNkJBQTZCLFlBQVksWUFBWSxpQkFBaUIsaUJBQWlCLDhCQUE4QixzQkFBc0Isb0JBQW9CLFlBQVksaUJBQWlCLGNBQWMsYUFBYSxlQUFlLDZCQUE2QixVQUFVLGVBQWUsY0FBYyw0QkFBNEIsZ0JBQWdCLGNBQWMsc0JBQXNCLFlBQVksaUJBQWlCLCtCQUErQixrQkFBa0Isa0JBQWtCLGFBQWEsNEJBQTRCLDhCQUE4QixzQkFBc0IsU0FBUyxvQkFBb0IsVUFBVSxxQkFBcUIsOEJBQThCLGtCQUFrQixrQkFBa0IsZUFBZSw0QkFBNEIsa0JBQWtCLHlCQUF5QixZQUFZLGtCQUFrQixnQkFBZ0IsZ0JBQWdCLGtCQUFrQix5QkFBeUIsYUFBYSxhQUFhLGNBQWMsZ0JBQWdCLG1CQUFtQixlQUFlLHVDQUF1QyxxQkFBcUIsd0tBQXdLLCtDQUErQyxtQkFBbUIsa0JBQWtCLG1CQUFtQixjQUFjLGVBQWUsY0FBYyxtQkFBbUIsMEhBQTBILGdCQUFnQixlQUFlLHNDQUFzQyw4QkFBOEIsZUFBZSxnREFBZ0Qsd0NBQXdDLHNCQUFzQixHQUFHLFdBQVcsdUJBQXVCLEtBQUssV0FBVyxTQUFTLGVBQWUsT0FBTyxNQUFNLFdBQVcsWUFBWSxXQUFXLGdCQUFnQix5QkFBeUIsZ0JBQWdCLGdCQUFnQixxQkFBcUIsWUFBWSxvQkFBb0Isc0JBQXNCLHNCQUFzQixrQkFBa0IseUJBQXlCLGVBQWUsdUNBQXVDLGdCQUFnQixnQkFBZ0IsbUNBQW1DLDJCQUEyQix5QkFBeUIsZUFBZSxNQUFNLFNBQVMsT0FBTyxRQUFRLGtCQUFrQixnQ0FBZ0MsYUFBYSxxQkFBcUIsWUFBWSxRQUFRLHNCQUFzQix3QkFBd0Isa0JBQWtCLHVCQUF1Qix1QkFBdUIsZUFBZSxnQkFBZ0IsZUFBZSxjQUFjLGNBQWMsMkJBQTJCLGtCQUFrQixTQUFTLFdBQVcsVUFBVSxZQUFZLFVBQVUsZUFBZSxlQUFlLGVBQWUsa1FBQWtRLHFCQUFxQixrREFBa0QsY0FBYyxnSEFBZ0gsY0FBYyx5QkFBeUIsa0JBQWtCLGNBQWMsZUFBZSwyQkFBMkIsa0JBQWtCLHVCQUF1QixpQkFBaUIsd0JBQXdCLGtCQUFrQixRQUFRLG1DQUFtQywyQkFBMkIseUJBQXlCLGdDQUFnQyxpQkFBaUIsaURBQWlELGtCQUFrQixtQkFBbUIsd0NBQXdDLGNBQWMscUNBQXFDLGNBQWMsd0NBQXdDLGNBQWMsc0NBQXNDLGNBQWMseUJBQXlCLFNBQVMsMkJBQTJCLFNBQVMsaUJBQWlCLDBCQUEwQixjQUFjLGVBQWUsZ0JBQWdCLGVBQWUsc0JBQXNCLG1CQUFtQixpQkFBaUIsMENBQTBDLGlCQUFpQiw4QkFBOEIsOEJBQThCLDhCQUE4QiwrQkFBK0IsMkJBQTJCLHdCQUF3QixvQkFBb0IsZ0RBQWdELGlCQUFpQiwrQ0FBK0Msa0JBQWtCLG9CQUFvQixvQkFBb0IsYUFBYSx5QkFBeUIsc0JBQXNCLG1CQUFtQix3QkFBd0IscUJBQXFCLHVCQUF1QixnREFBZ0Qsa0JBQWtCLFNBQVMsa0JBQWtCLGtCQUFrQixtQ0FBbUMsMkJBQTJCLGlEQUFpRCxjQUFjLCtGQUErRixrQkFBa0IsaURBQWlELGtCQUFrQixtQkFBbUIsMEJBQTBCLHFDQUFxQyw2QkFBNkIsMEJBQTBCLHNDQUFzQyw4QkFBOEIsa0NBQWtDLEdBQUcseUNBQXlDLGlDQUFpQyxVQUFVLEtBQUsscUNBQXFDLDZCQUE2QixXQUFXLDBCQUEwQixHQUFHLHlDQUF5QyxpQ0FBaUMsVUFBVSxLQUFLLHFDQUFxQyw2QkFBNkIsV0FBVyxtQ0FBbUMsR0FBRyxxQ0FBcUMsNkJBQTZCLFVBQVUsS0FBSyx5Q0FBeUMsaUNBQWlDLFdBQVcsMkJBQTJCLEdBQUcscUNBQXFDLDZCQUE2QixVQUFVLEtBQUsseUNBQXlDLGlDQUFpQyxXQUFXLGVBQWUsZUFBZSxjQUFjLDZDQUE2QyxjQUFjLGFBQWEsc0JBQXNCLFdBQVcsMEJBQTBCLGFBQWEsZ0JBQWdCLGNBQWMsdUNBQXVDLGFBQWEsZ0JBQWdCLHFCQUFxQixXQUFXLHNCQUFzQixjQUFjLHNEQUFzRCxnQkFBZ0IscUJBQXFCLDREQUE0RCxvREFBb0QsY0FBYyxrRUFBa0UsY0FBYyxlQUFlLHdPQUF3TyxnQkFBZ0IsY0FBYyxZQUFZLDBDQUEwQyxnQkFBZ0IseUNBQXlDLFdBQVcscUJBQXFCLGdCQUFnQixpQkFBaUIsK0JBQStCLHFCQUFxQixrQkFBa0IsbUJBQW1CLHNDQUFzQyxXQUFXLHFCQUFxQix3Q0FBd0MscUJBQXFCLG1CQUFtQiwyREFBMkQsY0FBYyxjQUFjLG1CQUFtQiwyQ0FBMkMsY0FBYyxhQUFhLHFCQUFxQixXQUFXLDRCQUE0QixnQkFBZ0IsbUVBQW1FLG1CQUFtQixzQ0FBc0MsYUFBYSx3RkFBd0YsaUJBQWlCLHNGQUFzRixpQkFBaUIsMENBQTBDLGdCQUFnQixvRkFBb0YsaUJBQWlCLHlDQUF5QyxnQkFBZ0IsMEJBQTBCLFdBQVcsK0NBQStDLHFCQUFxQixXQUFXLHFCQUFxQixpQkFBaUIsc0JBQXNCLFdBQVcsZUFBZSxjQUFjLGlCQUFpQixtQkFBbUIsOEJBQThCLHNCQUFzQix1QkFBdUIsaUJBQWlCLGtCQUFrQixlQUFlLDZEQUE2RCxjQUFjLGFBQWEsOEJBQThCLFdBQVcsdUNBQXVDLG1CQUFtQixxQkFBcUIsY0FBYyxlQUFlLGNBQWMsZ0JBQWdCLGtCQUFrQixTQUFTLE9BQU8sNkJBQTZCLGtCQUFrQixTQUFTLFVBQVUscUJBQXFCLGlCQUFpQixnTEFBZ0wsWUFBWSxjQUFjLGlCQUFpQixpSUFBaUkseUJBQXlCLCtDQUErQyxjQUFjLGdEQUFnRCxxQkFBcUIsaUJBQWlCLFVBQVUsa0JBQWtCLGdCQUFnQixxQkFBcUIsa0JBQWtCLFNBQVMsT0FBTyxXQUFXLHlCQUF5QixVQUFVLHdFQUF3RSxnRUFBZ0Usd0RBQXdELDZHQUE2RyxnQkFBZ0Isa0JBQWtCLFlBQVkseUJBQXlCLFlBQVksV0FBVyxpQkFBaUIsdUJBQXVCLGtCQUFrQixrQkFBa0IsZUFBZSxjQUFjLGVBQWUsNEJBQTRCLG9CQUFvQixnQ0FBZ0MsK0JBQStCLHVCQUF1Qix3QkFBd0IsY0FBYyxtQkFBbUIsZ0JBQWdCLG1CQUFtQixrQkFBa0IsMEJBQTBCLGFBQWEsa0JBQWtCLE9BQU8sU0FBUyxXQUFXLFdBQVcseUJBQXlCLFVBQVUsaUNBQWlDLGVBQWUsOEJBQThCLHNCQUFzQixxQkFBcUIsZ0JBQWdCLHNDQUFzQyxrQkFBa0IsZUFBZSxpQkFBaUIsZUFBZSxjQUFjLG1CQUFtQixRQUFRLG1CQUFtQixPQUFPLGNBQWMsbUJBQW1CLGtCQUFrQix5Q0FBeUMsaUNBQWlDLHlCQUF5QiwrQ0FBK0MsV0FBVyxVQUFVLHlCQUF5QixlQUFlLG9CQUFvQixvQkFBb0IsYUFBYSwyQkFBMkIsbUJBQW1CLFdBQVcsT0FBTyxrQkFBa0IsZUFBZSxlQUFlLFlBQVksOEJBQThCLHNCQUFzQixpQkFBaUIscUJBQXFCLGdCQUFnQixlQUFlLGdCQUFnQixjQUFjLGtCQUFrQixpREFBaUQsVUFBVSxxREFBcUQsNkNBQTZDLHFDQUFxQyxrQkFBa0IsOEJBQThCLGtCQUFrQixrQkFBa0IsMERBQTBELGtEQUFrRCxnQkFBZ0IscUNBQXFDLDRCQUE0QixvQkFBb0IscUJBQXFCLDJLQUEySyxhQUFhLG9DQUFvQyx5QkFBeUIsV0FBVyx5QkFBeUIsY0FBYyxxQkFBcUIsY0FBYyxlQUFlLDJCQUEyQixjQUFjLGVBQWUsa0JBQWtCLGdCQUFnQixrQkFBa0IsZ0NBQWdDLGdDQUFnQywwREFBMEQsYUFBYSw4Q0FBOEMseUJBQXlCLG1CQUFtQiwwQkFBMEIsOEJBQThCLHNCQUFzQiw4REFBOEQsa0JBQWtCLGVBQWUsUUFBUSxZQUFZLHNCQUFzQixpQkFBaUIsZ0JBQWdCLFNBQVMsV0FBVyxrQ0FBa0MsMEJBQTBCLCtDQUErQyxvQ0FBb0MsOEJBQThCLHVHQUF1RywrRkFBK0YsMkRBQTJELGlCQUFpQixpRUFBaUUsa0JBQWtCLG1CQUFtQixnRkFBZ0YsV0FBVyx5REFBeUQseUJBQXlCLHFFQUFxRSxrQkFBa0IsbUJBQW1CLG9GQUFvRixXQUFXLHNCQUFzQixnQkFBZ0IseUJBQXlCLHlFQUF5RSxpRUFBaUUsd0NBQXdDLGFBQWEsdUNBQXVDLHlCQUF5QixnQ0FBZ0MsU0FBUyxpRUFBaUUsYUFBYSxzREFBc0QsMERBQTBELGtEQUFrRCw2QkFBNkIsZ0JBQWdCLGNBQWMsdUlBQXVJLGlCQUFpQixrR0FBa0csY0FBYyxnRUFBZ0UsY0FBYyxzQkFBc0IsMkJBQTJCLDBCQUEwQiw4RUFBOEUsY0FBYyxrRUFBa0UsY0FBYyxnTkFBZ04sZUFBZSx3TUFBd00sZ0JBQWdCLHVvQkFBdW9CLG1CQUFtQix3bUJBQXdtQixrQkFBa0IsNENBQTRDLGdCQUFnQixnQkFBZ0IsaUVBQWlFLGdCQUFnQiw2QkFBNkIsbUVBQW1FLGdCQUFnQixnQkFBZ0IsK0VBQStFLDZCQUE2QiwrREFBK0QsbUJBQW1CLCtCQUErQixnQkFBZ0IseVpBQXlaLFlBQVksb0xBQW9MLE1BQU0sWUFBWSxVQUFVLFlBQVksNEtBQTRLLGdCQUFnQixnZkFBZ2YsWUFBWSxpQkFBaUIsV0FBVyxrQkFBa0IsZUFBZSxnZ0JBQWdnQixpQ0FBaUMseUJBQXlCLHdQQUF3UCxVQUFVLE1BQU0sd1BBQXdQLFdBQVcsU0FBUyw2RkFBNkYsUUFBUSxVQUFVLG9PQUFvTyxlQUFlLHdNQUF3TSxZQUFZLFVBQVUsWUFBWSxNQUFNLHdKQUF3SixXQUFXLDRKQUE0SixjQUFjLHdDQUF3QyxXQUFXLGdCQUFnQixrQkFBa0IsdUZBQXVGLGtCQUFrQixzQ0FBc0MsaUJBQWlCLG9EQUFvRCxpQkFBaUIsK0JBQStCLG1CQUFtQiw2QkFBNkIsZ0JBQWdCLGdFQUFnRSwrQkFBK0IsZ0JBQWdCLDhEQUE4RCx5QkFBeUIsd0JBQXdCLGlCQUFpQixtQkFBbUIsMEVBQTBFLGdCQUFnQix5RUFBeUUsbUJBQW1CLDJDQUEyQywwQkFBMEIsZ0NBQWdDLGtCQUFrQiwrQ0FBK0MsV0FBVyw2REFBNkQsK0JBQStCLDJEQUEyRCw2QkFBNkIsd0JBQXdCLHFFQUFxRSxpQ0FBaUMsMENBQTBDLFlBQVksZ0JBQWdCLGlCQUFpQiw0Q0FBNEMsaUJBQWlCLG1EQUFtRCxPQUFPLFdBQVcsOENBQThDLE9BQU8sc0RBQXNELG1CQUFtQiw2QkFBNkIsa0VBQWtFLDhCQUE4QixnQkFBZ0IsZ0VBQWdFLHlCQUF5Qix1QkFBdUIsa0JBQWtCLG1CQUFtQiw0RUFBNEUsZ0JBQWdCLDJFQUEyRSxtQkFBbUIsNENBQTRDLDBCQUEwQixnQ0FBZ0MsaUJBQWlCLCtEQUErRCw4QkFBOEIsNkRBQTZELDZCQUE2Qix3QkFBd0IsdUVBQXVFLGlDQUFpQyxpREFBaUQscUJBQXFCLG9CQUFvQix5Q0FBeUMsaUNBQWlDLG9CQUFvQixrQkFBa0IsT0FBTyxRQUFRLHlDQUF5QyxpQ0FBaUMsbUJBQW1CLHdDQUF3QyxnQ0FBZ0MsbUJBQW1CLGtCQUFrQixPQUFPLFFBQVEsd0NBQXdDLGdDQUFnQyxzQ0FBc0MsR0FBRyxVQUFVLDZCQUE2QixxQkFBcUIsbUNBQW1DLDJCQUEyQixHQUFHLFVBQVUsNkJBQTZCLHFCQUFxQixnQ0FBZ0MseUJBQXlCLDhCQUE4QixHQUFHLFVBQVUsNkJBQTZCLHFCQUFxQixtQ0FBbUMsMkJBQTJCLEdBQUcsVUFBVSw2QkFBNkIscUJBQXFCLGdDQUFnQyx5QkFBeUIsc0NBQXNDLEdBQUcsNkJBQTZCLHFCQUFxQixnQ0FBZ0Msd0JBQXdCLFVBQVUsS0FBSyw2QkFBNkIscUJBQXFCLG1DQUFtQywyQkFBMkIsV0FBVyw4QkFBOEIsR0FBRyw2QkFBNkIscUJBQXFCLGdDQUFnQyx3QkFBd0IsVUFBVSxLQUFLLDZCQUE2QixxQkFBcUIsbUNBQW1DLDJCQUEyQixXQUFXLHFDQUFxQyxHQUFHLFVBQVUsNkJBQTZCLHFCQUFxQixvQ0FBb0MsNEJBQTRCLEdBQUcsVUFBVSw2QkFBNkIscUJBQXFCLGdDQUFnQyx5QkFBeUIsNkJBQTZCLEdBQUcsVUFBVSw2QkFBNkIscUJBQXFCLG9DQUFvQyw0QkFBNEIsR0FBRyxVQUFVLDZCQUE2QixxQkFBcUIsZ0NBQWdDLHlCQUF5QixxQ0FBcUMsR0FBRyw2QkFBNkIscUJBQXFCLGdDQUFnQyx3QkFBd0IsVUFBVSxLQUFLLDZCQUE2QixxQkFBcUIsb0NBQW9DLDRCQUE0QixXQUFXLDZCQUE2QixHQUFHLDZCQUE2QixxQkFBcUIsZ0NBQWdDLHdCQUF3QixVQUFVLEtBQUssNkJBQTZCLHFCQUFxQixvQ0FBb0MsNEJBQTRCLFdBQVcsU0FBUyxrQkFBa0IsZUFBZSxnQkFBZ0IsY0FBYyxzQkFBc0Isa0JBQWtCLGdCQUFnQixrQkFBa0IsV0FBVyxZQUFZLHFCQUFxQixrQkFBa0IsU0FBUyxRQUFRLHVDQUF1QywrQkFBK0IsY0FBYyxlQUFlLHlCQUF5QixrQkFBa0IsT0FBTyxRQUFRLFdBQVcseUJBQXlCLGNBQWMsbUJBQW1CLFVBQVUsMkNBQTJDLHlCQUF5Qix3RUFBd0UseUJBQXlCLFdBQVcseURBQXlELHlCQUF5Qix1QkFBdUIsb0JBQW9CLG9CQUFvQixhQUFhLHlCQUF5QixzQkFBc0IsbUJBQW1CLFlBQVksZUFBZSxrREFBa0QsWUFBWSx5Q0FBeUMsaUJBQWlCLDRDQUE0QyxZQUFZLDhDQUE4QyxvQkFBb0IsOERBQThELG1CQUFtQiwyQkFBMkIsZUFBZSxjQUFjLGVBQWUsNEJBQTRCLG9CQUFvQixxREFBcUQsNkNBQTZDLHFDQUFxQyx1RUFBdUUsb0NBQW9DLGdDQUFnQyx3QkFBd0IsbUNBQW1DLGtCQUFrQixlQUFlLHFCQUFxQixlQUFlLDRCQUE0QixpQkFBaUIsZUFBZSxjQUFjLHNDQUFzQyxnQkFBZ0IsNkJBQTZCLGtEQUFrRCxjQUFjLDRFQUE0RSx5QkFBeUIsVUFBVSxXQUFXLGlCQUFpQixTQUFTLDhCQUE4QixzQkFBc0Isa0JBQWtCLGtCQUFrQixzQkFBc0IsZ0JBQWdCLFVBQVUsb0JBQW9CLG9CQUFvQixhQUFhLHlCQUF5QixzQkFBc0IsbUJBQW1CLCtCQUErQix1QkFBdUIsdUNBQXVDLGNBQWMsK0VBQStFLFdBQVcsb0JBQW9CLHdCQUF3QixxQkFBcUIsdUJBQXVCLDRCQUE0Qix5QkFBeUIsY0FBYyxtREFBbUQsY0FBYywyQkFBMkIseUJBQXlCLFdBQVcseUJBQXlCLHlCQUF5QixjQUFjLHdCQUF3Qix5QkFBeUIsV0FBVyx1Q0FBdUMsY0FBYyw0QkFBNEIseUJBQXlCLGNBQWMsbURBQW1ELGNBQWMsMkJBQTJCLHlCQUF5QixXQUFXLDBCQUEwQix5QkFBeUIsY0FBYyxpREFBaUQsY0FBYyx5QkFBeUIseUJBQXlCLFdBQVcsbUJBQW1CLG1CQUFtQixjQUFjLGdCQUFnQixlQUFlLFdBQVcsdUJBQXVCLGVBQWUsV0FBVyxpQkFBaUIsZUFBZSxpQkFBaUIseUJBQXlCLGdCQUFnQixpQ0FBaUMsZUFBZSxlQUFlLG9CQUFvQixlQUFlLFVBQVUsa0JBQWtCLFNBQVMsV0FBVyxlQUFlLDJKQUEySixVQUFVLGtEQUFrRCxXQUFXLGdDQUFnQyxrQkFBa0IsZUFBZSxRQUFRLGlCQUFpQixvQkFBb0Isb0JBQW9CLGFBQWEsWUFBWSw0QkFBNEIsa0JBQWtCLDhCQUE4QixzQkFBc0IseUJBQXlCLGVBQWUsc0JBQXNCLHVDQUF1QywyRkFBMkYsbUZBQW1GLDJFQUEyRSxpR0FBaUcsZ0JBQWdCLHNCQUFzQixVQUFVLHdCQUF3QixpQkFBaUIsaUJBQWlCLHdCQUF3QixnQkFBZ0IsZUFBZSxjQUFjLFNBQVMsMEJBQTBCLGVBQWUsaUJBQWlCLGVBQWUsY0FBYyxtQkFBbUIsNEJBQTRCLFNBQVMsdUJBQXVCLFlBQVksV0FBVyxlQUFlLDJCQUEyQixrQkFBa0IsU0FBUyxXQUFXLGVBQWUsY0FBYyxlQUFlLGlDQUFpQyxjQUFjLGtDQUFrQyxjQUFjLGdDQUFnQyxjQUFjLCtCQUErQixjQUFjLGtDQUFrQyxjQUFjLGtDQUFrQyxRQUFRLG1DQUFtQywyQkFBMkIsaUNBQWlDLE9BQU8sb0NBQW9DLDRCQUE0QixpQkFBaUIsa0JBQWtCLHFCQUFxQixZQUFZLGlCQUFpQiwyQkFBMkIsY0FBYyxrQ0FBa0Msd0JBQXdCLGtCQUFrQixtQkFBbUIsa0JBQWtCLHNEQUFzRCxrQkFBa0IsVUFBVSxRQUFRLFdBQVcsWUFBWSxrQkFBa0IsbUJBQW1CLGNBQWMsZUFBZSxlQUFlLGtFQUFrRSxjQUFjLGdNQUFnTSxxQkFBcUIsOEVBQThFLGNBQWMsbUJBQW1CLDJCQUEyQixVQUFVLDBCQUEwQiw4QkFBOEIsMkJBQTJCLFNBQVMsMEJBQTBCLCtCQUErQixnSEFBZ0gscUJBQXFCLGNBQWMsNEhBQTRILGNBQWMsbUJBQW1CLHlCQUF5QixZQUFZLGlCQUFpQix3R0FBd0csV0FBVyxlQUFlLDBDQUEwQyxrQkFBa0IsbUJBQW1CLHdCQUF3QixZQUFZLGlCQUFpQixzR0FBc0csV0FBVyxlQUFlLHdJQUF3SSw0QkFBNEIsb0JBQW9CLHlDQUF5QyxrQkFBa0IsbUJBQW1CLHVCQUF1QixZQUFZLGlCQUFpQixvR0FBb0csV0FBVyxlQUFlLHNJQUFzSSw0QkFBNEIsb0JBQW9CLHdDQUF3QyxrQkFBa0IsbUJBQW1CLHNEQUFzRCxrQkFBa0IsbUJBQW1CLG9EQUFvRCxrQkFBa0IsbUJBQW1CLDRIQUE0SCxZQUFZLGlCQUFpQiw4SkFBOEosNEJBQTRCLG9CQUFvQiw4REFBOEQsd0JBQXdCLGdDQUFnQyw4REFBOEQsVUFBVSxXQUFXLFNBQVMsVUFBVSxrQkFBa0IsOEJBQThCLHNCQUFzQix3SUFBd0ksaUJBQWlCLHNJQUFzSSxpQkFBaUIsb0lBQW9JLGlCQUFpQix5REFBeUQsZ0JBQWdCLG9CQUFvQixrQkFBa0Isa0JBQWtCLGFBQWEsYUFBYSxlQUFlLGdCQUFnQixlQUFlLHFCQUFxQiw2RUFBNkUsa0JBQWtCLGNBQWMsUUFBUSxTQUFTLHlCQUF5QixtQkFBbUIsbUNBQW1DLGlCQUFpQiwwQ0FBMEMsY0FBYyxpQkFBaUIsNmFBQTZhLGFBQWEsc0NBQXNDLG1CQUFtQixxREFBcUQsWUFBWSx5QkFBeUIsc0JBQXNCLDREQUE0RCxXQUFXLGlCQUFpQix5QkFBeUIsc0JBQXNCLHlDQUF5QyxnQkFBZ0Isd0RBQXdELFNBQVMsbUJBQW1CLDRCQUE0QiwrREFBK0QsUUFBUSxpQkFBaUIsbUJBQW1CLDRCQUE0Qix3Q0FBd0MsaUJBQWlCLHVEQUF1RCxVQUFVLDJCQUEyQixvQkFBb0IsOERBQThELFlBQVksU0FBUywyQkFBMkIsb0JBQW9CLHVDQUF1QyxrQkFBa0Isc0RBQXNELFdBQVcscUJBQXFCLDBCQUEwQiw2REFBNkQsVUFBVSxZQUFZLGlCQUFpQixxQkFBcUIsMEJBQTBCLDRCQUE0QixtQkFBbUIsV0FBVyw2QkFBNkIsZ0JBQWdCLHlCQUF5Qiw4REFBOEQseUJBQXlCLHFFQUFxRSxzQkFBc0IsaUVBQWlFLDRCQUE0Qix3RUFBd0UseUJBQXlCLCtEQUErRCwwQkFBMEIsc0VBQXNFLHVCQUF1QixnRUFBZ0UsMkJBQTJCLHVFQUF1RSx3QkFBd0IscUNBQXFDLGNBQWMseUVBQXlFLHFCQUFxQixzQkFBc0Isa0JBQWtCLFdBQVcsbUJBQW1CLFdBQVcsV0FBVyxjQUFjLHlCQUF5QixrQkFBa0Isa0JBQWtCLGVBQWUsc0JBQXNCLDhCQUE4QixtQkFBbUIsV0FBVyw0QkFBNEIsZUFBZSw0Q0FBNEMseUJBQXlCLCtDQUErQyxxQkFBcUIsMExBQTBMLG1CQUFtQixrS0FBa0ssMkJBQTJCLG1CQUFtQixtQkFBbUIsNENBQTRDLG1DQUFtQyxrQkFBa0Isa0JBQWtCLFlBQVksZUFBZSxZQUFZLHdDQUF3QyxlQUFlLDBDQUEwQyxhQUFhLHlDQUF5QyxnQkFBZ0IsZ0JBQWdCLFdBQVcseUJBQXlCLDJCQUEyQiw4QkFBOEIsa0JBQWtCLDJCQUEyQixZQUFZLFdBQVcsYUFBYSxVQUFVLDJCQUEyQiw2QkFBNkIsa0JBQWtCLHlCQUF5QixzQkFBc0IscUJBQXFCLGlCQUFpQixtQkFBbUIsOERBQThELHNCQUFzQixxQkFBcUIsa0NBQWtDLFlBQVksa0VBQWtFLG9CQUFvQixZQUFZLG9DQUFvQyx3QkFBd0IsZ0JBQWdCLG1CQUFtQixXQUFXLFlBQVkseUJBQXlCLHNCQUFzQixrQkFBa0IsdUJBQXVCLGVBQWUseUJBQXlCLGlCQUFpQiw4RUFBOEUsNkJBQTZCLHFCQUFxQixrREFBa0Qsb0JBQW9CLFlBQVksNEJBQTRCLHdCQUF3QixnQkFBZ0IsaUJBQWlCLFdBQVcsVUFBVSxtQkFBbUIsc0JBQXNCLDJCQUEyQixrQkFBa0IsTUFBTSxVQUFVLFdBQVcsWUFBWSx1QkFBdUIsa0JBQWtCLG1DQUFtQywyQkFBMkIsZUFBZSxjQUFjLGdCQUFnQix1QkFBdUIsa0JBQWtCLDBDQUEwQyxVQUFVLFlBQVksY0FBYyx1Q0FBdUMsVUFBVSxZQUFZLDBCQUEwQixrREFBa0QsU0FBUyxXQUFXLGtDQUFrQywwQkFBMEIsd0NBQXdDLGtDQUFrQywwQkFBMEIsNkNBQTZDLG9CQUFvQiwrREFBK0QsaUJBQWlCLFdBQVcsa0JBQWtCLFlBQVksV0FBVyxnQkFBZ0IsZ0ZBQWdGLGtCQUFrQixpQkFBaUIsa0JBQWtCLG9MQUFvTCxTQUFTLGdCQUFnQix5QkFBeUIsaUJBQWlCLDhCQUE4QixzQkFBc0IsbUVBQW1FLDJEQUEyRCwwRkFBMEYsV0FBVyxXQUFXLDhCQUE4QiwwRkFBMEYsV0FBVywrQkFBK0IscUhBQXFILDRCQUE0Qiw2QkFBNkIsZ01BQWdNLHFCQUFxQixrTUFBa00scUJBQXFCLDhDQUE4QyxhQUFhLFVBQVUsa0NBQWtDLDBCQUEwQiw2QkFBNkIsNEJBQTRCLDJCQUEyQiwwQkFBMEIsaUJBQWlCLGtCQUFrQixhQUFhLHNDQUFzQyxTQUFTLE1BQU0sUUFBUSxTQUFTLE9BQU8sK0JBQStCLHVCQUF1QiwrQkFBK0IsZUFBZSxtREFBbUQsaUJBQWlCLDZEQUE2RCxZQUFZLFdBQVcsb0JBQW9CLFFBQVEsaUJBQWlCLFdBQVcsa0JBQWtCLGtCQUFrQiw2ekJBQTZ6QixrQkFBa0IscUNBQXFDLGNBQWMsYUFBYSxlQUFlLDhCQUE4QixZQUFZLFdBQVcsb0RBQW9ELDRDQUE0QywwQkFBMEIseURBQXlELGlEQUFpRCx3QkFBd0Isb0JBQW9CLGVBQWUsZUFBZSxxQkFBcUIsc0JBQXNCLGNBQWMsa0NBQWtDLEtBQUssaUNBQWlDLDBCQUEwQiwwQkFBMEIsS0FBSyxpQ0FBaUMsMEJBQTBCLGdDQUFnQyxHQUFHLHVCQUF1QixvQkFBb0IsSUFBSSx3QkFBd0Isd0JBQXdCLEtBQUssd0JBQXdCLDBCQUEwQix3QkFBd0IsR0FBRyx1QkFBdUIsb0JBQW9CLElBQUksd0JBQXdCLHdCQUF3QixLQUFLLHdCQUF3QiwwQkFBMEIsUUFBUSw4QkFBOEIsc0JBQXNCLCtCQUErQixjQUFjLGVBQWUsV0FBVyxjQUFjLG9CQUFvQixvQkFBb0IsYUFBYSxtREFBbUQsYUFBYSxnQ0FBZ0Msd0JBQXdCLHFCQUFxQix1QkFBdUIsNkJBQTZCLHFCQUFxQixrQkFBa0IseUJBQXlCLHVDQUF1Qyx5QkFBeUIsc0JBQXNCLDhCQUE4QixzQ0FBc0MseUJBQXlCLDZCQUE2QiwyQkFBMkIsd0JBQXdCLHFCQUFxQix1QkFBdUIsOEJBQThCLHlCQUF5QixzQkFBc0IsbUJBQW1CLDhCQUE4QixzQkFBc0IsbUJBQW1CLHFCQUFxQixpQkFBaUIsV0FBVyw4QkFBOEIsc0JBQXNCLFVBQVUsU0FBUyxlQUFlLFFBQVEsZUFBZSxPQUFPLFVBQVUsZUFBZSxpQkFBaUIscUJBQXFCLGVBQWUsZUFBZSxlQUFlLGNBQWMsVUFBVSxlQUFlLGlCQUFpQixxQkFBcUIsZUFBZSxlQUFlLGVBQWUsY0FBYyxVQUFVLFlBQVksaUJBQWlCLGtCQUFrQixlQUFlLFlBQVksZUFBZSxXQUFXLFVBQVUsZ0JBQWdCLGlCQUFpQixzQkFBc0IsZUFBZSxnQkFBZ0IsZUFBZSxlQUFlLFVBQVUsZ0JBQWdCLGlCQUFpQixzQkFBc0IsZUFBZSxnQkFBZ0IsZUFBZSxlQUFlLFVBQVUsVUFBVSxpQkFBaUIsZ0JBQWdCLGVBQWUsVUFBVSxlQUFlLFNBQVMsVUFBVSxnQkFBZ0IsaUJBQWlCLHNCQUFzQixlQUFlLGdCQUFnQixlQUFlLGVBQWUsVUFBVSxnQkFBZ0IsaUJBQWlCLHNCQUFzQixlQUFlLGdCQUFnQixlQUFlLGVBQWUsVUFBVSxZQUFZLGlCQUFpQixrQkFBa0IsZUFBZSxZQUFZLGVBQWUsV0FBVyxXQUFXLGdCQUFnQixrQkFBa0Isc0JBQXNCLGdCQUFnQixnQkFBZ0IsZ0JBQWdCLGVBQWUsV0FBVyxnQkFBZ0Isa0JBQWtCLHNCQUFzQixnQkFBZ0IsZ0JBQWdCLGdCQUFnQixlQUFlLFdBQVcsVUFBVSxrQkFBa0IsZ0JBQWdCLGdCQUFnQixVQUFVLGdCQUFnQixTQUFTLFdBQVcsZ0JBQWdCLGtCQUFrQixzQkFBc0IsZ0JBQWdCLGdCQUFnQixnQkFBZ0IsZUFBZSxXQUFXLGdCQUFnQixrQkFBa0Isc0JBQXNCLGdCQUFnQixnQkFBZ0IsZ0JBQWdCLGVBQWUsV0FBVyxZQUFZLGtCQUFrQixrQkFBa0IsZ0JBQWdCLFlBQVksZ0JBQWdCLFdBQVcsV0FBVyxnQkFBZ0Isa0JBQWtCLHNCQUFzQixnQkFBZ0IsZ0JBQWdCLGdCQUFnQixlQUFlLFdBQVcsZ0JBQWdCLGtCQUFrQixzQkFBc0IsZ0JBQWdCLGdCQUFnQixnQkFBZ0IsZUFBZSxXQUFXLFVBQVUsa0JBQWtCLGdCQUFnQixnQkFBZ0IsVUFBVSxnQkFBZ0IsU0FBUyxXQUFXLGdCQUFnQixrQkFBa0Isc0JBQXNCLGdCQUFnQixnQkFBZ0IsZ0JBQWdCLGVBQWUsV0FBVyxnQkFBZ0Isa0JBQWtCLHNCQUFzQixnQkFBZ0IsZ0JBQWdCLGdCQUFnQixlQUFlLFdBQVcsWUFBWSxrQkFBa0Isa0JBQWtCLGdCQUFnQixZQUFZLGdCQUFnQixXQUFXLFdBQVcsZ0JBQWdCLGtCQUFrQixzQkFBc0IsZ0JBQWdCLGdCQUFnQixnQkFBZ0IsZUFBZSxXQUFXLGdCQUFnQixrQkFBa0Isc0JBQXNCLGdCQUFnQixnQkFBZ0IsZ0JBQWdCLGVBQWUsV0FBVyxXQUFXLGtCQUFrQixpQkFBaUIsZ0JBQWdCLFdBQVcsZ0JBQWdCLFVBQVUseUNBQXlDLGFBQWEsYUFBYSxTQUFTLG9CQUFvQixjQUFjLGtCQUFrQixrQkFBa0IsUUFBUSxrQkFBa0Isa0JBQWtCLE9BQU8sYUFBYSxlQUFlLG9CQUFvQixxQkFBcUIsa0JBQWtCLGtCQUFrQixlQUFlLGtCQUFrQixrQkFBa0IsY0FBYyxhQUFhLGVBQWUsb0JBQW9CLHFCQUFxQixrQkFBa0Isa0JBQWtCLGVBQWUsa0JBQWtCLGtCQUFrQixjQUFjLGFBQWEsWUFBWSxvQkFBb0Isa0JBQWtCLGtCQUFrQixrQkFBa0IsWUFBWSxrQkFBa0Isa0JBQWtCLFdBQVcsYUFBYSxnQkFBZ0Isb0JBQW9CLHNCQUFzQixrQkFBa0Isa0JBQWtCLGdCQUFnQixrQkFBa0Isa0JBQWtCLGVBQWUsYUFBYSxnQkFBZ0Isb0JBQW9CLHNCQUFzQixrQkFBa0Isa0JBQWtCLGdCQUFnQixrQkFBa0Isa0JBQWtCLGVBQWUsYUFBYSxVQUFVLG9CQUFvQixnQkFBZ0Isa0JBQWtCLGtCQUFrQixVQUFVLGtCQUFrQixrQkFBa0IsU0FBUyxhQUFhLGdCQUFnQixvQkFBb0Isc0JBQXNCLGtCQUFrQixrQkFBa0IsZ0JBQWdCLGtCQUFrQixrQkFBa0IsZUFBZSxhQUFhLGdCQUFnQixvQkFBb0Isc0JBQXNCLGtCQUFrQixrQkFBa0IsZ0JBQWdCLGtCQUFrQixrQkFBa0IsZUFBZSxhQUFhLFlBQVksb0JBQW9CLGtCQUFrQixrQkFBa0Isa0JBQWtCLFlBQVksa0JBQWtCLGtCQUFrQixXQUFXLGNBQWMsZ0JBQWdCLHFCQUFxQixzQkFBc0IsbUJBQW1CLGtCQUFrQixnQkFBZ0IsbUJBQW1CLGtCQUFrQixlQUFlLGNBQWMsZ0JBQWdCLHFCQUFxQixzQkFBc0IsbUJBQW1CLGtCQUFrQixnQkFBZ0IsbUJBQW1CLGtCQUFrQixlQUFlLGNBQWMsVUFBVSxxQkFBcUIsZ0JBQWdCLG1CQUFtQixrQkFBa0IsVUFBVSxtQkFBbUIsa0JBQWtCLFNBQVMsY0FBYyxnQkFBZ0IscUJBQXFCLHNCQUFzQixtQkFBbUIsa0JBQWtCLGdCQUFnQixtQkFBbUIsa0JBQWtCLGVBQWUsY0FBYyxnQkFBZ0IscUJBQXFCLHNCQUFzQixtQkFBbUIsa0JBQWtCLGdCQUFnQixtQkFBbUIsa0JBQWtCLGVBQWUsY0FBYyxZQUFZLHFCQUFxQixrQkFBa0IsbUJBQW1CLGtCQUFrQixZQUFZLG1CQUFtQixrQkFBa0IsV0FBVyxjQUFjLGdCQUFnQixxQkFBcUIsc0JBQXNCLG1CQUFtQixrQkFBa0IsZ0JBQWdCLG1CQUFtQixrQkFBa0IsZUFBZSxjQUFjLGdCQUFnQixxQkFBcUIsc0JBQXNCLG1CQUFtQixrQkFBa0IsZ0JBQWdCLG1CQUFtQixrQkFBa0IsZUFBZSxjQUFjLFVBQVUscUJBQXFCLGdCQUFnQixtQkFBbUIsa0JBQWtCLFVBQVUsbUJBQW1CLGtCQUFrQixTQUFTLGNBQWMsZ0JBQWdCLHFCQUFxQixzQkFBc0IsbUJBQW1CLGtCQUFrQixnQkFBZ0IsbUJBQW1CLGtCQUFrQixlQUFlLGNBQWMsZ0JBQWdCLHFCQUFxQixzQkFBc0IsbUJBQW1CLGtCQUFrQixnQkFBZ0IsbUJBQW1CLGtCQUFrQixlQUFlLGNBQWMsWUFBWSxxQkFBcUIsa0JBQWtCLG1CQUFtQixrQkFBa0IsWUFBWSxtQkFBbUIsa0JBQWtCLFdBQVcsY0FBYyxnQkFBZ0IscUJBQXFCLHNCQUFzQixtQkFBbUIsa0JBQWtCLGdCQUFnQixtQkFBbUIsa0JBQWtCLGVBQWUsY0FBYyxnQkFBZ0IscUJBQXFCLHNCQUFzQixtQkFBbUIsa0JBQWtCLGdCQUFnQixtQkFBbUIsa0JBQWtCLGVBQWUsY0FBYyxXQUFXLHFCQUFxQixpQkFBaUIsbUJBQW1CLGtCQUFrQixXQUFXLG1CQUFtQixrQkFBa0IsV0FBVyx5Q0FBeUMsYUFBYSxhQUFhLFNBQVMsb0JBQW9CLGNBQWMsa0JBQWtCLGtCQUFrQixRQUFRLGtCQUFrQixrQkFBa0IsT0FBTyxhQUFhLGVBQWUsb0JBQW9CLHFCQUFxQixrQkFBa0Isa0JBQWtCLGVBQWUsa0JBQWtCLGtCQUFrQixjQUFjLGFBQWEsZUFBZSxvQkFBb0IscUJBQXFCLGtCQUFrQixrQkFBa0IsZUFBZSxrQkFBa0Isa0JBQWtCLGNBQWMsYUFBYSxZQUFZLG9CQUFvQixrQkFBa0Isa0JBQWtCLGtCQUFrQixZQUFZLGtCQUFrQixrQkFBa0IsV0FBVyxhQUFhLGdCQUFnQixvQkFBb0Isc0JBQXNCLGtCQUFrQixrQkFBa0IsZ0JBQWdCLGtCQUFrQixrQkFBa0IsZUFBZSxhQUFhLGdCQUFnQixvQkFBb0Isc0JBQXNCLGtCQUFrQixrQkFBa0IsZ0JBQWdCLGtCQUFrQixrQkFBa0IsZUFBZSxhQUFhLFVBQVUsb0JBQW9CLGdCQUFnQixrQkFBa0Isa0JBQWtCLFVBQVUsa0JBQWtCLGtCQUFrQixTQUFTLGFBQWEsZ0JBQWdCLG9CQUFvQixzQkFBc0Isa0JBQWtCLGtCQUFrQixnQkFBZ0Isa0JBQWtCLGtCQUFrQixlQUFlLGFBQWEsZ0JBQWdCLG9CQUFvQixzQkFBc0Isa0JBQWtCLGtCQUFrQixnQkFBZ0Isa0JBQWtCLGtCQUFrQixlQUFlLGFBQWEsWUFBWSxvQkFBb0Isa0JBQWtCLGtCQUFrQixrQkFBa0IsWUFBWSxrQkFBa0Isa0JBQWtCLFdBQVcsY0FBYyxnQkFBZ0IscUJBQXFCLHNCQUFzQixtQkFBbUIsa0JBQWtCLGdCQUFnQixtQkFBbUIsa0JBQWtCLGVBQWUsY0FBYyxnQkFBZ0IscUJBQXFCLHNCQUFzQixtQkFBbUIsa0JBQWtCLGdCQUFnQixtQkFBbUIsa0JBQWtCLGVBQWUsY0FBYyxVQUFVLHFCQUFxQixnQkFBZ0IsbUJBQW1CLGtCQUFrQixVQUFVLG1CQUFtQixrQkFBa0IsU0FBUyxjQUFjLGdCQUFnQixxQkFBcUIsc0JBQXNCLG1CQUFtQixrQkFBa0IsZ0JBQWdCLG1CQUFtQixrQkFBa0IsZUFBZSxjQUFjLGdCQUFnQixxQkFBcUIsc0JBQXNCLG1CQUFtQixrQkFBa0IsZ0JBQWdCLG1CQUFtQixrQkFBa0IsZUFBZSxjQUFjLFlBQVkscUJBQXFCLGtCQUFrQixtQkFBbUIsa0JBQWtCLFlBQVksbUJBQW1CLGtCQUFrQixXQUFXLGNBQWMsZ0JBQWdCLHFCQUFxQixzQkFBc0IsbUJBQW1CLGtCQUFrQixnQkFBZ0IsbUJBQW1CLGtCQUFrQixlQUFlLGNBQWMsZ0JBQWdCLHFCQUFxQixzQkFBc0IsbUJBQW1CLGtCQUFrQixnQkFBZ0IsbUJBQW1CLGtCQUFrQixlQUFlLGNBQWMsVUFBVSxxQkFBcUIsZ0JBQWdCLG1CQUFtQixrQkFBa0IsVUFBVSxtQkFBbUIsa0JBQWtCLFNBQVMsY0FBYyxnQkFBZ0IscUJBQXFCLHNCQUFzQixtQkFBbUIsa0JBQWtCLGdCQUFnQixtQkFBbUIsa0JBQWtCLGVBQWUsY0FBYyxnQkFBZ0IscUJBQXFCLHNCQUFzQixtQkFBbUIsa0JBQWtCLGdCQUFnQixtQkFBbUIsa0JBQWtCLGVBQWUsY0FBYyxZQUFZLHFCQUFxQixrQkFBa0IsbUJBQW1CLGtCQUFrQixZQUFZLG1CQUFtQixrQkFBa0IsV0FBVyxjQUFjLGdCQUFnQixxQkFBcUIsc0JBQXNCLG1CQUFtQixrQkFBa0IsZ0JBQWdCLG1CQUFtQixrQkFBa0IsZUFBZSxjQUFjLGdCQUFnQixxQkFBcUIsc0JBQXNCLG1CQUFtQixrQkFBa0IsZ0JBQWdCLG1CQUFtQixrQkFBa0IsZUFBZSxjQUFjLFdBQVcs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YyxhQUFhLGVBQWUsb0JBQW9CLHFCQUFxQixrQkFBa0Isa0JBQWtCLGVBQWUsa0JBQWtCLGtCQUFrQixjQUFjLGFBQWEsWUFBWSxvQkFBb0Isa0JBQWtCLGtCQUFrQixrQkFBa0IsWUFBWSxrQkFBa0Isa0JBQWtCLFdBQVcsYUFBYSxnQkFBZ0Isb0JBQW9CLHNCQUFzQixrQkFBa0Isa0JBQWtCLGdCQUFnQixrQkFBa0Isa0JBQWtCLGVBQWUsYUFBYSxnQkFBZ0Isb0JBQW9CLHNCQUFzQixrQkFBa0Isa0JBQWtCLGdCQUFnQixrQkFBa0Isa0JBQWtCLGVBQWUsYUFBYSxVQUFVLG9CQUFvQixnQkFBZ0Isa0JBQWtCLGtCQUFrQixVQUFVLGtCQUFrQixrQkFBa0IsU0FBUyxhQUFhLGdCQUFnQixvQkFBb0Isc0JBQXNCLGtCQUFrQixrQkFBa0IsZ0JBQWdCLGtCQUFrQixrQkFBa0IsZUFBZSxhQUFhLGdCQUFnQixvQkFBb0Isc0JBQXNCLGtCQUFrQixrQkFBa0IsZ0JBQWdCLGtCQUFrQixrQkFBa0IsZUFBZSxhQUFhLFlBQVksb0JBQW9CLGtCQUFrQixrQkFBa0Isa0JBQWtCLFlBQVksa0JBQWtCLGtCQUFrQixXQUFXLGNBQWMsZ0JBQWdCLHFCQUFxQixzQkFBc0IsbUJBQW1CLGtCQUFrQixnQkFBZ0IsbUJBQW1CLGtCQUFrQixlQUFlLGNBQWMsZ0JBQWdCLHFCQUFxQixzQkFBc0IsbUJBQW1CLGtCQUFrQixnQkFBZ0IsbUJBQW1CLGtCQUFrQixlQUFlLGNBQWMsVUFBVSxxQkFBcUIsZ0JBQWdCLG1CQUFtQixrQkFBa0IsVUFBVSxtQkFBbUIsa0JBQWtCLFNBQVMsY0FBYyxnQkFBZ0IscUJBQXFCLHNCQUFzQixtQkFBbUIsa0JBQWtCLGdCQUFnQixtQkFBbUIsa0JBQWtCLGVBQWUsY0FBYyxnQkFBZ0IscUJBQXFCLHNCQUFzQixtQkFBbUIsa0JBQWtCLGdCQUFnQixtQkFBbUIsa0JBQWtCLGVBQWUsY0FBYyxZQUFZLHFCQUFxQixrQkFBa0IsbUJBQW1CLGtCQUFrQixZQUFZLG1CQUFtQixrQkFBa0IsV0FB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QkFBbUIscURBQXFELGtCQUFrQiwrQkFBK0Isc0JBQXNCLHlCQUF5QixXQUFXLG9CQUFvQixvQkFBb0IsYUFBYSx3QkFBd0IscUJBQXFCLHVCQUF1Qix5QkFBeUIsc0JBQXNCLG1CQUFtQiwwQkFBMEIsc0JBQXNCLGtCQUFrQiw4QkFBOEIsc0JBQXNCLGtCQUFrQixxQkFBcUIsV0FBVyxZQUFZLG9CQUFvQixTQUFTLGVBQWUsY0FBYyxnQkFBZ0IscUJBQXFCLGdCQUFnQix1QkFBdUIsU0FBUyxlQUFlLGNBQWMsZ0JBQWdCLGtCQUFrQixnQkFBZ0IseUJBQXlCLGFBQWEsdUJBQXVCLGFBQWEsc0JBQXNCLGFBQWEseUJBQXlCLGFBQWEsbUJBQW1CO0FBQ2ptZ2hCO0FBQ0EsaUVBQWUsdUJBQXVCLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdGhlbWUtY2hhbGsvaW5kZXguY3NzPzIwMzYiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2Nzc1dpdGhNYXBwaW5nVG9TdHJpbmcuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfR0VUX1VSTF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2dldFVybC5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF8wX19fIGZyb20gXCIuL2ZvbnRzL2VsZW1lbnQtaWNvbnMud29mZlwiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF8xX19fIGZyb20gXCIuL2ZvbnRzL2VsZW1lbnQtaWNvbnMudHRmXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG52YXIgX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfMF9fXyA9IF9fX0NTU19MT0FERVJfR0VUX1VSTF9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzBfX18pO1xudmFyIF9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzFfX18gPSBfX19DU1NfTE9BREVSX0dFVF9VUkxfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF8xX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBcIkBjaGFyc2V0IFxcXCJVVEYtOFxcXCI7QGZvbnQtZmFjZXtmb250LWZhbWlseTplbGVtZW50LWljb25zO3NyYzp1cmwoXCIgKyBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8wX19fICsgXCIpIGZvcm1hdChcXFwid29mZlxcXCIpLHVybChcIiArIF9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzFfX18gKyBcIikgZm9ybWF0KFxcXCJ0cnVldHlwZVxcXCIpO2ZvbnQtd2VpZ2h0OjQwMDtmb250LWRpc3BsYXk6XFxcImF1dG9cXFwiO2ZvbnQtc3R5bGU6bm9ybWFsfVtjbGFzcyo9XFxcIiBlbC1pY29uLVxcXCJdLFtjbGFzc149ZWwtaWNvbi1de2ZvbnQtZmFtaWx5OmVsZW1lbnQtaWNvbnMhaW1wb3J0YW50O3NwZWFrOm5vbmU7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtdmFyaWFudDpub3JtYWw7dGV4dC10cmFuc2Zvcm06bm9uZTtsaW5lLWhlaWdodDoxO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO2Rpc3BsYXk6aW5saW5lLWJsb2NrOy13ZWJraXQtZm9udC1zbW9vdGhpbmc6YW50aWFsaWFzZWQ7LW1vei1vc3gtZm9udC1zbW9vdGhpbmc6Z3JheXNjYWxlfS5lbC1pY29uLWljZS1jcmVhbS1yb3VuZDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU2YTBcXFwifS5lbC1pY29uLWljZS1jcmVhbS1zcXVhcmU6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNmEzXFxcIn0uZWwtaWNvbi1sb2xsaXBvcDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU2YTRcXFwifS5lbC1pY29uLXBvdGF0by1zdHJpcHM6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNmE1XFxcIn0uZWwtaWNvbi1taWxrLXRlYTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU2YTZcXFwifS5lbC1pY29uLWljZS1kcmluazpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU2YTdcXFwifS5lbC1pY29uLWljZS10ZWE6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNmE5XFxcIn0uZWwtaWNvbi1jb2ZmZWU6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNmFhXFxcIn0uZWwtaWNvbi1vcmFuZ2U6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNmFiXFxcIn0uZWwtaWNvbi1wZWFyOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTZhY1xcXCJ9LmVsLWljb24tYXBwbGU6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNmFkXFxcIn0uZWwtaWNvbi1jaGVycnk6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNmFlXFxcIn0uZWwtaWNvbi13YXRlcm1lbG9uOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTZhZlxcXCJ9LmVsLWljb24tZ3JhcGU6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNmIwXFxcIn0uZWwtaWNvbi1yZWZyaWdlcmF0b3I6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNmIxXFxcIn0uZWwtaWNvbi1nb2JsZXQtc3F1YXJlLWZ1bGw6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNmIyXFxcIn0uZWwtaWNvbi1nb2JsZXQtc3F1YXJlOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTZiM1xcXCJ9LmVsLWljb24tZ29ibGV0LWZ1bGw6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNmI0XFxcIn0uZWwtaWNvbi1nb2JsZXQ6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNmI1XFxcIn0uZWwtaWNvbi1jb2xkLWRyaW5rOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTZiNlxcXCJ9LmVsLWljb24tY29mZmVlLWN1cDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU2YjhcXFwifS5lbC1pY29uLXdhdGVyLWN1cDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU2YjlcXFwifS5lbC1pY29uLWhvdC13YXRlcjpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU2YmFcXFwifS5lbC1pY29uLWljZS1jcmVhbTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU2YmJcXFwifS5lbC1pY29uLWRlc3NlcnQ6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNmJjXFxcIn0uZWwtaWNvbi1zdWdhcjpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU2YmRcXFwifS5lbC1pY29uLXRhYmxld2FyZTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU2YmVcXFwifS5lbC1pY29uLWJ1cmdlcjpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU2YmZcXFwifS5lbC1pY29uLWtuaWZlLWZvcms6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNmMxXFxcIn0uZWwtaWNvbi1mb3JrLXNwb29uOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTZjMlxcXCJ9LmVsLWljb24tY2hpY2tlbjpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU2YzNcXFwifS5lbC1pY29uLWZvb2Q6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNmM0XFxcIn0uZWwtaWNvbi1kaXNoLTE6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNmM1XFxcIn0uZWwtaWNvbi1kaXNoOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTZjNlxcXCJ9LmVsLWljb24tbW9vbi1uaWdodDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU2ZWVcXFwifS5lbC1pY29uLW1vb246YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNmYwXFxcIn0uZWwtaWNvbi1jbG91ZHktYW5kLXN1bm55OmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTZmMVxcXCJ9LmVsLWljb24tcGFydGx5LWNsb3VkeTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU2ZjJcXFwifS5lbC1pY29uLWNsb3VkeTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU2ZjNcXFwifS5lbC1pY29uLXN1bm55OmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTZmNlxcXCJ9LmVsLWljb24tc3Vuc2V0OmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTZmN1xcXCJ9LmVsLWljb24tc3VucmlzZS0xOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTZmOFxcXCJ9LmVsLWljb24tc3VucmlzZTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU2ZjlcXFwifS5lbC1pY29uLWhlYXZ5LXJhaW46YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNmZhXFxcIn0uZWwtaWNvbi1saWdodG5pbmc6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNmZiXFxcIn0uZWwtaWNvbi1saWdodC1yYWluOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTZmY1xcXCJ9LmVsLWljb24td2luZC1wb3dlcjpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU2ZmRcXFwifS5lbC1pY29uLWJhc2ViYWxsOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTcxMlxcXCJ9LmVsLWljb24tc29jY2VyOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTcxM1xcXCJ9LmVsLWljb24tZm9vdGJhbGw6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzE1XFxcIn0uZWwtaWNvbi1iYXNrZXRiYWxsOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTcxNlxcXCJ9LmVsLWljb24tc2hpcDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3M2ZcXFwifS5lbC1pY29uLXRydWNrOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTc0MFxcXCJ9LmVsLWljb24tYmljeWNsZTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3NDFcXFwifS5lbC1pY29uLW1vYmlsZS1waG9uZTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU2ZDNcXFwifS5lbC1pY29uLXNlcnZpY2U6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNmQ0XFxcIn0uZWwtaWNvbi1rZXk6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNmUyXFxcIn0uZWwtaWNvbi11bmxvY2s6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNmU0XFxcIn0uZWwtaWNvbi1sb2NrOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTZlNVxcXCJ9LmVsLWljb24td2F0Y2g6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNmZlXFxcIn0uZWwtaWNvbi13YXRjaC0xOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTZmZlxcXCJ9LmVsLWljb24tdGltZXI6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzAyXFxcIn0uZWwtaWNvbi1hbGFybS1jbG9jazpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3MDNcXFwifS5lbC1pY29uLW1hcC1sb2NhdGlvbjpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3MDRcXFwifS5lbC1pY29uLWRlbGV0ZS1sb2NhdGlvbjpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3MDVcXFwifS5lbC1pY29uLWFkZC1sb2NhdGlvbjpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3MDZcXFwifS5lbC1pY29uLWxvY2F0aW9uLWluZm9ybWF0aW9uOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTcwN1xcXCJ9LmVsLWljb24tbG9jYXRpb24tb3V0bGluZTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3MDhcXFwifS5lbC1pY29uLWxvY2F0aW9uOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTc5ZVxcXCJ9LmVsLWljb24tcGxhY2U6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzA5XFxcIn0uZWwtaWNvbi1kaXNjb3ZlcjpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3MGFcXFwifS5lbC1pY29uLWZpcnN0LWFpZC1raXQ6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzBiXFxcIn0uZWwtaWNvbi10cm9waHktMTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3MGNcXFwifS5lbC1pY29uLXRyb3BoeTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3MGRcXFwifS5lbC1pY29uLW1lZGFsOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTcwZVxcXCJ9LmVsLWljb24tbWVkYWwtMTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3MGZcXFwifS5lbC1pY29uLXN0b3B3YXRjaDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3MTBcXFwifS5lbC1pY29uLW1pYzpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3MTFcXFwifS5lbC1pY29uLWNvcHktZG9jdW1lbnQ6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzE4XFxcIn0uZWwtaWNvbi1mdWxsLXNjcmVlbjpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3MTlcXFwifS5lbC1pY29uLXN3aXRjaC1idXR0b246YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzFiXFxcIn0uZWwtaWNvbi1haW06YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzFjXFxcIn0uZWwtaWNvbi1jcm9wOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTcxZFxcXCJ9LmVsLWljb24tb2RvbWV0ZXI6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzFlXFxcIn0uZWwtaWNvbi10aW1lOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTcxZlxcXCJ9LmVsLWljb24tYmFuZ3podTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3MjRcXFwifS5lbC1pY29uLWNsb3NlLW5vdGlmaWNhdGlvbjpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3MjZcXFwifS5lbC1pY29uLW1pY3JvcGhvbmU6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzI3XFxcIn0uZWwtaWNvbi10dXJuLW9mZi1taWNyb3Bob25lOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTcyOFxcXCJ9LmVsLWljb24tcG9zaXRpb246YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzI5XFxcIn0uZWwtaWNvbi1wb3N0Y2FyZDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3MmFcXFwifS5lbC1pY29uLW1lc3NhZ2U6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzJiXFxcIn0uZWwtaWNvbi1jaGF0LWxpbmUtc3F1YXJlOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTcyZFxcXCJ9LmVsLWljb24tY2hhdC1kb3Qtc3F1YXJlOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTcyZVxcXCJ9LmVsLWljb24tY2hhdC1kb3Qtcm91bmQ6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzJmXFxcIn0uZWwtaWNvbi1jaGF0LXNxdWFyZTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3MzBcXFwifS5lbC1pY29uLWNoYXQtbGluZS1yb3VuZDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3MzFcXFwifS5lbC1pY29uLWNoYXQtcm91bmQ6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzMyXFxcIn0uZWwtaWNvbi1zZXQtdXA6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzMzXFxcIn0uZWwtaWNvbi10dXJuLW9mZjpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3MzRcXFwifS5lbC1pY29uLW9wZW46YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzM1XFxcIn0uZWwtaWNvbi1jb25uZWN0aW9uOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTczNlxcXCJ9LmVsLWljb24tbGluazpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3MzdcXFwifS5lbC1pY29uLWNwdTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3MzhcXFwifS5lbC1pY29uLXRodW1iOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTczOVxcXCJ9LmVsLWljb24tZmVtYWxlOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTczYVxcXCJ9LmVsLWljb24tbWFsZTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3M2JcXFwifS5lbC1pY29uLWd1aWRlOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTczY1xcXCJ9LmVsLWljb24tbmV3czpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3M2VcXFwifS5lbC1pY29uLXByaWNlLXRhZzpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3NDRcXFwifS5lbC1pY29uLWRpc2NvdW50OmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTc0NVxcXCJ9LmVsLWljb24td2FsbGV0OmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTc0N1xcXCJ9LmVsLWljb24tY29pbjpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3NDhcXFwifS5lbC1pY29uLW1vbmV5OmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTc0OVxcXCJ9LmVsLWljb24tYmFuay1jYXJkOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTc0YVxcXCJ9LmVsLWljb24tYm94OmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTc0YlxcXCJ9LmVsLWljb24tcHJlc2VudDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3NGNcXFwifS5lbC1pY29uLXNlbGw6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNmQ1XFxcIn0uZWwtaWNvbi1zb2xkLW91dDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU2ZDZcXFwifS5lbC1pY29uLXNob3BwaW5nLWJhZy0yOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTc0ZFxcXCJ9LmVsLWljb24tc2hvcHBpbmctYmFnLTE6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzRlXFxcIn0uZWwtaWNvbi1zaG9wcGluZy1jYXJ0LTI6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzRmXFxcIn0uZWwtaWNvbi1zaG9wcGluZy1jYXJ0LTE6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzUwXFxcIn0uZWwtaWNvbi1zaG9wcGluZy1jYXJ0LWZ1bGw6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzUxXFxcIn0uZWwtaWNvbi1zbW9raW5nOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTc1MlxcXCJ9LmVsLWljb24tbm8tc21va2luZzpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3NTNcXFwifS5lbC1pY29uLWhvdXNlOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTc1NFxcXCJ9LmVsLWljb24tdGFibGUtbGFtcDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3NTVcXFwifS5lbC1pY29uLXNjaG9vbDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3NTZcXFwifS5lbC1pY29uLW9mZmljZS1idWlsZGluZzpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3NTdcXFwifS5lbC1pY29uLXRvaWxldC1wYXBlcjpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3NThcXFwifS5lbC1pY29uLW5vdGVib29rLTI6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzU5XFxcIn0uZWwtaWNvbi1ub3RlYm9vay0xOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTc1YVxcXCJ9LmVsLWljb24tZmlsZXM6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzViXFxcIn0uZWwtaWNvbi1jb2xsZWN0aW9uOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTc1Y1xcXCJ9LmVsLWljb24tcmVjZWl2aW5nOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTc1ZFxcXCJ9LmVsLWljb24tc3VpdGNhc2UtMTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3NjBcXFwifS5lbC1pY29uLXN1aXRjYXNlOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTc2MVxcXCJ9LmVsLWljb24tZmlsbTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3NjNcXFwifS5lbC1pY29uLWNvbGxlY3Rpb24tdGFnOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTc2NVxcXCJ9LmVsLWljb24tZGF0YS1hbmFseXNpczpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3NjZcXFwifS5lbC1pY29uLXBpZS1jaGFydDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3NjdcXFwifS5lbC1pY29uLWRhdGEtYm9hcmQ6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzY4XFxcIn0uZWwtaWNvbi1kYXRhLWxpbmU6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzZkXFxcIn0uZWwtaWNvbi1yZWFkaW5nOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTc2OVxcXCJ9LmVsLWljb24tbWFnaWMtc3RpY2s6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzZhXFxcIn0uZWwtaWNvbi1jb29yZGluYXRlOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTc2YlxcXCJ9LmVsLWljb24tbW91c2U6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzZjXFxcIn0uZWwtaWNvbi1icnVzaDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3NmVcXFwifS5lbC1pY29uLWhlYWRzZXQ6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzZmXFxcIn0uZWwtaWNvbi11bWJyZWxsYTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3NzBcXFwifS5lbC1pY29uLXNjaXNzb3JzOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTc3MVxcXCJ9LmVsLWljb24tbW9iaWxlOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTc3M1xcXCJ9LmVsLWljb24tYXR0cmFjdDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3NzRcXFwifS5lbC1pY29uLW1vbml0b3I6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzc1XFxcIn0uZWwtaWNvbi1zZWFyY2g6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzc4XFxcIn0uZWwtaWNvbi10YWtlYXdheS1ib3g6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzdhXFxcIn0uZWwtaWNvbi1wYXBlcmNsaXA6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzdkXFxcIn0uZWwtaWNvbi1wcmludGVyOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTc3ZVxcXCJ9LmVsLWljb24tZG9jdW1lbnQtYWRkOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTc4MlxcXCJ9LmVsLWljb24tZG9jdW1lbnQ6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzg1XFxcIn0uZWwtaWNvbi1kb2N1bWVudC1jaGVja2VkOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTc4NlxcXCJ9LmVsLWljb24tZG9jdW1lbnQtY29weTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3ODdcXFwifS5lbC1pY29uLWRvY3VtZW50LWRlbGV0ZTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3ODhcXFwifS5lbC1pY29uLWRvY3VtZW50LXJlbW92ZTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3ODlcXFwifS5lbC1pY29uLXRpY2tldHM6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzhiXFxcIn0uZWwtaWNvbi1mb2xkZXItY2hlY2tlZDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3N2ZcXFwifS5lbC1pY29uLWZvbGRlci1kZWxldGU6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzgwXFxcIn0uZWwtaWNvbi1mb2xkZXItcmVtb3ZlOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTc4MVxcXCJ9LmVsLWljb24tZm9sZGVyLWFkZDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3ODNcXFwifS5lbC1pY29uLWZvbGRlci1vcGVuZWQ6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzg0XFxcIn0uZWwtaWNvbi1mb2xkZXI6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzhhXFxcIn0uZWwtaWNvbi1lZGl0LW91dGxpbmU6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzY0XFxcIn0uZWwtaWNvbi1lZGl0OmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTc4Y1xcXCJ9LmVsLWljb24tZGF0ZTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3OGVcXFwifS5lbC1pY29uLWMtc2NhbGUtdG8tb3JpZ2luYWw6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlN2M2XFxcIn0uZWwtaWNvbi12aWV3OmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTZjZVxcXCJ9LmVsLWljb24tbG9hZGluZzpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU2Y2ZcXFwifS5lbC1pY29uLXJhbms6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNmQxXFxcIn0uZWwtaWNvbi1zb3J0LWRvd246YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlN2M0XFxcIn0uZWwtaWNvbi1zb3J0LXVwOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTdjNVxcXCJ9LmVsLWljb24tc29ydDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU2ZDJcXFwifS5lbC1pY29uLWZpbmlzaGVkOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTZjZFxcXCJ9LmVsLWljb24tcmVmcmVzaC1sZWZ0OmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTZjN1xcXCJ9LmVsLWljb24tcmVmcmVzaC1yaWdodDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU2YzhcXFwifS5lbC1pY29uLXJlZnJlc2g6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNmQwXFxcIn0uZWwtaWNvbi12aWRlby1wbGF5OmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTdjMFxcXCJ9LmVsLWljb24tdmlkZW8tcGF1c2U6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlN2MxXFxcIn0uZWwtaWNvbi1kLWFycm93LXJpZ2h0OmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTZkY1xcXCJ9LmVsLWljb24tZC1hcnJvdy1sZWZ0OmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTZkZFxcXCJ9LmVsLWljb24tYXJyb3ctdXA6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNmUxXFxcIn0uZWwtaWNvbi1hcnJvdy1kb3duOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTZkZlxcXCJ9LmVsLWljb24tYXJyb3ctcmlnaHQ6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNmUwXFxcIn0uZWwtaWNvbi1hcnJvdy1sZWZ0OmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTZkZVxcXCJ9LmVsLWljb24tdG9wLXJpZ2h0OmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTZlN1xcXCJ9LmVsLWljb24tdG9wLWxlZnQ6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNmU4XFxcIn0uZWwtaWNvbi10b3A6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNmU2XFxcIn0uZWwtaWNvbi1ib3R0b206YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNmViXFxcIn0uZWwtaWNvbi1yaWdodDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU2ZTlcXFwifS5lbC1pY29uLWJhY2s6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNmVhXFxcIn0uZWwtaWNvbi1ib3R0b20tcmlnaHQ6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNmVjXFxcIn0uZWwtaWNvbi1ib3R0b20tbGVmdDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU2ZWRcXFwifS5lbC1pY29uLWNhcmV0LXRvcDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3OGZcXFwifS5lbC1pY29uLWNhcmV0LWJvdHRvbTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3OTBcXFwifS5lbC1pY29uLWNhcmV0LXJpZ2h0OmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTc5MVxcXCJ9LmVsLWljb24tY2FyZXQtbGVmdDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3OTJcXFwifS5lbC1pY29uLWQtY2FyZXQ6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzlhXFxcIn0uZWwtaWNvbi1zaGFyZTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3OTNcXFwifS5lbC1pY29uLW1lbnU6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzk4XFxcIn0uZWwtaWNvbi1zLWdyaWQ6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlN2E2XFxcIn0uZWwtaWNvbi1zLWNoZWNrOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTdhN1xcXCJ9LmVsLWljb24tcy1kYXRhOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTdhOFxcXCJ9LmVsLWljb24tcy1vcHBvcnR1bml0eTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3YWFcXFwifS5lbC1pY29uLXMtY3VzdG9tOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTdhYlxcXCJ9LmVsLWljb24tcy1jbGFpbTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3YWRcXFwifS5lbC1pY29uLXMtZmluYW5jZTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3YWVcXFwifS5lbC1pY29uLXMtY29tbWVudDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3YWZcXFwifS5lbC1pY29uLXMtZmxhZzpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3YjBcXFwifS5lbC1pY29uLXMtbWFya2V0aW5nOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTdiMVxcXCJ9LmVsLWljb24tcy1zaG9wOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTdiNFxcXCJ9LmVsLWljb24tcy1vcGVuOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTdiNVxcXCJ9LmVsLWljb24tcy1tYW5hZ2VtZW50OmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTdiNlxcXCJ9LmVsLWljb24tcy10aWNrZXQ6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlN2I3XFxcIn0uZWwtaWNvbi1zLXJlbGVhc2U6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlN2I4XFxcIn0uZWwtaWNvbi1zLWhvbWU6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlN2I5XFxcIn0uZWwtaWNvbi1zLXByb21vdGlvbjpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3YmFcXFwifS5lbC1pY29uLXMtb3BlcmF0aW9uOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTdiYlxcXCJ9LmVsLWljb24tcy11bmZvbGQ6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlN2JjXFxcIn0uZWwtaWNvbi1zLWZvbGQ6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlN2E5XFxcIn0uZWwtaWNvbi1zLXBsYXRmb3JtOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTdiZFxcXCJ9LmVsLWljb24tcy1vcmRlcjpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3YmVcXFwifS5lbC1pY29uLXMtY29vcGVyYXRpb246YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlN2JmXFxcIn0uZWwtaWNvbi1iZWxsOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTcyNVxcXCJ9LmVsLWljb24tbWVzc2FnZS1zb2xpZDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3OTlcXFwifS5lbC1pY29uLXZpZGVvLWNhbWVyYTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3NzJcXFwifS5lbC1pY29uLXZpZGVvLWNhbWVyYS1zb2xpZDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3OTZcXFwifS5lbC1pY29uLWNhbWVyYTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3NzlcXFwifS5lbC1pY29uLWNhbWVyYS1zb2xpZDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3OWJcXFwifS5lbC1pY29uLWRvd25sb2FkOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTc3Y1xcXCJ9LmVsLWljb24tdXBsb2FkMjpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3N2JcXFwifS5lbC1pY29uLXVwbG9hZDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3YzNcXFwifS5lbC1pY29uLXBpY3R1cmUtb3V0bGluZS1yb3VuZDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3NWZcXFwifS5lbC1pY29uLXBpY3R1cmUtb3V0bGluZTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3NWVcXFwifS5lbC1pY29uLXBpY3R1cmU6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzlmXFxcIn0uZWwtaWNvbi1jbG9zZTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU2ZGJcXFwifS5lbC1pY29uLWNoZWNrOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTZkYVxcXCJ9LmVsLWljb24tcGx1czpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU2ZDlcXFwifS5lbC1pY29uLW1pbnVzOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTZkOFxcXCJ9LmVsLWljb24taGVscDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3M2RcXFwifS5lbC1pY29uLXMtaGVscDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3YjNcXFwifS5lbC1pY29uLWNpcmNsZS1jbG9zZTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3OGRcXFwifS5lbC1pY29uLWNpcmNsZS1jaGVjazpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3MjBcXFwifS5lbC1pY29uLWNpcmNsZS1wbHVzLW91dGxpbmU6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzIzXFxcIn0uZWwtaWNvbi1yZW1vdmUtb3V0bGluZTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3MjJcXFwifS5lbC1pY29uLXpvb20tb3V0OmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTc3NlxcXCJ9LmVsLWljb24tem9vbS1pbjpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3NzdcXFwifS5lbC1pY29uLWVycm9yOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTc5ZFxcXCJ9LmVsLWljb24tc3VjY2VzczpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3OWNcXFwifS5lbC1pY29uLWNpcmNsZS1wbHVzOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTdhMFxcXCJ9LmVsLWljb24tcmVtb3ZlOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTdhMlxcXCJ9LmVsLWljb24taW5mbzpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3YTFcXFwifS5lbC1pY29uLXF1ZXN0aW9uOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTdhNFxcXCJ9LmVsLWljb24td2FybmluZy1vdXRsaW5lOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTZjOVxcXCJ9LmVsLWljb24td2FybmluZzpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3YTNcXFwifS5lbC1pY29uLWdvb2RzOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTdjMlxcXCJ9LmVsLWljb24tcy1nb29kczpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3YjJcXFwifS5lbC1pY29uLXN0YXItb2ZmOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTcxN1xcXCJ9LmVsLWljb24tc3Rhci1vbjpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3OTdcXFwifS5lbC1pY29uLW1vcmUtb3V0bGluZTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU2Y2NcXFwifS5lbC1pY29uLW1vcmU6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzk0XFxcIn0uZWwtaWNvbi1waG9uZS1vdXRsaW5lOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTZjYlxcXCJ9LmVsLWljb24tcGhvbmU6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzk1XFxcIn0uZWwtaWNvbi11c2VyOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTZlM1xcXCJ9LmVsLWljb24tdXNlci1zb2xpZDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3YTVcXFwifS5lbC1pY29uLXNldHRpbmc6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNmNhXFxcIn0uZWwtaWNvbi1zLXRvb2xzOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTdhY1xcXCJ9LmVsLWljb24tZGVsZXRlOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTZkN1xcXCJ9LmVsLWljb24tZGVsZXRlLXNvbGlkOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTdjOVxcXCJ9LmVsLWljb24tZWxlbWU6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlN2M3XFxcIn0uZWwtaWNvbi1wbGF0Zm9ybS1lbGVtZTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3Y2FcXFwifS5lbC1pY29uLWxvYWRpbmd7YW5pbWF0aW9uOnJvdGF0aW5nIDJzIGxpbmVhciBpbmZpbml0ZX0uZWwtaWNvbi0tcmlnaHR7bWFyZ2luLWxlZnQ6NXB4fS5lbC1pY29uLS1sZWZ0e21hcmdpbi1yaWdodDo1cHh9QGtleWZyYW1lcyByb3RhdGluZ3swJXt0cmFuc2Zvcm06cm90YXRlWigwKX0xMDAle3RyYW5zZm9ybTpyb3RhdGVaKDM2MGRlZyl9fS5lbC1wYWdpbmF0aW9ue3doaXRlLXNwYWNlOm5vd3JhcDtwYWRkaW5nOjJweCA1cHg7Y29sb3I6IzMwMzEzMztmb250LXdlaWdodDo3MDB9LmVsLXBhZ2luYXRpb246OmFmdGVyLC5lbC1wYWdpbmF0aW9uOjpiZWZvcmV7ZGlzcGxheTp0YWJsZTtjb250ZW50OlxcXCJcXFwifS5lbC1wYWdpbmF0aW9uOjphZnRlcntjbGVhcjpib3RofS5lbC1wYWdpbmF0aW9uIGJ1dHRvbiwuZWwtcGFnaW5hdGlvbiBzcGFuOm5vdChbY2xhc3MqPXN1ZmZpeF0pe2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZToxM3B4O21pbi13aWR0aDozNS41cHg7aGVpZ2h0OjI4cHg7bGluZS1oZWlnaHQ6MjhweDt2ZXJ0aWNhbC1hbGlnbjp0b3A7Ym94LXNpemluZzpib3JkZXItYm94fS5lbC1wYWdpbmF0aW9uIC5lbC1pbnB1dF9faW5uZXJ7dGV4dC1hbGlnbjpjZW50ZXI7LW1vei1hcHBlYXJhbmNlOnRleHRmaWVsZDtsaW5lLWhlaWdodDpub3JtYWx9LmVsLXBhZ2luYXRpb24gLmVsLWlucHV0X19zdWZmaXh7cmlnaHQ6MDt0cmFuc2Zvcm06c2NhbGUoLjgpfS5lbC1wYWdpbmF0aW9uIC5lbC1zZWxlY3QgLmVsLWlucHV0e3dpZHRoOjEwMHB4O21hcmdpbjowIDVweH0uZWwtcGFnaW5hdGlvbiAuZWwtc2VsZWN0IC5lbC1pbnB1dCAuZWwtaW5wdXRfX2lubmVye3BhZGRpbmctcmlnaHQ6MjVweDtib3JkZXItcmFkaXVzOjNweH0uZWwtcGFnaW5hdGlvbiBidXR0b257Ym9yZGVyOm5vbmU7cGFkZGluZzowIDZweDtiYWNrZ3JvdW5kOjAgMH0uZWwtcGFnaW5hdGlvbiBidXR0b246Zm9jdXN7b3V0bGluZTowfS5lbC1wYWdpbmF0aW9uIGJ1dHRvbjpob3Zlcntjb2xvcjojNDA5RUZGfS5lbC1wYWdpbmF0aW9uIGJ1dHRvbjpkaXNhYmxlZHtjb2xvcjojQzBDNENDO2JhY2tncm91bmQtY29sb3I6I0ZGRjtjdXJzb3I6bm90LWFsbG93ZWR9LmVsLXBhZ2luYXRpb24gLmJ0bi1uZXh0LC5lbC1wYWdpbmF0aW9uIC5idG4tcHJldntiYWNrZ3JvdW5kOmNlbnRlciBjZW50ZXIgbm8tcmVwZWF0ICNGRkY7YmFja2dyb3VuZC1zaXplOjE2cHg7Y3Vyc29yOnBvaW50ZXI7bWFyZ2luOjA7Y29sb3I6IzMwMzEzM30uZWwtcGFnaW5hdGlvbiAuYnRuLW5leHQgLmVsLWljb24sLmVsLXBhZ2luYXRpb24gLmJ0bi1wcmV2IC5lbC1pY29ue2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NzAwfS5lbC1wYWdpbmF0aW9uIC5idG4tcHJldntwYWRkaW5nLXJpZ2h0OjEycHh9LmVsLXBhZ2luYXRpb24gLmJ0bi1uZXh0e3BhZGRpbmctbGVmdDoxMnB4fS5lbC1wYWdpbmF0aW9uIC5lbC1wYWdlciBsaS5kaXNhYmxlZHtjb2xvcjojQzBDNENDO2N1cnNvcjpub3QtYWxsb3dlZH0uZWwtcGFnZXIgbGksLmVsLXBhZ2VyIGxpLmJ0bi1xdWlja25leHQ6aG92ZXIsLmVsLXBhZ2VyIGxpLmJ0bi1xdWlja3ByZXY6aG92ZXJ7Y3Vyc29yOnBvaW50ZXJ9LmVsLXBhZ2luYXRpb24tLXNtYWxsIC5idG4tbmV4dCwuZWwtcGFnaW5hdGlvbi0tc21hbGwgLmJ0bi1wcmV2LC5lbC1wYWdpbmF0aW9uLS1zbWFsbCAuZWwtcGFnZXIgbGksLmVsLXBhZ2luYXRpb24tLXNtYWxsIC5lbC1wYWdlciBsaS5idG4tcXVpY2tuZXh0LC5lbC1wYWdpbmF0aW9uLS1zbWFsbCAuZWwtcGFnZXIgbGkuYnRuLXF1aWNrcHJldiwuZWwtcGFnaW5hdGlvbi0tc21hbGwgLmVsLXBhZ2VyIGxpOmxhc3QtY2hpbGR7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjIycHg7aGVpZ2h0OjIycHg7bWluLXdpZHRoOjIycHh9LmVsLXBhZ2luYXRpb24tLXNtYWxsIC5hcnJvdy5kaXNhYmxlZHt2aXNpYmlsaXR5OmhpZGRlbn0uZWwtcGFnaW5hdGlvbi0tc21hbGwgLm1vcmU6OmJlZm9yZSwuZWwtcGFnaW5hdGlvbi0tc21hbGwgbGkubW9yZTo6YmVmb3Jle2xpbmUtaGVpZ2h0OjI0cHh9LmVsLXBhZ2luYXRpb24tLXNtYWxsIGJ1dHRvbiwuZWwtcGFnaW5hdGlvbi0tc21hbGwgc3Bhbjpub3QoW2NsYXNzKj1zdWZmaXhdKXtoZWlnaHQ6MjJweDtsaW5lLWhlaWdodDoyMnB4fS5lbC1wYWdpbmF0aW9uLS1zbWFsbCAuZWwtcGFnaW5hdGlvbl9fZWRpdG9yLC5lbC1wYWdpbmF0aW9uLS1zbWFsbCAuZWwtcGFnaW5hdGlvbl9fZWRpdG9yLmVsLWlucHV0IC5lbC1pbnB1dF9faW5uZXJ7aGVpZ2h0OjIycHh9LmVsLXBhZ2luYXRpb25fX3NpemVze21hcmdpbjowIDEwcHggMCAwO2ZvbnQtd2VpZ2h0OjQwMDtjb2xvcjojNjA2MjY2fS5lbC1wYWdpbmF0aW9uX19zaXplcyAuZWwtaW5wdXQgLmVsLWlucHV0X19pbm5lcntmb250LXNpemU6MTNweDtwYWRkaW5nLWxlZnQ6OHB4fS5lbC1wYWdpbmF0aW9uX19zaXplcyAuZWwtaW5wdXQgLmVsLWlucHV0X19pbm5lcjpob3Zlcntib3JkZXItY29sb3I6IzQwOUVGRn0uZWwtcGFnaW5hdGlvbl9fdG90YWx7bWFyZ2luLXJpZ2h0OjEwcHg7Zm9udC13ZWlnaHQ6NDAwO2NvbG9yOiM2MDYyNjZ9LmVsLXBhZ2luYXRpb25fX2p1bXB7bWFyZ2luLWxlZnQ6MjRweDtmb250LXdlaWdodDo0MDA7Y29sb3I6IzYwNjI2Nn0uZWwtcGFnaW5hdGlvbl9fanVtcCAuZWwtaW5wdXRfX2lubmVye3BhZGRpbmc6MCAzcHh9LmVsLXBhZ2luYXRpb25fX3JpZ2h0d3JhcHBlcntmbG9hdDpyaWdodH0uZWwtcGFnaW5hdGlvbl9fZWRpdG9ye2xpbmUtaGVpZ2h0OjE4cHg7cGFkZGluZzowIDJweDtoZWlnaHQ6MjhweDt0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW46MCAycHg7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlci1yYWRpdXM6M3B4fS5lbC1wYWdlciwuZWwtcGFnaW5hdGlvbi5pcy1iYWNrZ3JvdW5kIC5idG4tbmV4dCwuZWwtcGFnaW5hdGlvbi5pcy1iYWNrZ3JvdW5kIC5idG4tcHJldntwYWRkaW5nOjB9LmVsLWRpYWxvZywuZWwtcGFnZXIgbGl7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3h9LmVsLXBhZ2luYXRpb25fX2VkaXRvci5lbC1pbnB1dHt3aWR0aDo1MHB4fS5lbC1wYWdpbmF0aW9uX19lZGl0b3IuZWwtaW5wdXQgLmVsLWlucHV0X19pbm5lcntoZWlnaHQ6MjhweH0uZWwtcGFnaW5hdGlvbl9fZWRpdG9yIC5lbC1pbnB1dF9faW5uZXI6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sLmVsLXBhZ2luYXRpb25fX2VkaXRvciAuZWwtaW5wdXRfX2lubmVyOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lO21hcmdpbjowfS5lbC1wYWdpbmF0aW9uLmlzLWJhY2tncm91bmQgLmJ0bi1uZXh0LC5lbC1wYWdpbmF0aW9uLmlzLWJhY2tncm91bmQgLmJ0bi1wcmV2LC5lbC1wYWdpbmF0aW9uLmlzLWJhY2tncm91bmQgLmVsLXBhZ2VyIGxpe21hcmdpbjowIDVweDtiYWNrZ3JvdW5kLWNvbG9yOiNmNGY0ZjU7Y29sb3I6IzYwNjI2NjttaW4td2lkdGg6MzBweDtib3JkZXItcmFkaXVzOjJweH0uZWwtcGFnaW5hdGlvbi5pcy1iYWNrZ3JvdW5kIC5idG4tbmV4dC5kaXNhYmxlZCwuZWwtcGFnaW5hdGlvbi5pcy1iYWNrZ3JvdW5kIC5idG4tbmV4dDpkaXNhYmxlZCwuZWwtcGFnaW5hdGlvbi5pcy1iYWNrZ3JvdW5kIC5idG4tcHJldi5kaXNhYmxlZCwuZWwtcGFnaW5hdGlvbi5pcy1iYWNrZ3JvdW5kIC5idG4tcHJldjpkaXNhYmxlZCwuZWwtcGFnaW5hdGlvbi5pcy1iYWNrZ3JvdW5kIC5lbC1wYWdlciBsaS5kaXNhYmxlZHtjb2xvcjojQzBDNENDfS5lbC1wYWdpbmF0aW9uLmlzLWJhY2tncm91bmQgLmVsLXBhZ2VyIGxpOm5vdCguZGlzYWJsZWQpOmhvdmVye2NvbG9yOiM0MDlFRkZ9LmVsLXBhZ2luYXRpb24uaXMtYmFja2dyb3VuZCAuZWwtcGFnZXIgbGk6bm90KC5kaXNhYmxlZCkuYWN0aXZle2JhY2tncm91bmQtY29sb3I6IzQwOUVGRjtjb2xvcjojRkZGfS5lbC1wYWdpbmF0aW9uLmlzLWJhY2tncm91bmQuZWwtcGFnaW5hdGlvbi0tc21hbGwgLmJ0bi1uZXh0LC5lbC1wYWdpbmF0aW9uLmlzLWJhY2tncm91bmQuZWwtcGFnaW5hdGlvbi0tc21hbGwgLmJ0bi1wcmV2LC5lbC1wYWdpbmF0aW9uLmlzLWJhY2tncm91bmQuZWwtcGFnaW5hdGlvbi0tc21hbGwgLmVsLXBhZ2VyIGxpe21hcmdpbjowIDNweDttaW4td2lkdGg6MjJweH0uZWwtcGFnZXIsLmVsLXBhZ2VyIGxpe3ZlcnRpY2FsLWFsaWduOnRvcDttYXJnaW46MDtkaXNwbGF5OmlubGluZS1ibG9ja30uZWwtcGFnZXJ7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2xpc3Qtc3R5bGU6bm9uZTtmb250LXNpemU6MH0uZWwtcGFnZXIgLm1vcmU6OmJlZm9yZXtsaW5lLWhlaWdodDozMHB4fS5lbC1wYWdlciBsaXtwYWRkaW5nOjAgNHB4O2JhY2tncm91bmQ6I0ZGRjtmb250LXNpemU6MTNweDttaW4td2lkdGg6MzUuNXB4O2hlaWdodDoyOHB4O2xpbmUtaGVpZ2h0OjI4cHg7Ym94LXNpemluZzpib3JkZXItYm94O3RleHQtYWxpZ246Y2VudGVyfS5lbC1wYWdlciBsaS5idG4tcXVpY2tuZXh0LC5lbC1wYWdlciBsaS5idG4tcXVpY2twcmV2e2xpbmUtaGVpZ2h0OjI4cHg7Y29sb3I6IzMwMzEzM30uZWwtcGFnZXIgbGkuYnRuLXF1aWNrbmV4dC5kaXNhYmxlZCwuZWwtcGFnZXIgbGkuYnRuLXF1aWNrcHJldi5kaXNhYmxlZHtjb2xvcjojQzBDNENDfS5lbC1wYWdlciBsaS5hY3RpdmUrbGl7Ym9yZGVyLWxlZnQ6MH0uZWwtcGFnZXIgbGk6aG92ZXJ7Y29sb3I6IzQwOUVGRn0uZWwtcGFnZXIgbGkuYWN0aXZle2NvbG9yOiM0MDlFRkY7Y3Vyc29yOmRlZmF1bHR9LmVsLWRpYWxvZ3twb3NpdGlvbjpyZWxhdGl2ZTttYXJnaW46MCBhdXRvIDUwcHg7YmFja2dyb3VuZDojRkZGO2JvcmRlci1yYWRpdXM6MnB4O2JveC1zaGFkb3c6MCAxcHggM3B4IHJnYmEoMCwwLDAsLjMpO2JveC1zaXppbmc6Ym9yZGVyLWJveDt3aWR0aDo1MCV9LmVsLWRpYWxvZy5pcy1mdWxsc2NyZWVue3dpZHRoOjEwMCU7bWFyZ2luLXRvcDowO21hcmdpbi1ib3R0b206MDtoZWlnaHQ6MTAwJTtvdmVyZmxvdzphdXRvfS5lbC1kaWFsb2dfX3dyYXBwZXJ7cG9zaXRpb246Zml4ZWQ7dG9wOjA7cmlnaHQ6MDtib3R0b206MDtsZWZ0OjA7b3ZlcmZsb3c6YXV0bzttYXJnaW46MH0uZWwtZGlhbG9nX19oZWFkZXJ7cGFkZGluZzoyMHB4IDIwcHggMTBweH0uZWwtZGlhbG9nX19oZWFkZXJidG57cG9zaXRpb246YWJzb2x1dGU7dG9wOjIwcHg7cmlnaHQ6MjBweDtwYWRkaW5nOjA7YmFja2dyb3VuZDowIDA7Ym9yZGVyOm5vbmU7b3V0bGluZTowO2N1cnNvcjpwb2ludGVyO2ZvbnQtc2l6ZToxNnB4fS5lbC1kaWFsb2dfX2hlYWRlcmJ0biAuZWwtZGlhbG9nX19jbG9zZXtjb2xvcjojOTA5Mzk5fS5lbC1kaWFsb2dfX2hlYWRlcmJ0bjpmb2N1cyAuZWwtZGlhbG9nX19jbG9zZSwuZWwtZGlhbG9nX19oZWFkZXJidG46aG92ZXIgLmVsLWRpYWxvZ19fY2xvc2V7Y29sb3I6IzQwOUVGRn0uZWwtZGlhbG9nX190aXRsZXtsaW5lLWhlaWdodDoyNHB4O2ZvbnQtc2l6ZToxOHB4O2NvbG9yOiMzMDMxMzN9LmVsLWRpYWxvZ19fYm9keXtwYWRkaW5nOjMwcHggMjBweDtjb2xvcjojNjA2MjY2O2ZvbnQtc2l6ZToxNHB4O3dvcmQtYnJlYWs6YnJlYWstYWxsfS5lbC1kaWFsb2dfX2Zvb3RlcntwYWRkaW5nOjEwcHggMjBweCAyMHB4O3RleHQtYWxpZ246cmlnaHQ7Ym94LXNpemluZzpib3JkZXItYm94fS5lbC1kaWFsb2ctLWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlcn0uZWwtZGlhbG9nLS1jZW50ZXIgLmVsLWRpYWxvZ19fYm9keXt0ZXh0LWFsaWduOmluaXRpYWw7cGFkZGluZzoyNXB4IDI1cHggMzBweH0uZWwtZGlhbG9nLS1jZW50ZXIgLmVsLWRpYWxvZ19fZm9vdGVye3RleHQtYWxpZ246aW5oZXJpdH0uZGlhbG9nLWZhZGUtZW50ZXItYWN0aXZle2FuaW1hdGlvbjpkaWFsb2ctZmFkZS1pbiAuM3N9LmRpYWxvZy1mYWRlLWxlYXZlLWFjdGl2ZXthbmltYXRpb246ZGlhbG9nLWZhZGUtb3V0IC4zc31Aa2V5ZnJhbWVzIGRpYWxvZy1mYWRlLWluezAle3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLC0yMHB4LDApO29wYWNpdHk6MH0xMDAle3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLDAsMCk7b3BhY2l0eToxfX1Aa2V5ZnJhbWVzIGRpYWxvZy1mYWRlLW91dHswJXt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwwLDApO29wYWNpdHk6MX0xMDAle3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLC0yMHB4LDApO29wYWNpdHk6MH19LmVsLWF1dG9jb21wbGV0ZXtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmlubGluZS1ibG9ja30uZWwtYXV0b2NvbXBsZXRlLXN1Z2dlc3Rpb257bWFyZ2luOjVweCAwO2JveC1zaGFkb3c6MCAycHggMTJweCAwIHJnYmEoMCwwLDAsLjEpO2JvcmRlci1yYWRpdXM6NHB4O2JvcmRlcjoxcHggc29saWQgI0U0RTdFRDtib3gtc2l6aW5nOmJvcmRlci1ib3g7YmFja2dyb3VuZC1jb2xvcjojRkZGfS5lbC1hdXRvY29tcGxldGUtc3VnZ2VzdGlvbl9fd3JhcHttYXgtaGVpZ2h0OjI4MHB4O3BhZGRpbmc6MTBweCAwO2JveC1zaXppbmc6Ym9yZGVyLWJveH0uZWwtYXV0b2NvbXBsZXRlLXN1Z2dlc3Rpb25fX2xpc3R7bWFyZ2luOjA7cGFkZGluZzowfS5lbC1hdXRvY29tcGxldGUtc3VnZ2VzdGlvbiBsaXtwYWRkaW5nOjAgMjBweDttYXJnaW46MDtsaW5lLWhlaWdodDozNHB4O2N1cnNvcjpwb2ludGVyO2NvbG9yOiM2MDYyNjY7Zm9udC1zaXplOjE0cHg7bGlzdC1zdHlsZTpub25lO3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpc30uZWwtYXV0b2NvbXBsZXRlLXN1Z2dlc3Rpb24gbGkuaGlnaGxpZ2h0ZWQsLmVsLWF1dG9jb21wbGV0ZS1zdWdnZXN0aW9uIGxpOmhvdmVye2JhY2tncm91bmQtY29sb3I6I0Y1RjdGQX0uZWwtYXV0b2NvbXBsZXRlLXN1Z2dlc3Rpb24gbGkuZGl2aWRlcnttYXJnaW4tdG9wOjZweDtib3JkZXItdG9wOjFweCBzb2xpZCAjMDAwfS5lbC1hdXRvY29tcGxldGUtc3VnZ2VzdGlvbiBsaS5kaXZpZGVyOmxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTotNnB4fS5lbC1hdXRvY29tcGxldGUtc3VnZ2VzdGlvbi5pcy1sb2FkaW5nIGxpe3RleHQtYWxpZ246Y2VudGVyO2hlaWdodDoxMDBweDtsaW5lLWhlaWdodDoxMDBweDtmb250LXNpemU6MjBweDtjb2xvcjojOTk5fS5lbC1hdXRvY29tcGxldGUtc3VnZ2VzdGlvbi5pcy1sb2FkaW5nIGxpOjphZnRlcntkaXNwbGF5OmlubGluZS1ibG9jaztjb250ZW50OlxcXCJcXFwiO2hlaWdodDoxMDAlO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uZWwtYXV0b2NvbXBsZXRlLXN1Z2dlc3Rpb24uaXMtbG9hZGluZyBsaTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNGRkZ9LmVsLWF1dG9jb21wbGV0ZS1zdWdnZXN0aW9uLmlzLWxvYWRpbmcgLmVsLWljb24tbG9hZGluZ3t2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmVsLWRyb3Bkb3due2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO2NvbG9yOiM2MDYyNjY7Zm9udC1zaXplOjE0cHh9LmVsLWRyb3Bkb3duIC5lbC1idXR0b24tZ3JvdXB7ZGlzcGxheTpibG9ja30uZWwtZHJvcGRvd24gLmVsLWJ1dHRvbi1ncm91cCAuZWwtYnV0dG9ue2Zsb2F0Om5vbmV9LmVsLWRyb3Bkb3duIC5lbC1kcm9wZG93bl9fY2FyZXQtYnV0dG9ue3BhZGRpbmctbGVmdDo1cHg7cGFkZGluZy1yaWdodDo1cHg7cG9zaXRpb246cmVsYXRpdmU7Ym9yZGVyLWxlZnQ6bm9uZX0uZWwtZHJvcGRvd24gLmVsLWRyb3Bkb3duX19jYXJldC1idXR0b246OmJlZm9yZXtjb250ZW50OicnO3Bvc2l0aW9uOmFic29sdXRlO2Rpc3BsYXk6YmxvY2s7d2lkdGg6MXB4O3RvcDo1cHg7Ym90dG9tOjVweDtsZWZ0OjA7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC41KX0uZWwtZHJvcGRvd24gLmVsLWRyb3Bkb3duX19jYXJldC1idXR0b24uZWwtYnV0dG9uLS1kZWZhdWx0OjpiZWZvcmV7YmFja2dyb3VuZDpyZ2JhKDIyMCwyMjMsMjMwLC41KX0uZWwtZHJvcGRvd24gLmVsLWRyb3Bkb3duX19jYXJldC1idXR0b246aG92ZXI6bm90KC5pcy1kaXNhYmxlZCk6OmJlZm9yZXt0b3A6MDtib3R0b206MH0uZWwtZHJvcGRvd24gLmVsLWRyb3Bkb3duX19jYXJldC1idXR0b24gLmVsLWRyb3Bkb3duX19pY29ue3BhZGRpbmctbGVmdDowfS5lbC1kcm9wZG93bl9faWNvbntmb250LXNpemU6MTJweDttYXJnaW46MCAzcHh9LmVsLWRyb3Bkb3duIC5lbC1kcm9wZG93bi1zZWxmZGVmaW5lOmZvY3VzOmFjdGl2ZSwuZWwtZHJvcGRvd24gLmVsLWRyb3Bkb3duLXNlbGZkZWZpbmU6Zm9jdXM6bm90KC5mb2N1c2luZyl7b3V0bGluZS13aWR0aDowfS5lbC1kcm9wZG93biBbZGlzYWJsZWRde2N1cnNvcjpub3QtYWxsb3dlZDtjb2xvcjojYmJifS5lbC1kcm9wZG93bi1tZW51e3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDt6LWluZGV4OjEwO3BhZGRpbmc6MTBweCAwO21hcmdpbjo1cHggMDtiYWNrZ3JvdW5kLWNvbG9yOiNGRkY7Ym9yZGVyOjFweCBzb2xpZCAjRUJFRUY1O2JvcmRlci1yYWRpdXM6NHB4O2JveC1zaGFkb3c6MCAycHggMTJweCAwIHJnYmEoMCwwLDAsLjEpfS5lbC1kcm9wZG93bi1tZW51X19pdGVtLC5lbC1tZW51LWl0ZW17Zm9udC1zaXplOjE0cHg7cGFkZGluZzowIDIwcHg7Y3Vyc29yOnBvaW50ZXJ9LmVsLWRyb3Bkb3duLW1lbnVfX2l0ZW17bGlzdC1zdHlsZTpub25lO2xpbmUtaGVpZ2h0OjM2cHg7bWFyZ2luOjA7Y29sb3I6IzYwNjI2NjtvdXRsaW5lOjB9LmVsLWRyb3Bkb3duLW1lbnVfX2l0ZW06Zm9jdXMsLmVsLWRyb3Bkb3duLW1lbnVfX2l0ZW06bm90KC5pcy1kaXNhYmxlZCk6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZWNmNWZmO2NvbG9yOiM2NmIxZmZ9LmVsLWRyb3Bkb3duLW1lbnVfX2l0ZW0gaXttYXJnaW4tcmlnaHQ6NXB4fS5lbC1kcm9wZG93bi1tZW51X19pdGVtLS1kaXZpZGVke3Bvc2l0aW9uOnJlbGF0aXZlO21hcmdpbi10b3A6NnB4O2JvcmRlci10b3A6MXB4IHNvbGlkICNFQkVFRjV9LmVsLWRyb3Bkb3duLW1lbnVfX2l0ZW0tLWRpdmlkZWQ6YmVmb3Jle2NvbnRlbnQ6Jyc7aGVpZ2h0OjZweDtkaXNwbGF5OmJsb2NrO21hcmdpbjowIC0yMHB4O2JhY2tncm91bmQtY29sb3I6I0ZGRn0uZWwtZHJvcGRvd24tbWVudV9faXRlbS5pcy1kaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdDtjb2xvcjojYmJiO3BvaW50ZXItZXZlbnRzOm5vbmV9LmVsLWRyb3Bkb3duLW1lbnUtLW1lZGl1bXtwYWRkaW5nOjZweCAwfS5lbC1kcm9wZG93bi1tZW51LS1tZWRpdW0gLmVsLWRyb3Bkb3duLW1lbnVfX2l0ZW17bGluZS1oZWlnaHQ6MzBweDtwYWRkaW5nOjAgMTdweDtmb250LXNpemU6MTRweH0uZWwtZHJvcGRvd24tbWVudS0tbWVkaXVtIC5lbC1kcm9wZG93bi1tZW51X19pdGVtLmVsLWRyb3Bkb3duLW1lbnVfX2l0ZW0tLWRpdmlkZWR7bWFyZ2luLXRvcDo2cHh9LmVsLWRyb3Bkb3duLW1lbnUtLW1lZGl1bSAuZWwtZHJvcGRvd24tbWVudV9faXRlbS5lbC1kcm9wZG93bi1tZW51X19pdGVtLS1kaXZpZGVkOmJlZm9yZXtoZWlnaHQ6NnB4O21hcmdpbjowIC0xN3B4fS5lbC1kcm9wZG93bi1tZW51LS1zbWFsbHtwYWRkaW5nOjZweCAwfS5lbC1kcm9wZG93bi1tZW51LS1zbWFsbCAuZWwtZHJvcGRvd24tbWVudV9faXRlbXtsaW5lLWhlaWdodDoyN3B4O3BhZGRpbmc6MCAxNXB4O2ZvbnQtc2l6ZToxM3B4fS5lbC1kcm9wZG93bi1tZW51LS1zbWFsbCAuZWwtZHJvcGRvd24tbWVudV9faXRlbS5lbC1kcm9wZG93bi1tZW51X19pdGVtLS1kaXZpZGVke21hcmdpbi10b3A6NHB4fS5lbC1kcm9wZG93bi1tZW51LS1zbWFsbCAuZWwtZHJvcGRvd24tbWVudV9faXRlbS5lbC1kcm9wZG93bi1tZW51X19pdGVtLS1kaXZpZGVkOmJlZm9yZXtoZWlnaHQ6NHB4O21hcmdpbjowIC0xNXB4fS5lbC1kcm9wZG93bi1tZW51LS1taW5pe3BhZGRpbmc6M3B4IDB9LmVsLWRyb3Bkb3duLW1lbnUtLW1pbmkgLmVsLWRyb3Bkb3duLW1lbnVfX2l0ZW17bGluZS1oZWlnaHQ6MjRweDtwYWRkaW5nOjAgMTBweDtmb250LXNpemU6MTJweH0uZWwtZHJvcGRvd24tbWVudS0tbWluaSAuZWwtZHJvcGRvd24tbWVudV9faXRlbS5lbC1kcm9wZG93bi1tZW51X19pdGVtLS1kaXZpZGVke21hcmdpbi10b3A6M3B4fS5lbC1kcm9wZG93bi1tZW51LS1taW5pIC5lbC1kcm9wZG93bi1tZW51X19pdGVtLmVsLWRyb3Bkb3duLW1lbnVfX2l0ZW0tLWRpdmlkZWQ6YmVmb3Jle2hlaWdodDozcHg7bWFyZ2luOjAgLTEwcHh9LmVsLW1lbnV7Ym9yZGVyLXJpZ2h0OnNvbGlkIDFweCAjZTZlNmU2O2xpc3Qtc3R5bGU6bm9uZTtwb3NpdGlvbjpyZWxhdGl2ZTttYXJnaW46MDtwYWRkaW5nLWxlZnQ6MDtiYWNrZ3JvdW5kLWNvbG9yOiNGRkZ9LmVsLW1lbnUtLWhvcml6b250YWw+LmVsLW1lbnUtaXRlbTpub3QoLmlzLWRpc2FibGVkKTpmb2N1cywuZWwtbWVudS0taG9yaXpvbnRhbD4uZWwtbWVudS1pdGVtOm5vdCguaXMtZGlzYWJsZWQpOmhvdmVyLC5lbC1tZW51LS1ob3Jpem9udGFsPi5lbC1zdWJtZW51IC5lbC1zdWJtZW51X190aXRsZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9LmVsLW1lbnU6OmFmdGVyLC5lbC1tZW51OjpiZWZvcmV7ZGlzcGxheTp0YWJsZTtjb250ZW50OlxcXCJcXFwifS5lbC1icmVhZGNydW1iX19pdGVtOmxhc3QtY2hpbGQgLmVsLWJyZWFkY3J1bWJfX3NlcGFyYXRvciwuZWwtbWVudS0tY29sbGFwc2U+LmVsLW1lbnUtaXRlbSAuZWwtc3VibWVudV9faWNvbi1hcnJvdywuZWwtbWVudS0tY29sbGFwc2U+LmVsLXN1Ym1lbnU+LmVsLXN1Ym1lbnVfX3RpdGxlIC5lbC1zdWJtZW51X19pY29uLWFycm93e2Rpc3BsYXk6bm9uZX0uZWwtbWVudTo6YWZ0ZXJ7Y2xlYXI6Ym90aH0uZWwtbWVudS5lbC1tZW51LS1ob3Jpem9udGFse2JvcmRlci1ib3R0b206c29saWQgMXB4ICNlNmU2ZTZ9LmVsLW1lbnUtLWhvcml6b250YWx7Ym9yZGVyLXJpZ2h0Om5vbmV9LmVsLW1lbnUtLWhvcml6b250YWw+LmVsLW1lbnUtaXRlbXtmbG9hdDpsZWZ0O2hlaWdodDo2MHB4O2xpbmUtaGVpZ2h0OjYwcHg7bWFyZ2luOjA7Ym9yZGVyLWJvdHRvbToycHggc29saWQgdHJhbnNwYXJlbnQ7Y29sb3I6IzkwOTM5OX0uZWwtbWVudS0taG9yaXpvbnRhbD4uZWwtbWVudS1pdGVtIGEsLmVsLW1lbnUtLWhvcml6b250YWw+LmVsLW1lbnUtaXRlbSBhOmhvdmVye2NvbG9yOmluaGVyaXR9LmVsLW1lbnUtLWhvcml6b250YWw+LmVsLXN1Ym1lbnV7ZmxvYXQ6bGVmdH0uZWwtbWVudS0taG9yaXpvbnRhbD4uZWwtc3VibWVudTpmb2N1cywuZWwtbWVudS0taG9yaXpvbnRhbD4uZWwtc3VibWVudTpob3ZlcntvdXRsaW5lOjB9LmVsLW1lbnUtLWhvcml6b250YWw+LmVsLXN1Ym1lbnU6Zm9jdXMgLmVsLXN1Ym1lbnVfX3RpdGxlLC5lbC1tZW51LS1ob3Jpem9udGFsPi5lbC1zdWJtZW51OmhvdmVyIC5lbC1zdWJtZW51X190aXRsZXtjb2xvcjojMzAzMTMzfS5lbC1tZW51LS1ob3Jpem9udGFsPi5lbC1zdWJtZW51LmlzLWFjdGl2ZSAuZWwtc3VibWVudV9fdGl0bGV7Ym9yZGVyLWJvdHRvbToycHggc29saWQgIzQwOUVGRjtjb2xvcjojMzAzMTMzfS5lbC1tZW51LS1ob3Jpem9udGFsPi5lbC1zdWJtZW51IC5lbC1zdWJtZW51X190aXRsZXtoZWlnaHQ6NjBweDtsaW5lLWhlaWdodDo2MHB4O2JvcmRlci1ib3R0b206MnB4IHNvbGlkIHRyYW5zcGFyZW50O2NvbG9yOiM5MDkzOTl9LmVsLW1lbnUtLWhvcml6b250YWw+LmVsLXN1Ym1lbnUgLmVsLXN1Ym1lbnVfX2ljb24tYXJyb3d7cG9zaXRpb246c3RhdGljO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTttYXJnaW4tbGVmdDo4cHg7bWFyZ2luLXRvcDotM3B4fS5lbC1tZW51LS1jb2xsYXBzZSAuZWwtc3VibWVudSwuZWwtbWVudS1pdGVte3Bvc2l0aW9uOnJlbGF0aXZlfS5lbC1tZW51LS1ob3Jpem9udGFsIC5lbC1tZW51IC5lbC1tZW51LWl0ZW0sLmVsLW1lbnUtLWhvcml6b250YWwgLmVsLW1lbnUgLmVsLXN1Ym1lbnVfX3RpdGxle2JhY2tncm91bmQtY29sb3I6I0ZGRjtmbG9hdDpub25lO2hlaWdodDozNnB4O2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDEwcHg7Y29sb3I6IzkwOTM5OX0uZWwtbWVudS0taG9yaXpvbnRhbCAuZWwtbWVudSAuZWwtbWVudS1pdGVtLmlzLWFjdGl2ZSwuZWwtbWVudS0taG9yaXpvbnRhbCAuZWwtbWVudSAuZWwtc3VibWVudS5pcy1hY3RpdmU+LmVsLXN1Ym1lbnVfX3RpdGxle2NvbG9yOiMzMDMxMzN9LmVsLW1lbnUtLWhvcml6b250YWwgLmVsLW1lbnUtaXRlbTpub3QoLmlzLWRpc2FibGVkKTpmb2N1cywuZWwtbWVudS0taG9yaXpvbnRhbCAuZWwtbWVudS1pdGVtOm5vdCguaXMtZGlzYWJsZWQpOmhvdmVye291dGxpbmU6MDtjb2xvcjojMzAzMTMzfS5lbC1tZW51LS1ob3Jpem9udGFsPi5lbC1tZW51LWl0ZW0uaXMtYWN0aXZle2JvcmRlci1ib3R0b206MnB4IHNvbGlkICM0MDlFRkY7Y29sb3I6IzMwMzEzM30uZWwtbWVudS0tY29sbGFwc2V7d2lkdGg6NjRweH0uZWwtbWVudS0tY29sbGFwc2U+LmVsLW1lbnUtaXRlbSBbY2xhc3NePWVsLWljb24tXSwuZWwtbWVudS0tY29sbGFwc2U+LmVsLXN1Ym1lbnU+LmVsLXN1Ym1lbnVfX3RpdGxlIFtjbGFzc149ZWwtaWNvbi1de21hcmdpbjowO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDoyNHB4O3RleHQtYWxpZ246Y2VudGVyfS5lbC1tZW51LS1jb2xsYXBzZT4uZWwtbWVudS1pdGVtIHNwYW4sLmVsLW1lbnUtLWNvbGxhcHNlPi5lbC1zdWJtZW51Pi5lbC1zdWJtZW51X190aXRsZSBzcGFue2hlaWdodDowO3dpZHRoOjA7b3ZlcmZsb3c6aGlkZGVuO3Zpc2liaWxpdHk6aGlkZGVuO2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5lbC1tZW51LWl0ZW0sLmVsLXN1Ym1lbnVfX3RpdGxle2hlaWdodDo1NnB4O2xpbmUtaGVpZ2h0OjU2cHg7bGlzdC1zdHlsZTpub25lfS5lbC1tZW51LS1jb2xsYXBzZT4uZWwtbWVudS1pdGVtLmlzLWFjdGl2ZSBpe2NvbG9yOmluaGVyaXR9LmVsLW1lbnUtLWNvbGxhcHNlIC5lbC1tZW51IC5lbC1zdWJtZW51e21pbi13aWR0aDoyMDBweH0uZWwtbWVudS0tY29sbGFwc2UgLmVsLXN1Ym1lbnUgLmVsLW1lbnV7cG9zaXRpb246YWJzb2x1dGU7bWFyZ2luLWxlZnQ6NXB4O3RvcDowO2xlZnQ6MTAwJTt6LWluZGV4OjEwO2JvcmRlcjoxcHggc29saWQgI0U0RTdFRDtib3JkZXItcmFkaXVzOjJweDtib3gtc2hhZG93OjAgMnB4IDEycHggMCByZ2JhKDAsMCwwLC4xKX0uZWwtbWVudS0tY29sbGFwc2UgLmVsLXN1Ym1lbnUuaXMtb3BlbmVkPi5lbC1zdWJtZW51X190aXRsZSAuZWwtc3VibWVudV9faWNvbi1hcnJvd3t0cmFuc2Zvcm06bm9uZX0uZWwtbWVudS0tcG9wdXB7ei1pbmRleDoxMDA7bWluLXdpZHRoOjIwMHB4O2JvcmRlcjpub25lO3BhZGRpbmc6NXB4IDA7Ym9yZGVyLXJhZGl1czoycHg7Ym94LXNoYWRvdzowIDJweCAxMnB4IDAgcmdiYSgwLDAsMCwuMSl9LmVsLW1lbnUtLXBvcHVwLWJvdHRvbS1zdGFydHttYXJnaW4tdG9wOjVweH0uZWwtbWVudS0tcG9wdXAtcmlnaHQtc3RhcnR7bWFyZ2luLWxlZnQ6NXB4O21hcmdpbi1yaWdodDo1cHh9LmVsLW1lbnUtaXRlbXtjb2xvcjojMzAzMTMzO3RyYW5zaXRpb246Ym9yZGVyLWNvbG9yIC4zcyxiYWNrZ3JvdW5kLWNvbG9yIC4zcyxjb2xvciAuM3M7Ym94LXNpemluZzpib3JkZXItYm94O3doaXRlLXNwYWNlOm5vd3JhcH0uZWwtcmFkaW8tYnV0dG9uX19pbm5lciwuZWwtc3VibWVudV9fdGl0bGV7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXRpdmU7d2hpdGUtc3BhY2U6bm93cmFwfS5lbC1tZW51LWl0ZW0gKnt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmVsLW1lbnUtaXRlbSBpe2NvbG9yOiM5MDkzOTl9LmVsLW1lbnUtaXRlbTpmb2N1cywuZWwtbWVudS1pdGVtOmhvdmVye291dGxpbmU6MDtiYWNrZ3JvdW5kLWNvbG9yOiNlY2Y1ZmZ9LmVsLW1lbnUtaXRlbS5pcy1kaXNhYmxlZHtvcGFjaXR5Oi4yNTtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZDowIDAhaW1wb3J0YW50fS5lbC1tZW51LWl0ZW0gW2NsYXNzXj1lbC1pY29uLV17bWFyZ2luLXJpZ2h0OjVweDt3aWR0aDoyNHB4O3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtc2l6ZToxOHB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uZWwtbWVudS1pdGVtLmlzLWFjdGl2ZXtjb2xvcjojNDA5RUZGfS5lbC1tZW51LWl0ZW0uaXMtYWN0aXZlIGl7Y29sb3I6aW5oZXJpdH0uZWwtc3VibWVudXtsaXN0LXN0eWxlOm5vbmU7bWFyZ2luOjA7cGFkZGluZy1sZWZ0OjB9LmVsLXN1Ym1lbnVfX3RpdGxle2ZvbnQtc2l6ZToxNHB4O2NvbG9yOiMzMDMxMzM7cGFkZGluZzowIDIwcHg7Y3Vyc29yOnBvaW50ZXI7dHJhbnNpdGlvbjpib3JkZXItY29sb3IgLjNzLGJhY2tncm91bmQtY29sb3IgLjNzLGNvbG9yIC4zcztib3gtc2l6aW5nOmJvcmRlci1ib3h9LmVsLXN1Ym1lbnVfX3RpdGxlICp7dmVydGljYWwtYWxpZ246bWlkZGxlfS5lbC1zdWJtZW51X190aXRsZSBpe2NvbG9yOiM5MDkzOTl9LmVsLXN1Ym1lbnVfX3RpdGxlOmZvY3VzLC5lbC1zdWJtZW51X190aXRsZTpob3ZlcntvdXRsaW5lOjA7YmFja2dyb3VuZC1jb2xvcjojZWNmNWZmfS5lbC1zdWJtZW51X190aXRsZS5pcy1kaXNhYmxlZHtvcGFjaXR5Oi4yNTtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZDowIDAhaW1wb3J0YW50fS5lbC1zdWJtZW51X190aXRsZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNlY2Y1ZmZ9LmVsLXN1Ym1lbnUgLmVsLW1lbnV7Ym9yZGVyOm5vbmV9LmVsLXN1Ym1lbnUgLmVsLW1lbnUtaXRlbXtoZWlnaHQ6NTBweDtsaW5lLWhlaWdodDo1MHB4O3BhZGRpbmc6MCA0NXB4O21pbi13aWR0aDoyMDBweH0uZWwtc3VibWVudV9faWNvbi1hcnJvd3twb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3JpZ2h0OjIwcHg7bWFyZ2luLXRvcDotN3B4O3RyYW5zaXRpb246dHJhbnNmb3JtIC4zcztmb250LXNpemU6MTJweH0uZWwtc3VibWVudS5pcy1hY3RpdmUgLmVsLXN1Ym1lbnVfX3RpdGxle2JvcmRlci1ib3R0b20tY29sb3I6IzQwOUVGRn0uZWwtc3VibWVudS5pcy1vcGVuZWQ+LmVsLXN1Ym1lbnVfX3RpdGxlIC5lbC1zdWJtZW51X19pY29uLWFycm93e3RyYW5zZm9ybTpyb3RhdGVaKDE4MGRlZyl9LmVsLXN1Ym1lbnUuaXMtZGlzYWJsZWQgLmVsLW1lbnUtaXRlbSwuZWwtc3VibWVudS5pcy1kaXNhYmxlZCAuZWwtc3VibWVudV9fdGl0bGV7b3BhY2l0eTouMjU7Y3Vyc29yOm5vdC1hbGxvd2VkO2JhY2tncm91bmQ6MCAwIWltcG9ydGFudH0uZWwtc3VibWVudSBbY2xhc3NePWVsLWljb24tXXt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7bWFyZ2luLXJpZ2h0OjVweDt3aWR0aDoyNHB4O3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtc2l6ZToxOHB4fS5lbC1tZW51LWl0ZW0tZ3JvdXA+dWx7cGFkZGluZzowfS5lbC1tZW51LWl0ZW0tZ3JvdXBfX3RpdGxle3BhZGRpbmc6N3B4IDAgN3B4IDIwcHg7bGluZS1oZWlnaHQ6bm9ybWFsO2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiM5MDkzOTl9LmVsLXJhZGlvLWJ1dHRvbl9faW5uZXIsLmVsLXJhZGlvLWdyb3Vwe2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjE7dmVydGljYWwtYWxpZ246bWlkZGxlfS5ob3Jpem9udGFsLWNvbGxhcHNlLXRyYW5zaXRpb24gLmVsLXN1Ym1lbnVfX3RpdGxlIC5lbC1zdWJtZW51X19pY29uLWFycm93e3RyYW5zaXRpb246LjJzO29wYWNpdHk6MH0uZWwtcmFkaW8tZ3JvdXB7Zm9udC1zaXplOjB9LmVsLXJhZGlvLWJ1dHRvbntwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmlubGluZS1ibG9jaztvdXRsaW5lOjB9LmVsLXJhZGlvLWJ1dHRvbl9faW5uZXJ7YmFja2dyb3VuZDojRkZGO2JvcmRlcjoxcHggc29saWQgI0RDREZFNjtmb250LXdlaWdodDo1MDA7Ym9yZGVyLWxlZnQ6MDtjb2xvcjojNjA2MjY2Oy13ZWJraXQtYXBwZWFyYW5jZTpub25lO3RleHQtYWxpZ246Y2VudGVyO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdXRsaW5lOjA7bWFyZ2luOjA7Y3Vyc29yOnBvaW50ZXI7dHJhbnNpdGlvbjphbGwgLjNzIGN1YmljLWJlemllciguNjQ1LC4wNDUsLjM1NSwxKTtwYWRkaW5nOjEycHggMjBweDtmb250LXNpemU6MTRweDtib3JkZXItcmFkaXVzOjB9LmVsLXJhZGlvLWJ1dHRvbl9faW5uZXIuaXMtcm91bmR7cGFkZGluZzoxMnB4IDIwcHh9LmVsLXJhZGlvLWJ1dHRvbl9faW5uZXI6aG92ZXJ7Y29sb3I6IzQwOUVGRn0uZWwtcmFkaW8tYnV0dG9uX19pbm5lciBbY2xhc3MqPWVsLWljb24tXXtsaW5lLWhlaWdodDouOX0uZWwtcmFkaW8tYnV0dG9uX19pbm5lciBbY2xhc3MqPWVsLWljb24tXStzcGFue21hcmdpbi1sZWZ0OjVweH0uZWwtcmFkaW8tYnV0dG9uOmZpcnN0LWNoaWxkIC5lbC1yYWRpby1idXR0b25fX2lubmVye2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjRENERkU2O2JvcmRlci1yYWRpdXM6NHB4IDAgMCA0cHg7Ym94LXNoYWRvdzpub25lIWltcG9ydGFudH0uZWwtcmFkaW8tYnV0dG9uX19vcmlnLXJhZGlve29wYWNpdHk6MDtvdXRsaW5lOjA7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDotMX0uZWwtcmFkaW8tYnV0dG9uX19vcmlnLXJhZGlvOmNoZWNrZWQrLmVsLXJhZGlvLWJ1dHRvbl9faW5uZXJ7Y29sb3I6I0ZGRjtiYWNrZ3JvdW5kLWNvbG9yOiM0MDlFRkY7Ym9yZGVyLWNvbG9yOiM0MDlFRkY7Ym94LXNoYWRvdzotMXB4IDAgMCAwICM0MDlFRkZ9LmVsLXJhZGlvLWJ1dHRvbl9fb3JpZy1yYWRpbzpkaXNhYmxlZCsuZWwtcmFkaW8tYnV0dG9uX19pbm5lcntjb2xvcjojQzBDNENDO2N1cnNvcjpub3QtYWxsb3dlZDtiYWNrZ3JvdW5kLWltYWdlOm5vbmU7YmFja2dyb3VuZC1jb2xvcjojRkZGO2JvcmRlci1jb2xvcjojRUJFRUY1O2JveC1zaGFkb3c6bm9uZX0uZWwtcmFkaW8tYnV0dG9uX19vcmlnLXJhZGlvOmRpc2FibGVkOmNoZWNrZWQrLmVsLXJhZGlvLWJ1dHRvbl9faW5uZXJ7YmFja2dyb3VuZC1jb2xvcjojRjJGNkZDfS5lbC1yYWRpby1idXR0b246bGFzdC1jaGlsZCAuZWwtcmFkaW8tYnV0dG9uX19pbm5lcntib3JkZXItcmFkaXVzOjAgNHB4IDRweCAwfS5lbC1yYWRpby1idXR0b246Zmlyc3QtY2hpbGQ6bGFzdC1jaGlsZCAuZWwtcmFkaW8tYnV0dG9uX19pbm5lcntib3JkZXItcmFkaXVzOjRweH0uZWwtcmFkaW8tYnV0dG9uLS1tZWRpdW0gLmVsLXJhZGlvLWJ1dHRvbl9faW5uZXJ7cGFkZGluZzoxMHB4IDIwcHg7Zm9udC1zaXplOjE0cHg7Ym9yZGVyLXJhZGl1czowfS5lbC1yYWRpby1idXR0b24tLW1lZGl1bSAuZWwtcmFkaW8tYnV0dG9uX19pbm5lci5pcy1yb3VuZHtwYWRkaW5nOjEwcHggMjBweH0uZWwtcmFkaW8tYnV0dG9uLS1zbWFsbCAuZWwtcmFkaW8tYnV0dG9uX19pbm5lcntwYWRkaW5nOjlweCAxNXB4O2ZvbnQtc2l6ZToxMnB4O2JvcmRlci1yYWRpdXM6MH0uZWwtcmFkaW8tYnV0dG9uLS1zbWFsbCAuZWwtcmFkaW8tYnV0dG9uX19pbm5lci5pcy1yb3VuZHtwYWRkaW5nOjlweCAxNXB4fS5lbC1yYWRpby1idXR0b24tLW1pbmkgLmVsLXJhZGlvLWJ1dHRvbl9faW5uZXJ7cGFkZGluZzo3cHggMTVweDtmb250LXNpemU6MTJweDtib3JkZXItcmFkaXVzOjB9LmVsLXJhZGlvLWJ1dHRvbi0tbWluaSAuZWwtcmFkaW8tYnV0dG9uX19pbm5lci5pcy1yb3VuZHtwYWRkaW5nOjdweCAxNXB4fS5lbC1yYWRpby1idXR0b246Zm9jdXM6bm90KC5pcy1mb2N1cyk6bm90KDphY3RpdmUpOm5vdCguaXMtZGlzYWJsZWQpe2JveC1zaGFkb3c6MCAwIDJweCAycHggIzQwOUVGRn0uZWwtcGlja2VyLXBhbmVsLC5lbC1wb3BvdmVyLC5lbC1zZWxlY3QtZHJvcGRvd24sLmVsLXRhYmxlLWZpbHRlciwuZWwtdGltZS1wYW5lbHstd2Via2l0LWJveC1zaGFkb3c6MCAycHggMTJweCAwIHJnYmEoMCwwLDAsLjEpfS5lbC1zd2l0Y2h7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7cG9zaXRpb246cmVsYXRpdmU7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MjBweDtoZWlnaHQ6MjBweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmVsLXN3aXRjaF9fY29yZSwuZWwtc3dpdGNoX19sYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jaztjdXJzb3I6cG9pbnRlcn0uZWwtc3dpdGNoLmlzLWRpc2FibGVkIC5lbC1zd2l0Y2hfX2NvcmUsLmVsLXN3aXRjaC5pcy1kaXNhYmxlZCAuZWwtc3dpdGNoX19sYWJlbHtjdXJzb3I6bm90LWFsbG93ZWR9LmVsLXN3aXRjaF9fbGFiZWx7dHJhbnNpdGlvbjouMnM7aGVpZ2h0OjIwcHg7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtjb2xvcjojMzAzMTMzfS5lbC1zd2l0Y2hfX2xhYmVsLmlzLWFjdGl2ZXtjb2xvcjojNDA5RUZGfS5lbC1zd2l0Y2hfX2xhYmVsLS1sZWZ0e21hcmdpbi1yaWdodDoxMHB4fS5lbC1zd2l0Y2hfX2xhYmVsLS1yaWdodHttYXJnaW4tbGVmdDoxMHB4fS5lbC1zd2l0Y2hfX2xhYmVsICp7bGluZS1oZWlnaHQ6MTtmb250LXNpemU6MTRweDtkaXNwbGF5OmlubGluZS1ibG9ja30uZWwtc3dpdGNoX19pbnB1dHtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDowO2hlaWdodDowO29wYWNpdHk6MDttYXJnaW46MH0uZWwtc3dpdGNoX19jb3Jle21hcmdpbjowO3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjQwcHg7aGVpZ2h0OjIwcHg7Ym9yZGVyOjFweCBzb2xpZCAjRENERkU2O291dGxpbmU6MDtib3JkZXItcmFkaXVzOjEwcHg7Ym94LXNpemluZzpib3JkZXItYm94O2JhY2tncm91bmQ6I0RDREZFNjt0cmFuc2l0aW9uOmJvcmRlci1jb2xvciAuM3MsYmFja2dyb3VuZC1jb2xvciAuM3M7dmVydGljYWwtYWxpZ246bWlkZGxlfS5lbC1pbnB1dF9fcHJlZml4LC5lbC1pbnB1dF9fc3VmZml4ey13ZWJraXQtdHJhbnNpdGlvbjphbGwgLjNzO2NvbG9yOiNDMEM0Q0N9LmVsLXN3aXRjaF9fY29yZTphZnRlcntjb250ZW50OlxcXCJcXFwiO3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxcHg7bGVmdDoxcHg7Ym9yZGVyLXJhZGl1czoxMDAlO3RyYW5zaXRpb246YWxsIC4zczt3aWR0aDoxNnB4O2hlaWdodDoxNnB4O2JhY2tncm91bmQtY29sb3I6I0ZGRn0uZWwtc3dpdGNoLmlzLWNoZWNrZWQgLmVsLXN3aXRjaF9fY29yZXtib3JkZXItY29sb3I6IzQwOUVGRjtiYWNrZ3JvdW5kLWNvbG9yOiM0MDlFRkZ9LmVsLXN3aXRjaC5pcy1jaGVja2VkIC5lbC1zd2l0Y2hfX2NvcmU6OmFmdGVye2xlZnQ6MTAwJTttYXJnaW4tbGVmdDotMTdweH0uZWwtc3dpdGNoLmlzLWRpc2FibGVke29wYWNpdHk6LjZ9LmVsLXN3aXRjaC0td2lkZSAuZWwtc3dpdGNoX19sYWJlbC5lbC1zd2l0Y2hfX2xhYmVsLS1sZWZ0IHNwYW57bGVmdDoxMHB4fS5lbC1zd2l0Y2gtLXdpZGUgLmVsLXN3aXRjaF9fbGFiZWwuZWwtc3dpdGNoX19sYWJlbC0tcmlnaHQgc3BhbntyaWdodDoxMHB4fS5lbC1zd2l0Y2ggLmxhYmVsLWZhZGUtZW50ZXIsLmVsLXN3aXRjaCAubGFiZWwtZmFkZS1sZWF2ZS1hY3RpdmV7b3BhY2l0eTowfS5lbC1zZWxlY3QtZHJvcGRvd257cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAxO2JvcmRlcjoxcHggc29saWQgI0U0RTdFRDtib3JkZXItcmFkaXVzOjRweDtiYWNrZ3JvdW5kLWNvbG9yOiNGRkY7Ym94LXNoYWRvdzowIDJweCAxMnB4IDAgcmdiYSgwLDAsMCwuMSk7Ym94LXNpemluZzpib3JkZXItYm94O21hcmdpbjo1cHggMH0uZWwtc2VsZWN0LWRyb3Bkb3duLmlzLW11bHRpcGxlIC5lbC1zZWxlY3QtZHJvcGRvd25fX2l0ZW17cGFkZGluZy1yaWdodDo0MHB4fS5lbC1zZWxlY3QtZHJvcGRvd24uaXMtbXVsdGlwbGUgLmVsLXNlbGVjdC1kcm9wZG93bl9faXRlbS5zZWxlY3RlZHtjb2xvcjojNDA5RUZGO2JhY2tncm91bmQtY29sb3I6I0ZGRn0uZWwtc2VsZWN0LWRyb3Bkb3duLmlzLW11bHRpcGxlIC5lbC1zZWxlY3QtZHJvcGRvd25fX2l0ZW0uc2VsZWN0ZWQuaG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojRjVGN0ZBfS5lbC1zZWxlY3QtZHJvcGRvd24uaXMtbXVsdGlwbGUgLmVsLXNlbGVjdC1kcm9wZG93bl9faXRlbS5zZWxlY3RlZDo6YWZ0ZXJ7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MjBweDtmb250LWZhbWlseTplbGVtZW50LWljb25zO2NvbnRlbnQ6XFxcIlxcXFxlNmRhXFxcIjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo3MDA7LXdlYmtpdC1mb250LXNtb290aGluZzphbnRpYWxpYXNlZDstbW96LW9zeC1mb250LXNtb290aGluZzpncmF5c2NhbGV9LmVsLXNlbGVjdC1kcm9wZG93biAuZWwtc2Nyb2xsYmFyLmlzLWVtcHR5IC5lbC1zZWxlY3QtZHJvcGRvd25fX2xpc3R7cGFkZGluZzowfS5lbC1zZWxlY3QtZHJvcGRvd25fX2VtcHR5e3BhZGRpbmc6MTBweCAwO21hcmdpbjowO3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOiM5OTk7Zm9udC1zaXplOjE0cHh9LmVsLXNlbGVjdC1kcm9wZG93bl9fd3JhcHttYXgtaGVpZ2h0OjI3NHB4fS5lbC1zZWxlY3QtZHJvcGRvd25fX2xpc3R7bGlzdC1zdHlsZTpub25lO3BhZGRpbmc6NnB4IDA7bWFyZ2luOjA7Ym94LXNpemluZzpib3JkZXItYm94fS5lbC1zZWxlY3QtZHJvcGRvd25fX2l0ZW17Zm9udC1zaXplOjE0cHg7cGFkZGluZzowIDIwcHg7cG9zaXRpb246cmVsYXRpdmU7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2NvbG9yOiM2MDYyNjY7aGVpZ2h0OjM0cHg7bGluZS1oZWlnaHQ6MzRweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y3Vyc29yOnBvaW50ZXJ9LmVsLXNlbGVjdC1kcm9wZG93bl9faXRlbS5pcy1kaXNhYmxlZHtjb2xvcjojQzBDNENDO2N1cnNvcjpub3QtYWxsb3dlZH0uZWwtc2VsZWN0LWRyb3Bkb3duX19pdGVtLmlzLWRpc2FibGVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I0ZGRn0uZWwtc2VsZWN0LWRyb3Bkb3duX19pdGVtLmhvdmVyLC5lbC1zZWxlY3QtZHJvcGRvd25fX2l0ZW06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojRjVGN0ZBfS5lbC1zZWxlY3QtZHJvcGRvd25fX2l0ZW0uc2VsZWN0ZWR7Y29sb3I6IzQwOUVGRjtmb250LXdlaWdodDo3MDB9LmVsLXNlbGVjdC1ncm91cHttYXJnaW46MDtwYWRkaW5nOjB9LmVsLXNlbGVjdC1ncm91cF9fd3JhcHtwb3NpdGlvbjpyZWxhdGl2ZTtsaXN0LXN0eWxlOm5vbmU7bWFyZ2luOjA7cGFkZGluZzowfS5lbC1zZWxlY3QtZ3JvdXBfX3dyYXA6bm90KDpsYXN0LW9mLXR5cGUpe3BhZGRpbmctYm90dG9tOjI0cHh9LmVsLXNlbGVjdC1ncm91cF9fd3JhcDpub3QoOmxhc3Qtb2YtdHlwZSk6OmFmdGVye2NvbnRlbnQ6Jyc7cG9zaXRpb246YWJzb2x1dGU7ZGlzcGxheTpibG9jaztsZWZ0OjIwcHg7cmlnaHQ6MjBweDtib3R0b206MTJweDtoZWlnaHQ6MXB4O2JhY2tncm91bmQ6I0U0RTdFRH0uZWwtc2VsZWN0LWdyb3VwX190aXRsZXtwYWRkaW5nLWxlZnQ6MjBweDtmb250LXNpemU6MTJweDtjb2xvcjojOTA5Mzk5O2xpbmUtaGVpZ2h0OjMwcHh9LmVsLXNlbGVjdC1ncm91cCAuZWwtc2VsZWN0LWRyb3Bkb3duX19pdGVte3BhZGRpbmctbGVmdDoyMHB4fS5lbC1zZWxlY3R7ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246cmVsYXRpdmV9LmVsLXNlbGVjdCAuZWwtc2VsZWN0X190YWdzPnNwYW57ZGlzcGxheTpjb250ZW50c30uZWwtc2VsZWN0OmhvdmVyIC5lbC1pbnB1dF9faW5uZXJ7Ym9yZGVyLWNvbG9yOiNDMEM0Q0N9LmVsLXNlbGVjdCAuZWwtaW5wdXRfX2lubmVye2N1cnNvcjpwb2ludGVyO3BhZGRpbmctcmlnaHQ6MzVweH0uZWwtc2VsZWN0IC5lbC1pbnB1dF9faW5uZXI6Zm9jdXN7Ym9yZGVyLWNvbG9yOiM0MDlFRkZ9LmVsLXNlbGVjdCAuZWwtaW5wdXQgLmVsLXNlbGVjdF9fY2FyZXR7Y29sb3I6I0MwQzRDQztmb250LXNpemU6MTRweDt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuM3M7dHJhbnNmb3JtOnJvdGF0ZVooMTgwZGVnKTtjdXJzb3I6cG9pbnRlcn0uZWwtc2VsZWN0IC5lbC1pbnB1dCAuZWwtc2VsZWN0X19jYXJldC5pcy1yZXZlcnNle3RyYW5zZm9ybTpyb3RhdGVaKDApfS5lbC1zZWxlY3QgLmVsLWlucHV0IC5lbC1zZWxlY3RfX2NhcmV0LmlzLXNob3ctY2xvc2V7Zm9udC1zaXplOjE0cHg7dGV4dC1hbGlnbjpjZW50ZXI7dHJhbnNmb3JtOnJvdGF0ZVooMTgwZGVnKTtib3JkZXItcmFkaXVzOjEwMCU7Y29sb3I6I0MwQzRDQzt0cmFuc2l0aW9uOmNvbG9yIC4ycyBjdWJpYy1iZXppZXIoLjY0NSwuMDQ1LC4zNTUsMSl9LmVsLXNlbGVjdCAuZWwtaW5wdXQgLmVsLXNlbGVjdF9fY2FyZXQuaXMtc2hvdy1jbG9zZTpob3Zlcntjb2xvcjojOTA5Mzk5fS5lbC1zZWxlY3QgLmVsLWlucHV0LmlzLWRpc2FibGVkIC5lbC1pbnB1dF9faW5uZXJ7Y3Vyc29yOm5vdC1hbGxvd2VkfS5lbC1zZWxlY3QgLmVsLWlucHV0LmlzLWRpc2FibGVkIC5lbC1pbnB1dF9faW5uZXI6aG92ZXJ7Ym9yZGVyLWNvbG9yOiNFNEU3RUR9LmVsLXJhbmdlLWVkaXRvci5pcy1hY3RpdmUsLmVsLXJhbmdlLWVkaXRvci5pcy1hY3RpdmU6aG92ZXIsLmVsLXNlbGVjdCAuZWwtaW5wdXQuaXMtZm9jdXMgLmVsLWlucHV0X19pbm5lcntib3JkZXItY29sb3I6IzQwOUVGRn0uZWwtc2VsZWN0Pi5lbC1pbnB1dHtkaXNwbGF5OmJsb2NrfS5lbC1zZWxlY3RfX2lucHV0e2JvcmRlcjpub25lO291dGxpbmU6MDtwYWRkaW5nOjA7bWFyZ2luLWxlZnQ6MTVweDtjb2xvcjojNjY2O2ZvbnQtc2l6ZToxNHB4Oy13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lO2FwcGVhcmFuY2U6bm9uZTtoZWlnaHQ6MjhweDtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5lbC1zZWxlY3RfX2lucHV0LmlzLW1pbml7aGVpZ2h0OjE0cHh9LmVsLXNlbGVjdF9fY2xvc2V7Y3Vyc29yOnBvaW50ZXI7cG9zaXRpb246YWJzb2x1dGU7dG9wOjhweDt6LWluZGV4OjEwMDA7cmlnaHQ6MjVweDtjb2xvcjojQzBDNENDO2xpbmUtaGVpZ2h0OjE4cHg7Zm9udC1zaXplOjE0cHh9LmVsLXNlbGVjdF9fY2xvc2U6aG92ZXJ7Y29sb3I6IzkwOTM5OX0uZWwtc2VsZWN0X190YWdze3Bvc2l0aW9uOmFic29sdXRlO2xpbmUtaGVpZ2h0Om5vcm1hbDt3aGl0ZS1zcGFjZTpub3JtYWw7ei1pbmRleDoxO3RvcDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSk7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtmbGV4LXdyYXA6d3JhcH0uZWwtc2VsZWN0X190YWdzLXRleHR7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9LmVsLXNlbGVjdCAuZWwtdGFne2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXItY29sb3I6dHJhbnNwYXJlbnQ7bWFyZ2luOjJweCAwIDJweCA2cHg7YmFja2dyb3VuZC1jb2xvcjojZjBmMmY1O2Rpc3BsYXk6ZmxleDttYXgtd2lkdGg6MTAwJTthbGlnbi1pdGVtczpjZW50ZXJ9LmVsLXNlbGVjdCAuZWwtdGFnX19jbG9zZS5lbC1pY29uLWNsb3Nle2JhY2tncm91bmQtY29sb3I6I0MwQzRDQzt0b3A6MDtjb2xvcjojRkZGO2ZsZXgtc2hyaW5rOjB9LmVsLXNlbGVjdCAuZWwtdGFnX19jbG9zZS5lbC1pY29uLWNsb3NlOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzkwOTM5OX0uZWwtdGFibGUsLmVsLXRhYmxlX19leHBhbmRlZC1jZWxse2JhY2tncm91bmQtY29sb3I6I0ZGRn0uZWwtc2VsZWN0IC5lbC10YWdfX2Nsb3NlLmVsLWljb24tY2xvc2U6OmJlZm9yZXtkaXNwbGF5OmJsb2NrO3RyYW5zZm9ybTp0cmFuc2xhdGUoMCwuNXB4KX0uZWwtdGFibGV7cG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3c6aGlkZGVuO2JveC1zaXppbmc6Ym9yZGVyLWJveDtmbGV4OjE7d2lkdGg6MTAwJTttYXgtd2lkdGg6MTAwJTtmb250LXNpemU6MTRweDtjb2xvcjojNjA2MjY2fS5lbC10YWJsZV9fZW1wdHktYmxvY2t7bWluLWhlaWdodDo2MHB4O3RleHQtYWxpZ246Y2VudGVyO3dpZHRoOjEwMCU7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyfS5lbC10YWJsZV9fZW1wdHktdGV4dHtsaW5lLWhlaWdodDo2MHB4O3dpZHRoOjUwJTtjb2xvcjojOTA5Mzk5fS5lbC10YWJsZV9fZXhwYW5kLWNvbHVtbiAuY2VsbHtwYWRkaW5nOjA7dGV4dC1hbGlnbjpjZW50ZXJ9LmVsLXRhYmxlX19leHBhbmQtaWNvbntwb3NpdGlvbjpyZWxhdGl2ZTtjdXJzb3I6cG9pbnRlcjtjb2xvcjojNjY2O2ZvbnQtc2l6ZToxMnB4O3RyYW5zaXRpb246dHJhbnNmb3JtIC4ycyBlYXNlLWluLW91dDtoZWlnaHQ6MjBweH0uZWwtdGFibGVfX2V4cGFuZC1pY29uLS1leHBhbmRlZHt0cmFuc2Zvcm06cm90YXRlKDkwZGVnKX0uZWwtdGFibGVfX2V4cGFuZC1pY29uPi5lbC1pY29ue3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6NTAlO3RvcDo1MCU7bWFyZ2luLWxlZnQ6LTVweDttYXJnaW4tdG9wOi01cHh9LmVsLXRhYmxlX19leHBhbmRlZC1jZWxsW2NsYXNzKj1jZWxsXXtwYWRkaW5nOjIwcHggNTBweH0uZWwtdGFibGVfX2V4cGFuZGVkLWNlbGw6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudCFpbXBvcnRhbnR9LmVsLXRhYmxlX19wbGFjZWhvbGRlcntkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDoyMHB4fS5lbC10YWJsZV9fYXBwZW5kLXdyYXBwZXJ7b3ZlcmZsb3c6aGlkZGVufS5lbC10YWJsZS0tZml0e2JvcmRlci1yaWdodDowO2JvcmRlci1ib3R0b206MH0uZWwtdGFibGUtLWZpdCAuZWwtdGFibGVfX2NlbGwuZ3V0dGVye2JvcmRlci1yaWdodC13aWR0aDoxcHh9LmVsLXRhYmxlLS1zY3JvbGxhYmxlLXggLmVsLXRhYmxlX19ib2R5LXdyYXBwZXJ7b3ZlcmZsb3cteDphdXRvfS5lbC10YWJsZS0tc2Nyb2xsYWJsZS15IC5lbC10YWJsZV9fYm9keS13cmFwcGVye292ZXJmbG93LXk6YXV0b30uZWwtdGFibGUgdGhlYWR7Y29sb3I6IzkwOTM5OTtmb250LXdlaWdodDo1MDB9LmVsLXRhYmxlIHRoZWFkLmlzLWdyb3VwIHRoLmVsLXRhYmxlX19jZWxse2JhY2tncm91bmQ6I0Y1RjdGQX0uZWwtdGFibGUgLmVsLXRhYmxlX19jZWxse3BhZGRpbmc6MTJweCAwO21pbi13aWR0aDowO2JveC1zaXppbmc6Ym9yZGVyLWJveDt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmxlZnR9LmVsLXRhYmxlIC5lbC10YWJsZV9fY2VsbC5pcy1jZW50ZXJ7dGV4dC1hbGlnbjpjZW50ZXJ9LmVsLXRhYmxlIC5lbC10YWJsZV9fY2VsbC5pcy1yaWdodHt0ZXh0LWFsaWduOnJpZ2h0fS5lbC10YWJsZSAuZWwtdGFibGVfX2NlbGwuZ3V0dGVye3dpZHRoOjE1cHg7Ym9yZGVyLXJpZ2h0LXdpZHRoOjA7Ym9yZGVyLWJvdHRvbS13aWR0aDowO3BhZGRpbmc6MH0uZWwtdGFibGUgLmVsLXRhYmxlX19jZWxsLmlzLWhpZGRlbj4qe3Zpc2liaWxpdHk6aGlkZGVufS5lbC10YWJsZS0tbWVkaXVtIC5lbC10YWJsZV9fY2VsbHtwYWRkaW5nOjEwcHggMH0uZWwtdGFibGUtLXNtYWxse2ZvbnQtc2l6ZToxMnB4fS5lbC10YWJsZS0tc21hbGwgLmVsLXRhYmxlX19jZWxse3BhZGRpbmc6OHB4IDB9LmVsLXRhYmxlLS1taW5pe2ZvbnQtc2l6ZToxMnB4fS5lbC10YWJsZS0tbWluaSAuZWwtdGFibGVfX2NlbGx7cGFkZGluZzo2cHggMH0uZWwtdGFibGUgdHJ7YmFja2dyb3VuZC1jb2xvcjojRkZGfS5lbC10YWJsZSB0ciBpbnB1dFt0eXBlPWNoZWNrYm94XXttYXJnaW46MH0uZWwtdGFibGUgdGQuZWwtdGFibGVfX2NlbGwsLmVsLXRhYmxlIHRoLmVsLXRhYmxlX19jZWxsLmlzLWxlYWZ7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI0VCRUVGNX0uZWwtdGFibGUgdGguZWwtdGFibGVfX2NlbGwuaXMtc29ydGFibGV7Y3Vyc29yOnBvaW50ZXJ9LmVsLXRhYmxlIHRoLmVsLXRhYmxlX19jZWxse292ZXJmbG93OmhpZGRlbjstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7YmFja2dyb3VuZC1jb2xvcjojRkZGfS5lbC10YWJsZSB0aC5lbC10YWJsZV9fY2VsbD4uY2VsbHtkaXNwbGF5OmlubGluZS1ibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXRpdmU7dmVydGljYWwtYWxpZ246bWlkZGxlO3BhZGRpbmctbGVmdDoxMHB4O3BhZGRpbmctcmlnaHQ6MTBweDt3aWR0aDoxMDAlfS5lbC10YWJsZSB0aC5lbC10YWJsZV9fY2VsbD4uY2VsbC5oaWdobGlnaHR7Y29sb3I6IzQwOUVGRn0uZWwtdGFibGUgdGguZWwtdGFibGVfX2NlbGwucmVxdWlyZWQ+ZGl2OjpiZWZvcmV7ZGlzcGxheTppbmxpbmUtYmxvY2s7Y29udGVudDpcXFwiXFxcIjt3aWR0aDo4cHg7aGVpZ2h0OjhweDtib3JkZXItcmFkaXVzOjUwJTtiYWNrZ3JvdW5kOiNmZjRkNTE7bWFyZ2luLXJpZ2h0OjVweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmVsLXRhYmxlIHRkLmVsLXRhYmxlX19jZWxsIGRpdntib3gtc2l6aW5nOmJvcmRlci1ib3h9LmVsLWRhdGUtdGFibGUgdGQsLmVsLXRhYmxlIC5jZWxsLC5lbC10YWJsZS1maWx0ZXJ7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3h9LmVsLXRhYmxlIHRkLmVsLXRhYmxlX19jZWxsLmd1dHRlcnt3aWR0aDowfS5lbC10YWJsZSAuY2VsbHtib3gtc2l6aW5nOmJvcmRlci1ib3g7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm9ybWFsO3dvcmQtYnJlYWs6YnJlYWstYWxsO2xpbmUtaGVpZ2h0OjIzcHg7cGFkZGluZy1sZWZ0OjEwcHg7cGFkZGluZy1yaWdodDoxMHB4fS5lbC10YWJsZSAuY2VsbC5lbC10b29sdGlwe3doaXRlLXNwYWNlOm5vd3JhcDttaW4td2lkdGg6NTBweH0uZWwtdGFibGUtLWJvcmRlciwuZWwtdGFibGUtLWdyb3Vwe2JvcmRlcjoxcHggc29saWQgI0VCRUVGNX0uZWwtdGFibGUtLWJvcmRlcjo6YWZ0ZXIsLmVsLXRhYmxlLS1ncm91cDo6YWZ0ZXIsLmVsLXRhYmxlOjpiZWZvcmV7Y29udGVudDonJztwb3NpdGlvbjphYnNvbHV0ZTtiYWNrZ3JvdW5kLWNvbG9yOiNFQkVFRjU7ei1pbmRleDoxfS5lbC10YWJsZS0tYm9yZGVyOjphZnRlciwuZWwtdGFibGUtLWdyb3VwOjphZnRlcnt0b3A6MDtyaWdodDowO3dpZHRoOjFweDtoZWlnaHQ6MTAwJX0uZWwtdGFibGU6OmJlZm9yZXtsZWZ0OjA7Ym90dG9tOjA7d2lkdGg6MTAwJTtoZWlnaHQ6MXB4fS5lbC10YWJsZS0tYm9yZGVye2JvcmRlci1yaWdodDpub25lO2JvcmRlci1ib3R0b206bm9uZX0uZWwtdGFibGUtLWJvcmRlci5lbC1sb2FkaW5nLXBhcmVudC0tcmVsYXRpdmV7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50fS5lbC10YWJsZS0tYm9yZGVyIC5lbC10YWJsZV9fY2VsbCwuZWwtdGFibGVfX2JvZHktd3JhcHBlciAuZWwtdGFibGUtLWJvcmRlci5pcy1zY3JvbGxpbmctbGVmdH4uZWwtdGFibGVfX2ZpeGVke2JvcmRlci1yaWdodDoxcHggc29saWQgI0VCRUVGNX0uZWwtdGFibGUtLWJvcmRlciAuZWwtdGFibGVfX2NlbGw6Zmlyc3QtY2hpbGQgLmNlbGx7cGFkZGluZy1sZWZ0OjEwcHh9LmVsLXRhYmxlLS1ib3JkZXIgdGguZWwtdGFibGVfX2NlbGwuZ3V0dGVyOmxhc3Qtb2YtdHlwZXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjRUJFRUY1O2JvcmRlci1ib3R0b20td2lkdGg6MXB4fS5lbC10YWJsZS0tYm9yZGVyIHRoLmVsLXRhYmxlX19jZWxsLC5lbC10YWJsZV9fZml4ZWQtcmlnaHQtcGF0Y2h7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI0VCRUVGNX0uZWwtdGFibGUtLWhpZGRlbnt2aXNpYmlsaXR5OmhpZGRlbn0uZWwtdGFibGVfX2ZpeGVkLC5lbC10YWJsZV9fZml4ZWQtcmlnaHR7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO292ZXJmbG93LXg6aGlkZGVuO292ZXJmbG93LXk6aGlkZGVuO2JveC1zaGFkb3c6MCAwIDEwcHggcmdiYSgwLDAsMCwuMTIpfS5lbC10YWJsZV9fZml4ZWQtcmlnaHQ6OmJlZm9yZSwuZWwtdGFibGVfX2ZpeGVkOjpiZWZvcmV7Y29udGVudDonJztwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7Ym90dG9tOjA7d2lkdGg6MTAwJTtoZWlnaHQ6MXB4O2JhY2tncm91bmQtY29sb3I6I0VCRUVGNTt6LWluZGV4OjR9LmVsLXRhYmxlX19maXhlZC1yaWdodC1wYXRjaHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6LTFweDtyaWdodDowO2JhY2tncm91bmQtY29sb3I6I0ZGRn0uZWwtdGFibGVfX2ZpeGVkLXJpZ2h0e3RvcDowO2xlZnQ6YXV0bztyaWdodDowfS5lbC10YWJsZV9fZml4ZWQtcmlnaHQgLmVsLXRhYmxlX19maXhlZC1ib2R5LXdyYXBwZXIsLmVsLXRhYmxlX19maXhlZC1yaWdodCAuZWwtdGFibGVfX2ZpeGVkLWZvb3Rlci13cmFwcGVyLC5lbC10YWJsZV9fZml4ZWQtcmlnaHQgLmVsLXRhYmxlX19maXhlZC1oZWFkZXItd3JhcHBlcntsZWZ0OmF1dG87cmlnaHQ6MH0uZWwtdGFibGVfX2ZpeGVkLWhlYWRlci13cmFwcGVye3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDt0b3A6MDt6LWluZGV4OjN9LmVsLXRhYmxlX19maXhlZC1mb290ZXItd3JhcHBlcntwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7Ym90dG9tOjA7ei1pbmRleDozfS5lbC10YWJsZV9fZml4ZWQtZm9vdGVyLXdyYXBwZXIgdGJvZHkgdGQuZWwtdGFibGVfX2NlbGx7Ym9yZGVyLXRvcDoxcHggc29saWQgI0VCRUVGNTtiYWNrZ3JvdW5kLWNvbG9yOiNGNUY3RkE7Y29sb3I6IzYwNjI2Nn0uZWwtdGFibGVfX2ZpeGVkLWJvZHktd3JhcHBlcntwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7dG9wOjM3cHg7b3ZlcmZsb3c6aGlkZGVuO3otaW5kZXg6M30uZWwtdGFibGVfX2JvZHktd3JhcHBlciwuZWwtdGFibGVfX2Zvb3Rlci13cmFwcGVyLC5lbC10YWJsZV9faGVhZGVyLXdyYXBwZXJ7d2lkdGg6MTAwJX0uZWwtdGFibGVfX2Zvb3Rlci13cmFwcGVye21hcmdpbi10b3A6LTFweH0uZWwtdGFibGVfX2Zvb3Rlci13cmFwcGVyIHRkLmVsLXRhYmxlX19jZWxse2JvcmRlci10b3A6MXB4IHNvbGlkICNFQkVFRjV9LmVsLXRhYmxlX19ib2R5LC5lbC10YWJsZV9fZm9vdGVyLC5lbC10YWJsZV9faGVhZGVye3RhYmxlLWxheW91dDpmaXhlZDtib3JkZXItY29sbGFwc2U6c2VwYXJhdGV9LmVsLXRhYmxlX19mb290ZXItd3JhcHBlciwuZWwtdGFibGVfX2hlYWRlci13cmFwcGVye292ZXJmbG93OmhpZGRlbn0uZWwtdGFibGVfX2Zvb3Rlci13cmFwcGVyIHRib2R5IHRkLmVsLXRhYmxlX19jZWxsLC5lbC10YWJsZV9faGVhZGVyLXdyYXBwZXIgdGJvZHkgdGQuZWwtdGFibGVfX2NlbGx7YmFja2dyb3VuZC1jb2xvcjojRjVGN0ZBO2NvbG9yOiM2MDYyNjZ9LmVsLXRhYmxlX19ib2R5LXdyYXBwZXJ7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlfS5lbC10YWJsZV9fYm9keS13cmFwcGVyLmlzLXNjcm9sbGluZy1sZWZ0fi5lbC10YWJsZV9fZml4ZWQsLmVsLXRhYmxlX19ib2R5LXdyYXBwZXIuaXMtc2Nyb2xsaW5nLW5vbmV+LmVsLXRhYmxlX19maXhlZCwuZWwtdGFibGVfX2JvZHktd3JhcHBlci5pcy1zY3JvbGxpbmctbm9uZX4uZWwtdGFibGVfX2ZpeGVkLXJpZ2h0LC5lbC10YWJsZV9fYm9keS13cmFwcGVyLmlzLXNjcm9sbGluZy1yaWdodH4uZWwtdGFibGVfX2ZpeGVkLXJpZ2h0e2JveC1zaGFkb3c6bm9uZX0uZWwtdGFibGVfX2JvZHktd3JhcHBlciAuZWwtdGFibGUtLWJvcmRlci5pcy1zY3JvbGxpbmctcmlnaHR+LmVsLXRhYmxlX19maXhlZC1yaWdodHtib3JkZXItbGVmdDoxcHggc29saWQgI0VCRUVGNX0uZWwtdGFibGUgLmNhcmV0LXdyYXBwZXJ7ZGlzcGxheTppbmxpbmUtZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6Y2VudGVyO2hlaWdodDozNHB4O3dpZHRoOjI0cHg7dmVydGljYWwtYWxpZ246bWlkZGxlO2N1cnNvcjpwb2ludGVyO292ZXJmbG93OmluaXRpYWw7cG9zaXRpb246cmVsYXRpdmV9LmVsLXRhYmxlIC5zb3J0LWNhcmV0e3dpZHRoOjA7aGVpZ2h0OjA7Ym9yZGVyOjVweCBzb2xpZCB0cmFuc3BhcmVudDtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjdweH0uZWwtdGFibGUgLnNvcnQtY2FyZXQuYXNjZW5kaW5ne2JvcmRlci1ib3R0b20tY29sb3I6I0MwQzRDQzt0b3A6NXB4fS5lbC10YWJsZSAuc29ydC1jYXJldC5kZXNjZW5kaW5ne2JvcmRlci10b3AtY29sb3I6I0MwQzRDQztib3R0b206N3B4fS5lbC10YWJsZSAuYXNjZW5kaW5nIC5zb3J0LWNhcmV0LmFzY2VuZGluZ3tib3JkZXItYm90dG9tLWNvbG9yOiM0MDlFRkZ9LmVsLXRhYmxlIC5kZXNjZW5kaW5nIC5zb3J0LWNhcmV0LmRlc2NlbmRpbmd7Ym9yZGVyLXRvcC1jb2xvcjojNDA5RUZGfS5lbC10YWJsZSAuaGlkZGVuLWNvbHVtbnN7dmlzaWJpbGl0eTpoaWRkZW47cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDotMX0uZWwtdGFibGUtLXN0cmlwZWQgLmVsLXRhYmxlX19ib2R5IHRyLmVsLXRhYmxlX19yb3ctLXN0cmlwZWQgdGQuZWwtdGFibGVfX2NlbGx7YmFja2dyb3VuZDojRkFGQUZBfS5lbC10YWJsZS0tc3RyaXBlZCAuZWwtdGFibGVfX2JvZHkgdHIuZWwtdGFibGVfX3Jvdy0tc3RyaXBlZC5jdXJyZW50LXJvdyB0ZC5lbC10YWJsZV9fY2VsbCwuZWwtdGFibGUtLXN0cmlwZWQgLmVsLXRhYmxlX19ib2R5IHRyLmVsLXRhYmxlX19yb3ctLXN0cmlwZWQuc2VsZWN0aW9uLXJvdyB0ZC5lbC10YWJsZV9fY2VsbHtiYWNrZ3JvdW5kLWNvbG9yOiNlY2Y1ZmZ9LmVsLXRhYmxlX19ib2R5IHRyLmhvdmVyLXJvdy5jdXJyZW50LXJvdz50ZC5lbC10YWJsZV9fY2VsbCwuZWwtdGFibGVfX2JvZHkgdHIuaG92ZXItcm93LmVsLXRhYmxlX19yb3ctLXN0cmlwZWQuY3VycmVudC1yb3c+dGQuZWwtdGFibGVfX2NlbGwsLmVsLXRhYmxlX19ib2R5IHRyLmhvdmVyLXJvdy5lbC10YWJsZV9fcm93LS1zdHJpcGVkLnNlbGVjdGlvbi1yb3c+dGQuZWwtdGFibGVfX2NlbGwsLmVsLXRhYmxlX19ib2R5IHRyLmhvdmVyLXJvdy5lbC10YWJsZV9fcm93LS1zdHJpcGVkPnRkLmVsLXRhYmxlX19jZWxsLC5lbC10YWJsZV9fYm9keSB0ci5ob3Zlci1yb3cuc2VsZWN0aW9uLXJvdz50ZC5lbC10YWJsZV9fY2VsbCwuZWwtdGFibGVfX2JvZHkgdHIuaG92ZXItcm93PnRkLmVsLXRhYmxlX19jZWxse2JhY2tncm91bmQtY29sb3I6I0Y1RjdGQX0uZWwtdGFibGVfX2JvZHkgdHIuY3VycmVudC1yb3c+dGQuZWwtdGFibGVfX2NlbGwsLmVsLXRhYmxlX19ib2R5IHRyLnNlbGVjdGlvbi1yb3c+dGQuZWwtdGFibGVfX2NlbGx7YmFja2dyb3VuZC1jb2xvcjojZWNmNWZmfS5lbC10YWJsZV9fY29sdW1uLXJlc2l6ZS1wcm94eXtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjIwMHB4O3RvcDowO2JvdHRvbTowO3dpZHRoOjA7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNFQkVFRjU7ei1pbmRleDoxMH0uZWwtdGFibGVfX2NvbHVtbi1maWx0ZXItdHJpZ2dlcntkaXNwbGF5OmlubGluZS1ibG9jaztsaW5lLWhlaWdodDozNHB4O2N1cnNvcjpwb2ludGVyfS5lbC10YWJsZV9fY29sdW1uLWZpbHRlci10cmlnZ2VyIGl7Y29sb3I6IzkwOTM5OTtmb250LXNpemU6MTJweDt0cmFuc2Zvcm06c2NhbGUoLjc1KX0uZWwtdGFibGUtLWVuYWJsZS1yb3ctdHJhbnNpdGlvbiAuZWwtdGFibGVfX2JvZHkgdGQuZWwtdGFibGVfX2NlbGx7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIC4yNXMgZWFzZX0uZWwtdGFibGUtLWVuYWJsZS1yb3ctaG92ZXIgLmVsLXRhYmxlX19ib2R5IHRyOmhvdmVyPnRkLmVsLXRhYmxlX19jZWxse2JhY2tncm91bmQtY29sb3I6I0Y1RjdGQX0uZWwtdGFibGUtLWZsdWlkLWhlaWdodCAuZWwtdGFibGVfX2ZpeGVkLC5lbC10YWJsZS0tZmx1aWQtaGVpZ2h0IC5lbC10YWJsZV9fZml4ZWQtcmlnaHR7Ym90dG9tOjA7b3ZlcmZsb3c6aGlkZGVufS5lbC10YWJsZSBbY2xhc3MqPWVsLXRhYmxlX19yb3ctLWxldmVsXSAuZWwtdGFibGVfX2V4cGFuZC1pY29ue2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjIwcHg7bGluZS1oZWlnaHQ6MjBweDtoZWlnaHQ6MjBweDt0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW4tcmlnaHQ6M3B4fS5lbC10YWJsZS1jb2x1bW4tLXNlbGVjdGlvbiAuY2VsbHtwYWRkaW5nLWxlZnQ6MTRweDtwYWRkaW5nLXJpZ2h0OjE0cHh9LmVsLXRhYmxlLWZpbHRlcntib3JkZXI6MXB4IHNvbGlkICNFQkVFRjU7Ym9yZGVyLXJhZGl1czoycHg7YmFja2dyb3VuZC1jb2xvcjojRkZGO2JveC1zaGFkb3c6MCAycHggMTJweCAwIHJnYmEoMCwwLDAsLjEpO2JveC1zaXppbmc6Ym9yZGVyLWJveDttYXJnaW46MnB4IDB9LmVsLXRhYmxlLWZpbHRlcl9fbGlzdHtwYWRkaW5nOjVweCAwO21hcmdpbjowO2xpc3Qtc3R5bGU6bm9uZTttaW4td2lkdGg6MTAwcHh9LmVsLXRhYmxlLWZpbHRlcl9fbGlzdC1pdGVte2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDEwcHg7Y3Vyc29yOnBvaW50ZXI7Zm9udC1zaXplOjE0cHh9LmVsLXRhYmxlLWZpbHRlcl9fbGlzdC1pdGVtOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2VjZjVmZjtjb2xvcjojNjZiMWZmfS5lbC10YWJsZS1maWx0ZXJfX2xpc3QtaXRlbS5pcy1hY3RpdmV7YmFja2dyb3VuZC1jb2xvcjojNDA5RUZGO2NvbG9yOiNGRkZ9LmVsLXRhYmxlLWZpbHRlcl9fY29udGVudHttaW4td2lkdGg6MTAwcHh9LmVsLXRhYmxlLWZpbHRlcl9fYm90dG9te2JvcmRlci10b3A6MXB4IHNvbGlkICNFQkVFRjU7cGFkZGluZzo4cHh9LmVsLXRhYmxlLWZpbHRlcl9fYm90dG9tIGJ1dHRvbntiYWNrZ3JvdW5kOjAgMDtib3JkZXI6bm9uZTtjb2xvcjojNjA2MjY2O2N1cnNvcjpwb2ludGVyO2ZvbnQtc2l6ZToxM3B4O3BhZGRpbmc6MCAzcHh9LmVsLWRhdGUtdGFibGUgdGQuaW4tcmFuZ2UgZGl2LC5lbC1kYXRlLXRhYmxlIHRkLmluLXJhbmdlIGRpdjpob3ZlciwuZWwtZGF0ZS10YWJsZS5pcy13ZWVrLW1vZGUgLmVsLWRhdGUtdGFibGVfX3Jvdy5jdXJyZW50IGRpdiwuZWwtZGF0ZS10YWJsZS5pcy13ZWVrLW1vZGUgLmVsLWRhdGUtdGFibGVfX3Jvdzpob3ZlciBkaXZ7YmFja2dyb3VuZC1jb2xvcjojRjJGNkZDfS5lbC10YWJsZS1maWx0ZXJfX2JvdHRvbSBidXR0b246aG92ZXJ7Y29sb3I6IzQwOUVGRn0uZWwtdGFibGUtZmlsdGVyX19ib3R0b20gYnV0dG9uOmZvY3Vze291dGxpbmU6MH0uZWwtdGFibGUtZmlsdGVyX19ib3R0b20gYnV0dG9uLmlzLWRpc2FibGVke2NvbG9yOiNDMEM0Q0M7Y3Vyc29yOm5vdC1hbGxvd2VkfS5lbC10YWJsZS1maWx0ZXJfX3dyYXB7bWF4LWhlaWdodDoyODBweH0uZWwtdGFibGUtZmlsdGVyX19jaGVja2JveC1ncm91cHtwYWRkaW5nOjEwcHh9LmVsLXRhYmxlLWZpbHRlcl9fY2hlY2tib3gtZ3JvdXAgbGFiZWwuZWwtY2hlY2tib3h7ZGlzcGxheTpibG9jazttYXJnaW4tcmlnaHQ6NXB4O21hcmdpbi1ib3R0b206OHB4O21hcmdpbi1sZWZ0OjVweH0uZWwtdGFibGUtZmlsdGVyX19jaGVja2JveC1ncm91cCAuZWwtY2hlY2tib3g6bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjB9LmVsLWRhdGUtdGFibGV7Zm9udC1zaXplOjEycHg7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lfS5lbC1kYXRlLXRhYmxlLmlzLXdlZWstbW9kZSAuZWwtZGF0ZS10YWJsZV9fcm93OmhvdmVyIHRkLmF2YWlsYWJsZTpob3Zlcntjb2xvcjojNjA2MjY2fS5lbC1kYXRlLXRhYmxlLmlzLXdlZWstbW9kZSAuZWwtZGF0ZS10YWJsZV9fcm93OmhvdmVyIHRkOmZpcnN0LWNoaWxkIGRpdnttYXJnaW4tbGVmdDo1cHg7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czoxNXB4O2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MTVweH0uZWwtZGF0ZS10YWJsZS5pcy13ZWVrLW1vZGUgLmVsLWRhdGUtdGFibGVfX3Jvdzpob3ZlciB0ZDpsYXN0LWNoaWxkIGRpdnttYXJnaW4tcmlnaHQ6NXB4O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjE1cHg7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MTVweH0uZWwtZGF0ZS10YWJsZSB0ZHt3aWR0aDozMnB4O2hlaWdodDozMHB4O3BhZGRpbmc6NHB4IDA7Ym94LXNpemluZzpib3JkZXItYm94O3RleHQtYWxpZ246Y2VudGVyO2N1cnNvcjpwb2ludGVyO3Bvc2l0aW9uOnJlbGF0aXZlfS5lbC1kYXRlLXRhYmxlIHRkIGRpdntoZWlnaHQ6MzBweDtwYWRkaW5nOjNweCAwO2JveC1zaXppbmc6Ym9yZGVyLWJveH0uZWwtZGF0ZS10YWJsZSB0ZCBzcGFue3dpZHRoOjI0cHg7aGVpZ2h0OjI0cHg7ZGlzcGxheTpibG9jazttYXJnaW46MCBhdXRvO2xpbmUtaGVpZ2h0OjI0cHg7cG9zaXRpb246YWJzb2x1dGU7bGVmdDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTUwJSk7Ym9yZGVyLXJhZGl1czo1MCV9LmVsLWRhdGUtdGFibGUgdGQubmV4dC1tb250aCwuZWwtZGF0ZS10YWJsZSB0ZC5wcmV2LW1vbnRoe2NvbG9yOiNDMEM0Q0N9LmVsLWRhdGUtdGFibGUgdGQudG9kYXl7cG9zaXRpb246cmVsYXRpdmV9LmVsLWRhdGUtdGFibGUgdGQudG9kYXkgc3Bhbntjb2xvcjojNDA5RUZGO2ZvbnQtd2VpZ2h0OjcwMH0uZWwtZGF0ZS10YWJsZSB0ZC50b2RheS5lbmQtZGF0ZSBzcGFuLC5lbC1kYXRlLXRhYmxlIHRkLnRvZGF5LnN0YXJ0LWRhdGUgc3Bhbntjb2xvcjojRkZGfS5lbC1kYXRlLXRhYmxlIHRkLmF2YWlsYWJsZTpob3Zlcntjb2xvcjojNDA5RUZGfS5lbC1kYXRlLXRhYmxlIHRkLmN1cnJlbnQ6bm90KC5kaXNhYmxlZCkgc3Bhbntjb2xvcjojRkZGO2JhY2tncm91bmQtY29sb3I6IzQwOUVGRn0uZWwtZGF0ZS10YWJsZSB0ZC5lbmQtZGF0ZSBkaXYsLmVsLWRhdGUtdGFibGUgdGQuc3RhcnQtZGF0ZSBkaXZ7Y29sb3I6I0ZGRn0uZWwtZGF0ZS10YWJsZSB0ZC5lbmQtZGF0ZSBzcGFuLC5lbC1kYXRlLXRhYmxlIHRkLnN0YXJ0LWRhdGUgc3BhbntiYWNrZ3JvdW5kLWNvbG9yOiM0MDlFRkZ9LmVsLWRhdGUtdGFibGUgdGQuc3RhcnQtZGF0ZSBkaXZ7bWFyZ2luLWxlZnQ6NXB4O2JvcmRlci10b3AtbGVmdC1yYWRpdXM6MTVweDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjE1cHh9LmVsLWRhdGUtdGFibGUgdGQuZW5kLWRhdGUgZGl2e21hcmdpbi1yaWdodDo1cHg7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MTVweDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czoxNXB4fS5lbC1kYXRlLXRhYmxlIHRkLmRpc2FibGVkIGRpdntiYWNrZ3JvdW5kLWNvbG9yOiNGNUY3RkE7b3BhY2l0eToxO2N1cnNvcjpub3QtYWxsb3dlZDtjb2xvcjojQzBDNENDfS5lbC1kYXRlLXRhYmxlIHRkLnNlbGVjdGVkIGRpdnttYXJnaW4tbGVmdDo1cHg7bWFyZ2luLXJpZ2h0OjVweDtiYWNrZ3JvdW5kLWNvbG9yOiNGMkY2RkM7Ym9yZGVyLXJhZGl1czoxNXB4fS5lbC1kYXRlLXRhYmxlIHRkLnNlbGVjdGVkIGRpdjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNGMkY2RkN9LmVsLWRhdGUtdGFibGUgdGQuc2VsZWN0ZWQgc3BhbntiYWNrZ3JvdW5kLWNvbG9yOiM0MDlFRkY7Y29sb3I6I0ZGRjtib3JkZXItcmFkaXVzOjE1cHh9LmVsLWRhdGUtdGFibGUgdGQud2Vla3tmb250LXNpemU6ODAlO2NvbG9yOiM2MDYyNjZ9LmVsLW1vbnRoLXRhYmxlLC5lbC15ZWFyLXRhYmxle2ZvbnQtc2l6ZToxMnB4O2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZX0uZWwtZGF0ZS10YWJsZSB0aHtwYWRkaW5nOjVweDtjb2xvcjojNjA2MjY2O2ZvbnQtd2VpZ2h0OjQwMDtib3JkZXItYm90dG9tOnNvbGlkIDFweCAjRUJFRUY1fS5lbC1tb250aC10YWJsZXttYXJnaW46LTFweH0uZWwtbW9udGgtdGFibGUgdGR7dGV4dC1hbGlnbjpjZW50ZXI7cGFkZGluZzo4cHggMDtjdXJzb3I6cG9pbnRlcn0uZWwtbW9udGgtdGFibGUgdGQgZGl2e2hlaWdodDo0OHB4O3BhZGRpbmc6NnB4IDA7Ym94LXNpemluZzpib3JkZXItYm94fS5lbC1tb250aC10YWJsZSB0ZC50b2RheSAuY2VsbHtjb2xvcjojNDA5RUZGO2ZvbnQtd2VpZ2h0OjcwMH0uZWwtbW9udGgtdGFibGUgdGQudG9kYXkuZW5kLWRhdGUgLmNlbGwsLmVsLW1vbnRoLXRhYmxlIHRkLnRvZGF5LnN0YXJ0LWRhdGUgLmNlbGx7Y29sb3I6I0ZGRn0uZWwtbW9udGgtdGFibGUgdGQuZGlzYWJsZWQgLmNlbGx7YmFja2dyb3VuZC1jb2xvcjojRjVGN0ZBO2N1cnNvcjpub3QtYWxsb3dlZDtjb2xvcjojQzBDNENDfS5lbC1tb250aC10YWJsZSB0ZC5kaXNhYmxlZCAuY2VsbDpob3Zlcntjb2xvcjojQzBDNENDfS5lbC1tb250aC10YWJsZSB0ZCAuY2VsbHt3aWR0aDo2MHB4O2hlaWdodDozNnB4O2Rpc3BsYXk6YmxvY2s7bGluZS1oZWlnaHQ6MzZweDtjb2xvcjojNjA2MjY2O21hcmdpbjowIGF1dG87Ym9yZGVyLXJhZGl1czoxOHB4fS5lbC1tb250aC10YWJsZSB0ZCAuY2VsbDpob3Zlcntjb2xvcjojNDA5RUZGfS5lbC1tb250aC10YWJsZSB0ZC5pbi1yYW5nZSBkaXYsLmVsLW1vbnRoLXRhYmxlIHRkLmluLXJhbmdlIGRpdjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNGMkY2RkN9LmVsLW1vbnRoLXRhYmxlIHRkLmVuZC1kYXRlIGRpdiwuZWwtbW9udGgtdGFibGUgdGQuc3RhcnQtZGF0ZSBkaXZ7Y29sb3I6I0ZGRn0uZWwtbW9udGgtdGFibGUgdGQuZW5kLWRhdGUgLmNlbGwsLmVsLW1vbnRoLXRhYmxlIHRkLnN0YXJ0LWRhdGUgLmNlbGx7Y29sb3I6I0ZGRjtiYWNrZ3JvdW5kLWNvbG9yOiM0MDlFRkZ9LmVsLW1vbnRoLXRhYmxlIHRkLnN0YXJ0LWRhdGUgZGl2e2JvcmRlci10b3AtbGVmdC1yYWRpdXM6MjRweDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjI0cHh9LmVsLW1vbnRoLXRhYmxlIHRkLmVuZC1kYXRlIGRpdntib3JkZXItdG9wLXJpZ2h0LXJhZGl1czoyNHB4O2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjI0cHh9LmVsLW1vbnRoLXRhYmxlIHRkLmN1cnJlbnQ6bm90KC5kaXNhYmxlZCkgLmNlbGx7Y29sb3I6IzQwOUVGRn0uZWwteWVhci10YWJsZXttYXJnaW46LTFweH0uZWwteWVhci10YWJsZSAuZWwtaWNvbntjb2xvcjojMzAzMTMzfS5lbC15ZWFyLXRhYmxlIHRke3RleHQtYWxpZ246Y2VudGVyO3BhZGRpbmc6MjBweCAzcHg7Y3Vyc29yOnBvaW50ZXJ9LmVsLXllYXItdGFibGUgdGQudG9kYXkgLmNlbGx7Y29sb3I6IzQwOUVGRjtmb250LXdlaWdodDo3MDB9LmVsLXllYXItdGFibGUgdGQuZGlzYWJsZWQgLmNlbGx7YmFja2dyb3VuZC1jb2xvcjojRjVGN0ZBO2N1cnNvcjpub3QtYWxsb3dlZDtjb2xvcjojQzBDNENDfS5lbC15ZWFyLXRhYmxlIHRkLmRpc2FibGVkIC5jZWxsOmhvdmVye2NvbG9yOiNDMEM0Q0N9LmVsLXllYXItdGFibGUgdGQgLmNlbGx7d2lkdGg6NDhweDtoZWlnaHQ6MzJweDtkaXNwbGF5OmJsb2NrO2xpbmUtaGVpZ2h0OjMycHg7Y29sb3I6IzYwNjI2NjttYXJnaW46MCBhdXRvfS5lbC15ZWFyLXRhYmxlIHRkIC5jZWxsOmhvdmVyLC5lbC15ZWFyLXRhYmxlIHRkLmN1cnJlbnQ6bm90KC5kaXNhYmxlZCkgLmNlbGx7Y29sb3I6IzQwOUVGRn0uZWwtZGF0ZS1yYW5nZS1waWNrZXJ7d2lkdGg6NjQ2cHh9LmVsLWRhdGUtcmFuZ2UtcGlja2VyLmhhcy1zaWRlYmFye3dpZHRoOjc1NnB4fS5lbC1kYXRlLXJhbmdlLXBpY2tlciB0YWJsZXt0YWJsZS1sYXlvdXQ6Zml4ZWQ7d2lkdGg6MTAwJX0uZWwtZGF0ZS1yYW5nZS1waWNrZXIgLmVsLXBpY2tlci1wYW5lbF9fYm9keXttaW4td2lkdGg6NTEzcHh9LmVsLWRhdGUtcmFuZ2UtcGlja2VyIC5lbC1waWNrZXItcGFuZWxfX2NvbnRlbnR7bWFyZ2luOjB9LmVsLWRhdGUtcmFuZ2UtcGlja2VyX19oZWFkZXJ7cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7aGVpZ2h0OjI4cHh9LmVsLWRhdGUtcmFuZ2UtcGlja2VyX19oZWFkZXIgW2NsYXNzKj1hcnJvdy1sZWZ0XXtmbG9hdDpsZWZ0fS5lbC1kYXRlLXJhbmdlLXBpY2tlcl9faGVhZGVyIFtjbGFzcyo9YXJyb3ctcmlnaHRde2Zsb2F0OnJpZ2h0fS5lbC1kYXRlLXJhbmdlLXBpY2tlcl9faGVhZGVyIGRpdntmb250LXNpemU6MTZweDtmb250LXdlaWdodDo1MDA7bWFyZ2luLXJpZ2h0OjUwcHh9LmVsLWRhdGUtcmFuZ2UtcGlja2VyX19jb250ZW50e2Zsb2F0OmxlZnQ7d2lkdGg6NTAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDttYXJnaW46MDtwYWRkaW5nOjE2cHh9LmVsLWRhdGUtcmFuZ2UtcGlja2VyX19jb250ZW50LmlzLWxlZnR7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjZTRlNGU0fS5lbC1kYXRlLXJhbmdlLXBpY2tlcl9fY29udGVudCAuZWwtZGF0ZS1yYW5nZS1waWNrZXJfX2hlYWRlciBkaXZ7bWFyZ2luLWxlZnQ6NTBweDttYXJnaW4tcmlnaHQ6NTBweH0uZWwtZGF0ZS1yYW5nZS1waWNrZXJfX2VkaXRvcnMtd3JhcHtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTp0YWJsZS1jZWxsfS5lbC1kYXRlLXJhbmdlLXBpY2tlcl9fZWRpdG9ycy13cmFwLmlzLXJpZ2h0e3RleHQtYWxpZ246cmlnaHR9LmVsLWRhdGUtcmFuZ2UtcGlja2VyX190aW1lLWhlYWRlcntwb3NpdGlvbjpyZWxhdGl2ZTtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZTRlNGU0O2ZvbnQtc2l6ZToxMnB4O3BhZGRpbmc6OHB4IDVweCA1cHg7ZGlzcGxheTp0YWJsZTt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveH0uZWwtZGF0ZS1yYW5nZS1waWNrZXJfX3RpbWUtaGVhZGVyPi5lbC1pY29uLWFycm93LXJpZ2h0e2ZvbnQtc2l6ZToyMHB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtkaXNwbGF5OnRhYmxlLWNlbGw7Y29sb3I6IzMwMzEzM30uZWwtZGF0ZS1yYW5nZS1waWNrZXJfX3RpbWUtcGlja2VyLXdyYXB7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTp0YWJsZS1jZWxsO3BhZGRpbmc6MCA1cHh9LmVsLWRhdGUtcmFuZ2UtcGlja2VyX190aW1lLXBpY2tlci13cmFwIC5lbC1waWNrZXItcGFuZWx7cG9zaXRpb246YWJzb2x1dGU7dG9wOjEzcHg7cmlnaHQ6MDt6LWluZGV4OjE7YmFja2dyb3VuZDojRkZGfS5lbC1kYXRlLXBpY2tlcnt3aWR0aDozMjJweH0uZWwtZGF0ZS1waWNrZXIuaGFzLXNpZGViYXIuaGFzLXRpbWV7d2lkdGg6NDM0cHh9LmVsLWRhdGUtcGlja2VyLmhhcy1zaWRlYmFye3dpZHRoOjQzOHB4fS5lbC1kYXRlLXBpY2tlci5oYXMtdGltZSAuZWwtcGlja2VyLXBhbmVsX19ib2R5LXdyYXBwZXJ7cG9zaXRpb246cmVsYXRpdmV9LmVsLWRhdGUtcGlja2VyIC5lbC1waWNrZXItcGFuZWxfX2NvbnRlbnR7d2lkdGg6MjkycHh9LmVsLWRhdGUtcGlja2VyIHRhYmxle3RhYmxlLWxheW91dDpmaXhlZDt3aWR0aDoxMDAlfS5lbC1kYXRlLXBpY2tlcl9fZWRpdG9yLXdyYXB7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTp0YWJsZS1jZWxsO3BhZGRpbmc6MCA1cHh9LmVsLWRhdGUtcGlja2VyX190aW1lLWhlYWRlcntwb3NpdGlvbjpyZWxhdGl2ZTtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZTRlNGU0O2ZvbnQtc2l6ZToxMnB4O3BhZGRpbmc6OHB4IDVweCA1cHg7ZGlzcGxheTp0YWJsZTt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveH0uZWwtZGF0ZS1waWNrZXJfX2hlYWRlcnttYXJnaW46MTJweDt0ZXh0LWFsaWduOmNlbnRlcn0uZWwtZGF0ZS1waWNrZXJfX2hlYWRlci0tYm9yZGVyZWR7bWFyZ2luLWJvdHRvbTowO3BhZGRpbmctYm90dG9tOjEycHg7Ym9yZGVyLWJvdHRvbTpzb2xpZCAxcHggI0VCRUVGNX0uZWwtZGF0ZS1waWNrZXJfX2hlYWRlci0tYm9yZGVyZWQrLmVsLXBpY2tlci1wYW5lbF9fY29udGVudHttYXJnaW4tdG9wOjB9LmVsLWRhdGUtcGlja2VyX19oZWFkZXItbGFiZWx7Zm9udC1zaXplOjE2cHg7Zm9udC13ZWlnaHQ6NTAwO3BhZGRpbmc6MCA1cHg7bGluZS1oZWlnaHQ6MjJweDt0ZXh0LWFsaWduOmNlbnRlcjtjdXJzb3I6cG9pbnRlcjtjb2xvcjojNjA2MjY2fS5lbC1kYXRlLXBpY2tlcl9faGVhZGVyLWxhYmVsLmFjdGl2ZSwuZWwtZGF0ZS1waWNrZXJfX2hlYWRlci1sYWJlbDpob3Zlcntjb2xvcjojNDA5RUZGfS5lbC1kYXRlLXBpY2tlcl9fcHJldi1idG57ZmxvYXQ6bGVmdH0uZWwtZGF0ZS1waWNrZXJfX25leHQtYnRue2Zsb2F0OnJpZ2h0fS5lbC1kYXRlLXBpY2tlcl9fdGltZS13cmFwe3BhZGRpbmc6MTBweDt0ZXh0LWFsaWduOmNlbnRlcn0uZWwtZGF0ZS1waWNrZXJfX3RpbWUtbGFiZWx7ZmxvYXQ6bGVmdDtjdXJzb3I6cG9pbnRlcjtsaW5lLWhlaWdodDozMHB4O21hcmdpbi1sZWZ0OjEwcHh9LnRpbWUtc2VsZWN0e21hcmdpbjo1cHggMDttaW4td2lkdGg6MH0udGltZS1zZWxlY3QgLmVsLXBpY2tlci1wYW5lbF9fY29udGVudHttYXgtaGVpZ2h0OjIwMHB4O21hcmdpbjowfS50aW1lLXNlbGVjdC1pdGVte3BhZGRpbmc6OHB4IDEwcHg7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MjBweH0udGltZS1zZWxlY3QtaXRlbS5zZWxlY3RlZDpub3QoLmRpc2FibGVkKXtjb2xvcjojNDA5RUZGO2ZvbnQtd2VpZ2h0OjcwMH0udGltZS1zZWxlY3QtaXRlbS5kaXNhYmxlZHtjb2xvcjojRTRFN0VEO2N1cnNvcjpub3QtYWxsb3dlZH0udGltZS1zZWxlY3QtaXRlbTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNGNUY3RkE7Zm9udC13ZWlnaHQ6NzAwO2N1cnNvcjpwb2ludGVyfS5lbC1kYXRlLWVkaXRvcntwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmlubGluZS1ibG9jazt0ZXh0LWFsaWduOmxlZnR9LmVsLWRhdGUtZWRpdG9yLmVsLWlucHV0LC5lbC1kYXRlLWVkaXRvci5lbC1pbnB1dF9faW5uZXJ7d2lkdGg6MjIwcHh9LmVsLWRhdGUtZWRpdG9yLS1tb250aHJhbmdlLmVsLWlucHV0LC5lbC1kYXRlLWVkaXRvci0tbW9udGhyYW5nZS5lbC1pbnB1dF9faW5uZXJ7d2lkdGg6MzAwcHh9LmVsLWRhdGUtZWRpdG9yLS1kYXRlcmFuZ2UuZWwtaW5wdXQsLmVsLWRhdGUtZWRpdG9yLS1kYXRlcmFuZ2UuZWwtaW5wdXRfX2lubmVyLC5lbC1kYXRlLWVkaXRvci0tdGltZXJhbmdlLmVsLWlucHV0LC5lbC1kYXRlLWVkaXRvci0tdGltZXJhbmdlLmVsLWlucHV0X19pbm5lcnt3aWR0aDozNTBweH0uZWwtZGF0ZS1lZGl0b3ItLWRhdGV0aW1lcmFuZ2UuZWwtaW5wdXQsLmVsLWRhdGUtZWRpdG9yLS1kYXRldGltZXJhbmdlLmVsLWlucHV0X19pbm5lcnt3aWR0aDo0MDBweH0uZWwtZGF0ZS1lZGl0b3ItLWRhdGVzIC5lbC1pbnB1dF9faW5uZXJ7dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aGl0ZS1zcGFjZTpub3dyYXB9LmVsLWRhdGUtZWRpdG9yIC5lbC1pY29uLWNpcmNsZS1jbG9zZXtjdXJzb3I6cG9pbnRlcn0uZWwtZGF0ZS1lZGl0b3IgLmVsLXJhbmdlX19pY29ue2ZvbnQtc2l6ZToxNHB4O21hcmdpbi1sZWZ0Oi01cHg7Y29sb3I6I0MwQzRDQztmbG9hdDpsZWZ0O2xpbmUtaGVpZ2h0OjMycHh9LmVsLWRhdGUtZWRpdG9yIC5lbC1yYW5nZS1pbnB1dHstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZTthcHBlYXJhbmNlOm5vbmU7Ym9yZGVyOm5vbmU7b3V0bGluZTowO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxMDAlO21hcmdpbjowO3BhZGRpbmc6MDt3aWR0aDozOSU7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC1zaXplOjE0cHg7Y29sb3I6IzYwNjI2Nn0uZWwtZGF0ZS1lZGl0b3IgLmVsLXJhbmdlLWlucHV0OjotbW96LXBsYWNlaG9sZGVye2NvbG9yOiNDMEM0Q0N9LmVsLWRhdGUtZWRpdG9yIC5lbC1yYW5nZS1pbnB1dDo6cGxhY2Vob2xkZXJ7Y29sb3I6I0MwQzRDQ30uZWwtZGF0ZS1lZGl0b3IgLmVsLXJhbmdlLXNlcGFyYXRvcntkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MTAwJTtwYWRkaW5nOjAgNXB4O21hcmdpbjowO3RleHQtYWxpZ246Y2VudGVyO2xpbmUtaGVpZ2h0OjMycHg7Zm9udC1zaXplOjE0cHg7d2lkdGg6NSU7Y29sb3I6IzMwMzEzM30uZWwtZGF0ZS1lZGl0b3IgLmVsLXJhbmdlX19jbG9zZS1pY29ue2ZvbnQtc2l6ZToxNHB4O2NvbG9yOiNDMEM0Q0M7d2lkdGg6MjVweDtkaXNwbGF5OmlubGluZS1ibG9jaztmbG9hdDpyaWdodDtsaW5lLWhlaWdodDozMnB4fS5lbC1yYW5nZS1lZGl0b3IuZWwtaW5wdXRfX2lubmVye2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO3BhZGRpbmc6M3B4IDEwcHh9LmVsLXJhbmdlLWVkaXRvciAuZWwtcmFuZ2UtaW5wdXR7bGluZS1oZWlnaHQ6MX0uZWwtcmFuZ2UtZWRpdG9yLS1tZWRpdW0uZWwtaW5wdXRfX2lubmVye2hlaWdodDozNnB4fS5lbC1yYW5nZS1lZGl0b3ItLW1lZGl1bSAuZWwtcmFuZ2Utc2VwYXJhdG9ye2xpbmUtaGVpZ2h0OjI4cHg7Zm9udC1zaXplOjE0cHh9LmVsLXJhbmdlLWVkaXRvci0tbWVkaXVtIC5lbC1yYW5nZS1pbnB1dHtmb250LXNpemU6MTRweH0uZWwtcmFuZ2UtZWRpdG9yLS1tZWRpdW0gLmVsLXJhbmdlX19jbG9zZS1pY29uLC5lbC1yYW5nZS1lZGl0b3ItLW1lZGl1bSAuZWwtcmFuZ2VfX2ljb257bGluZS1oZWlnaHQ6MjhweH0uZWwtcmFuZ2UtZWRpdG9yLS1zbWFsbC5lbC1pbnB1dF9faW5uZXJ7aGVpZ2h0OjMycHh9LmVsLXJhbmdlLWVkaXRvci0tc21hbGwgLmVsLXJhbmdlLXNlcGFyYXRvcntsaW5lLWhlaWdodDoyNHB4O2ZvbnQtc2l6ZToxM3B4fS5lbC1yYW5nZS1lZGl0b3ItLXNtYWxsIC5lbC1yYW5nZS1pbnB1dHtmb250LXNpemU6MTNweH0uZWwtcmFuZ2UtZWRpdG9yLS1zbWFsbCAuZWwtcmFuZ2VfX2Nsb3NlLWljb24sLmVsLXJhbmdlLWVkaXRvci0tc21hbGwgLmVsLXJhbmdlX19pY29ue2xpbmUtaGVpZ2h0OjI0cHh9LmVsLXJhbmdlLWVkaXRvci0tbWluaS5lbC1pbnB1dF9faW5uZXJ7aGVpZ2h0OjI4cHh9LmVsLXJhbmdlLWVkaXRvci0tbWluaSAuZWwtcmFuZ2Utc2VwYXJhdG9ye2xpbmUtaGVpZ2h0OjIwcHg7Zm9udC1zaXplOjEycHh9LmVsLXJhbmdlLWVkaXRvci0tbWluaSAuZWwtcmFuZ2UtaW5wdXR7Zm9udC1zaXplOjEycHh9LmVsLXJhbmdlLWVkaXRvci0tbWluaSAuZWwtcmFuZ2VfX2Nsb3NlLWljb24sLmVsLXJhbmdlLWVkaXRvci0tbWluaSAuZWwtcmFuZ2VfX2ljb257bGluZS1oZWlnaHQ6MjBweH0uZWwtcmFuZ2UtZWRpdG9yLmlzLWRpc2FibGVke2JhY2tncm91bmQtY29sb3I6I0Y1RjdGQTtib3JkZXItY29sb3I6I0U0RTdFRDtjb2xvcjojQzBDNENDO2N1cnNvcjpub3QtYWxsb3dlZH0uZWwtcmFuZ2UtZWRpdG9yLmlzLWRpc2FibGVkOmZvY3VzLC5lbC1yYW5nZS1lZGl0b3IuaXMtZGlzYWJsZWQ6aG92ZXJ7Ym9yZGVyLWNvbG9yOiNFNEU3RUR9LmVsLXJhbmdlLWVkaXRvci5pcy1kaXNhYmxlZCBpbnB1dHtiYWNrZ3JvdW5kLWNvbG9yOiNGNUY3RkE7Y29sb3I6I0MwQzRDQztjdXJzb3I6bm90LWFsbG93ZWR9LmVsLXJhbmdlLWVkaXRvci5pcy1kaXNhYmxlZCBpbnB1dDo6LW1vei1wbGFjZWhvbGRlcntjb2xvcjojQzBDNENDfS5lbC1yYW5nZS1lZGl0b3IuaXMtZGlzYWJsZWQgaW5wdXQ6OnBsYWNlaG9sZGVye2NvbG9yOiNDMEM0Q0N9LmVsLXJhbmdlLWVkaXRvci5pcy1kaXNhYmxlZCAuZWwtcmFuZ2Utc2VwYXJhdG9ye2NvbG9yOiNDMEM0Q0N9LmVsLXBpY2tlci1wYW5lbHtjb2xvcjojNjA2MjY2O2JvcmRlcjoxcHggc29saWQgI0U0RTdFRDtib3gtc2hhZG93OjAgMnB4IDEycHggMCByZ2JhKDAsMCwwLC4xKTtiYWNrZ3JvdW5kOiNGRkY7Ym9yZGVyLXJhZGl1czo0cHg7bGluZS1oZWlnaHQ6MzBweDttYXJnaW46NXB4IDB9LmVsLXBpY2tlci1wYW5lbF9fYm9keS13cmFwcGVyOjphZnRlciwuZWwtcGlja2VyLXBhbmVsX19ib2R5OjphZnRlcntjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6dGFibGU7Y2xlYXI6Ym90aH0uZWwtcGlja2VyLXBhbmVsX19jb250ZW50e3Bvc2l0aW9uOnJlbGF0aXZlO21hcmdpbjoxNXB4fS5lbC1waWNrZXItcGFuZWxfX2Zvb3Rlcntib3JkZXItdG9wOjFweCBzb2xpZCAjZTRlNGU0O3BhZGRpbmc6NHB4O3RleHQtYWxpZ246cmlnaHQ7YmFja2dyb3VuZC1jb2xvcjojRkZGO3Bvc2l0aW9uOnJlbGF0aXZlO2ZvbnQtc2l6ZTowfS5lbC1waWNrZXItcGFuZWxfX3Nob3J0Y3V0e2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTtib3JkZXI6MDtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2xpbmUtaGVpZ2h0OjI4cHg7Zm9udC1zaXplOjE0cHg7Y29sb3I6IzYwNjI2NjtwYWRkaW5nLWxlZnQ6MTJweDt0ZXh0LWFsaWduOmxlZnQ7b3V0bGluZTowO2N1cnNvcjpwb2ludGVyfS5lbC1waWNrZXItcGFuZWxfX3Nob3J0Y3V0OmhvdmVye2NvbG9yOiM0MDlFRkZ9LmVsLXBpY2tlci1wYW5lbF9fc2hvcnRjdXQuYWN0aXZle2JhY2tncm91bmQtY29sb3I6I2U2ZjFmZTtjb2xvcjojNDA5RUZGfS5lbC1waWNrZXItcGFuZWxfX2J0bntib3JkZXI6MXB4IHNvbGlkICNkY2RjZGM7Y29sb3I6IzMzMztsaW5lLWhlaWdodDoyNHB4O2JvcmRlci1yYWRpdXM6MnB4O3BhZGRpbmc6MCAyMHB4O2N1cnNvcjpwb2ludGVyO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7b3V0bGluZTowO2ZvbnQtc2l6ZToxMnB4fS5lbC1waWNrZXItcGFuZWxfX2J0bltkaXNhYmxlZF17Y29sb3I6I2NjYztjdXJzb3I6bm90LWFsbG93ZWR9LmVsLXBpY2tlci1wYW5lbF9faWNvbi1idG57Zm9udC1zaXplOjEycHg7Y29sb3I6IzMwMzEzMztib3JkZXI6MDtiYWNrZ3JvdW5kOjAgMDtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOjA7bWFyZ2luLXRvcDo4cHh9LmVsLXBpY2tlci1wYW5lbF9faWNvbi1idG46aG92ZXJ7Y29sb3I6IzQwOUVGRn0uZWwtcGlja2VyLXBhbmVsX19pY29uLWJ0bi5pcy1kaXNhYmxlZHtjb2xvcjojYmJifS5lbC1waWNrZXItcGFuZWxfX2ljb24tYnRuLmlzLWRpc2FibGVkOmhvdmVye2N1cnNvcjpub3QtYWxsb3dlZH0uZWwtcGlja2VyLXBhbmVsX19saW5rLWJ0bnt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmVsLXBpY2tlci1wYW5lbCBbc2xvdD1zaWRlYmFyXSwuZWwtcGlja2VyLXBhbmVsX19zaWRlYmFye3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3dpZHRoOjExMHB4O2JvcmRlci1yaWdodDoxcHggc29saWQgI2U0ZTRlNDtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZy10b3A6NnB4O2JhY2tncm91bmQtY29sb3I6I0ZGRjtvdmVyZmxvdzphdXRvfS5lbC1waWNrZXItcGFuZWwgW3Nsb3Q9c2lkZWJhcl0rLmVsLXBpY2tlci1wYW5lbF9fYm9keSwuZWwtcGlja2VyLXBhbmVsX19zaWRlYmFyKy5lbC1waWNrZXItcGFuZWxfX2JvZHl7bWFyZ2luLWxlZnQ6MTEwcHh9LmVsLXRpbWUtc3Bpbm5lci5oYXMtc2Vjb25kcyAuZWwtdGltZS1zcGlubmVyX193cmFwcGVye3dpZHRoOjMzLjMlfS5lbC10aW1lLXNwaW5uZXJfX3dyYXBwZXJ7bWF4LWhlaWdodDoxOTBweDtvdmVyZmxvdzphdXRvO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjUwJTt2ZXJ0aWNhbC1hbGlnbjp0b3A7cG9zaXRpb246cmVsYXRpdmV9LmVsLXRpbWUtc3Bpbm5lcl9fd3JhcHBlciAuZWwtc2Nyb2xsYmFyX193cmFwOm5vdCguZWwtc2Nyb2xsYmFyX193cmFwLS1oaWRkZW4tZGVmYXVsdCl7cGFkZGluZy1ib3R0b206MTVweH0uZWwtdGltZS1zcGlubmVyX19pbnB1dC5lbC1pbnB1dCAuZWwtaW5wdXRfX2lubmVyLC5lbC10aW1lLXNwaW5uZXJfX2xpc3R7cGFkZGluZzowO3RleHQtYWxpZ246Y2VudGVyfS5lbC10aW1lLXNwaW5uZXJfX3dyYXBwZXIuaXMtYXJyb3d7Ym94LXNpemluZzpib3JkZXItYm94O3RleHQtYWxpZ246Y2VudGVyO292ZXJmbG93OmhpZGRlbn0uZWwtdGltZS1zcGlubmVyX193cmFwcGVyLmlzLWFycm93IC5lbC10aW1lLXNwaW5uZXJfX2xpc3R7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTMycHgpfS5lbC10aW1lLXNwaW5uZXJfX3dyYXBwZXIuaXMtYXJyb3cgLmVsLXRpbWUtc3Bpbm5lcl9faXRlbTpob3Zlcjpub3QoLmRpc2FibGVkKTpub3QoLmFjdGl2ZSl7YmFja2dyb3VuZDojRkZGO2N1cnNvcjpkZWZhdWx0fS5lbC10aW1lLXNwaW5uZXJfX2Fycm93e2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiM5MDkzOTk7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3dpZHRoOjEwMCU7ei1pbmRleDoxO3RleHQtYWxpZ246Y2VudGVyO2hlaWdodDozMHB4O2xpbmUtaGVpZ2h0OjMwcHg7Y3Vyc29yOnBvaW50ZXJ9LmVsLXRpbWUtc3Bpbm5lcl9fYXJyb3c6aG92ZXJ7Y29sb3I6IzQwOUVGRn0uZWwtdGltZS1zcGlubmVyX19hcnJvdy5lbC1pY29uLWFycm93LXVwe3RvcDoxMHB4fS5lbC10aW1lLXNwaW5uZXJfX2Fycm93LmVsLWljb24tYXJyb3ctZG93bntib3R0b206MTBweH0uZWwtdGltZS1zcGlubmVyX19pbnB1dC5lbC1pbnB1dHt3aWR0aDo3MCV9LmVsLXRpbWUtc3Bpbm5lcl9fbGlzdHttYXJnaW46MDtsaXN0LXN0eWxlOm5vbmV9LmVsLXRpbWUtc3Bpbm5lcl9fbGlzdDo6YWZ0ZXIsLmVsLXRpbWUtc3Bpbm5lcl9fbGlzdDo6YmVmb3Jle2NvbnRlbnQ6Jyc7ZGlzcGxheTpibG9jazt3aWR0aDoxMDAlO2hlaWdodDo4MHB4fS5lbC10aW1lLXNwaW5uZXJfX2l0ZW17aGVpZ2h0OjMycHg7bGluZS1oZWlnaHQ6MzJweDtmb250LXNpemU6MTJweDtjb2xvcjojNjA2MjY2fS5lbC10aW1lLXNwaW5uZXJfX2l0ZW06aG92ZXI6bm90KC5kaXNhYmxlZCk6bm90KC5hY3RpdmUpe2JhY2tncm91bmQ6I0Y1RjdGQTtjdXJzb3I6cG9pbnRlcn0uZWwtdGltZS1zcGlubmVyX19pdGVtLmFjdGl2ZTpub3QoLmRpc2FibGVkKXtjb2xvcjojMzAzMTMzO2ZvbnQtd2VpZ2h0OjcwMH0uZWwtdGltZS1zcGlubmVyX19pdGVtLmRpc2FibGVke2NvbG9yOiNDMEM0Q0M7Y3Vyc29yOm5vdC1hbGxvd2VkfS5lbC10aW1lLXBhbmVse21hcmdpbjo1cHggMDtib3JkZXI6MXB4IHNvbGlkICNFNEU3RUQ7YmFja2dyb3VuZC1jb2xvcjojRkZGO2JveC1zaGFkb3c6MCAycHggMTJweCAwIHJnYmEoMCwwLDAsLjEpO2JvcmRlci1yYWRpdXM6MnB4O3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjE4MHB4O2xlZnQ6MDt6LWluZGV4OjEwMDA7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2JveC1zaXppbmc6Y29udGVudC1ib3h9LmVsLXRpbWUtcGFuZWxfX2NvbnRlbnR7Zm9udC1zaXplOjA7cG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3c6aGlkZGVufS5lbC10aW1lLXBhbmVsX19jb250ZW50OjphZnRlciwuZWwtdGltZS1wYW5lbF9fY29udGVudDo6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7dG9wOjUwJTtwb3NpdGlvbjphYnNvbHV0ZTttYXJnaW4tdG9wOi0xNXB4O2hlaWdodDozMnB4O3otaW5kZXg6LTE7bGVmdDowO3JpZ2h0OjA7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmctdG9wOjZweDt0ZXh0LWFsaWduOmxlZnQ7Ym9yZGVyLXRvcDoxcHggc29saWQgI0U0RTdFRDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjRTRFN0VEfS5lbC10aW1lLXBhbmVsX19jb250ZW50OjphZnRlcntsZWZ0OjUwJTttYXJnaW4tbGVmdDoxMiU7bWFyZ2luLXJpZ2h0OjEyJX0uZWwtdGltZS1wYW5lbF9fY29udGVudDo6YmVmb3Jle3BhZGRpbmctbGVmdDo1MCU7bWFyZ2luLXJpZ2h0OjEyJTttYXJnaW4tbGVmdDoxMiV9LmVsLXRpbWUtcGFuZWxfX2NvbnRlbnQuaGFzLXNlY29uZHM6OmFmdGVye2xlZnQ6Y2FsYygxMDAlIC8gMyAqIDIpfS5lbC10aW1lLXBhbmVsX19jb250ZW50Lmhhcy1zZWNvbmRzOjpiZWZvcmV7cGFkZGluZy1sZWZ0OmNhbGMoMTAwJSAvIDMpfS5lbC10aW1lLXBhbmVsX19mb290ZXJ7Ym9yZGVyLXRvcDoxcHggc29saWQgI2U0ZTRlNDtwYWRkaW5nOjRweDtoZWlnaHQ6MzZweDtsaW5lLWhlaWdodDoyNXB4O3RleHQtYWxpZ246cmlnaHQ7Ym94LXNpemluZzpib3JkZXItYm94fS5lbC10aW1lLXBhbmVsX19idG57Ym9yZGVyOm5vbmU7bGluZS1oZWlnaHQ6MjhweDtwYWRkaW5nOjAgNXB4O21hcmdpbjowIDVweDtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O291dGxpbmU6MDtmb250LXNpemU6MTJweDtjb2xvcjojMzAzMTMzfS5lbC10aW1lLXBhbmVsX19idG4uY29uZmlybXtmb250LXdlaWdodDo4MDA7Y29sb3I6IzQwOUVGRn0uZWwtdGltZS1yYW5nZS1waWNrZXJ7d2lkdGg6MzU0cHg7b3ZlcmZsb3c6dmlzaWJsZX0uZWwtdGltZS1yYW5nZS1waWNrZXJfX2NvbnRlbnR7cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7cGFkZGluZzoxMHB4fS5lbC10aW1lLXJhbmdlLXBpY2tlcl9fY2VsbHtib3gtc2l6aW5nOmJvcmRlci1ib3g7bWFyZ2luOjA7cGFkZGluZzo0cHggN3B4IDdweDt3aWR0aDo1MCU7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmVsLXRpbWUtcmFuZ2UtcGlja2VyX19oZWFkZXJ7bWFyZ2luLWJvdHRvbTo1cHg7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC1zaXplOjE0cHh9LmVsLXRpbWUtcmFuZ2UtcGlja2VyX19ib2R5e2JvcmRlci1yYWRpdXM6MnB4O2JvcmRlcjoxcHggc29saWQgI0U0RTdFRH0uZWwtcG9wb3Zlcntwb3NpdGlvbjphYnNvbHV0ZTtiYWNrZ3JvdW5kOiNGRkY7bWluLXdpZHRoOjE1MHB4O2JvcmRlci1yYWRpdXM6NHB4O2JvcmRlcjoxcHggc29saWQgI0VCRUVGNTtwYWRkaW5nOjEycHg7ei1pbmRleDoyMDAwO2NvbG9yOiM2MDYyNjY7bGluZS1oZWlnaHQ6MS40O3RleHQtYWxpZ246anVzdGlmeTtmb250LXNpemU6MTRweDtib3gtc2hhZG93OjAgMnB4IDEycHggMCByZ2JhKDAsMCwwLC4xKTt3b3JkLWJyZWFrOmJyZWFrLWFsbH0uZWwtY2FyZC5pcy1hbHdheXMtc2hhZG93LC5lbC1jYXJkLmlzLWhvdmVyLXNoYWRvdzpmb2N1cywuZWwtY2FyZC5pcy1ob3Zlci1zaGFkb3c6aG92ZXIsLmVsLWNhc2NhZGVyX19kcm9wZG93biwuZWwtY29sb3ItcGlja2VyX19wYW5lbCwuZWwtbWVzc2FnZS1ib3gsLmVsLW5vdGlmaWNhdGlvbnstd2Via2l0LWJveC1zaGFkb3c6MCAycHggMTJweCAwIHJnYmEoMCwwLDAsLjEpfS5lbC1wb3BvdmVyLS1wbGFpbntwYWRkaW5nOjE4cHggMjBweH0uZWwtcG9wb3Zlcl9fdGl0bGV7Y29sb3I6IzMwMzEzMztmb250LXNpemU6MTZweDtsaW5lLWhlaWdodDoxO21hcmdpbi1ib3R0b206MTJweH0uZWwtcG9wb3Zlcjpmb2N1cywuZWwtcG9wb3Zlcjpmb2N1czphY3RpdmUsLmVsLXBvcG92ZXJfX3JlZmVyZW5jZTpmb2N1czpob3ZlciwuZWwtcG9wb3Zlcl9fcmVmZXJlbmNlOmZvY3VzOm5vdCguZm9jdXNpbmcpe291dGxpbmUtd2lkdGg6MH0udi1tb2RhbC1lbnRlcnthbmltYXRpb246di1tb2RhbC1pbiAuMnMgZWFzZX0udi1tb2RhbC1sZWF2ZXthbmltYXRpb246di1tb2RhbC1vdXQgLjJzIGVhc2UgZm9yd2FyZHN9QGtleWZyYW1lcyB2LW1vZGFsLWluezAle29wYWNpdHk6MH19QGtleWZyYW1lcyB2LW1vZGFsLW91dHsxMDAle29wYWNpdHk6MH19LnYtbW9kYWx7cG9zaXRpb246Zml4ZWQ7bGVmdDowO3RvcDowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7b3BhY2l0eTouNTtiYWNrZ3JvdW5kOiMwMDB9LmVsLXBvcHVwLXBhcmVudC0taGlkZGVue292ZXJmbG93OmhpZGRlbn0uZWwtbWVzc2FnZS1ib3h7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6NDIwcHg7cGFkZGluZy1ib3R0b206MTBweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7YmFja2dyb3VuZC1jb2xvcjojRkZGO2JvcmRlci1yYWRpdXM6NHB4O2JvcmRlcjoxcHggc29saWQgI0VCRUVGNTtmb250LXNpemU6MThweDtib3gtc2hhZG93OjAgMnB4IDEycHggMCByZ2JhKDAsMCwwLC4xKTt0ZXh0LWFsaWduOmxlZnQ7b3ZlcmZsb3c6aGlkZGVuO2JhY2tmYWNlLXZpc2liaWxpdHk6aGlkZGVufS5lbC1tZXNzYWdlLWJveF9fd3JhcHBlcntwb3NpdGlvbjpmaXhlZDt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDt0ZXh0LWFsaWduOmNlbnRlcn0uZWwtbWVzc2FnZS1ib3hfX3dyYXBwZXI6OmFmdGVye2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjEwMCU7d2lkdGg6MDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmVsLW1lc3NhZ2UtYm94X19oZWFkZXJ7cG9zaXRpb246cmVsYXRpdmU7cGFkZGluZzoxNXB4IDE1cHggMTBweH0uZWwtbWVzc2FnZS1ib3hfX3RpdGxle3BhZGRpbmctbGVmdDowO21hcmdpbi1ib3R0b206MDtmb250LXNpemU6MThweDtsaW5lLWhlaWdodDoxO2NvbG9yOiMzMDMxMzN9LmVsLW1lc3NhZ2UtYm94X19oZWFkZXJidG57cG9zaXRpb246YWJzb2x1dGU7dG9wOjE1cHg7cmlnaHQ6MTVweDtwYWRkaW5nOjA7Ym9yZGVyOm5vbmU7b3V0bGluZTowO2JhY2tncm91bmQ6MCAwO2ZvbnQtc2l6ZToxNnB4O2N1cnNvcjpwb2ludGVyfS5lbC1mb3JtLWl0ZW0uaXMtZXJyb3IgLmVsLWlucHV0X19pbm5lciwuZWwtZm9ybS1pdGVtLmlzLWVycm9yIC5lbC1pbnB1dF9faW5uZXI6Zm9jdXMsLmVsLWZvcm0taXRlbS5pcy1lcnJvciAuZWwtdGV4dGFyZWFfX2lubmVyLC5lbC1mb3JtLWl0ZW0uaXMtZXJyb3IgLmVsLXRleHRhcmVhX19pbm5lcjpmb2N1cywuZWwtbWVzc2FnZS1ib3hfX2lucHV0IGlucHV0LmludmFsaWQsLmVsLW1lc3NhZ2UtYm94X19pbnB1dCBpbnB1dC5pbnZhbGlkOmZvY3Vze2JvcmRlci1jb2xvcjojRjU2QzZDfS5lbC1tZXNzYWdlLWJveF9faGVhZGVyYnRuIC5lbC1tZXNzYWdlLWJveF9fY2xvc2V7Y29sb3I6IzkwOTM5OX0uZWwtbWVzc2FnZS1ib3hfX2hlYWRlcmJ0bjpmb2N1cyAuZWwtbWVzc2FnZS1ib3hfX2Nsb3NlLC5lbC1tZXNzYWdlLWJveF9faGVhZGVyYnRuOmhvdmVyIC5lbC1tZXNzYWdlLWJveF9fY2xvc2V7Y29sb3I6IzQwOUVGRn0uZWwtbWVzc2FnZS1ib3hfX2NvbnRlbnR7cGFkZGluZzoxMHB4IDE1cHg7Y29sb3I6IzYwNjI2Njtmb250LXNpemU6MTRweH0uZWwtbWVzc2FnZS1ib3hfX2NvbnRhaW5lcntwb3NpdGlvbjpyZWxhdGl2ZX0uZWwtbWVzc2FnZS1ib3hfX2lucHV0e3BhZGRpbmctdG9wOjE1cHh9LmVsLW1lc3NhZ2UtYm94X19zdGF0dXN7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKTtmb250LXNpemU6MjRweCFpbXBvcnRhbnR9LmVsLW1lc3NhZ2UtYm94X19zdGF0dXM6OmJlZm9yZXtwYWRkaW5nLWxlZnQ6MXB4fS5lbC1tZXNzYWdlLWJveF9fc3RhdHVzKy5lbC1tZXNzYWdlLWJveF9fbWVzc2FnZXtwYWRkaW5nLWxlZnQ6MzZweDtwYWRkaW5nLXJpZ2h0OjEycHh9LmVsLW1lc3NhZ2UtYm94X19zdGF0dXMuZWwtaWNvbi1zdWNjZXNze2NvbG9yOiM2N0MyM0F9LmVsLW1lc3NhZ2UtYm94X19zdGF0dXMuZWwtaWNvbi1pbmZve2NvbG9yOiM5MDkzOTl9LmVsLW1lc3NhZ2UtYm94X19zdGF0dXMuZWwtaWNvbi13YXJuaW5ne2NvbG9yOiNFNkEyM0N9LmVsLW1lc3NhZ2UtYm94X19zdGF0dXMuZWwtaWNvbi1lcnJvcntjb2xvcjojRjU2QzZDfS5lbC1tZXNzYWdlLWJveF9fbWVzc2FnZXttYXJnaW46MH0uZWwtbWVzc2FnZS1ib3hfX21lc3NhZ2UgcHttYXJnaW46MDtsaW5lLWhlaWdodDoyNHB4fS5lbC1tZXNzYWdlLWJveF9fZXJyb3Jtc2d7Y29sb3I6I0Y1NkM2Qztmb250LXNpemU6MTJweDttaW4taGVpZ2h0OjE4cHg7bWFyZ2luLXRvcDoycHh9LmVsLW1lc3NhZ2UtYm94X19idG5ze3BhZGRpbmc6NXB4IDE1cHggMDt0ZXh0LWFsaWduOnJpZ2h0fS5lbC1tZXNzYWdlLWJveF9fYnRucyBidXR0b246bnRoLWNoaWxkKDIpe21hcmdpbi1sZWZ0OjEwcHh9LmVsLW1lc3NhZ2UtYm94X19idG5zLXJldmVyc2V7ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2V9LmVsLW1lc3NhZ2UtYm94LS1jZW50ZXJ7cGFkZGluZy1ib3R0b206MzBweH0uZWwtbWVzc2FnZS1ib3gtLWNlbnRlciAuZWwtbWVzc2FnZS1ib3hfX2hlYWRlcntwYWRkaW5nLXRvcDozMHB4fS5lbC1tZXNzYWdlLWJveC0tY2VudGVyIC5lbC1tZXNzYWdlLWJveF9fdGl0bGV7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5lbC1tZXNzYWdlLWJveC0tY2VudGVyIC5lbC1tZXNzYWdlLWJveF9fc3RhdHVze3Bvc2l0aW9uOnJlbGF0aXZlO3RvcDphdXRvO3BhZGRpbmctcmlnaHQ6NXB4O3RleHQtYWxpZ246Y2VudGVyO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xcHgpfS5lbC1tZXNzYWdlLWJveC0tY2VudGVyIC5lbC1tZXNzYWdlLWJveF9fbWVzc2FnZXttYXJnaW4tbGVmdDowfS5lbC1tZXNzYWdlLWJveC0tY2VudGVyIC5lbC1tZXNzYWdlLWJveF9fYnRucywuZWwtbWVzc2FnZS1ib3gtLWNlbnRlciAuZWwtbWVzc2FnZS1ib3hfX2NvbnRlbnR7dGV4dC1hbGlnbjpjZW50ZXJ9LmVsLW1lc3NhZ2UtYm94LS1jZW50ZXIgLmVsLW1lc3NhZ2UtYm94X19jb250ZW50e3BhZGRpbmctbGVmdDoyN3B4O3BhZGRpbmctcmlnaHQ6MjdweH0ubXNnYm94LWZhZGUtZW50ZXItYWN0aXZle2FuaW1hdGlvbjptc2dib3gtZmFkZS1pbiAuM3N9Lm1zZ2JveC1mYWRlLWxlYXZlLWFjdGl2ZXthbmltYXRpb246bXNnYm94LWZhZGUtb3V0IC4zc31Aa2V5ZnJhbWVzIG1zZ2JveC1mYWRlLWluezAle3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLC0yMHB4LDApO29wYWNpdHk6MH0xMDAle3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLDAsMCk7b3BhY2l0eToxfX1Aa2V5ZnJhbWVzIG1zZ2JveC1mYWRlLW91dHswJXt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwwLDApO29wYWNpdHk6MX0xMDAle3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLC0yMHB4LDApO29wYWNpdHk6MH19LmVsLWJyZWFkY3J1bWJ7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MX0uZWwtYnJlYWRjcnVtYjo6YWZ0ZXIsLmVsLWJyZWFkY3J1bWI6OmJlZm9yZXtkaXNwbGF5OnRhYmxlO2NvbnRlbnQ6XFxcIlxcXCJ9LmVsLWJyZWFkY3J1bWI6OmFmdGVye2NsZWFyOmJvdGh9LmVsLWJyZWFkY3J1bWJfX3NlcGFyYXRvcnttYXJnaW46MCA5cHg7Zm9udC13ZWlnaHQ6NzAwO2NvbG9yOiNDMEM0Q0N9LmVsLWJyZWFkY3J1bWJfX3NlcGFyYXRvcltjbGFzcyo9aWNvbl17bWFyZ2luOjAgNnB4O2ZvbnQtd2VpZ2h0OjQwMH0uZWwtYnJlYWRjcnVtYl9faXRlbXtmbG9hdDpsZWZ0fS5lbC1icmVhZGNydW1iX19pbm5lcntjb2xvcjojNjA2MjY2fS5lbC1icmVhZGNydW1iX19pbm5lciBhLC5lbC1icmVhZGNydW1iX19pbm5lci5pcy1saW5re2ZvbnQtd2VpZ2h0OjcwMDt0ZXh0LWRlY29yYXRpb246bm9uZTt0cmFuc2l0aW9uOmNvbG9yIC4ycyBjdWJpYy1iZXppZXIoLjY0NSwuMDQ1LC4zNTUsMSk7Y29sb3I6IzMwMzEzM30uZWwtYnJlYWRjcnVtYl9faW5uZXIgYTpob3ZlciwuZWwtYnJlYWRjcnVtYl9faW5uZXIuaXMtbGluazpob3Zlcntjb2xvcjojNDA5RUZGO2N1cnNvcjpwb2ludGVyfS5lbC1icmVhZGNydW1iX19pdGVtOmxhc3QtY2hpbGQgLmVsLWJyZWFkY3J1bWJfX2lubmVyLC5lbC1icmVhZGNydW1iX19pdGVtOmxhc3QtY2hpbGQgLmVsLWJyZWFkY3J1bWJfX2lubmVyIGEsLmVsLWJyZWFkY3J1bWJfX2l0ZW06bGFzdC1jaGlsZCAuZWwtYnJlYWRjcnVtYl9faW5uZXIgYTpob3ZlciwuZWwtYnJlYWRjcnVtYl9faXRlbTpsYXN0LWNoaWxkIC5lbC1icmVhZGNydW1iX19pbm5lcjpob3Zlcntmb250LXdlaWdodDo0MDA7Y29sb3I6IzYwNjI2NjtjdXJzb3I6dGV4dH0uZWwtZm9ybS0tbGFiZWwtbGVmdCAuZWwtZm9ybS1pdGVtX19sYWJlbHt0ZXh0LWFsaWduOmxlZnR9LmVsLWZvcm0tLWxhYmVsLXRvcCAuZWwtZm9ybS1pdGVtX19sYWJlbHtmbG9hdDpub25lO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3RleHQtYWxpZ246bGVmdDtwYWRkaW5nOjAgMCAxMHB4fS5lbC1mb3JtLS1pbmxpbmUgLmVsLWZvcm0taXRlbXtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6MTBweDt2ZXJ0aWNhbC1hbGlnbjp0b3B9LmVsLWZvcm0tLWlubGluZSAuZWwtZm9ybS1pdGVtX19sYWJlbHtmbG9hdDpub25lO2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5lbC1mb3JtLS1pbmxpbmUgLmVsLWZvcm0taXRlbV9fY29udGVudHtkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjp0b3B9LmVsLWZvcm0tLWlubGluZS5lbC1mb3JtLS1sYWJlbC10b3AgLmVsLWZvcm0taXRlbV9fY29udGVudHtkaXNwbGF5OmJsb2NrfS5lbC1mb3JtLWl0ZW17bWFyZ2luLWJvdHRvbToyMnB4fS5lbC1mb3JtLWl0ZW06OmFmdGVyLC5lbC1mb3JtLWl0ZW06OmJlZm9yZXtkaXNwbGF5OnRhYmxlO2NvbnRlbnQ6XFxcIlxcXCJ9LmVsLWZvcm0taXRlbTo6YWZ0ZXJ7Y2xlYXI6Ym90aH0uZWwtZm9ybS1pdGVtIC5lbC1mb3JtLWl0ZW17bWFyZ2luLWJvdHRvbTowfS5lbC1mb3JtLWl0ZW0tLW1pbmkuZWwtZm9ybS1pdGVtLC5lbC1mb3JtLWl0ZW0tLXNtYWxsLmVsLWZvcm0taXRlbXttYXJnaW4tYm90dG9tOjE4cHh9LmVsLWZvcm0taXRlbSAuZWwtaW5wdXRfX3ZhbGlkYXRlSWNvbntkaXNwbGF5Om5vbmV9LmVsLWZvcm0taXRlbS0tbWVkaXVtIC5lbC1mb3JtLWl0ZW1fX2NvbnRlbnQsLmVsLWZvcm0taXRlbS0tbWVkaXVtIC5lbC1mb3JtLWl0ZW1fX2xhYmVse2xpbmUtaGVpZ2h0OjM2cHh9LmVsLWZvcm0taXRlbS0tc21hbGwgLmVsLWZvcm0taXRlbV9fY29udGVudCwuZWwtZm9ybS1pdGVtLS1zbWFsbCAuZWwtZm9ybS1pdGVtX19sYWJlbHtsaW5lLWhlaWdodDozMnB4fS5lbC1mb3JtLWl0ZW0tLXNtYWxsIC5lbC1mb3JtLWl0ZW1fX2Vycm9ye3BhZGRpbmctdG9wOjJweH0uZWwtZm9ybS1pdGVtLS1taW5pIC5lbC1mb3JtLWl0ZW1fX2NvbnRlbnQsLmVsLWZvcm0taXRlbS0tbWluaSAuZWwtZm9ybS1pdGVtX19sYWJlbHtsaW5lLWhlaWdodDoyOHB4fS5lbC1mb3JtLWl0ZW0tLW1pbmkgLmVsLWZvcm0taXRlbV9fZXJyb3J7cGFkZGluZy10b3A6MXB4fS5lbC1mb3JtLWl0ZW1fX2xhYmVsLXdyYXB7ZmxvYXQ6bGVmdH0uZWwtZm9ybS1pdGVtX19sYWJlbC13cmFwIC5lbC1mb3JtLWl0ZW1fX2xhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO2Zsb2F0Om5vbmV9LmVsLWZvcm0taXRlbV9fbGFiZWx7dGV4dC1hbGlnbjpyaWdodDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7ZmxvYXQ6bGVmdDtmb250LXNpemU6MTRweDtjb2xvcjojNjA2MjY2O2xpbmUtaGVpZ2h0OjQwcHg7cGFkZGluZzowIDEycHggMCAwO2JveC1zaXppbmc6Ym9yZGVyLWJveH0uZWwtZm9ybS1pdGVtX19jb250ZW50e2xpbmUtaGVpZ2h0OjQwcHg7cG9zaXRpb246cmVsYXRpdmU7Zm9udC1zaXplOjE0cHh9LmVsLWZvcm0taXRlbV9fY29udGVudDo6YWZ0ZXIsLmVsLWZvcm0taXRlbV9fY29udGVudDo6YmVmb3Jle2Rpc3BsYXk6dGFibGU7Y29udGVudDpcXFwiXFxcIn0uZWwtZm9ybS1pdGVtX19jb250ZW50OjphZnRlcntjbGVhcjpib3RofS5lbC1mb3JtLWl0ZW1fX2NvbnRlbnQgLmVsLWlucHV0LWdyb3Vwe3ZlcnRpY2FsLWFsaWduOnRvcH0uZWwtZm9ybS1pdGVtX19lcnJvcntjb2xvcjojRjU2QzZDO2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjE7cGFkZGluZy10b3A6NHB4O3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxMDAlO2xlZnQ6MH0uZWwtZm9ybS1pdGVtX19lcnJvci0taW5saW5le3Bvc2l0aW9uOnJlbGF0aXZlO3RvcDphdXRvO2xlZnQ6YXV0bztkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tbGVmdDoxMHB4fS5lbC1mb3JtLWl0ZW0uaXMtcmVxdWlyZWQ6bm90KC5pcy1uby1hc3RlcmlzaykgLmVsLWZvcm0taXRlbV9fbGFiZWwtd3JhcD4uZWwtZm9ybS1pdGVtX19sYWJlbDpiZWZvcmUsLmVsLWZvcm0taXRlbS5pcy1yZXF1aXJlZDpub3QoLmlzLW5vLWFzdGVyaXNrKT4uZWwtZm9ybS1pdGVtX19sYWJlbDpiZWZvcmV7Y29udGVudDonKic7Y29sb3I6I0Y1NkM2QzttYXJnaW4tcmlnaHQ6NHB4fS5lbC1mb3JtLWl0ZW0uaXMtZXJyb3IgLmVsLWlucHV0LWdyb3VwX19hcHBlbmQgLmVsLWlucHV0X19pbm5lciwuZWwtZm9ybS1pdGVtLmlzLWVycm9yIC5lbC1pbnB1dC1ncm91cF9fcHJlcGVuZCAuZWwtaW5wdXRfX2lubmVye2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudH0uZWwtZm9ybS1pdGVtLmlzLWVycm9yIC5lbC1pbnB1dF9fdmFsaWRhdGVJY29ue2NvbG9yOiNGNTZDNkN9LmVsLWZvcm0taXRlbS0tZmVlZGJhY2sgLmVsLWlucHV0X192YWxpZGF0ZUljb257ZGlzcGxheTppbmxpbmUtYmxvY2t9LmVsLXRhYnNfX2hlYWRlcntwYWRkaW5nOjA7cG9zaXRpb246cmVsYXRpdmU7bWFyZ2luOjAgMCAxNXB4fS5lbC10YWJzX19hY3RpdmUtYmFye3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTowO2xlZnQ6MDtoZWlnaHQ6MnB4O2JhY2tncm91bmQtY29sb3I6IzQwOUVGRjt6LWluZGV4OjE7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjNzIGN1YmljLWJlemllciguNjQ1LC4wNDUsLjM1NSwxKTtsaXN0LXN0eWxlOm5vbmV9LmVsLXRhYnNfX25ldy10YWJ7ZmxvYXQ6cmlnaHQ7Ym9yZGVyOjFweCBzb2xpZCAjZDNkY2U2O2hlaWdodDoxOHB4O3dpZHRoOjE4cHg7bGluZS1oZWlnaHQ6MThweDttYXJnaW46MTJweCAwIDlweCAxMHB4O2JvcmRlci1yYWRpdXM6M3B4O3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiNkM2RjZTY7Y3Vyc29yOnBvaW50ZXI7dHJhbnNpdGlvbjphbGwgLjE1c30uZWwtdGFic19fbmV3LXRhYiAuZWwtaWNvbi1wbHVze3RyYW5zZm9ybTpzY2FsZSguOCwuOCl9LmVsLXRhYnNfX25ldy10YWI6aG92ZXJ7Y29sb3I6IzQwOUVGRn0uZWwtdGFic19fbmF2LXdyYXB7b3ZlcmZsb3c6aGlkZGVuO21hcmdpbi1ib3R0b206LTFweDtwb3NpdGlvbjpyZWxhdGl2ZX0uZWwtdGFic19fbmF2LXdyYXA6OmFmdGVye2NvbnRlbnQ6XFxcIlxcXCI7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO2JvdHRvbTowO3dpZHRoOjEwMCU7aGVpZ2h0OjJweDtiYWNrZ3JvdW5kLWNvbG9yOiNFNEU3RUQ7ei1pbmRleDoxfS5lbC10YWJzX19uYXYtd3JhcC5pcy1zY3JvbGxhYmxle3BhZGRpbmc6MCAyMHB4O2JveC1zaXppbmc6Ym9yZGVyLWJveH0uZWwtdGFic19fbmF2LXNjcm9sbHtvdmVyZmxvdzpoaWRkZW59LmVsLXRhYnNfX25hdi1uZXh0LC5lbC10YWJzX19uYXYtcHJldntwb3NpdGlvbjphYnNvbHV0ZTtjdXJzb3I6cG9pbnRlcjtsaW5lLWhlaWdodDo0NHB4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiM5MDkzOTl9LmVsLXRhYnNfX25hdi1uZXh0e3JpZ2h0OjB9LmVsLXRhYnNfX25hdi1wcmV2e2xlZnQ6MH0uZWwtdGFic19fbmF2e3doaXRlLXNwYWNlOm5vd3JhcDtwb3NpdGlvbjpyZWxhdGl2ZTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuM3M7ZmxvYXQ6bGVmdDt6LWluZGV4OjJ9LmVsLXRhYnNfX25hdi5pcy1zdHJldGNoe21pbi13aWR0aDoxMDAlO2Rpc3BsYXk6ZmxleH0uZWwtdGFic19fbmF2LmlzLXN0cmV0Y2g+KntmbGV4OjE7dGV4dC1hbGlnbjpjZW50ZXJ9LmVsLXRhYnNfX2l0ZW17cGFkZGluZzowIDIwcHg7aGVpZ2h0OjQwcHg7Ym94LXNpemluZzpib3JkZXItYm94O2xpbmUtaGVpZ2h0OjQwcHg7ZGlzcGxheTppbmxpbmUtYmxvY2s7bGlzdC1zdHlsZTpub25lO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMDtjb2xvcjojMzAzMTMzO3Bvc2l0aW9uOnJlbGF0aXZlfS5lbC10YWJzX19pdGVtOmZvY3VzLC5lbC10YWJzX19pdGVtOmZvY3VzOmFjdGl2ZXtvdXRsaW5lOjB9LmVsLXRhYnNfX2l0ZW06Zm9jdXMuaXMtYWN0aXZlLmlzLWZvY3VzOm5vdCg6YWN0aXZlKXtib3gtc2hhZG93OjAgMCAycHggMnB4ICM0MDlFRkYgaW5zZXQ7Ym9yZGVyLXJhZGl1czozcHh9LmVsLXRhYnNfX2l0ZW0gLmVsLWljb24tY2xvc2V7Ym9yZGVyLXJhZGl1czo1MCU7dGV4dC1hbGlnbjpjZW50ZXI7dHJhbnNpdGlvbjphbGwgLjNzIGN1YmljLWJlemllciguNjQ1LC4wNDUsLjM1NSwxKTttYXJnaW4tbGVmdDo1cHh9LmVsLXRhYnNfX2l0ZW0gLmVsLWljb24tY2xvc2U6YmVmb3Jle3RyYW5zZm9ybTpzY2FsZSguOSk7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmVsLXRhYnMtLWNhcmQ+LmVsLXRhYnNfX2hlYWRlciAuZWwtdGFic19fYWN0aXZlLWJhciwuZWwtdGFicy0tbGVmdC5lbC10YWJzLS1jYXJkIC5lbC10YWJzX19hY3RpdmUtYmFyLmlzLWxlZnQsLmVsLXRhYnMtLXJpZ2h0LmVsLXRhYnMtLWNhcmQgLmVsLXRhYnNfX2FjdGl2ZS1iYXIuaXMtcmlnaHR7ZGlzcGxheTpub25lfS5lbC10YWJzX19pdGVtIC5lbC1pY29uLWNsb3NlOmhvdmVye2JhY2tncm91bmQtY29sb3I6I0MwQzRDQztjb2xvcjojRkZGfS5lbC10YWJzX19pdGVtLmlzLWFjdGl2ZXtjb2xvcjojNDA5RUZGfS5lbC10YWJzX19pdGVtOmhvdmVye2NvbG9yOiM0MDlFRkY7Y3Vyc29yOnBvaW50ZXJ9LmVsLXRhYnNfX2l0ZW0uaXMtZGlzYWJsZWR7Y29sb3I6I0MwQzRDQztjdXJzb3I6ZGVmYXVsdH0uZWwtdGFic19fY29udGVudHtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9LmVsLXRhYnMtLWNhcmQ+LmVsLXRhYnNfX2hlYWRlcntib3JkZXItYm90dG9tOjFweCBzb2xpZCAjRTRFN0VEfS5lbC10YWJzLS1jYXJkPi5lbC10YWJzX19oZWFkZXIgLmVsLXRhYnNfX25hdi13cmFwOjphZnRlcntjb250ZW50Om5vbmV9LmVsLXRhYnMtLWNhcmQ+LmVsLXRhYnNfX2hlYWRlciAuZWwtdGFic19fbmF2e2JvcmRlcjoxcHggc29saWQgI0U0RTdFRDtib3JkZXItYm90dG9tOm5vbmU7Ym9yZGVyLXJhZGl1czo0cHggNHB4IDAgMDtib3gtc2l6aW5nOmJvcmRlci1ib3h9LmVsLXRhYnMtLWNhcmQ+LmVsLXRhYnNfX2hlYWRlciAuZWwtdGFic19faXRlbSAuZWwtaWNvbi1jbG9zZXtwb3NpdGlvbjpyZWxhdGl2ZTtmb250LXNpemU6MTJweDt3aWR0aDowO2hlaWdodDoxNHB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtsaW5lLWhlaWdodDoxNXB4O292ZXJmbG93OmhpZGRlbjt0b3A6LTFweDtyaWdodDotMnB4O3RyYW5zZm9ybS1vcmlnaW46MTAwJSA1MCV9LmVsLXRhYnMtLWNhcmQ+LmVsLXRhYnNfX2hlYWRlciAuZWwtdGFic19faXRlbXtib3JkZXItYm90dG9tOjFweCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItbGVmdDoxcHggc29saWQgI0U0RTdFRDt0cmFuc2l0aW9uOmNvbG9yIC4zcyBjdWJpYy1iZXppZXIoLjY0NSwuMDQ1LC4zNTUsMSkscGFkZGluZyAuM3MgY3ViaWMtYmV6aWVyKC42NDUsLjA0NSwuMzU1LDEpfS5lbC10YWJzLS1jYXJkPi5lbC10YWJzX19oZWFkZXIgLmVsLXRhYnNfX2l0ZW06Zmlyc3QtY2hpbGR7Ym9yZGVyLWxlZnQ6bm9uZX0uZWwtdGFicy0tY2FyZD4uZWwtdGFic19faGVhZGVyIC5lbC10YWJzX19pdGVtLmlzLWNsb3NhYmxlOmhvdmVye3BhZGRpbmctbGVmdDoxM3B4O3BhZGRpbmctcmlnaHQ6MTNweH0uZWwtdGFicy0tY2FyZD4uZWwtdGFic19faGVhZGVyIC5lbC10YWJzX19pdGVtLmlzLWNsb3NhYmxlOmhvdmVyIC5lbC1pY29uLWNsb3Nle3dpZHRoOjE0cHh9LmVsLXRhYnMtLWNhcmQ+LmVsLXRhYnNfX2hlYWRlciAuZWwtdGFic19faXRlbS5pcy1hY3RpdmV7Ym9yZGVyLWJvdHRvbS1jb2xvcjojRkZGfS5lbC10YWJzLS1jYXJkPi5lbC10YWJzX19oZWFkZXIgLmVsLXRhYnNfX2l0ZW0uaXMtYWN0aXZlLmlzLWNsb3NhYmxle3BhZGRpbmctbGVmdDoyMHB4O3BhZGRpbmctcmlnaHQ6MjBweH0uZWwtdGFicy0tY2FyZD4uZWwtdGFic19faGVhZGVyIC5lbC10YWJzX19pdGVtLmlzLWFjdGl2ZS5pcy1jbG9zYWJsZSAuZWwtaWNvbi1jbG9zZXt3aWR0aDoxNHB4fS5lbC10YWJzLS1ib3JkZXItY2FyZHtiYWNrZ3JvdW5kOiNGRkY7Ym9yZGVyOjFweCBzb2xpZCAjRENERkU2O2JveC1zaGFkb3c6MCAycHggNHB4IDAgcmdiYSgwLDAsMCwuMTIpLDAgMCA2cHggMCByZ2JhKDAsMCwwLC4wNCl9LmVsLXRhYnMtLWJvcmRlci1jYXJkPi5lbC10YWJzX19jb250ZW50e3BhZGRpbmc6MTVweH0uZWwtdGFicy0tYm9yZGVyLWNhcmQ+LmVsLXRhYnNfX2hlYWRlcntiYWNrZ3JvdW5kLWNvbG9yOiNGNUY3RkE7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI0U0RTdFRDttYXJnaW46MH0uZWwtdGFicy0tYm9yZGVyLWNhcmQ+LmVsLXRhYnNfX2hlYWRlciAuZWwtdGFic19fbmF2LXdyYXA6OmFmdGVye2NvbnRlbnQ6bm9uZX0uZWwtdGFicy0tYm9yZGVyLWNhcmQ+LmVsLXRhYnNfX2hlYWRlciAuZWwtdGFic19faXRlbXt0cmFuc2l0aW9uOmFsbCAuM3MgY3ViaWMtYmV6aWVyKC42NDUsLjA0NSwuMzU1LDEpO2JvcmRlcjoxcHggc29saWQgdHJhbnNwYXJlbnQ7bWFyZ2luLXRvcDotMXB4O2NvbG9yOiM5MDkzOTl9LmVsLXRhYnMtLWJvcmRlci1jYXJkPi5lbC10YWJzX19oZWFkZXIgLmVsLXRhYnNfX2l0ZW0rLmVsLXRhYnNfX2l0ZW0sLmVsLXRhYnMtLWJvcmRlci1jYXJkPi5lbC10YWJzX19oZWFkZXIgLmVsLXRhYnNfX2l0ZW06Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6LTFweH0uZWwtY29sLW9mZnNldC0wLC5lbC10YWJzLS1ib3JkZXItY2FyZD4uZWwtdGFic19faGVhZGVyIC5pcy1zY3JvbGxhYmxlIC5lbC10YWJzX19pdGVtOmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjB9LmVsLXRhYnMtLWJvcmRlci1jYXJkPi5lbC10YWJzX19oZWFkZXIgLmVsLXRhYnNfX2l0ZW0uaXMtYWN0aXZle2NvbG9yOiM0MDlFRkY7YmFja2dyb3VuZC1jb2xvcjojRkZGO2JvcmRlci1yaWdodC1jb2xvcjojRENERkU2O2JvcmRlci1sZWZ0LWNvbG9yOiNEQ0RGRTZ9LmVsLXRhYnMtLWJvcmRlci1jYXJkPi5lbC10YWJzX19oZWFkZXIgLmVsLXRhYnNfX2l0ZW06bm90KC5pcy1kaXNhYmxlZCk6aG92ZXJ7Y29sb3I6IzQwOUVGRn0uZWwtdGFicy0tYm9yZGVyLWNhcmQ+LmVsLXRhYnNfX2hlYWRlciAuZWwtdGFic19faXRlbS5pcy1kaXNhYmxlZHtjb2xvcjojQzBDNENDfS5lbC10YWJzLS1ib3R0b20gLmVsLXRhYnNfX2l0ZW0uaXMtYm90dG9tOm50aC1jaGlsZCgyKSwuZWwtdGFicy0tYm90dG9tIC5lbC10YWJzX19pdGVtLmlzLXRvcDpudGgtY2hpbGQoMiksLmVsLXRhYnMtLXRvcCAuZWwtdGFic19faXRlbS5pcy1ib3R0b206bnRoLWNoaWxkKDIpLC5lbC10YWJzLS10b3AgLmVsLXRhYnNfX2l0ZW0uaXMtdG9wOm50aC1jaGlsZCgyKXtwYWRkaW5nLWxlZnQ6MH0uZWwtdGFicy0tYm90dG9tIC5lbC10YWJzX19pdGVtLmlzLWJvdHRvbTpsYXN0LWNoaWxkLC5lbC10YWJzLS1ib3R0b20gLmVsLXRhYnNfX2l0ZW0uaXMtdG9wOmxhc3QtY2hpbGQsLmVsLXRhYnMtLXRvcCAuZWwtdGFic19faXRlbS5pcy1ib3R0b206bGFzdC1jaGlsZCwuZWwtdGFicy0tdG9wIC5lbC10YWJzX19pdGVtLmlzLXRvcDpsYXN0LWNoaWxke3BhZGRpbmctcmlnaHQ6MH0uZWwtY2FzY2FkZXItbWVudTpsYXN0LWNoaWxkIC5lbC1jYXNjYWRlci1ub2RlLC5lbC10YWJzLS1ib3R0b20gLmVsLXRhYnMtLWxlZnQ+LmVsLXRhYnNfX2hlYWRlciAuZWwtdGFic19faXRlbTpsYXN0LWNoaWxkLC5lbC10YWJzLS1ib3R0b20gLmVsLXRhYnMtLXJpZ2h0Pi5lbC10YWJzX19oZWFkZXIgLmVsLXRhYnNfX2l0ZW06bGFzdC1jaGlsZCwuZWwtdGFicy0tYm90dG9tLmVsLXRhYnMtLWJvcmRlci1jYXJkPi5lbC10YWJzX19oZWFkZXIgLmVsLXRhYnNfX2l0ZW06bGFzdC1jaGlsZCwuZWwtdGFicy0tYm90dG9tLmVsLXRhYnMtLWNhcmQ+LmVsLXRhYnNfX2hlYWRlciAuZWwtdGFic19faXRlbTpsYXN0LWNoaWxkLC5lbC10YWJzLS10b3AgLmVsLXRhYnMtLWxlZnQ+LmVsLXRhYnNfX2hlYWRlciAuZWwtdGFic19faXRlbTpsYXN0LWNoaWxkLC5lbC10YWJzLS10b3AgLmVsLXRhYnMtLXJpZ2h0Pi5lbC10YWJzX19oZWFkZXIgLmVsLXRhYnNfX2l0ZW06bGFzdC1jaGlsZCwuZWwtdGFicy0tdG9wLmVsLXRhYnMtLWJvcmRlci1jYXJkPi5lbC10YWJzX19oZWFkZXIgLmVsLXRhYnNfX2l0ZW06bGFzdC1jaGlsZCwuZWwtdGFicy0tdG9wLmVsLXRhYnMtLWNhcmQ+LmVsLXRhYnNfX2hlYWRlciAuZWwtdGFic19faXRlbTpsYXN0LWNoaWxke3BhZGRpbmctcmlnaHQ6MjBweH0uZWwtdGFicy0tYm90dG9tIC5lbC10YWJzLS1sZWZ0Pi5lbC10YWJzX19oZWFkZXIgLmVsLXRhYnNfX2l0ZW06bnRoLWNoaWxkKDIpLC5lbC10YWJzLS1ib3R0b20gLmVsLXRhYnMtLXJpZ2h0Pi5lbC10YWJzX19oZWFkZXIgLmVsLXRhYnNfX2l0ZW06bnRoLWNoaWxkKDIpLC5lbC10YWJzLS1ib3R0b20uZWwtdGFicy0tYm9yZGVyLWNhcmQ+LmVsLXRhYnNfX2hlYWRlciAuZWwtdGFic19faXRlbTpudGgtY2hpbGQoMiksLmVsLXRhYnMtLWJvdHRvbS5lbC10YWJzLS1jYXJkPi5lbC10YWJzX19oZWFkZXIgLmVsLXRhYnNfX2l0ZW06bnRoLWNoaWxkKDIpLC5lbC10YWJzLS10b3AgLmVsLXRhYnMtLWxlZnQ+LmVsLXRhYnNfX2hlYWRlciAuZWwtdGFic19faXRlbTpudGgtY2hpbGQoMiksLmVsLXRhYnMtLXRvcCAuZWwtdGFicy0tcmlnaHQ+LmVsLXRhYnNfX2hlYWRlciAuZWwtdGFic19faXRlbTpudGgtY2hpbGQoMiksLmVsLXRhYnMtLXRvcC5lbC10YWJzLS1ib3JkZXItY2FyZD4uZWwtdGFic19faGVhZGVyIC5lbC10YWJzX19pdGVtOm50aC1jaGlsZCgyKSwuZWwtdGFicy0tdG9wLmVsLXRhYnMtLWNhcmQ+LmVsLXRhYnNfX2hlYWRlciAuZWwtdGFic19faXRlbTpudGgtY2hpbGQoMil7cGFkZGluZy1sZWZ0OjIwcHh9LmVsLXRhYnMtLWJvdHRvbSAuZWwtdGFic19faGVhZGVyLmlzLWJvdHRvbXttYXJnaW4tYm90dG9tOjA7bWFyZ2luLXRvcDoxMHB4fS5lbC10YWJzLS1ib3R0b20uZWwtdGFicy0tYm9yZGVyLWNhcmQgLmVsLXRhYnNfX2hlYWRlci5pcy1ib3R0b217Ym9yZGVyLWJvdHRvbTowO2JvcmRlci10b3A6MXB4IHNvbGlkICNEQ0RGRTZ9LmVsLXRhYnMtLWJvdHRvbS5lbC10YWJzLS1ib3JkZXItY2FyZCAuZWwtdGFic19fbmF2LXdyYXAuaXMtYm90dG9te21hcmdpbi10b3A6LTFweDttYXJnaW4tYm90dG9tOjB9LmVsLXRhYnMtLWJvdHRvbS5lbC10YWJzLS1ib3JkZXItY2FyZCAuZWwtdGFic19faXRlbS5pcy1ib3R0b206bm90KC5pcy1hY3RpdmUpe2JvcmRlcjoxcHggc29saWQgdHJhbnNwYXJlbnR9LmVsLXRhYnMtLWJvdHRvbS5lbC10YWJzLS1ib3JkZXItY2FyZCAuZWwtdGFic19faXRlbS5pcy1ib3R0b217bWFyZ2luOjAgLTFweCAtMXB4fS5lbC10YWJzLS1sZWZ0LC5lbC10YWJzLS1yaWdodHtvdmVyZmxvdzpoaWRkZW59LmVsLXRhYnMtLWxlZnQgLmVsLXRhYnNfX2hlYWRlci5pcy1sZWZ0LC5lbC10YWJzLS1sZWZ0IC5lbC10YWJzX19oZWFkZXIuaXMtcmlnaHQsLmVsLXRhYnMtLWxlZnQgLmVsLXRhYnNfX25hdi1zY3JvbGwsLmVsLXRhYnMtLWxlZnQgLmVsLXRhYnNfX25hdi13cmFwLmlzLWxlZnQsLmVsLXRhYnMtLWxlZnQgLmVsLXRhYnNfX25hdi13cmFwLmlzLXJpZ2h0LC5lbC10YWJzLS1yaWdodCAuZWwtdGFic19faGVhZGVyLmlzLWxlZnQsLmVsLXRhYnMtLXJpZ2h0IC5lbC10YWJzX19oZWFkZXIuaXMtcmlnaHQsLmVsLXRhYnMtLXJpZ2h0IC5lbC10YWJzX19uYXYtc2Nyb2xsLC5lbC10YWJzLS1yaWdodCAuZWwtdGFic19fbmF2LXdyYXAuaXMtbGVmdCwuZWwtdGFicy0tcmlnaHQgLmVsLXRhYnNfX25hdi13cmFwLmlzLXJpZ2h0e2hlaWdodDoxMDAlfS5lbC10YWJzLS1sZWZ0IC5lbC10YWJzX19hY3RpdmUtYmFyLmlzLWxlZnQsLmVsLXRhYnMtLWxlZnQgLmVsLXRhYnNfX2FjdGl2ZS1iYXIuaXMtcmlnaHQsLmVsLXRhYnMtLXJpZ2h0IC5lbC10YWJzX19hY3RpdmUtYmFyLmlzLWxlZnQsLmVsLXRhYnMtLXJpZ2h0IC5lbC10YWJzX19hY3RpdmUtYmFyLmlzLXJpZ2h0e3RvcDowO2JvdHRvbTphdXRvO3dpZHRoOjJweDtoZWlnaHQ6YXV0b30uZWwtdGFicy0tbGVmdCAuZWwtdGFic19fbmF2LXdyYXAuaXMtbGVmdCwuZWwtdGFicy0tbGVmdCAuZWwtdGFic19fbmF2LXdyYXAuaXMtcmlnaHQsLmVsLXRhYnMtLXJpZ2h0IC5lbC10YWJzX19uYXYtd3JhcC5pcy1sZWZ0LC5lbC10YWJzLS1yaWdodCAuZWwtdGFic19fbmF2LXdyYXAuaXMtcmlnaHR7bWFyZ2luLWJvdHRvbTowfS5lbC10YWJzLS1sZWZ0IC5lbC10YWJzX19uYXYtd3JhcC5pcy1sZWZ0Pi5lbC10YWJzX19uYXYtbmV4dCwuZWwtdGFicy0tbGVmdCAuZWwtdGFic19fbmF2LXdyYXAuaXMtbGVmdD4uZWwtdGFic19fbmF2LXByZXYsLmVsLXRhYnMtLWxlZnQgLmVsLXRhYnNfX25hdi13cmFwLmlzLXJpZ2h0Pi5lbC10YWJzX19uYXYtbmV4dCwuZWwtdGFicy0tbGVmdCAuZWwtdGFic19fbmF2LXdyYXAuaXMtcmlnaHQ+LmVsLXRhYnNfX25hdi1wcmV2LC5lbC10YWJzLS1yaWdodCAuZWwtdGFic19fbmF2LXdyYXAuaXMtbGVmdD4uZWwtdGFic19fbmF2LW5leHQsLmVsLXRhYnMtLXJpZ2h0IC5lbC10YWJzX19uYXYtd3JhcC5pcy1sZWZ0Pi5lbC10YWJzX19uYXYtcHJldiwuZWwtdGFicy0tcmlnaHQgLmVsLXRhYnNfX25hdi13cmFwLmlzLXJpZ2h0Pi5lbC10YWJzX19uYXYtbmV4dCwuZWwtdGFicy0tcmlnaHQgLmVsLXRhYnNfX25hdi13cmFwLmlzLXJpZ2h0Pi5lbC10YWJzX19uYXYtcHJldntoZWlnaHQ6MzBweDtsaW5lLWhlaWdodDozMHB4O3dpZHRoOjEwMCU7dGV4dC1hbGlnbjpjZW50ZXI7Y3Vyc29yOnBvaW50ZXJ9LmVsLXRhYnMtLWxlZnQgLmVsLXRhYnNfX25hdi13cmFwLmlzLWxlZnQ+LmVsLXRhYnNfX25hdi1uZXh0IGksLmVsLXRhYnMtLWxlZnQgLmVsLXRhYnNfX25hdi13cmFwLmlzLWxlZnQ+LmVsLXRhYnNfX25hdi1wcmV2IGksLmVsLXRhYnMtLWxlZnQgLmVsLXRhYnNfX25hdi13cmFwLmlzLXJpZ2h0Pi5lbC10YWJzX19uYXYtbmV4dCBpLC5lbC10YWJzLS1sZWZ0IC5lbC10YWJzX19uYXYtd3JhcC5pcy1yaWdodD4uZWwtdGFic19fbmF2LXByZXYgaSwuZWwtdGFicy0tcmlnaHQgLmVsLXRhYnNfX25hdi13cmFwLmlzLWxlZnQ+LmVsLXRhYnNfX25hdi1uZXh0IGksLmVsLXRhYnMtLXJpZ2h0IC5lbC10YWJzX19uYXYtd3JhcC5pcy1sZWZ0Pi5lbC10YWJzX19uYXYtcHJldiBpLC5lbC10YWJzLS1yaWdodCAuZWwtdGFic19fbmF2LXdyYXAuaXMtcmlnaHQ+LmVsLXRhYnNfX25hdi1uZXh0IGksLmVsLXRhYnMtLXJpZ2h0IC5lbC10YWJzX19uYXYtd3JhcC5pcy1yaWdodD4uZWwtdGFic19fbmF2LXByZXYgaXt0cmFuc2Zvcm06cm90YXRlWig5MGRlZyl9LmVsLXRhYnMtLWxlZnQgLmVsLXRhYnNfX25hdi13cmFwLmlzLWxlZnQ+LmVsLXRhYnNfX25hdi1wcmV2LC5lbC10YWJzLS1sZWZ0IC5lbC10YWJzX19uYXYtd3JhcC5pcy1yaWdodD4uZWwtdGFic19fbmF2LXByZXYsLmVsLXRhYnMtLXJpZ2h0IC5lbC10YWJzX19uYXYtd3JhcC5pcy1sZWZ0Pi5lbC10YWJzX19uYXYtcHJldiwuZWwtdGFicy0tcmlnaHQgLmVsLXRhYnNfX25hdi13cmFwLmlzLXJpZ2h0Pi5lbC10YWJzX19uYXYtcHJldntsZWZ0OmF1dG87dG9wOjB9LmVsLXRhYnMtLWxlZnQgLmVsLXRhYnNfX25hdi13cmFwLmlzLWxlZnQ+LmVsLXRhYnNfX25hdi1uZXh0LC5lbC10YWJzLS1sZWZ0IC5lbC10YWJzX19uYXYtd3JhcC5pcy1yaWdodD4uZWwtdGFic19fbmF2LW5leHQsLmVsLXRhYnMtLXJpZ2h0IC5lbC10YWJzX19uYXYtd3JhcC5pcy1sZWZ0Pi5lbC10YWJzX19uYXYtbmV4dCwuZWwtdGFicy0tcmlnaHQgLmVsLXRhYnNfX25hdi13cmFwLmlzLXJpZ2h0Pi5lbC10YWJzX19uYXYtbmV4dHtyaWdodDphdXRvO2JvdHRvbTowfS5lbC10YWJzLS1sZWZ0IC5lbC10YWJzX19hY3RpdmUtYmFyLmlzLWxlZnQsLmVsLXRhYnMtLWxlZnQgLmVsLXRhYnNfX25hdi13cmFwLmlzLWxlZnQ6OmFmdGVye3JpZ2h0OjA7bGVmdDphdXRvfS5lbC10YWJzLS1sZWZ0IC5lbC10YWJzX19uYXYtd3JhcC5pcy1sZWZ0LmlzLXNjcm9sbGFibGUsLmVsLXRhYnMtLWxlZnQgLmVsLXRhYnNfX25hdi13cmFwLmlzLXJpZ2h0LmlzLXNjcm9sbGFibGUsLmVsLXRhYnMtLXJpZ2h0IC5lbC10YWJzX19uYXYtd3JhcC5pcy1sZWZ0LmlzLXNjcm9sbGFibGUsLmVsLXRhYnMtLXJpZ2h0IC5lbC10YWJzX19uYXYtd3JhcC5pcy1yaWdodC5pcy1zY3JvbGxhYmxle3BhZGRpbmc6MzBweCAwfS5lbC10YWJzLS1sZWZ0IC5lbC10YWJzX19uYXYtd3JhcC5pcy1sZWZ0OjphZnRlciwuZWwtdGFicy0tbGVmdCAuZWwtdGFic19fbmF2LXdyYXAuaXMtcmlnaHQ6OmFmdGVyLC5lbC10YWJzLS1yaWdodCAuZWwtdGFic19fbmF2LXdyYXAuaXMtbGVmdDo6YWZ0ZXIsLmVsLXRhYnMtLXJpZ2h0IC5lbC10YWJzX19uYXYtd3JhcC5pcy1yaWdodDo6YWZ0ZXJ7aGVpZ2h0OjEwMCU7d2lkdGg6MnB4O2JvdHRvbTphdXRvO3RvcDowfS5lbC10YWJzLS1sZWZ0IC5lbC10YWJzX19uYXYuaXMtbGVmdCwuZWwtdGFicy0tbGVmdCAuZWwtdGFic19fbmF2LmlzLXJpZ2h0LC5lbC10YWJzLS1yaWdodCAuZWwtdGFic19fbmF2LmlzLWxlZnQsLmVsLXRhYnMtLXJpZ2h0IC5lbC10YWJzX19uYXYuaXMtcmlnaHR7ZmxvYXQ6bm9uZX0uZWwtdGFicy0tbGVmdCAuZWwtdGFic19faXRlbS5pcy1sZWZ0LC5lbC10YWJzLS1sZWZ0IC5lbC10YWJzX19pdGVtLmlzLXJpZ2h0LC5lbC10YWJzLS1yaWdodCAuZWwtdGFic19faXRlbS5pcy1sZWZ0LC5lbC10YWJzLS1yaWdodCAuZWwtdGFic19faXRlbS5pcy1yaWdodHtkaXNwbGF5OmJsb2NrfS5lbC10YWJzLS1sZWZ0IC5lbC10YWJzX19oZWFkZXIuaXMtbGVmdHtmbG9hdDpsZWZ0O21hcmdpbi1ib3R0b206MDttYXJnaW4tcmlnaHQ6MTBweH0uZWwtYnV0dG9uLWdyb3VwPi5lbC1idXR0b246bm90KDpsYXN0LWNoaWxkKSwuZWwtdGFicy0tbGVmdCAuZWwtdGFic19fbmF2LXdyYXAuaXMtbGVmdHttYXJnaW4tcmlnaHQ6LTFweH0uZWwtdGFicy0tbGVmdCAuZWwtdGFic19faXRlbS5pcy1sZWZ0e3RleHQtYWxpZ246cmlnaHR9LmVsLXRhYnMtLWxlZnQuZWwtdGFicy0tY2FyZCAuZWwtdGFic19faXRlbS5pcy1sZWZ0e2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjRTRFN0VEO2JvcmRlci1ib3R0b206bm9uZTtib3JkZXItdG9wOjFweCBzb2xpZCAjRTRFN0VEO3RleHQtYWxpZ246bGVmdH0uZWwtdGFicy0tbGVmdC5lbC10YWJzLS1jYXJkIC5lbC10YWJzX19pdGVtLmlzLWxlZnQ6Zmlyc3QtY2hpbGR7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjRTRFN0VEO2JvcmRlci10b3A6bm9uZX0uZWwtdGFicy0tbGVmdC5lbC10YWJzLS1jYXJkIC5lbC10YWJzX19pdGVtLmlzLWxlZnQuaXMtYWN0aXZle2JvcmRlcjoxcHggc29saWQgI0U0RTdFRDtib3JkZXItcmlnaHQtY29sb3I6I2ZmZjtib3JkZXItbGVmdDpub25lO2JvcmRlci1ib3R0b206bm9uZX0uZWwtdGFicy0tbGVmdC5lbC10YWJzLS1jYXJkIC5lbC10YWJzX19pdGVtLmlzLWxlZnQuaXMtYWN0aXZlOmZpcnN0LWNoaWxke2JvcmRlci10b3A6bm9uZX0uZWwtdGFicy0tbGVmdC5lbC10YWJzLS1jYXJkIC5lbC10YWJzX19pdGVtLmlzLWxlZnQuaXMtYWN0aXZlOmxhc3QtY2hpbGR7Ym9yZGVyLWJvdHRvbTpub25lfS5lbC10YWJzLS1sZWZ0LmVsLXRhYnMtLWNhcmQgLmVsLXRhYnNfX25hdntib3JkZXItcmFkaXVzOjRweCAwIDAgNHB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNFNEU3RUQ7Ym9yZGVyLXJpZ2h0Om5vbmV9LmVsLXRhYnMtLWxlZnQuZWwtdGFicy0tY2FyZCAuZWwtdGFic19fbmV3LXRhYntmbG9hdDpub25lfS5lbC10YWJzLS1sZWZ0LmVsLXRhYnMtLWJvcmRlci1jYXJkIC5lbC10YWJzX19oZWFkZXIuaXMtbGVmdHtib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNkZmU0ZWR9LmVsLXRhYnMtLWxlZnQuZWwtdGFicy0tYm9yZGVyLWNhcmQgLmVsLXRhYnNfX2l0ZW0uaXMtbGVmdHtib3JkZXI6MXB4IHNvbGlkIHRyYW5zcGFyZW50O21hcmdpbjotMXB4IDAgLTFweCAtMXB4fS5lbC10YWJzLS1sZWZ0LmVsLXRhYnMtLWJvcmRlci1jYXJkIC5lbC10YWJzX19pdGVtLmlzLWxlZnQuaXMtYWN0aXZle2JvcmRlci1jb2xvcjojZDFkYmU1IHRyYW5zcGFyZW50fS5lbC10YWJzLS1yaWdodCAuZWwtdGFic19faGVhZGVyLmlzLXJpZ2h0e2Zsb2F0OnJpZ2h0O21hcmdpbi1ib3R0b206MDttYXJnaW4tbGVmdDoxMHB4fS5lbC10YWJzLS1yaWdodCAuZWwtdGFic19fbmF2LXdyYXAuaXMtcmlnaHR7bWFyZ2luLWxlZnQ6LTFweH0uZWwtdGFicy0tcmlnaHQgLmVsLXRhYnNfX25hdi13cmFwLmlzLXJpZ2h0OjphZnRlcntsZWZ0OjA7cmlnaHQ6YXV0b30uZWwtdGFicy0tcmlnaHQgLmVsLXRhYnNfX2FjdGl2ZS1iYXIuaXMtcmlnaHR7bGVmdDowfS5lbC10YWJzLS1yaWdodC5lbC10YWJzLS1jYXJkIC5lbC10YWJzX19pdGVtLmlzLXJpZ2h0e2JvcmRlci1ib3R0b206bm9uZTtib3JkZXItdG9wOjFweCBzb2xpZCAjRTRFN0VEfS5lbC10YWJzLS1yaWdodC5lbC10YWJzLS1jYXJkIC5lbC10YWJzX19pdGVtLmlzLXJpZ2h0OmZpcnN0LWNoaWxke2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjRTRFN0VEO2JvcmRlci10b3A6bm9uZX0uZWwtdGFicy0tcmlnaHQuZWwtdGFicy0tY2FyZCAuZWwtdGFic19faXRlbS5pcy1yaWdodC5pcy1hY3RpdmV7Ym9yZGVyOjFweCBzb2xpZCAjRTRFN0VEO2JvcmRlci1sZWZ0LWNvbG9yOiNmZmY7Ym9yZGVyLXJpZ2h0Om5vbmU7Ym9yZGVyLWJvdHRvbTpub25lfS5lbC10YWJzLS1yaWdodC5lbC10YWJzLS1jYXJkIC5lbC10YWJzX19pdGVtLmlzLXJpZ2h0LmlzLWFjdGl2ZTpmaXJzdC1jaGlsZHtib3JkZXItdG9wOm5vbmV9LmVsLXRhYnMtLXJpZ2h0LmVsLXRhYnMtLWNhcmQgLmVsLXRhYnNfX2l0ZW0uaXMtcmlnaHQuaXMtYWN0aXZlOmxhc3QtY2hpbGR7Ym9yZGVyLWJvdHRvbTpub25lfS5lbC10YWJzLS1yaWdodC5lbC10YWJzLS1jYXJkIC5lbC10YWJzX19uYXZ7Ym9yZGVyLXJhZGl1czowIDRweCA0cHggMDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjRTRFN0VEO2JvcmRlci1sZWZ0Om5vbmV9LmVsLXRhYnMtLXJpZ2h0LmVsLXRhYnMtLWJvcmRlci1jYXJkIC5lbC10YWJzX19oZWFkZXIuaXMtcmlnaHR7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNkZmU0ZWR9LmVsLXRhYnMtLXJpZ2h0LmVsLXRhYnMtLWJvcmRlci1jYXJkIC5lbC10YWJzX19pdGVtLmlzLXJpZ2h0e2JvcmRlcjoxcHggc29saWQgdHJhbnNwYXJlbnQ7bWFyZ2luOi0xcHggLTFweCAtMXB4IDB9LmVsLXRhYnMtLXJpZ2h0LmVsLXRhYnMtLWJvcmRlci1jYXJkIC5lbC10YWJzX19pdGVtLmlzLXJpZ2h0LmlzLWFjdGl2ZXtib3JkZXItY29sb3I6I2QxZGJlNSB0cmFuc3BhcmVudH0uc2xpZGVJbkxlZnQtdHJhbnNpdGlvbiwuc2xpZGVJblJpZ2h0LXRyYW5zaXRpb257ZGlzcGxheTppbmxpbmUtYmxvY2t9LnNsaWRlSW5SaWdodC1lbnRlcnthbmltYXRpb246c2xpZGVJblJpZ2h0LWVudGVyIC4zc30uc2xpZGVJblJpZ2h0LWxlYXZle3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDtyaWdodDowO2FuaW1hdGlvbjpzbGlkZUluUmlnaHQtbGVhdmUgLjNzfS5zbGlkZUluTGVmdC1lbnRlcnthbmltYXRpb246c2xpZGVJbkxlZnQtZW50ZXIgLjNzfS5zbGlkZUluTGVmdC1sZWF2ZXtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7cmlnaHQ6MDthbmltYXRpb246c2xpZGVJbkxlZnQtbGVhdmUgLjNzfUBrZXlmcmFtZXMgc2xpZGVJblJpZ2h0LWVudGVyezAle29wYWNpdHk6MDt0cmFuc2Zvcm0tb3JpZ2luOjAgMDt0cmFuc2Zvcm06dHJhbnNsYXRlWCgxMDAlKX10b3tvcGFjaXR5OjE7dHJhbnNmb3JtLW9yaWdpbjowIDA7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoMCl9fUBrZXlmcmFtZXMgc2xpZGVJblJpZ2h0LWxlYXZlezAle3RyYW5zZm9ybS1vcmlnaW46MCAwO3RyYW5zZm9ybTp0cmFuc2xhdGVYKDApO29wYWNpdHk6MX0xMDAle3RyYW5zZm9ybS1vcmlnaW46MCAwO3RyYW5zZm9ybTp0cmFuc2xhdGVYKDEwMCUpO29wYWNpdHk6MH19QGtleWZyYW1lcyBzbGlkZUluTGVmdC1lbnRlcnswJXtvcGFjaXR5OjA7dHJhbnNmb3JtLW9yaWdpbjowIDA7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTEwMCUpfXRve29wYWNpdHk6MTt0cmFuc2Zvcm0tb3JpZ2luOjAgMDt0cmFuc2Zvcm06dHJhbnNsYXRlWCgwKX19QGtleWZyYW1lcyBzbGlkZUluTGVmdC1sZWF2ZXswJXt0cmFuc2Zvcm0tb3JpZ2luOjAgMDt0cmFuc2Zvcm06dHJhbnNsYXRlWCgwKTtvcGFjaXR5OjF9MTAwJXt0cmFuc2Zvcm0tb3JpZ2luOjAgMDt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtMTAwJSk7b3BhY2l0eTowfX0uZWwtdHJlZXtwb3NpdGlvbjpyZWxhdGl2ZTtjdXJzb3I6ZGVmYXVsdDtiYWNrZ3JvdW5kOiNGRkY7Y29sb3I6IzYwNjI2Nn0uZWwtdHJlZV9fZW1wdHktYmxvY2t7cG9zaXRpb246cmVsYXRpdmU7bWluLWhlaWdodDo2MHB4O3RleHQtYWxpZ246Y2VudGVyO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCV9LmVsLXRyZWVfX2VtcHR5LXRleHR7cG9zaXRpb246YWJzb2x1dGU7bGVmdDo1MCU7dG9wOjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsLTUwJSk7Y29sb3I6IzkwOTM5OTtmb250LXNpemU6MTRweH0uZWwtdHJlZV9fZHJvcC1pbmRpY2F0b3J7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3JpZ2h0OjA7aGVpZ2h0OjFweDtiYWNrZ3JvdW5kLWNvbG9yOiM0MDlFRkZ9LmVsLXRyZWUtbm9kZXt3aGl0ZS1zcGFjZTpub3dyYXA7b3V0bGluZTowfS5lbC10cmVlLW5vZGU6Zm9jdXM+LmVsLXRyZWUtbm9kZV9fY29udGVudHtiYWNrZ3JvdW5kLWNvbG9yOiNGNUY3RkF9LmVsLXRyZWUtbm9kZS5pcy1kcm9wLWlubmVyPi5lbC10cmVlLW5vZGVfX2NvbnRlbnQgLmVsLXRyZWUtbm9kZV9fbGFiZWx7YmFja2dyb3VuZC1jb2xvcjojNDA5RUZGO2NvbG9yOiNmZmZ9LmVsLXRyZWUtbm9kZV9fY29udGVudDpob3ZlciwuZWwtdXBsb2FkLWxpc3RfX2l0ZW06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojRjVGN0ZBfS5lbC10cmVlLW5vZGVfX2NvbnRlbnR7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtoZWlnaHQ6MjZweDtjdXJzb3I6cG9pbnRlcn0uZWwtdHJlZS1ub2RlX19jb250ZW50Pi5lbC10cmVlLW5vZGVfX2V4cGFuZC1pY29ue3BhZGRpbmc6NnB4fS5lbC10cmVlLW5vZGVfX2NvbnRlbnQ+bGFiZWwuZWwtY2hlY2tib3h7bWFyZ2luLXJpZ2h0OjhweH0uZWwtdHJlZS5pcy1kcmFnZ2luZyAuZWwtdHJlZS1ub2RlX19jb250ZW50e2N1cnNvcjptb3ZlfS5lbC10cmVlLmlzLWRyYWdnaW5nIC5lbC10cmVlLW5vZGVfX2NvbnRlbnQgKntwb2ludGVyLWV2ZW50czpub25lfS5lbC10cmVlLmlzLWRyYWdnaW5nLmlzLWRyb3Atbm90LWFsbG93IC5lbC10cmVlLW5vZGVfX2NvbnRlbnR7Y3Vyc29yOm5vdC1hbGxvd2VkfS5lbC10cmVlLW5vZGVfX2V4cGFuZC1pY29ue2N1cnNvcjpwb2ludGVyO2NvbG9yOiNDMEM0Q0M7Zm9udC1zaXplOjEycHg7dHJhbnNmb3JtOnJvdGF0ZSgwKTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuM3MgZWFzZS1pbi1vdXR9LmVsLXRyZWUtbm9kZV9fZXhwYW5kLWljb24uZXhwYW5kZWR7dHJhbnNmb3JtOnJvdGF0ZSg5MGRlZyl9LmVsLXRyZWUtbm9kZV9fZXhwYW5kLWljb24uaXMtbGVhZntjb2xvcjp0cmFuc3BhcmVudDtjdXJzb3I6ZGVmYXVsdH0uZWwtdHJlZS1ub2RlX19sYWJlbHtmb250LXNpemU6MTRweH0uZWwtdHJlZS1ub2RlX19sb2FkaW5nLWljb257bWFyZ2luLXJpZ2h0OjhweDtmb250LXNpemU6MTRweDtjb2xvcjojQzBDNENDfS5lbC10cmVlLW5vZGU+LmVsLXRyZWUtbm9kZV9fY2hpbGRyZW57b3ZlcmZsb3c6aGlkZGVuO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9LmVsLXRyZWUtbm9kZS5pcy1leHBhbmRlZD4uZWwtdHJlZS1ub2RlX19jaGlsZHJlbntkaXNwbGF5OmJsb2NrfS5lbC10cmVlLS1oaWdobGlnaHQtY3VycmVudCAuZWwtdHJlZS1ub2RlLmlzLWN1cnJlbnQ+LmVsLXRyZWUtbm9kZV9fY29udGVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmMGY3ZmZ9LmVsLWFsZXJ0e3dpZHRoOjEwMCU7cGFkZGluZzo4cHggMTZweDttYXJnaW46MDtib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym9yZGVyLXJhZGl1czo0cHg7cG9zaXRpb246cmVsYXRpdmU7YmFja2dyb3VuZC1jb2xvcjojRkZGO292ZXJmbG93OmhpZGRlbjtvcGFjaXR5OjE7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjt0cmFuc2l0aW9uOm9wYWNpdHkgLjJzfS5lbC1hbGVydC5pcy1saWdodCAuZWwtYWxlcnRfX2Nsb3NlYnRue2NvbG9yOiNDMEM0Q0N9LmVsLWFsZXJ0LmlzLWRhcmsgLmVsLWFsZXJ0X19jbG9zZWJ0biwuZWwtYWxlcnQuaXMtZGFyayAuZWwtYWxlcnRfX2Rlc2NyaXB0aW9ue2NvbG9yOiNGRkZ9LmVsLWFsZXJ0LmlzLWNlbnRlcntqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5lbC1hbGVydC0tc3VjY2Vzcy5pcy1saWdodHtiYWNrZ3JvdW5kLWNvbG9yOiNmMGY5ZWI7Y29sb3I6IzY3QzIzQX0uZWwtYWxlcnQtLXN1Y2Nlc3MuaXMtbGlnaHQgLmVsLWFsZXJ0X19kZXNjcmlwdGlvbntjb2xvcjojNjdDMjNBfS5lbC1hbGVydC0tc3VjY2Vzcy5pcy1kYXJre2JhY2tncm91bmQtY29sb3I6IzY3QzIzQTtjb2xvcjojRkZGfS5lbC1hbGVydC0taW5mby5pcy1saWdodHtiYWNrZ3JvdW5kLWNvbG9yOiNmNGY0ZjU7Y29sb3I6IzkwOTM5OX0uZWwtYWxlcnQtLWluZm8uaXMtZGFya3tiYWNrZ3JvdW5kLWNvbG9yOiM5MDkzOTk7Y29sb3I6I0ZGRn0uZWwtYWxlcnQtLWluZm8gLmVsLWFsZXJ0X19kZXNjcmlwdGlvbntjb2xvcjojOTA5Mzk5fS5lbC1hbGVydC0td2FybmluZy5pcy1saWdodHtiYWNrZ3JvdW5kLWNvbG9yOiNmZGY2ZWM7Y29sb3I6I0U2QTIzQ30uZWwtYWxlcnQtLXdhcm5pbmcuaXMtbGlnaHQgLmVsLWFsZXJ0X19kZXNjcmlwdGlvbntjb2xvcjojRTZBMjNDfS5lbC1hbGVydC0td2FybmluZy5pcy1kYXJre2JhY2tncm91bmQtY29sb3I6I0U2QTIzQztjb2xvcjojRkZGfS5lbC1hbGVydC0tZXJyb3IuaXMtbGlnaHR7YmFja2dyb3VuZC1jb2xvcjojZmVmMGYwO2NvbG9yOiNGNTZDNkN9LmVsLWFsZXJ0LS1lcnJvci5pcy1saWdodCAuZWwtYWxlcnRfX2Rlc2NyaXB0aW9ue2NvbG9yOiNGNTZDNkN9LmVsLWFsZXJ0LS1lcnJvci5pcy1kYXJre2JhY2tncm91bmQtY29sb3I6I0Y1NkM2Qztjb2xvcjojRkZGfS5lbC1hbGVydF9fY29udGVudHtkaXNwbGF5OnRhYmxlLWNlbGw7cGFkZGluZzowIDhweH0uZWwtYWxlcnRfX2ljb257Zm9udC1zaXplOjE2cHg7d2lkdGg6MTZweH0uZWwtYWxlcnRfX2ljb24uaXMtYmlne2ZvbnQtc2l6ZToyOHB4O3dpZHRoOjI4cHh9LmVsLWFsZXJ0X190aXRsZXtmb250LXNpemU6MTNweDtsaW5lLWhlaWdodDoxOHB4fS5lbC1hbGVydF9fdGl0bGUuaXMtYm9sZHtmb250LXdlaWdodDo3MDB9LmVsLWFsZXJ0IC5lbC1hbGVydF9fZGVzY3JpcHRpb257Zm9udC1zaXplOjEycHg7bWFyZ2luOjVweCAwIDB9LmVsLWFsZXJ0X19jbG9zZWJ0bntmb250LXNpemU6MTJweDtvcGFjaXR5OjE7cG9zaXRpb246YWJzb2x1dGU7dG9wOjEycHg7cmlnaHQ6MTVweDtjdXJzb3I6cG9pbnRlcn0uZWwtYWxlcnQtZmFkZS1lbnRlciwuZWwtYWxlcnQtZmFkZS1sZWF2ZS1hY3RpdmUsLmVsLWxvYWRpbmctZmFkZS1lbnRlciwuZWwtbG9hZGluZy1mYWRlLWxlYXZlLWFjdGl2ZSwuZWwtbm90aWZpY2F0aW9uLWZhZGUtbGVhdmUtYWN0aXZlLC5lbC11cGxvYWQgaWZyYW1le29wYWNpdHk6MH0uZWwtY2Fyb3VzZWxfX2Fycm93LS1yaWdodCwuZWwtbm90aWZpY2F0aW9uLnJpZ2h0e3JpZ2h0OjE2cHh9LmVsLWFsZXJ0X19jbG9zZWJ0bi5pcy1jdXN0b21lZHtmb250LXN0eWxlOm5vcm1hbDtmb250LXNpemU6MTNweDt0b3A6OXB4fS5lbC1ub3RpZmljYXRpb257ZGlzcGxheTpmbGV4O3dpZHRoOjMzMHB4O3BhZGRpbmc6MTRweCAyNnB4IDE0cHggMTNweDtib3JkZXItcmFkaXVzOjhweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym9yZGVyOjFweCBzb2xpZCAjRUJFRUY1O3Bvc2l0aW9uOmZpeGVkO2JhY2tncm91bmQtY29sb3I6I0ZGRjtib3gtc2hhZG93OjAgMnB4IDEycHggMCByZ2JhKDAsMCwwLC4xKTt0cmFuc2l0aW9uOm9wYWNpdHkgLjNzLHRyYW5zZm9ybSAuM3MsbGVmdCAuM3MscmlnaHQgLjNzLHRvcCAuNHMsYm90dG9tIC4zcztvdmVyZmxvdzpoaWRkZW59LmVsLW5vdGlmaWNhdGlvbi5sZWZ0e2xlZnQ6MTZweH0uZWwtbm90aWZpY2F0aW9uX19ncm91cHttYXJnaW4tbGVmdDoxM3B4O21hcmdpbi1yaWdodDo4cHh9LmVsLW5vdGlmaWNhdGlvbl9fdGl0bGV7Zm9udC13ZWlnaHQ6NzAwO2ZvbnQtc2l6ZToxNnB4O2NvbG9yOiMzMDMxMzM7bWFyZ2luOjB9LmVsLW5vdGlmaWNhdGlvbl9fY29udGVudHtmb250LXNpemU6MTRweDtsaW5lLWhlaWdodDoyMXB4O21hcmdpbjo2cHggMCAwO2NvbG9yOiM2MDYyNjY7dGV4dC1hbGlnbjpqdXN0aWZ5fS5lbC1ub3RpZmljYXRpb25fX2NvbnRlbnQgcHttYXJnaW46MH0uZWwtbm90aWZpY2F0aW9uX19pY29ue2hlaWdodDoyNHB4O3dpZHRoOjI0cHg7Zm9udC1zaXplOjI0cHh9LmVsLW5vdGlmaWNhdGlvbl9fY2xvc2VCdG57cG9zaXRpb246YWJzb2x1dGU7dG9wOjE4cHg7cmlnaHQ6MTVweDtjdXJzb3I6cG9pbnRlcjtjb2xvcjojOTA5Mzk5O2ZvbnQtc2l6ZToxNnB4fS5lbC1ub3RpZmljYXRpb25fX2Nsb3NlQnRuOmhvdmVye2NvbG9yOiM2MDYyNjZ9LmVsLW5vdGlmaWNhdGlvbiAuZWwtaWNvbi1zdWNjZXNze2NvbG9yOiM2N0MyM0F9LmVsLW5vdGlmaWNhdGlvbiAuZWwtaWNvbi1lcnJvcntjb2xvcjojRjU2QzZDfS5lbC1ub3RpZmljYXRpb24gLmVsLWljb24taW5mb3tjb2xvcjojOTA5Mzk5fS5lbC1ub3RpZmljYXRpb24gLmVsLWljb24td2FybmluZ3tjb2xvcjojRTZBMjNDfS5lbC1ub3RpZmljYXRpb24tZmFkZS1lbnRlci5yaWdodHtyaWdodDowO3RyYW5zZm9ybTp0cmFuc2xhdGVYKDEwMCUpfS5lbC1ub3RpZmljYXRpb24tZmFkZS1lbnRlci5sZWZ0e2xlZnQ6MDt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtMTAwJSl9LmVsLWlucHV0LW51bWJlcntwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDoxODBweDtsaW5lLWhlaWdodDozOHB4fS5lbC1pbnB1dC1udW1iZXIgLmVsLWlucHV0e2Rpc3BsYXk6YmxvY2t9LmVsLWlucHV0LW51bWJlciAuZWwtaW5wdXRfX2lubmVyey13ZWJraXQtYXBwZWFyYW5jZTpub25lO3BhZGRpbmctbGVmdDo1MHB4O3BhZGRpbmctcmlnaHQ6NTBweDt0ZXh0LWFsaWduOmNlbnRlcn0uZWwtaW5wdXQtbnVtYmVyX19kZWNyZWFzZSwuZWwtaW5wdXQtbnVtYmVyX19pbmNyZWFzZXtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjE7dG9wOjFweDt3aWR0aDo0MHB4O2hlaWdodDphdXRvO3RleHQtYWxpZ246Y2VudGVyO2JhY2tncm91bmQ6I0Y1RjdGQTtjb2xvcjojNjA2MjY2O2N1cnNvcjpwb2ludGVyO2ZvbnQtc2l6ZToxM3B4fS5lbC1pbnB1dC1udW1iZXJfX2RlY3JlYXNlOmhvdmVyLC5lbC1pbnB1dC1udW1iZXJfX2luY3JlYXNlOmhvdmVye2NvbG9yOiM0MDlFRkZ9LmVsLWlucHV0LW51bWJlcl9fZGVjcmVhc2U6aG92ZXI6bm90KC5pcy1kaXNhYmxlZCl+LmVsLWlucHV0IC5lbC1pbnB1dF9faW5uZXI6bm90KC5pcy1kaXNhYmxlZCksLmVsLWlucHV0LW51bWJlcl9faW5jcmVhc2U6aG92ZXI6bm90KC5pcy1kaXNhYmxlZCl+LmVsLWlucHV0IC5lbC1pbnB1dF9faW5uZXI6bm90KC5pcy1kaXNhYmxlZCl7Ym9yZGVyLWNvbG9yOiM0MDlFRkZ9LmVsLWlucHV0LW51bWJlcl9fZGVjcmVhc2UuaXMtZGlzYWJsZWQsLmVsLWlucHV0LW51bWJlcl9faW5jcmVhc2UuaXMtZGlzYWJsZWR7Y29sb3I6I0MwQzRDQztjdXJzb3I6bm90LWFsbG93ZWR9LmVsLWlucHV0LW51bWJlcl9faW5jcmVhc2V7cmlnaHQ6MXB4O2JvcmRlci1yYWRpdXM6MCA0cHggNHB4IDA7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNEQ0RGRTZ9LmVsLWlucHV0LW51bWJlcl9fZGVjcmVhc2V7bGVmdDoxcHg7Ym9yZGVyLXJhZGl1czo0cHggMCAwIDRweDtib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNEQ0RGRTZ9LmVsLWlucHV0LW51bWJlci5pcy1kaXNhYmxlZCAuZWwtaW5wdXQtbnVtYmVyX19kZWNyZWFzZSwuZWwtaW5wdXQtbnVtYmVyLmlzLWRpc2FibGVkIC5lbC1pbnB1dC1udW1iZXJfX2luY3JlYXNle2JvcmRlci1jb2xvcjojRTRFN0VEO2NvbG9yOiNFNEU3RUR9LmVsLWlucHV0LW51bWJlci5pcy1kaXNhYmxlZCAuZWwtaW5wdXQtbnVtYmVyX19kZWNyZWFzZTpob3ZlciwuZWwtaW5wdXQtbnVtYmVyLmlzLWRpc2FibGVkIC5lbC1pbnB1dC1udW1iZXJfX2luY3JlYXNlOmhvdmVye2NvbG9yOiNFNEU3RUQ7Y3Vyc29yOm5vdC1hbGxvd2VkfS5lbC1pbnB1dC1udW1iZXItLW1lZGl1bXt3aWR0aDoyMDBweDtsaW5lLWhlaWdodDozNHB4fS5lbC1pbnB1dC1udW1iZXItLW1lZGl1bSAuZWwtaW5wdXQtbnVtYmVyX19kZWNyZWFzZSwuZWwtaW5wdXQtbnVtYmVyLS1tZWRpdW0gLmVsLWlucHV0LW51bWJlcl9faW5jcmVhc2V7d2lkdGg6MzZweDtmb250LXNpemU6MTRweH0uZWwtaW5wdXQtbnVtYmVyLS1tZWRpdW0gLmVsLWlucHV0X19pbm5lcntwYWRkaW5nLWxlZnQ6NDNweDtwYWRkaW5nLXJpZ2h0OjQzcHh9LmVsLWlucHV0LW51bWJlci0tc21hbGx7d2lkdGg6MTMwcHg7bGluZS1oZWlnaHQ6MzBweH0uZWwtaW5wdXQtbnVtYmVyLS1zbWFsbCAuZWwtaW5wdXQtbnVtYmVyX19kZWNyZWFzZSwuZWwtaW5wdXQtbnVtYmVyLS1zbWFsbCAuZWwtaW5wdXQtbnVtYmVyX19pbmNyZWFzZXt3aWR0aDozMnB4O2ZvbnQtc2l6ZToxM3B4fS5lbC1pbnB1dC1udW1iZXItLXNtYWxsIC5lbC1pbnB1dC1udW1iZXJfX2RlY3JlYXNlIFtjbGFzcyo9ZWwtaWNvbl0sLmVsLWlucHV0LW51bWJlci0tc21hbGwgLmVsLWlucHV0LW51bWJlcl9faW5jcmVhc2UgW2NsYXNzKj1lbC1pY29uXXt0cmFuc2Zvcm06c2NhbGUoLjkpfS5lbC1pbnB1dC1udW1iZXItLXNtYWxsIC5lbC1pbnB1dF9faW5uZXJ7cGFkZGluZy1sZWZ0OjM5cHg7cGFkZGluZy1yaWdodDozOXB4fS5lbC1pbnB1dC1udW1iZXItLW1pbml7d2lkdGg6MTMwcHg7bGluZS1oZWlnaHQ6MjZweH0uZWwtaW5wdXQtbnVtYmVyLS1taW5pIC5lbC1pbnB1dC1udW1iZXJfX2RlY3JlYXNlLC5lbC1pbnB1dC1udW1iZXItLW1pbmkgLmVsLWlucHV0LW51bWJlcl9faW5jcmVhc2V7d2lkdGg6MjhweDtmb250LXNpemU6MTJweH0uZWwtaW5wdXQtbnVtYmVyLS1taW5pIC5lbC1pbnB1dC1udW1iZXJfX2RlY3JlYXNlIFtjbGFzcyo9ZWwtaWNvbl0sLmVsLWlucHV0LW51bWJlci0tbWluaSAuZWwtaW5wdXQtbnVtYmVyX19pbmNyZWFzZSBbY2xhc3MqPWVsLWljb25de3RyYW5zZm9ybTpzY2FsZSguOCl9LmVsLWlucHV0LW51bWJlci0tbWluaSAuZWwtaW5wdXRfX2lubmVye3BhZGRpbmctbGVmdDozNXB4O3BhZGRpbmctcmlnaHQ6MzVweH0uZWwtaW5wdXQtbnVtYmVyLmlzLXdpdGhvdXQtY29udHJvbHMgLmVsLWlucHV0X19pbm5lcntwYWRkaW5nLWxlZnQ6MTVweDtwYWRkaW5nLXJpZ2h0OjE1cHh9LmVsLWlucHV0LW51bWJlci5pcy1jb250cm9scy1yaWdodCAuZWwtaW5wdXRfX2lubmVye3BhZGRpbmctbGVmdDoxNXB4O3BhZGRpbmctcmlnaHQ6NTBweH0uZWwtaW5wdXQtbnVtYmVyLmlzLWNvbnRyb2xzLXJpZ2h0IC5lbC1pbnB1dC1udW1iZXJfX2RlY3JlYXNlLC5lbC1pbnB1dC1udW1iZXIuaXMtY29udHJvbHMtcmlnaHQgLmVsLWlucHV0LW51bWJlcl9faW5jcmVhc2V7aGVpZ2h0OmF1dG87bGluZS1oZWlnaHQ6MTlweH0uZWwtaW5wdXQtbnVtYmVyLmlzLWNvbnRyb2xzLXJpZ2h0IC5lbC1pbnB1dC1udW1iZXJfX2RlY3JlYXNlIFtjbGFzcyo9ZWwtaWNvbl0sLmVsLWlucHV0LW51bWJlci5pcy1jb250cm9scy1yaWdodCAuZWwtaW5wdXQtbnVtYmVyX19pbmNyZWFzZSBbY2xhc3MqPWVsLWljb25de3RyYW5zZm9ybTpzY2FsZSguOCl9LmVsLWlucHV0LW51bWJlci5pcy1jb250cm9scy1yaWdodCAuZWwtaW5wdXQtbnVtYmVyX19pbmNyZWFzZXtib3JkZXItcmFkaXVzOjAgNHB4IDAgMDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjRENERkU2fS5lbC1pbnB1dC1udW1iZXIuaXMtY29udHJvbHMtcmlnaHQgLmVsLWlucHV0LW51bWJlcl9fZGVjcmVhc2V7cmlnaHQ6MXB4O2JvdHRvbToxcHg7dG9wOmF1dG87bGVmdDphdXRvO2JvcmRlci1yaWdodDpub25lO2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjRENERkU2O2JvcmRlci1yYWRpdXM6MCAwIDRweH0uZWwtaW5wdXQtbnVtYmVyLmlzLWNvbnRyb2xzLXJpZ2h0W2NsYXNzKj1tZWRpdW1dIFtjbGFzcyo9ZGVjcmVhc2VdLC5lbC1pbnB1dC1udW1iZXIuaXMtY29udHJvbHMtcmlnaHRbY2xhc3MqPW1lZGl1bV0gW2NsYXNzKj1pbmNyZWFzZV17bGluZS1oZWlnaHQ6MTdweH0uZWwtaW5wdXQtbnVtYmVyLmlzLWNvbnRyb2xzLXJpZ2h0W2NsYXNzKj1zbWFsbF0gW2NsYXNzKj1kZWNyZWFzZV0sLmVsLWlucHV0LW51bWJlci5pcy1jb250cm9scy1yaWdodFtjbGFzcyo9c21hbGxdIFtjbGFzcyo9aW5jcmVhc2Vde2xpbmUtaGVpZ2h0OjE1cHh9LmVsLWlucHV0LW51bWJlci5pcy1jb250cm9scy1yaWdodFtjbGFzcyo9bWluaV0gW2NsYXNzKj1kZWNyZWFzZV0sLmVsLWlucHV0LW51bWJlci5pcy1jb250cm9scy1yaWdodFtjbGFzcyo9bWluaV0gW2NsYXNzKj1pbmNyZWFzZV17bGluZS1oZWlnaHQ6MTNweH0uZWwtdG9vbHRpcDpmb2N1czpob3ZlciwuZWwtdG9vbHRpcDpmb2N1czpub3QoLmZvY3VzaW5nKXtvdXRsaW5lLXdpZHRoOjB9LmVsLXRvb2x0aXBfX3BvcHBlcntwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXItcmFkaXVzOjRweDtwYWRkaW5nOjEwcHg7ei1pbmRleDoyMDAwO2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjEuMjttaW4td2lkdGg6MTBweDt3b3JkLXdyYXA6YnJlYWstd29yZH0uZWwtdG9vbHRpcF9fcG9wcGVyIC5wb3BwZXJfX2Fycm93LC5lbC10b29sdGlwX19wb3BwZXIgLnBvcHBlcl9fYXJyb3c6OmFmdGVye3Bvc2l0aW9uOmFic29sdXRlO2Rpc3BsYXk6YmxvY2s7d2lkdGg6MDtoZWlnaHQ6MDtib3JkZXItY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyLXN0eWxlOnNvbGlkfS5lbC10b29sdGlwX19wb3BwZXIgLnBvcHBlcl9fYXJyb3d7Ym9yZGVyLXdpZHRoOjZweH0uZWwtdG9vbHRpcF9fcG9wcGVyIC5wb3BwZXJfX2Fycm93OjphZnRlcntjb250ZW50OlxcXCIgXFxcIjtib3JkZXItd2lkdGg6NXB4fS5lbC1idXR0b24tZ3JvdXA6OmFmdGVyLC5lbC1idXR0b24tZ3JvdXA6OmJlZm9yZSwuZWwtY29sb3ItZHJvcGRvd25fX21haW4td3JhcHBlcjo6YWZ0ZXIsLmVsLWxpbmsuaXMtdW5kZXJsaW5lOmhvdmVyOmFmdGVyLC5lbC1wYWdlLWhlYWRlcl9fbGVmdDo6YWZ0ZXIsLmVsLXByb2dyZXNzLWJhcl9faW5uZXI6OmFmdGVyLC5lbC1yb3c6OmFmdGVyLC5lbC1yb3c6OmJlZm9yZSwuZWwtc2xpZGVyOjphZnRlciwuZWwtc2xpZGVyOjpiZWZvcmUsLmVsLXNsaWRlcl9fYnV0dG9uLXdyYXBwZXI6OmFmdGVyLC5lbC10cmFuc2Zlci1wYW5lbCAuZWwtdHJhbnNmZXItcGFuZWxfX2Zvb3Rlcjo6YWZ0ZXIsLmVsLXVwbG9hZC1jb3Zlcjo6YWZ0ZXIsLmVsLXVwbG9hZC1saXN0LS1waWN0dXJlLWNhcmQgLmVsLXVwbG9hZC1saXN0X19pdGVtLWFjdGlvbnM6OmFmdGVye2NvbnRlbnQ6XFxcIlxcXCJ9LmVsLXRvb2x0aXBfX3BvcHBlclt4LXBsYWNlbWVudF49dG9wXXttYXJnaW4tYm90dG9tOjEycHh9LmVsLXRvb2x0aXBfX3BvcHBlclt4LXBsYWNlbWVudF49dG9wXSAucG9wcGVyX19hcnJvd3tib3R0b206LTZweDtib3JkZXItdG9wLWNvbG9yOiMzMDMxMzM7Ym9yZGVyLWJvdHRvbS13aWR0aDowfS5lbC10b29sdGlwX19wb3BwZXJbeC1wbGFjZW1lbnRePXRvcF0gLnBvcHBlcl9fYXJyb3c6OmFmdGVye2JvdHRvbToxcHg7bWFyZ2luLWxlZnQ6LTVweDtib3JkZXItdG9wLWNvbG9yOiMzMDMxMzM7Ym9yZGVyLWJvdHRvbS13aWR0aDowfS5lbC10b29sdGlwX19wb3BwZXJbeC1wbGFjZW1lbnRePWJvdHRvbV17bWFyZ2luLXRvcDoxMnB4fS5lbC10b29sdGlwX19wb3BwZXJbeC1wbGFjZW1lbnRePWJvdHRvbV0gLnBvcHBlcl9fYXJyb3d7dG9wOi02cHg7Ym9yZGVyLXRvcC13aWR0aDowO2JvcmRlci1ib3R0b20tY29sb3I6IzMwMzEzM30uZWwtdG9vbHRpcF9fcG9wcGVyW3gtcGxhY2VtZW50Xj1ib3R0b21dIC5wb3BwZXJfX2Fycm93OjphZnRlcnt0b3A6MXB4O21hcmdpbi1sZWZ0Oi01cHg7Ym9yZGVyLXRvcC13aWR0aDowO2JvcmRlci1ib3R0b20tY29sb3I6IzMwMzEzM30uZWwtdG9vbHRpcF9fcG9wcGVyW3gtcGxhY2VtZW50Xj1yaWdodF17bWFyZ2luLWxlZnQ6MTJweH0uZWwtdG9vbHRpcF9fcG9wcGVyW3gtcGxhY2VtZW50Xj1yaWdodF0gLnBvcHBlcl9fYXJyb3d7bGVmdDotNnB4O2JvcmRlci1yaWdodC1jb2xvcjojMzAzMTMzO2JvcmRlci1sZWZ0LXdpZHRoOjB9LmVsLXRvb2x0aXBfX3BvcHBlclt4LXBsYWNlbWVudF49cmlnaHRdIC5wb3BwZXJfX2Fycm93OjphZnRlcntib3R0b206LTVweDtsZWZ0OjFweDtib3JkZXItcmlnaHQtY29sb3I6IzMwMzEzMztib3JkZXItbGVmdC13aWR0aDowfS5lbC10b29sdGlwX19wb3BwZXJbeC1wbGFjZW1lbnRePWxlZnRde21hcmdpbi1yaWdodDoxMnB4fS5lbC10b29sdGlwX19wb3BwZXJbeC1wbGFjZW1lbnRePWxlZnRdIC5wb3BwZXJfX2Fycm93e3JpZ2h0Oi02cHg7Ym9yZGVyLXJpZ2h0LXdpZHRoOjA7Ym9yZGVyLWxlZnQtY29sb3I6IzMwMzEzM30uZWwtdG9vbHRpcF9fcG9wcGVyW3gtcGxhY2VtZW50Xj1sZWZ0XSAucG9wcGVyX19hcnJvdzo6YWZ0ZXJ7cmlnaHQ6MXB4O2JvdHRvbTotNXB4O21hcmdpbi1sZWZ0Oi01cHg7Ym9yZGVyLXJpZ2h0LXdpZHRoOjA7Ym9yZGVyLWxlZnQtY29sb3I6IzMwMzEzM30uZWwtdG9vbHRpcF9fcG9wcGVyLmlzLWRhcmt7YmFja2dyb3VuZDojMzAzMTMzO2NvbG9yOiNGRkZ9LmVsLXRvb2x0aXBfX3BvcHBlci5pcy1saWdodHtiYWNrZ3JvdW5kOiNGRkY7Ym9yZGVyOjFweCBzb2xpZCAjMzAzMTMzfS5lbC10b29sdGlwX19wb3BwZXIuaXMtbGlnaHRbeC1wbGFjZW1lbnRePXRvcF0gLnBvcHBlcl9fYXJyb3d7Ym9yZGVyLXRvcC1jb2xvcjojMzAzMTMzfS5lbC10b29sdGlwX19wb3BwZXIuaXMtbGlnaHRbeC1wbGFjZW1lbnRePXRvcF0gLnBvcHBlcl9fYXJyb3c6OmFmdGVye2JvcmRlci10b3AtY29sb3I6I0ZGRn0uZWwtdG9vbHRpcF9fcG9wcGVyLmlzLWxpZ2h0W3gtcGxhY2VtZW50Xj1ib3R0b21dIC5wb3BwZXJfX2Fycm93e2JvcmRlci1ib3R0b20tY29sb3I6IzMwMzEzM30uZWwtdG9vbHRpcF9fcG9wcGVyLmlzLWxpZ2h0W3gtcGxhY2VtZW50Xj1ib3R0b21dIC5wb3BwZXJfX2Fycm93OjphZnRlcntib3JkZXItYm90dG9tLWNvbG9yOiNGRkZ9LmVsLXRvb2x0aXBfX3BvcHBlci5pcy1saWdodFt4LXBsYWNlbWVudF49bGVmdF0gLnBvcHBlcl9fYXJyb3d7Ym9yZGVyLWxlZnQtY29sb3I6IzMwMzEzM30uZWwtdG9vbHRpcF9fcG9wcGVyLmlzLWxpZ2h0W3gtcGxhY2VtZW50Xj1sZWZ0XSAucG9wcGVyX19hcnJvdzo6YWZ0ZXJ7Ym9yZGVyLWxlZnQtY29sb3I6I0ZGRn0uZWwtdG9vbHRpcF9fcG9wcGVyLmlzLWxpZ2h0W3gtcGxhY2VtZW50Xj1yaWdodF0gLnBvcHBlcl9fYXJyb3d7Ym9yZGVyLXJpZ2h0LWNvbG9yOiMzMDMxMzN9LmVsLXRvb2x0aXBfX3BvcHBlci5pcy1saWdodFt4LXBsYWNlbWVudF49cmlnaHRdIC5wb3BwZXJfX2Fycm93OjphZnRlcntib3JkZXItcmlnaHQtY29sb3I6I0ZGRn0uZWwtc2xpZGVyOjphZnRlciwuZWwtc2xpZGVyOjpiZWZvcmV7ZGlzcGxheTp0YWJsZX0uZWwtc2xpZGVyX19idXR0b24td3JhcHBlciAuZWwtdG9vbHRpcCwuZWwtc2xpZGVyX19idXR0b24td3JhcHBlcjo6YWZ0ZXJ7ZGlzcGxheTppbmxpbmUtYmxvY2s7dmVydGljYWwtYWxpZ246bWlkZGxlfS5lbC1zbGlkZXI6OmFmdGVye2NsZWFyOmJvdGh9LmVsLXNsaWRlcl9fcnVud2F5e3dpZHRoOjEwMCU7aGVpZ2h0OjZweDttYXJnaW46MTZweCAwO2JhY2tncm91bmQtY29sb3I6I0U0RTdFRDtib3JkZXItcmFkaXVzOjNweDtwb3NpdGlvbjpyZWxhdGl2ZTtjdXJzb3I6cG9pbnRlcjt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmVsLXNsaWRlcl9fcnVud2F5LnNob3ctaW5wdXR7bWFyZ2luLXJpZ2h0OjE2MHB4O3dpZHRoOmF1dG99LmVsLXNsaWRlcl9fcnVud2F5LmRpc2FibGVke2N1cnNvcjpkZWZhdWx0fS5lbC1zbGlkZXJfX3J1bndheS5kaXNhYmxlZCAuZWwtc2xpZGVyX19iYXJ7YmFja2dyb3VuZC1jb2xvcjojQzBDNENDfS5lbC1zbGlkZXJfX3J1bndheS5kaXNhYmxlZCAuZWwtc2xpZGVyX19idXR0b257Ym9yZGVyLWNvbG9yOiNDMEM0Q0N9LmVsLXNsaWRlcl9fcnVud2F5LmRpc2FibGVkIC5lbC1zbGlkZXJfX2J1dHRvbi13cmFwcGVyLmRyYWdnaW5nLC5lbC1zbGlkZXJfX3J1bndheS5kaXNhYmxlZCAuZWwtc2xpZGVyX19idXR0b24td3JhcHBlci5ob3ZlciwuZWwtc2xpZGVyX19ydW53YXkuZGlzYWJsZWQgLmVsLXNsaWRlcl9fYnV0dG9uLXdyYXBwZXI6aG92ZXJ7Y3Vyc29yOm5vdC1hbGxvd2VkfS5lbC1zbGlkZXJfX3J1bndheS5kaXNhYmxlZCAuZWwtc2xpZGVyX19idXR0b24uZHJhZ2dpbmcsLmVsLXNsaWRlcl9fcnVud2F5LmRpc2FibGVkIC5lbC1zbGlkZXJfX2J1dHRvbi5ob3ZlciwuZWwtc2xpZGVyX19ydW53YXkuZGlzYWJsZWQgLmVsLXNsaWRlcl9fYnV0dG9uOmhvdmVye3RyYW5zZm9ybTpzY2FsZSgxKTtjdXJzb3I6bm90LWFsbG93ZWR9LmVsLXNsaWRlcl9fYnV0dG9uLXdyYXBwZXIsLmVsLXNsaWRlcl9fc3RvcHstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVYKC01MCUpO3Bvc2l0aW9uOmFic29sdXRlfS5lbC1zbGlkZXJfX2lucHV0e2Zsb2F0OnJpZ2h0O21hcmdpbi10b3A6M3B4O3dpZHRoOjEzMHB4fS5lbC1zbGlkZXJfX2lucHV0LmVsLWlucHV0LW51bWJlci0tbWluaXttYXJnaW4tdG9wOjVweH0uZWwtc2xpZGVyX19pbnB1dC5lbC1pbnB1dC1udW1iZXItLW1lZGl1bXttYXJnaW4tdG9wOjB9LmVsLXNsaWRlcl9faW5wdXQuZWwtaW5wdXQtbnVtYmVyLS1sYXJnZXttYXJnaW4tdG9wOi0ycHh9LmVsLXNsaWRlcl9fYmFye2hlaWdodDo2cHg7YmFja2dyb3VuZC1jb2xvcjojNDA5RUZGO2JvcmRlci10b3AtbGVmdC1yYWRpdXM6M3B4O2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6M3B4O3Bvc2l0aW9uOmFic29sdXRlfS5lbC1zbGlkZXJfX2J1dHRvbi13cmFwcGVye2hlaWdodDozNnB4O3dpZHRoOjM2cHg7ei1pbmRleDoxMDAxO3RvcDotMTVweDt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtNTAlKTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O3RleHQtYWxpZ246Y2VudGVyOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtsaW5lLWhlaWdodDpub3JtYWx9LmVsLWltYWdlLXZpZXdlcl9fYnRuLC5lbC1zbGlkZXJfX2J1dHRvbiwuZWwtc3RlcF9faWNvbi1pbm5lcnstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmV9LmVsLXNsaWRlcl9fYnV0dG9uLXdyYXBwZXI6OmFmdGVye2hlaWdodDoxMDAlfS5lbC1zbGlkZXJfX2J1dHRvbi13cmFwcGVyLmhvdmVyLC5lbC1zbGlkZXJfX2J1dHRvbi13cmFwcGVyOmhvdmVye2N1cnNvcjpncmFifS5lbC1zbGlkZXJfX2J1dHRvbi13cmFwcGVyLmRyYWdnaW5ne2N1cnNvcjpncmFiYmluZ30uZWwtc2xpZGVyX19idXR0b257d2lkdGg6MTZweDtoZWlnaHQ6MTZweDtib3JkZXI6MnB4IHNvbGlkICM0MDlFRkY7YmFja2dyb3VuZC1jb2xvcjojRkZGO2JvcmRlci1yYWRpdXM6NTAlO3RyYW5zaXRpb246LjJzOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZX0uZWwtc2xpZGVyX19idXR0b24uZHJhZ2dpbmcsLmVsLXNsaWRlcl9fYnV0dG9uLmhvdmVyLC5lbC1zbGlkZXJfX2J1dHRvbjpob3Zlcnt0cmFuc2Zvcm06c2NhbGUoMS4yKX0uZWwtc2xpZGVyX19idXR0b24uaG92ZXIsLmVsLXNsaWRlcl9fYnV0dG9uOmhvdmVye2N1cnNvcjpncmFifS5lbC1zbGlkZXJfX2J1dHRvbi5kcmFnZ2luZ3tjdXJzb3I6Z3JhYmJpbmd9LmVsLXNsaWRlcl9fc3RvcHtoZWlnaHQ6NnB4O3dpZHRoOjZweDtib3JkZXItcmFkaXVzOjEwMCU7YmFja2dyb3VuZC1jb2xvcjojRkZGO3RyYW5zZm9ybTp0cmFuc2xhdGVYKC01MCUpfS5lbC1zbGlkZXJfX21hcmtze3RvcDowO2xlZnQ6MTJweDt3aWR0aDoxOHB4O2hlaWdodDoxMDAlfS5lbC1zbGlkZXJfX21hcmtzLXRleHR7cG9zaXRpb246YWJzb2x1dGU7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTUwJSk7Zm9udC1zaXplOjE0cHg7Y29sb3I6IzkwOTM5OTttYXJnaW4tdG9wOjE1cHh9LmVsLXNsaWRlci5pcy12ZXJ0aWNhbHtwb3NpdGlvbjpyZWxhdGl2ZX0uZWwtc2xpZGVyLmlzLXZlcnRpY2FsIC5lbC1zbGlkZXJfX3J1bndheXt3aWR0aDo2cHg7aGVpZ2h0OjEwMCU7bWFyZ2luOjAgMTZweH0uZWwtc2xpZGVyLmlzLXZlcnRpY2FsIC5lbC1zbGlkZXJfX2Jhcnt3aWR0aDo2cHg7aGVpZ2h0OmF1dG87Ym9yZGVyLXJhZGl1czowIDAgM3B4IDNweH0uZWwtc2xpZGVyLmlzLXZlcnRpY2FsIC5lbC1zbGlkZXJfX2J1dHRvbi13cmFwcGVye3RvcDphdXRvO2xlZnQ6LTE1cHg7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoNTAlKX0uZWwtc2xpZGVyLmlzLXZlcnRpY2FsIC5lbC1zbGlkZXJfX3N0b3B7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoNTAlKX0uZWwtc2xpZGVyLmlzLXZlcnRpY2FsLmVsLXNsaWRlci0td2l0aC1pbnB1dHtwYWRkaW5nLWJvdHRvbTo1OHB4fS5lbC1zbGlkZXIuaXMtdmVydGljYWwuZWwtc2xpZGVyLS13aXRoLWlucHV0IC5lbC1zbGlkZXJfX2lucHV0e292ZXJmbG93OnZpc2libGU7ZmxvYXQ6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTtib3R0b206MjJweDt3aWR0aDozNnB4O21hcmdpbi10b3A6MTVweH0uZWwtc2xpZGVyLmlzLXZlcnRpY2FsLmVsLXNsaWRlci0td2l0aC1pbnB1dCAuZWwtc2xpZGVyX19pbnB1dCAuZWwtaW5wdXRfX2lubmVye3RleHQtYWxpZ246Y2VudGVyO3BhZGRpbmctbGVmdDo1cHg7cGFkZGluZy1yaWdodDo1cHh9LmVsLXNsaWRlci5pcy12ZXJ0aWNhbC5lbC1zbGlkZXItLXdpdGgtaW5wdXQgLmVsLXNsaWRlcl9faW5wdXQgLmVsLWlucHV0LW51bWJlcl9fZGVjcmVhc2UsLmVsLXNsaWRlci5pcy12ZXJ0aWNhbC5lbC1zbGlkZXItLXdpdGgtaW5wdXQgLmVsLXNsaWRlcl9faW5wdXQgLmVsLWlucHV0LW51bWJlcl9faW5jcmVhc2V7dG9wOjMycHg7bWFyZ2luLXRvcDotMXB4O2JvcmRlcjoxcHggc29saWQgI0RDREZFNjtsaW5lLWhlaWdodDoyMHB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDt0cmFuc2l0aW9uOmJvcmRlci1jb2xvciAuMnMgY3ViaWMtYmV6aWVyKC42NDUsLjA0NSwuMzU1LDEpfS5lbC1zbGlkZXIuaXMtdmVydGljYWwuZWwtc2xpZGVyLS13aXRoLWlucHV0IC5lbC1zbGlkZXJfX2lucHV0IC5lbC1pbnB1dC1udW1iZXJfX2RlY3JlYXNle3dpZHRoOjE4cHg7cmlnaHQ6MThweDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjRweH0uZWwtc2xpZGVyLmlzLXZlcnRpY2FsLmVsLXNsaWRlci0td2l0aC1pbnB1dCAuZWwtc2xpZGVyX19pbnB1dCAuZWwtaW5wdXQtbnVtYmVyX19pbmNyZWFzZXt3aWR0aDoxOXB4O2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjRweH0uZWwtc2xpZGVyLmlzLXZlcnRpY2FsLmVsLXNsaWRlci0td2l0aC1pbnB1dCAuZWwtc2xpZGVyX19pbnB1dCAuZWwtaW5wdXQtbnVtYmVyX19pbmNyZWFzZX4uZWwtaW5wdXQgLmVsLWlucHV0X19pbm5lcntib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MH0uZWwtc2xpZGVyLmlzLXZlcnRpY2FsLmVsLXNsaWRlci0td2l0aC1pbnB1dCAuZWwtc2xpZGVyX19pbnB1dDpob3ZlciAuZWwtaW5wdXQtbnVtYmVyX19kZWNyZWFzZSwuZWwtc2xpZGVyLmlzLXZlcnRpY2FsLmVsLXNsaWRlci0td2l0aC1pbnB1dCAuZWwtc2xpZGVyX19pbnB1dDpob3ZlciAuZWwtaW5wdXQtbnVtYmVyX19pbmNyZWFzZXtib3JkZXItY29sb3I6I0MwQzRDQ30uZWwtc2xpZGVyLmlzLXZlcnRpY2FsLmVsLXNsaWRlci0td2l0aC1pbnB1dCAuZWwtc2xpZGVyX19pbnB1dDphY3RpdmUgLmVsLWlucHV0LW51bWJlcl9fZGVjcmVhc2UsLmVsLXNsaWRlci5pcy12ZXJ0aWNhbC5lbC1zbGlkZXItLXdpdGgtaW5wdXQgLmVsLXNsaWRlcl9faW5wdXQ6YWN0aXZlIC5lbC1pbnB1dC1udW1iZXJfX2luY3JlYXNle2JvcmRlci1jb2xvcjojNDA5RUZGfS5lbC1zbGlkZXIuaXMtdmVydGljYWwgLmVsLXNsaWRlcl9fbWFya3MtdGV4dHttYXJnaW4tdG9wOjA7bGVmdDoxNXB4O3RyYW5zZm9ybTp0cmFuc2xhdGVZKDUwJSl9LmVsLWxvYWRpbmctcGFyZW50LS1yZWxhdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZSFpbXBvcnRhbnR9LmVsLWxvYWRpbmctcGFyZW50LS1oaWRkZW57b3ZlcmZsb3c6aGlkZGVuIWltcG9ydGFudH0uZWwtbG9hZGluZy1tYXNre3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MjAwMDtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjkpO21hcmdpbjowO3RvcDowO3JpZ2h0OjA7Ym90dG9tOjA7bGVmdDowO3RyYW5zaXRpb246b3BhY2l0eSAuM3N9LmVsLWxvYWRpbmctbWFzay5pcy1mdWxsc2NyZWVue3Bvc2l0aW9uOmZpeGVkfS5lbC1sb2FkaW5nLW1hc2suaXMtZnVsbHNjcmVlbiAuZWwtbG9hZGluZy1zcGlubmVye21hcmdpbi10b3A6LTI1cHh9LmVsLWxvYWRpbmctbWFzay5pcy1mdWxsc2NyZWVuIC5lbC1sb2FkaW5nLXNwaW5uZXIgLmNpcmN1bGFye2hlaWdodDo1MHB4O3dpZHRoOjUwcHh9LmVsLWxvYWRpbmctc3Bpbm5lcnt0b3A6NTAlO21hcmdpbi10b3A6LTIxcHg7d2lkdGg6MTAwJTt0ZXh0LWFsaWduOmNlbnRlcjtwb3NpdGlvbjphYnNvbHV0ZX0uZWwtY29sLXB1bGwtMCwuZWwtY29sLXB1bGwtMSwuZWwtY29sLXB1bGwtMTAsLmVsLWNvbC1wdWxsLTExLC5lbC1jb2wtcHVsbC0xMiwuZWwtY29sLXB1bGwtMTMsLmVsLWNvbC1wdWxsLTE0LC5lbC1jb2wtcHVsbC0xNSwuZWwtY29sLXB1bGwtMTYsLmVsLWNvbC1wdWxsLTE3LC5lbC1jb2wtcHVsbC0xOCwuZWwtY29sLXB1bGwtMTksLmVsLWNvbC1wdWxsLTIsLmVsLWNvbC1wdWxsLTIwLC5lbC1jb2wtcHVsbC0yMSwuZWwtY29sLXB1bGwtMjIsLmVsLWNvbC1wdWxsLTIzLC5lbC1jb2wtcHVsbC0yNCwuZWwtY29sLXB1bGwtMywuZWwtY29sLXB1bGwtNCwuZWwtY29sLXB1bGwtNSwuZWwtY29sLXB1bGwtNiwuZWwtY29sLXB1bGwtNywuZWwtY29sLXB1bGwtOCwuZWwtY29sLXB1bGwtOSwuZWwtY29sLXB1c2gtMCwuZWwtY29sLXB1c2gtMSwuZWwtY29sLXB1c2gtMTAsLmVsLWNvbC1wdXNoLTExLC5lbC1jb2wtcHVzaC0xMiwuZWwtY29sLXB1c2gtMTMsLmVsLWNvbC1wdXNoLTE0LC5lbC1jb2wtcHVzaC0xNSwuZWwtY29sLXB1c2gtMTYsLmVsLWNvbC1wdXNoLTE3LC5lbC1jb2wtcHVzaC0xOCwuZWwtY29sLXB1c2gtMTksLmVsLWNvbC1wdXNoLTIsLmVsLWNvbC1wdXNoLTIwLC5lbC1jb2wtcHVzaC0yMSwuZWwtY29sLXB1c2gtMjIsLmVsLWNvbC1wdXNoLTIzLC5lbC1jb2wtcHVzaC0yNCwuZWwtY29sLXB1c2gtMywuZWwtY29sLXB1c2gtNCwuZWwtY29sLXB1c2gtNSwuZWwtY29sLXB1c2gtNiwuZWwtY29sLXB1c2gtNywuZWwtY29sLXB1c2gtOCwuZWwtY29sLXB1c2gtOSwuZWwtcm93LC5lbC11cGxvYWQtZHJhZ2dlciwuZWwtdXBsb2FkLWxpc3RfX2l0ZW17cG9zaXRpb246cmVsYXRpdmV9LmVsLWxvYWRpbmctc3Bpbm5lciAuZWwtbG9hZGluZy10ZXh0e2NvbG9yOiM0MDlFRkY7bWFyZ2luOjNweCAwO2ZvbnQtc2l6ZToxNHB4fS5lbC1sb2FkaW5nLXNwaW5uZXIgLmNpcmN1bGFye2hlaWdodDo0MnB4O3dpZHRoOjQycHg7YW5pbWF0aW9uOmxvYWRpbmctcm90YXRlIDJzIGxpbmVhciBpbmZpbml0ZX0uZWwtbG9hZGluZy1zcGlubmVyIC5wYXRoe2FuaW1hdGlvbjpsb2FkaW5nLWRhc2ggMS41cyBlYXNlLWluLW91dCBpbmZpbml0ZTtzdHJva2UtZGFzaGFycmF5OjkwLDE1MDtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS13aWR0aDoyO3N0cm9rZTojNDA5RUZGO3N0cm9rZS1saW5lY2FwOnJvdW5kfS5lbC1sb2FkaW5nLXNwaW5uZXIgaXtjb2xvcjojNDA5RUZGfUBrZXlmcmFtZXMgbG9hZGluZy1yb3RhdGV7MTAwJXt0cmFuc2Zvcm06cm90YXRlKDM2MGRlZyl9fUBrZXlmcmFtZXMgbG9hZGluZy1kYXNoezAle3N0cm9rZS1kYXNoYXJyYXk6MSwyMDA7c3Ryb2tlLWRhc2hvZmZzZXQ6MH01MCV7c3Ryb2tlLWRhc2hhcnJheTo5MCwxNTA7c3Ryb2tlLWRhc2hvZmZzZXQ6LTQwcHh9MTAwJXtzdHJva2UtZGFzaGFycmF5OjkwLDE1MDtzdHJva2UtZGFzaG9mZnNldDotMTIwcHh9fS5lbC1yb3d7Ym94LXNpemluZzpib3JkZXItYm94fS5lbC1yb3c6OmFmdGVyLC5lbC1yb3c6OmJlZm9yZXtkaXNwbGF5OnRhYmxlfS5lbC1yb3c6OmFmdGVye2NsZWFyOmJvdGh9LmVsLXJvdy0tZmxleHtkaXNwbGF5OmZsZXh9LmVsLWNvbC0wLC5lbC1yb3ctLWZsZXg6YWZ0ZXIsLmVsLXJvdy0tZmxleDpiZWZvcmV7ZGlzcGxheTpub25lfS5lbC1yb3ctLWZsZXguaXMtanVzdGlmeS1jZW50ZXJ7anVzdGlmeS1jb250ZW50OmNlbnRlcn0uZWwtcm93LS1mbGV4LmlzLWp1c3RpZnktZW5ke2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uZWwtcm93LS1mbGV4LmlzLWp1c3RpZnktc3BhY2UtYmV0d2VlbntqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn0uZWwtcm93LS1mbGV4LmlzLWp1c3RpZnktc3BhY2UtYXJvdW5ke2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmR9LmVsLXJvdy0tZmxleC5pcy1hbGlnbi10b3B7YWxpZ24taXRlbXM6ZmxleC1zdGFydH0uZWwtcm93LS1mbGV4LmlzLWFsaWduLW1pZGRsZXthbGlnbi1pdGVtczpjZW50ZXJ9LmVsLXJvdy0tZmxleC5pcy1hbGlnbi1ib3R0b217YWxpZ24taXRlbXM6ZmxleC1lbmR9W2NsYXNzKj1lbC1jb2wtXXtmbG9hdDpsZWZ0O2JveC1zaXppbmc6Ym9yZGVyLWJveH0uZWwtY29sLTB7d2lkdGg6MCV9LmVsLWNvbC1wdWxsLTB7cmlnaHQ6MH0uZWwtY29sLXB1c2gtMHtsZWZ0OjB9LmVsLWNvbC0xe3dpZHRoOjQuMTY2NjclfS5lbC1jb2wtb2Zmc2V0LTF7bWFyZ2luLWxlZnQ6NC4xNjY2NyV9LmVsLWNvbC1wdWxsLTF7cmlnaHQ6NC4xNjY2NyV9LmVsLWNvbC1wdXNoLTF7bGVmdDo0LjE2NjY3JX0uZWwtY29sLTJ7d2lkdGg6OC4zMzMzMyV9LmVsLWNvbC1vZmZzZXQtMnttYXJnaW4tbGVmdDo4LjMzMzMzJX0uZWwtY29sLXB1bGwtMntyaWdodDo4LjMzMzMzJX0uZWwtY29sLXB1c2gtMntsZWZ0OjguMzMzMzMlfS5lbC1jb2wtM3t3aWR0aDoxMi41JX0uZWwtY29sLW9mZnNldC0ze21hcmdpbi1sZWZ0OjEyLjUlfS5lbC1jb2wtcHVsbC0ze3JpZ2h0OjEyLjUlfS5lbC1jb2wtcHVzaC0ze2xlZnQ6MTIuNSV9LmVsLWNvbC00e3dpZHRoOjE2LjY2NjY3JX0uZWwtY29sLW9mZnNldC00e21hcmdpbi1sZWZ0OjE2LjY2NjY3JX0uZWwtY29sLXB1bGwtNHtyaWdodDoxNi42NjY2NyV9LmVsLWNvbC1wdXNoLTR7bGVmdDoxNi42NjY2NyV9LmVsLWNvbC01e3dpZHRoOjIwLjgzMzMzJX0uZWwtY29sLW9mZnNldC01e21hcmdpbi1sZWZ0OjIwLjgzMzMzJX0uZWwtY29sLXB1bGwtNXtyaWdodDoyMC44MzMzMyV9LmVsLWNvbC1wdXNoLTV7bGVmdDoyMC44MzMzMyV9LmVsLWNvbC02e3dpZHRoOjI1JX0uZWwtY29sLW9mZnNldC02e21hcmdpbi1sZWZ0OjI1JX0uZWwtY29sLXB1bGwtNntyaWdodDoyNSV9LmVsLWNvbC1wdXNoLTZ7bGVmdDoyNSV9LmVsLWNvbC03e3dpZHRoOjI5LjE2NjY3JX0uZWwtY29sLW9mZnNldC03e21hcmdpbi1sZWZ0OjI5LjE2NjY3JX0uZWwtY29sLXB1bGwtN3tyaWdodDoyOS4xNjY2NyV9LmVsLWNvbC1wdXNoLTd7bGVmdDoyOS4xNjY2NyV9LmVsLWNvbC04e3dpZHRoOjMzLjMzMzMzJX0uZWwtY29sLW9mZnNldC04e21hcmdpbi1sZWZ0OjMzLjMzMzMzJX0uZWwtY29sLXB1bGwtOHtyaWdodDozMy4zMzMzMyV9LmVsLWNvbC1wdXNoLTh7bGVmdDozMy4zMzMzMyV9LmVsLWNvbC05e3dpZHRoOjM3LjUlfS5lbC1jb2wtb2Zmc2V0LTl7bWFyZ2luLWxlZnQ6MzcuNSV9LmVsLWNvbC1wdWxsLTl7cmlnaHQ6MzcuNSV9LmVsLWNvbC1wdXNoLTl7bGVmdDozNy41JX0uZWwtY29sLTEwe3dpZHRoOjQxLjY2NjY3JX0uZWwtY29sLW9mZnNldC0xMHttYXJnaW4tbGVmdDo0MS42NjY2NyV9LmVsLWNvbC1wdWxsLTEwe3JpZ2h0OjQxLjY2NjY3JX0uZWwtY29sLXB1c2gtMTB7bGVmdDo0MS42NjY2NyV9LmVsLWNvbC0xMXt3aWR0aDo0NS44MzMzMyV9LmVsLWNvbC1vZmZzZXQtMTF7bWFyZ2luLWxlZnQ6NDUuODMzMzMlfS5lbC1jb2wtcHVsbC0xMXtyaWdodDo0NS44MzMzMyV9LmVsLWNvbC1wdXNoLTExe2xlZnQ6NDUuODMzMzMlfS5lbC1jb2wtMTJ7d2lkdGg6NTAlfS5lbC1jb2wtb2Zmc2V0LTEye21hcmdpbi1sZWZ0OjUwJX0uZWwtY29sLXB1bGwtMTJ7cmlnaHQ6NTAlfS5lbC1jb2wtcHVzaC0xMntsZWZ0OjUwJX0uZWwtY29sLTEze3dpZHRoOjU0LjE2NjY3JX0uZWwtY29sLW9mZnNldC0xM3ttYXJnaW4tbGVmdDo1NC4xNjY2NyV9LmVsLWNvbC1wdWxsLTEze3JpZ2h0OjU0LjE2NjY3JX0uZWwtY29sLXB1c2gtMTN7bGVmdDo1NC4xNjY2NyV9LmVsLWNvbC0xNHt3aWR0aDo1OC4zMzMzMyV9LmVsLWNvbC1vZmZzZXQtMTR7bWFyZ2luLWxlZnQ6NTguMzMzMzMlfS5lbC1jb2wtcHVsbC0xNHtyaWdodDo1OC4zMzMzMyV9LmVsLWNvbC1wdXNoLTE0e2xlZnQ6NTguMzMzMzMlfS5lbC1jb2wtMTV7d2lkdGg6NjIuNSV9LmVsLWNvbC1vZmZzZXQtMTV7bWFyZ2luLWxlZnQ6NjIuNSV9LmVsLWNvbC1wdWxsLTE1e3JpZ2h0OjYyLjUlfS5lbC1jb2wtcHVzaC0xNXtsZWZ0OjYyLjUlfS5lbC1jb2wtMTZ7d2lkdGg6NjYuNjY2NjclfS5lbC1jb2wtb2Zmc2V0LTE2e21hcmdpbi1sZWZ0OjY2LjY2NjY3JX0uZWwtY29sLXB1bGwtMTZ7cmlnaHQ6NjYuNjY2NjclfS5lbC1jb2wtcHVzaC0xNntsZWZ0OjY2LjY2NjY3JX0uZWwtY29sLTE3e3dpZHRoOjcwLjgzMzMzJX0uZWwtY29sLW9mZnNldC0xN3ttYXJnaW4tbGVmdDo3MC44MzMzMyV9LmVsLWNvbC1wdWxsLTE3e3JpZ2h0OjcwLjgzMzMzJX0uZWwtY29sLXB1c2gtMTd7bGVmdDo3MC44MzMzMyV9LmVsLWNvbC0xOHt3aWR0aDo3NSV9LmVsLWNvbC1vZmZzZXQtMTh7bWFyZ2luLWxlZnQ6NzUlfS5lbC1jb2wtcHVsbC0xOHtyaWdodDo3NSV9LmVsLWNvbC1wdXNoLTE4e2xlZnQ6NzUlfS5lbC1jb2wtMTl7d2lkdGg6NzkuMTY2NjclfS5lbC1jb2wtb2Zmc2V0LTE5e21hcmdpbi1sZWZ0Ojc5LjE2NjY3JX0uZWwtY29sLXB1bGwtMTl7cmlnaHQ6NzkuMTY2NjclfS5lbC1jb2wtcHVzaC0xOXtsZWZ0Ojc5LjE2NjY3JX0uZWwtY29sLTIwe3dpZHRoOjgzLjMzMzMzJX0uZWwtY29sLW9mZnNldC0yMHttYXJnaW4tbGVmdDo4My4zMzMzMyV9LmVsLWNvbC1wdWxsLTIwe3JpZ2h0OjgzLjMzMzMzJX0uZWwtY29sLXB1c2gtMjB7bGVmdDo4My4zMzMzMyV9LmVsLWNvbC0yMXt3aWR0aDo4Ny41JX0uZWwtY29sLW9mZnNldC0yMXttYXJnaW4tbGVmdDo4Ny41JX0uZWwtY29sLXB1bGwtMjF7cmlnaHQ6ODcuNSV9LmVsLWNvbC1wdXNoLTIxe2xlZnQ6ODcuNSV9LmVsLWNvbC0yMnt3aWR0aDo5MS42NjY2NyV9LmVsLWNvbC1vZmZzZXQtMjJ7bWFyZ2luLWxlZnQ6OTEuNjY2NjclfS5lbC1jb2wtcHVsbC0yMntyaWdodDo5MS42NjY2NyV9LmVsLWNvbC1wdXNoLTIye2xlZnQ6OTEuNjY2NjclfS5lbC1jb2wtMjN7d2lkdGg6OTUuODMzMzMlfS5lbC1jb2wtb2Zmc2V0LTIze21hcmdpbi1sZWZ0Ojk1LjgzMzMzJX0uZWwtY29sLXB1bGwtMjN7cmlnaHQ6OTUuODMzMzMlfS5lbC1jb2wtcHVzaC0yM3tsZWZ0Ojk1LjgzMzMzJX0uZWwtY29sLTI0e3dpZHRoOjEwMCV9LmVsLWNvbC1vZmZzZXQtMjR7bWFyZ2luLWxlZnQ6MTAwJX0uZWwtY29sLXB1bGwtMjR7cmlnaHQ6MTAwJX0uZWwtY29sLXB1c2gtMjR7bGVmdDoxMDAlfUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDo3NjdweCl7LmVsLWNvbC14cy0we2Rpc3BsYXk6bm9uZTt3aWR0aDowJX0uZWwtY29sLXhzLW9mZnNldC0we21hcmdpbi1sZWZ0OjB9LmVsLWNvbC14cy1wdWxsLTB7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6MH0uZWwtY29sLXhzLXB1c2gtMHtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjB9LmVsLWNvbC14cy0xe3dpZHRoOjQuMTY2NjclfS5lbC1jb2wteHMtb2Zmc2V0LTF7bWFyZ2luLWxlZnQ6NC4xNjY2NyV9LmVsLWNvbC14cy1wdWxsLTF7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NC4xNjY2NyV9LmVsLWNvbC14cy1wdXNoLTF7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo0LjE2NjY3JX0uZWwtY29sLXhzLTJ7d2lkdGg6OC4zMzMzMyV9LmVsLWNvbC14cy1vZmZzZXQtMnttYXJnaW4tbGVmdDo4LjMzMzMzJX0uZWwtY29sLXhzLXB1bGwtMntwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo4LjMzMzMzJX0uZWwtY29sLXhzLXB1c2gtMntwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjguMzMzMzMlfS5lbC1jb2wteHMtM3t3aWR0aDoxMi41JX0uZWwtY29sLXhzLW9mZnNldC0ze21hcmdpbi1sZWZ0OjEyLjUlfS5lbC1jb2wteHMtcHVsbC0ze3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjEyLjUlfS5lbC1jb2wteHMtcHVzaC0ze3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MTIuNSV9LmVsLWNvbC14cy00e3dpZHRoOjE2LjY2NjY3JX0uZWwtY29sLXhzLW9mZnNldC00e21hcmdpbi1sZWZ0OjE2LjY2NjY3JX0uZWwtY29sLXhzLXB1bGwtNHtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDoxNi42NjY2NyV9LmVsLWNvbC14cy1wdXNoLTR7cG9zaXRpb246cmVsYXRpdmU7bGVmdDoxNi42NjY2NyV9LmVsLWNvbC14cy01e3dpZHRoOjIwLjgzMzMzJX0uZWwtY29sLXhzLW9mZnNldC01e21hcmdpbi1sZWZ0OjIwLjgzMzMzJX0uZWwtY29sLXhzLXB1bGwtNXtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDoyMC44MzMzMyV9LmVsLWNvbC14cy1wdXNoLTV7cG9zaXRpb246cmVsYXRpdmU7bGVmdDoyMC44MzMzMyV9LmVsLWNvbC14cy02e3dpZHRoOjI1JX0uZWwtY29sLXhzLW9mZnNldC02e21hcmdpbi1sZWZ0OjI1JX0uZWwtY29sLXhzLXB1bGwtNntwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDoyNSV9LmVsLWNvbC14cy1wdXNoLTZ7cG9zaXRpb246cmVsYXRpdmU7bGVmdDoyNSV9LmVsLWNvbC14cy03e3dpZHRoOjI5LjE2NjY3JX0uZWwtY29sLXhzLW9mZnNldC03e21hcmdpbi1sZWZ0OjI5LjE2NjY3JX0uZWwtY29sLXhzLXB1bGwtN3twb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDoyOS4xNjY2NyV9LmVsLWNvbC14cy1wdXNoLTd7cG9zaXRpb246cmVsYXRpdmU7bGVmdDoyOS4xNjY2NyV9LmVsLWNvbC14cy04e3dpZHRoOjMzLjMzMzMzJX0uZWwtY29sLXhzLW9mZnNldC04e21hcmdpbi1sZWZ0OjMzLjMzMzMzJX0uZWwtY29sLXhzLXB1bGwtOHtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDozMy4zMzMzMyV9LmVsLWNvbC14cy1wdXNoLTh7cG9zaXRpb246cmVsYXRpdmU7bGVmdDozMy4zMzMzMyV9LmVsLWNvbC14cy05e3dpZHRoOjM3LjUlfS5lbC1jb2wteHMtb2Zmc2V0LTl7bWFyZ2luLWxlZnQ6MzcuNSV9LmVsLWNvbC14cy1wdWxsLTl7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6MzcuNSV9LmVsLWNvbC14cy1wdXNoLTl7cG9zaXRpb246cmVsYXRpdmU7bGVmdDozNy41JX0uZWwtY29sLXhzLTEwe3dpZHRoOjQxLjY2NjY3JX0uZWwtY29sLXhzLW9mZnNldC0xMHttYXJnaW4tbGVmdDo0MS42NjY2NyV9LmVsLWNvbC14cy1wdWxsLTEwe3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjQxLjY2NjY3JX0uZWwtY29sLXhzLXB1c2gtMTB7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo0MS42NjY2NyV9LmVsLWNvbC14cy0xMXt3aWR0aDo0NS44MzMzMyV9LmVsLWNvbC14cy1vZmZzZXQtMTF7bWFyZ2luLWxlZnQ6NDUuODMzMzMlfS5lbC1jb2wteHMtcHVsbC0xMXtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo0NS44MzMzMyV9LmVsLWNvbC14cy1wdXNoLTExe3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NDUuODMzMzMlfS5lbC1jb2wteHMtMTJ7d2lkdGg6NTAlfS5lbC1jb2wteHMtb2Zmc2V0LTEye21hcmdpbi1sZWZ0OjUwJX0uZWwtY29sLXhzLXB1bGwtMTJ7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NTAlfS5lbC1jb2wteHMtcHVzaC0xMntwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjUwJX0uZWwtY29sLXhzLTEze3dpZHRoOjU0LjE2NjY3JX0uZWwtY29sLXhzLW9mZnNldC0xM3ttYXJnaW4tbGVmdDo1NC4xNjY2NyV9LmVsLWNvbC14cy1wdWxsLTEze3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjU0LjE2NjY3JX0uZWwtY29sLXhzLXB1c2gtMTN7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo1NC4xNjY2NyV9LmVsLWNvbC14cy0xNHt3aWR0aDo1OC4zMzMzMyV9LmVsLWNvbC14cy1vZmZzZXQtMTR7bWFyZ2luLWxlZnQ6NTguMzMzMzMlfS5lbC1jb2wteHMtcHVsbC0xNHtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo1OC4zMzMzMyV9LmVsLWNvbC14cy1wdXNoLTE0e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NTguMzMzMzMlfS5lbC1jb2wteHMtMTV7d2lkdGg6NjIuNSV9LmVsLWNvbC14cy1vZmZzZXQtMTV7bWFyZ2luLWxlZnQ6NjIuNSV9LmVsLWNvbC14cy1wdWxsLTE1e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjYyLjUlfS5lbC1jb2wteHMtcHVzaC0xNXtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjYyLjUlfS5lbC1jb2wteHMtMTZ7d2lkdGg6NjYuNjY2NjclfS5lbC1jb2wteHMtb2Zmc2V0LTE2e21hcmdpbi1sZWZ0OjY2LjY2NjY3JX0uZWwtY29sLXhzLXB1bGwtMTZ7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NjYuNjY2NjclfS5lbC1jb2wteHMtcHVzaC0xNntwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjY2LjY2NjY3JX0uZWwtY29sLXhzLTE3e3dpZHRoOjcwLjgzMzMzJX0uZWwtY29sLXhzLW9mZnNldC0xN3ttYXJnaW4tbGVmdDo3MC44MzMzMyV9LmVsLWNvbC14cy1wdWxsLTE3e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjcwLjgzMzMzJX0uZWwtY29sLXhzLXB1c2gtMTd7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo3MC44MzMzMyV9LmVsLWNvbC14cy0xOHt3aWR0aDo3NSV9LmVsLWNvbC14cy1vZmZzZXQtMTh7bWFyZ2luLWxlZnQ6NzUlfS5lbC1jb2wteHMtcHVsbC0xOHtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo3NSV9LmVsLWNvbC14cy1wdXNoLTE4e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NzUlfS5lbC1jb2wteHMtMTl7d2lkdGg6NzkuMTY2NjclfS5lbC1jb2wteHMtb2Zmc2V0LTE5e21hcmdpbi1sZWZ0Ojc5LjE2NjY3JX0uZWwtY29sLXhzLXB1bGwtMTl7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NzkuMTY2NjclfS5lbC1jb2wteHMtcHVzaC0xOXtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0Ojc5LjE2NjY3JX0uZWwtY29sLXhzLTIwe3dpZHRoOjgzLjMzMzMzJX0uZWwtY29sLXhzLW9mZnNldC0yMHttYXJnaW4tbGVmdDo4My4zMzMzMyV9LmVsLWNvbC14cy1wdWxsLTIwe3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjgzLjMzMzMzJX0uZWwtY29sLXhzLXB1c2gtMjB7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo4My4zMzMzMyV9LmVsLWNvbC14cy0yMXt3aWR0aDo4Ny41JX0uZWwtY29sLXhzLW9mZnNldC0yMXttYXJnaW4tbGVmdDo4Ny41JX0uZWwtY29sLXhzLXB1bGwtMjF7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6ODcuNSV9LmVsLWNvbC14cy1wdXNoLTIxe3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6ODcuNSV9LmVsLWNvbC14cy0yMnt3aWR0aDo5MS42NjY2NyV9LmVsLWNvbC14cy1vZmZzZXQtMjJ7bWFyZ2luLWxlZnQ6OTEuNjY2NjclfS5lbC1jb2wteHMtcHVsbC0yMntwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo5MS42NjY2NyV9LmVsLWNvbC14cy1wdXNoLTIye3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6OTEuNjY2NjclfS5lbC1jb2wteHMtMjN7d2lkdGg6OTUuODMzMzMlfS5lbC1jb2wteHMtb2Zmc2V0LTIze21hcmdpbi1sZWZ0Ojk1LjgzMzMzJX0uZWwtY29sLXhzLXB1bGwtMjN7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6OTUuODMzMzMlfS5lbC1jb2wteHMtcHVzaC0yM3twb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0Ojk1LjgzMzMzJX0uZWwtY29sLXhzLTI0e3dpZHRoOjEwMCV9LmVsLWNvbC14cy1vZmZzZXQtMjR7bWFyZ2luLWxlZnQ6MTAwJX0uZWwtY29sLXhzLXB1bGwtMjR7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6MTAwJX0uZWwtY29sLXhzLXB1c2gtMjR7cG9zaXRpb246cmVsYXRpdmU7bGVmdDoxMDAlfX1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6NzY4cHgpey5lbC1jb2wtc20tMHtkaXNwbGF5Om5vbmU7d2lkdGg6MCV9LmVsLWNvbC1zbS1vZmZzZXQtMHttYXJnaW4tbGVmdDowfS5lbC1jb2wtc20tcHVsbC0we3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjB9LmVsLWNvbC1zbS1wdXNoLTB7cG9zaXRpb246cmVsYXRpdmU7bGVmdDowfS5lbC1jb2wtc20tMXt3aWR0aDo0LjE2NjY3JX0uZWwtY29sLXNtLW9mZnNldC0xe21hcmdpbi1sZWZ0OjQuMTY2NjclfS5lbC1jb2wtc20tcHVsbC0xe3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjQuMTY2NjclfS5lbC1jb2wtc20tcHVzaC0xe3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NC4xNjY2NyV9LmVsLWNvbC1zbS0ye3dpZHRoOjguMzMzMzMlfS5lbC1jb2wtc20tb2Zmc2V0LTJ7bWFyZ2luLWxlZnQ6OC4zMzMzMyV9LmVsLWNvbC1zbS1wdWxsLTJ7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6OC4zMzMzMyV9LmVsLWNvbC1zbS1wdXNoLTJ7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo4LjMzMzMzJX0uZWwtY29sLXNtLTN7d2lkdGg6MTIuNSV9LmVsLWNvbC1zbS1vZmZzZXQtM3ttYXJnaW4tbGVmdDoxMi41JX0uZWwtY29sLXNtLXB1bGwtM3twb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDoxMi41JX0uZWwtY29sLXNtLXB1c2gtM3twb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjEyLjUlfS5lbC1jb2wtc20tNHt3aWR0aDoxNi42NjY2NyV9LmVsLWNvbC1zbS1vZmZzZXQtNHttYXJnaW4tbGVmdDoxNi42NjY2NyV9LmVsLWNvbC1zbS1wdWxsLTR7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6MTYuNjY2NjclfS5lbC1jb2wtc20tcHVzaC00e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MTYuNjY2NjclfS5lbC1jb2wtc20tNXt3aWR0aDoyMC44MzMzMyV9LmVsLWNvbC1zbS1vZmZzZXQtNXttYXJnaW4tbGVmdDoyMC44MzMzMyV9LmVsLWNvbC1zbS1wdWxsLTV7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6MjAuODMzMzMlfS5lbC1jb2wtc20tcHVzaC01e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MjAuODMzMzMlfS5lbC1jb2wtc20tNnt3aWR0aDoyNSV9LmVsLWNvbC1zbS1vZmZzZXQtNnttYXJnaW4tbGVmdDoyNSV9LmVsLWNvbC1zbS1wdWxsLTZ7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6MjUlfS5lbC1jb2wtc20tcHVzaC02e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MjUlfS5lbC1jb2wtc20tN3t3aWR0aDoyOS4xNjY2NyV9LmVsLWNvbC1zbS1vZmZzZXQtN3ttYXJnaW4tbGVmdDoyOS4xNjY2NyV9LmVsLWNvbC1zbS1wdWxsLTd7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6MjkuMTY2NjclfS5lbC1jb2wtc20tcHVzaC03e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MjkuMTY2NjclfS5lbC1jb2wtc20tOHt3aWR0aDozMy4zMzMzMyV9LmVsLWNvbC1zbS1vZmZzZXQtOHttYXJnaW4tbGVmdDozMy4zMzMzMyV9LmVsLWNvbC1zbS1wdWxsLTh7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6MzMuMzMzMzMlfS5lbC1jb2wtc20tcHVzaC04e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MzMuMzMzMzMlfS5lbC1jb2wtc20tOXt3aWR0aDozNy41JX0uZWwtY29sLXNtLW9mZnNldC05e21hcmdpbi1sZWZ0OjM3LjUlfS5lbC1jb2wtc20tcHVsbC05e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjM3LjUlfS5lbC1jb2wtc20tcHVzaC05e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MzcuNSV9LmVsLWNvbC1zbS0xMHt3aWR0aDo0MS42NjY2NyV9LmVsLWNvbC1zbS1vZmZzZXQtMTB7bWFyZ2luLWxlZnQ6NDEuNjY2NjclfS5lbC1jb2wtc20tcHVsbC0xMHtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo0MS42NjY2NyV9LmVsLWNvbC1zbS1wdXNoLTEwe3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NDEuNjY2NjclfS5lbC1jb2wtc20tMTF7d2lkdGg6NDUuODMzMzMlfS5lbC1jb2wtc20tb2Zmc2V0LTExe21hcmdpbi1sZWZ0OjQ1LjgzMzMzJX0uZWwtY29sLXNtLXB1bGwtMTF7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NDUuODMzMzMlfS5lbC1jb2wtc20tcHVzaC0xMXtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjQ1LjgzMzMzJX0uZWwtY29sLXNtLTEye3dpZHRoOjUwJX0uZWwtY29sLXNtLW9mZnNldC0xMnttYXJnaW4tbGVmdDo1MCV9LmVsLWNvbC1zbS1wdWxsLTEye3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjUwJX0uZWwtY29sLXNtLXB1c2gtMTJ7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo1MCV9LmVsLWNvbC1zbS0xM3t3aWR0aDo1NC4xNjY2NyV9LmVsLWNvbC1zbS1vZmZzZXQtMTN7bWFyZ2luLWxlZnQ6NTQuMTY2NjclfS5lbC1jb2wtc20tcHVsbC0xM3twb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo1NC4xNjY2NyV9LmVsLWNvbC1zbS1wdXNoLTEze3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NTQuMTY2NjclfS5lbC1jb2wtc20tMTR7d2lkdGg6NTguMzMzMzMlfS5lbC1jb2wtc20tb2Zmc2V0LTE0e21hcmdpbi1sZWZ0OjU4LjMzMzMzJX0uZWwtY29sLXNtLXB1bGwtMTR7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NTguMzMzMzMlfS5lbC1jb2wtc20tcHVzaC0xNHtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjU4LjMzMzMzJX0uZWwtY29sLXNtLTE1e3dpZHRoOjYyLjUlfS5lbC1jb2wtc20tb2Zmc2V0LTE1e21hcmdpbi1sZWZ0OjYyLjUlfS5lbC1jb2wtc20tcHVsbC0xNXtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo2Mi41JX0uZWwtY29sLXNtLXB1c2gtMTV7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo2Mi41JX0uZWwtY29sLXNtLTE2e3dpZHRoOjY2LjY2NjY3JX0uZWwtY29sLXNtLW9mZnNldC0xNnttYXJnaW4tbGVmdDo2Ni42NjY2NyV9LmVsLWNvbC1zbS1wdWxsLTE2e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjY2LjY2NjY3JX0uZWwtY29sLXNtLXB1c2gtMTZ7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo2Ni42NjY2NyV9LmVsLWNvbC1zbS0xN3t3aWR0aDo3MC44MzMzMyV9LmVsLWNvbC1zbS1vZmZzZXQtMTd7bWFyZ2luLWxlZnQ6NzAuODMzMzMlfS5lbC1jb2wtc20tcHVsbC0xN3twb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo3MC44MzMzMyV9LmVsLWNvbC1zbS1wdXNoLTE3e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NzAuODMzMzMlfS5lbC1jb2wtc20tMTh7d2lkdGg6NzUlfS5lbC1jb2wtc20tb2Zmc2V0LTE4e21hcmdpbi1sZWZ0Ojc1JX0uZWwtY29sLXNtLXB1bGwtMTh7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NzUlfS5lbC1jb2wtc20tcHVzaC0xOHtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0Ojc1JX0uZWwtY29sLXNtLTE5e3dpZHRoOjc5LjE2NjY3JX0uZWwtY29sLXNtLW9mZnNldC0xOXttYXJnaW4tbGVmdDo3OS4xNjY2NyV9LmVsLWNvbC1zbS1wdWxsLTE5e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0Ojc5LjE2NjY3JX0uZWwtY29sLXNtLXB1c2gtMTl7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo3OS4xNjY2NyV9LmVsLWNvbC1zbS0yMHt3aWR0aDo4My4zMzMzMyV9LmVsLWNvbC1zbS1vZmZzZXQtMjB7bWFyZ2luLWxlZnQ6ODMuMzMzMzMlfS5lbC1jb2wtc20tcHVsbC0yMHtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo4My4zMzMzMyV9LmVsLWNvbC1zbS1wdXNoLTIwe3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6ODMuMzMzMzMlfS5lbC1jb2wtc20tMjF7d2lkdGg6ODcuNSV9LmVsLWNvbC1zbS1vZmZzZXQtMjF7bWFyZ2luLWxlZnQ6ODcuNSV9LmVsLWNvbC1zbS1wdWxsLTIxe3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0Ojg3LjUlfS5lbC1jb2wtc20tcHVzaC0yMXtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0Ojg3LjUlfS5lbC1jb2wtc20tMjJ7d2lkdGg6OTEuNjY2NjclfS5lbC1jb2wtc20tb2Zmc2V0LTIye21hcmdpbi1sZWZ0OjkxLjY2NjY3JX0uZWwtY29sLXNtLXB1bGwtMjJ7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6OTEuNjY2NjclfS5lbC1jb2wtc20tcHVzaC0yMntwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjkxLjY2NjY3JX0uZWwtY29sLXNtLTIze3dpZHRoOjk1LjgzMzMzJX0uZWwtY29sLXNtLW9mZnNldC0yM3ttYXJnaW4tbGVmdDo5NS44MzMzMyV9LmVsLWNvbC1zbS1wdWxsLTIze3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0Ojk1LjgzMzMzJX0uZWwtY29sLXNtLXB1c2gtMjN7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo5NS44MzMzMyV9LmVsLWNvbC1zbS0yNHt3aWR0aDoxMDAlfS5lbC1jb2wtc20tb2Zmc2V0LTI0e21hcmdpbi1sZWZ0OjEwMCV9LmVsLWNvbC1zbS1wdWxsLTI0e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjEwMCV9LmVsLWNvbC1zbS1wdXNoLTI0e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MTAwJX19QG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOjk5MnB4KXsuZWwtY29sLW1kLTB7ZGlzcGxheTpub25lO3dpZHRoOjAlfS5lbC1jb2wtbWQtb2Zmc2V0LTB7bWFyZ2luLWxlZnQ6MH0uZWwtY29sLW1kLXB1bGwtMHtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDowfS5lbC1jb2wtbWQtcHVzaC0we3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MH0uZWwtY29sLW1kLTF7d2lkdGg6NC4xNjY2NyV9LmVsLWNvbC1tZC1vZmZzZXQtMXttYXJnaW4tbGVmdDo0LjE2NjY3JX0uZWwtY29sLW1kLXB1bGwtMXtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo0LjE2NjY3JX0uZWwtY29sLW1kLXB1c2gtMXtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjQuMTY2NjclfS5lbC1jb2wtbWQtMnt3aWR0aDo4LjMzMzMzJX0uZWwtY29sLW1kLW9mZnNldC0ye21hcmdpbi1sZWZ0OjguMzMzMzMlfS5lbC1jb2wtbWQtcHVsbC0ye3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjguMzMzMzMlfS5lbC1jb2wtbWQtcHVzaC0ye3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6OC4zMzMzMyV9LmVsLWNvbC1tZC0ze3dpZHRoOjEyLjUlfS5lbC1jb2wtbWQtb2Zmc2V0LTN7bWFyZ2luLWxlZnQ6MTIuNSV9LmVsLWNvbC1tZC1wdWxsLTN7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6MTIuNSV9LmVsLWNvbC1tZC1wdXNoLTN7cG9zaXRpb246cmVsYXRpdmU7bGVmdDoxMi41JX0uZWwtY29sLW1kLTR7d2lkdGg6MTYuNjY2NjclfS5lbC1jb2wtbWQtb2Zmc2V0LTR7bWFyZ2luLWxlZnQ6MTYuNjY2NjclfS5lbC1jb2wtbWQtcHVsbC00e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjE2LjY2NjY3JX0uZWwtY29sLW1kLXB1c2gtNHtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjE2LjY2NjY3JX0uZWwtY29sLW1kLTV7d2lkdGg6MjAuODMzMzMlfS5lbC1jb2wtbWQtb2Zmc2V0LTV7bWFyZ2luLWxlZnQ6MjAuODMzMzMlfS5lbC1jb2wtbWQtcHVsbC01e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjIwLjgzMzMzJX0uZWwtY29sLW1kLXB1c2gtNXtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjIwLjgzMzMzJX0uZWwtY29sLW1kLTZ7d2lkdGg6MjUlfS5lbC1jb2wtbWQtb2Zmc2V0LTZ7bWFyZ2luLWxlZnQ6MjUlfS5lbC1jb2wtbWQtcHVsbC02e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjI1JX0uZWwtY29sLW1kLXB1c2gtNntwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjI1JX0uZWwtY29sLW1kLTd7d2lkdGg6MjkuMTY2NjclfS5lbC1jb2wtbWQtb2Zmc2V0LTd7bWFyZ2luLWxlZnQ6MjkuMTY2NjclfS5lbC1jb2wtbWQtcHVsbC03e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjI5LjE2NjY3JX0uZWwtY29sLW1kLXB1c2gtN3twb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjI5LjE2NjY3JX0uZWwtY29sLW1kLTh7d2lkdGg6MzMuMzMzMzMlfS5lbC1jb2wtbWQtb2Zmc2V0LTh7bWFyZ2luLWxlZnQ6MzMuMzMzMzMlfS5lbC1jb2wtbWQtcHVsbC04e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjMzLjMzMzMzJX0uZWwtY29sLW1kLXB1c2gtOHtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjMzLjMzMzMzJX0uZWwtY29sLW1kLTl7d2lkdGg6MzcuNSV9LmVsLWNvbC1tZC1vZmZzZXQtOXttYXJnaW4tbGVmdDozNy41JX0uZWwtY29sLW1kLXB1bGwtOXtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDozNy41JX0uZWwtY29sLW1kLXB1c2gtOXtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjM3LjUlfS5lbC1jb2wtbWQtMTB7d2lkdGg6NDEuNjY2NjclfS5lbC1jb2wtbWQtb2Zmc2V0LTEwe21hcmdpbi1sZWZ0OjQxLjY2NjY3JX0uZWwtY29sLW1kLXB1bGwtMTB7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NDEuNjY2NjclfS5lbC1jb2wtbWQtcHVzaC0xMHtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjQxLjY2NjY3JX0uZWwtY29sLW1kLTExe3dpZHRoOjQ1LjgzMzMzJX0uZWwtY29sLW1kLW9mZnNldC0xMXttYXJnaW4tbGVmdDo0NS44MzMzMyV9LmVsLWNvbC1tZC1wdWxsLTExe3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjQ1LjgzMzMzJX0uZWwtY29sLW1kLXB1c2gtMTF7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo0NS44MzMzMyV9LmVsLWNvbC1tZC0xMnt3aWR0aDo1MCV9LmVsLWNvbC1tZC1vZmZzZXQtMTJ7bWFyZ2luLWxlZnQ6NTAlfS5lbC1jb2wtbWQtcHVsbC0xMntwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo1MCV9LmVsLWNvbC1tZC1wdXNoLTEye3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NTAlfS5lbC1jb2wtbWQtMTN7d2lkdGg6NTQuMTY2NjclfS5lbC1jb2wtbWQtb2Zmc2V0LTEze21hcmdpbi1sZWZ0OjU0LjE2NjY3JX0uZWwtY29sLW1kLXB1bGwtMTN7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NTQuMTY2NjclfS5lbC1jb2wtbWQtcHVzaC0xM3twb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjU0LjE2NjY3JX0uZWwtY29sLW1kLTE0e3dpZHRoOjU4LjMzMzMzJX0uZWwtY29sLW1kLW9mZnNldC0xNHttYXJnaW4tbGVmdDo1OC4zMzMzMyV9LmVsLWNvbC1tZC1wdWxsLTE0e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjU4LjMzMzMzJX0uZWwtY29sLW1kLXB1c2gtMTR7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo1OC4zMzMzMyV9LmVsLWNvbC1tZC0xNXt3aWR0aDo2Mi41JX0uZWwtY29sLW1kLW9mZnNldC0xNXttYXJnaW4tbGVmdDo2Mi41JX0uZWwtY29sLW1kLXB1bGwtMTV7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NjIuNSV9LmVsLWNvbC1tZC1wdXNoLTE1e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NjIuNSV9LmVsLWNvbC1tZC0xNnt3aWR0aDo2Ni42NjY2NyV9LmVsLWNvbC1tZC1vZmZzZXQtMTZ7bWFyZ2luLWxlZnQ6NjYuNjY2NjclfS5lbC1jb2wtbWQtcHVsbC0xNntwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo2Ni42NjY2NyV9LmVsLWNvbC1tZC1wdXNoLTE2e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NjYuNjY2NjclfS5lbC1jb2wtbWQtMTd7d2lkdGg6NzAuODMzMzMlfS5lbC1jb2wtbWQtb2Zmc2V0LTE3e21hcmdpbi1sZWZ0OjcwLjgzMzMzJX0uZWwtY29sLW1kLXB1bGwtMTd7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NzAuODMzMzMlfS5lbC1jb2wtbWQtcHVzaC0xN3twb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjcwLjgzMzMzJX0uZWwtY29sLW1kLTE4e3dpZHRoOjc1JX0uZWwtY29sLW1kLW9mZnNldC0xOHttYXJnaW4tbGVmdDo3NSV9LmVsLWNvbC1tZC1wdWxsLTE4e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0Ojc1JX0uZWwtY29sLW1kLXB1c2gtMTh7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo3NSV9LmVsLWNvbC1tZC0xOXt3aWR0aDo3OS4xNjY2NyV9LmVsLWNvbC1tZC1vZmZzZXQtMTl7bWFyZ2luLWxlZnQ6NzkuMTY2NjclfS5lbC1jb2wtbWQtcHVsbC0xOXtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo3OS4xNjY2NyV9LmVsLWNvbC1tZC1wdXNoLTE5e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NzkuMTY2NjclfS5lbC1jb2wtbWQtMjB7d2lkdGg6ODMuMzMzMzMlfS5lbC1jb2wtbWQtb2Zmc2V0LTIwe21hcmdpbi1sZWZ0OjgzLjMzMzMzJX0uZWwtY29sLW1kLXB1bGwtMjB7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6ODMuMzMzMzMlfS5lbC1jb2wtbWQtcHVzaC0yMHtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjgzLjMzMzMzJX0uZWwtY29sLW1kLTIxe3dpZHRoOjg3LjUlfS5lbC1jb2wtbWQtb2Zmc2V0LTIxe21hcmdpbi1sZWZ0Ojg3LjUlfS5lbC1jb2wtbWQtcHVsbC0yMXtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo4Ny41JX0uZWwtY29sLW1kLXB1c2gtMjF7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo4Ny41JX0uZWwtY29sLW1kLTIye3dpZHRoOjkxLjY2NjY3JX0uZWwtY29sLW1kLW9mZnNldC0yMnttYXJnaW4tbGVmdDo5MS42NjY2NyV9LmVsLWNvbC1tZC1wdWxsLTIye3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjkxLjY2NjY3JX0uZWwtY29sLW1kLXB1c2gtMjJ7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo5MS42NjY2NyV9LmVsLWNvbC1tZC0yM3t3aWR0aDo5NS44MzMzMyV9LmVsLWNvbC1tZC1vZmZzZXQtMjN7bWFyZ2luLWxlZnQ6OTUuODMzMzMlfS5lbC1jb2wtbWQtcHVsbC0yM3twb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo5NS44MzMzMyV9LmVsLWNvbC1tZC1wdXNoLTIze3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6OTUuODMzMzMlfS5lbC1jb2wtbWQtMjR7d2lkdGg6MTAwJX0uZWwtY29sLW1kLW9mZnNldC0yNHttYXJnaW4tbGVmdDoxMDAlfS5lbC1jb2wtbWQtcHVsbC0yNHtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDoxMDAlfS5lbC1jb2wtbWQtcHVzaC0yNHtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjEwMCV9fUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDoxMjAwcHgpey5lbC1jb2wtbGctMHtkaXNwbGF5Om5vbmU7d2lkdGg6MCV9LmVsLWNvbC1sZy1vZmZzZXQtMHttYXJnaW4tbGVmdDowfS5lbC1jb2wtbGctcHVsbC0we3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjB9LmVsLWNvbC1sZy1wdXNoLTB7cG9zaXRpb246cmVsYXRpdmU7bGVmdDowfS5lbC1jb2wtbGctMXt3aWR0aDo0LjE2NjY3JX0uZWwtY29sLWxnLW9mZnNldC0xe21hcmdpbi1sZWZ0OjQuMTY2NjclfS5lbC1jb2wtbGctcHVsbC0xe3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjQuMTY2NjclfS5lbC1jb2wtbGctcHVzaC0xe3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NC4xNjY2NyV9LmVsLWNvbC1sZy0ye3dpZHRoOjguMzMzMzMlfS5lbC1jb2wtbGctb2Zmc2V0LTJ7bWFyZ2luLWxlZnQ6OC4zMzMzMyV9LmVsLWNvbC1sZy1wdWxsLTJ7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6OC4zMzMzMyV9LmVsLWNvbC1sZy1wdXNoLTJ7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo4LjMzMzMzJX0uZWwtY29sLWxnLTN7d2lkdGg6MTIuNSV9LmVsLWNvbC1sZy1vZmZzZXQtM3ttYXJnaW4tbGVmdDoxMi41JX0uZWwtY29sLWxnLXB1bGwtM3twb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDoxMi41JX0uZWwtY29sLWxnLXB1c2gtM3twb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjEyLjUlfS5lbC1jb2wtbGctNHt3aWR0aDoxNi42NjY2NyV9LmVsLWNvbC1sZy1vZmZzZXQtNHttYXJnaW4tbGVmdDoxNi42NjY2NyV9LmVsLWNvbC1sZy1wdWxsLTR7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6MTYuNjY2NjclfS5lbC1jb2wtbGctcHVzaC00e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MTYuNjY2NjclfS5lbC1jb2wtbGctNXt3aWR0aDoyMC44MzMzMyV9LmVsLWNvbC1sZy1vZmZzZXQtNXttYXJnaW4tbGVmdDoyMC44MzMzMyV9LmVsLWNvbC1sZy1wdWxsLTV7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6MjAuODMzMzMlfS5lbC1jb2wtbGctcHVzaC01e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MjAuODMzMzMlfS5lbC1jb2wtbGctNnt3aWR0aDoyNSV9LmVsLWNvbC1sZy1vZmZzZXQtNnttYXJnaW4tbGVmdDoyNSV9LmVsLWNvbC1sZy1wdWxsLTZ7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6MjUlfS5lbC1jb2wtbGctcHVzaC02e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MjUlfS5lbC1jb2wtbGctN3t3aWR0aDoyOS4xNjY2NyV9LmVsLWNvbC1sZy1vZmZzZXQtN3ttYXJnaW4tbGVmdDoyOS4xNjY2NyV9LmVsLWNvbC1sZy1wdWxsLTd7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6MjkuMTY2NjclfS5lbC1jb2wtbGctcHVzaC03e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MjkuMTY2NjclfS5lbC1jb2wtbGctOHt3aWR0aDozMy4zMzMzMyV9LmVsLWNvbC1sZy1vZmZzZXQtOHttYXJnaW4tbGVmdDozMy4zMzMzMyV9LmVsLWNvbC1sZy1wdWxsLTh7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6MzMuMzMzMzMlfS5lbC1jb2wtbGctcHVzaC04e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MzMuMzMzMzMlfS5lbC1jb2wtbGctOXt3aWR0aDozNy41JX0uZWwtY29sLWxnLW9mZnNldC05e21hcmdpbi1sZWZ0OjM3LjUlfS5lbC1jb2wtbGctcHVsbC05e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjM3LjUlfS5lbC1jb2wtbGctcHVzaC05e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MzcuNSV9LmVsLWNvbC1sZy0xMHt3aWR0aDo0MS42NjY2NyV9LmVsLWNvbC1sZy1vZmZzZXQtMTB7bWFyZ2luLWxlZnQ6NDEuNjY2NjclfS5lbC1jb2wtbGctcHVsbC0xMHtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo0MS42NjY2NyV9LmVsLWNvbC1sZy1wdXNoLTEwe3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NDEuNjY2NjclfS5lbC1jb2wtbGctMTF7d2lkdGg6NDUuODMzMzMlfS5lbC1jb2wtbGctb2Zmc2V0LTExe21hcmdpbi1sZWZ0OjQ1LjgzMzMzJX0uZWwtY29sLWxnLXB1bGwtMTF7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NDUuODMzMzMlfS5lbC1jb2wtbGctcHVzaC0xMXtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjQ1LjgzMzMzJX0uZWwtY29sLWxnLTEye3dpZHRoOjUwJX0uZWwtY29sLWxnLW9mZnNldC0xMnttYXJnaW4tbGVmdDo1MCV9LmVsLWNvbC1sZy1wdWxsLTEye3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjUwJX0uZWwtY29sLWxnLXB1c2gtMTJ7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo1MCV9LmVsLWNvbC1sZy0xM3t3aWR0aDo1NC4xNjY2NyV9LmVsLWNvbC1sZy1vZmZzZXQtMTN7bWFyZ2luLWxlZnQ6NTQuMTY2NjclfS5lbC1jb2wtbGctcHVsbC0xM3twb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo1NC4xNjY2NyV9LmVsLWNvbC1sZy1wdXNoLTEze3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NTQuMTY2NjclfS5lbC1jb2wtbGctMTR7d2lkdGg6NTguMzMzMzMlfS5lbC1jb2wtbGctb2Zmc2V0LTE0e21hcmdpbi1sZWZ0OjU4LjMzMzMzJX0uZWwtY29sLWxnLXB1bGwtMTR7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NTguMzMzMzMlfS5lbC1jb2wtbGctcHVzaC0xNHtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjU4LjMzMzMzJX0uZWwtY29sLWxnLTE1e3dpZHRoOjYyLjUlfS5lbC1jb2wtbGctb2Zmc2V0LTE1e21hcmdpbi1sZWZ0OjYyLjUlfS5lbC1jb2wtbGctcHVsbC0xNXtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo2Mi41JX0uZWwtY29sLWxnLXB1c2gtMTV7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo2Mi41JX0uZWwtY29sLWxnLTE2e3dpZHRoOjY2LjY2NjY3JX0uZWwtY29sLWxnLW9mZnNldC0xNnttYXJnaW4tbGVmdDo2Ni42NjY2NyV9LmVsLWNvbC1sZy1wdWxsLTE2e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjY2LjY2NjY3JX0uZWwtY29sLWxnLXB1c2gtMTZ7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo2Ni42NjY2NyV9LmVsLWNvbC1sZy0xN3t3aWR0aDo3MC44MzMzMyV9LmVsLWNvbC1sZy1vZmZzZXQtMTd7bWFyZ2luLWxlZnQ6NzAuODMzMzMlfS5lbC1jb2wtbGctcHVsbC0xN3twb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo3MC44MzMzMyV9LmVsLWNvbC1sZy1wdXNoLTE3e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NzAuODMzMzMlfS5lbC1jb2wtbGctMTh7d2lkdGg6NzUlfS5lbC1jb2wtbGctb2Zmc2V0LTE4e21hcmdpbi1sZWZ0Ojc1JX0uZWwtY29sLWxnLXB1bGwtMTh7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NzUlfS5lbC1jb2wtbGctcHVzaC0xOHtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0Ojc1JX0uZWwtY29sLWxnLTE5e3dpZHRoOjc5LjE2NjY3JX0uZWwtY29sLWxnLW9mZnNldC0xOXttYXJnaW4tbGVmdDo3OS4xNjY2NyV9LmVsLWNvbC1sZy1wdWxsLTE5e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0Ojc5LjE2NjY3JX0uZWwtY29sLWxnLXB1c2gtMTl7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo3OS4xNjY2NyV9LmVsLWNvbC1sZy0yMHt3aWR0aDo4My4zMzMzMyV9LmVsLWNvbC1sZy1vZmZzZXQtMjB7bWFyZ2luLWxlZnQ6ODMuMzMzMzMlfS5lbC1jb2wtbGctcHVsbC0yMHtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo4My4zMzMzMyV9LmVsLWNvbC1sZy1wdXNoLTIwe3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6ODMuMzMzMzMlfS5lbC1jb2wtbGctMjF7d2lkdGg6ODcuNSV9LmVsLWNvbC1sZy1vZmZzZXQtMjF7bWFyZ2luLWxlZnQ6ODcuNSV9LmVsLWNvbC1sZy1wdWxsLTIxe3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0Ojg3LjUlfS5lbC1jb2wtbGctcHVzaC0yMXtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0Ojg3LjUlfS5lbC1jb2wtbGctMjJ7d2lkdGg6OTEuNjY2NjclfS5lbC1jb2wtbGctb2Zmc2V0LTIye21hcmdpbi1sZWZ0OjkxLjY2NjY3JX0uZWwtY29sLWxnLXB1bGwtMjJ7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6OTEuNjY2NjclfS5lbC1jb2wtbGctcHVzaC0yMntwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjkxLjY2NjY3JX0uZWwtY29sLWxnLTIze3dpZHRoOjk1LjgzMzMzJX0uZWwtY29sLWxnLW9mZnNldC0yM3ttYXJnaW4tbGVmdDo5NS44MzMzMyV9LmVsLWNvbC1sZy1wdWxsLTIze3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0Ojk1LjgzMzMzJX0uZWwtY29sLWxnLXB1c2gtMjN7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo5NS44MzMzMyV9LmVsLWNvbC1sZy0yNHt3aWR0aDoxMDAlfS5lbC1jb2wtbGctb2Zmc2V0LTI0e21hcmdpbi1sZWZ0OjEwMCV9LmVsLWNvbC1sZy1wdWxsLTI0e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjEwMCV9LmVsLWNvbC1sZy1wdXNoLTI0e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MTAwJX19QG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOjE5MjBweCl7LmVsLWNvbC14bC0we2Rpc3BsYXk6bm9uZTt3aWR0aDowJX0uZWwtY29sLXhsLW9mZnNldC0we21hcmdpbi1sZWZ0OjB9LmVsLWNvbC14bC1wdWxsLTB7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6MH0uZWwtY29sLXhsLXB1c2gtMHtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjB9LmVsLWNvbC14bC0xe3dpZHRoOjQuMTY2NjclfS5lbC1jb2wteGwtb2Zmc2V0LTF7bWFyZ2luLWxlZnQ6NC4xNjY2NyV9LmVsLWNvbC14bC1wdWxsLTF7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NC4xNjY2NyV9LmVsLWNvbC14bC1wdXNoLTF7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo0LjE2NjY3JX0uZWwtY29sLXhsLTJ7d2lkdGg6OC4zMzMzMyV9LmVsLWNvbC14bC1vZmZzZXQtMnttYXJnaW4tbGVmdDo4LjMzMzMzJX0uZWwtY29sLXhsLXB1bGwtMntwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo4LjMzMzMzJX0uZWwtY29sLXhsLXB1c2gtMntwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjguMzMzMzMlfS5lbC1jb2wteGwtM3t3aWR0aDoxMi41JX0uZWwtY29sLXhsLW9mZnNldC0ze21hcmdpbi1sZWZ0OjEyLjUlfS5lbC1jb2wteGwtcHVsbC0ze3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjEyLjUlfS5lbC1jb2wteGwtcHVzaC0ze3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MTIuNSV9LmVsLWNvbC14bC00e3dpZHRoOjE2LjY2NjY3JX0uZWwtY29sLXhsLW9mZnNldC00e21hcmdpbi1sZWZ0OjE2LjY2NjY3JX0uZWwtY29sLXhsLXB1bGwtNHtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDoxNi42NjY2NyV9LmVsLWNvbC14bC1wdXNoLTR7cG9zaXRpb246cmVsYXRpdmU7bGVmdDoxNi42NjY2NyV9LmVsLWNvbC14bC01e3dpZHRoOjIwLjgzMzMzJX0uZWwtY29sLXhsLW9mZnNldC01e21hcmdpbi1sZWZ0OjIwLjgzMzMzJX0uZWwtY29sLXhsLXB1bGwtNXtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDoyMC44MzMzMyV9LmVsLWNvbC14bC1wdXNoLTV7cG9zaXRpb246cmVsYXRpdmU7bGVmdDoyMC44MzMzMyV9LmVsLWNvbC14bC02e3dpZHRoOjI1JX0uZWwtY29sLXhsLW9mZnNldC02e21hcmdpbi1sZWZ0OjI1JX0uZWwtY29sLXhsLXB1bGwtNntwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDoyNSV9LmVsLWNvbC14bC1wdXNoLTZ7cG9zaXRpb246cmVsYXRpdmU7bGVmdDoyNSV9LmVsLWNvbC14bC03e3dpZHRoOjI5LjE2NjY3JX0uZWwtY29sLXhsLW9mZnNldC03e21hcmdpbi1sZWZ0OjI5LjE2NjY3JX0uZWwtY29sLXhsLXB1bGwtN3twb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDoyOS4xNjY2NyV9LmVsLWNvbC14bC1wdXNoLTd7cG9zaXRpb246cmVsYXRpdmU7bGVmdDoyOS4xNjY2NyV9LmVsLWNvbC14bC04e3dpZHRoOjMzLjMzMzMzJX0uZWwtY29sLXhsLW9mZnNldC04e21hcmdpbi1sZWZ0OjMzLjMzMzMzJX0uZWwtY29sLXhsLXB1bGwtOHtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDozMy4zMzMzMyV9LmVsLWNvbC14bC1wdXNoLTh7cG9zaXRpb246cmVsYXRpdmU7bGVmdDozMy4zMzMzMyV9LmVsLWNvbC14bC05e3dpZHRoOjM3LjUlfS5lbC1jb2wteGwtb2Zmc2V0LTl7bWFyZ2luLWxlZnQ6MzcuNSV9LmVsLWNvbC14bC1wdWxsLTl7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6MzcuNSV9LmVsLWNvbC14bC1wdXNoLTl7cG9zaXRpb246cmVsYXRpdmU7bGVmdDozNy41JX0uZWwtY29sLXhsLTEwe3dpZHRoOjQxLjY2NjY3JX0uZWwtY29sLXhsLW9mZnNldC0xMHttYXJnaW4tbGVmdDo0MS42NjY2NyV9LmVsLWNvbC14bC1wdWxsLTEwe3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjQxLjY2NjY3JX0uZWwtY29sLXhsLXB1c2gtMTB7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo0MS42NjY2NyV9LmVsLWNvbC14bC0xMXt3aWR0aDo0NS44MzMzMyV9LmVsLWNvbC14bC1vZmZzZXQtMTF7bWFyZ2luLWxlZnQ6NDUuODMzMzMlfS5lbC1jb2wteGwtcHVsbC0xMXtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo0NS44MzMzMyV9LmVsLWNvbC14bC1wdXNoLTExe3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NDUuODMzMzMlfS5lbC1jb2wteGwtMTJ7d2lkdGg6NTAlfS5lbC1jb2wteGwtb2Zmc2V0LTEye21hcmdpbi1sZWZ0OjUwJX0uZWwtY29sLXhsLXB1bGwtMTJ7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NTAlfS5lbC1jb2wteGwtcHVzaC0xMntwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjUwJX0uZWwtY29sLXhsLTEze3dpZHRoOjU0LjE2NjY3JX0uZWwtY29sLXhsLW9mZnNldC0xM3ttYXJnaW4tbGVmdDo1NC4xNjY2NyV9LmVsLWNvbC14bC1wdWxsLTEze3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjU0LjE2NjY3JX0uZWwtY29sLXhsLXB1c2gtMTN7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo1NC4xNjY2NyV9LmVsLWNvbC14bC0xNHt3aWR0aDo1OC4zMzMzMyV9LmVsLWNvbC14bC1vZmZzZXQtMTR7bWFyZ2luLWxlZnQ6NTguMzMzMzMlfS5lbC1jb2wteGwtcHVsbC0xNHtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo1OC4zMzMzMyV9LmVsLWNvbC14bC1wdXNoLTE0e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NTguMzMzMzMlfS5lbC1jb2wteGwtMTV7d2lkdGg6NjIuNSV9LmVsLWNvbC14bC1vZmZzZXQtMTV7bWFyZ2luLWxlZnQ6NjIuNSV9LmVsLWNvbC14bC1wdWxsLTE1e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjYyLjUlfS5lbC1jb2wteGwtcHVzaC0xNXtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjYyLjUlfS5lbC1jb2wteGwtMTZ7d2lkdGg6NjYuNjY2NjclfS5lbC1jb2wteGwtb2Zmc2V0LTE2e21hcmdpbi1sZWZ0OjY2LjY2NjY3JX0uZWwtY29sLXhsLXB1bGwtMTZ7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NjYuNjY2NjclfS5lbC1jb2wteGwtcHVzaC0xNntwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjY2LjY2NjY3JX0uZWwtY29sLXhsLTE3e3dpZHRoOjcwLjgzMzMzJX0uZWwtY29sLXhsLW9mZnNldC0xN3ttYXJnaW4tbGVmdDo3MC44MzMzMyV9LmVsLWNvbC14bC1wdWxsLTE3e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjcwLjgzMzMzJX0uZWwtY29sLXhsLXB1c2gtMTd7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo3MC44MzMzMyV9LmVsLWNvbC14bC0xOHt3aWR0aDo3NSV9LmVsLWNvbC14bC1vZmZzZXQtMTh7bWFyZ2luLWxlZnQ6NzUlfS5lbC1jb2wteGwtcHVsbC0xOHtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo3NSV9LmVsLWNvbC14bC1wdXNoLTE4e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NzUlfS5lbC1jb2wteGwtMTl7d2lkdGg6NzkuMTY2NjclfS5lbC1jb2wteGwtb2Zmc2V0LTE5e21hcmdpbi1sZWZ0Ojc5LjE2NjY3JX0uZWwtY29sLXhsLXB1bGwtMTl7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NzkuMTY2NjclfS5lbC1jb2wteGwtcHVzaC0xOXtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0Ojc5LjE2NjY3JX0uZWwtY29sLXhsLTIwe3dpZHRoOjgzLjMzMzMzJX0uZWwtY29sLXhsLW9mZnNldC0yMHttYXJnaW4tbGVmdDo4My4zMzMzMyV9LmVsLWNvbC14bC1wdWxsLTIwe3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjgzLjMzMzMzJX0uZWwtY29sLXhsLXB1c2gtMjB7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo4My4zMzMzMyV9LmVsLWNvbC14bC0yMXt3aWR0aDo4Ny41JX0uZWwtY29sLXhsLW9mZnNldC0yMXttYXJnaW4tbGVmdDo4Ny41JX0uZWwtY29sLXhsLXB1bGwtMjF7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6ODcuNSV9LmVsLWNvbC14bC1wdXNoLTIxe3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6ODcuNSV9LmVsLWNvbC14bC0yMnt3aWR0aDo5MS42NjY2NyV9LmVsLWNvbC14bC1vZmZzZXQtMjJ7bWFyZ2luLWxlZnQ6OTEuNjY2NjclfS5lbC1jb2wteGwtcHVsbC0yMntwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo5MS42NjY2NyV9LmVsLWNvbC14bC1wdXNoLTIye3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6OTEuNjY2NjclfS5lbC1jb2wteGwtMjN7d2lkdGg6OTUuODMzMzMlfS5lbC1jb2wteGwtb2Zmc2V0LTIze21hcmdpbi1sZWZ0Ojk1LjgzMzMzJX0uZWwtY29sLXhsLXB1bGwtMjN7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6OTUuODMzMzMlfS5lbC1jb2wteGwtcHVzaC0yM3twb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0Ojk1LjgzMzMzJX0uZWwtY29sLXhsLTI0e3dpZHRoOjEwMCV9LmVsLWNvbC14bC1vZmZzZXQtMjR7bWFyZ2luLWxlZnQ6MTAwJX0uZWwtY29sLXhsLXB1bGwtMjR7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6MTAwJX0uZWwtY29sLXhsLXB1c2gtMjR7cG9zaXRpb246cmVsYXRpdmU7bGVmdDoxMDAlfX0uZWwtdXBsb2Fke2Rpc3BsYXk6aW5saW5lLWJsb2NrO3RleHQtYWxpZ246Y2VudGVyO2N1cnNvcjpwb2ludGVyO291dGxpbmU6MH0uZWwtdXBsb2FkX19pbnB1dHtkaXNwbGF5Om5vbmV9LmVsLXVwbG9hZF9fdGlwe2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiM2MDYyNjY7bWFyZ2luLXRvcDo3cHh9LmVsLXVwbG9hZCBpZnJhbWV7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDotMTt0b3A6MDtsZWZ0OjA7ZmlsdGVyOmFscGhhKG9wYWNpdHk9MCl9LmVsLXVwbG9hZC0tcGljdHVyZS1jYXJke2JhY2tncm91bmQtY29sb3I6I2ZiZmRmZjtib3JkZXI6MXB4IGRhc2hlZCAjYzBjY2RhO2JvcmRlci1yYWRpdXM6NnB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDt3aWR0aDoxNDhweDtoZWlnaHQ6MTQ4cHg7Y3Vyc29yOnBvaW50ZXI7bGluZS1oZWlnaHQ6MTQ2cHg7dmVydGljYWwtYWxpZ246dG9wfS5lbC11cGxvYWQtLXBpY3R1cmUtY2FyZCBpe2ZvbnQtc2l6ZToyOHB4O2NvbG9yOiM4YzkzOWR9LmVsLXVwbG9hZC0tcGljdHVyZS1jYXJkOmhvdmVyLC5lbC11cGxvYWQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiM0MDlFRkY7Y29sb3I6IzQwOUVGRn0uZWwtdXBsb2FkOmZvY3VzIC5lbC11cGxvYWQtZHJhZ2dlcntib3JkZXItY29sb3I6IzQwOUVGRn0uZWwtdXBsb2FkLWRyYWdnZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjoxcHggZGFzaGVkICNkOWQ5ZDk7Ym9yZGVyLXJhZGl1czo2cHg7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjM2MHB4O2hlaWdodDoxODBweDt0ZXh0LWFsaWduOmNlbnRlcjtjdXJzb3I6cG9pbnRlcjtvdmVyZmxvdzpoaWRkZW59LmVsLXVwbG9hZC1kcmFnZ2VyIC5lbC1pY29uLXVwbG9hZHtmb250LXNpemU6NjdweDtjb2xvcjojQzBDNENDO21hcmdpbjo0MHB4IDAgMTZweDtsaW5lLWhlaWdodDo1MHB4fS5lbC11cGxvYWQtZHJhZ2dlcisuZWwtdXBsb2FkX190aXB7dGV4dC1hbGlnbjpjZW50ZXJ9LmVsLXVwbG9hZC1kcmFnZ2Vyfi5lbC11cGxvYWRfX2ZpbGVze2JvcmRlci10b3A6MXB4IHNvbGlkICNEQ0RGRTY7bWFyZ2luLXRvcDo3cHg7cGFkZGluZy10b3A6NXB4fS5lbC11cGxvYWQtZHJhZ2dlciAuZWwtdXBsb2FkX190ZXh0e2NvbG9yOiM2MDYyNjY7Zm9udC1zaXplOjE0cHg7dGV4dC1hbGlnbjpjZW50ZXJ9LmVsLXVwbG9hZC1kcmFnZ2VyIC5lbC11cGxvYWRfX3RleHQgZW17Y29sb3I6IzQwOUVGRjtmb250LXN0eWxlOm5vcm1hbH0uZWwtdXBsb2FkLWRyYWdnZXI6aG92ZXJ7Ym9yZGVyLWNvbG9yOiM0MDlFRkZ9LmVsLXVwbG9hZC1kcmFnZ2VyLmlzLWRyYWdvdmVye2JhY2tncm91bmQtY29sb3I6cmdiYSgzMiwxNTksMjU1LC4wNik7Ym9yZGVyOjJweCBkYXNoZWQgIzQwOUVGRn0uZWwtdXBsb2FkLWxpc3R7bWFyZ2luOjA7cGFkZGluZzowO2xpc3Qtc3R5bGU6bm9uZX0uZWwtdXBsb2FkLWxpc3RfX2l0ZW17dHJhbnNpdGlvbjphbGwgLjVzIGN1YmljLWJlemllciguNTUsMCwuMSwxKTtmb250LXNpemU6MTRweDtjb2xvcjojNjA2MjY2O2xpbmUtaGVpZ2h0OjEuODttYXJnaW4tdG9wOjVweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym9yZGVyLXJhZGl1czo0cHg7d2lkdGg6MTAwJX0uZWwtdXBsb2FkLWxpc3RfX2l0ZW0gLmVsLXByb2dyZXNze3Bvc2l0aW9uOmFic29sdXRlO3RvcDoyMHB4O3dpZHRoOjEwMCV9LmVsLXVwbG9hZC1saXN0X19pdGVtIC5lbC1wcm9ncmVzc19fdGV4dHtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3RvcDotMTNweH0uZWwtdXBsb2FkLWxpc3RfX2l0ZW0gLmVsLXByb2dyZXNzLWJhcnttYXJnaW4tcmlnaHQ6MDtwYWRkaW5nLXJpZ2h0OjB9LmVsLXVwbG9hZC1saXN0X19pdGVtOmZpcnN0LWNoaWxke21hcmdpbi10b3A6MTBweH0uZWwtdXBsb2FkLWxpc3RfX2l0ZW0gLmVsLWljb24tdXBsb2FkLXN1Y2Nlc3N7Y29sb3I6IzY3QzIzQX0uZWwtdXBsb2FkLWxpc3RfX2l0ZW0gLmVsLWljb24tY2xvc2V7ZGlzcGxheTpub25lO3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1cHg7cmlnaHQ6NXB4O2N1cnNvcjpwb2ludGVyO29wYWNpdHk6Ljc1O2NvbG9yOiM2MDYyNjZ9LmVsLXVwbG9hZC1saXN0X19pdGVtIC5lbC1pY29uLWNsb3NlOmhvdmVye29wYWNpdHk6MX0uZWwtdXBsb2FkLWxpc3RfX2l0ZW0gLmVsLWljb24tY2xvc2UtdGlwe2Rpc3BsYXk6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NXB4O3JpZ2h0OjVweDtmb250LXNpemU6MTJweDtjdXJzb3I6cG9pbnRlcjtvcGFjaXR5OjE7Y29sb3I6IzQwOUVGRn0uZWwtdXBsb2FkLWxpc3RfX2l0ZW06aG92ZXIgLmVsLWljb24tY2xvc2V7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmVsLXVwbG9hZC1saXN0X19pdGVtOmhvdmVyIC5lbC1wcm9ncmVzc19fdGV4dHtkaXNwbGF5Om5vbmV9LmVsLXVwbG9hZC1saXN0X19pdGVtLmlzLXN1Y2Nlc3MgLmVsLXVwbG9hZC1saXN0X19pdGVtLXN0YXR1cy1sYWJlbHtkaXNwbGF5OmJsb2NrfS5lbC11cGxvYWQtbGlzdF9faXRlbS5pcy1zdWNjZXNzIC5lbC11cGxvYWQtbGlzdF9faXRlbS1uYW1lOmZvY3VzLC5lbC11cGxvYWQtbGlzdF9faXRlbS5pcy1zdWNjZXNzIC5lbC11cGxvYWQtbGlzdF9faXRlbS1uYW1lOmhvdmVye2NvbG9yOiM0MDlFRkY7Y3Vyc29yOnBvaW50ZXJ9LmVsLXVwbG9hZC1saXN0X19pdGVtLmlzLXN1Y2Nlc3M6Zm9jdXM6bm90KDpob3ZlcikgLmVsLWljb24tY2xvc2UtdGlwe2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5lbC11cGxvYWQtbGlzdF9faXRlbS5pcy1zdWNjZXNzOmFjdGl2ZSwuZWwtdXBsb2FkLWxpc3RfX2l0ZW0uaXMtc3VjY2Vzczpub3QoLmZvY3VzaW5nKTpmb2N1c3tvdXRsaW5lLXdpZHRoOjB9LmVsLXVwbG9hZC1saXN0X19pdGVtLmlzLXN1Y2Nlc3M6YWN0aXZlIC5lbC1pY29uLWNsb3NlLXRpcCwuZWwtdXBsb2FkLWxpc3RfX2l0ZW0uaXMtc3VjY2Vzczpmb2N1cyAuZWwtdXBsb2FkLWxpc3RfX2l0ZW0tc3RhdHVzLWxhYmVsLC5lbC11cGxvYWQtbGlzdF9faXRlbS5pcy1zdWNjZXNzOmhvdmVyIC5lbC11cGxvYWQtbGlzdF9faXRlbS1zdGF0dXMtbGFiZWwsLmVsLXVwbG9hZC1saXN0X19pdGVtLmlzLXN1Y2Nlc3M6bm90KC5mb2N1c2luZyk6Zm9jdXMgLmVsLWljb24tY2xvc2UtdGlwe2Rpc3BsYXk6bm9uZX0uZWwtdXBsb2FkLWxpc3QuaXMtZGlzYWJsZWQgLmVsLXVwbG9hZC1saXN0X19pdGVtOmhvdmVyIC5lbC11cGxvYWQtbGlzdF9faXRlbS1zdGF0dXMtbGFiZWx7ZGlzcGxheTpibG9ja30uZWwtdXBsb2FkLWxpc3RfX2l0ZW0tbmFtZXtjb2xvcjojNjA2MjY2O2Rpc3BsYXk6YmxvY2s7bWFyZ2luLXJpZ2h0OjQwcHg7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmctbGVmdDo0cHg7dGV4dC1vdmVyZmxvdzplbGxpcHNpczt0cmFuc2l0aW9uOmNvbG9yIC4zczt3aGl0ZS1zcGFjZTpub3dyYXB9LmVsLXVwbG9hZC1saXN0X19pdGVtLW5hbWUgW2NsYXNzXj1lbC1pY29uXXtoZWlnaHQ6MTAwJTttYXJnaW4tcmlnaHQ6N3B4O2NvbG9yOiM5MDkzOTk7bGluZS1oZWlnaHQ6aW5oZXJpdH0uZWwtdXBsb2FkLWxpc3RfX2l0ZW0tc3RhdHVzLWxhYmVse3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjVweDt0b3A6MDtsaW5lLWhlaWdodDppbmhlcml0O2Rpc3BsYXk6bm9uZX0uZWwtdXBsb2FkLWxpc3RfX2l0ZW0tZGVsZXRle3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjEwcHg7dG9wOjA7Zm9udC1zaXplOjEycHg7Y29sb3I6IzYwNjI2NjtkaXNwbGF5Om5vbmV9LmVsLXVwbG9hZC1saXN0X19pdGVtLWRlbGV0ZTpob3Zlcntjb2xvcjojNDA5RUZGfS5lbC11cGxvYWQtbGlzdC0tcGljdHVyZS1jYXJke21hcmdpbjowO2Rpc3BsYXk6aW5saW5lO3ZlcnRpY2FsLWFsaWduOnRvcH0uZWwtdXBsb2FkLWxpc3QtLXBpY3R1cmUtY2FyZCAuZWwtdXBsb2FkLWxpc3RfX2l0ZW17b3ZlcmZsb3c6aGlkZGVuO2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNjMGNjZGE7Ym9yZGVyLXJhZGl1czo2cHg7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjE0OHB4O2hlaWdodDoxNDhweDttYXJnaW46MCA4cHggOHB4IDA7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmVsLXVwbG9hZC1saXN0LS1waWN0dXJlLWNhcmQgLmVsLXVwbG9hZC1saXN0X19pdGVtIC5lbC1pY29uLWNoZWNrLC5lbC11cGxvYWQtbGlzdC0tcGljdHVyZS1jYXJkIC5lbC11cGxvYWQtbGlzdF9faXRlbSAuZWwtaWNvbi1jaXJjbGUtY2hlY2t7Y29sb3I6I0ZGRn0uZWwtdXBsb2FkLWxpc3QtLXBpY3R1cmUtY2FyZCAuZWwtdXBsb2FkLWxpc3RfX2l0ZW0gLmVsLWljb24tY2xvc2UsLmVsLXVwbG9hZC1saXN0LS1waWN0dXJlLWNhcmQgLmVsLXVwbG9hZC1saXN0X19pdGVtOmhvdmVyIC5lbC11cGxvYWQtbGlzdF9faXRlbS1zdGF0dXMtbGFiZWx7ZGlzcGxheTpub25lfS5lbC11cGxvYWQtbGlzdC0tcGljdHVyZS1jYXJkIC5lbC11cGxvYWQtbGlzdF9faXRlbTpob3ZlciAuZWwtcHJvZ3Jlc3NfX3RleHR7ZGlzcGxheTpibG9ja30uZWwtdXBsb2FkLWxpc3QtLXBpY3R1cmUtY2FyZCAuZWwtdXBsb2FkLWxpc3RfX2l0ZW0tbmFtZXtkaXNwbGF5Om5vbmV9LmVsLXVwbG9hZC1saXN0LS1waWN0dXJlLWNhcmQgLmVsLXVwbG9hZC1saXN0X19pdGVtLXRodW1ibmFpbHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlfS5lbC11cGxvYWQtbGlzdC0tcGljdHVyZS1jYXJkIC5lbC11cGxvYWQtbGlzdF9faXRlbS1zdGF0dXMtbGFiZWx7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6LTE1cHg7dG9wOi02cHg7d2lkdGg6NDBweDtoZWlnaHQ6MjRweDtiYWNrZ3JvdW5kOiMxM2NlNjY7dGV4dC1hbGlnbjpjZW50ZXI7dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZyk7Ym94LXNoYWRvdzowIDAgMXBjIDFweCByZ2JhKDAsMCwwLC4yKX0uZWwtdXBsb2FkLWxpc3QtLXBpY3R1cmUtY2FyZCAuZWwtdXBsb2FkLWxpc3RfX2l0ZW0tc3RhdHVzLWxhYmVsIGl7Zm9udC1zaXplOjEycHg7bWFyZ2luLXRvcDoxMXB4O3RyYW5zZm9ybTpyb3RhdGUoLTQ1ZGVnKX0uZWwtdXBsb2FkLWxpc3QtLXBpY3R1cmUtY2FyZCAuZWwtdXBsb2FkLWxpc3RfX2l0ZW0tYWN0aW9uc3twb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2xlZnQ6MDt0b3A6MDtjdXJzb3I6ZGVmYXVsdDt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjojZmZmO29wYWNpdHk6MDtmb250LXNpemU6MjBweDtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjUpO3RyYW5zaXRpb246b3BhY2l0eSAuM3N9LmVsLXVwbG9hZC1saXN0LS1waWN0dXJlLWNhcmQgLmVsLXVwbG9hZC1saXN0X19pdGVtLWFjdGlvbnM6OmFmdGVye2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxMDAlO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uZWwtdXBsb2FkLWxpc3QtLXBpY3R1cmUtY2FyZCAuZWwtdXBsb2FkLWxpc3RfX2l0ZW0tYWN0aW9ucyBzcGFue2Rpc3BsYXk6bm9uZTtjdXJzb3I6cG9pbnRlcn0uZWwtdXBsb2FkLWxpc3QtLXBpY3R1cmUtY2FyZCAuZWwtdXBsb2FkLWxpc3RfX2l0ZW0tYWN0aW9ucyBzcGFuK3NwYW57bWFyZ2luLWxlZnQ6MTVweH0uZWwtdXBsb2FkLWxpc3QtLXBpY3R1cmUtY2FyZCAuZWwtdXBsb2FkLWxpc3RfX2l0ZW0tYWN0aW9ucyAuZWwtdXBsb2FkLWxpc3RfX2l0ZW0tZGVsZXRle3Bvc2l0aW9uOnN0YXRpYztmb250LXNpemU6aW5oZXJpdDtjb2xvcjppbmhlcml0fS5lbC11cGxvYWQtbGlzdC0tcGljdHVyZS1jYXJkIC5lbC11cGxvYWQtbGlzdF9faXRlbS1hY3Rpb25zOmhvdmVye29wYWNpdHk6MX0uZWwtdXBsb2FkLWxpc3QtLXBpY3R1cmUtY2FyZCAuZWwtdXBsb2FkLWxpc3RfX2l0ZW0tYWN0aW9uczpob3ZlciBzcGFue2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5lbC11cGxvYWQtbGlzdC0tcGljdHVyZS1jYXJkIC5lbC1wcm9ncmVzc3t0b3A6NTAlO2xlZnQ6NTAlO3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwtNTAlKTtib3R0b206YXV0bzt3aWR0aDoxMjZweH0uZWwtdXBsb2FkLWxpc3QtLXBpY3R1cmUtY2FyZCAuZWwtcHJvZ3Jlc3MgLmVsLXByb2dyZXNzX190ZXh0e3RvcDo1MCV9LmVsLXVwbG9hZC1saXN0LS1waWN0dXJlIC5lbC11cGxvYWQtbGlzdF9faXRlbXtvdmVyZmxvdzpoaWRkZW47ei1pbmRleDowO2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNjMGNjZGE7Ym9yZGVyLXJhZGl1czo2cHg7Ym94LXNpemluZzpib3JkZXItYm94O21hcmdpbi10b3A6MTBweDtwYWRkaW5nOjEwcHggMTBweCAxMHB4IDkwcHg7aGVpZ2h0OjkycHh9LmVsLXVwbG9hZC1saXN0LS1waWN0dXJlIC5lbC11cGxvYWQtbGlzdF9faXRlbSAuZWwtaWNvbi1jaGVjaywuZWwtdXBsb2FkLWxpc3QtLXBpY3R1cmUgLmVsLXVwbG9hZC1saXN0X19pdGVtIC5lbC1pY29uLWNpcmNsZS1jaGVja3tjb2xvcjojRkZGfS5lbC11cGxvYWQtbGlzdC0tcGljdHVyZSAuZWwtdXBsb2FkLWxpc3RfX2l0ZW06aG92ZXIgLmVsLXVwbG9hZC1saXN0X19pdGVtLXN0YXR1cy1sYWJlbHtiYWNrZ3JvdW5kOjAgMDtib3gtc2hhZG93Om5vbmU7dG9wOi0ycHg7cmlnaHQ6LTEycHh9LmVsLXVwbG9hZC1saXN0LS1waWN0dXJlIC5lbC11cGxvYWQtbGlzdF9faXRlbTpob3ZlciAuZWwtcHJvZ3Jlc3NfX3RleHR7ZGlzcGxheTpibG9ja30uZWwtdXBsb2FkLWxpc3QtLXBpY3R1cmUgLmVsLXVwbG9hZC1saXN0X19pdGVtLmlzLXN1Y2Nlc3MgLmVsLXVwbG9hZC1saXN0X19pdGVtLW5hbWV7bGluZS1oZWlnaHQ6NzBweDttYXJnaW4tdG9wOjB9LmVsLXVwbG9hZC1saXN0LS1waWN0dXJlIC5lbC11cGxvYWQtbGlzdF9faXRlbS5pcy1zdWNjZXNzIC5lbC11cGxvYWQtbGlzdF9faXRlbS1uYW1lIGl7ZGlzcGxheTpub25lfS5lbC11cGxvYWQtbGlzdC0tcGljdHVyZSAuZWwtdXBsb2FkLWxpc3RfX2l0ZW0tdGh1bWJuYWlse3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDo3MHB4O2hlaWdodDo3MHB4O2Zsb2F0OmxlZnQ7cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDoxO21hcmdpbi1sZWZ0Oi04MHB4O2JhY2tncm91bmQtY29sb3I6I0ZGRn0uZWwtdXBsb2FkLWxpc3QtLXBpY3R1cmUgLmVsLXVwbG9hZC1saXN0X19pdGVtLW5hbWV7ZGlzcGxheTpibG9jazttYXJnaW4tdG9wOjIwcHh9LmVsLXVwbG9hZC1saXN0LS1waWN0dXJlIC5lbC11cGxvYWQtbGlzdF9faXRlbS1uYW1lIGl7Zm9udC1zaXplOjcwcHg7bGluZS1oZWlnaHQ6MTtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjlweDt0b3A6MTBweH0uZWwtdXBsb2FkLWxpc3QtLXBpY3R1cmUgLmVsLXVwbG9hZC1saXN0X19pdGVtLXN0YXR1cy1sYWJlbHtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDotMTdweDt0b3A6LTdweDt3aWR0aDo0NnB4O2hlaWdodDoyNnB4O2JhY2tncm91bmQ6IzEzY2U2Njt0ZXh0LWFsaWduOmNlbnRlcjt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKTtib3gtc2hhZG93OjAgMXB4IDFweCAjY2NjfS5lbC11cGxvYWQtbGlzdC0tcGljdHVyZSAuZWwtdXBsb2FkLWxpc3RfX2l0ZW0tc3RhdHVzLWxhYmVsIGl7Zm9udC1zaXplOjEycHg7bWFyZ2luLXRvcDoxMnB4O3RyYW5zZm9ybTpyb3RhdGUoLTQ1ZGVnKX0uZWwtdXBsb2FkLWxpc3QtLXBpY3R1cmUgLmVsLXByb2dyZXNze3Bvc2l0aW9uOnJlbGF0aXZlO3RvcDotN3B4fS5lbC11cGxvYWQtY292ZXJ7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3RvcDowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6aGlkZGVuO3otaW5kZXg6MTA7Y3Vyc29yOmRlZmF1bHR9LmVsLXVwbG9hZC1jb3Zlcjo6YWZ0ZXJ7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjEwMCU7dmVydGljYWwtYWxpZ246bWlkZGxlfS5lbC11cGxvYWQtY292ZXIgaW1ne2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJX0uZWwtdXBsb2FkLWNvdmVyX19sYWJlbHtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDotMTVweDt0b3A6LTZweDt3aWR0aDo0MHB4O2hlaWdodDoyNHB4O2JhY2tncm91bmQ6IzEzY2U2Njt0ZXh0LWFsaWduOmNlbnRlcjt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKTtib3gtc2hhZG93OjAgMCAxcGMgMXB4IHJnYmEoMCwwLDAsLjIpfS5lbC11cGxvYWQtY292ZXJfX2xhYmVsIGl7Zm9udC1zaXplOjEycHg7bWFyZ2luLXRvcDoxMXB4O3RyYW5zZm9ybTpyb3RhdGUoLTQ1ZGVnKTtjb2xvcjojZmZmfS5lbC11cGxvYWQtY292ZXJfX3Byb2dyZXNze2Rpc3BsYXk6aW5saW5lLWJsb2NrO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtwb3NpdGlvbjpzdGF0aWM7d2lkdGg6MjQzcHh9LmVsLXVwbG9hZC1jb3Zlcl9fcHJvZ3Jlc3MrLmVsLXVwbG9hZF9faW5uZXJ7b3BhY2l0eTowfS5lbC11cGxvYWQtY292ZXJfX2NvbnRlbnR7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCV9LmVsLXVwbG9hZC1jb3Zlcl9faW50ZXJhY3R7cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOjA7bGVmdDowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC43Mik7dGV4dC1hbGlnbjpjZW50ZXJ9LmVsLXVwbG9hZC1jb3Zlcl9faW50ZXJhY3QgLmJ0bntkaXNwbGF5OmlubGluZS1ibG9jaztjb2xvcjojRkZGO2ZvbnQtc2l6ZToxNHB4O2N1cnNvcjpwb2ludGVyO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuM3MgY3ViaWMtYmV6aWVyKC4yMywxLC4zMiwxKSxvcGFjaXR5IC4zcyBjdWJpYy1iZXppZXIoLjIzLDEsLjMyLDEpO21hcmdpbi10b3A6NjBweH0uZWwtdXBsb2FkLWNvdmVyX19pbnRlcmFjdCAuYnRuIHNwYW57b3BhY2l0eTowO3RyYW5zaXRpb246b3BhY2l0eSAuMTVzIGxpbmVhcn0uZWwtdXBsb2FkLWNvdmVyX19pbnRlcmFjdCAuYnRuOm5vdCg6Zmlyc3QtY2hpbGQpe21hcmdpbi1sZWZ0OjM1cHh9LmVsLXVwbG9hZC1jb3Zlcl9faW50ZXJhY3QgLmJ0bjpob3Zlcnt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMTNweCl9LmVsLXVwbG9hZC1jb3Zlcl9faW50ZXJhY3QgLmJ0bjpob3ZlciBzcGFue29wYWNpdHk6MX0uZWwtdXBsb2FkLWNvdmVyX19pbnRlcmFjdCAuYnRuIGl7Y29sb3I6I0ZGRjtkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZToyNHB4O2xpbmUtaGVpZ2h0OmluaGVyaXQ7bWFyZ2luOjAgYXV0byA1cHh9LmVsLXVwbG9hZC1jb3Zlcl9fdGl0bGV7cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOjA7bGVmdDowO2JhY2tncm91bmQtY29sb3I6I0ZGRjtoZWlnaHQ6MzZweDt3aWR0aDoxMDAlO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcDtmb250LXdlaWdodDo0MDA7dGV4dC1hbGlnbjpsZWZ0O3BhZGRpbmc6MCAxMHB4O21hcmdpbjowO2xpbmUtaGVpZ2h0OjM2cHg7Zm9udC1zaXplOjE0cHg7Y29sb3I6IzMwMzEzM30uZWwtdXBsb2FkLWNvdmVyKy5lbC11cGxvYWRfX2lubmVye29wYWNpdHk6MDtwb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4OjF9LmVsLXByb2dyZXNze3Bvc2l0aW9uOnJlbGF0aXZlO2xpbmUtaGVpZ2h0OjF9LmVsLXByb2dyZXNzX190ZXh0e2ZvbnQtc2l6ZToxNHB4O2NvbG9yOiM2MDYyNjY7ZGlzcGxheTppbmxpbmUtYmxvY2s7dmVydGljYWwtYWxpZ246bWlkZGxlO21hcmdpbi1sZWZ0OjEwcHg7bGluZS1oZWlnaHQ6MX0uZWwtcHJvZ3Jlc3NfX3RleHQgaXt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7ZGlzcGxheTpibG9ja30uZWwtcHJvZ3Jlc3MtLWNpcmNsZSwuZWwtcHJvZ3Jlc3MtLWRhc2hib2FyZHtkaXNwbGF5OmlubGluZS1ibG9ja30uZWwtcHJvZ3Jlc3MtLWNpcmNsZSAuZWwtcHJvZ3Jlc3NfX3RleHQsLmVsLXByb2dyZXNzLS1kYXNoYm9hcmQgLmVsLXByb2dyZXNzX190ZXh0e3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7bGVmdDowO3dpZHRoOjEwMCU7dGV4dC1hbGlnbjpjZW50ZXI7bWFyZ2luOjA7dHJhbnNmb3JtOnRyYW5zbGF0ZSgwLC01MCUpfS5lbC1wcm9ncmVzcy0tY2lyY2xlIC5lbC1wcm9ncmVzc19fdGV4dCBpLC5lbC1wcm9ncmVzcy0tZGFzaGJvYXJkIC5lbC1wcm9ncmVzc19fdGV4dCBpe3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtkaXNwbGF5OmlubGluZS1ibG9ja30uZWwtcHJvZ3Jlc3MtLXdpdGhvdXQtdGV4dCAuZWwtcHJvZ3Jlc3NfX3RleHR7ZGlzcGxheTpub25lfS5lbC1wcm9ncmVzcy0td2l0aG91dC10ZXh0IC5lbC1wcm9ncmVzcy1iYXJ7cGFkZGluZy1yaWdodDowO21hcmdpbi1yaWdodDowO2Rpc3BsYXk6YmxvY2t9LmVsLXByb2dyZXNzLS10ZXh0LWluc2lkZSAuZWwtcHJvZ3Jlc3MtYmFye3BhZGRpbmctcmlnaHQ6MDttYXJnaW4tcmlnaHQ6MH0uZWwtcHJvZ3Jlc3MuaXMtc3VjY2VzcyAuZWwtcHJvZ3Jlc3MtYmFyX19pbm5lcntiYWNrZ3JvdW5kLWNvbG9yOiM2N0MyM0F9LmVsLXByb2dyZXNzLmlzLXN1Y2Nlc3MgLmVsLXByb2dyZXNzX190ZXh0e2NvbG9yOiM2N0MyM0F9LmVsLXByb2dyZXNzLmlzLXdhcm5pbmcgLmVsLXByb2dyZXNzLWJhcl9faW5uZXJ7YmFja2dyb3VuZC1jb2xvcjojRTZBMjNDfS5lbC1iYWRnZV9fY29udGVudCwuZWwtcHJvZ3Jlc3MuaXMtZXhjZXB0aW9uIC5lbC1wcm9ncmVzcy1iYXJfX2lubmVye2JhY2tncm91bmQtY29sb3I6I0Y1NkM2Q30uZWwtcHJvZ3Jlc3MuaXMtd2FybmluZyAuZWwtcHJvZ3Jlc3NfX3RleHR7Y29sb3I6I0U2QTIzQ30uZWwtcHJvZ3Jlc3MuaXMtZXhjZXB0aW9uIC5lbC1wcm9ncmVzc19fdGV4dHtjb2xvcjojRjU2QzZDfS5lbC1wcm9ncmVzcy1iYXJ7cGFkZGluZy1yaWdodDo1MHB4O2Rpc3BsYXk6aW5saW5lLWJsb2NrO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDoxMDAlO21hcmdpbi1yaWdodDotNTVweDtib3gtc2l6aW5nOmJvcmRlci1ib3h9LmVsLWNhcmRfX2hlYWRlciwuZWwtbWVzc2FnZSwuZWwtc3RlcF9faWNvbnstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveH0uZWwtcHJvZ3Jlc3MtYmFyX19vdXRlcntoZWlnaHQ6NnB4O2JvcmRlci1yYWRpdXM6MTAwcHg7YmFja2dyb3VuZC1jb2xvcjojRUJFRUY1O292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmVsLXByb2dyZXNzLWJhcl9faW5uZXJ7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3RvcDowO2hlaWdodDoxMDAlO2JhY2tncm91bmQtY29sb3I6IzQwOUVGRjt0ZXh0LWFsaWduOnJpZ2h0O2JvcmRlci1yYWRpdXM6MTAwcHg7bGluZS1oZWlnaHQ6MTt3aGl0ZS1zcGFjZTpub3dyYXA7dHJhbnNpdGlvbjp3aWR0aCAuNnMgZWFzZX0uZWwtcHJvZ3Jlc3MtYmFyX19pbm5lcjo6YWZ0ZXJ7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjEwMCU7dmVydGljYWwtYWxpZ246bWlkZGxlfS5lbC1wcm9ncmVzcy1iYXJfX2lubmVyVGV4dHtkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Y29sb3I6I0ZGRjtmb250LXNpemU6MTJweDttYXJnaW46MCA1cHh9QGtleWZyYW1lcyBwcm9ncmVzc3swJXtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgMH0xMDAle2JhY2tncm91bmQtcG9zaXRpb246MzJweCAwfX0uZWwtdGltZS1zcGlubmVye3dpZHRoOjEwMCU7d2hpdGUtc3BhY2U6bm93cmFwfS5lbC1zcGlubmVye2Rpc3BsYXk6aW5saW5lLWJsb2NrO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uZWwtc3Bpbm5lci1pbm5lcnthbmltYXRpb246cm90YXRlIDJzIGxpbmVhciBpbmZpbml0ZTt3aWR0aDo1MHB4O2hlaWdodDo1MHB4fS5lbC1zcGlubmVyLWlubmVyIC5wYXRoe3N0cm9rZTojZWNlY2VjO3N0cm9rZS1saW5lY2FwOnJvdW5kO2FuaW1hdGlvbjpkYXNoIDEuNXMgZWFzZS1pbi1vdXQgaW5maW5pdGV9QGtleWZyYW1lcyByb3RhdGV7MTAwJXt0cmFuc2Zvcm06cm90YXRlKDM2MGRlZyl9fUBrZXlmcmFtZXMgZGFzaHswJXtzdHJva2UtZGFzaGFycmF5OjEsMTUwO3N0cm9rZS1kYXNob2Zmc2V0OjB9NTAle3N0cm9rZS1kYXNoYXJyYXk6OTAsMTUwO3N0cm9rZS1kYXNob2Zmc2V0Oi0zNX0xMDAle3N0cm9rZS1kYXNoYXJyYXk6OTAsMTUwO3N0cm9rZS1kYXNob2Zmc2V0Oi0xMjR9fS5lbC1tZXNzYWdle21pbi13aWR0aDozODBweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyLXdpZHRoOjFweDtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLWNvbG9yOiNFQkVFRjU7cG9zaXRpb246Zml4ZWQ7bGVmdDo1MCU7dG9wOjIwcHg7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTUwJSk7YmFja2dyb3VuZC1jb2xvcjojZWRmMmZjO3RyYW5zaXRpb246b3BhY2l0eSAuM3MsdHJhbnNmb3JtIC40cyx0b3AgLjRzO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjE1cHggMTVweCAxNXB4IDIwcHg7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0uZWwtbWVzc2FnZS5pcy1jZW50ZXJ7anVzdGlmeS1jb250ZW50OmNlbnRlcn0uZWwtbWVzc2FnZS5pcy1jbG9zYWJsZSAuZWwtbWVzc2FnZV9fY29udGVudHtwYWRkaW5nLXJpZ2h0OjE2cHh9LmVsLW1lc3NhZ2UgcHttYXJnaW46MH0uZWwtbWVzc2FnZS0taW5mbyAuZWwtbWVzc2FnZV9fY29udGVudHtjb2xvcjojOTA5Mzk5fS5lbC1tZXNzYWdlLS1zdWNjZXNze2JhY2tncm91bmQtY29sb3I6I2YwZjllYjtib3JkZXItY29sb3I6I2UxZjNkOH0uZWwtbWVzc2FnZS0tc3VjY2VzcyAuZWwtbWVzc2FnZV9fY29udGVudHtjb2xvcjojNjdDMjNBfS5lbC1tZXNzYWdlLS13YXJuaW5ne2JhY2tncm91bmQtY29sb3I6I2ZkZjZlYztib3JkZXItY29sb3I6I2ZhZWNkOH0uZWwtbWVzc2FnZS0td2FybmluZyAuZWwtbWVzc2FnZV9fY29udGVudHtjb2xvcjojRTZBMjNDfS5lbC1tZXNzYWdlLS1lcnJvcntiYWNrZ3JvdW5kLWNvbG9yOiNmZWYwZjA7Ym9yZGVyLWNvbG9yOiNmZGUyZTJ9LmVsLW1lc3NhZ2UtLWVycm9yIC5lbC1tZXNzYWdlX19jb250ZW50e2NvbG9yOiNGNTZDNkN9LmVsLW1lc3NhZ2VfX2ljb257bWFyZ2luLXJpZ2h0OjEwcHh9LmVsLW1lc3NhZ2VfX2NvbnRlbnR7cGFkZGluZzowO2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjF9LmVsLW1lc3NhZ2VfX2NvbnRlbnQ6Zm9jdXN7b3V0bGluZS13aWR0aDowfS5lbC1tZXNzYWdlX19jbG9zZUJ0bntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3JpZ2h0OjE1cHg7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSk7Y3Vyc29yOnBvaW50ZXI7Y29sb3I6I0MwQzRDQztmb250LXNpemU6MTZweH0uZWwtbWVzc2FnZV9fY2xvc2VCdG46Zm9jdXN7b3V0bGluZS13aWR0aDowfS5lbC1tZXNzYWdlX19jbG9zZUJ0bjpob3Zlcntjb2xvcjojOTA5Mzk5fS5lbC1tZXNzYWdlIC5lbC1pY29uLXN1Y2Nlc3N7Y29sb3I6IzY3QzIzQX0uZWwtbWVzc2FnZSAuZWwtaWNvbi1lcnJvcntjb2xvcjojRjU2QzZDfS5lbC1tZXNzYWdlIC5lbC1pY29uLWluZm97Y29sb3I6IzkwOTM5OX0uZWwtbWVzc2FnZSAuZWwtaWNvbi13YXJuaW5ne2NvbG9yOiNFNkEyM0N9LmVsLW1lc3NhZ2UtZmFkZS1lbnRlciwuZWwtbWVzc2FnZS1mYWRlLWxlYXZlLWFjdGl2ZXtvcGFjaXR5OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLC0xMDAlKX0uZWwtYmFkZ2V7cG9zaXRpb246cmVsYXRpdmU7dmVydGljYWwtYWxpZ246bWlkZGxlO2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5lbC1iYWRnZV9fY29udGVudHtib3JkZXItcmFkaXVzOjEwcHg7Y29sb3I6I0ZGRjtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6MTJweDtoZWlnaHQ6MThweDtsaW5lLWhlaWdodDoxOHB4O3BhZGRpbmc6MCA2cHg7dGV4dC1hbGlnbjpjZW50ZXI7d2hpdGUtc3BhY2U6bm93cmFwO2JvcmRlcjoxcHggc29saWQgI0ZGRn0uZWwtYmFkZ2VfX2NvbnRlbnQuaXMtZml4ZWR7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7cmlnaHQ6MTBweDt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKSB0cmFuc2xhdGVYKDEwMCUpfS5lbC1yYXRlX19pY29uLC5lbC1yYXRlX19pdGVte3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5lbC1iYWRnZV9fY29udGVudC5pcy1maXhlZC5pcy1kb3R7cmlnaHQ6NXB4fS5lbC1iYWRnZV9fY29udGVudC5pcy1kb3R7aGVpZ2h0OjhweDt3aWR0aDo4cHg7cGFkZGluZzowO3JpZ2h0OjA7Ym9yZGVyLXJhZGl1czo1MCV9LmVsLWJhZGdlX19jb250ZW50LS1wcmltYXJ5e2JhY2tncm91bmQtY29sb3I6IzQwOUVGRn0uZWwtYmFkZ2VfX2NvbnRlbnQtLXN1Y2Nlc3N7YmFja2dyb3VuZC1jb2xvcjojNjdDMjNBfS5lbC1iYWRnZV9fY29udGVudC0td2FybmluZ3tiYWNrZ3JvdW5kLWNvbG9yOiNFNkEyM0N9LmVsLWJhZGdlX19jb250ZW50LS1pbmZve2JhY2tncm91bmQtY29sb3I6IzkwOTM5OX0uZWwtYmFkZ2VfX2NvbnRlbnQtLWRhbmdlcntiYWNrZ3JvdW5kLWNvbG9yOiNGNTZDNkN9LmVsLWNhcmR7Ym9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyOjFweCBzb2xpZCAjRUJFRUY1O2JhY2tncm91bmQtY29sb3I6I0ZGRjtvdmVyZmxvdzpoaWRkZW47Y29sb3I6IzMwMzEzMzt0cmFuc2l0aW9uOi4zc30uZWwtY2FyZC5pcy1hbHdheXMtc2hhZG93LC5lbC1jYXJkLmlzLWhvdmVyLXNoYWRvdzpmb2N1cywuZWwtY2FyZC5pcy1ob3Zlci1zaGFkb3c6aG92ZXJ7Ym94LXNoYWRvdzowIDJweCAxMnB4IDAgcmdiYSgwLDAsMCwuMSl9LmVsLWNhcmRfX2hlYWRlcntwYWRkaW5nOjE4cHggMjBweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjRUJFRUY1O2JveC1zaXppbmc6Ym9yZGVyLWJveH0uZWwtY2FyZF9fYm9keSwuZWwtbWFpbntwYWRkaW5nOjIwcHh9LmVsLXJhdGV7aGVpZ2h0OjIwcHg7bGluZS1oZWlnaHQ6MX0uZWwtcmF0ZTphY3RpdmUsLmVsLXJhdGU6Zm9jdXN7b3V0bGluZS13aWR0aDowfS5lbC1yYXRlX19pdGVte2ZvbnQtc2l6ZTowO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uZWwtcmF0ZV9faWNvbntmb250LXNpemU6MThweDttYXJnaW4tcmlnaHQ6NnB4O2NvbG9yOiNDMEM0Q0M7dHJhbnNpdGlvbjouM3N9LmVsLXJhdGVfX2RlY2ltYWwsLmVsLXJhdGVfX2ljb24gLnBhdGgye3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MH0uZWwtcmF0ZV9faWNvbi5ob3Zlcnt0cmFuc2Zvcm06c2NhbGUoMS4xNSl9LmVsLXJhdGVfX2RlY2ltYWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7b3ZlcmZsb3c6aGlkZGVufS5lbC1zdGVwLmlzLXZlcnRpY2FsLC5lbC1zdGVwc3tkaXNwbGF5Oi1tcy1mbGV4Ym94fS5lbC1yYXRlX190ZXh0e2ZvbnQtc2l6ZToxNHB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uZWwtc3RlcHN7ZGlzcGxheTpmbGV4fS5lbC1zdGVwcy0tc2ltcGxle3BhZGRpbmc6MTNweCA4JTtib3JkZXItcmFkaXVzOjRweDtiYWNrZ3JvdW5kOiNGNUY3RkF9LmVsLXN0ZXBzLS1ob3Jpem9udGFse3doaXRlLXNwYWNlOm5vd3JhcH0uZWwtc3RlcHMtLXZlcnRpY2Fse2hlaWdodDoxMDAlO2ZsZXgtZmxvdzpjb2x1bW59LmVsLXN0ZXB7cG9zaXRpb246cmVsYXRpdmU7ZmxleC1zaHJpbms6MX0uZWwtc3RlcDpsYXN0LW9mLXR5cGUgLmVsLXN0ZXBfX2xpbmV7ZGlzcGxheTpub25lfS5lbC1zdGVwOmxhc3Qtb2YtdHlwZS5pcy1mbGV4e2ZsZXgtYmFzaXM6YXV0byFpbXBvcnRhbnQ7ZmxleC1zaHJpbms6MDtmbGV4LWdyb3c6MH0uZWwtc3RlcDpsYXN0LW9mLXR5cGUgLmVsLXN0ZXBfX2Rlc2NyaXB0aW9uLC5lbC1zdGVwOmxhc3Qtb2YtdHlwZSAuZWwtc3RlcF9fbWFpbntwYWRkaW5nLXJpZ2h0OjB9LmVsLXN0ZXBfX2hlYWR7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6MTAwJX0uZWwtc3RlcF9faGVhZC5pcy1wcm9jZXNze2NvbG9yOiMzMDMxMzM7Ym9yZGVyLWNvbG9yOiMzMDMxMzN9LmVsLXN0ZXBfX2hlYWQuaXMtd2FpdHtjb2xvcjojQzBDNENDO2JvcmRlci1jb2xvcjojQzBDNENDfS5lbC1zdGVwX19oZWFkLmlzLXN1Y2Nlc3N7Y29sb3I6IzY3QzIzQTtib3JkZXItY29sb3I6IzY3QzIzQX0uZWwtc3RlcF9faGVhZC5pcy1lcnJvcntjb2xvcjojRjU2QzZDO2JvcmRlci1jb2xvcjojRjU2QzZDfS5lbC1zdGVwX19oZWFkLmlzLWZpbmlzaHtjb2xvcjojNDA5RUZGO2JvcmRlci1jb2xvcjojNDA5RUZGfS5lbC1zdGVwX19pY29ue3Bvc2l0aW9uOnJlbGF0aXZlO3otaW5kZXg6MTtkaXNwbGF5OmlubGluZS1mbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO3dpZHRoOjI0cHg7aGVpZ2h0OjI0cHg7Zm9udC1zaXplOjE0cHg7Ym94LXNpemluZzpib3JkZXItYm94O2JhY2tncm91bmQ6I0ZGRjt0cmFuc2l0aW9uOi4xNXMgZWFzZS1vdXR9LmVsLXN0ZXAuaXMtaG9yaXpvbnRhbCwuZWwtc3RlcF9faWNvbi1pbm5lcntkaXNwbGF5OmlubGluZS1ibG9ja30uZWwtc3RlcF9faWNvbi5pcy10ZXh0e2JvcmRlci1yYWRpdXM6NTAlO2JvcmRlcjoycHggc29saWQ7Ym9yZGVyLWNvbG9yOmluaGVyaXR9LmVsLXN0ZXBfX2ljb24uaXMtaWNvbnt3aWR0aDo0MHB4fS5lbC1zdGVwX19pY29uLWlubmVyey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt0ZXh0LWFsaWduOmNlbnRlcjtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTtjb2xvcjppbmhlcml0fS5lbC1zdGVwX19pY29uLWlubmVyW2NsYXNzKj1lbC1pY29uXTpub3QoLmlzLXN0YXR1cyl7Zm9udC1zaXplOjI1cHg7Zm9udC13ZWlnaHQ6NDAwfS5lbC1zdGVwX19pY29uLWlubmVyLmlzLXN0YXR1c3t0cmFuc2Zvcm06dHJhbnNsYXRlWSgxcHgpfS5lbC1zdGVwX19saW5le3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1jb2xvcjppbmhlcml0O2JhY2tncm91bmQtY29sb3I6I0MwQzRDQ30uZWwtc3RlcF9fbGluZS1pbm5lcntkaXNwbGF5OmJsb2NrO2JvcmRlci13aWR0aDoxcHg7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci1jb2xvcjppbmhlcml0O3RyYW5zaXRpb246LjE1cyBlYXNlLW91dDtib3gtc2l6aW5nOmJvcmRlci1ib3g7d2lkdGg6MDtoZWlnaHQ6MH0uZWwtc3RlcF9fbWFpbnt3aGl0ZS1zcGFjZTpub3JtYWw7dGV4dC1hbGlnbjpsZWZ0fS5lbC1zdGVwX190aXRsZXtmb250LXNpemU6MTZweDtsaW5lLWhlaWdodDozOHB4fS5lbC1zdGVwX190aXRsZS5pcy1wcm9jZXNze2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjojMzAzMTMzfS5lbC1zdGVwX190aXRsZS5pcy13YWl0e2NvbG9yOiNDMEM0Q0N9LmVsLXN0ZXBfX3RpdGxlLmlzLXN1Y2Nlc3N7Y29sb3I6IzY3QzIzQX0uZWwtc3RlcF9fdGl0bGUuaXMtZXJyb3J7Y29sb3I6I0Y1NkM2Q30uZWwtc3RlcF9fdGl0bGUuaXMtZmluaXNoe2NvbG9yOiM0MDlFRkZ9LmVsLXN0ZXBfX2Rlc2NyaXB0aW9ue3BhZGRpbmctcmlnaHQ6MTAlO21hcmdpbi10b3A6LTVweDtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoyMHB4O2ZvbnQtd2VpZ2h0OjQwMH0uZWwtc3RlcF9fZGVzY3JpcHRpb24uaXMtcHJvY2Vzc3tjb2xvcjojMzAzMTMzfS5lbC1zdGVwX19kZXNjcmlwdGlvbi5pcy13YWl0e2NvbG9yOiNDMEM0Q0N9LmVsLXN0ZXBfX2Rlc2NyaXB0aW9uLmlzLXN1Y2Nlc3N7Y29sb3I6IzY3QzIzQX0uZWwtc3RlcF9fZGVzY3JpcHRpb24uaXMtZXJyb3J7Y29sb3I6I0Y1NkM2Q30uZWwtc3RlcF9fZGVzY3JpcHRpb24uaXMtZmluaXNoe2NvbG9yOiM0MDlFRkZ9LmVsLXN0ZXAuaXMtaG9yaXpvbnRhbCAuZWwtc3RlcF9fbGluZXtoZWlnaHQ6MnB4O3RvcDoxMXB4O2xlZnQ6MDtyaWdodDowfS5lbC1zdGVwLmlzLXZlcnRpY2Fse2Rpc3BsYXk6ZmxleH0uZWwtc3RlcC5pcy12ZXJ0aWNhbCAuZWwtc3RlcF9faGVhZHtmbGV4LWdyb3c6MDt3aWR0aDoyNHB4fS5lbC1zdGVwLmlzLXZlcnRpY2FsIC5lbC1zdGVwX19tYWlue3BhZGRpbmctbGVmdDoxMHB4O2ZsZXgtZ3JvdzoxfS5lbC1zdGVwLmlzLXZlcnRpY2FsIC5lbC1zdGVwX190aXRsZXtsaW5lLWhlaWdodDoyNHB4O3BhZGRpbmctYm90dG9tOjhweH0uZWwtc3RlcC5pcy12ZXJ0aWNhbCAuZWwtc3RlcF9fbGluZXt3aWR0aDoycHg7dG9wOjA7Ym90dG9tOjA7bGVmdDoxMXB4fS5lbC1zdGVwLmlzLXZlcnRpY2FsIC5lbC1zdGVwX19pY29uLmlzLWljb257d2lkdGg6MjRweH0uZWwtc3RlcC5pcy1jZW50ZXIgLmVsLXN0ZXBfX2hlYWQsLmVsLXN0ZXAuaXMtY2VudGVyIC5lbC1zdGVwX19tYWlue3RleHQtYWxpZ246Y2VudGVyfS5lbC1zdGVwLmlzLWNlbnRlciAuZWwtc3RlcF9fZGVzY3JpcHRpb257cGFkZGluZy1sZWZ0OjIwJTtwYWRkaW5nLXJpZ2h0OjIwJX0uZWwtc3RlcC5pcy1jZW50ZXIgLmVsLXN0ZXBfX2xpbmV7bGVmdDo1MCU7cmlnaHQ6LTUwJX0uZWwtc3RlcC5pcy1zaW1wbGV7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0uZWwtc3RlcC5pcy1zaW1wbGUgLmVsLXN0ZXBfX2hlYWR7d2lkdGg6YXV0bztmb250LXNpemU6MDtwYWRkaW5nLXJpZ2h0OjEwcHh9LmVsLXN0ZXAuaXMtc2ltcGxlIC5lbC1zdGVwX19pY29ue2JhY2tncm91bmQ6MCAwO3dpZHRoOjE2cHg7aGVpZ2h0OjE2cHg7Zm9udC1zaXplOjEycHh9LmVsLXN0ZXAuaXMtc2ltcGxlIC5lbC1zdGVwX19pY29uLWlubmVyW2NsYXNzKj1lbC1pY29uXTpub3QoLmlzLXN0YXR1cyl7Zm9udC1zaXplOjE4cHh9LmVsLXN0ZXAuaXMtc2ltcGxlIC5lbC1zdGVwX19pY29uLWlubmVyLmlzLXN0YXR1c3t0cmFuc2Zvcm06c2NhbGUoLjgpIHRyYW5zbGF0ZVkoMXB4KX0uZWwtc3RlcC5pcy1zaW1wbGUgLmVsLXN0ZXBfX21haW57cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOnN0cmV0Y2g7ZmxleC1ncm93OjF9LmVsLXN0ZXAuaXMtc2ltcGxlIC5lbC1zdGVwX190aXRsZXtmb250LXNpemU6MTZweDtsaW5lLWhlaWdodDoyMHB4fS5lbC1zdGVwLmlzLXNpbXBsZTpub3QoOmxhc3Qtb2YtdHlwZSkgLmVsLXN0ZXBfX3RpdGxle21heC13aWR0aDo1MCU7d29yZC1icmVhazpicmVhay1hbGx9LmVsLXN0ZXAuaXMtc2ltcGxlIC5lbC1zdGVwX19hcnJvd3tmbGV4LWdyb3c6MTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9LmVsLXN0ZXAuaXMtc2ltcGxlIC5lbC1zdGVwX19hcnJvdzo6YWZ0ZXIsLmVsLXN0ZXAuaXMtc2ltcGxlIC5lbC1zdGVwX19hcnJvdzo6YmVmb3Jle2NvbnRlbnQ6Jyc7ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246YWJzb2x1dGU7aGVpZ2h0OjE1cHg7d2lkdGg6MXB4O2JhY2tncm91bmQ6I0MwQzRDQ30uZWwtc3RlcC5pcy1zaW1wbGUgLmVsLXN0ZXBfX2Fycm93OjpiZWZvcmV7dHJhbnNmb3JtOnJvdGF0ZSgtNDVkZWcpIHRyYW5zbGF0ZVkoLTRweCk7dHJhbnNmb3JtLW9yaWdpbjowIDB9LmVsLXN0ZXAuaXMtc2ltcGxlIC5lbC1zdGVwX19hcnJvdzo6YWZ0ZXJ7dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZykgdHJhbnNsYXRlWSg0cHgpO3RyYW5zZm9ybS1vcmlnaW46MTAwJSAxMDAlfS5lbC1zdGVwLmlzLXNpbXBsZTpsYXN0LW9mLXR5cGUgLmVsLXN0ZXBfX2Fycm93e2Rpc3BsYXk6bm9uZX0uZWwtY2Fyb3VzZWx7cG9zaXRpb246cmVsYXRpdmV9LmVsLWNhcm91c2VsLS1ob3Jpem9udGFse292ZXJmbG93LXg6aGlkZGVufS5lbC1jYXJvdXNlbC0tdmVydGljYWx7b3ZlcmZsb3cteTpoaWRkZW59LmVsLWNhcm91c2VsX19jb250YWluZXJ7cG9zaXRpb246cmVsYXRpdmU7aGVpZ2h0OjMwMHB4fS5lbC1jYXJvdXNlbF9fYXJyb3d7Ym9yZGVyOm5vbmU7b3V0bGluZTowO3BhZGRpbmc6MDttYXJnaW46MDtoZWlnaHQ6MzZweDt3aWR0aDozNnB4O2N1cnNvcjpwb2ludGVyO3RyYW5zaXRpb246LjNzO2JvcmRlci1yYWRpdXM6NTAlO2JhY2tncm91bmQtY29sb3I6cmdiYSgzMSw0NSw2MSwuMTEpO2NvbG9yOiNGRkY7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTt6LWluZGV4OjEwO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC01MCUpO3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtc2l6ZToxMnB4fS5lbC1jYXJvdXNlbF9fYXJyb3ctLWxlZnR7bGVmdDoxNnB4fS5lbC1jYXJvdXNlbF9fYXJyb3c6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDMxLDQ1LDYxLC4yMyl9LmVsLWNhcm91c2VsX19hcnJvdyBpe2N1cnNvcjpwb2ludGVyfS5lbC1jYXJvdXNlbF9faW5kaWNhdG9yc3twb3NpdGlvbjphYnNvbHV0ZTtsaXN0LXN0eWxlOm5vbmU7bWFyZ2luOjA7cGFkZGluZzowO3otaW5kZXg6Mn0uZWwtY2Fyb3VzZWxfX2luZGljYXRvcnMtLWhvcml6b250YWx7Ym90dG9tOjA7bGVmdDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTUwJSl9LmVsLWNhcm91c2VsX19pbmRpY2F0b3JzLS12ZXJ0aWNhbHtyaWdodDowO3RvcDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSl9LmVsLWNhcm91c2VsX19pbmRpY2F0b3JzLS1vdXRzaWRle2JvdHRvbToyNnB4O3RleHQtYWxpZ246Y2VudGVyO3Bvc2l0aW9uOnN0YXRpYzt0cmFuc2Zvcm06bm9uZX0uZWwtY2Fyb3VzZWxfX2luZGljYXRvcnMtLW91dHNpZGUgLmVsLWNhcm91c2VsX19pbmRpY2F0b3I6aG92ZXIgYnV0dG9ue29wYWNpdHk6LjY0fS5lbC1jYXJvdXNlbF9faW5kaWNhdG9ycy0tb3V0c2lkZSBidXR0b257YmFja2dyb3VuZC1jb2xvcjojQzBDNENDO29wYWNpdHk6LjI0fS5lbC1jYXJvdXNlbF9faW5kaWNhdG9ycy0tbGFiZWxze2xlZnQ6MDtyaWdodDowO3RyYW5zZm9ybTpub25lO3RleHQtYWxpZ246Y2VudGVyfS5lbC1jYXJvdXNlbF9faW5kaWNhdG9ycy0tbGFiZWxzIC5lbC1jYXJvdXNlbF9fYnV0dG9ue2hlaWdodDphdXRvO3dpZHRoOmF1dG87cGFkZGluZzoycHggMThweDtmb250LXNpemU6MTJweH0uZWwtY2Fyb3VzZWxfX2luZGljYXRvcnMtLWxhYmVscyAuZWwtY2Fyb3VzZWxfX2luZGljYXRvcntwYWRkaW5nOjZweCA0cHh9LmVsLWNhcm91c2VsX19pbmRpY2F0b3J7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtjdXJzb3I6cG9pbnRlcn0uZWwtY2Fyb3VzZWxfX2luZGljYXRvcjpob3ZlciBidXR0b257b3BhY2l0eTouNzJ9LmVsLWNhcm91c2VsX19pbmRpY2F0b3ItLWhvcml6b250YWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7cGFkZGluZzoxMnB4IDRweH0uZWwtY2Fyb3VzZWxfX2luZGljYXRvci0tdmVydGljYWx7cGFkZGluZzo0cHggMTJweH0uZWwtY2Fyb3VzZWxfX2luZGljYXRvci0tdmVydGljYWwgLmVsLWNhcm91c2VsX19idXR0b257d2lkdGg6MnB4O2hlaWdodDoxNXB4fS5lbC1jYXJvdXNlbF9faW5kaWNhdG9yLmlzLWFjdGl2ZSBidXR0b257b3BhY2l0eToxfS5lbC1jYXJvdXNlbF9fYnV0dG9ue2Rpc3BsYXk6YmxvY2s7b3BhY2l0eTouNDg7d2lkdGg6MzBweDtoZWlnaHQ6MnB4O2JhY2tncm91bmQtY29sb3I6I0ZGRjtib3JkZXI6bm9uZTtvdXRsaW5lOjA7cGFkZGluZzowO21hcmdpbjowO2N1cnNvcjpwb2ludGVyO3RyYW5zaXRpb246LjNzfS5lbC1jYXJvdXNlbF9faXRlbSwuZWwtY2Fyb3VzZWxfX21hc2t7aGVpZ2h0OjEwMCU7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowfS5jYXJvdXNlbC1hcnJvdy1sZWZ0LWVudGVyLC5jYXJvdXNlbC1hcnJvdy1sZWZ0LWxlYXZlLWFjdGl2ZXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKSB0cmFuc2xhdGVYKC0xMHB4KTtvcGFjaXR5OjB9LmNhcm91c2VsLWFycm93LXJpZ2h0LWVudGVyLC5jYXJvdXNlbC1hcnJvdy1yaWdodC1sZWF2ZS1hY3RpdmV7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSkgdHJhbnNsYXRlWCgxMHB4KTtvcGFjaXR5OjB9LmVsLWNhcm91c2VsX19pdGVte3dpZHRoOjEwMCU7ZGlzcGxheTppbmxpbmUtYmxvY2s7b3ZlcmZsb3c6aGlkZGVuO3otaW5kZXg6MH0uZWwtY2Fyb3VzZWxfX2l0ZW0uaXMtYWN0aXZle3otaW5kZXg6Mn0uZWwtY2Fyb3VzZWxfX2l0ZW0uaXMtYW5pbWF0aW5ne3RyYW5zaXRpb246dHJhbnNmb3JtIC40cyBlYXNlLWluLW91dH0uZWwtY2Fyb3VzZWxfX2l0ZW0tLWNhcmR7d2lkdGg6NTAlO3RyYW5zaXRpb246dHJhbnNmb3JtIC40cyBlYXNlLWluLW91dH0uZWwtY2Fyb3VzZWxfX2l0ZW0tLWNhcmQuaXMtaW4tc3RhZ2V7Y3Vyc29yOnBvaW50ZXI7ei1pbmRleDoxfS5lbC1jYXJvdXNlbF9faXRlbS0tY2FyZC5pcy1pbi1zdGFnZS5pcy1ob3ZlciAuZWwtY2Fyb3VzZWxfX21hc2ssLmVsLWNhcm91c2VsX19pdGVtLS1jYXJkLmlzLWluLXN0YWdlOmhvdmVyIC5lbC1jYXJvdXNlbF9fbWFza3tvcGFjaXR5Oi4xMn0uZWwtY2Fyb3VzZWxfX2l0ZW0tLWNhcmQuaXMtYWN0aXZle3otaW5kZXg6Mn0uZWwtY2Fyb3VzZWxfX21hc2t7d2lkdGg6MTAwJTtiYWNrZ3JvdW5kLWNvbG9yOiNGRkY7b3BhY2l0eTouMjQ7dHJhbnNpdGlvbjouMnN9LmZhZGUtaW4tbGluZWFyLWVudGVyLWFjdGl2ZSwuZmFkZS1pbi1saW5lYXItbGVhdmUtYWN0aXZle3RyYW5zaXRpb246b3BhY2l0eSAuMnMgbGluZWFyfS5mYWRlLWluLWxpbmVhci1lbnRlciwuZmFkZS1pbi1saW5lYXItbGVhdmUsLmZhZGUtaW4tbGluZWFyLWxlYXZlLWFjdGl2ZXtvcGFjaXR5OjB9LmVsLWZhZGUtaW4tbGluZWFyLWVudGVyLWFjdGl2ZSwuZWwtZmFkZS1pbi1saW5lYXItbGVhdmUtYWN0aXZle3RyYW5zaXRpb246b3BhY2l0eSAuMnMgbGluZWFyfS5lbC1mYWRlLWluLWxpbmVhci1lbnRlciwuZWwtZmFkZS1pbi1saW5lYXItbGVhdmUsLmVsLWZhZGUtaW4tbGluZWFyLWxlYXZlLWFjdGl2ZXtvcGFjaXR5OjB9LmVsLWZhZGUtaW4tZW50ZXItYWN0aXZlLC5lbC1mYWRlLWluLWxlYXZlLWFjdGl2ZXt0cmFuc2l0aW9uOmFsbCAuM3MgY3ViaWMtYmV6aWVyKC41NSwwLC4xLDEpfS5lbC1mYWRlLWluLWVudGVyLC5lbC1mYWRlLWluLWxlYXZlLWFjdGl2ZXtvcGFjaXR5OjB9LmVsLXpvb20taW4tY2VudGVyLWVudGVyLWFjdGl2ZSwuZWwtem9vbS1pbi1jZW50ZXItbGVhdmUtYWN0aXZle3RyYW5zaXRpb246YWxsIC4zcyBjdWJpYy1iZXppZXIoLjU1LDAsLjEsMSl9LmVsLXpvb20taW4tY2VudGVyLWVudGVyLC5lbC16b29tLWluLWNlbnRlci1sZWF2ZS1hY3RpdmV7b3BhY2l0eTowO3RyYW5zZm9ybTpzY2FsZVgoMCl9LmVsLXpvb20taW4tdG9wLWVudGVyLWFjdGl2ZSwuZWwtem9vbS1pbi10b3AtbGVhdmUtYWN0aXZle29wYWNpdHk6MTt0cmFuc2Zvcm06c2NhbGVZKDEpO3RyYW5zaXRpb246dHJhbnNmb3JtIC4zcyBjdWJpYy1iZXppZXIoLjIzLDEsLjMyLDEpLG9wYWNpdHkgLjNzIGN1YmljLWJlemllciguMjMsMSwuMzIsMSk7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXIgdG9wfS5lbC16b29tLWluLXRvcC1lbnRlciwuZWwtem9vbS1pbi10b3AtbGVhdmUtYWN0aXZle29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGVZKDApfS5lbC16b29tLWluLWJvdHRvbS1lbnRlci1hY3RpdmUsLmVsLXpvb20taW4tYm90dG9tLWxlYXZlLWFjdGl2ZXtvcGFjaXR5OjE7dHJhbnNmb3JtOnNjYWxlWSgxKTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuM3MgY3ViaWMtYmV6aWVyKC4yMywxLC4zMiwxKSxvcGFjaXR5IC4zcyBjdWJpYy1iZXppZXIoLjIzLDEsLjMyLDEpO3RyYW5zZm9ybS1vcmlnaW46Y2VudGVyIGJvdHRvbX0uZWwtem9vbS1pbi1ib3R0b20tZW50ZXIsLmVsLXpvb20taW4tYm90dG9tLWxlYXZlLWFjdGl2ZXtvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlWSgwKX0uZWwtem9vbS1pbi1sZWZ0LWVudGVyLWFjdGl2ZSwuZWwtem9vbS1pbi1sZWZ0LWxlYXZlLWFjdGl2ZXtvcGFjaXR5OjE7dHJhbnNmb3JtOnNjYWxlKDEsMSk7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjNzIGN1YmljLWJlemllciguMjMsMSwuMzIsMSksb3BhY2l0eSAuM3MgY3ViaWMtYmV6aWVyKC4yMywxLC4zMiwxKTt0cmFuc2Zvcm0tb3JpZ2luOnRvcCBsZWZ0fS5lbC16b29tLWluLWxlZnQtZW50ZXIsLmVsLXpvb20taW4tbGVmdC1sZWF2ZS1hY3RpdmV7b3BhY2l0eTowO3RyYW5zZm9ybTpzY2FsZSguNDUsLjQ1KX0uY29sbGFwc2UtdHJhbnNpdGlvbnt0cmFuc2l0aW9uOi4zcyBoZWlnaHQgZWFzZS1pbi1vdXQsLjNzIHBhZGRpbmctdG9wIGVhc2UtaW4tb3V0LC4zcyBwYWRkaW5nLWJvdHRvbSBlYXNlLWluLW91dH0uaG9yaXpvbnRhbC1jb2xsYXBzZS10cmFuc2l0aW9ue3RyYW5zaXRpb246LjNzIHdpZHRoIGVhc2UtaW4tb3V0LC4zcyBwYWRkaW5nLWxlZnQgZWFzZS1pbi1vdXQsLjNzIHBhZGRpbmctcmlnaHQgZWFzZS1pbi1vdXR9LmVsLWxpc3QtZW50ZXItYWN0aXZlLC5lbC1saXN0LWxlYXZlLWFjdGl2ZXt0cmFuc2l0aW9uOmFsbCAxc30uZWwtbGlzdC1lbnRlciwuZWwtbGlzdC1sZWF2ZS1hY3RpdmV7b3BhY2l0eTowO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0zMHB4KX0uZWwtb3BhY2l0eS10cmFuc2l0aW9ue3RyYW5zaXRpb246b3BhY2l0eSAuM3MgY3ViaWMtYmV6aWVyKC41NSwwLC4xLDEpfS5lbC1jb2xsYXBzZXtib3JkZXItdG9wOjFweCBzb2xpZCAjRUJFRUY1O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNFQkVFRjV9LmVsLWNvbGxhcHNlLWl0ZW0uaXMtZGlzYWJsZWQgLmVsLWNvbGxhcHNlLWl0ZW1fX2hlYWRlcntjb2xvcjojYmJiO2N1cnNvcjpub3QtYWxsb3dlZH0uZWwtY29sbGFwc2UtaXRlbV9faGVhZGVye2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7aGVpZ2h0OjQ4cHg7bGluZS1oZWlnaHQ6NDhweDtiYWNrZ3JvdW5kLWNvbG9yOiNGRkY7Y29sb3I6IzMwMzEzMztjdXJzb3I6cG9pbnRlcjtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjRUJFRUY1O2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjUwMDt0cmFuc2l0aW9uOmJvcmRlci1ib3R0b20tY29sb3IgLjNzO291dGxpbmU6MH0uZWwtY29sbGFwc2UtaXRlbV9fYXJyb3d7bWFyZ2luOjAgOHB4IDAgYXV0bzt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuM3M7Zm9udC13ZWlnaHQ6MzAwfS5lbC1jb2xsYXBzZS1pdGVtX19hcnJvdy5pcy1hY3RpdmV7dHJhbnNmb3JtOnJvdGF0ZSg5MGRlZyl9LmVsLWNvbGxhcHNlLWl0ZW1fX2hlYWRlci5mb2N1c2luZzpmb2N1czpub3QoOmhvdmVyKXtjb2xvcjojNDA5RUZGfS5lbC1jb2xsYXBzZS1pdGVtX19oZWFkZXIuaXMtYWN0aXZle2JvcmRlci1ib3R0b20tY29sb3I6dHJhbnNwYXJlbnR9LmVsLWNvbGxhcHNlLWl0ZW1fX3dyYXB7d2lsbC1jaGFuZ2U6aGVpZ2h0O2JhY2tncm91bmQtY29sb3I6I0ZGRjtvdmVyZmxvdzpoaWRkZW47Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNFQkVFRjV9LmVsLWNhc2NhZGVyX19zZWFyY2gtaW5wdXQsLmVsLWNhc2NhZGVyX190YWdzLC5lbC10YWd7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3h9LmVsLWNvbGxhcHNlLWl0ZW1fX2NvbnRlbnR7cGFkZGluZy1ib3R0b206MjVweDtmb250LXNpemU6MTNweDtjb2xvcjojMzAzMTMzO2xpbmUtaGVpZ2h0OjEuNzY5MjMwNzY5MjMwNzY5fS5lbC1jb2xsYXBzZS1pdGVtOmxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTotMXB4fS5lbC1wb3BwZXIgLnBvcHBlcl9fYXJyb3csLmVsLXBvcHBlciAucG9wcGVyX19hcnJvdzo6YWZ0ZXJ7cG9zaXRpb246YWJzb2x1dGU7ZGlzcGxheTpibG9jazt3aWR0aDowO2hlaWdodDowO2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudDtib3JkZXItc3R5bGU6c29saWR9LmVsLWNhc2NhZGVyLC5lbC10YWd7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmVsLXBvcHBlciAucG9wcGVyX19hcnJvd3tib3JkZXItd2lkdGg6NnB4O2ZpbHRlcjpkcm9wLXNoYWRvdygwIDJweCAxMnB4IHJnYmEoMCwgMCwgMCwgLjAzKSl9LmVsLXBvcHBlciAucG9wcGVyX19hcnJvdzo6YWZ0ZXJ7Y29udGVudDpcXFwiIFxcXCI7Ym9yZGVyLXdpZHRoOjZweH0uZWwtcG9wcGVyW3gtcGxhY2VtZW50Xj10b3Bde21hcmdpbi1ib3R0b206MTJweH0uZWwtcG9wcGVyW3gtcGxhY2VtZW50Xj10b3BdIC5wb3BwZXJfX2Fycm93e2JvdHRvbTotNnB4O2xlZnQ6NTAlO21hcmdpbi1yaWdodDozcHg7Ym9yZGVyLXRvcC1jb2xvcjojRUJFRUY1O2JvcmRlci1ib3R0b20td2lkdGg6MH0uZWwtcG9wcGVyW3gtcGxhY2VtZW50Xj10b3BdIC5wb3BwZXJfX2Fycm93OjphZnRlcntib3R0b206MXB4O21hcmdpbi1sZWZ0Oi02cHg7Ym9yZGVyLXRvcC1jb2xvcjojRkZGO2JvcmRlci1ib3R0b20td2lkdGg6MH0uZWwtcG9wcGVyW3gtcGxhY2VtZW50Xj1ib3R0b21de21hcmdpbi10b3A6MTJweH0uZWwtcG9wcGVyW3gtcGxhY2VtZW50Xj1ib3R0b21dIC5wb3BwZXJfX2Fycm93e3RvcDotNnB4O2xlZnQ6NTAlO21hcmdpbi1yaWdodDozcHg7Ym9yZGVyLXRvcC13aWR0aDowO2JvcmRlci1ib3R0b20tY29sb3I6I0VCRUVGNX0uZWwtcG9wcGVyW3gtcGxhY2VtZW50Xj1ib3R0b21dIC5wb3BwZXJfX2Fycm93OjphZnRlcnt0b3A6MXB4O21hcmdpbi1sZWZ0Oi02cHg7Ym9yZGVyLXRvcC13aWR0aDowO2JvcmRlci1ib3R0b20tY29sb3I6I0ZGRn0uZWwtcG9wcGVyW3gtcGxhY2VtZW50Xj1yaWdodF17bWFyZ2luLWxlZnQ6MTJweH0uZWwtcG9wcGVyW3gtcGxhY2VtZW50Xj1yaWdodF0gLnBvcHBlcl9fYXJyb3d7dG9wOjUwJTtsZWZ0Oi02cHg7bWFyZ2luLWJvdHRvbTozcHg7Ym9yZGVyLXJpZ2h0LWNvbG9yOiNFQkVFRjU7Ym9yZGVyLWxlZnQtd2lkdGg6MH0uZWwtcG9wcGVyW3gtcGxhY2VtZW50Xj1yaWdodF0gLnBvcHBlcl9fYXJyb3c6OmFmdGVye2JvdHRvbTotNnB4O2xlZnQ6MXB4O2JvcmRlci1yaWdodC1jb2xvcjojRkZGO2JvcmRlci1sZWZ0LXdpZHRoOjB9LmVsLXBvcHBlclt4LXBsYWNlbWVudF49bGVmdF17bWFyZ2luLXJpZ2h0OjEycHh9LmVsLXBvcHBlclt4LXBsYWNlbWVudF49bGVmdF0gLnBvcHBlcl9fYXJyb3d7dG9wOjUwJTtyaWdodDotNnB4O21hcmdpbi1ib3R0b206M3B4O2JvcmRlci1yaWdodC13aWR0aDowO2JvcmRlci1sZWZ0LWNvbG9yOiNFQkVFRjV9LmVsLXBvcHBlclt4LXBsYWNlbWVudF49bGVmdF0gLnBvcHBlcl9fYXJyb3c6OmFmdGVye3JpZ2h0OjFweDtib3R0b206LTZweDttYXJnaW4tbGVmdDotNnB4O2JvcmRlci1yaWdodC13aWR0aDowO2JvcmRlci1sZWZ0LWNvbG9yOiNGRkZ9LmVsLXRhZ3tiYWNrZ3JvdW5kLWNvbG9yOiNlY2Y1ZmY7Ym9yZGVyLWNvbG9yOiNkOWVjZmY7aGVpZ2h0OjMycHg7cGFkZGluZzowIDEwcHg7bGluZS1oZWlnaHQ6MzBweDtmb250LXNpemU6MTJweDtjb2xvcjojNDA5RUZGO2JvcmRlci13aWR0aDoxcHg7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci1yYWRpdXM6NHB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDt3aGl0ZS1zcGFjZTpub3dyYXB9LmVsLXRhZy5pcy1oaXR7Ym9yZGVyLWNvbG9yOiM0MDlFRkZ9LmVsLXRhZyAuZWwtdGFnX19jbG9zZXtjb2xvcjojNDA5ZWZmfS5lbC10YWcgLmVsLXRhZ19fY2xvc2U6aG92ZXJ7Y29sb3I6I0ZGRjtiYWNrZ3JvdW5kLWNvbG9yOiM0MDllZmZ9LmVsLXRhZy5lbC10YWctLWluZm97YmFja2dyb3VuZC1jb2xvcjojZjRmNGY1O2JvcmRlci1jb2xvcjojZTllOWViO2NvbG9yOiM5MDkzOTl9LmVsLXRhZy5lbC10YWctLWluZm8uaXMtaGl0e2JvcmRlci1jb2xvcjojOTA5Mzk5fS5lbC10YWcuZWwtdGFnLS1pbmZvIC5lbC10YWdfX2Nsb3Nle2NvbG9yOiM5MDkzOTl9LmVsLXRhZy5lbC10YWctLWluZm8gLmVsLXRhZ19fY2xvc2U6aG92ZXJ7Y29sb3I6I0ZGRjtiYWNrZ3JvdW5kLWNvbG9yOiM5MDkzOTl9LmVsLXRhZy5lbC10YWctLXN1Y2Nlc3N7YmFja2dyb3VuZC1jb2xvcjojZjBmOWViO2JvcmRlci1jb2xvcjojZTFmM2Q4O2NvbG9yOiM2N2MyM2F9LmVsLXRhZy5lbC10YWctLXN1Y2Nlc3MuaXMtaGl0e2JvcmRlci1jb2xvcjojNjdDMjNBfS5lbC10YWcuZWwtdGFnLS1zdWNjZXNzIC5lbC10YWdfX2Nsb3Nle2NvbG9yOiM2N2MyM2F9LmVsLXRhZy5lbC10YWctLXN1Y2Nlc3MgLmVsLXRhZ19fY2xvc2U6aG92ZXJ7Y29sb3I6I0ZGRjtiYWNrZ3JvdW5kLWNvbG9yOiM2N2MyM2F9LmVsLXRhZy5lbC10YWctLXdhcm5pbmd7YmFja2dyb3VuZC1jb2xvcjojZmRmNmVjO2JvcmRlci1jb2xvcjojZmFlY2Q4O2NvbG9yOiNlNmEyM2N9LmVsLXRhZy5lbC10YWctLXdhcm5pbmcuaXMtaGl0e2JvcmRlci1jb2xvcjojRTZBMjNDfS5lbC10YWcuZWwtdGFnLS13YXJuaW5nIC5lbC10YWdfX2Nsb3Nle2NvbG9yOiNlNmEyM2N9LmVsLXRhZy5lbC10YWctLXdhcm5pbmcgLmVsLXRhZ19fY2xvc2U6aG92ZXJ7Y29sb3I6I0ZGRjtiYWNrZ3JvdW5kLWNvbG9yOiNlNmEyM2N9LmVsLXRhZy5lbC10YWctLWRhbmdlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZWYwZjA7Ym9yZGVyLWNvbG9yOiNmZGUyZTI7Y29sb3I6I2Y1NmM2Y30uZWwtdGFnLmVsLXRhZy0tZGFuZ2VyLmlzLWhpdHtib3JkZXItY29sb3I6I0Y1NkM2Q30uZWwtdGFnLmVsLXRhZy0tZGFuZ2VyIC5lbC10YWdfX2Nsb3Nle2NvbG9yOiNmNTZjNmN9LmVsLXRhZy5lbC10YWctLWRhbmdlciAuZWwtdGFnX19jbG9zZTpob3Zlcntjb2xvcjojRkZGO2JhY2tncm91bmQtY29sb3I6I2Y1NmM2Y30uZWwtdGFnIC5lbC1pY29uLWNsb3Nle2JvcmRlci1yYWRpdXM6NTAlO3RleHQtYWxpZ246Y2VudGVyO3Bvc2l0aW9uOnJlbGF0aXZlO2N1cnNvcjpwb2ludGVyO2ZvbnQtc2l6ZToxMnB4O2hlaWdodDoxNnB4O3dpZHRoOjE2cHg7bGluZS1oZWlnaHQ6MTZweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7dG9wOi0xcHg7cmlnaHQ6LTVweH0uZWwtdGFnIC5lbC1pY29uLWNsb3NlOjpiZWZvcmV7ZGlzcGxheTpibG9ja30uZWwtdGFnLS1kYXJre2JhY2tncm91bmQtY29sb3I6IzQwOWVmZjtib3JkZXItY29sb3I6IzQwOWVmZjtjb2xvcjojZmZmfS5lbC10YWctLWRhcmsuaXMtaGl0e2JvcmRlci1jb2xvcjojNDA5RUZGfS5lbC10YWctLWRhcmsgLmVsLXRhZ19fY2xvc2V7Y29sb3I6I2ZmZn0uZWwtdGFnLS1kYXJrIC5lbC10YWdfX2Nsb3NlOmhvdmVye2NvbG9yOiNGRkY7YmFja2dyb3VuZC1jb2xvcjojNjZiMWZmfS5lbC10YWctLWRhcmsuZWwtdGFnLS1pbmZve2JhY2tncm91bmQtY29sb3I6IzkwOTM5OTtib3JkZXItY29sb3I6IzkwOTM5OTtjb2xvcjojZmZmfS5lbC10YWctLWRhcmsuZWwtdGFnLS1pbmZvLmlzLWhpdHtib3JkZXItY29sb3I6IzkwOTM5OX0uZWwtdGFnLS1kYXJrLmVsLXRhZy0taW5mbyAuZWwtdGFnX19jbG9zZXtjb2xvcjojZmZmfS5lbC10YWctLWRhcmsuZWwtdGFnLS1pbmZvIC5lbC10YWdfX2Nsb3NlOmhvdmVye2NvbG9yOiNGRkY7YmFja2dyb3VuZC1jb2xvcjojYTZhOWFkfS5lbC10YWctLWRhcmsuZWwtdGFnLS1zdWNjZXNze2JhY2tncm91bmQtY29sb3I6IzY3YzIzYTtib3JkZXItY29sb3I6IzY3YzIzYTtjb2xvcjojZmZmfS5lbC10YWctLWRhcmsuZWwtdGFnLS1zdWNjZXNzLmlzLWhpdHtib3JkZXItY29sb3I6IzY3QzIzQX0uZWwtdGFnLS1kYXJrLmVsLXRhZy0tc3VjY2VzcyAuZWwtdGFnX19jbG9zZXtjb2xvcjojZmZmfS5lbC10YWctLWRhcmsuZWwtdGFnLS1zdWNjZXNzIC5lbC10YWdfX2Nsb3NlOmhvdmVye2NvbG9yOiNGRkY7YmFja2dyb3VuZC1jb2xvcjojODVjZTYxfS5lbC10YWctLWRhcmsuZWwtdGFnLS13YXJuaW5ne2JhY2tncm91bmQtY29sb3I6I2U2YTIzYztib3JkZXItY29sb3I6I2U2YTIzYztjb2xvcjojZmZmfS5lbC10YWctLWRhcmsuZWwtdGFnLS13YXJuaW5nLmlzLWhpdHtib3JkZXItY29sb3I6I0U2QTIzQ30uZWwtdGFnLS1kYXJrLmVsLXRhZy0td2FybmluZyAuZWwtdGFnX19jbG9zZXtjb2xvcjojZmZmfS5lbC10YWctLWRhcmsuZWwtdGFnLS13YXJuaW5nIC5lbC10YWdfX2Nsb3NlOmhvdmVye2NvbG9yOiNGRkY7YmFja2dyb3VuZC1jb2xvcjojZWJiNTYzfS5lbC10YWctLWRhcmsuZWwtdGFnLS1kYW5nZXJ7YmFja2dyb3VuZC1jb2xvcjojZjU2YzZjO2JvcmRlci1jb2xvcjojZjU2YzZjO2NvbG9yOiNmZmZ9LmVsLXRhZy0tZGFyay5lbC10YWctLWRhbmdlci5pcy1oaXR7Ym9yZGVyLWNvbG9yOiNGNTZDNkN9LmVsLXRhZy0tZGFyay5lbC10YWctLWRhbmdlciAuZWwtdGFnX19jbG9zZXtjb2xvcjojZmZmfS5lbC10YWctLWRhcmsuZWwtdGFnLS1kYW5nZXIgLmVsLXRhZ19fY2xvc2U6aG92ZXJ7Y29sb3I6I0ZGRjtiYWNrZ3JvdW5kLWNvbG9yOiNmNzg5ODl9LmVsLXRhZy0tcGxhaW57YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlci1jb2xvcjojYjNkOGZmO2NvbG9yOiM0MDllZmZ9LmVsLXRhZy0tcGxhaW4uaXMtaGl0e2JvcmRlci1jb2xvcjojNDA5RUZGfS5lbC10YWctLXBsYWluIC5lbC10YWdfX2Nsb3Nle2NvbG9yOiM0MDllZmZ9LmVsLXRhZy0tcGxhaW4gLmVsLXRhZ19fY2xvc2U6aG92ZXJ7Y29sb3I6I0ZGRjtiYWNrZ3JvdW5kLWNvbG9yOiM0MDllZmZ9LmVsLXRhZy0tcGxhaW4uZWwtdGFnLS1pbmZve2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXItY29sb3I6I2QzZDRkNjtjb2xvcjojOTA5Mzk5fS5lbC10YWctLXBsYWluLmVsLXRhZy0taW5mby5pcy1oaXR7Ym9yZGVyLWNvbG9yOiM5MDkzOTl9LmVsLXRhZy0tcGxhaW4uZWwtdGFnLS1pbmZvIC5lbC10YWdfX2Nsb3Nle2NvbG9yOiM5MDkzOTl9LmVsLXRhZy0tcGxhaW4uZWwtdGFnLS1pbmZvIC5lbC10YWdfX2Nsb3NlOmhvdmVye2NvbG9yOiNGRkY7YmFja2dyb3VuZC1jb2xvcjojOTA5Mzk5fS5lbC10YWctLXBsYWluLmVsLXRhZy0tc3VjY2Vzc3tiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyLWNvbG9yOiNjMmU3YjA7Y29sb3I6IzY3YzIzYX0uZWwtdGFnLS1wbGFpbi5lbC10YWctLXN1Y2Nlc3MuaXMtaGl0e2JvcmRlci1jb2xvcjojNjdDMjNBfS5lbC10YWctLXBsYWluLmVsLXRhZy0tc3VjY2VzcyAuZWwtdGFnX19jbG9zZXtjb2xvcjojNjdjMjNhfS5lbC10YWctLXBsYWluLmVsLXRhZy0tc3VjY2VzcyAuZWwtdGFnX19jbG9zZTpob3Zlcntjb2xvcjojRkZGO2JhY2tncm91bmQtY29sb3I6IzY3YzIzYX0uZWwtdGFnLS1wbGFpbi5lbC10YWctLXdhcm5pbmd7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlci1jb2xvcjojZjVkYWIxO2NvbG9yOiNlNmEyM2N9LmVsLXRhZy0tcGxhaW4uZWwtdGFnLS13YXJuaW5nLmlzLWhpdHtib3JkZXItY29sb3I6I0U2QTIzQ30uZWwtdGFnLS1wbGFpbi5lbC10YWctLXdhcm5pbmcgLmVsLXRhZ19fY2xvc2V7Y29sb3I6I2U2YTIzY30uZWwtdGFnLS1wbGFpbi5lbC10YWctLXdhcm5pbmcgLmVsLXRhZ19fY2xvc2U6aG92ZXJ7Y29sb3I6I0ZGRjtiYWNrZ3JvdW5kLWNvbG9yOiNlNmEyM2N9LmVsLXRhZy0tcGxhaW4uZWwtdGFnLS1kYW5nZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlci1jb2xvcjojZmJjNGM0O2NvbG9yOiNmNTZjNmN9LmVsLXRhZy0tcGxhaW4uZWwtdGFnLS1kYW5nZXIuaXMtaGl0e2JvcmRlci1jb2xvcjojRjU2QzZDfS5lbC10YWctLXBsYWluLmVsLXRhZy0tZGFuZ2VyIC5lbC10YWdfX2Nsb3Nle2NvbG9yOiNmNTZjNmN9LmVsLXRhZy0tcGxhaW4uZWwtdGFnLS1kYW5nZXIgLmVsLXRhZ19fY2xvc2U6aG92ZXJ7Y29sb3I6I0ZGRjtiYWNrZ3JvdW5kLWNvbG9yOiNmNTZjNmN9LmVsLXRhZy0tbWVkaXVte2hlaWdodDoyOHB4O2xpbmUtaGVpZ2h0OjI2cHh9LmVsLXRhZy0tbWVkaXVtIC5lbC1pY29uLWNsb3Nle3RyYW5zZm9ybTpzY2FsZSguOCl9LmVsLXRhZy0tc21hbGx7aGVpZ2h0OjI0cHg7cGFkZGluZzowIDhweDtsaW5lLWhlaWdodDoyMnB4fS5lbC10YWctLXNtYWxsIC5lbC1pY29uLWNsb3Nle3RyYW5zZm9ybTpzY2FsZSguOCl9LmVsLXRhZy0tbWluaXtoZWlnaHQ6MjBweDtwYWRkaW5nOjAgNXB4O2xpbmUtaGVpZ2h0OjE5cHh9LmVsLXRhZy0tbWluaSAuZWwtaWNvbi1jbG9zZXttYXJnaW4tbGVmdDotM3B4O3RyYW5zZm9ybTpzY2FsZSguNyl9LmVsLWNhc2NhZGVye3Bvc2l0aW9uOnJlbGF0aXZlO2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjQwcHh9LmVsLWNhc2NhZGVyOm5vdCguaXMtZGlzYWJsZWQpOmhvdmVyIC5lbC1pbnB1dF9faW5uZXJ7Y3Vyc29yOnBvaW50ZXI7Ym9yZGVyLWNvbG9yOiNDMEM0Q0N9LmVsLWNhc2NhZGVyIC5lbC1pbnB1dCAuZWwtaW5wdXRfX2lubmVyOmZvY3VzLC5lbC1jYXNjYWRlciAuZWwtaW5wdXQuaXMtZm9jdXMgLmVsLWlucHV0X19pbm5lcntib3JkZXItY29sb3I6IzQwOUVGRn0uZWwtY2FzY2FkZXIgLmVsLWlucHV0e2N1cnNvcjpwb2ludGVyfS5lbC1jYXNjYWRlciAuZWwtaW5wdXQgLmVsLWlucHV0X19pbm5lcnt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS5lbC1jYXNjYWRlciAuZWwtaW5wdXQgLmVsLWljb24tYXJyb3ctZG93bnt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuM3M7Zm9udC1zaXplOjE0cHh9LmVsLWNhc2NhZGVyIC5lbC1pbnB1dCAuZWwtaWNvbi1hcnJvdy1kb3duLmlzLXJldmVyc2V7dHJhbnNmb3JtOnJvdGF0ZVooMTgwZGVnKX0uZWwtY2FzY2FkZXIgLmVsLWlucHV0IC5lbC1pY29uLWNpcmNsZS1jbG9zZTpob3Zlcntjb2xvcjojOTA5Mzk5fS5lbC1jYXNjYWRlci0tbWVkaXVte2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjM2cHh9LmVsLWNhc2NhZGVyLS1zbWFsbHtmb250LXNpemU6MTNweDtsaW5lLWhlaWdodDozMnB4fS5lbC1jYXNjYWRlci0tbWluaXtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoyOHB4fS5lbC1jYXNjYWRlci5pcy1kaXNhYmxlZCAuZWwtY2FzY2FkZXJfX2xhYmVse3otaW5kZXg6Mjtjb2xvcjojQzBDNENDfS5lbC1jYXNjYWRlcl9fZHJvcGRvd257bWFyZ2luOjVweCAwO2ZvbnQtc2l6ZToxNHB4O2JhY2tncm91bmQ6I0ZGRjtib3JkZXI6MXB4IHNvbGlkICNFNEU3RUQ7Ym9yZGVyLXJhZGl1czo0cHg7Ym94LXNoYWRvdzowIDJweCAxMnB4IDAgcmdiYSgwLDAsMCwuMSl9LmVsLWNhc2NhZGVyX190YWdze3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDtyaWdodDozMHB4O3RvcDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSk7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2xpbmUtaGVpZ2h0Om5vcm1hbDt0ZXh0LWFsaWduOmxlZnQ7Ym94LXNpemluZzpib3JkZXItYm94fS5lbC1jYXNjYWRlcl9fdGFncyAuZWwtdGFne2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO21heC13aWR0aDoxMDAlO21hcmdpbjoycHggMCAycHggNnB4O3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7YmFja2dyb3VuZDojZjBmMmY1fS5lbC1jYXNjYWRlcl9fdGFncyAuZWwtdGFnOm5vdCguaXMtaGl0KXtib3JkZXItY29sb3I6dHJhbnNwYXJlbnR9LmVsLWNhc2NhZGVyX190YWdzIC5lbC10YWc+c3BhbntmbGV4OjE7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9LmVsLWNhc2NhZGVyX190YWdzIC5lbC10YWcgLmVsLWljb24tY2xvc2V7ZmxleDpub25lO2JhY2tncm91bmQtY29sb3I6I0MwQzRDQztjb2xvcjojRkZGfS5lbC1jYXNjYWRlcl9fdGFncyAuZWwtdGFnIC5lbC1pY29uLWNsb3NlOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzkwOTM5OX0uZWwtY2FzY2FkZXJfX3N1Z2dlc3Rpb24tcGFuZWx7Ym9yZGVyLXJhZGl1czo0cHh9LmVsLWNhc2NhZGVyX19zdWdnZXN0aW9uLWxpc3R7bWF4LWhlaWdodDoyMDRweDttYXJnaW46MDtwYWRkaW5nOjZweCAwO2ZvbnQtc2l6ZToxNHB4O2NvbG9yOiM2MDYyNjY7dGV4dC1hbGlnbjpjZW50ZXJ9LmVsLWNhc2NhZGVyX19zdWdnZXN0aW9uLWl0ZW17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2FsaWduLWl0ZW1zOmNlbnRlcjtoZWlnaHQ6MzRweDtwYWRkaW5nOjAgMTVweDt0ZXh0LWFsaWduOmxlZnQ7b3V0bGluZTowO2N1cnNvcjpwb2ludGVyfS5lbC1jYXNjYWRlcl9fc3VnZ2VzdGlvbi1pdGVtOmZvY3VzLC5lbC1jYXNjYWRlcl9fc3VnZ2VzdGlvbi1pdGVtOmhvdmVye2JhY2tncm91bmQ6I0Y1RjdGQX0uZWwtY2FzY2FkZXJfX3N1Z2dlc3Rpb24taXRlbS5pcy1jaGVja2Vke2NvbG9yOiM0MDlFRkY7Zm9udC13ZWlnaHQ6NzAwfS5lbC1jYXNjYWRlcl9fc3VnZ2VzdGlvbi1pdGVtPnNwYW57bWFyZ2luLXJpZ2h0OjEwcHh9LmVsLWNhc2NhZGVyX19lbXB0eS10ZXh0e21hcmdpbjoxMHB4IDA7Y29sb3I6I0MwQzRDQ30uZWwtY2FzY2FkZXJfX3NlYXJjaC1pbnB1dHtmbGV4OjE7aGVpZ2h0OjI0cHg7bWluLXdpZHRoOjYwcHg7bWFyZ2luOjJweCAwIDJweCAxNXB4O3BhZGRpbmc6MDtjb2xvcjojNjA2MjY2O2JvcmRlcjpub25lO291dGxpbmU6MDtib3gtc2l6aW5nOmJvcmRlci1ib3h9LmVsLWNhc2NhZGVyX19zZWFyY2gtaW5wdXQ6Oi1tb3otcGxhY2Vob2xkZXJ7Y29sb3I6I0MwQzRDQ30uZWwtY2FzY2FkZXJfX3NlYXJjaC1pbnB1dDo6cGxhY2Vob2xkZXJ7Y29sb3I6I0MwQzRDQ30uZWwtY29sb3ItcHJlZGVmaW5le2Rpc3BsYXk6ZmxleDtmb250LXNpemU6MTJweDttYXJnaW4tdG9wOjhweDt3aWR0aDoyODBweH0uZWwtY29sb3ItcHJlZGVmaW5lX19jb2xvcnN7ZGlzcGxheTpmbGV4O2ZsZXg6MTtmbGV4LXdyYXA6d3JhcH0uZWwtY29sb3ItcHJlZGVmaW5lX19jb2xvci1zZWxlY3RvcnttYXJnaW46MCAwIDhweCA4cHg7d2lkdGg6MjBweDtoZWlnaHQ6MjBweDtib3JkZXItcmFkaXVzOjRweDtjdXJzb3I6cG9pbnRlcn0uZWwtY29sb3ItcHJlZGVmaW5lX19jb2xvci1zZWxlY3RvcjpudGgtY2hpbGQoMTBuKzEpe21hcmdpbi1sZWZ0OjB9LmVsLWNvbG9yLXByZWRlZmluZV9fY29sb3Itc2VsZWN0b3Iuc2VsZWN0ZWR7Ym94LXNoYWRvdzowIDAgM3B4IDJweCAjNDA5RUZGfS5lbC1jb2xvci1wcmVkZWZpbmVfX2NvbG9yLXNlbGVjdG9yPmRpdntkaXNwbGF5OmZsZXg7aGVpZ2h0OjEwMCU7Ym9yZGVyLXJhZGl1czozcHh9LmVsLWNvbG9yLXByZWRlZmluZV9fY29sb3Itc2VsZWN0b3IuaXMtYWxwaGF7YmFja2dyb3VuZC1pbWFnZTp1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBd0FBQUFNQ0FJQUFBRFpGOHV3QUFBQUdVbEVRVlFZVjJNNGd3SCtZd0NHSWFzSVV3aFQyNUJWQkFEdHpZTllySHZ2NGdBQUFBQkpSVTVFcmtKZ2dnPT0pfS5lbC1jb2xvci1odWUtc2xpZGVye3Bvc2l0aW9uOnJlbGF0aXZlO2JveC1zaXppbmc6Ym9yZGVyLWJveDt3aWR0aDoyODBweDtoZWlnaHQ6MTJweDtiYWNrZ3JvdW5kLWNvbG9yOnJlZDtwYWRkaW5nOjAgMnB4fS5lbC1jb2xvci1odWUtc2xpZGVyX19iYXJ7cG9zaXRpb246cmVsYXRpdmU7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQscmVkIDAsI2ZmMCAxNyUsIzBmMCAzMyUsIzBmZiA1MCUsIzAwZiA2NyUsI2YwZiA4MyUscmVkIDEwMCUpO2hlaWdodDoxMDAlfS5lbC1jb2xvci1odWUtc2xpZGVyX190aHVtYntwb3NpdGlvbjphYnNvbHV0ZTtjdXJzb3I6cG9pbnRlcjtib3gtc2l6aW5nOmJvcmRlci1ib3g7bGVmdDowO3RvcDowO3dpZHRoOjRweDtoZWlnaHQ6MTAwJTtib3JkZXItcmFkaXVzOjFweDtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZjBmMGYwO2JveC1zaGFkb3c6MCAwIDJweCByZ2JhKDAsMCwwLC42KTt6LWluZGV4OjF9LmVsLWNvbG9yLWh1ZS1zbGlkZXIuaXMtdmVydGljYWx7d2lkdGg6MTJweDtoZWlnaHQ6MTgwcHg7cGFkZGluZzoycHggMH0uZWwtY29sb3ItaHVlLXNsaWRlci5pcy12ZXJ0aWNhbCAuZWwtY29sb3ItaHVlLXNsaWRlcl9fYmFye2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSxyZWQgMCwjZmYwIDE3JSwjMGYwIDMzJSwjMGZmIDUwJSwjMDBmIDY3JSwjZjBmIDgzJSxyZWQgMTAwJSl9LmVsLWNvbG9yLWh1ZS1zbGlkZXIuaXMtdmVydGljYWwgLmVsLWNvbG9yLWh1ZS1zbGlkZXJfX3RodW1ie2xlZnQ6MDt0b3A6MDt3aWR0aDoxMDAlO2hlaWdodDo0cHh9LmVsLWNvbG9yLXN2cGFuZWx7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6MjgwcHg7aGVpZ2h0OjE4MHB4fS5lbC1jb2xvci1zdnBhbmVsX19ibGFjaywuZWwtY29sb3Itc3ZwYW5lbF9fd2hpdGV7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjB9LmVsLWNvbG9yLXN2cGFuZWxfX3doaXRle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCNmZmYscmdiYSgyNTUsMjU1LDI1NSwwKSl9LmVsLWNvbG9yLXN2cGFuZWxfX2JsYWNre2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHRvcCwjMDAwLHJnYmEoMCwwLDAsMCkpfS5lbC1jb2xvci1zdnBhbmVsX19jdXJzb3J7cG9zaXRpb246YWJzb2x1dGV9LmVsLWNvbG9yLXN2cGFuZWxfX2N1cnNvcj5kaXZ7Y3Vyc29yOmhlYWQ7d2lkdGg6NHB4O2hlaWdodDo0cHg7Ym94LXNoYWRvdzowIDAgMCAxLjVweCAjZmZmLGluc2V0IDAgMCAxcHggMXB4IHJnYmEoMCwwLDAsLjMpLDAgMCAxcHggMnB4IHJnYmEoMCwwLDAsLjQpO2JvcmRlci1yYWRpdXM6NTAlO3RyYW5zZm9ybTp0cmFuc2xhdGUoLTJweCwtMnB4KX0uZWwtY29sb3ItYWxwaGEtc2xpZGVye3Bvc2l0aW9uOnJlbGF0aXZlO2JveC1zaXppbmc6Ym9yZGVyLWJveDt3aWR0aDoyODBweDtoZWlnaHQ6MTJweDtiYWNrZ3JvdW5kOnVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUF3QUFBQU1DQUlBQUFEWkY4dXdBQUFBR1VsRVFWUVlWMk00Z3dIK1l3Q0dJYXNJVXdoVDI1QlZCQUR0ellOWXJIdnY0Z0FBQUFCSlJVNUVya0pnZ2c9PSl9LmVsLWNvbG9yLWFscGhhLXNsaWRlcl9fYmFye3Bvc2l0aW9uOnJlbGF0aXZlO2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LHJnYmEoMjU1LDI1NSwyNTUsMCkgMCwjZmZmIDEwMCUpO2hlaWdodDoxMDAlfS5lbC1jb2xvci1hbHBoYS1zbGlkZXJfX3RodW1ie3Bvc2l0aW9uOmFic29sdXRlO2N1cnNvcjpwb2ludGVyO2JveC1zaXppbmc6Ym9yZGVyLWJveDtsZWZ0OjA7dG9wOjA7d2lkdGg6NHB4O2hlaWdodDoxMDAlO2JvcmRlci1yYWRpdXM6MXB4O2JhY2tncm91bmQ6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNmMGYwZjA7Ym94LXNoYWRvdzowIDAgMnB4IHJnYmEoMCwwLDAsLjYpO3otaW5kZXg6MX0uZWwtY29sb3ItYWxwaGEtc2xpZGVyLmlzLXZlcnRpY2Fse3dpZHRoOjIwcHg7aGVpZ2h0OjE4MHB4fS5lbC1jb2xvci1hbHBoYS1zbGlkZXIuaXMtdmVydGljYWwgLmVsLWNvbG9yLWFscGhhLXNsaWRlcl9fYmFye2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSxyZ2JhKDI1NSwyNTUsMjU1LDApIDAsI2ZmZiAxMDAlKX0uZWwtY29sb3ItYWxwaGEtc2xpZGVyLmlzLXZlcnRpY2FsIC5lbC1jb2xvci1hbHBoYS1zbGlkZXJfX3RodW1ie2xlZnQ6MDt0b3A6MDt3aWR0aDoxMDAlO2hlaWdodDo0cHh9LmVsLWNvbG9yLWRyb3Bkb3due3dpZHRoOjMwMHB4fS5lbC1jb2xvci1kcm9wZG93bl9fbWFpbi13cmFwcGVye21hcmdpbi1ib3R0b206NnB4fS5lbC1jb2xvci1kcm9wZG93bl9fbWFpbi13cmFwcGVyOjphZnRlcntkaXNwbGF5OnRhYmxlO2NsZWFyOmJvdGh9LmVsLWNvbG9yLWRyb3Bkb3duX19idG5ze21hcmdpbi10b3A6NnB4O3RleHQtYWxpZ246cmlnaHR9LmVsLWNvbG9yLWRyb3Bkb3duX192YWx1ZXtmbG9hdDpsZWZ0O2xpbmUtaGVpZ2h0OjI2cHg7Zm9udC1zaXplOjEycHg7Y29sb3I6IzAwMDt3aWR0aDoxNjBweH0uZWwtY29sb3ItZHJvcGRvd25fX2J0bntib3JkZXI6MXB4IHNvbGlkICNkY2RjZGM7Y29sb3I6IzMzMztsaW5lLWhlaWdodDoyNHB4O2JvcmRlci1yYWRpdXM6MnB4O3BhZGRpbmc6MCAyMHB4O2N1cnNvcjpwb2ludGVyO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7b3V0bGluZTowO2ZvbnQtc2l6ZToxMnB4fS5lbC1jb2xvci1kcm9wZG93bl9fYnRuW2Rpc2FibGVkXXtjb2xvcjojY2NjO2N1cnNvcjpub3QtYWxsb3dlZH0uZWwtY29sb3ItZHJvcGRvd25fX2J0bjpob3Zlcntjb2xvcjojNDA5RUZGO2JvcmRlci1jb2xvcjojNDA5RUZGfS5lbC1jb2xvci1kcm9wZG93bl9fbGluay1idG57Y3Vyc29yOnBvaW50ZXI7Y29sb3I6IzQwOUVGRjt0ZXh0LWRlY29yYXRpb246bm9uZTtwYWRkaW5nOjE1cHg7Zm9udC1zaXplOjEycHh9LmVsLWNvbG9yLWRyb3Bkb3duX19saW5rLWJ0bjpob3Zlcntjb2xvcjp0aW50KCM0MDlFRkYsMjAlKX0uZWwtY29sb3ItcGlja2Vye2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO2xpbmUtaGVpZ2h0Om5vcm1hbDtoZWlnaHQ6NDBweH0uZWwtY29sb3ItcGlja2VyLmlzLWRpc2FibGVkIC5lbC1jb2xvci1waWNrZXJfX3RyaWdnZXJ7Y3Vyc29yOm5vdC1hbGxvd2VkfS5lbC1jb2xvci1waWNrZXItLW1lZGl1bXtoZWlnaHQ6MzZweH0uZWwtY29sb3ItcGlja2VyLS1tZWRpdW0gLmVsLWNvbG9yLXBpY2tlcl9fdHJpZ2dlcntoZWlnaHQ6MzZweDt3aWR0aDozNnB4fS5lbC1jb2xvci1waWNrZXItLW1lZGl1bSAuZWwtY29sb3ItcGlja2VyX19tYXNre2hlaWdodDozNHB4O3dpZHRoOjM0cHh9LmVsLWNvbG9yLXBpY2tlci0tc21hbGx7aGVpZ2h0OjMycHh9LmVsLWNvbG9yLXBpY2tlci0tc21hbGwgLmVsLWNvbG9yLXBpY2tlcl9fdHJpZ2dlcntoZWlnaHQ6MzJweDt3aWR0aDozMnB4fS5lbC1jb2xvci1waWNrZXItLXNtYWxsIC5lbC1jb2xvci1waWNrZXJfX21hc2t7aGVpZ2h0OjMwcHg7d2lkdGg6MzBweH0uZWwtY29sb3ItcGlja2VyLS1zbWFsbCAuZWwtY29sb3ItcGlja2VyX19lbXB0eSwuZWwtY29sb3ItcGlja2VyLS1zbWFsbCAuZWwtY29sb3ItcGlja2VyX19pY29ue3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgtNTAlLC01MCUsMCkgc2NhbGUoLjgpfS5lbC1jb2xvci1waWNrZXItLW1pbml7aGVpZ2h0OjI4cHh9LmVsLWNvbG9yLXBpY2tlci0tbWluaSAuZWwtY29sb3ItcGlja2VyX190cmlnZ2Vye2hlaWdodDoyOHB4O3dpZHRoOjI4cHh9LmVsLWNvbG9yLXBpY2tlci0tbWluaSAuZWwtY29sb3ItcGlja2VyX19tYXNre2hlaWdodDoyNnB4O3dpZHRoOjI2cHh9LmVsLWNvbG9yLXBpY2tlci0tbWluaSAuZWwtY29sb3ItcGlja2VyX19lbXB0eSwuZWwtY29sb3ItcGlja2VyLS1taW5pIC5lbC1jb2xvci1waWNrZXJfX2ljb257dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKC01MCUsLTUwJSwwKSBzY2FsZSguOCl9LmVsLWNvbG9yLXBpY2tlcl9fbWFza3toZWlnaHQ6MzhweDt3aWR0aDozOHB4O2JvcmRlci1yYWRpdXM6NHB4O3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxcHg7bGVmdDoxcHg7ei1pbmRleDoxO2N1cnNvcjpub3QtYWxsb3dlZDtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS5lbC1jb2xvci1waWNrZXJfX3RyaWdnZXJ7ZGlzcGxheTppbmxpbmUtYmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94O2hlaWdodDo0MHB4O3dpZHRoOjQwcHg7cGFkZGluZzo0cHg7Ym9yZGVyOjFweCBzb2xpZCAjZTZlNmU2O2JvcmRlci1yYWRpdXM6NHB4O2ZvbnQtc2l6ZTowO3Bvc2l0aW9uOnJlbGF0aXZlO2N1cnNvcjpwb2ludGVyfS5lbC1jb2xvci1waWNrZXJfX2NvbG9ye3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlcjoxcHggc29saWQgIzk5OTtib3JkZXItcmFkaXVzOjJweDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3RleHQtYWxpZ246Y2VudGVyfS5lbC1jb2xvci1waWNrZXJfX2ljb24sLmVsLWlucHV0LC5lbC10ZXh0YXJlYXtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDoxMDAlfS5lbC1jb2xvci1waWNrZXJfX2NvbG9yLmlzLWFscGhhe2JhY2tncm91bmQtaW1hZ2U6dXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQXdBQUFBTUNBSUFBQURaRjh1d0FBQUFHVWxFUVZRWVYyTTRnd0grWXdDR0lhc0lVd2hUMjVCVkJBRHR6WU5Zckh2djRnQUFBQUJKUlU1RXJrSmdnZz09KX0uZWwtY29sb3ItcGlja2VyX19jb2xvci1pbm5lcntwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7dG9wOjA7cmlnaHQ6MDtib3R0b206MH0uZWwtY29sb3ItcGlja2VyX19lbXB0eXtmb250LXNpemU6MTJweDtjb2xvcjojOTk5O3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7bGVmdDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKC01MCUsLTUwJSwwKX0uZWwtY29sb3ItcGlja2VyX19pY29ue3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7bGVmdDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKC01MCUsLTUwJSwwKTtjb2xvcjojRkZGO3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtc2l6ZToxMnB4fS5lbC1pbnB1dF9fcHJlZml4LC5lbC1pbnB1dF9fc3VmZml4e3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3RleHQtYWxpZ246Y2VudGVyfS5lbC1jb2xvci1waWNrZXJfX3BhbmVse3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTA7cGFkZGluZzo2cHg7Ym94LXNpemluZzpjb250ZW50LWJveDtiYWNrZ3JvdW5kLWNvbG9yOiNGRkY7Ym9yZGVyOjFweCBzb2xpZCAjRUJFRUY1O2JvcmRlci1yYWRpdXM6NHB4O2JveC1zaGFkb3c6MCAycHggMTJweCAwIHJnYmEoMCwwLDAsLjEpfS5lbC1pbnB1dF9faW5uZXIsLmVsLXRleHRhcmVhX19pbm5lciwuZWwtdHJhbnNmZXItcGFuZWx7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3h9LmVsLXRleHRhcmVhe3Bvc2l0aW9uOnJlbGF0aXZlO3ZlcnRpY2FsLWFsaWduOmJvdHRvbTtmb250LXNpemU6MTRweH0uZWwtdGV4dGFyZWFfX2lubmVye2Rpc3BsYXk6YmxvY2s7cmVzaXplOnZlcnRpY2FsO3BhZGRpbmc6NXB4IDE1cHg7bGluZS1oZWlnaHQ6MS41O2JveC1zaXppbmc6Ym9yZGVyLWJveDt3aWR0aDoxMDAlO2ZvbnQtc2l6ZTppbmhlcml0O2NvbG9yOiM2MDYyNjY7YmFja2dyb3VuZC1jb2xvcjojRkZGO2JhY2tncm91bmQtaW1hZ2U6bm9uZTtib3JkZXI6MXB4IHNvbGlkICNEQ0RGRTY7Ym9yZGVyLXJhZGl1czo0cHg7dHJhbnNpdGlvbjpib3JkZXItY29sb3IgLjJzIGN1YmljLWJlemllciguNjQ1LC4wNDUsLjM1NSwxKX0uZWwtdGV4dGFyZWFfX2lubmVyOjotbW96LXBsYWNlaG9sZGVye2NvbG9yOiNDMEM0Q0N9LmVsLXRleHRhcmVhX19pbm5lcjo6cGxhY2Vob2xkZXJ7Y29sb3I6I0MwQzRDQ30uZWwtdGV4dGFyZWFfX2lubmVyOmhvdmVye2JvcmRlci1jb2xvcjojQzBDNENDfS5lbC10ZXh0YXJlYV9faW5uZXI6Zm9jdXN7b3V0bGluZTowO2JvcmRlci1jb2xvcjojNDA5RUZGfS5lbC10ZXh0YXJlYSAuZWwtaW5wdXRfX2NvdW50e2NvbG9yOiM5MDkzOTk7YmFja2dyb3VuZDojRkZGO3Bvc2l0aW9uOmFic29sdXRlO2ZvbnQtc2l6ZToxMnB4O2JvdHRvbTo1cHg7cmlnaHQ6MTBweH0uZWwtdGV4dGFyZWEuaXMtZGlzYWJsZWQgLmVsLXRleHRhcmVhX19pbm5lcntiYWNrZ3JvdW5kLWNvbG9yOiNGNUY3RkE7Ym9yZGVyLWNvbG9yOiNFNEU3RUQ7Y29sb3I6I0MwQzRDQztjdXJzb3I6bm90LWFsbG93ZWR9LmVsLXRleHRhcmVhLmlzLWRpc2FibGVkIC5lbC10ZXh0YXJlYV9faW5uZXI6Oi1tb3otcGxhY2Vob2xkZXJ7Y29sb3I6I0MwQzRDQ30uZWwtdGV4dGFyZWEuaXMtZGlzYWJsZWQgLmVsLXRleHRhcmVhX19pbm5lcjo6cGxhY2Vob2xkZXJ7Y29sb3I6I0MwQzRDQ30uZWwtdGV4dGFyZWEuaXMtZXhjZWVkIC5lbC10ZXh0YXJlYV9faW5uZXJ7Ym9yZGVyLWNvbG9yOiNGNTZDNkN9LmVsLXRleHRhcmVhLmlzLWV4Y2VlZCAuZWwtaW5wdXRfX2NvdW50e2NvbG9yOiNGNTZDNkN9LmVsLWlucHV0e3Bvc2l0aW9uOnJlbGF0aXZlO2ZvbnQtc2l6ZToxNHB4fS5lbC1pbnB1dDo6LXdlYmtpdC1zY3JvbGxiYXJ7ei1pbmRleDoxMTt3aWR0aDo2cHh9LmVsLWlucHV0Ojotd2Via2l0LXNjcm9sbGJhcjpob3Jpem9udGFse2hlaWdodDo2cHh9LmVsLWlucHV0Ojotd2Via2l0LXNjcm9sbGJhci10aHVtYntib3JkZXItcmFkaXVzOjVweDt3aWR0aDo2cHg7YmFja2dyb3VuZDojYjRiY2NjfS5lbC1pbnB1dDo6LXdlYmtpdC1zY3JvbGxiYXItY29ybmVye2JhY2tncm91bmQ6I2ZmZn0uZWwtaW5wdXQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNre2JhY2tncm91bmQ6I2ZmZn0uZWwtaW5wdXQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrLXBpZWNle2JhY2tncm91bmQ6I2ZmZjt3aWR0aDo2cHh9LmVsLWlucHV0IC5lbC1pbnB1dF9fY2xlYXJ7Y29sb3I6I0MwQzRDQztmb250LXNpemU6MTRweDtjdXJzb3I6cG9pbnRlcjt0cmFuc2l0aW9uOmNvbG9yIC4ycyBjdWJpYy1iZXppZXIoLjY0NSwuMDQ1LC4zNTUsMSl9LmVsLWlucHV0IC5lbC1pbnB1dF9fY2xlYXI6aG92ZXJ7Y29sb3I6IzkwOTM5OX0uZWwtaW5wdXQgLmVsLWlucHV0X19jb3VudHtoZWlnaHQ6MTAwJTtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtjb2xvcjojOTA5Mzk5O2ZvbnQtc2l6ZToxMnB4fS5lbC1pbnB1dC1ncm91cF9fYXBwZW5kIC5lbC1idXR0b24sLmVsLWlucHV0LWdyb3VwX19hcHBlbmQgLmVsLWlucHV0LC5lbC1pbnB1dC1ncm91cF9fcHJlcGVuZCAuZWwtYnV0dG9uLC5lbC1pbnB1dC1ncm91cF9fcHJlcGVuZCAuZWwtaW5wdXQsLmVsLWlucHV0X19pbm5lcntmb250LXNpemU6aW5oZXJpdH0uZWwtaW5wdXQgLmVsLWlucHV0X19jb3VudCAuZWwtaW5wdXRfX2NvdW50LWlubmVye2JhY2tncm91bmQ6I0ZGRjtsaW5lLWhlaWdodDppbml0aWFsO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6MCA1cHh9LmVsLWlucHV0X19pbm5lcnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiNGRkY7YmFja2dyb3VuZC1pbWFnZTpub25lO2JvcmRlci1yYWRpdXM6NHB4O2JvcmRlcjoxcHggc29saWQgI0RDREZFNjtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6IzYwNjI2NjtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6NDBweDtsaW5lLWhlaWdodDo0MHB4O291dGxpbmU6MDtwYWRkaW5nOjAgMTVweDt0cmFuc2l0aW9uOmJvcmRlci1jb2xvciAuMnMgY3ViaWMtYmV6aWVyKC42NDUsLjA0NSwuMzU1LDEpO3dpZHRoOjEwMCV9LmVsLWlucHV0X19pbm5lcjo6LW1zLXJldmVhbHtkaXNwbGF5Om5vbmV9LmVsLWlucHV0X19pbm5lcjo6LW1vei1wbGFjZWhvbGRlcntjb2xvcjojQzBDNENDfS5lbC1pbnB1dF9faW5uZXI6OnBsYWNlaG9sZGVye2NvbG9yOiNDMEM0Q0N9LmVsLWlucHV0X19pbm5lcjpob3Zlcntib3JkZXItY29sb3I6I0MwQzRDQ30uZWwtaW5wdXQuaXMtYWN0aXZlIC5lbC1pbnB1dF9faW5uZXIsLmVsLWlucHV0X19pbm5lcjpmb2N1c3tib3JkZXItY29sb3I6IzQwOUVGRjtvdXRsaW5lOjB9LmVsLWlucHV0X19zdWZmaXh7aGVpZ2h0OjEwMCU7cmlnaHQ6NXB4O3RyYW5zaXRpb246YWxsIC4zcztwb2ludGVyLWV2ZW50czpub25lfS5lbC1pbnB1dF9fc3VmZml4LWlubmVye3BvaW50ZXItZXZlbnRzOmFsbH0uZWwtaW5wdXRfX3ByZWZpeHtoZWlnaHQ6MTAwJTtsZWZ0OjVweDt0cmFuc2l0aW9uOmFsbCAuM3N9LmVsLWlucHV0X19pY29ue2hlaWdodDoxMDAlO3dpZHRoOjI1cHg7dGV4dC1hbGlnbjpjZW50ZXI7dHJhbnNpdGlvbjphbGwgLjNzO2xpbmUtaGVpZ2h0OjQwcHh9LmVsLWlucHV0X19pY29uOmFmdGVye2NvbnRlbnQ6Jyc7aGVpZ2h0OjEwMCU7d2lkdGg6MDtkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmVsLWlucHV0X192YWxpZGF0ZUljb257cG9pbnRlci1ldmVudHM6bm9uZX0uZWwtaW5wdXQuaXMtZGlzYWJsZWQgLmVsLWlucHV0X19pbm5lcntiYWNrZ3JvdW5kLWNvbG9yOiNGNUY3RkE7Ym9yZGVyLWNvbG9yOiNFNEU3RUQ7Y29sb3I6I0MwQzRDQztjdXJzb3I6bm90LWFsbG93ZWR9LmVsLWlucHV0LmlzLWRpc2FibGVkIC5lbC1pbnB1dF9faW5uZXI6Oi1tb3otcGxhY2Vob2xkZXJ7Y29sb3I6I0MwQzRDQ30uZWwtaW5wdXQuaXMtZGlzYWJsZWQgLmVsLWlucHV0X19pbm5lcjo6cGxhY2Vob2xkZXJ7Y29sb3I6I0MwQzRDQ30uZWwtaW5wdXQuaXMtZGlzYWJsZWQgLmVsLWlucHV0X19pY29ue2N1cnNvcjpub3QtYWxsb3dlZH0uZWwtaW1hZ2Utdmlld2VyX19idG4sLmVsLWltYWdlX19wcmV2aWV3LC5lbC1saW5rLC5lbC10cmFuc2Zlci1wYW5lbF9fZmlsdGVyIC5lbC1pY29uLWNpcmNsZS1jbG9zZXtjdXJzb3I6cG9pbnRlcn0uZWwtaW5wdXQuaXMtZXhjZWVkIC5lbC1pbnB1dF9faW5uZXJ7Ym9yZGVyLWNvbG9yOiNGNTZDNkN9LmVsLWlucHV0LmlzLWV4Y2VlZCAuZWwtaW5wdXRfX3N1ZmZpeCAuZWwtaW5wdXRfX2NvdW50e2NvbG9yOiNGNTZDNkN9LmVsLWlucHV0LS1zdWZmaXggLmVsLWlucHV0X19pbm5lcntwYWRkaW5nLXJpZ2h0OjMwcHh9LmVsLWlucHV0LS1wcmVmaXggLmVsLWlucHV0X19pbm5lcntwYWRkaW5nLWxlZnQ6MzBweH0uZWwtaW5wdXQtLW1lZGl1bXtmb250LXNpemU6MTRweH0uZWwtaW5wdXQtLW1lZGl1bSAuZWwtaW5wdXRfX2lubmVye2hlaWdodDozNnB4O2xpbmUtaGVpZ2h0OjM2cHh9LmVsLWlucHV0LS1tZWRpdW0gLmVsLWlucHV0X19pY29ue2xpbmUtaGVpZ2h0OjM2cHh9LmVsLWlucHV0LS1zbWFsbHtmb250LXNpemU6MTNweH0uZWwtaW5wdXQtLXNtYWxsIC5lbC1pbnB1dF9faW5uZXJ7aGVpZ2h0OjMycHg7bGluZS1oZWlnaHQ6MzJweH0uZWwtaW5wdXQtLXNtYWxsIC5lbC1pbnB1dF9faWNvbntsaW5lLWhlaWdodDozMnB4fS5lbC1pbnB1dC0tbWluaXtmb250LXNpemU6MTJweH0uZWwtaW5wdXQtLW1pbmkgLmVsLWlucHV0X19pbm5lcntoZWlnaHQ6MjhweDtsaW5lLWhlaWdodDoyOHB4fS5lbC1pbnB1dC0tbWluaSAuZWwtaW5wdXRfX2ljb257bGluZS1oZWlnaHQ6MjhweH0uZWwtaW5wdXQtZ3JvdXB7bGluZS1oZWlnaHQ6bm9ybWFsO2Rpc3BsYXk6aW5saW5lLXRhYmxlO3dpZHRoOjEwMCU7Ym9yZGVyLWNvbGxhcHNlOnNlcGFyYXRlO2JvcmRlci1zcGFjaW5nOjB9LmVsLWlucHV0LWdyb3VwPi5lbC1pbnB1dF9faW5uZXJ7dmVydGljYWwtYWxpZ246bWlkZGxlO2Rpc3BsYXk6dGFibGUtY2VsbH0uZWwtaW5wdXQtZ3JvdXBfX2FwcGVuZCwuZWwtaW5wdXQtZ3JvdXBfX3ByZXBlbmR7YmFja2dyb3VuZC1jb2xvcjojRjVGN0ZBO2NvbG9yOiM5MDkzOTk7dmVydGljYWwtYWxpZ246bWlkZGxlO2Rpc3BsYXk6dGFibGUtY2VsbDtwb3NpdGlvbjpyZWxhdGl2ZTtib3JkZXI6MXB4IHNvbGlkICNEQ0RGRTY7Ym9yZGVyLXJhZGl1czo0cHg7cGFkZGluZzowIDIwcHg7d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcH0uZWwtaW5wdXQtZ3JvdXAtLWFwcGVuZCAuZWwtaW5wdXRfX2lubmVyLC5lbC1pbnB1dC1ncm91cF9fcHJlcGVuZHtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czowO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjB9LmVsLWlucHV0LWdyb3VwX19hcHBlbmQ6Zm9jdXMsLmVsLWlucHV0LWdyb3VwX19wcmVwZW5kOmZvY3Vze291dGxpbmU6MH0uZWwtaW5wdXQtZ3JvdXBfX2FwcGVuZCAuZWwtYnV0dG9uLC5lbC1pbnB1dC1ncm91cF9fYXBwZW5kIC5lbC1zZWxlY3QsLmVsLWlucHV0LWdyb3VwX19wcmVwZW5kIC5lbC1idXR0b24sLmVsLWlucHV0LWdyb3VwX19wcmVwZW5kIC5lbC1zZWxlY3R7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luOi0xMHB4IC0yMHB4fS5lbC1pbnB1dC1ncm91cF9fYXBwZW5kIGJ1dHRvbi5lbC1idXR0b24sLmVsLWlucHV0LWdyb3VwX19hcHBlbmQgZGl2LmVsLXNlbGVjdCAuZWwtaW5wdXRfX2lubmVyLC5lbC1pbnB1dC1ncm91cF9fYXBwZW5kIGRpdi5lbC1zZWxlY3Q6aG92ZXIgLmVsLWlucHV0X19pbm5lciwuZWwtaW5wdXQtZ3JvdXBfX3ByZXBlbmQgYnV0dG9uLmVsLWJ1dHRvbiwuZWwtaW5wdXQtZ3JvdXBfX3ByZXBlbmQgZGl2LmVsLXNlbGVjdCAuZWwtaW5wdXRfX2lubmVyLC5lbC1pbnB1dC1ncm91cF9fcHJlcGVuZCBkaXYuZWwtc2VsZWN0OmhvdmVyIC5lbC1pbnB1dF9faW5uZXJ7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50O2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Y29sb3I6aW5oZXJpdDtib3JkZXItdG9wOjA7Ym9yZGVyLWJvdHRvbTowfS5lbC1pbnB1dC1ncm91cF9fcHJlcGVuZHtib3JkZXItcmlnaHQ6MH0uZWwtaW5wdXQtZ3JvdXBfX2FwcGVuZHtib3JkZXItbGVmdDowO2JvcmRlci10b3AtbGVmdC1yYWRpdXM6MDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjB9LmVsLWlucHV0LWdyb3VwLS1hcHBlbmQgLmVsLXNlbGVjdCAuZWwtaW5wdXQuaXMtZm9jdXMgLmVsLWlucHV0X19pbm5lciwuZWwtaW5wdXQtZ3JvdXAtLXByZXBlbmQgLmVsLXNlbGVjdCAuZWwtaW5wdXQuaXMtZm9jdXMgLmVsLWlucHV0X19pbm5lcntib3JkZXItY29sb3I6dHJhbnNwYXJlbnR9LmVsLWlucHV0LWdyb3VwLS1wcmVwZW5kIC5lbC1pbnB1dF9faW5uZXJ7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czowO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MH0uZWwtaW5wdXRfX2lubmVyOjotbXMtY2xlYXJ7ZGlzcGxheTpub25lO3dpZHRoOjA7aGVpZ2h0OjB9LmVsLXRyYW5zZmVye2ZvbnQtc2l6ZToxNHB4fS5lbC10cmFuc2Zlcl9fYnV0dG9uc3tkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7cGFkZGluZzowIDMwcHh9LmVsLXRyYW5zZmVyX19idXR0b257ZGlzcGxheTpibG9jazttYXJnaW46MCBhdXRvO3BhZGRpbmc6MTBweDtib3JkZXItcmFkaXVzOjUwJTtjb2xvcjojRkZGO2JhY2tncm91bmQtY29sb3I6IzQwOUVGRjtmb250LXNpemU6MH0uZWwtYnV0dG9uLWdyb3VwPi5lbC1idXR0b24rLmVsLWJ1dHRvbiwuZWwtdHJhbnNmZXItcGFuZWxfX2l0ZW0rLmVsLXRyYW5zZmVyLXBhbmVsX19pdGVtLC5lbC10cmFuc2Zlcl9fYnV0dG9uIFtjbGFzcyo9ZWwtaWNvbi1dK3NwYW57bWFyZ2luLWxlZnQ6MH0uZWwtZGl2aWRlcl9fdGV4dCwuZWwtaW1hZ2VfX2Vycm9yLC5lbC1saW5rLC5lbC10aW1lbGluZSwuZWwtdHJhbnNmZXJfX2J1dHRvbiBpLC5lbC10cmFuc2Zlcl9fYnV0dG9uIHNwYW57Zm9udC1zaXplOjE0cHh9LmVsLXRyYW5zZmVyX19idXR0b24uaXMtd2l0aC10ZXh0c3tib3JkZXItcmFkaXVzOjRweH0uZWwtdHJhbnNmZXJfX2J1dHRvbi5pcy1kaXNhYmxlZCwuZWwtdHJhbnNmZXJfX2J1dHRvbi5pcy1kaXNhYmxlZDpob3Zlcntib3JkZXI6MXB4IHNvbGlkICNEQ0RGRTY7YmFja2dyb3VuZC1jb2xvcjojRjVGN0ZBO2NvbG9yOiNDMEM0Q0N9LmVsLXRyYW5zZmVyX19idXR0b246Zmlyc3QtY2hpbGR7bWFyZ2luLWJvdHRvbToxMHB4fS5lbC10cmFuc2Zlcl9fYnV0dG9uOm50aC1jaGlsZCgyKXttYXJnaW46MH0uZWwtdHJhbnNmZXItcGFuZWx7Ym9yZGVyOjFweCBzb2xpZCAjRUJFRUY1O2JvcmRlci1yYWRpdXM6NHB4O292ZXJmbG93OmhpZGRlbjtiYWNrZ3JvdW5kOiNGRkY7ZGlzcGxheTppbmxpbmUtYmxvY2s7dmVydGljYWwtYWxpZ246bWlkZGxlO3dpZHRoOjIwMHB4O21heC1oZWlnaHQ6MTAwJTtib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXRpdmV9LmVsLXRyYW5zZmVyLXBhbmVsX19ib2R5e2hlaWdodDoyNDZweH0uZWwtdHJhbnNmZXItcGFuZWxfX2JvZHkuaXMtd2l0aC1mb290ZXJ7cGFkZGluZy1ib3R0b206NDBweH0uZWwtdHJhbnNmZXItcGFuZWxfX2xpc3R7bWFyZ2luOjA7cGFkZGluZzo2cHggMDtsaXN0LXN0eWxlOm5vbmU7aGVpZ2h0OjI0NnB4O292ZXJmbG93OmF1dG87Ym94LXNpemluZzpib3JkZXItYm94fS5lbC10cmFuc2Zlci1wYW5lbF9fbGlzdC5pcy1maWx0ZXJhYmxle2hlaWdodDoxOTRweDtwYWRkaW5nLXRvcDowfS5lbC10cmFuc2Zlci1wYW5lbF9faXRlbXtoZWlnaHQ6MzBweDtsaW5lLWhlaWdodDozMHB4O3BhZGRpbmctbGVmdDoxNXB4O2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fS5lbC10cmFuc2Zlci1wYW5lbF9faXRlbS5lbC1jaGVja2JveHtjb2xvcjojNjA2MjY2fS5lbC10cmFuc2Zlci1wYW5lbF9faXRlbTpob3Zlcntjb2xvcjojNDA5RUZGfS5lbC10cmFuc2Zlci1wYW5lbF9faXRlbS5lbC1jaGVja2JveCAuZWwtY2hlY2tib3hfX2xhYmVse3dpZHRoOjEwMCU7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmctbGVmdDoyNHB4O2xpbmUtaGVpZ2h0OjMwcHh9LmVsLXRyYW5zZmVyLXBhbmVsX19pdGVtIC5lbC1jaGVja2JveF9faW5wdXR7cG9zaXRpb246YWJzb2x1dGU7dG9wOjhweH0uZWwtdHJhbnNmZXItcGFuZWxfX2ZpbHRlcnt0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW46MTVweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpibG9jazt3aWR0aDphdXRvfS5lbC10cmFuc2Zlci1wYW5lbF9fZmlsdGVyIC5lbC1pbnB1dF9faW5uZXJ7aGVpZ2h0OjMycHg7d2lkdGg6MTAwJTtmb250LXNpemU6MTJweDtkaXNwbGF5OmlubGluZS1ibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym9yZGVyLXJhZGl1czoxNnB4O3BhZGRpbmctcmlnaHQ6MTBweDtwYWRkaW5nLWxlZnQ6MzBweH0uZWwtdHJhbnNmZXItcGFuZWxfX2ZpbHRlciAuZWwtaW5wdXRfX2ljb257bWFyZ2luLWxlZnQ6NXB4fS5lbC10cmFuc2Zlci1wYW5lbCAuZWwtdHJhbnNmZXItcGFuZWxfX2hlYWRlcntoZWlnaHQ6NDBweDtsaW5lLWhlaWdodDo0MHB4O2JhY2tncm91bmQ6I0Y1RjdGQTttYXJnaW46MDtwYWRkaW5nLWxlZnQ6MTVweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjRUJFRUY1O2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjojMDAwfS5lbC1jb250YWluZXIsLmVsLWhlYWRlcnstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveH0uZWwtdHJhbnNmZXItcGFuZWwgLmVsLXRyYW5zZmVyLXBhbmVsX19oZWFkZXIgLmVsLWNoZWNrYm94e2Rpc3BsYXk6YmxvY2s7bGluZS1oZWlnaHQ6NDBweH0uZWwtdHJhbnNmZXItcGFuZWwgLmVsLXRyYW5zZmVyLXBhbmVsX19oZWFkZXIgLmVsLWNoZWNrYm94IC5lbC1jaGVja2JveF9fbGFiZWx7Zm9udC1zaXplOjE2cHg7Y29sb3I6IzMwMzEzMztmb250LXdlaWdodDo0MDB9LmVsLXRyYW5zZmVyLXBhbmVsIC5lbC10cmFuc2Zlci1wYW5lbF9faGVhZGVyIC5lbC1jaGVja2JveCAuZWwtY2hlY2tib3hfX2xhYmVsIHNwYW57cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MTVweDtjb2xvcjojOTA5Mzk5O2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjQwMH0uZWwtdHJhbnNmZXItcGFuZWwgLmVsLXRyYW5zZmVyLXBhbmVsX19mb290ZXJ7aGVpZ2h0OjQwcHg7YmFja2dyb3VuZDojRkZGO21hcmdpbjowO3BhZGRpbmc6MDtib3JkZXItdG9wOjFweCBzb2xpZCAjRUJFRUY1O3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTowO2xlZnQ6MDt3aWR0aDoxMDAlO3otaW5kZXg6MX0uZWwtdHJhbnNmZXItcGFuZWwgLmVsLXRyYW5zZmVyLXBhbmVsX19mb290ZXI6OmFmdGVye2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxMDAlO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uZWwtY29udGFpbmVyLC5lbC10aW1lbGluZS1pdGVtX19ub2Rle2Rpc3BsYXk6LW1zLWZsZXhib3h9LmVsLXRyYW5zZmVyLXBhbmVsIC5lbC10cmFuc2Zlci1wYW5lbF9fZm9vdGVyIC5lbC1jaGVja2JveHtwYWRkaW5nLWxlZnQ6MjBweDtjb2xvcjojNjA2MjY2fS5lbC10cmFuc2Zlci1wYW5lbCAuZWwtdHJhbnNmZXItcGFuZWxfX2VtcHR5e21hcmdpbjowO2hlaWdodDozMHB4O2xpbmUtaGVpZ2h0OjMwcHg7cGFkZGluZzo2cHggMTVweCAwO2NvbG9yOiM5MDkzOTk7dGV4dC1hbGlnbjpjZW50ZXJ9LmVsLXRyYW5zZmVyLXBhbmVsIC5lbC1jaGVja2JveF9fbGFiZWx7cGFkZGluZy1sZWZ0OjhweH0uZWwtdHJhbnNmZXItcGFuZWwgLmVsLWNoZWNrYm94X19pbm5lcntoZWlnaHQ6MTRweDt3aWR0aDoxNHB4O2JvcmRlci1yYWRpdXM6M3B4fS5lbC10cmFuc2Zlci1wYW5lbCAuZWwtY2hlY2tib3hfX2lubmVyOjphZnRlcntoZWlnaHQ6NnB4O3dpZHRoOjNweDtsZWZ0OjRweH0uZWwtY29udGFpbmVye2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7ZmxleDoxO2ZsZXgtYmFzaXM6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7bWluLXdpZHRoOjB9LmVsLWNvbnRhaW5lci5pcy12ZXJ0aWNhbCwuZWwtZHJhd2VyLC5lbC1lbXB0eSwuZWwtcmVzdWx0ey13ZWJraXQtYm94LW9yaWVudDp2ZXJ0aWNhbH0uZWwtY29udGFpbmVyLmlzLXZlcnRpY2Fse2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0uZWwtaGVhZGVye3BhZGRpbmc6MCAyMHB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtmbGV4LXNocmluazowfS5lbC1hc2lkZXtvdmVyZmxvdzphdXRvO2JveC1zaXppbmc6Ym9yZGVyLWJveDtmbGV4LXNocmluazowfS5lbC1tYWlue2Rpc3BsYXk6YmxvY2s7ZmxleDoxO2ZsZXgtYmFzaXM6YXV0bztvdmVyZmxvdzphdXRvO2JveC1zaXppbmc6Ym9yZGVyLWJveH0uZWwtZm9vdGVye3BhZGRpbmc6MCAyMHB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtmbGV4LXNocmluazowfS5lbC10aW1lbGluZXttYXJnaW46MDtsaXN0LXN0eWxlOm5vbmV9LmVsLXRpbWVsaW5lIC5lbC10aW1lbGluZS1pdGVtOmxhc3QtY2hpbGQgLmVsLXRpbWVsaW5lLWl0ZW1fX3RhaWx7ZGlzcGxheTpub25lfS5lbC10aW1lbGluZS1pdGVte3Bvc2l0aW9uOnJlbGF0aXZlO3BhZGRpbmctYm90dG9tOjIwcHh9LmVsLXRpbWVsaW5lLWl0ZW1fX3dyYXBwZXJ7cG9zaXRpb246cmVsYXRpdmU7cGFkZGluZy1sZWZ0OjI4cHg7dG9wOi0zcHh9LmVsLXRpbWVsaW5lLWl0ZW1fX3RhaWx7cG9zaXRpb246YWJzb2x1dGU7bGVmdDo0cHg7aGVpZ2h0OjEwMCU7Ym9yZGVyLWxlZnQ6MnB4IHNvbGlkICNFNEU3RUR9LmVsLXRpbWVsaW5lLWl0ZW1fX2ljb257Y29sb3I6I0ZGRjtmb250LXNpemU6MTNweH0uZWwtdGltZWxpbmUtaXRlbV9fbm9kZXtwb3NpdGlvbjphYnNvbHV0ZTtiYWNrZ3JvdW5kLWNvbG9yOiNFNEU3RUQ7Ym9yZGVyLXJhZGl1czo1MCU7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyfS5lbC1pbWFnZV9fZXJyb3IsLmVsLXRpbWVsaW5lLWl0ZW1fX2RvdHtkaXNwbGF5Oi1tcy1mbGV4Ym94fS5lbC10aW1lbGluZS1pdGVtX19ub2RlLS1ub3JtYWx7bGVmdDotMXB4O3dpZHRoOjEycHg7aGVpZ2h0OjEycHh9LmVsLXRpbWVsaW5lLWl0ZW1fX25vZGUtLWxhcmdle2xlZnQ6LTJweDt3aWR0aDoxNHB4O2hlaWdodDoxNHB4fS5lbC10aW1lbGluZS1pdGVtX19ub2RlLS1wcmltYXJ5e2JhY2tncm91bmQtY29sb3I6IzQwOUVGRn0uZWwtdGltZWxpbmUtaXRlbV9fbm9kZS0tc3VjY2Vzc3tiYWNrZ3JvdW5kLWNvbG9yOiM2N0MyM0F9LmVsLXRpbWVsaW5lLWl0ZW1fX25vZGUtLXdhcm5pbmd7YmFja2dyb3VuZC1jb2xvcjojRTZBMjNDfS5lbC10aW1lbGluZS1pdGVtX19ub2RlLS1kYW5nZXJ7YmFja2dyb3VuZC1jb2xvcjojRjU2QzZDfS5lbC10aW1lbGluZS1pdGVtX19ub2RlLS1pbmZve2JhY2tncm91bmQtY29sb3I6IzkwOTM5OX0uZWwtdGltZWxpbmUtaXRlbV9fZG90e3Bvc2l0aW9uOmFic29sdXRlO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcn0uZWwtdGltZWxpbmUtaXRlbV9fY29udGVudHtjb2xvcjojMzAzMTMzfS5lbC10aW1lbGluZS1pdGVtX190aW1lc3RhbXB7Y29sb3I6IzkwOTM5OTtsaW5lLWhlaWdodDoxO2ZvbnQtc2l6ZToxM3B4fS5lbC10aW1lbGluZS1pdGVtX190aW1lc3RhbXAuaXMtdG9we21hcmdpbi1ib3R0b206OHB4O3BhZGRpbmctdG9wOjRweH0uZWwtdGltZWxpbmUtaXRlbV9fdGltZXN0YW1wLmlzLWJvdHRvbXttYXJnaW4tdG9wOjhweH0uZWwtbGlua3tkaXNwbGF5OmlubGluZS1mbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdzthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7cG9zaXRpb246cmVsYXRpdmU7dGV4dC1kZWNvcmF0aW9uOm5vbmU7b3V0bGluZTowO3BhZGRpbmc6MDtmb250LXdlaWdodDo1MDB9LmVsLWxpbmsuaXMtdW5kZXJsaW5lOmhvdmVyOmFmdGVye3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDtyaWdodDowO2hlaWdodDowO2JvdHRvbTowO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM0MDlFRkZ9LmVsLWxpbmsuZWwtbGluay0tZGVmYXVsdDphZnRlciwuZWwtbGluay5lbC1saW5rLS1wcmltYXJ5LmlzLXVuZGVybGluZTpob3ZlcjphZnRlciwuZWwtbGluay5lbC1saW5rLS1wcmltYXJ5OmFmdGVye2JvcmRlci1jb2xvcjojNDA5RUZGfS5lbC1saW5rLmlzLWRpc2FibGVke2N1cnNvcjpub3QtYWxsb3dlZH0uZWwtbGluayBbY2xhc3MqPWVsLWljb24tXStzcGFue21hcmdpbi1sZWZ0OjVweH0uZWwtbGluay5lbC1saW5rLS1kZWZhdWx0e2NvbG9yOiM2MDYyNjZ9LmVsLWxpbmsuZWwtbGluay0tZGVmYXVsdDpob3Zlcntjb2xvcjojNDA5RUZGfS5lbC1saW5rLmVsLWxpbmstLWRlZmF1bHQuaXMtZGlzYWJsZWR7Y29sb3I6I0MwQzRDQ30uZWwtbGluay5lbC1saW5rLS1wcmltYXJ5e2NvbG9yOiM0MDlFRkZ9LmVsLWxpbmsuZWwtbGluay0tcHJpbWFyeTpob3Zlcntjb2xvcjojNjZiMWZmfS5lbC1saW5rLmVsLWxpbmstLXByaW1hcnkuaXMtZGlzYWJsZWR7Y29sb3I6I2EwY2ZmZn0uZWwtbGluay5lbC1saW5rLS1kYW5nZXIuaXMtdW5kZXJsaW5lOmhvdmVyOmFmdGVyLC5lbC1saW5rLmVsLWxpbmstLWRhbmdlcjphZnRlcntib3JkZXItY29sb3I6I0Y1NkM2Q30uZWwtbGluay5lbC1saW5rLS1kYW5nZXJ7Y29sb3I6I0Y1NkM2Q30uZWwtbGluay5lbC1saW5rLS1kYW5nZXI6aG92ZXJ7Y29sb3I6I2Y3ODk4OX0uZWwtbGluay5lbC1saW5rLS1kYW5nZXIuaXMtZGlzYWJsZWR7Y29sb3I6I2ZhYjZiNn0uZWwtbGluay5lbC1saW5rLS1zdWNjZXNzLmlzLXVuZGVybGluZTpob3ZlcjphZnRlciwuZWwtbGluay5lbC1saW5rLS1zdWNjZXNzOmFmdGVye2JvcmRlci1jb2xvcjojNjdDMjNBfS5lbC1saW5rLmVsLWxpbmstLXN1Y2Nlc3N7Y29sb3I6IzY3QzIzQX0uZWwtbGluay5lbC1saW5rLS1zdWNjZXNzOmhvdmVye2NvbG9yOiM4NWNlNjF9LmVsLWxpbmsuZWwtbGluay0tc3VjY2Vzcy5pcy1kaXNhYmxlZHtjb2xvcjojYjNlMTlkfS5lbC1saW5rLmVsLWxpbmstLXdhcm5pbmcuaXMtdW5kZXJsaW5lOmhvdmVyOmFmdGVyLC5lbC1saW5rLmVsLWxpbmstLXdhcm5pbmc6YWZ0ZXJ7Ym9yZGVyLWNvbG9yOiNFNkEyM0N9LmVsLWxpbmsuZWwtbGluay0td2FybmluZ3tjb2xvcjojRTZBMjNDfS5lbC1saW5rLmVsLWxpbmstLXdhcm5pbmc6aG92ZXJ7Y29sb3I6I2ViYjU2M30uZWwtbGluay5lbC1saW5rLS13YXJuaW5nLmlzLWRpc2FibGVke2NvbG9yOiNmM2QxOWV9LmVsLWxpbmsuZWwtbGluay0taW5mby5pcy11bmRlcmxpbmU6aG92ZXI6YWZ0ZXIsLmVsLWxpbmsuZWwtbGluay0taW5mbzphZnRlcntib3JkZXItY29sb3I6IzkwOTM5OX0uZWwtbGluay5lbC1saW5rLS1pbmZve2NvbG9yOiM5MDkzOTl9LmVsLWxpbmsuZWwtbGluay0taW5mbzpob3Zlcntjb2xvcjojYTZhOWFkfS5lbC1saW5rLmVsLWxpbmstLWluZm8uaXMtZGlzYWJsZWR7Y29sb3I6I2M4YzljY30uZWwtZGl2aWRlcntiYWNrZ3JvdW5kLWNvbG9yOiNEQ0RGRTY7cG9zaXRpb246cmVsYXRpdmV9LmVsLWRpdmlkZXItLWhvcml6b250YWx7ZGlzcGxheTpibG9jaztoZWlnaHQ6MXB4O3dpZHRoOjEwMCU7bWFyZ2luOjI0cHggMH0uZWwtZGl2aWRlci0tdmVydGljYWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MXB4O2hlaWdodDoxZW07bWFyZ2luOjAgOHB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtwb3NpdGlvbjpyZWxhdGl2ZX0uZWwtZGl2aWRlcl9fdGV4dHtwb3NpdGlvbjphYnNvbHV0ZTtiYWNrZ3JvdW5kLWNvbG9yOiNGRkY7cGFkZGluZzowIDIwcHg7Zm9udC13ZWlnaHQ6NTAwO2NvbG9yOiMzMDMxMzN9LmVsLWltYWdlX19lcnJvciwuZWwtaW1hZ2VfX3BsYWNlaG9sZGVye2JhY2tncm91bmQ6I0Y1RjdGQX0uZWwtZGl2aWRlcl9fdGV4dC5pcy1sZWZ0e2xlZnQ6MjBweDt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKX0uZWwtZGl2aWRlcl9fdGV4dC5pcy1jZW50ZXJ7bGVmdDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTUwJSkgdHJhbnNsYXRlWSgtNTAlKX0uZWwtZGl2aWRlcl9fdGV4dC5pcy1yaWdodHtyaWdodDoyMHB4O3RyYW5zZm9ybTp0cmFuc2xhdGVZKC01MCUpfS5lbC1pbWFnZV9fZXJyb3IsLmVsLWltYWdlX19pbm5lciwuZWwtaW1hZ2VfX3BsYWNlaG9sZGVye3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCV9LmVsLWltYWdle3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6aW5saW5lLWJsb2NrO292ZXJmbG93OmhpZGRlbn0uZWwtaW1hZ2VfX2lubmVye3ZlcnRpY2FsLWFsaWduOnRvcH0uZWwtaW1hZ2VfX2lubmVyLS1jZW50ZXJ7cG9zaXRpb246cmVsYXRpdmU7dG9wOjUwJTtsZWZ0OjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsLTUwJSk7ZGlzcGxheTpibG9ja30uZWwtaW1hZ2VfX2Vycm9ye2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtjb2xvcjojQzBDNENDO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uZWwtaW1hZ2Utdmlld2VyX193cmFwcGVye3Bvc2l0aW9uOmZpeGVkO3RvcDowO3JpZ2h0OjA7Ym90dG9tOjA7bGVmdDowfS5lbC1pbWFnZS12aWV3ZXJfX2J0bntwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjE7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2JvcmRlci1yYWRpdXM6NTAlO29wYWNpdHk6Ljg7Ym94LXNpemluZzpib3JkZXItYm94Oy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZX0uZWwtYnV0dG9uLC5lbC1jaGVja2JveCwuZWwtY2hlY2tib3gtYnV0dG9uX19pbm5lciwuZWwtZW1wdHlfX2ltYWdlIGltZywuZWwtcmFkaW97LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZX0uZWwtaW1hZ2Utdmlld2VyX19jbG9zZXt0b3A6NDBweDtyaWdodDo0MHB4O3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHg7Zm9udC1zaXplOjI0cHg7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiM2MDYyNjZ9LmVsLWltYWdlLXZpZXdlcl9fY2FudmFze3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyfS5lbC1pbWFnZS12aWV3ZXJfX2FjdGlvbnN7bGVmdDo1MCU7Ym90dG9tOjMwcHg7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTUwJSk7d2lkdGg6MjgycHg7aGVpZ2h0OjQ0cHg7cGFkZGluZzowIDIzcHg7YmFja2dyb3VuZC1jb2xvcjojNjA2MjY2O2JvcmRlci1jb2xvcjojZmZmO2JvcmRlci1yYWRpdXM6MjJweH0uZWwtaW1hZ2Utdmlld2VyX19hY3Rpb25zX19pbm5lcnt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3RleHQtYWxpZ246anVzdGlmeTtjdXJzb3I6ZGVmYXVsdDtmb250LXNpemU6MjNweDtjb2xvcjojZmZmO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OnNwYWNlLWFyb3VuZH0uZWwtaW1hZ2Utdmlld2VyX19uZXh0LC5lbC1pbWFnZS12aWV3ZXJfX3ByZXZ7d2lkdGg6NDRweDtoZWlnaHQ6NDRweDtmb250LXNpemU6MjRweDtjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzYwNjI2Njtib3JkZXItY29sb3I6I2ZmZjt0b3A6NTAlfS5lbC1pbWFnZS12aWV3ZXJfX3ByZXZ7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSk7bGVmdDo0MHB4fS5lbC1pbWFnZS12aWV3ZXJfX25leHR7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSk7cmlnaHQ6NDBweDt0ZXh0LWluZGVudDoycHh9LmVsLWltYWdlLXZpZXdlcl9fbWFza3twb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3RvcDowO2xlZnQ6MDtvcGFjaXR5Oi41O2JhY2tncm91bmQ6IzAwMH0udmlld2VyLWZhZGUtZW50ZXItYWN0aXZle2FuaW1hdGlvbjp2aWV3ZXItZmFkZS1pbiAuM3N9LnZpZXdlci1mYWRlLWxlYXZlLWFjdGl2ZXthbmltYXRpb246dmlld2VyLWZhZGUtb3V0IC4zc31Aa2V5ZnJhbWVzIHZpZXdlci1mYWRlLWluezAle3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLC0yMHB4LDApO29wYWNpdHk6MH0xMDAle3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLDAsMCk7b3BhY2l0eToxfX1Aa2V5ZnJhbWVzIHZpZXdlci1mYWRlLW91dHswJXt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwwLDApO29wYWNpdHk6MX0xMDAle3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLC0yMHB4LDApO29wYWNpdHk6MH19LmVsLWJ1dHRvbntkaXNwbGF5OmlubGluZS1ibG9jaztsaW5lLWhlaWdodDoxO3doaXRlLXNwYWNlOm5vd3JhcDtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kOiNGRkY7Ym9yZGVyOjFweCBzb2xpZCAjRENERkU2O2NvbG9yOiM2MDYyNjY7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7dGV4dC1hbGlnbjpjZW50ZXI7Ym94LXNpemluZzpib3JkZXItYm94O291dGxpbmU6MDttYXJnaW46MDt0cmFuc2l0aW9uOi4xcztmb250LXdlaWdodDo1MDA7cGFkZGluZzoxMnB4IDIwcHg7Zm9udC1zaXplOjE0cHg7Ym9yZGVyLXJhZGl1czo0cHh9LmVsLWJ1dHRvbisuZWwtYnV0dG9uLC5lbC1jaGVja2JveC5pcy1ib3JkZXJlZCsuZWwtY2hlY2tib3guaXMtYm9yZGVyZWR7bWFyZ2luLWxlZnQ6MTBweH0uZWwtYnV0dG9uOmZvY3VzLC5lbC1idXR0b246aG92ZXJ7Y29sb3I6IzQwOUVGRjtib3JkZXItY29sb3I6I2M2ZTJmZjtiYWNrZ3JvdW5kLWNvbG9yOiNlY2Y1ZmZ9LmVsLWJ1dHRvbjphY3RpdmV7Y29sb3I6IzNhOGVlNjtib3JkZXItY29sb3I6IzNhOGVlNjtvdXRsaW5lOjB9LmVsLWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH0uZWwtYnV0dG9uIFtjbGFzcyo9ZWwtaWNvbi1dK3NwYW57bWFyZ2luLWxlZnQ6NXB4fS5lbC1idXR0b24uaXMtcGxhaW46Zm9jdXMsLmVsLWJ1dHRvbi5pcy1wbGFpbjpob3ZlcntiYWNrZ3JvdW5kOiNGRkY7Ym9yZGVyLWNvbG9yOiM0MDlFRkY7Y29sb3I6IzQwOUVGRn0uZWwtYnV0dG9uLmlzLWFjdGl2ZSwuZWwtYnV0dG9uLmlzLXBsYWluOmFjdGl2ZXtjb2xvcjojM2E4ZWU2O2JvcmRlci1jb2xvcjojM2E4ZWU2fS5lbC1idXR0b24uaXMtcGxhaW46YWN0aXZle2JhY2tncm91bmQ6I0ZGRjtvdXRsaW5lOjB9LmVsLWJ1dHRvbi5pcy1kaXNhYmxlZCwuZWwtYnV0dG9uLmlzLWRpc2FibGVkOmZvY3VzLC5lbC1idXR0b24uaXMtZGlzYWJsZWQ6aG92ZXJ7Y29sb3I6I0MwQzRDQztjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1pbWFnZTpub25lO2JhY2tncm91bmQtY29sb3I6I0ZGRjtib3JkZXItY29sb3I6I0VCRUVGNX0uZWwtYnV0dG9uLmlzLWRpc2FibGVkLmVsLWJ1dHRvbi0tdGV4dHtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5lbC1idXR0b24uaXMtZGlzYWJsZWQuaXMtcGxhaW4sLmVsLWJ1dHRvbi5pcy1kaXNhYmxlZC5pcy1wbGFpbjpmb2N1cywuZWwtYnV0dG9uLmlzLWRpc2FibGVkLmlzLXBsYWluOmhvdmVye2JhY2tncm91bmQtY29sb3I6I0ZGRjtib3JkZXItY29sb3I6I0VCRUVGNTtjb2xvcjojQzBDNENDfS5lbC1idXR0b24uaXMtbG9hZGluZ3twb3NpdGlvbjpyZWxhdGl2ZTtwb2ludGVyLWV2ZW50czpub25lfS5lbC1idXR0b24uaXMtbG9hZGluZzpiZWZvcmV7cG9pbnRlci1ldmVudHM6bm9uZTtjb250ZW50OicnO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6LTFweDt0b3A6LTFweDtyaWdodDotMXB4O2JvdHRvbTotMXB4O2JvcmRlci1yYWRpdXM6aW5oZXJpdDtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjM1KX0uZWwtYnV0dG9uLmlzLXJvdW5ke2JvcmRlci1yYWRpdXM6MjBweDtwYWRkaW5nOjEycHggMjNweH0uZWwtYnV0dG9uLmlzLWNpcmNsZXtib3JkZXItcmFkaXVzOjUwJTtwYWRkaW5nOjEycHh9LmVsLWJ1dHRvbi0tcHJpbWFyeXtjb2xvcjojRkZGO2JhY2tncm91bmQtY29sb3I6IzQwOUVGRjtib3JkZXItY29sb3I6IzQwOUVGRn0uZWwtYnV0dG9uLS1wcmltYXJ5OmZvY3VzLC5lbC1idXR0b24tLXByaW1hcnk6aG92ZXJ7YmFja2dyb3VuZDojNjZiMWZmO2JvcmRlci1jb2xvcjojNjZiMWZmO2NvbG9yOiNGRkZ9LmVsLWJ1dHRvbi0tcHJpbWFyeS5pcy1hY3RpdmUsLmVsLWJ1dHRvbi0tcHJpbWFyeTphY3RpdmV7YmFja2dyb3VuZDojM2E4ZWU2O2JvcmRlci1jb2xvcjojM2E4ZWU2O2NvbG9yOiNGRkZ9LmVsLWJ1dHRvbi0tcHJpbWFyeTphY3RpdmV7b3V0bGluZTowfS5lbC1idXR0b24tLXByaW1hcnkuaXMtZGlzYWJsZWQsLmVsLWJ1dHRvbi0tcHJpbWFyeS5pcy1kaXNhYmxlZDphY3RpdmUsLmVsLWJ1dHRvbi0tcHJpbWFyeS5pcy1kaXNhYmxlZDpmb2N1cywuZWwtYnV0dG9uLS1wcmltYXJ5LmlzLWRpc2FibGVkOmhvdmVye2NvbG9yOiNGRkY7YmFja2dyb3VuZC1jb2xvcjojYTBjZmZmO2JvcmRlci1jb2xvcjojYTBjZmZmfS5lbC1idXR0b24tLXByaW1hcnkuaXMtcGxhaW57Y29sb3I6IzQwOUVGRjtiYWNrZ3JvdW5kOiNlY2Y1ZmY7Ym9yZGVyLWNvbG9yOiNiM2Q4ZmZ9LmVsLWJ1dHRvbi0tcHJpbWFyeS5pcy1wbGFpbjpmb2N1cywuZWwtYnV0dG9uLS1wcmltYXJ5LmlzLXBsYWluOmhvdmVye2JhY2tncm91bmQ6IzQwOUVGRjtib3JkZXItY29sb3I6IzQwOUVGRjtjb2xvcjojRkZGfS5lbC1idXR0b24tLXByaW1hcnkuaXMtcGxhaW46YWN0aXZle2JhY2tncm91bmQ6IzNhOGVlNjtib3JkZXItY29sb3I6IzNhOGVlNjtjb2xvcjojRkZGO291dGxpbmU6MH0uZWwtYnV0dG9uLS1wcmltYXJ5LmlzLXBsYWluLmlzLWRpc2FibGVkLC5lbC1idXR0b24tLXByaW1hcnkuaXMtcGxhaW4uaXMtZGlzYWJsZWQ6YWN0aXZlLC5lbC1idXR0b24tLXByaW1hcnkuaXMtcGxhaW4uaXMtZGlzYWJsZWQ6Zm9jdXMsLmVsLWJ1dHRvbi0tcHJpbWFyeS5pcy1wbGFpbi5pcy1kaXNhYmxlZDpob3Zlcntjb2xvcjojOGNjNWZmO2JhY2tncm91bmQtY29sb3I6I2VjZjVmZjtib3JkZXItY29sb3I6I2Q5ZWNmZn0uZWwtYnV0dG9uLS1zdWNjZXNze2NvbG9yOiNGRkY7YmFja2dyb3VuZC1jb2xvcjojNjdDMjNBO2JvcmRlci1jb2xvcjojNjdDMjNBfS5lbC1idXR0b24tLXN1Y2Nlc3M6Zm9jdXMsLmVsLWJ1dHRvbi0tc3VjY2Vzczpob3ZlcntiYWNrZ3JvdW5kOiM4NWNlNjE7Ym9yZGVyLWNvbG9yOiM4NWNlNjE7Y29sb3I6I0ZGRn0uZWwtYnV0dG9uLS1zdWNjZXNzLmlzLWFjdGl2ZSwuZWwtYnV0dG9uLS1zdWNjZXNzOmFjdGl2ZXtiYWNrZ3JvdW5kOiM1ZGFmMzQ7Ym9yZGVyLWNvbG9yOiM1ZGFmMzQ7Y29sb3I6I0ZGRn0uZWwtYnV0dG9uLS1zdWNjZXNzOmFjdGl2ZXtvdXRsaW5lOjB9LmVsLWJ1dHRvbi0tc3VjY2Vzcy5pcy1kaXNhYmxlZCwuZWwtYnV0dG9uLS1zdWNjZXNzLmlzLWRpc2FibGVkOmFjdGl2ZSwuZWwtYnV0dG9uLS1zdWNjZXNzLmlzLWRpc2FibGVkOmZvY3VzLC5lbC1idXR0b24tLXN1Y2Nlc3MuaXMtZGlzYWJsZWQ6aG92ZXJ7Y29sb3I6I0ZGRjtiYWNrZ3JvdW5kLWNvbG9yOiNiM2UxOWQ7Ym9yZGVyLWNvbG9yOiNiM2UxOWR9LmVsLWJ1dHRvbi0tc3VjY2Vzcy5pcy1wbGFpbntjb2xvcjojNjdDMjNBO2JhY2tncm91bmQ6I2YwZjllYjtib3JkZXItY29sb3I6I2MyZTdiMH0uZWwtYnV0dG9uLS1zdWNjZXNzLmlzLXBsYWluOmZvY3VzLC5lbC1idXR0b24tLXN1Y2Nlc3MuaXMtcGxhaW46aG92ZXJ7YmFja2dyb3VuZDojNjdDMjNBO2JvcmRlci1jb2xvcjojNjdDMjNBO2NvbG9yOiNGRkZ9LmVsLWJ1dHRvbi0tc3VjY2Vzcy5pcy1wbGFpbjphY3RpdmV7YmFja2dyb3VuZDojNWRhZjM0O2JvcmRlci1jb2xvcjojNWRhZjM0O2NvbG9yOiNGRkY7b3V0bGluZTowfS5lbC1idXR0b24tLXN1Y2Nlc3MuaXMtcGxhaW4uaXMtZGlzYWJsZWQsLmVsLWJ1dHRvbi0tc3VjY2Vzcy5pcy1wbGFpbi5pcy1kaXNhYmxlZDphY3RpdmUsLmVsLWJ1dHRvbi0tc3VjY2Vzcy5pcy1wbGFpbi5pcy1kaXNhYmxlZDpmb2N1cywuZWwtYnV0dG9uLS1zdWNjZXNzLmlzLXBsYWluLmlzLWRpc2FibGVkOmhvdmVye2NvbG9yOiNhNGRhODk7YmFja2dyb3VuZC1jb2xvcjojZjBmOWViO2JvcmRlci1jb2xvcjojZTFmM2Q4fS5lbC1idXR0b24tLXdhcm5pbmd7Y29sb3I6I0ZGRjtiYWNrZ3JvdW5kLWNvbG9yOiNFNkEyM0M7Ym9yZGVyLWNvbG9yOiNFNkEyM0N9LmVsLWJ1dHRvbi0td2FybmluZzpmb2N1cywuZWwtYnV0dG9uLS13YXJuaW5nOmhvdmVye2JhY2tncm91bmQ6I2ViYjU2Mztib3JkZXItY29sb3I6I2ViYjU2Mztjb2xvcjojRkZGfS5lbC1idXR0b24tLXdhcm5pbmcuaXMtYWN0aXZlLC5lbC1idXR0b24tLXdhcm5pbmc6YWN0aXZle2JhY2tncm91bmQ6I2NmOTIzNjtib3JkZXItY29sb3I6I2NmOTIzNjtjb2xvcjojRkZGfS5lbC1idXR0b24tLXdhcm5pbmc6YWN0aXZle291dGxpbmU6MH0uZWwtYnV0dG9uLS13YXJuaW5nLmlzLWRpc2FibGVkLC5lbC1idXR0b24tLXdhcm5pbmcuaXMtZGlzYWJsZWQ6YWN0aXZlLC5lbC1idXR0b24tLXdhcm5pbmcuaXMtZGlzYWJsZWQ6Zm9jdXMsLmVsLWJ1dHRvbi0td2FybmluZy5pcy1kaXNhYmxlZDpob3Zlcntjb2xvcjojRkZGO2JhY2tncm91bmQtY29sb3I6I2YzZDE5ZTtib3JkZXItY29sb3I6I2YzZDE5ZX0uZWwtYnV0dG9uLS13YXJuaW5nLmlzLXBsYWlue2NvbG9yOiNFNkEyM0M7YmFja2dyb3VuZDojZmRmNmVjO2JvcmRlci1jb2xvcjojZjVkYWIxfS5lbC1idXR0b24tLXdhcm5pbmcuaXMtcGxhaW46Zm9jdXMsLmVsLWJ1dHRvbi0td2FybmluZy5pcy1wbGFpbjpob3ZlcntiYWNrZ3JvdW5kOiNFNkEyM0M7Ym9yZGVyLWNvbG9yOiNFNkEyM0M7Y29sb3I6I0ZGRn0uZWwtYnV0dG9uLS13YXJuaW5nLmlzLXBsYWluOmFjdGl2ZXtiYWNrZ3JvdW5kOiNjZjkyMzY7Ym9yZGVyLWNvbG9yOiNjZjkyMzY7Y29sb3I6I0ZGRjtvdXRsaW5lOjB9LmVsLWJ1dHRvbi0td2FybmluZy5pcy1wbGFpbi5pcy1kaXNhYmxlZCwuZWwtYnV0dG9uLS13YXJuaW5nLmlzLXBsYWluLmlzLWRpc2FibGVkOmFjdGl2ZSwuZWwtYnV0dG9uLS13YXJuaW5nLmlzLXBsYWluLmlzLWRpc2FibGVkOmZvY3VzLC5lbC1idXR0b24tLXdhcm5pbmcuaXMtcGxhaW4uaXMtZGlzYWJsZWQ6aG92ZXJ7Y29sb3I6I2YwYzc4YTtiYWNrZ3JvdW5kLWNvbG9yOiNmZGY2ZWM7Ym9yZGVyLWNvbG9yOiNmYWVjZDh9LmVsLWJ1dHRvbi0tZGFuZ2Vye2NvbG9yOiNGRkY7YmFja2dyb3VuZC1jb2xvcjojRjU2QzZDO2JvcmRlci1jb2xvcjojRjU2QzZDfS5lbC1idXR0b24tLWRhbmdlcjpmb2N1cywuZWwtYnV0dG9uLS1kYW5nZXI6aG92ZXJ7YmFja2dyb3VuZDojZjc4OTg5O2JvcmRlci1jb2xvcjojZjc4OTg5O2NvbG9yOiNGRkZ9LmVsLWJ1dHRvbi0tZGFuZ2VyLmlzLWFjdGl2ZSwuZWwtYnV0dG9uLS1kYW5nZXI6YWN0aXZle2JhY2tncm91bmQ6I2RkNjE2MTtib3JkZXItY29sb3I6I2RkNjE2MTtjb2xvcjojRkZGfS5lbC1idXR0b24tLWRhbmdlcjphY3RpdmV7b3V0bGluZTowfS5lbC1idXR0b24tLWRhbmdlci5pcy1kaXNhYmxlZCwuZWwtYnV0dG9uLS1kYW5nZXIuaXMtZGlzYWJsZWQ6YWN0aXZlLC5lbC1idXR0b24tLWRhbmdlci5pcy1kaXNhYmxlZDpmb2N1cywuZWwtYnV0dG9uLS1kYW5nZXIuaXMtZGlzYWJsZWQ6aG92ZXJ7Y29sb3I6I0ZGRjtiYWNrZ3JvdW5kLWNvbG9yOiNmYWI2YjY7Ym9yZGVyLWNvbG9yOiNmYWI2YjZ9LmVsLWJ1dHRvbi0tZGFuZ2VyLmlzLXBsYWlue2NvbG9yOiNGNTZDNkM7YmFja2dyb3VuZDojZmVmMGYwO2JvcmRlci1jb2xvcjojZmJjNGM0fS5lbC1idXR0b24tLWRhbmdlci5pcy1wbGFpbjpmb2N1cywuZWwtYnV0dG9uLS1kYW5nZXIuaXMtcGxhaW46aG92ZXJ7YmFja2dyb3VuZDojRjU2QzZDO2JvcmRlci1jb2xvcjojRjU2QzZDO2NvbG9yOiNGRkZ9LmVsLWJ1dHRvbi0tZGFuZ2VyLmlzLXBsYWluOmFjdGl2ZXtiYWNrZ3JvdW5kOiNkZDYxNjE7Ym9yZGVyLWNvbG9yOiNkZDYxNjE7Y29sb3I6I0ZGRjtvdXRsaW5lOjB9LmVsLWJ1dHRvbi0tZGFuZ2VyLmlzLXBsYWluLmlzLWRpc2FibGVkLC5lbC1idXR0b24tLWRhbmdlci5pcy1wbGFpbi5pcy1kaXNhYmxlZDphY3RpdmUsLmVsLWJ1dHRvbi0tZGFuZ2VyLmlzLXBsYWluLmlzLWRpc2FibGVkOmZvY3VzLC5lbC1idXR0b24tLWRhbmdlci5pcy1wbGFpbi5pcy1kaXNhYmxlZDpob3Zlcntjb2xvcjojZjlhN2E3O2JhY2tncm91bmQtY29sb3I6I2ZlZjBmMDtib3JkZXItY29sb3I6I2ZkZTJlMn0uZWwtYnV0dG9uLS1pbmZve2NvbG9yOiNGRkY7YmFja2dyb3VuZC1jb2xvcjojOTA5Mzk5O2JvcmRlci1jb2xvcjojOTA5Mzk5fS5lbC1idXR0b24tLWluZm86Zm9jdXMsLmVsLWJ1dHRvbi0taW5mbzpob3ZlcntiYWNrZ3JvdW5kOiNhNmE5YWQ7Ym9yZGVyLWNvbG9yOiNhNmE5YWQ7Y29sb3I6I0ZGRn0uZWwtYnV0dG9uLS1pbmZvLmlzLWFjdGl2ZSwuZWwtYnV0dG9uLS1pbmZvOmFjdGl2ZXtiYWNrZ3JvdW5kOiM4Mjg0OGE7Ym9yZGVyLWNvbG9yOiM4Mjg0OGE7Y29sb3I6I0ZGRn0uZWwtYnV0dG9uLS1pbmZvOmFjdGl2ZXtvdXRsaW5lOjB9LmVsLWJ1dHRvbi0taW5mby5pcy1kaXNhYmxlZCwuZWwtYnV0dG9uLS1pbmZvLmlzLWRpc2FibGVkOmFjdGl2ZSwuZWwtYnV0dG9uLS1pbmZvLmlzLWRpc2FibGVkOmZvY3VzLC5lbC1idXR0b24tLWluZm8uaXMtZGlzYWJsZWQ6aG92ZXJ7Y29sb3I6I0ZGRjtiYWNrZ3JvdW5kLWNvbG9yOiNjOGM5Y2M7Ym9yZGVyLWNvbG9yOiNjOGM5Y2N9LmVsLWJ1dHRvbi0taW5mby5pcy1wbGFpbntjb2xvcjojOTA5Mzk5O2JhY2tncm91bmQ6I2Y0ZjRmNTtib3JkZXItY29sb3I6I2QzZDRkNn0uZWwtYnV0dG9uLS1pbmZvLmlzLXBsYWluOmZvY3VzLC5lbC1idXR0b24tLWluZm8uaXMtcGxhaW46aG92ZXJ7YmFja2dyb3VuZDojOTA5Mzk5O2JvcmRlci1jb2xvcjojOTA5Mzk5O2NvbG9yOiNGRkZ9LmVsLWJ1dHRvbi0taW5mby5pcy1wbGFpbjphY3RpdmV7YmFja2dyb3VuZDojODI4NDhhO2JvcmRlci1jb2xvcjojODI4NDhhO2NvbG9yOiNGRkY7b3V0bGluZTowfS5lbC1idXR0b24tLWluZm8uaXMtcGxhaW4uaXMtZGlzYWJsZWQsLmVsLWJ1dHRvbi0taW5mby5pcy1wbGFpbi5pcy1kaXNhYmxlZDphY3RpdmUsLmVsLWJ1dHRvbi0taW5mby5pcy1wbGFpbi5pcy1kaXNhYmxlZDpmb2N1cywuZWwtYnV0dG9uLS1pbmZvLmlzLXBsYWluLmlzLWRpc2FibGVkOmhvdmVye2NvbG9yOiNiY2JlYzI7YmFja2dyb3VuZC1jb2xvcjojZjRmNGY1O2JvcmRlci1jb2xvcjojZTllOWVifS5lbC1idXR0b24tLW1lZGl1bXtwYWRkaW5nOjEwcHggMjBweDtmb250LXNpemU6MTRweDtib3JkZXItcmFkaXVzOjRweH0uZWwtYnV0dG9uLS1tZWRpdW0uaXMtcm91bmR7cGFkZGluZzoxMHB4IDIwcHh9LmVsLWJ1dHRvbi0tbWVkaXVtLmlzLWNpcmNsZXtwYWRkaW5nOjEwcHh9LmVsLWJ1dHRvbi0tc21hbGx7cGFkZGluZzo5cHggMTVweDtmb250LXNpemU6MTJweDtib3JkZXItcmFkaXVzOjNweH0uZWwtYnV0dG9uLS1zbWFsbC5pcy1yb3VuZHtwYWRkaW5nOjlweCAxNXB4fS5lbC1idXR0b24tLXNtYWxsLmlzLWNpcmNsZXtwYWRkaW5nOjlweH0uZWwtYnV0dG9uLS1taW5pLC5lbC1idXR0b24tLW1pbmkuaXMtcm91bmR7cGFkZGluZzo3cHggMTVweH0uZWwtYnV0dG9uLS1taW5pe2ZvbnQtc2l6ZToxMnB4O2JvcmRlci1yYWRpdXM6M3B4fS5lbC1idXR0b24tLW1pbmkuaXMtY2lyY2xle3BhZGRpbmc6N3B4fS5lbC1idXR0b24tLXRleHR7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50O2NvbG9yOiM0MDlFRkY7YmFja2dyb3VuZDowIDA7cGFkZGluZy1sZWZ0OjA7cGFkZGluZy1yaWdodDowfS5lbC1idXR0b24tLXRleHQ6Zm9jdXMsLmVsLWJ1dHRvbi0tdGV4dDpob3Zlcntjb2xvcjojNjZiMWZmO2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudDtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5lbC1idXR0b24tLXRleHQ6YWN0aXZle2NvbG9yOiMzYThlZTY7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50O2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9LmVsLWJ1dHRvbi0tdGV4dC5pcy1kaXNhYmxlZCwuZWwtYnV0dG9uLS10ZXh0LmlzLWRpc2FibGVkOmZvY3VzLC5lbC1idXR0b24tLXRleHQuaXMtZGlzYWJsZWQ6aG92ZXJ7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50fS5lbC1idXR0b24tZ3JvdXAgLmVsLWJ1dHRvbi0tZGFuZ2VyOmxhc3QtY2hpbGQsLmVsLWJ1dHRvbi1ncm91cCAuZWwtYnV0dG9uLS1kYW5nZXI6bm90KDpmaXJzdC1jaGlsZCk6bm90KDpsYXN0LWNoaWxkKSwuZWwtYnV0dG9uLWdyb3VwIC5lbC1idXR0b24tLWluZm86bGFzdC1jaGlsZCwuZWwtYnV0dG9uLWdyb3VwIC5lbC1idXR0b24tLWluZm86bm90KDpmaXJzdC1jaGlsZCk6bm90KDpsYXN0LWNoaWxkKSwuZWwtYnV0dG9uLWdyb3VwIC5lbC1idXR0b24tLXByaW1hcnk6bGFzdC1jaGlsZCwuZWwtYnV0dG9uLWdyb3VwIC5lbC1idXR0b24tLXByaW1hcnk6bm90KDpmaXJzdC1jaGlsZCk6bm90KDpsYXN0LWNoaWxkKSwuZWwtYnV0dG9uLWdyb3VwIC5lbC1idXR0b24tLXN1Y2Nlc3M6bGFzdC1jaGlsZCwuZWwtYnV0dG9uLWdyb3VwIC5lbC1idXR0b24tLXN1Y2Nlc3M6bm90KDpmaXJzdC1jaGlsZCk6bm90KDpsYXN0LWNoaWxkKSwuZWwtYnV0dG9uLWdyb3VwIC5lbC1idXR0b24tLXdhcm5pbmc6bGFzdC1jaGlsZCwuZWwtYnV0dG9uLWdyb3VwIC5lbC1idXR0b24tLXdhcm5pbmc6bm90KDpmaXJzdC1jaGlsZCk6bm90KDpsYXN0LWNoaWxkKSwuZWwtYnV0dG9uLWdyb3VwPi5lbC1kcm9wZG93bj4uZWwtYnV0dG9ue2JvcmRlci1sZWZ0LWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfS5lbC1idXR0b24tZ3JvdXAgLmVsLWJ1dHRvbi0tZGFuZ2VyOmZpcnN0LWNoaWxkLC5lbC1idXR0b24tZ3JvdXAgLmVsLWJ1dHRvbi0tZGFuZ2VyOm5vdCg6Zmlyc3QtY2hpbGQpOm5vdCg6bGFzdC1jaGlsZCksLmVsLWJ1dHRvbi1ncm91cCAuZWwtYnV0dG9uLS1pbmZvOmZpcnN0LWNoaWxkLC5lbC1idXR0b24tZ3JvdXAgLmVsLWJ1dHRvbi0taW5mbzpub3QoOmZpcnN0LWNoaWxkKTpub3QoOmxhc3QtY2hpbGQpLC5lbC1idXR0b24tZ3JvdXAgLmVsLWJ1dHRvbi0tcHJpbWFyeTpmaXJzdC1jaGlsZCwuZWwtYnV0dG9uLWdyb3VwIC5lbC1idXR0b24tLXByaW1hcnk6bm90KDpmaXJzdC1jaGlsZCk6bm90KDpsYXN0LWNoaWxkKSwuZWwtYnV0dG9uLWdyb3VwIC5lbC1idXR0b24tLXN1Y2Nlc3M6Zmlyc3QtY2hpbGQsLmVsLWJ1dHRvbi1ncm91cCAuZWwtYnV0dG9uLS1zdWNjZXNzOm5vdCg6Zmlyc3QtY2hpbGQpOm5vdCg6bGFzdC1jaGlsZCksLmVsLWJ1dHRvbi1ncm91cCAuZWwtYnV0dG9uLS13YXJuaW5nOmZpcnN0LWNoaWxkLC5lbC1idXR0b24tZ3JvdXAgLmVsLWJ1dHRvbi0td2FybmluZzpub3QoOmZpcnN0LWNoaWxkKTpub3QoOmxhc3QtY2hpbGQpe2JvcmRlci1yaWdodC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX0uZWwtYnV0dG9uLWdyb3Vwe2Rpc3BsYXk6aW5saW5lLWJsb2NrO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uZWwtYnV0dG9uLWdyb3VwOjphZnRlciwuZWwtYnV0dG9uLWdyb3VwOjpiZWZvcmV7ZGlzcGxheTp0YWJsZX0uZWwtYnV0dG9uLWdyb3VwOjphZnRlcntjbGVhcjpib3RofS5lbC1idXR0b24tZ3JvdXA+LmVsLWJ1dHRvbntmbG9hdDpsZWZ0O3Bvc2l0aW9uOnJlbGF0aXZlfS5lbC1idXR0b24tZ3JvdXA+LmVsLWJ1dHRvbi5pcy1kaXNhYmxlZHt6LWluZGV4OjF9LmVsLWJ1dHRvbi1ncm91cD4uZWwtYnV0dG9uOmZpcnN0LWNoaWxke2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MH0uZWwtYnV0dG9uLWdyb3VwPi5lbC1idXR0b246bGFzdC1jaGlsZHtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowfS5lbC1idXR0b24tZ3JvdXA+LmVsLWJ1dHRvbjpmaXJzdC1jaGlsZDpsYXN0LWNoaWxke2JvcmRlci1yYWRpdXM6NHB4fS5lbC1idXR0b24tZ3JvdXA+LmVsLWJ1dHRvbjpmaXJzdC1jaGlsZDpsYXN0LWNoaWxkLmlzLXJvdW5ke2JvcmRlci1yYWRpdXM6MjBweH0uZWwtYnV0dG9uLWdyb3VwPi5lbC1idXR0b246Zmlyc3QtY2hpbGQ6bGFzdC1jaGlsZC5pcy1jaXJjbGV7Ym9yZGVyLXJhZGl1czo1MCV9LmVsLWJ1dHRvbi1ncm91cD4uZWwtYnV0dG9uOm5vdCg6Zmlyc3QtY2hpbGQpOm5vdCg6bGFzdC1jaGlsZCl7Ym9yZGVyLXJhZGl1czowfS5lbC1idXR0b24tZ3JvdXA+LmVsLWJ1dHRvbi5pcy1hY3RpdmUsLmVsLWJ1dHRvbi1ncm91cD4uZWwtYnV0dG9uOm5vdCguaXMtZGlzYWJsZWQpOmFjdGl2ZSwuZWwtYnV0dG9uLWdyb3VwPi5lbC1idXR0b246bm90KC5pcy1kaXNhYmxlZCk6Zm9jdXMsLmVsLWJ1dHRvbi1ncm91cD4uZWwtYnV0dG9uOm5vdCguaXMtZGlzYWJsZWQpOmhvdmVye3otaW5kZXg6MX0uZWwtYnV0dG9uLWdyb3VwPi5lbC1kcm9wZG93bj4uZWwtYnV0dG9ue2JvcmRlci10b3AtbGVmdC1yYWRpdXM6MDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjB9LmVsLWNhbGVuZGFye2JhY2tncm91bmQtY29sb3I6I2ZmZn0uZWwtY2FsZW5kYXJfX2hlYWRlcntkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47cGFkZGluZzoxMnB4IDIwcHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI0VCRUVGNX0uZWwtYmFja3RvcCwuZWwtcGFnZS1oZWFkZXJ7ZGlzcGxheTotbXMtZmxleGJveH0uZWwtY2FsZW5kYXJfX3RpdGxle2NvbG9yOiMwMDA7YWxpZ24tc2VsZjpjZW50ZXJ9LmVsLWNhbGVuZGFyX19ib2R5e3BhZGRpbmc6MTJweCAyMHB4IDM1cHh9LmVsLWNhbGVuZGFyLXRhYmxle3RhYmxlLWxheW91dDpmaXhlZDt3aWR0aDoxMDAlfS5lbC1jYWxlbmRhci10YWJsZSB0aGVhZCB0aHtwYWRkaW5nOjEycHggMDtjb2xvcjojNjA2MjY2O2ZvbnQtd2VpZ2h0OjQwMH0uZWwtY2FsZW5kYXItdGFibGU6bm90KC5pcy1yYW5nZSkgdGQubmV4dCwuZWwtY2FsZW5kYXItdGFibGU6bm90KC5pcy1yYW5nZSkgdGQucHJldntjb2xvcjojQzBDNENDfS5lbC1iYWNrdG9wLC5lbC1jYWxlbmRhci10YWJsZSB0ZC5pcy10b2RheXtjb2xvcjojNDA5RUZGfS5lbC1jYWxlbmRhci10YWJsZSB0ZHtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjRUJFRUY1O2JvcmRlci1yaWdodDoxcHggc29saWQgI0VCRUVGNTt2ZXJ0aWNhbC1hbGlnbjp0b3A7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIC4ycyBlYXNlfS5lbC1jYWxlbmRhci10YWJsZSB0ZC5pcy1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOiNGMkY4RkV9LmVsLWNhbGVuZGFyLXRhYmxlIHRyOmZpcnN0LWNoaWxkIHRke2JvcmRlci10b3A6MXB4IHNvbGlkICNFQkVFRjV9LmVsLWNhbGVuZGFyLXRhYmxlIHRyIHRkOmZpcnN0LWNoaWxke2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjRUJFRUY1fS5lbC1jYWxlbmRhci10YWJsZSB0ci5lbC1jYWxlbmRhci10YWJsZV9fcm93LS1oaWRlLWJvcmRlciB0ZHtib3JkZXItdG9wOm5vbmV9LmVsLWNhbGVuZGFyLXRhYmxlIC5lbC1jYWxlbmRhci1kYXl7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6OHB4O2hlaWdodDo4NXB4fS5lbC1jYWxlbmRhci10YWJsZSAuZWwtY2FsZW5kYXItZGF5OmhvdmVye2N1cnNvcjpwb2ludGVyO2JhY2tncm91bmQtY29sb3I6I0YyRjhGRX0uZWwtYmFja3RvcHtwb3NpdGlvbjpmaXhlZDtiYWNrZ3JvdW5kLWNvbG9yOiNGRkY7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDtib3JkZXItcmFkaXVzOjUwJTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7Zm9udC1zaXplOjIwcHg7Ym94LXNoYWRvdzowIDAgNnB4IHJnYmEoMCwwLDAsLjEyKTtjdXJzb3I6cG9pbnRlcjt6LWluZGV4OjV9LmVsLWJhY2t0b3A6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojRjJGNkZDfS5lbC1wYWdlLWhlYWRlcntkaXNwbGF5OmZsZXg7bGluZS1oZWlnaHQ6MjRweH0uZWwtcGFnZS1oZWFkZXJfX2xlZnR7ZGlzcGxheTpmbGV4O2N1cnNvcjpwb2ludGVyO21hcmdpbi1yaWdodDo0MHB4O3Bvc2l0aW9uOnJlbGF0aXZlfS5lbC1wYWdlLWhlYWRlcl9fbGVmdDo6YWZ0ZXJ7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O2hlaWdodDoxNnB4O3JpZ2h0Oi0yMHB4O3RvcDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSk7YmFja2dyb3VuZC1jb2xvcjojRENERkU2fS5lbC1jaGVja2JveCwuZWwtY2hlY2tib3hfX2lucHV0e2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO3doaXRlLXNwYWNlOm5vd3JhcH0uZWwtcGFnZS1oZWFkZXJfX2xlZnQgLmVsLWljb24tYmFja3tmb250LXNpemU6MThweDttYXJnaW4tcmlnaHQ6NnB4O2FsaWduLXNlbGY6Y2VudGVyfS5lbC1wYWdlLWhlYWRlcl9fdGl0bGV7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5lbC1wYWdlLWhlYWRlcl9fY29udGVudHtmb250LXNpemU6MThweDtjb2xvcjojMzAzMTMzfS5lbC1jaGVja2JveHtjb2xvcjojNjA2MjY2O2ZvbnQtd2VpZ2h0OjUwMDtmb250LXNpemU6MTRweDtjdXJzb3I6cG9pbnRlcjstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7bWFyZ2luLXJpZ2h0OjMwcHh9LmVsLWNoZWNrYm94LmlzLWJvcmRlcmVke3BhZGRpbmc6OXB4IDIwcHggOXB4IDEwcHg7Ym9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyOjFweCBzb2xpZCAjRENERkU2O2JveC1zaXppbmc6Ym9yZGVyLWJveDtsaW5lLWhlaWdodDpub3JtYWw7aGVpZ2h0OjQwcHh9LmVsLWNoZWNrYm94LmlzLWJvcmRlcmVkLmlzLWNoZWNrZWR7Ym9yZGVyLWNvbG9yOiM0MDlFRkZ9LmVsLWNoZWNrYm94LmlzLWJvcmRlcmVkLmlzLWRpc2FibGVke2JvcmRlci1jb2xvcjojRUJFRUY1O2N1cnNvcjpub3QtYWxsb3dlZH0uZWwtY2hlY2tib3guaXMtYm9yZGVyZWQuZWwtY2hlY2tib3gtLW1lZGl1bXtwYWRkaW5nOjdweCAyMHB4IDdweCAxMHB4O2JvcmRlci1yYWRpdXM6NHB4O2hlaWdodDozNnB4fS5lbC1jaGVja2JveC5pcy1ib3JkZXJlZC5lbC1jaGVja2JveC0tbWVkaXVtIC5lbC1jaGVja2JveF9fbGFiZWx7bGluZS1oZWlnaHQ6MTdweDtmb250LXNpemU6MTRweH0uZWwtY2hlY2tib3guaXMtYm9yZGVyZWQuZWwtY2hlY2tib3gtLW1lZGl1bSAuZWwtY2hlY2tib3hfX2lubmVye2hlaWdodDoxNHB4O3dpZHRoOjE0cHh9LmVsLWNoZWNrYm94LmlzLWJvcmRlcmVkLmVsLWNoZWNrYm94LS1zbWFsbHtwYWRkaW5nOjVweCAxNXB4IDVweCAxMHB4O2JvcmRlci1yYWRpdXM6M3B4O2hlaWdodDozMnB4fS5lbC1jaGVja2JveC5pcy1ib3JkZXJlZC5lbC1jaGVja2JveC0tc21hbGwgLmVsLWNoZWNrYm94X19sYWJlbHtsaW5lLWhlaWdodDoxNXB4O2ZvbnQtc2l6ZToxMnB4fS5lbC1jaGVja2JveC5pcy1ib3JkZXJlZC5lbC1jaGVja2JveC0tc21hbGwgLmVsLWNoZWNrYm94X19pbm5lcntoZWlnaHQ6MTJweDt3aWR0aDoxMnB4fS5lbC1jaGVja2JveC5pcy1ib3JkZXJlZC5lbC1jaGVja2JveC0tc21hbGwgLmVsLWNoZWNrYm94X19pbm5lcjo6YWZ0ZXJ7aGVpZ2h0OjZweDt3aWR0aDoycHh9LmVsLWNoZWNrYm94LmlzLWJvcmRlcmVkLmVsLWNoZWNrYm94LS1taW5pe3BhZGRpbmc6M3B4IDE1cHggM3B4IDEwcHg7Ym9yZGVyLXJhZGl1czozcHg7aGVpZ2h0OjI4cHh9LmVsLWNoZWNrYm94LmlzLWJvcmRlcmVkLmVsLWNoZWNrYm94LS1taW5pIC5lbC1jaGVja2JveF9fbGFiZWx7bGluZS1oZWlnaHQ6MTJweDtmb250LXNpemU6MTJweH0uZWwtY2hlY2tib3guaXMtYm9yZGVyZWQuZWwtY2hlY2tib3gtLW1pbmkgLmVsLWNoZWNrYm94X19pbm5lcntoZWlnaHQ6MTJweDt3aWR0aDoxMnB4fS5lbC1jaGVja2JveC5pcy1ib3JkZXJlZC5lbC1jaGVja2JveC0tbWluaSAuZWwtY2hlY2tib3hfX2lubmVyOjphZnRlcntoZWlnaHQ6NnB4O3dpZHRoOjJweH0uZWwtY2hlY2tib3hfX2lucHV0e2N1cnNvcjpwb2ludGVyO291dGxpbmU6MDtsaW5lLWhlaWdodDoxO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uZWwtY2hlY2tib3hfX2lucHV0LmlzLWRpc2FibGVkIC5lbC1jaGVja2JveF9faW5uZXJ7YmFja2dyb3VuZC1jb2xvcjojZWRmMmZjO2JvcmRlci1jb2xvcjojRENERkU2O2N1cnNvcjpub3QtYWxsb3dlZH0uZWwtY2hlY2tib3hfX2lucHV0LmlzLWRpc2FibGVkIC5lbC1jaGVja2JveF9faW5uZXI6OmFmdGVye2N1cnNvcjpub3QtYWxsb3dlZDtib3JkZXItY29sb3I6I0MwQzRDQ30uZWwtY2hlY2tib3hfX2lucHV0LmlzLWRpc2FibGVkIC5lbC1jaGVja2JveF9faW5uZXIrLmVsLWNoZWNrYm94X19sYWJlbHtjdXJzb3I6bm90LWFsbG93ZWR9LmVsLWNoZWNrYm94X19pbnB1dC5pcy1kaXNhYmxlZC5pcy1jaGVja2VkIC5lbC1jaGVja2JveF9faW5uZXJ7YmFja2dyb3VuZC1jb2xvcjojRjJGNkZDO2JvcmRlci1jb2xvcjojRENERkU2fS5lbC1jaGVja2JveF9faW5wdXQuaXMtZGlzYWJsZWQuaXMtY2hlY2tlZCAuZWwtY2hlY2tib3hfX2lubmVyOjphZnRlcntib3JkZXItY29sb3I6I0MwQzRDQ30uZWwtY2hlY2tib3hfX2lucHV0LmlzLWRpc2FibGVkLmlzLWluZGV0ZXJtaW5hdGUgLmVsLWNoZWNrYm94X19pbm5lcntiYWNrZ3JvdW5kLWNvbG9yOiNGMkY2RkM7Ym9yZGVyLWNvbG9yOiNEQ0RGRTZ9LmVsLWNoZWNrYm94X19pbnB1dC5pcy1kaXNhYmxlZC5pcy1pbmRldGVybWluYXRlIC5lbC1jaGVja2JveF9faW5uZXI6OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOiNDMEM0Q0M7Ym9yZGVyLWNvbG9yOiNDMEM0Q0N9LmVsLWNoZWNrYm94X19pbnB1dC5pcy1jaGVja2VkIC5lbC1jaGVja2JveF9faW5uZXIsLmVsLWNoZWNrYm94X19pbnB1dC5pcy1pbmRldGVybWluYXRlIC5lbC1jaGVja2JveF9faW5uZXJ7YmFja2dyb3VuZC1jb2xvcjojNDA5RUZGO2JvcmRlci1jb2xvcjojNDA5RUZGfS5lbC1jaGVja2JveF9faW5wdXQuaXMtZGlzYWJsZWQrc3Bhbi5lbC1jaGVja2JveF9fbGFiZWx7Y29sb3I6I0MwQzRDQztjdXJzb3I6bm90LWFsbG93ZWR9LmVsLWNoZWNrYm94X19pbnB1dC5pcy1jaGVja2VkIC5lbC1jaGVja2JveF9faW5uZXI6OmFmdGVye3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpIHNjYWxlWSgxKX0uZWwtY2hlY2tib3hfX2lucHV0LmlzLWNoZWNrZWQrLmVsLWNoZWNrYm94X19sYWJlbHtjb2xvcjojNDA5RUZGfS5lbC1jaGVja2JveF9faW5wdXQuaXMtZm9jdXMgLmVsLWNoZWNrYm94X19pbm5lcntib3JkZXItY29sb3I6IzQwOUVGRn0uZWwtY2hlY2tib3hfX2lucHV0LmlzLWluZGV0ZXJtaW5hdGUgLmVsLWNoZWNrYm94X19pbm5lcjo6YmVmb3Jle2NvbnRlbnQ6Jyc7cG9zaXRpb246YWJzb2x1dGU7ZGlzcGxheTpibG9jaztiYWNrZ3JvdW5kLWNvbG9yOiNGRkY7aGVpZ2h0OjJweDt0cmFuc2Zvcm06c2NhbGUoLjUpO2xlZnQ6MDtyaWdodDowO3RvcDo1cHh9LmVsLWNoZWNrYm94X19pbnB1dC5pcy1pbmRldGVybWluYXRlIC5lbC1jaGVja2JveF9faW5uZXI6OmFmdGVye2Rpc3BsYXk6bm9uZX0uZWwtY2hlY2tib3hfX2lubmVye2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO2JvcmRlcjoxcHggc29saWQgI0RDREZFNjtib3JkZXItcmFkaXVzOjJweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7d2lkdGg6MTRweDtoZWlnaHQ6MTRweDtiYWNrZ3JvdW5kLWNvbG9yOiNGRkY7ei1pbmRleDoxO3RyYW5zaXRpb246Ym9yZGVyLWNvbG9yIC4yNXMgY3ViaWMtYmV6aWVyKC43MSwtLjQ2LC4yOSwxLjQ2KSxiYWNrZ3JvdW5kLWNvbG9yIC4yNXMgY3ViaWMtYmV6aWVyKC43MSwtLjQ2LC4yOSwxLjQ2KX0uZWwtY2hlY2tib3hfX2lubmVyOmhvdmVye2JvcmRlci1jb2xvcjojNDA5RUZGfS5lbC1jaGVja2JveF9faW5uZXI6OmFmdGVye2JveC1zaXppbmc6Y29udGVudC1ib3g7Y29udGVudDpcXFwiXFxcIjtib3JkZXI6MXB4IHNvbGlkICNGRkY7Ym9yZGVyLWxlZnQ6MDtib3JkZXItdG9wOjA7aGVpZ2h0OjdweDtsZWZ0OjRweDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MXB4O3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpIHNjYWxlWSgwKTt3aWR0aDozcHg7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjE1cyBlYXNlLWluIC4wNXM7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXJ9LmVsLWNoZWNrYm94X19vcmlnaW5hbHtvcGFjaXR5OjA7b3V0bGluZTowO3Bvc2l0aW9uOmFic29sdXRlO21hcmdpbjowO3dpZHRoOjA7aGVpZ2h0OjA7ei1pbmRleDotMX0uZWwtY2hlY2tib3gtYnV0dG9uLC5lbC1jaGVja2JveC1idXR0b25fX2lubmVye2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlfS5lbC1jaGVja2JveF9fbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7cGFkZGluZy1sZWZ0OjEwcHg7bGluZS1oZWlnaHQ6MTlweDtmb250LXNpemU6MTRweH0uZWwtY2hlY2tib3g6bGFzdC1vZi10eXBle21hcmdpbi1yaWdodDowfS5lbC1jaGVja2JveC1idXR0b25fX2lubmVye2xpbmUtaGVpZ2h0OjE7Zm9udC13ZWlnaHQ6NTAwO3doaXRlLXNwYWNlOm5vd3JhcDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Y3Vyc29yOnBvaW50ZXI7YmFja2dyb3VuZDojRkZGO2JvcmRlcjoxcHggc29saWQgI0RDREZFNjtib3JkZXItbGVmdDowO2NvbG9yOiM2MDYyNjY7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7dGV4dC1hbGlnbjpjZW50ZXI7Ym94LXNpemluZzpib3JkZXItYm94O291dGxpbmU6MDttYXJnaW46MDt0cmFuc2l0aW9uOmFsbCAuM3MgY3ViaWMtYmV6aWVyKC42NDUsLjA0NSwuMzU1LDEpO3BhZGRpbmc6MTJweCAyMHB4O2ZvbnQtc2l6ZToxNHB4O2JvcmRlci1yYWRpdXM6MH0uZWwtY2hlY2tib3gtYnV0dG9uX19pbm5lci5pcy1yb3VuZHtwYWRkaW5nOjEycHggMjBweH0uZWwtY2hlY2tib3gtYnV0dG9uX19pbm5lcjpob3Zlcntjb2xvcjojNDA5RUZGfS5lbC1jaGVja2JveC1idXR0b25fX2lubmVyIFtjbGFzcyo9ZWwtaWNvbi1de2xpbmUtaGVpZ2h0Oi45fS5lbC1jaGVja2JveC1idXR0b25fX2lubmVyIFtjbGFzcyo9ZWwtaWNvbi1dK3NwYW57bWFyZ2luLWxlZnQ6NXB4fS5lbC1jaGVja2JveC1idXR0b25fX29yaWdpbmFse29wYWNpdHk6MDtvdXRsaW5lOjA7cG9zaXRpb246YWJzb2x1dGU7bWFyZ2luOjA7ei1pbmRleDotMX0uZWwtcmFkaW8sLmVsLXJhZGlvX19pbm5lciwuZWwtcmFkaW9fX2lucHV0e3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5lbC1jaGVja2JveC1idXR0b24uaXMtY2hlY2tlZCAuZWwtY2hlY2tib3gtYnV0dG9uX19pbm5lcntjb2xvcjojRkZGO2JhY2tncm91bmQtY29sb3I6IzQwOUVGRjtib3JkZXItY29sb3I6IzQwOUVGRjtib3gtc2hhZG93Oi0xcHggMCAwIDAgIzhjYzVmZn0uZWwtY2hlY2tib3gtYnV0dG9uLmlzLWNoZWNrZWQ6Zmlyc3QtY2hpbGQgLmVsLWNoZWNrYm94LWJ1dHRvbl9faW5uZXJ7Ym9yZGVyLWxlZnQtY29sb3I6IzQwOUVGRn0uZWwtY2hlY2tib3gtYnV0dG9uLmlzLWRpc2FibGVkIC5lbC1jaGVja2JveC1idXR0b25fX2lubmVye2NvbG9yOiNDMEM0Q0M7Y3Vyc29yOm5vdC1hbGxvd2VkO2JhY2tncm91bmQtaW1hZ2U6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiNGRkY7Ym9yZGVyLWNvbG9yOiNFQkVFRjU7Ym94LXNoYWRvdzpub25lfS5lbC1jaGVja2JveC1idXR0b24uaXMtZGlzYWJsZWQ6Zmlyc3QtY2hpbGQgLmVsLWNoZWNrYm94LWJ1dHRvbl9faW5uZXJ7Ym9yZGVyLWxlZnQtY29sb3I6I0VCRUVGNX0uZWwtY2hlY2tib3gtYnV0dG9uOmZpcnN0LWNoaWxkIC5lbC1jaGVja2JveC1idXR0b25fX2lubmVye2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjRENERkU2O2JvcmRlci1yYWRpdXM6NHB4IDAgMCA0cHg7Ym94LXNoYWRvdzpub25lIWltcG9ydGFudH0uZWwtY2hlY2tib3gtYnV0dG9uLmlzLWZvY3VzIC5lbC1jaGVja2JveC1idXR0b25fX2lubmVye2JvcmRlci1jb2xvcjojNDA5RUZGfS5lbC1jaGVja2JveC1idXR0b246bGFzdC1jaGlsZCAuZWwtY2hlY2tib3gtYnV0dG9uX19pbm5lcntib3JkZXItcmFkaXVzOjAgNHB4IDRweCAwfS5lbC1jaGVja2JveC1idXR0b24tLW1lZGl1bSAuZWwtY2hlY2tib3gtYnV0dG9uX19pbm5lcntwYWRkaW5nOjEwcHggMjBweDtmb250LXNpemU6MTRweDtib3JkZXItcmFkaXVzOjB9LmVsLWNoZWNrYm94LWJ1dHRvbi0tbWVkaXVtIC5lbC1jaGVja2JveC1idXR0b25fX2lubmVyLmlzLXJvdW5ke3BhZGRpbmc6MTBweCAyMHB4fS5lbC1jaGVja2JveC1idXR0b24tLXNtYWxsIC5lbC1jaGVja2JveC1idXR0b25fX2lubmVye3BhZGRpbmc6OXB4IDE1cHg7Zm9udC1zaXplOjEycHg7Ym9yZGVyLXJhZGl1czowfS5lbC1jaGVja2JveC1idXR0b24tLXNtYWxsIC5lbC1jaGVja2JveC1idXR0b25fX2lubmVyLmlzLXJvdW5ke3BhZGRpbmc6OXB4IDE1cHh9LmVsLWNoZWNrYm94LWJ1dHRvbi0tbWluaSAuZWwtY2hlY2tib3gtYnV0dG9uX19pbm5lcntwYWRkaW5nOjdweCAxNXB4O2ZvbnQtc2l6ZToxMnB4O2JvcmRlci1yYWRpdXM6MH0uZWwtY2hlY2tib3gtYnV0dG9uLS1taW5pIC5lbC1jaGVja2JveC1idXR0b25fX2lubmVyLmlzLXJvdW5ke3BhZGRpbmc6N3B4IDE1cHh9LmVsLWNoZWNrYm94LWdyb3Vwe2ZvbnQtc2l6ZTowfS5lbC1hdmF0YXIsLmVsLWNhc2NhZGVyLXBhbmVsLC5lbC1yYWRpbywuZWwtcmFkaW8tLW1lZGl1bS5pcy1ib3JkZXJlZCAuZWwtcmFkaW9fX2xhYmVsLC5lbC1yYWRpb19fbGFiZWx7Zm9udC1zaXplOjE0cHh9LmVsLXJhZGlve2NvbG9yOiM2MDYyNjY7Zm9udC13ZWlnaHQ6NTAwO2xpbmUtaGVpZ2h0OjE7Y3Vyc29yOnBvaW50ZXI7d2hpdGUtc3BhY2U6bm93cmFwO291dGxpbmU6MDttYXJnaW4tcmlnaHQ6MzBweH0uZWwtY2FzY2FkZXItbm9kZT4uZWwtcmFkaW8sLmVsLXJhZGlvOmxhc3QtY2hpbGR7bWFyZ2luLXJpZ2h0OjB9LmVsLXJhZGlvLmlzLWJvcmRlcmVke3BhZGRpbmc6MTJweCAyMHB4IDAgMTBweDtib3JkZXItcmFkaXVzOjRweDtib3JkZXI6MXB4IHNvbGlkICNEQ0RGRTY7Ym94LXNpemluZzpib3JkZXItYm94O2hlaWdodDo0MHB4fS5lbC1jYXNjYWRlci1tZW51LC5lbC1jYXNjYWRlci1tZW51X19saXN0LC5lbC1yYWRpb19faW5uZXJ7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3h9LmVsLXJhZGlvLmlzLWJvcmRlcmVkLmlzLWNoZWNrZWR7Ym9yZGVyLWNvbG9yOiM0MDlFRkZ9LmVsLXJhZGlvLmlzLWJvcmRlcmVkLmlzLWRpc2FibGVke2N1cnNvcjpub3QtYWxsb3dlZDtib3JkZXItY29sb3I6I0VCRUVGNX0uZWwtcmFkaW9fX2lucHV0LmlzLWRpc2FibGVkIC5lbC1yYWRpb19faW5uZXIsLmVsLXJhZGlvX19pbnB1dC5pcy1kaXNhYmxlZC5pcy1jaGVja2VkIC5lbC1yYWRpb19faW5uZXJ7YmFja2dyb3VuZC1jb2xvcjojRjVGN0ZBO2JvcmRlci1jb2xvcjojRTRFN0VEfS5lbC1yYWRpby5pcy1ib3JkZXJlZCsuZWwtcmFkaW8uaXMtYm9yZGVyZWR7bWFyZ2luLWxlZnQ6MTBweH0uZWwtcmFkaW8tLW1lZGl1bS5pcy1ib3JkZXJlZHtwYWRkaW5nOjEwcHggMjBweCAwIDEwcHg7Ym9yZGVyLXJhZGl1czo0cHg7aGVpZ2h0OjM2cHh9LmVsLXJhZGlvLS1taW5pLmlzLWJvcmRlcmVkIC5lbC1yYWRpb19fbGFiZWwsLmVsLXJhZGlvLS1zbWFsbC5pcy1ib3JkZXJlZCAuZWwtcmFkaW9fX2xhYmVse2ZvbnQtc2l6ZToxMnB4fS5lbC1yYWRpby0tbWVkaXVtLmlzLWJvcmRlcmVkIC5lbC1yYWRpb19faW5uZXJ7aGVpZ2h0OjE0cHg7d2lkdGg6MTRweH0uZWwtcmFkaW8tLXNtYWxsLmlzLWJvcmRlcmVke3BhZGRpbmc6OHB4IDE1cHggMCAxMHB4O2JvcmRlci1yYWRpdXM6M3B4O2hlaWdodDozMnB4fS5lbC1yYWRpby0tc21hbGwuaXMtYm9yZGVyZWQgLmVsLXJhZGlvX19pbm5lcntoZWlnaHQ6MTJweDt3aWR0aDoxMnB4fS5lbC1yYWRpby0tbWluaS5pcy1ib3JkZXJlZHtwYWRkaW5nOjZweCAxNXB4IDAgMTBweDtib3JkZXItcmFkaXVzOjNweDtoZWlnaHQ6MjhweH0uZWwtcmFkaW8tLW1pbmkuaXMtYm9yZGVyZWQgLmVsLXJhZGlvX19pbm5lcntoZWlnaHQ6MTJweDt3aWR0aDoxMnB4fS5lbC1yYWRpb19faW5wdXR7d2hpdGUtc3BhY2U6bm93cmFwO2N1cnNvcjpwb2ludGVyO291dGxpbmU6MDtsaW5lLWhlaWdodDoxO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uZWwtcmFkaW9fX2lucHV0LmlzLWRpc2FibGVkIC5lbC1yYWRpb19faW5uZXJ7Y3Vyc29yOm5vdC1hbGxvd2VkfS5lbC1yYWRpb19faW5wdXQuaXMtZGlzYWJsZWQgLmVsLXJhZGlvX19pbm5lcjo6YWZ0ZXJ7Y3Vyc29yOm5vdC1hbGxvd2VkO2JhY2tncm91bmQtY29sb3I6I0Y1RjdGQX0uZWwtcmFkaW9fX2lucHV0LmlzLWRpc2FibGVkIC5lbC1yYWRpb19faW5uZXIrLmVsLXJhZGlvX19sYWJlbHtjdXJzb3I6bm90LWFsbG93ZWR9LmVsLXJhZGlvX19pbnB1dC5pcy1kaXNhYmxlZC5pcy1jaGVja2VkIC5lbC1yYWRpb19faW5uZXI6OmFmdGVye2JhY2tncm91bmQtY29sb3I6I0MwQzRDQ30uZWwtcmFkaW9fX2lucHV0LmlzLWRpc2FibGVkK3NwYW4uZWwtcmFkaW9fX2xhYmVse2NvbG9yOiNDMEM0Q0M7Y3Vyc29yOm5vdC1hbGxvd2VkfS5lbC1yYWRpb19faW5wdXQuaXMtY2hlY2tlZCAuZWwtcmFkaW9fX2lubmVye2JvcmRlci1jb2xvcjojNDA5RUZGO2JhY2tncm91bmQ6IzQwOUVGRn0uZWwtcmFkaW9fX2lucHV0LmlzLWNoZWNrZWQgLmVsLXJhZGlvX19pbm5lcjo6YWZ0ZXJ7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLC01MCUpIHNjYWxlKDEpfS5lbC1yYWRpb19faW5wdXQuaXMtY2hlY2tlZCsuZWwtcmFkaW9fX2xhYmVse2NvbG9yOiM0MDlFRkZ9LmVsLXJhZGlvX19pbnB1dC5pcy1mb2N1cyAuZWwtcmFkaW9fX2lubmVye2JvcmRlci1jb2xvcjojNDA5RUZGfS5lbC1yYWRpb19faW5uZXJ7Ym9yZGVyOjFweCBzb2xpZCAjRENERkU2O2JvcmRlci1yYWRpdXM6MTAwJTt3aWR0aDoxNHB4O2hlaWdodDoxNHB4O2JhY2tncm91bmQtY29sb3I6I0ZGRjtjdXJzb3I6cG9pbnRlcjtib3gtc2l6aW5nOmJvcmRlci1ib3h9LmVsLXJhZGlvX19pbm5lcjpob3Zlcntib3JkZXItY29sb3I6IzQwOUVGRn0uZWwtcmFkaW9fX2lubmVyOjphZnRlcnt3aWR0aDo0cHg7aGVpZ2h0OjRweDtib3JkZXItcmFkaXVzOjEwMCU7YmFja2dyb3VuZC1jb2xvcjojRkZGO2NvbnRlbnQ6XFxcIlxcXCI7cG9zaXRpb246YWJzb2x1dGU7bGVmdDo1MCU7dG9wOjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsLTUwJSkgc2NhbGUoMCk7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjE1cyBlYXNlLWlufS5lbC1yYWRpb19fb3JpZ2luYWx7b3BhY2l0eTowO291dGxpbmU6MDtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4Oi0xO3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO21hcmdpbjowfS5lbC1yYWRpbzpmb2N1czpub3QoLmlzLWZvY3VzKTpub3QoOmFjdGl2ZSk6bm90KC5pcy1kaXNhYmxlZCkgLmVsLXJhZGlvX19pbm5lcntib3gtc2hhZG93OjAgMCAycHggMnB4ICM0MDlFRkZ9LmVsLXJhZGlvX19sYWJlbHtwYWRkaW5nLWxlZnQ6MTBweH0uZWwtc2Nyb2xsYmFye292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0uZWwtc2Nyb2xsYmFyOmFjdGl2ZT4uZWwtc2Nyb2xsYmFyX19iYXIsLmVsLXNjcm9sbGJhcjpmb2N1cz4uZWwtc2Nyb2xsYmFyX19iYXIsLmVsLXNjcm9sbGJhcjpob3Zlcj4uZWwtc2Nyb2xsYmFyX19iYXJ7b3BhY2l0eToxO3RyYW5zaXRpb246b3BhY2l0eSAzNDBtcyBlYXNlLW91dH0uZWwtc2Nyb2xsYmFyX193cmFwe292ZXJmbG93OnNjcm9sbDtoZWlnaHQ6MTAwJX0uZWwtc2Nyb2xsYmFyX193cmFwLS1oaWRkZW4tZGVmYXVsdHtzY3JvbGxiYXItd2lkdGg6bm9uZX0uZWwtc2Nyb2xsYmFyX193cmFwLS1oaWRkZW4tZGVmYXVsdDo6LXdlYmtpdC1zY3JvbGxiYXJ7d2lkdGg6MDtoZWlnaHQ6MH0uZWwtc2Nyb2xsYmFyX190aHVtYntwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmJsb2NrO3dpZHRoOjA7aGVpZ2h0OjA7Y3Vyc29yOnBvaW50ZXI7Ym9yZGVyLXJhZGl1czppbmhlcml0O2JhY2tncm91bmQtY29sb3I6cmdiYSgxNDQsMTQ3LDE1MywuMyk7dHJhbnNpdGlvbjouM3MgYmFja2dyb3VuZC1jb2xvcn0uZWwtc2Nyb2xsYmFyX190aHVtYjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMTQ0LDE0NywxNTMsLjUpfS5lbC1zY3JvbGxiYXJfX2Jhcntwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDoycHg7Ym90dG9tOjJweDt6LWluZGV4OjE7Ym9yZGVyLXJhZGl1czo0cHg7b3BhY2l0eTowO3RyYW5zaXRpb246b3BhY2l0eSAxMjBtcyBlYXNlLW91dH0uZWwtc2Nyb2xsYmFyX19iYXIuaXMtdmVydGljYWx7d2lkdGg6NnB4O3RvcDoycHh9LmVsLXNjcm9sbGJhcl9fYmFyLmlzLXZlcnRpY2FsPmRpdnt3aWR0aDoxMDAlfS5lbC1zY3JvbGxiYXJfX2Jhci5pcy1ob3Jpem9udGFse2hlaWdodDo2cHg7bGVmdDoycHh9LmVsLXNjcm9sbGJhcl9fYmFyLmlzLWhvcml6b250YWw+ZGl2e2hlaWdodDoxMDAlfS5lbC1jYXNjYWRlci1wYW5lbHtkaXNwbGF5OmZsZXg7Ym9yZGVyLXJhZGl1czo0cHh9LmVsLWNhc2NhZGVyLXBhbmVsLmlzLWJvcmRlcmVke2JvcmRlcjoxcHggc29saWQgI0U0RTdFRDtib3JkZXItcmFkaXVzOjRweH0uZWwtY2FzY2FkZXItbWVudXttaW4td2lkdGg6MTgwcHg7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOiM2MDYyNjY7Ym9yZGVyLXJpZ2h0OnNvbGlkIDFweCAjRTRFN0VEfS5lbC1jYXNjYWRlci1tZW51Omxhc3QtY2hpbGR7Ym9yZGVyLXJpZ2h0Om5vbmV9LmVsLWNhc2NhZGVyLW1lbnVfX3dyYXB7aGVpZ2h0OjIwNHB4fS5lbC1jYXNjYWRlci1tZW51X19saXN0e3Bvc2l0aW9uOnJlbGF0aXZlO21pbi1oZWlnaHQ6MTAwJTttYXJnaW46MDtwYWRkaW5nOjZweCAwO2xpc3Qtc3R5bGU6bm9uZTtib3gtc2l6aW5nOmJvcmRlci1ib3h9LmVsLWNhc2NhZGVyLW1lbnVfX2hvdmVyLXpvbmV7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7cG9pbnRlci1ldmVudHM6bm9uZX0uZWwtY2FzY2FkZXItbWVudV9fZW1wdHktdGV4dHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO2xlZnQ6NTAlO3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwtNTAlKTt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjojQzBDNENDfS5lbC1jYXNjYWRlci1ub2Rle3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7cGFkZGluZzowIDMwcHggMCAyMHB4O2hlaWdodDozNHB4O2xpbmUtaGVpZ2h0OjM0cHg7b3V0bGluZTowfS5lbC1jYXNjYWRlci1ub2RlLmlzLXNlbGVjdGFibGUuaW4tYWN0aXZlLXBhdGh7Y29sb3I6IzYwNjI2Nn0uZWwtY2FzY2FkZXItbm9kZS5pbi1hY3RpdmUtcGF0aCwuZWwtY2FzY2FkZXItbm9kZS5pcy1hY3RpdmUsLmVsLWNhc2NhZGVyLW5vZGUuaXMtc2VsZWN0YWJsZS5pbi1jaGVja2VkLXBhdGh7Y29sb3I6IzQwOUVGRjtmb250LXdlaWdodDo3MDB9LmVsLWNhc2NhZGVyLW5vZGU6bm90KC5pcy1kaXNhYmxlZCl7Y3Vyc29yOnBvaW50ZXJ9LmVsLWNhc2NhZGVyLW5vZGU6bm90KC5pcy1kaXNhYmxlZCk6Zm9jdXMsLmVsLWNhc2NhZGVyLW5vZGU6bm90KC5pcy1kaXNhYmxlZCk6aG92ZXJ7YmFja2dyb3VuZDojRjVGN0ZBfS5lbC1jYXNjYWRlci1ub2RlLmlzLWRpc2FibGVke2NvbG9yOiNDMEM0Q0M7Y3Vyc29yOm5vdC1hbGxvd2VkfS5lbC1jYXNjYWRlci1ub2RlX19wcmVmaXh7cG9zaXRpb246YWJzb2x1dGU7bGVmdDoxMHB4fS5lbC1jYXNjYWRlci1ub2RlX19wb3N0Zml4e3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjEwcHh9LmVsLWNhc2NhZGVyLW5vZGVfX2xhYmVse2ZsZXg6MTtwYWRkaW5nOjAgMTBweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9LmVsLWNhc2NhZGVyLW5vZGU+LmVsLXJhZGlvIC5lbC1yYWRpb19fbGFiZWx7cGFkZGluZy1sZWZ0OjB9LmVsLWF2YXRhcntkaXNwbGF5OmlubGluZS1ibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3g7dGV4dC1hbGlnbjpjZW50ZXI7b3ZlcmZsb3c6aGlkZGVuO2NvbG9yOiNmZmY7YmFja2dyb3VuZDojQzBDNENDO3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHg7bGluZS1oZWlnaHQ6NDBweH0uZWwtZHJhd2VyLC5lbC1kcmF3ZXJfX2JvZHk+Knstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveH0uZWwtYXZhdGFyPmltZ3tkaXNwbGF5OmJsb2NrO2hlaWdodDoxMDAlO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uZWwtZW1wdHlfX2ltYWdlIGltZywuZWwtZW1wdHlfX2ltYWdlIHN2Z3t2ZXJ0aWNhbC1hbGlnbjp0b3A7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uZWwtYXZhdGFyLS1jaXJjbGV7Ym9yZGVyLXJhZGl1czo1MCV9LmVsLWF2YXRhci0tc3F1YXJle2JvcmRlci1yYWRpdXM6NHB4fS5lbC1hdmF0YXItLWljb257Zm9udC1zaXplOjE4cHh9LmVsLWF2YXRhci0tbGFyZ2V7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDtsaW5lLWhlaWdodDo0MHB4fS5lbC1hdmF0YXItLW1lZGl1bXt3aWR0aDozNnB4O2hlaWdodDozNnB4O2xpbmUtaGVpZ2h0OjM2cHh9LmVsLWF2YXRhci0tc21hbGx7d2lkdGg6MjhweDtoZWlnaHQ6MjhweDtsaW5lLWhlaWdodDoyOHB4fUBrZXlmcmFtZXMgZWwtZHJhd2VyLWZhZGUtaW57MCV7b3BhY2l0eTowfTEwMCV7b3BhY2l0eToxfX1Aa2V5ZnJhbWVzIHJ0bC1kcmF3ZXItaW57MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZSgxMDAlLDApfTEwMCV7dHJhbnNmb3JtOnRyYW5zbGF0ZSgwLDApfX1Aa2V5ZnJhbWVzIHJ0bC1kcmF3ZXItb3V0ezAle3RyYW5zZm9ybTp0cmFuc2xhdGUoMCwwKX0xMDAle3RyYW5zZm9ybTp0cmFuc2xhdGUoMTAwJSwwKX19QGtleWZyYW1lcyBsdHItZHJhd2VyLWluezAle3RyYW5zZm9ybTp0cmFuc2xhdGUoLTEwMCUsMCl9MTAwJXt0cmFuc2Zvcm06dHJhbnNsYXRlKDAsMCl9fUBrZXlmcmFtZXMgbHRyLWRyYXdlci1vdXR7MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZSgwLDApfTEwMCV7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtMTAwJSwwKX19QGtleWZyYW1lcyB0dGItZHJhd2VyLWluezAle3RyYW5zZm9ybTp0cmFuc2xhdGUoMCwtMTAwJSl9MTAwJXt0cmFuc2Zvcm06dHJhbnNsYXRlKDAsMCl9fUBrZXlmcmFtZXMgdHRiLWRyYXdlci1vdXR7MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZSgwLDApfTEwMCV7dHJhbnNmb3JtOnRyYW5zbGF0ZSgwLC0xMDAlKX19QGtleWZyYW1lcyBidHQtZHJhd2VyLWluezAle3RyYW5zZm9ybTp0cmFuc2xhdGUoMCwxMDAlKX0xMDAle3RyYW5zZm9ybTp0cmFuc2xhdGUoMCwwKX19QGtleWZyYW1lcyBidHQtZHJhd2VyLW91dHswJXt0cmFuc2Zvcm06dHJhbnNsYXRlKDAsMCl9MTAwJXt0cmFuc2Zvcm06dHJhbnNsYXRlKDAsMTAwJSl9fS5lbC1kcmF3ZXJ7cG9zaXRpb246YWJzb2x1dGU7Ym94LXNpemluZzpib3JkZXItYm94O2JhY2tncm91bmQtY29sb3I6I0ZGRjtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2JveC1zaGFkb3c6MCA4cHggMTBweCAtNXB4IHJnYmEoMCwwLDAsLjIpLDAgMTZweCAyNHB4IDJweCByZ2JhKDAsMCwwLC4xNCksMCA2cHggMzBweCA1cHggcmdiYSgwLDAsMCwuMTIpO292ZXJmbG93OmhpZGRlbjtvdXRsaW5lOjB9LmVsLWRyYXdlci5ydGx7YW5pbWF0aW9uOnJ0bC1kcmF3ZXItb3V0IC4zcztyaWdodDowfS5lbC1kcmF3ZXJfX29wZW4gLmVsLWRyYXdlci5ydGx7YW5pbWF0aW9uOnJ0bC1kcmF3ZXItaW4gLjNzIDFtc30uZWwtZHJhd2VyLmx0cnthbmltYXRpb246bHRyLWRyYXdlci1vdXQgLjNzO2xlZnQ6MH0uZWwtZHJhd2VyX19vcGVuIC5lbC1kcmF3ZXIubHRye2FuaW1hdGlvbjpsdHItZHJhd2VyLWluIC4zcyAxbXN9LmVsLWRyYXdlci50dGJ7YW5pbWF0aW9uOnR0Yi1kcmF3ZXItb3V0IC4zczt0b3A6MH0uZWwtZHJhd2VyX19vcGVuIC5lbC1kcmF3ZXIudHRie2FuaW1hdGlvbjp0dGItZHJhd2VyLWluIC4zcyAxbXN9LmVsLWRyYXdlci5idHR7YW5pbWF0aW9uOmJ0dC1kcmF3ZXItb3V0IC4zcztib3R0b206MH0uZWwtZHJhd2VyX19vcGVuIC5lbC1kcmF3ZXIuYnR0e2FuaW1hdGlvbjpidHQtZHJhd2VyLWluIC4zcyAxbXN9LmVsLWRyYXdlcl9fd3JhcHBlcntwb3NpdGlvbjpmaXhlZDt0b3A6MDtyaWdodDowO2JvdHRvbTowO2xlZnQ6MDtvdmVyZmxvdzpoaWRkZW47bWFyZ2luOjB9LmVsLWRyYXdlcl9faGVhZGVye2FsaWduLWl0ZW1zOmNlbnRlcjtjb2xvcjojNzI3NjdiO2Rpc3BsYXk6ZmxleDttYXJnaW4tYm90dG9tOjMycHg7cGFkZGluZzoyMHB4IDIwcHggMH0uZWwtZHJhd2VyX19oZWFkZXI+OmZpcnN0LWNoaWxke2ZsZXg6MX0uZWwtZHJhd2VyX190aXRsZXttYXJnaW46MDtmbGV4OjE7bGluZS1oZWlnaHQ6aW5oZXJpdDtmb250LXNpemU6MXJlbX0uZWwtZHJhd2VyX19jbG9zZS1idG57Ym9yZGVyOm5vbmU7Y3Vyc29yOnBvaW50ZXI7Zm9udC1zaXplOjIwcHg7Y29sb3I6aW5oZXJpdDtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5lbC1kcmF3ZXJfX2JvZHl7ZmxleDoxO292ZXJmbG93OmF1dG99LmVsLWRyYXdlcl9fYm9keT4qe2JveC1zaXppbmc6Ym9yZGVyLWJveH0uZWwtZHJhd2VyLmx0ciwuZWwtZHJhd2VyLnJ0bHtoZWlnaHQ6MTAwJTt0b3A6MDtib3R0b206MH0uZWwtZHJhd2VyLmJ0dCwuZWwtZHJhd2VyLnR0Ynt3aWR0aDoxMDAlO2xlZnQ6MDtyaWdodDowfS5lbC1kcmF3ZXJfX2NvbnRhaW5lcntwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjA7cmlnaHQ6MDt0b3A6MDtib3R0b206MDtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfS5lbC1kcmF3ZXItZmFkZS1lbnRlci1hY3RpdmV7YW5pbWF0aW9uOmVsLWRyYXdlci1mYWRlLWluIC4zc30uZWwtZHJhd2VyLWZhZGUtbGVhdmUtYWN0aXZle2FuaW1hdGlvbjplbC1kcmF3ZXItZmFkZS1pbiAuM3MgcmV2ZXJzZX0uZWwtc3RhdGlzdGlje3dpZHRoOjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94O21hcmdpbjowO3BhZGRpbmc6MDtjb2xvcjojMDAwO2ZvbnQtdmFyaWFudDp0YWJ1bGFyLW51bXM7bGlzdC1zdHlsZTpub25lO2ZvbnQtZmVhdHVyZS1zZXR0aW5nczpcXFwidG51bVxcXCI7dGV4dC1hbGlnbjpjZW50ZXJ9LmVsLXN0YXRpc3RpYyAuaGVhZHttYXJnaW4tYm90dG9tOjRweDtjb2xvcjojNjA2MjY2O2ZvbnQtc2l6ZToxM3B4fS5lbC1zdGF0aXN0aWMgLmNvbntmb250LWZhbWlseTpTYW5zLXNlcmlmO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtjb2xvcjojMzAzMTMzfS5lbC1zdGF0aXN0aWMgLmNvbiAubnVtYmVye2ZvbnQtc2l6ZToyMHB4O3BhZGRpbmc6MCA0cHh9LmVsLXN0YXRpc3RpYyAuY29uIHNwYW57ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luOjA7bGluZS1oZWlnaHQ6MTAwJX0uZWwtcG9wY29uZmlybV9fbWFpbiwuZWwtc2tlbGV0b25fX2ltYWdle2Rpc3BsYXk6LW1zLWZsZXhib3g7LXdlYmtpdC1ib3gtYWxpZ246Y2VudGVyO2Rpc3BsYXk6LXdlYmtpdC1ib3h9LmVsLXBvcGNvbmZpcm1fX21haW57ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0uZWwtcG9wY29uZmlybV9faWNvbnttYXJnaW4tcmlnaHQ6NXB4fS5lbC1wb3Bjb25maXJtX19hY3Rpb257dGV4dC1hbGlnbjpyaWdodDttYXJnaW46MH1Aa2V5ZnJhbWVzIGVsLXNrZWxldG9uLWxvYWRpbmd7MCV7YmFja2dyb3VuZC1wb3NpdGlvbjoxMDAlIDUwJX0xMDAle2JhY2tncm91bmQtcG9zaXRpb246MCA1MCV9fS5lbC1za2VsZXRvbnt3aWR0aDoxMDAlfS5lbC1za2VsZXRvbl9fZmlyc3QtbGluZSwuZWwtc2tlbGV0b25fX3BhcmFncmFwaHtoZWlnaHQ6MTZweDttYXJnaW4tdG9wOjE2cHg7YmFja2dyb3VuZDojZjJmMmYyfS5lbC1za2VsZXRvbi5pcy1hbmltYXRlZCAuZWwtc2tlbGV0b25fX2l0ZW17YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoOTBkZWcsI2YyZjJmMiAyNSUsI2U2ZTZlNiAzNyUsI2YyZjJmMiA2MyUpO2JhY2tncm91bmQtc2l6ZTo0MDAlIDEwMCU7YW5pbWF0aW9uOmVsLXNrZWxldG9uLWxvYWRpbmcgMS40cyBlYXNlIGluZmluaXRlfS5lbC1za2VsZXRvbl9faXRlbXtiYWNrZ3JvdW5kOiNmMmYyZjI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjE2cHg7Ym9yZGVyLXJhZGl1czo0cHg7d2lkdGg6MTAwJX0uZWwtc2tlbGV0b25fX2NpcmNsZXtib3JkZXItcmFkaXVzOjUwJTt3aWR0aDozNnB4O2hlaWdodDozNnB4O2xpbmUtaGVpZ2h0OjM2cHh9LmVsLXNrZWxldG9uX19jaXJjbGUtLWxne3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHg7bGluZS1oZWlnaHQ6NDBweH0uZWwtc2tlbGV0b25fX2NpcmNsZS0tbWR7d2lkdGg6MjhweDtoZWlnaHQ6MjhweDtsaW5lLWhlaWdodDoyOHB4fS5lbC1za2VsZXRvbl9fYnV0dG9ue2hlaWdodDo0MHB4O3dpZHRoOjY0cHg7Ym9yZGVyLXJhZGl1czo0cHh9LmVsLXNrZWxldG9uX19we3dpZHRoOjEwMCV9LmVsLXNrZWxldG9uX19wLmlzLWxhc3R7d2lkdGg6NjElfS5lbC1za2VsZXRvbl9fcC5pcy1maXJzdHt3aWR0aDozMyV9LmVsLXNrZWxldG9uX190ZXh0e3dpZHRoOjEwMCU7aGVpZ2h0OjEzcHh9LmVsLXNrZWxldG9uX19jYXB0aW9ue2hlaWdodDoxMnB4fS5lbC1za2VsZXRvbl9faDF7aGVpZ2h0OjIwcHh9LmVsLXNrZWxldG9uX19oM3toZWlnaHQ6MThweH0uZWwtc2tlbGV0b25fX2g1e2hlaWdodDoxNnB4fS5lbC1za2VsZXRvbl9faW1hZ2V7d2lkdGg6dW5zZXQ7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2JvcmRlci1yYWRpdXM6MH0uZWwtc2tlbGV0b25fX2ltYWdlIHN2Z3tmaWxsOiNEQ0RERTA7d2lkdGg6MjIlO2hlaWdodDoyMiV9LmVsLWVtcHR5e2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtmbGV4LWRpcmVjdGlvbjpjb2x1bW47dGV4dC1hbGlnbjpjZW50ZXI7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6NDBweCAwfS5lbC1lbXB0eV9faW1hZ2V7d2lkdGg6MTYwcHh9LmVsLWVtcHR5X19pbWFnZSBpbWd7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lOy1vLW9iamVjdC1maXQ6Y29udGFpbjtvYmplY3QtZml0OmNvbnRhaW59LmVsLWVtcHR5X19pbWFnZSBzdmd7ZmlsbDojRENEREUwfS5lbC1lbXB0eV9fZGVzY3JpcHRpb257bWFyZ2luLXRvcDoyMHB4fS5lbC1lbXB0eV9fZGVzY3JpcHRpb24gcHttYXJnaW46MDtmb250LXNpemU6MTRweDtjb2xvcjojOTA5Mzk5fS5lbC1lbXB0eV9fYm90dG9tLC5lbC1yZXN1bHRfX3RpdGxle21hcmdpbi10b3A6MjBweH0uZWwtZGVzY3JpcHRpb25ze2JveC1zaXppbmc6Ym9yZGVyLWJveDtmb250LXNpemU6MTRweDtjb2xvcjojMzAzMTMzfS5lbC1kZXNjcmlwdGlvbnNfX2hlYWRlcntkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6Y2VudGVyO21hcmdpbi1ib3R0b206MjBweH0uZWwtZGVzY3JpcHRpb25zX190aXRsZXtmb250LXNpemU6MTZweDtmb250LXdlaWdodDo3MDB9LmVsLWRlc2NyaXB0aW9ucy0tbWluaSwuZWwtZGVzY3JpcHRpb25zLS1zbWFsbHtmb250LXNpemU6MTJweH0uZWwtZGVzY3JpcHRpb25zX19ib2R5e2NvbG9yOiM2MDYyNjY7YmFja2dyb3VuZC1jb2xvcjojRkZGfS5lbC1kZXNjcmlwdGlvbnNfX2JvZHkgLmVsLWRlc2NyaXB0aW9uc19fdGFibGV7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO3dpZHRoOjEwMCU7dGFibGUtbGF5b3V0OmZpeGVkfS5lbC1kZXNjcmlwdGlvbnNfX2JvZHkgLmVsLWRlc2NyaXB0aW9uc19fdGFibGUgLmVsLWRlc2NyaXB0aW9ucy1pdGVtX19jZWxse2JveC1zaXppbmc6Ym9yZGVyLWJveDt0ZXh0LWFsaWduOmxlZnQ7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuNX0uZWwtZGVzY3JpcHRpb25zX19ib2R5IC5lbC1kZXNjcmlwdGlvbnNfX3RhYmxlIC5lbC1kZXNjcmlwdGlvbnMtaXRlbV9fY2VsbC5pcy1sZWZ0e3RleHQtYWxpZ246bGVmdH0uZWwtZGVzY3JpcHRpb25zX19ib2R5IC5lbC1kZXNjcmlwdGlvbnNfX3RhYmxlIC5lbC1kZXNjcmlwdGlvbnMtaXRlbV9fY2VsbC5pcy1jZW50ZXJ7dGV4dC1hbGlnbjpjZW50ZXJ9LmVsLWRlc2NyaXB0aW9uc19fYm9keSAuZWwtZGVzY3JpcHRpb25zX190YWJsZSAuZWwtZGVzY3JpcHRpb25zLWl0ZW1fX2NlbGwuaXMtcmlnaHR7dGV4dC1hbGlnbjpyaWdodH0uZWwtZGVzY3JpcHRpb25zIC5pcy1ib3JkZXJlZHt0YWJsZS1sYXlvdXQ6YXV0b30uZWwtZGVzY3JpcHRpb25zIC5pcy1ib3JkZXJlZCAuZWwtZGVzY3JpcHRpb25zLWl0ZW1fX2NlbGx7Ym9yZGVyOjFweCBzb2xpZCAjRUJFRUY1O3BhZGRpbmc6MTJweCAxMHB4fS5lbC1kZXNjcmlwdGlvbnMgOm5vdCguaXMtYm9yZGVyZWQpIC5lbC1kZXNjcmlwdGlvbnMtaXRlbV9fY2VsbHtwYWRkaW5nLWJvdHRvbToxMnB4fS5lbC1kZXNjcmlwdGlvbnMtLW1lZGl1bS5pcy1ib3JkZXJlZCAuZWwtZGVzY3JpcHRpb25zLWl0ZW1fX2NlbGx7cGFkZGluZzoxMHB4fS5lbC1kZXNjcmlwdGlvbnMtLW1lZGl1bTpub3QoLmlzLWJvcmRlcmVkKSAuZWwtZGVzY3JpcHRpb25zLWl0ZW1fX2NlbGx7cGFkZGluZy1ib3R0b206MTBweH0uZWwtZGVzY3JpcHRpb25zLS1zbWFsbC5pcy1ib3JkZXJlZCAuZWwtZGVzY3JpcHRpb25zLWl0ZW1fX2NlbGx7cGFkZGluZzo4cHggMTBweH0uZWwtZGVzY3JpcHRpb25zLS1zbWFsbDpub3QoLmlzLWJvcmRlcmVkKSAuZWwtZGVzY3JpcHRpb25zLWl0ZW1fX2NlbGx7cGFkZGluZy1ib3R0b206OHB4fS5lbC1kZXNjcmlwdGlvbnMtLW1pbmkuaXMtYm9yZGVyZWQgLmVsLWRlc2NyaXB0aW9ucy1pdGVtX19jZWxse3BhZGRpbmc6NnB4IDEwcHh9LmVsLWRlc2NyaXB0aW9ucy0tbWluaTpub3QoLmlzLWJvcmRlcmVkKSAuZWwtZGVzY3JpcHRpb25zLWl0ZW1fX2NlbGx7cGFkZGluZy1ib3R0b206NnB4fS5lbC1kZXNjcmlwdGlvbnMtaXRlbXt2ZXJ0aWNhbC1hbGlnbjp0b3B9LmVsLWRlc2NyaXB0aW9ucy1pdGVtX19jb250YWluZXJ7ZGlzcGxheTpmbGV4fS5lbC1kZXNjcmlwdGlvbnMtaXRlbV9fY29udGFpbmVyIC5lbC1kZXNjcmlwdGlvbnMtaXRlbV9fY29udGVudCwuZWwtZGVzY3JpcHRpb25zLWl0ZW1fX2NvbnRhaW5lciAuZWwtZGVzY3JpcHRpb25zLWl0ZW1fX2xhYmVse2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6YmFzZWxpbmV9LmVsLWRlc2NyaXB0aW9ucy1pdGVtX19jb250YWluZXIgLmVsLWRlc2NyaXB0aW9ucy1pdGVtX19jb250ZW50e2ZsZXg6MX0uZWwtZGVzY3JpcHRpb25zLWl0ZW1fX2xhYmVsLmhhcy1jb2xvbjo6YWZ0ZXJ7Y29udGVudDonOic7cG9zaXRpb246cmVsYXRpdmU7dG9wOi0uNXB4fS5lbC1kZXNjcmlwdGlvbnMtaXRlbV9fbGFiZWwuaXMtYm9yZGVyZWQtbGFiZWx7Zm9udC13ZWlnaHQ6NzAwO2NvbG9yOiM5MDkzOTk7YmFja2dyb3VuZDojZmFmYWZhfS5lbC1kZXNjcmlwdGlvbnMtaXRlbV9fbGFiZWw6bm90KC5pcy1ib3JkZXJlZC1sYWJlbCl7bWFyZ2luLXJpZ2h0OjEwcHh9LmVsLWRlc2NyaXB0aW9ucy1pdGVtX19jb250ZW50e3dvcmQtYnJlYWs6YnJlYWstd29yZDtvdmVyZmxvdy13cmFwOmJyZWFrLXdvcmR9LmVsLXJlc3VsdHtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3RleHQtYWxpZ246Y2VudGVyO2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjQwcHggMzBweH0uZWwtcmVzdWx0X19pY29uIHN2Z3t3aWR0aDo2NHB4O2hlaWdodDo2NHB4fS5lbC1yZXN1bHRfX3RpdGxlIHB7bWFyZ2luOjA7Zm9udC1zaXplOjIwcHg7Y29sb3I6IzMwMzEzMztsaW5lLWhlaWdodDoxLjN9LmVsLXJlc3VsdF9fc3VidGl0bGV7bWFyZ2luLXRvcDoxMHB4fS5lbC1yZXN1bHRfX3N1YnRpdGxlIHB7bWFyZ2luOjA7Zm9udC1zaXplOjE0cHg7Y29sb3I6IzYwNjI2NjtsaW5lLWhlaWdodDoxLjN9LmVsLXJlc3VsdF9fZXh0cmF7bWFyZ2luLXRvcDozMHB4fS5lbC1yZXN1bHQgLmljb24tc3VjY2Vzc3tmaWxsOiM2N0MyM0F9LmVsLXJlc3VsdCAuaWNvbi1lcnJvcntmaWxsOiNGNTZDNkN9LmVsLXJlc3VsdCAuaWNvbi1pbmZve2ZpbGw6IzkwOTM5OX0uZWwtcmVzdWx0IC5pY29uLXdhcm5pbmd7ZmlsbDojRTZBMjNDfVwiLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9lbGVtZW50LXVpL2xpYi90aGVtZS1jaGFsay9pbmRleC5jc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBQUEsZ0JBQWdCLENBQUMsV0FBVyx5QkFBeUIsQ0FBQyxxSEFBZ0csQ0FBQyxlQUFlLENBQUMsbUJBQW1CLENBQUMsaUJBQWlCLENBQUMsdUNBQXVDLG1DQUFtQyxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLENBQUMsbUJBQW1CLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDLHVCQUF1QixDQUFDLG9CQUFvQixDQUFDLGtDQUFrQyxDQUFDLGlDQUFpQyxDQUFDLGdDQUFnQyxlQUFlLENBQUMsaUNBQWlDLGVBQWUsQ0FBQyx5QkFBeUIsZUFBZSxDQUFDLDhCQUE4QixlQUFlLENBQUMseUJBQXlCLGVBQWUs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QUFDLGNBQWMsQ0FBQyxjQUFjLGVBQWUsQ0FBQyxxQkFBcUIscUJBQXFCLENBQUMsbUJBQW1CLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxtQkFBbUIsaUJBQWlCLENBQUMsY0FBYyxDQUFDLGNBQWMsU0FBUyxDQUFDLHFCQUFxQixlQUFlLENBQUMsbUJBQW1CLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsaUJBQWlCLENBQUMsUUFBUSxDQUFDLGNBQWMsZUFBZSxDQUFDLHFCQUFxQixxQkFBcUIsQ0FBQyxtQkFBbUIsaUJBQWlCLENBQUMsZUFBZSxDQUFDLG1CQUFtQixpQkFBaUIsQ0FBQyxjQUFjLENBQUMsY0FBYyxlQUFlLENBQUMscUJBQXFCLHFCQUFxQixDQUFDLG1CQUFtQixpQkFBaUIsQ0FBQyxlQUFlLENBQUMsbUJBQW1CLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxjQUFjLFdBQVcsQ0FBQyxxQkFBcUIsaUJBQWlCLENBQUMsbUJBQW1CLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsaUJBQWlCLENBQUMsVUFBVSxDQUFDLGNBQWMsZUFBZSxDQUFDLHFCQUFxQixxQkFBcUIsQ0FBQyxtQkFBbUIsaUJBQWlCLENBQUMsZUFBZSxDQUFDLG1CQUFtQixpQkFBaUIsQ0FBQyxjQUFjLENBQUMsY0FBYyxlQUFlLENBQUMscUJBQXFCLHFCQUFxQixDQUFDLG1CQUFtQixpQkFBaUIsQ0FBQyxlQUFlLENBQUMsbUJBQW1CLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxjQUFjLFNBQVMsQ0FBQyxxQkFBcUIsZUFBZSxDQUFDLG1CQUFtQixpQkFBaUIsQ0FBQyxTQUFTLENBQUMsbUJBQW1CLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxjQUFjLGVBQWUsQ0FBQyxxQkFBcUIscUJBQXFCLENBQUMsbUJBQW1CLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxtQkFBbUIsaUJBQWlCLENBQUMsY0FBYyxDQUFDLGNBQWMsZUFBZSxDQUFDLHFCQUFxQixxQkFBcUIsQ0FBQyxtQkFBbUIsaUJBQWlCLENBQUMsZUFBZSxDQUFD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QUFXLENBQUMscUJBQXFCLGlCQUFpQixDQUFDLG1CQUFtQixpQkFBaUIsQ0FBQyxXQUFXLENBQUMsbUJBQW1CLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxjQUFjLGVBQWUsQ0FBQyxxQkFBcUIscUJBQXFCLENBQUMsbUJBQW1CLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxtQkFBbUIsaUJBQWlCLENBQUMsY0FBYyxDQUFDLGNBQWMsZUFBZSxDQUFDLHFCQUFxQixxQkFBcUIsQ0FBQyxtQkFBbUIsaUJBQWlCLENBQUMsZUFBZSxDQUFDLG1CQUFtQixpQkFBaUIsQ0FBQyxjQUFjLENBQUMsY0FBYyxTQUFTLENBQUMscUJBQXFCLGVBQWUsQ0FBQyxtQkFBbUIsaUJBQWlCLENBQUMsU0FBUyxDQUFDLG1CQUFtQixpQkFBaUIsQ0FBQyxRQUFRLENBQUMsY0FBYyxlQUFlLENBQUMscUJBQXFCLHFCQUFxQixDQUFDLG1CQUFtQixpQkFBaUIsQ0FBQyxlQUFlLENBQUMsbUJBQW1CLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxjQUFjLGVBQWUsQ0FBQyxxQkFBcUIscUJBQXFCLENBQUMsbUJBQW1CLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxtQkFBbUIsaUJBQWlCLENBQUMsY0FBYyxDQUFDLGNBQWMsV0FBVyxDQUFDLHFCQUFxQixpQkFBaUIsQ0FBQyxtQkFBbUIsaUJBQWlCLENBQUMsV0FBVyxDQUFDLG1CQUFtQixpQkFBaUIsQ0FBQyxVQUFVLENBQUMsY0FBYyxlQUFlLENBQUMscUJBQXFCLHFCQUFxQixDQUFDLG1CQUFtQixpQkFBaUIsQ0FBQyxlQUFlLENBQUMsbUJBQW1CLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxjQUFjLGVBQWUsQ0FBQyxxQkFBcUIscUJBQXFCLENBQUMsbUJBQW1CLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxtQkFBbUIsaUJBQWlCLENBQUMsY0FBYyxDQUFDLGNBQWMsVUFBVSxDQUFDLHFCQUFxQixnQkFBZ0IsQ0FBQyxtQkFBbUIsaUJBQWlCLENBQUMsVUFBVSxDQUFDLG1CQUFtQixpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyx5Q0FBeUMsYUFBYSxZQUFZLENBQUMsUUFBUSxDQUFDLG9CQUFvQixhQUFhLENBQUMsa0JBQWtCLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsaUJBQWlCLENBQUMsTUFBTSxDQUFDLGFBQWEsY0FBYyxDQUFDLG9CQUFvQixvQkFBb0IsQ0FBQyxrQkFBa0IsaUJBQWlCLENBQUMsY0FBYyxDQUFDLGtCQUFrQixpQkFBaUIsQ0FBQyxhQUFhLENBQUMsYUFBYSxjQUFjLENBQUMsb0JBQW9CLG9CQUFvQixDQUFDLGtCQUFrQixpQkFBaUIsQ0FBQyxjQUFjLENBQUMsa0JBQWtCLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxhQUFhLFdBQVcsQ0FBQyxvQkFBb0IsaUJBQWlCLENBQUMsa0JBQWtCLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsaUJBQWlCLENBQUMsVUFBVSxDQUFDLGFBQWEsZUFBZSxDQUFDLG9CQUFvQixxQkFBcUIsQ0FBQyxrQkFBa0IsaUJBQWlCLENBQUMsZUFBZSxDQUFDLGtCQUFrQixpQkFBaUIsQ0FBQyxjQUFjLENBQUMsYUFBYSxlQUFlLENBQUMsb0JBQW9CLHFCQUFxQixDQUFDLGtCQUFrQixpQkFBaUIsQ0FBQyxlQUFlLENBQUMsa0JBQWtCLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxhQUFhLFNBQVMsQ0FBQyxvQkFBb0IsZUFBZSxDQUFDLGtCQUFrQixpQkFBaUIsQ0FBQyxTQUFTLENBQUMsa0JBQWtCLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxhQUFhLGVBQWUsQ0FBQyxvQkFBb0IscUJBQXFCLENBQUMsa0JBQWtCLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxrQkFBa0IsaUJBQWlCLENBQUMsY0FBYyxDQUFDLGFBQWEsZUFBZSxDQUFDLG9CQUFvQixxQkFBcUIsQ0FBQyxrQkFBa0IsaUJBQWlCLENBQUMsZUFBZSxDQUFDLGtCQUFrQixpQkFBaUIsQ0FBQyxjQUFjLENBQUMsYUFBYSxXQUFXLENBQUMsb0JBQW9CLGlCQUFpQixDQUFDLGtCQUFrQixpQkFBaUIsQ0FBQyxXQUFXLENBQUMsa0JBQWtCLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxjQUFjLGVBQWUsQ0FBQyxxQkFBcUIscUJBQXFCLENBQUMsbUJBQW1CLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxtQkFBbUIsaUJBQWlCLENBQUMsY0FBYyxDQUFDLGNBQWMsZUFBZSxDQUFDLHFCQUFxQixxQkFBcUIsQ0FBQyxtQkFBbUIsaUJBQWlCLENBQUMsZUFBZSxDQUFDLG1CQUFtQixpQkFBaUIsQ0FBQyxjQUFjLENBQUMsY0FBYyxTQUFTLENBQUMscUJBQXFCLGVBQWUsQ0FBQyxtQkFBbUIsaUJBQWlCLENBQUMsU0FBUyxDQUFDLG1CQUFtQixpQkFBaUIsQ0FBQyxRQUFRLENBQUMsY0FBYyxlQUFlLENBQUMscUJBQXFCLHFCQUFxQixDQUFDLG1CQUFtQixpQkFBaUIsQ0FBQyxlQUFlLENBQUMsbUJBQW1CLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxjQUFjLGVBQWUsQ0FBQyxxQkFBcUIscUJBQXFCLENBQUMsbUJBQW1CLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxtQkFBbUIsaUJBQWlCLENBQUMsY0FBYyxDQUFDLGNBQWMsV0FBVyxDQUFDLHFCQUFxQixpQkFBaUIsQ0FBQyxtQkFBbUIsaUJBQWlCLENBQUMsV0FBVyxDQUFDLG1CQUFtQixpQkFBaUIsQ0FBQyxVQUFVLENBQUMsY0FBYyxlQUFlLENBQUMscUJBQXFCLHFCQUFxQixDQUFDLG1CQUFtQixpQkFBaUIsQ0FBQyxlQUFlLENBQUMsbUJBQW1CLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxjQUFjLGVBQWUsQ0FBQyxxQkFBcUIscUJBQXFCLENBQUMsbUJBQW1CLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxtQkFBbUIsaUJBQWlCLENBQUMsY0FBYyxDQUFDLGNBQWMsU0FBUyxDQUFDLHFCQUFxQixlQUFlLENBQUMsbUJBQW1CLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsaUJBQWlCLENBQUMsUUFBUSxDQUFDLGNBQWMsZUFBZSxDQUFDLHFCQUFxQixxQkFB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LG1CQUFtQixpQkFBaUIsQ0FBQyxjQUFjLENBQUMsY0FBYyxlQUFlLENBQUMscUJBQXFCLHFCQUFxQixDQUFDLG1CQUFtQixpQkFBaUIsQ0FBQyxlQUFlLENBQUMsbUJBQW1CLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxjQUFjLFdBQVcsQ0FBQyxxQkFBcUIsaUJBQWlCLENBQUMsbUJBQW1CLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsaUJBQWlCLENBQUMsVUFBVSxDQUFDLGNBQWMsZUFBZSxDQUFDLHFCQUFxQixxQkFBcUIsQ0FBQyxtQkFBbUIsaUJBQWlCLENBQUMsZUFBZSxDQUFDLG1CQUFtQixpQkFBaUIsQ0FBQyxjQUFjLENBQUMsY0FBYyxlQUFlLENBQUMscUJBQXFCLHFCQUFxQixDQUFDLG1CQUFtQixpQkFBaUIsQ0FBQyxlQUFlLENBQUMsbUJBQW1CLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxjQUFjLFNBQVMsQ0FBQyxxQkFBcUIsZUFBZSxDQUFDLG1CQUFtQixpQkFBaUIsQ0FBQyxTQUFTLENBQUMsbUJBQW1CLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxjQUFjLGVBQWUsQ0FBQyxxQkFBcUIscUJBQXFCLENBQUMsbUJBQW1CLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxtQkFBbUIsaUJBQWlCLENBQUMsY0FBYyxDQUFDLGNBQWMsZUFBZSxDQUFDLHFCQUFxQixxQkFBcUIsQ0FBQyxtQkFBbUIsaUJBQWlCLENBQUMsZUFBZSxDQUFDLG1CQUFtQixpQkFBaUIsQ0FBQyxjQUFjLENBQUMsY0FBYyxXQUFXLENBQUMscUJBQXFCLGlCQUFpQixDQUFDLG1CQUFtQixpQkFBaUIsQ0FBQyxXQUFXLENBQUMsbUJBQW1CLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxjQUFjLGVBQWUsQ0FBQyxxQkFBcUIscUJBQXFCLENBQUMsbUJBQW1CLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxtQkFBbUIsaUJBQWlCLENBQUMsY0FBYyxDQUFDLGNBQWMsZUFBZSxDQUFDLHFCQUFxQixxQkFBcUIsQ0FBQyxtQkFBbUIsaUJBQWlCLENBQUMsZUFBZSxDQUFDLG1CQUFtQixpQkFBaUIsQ0FBQyxjQUFjLENBQUMsY0FBYyxVQUFVLENBQUMscUJBQXFCLGdCQUFnQixDQUFDLG1CQUFtQixpQkFBaUIsQ0FBQyxVQUFVLENBQUMsbUJBQW1CLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDLDBDQUEwQyxhQUFhLFlBQVksQ0FBQyxRQUFRLENBQUMsb0JBQW9CLGFBQWEsQ0FBQyxrQkFBa0IsaUJBQWlCLENBQUMsT0FBTyxDQUFDLGtCQUFrQixpQkFBaUIsQ0FBQyxNQUFNLENBQUMsYUFBYSxjQUFjLENBQUMsb0JBQW9CLG9CQUFvQixDQUFDLGtCQUFrQixpQkFBaUIsQ0FBQyxjQUFjLENBQUMsa0JBQWtCLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxhQUFhLGNBQWMsQ0FBQyxvQkFBb0Isb0JBQW9CLENBQUMsa0JBQWtCLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsaUJBQWlCLENBQUMsYUFBYSxDQUFDLGFBQWEsV0FBVyxDQUFDLG9CQUFvQixpQkFBaUIsQ0FBQyxrQkFBa0IsaUJBQWlCLENBQUMsV0FBVyxDQUFDLGtCQUFrQixpQkFBaUIsQ0FBQyxVQUFVLENBQUMsYUFBYSxlQUFlLENBQUMsb0JBQW9CLHFCQUFxQixDQUFDLGtCQUFrQixpQkFBaUIsQ0FBQyxlQUFlLENBQUMsa0JBQWtCLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxhQUFhLGVBQWUsQ0FBQyxvQkFBb0IscUJBQXFCLENBQUMsa0JBQWtCLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxrQkFBa0IsaUJBQWlCLENBQUMsY0FBYyxDQUFDLGFBQWEsU0FBUyxDQUFDLG9CQUFvQixlQUFlLENBQUMsa0JBQWtCLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsaUJBQWlCLENBQUMsUUFBUSxDQUFDLGFBQWEsZUFBZSxDQUFDLG9CQUFvQixxQkFBcUIsQ0FBQyxrQkFBa0IsaUJBQWlCLENBQUMsZUFBZSxDQUFDLGtCQUFrQixpQkFBaUIsQ0FBQyxjQUFjLENBQUMsYUFBYSxlQUFlLENBQUMsb0JBQW9CLHFCQUFxQixDQUFDLGtCQUFrQixpQkFBaUIsQ0FBQyxlQUFlLENBQUMsa0JBQWtCLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxhQUFhLFdBQVcsQ0FBQyxvQkFBb0IsaUJBQWlCLENBQUMsa0JBQWtCLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsaUJBQWlCLENBQUMsVUFBVSxDQUFDLGNBQWMsZUFBZSxDQUFDLHFCQUFxQixxQkFBcUIsQ0FBQyxtQkFBbUIsaUJBQWlCLENBQUMsZUFBZSxDQUFDLG1CQUFtQixpQkFBaUIsQ0FBQyxjQUFjLENBQUMsY0FBYyxlQUFlLENBQUMscUJBQXFCLHFCQUFxQixDQUFDLG1CQUFtQixpQkFBaUIsQ0FBQyxlQUFlLENBQUMsbUJBQW1CLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxjQUFjLFNBQVMsQ0FBQyxxQkFBcUIsZUFBZSxDQUFDLG1CQUFtQixpQkFBaUIsQ0FBQyxTQUFTLENBQUMsbUJBQW1CLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxjQUFjLGVBQWUsQ0FBQyxxQkFBcUIscUJBQXFCLENBQUMsbUJBQW1CLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxtQkFBbUIsaUJBQWlCLENBQUMsY0FBYyxDQUFDLGNBQWMsZUFBZSxDQUFDLHFCQUFxQixxQkFBcUIsQ0FBQyxtQkFBbUIsaUJBQWlCLENBQUMsZUFBZSxDQUFDLG1CQUFtQixpQkFBaUIsQ0FBQyxjQUFjLENBQUMsY0FBYyxXQUFXLENBQUMscUJBQXFCLGlCQUFpQixDQUFDLG1CQUFtQixpQkFBaUIsQ0FBQyxXQUFXLENBQUMsbUJBQW1CLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxjQUFjLGVBQWUsQ0FBQyxxQkFBcUIscUJBQXFCLENBQUMsbUJBQW1CLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxtQkFBbUIsaUJBQWlCLENBQUMsY0FBYyxDQUFDLGNBQWMsZUFBZSxDQUFDLHFCQUFxQixxQkFBcUIsQ0FBQyxtQkFBbUIsaUJBQWlCLENBQUMsZUFBZSxDQUFDLG1CQUFtQixpQkFBaUIsQ0FBQyxjQUFjLENBQUMsY0FBYyxTQUFTLENBQUMscUJBQXFCLGVBQWUsQ0FBQyxtQkFBbUIsaUJBQWlCLENBQUMsU0FBUyxDQUFDLG1CQUFtQixpQkFBaUIsQ0FBQyxRQUFRLENBQUMsY0FBYyxlQUFlLENBQUMscUJBQXFCLHFCQUFxQixDQUFDLG1CQUFtQixpQkFBaUIsQ0FBQyxlQUFlLENBQUMsbUJBQW1CLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxjQUFjLGVBQWUsQ0FBQyxxQkFBcUIscUJBQXFCLENBQUMsbUJBQW1CLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxtQkFBbUIsaUJBQWlCLENBQUMsY0FBYyxDQUFDLGNBQWMsV0FBVyxDQUFDLHFCQUFxQixpQkFBaUIsQ0FBQyxtQkFBbUIsaUJBQWlCLENBQUMsV0FBVyxDQUFDLG1CQUFtQixpQkFBaUIsQ0FBQyxVQUFVLENBQUMsY0FBYyxlQUFlLENBQUMscUJBQXFCLHFCQUFxQixDQUFDLG1CQUFtQixpQkFBaUIsQ0FBQyxlQUFlLENBQUMsbUJBQW1CLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxjQUFjLGVBQWUsQ0FBQyxxQkFBcUIscUJBQXFCLENBQUMsbUJBQW1CLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxtQkFBbUIsaUJBQWlCLENBQUMsY0FBYyxDQUFDLGNBQWMsVUFBVSxDQUFDLHFCQUFxQixnQkFBZ0IsQ0FBQyxtQkFBbUIsaUJBQWlCLENBQUMsVUFBVSxDQUFDLG1CQUFtQixpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBeUYsV0FBVyxvQkFBb0IsQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLGtCQUFrQixZQUFZLENBQUMsZ0JBQWdCLGNBQWMsQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGtCQUFrQixpQkFBaUIsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyx5QkFBeUIsd0JBQXdCLENBQUMseUJBQXlCLENBQUMsaUJBQWlCLENBQStCLHFCQUFxQixDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLGlCQUFpQixDQUFDLGtCQUFrQixDQUFDLDJCQUEyQixjQUFjLENBQUMsYUFBYSxDQUFDLGdEQUFnRCxvQkFBb0IsQ0FBQyxhQUFhLENBQUMsb0NBQW9DLG9CQUFvQixDQUFDLG1CQUFtQixxQkFBcUIsQ0FBQyx5QkFBeUIsQ0FBQyxpQkFBaUIsQ0FBK0IscUJBQXFCLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLG1DQUFtQyxjQUFjLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLGdCQUFnQixDQUFDLG1DQUFtQyxpQkFBaUIsQ0FBQyxxQ0FBcUMsNEJBQTRCLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxvQ0FBb0MsYUFBYSxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyx1Q0FBdUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLHlCQUF5QixvQkFBb0IsQ0FBQywrQkFBK0IscUNBQXFDLENBQUMseUJBQXlCLENBQUMsZ0JBQWdCLFFBQVEsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLHNCQUEwRSwyQ0FBMkMsQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQStCLHFCQUFxQixDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxtQ0FBbUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyx5Q0FBeUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyx1Q0FBdUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxrQ0FBa0MsZUFBZSxDQUFDLDhDQUE4QyxhQUFhLENBQUMscUNBQXFDLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLDJDQUEyQyxTQUFTLENBQUMseUNBQXlDLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQywyQ0FBMkMsb0JBQW9CLENBQUMsK0NBQStDLFlBQVksQ0FBQyxvRUFBb0UsYUFBYSxDQUFDLG9JQUFvSSxhQUFhLENBQUMsY0FBYyxDQUFDLHNFQUFzRSxvQkFBb0IsQ0FBQyw4RkFBOEYsZUFBZSxDQUFDLHdSQUF3UixZQUFZLENBQUMsMkZBQTJGLGFBQWEsQ0FBQywyQkFBMkIsYUFBYSxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLENBQUMsc0JBQXNCLENBQThCLG9CQUFvQixDQUFDLGtCQUFrQixDQUFDLDRDQUE0QyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLG1CQUFtQixDQUFDLG1DQUFtQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLFlBQVksQ0FBQyw2QkFBNkIsaUJBQWlCLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxtQ0FBbUMsYUFBYSxDQUFDLDhCQUE4QixRQUFRLENBQUMsY0FBYyxDQUFDLGtCQUFrQixDQUFDLG9EQUFvRCxlQUFlLENBQUMscUJBQXFCLENBQUMsd0JBQXdCLENBQUMsaUJBQWlCLENBQStCLHFCQUFxQixDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsa0JBQWtCLENBQUMsb0JBQW9CLENBQUMsNklBQTZJLFVBQVUsQ0FBQyxnS0FBZ0ssWUFBWSxDQUFDLDZFQUE2RSxhQUFhLENBQUMseURBQXlELFlBQVksQ0FBQyw4REFBOEQsVUFBVSxDQUFDLFdBQVcsQ0FBQyxpRUFBaUUsaUJBQWlCLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDLGlCQUFpQixDQUFpQyx1QkFBdUIsQ0FBK0MscUNBQXFDLENBQUMsbUVBQW1FLGNBQWMsQ0FBQyxlQUFlLENBQWtDLHdCQUF3QixDQUFDLDREQUE0RCxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLCtCQUErQixDQUFnQyxzQkFBc0IsQ0FBQyxtRUFBbUUsb0JBQW9CLENBQUMsV0FBVyxDQUFDLHFCQUFxQixDQUFDLGlFQUFpRSxZQUFZLENBQUMsY0FBYyxDQUFDLHNFQUFzRSxnQkFBZ0IsQ0FBQyx5RkFBeUYsZUFBZSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxrRUFBa0UsU0FBUyxDQUFDLHVFQUF1RSxvQkFBb0IsQ0FBQywyQ0FBMkMsT0FBTyxDQUFDLFFBQVEsQ0FBd0MsOEJBQThCLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyw4REFBOEQsT0FBTyxDQUFDLCtDQUErQyxlQUFlLENBQUMsU0FBUyxDQUFDLHFCQUFxQixDQUFDLHdCQUF3QixDQUFDLGlCQUFpQixDQUErQixxQkFBcUIsQ0FBQyxlQUFlLENBQUMsMkJBQTJCLENBQUMsV0FBVyxDQUFDLG1JQUFtSSxVQUFVLENBQUMsd0ZBQXdGLGNBQWMsQ0FBeUIsZUFBZSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsd0VBQXdFLGFBQWEsQ0FBQyxxRkFBcUYsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLHVGQUF1RixZQUFZLENBQUMseURBQXlELHFCQUFxQixDQUFDLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxxQkFBcUIsQ0FBQyxvREFBb0QsYUFBYSxDQUFDLGVBQWUsQ0FBQyxzREFBc0QsY0FBYyxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLDREQUE0RCxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsaUJBQWlCLENBQWlDLHVCQUF1QixDQUFtQyx5QkFBeUIsQ0FBQyw4REFBOEQsY0FBYyxDQUFDLGVBQWUsQ0FBa0Msd0JBQXdCLENBQUMsc0NBQXNDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsaUJBQWlCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLHdCQUF3QixvQkFBb0IsQ0FBQyxXQUFXLENBQUMscUJBQXFCLENBQUMscUJBQXFCLGFBQWEsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLHdCQUF3QixpQkFBaUIsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsaUJBQWlCLENBQWlDLHVCQUF1QixDQUErQyxxQ0FBcUMsQ0FBQywwQkFBMEIsY0FBYyxDQUFDLGVBQWUsQ0FBa0Msd0JBQXdCLENBQUMsVUFBVSxDQUFDLDJCQUEyQixvQkFBb0IsQ0FBQyxxQkFBcUIsQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLDZDQUE2QyxTQUFTLENBQUMsMEJBQTBCLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQywyQkFBMkIsaUJBQWlCLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLGdDQUFnQyxDQUFDLGlCQUFpQixDQUFDLGdDQUFnQyxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxxQkFBcUIsQ0FBMk0sd0ZBQXdGLENBQTBJLGVBQWUsQ0FBQyxxQ0FBcUMsU0FBUyxDQUF3Qyw4QkFBOEIsQ0FBQyxrREFBa0QsZ0JBQWdCLENBQUMsc0NBQTBFLDJCQUEyQixDQUFDLDJDQUEyQyxTQUFTLENBQUMsa0NBQWtDLFVBQVUsQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLG1CQUFtQixDQUFDLGlCQUFpQixDQUFDLHdCQUF3QixpQkFBaUIsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLHNCQUFzQixDQUFDLGtCQUFrQixDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLG1DQUFtQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLGFBQWEsaUJBQWlCLENBQUMsYUFBYSxDQUFDLG1CQUFtQixjQUFjLENBQUMsYUFBYSxDQUFDLG9CQUFvQixDQUFDLHFCQUFxQixDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxxQkFBcUIscUJBQXFCLENBQUMsYUFBYSxDQUFDLDZDQUE2QyxvQkFBb0IsQ0FBQyxtRkFBbUYsaUJBQWlCLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFxQywyQkFBMkIsQ0FBQyx1RkFBdUYscUJBQXFCLENBQUMsb0JBQW9CLENBQUMsOENBQThDLFlBQVksQ0FBQyw0Q0FBNEMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsMkNBQTJDLGVBQWUsQ0FBQyxjQUFjLENBQUMsZ0RBQWdELHdCQUF3QixDQUFDLDJDQUEyQyxhQUFhLENBQUMsZ0RBQWdELHdCQUF3QixDQUFDLHFFQUFxRSx3QkFBd0IsQ0FBQywyQ0FBMkMsYUFBYSxDQUFDLDZDQUE2QyxhQUFhLENBQUMsaUJBQWlCLGtCQUFrQixDQUFDLG9CQUFvQixDQUFDLHFCQUFxQixDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBK0IscUJBQXFCLENBQUMsNENBQTRDLDZCQUE2QixDQUFDLHdCQUF3QixVQUFVLENBQUMsbUJBQW1CLENBQUMsd0JBQXdCLENBQUMsZUFBZSxDQUFDLGlCQUFpQixDQUFDLHFCQUFxQixDQUFDLHdCQUF3QixpQkFBaUIsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyx3QkFBd0IsQ0FBQyxnQkFBZ0IsQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQW1DLHlCQUF5QixDQUFDLCtCQUErQixvQkFBb0IsQ0FBQyxXQUFXLENBQUMscUJBQXFCLENBQUMsNEJBQTRCLG9CQUFvQixDQUFDLHFCQUFxQixDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLG9CQUFvQixHQUFHLHVCQUF1QixDQUFDLEtBQUssMEJBQTBCLENBQUMsQ0FBQyxpQkFBaUIsVUFBVSxDQUFDLGtCQUFrQixDQUFDLFlBQVksb0JBQW9CLENBQUMscUJBQXFCLENBQUMsa0JBQThELG1DQUFtQyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsd0JBQXdCLGNBQWMsQ0FBQyxvQkFBb0IsQ0FBa0Qsd0NBQXdDLENBQTJGLGtCQUFrQixLQUFzQyx3QkFBd0IsQ0FBQyxDQUE4SyxnQkFBZ0IsR0FBRyxzQkFBc0IsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLHVCQUF1QixDQUFDLHFCQUFxQixDQUFDLEtBQUssdUJBQXVCLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxZQUFZLGVBQWUsQ0FBQyxxQkFBcUIsQ0FBQyxpQkFBaUIsQ0FBQyxnQkFBZ0IsQ0FBQyxrQkFBa0IsQ0FBQyxvQkFBb0IsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBb0MsMEJBQTBCLENBQUMsd0JBQXdCLENBQW1ILDRDQUE0QyxDQUFvRSxlQUFlLENBQUMsMkJBQTJCLENBQXlDLFlBQVksQ0FBZ0Qsa0JBQWtCLENBQUMsc0JBQW1FLHNCQUFzQixDQUFDLDZDQUE2QyxrQkFBa0IsQ0FBQyxjQUFjLFFBQVEsQ0FBQyx1Q0FBdUMsYUFBYSxDQUFDLHFCQUFxQix3QkFBd0IsQ0FBQyxvQkFBb0IsQ0FBQywwQ0FBMEMsYUFBYSxDQUFDLHFCQUFxQix3QkFBd0IsQ0FBQyxvQkFBb0IsQ0FBQywwQ0FBMEMsYUFBYSxDQUFDLG1CQUFtQix3QkFBd0IsQ0FBQyxvQkFBb0IsQ0FBQyx3Q0FBd0MsYUFBYSxDQUFDLGtCQUFrQixpQkFBaUIsQ0FBQyxxQkFBcUIsU0FBUyxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsMkJBQTJCLGVBQWUsQ0FBQyxzQkFBc0IsaUJBQWlCLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBb0MsMEJBQTBCLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsNEJBQTRCLGVBQWUsQ0FBQyw0QkFBNEIsYUFBYSxDQUFDLDZCQUE2QixhQUFhLENBQUMsMkJBQTJCLGFBQWEsQ0FBQywwQkFBMEIsYUFBYSxDQUFDLDZCQUE2QixhQUFhLENBQUMscURBQXFELFNBQVMsQ0FBeUMsK0JBQStCLENBQUMsVUFBVSxpQkFBaUIsQ0FBQyxxQkFBcUIsQ0FBQyxvQkFBb0IsQ0FBQyxtQkFBbUIsa0JBQWtCLENBQUMsVUFBVSxDQUFDLG9CQUFvQixDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLGtCQUFrQixDQUFDLHFCQUFxQixDQUFDLDRCQUE0QixpQkFBaUIsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFxRCwyQ0FBMkMsQ0FBQyw4QkFBOEIsaUJBQWlCLENBQUMsb0JBQW9CLENBQUMsbUNBQW1DLFNBQVMsQ0FBQywwQkFBMEIsVUFBVSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLDRCQUE0Qix3QkFBd0IsQ0FBQyw0QkFBNEIsd0JBQXdCLENBQUMsNEJBQTRCLHdCQUF3QixDQUFDLHlCQUF5Qix3QkFBd0IsQ0FBQywyQkFBMkIsd0JBQXdCLENBQUMsU0FBUyxpQkFBaUIsQ0FBQyx3QkFBd0IsQ0FBQyxxQkFBcUIsQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUF3QixjQUFjLENBQUMsd0ZBQXdGLHNDQUFzQyxDQUFDLGlCQUFpQixpQkFBaUIsQ0FBQywrQkFBK0IsQ0FBQyxxQkFBcUIsQ0FBQyx3QkFBd0IsWUFBWSxDQUFDLFNBQVMsV0FBVyxDQUFDLGFBQWEsQ0FBQywrQkFBK0IsZUFBZSxDQUFDLGVBQWUsV0FBVyxDQUFDLHFCQUFxQixDQUFDLGVBQWUsY0FBYyxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBd0IsY0FBYyxDQUFDLHdDQUF3QyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLHFCQUFtRCxxQkFBcUIsQ0FBQyxrQkFBa0Isb0JBQW9CLENBQUMsZUFBZSxDQUFDLCtCQUFtRCxtQkFBbUIsQ0FBQyxlQUFlLGNBQWMsQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLFlBQVksQ0FBQyxrQkFBa0IsZUFBZSxDQUFDLGlCQUFpQixDQUFDLGtCQUFrQixDQUFDLHNCQUFzQixrQkFBa0IsQ0FBQyxvQkFBb0IsV0FBVyxDQUErRSxnQkFBZ0IsQ0FBQyxTQUFTLGlCQUFpQixDQUFxQixhQUFhLENBQUMscUNBQXFDLFlBQVksQ0FBQyw4QkFBcUUseUJBQXlCLENBQXFCLGFBQWEsQ0FBd0MsV0FBVyxDQUFDLGlGQUFpRixlQUFlLENBQUMsZUFBZSxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsMEJBQTBCLGFBQWEsQ0FBQyxvQkFBb0IsQ0FBQyx1QkFBdUIsYUFBYSxDQUFDLG9CQUFvQixDQUFDLDBCQUEwQixhQUFhLENBQUMsb0JBQW9CLENBQUMsd0JBQXdCLGFBQWEsQ0FBQyxvQkFBb0IsQ0FBQyx5QkFBeUIsYUFBYSxDQUFDLG9CQUFvQixDQUFDLGVBQWUsaUJBQWlCLENBQUMsU0FBUyxDQUF1RCxtQkFBbUIsQ0FBOEMsc0JBQXNCLENBQWdELGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLHFCQUFxQixDQUFDLGVBQWUsQ0FBa0Msd0JBQXdCLENBQUMsNENBQTRDLG9CQUFvQixDQUFDLHVCQUF1QixpQkFBaUIsQ0FBQyxnQkFBZ0IsQ0FBQyxvQkFBb0IsQ0FBQyx1QkFBdUIsVUFBVSxDQUFDLHFCQUFxQix3QkFBd0IsQ0FBQyxxQkFBZ0IsQ0FBaEIsZ0JBQWdCLENBQUMsaUJBQWlCLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMscURBQXFELGNBQWMsQ0FBQyxlQUFlLENBQUMsK0JBQWlFLHlCQUF5QixDQUFDLGVBQWUsaUJBQWlCLENBQUMsb0JBQW9CLENBQUMsd0JBQXdCLENBQUMscUJBQXFCLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxrQkFBa0IsQ0FBQyxvQkFBb0IsQ0FBa0Msd0JBQXdCLENBQStCLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsZUFBZSxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQywyQkFBMkIsZUFBZSxDQUFDLGFBQWEsQ0FBQyx3QkFBd0IsYUFBYSxDQUFDLDJCQUEyQixhQUFhLENBQUMseUJBQXlCLGFBQWEsQ0FBQywwQkFBMEIsYUFBYSxDQUFDLHNCQUFzQixpQkFBaUIsQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxpQ0FBaUMsYUFBYSxDQUFDLDhCQUE4QixhQUFhLENBQUMsaUNBQWlDLGFBQWEsQ0FBQywrQkFBK0IsYUFBYSxDQUFDLGdDQUFnQyxhQUFhLENBQUMsc0NBQXNDLFVBQVUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsWUFBWSxDQUFDLG9DQUEyRSxXQUFXLENBQUMsVUFBVSxDQUFDLG9DQUFvQyxpQkFBaUIsQ0FBd0MsV0FBVyxDQUFDLHFDQUFxQyxnQkFBZ0IsQ0FBQyxrQkFBa0IsQ0FBQyxvQ0FBb0MsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLDRDQUE0QyxVQUFVLENBQUMsb0VBQW9FLGlCQUFpQixDQUFDLHlDQUF5QyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxrQ0FBa0MsUUFBUSxDQUFDLFVBQVUsQ0FBQyxtQkFBMkQsWUFBWSxDQUFnRCxrQkFBa0IsQ0FBQyxrQ0FBa0MsVUFBVSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxrQ0FBa0MsY0FBYyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLHdFQUF3RSxjQUFjLENBQUMsa0RBQThGLG1DQUFtQyxDQUFDLGtDQUFrQyxpQkFBaUIsQ0FBeUMsWUFBWSxDQUFrRCxtQkFBbUIsQ0FBd0MsV0FBVyxDQUFDLG1DQUFtQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsc0RBQXNELGFBQWEsQ0FBQyxvQkFBb0IsQ0FBQyxtQ0FBMEUsV0FBVyxDQUF5QyxZQUFZLENBQWdELGtCQUFrQixDQUE4QyxzQkFBc0IsQ0FBQyxxRkFBcUYsVUFBVSxDQUFDLG9CQUFvQixDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsa0JBQWtCLENBQUMsMkNBQTZGLHlDQUF5QyxDQUE4QixvQkFBb0IsQ0FBQywwQ0FBMEYsdUNBQXVDLENBQW9DLDBCQUEwQixDQUFDLGdEQUFnRCxZQUFZLENBQUMsYUFBYSxpQkFBaUIsQ0FBQyx5QkFBeUIsaUJBQWlCLENBQUMsdUJBQXVCLGlCQUFpQixDQUFDLHdCQUF3QixpQkFBaUIsQ0FBQyxZQUFZLENBQUMsb0JBQW9CLFdBQVcsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBd0IsY0FBYyxDQUFDLGlCQUFpQixDQUFDLG1DQUFtQyxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFvQywwQkFBMEIsQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLENBQUMsMEJBQTBCLFNBQVMsQ0FBQywwQkFBMEIsbUNBQW1DLENBQUMsc0JBQXNCLGNBQWMsQ0FBQyx5QkFBeUIsaUJBQWlCLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLHFDQUFxQyxRQUFRLENBQUMsUUFBUSxDQUFvQywwQkFBMEIsQ0FBQyxtQ0FBbUMsT0FBTyxDQUFDLE9BQU8sQ0FBb0MsMEJBQTBCLENBQUMsa0NBQWtDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLENBQXdCLGNBQWMsQ0FBQyx1RUFBdUUsV0FBVyxDQUFDLHlDQUF5Qyx3QkFBd0IsQ0FBQyxXQUFXLENBQUMsaUNBQWlDLE1BQU0sQ0FBQyxPQUFPLENBQXdCLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxzREFBc0QsV0FBVyxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMseURBQXlELGVBQWUsQ0FBQyx3QkFBd0IsNEJBQTRCLENBQUMsY0FBYyxDQUFDLHFDQUFxQyxXQUFXLENBQUMsb0NBQW9DLG9CQUFvQixDQUFDLGdCQUFnQixDQUFDLGtDQUFrQyxnQkFBZ0IsQ0FBQyx1REFBdUQsU0FBUyxDQUFDLFdBQVcsQ0FBQyx5Q0FBeUMsU0FBUyxDQUFDLHFCQUFxQixhQUFhLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMscUJBQXFCLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBd0IsY0FBYyxDQUFDLHNDQUFzQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyw2REFBa0gsNENBQTRDLENBQUMsU0FBUyxDQUFDLCtEQUFtSCwyQ0FBMkMsQ0FBQyxTQUFTLENBQUMsbUJBQW1CLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLDZCQUE2QixTQUFTLENBQUMsZ0NBQWtJLG9DQUEyRyxDQUFDLHlCQUF5QixTQUFTLENBQW1HLG9DQUEyRyxDQUFDLHFDQUFxQyxjQUFjLENBQUMsU0FBUyxDQUFDLCtIQUErSCxXQUFXLENBQUMsbUNBQW1DLFNBQVMsQ0FBQyxtQkFBbUIsVUFBVSxDQUFDLHFCQUFxQixDQUFDLFdBQVcsQ0FBd0IsY0FBYyxDQUFDLDBEQUFnRyw2QkFBNkIsQ0FBQyx5RUFBeUUsU0FBUyxDQUFDLGdFQUFzRyw2QkFBNkIsQ0FBQyxrRkFBa0YsU0FBUyxDQUFDLGtEQUFzRywyQ0FBMkMsQ0FBQywyQ0FBMkMsU0FBUyxDQUFDLGdFQUFvSCwyQ0FBMkMsQ0FBQyx5REFBeUQsU0FBUyxDQUE2QixtQkFBbUIsQ0FBQywwREFBMEQsU0FBUyxDQUE2QixtQkFBbUIsQ0FBMk0sd0ZBQXdGLENBQThLLDJCQUEyQixDQUFDLG1EQUFtRCxTQUFTLENBQTZCLG1CQUFtQixDQUFDLGdFQUFnRSxTQUFTLENBQTZCLG1CQUFtQixDQUEyTSx3RkFBd0YsQ0FBaUwsOEJBQThCLENBQUMseURBQXlELFNBQVMsQ0FBNkIsbUJBQW1CLENBQUMsNERBQTRELFNBQVMsQ0FBOEIsb0JBQW9CLENBQTJNLHdGQUF3RixDQUE0Syx5QkFBeUIsQ0FBQyxxREFBcUQsU0FBUyxDQUFrQyx3QkFBd0IsQ0FBQyxxQkFBMEgsNEZBQTRGLENBQUMsZ0NBQW9JLDJGQUEyRixDQUFDLDRDQUFzRSxpQkFBaUIsQ0FBQyxxQ0FBcUMsU0FBUyxDQUFxQywyQkFBMkIsQ0FBQyx1QkFBK0UsK0NBQStDLENBQUMsYUFBYSw0QkFBNEIsQ0FBQywrQkFBK0IsQ0FBQyx3REFBd0QsVUFBVSxDQUFDLGtCQUFrQixDQUFDLDBCQUFrRSxZQUFZLENBQWdELGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxxQkFBcUIsQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLCtCQUErQixDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQTRDLGtDQUFrQyxDQUFDLFNBQVMsQ0FBQyx5QkFBeUIsbUJBQW1CLENBQTJFLHdCQUF3QixDQUFnRCxlQUFlLENBQUMsbUNBQW1FLHVCQUF1QixDQUFDLHFEQUFxRCxhQUFhLENBQUMsb0NBQW9DLCtCQUErQixDQUFDLHdCQUF3QixrQkFBa0IsQ0FBQyxxQkFBcUIsQ0FBQyxlQUFlLENBQStCLHFCQUFxQixDQUFDLCtCQUErQixDQUFDLHNEQUFzRCw2QkFBNkIsQ0FBQywyQkFBMkIsbUJBQW1CLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyw2QkFBNkIsQ0FBQyw2QkFBNkIsa0JBQWtCLENBQUMsMkRBQTJELGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLHdCQUF3QixDQUFDLGtCQUFrQixDQUFDLHFCQUFxQixvQkFBb0IsQ0FBQywwQkFBMEIsZ0JBQWdCLENBQTJELGlEQUFpRCxDQUFDLGlDQUFpQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsNkJBQTZCLGtCQUFrQixDQUFDLDRDQUE0QyxXQUFXLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLHdCQUF3QixDQUFDLHFCQUFxQixDQUFDLG1EQUFtRCxVQUFVLENBQUMsZ0JBQWdCLENBQUMscUJBQXFCLENBQUMscUJBQXFCLENBQUMsZ0NBQWdDLGVBQWUsQ0FBQywrQ0FBK0MsUUFBUSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxrQkFBa0IsQ0FBQywyQkFBMkIsQ0FBQyxzREFBc0QsT0FBTyxDQUFDLGdCQUFnQixDQUFDLGtCQUFrQixDQUFDLHdCQUF3QixDQUFDLCtCQUErQixnQkFBZ0IsQ0FBQyw4Q0FBOEMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQywwQkFBMEIsQ0FBQyxtQkFBbUIsQ0FBQyxxREFBcUQsV0FBVyxDQUFDLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQyxtQkFBbUIsQ0FBQyw4QkFBOEIsaUJBQWlCLENBQUMsNkNBQTZDLE9BQU8sQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsb0JBQW9CLENBQUMseUJBQXlCLENBQUMsb0RBQW9ELFNBQVMsQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsb0JBQW9CLENBQUMsc0JBQXNCLENBQUMsUUFBUSx3QkFBd0IsQ0FBQyxvQkFBb0IsQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLENBQUMsaUJBQWlCLENBQUMscUJBQXFCLENBQUMsa0JBQWtCLENBQUMsZUFBZSxvQkFBb0IsQ0FBQyx1QkFBdUIsYUFBYSxDQUFDLDZCQUE2QixVQUFVLENBQUMsd0JBQXdCLENBQUMscUJBQXFCLHdCQUF3QixDQUFDLG9CQUFvQixDQUFDLGFBQWEsQ0FBQyw0QkFBNEIsb0JBQW9CLENBQUMsb0NBQW9DLGFBQWEsQ0FBQywwQ0FBMEMsVUFBVSxDQUFDLHdCQUF3QixDQUFDLHdCQUF3Qix3QkFBd0IsQ0FBQyxvQkFBb0IsQ0FBQyxhQUFhLENBQUMsK0JBQStCLG9CQUFvQixDQUFDLHVDQUF1QyxhQUFhLENBQUMsNkNBQTZDLFVBQVUsQ0FBQyx3QkFBd0IsQ0FBQyx3QkFBd0Isd0JBQXdCLENBQUMsb0JBQW9CLENBQUMsYUFBYSxDQUFDLCtCQUErQixvQkFBb0IsQ0FBQyx1Q0FBdUMsYUFBYSxDQUFDLDZDQUE2QyxVQUFVLENBQUMsd0JBQXdCLENBQUMsdUJBQXVCLHdCQUF3QixDQUFDLG9CQUFvQixDQUFDLGFBQWEsQ0FBQyw4QkFBOEIsb0JBQW9CLENBQUMsc0NBQXNDLGFBQWEsQ0FBQyw0Q0FBNEMsVUFBVSxDQUFDLHdCQUF3QixDQUFDLHVCQUF1QixpQkFBaUIsQ0FBQyxpQkFBaUIsQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQywrQkFBK0IsYUFBYSxDQUFDLGNBQWMsd0JBQXdCLENBQUMsb0JBQW9CLENBQUMsVUFBVSxDQUFDLHFCQUFxQixvQkFBb0IsQ0FBQyw2QkFBNkIsVUFBVSxDQUFDLG1DQUFtQyxVQUFVLENBQUMsd0JBQXdCLENBQUMsMkJBQTJCLHdCQUF3QixDQUFDLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxrQ0FBa0Msb0JBQW9CLENBQUMsMENBQTBDLFVBQVUsQ0FBQyxnREFBZ0QsVUFBVSxDQUFDLHdCQUF3QixDQUFDLDhCQUE4Qix3QkFBd0IsQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVLENBQUMscUNBQXFDLG9CQUFvQixDQUFDLDZDQUE2QyxVQUFVLENBQUMsbURBQW1ELFVBQVUsQ0FBQyx3QkFBd0IsQ0FBQyw4QkFBOEIsd0JBQXdCLENBQUMsb0JBQW9CLENBQUMsVUFBVSxDQUFDLHFDQUFxQyxvQkFBb0IsQ0FBQyw2Q0FBNkMsVUFBVSxDQUFDLG1EQUFtRCxVQUFVLENBQUMsd0JBQXdCLENBQUMsNkJBQTZCLHdCQUF3QixDQUFDLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxvQ0FBb0Msb0JBQW9CLENBQUMsNENBQTRDLFVBQVUsQ0FBQyxrREFBa0QsVUFBVSxDQUFDLHdCQUF3QixDQUFDLGVBQWUscUJBQXFCLENBQUMsb0JBQW9CLENBQUMsYUFBYSxDQUFDLHNCQUFzQixvQkFBb0IsQ0FBQyw4QkFBOEIsYUFBYSxDQUFDLG9DQUFvQyxVQUFVLENBQUMsd0JBQXdCLENBQUMsNEJBQTRCLHFCQUFxQixDQUFDLG9CQUFvQixDQUFDLGFBQWEsQ0FBQyxtQ0FBbUMsb0JBQW9CLENBQUMsMkNBQTJDLGFBQWEsQ0FBQyxpREFBaUQsVUFBVSxDQUFDLHdCQUF3QixDQUFDLCtCQUErQixxQkFBcUIsQ0FBQyxvQkFBb0IsQ0FBQyxhQUFhLENBQUMsc0NBQXNDLG9CQUFvQixDQUFDLDhDQUE4QyxhQUFhLENBQUMsb0RBQW9ELFVBQVUsQ0FBQyx3QkFBd0IsQ0FBQywrQkFBK0IscUJBQXFCLENBQUMsb0JBQW9CLENBQUMsYUFBYSxDQUFDLHNDQUFzQyxvQkFBb0IsQ0FBQyw4Q0FBOEMsYUFBYSxDQUFDLG9EQUFvRCxVQUFVLENBQUMsd0JBQXdCLENBQUMsOEJBQThCLHFCQUFxQixDQUFDLG9CQUFvQixDQUFDLGFBQWEsQ0FBQyxxQ0FBcUMsb0JBQW9CLENBQUMsNkNBQTZDLGFBQWEsQ0FBQyxtREFBbUQsVUFBVSxDQUFDLHdCQUF3QixDQUFDLGdCQUFnQixXQUFXLENBQUMsZ0JBQWdCLENBQUMsK0JBQTJELG1CQUFtQixDQUFDLGVBQWUsV0FBVyxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyw4QkFBMEQsbUJBQW1CLENBQUMsY0FBYyxXQUFXLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLDZCQUE2QixnQkFBZ0IsQ0FBNkIsbUJBQW1CLENBQUMsYUFBYSxpQkFBaUIsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsc0RBQXNELGNBQWMsQ0FBQyxvQkFBb0IsQ0FBQywrRkFBK0Ysb0JBQW9CLENBQUMsdUJBQXVCLGNBQWMsQ0FBQyx3Q0FBd0Msc0JBQXNCLENBQUMsMkNBQXFILHdCQUF3QixDQUFnRCxjQUFjLENBQUMsc0RBQXdGLHlCQUF5QixDQUFDLG1EQUFtRCxhQUFhLENBQUMscUJBQXFCLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxvQkFBb0IsY0FBYyxDQUFDLGdCQUFnQixDQUFDLG1CQUFtQixjQUFjLENBQUMsZ0JBQWdCLENBQUMsNkNBQTZDLFNBQVMsQ0FBQyxhQUFhLENBQUMsdUJBQXVCLFlBQVksQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLHdCQUF3QixDQUFDLGlCQUFpQixDQUFDLHNDQUFzQyxDQUFDLG1CQUFtQixpQkFBaUIsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBb0MsMEJBQTBCLENBQXlDLFlBQVksQ0FBb0IsY0FBYyxDQUFDLGtCQUFrQixDQUFDLGVBQWUsQ0FBQyxxQkFBcUIsQ0FBQywyQkFBaUYsbUJBQW1CLENBQWdELGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxvQkFBb0IsQ0FBQyxzQkFBc0IsQ0FBQyxrQkFBa0IsQ0FBQyx3Q0FBd0Msd0JBQXdCLENBQUMsZ0NBQThELE1BQU0sQ0FBQyxlQUFlLENBQUMsc0JBQXNCLENBQUMsMENBQTJFLFNBQVMsQ0FBQyx3QkFBd0IsQ0FBQyxVQUFVLENBQUMsZ0RBQWdELHdCQUF3QixDQUFDLCtCQUErQixpQkFBaUIsQ0FBQyw4QkFBOEIsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLDhCQUFzRSxZQUFZLENBQWdELDZCQUE2QixDQUFnRCxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLHdFQUF3RSxrQkFBa0IsQ0FBQyx5Q0FBeUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxtQ0FBbUMsaUJBQWlCLENBQUMseUJBQXlCLGFBQWEsQ0FBQyxhQUFhLENBQUMsMkJBQXlELE1BQU0sQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBb00sNkNBQXdDLGFBQWEsQ0FBckQsd0NBQXdDLGFBQWEsQ0FBQyxvQkFBNEQsWUFBWSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLDRCQUFvRSxZQUFZLENBQStCLE1BQU0sQ0FBb0IsY0FBYyxDQUFDLG9DQUFvQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxxREFBcUQsYUFBYSxDQUFDLDZDQUFvRiw4QkFBOEIsQ0FBQyx3Q0FBZ0YsWUFBWSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyw2Q0FBNkMsNEpBQTRKLENBQUMscUJBQXFCLGlCQUFpQixDQUErQixxQkFBcUIsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLG9CQUFvQixDQUFDLGFBQWEsQ0FBQywwQkFBMEIsaUJBQWlCLENBQW1MLGdHQUFnRyxDQUFDLFdBQVcsQ0FBQyw0QkFBNEIsaUJBQWlCLENBQUMsY0FBYyxDQUErQixxQkFBcUIsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsZUFBZSxDQUFDLHdCQUF3QixDQUEyQyxpQ0FBaUMsQ0FBQyxTQUFTLENBQUMsaUNBQWlDLFVBQVUsQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLDJEQUErTyxpR0FBaUcsQ0FBQyw2REFBNkQsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLGtCQUFrQixpQkFBaUIsQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLGtEQUFrRCxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMseUJBQW1ILDZEQUE2RCxDQUFDLHlCQUErRyxxREFBcUQsQ0FBQywwQkFBMEIsaUJBQWlCLENBQUMsOEJBQThCLFdBQVcsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFpRyx1RkFBdUYsQ0FBQyxpQkFBaUIsQ0FBd0MsOEJBQThCLENBQUMsdUJBQXVCLGlCQUFpQixDQUErQixxQkFBcUIsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLHNKQUFzSixDQUFDLDRCQUE0QixpQkFBaUIsQ0FBNEYsb0VBQW9FLENBQUMsV0FBVyxDQUFDLDhCQUE4QixpQkFBaUIsQ0FBQyxjQUFjLENBQStCLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLENBQUMsd0JBQXdCLENBQTJDLGlDQUFpQyxDQUFDLFNBQVMsQ0FBQyxtQ0FBbUMsVUFBVSxDQUFDLFlBQVksQ0FBQywrREFBNEoscUVBQXFFLENBQUMsaUVBQWlFLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsV0FBVyxDQUFDLGlDQUFpQyxpQkFBaUIsQ0FBQyx3Q0FBd0MsYUFBYSxDQUFDLFVBQVUsQ0FBQyx5QkFBeUIsY0FBYyxDQUFDLGdCQUFnQixDQUFDLDBCQUEwQixVQUFVLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsd0JBQXdCLHdCQUF3QixDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLDRCQUE0QixDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsa0NBQWtDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyw4QkFBOEIsYUFBYSxDQUFDLG9CQUFvQixDQUFDLDZCQUE2QixjQUFjLENBQUMsYUFBYSxDQUFDLG9CQUFvQixDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsbUNBQW1DLHVCQUF1QixDQUFDLGlCQUFpQixvQkFBb0IsQ0FBQyxpQkFBaUIsQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsdURBQXVELGtCQUFrQixDQUFDLHlCQUF5QixXQUFXLENBQUMsbURBQW1ELFdBQVcsQ0FBQyxVQUFVLENBQUMsZ0RBQWdELFdBQVcsQ0FBQyxVQUFVLENBQUMsd0JBQXdCLFdBQVcsQ0FBQyxrREFBa0QsV0FBVyxDQUFDLFVBQVUsQ0FBQywrQ0FBK0MsV0FBVyxDQUFDLFVBQVUsQ0FBQywrRkFBb0osNENBQTRDLENBQUMsdUJBQXVCLFdBQVcsQ0FBQyxpREFBaUQsV0FBVyxDQUFDLFVBQVUsQ0FBQyw4Q0FBOEMsV0FBVyxDQUFDLFVBQVUsQ0FBQyw2RkFBa0osNENBQTRDLENBQUMsdUJBQXVCLFdBQVcsQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsa0JBQWtCLENBQUMscUNBQXFDLENBQUMsMEJBQTBCLG9CQUFvQixDQUErQixxQkFBcUIsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyx3QkFBd0IsQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsY0FBYyxDQUFDLHdCQUF3QixpQkFBaUIsQ0FBQyxhQUFhLENBQStCLHFCQUFxQixDQUFDLHFCQUFxQixDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsOENBQThDLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxpQ0FBaUMsNEpBQTRKLENBQUMsOEJBQThCLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyx3QkFBd0IsY0FBYyxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUE0QyxrQ0FBa0MsQ0FBQyx1QkFBdUIsaUJBQWlCLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBNEMsa0NBQWtDLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxvQ0FBb0MsaUJBQWlCLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLHdCQUF3QixpQkFBaUIsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFnQyxzQkFBc0IsQ0FBQyxxQkFBcUIsQ0FBQyx3QkFBd0IsQ0FBQyxpQkFBaUIsQ0FBQyxzQ0FBc0MsQ0FBQyx3REFBd0QsNkJBQTZCLENBQUMsYUFBYSxpQkFBaUIsQ0FBQyxxQkFBcUIsQ0FBQyxjQUFjLENBQUMsb0JBQW9CLGFBQWEsQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLHFCQUFxQixDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMscUJBQXFCLENBQUMscUJBQXFCLENBQUMsd0JBQXdCLENBQUMsaUJBQWlCLENBQW9FLDBEQUEwRCxDQUErSyxzQ0FBaUMsYUFBYSxDQUE5QyxpQ0FBaUMsYUFBYSxDQUFDLDBCQUEwQixvQkFBb0IsQ0FBQywwQkFBMEIsU0FBUyxDQUFDLG9CQUFvQixDQUFDLDhCQUE4QixhQUFhLENBQUMsZUFBZSxDQUFDLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLDZDQUE2Qyx3QkFBd0IsQ0FBQyxvQkFBb0IsQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQTBQLCtEQUEwRCxhQUFhLENBQXZFLDBEQUEwRCxhQUFhLENBQUMsMkNBQTJDLG9CQUFvQixDQUFDLHdDQUF3QyxhQUFhLENBQUMsVUFBVSxpQkFBaUIsQ0FBQyxjQUFjLENBQUMsNkJBQTZCLFVBQVUsQ0FBQyxTQUFTLENBQUMsd0NBQXdDLFVBQVUsQ0FBQyxtQ0FBbUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLG9DQUFvQyxlQUFlLENBQUMsbUNBQW1DLGVBQWUsQ0FBQyx5Q0FBeUMsZUFBZSxDQUFDLFNBQVMsQ0FBQywyQkFBMkIsYUFBYSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQTZELG1EQUFtRCxDQUFDLGlDQUFpQyxhQUFhLENBQUMsMkJBQTJCLFdBQVcsQ0FBdUQsbUJBQW1CLENBQWdELGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsNkpBQTZKLGlCQUFpQixDQUFDLGtEQUFrRCxlQUFlLENBQUMsbUJBQW1CLENBQUMsb0JBQW9CLENBQUMsYUFBYSxDQUFDLGlCQUFpQix1QkFBdUIsQ0FBQyxxQkFBcUIsQ0FBQyxxQkFBcUIsQ0FBQyxpQkFBaUIsQ0FBQyx3QkFBd0IsQ0FBQyxxQkFBcUIsQ0FBQyxhQUFhLENBQUMsb0JBQW9CLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQW9FLDBEQUEwRCxDQUFDLFVBQVUsQ0FBQyw2QkFBNkIsWUFBWSxDQUFzSyxtQ0FBOEIsYUFBYSxDQUEzQyw4QkFBOEIsYUFBYSxDQUFDLHVCQUF1QixvQkFBb0IsQ0FBQyw0REFBNEQsb0JBQW9CLENBQUMsU0FBUyxDQUFDLGtCQUFrQixXQUFXLENBQUMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLG1CQUFtQixDQUFDLHdCQUF3QixrQkFBa0IsQ0FBQyxrQkFBa0IsV0FBVyxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxnQkFBZ0IsV0FBVyxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBNEIsa0JBQWtCLENBQUMsZ0JBQWdCLENBQUMsc0JBQXNCLFVBQVUsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLHFCQUFxQixDQUFDLHdCQUF3QixtQkFBbUIsQ0FBQyx1Q0FBdUMsd0JBQXdCLENBQUMsb0JBQW9CLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUF3Tyx5REFBb0QsYUFBYSxDQUFqRSxvREFBb0QsYUFBYSxDQUFDLHNDQUFzQyxrQkFBa0IsQ0FBQyxtR0FBbUcsY0FBYyxDQUFDLHFDQUFxQyxvQkFBb0IsQ0FBQyx1REFBdUQsYUFBYSxDQUFDLG1DQUFtQyxrQkFBa0IsQ0FBQyxtQ0FBbUMsaUJBQWlCLENBQUMsa0JBQWtCLGNBQWMsQ0FBQyxtQ0FBbUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLGtDQUFrQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsY0FBYyxDQUFDLGtDQUFrQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsaUNBQWlDLGdCQUFnQixDQUFDLGdCQUFnQixjQUFjLENBQUMsaUNBQWlDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxnQ0FBZ0MsZ0JBQWdCLENBQUMsZ0JBQWdCLGtCQUFrQixDQUFDLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyx3QkFBd0IsQ0FBQyxnQkFBZ0IsQ0FBQyxpQ0FBaUMscUJBQXFCLENBQUMsa0JBQWtCLENBQUMsaURBQWlELHdCQUF3QixDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBaUIsQ0FBQyx3QkFBd0IsQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLGtFQUFrRSx5QkFBeUIsQ0FBQyw0QkFBNEIsQ0FBQyw2REFBNkQsU0FBUyxDQUFDLDhJQUE4SSxvQkFBb0IsQ0FBQyxrQkFBa0IsQ0FBQyw2VEFBNlQsd0JBQXdCLENBQUMsNEJBQTRCLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMseUJBQXlCLGNBQWMsQ0FBQyx3QkFBd0IsYUFBYSxDQUFDLHdCQUF3QixDQUFDLDJCQUEyQixDQUFDLCtJQUErSSx3QkFBd0IsQ0FBQywwQ0FBMEMsd0JBQXdCLENBQUMsMkJBQTJCLENBQUMsNEJBQTRCLFlBQVksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLGFBQWEsY0FBYyxDQUFDLHNCQUFzQixvQkFBb0IsQ0FBQyxxQkFBcUIsQ0FBQyxjQUFjLENBQUMscUJBQXFCLGFBQWEsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyx3QkFBd0IsQ0FBQyxXQUFXLENBQUMscUlBQXFJLGFBQWEsQ0FBQywwR0FBMEcsY0FBYyxDQUFDLG1DQUFtQyxpQkFBaUIsQ0FBQyx3RUFBd0Usd0JBQXdCLENBQUMsd0JBQXdCLENBQUMsYUFBYSxDQUFDLGlDQUFpQyxrQkFBa0IsQ0FBQyxrQ0FBa0MsUUFBUSxDQUFDLG1CQUFtQix3QkFBd0IsQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLG9CQUFvQixDQUFDLHFCQUFxQixDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMscUJBQXFCLENBQUMsaUJBQWlCLENBQUMseUJBQXlCLFlBQVksQ0FBQyx3Q0FBd0MsbUJBQW1CLENBQUMseUJBQXlCLFFBQVEsQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQStCLHFCQUFxQixDQUFDLHVDQUF1QyxZQUFZLENBQUMsYUFBYSxDQUFDLHlCQUF5QixXQUFXLENBQUMsZ0JBQWdCLENBQUMsaUJBQWlCLENBQUMsdUJBQXVCLENBQUMscUNBQXFDLGFBQWEsQ0FBQywrQkFBK0IsYUFBYSxDQUFDLHlEQUF5RCxVQUFVLENBQUMsZUFBZSxDQUFDLHNCQUFzQixDQUFDLGtCQUFrQixDQUFDLGFBQWEsQ0FBK0IscUJBQXFCLENBQUMsaUJBQWlCLENBQUMsZ0JBQWdCLENBQUMsNkNBQTZDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQywyQkFBMkIsaUJBQWlCLENBQUMsV0FBVyxDQUErQixxQkFBcUIsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLDRDQUE0QyxXQUFXLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxvQkFBb0IsQ0FBK0IscUJBQXFCLENBQUMsa0JBQWtCLENBQUMsa0JBQWtCLENBQUMsaUJBQWlCLENBQUMsMkNBQTJDLGVBQWUsQ0FBQyw4Q0FBOEMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQywrQkFBK0IsQ0FBK0IscUJBQXFCLENBQUMsVUFBVSxDQUFDLHlCQUF5Qiw2QkFBNkIsQ0FBQywyREFBMkQsYUFBYSxDQUFDLGdCQUFnQixDQUFDLCtFQUErRSxjQUFjLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxvRkFBb0YsaUJBQWlCLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLDhDQUE4QyxXQUFXLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsNEJBQTRCLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLHFEQUFxRCxvQkFBb0IsQ0FBQyxXQUFXLENBQUMscUJBQXFCLENBQUMsc0NBQTBELG1CQUFtQixDQUFDLDJEQUEyRCxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsNkNBQTZDLFFBQVEsQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLHVDQUF1QyxnQkFBZ0IsQ0FBQyx1Q0FBdUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyw4Q0FBOEMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsY0FBYyxZQUFZLENBQW1GLGtCQUFrQixDQUErQixNQUFNLENBQThCLGVBQWUsQ0FBQyxxQkFBcUIsQ0FBQyxXQUFXLENBQUMsMERBQTBELDJCQUF3RCxDQUFDLDBCQUFvRCxxQkFBcUIsQ0FBQyxXQUFXLGNBQWMsQ0FBQyxxQkFBcUIsQ0FBcUIsYUFBYSxDQUFDLFVBQVUsYUFBYSxDQUErQixxQkFBcUIsQ0FBcUIsYUFBYSxDQUFDLFNBQVMsYUFBYSxDQUErQixNQUFNLENBQThCLGVBQWUsQ0FBQyxhQUFhLENBQStCLHFCQUFxQixDQUFDLFdBQVcsY0FBYyxDQUErQixxQkFBcUIsQ0FBcUIsYUFBYSxDQUFDLGFBQWEsUUFBUSxDQUFDLGVBQWUsQ0FBQyxrRUFBa0UsWUFBWSxDQUFDLGtCQUFrQixpQkFBaUIsQ0FBQyxtQkFBbUIsQ0FBQywyQkFBMkIsaUJBQWlCLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLHdCQUF3QixpQkFBaUIsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLDZCQUE2QixDQUFDLHdCQUF3QixVQUFVLENBQUMsY0FBYyxDQUFDLHdCQUF3QixpQkFBaUIsQ0FBQyx3QkFBd0IsQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQThDLHNCQUFzQixDQUFnRCxrQkFBa0IsQ0FBQyx3Q0FBNEQsbUJBQW1CLENBQUMsZ0NBQWdDLFNBQVMsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLCtCQUErQixTQUFTLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxpQ0FBaUMsd0JBQXdCLENBQUMsaUNBQWlDLHdCQUF3QixDQUFDLGlDQUFpQyx3QkFBd0IsQ0FBQyxnQ0FBZ0Msd0JBQXdCLENBQUMsOEJBQThCLHdCQUF3QixDQUFDLHVCQUF1QixpQkFBaUIsQ0FBQyxZQUFZLENBQThDLHNCQUFzQixDQUFnRCxrQkFBa0IsQ0FBQywyQkFBMkIsYUFBYSxDQUFDLDZCQUE2QixhQUFhLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxvQ0FBb0MsaUJBQWlCLENBQUMsZUFBZSxDQUFDLHVDQUF1QyxjQUFjLENBQUMsU0FBK0QsbUJBQW1CLENBQW1GLGtCQUFrQixDQUFnRCxrQkFBa0IsQ0FBOEMsc0JBQXNCLENBQUMscUJBQXFCLENBQUMsaUJBQWlCLENBQUMsb0JBQW9CLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsa0NBQWtDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQywrQkFBK0IsQ0FBQyxtSEFBbUgsb0JBQW9CLENBQUMscUJBQXFCLGtCQUFrQixDQUFDLGdDQUFnQyxlQUFlLENBQUMsMEJBQTBCLGFBQWEsQ0FBQyxnQ0FBZ0MsYUFBYSxDQUFDLHNDQUFzQyxhQUFhLENBQUMsMEJBQTBCLGFBQWEsQ0FBQyxnQ0FBZ0MsYUFBYSxDQUFDLHNDQUFzQyxhQUFhLENBQUMsaUZBQWlGLG9CQUFvQixDQUFDLHlCQUF5QixhQUFhLENBQUMsK0JBQStCLGFBQWEsQ0FBQyxxQ0FBcUMsYUFBYSxDQUFDLG1GQUFtRixvQkFBb0IsQ0FBQywwQkFBMEIsYUFBYSxDQUFDLGdDQUFnQyxhQUFhLENBQUMsc0NBQXNDLGFBQWEsQ0FBQyxtRkFBbUYsb0JBQW9CLENBQUMsMEJBQTBCLGFBQWEsQ0FBQyxnQ0FBZ0MsYUFBYSxDQUFDLHNDQUFzQyxhQUFhLENBQUMsNkVBQTZFLG9CQUFvQixDQUFDLHVCQUF1QixhQUFhLENBQUMsNkJBQTZCLGFBQWEsQ0FBQyxtQ0FBbUMsYUFBYSxDQUFDLFlBQVksd0JBQXdCLENBQUMsaUJBQWlCLENBQUMsd0JBQXdCLGFBQWEsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxzQkFBc0Isb0JBQW9CLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMscUJBQXFCLENBQUMsaUJBQWlCLENBQUMsa0JBQWtCLGlCQUFpQixDQUFDLHFCQUFxQixDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLHdDQUF3QyxrQkFBa0IsQ0FBQywwQkFBMEIsU0FBUyxDQUFvQywwQkFBMEIsQ0FBQyw0QkFBNEIsUUFBUSxDQUFxRCwyQ0FBMkMsQ0FBQywyQkFBMkIsVUFBVSxDQUFvQywwQkFBMEIsQ0FBQyx5REFBeUQsVUFBVSxDQUFDLFdBQVcsQ0FBQyxVQUFVLGlCQUFpQixDQUFDLG9CQUFvQixDQUFDLGVBQWUsQ0FBQyxpQkFBaUIsa0JBQWtCLENBQUMseUJBQXlCLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQXdDLDhCQUE4QixDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsWUFBWSxDQUE4QyxzQkFBc0IsQ0FBZ0Qsa0JBQWtCLENBQUMsYUFBYSxDQUFDLHFCQUFxQixDQUFDLDBCQUEwQixjQUFjLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLHNCQUFzQixpQkFBaUIsQ0FBQyxTQUFTLENBQXlDLFlBQVksQ0FBZ0Qsa0JBQWtCLENBQThDLHNCQUFzQixDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBK0IscUJBQXFCLENBQUMsd0JBQXdCLENBQUMscUJBQWUsQ0FBZixnQkFBZ0IsQ0FBQyxrRkFBa0Ysd0JBQXdCLENBQUMscUJBQXFCLENBQUMsb0JBQW9CLENBQUMsd0JBQXdCLFFBQVEsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLHdCQUF3QixDQUFDLHlCQUF5QixVQUFVLENBQUMsV0FBVyxDQUF5QyxZQUFZLENBQThDLHNCQUFzQixDQUFnRCxrQkFBa0IsQ0FBQywwQkFBMEIsUUFBUSxDQUFDLFdBQVcsQ0FBb0MsMEJBQTBCLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsd0JBQXdCLENBQUMsaUJBQWlCLENBQUMsa0JBQWtCLENBQUMsaUNBQWlDLFVBQVUsQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQXlDLFlBQVksQ0FBZ0Qsa0JBQWtCLENBQTBCLDRCQUE0QixDQUFDLDhDQUE4QyxVQUFVLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsd0JBQXdCLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLHVCQUEwRCwwQkFBMEIsQ0FBQyxTQUFTLENBQUMsdUJBQTBELDBCQUEwQixDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsdUJBQXVCLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLDBCQUErRCw0QkFBNEIsQ0FBQywwQkFBZ0UsNkJBQTZCLENBQTRNLDBCQUEwQixHQUE0QyxnQ0FBZ0MsQ0FBQyxTQUFTLENBQUMsS0FBMEMsNEJBQTRCLENBQUMsU0FBUyxDQUFDLENBQTZNLDJCQUEyQixHQUF3Qyw0QkFBNEIsQ0FBQyxTQUFTLENBQUMsS0FBOEMsZ0NBQWdDLENBQUMsU0FBUyxDQUFDLENBQUMsV0FBVyxvQkFBb0IsQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyx3QkFBd0IsQ0FBQyxhQUFhLENBQUMsdUJBQXVCLENBQUMsaUJBQWlCLENBQStCLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQXdCLGNBQWMsQ0FBQyxlQUFlLENBQUMsaUJBQWlCLENBQUMsY0FBYyxDQUFDLGlCQUFpQixDQUFDLHdFQUF3RSxnQkFBZ0IsQ0FBQyxrQ0FBa0MsYUFBYSxDQUFDLG9CQUFvQixDQUFDLHdCQUF3QixDQUFDLGtCQUFrQixhQUFhLENBQUMsb0JBQW9CLENBQUMsU0FBUyxDQUFDLDZCQUE2QixRQUFRLENBQUMsa0NBQWtDLGVBQWUsQ0FBQyxvREFBb0QsZUFBZSxDQUFDLG9CQUFvQixDQUFDLGFBQWEsQ0FBQyxnREFBZ0QsYUFBYSxDQUFDLG9CQUFvQixDQUFDLDJCQUEyQixlQUFlLENBQUMsU0FBUyxDQUFDLGlGQUFpRixhQUFhLENBQUMsa0JBQWtCLENBQUMscUJBQXFCLENBQUMscUJBQXFCLENBQUMsb0JBQW9CLENBQUMsdUNBQXVDLDRCQUE0QixDQUFDLDRHQUE0RyxxQkFBcUIsQ0FBQyxvQkFBb0IsQ0FBQyxhQUFhLENBQUMsc0JBQXNCLGlCQUFpQixDQUFDLG1CQUFtQixDQUFDLDZCQUE2QixtQkFBbUIsQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLHFCQUFxQixDQUFDLHNDQUFzQyxDQUFDLG9CQUFvQixrQkFBa0IsQ0FBQyxpQkFBaUIsQ0FBQyxxQkFBcUIsaUJBQWlCLENBQUMsWUFBWSxDQUFDLG9CQUFvQixVQUFVLENBQUMsd0JBQXdCLENBQUMsb0JBQW9CLENBQUMsb0RBQW9ELGtCQUFrQixDQUFDLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyx5REFBeUQsa0JBQWtCLENBQUMsb0JBQW9CLENBQUMsVUFBVSxDQUFDLDJCQUEyQixTQUFTLENBQUMsbUpBQW1KLFVBQVUsQ0FBQyx3QkFBd0IsQ0FBQyxvQkFBb0IsQ0FBQyw2QkFBNkIsYUFBYSxDQUFDLGtCQUFrQixDQUFDLG9CQUFvQixDQUFDLHNFQUFzRSxrQkFBa0IsQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsb0NBQW9DLGtCQUFrQixDQUFDLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsdUxBQXVMLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQyxvQkFBb0IsQ0FBQyxvQkFBb0IsVUFBVSxDQUFDLHdCQUF3QixDQUFDLG9CQUFvQixDQUFDLG9EQUFvRCxrQkFBa0IsQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVLENBQUMseURBQXlELGtCQUFrQixDQUFDLG9CQUFvQixDQUFDLFVBQVUsQ0FBQywyQkFBMkIsU0FBUyxDQUFDLG1KQUFtSixVQUFVLENBQUMsd0JBQXdCLENBQUMsb0JBQW9CLENBQUMsNkJBQTZCLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxvQkFBb0IsQ0FBQyxzRUFBc0Usa0JBQWtCLENBQUMsb0JBQW9CLENBQUMsVUFBVSxDQUFDLG9DQUFvQyxrQkFBa0IsQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLHVMQUF1TCxhQUFhLENBQUMsd0JBQXdCLENBQUMsb0JBQW9CLENBQUMsb0JBQW9CLFVBQVUsQ0FBQyx3QkFBd0IsQ0FBQyxvQkFBb0IsQ0FBQyxvREFBb0Qsa0JBQWtCLENBQUMsb0JBQW9CLENBQUMsVUFBVSxDQUFDLHlEQUF5RCxrQkFBa0IsQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsMkJBQTJCLFNBQVMsQ0FBQyxtSkFBbUosVUFBVSxDQUFDLHdCQUF3QixDQUFDLG9CQUFvQixDQUFDLDZCQUE2QixhQUFhLENBQUMsa0JBQWtCLENBQUMsb0JBQW9CLENBQUMsc0VBQXNFLGtCQUFrQixDQUFDLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxvQ0FBb0Msa0JBQWtCLENBQUMsb0JBQW9CLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyx1TEFBdUwsYUFBYSxDQUFDLHdCQUF3QixDQUFDLG9CQUFvQixDQUFDLG1CQUFtQixVQUFVLENBQUMsd0JBQXdCLENBQUMsb0JBQW9CLENBQUMsa0RBQWtELGtCQUFrQixDQUFDLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyx1REFBdUQsa0JBQWtCLENBQUMsb0JBQW9CLENBQUMsVUFBVSxDQUFDLDBCQUEwQixTQUFTLENBQUMsK0lBQStJLFVBQVUsQ0FBQyx3QkFBd0IsQ0FBQyxvQkFBb0IsQ0FBQyw0QkFBNEIsYUFBYSxDQUFDLGtCQUFrQixDQUFDLG9CQUFvQixDQUFDLG9FQUFvRSxrQkFBa0IsQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsbUNBQW1DLGtCQUFrQixDQUFDLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsbUxBQW1MLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQyxvQkFBb0IsQ0FBQyxpQkFBaUIsVUFBVSxDQUFDLHdCQUF3QixDQUFDLG9CQUFvQixDQUFDLDhDQUE4QyxrQkFBa0IsQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsbURBQW1ELGtCQUFrQixDQUFDLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyx3QkFBd0IsU0FBUyxDQUFDLHVJQUF1SSxVQUFVLENBQUMsd0JBQXdCLENBQUMsb0JBQW9CLENBQUMsMEJBQTBCLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxvQkFBb0IsQ0FBQyxnRUFBZ0Usa0JBQWtCLENBQUMsb0JBQW9CLENBQUMsVUFBVSxDQUFDLGlDQUFpQyxrQkFBa0IsQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLDJLQUEySyxhQUFhLENBQUMsd0JBQXdCLENBQUMsb0JBQW9CLENBQUMsbUJBQW1CLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyw0QkFBNEIsaUJBQWlCLENBQUMsNkJBQTZCLFlBQVksQ0FBQyxrQkFBa0IsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLGlCQUFpQixDQUFDLDJCQUEyQixnQkFBZ0IsQ0FBQyw0QkFBNEIsV0FBVyxDQUFDLDJDQUEyQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsY0FBYyxDQUFDLGlCQUFpQixDQUFDLDJCQUEyQixXQUFXLENBQUMsaUJBQWlCLHdCQUF3QixDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyw4Q0FBOEMsYUFBYSxDQUFDLHdCQUF3QixDQUFDLDRCQUE0QixDQUFDLHdCQUF3QixhQUFhLENBQUMsd0JBQXdCLENBQUMsNEJBQTRCLENBQUMsbUdBQW1HLHdCQUF3QixDQUFDLHluQkFBeW5CLHNDQUFzQyxDQUFDLHFsQkFBcWxCLHVDQUF1QyxDQUFDLGlCQUFpQixvQkFBb0IsQ0FBQyxxQkFBcUIsQ0FBQyxpREFBaUQsYUFBYSxDQUFDLHdCQUF3QixVQUFVLENBQUMsNEJBQTRCLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyx3Q0FBd0MsU0FBUyxDQUFDLHdDQUF3Qyx5QkFBeUIsQ0FBQyw0QkFBNEIsQ0FBQyx1Q0FBdUMsd0JBQXdCLENBQUMsMkJBQTJCLENBQUMsbURBQW1ELGlCQUFpQixDQUFDLDREQUE0RCxrQkFBa0IsQ0FBQyw2REFBNkQsaUJBQWlCLENBQUMsK0RBQStELGVBQWUsQ0FBQyxtTUFBbU0sU0FBUyxDQUFDLHlDQUF5Qyx3QkFBd0IsQ0FBQywyQkFBMkIsQ0FBQyxhQUFhLHFCQUFxQixDQUFDLHFCQUE2RCxZQUFZLENBQWdELDZCQUE2QixDQUFDLGlCQUFpQixDQUFDLCtCQUErQixDQUFDLDRCQUFnRCxtQkFBbUIsQ0FBQyxvQkFBb0IsVUFBVSxDQUE0QixpQkFBaUIsQ0FBQyxtQkFBbUIsc0JBQXNCLENBQUMsbUJBQW1CLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyw0QkFBNEIsY0FBYyxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsb0ZBQW9GLGFBQWEsQ0FBQywyQ0FBMkMsYUFBYSxDQUFDLHNCQUFzQiwrQkFBK0IsQ0FBQyw4QkFBOEIsQ0FBQyxrQkFBa0IsQ0FBOEMsb0NBQW9DLENBQUMsa0NBQWtDLHdCQUF3QixDQUFDLHFDQUFxQyw0QkFBNEIsQ0FBQyxxQ0FBcUMsNkJBQTZCLENBQUMsNkRBQTZELGVBQWUsQ0FBQyxvQ0FBa0UscUJBQXFCLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQywwQ0FBMEMsY0FBYyxDQUFDLHdCQUF3QixDQUFDLFlBQVksY0FBYyxDQUFDLHFCQUFxQixDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFnRCxrQkFBa0IsQ0FBOEMsc0JBQXNCLENBQUMsY0FBYyxDQUE0QyxrQ0FBa0MsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLGtCQUFrQix3QkFBd0IsQ0FBQyxnQkFBZ0IsWUFBWSxDQUFDLGdCQUFnQixDQUFDLHNCQUE4RCxZQUFZLENBQUMsY0FBYyxDQUFDLGlCQUFpQixDQUFDLGlCQUFpQixDQUFDLDZCQUE2QixpQkFBaUIsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQW9DLDBCQUEwQixDQUFDLHdCQUF3QixDQUFDLGlDQUFpQyxvQkFBb0IsQ0FBQyxpQkFBaUIsQ0FBQyxrQkFBa0IsQ0FBQyxvQ0FBb0MsY0FBYyxDQUFDLGdCQUFnQixDQUE0QixpQkFBaUIsQ0FBQyx1QkFBdUIsY0FBYyxDQUFDLGVBQWUsQ0FBQyx5QkFBeUIsY0FBYyxDQUFDLGFBQWEsQ0FBQyxhQUFhLGFBQWEsQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyx3QkFBZ0IsQ0FBaEIscUJBQWdCLENBQWhCLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDLHlCQUF5Qix5QkFBeUIsQ0FBQyxpQkFBaUIsQ0FBQyx3QkFBd0IsQ0FBK0IscUJBQXFCLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLG9DQUFvQyxvQkFBb0IsQ0FBQyxxQ0FBcUMsb0JBQW9CLENBQUMsa0JBQWtCLENBQUMsNkNBQTZDLHlCQUF5QixDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxpRUFBaUUsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLGlFQUFpRSxXQUFXLENBQUMsVUFBVSxDQUFDLDRDQUE0Qyx5QkFBeUIsQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsZ0VBQWdFLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxnRUFBZ0UsV0FBVyxDQUFDLFVBQVUsQ0FBQyx1RUFBdUUsVUFBVSxDQUFDLFNBQVMsQ0FBQywyQ0FBMkMseUJBQXlCLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLCtEQUErRCxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsK0RBQStELFdBQVcsQ0FBQyxVQUFVLENBQUMsc0VBQXNFLFVBQVUsQ0FBQyxTQUFTLENBQUMsb0JBQW9CLGNBQWMsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLHFCQUFxQixDQUFDLG9EQUFvRCx3QkFBd0IsQ0FBQyxvQkFBb0IsQ0FBQyxrQkFBa0IsQ0FBQywyREFBMkQsa0JBQWtCLENBQUMsb0JBQW9CLENBQUMsd0VBQXdFLGtCQUFrQixDQUFDLCtEQUErRCx3QkFBd0IsQ0FBQyxvQkFBb0IsQ0FBQyxzRUFBc0Usb0JBQW9CLENBQUMscUVBQXFFLHdCQUF3QixDQUFDLG9CQUFvQixDQUFDLDZFQUE2RSx3QkFBd0IsQ0FBQyxvQkFBb0IsQ0FBQyw0R0FBNEcsd0JBQXdCLENBQUMsb0JBQW9CLENBQUMsd0RBQXdELGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQywwREFBb0csaUNBQWlDLENBQUMsbURBQW1ELGFBQWEsQ0FBQyxpREFBaUQsb0JBQW9CLENBQUMsaUVBQWlFLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMscUJBQXFCLENBQUMsVUFBVSxDQUE2QixtQkFBbUIsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxnRUFBZ0UsWUFBWSxDQUFDLG9CQUFvQixvQkFBb0IsQ0FBQyxpQkFBaUIsQ0FBQyx3QkFBd0IsQ0FBQyxpQkFBaUIsQ0FBK0IscUJBQXFCLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQTRILGtIQUFrSCxDQUFDLDBCQUEwQixvQkFBb0IsQ0FBQywyQkFBMEQsc0JBQXNCLENBQUMsVUFBVSxDQUFDLHFCQUFxQixDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQTJDLGlDQUFpQyxDQUFDLFNBQVMsQ0FBdUcsc0NBQXNDLENBQTRHLHVCQUF1QixDQUFDLHVCQUF1QixTQUFTLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQywrQ0FBK0Msb0JBQW9CLENBQUMsaUJBQWlCLENBQUMsb0JBQW9CLG9CQUFvQixDQUFDLGlCQUFpQixDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQywwQkFBMEIsY0FBYyxDQUFDLDJCQUEyQixhQUFhLENBQUMsZUFBZSxDQUFDLGtCQUFrQixDQUFDLHFCQUFxQixDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsd0JBQXdCLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyx1QkFBdUIsQ0FBQyxpQkFBaUIsQ0FBK0IscUJBQXFCLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBMkQsaURBQWlELENBQUMsaUJBQWlCLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxvQ0FBb0MsaUJBQWlCLENBQUMsaUNBQWlDLGFBQWEsQ0FBQyw2Q0FBNkMsY0FBYyxDQUFDLGtEQUFrRCxlQUFlLENBQUMsOEJBQThCLFNBQVMsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyw0Q0FBNEMsaUJBQWlCLENBQUMsb0JBQW9CLENBQUMsMERBQTBELFVBQVUsQ0FBQyx3QkFBd0IsQ0FBQyxvQkFBb0IsQ0FBdUMsNkJBQTZCLENBQUMsc0VBQXNFLHlCQUF5QixDQUFDLDJEQUEyRCxhQUFhLENBQUMsa0JBQWtCLENBQUMscUJBQXFCLENBQUMscUJBQXFCLENBQUMsb0JBQW9CLENBQXlCLGVBQWUsQ0FBQyx1RUFBdUUseUJBQXlCLENBQUMsMkRBQTJELDZCQUE2QixDQUFDLHlCQUF5QixDQUFtQyx5QkFBeUIsQ0FBQyx3REFBd0Qsb0JBQW9CLENBQUMsMERBQTBELHlCQUF5QixDQUFDLHVEQUF1RCxpQkFBaUIsQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLGdFQUFnRSxpQkFBaUIsQ0FBQyxzREFBc0QsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQywrREFBK0QsZ0JBQWdCLENBQUMscURBQXFELGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsOERBQThELGdCQUFnQixDQUFDLG1CQUFtQixXQUFXLENBQUMsd0dBQXdHLGNBQWMsQ0FBQyxVQUFVLGFBQWEsQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsaURBQWlELGNBQWMsQ0FBQyxzQkFBc0Isd0JBQXdCLENBQUMsaUJBQWlCLENBQUMsd0JBQXdCLENBQStCLHFCQUFxQixDQUFDLFdBQVcsQ0FBQywyREFBMkQsNkJBQTZCLENBQUMsaUNBQWlDLG9CQUFvQixDQUFDLGtDQUFrQyxrQkFBa0IsQ0FBQyxvQkFBb0IsQ0FBQyx1R0FBdUcsd0JBQXdCLENBQUMsb0JBQW9CLENBQUMsNENBQTRDLGdCQUFnQixDQUFDLDhCQUE4Qix3QkFBd0IsQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsMkZBQTJGLGNBQWMsQ0FBQywrQ0FBK0MsV0FBVyxDQUFDLFVBQVUsQ0FBQyw2QkFBNkIsdUJBQXVCLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLDhDQUE4QyxXQUFXLENBQUMsVUFBVSxDQUFDLDRCQUE0Qix1QkFBdUIsQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsNkNBQTZDLFdBQVcsQ0FBQyxVQUFVLENBQUMsaUJBQWlCLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLHFCQUFxQixDQUFDLDhDQUE4QyxrQkFBa0IsQ0FBQyxxREFBcUQsa0JBQWtCLENBQUMsd0JBQXdCLENBQUMsK0RBQStELGtCQUFrQixDQUFDLGdFQUFnRSx3QkFBd0IsQ0FBQyxrREFBa0QsYUFBYSxDQUFDLGtCQUFrQixDQUFDLDZDQUE2QyxvQkFBb0IsQ0FBQyxrQkFBa0IsQ0FBQyxvREFBb0csdUNBQXVDLENBQUMsNkNBQTZDLGFBQWEsQ0FBQywyQ0FBMkMsb0JBQW9CLENBQUMsaUJBQWlCLHdCQUF3QixDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMscUJBQXFCLENBQUMsY0FBYyxDQUFDLHFCQUFxQixDQUFDLHVCQUF1QixvQkFBb0IsQ0FBQyx3QkFBd0IsU0FBUyxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBaUQsdUNBQXVDLENBQTZGLGlDQUFrRyxDQUFDLG9CQUFvQixTQUFTLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLCtFQUFzSCw4QkFBOEIsQ0FBQyxpQkFBaUIsaUJBQWlCLENBQUMsY0FBYyxlQUFlLENBQUMsaUJBQWlCLENBQUMsc0hBQXNILFNBQVMsQ0FBMkMsaUNBQWlDLENBQUMsb0JBQW9CLGVBQWUsQ0FBQyxXQUFXLENBQUMsb0NBQW9DLG9CQUFvQixDQUFDLHVEQUF1RCxPQUFPLENBQUMsUUFBUSxDQUFDLHFCQUFxQixpQkFBaUIsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMscUJBQXFCLENBQUMscUNBQXFDLENBQXlDLCtCQUErQixDQUFDLDJCQUEyQixxQ0FBcUMsQ0FBQyxtQkFBbUIsaUJBQWlCLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUEyQyxpQ0FBaUMsQ0FBQywrQkFBK0IsU0FBUyxDQUFDLE9BQU8sQ0FBQyxtQ0FBbUMsVUFBVSxDQUFDLGlDQUFpQyxVQUFVLENBQUMsUUFBUSxDQUFDLHFDQUFxQyxXQUFXLENBQUMsbUJBQTJELFlBQVksQ0FBQyxpQkFBaUIsQ0FBQywrQkFBK0Isd0JBQXdCLENBQUMsaUJBQWlCLENBQUMsa0JBQWtCLGVBQWUsQ0FBQyxxQkFBcUIsQ0FBQyxhQUFhLENBQUMsOEJBQThCLENBQUMsNkJBQTZCLGlCQUFpQixDQUFDLHdCQUF3QixZQUFZLENBQUMsd0JBQXdCLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxxQkFBcUIsQ0FBQyw4QkFBOEIsaUJBQWlCLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLG1CQUFtQixDQUFDLDhCQUE4QixpQkFBaUIsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUF3Qyw4QkFBOEIsQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsa0JBQWtCLGlCQUFpQixDQUF5QyxZQUFZLENBQWdELGtCQUFrQixDQUFDLHFCQUFxQixDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsK0NBQStDLGFBQWEsQ0FBQyw2R0FBNkcsYUFBYSxDQUFDLGVBQWUsQ0FBQyxvQ0FBb0MsY0FBYyxDQUFDLG9GQUFvRixrQkFBa0IsQ0FBQyw4QkFBOEIsYUFBYSxDQUFDLGtCQUFrQixDQUFDLDBCQUEwQixpQkFBaUIsQ0FBQyxTQUFTLENBQUMsMkJBQTJCLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyx5QkFBdUQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsc0JBQXNCLENBQUMsNkNBQTZDLGNBQWMsQ0FBQyxXQUFXLG9CQUFvQixDQUErQixxQkFBcUIsQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsOEJBQThCLDZCQUE2QixDQUFDLGVBQWUsYUFBYSxDQUFDLFdBQVcsQ0FBQyxxQkFBcUIsQ0FBQywwQ0FBMEMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsaUJBQWlCLENBQUMsbUJBQW1CLGlCQUFpQixDQUFDLGlCQUFpQixjQUFjLENBQUMsa0JBQWtCLFVBQVUsQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsbUJBQW1CLFVBQVUsQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLFVBQVUsQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQW1FLDZCQUE2QixHQUFHLFNBQVMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFxSyx5QkFBeUIsR0FBdUMsMkJBQTJCLENBQUMsS0FBc0Msd0JBQXdCLENBQUMsQ0FBc0ssMEJBQTBCLEdBQW9DLHdCQUF3QixDQUFDLEtBQXlDLDJCQUEyQixDQUFDLENBQXVLLHlCQUF5QixHQUF3Qyw0QkFBNEIsQ0FBQyxLQUFzQyx3QkFBd0IsQ0FBQyxDQUF3SywwQkFBMEIsR0FBb0Msd0JBQXdCLENBQUMsS0FBMEMsNEJBQTRCLENBQUMsQ0FBdUsseUJBQXlCLEdBQXdDLDRCQUE0QixDQUFDLEtBQXNDLHdCQUF3QixDQUFDLENBQXdLLDBCQUEwQixHQUFvQyx3QkFBd0IsQ0FBQyxLQUEwQyw0QkFBNEIsQ0FBQyxDQUFxSyx5QkFBeUIsR0FBdUMsMkJBQTJCLENBQUMsS0FBc0Msd0JBQXdCLENBQUMsQ0FBc0ssMEJBQTBCLEdBQW9DLHdCQUF3QixDQUFDLEtBQXlDLDJCQUEyQixDQUFDLENBQUMsV0FBVyxpQkFBaUIsQ0FBQyxxQkFBcUIsQ0FBQyxxQkFBcUIsQ0FBeUMsWUFBWSxDQUEyQixxQkFBcUIsQ0FBa0gsd0dBQXdHLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxlQUFvRCw0QkFBNEIsQ0FBQyxPQUFPLENBQUMsZ0NBQXdFLCtCQUErQixDQUFDLGVBQW9ELDRCQUE0QixDQUFDLE1BQU0sQ0FBQyxnQ0FBd0UsK0JBQStCLENBQUMsZUFBb0QsNEJBQTRCLENBQUMsS0FBSyxDQUFDLGdDQUF3RSwrQkFBK0IsQ0FBQyxlQUFvRCw0QkFBNEIsQ0FBQyxRQUFRLENBQUMsZ0NBQXdFLCtCQUErQixDQUFDLG9CQUFvQixjQUFjLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsbUJBQWtFLGtCQUFrQixDQUFDLGFBQWEsQ0FBeUMsWUFBWSxDQUFDLGtCQUFrQixDQUFDLG1CQUFtQixDQUFDLGdDQUE4RCxNQUFNLENBQUMsa0JBQWtCLFFBQVEsQ0FBK0IsTUFBTSxDQUFDLG1CQUFtQixDQUFDLGNBQWMsQ0FBQyxzQkFBc0IsV0FBVyxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLDRCQUE0QixDQUFDLGlCQUErQyxNQUFNLENBQUMsYUFBYSxDQUFDLG1CQUFtQixxQkFBcUIsQ0FBQyw4QkFBOEIsV0FBVyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsOEJBQThCLFVBQVUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLHNCQUFzQixpQkFBaUIsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyw2QkFBcUUsK0JBQStCLENBQUMsNkJBQTZCLHVDQUF1QyxDQUFDLGNBQWMsVUFBVSxDQUErQixxQkFBcUIsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyx5QkFBeUIsQ0FBQyxlQUFlLENBQXNDLDRCQUE0QixDQUFDLGlCQUFpQixDQUFDLG9CQUFvQixpQkFBaUIsQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLG1CQUFtQixzQkFBc0IsQ0FBeUMsWUFBWSxDQUE4QyxzQkFBc0IsQ0FBZ0Qsa0JBQWtCLENBQUMsYUFBYSxDQUFDLDJCQUEyQixjQUFjLENBQUMsYUFBYSxDQUFDLHdCQUF3QixvQkFBb0IsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMseUNBQXlDLG1CQUFtQixDQUFDLHdCQUF3QixDQUFDLG1CQUFtQixDQUFDLHFCQUFxQixZQUFZLENBQXVCLGtCQUFrQixDQUFDLHFCQUFxQixnQkFBZ0IsQ0FBQyx1QkFBdUIsZ0JBQWdCLENBQUMsUUFBUSxDQUF3RywrQkFBK0IsR0FBRyw0QkFBNEIsQ0FBQyxLQUFLLHlCQUF5QixDQUFDLENBQUMsYUFBYSxVQUFVLENBQUMsaURBQWlELFdBQVcsQ0FBQyxlQUFlLENBQUMsa0JBQWtCLENBQUMsNENBQTJLLHFFQUFxRSxDQUFDLHlCQUF5QixDQUEwRCxnREFBZ0QsQ0FBQyxtQkFBbUIsa0JBQWtCLENBQUMsb0JBQW9CLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxxQkFBcUIsaUJBQWlCLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyx5QkFBeUIsVUFBVSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyx5QkFBeUIsVUFBVSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxxQkFBcUIsV0FBVyxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxnQkFBZ0IsVUFBVSxDQUFDLHdCQUF3QixTQUFTLENBQUMseUJBQXlCLFNBQVMsQ0FBQyxtQkFBbUIsVUFBVSxDQUFDLFdBQVcsQ0FBQyxzQkFBc0IsV0FBVyxDQUFDLGlCQUFpQixXQUFXLENBQUMsaUJBQWlCLFdBQVcsQ0FBQyxpQkFBaUIsV0FBVyxDQUFDLG9CQUFvQixXQUFXLENBQUMsWUFBWSxDQUF1QixrQkFBa0IsQ0FBOEMsc0JBQXNCLENBQUMsZUFBZSxDQUFDLHdCQUF3QixZQUFZLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxVQUFrRCxZQUFZLENBQThDLHNCQUFzQixDQUFnRCxrQkFBa0IsQ0FBMkIscUJBQXFCLENBQUMsaUJBQWlCLENBQStCLHFCQUFxQixDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsV0FBVyxDQUFDLHFCQUFxQix3QkFBZ0IsQ0FBaEIscUJBQWdCLENBQWhCLGdCQUFnQixDQUFDLHFCQUFxQixDQUFDLGtCQUFrQixDQUFDLHFCQUFxQixZQUFZLENBQUMsdUJBQXVCLGVBQWUsQ0FBQyx5QkFBeUIsUUFBUSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsb0NBQW9DLGVBQWUsQ0FBQyxpQkFBK0MscUJBQXFCLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyx5QkFBaUUsWUFBWSxDQUFnRCw2QkFBNkIsQ0FBZ0Qsa0JBQWtCLENBQUMsa0JBQWtCLENBQUMsd0JBQXdCLGNBQWMsQ0FBQyxlQUFlLENBQUMsK0NBQStDLGNBQWMsQ0FBQyx1QkFBdUIsYUFBYSxDQUFDLHFCQUFxQixDQUFDLCtDQUErQyx3QkFBd0IsQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUMsMkVBQXlHLHFCQUFxQixDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLG1GQUFtRixlQUFlLENBQUMscUZBQXFGLGlCQUFpQixDQUFDLG9GQUFvRixnQkFBZ0IsQ0FBQyw4QkFBOEIsaUJBQWlCLENBQUMsMERBQTBELHdCQUF3QixDQUFDLGlCQUFpQixDQUFDLGdFQUFnRSxtQkFBbUIsQ0FBQyxpRUFBaUUsWUFBWSxDQUFDLHVFQUF1RSxtQkFBbUIsQ0FBQyxnRUFBZ0UsZ0JBQWdCLENBQUMsc0VBQXNFLGtCQUFrQixDQUFDLCtEQUErRCxnQkFBZ0IsQ0FBQyxxRUFBcUUsa0JBQWtCLENBQUMsc0JBQXNCLGtCQUFrQixDQUFDLGlDQUF5RSxZQUFZLENBQUMsOEhBQW9MLG1CQUFtQixDQUFvRCxvQkFBb0IsQ0FBQyxnRUFBOEYsTUFBTSxDQUFDLDhDQUE4QyxXQUFXLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLCtDQUErQyxlQUFlLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLHFEQUFxRCxpQkFBaUIsQ0FBQywrQkFBK0IscUJBQXFCLENBQUMsd0JBQXdCLENBQUMsV0FBbUQsWUFBWSxDQUE4QyxzQkFBc0IsQ0FBZ0Qsa0JBQWtCLENBQTJCLHFCQUFxQixDQUFDLGlCQUFpQixDQUErQixxQkFBcUIsQ0FBQyxpQkFBaUIsQ0FBQyxxQkFBcUIsVUFBVSxDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsUUFBUSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLHFCQUFxQixlQUFlLENBQUMsdUJBQXVCLFFBQVEsQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxrQkFBa0IsZUFBZSxDQUFDLHlCQUF5QixZQUFZLENBQUMsdUJBQXVCLFlBQVksQ0FBQyxzQkFBc0IsWUFBWSxDQUFDLHlCQUF5QixZQUFZXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIkBjaGFyc2V0IFxcXCJVVEYtOFxcXCI7QGZvbnQtZmFjZXtmb250LWZhbWlseTplbGVtZW50LWljb25zO3NyYzp1cmwoZm9udHMvZWxlbWVudC1pY29ucy53b2ZmKSBmb3JtYXQoXFxcIndvZmZcXFwiKSx1cmwoZm9udHMvZWxlbWVudC1pY29ucy50dGYpIGZvcm1hdChcXFwidHJ1ZXR5cGVcXFwiKTtmb250LXdlaWdodDo0MDA7Zm9udC1kaXNwbGF5OlxcXCJhdXRvXFxcIjtmb250LXN0eWxlOm5vcm1hbH1bY2xhc3MqPVxcXCIgZWwtaWNvbi1cXFwiXSxbY2xhc3NePWVsLWljb24tXXtmb250LWZhbWlseTplbGVtZW50LWljb25zIWltcG9ydGFudDtzcGVhazpub25lO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0OjQwMDtmb250LXZhcmlhbnQ6bm9ybWFsO3RleHQtdHJhbnNmb3JtOm5vbmU7bGluZS1oZWlnaHQ6MTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTtkaXNwbGF5OmlubGluZS1ibG9jazstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFudGlhbGlhc2VkOy1tb3otb3N4LWZvbnQtc21vb3RoaW5nOmdyYXlzY2FsZX0uZWwtaWNvbi1pY2UtY3JlYW0tcm91bmQ6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNmEwXFxcIn0uZWwtaWNvbi1pY2UtY3JlYW0tc3F1YXJlOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTZhM1xcXCJ9LmVsLWljb24tbG9sbGlwb3A6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNmE0XFxcIn0uZWwtaWNvbi1wb3RhdG8tc3RyaXBzOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTZhNVxcXCJ9LmVsLWljb24tbWlsay10ZWE6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNmE2XFxcIn0uZWwtaWNvbi1pY2UtZHJpbms6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNmE3XFxcIn0uZWwtaWNvbi1pY2UtdGVhOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTZhOVxcXCJ9LmVsLWljb24tY29mZmVlOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTZhYVxcXCJ9LmVsLWljb24tb3JhbmdlOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTZhYlxcXCJ9LmVsLWljb24tcGVhcjpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU2YWNcXFwifS5lbC1pY29uLWFwcGxlOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTZhZFxcXCJ9LmVsLWljb24tY2hlcnJ5OmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTZhZVxcXCJ9LmVsLWljb24td2F0ZXJtZWxvbjpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU2YWZcXFwifS5lbC1pY29uLWdyYXBlOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTZiMFxcXCJ9LmVsLWljb24tcmVmcmlnZXJhdG9yOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTZiMVxcXCJ9LmVsLWljb24tZ29ibGV0LXNxdWFyZS1mdWxsOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTZiMlxcXCJ9LmVsLWljb24tZ29ibGV0LXNxdWFyZTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU2YjNcXFwifS5lbC1pY29uLWdvYmxldC1mdWxsOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTZiNFxcXCJ9LmVsLWljb24tZ29ibGV0OmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTZiNVxcXCJ9LmVsLWljb24tY29sZC1kcmluazpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU2YjZcXFwifS5lbC1pY29uLWNvZmZlZS1jdXA6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNmI4XFxcIn0uZWwtaWNvbi13YXRlci1jdXA6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNmI5XFxcIn0uZWwtaWNvbi1ob3Qtd2F0ZXI6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNmJhXFxcIn0uZWwtaWNvbi1pY2UtY3JlYW06YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNmJiXFxcIn0uZWwtaWNvbi1kZXNzZXJ0OmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTZiY1xcXCJ9LmVsLWljb24tc3VnYXI6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNmJkXFxcIn0uZWwtaWNvbi10YWJsZXdhcmU6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNmJlXFxcIn0uZWwtaWNvbi1idXJnZXI6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNmJmXFxcIn0uZWwtaWNvbi1rbmlmZS1mb3JrOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTZjMVxcXCJ9LmVsLWljb24tZm9yay1zcG9vbjpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU2YzJcXFwifS5lbC1pY29uLWNoaWNrZW46YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNmMzXFxcIn0uZWwtaWNvbi1mb29kOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTZjNFxcXCJ9LmVsLWljb24tZGlzaC0xOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTZjNVxcXCJ9LmVsLWljb24tZGlzaDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU2YzZcXFwifS5lbC1pY29uLW1vb24tbmlnaHQ6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNmVlXFxcIn0uZWwtaWNvbi1tb29uOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTZmMFxcXCJ9LmVsLWljb24tY2xvdWR5LWFuZC1zdW5ueTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU2ZjFcXFwifS5lbC1pY29uLXBhcnRseS1jbG91ZHk6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNmYyXFxcIn0uZWwtaWNvbi1jbG91ZHk6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNmYzXFxcIn0uZWwtaWNvbi1zdW5ueTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU2ZjZcXFwifS5lbC1pY29uLXN1bnNldDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU2ZjdcXFwifS5lbC1pY29uLXN1bnJpc2UtMTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU2ZjhcXFwifS5lbC1pY29uLXN1bnJpc2U6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNmY5XFxcIn0uZWwtaWNvbi1oZWF2eS1yYWluOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTZmYVxcXCJ9LmVsLWljb24tbGlnaHRuaW5nOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTZmYlxcXCJ9LmVsLWljb24tbGlnaHQtcmFpbjpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU2ZmNcXFwifS5lbC1pY29uLXdpbmQtcG93ZXI6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNmZkXFxcIn0uZWwtaWNvbi1iYXNlYmFsbDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3MTJcXFwifS5lbC1pY29uLXNvY2NlcjpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3MTNcXFwifS5lbC1pY29uLWZvb3RiYWxsOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTcxNVxcXCJ9LmVsLWljb24tYmFza2V0YmFsbDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3MTZcXFwifS5lbC1pY29uLXNoaXA6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzNmXFxcIn0uZWwtaWNvbi10cnVjazpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3NDBcXFwifS5lbC1pY29uLWJpY3ljbGU6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzQxXFxcIn0uZWwtaWNvbi1tb2JpbGUtcGhvbmU6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNmQzXFxcIn0uZWwtaWNvbi1zZXJ2aWNlOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTZkNFxcXCJ9LmVsLWljb24ta2V5OmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTZlMlxcXCJ9LmVsLWljb24tdW5sb2NrOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTZlNFxcXCJ9LmVsLWljb24tbG9jazpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU2ZTVcXFwifS5lbC1pY29uLXdhdGNoOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTZmZVxcXCJ9LmVsLWljb24td2F0Y2gtMTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU2ZmZcXFwifS5lbC1pY29uLXRpbWVyOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTcwMlxcXCJ9LmVsLWljb24tYWxhcm0tY2xvY2s6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzAzXFxcIn0uZWwtaWNvbi1tYXAtbG9jYXRpb246YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzA0XFxcIn0uZWwtaWNvbi1kZWxldGUtbG9jYXRpb246YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzA1XFxcIn0uZWwtaWNvbi1hZGQtbG9jYXRpb246YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzA2XFxcIn0uZWwtaWNvbi1sb2NhdGlvbi1pbmZvcm1hdGlvbjpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3MDdcXFwifS5lbC1pY29uLWxvY2F0aW9uLW91dGxpbmU6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzA4XFxcIn0uZWwtaWNvbi1sb2NhdGlvbjpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3OWVcXFwifS5lbC1pY29uLXBsYWNlOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTcwOVxcXCJ9LmVsLWljb24tZGlzY292ZXI6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzBhXFxcIn0uZWwtaWNvbi1maXJzdC1haWQta2l0OmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTcwYlxcXCJ9LmVsLWljb24tdHJvcGh5LTE6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzBjXFxcIn0uZWwtaWNvbi10cm9waHk6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzBkXFxcIn0uZWwtaWNvbi1tZWRhbDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3MGVcXFwifS5lbC1pY29uLW1lZGFsLTE6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzBmXFxcIn0uZWwtaWNvbi1zdG9wd2F0Y2g6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzEwXFxcIn0uZWwtaWNvbi1taWM6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzExXFxcIn0uZWwtaWNvbi1jb3B5LWRvY3VtZW50OmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTcxOFxcXCJ9LmVsLWljb24tZnVsbC1zY3JlZW46YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzE5XFxcIn0uZWwtaWNvbi1zd2l0Y2gtYnV0dG9uOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTcxYlxcXCJ9LmVsLWljb24tYWltOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTcxY1xcXCJ9LmVsLWljb24tY3JvcDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3MWRcXFwifS5lbC1pY29uLW9kb21ldGVyOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTcxZVxcXCJ9LmVsLWljb24tdGltZTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3MWZcXFwifS5lbC1pY29uLWJhbmd6aHU6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzI0XFxcIn0uZWwtaWNvbi1jbG9zZS1ub3RpZmljYXRpb246YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzI2XFxcIn0uZWwtaWNvbi1taWNyb3Bob25lOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTcyN1xcXCJ9LmVsLWljb24tdHVybi1vZmYtbWljcm9waG9uZTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3MjhcXFwifS5lbC1pY29uLXBvc2l0aW9uOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTcyOVxcXCJ9LmVsLWljb24tcG9zdGNhcmQ6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzJhXFxcIn0uZWwtaWNvbi1tZXNzYWdlOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTcyYlxcXCJ9LmVsLWljb24tY2hhdC1saW5lLXNxdWFyZTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3MmRcXFwifS5lbC1pY29uLWNoYXQtZG90LXNxdWFyZTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3MmVcXFwifS5lbC1pY29uLWNoYXQtZG90LXJvdW5kOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTcyZlxcXCJ9LmVsLWljb24tY2hhdC1zcXVhcmU6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzMwXFxcIn0uZWwtaWNvbi1jaGF0LWxpbmUtcm91bmQ6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzMxXFxcIn0uZWwtaWNvbi1jaGF0LXJvdW5kOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTczMlxcXCJ9LmVsLWljb24tc2V0LXVwOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTczM1xcXCJ9LmVsLWljb24tdHVybi1vZmY6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzM0XFxcIn0uZWwtaWNvbi1vcGVuOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTczNVxcXCJ9LmVsLWljb24tY29ubmVjdGlvbjpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3MzZcXFwifS5lbC1pY29uLWxpbms6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzM3XFxcIn0uZWwtaWNvbi1jcHU6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzM4XFxcIn0uZWwtaWNvbi10aHVtYjpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3MzlcXFwifS5lbC1pY29uLWZlbWFsZTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3M2FcXFwifS5lbC1pY29uLW1hbGU6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzNiXFxcIn0uZWwtaWNvbi1ndWlkZTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3M2NcXFwifS5lbC1pY29uLW5ld3M6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzNlXFxcIn0uZWwtaWNvbi1wcmljZS10YWc6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzQ0XFxcIn0uZWwtaWNvbi1kaXNjb3VudDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3NDVcXFwifS5lbC1pY29uLXdhbGxldDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3NDdcXFwifS5lbC1pY29uLWNvaW46YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzQ4XFxcIn0uZWwtaWNvbi1tb25leTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3NDlcXFwifS5lbC1pY29uLWJhbmstY2FyZDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3NGFcXFwifS5lbC1pY29uLWJveDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3NGJcXFwifS5lbC1pY29uLXByZXNlbnQ6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzRjXFxcIn0uZWwtaWNvbi1zZWxsOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTZkNVxcXCJ9LmVsLWljb24tc29sZC1vdXQ6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNmQ2XFxcIn0uZWwtaWNvbi1zaG9wcGluZy1iYWctMjpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3NGRcXFwifS5lbC1pY29uLXNob3BwaW5nLWJhZy0xOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTc0ZVxcXCJ9LmVsLWljb24tc2hvcHBpbmctY2FydC0yOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTc0ZlxcXCJ9LmVsLWljb24tc2hvcHBpbmctY2FydC0xOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTc1MFxcXCJ9LmVsLWljb24tc2hvcHBpbmctY2FydC1mdWxsOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTc1MVxcXCJ9LmVsLWljb24tc21va2luZzpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3NTJcXFwifS5lbC1pY29uLW5vLXNtb2tpbmc6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzUzXFxcIn0uZWwtaWNvbi1ob3VzZTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3NTRcXFwifS5lbC1pY29uLXRhYmxlLWxhbXA6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzU1XFxcIn0uZWwtaWNvbi1zY2hvb2w6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzU2XFxcIn0uZWwtaWNvbi1vZmZpY2UtYnVpbGRpbmc6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzU3XFxcIn0uZWwtaWNvbi10b2lsZXQtcGFwZXI6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzU4XFxcIn0uZWwtaWNvbi1ub3RlYm9vay0yOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTc1OVxcXCJ9LmVsLWljb24tbm90ZWJvb2stMTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3NWFcXFwifS5lbC1pY29uLWZpbGVzOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTc1YlxcXCJ9LmVsLWljb24tY29sbGVjdGlvbjpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3NWNcXFwifS5lbC1pY29uLXJlY2VpdmluZzpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3NWRcXFwifS5lbC1pY29uLXN1aXRjYXNlLTE6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzYwXFxcIn0uZWwtaWNvbi1zdWl0Y2FzZTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3NjFcXFwifS5lbC1pY29uLWZpbG06YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzYzXFxcIn0uZWwtaWNvbi1jb2xsZWN0aW9uLXRhZzpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3NjVcXFwifS5lbC1pY29uLWRhdGEtYW5hbHlzaXM6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzY2XFxcIn0uZWwtaWNvbi1waWUtY2hhcnQ6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzY3XFxcIn0uZWwtaWNvbi1kYXRhLWJvYXJkOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTc2OFxcXCJ9LmVsLWljb24tZGF0YS1saW5lOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTc2ZFxcXCJ9LmVsLWljb24tcmVhZGluZzpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3NjlcXFwifS5lbC1pY29uLW1hZ2ljLXN0aWNrOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTc2YVxcXCJ9LmVsLWljb24tY29vcmRpbmF0ZTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3NmJcXFwifS5lbC1pY29uLW1vdXNlOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTc2Y1xcXCJ9LmVsLWljb24tYnJ1c2g6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzZlXFxcIn0uZWwtaWNvbi1oZWFkc2V0OmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTc2ZlxcXCJ9LmVsLWljb24tdW1icmVsbGE6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzcwXFxcIn0uZWwtaWNvbi1zY2lzc29yczpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3NzFcXFwifS5lbC1pY29uLW1vYmlsZTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3NzNcXFwifS5lbC1pY29uLWF0dHJhY3Q6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzc0XFxcIn0uZWwtaWNvbi1tb25pdG9yOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTc3NVxcXCJ9LmVsLWljb24tc2VhcmNoOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTc3OFxcXCJ9LmVsLWljb24tdGFrZWF3YXktYm94OmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTc3YVxcXCJ9LmVsLWljb24tcGFwZXJjbGlwOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTc3ZFxcXCJ9LmVsLWljb24tcHJpbnRlcjpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3N2VcXFwifS5lbC1pY29uLWRvY3VtZW50LWFkZDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3ODJcXFwifS5lbC1pY29uLWRvY3VtZW50OmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTc4NVxcXCJ9LmVsLWljb24tZG9jdW1lbnQtY2hlY2tlZDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3ODZcXFwifS5lbC1pY29uLWRvY3VtZW50LWNvcHk6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzg3XFxcIn0uZWwtaWNvbi1kb2N1bWVudC1kZWxldGU6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzg4XFxcIn0uZWwtaWNvbi1kb2N1bWVudC1yZW1vdmU6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzg5XFxcIn0uZWwtaWNvbi10aWNrZXRzOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTc4YlxcXCJ9LmVsLWljb24tZm9sZGVyLWNoZWNrZWQ6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzdmXFxcIn0uZWwtaWNvbi1mb2xkZXItZGVsZXRlOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTc4MFxcXCJ9LmVsLWljb24tZm9sZGVyLXJlbW92ZTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3ODFcXFwifS5lbC1pY29uLWZvbGRlci1hZGQ6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzgzXFxcIn0uZWwtaWNvbi1mb2xkZXItb3BlbmVkOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTc4NFxcXCJ9LmVsLWljb24tZm9sZGVyOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTc4YVxcXCJ9LmVsLWljb24tZWRpdC1vdXRsaW5lOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTc2NFxcXCJ9LmVsLWljb24tZWRpdDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3OGNcXFwifS5lbC1pY29uLWRhdGU6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzhlXFxcIn0uZWwtaWNvbi1jLXNjYWxlLXRvLW9yaWdpbmFsOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTdjNlxcXCJ9LmVsLWljb24tdmlldzpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU2Y2VcXFwifS5lbC1pY29uLWxvYWRpbmc6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNmNmXFxcIn0uZWwtaWNvbi1yYW5rOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTZkMVxcXCJ9LmVsLWljb24tc29ydC1kb3duOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTdjNFxcXCJ9LmVsLWljb24tc29ydC11cDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3YzVcXFwifS5lbC1pY29uLXNvcnQ6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNmQyXFxcIn0uZWwtaWNvbi1maW5pc2hlZDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU2Y2RcXFwifS5lbC1pY29uLXJlZnJlc2gtbGVmdDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU2YzdcXFwifS5lbC1pY29uLXJlZnJlc2gtcmlnaHQ6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNmM4XFxcIn0uZWwtaWNvbi1yZWZyZXNoOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTZkMFxcXCJ9LmVsLWljb24tdmlkZW8tcGxheTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3YzBcXFwifS5lbC1pY29uLXZpZGVvLXBhdXNlOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTdjMVxcXCJ9LmVsLWljb24tZC1hcnJvdy1yaWdodDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU2ZGNcXFwifS5lbC1pY29uLWQtYXJyb3ctbGVmdDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU2ZGRcXFwifS5lbC1pY29uLWFycm93LXVwOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTZlMVxcXCJ9LmVsLWljb24tYXJyb3ctZG93bjpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU2ZGZcXFwifS5lbC1pY29uLWFycm93LXJpZ2h0OmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTZlMFxcXCJ9LmVsLWljb24tYXJyb3ctbGVmdDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU2ZGVcXFwifS5lbC1pY29uLXRvcC1yaWdodDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU2ZTdcXFwifS5lbC1pY29uLXRvcC1sZWZ0OmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTZlOFxcXCJ9LmVsLWljb24tdG9wOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTZlNlxcXCJ9LmVsLWljb24tYm90dG9tOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTZlYlxcXCJ9LmVsLWljb24tcmlnaHQ6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNmU5XFxcIn0uZWwtaWNvbi1iYWNrOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTZlYVxcXCJ9LmVsLWljb24tYm90dG9tLXJpZ2h0OmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTZlY1xcXCJ9LmVsLWljb24tYm90dG9tLWxlZnQ6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNmVkXFxcIn0uZWwtaWNvbi1jYXJldC10b3A6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzhmXFxcIn0uZWwtaWNvbi1jYXJldC1ib3R0b206YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzkwXFxcIn0uZWwtaWNvbi1jYXJldC1yaWdodDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3OTFcXFwifS5lbC1pY29uLWNhcmV0LWxlZnQ6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzkyXFxcIn0uZWwtaWNvbi1kLWNhcmV0OmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTc5YVxcXCJ9LmVsLWljb24tc2hhcmU6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzkzXFxcIn0uZWwtaWNvbi1tZW51OmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTc5OFxcXCJ9LmVsLWljb24tcy1ncmlkOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTdhNlxcXCJ9LmVsLWljb24tcy1jaGVjazpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3YTdcXFwifS5lbC1pY29uLXMtZGF0YTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3YThcXFwifS5lbC1pY29uLXMtb3Bwb3J0dW5pdHk6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlN2FhXFxcIn0uZWwtaWNvbi1zLWN1c3RvbTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3YWJcXFwifS5lbC1pY29uLXMtY2xhaW06YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlN2FkXFxcIn0uZWwtaWNvbi1zLWZpbmFuY2U6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlN2FlXFxcIn0uZWwtaWNvbi1zLWNvbW1lbnQ6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlN2FmXFxcIn0uZWwtaWNvbi1zLWZsYWc6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlN2IwXFxcIn0uZWwtaWNvbi1zLW1hcmtldGluZzpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3YjFcXFwifS5lbC1pY29uLXMtc2hvcDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3YjRcXFwifS5lbC1pY29uLXMtb3BlbjpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3YjVcXFwifS5lbC1pY29uLXMtbWFuYWdlbWVudDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3YjZcXFwifS5lbC1pY29uLXMtdGlja2V0OmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTdiN1xcXCJ9LmVsLWljb24tcy1yZWxlYXNlOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTdiOFxcXCJ9LmVsLWljb24tcy1ob21lOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTdiOVxcXCJ9LmVsLWljb24tcy1wcm9tb3Rpb246YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlN2JhXFxcIn0uZWwtaWNvbi1zLW9wZXJhdGlvbjpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3YmJcXFwifS5lbC1pY29uLXMtdW5mb2xkOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTdiY1xcXCJ9LmVsLWljb24tcy1mb2xkOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTdhOVxcXCJ9LmVsLWljb24tcy1wbGF0Zm9ybTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3YmRcXFwifS5lbC1pY29uLXMtb3JkZXI6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlN2JlXFxcIn0uZWwtaWNvbi1zLWNvb3BlcmF0aW9uOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTdiZlxcXCJ9LmVsLWljb24tYmVsbDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3MjVcXFwifS5lbC1pY29uLW1lc3NhZ2Utc29saWQ6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzk5XFxcIn0uZWwtaWNvbi12aWRlby1jYW1lcmE6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzcyXFxcIn0uZWwtaWNvbi12aWRlby1jYW1lcmEtc29saWQ6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzk2XFxcIn0uZWwtaWNvbi1jYW1lcmE6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzc5XFxcIn0uZWwtaWNvbi1jYW1lcmEtc29saWQ6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzliXFxcIn0uZWwtaWNvbi1kb3dubG9hZDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3N2NcXFwifS5lbC1pY29uLXVwbG9hZDI6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzdiXFxcIn0uZWwtaWNvbi11cGxvYWQ6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlN2MzXFxcIn0uZWwtaWNvbi1waWN0dXJlLW91dGxpbmUtcm91bmQ6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzVmXFxcIn0uZWwtaWNvbi1waWN0dXJlLW91dGxpbmU6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzVlXFxcIn0uZWwtaWNvbi1waWN0dXJlOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTc5ZlxcXCJ9LmVsLWljb24tY2xvc2U6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNmRiXFxcIn0uZWwtaWNvbi1jaGVjazpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU2ZGFcXFwifS5lbC1pY29uLXBsdXM6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNmQ5XFxcIn0uZWwtaWNvbi1taW51czpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU2ZDhcXFwifS5lbC1pY29uLWhlbHA6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzNkXFxcIn0uZWwtaWNvbi1zLWhlbHA6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlN2IzXFxcIn0uZWwtaWNvbi1jaXJjbGUtY2xvc2U6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzhkXFxcIn0uZWwtaWNvbi1jaXJjbGUtY2hlY2s6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzIwXFxcIn0uZWwtaWNvbi1jaXJjbGUtcGx1cy1vdXRsaW5lOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTcyM1xcXCJ9LmVsLWljb24tcmVtb3ZlLW91dGxpbmU6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzIyXFxcIn0uZWwtaWNvbi16b29tLW91dDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3NzZcXFwifS5lbC1pY29uLXpvb20taW46YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzc3XFxcIn0uZWwtaWNvbi1lcnJvcjpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3OWRcXFwifS5lbC1pY29uLXN1Y2Nlc3M6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzljXFxcIn0uZWwtaWNvbi1jaXJjbGUtcGx1czpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3YTBcXFwifS5lbC1pY29uLXJlbW92ZTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3YTJcXFwifS5lbC1pY29uLWluZm86YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlN2ExXFxcIn0uZWwtaWNvbi1xdWVzdGlvbjpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3YTRcXFwifS5lbC1pY29uLXdhcm5pbmctb3V0bGluZTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU2YzlcXFwifS5lbC1pY29uLXdhcm5pbmc6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlN2EzXFxcIn0uZWwtaWNvbi1nb29kczpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3YzJcXFwifS5lbC1pY29uLXMtZ29vZHM6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlN2IyXFxcIn0uZWwtaWNvbi1zdGFyLW9mZjpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3MTdcXFwifS5lbC1pY29uLXN0YXItb246YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNzk3XFxcIn0uZWwtaWNvbi1tb3JlLW91dGxpbmU6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlNmNjXFxcIn0uZWwtaWNvbi1tb3JlOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTc5NFxcXCJ9LmVsLWljb24tcGhvbmUtb3V0bGluZTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU2Y2JcXFwifS5lbC1pY29uLXBob25lOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTc5NVxcXCJ9LmVsLWljb24tdXNlcjpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU2ZTNcXFwifS5lbC1pY29uLXVzZXItc29saWQ6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlN2E1XFxcIn0uZWwtaWNvbi1zZXR0aW5nOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTZjYVxcXCJ9LmVsLWljb24tcy10b29sczpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3YWNcXFwifS5lbC1pY29uLWRlbGV0ZTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU2ZDdcXFwifS5lbC1pY29uLWRlbGV0ZS1zb2xpZDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXGU3YzlcXFwifS5lbC1pY29uLWVsZW1lOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcZTdjN1xcXCJ9LmVsLWljb24tcGxhdGZvcm0tZWxlbWU6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxlN2NhXFxcIn0uZWwtaWNvbi1sb2FkaW5ney13ZWJraXQtYW5pbWF0aW9uOnJvdGF0aW5nIDJzIGxpbmVhciBpbmZpbml0ZTthbmltYXRpb246cm90YXRpbmcgMnMgbGluZWFyIGluZmluaXRlfS5lbC1pY29uLS1yaWdodHttYXJnaW4tbGVmdDo1cHh9LmVsLWljb24tLWxlZnR7bWFyZ2luLXJpZ2h0OjVweH1ALXdlYmtpdC1rZXlmcmFtZXMgcm90YXRpbmd7MCV7LXdlYmtpdC10cmFuc2Zvcm06cm90YXRlWigwKTt0cmFuc2Zvcm06cm90YXRlWigwKX0xMDAley13ZWJraXQtdHJhbnNmb3JtOnJvdGF0ZVooMzYwZGVnKTt0cmFuc2Zvcm06cm90YXRlWigzNjBkZWcpfX1Aa2V5ZnJhbWVzIHJvdGF0aW5nezAley13ZWJraXQtdHJhbnNmb3JtOnJvdGF0ZVooMCk7dHJhbnNmb3JtOnJvdGF0ZVooMCl9MTAwJXstd2Via2l0LXRyYW5zZm9ybTpyb3RhdGVaKDM2MGRlZyk7dHJhbnNmb3JtOnJvdGF0ZVooMzYwZGVnKX19LmVsLXBhZ2luYXRpb257d2hpdGUtc3BhY2U6bm93cmFwO3BhZGRpbmc6MnB4IDVweDtjb2xvcjojMzAzMTMzO2ZvbnQtd2VpZ2h0OjcwMH0uZWwtcGFnaW5hdGlvbjo6YWZ0ZXIsLmVsLXBhZ2luYXRpb246OmJlZm9yZXtkaXNwbGF5OnRhYmxlO2NvbnRlbnQ6XFxcIlxcXCJ9LmVsLXBhZ2luYXRpb246OmFmdGVye2NsZWFyOmJvdGh9LmVsLXBhZ2luYXRpb24gYnV0dG9uLC5lbC1wYWdpbmF0aW9uIHNwYW46bm90KFtjbGFzcyo9c3VmZml4XSl7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjEzcHg7bWluLXdpZHRoOjM1LjVweDtoZWlnaHQ6MjhweDtsaW5lLWhlaWdodDoyOHB4O3ZlcnRpY2FsLWFsaWduOnRvcDstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3h9LmVsLXBhZ2luYXRpb24gLmVsLWlucHV0X19pbm5lcnt0ZXh0LWFsaWduOmNlbnRlcjstbW96LWFwcGVhcmFuY2U6dGV4dGZpZWxkO2xpbmUtaGVpZ2h0Om5vcm1hbH0uZWwtcGFnaW5hdGlvbiAuZWwtaW5wdXRfX3N1ZmZpeHtyaWdodDowOy13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKC44KTt0cmFuc2Zvcm06c2NhbGUoLjgpfS5lbC1wYWdpbmF0aW9uIC5lbC1zZWxlY3QgLmVsLWlucHV0e3dpZHRoOjEwMHB4O21hcmdpbjowIDVweH0uZWwtcGFnaW5hdGlvbiAuZWwtc2VsZWN0IC5lbC1pbnB1dCAuZWwtaW5wdXRfX2lubmVye3BhZGRpbmctcmlnaHQ6MjVweDtib3JkZXItcmFkaXVzOjNweH0uZWwtcGFnaW5hdGlvbiBidXR0b257Ym9yZGVyOm5vbmU7cGFkZGluZzowIDZweDtiYWNrZ3JvdW5kOjAgMH0uZWwtcGFnaW5hdGlvbiBidXR0b246Zm9jdXN7b3V0bGluZTowfS5lbC1wYWdpbmF0aW9uIGJ1dHRvbjpob3Zlcntjb2xvcjojNDA5RUZGfS5lbC1wYWdpbmF0aW9uIGJ1dHRvbjpkaXNhYmxlZHtjb2xvcjojQzBDNENDO2JhY2tncm91bmQtY29sb3I6I0ZGRjtjdXJzb3I6bm90LWFsbG93ZWR9LmVsLXBhZ2luYXRpb24gLmJ0bi1uZXh0LC5lbC1wYWdpbmF0aW9uIC5idG4tcHJldntiYWNrZ3JvdW5kOmNlbnRlciBjZW50ZXIgbm8tcmVwZWF0ICNGRkY7YmFja2dyb3VuZC1zaXplOjE2cHg7Y3Vyc29yOnBvaW50ZXI7bWFyZ2luOjA7Y29sb3I6IzMwMzEzM30uZWwtcGFnaW5hdGlvbiAuYnRuLW5leHQgLmVsLWljb24sLmVsLXBhZ2luYXRpb24gLmJ0bi1wcmV2IC5lbC1pY29ue2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NzAwfS5lbC1wYWdpbmF0aW9uIC5idG4tcHJldntwYWRkaW5nLXJpZ2h0OjEycHh9LmVsLXBhZ2luYXRpb24gLmJ0bi1uZXh0e3BhZGRpbmctbGVmdDoxMnB4fS5lbC1wYWdpbmF0aW9uIC5lbC1wYWdlciBsaS5kaXNhYmxlZHtjb2xvcjojQzBDNENDO2N1cnNvcjpub3QtYWxsb3dlZH0uZWwtcGFnZXIgbGksLmVsLXBhZ2VyIGxpLmJ0bi1xdWlja25leHQ6aG92ZXIsLmVsLXBhZ2VyIGxpLmJ0bi1xdWlja3ByZXY6aG92ZXJ7Y3Vyc29yOnBvaW50ZXJ9LmVsLXBhZ2luYXRpb24tLXNtYWxsIC5idG4tbmV4dCwuZWwtcGFnaW5hdGlvbi0tc21hbGwgLmJ0bi1wcmV2LC5lbC1wYWdpbmF0aW9uLS1zbWFsbCAuZWwtcGFnZXIgbGksLmVsLXBhZ2luYXRpb24tLXNtYWxsIC5lbC1wYWdlciBsaS5idG4tcXVpY2tuZXh0LC5lbC1wYWdpbmF0aW9uLS1zbWFsbCAuZWwtcGFnZXIgbGkuYnRuLXF1aWNrcHJldiwuZWwtcGFnaW5hdGlvbi0tc21hbGwgLmVsLXBhZ2VyIGxpOmxhc3QtY2hpbGR7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjIycHg7aGVpZ2h0OjIycHg7bWluLXdpZHRoOjIycHh9LmVsLXBhZ2luYXRpb24tLXNtYWxsIC5hcnJvdy5kaXNhYmxlZHt2aXNpYmlsaXR5OmhpZGRlbn0uZWwtcGFnaW5hdGlvbi0tc21hbGwgLm1vcmU6OmJlZm9yZSwuZWwtcGFnaW5hdGlvbi0tc21hbGwgbGkubW9yZTo6YmVmb3Jle2xpbmUtaGVpZ2h0OjI0cHh9LmVsLXBhZ2luYXRpb24tLXNtYWxsIGJ1dHRvbiwuZWwtcGFnaW5hdGlvbi0tc21hbGwgc3Bhbjpub3QoW2NsYXNzKj1zdWZmaXhdKXtoZWlnaHQ6MjJweDtsaW5lLWhlaWdodDoyMnB4fS5lbC1wYWdpbmF0aW9uLS1zbWFsbCAuZWwtcGFnaW5hdGlvbl9fZWRpdG9yLC5lbC1wYWdpbmF0aW9uLS1zbWFsbCAuZWwtcGFnaW5hdGlvbl9fZWRpdG9yLmVsLWlucHV0IC5lbC1pbnB1dF9faW5uZXJ7aGVpZ2h0OjIycHh9LmVsLXBhZ2luYXRpb25fX3NpemVze21hcmdpbjowIDEwcHggMCAwO2ZvbnQtd2VpZ2h0OjQwMDtjb2xvcjojNjA2MjY2fS5lbC1wYWdpbmF0aW9uX19zaXplcyAuZWwtaW5wdXQgLmVsLWlucHV0X19pbm5lcntmb250LXNpemU6MTNweDtwYWRkaW5nLWxlZnQ6OHB4fS5lbC1wYWdpbmF0aW9uX19zaXplcyAuZWwtaW5wdXQgLmVsLWlucHV0X19pbm5lcjpob3Zlcntib3JkZXItY29sb3I6IzQwOUVGRn0uZWwtcGFnaW5hdGlvbl9fdG90YWx7bWFyZ2luLXJpZ2h0OjEwcHg7Zm9udC13ZWlnaHQ6NDAwO2NvbG9yOiM2MDYyNjZ9LmVsLXBhZ2luYXRpb25fX2p1bXB7bWFyZ2luLWxlZnQ6MjRweDtmb250LXdlaWdodDo0MDA7Y29sb3I6IzYwNjI2Nn0uZWwtcGFnaW5hdGlvbl9fanVtcCAuZWwtaW5wdXRfX2lubmVye3BhZGRpbmc6MCAzcHh9LmVsLXBhZ2luYXRpb25fX3JpZ2h0d3JhcHBlcntmbG9hdDpyaWdodH0uZWwtcGFnaW5hdGlvbl9fZWRpdG9ye2xpbmUtaGVpZ2h0OjE4cHg7cGFkZGluZzowIDJweDtoZWlnaHQ6MjhweDt0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW46MCAycHg7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlci1yYWRpdXM6M3B4fS5lbC1wYWdlciwuZWwtcGFnaW5hdGlvbi5pcy1iYWNrZ3JvdW5kIC5idG4tbmV4dCwuZWwtcGFnaW5hdGlvbi5pcy1iYWNrZ3JvdW5kIC5idG4tcHJldntwYWRkaW5nOjB9LmVsLWRpYWxvZywuZWwtcGFnZXIgbGl7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3h9LmVsLXBhZ2luYXRpb25fX2VkaXRvci5lbC1pbnB1dHt3aWR0aDo1MHB4fS5lbC1wYWdpbmF0aW9uX19lZGl0b3IuZWwtaW5wdXQgLmVsLWlucHV0X19pbm5lcntoZWlnaHQ6MjhweH0uZWwtcGFnaW5hdGlvbl9fZWRpdG9yIC5lbC1pbnB1dF9faW5uZXI6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sLmVsLXBhZ2luYXRpb25fX2VkaXRvciAuZWwtaW5wdXRfX2lubmVyOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lO21hcmdpbjowfS5lbC1wYWdpbmF0aW9uLmlzLWJhY2tncm91bmQgLmJ0bi1uZXh0LC5lbC1wYWdpbmF0aW9uLmlzLWJhY2tncm91bmQgLmJ0bi1wcmV2LC5lbC1wYWdpbmF0aW9uLmlzLWJhY2tncm91bmQgLmVsLXBhZ2VyIGxpe21hcmdpbjowIDVweDtiYWNrZ3JvdW5kLWNvbG9yOiNmNGY0ZjU7Y29sb3I6IzYwNjI2NjttaW4td2lkdGg6MzBweDtib3JkZXItcmFkaXVzOjJweH0uZWwtcGFnaW5hdGlvbi5pcy1iYWNrZ3JvdW5kIC5idG4tbmV4dC5kaXNhYmxlZCwuZWwtcGFnaW5hdGlvbi5pcy1iYWNrZ3JvdW5kIC5idG4tbmV4dDpkaXNhYmxlZCwuZWwtcGFnaW5hdGlvbi5pcy1iYWNrZ3JvdW5kIC5idG4tcHJldi5kaXNhYmxlZCwuZWwtcGFnaW5hdGlvbi5pcy1iYWNrZ3JvdW5kIC5idG4tcHJldjpkaXNhYmxlZCwuZWwtcGFnaW5hdGlvbi5pcy1iYWNrZ3JvdW5kIC5lbC1wYWdlciBsaS5kaXNhYmxlZHtjb2xvcjojQzBDNENDfS5lbC1wYWdpbmF0aW9uLmlzLWJhY2tncm91bmQgLmVsLXBhZ2VyIGxpOm5vdCguZGlzYWJsZWQpOmhvdmVye2NvbG9yOiM0MDlFRkZ9LmVsLXBhZ2luYXRpb24uaXMtYmFja2dyb3VuZCAuZWwtcGFnZXIgbGk6bm90KC5kaXNhYmxlZCkuYWN0aXZle2JhY2tncm91bmQtY29sb3I6IzQwOUVGRjtjb2xvcjojRkZGfS5lbC1wYWdpbmF0aW9uLmlzLWJhY2tncm91bmQuZWwtcGFnaW5hdGlvbi0tc21hbGwgLmJ0bi1uZXh0LC5lbC1wYWdpbmF0aW9uLmlzLWJhY2tncm91bmQuZWwtcGFnaW5hdGlvbi0tc21hbGwgLmJ0bi1wcmV2LC5lbC1wYWdpbmF0aW9uLmlzLWJhY2tncm91bmQuZWwtcGFnaW5hdGlvbi0tc21hbGwgLmVsLXBhZ2VyIGxpe21hcmdpbjowIDNweDttaW4td2lkdGg6MjJweH0uZWwtcGFnZXIsLmVsLXBhZ2VyIGxpe3ZlcnRpY2FsLWFsaWduOnRvcDttYXJnaW46MDtkaXNwbGF5OmlubGluZS1ibG9ja30uZWwtcGFnZXJ7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2xpc3Qtc3R5bGU6bm9uZTtmb250LXNpemU6MH0uZWwtcGFnZXIgLm1vcmU6OmJlZm9yZXtsaW5lLWhlaWdodDozMHB4fS5lbC1wYWdlciBsaXtwYWRkaW5nOjAgNHB4O2JhY2tncm91bmQ6I0ZGRjtmb250LXNpemU6MTNweDttaW4td2lkdGg6MzUuNXB4O2hlaWdodDoyOHB4O2xpbmUtaGVpZ2h0OjI4cHg7Ym94LXNpemluZzpib3JkZXItYm94O3RleHQtYWxpZ246Y2VudGVyfS5lbC1wYWdlciBsaS5idG4tcXVpY2tuZXh0LC5lbC1wYWdlciBsaS5idG4tcXVpY2twcmV2e2xpbmUtaGVpZ2h0OjI4cHg7Y29sb3I6IzMwMzEzM30uZWwtcGFnZXIgbGkuYnRuLXF1aWNrbmV4dC5kaXNhYmxlZCwuZWwtcGFnZXIgbGkuYnRuLXF1aWNrcHJldi5kaXNhYmxlZHtjb2xvcjojQzBDNENDfS5lbC1wYWdlciBsaS5hY3RpdmUrbGl7Ym9yZGVyLWxlZnQ6MH0uZWwtcGFnZXIgbGk6aG92ZXJ7Y29sb3I6IzQwOUVGRn0uZWwtcGFnZXIgbGkuYWN0aXZle2NvbG9yOiM0MDlFRkY7Y3Vyc29yOmRlZmF1bHR9QC13ZWJraXQta2V5ZnJhbWVzIHYtbW9kYWwtaW57MCV7b3BhY2l0eTowfX1ALXdlYmtpdC1rZXlmcmFtZXMgdi1tb2RhbC1vdXR7MTAwJXtvcGFjaXR5OjB9fS5lbC1kaWFsb2d7cG9zaXRpb246cmVsYXRpdmU7bWFyZ2luOjAgYXV0byA1MHB4O2JhY2tncm91bmQ6I0ZGRjtib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJveC1zaGFkb3c6MCAxcHggM3B4IHJnYmEoMCwwLDAsLjMpO2JveC1zaGFkb3c6MCAxcHggM3B4IHJnYmEoMCwwLDAsLjMpO2JveC1zaXppbmc6Ym9yZGVyLWJveDt3aWR0aDo1MCV9LmVsLWRpYWxvZy5pcy1mdWxsc2NyZWVue3dpZHRoOjEwMCU7bWFyZ2luLXRvcDowO21hcmdpbi1ib3R0b206MDtoZWlnaHQ6MTAwJTtvdmVyZmxvdzphdXRvfS5lbC1kaWFsb2dfX3dyYXBwZXJ7cG9zaXRpb246Zml4ZWQ7dG9wOjA7cmlnaHQ6MDtib3R0b206MDtsZWZ0OjA7b3ZlcmZsb3c6YXV0bzttYXJnaW46MH0uZWwtZGlhbG9nX19oZWFkZXJ7cGFkZGluZzoyMHB4IDIwcHggMTBweH0uZWwtZGlhbG9nX19oZWFkZXJidG57cG9zaXRpb246YWJzb2x1dGU7dG9wOjIwcHg7cmlnaHQ6MjBweDtwYWRkaW5nOjA7YmFja2dyb3VuZDowIDA7Ym9yZGVyOm5vbmU7b3V0bGluZTowO2N1cnNvcjpwb2ludGVyO2ZvbnQtc2l6ZToxNnB4fS5lbC1kaWFsb2dfX2hlYWRlcmJ0biAuZWwtZGlhbG9nX19jbG9zZXtjb2xvcjojOTA5Mzk5fS5lbC1kaWFsb2dfX2hlYWRlcmJ0bjpmb2N1cyAuZWwtZGlhbG9nX19jbG9zZSwuZWwtZGlhbG9nX19oZWFkZXJidG46aG92ZXIgLmVsLWRpYWxvZ19fY2xvc2V7Y29sb3I6IzQwOUVGRn0uZWwtZGlhbG9nX190aXRsZXtsaW5lLWhlaWdodDoyNHB4O2ZvbnQtc2l6ZToxOHB4O2NvbG9yOiMzMDMxMzN9LmVsLWRpYWxvZ19fYm9keXtwYWRkaW5nOjMwcHggMjBweDtjb2xvcjojNjA2MjY2O2ZvbnQtc2l6ZToxNHB4O3dvcmQtYnJlYWs6YnJlYWstYWxsfS5lbC1kaWFsb2dfX2Zvb3RlcntwYWRkaW5nOjEwcHggMjBweCAyMHB4O3RleHQtYWxpZ246cmlnaHQ7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94fS5lbC1kaWFsb2ctLWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlcn0uZWwtZGlhbG9nLS1jZW50ZXIgLmVsLWRpYWxvZ19fYm9keXt0ZXh0LWFsaWduOmluaXRpYWw7cGFkZGluZzoyNXB4IDI1cHggMzBweH0uZWwtZGlhbG9nLS1jZW50ZXIgLmVsLWRpYWxvZ19fZm9vdGVye3RleHQtYWxpZ246aW5oZXJpdH0uZGlhbG9nLWZhZGUtZW50ZXItYWN0aXZley13ZWJraXQtYW5pbWF0aW9uOmRpYWxvZy1mYWRlLWluIC4zczthbmltYXRpb246ZGlhbG9nLWZhZGUtaW4gLjNzfS5kaWFsb2ctZmFkZS1sZWF2ZS1hY3RpdmV7LXdlYmtpdC1hbmltYXRpb246ZGlhbG9nLWZhZGUtb3V0IC4zczthbmltYXRpb246ZGlhbG9nLWZhZGUtb3V0IC4zc31ALXdlYmtpdC1rZXlmcmFtZXMgZGlhbG9nLWZhZGUtaW57MCV7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwtMjBweCwwKTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwtMjBweCwwKTtvcGFjaXR5OjB9MTAwJXstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLDAsMCk7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsMCwwKTtvcGFjaXR5OjF9fUBrZXlmcmFtZXMgZGlhbG9nLWZhZGUtaW57MCV7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwtMjBweCwwKTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwtMjBweCwwKTtvcGFjaXR5OjB9MTAwJXstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLDAsMCk7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsMCwwKTtvcGFjaXR5OjF9fUAtd2Via2l0LWtleWZyYW1lcyBkaWFsb2ctZmFkZS1vdXR7MCV7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwwLDApO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLDAsMCk7b3BhY2l0eToxfTEwMCV7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwtMjBweCwwKTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwtMjBweCwwKTtvcGFjaXR5OjB9fUBrZXlmcmFtZXMgZGlhbG9nLWZhZGUtb3V0ezAley13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsMCwwKTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwwLDApO29wYWNpdHk6MX0xMDAley13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsLTIwcHgsMCk7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsLTIwcHgsMCk7b3BhY2l0eTowfX0uZWwtYXV0b2NvbXBsZXRle3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5lbC1hdXRvY29tcGxldGUtc3VnZ2VzdGlvbnttYXJnaW46NXB4IDA7LXdlYmtpdC1ib3gtc2hhZG93OjAgMnB4IDEycHggMCByZ2JhKDAsMCwwLC4xKTtib3gtc2hhZG93OjAgMnB4IDEycHggMCByZ2JhKDAsMCwwLC4xKTtib3JkZXItcmFkaXVzOjRweDtib3JkZXI6MXB4IHNvbGlkICNFNEU3RUQ7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94O2JhY2tncm91bmQtY29sb3I6I0ZGRn0uZWwtYXV0b2NvbXBsZXRlLXN1Z2dlc3Rpb25fX3dyYXB7bWF4LWhlaWdodDoyODBweDtwYWRkaW5nOjEwcHggMDstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3h9LmVsLWF1dG9jb21wbGV0ZS1zdWdnZXN0aW9uX19saXN0e21hcmdpbjowO3BhZGRpbmc6MH0uZWwtYXV0b2NvbXBsZXRlLXN1Z2dlc3Rpb24gbGl7cGFkZGluZzowIDIwcHg7bWFyZ2luOjA7bGluZS1oZWlnaHQ6MzRweDtjdXJzb3I6cG9pbnRlcjtjb2xvcjojNjA2MjY2O2ZvbnQtc2l6ZToxNHB4O2xpc3Qtc3R5bGU6bm9uZTt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9LmVsLWF1dG9jb21wbGV0ZS1zdWdnZXN0aW9uIGxpLmhpZ2hsaWdodGVkLC5lbC1hdXRvY29tcGxldGUtc3VnZ2VzdGlvbiBsaTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNGNUY3RkF9LmVsLWF1dG9jb21wbGV0ZS1zdWdnZXN0aW9uIGxpLmRpdmlkZXJ7bWFyZ2luLXRvcDo2cHg7Ym9yZGVyLXRvcDoxcHggc29saWQgIzAwMH0uZWwtYXV0b2NvbXBsZXRlLXN1Z2dlc3Rpb24gbGkuZGl2aWRlcjpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206LTZweH0uZWwtYXV0b2NvbXBsZXRlLXN1Z2dlc3Rpb24uaXMtbG9hZGluZyBsaXt0ZXh0LWFsaWduOmNlbnRlcjtoZWlnaHQ6MTAwcHg7bGluZS1oZWlnaHQ6MTAwcHg7Zm9udC1zaXplOjIwcHg7Y29sb3I6Izk5OX0uZWwtYXV0b2NvbXBsZXRlLXN1Z2dlc3Rpb24uaXMtbG9hZGluZyBsaTo6YWZ0ZXJ7ZGlzcGxheTppbmxpbmUtYmxvY2s7Y29udGVudDpcXFwiXFxcIjtoZWlnaHQ6MTAwJTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmVsLWF1dG9jb21wbGV0ZS1zdWdnZXN0aW9uLmlzLWxvYWRpbmcgbGk6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojRkZGfS5lbC1hdXRvY29tcGxldGUtc3VnZ2VzdGlvbi5pcy1sb2FkaW5nIC5lbC1pY29uLWxvYWRpbmd7dmVydGljYWwtYWxpZ246bWlkZGxlfS5lbC1kcm9wZG93bntkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTtjb2xvcjojNjA2MjY2O2ZvbnQtc2l6ZToxNHB4fS5lbC1kcm9wZG93biAuZWwtYnV0dG9uLWdyb3Vwe2Rpc3BsYXk6YmxvY2t9LmVsLWRyb3Bkb3duIC5lbC1idXR0b24tZ3JvdXAgLmVsLWJ1dHRvbntmbG9hdDpub25lfS5lbC1kcm9wZG93biAuZWwtZHJvcGRvd25fX2NhcmV0LWJ1dHRvbntwYWRkaW5nLWxlZnQ6NXB4O3BhZGRpbmctcmlnaHQ6NXB4O3Bvc2l0aW9uOnJlbGF0aXZlO2JvcmRlci1sZWZ0Om5vbmV9LmVsLWRyb3Bkb3duIC5lbC1kcm9wZG93bl9fY2FyZXQtYnV0dG9uOjpiZWZvcmV7Y29udGVudDonJztwb3NpdGlvbjphYnNvbHV0ZTtkaXNwbGF5OmJsb2NrO3dpZHRoOjFweDt0b3A6NXB4O2JvdHRvbTo1cHg7bGVmdDowO2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuNSl9LmVsLWRyb3Bkb3duIC5lbC1kcm9wZG93bl9fY2FyZXQtYnV0dG9uLmVsLWJ1dHRvbi0tZGVmYXVsdDo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyMjAsMjIzLDIzMCwuNSl9LmVsLWRyb3Bkb3duIC5lbC1kcm9wZG93bl9fY2FyZXQtYnV0dG9uOmhvdmVyOm5vdCguaXMtZGlzYWJsZWQpOjpiZWZvcmV7dG9wOjA7Ym90dG9tOjB9LmVsLWRyb3Bkb3duIC5lbC1kcm9wZG93bl9fY2FyZXQtYnV0dG9uIC5lbC1kcm9wZG93bl9faWNvbntwYWRkaW5nLWxlZnQ6MH0uZWwtZHJvcGRvd25fX2ljb257Zm9udC1zaXplOjEycHg7bWFyZ2luOjAgM3B4fS5lbC1kcm9wZG93biAuZWwtZHJvcGRvd24tc2VsZmRlZmluZTpmb2N1czphY3RpdmUsLmVsLWRyb3Bkb3duIC5lbC1kcm9wZG93bi1zZWxmZGVmaW5lOmZvY3VzOm5vdCguZm9jdXNpbmcpe291dGxpbmUtd2lkdGg6MH0uZWwtZHJvcGRvd24gW2Rpc2FibGVkXXtjdXJzb3I6bm90LWFsbG93ZWQ7Y29sb3I6I2JiYn0uZWwtZHJvcGRvd24tbWVudXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7ei1pbmRleDoxMDtwYWRkaW5nOjEwcHggMDttYXJnaW46NXB4IDA7YmFja2dyb3VuZC1jb2xvcjojRkZGO2JvcmRlcjoxcHggc29saWQgI0VCRUVGNTtib3JkZXItcmFkaXVzOjRweDstd2Via2l0LWJveC1zaGFkb3c6MCAycHggMTJweCAwIHJnYmEoMCwwLDAsLjEpO2JveC1zaGFkb3c6MCAycHggMTJweCAwIHJnYmEoMCwwLDAsLjEpfS5lbC1kcm9wZG93bi1tZW51X19pdGVtLC5lbC1tZW51LWl0ZW17Zm9udC1zaXplOjE0cHg7cGFkZGluZzowIDIwcHg7Y3Vyc29yOnBvaW50ZXJ9LmVsLWRyb3Bkb3duLW1lbnVfX2l0ZW17bGlzdC1zdHlsZTpub25lO2xpbmUtaGVpZ2h0OjM2cHg7bWFyZ2luOjA7Y29sb3I6IzYwNjI2NjtvdXRsaW5lOjB9LmVsLWRyb3Bkb3duLW1lbnVfX2l0ZW06Zm9jdXMsLmVsLWRyb3Bkb3duLW1lbnVfX2l0ZW06bm90KC5pcy1kaXNhYmxlZCk6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZWNmNWZmO2NvbG9yOiM2NmIxZmZ9LmVsLWRyb3Bkb3duLW1lbnVfX2l0ZW0gaXttYXJnaW4tcmlnaHQ6NXB4fS5lbC1kcm9wZG93bi1tZW51X19pdGVtLS1kaXZpZGVke3Bvc2l0aW9uOnJlbGF0aXZlO21hcmdpbi10b3A6NnB4O2JvcmRlci10b3A6MXB4IHNvbGlkICNFQkVFRjV9LmVsLWRyb3Bkb3duLW1lbnVfX2l0ZW0tLWRpdmlkZWQ6YmVmb3Jle2NvbnRlbnQ6Jyc7aGVpZ2h0OjZweDtkaXNwbGF5OmJsb2NrO21hcmdpbjowIC0yMHB4O2JhY2tncm91bmQtY29sb3I6I0ZGRn0uZWwtZHJvcGRvd24tbWVudV9faXRlbS5pcy1kaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdDtjb2xvcjojYmJiO3BvaW50ZXItZXZlbnRzOm5vbmV9LmVsLWRyb3Bkb3duLW1lbnUtLW1lZGl1bXtwYWRkaW5nOjZweCAwfS5lbC1kcm9wZG93bi1tZW51LS1tZWRpdW0gLmVsLWRyb3Bkb3duLW1lbnVfX2l0ZW17bGluZS1oZWlnaHQ6MzBweDtwYWRkaW5nOjAgMTdweDtmb250LXNpemU6MTRweH0uZWwtZHJvcGRvd24tbWVudS0tbWVkaXVtIC5lbC1kcm9wZG93bi1tZW51X19pdGVtLmVsLWRyb3Bkb3duLW1lbnVfX2l0ZW0tLWRpdmlkZWR7bWFyZ2luLXRvcDo2cHh9LmVsLWRyb3Bkb3duLW1lbnUtLW1lZGl1bSAuZWwtZHJvcGRvd24tbWVudV9faXRlbS5lbC1kcm9wZG93bi1tZW51X19pdGVtLS1kaXZpZGVkOmJlZm9yZXtoZWlnaHQ6NnB4O21hcmdpbjowIC0xN3B4fS5lbC1kcm9wZG93bi1tZW51LS1zbWFsbHtwYWRkaW5nOjZweCAwfS5lbC1kcm9wZG93bi1tZW51LS1zbWFsbCAuZWwtZHJvcGRvd24tbWVudV9faXRlbXtsaW5lLWhlaWdodDoyN3B4O3BhZGRpbmc6MCAxNXB4O2ZvbnQtc2l6ZToxM3B4fS5lbC1kcm9wZG93bi1tZW51LS1zbWFsbCAuZWwtZHJvcGRvd24tbWVudV9faXRlbS5lbC1kcm9wZG93bi1tZW51X19pdGVtLS1kaXZpZGVke21hcmdpbi10b3A6NHB4fS5lbC1kcm9wZG93bi1tZW51LS1zbWFsbCAuZWwtZHJvcGRvd24tbWVudV9faXRlbS5lbC1kcm9wZG93bi1tZW51X19pdGVtLS1kaXZpZGVkOmJlZm9yZXtoZWlnaHQ6NHB4O21hcmdpbjowIC0xNXB4fS5lbC1kcm9wZG93bi1tZW51LS1taW5pe3BhZGRpbmc6M3B4IDB9LmVsLWRyb3Bkb3duLW1lbnUtLW1pbmkgLmVsLWRyb3Bkb3duLW1lbnVfX2l0ZW17bGluZS1oZWlnaHQ6MjRweDtwYWRkaW5nOjAgMTBweDtmb250LXNpemU6MTJweH0uZWwtZHJvcGRvd24tbWVudS0tbWluaSAuZWwtZHJvcGRvd24tbWVudV9faXRlbS5lbC1kcm9wZG93bi1tZW51X19pdGVtLS1kaXZpZGVke21hcmdpbi10b3A6M3B4fS5lbC1kcm9wZG93bi1tZW51LS1taW5pIC5lbC1kcm9wZG93bi1tZW51X19pdGVtLmVsLWRyb3Bkb3duLW1lbnVfX2l0ZW0tLWRpdmlkZWQ6YmVmb3Jle2hlaWdodDozcHg7bWFyZ2luOjAgLTEwcHh9LmVsLW1lbnV7Ym9yZGVyLXJpZ2h0OnNvbGlkIDFweCAjZTZlNmU2O2xpc3Qtc3R5bGU6bm9uZTtwb3NpdGlvbjpyZWxhdGl2ZTttYXJnaW46MDtwYWRkaW5nLWxlZnQ6MDtiYWNrZ3JvdW5kLWNvbG9yOiNGRkZ9LmVsLW1lbnUtLWhvcml6b250YWw+LmVsLW1lbnUtaXRlbTpub3QoLmlzLWRpc2FibGVkKTpmb2N1cywuZWwtbWVudS0taG9yaXpvbnRhbD4uZWwtbWVudS1pdGVtOm5vdCguaXMtZGlzYWJsZWQpOmhvdmVyLC5lbC1tZW51LS1ob3Jpem9udGFsPi5lbC1zdWJtZW51IC5lbC1zdWJtZW51X190aXRsZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9LmVsLW1lbnU6OmFmdGVyLC5lbC1tZW51OjpiZWZvcmV7ZGlzcGxheTp0YWJsZTtjb250ZW50OlxcXCJcXFwifS5lbC1icmVhZGNydW1iX19pdGVtOmxhc3QtY2hpbGQgLmVsLWJyZWFkY3J1bWJfX3NlcGFyYXRvciwuZWwtbWVudS0tY29sbGFwc2U+LmVsLW1lbnUtaXRlbSAuZWwtc3VibWVudV9faWNvbi1hcnJvdywuZWwtbWVudS0tY29sbGFwc2U+LmVsLXN1Ym1lbnU+LmVsLXN1Ym1lbnVfX3RpdGxlIC5lbC1zdWJtZW51X19pY29uLWFycm93e2Rpc3BsYXk6bm9uZX0uZWwtbWVudTo6YWZ0ZXJ7Y2xlYXI6Ym90aH0uZWwtbWVudS5lbC1tZW51LS1ob3Jpem9udGFse2JvcmRlci1ib3R0b206c29saWQgMXB4ICNlNmU2ZTZ9LmVsLW1lbnUtLWhvcml6b250YWx7Ym9yZGVyLXJpZ2h0Om5vbmV9LmVsLW1lbnUtLWhvcml6b250YWw+LmVsLW1lbnUtaXRlbXtmbG9hdDpsZWZ0O2hlaWdodDo2MHB4O2xpbmUtaGVpZ2h0OjYwcHg7bWFyZ2luOjA7Ym9yZGVyLWJvdHRvbToycHggc29saWQgdHJhbnNwYXJlbnQ7Y29sb3I6IzkwOTM5OX0uZWwtbWVudS0taG9yaXpvbnRhbD4uZWwtbWVudS1pdGVtIGEsLmVsLW1lbnUtLWhvcml6b250YWw+LmVsLW1lbnUtaXRlbSBhOmhvdmVye2NvbG9yOmluaGVyaXR9LmVsLW1lbnUtLWhvcml6b250YWw+LmVsLXN1Ym1lbnV7ZmxvYXQ6bGVmdH0uZWwtbWVudS0taG9yaXpvbnRhbD4uZWwtc3VibWVudTpmb2N1cywuZWwtbWVudS0taG9yaXpvbnRhbD4uZWwtc3VibWVudTpob3ZlcntvdXRsaW5lOjB9LmVsLW1lbnUtLWhvcml6b250YWw+LmVsLXN1Ym1lbnU6Zm9jdXMgLmVsLXN1Ym1lbnVfX3RpdGxlLC5lbC1tZW51LS1ob3Jpem9udGFsPi5lbC1zdWJtZW51OmhvdmVyIC5lbC1zdWJtZW51X190aXRsZXtjb2xvcjojMzAzMTMzfS5lbC1tZW51LS1ob3Jpem9udGFsPi5lbC1zdWJtZW51LmlzLWFjdGl2ZSAuZWwtc3VibWVudV9fdGl0bGV7Ym9yZGVyLWJvdHRvbToycHggc29saWQgIzQwOUVGRjtjb2xvcjojMzAzMTMzfS5lbC1tZW51LS1ob3Jpem9udGFsPi5lbC1zdWJtZW51IC5lbC1zdWJtZW51X190aXRsZXtoZWlnaHQ6NjBweDtsaW5lLWhlaWdodDo2MHB4O2JvcmRlci1ib3R0b206MnB4IHNvbGlkIHRyYW5zcGFyZW50O2NvbG9yOiM5MDkzOTl9LmVsLW1lbnUtLWhvcml6b250YWw+LmVsLXN1Ym1lbnUgLmVsLXN1Ym1lbnVfX2ljb24tYXJyb3d7cG9zaXRpb246c3RhdGljO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTttYXJnaW4tbGVmdDo4cHg7bWFyZ2luLXRvcDotM3B4fS5lbC1tZW51LS1jb2xsYXBzZSAuZWwtc3VibWVudSwuZWwtbWVudS1pdGVte3Bvc2l0aW9uOnJlbGF0aXZlfS5lbC1tZW51LS1ob3Jpem9udGFsIC5lbC1tZW51IC5lbC1tZW51LWl0ZW0sLmVsLW1lbnUtLWhvcml6b250YWwgLmVsLW1lbnUgLmVsLXN1Ym1lbnVfX3RpdGxle2JhY2tncm91bmQtY29sb3I6I0ZGRjtmbG9hdDpub25lO2hlaWdodDozNnB4O2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDEwcHg7Y29sb3I6IzkwOTM5OX0uZWwtbWVudS0taG9yaXpvbnRhbCAuZWwtbWVudSAuZWwtbWVudS1pdGVtLmlzLWFjdGl2ZSwuZWwtbWVudS0taG9yaXpvbnRhbCAuZWwtbWVudSAuZWwtc3VibWVudS5pcy1hY3RpdmU+LmVsLXN1Ym1lbnVfX3RpdGxle2NvbG9yOiMzMDMxMzN9LmVsLW1lbnUtLWhvcml6b250YWwgLmVsLW1lbnUtaXRlbTpub3QoLmlzLWRpc2FibGVkKTpmb2N1cywuZWwtbWVudS0taG9yaXpvbnRhbCAuZWwtbWVudS1pdGVtOm5vdCguaXMtZGlzYWJsZWQpOmhvdmVye291dGxpbmU6MDtjb2xvcjojMzAzMTMzfS5lbC1tZW51LS1ob3Jpem9udGFsPi5lbC1tZW51LWl0ZW0uaXMtYWN0aXZle2JvcmRlci1ib3R0b206MnB4IHNvbGlkICM0MDlFRkY7Y29sb3I6IzMwMzEzM30uZWwtbWVudS0tY29sbGFwc2V7d2lkdGg6NjRweH0uZWwtbWVudS0tY29sbGFwc2U+LmVsLW1lbnUtaXRlbSBbY2xhc3NePWVsLWljb24tXSwuZWwtbWVudS0tY29sbGFwc2U+LmVsLXN1Ym1lbnU+LmVsLXN1Ym1lbnVfX3RpdGxlIFtjbGFzc149ZWwtaWNvbi1de21hcmdpbjowO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDoyNHB4O3RleHQtYWxpZ246Y2VudGVyfS5lbC1tZW51LS1jb2xsYXBzZT4uZWwtbWVudS1pdGVtIHNwYW4sLmVsLW1lbnUtLWNvbGxhcHNlPi5lbC1zdWJtZW51Pi5lbC1zdWJtZW51X190aXRsZSBzcGFue2hlaWdodDowO3dpZHRoOjA7b3ZlcmZsb3c6aGlkZGVuO3Zpc2liaWxpdHk6aGlkZGVuO2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5lbC1tZW51LWl0ZW0sLmVsLXN1Ym1lbnVfX3RpdGxle2hlaWdodDo1NnB4O2xpbmUtaGVpZ2h0OjU2cHg7bGlzdC1zdHlsZTpub25lfS5lbC1tZW51LS1jb2xsYXBzZT4uZWwtbWVudS1pdGVtLmlzLWFjdGl2ZSBpe2NvbG9yOmluaGVyaXR9LmVsLW1lbnUtLWNvbGxhcHNlIC5lbC1tZW51IC5lbC1zdWJtZW51e21pbi13aWR0aDoyMDBweH0uZWwtbWVudS0tY29sbGFwc2UgLmVsLXN1Ym1lbnUgLmVsLW1lbnV7cG9zaXRpb246YWJzb2x1dGU7bWFyZ2luLWxlZnQ6NXB4O3RvcDowO2xlZnQ6MTAwJTt6LWluZGV4OjEwO2JvcmRlcjoxcHggc29saWQgI0U0RTdFRDtib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJveC1zaGFkb3c6MCAycHggMTJweCAwIHJnYmEoMCwwLDAsLjEpO2JveC1zaGFkb3c6MCAycHggMTJweCAwIHJnYmEoMCwwLDAsLjEpfS5lbC1tZW51LS1jb2xsYXBzZSAuZWwtc3VibWVudS5pcy1vcGVuZWQ+LmVsLXN1Ym1lbnVfX3RpdGxlIC5lbC1zdWJtZW51X19pY29uLWFycm93ey13ZWJraXQtdHJhbnNmb3JtOm5vbmU7dHJhbnNmb3JtOm5vbmV9LmVsLW1lbnUtLXBvcHVwe3otaW5kZXg6MTAwO21pbi13aWR0aDoyMDBweDtib3JkZXI6bm9uZTtwYWRkaW5nOjVweCAwO2JvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm94LXNoYWRvdzowIDJweCAxMnB4IDAgcmdiYSgwLDAsMCwuMSk7Ym94LXNoYWRvdzowIDJweCAxMnB4IDAgcmdiYSgwLDAsMCwuMSl9LmVsLW1lbnUtLXBvcHVwLWJvdHRvbS1zdGFydHttYXJnaW4tdG9wOjVweH0uZWwtbWVudS0tcG9wdXAtcmlnaHQtc3RhcnR7bWFyZ2luLWxlZnQ6NXB4O21hcmdpbi1yaWdodDo1cHh9LmVsLW1lbnUtaXRlbXtjb2xvcjojMzAzMTMzOy13ZWJraXQtdHJhbnNpdGlvbjpib3JkZXItY29sb3IgLjNzLGJhY2tncm91bmQtY29sb3IgLjNzLGNvbG9yIC4zczt0cmFuc2l0aW9uOmJvcmRlci1jb2xvciAuM3MsYmFja2dyb3VuZC1jb2xvciAuM3MsY29sb3IgLjNzOy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDt3aGl0ZS1zcGFjZTpub3dyYXB9LmVsLXJhZGlvLWJ1dHRvbl9faW5uZXIsLmVsLXN1Ym1lbnVfX3RpdGxley13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O3Bvc2l0aW9uOnJlbGF0aXZlO3doaXRlLXNwYWNlOm5vd3JhcH0uZWwtbWVudS1pdGVtICp7dmVydGljYWwtYWxpZ246bWlkZGxlfS5lbC1tZW51LWl0ZW0gaXtjb2xvcjojOTA5Mzk5fS5lbC1tZW51LWl0ZW06Zm9jdXMsLmVsLW1lbnUtaXRlbTpob3ZlcntvdXRsaW5lOjA7YmFja2dyb3VuZC1jb2xvcjojZWNmNWZmfS5lbC1tZW51LWl0ZW0uaXMtZGlzYWJsZWR7b3BhY2l0eTouMjU7Y3Vyc29yOm5vdC1hbGxvd2VkO2JhY2tncm91bmQ6MCAwIWltcG9ydGFudH0uZWwtbWVudS1pdGVtIFtjbGFzc149ZWwtaWNvbi1de21hcmdpbi1yaWdodDo1cHg7d2lkdGg6MjRweDt0ZXh0LWFsaWduOmNlbnRlcjtmb250LXNpemU6MThweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmVsLW1lbnUtaXRlbS5pcy1hY3RpdmV7Y29sb3I6IzQwOUVGRn0uZWwtbWVudS1pdGVtLmlzLWFjdGl2ZSBpe2NvbG9yOmluaGVyaXR9LmVsLXN1Ym1lbnV7bGlzdC1zdHlsZTpub25lO21hcmdpbjowO3BhZGRpbmctbGVmdDowfS5lbC1zdWJtZW51X190aXRsZXtmb250LXNpemU6MTRweDtjb2xvcjojMzAzMTMzO3BhZGRpbmc6MCAyMHB4O2N1cnNvcjpwb2ludGVyOy13ZWJraXQtdHJhbnNpdGlvbjpib3JkZXItY29sb3IgLjNzLGJhY2tncm91bmQtY29sb3IgLjNzLGNvbG9yIC4zczt0cmFuc2l0aW9uOmJvcmRlci1jb2xvciAuM3MsYmFja2dyb3VuZC1jb2xvciAuM3MsY29sb3IgLjNzO2JveC1zaXppbmc6Ym9yZGVyLWJveH0uZWwtc3VibWVudV9fdGl0bGUgKnt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmVsLXN1Ym1lbnVfX3RpdGxlIGl7Y29sb3I6IzkwOTM5OX0uZWwtc3VibWVudV9fdGl0bGU6Zm9jdXMsLmVsLXN1Ym1lbnVfX3RpdGxlOmhvdmVye291dGxpbmU6MDtiYWNrZ3JvdW5kLWNvbG9yOiNlY2Y1ZmZ9LmVsLXN1Ym1lbnVfX3RpdGxlLmlzLWRpc2FibGVke29wYWNpdHk6LjI1O2N1cnNvcjpub3QtYWxsb3dlZDtiYWNrZ3JvdW5kOjAgMCFpbXBvcnRhbnR9LmVsLXN1Ym1lbnVfX3RpdGxlOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2VjZjVmZn0uZWwtc3VibWVudSAuZWwtbWVudXtib3JkZXI6bm9uZX0uZWwtc3VibWVudSAuZWwtbWVudS1pdGVte2hlaWdodDo1MHB4O2xpbmUtaGVpZ2h0OjUwcHg7cGFkZGluZzowIDQ1cHg7bWluLXdpZHRoOjIwMHB4fS5lbC1zdWJtZW51X19pY29uLWFycm93e3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7cmlnaHQ6MjBweDttYXJnaW4tdG9wOi03cHg7LXdlYmtpdC10cmFuc2l0aW9uOi13ZWJraXQtdHJhbnNmb3JtIC4zczt0cmFuc2l0aW9uOi13ZWJraXQtdHJhbnNmb3JtIC4zczt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuM3M7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjNzLC13ZWJraXQtdHJhbnNmb3JtIC4zcztmb250LXNpemU6MTJweH0uZWwtc3VibWVudS5pcy1hY3RpdmUgLmVsLXN1Ym1lbnVfX3RpdGxle2JvcmRlci1ib3R0b20tY29sb3I6IzQwOUVGRn0uZWwtc3VibWVudS5pcy1vcGVuZWQ+LmVsLXN1Ym1lbnVfX3RpdGxlIC5lbC1zdWJtZW51X19pY29uLWFycm93ey13ZWJraXQtdHJhbnNmb3JtOnJvdGF0ZVooMTgwZGVnKTt0cmFuc2Zvcm06cm90YXRlWigxODBkZWcpfS5lbC1zdWJtZW51LmlzLWRpc2FibGVkIC5lbC1tZW51LWl0ZW0sLmVsLXN1Ym1lbnUuaXMtZGlzYWJsZWQgLmVsLXN1Ym1lbnVfX3RpdGxle29wYWNpdHk6LjI1O2N1cnNvcjpub3QtYWxsb3dlZDtiYWNrZ3JvdW5kOjAgMCFpbXBvcnRhbnR9LmVsLXN1Ym1lbnUgW2NsYXNzXj1lbC1pY29uLV17dmVydGljYWwtYWxpZ246bWlkZGxlO21hcmdpbi1yaWdodDo1cHg7d2lkdGg6MjRweDt0ZXh0LWFsaWduOmNlbnRlcjtmb250LXNpemU6MThweH0uZWwtbWVudS1pdGVtLWdyb3VwPnVse3BhZGRpbmc6MH0uZWwtbWVudS1pdGVtLWdyb3VwX190aXRsZXtwYWRkaW5nOjdweCAwIDdweCAyMHB4O2xpbmUtaGVpZ2h0Om5vcm1hbDtmb250LXNpemU6MTJweDtjb2xvcjojOTA5Mzk5fS5lbC1yYWRpby1idXR0b25fX2lubmVyLC5lbC1yYWRpby1ncm91cHtkaXNwbGF5OmlubGluZS1ibG9jaztsaW5lLWhlaWdodDoxO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uaG9yaXpvbnRhbC1jb2xsYXBzZS10cmFuc2l0aW9uIC5lbC1zdWJtZW51X190aXRsZSAuZWwtc3VibWVudV9faWNvbi1hcnJvd3std2Via2l0LXRyYW5zaXRpb246LjJzO3RyYW5zaXRpb246LjJzO29wYWNpdHk6MH0uZWwtcmFkaW8tZ3JvdXB7Zm9udC1zaXplOjB9LmVsLXJhZGlvLWJ1dHRvbntwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmlubGluZS1ibG9jaztvdXRsaW5lOjB9LmVsLXJhZGlvLWJ1dHRvbl9faW5uZXJ7YmFja2dyb3VuZDojRkZGO2JvcmRlcjoxcHggc29saWQgI0RDREZFNjtmb250LXdlaWdodDo1MDA7Ym9yZGVyLWxlZnQ6MDtjb2xvcjojNjA2MjY2Oy13ZWJraXQtYXBwZWFyYW5jZTpub25lO3RleHQtYWxpZ246Y2VudGVyO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdXRsaW5lOjA7bWFyZ2luOjA7Y3Vyc29yOnBvaW50ZXI7LXdlYmtpdC10cmFuc2l0aW9uOmFsbCAuM3MgY3ViaWMtYmV6aWVyKC42NDUsLjA0NSwuMzU1LDEpO3RyYW5zaXRpb246YWxsIC4zcyBjdWJpYy1iZXppZXIoLjY0NSwuMDQ1LC4zNTUsMSk7cGFkZGluZzoxMnB4IDIwcHg7Zm9udC1zaXplOjE0cHg7Ym9yZGVyLXJhZGl1czowfS5lbC1yYWRpby1idXR0b25fX2lubmVyLmlzLXJvdW5ke3BhZGRpbmc6MTJweCAyMHB4fS5lbC1yYWRpby1idXR0b25fX2lubmVyOmhvdmVye2NvbG9yOiM0MDlFRkZ9LmVsLXJhZGlvLWJ1dHRvbl9faW5uZXIgW2NsYXNzKj1lbC1pY29uLV17bGluZS1oZWlnaHQ6Ljl9LmVsLXJhZGlvLWJ1dHRvbl9faW5uZXIgW2NsYXNzKj1lbC1pY29uLV0rc3BhbnttYXJnaW4tbGVmdDo1cHh9LmVsLXJhZGlvLWJ1dHRvbjpmaXJzdC1jaGlsZCAuZWwtcmFkaW8tYnV0dG9uX19pbm5lcntib3JkZXItbGVmdDoxcHggc29saWQgI0RDREZFNjtib3JkZXItcmFkaXVzOjRweCAwIDAgNHB4Oy13ZWJraXQtYm94LXNoYWRvdzpub25lIWltcG9ydGFudDtib3gtc2hhZG93Om5vbmUhaW1wb3J0YW50fS5lbC1yYWRpby1idXR0b25fX29yaWctcmFkaW97b3BhY2l0eTowO291dGxpbmU6MDtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4Oi0xfS5lbC1yYWRpby1idXR0b25fX29yaWctcmFkaW86Y2hlY2tlZCsuZWwtcmFkaW8tYnV0dG9uX19pbm5lcntjb2xvcjojRkZGO2JhY2tncm91bmQtY29sb3I6IzQwOUVGRjtib3JkZXItY29sb3I6IzQwOUVGRjstd2Via2l0LWJveC1zaGFkb3c6LTFweCAwIDAgMCAjNDA5RUZGO2JveC1zaGFkb3c6LTFweCAwIDAgMCAjNDA5RUZGfS5lbC1yYWRpby1idXR0b25fX29yaWctcmFkaW86ZGlzYWJsZWQrLmVsLXJhZGlvLWJ1dHRvbl9faW5uZXJ7Y29sb3I6I0MwQzRDQztjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1pbWFnZTpub25lO2JhY2tncm91bmQtY29sb3I6I0ZGRjtib3JkZXItY29sb3I6I0VCRUVGNTstd2Via2l0LWJveC1zaGFkb3c6bm9uZTtib3gtc2hhZG93Om5vbmV9LmVsLXJhZGlvLWJ1dHRvbl9fb3JpZy1yYWRpbzpkaXNhYmxlZDpjaGVja2VkKy5lbC1yYWRpby1idXR0b25fX2lubmVye2JhY2tncm91bmQtY29sb3I6I0YyRjZGQ30uZWwtcmFkaW8tYnV0dG9uOmxhc3QtY2hpbGQgLmVsLXJhZGlvLWJ1dHRvbl9faW5uZXJ7Ym9yZGVyLXJhZGl1czowIDRweCA0cHggMH0uZWwtcmFkaW8tYnV0dG9uOmZpcnN0LWNoaWxkOmxhc3QtY2hpbGQgLmVsLXJhZGlvLWJ1dHRvbl9faW5uZXJ7Ym9yZGVyLXJhZGl1czo0cHh9LmVsLXJhZGlvLWJ1dHRvbi0tbWVkaXVtIC5lbC1yYWRpby1idXR0b25fX2lubmVye3BhZGRpbmc6MTBweCAyMHB4O2ZvbnQtc2l6ZToxNHB4O2JvcmRlci1yYWRpdXM6MH0uZWwtcmFkaW8tYnV0dG9uLS1tZWRpdW0gLmVsLXJhZGlvLWJ1dHRvbl9faW5uZXIuaXMtcm91bmR7cGFkZGluZzoxMHB4IDIwcHh9LmVsLXJhZGlvLWJ1dHRvbi0tc21hbGwgLmVsLXJhZGlvLWJ1dHRvbl9faW5uZXJ7cGFkZGluZzo5cHggMTVweDtmb250LXNpemU6MTJweDtib3JkZXItcmFkaXVzOjB9LmVsLXJhZGlvLWJ1dHRvbi0tc21hbGwgLmVsLXJhZGlvLWJ1dHRvbl9faW5uZXIuaXMtcm91bmR7cGFkZGluZzo5cHggMTVweH0uZWwtcmFkaW8tYnV0dG9uLS1taW5pIC5lbC1yYWRpby1idXR0b25fX2lubmVye3BhZGRpbmc6N3B4IDE1cHg7Zm9udC1zaXplOjEycHg7Ym9yZGVyLXJhZGl1czowfS5lbC1yYWRpby1idXR0b24tLW1pbmkgLmVsLXJhZGlvLWJ1dHRvbl9faW5uZXIuaXMtcm91bmR7cGFkZGluZzo3cHggMTVweH0uZWwtcmFkaW8tYnV0dG9uOmZvY3VzOm5vdCguaXMtZm9jdXMpOm5vdCg6YWN0aXZlKTpub3QoLmlzLWRpc2FibGVkKXstd2Via2l0LWJveC1zaGFkb3c6MCAwIDJweCAycHggIzQwOUVGRjtib3gtc2hhZG93OjAgMCAycHggMnB4ICM0MDlFRkZ9LmVsLXBpY2tlci1wYW5lbCwuZWwtcG9wb3ZlciwuZWwtc2VsZWN0LWRyb3Bkb3duLC5lbC10YWJsZS1maWx0ZXIsLmVsLXRpbWUtcGFuZWx7LXdlYmtpdC1ib3gtc2hhZG93OjAgMnB4IDEycHggMCByZ2JhKDAsMCwwLC4xKX0uZWwtc3dpdGNoe2Rpc3BsYXk6LXdlYmtpdC1pbmxpbmUtYm94O2Rpc3BsYXk6LW1zLWlubGluZS1mbGV4Ym94O2Rpc3BsYXk6aW5saW5lLWZsZXg7LXdlYmtpdC1ib3gtYWxpZ246Y2VudGVyOy1tcy1mbGV4LWFsaWduOmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7cG9zaXRpb246cmVsYXRpdmU7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MjBweDtoZWlnaHQ6MjBweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmVsLXN3aXRjaF9fY29yZSwuZWwtc3dpdGNoX19sYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jaztjdXJzb3I6cG9pbnRlcn0uZWwtc3dpdGNoLmlzLWRpc2FibGVkIC5lbC1zd2l0Y2hfX2NvcmUsLmVsLXN3aXRjaC5pcy1kaXNhYmxlZCAuZWwtc3dpdGNoX19sYWJlbHtjdXJzb3I6bm90LWFsbG93ZWR9LmVsLXN3aXRjaF9fbGFiZWx7LXdlYmtpdC10cmFuc2l0aW9uOi4yczt0cmFuc2l0aW9uOi4ycztoZWlnaHQ6MjBweDtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDA7dmVydGljYWwtYWxpZ246bWlkZGxlO2NvbG9yOiMzMDMxMzN9LmVsLXN3aXRjaF9fbGFiZWwuaXMtYWN0aXZle2NvbG9yOiM0MDlFRkZ9LmVsLXN3aXRjaF9fbGFiZWwtLWxlZnR7bWFyZ2luLXJpZ2h0OjEwcHh9LmVsLXN3aXRjaF9fbGFiZWwtLXJpZ2h0e21hcmdpbi1sZWZ0OjEwcHh9LmVsLXN3aXRjaF9fbGFiZWwgKntsaW5lLWhlaWdodDoxO2ZvbnQtc2l6ZToxNHB4O2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5lbC1zd2l0Y2hfX2lucHV0e3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjA7aGVpZ2h0OjA7b3BhY2l0eTowO21hcmdpbjowfS5lbC1zd2l0Y2hfX2NvcmV7bWFyZ2luOjA7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6NDBweDtoZWlnaHQ6MjBweDtib3JkZXI6MXB4IHNvbGlkICNEQ0RGRTY7b3V0bGluZTowO2JvcmRlci1yYWRpdXM6MTBweDstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3g7YmFja2dyb3VuZDojRENERkU2Oy13ZWJraXQtdHJhbnNpdGlvbjpib3JkZXItY29sb3IgLjNzLGJhY2tncm91bmQtY29sb3IgLjNzO3RyYW5zaXRpb246Ym9yZGVyLWNvbG9yIC4zcyxiYWNrZ3JvdW5kLWNvbG9yIC4zczt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmVsLWlucHV0X19wcmVmaXgsLmVsLWlucHV0X19zdWZmaXh7LXdlYmtpdC10cmFuc2l0aW9uOmFsbCAuM3M7Y29sb3I6I0MwQzRDQ30uZWwtc3dpdGNoX19jb3JlOmFmdGVye2NvbnRlbnQ6XFxcIlxcXCI7cG9zaXRpb246YWJzb2x1dGU7dG9wOjFweDtsZWZ0OjFweDtib3JkZXItcmFkaXVzOjEwMCU7LXdlYmtpdC10cmFuc2l0aW9uOmFsbCAuM3M7dHJhbnNpdGlvbjphbGwgLjNzO3dpZHRoOjE2cHg7aGVpZ2h0OjE2cHg7YmFja2dyb3VuZC1jb2xvcjojRkZGfS5lbC1zd2l0Y2guaXMtY2hlY2tlZCAuZWwtc3dpdGNoX19jb3Jle2JvcmRlci1jb2xvcjojNDA5RUZGO2JhY2tncm91bmQtY29sb3I6IzQwOUVGRn0uZWwtc3dpdGNoLmlzLWNoZWNrZWQgLmVsLXN3aXRjaF9fY29yZTo6YWZ0ZXJ7bGVmdDoxMDAlO21hcmdpbi1sZWZ0Oi0xN3B4fS5lbC1zd2l0Y2guaXMtZGlzYWJsZWR7b3BhY2l0eTouNn0uZWwtc3dpdGNoLS13aWRlIC5lbC1zd2l0Y2hfX2xhYmVsLmVsLXN3aXRjaF9fbGFiZWwtLWxlZnQgc3BhbntsZWZ0OjEwcHh9LmVsLXN3aXRjaC0td2lkZSAuZWwtc3dpdGNoX19sYWJlbC5lbC1zd2l0Y2hfX2xhYmVsLS1yaWdodCBzcGFue3JpZ2h0OjEwcHh9LmVsLXN3aXRjaCAubGFiZWwtZmFkZS1lbnRlciwuZWwtc3dpdGNoIC5sYWJlbC1mYWRlLWxlYXZlLWFjdGl2ZXtvcGFjaXR5OjB9LmVsLXNlbGVjdC1kcm9wZG93bntwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDE7Ym9yZGVyOjFweCBzb2xpZCAjRTRFN0VEO2JvcmRlci1yYWRpdXM6NHB4O2JhY2tncm91bmQtY29sb3I6I0ZGRjtib3gtc2hhZG93OjAgMnB4IDEycHggMCByZ2JhKDAsMCwwLC4xKTstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3g7bWFyZ2luOjVweCAwfS5lbC1zZWxlY3QtZHJvcGRvd24uaXMtbXVsdGlwbGUgLmVsLXNlbGVjdC1kcm9wZG93bl9faXRlbXtwYWRkaW5nLXJpZ2h0OjQwcHh9LmVsLXNlbGVjdC1kcm9wZG93bi5pcy1tdWx0aXBsZSAuZWwtc2VsZWN0LWRyb3Bkb3duX19pdGVtLnNlbGVjdGVke2NvbG9yOiM0MDlFRkY7YmFja2dyb3VuZC1jb2xvcjojRkZGfS5lbC1zZWxlY3QtZHJvcGRvd24uaXMtbXVsdGlwbGUgLmVsLXNlbGVjdC1kcm9wZG93bl9faXRlbS5zZWxlY3RlZC5ob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNGNUY3RkF9LmVsLXNlbGVjdC1kcm9wZG93bi5pcy1tdWx0aXBsZSAuZWwtc2VsZWN0LWRyb3Bkb3duX19pdGVtLnNlbGVjdGVkOjphZnRlcntwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDoyMHB4O2ZvbnQtZmFtaWx5OmVsZW1lbnQtaWNvbnM7Y29udGVudDpcXFwiXFxcXGU2ZGFcXFwiO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjcwMDstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFudGlhbGlhc2VkOy1tb3otb3N4LWZvbnQtc21vb3RoaW5nOmdyYXlzY2FsZX0uZWwtc2VsZWN0LWRyb3Bkb3duIC5lbC1zY3JvbGxiYXIuaXMtZW1wdHkgLmVsLXNlbGVjdC1kcm9wZG93bl9fbGlzdHtwYWRkaW5nOjB9LmVsLXNlbGVjdC1kcm9wZG93bl9fZW1wdHl7cGFkZGluZzoxMHB4IDA7bWFyZ2luOjA7dGV4dC1hbGlnbjpjZW50ZXI7Y29sb3I6Izk5OTtmb250LXNpemU6MTRweH0uZWwtc2VsZWN0LWRyb3Bkb3duX193cmFwe21heC1oZWlnaHQ6Mjc0cHh9LmVsLXNlbGVjdC1kcm9wZG93bl9fbGlzdHtsaXN0LXN0eWxlOm5vbmU7cGFkZGluZzo2cHggMDttYXJnaW46MDstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3h9LmVsLXNlbGVjdC1kcm9wZG93bl9faXRlbXtmb250LXNpemU6MTRweDtwYWRkaW5nOjAgMjBweDtwb3NpdGlvbjpyZWxhdGl2ZTt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7Y29sb3I6IzYwNjI2NjtoZWlnaHQ6MzRweDtsaW5lLWhlaWdodDozNHB4Oy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDtjdXJzb3I6cG9pbnRlcn0uZWwtc2VsZWN0LWRyb3Bkb3duX19pdGVtLmlzLWRpc2FibGVke2NvbG9yOiNDMEM0Q0M7Y3Vyc29yOm5vdC1hbGxvd2VkfS5lbC1zZWxlY3QtZHJvcGRvd25fX2l0ZW0uaXMtZGlzYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojRkZGfS5lbC1zZWxlY3QtZHJvcGRvd25fX2l0ZW0uaG92ZXIsLmVsLXNlbGVjdC1kcm9wZG93bl9faXRlbTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNGNUY3RkF9LmVsLXNlbGVjdC1kcm9wZG93bl9faXRlbS5zZWxlY3RlZHtjb2xvcjojNDA5RUZGO2ZvbnQtd2VpZ2h0OjcwMH0uZWwtc2VsZWN0LWdyb3Vwe21hcmdpbjowO3BhZGRpbmc6MH0uZWwtc2VsZWN0LWdyb3VwX193cmFwe3Bvc2l0aW9uOnJlbGF0aXZlO2xpc3Qtc3R5bGU6bm9uZTttYXJnaW46MDtwYWRkaW5nOjB9LmVsLXNlbGVjdC1ncm91cF9fd3JhcDpub3QoOmxhc3Qtb2YtdHlwZSl7cGFkZGluZy1ib3R0b206MjRweH0uZWwtc2VsZWN0LWdyb3VwX193cmFwOm5vdCg6bGFzdC1vZi10eXBlKTo6YWZ0ZXJ7Y29udGVudDonJztwb3NpdGlvbjphYnNvbHV0ZTtkaXNwbGF5OmJsb2NrO2xlZnQ6MjBweDtyaWdodDoyMHB4O2JvdHRvbToxMnB4O2hlaWdodDoxcHg7YmFja2dyb3VuZDojRTRFN0VEfS5lbC1zZWxlY3QtZ3JvdXBfX3RpdGxle3BhZGRpbmctbGVmdDoyMHB4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiM5MDkzOTk7bGluZS1oZWlnaHQ6MzBweH0uZWwtc2VsZWN0LWdyb3VwIC5lbC1zZWxlY3QtZHJvcGRvd25fX2l0ZW17cGFkZGluZy1sZWZ0OjIwcHh9LmVsLXNlbGVjdHtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2ZX0uZWwtc2VsZWN0IC5lbC1zZWxlY3RfX3RhZ3M+c3BhbntkaXNwbGF5OmNvbnRlbnRzfS5lbC1zZWxlY3Q6aG92ZXIgLmVsLWlucHV0X19pbm5lcntib3JkZXItY29sb3I6I0MwQzRDQ30uZWwtc2VsZWN0IC5lbC1pbnB1dF9faW5uZXJ7Y3Vyc29yOnBvaW50ZXI7cGFkZGluZy1yaWdodDozNXB4fS5lbC1zZWxlY3QgLmVsLWlucHV0X19pbm5lcjpmb2N1c3tib3JkZXItY29sb3I6IzQwOUVGRn0uZWwtc2VsZWN0IC5lbC1pbnB1dCAuZWwtc2VsZWN0X19jYXJldHtjb2xvcjojQzBDNENDO2ZvbnQtc2l6ZToxNHB4Oy13ZWJraXQtdHJhbnNpdGlvbjotd2Via2l0LXRyYW5zZm9ybSAuM3M7dHJhbnNpdGlvbjotd2Via2l0LXRyYW5zZm9ybSAuM3M7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjNzO3RyYW5zaXRpb246dHJhbnNmb3JtIC4zcywtd2Via2l0LXRyYW5zZm9ybSAuM3M7LXdlYmtpdC10cmFuc2Zvcm06cm90YXRlWigxODBkZWcpO3RyYW5zZm9ybTpyb3RhdGVaKDE4MGRlZyk7Y3Vyc29yOnBvaW50ZXJ9LmVsLXNlbGVjdCAuZWwtaW5wdXQgLmVsLXNlbGVjdF9fY2FyZXQuaXMtcmV2ZXJzZXstd2Via2l0LXRyYW5zZm9ybTpyb3RhdGVaKDApO3RyYW5zZm9ybTpyb3RhdGVaKDApfS5lbC1zZWxlY3QgLmVsLWlucHV0IC5lbC1zZWxlY3RfX2NhcmV0LmlzLXNob3ctY2xvc2V7Zm9udC1zaXplOjE0cHg7dGV4dC1hbGlnbjpjZW50ZXI7LXdlYmtpdC10cmFuc2Zvcm06cm90YXRlWigxODBkZWcpO3RyYW5zZm9ybTpyb3RhdGVaKDE4MGRlZyk7Ym9yZGVyLXJhZGl1czoxMDAlO2NvbG9yOiNDMEM0Q0M7LXdlYmtpdC10cmFuc2l0aW9uOmNvbG9yIC4ycyBjdWJpYy1iZXppZXIoLjY0NSwuMDQ1LC4zNTUsMSk7dHJhbnNpdGlvbjpjb2xvciAuMnMgY3ViaWMtYmV6aWVyKC42NDUsLjA0NSwuMzU1LDEpfS5lbC1zZWxlY3QgLmVsLWlucHV0IC5lbC1zZWxlY3RfX2NhcmV0LmlzLXNob3ctY2xvc2U6aG92ZXJ7Y29sb3I6IzkwOTM5OX0uZWwtc2VsZWN0IC5lbC1pbnB1dC5pcy1kaXNhYmxlZCAuZWwtaW5wdXRfX2lubmVye2N1cnNvcjpub3QtYWxsb3dlZH0uZWwtc2VsZWN0IC5lbC1pbnB1dC5pcy1kaXNhYmxlZCAuZWwtaW5wdXRfX2lubmVyOmhvdmVye2JvcmRlci1jb2xvcjojRTRFN0VEfS5lbC1yYW5nZS1lZGl0b3IuaXMtYWN0aXZlLC5lbC1yYW5nZS1lZGl0b3IuaXMtYWN0aXZlOmhvdmVyLC5lbC1zZWxlY3QgLmVsLWlucHV0LmlzLWZvY3VzIC5lbC1pbnB1dF9faW5uZXJ7Ym9yZGVyLWNvbG9yOiM0MDlFRkZ9LmVsLXNlbGVjdD4uZWwtaW5wdXR7ZGlzcGxheTpibG9ja30uZWwtc2VsZWN0X19pbnB1dHtib3JkZXI6bm9uZTtvdXRsaW5lOjA7cGFkZGluZzowO21hcmdpbi1sZWZ0OjE1cHg7Y29sb3I6IzY2Njtmb250LXNpemU6MTRweDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZTthcHBlYXJhbmNlOm5vbmU7aGVpZ2h0OjI4cHg7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0uZWwtc2VsZWN0X19pbnB1dC5pcy1taW5pe2hlaWdodDoxNHB4fS5lbC1zZWxlY3RfX2Nsb3Nle2N1cnNvcjpwb2ludGVyO3Bvc2l0aW9uOmFic29sdXRlO3RvcDo4cHg7ei1pbmRleDoxMDAwO3JpZ2h0OjI1cHg7Y29sb3I6I0MwQzRDQztsaW5lLWhlaWdodDoxOHB4O2ZvbnQtc2l6ZToxNHB4fS5lbC1zZWxlY3RfX2Nsb3NlOmhvdmVye2NvbG9yOiM5MDkzOTl9LmVsLXNlbGVjdF9fdGFnc3twb3NpdGlvbjphYnNvbHV0ZTtsaW5lLWhlaWdodDpub3JtYWw7d2hpdGUtc3BhY2U6bm9ybWFsO3otaW5kZXg6MTt0b3A6NTAlOy13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSk7ZGlzcGxheTotd2Via2l0LWJveDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDstd2Via2l0LWJveC1hbGlnbjpjZW50ZXI7LW1zLWZsZXgtYWxpZ246Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjstbXMtZmxleC13cmFwOndyYXA7ZmxleC13cmFwOndyYXB9LmVsLXNlbGVjdF9fdGFncy10ZXh0e292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS5lbC1zZWxlY3QgLmVsLXRhZ3std2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50O21hcmdpbjoycHggMCAycHggNnB4O2JhY2tncm91bmQtY29sb3I6I2YwZjJmNTtkaXNwbGF5Oi13ZWJraXQtYm94O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4O21heC13aWR0aDoxMDAlOy13ZWJraXQtYm94LWFsaWduOmNlbnRlcjstbXMtZmxleC1hbGlnbjpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyfS5lbC1zZWxlY3QgLmVsLXRhZ19fY2xvc2UuZWwtaWNvbi1jbG9zZXtiYWNrZ3JvdW5kLWNvbG9yOiNDMEM0Q0M7dG9wOjA7Y29sb3I6I0ZGRjstbXMtZmxleC1uZWdhdGl2ZTowO2ZsZXgtc2hyaW5rOjB9LmVsLXNlbGVjdCAuZWwtdGFnX19jbG9zZS5lbC1pY29uLWNsb3NlOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzkwOTM5OX0uZWwtdGFibGUsLmVsLXRhYmxlX19leHBhbmRlZC1jZWxse2JhY2tncm91bmQtY29sb3I6I0ZGRn0uZWwtc2VsZWN0IC5lbC10YWdfX2Nsb3NlLmVsLWljb24tY2xvc2U6OmJlZm9yZXtkaXNwbGF5OmJsb2NrOy13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZSgwLC41cHgpO3RyYW5zZm9ybTp0cmFuc2xhdGUoMCwuNXB4KX0uZWwtdGFibGV7cG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3c6aGlkZGVuOy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDstd2Via2l0LWJveC1mbGV4OjE7LW1zLWZsZXg6MTtmbGV4OjE7d2lkdGg6MTAwJTttYXgtd2lkdGg6MTAwJTtmb250LXNpemU6MTRweDtjb2xvcjojNjA2MjY2fS5lbC10YWJsZV9fZW1wdHktYmxvY2t7bWluLWhlaWdodDo2MHB4O3RleHQtYWxpZ246Y2VudGVyO3dpZHRoOjEwMCU7ZGlzcGxheTotd2Via2l0LWJveDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDstd2Via2l0LWJveC1wYWNrOmNlbnRlcjstbXMtZmxleC1wYWNrOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOy13ZWJraXQtYm94LWFsaWduOmNlbnRlcjstbXMtZmxleC1hbGlnbjpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyfS5lbC10YWJsZV9fZW1wdHktdGV4dHtsaW5lLWhlaWdodDo2MHB4O3dpZHRoOjUwJTtjb2xvcjojOTA5Mzk5fS5lbC10YWJsZV9fZXhwYW5kLWNvbHVtbiAuY2VsbHtwYWRkaW5nOjA7dGV4dC1hbGlnbjpjZW50ZXJ9LmVsLXRhYmxlX19leHBhbmQtaWNvbntwb3NpdGlvbjpyZWxhdGl2ZTtjdXJzb3I6cG9pbnRlcjtjb2xvcjojNjY2O2ZvbnQtc2l6ZToxMnB4Oy13ZWJraXQtdHJhbnNpdGlvbjotd2Via2l0LXRyYW5zZm9ybSAuMnMgZWFzZS1pbi1vdXQ7dHJhbnNpdGlvbjotd2Via2l0LXRyYW5zZm9ybSAuMnMgZWFzZS1pbi1vdXQ7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjJzIGVhc2UtaW4tb3V0O3RyYW5zaXRpb246dHJhbnNmb3JtIC4ycyBlYXNlLWluLW91dCwtd2Via2l0LXRyYW5zZm9ybSAuMnMgZWFzZS1pbi1vdXQ7aGVpZ2h0OjIwcHh9LmVsLXRhYmxlX19leHBhbmQtaWNvbi0tZXhwYW5kZWR7LXdlYmtpdC10cmFuc2Zvcm06cm90YXRlKDkwZGVnKTt0cmFuc2Zvcm06cm90YXRlKDkwZGVnKX0uZWwtdGFibGVfX2V4cGFuZC1pY29uPi5lbC1pY29ue3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6NTAlO3RvcDo1MCU7bWFyZ2luLWxlZnQ6LTVweDttYXJnaW4tdG9wOi01cHh9LmVsLXRhYmxlX19leHBhbmRlZC1jZWxsW2NsYXNzKj1jZWxsXXtwYWRkaW5nOjIwcHggNTBweH0uZWwtdGFibGVfX2V4cGFuZGVkLWNlbGw6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudCFpbXBvcnRhbnR9LmVsLXRhYmxlX19wbGFjZWhvbGRlcntkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDoyMHB4fS5lbC10YWJsZV9fYXBwZW5kLXdyYXBwZXJ7b3ZlcmZsb3c6aGlkZGVufS5lbC10YWJsZS0tZml0e2JvcmRlci1yaWdodDowO2JvcmRlci1ib3R0b206MH0uZWwtdGFibGUtLWZpdCAuZWwtdGFibGVfX2NlbGwuZ3V0dGVye2JvcmRlci1yaWdodC13aWR0aDoxcHh9LmVsLXRhYmxlLS1zY3JvbGxhYmxlLXggLmVsLXRhYmxlX19ib2R5LXdyYXBwZXJ7b3ZlcmZsb3cteDphdXRvfS5lbC10YWJsZS0tc2Nyb2xsYWJsZS15IC5lbC10YWJsZV9fYm9keS13cmFwcGVye292ZXJmbG93LXk6YXV0b30uZWwtdGFibGUgdGhlYWR7Y29sb3I6IzkwOTM5OTtmb250LXdlaWdodDo1MDB9LmVsLXRhYmxlIHRoZWFkLmlzLWdyb3VwIHRoLmVsLXRhYmxlX19jZWxse2JhY2tncm91bmQ6I0Y1RjdGQX0uZWwtdGFibGUgLmVsLXRhYmxlX19jZWxse3BhZGRpbmc6MTJweCAwO21pbi13aWR0aDowOy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmxlZnR9LmVsLXRhYmxlIC5lbC10YWJsZV9fY2VsbC5pcy1jZW50ZXJ7dGV4dC1hbGlnbjpjZW50ZXJ9LmVsLXRhYmxlIC5lbC10YWJsZV9fY2VsbC5pcy1yaWdodHt0ZXh0LWFsaWduOnJpZ2h0fS5lbC10YWJsZSAuZWwtdGFibGVfX2NlbGwuZ3V0dGVye3dpZHRoOjE1cHg7Ym9yZGVyLXJpZ2h0LXdpZHRoOjA7Ym9yZGVyLWJvdHRvbS13aWR0aDowO3BhZGRpbmc6MH0uZWwtdGFibGUgLmVsLXRhYmxlX19jZWxsLmlzLWhpZGRlbj4qe3Zpc2liaWxpdHk6aGlkZGVufS5lbC10YWJsZS0tbWVkaXVtIC5lbC10YWJsZV9fY2VsbHtwYWRkaW5nOjEwcHggMH0uZWwtdGFibGUtLXNtYWxse2ZvbnQtc2l6ZToxMnB4fS5lbC10YWJsZS0tc21hbGwgLmVsLXRhYmxlX19jZWxse3BhZGRpbmc6OHB4IDB9LmVsLXRhYmxlLS1taW5pe2ZvbnQtc2l6ZToxMnB4fS5lbC10YWJsZS0tbWluaSAuZWwtdGFibGVfX2NlbGx7cGFkZGluZzo2cHggMH0uZWwtdGFibGUgdHJ7YmFja2dyb3VuZC1jb2xvcjojRkZGfS5lbC10YWJsZSB0ciBpbnB1dFt0eXBlPWNoZWNrYm94XXttYXJnaW46MH0uZWwtdGFibGUgdGQuZWwtdGFibGVfX2NlbGwsLmVsLXRhYmxlIHRoLmVsLXRhYmxlX19jZWxsLmlzLWxlYWZ7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI0VCRUVGNX0uZWwtdGFibGUgdGguZWwtdGFibGVfX2NlbGwuaXMtc29ydGFibGV7Y3Vyc29yOnBvaW50ZXJ9LmVsLXRhYmxlIHRoLmVsLXRhYmxlX19jZWxse292ZXJmbG93OmhpZGRlbjstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7YmFja2dyb3VuZC1jb2xvcjojRkZGfS5lbC10YWJsZSB0aC5lbC10YWJsZV9fY2VsbD4uY2VsbHtkaXNwbGF5OmlubGluZS1ibG9jazstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXRpdmU7dmVydGljYWwtYWxpZ246bWlkZGxlO3BhZGRpbmctbGVmdDoxMHB4O3BhZGRpbmctcmlnaHQ6MTBweDt3aWR0aDoxMDAlfS5lbC10YWJsZSB0aC5lbC10YWJsZV9fY2VsbD4uY2VsbC5oaWdobGlnaHR7Y29sb3I6IzQwOUVGRn0uZWwtdGFibGUgdGguZWwtdGFibGVfX2NlbGwucmVxdWlyZWQ+ZGl2OjpiZWZvcmV7ZGlzcGxheTppbmxpbmUtYmxvY2s7Y29udGVudDpcXFwiXFxcIjt3aWR0aDo4cHg7aGVpZ2h0OjhweDtib3JkZXItcmFkaXVzOjUwJTtiYWNrZ3JvdW5kOiNmZjRkNTE7bWFyZ2luLXJpZ2h0OjVweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmVsLXRhYmxlIHRkLmVsLXRhYmxlX19jZWxsIGRpdnstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3h9LmVsLWRhdGUtdGFibGUgdGQsLmVsLXRhYmxlIC5jZWxsLC5lbC10YWJsZS1maWx0ZXJ7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3h9LmVsLXRhYmxlIHRkLmVsLXRhYmxlX19jZWxsLmd1dHRlcnt3aWR0aDowfS5lbC10YWJsZSAuY2VsbHtib3gtc2l6aW5nOmJvcmRlci1ib3g7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm9ybWFsO3dvcmQtYnJlYWs6YnJlYWstYWxsO2xpbmUtaGVpZ2h0OjIzcHg7cGFkZGluZy1sZWZ0OjEwcHg7cGFkZGluZy1yaWdodDoxMHB4fS5lbC10YWJsZSAuY2VsbC5lbC10b29sdGlwe3doaXRlLXNwYWNlOm5vd3JhcDttaW4td2lkdGg6NTBweH0uZWwtdGFibGUtLWJvcmRlciwuZWwtdGFibGUtLWdyb3Vwe2JvcmRlcjoxcHggc29saWQgI0VCRUVGNX0uZWwtdGFibGUtLWJvcmRlcjo6YWZ0ZXIsLmVsLXRhYmxlLS1ncm91cDo6YWZ0ZXIsLmVsLXRhYmxlOjpiZWZvcmV7Y29udGVudDonJztwb3NpdGlvbjphYnNvbHV0ZTtiYWNrZ3JvdW5kLWNvbG9yOiNFQkVFRjU7ei1pbmRleDoxfS5lbC10YWJsZS0tYm9yZGVyOjphZnRlciwuZWwtdGFibGUtLWdyb3VwOjphZnRlcnt0b3A6MDtyaWdodDowO3dpZHRoOjFweDtoZWlnaHQ6MTAwJX0uZWwtdGFibGU6OmJlZm9yZXtsZWZ0OjA7Ym90dG9tOjA7d2lkdGg6MTAwJTtoZWlnaHQ6MXB4fS5lbC10YWJsZS0tYm9yZGVye2JvcmRlci1yaWdodDpub25lO2JvcmRlci1ib3R0b206bm9uZX0uZWwtdGFibGUtLWJvcmRlci5lbC1sb2FkaW5nLXBhcmVudC0tcmVsYXRpdmV7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50fS5lbC10YWJsZS0tYm9yZGVyIC5lbC10YWJsZV9fY2VsbCwuZWwtdGFibGVfX2JvZHktd3JhcHBlciAuZWwtdGFibGUtLWJvcmRlci5pcy1zY3JvbGxpbmctbGVmdH4uZWwtdGFibGVfX2ZpeGVke2JvcmRlci1yaWdodDoxcHggc29saWQgI0VCRUVGNX0uZWwtdGFibGUtLWJvcmRlciAuZWwtdGFibGVfX2NlbGw6Zmlyc3QtY2hpbGQgLmNlbGx7cGFkZGluZy1sZWZ0OjEwcHh9LmVsLXRhYmxlLS1ib3JkZXIgdGguZWwtdGFibGVfX2NlbGwuZ3V0dGVyOmxhc3Qtb2YtdHlwZXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjRUJFRUY1O2JvcmRlci1ib3R0b20td2lkdGg6MXB4fS5lbC10YWJsZS0tYm9yZGVyIHRoLmVsLXRhYmxlX19jZWxsLC5lbC10YWJsZV9fZml4ZWQtcmlnaHQtcGF0Y2h7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI0VCRUVGNX0uZWwtdGFibGUtLWhpZGRlbnt2aXNpYmlsaXR5OmhpZGRlbn0uZWwtdGFibGVfX2ZpeGVkLC5lbC10YWJsZV9fZml4ZWQtcmlnaHR7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO292ZXJmbG93LXg6aGlkZGVuO292ZXJmbG93LXk6aGlkZGVuOy13ZWJraXQtYm94LXNoYWRvdzowIDAgMTBweCByZ2JhKDAsMCwwLC4xMik7Ym94LXNoYWRvdzowIDAgMTBweCByZ2JhKDAsMCwwLC4xMil9LmVsLXRhYmxlX19maXhlZC1yaWdodDo6YmVmb3JlLC5lbC10YWJsZV9fZml4ZWQ6OmJlZm9yZXtjb250ZW50OicnO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDtib3R0b206MDt3aWR0aDoxMDAlO2hlaWdodDoxcHg7YmFja2dyb3VuZC1jb2xvcjojRUJFRUY1O3otaW5kZXg6NH0uZWwtdGFibGVfX2ZpeGVkLXJpZ2h0LXBhdGNoe3Bvc2l0aW9uOmFic29sdXRlO3RvcDotMXB4O3JpZ2h0OjA7YmFja2dyb3VuZC1jb2xvcjojRkZGfS5lbC10YWJsZV9fZml4ZWQtcmlnaHR7dG9wOjA7bGVmdDphdXRvO3JpZ2h0OjB9LmVsLXRhYmxlX19maXhlZC1yaWdodCAuZWwtdGFibGVfX2ZpeGVkLWJvZHktd3JhcHBlciwuZWwtdGFibGVfX2ZpeGVkLXJpZ2h0IC5lbC10YWJsZV9fZml4ZWQtZm9vdGVyLXdyYXBwZXIsLmVsLXRhYmxlX19maXhlZC1yaWdodCAuZWwtdGFibGVfX2ZpeGVkLWhlYWRlci13cmFwcGVye2xlZnQ6YXV0bztyaWdodDowfS5lbC10YWJsZV9fZml4ZWQtaGVhZGVyLXdyYXBwZXJ7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3RvcDowO3otaW5kZXg6M30uZWwtdGFibGVfX2ZpeGVkLWZvb3Rlci13cmFwcGVye3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDtib3R0b206MDt6LWluZGV4OjN9LmVsLXRhYmxlX19maXhlZC1mb290ZXItd3JhcHBlciB0Ym9keSB0ZC5lbC10YWJsZV9fY2VsbHtib3JkZXItdG9wOjFweCBzb2xpZCAjRUJFRUY1O2JhY2tncm91bmQtY29sb3I6I0Y1RjdGQTtjb2xvcjojNjA2MjY2fS5lbC10YWJsZV9fZml4ZWQtYm9keS13cmFwcGVye3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDt0b3A6MzdweDtvdmVyZmxvdzpoaWRkZW47ei1pbmRleDozfS5lbC10YWJsZV9fYm9keS13cmFwcGVyLC5lbC10YWJsZV9fZm9vdGVyLXdyYXBwZXIsLmVsLXRhYmxlX19oZWFkZXItd3JhcHBlcnt3aWR0aDoxMDAlfS5lbC10YWJsZV9fZm9vdGVyLXdyYXBwZXJ7bWFyZ2luLXRvcDotMXB4fS5lbC10YWJsZV9fZm9vdGVyLXdyYXBwZXIgdGQuZWwtdGFibGVfX2NlbGx7Ym9yZGVyLXRvcDoxcHggc29saWQgI0VCRUVGNX0uZWwtdGFibGVfX2JvZHksLmVsLXRhYmxlX19mb290ZXIsLmVsLXRhYmxlX19oZWFkZXJ7dGFibGUtbGF5b3V0OmZpeGVkO2JvcmRlci1jb2xsYXBzZTpzZXBhcmF0ZX0uZWwtdGFibGVfX2Zvb3Rlci13cmFwcGVyLC5lbC10YWJsZV9faGVhZGVyLXdyYXBwZXJ7b3ZlcmZsb3c6aGlkZGVufS5lbC10YWJsZV9fZm9vdGVyLXdyYXBwZXIgdGJvZHkgdGQuZWwtdGFibGVfX2NlbGwsLmVsLXRhYmxlX19oZWFkZXItd3JhcHBlciB0Ym9keSB0ZC5lbC10YWJsZV9fY2VsbHtiYWNrZ3JvdW5kLWNvbG9yOiNGNUY3RkE7Y29sb3I6IzYwNjI2Nn0uZWwtdGFibGVfX2JvZHktd3JhcHBlcntvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9LmVsLXRhYmxlX19ib2R5LXdyYXBwZXIuaXMtc2Nyb2xsaW5nLWxlZnR+LmVsLXRhYmxlX19maXhlZCwuZWwtdGFibGVfX2JvZHktd3JhcHBlci5pcy1zY3JvbGxpbmctbm9uZX4uZWwtdGFibGVfX2ZpeGVkLC5lbC10YWJsZV9fYm9keS13cmFwcGVyLmlzLXNjcm9sbGluZy1ub25lfi5lbC10YWJsZV9fZml4ZWQtcmlnaHQsLmVsLXRhYmxlX19ib2R5LXdyYXBwZXIuaXMtc2Nyb2xsaW5nLXJpZ2h0fi5lbC10YWJsZV9fZml4ZWQtcmlnaHR7LXdlYmtpdC1ib3gtc2hhZG93Om5vbmU7Ym94LXNoYWRvdzpub25lfS5lbC10YWJsZV9fYm9keS13cmFwcGVyIC5lbC10YWJsZS0tYm9yZGVyLmlzLXNjcm9sbGluZy1yaWdodH4uZWwtdGFibGVfX2ZpeGVkLXJpZ2h0e2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjRUJFRUY1fS5lbC10YWJsZSAuY2FyZXQtd3JhcHBlcntkaXNwbGF5Oi13ZWJraXQtaW5saW5lLWJveDtkaXNwbGF5Oi1tcy1pbmxpbmUtZmxleGJveDtkaXNwbGF5OmlubGluZS1mbGV4Oy13ZWJraXQtYm94LW9yaWVudDp2ZXJ0aWNhbDstd2Via2l0LWJveC1kaXJlY3Rpb246bm9ybWFsOy1tcy1mbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleC1kaXJlY3Rpb246Y29sdW1uOy13ZWJraXQtYm94LWFsaWduOmNlbnRlcjstbXMtZmxleC1hbGlnbjpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2hlaWdodDozNHB4O3dpZHRoOjI0cHg7dmVydGljYWwtYWxpZ246bWlkZGxlO2N1cnNvcjpwb2ludGVyO292ZXJmbG93OmluaXRpYWw7cG9zaXRpb246cmVsYXRpdmV9LmVsLXRhYmxlIC5zb3J0LWNhcmV0e3dpZHRoOjA7aGVpZ2h0OjA7Ym9yZGVyOjVweCBzb2xpZCB0cmFuc3BhcmVudDtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjdweH0uZWwtdGFibGUgLnNvcnQtY2FyZXQuYXNjZW5kaW5ne2JvcmRlci1ib3R0b20tY29sb3I6I0MwQzRDQzt0b3A6NXB4fS5lbC10YWJsZSAuc29ydC1jYXJldC5kZXNjZW5kaW5ne2JvcmRlci10b3AtY29sb3I6I0MwQzRDQztib3R0b206N3B4fS5lbC10YWJsZSAuYXNjZW5kaW5nIC5zb3J0LWNhcmV0LmFzY2VuZGluZ3tib3JkZXItYm90dG9tLWNvbG9yOiM0MDlFRkZ9LmVsLXRhYmxlIC5kZXNjZW5kaW5nIC5zb3J0LWNhcmV0LmRlc2NlbmRpbmd7Ym9yZGVyLXRvcC1jb2xvcjojNDA5RUZGfS5lbC10YWJsZSAuaGlkZGVuLWNvbHVtbnN7dmlzaWJpbGl0eTpoaWRkZW47cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDotMX0uZWwtdGFibGUtLXN0cmlwZWQgLmVsLXRhYmxlX19ib2R5IHRyLmVsLXRhYmxlX19yb3ctLXN0cmlwZWQgdGQuZWwtdGFibGVfX2NlbGx7YmFja2dyb3VuZDojRkFGQUZBfS5lbC10YWJsZS0tc3RyaXBlZCAuZWwtdGFibGVfX2JvZHkgdHIuZWwtdGFibGVfX3Jvdy0tc3RyaXBlZC5jdXJyZW50LXJvdyB0ZC5lbC10YWJsZV9fY2VsbCwuZWwtdGFibGUtLXN0cmlwZWQgLmVsLXRhYmxlX19ib2R5IHRyLmVsLXRhYmxlX19yb3ctLXN0cmlwZWQuc2VsZWN0aW9uLXJvdyB0ZC5lbC10YWJsZV9fY2VsbHtiYWNrZ3JvdW5kLWNvbG9yOiNlY2Y1ZmZ9LmVsLXRhYmxlX19ib2R5IHRyLmhvdmVyLXJvdy5jdXJyZW50LXJvdz50ZC5lbC10YWJsZV9fY2VsbCwuZWwtdGFibGVfX2JvZHkgdHIuaG92ZXItcm93LmVsLXRhYmxlX19yb3ctLXN0cmlwZWQuY3VycmVudC1yb3c+dGQuZWwtdGFibGVfX2NlbGwsLmVsLXRhYmxlX19ib2R5IHRyLmhvdmVyLXJvdy5lbC10YWJsZV9fcm93LS1zdHJpcGVkLnNlbGVjdGlvbi1yb3c+dGQuZWwtdGFibGVfX2NlbGwsLmVsLXRhYmxlX19ib2R5IHRyLmhvdmVyLXJvdy5lbC10YWJsZV9fcm93LS1zdHJpcGVkPnRkLmVsLXRhYmxlX19jZWxsLC5lbC10YWJsZV9fYm9keSB0ci5ob3Zlci1yb3cuc2VsZWN0aW9uLXJvdz50ZC5lbC10YWJsZV9fY2VsbCwuZWwtdGFibGVfX2JvZHkgdHIuaG92ZXItcm93PnRkLmVsLXRhYmxlX19jZWxse2JhY2tncm91bmQtY29sb3I6I0Y1RjdGQX0uZWwtdGFibGVfX2JvZHkgdHIuY3VycmVudC1yb3c+dGQuZWwtdGFibGVfX2NlbGwsLmVsLXRhYmxlX19ib2R5IHRyLnNlbGVjdGlvbi1yb3c+dGQuZWwtdGFibGVfX2NlbGx7YmFja2dyb3VuZC1jb2xvcjojZWNmNWZmfS5lbC10YWJsZV9fY29sdW1uLXJlc2l6ZS1wcm94eXtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjIwMHB4O3RvcDowO2JvdHRvbTowO3dpZHRoOjA7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNFQkVFRjU7ei1pbmRleDoxMH0uZWwtdGFibGVfX2NvbHVtbi1maWx0ZXItdHJpZ2dlcntkaXNwbGF5OmlubGluZS1ibG9jaztsaW5lLWhlaWdodDozNHB4O2N1cnNvcjpwb2ludGVyfS5lbC10YWJsZV9fY29sdW1uLWZpbHRlci10cmlnZ2VyIGl7Y29sb3I6IzkwOTM5OTtmb250LXNpemU6MTJweDstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSguNzUpO3RyYW5zZm9ybTpzY2FsZSguNzUpfS5lbC10YWJsZS0tZW5hYmxlLXJvdy10cmFuc2l0aW9uIC5lbC10YWJsZV9fYm9keSB0ZC5lbC10YWJsZV9fY2VsbHstd2Via2l0LXRyYW5zaXRpb246YmFja2dyb3VuZC1jb2xvciAuMjVzIGVhc2U7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIC4yNXMgZWFzZX0uZWwtdGFibGUtLWVuYWJsZS1yb3ctaG92ZXIgLmVsLXRhYmxlX19ib2R5IHRyOmhvdmVyPnRkLmVsLXRhYmxlX19jZWxse2JhY2tncm91bmQtY29sb3I6I0Y1RjdGQX0uZWwtdGFibGUtLWZsdWlkLWhlaWdodCAuZWwtdGFibGVfX2ZpeGVkLC5lbC10YWJsZS0tZmx1aWQtaGVpZ2h0IC5lbC10YWJsZV9fZml4ZWQtcmlnaHR7Ym90dG9tOjA7b3ZlcmZsb3c6aGlkZGVufS5lbC10YWJsZSBbY2xhc3MqPWVsLXRhYmxlX19yb3ctLWxldmVsXSAuZWwtdGFibGVfX2V4cGFuZC1pY29ue2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjIwcHg7bGluZS1oZWlnaHQ6MjBweDtoZWlnaHQ6MjBweDt0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW4tcmlnaHQ6M3B4fS5lbC10YWJsZS1jb2x1bW4tLXNlbGVjdGlvbiAuY2VsbHtwYWRkaW5nLWxlZnQ6MTRweDtwYWRkaW5nLXJpZ2h0OjE0cHh9LmVsLXRhYmxlLWZpbHRlcntib3JkZXI6MXB4IHNvbGlkICNFQkVFRjU7Ym9yZGVyLXJhZGl1czoycHg7YmFja2dyb3VuZC1jb2xvcjojRkZGO2JveC1zaGFkb3c6MCAycHggMTJweCAwIHJnYmEoMCwwLDAsLjEpO2JveC1zaXppbmc6Ym9yZGVyLWJveDttYXJnaW46MnB4IDB9LmVsLXRhYmxlLWZpbHRlcl9fbGlzdHtwYWRkaW5nOjVweCAwO21hcmdpbjowO2xpc3Qtc3R5bGU6bm9uZTttaW4td2lkdGg6MTAwcHh9LmVsLXRhYmxlLWZpbHRlcl9fbGlzdC1pdGVte2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDEwcHg7Y3Vyc29yOnBvaW50ZXI7Zm9udC1zaXplOjE0cHh9LmVsLXRhYmxlLWZpbHRlcl9fbGlzdC1pdGVtOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2VjZjVmZjtjb2xvcjojNjZiMWZmfS5lbC10YWJsZS1maWx0ZXJfX2xpc3QtaXRlbS5pcy1hY3RpdmV7YmFja2dyb3VuZC1jb2xvcjojNDA5RUZGO2NvbG9yOiNGRkZ9LmVsLXRhYmxlLWZpbHRlcl9fY29udGVudHttaW4td2lkdGg6MTAwcHh9LmVsLXRhYmxlLWZpbHRlcl9fYm90dG9te2JvcmRlci10b3A6MXB4IHNvbGlkICNFQkVFRjU7cGFkZGluZzo4cHh9LmVsLXRhYmxlLWZpbHRlcl9fYm90dG9tIGJ1dHRvbntiYWNrZ3JvdW5kOjAgMDtib3JkZXI6bm9uZTtjb2xvcjojNjA2MjY2O2N1cnNvcjpwb2ludGVyO2ZvbnQtc2l6ZToxM3B4O3BhZGRpbmc6MCAzcHh9LmVsLWRhdGUtdGFibGUgdGQuaW4tcmFuZ2UgZGl2LC5lbC1kYXRlLXRhYmxlIHRkLmluLXJhbmdlIGRpdjpob3ZlciwuZWwtZGF0ZS10YWJsZS5pcy13ZWVrLW1vZGUgLmVsLWRhdGUtdGFibGVfX3Jvdy5jdXJyZW50IGRpdiwuZWwtZGF0ZS10YWJsZS5pcy13ZWVrLW1vZGUgLmVsLWRhdGUtdGFibGVfX3Jvdzpob3ZlciBkaXZ7YmFja2dyb3VuZC1jb2xvcjojRjJGNkZDfS5lbC10YWJsZS1maWx0ZXJfX2JvdHRvbSBidXR0b246aG92ZXJ7Y29sb3I6IzQwOUVGRn0uZWwtdGFibGUtZmlsdGVyX19ib3R0b20gYnV0dG9uOmZvY3Vze291dGxpbmU6MH0uZWwtdGFibGUtZmlsdGVyX19ib3R0b20gYnV0dG9uLmlzLWRpc2FibGVke2NvbG9yOiNDMEM0Q0M7Y3Vyc29yOm5vdC1hbGxvd2VkfS5lbC10YWJsZS1maWx0ZXJfX3dyYXB7bWF4LWhlaWdodDoyODBweH0uZWwtdGFibGUtZmlsdGVyX19jaGVja2JveC1ncm91cHtwYWRkaW5nOjEwcHh9LmVsLXRhYmxlLWZpbHRlcl9fY2hlY2tib3gtZ3JvdXAgbGFiZWwuZWwtY2hlY2tib3h7ZGlzcGxheTpibG9jazttYXJnaW4tcmlnaHQ6NXB4O21hcmdpbi1ib3R0b206OHB4O21hcmdpbi1sZWZ0OjVweH0uZWwtdGFibGUtZmlsdGVyX19jaGVja2JveC1ncm91cCAuZWwtY2hlY2tib3g6bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjB9LmVsLWRhdGUtdGFibGV7Zm9udC1zaXplOjEycHg7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lfS5lbC1kYXRlLXRhYmxlLmlzLXdlZWstbW9kZSAuZWwtZGF0ZS10YWJsZV9fcm93OmhvdmVyIHRkLmF2YWlsYWJsZTpob3Zlcntjb2xvcjojNjA2MjY2fS5lbC1kYXRlLXRhYmxlLmlzLXdlZWstbW9kZSAuZWwtZGF0ZS10YWJsZV9fcm93OmhvdmVyIHRkOmZpcnN0LWNoaWxkIGRpdnttYXJnaW4tbGVmdDo1cHg7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czoxNXB4O2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MTVweH0uZWwtZGF0ZS10YWJsZS5pcy13ZWVrLW1vZGUgLmVsLWRhdGUtdGFibGVfX3Jvdzpob3ZlciB0ZDpsYXN0LWNoaWxkIGRpdnttYXJnaW4tcmlnaHQ6NXB4O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjE1cHg7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MTVweH0uZWwtZGF0ZS10YWJsZSB0ZHt3aWR0aDozMnB4O2hlaWdodDozMHB4O3BhZGRpbmc6NHB4IDA7Ym94LXNpemluZzpib3JkZXItYm94O3RleHQtYWxpZ246Y2VudGVyO2N1cnNvcjpwb2ludGVyO3Bvc2l0aW9uOnJlbGF0aXZlfS5lbC1kYXRlLXRhYmxlIHRkIGRpdntoZWlnaHQ6MzBweDtwYWRkaW5nOjNweCAwOy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveH0uZWwtZGF0ZS10YWJsZSB0ZCBzcGFue3dpZHRoOjI0cHg7aGVpZ2h0OjI0cHg7ZGlzcGxheTpibG9jazttYXJnaW46MCBhdXRvO2xpbmUtaGVpZ2h0OjI0cHg7cG9zaXRpb246YWJzb2x1dGU7bGVmdDo1MCU7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWCgtNTAlKTt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtNTAlKTtib3JkZXItcmFkaXVzOjUwJX0uZWwtZGF0ZS10YWJsZSB0ZC5uZXh0LW1vbnRoLC5lbC1kYXRlLXRhYmxlIHRkLnByZXYtbW9udGh7Y29sb3I6I0MwQzRDQ30uZWwtZGF0ZS10YWJsZSB0ZC50b2RheXtwb3NpdGlvbjpyZWxhdGl2ZX0uZWwtZGF0ZS10YWJsZSB0ZC50b2RheSBzcGFue2NvbG9yOiM0MDlFRkY7Zm9udC13ZWlnaHQ6NzAwfS5lbC1kYXRlLXRhYmxlIHRkLnRvZGF5LmVuZC1kYXRlIHNwYW4sLmVsLWRhdGUtdGFibGUgdGQudG9kYXkuc3RhcnQtZGF0ZSBzcGFue2NvbG9yOiNGRkZ9LmVsLWRhdGUtdGFibGUgdGQuYXZhaWxhYmxlOmhvdmVye2NvbG9yOiM0MDlFRkZ9LmVsLWRhdGUtdGFibGUgdGQuY3VycmVudDpub3QoLmRpc2FibGVkKSBzcGFue2NvbG9yOiNGRkY7YmFja2dyb3VuZC1jb2xvcjojNDA5RUZGfS5lbC1kYXRlLXRhYmxlIHRkLmVuZC1kYXRlIGRpdiwuZWwtZGF0ZS10YWJsZSB0ZC5zdGFydC1kYXRlIGRpdntjb2xvcjojRkZGfS5lbC1kYXRlLXRhYmxlIHRkLmVuZC1kYXRlIHNwYW4sLmVsLWRhdGUtdGFibGUgdGQuc3RhcnQtZGF0ZSBzcGFue2JhY2tncm91bmQtY29sb3I6IzQwOUVGRn0uZWwtZGF0ZS10YWJsZSB0ZC5zdGFydC1kYXRlIGRpdnttYXJnaW4tbGVmdDo1cHg7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czoxNXB4O2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MTVweH0uZWwtZGF0ZS10YWJsZSB0ZC5lbmQtZGF0ZSBkaXZ7bWFyZ2luLXJpZ2h0OjVweDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czoxNXB4O2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjE1cHh9LmVsLWRhdGUtdGFibGUgdGQuZGlzYWJsZWQgZGl2e2JhY2tncm91bmQtY29sb3I6I0Y1RjdGQTtvcGFjaXR5OjE7Y3Vyc29yOm5vdC1hbGxvd2VkO2NvbG9yOiNDMEM0Q0N9LmVsLWRhdGUtdGFibGUgdGQuc2VsZWN0ZWQgZGl2e21hcmdpbi1sZWZ0OjVweDttYXJnaW4tcmlnaHQ6NXB4O2JhY2tncm91bmQtY29sb3I6I0YyRjZGQztib3JkZXItcmFkaXVzOjE1cHh9LmVsLWRhdGUtdGFibGUgdGQuc2VsZWN0ZWQgZGl2OmhvdmVye2JhY2tncm91bmQtY29sb3I6I0YyRjZGQ30uZWwtZGF0ZS10YWJsZSB0ZC5zZWxlY3RlZCBzcGFue2JhY2tncm91bmQtY29sb3I6IzQwOUVGRjtjb2xvcjojRkZGO2JvcmRlci1yYWRpdXM6MTVweH0uZWwtZGF0ZS10YWJsZSB0ZC53ZWVre2ZvbnQtc2l6ZTo4MCU7Y29sb3I6IzYwNjI2Nn0uZWwtbW9udGgtdGFibGUsLmVsLXllYXItdGFibGV7Zm9udC1zaXplOjEycHg7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlfS5lbC1kYXRlLXRhYmxlIHRoe3BhZGRpbmc6NXB4O2NvbG9yOiM2MDYyNjY7Zm9udC13ZWlnaHQ6NDAwO2JvcmRlci1ib3R0b206c29saWQgMXB4ICNFQkVFRjV9LmVsLW1vbnRoLXRhYmxle21hcmdpbjotMXB4fS5lbC1tb250aC10YWJsZSB0ZHt0ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5nOjhweCAwO2N1cnNvcjpwb2ludGVyfS5lbC1tb250aC10YWJsZSB0ZCBkaXZ7aGVpZ2h0OjQ4cHg7cGFkZGluZzo2cHggMDstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3h9LmVsLW1vbnRoLXRhYmxlIHRkLnRvZGF5IC5jZWxse2NvbG9yOiM0MDlFRkY7Zm9udC13ZWlnaHQ6NzAwfS5lbC1tb250aC10YWJsZSB0ZC50b2RheS5lbmQtZGF0ZSAuY2VsbCwuZWwtbW9udGgtdGFibGUgdGQudG9kYXkuc3RhcnQtZGF0ZSAuY2VsbHtjb2xvcjojRkZGfS5lbC1tb250aC10YWJsZSB0ZC5kaXNhYmxlZCAuY2VsbHtiYWNrZ3JvdW5kLWNvbG9yOiNGNUY3RkE7Y3Vyc29yOm5vdC1hbGxvd2VkO2NvbG9yOiNDMEM0Q0N9LmVsLW1vbnRoLXRhYmxlIHRkLmRpc2FibGVkIC5jZWxsOmhvdmVye2NvbG9yOiNDMEM0Q0N9LmVsLW1vbnRoLXRhYmxlIHRkIC5jZWxse3dpZHRoOjYwcHg7aGVpZ2h0OjM2cHg7ZGlzcGxheTpibG9jaztsaW5lLWhlaWdodDozNnB4O2NvbG9yOiM2MDYyNjY7bWFyZ2luOjAgYXV0bztib3JkZXItcmFkaXVzOjE4cHh9LmVsLW1vbnRoLXRhYmxlIHRkIC5jZWxsOmhvdmVye2NvbG9yOiM0MDlFRkZ9LmVsLW1vbnRoLXRhYmxlIHRkLmluLXJhbmdlIGRpdiwuZWwtbW9udGgtdGFibGUgdGQuaW4tcmFuZ2UgZGl2OmhvdmVye2JhY2tncm91bmQtY29sb3I6I0YyRjZGQ30uZWwtbW9udGgtdGFibGUgdGQuZW5kLWRhdGUgZGl2LC5lbC1tb250aC10YWJsZSB0ZC5zdGFydC1kYXRlIGRpdntjb2xvcjojRkZGfS5lbC1tb250aC10YWJsZSB0ZC5lbmQtZGF0ZSAuY2VsbCwuZWwtbW9udGgtdGFibGUgdGQuc3RhcnQtZGF0ZSAuY2VsbHtjb2xvcjojRkZGO2JhY2tncm91bmQtY29sb3I6IzQwOUVGRn0uZWwtbW9udGgtdGFibGUgdGQuc3RhcnQtZGF0ZSBkaXZ7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czoyNHB4O2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MjRweH0uZWwtbW9udGgtdGFibGUgdGQuZW5kLWRhdGUgZGl2e2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjI0cHg7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MjRweH0uZWwtbW9udGgtdGFibGUgdGQuY3VycmVudDpub3QoLmRpc2FibGVkKSAuY2VsbHtjb2xvcjojNDA5RUZGfS5lbC15ZWFyLXRhYmxle21hcmdpbjotMXB4fS5lbC15ZWFyLXRhYmxlIC5lbC1pY29ue2NvbG9yOiMzMDMxMzN9LmVsLXllYXItdGFibGUgdGR7dGV4dC1hbGlnbjpjZW50ZXI7cGFkZGluZzoyMHB4IDNweDtjdXJzb3I6cG9pbnRlcn0uZWwteWVhci10YWJsZSB0ZC50b2RheSAuY2VsbHtjb2xvcjojNDA5RUZGO2ZvbnQtd2VpZ2h0OjcwMH0uZWwteWVhci10YWJsZSB0ZC5kaXNhYmxlZCAuY2VsbHtiYWNrZ3JvdW5kLWNvbG9yOiNGNUY3RkE7Y3Vyc29yOm5vdC1hbGxvd2VkO2NvbG9yOiNDMEM0Q0N9LmVsLXllYXItdGFibGUgdGQuZGlzYWJsZWQgLmNlbGw6aG92ZXJ7Y29sb3I6I0MwQzRDQ30uZWwteWVhci10YWJsZSB0ZCAuY2VsbHt3aWR0aDo0OHB4O2hlaWdodDozMnB4O2Rpc3BsYXk6YmxvY2s7bGluZS1oZWlnaHQ6MzJweDtjb2xvcjojNjA2MjY2O21hcmdpbjowIGF1dG99LmVsLXllYXItdGFibGUgdGQgLmNlbGw6aG92ZXIsLmVsLXllYXItdGFibGUgdGQuY3VycmVudDpub3QoLmRpc2FibGVkKSAuY2VsbHtjb2xvcjojNDA5RUZGfS5lbC1kYXRlLXJhbmdlLXBpY2tlcnt3aWR0aDo2NDZweH0uZWwtZGF0ZS1yYW5nZS1waWNrZXIuaGFzLXNpZGViYXJ7d2lkdGg6NzU2cHh9LmVsLWRhdGUtcmFuZ2UtcGlja2VyIHRhYmxle3RhYmxlLWxheW91dDpmaXhlZDt3aWR0aDoxMDAlfS5lbC1kYXRlLXJhbmdlLXBpY2tlciAuZWwtcGlja2VyLXBhbmVsX19ib2R5e21pbi13aWR0aDo1MTNweH0uZWwtZGF0ZS1yYW5nZS1waWNrZXIgLmVsLXBpY2tlci1wYW5lbF9fY29udGVudHttYXJnaW46MH0uZWwtZGF0ZS1yYW5nZS1waWNrZXJfX2hlYWRlcntwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmNlbnRlcjtoZWlnaHQ6MjhweH0uZWwtZGF0ZS1yYW5nZS1waWNrZXJfX2hlYWRlciBbY2xhc3MqPWFycm93LWxlZnRde2Zsb2F0OmxlZnR9LmVsLWRhdGUtcmFuZ2UtcGlja2VyX19oZWFkZXIgW2NsYXNzKj1hcnJvdy1yaWdodF17ZmxvYXQ6cmlnaHR9LmVsLWRhdGUtcmFuZ2UtcGlja2VyX19oZWFkZXIgZGl2e2ZvbnQtc2l6ZToxNnB4O2ZvbnQtd2VpZ2h0OjUwMDttYXJnaW4tcmlnaHQ6NTBweH0uZWwtZGF0ZS1yYW5nZS1waWNrZXJfX2NvbnRlbnR7ZmxvYXQ6bGVmdDt3aWR0aDo1MCU7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94O21hcmdpbjowO3BhZGRpbmc6MTZweH0uZWwtZGF0ZS1yYW5nZS1waWNrZXJfX2NvbnRlbnQuaXMtbGVmdHtib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNlNGU0ZTR9LmVsLWRhdGUtcmFuZ2UtcGlja2VyX19jb250ZW50IC5lbC1kYXRlLXJhbmdlLXBpY2tlcl9faGVhZGVyIGRpdnttYXJnaW4tbGVmdDo1MHB4O21hcmdpbi1yaWdodDo1MHB4fS5lbC1kYXRlLXJhbmdlLXBpY2tlcl9fZWRpdG9ycy13cmFwey13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OnRhYmxlLWNlbGx9LmVsLWRhdGUtcmFuZ2UtcGlja2VyX19lZGl0b3JzLXdyYXAuaXMtcmlnaHR7dGV4dC1hbGlnbjpyaWdodH0uZWwtZGF0ZS1yYW5nZS1waWNrZXJfX3RpbWUtaGVhZGVye3Bvc2l0aW9uOnJlbGF0aXZlO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlNGU0ZTQ7Zm9udC1zaXplOjEycHg7cGFkZGluZzo4cHggNXB4IDVweDtkaXNwbGF5OnRhYmxlO3dpZHRoOjEwMCU7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94fS5lbC1kYXRlLXJhbmdlLXBpY2tlcl9fdGltZS1oZWFkZXI+LmVsLWljb24tYXJyb3ctcmlnaHR7Zm9udC1zaXplOjIwcHg7dmVydGljYWwtYWxpZ246bWlkZGxlO2Rpc3BsYXk6dGFibGUtY2VsbDtjb2xvcjojMzAzMTMzfS5lbC1kYXRlLXJhbmdlLXBpY2tlcl9fdGltZS1waWNrZXItd3JhcHtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OnRhYmxlLWNlbGw7cGFkZGluZzowIDVweH0uZWwtZGF0ZS1yYW5nZS1waWNrZXJfX3RpbWUtcGlja2VyLXdyYXAgLmVsLXBpY2tlci1wYW5lbHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MTNweDtyaWdodDowO3otaW5kZXg6MTtiYWNrZ3JvdW5kOiNGRkZ9LmVsLWRhdGUtcGlja2Vye3dpZHRoOjMyMnB4fS5lbC1kYXRlLXBpY2tlci5oYXMtc2lkZWJhci5oYXMtdGltZXt3aWR0aDo0MzRweH0uZWwtZGF0ZS1waWNrZXIuaGFzLXNpZGViYXJ7d2lkdGg6NDM4cHh9LmVsLWRhdGUtcGlja2VyLmhhcy10aW1lIC5lbC1waWNrZXItcGFuZWxfX2JvZHktd3JhcHBlcntwb3NpdGlvbjpyZWxhdGl2ZX0uZWwtZGF0ZS1waWNrZXIgLmVsLXBpY2tlci1wYW5lbF9fY29udGVudHt3aWR0aDoyOTJweH0uZWwtZGF0ZS1waWNrZXIgdGFibGV7dGFibGUtbGF5b3V0OmZpeGVkO3dpZHRoOjEwMCV9LmVsLWRhdGUtcGlja2VyX19lZGl0b3Itd3JhcHtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OnRhYmxlLWNlbGw7cGFkZGluZzowIDVweH0uZWwtZGF0ZS1waWNrZXJfX3RpbWUtaGVhZGVye3Bvc2l0aW9uOnJlbGF0aXZlO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlNGU0ZTQ7Zm9udC1zaXplOjEycHg7cGFkZGluZzo4cHggNXB4IDVweDtkaXNwbGF5OnRhYmxlO3dpZHRoOjEwMCU7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94fS5lbC1kYXRlLXBpY2tlcl9faGVhZGVye21hcmdpbjoxMnB4O3RleHQtYWxpZ246Y2VudGVyfS5lbC1kYXRlLXBpY2tlcl9faGVhZGVyLS1ib3JkZXJlZHttYXJnaW4tYm90dG9tOjA7cGFkZGluZy1ib3R0b206MTJweDtib3JkZXItYm90dG9tOnNvbGlkIDFweCAjRUJFRUY1fS5lbC1kYXRlLXBpY2tlcl9faGVhZGVyLS1ib3JkZXJlZCsuZWwtcGlja2VyLXBhbmVsX19jb250ZW50e21hcmdpbi10b3A6MH0uZWwtZGF0ZS1waWNrZXJfX2hlYWRlci1sYWJlbHtmb250LXNpemU6MTZweDtmb250LXdlaWdodDo1MDA7cGFkZGluZzowIDVweDtsaW5lLWhlaWdodDoyMnB4O3RleHQtYWxpZ246Y2VudGVyO2N1cnNvcjpwb2ludGVyO2NvbG9yOiM2MDYyNjZ9LmVsLWRhdGUtcGlja2VyX19oZWFkZXItbGFiZWwuYWN0aXZlLC5lbC1kYXRlLXBpY2tlcl9faGVhZGVyLWxhYmVsOmhvdmVye2NvbG9yOiM0MDlFRkZ9LmVsLWRhdGUtcGlja2VyX19wcmV2LWJ0bntmbG9hdDpsZWZ0fS5lbC1kYXRlLXBpY2tlcl9fbmV4dC1idG57ZmxvYXQ6cmlnaHR9LmVsLWRhdGUtcGlja2VyX190aW1lLXdyYXB7cGFkZGluZzoxMHB4O3RleHQtYWxpZ246Y2VudGVyfS5lbC1kYXRlLXBpY2tlcl9fdGltZS1sYWJlbHtmbG9hdDpsZWZ0O2N1cnNvcjpwb2ludGVyO2xpbmUtaGVpZ2h0OjMwcHg7bWFyZ2luLWxlZnQ6MTBweH0udGltZS1zZWxlY3R7bWFyZ2luOjVweCAwO21pbi13aWR0aDowfS50aW1lLXNlbGVjdCAuZWwtcGlja2VyLXBhbmVsX19jb250ZW50e21heC1oZWlnaHQ6MjAwcHg7bWFyZ2luOjB9LnRpbWUtc2VsZWN0LWl0ZW17cGFkZGluZzo4cHggMTBweDtmb250LXNpemU6MTRweDtsaW5lLWhlaWdodDoyMHB4fS50aW1lLXNlbGVjdC1pdGVtLnNlbGVjdGVkOm5vdCguZGlzYWJsZWQpe2NvbG9yOiM0MDlFRkY7Zm9udC13ZWlnaHQ6NzAwfS50aW1lLXNlbGVjdC1pdGVtLmRpc2FibGVke2NvbG9yOiNFNEU3RUQ7Y3Vyc29yOm5vdC1hbGxvd2VkfS50aW1lLXNlbGVjdC1pdGVtOmhvdmVye2JhY2tncm91bmQtY29sb3I6I0Y1RjdGQTtmb250LXdlaWdodDo3MDA7Y3Vyc29yOnBvaW50ZXJ9LmVsLWRhdGUtZWRpdG9ye3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3RleHQtYWxpZ246bGVmdH0uZWwtZGF0ZS1lZGl0b3IuZWwtaW5wdXQsLmVsLWRhdGUtZWRpdG9yLmVsLWlucHV0X19pbm5lcnt3aWR0aDoyMjBweH0uZWwtZGF0ZS1lZGl0b3ItLW1vbnRocmFuZ2UuZWwtaW5wdXQsLmVsLWRhdGUtZWRpdG9yLS1tb250aHJhbmdlLmVsLWlucHV0X19pbm5lcnt3aWR0aDozMDBweH0uZWwtZGF0ZS1lZGl0b3ItLWRhdGVyYW5nZS5lbC1pbnB1dCwuZWwtZGF0ZS1lZGl0b3ItLWRhdGVyYW5nZS5lbC1pbnB1dF9faW5uZXIsLmVsLWRhdGUtZWRpdG9yLS10aW1lcmFuZ2UuZWwtaW5wdXQsLmVsLWRhdGUtZWRpdG9yLS10aW1lcmFuZ2UuZWwtaW5wdXRfX2lubmVye3dpZHRoOjM1MHB4fS5lbC1kYXRlLWVkaXRvci0tZGF0ZXRpbWVyYW5nZS5lbC1pbnB1dCwuZWwtZGF0ZS1lZGl0b3ItLWRhdGV0aW1lcmFuZ2UuZWwtaW5wdXRfX2lubmVye3dpZHRoOjQwMHB4fS5lbC1kYXRlLWVkaXRvci0tZGF0ZXMgLmVsLWlucHV0X19pbm5lcnt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcH0uZWwtZGF0ZS1lZGl0b3IgLmVsLWljb24tY2lyY2xlLWNsb3Nle2N1cnNvcjpwb2ludGVyfS5lbC1kYXRlLWVkaXRvciAuZWwtcmFuZ2VfX2ljb257Zm9udC1zaXplOjE0cHg7bWFyZ2luLWxlZnQ6LTVweDtjb2xvcjojQzBDNENDO2Zsb2F0OmxlZnQ7bGluZS1oZWlnaHQ6MzJweH0uZWwtZGF0ZS1lZGl0b3IgLmVsLXJhbmdlLWlucHV0ey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lO2FwcGVhcmFuY2U6bm9uZTtib3JkZXI6bm9uZTtvdXRsaW5lOjA7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjEwMCU7bWFyZ2luOjA7cGFkZGluZzowO3dpZHRoOjM5JTt0ZXh0LWFsaWduOmNlbnRlcjtmb250LXNpemU6MTRweDtjb2xvcjojNjA2MjY2fS5lbC1kYXRlLWVkaXRvciAuZWwtcmFuZ2UtaW5wdXQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6I0MwQzRDQ30uZWwtZGF0ZS1lZGl0b3IgLmVsLXJhbmdlLWlucHV0Oi1tcy1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjojQzBDNENDfS5lbC1kYXRlLWVkaXRvciAuZWwtcmFuZ2UtaW5wdXQ6Oi1tcy1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjojQzBDNENDfS5lbC1kYXRlLWVkaXRvciAuZWwtcmFuZ2UtaW5wdXQ6OnBsYWNlaG9sZGVye2NvbG9yOiNDMEM0Q0N9LmVsLWRhdGUtZWRpdG9yIC5lbC1yYW5nZS1zZXBhcmF0b3J7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjEwMCU7cGFkZGluZzowIDVweDttYXJnaW46MDt0ZXh0LWFsaWduOmNlbnRlcjtsaW5lLWhlaWdodDozMnB4O2ZvbnQtc2l6ZToxNHB4O3dpZHRoOjUlO2NvbG9yOiMzMDMxMzN9LmVsLWRhdGUtZWRpdG9yIC5lbC1yYW5nZV9fY2xvc2UtaWNvbntmb250LXNpemU6MTRweDtjb2xvcjojQzBDNENDO3dpZHRoOjI1cHg7ZGlzcGxheTppbmxpbmUtYmxvY2s7ZmxvYXQ6cmlnaHQ7bGluZS1oZWlnaHQ6MzJweH0uZWwtcmFuZ2UtZWRpdG9yLmVsLWlucHV0X19pbm5lcntkaXNwbGF5Oi13ZWJraXQtaW5saW5lLWJveDtkaXNwbGF5Oi1tcy1pbmxpbmUtZmxleGJveDtkaXNwbGF5OmlubGluZS1mbGV4Oy13ZWJraXQtYm94LWFsaWduOmNlbnRlcjstbXMtZmxleC1hbGlnbjpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO3BhZGRpbmc6M3B4IDEwcHh9LmVsLXJhbmdlLWVkaXRvciAuZWwtcmFuZ2UtaW5wdXR7bGluZS1oZWlnaHQ6MX0uZWwtcmFuZ2UtZWRpdG9yLS1tZWRpdW0uZWwtaW5wdXRfX2lubmVye2hlaWdodDozNnB4fS5lbC1yYW5nZS1lZGl0b3ItLW1lZGl1bSAuZWwtcmFuZ2Utc2VwYXJhdG9ye2xpbmUtaGVpZ2h0OjI4cHg7Zm9udC1zaXplOjE0cHh9LmVsLXJhbmdlLWVkaXRvci0tbWVkaXVtIC5lbC1yYW5nZS1pbnB1dHtmb250LXNpemU6MTRweH0uZWwtcmFuZ2UtZWRpdG9yLS1tZWRpdW0gLmVsLXJhbmdlX19jbG9zZS1pY29uLC5lbC1yYW5nZS1lZGl0b3ItLW1lZGl1bSAuZWwtcmFuZ2VfX2ljb257bGluZS1oZWlnaHQ6MjhweH0uZWwtcmFuZ2UtZWRpdG9yLS1zbWFsbC5lbC1pbnB1dF9faW5uZXJ7aGVpZ2h0OjMycHh9LmVsLXJhbmdlLWVkaXRvci0tc21hbGwgLmVsLXJhbmdlLXNlcGFyYXRvcntsaW5lLWhlaWdodDoyNHB4O2ZvbnQtc2l6ZToxM3B4fS5lbC1yYW5nZS1lZGl0b3ItLXNtYWxsIC5lbC1yYW5nZS1pbnB1dHtmb250LXNpemU6MTNweH0uZWwtcmFuZ2UtZWRpdG9yLS1zbWFsbCAuZWwtcmFuZ2VfX2Nsb3NlLWljb24sLmVsLXJhbmdlLWVkaXRvci0tc21hbGwgLmVsLXJhbmdlX19pY29ue2xpbmUtaGVpZ2h0OjI0cHh9LmVsLXJhbmdlLWVkaXRvci0tbWluaS5lbC1pbnB1dF9faW5uZXJ7aGVpZ2h0OjI4cHh9LmVsLXJhbmdlLWVkaXRvci0tbWluaSAuZWwtcmFuZ2Utc2VwYXJhdG9ye2xpbmUtaGVpZ2h0OjIwcHg7Zm9udC1zaXplOjEycHh9LmVsLXJhbmdlLWVkaXRvci0tbWluaSAuZWwtcmFuZ2UtaW5wdXR7Zm9udC1zaXplOjEycHh9LmVsLXJhbmdlLWVkaXRvci0tbWluaSAuZWwtcmFuZ2VfX2Nsb3NlLWljb24sLmVsLXJhbmdlLWVkaXRvci0tbWluaSAuZWwtcmFuZ2VfX2ljb257bGluZS1oZWlnaHQ6MjBweH0uZWwtcmFuZ2UtZWRpdG9yLmlzLWRpc2FibGVke2JhY2tncm91bmQtY29sb3I6I0Y1RjdGQTtib3JkZXItY29sb3I6I0U0RTdFRDtjb2xvcjojQzBDNENDO2N1cnNvcjpub3QtYWxsb3dlZH0uZWwtcmFuZ2UtZWRpdG9yLmlzLWRpc2FibGVkOmZvY3VzLC5lbC1yYW5nZS1lZGl0b3IuaXMtZGlzYWJsZWQ6aG92ZXJ7Ym9yZGVyLWNvbG9yOiNFNEU3RUR9LmVsLXJhbmdlLWVkaXRvci5pcy1kaXNhYmxlZCBpbnB1dHtiYWNrZ3JvdW5kLWNvbG9yOiNGNUY3RkE7Y29sb3I6I0MwQzRDQztjdXJzb3I6bm90LWFsbG93ZWR9LmVsLXJhbmdlLWVkaXRvci5pcy1kaXNhYmxlZCBpbnB1dDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjojQzBDNENDfS5lbC1yYW5nZS1lZGl0b3IuaXMtZGlzYWJsZWQgaW5wdXQ6LW1zLWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOiNDMEM0Q0N9LmVsLXJhbmdlLWVkaXRvci5pcy1kaXNhYmxlZCBpbnB1dDo6LW1zLWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOiNDMEM0Q0N9LmVsLXJhbmdlLWVkaXRvci5pcy1kaXNhYmxlZCBpbnB1dDo6cGxhY2Vob2xkZXJ7Y29sb3I6I0MwQzRDQ30uZWwtcmFuZ2UtZWRpdG9yLmlzLWRpc2FibGVkIC5lbC1yYW5nZS1zZXBhcmF0b3J7Y29sb3I6I0MwQzRDQ30uZWwtcGlja2VyLXBhbmVse2NvbG9yOiM2MDYyNjY7Ym9yZGVyOjFweCBzb2xpZCAjRTRFN0VEO2JveC1zaGFkb3c6MCAycHggMTJweCAwIHJnYmEoMCwwLDAsLjEpO2JhY2tncm91bmQ6I0ZGRjtib3JkZXItcmFkaXVzOjRweDtsaW5lLWhlaWdodDozMHB4O21hcmdpbjo1cHggMH0uZWwtcGlja2VyLXBhbmVsX19ib2R5LXdyYXBwZXI6OmFmdGVyLC5lbC1waWNrZXItcGFuZWxfX2JvZHk6OmFmdGVye2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTp0YWJsZTtjbGVhcjpib3RofS5lbC1waWNrZXItcGFuZWxfX2NvbnRlbnR7cG9zaXRpb246cmVsYXRpdmU7bWFyZ2luOjE1cHh9LmVsLXBpY2tlci1wYW5lbF9fZm9vdGVye2JvcmRlci10b3A6MXB4IHNvbGlkICNlNGU0ZTQ7cGFkZGluZzo0cHg7dGV4dC1hbGlnbjpyaWdodDtiYWNrZ3JvdW5kLWNvbG9yOiNGRkY7cG9zaXRpb246cmVsYXRpdmU7Zm9udC1zaXplOjB9LmVsLXBpY2tlci1wYW5lbF9fc2hvcnRjdXR7ZGlzcGxheTpibG9jazt3aWR0aDoxMDAlO2JvcmRlcjowO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7bGluZS1oZWlnaHQ6MjhweDtmb250LXNpemU6MTRweDtjb2xvcjojNjA2MjY2O3BhZGRpbmctbGVmdDoxMnB4O3RleHQtYWxpZ246bGVmdDtvdXRsaW5lOjA7Y3Vyc29yOnBvaW50ZXJ9LmVsLXBpY2tlci1wYW5lbF9fc2hvcnRjdXQ6aG92ZXJ7Y29sb3I6IzQwOUVGRn0uZWwtcGlja2VyLXBhbmVsX19zaG9ydGN1dC5hY3RpdmV7YmFja2dyb3VuZC1jb2xvcjojZTZmMWZlO2NvbG9yOiM0MDlFRkZ9LmVsLXBpY2tlci1wYW5lbF9fYnRue2JvcmRlcjoxcHggc29saWQgI2RjZGNkYztjb2xvcjojMzMzO2xpbmUtaGVpZ2h0OjI0cHg7Ym9yZGVyLXJhZGl1czoycHg7cGFkZGluZzowIDIwcHg7Y3Vyc29yOnBvaW50ZXI7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtvdXRsaW5lOjA7Zm9udC1zaXplOjEycHh9LmVsLXBpY2tlci1wYW5lbF9fYnRuW2Rpc2FibGVkXXtjb2xvcjojY2NjO2N1cnNvcjpub3QtYWxsb3dlZH0uZWwtcGlja2VyLXBhbmVsX19pY29uLWJ0bntmb250LXNpemU6MTJweDtjb2xvcjojMzAzMTMzO2JvcmRlcjowO2JhY2tncm91bmQ6MCAwO2N1cnNvcjpwb2ludGVyO291dGxpbmU6MDttYXJnaW4tdG9wOjhweH0uZWwtcGlja2VyLXBhbmVsX19pY29uLWJ0bjpob3Zlcntjb2xvcjojNDA5RUZGfS5lbC1waWNrZXItcGFuZWxfX2ljb24tYnRuLmlzLWRpc2FibGVke2NvbG9yOiNiYmJ9LmVsLXBpY2tlci1wYW5lbF9faWNvbi1idG4uaXMtZGlzYWJsZWQ6aG92ZXJ7Y3Vyc29yOm5vdC1hbGxvd2VkfS5lbC1waWNrZXItcGFuZWxfX2xpbmstYnRue3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uZWwtcGlja2VyLXBhbmVsIFtzbG90PXNpZGViYXJdLC5lbC1waWNrZXItcGFuZWxfX3NpZGViYXJ7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7d2lkdGg6MTEwcHg7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjZTRlNGU0Oy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nLXRvcDo2cHg7YmFja2dyb3VuZC1jb2xvcjojRkZGO292ZXJmbG93OmF1dG99LmVsLXBpY2tlci1wYW5lbCBbc2xvdD1zaWRlYmFyXSsuZWwtcGlja2VyLXBhbmVsX19ib2R5LC5lbC1waWNrZXItcGFuZWxfX3NpZGViYXIrLmVsLXBpY2tlci1wYW5lbF9fYm9keXttYXJnaW4tbGVmdDoxMTBweH0uZWwtdGltZS1zcGlubmVyLmhhcy1zZWNvbmRzIC5lbC10aW1lLXNwaW5uZXJfX3dyYXBwZXJ7d2lkdGg6MzMuMyV9LmVsLXRpbWUtc3Bpbm5lcl9fd3JhcHBlcnttYXgtaGVpZ2h0OjE5MHB4O292ZXJmbG93OmF1dG87ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6NTAlO3ZlcnRpY2FsLWFsaWduOnRvcDtwb3NpdGlvbjpyZWxhdGl2ZX0uZWwtdGltZS1zcGlubmVyX193cmFwcGVyIC5lbC1zY3JvbGxiYXJfX3dyYXA6bm90KC5lbC1zY3JvbGxiYXJfX3dyYXAtLWhpZGRlbi1kZWZhdWx0KXtwYWRkaW5nLWJvdHRvbToxNXB4fS5lbC10aW1lLXNwaW5uZXJfX2lucHV0LmVsLWlucHV0IC5lbC1pbnB1dF9faW5uZXIsLmVsLXRpbWUtc3Bpbm5lcl9fbGlzdHtwYWRkaW5nOjA7dGV4dC1hbGlnbjpjZW50ZXJ9LmVsLXRpbWUtc3Bpbm5lcl9fd3JhcHBlci5pcy1hcnJvd3std2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3g7dGV4dC1hbGlnbjpjZW50ZXI7b3ZlcmZsb3c6aGlkZGVufS5lbC10aW1lLXNwaW5uZXJfX3dyYXBwZXIuaXMtYXJyb3cgLmVsLXRpbWUtc3Bpbm5lcl9fbGlzdHstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0zMnB4KTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMzJweCl9LmVsLXRpbWUtc3Bpbm5lcl9fd3JhcHBlci5pcy1hcnJvdyAuZWwtdGltZS1zcGlubmVyX19pdGVtOmhvdmVyOm5vdCguZGlzYWJsZWQpOm5vdCguYWN0aXZlKXtiYWNrZ3JvdW5kOiNGRkY7Y3Vyc29yOmRlZmF1bHR9LmVsLXRpbWUtc3Bpbm5lcl9fYXJyb3d7Zm9udC1zaXplOjEycHg7Y29sb3I6IzkwOTM5OTtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7d2lkdGg6MTAwJTt6LWluZGV4OjE7dGV4dC1hbGlnbjpjZW50ZXI7aGVpZ2h0OjMwcHg7bGluZS1oZWlnaHQ6MzBweDtjdXJzb3I6cG9pbnRlcn0uZWwtdGltZS1zcGlubmVyX19hcnJvdzpob3Zlcntjb2xvcjojNDA5RUZGfS5lbC10aW1lLXNwaW5uZXJfX2Fycm93LmVsLWljb24tYXJyb3ctdXB7dG9wOjEwcHh9LmVsLXRpbWUtc3Bpbm5lcl9fYXJyb3cuZWwtaWNvbi1hcnJvdy1kb3due2JvdHRvbToxMHB4fS5lbC10aW1lLXNwaW5uZXJfX2lucHV0LmVsLWlucHV0e3dpZHRoOjcwJX0uZWwtdGltZS1zcGlubmVyX19saXN0e21hcmdpbjowO2xpc3Qtc3R5bGU6bm9uZX0uZWwtdGltZS1zcGlubmVyX19saXN0OjphZnRlciwuZWwtdGltZS1zcGlubmVyX19saXN0OjpiZWZvcmV7Y29udGVudDonJztkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCU7aGVpZ2h0OjgwcHh9LmVsLXRpbWUtc3Bpbm5lcl9faXRlbXtoZWlnaHQ6MzJweDtsaW5lLWhlaWdodDozMnB4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiM2MDYyNjZ9LmVsLXRpbWUtc3Bpbm5lcl9faXRlbTpob3Zlcjpub3QoLmRpc2FibGVkKTpub3QoLmFjdGl2ZSl7YmFja2dyb3VuZDojRjVGN0ZBO2N1cnNvcjpwb2ludGVyfS5lbC10aW1lLXNwaW5uZXJfX2l0ZW0uYWN0aXZlOm5vdCguZGlzYWJsZWQpe2NvbG9yOiMzMDMxMzM7Zm9udC13ZWlnaHQ6NzAwfS5lbC10aW1lLXNwaW5uZXJfX2l0ZW0uZGlzYWJsZWR7Y29sb3I6I0MwQzRDQztjdXJzb3I6bm90LWFsbG93ZWR9LmVsLXRpbWUtcGFuZWx7bWFyZ2luOjVweCAwO2JvcmRlcjoxcHggc29saWQgI0U0RTdFRDtiYWNrZ3JvdW5kLWNvbG9yOiNGRkY7Ym94LXNoYWRvdzowIDJweCAxMnB4IDAgcmdiYSgwLDAsMCwuMSk7Ym9yZGVyLXJhZGl1czoycHg7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MTgwcHg7bGVmdDowO3otaW5kZXg6MTAwMDstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7LXdlYmtpdC1ib3gtc2l6aW5nOmNvbnRlbnQtYm94O2JveC1zaXppbmc6Y29udGVudC1ib3h9LmVsLXRpbWUtcGFuZWxfX2NvbnRlbnR7Zm9udC1zaXplOjA7cG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3c6aGlkZGVufS5lbC10aW1lLXBhbmVsX19jb250ZW50OjphZnRlciwuZWwtdGltZS1wYW5lbF9fY29udGVudDo6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7dG9wOjUwJTtwb3NpdGlvbjphYnNvbHV0ZTttYXJnaW4tdG9wOi0xNXB4O2hlaWdodDozMnB4O3otaW5kZXg6LTE7bGVmdDowO3JpZ2h0OjA7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmctdG9wOjZweDt0ZXh0LWFsaWduOmxlZnQ7Ym9yZGVyLXRvcDoxcHggc29saWQgI0U0RTdFRDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjRTRFN0VEfS5lbC10aW1lLXBhbmVsX19jb250ZW50OjphZnRlcntsZWZ0OjUwJTttYXJnaW4tbGVmdDoxMiU7bWFyZ2luLXJpZ2h0OjEyJX0uZWwtdGltZS1wYW5lbF9fY29udGVudDo6YmVmb3Jle3BhZGRpbmctbGVmdDo1MCU7bWFyZ2luLXJpZ2h0OjEyJTttYXJnaW4tbGVmdDoxMiV9LmVsLXRpbWUtcGFuZWxfX2NvbnRlbnQuaGFzLXNlY29uZHM6OmFmdGVye2xlZnQ6Y2FsYygxMDAlIC8gMyAqIDIpfS5lbC10aW1lLXBhbmVsX19jb250ZW50Lmhhcy1zZWNvbmRzOjpiZWZvcmV7cGFkZGluZy1sZWZ0OmNhbGMoMTAwJSAvIDMpfS5lbC10aW1lLXBhbmVsX19mb290ZXJ7Ym9yZGVyLXRvcDoxcHggc29saWQgI2U0ZTRlNDtwYWRkaW5nOjRweDtoZWlnaHQ6MzZweDtsaW5lLWhlaWdodDoyNXB4O3RleHQtYWxpZ246cmlnaHQ7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94fS5lbC10aW1lLXBhbmVsX19idG57Ym9yZGVyOm5vbmU7bGluZS1oZWlnaHQ6MjhweDtwYWRkaW5nOjAgNXB4O21hcmdpbjowIDVweDtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O291dGxpbmU6MDtmb250LXNpemU6MTJweDtjb2xvcjojMzAzMTMzfS5lbC10aW1lLXBhbmVsX19idG4uY29uZmlybXtmb250LXdlaWdodDo4MDA7Y29sb3I6IzQwOUVGRn0uZWwtdGltZS1yYW5nZS1waWNrZXJ7d2lkdGg6MzU0cHg7b3ZlcmZsb3c6dmlzaWJsZX0uZWwtdGltZS1yYW5nZS1waWNrZXJfX2NvbnRlbnR7cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7cGFkZGluZzoxMHB4fS5lbC10aW1lLXJhbmdlLXBpY2tlcl9fY2VsbHstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3g7bWFyZ2luOjA7cGFkZGluZzo0cHggN3B4IDdweDt3aWR0aDo1MCU7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmVsLXRpbWUtcmFuZ2UtcGlja2VyX19oZWFkZXJ7bWFyZ2luLWJvdHRvbTo1cHg7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC1zaXplOjE0cHh9LmVsLXRpbWUtcmFuZ2UtcGlja2VyX19ib2R5e2JvcmRlci1yYWRpdXM6MnB4O2JvcmRlcjoxcHggc29saWQgI0U0RTdFRH0uZWwtcG9wb3Zlcntwb3NpdGlvbjphYnNvbHV0ZTtiYWNrZ3JvdW5kOiNGRkY7bWluLXdpZHRoOjE1MHB4O2JvcmRlci1yYWRpdXM6NHB4O2JvcmRlcjoxcHggc29saWQgI0VCRUVGNTtwYWRkaW5nOjEycHg7ei1pbmRleDoyMDAwO2NvbG9yOiM2MDYyNjY7bGluZS1oZWlnaHQ6MS40O3RleHQtYWxpZ246anVzdGlmeTtmb250LXNpemU6MTRweDtib3gtc2hhZG93OjAgMnB4IDEycHggMCByZ2JhKDAsMCwwLC4xKTt3b3JkLWJyZWFrOmJyZWFrLWFsbH0uZWwtY2FyZC5pcy1hbHdheXMtc2hhZG93LC5lbC1jYXJkLmlzLWhvdmVyLXNoYWRvdzpmb2N1cywuZWwtY2FyZC5pcy1ob3Zlci1zaGFkb3c6aG92ZXIsLmVsLWNhc2NhZGVyX19kcm9wZG93biwuZWwtY29sb3ItcGlja2VyX19wYW5lbCwuZWwtbWVzc2FnZS1ib3gsLmVsLW5vdGlmaWNhdGlvbnstd2Via2l0LWJveC1zaGFkb3c6MCAycHggMTJweCAwIHJnYmEoMCwwLDAsLjEpfS5lbC1wb3BvdmVyLS1wbGFpbntwYWRkaW5nOjE4cHggMjBweH0uZWwtcG9wb3Zlcl9fdGl0bGV7Y29sb3I6IzMwMzEzMztmb250LXNpemU6MTZweDtsaW5lLWhlaWdodDoxO21hcmdpbi1ib3R0b206MTJweH0uZWwtcG9wb3Zlcjpmb2N1cywuZWwtcG9wb3Zlcjpmb2N1czphY3RpdmUsLmVsLXBvcG92ZXJfX3JlZmVyZW5jZTpmb2N1czpob3ZlciwuZWwtcG9wb3Zlcl9fcmVmZXJlbmNlOmZvY3VzOm5vdCguZm9jdXNpbmcpe291dGxpbmUtd2lkdGg6MH0udi1tb2RhbC1lbnRlcnstd2Via2l0LWFuaW1hdGlvbjp2LW1vZGFsLWluIC4ycyBlYXNlO2FuaW1hdGlvbjp2LW1vZGFsLWluIC4ycyBlYXNlfS52LW1vZGFsLWxlYXZley13ZWJraXQtYW5pbWF0aW9uOnYtbW9kYWwtb3V0IC4ycyBlYXNlIGZvcndhcmRzO2FuaW1hdGlvbjp2LW1vZGFsLW91dCAuMnMgZWFzZSBmb3J3YXJkc31Aa2V5ZnJhbWVzIHYtbW9kYWwtaW57MCV7b3BhY2l0eTowfX1Aa2V5ZnJhbWVzIHYtbW9kYWwtb3V0ezEwMCV7b3BhY2l0eTowfX0udi1tb2RhbHtwb3NpdGlvbjpmaXhlZDtsZWZ0OjA7dG9wOjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtvcGFjaXR5Oi41O2JhY2tncm91bmQ6IzAwMH0uZWwtcG9wdXAtcGFyZW50LS1oaWRkZW57b3ZlcmZsb3c6aGlkZGVufS5lbC1tZXNzYWdlLWJveHtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDo0MjBweDtwYWRkaW5nLWJvdHRvbToxMHB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtiYWNrZ3JvdW5kLWNvbG9yOiNGRkY7Ym9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyOjFweCBzb2xpZCAjRUJFRUY1O2ZvbnQtc2l6ZToxOHB4O2JveC1zaGFkb3c6MCAycHggMTJweCAwIHJnYmEoMCwwLDAsLjEpO3RleHQtYWxpZ246bGVmdDtvdmVyZmxvdzpoaWRkZW47LXdlYmtpdC1iYWNrZmFjZS12aXNpYmlsaXR5OmhpZGRlbjtiYWNrZmFjZS12aXNpYmlsaXR5OmhpZGRlbn0uZWwtbWVzc2FnZS1ib3hfX3dyYXBwZXJ7cG9zaXRpb246Zml4ZWQ7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3JpZ2h0OjA7dGV4dC1hbGlnbjpjZW50ZXJ9LmVsLW1lc3NhZ2UtYm94X193cmFwcGVyOjphZnRlcntjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxMDAlO3dpZHRoOjA7dmVydGljYWwtYWxpZ246bWlkZGxlfS5lbC1tZXNzYWdlLWJveF9faGVhZGVye3Bvc2l0aW9uOnJlbGF0aXZlO3BhZGRpbmc6MTVweCAxNXB4IDEwcHh9LmVsLW1lc3NhZ2UtYm94X190aXRsZXtwYWRkaW5nLWxlZnQ6MDttYXJnaW4tYm90dG9tOjA7Zm9udC1zaXplOjE4cHg7bGluZS1oZWlnaHQ6MTtjb2xvcjojMzAzMTMzfS5lbC1tZXNzYWdlLWJveF9faGVhZGVyYnRue3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxNXB4O3JpZ2h0OjE1cHg7cGFkZGluZzowO2JvcmRlcjpub25lO291dGxpbmU6MDtiYWNrZ3JvdW5kOjAgMDtmb250LXNpemU6MTZweDtjdXJzb3I6cG9pbnRlcn0uZWwtZm9ybS1pdGVtLmlzLWVycm9yIC5lbC1pbnB1dF9faW5uZXIsLmVsLWZvcm0taXRlbS5pcy1lcnJvciAuZWwtaW5wdXRfX2lubmVyOmZvY3VzLC5lbC1mb3JtLWl0ZW0uaXMtZXJyb3IgLmVsLXRleHRhcmVhX19pbm5lciwuZWwtZm9ybS1pdGVtLmlzLWVycm9yIC5lbC10ZXh0YXJlYV9faW5uZXI6Zm9jdXMsLmVsLW1lc3NhZ2UtYm94X19pbnB1dCBpbnB1dC5pbnZhbGlkLC5lbC1tZXNzYWdlLWJveF9faW5wdXQgaW5wdXQuaW52YWxpZDpmb2N1c3tib3JkZXItY29sb3I6I0Y1NkM2Q30uZWwtbWVzc2FnZS1ib3hfX2hlYWRlcmJ0biAuZWwtbWVzc2FnZS1ib3hfX2Nsb3Nle2NvbG9yOiM5MDkzOTl9LmVsLW1lc3NhZ2UtYm94X19oZWFkZXJidG46Zm9jdXMgLmVsLW1lc3NhZ2UtYm94X19jbG9zZSwuZWwtbWVzc2FnZS1ib3hfX2hlYWRlcmJ0bjpob3ZlciAuZWwtbWVzc2FnZS1ib3hfX2Nsb3Nle2NvbG9yOiM0MDlFRkZ9LmVsLW1lc3NhZ2UtYm94X19jb250ZW50e3BhZGRpbmc6MTBweCAxNXB4O2NvbG9yOiM2MDYyNjY7Zm9udC1zaXplOjE0cHh9LmVsLW1lc3NhZ2UtYm94X19jb250YWluZXJ7cG9zaXRpb246cmVsYXRpdmV9LmVsLW1lc3NhZ2UtYm94X19pbnB1dHtwYWRkaW5nLXRvcDoxNXB4fS5lbC1tZXNzYWdlLWJveF9fc3RhdHVze3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKTtmb250LXNpemU6MjRweCFpbXBvcnRhbnR9LmVsLW1lc3NhZ2UtYm94X19zdGF0dXM6OmJlZm9yZXtwYWRkaW5nLWxlZnQ6MXB4fS5lbC1tZXNzYWdlLWJveF9fc3RhdHVzKy5lbC1tZXNzYWdlLWJveF9fbWVzc2FnZXtwYWRkaW5nLWxlZnQ6MzZweDtwYWRkaW5nLXJpZ2h0OjEycHh9LmVsLW1lc3NhZ2UtYm94X19zdGF0dXMuZWwtaWNvbi1zdWNjZXNze2NvbG9yOiM2N0MyM0F9LmVsLW1lc3NhZ2UtYm94X19zdGF0dXMuZWwtaWNvbi1pbmZve2NvbG9yOiM5MDkzOTl9LmVsLW1lc3NhZ2UtYm94X19zdGF0dXMuZWwtaWNvbi13YXJuaW5ne2NvbG9yOiNFNkEyM0N9LmVsLW1lc3NhZ2UtYm94X19zdGF0dXMuZWwtaWNvbi1lcnJvcntjb2xvcjojRjU2QzZDfS5lbC1tZXNzYWdlLWJveF9fbWVzc2FnZXttYXJnaW46MH0uZWwtbWVzc2FnZS1ib3hfX21lc3NhZ2UgcHttYXJnaW46MDtsaW5lLWhlaWdodDoyNHB4fS5lbC1tZXNzYWdlLWJveF9fZXJyb3Jtc2d7Y29sb3I6I0Y1NkM2Qztmb250LXNpemU6MTJweDttaW4taGVpZ2h0OjE4cHg7bWFyZ2luLXRvcDoycHh9LmVsLW1lc3NhZ2UtYm94X19idG5ze3BhZGRpbmc6NXB4IDE1cHggMDt0ZXh0LWFsaWduOnJpZ2h0fS5lbC1tZXNzYWdlLWJveF9fYnRucyBidXR0b246bnRoLWNoaWxkKDIpe21hcmdpbi1sZWZ0OjEwcHh9LmVsLW1lc3NhZ2UtYm94X19idG5zLXJldmVyc2V7LXdlYmtpdC1ib3gtb3JpZW50Omhvcml6b250YWw7LXdlYmtpdC1ib3gtZGlyZWN0aW9uOnJldmVyc2U7LW1zLWZsZXgtZGlyZWN0aW9uOnJvdy1yZXZlcnNlO2ZsZXgtZGlyZWN0aW9uOnJvdy1yZXZlcnNlfS5lbC1tZXNzYWdlLWJveC0tY2VudGVye3BhZGRpbmctYm90dG9tOjMwcHh9LmVsLW1lc3NhZ2UtYm94LS1jZW50ZXIgLmVsLW1lc3NhZ2UtYm94X19oZWFkZXJ7cGFkZGluZy10b3A6MzBweH0uZWwtbWVzc2FnZS1ib3gtLWNlbnRlciAuZWwtbWVzc2FnZS1ib3hfX3RpdGxle3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6LXdlYmtpdC1ib3g7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7LXdlYmtpdC1ib3gtYWxpZ246Y2VudGVyOy1tcy1mbGV4LWFsaWduOmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7LXdlYmtpdC1ib3gtcGFjazpjZW50ZXI7LW1zLWZsZXgtcGFjazpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn0uZWwtbWVzc2FnZS1ib3gtLWNlbnRlciAuZWwtbWVzc2FnZS1ib3hfX3N0YXR1c3twb3NpdGlvbjpyZWxhdGl2ZTt0b3A6YXV0bztwYWRkaW5nLXJpZ2h0OjVweDt0ZXh0LWFsaWduOmNlbnRlcjstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xcHgpO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xcHgpfS5lbC1tZXNzYWdlLWJveC0tY2VudGVyIC5lbC1tZXNzYWdlLWJveF9fbWVzc2FnZXttYXJnaW4tbGVmdDowfS5lbC1tZXNzYWdlLWJveC0tY2VudGVyIC5lbC1tZXNzYWdlLWJveF9fYnRucywuZWwtbWVzc2FnZS1ib3gtLWNlbnRlciAuZWwtbWVzc2FnZS1ib3hfX2NvbnRlbnR7dGV4dC1hbGlnbjpjZW50ZXJ9LmVsLW1lc3NhZ2UtYm94LS1jZW50ZXIgLmVsLW1lc3NhZ2UtYm94X19jb250ZW50e3BhZGRpbmctbGVmdDoyN3B4O3BhZGRpbmctcmlnaHQ6MjdweH0ubXNnYm94LWZhZGUtZW50ZXItYWN0aXZley13ZWJraXQtYW5pbWF0aW9uOm1zZ2JveC1mYWRlLWluIC4zczthbmltYXRpb246bXNnYm94LWZhZGUtaW4gLjNzfS5tc2dib3gtZmFkZS1sZWF2ZS1hY3RpdmV7LXdlYmtpdC1hbmltYXRpb246bXNnYm94LWZhZGUtb3V0IC4zczthbmltYXRpb246bXNnYm94LWZhZGUtb3V0IC4zc31ALXdlYmtpdC1rZXlmcmFtZXMgbXNnYm94LWZhZGUtaW57MCV7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwtMjBweCwwKTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwtMjBweCwwKTtvcGFjaXR5OjB9MTAwJXstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLDAsMCk7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsMCwwKTtvcGFjaXR5OjF9fUBrZXlmcmFtZXMgbXNnYm94LWZhZGUtaW57MCV7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwtMjBweCwwKTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwtMjBweCwwKTtvcGFjaXR5OjB9MTAwJXstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLDAsMCk7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsMCwwKTtvcGFjaXR5OjF9fUAtd2Via2l0LWtleWZyYW1lcyBtc2dib3gtZmFkZS1vdXR7MCV7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwwLDApO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLDAsMCk7b3BhY2l0eToxfTEwMCV7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwtMjBweCwwKTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwtMjBweCwwKTtvcGFjaXR5OjB9fUBrZXlmcmFtZXMgbXNnYm94LWZhZGUtb3V0ezAley13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsMCwwKTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwwLDApO29wYWNpdHk6MX0xMDAley13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsLTIwcHgsMCk7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsLTIwcHgsMCk7b3BhY2l0eTowfX0uZWwtYnJlYWRjcnVtYntmb250LXNpemU6MTRweDtsaW5lLWhlaWdodDoxfS5lbC1icmVhZGNydW1iOjphZnRlciwuZWwtYnJlYWRjcnVtYjo6YmVmb3Jle2Rpc3BsYXk6dGFibGU7Y29udGVudDpcXFwiXFxcIn0uZWwtYnJlYWRjcnVtYjo6YWZ0ZXJ7Y2xlYXI6Ym90aH0uZWwtYnJlYWRjcnVtYl9fc2VwYXJhdG9ye21hcmdpbjowIDlweDtmb250LXdlaWdodDo3MDA7Y29sb3I6I0MwQzRDQ30uZWwtYnJlYWRjcnVtYl9fc2VwYXJhdG9yW2NsYXNzKj1pY29uXXttYXJnaW46MCA2cHg7Zm9udC13ZWlnaHQ6NDAwfS5lbC1icmVhZGNydW1iX19pdGVte2Zsb2F0OmxlZnR9LmVsLWJyZWFkY3J1bWJfX2lubmVye2NvbG9yOiM2MDYyNjZ9LmVsLWJyZWFkY3J1bWJfX2lubmVyIGEsLmVsLWJyZWFkY3J1bWJfX2lubmVyLmlzLWxpbmt7Zm9udC13ZWlnaHQ6NzAwO3RleHQtZGVjb3JhdGlvbjpub25lOy13ZWJraXQtdHJhbnNpdGlvbjpjb2xvciAuMnMgY3ViaWMtYmV6aWVyKC42NDUsLjA0NSwuMzU1LDEpO3RyYW5zaXRpb246Y29sb3IgLjJzIGN1YmljLWJlemllciguNjQ1LC4wNDUsLjM1NSwxKTtjb2xvcjojMzAzMTMzfS5lbC1icmVhZGNydW1iX19pbm5lciBhOmhvdmVyLC5lbC1icmVhZGNydW1iX19pbm5lci5pcy1saW5rOmhvdmVye2NvbG9yOiM0MDlFRkY7Y3Vyc29yOnBvaW50ZXJ9LmVsLWJyZWFkY3J1bWJfX2l0ZW06bGFzdC1jaGlsZCAuZWwtYnJlYWRjcnVtYl9faW5uZXIsLmVsLWJyZWFkY3J1bWJfX2l0ZW06bGFzdC1jaGlsZCAuZWwtYnJlYWRjcnVtYl9faW5uZXIgYSwuZWwtYnJlYWRjcnVtYl9faXRlbTpsYXN0LWNoaWxkIC5lbC1icmVhZGNydW1iX19pbm5lciBhOmhvdmVyLC5lbC1icmVhZGNydW1iX19pdGVtOmxhc3QtY2hpbGQgLmVsLWJyZWFkY3J1bWJfX2lubmVyOmhvdmVye2ZvbnQtd2VpZ2h0OjQwMDtjb2xvcjojNjA2MjY2O2N1cnNvcjp0ZXh0fS5lbC1mb3JtLS1sYWJlbC1sZWZ0IC5lbC1mb3JtLWl0ZW1fX2xhYmVse3RleHQtYWxpZ246bGVmdH0uZWwtZm9ybS0tbGFiZWwtdG9wIC5lbC1mb3JtLWl0ZW1fX2xhYmVse2Zsb2F0Om5vbmU7ZGlzcGxheTppbmxpbmUtYmxvY2s7dGV4dC1hbGlnbjpsZWZ0O3BhZGRpbmc6MCAwIDEwcHh9LmVsLWZvcm0tLWlubGluZSAuZWwtZm9ybS1pdGVte2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1yaWdodDoxMHB4O3ZlcnRpY2FsLWFsaWduOnRvcH0uZWwtZm9ybS0taW5saW5lIC5lbC1mb3JtLWl0ZW1fX2xhYmVse2Zsb2F0Om5vbmU7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmVsLWZvcm0tLWlubGluZSAuZWwtZm9ybS1pdGVtX19jb250ZW50e2Rpc3BsYXk6aW5saW5lLWJsb2NrO3ZlcnRpY2FsLWFsaWduOnRvcH0uZWwtZm9ybS0taW5saW5lLmVsLWZvcm0tLWxhYmVsLXRvcCAuZWwtZm9ybS1pdGVtX19jb250ZW50e2Rpc3BsYXk6YmxvY2t9LmVsLWZvcm0taXRlbXttYXJnaW4tYm90dG9tOjIycHh9LmVsLWZvcm0taXRlbTo6YWZ0ZXIsLmVsLWZvcm0taXRlbTo6YmVmb3Jle2Rpc3BsYXk6dGFibGU7Y29udGVudDpcXFwiXFxcIn0uZWwtZm9ybS1pdGVtOjphZnRlcntjbGVhcjpib3RofS5lbC1mb3JtLWl0ZW0gLmVsLWZvcm0taXRlbXttYXJnaW4tYm90dG9tOjB9LmVsLWZvcm0taXRlbS0tbWluaS5lbC1mb3JtLWl0ZW0sLmVsLWZvcm0taXRlbS0tc21hbGwuZWwtZm9ybS1pdGVte21hcmdpbi1ib3R0b206MThweH0uZWwtZm9ybS1pdGVtIC5lbC1pbnB1dF9fdmFsaWRhdGVJY29ue2Rpc3BsYXk6bm9uZX0uZWwtZm9ybS1pdGVtLS1tZWRpdW0gLmVsLWZvcm0taXRlbV9fY29udGVudCwuZWwtZm9ybS1pdGVtLS1tZWRpdW0gLmVsLWZvcm0taXRlbV9fbGFiZWx7bGluZS1oZWlnaHQ6MzZweH0uZWwtZm9ybS1pdGVtLS1zbWFsbCAuZWwtZm9ybS1pdGVtX19jb250ZW50LC5lbC1mb3JtLWl0ZW0tLXNtYWxsIC5lbC1mb3JtLWl0ZW1fX2xhYmVse2xpbmUtaGVpZ2h0OjMycHh9LmVsLWZvcm0taXRlbS0tc21hbGwgLmVsLWZvcm0taXRlbV9fZXJyb3J7cGFkZGluZy10b3A6MnB4fS5lbC1mb3JtLWl0ZW0tLW1pbmkgLmVsLWZvcm0taXRlbV9fY29udGVudCwuZWwtZm9ybS1pdGVtLS1taW5pIC5lbC1mb3JtLWl0ZW1fX2xhYmVse2xpbmUtaGVpZ2h0OjI4cHh9LmVsLWZvcm0taXRlbS0tbWluaSAuZWwtZm9ybS1pdGVtX19lcnJvcntwYWRkaW5nLXRvcDoxcHh9LmVsLWZvcm0taXRlbV9fbGFiZWwtd3JhcHtmbG9hdDpsZWZ0fS5lbC1mb3JtLWl0ZW1fX2xhYmVsLXdyYXAgLmVsLWZvcm0taXRlbV9fbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7ZmxvYXQ6bm9uZX0uZWwtZm9ybS1pdGVtX19sYWJlbHt0ZXh0LWFsaWduOnJpZ2h0O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtmbG9hdDpsZWZ0O2ZvbnQtc2l6ZToxNHB4O2NvbG9yOiM2MDYyNjY7bGluZS1oZWlnaHQ6NDBweDtwYWRkaW5nOjAgMTJweCAwIDA7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94fS5lbC1mb3JtLWl0ZW1fX2NvbnRlbnR7bGluZS1oZWlnaHQ6NDBweDtwb3NpdGlvbjpyZWxhdGl2ZTtmb250LXNpemU6MTRweH0uZWwtZm9ybS1pdGVtX19jb250ZW50OjphZnRlciwuZWwtZm9ybS1pdGVtX19jb250ZW50OjpiZWZvcmV7ZGlzcGxheTp0YWJsZTtjb250ZW50OlxcXCJcXFwifS5lbC1mb3JtLWl0ZW1fX2NvbnRlbnQ6OmFmdGVye2NsZWFyOmJvdGh9LmVsLWZvcm0taXRlbV9fY29udGVudCAuZWwtaW5wdXQtZ3JvdXB7dmVydGljYWwtYWxpZ246dG9wfS5lbC1mb3JtLWl0ZW1fX2Vycm9ye2NvbG9yOiNGNTZDNkM7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MTtwYWRkaW5nLXRvcDo0cHg7cG9zaXRpb246YWJzb2x1dGU7dG9wOjEwMCU7bGVmdDowfS5lbC1mb3JtLWl0ZW1fX2Vycm9yLS1pbmxpbmV7cG9zaXRpb246cmVsYXRpdmU7dG9wOmF1dG87bGVmdDphdXRvO2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1sZWZ0OjEwcHh9LmVsLWZvcm0taXRlbS5pcy1yZXF1aXJlZDpub3QoLmlzLW5vLWFzdGVyaXNrKSAuZWwtZm9ybS1pdGVtX19sYWJlbC13cmFwPi5lbC1mb3JtLWl0ZW1fX2xhYmVsOmJlZm9yZSwuZWwtZm9ybS1pdGVtLmlzLXJlcXVpcmVkOm5vdCguaXMtbm8tYXN0ZXJpc2spPi5lbC1mb3JtLWl0ZW1fX2xhYmVsOmJlZm9yZXtjb250ZW50OicqJztjb2xvcjojRjU2QzZDO21hcmdpbi1yaWdodDo0cHh9LmVsLWZvcm0taXRlbS5pcy1lcnJvciAuZWwtaW5wdXQtZ3JvdXBfX2FwcGVuZCAuZWwtaW5wdXRfX2lubmVyLC5lbC1mb3JtLWl0ZW0uaXMtZXJyb3IgLmVsLWlucHV0LWdyb3VwX19wcmVwZW5kIC5lbC1pbnB1dF9faW5uZXJ7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50fS5lbC1mb3JtLWl0ZW0uaXMtZXJyb3IgLmVsLWlucHV0X192YWxpZGF0ZUljb257Y29sb3I6I0Y1NkM2Q30uZWwtZm9ybS1pdGVtLS1mZWVkYmFjayAuZWwtaW5wdXRfX3ZhbGlkYXRlSWNvbntkaXNwbGF5OmlubGluZS1ibG9ja30uZWwtdGFic19faGVhZGVye3BhZGRpbmc6MDtwb3NpdGlvbjpyZWxhdGl2ZTttYXJnaW46MCAwIDE1cHh9LmVsLXRhYnNfX2FjdGl2ZS1iYXJ7cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOjA7bGVmdDowO2hlaWdodDoycHg7YmFja2dyb3VuZC1jb2xvcjojNDA5RUZGO3otaW5kZXg6MTstd2Via2l0LXRyYW5zaXRpb246LXdlYmtpdC10cmFuc2Zvcm0gLjNzIGN1YmljLWJlemllciguNjQ1LC4wNDUsLjM1NSwxKTt0cmFuc2l0aW9uOi13ZWJraXQtdHJhbnNmb3JtIC4zcyBjdWJpYy1iZXppZXIoLjY0NSwuMDQ1LC4zNTUsMSk7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjNzIGN1YmljLWJlemllciguNjQ1LC4wNDUsLjM1NSwxKTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuM3MgY3ViaWMtYmV6aWVyKC42NDUsLjA0NSwuMzU1LDEpLC13ZWJraXQtdHJhbnNmb3JtIC4zcyBjdWJpYy1iZXppZXIoLjY0NSwuMDQ1LC4zNTUsMSk7bGlzdC1zdHlsZTpub25lfS5lbC10YWJzX19uZXctdGFie2Zsb2F0OnJpZ2h0O2JvcmRlcjoxcHggc29saWQgI2QzZGNlNjtoZWlnaHQ6MThweDt3aWR0aDoxOHB4O2xpbmUtaGVpZ2h0OjE4cHg7bWFyZ2luOjEycHggMCA5cHggMTBweDtib3JkZXItcmFkaXVzOjNweDt0ZXh0LWFsaWduOmNlbnRlcjtmb250LXNpemU6MTJweDtjb2xvcjojZDNkY2U2O2N1cnNvcjpwb2ludGVyOy13ZWJraXQtdHJhbnNpdGlvbjphbGwgLjE1czt0cmFuc2l0aW9uOmFsbCAuMTVzfS5lbC10YWJzX19uZXctdGFiIC5lbC1pY29uLXBsdXN7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoLjgsLjgpO3RyYW5zZm9ybTpzY2FsZSguOCwuOCl9LmVsLXRhYnNfX25ldy10YWI6aG92ZXJ7Y29sb3I6IzQwOUVGRn0uZWwtdGFic19fbmF2LXdyYXB7b3ZlcmZsb3c6aGlkZGVuO21hcmdpbi1ib3R0b206LTFweDtwb3NpdGlvbjpyZWxhdGl2ZX0uZWwtdGFic19fbmF2LXdyYXA6OmFmdGVye2NvbnRlbnQ6XFxcIlxcXCI7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO2JvdHRvbTowO3dpZHRoOjEwMCU7aGVpZ2h0OjJweDtiYWNrZ3JvdW5kLWNvbG9yOiNFNEU3RUQ7ei1pbmRleDoxfS5lbC10YWJzX19uYXYtd3JhcC5pcy1zY3JvbGxhYmxle3BhZGRpbmc6MCAyMHB4Oy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveH0uZWwtdGFic19fbmF2LXNjcm9sbHtvdmVyZmxvdzpoaWRkZW59LmVsLXRhYnNfX25hdi1uZXh0LC5lbC10YWJzX19uYXYtcHJldntwb3NpdGlvbjphYnNvbHV0ZTtjdXJzb3I6cG9pbnRlcjtsaW5lLWhlaWdodDo0NHB4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiM5MDkzOTl9LmVsLXRhYnNfX25hdi1uZXh0e3JpZ2h0OjB9LmVsLXRhYnNfX25hdi1wcmV2e2xlZnQ6MH0uZWwtdGFic19fbmF2e3doaXRlLXNwYWNlOm5vd3JhcDtwb3NpdGlvbjpyZWxhdGl2ZTstd2Via2l0LXRyYW5zaXRpb246LXdlYmtpdC10cmFuc2Zvcm0gLjNzO3RyYW5zaXRpb246LXdlYmtpdC10cmFuc2Zvcm0gLjNzO3RyYW5zaXRpb246dHJhbnNmb3JtIC4zczt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuM3MsLXdlYmtpdC10cmFuc2Zvcm0gLjNzO2Zsb2F0OmxlZnQ7ei1pbmRleDoyfS5lbC10YWJzX19uYXYuaXMtc3RyZXRjaHttaW4td2lkdGg6MTAwJTtkaXNwbGF5Oi13ZWJraXQtYm94O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4fS5lbC10YWJzX19uYXYuaXMtc3RyZXRjaD4qey13ZWJraXQtYm94LWZsZXg6MTstbXMtZmxleDoxO2ZsZXg6MTt0ZXh0LWFsaWduOmNlbnRlcn0uZWwtdGFic19faXRlbXtwYWRkaW5nOjAgMjBweDtoZWlnaHQ6NDBweDstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3g7bGluZS1oZWlnaHQ6NDBweDtkaXNwbGF5OmlubGluZS1ibG9jaztsaXN0LXN0eWxlOm5vbmU7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwO2NvbG9yOiMzMDMxMzM7cG9zaXRpb246cmVsYXRpdmV9LmVsLXRhYnNfX2l0ZW06Zm9jdXMsLmVsLXRhYnNfX2l0ZW06Zm9jdXM6YWN0aXZle291dGxpbmU6MH0uZWwtdGFic19faXRlbTpmb2N1cy5pcy1hY3RpdmUuaXMtZm9jdXM6bm90KDphY3RpdmUpey13ZWJraXQtYm94LXNoYWRvdzowIDAgMnB4IDJweCAjNDA5RUZGIGluc2V0O2JveC1zaGFkb3c6MCAwIDJweCAycHggIzQwOUVGRiBpbnNldDtib3JkZXItcmFkaXVzOjNweH0uZWwtdGFic19faXRlbSAuZWwtaWNvbi1jbG9zZXtib3JkZXItcmFkaXVzOjUwJTt0ZXh0LWFsaWduOmNlbnRlcjstd2Via2l0LXRyYW5zaXRpb246YWxsIC4zcyBjdWJpYy1iZXppZXIoLjY0NSwuMDQ1LC4zNTUsMSk7dHJhbnNpdGlvbjphbGwgLjNzIGN1YmljLWJlemllciguNjQ1LC4wNDUsLjM1NSwxKTttYXJnaW4tbGVmdDo1cHh9LmVsLXRhYnNfX2l0ZW0gLmVsLWljb24tY2xvc2U6YmVmb3Jley13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKC45KTt0cmFuc2Zvcm06c2NhbGUoLjkpO2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5lbC10YWJzLS1jYXJkPi5lbC10YWJzX19oZWFkZXIgLmVsLXRhYnNfX2FjdGl2ZS1iYXIsLmVsLXRhYnMtLWxlZnQuZWwtdGFicy0tY2FyZCAuZWwtdGFic19fYWN0aXZlLWJhci5pcy1sZWZ0LC5lbC10YWJzLS1yaWdodC5lbC10YWJzLS1jYXJkIC5lbC10YWJzX19hY3RpdmUtYmFyLmlzLXJpZ2h0e2Rpc3BsYXk6bm9uZX0uZWwtdGFic19faXRlbSAuZWwtaWNvbi1jbG9zZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNDMEM0Q0M7Y29sb3I6I0ZGRn0uZWwtdGFic19faXRlbS5pcy1hY3RpdmV7Y29sb3I6IzQwOUVGRn0uZWwtdGFic19faXRlbTpob3Zlcntjb2xvcjojNDA5RUZGO2N1cnNvcjpwb2ludGVyfS5lbC10YWJzX19pdGVtLmlzLWRpc2FibGVke2NvbG9yOiNDMEM0Q0M7Y3Vyc29yOmRlZmF1bHR9LmVsLXRhYnNfX2NvbnRlbnR7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlfS5lbC10YWJzLS1jYXJkPi5lbC10YWJzX19oZWFkZXJ7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI0U0RTdFRH0uZWwtdGFicy0tY2FyZD4uZWwtdGFic19faGVhZGVyIC5lbC10YWJzX19uYXYtd3JhcDo6YWZ0ZXJ7Y29udGVudDpub25lfS5lbC10YWJzLS1jYXJkPi5lbC10YWJzX19oZWFkZXIgLmVsLXRhYnNfX25hdntib3JkZXI6MXB4IHNvbGlkICNFNEU3RUQ7Ym9yZGVyLWJvdHRvbTpub25lO2JvcmRlci1yYWRpdXM6NHB4IDRweCAwIDA7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94fS5lbC10YWJzLS1jYXJkPi5lbC10YWJzX19oZWFkZXIgLmVsLXRhYnNfX2l0ZW0gLmVsLWljb24tY2xvc2V7cG9zaXRpb246cmVsYXRpdmU7Zm9udC1zaXplOjEycHg7d2lkdGg6MDtoZWlnaHQ6MTRweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7bGluZS1oZWlnaHQ6MTVweDtvdmVyZmxvdzpoaWRkZW47dG9wOi0xcHg7cmlnaHQ6LTJweDstd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46MTAwJSA1MCU7dHJhbnNmb3JtLW9yaWdpbjoxMDAlIDUwJX0uZWwtdGFicy0tY2FyZD4uZWwtdGFic19faGVhZGVyIC5lbC10YWJzX19pdGVte2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjRTRFN0VEOy13ZWJraXQtdHJhbnNpdGlvbjpjb2xvciAuM3MgY3ViaWMtYmV6aWVyKC42NDUsLjA0NSwuMzU1LDEpLHBhZGRpbmcgLjNzIGN1YmljLWJlemllciguNjQ1LC4wNDUsLjM1NSwxKTt0cmFuc2l0aW9uOmNvbG9yIC4zcyBjdWJpYy1iZXppZXIoLjY0NSwuMDQ1LC4zNTUsMSkscGFkZGluZyAuM3MgY3ViaWMtYmV6aWVyKC42NDUsLjA0NSwuMzU1LDEpfS5lbC10YWJzLS1jYXJkPi5lbC10YWJzX19oZWFkZXIgLmVsLXRhYnNfX2l0ZW06Zmlyc3QtY2hpbGR7Ym9yZGVyLWxlZnQ6bm9uZX0uZWwtdGFicy0tY2FyZD4uZWwtdGFic19faGVhZGVyIC5lbC10YWJzX19pdGVtLmlzLWNsb3NhYmxlOmhvdmVye3BhZGRpbmctbGVmdDoxM3B4O3BhZGRpbmctcmlnaHQ6MTNweH0uZWwtdGFicy0tY2FyZD4uZWwtdGFic19faGVhZGVyIC5lbC10YWJzX19pdGVtLmlzLWNsb3NhYmxlOmhvdmVyIC5lbC1pY29uLWNsb3Nle3dpZHRoOjE0cHh9LmVsLXRhYnMtLWNhcmQ+LmVsLXRhYnNfX2hlYWRlciAuZWwtdGFic19faXRlbS5pcy1hY3RpdmV7Ym9yZGVyLWJvdHRvbS1jb2xvcjojRkZGfS5lbC10YWJzLS1jYXJkPi5lbC10YWJzX19oZWFkZXIgLmVsLXRhYnNfX2l0ZW0uaXMtYWN0aXZlLmlzLWNsb3NhYmxle3BhZGRpbmctbGVmdDoyMHB4O3BhZGRpbmctcmlnaHQ6MjBweH0uZWwtdGFicy0tY2FyZD4uZWwtdGFic19faGVhZGVyIC5lbC10YWJzX19pdGVtLmlzLWFjdGl2ZS5pcy1jbG9zYWJsZSAuZWwtaWNvbi1jbG9zZXt3aWR0aDoxNHB4fS5lbC10YWJzLS1ib3JkZXItY2FyZHtiYWNrZ3JvdW5kOiNGRkY7Ym9yZGVyOjFweCBzb2xpZCAjRENERkU2Oy13ZWJraXQtYm94LXNoYWRvdzowIDJweCA0cHggMCByZ2JhKDAsMCwwLC4xMiksMCAwIDZweCAwIHJnYmEoMCwwLDAsLjA0KTtib3gtc2hhZG93OjAgMnB4IDRweCAwIHJnYmEoMCwwLDAsLjEyKSwwIDAgNnB4IDAgcmdiYSgwLDAsMCwuMDQpfS5lbC10YWJzLS1ib3JkZXItY2FyZD4uZWwtdGFic19fY29udGVudHtwYWRkaW5nOjE1cHh9LmVsLXRhYnMtLWJvcmRlci1jYXJkPi5lbC10YWJzX19oZWFkZXJ7YmFja2dyb3VuZC1jb2xvcjojRjVGN0ZBO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNFNEU3RUQ7bWFyZ2luOjB9LmVsLXRhYnMtLWJvcmRlci1jYXJkPi5lbC10YWJzX19oZWFkZXIgLmVsLXRhYnNfX25hdi13cmFwOjphZnRlcntjb250ZW50Om5vbmV9LmVsLXRhYnMtLWJvcmRlci1jYXJkPi5lbC10YWJzX19oZWFkZXIgLmVsLXRhYnNfX2l0ZW17LXdlYmtpdC10cmFuc2l0aW9uOmFsbCAuM3MgY3ViaWMtYmV6aWVyKC42NDUsLjA0NSwuMzU1LDEpO3RyYW5zaXRpb246YWxsIC4zcyBjdWJpYy1iZXppZXIoLjY0NSwuMDQ1LC4zNTUsMSk7Ym9yZGVyOjFweCBzb2xpZCB0cmFuc3BhcmVudDttYXJnaW4tdG9wOi0xcHg7Y29sb3I6IzkwOTM5OX0uZWwtdGFicy0tYm9yZGVyLWNhcmQ+LmVsLXRhYnNfX2hlYWRlciAuZWwtdGFic19faXRlbSsuZWwtdGFic19faXRlbSwuZWwtdGFicy0tYm9yZGVyLWNhcmQ+LmVsLXRhYnNfX2hlYWRlciAuZWwtdGFic19faXRlbTpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDotMXB4fS5lbC1jb2wtb2Zmc2V0LTAsLmVsLXRhYnMtLWJvcmRlci1jYXJkPi5lbC10YWJzX19oZWFkZXIgLmlzLXNjcm9sbGFibGUgLmVsLXRhYnNfX2l0ZW06Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6MH0uZWwtdGFicy0tYm9yZGVyLWNhcmQ+LmVsLXRhYnNfX2hlYWRlciAuZWwtdGFic19faXRlbS5pcy1hY3RpdmV7Y29sb3I6IzQwOUVGRjtiYWNrZ3JvdW5kLWNvbG9yOiNGRkY7Ym9yZGVyLXJpZ2h0LWNvbG9yOiNEQ0RGRTY7Ym9yZGVyLWxlZnQtY29sb3I6I0RDREZFNn0uZWwtdGFicy0tYm9yZGVyLWNhcmQ+LmVsLXRhYnNfX2hlYWRlciAuZWwtdGFic19faXRlbTpub3QoLmlzLWRpc2FibGVkKTpob3Zlcntjb2xvcjojNDA5RUZGfS5lbC10YWJzLS1ib3JkZXItY2FyZD4uZWwtdGFic19faGVhZGVyIC5lbC10YWJzX19pdGVtLmlzLWRpc2FibGVke2NvbG9yOiNDMEM0Q0N9LmVsLXRhYnMtLWJvdHRvbSAuZWwtdGFic19faXRlbS5pcy1ib3R0b206bnRoLWNoaWxkKDIpLC5lbC10YWJzLS1ib3R0b20gLmVsLXRhYnNfX2l0ZW0uaXMtdG9wOm50aC1jaGlsZCgyKSwuZWwtdGFicy0tdG9wIC5lbC10YWJzX19pdGVtLmlzLWJvdHRvbTpudGgtY2hpbGQoMiksLmVsLXRhYnMtLXRvcCAuZWwtdGFic19faXRlbS5pcy10b3A6bnRoLWNoaWxkKDIpe3BhZGRpbmctbGVmdDowfS5lbC10YWJzLS1ib3R0b20gLmVsLXRhYnNfX2l0ZW0uaXMtYm90dG9tOmxhc3QtY2hpbGQsLmVsLXRhYnMtLWJvdHRvbSAuZWwtdGFic19faXRlbS5pcy10b3A6bGFzdC1jaGlsZCwuZWwtdGFicy0tdG9wIC5lbC10YWJzX19pdGVtLmlzLWJvdHRvbTpsYXN0LWNoaWxkLC5lbC10YWJzLS10b3AgLmVsLXRhYnNfX2l0ZW0uaXMtdG9wOmxhc3QtY2hpbGR7cGFkZGluZy1yaWdodDowfS5lbC1jYXNjYWRlci1tZW51Omxhc3QtY2hpbGQgLmVsLWNhc2NhZGVyLW5vZGUsLmVsLXRhYnMtLWJvdHRvbSAuZWwtdGFicy0tbGVmdD4uZWwtdGFic19faGVhZGVyIC5lbC10YWJzX19pdGVtOmxhc3QtY2hpbGQsLmVsLXRhYnMtLWJvdHRvbSAuZWwtdGFicy0tcmlnaHQ+LmVsLXRhYnNfX2hlYWRlciAuZWwtdGFic19faXRlbTpsYXN0LWNoaWxkLC5lbC10YWJzLS1ib3R0b20uZWwtdGFicy0tYm9yZGVyLWNhcmQ+LmVsLXRhYnNfX2hlYWRlciAuZWwtdGFic19faXRlbTpsYXN0LWNoaWxkLC5lbC10YWJzLS1ib3R0b20uZWwtdGFicy0tY2FyZD4uZWwtdGFic19faGVhZGVyIC5lbC10YWJzX19pdGVtOmxhc3QtY2hpbGQsLmVsLXRhYnMtLXRvcCAuZWwtdGFicy0tbGVmdD4uZWwtdGFic19faGVhZGVyIC5lbC10YWJzX19pdGVtOmxhc3QtY2hpbGQsLmVsLXRhYnMtLXRvcCAuZWwtdGFicy0tcmlnaHQ+LmVsLXRhYnNfX2hlYWRlciAuZWwtdGFic19faXRlbTpsYXN0LWNoaWxkLC5lbC10YWJzLS10b3AuZWwtdGFicy0tYm9yZGVyLWNhcmQ+LmVsLXRhYnNfX2hlYWRlciAuZWwtdGFic19faXRlbTpsYXN0LWNoaWxkLC5lbC10YWJzLS10b3AuZWwtdGFicy0tY2FyZD4uZWwtdGFic19faGVhZGVyIC5lbC10YWJzX19pdGVtOmxhc3QtY2hpbGR7cGFkZGluZy1yaWdodDoyMHB4fS5lbC10YWJzLS1ib3R0b20gLmVsLXRhYnMtLWxlZnQ+LmVsLXRhYnNfX2hlYWRlciAuZWwtdGFic19faXRlbTpudGgtY2hpbGQoMiksLmVsLXRhYnMtLWJvdHRvbSAuZWwtdGFicy0tcmlnaHQ+LmVsLXRhYnNfX2hlYWRlciAuZWwtdGFic19faXRlbTpudGgtY2hpbGQoMiksLmVsLXRhYnMtLWJvdHRvbS5lbC10YWJzLS1ib3JkZXItY2FyZD4uZWwtdGFic19faGVhZGVyIC5lbC10YWJzX19pdGVtOm50aC1jaGlsZCgyKSwuZWwtdGFicy0tYm90dG9tLmVsLXRhYnMtLWNhcmQ+LmVsLXRhYnNfX2hlYWRlciAuZWwtdGFic19faXRlbTpudGgtY2hpbGQoMiksLmVsLXRhYnMtLXRvcCAuZWwtdGFicy0tbGVmdD4uZWwtdGFic19faGVhZGVyIC5lbC10YWJzX19pdGVtOm50aC1jaGlsZCgyKSwuZWwtdGFicy0tdG9wIC5lbC10YWJzLS1yaWdodD4uZWwtdGFic19faGVhZGVyIC5lbC10YWJzX19pdGVtOm50aC1jaGlsZCgyKSwuZWwtdGFicy0tdG9wLmVsLXRhYnMtLWJvcmRlci1jYXJkPi5lbC10YWJzX19oZWFkZXIgLmVsLXRhYnNfX2l0ZW06bnRoLWNoaWxkKDIpLC5lbC10YWJzLS10b3AuZWwtdGFicy0tY2FyZD4uZWwtdGFic19faGVhZGVyIC5lbC10YWJzX19pdGVtOm50aC1jaGlsZCgyKXtwYWRkaW5nLWxlZnQ6MjBweH0uZWwtdGFicy0tYm90dG9tIC5lbC10YWJzX19oZWFkZXIuaXMtYm90dG9te21hcmdpbi1ib3R0b206MDttYXJnaW4tdG9wOjEwcHh9LmVsLXRhYnMtLWJvdHRvbS5lbC10YWJzLS1ib3JkZXItY2FyZCAuZWwtdGFic19faGVhZGVyLmlzLWJvdHRvbXtib3JkZXItYm90dG9tOjA7Ym9yZGVyLXRvcDoxcHggc29saWQgI0RDREZFNn0uZWwtdGFicy0tYm90dG9tLmVsLXRhYnMtLWJvcmRlci1jYXJkIC5lbC10YWJzX19uYXYtd3JhcC5pcy1ib3R0b217bWFyZ2luLXRvcDotMXB4O21hcmdpbi1ib3R0b206MH0uZWwtdGFicy0tYm90dG9tLmVsLXRhYnMtLWJvcmRlci1jYXJkIC5lbC10YWJzX19pdGVtLmlzLWJvdHRvbTpub3QoLmlzLWFjdGl2ZSl7Ym9yZGVyOjFweCBzb2xpZCB0cmFuc3BhcmVudH0uZWwtdGFicy0tYm90dG9tLmVsLXRhYnMtLWJvcmRlci1jYXJkIC5lbC10YWJzX19pdGVtLmlzLWJvdHRvbXttYXJnaW46MCAtMXB4IC0xcHh9LmVsLXRhYnMtLWxlZnQsLmVsLXRhYnMtLXJpZ2h0e292ZXJmbG93OmhpZGRlbn0uZWwtdGFicy0tbGVmdCAuZWwtdGFic19faGVhZGVyLmlzLWxlZnQsLmVsLXRhYnMtLWxlZnQgLmVsLXRhYnNfX2hlYWRlci5pcy1yaWdodCwuZWwtdGFicy0tbGVmdCAuZWwtdGFic19fbmF2LXNjcm9sbCwuZWwtdGFicy0tbGVmdCAuZWwtdGFic19fbmF2LXdyYXAuaXMtbGVmdCwuZWwtdGFicy0tbGVmdCAuZWwtdGFic19fbmF2LXdyYXAuaXMtcmlnaHQsLmVsLXRhYnMtLXJpZ2h0IC5lbC10YWJzX19oZWFkZXIuaXMtbGVmdCwuZWwtdGFicy0tcmlnaHQgLmVsLXRhYnNfX2hlYWRlci5pcy1yaWdodCwuZWwtdGFicy0tcmlnaHQgLmVsLXRhYnNfX25hdi1zY3JvbGwsLmVsLXRhYnMtLXJpZ2h0IC5lbC10YWJzX19uYXYtd3JhcC5pcy1sZWZ0LC5lbC10YWJzLS1yaWdodCAuZWwtdGFic19fbmF2LXdyYXAuaXMtcmlnaHR7aGVpZ2h0OjEwMCV9LmVsLXRhYnMtLWxlZnQgLmVsLXRhYnNfX2FjdGl2ZS1iYXIuaXMtbGVmdCwuZWwtdGFicy0tbGVmdCAuZWwtdGFic19fYWN0aXZlLWJhci5pcy1yaWdodCwuZWwtdGFicy0tcmlnaHQgLmVsLXRhYnNfX2FjdGl2ZS1iYXIuaXMtbGVmdCwuZWwtdGFicy0tcmlnaHQgLmVsLXRhYnNfX2FjdGl2ZS1iYXIuaXMtcmlnaHR7dG9wOjA7Ym90dG9tOmF1dG87d2lkdGg6MnB4O2hlaWdodDphdXRvfS5lbC10YWJzLS1sZWZ0IC5lbC10YWJzX19uYXYtd3JhcC5pcy1sZWZ0LC5lbC10YWJzLS1sZWZ0IC5lbC10YWJzX19uYXYtd3JhcC5pcy1yaWdodCwuZWwtdGFicy0tcmlnaHQgLmVsLXRhYnNfX25hdi13cmFwLmlzLWxlZnQsLmVsLXRhYnMtLXJpZ2h0IC5lbC10YWJzX19uYXYtd3JhcC5pcy1yaWdodHttYXJnaW4tYm90dG9tOjB9LmVsLXRhYnMtLWxlZnQgLmVsLXRhYnNfX25hdi13cmFwLmlzLWxlZnQ+LmVsLXRhYnNfX25hdi1uZXh0LC5lbC10YWJzLS1sZWZ0IC5lbC10YWJzX19uYXYtd3JhcC5pcy1sZWZ0Pi5lbC10YWJzX19uYXYtcHJldiwuZWwtdGFicy0tbGVmdCAuZWwtdGFic19fbmF2LXdyYXAuaXMtcmlnaHQ+LmVsLXRhYnNfX25hdi1uZXh0LC5lbC10YWJzLS1sZWZ0IC5lbC10YWJzX19uYXYtd3JhcC5pcy1yaWdodD4uZWwtdGFic19fbmF2LXByZXYsLmVsLXRhYnMtLXJpZ2h0IC5lbC10YWJzX19uYXYtd3JhcC5pcy1sZWZ0Pi5lbC10YWJzX19uYXYtbmV4dCwuZWwtdGFicy0tcmlnaHQgLmVsLXRhYnNfX25hdi13cmFwLmlzLWxlZnQ+LmVsLXRhYnNfX25hdi1wcmV2LC5lbC10YWJzLS1yaWdodCAuZWwtdGFic19fbmF2LXdyYXAuaXMtcmlnaHQ+LmVsLXRhYnNfX25hdi1uZXh0LC5lbC10YWJzLS1yaWdodCAuZWwtdGFic19fbmF2LXdyYXAuaXMtcmlnaHQ+LmVsLXRhYnNfX25hdi1wcmV2e2hlaWdodDozMHB4O2xpbmUtaGVpZ2h0OjMwcHg7d2lkdGg6MTAwJTt0ZXh0LWFsaWduOmNlbnRlcjtjdXJzb3I6cG9pbnRlcn0uZWwtdGFicy0tbGVmdCAuZWwtdGFic19fbmF2LXdyYXAuaXMtbGVmdD4uZWwtdGFic19fbmF2LW5leHQgaSwuZWwtdGFicy0tbGVmdCAuZWwtdGFic19fbmF2LXdyYXAuaXMtbGVmdD4uZWwtdGFic19fbmF2LXByZXYgaSwuZWwtdGFicy0tbGVmdCAuZWwtdGFic19fbmF2LXdyYXAuaXMtcmlnaHQ+LmVsLXRhYnNfX25hdi1uZXh0IGksLmVsLXRhYnMtLWxlZnQgLmVsLXRhYnNfX25hdi13cmFwLmlzLXJpZ2h0Pi5lbC10YWJzX19uYXYtcHJldiBpLC5lbC10YWJzLS1yaWdodCAuZWwtdGFic19fbmF2LXdyYXAuaXMtbGVmdD4uZWwtdGFic19fbmF2LW5leHQgaSwuZWwtdGFicy0tcmlnaHQgLmVsLXRhYnNfX25hdi13cmFwLmlzLWxlZnQ+LmVsLXRhYnNfX25hdi1wcmV2IGksLmVsLXRhYnMtLXJpZ2h0IC5lbC10YWJzX19uYXYtd3JhcC5pcy1yaWdodD4uZWwtdGFic19fbmF2LW5leHQgaSwuZWwtdGFicy0tcmlnaHQgLmVsLXRhYnNfX25hdi13cmFwLmlzLXJpZ2h0Pi5lbC10YWJzX19uYXYtcHJldiBpey13ZWJraXQtdHJhbnNmb3JtOnJvdGF0ZVooOTBkZWcpO3RyYW5zZm9ybTpyb3RhdGVaKDkwZGVnKX0uZWwtdGFicy0tbGVmdCAuZWwtdGFic19fbmF2LXdyYXAuaXMtbGVmdD4uZWwtdGFic19fbmF2LXByZXYsLmVsLXRhYnMtLWxlZnQgLmVsLXRhYnNfX25hdi13cmFwLmlzLXJpZ2h0Pi5lbC10YWJzX19uYXYtcHJldiwuZWwtdGFicy0tcmlnaHQgLmVsLXRhYnNfX25hdi13cmFwLmlzLWxlZnQ+LmVsLXRhYnNfX25hdi1wcmV2LC5lbC10YWJzLS1yaWdodCAuZWwtdGFic19fbmF2LXdyYXAuaXMtcmlnaHQ+LmVsLXRhYnNfX25hdi1wcmV2e2xlZnQ6YXV0bzt0b3A6MH0uZWwtdGFicy0tbGVmdCAuZWwtdGFic19fbmF2LXdyYXAuaXMtbGVmdD4uZWwtdGFic19fbmF2LW5leHQsLmVsLXRhYnMtLWxlZnQgLmVsLXRhYnNfX25hdi13cmFwLmlzLXJpZ2h0Pi5lbC10YWJzX19uYXYtbmV4dCwuZWwtdGFicy0tcmlnaHQgLmVsLXRhYnNfX25hdi13cmFwLmlzLWxlZnQ+LmVsLXRhYnNfX25hdi1uZXh0LC5lbC10YWJzLS1yaWdodCAuZWwtdGFic19fbmF2LXdyYXAuaXMtcmlnaHQ+LmVsLXRhYnNfX25hdi1uZXh0e3JpZ2h0OmF1dG87Ym90dG9tOjB9LmVsLXRhYnMtLWxlZnQgLmVsLXRhYnNfX2FjdGl2ZS1iYXIuaXMtbGVmdCwuZWwtdGFicy0tbGVmdCAuZWwtdGFic19fbmF2LXdyYXAuaXMtbGVmdDo6YWZ0ZXJ7cmlnaHQ6MDtsZWZ0OmF1dG99LmVsLXRhYnMtLWxlZnQgLmVsLXRhYnNfX25hdi13cmFwLmlzLWxlZnQuaXMtc2Nyb2xsYWJsZSwuZWwtdGFicy0tbGVmdCAuZWwtdGFic19fbmF2LXdyYXAuaXMtcmlnaHQuaXMtc2Nyb2xsYWJsZSwuZWwtdGFicy0tcmlnaHQgLmVsLXRhYnNfX25hdi13cmFwLmlzLWxlZnQuaXMtc2Nyb2xsYWJsZSwuZWwtdGFicy0tcmlnaHQgLmVsLXRhYnNfX25hdi13cmFwLmlzLXJpZ2h0LmlzLXNjcm9sbGFibGV7cGFkZGluZzozMHB4IDB9LmVsLXRhYnMtLWxlZnQgLmVsLXRhYnNfX25hdi13cmFwLmlzLWxlZnQ6OmFmdGVyLC5lbC10YWJzLS1sZWZ0IC5lbC10YWJzX19uYXYtd3JhcC5pcy1yaWdodDo6YWZ0ZXIsLmVsLXRhYnMtLXJpZ2h0IC5lbC10YWJzX19uYXYtd3JhcC5pcy1sZWZ0OjphZnRlciwuZWwtdGFicy0tcmlnaHQgLmVsLXRhYnNfX25hdi13cmFwLmlzLXJpZ2h0OjphZnRlcntoZWlnaHQ6MTAwJTt3aWR0aDoycHg7Ym90dG9tOmF1dG87dG9wOjB9LmVsLXRhYnMtLWxlZnQgLmVsLXRhYnNfX25hdi5pcy1sZWZ0LC5lbC10YWJzLS1sZWZ0IC5lbC10YWJzX19uYXYuaXMtcmlnaHQsLmVsLXRhYnMtLXJpZ2h0IC5lbC10YWJzX19uYXYuaXMtbGVmdCwuZWwtdGFicy0tcmlnaHQgLmVsLXRhYnNfX25hdi5pcy1yaWdodHtmbG9hdDpub25lfS5lbC10YWJzLS1sZWZ0IC5lbC10YWJzX19pdGVtLmlzLWxlZnQsLmVsLXRhYnMtLWxlZnQgLmVsLXRhYnNfX2l0ZW0uaXMtcmlnaHQsLmVsLXRhYnMtLXJpZ2h0IC5lbC10YWJzX19pdGVtLmlzLWxlZnQsLmVsLXRhYnMtLXJpZ2h0IC5lbC10YWJzX19pdGVtLmlzLXJpZ2h0e2Rpc3BsYXk6YmxvY2t9LmVsLXRhYnMtLWxlZnQgLmVsLXRhYnNfX2hlYWRlci5pcy1sZWZ0e2Zsb2F0OmxlZnQ7bWFyZ2luLWJvdHRvbTowO21hcmdpbi1yaWdodDoxMHB4fS5lbC1idXR0b24tZ3JvdXA+LmVsLWJ1dHRvbjpub3QoOmxhc3QtY2hpbGQpLC5lbC10YWJzLS1sZWZ0IC5lbC10YWJzX19uYXYtd3JhcC5pcy1sZWZ0e21hcmdpbi1yaWdodDotMXB4fS5lbC10YWJzLS1sZWZ0IC5lbC10YWJzX19pdGVtLmlzLWxlZnR7dGV4dC1hbGlnbjpyaWdodH0uZWwtdGFicy0tbGVmdC5lbC10YWJzLS1jYXJkIC5lbC10YWJzX19pdGVtLmlzLWxlZnR7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNFNEU3RUQ7Ym9yZGVyLWJvdHRvbTpub25lO2JvcmRlci10b3A6MXB4IHNvbGlkICNFNEU3RUQ7dGV4dC1hbGlnbjpsZWZ0fS5lbC10YWJzLS1sZWZ0LmVsLXRhYnMtLWNhcmQgLmVsLXRhYnNfX2l0ZW0uaXMtbGVmdDpmaXJzdC1jaGlsZHtib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNFNEU3RUQ7Ym9yZGVyLXRvcDpub25lfS5lbC10YWJzLS1sZWZ0LmVsLXRhYnMtLWNhcmQgLmVsLXRhYnNfX2l0ZW0uaXMtbGVmdC5pcy1hY3RpdmV7Ym9yZGVyOjFweCBzb2xpZCAjRTRFN0VEO2JvcmRlci1yaWdodC1jb2xvcjojZmZmO2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLWJvdHRvbTpub25lfS5lbC10YWJzLS1sZWZ0LmVsLXRhYnMtLWNhcmQgLmVsLXRhYnNfX2l0ZW0uaXMtbGVmdC5pcy1hY3RpdmU6Zmlyc3QtY2hpbGR7Ym9yZGVyLXRvcDpub25lfS5lbC10YWJzLS1sZWZ0LmVsLXRhYnMtLWNhcmQgLmVsLXRhYnNfX2l0ZW0uaXMtbGVmdC5pcy1hY3RpdmU6bGFzdC1jaGlsZHtib3JkZXItYm90dG9tOm5vbmV9LmVsLXRhYnMtLWxlZnQuZWwtdGFicy0tY2FyZCAuZWwtdGFic19fbmF2e2JvcmRlci1yYWRpdXM6NHB4IDAgMCA0cHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI0U0RTdFRDtib3JkZXItcmlnaHQ6bm9uZX0uZWwtdGFicy0tbGVmdC5lbC10YWJzLS1jYXJkIC5lbC10YWJzX19uZXctdGFie2Zsb2F0Om5vbmV9LmVsLXRhYnMtLWxlZnQuZWwtdGFicy0tYm9yZGVyLWNhcmQgLmVsLXRhYnNfX2hlYWRlci5pcy1sZWZ0e2JvcmRlci1yaWdodDoxcHggc29saWQgI2RmZTRlZH0uZWwtdGFicy0tbGVmdC5lbC10YWJzLS1ib3JkZXItY2FyZCAuZWwtdGFic19faXRlbS5pcy1sZWZ0e2JvcmRlcjoxcHggc29saWQgdHJhbnNwYXJlbnQ7bWFyZ2luOi0xcHggMCAtMXB4IC0xcHh9LmVsLXRhYnMtLWxlZnQuZWwtdGFicy0tYm9yZGVyLWNhcmQgLmVsLXRhYnNfX2l0ZW0uaXMtbGVmdC5pcy1hY3RpdmV7Ym9yZGVyLWNvbG9yOiNkMWRiZTUgdHJhbnNwYXJlbnR9LmVsLXRhYnMtLXJpZ2h0IC5lbC10YWJzX19oZWFkZXIuaXMtcmlnaHR7ZmxvYXQ6cmlnaHQ7bWFyZ2luLWJvdHRvbTowO21hcmdpbi1sZWZ0OjEwcHh9LmVsLXRhYnMtLXJpZ2h0IC5lbC10YWJzX19uYXYtd3JhcC5pcy1yaWdodHttYXJnaW4tbGVmdDotMXB4fS5lbC10YWJzLS1yaWdodCAuZWwtdGFic19fbmF2LXdyYXAuaXMtcmlnaHQ6OmFmdGVye2xlZnQ6MDtyaWdodDphdXRvfS5lbC10YWJzLS1yaWdodCAuZWwtdGFic19fYWN0aXZlLWJhci5pcy1yaWdodHtsZWZ0OjB9LmVsLXRhYnMtLXJpZ2h0LmVsLXRhYnMtLWNhcmQgLmVsLXRhYnNfX2l0ZW0uaXMtcmlnaHR7Ym9yZGVyLWJvdHRvbTpub25lO2JvcmRlci10b3A6MXB4IHNvbGlkICNFNEU3RUR9LmVsLXRhYnMtLXJpZ2h0LmVsLXRhYnMtLWNhcmQgLmVsLXRhYnNfX2l0ZW0uaXMtcmlnaHQ6Zmlyc3QtY2hpbGR7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNFNEU3RUQ7Ym9yZGVyLXRvcDpub25lfS5lbC10YWJzLS1yaWdodC5lbC10YWJzLS1jYXJkIC5lbC10YWJzX19pdGVtLmlzLXJpZ2h0LmlzLWFjdGl2ZXtib3JkZXI6MXB4IHNvbGlkICNFNEU3RUQ7Ym9yZGVyLWxlZnQtY29sb3I6I2ZmZjtib3JkZXItcmlnaHQ6bm9uZTtib3JkZXItYm90dG9tOm5vbmV9LmVsLXRhYnMtLXJpZ2h0LmVsLXRhYnMtLWNhcmQgLmVsLXRhYnNfX2l0ZW0uaXMtcmlnaHQuaXMtYWN0aXZlOmZpcnN0LWNoaWxke2JvcmRlci10b3A6bm9uZX0uZWwtdGFicy0tcmlnaHQuZWwtdGFicy0tY2FyZCAuZWwtdGFic19faXRlbS5pcy1yaWdodC5pcy1hY3RpdmU6bGFzdC1jaGlsZHtib3JkZXItYm90dG9tOm5vbmV9LmVsLXRhYnMtLXJpZ2h0LmVsLXRhYnMtLWNhcmQgLmVsLXRhYnNfX25hdntib3JkZXItcmFkaXVzOjAgNHB4IDRweCAwO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNFNEU3RUQ7Ym9yZGVyLWxlZnQ6bm9uZX0uZWwtdGFicy0tcmlnaHQuZWwtdGFicy0tYm9yZGVyLWNhcmQgLmVsLXRhYnNfX2hlYWRlci5pcy1yaWdodHtib3JkZXItbGVmdDoxcHggc29saWQgI2RmZTRlZH0uZWwtdGFicy0tcmlnaHQuZWwtdGFicy0tYm9yZGVyLWNhcmQgLmVsLXRhYnNfX2l0ZW0uaXMtcmlnaHR7Ym9yZGVyOjFweCBzb2xpZCB0cmFuc3BhcmVudDttYXJnaW46LTFweCAtMXB4IC0xcHggMH0uZWwtdGFicy0tcmlnaHQuZWwtdGFicy0tYm9yZGVyLWNhcmQgLmVsLXRhYnNfX2l0ZW0uaXMtcmlnaHQuaXMtYWN0aXZle2JvcmRlci1jb2xvcjojZDFkYmU1IHRyYW5zcGFyZW50fS5zbGlkZUluTGVmdC10cmFuc2l0aW9uLC5zbGlkZUluUmlnaHQtdHJhbnNpdGlvbntkaXNwbGF5OmlubGluZS1ibG9ja30uc2xpZGVJblJpZ2h0LWVudGVyey13ZWJraXQtYW5pbWF0aW9uOnNsaWRlSW5SaWdodC1lbnRlciAuM3M7YW5pbWF0aW9uOnNsaWRlSW5SaWdodC1lbnRlciAuM3N9LnNsaWRlSW5SaWdodC1sZWF2ZXtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7cmlnaHQ6MDstd2Via2l0LWFuaW1hdGlvbjpzbGlkZUluUmlnaHQtbGVhdmUgLjNzO2FuaW1hdGlvbjpzbGlkZUluUmlnaHQtbGVhdmUgLjNzfS5zbGlkZUluTGVmdC1lbnRlcnstd2Via2l0LWFuaW1hdGlvbjpzbGlkZUluTGVmdC1lbnRlciAuM3M7YW5pbWF0aW9uOnNsaWRlSW5MZWZ0LWVudGVyIC4zc30uc2xpZGVJbkxlZnQtbGVhdmV7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3JpZ2h0OjA7LXdlYmtpdC1hbmltYXRpb246c2xpZGVJbkxlZnQtbGVhdmUgLjNzO2FuaW1hdGlvbjpzbGlkZUluTGVmdC1sZWF2ZSAuM3N9QC13ZWJraXQta2V5ZnJhbWVzIHNsaWRlSW5SaWdodC1lbnRlcnswJXtvcGFjaXR5OjA7LXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOjAgMDt0cmFuc2Zvcm0tb3JpZ2luOjAgMDstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVYKDEwMCUpO3RyYW5zZm9ybTp0cmFuc2xhdGVYKDEwMCUpfXRve29wYWNpdHk6MTstd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46MCAwO3RyYW5zZm9ybS1vcmlnaW46MCAwOy13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVgoMCk7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoMCl9fUBrZXlmcmFtZXMgc2xpZGVJblJpZ2h0LWVudGVyezAle29wYWNpdHk6MDstd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46MCAwO3RyYW5zZm9ybS1vcmlnaW46MCAwOy13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVgoMTAwJSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoMTAwJSl9dG97b3BhY2l0eToxOy13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjowIDA7dHJhbnNmb3JtLW9yaWdpbjowIDA7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWCgwKTt0cmFuc2Zvcm06dHJhbnNsYXRlWCgwKX19QC13ZWJraXQta2V5ZnJhbWVzIHNsaWRlSW5SaWdodC1sZWF2ZXswJXstd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46MCAwO3RyYW5zZm9ybS1vcmlnaW46MCAwOy13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVgoMCk7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoMCk7b3BhY2l0eToxfTEwMCV7LXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOjAgMDt0cmFuc2Zvcm0tb3JpZ2luOjAgMDstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVYKDEwMCUpO3RyYW5zZm9ybTp0cmFuc2xhdGVYKDEwMCUpO29wYWNpdHk6MH19QGtleWZyYW1lcyBzbGlkZUluUmlnaHQtbGVhdmV7MCV7LXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOjAgMDt0cmFuc2Zvcm0tb3JpZ2luOjAgMDstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVYKDApO3RyYW5zZm9ybTp0cmFuc2xhdGVYKDApO29wYWNpdHk6MX0xMDAley13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjowIDA7dHJhbnNmb3JtLW9yaWdpbjowIDA7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWCgxMDAlKTt0cmFuc2Zvcm06dHJhbnNsYXRlWCgxMDAlKTtvcGFjaXR5OjB9fUAtd2Via2l0LWtleWZyYW1lcyBzbGlkZUluTGVmdC1lbnRlcnswJXtvcGFjaXR5OjA7LXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOjAgMDt0cmFuc2Zvcm0tb3JpZ2luOjAgMDstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVYKC0xMDAlKTt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtMTAwJSl9dG97b3BhY2l0eToxOy13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjowIDA7dHJhbnNmb3JtLW9yaWdpbjowIDA7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWCgwKTt0cmFuc2Zvcm06dHJhbnNsYXRlWCgwKX19QGtleWZyYW1lcyBzbGlkZUluTGVmdC1lbnRlcnswJXtvcGFjaXR5OjA7LXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOjAgMDt0cmFuc2Zvcm0tb3JpZ2luOjAgMDstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVYKC0xMDAlKTt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtMTAwJSl9dG97b3BhY2l0eToxOy13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjowIDA7dHJhbnNmb3JtLW9yaWdpbjowIDA7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWCgwKTt0cmFuc2Zvcm06dHJhbnNsYXRlWCgwKX19QC13ZWJraXQta2V5ZnJhbWVzIHNsaWRlSW5MZWZ0LWxlYXZlezAley13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjowIDA7dHJhbnNmb3JtLW9yaWdpbjowIDA7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWCgwKTt0cmFuc2Zvcm06dHJhbnNsYXRlWCgwKTtvcGFjaXR5OjF9MTAwJXstd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46MCAwO3RyYW5zZm9ybS1vcmlnaW46MCAwOy13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTEwMCUpO3RyYW5zZm9ybTp0cmFuc2xhdGVYKC0xMDAlKTtvcGFjaXR5OjB9fUBrZXlmcmFtZXMgc2xpZGVJbkxlZnQtbGVhdmV7MCV7LXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOjAgMDt0cmFuc2Zvcm0tb3JpZ2luOjAgMDstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVYKDApO3RyYW5zZm9ybTp0cmFuc2xhdGVYKDApO29wYWNpdHk6MX0xMDAley13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjowIDA7dHJhbnNmb3JtLW9yaWdpbjowIDA7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWCgtMTAwJSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTEwMCUpO29wYWNpdHk6MH19LmVsLXRyZWV7cG9zaXRpb246cmVsYXRpdmU7Y3Vyc29yOmRlZmF1bHQ7YmFja2dyb3VuZDojRkZGO2NvbG9yOiM2MDYyNjZ9LmVsLXRyZWVfX2VtcHR5LWJsb2Nre3Bvc2l0aW9uOnJlbGF0aXZlO21pbi1oZWlnaHQ6NjBweDt0ZXh0LWFsaWduOmNlbnRlcjt3aWR0aDoxMDAlO2hlaWdodDoxMDAlfS5lbC10cmVlX19lbXB0eS10ZXh0e3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6NTAlO3RvcDo1MCU7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsLTUwJSk7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLC01MCUpO2NvbG9yOiM5MDkzOTk7Zm9udC1zaXplOjE0cHh9LmVsLXRyZWVfX2Ryb3AtaW5kaWNhdG9ye3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDtyaWdodDowO2hlaWdodDoxcHg7YmFja2dyb3VuZC1jb2xvcjojNDA5RUZGfS5lbC10cmVlLW5vZGV7d2hpdGUtc3BhY2U6bm93cmFwO291dGxpbmU6MH0uZWwtdHJlZS1ub2RlOmZvY3VzPi5lbC10cmVlLW5vZGVfX2NvbnRlbnR7YmFja2dyb3VuZC1jb2xvcjojRjVGN0ZBfS5lbC10cmVlLW5vZGUuaXMtZHJvcC1pbm5lcj4uZWwtdHJlZS1ub2RlX19jb250ZW50IC5lbC10cmVlLW5vZGVfX2xhYmVse2JhY2tncm91bmQtY29sb3I6IzQwOUVGRjtjb2xvcjojZmZmfS5lbC10cmVlLW5vZGVfX2NvbnRlbnQ6aG92ZXIsLmVsLXVwbG9hZC1saXN0X19pdGVtOmhvdmVye2JhY2tncm91bmQtY29sb3I6I0Y1RjdGQX0uZWwtdHJlZS1ub2RlX19jb250ZW50e2Rpc3BsYXk6LXdlYmtpdC1ib3g7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7LXdlYmtpdC1ib3gtYWxpZ246Y2VudGVyOy1tcy1mbGV4LWFsaWduOmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7aGVpZ2h0OjI2cHg7Y3Vyc29yOnBvaW50ZXJ9LmVsLXRyZWUtbm9kZV9fY29udGVudD4uZWwtdHJlZS1ub2RlX19leHBhbmQtaWNvbntwYWRkaW5nOjZweH0uZWwtdHJlZS1ub2RlX19jb250ZW50PmxhYmVsLmVsLWNoZWNrYm94e21hcmdpbi1yaWdodDo4cHh9LmVsLXRyZWUuaXMtZHJhZ2dpbmcgLmVsLXRyZWUtbm9kZV9fY29udGVudHtjdXJzb3I6bW92ZX0uZWwtdHJlZS5pcy1kcmFnZ2luZyAuZWwtdHJlZS1ub2RlX19jb250ZW50ICp7cG9pbnRlci1ldmVudHM6bm9uZX0uZWwtdHJlZS5pcy1kcmFnZ2luZy5pcy1kcm9wLW5vdC1hbGxvdyAuZWwtdHJlZS1ub2RlX19jb250ZW50e2N1cnNvcjpub3QtYWxsb3dlZH0uZWwtdHJlZS1ub2RlX19leHBhbmQtaWNvbntjdXJzb3I6cG9pbnRlcjtjb2xvcjojQzBDNENDO2ZvbnQtc2l6ZToxMnB4Oy13ZWJraXQtdHJhbnNmb3JtOnJvdGF0ZSgwKTt0cmFuc2Zvcm06cm90YXRlKDApOy13ZWJraXQtdHJhbnNpdGlvbjotd2Via2l0LXRyYW5zZm9ybSAuM3MgZWFzZS1pbi1vdXQ7dHJhbnNpdGlvbjotd2Via2l0LXRyYW5zZm9ybSAuM3MgZWFzZS1pbi1vdXQ7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjNzIGVhc2UtaW4tb3V0O3RyYW5zaXRpb246dHJhbnNmb3JtIC4zcyBlYXNlLWluLW91dCwtd2Via2l0LXRyYW5zZm9ybSAuM3MgZWFzZS1pbi1vdXR9LmVsLXRyZWUtbm9kZV9fZXhwYW5kLWljb24uZXhwYW5kZWR7LXdlYmtpdC10cmFuc2Zvcm06cm90YXRlKDkwZGVnKTt0cmFuc2Zvcm06cm90YXRlKDkwZGVnKX0uZWwtdHJlZS1ub2RlX19leHBhbmQtaWNvbi5pcy1sZWFme2NvbG9yOnRyYW5zcGFyZW50O2N1cnNvcjpkZWZhdWx0fS5lbC10cmVlLW5vZGVfX2xhYmVse2ZvbnQtc2l6ZToxNHB4fS5lbC10cmVlLW5vZGVfX2xvYWRpbmctaWNvbnttYXJnaW4tcmlnaHQ6OHB4O2ZvbnQtc2l6ZToxNHB4O2NvbG9yOiNDMEM0Q0N9LmVsLXRyZWUtbm9kZT4uZWwtdHJlZS1ub2RlX19jaGlsZHJlbntvdmVyZmxvdzpoaWRkZW47YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0uZWwtdHJlZS1ub2RlLmlzLWV4cGFuZGVkPi5lbC10cmVlLW5vZGVfX2NoaWxkcmVue2Rpc3BsYXk6YmxvY2t9LmVsLXRyZWUtLWhpZ2hsaWdodC1jdXJyZW50IC5lbC10cmVlLW5vZGUuaXMtY3VycmVudD4uZWwtdHJlZS1ub2RlX19jb250ZW50e2JhY2tncm91bmQtY29sb3I6I2YwZjdmZn0uZWwtYWxlcnR7d2lkdGg6MTAwJTtwYWRkaW5nOjhweCAxNnB4O21hcmdpbjowOy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXItcmFkaXVzOjRweDtwb3NpdGlvbjpyZWxhdGl2ZTtiYWNrZ3JvdW5kLWNvbG9yOiNGRkY7b3ZlcmZsb3c6aGlkZGVuO29wYWNpdHk6MTtkaXNwbGF5Oi13ZWJraXQtYm94O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4Oy13ZWJraXQtYm94LWFsaWduOmNlbnRlcjstbXMtZmxleC1hbGlnbjpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyOy13ZWJraXQtdHJhbnNpdGlvbjpvcGFjaXR5IC4yczt0cmFuc2l0aW9uOm9wYWNpdHkgLjJzfS5lbC1hbGVydC5pcy1saWdodCAuZWwtYWxlcnRfX2Nsb3NlYnRue2NvbG9yOiNDMEM0Q0N9LmVsLWFsZXJ0LmlzLWRhcmsgLmVsLWFsZXJ0X19jbG9zZWJ0biwuZWwtYWxlcnQuaXMtZGFyayAuZWwtYWxlcnRfX2Rlc2NyaXB0aW9ue2NvbG9yOiNGRkZ9LmVsLWFsZXJ0LmlzLWNlbnRlcnstd2Via2l0LWJveC1wYWNrOmNlbnRlcjstbXMtZmxleC1wYWNrOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5lbC1hbGVydC0tc3VjY2Vzcy5pcy1saWdodHtiYWNrZ3JvdW5kLWNvbG9yOiNmMGY5ZWI7Y29sb3I6IzY3QzIzQX0uZWwtYWxlcnQtLXN1Y2Nlc3MuaXMtbGlnaHQgLmVsLWFsZXJ0X19kZXNjcmlwdGlvbntjb2xvcjojNjdDMjNBfS5lbC1hbGVydC0tc3VjY2Vzcy5pcy1kYXJre2JhY2tncm91bmQtY29sb3I6IzY3QzIzQTtjb2xvcjojRkZGfS5lbC1hbGVydC0taW5mby5pcy1saWdodHtiYWNrZ3JvdW5kLWNvbG9yOiNmNGY0ZjU7Y29sb3I6IzkwOTM5OX0uZWwtYWxlcnQtLWluZm8uaXMtZGFya3tiYWNrZ3JvdW5kLWNvbG9yOiM5MDkzOTk7Y29sb3I6I0ZGRn0uZWwtYWxlcnQtLWluZm8gLmVsLWFsZXJ0X19kZXNjcmlwdGlvbntjb2xvcjojOTA5Mzk5fS5lbC1hbGVydC0td2FybmluZy5pcy1saWdodHtiYWNrZ3JvdW5kLWNvbG9yOiNmZGY2ZWM7Y29sb3I6I0U2QTIzQ30uZWwtYWxlcnQtLXdhcm5pbmcuaXMtbGlnaHQgLmVsLWFsZXJ0X19kZXNjcmlwdGlvbntjb2xvcjojRTZBMjNDfS5lbC1hbGVydC0td2FybmluZy5pcy1kYXJre2JhY2tncm91bmQtY29sb3I6I0U2QTIzQztjb2xvcjojRkZGfS5lbC1hbGVydC0tZXJyb3IuaXMtbGlnaHR7YmFja2dyb3VuZC1jb2xvcjojZmVmMGYwO2NvbG9yOiNGNTZDNkN9LmVsLWFsZXJ0LS1lcnJvci5pcy1saWdodCAuZWwtYWxlcnRfX2Rlc2NyaXB0aW9ue2NvbG9yOiNGNTZDNkN9LmVsLWFsZXJ0LS1lcnJvci5pcy1kYXJre2JhY2tncm91bmQtY29sb3I6I0Y1NkM2Qztjb2xvcjojRkZGfS5lbC1hbGVydF9fY29udGVudHtkaXNwbGF5OnRhYmxlLWNlbGw7cGFkZGluZzowIDhweH0uZWwtYWxlcnRfX2ljb257Zm9udC1zaXplOjE2cHg7d2lkdGg6MTZweH0uZWwtYWxlcnRfX2ljb24uaXMtYmlne2ZvbnQtc2l6ZToyOHB4O3dpZHRoOjI4cHh9LmVsLWFsZXJ0X190aXRsZXtmb250LXNpemU6MTNweDtsaW5lLWhlaWdodDoxOHB4fS5lbC1hbGVydF9fdGl0bGUuaXMtYm9sZHtmb250LXdlaWdodDo3MDB9LmVsLWFsZXJ0IC5lbC1hbGVydF9fZGVzY3JpcHRpb257Zm9udC1zaXplOjEycHg7bWFyZ2luOjVweCAwIDB9LmVsLWFsZXJ0X19jbG9zZWJ0bntmb250LXNpemU6MTJweDtvcGFjaXR5OjE7cG9zaXRpb246YWJzb2x1dGU7dG9wOjEycHg7cmlnaHQ6MTVweDtjdXJzb3I6cG9pbnRlcn0uZWwtYWxlcnQtZmFkZS1lbnRlciwuZWwtYWxlcnQtZmFkZS1sZWF2ZS1hY3RpdmUsLmVsLWxvYWRpbmctZmFkZS1lbnRlciwuZWwtbG9hZGluZy1mYWRlLWxlYXZlLWFjdGl2ZSwuZWwtbm90aWZpY2F0aW9uLWZhZGUtbGVhdmUtYWN0aXZlLC5lbC11cGxvYWQgaWZyYW1le29wYWNpdHk6MH0uZWwtY2Fyb3VzZWxfX2Fycm93LS1yaWdodCwuZWwtbm90aWZpY2F0aW9uLnJpZ2h0e3JpZ2h0OjE2cHh9LmVsLWFsZXJ0X19jbG9zZWJ0bi5pcy1jdXN0b21lZHtmb250LXN0eWxlOm5vcm1hbDtmb250LXNpemU6MTNweDt0b3A6OXB4fS5lbC1ub3RpZmljYXRpb257ZGlzcGxheTotd2Via2l0LWJveDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDt3aWR0aDozMzBweDtwYWRkaW5nOjE0cHggMjZweCAxNHB4IDEzcHg7Ym9yZGVyLXJhZGl1czo4cHg7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlcjoxcHggc29saWQgI0VCRUVGNTtwb3NpdGlvbjpmaXhlZDtiYWNrZ3JvdW5kLWNvbG9yOiNGRkY7Ym94LXNoYWRvdzowIDJweCAxMnB4IDAgcmdiYSgwLDAsMCwuMSk7LXdlYmtpdC10cmFuc2l0aW9uOm9wYWNpdHkgLjNzLGxlZnQgLjNzLHJpZ2h0IC4zcyx0b3AgLjRzLGJvdHRvbSAuM3MsLXdlYmtpdC10cmFuc2Zvcm0gLjNzO3RyYW5zaXRpb246b3BhY2l0eSAuM3MsbGVmdCAuM3MscmlnaHQgLjNzLHRvcCAuNHMsYm90dG9tIC4zcywtd2Via2l0LXRyYW5zZm9ybSAuM3M7dHJhbnNpdGlvbjpvcGFjaXR5IC4zcyx0cmFuc2Zvcm0gLjNzLGxlZnQgLjNzLHJpZ2h0IC4zcyx0b3AgLjRzLGJvdHRvbSAuM3M7dHJhbnNpdGlvbjpvcGFjaXR5IC4zcyx0cmFuc2Zvcm0gLjNzLGxlZnQgLjNzLHJpZ2h0IC4zcyx0b3AgLjRzLGJvdHRvbSAuM3MsLXdlYmtpdC10cmFuc2Zvcm0gLjNzO292ZXJmbG93OmhpZGRlbn0uZWwtbm90aWZpY2F0aW9uLmxlZnR7bGVmdDoxNnB4fS5lbC1ub3RpZmljYXRpb25fX2dyb3Vwe21hcmdpbi1sZWZ0OjEzcHg7bWFyZ2luLXJpZ2h0OjhweH0uZWwtbm90aWZpY2F0aW9uX190aXRsZXtmb250LXdlaWdodDo3MDA7Zm9udC1zaXplOjE2cHg7Y29sb3I6IzMwMzEzMzttYXJnaW46MH0uZWwtbm90aWZpY2F0aW9uX19jb250ZW50e2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjIxcHg7bWFyZ2luOjZweCAwIDA7Y29sb3I6IzYwNjI2Njt0ZXh0LWFsaWduOmp1c3RpZnl9LmVsLW5vdGlmaWNhdGlvbl9fY29udGVudCBwe21hcmdpbjowfS5lbC1ub3RpZmljYXRpb25fX2ljb257aGVpZ2h0OjI0cHg7d2lkdGg6MjRweDtmb250LXNpemU6MjRweH0uZWwtbm90aWZpY2F0aW9uX19jbG9zZUJ0bntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MThweDtyaWdodDoxNXB4O2N1cnNvcjpwb2ludGVyO2NvbG9yOiM5MDkzOTk7Zm9udC1zaXplOjE2cHh9LmVsLW5vdGlmaWNhdGlvbl9fY2xvc2VCdG46aG92ZXJ7Y29sb3I6IzYwNjI2Nn0uZWwtbm90aWZpY2F0aW9uIC5lbC1pY29uLXN1Y2Nlc3N7Y29sb3I6IzY3QzIzQX0uZWwtbm90aWZpY2F0aW9uIC5lbC1pY29uLWVycm9ye2NvbG9yOiNGNTZDNkN9LmVsLW5vdGlmaWNhdGlvbiAuZWwtaWNvbi1pbmZve2NvbG9yOiM5MDkzOTl9LmVsLW5vdGlmaWNhdGlvbiAuZWwtaWNvbi13YXJuaW5ne2NvbG9yOiNFNkEyM0N9LmVsLW5vdGlmaWNhdGlvbi1mYWRlLWVudGVyLnJpZ2h0e3JpZ2h0OjA7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWCgxMDAlKTt0cmFuc2Zvcm06dHJhbnNsYXRlWCgxMDAlKX0uZWwtbm90aWZpY2F0aW9uLWZhZGUtZW50ZXIubGVmdHtsZWZ0OjA7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWCgtMTAwJSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTEwMCUpfS5lbC1pbnB1dC1udW1iZXJ7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MTgwcHg7bGluZS1oZWlnaHQ6MzhweH0uZWwtaW5wdXQtbnVtYmVyIC5lbC1pbnB1dHtkaXNwbGF5OmJsb2NrfS5lbC1pbnB1dC1udW1iZXIgLmVsLWlucHV0X19pbm5lcnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTtwYWRkaW5nLWxlZnQ6NTBweDtwYWRkaW5nLXJpZ2h0OjUwcHg7dGV4dC1hbGlnbjpjZW50ZXJ9LmVsLWlucHV0LW51bWJlcl9fZGVjcmVhc2UsLmVsLWlucHV0LW51bWJlcl9faW5jcmVhc2V7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxO3RvcDoxcHg7d2lkdGg6NDBweDtoZWlnaHQ6YXV0bzt0ZXh0LWFsaWduOmNlbnRlcjtiYWNrZ3JvdW5kOiNGNUY3RkE7Y29sb3I6IzYwNjI2NjtjdXJzb3I6cG9pbnRlcjtmb250LXNpemU6MTNweH0uZWwtaW5wdXQtbnVtYmVyX19kZWNyZWFzZTpob3ZlciwuZWwtaW5wdXQtbnVtYmVyX19pbmNyZWFzZTpob3Zlcntjb2xvcjojNDA5RUZGfS5lbC1pbnB1dC1udW1iZXJfX2RlY3JlYXNlOmhvdmVyOm5vdCguaXMtZGlzYWJsZWQpfi5lbC1pbnB1dCAuZWwtaW5wdXRfX2lubmVyOm5vdCguaXMtZGlzYWJsZWQpLC5lbC1pbnB1dC1udW1iZXJfX2luY3JlYXNlOmhvdmVyOm5vdCguaXMtZGlzYWJsZWQpfi5lbC1pbnB1dCAuZWwtaW5wdXRfX2lubmVyOm5vdCguaXMtZGlzYWJsZWQpe2JvcmRlci1jb2xvcjojNDA5RUZGfS5lbC1pbnB1dC1udW1iZXJfX2RlY3JlYXNlLmlzLWRpc2FibGVkLC5lbC1pbnB1dC1udW1iZXJfX2luY3JlYXNlLmlzLWRpc2FibGVke2NvbG9yOiNDMEM0Q0M7Y3Vyc29yOm5vdC1hbGxvd2VkfS5lbC1pbnB1dC1udW1iZXJfX2luY3JlYXNle3JpZ2h0OjFweDtib3JkZXItcmFkaXVzOjAgNHB4IDRweCAwO2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjRENERkU2fS5lbC1pbnB1dC1udW1iZXJfX2RlY3JlYXNle2xlZnQ6MXB4O2JvcmRlci1yYWRpdXM6NHB4IDAgMCA0cHg7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjRENERkU2fS5lbC1pbnB1dC1udW1iZXIuaXMtZGlzYWJsZWQgLmVsLWlucHV0LW51bWJlcl9fZGVjcmVhc2UsLmVsLWlucHV0LW51bWJlci5pcy1kaXNhYmxlZCAuZWwtaW5wdXQtbnVtYmVyX19pbmNyZWFzZXtib3JkZXItY29sb3I6I0U0RTdFRDtjb2xvcjojRTRFN0VEfS5lbC1pbnB1dC1udW1iZXIuaXMtZGlzYWJsZWQgLmVsLWlucHV0LW51bWJlcl9fZGVjcmVhc2U6aG92ZXIsLmVsLWlucHV0LW51bWJlci5pcy1kaXNhYmxlZCAuZWwtaW5wdXQtbnVtYmVyX19pbmNyZWFzZTpob3Zlcntjb2xvcjojRTRFN0VEO2N1cnNvcjpub3QtYWxsb3dlZH0uZWwtaW5wdXQtbnVtYmVyLS1tZWRpdW17d2lkdGg6MjAwcHg7bGluZS1oZWlnaHQ6MzRweH0uZWwtaW5wdXQtbnVtYmVyLS1tZWRpdW0gLmVsLWlucHV0LW51bWJlcl9fZGVjcmVhc2UsLmVsLWlucHV0LW51bWJlci0tbWVkaXVtIC5lbC1pbnB1dC1udW1iZXJfX2luY3JlYXNle3dpZHRoOjM2cHg7Zm9udC1zaXplOjE0cHh9LmVsLWlucHV0LW51bWJlci0tbWVkaXVtIC5lbC1pbnB1dF9faW5uZXJ7cGFkZGluZy1sZWZ0OjQzcHg7cGFkZGluZy1yaWdodDo0M3B4fS5lbC1pbnB1dC1udW1iZXItLXNtYWxse3dpZHRoOjEzMHB4O2xpbmUtaGVpZ2h0OjMwcHh9LmVsLWlucHV0LW51bWJlci0tc21hbGwgLmVsLWlucHV0LW51bWJlcl9fZGVjcmVhc2UsLmVsLWlucHV0LW51bWJlci0tc21hbGwgLmVsLWlucHV0LW51bWJlcl9faW5jcmVhc2V7d2lkdGg6MzJweDtmb250LXNpemU6MTNweH0uZWwtaW5wdXQtbnVtYmVyLS1zbWFsbCAuZWwtaW5wdXQtbnVtYmVyX19kZWNyZWFzZSBbY2xhc3MqPWVsLWljb25dLC5lbC1pbnB1dC1udW1iZXItLXNtYWxsIC5lbC1pbnB1dC1udW1iZXJfX2luY3JlYXNlIFtjbGFzcyo9ZWwtaWNvbl17LXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoLjkpO3RyYW5zZm9ybTpzY2FsZSguOSl9LmVsLWlucHV0LW51bWJlci0tc21hbGwgLmVsLWlucHV0X19pbm5lcntwYWRkaW5nLWxlZnQ6MzlweDtwYWRkaW5nLXJpZ2h0OjM5cHh9LmVsLWlucHV0LW51bWJlci0tbWluaXt3aWR0aDoxMzBweDtsaW5lLWhlaWdodDoyNnB4fS5lbC1pbnB1dC1udW1iZXItLW1pbmkgLmVsLWlucHV0LW51bWJlcl9fZGVjcmVhc2UsLmVsLWlucHV0LW51bWJlci0tbWluaSAuZWwtaW5wdXQtbnVtYmVyX19pbmNyZWFzZXt3aWR0aDoyOHB4O2ZvbnQtc2l6ZToxMnB4fS5lbC1pbnB1dC1udW1iZXItLW1pbmkgLmVsLWlucHV0LW51bWJlcl9fZGVjcmVhc2UgW2NsYXNzKj1lbC1pY29uXSwuZWwtaW5wdXQtbnVtYmVyLS1taW5pIC5lbC1pbnB1dC1udW1iZXJfX2luY3JlYXNlIFtjbGFzcyo9ZWwtaWNvbl17LXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoLjgpO3RyYW5zZm9ybTpzY2FsZSguOCl9LmVsLWlucHV0LW51bWJlci0tbWluaSAuZWwtaW5wdXRfX2lubmVye3BhZGRpbmctbGVmdDozNXB4O3BhZGRpbmctcmlnaHQ6MzVweH0uZWwtaW5wdXQtbnVtYmVyLmlzLXdpdGhvdXQtY29udHJvbHMgLmVsLWlucHV0X19pbm5lcntwYWRkaW5nLWxlZnQ6MTVweDtwYWRkaW5nLXJpZ2h0OjE1cHh9LmVsLWlucHV0LW51bWJlci5pcy1jb250cm9scy1yaWdodCAuZWwtaW5wdXRfX2lubmVye3BhZGRpbmctbGVmdDoxNXB4O3BhZGRpbmctcmlnaHQ6NTBweH0uZWwtaW5wdXQtbnVtYmVyLmlzLWNvbnRyb2xzLXJpZ2h0IC5lbC1pbnB1dC1udW1iZXJfX2RlY3JlYXNlLC5lbC1pbnB1dC1udW1iZXIuaXMtY29udHJvbHMtcmlnaHQgLmVsLWlucHV0LW51bWJlcl9faW5jcmVhc2V7aGVpZ2h0OmF1dG87bGluZS1oZWlnaHQ6MTlweH0uZWwtaW5wdXQtbnVtYmVyLmlzLWNvbnRyb2xzLXJpZ2h0IC5lbC1pbnB1dC1udW1iZXJfX2RlY3JlYXNlIFtjbGFzcyo9ZWwtaWNvbl0sLmVsLWlucHV0LW51bWJlci5pcy1jb250cm9scy1yaWdodCAuZWwtaW5wdXQtbnVtYmVyX19pbmNyZWFzZSBbY2xhc3MqPWVsLWljb25dey13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKC44KTt0cmFuc2Zvcm06c2NhbGUoLjgpfS5lbC1pbnB1dC1udW1iZXIuaXMtY29udHJvbHMtcmlnaHQgLmVsLWlucHV0LW51bWJlcl9faW5jcmVhc2V7Ym9yZGVyLXJhZGl1czowIDRweCAwIDA7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI0RDREZFNn0uZWwtaW5wdXQtbnVtYmVyLmlzLWNvbnRyb2xzLXJpZ2h0IC5lbC1pbnB1dC1udW1iZXJfX2RlY3JlYXNle3JpZ2h0OjFweDtib3R0b206MXB4O3RvcDphdXRvO2xlZnQ6YXV0bztib3JkZXItcmlnaHQ6bm9uZTtib3JkZXItbGVmdDoxcHggc29saWQgI0RDREZFNjtib3JkZXItcmFkaXVzOjAgMCA0cHh9LmVsLWlucHV0LW51bWJlci5pcy1jb250cm9scy1yaWdodFtjbGFzcyo9bWVkaXVtXSBbY2xhc3MqPWRlY3JlYXNlXSwuZWwtaW5wdXQtbnVtYmVyLmlzLWNvbnRyb2xzLXJpZ2h0W2NsYXNzKj1tZWRpdW1dIFtjbGFzcyo9aW5jcmVhc2Vde2xpbmUtaGVpZ2h0OjE3cHh9LmVsLWlucHV0LW51bWJlci5pcy1jb250cm9scy1yaWdodFtjbGFzcyo9c21hbGxdIFtjbGFzcyo9ZGVjcmVhc2VdLC5lbC1pbnB1dC1udW1iZXIuaXMtY29udHJvbHMtcmlnaHRbY2xhc3MqPXNtYWxsXSBbY2xhc3MqPWluY3JlYXNlXXtsaW5lLWhlaWdodDoxNXB4fS5lbC1pbnB1dC1udW1iZXIuaXMtY29udHJvbHMtcmlnaHRbY2xhc3MqPW1pbmldIFtjbGFzcyo9ZGVjcmVhc2VdLC5lbC1pbnB1dC1udW1iZXIuaXMtY29udHJvbHMtcmlnaHRbY2xhc3MqPW1pbmldIFtjbGFzcyo9aW5jcmVhc2Vde2xpbmUtaGVpZ2h0OjEzcHh9LmVsLXRvb2x0aXA6Zm9jdXM6aG92ZXIsLmVsLXRvb2x0aXA6Zm9jdXM6bm90KC5mb2N1c2luZyl7b3V0bGluZS13aWR0aDowfS5lbC10b29sdGlwX19wb3BwZXJ7cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo0cHg7cGFkZGluZzoxMHB4O3otaW5kZXg6MjAwMDtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxLjI7bWluLXdpZHRoOjEwcHg7d29yZC13cmFwOmJyZWFrLXdvcmR9LmVsLXRvb2x0aXBfX3BvcHBlciAucG9wcGVyX19hcnJvdywuZWwtdG9vbHRpcF9fcG9wcGVyIC5wb3BwZXJfX2Fycm93OjphZnRlcntwb3NpdGlvbjphYnNvbHV0ZTtkaXNwbGF5OmJsb2NrO3dpZHRoOjA7aGVpZ2h0OjA7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlci1zdHlsZTpzb2xpZH0uZWwtdG9vbHRpcF9fcG9wcGVyIC5wb3BwZXJfX2Fycm93e2JvcmRlci13aWR0aDo2cHh9LmVsLXRvb2x0aXBfX3BvcHBlciAucG9wcGVyX19hcnJvdzo6YWZ0ZXJ7Y29udGVudDpcXFwiIFxcXCI7Ym9yZGVyLXdpZHRoOjVweH0uZWwtYnV0dG9uLWdyb3VwOjphZnRlciwuZWwtYnV0dG9uLWdyb3VwOjpiZWZvcmUsLmVsLWNvbG9yLWRyb3Bkb3duX19tYWluLXdyYXBwZXI6OmFmdGVyLC5lbC1saW5rLmlzLXVuZGVybGluZTpob3ZlcjphZnRlciwuZWwtcGFnZS1oZWFkZXJfX2xlZnQ6OmFmdGVyLC5lbC1wcm9ncmVzcy1iYXJfX2lubmVyOjphZnRlciwuZWwtcm93OjphZnRlciwuZWwtcm93OjpiZWZvcmUsLmVsLXNsaWRlcjo6YWZ0ZXIsLmVsLXNsaWRlcjo6YmVmb3JlLC5lbC1zbGlkZXJfX2J1dHRvbi13cmFwcGVyOjphZnRlciwuZWwtdHJhbnNmZXItcGFuZWwgLmVsLXRyYW5zZmVyLXBhbmVsX19mb290ZXI6OmFmdGVyLC5lbC11cGxvYWQtY292ZXI6OmFmdGVyLC5lbC11cGxvYWQtbGlzdC0tcGljdHVyZS1jYXJkIC5lbC11cGxvYWQtbGlzdF9faXRlbS1hY3Rpb25zOjphZnRlcntjb250ZW50OlxcXCJcXFwifS5lbC10b29sdGlwX19wb3BwZXJbeC1wbGFjZW1lbnRePXRvcF17bWFyZ2luLWJvdHRvbToxMnB4fS5lbC10b29sdGlwX19wb3BwZXJbeC1wbGFjZW1lbnRePXRvcF0gLnBvcHBlcl9fYXJyb3d7Ym90dG9tOi02cHg7Ym9yZGVyLXRvcC1jb2xvcjojMzAzMTMzO2JvcmRlci1ib3R0b20td2lkdGg6MH0uZWwtdG9vbHRpcF9fcG9wcGVyW3gtcGxhY2VtZW50Xj10b3BdIC5wb3BwZXJfX2Fycm93OjphZnRlcntib3R0b206MXB4O21hcmdpbi1sZWZ0Oi01cHg7Ym9yZGVyLXRvcC1jb2xvcjojMzAzMTMzO2JvcmRlci1ib3R0b20td2lkdGg6MH0uZWwtdG9vbHRpcF9fcG9wcGVyW3gtcGxhY2VtZW50Xj1ib3R0b21de21hcmdpbi10b3A6MTJweH0uZWwtdG9vbHRpcF9fcG9wcGVyW3gtcGxhY2VtZW50Xj1ib3R0b21dIC5wb3BwZXJfX2Fycm93e3RvcDotNnB4O2JvcmRlci10b3Atd2lkdGg6MDtib3JkZXItYm90dG9tLWNvbG9yOiMzMDMxMzN9LmVsLXRvb2x0aXBfX3BvcHBlclt4LXBsYWNlbWVudF49Ym90dG9tXSAucG9wcGVyX19hcnJvdzo6YWZ0ZXJ7dG9wOjFweDttYXJnaW4tbGVmdDotNXB4O2JvcmRlci10b3Atd2lkdGg6MDtib3JkZXItYm90dG9tLWNvbG9yOiMzMDMxMzN9LmVsLXRvb2x0aXBfX3BvcHBlclt4LXBsYWNlbWVudF49cmlnaHRde21hcmdpbi1sZWZ0OjEycHh9LmVsLXRvb2x0aXBfX3BvcHBlclt4LXBsYWNlbWVudF49cmlnaHRdIC5wb3BwZXJfX2Fycm93e2xlZnQ6LTZweDtib3JkZXItcmlnaHQtY29sb3I6IzMwMzEzMztib3JkZXItbGVmdC13aWR0aDowfS5lbC10b29sdGlwX19wb3BwZXJbeC1wbGFjZW1lbnRePXJpZ2h0XSAucG9wcGVyX19hcnJvdzo6YWZ0ZXJ7Ym90dG9tOi01cHg7bGVmdDoxcHg7Ym9yZGVyLXJpZ2h0LWNvbG9yOiMzMDMxMzM7Ym9yZGVyLWxlZnQtd2lkdGg6MH0uZWwtdG9vbHRpcF9fcG9wcGVyW3gtcGxhY2VtZW50Xj1sZWZ0XXttYXJnaW4tcmlnaHQ6MTJweH0uZWwtdG9vbHRpcF9fcG9wcGVyW3gtcGxhY2VtZW50Xj1sZWZ0XSAucG9wcGVyX19hcnJvd3tyaWdodDotNnB4O2JvcmRlci1yaWdodC13aWR0aDowO2JvcmRlci1sZWZ0LWNvbG9yOiMzMDMxMzN9LmVsLXRvb2x0aXBfX3BvcHBlclt4LXBsYWNlbWVudF49bGVmdF0gLnBvcHBlcl9fYXJyb3c6OmFmdGVye3JpZ2h0OjFweDtib3R0b206LTVweDttYXJnaW4tbGVmdDotNXB4O2JvcmRlci1yaWdodC13aWR0aDowO2JvcmRlci1sZWZ0LWNvbG9yOiMzMDMxMzN9LmVsLXRvb2x0aXBfX3BvcHBlci5pcy1kYXJre2JhY2tncm91bmQ6IzMwMzEzMztjb2xvcjojRkZGfS5lbC10b29sdGlwX19wb3BwZXIuaXMtbGlnaHR7YmFja2dyb3VuZDojRkZGO2JvcmRlcjoxcHggc29saWQgIzMwMzEzM30uZWwtdG9vbHRpcF9fcG9wcGVyLmlzLWxpZ2h0W3gtcGxhY2VtZW50Xj10b3BdIC5wb3BwZXJfX2Fycm93e2JvcmRlci10b3AtY29sb3I6IzMwMzEzM30uZWwtdG9vbHRpcF9fcG9wcGVyLmlzLWxpZ2h0W3gtcGxhY2VtZW50Xj10b3BdIC5wb3BwZXJfX2Fycm93OjphZnRlcntib3JkZXItdG9wLWNvbG9yOiNGRkZ9LmVsLXRvb2x0aXBfX3BvcHBlci5pcy1saWdodFt4LXBsYWNlbWVudF49Ym90dG9tXSAucG9wcGVyX19hcnJvd3tib3JkZXItYm90dG9tLWNvbG9yOiMzMDMxMzN9LmVsLXRvb2x0aXBfX3BvcHBlci5pcy1saWdodFt4LXBsYWNlbWVudF49Ym90dG9tXSAucG9wcGVyX19hcnJvdzo6YWZ0ZXJ7Ym9yZGVyLWJvdHRvbS1jb2xvcjojRkZGfS5lbC10b29sdGlwX19wb3BwZXIuaXMtbGlnaHRbeC1wbGFjZW1lbnRePWxlZnRdIC5wb3BwZXJfX2Fycm93e2JvcmRlci1sZWZ0LWNvbG9yOiMzMDMxMzN9LmVsLXRvb2x0aXBfX3BvcHBlci5pcy1saWdodFt4LXBsYWNlbWVudF49bGVmdF0gLnBvcHBlcl9fYXJyb3c6OmFmdGVye2JvcmRlci1sZWZ0LWNvbG9yOiNGRkZ9LmVsLXRvb2x0aXBfX3BvcHBlci5pcy1saWdodFt4LXBsYWNlbWVudF49cmlnaHRdIC5wb3BwZXJfX2Fycm93e2JvcmRlci1yaWdodC1jb2xvcjojMzAzMTMzfS5lbC10b29sdGlwX19wb3BwZXIuaXMtbGlnaHRbeC1wbGFjZW1lbnRePXJpZ2h0XSAucG9wcGVyX19hcnJvdzo6YWZ0ZXJ7Ym9yZGVyLXJpZ2h0LWNvbG9yOiNGRkZ9LmVsLXNsaWRlcjo6YWZ0ZXIsLmVsLXNsaWRlcjo6YmVmb3Jle2Rpc3BsYXk6dGFibGV9LmVsLXNsaWRlcl9fYnV0dG9uLXdyYXBwZXIgLmVsLXRvb2x0aXAsLmVsLXNsaWRlcl9fYnV0dG9uLXdyYXBwZXI6OmFmdGVye2Rpc3BsYXk6aW5saW5lLWJsb2NrO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uZWwtc2xpZGVyOjphZnRlcntjbGVhcjpib3RofS5lbC1zbGlkZXJfX3J1bndheXt3aWR0aDoxMDAlO2hlaWdodDo2cHg7bWFyZ2luOjE2cHggMDtiYWNrZ3JvdW5kLWNvbG9yOiNFNEU3RUQ7Ym9yZGVyLXJhZGl1czozcHg7cG9zaXRpb246cmVsYXRpdmU7Y3Vyc29yOnBvaW50ZXI7dmVydGljYWwtYWxpZ246bWlkZGxlfS5lbC1zbGlkZXJfX3J1bndheS5zaG93LWlucHV0e21hcmdpbi1yaWdodDoxNjBweDt3aWR0aDphdXRvfS5lbC1zbGlkZXJfX3J1bndheS5kaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdH0uZWwtc2xpZGVyX19ydW53YXkuZGlzYWJsZWQgLmVsLXNsaWRlcl9fYmFye2JhY2tncm91bmQtY29sb3I6I0MwQzRDQ30uZWwtc2xpZGVyX19ydW53YXkuZGlzYWJsZWQgLmVsLXNsaWRlcl9fYnV0dG9ue2JvcmRlci1jb2xvcjojQzBDNENDfS5lbC1zbGlkZXJfX3J1bndheS5kaXNhYmxlZCAuZWwtc2xpZGVyX19idXR0b24td3JhcHBlci5kcmFnZ2luZywuZWwtc2xpZGVyX19ydW53YXkuZGlzYWJsZWQgLmVsLXNsaWRlcl9fYnV0dG9uLXdyYXBwZXIuaG92ZXIsLmVsLXNsaWRlcl9fcnVud2F5LmRpc2FibGVkIC5lbC1zbGlkZXJfX2J1dHRvbi13cmFwcGVyOmhvdmVye2N1cnNvcjpub3QtYWxsb3dlZH0uZWwtc2xpZGVyX19ydW53YXkuZGlzYWJsZWQgLmVsLXNsaWRlcl9fYnV0dG9uLmRyYWdnaW5nLC5lbC1zbGlkZXJfX3J1bndheS5kaXNhYmxlZCAuZWwtc2xpZGVyX19idXR0b24uaG92ZXIsLmVsLXNsaWRlcl9fcnVud2F5LmRpc2FibGVkIC5lbC1zbGlkZXJfX2J1dHRvbjpob3Zlcnstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSgxKTt0cmFuc2Zvcm06c2NhbGUoMSk7Y3Vyc29yOm5vdC1hbGxvd2VkfS5lbC1zbGlkZXJfX2J1dHRvbi13cmFwcGVyLC5lbC1zbGlkZXJfX3N0b3B7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWCgtNTAlKTtwb3NpdGlvbjphYnNvbHV0ZX0uZWwtc2xpZGVyX19pbnB1dHtmbG9hdDpyaWdodDttYXJnaW4tdG9wOjNweDt3aWR0aDoxMzBweH0uZWwtc2xpZGVyX19pbnB1dC5lbC1pbnB1dC1udW1iZXItLW1pbml7bWFyZ2luLXRvcDo1cHh9LmVsLXNsaWRlcl9faW5wdXQuZWwtaW5wdXQtbnVtYmVyLS1tZWRpdW17bWFyZ2luLXRvcDowfS5lbC1zbGlkZXJfX2lucHV0LmVsLWlucHV0LW51bWJlci0tbGFyZ2V7bWFyZ2luLXRvcDotMnB4fS5lbC1zbGlkZXJfX2JhcntoZWlnaHQ6NnB4O2JhY2tncm91bmQtY29sb3I6IzQwOUVGRjtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjNweDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjNweDtwb3NpdGlvbjphYnNvbHV0ZX0uZWwtc2xpZGVyX19idXR0b24td3JhcHBlcntoZWlnaHQ6MzZweDt3aWR0aDozNnB4O3otaW5kZXg6MTAwMTt0b3A6LTE1cHg7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTUwJSk7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDt0ZXh0LWFsaWduOmNlbnRlcjstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7bGluZS1oZWlnaHQ6bm9ybWFsfS5lbC1pbWFnZS12aWV3ZXJfX2J0biwuZWwtc2xpZGVyX19idXR0b24sLmVsLXN0ZXBfX2ljb24taW5uZXJ7LW1vei11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lfS5lbC1zbGlkZXJfX2J1dHRvbi13cmFwcGVyOjphZnRlcntoZWlnaHQ6MTAwJX0uZWwtc2xpZGVyX19idXR0b24td3JhcHBlci5ob3ZlciwuZWwtc2xpZGVyX19idXR0b24td3JhcHBlcjpob3ZlcntjdXJzb3I6LXdlYmtpdC1ncmFiO2N1cnNvcjpncmFifS5lbC1zbGlkZXJfX2J1dHRvbi13cmFwcGVyLmRyYWdnaW5ne2N1cnNvcjotd2Via2l0LWdyYWJiaW5nO2N1cnNvcjpncmFiYmluZ30uZWwtc2xpZGVyX19idXR0b257d2lkdGg6MTZweDtoZWlnaHQ6MTZweDtib3JkZXI6MnB4IHNvbGlkICM0MDlFRkY7YmFja2dyb3VuZC1jb2xvcjojRkZGO2JvcmRlci1yYWRpdXM6NTAlOy13ZWJraXQtdHJhbnNpdGlvbjouMnM7dHJhbnNpdGlvbjouMnM7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmV9LmVsLXNsaWRlcl9fYnV0dG9uLmRyYWdnaW5nLC5lbC1zbGlkZXJfX2J1dHRvbi5ob3ZlciwuZWwtc2xpZGVyX19idXR0b246aG92ZXJ7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoMS4yKTt0cmFuc2Zvcm06c2NhbGUoMS4yKX0uZWwtc2xpZGVyX19idXR0b24uaG92ZXIsLmVsLXNsaWRlcl9fYnV0dG9uOmhvdmVye2N1cnNvcjotd2Via2l0LWdyYWI7Y3Vyc29yOmdyYWJ9LmVsLXNsaWRlcl9fYnV0dG9uLmRyYWdnaW5ne2N1cnNvcjotd2Via2l0LWdyYWJiaW5nO2N1cnNvcjpncmFiYmluZ30uZWwtc2xpZGVyX19zdG9we2hlaWdodDo2cHg7d2lkdGg6NnB4O2JvcmRlci1yYWRpdXM6MTAwJTtiYWNrZ3JvdW5kLWNvbG9yOiNGRkY7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTUwJSl9LmVsLXNsaWRlcl9fbWFya3N7dG9wOjA7bGVmdDoxMnB4O3dpZHRoOjE4cHg7aGVpZ2h0OjEwMCV9LmVsLXNsaWRlcl9fbWFya3MtdGV4dHtwb3NpdGlvbjphYnNvbHV0ZTstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVYKC01MCUpO3RyYW5zZm9ybTp0cmFuc2xhdGVYKC01MCUpO2ZvbnQtc2l6ZToxNHB4O2NvbG9yOiM5MDkzOTk7bWFyZ2luLXRvcDoxNXB4fS5lbC1zbGlkZXIuaXMtdmVydGljYWx7cG9zaXRpb246cmVsYXRpdmV9LmVsLXNsaWRlci5pcy12ZXJ0aWNhbCAuZWwtc2xpZGVyX19ydW53YXl7d2lkdGg6NnB4O2hlaWdodDoxMDAlO21hcmdpbjowIDE2cHh9LmVsLXNsaWRlci5pcy12ZXJ0aWNhbCAuZWwtc2xpZGVyX19iYXJ7d2lkdGg6NnB4O2hlaWdodDphdXRvO2JvcmRlci1yYWRpdXM6MCAwIDNweCAzcHh9LmVsLXNsaWRlci5pcy12ZXJ0aWNhbCAuZWwtc2xpZGVyX19idXR0b24td3JhcHBlcnt0b3A6YXV0bztsZWZ0Oi0xNXB4Oy13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoNTAlKTt0cmFuc2Zvcm06dHJhbnNsYXRlWSg1MCUpfS5lbC1zbGlkZXIuaXMtdmVydGljYWwgLmVsLXNsaWRlcl9fc3RvcHstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVZKDUwJSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoNTAlKX0uZWwtc2xpZGVyLmlzLXZlcnRpY2FsLmVsLXNsaWRlci0td2l0aC1pbnB1dHtwYWRkaW5nLWJvdHRvbTo1OHB4fS5lbC1zbGlkZXIuaXMtdmVydGljYWwuZWwtc2xpZGVyLS13aXRoLWlucHV0IC5lbC1zbGlkZXJfX2lucHV0e292ZXJmbG93OnZpc2libGU7ZmxvYXQ6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTtib3R0b206MjJweDt3aWR0aDozNnB4O21hcmdpbi10b3A6MTVweH0uZWwtc2xpZGVyLmlzLXZlcnRpY2FsLmVsLXNsaWRlci0td2l0aC1pbnB1dCAuZWwtc2xpZGVyX19pbnB1dCAuZWwtaW5wdXRfX2lubmVye3RleHQtYWxpZ246Y2VudGVyO3BhZGRpbmctbGVmdDo1cHg7cGFkZGluZy1yaWdodDo1cHh9LmVsLXNsaWRlci5pcy12ZXJ0aWNhbC5lbC1zbGlkZXItLXdpdGgtaW5wdXQgLmVsLXNsaWRlcl9faW5wdXQgLmVsLWlucHV0LW51bWJlcl9fZGVjcmVhc2UsLmVsLXNsaWRlci5pcy12ZXJ0aWNhbC5lbC1zbGlkZXItLXdpdGgtaW5wdXQgLmVsLXNsaWRlcl9faW5wdXQgLmVsLWlucHV0LW51bWJlcl9faW5jcmVhc2V7dG9wOjMycHg7bWFyZ2luLXRvcDotMXB4O2JvcmRlcjoxcHggc29saWQgI0RDREZFNjtsaW5lLWhlaWdodDoyMHB4Oy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDstd2Via2l0LXRyYW5zaXRpb246Ym9yZGVyLWNvbG9yIC4ycyBjdWJpYy1iZXppZXIoLjY0NSwuMDQ1LC4zNTUsMSk7dHJhbnNpdGlvbjpib3JkZXItY29sb3IgLjJzIGN1YmljLWJlemllciguNjQ1LC4wNDUsLjM1NSwxKX0uZWwtc2xpZGVyLmlzLXZlcnRpY2FsLmVsLXNsaWRlci0td2l0aC1pbnB1dCAuZWwtc2xpZGVyX19pbnB1dCAuZWwtaW5wdXQtbnVtYmVyX19kZWNyZWFzZXt3aWR0aDoxOHB4O3JpZ2h0OjE4cHg7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czo0cHh9LmVsLXNsaWRlci5pcy12ZXJ0aWNhbC5lbC1zbGlkZXItLXdpdGgtaW5wdXQgLmVsLXNsaWRlcl9faW5wdXQgLmVsLWlucHV0LW51bWJlcl9faW5jcmVhc2V7d2lkdGg6MTlweDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czo0cHh9LmVsLXNsaWRlci5pcy12ZXJ0aWNhbC5lbC1zbGlkZXItLXdpdGgtaW5wdXQgLmVsLXNsaWRlcl9faW5wdXQgLmVsLWlucHV0LW51bWJlcl9faW5jcmVhc2V+LmVsLWlucHV0IC5lbC1pbnB1dF9faW5uZXJ7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjB9LmVsLXNsaWRlci5pcy12ZXJ0aWNhbC5lbC1zbGlkZXItLXdpdGgtaW5wdXQgLmVsLXNsaWRlcl9faW5wdXQ6aG92ZXIgLmVsLWlucHV0LW51bWJlcl9fZGVjcmVhc2UsLmVsLXNsaWRlci5pcy12ZXJ0aWNhbC5lbC1zbGlkZXItLXdpdGgtaW5wdXQgLmVsLXNsaWRlcl9faW5wdXQ6aG92ZXIgLmVsLWlucHV0LW51bWJlcl9faW5jcmVhc2V7Ym9yZGVyLWNvbG9yOiNDMEM0Q0N9LmVsLXNsaWRlci5pcy12ZXJ0aWNhbC5lbC1zbGlkZXItLXdpdGgtaW5wdXQgLmVsLXNsaWRlcl9faW5wdXQ6YWN0aXZlIC5lbC1pbnB1dC1udW1iZXJfX2RlY3JlYXNlLC5lbC1zbGlkZXIuaXMtdmVydGljYWwuZWwtc2xpZGVyLS13aXRoLWlucHV0IC5lbC1zbGlkZXJfX2lucHV0OmFjdGl2ZSAuZWwtaW5wdXQtbnVtYmVyX19pbmNyZWFzZXtib3JkZXItY29sb3I6IzQwOUVGRn0uZWwtc2xpZGVyLmlzLXZlcnRpY2FsIC5lbC1zbGlkZXJfX21hcmtzLXRleHR7bWFyZ2luLXRvcDowO2xlZnQ6MTVweDstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVZKDUwJSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoNTAlKX0uZWwtbG9hZGluZy1wYXJlbnQtLXJlbGF0aXZle3Bvc2l0aW9uOnJlbGF0aXZlIWltcG9ydGFudH0uZWwtbG9hZGluZy1wYXJlbnQtLWhpZGRlbntvdmVyZmxvdzpoaWRkZW4haW1wb3J0YW50fS5lbC1sb2FkaW5nLW1hc2t7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoyMDAwO2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuOSk7bWFyZ2luOjA7dG9wOjA7cmlnaHQ6MDtib3R0b206MDtsZWZ0OjA7LXdlYmtpdC10cmFuc2l0aW9uOm9wYWNpdHkgLjNzO3RyYW5zaXRpb246b3BhY2l0eSAuM3N9LmVsLWxvYWRpbmctbWFzay5pcy1mdWxsc2NyZWVue3Bvc2l0aW9uOmZpeGVkfS5lbC1sb2FkaW5nLW1hc2suaXMtZnVsbHNjcmVlbiAuZWwtbG9hZGluZy1zcGlubmVye21hcmdpbi10b3A6LTI1cHh9LmVsLWxvYWRpbmctbWFzay5pcy1mdWxsc2NyZWVuIC5lbC1sb2FkaW5nLXNwaW5uZXIgLmNpcmN1bGFye2hlaWdodDo1MHB4O3dpZHRoOjUwcHh9LmVsLWxvYWRpbmctc3Bpbm5lcnt0b3A6NTAlO21hcmdpbi10b3A6LTIxcHg7d2lkdGg6MTAwJTt0ZXh0LWFsaWduOmNlbnRlcjtwb3NpdGlvbjphYnNvbHV0ZX0uZWwtY29sLXB1bGwtMCwuZWwtY29sLXB1bGwtMSwuZWwtY29sLXB1bGwtMTAsLmVsLWNvbC1wdWxsLTExLC5lbC1jb2wtcHVsbC0xMiwuZWwtY29sLXB1bGwtMTMsLmVsLWNvbC1wdWxsLTE0LC5lbC1jb2wtcHVsbC0xNSwuZWwtY29sLXB1bGwtMTYsLmVsLWNvbC1wdWxsLTE3LC5lbC1jb2wtcHVsbC0xOCwuZWwtY29sLXB1bGwtMTksLmVsLWNvbC1wdWxsLTIsLmVsLWNvbC1wdWxsLTIwLC5lbC1jb2wtcHVsbC0yMSwuZWwtY29sLXB1bGwtMjIsLmVsLWNvbC1wdWxsLTIzLC5lbC1jb2wtcHVsbC0yNCwuZWwtY29sLXB1bGwtMywuZWwtY29sLXB1bGwtNCwuZWwtY29sLXB1bGwtNSwuZWwtY29sLXB1bGwtNiwuZWwtY29sLXB1bGwtNywuZWwtY29sLXB1bGwtOCwuZWwtY29sLXB1bGwtOSwuZWwtY29sLXB1c2gtMCwuZWwtY29sLXB1c2gtMSwuZWwtY29sLXB1c2gtMTAsLmVsLWNvbC1wdXNoLTExLC5lbC1jb2wtcHVzaC0xMiwuZWwtY29sLXB1c2gtMTMsLmVsLWNvbC1wdXNoLTE0LC5lbC1jb2wtcHVzaC0xNSwuZWwtY29sLXB1c2gtMTYsLmVsLWNvbC1wdXNoLTE3LC5lbC1jb2wtcHVzaC0xOCwuZWwtY29sLXB1c2gtMTksLmVsLWNvbC1wdXNoLTIsLmVsLWNvbC1wdXNoLTIwLC5lbC1jb2wtcHVzaC0yMSwuZWwtY29sLXB1c2gtMjIsLmVsLWNvbC1wdXNoLTIzLC5lbC1jb2wtcHVzaC0yNCwuZWwtY29sLXB1c2gtMywuZWwtY29sLXB1c2gtNCwuZWwtY29sLXB1c2gtNSwuZWwtY29sLXB1c2gtNiwuZWwtY29sLXB1c2gtNywuZWwtY29sLXB1c2gtOCwuZWwtY29sLXB1c2gtOSwuZWwtcm93LC5lbC11cGxvYWQtZHJhZ2dlciwuZWwtdXBsb2FkLWxpc3RfX2l0ZW17cG9zaXRpb246cmVsYXRpdmV9LmVsLWxvYWRpbmctc3Bpbm5lciAuZWwtbG9hZGluZy10ZXh0e2NvbG9yOiM0MDlFRkY7bWFyZ2luOjNweCAwO2ZvbnQtc2l6ZToxNHB4fS5lbC1sb2FkaW5nLXNwaW5uZXIgLmNpcmN1bGFye2hlaWdodDo0MnB4O3dpZHRoOjQycHg7LXdlYmtpdC1hbmltYXRpb246bG9hZGluZy1yb3RhdGUgMnMgbGluZWFyIGluZmluaXRlO2FuaW1hdGlvbjpsb2FkaW5nLXJvdGF0ZSAycyBsaW5lYXIgaW5maW5pdGV9LmVsLWxvYWRpbmctc3Bpbm5lciAucGF0aHstd2Via2l0LWFuaW1hdGlvbjpsb2FkaW5nLWRhc2ggMS41cyBlYXNlLWluLW91dCBpbmZpbml0ZTthbmltYXRpb246bG9hZGluZy1kYXNoIDEuNXMgZWFzZS1pbi1vdXQgaW5maW5pdGU7c3Ryb2tlLWRhc2hhcnJheTo5MCwxNTA7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utd2lkdGg6MjtzdHJva2U6IzQwOUVGRjtzdHJva2UtbGluZWNhcDpyb3VuZH0uZWwtbG9hZGluZy1zcGlubmVyIGl7Y29sb3I6IzQwOUVGRn1ALXdlYmtpdC1rZXlmcmFtZXMgbG9hZGluZy1yb3RhdGV7MTAwJXstd2Via2l0LXRyYW5zZm9ybTpyb3RhdGUoMzYwZGVnKTt0cmFuc2Zvcm06cm90YXRlKDM2MGRlZyl9fUBrZXlmcmFtZXMgbG9hZGluZy1yb3RhdGV7MTAwJXstd2Via2l0LXRyYW5zZm9ybTpyb3RhdGUoMzYwZGVnKTt0cmFuc2Zvcm06cm90YXRlKDM2MGRlZyl9fUAtd2Via2l0LWtleWZyYW1lcyBsb2FkaW5nLWRhc2h7MCV7c3Ryb2tlLWRhc2hhcnJheToxLDIwMDtzdHJva2UtZGFzaG9mZnNldDowfTUwJXtzdHJva2UtZGFzaGFycmF5OjkwLDE1MDtzdHJva2UtZGFzaG9mZnNldDotNDBweH0xMDAle3N0cm9rZS1kYXNoYXJyYXk6OTAsMTUwO3N0cm9rZS1kYXNob2Zmc2V0Oi0xMjBweH19QGtleWZyYW1lcyBsb2FkaW5nLWRhc2h7MCV7c3Ryb2tlLWRhc2hhcnJheToxLDIwMDtzdHJva2UtZGFzaG9mZnNldDowfTUwJXtzdHJva2UtZGFzaGFycmF5OjkwLDE1MDtzdHJva2UtZGFzaG9mZnNldDotNDBweH0xMDAle3N0cm9rZS1kYXNoYXJyYXk6OTAsMTUwO3N0cm9rZS1kYXNob2Zmc2V0Oi0xMjBweH19LmVsLXJvd3std2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3h9LmVsLXJvdzo6YWZ0ZXIsLmVsLXJvdzo6YmVmb3Jle2Rpc3BsYXk6dGFibGV9LmVsLXJvdzo6YWZ0ZXJ7Y2xlYXI6Ym90aH0uZWwtcm93LS1mbGV4e2Rpc3BsYXk6LXdlYmtpdC1ib3g7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXh9LmVsLWNvbC0wLC5lbC1yb3ctLWZsZXg6YWZ0ZXIsLmVsLXJvdy0tZmxleDpiZWZvcmV7ZGlzcGxheTpub25lfS5lbC1yb3ctLWZsZXguaXMtanVzdGlmeS1jZW50ZXJ7LXdlYmtpdC1ib3gtcGFjazpjZW50ZXI7LW1zLWZsZXgtcGFjazpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn0uZWwtcm93LS1mbGV4LmlzLWp1c3RpZnktZW5key13ZWJraXQtYm94LXBhY2s6ZW5kOy1tcy1mbGV4LXBhY2s6ZW5kO2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uZWwtcm93LS1mbGV4LmlzLWp1c3RpZnktc3BhY2UtYmV0d2Vlbnstd2Via2l0LWJveC1wYWNrOmp1c3RpZnk7LW1zLWZsZXgtcGFjazpqdXN0aWZ5O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufS5lbC1yb3ctLWZsZXguaXMtanVzdGlmeS1zcGFjZS1hcm91bmR7LW1zLWZsZXgtcGFjazpkaXN0cmlidXRlO2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmR9LmVsLXJvdy0tZmxleC5pcy1hbGlnbi10b3B7LXdlYmtpdC1ib3gtYWxpZ246c3RhcnQ7LW1zLWZsZXgtYWxpZ246c3RhcnQ7YWxpZ24taXRlbXM6ZmxleC1zdGFydH0uZWwtcm93LS1mbGV4LmlzLWFsaWduLW1pZGRsZXstd2Via2l0LWJveC1hbGlnbjpjZW50ZXI7LW1zLWZsZXgtYWxpZ246Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcn0uZWwtcm93LS1mbGV4LmlzLWFsaWduLWJvdHRvbXstd2Via2l0LWJveC1hbGlnbjplbmQ7LW1zLWZsZXgtYWxpZ246ZW5kO2FsaWduLWl0ZW1zOmZsZXgtZW5kfVtjbGFzcyo9ZWwtY29sLV17ZmxvYXQ6bGVmdDstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3h9LmVsLWNvbC0we3dpZHRoOjAlfS5lbC1jb2wtcHVsbC0we3JpZ2h0OjB9LmVsLWNvbC1wdXNoLTB7bGVmdDowfS5lbC1jb2wtMXt3aWR0aDo0LjE2NjY3JX0uZWwtY29sLW9mZnNldC0xe21hcmdpbi1sZWZ0OjQuMTY2NjclfS5lbC1jb2wtcHVsbC0xe3JpZ2h0OjQuMTY2NjclfS5lbC1jb2wtcHVzaC0xe2xlZnQ6NC4xNjY2NyV9LmVsLWNvbC0ye3dpZHRoOjguMzMzMzMlfS5lbC1jb2wtb2Zmc2V0LTJ7bWFyZ2luLWxlZnQ6OC4zMzMzMyV9LmVsLWNvbC1wdWxsLTJ7cmlnaHQ6OC4zMzMzMyV9LmVsLWNvbC1wdXNoLTJ7bGVmdDo4LjMzMzMzJX0uZWwtY29sLTN7d2lkdGg6MTIuNSV9LmVsLWNvbC1vZmZzZXQtM3ttYXJnaW4tbGVmdDoxMi41JX0uZWwtY29sLXB1bGwtM3tyaWdodDoxMi41JX0uZWwtY29sLXB1c2gtM3tsZWZ0OjEyLjUlfS5lbC1jb2wtNHt3aWR0aDoxNi42NjY2NyV9LmVsLWNvbC1vZmZzZXQtNHttYXJnaW4tbGVmdDoxNi42NjY2NyV9LmVsLWNvbC1wdWxsLTR7cmlnaHQ6MTYuNjY2NjclfS5lbC1jb2wtcHVzaC00e2xlZnQ6MTYuNjY2NjclfS5lbC1jb2wtNXt3aWR0aDoyMC44MzMzMyV9LmVsLWNvbC1vZmZzZXQtNXttYXJnaW4tbGVmdDoyMC44MzMzMyV9LmVsLWNvbC1wdWxsLTV7cmlnaHQ6MjAuODMzMzMlfS5lbC1jb2wtcHVzaC01e2xlZnQ6MjAuODMzMzMlfS5lbC1jb2wtNnt3aWR0aDoyNSV9LmVsLWNvbC1vZmZzZXQtNnttYXJnaW4tbGVmdDoyNSV9LmVsLWNvbC1wdWxsLTZ7cmlnaHQ6MjUlfS5lbC1jb2wtcHVzaC02e2xlZnQ6MjUlfS5lbC1jb2wtN3t3aWR0aDoyOS4xNjY2NyV9LmVsLWNvbC1vZmZzZXQtN3ttYXJnaW4tbGVmdDoyOS4xNjY2NyV9LmVsLWNvbC1wdWxsLTd7cmlnaHQ6MjkuMTY2NjclfS5lbC1jb2wtcHVzaC03e2xlZnQ6MjkuMTY2NjclfS5lbC1jb2wtOHt3aWR0aDozMy4zMzMzMyV9LmVsLWNvbC1vZmZzZXQtOHttYXJnaW4tbGVmdDozMy4zMzMzMyV9LmVsLWNvbC1wdWxsLTh7cmlnaHQ6MzMuMzMzMzMlfS5lbC1jb2wtcHVzaC04e2xlZnQ6MzMuMzMzMzMlfS5lbC1jb2wtOXt3aWR0aDozNy41JX0uZWwtY29sLW9mZnNldC05e21hcmdpbi1sZWZ0OjM3LjUlfS5lbC1jb2wtcHVsbC05e3JpZ2h0OjM3LjUlfS5lbC1jb2wtcHVzaC05e2xlZnQ6MzcuNSV9LmVsLWNvbC0xMHt3aWR0aDo0MS42NjY2NyV9LmVsLWNvbC1vZmZzZXQtMTB7bWFyZ2luLWxlZnQ6NDEuNjY2NjclfS5lbC1jb2wtcHVsbC0xMHtyaWdodDo0MS42NjY2NyV9LmVsLWNvbC1wdXNoLTEwe2xlZnQ6NDEuNjY2NjclfS5lbC1jb2wtMTF7d2lkdGg6NDUuODMzMzMlfS5lbC1jb2wtb2Zmc2V0LTExe21hcmdpbi1sZWZ0OjQ1LjgzMzMzJX0uZWwtY29sLXB1bGwtMTF7cmlnaHQ6NDUuODMzMzMlfS5lbC1jb2wtcHVzaC0xMXtsZWZ0OjQ1LjgzMzMzJX0uZWwtY29sLTEye3dpZHRoOjUwJX0uZWwtY29sLW9mZnNldC0xMnttYXJnaW4tbGVmdDo1MCV9LmVsLWNvbC1wdWxsLTEye3JpZ2h0OjUwJX0uZWwtY29sLXB1c2gtMTJ7bGVmdDo1MCV9LmVsLWNvbC0xM3t3aWR0aDo1NC4xNjY2NyV9LmVsLWNvbC1vZmZzZXQtMTN7bWFyZ2luLWxlZnQ6NTQuMTY2NjclfS5lbC1jb2wtcHVsbC0xM3tyaWdodDo1NC4xNjY2NyV9LmVsLWNvbC1wdXNoLTEze2xlZnQ6NTQuMTY2NjclfS5lbC1jb2wtMTR7d2lkdGg6NTguMzMzMzMlfS5lbC1jb2wtb2Zmc2V0LTE0e21hcmdpbi1sZWZ0OjU4LjMzMzMzJX0uZWwtY29sLXB1bGwtMTR7cmlnaHQ6NTguMzMzMzMlfS5lbC1jb2wtcHVzaC0xNHtsZWZ0OjU4LjMzMzMzJX0uZWwtY29sLTE1e3dpZHRoOjYyLjUlfS5lbC1jb2wtb2Zmc2V0LTE1e21hcmdpbi1sZWZ0OjYyLjUlfS5lbC1jb2wtcHVsbC0xNXtyaWdodDo2Mi41JX0uZWwtY29sLXB1c2gtMTV7bGVmdDo2Mi41JX0uZWwtY29sLTE2e3dpZHRoOjY2LjY2NjY3JX0uZWwtY29sLW9mZnNldC0xNnttYXJnaW4tbGVmdDo2Ni42NjY2NyV9LmVsLWNvbC1wdWxsLTE2e3JpZ2h0OjY2LjY2NjY3JX0uZWwtY29sLXB1c2gtMTZ7bGVmdDo2Ni42NjY2NyV9LmVsLWNvbC0xN3t3aWR0aDo3MC44MzMzMyV9LmVsLWNvbC1vZmZzZXQtMTd7bWFyZ2luLWxlZnQ6NzAuODMzMzMlfS5lbC1jb2wtcHVsbC0xN3tyaWdodDo3MC44MzMzMyV9LmVsLWNvbC1wdXNoLTE3e2xlZnQ6NzAuODMzMzMlfS5lbC1jb2wtMTh7d2lkdGg6NzUlfS5lbC1jb2wtb2Zmc2V0LTE4e21hcmdpbi1sZWZ0Ojc1JX0uZWwtY29sLXB1bGwtMTh7cmlnaHQ6NzUlfS5lbC1jb2wtcHVzaC0xOHtsZWZ0Ojc1JX0uZWwtY29sLTE5e3dpZHRoOjc5LjE2NjY3JX0uZWwtY29sLW9mZnNldC0xOXttYXJnaW4tbGVmdDo3OS4xNjY2NyV9LmVsLWNvbC1wdWxsLTE5e3JpZ2h0Ojc5LjE2NjY3JX0uZWwtY29sLXB1c2gtMTl7bGVmdDo3OS4xNjY2NyV9LmVsLWNvbC0yMHt3aWR0aDo4My4zMzMzMyV9LmVsLWNvbC1vZmZzZXQtMjB7bWFyZ2luLWxlZnQ6ODMuMzMzMzMlfS5lbC1jb2wtcHVsbC0yMHtyaWdodDo4My4zMzMzMyV9LmVsLWNvbC1wdXNoLTIwe2xlZnQ6ODMuMzMzMzMlfS5lbC1jb2wtMjF7d2lkdGg6ODcuNSV9LmVsLWNvbC1vZmZzZXQtMjF7bWFyZ2luLWxlZnQ6ODcuNSV9LmVsLWNvbC1wdWxsLTIxe3JpZ2h0Ojg3LjUlfS5lbC1jb2wtcHVzaC0yMXtsZWZ0Ojg3LjUlfS5lbC1jb2wtMjJ7d2lkdGg6OTEuNjY2NjclfS5lbC1jb2wtb2Zmc2V0LTIye21hcmdpbi1sZWZ0OjkxLjY2NjY3JX0uZWwtY29sLXB1bGwtMjJ7cmlnaHQ6OTEuNjY2NjclfS5lbC1jb2wtcHVzaC0yMntsZWZ0OjkxLjY2NjY3JX0uZWwtY29sLTIze3dpZHRoOjk1LjgzMzMzJX0uZWwtY29sLW9mZnNldC0yM3ttYXJnaW4tbGVmdDo5NS44MzMzMyV9LmVsLWNvbC1wdWxsLTIze3JpZ2h0Ojk1LjgzMzMzJX0uZWwtY29sLXB1c2gtMjN7bGVmdDo5NS44MzMzMyV9LmVsLWNvbC0yNHt3aWR0aDoxMDAlfS5lbC1jb2wtb2Zmc2V0LTI0e21hcmdpbi1sZWZ0OjEwMCV9LmVsLWNvbC1wdWxsLTI0e3JpZ2h0OjEwMCV9LmVsLWNvbC1wdXNoLTI0e2xlZnQ6MTAwJX1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NzY3cHgpey5lbC1jb2wteHMtMHtkaXNwbGF5Om5vbmU7d2lkdGg6MCV9LmVsLWNvbC14cy1vZmZzZXQtMHttYXJnaW4tbGVmdDowfS5lbC1jb2wteHMtcHVsbC0we3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjB9LmVsLWNvbC14cy1wdXNoLTB7cG9zaXRpb246cmVsYXRpdmU7bGVmdDowfS5lbC1jb2wteHMtMXt3aWR0aDo0LjE2NjY3JX0uZWwtY29sLXhzLW9mZnNldC0xe21hcmdpbi1sZWZ0OjQuMTY2NjclfS5lbC1jb2wteHMtcHVsbC0xe3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjQuMTY2NjclfS5lbC1jb2wteHMtcHVzaC0xe3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NC4xNjY2NyV9LmVsLWNvbC14cy0ye3dpZHRoOjguMzMzMzMlfS5lbC1jb2wteHMtb2Zmc2V0LTJ7bWFyZ2luLWxlZnQ6OC4zMzMzMyV9LmVsLWNvbC14cy1wdWxsLTJ7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6OC4zMzMzMyV9LmVsLWNvbC14cy1wdXNoLTJ7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo4LjMzMzMzJX0uZWwtY29sLXhzLTN7d2lkdGg6MTIuNSV9LmVsLWNvbC14cy1vZmZzZXQtM3ttYXJnaW4tbGVmdDoxMi41JX0uZWwtY29sLXhzLXB1bGwtM3twb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDoxMi41JX0uZWwtY29sLXhzLXB1c2gtM3twb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjEyLjUlfS5lbC1jb2wteHMtNHt3aWR0aDoxNi42NjY2NyV9LmVsLWNvbC14cy1vZmZzZXQtNHttYXJnaW4tbGVmdDoxNi42NjY2NyV9LmVsLWNvbC14cy1wdWxsLTR7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6MTYuNjY2NjclfS5lbC1jb2wteHMtcHVzaC00e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MTYuNjY2NjclfS5lbC1jb2wteHMtNXt3aWR0aDoyMC44MzMzMyV9LmVsLWNvbC14cy1vZmZzZXQtNXttYXJnaW4tbGVmdDoyMC44MzMzMyV9LmVsLWNvbC14cy1wdWxsLTV7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6MjAuODMzMzMlfS5lbC1jb2wteHMtcHVzaC01e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MjAuODMzMzMlfS5lbC1jb2wteHMtNnt3aWR0aDoyNSV9LmVsLWNvbC14cy1vZmZzZXQtNnttYXJnaW4tbGVmdDoyNSV9LmVsLWNvbC14cy1wdWxsLTZ7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6MjUlfS5lbC1jb2wteHMtcHVzaC02e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MjUlfS5lbC1jb2wteHMtN3t3aWR0aDoyOS4xNjY2NyV9LmVsLWNvbC14cy1vZmZzZXQtN3ttYXJnaW4tbGVmdDoyOS4xNjY2NyV9LmVsLWNvbC14cy1wdWxsLTd7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6MjkuMTY2NjclfS5lbC1jb2wteHMtcHVzaC03e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MjkuMTY2NjclfS5lbC1jb2wteHMtOHt3aWR0aDozMy4zMzMzMyV9LmVsLWNvbC14cy1vZmZzZXQtOHttYXJnaW4tbGVmdDozMy4zMzMzMyV9LmVsLWNvbC14cy1wdWxsLTh7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6MzMuMzMzMzMlfS5lbC1jb2wteHMtcHVzaC04e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MzMuMzMzMzMlfS5lbC1jb2wteHMtOXt3aWR0aDozNy41JX0uZWwtY29sLXhzLW9mZnNldC05e21hcmdpbi1sZWZ0OjM3LjUlfS5lbC1jb2wteHMtcHVsbC05e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjM3LjUlfS5lbC1jb2wteHMtcHVzaC05e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MzcuNSV9LmVsLWNvbC14cy0xMHt3aWR0aDo0MS42NjY2NyV9LmVsLWNvbC14cy1vZmZzZXQtMTB7bWFyZ2luLWxlZnQ6NDEuNjY2NjclfS5lbC1jb2wteHMtcHVsbC0xMHtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo0MS42NjY2NyV9LmVsLWNvbC14cy1wdXNoLTEwe3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NDEuNjY2NjclfS5lbC1jb2wteHMtMTF7d2lkdGg6NDUuODMzMzMlfS5lbC1jb2wteHMtb2Zmc2V0LTExe21hcmdpbi1sZWZ0OjQ1LjgzMzMzJX0uZWwtY29sLXhzLXB1bGwtMTF7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NDUuODMzMzMlfS5lbC1jb2wteHMtcHVzaC0xMXtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjQ1LjgzMzMzJX0uZWwtY29sLXhzLTEye3dpZHRoOjUwJX0uZWwtY29sLXhzLW9mZnNldC0xMnttYXJnaW4tbGVmdDo1MCV9LmVsLWNvbC14cy1wdWxsLTEye3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjUwJX0uZWwtY29sLXhzLXB1c2gtMTJ7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo1MCV9LmVsLWNvbC14cy0xM3t3aWR0aDo1NC4xNjY2NyV9LmVsLWNvbC14cy1vZmZzZXQtMTN7bWFyZ2luLWxlZnQ6NTQuMTY2NjclfS5lbC1jb2wteHMtcHVsbC0xM3twb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo1NC4xNjY2NyV9LmVsLWNvbC14cy1wdXNoLTEze3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NTQuMTY2NjclfS5lbC1jb2wteHMtMTR7d2lkdGg6NTguMzMzMzMlfS5lbC1jb2wteHMtb2Zmc2V0LTE0e21hcmdpbi1sZWZ0OjU4LjMzMzMzJX0uZWwtY29sLXhzLXB1bGwtMTR7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NTguMzMzMzMlfS5lbC1jb2wteHMtcHVzaC0xNHtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjU4LjMzMzMzJX0uZWwtY29sLXhzLTE1e3dpZHRoOjYyLjUlfS5lbC1jb2wteHMtb2Zmc2V0LTE1e21hcmdpbi1sZWZ0OjYyLjUlfS5lbC1jb2wteHMtcHVsbC0xNXtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo2Mi41JX0uZWwtY29sLXhzLXB1c2gtMTV7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo2Mi41JX0uZWwtY29sLXhzLTE2e3dpZHRoOjY2LjY2NjY3JX0uZWwtY29sLXhzLW9mZnNldC0xNnttYXJnaW4tbGVmdDo2Ni42NjY2NyV9LmVsLWNvbC14cy1wdWxsLTE2e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjY2LjY2NjY3JX0uZWwtY29sLXhzLXB1c2gtMTZ7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo2Ni42NjY2NyV9LmVsLWNvbC14cy0xN3t3aWR0aDo3MC44MzMzMyV9LmVsLWNvbC14cy1vZmZzZXQtMTd7bWFyZ2luLWxlZnQ6NzAuODMzMzMlfS5lbC1jb2wteHMtcHVsbC0xN3twb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo3MC44MzMzMyV9LmVsLWNvbC14cy1wdXNoLTE3e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NzAuODMzMzMlfS5lbC1jb2wteHMtMTh7d2lkdGg6NzUlfS5lbC1jb2wteHMtb2Zmc2V0LTE4e21hcmdpbi1sZWZ0Ojc1JX0uZWwtY29sLXhzLXB1bGwtMTh7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NzUlfS5lbC1jb2wteHMtcHVzaC0xOHtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0Ojc1JX0uZWwtY29sLXhzLTE5e3dpZHRoOjc5LjE2NjY3JX0uZWwtY29sLXhzLW9mZnNldC0xOXttYXJnaW4tbGVmdDo3OS4xNjY2NyV9LmVsLWNvbC14cy1wdWxsLTE5e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0Ojc5LjE2NjY3JX0uZWwtY29sLXhzLXB1c2gtMTl7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo3OS4xNjY2NyV9LmVsLWNvbC14cy0yMHt3aWR0aDo4My4zMzMzMyV9LmVsLWNvbC14cy1vZmZzZXQtMjB7bWFyZ2luLWxlZnQ6ODMuMzMzMzMlfS5lbC1jb2wteHMtcHVsbC0yMHtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo4My4zMzMzMyV9LmVsLWNvbC14cy1wdXNoLTIwe3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6ODMuMzMzMzMlfS5lbC1jb2wteHMtMjF7d2lkdGg6ODcuNSV9LmVsLWNvbC14cy1vZmZzZXQtMjF7bWFyZ2luLWxlZnQ6ODcuNSV9LmVsLWNvbC14cy1wdWxsLTIxe3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0Ojg3LjUlfS5lbC1jb2wteHMtcHVzaC0yMXtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0Ojg3LjUlfS5lbC1jb2wteHMtMjJ7d2lkdGg6OTEuNjY2NjclfS5lbC1jb2wteHMtb2Zmc2V0LTIye21hcmdpbi1sZWZ0OjkxLjY2NjY3JX0uZWwtY29sLXhzLXB1bGwtMjJ7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6OTEuNjY2NjclfS5lbC1jb2wteHMtcHVzaC0yMntwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjkxLjY2NjY3JX0uZWwtY29sLXhzLTIze3dpZHRoOjk1LjgzMzMzJX0uZWwtY29sLXhzLW9mZnNldC0yM3ttYXJnaW4tbGVmdDo5NS44MzMzMyV9LmVsLWNvbC14cy1wdWxsLTIze3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0Ojk1LjgzMzMzJX0uZWwtY29sLXhzLXB1c2gtMjN7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo5NS44MzMzMyV9LmVsLWNvbC14cy0yNHt3aWR0aDoxMDAlfS5lbC1jb2wteHMtb2Zmc2V0LTI0e21hcmdpbi1sZWZ0OjEwMCV9LmVsLWNvbC14cy1wdWxsLTI0e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjEwMCV9LmVsLWNvbC14cy1wdXNoLTI0e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MTAwJX19QG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOjc2OHB4KXsuZWwtY29sLXNtLTB7ZGlzcGxheTpub25lO3dpZHRoOjAlfS5lbC1jb2wtc20tb2Zmc2V0LTB7bWFyZ2luLWxlZnQ6MH0uZWwtY29sLXNtLXB1bGwtMHtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDowfS5lbC1jb2wtc20tcHVzaC0we3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MH0uZWwtY29sLXNtLTF7d2lkdGg6NC4xNjY2NyV9LmVsLWNvbC1zbS1vZmZzZXQtMXttYXJnaW4tbGVmdDo0LjE2NjY3JX0uZWwtY29sLXNtLXB1bGwtMXtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo0LjE2NjY3JX0uZWwtY29sLXNtLXB1c2gtMXtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjQuMTY2NjclfS5lbC1jb2wtc20tMnt3aWR0aDo4LjMzMzMzJX0uZWwtY29sLXNtLW9mZnNldC0ye21hcmdpbi1sZWZ0OjguMzMzMzMlfS5lbC1jb2wtc20tcHVsbC0ye3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjguMzMzMzMlfS5lbC1jb2wtc20tcHVzaC0ye3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6OC4zMzMzMyV9LmVsLWNvbC1zbS0ze3dpZHRoOjEyLjUlfS5lbC1jb2wtc20tb2Zmc2V0LTN7bWFyZ2luLWxlZnQ6MTIuNSV9LmVsLWNvbC1zbS1wdWxsLTN7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6MTIuNSV9LmVsLWNvbC1zbS1wdXNoLTN7cG9zaXRpb246cmVsYXRpdmU7bGVmdDoxMi41JX0uZWwtY29sLXNtLTR7d2lkdGg6MTYuNjY2NjclfS5lbC1jb2wtc20tb2Zmc2V0LTR7bWFyZ2luLWxlZnQ6MTYuNjY2NjclfS5lbC1jb2wtc20tcHVsbC00e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjE2LjY2NjY3JX0uZWwtY29sLXNtLXB1c2gtNHtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjE2LjY2NjY3JX0uZWwtY29sLXNtLTV7d2lkdGg6MjAuODMzMzMlfS5lbC1jb2wtc20tb2Zmc2V0LTV7bWFyZ2luLWxlZnQ6MjAuODMzMzMlfS5lbC1jb2wtc20tcHVsbC01e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjIwLjgzMzMzJX0uZWwtY29sLXNtLXB1c2gtNXtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjIwLjgzMzMzJX0uZWwtY29sLXNtLTZ7d2lkdGg6MjUlfS5lbC1jb2wtc20tb2Zmc2V0LTZ7bWFyZ2luLWxlZnQ6MjUlfS5lbC1jb2wtc20tcHVsbC02e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjI1JX0uZWwtY29sLXNtLXB1c2gtNntwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjI1JX0uZWwtY29sLXNtLTd7d2lkdGg6MjkuMTY2NjclfS5lbC1jb2wtc20tb2Zmc2V0LTd7bWFyZ2luLWxlZnQ6MjkuMTY2NjclfS5lbC1jb2wtc20tcHVsbC03e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjI5LjE2NjY3JX0uZWwtY29sLXNtLXB1c2gtN3twb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjI5LjE2NjY3JX0uZWwtY29sLXNtLTh7d2lkdGg6MzMuMzMzMzMlfS5lbC1jb2wtc20tb2Zmc2V0LTh7bWFyZ2luLWxlZnQ6MzMuMzMzMzMlfS5lbC1jb2wtc20tcHVsbC04e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjMzLjMzMzMzJX0uZWwtY29sLXNtLXB1c2gtOHtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjMzLjMzMzMzJX0uZWwtY29sLXNtLTl7d2lkdGg6MzcuNSV9LmVsLWNvbC1zbS1vZmZzZXQtOXttYXJnaW4tbGVmdDozNy41JX0uZWwtY29sLXNtLXB1bGwtOXtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDozNy41JX0uZWwtY29sLXNtLXB1c2gtOXtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjM3LjUlfS5lbC1jb2wtc20tMTB7d2lkdGg6NDEuNjY2NjclfS5lbC1jb2wtc20tb2Zmc2V0LTEwe21hcmdpbi1sZWZ0OjQxLjY2NjY3JX0uZWwtY29sLXNtLXB1bGwtMTB7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NDEuNjY2NjclfS5lbC1jb2wtc20tcHVzaC0xMHtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjQxLjY2NjY3JX0uZWwtY29sLXNtLTExe3dpZHRoOjQ1LjgzMzMzJX0uZWwtY29sLXNtLW9mZnNldC0xMXttYXJnaW4tbGVmdDo0NS44MzMzMyV9LmVsLWNvbC1zbS1wdWxsLTExe3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjQ1LjgzMzMzJX0uZWwtY29sLXNtLXB1c2gtMTF7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo0NS44MzMzMyV9LmVsLWNvbC1zbS0xMnt3aWR0aDo1MCV9LmVsLWNvbC1zbS1vZmZzZXQtMTJ7bWFyZ2luLWxlZnQ6NTAlfS5lbC1jb2wtc20tcHVsbC0xMntwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo1MCV9LmVsLWNvbC1zbS1wdXNoLTEye3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NTAlfS5lbC1jb2wtc20tMTN7d2lkdGg6NTQuMTY2NjclfS5lbC1jb2wtc20tb2Zmc2V0LTEze21hcmdpbi1sZWZ0OjU0LjE2NjY3JX0uZWwtY29sLXNtLXB1bGwtMTN7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NTQuMTY2NjclfS5lbC1jb2wtc20tcHVzaC0xM3twb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjU0LjE2NjY3JX0uZWwtY29sLXNtLTE0e3dpZHRoOjU4LjMzMzMzJX0uZWwtY29sLXNtLW9mZnNldC0xNHttYXJnaW4tbGVmdDo1OC4zMzMzMyV9LmVsLWNvbC1zbS1wdWxsLTE0e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjU4LjMzMzMzJX0uZWwtY29sLXNtLXB1c2gtMTR7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo1OC4zMzMzMyV9LmVsLWNvbC1zbS0xNXt3aWR0aDo2Mi41JX0uZWwtY29sLXNtLW9mZnNldC0xNXttYXJnaW4tbGVmdDo2Mi41JX0uZWwtY29sLXNtLXB1bGwtMTV7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NjIuNSV9LmVsLWNvbC1zbS1wdXNoLTE1e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NjIuNSV9LmVsLWNvbC1zbS0xNnt3aWR0aDo2Ni42NjY2NyV9LmVsLWNvbC1zbS1vZmZzZXQtMTZ7bWFyZ2luLWxlZnQ6NjYuNjY2NjclfS5lbC1jb2wtc20tcHVsbC0xNntwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo2Ni42NjY2NyV9LmVsLWNvbC1zbS1wdXNoLTE2e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NjYuNjY2NjclfS5lbC1jb2wtc20tMTd7d2lkdGg6NzAuODMzMzMlfS5lbC1jb2wtc20tb2Zmc2V0LTE3e21hcmdpbi1sZWZ0OjcwLjgzMzMzJX0uZWwtY29sLXNtLXB1bGwtMTd7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NzAuODMzMzMlfS5lbC1jb2wtc20tcHVzaC0xN3twb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjcwLjgzMzMzJX0uZWwtY29sLXNtLTE4e3dpZHRoOjc1JX0uZWwtY29sLXNtLW9mZnNldC0xOHttYXJnaW4tbGVmdDo3NSV9LmVsLWNvbC1zbS1wdWxsLTE4e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0Ojc1JX0uZWwtY29sLXNtLXB1c2gtMTh7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo3NSV9LmVsLWNvbC1zbS0xOXt3aWR0aDo3OS4xNjY2NyV9LmVsLWNvbC1zbS1vZmZzZXQtMTl7bWFyZ2luLWxlZnQ6NzkuMTY2NjclfS5lbC1jb2wtc20tcHVsbC0xOXtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo3OS4xNjY2NyV9LmVsLWNvbC1zbS1wdXNoLTE5e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NzkuMTY2NjclfS5lbC1jb2wtc20tMjB7d2lkdGg6ODMuMzMzMzMlfS5lbC1jb2wtc20tb2Zmc2V0LTIwe21hcmdpbi1sZWZ0OjgzLjMzMzMzJX0uZWwtY29sLXNtLXB1bGwtMjB7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6ODMuMzMzMzMlfS5lbC1jb2wtc20tcHVzaC0yMHtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjgzLjMzMzMzJX0uZWwtY29sLXNtLTIxe3dpZHRoOjg3LjUlfS5lbC1jb2wtc20tb2Zmc2V0LTIxe21hcmdpbi1sZWZ0Ojg3LjUlfS5lbC1jb2wtc20tcHVsbC0yMXtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo4Ny41JX0uZWwtY29sLXNtLXB1c2gtMjF7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo4Ny41JX0uZWwtY29sLXNtLTIye3dpZHRoOjkxLjY2NjY3JX0uZWwtY29sLXNtLW9mZnNldC0yMnttYXJnaW4tbGVmdDo5MS42NjY2NyV9LmVsLWNvbC1zbS1wdWxsLTIye3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjkxLjY2NjY3JX0uZWwtY29sLXNtLXB1c2gtMjJ7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo5MS42NjY2NyV9LmVsLWNvbC1zbS0yM3t3aWR0aDo5NS44MzMzMyV9LmVsLWNvbC1zbS1vZmZzZXQtMjN7bWFyZ2luLWxlZnQ6OTUuODMzMzMlfS5lbC1jb2wtc20tcHVsbC0yM3twb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo5NS44MzMzMyV9LmVsLWNvbC1zbS1wdXNoLTIze3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6OTUuODMzMzMlfS5lbC1jb2wtc20tMjR7d2lkdGg6MTAwJX0uZWwtY29sLXNtLW9mZnNldC0yNHttYXJnaW4tbGVmdDoxMDAlfS5lbC1jb2wtc20tcHVsbC0yNHtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDoxMDAlfS5lbC1jb2wtc20tcHVzaC0yNHtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjEwMCV9fUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDo5OTJweCl7LmVsLWNvbC1tZC0we2Rpc3BsYXk6bm9uZTt3aWR0aDowJX0uZWwtY29sLW1kLW9mZnNldC0we21hcmdpbi1sZWZ0OjB9LmVsLWNvbC1tZC1wdWxsLTB7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6MH0uZWwtY29sLW1kLXB1c2gtMHtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjB9LmVsLWNvbC1tZC0xe3dpZHRoOjQuMTY2NjclfS5lbC1jb2wtbWQtb2Zmc2V0LTF7bWFyZ2luLWxlZnQ6NC4xNjY2NyV9LmVsLWNvbC1tZC1wdWxsLTF7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NC4xNjY2NyV9LmVsLWNvbC1tZC1wdXNoLTF7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo0LjE2NjY3JX0uZWwtY29sLW1kLTJ7d2lkdGg6OC4zMzMzMyV9LmVsLWNvbC1tZC1vZmZzZXQtMnttYXJnaW4tbGVmdDo4LjMzMzMzJX0uZWwtY29sLW1kLXB1bGwtMntwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo4LjMzMzMzJX0uZWwtY29sLW1kLXB1c2gtMntwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjguMzMzMzMlfS5lbC1jb2wtbWQtM3t3aWR0aDoxMi41JX0uZWwtY29sLW1kLW9mZnNldC0ze21hcmdpbi1sZWZ0OjEyLjUlfS5lbC1jb2wtbWQtcHVsbC0ze3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjEyLjUlfS5lbC1jb2wtbWQtcHVzaC0ze3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MTIuNSV9LmVsLWNvbC1tZC00e3dpZHRoOjE2LjY2NjY3JX0uZWwtY29sLW1kLW9mZnNldC00e21hcmdpbi1sZWZ0OjE2LjY2NjY3JX0uZWwtY29sLW1kLXB1bGwtNHtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDoxNi42NjY2NyV9LmVsLWNvbC1tZC1wdXNoLTR7cG9zaXRpb246cmVsYXRpdmU7bGVmdDoxNi42NjY2NyV9LmVsLWNvbC1tZC01e3dpZHRoOjIwLjgzMzMzJX0uZWwtY29sLW1kLW9mZnNldC01e21hcmdpbi1sZWZ0OjIwLjgzMzMzJX0uZWwtY29sLW1kLXB1bGwtNXtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDoyMC44MzMzMyV9LmVsLWNvbC1tZC1wdXNoLTV7cG9zaXRpb246cmVsYXRpdmU7bGVmdDoyMC44MzMzMyV9LmVsLWNvbC1tZC02e3dpZHRoOjI1JX0uZWwtY29sLW1kLW9mZnNldC02e21hcmdpbi1sZWZ0OjI1JX0uZWwtY29sLW1kLXB1bGwtNntwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDoyNSV9LmVsLWNvbC1tZC1wdXNoLTZ7cG9zaXRpb246cmVsYXRpdmU7bGVmdDoyNSV9LmVsLWNvbC1tZC03e3dpZHRoOjI5LjE2NjY3JX0uZWwtY29sLW1kLW9mZnNldC03e21hcmdpbi1sZWZ0OjI5LjE2NjY3JX0uZWwtY29sLW1kLXB1bGwtN3twb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDoyOS4xNjY2NyV9LmVsLWNvbC1tZC1wdXNoLTd7cG9zaXRpb246cmVsYXRpdmU7bGVmdDoyOS4xNjY2NyV9LmVsLWNvbC1tZC04e3dpZHRoOjMzLjMzMzMzJX0uZWwtY29sLW1kLW9mZnNldC04e21hcmdpbi1sZWZ0OjMzLjMzMzMzJX0uZWwtY29sLW1kLXB1bGwtOHtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDozMy4zMzMzMyV9LmVsLWNvbC1tZC1wdXNoLTh7cG9zaXRpb246cmVsYXRpdmU7bGVmdDozMy4zMzMzMyV9LmVsLWNvbC1tZC05e3dpZHRoOjM3LjUlfS5lbC1jb2wtbWQtb2Zmc2V0LTl7bWFyZ2luLWxlZnQ6MzcuNSV9LmVsLWNvbC1tZC1wdWxsLTl7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6MzcuNSV9LmVsLWNvbC1tZC1wdXNoLTl7cG9zaXRpb246cmVsYXRpdmU7bGVmdDozNy41JX0uZWwtY29sLW1kLTEwe3dpZHRoOjQxLjY2NjY3JX0uZWwtY29sLW1kLW9mZnNldC0xMHttYXJnaW4tbGVmdDo0MS42NjY2NyV9LmVsLWNvbC1tZC1wdWxsLTEwe3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjQxLjY2NjY3JX0uZWwtY29sLW1kLXB1c2gtMTB7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo0MS42NjY2NyV9LmVsLWNvbC1tZC0xMXt3aWR0aDo0NS44MzMzMyV9LmVsLWNvbC1tZC1vZmZzZXQtMTF7bWFyZ2luLWxlZnQ6NDUuODMzMzMlfS5lbC1jb2wtbWQtcHVsbC0xMXtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo0NS44MzMzMyV9LmVsLWNvbC1tZC1wdXNoLTExe3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NDUuODMzMzMlfS5lbC1jb2wtbWQtMTJ7d2lkdGg6NTAlfS5lbC1jb2wtbWQtb2Zmc2V0LTEye21hcmdpbi1sZWZ0OjUwJX0uZWwtY29sLW1kLXB1bGwtMTJ7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NTAlfS5lbC1jb2wtbWQtcHVzaC0xMntwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjUwJX0uZWwtY29sLW1kLTEze3dpZHRoOjU0LjE2NjY3JX0uZWwtY29sLW1kLW9mZnNldC0xM3ttYXJnaW4tbGVmdDo1NC4xNjY2NyV9LmVsLWNvbC1tZC1wdWxsLTEze3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjU0LjE2NjY3JX0uZWwtY29sLW1kLXB1c2gtMTN7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo1NC4xNjY2NyV9LmVsLWNvbC1tZC0xNHt3aWR0aDo1OC4zMzMzMyV9LmVsLWNvbC1tZC1vZmZzZXQtMTR7bWFyZ2luLWxlZnQ6NTguMzMzMzMlfS5lbC1jb2wtbWQtcHVsbC0xNHtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo1OC4zMzMzMyV9LmVsLWNvbC1tZC1wdXNoLTE0e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NTguMzMzMzMlfS5lbC1jb2wtbWQtMTV7d2lkdGg6NjIuNSV9LmVsLWNvbC1tZC1vZmZzZXQtMTV7bWFyZ2luLWxlZnQ6NjIuNSV9LmVsLWNvbC1tZC1wdWxsLTE1e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjYyLjUlfS5lbC1jb2wtbWQtcHVzaC0xNXtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjYyLjUlfS5lbC1jb2wtbWQtMTZ7d2lkdGg6NjYuNjY2NjclfS5lbC1jb2wtbWQtb2Zmc2V0LTE2e21hcmdpbi1sZWZ0OjY2LjY2NjY3JX0uZWwtY29sLW1kLXB1bGwtMTZ7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NjYuNjY2NjclfS5lbC1jb2wtbWQtcHVzaC0xNntwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjY2LjY2NjY3JX0uZWwtY29sLW1kLTE3e3dpZHRoOjcwLjgzMzMzJX0uZWwtY29sLW1kLW9mZnNldC0xN3ttYXJnaW4tbGVmdDo3MC44MzMzMyV9LmVsLWNvbC1tZC1wdWxsLTE3e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjcwLjgzMzMzJX0uZWwtY29sLW1kLXB1c2gtMTd7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo3MC44MzMzMyV9LmVsLWNvbC1tZC0xOHt3aWR0aDo3NSV9LmVsLWNvbC1tZC1vZmZzZXQtMTh7bWFyZ2luLWxlZnQ6NzUlfS5lbC1jb2wtbWQtcHVsbC0xOHtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo3NSV9LmVsLWNvbC1tZC1wdXNoLTE4e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NzUlfS5lbC1jb2wtbWQtMTl7d2lkdGg6NzkuMTY2NjclfS5lbC1jb2wtbWQtb2Zmc2V0LTE5e21hcmdpbi1sZWZ0Ojc5LjE2NjY3JX0uZWwtY29sLW1kLXB1bGwtMTl7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NzkuMTY2NjclfS5lbC1jb2wtbWQtcHVzaC0xOXtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0Ojc5LjE2NjY3JX0uZWwtY29sLW1kLTIwe3dpZHRoOjgzLjMzMzMzJX0uZWwtY29sLW1kLW9mZnNldC0yMHttYXJnaW4tbGVmdDo4My4zMzMzMyV9LmVsLWNvbC1tZC1wdWxsLTIwe3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjgzLjMzMzMzJX0uZWwtY29sLW1kLXB1c2gtMjB7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo4My4zMzMzMyV9LmVsLWNvbC1tZC0yMXt3aWR0aDo4Ny41JX0uZWwtY29sLW1kLW9mZnNldC0yMXttYXJnaW4tbGVmdDo4Ny41JX0uZWwtY29sLW1kLXB1bGwtMjF7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6ODcuNSV9LmVsLWNvbC1tZC1wdXNoLTIxe3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6ODcuNSV9LmVsLWNvbC1tZC0yMnt3aWR0aDo5MS42NjY2NyV9LmVsLWNvbC1tZC1vZmZzZXQtMjJ7bWFyZ2luLWxlZnQ6OTEuNjY2NjclfS5lbC1jb2wtbWQtcHVsbC0yMntwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo5MS42NjY2NyV9LmVsLWNvbC1tZC1wdXNoLTIye3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6OTEuNjY2NjclfS5lbC1jb2wtbWQtMjN7d2lkdGg6OTUuODMzMzMlfS5lbC1jb2wtbWQtb2Zmc2V0LTIze21hcmdpbi1sZWZ0Ojk1LjgzMzMzJX0uZWwtY29sLW1kLXB1bGwtMjN7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6OTUuODMzMzMlfS5lbC1jb2wtbWQtcHVzaC0yM3twb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0Ojk1LjgzMzMzJX0uZWwtY29sLW1kLTI0e3dpZHRoOjEwMCV9LmVsLWNvbC1tZC1vZmZzZXQtMjR7bWFyZ2luLWxlZnQ6MTAwJX0uZWwtY29sLW1kLXB1bGwtMjR7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6MTAwJX0uZWwtY29sLW1kLXB1c2gtMjR7cG9zaXRpb246cmVsYXRpdmU7bGVmdDoxMDAlfX1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6MTIwMHB4KXsuZWwtY29sLWxnLTB7ZGlzcGxheTpub25lO3dpZHRoOjAlfS5lbC1jb2wtbGctb2Zmc2V0LTB7bWFyZ2luLWxlZnQ6MH0uZWwtY29sLWxnLXB1bGwtMHtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDowfS5lbC1jb2wtbGctcHVzaC0we3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MH0uZWwtY29sLWxnLTF7d2lkdGg6NC4xNjY2NyV9LmVsLWNvbC1sZy1vZmZzZXQtMXttYXJnaW4tbGVmdDo0LjE2NjY3JX0uZWwtY29sLWxnLXB1bGwtMXtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo0LjE2NjY3JX0uZWwtY29sLWxnLXB1c2gtMXtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjQuMTY2NjclfS5lbC1jb2wtbGctMnt3aWR0aDo4LjMzMzMzJX0uZWwtY29sLWxnLW9mZnNldC0ye21hcmdpbi1sZWZ0OjguMzMzMzMlfS5lbC1jb2wtbGctcHVsbC0ye3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjguMzMzMzMlfS5lbC1jb2wtbGctcHVzaC0ye3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6OC4zMzMzMyV9LmVsLWNvbC1sZy0ze3dpZHRoOjEyLjUlfS5lbC1jb2wtbGctb2Zmc2V0LTN7bWFyZ2luLWxlZnQ6MTIuNSV9LmVsLWNvbC1sZy1wdWxsLTN7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6MTIuNSV9LmVsLWNvbC1sZy1wdXNoLTN7cG9zaXRpb246cmVsYXRpdmU7bGVmdDoxMi41JX0uZWwtY29sLWxnLTR7d2lkdGg6MTYuNjY2NjclfS5lbC1jb2wtbGctb2Zmc2V0LTR7bWFyZ2luLWxlZnQ6MTYuNjY2NjclfS5lbC1jb2wtbGctcHVsbC00e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjE2LjY2NjY3JX0uZWwtY29sLWxnLXB1c2gtNHtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjE2LjY2NjY3JX0uZWwtY29sLWxnLTV7d2lkdGg6MjAuODMzMzMlfS5lbC1jb2wtbGctb2Zmc2V0LTV7bWFyZ2luLWxlZnQ6MjAuODMzMzMlfS5lbC1jb2wtbGctcHVsbC01e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjIwLjgzMzMzJX0uZWwtY29sLWxnLXB1c2gtNXtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjIwLjgzMzMzJX0uZWwtY29sLWxnLTZ7d2lkdGg6MjUlfS5lbC1jb2wtbGctb2Zmc2V0LTZ7bWFyZ2luLWxlZnQ6MjUlfS5lbC1jb2wtbGctcHVsbC02e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjI1JX0uZWwtY29sLWxnLXB1c2gtNntwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjI1JX0uZWwtY29sLWxnLTd7d2lkdGg6MjkuMTY2NjclfS5lbC1jb2wtbGctb2Zmc2V0LTd7bWFyZ2luLWxlZnQ6MjkuMTY2NjclfS5lbC1jb2wtbGctcHVsbC03e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjI5LjE2NjY3JX0uZWwtY29sLWxnLXB1c2gtN3twb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjI5LjE2NjY3JX0uZWwtY29sLWxnLTh7d2lkdGg6MzMuMzMzMzMlfS5lbC1jb2wtbGctb2Zmc2V0LTh7bWFyZ2luLWxlZnQ6MzMuMzMzMzMlfS5lbC1jb2wtbGctcHVsbC04e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjMzLjMzMzMzJX0uZWwtY29sLWxnLXB1c2gtOHtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjMzLjMzMzMzJX0uZWwtY29sLWxnLTl7d2lkdGg6MzcuNSV9LmVsLWNvbC1sZy1vZmZzZXQtOXttYXJnaW4tbGVmdDozNy41JX0uZWwtY29sLWxnLXB1bGwtOXtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDozNy41JX0uZWwtY29sLWxnLXB1c2gtOXtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjM3LjUlfS5lbC1jb2wtbGctMTB7d2lkdGg6NDEuNjY2NjclfS5lbC1jb2wtbGctb2Zmc2V0LTEwe21hcmdpbi1sZWZ0OjQxLjY2NjY3JX0uZWwtY29sLWxnLXB1bGwtMTB7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NDEuNjY2NjclfS5lbC1jb2wtbGctcHVzaC0xMHtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjQxLjY2NjY3JX0uZWwtY29sLWxnLTExe3dpZHRoOjQ1LjgzMzMzJX0uZWwtY29sLWxnLW9mZnNldC0xMXttYXJnaW4tbGVmdDo0NS44MzMzMyV9LmVsLWNvbC1sZy1wdWxsLTExe3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjQ1LjgzMzMzJX0uZWwtY29sLWxnLXB1c2gtMTF7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo0NS44MzMzMyV9LmVsLWNvbC1sZy0xMnt3aWR0aDo1MCV9LmVsLWNvbC1sZy1vZmZzZXQtMTJ7bWFyZ2luLWxlZnQ6NTAlfS5lbC1jb2wtbGctcHVsbC0xMntwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo1MCV9LmVsLWNvbC1sZy1wdXNoLTEye3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NTAlfS5lbC1jb2wtbGctMTN7d2lkdGg6NTQuMTY2NjclfS5lbC1jb2wtbGctb2Zmc2V0LTEze21hcmdpbi1sZWZ0OjU0LjE2NjY3JX0uZWwtY29sLWxnLXB1bGwtMTN7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NTQuMTY2NjclfS5lbC1jb2wtbGctcHVzaC0xM3twb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjU0LjE2NjY3JX0uZWwtY29sLWxnLTE0e3dpZHRoOjU4LjMzMzMzJX0uZWwtY29sLWxnLW9mZnNldC0xNHttYXJnaW4tbGVmdDo1OC4zMzMzMyV9LmVsLWNvbC1sZy1wdWxsLTE0e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjU4LjMzMzMzJX0uZWwtY29sLWxnLXB1c2gtMTR7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo1OC4zMzMzMyV9LmVsLWNvbC1sZy0xNXt3aWR0aDo2Mi41JX0uZWwtY29sLWxnLW9mZnNldC0xNXttYXJnaW4tbGVmdDo2Mi41JX0uZWwtY29sLWxnLXB1bGwtMTV7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NjIuNSV9LmVsLWNvbC1sZy1wdXNoLTE1e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NjIuNSV9LmVsLWNvbC1sZy0xNnt3aWR0aDo2Ni42NjY2NyV9LmVsLWNvbC1sZy1vZmZzZXQtMTZ7bWFyZ2luLWxlZnQ6NjYuNjY2NjclfS5lbC1jb2wtbGctcHVsbC0xNntwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo2Ni42NjY2NyV9LmVsLWNvbC1sZy1wdXNoLTE2e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NjYuNjY2NjclfS5lbC1jb2wtbGctMTd7d2lkdGg6NzAuODMzMzMlfS5lbC1jb2wtbGctb2Zmc2V0LTE3e21hcmdpbi1sZWZ0OjcwLjgzMzMzJX0uZWwtY29sLWxnLXB1bGwtMTd7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NzAuODMzMzMlfS5lbC1jb2wtbGctcHVzaC0xN3twb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjcwLjgzMzMzJX0uZWwtY29sLWxnLTE4e3dpZHRoOjc1JX0uZWwtY29sLWxnLW9mZnNldC0xOHttYXJnaW4tbGVmdDo3NSV9LmVsLWNvbC1sZy1wdWxsLTE4e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0Ojc1JX0uZWwtY29sLWxnLXB1c2gtMTh7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo3NSV9LmVsLWNvbC1sZy0xOXt3aWR0aDo3OS4xNjY2NyV9LmVsLWNvbC1sZy1vZmZzZXQtMTl7bWFyZ2luLWxlZnQ6NzkuMTY2NjclfS5lbC1jb2wtbGctcHVsbC0xOXtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo3OS4xNjY2NyV9LmVsLWNvbC1sZy1wdXNoLTE5e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NzkuMTY2NjclfS5lbC1jb2wtbGctMjB7d2lkdGg6ODMuMzMzMzMlfS5lbC1jb2wtbGctb2Zmc2V0LTIwe21hcmdpbi1sZWZ0OjgzLjMzMzMzJX0uZWwtY29sLWxnLXB1bGwtMjB7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6ODMuMzMzMzMlfS5lbC1jb2wtbGctcHVzaC0yMHtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjgzLjMzMzMzJX0uZWwtY29sLWxnLTIxe3dpZHRoOjg3LjUlfS5lbC1jb2wtbGctb2Zmc2V0LTIxe21hcmdpbi1sZWZ0Ojg3LjUlfS5lbC1jb2wtbGctcHVsbC0yMXtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo4Ny41JX0uZWwtY29sLWxnLXB1c2gtMjF7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo4Ny41JX0uZWwtY29sLWxnLTIye3dpZHRoOjkxLjY2NjY3JX0uZWwtY29sLWxnLW9mZnNldC0yMnttYXJnaW4tbGVmdDo5MS42NjY2NyV9LmVsLWNvbC1sZy1wdWxsLTIye3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjkxLjY2NjY3JX0uZWwtY29sLWxnLXB1c2gtMjJ7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo5MS42NjY2NyV9LmVsLWNvbC1sZy0yM3t3aWR0aDo5NS44MzMzMyV9LmVsLWNvbC1sZy1vZmZzZXQtMjN7bWFyZ2luLWxlZnQ6OTUuODMzMzMlfS5lbC1jb2wtbGctcHVsbC0yM3twb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo5NS44MzMzMyV9LmVsLWNvbC1sZy1wdXNoLTIze3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6OTUuODMzMzMlfS5lbC1jb2wtbGctMjR7d2lkdGg6MTAwJX0uZWwtY29sLWxnLW9mZnNldC0yNHttYXJnaW4tbGVmdDoxMDAlfS5lbC1jb2wtbGctcHVsbC0yNHtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDoxMDAlfS5lbC1jb2wtbGctcHVzaC0yNHtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjEwMCV9fUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDoxOTIwcHgpey5lbC1jb2wteGwtMHtkaXNwbGF5Om5vbmU7d2lkdGg6MCV9LmVsLWNvbC14bC1vZmZzZXQtMHttYXJnaW4tbGVmdDowfS5lbC1jb2wteGwtcHVsbC0we3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjB9LmVsLWNvbC14bC1wdXNoLTB7cG9zaXRpb246cmVsYXRpdmU7bGVmdDowfS5lbC1jb2wteGwtMXt3aWR0aDo0LjE2NjY3JX0uZWwtY29sLXhsLW9mZnNldC0xe21hcmdpbi1sZWZ0OjQuMTY2NjclfS5lbC1jb2wteGwtcHVsbC0xe3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjQuMTY2NjclfS5lbC1jb2wteGwtcHVzaC0xe3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NC4xNjY2NyV9LmVsLWNvbC14bC0ye3dpZHRoOjguMzMzMzMlfS5lbC1jb2wteGwtb2Zmc2V0LTJ7bWFyZ2luLWxlZnQ6OC4zMzMzMyV9LmVsLWNvbC14bC1wdWxsLTJ7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6OC4zMzMzMyV9LmVsLWNvbC14bC1wdXNoLTJ7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo4LjMzMzMzJX0uZWwtY29sLXhsLTN7d2lkdGg6MTIuNSV9LmVsLWNvbC14bC1vZmZzZXQtM3ttYXJnaW4tbGVmdDoxMi41JX0uZWwtY29sLXhsLXB1bGwtM3twb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDoxMi41JX0uZWwtY29sLXhsLXB1c2gtM3twb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjEyLjUlfS5lbC1jb2wteGwtNHt3aWR0aDoxNi42NjY2NyV9LmVsLWNvbC14bC1vZmZzZXQtNHttYXJnaW4tbGVmdDoxNi42NjY2NyV9LmVsLWNvbC14bC1wdWxsLTR7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6MTYuNjY2NjclfS5lbC1jb2wteGwtcHVzaC00e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MTYuNjY2NjclfS5lbC1jb2wteGwtNXt3aWR0aDoyMC44MzMzMyV9LmVsLWNvbC14bC1vZmZzZXQtNXttYXJnaW4tbGVmdDoyMC44MzMzMyV9LmVsLWNvbC14bC1wdWxsLTV7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6MjAuODMzMzMlfS5lbC1jb2wteGwtcHVzaC01e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MjAuODMzMzMlfS5lbC1jb2wteGwtNnt3aWR0aDoyNSV9LmVsLWNvbC14bC1vZmZzZXQtNnttYXJnaW4tbGVmdDoyNSV9LmVsLWNvbC14bC1wdWxsLTZ7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6MjUlfS5lbC1jb2wteGwtcHVzaC02e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MjUlfS5lbC1jb2wteGwtN3t3aWR0aDoyOS4xNjY2NyV9LmVsLWNvbC14bC1vZmZzZXQtN3ttYXJnaW4tbGVmdDoyOS4xNjY2NyV9LmVsLWNvbC14bC1wdWxsLTd7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6MjkuMTY2NjclfS5lbC1jb2wteGwtcHVzaC03e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MjkuMTY2NjclfS5lbC1jb2wteGwtOHt3aWR0aDozMy4zMzMzMyV9LmVsLWNvbC14bC1vZmZzZXQtOHttYXJnaW4tbGVmdDozMy4zMzMzMyV9LmVsLWNvbC14bC1wdWxsLTh7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6MzMuMzMzMzMlfS5lbC1jb2wteGwtcHVzaC04e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MzMuMzMzMzMlfS5lbC1jb2wteGwtOXt3aWR0aDozNy41JX0uZWwtY29sLXhsLW9mZnNldC05e21hcmdpbi1sZWZ0OjM3LjUlfS5lbC1jb2wteGwtcHVsbC05e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjM3LjUlfS5lbC1jb2wteGwtcHVzaC05e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MzcuNSV9LmVsLWNvbC14bC0xMHt3aWR0aDo0MS42NjY2NyV9LmVsLWNvbC14bC1vZmZzZXQtMTB7bWFyZ2luLWxlZnQ6NDEuNjY2NjclfS5lbC1jb2wteGwtcHVsbC0xMHtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo0MS42NjY2NyV9LmVsLWNvbC14bC1wdXNoLTEwe3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NDEuNjY2NjclfS5lbC1jb2wteGwtMTF7d2lkdGg6NDUuODMzMzMlfS5lbC1jb2wteGwtb2Zmc2V0LTExe21hcmdpbi1sZWZ0OjQ1LjgzMzMzJX0uZWwtY29sLXhsLXB1bGwtMTF7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NDUuODMzMzMlfS5lbC1jb2wteGwtcHVzaC0xMXtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjQ1LjgzMzMzJX0uZWwtY29sLXhsLTEye3dpZHRoOjUwJX0uZWwtY29sLXhsLW9mZnNldC0xMnttYXJnaW4tbGVmdDo1MCV9LmVsLWNvbC14bC1wdWxsLTEye3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjUwJX0uZWwtY29sLXhsLXB1c2gtMTJ7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo1MCV9LmVsLWNvbC14bC0xM3t3aWR0aDo1NC4xNjY2NyV9LmVsLWNvbC14bC1vZmZzZXQtMTN7bWFyZ2luLWxlZnQ6NTQuMTY2NjclfS5lbC1jb2wteGwtcHVsbC0xM3twb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo1NC4xNjY2NyV9LmVsLWNvbC14bC1wdXNoLTEze3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NTQuMTY2NjclfS5lbC1jb2wteGwtMTR7d2lkdGg6NTguMzMzMzMlfS5lbC1jb2wteGwtb2Zmc2V0LTE0e21hcmdpbi1sZWZ0OjU4LjMzMzMzJX0uZWwtY29sLXhsLXB1bGwtMTR7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NTguMzMzMzMlfS5lbC1jb2wteGwtcHVzaC0xNHtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjU4LjMzMzMzJX0uZWwtY29sLXhsLTE1e3dpZHRoOjYyLjUlfS5lbC1jb2wteGwtb2Zmc2V0LTE1e21hcmdpbi1sZWZ0OjYyLjUlfS5lbC1jb2wteGwtcHVsbC0xNXtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo2Mi41JX0uZWwtY29sLXhsLXB1c2gtMTV7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo2Mi41JX0uZWwtY29sLXhsLTE2e3dpZHRoOjY2LjY2NjY3JX0uZWwtY29sLXhsLW9mZnNldC0xNnttYXJnaW4tbGVmdDo2Ni42NjY2NyV9LmVsLWNvbC14bC1wdWxsLTE2e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjY2LjY2NjY3JX0uZWwtY29sLXhsLXB1c2gtMTZ7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo2Ni42NjY2NyV9LmVsLWNvbC14bC0xN3t3aWR0aDo3MC44MzMzMyV9LmVsLWNvbC14bC1vZmZzZXQtMTd7bWFyZ2luLWxlZnQ6NzAuODMzMzMlfS5lbC1jb2wteGwtcHVsbC0xN3twb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo3MC44MzMzMyV9LmVsLWNvbC14bC1wdXNoLTE3e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NzAuODMzMzMlfS5lbC1jb2wteGwtMTh7d2lkdGg6NzUlfS5lbC1jb2wteGwtb2Zmc2V0LTE4e21hcmdpbi1sZWZ0Ojc1JX0uZWwtY29sLXhsLXB1bGwtMTh7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NzUlfS5lbC1jb2wteGwtcHVzaC0xOHtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0Ojc1JX0uZWwtY29sLXhsLTE5e3dpZHRoOjc5LjE2NjY3JX0uZWwtY29sLXhsLW9mZnNldC0xOXttYXJnaW4tbGVmdDo3OS4xNjY2NyV9LmVsLWNvbC14bC1wdWxsLTE5e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0Ojc5LjE2NjY3JX0uZWwtY29sLXhsLXB1c2gtMTl7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo3OS4xNjY2NyV9LmVsLWNvbC14bC0yMHt3aWR0aDo4My4zMzMzMyV9LmVsLWNvbC14bC1vZmZzZXQtMjB7bWFyZ2luLWxlZnQ6ODMuMzMzMzMlfS5lbC1jb2wteGwtcHVsbC0yMHtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo4My4zMzMzMyV9LmVsLWNvbC14bC1wdXNoLTIwe3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6ODMuMzMzMzMlfS5lbC1jb2wteGwtMjF7d2lkdGg6ODcuNSV9LmVsLWNvbC14bC1vZmZzZXQtMjF7bWFyZ2luLWxlZnQ6ODcuNSV9LmVsLWNvbC14bC1wdWxsLTIxe3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0Ojg3LjUlfS5lbC1jb2wteGwtcHVzaC0yMXtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0Ojg3LjUlfS5lbC1jb2wteGwtMjJ7d2lkdGg6OTEuNjY2NjclfS5lbC1jb2wteGwtb2Zmc2V0LTIye21hcmdpbi1sZWZ0OjkxLjY2NjY3JX0uZWwtY29sLXhsLXB1bGwtMjJ7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6OTEuNjY2NjclfS5lbC1jb2wteGwtcHVzaC0yMntwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjkxLjY2NjY3JX0uZWwtY29sLXhsLTIze3dpZHRoOjk1LjgzMzMzJX0uZWwtY29sLXhsLW9mZnNldC0yM3ttYXJnaW4tbGVmdDo5NS44MzMzMyV9LmVsLWNvbC14bC1wdWxsLTIze3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0Ojk1LjgzMzMzJX0uZWwtY29sLXhsLXB1c2gtMjN7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo5NS44MzMzMyV9LmVsLWNvbC14bC0yNHt3aWR0aDoxMDAlfS5lbC1jb2wteGwtb2Zmc2V0LTI0e21hcmdpbi1sZWZ0OjEwMCV9LmVsLWNvbC14bC1wdWxsLTI0e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjEwMCV9LmVsLWNvbC14bC1wdXNoLTI0e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MTAwJX19QC13ZWJraXQta2V5ZnJhbWVzIHByb2dyZXNzezAle2JhY2tncm91bmQtcG9zaXRpb246MCAwfTEwMCV7YmFja2dyb3VuZC1wb3NpdGlvbjozMnB4IDB9fS5lbC11cGxvYWR7ZGlzcGxheTppbmxpbmUtYmxvY2s7dGV4dC1hbGlnbjpjZW50ZXI7Y3Vyc29yOnBvaW50ZXI7b3V0bGluZTowfS5lbC11cGxvYWRfX2lucHV0e2Rpc3BsYXk6bm9uZX0uZWwtdXBsb2FkX190aXB7Zm9udC1zaXplOjEycHg7Y29sb3I6IzYwNjI2NjttYXJnaW4tdG9wOjdweH0uZWwtdXBsb2FkIGlmcmFtZXtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4Oi0xO3RvcDowO2xlZnQ6MDtmaWx0ZXI6YWxwaGEob3BhY2l0eT0wKX0uZWwtdXBsb2FkLS1waWN0dXJlLWNhcmR7YmFja2dyb3VuZC1jb2xvcjojZmJmZGZmO2JvcmRlcjoxcHggZGFzaGVkICNjMGNjZGE7Ym9yZGVyLXJhZGl1czo2cHg7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjE0OHB4O2hlaWdodDoxNDhweDtjdXJzb3I6cG9pbnRlcjtsaW5lLWhlaWdodDoxNDZweDt2ZXJ0aWNhbC1hbGlnbjp0b3B9LmVsLXVwbG9hZC0tcGljdHVyZS1jYXJkIGl7Zm9udC1zaXplOjI4cHg7Y29sb3I6IzhjOTM5ZH0uZWwtdXBsb2FkLS1waWN0dXJlLWNhcmQ6aG92ZXIsLmVsLXVwbG9hZDpmb2N1c3tib3JkZXItY29sb3I6IzQwOUVGRjtjb2xvcjojNDA5RUZGfS5lbC11cGxvYWQ6Zm9jdXMgLmVsLXVwbG9hZC1kcmFnZ2Vye2JvcmRlci1jb2xvcjojNDA5RUZGfS5lbC11cGxvYWQtZHJhZ2dlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjFweCBkYXNoZWQgI2Q5ZDlkOTtib3JkZXItcmFkaXVzOjZweDstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3g7d2lkdGg6MzYwcHg7aGVpZ2h0OjE4MHB4O3RleHQtYWxpZ246Y2VudGVyO2N1cnNvcjpwb2ludGVyO292ZXJmbG93OmhpZGRlbn0uZWwtdXBsb2FkLWRyYWdnZXIgLmVsLWljb24tdXBsb2Fke2ZvbnQtc2l6ZTo2N3B4O2NvbG9yOiNDMEM0Q0M7bWFyZ2luOjQwcHggMCAxNnB4O2xpbmUtaGVpZ2h0OjUwcHh9LmVsLXVwbG9hZC1kcmFnZ2VyKy5lbC11cGxvYWRfX3RpcHt0ZXh0LWFsaWduOmNlbnRlcn0uZWwtdXBsb2FkLWRyYWdnZXJ+LmVsLXVwbG9hZF9fZmlsZXN7Ym9yZGVyLXRvcDoxcHggc29saWQgI0RDREZFNjttYXJnaW4tdG9wOjdweDtwYWRkaW5nLXRvcDo1cHh9LmVsLXVwbG9hZC1kcmFnZ2VyIC5lbC11cGxvYWRfX3RleHR7Y29sb3I6IzYwNjI2Njtmb250LXNpemU6MTRweDt0ZXh0LWFsaWduOmNlbnRlcn0uZWwtdXBsb2FkLWRyYWdnZXIgLmVsLXVwbG9hZF9fdGV4dCBlbXtjb2xvcjojNDA5RUZGO2ZvbnQtc3R5bGU6bm9ybWFsfS5lbC11cGxvYWQtZHJhZ2dlcjpob3Zlcntib3JkZXItY29sb3I6IzQwOUVGRn0uZWwtdXBsb2FkLWRyYWdnZXIuaXMtZHJhZ292ZXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDMyLDE1OSwyNTUsLjA2KTtib3JkZXI6MnB4IGRhc2hlZCAjNDA5RUZGfS5lbC11cGxvYWQtbGlzdHttYXJnaW46MDtwYWRkaW5nOjA7bGlzdC1zdHlsZTpub25lfS5lbC11cGxvYWQtbGlzdF9faXRlbXstd2Via2l0LXRyYW5zaXRpb246YWxsIC41cyBjdWJpYy1iZXppZXIoLjU1LDAsLjEsMSk7dHJhbnNpdGlvbjphbGwgLjVzIGN1YmljLWJlemllciguNTUsMCwuMSwxKTtmb250LXNpemU6MTRweDtjb2xvcjojNjA2MjY2O2xpbmUtaGVpZ2h0OjEuODttYXJnaW4tdG9wOjVweDstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym9yZGVyLXJhZGl1czo0cHg7d2lkdGg6MTAwJX0uZWwtdXBsb2FkLWxpc3RfX2l0ZW0gLmVsLXByb2dyZXNze3Bvc2l0aW9uOmFic29sdXRlO3RvcDoyMHB4O3dpZHRoOjEwMCV9LmVsLXVwbG9hZC1saXN0X19pdGVtIC5lbC1wcm9ncmVzc19fdGV4dHtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3RvcDotMTNweH0uZWwtdXBsb2FkLWxpc3RfX2l0ZW0gLmVsLXByb2dyZXNzLWJhcnttYXJnaW4tcmlnaHQ6MDtwYWRkaW5nLXJpZ2h0OjB9LmVsLXVwbG9hZC1saXN0X19pdGVtOmZpcnN0LWNoaWxke21hcmdpbi10b3A6MTBweH0uZWwtdXBsb2FkLWxpc3RfX2l0ZW0gLmVsLWljb24tdXBsb2FkLXN1Y2Nlc3N7Y29sb3I6IzY3QzIzQX0uZWwtdXBsb2FkLWxpc3RfX2l0ZW0gLmVsLWljb24tY2xvc2V7ZGlzcGxheTpub25lO3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1cHg7cmlnaHQ6NXB4O2N1cnNvcjpwb2ludGVyO29wYWNpdHk6Ljc1O2NvbG9yOiM2MDYyNjZ9LmVsLXVwbG9hZC1saXN0X19pdGVtIC5lbC1pY29uLWNsb3NlOmhvdmVye29wYWNpdHk6MX0uZWwtdXBsb2FkLWxpc3RfX2l0ZW0gLmVsLWljb24tY2xvc2UtdGlwe2Rpc3BsYXk6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NXB4O3JpZ2h0OjVweDtmb250LXNpemU6MTJweDtjdXJzb3I6cG9pbnRlcjtvcGFjaXR5OjE7Y29sb3I6IzQwOUVGRn0uZWwtdXBsb2FkLWxpc3RfX2l0ZW06aG92ZXIgLmVsLWljb24tY2xvc2V7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmVsLXVwbG9hZC1saXN0X19pdGVtOmhvdmVyIC5lbC1wcm9ncmVzc19fdGV4dHtkaXNwbGF5Om5vbmV9LmVsLXVwbG9hZC1saXN0X19pdGVtLmlzLXN1Y2Nlc3MgLmVsLXVwbG9hZC1saXN0X19pdGVtLXN0YXR1cy1sYWJlbHtkaXNwbGF5OmJsb2NrfS5lbC11cGxvYWQtbGlzdF9faXRlbS5pcy1zdWNjZXNzIC5lbC11cGxvYWQtbGlzdF9faXRlbS1uYW1lOmZvY3VzLC5lbC11cGxvYWQtbGlzdF9faXRlbS5pcy1zdWNjZXNzIC5lbC11cGxvYWQtbGlzdF9faXRlbS1uYW1lOmhvdmVye2NvbG9yOiM0MDlFRkY7Y3Vyc29yOnBvaW50ZXJ9LmVsLXVwbG9hZC1saXN0X19pdGVtLmlzLXN1Y2Nlc3M6Zm9jdXM6bm90KDpob3ZlcikgLmVsLWljb24tY2xvc2UtdGlwe2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5lbC11cGxvYWQtbGlzdF9faXRlbS5pcy1zdWNjZXNzOmFjdGl2ZSwuZWwtdXBsb2FkLWxpc3RfX2l0ZW0uaXMtc3VjY2Vzczpub3QoLmZvY3VzaW5nKTpmb2N1c3tvdXRsaW5lLXdpZHRoOjB9LmVsLXVwbG9hZC1saXN0X19pdGVtLmlzLXN1Y2Nlc3M6YWN0aXZlIC5lbC1pY29uLWNsb3NlLXRpcCwuZWwtdXBsb2FkLWxpc3RfX2l0ZW0uaXMtc3VjY2Vzczpmb2N1cyAuZWwtdXBsb2FkLWxpc3RfX2l0ZW0tc3RhdHVzLWxhYmVsLC5lbC11cGxvYWQtbGlzdF9faXRlbS5pcy1zdWNjZXNzOmhvdmVyIC5lbC11cGxvYWQtbGlzdF9faXRlbS1zdGF0dXMtbGFiZWwsLmVsLXVwbG9hZC1saXN0X19pdGVtLmlzLXN1Y2Nlc3M6bm90KC5mb2N1c2luZyk6Zm9jdXMgLmVsLWljb24tY2xvc2UtdGlwe2Rpc3BsYXk6bm9uZX0uZWwtdXBsb2FkLWxpc3QuaXMtZGlzYWJsZWQgLmVsLXVwbG9hZC1saXN0X19pdGVtOmhvdmVyIC5lbC11cGxvYWQtbGlzdF9faXRlbS1zdGF0dXMtbGFiZWx7ZGlzcGxheTpibG9ja30uZWwtdXBsb2FkLWxpc3RfX2l0ZW0tbmFtZXtjb2xvcjojNjA2MjY2O2Rpc3BsYXk6YmxvY2s7bWFyZ2luLXJpZ2h0OjQwcHg7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmctbGVmdDo0cHg7dGV4dC1vdmVyZmxvdzplbGxpcHNpczstd2Via2l0LXRyYW5zaXRpb246Y29sb3IgLjNzO3RyYW5zaXRpb246Y29sb3IgLjNzO3doaXRlLXNwYWNlOm5vd3JhcH0uZWwtdXBsb2FkLWxpc3RfX2l0ZW0tbmFtZSBbY2xhc3NePWVsLWljb25de2hlaWdodDoxMDAlO21hcmdpbi1yaWdodDo3cHg7Y29sb3I6IzkwOTM5OTtsaW5lLWhlaWdodDppbmhlcml0fS5lbC11cGxvYWQtbGlzdF9faXRlbS1zdGF0dXMtbGFiZWx7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6NXB4O3RvcDowO2xpbmUtaGVpZ2h0OmluaGVyaXQ7ZGlzcGxheTpub25lfS5lbC11cGxvYWQtbGlzdF9faXRlbS1kZWxldGV7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MTBweDt0b3A6MDtmb250LXNpemU6MTJweDtjb2xvcjojNjA2MjY2O2Rpc3BsYXk6bm9uZX0uZWwtdXBsb2FkLWxpc3RfX2l0ZW0tZGVsZXRlOmhvdmVye2NvbG9yOiM0MDlFRkZ9LmVsLXVwbG9hZC1saXN0LS1waWN0dXJlLWNhcmR7bWFyZ2luOjA7ZGlzcGxheTppbmxpbmU7dmVydGljYWwtYWxpZ246dG9wfS5lbC11cGxvYWQtbGlzdC0tcGljdHVyZS1jYXJkIC5lbC11cGxvYWQtbGlzdF9faXRlbXtvdmVyZmxvdzpoaWRkZW47YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgI2MwY2NkYTtib3JkZXItcmFkaXVzOjZweDstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3g7d2lkdGg6MTQ4cHg7aGVpZ2h0OjE0OHB4O21hcmdpbjowIDhweCA4cHggMDtkaXNwbGF5OmlubGluZS1ibG9ja30uZWwtdXBsb2FkLWxpc3QtLXBpY3R1cmUtY2FyZCAuZWwtdXBsb2FkLWxpc3RfX2l0ZW0gLmVsLWljb24tY2hlY2ssLmVsLXVwbG9hZC1saXN0LS1waWN0dXJlLWNhcmQgLmVsLXVwbG9hZC1saXN0X19pdGVtIC5lbC1pY29uLWNpcmNsZS1jaGVja3tjb2xvcjojRkZGfS5lbC11cGxvYWQtbGlzdC0tcGljdHVyZS1jYXJkIC5lbC11cGxvYWQtbGlzdF9faXRlbSAuZWwtaWNvbi1jbG9zZSwuZWwtdXBsb2FkLWxpc3QtLXBpY3R1cmUtY2FyZCAuZWwtdXBsb2FkLWxpc3RfX2l0ZW06aG92ZXIgLmVsLXVwbG9hZC1saXN0X19pdGVtLXN0YXR1cy1sYWJlbHtkaXNwbGF5Om5vbmV9LmVsLXVwbG9hZC1saXN0LS1waWN0dXJlLWNhcmQgLmVsLXVwbG9hZC1saXN0X19pdGVtOmhvdmVyIC5lbC1wcm9ncmVzc19fdGV4dHtkaXNwbGF5OmJsb2NrfS5lbC11cGxvYWQtbGlzdC0tcGljdHVyZS1jYXJkIC5lbC11cGxvYWQtbGlzdF9faXRlbS1uYW1le2Rpc3BsYXk6bm9uZX0uZWwtdXBsb2FkLWxpc3QtLXBpY3R1cmUtY2FyZCAuZWwtdXBsb2FkLWxpc3RfX2l0ZW0tdGh1bWJuYWlse3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCV9LmVsLXVwbG9hZC1saXN0LS1waWN0dXJlLWNhcmQgLmVsLXVwbG9hZC1saXN0X19pdGVtLXN0YXR1cy1sYWJlbHtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDotMTVweDt0b3A6LTZweDt3aWR0aDo0MHB4O2hlaWdodDoyNHB4O2JhY2tncm91bmQ6IzEzY2U2Njt0ZXh0LWFsaWduOmNlbnRlcjstd2Via2l0LXRyYW5zZm9ybTpyb3RhdGUoNDVkZWcpO3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpOy13ZWJraXQtYm94LXNoYWRvdzowIDAgMXBjIDFweCByZ2JhKDAsMCwwLC4yKTtib3gtc2hhZG93OjAgMCAxcGMgMXB4IHJnYmEoMCwwLDAsLjIpfS5lbC11cGxvYWQtbGlzdC0tcGljdHVyZS1jYXJkIC5lbC11cGxvYWQtbGlzdF9faXRlbS1zdGF0dXMtbGFiZWwgaXtmb250LXNpemU6MTJweDttYXJnaW4tdG9wOjExcHg7LXdlYmtpdC10cmFuc2Zvcm06cm90YXRlKC00NWRlZyk7dHJhbnNmb3JtOnJvdGF0ZSgtNDVkZWcpfS5lbC11cGxvYWQtbGlzdC0tcGljdHVyZS1jYXJkIC5lbC11cGxvYWQtbGlzdF9faXRlbS1hY3Rpb25ze3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7bGVmdDowO3RvcDowO2N1cnNvcjpkZWZhdWx0O3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOiNmZmY7b3BhY2l0eTowO2ZvbnQtc2l6ZToyMHB4O2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuNSk7LXdlYmtpdC10cmFuc2l0aW9uOm9wYWNpdHkgLjNzO3RyYW5zaXRpb246b3BhY2l0eSAuM3N9LmVsLXVwbG9hZC1saXN0LS1waWN0dXJlLWNhcmQgLmVsLXVwbG9hZC1saXN0X19pdGVtLWFjdGlvbnM6OmFmdGVye2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxMDAlO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uZWwtdXBsb2FkLWxpc3QtLXBpY3R1cmUtY2FyZCAuZWwtdXBsb2FkLWxpc3RfX2l0ZW0tYWN0aW9ucyBzcGFue2Rpc3BsYXk6bm9uZTtjdXJzb3I6cG9pbnRlcn0uZWwtdXBsb2FkLWxpc3QtLXBpY3R1cmUtY2FyZCAuZWwtdXBsb2FkLWxpc3RfX2l0ZW0tYWN0aW9ucyBzcGFuK3NwYW57bWFyZ2luLWxlZnQ6MTVweH0uZWwtdXBsb2FkLWxpc3QtLXBpY3R1cmUtY2FyZCAuZWwtdXBsb2FkLWxpc3RfX2l0ZW0tYWN0aW9ucyAuZWwtdXBsb2FkLWxpc3RfX2l0ZW0tZGVsZXRle3Bvc2l0aW9uOnN0YXRpYztmb250LXNpemU6aW5oZXJpdDtjb2xvcjppbmhlcml0fS5lbC11cGxvYWQtbGlzdC0tcGljdHVyZS1jYXJkIC5lbC11cGxvYWQtbGlzdF9faXRlbS1hY3Rpb25zOmhvdmVye29wYWNpdHk6MX0uZWwtdXBsb2FkLWxpc3QtLXBpY3R1cmUtY2FyZCAuZWwtdXBsb2FkLWxpc3RfX2l0ZW0tYWN0aW9uczpob3ZlciBzcGFue2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5lbC11cGxvYWQtbGlzdC0tcGljdHVyZS1jYXJkIC5lbC1wcm9ncmVzc3t0b3A6NTAlO2xlZnQ6NTAlOy13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLC01MCUpO3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwtNTAlKTtib3R0b206YXV0bzt3aWR0aDoxMjZweH0uZWwtdXBsb2FkLWxpc3QtLXBpY3R1cmUtY2FyZCAuZWwtcHJvZ3Jlc3MgLmVsLXByb2dyZXNzX190ZXh0e3RvcDo1MCV9LmVsLXVwbG9hZC1saXN0LS1waWN0dXJlIC5lbC11cGxvYWQtbGlzdF9faXRlbXtvdmVyZmxvdzpoaWRkZW47ei1pbmRleDowO2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNjMGNjZGE7Ym9yZGVyLXJhZGl1czo2cHg7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94O21hcmdpbi10b3A6MTBweDtwYWRkaW5nOjEwcHggMTBweCAxMHB4IDkwcHg7aGVpZ2h0OjkycHh9LmVsLXVwbG9hZC1saXN0LS1waWN0dXJlIC5lbC11cGxvYWQtbGlzdF9faXRlbSAuZWwtaWNvbi1jaGVjaywuZWwtdXBsb2FkLWxpc3QtLXBpY3R1cmUgLmVsLXVwbG9hZC1saXN0X19pdGVtIC5lbC1pY29uLWNpcmNsZS1jaGVja3tjb2xvcjojRkZGfS5lbC11cGxvYWQtbGlzdC0tcGljdHVyZSAuZWwtdXBsb2FkLWxpc3RfX2l0ZW06aG92ZXIgLmVsLXVwbG9hZC1saXN0X19pdGVtLXN0YXR1cy1sYWJlbHtiYWNrZ3JvdW5kOjAgMDstd2Via2l0LWJveC1zaGFkb3c6bm9uZTtib3gtc2hhZG93Om5vbmU7dG9wOi0ycHg7cmlnaHQ6LTEycHh9LmVsLXVwbG9hZC1saXN0LS1waWN0dXJlIC5lbC11cGxvYWQtbGlzdF9faXRlbTpob3ZlciAuZWwtcHJvZ3Jlc3NfX3RleHR7ZGlzcGxheTpibG9ja30uZWwtdXBsb2FkLWxpc3QtLXBpY3R1cmUgLmVsLXVwbG9hZC1saXN0X19pdGVtLmlzLXN1Y2Nlc3MgLmVsLXVwbG9hZC1saXN0X19pdGVtLW5hbWV7bGluZS1oZWlnaHQ6NzBweDttYXJnaW4tdG9wOjB9LmVsLXVwbG9hZC1saXN0LS1waWN0dXJlIC5lbC11cGxvYWQtbGlzdF9faXRlbS5pcy1zdWNjZXNzIC5lbC11cGxvYWQtbGlzdF9faXRlbS1uYW1lIGl7ZGlzcGxheTpub25lfS5lbC11cGxvYWQtbGlzdC0tcGljdHVyZSAuZWwtdXBsb2FkLWxpc3RfX2l0ZW0tdGh1bWJuYWlse3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDo3MHB4O2hlaWdodDo3MHB4O2Zsb2F0OmxlZnQ7cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDoxO21hcmdpbi1sZWZ0Oi04MHB4O2JhY2tncm91bmQtY29sb3I6I0ZGRn0uZWwtdXBsb2FkLWxpc3QtLXBpY3R1cmUgLmVsLXVwbG9hZC1saXN0X19pdGVtLW5hbWV7ZGlzcGxheTpibG9jazttYXJnaW4tdG9wOjIwcHh9LmVsLXVwbG9hZC1saXN0LS1waWN0dXJlIC5lbC11cGxvYWQtbGlzdF9faXRlbS1uYW1lIGl7Zm9udC1zaXplOjcwcHg7bGluZS1oZWlnaHQ6MTtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjlweDt0b3A6MTBweH0uZWwtdXBsb2FkLWxpc3QtLXBpY3R1cmUgLmVsLXVwbG9hZC1saXN0X19pdGVtLXN0YXR1cy1sYWJlbHtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDotMTdweDt0b3A6LTdweDt3aWR0aDo0NnB4O2hlaWdodDoyNnB4O2JhY2tncm91bmQ6IzEzY2U2Njt0ZXh0LWFsaWduOmNlbnRlcjstd2Via2l0LXRyYW5zZm9ybTpyb3RhdGUoNDVkZWcpO3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpOy13ZWJraXQtYm94LXNoYWRvdzowIDFweCAxcHggI2NjYztib3gtc2hhZG93OjAgMXB4IDFweCAjY2NjfS5lbC11cGxvYWQtbGlzdC0tcGljdHVyZSAuZWwtdXBsb2FkLWxpc3RfX2l0ZW0tc3RhdHVzLWxhYmVsIGl7Zm9udC1zaXplOjEycHg7bWFyZ2luLXRvcDoxMnB4Oy13ZWJraXQtdHJhbnNmb3JtOnJvdGF0ZSgtNDVkZWcpO3RyYW5zZm9ybTpyb3RhdGUoLTQ1ZGVnKX0uZWwtdXBsb2FkLWxpc3QtLXBpY3R1cmUgLmVsLXByb2dyZXNze3Bvc2l0aW9uOnJlbGF0aXZlO3RvcDotN3B4fS5lbC11cGxvYWQtY292ZXJ7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3RvcDowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6aGlkZGVuO3otaW5kZXg6MTA7Y3Vyc29yOmRlZmF1bHR9LmVsLXVwbG9hZC1jb3Zlcjo6YWZ0ZXJ7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjEwMCU7dmVydGljYWwtYWxpZ246bWlkZGxlfS5lbC11cGxvYWQtY292ZXIgaW1ne2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJX0uZWwtdXBsb2FkLWNvdmVyX19sYWJlbHtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDotMTVweDt0b3A6LTZweDt3aWR0aDo0MHB4O2hlaWdodDoyNHB4O2JhY2tncm91bmQ6IzEzY2U2Njt0ZXh0LWFsaWduOmNlbnRlcjstd2Via2l0LXRyYW5zZm9ybTpyb3RhdGUoNDVkZWcpO3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpOy13ZWJraXQtYm94LXNoYWRvdzowIDAgMXBjIDFweCByZ2JhKDAsMCwwLC4yKTtib3gtc2hhZG93OjAgMCAxcGMgMXB4IHJnYmEoMCwwLDAsLjIpfS5lbC11cGxvYWQtY292ZXJfX2xhYmVsIGl7Zm9udC1zaXplOjEycHg7bWFyZ2luLXRvcDoxMXB4Oy13ZWJraXQtdHJhbnNmb3JtOnJvdGF0ZSgtNDVkZWcpO3RyYW5zZm9ybTpyb3RhdGUoLTQ1ZGVnKTtjb2xvcjojZmZmfS5lbC11cGxvYWQtY292ZXJfX3Byb2dyZXNze2Rpc3BsYXk6aW5saW5lLWJsb2NrO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtwb3NpdGlvbjpzdGF0aWM7d2lkdGg6MjQzcHh9LmVsLXVwbG9hZC1jb3Zlcl9fcHJvZ3Jlc3MrLmVsLXVwbG9hZF9faW5uZXJ7b3BhY2l0eTowfS5lbC11cGxvYWQtY292ZXJfX2NvbnRlbnR7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCV9LmVsLXVwbG9hZC1jb3Zlcl9faW50ZXJhY3R7cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOjA7bGVmdDowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC43Mik7dGV4dC1hbGlnbjpjZW50ZXJ9LmVsLXVwbG9hZC1jb3Zlcl9faW50ZXJhY3QgLmJ0bntkaXNwbGF5OmlubGluZS1ibG9jaztjb2xvcjojRkZGO2ZvbnQtc2l6ZToxNHB4O2N1cnNvcjpwb2ludGVyO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTstd2Via2l0LXRyYW5zaXRpb246b3BhY2l0eSAuM3MgY3ViaWMtYmV6aWVyKC4yMywxLC4zMiwxKSwtd2Via2l0LXRyYW5zZm9ybSAuM3MgY3ViaWMtYmV6aWVyKC4yMywxLC4zMiwxKTt0cmFuc2l0aW9uOm9wYWNpdHkgLjNzIGN1YmljLWJlemllciguMjMsMSwuMzIsMSksLXdlYmtpdC10cmFuc2Zvcm0gLjNzIGN1YmljLWJlemllciguMjMsMSwuMzIsMSk7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjNzIGN1YmljLWJlemllciguMjMsMSwuMzIsMSksb3BhY2l0eSAuM3MgY3ViaWMtYmV6aWVyKC4yMywxLC4zMiwxKTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuM3MgY3ViaWMtYmV6aWVyKC4yMywxLC4zMiwxKSxvcGFjaXR5IC4zcyBjdWJpYy1iZXppZXIoLjIzLDEsLjMyLDEpLC13ZWJraXQtdHJhbnNmb3JtIC4zcyBjdWJpYy1iZXppZXIoLjIzLDEsLjMyLDEpO21hcmdpbi10b3A6NjBweH0uZWwtdXBsb2FkLWNvdmVyX19pbnRlcmFjdCAuYnRuIHNwYW57b3BhY2l0eTowOy13ZWJraXQtdHJhbnNpdGlvbjpvcGFjaXR5IC4xNXMgbGluZWFyO3RyYW5zaXRpb246b3BhY2l0eSAuMTVzIGxpbmVhcn0uZWwtdXBsb2FkLWNvdmVyX19pbnRlcmFjdCAuYnRuOm5vdCg6Zmlyc3QtY2hpbGQpe21hcmdpbi1sZWZ0OjM1cHh9LmVsLXVwbG9hZC1jb3Zlcl9faW50ZXJhY3QgLmJ0bjpob3Zlcnstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xM3B4KTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMTNweCl9LmVsLXVwbG9hZC1jb3Zlcl9faW50ZXJhY3QgLmJ0bjpob3ZlciBzcGFue29wYWNpdHk6MX0uZWwtdXBsb2FkLWNvdmVyX19pbnRlcmFjdCAuYnRuIGl7Y29sb3I6I0ZGRjtkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZToyNHB4O2xpbmUtaGVpZ2h0OmluaGVyaXQ7bWFyZ2luOjAgYXV0byA1cHh9LmVsLXVwbG9hZC1jb3Zlcl9fdGl0bGV7cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOjA7bGVmdDowO2JhY2tncm91bmQtY29sb3I6I0ZGRjtoZWlnaHQ6MzZweDt3aWR0aDoxMDAlO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcDtmb250LXdlaWdodDo0MDA7dGV4dC1hbGlnbjpsZWZ0O3BhZGRpbmc6MCAxMHB4O21hcmdpbjowO2xpbmUtaGVpZ2h0OjM2cHg7Zm9udC1zaXplOjE0cHg7Y29sb3I6IzMwMzEzM30uZWwtdXBsb2FkLWNvdmVyKy5lbC11cGxvYWRfX2lubmVye29wYWNpdHk6MDtwb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4OjF9LmVsLXByb2dyZXNze3Bvc2l0aW9uOnJlbGF0aXZlO2xpbmUtaGVpZ2h0OjF9LmVsLXByb2dyZXNzX190ZXh0e2ZvbnQtc2l6ZToxNHB4O2NvbG9yOiM2MDYyNjY7ZGlzcGxheTppbmxpbmUtYmxvY2s7dmVydGljYWwtYWxpZ246bWlkZGxlO21hcmdpbi1sZWZ0OjEwcHg7bGluZS1oZWlnaHQ6MX0uZWwtcHJvZ3Jlc3NfX3RleHQgaXt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7ZGlzcGxheTpibG9ja30uZWwtcHJvZ3Jlc3MtLWNpcmNsZSwuZWwtcHJvZ3Jlc3MtLWRhc2hib2FyZHtkaXNwbGF5OmlubGluZS1ibG9ja30uZWwtcHJvZ3Jlc3MtLWNpcmNsZSAuZWwtcHJvZ3Jlc3NfX3RleHQsLmVsLXByb2dyZXNzLS1kYXNoYm9hcmQgLmVsLXByb2dyZXNzX190ZXh0e3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7bGVmdDowO3dpZHRoOjEwMCU7dGV4dC1hbGlnbjpjZW50ZXI7bWFyZ2luOjA7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlKDAsLTUwJSk7dHJhbnNmb3JtOnRyYW5zbGF0ZSgwLC01MCUpfS5lbC1wcm9ncmVzcy0tY2lyY2xlIC5lbC1wcm9ncmVzc19fdGV4dCBpLC5lbC1wcm9ncmVzcy0tZGFzaGJvYXJkIC5lbC1wcm9ncmVzc19fdGV4dCBpe3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtkaXNwbGF5OmlubGluZS1ibG9ja30uZWwtcHJvZ3Jlc3MtLXdpdGhvdXQtdGV4dCAuZWwtcHJvZ3Jlc3NfX3RleHR7ZGlzcGxheTpub25lfS5lbC1wcm9ncmVzcy0td2l0aG91dC10ZXh0IC5lbC1wcm9ncmVzcy1iYXJ7cGFkZGluZy1yaWdodDowO21hcmdpbi1yaWdodDowO2Rpc3BsYXk6YmxvY2t9LmVsLXByb2dyZXNzLS10ZXh0LWluc2lkZSAuZWwtcHJvZ3Jlc3MtYmFye3BhZGRpbmctcmlnaHQ6MDttYXJnaW4tcmlnaHQ6MH0uZWwtcHJvZ3Jlc3MuaXMtc3VjY2VzcyAuZWwtcHJvZ3Jlc3MtYmFyX19pbm5lcntiYWNrZ3JvdW5kLWNvbG9yOiM2N0MyM0F9LmVsLXByb2dyZXNzLmlzLXN1Y2Nlc3MgLmVsLXByb2dyZXNzX190ZXh0e2NvbG9yOiM2N0MyM0F9LmVsLXByb2dyZXNzLmlzLXdhcm5pbmcgLmVsLXByb2dyZXNzLWJhcl9faW5uZXJ7YmFja2dyb3VuZC1jb2xvcjojRTZBMjNDfS5lbC1iYWRnZV9fY29udGVudCwuZWwtcHJvZ3Jlc3MuaXMtZXhjZXB0aW9uIC5lbC1wcm9ncmVzcy1iYXJfX2lubmVye2JhY2tncm91bmQtY29sb3I6I0Y1NkM2Q30uZWwtcHJvZ3Jlc3MuaXMtd2FybmluZyAuZWwtcHJvZ3Jlc3NfX3RleHR7Y29sb3I6I0U2QTIzQ30uZWwtcHJvZ3Jlc3MuaXMtZXhjZXB0aW9uIC5lbC1wcm9ncmVzc19fdGV4dHtjb2xvcjojRjU2QzZDfS5lbC1wcm9ncmVzcy1iYXJ7cGFkZGluZy1yaWdodDo1MHB4O2Rpc3BsYXk6aW5saW5lLWJsb2NrO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDoxMDAlO21hcmdpbi1yaWdodDotNTVweDstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3h9LmVsLWNhcmRfX2hlYWRlciwuZWwtbWVzc2FnZSwuZWwtc3RlcF9faWNvbnstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveH0uZWwtcHJvZ3Jlc3MtYmFyX19vdXRlcntoZWlnaHQ6NnB4O2JvcmRlci1yYWRpdXM6MTAwcHg7YmFja2dyb3VuZC1jb2xvcjojRUJFRUY1O292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmVsLXByb2dyZXNzLWJhcl9faW5uZXJ7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3RvcDowO2hlaWdodDoxMDAlO2JhY2tncm91bmQtY29sb3I6IzQwOUVGRjt0ZXh0LWFsaWduOnJpZ2h0O2JvcmRlci1yYWRpdXM6MTAwcHg7bGluZS1oZWlnaHQ6MTt3aGl0ZS1zcGFjZTpub3dyYXA7LXdlYmtpdC10cmFuc2l0aW9uOndpZHRoIC42cyBlYXNlO3RyYW5zaXRpb246d2lkdGggLjZzIGVhc2V9LmVsLXByb2dyZXNzLWJhcl9faW5uZXI6OmFmdGVye2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxMDAlO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uZWwtcHJvZ3Jlc3MtYmFyX19pbm5lclRleHR7ZGlzcGxheTppbmxpbmUtYmxvY2s7dmVydGljYWwtYWxpZ246bWlkZGxlO2NvbG9yOiNGRkY7Zm9udC1zaXplOjEycHg7bWFyZ2luOjAgNXB4fUBrZXlmcmFtZXMgcHJvZ3Jlc3N7MCV7YmFja2dyb3VuZC1wb3NpdGlvbjowIDB9MTAwJXtiYWNrZ3JvdW5kLXBvc2l0aW9uOjMycHggMH19LmVsLXRpbWUtc3Bpbm5lcnt3aWR0aDoxMDAlO3doaXRlLXNwYWNlOm5vd3JhcH0uZWwtc3Bpbm5lcntkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmVsLXNwaW5uZXItaW5uZXJ7LXdlYmtpdC1hbmltYXRpb246cm90YXRlIDJzIGxpbmVhciBpbmZpbml0ZTthbmltYXRpb246cm90YXRlIDJzIGxpbmVhciBpbmZpbml0ZTt3aWR0aDo1MHB4O2hlaWdodDo1MHB4fS5lbC1zcGlubmVyLWlubmVyIC5wYXRoe3N0cm9rZTojZWNlY2VjO3N0cm9rZS1saW5lY2FwOnJvdW5kOy13ZWJraXQtYW5pbWF0aW9uOmRhc2ggMS41cyBlYXNlLWluLW91dCBpbmZpbml0ZTthbmltYXRpb246ZGFzaCAxLjVzIGVhc2UtaW4tb3V0IGluZmluaXRlfUAtd2Via2l0LWtleWZyYW1lcyByb3RhdGV7MTAwJXstd2Via2l0LXRyYW5zZm9ybTpyb3RhdGUoMzYwZGVnKTt0cmFuc2Zvcm06cm90YXRlKDM2MGRlZyl9fUBrZXlmcmFtZXMgcm90YXRlezEwMCV7LXdlYmtpdC10cmFuc2Zvcm06cm90YXRlKDM2MGRlZyk7dHJhbnNmb3JtOnJvdGF0ZSgzNjBkZWcpfX1ALXdlYmtpdC1rZXlmcmFtZXMgZGFzaHswJXtzdHJva2UtZGFzaGFycmF5OjEsMTUwO3N0cm9rZS1kYXNob2Zmc2V0OjB9NTAle3N0cm9rZS1kYXNoYXJyYXk6OTAsMTUwO3N0cm9rZS1kYXNob2Zmc2V0Oi0zNX0xMDAle3N0cm9rZS1kYXNoYXJyYXk6OTAsMTUwO3N0cm9rZS1kYXNob2Zmc2V0Oi0xMjR9fUBrZXlmcmFtZXMgZGFzaHswJXtzdHJva2UtZGFzaGFycmF5OjEsMTUwO3N0cm9rZS1kYXNob2Zmc2V0OjB9NTAle3N0cm9rZS1kYXNoYXJyYXk6OTAsMTUwO3N0cm9rZS1kYXNob2Zmc2V0Oi0zNX0xMDAle3N0cm9rZS1kYXNoYXJyYXk6OTAsMTUwO3N0cm9rZS1kYXNob2Zmc2V0Oi0xMjR9fS5lbC1tZXNzYWdle21pbi13aWR0aDozODBweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyLXdpZHRoOjFweDtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLWNvbG9yOiNFQkVFRjU7cG9zaXRpb246Zml4ZWQ7bGVmdDo1MCU7dG9wOjIwcHg7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWCgtNTAlKTt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtNTAlKTtiYWNrZ3JvdW5kLWNvbG9yOiNlZGYyZmM7LXdlYmtpdC10cmFuc2l0aW9uOm9wYWNpdHkgLjNzLHRvcCAuNHMsLXdlYmtpdC10cmFuc2Zvcm0gLjRzO3RyYW5zaXRpb246b3BhY2l0eSAuM3MsdG9wIC40cywtd2Via2l0LXRyYW5zZm9ybSAuNHM7dHJhbnNpdGlvbjpvcGFjaXR5IC4zcyx0cmFuc2Zvcm0gLjRzLHRvcCAuNHM7dHJhbnNpdGlvbjpvcGFjaXR5IC4zcyx0cmFuc2Zvcm0gLjRzLHRvcCAuNHMsLXdlYmtpdC10cmFuc2Zvcm0gLjRzO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjE1cHggMTVweCAxNXB4IDIwcHg7ZGlzcGxheTotd2Via2l0LWJveDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDstd2Via2l0LWJveC1hbGlnbjpjZW50ZXI7LW1zLWZsZXgtYWxpZ246Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcn0uZWwtbWVzc2FnZS5pcy1jZW50ZXJ7LXdlYmtpdC1ib3gtcGFjazpjZW50ZXI7LW1zLWZsZXgtcGFjazpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn0uZWwtbWVzc2FnZS5pcy1jbG9zYWJsZSAuZWwtbWVzc2FnZV9fY29udGVudHtwYWRkaW5nLXJpZ2h0OjE2cHh9LmVsLW1lc3NhZ2UgcHttYXJnaW46MH0uZWwtbWVzc2FnZS0taW5mbyAuZWwtbWVzc2FnZV9fY29udGVudHtjb2xvcjojOTA5Mzk5fS5lbC1tZXNzYWdlLS1zdWNjZXNze2JhY2tncm91bmQtY29sb3I6I2YwZjllYjtib3JkZXItY29sb3I6I2UxZjNkOH0uZWwtbWVzc2FnZS0tc3VjY2VzcyAuZWwtbWVzc2FnZV9fY29udGVudHtjb2xvcjojNjdDMjNBfS5lbC1tZXNzYWdlLS13YXJuaW5ne2JhY2tncm91bmQtY29sb3I6I2ZkZjZlYztib3JkZXItY29sb3I6I2ZhZWNkOH0uZWwtbWVzc2FnZS0td2FybmluZyAuZWwtbWVzc2FnZV9fY29udGVudHtjb2xvcjojRTZBMjNDfS5lbC1tZXNzYWdlLS1lcnJvcntiYWNrZ3JvdW5kLWNvbG9yOiNmZWYwZjA7Ym9yZGVyLWNvbG9yOiNmZGUyZTJ9LmVsLW1lc3NhZ2UtLWVycm9yIC5lbC1tZXNzYWdlX19jb250ZW50e2NvbG9yOiNGNTZDNkN9LmVsLW1lc3NhZ2VfX2ljb257bWFyZ2luLXJpZ2h0OjEwcHh9LmVsLW1lc3NhZ2VfX2NvbnRlbnR7cGFkZGluZzowO2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjF9LmVsLW1lc3NhZ2VfX2NvbnRlbnQ6Zm9jdXN7b3V0bGluZS13aWR0aDowfS5lbC1tZXNzYWdlX19jbG9zZUJ0bntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3JpZ2h0OjE1cHg7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKTtjdXJzb3I6cG9pbnRlcjtjb2xvcjojQzBDNENDO2ZvbnQtc2l6ZToxNnB4fS5lbC1tZXNzYWdlX19jbG9zZUJ0bjpmb2N1c3tvdXRsaW5lLXdpZHRoOjB9LmVsLW1lc3NhZ2VfX2Nsb3NlQnRuOmhvdmVye2NvbG9yOiM5MDkzOTl9LmVsLW1lc3NhZ2UgLmVsLWljb24tc3VjY2Vzc3tjb2xvcjojNjdDMjNBfS5lbC1tZXNzYWdlIC5lbC1pY29uLWVycm9ye2NvbG9yOiNGNTZDNkN9LmVsLW1lc3NhZ2UgLmVsLWljb24taW5mb3tjb2xvcjojOTA5Mzk5fS5lbC1tZXNzYWdlIC5lbC1pY29uLXdhcm5pbmd7Y29sb3I6I0U2QTIzQ30uZWwtbWVzc2FnZS1mYWRlLWVudGVyLC5lbC1tZXNzYWdlLWZhZGUtbGVhdmUtYWN0aXZle29wYWNpdHk6MDstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwtMTAwJSk7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLC0xMDAlKX0uZWwtYmFkZ2V7cG9zaXRpb246cmVsYXRpdmU7dmVydGljYWwtYWxpZ246bWlkZGxlO2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5lbC1iYWRnZV9fY29udGVudHtib3JkZXItcmFkaXVzOjEwcHg7Y29sb3I6I0ZGRjtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6MTJweDtoZWlnaHQ6MThweDtsaW5lLWhlaWdodDoxOHB4O3BhZGRpbmc6MCA2cHg7dGV4dC1hbGlnbjpjZW50ZXI7d2hpdGUtc3BhY2U6bm93cmFwO2JvcmRlcjoxcHggc29saWQgI0ZGRn0uZWwtYmFkZ2VfX2NvbnRlbnQuaXMtZml4ZWR7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7cmlnaHQ6MTBweDstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVZKC01MCUpIHRyYW5zbGF0ZVgoMTAwJSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSkgdHJhbnNsYXRlWCgxMDAlKX0uZWwtcmF0ZV9faWNvbiwuZWwtcmF0ZV9faXRlbXtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmlubGluZS1ibG9ja30uZWwtYmFkZ2VfX2NvbnRlbnQuaXMtZml4ZWQuaXMtZG90e3JpZ2h0OjVweH0uZWwtYmFkZ2VfX2NvbnRlbnQuaXMtZG90e2hlaWdodDo4cHg7d2lkdGg6OHB4O3BhZGRpbmc6MDtyaWdodDowO2JvcmRlci1yYWRpdXM6NTAlfS5lbC1iYWRnZV9fY29udGVudC0tcHJpbWFyeXtiYWNrZ3JvdW5kLWNvbG9yOiM0MDlFRkZ9LmVsLWJhZGdlX19jb250ZW50LS1zdWNjZXNze2JhY2tncm91bmQtY29sb3I6IzY3QzIzQX0uZWwtYmFkZ2VfX2NvbnRlbnQtLXdhcm5pbmd7YmFja2dyb3VuZC1jb2xvcjojRTZBMjNDfS5lbC1iYWRnZV9fY29udGVudC0taW5mb3tiYWNrZ3JvdW5kLWNvbG9yOiM5MDkzOTl9LmVsLWJhZGdlX19jb250ZW50LS1kYW5nZXJ7YmFja2dyb3VuZC1jb2xvcjojRjU2QzZDfS5lbC1jYXJke2JvcmRlci1yYWRpdXM6NHB4O2JvcmRlcjoxcHggc29saWQgI0VCRUVGNTtiYWNrZ3JvdW5kLWNvbG9yOiNGRkY7b3ZlcmZsb3c6aGlkZGVuO2NvbG9yOiMzMDMxMzM7LXdlYmtpdC10cmFuc2l0aW9uOi4zczt0cmFuc2l0aW9uOi4zc30uZWwtY2FyZC5pcy1hbHdheXMtc2hhZG93LC5lbC1jYXJkLmlzLWhvdmVyLXNoYWRvdzpmb2N1cywuZWwtY2FyZC5pcy1ob3Zlci1zaGFkb3c6aG92ZXJ7Ym94LXNoYWRvdzowIDJweCAxMnB4IDAgcmdiYSgwLDAsMCwuMSl9LmVsLWNhcmRfX2hlYWRlcntwYWRkaW5nOjE4cHggMjBweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjRUJFRUY1O2JveC1zaXppbmc6Ym9yZGVyLWJveH0uZWwtY2FyZF9fYm9keSwuZWwtbWFpbntwYWRkaW5nOjIwcHh9LmVsLXJhdGV7aGVpZ2h0OjIwcHg7bGluZS1oZWlnaHQ6MX0uZWwtcmF0ZTphY3RpdmUsLmVsLXJhdGU6Zm9jdXN7b3V0bGluZS13aWR0aDowfS5lbC1yYXRlX19pdGVte2ZvbnQtc2l6ZTowO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uZWwtcmF0ZV9faWNvbntmb250LXNpemU6MThweDttYXJnaW4tcmlnaHQ6NnB4O2NvbG9yOiNDMEM0Q0M7LXdlYmtpdC10cmFuc2l0aW9uOi4zczt0cmFuc2l0aW9uOi4zc30uZWwtcmF0ZV9fZGVjaW1hbCwuZWwtcmF0ZV9faWNvbiAucGF0aDJ7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowfS5lbC1yYXRlX19pY29uLmhvdmVyey13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKDEuMTUpO3RyYW5zZm9ybTpzY2FsZSgxLjE1KX0uZWwtcmF0ZV9fZGVjaW1hbHtkaXNwbGF5OmlubGluZS1ibG9jaztvdmVyZmxvdzpoaWRkZW59LmVsLXN0ZXAuaXMtdmVydGljYWwsLmVsLXN0ZXBze2Rpc3BsYXk6LXdlYmtpdC1ib3g7ZGlzcGxheTotbXMtZmxleGJveH0uZWwtcmF0ZV9fdGV4dHtmb250LXNpemU6MTRweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmVsLXN0ZXBze2Rpc3BsYXk6ZmxleH0uZWwtc3RlcHMtLXNpbXBsZXtwYWRkaW5nOjEzcHggOCU7Ym9yZGVyLXJhZGl1czo0cHg7YmFja2dyb3VuZDojRjVGN0ZBfS5lbC1zdGVwcy0taG9yaXpvbnRhbHt3aGl0ZS1zcGFjZTpub3dyYXB9LmVsLXN0ZXBzLS12ZXJ0aWNhbHtoZWlnaHQ6MTAwJTstd2Via2l0LWJveC1vcmllbnQ6dmVydGljYWw7LXdlYmtpdC1ib3gtZGlyZWN0aW9uOm5vcm1hbDstbXMtZmxleC1mbG93OmNvbHVtbjtmbGV4LWZsb3c6Y29sdW1ufS5lbC1zdGVwe3Bvc2l0aW9uOnJlbGF0aXZlOy1tcy1mbGV4LW5lZ2F0aXZlOjE7ZmxleC1zaHJpbms6MX0uZWwtc3RlcDpsYXN0LW9mLXR5cGUgLmVsLXN0ZXBfX2xpbmV7ZGlzcGxheTpub25lfS5lbC1zdGVwOmxhc3Qtb2YtdHlwZS5pcy1mbGV4ey1tcy1mbGV4LXByZWZlcnJlZC1zaXplOmF1dG8haW1wb3J0YW50O2ZsZXgtYmFzaXM6YXV0byFpbXBvcnRhbnQ7LW1zLWZsZXgtbmVnYXRpdmU6MDtmbGV4LXNocmluazowOy13ZWJraXQtYm94LWZsZXg6MDstbXMtZmxleC1wb3NpdGl2ZTowO2ZsZXgtZ3JvdzowfS5lbC1zdGVwOmxhc3Qtb2YtdHlwZSAuZWwtc3RlcF9fZGVzY3JpcHRpb24sLmVsLXN0ZXA6bGFzdC1vZi10eXBlIC5lbC1zdGVwX19tYWlue3BhZGRpbmctcmlnaHQ6MH0uZWwtc3RlcF9faGVhZHtwb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDoxMDAlfS5lbC1zdGVwX19oZWFkLmlzLXByb2Nlc3N7Y29sb3I6IzMwMzEzMztib3JkZXItY29sb3I6IzMwMzEzM30uZWwtc3RlcF9faGVhZC5pcy13YWl0e2NvbG9yOiNDMEM0Q0M7Ym9yZGVyLWNvbG9yOiNDMEM0Q0N9LmVsLXN0ZXBfX2hlYWQuaXMtc3VjY2Vzc3tjb2xvcjojNjdDMjNBO2JvcmRlci1jb2xvcjojNjdDMjNBfS5lbC1zdGVwX19oZWFkLmlzLWVycm9ye2NvbG9yOiNGNTZDNkM7Ym9yZGVyLWNvbG9yOiNGNTZDNkN9LmVsLXN0ZXBfX2hlYWQuaXMtZmluaXNoe2NvbG9yOiM0MDlFRkY7Ym9yZGVyLWNvbG9yOiM0MDlFRkZ9LmVsLXN0ZXBfX2ljb257cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDoxO2Rpc3BsYXk6LXdlYmtpdC1pbmxpbmUtYm94O2Rpc3BsYXk6LW1zLWlubGluZS1mbGV4Ym94O2Rpc3BsYXk6aW5saW5lLWZsZXg7LXdlYmtpdC1ib3gtcGFjazpjZW50ZXI7LW1zLWZsZXgtcGFjazpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjstd2Via2l0LWJveC1hbGlnbjpjZW50ZXI7LW1zLWZsZXgtYWxpZ246Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjt3aWR0aDoyNHB4O2hlaWdodDoyNHB4O2ZvbnQtc2l6ZToxNHB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtiYWNrZ3JvdW5kOiNGRkY7LXdlYmtpdC10cmFuc2l0aW9uOi4xNXMgZWFzZS1vdXQ7dHJhbnNpdGlvbjouMTVzIGVhc2Utb3V0fS5lbC1zdGVwLmlzLWhvcml6b250YWwsLmVsLXN0ZXBfX2ljb24taW5uZXJ7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmVsLXN0ZXBfX2ljb24uaXMtdGV4dHtib3JkZXItcmFkaXVzOjUwJTtib3JkZXI6MnB4IHNvbGlkO2JvcmRlci1jb2xvcjppbmhlcml0fS5lbC1zdGVwX19pY29uLmlzLWljb257d2lkdGg6NDBweH0uZWwtc3RlcF9faWNvbi1pbm5lcnstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt0ZXh0LWFsaWduOmNlbnRlcjtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTtjb2xvcjppbmhlcml0fS5lbC1zdGVwX19pY29uLWlubmVyW2NsYXNzKj1lbC1pY29uXTpub3QoLmlzLXN0YXR1cyl7Zm9udC1zaXplOjI1cHg7Zm9udC13ZWlnaHQ6NDAwfS5lbC1zdGVwX19pY29uLWlubmVyLmlzLXN0YXR1c3std2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVZKDFweCk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMXB4KX0uZWwtc3RlcF9fbGluZXtwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXItY29sb3I6aW5oZXJpdDtiYWNrZ3JvdW5kLWNvbG9yOiNDMEM0Q0N9LmVsLXN0ZXBfX2xpbmUtaW5uZXJ7ZGlzcGxheTpibG9jaztib3JkZXItd2lkdGg6MXB4O2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItY29sb3I6aW5oZXJpdDstd2Via2l0LXRyYW5zaXRpb246LjE1cyBlYXNlLW91dDt0cmFuc2l0aW9uOi4xNXMgZWFzZS1vdXQ7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjA7aGVpZ2h0OjB9LmVsLXN0ZXBfX21haW57d2hpdGUtc3BhY2U6bm9ybWFsO3RleHQtYWxpZ246bGVmdH0uZWwtc3RlcF9fdGl0bGV7Zm9udC1zaXplOjE2cHg7bGluZS1oZWlnaHQ6MzhweH0uZWwtc3RlcF9fdGl0bGUuaXMtcHJvY2Vzc3tmb250LXdlaWdodDo3MDA7Y29sb3I6IzMwMzEzM30uZWwtc3RlcF9fdGl0bGUuaXMtd2FpdHtjb2xvcjojQzBDNENDfS5lbC1zdGVwX190aXRsZS5pcy1zdWNjZXNze2NvbG9yOiM2N0MyM0F9LmVsLXN0ZXBfX3RpdGxlLmlzLWVycm9ye2NvbG9yOiNGNTZDNkN9LmVsLXN0ZXBfX3RpdGxlLmlzLWZpbmlzaHtjb2xvcjojNDA5RUZGfS5lbC1zdGVwX19kZXNjcmlwdGlvbntwYWRkaW5nLXJpZ2h0OjEwJTttYXJnaW4tdG9wOi01cHg7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MjBweDtmb250LXdlaWdodDo0MDB9LmVsLXN0ZXBfX2Rlc2NyaXB0aW9uLmlzLXByb2Nlc3N7Y29sb3I6IzMwMzEzM30uZWwtc3RlcF9fZGVzY3JpcHRpb24uaXMtd2FpdHtjb2xvcjojQzBDNENDfS5lbC1zdGVwX19kZXNjcmlwdGlvbi5pcy1zdWNjZXNze2NvbG9yOiM2N0MyM0F9LmVsLXN0ZXBfX2Rlc2NyaXB0aW9uLmlzLWVycm9ye2NvbG9yOiNGNTZDNkN9LmVsLXN0ZXBfX2Rlc2NyaXB0aW9uLmlzLWZpbmlzaHtjb2xvcjojNDA5RUZGfS5lbC1zdGVwLmlzLWhvcml6b250YWwgLmVsLXN0ZXBfX2xpbmV7aGVpZ2h0OjJweDt0b3A6MTFweDtsZWZ0OjA7cmlnaHQ6MH0uZWwtc3RlcC5pcy12ZXJ0aWNhbHtkaXNwbGF5OmZsZXh9LmVsLXN0ZXAuaXMtdmVydGljYWwgLmVsLXN0ZXBfX2hlYWR7LXdlYmtpdC1ib3gtZmxleDowOy1tcy1mbGV4LXBvc2l0aXZlOjA7ZmxleC1ncm93OjA7d2lkdGg6MjRweH0uZWwtc3RlcC5pcy12ZXJ0aWNhbCAuZWwtc3RlcF9fbWFpbntwYWRkaW5nLWxlZnQ6MTBweDstd2Via2l0LWJveC1mbGV4OjE7LW1zLWZsZXgtcG9zaXRpdmU6MTtmbGV4LWdyb3c6MX0uZWwtc3RlcC5pcy12ZXJ0aWNhbCAuZWwtc3RlcF9fdGl0bGV7bGluZS1oZWlnaHQ6MjRweDtwYWRkaW5nLWJvdHRvbTo4cHh9LmVsLXN0ZXAuaXMtdmVydGljYWwgLmVsLXN0ZXBfX2xpbmV7d2lkdGg6MnB4O3RvcDowO2JvdHRvbTowO2xlZnQ6MTFweH0uZWwtc3RlcC5pcy12ZXJ0aWNhbCAuZWwtc3RlcF9faWNvbi5pcy1pY29ue3dpZHRoOjI0cHh9LmVsLXN0ZXAuaXMtY2VudGVyIC5lbC1zdGVwX19oZWFkLC5lbC1zdGVwLmlzLWNlbnRlciAuZWwtc3RlcF9fbWFpbnt0ZXh0LWFsaWduOmNlbnRlcn0uZWwtc3RlcC5pcy1jZW50ZXIgLmVsLXN0ZXBfX2Rlc2NyaXB0aW9ue3BhZGRpbmctbGVmdDoyMCU7cGFkZGluZy1yaWdodDoyMCV9LmVsLXN0ZXAuaXMtY2VudGVyIC5lbC1zdGVwX19saW5le2xlZnQ6NTAlO3JpZ2h0Oi01MCV9LmVsLXN0ZXAuaXMtc2ltcGxle2Rpc3BsYXk6LXdlYmtpdC1ib3g7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7LXdlYmtpdC1ib3gtYWxpZ246Y2VudGVyOy1tcy1mbGV4LWFsaWduOmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXJ9LmVsLXN0ZXAuaXMtc2ltcGxlIC5lbC1zdGVwX19oZWFke3dpZHRoOmF1dG87Zm9udC1zaXplOjA7cGFkZGluZy1yaWdodDoxMHB4fS5lbC1zdGVwLmlzLXNpbXBsZSAuZWwtc3RlcF9faWNvbntiYWNrZ3JvdW5kOjAgMDt3aWR0aDoxNnB4O2hlaWdodDoxNnB4O2ZvbnQtc2l6ZToxMnB4fS5lbC1zdGVwLmlzLXNpbXBsZSAuZWwtc3RlcF9faWNvbi1pbm5lcltjbGFzcyo9ZWwtaWNvbl06bm90KC5pcy1zdGF0dXMpe2ZvbnQtc2l6ZToxOHB4fS5lbC1zdGVwLmlzLXNpbXBsZSAuZWwtc3RlcF9faWNvbi1pbm5lci5pcy1zdGF0dXN7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoLjgpIHRyYW5zbGF0ZVkoMXB4KTt0cmFuc2Zvcm06c2NhbGUoLjgpIHRyYW5zbGF0ZVkoMXB4KX0uZWwtc3RlcC5pcy1zaW1wbGUgLmVsLXN0ZXBfX21haW57cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTotd2Via2l0LWJveDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDstd2Via2l0LWJveC1hbGlnbjpzdHJldGNoOy1tcy1mbGV4LWFsaWduOnN0cmV0Y2g7YWxpZ24taXRlbXM6c3RyZXRjaDstd2Via2l0LWJveC1mbGV4OjE7LW1zLWZsZXgtcG9zaXRpdmU6MTtmbGV4LWdyb3c6MX0uZWwtc3RlcC5pcy1zaW1wbGUgLmVsLXN0ZXBfX3RpdGxle2ZvbnQtc2l6ZToxNnB4O2xpbmUtaGVpZ2h0OjIwcHh9LmVsLXN0ZXAuaXMtc2ltcGxlOm5vdCg6bGFzdC1vZi10eXBlKSAuZWwtc3RlcF9fdGl0bGV7bWF4LXdpZHRoOjUwJTt3b3JkLWJyZWFrOmJyZWFrLWFsbH0uZWwtc3RlcC5pcy1zaW1wbGUgLmVsLXN0ZXBfX2Fycm93ey13ZWJraXQtYm94LWZsZXg6MTstbXMtZmxleC1wb3NpdGl2ZToxO2ZsZXgtZ3JvdzoxO2Rpc3BsYXk6LXdlYmtpdC1ib3g7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7LXdlYmtpdC1ib3gtYWxpZ246Y2VudGVyOy1tcy1mbGV4LWFsaWduOmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7LXdlYmtpdC1ib3gtcGFjazpjZW50ZXI7LW1zLWZsZXgtcGFjazpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn0uZWwtc3RlcC5pcy1zaW1wbGUgLmVsLXN0ZXBfX2Fycm93OjphZnRlciwuZWwtc3RlcC5pcy1zaW1wbGUgLmVsLXN0ZXBfX2Fycm93OjpiZWZvcmV7Y29udGVudDonJztkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtoZWlnaHQ6MTVweDt3aWR0aDoxcHg7YmFja2dyb3VuZDojQzBDNENDfS5lbC1zdGVwLmlzLXNpbXBsZSAuZWwtc3RlcF9fYXJyb3c6OmJlZm9yZXstd2Via2l0LXRyYW5zZm9ybTpyb3RhdGUoLTQ1ZGVnKSB0cmFuc2xhdGVZKC00cHgpO3RyYW5zZm9ybTpyb3RhdGUoLTQ1ZGVnKSB0cmFuc2xhdGVZKC00cHgpOy13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjowIDA7dHJhbnNmb3JtLW9yaWdpbjowIDB9LmVsLXN0ZXAuaXMtc2ltcGxlIC5lbC1zdGVwX19hcnJvdzo6YWZ0ZXJ7LXdlYmtpdC10cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKSB0cmFuc2xhdGVZKDRweCk7dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZykgdHJhbnNsYXRlWSg0cHgpOy13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjoxMDAlIDEwMCU7dHJhbnNmb3JtLW9yaWdpbjoxMDAlIDEwMCV9LmVsLXN0ZXAuaXMtc2ltcGxlOmxhc3Qtb2YtdHlwZSAuZWwtc3RlcF9fYXJyb3d7ZGlzcGxheTpub25lfS5lbC1jYXJvdXNlbHtwb3NpdGlvbjpyZWxhdGl2ZX0uZWwtY2Fyb3VzZWwtLWhvcml6b250YWx7b3ZlcmZsb3cteDpoaWRkZW59LmVsLWNhcm91c2VsLS12ZXJ0aWNhbHtvdmVyZmxvdy15OmhpZGRlbn0uZWwtY2Fyb3VzZWxfX2NvbnRhaW5lcntwb3NpdGlvbjpyZWxhdGl2ZTtoZWlnaHQ6MzAwcHh9LmVsLWNhcm91c2VsX19hcnJvd3tib3JkZXI6bm9uZTtvdXRsaW5lOjA7cGFkZGluZzowO21hcmdpbjowO2hlaWdodDozNnB4O3dpZHRoOjM2cHg7Y3Vyc29yOnBvaW50ZXI7LXdlYmtpdC10cmFuc2l0aW9uOi4zczt0cmFuc2l0aW9uOi4zcztib3JkZXItcmFkaXVzOjUwJTtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMzEsNDUsNjEsLjExKTtjb2xvcjojRkZGO3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7ei1pbmRleDoxMDstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVZKC01MCUpO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC01MCUpO3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtc2l6ZToxMnB4fS5lbC1jYXJvdXNlbF9fYXJyb3ctLWxlZnR7bGVmdDoxNnB4fS5lbC1jYXJvdXNlbF9fYXJyb3c6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDMxLDQ1LDYxLC4yMyl9LmVsLWNhcm91c2VsX19hcnJvdyBpe2N1cnNvcjpwb2ludGVyfS5lbC1jYXJvdXNlbF9faW5kaWNhdG9yc3twb3NpdGlvbjphYnNvbHV0ZTtsaXN0LXN0eWxlOm5vbmU7bWFyZ2luOjA7cGFkZGluZzowO3otaW5kZXg6Mn0uZWwtY2Fyb3VzZWxfX2luZGljYXRvcnMtLWhvcml6b250YWx7Ym90dG9tOjA7bGVmdDo1MCU7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWCgtNTAlKTt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtNTAlKX0uZWwtY2Fyb3VzZWxfX2luZGljYXRvcnMtLXZlcnRpY2Fse3JpZ2h0OjA7dG9wOjUwJTstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVZKC01MCUpO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC01MCUpfS5lbC1jYXJvdXNlbF9faW5kaWNhdG9ycy0tb3V0c2lkZXtib3R0b206MjZweDt0ZXh0LWFsaWduOmNlbnRlcjtwb3NpdGlvbjpzdGF0aWM7LXdlYmtpdC10cmFuc2Zvcm06bm9uZTt0cmFuc2Zvcm06bm9uZX0uZWwtY2Fyb3VzZWxfX2luZGljYXRvcnMtLW91dHNpZGUgLmVsLWNhcm91c2VsX19pbmRpY2F0b3I6aG92ZXIgYnV0dG9ue29wYWNpdHk6LjY0fS5lbC1jYXJvdXNlbF9faW5kaWNhdG9ycy0tb3V0c2lkZSBidXR0b257YmFja2dyb3VuZC1jb2xvcjojQzBDNENDO29wYWNpdHk6LjI0fS5lbC1jYXJvdXNlbF9faW5kaWNhdG9ycy0tbGFiZWxze2xlZnQ6MDtyaWdodDowOy13ZWJraXQtdHJhbnNmb3JtOm5vbmU7dHJhbnNmb3JtOm5vbmU7dGV4dC1hbGlnbjpjZW50ZXJ9LmVsLWNhcm91c2VsX19pbmRpY2F0b3JzLS1sYWJlbHMgLmVsLWNhcm91c2VsX19idXR0b257aGVpZ2h0OmF1dG87d2lkdGg6YXV0bztwYWRkaW5nOjJweCAxOHB4O2ZvbnQtc2l6ZToxMnB4fS5lbC1jYXJvdXNlbF9faW5kaWNhdG9ycy0tbGFiZWxzIC5lbC1jYXJvdXNlbF9faW5kaWNhdG9ye3BhZGRpbmc6NnB4IDRweH0uZWwtY2Fyb3VzZWxfX2luZGljYXRvcntiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2N1cnNvcjpwb2ludGVyfS5lbC1jYXJvdXNlbF9faW5kaWNhdG9yOmhvdmVyIGJ1dHRvbntvcGFjaXR5Oi43Mn0uZWwtY2Fyb3VzZWxfX2luZGljYXRvci0taG9yaXpvbnRhbHtkaXNwbGF5OmlubGluZS1ibG9jaztwYWRkaW5nOjEycHggNHB4fS5lbC1jYXJvdXNlbF9faW5kaWNhdG9yLS12ZXJ0aWNhbHtwYWRkaW5nOjRweCAxMnB4fS5lbC1jYXJvdXNlbF9faW5kaWNhdG9yLS12ZXJ0aWNhbCAuZWwtY2Fyb3VzZWxfX2J1dHRvbnt3aWR0aDoycHg7aGVpZ2h0OjE1cHh9LmVsLWNhcm91c2VsX19pbmRpY2F0b3IuaXMtYWN0aXZlIGJ1dHRvbntvcGFjaXR5OjF9LmVsLWNhcm91c2VsX19idXR0b257ZGlzcGxheTpibG9jaztvcGFjaXR5Oi40ODt3aWR0aDozMHB4O2hlaWdodDoycHg7YmFja2dyb3VuZC1jb2xvcjojRkZGO2JvcmRlcjpub25lO291dGxpbmU6MDtwYWRkaW5nOjA7bWFyZ2luOjA7Y3Vyc29yOnBvaW50ZXI7LXdlYmtpdC10cmFuc2l0aW9uOi4zczt0cmFuc2l0aW9uOi4zc30uZWwtY2Fyb3VzZWxfX2l0ZW0sLmVsLWNhcm91c2VsX19tYXNre2hlaWdodDoxMDAlO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MH0uY2Fyb3VzZWwtYXJyb3ctbGVmdC1lbnRlciwuY2Fyb3VzZWwtYXJyb3ctbGVmdC1sZWF2ZS1hY3RpdmV7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKSB0cmFuc2xhdGVYKC0xMHB4KTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKSB0cmFuc2xhdGVYKC0xMHB4KTtvcGFjaXR5OjB9LmNhcm91c2VsLWFycm93LXJpZ2h0LWVudGVyLC5jYXJvdXNlbC1hcnJvdy1yaWdodC1sZWF2ZS1hY3RpdmV7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKSB0cmFuc2xhdGVYKDEwcHgpO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC01MCUpIHRyYW5zbGF0ZVgoMTBweCk7b3BhY2l0eTowfS5lbC1jYXJvdXNlbF9faXRlbXt3aWR0aDoxMDAlO2Rpc3BsYXk6aW5saW5lLWJsb2NrO292ZXJmbG93OmhpZGRlbjt6LWluZGV4OjB9LmVsLWNhcm91c2VsX19pdGVtLmlzLWFjdGl2ZXt6LWluZGV4OjJ9LmVsLWNhcm91c2VsX19pdGVtLmlzLWFuaW1hdGluZ3std2Via2l0LXRyYW5zaXRpb246LXdlYmtpdC10cmFuc2Zvcm0gLjRzIGVhc2UtaW4tb3V0O3RyYW5zaXRpb246LXdlYmtpdC10cmFuc2Zvcm0gLjRzIGVhc2UtaW4tb3V0O3RyYW5zaXRpb246dHJhbnNmb3JtIC40cyBlYXNlLWluLW91dDt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuNHMgZWFzZS1pbi1vdXQsLXdlYmtpdC10cmFuc2Zvcm0gLjRzIGVhc2UtaW4tb3V0fS5lbC1jYXJvdXNlbF9faXRlbS0tY2FyZHt3aWR0aDo1MCU7LXdlYmtpdC10cmFuc2l0aW9uOi13ZWJraXQtdHJhbnNmb3JtIC40cyBlYXNlLWluLW91dDt0cmFuc2l0aW9uOi13ZWJraXQtdHJhbnNmb3JtIC40cyBlYXNlLWluLW91dDt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuNHMgZWFzZS1pbi1vdXQ7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjRzIGVhc2UtaW4tb3V0LC13ZWJraXQtdHJhbnNmb3JtIC40cyBlYXNlLWluLW91dH0uZWwtY2Fyb3VzZWxfX2l0ZW0tLWNhcmQuaXMtaW4tc3RhZ2V7Y3Vyc29yOnBvaW50ZXI7ei1pbmRleDoxfS5lbC1jYXJvdXNlbF9faXRlbS0tY2FyZC5pcy1pbi1zdGFnZS5pcy1ob3ZlciAuZWwtY2Fyb3VzZWxfX21hc2ssLmVsLWNhcm91c2VsX19pdGVtLS1jYXJkLmlzLWluLXN0YWdlOmhvdmVyIC5lbC1jYXJvdXNlbF9fbWFza3tvcGFjaXR5Oi4xMn0uZWwtY2Fyb3VzZWxfX2l0ZW0tLWNhcmQuaXMtYWN0aXZle3otaW5kZXg6Mn0uZWwtY2Fyb3VzZWxfX21hc2t7d2lkdGg6MTAwJTtiYWNrZ3JvdW5kLWNvbG9yOiNGRkY7b3BhY2l0eTouMjQ7LXdlYmtpdC10cmFuc2l0aW9uOi4yczt0cmFuc2l0aW9uOi4yc30uZmFkZS1pbi1saW5lYXItZW50ZXItYWN0aXZlLC5mYWRlLWluLWxpbmVhci1sZWF2ZS1hY3RpdmV7LXdlYmtpdC10cmFuc2l0aW9uOm9wYWNpdHkgLjJzIGxpbmVhcjt0cmFuc2l0aW9uOm9wYWNpdHkgLjJzIGxpbmVhcn0uZmFkZS1pbi1saW5lYXItZW50ZXIsLmZhZGUtaW4tbGluZWFyLWxlYXZlLC5mYWRlLWluLWxpbmVhci1sZWF2ZS1hY3RpdmV7b3BhY2l0eTowfS5lbC1mYWRlLWluLWxpbmVhci1lbnRlci1hY3RpdmUsLmVsLWZhZGUtaW4tbGluZWFyLWxlYXZlLWFjdGl2ZXstd2Via2l0LXRyYW5zaXRpb246b3BhY2l0eSAuMnMgbGluZWFyO3RyYW5zaXRpb246b3BhY2l0eSAuMnMgbGluZWFyfS5lbC1mYWRlLWluLWxpbmVhci1lbnRlciwuZWwtZmFkZS1pbi1saW5lYXItbGVhdmUsLmVsLWZhZGUtaW4tbGluZWFyLWxlYXZlLWFjdGl2ZXtvcGFjaXR5OjB9LmVsLWZhZGUtaW4tZW50ZXItYWN0aXZlLC5lbC1mYWRlLWluLWxlYXZlLWFjdGl2ZXstd2Via2l0LXRyYW5zaXRpb246YWxsIC4zcyBjdWJpYy1iZXppZXIoLjU1LDAsLjEsMSk7dHJhbnNpdGlvbjphbGwgLjNzIGN1YmljLWJlemllciguNTUsMCwuMSwxKX0uZWwtZmFkZS1pbi1lbnRlciwuZWwtZmFkZS1pbi1sZWF2ZS1hY3RpdmV7b3BhY2l0eTowfS5lbC16b29tLWluLWNlbnRlci1lbnRlci1hY3RpdmUsLmVsLXpvb20taW4tY2VudGVyLWxlYXZlLWFjdGl2ZXstd2Via2l0LXRyYW5zaXRpb246YWxsIC4zcyBjdWJpYy1iZXppZXIoLjU1LDAsLjEsMSk7dHJhbnNpdGlvbjphbGwgLjNzIGN1YmljLWJlemllciguNTUsMCwuMSwxKX0uZWwtem9vbS1pbi1jZW50ZXItZW50ZXIsLmVsLXpvb20taW4tY2VudGVyLWxlYXZlLWFjdGl2ZXtvcGFjaXR5OjA7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGVYKDApO3RyYW5zZm9ybTpzY2FsZVgoMCl9LmVsLXpvb20taW4tdG9wLWVudGVyLWFjdGl2ZSwuZWwtem9vbS1pbi10b3AtbGVhdmUtYWN0aXZle29wYWNpdHk6MTstd2Via2l0LXRyYW5zZm9ybTpzY2FsZVkoMSk7dHJhbnNmb3JtOnNjYWxlWSgxKTstd2Via2l0LXRyYW5zaXRpb246b3BhY2l0eSAuM3MgY3ViaWMtYmV6aWVyKC4yMywxLC4zMiwxKSwtd2Via2l0LXRyYW5zZm9ybSAuM3MgY3ViaWMtYmV6aWVyKC4yMywxLC4zMiwxKTt0cmFuc2l0aW9uOm9wYWNpdHkgLjNzIGN1YmljLWJlemllciguMjMsMSwuMzIsMSksLXdlYmtpdC10cmFuc2Zvcm0gLjNzIGN1YmljLWJlemllciguMjMsMSwuMzIsMSk7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjNzIGN1YmljLWJlemllciguMjMsMSwuMzIsMSksb3BhY2l0eSAuM3MgY3ViaWMtYmV6aWVyKC4yMywxLC4zMiwxKTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuM3MgY3ViaWMtYmV6aWVyKC4yMywxLC4zMiwxKSxvcGFjaXR5IC4zcyBjdWJpYy1iZXppZXIoLjIzLDEsLjMyLDEpLC13ZWJraXQtdHJhbnNmb3JtIC4zcyBjdWJpYy1iZXppZXIoLjIzLDEsLjMyLDEpOy13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjpjZW50ZXIgdG9wO3RyYW5zZm9ybS1vcmlnaW46Y2VudGVyIHRvcH0uZWwtem9vbS1pbi10b3AtZW50ZXIsLmVsLXpvb20taW4tdG9wLWxlYXZlLWFjdGl2ZXtvcGFjaXR5OjA7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGVZKDApO3RyYW5zZm9ybTpzY2FsZVkoMCl9LmVsLXpvb20taW4tYm90dG9tLWVudGVyLWFjdGl2ZSwuZWwtem9vbS1pbi1ib3R0b20tbGVhdmUtYWN0aXZle29wYWNpdHk6MTstd2Via2l0LXRyYW5zZm9ybTpzY2FsZVkoMSk7dHJhbnNmb3JtOnNjYWxlWSgxKTstd2Via2l0LXRyYW5zaXRpb246b3BhY2l0eSAuM3MgY3ViaWMtYmV6aWVyKC4yMywxLC4zMiwxKSwtd2Via2l0LXRyYW5zZm9ybSAuM3MgY3ViaWMtYmV6aWVyKC4yMywxLC4zMiwxKTt0cmFuc2l0aW9uOm9wYWNpdHkgLjNzIGN1YmljLWJlemllciguMjMsMSwuMzIsMSksLXdlYmtpdC10cmFuc2Zvcm0gLjNzIGN1YmljLWJlemllciguMjMsMSwuMzIsMSk7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjNzIGN1YmljLWJlemllciguMjMsMSwuMzIsMSksb3BhY2l0eSAuM3MgY3ViaWMtYmV6aWVyKC4yMywxLC4zMiwxKTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuM3MgY3ViaWMtYmV6aWVyKC4yMywxLC4zMiwxKSxvcGFjaXR5IC4zcyBjdWJpYy1iZXppZXIoLjIzLDEsLjMyLDEpLC13ZWJraXQtdHJhbnNmb3JtIC4zcyBjdWJpYy1iZXppZXIoLjIzLDEsLjMyLDEpOy13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjpjZW50ZXIgYm90dG9tO3RyYW5zZm9ybS1vcmlnaW46Y2VudGVyIGJvdHRvbX0uZWwtem9vbS1pbi1ib3R0b20tZW50ZXIsLmVsLXpvb20taW4tYm90dG9tLWxlYXZlLWFjdGl2ZXtvcGFjaXR5OjA7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGVZKDApO3RyYW5zZm9ybTpzY2FsZVkoMCl9LmVsLXpvb20taW4tbGVmdC1lbnRlci1hY3RpdmUsLmVsLXpvb20taW4tbGVmdC1sZWF2ZS1hY3RpdmV7b3BhY2l0eToxOy13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKDEsMSk7dHJhbnNmb3JtOnNjYWxlKDEsMSk7LXdlYmtpdC10cmFuc2l0aW9uOm9wYWNpdHkgLjNzIGN1YmljLWJlemllciguMjMsMSwuMzIsMSksLXdlYmtpdC10cmFuc2Zvcm0gLjNzIGN1YmljLWJlemllciguMjMsMSwuMzIsMSk7dHJhbnNpdGlvbjpvcGFjaXR5IC4zcyBjdWJpYy1iZXppZXIoLjIzLDEsLjMyLDEpLC13ZWJraXQtdHJhbnNmb3JtIC4zcyBjdWJpYy1iZXppZXIoLjIzLDEsLjMyLDEpO3RyYW5zaXRpb246dHJhbnNmb3JtIC4zcyBjdWJpYy1iZXppZXIoLjIzLDEsLjMyLDEpLG9wYWNpdHkgLjNzIGN1YmljLWJlemllciguMjMsMSwuMzIsMSk7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjNzIGN1YmljLWJlemllciguMjMsMSwuMzIsMSksb3BhY2l0eSAuM3MgY3ViaWMtYmV6aWVyKC4yMywxLC4zMiwxKSwtd2Via2l0LXRyYW5zZm9ybSAuM3MgY3ViaWMtYmV6aWVyKC4yMywxLC4zMiwxKTstd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46dG9wIGxlZnQ7dHJhbnNmb3JtLW9yaWdpbjp0b3AgbGVmdH0uZWwtem9vbS1pbi1sZWZ0LWVudGVyLC5lbC16b29tLWluLWxlZnQtbGVhdmUtYWN0aXZle29wYWNpdHk6MDstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSguNDUsLjQ1KTt0cmFuc2Zvcm06c2NhbGUoLjQ1LC40NSl9LmNvbGxhcHNlLXRyYW5zaXRpb257LXdlYmtpdC10cmFuc2l0aW9uOi4zcyBoZWlnaHQgZWFzZS1pbi1vdXQsLjNzIHBhZGRpbmctdG9wIGVhc2UtaW4tb3V0LC4zcyBwYWRkaW5nLWJvdHRvbSBlYXNlLWluLW91dDt0cmFuc2l0aW9uOi4zcyBoZWlnaHQgZWFzZS1pbi1vdXQsLjNzIHBhZGRpbmctdG9wIGVhc2UtaW4tb3V0LC4zcyBwYWRkaW5nLWJvdHRvbSBlYXNlLWluLW91dH0uaG9yaXpvbnRhbC1jb2xsYXBzZS10cmFuc2l0aW9uey13ZWJraXQtdHJhbnNpdGlvbjouM3Mgd2lkdGggZWFzZS1pbi1vdXQsLjNzIHBhZGRpbmctbGVmdCBlYXNlLWluLW91dCwuM3MgcGFkZGluZy1yaWdodCBlYXNlLWluLW91dDt0cmFuc2l0aW9uOi4zcyB3aWR0aCBlYXNlLWluLW91dCwuM3MgcGFkZGluZy1sZWZ0IGVhc2UtaW4tb3V0LC4zcyBwYWRkaW5nLXJpZ2h0IGVhc2UtaW4tb3V0fS5lbC1saXN0LWVudGVyLWFjdGl2ZSwuZWwtbGlzdC1sZWF2ZS1hY3RpdmV7LXdlYmtpdC10cmFuc2l0aW9uOmFsbCAxczt0cmFuc2l0aW9uOmFsbCAxc30uZWwtbGlzdC1lbnRlciwuZWwtbGlzdC1sZWF2ZS1hY3RpdmV7b3BhY2l0eTowOy13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTMwcHgpO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0zMHB4KX0uZWwtb3BhY2l0eS10cmFuc2l0aW9uey13ZWJraXQtdHJhbnNpdGlvbjpvcGFjaXR5IC4zcyBjdWJpYy1iZXppZXIoLjU1LDAsLjEsMSk7dHJhbnNpdGlvbjpvcGFjaXR5IC4zcyBjdWJpYy1iZXppZXIoLjU1LDAsLjEsMSl9LmVsLWNvbGxhcHNle2JvcmRlci10b3A6MXB4IHNvbGlkICNFQkVFRjU7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI0VCRUVGNX0uZWwtY29sbGFwc2UtaXRlbS5pcy1kaXNhYmxlZCAuZWwtY29sbGFwc2UtaXRlbV9faGVhZGVye2NvbG9yOiNiYmI7Y3Vyc29yOm5vdC1hbGxvd2VkfS5lbC1jb2xsYXBzZS1pdGVtX19oZWFkZXJ7ZGlzcGxheTotd2Via2l0LWJveDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDstd2Via2l0LWJveC1hbGlnbjpjZW50ZXI7LW1zLWZsZXgtYWxpZ246Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtoZWlnaHQ6NDhweDtsaW5lLWhlaWdodDo0OHB4O2JhY2tncm91bmQtY29sb3I6I0ZGRjtjb2xvcjojMzAzMTMzO2N1cnNvcjpwb2ludGVyO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNFQkVFRjU7Zm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NTAwOy13ZWJraXQtdHJhbnNpdGlvbjpib3JkZXItYm90dG9tLWNvbG9yIC4zczt0cmFuc2l0aW9uOmJvcmRlci1ib3R0b20tY29sb3IgLjNzO291dGxpbmU6MH0uZWwtY29sbGFwc2UtaXRlbV9fYXJyb3d7bWFyZ2luOjAgOHB4IDAgYXV0bzstd2Via2l0LXRyYW5zaXRpb246LXdlYmtpdC10cmFuc2Zvcm0gLjNzO3RyYW5zaXRpb246LXdlYmtpdC10cmFuc2Zvcm0gLjNzO3RyYW5zaXRpb246dHJhbnNmb3JtIC4zczt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuM3MsLXdlYmtpdC10cmFuc2Zvcm0gLjNzO2ZvbnQtd2VpZ2h0OjMwMH0uZWwtY29sbGFwc2UtaXRlbV9fYXJyb3cuaXMtYWN0aXZley13ZWJraXQtdHJhbnNmb3JtOnJvdGF0ZSg5MGRlZyk7dHJhbnNmb3JtOnJvdGF0ZSg5MGRlZyl9LmVsLWNvbGxhcHNlLWl0ZW1fX2hlYWRlci5mb2N1c2luZzpmb2N1czpub3QoOmhvdmVyKXtjb2xvcjojNDA5RUZGfS5lbC1jb2xsYXBzZS1pdGVtX19oZWFkZXIuaXMtYWN0aXZle2JvcmRlci1ib3R0b20tY29sb3I6dHJhbnNwYXJlbnR9LmVsLWNvbGxhcHNlLWl0ZW1fX3dyYXB7d2lsbC1jaGFuZ2U6aGVpZ2h0O2JhY2tncm91bmQtY29sb3I6I0ZGRjtvdmVyZmxvdzpoaWRkZW47LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNFQkVFRjV9LmVsLWNhc2NhZGVyX19zZWFyY2gtaW5wdXQsLmVsLWNhc2NhZGVyX190YWdzLC5lbC10YWd7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3h9LmVsLWNvbGxhcHNlLWl0ZW1fX2NvbnRlbnR7cGFkZGluZy1ib3R0b206MjVweDtmb250LXNpemU6MTNweDtjb2xvcjojMzAzMTMzO2xpbmUtaGVpZ2h0OjEuNzY5MjMwNzY5MjMwNzY5fS5lbC1jb2xsYXBzZS1pdGVtOmxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTotMXB4fS5lbC1wb3BwZXIgLnBvcHBlcl9fYXJyb3csLmVsLXBvcHBlciAucG9wcGVyX19hcnJvdzo6YWZ0ZXJ7cG9zaXRpb246YWJzb2x1dGU7ZGlzcGxheTpibG9jazt3aWR0aDowO2hlaWdodDowO2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudDtib3JkZXItc3R5bGU6c29saWR9LmVsLWNhc2NhZGVyLC5lbC10YWd7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmVsLXBvcHBlciAucG9wcGVyX19hcnJvd3tib3JkZXItd2lkdGg6NnB4Oy13ZWJraXQtZmlsdGVyOmRyb3Atc2hhZG93KDAgMnB4IDEycHggcmdiYSgwLCAwLCAwLCAuMDMpKTtmaWx0ZXI6ZHJvcC1zaGFkb3coMCAycHggMTJweCByZ2JhKDAsIDAsIDAsIC4wMykpfS5lbC1wb3BwZXIgLnBvcHBlcl9fYXJyb3c6OmFmdGVye2NvbnRlbnQ6XFxcIiBcXFwiO2JvcmRlci13aWR0aDo2cHh9LmVsLXBvcHBlclt4LXBsYWNlbWVudF49dG9wXXttYXJnaW4tYm90dG9tOjEycHh9LmVsLXBvcHBlclt4LXBsYWNlbWVudF49dG9wXSAucG9wcGVyX19hcnJvd3tib3R0b206LTZweDtsZWZ0OjUwJTttYXJnaW4tcmlnaHQ6M3B4O2JvcmRlci10b3AtY29sb3I6I0VCRUVGNTtib3JkZXItYm90dG9tLXdpZHRoOjB9LmVsLXBvcHBlclt4LXBsYWNlbWVudF49dG9wXSAucG9wcGVyX19hcnJvdzo6YWZ0ZXJ7Ym90dG9tOjFweDttYXJnaW4tbGVmdDotNnB4O2JvcmRlci10b3AtY29sb3I6I0ZGRjtib3JkZXItYm90dG9tLXdpZHRoOjB9LmVsLXBvcHBlclt4LXBsYWNlbWVudF49Ym90dG9tXXttYXJnaW4tdG9wOjEycHh9LmVsLXBvcHBlclt4LXBsYWNlbWVudF49Ym90dG9tXSAucG9wcGVyX19hcnJvd3t0b3A6LTZweDtsZWZ0OjUwJTttYXJnaW4tcmlnaHQ6M3B4O2JvcmRlci10b3Atd2lkdGg6MDtib3JkZXItYm90dG9tLWNvbG9yOiNFQkVFRjV9LmVsLXBvcHBlclt4LXBsYWNlbWVudF49Ym90dG9tXSAucG9wcGVyX19hcnJvdzo6YWZ0ZXJ7dG9wOjFweDttYXJnaW4tbGVmdDotNnB4O2JvcmRlci10b3Atd2lkdGg6MDtib3JkZXItYm90dG9tLWNvbG9yOiNGRkZ9LmVsLXBvcHBlclt4LXBsYWNlbWVudF49cmlnaHRde21hcmdpbi1sZWZ0OjEycHh9LmVsLXBvcHBlclt4LXBsYWNlbWVudF49cmlnaHRdIC5wb3BwZXJfX2Fycm93e3RvcDo1MCU7bGVmdDotNnB4O21hcmdpbi1ib3R0b206M3B4O2JvcmRlci1yaWdodC1jb2xvcjojRUJFRUY1O2JvcmRlci1sZWZ0LXdpZHRoOjB9LmVsLXBvcHBlclt4LXBsYWNlbWVudF49cmlnaHRdIC5wb3BwZXJfX2Fycm93OjphZnRlcntib3R0b206LTZweDtsZWZ0OjFweDtib3JkZXItcmlnaHQtY29sb3I6I0ZGRjtib3JkZXItbGVmdC13aWR0aDowfS5lbC1wb3BwZXJbeC1wbGFjZW1lbnRePWxlZnRde21hcmdpbi1yaWdodDoxMnB4fS5lbC1wb3BwZXJbeC1wbGFjZW1lbnRePWxlZnRdIC5wb3BwZXJfX2Fycm93e3RvcDo1MCU7cmlnaHQ6LTZweDttYXJnaW4tYm90dG9tOjNweDtib3JkZXItcmlnaHQtd2lkdGg6MDtib3JkZXItbGVmdC1jb2xvcjojRUJFRUY1fS5lbC1wb3BwZXJbeC1wbGFjZW1lbnRePWxlZnRdIC5wb3BwZXJfX2Fycm93OjphZnRlcntyaWdodDoxcHg7Ym90dG9tOi02cHg7bWFyZ2luLWxlZnQ6LTZweDtib3JkZXItcmlnaHQtd2lkdGg6MDtib3JkZXItbGVmdC1jb2xvcjojRkZGfS5lbC10YWd7YmFja2dyb3VuZC1jb2xvcjojZWNmNWZmO2JvcmRlci1jb2xvcjojZDllY2ZmO2hlaWdodDozMnB4O3BhZGRpbmc6MCAxMHB4O2xpbmUtaGVpZ2h0OjMwcHg7Zm9udC1zaXplOjEycHg7Y29sb3I6IzQwOUVGRjtib3JkZXItd2lkdGg6MXB4O2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItcmFkaXVzOjRweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7d2hpdGUtc3BhY2U6bm93cmFwfS5lbC10YWcuaXMtaGl0e2JvcmRlci1jb2xvcjojNDA5RUZGfS5lbC10YWcgLmVsLXRhZ19fY2xvc2V7Y29sb3I6IzQwOWVmZn0uZWwtdGFnIC5lbC10YWdfX2Nsb3NlOmhvdmVye2NvbG9yOiNGRkY7YmFja2dyb3VuZC1jb2xvcjojNDA5ZWZmfS5lbC10YWcuZWwtdGFnLS1pbmZve2JhY2tncm91bmQtY29sb3I6I2Y0ZjRmNTtib3JkZXItY29sb3I6I2U5ZTllYjtjb2xvcjojOTA5Mzk5fS5lbC10YWcuZWwtdGFnLS1pbmZvLmlzLWhpdHtib3JkZXItY29sb3I6IzkwOTM5OX0uZWwtdGFnLmVsLXRhZy0taW5mbyAuZWwtdGFnX19jbG9zZXtjb2xvcjojOTA5Mzk5fS5lbC10YWcuZWwtdGFnLS1pbmZvIC5lbC10YWdfX2Nsb3NlOmhvdmVye2NvbG9yOiNGRkY7YmFja2dyb3VuZC1jb2xvcjojOTA5Mzk5fS5lbC10YWcuZWwtdGFnLS1zdWNjZXNze2JhY2tncm91bmQtY29sb3I6I2YwZjllYjtib3JkZXItY29sb3I6I2UxZjNkODtjb2xvcjojNjdjMjNhfS5lbC10YWcuZWwtdGFnLS1zdWNjZXNzLmlzLWhpdHtib3JkZXItY29sb3I6IzY3QzIzQX0uZWwtdGFnLmVsLXRhZy0tc3VjY2VzcyAuZWwtdGFnX19jbG9zZXtjb2xvcjojNjdjMjNhfS5lbC10YWcuZWwtdGFnLS1zdWNjZXNzIC5lbC10YWdfX2Nsb3NlOmhvdmVye2NvbG9yOiNGRkY7YmFja2dyb3VuZC1jb2xvcjojNjdjMjNhfS5lbC10YWcuZWwtdGFnLS13YXJuaW5ne2JhY2tncm91bmQtY29sb3I6I2ZkZjZlYztib3JkZXItY29sb3I6I2ZhZWNkODtjb2xvcjojZTZhMjNjfS5lbC10YWcuZWwtdGFnLS13YXJuaW5nLmlzLWhpdHtib3JkZXItY29sb3I6I0U2QTIzQ30uZWwtdGFnLmVsLXRhZy0td2FybmluZyAuZWwtdGFnX19jbG9zZXtjb2xvcjojZTZhMjNjfS5lbC10YWcuZWwtdGFnLS13YXJuaW5nIC5lbC10YWdfX2Nsb3NlOmhvdmVye2NvbG9yOiNGRkY7YmFja2dyb3VuZC1jb2xvcjojZTZhMjNjfS5lbC10YWcuZWwtdGFnLS1kYW5nZXJ7YmFja2dyb3VuZC1jb2xvcjojZmVmMGYwO2JvcmRlci1jb2xvcjojZmRlMmUyO2NvbG9yOiNmNTZjNmN9LmVsLXRhZy5lbC10YWctLWRhbmdlci5pcy1oaXR7Ym9yZGVyLWNvbG9yOiNGNTZDNkN9LmVsLXRhZy5lbC10YWctLWRhbmdlciAuZWwtdGFnX19jbG9zZXtjb2xvcjojZjU2YzZjfS5lbC10YWcuZWwtdGFnLS1kYW5nZXIgLmVsLXRhZ19fY2xvc2U6aG92ZXJ7Y29sb3I6I0ZGRjtiYWNrZ3JvdW5kLWNvbG9yOiNmNTZjNmN9LmVsLXRhZyAuZWwtaWNvbi1jbG9zZXtib3JkZXItcmFkaXVzOjUwJTt0ZXh0LWFsaWduOmNlbnRlcjtwb3NpdGlvbjpyZWxhdGl2ZTtjdXJzb3I6cG9pbnRlcjtmb250LXNpemU6MTJweDtoZWlnaHQ6MTZweDt3aWR0aDoxNnB4O2xpbmUtaGVpZ2h0OjE2cHg7dmVydGljYWwtYWxpZ246bWlkZGxlO3RvcDotMXB4O3JpZ2h0Oi01cHh9LmVsLXRhZyAuZWwtaWNvbi1jbG9zZTo6YmVmb3Jle2Rpc3BsYXk6YmxvY2t9LmVsLXRhZy0tZGFya3tiYWNrZ3JvdW5kLWNvbG9yOiM0MDllZmY7Ym9yZGVyLWNvbG9yOiM0MDllZmY7Y29sb3I6I2ZmZn0uZWwtdGFnLS1kYXJrLmlzLWhpdHtib3JkZXItY29sb3I6IzQwOUVGRn0uZWwtdGFnLS1kYXJrIC5lbC10YWdfX2Nsb3Nle2NvbG9yOiNmZmZ9LmVsLXRhZy0tZGFyayAuZWwtdGFnX19jbG9zZTpob3Zlcntjb2xvcjojRkZGO2JhY2tncm91bmQtY29sb3I6IzY2YjFmZn0uZWwtdGFnLS1kYXJrLmVsLXRhZy0taW5mb3tiYWNrZ3JvdW5kLWNvbG9yOiM5MDkzOTk7Ym9yZGVyLWNvbG9yOiM5MDkzOTk7Y29sb3I6I2ZmZn0uZWwtdGFnLS1kYXJrLmVsLXRhZy0taW5mby5pcy1oaXR7Ym9yZGVyLWNvbG9yOiM5MDkzOTl9LmVsLXRhZy0tZGFyay5lbC10YWctLWluZm8gLmVsLXRhZ19fY2xvc2V7Y29sb3I6I2ZmZn0uZWwtdGFnLS1kYXJrLmVsLXRhZy0taW5mbyAuZWwtdGFnX19jbG9zZTpob3Zlcntjb2xvcjojRkZGO2JhY2tncm91bmQtY29sb3I6I2E2YTlhZH0uZWwtdGFnLS1kYXJrLmVsLXRhZy0tc3VjY2Vzc3tiYWNrZ3JvdW5kLWNvbG9yOiM2N2MyM2E7Ym9yZGVyLWNvbG9yOiM2N2MyM2E7Y29sb3I6I2ZmZn0uZWwtdGFnLS1kYXJrLmVsLXRhZy0tc3VjY2Vzcy5pcy1oaXR7Ym9yZGVyLWNvbG9yOiM2N0MyM0F9LmVsLXRhZy0tZGFyay5lbC10YWctLXN1Y2Nlc3MgLmVsLXRhZ19fY2xvc2V7Y29sb3I6I2ZmZn0uZWwtdGFnLS1kYXJrLmVsLXRhZy0tc3VjY2VzcyAuZWwtdGFnX19jbG9zZTpob3Zlcntjb2xvcjojRkZGO2JhY2tncm91bmQtY29sb3I6Izg1Y2U2MX0uZWwtdGFnLS1kYXJrLmVsLXRhZy0td2FybmluZ3tiYWNrZ3JvdW5kLWNvbG9yOiNlNmEyM2M7Ym9yZGVyLWNvbG9yOiNlNmEyM2M7Y29sb3I6I2ZmZn0uZWwtdGFnLS1kYXJrLmVsLXRhZy0td2FybmluZy5pcy1oaXR7Ym9yZGVyLWNvbG9yOiNFNkEyM0N9LmVsLXRhZy0tZGFyay5lbC10YWctLXdhcm5pbmcgLmVsLXRhZ19fY2xvc2V7Y29sb3I6I2ZmZn0uZWwtdGFnLS1kYXJrLmVsLXRhZy0td2FybmluZyAuZWwtdGFnX19jbG9zZTpob3Zlcntjb2xvcjojRkZGO2JhY2tncm91bmQtY29sb3I6I2ViYjU2M30uZWwtdGFnLS1kYXJrLmVsLXRhZy0tZGFuZ2Vye2JhY2tncm91bmQtY29sb3I6I2Y1NmM2Yztib3JkZXItY29sb3I6I2Y1NmM2Yztjb2xvcjojZmZmfS5lbC10YWctLWRhcmsuZWwtdGFnLS1kYW5nZXIuaXMtaGl0e2JvcmRlci1jb2xvcjojRjU2QzZDfS5lbC10YWctLWRhcmsuZWwtdGFnLS1kYW5nZXIgLmVsLXRhZ19fY2xvc2V7Y29sb3I6I2ZmZn0uZWwtdGFnLS1kYXJrLmVsLXRhZy0tZGFuZ2VyIC5lbC10YWdfX2Nsb3NlOmhvdmVye2NvbG9yOiNGRkY7YmFja2dyb3VuZC1jb2xvcjojZjc4OTg5fS5lbC10YWctLXBsYWlue2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXItY29sb3I6I2IzZDhmZjtjb2xvcjojNDA5ZWZmfS5lbC10YWctLXBsYWluLmlzLWhpdHtib3JkZXItY29sb3I6IzQwOUVGRn0uZWwtdGFnLS1wbGFpbiAuZWwtdGFnX19jbG9zZXtjb2xvcjojNDA5ZWZmfS5lbC10YWctLXBsYWluIC5lbC10YWdfX2Nsb3NlOmhvdmVye2NvbG9yOiNGRkY7YmFja2dyb3VuZC1jb2xvcjojNDA5ZWZmfS5lbC10YWctLXBsYWluLmVsLXRhZy0taW5mb3tiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyLWNvbG9yOiNkM2Q0ZDY7Y29sb3I6IzkwOTM5OX0uZWwtdGFnLS1wbGFpbi5lbC10YWctLWluZm8uaXMtaGl0e2JvcmRlci1jb2xvcjojOTA5Mzk5fS5lbC10YWctLXBsYWluLmVsLXRhZy0taW5mbyAuZWwtdGFnX19jbG9zZXtjb2xvcjojOTA5Mzk5fS5lbC10YWctLXBsYWluLmVsLXRhZy0taW5mbyAuZWwtdGFnX19jbG9zZTpob3Zlcntjb2xvcjojRkZGO2JhY2tncm91bmQtY29sb3I6IzkwOTM5OX0uZWwtdGFnLS1wbGFpbi5lbC10YWctLXN1Y2Nlc3N7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlci1jb2xvcjojYzJlN2IwO2NvbG9yOiM2N2MyM2F9LmVsLXRhZy0tcGxhaW4uZWwtdGFnLS1zdWNjZXNzLmlzLWhpdHtib3JkZXItY29sb3I6IzY3QzIzQX0uZWwtdGFnLS1wbGFpbi5lbC10YWctLXN1Y2Nlc3MgLmVsLXRhZ19fY2xvc2V7Y29sb3I6IzY3YzIzYX0uZWwtdGFnLS1wbGFpbi5lbC10YWctLXN1Y2Nlc3MgLmVsLXRhZ19fY2xvc2U6aG92ZXJ7Y29sb3I6I0ZGRjtiYWNrZ3JvdW5kLWNvbG9yOiM2N2MyM2F9LmVsLXRhZy0tcGxhaW4uZWwtdGFnLS13YXJuaW5ne2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXItY29sb3I6I2Y1ZGFiMTtjb2xvcjojZTZhMjNjfS5lbC10YWctLXBsYWluLmVsLXRhZy0td2FybmluZy5pcy1oaXR7Ym9yZGVyLWNvbG9yOiNFNkEyM0N9LmVsLXRhZy0tcGxhaW4uZWwtdGFnLS13YXJuaW5nIC5lbC10YWdfX2Nsb3Nle2NvbG9yOiNlNmEyM2N9LmVsLXRhZy0tcGxhaW4uZWwtdGFnLS13YXJuaW5nIC5lbC10YWdfX2Nsb3NlOmhvdmVye2NvbG9yOiNGRkY7YmFja2dyb3VuZC1jb2xvcjojZTZhMjNjfS5lbC10YWctLXBsYWluLmVsLXRhZy0tZGFuZ2Vye2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXItY29sb3I6I2ZiYzRjNDtjb2xvcjojZjU2YzZjfS5lbC10YWctLXBsYWluLmVsLXRhZy0tZGFuZ2VyLmlzLWhpdHtib3JkZXItY29sb3I6I0Y1NkM2Q30uZWwtdGFnLS1wbGFpbi5lbC10YWctLWRhbmdlciAuZWwtdGFnX19jbG9zZXtjb2xvcjojZjU2YzZjfS5lbC10YWctLXBsYWluLmVsLXRhZy0tZGFuZ2VyIC5lbC10YWdfX2Nsb3NlOmhvdmVye2NvbG9yOiNGRkY7YmFja2dyb3VuZC1jb2xvcjojZjU2YzZjfS5lbC10YWctLW1lZGl1bXtoZWlnaHQ6MjhweDtsaW5lLWhlaWdodDoyNnB4fS5lbC10YWctLW1lZGl1bSAuZWwtaWNvbi1jbG9zZXstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSguOCk7dHJhbnNmb3JtOnNjYWxlKC44KX0uZWwtdGFnLS1zbWFsbHtoZWlnaHQ6MjRweDtwYWRkaW5nOjAgOHB4O2xpbmUtaGVpZ2h0OjIycHh9LmVsLXRhZy0tc21hbGwgLmVsLWljb24tY2xvc2V7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoLjgpO3RyYW5zZm9ybTpzY2FsZSguOCl9LmVsLXRhZy0tbWluaXtoZWlnaHQ6MjBweDtwYWRkaW5nOjAgNXB4O2xpbmUtaGVpZ2h0OjE5cHh9LmVsLXRhZy0tbWluaSAuZWwtaWNvbi1jbG9zZXttYXJnaW4tbGVmdDotM3B4Oy13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKC43KTt0cmFuc2Zvcm06c2NhbGUoLjcpfS5lbC1jYXNjYWRlcntwb3NpdGlvbjpyZWxhdGl2ZTtmb250LXNpemU6MTRweDtsaW5lLWhlaWdodDo0MHB4fS5lbC1jYXNjYWRlcjpub3QoLmlzLWRpc2FibGVkKTpob3ZlciAuZWwtaW5wdXRfX2lubmVye2N1cnNvcjpwb2ludGVyO2JvcmRlci1jb2xvcjojQzBDNENDfS5lbC1jYXNjYWRlciAuZWwtaW5wdXQgLmVsLWlucHV0X19pbm5lcjpmb2N1cywuZWwtY2FzY2FkZXIgLmVsLWlucHV0LmlzLWZvY3VzIC5lbC1pbnB1dF9faW5uZXJ7Ym9yZGVyLWNvbG9yOiM0MDlFRkZ9LmVsLWNhc2NhZGVyIC5lbC1pbnB1dHtjdXJzb3I6cG9pbnRlcn0uZWwtY2FzY2FkZXIgLmVsLWlucHV0IC5lbC1pbnB1dF9faW5uZXJ7dGV4dC1vdmVyZmxvdzplbGxpcHNpc30uZWwtY2FzY2FkZXIgLmVsLWlucHV0IC5lbC1pY29uLWFycm93LWRvd257LXdlYmtpdC10cmFuc2l0aW9uOi13ZWJraXQtdHJhbnNmb3JtIC4zczt0cmFuc2l0aW9uOi13ZWJraXQtdHJhbnNmb3JtIC4zczt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuM3M7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjNzLC13ZWJraXQtdHJhbnNmb3JtIC4zcztmb250LXNpemU6MTRweH0uZWwtY2FzY2FkZXIgLmVsLWlucHV0IC5lbC1pY29uLWFycm93LWRvd24uaXMtcmV2ZXJzZXstd2Via2l0LXRyYW5zZm9ybTpyb3RhdGVaKDE4MGRlZyk7dHJhbnNmb3JtOnJvdGF0ZVooMTgwZGVnKX0uZWwtY2FzY2FkZXIgLmVsLWlucHV0IC5lbC1pY29uLWNpcmNsZS1jbG9zZTpob3Zlcntjb2xvcjojOTA5Mzk5fS5lbC1jYXNjYWRlci0tbWVkaXVte2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjM2cHh9LmVsLWNhc2NhZGVyLS1zbWFsbHtmb250LXNpemU6MTNweDtsaW5lLWhlaWdodDozMnB4fS5lbC1jYXNjYWRlci0tbWluaXtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoyOHB4fS5lbC1jYXNjYWRlci5pcy1kaXNhYmxlZCAuZWwtY2FzY2FkZXJfX2xhYmVse3otaW5kZXg6Mjtjb2xvcjojQzBDNENDfS5lbC1jYXNjYWRlcl9fZHJvcGRvd257bWFyZ2luOjVweCAwO2ZvbnQtc2l6ZToxNHB4O2JhY2tncm91bmQ6I0ZGRjtib3JkZXI6MXB4IHNvbGlkICNFNEU3RUQ7Ym9yZGVyLXJhZGl1czo0cHg7Ym94LXNoYWRvdzowIDJweCAxMnB4IDAgcmdiYSgwLDAsMCwuMSl9LmVsLWNhc2NhZGVyX190YWdze3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDtyaWdodDozMHB4O3RvcDo1MCU7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKTtkaXNwbGF5Oi13ZWJraXQtYm94O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4Oy1tcy1mbGV4LXdyYXA6d3JhcDtmbGV4LXdyYXA6d3JhcDtsaW5lLWhlaWdodDpub3JtYWw7dGV4dC1hbGlnbjpsZWZ0O2JveC1zaXppbmc6Ym9yZGVyLWJveH0uZWwtY2FzY2FkZXJfX3RhZ3MgLmVsLXRhZ3tkaXNwbGF5Oi13ZWJraXQtaW5saW5lLWJveDtkaXNwbGF5Oi1tcy1pbmxpbmUtZmxleGJveDtkaXNwbGF5OmlubGluZS1mbGV4Oy13ZWJraXQtYm94LWFsaWduOmNlbnRlcjstbXMtZmxleC1hbGlnbjpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO21heC13aWR0aDoxMDAlO21hcmdpbjoycHggMCAycHggNnB4O3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7YmFja2dyb3VuZDojZjBmMmY1fS5lbC1jYXNjYWRlcl9fdGFncyAuZWwtdGFnOm5vdCguaXMtaGl0KXtib3JkZXItY29sb3I6dHJhbnNwYXJlbnR9LmVsLWNhc2NhZGVyX190YWdzIC5lbC10YWc+c3Bhbnstd2Via2l0LWJveC1mbGV4OjE7LW1zLWZsZXg6MTtmbGV4OjE7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9LmVsLWNhc2NhZGVyX190YWdzIC5lbC10YWcgLmVsLWljb24tY2xvc2V7LXdlYmtpdC1ib3gtZmxleDowOy1tcy1mbGV4Om5vbmU7ZmxleDpub25lO2JhY2tncm91bmQtY29sb3I6I0MwQzRDQztjb2xvcjojRkZGfS5lbC1jYXNjYWRlcl9fdGFncyAuZWwtdGFnIC5lbC1pY29uLWNsb3NlOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzkwOTM5OX0uZWwtY2FzY2FkZXJfX3N1Z2dlc3Rpb24tcGFuZWx7Ym9yZGVyLXJhZGl1czo0cHh9LmVsLWNhc2NhZGVyX19zdWdnZXN0aW9uLWxpc3R7bWF4LWhlaWdodDoyMDRweDttYXJnaW46MDtwYWRkaW5nOjZweCAwO2ZvbnQtc2l6ZToxNHB4O2NvbG9yOiM2MDYyNjY7dGV4dC1hbGlnbjpjZW50ZXJ9LmVsLWNhc2NhZGVyX19zdWdnZXN0aW9uLWl0ZW17ZGlzcGxheTotd2Via2l0LWJveDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDstd2Via2l0LWJveC1wYWNrOmp1c3RpZnk7LW1zLWZsZXgtcGFjazpqdXN0aWZ5O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuOy13ZWJraXQtYm94LWFsaWduOmNlbnRlcjstbXMtZmxleC1hbGlnbjpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2hlaWdodDozNHB4O3BhZGRpbmc6MCAxNXB4O3RleHQtYWxpZ246bGVmdDtvdXRsaW5lOjA7Y3Vyc29yOnBvaW50ZXJ9LmVsLWNhc2NhZGVyX19zdWdnZXN0aW9uLWl0ZW06Zm9jdXMsLmVsLWNhc2NhZGVyX19zdWdnZXN0aW9uLWl0ZW06aG92ZXJ7YmFja2dyb3VuZDojRjVGN0ZBfS5lbC1jYXNjYWRlcl9fc3VnZ2VzdGlvbi1pdGVtLmlzLWNoZWNrZWR7Y29sb3I6IzQwOUVGRjtmb250LXdlaWdodDo3MDB9LmVsLWNhc2NhZGVyX19zdWdnZXN0aW9uLWl0ZW0+c3BhbnttYXJnaW4tcmlnaHQ6MTBweH0uZWwtY2FzY2FkZXJfX2VtcHR5LXRleHR7bWFyZ2luOjEwcHggMDtjb2xvcjojQzBDNENDfS5lbC1jYXNjYWRlcl9fc2VhcmNoLWlucHV0ey13ZWJraXQtYm94LWZsZXg6MTstbXMtZmxleDoxO2ZsZXg6MTtoZWlnaHQ6MjRweDttaW4td2lkdGg6NjBweDttYXJnaW46MnB4IDAgMnB4IDE1cHg7cGFkZGluZzowO2NvbG9yOiM2MDYyNjY7Ym9yZGVyOm5vbmU7b3V0bGluZTowO2JveC1zaXppbmc6Ym9yZGVyLWJveH0uZWwtY2FzY2FkZXJfX3NlYXJjaC1pbnB1dDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjojQzBDNENDfS5lbC1jYXNjYWRlcl9fc2VhcmNoLWlucHV0Oi1tcy1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjojQzBDNENDfS5lbC1jYXNjYWRlcl9fc2VhcmNoLWlucHV0OjotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6I0MwQzRDQ30uZWwtY2FzY2FkZXJfX3NlYXJjaC1pbnB1dDo6cGxhY2Vob2xkZXJ7Y29sb3I6I0MwQzRDQ30uZWwtY29sb3ItcHJlZGVmaW5le2Rpc3BsYXk6LXdlYmtpdC1ib3g7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7Zm9udC1zaXplOjEycHg7bWFyZ2luLXRvcDo4cHg7d2lkdGg6MjgwcHh9LmVsLWNvbG9yLXByZWRlZmluZV9fY29sb3Jze2Rpc3BsYXk6LXdlYmtpdC1ib3g7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7LXdlYmtpdC1ib3gtZmxleDoxOy1tcy1mbGV4OjE7ZmxleDoxOy1tcy1mbGV4LXdyYXA6d3JhcDtmbGV4LXdyYXA6d3JhcH0uZWwtY29sb3ItcHJlZGVmaW5lX19jb2xvci1zZWxlY3RvcnttYXJnaW46MCAwIDhweCA4cHg7d2lkdGg6MjBweDtoZWlnaHQ6MjBweDtib3JkZXItcmFkaXVzOjRweDtjdXJzb3I6cG9pbnRlcn0uZWwtY29sb3ItcHJlZGVmaW5lX19jb2xvci1zZWxlY3RvcjpudGgtY2hpbGQoMTBuKzEpe21hcmdpbi1sZWZ0OjB9LmVsLWNvbG9yLXByZWRlZmluZV9fY29sb3Itc2VsZWN0b3Iuc2VsZWN0ZWR7LXdlYmtpdC1ib3gtc2hhZG93OjAgMCAzcHggMnB4ICM0MDlFRkY7Ym94LXNoYWRvdzowIDAgM3B4IDJweCAjNDA5RUZGfS5lbC1jb2xvci1wcmVkZWZpbmVfX2NvbG9yLXNlbGVjdG9yPmRpdntkaXNwbGF5Oi13ZWJraXQtYm94O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4O2hlaWdodDoxMDAlO2JvcmRlci1yYWRpdXM6M3B4fS5lbC1jb2xvci1wcmVkZWZpbmVfX2NvbG9yLXNlbGVjdG9yLmlzLWFscGhhe2JhY2tncm91bmQtaW1hZ2U6dXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQXdBQUFBTUNBSUFBQURaRjh1d0FBQUFHVWxFUVZRWVYyTTRnd0grWXdDR0lhc0lVd2hUMjVCVkJBRHR6WU5Zckh2djRnQUFBQUJKUlU1RXJrSmdnZz09KX0uZWwtY29sb3ItaHVlLXNsaWRlcntwb3NpdGlvbjpyZWxhdGl2ZTstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3g7d2lkdGg6MjgwcHg7aGVpZ2h0OjEycHg7YmFja2dyb3VuZC1jb2xvcjpyZWQ7cGFkZGluZzowIDJweH0uZWwtY29sb3ItaHVlLXNsaWRlcl9fYmFye3Bvc2l0aW9uOnJlbGF0aXZlO2JhY2tncm91bmQ6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsbGVmdCB0b3AscmlnaHQgdG9wLGZyb20ocmVkKSxjb2xvci1zdG9wKDE3JSwjZmYwKSxjb2xvci1zdG9wKDMzJSwjMGYwKSxjb2xvci1zdG9wKDUwJSwjMGZmKSxjb2xvci1zdG9wKDY3JSwjMDBmKSxjb2xvci1zdG9wKDgzJSwjZjBmKSx0byhyZWQpKTtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCxyZWQgMCwjZmYwIDE3JSwjMGYwIDMzJSwjMGZmIDUwJSwjMDBmIDY3JSwjZjBmIDgzJSxyZWQgMTAwJSk7aGVpZ2h0OjEwMCV9LmVsLWNvbG9yLWh1ZS1zbGlkZXJfX3RodW1ie3Bvc2l0aW9uOmFic29sdXRlO2N1cnNvcjpwb2ludGVyOy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDtsZWZ0OjA7dG9wOjA7d2lkdGg6NHB4O2hlaWdodDoxMDAlO2JvcmRlci1yYWRpdXM6MXB4O2JhY2tncm91bmQ6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNmMGYwZjA7LXdlYmtpdC1ib3gtc2hhZG93OjAgMCAycHggcmdiYSgwLDAsMCwuNik7Ym94LXNoYWRvdzowIDAgMnB4IHJnYmEoMCwwLDAsLjYpO3otaW5kZXg6MX0uZWwtY29sb3ItaHVlLXNsaWRlci5pcy12ZXJ0aWNhbHt3aWR0aDoxMnB4O2hlaWdodDoxODBweDtwYWRkaW5nOjJweCAwfS5lbC1jb2xvci1odWUtc2xpZGVyLmlzLXZlcnRpY2FsIC5lbC1jb2xvci1odWUtc2xpZGVyX19iYXJ7YmFja2dyb3VuZDotd2Via2l0LWdyYWRpZW50KGxpbmVhcixsZWZ0IHRvcCxsZWZ0IGJvdHRvbSxmcm9tKHJlZCksY29sb3Itc3RvcCgxNyUsI2ZmMCksY29sb3Itc3RvcCgzMyUsIzBmMCksY29sb3Itc3RvcCg1MCUsIzBmZiksY29sb3Itc3RvcCg2NyUsIzAwZiksY29sb3Itc3RvcCg4MyUsI2YwZiksdG8ocmVkKSk7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLHJlZCAwLCNmZjAgMTclLCMwZjAgMzMlLCMwZmYgNTAlLCMwMGYgNjclLCNmMGYgODMlLHJlZCAxMDAlKX0uZWwtY29sb3ItaHVlLXNsaWRlci5pcy12ZXJ0aWNhbCAuZWwtY29sb3ItaHVlLXNsaWRlcl9fdGh1bWJ7bGVmdDowO3RvcDowO3dpZHRoOjEwMCU7aGVpZ2h0OjRweH0uZWwtY29sb3Itc3ZwYW5lbHtwb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDoyODBweDtoZWlnaHQ6MTgwcHh9LmVsLWNvbG9yLXN2cGFuZWxfX2JsYWNrLC5lbC1jb2xvci1zdnBhbmVsX193aGl0ZXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MH0uZWwtY29sb3Itc3ZwYW5lbF9fd2hpdGV7YmFja2dyb3VuZDotd2Via2l0LWdyYWRpZW50KGxpbmVhcixsZWZ0IHRvcCxyaWdodCB0b3AsZnJvbSgjZmZmKSx0byhyZ2JhKDI1NSwyNTUsMjU1LDApKSk7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsI2ZmZixyZ2JhKDI1NSwyNTUsMjU1LDApKX0uZWwtY29sb3Itc3ZwYW5lbF9fYmxhY2t7YmFja2dyb3VuZDotd2Via2l0LWdyYWRpZW50KGxpbmVhcixsZWZ0IGJvdHRvbSxsZWZ0IHRvcCxmcm9tKCMwMDApLHRvKHJnYmEoMCwwLDAsMCkpKTtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byB0b3AsIzAwMCxyZ2JhKDAsMCwwLDApKX0uZWwtY29sb3Itc3ZwYW5lbF9fY3Vyc29ye3Bvc2l0aW9uOmFic29sdXRlfS5lbC1jb2xvci1zdnBhbmVsX19jdXJzb3I+ZGl2e2N1cnNvcjpoZWFkO3dpZHRoOjRweDtoZWlnaHQ6NHB4Oy13ZWJraXQtYm94LXNoYWRvdzowIDAgMCAxLjVweCAjZmZmLGluc2V0IDAgMCAxcHggMXB4IHJnYmEoMCwwLDAsLjMpLDAgMCAxcHggMnB4IHJnYmEoMCwwLDAsLjQpO2JveC1zaGFkb3c6MCAwIDAgMS41cHggI2ZmZixpbnNldCAwIDAgMXB4IDFweCByZ2JhKDAsMCwwLC4zKSwwIDAgMXB4IDJweCByZ2JhKDAsMCwwLC40KTtib3JkZXItcmFkaXVzOjUwJTstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUoLTJweCwtMnB4KTt0cmFuc2Zvcm06dHJhbnNsYXRlKC0ycHgsLTJweCl9LmVsLWNvbG9yLWFscGhhLXNsaWRlcntwb3NpdGlvbjpyZWxhdGl2ZTstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3g7d2lkdGg6MjgwcHg7aGVpZ2h0OjEycHg7YmFja2dyb3VuZDp1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBd0FBQUFNQ0FJQUFBRFpGOHV3QUFBQUdVbEVRVlFZVjJNNGd3SCtZd0NHSWFzSVV3aFQyNUJWQkFEdHpZTllySHZ2NGdBQUFBQkpSVTVFcmtKZ2dnPT0pfS5lbC1jb2xvci1hbHBoYS1zbGlkZXJfX2Jhcntwb3NpdGlvbjpyZWxhdGl2ZTtiYWNrZ3JvdW5kOi13ZWJraXQtZ3JhZGllbnQobGluZWFyLGxlZnQgdG9wLHJpZ2h0IHRvcCxmcm9tKHJnYmEoMjU1LDI1NSwyNTUsMCkpLHRvKHdoaXRlKSk7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQscmdiYSgyNTUsMjU1LDI1NSwwKSAwLCNmZmYgMTAwJSk7aGVpZ2h0OjEwMCV9LmVsLWNvbG9yLWFscGhhLXNsaWRlcl9fdGh1bWJ7cG9zaXRpb246YWJzb2x1dGU7Y3Vyc29yOnBvaW50ZXI7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94O2xlZnQ6MDt0b3A6MDt3aWR0aDo0cHg7aGVpZ2h0OjEwMCU7Ym9yZGVyLXJhZGl1czoxcHg7YmFja2dyb3VuZDojZmZmO2JvcmRlcjoxcHggc29saWQgI2YwZjBmMDstd2Via2l0LWJveC1zaGFkb3c6MCAwIDJweCByZ2JhKDAsMCwwLC42KTtib3gtc2hhZG93OjAgMCAycHggcmdiYSgwLDAsMCwuNik7ei1pbmRleDoxfS5lbC1jb2xvci1hbHBoYS1zbGlkZXIuaXMtdmVydGljYWx7d2lkdGg6MjBweDtoZWlnaHQ6MTgwcHh9LmVsLWNvbG9yLWFscGhhLXNsaWRlci5pcy12ZXJ0aWNhbCAuZWwtY29sb3ItYWxwaGEtc2xpZGVyX19iYXJ7YmFja2dyb3VuZDotd2Via2l0LWdyYWRpZW50KGxpbmVhcixsZWZ0IHRvcCxsZWZ0IGJvdHRvbSxmcm9tKHJnYmEoMjU1LDI1NSwyNTUsMCkpLHRvKHdoaXRlKSk7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLHJnYmEoMjU1LDI1NSwyNTUsMCkgMCwjZmZmIDEwMCUpfS5lbC1jb2xvci1hbHBoYS1zbGlkZXIuaXMtdmVydGljYWwgLmVsLWNvbG9yLWFscGhhLXNsaWRlcl9fdGh1bWJ7bGVmdDowO3RvcDowO3dpZHRoOjEwMCU7aGVpZ2h0OjRweH0uZWwtY29sb3ItZHJvcGRvd257d2lkdGg6MzAwcHh9LmVsLWNvbG9yLWRyb3Bkb3duX19tYWluLXdyYXBwZXJ7bWFyZ2luLWJvdHRvbTo2cHh9LmVsLWNvbG9yLWRyb3Bkb3duX19tYWluLXdyYXBwZXI6OmFmdGVye2Rpc3BsYXk6dGFibGU7Y2xlYXI6Ym90aH0uZWwtY29sb3ItZHJvcGRvd25fX2J0bnN7bWFyZ2luLXRvcDo2cHg7dGV4dC1hbGlnbjpyaWdodH0uZWwtY29sb3ItZHJvcGRvd25fX3ZhbHVle2Zsb2F0OmxlZnQ7bGluZS1oZWlnaHQ6MjZweDtmb250LXNpemU6MTJweDtjb2xvcjojMDAwO3dpZHRoOjE2MHB4fS5lbC1jb2xvci1kcm9wZG93bl9fYnRue2JvcmRlcjoxcHggc29saWQgI2RjZGNkYztjb2xvcjojMzMzO2xpbmUtaGVpZ2h0OjI0cHg7Ym9yZGVyLXJhZGl1czoycHg7cGFkZGluZzowIDIwcHg7Y3Vyc29yOnBvaW50ZXI7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtvdXRsaW5lOjA7Zm9udC1zaXplOjEycHh9LmVsLWNvbG9yLWRyb3Bkb3duX19idG5bZGlzYWJsZWRde2NvbG9yOiNjY2M7Y3Vyc29yOm5vdC1hbGxvd2VkfS5lbC1jb2xvci1kcm9wZG93bl9fYnRuOmhvdmVye2NvbG9yOiM0MDlFRkY7Ym9yZGVyLWNvbG9yOiM0MDlFRkZ9LmVsLWNvbG9yLWRyb3Bkb3duX19saW5rLWJ0bntjdXJzb3I6cG9pbnRlcjtjb2xvcjojNDA5RUZGO3RleHQtZGVjb3JhdGlvbjpub25lO3BhZGRpbmc6MTVweDtmb250LXNpemU6MTJweH0uZWwtY29sb3ItZHJvcGRvd25fX2xpbmstYnRuOmhvdmVye2NvbG9yOnRpbnQoIzQwOUVGRiwyMCUpfS5lbC1jb2xvci1waWNrZXJ7ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246cmVsYXRpdmU7bGluZS1oZWlnaHQ6bm9ybWFsO2hlaWdodDo0MHB4fS5lbC1jb2xvci1waWNrZXIuaXMtZGlzYWJsZWQgLmVsLWNvbG9yLXBpY2tlcl9fdHJpZ2dlcntjdXJzb3I6bm90LWFsbG93ZWR9LmVsLWNvbG9yLXBpY2tlci0tbWVkaXVte2hlaWdodDozNnB4fS5lbC1jb2xvci1waWNrZXItLW1lZGl1bSAuZWwtY29sb3ItcGlja2VyX190cmlnZ2Vye2hlaWdodDozNnB4O3dpZHRoOjM2cHh9LmVsLWNvbG9yLXBpY2tlci0tbWVkaXVtIC5lbC1jb2xvci1waWNrZXJfX21hc2t7aGVpZ2h0OjM0cHg7d2lkdGg6MzRweH0uZWwtY29sb3ItcGlja2VyLS1zbWFsbHtoZWlnaHQ6MzJweH0uZWwtY29sb3ItcGlja2VyLS1zbWFsbCAuZWwtY29sb3ItcGlja2VyX190cmlnZ2Vye2hlaWdodDozMnB4O3dpZHRoOjMycHh9LmVsLWNvbG9yLXBpY2tlci0tc21hbGwgLmVsLWNvbG9yLXBpY2tlcl9fbWFza3toZWlnaHQ6MzBweDt3aWR0aDozMHB4fS5lbC1jb2xvci1waWNrZXItLXNtYWxsIC5lbC1jb2xvci1waWNrZXJfX2VtcHR5LC5lbC1jb2xvci1waWNrZXItLXNtYWxsIC5lbC1jb2xvci1waWNrZXJfX2ljb257LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlM2QoLTUwJSwtNTAlLDApIHNjYWxlKC44KTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoLTUwJSwtNTAlLDApIHNjYWxlKC44KX0uZWwtY29sb3ItcGlja2VyLS1taW5pe2hlaWdodDoyOHB4fS5lbC1jb2xvci1waWNrZXItLW1pbmkgLmVsLWNvbG9yLXBpY2tlcl9fdHJpZ2dlcntoZWlnaHQ6MjhweDt3aWR0aDoyOHB4fS5lbC1jb2xvci1waWNrZXItLW1pbmkgLmVsLWNvbG9yLXBpY2tlcl9fbWFza3toZWlnaHQ6MjZweDt3aWR0aDoyNnB4fS5lbC1jb2xvci1waWNrZXItLW1pbmkgLmVsLWNvbG9yLXBpY2tlcl9fZW1wdHksLmVsLWNvbG9yLXBpY2tlci0tbWluaSAuZWwtY29sb3ItcGlja2VyX19pY29uey13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZTNkKC01MCUsLTUwJSwwKSBzY2FsZSguOCk7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKC01MCUsLTUwJSwwKSBzY2FsZSguOCl9LmVsLWNvbG9yLXBpY2tlcl9fbWFza3toZWlnaHQ6MzhweDt3aWR0aDozOHB4O2JvcmRlci1yYWRpdXM6NHB4O3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxcHg7bGVmdDoxcHg7ei1pbmRleDoxO2N1cnNvcjpub3QtYWxsb3dlZDtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS5lbC1jb2xvci1waWNrZXJfX3RyaWdnZXJ7ZGlzcGxheTppbmxpbmUtYmxvY2s7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94O2hlaWdodDo0MHB4O3dpZHRoOjQwcHg7cGFkZGluZzo0cHg7Ym9yZGVyOjFweCBzb2xpZCAjZTZlNmU2O2JvcmRlci1yYWRpdXM6NHB4O2ZvbnQtc2l6ZTowO3Bvc2l0aW9uOnJlbGF0aXZlO2N1cnNvcjpwb2ludGVyfS5lbC1jb2xvci1waWNrZXJfX2NvbG9ye3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6YmxvY2s7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlcjoxcHggc29saWQgIzk5OTtib3JkZXItcmFkaXVzOjJweDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3RleHQtYWxpZ246Y2VudGVyfS5lbC1jb2xvci1waWNrZXJfX2ljb24sLmVsLWlucHV0LC5lbC10ZXh0YXJlYXtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDoxMDAlfS5lbC1jb2xvci1waWNrZXJfX2NvbG9yLmlzLWFscGhhe2JhY2tncm91bmQtaW1hZ2U6dXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQXdBQUFBTUNBSUFBQURaRjh1d0FBQUFHVWxFUVZRWVYyTTRnd0grWXdDR0lhc0lVd2hUMjVCVkJBRHR6WU5Zckh2djRnQUFBQUJKUlU1RXJrSmdnZz09KX0uZWwtY29sb3ItcGlja2VyX19jb2xvci1pbm5lcntwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7dG9wOjA7cmlnaHQ6MDtib3R0b206MH0uZWwtY29sb3ItcGlja2VyX19lbXB0eXtmb250LXNpemU6MTJweDtjb2xvcjojOTk5O3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7bGVmdDo1MCU7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlM2QoLTUwJSwtNTAlLDApO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgtNTAlLC01MCUsMCl9LmVsLWNvbG9yLXBpY2tlcl9faWNvbntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO2xlZnQ6NTAlOy13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZTNkKC01MCUsLTUwJSwwKTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoLTUwJSwtNTAlLDApO2NvbG9yOiNGRkY7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC1zaXplOjEycHh9LmVsLWlucHV0X19wcmVmaXgsLmVsLWlucHV0X19zdWZmaXh7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7dGV4dC1hbGlnbjpjZW50ZXJ9LmVsLWNvbG9yLXBpY2tlcl9fcGFuZWx7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDtwYWRkaW5nOjZweDstd2Via2l0LWJveC1zaXppbmc6Y29udGVudC1ib3g7Ym94LXNpemluZzpjb250ZW50LWJveDtiYWNrZ3JvdW5kLWNvbG9yOiNGRkY7Ym9yZGVyOjFweCBzb2xpZCAjRUJFRUY1O2JvcmRlci1yYWRpdXM6NHB4O2JveC1zaGFkb3c6MCAycHggMTJweCAwIHJnYmEoMCwwLDAsLjEpfS5lbC1pbnB1dF9faW5uZXIsLmVsLXRleHRhcmVhX19pbm5lciwuZWwtdHJhbnNmZXItcGFuZWx7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3h9LmVsLXRleHRhcmVhe3Bvc2l0aW9uOnJlbGF0aXZlO3ZlcnRpY2FsLWFsaWduOmJvdHRvbTtmb250LXNpemU6MTRweH0uZWwtdGV4dGFyZWFfX2lubmVye2Rpc3BsYXk6YmxvY2s7cmVzaXplOnZlcnRpY2FsO3BhZGRpbmc6NXB4IDE1cHg7bGluZS1oZWlnaHQ6MS41O2JveC1zaXppbmc6Ym9yZGVyLWJveDt3aWR0aDoxMDAlO2ZvbnQtc2l6ZTppbmhlcml0O2NvbG9yOiM2MDYyNjY7YmFja2dyb3VuZC1jb2xvcjojRkZGO2JhY2tncm91bmQtaW1hZ2U6bm9uZTtib3JkZXI6MXB4IHNvbGlkICNEQ0RGRTY7Ym9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC10cmFuc2l0aW9uOmJvcmRlci1jb2xvciAuMnMgY3ViaWMtYmV6aWVyKC42NDUsLjA0NSwuMzU1LDEpO3RyYW5zaXRpb246Ym9yZGVyLWNvbG9yIC4ycyBjdWJpYy1iZXppZXIoLjY0NSwuMDQ1LC4zNTUsMSl9LmVsLXRleHRhcmVhX19pbm5lcjo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjojQzBDNENDfS5lbC10ZXh0YXJlYV9faW5uZXI6LW1zLWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOiNDMEM0Q0N9LmVsLXRleHRhcmVhX19pbm5lcjo6LW1zLWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOiNDMEM0Q0N9LmVsLXRleHRhcmVhX19pbm5lcjo6cGxhY2Vob2xkZXJ7Y29sb3I6I0MwQzRDQ30uZWwtdGV4dGFyZWFfX2lubmVyOmhvdmVye2JvcmRlci1jb2xvcjojQzBDNENDfS5lbC10ZXh0YXJlYV9faW5uZXI6Zm9jdXN7b3V0bGluZTowO2JvcmRlci1jb2xvcjojNDA5RUZGfS5lbC10ZXh0YXJlYSAuZWwtaW5wdXRfX2NvdW50e2NvbG9yOiM5MDkzOTk7YmFja2dyb3VuZDojRkZGO3Bvc2l0aW9uOmFic29sdXRlO2ZvbnQtc2l6ZToxMnB4O2JvdHRvbTo1cHg7cmlnaHQ6MTBweH0uZWwtdGV4dGFyZWEuaXMtZGlzYWJsZWQgLmVsLXRleHRhcmVhX19pbm5lcntiYWNrZ3JvdW5kLWNvbG9yOiNGNUY3RkE7Ym9yZGVyLWNvbG9yOiNFNEU3RUQ7Y29sb3I6I0MwQzRDQztjdXJzb3I6bm90LWFsbG93ZWR9LmVsLXRleHRhcmVhLmlzLWRpc2FibGVkIC5lbC10ZXh0YXJlYV9faW5uZXI6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6I0MwQzRDQ30uZWwtdGV4dGFyZWEuaXMtZGlzYWJsZWQgLmVsLXRleHRhcmVhX19pbm5lcjotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6I0MwQzRDQ30uZWwtdGV4dGFyZWEuaXMtZGlzYWJsZWQgLmVsLXRleHRhcmVhX19pbm5lcjo6LW1zLWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOiNDMEM0Q0N9LmVsLXRleHRhcmVhLmlzLWRpc2FibGVkIC5lbC10ZXh0YXJlYV9faW5uZXI6OnBsYWNlaG9sZGVye2NvbG9yOiNDMEM0Q0N9LmVsLXRleHRhcmVhLmlzLWV4Y2VlZCAuZWwtdGV4dGFyZWFfX2lubmVye2JvcmRlci1jb2xvcjojRjU2QzZDfS5lbC10ZXh0YXJlYS5pcy1leGNlZWQgLmVsLWlucHV0X19jb3VudHtjb2xvcjojRjU2QzZDfS5lbC1pbnB1dHtwb3NpdGlvbjpyZWxhdGl2ZTtmb250LXNpemU6MTRweH0uZWwtaW5wdXQ6Oi13ZWJraXQtc2Nyb2xsYmFye3otaW5kZXg6MTE7d2lkdGg6NnB4fS5lbC1pbnB1dDo6LXdlYmtpdC1zY3JvbGxiYXI6aG9yaXpvbnRhbHtoZWlnaHQ6NnB4fS5lbC1pbnB1dDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWJ7Ym9yZGVyLXJhZGl1czo1cHg7d2lkdGg6NnB4O2JhY2tncm91bmQ6I2I0YmNjY30uZWwtaW5wdXQ6Oi13ZWJraXQtc2Nyb2xsYmFyLWNvcm5lcntiYWNrZ3JvdW5kOiNmZmZ9LmVsLWlucHV0Ojotd2Via2l0LXNjcm9sbGJhci10cmFja3tiYWNrZ3JvdW5kOiNmZmZ9LmVsLWlucHV0Ojotd2Via2l0LXNjcm9sbGJhci10cmFjay1waWVjZXtiYWNrZ3JvdW5kOiNmZmY7d2lkdGg6NnB4fS5lbC1pbnB1dCAuZWwtaW5wdXRfX2NsZWFye2NvbG9yOiNDMEM0Q0M7Zm9udC1zaXplOjE0cHg7Y3Vyc29yOnBvaW50ZXI7LXdlYmtpdC10cmFuc2l0aW9uOmNvbG9yIC4ycyBjdWJpYy1iZXppZXIoLjY0NSwuMDQ1LC4zNTUsMSk7dHJhbnNpdGlvbjpjb2xvciAuMnMgY3ViaWMtYmV6aWVyKC42NDUsLjA0NSwuMzU1LDEpfS5lbC1pbnB1dCAuZWwtaW5wdXRfX2NsZWFyOmhvdmVye2NvbG9yOiM5MDkzOTl9LmVsLWlucHV0IC5lbC1pbnB1dF9fY291bnR7aGVpZ2h0OjEwMCU7ZGlzcGxheTotd2Via2l0LWlubGluZS1ib3g7ZGlzcGxheTotbXMtaW5saW5lLWZsZXhib3g7ZGlzcGxheTppbmxpbmUtZmxleDstd2Via2l0LWJveC1hbGlnbjpjZW50ZXI7LW1zLWZsZXgtYWxpZ246Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtjb2xvcjojOTA5Mzk5O2ZvbnQtc2l6ZToxMnB4fS5lbC1pbnB1dC1ncm91cF9fYXBwZW5kIC5lbC1idXR0b24sLmVsLWlucHV0LWdyb3VwX19hcHBlbmQgLmVsLWlucHV0LC5lbC1pbnB1dC1ncm91cF9fcHJlcGVuZCAuZWwtYnV0dG9uLC5lbC1pbnB1dC1ncm91cF9fcHJlcGVuZCAuZWwtaW5wdXQsLmVsLWlucHV0X19pbm5lcntmb250LXNpemU6aW5oZXJpdH0uZWwtaW5wdXQgLmVsLWlucHV0X19jb3VudCAuZWwtaW5wdXRfX2NvdW50LWlubmVye2JhY2tncm91bmQ6I0ZGRjtsaW5lLWhlaWdodDppbml0aWFsO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6MCA1cHh9LmVsLWlucHV0X19pbm5lcnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiNGRkY7YmFja2dyb3VuZC1pbWFnZTpub25lO2JvcmRlci1yYWRpdXM6NHB4O2JvcmRlcjoxcHggc29saWQgI0RDREZFNjtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6IzYwNjI2NjtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6NDBweDtsaW5lLWhlaWdodDo0MHB4O291dGxpbmU6MDtwYWRkaW5nOjAgMTVweDstd2Via2l0LXRyYW5zaXRpb246Ym9yZGVyLWNvbG9yIC4ycyBjdWJpYy1iZXppZXIoLjY0NSwuMDQ1LC4zNTUsMSk7dHJhbnNpdGlvbjpib3JkZXItY29sb3IgLjJzIGN1YmljLWJlemllciguNjQ1LC4wNDUsLjM1NSwxKTt3aWR0aDoxMDAlfS5lbC1pbnB1dF9faW5uZXI6Oi1tcy1yZXZlYWx7ZGlzcGxheTpub25lfS5lbC1pbnB1dF9faW5uZXI6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6I0MwQzRDQ30uZWwtaW5wdXRfX2lubmVyOi1tcy1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjojQzBDNENDfS5lbC1pbnB1dF9faW5uZXI6Oi1tcy1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjojQzBDNENDfS5lbC1pbnB1dF9faW5uZXI6OnBsYWNlaG9sZGVye2NvbG9yOiNDMEM0Q0N9LmVsLWlucHV0X19pbm5lcjpob3Zlcntib3JkZXItY29sb3I6I0MwQzRDQ30uZWwtaW5wdXQuaXMtYWN0aXZlIC5lbC1pbnB1dF9faW5uZXIsLmVsLWlucHV0X19pbm5lcjpmb2N1c3tib3JkZXItY29sb3I6IzQwOUVGRjtvdXRsaW5lOjB9LmVsLWlucHV0X19zdWZmaXh7aGVpZ2h0OjEwMCU7cmlnaHQ6NXB4O3RyYW5zaXRpb246YWxsIC4zcztwb2ludGVyLWV2ZW50czpub25lfS5lbC1pbnB1dF9fc3VmZml4LWlubmVye3BvaW50ZXItZXZlbnRzOmFsbH0uZWwtaW5wdXRfX3ByZWZpeHtoZWlnaHQ6MTAwJTtsZWZ0OjVweDt0cmFuc2l0aW9uOmFsbCAuM3N9LmVsLWlucHV0X19pY29ue2hlaWdodDoxMDAlO3dpZHRoOjI1cHg7dGV4dC1hbGlnbjpjZW50ZXI7LXdlYmtpdC10cmFuc2l0aW9uOmFsbCAuM3M7dHJhbnNpdGlvbjphbGwgLjNzO2xpbmUtaGVpZ2h0OjQwcHh9LmVsLWlucHV0X19pY29uOmFmdGVye2NvbnRlbnQ6Jyc7aGVpZ2h0OjEwMCU7d2lkdGg6MDtkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmVsLWlucHV0X192YWxpZGF0ZUljb257cG9pbnRlci1ldmVudHM6bm9uZX0uZWwtaW5wdXQuaXMtZGlzYWJsZWQgLmVsLWlucHV0X19pbm5lcntiYWNrZ3JvdW5kLWNvbG9yOiNGNUY3RkE7Ym9yZGVyLWNvbG9yOiNFNEU3RUQ7Y29sb3I6I0MwQzRDQztjdXJzb3I6bm90LWFsbG93ZWR9LmVsLWlucHV0LmlzLWRpc2FibGVkIC5lbC1pbnB1dF9faW5uZXI6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6I0MwQzRDQ30uZWwtaW5wdXQuaXMtZGlzYWJsZWQgLmVsLWlucHV0X19pbm5lcjotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6I0MwQzRDQ30uZWwtaW5wdXQuaXMtZGlzYWJsZWQgLmVsLWlucHV0X19pbm5lcjo6LW1zLWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOiNDMEM0Q0N9LmVsLWlucHV0LmlzLWRpc2FibGVkIC5lbC1pbnB1dF9faW5uZXI6OnBsYWNlaG9sZGVye2NvbG9yOiNDMEM0Q0N9LmVsLWlucHV0LmlzLWRpc2FibGVkIC5lbC1pbnB1dF9faWNvbntjdXJzb3I6bm90LWFsbG93ZWR9LmVsLWltYWdlLXZpZXdlcl9fYnRuLC5lbC1pbWFnZV9fcHJldmlldywuZWwtbGluaywuZWwtdHJhbnNmZXItcGFuZWxfX2ZpbHRlciAuZWwtaWNvbi1jaXJjbGUtY2xvc2V7Y3Vyc29yOnBvaW50ZXJ9LmVsLWlucHV0LmlzLWV4Y2VlZCAuZWwtaW5wdXRfX2lubmVye2JvcmRlci1jb2xvcjojRjU2QzZDfS5lbC1pbnB1dC5pcy1leGNlZWQgLmVsLWlucHV0X19zdWZmaXggLmVsLWlucHV0X19jb3VudHtjb2xvcjojRjU2QzZDfS5lbC1pbnB1dC0tc3VmZml4IC5lbC1pbnB1dF9faW5uZXJ7cGFkZGluZy1yaWdodDozMHB4fS5lbC1pbnB1dC0tcHJlZml4IC5lbC1pbnB1dF9faW5uZXJ7cGFkZGluZy1sZWZ0OjMwcHh9LmVsLWlucHV0LS1tZWRpdW17Zm9udC1zaXplOjE0cHh9LmVsLWlucHV0LS1tZWRpdW0gLmVsLWlucHV0X19pbm5lcntoZWlnaHQ6MzZweDtsaW5lLWhlaWdodDozNnB4fS5lbC1pbnB1dC0tbWVkaXVtIC5lbC1pbnB1dF9faWNvbntsaW5lLWhlaWdodDozNnB4fS5lbC1pbnB1dC0tc21hbGx7Zm9udC1zaXplOjEzcHh9LmVsLWlucHV0LS1zbWFsbCAuZWwtaW5wdXRfX2lubmVye2hlaWdodDozMnB4O2xpbmUtaGVpZ2h0OjMycHh9LmVsLWlucHV0LS1zbWFsbCAuZWwtaW5wdXRfX2ljb257bGluZS1oZWlnaHQ6MzJweH0uZWwtaW5wdXQtLW1pbml7Zm9udC1zaXplOjEycHh9LmVsLWlucHV0LS1taW5pIC5lbC1pbnB1dF9faW5uZXJ7aGVpZ2h0OjI4cHg7bGluZS1oZWlnaHQ6MjhweH0uZWwtaW5wdXQtLW1pbmkgLmVsLWlucHV0X19pY29ue2xpbmUtaGVpZ2h0OjI4cHh9LmVsLWlucHV0LWdyb3Vwe2xpbmUtaGVpZ2h0Om5vcm1hbDtkaXNwbGF5OmlubGluZS10YWJsZTt3aWR0aDoxMDAlO2JvcmRlci1jb2xsYXBzZTpzZXBhcmF0ZTtib3JkZXItc3BhY2luZzowfS5lbC1pbnB1dC1ncm91cD4uZWwtaW5wdXRfX2lubmVye3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtkaXNwbGF5OnRhYmxlLWNlbGx9LmVsLWlucHV0LWdyb3VwX19hcHBlbmQsLmVsLWlucHV0LWdyb3VwX19wcmVwZW5ke2JhY2tncm91bmQtY29sb3I6I0Y1RjdGQTtjb2xvcjojOTA5Mzk5O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtkaXNwbGF5OnRhYmxlLWNlbGw7cG9zaXRpb246cmVsYXRpdmU7Ym9yZGVyOjFweCBzb2xpZCAjRENERkU2O2JvcmRlci1yYWRpdXM6NHB4O3BhZGRpbmc6MCAyMHB4O3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXB9LmVsLWlucHV0LWdyb3VwLS1hcHBlbmQgLmVsLWlucHV0X19pbm5lciwuZWwtaW5wdXQtZ3JvdXBfX3ByZXBlbmR7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czowfS5lbC1pbnB1dC1ncm91cF9fYXBwZW5kOmZvY3VzLC5lbC1pbnB1dC1ncm91cF9fcHJlcGVuZDpmb2N1c3tvdXRsaW5lOjB9LmVsLWlucHV0LWdyb3VwX19hcHBlbmQgLmVsLWJ1dHRvbiwuZWwtaW5wdXQtZ3JvdXBfX2FwcGVuZCAuZWwtc2VsZWN0LC5lbC1pbnB1dC1ncm91cF9fcHJlcGVuZCAuZWwtYnV0dG9uLC5lbC1pbnB1dC1ncm91cF9fcHJlcGVuZCAuZWwtc2VsZWN0e2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbjotMTBweCAtMjBweH0uZWwtaW5wdXQtZ3JvdXBfX2FwcGVuZCBidXR0b24uZWwtYnV0dG9uLC5lbC1pbnB1dC1ncm91cF9fYXBwZW5kIGRpdi5lbC1zZWxlY3QgLmVsLWlucHV0X19pbm5lciwuZWwtaW5wdXQtZ3JvdXBfX2FwcGVuZCBkaXYuZWwtc2VsZWN0OmhvdmVyIC5lbC1pbnB1dF9faW5uZXIsLmVsLWlucHV0LWdyb3VwX19wcmVwZW5kIGJ1dHRvbi5lbC1idXR0b24sLmVsLWlucHV0LWdyb3VwX19wcmVwZW5kIGRpdi5lbC1zZWxlY3QgLmVsLWlucHV0X19pbm5lciwuZWwtaW5wdXQtZ3JvdXBfX3ByZXBlbmQgZGl2LmVsLXNlbGVjdDpob3ZlciAuZWwtaW5wdXRfX2lubmVye2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudDtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2NvbG9yOmluaGVyaXQ7Ym9yZGVyLXRvcDowO2JvcmRlci1ib3R0b206MH0uZWwtaW5wdXQtZ3JvdXBfX3ByZXBlbmR7Ym9yZGVyLXJpZ2h0OjB9LmVsLWlucHV0LWdyb3VwX19hcHBlbmR7Ym9yZGVyLWxlZnQ6MDtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowfS5lbC1pbnB1dC1ncm91cC0tYXBwZW5kIC5lbC1zZWxlY3QgLmVsLWlucHV0LmlzLWZvY3VzIC5lbC1pbnB1dF9faW5uZXIsLmVsLWlucHV0LWdyb3VwLS1wcmVwZW5kIC5lbC1zZWxlY3QgLmVsLWlucHV0LmlzLWZvY3VzIC5lbC1pbnB1dF9faW5uZXJ7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50fS5lbC1pbnB1dC1ncm91cC0tcHJlcGVuZCAuZWwtaW5wdXRfX2lubmVye2JvcmRlci10b3AtbGVmdC1yYWRpdXM6MDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjB9LmVsLWlucHV0X19pbm5lcjo6LW1zLWNsZWFye2Rpc3BsYXk6bm9uZTt3aWR0aDowO2hlaWdodDowfS5lbC10cmFuc2Zlcntmb250LXNpemU6MTRweH0uZWwtdHJhbnNmZXJfX2J1dHRvbnN7ZGlzcGxheTppbmxpbmUtYmxvY2s7dmVydGljYWwtYWxpZ246bWlkZGxlO3BhZGRpbmc6MCAzMHB4fS5lbC10cmFuc2Zlcl9fYnV0dG9ue2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjAgYXV0bztwYWRkaW5nOjEwcHg7Ym9yZGVyLXJhZGl1czo1MCU7Y29sb3I6I0ZGRjtiYWNrZ3JvdW5kLWNvbG9yOiM0MDlFRkY7Zm9udC1zaXplOjB9LmVsLWJ1dHRvbi1ncm91cD4uZWwtYnV0dG9uKy5lbC1idXR0b24sLmVsLXRyYW5zZmVyLXBhbmVsX19pdGVtKy5lbC10cmFuc2Zlci1wYW5lbF9faXRlbSwuZWwtdHJhbnNmZXJfX2J1dHRvbiBbY2xhc3MqPWVsLWljb24tXStzcGFue21hcmdpbi1sZWZ0OjB9LmVsLWRpdmlkZXJfX3RleHQsLmVsLWltYWdlX19lcnJvciwuZWwtbGluaywuZWwtdGltZWxpbmUsLmVsLXRyYW5zZmVyX19idXR0b24gaSwuZWwtdHJhbnNmZXJfX2J1dHRvbiBzcGFue2ZvbnQtc2l6ZToxNHB4fS5lbC10cmFuc2Zlcl9fYnV0dG9uLmlzLXdpdGgtdGV4dHN7Ym9yZGVyLXJhZGl1czo0cHh9LmVsLXRyYW5zZmVyX19idXR0b24uaXMtZGlzYWJsZWQsLmVsLXRyYW5zZmVyX19idXR0b24uaXMtZGlzYWJsZWQ6aG92ZXJ7Ym9yZGVyOjFweCBzb2xpZCAjRENERkU2O2JhY2tncm91bmQtY29sb3I6I0Y1RjdGQTtjb2xvcjojQzBDNENDfS5lbC10cmFuc2Zlcl9fYnV0dG9uOmZpcnN0LWNoaWxke21hcmdpbi1ib3R0b206MTBweH0uZWwtdHJhbnNmZXJfX2J1dHRvbjpudGgtY2hpbGQoMil7bWFyZ2luOjB9LmVsLXRyYW5zZmVyLXBhbmVse2JvcmRlcjoxcHggc29saWQgI0VCRUVGNTtib3JkZXItcmFkaXVzOjRweDtvdmVyZmxvdzpoaWRkZW47YmFja2dyb3VuZDojRkZGO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDoyMDBweDttYXgtaGVpZ2h0OjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94O3Bvc2l0aW9uOnJlbGF0aXZlfS5lbC10cmFuc2Zlci1wYW5lbF9fYm9keXtoZWlnaHQ6MjQ2cHh9LmVsLXRyYW5zZmVyLXBhbmVsX19ib2R5LmlzLXdpdGgtZm9vdGVye3BhZGRpbmctYm90dG9tOjQwcHh9LmVsLXRyYW5zZmVyLXBhbmVsX19saXN0e21hcmdpbjowO3BhZGRpbmc6NnB4IDA7bGlzdC1zdHlsZTpub25lO2hlaWdodDoyNDZweDtvdmVyZmxvdzphdXRvOy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveH0uZWwtdHJhbnNmZXItcGFuZWxfX2xpc3QuaXMtZmlsdGVyYWJsZXtoZWlnaHQ6MTk0cHg7cGFkZGluZy10b3A6MH0uZWwtdHJhbnNmZXItcGFuZWxfX2l0ZW17aGVpZ2h0OjMwcHg7bGluZS1oZWlnaHQ6MzBweDtwYWRkaW5nLWxlZnQ6MTVweDtkaXNwbGF5OmJsb2NrIWltcG9ydGFudH0uZWwtdHJhbnNmZXItcGFuZWxfX2l0ZW0uZWwtY2hlY2tib3h7Y29sb3I6IzYwNjI2Nn0uZWwtdHJhbnNmZXItcGFuZWxfX2l0ZW06aG92ZXJ7Y29sb3I6IzQwOUVGRn0uZWwtdHJhbnNmZXItcGFuZWxfX2l0ZW0uZWwtY2hlY2tib3ggLmVsLWNoZWNrYm94X19sYWJlbHt3aWR0aDoxMDAlO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcDtkaXNwbGF5OmJsb2NrOy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nLWxlZnQ6MjRweDtsaW5lLWhlaWdodDozMHB4fS5lbC10cmFuc2Zlci1wYW5lbF9faXRlbSAuZWwtY2hlY2tib3hfX2lucHV0e3Bvc2l0aW9uOmFic29sdXRlO3RvcDo4cHh9LmVsLXRyYW5zZmVyLXBhbmVsX19maWx0ZXJ7dGV4dC1hbGlnbjpjZW50ZXI7bWFyZ2luOjE1cHg7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6YmxvY2s7d2lkdGg6YXV0b30uZWwtdHJhbnNmZXItcGFuZWxfX2ZpbHRlciAuZWwtaW5wdXRfX2lubmVye2hlaWdodDozMnB4O3dpZHRoOjEwMCU7Zm9udC1zaXplOjEycHg7ZGlzcGxheTppbmxpbmUtYmxvY2s7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlci1yYWRpdXM6MTZweDtwYWRkaW5nLXJpZ2h0OjEwcHg7cGFkZGluZy1sZWZ0OjMwcHh9LmVsLXRyYW5zZmVyLXBhbmVsX19maWx0ZXIgLmVsLWlucHV0X19pY29ue21hcmdpbi1sZWZ0OjVweH0uZWwtdHJhbnNmZXItcGFuZWwgLmVsLXRyYW5zZmVyLXBhbmVsX19oZWFkZXJ7aGVpZ2h0OjQwcHg7bGluZS1oZWlnaHQ6NDBweDtiYWNrZ3JvdW5kOiNGNUY3RkE7bWFyZ2luOjA7cGFkZGluZy1sZWZ0OjE1cHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI0VCRUVGNTstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6IzAwMH0uZWwtY29udGFpbmVyLC5lbC1oZWFkZXJ7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3h9LmVsLXRyYW5zZmVyLXBhbmVsIC5lbC10cmFuc2Zlci1wYW5lbF9faGVhZGVyIC5lbC1jaGVja2JveHtkaXNwbGF5OmJsb2NrO2xpbmUtaGVpZ2h0OjQwcHh9LmVsLXRyYW5zZmVyLXBhbmVsIC5lbC10cmFuc2Zlci1wYW5lbF9faGVhZGVyIC5lbC1jaGVja2JveCAuZWwtY2hlY2tib3hfX2xhYmVse2ZvbnQtc2l6ZToxNnB4O2NvbG9yOiMzMDMxMzM7Zm9udC13ZWlnaHQ6NDAwfS5lbC10cmFuc2Zlci1wYW5lbCAuZWwtdHJhbnNmZXItcGFuZWxfX2hlYWRlciAuZWwtY2hlY2tib3ggLmVsLWNoZWNrYm94X19sYWJlbCBzcGFue3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjE1cHg7Y29sb3I6IzkwOTM5OTtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo0MDB9LmVsLXRyYW5zZmVyLXBhbmVsIC5lbC10cmFuc2Zlci1wYW5lbF9fZm9vdGVye2hlaWdodDo0MHB4O2JhY2tncm91bmQ6I0ZGRjttYXJnaW46MDtwYWRkaW5nOjA7Ym9yZGVyLXRvcDoxcHggc29saWQgI0VCRUVGNTtwb3NpdGlvbjphYnNvbHV0ZTtib3R0b206MDtsZWZ0OjA7d2lkdGg6MTAwJTt6LWluZGV4OjF9LmVsLXRyYW5zZmVyLXBhbmVsIC5lbC10cmFuc2Zlci1wYW5lbF9fZm9vdGVyOjphZnRlcntkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MTAwJTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmVsLWNvbnRhaW5lciwuZWwtdGltZWxpbmUtaXRlbV9fbm9kZXtkaXNwbGF5Oi13ZWJraXQtYm94O2Rpc3BsYXk6LW1zLWZsZXhib3h9LmVsLXRyYW5zZmVyLXBhbmVsIC5lbC10cmFuc2Zlci1wYW5lbF9fZm9vdGVyIC5lbC1jaGVja2JveHtwYWRkaW5nLWxlZnQ6MjBweDtjb2xvcjojNjA2MjY2fS5lbC10cmFuc2Zlci1wYW5lbCAuZWwtdHJhbnNmZXItcGFuZWxfX2VtcHR5e21hcmdpbjowO2hlaWdodDozMHB4O2xpbmUtaGVpZ2h0OjMwcHg7cGFkZGluZzo2cHggMTVweCAwO2NvbG9yOiM5MDkzOTk7dGV4dC1hbGlnbjpjZW50ZXJ9LmVsLXRyYW5zZmVyLXBhbmVsIC5lbC1jaGVja2JveF9fbGFiZWx7cGFkZGluZy1sZWZ0OjhweH0uZWwtdHJhbnNmZXItcGFuZWwgLmVsLWNoZWNrYm94X19pbm5lcntoZWlnaHQ6MTRweDt3aWR0aDoxNHB4O2JvcmRlci1yYWRpdXM6M3B4fS5lbC10cmFuc2Zlci1wYW5lbCAuZWwtY2hlY2tib3hfX2lubmVyOjphZnRlcntoZWlnaHQ6NnB4O3dpZHRoOjNweDtsZWZ0OjRweH0uZWwtY29udGFpbmVye2Rpc3BsYXk6ZmxleDstd2Via2l0LWJveC1vcmllbnQ6aG9yaXpvbnRhbDstd2Via2l0LWJveC1kaXJlY3Rpb246bm9ybWFsOy1tcy1mbGV4LWRpcmVjdGlvbjpyb3c7ZmxleC1kaXJlY3Rpb246cm93Oy13ZWJraXQtYm94LWZsZXg6MTstbXMtZmxleDoxO2ZsZXg6MTstbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTphdXRvO2ZsZXgtYmFzaXM6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7bWluLXdpZHRoOjB9LmVsLWNvbnRhaW5lci5pcy12ZXJ0aWNhbCwuZWwtZHJhd2VyLC5lbC1lbXB0eSwuZWwtcmVzdWx0ey13ZWJraXQtYm94LW9yaWVudDp2ZXJ0aWNhbDstd2Via2l0LWJveC1kaXJlY3Rpb246bm9ybWFsfS5lbC1jb250YWluZXIuaXMtdmVydGljYWx7LW1zLWZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmbGV4LWRpcmVjdGlvbjpjb2x1bW59LmVsLWhlYWRlcntwYWRkaW5nOjAgMjBweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7LW1zLWZsZXgtbmVnYXRpdmU6MDtmbGV4LXNocmluazowfS5lbC1hc2lkZXtvdmVyZmxvdzphdXRvOy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDstbXMtZmxleC1uZWdhdGl2ZTowO2ZsZXgtc2hyaW5rOjB9LmVsLW1haW57ZGlzcGxheTpibG9jazstd2Via2l0LWJveC1mbGV4OjE7LW1zLWZsZXg6MTtmbGV4OjE7LW1zLWZsZXgtcHJlZmVycmVkLXNpemU6YXV0bztmbGV4LWJhc2lzOmF1dG87b3ZlcmZsb3c6YXV0bzstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3h9LmVsLWZvb3RlcntwYWRkaW5nOjAgMjBweDstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3g7LW1zLWZsZXgtbmVnYXRpdmU6MDtmbGV4LXNocmluazowfS5lbC10aW1lbGluZXttYXJnaW46MDtsaXN0LXN0eWxlOm5vbmV9LmVsLXRpbWVsaW5lIC5lbC10aW1lbGluZS1pdGVtOmxhc3QtY2hpbGQgLmVsLXRpbWVsaW5lLWl0ZW1fX3RhaWx7ZGlzcGxheTpub25lfS5lbC10aW1lbGluZS1pdGVte3Bvc2l0aW9uOnJlbGF0aXZlO3BhZGRpbmctYm90dG9tOjIwcHh9LmVsLXRpbWVsaW5lLWl0ZW1fX3dyYXBwZXJ7cG9zaXRpb246cmVsYXRpdmU7cGFkZGluZy1sZWZ0OjI4cHg7dG9wOi0zcHh9LmVsLXRpbWVsaW5lLWl0ZW1fX3RhaWx7cG9zaXRpb246YWJzb2x1dGU7bGVmdDo0cHg7aGVpZ2h0OjEwMCU7Ym9yZGVyLWxlZnQ6MnB4IHNvbGlkICNFNEU3RUR9LmVsLXRpbWVsaW5lLWl0ZW1fX2ljb257Y29sb3I6I0ZGRjtmb250LXNpemU6MTNweH0uZWwtdGltZWxpbmUtaXRlbV9fbm9kZXtwb3NpdGlvbjphYnNvbHV0ZTtiYWNrZ3JvdW5kLWNvbG9yOiNFNEU3RUQ7Ym9yZGVyLXJhZGl1czo1MCU7ZGlzcGxheTpmbGV4Oy13ZWJraXQtYm94LXBhY2s6Y2VudGVyOy1tcy1mbGV4LXBhY2s6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7LXdlYmtpdC1ib3gtYWxpZ246Y2VudGVyOy1tcy1mbGV4LWFsaWduOmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXJ9LmVsLWltYWdlX19lcnJvciwuZWwtdGltZWxpbmUtaXRlbV9fZG90e2Rpc3BsYXk6LXdlYmtpdC1ib3g7ZGlzcGxheTotbXMtZmxleGJveH0uZWwtdGltZWxpbmUtaXRlbV9fbm9kZS0tbm9ybWFse2xlZnQ6LTFweDt3aWR0aDoxMnB4O2hlaWdodDoxMnB4fS5lbC10aW1lbGluZS1pdGVtX19ub2RlLS1sYXJnZXtsZWZ0Oi0ycHg7d2lkdGg6MTRweDtoZWlnaHQ6MTRweH0uZWwtdGltZWxpbmUtaXRlbV9fbm9kZS0tcHJpbWFyeXtiYWNrZ3JvdW5kLWNvbG9yOiM0MDlFRkZ9LmVsLXRpbWVsaW5lLWl0ZW1fX25vZGUtLXN1Y2Nlc3N7YmFja2dyb3VuZC1jb2xvcjojNjdDMjNBfS5lbC10aW1lbGluZS1pdGVtX19ub2RlLS13YXJuaW5ne2JhY2tncm91bmQtY29sb3I6I0U2QTIzQ30uZWwtdGltZWxpbmUtaXRlbV9fbm9kZS0tZGFuZ2Vye2JhY2tncm91bmQtY29sb3I6I0Y1NkM2Q30uZWwtdGltZWxpbmUtaXRlbV9fbm9kZS0taW5mb3tiYWNrZ3JvdW5kLWNvbG9yOiM5MDkzOTl9LmVsLXRpbWVsaW5lLWl0ZW1fX2RvdHtwb3NpdGlvbjphYnNvbHV0ZTtkaXNwbGF5OmZsZXg7LXdlYmtpdC1ib3gtcGFjazpjZW50ZXI7LW1zLWZsZXgtcGFjazpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjstd2Via2l0LWJveC1hbGlnbjpjZW50ZXI7LW1zLWZsZXgtYWxpZ246Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcn0uZWwtdGltZWxpbmUtaXRlbV9fY29udGVudHtjb2xvcjojMzAzMTMzfS5lbC10aW1lbGluZS1pdGVtX190aW1lc3RhbXB7Y29sb3I6IzkwOTM5OTtsaW5lLWhlaWdodDoxO2ZvbnQtc2l6ZToxM3B4fS5lbC10aW1lbGluZS1pdGVtX190aW1lc3RhbXAuaXMtdG9we21hcmdpbi1ib3R0b206OHB4O3BhZGRpbmctdG9wOjRweH0uZWwtdGltZWxpbmUtaXRlbV9fdGltZXN0YW1wLmlzLWJvdHRvbXttYXJnaW4tdG9wOjhweH0uZWwtbGlua3tkaXNwbGF5Oi13ZWJraXQtaW5saW5lLWJveDtkaXNwbGF5Oi1tcy1pbmxpbmUtZmxleGJveDtkaXNwbGF5OmlubGluZS1mbGV4Oy13ZWJraXQtYm94LW9yaWVudDpob3Jpem9udGFsOy13ZWJraXQtYm94LWRpcmVjdGlvbjpub3JtYWw7LW1zLWZsZXgtZGlyZWN0aW9uOnJvdztmbGV4LWRpcmVjdGlvbjpyb3c7LXdlYmtpdC1ib3gtYWxpZ246Y2VudGVyOy1tcy1mbGV4LWFsaWduOmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7LXdlYmtpdC1ib3gtcGFjazpjZW50ZXI7LW1zLWZsZXgtcGFjazpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7cG9zaXRpb246cmVsYXRpdmU7dGV4dC1kZWNvcmF0aW9uOm5vbmU7b3V0bGluZTowO3BhZGRpbmc6MDtmb250LXdlaWdodDo1MDB9LmVsLWxpbmsuaXMtdW5kZXJsaW5lOmhvdmVyOmFmdGVye3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDtyaWdodDowO2hlaWdodDowO2JvdHRvbTowO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM0MDlFRkZ9LmVsLWxpbmsuZWwtbGluay0tZGVmYXVsdDphZnRlciwuZWwtbGluay5lbC1saW5rLS1wcmltYXJ5LmlzLXVuZGVybGluZTpob3ZlcjphZnRlciwuZWwtbGluay5lbC1saW5rLS1wcmltYXJ5OmFmdGVye2JvcmRlci1jb2xvcjojNDA5RUZGfS5lbC1saW5rLmlzLWRpc2FibGVke2N1cnNvcjpub3QtYWxsb3dlZH0uZWwtbGluayBbY2xhc3MqPWVsLWljb24tXStzcGFue21hcmdpbi1sZWZ0OjVweH0uZWwtbGluay5lbC1saW5rLS1kZWZhdWx0e2NvbG9yOiM2MDYyNjZ9LmVsLWxpbmsuZWwtbGluay0tZGVmYXVsdDpob3Zlcntjb2xvcjojNDA5RUZGfS5lbC1saW5rLmVsLWxpbmstLWRlZmF1bHQuaXMtZGlzYWJsZWR7Y29sb3I6I0MwQzRDQ30uZWwtbGluay5lbC1saW5rLS1wcmltYXJ5e2NvbG9yOiM0MDlFRkZ9LmVsLWxpbmsuZWwtbGluay0tcHJpbWFyeTpob3Zlcntjb2xvcjojNjZiMWZmfS5lbC1saW5rLmVsLWxpbmstLXByaW1hcnkuaXMtZGlzYWJsZWR7Y29sb3I6I2EwY2ZmZn0uZWwtbGluay5lbC1saW5rLS1kYW5nZXIuaXMtdW5kZXJsaW5lOmhvdmVyOmFmdGVyLC5lbC1saW5rLmVsLWxpbmstLWRhbmdlcjphZnRlcntib3JkZXItY29sb3I6I0Y1NkM2Q30uZWwtbGluay5lbC1saW5rLS1kYW5nZXJ7Y29sb3I6I0Y1NkM2Q30uZWwtbGluay5lbC1saW5rLS1kYW5nZXI6aG92ZXJ7Y29sb3I6I2Y3ODk4OX0uZWwtbGluay5lbC1saW5rLS1kYW5nZXIuaXMtZGlzYWJsZWR7Y29sb3I6I2ZhYjZiNn0uZWwtbGluay5lbC1saW5rLS1zdWNjZXNzLmlzLXVuZGVybGluZTpob3ZlcjphZnRlciwuZWwtbGluay5lbC1saW5rLS1zdWNjZXNzOmFmdGVye2JvcmRlci1jb2xvcjojNjdDMjNBfS5lbC1saW5rLmVsLWxpbmstLXN1Y2Nlc3N7Y29sb3I6IzY3QzIzQX0uZWwtbGluay5lbC1saW5rLS1zdWNjZXNzOmhvdmVye2NvbG9yOiM4NWNlNjF9LmVsLWxpbmsuZWwtbGluay0tc3VjY2Vzcy5pcy1kaXNhYmxlZHtjb2xvcjojYjNlMTlkfS5lbC1saW5rLmVsLWxpbmstLXdhcm5pbmcuaXMtdW5kZXJsaW5lOmhvdmVyOmFmdGVyLC5lbC1saW5rLmVsLWxpbmstLXdhcm5pbmc6YWZ0ZXJ7Ym9yZGVyLWNvbG9yOiNFNkEyM0N9LmVsLWxpbmsuZWwtbGluay0td2FybmluZ3tjb2xvcjojRTZBMjNDfS5lbC1saW5rLmVsLWxpbmstLXdhcm5pbmc6aG92ZXJ7Y29sb3I6I2ViYjU2M30uZWwtbGluay5lbC1saW5rLS13YXJuaW5nLmlzLWRpc2FibGVke2NvbG9yOiNmM2QxOWV9LmVsLWxpbmsuZWwtbGluay0taW5mby5pcy11bmRlcmxpbmU6aG92ZXI6YWZ0ZXIsLmVsLWxpbmsuZWwtbGluay0taW5mbzphZnRlcntib3JkZXItY29sb3I6IzkwOTM5OX0uZWwtbGluay5lbC1saW5rLS1pbmZve2NvbG9yOiM5MDkzOTl9LmVsLWxpbmsuZWwtbGluay0taW5mbzpob3Zlcntjb2xvcjojYTZhOWFkfS5lbC1saW5rLmVsLWxpbmstLWluZm8uaXMtZGlzYWJsZWR7Y29sb3I6I2M4YzljY30uZWwtZGl2aWRlcntiYWNrZ3JvdW5kLWNvbG9yOiNEQ0RGRTY7cG9zaXRpb246cmVsYXRpdmV9LmVsLWRpdmlkZXItLWhvcml6b250YWx7ZGlzcGxheTpibG9jaztoZWlnaHQ6MXB4O3dpZHRoOjEwMCU7bWFyZ2luOjI0cHggMH0uZWwtZGl2aWRlci0tdmVydGljYWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MXB4O2hlaWdodDoxZW07bWFyZ2luOjAgOHB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtwb3NpdGlvbjpyZWxhdGl2ZX0uZWwtZGl2aWRlcl9fdGV4dHtwb3NpdGlvbjphYnNvbHV0ZTtiYWNrZ3JvdW5kLWNvbG9yOiNGRkY7cGFkZGluZzowIDIwcHg7Zm9udC13ZWlnaHQ6NTAwO2NvbG9yOiMzMDMxMzN9LmVsLWltYWdlX19lcnJvciwuZWwtaW1hZ2VfX3BsYWNlaG9sZGVye2JhY2tncm91bmQ6I0Y1RjdGQX0uZWwtZGl2aWRlcl9fdGV4dC5pcy1sZWZ0e2xlZnQ6MjBweDstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVZKC01MCUpO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC01MCUpfS5lbC1kaXZpZGVyX190ZXh0LmlzLWNlbnRlcntsZWZ0OjUwJTstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVYKC01MCUpIHRyYW5zbGF0ZVkoLTUwJSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTUwJSkgdHJhbnNsYXRlWSgtNTAlKX0uZWwtZGl2aWRlcl9fdGV4dC5pcy1yaWdodHtyaWdodDoyMHB4Oy13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSl9LmVsLWltYWdlX19lcnJvciwuZWwtaW1hZ2VfX2lubmVyLC5lbC1pbWFnZV9fcGxhY2Vob2xkZXJ7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJX0uZWwtaW1hZ2V7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTppbmxpbmUtYmxvY2s7b3ZlcmZsb3c6aGlkZGVufS5lbC1pbWFnZV9faW5uZXJ7dmVydGljYWwtYWxpZ246dG9wfS5lbC1pbWFnZV9faW5uZXItLWNlbnRlcntwb3NpdGlvbjpyZWxhdGl2ZTt0b3A6NTAlO2xlZnQ6NTAlOy13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLC01MCUpO3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwtNTAlKTtkaXNwbGF5OmJsb2NrfS5lbC1pbWFnZV9fZXJyb3J7ZGlzcGxheTpmbGV4Oy13ZWJraXQtYm94LXBhY2s6Y2VudGVyOy1tcy1mbGV4LXBhY2s6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7LXdlYmtpdC1ib3gtYWxpZ246Y2VudGVyOy1tcy1mbGV4LWFsaWduOmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7Y29sb3I6I0MwQzRDQzt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmVsLWltYWdlLXZpZXdlcl9fd3JhcHBlcntwb3NpdGlvbjpmaXhlZDt0b3A6MDtyaWdodDowO2JvdHRvbTowO2xlZnQ6MH0uZWwtaW1hZ2Utdmlld2VyX19idG57cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxO2Rpc3BsYXk6LXdlYmtpdC1ib3g7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7LXdlYmtpdC1ib3gtYWxpZ246Y2VudGVyOy1tcy1mbGV4LWFsaWduOmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7LXdlYmtpdC1ib3gtcGFjazpjZW50ZXI7LW1zLWZsZXgtcGFjazpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtib3JkZXItcmFkaXVzOjUwJTtvcGFjaXR5Oi44Oy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZX0uZWwtYnV0dG9uLC5lbC1jaGVja2JveCwuZWwtY2hlY2tib3gtYnV0dG9uX19pbm5lciwuZWwtZW1wdHlfX2ltYWdlIGltZywuZWwtcmFkaW97LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZX0uZWwtaW1hZ2Utdmlld2VyX19jbG9zZXt0b3A6NDBweDtyaWdodDo0MHB4O3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHg7Zm9udC1zaXplOjI0cHg7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiM2MDYyNjZ9LmVsLWltYWdlLXZpZXdlcl9fY2FudmFze3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7ZGlzcGxheTotd2Via2l0LWJveDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDstd2Via2l0LWJveC1wYWNrOmNlbnRlcjstbXMtZmxleC1wYWNrOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOy13ZWJraXQtYm94LWFsaWduOmNlbnRlcjstbXMtZmxleC1hbGlnbjpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyfS5lbC1pbWFnZS12aWV3ZXJfX2FjdGlvbnN7bGVmdDo1MCU7Ym90dG9tOjMwcHg7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWCgtNTAlKTt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtNTAlKTt3aWR0aDoyODJweDtoZWlnaHQ6NDRweDtwYWRkaW5nOjAgMjNweDtiYWNrZ3JvdW5kLWNvbG9yOiM2MDYyNjY7Ym9yZGVyLWNvbG9yOiNmZmY7Ym9yZGVyLXJhZGl1czoyMnB4fS5lbC1pbWFnZS12aWV3ZXJfX2FjdGlvbnNfX2lubmVye3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7dGV4dC1hbGlnbjpqdXN0aWZ5O2N1cnNvcjpkZWZhdWx0O2ZvbnQtc2l6ZToyM3B4O2NvbG9yOiNmZmY7ZGlzcGxheTotd2Via2l0LWJveDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDstd2Via2l0LWJveC1hbGlnbjpjZW50ZXI7LW1zLWZsZXgtYWxpZ246Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjstbXMtZmxleC1wYWNrOmRpc3RyaWJ1dGU7anVzdGlmeS1jb250ZW50OnNwYWNlLWFyb3VuZH0uZWwtaW1hZ2Utdmlld2VyX19uZXh0LC5lbC1pbWFnZS12aWV3ZXJfX3ByZXZ7d2lkdGg6NDRweDtoZWlnaHQ6NDRweDtmb250LXNpemU6MjRweDtjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzYwNjI2Njtib3JkZXItY29sb3I6I2ZmZjt0b3A6NTAlfS5lbC1pbWFnZS12aWV3ZXJfX3ByZXZ7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKTtsZWZ0OjQwcHh9LmVsLWltYWdlLXZpZXdlcl9fbmV4dHstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVZKC01MCUpO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC01MCUpO3JpZ2h0OjQwcHg7dGV4dC1pbmRlbnQ6MnB4fS5lbC1pbWFnZS12aWV3ZXJfX21hc2t7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTt0b3A6MDtsZWZ0OjA7b3BhY2l0eTouNTtiYWNrZ3JvdW5kOiMwMDB9LnZpZXdlci1mYWRlLWVudGVyLWFjdGl2ZXstd2Via2l0LWFuaW1hdGlvbjp2aWV3ZXItZmFkZS1pbiAuM3M7YW5pbWF0aW9uOnZpZXdlci1mYWRlLWluIC4zc30udmlld2VyLWZhZGUtbGVhdmUtYWN0aXZley13ZWJraXQtYW5pbWF0aW9uOnZpZXdlci1mYWRlLW91dCAuM3M7YW5pbWF0aW9uOnZpZXdlci1mYWRlLW91dCAuM3N9QC13ZWJraXQta2V5ZnJhbWVzIHZpZXdlci1mYWRlLWluezAley13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsLTIwcHgsMCk7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsLTIwcHgsMCk7b3BhY2l0eTowfTEwMCV7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwwLDApO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLDAsMCk7b3BhY2l0eToxfX1Aa2V5ZnJhbWVzIHZpZXdlci1mYWRlLWluezAley13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsLTIwcHgsMCk7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsLTIwcHgsMCk7b3BhY2l0eTowfTEwMCV7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwwLDApO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLDAsMCk7b3BhY2l0eToxfX1ALXdlYmtpdC1rZXlmcmFtZXMgdmlld2VyLWZhZGUtb3V0ezAley13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsMCwwKTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwwLDApO29wYWNpdHk6MX0xMDAley13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsLTIwcHgsMCk7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsLTIwcHgsMCk7b3BhY2l0eTowfX1Aa2V5ZnJhbWVzIHZpZXdlci1mYWRlLW91dHswJXstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLDAsMCk7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsMCwwKTtvcGFjaXR5OjF9MTAwJXstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLC0yMHB4LDApO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLC0yMHB4LDApO29wYWNpdHk6MH19LmVsLWJ1dHRvbntkaXNwbGF5OmlubGluZS1ibG9jaztsaW5lLWhlaWdodDoxO3doaXRlLXNwYWNlOm5vd3JhcDtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kOiNGRkY7Ym9yZGVyOjFweCBzb2xpZCAjRENERkU2O2NvbG9yOiM2MDYyNjY7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7dGV4dC1hbGlnbjpjZW50ZXI7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94O291dGxpbmU6MDttYXJnaW46MDstd2Via2l0LXRyYW5zaXRpb246LjFzO3RyYW5zaXRpb246LjFzO2ZvbnQtd2VpZ2h0OjUwMDtwYWRkaW5nOjEycHggMjBweDtmb250LXNpemU6MTRweDtib3JkZXItcmFkaXVzOjRweH0uZWwtYnV0dG9uKy5lbC1idXR0b24sLmVsLWNoZWNrYm94LmlzLWJvcmRlcmVkKy5lbC1jaGVja2JveC5pcy1ib3JkZXJlZHttYXJnaW4tbGVmdDoxMHB4fS5lbC1idXR0b246Zm9jdXMsLmVsLWJ1dHRvbjpob3Zlcntjb2xvcjojNDA5RUZGO2JvcmRlci1jb2xvcjojYzZlMmZmO2JhY2tncm91bmQtY29sb3I6I2VjZjVmZn0uZWwtYnV0dG9uOmFjdGl2ZXtjb2xvcjojM2E4ZWU2O2JvcmRlci1jb2xvcjojM2E4ZWU2O291dGxpbmU6MH0uZWwtYnV0dG9uOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5lbC1idXR0b24gW2NsYXNzKj1lbC1pY29uLV0rc3BhbnttYXJnaW4tbGVmdDo1cHh9LmVsLWJ1dHRvbi5pcy1wbGFpbjpmb2N1cywuZWwtYnV0dG9uLmlzLXBsYWluOmhvdmVye2JhY2tncm91bmQ6I0ZGRjtib3JkZXItY29sb3I6IzQwOUVGRjtjb2xvcjojNDA5RUZGfS5lbC1idXR0b24uaXMtYWN0aXZlLC5lbC1idXR0b24uaXMtcGxhaW46YWN0aXZle2NvbG9yOiMzYThlZTY7Ym9yZGVyLWNvbG9yOiMzYThlZTZ9LmVsLWJ1dHRvbi5pcy1wbGFpbjphY3RpdmV7YmFja2dyb3VuZDojRkZGO291dGxpbmU6MH0uZWwtYnV0dG9uLmlzLWRpc2FibGVkLC5lbC1idXR0b24uaXMtZGlzYWJsZWQ6Zm9jdXMsLmVsLWJ1dHRvbi5pcy1kaXNhYmxlZDpob3Zlcntjb2xvcjojQzBDNENDO2N1cnNvcjpub3QtYWxsb3dlZDtiYWNrZ3JvdW5kLWltYWdlOm5vbmU7YmFja2dyb3VuZC1jb2xvcjojRkZGO2JvcmRlci1jb2xvcjojRUJFRUY1fS5lbC1idXR0b24uaXMtZGlzYWJsZWQuZWwtYnV0dG9uLS10ZXh0e2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9LmVsLWJ1dHRvbi5pcy1kaXNhYmxlZC5pcy1wbGFpbiwuZWwtYnV0dG9uLmlzLWRpc2FibGVkLmlzLXBsYWluOmZvY3VzLC5lbC1idXR0b24uaXMtZGlzYWJsZWQuaXMtcGxhaW46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojRkZGO2JvcmRlci1jb2xvcjojRUJFRUY1O2NvbG9yOiNDMEM0Q0N9LmVsLWJ1dHRvbi5pcy1sb2FkaW5ne3Bvc2l0aW9uOnJlbGF0aXZlO3BvaW50ZXItZXZlbnRzOm5vbmV9LmVsLWJ1dHRvbi5pcy1sb2FkaW5nOmJlZm9yZXtwb2ludGVyLWV2ZW50czpub25lO2NvbnRlbnQ6Jyc7cG9zaXRpb246YWJzb2x1dGU7bGVmdDotMXB4O3RvcDotMXB4O3JpZ2h0Oi0xcHg7Ym90dG9tOi0xcHg7Ym9yZGVyLXJhZGl1czppbmhlcml0O2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMzUpfS5lbC1idXR0b24uaXMtcm91bmR7Ym9yZGVyLXJhZGl1czoyMHB4O3BhZGRpbmc6MTJweCAyM3B4fS5lbC1idXR0b24uaXMtY2lyY2xle2JvcmRlci1yYWRpdXM6NTAlO3BhZGRpbmc6MTJweH0uZWwtYnV0dG9uLS1wcmltYXJ5e2NvbG9yOiNGRkY7YmFja2dyb3VuZC1jb2xvcjojNDA5RUZGO2JvcmRlci1jb2xvcjojNDA5RUZGfS5lbC1idXR0b24tLXByaW1hcnk6Zm9jdXMsLmVsLWJ1dHRvbi0tcHJpbWFyeTpob3ZlcntiYWNrZ3JvdW5kOiM2NmIxZmY7Ym9yZGVyLWNvbG9yOiM2NmIxZmY7Y29sb3I6I0ZGRn0uZWwtYnV0dG9uLS1wcmltYXJ5LmlzLWFjdGl2ZSwuZWwtYnV0dG9uLS1wcmltYXJ5OmFjdGl2ZXtiYWNrZ3JvdW5kOiMzYThlZTY7Ym9yZGVyLWNvbG9yOiMzYThlZTY7Y29sb3I6I0ZGRn0uZWwtYnV0dG9uLS1wcmltYXJ5OmFjdGl2ZXtvdXRsaW5lOjB9LmVsLWJ1dHRvbi0tcHJpbWFyeS5pcy1kaXNhYmxlZCwuZWwtYnV0dG9uLS1wcmltYXJ5LmlzLWRpc2FibGVkOmFjdGl2ZSwuZWwtYnV0dG9uLS1wcmltYXJ5LmlzLWRpc2FibGVkOmZvY3VzLC5lbC1idXR0b24tLXByaW1hcnkuaXMtZGlzYWJsZWQ6aG92ZXJ7Y29sb3I6I0ZGRjtiYWNrZ3JvdW5kLWNvbG9yOiNhMGNmZmY7Ym9yZGVyLWNvbG9yOiNhMGNmZmZ9LmVsLWJ1dHRvbi0tcHJpbWFyeS5pcy1wbGFpbntjb2xvcjojNDA5RUZGO2JhY2tncm91bmQ6I2VjZjVmZjtib3JkZXItY29sb3I6I2IzZDhmZn0uZWwtYnV0dG9uLS1wcmltYXJ5LmlzLXBsYWluOmZvY3VzLC5lbC1idXR0b24tLXByaW1hcnkuaXMtcGxhaW46aG92ZXJ7YmFja2dyb3VuZDojNDA5RUZGO2JvcmRlci1jb2xvcjojNDA5RUZGO2NvbG9yOiNGRkZ9LmVsLWJ1dHRvbi0tcHJpbWFyeS5pcy1wbGFpbjphY3RpdmV7YmFja2dyb3VuZDojM2E4ZWU2O2JvcmRlci1jb2xvcjojM2E4ZWU2O2NvbG9yOiNGRkY7b3V0bGluZTowfS5lbC1idXR0b24tLXByaW1hcnkuaXMtcGxhaW4uaXMtZGlzYWJsZWQsLmVsLWJ1dHRvbi0tcHJpbWFyeS5pcy1wbGFpbi5pcy1kaXNhYmxlZDphY3RpdmUsLmVsLWJ1dHRvbi0tcHJpbWFyeS5pcy1wbGFpbi5pcy1kaXNhYmxlZDpmb2N1cywuZWwtYnV0dG9uLS1wcmltYXJ5LmlzLXBsYWluLmlzLWRpc2FibGVkOmhvdmVye2NvbG9yOiM4Y2M1ZmY7YmFja2dyb3VuZC1jb2xvcjojZWNmNWZmO2JvcmRlci1jb2xvcjojZDllY2ZmfS5lbC1idXR0b24tLXN1Y2Nlc3N7Y29sb3I6I0ZGRjtiYWNrZ3JvdW5kLWNvbG9yOiM2N0MyM0E7Ym9yZGVyLWNvbG9yOiM2N0MyM0F9LmVsLWJ1dHRvbi0tc3VjY2Vzczpmb2N1cywuZWwtYnV0dG9uLS1zdWNjZXNzOmhvdmVye2JhY2tncm91bmQ6Izg1Y2U2MTtib3JkZXItY29sb3I6Izg1Y2U2MTtjb2xvcjojRkZGfS5lbC1idXR0b24tLXN1Y2Nlc3MuaXMtYWN0aXZlLC5lbC1idXR0b24tLXN1Y2Nlc3M6YWN0aXZle2JhY2tncm91bmQ6IzVkYWYzNDtib3JkZXItY29sb3I6IzVkYWYzNDtjb2xvcjojRkZGfS5lbC1idXR0b24tLXN1Y2Nlc3M6YWN0aXZle291dGxpbmU6MH0uZWwtYnV0dG9uLS1zdWNjZXNzLmlzLWRpc2FibGVkLC5lbC1idXR0b24tLXN1Y2Nlc3MuaXMtZGlzYWJsZWQ6YWN0aXZlLC5lbC1idXR0b24tLXN1Y2Nlc3MuaXMtZGlzYWJsZWQ6Zm9jdXMsLmVsLWJ1dHRvbi0tc3VjY2Vzcy5pcy1kaXNhYmxlZDpob3Zlcntjb2xvcjojRkZGO2JhY2tncm91bmQtY29sb3I6I2IzZTE5ZDtib3JkZXItY29sb3I6I2IzZTE5ZH0uZWwtYnV0dG9uLS1zdWNjZXNzLmlzLXBsYWlue2NvbG9yOiM2N0MyM0E7YmFja2dyb3VuZDojZjBmOWViO2JvcmRlci1jb2xvcjojYzJlN2IwfS5lbC1idXR0b24tLXN1Y2Nlc3MuaXMtcGxhaW46Zm9jdXMsLmVsLWJ1dHRvbi0tc3VjY2Vzcy5pcy1wbGFpbjpob3ZlcntiYWNrZ3JvdW5kOiM2N0MyM0E7Ym9yZGVyLWNvbG9yOiM2N0MyM0E7Y29sb3I6I0ZGRn0uZWwtYnV0dG9uLS1zdWNjZXNzLmlzLXBsYWluOmFjdGl2ZXtiYWNrZ3JvdW5kOiM1ZGFmMzQ7Ym9yZGVyLWNvbG9yOiM1ZGFmMzQ7Y29sb3I6I0ZGRjtvdXRsaW5lOjB9LmVsLWJ1dHRvbi0tc3VjY2Vzcy5pcy1wbGFpbi5pcy1kaXNhYmxlZCwuZWwtYnV0dG9uLS1zdWNjZXNzLmlzLXBsYWluLmlzLWRpc2FibGVkOmFjdGl2ZSwuZWwtYnV0dG9uLS1zdWNjZXNzLmlzLXBsYWluLmlzLWRpc2FibGVkOmZvY3VzLC5lbC1idXR0b24tLXN1Y2Nlc3MuaXMtcGxhaW4uaXMtZGlzYWJsZWQ6aG92ZXJ7Y29sb3I6I2E0ZGE4OTtiYWNrZ3JvdW5kLWNvbG9yOiNmMGY5ZWI7Ym9yZGVyLWNvbG9yOiNlMWYzZDh9LmVsLWJ1dHRvbi0td2FybmluZ3tjb2xvcjojRkZGO2JhY2tncm91bmQtY29sb3I6I0U2QTIzQztib3JkZXItY29sb3I6I0U2QTIzQ30uZWwtYnV0dG9uLS13YXJuaW5nOmZvY3VzLC5lbC1idXR0b24tLXdhcm5pbmc6aG92ZXJ7YmFja2dyb3VuZDojZWJiNTYzO2JvcmRlci1jb2xvcjojZWJiNTYzO2NvbG9yOiNGRkZ9LmVsLWJ1dHRvbi0td2FybmluZy5pcy1hY3RpdmUsLmVsLWJ1dHRvbi0td2FybmluZzphY3RpdmV7YmFja2dyb3VuZDojY2Y5MjM2O2JvcmRlci1jb2xvcjojY2Y5MjM2O2NvbG9yOiNGRkZ9LmVsLWJ1dHRvbi0td2FybmluZzphY3RpdmV7b3V0bGluZTowfS5lbC1idXR0b24tLXdhcm5pbmcuaXMtZGlzYWJsZWQsLmVsLWJ1dHRvbi0td2FybmluZy5pcy1kaXNhYmxlZDphY3RpdmUsLmVsLWJ1dHRvbi0td2FybmluZy5pcy1kaXNhYmxlZDpmb2N1cywuZWwtYnV0dG9uLS13YXJuaW5nLmlzLWRpc2FibGVkOmhvdmVye2NvbG9yOiNGRkY7YmFja2dyb3VuZC1jb2xvcjojZjNkMTllO2JvcmRlci1jb2xvcjojZjNkMTllfS5lbC1idXR0b24tLXdhcm5pbmcuaXMtcGxhaW57Y29sb3I6I0U2QTIzQztiYWNrZ3JvdW5kOiNmZGY2ZWM7Ym9yZGVyLWNvbG9yOiNmNWRhYjF9LmVsLWJ1dHRvbi0td2FybmluZy5pcy1wbGFpbjpmb2N1cywuZWwtYnV0dG9uLS13YXJuaW5nLmlzLXBsYWluOmhvdmVye2JhY2tncm91bmQ6I0U2QTIzQztib3JkZXItY29sb3I6I0U2QTIzQztjb2xvcjojRkZGfS5lbC1idXR0b24tLXdhcm5pbmcuaXMtcGxhaW46YWN0aXZle2JhY2tncm91bmQ6I2NmOTIzNjtib3JkZXItY29sb3I6I2NmOTIzNjtjb2xvcjojRkZGO291dGxpbmU6MH0uZWwtYnV0dG9uLS13YXJuaW5nLmlzLXBsYWluLmlzLWRpc2FibGVkLC5lbC1idXR0b24tLXdhcm5pbmcuaXMtcGxhaW4uaXMtZGlzYWJsZWQ6YWN0aXZlLC5lbC1idXR0b24tLXdhcm5pbmcuaXMtcGxhaW4uaXMtZGlzYWJsZWQ6Zm9jdXMsLmVsLWJ1dHRvbi0td2FybmluZy5pcy1wbGFpbi5pcy1kaXNhYmxlZDpob3Zlcntjb2xvcjojZjBjNzhhO2JhY2tncm91bmQtY29sb3I6I2ZkZjZlYztib3JkZXItY29sb3I6I2ZhZWNkOH0uZWwtYnV0dG9uLS1kYW5nZXJ7Y29sb3I6I0ZGRjtiYWNrZ3JvdW5kLWNvbG9yOiNGNTZDNkM7Ym9yZGVyLWNvbG9yOiNGNTZDNkN9LmVsLWJ1dHRvbi0tZGFuZ2VyOmZvY3VzLC5lbC1idXR0b24tLWRhbmdlcjpob3ZlcntiYWNrZ3JvdW5kOiNmNzg5ODk7Ym9yZGVyLWNvbG9yOiNmNzg5ODk7Y29sb3I6I0ZGRn0uZWwtYnV0dG9uLS1kYW5nZXIuaXMtYWN0aXZlLC5lbC1idXR0b24tLWRhbmdlcjphY3RpdmV7YmFja2dyb3VuZDojZGQ2MTYxO2JvcmRlci1jb2xvcjojZGQ2MTYxO2NvbG9yOiNGRkZ9LmVsLWJ1dHRvbi0tZGFuZ2VyOmFjdGl2ZXtvdXRsaW5lOjB9LmVsLWJ1dHRvbi0tZGFuZ2VyLmlzLWRpc2FibGVkLC5lbC1idXR0b24tLWRhbmdlci5pcy1kaXNhYmxlZDphY3RpdmUsLmVsLWJ1dHRvbi0tZGFuZ2VyLmlzLWRpc2FibGVkOmZvY3VzLC5lbC1idXR0b24tLWRhbmdlci5pcy1kaXNhYmxlZDpob3Zlcntjb2xvcjojRkZGO2JhY2tncm91bmQtY29sb3I6I2ZhYjZiNjtib3JkZXItY29sb3I6I2ZhYjZiNn0uZWwtYnV0dG9uLS1kYW5nZXIuaXMtcGxhaW57Y29sb3I6I0Y1NkM2QztiYWNrZ3JvdW5kOiNmZWYwZjA7Ym9yZGVyLWNvbG9yOiNmYmM0YzR9LmVsLWJ1dHRvbi0tZGFuZ2VyLmlzLXBsYWluOmZvY3VzLC5lbC1idXR0b24tLWRhbmdlci5pcy1wbGFpbjpob3ZlcntiYWNrZ3JvdW5kOiNGNTZDNkM7Ym9yZGVyLWNvbG9yOiNGNTZDNkM7Y29sb3I6I0ZGRn0uZWwtYnV0dG9uLS1kYW5nZXIuaXMtcGxhaW46YWN0aXZle2JhY2tncm91bmQ6I2RkNjE2MTtib3JkZXItY29sb3I6I2RkNjE2MTtjb2xvcjojRkZGO291dGxpbmU6MH0uZWwtYnV0dG9uLS1kYW5nZXIuaXMtcGxhaW4uaXMtZGlzYWJsZWQsLmVsLWJ1dHRvbi0tZGFuZ2VyLmlzLXBsYWluLmlzLWRpc2FibGVkOmFjdGl2ZSwuZWwtYnV0dG9uLS1kYW5nZXIuaXMtcGxhaW4uaXMtZGlzYWJsZWQ6Zm9jdXMsLmVsLWJ1dHRvbi0tZGFuZ2VyLmlzLXBsYWluLmlzLWRpc2FibGVkOmhvdmVye2NvbG9yOiNmOWE3YTc7YmFja2dyb3VuZC1jb2xvcjojZmVmMGYwO2JvcmRlci1jb2xvcjojZmRlMmUyfS5lbC1idXR0b24tLWluZm97Y29sb3I6I0ZGRjtiYWNrZ3JvdW5kLWNvbG9yOiM5MDkzOTk7Ym9yZGVyLWNvbG9yOiM5MDkzOTl9LmVsLWJ1dHRvbi0taW5mbzpmb2N1cywuZWwtYnV0dG9uLS1pbmZvOmhvdmVye2JhY2tncm91bmQ6I2E2YTlhZDtib3JkZXItY29sb3I6I2E2YTlhZDtjb2xvcjojRkZGfS5lbC1idXR0b24tLWluZm8uaXMtYWN0aXZlLC5lbC1idXR0b24tLWluZm86YWN0aXZle2JhY2tncm91bmQ6IzgyODQ4YTtib3JkZXItY29sb3I6IzgyODQ4YTtjb2xvcjojRkZGfS5lbC1idXR0b24tLWluZm86YWN0aXZle291dGxpbmU6MH0uZWwtYnV0dG9uLS1pbmZvLmlzLWRpc2FibGVkLC5lbC1idXR0b24tLWluZm8uaXMtZGlzYWJsZWQ6YWN0aXZlLC5lbC1idXR0b24tLWluZm8uaXMtZGlzYWJsZWQ6Zm9jdXMsLmVsLWJ1dHRvbi0taW5mby5pcy1kaXNhYmxlZDpob3Zlcntjb2xvcjojRkZGO2JhY2tncm91bmQtY29sb3I6I2M4YzljYztib3JkZXItY29sb3I6I2M4YzljY30uZWwtYnV0dG9uLS1pbmZvLmlzLXBsYWlue2NvbG9yOiM5MDkzOTk7YmFja2dyb3VuZDojZjRmNGY1O2JvcmRlci1jb2xvcjojZDNkNGQ2fS5lbC1idXR0b24tLWluZm8uaXMtcGxhaW46Zm9jdXMsLmVsLWJ1dHRvbi0taW5mby5pcy1wbGFpbjpob3ZlcntiYWNrZ3JvdW5kOiM5MDkzOTk7Ym9yZGVyLWNvbG9yOiM5MDkzOTk7Y29sb3I6I0ZGRn0uZWwtYnV0dG9uLS1pbmZvLmlzLXBsYWluOmFjdGl2ZXtiYWNrZ3JvdW5kOiM4Mjg0OGE7Ym9yZGVyLWNvbG9yOiM4Mjg0OGE7Y29sb3I6I0ZGRjtvdXRsaW5lOjB9LmVsLWJ1dHRvbi0taW5mby5pcy1wbGFpbi5pcy1kaXNhYmxlZCwuZWwtYnV0dG9uLS1pbmZvLmlzLXBsYWluLmlzLWRpc2FibGVkOmFjdGl2ZSwuZWwtYnV0dG9uLS1pbmZvLmlzLXBsYWluLmlzLWRpc2FibGVkOmZvY3VzLC5lbC1idXR0b24tLWluZm8uaXMtcGxhaW4uaXMtZGlzYWJsZWQ6aG92ZXJ7Y29sb3I6I2JjYmVjMjtiYWNrZ3JvdW5kLWNvbG9yOiNmNGY0ZjU7Ym9yZGVyLWNvbG9yOiNlOWU5ZWJ9LmVsLWJ1dHRvbi0tbWVkaXVte3BhZGRpbmc6MTBweCAyMHB4O2ZvbnQtc2l6ZToxNHB4O2JvcmRlci1yYWRpdXM6NHB4fS5lbC1idXR0b24tLW1lZGl1bS5pcy1yb3VuZHtwYWRkaW5nOjEwcHggMjBweH0uZWwtYnV0dG9uLS1tZWRpdW0uaXMtY2lyY2xle3BhZGRpbmc6MTBweH0uZWwtYnV0dG9uLS1zbWFsbHtwYWRkaW5nOjlweCAxNXB4O2ZvbnQtc2l6ZToxMnB4O2JvcmRlci1yYWRpdXM6M3B4fS5lbC1idXR0b24tLXNtYWxsLmlzLXJvdW5ke3BhZGRpbmc6OXB4IDE1cHh9LmVsLWJ1dHRvbi0tc21hbGwuaXMtY2lyY2xle3BhZGRpbmc6OXB4fS5lbC1idXR0b24tLW1pbmksLmVsLWJ1dHRvbi0tbWluaS5pcy1yb3VuZHtwYWRkaW5nOjdweCAxNXB4fS5lbC1idXR0b24tLW1pbml7Zm9udC1zaXplOjEycHg7Ym9yZGVyLXJhZGl1czozcHh9LmVsLWJ1dHRvbi0tbWluaS5pcy1jaXJjbGV7cGFkZGluZzo3cHh9LmVsLWJ1dHRvbi0tdGV4dHtib3JkZXItY29sb3I6dHJhbnNwYXJlbnQ7Y29sb3I6IzQwOUVGRjtiYWNrZ3JvdW5kOjAgMDtwYWRkaW5nLWxlZnQ6MDtwYWRkaW5nLXJpZ2h0OjB9LmVsLWJ1dHRvbi0tdGV4dDpmb2N1cywuZWwtYnV0dG9uLS10ZXh0OmhvdmVye2NvbG9yOiM2NmIxZmY7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50O2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9LmVsLWJ1dHRvbi0tdGV4dDphY3RpdmV7Y29sb3I6IzNhOGVlNjtib3JkZXItY29sb3I6dHJhbnNwYXJlbnQ7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0uZWwtYnV0dG9uLS10ZXh0LmlzLWRpc2FibGVkLC5lbC1idXR0b24tLXRleHQuaXMtZGlzYWJsZWQ6Zm9jdXMsLmVsLWJ1dHRvbi0tdGV4dC5pcy1kaXNhYmxlZDpob3Zlcntib3JkZXItY29sb3I6dHJhbnNwYXJlbnR9LmVsLWJ1dHRvbi1ncm91cCAuZWwtYnV0dG9uLS1kYW5nZXI6bGFzdC1jaGlsZCwuZWwtYnV0dG9uLWdyb3VwIC5lbC1idXR0b24tLWRhbmdlcjpub3QoOmZpcnN0LWNoaWxkKTpub3QoOmxhc3QtY2hpbGQpLC5lbC1idXR0b24tZ3JvdXAgLmVsLWJ1dHRvbi0taW5mbzpsYXN0LWNoaWxkLC5lbC1idXR0b24tZ3JvdXAgLmVsLWJ1dHRvbi0taW5mbzpub3QoOmZpcnN0LWNoaWxkKTpub3QoOmxhc3QtY2hpbGQpLC5lbC1idXR0b24tZ3JvdXAgLmVsLWJ1dHRvbi0tcHJpbWFyeTpsYXN0LWNoaWxkLC5lbC1idXR0b24tZ3JvdXAgLmVsLWJ1dHRvbi0tcHJpbWFyeTpub3QoOmZpcnN0LWNoaWxkKTpub3QoOmxhc3QtY2hpbGQpLC5lbC1idXR0b24tZ3JvdXAgLmVsLWJ1dHRvbi0tc3VjY2VzczpsYXN0LWNoaWxkLC5lbC1idXR0b24tZ3JvdXAgLmVsLWJ1dHRvbi0tc3VjY2Vzczpub3QoOmZpcnN0LWNoaWxkKTpub3QoOmxhc3QtY2hpbGQpLC5lbC1idXR0b24tZ3JvdXAgLmVsLWJ1dHRvbi0td2FybmluZzpsYXN0LWNoaWxkLC5lbC1idXR0b24tZ3JvdXAgLmVsLWJ1dHRvbi0td2FybmluZzpub3QoOmZpcnN0LWNoaWxkKTpub3QoOmxhc3QtY2hpbGQpLC5lbC1idXR0b24tZ3JvdXA+LmVsLWRyb3Bkb3duPi5lbC1idXR0b257Ym9yZGVyLWxlZnQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9LmVsLWJ1dHRvbi1ncm91cCAuZWwtYnV0dG9uLS1kYW5nZXI6Zmlyc3QtY2hpbGQsLmVsLWJ1dHRvbi1ncm91cCAuZWwtYnV0dG9uLS1kYW5nZXI6bm90KDpmaXJzdC1jaGlsZCk6bm90KDpsYXN0LWNoaWxkKSwuZWwtYnV0dG9uLWdyb3VwIC5lbC1idXR0b24tLWluZm86Zmlyc3QtY2hpbGQsLmVsLWJ1dHRvbi1ncm91cCAuZWwtYnV0dG9uLS1pbmZvOm5vdCg6Zmlyc3QtY2hpbGQpOm5vdCg6bGFzdC1jaGlsZCksLmVsLWJ1dHRvbi1ncm91cCAuZWwtYnV0dG9uLS1wcmltYXJ5OmZpcnN0LWNoaWxkLC5lbC1idXR0b24tZ3JvdXAgLmVsLWJ1dHRvbi0tcHJpbWFyeTpub3QoOmZpcnN0LWNoaWxkKTpub3QoOmxhc3QtY2hpbGQpLC5lbC1idXR0b24tZ3JvdXAgLmVsLWJ1dHRvbi0tc3VjY2VzczpmaXJzdC1jaGlsZCwuZWwtYnV0dG9uLWdyb3VwIC5lbC1idXR0b24tLXN1Y2Nlc3M6bm90KDpmaXJzdC1jaGlsZCk6bm90KDpsYXN0LWNoaWxkKSwuZWwtYnV0dG9uLWdyb3VwIC5lbC1idXR0b24tLXdhcm5pbmc6Zmlyc3QtY2hpbGQsLmVsLWJ1dHRvbi1ncm91cCAuZWwtYnV0dG9uLS13YXJuaW5nOm5vdCg6Zmlyc3QtY2hpbGQpOm5vdCg6bGFzdC1jaGlsZCl7Ym9yZGVyLXJpZ2h0LWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfS5lbC1idXR0b24tZ3JvdXB7ZGlzcGxheTppbmxpbmUtYmxvY2s7dmVydGljYWwtYWxpZ246bWlkZGxlfS5lbC1idXR0b24tZ3JvdXA6OmFmdGVyLC5lbC1idXR0b24tZ3JvdXA6OmJlZm9yZXtkaXNwbGF5OnRhYmxlfS5lbC1idXR0b24tZ3JvdXA6OmFmdGVye2NsZWFyOmJvdGh9LmVsLWJ1dHRvbi1ncm91cD4uZWwtYnV0dG9ue2Zsb2F0OmxlZnQ7cG9zaXRpb246cmVsYXRpdmV9LmVsLWJ1dHRvbi1ncm91cD4uZWwtYnV0dG9uLmlzLWRpc2FibGVke3otaW5kZXg6MX0uZWwtYnV0dG9uLWdyb3VwPi5lbC1idXR0b246Zmlyc3QtY2hpbGR7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czowfS5lbC1idXR0b24tZ3JvdXA+LmVsLWJ1dHRvbjpsYXN0LWNoaWxke2JvcmRlci10b3AtbGVmdC1yYWRpdXM6MDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjB9LmVsLWJ1dHRvbi1ncm91cD4uZWwtYnV0dG9uOmZpcnN0LWNoaWxkOmxhc3QtY2hpbGR7Ym9yZGVyLXJhZGl1czo0cHh9LmVsLWJ1dHRvbi1ncm91cD4uZWwtYnV0dG9uOmZpcnN0LWNoaWxkOmxhc3QtY2hpbGQuaXMtcm91bmR7Ym9yZGVyLXJhZGl1czoyMHB4fS5lbC1idXR0b24tZ3JvdXA+LmVsLWJ1dHRvbjpmaXJzdC1jaGlsZDpsYXN0LWNoaWxkLmlzLWNpcmNsZXtib3JkZXItcmFkaXVzOjUwJX0uZWwtYnV0dG9uLWdyb3VwPi5lbC1idXR0b246bm90KDpmaXJzdC1jaGlsZCk6bm90KDpsYXN0LWNoaWxkKXtib3JkZXItcmFkaXVzOjB9LmVsLWJ1dHRvbi1ncm91cD4uZWwtYnV0dG9uLmlzLWFjdGl2ZSwuZWwtYnV0dG9uLWdyb3VwPi5lbC1idXR0b246bm90KC5pcy1kaXNhYmxlZCk6YWN0aXZlLC5lbC1idXR0b24tZ3JvdXA+LmVsLWJ1dHRvbjpub3QoLmlzLWRpc2FibGVkKTpmb2N1cywuZWwtYnV0dG9uLWdyb3VwPi5lbC1idXR0b246bm90KC5pcy1kaXNhYmxlZCk6aG92ZXJ7ei1pbmRleDoxfS5lbC1idXR0b24tZ3JvdXA+LmVsLWRyb3Bkb3duPi5lbC1idXR0b257Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czowO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MH0uZWwtY2FsZW5kYXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5lbC1jYWxlbmRhcl9faGVhZGVye2Rpc3BsYXk6LXdlYmtpdC1ib3g7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7LXdlYmtpdC1ib3gtcGFjazpqdXN0aWZ5Oy1tcy1mbGV4LXBhY2s6anVzdGlmeTtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtwYWRkaW5nOjEycHggMjBweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjRUJFRUY1fS5lbC1iYWNrdG9wLC5lbC1wYWdlLWhlYWRlcntkaXNwbGF5Oi13ZWJraXQtYm94O2Rpc3BsYXk6LW1zLWZsZXhib3h9LmVsLWNhbGVuZGFyX190aXRsZXtjb2xvcjojMDAwOy1tcy1mbGV4LWl0ZW0tYWxpZ246Y2VudGVyO2FsaWduLXNlbGY6Y2VudGVyfS5lbC1jYWxlbmRhcl9fYm9keXtwYWRkaW5nOjEycHggMjBweCAzNXB4fS5lbC1jYWxlbmRhci10YWJsZXt0YWJsZS1sYXlvdXQ6Zml4ZWQ7d2lkdGg6MTAwJX0uZWwtY2FsZW5kYXItdGFibGUgdGhlYWQgdGh7cGFkZGluZzoxMnB4IDA7Y29sb3I6IzYwNjI2Njtmb250LXdlaWdodDo0MDB9LmVsLWNhbGVuZGFyLXRhYmxlOm5vdCguaXMtcmFuZ2UpIHRkLm5leHQsLmVsLWNhbGVuZGFyLXRhYmxlOm5vdCguaXMtcmFuZ2UpIHRkLnByZXZ7Y29sb3I6I0MwQzRDQ30uZWwtYmFja3RvcCwuZWwtY2FsZW5kYXItdGFibGUgdGQuaXMtdG9kYXl7Y29sb3I6IzQwOUVGRn0uZWwtY2FsZW5kYXItdGFibGUgdGR7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI0VCRUVGNTtib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNFQkVFRjU7dmVydGljYWwtYWxpZ246dG9wOy13ZWJraXQtdHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIC4ycyBlYXNlO3RyYW5zaXRpb246YmFja2dyb3VuZC1jb2xvciAuMnMgZWFzZX0uZWwtY2FsZW5kYXItdGFibGUgdGQuaXMtc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjojRjJGOEZFfS5lbC1jYWxlbmRhci10YWJsZSB0cjpmaXJzdC1jaGlsZCB0ZHtib3JkZXItdG9wOjFweCBzb2xpZCAjRUJFRUY1fS5lbC1jYWxlbmRhci10YWJsZSB0ciB0ZDpmaXJzdC1jaGlsZHtib3JkZXItbGVmdDoxcHggc29saWQgI0VCRUVGNX0uZWwtY2FsZW5kYXItdGFibGUgdHIuZWwtY2FsZW5kYXItdGFibGVfX3Jvdy0taGlkZS1ib3JkZXIgdGR7Ym9yZGVyLXRvcDpub25lfS5lbC1jYWxlbmRhci10YWJsZSAuZWwtY2FsZW5kYXItZGF5ey13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjhweDtoZWlnaHQ6ODVweH0uZWwtY2FsZW5kYXItdGFibGUgLmVsLWNhbGVuZGFyLWRheTpob3ZlcntjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOiNGMkY4RkV9LmVsLWJhY2t0b3B7cG9zaXRpb246Zml4ZWQ7YmFja2dyb3VuZC1jb2xvcjojRkZGO3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHg7Ym9yZGVyLXJhZGl1czo1MCU7ZGlzcGxheTpmbGV4Oy13ZWJraXQtYm94LWFsaWduOmNlbnRlcjstbXMtZmxleC1hbGlnbjpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyOy13ZWJraXQtYm94LXBhY2s6Y2VudGVyOy1tcy1mbGV4LXBhY2s6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7Zm9udC1zaXplOjIwcHg7LXdlYmtpdC1ib3gtc2hhZG93OjAgMCA2cHggcmdiYSgwLDAsMCwuMTIpO2JveC1zaGFkb3c6MCAwIDZweCByZ2JhKDAsMCwwLC4xMik7Y3Vyc29yOnBvaW50ZXI7ei1pbmRleDo1fS5lbC1iYWNrdG9wOmhvdmVye2JhY2tncm91bmQtY29sb3I6I0YyRjZGQ30uZWwtcGFnZS1oZWFkZXJ7ZGlzcGxheTpmbGV4O2xpbmUtaGVpZ2h0OjI0cHh9LmVsLXBhZ2UtaGVhZGVyX19sZWZ0e2Rpc3BsYXk6LXdlYmtpdC1ib3g7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7Y3Vyc29yOnBvaW50ZXI7bWFyZ2luLXJpZ2h0OjQwcHg7cG9zaXRpb246cmVsYXRpdmV9LmVsLXBhZ2UtaGVhZGVyX19sZWZ0OjphZnRlcntwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxcHg7aGVpZ2h0OjE2cHg7cmlnaHQ6LTIwcHg7dG9wOjUwJTstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVZKC01MCUpO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC01MCUpO2JhY2tncm91bmQtY29sb3I6I0RDREZFNn0uZWwtY2hlY2tib3gsLmVsLWNoZWNrYm94X19pbnB1dHtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTt3aGl0ZS1zcGFjZTpub3dyYXB9LmVsLXBhZ2UtaGVhZGVyX19sZWZ0IC5lbC1pY29uLWJhY2t7Zm9udC1zaXplOjE4cHg7bWFyZ2luLXJpZ2h0OjZweDstbXMtZmxleC1pdGVtLWFsaWduOmNlbnRlcjthbGlnbi1zZWxmOmNlbnRlcn0uZWwtcGFnZS1oZWFkZXJfX3RpdGxle2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0uZWwtcGFnZS1oZWFkZXJfX2NvbnRlbnR7Zm9udC1zaXplOjE4cHg7Y29sb3I6IzMwMzEzM30uZWwtY2hlY2tib3h7Y29sb3I6IzYwNjI2Njtmb250LXdlaWdodDo1MDA7Zm9udC1zaXplOjE0cHg7Y3Vyc29yOnBvaW50ZXI7dXNlci1zZWxlY3Q6bm9uZTttYXJnaW4tcmlnaHQ6MzBweH0uZWwtY2hlY2tib3guaXMtYm9yZGVyZWR7cGFkZGluZzo5cHggMjBweCA5cHggMTBweDtib3JkZXItcmFkaXVzOjRweDtib3JkZXI6MXB4IHNvbGlkICNEQ0RGRTY7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94O2xpbmUtaGVpZ2h0Om5vcm1hbDtoZWlnaHQ6NDBweH0uZWwtY2hlY2tib3guaXMtYm9yZGVyZWQuaXMtY2hlY2tlZHtib3JkZXItY29sb3I6IzQwOUVGRn0uZWwtY2hlY2tib3guaXMtYm9yZGVyZWQuaXMtZGlzYWJsZWR7Ym9yZGVyLWNvbG9yOiNFQkVFRjU7Y3Vyc29yOm5vdC1hbGxvd2VkfS5lbC1jaGVja2JveC5pcy1ib3JkZXJlZC5lbC1jaGVja2JveC0tbWVkaXVte3BhZGRpbmc6N3B4IDIwcHggN3B4IDEwcHg7Ym9yZGVyLXJhZGl1czo0cHg7aGVpZ2h0OjM2cHh9LmVsLWNoZWNrYm94LmlzLWJvcmRlcmVkLmVsLWNoZWNrYm94LS1tZWRpdW0gLmVsLWNoZWNrYm94X19sYWJlbHtsaW5lLWhlaWdodDoxN3B4O2ZvbnQtc2l6ZToxNHB4fS5lbC1jaGVja2JveC5pcy1ib3JkZXJlZC5lbC1jaGVja2JveC0tbWVkaXVtIC5lbC1jaGVja2JveF9faW5uZXJ7aGVpZ2h0OjE0cHg7d2lkdGg6MTRweH0uZWwtY2hlY2tib3guaXMtYm9yZGVyZWQuZWwtY2hlY2tib3gtLXNtYWxse3BhZGRpbmc6NXB4IDE1cHggNXB4IDEwcHg7Ym9yZGVyLXJhZGl1czozcHg7aGVpZ2h0OjMycHh9LmVsLWNoZWNrYm94LmlzLWJvcmRlcmVkLmVsLWNoZWNrYm94LS1zbWFsbCAuZWwtY2hlY2tib3hfX2xhYmVse2xpbmUtaGVpZ2h0OjE1cHg7Zm9udC1zaXplOjEycHh9LmVsLWNoZWNrYm94LmlzLWJvcmRlcmVkLmVsLWNoZWNrYm94LS1zbWFsbCAuZWwtY2hlY2tib3hfX2lubmVye2hlaWdodDoxMnB4O3dpZHRoOjEycHh9LmVsLWNoZWNrYm94LmlzLWJvcmRlcmVkLmVsLWNoZWNrYm94LS1zbWFsbCAuZWwtY2hlY2tib3hfX2lubmVyOjphZnRlcntoZWlnaHQ6NnB4O3dpZHRoOjJweH0uZWwtY2hlY2tib3guaXMtYm9yZGVyZWQuZWwtY2hlY2tib3gtLW1pbml7cGFkZGluZzozcHggMTVweCAzcHggMTBweDtib3JkZXItcmFkaXVzOjNweDtoZWlnaHQ6MjhweH0uZWwtY2hlY2tib3guaXMtYm9yZGVyZWQuZWwtY2hlY2tib3gtLW1pbmkgLmVsLWNoZWNrYm94X19sYWJlbHtsaW5lLWhlaWdodDoxMnB4O2ZvbnQtc2l6ZToxMnB4fS5lbC1jaGVja2JveC5pcy1ib3JkZXJlZC5lbC1jaGVja2JveC0tbWluaSAuZWwtY2hlY2tib3hfX2lubmVye2hlaWdodDoxMnB4O3dpZHRoOjEycHh9LmVsLWNoZWNrYm94LmlzLWJvcmRlcmVkLmVsLWNoZWNrYm94LS1taW5pIC5lbC1jaGVja2JveF9faW5uZXI6OmFmdGVye2hlaWdodDo2cHg7d2lkdGg6MnB4fS5lbC1jaGVja2JveF9faW5wdXR7Y3Vyc29yOnBvaW50ZXI7b3V0bGluZTowO2xpbmUtaGVpZ2h0OjE7dmVydGljYWwtYWxpZ246bWlkZGxlfS5lbC1jaGVja2JveF9faW5wdXQuaXMtZGlzYWJsZWQgLmVsLWNoZWNrYm94X19pbm5lcntiYWNrZ3JvdW5kLWNvbG9yOiNlZGYyZmM7Ym9yZGVyLWNvbG9yOiNEQ0RGRTY7Y3Vyc29yOm5vdC1hbGxvd2VkfS5lbC1jaGVja2JveF9faW5wdXQuaXMtZGlzYWJsZWQgLmVsLWNoZWNrYm94X19pbm5lcjo6YWZ0ZXJ7Y3Vyc29yOm5vdC1hbGxvd2VkO2JvcmRlci1jb2xvcjojQzBDNENDfS5lbC1jaGVja2JveF9faW5wdXQuaXMtZGlzYWJsZWQgLmVsLWNoZWNrYm94X19pbm5lcisuZWwtY2hlY2tib3hfX2xhYmVse2N1cnNvcjpub3QtYWxsb3dlZH0uZWwtY2hlY2tib3hfX2lucHV0LmlzLWRpc2FibGVkLmlzLWNoZWNrZWQgLmVsLWNoZWNrYm94X19pbm5lcntiYWNrZ3JvdW5kLWNvbG9yOiNGMkY2RkM7Ym9yZGVyLWNvbG9yOiNEQ0RGRTZ9LmVsLWNoZWNrYm94X19pbnB1dC5pcy1kaXNhYmxlZC5pcy1jaGVja2VkIC5lbC1jaGVja2JveF9faW5uZXI6OmFmdGVye2JvcmRlci1jb2xvcjojQzBDNENDfS5lbC1jaGVja2JveF9faW5wdXQuaXMtZGlzYWJsZWQuaXMtaW5kZXRlcm1pbmF0ZSAuZWwtY2hlY2tib3hfX2lubmVye2JhY2tncm91bmQtY29sb3I6I0YyRjZGQztib3JkZXItY29sb3I6I0RDREZFNn0uZWwtY2hlY2tib3hfX2lucHV0LmlzLWRpc2FibGVkLmlzLWluZGV0ZXJtaW5hdGUgLmVsLWNoZWNrYm94X19pbm5lcjo6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6I0MwQzRDQztib3JkZXItY29sb3I6I0MwQzRDQ30uZWwtY2hlY2tib3hfX2lucHV0LmlzLWNoZWNrZWQgLmVsLWNoZWNrYm94X19pbm5lciwuZWwtY2hlY2tib3hfX2lucHV0LmlzLWluZGV0ZXJtaW5hdGUgLmVsLWNoZWNrYm94X19pbm5lcntiYWNrZ3JvdW5kLWNvbG9yOiM0MDlFRkY7Ym9yZGVyLWNvbG9yOiM0MDlFRkZ9LmVsLWNoZWNrYm94X19pbnB1dC5pcy1kaXNhYmxlZCtzcGFuLmVsLWNoZWNrYm94X19sYWJlbHtjb2xvcjojQzBDNENDO2N1cnNvcjpub3QtYWxsb3dlZH0uZWwtY2hlY2tib3hfX2lucHV0LmlzLWNoZWNrZWQgLmVsLWNoZWNrYm94X19pbm5lcjo6YWZ0ZXJ7LXdlYmtpdC10cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKSBzY2FsZVkoMSk7dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZykgc2NhbGVZKDEpfS5lbC1jaGVja2JveF9faW5wdXQuaXMtY2hlY2tlZCsuZWwtY2hlY2tib3hfX2xhYmVse2NvbG9yOiM0MDlFRkZ9LmVsLWNoZWNrYm94X19pbnB1dC5pcy1mb2N1cyAuZWwtY2hlY2tib3hfX2lubmVye2JvcmRlci1jb2xvcjojNDA5RUZGfS5lbC1jaGVja2JveF9faW5wdXQuaXMtaW5kZXRlcm1pbmF0ZSAuZWwtY2hlY2tib3hfX2lubmVyOjpiZWZvcmV7Y29udGVudDonJztwb3NpdGlvbjphYnNvbHV0ZTtkaXNwbGF5OmJsb2NrO2JhY2tncm91bmQtY29sb3I6I0ZGRjtoZWlnaHQ6MnB4Oy13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKC41KTt0cmFuc2Zvcm06c2NhbGUoLjUpO2xlZnQ6MDtyaWdodDowO3RvcDo1cHh9LmVsLWNoZWNrYm94X19pbnB1dC5pcy1pbmRldGVybWluYXRlIC5lbC1jaGVja2JveF9faW5uZXI6OmFmdGVye2Rpc3BsYXk6bm9uZX0uZWwtY2hlY2tib3hfX2lubmVye2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO2JvcmRlcjoxcHggc29saWQgI0RDREZFNjtib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3g7d2lkdGg6MTRweDtoZWlnaHQ6MTRweDtiYWNrZ3JvdW5kLWNvbG9yOiNGRkY7ei1pbmRleDoxOy13ZWJraXQtdHJhbnNpdGlvbjpib3JkZXItY29sb3IgLjI1cyBjdWJpYy1iZXppZXIoLjcxLC0uNDYsLjI5LDEuNDYpLGJhY2tncm91bmQtY29sb3IgLjI1cyBjdWJpYy1iZXppZXIoLjcxLC0uNDYsLjI5LDEuNDYpO3RyYW5zaXRpb246Ym9yZGVyLWNvbG9yIC4yNXMgY3ViaWMtYmV6aWVyKC43MSwtLjQ2LC4yOSwxLjQ2KSxiYWNrZ3JvdW5kLWNvbG9yIC4yNXMgY3ViaWMtYmV6aWVyKC43MSwtLjQ2LC4yOSwxLjQ2KX0uZWwtY2hlY2tib3hfX2lubmVyOmhvdmVye2JvcmRlci1jb2xvcjojNDA5RUZGfS5lbC1jaGVja2JveF9faW5uZXI6OmFmdGVyey13ZWJraXQtYm94LXNpemluZzpjb250ZW50LWJveDtib3gtc2l6aW5nOmNvbnRlbnQtYm94O2NvbnRlbnQ6XFxcIlxcXCI7Ym9yZGVyOjFweCBzb2xpZCAjRkZGO2JvcmRlci1sZWZ0OjA7Ym9yZGVyLXRvcDowO2hlaWdodDo3cHg7bGVmdDo0cHg7cG9zaXRpb246YWJzb2x1dGU7dG9wOjFweDstd2Via2l0LXRyYW5zZm9ybTpyb3RhdGUoNDVkZWcpIHNjYWxlWSgwKTt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKSBzY2FsZVkoMCk7d2lkdGg6M3B4Oy13ZWJraXQtdHJhbnNpdGlvbjotd2Via2l0LXRyYW5zZm9ybSAuMTVzIGVhc2UtaW4gLjA1czt0cmFuc2l0aW9uOi13ZWJraXQtdHJhbnNmb3JtIC4xNXMgZWFzZS1pbiAuMDVzO3RyYW5zaXRpb246dHJhbnNmb3JtIC4xNXMgZWFzZS1pbiAuMDVzO3RyYW5zaXRpb246dHJhbnNmb3JtIC4xNXMgZWFzZS1pbiAuMDVzLC13ZWJraXQtdHJhbnNmb3JtIC4xNXMgZWFzZS1pbiAuMDVzOy13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjpjZW50ZXI7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXJ9LmVsLWNoZWNrYm94X19vcmlnaW5hbHtvcGFjaXR5OjA7b3V0bGluZTowO3Bvc2l0aW9uOmFic29sdXRlO21hcmdpbjowO3dpZHRoOjA7aGVpZ2h0OjA7ei1pbmRleDotMX0uZWwtY2hlY2tib3gtYnV0dG9uLC5lbC1jaGVja2JveC1idXR0b25fX2lubmVye2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlfS5lbC1jaGVja2JveF9fbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7cGFkZGluZy1sZWZ0OjEwcHg7bGluZS1oZWlnaHQ6MTlweDtmb250LXNpemU6MTRweH0uZWwtY2hlY2tib3g6bGFzdC1vZi10eXBle21hcmdpbi1yaWdodDowfS5lbC1jaGVja2JveC1idXR0b25fX2lubmVye2xpbmUtaGVpZ2h0OjE7Zm9udC13ZWlnaHQ6NTAwO3doaXRlLXNwYWNlOm5vd3JhcDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Y3Vyc29yOnBvaW50ZXI7YmFja2dyb3VuZDojRkZGO2JvcmRlcjoxcHggc29saWQgI0RDREZFNjtib3JkZXItbGVmdDowO2NvbG9yOiM2MDYyNjY7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7dGV4dC1hbGlnbjpjZW50ZXI7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94O291dGxpbmU6MDttYXJnaW46MDstd2Via2l0LXRyYW5zaXRpb246YWxsIC4zcyBjdWJpYy1iZXppZXIoLjY0NSwuMDQ1LC4zNTUsMSk7dHJhbnNpdGlvbjphbGwgLjNzIGN1YmljLWJlemllciguNjQ1LC4wNDUsLjM1NSwxKTtwYWRkaW5nOjEycHggMjBweDtmb250LXNpemU6MTRweDtib3JkZXItcmFkaXVzOjB9LmVsLWNoZWNrYm94LWJ1dHRvbl9faW5uZXIuaXMtcm91bmR7cGFkZGluZzoxMnB4IDIwcHh9LmVsLWNoZWNrYm94LWJ1dHRvbl9faW5uZXI6aG92ZXJ7Y29sb3I6IzQwOUVGRn0uZWwtY2hlY2tib3gtYnV0dG9uX19pbm5lciBbY2xhc3MqPWVsLWljb24tXXtsaW5lLWhlaWdodDouOX0uZWwtY2hlY2tib3gtYnV0dG9uX19pbm5lciBbY2xhc3MqPWVsLWljb24tXStzcGFue21hcmdpbi1sZWZ0OjVweH0uZWwtY2hlY2tib3gtYnV0dG9uX19vcmlnaW5hbHtvcGFjaXR5OjA7b3V0bGluZTowO3Bvc2l0aW9uOmFic29sdXRlO21hcmdpbjowO3otaW5kZXg6LTF9LmVsLXJhZGlvLC5lbC1yYWRpb19faW5uZXIsLmVsLXJhZGlvX19pbnB1dHtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmlubGluZS1ibG9ja30uZWwtY2hlY2tib3gtYnV0dG9uLmlzLWNoZWNrZWQgLmVsLWNoZWNrYm94LWJ1dHRvbl9faW5uZXJ7Y29sb3I6I0ZGRjtiYWNrZ3JvdW5kLWNvbG9yOiM0MDlFRkY7Ym9yZGVyLWNvbG9yOiM0MDlFRkY7LXdlYmtpdC1ib3gtc2hhZG93Oi0xcHggMCAwIDAgIzhjYzVmZjtib3gtc2hhZG93Oi0xcHggMCAwIDAgIzhjYzVmZn0uZWwtY2hlY2tib3gtYnV0dG9uLmlzLWNoZWNrZWQ6Zmlyc3QtY2hpbGQgLmVsLWNoZWNrYm94LWJ1dHRvbl9faW5uZXJ7Ym9yZGVyLWxlZnQtY29sb3I6IzQwOUVGRn0uZWwtY2hlY2tib3gtYnV0dG9uLmlzLWRpc2FibGVkIC5lbC1jaGVja2JveC1idXR0b25fX2lubmVye2NvbG9yOiNDMEM0Q0M7Y3Vyc29yOm5vdC1hbGxvd2VkO2JhY2tncm91bmQtaW1hZ2U6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiNGRkY7Ym9yZGVyLWNvbG9yOiNFQkVFRjU7LXdlYmtpdC1ib3gtc2hhZG93Om5vbmU7Ym94LXNoYWRvdzpub25lfS5lbC1jaGVja2JveC1idXR0b24uaXMtZGlzYWJsZWQ6Zmlyc3QtY2hpbGQgLmVsLWNoZWNrYm94LWJ1dHRvbl9faW5uZXJ7Ym9yZGVyLWxlZnQtY29sb3I6I0VCRUVGNX0uZWwtY2hlY2tib3gtYnV0dG9uOmZpcnN0LWNoaWxkIC5lbC1jaGVja2JveC1idXR0b25fX2lubmVye2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjRENERkU2O2JvcmRlci1yYWRpdXM6NHB4IDAgMCA0cHg7LXdlYmtpdC1ib3gtc2hhZG93Om5vbmUhaW1wb3J0YW50O2JveC1zaGFkb3c6bm9uZSFpbXBvcnRhbnR9LmVsLWNoZWNrYm94LWJ1dHRvbi5pcy1mb2N1cyAuZWwtY2hlY2tib3gtYnV0dG9uX19pbm5lcntib3JkZXItY29sb3I6IzQwOUVGRn0uZWwtY2hlY2tib3gtYnV0dG9uOmxhc3QtY2hpbGQgLmVsLWNoZWNrYm94LWJ1dHRvbl9faW5uZXJ7Ym9yZGVyLXJhZGl1czowIDRweCA0cHggMH0uZWwtY2hlY2tib3gtYnV0dG9uLS1tZWRpdW0gLmVsLWNoZWNrYm94LWJ1dHRvbl9faW5uZXJ7cGFkZGluZzoxMHB4IDIwcHg7Zm9udC1zaXplOjE0cHg7Ym9yZGVyLXJhZGl1czowfS5lbC1jaGVja2JveC1idXR0b24tLW1lZGl1bSAuZWwtY2hlY2tib3gtYnV0dG9uX19pbm5lci5pcy1yb3VuZHtwYWRkaW5nOjEwcHggMjBweH0uZWwtY2hlY2tib3gtYnV0dG9uLS1zbWFsbCAuZWwtY2hlY2tib3gtYnV0dG9uX19pbm5lcntwYWRkaW5nOjlweCAxNXB4O2ZvbnQtc2l6ZToxMnB4O2JvcmRlci1yYWRpdXM6MH0uZWwtY2hlY2tib3gtYnV0dG9uLS1zbWFsbCAuZWwtY2hlY2tib3gtYnV0dG9uX19pbm5lci5pcy1yb3VuZHtwYWRkaW5nOjlweCAxNXB4fS5lbC1jaGVja2JveC1idXR0b24tLW1pbmkgLmVsLWNoZWNrYm94LWJ1dHRvbl9faW5uZXJ7cGFkZGluZzo3cHggMTVweDtmb250LXNpemU6MTJweDtib3JkZXItcmFkaXVzOjB9LmVsLWNoZWNrYm94LWJ1dHRvbi0tbWluaSAuZWwtY2hlY2tib3gtYnV0dG9uX19pbm5lci5pcy1yb3VuZHtwYWRkaW5nOjdweCAxNXB4fS5lbC1jaGVja2JveC1ncm91cHtmb250LXNpemU6MH0uZWwtYXZhdGFyLC5lbC1jYXNjYWRlci1wYW5lbCwuZWwtcmFkaW8sLmVsLXJhZGlvLS1tZWRpdW0uaXMtYm9yZGVyZWQgLmVsLXJhZGlvX19sYWJlbCwuZWwtcmFkaW9fX2xhYmVse2ZvbnQtc2l6ZToxNHB4fS5lbC1yYWRpb3tjb2xvcjojNjA2MjY2O2ZvbnQtd2VpZ2h0OjUwMDtsaW5lLWhlaWdodDoxO2N1cnNvcjpwb2ludGVyO3doaXRlLXNwYWNlOm5vd3JhcDtvdXRsaW5lOjA7bWFyZ2luLXJpZ2h0OjMwcHh9LmVsLWNhc2NhZGVyLW5vZGU+LmVsLXJhZGlvLC5lbC1yYWRpbzpsYXN0LWNoaWxke21hcmdpbi1yaWdodDowfS5lbC1yYWRpby5pcy1ib3JkZXJlZHtwYWRkaW5nOjEycHggMjBweCAwIDEwcHg7Ym9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyOjFweCBzb2xpZCAjRENERkU2Oy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDtoZWlnaHQ6NDBweH0uZWwtY2FzY2FkZXItbWVudSwuZWwtY2FzY2FkZXItbWVudV9fbGlzdCwuZWwtcmFkaW9fX2lubmVyey13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94fS5lbC1yYWRpby5pcy1ib3JkZXJlZC5pcy1jaGVja2Vke2JvcmRlci1jb2xvcjojNDA5RUZGfS5lbC1yYWRpby5pcy1ib3JkZXJlZC5pcy1kaXNhYmxlZHtjdXJzb3I6bm90LWFsbG93ZWQ7Ym9yZGVyLWNvbG9yOiNFQkVFRjV9LmVsLXJhZGlvX19pbnB1dC5pcy1kaXNhYmxlZCAuZWwtcmFkaW9fX2lubmVyLC5lbC1yYWRpb19faW5wdXQuaXMtZGlzYWJsZWQuaXMtY2hlY2tlZCAuZWwtcmFkaW9fX2lubmVye2JhY2tncm91bmQtY29sb3I6I0Y1RjdGQTtib3JkZXItY29sb3I6I0U0RTdFRH0uZWwtcmFkaW8uaXMtYm9yZGVyZWQrLmVsLXJhZGlvLmlzLWJvcmRlcmVke21hcmdpbi1sZWZ0OjEwcHh9LmVsLXJhZGlvLS1tZWRpdW0uaXMtYm9yZGVyZWR7cGFkZGluZzoxMHB4IDIwcHggMCAxMHB4O2JvcmRlci1yYWRpdXM6NHB4O2hlaWdodDozNnB4fS5lbC1yYWRpby0tbWluaS5pcy1ib3JkZXJlZCAuZWwtcmFkaW9fX2xhYmVsLC5lbC1yYWRpby0tc21hbGwuaXMtYm9yZGVyZWQgLmVsLXJhZGlvX19sYWJlbHtmb250LXNpemU6MTJweH0uZWwtcmFkaW8tLW1lZGl1bS5pcy1ib3JkZXJlZCAuZWwtcmFkaW9fX2lubmVye2hlaWdodDoxNHB4O3dpZHRoOjE0cHh9LmVsLXJhZGlvLS1zbWFsbC5pcy1ib3JkZXJlZHtwYWRkaW5nOjhweCAxNXB4IDAgMTBweDtib3JkZXItcmFkaXVzOjNweDtoZWlnaHQ6MzJweH0uZWwtcmFkaW8tLXNtYWxsLmlzLWJvcmRlcmVkIC5lbC1yYWRpb19faW5uZXJ7aGVpZ2h0OjEycHg7d2lkdGg6MTJweH0uZWwtcmFkaW8tLW1pbmkuaXMtYm9yZGVyZWR7cGFkZGluZzo2cHggMTVweCAwIDEwcHg7Ym9yZGVyLXJhZGl1czozcHg7aGVpZ2h0OjI4cHh9LmVsLXJhZGlvLS1taW5pLmlzLWJvcmRlcmVkIC5lbC1yYWRpb19faW5uZXJ7aGVpZ2h0OjEycHg7d2lkdGg6MTJweH0uZWwtcmFkaW9fX2lucHV0e3doaXRlLXNwYWNlOm5vd3JhcDtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOjA7bGluZS1oZWlnaHQ6MTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmVsLXJhZGlvX19pbnB1dC5pcy1kaXNhYmxlZCAuZWwtcmFkaW9fX2lubmVye2N1cnNvcjpub3QtYWxsb3dlZH0uZWwtcmFkaW9fX2lucHV0LmlzLWRpc2FibGVkIC5lbC1yYWRpb19faW5uZXI6OmFmdGVye2N1cnNvcjpub3QtYWxsb3dlZDtiYWNrZ3JvdW5kLWNvbG9yOiNGNUY3RkF9LmVsLXJhZGlvX19pbnB1dC5pcy1kaXNhYmxlZCAuZWwtcmFkaW9fX2lubmVyKy5lbC1yYWRpb19fbGFiZWx7Y3Vyc29yOm5vdC1hbGxvd2VkfS5lbC1yYWRpb19faW5wdXQuaXMtZGlzYWJsZWQuaXMtY2hlY2tlZCAuZWwtcmFkaW9fX2lubmVyOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOiNDMEM0Q0N9LmVsLXJhZGlvX19pbnB1dC5pcy1kaXNhYmxlZCtzcGFuLmVsLXJhZGlvX19sYWJlbHtjb2xvcjojQzBDNENDO2N1cnNvcjpub3QtYWxsb3dlZH0uZWwtcmFkaW9fX2lucHV0LmlzLWNoZWNrZWQgLmVsLXJhZGlvX19pbm5lcntib3JkZXItY29sb3I6IzQwOUVGRjtiYWNrZ3JvdW5kOiM0MDlFRkZ9LmVsLXJhZGlvX19pbnB1dC5pcy1jaGVja2VkIC5lbC1yYWRpb19faW5uZXI6OmFmdGVyey13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLC01MCUpIHNjYWxlKDEpO3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwtNTAlKSBzY2FsZSgxKX0uZWwtcmFkaW9fX2lucHV0LmlzLWNoZWNrZWQrLmVsLXJhZGlvX19sYWJlbHtjb2xvcjojNDA5RUZGfS5lbC1yYWRpb19faW5wdXQuaXMtZm9jdXMgLmVsLXJhZGlvX19pbm5lcntib3JkZXItY29sb3I6IzQwOUVGRn0uZWwtcmFkaW9fX2lubmVye2JvcmRlcjoxcHggc29saWQgI0RDREZFNjtib3JkZXItcmFkaXVzOjEwMCU7d2lkdGg6MTRweDtoZWlnaHQ6MTRweDtiYWNrZ3JvdW5kLWNvbG9yOiNGRkY7Y3Vyc29yOnBvaW50ZXI7Ym94LXNpemluZzpib3JkZXItYm94fS5lbC1yYWRpb19faW5uZXI6aG92ZXJ7Ym9yZGVyLWNvbG9yOiM0MDlFRkZ9LmVsLXJhZGlvX19pbm5lcjo6YWZ0ZXJ7d2lkdGg6NHB4O2hlaWdodDo0cHg7Ym9yZGVyLXJhZGl1czoxMDAlO2JhY2tncm91bmQtY29sb3I6I0ZGRjtjb250ZW50OlxcXCJcXFwiO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6NTAlO3RvcDo1MCU7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsLTUwJSkgc2NhbGUoMCk7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLC01MCUpIHNjYWxlKDApOy13ZWJraXQtdHJhbnNpdGlvbjotd2Via2l0LXRyYW5zZm9ybSAuMTVzIGVhc2UtaW47dHJhbnNpdGlvbjotd2Via2l0LXRyYW5zZm9ybSAuMTVzIGVhc2UtaW47dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjE1cyBlYXNlLWluO3RyYW5zaXRpb246dHJhbnNmb3JtIC4xNXMgZWFzZS1pbiwtd2Via2l0LXRyYW5zZm9ybSAuMTVzIGVhc2UtaW59LmVsLXJhZGlvX19vcmlnaW5hbHtvcGFjaXR5OjA7b3V0bGluZTowO3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6LTE7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7bWFyZ2luOjB9LmVsLXJhZGlvOmZvY3VzOm5vdCguaXMtZm9jdXMpOm5vdCg6YWN0aXZlKTpub3QoLmlzLWRpc2FibGVkKSAuZWwtcmFkaW9fX2lubmVyey13ZWJraXQtYm94LXNoYWRvdzowIDAgMnB4IDJweCAjNDA5RUZGO2JveC1zaGFkb3c6MCAwIDJweCAycHggIzQwOUVGRn0uZWwtcmFkaW9fX2xhYmVse3BhZGRpbmctbGVmdDoxMHB4fS5lbC1zY3JvbGxiYXJ7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlfS5lbC1zY3JvbGxiYXI6YWN0aXZlPi5lbC1zY3JvbGxiYXJfX2JhciwuZWwtc2Nyb2xsYmFyOmZvY3VzPi5lbC1zY3JvbGxiYXJfX2JhciwuZWwtc2Nyb2xsYmFyOmhvdmVyPi5lbC1zY3JvbGxiYXJfX2JhcntvcGFjaXR5OjE7LXdlYmtpdC10cmFuc2l0aW9uOm9wYWNpdHkgMzQwbXMgZWFzZS1vdXQ7dHJhbnNpdGlvbjpvcGFjaXR5IDM0MG1zIGVhc2Utb3V0fS5lbC1zY3JvbGxiYXJfX3dyYXB7b3ZlcmZsb3c6c2Nyb2xsO2hlaWdodDoxMDAlfS5lbC1zY3JvbGxiYXJfX3dyYXAtLWhpZGRlbi1kZWZhdWx0e3Njcm9sbGJhci13aWR0aDpub25lfS5lbC1zY3JvbGxiYXJfX3dyYXAtLWhpZGRlbi1kZWZhdWx0Ojotd2Via2l0LXNjcm9sbGJhcnt3aWR0aDowO2hlaWdodDowfS5lbC1zY3JvbGxiYXJfX3RodW1ie3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6YmxvY2s7d2lkdGg6MDtoZWlnaHQ6MDtjdXJzb3I6cG9pbnRlcjtib3JkZXItcmFkaXVzOmluaGVyaXQ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDE0NCwxNDcsMTUzLC4zKTstd2Via2l0LXRyYW5zaXRpb246LjNzIGJhY2tncm91bmQtY29sb3I7dHJhbnNpdGlvbjouM3MgYmFja2dyb3VuZC1jb2xvcn0uZWwtc2Nyb2xsYmFyX190aHVtYjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMTQ0LDE0NywxNTMsLjUpfS5lbC1zY3JvbGxiYXJfX2Jhcntwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDoycHg7Ym90dG9tOjJweDt6LWluZGV4OjE7Ym9yZGVyLXJhZGl1czo0cHg7b3BhY2l0eTowOy13ZWJraXQtdHJhbnNpdGlvbjpvcGFjaXR5IDEyMG1zIGVhc2Utb3V0O3RyYW5zaXRpb246b3BhY2l0eSAxMjBtcyBlYXNlLW91dH0uZWwtc2Nyb2xsYmFyX19iYXIuaXMtdmVydGljYWx7d2lkdGg6NnB4O3RvcDoycHh9LmVsLXNjcm9sbGJhcl9fYmFyLmlzLXZlcnRpY2FsPmRpdnt3aWR0aDoxMDAlfS5lbC1zY3JvbGxiYXJfX2Jhci5pcy1ob3Jpem9udGFse2hlaWdodDo2cHg7bGVmdDoycHh9LmVsLXNjcm9sbGJhcl9fYmFyLmlzLWhvcml6b250YWw+ZGl2e2hlaWdodDoxMDAlfS5lbC1jYXNjYWRlci1wYW5lbHtkaXNwbGF5Oi13ZWJraXQtYm94O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4O2JvcmRlci1yYWRpdXM6NHB4fS5lbC1jYXNjYWRlci1wYW5lbC5pcy1ib3JkZXJlZHtib3JkZXI6MXB4IHNvbGlkICNFNEU3RUQ7Ym9yZGVyLXJhZGl1czo0cHh9LmVsLWNhc2NhZGVyLW1lbnV7bWluLXdpZHRoOjE4MHB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjojNjA2MjY2O2JvcmRlci1yaWdodDpzb2xpZCAxcHggI0U0RTdFRH0uZWwtY2FzY2FkZXItbWVudTpsYXN0LWNoaWxke2JvcmRlci1yaWdodDpub25lfS5lbC1jYXNjYWRlci1tZW51X193cmFwe2hlaWdodDoyMDRweH0uZWwtY2FzY2FkZXItbWVudV9fbGlzdHtwb3NpdGlvbjpyZWxhdGl2ZTttaW4taGVpZ2h0OjEwMCU7bWFyZ2luOjA7cGFkZGluZzo2cHggMDtsaXN0LXN0eWxlOm5vbmU7Ym94LXNpemluZzpib3JkZXItYm94fS5lbC1jYXNjYWRlci1tZW51X19ob3Zlci16b25le3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3BvaW50ZXItZXZlbnRzOm5vbmV9LmVsLWNhc2NhZGVyLW1lbnVfX2VtcHR5LXRleHR7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtsZWZ0OjUwJTstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwtNTAlKTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsLTUwJSk7dGV4dC1hbGlnbjpjZW50ZXI7Y29sb3I6I0MwQzRDQ30uZWwtY2FzY2FkZXItbm9kZXtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5Oi13ZWJraXQtYm94O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4Oy13ZWJraXQtYm94LWFsaWduOmNlbnRlcjstbXMtZmxleC1hbGlnbjpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO3BhZGRpbmc6MCAzMHB4IDAgMjBweDtoZWlnaHQ6MzRweDtsaW5lLWhlaWdodDozNHB4O291dGxpbmU6MH0uZWwtY2FzY2FkZXItbm9kZS5pcy1zZWxlY3RhYmxlLmluLWFjdGl2ZS1wYXRoe2NvbG9yOiM2MDYyNjZ9LmVsLWNhc2NhZGVyLW5vZGUuaW4tYWN0aXZlLXBhdGgsLmVsLWNhc2NhZGVyLW5vZGUuaXMtYWN0aXZlLC5lbC1jYXNjYWRlci1ub2RlLmlzLXNlbGVjdGFibGUuaW4tY2hlY2tlZC1wYXRoe2NvbG9yOiM0MDlFRkY7Zm9udC13ZWlnaHQ6NzAwfS5lbC1jYXNjYWRlci1ub2RlOm5vdCguaXMtZGlzYWJsZWQpe2N1cnNvcjpwb2ludGVyfS5lbC1jYXNjYWRlci1ub2RlOm5vdCguaXMtZGlzYWJsZWQpOmZvY3VzLC5lbC1jYXNjYWRlci1ub2RlOm5vdCguaXMtZGlzYWJsZWQpOmhvdmVye2JhY2tncm91bmQ6I0Y1RjdGQX0uZWwtY2FzY2FkZXItbm9kZS5pcy1kaXNhYmxlZHtjb2xvcjojQzBDNENDO2N1cnNvcjpub3QtYWxsb3dlZH0uZWwtY2FzY2FkZXItbm9kZV9fcHJlZml4e3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MTBweH0uZWwtY2FzY2FkZXItbm9kZV9fcG9zdGZpeHtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDoxMHB4fS5lbC1jYXNjYWRlci1ub2RlX19sYWJlbHstd2Via2l0LWJveC1mbGV4OjE7LW1zLWZsZXg6MTtmbGV4OjE7cGFkZGluZzowIDEwcHg7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS5lbC1jYXNjYWRlci1ub2RlPi5lbC1yYWRpbyAuZWwtcmFkaW9fX2xhYmVse3BhZGRpbmctbGVmdDowfS5lbC1hdmF0YXJ7ZGlzcGxheTppbmxpbmUtYmxvY2s7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94O3RleHQtYWxpZ246Y2VudGVyO292ZXJmbG93OmhpZGRlbjtjb2xvcjojZmZmO2JhY2tncm91bmQ6I0MwQzRDQzt3aWR0aDo0MHB4O2hlaWdodDo0MHB4O2xpbmUtaGVpZ2h0OjQwcHh9LmVsLWRyYXdlciwuZWwtZHJhd2VyX19ib2R5Pip7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3h9LmVsLWF2YXRhcj5pbWd7ZGlzcGxheTpibG9jaztoZWlnaHQ6MTAwJTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmVsLWVtcHR5X19pbWFnZSBpbWcsLmVsLWVtcHR5X19pbWFnZSBzdmd7dmVydGljYWwtYWxpZ246dG9wO2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LmVsLWF2YXRhci0tY2lyY2xle2JvcmRlci1yYWRpdXM6NTAlfS5lbC1hdmF0YXItLXNxdWFyZXtib3JkZXItcmFkaXVzOjRweH0uZWwtYXZhdGFyLS1pY29ue2ZvbnQtc2l6ZToxOHB4fS5lbC1hdmF0YXItLWxhcmdle3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHg7bGluZS1oZWlnaHQ6NDBweH0uZWwtYXZhdGFyLS1tZWRpdW17d2lkdGg6MzZweDtoZWlnaHQ6MzZweDtsaW5lLWhlaWdodDozNnB4fS5lbC1hdmF0YXItLXNtYWxse3dpZHRoOjI4cHg7aGVpZ2h0OjI4cHg7bGluZS1oZWlnaHQ6MjhweH1ALXdlYmtpdC1rZXlmcmFtZXMgZWwtZHJhd2VyLWZhZGUtaW57MCV7b3BhY2l0eTowfTEwMCV7b3BhY2l0eToxfX1Aa2V5ZnJhbWVzIGVsLWRyYXdlci1mYWRlLWluezAle29wYWNpdHk6MH0xMDAle29wYWNpdHk6MX19QC13ZWJraXQta2V5ZnJhbWVzIHJ0bC1kcmF3ZXItaW57MCV7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlKDEwMCUsMCk7dHJhbnNmb3JtOnRyYW5zbGF0ZSgxMDAlLDApfTEwMCV7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlKDAsMCk7dHJhbnNmb3JtOnRyYW5zbGF0ZSgwLDApfX1Aa2V5ZnJhbWVzIHJ0bC1kcmF3ZXItaW57MCV7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlKDEwMCUsMCk7dHJhbnNmb3JtOnRyYW5zbGF0ZSgxMDAlLDApfTEwMCV7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlKDAsMCk7dHJhbnNmb3JtOnRyYW5zbGF0ZSgwLDApfX1ALXdlYmtpdC1rZXlmcmFtZXMgcnRsLWRyYXdlci1vdXR7MCV7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlKDAsMCk7dHJhbnNmb3JtOnRyYW5zbGF0ZSgwLDApfTEwMCV7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlKDEwMCUsMCk7dHJhbnNmb3JtOnRyYW5zbGF0ZSgxMDAlLDApfX1Aa2V5ZnJhbWVzIHJ0bC1kcmF3ZXItb3V0ezAley13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZSgwLDApO3RyYW5zZm9ybTp0cmFuc2xhdGUoMCwwKX0xMDAley13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZSgxMDAlLDApO3RyYW5zZm9ybTp0cmFuc2xhdGUoMTAwJSwwKX19QC13ZWJraXQta2V5ZnJhbWVzIGx0ci1kcmF3ZXItaW57MCV7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlKC0xMDAlLDApO3RyYW5zZm9ybTp0cmFuc2xhdGUoLTEwMCUsMCl9MTAwJXstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUoMCwwKTt0cmFuc2Zvcm06dHJhbnNsYXRlKDAsMCl9fUBrZXlmcmFtZXMgbHRyLWRyYXdlci1pbnswJXstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUoLTEwMCUsMCk7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtMTAwJSwwKX0xMDAley13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZSgwLDApO3RyYW5zZm9ybTp0cmFuc2xhdGUoMCwwKX19QC13ZWJraXQta2V5ZnJhbWVzIGx0ci1kcmF3ZXItb3V0ezAley13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZSgwLDApO3RyYW5zZm9ybTp0cmFuc2xhdGUoMCwwKX0xMDAley13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZSgtMTAwJSwwKTt0cmFuc2Zvcm06dHJhbnNsYXRlKC0xMDAlLDApfX1Aa2V5ZnJhbWVzIGx0ci1kcmF3ZXItb3V0ezAley13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZSgwLDApO3RyYW5zZm9ybTp0cmFuc2xhdGUoMCwwKX0xMDAley13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZSgtMTAwJSwwKTt0cmFuc2Zvcm06dHJhbnNsYXRlKC0xMDAlLDApfX1ALXdlYmtpdC1rZXlmcmFtZXMgdHRiLWRyYXdlci1pbnswJXstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUoMCwtMTAwJSk7dHJhbnNmb3JtOnRyYW5zbGF0ZSgwLC0xMDAlKX0xMDAley13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZSgwLDApO3RyYW5zZm9ybTp0cmFuc2xhdGUoMCwwKX19QGtleWZyYW1lcyB0dGItZHJhd2VyLWluezAley13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZSgwLC0xMDAlKTt0cmFuc2Zvcm06dHJhbnNsYXRlKDAsLTEwMCUpfTEwMCV7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlKDAsMCk7dHJhbnNmb3JtOnRyYW5zbGF0ZSgwLDApfX1ALXdlYmtpdC1rZXlmcmFtZXMgdHRiLWRyYXdlci1vdXR7MCV7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlKDAsMCk7dHJhbnNmb3JtOnRyYW5zbGF0ZSgwLDApfTEwMCV7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlKDAsLTEwMCUpO3RyYW5zZm9ybTp0cmFuc2xhdGUoMCwtMTAwJSl9fUBrZXlmcmFtZXMgdHRiLWRyYXdlci1vdXR7MCV7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlKDAsMCk7dHJhbnNmb3JtOnRyYW5zbGF0ZSgwLDApfTEwMCV7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlKDAsLTEwMCUpO3RyYW5zZm9ybTp0cmFuc2xhdGUoMCwtMTAwJSl9fUAtd2Via2l0LWtleWZyYW1lcyBidHQtZHJhd2VyLWluezAley13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZSgwLDEwMCUpO3RyYW5zZm9ybTp0cmFuc2xhdGUoMCwxMDAlKX0xMDAley13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZSgwLDApO3RyYW5zZm9ybTp0cmFuc2xhdGUoMCwwKX19QGtleWZyYW1lcyBidHQtZHJhd2VyLWluezAley13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZSgwLDEwMCUpO3RyYW5zZm9ybTp0cmFuc2xhdGUoMCwxMDAlKX0xMDAley13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZSgwLDApO3RyYW5zZm9ybTp0cmFuc2xhdGUoMCwwKX19QC13ZWJraXQta2V5ZnJhbWVzIGJ0dC1kcmF3ZXItb3V0ezAley13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZSgwLDApO3RyYW5zZm9ybTp0cmFuc2xhdGUoMCwwKX0xMDAley13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZSgwLDEwMCUpO3RyYW5zZm9ybTp0cmFuc2xhdGUoMCwxMDAlKX19QGtleWZyYW1lcyBidHQtZHJhd2VyLW91dHswJXstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUoMCwwKTt0cmFuc2Zvcm06dHJhbnNsYXRlKDAsMCl9MTAwJXstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUoMCwxMDAlKTt0cmFuc2Zvcm06dHJhbnNsYXRlKDAsMTAwJSl9fS5lbC1kcmF3ZXJ7cG9zaXRpb246YWJzb2x1dGU7Ym94LXNpemluZzpib3JkZXItYm94O2JhY2tncm91bmQtY29sb3I6I0ZGRjtkaXNwbGF5Oi13ZWJraXQtYm94O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4Oy1tcy1mbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleC1kaXJlY3Rpb246Y29sdW1uOy13ZWJraXQtYm94LXNoYWRvdzowIDhweCAxMHB4IC01cHggcmdiYSgwLDAsMCwuMiksMCAxNnB4IDI0cHggMnB4IHJnYmEoMCwwLDAsLjE0KSwwIDZweCAzMHB4IDVweCByZ2JhKDAsMCwwLC4xMik7Ym94LXNoYWRvdzowIDhweCAxMHB4IC01cHggcmdiYSgwLDAsMCwuMiksMCAxNnB4IDI0cHggMnB4IHJnYmEoMCwwLDAsLjE0KSwwIDZweCAzMHB4IDVweCByZ2JhKDAsMCwwLC4xMik7b3ZlcmZsb3c6aGlkZGVuO291dGxpbmU6MH0uZWwtZHJhd2VyLnJ0bHstd2Via2l0LWFuaW1hdGlvbjpydGwtZHJhd2VyLW91dCAuM3M7YW5pbWF0aW9uOnJ0bC1kcmF3ZXItb3V0IC4zcztyaWdodDowfS5lbC1kcmF3ZXJfX29wZW4gLmVsLWRyYXdlci5ydGx7LXdlYmtpdC1hbmltYXRpb246cnRsLWRyYXdlci1pbiAuM3MgMW1zO2FuaW1hdGlvbjpydGwtZHJhd2VyLWluIC4zcyAxbXN9LmVsLWRyYXdlci5sdHJ7LXdlYmtpdC1hbmltYXRpb246bHRyLWRyYXdlci1vdXQgLjNzO2FuaW1hdGlvbjpsdHItZHJhd2VyLW91dCAuM3M7bGVmdDowfS5lbC1kcmF3ZXJfX29wZW4gLmVsLWRyYXdlci5sdHJ7LXdlYmtpdC1hbmltYXRpb246bHRyLWRyYXdlci1pbiAuM3MgMW1zO2FuaW1hdGlvbjpsdHItZHJhd2VyLWluIC4zcyAxbXN9LmVsLWRyYXdlci50dGJ7LXdlYmtpdC1hbmltYXRpb246dHRiLWRyYXdlci1vdXQgLjNzO2FuaW1hdGlvbjp0dGItZHJhd2VyLW91dCAuM3M7dG9wOjB9LmVsLWRyYXdlcl9fb3BlbiAuZWwtZHJhd2VyLnR0Ynstd2Via2l0LWFuaW1hdGlvbjp0dGItZHJhd2VyLWluIC4zcyAxbXM7YW5pbWF0aW9uOnR0Yi1kcmF3ZXItaW4gLjNzIDFtc30uZWwtZHJhd2VyLmJ0dHstd2Via2l0LWFuaW1hdGlvbjpidHQtZHJhd2VyLW91dCAuM3M7YW5pbWF0aW9uOmJ0dC1kcmF3ZXItb3V0IC4zcztib3R0b206MH0uZWwtZHJhd2VyX19vcGVuIC5lbC1kcmF3ZXIuYnR0ey13ZWJraXQtYW5pbWF0aW9uOmJ0dC1kcmF3ZXItaW4gLjNzIDFtczthbmltYXRpb246YnR0LWRyYXdlci1pbiAuM3MgMW1zfS5lbC1kcmF3ZXJfX3dyYXBwZXJ7cG9zaXRpb246Zml4ZWQ7dG9wOjA7cmlnaHQ6MDtib3R0b206MDtsZWZ0OjA7b3ZlcmZsb3c6aGlkZGVuO21hcmdpbjowfS5lbC1kcmF3ZXJfX2hlYWRlcnstd2Via2l0LWJveC1hbGlnbjpjZW50ZXI7LW1zLWZsZXgtYWxpZ246Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtjb2xvcjojNzI3NjdiO2Rpc3BsYXk6LXdlYmtpdC1ib3g7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7bWFyZ2luLWJvdHRvbTozMnB4O3BhZGRpbmc6MjBweCAyMHB4IDB9LmVsLWRyYXdlcl9faGVhZGVyPjpmaXJzdC1jaGlsZHstd2Via2l0LWJveC1mbGV4OjE7LW1zLWZsZXg6MTtmbGV4OjF9LmVsLWRyYXdlcl9fdGl0bGV7bWFyZ2luOjA7LXdlYmtpdC1ib3gtZmxleDoxOy1tcy1mbGV4OjE7ZmxleDoxO2xpbmUtaGVpZ2h0OmluaGVyaXQ7Zm9udC1zaXplOjFyZW19LmVsLWRyYXdlcl9fY2xvc2UtYnRue2JvcmRlcjpub25lO2N1cnNvcjpwb2ludGVyO2ZvbnQtc2l6ZToyMHB4O2NvbG9yOmluaGVyaXQ7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0uZWwtZHJhd2VyX19ib2R5ey13ZWJraXQtYm94LWZsZXg6MTstbXMtZmxleDoxO2ZsZXg6MTtvdmVyZmxvdzphdXRvfS5lbC1kcmF3ZXJfX2JvZHk+Kntib3gtc2l6aW5nOmJvcmRlci1ib3h9LmVsLWRyYXdlci5sdHIsLmVsLWRyYXdlci5ydGx7aGVpZ2h0OjEwMCU7dG9wOjA7Ym90dG9tOjB9LmVsLWRyYXdlci5idHQsLmVsLWRyYXdlci50dGJ7d2lkdGg6MTAwJTtsZWZ0OjA7cmlnaHQ6MH0uZWwtZHJhd2VyX19jb250YWluZXJ7cG9zaXRpb246cmVsYXRpdmU7bGVmdDowO3JpZ2h0OjA7dG9wOjA7Ym90dG9tOjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uZWwtZHJhd2VyLWZhZGUtZW50ZXItYWN0aXZley13ZWJraXQtYW5pbWF0aW9uOmVsLWRyYXdlci1mYWRlLWluIC4zczthbmltYXRpb246ZWwtZHJhd2VyLWZhZGUtaW4gLjNzfS5lbC1kcmF3ZXItZmFkZS1sZWF2ZS1hY3RpdmV7YW5pbWF0aW9uOmVsLWRyYXdlci1mYWRlLWluIC4zcyByZXZlcnNlfS5lbC1zdGF0aXN0aWN7d2lkdGg6MTAwJTstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3g7bWFyZ2luOjA7cGFkZGluZzowO2NvbG9yOiMwMDA7Zm9udC12YXJpYW50OnRhYnVsYXItbnVtcztsaXN0LXN0eWxlOm5vbmU7LXdlYmtpdC1mb250LWZlYXR1cmUtc2V0dGluZ3M6XFxcInRudW1cXFwiO2ZvbnQtZmVhdHVyZS1zZXR0aW5nczpcXFwidG51bVxcXCI7dGV4dC1hbGlnbjpjZW50ZXJ9LmVsLXN0YXRpc3RpYyAuaGVhZHttYXJnaW4tYm90dG9tOjRweDtjb2xvcjojNjA2MjY2O2ZvbnQtc2l6ZToxM3B4fS5lbC1zdGF0aXN0aWMgLmNvbntmb250LWZhbWlseTpTYW5zLXNlcmlmO2Rpc3BsYXk6LXdlYmtpdC1ib3g7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7LXdlYmtpdC1ib3gtcGFjazpjZW50ZXI7LW1zLWZsZXgtcGFjazpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjstd2Via2l0LWJveC1hbGlnbjpjZW50ZXI7LW1zLWZsZXgtYWxpZ246Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtjb2xvcjojMzAzMTMzfS5lbC1zdGF0aXN0aWMgLmNvbiAubnVtYmVye2ZvbnQtc2l6ZToyMHB4O3BhZGRpbmc6MCA0cHh9LmVsLXN0YXRpc3RpYyAuY29uIHNwYW57ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luOjA7bGluZS1oZWlnaHQ6MTAwJX0uZWwtcG9wY29uZmlybV9fbWFpbiwuZWwtc2tlbGV0b25fX2ltYWdle2Rpc3BsYXk6LW1zLWZsZXhib3g7LXdlYmtpdC1ib3gtYWxpZ246Y2VudGVyO2Rpc3BsYXk6LXdlYmtpdC1ib3h9LmVsLXBvcGNvbmZpcm1fX21haW57ZGlzcGxheTpmbGV4Oy1tcy1mbGV4LWFsaWduOmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXJ9LmVsLXBvcGNvbmZpcm1fX2ljb257bWFyZ2luLXJpZ2h0OjVweH0uZWwtcG9wY29uZmlybV9fYWN0aW9ue3RleHQtYWxpZ246cmlnaHQ7bWFyZ2luOjB9QC13ZWJraXQta2V5ZnJhbWVzIGVsLXNrZWxldG9uLWxvYWRpbmd7MCV7YmFja2dyb3VuZC1wb3NpdGlvbjoxMDAlIDUwJX0xMDAle2JhY2tncm91bmQtcG9zaXRpb246MCA1MCV9fUBrZXlmcmFtZXMgZWwtc2tlbGV0b24tbG9hZGluZ3swJXtiYWNrZ3JvdW5kLXBvc2l0aW9uOjEwMCUgNTAlfTEwMCV7YmFja2dyb3VuZC1wb3NpdGlvbjowIDUwJX19LmVsLXNrZWxldG9ue3dpZHRoOjEwMCV9LmVsLXNrZWxldG9uX19maXJzdC1saW5lLC5lbC1za2VsZXRvbl9fcGFyYWdyYXBoe2hlaWdodDoxNnB4O21hcmdpbi10b3A6MTZweDtiYWNrZ3JvdW5kOiNmMmYyZjJ9LmVsLXNrZWxldG9uLmlzLWFuaW1hdGVkIC5lbC1za2VsZXRvbl9faXRlbXtiYWNrZ3JvdW5kOi13ZWJraXQtZ3JhZGllbnQobGluZWFyLGxlZnQgdG9wLHJpZ2h0IHRvcCxjb2xvci1zdG9wKDI1JSwjZjJmMmYyKSxjb2xvci1zdG9wKDM3JSwjZTZlNmU2KSxjb2xvci1zdG9wKDYzJSwjZjJmMmYyKSk7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoOTBkZWcsI2YyZjJmMiAyNSUsI2U2ZTZlNiAzNyUsI2YyZjJmMiA2MyUpO2JhY2tncm91bmQtc2l6ZTo0MDAlIDEwMCU7LXdlYmtpdC1hbmltYXRpb246ZWwtc2tlbGV0b24tbG9hZGluZyAxLjRzIGVhc2UgaW5maW5pdGU7YW5pbWF0aW9uOmVsLXNrZWxldG9uLWxvYWRpbmcgMS40cyBlYXNlIGluZmluaXRlfS5lbC1za2VsZXRvbl9faXRlbXtiYWNrZ3JvdW5kOiNmMmYyZjI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjE2cHg7Ym9yZGVyLXJhZGl1czo0cHg7d2lkdGg6MTAwJX0uZWwtc2tlbGV0b25fX2NpcmNsZXtib3JkZXItcmFkaXVzOjUwJTt3aWR0aDozNnB4O2hlaWdodDozNnB4O2xpbmUtaGVpZ2h0OjM2cHh9LmVsLXNrZWxldG9uX19jaXJjbGUtLWxne3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHg7bGluZS1oZWlnaHQ6NDBweH0uZWwtc2tlbGV0b25fX2NpcmNsZS0tbWR7d2lkdGg6MjhweDtoZWlnaHQ6MjhweDtsaW5lLWhlaWdodDoyOHB4fS5lbC1za2VsZXRvbl9fYnV0dG9ue2hlaWdodDo0MHB4O3dpZHRoOjY0cHg7Ym9yZGVyLXJhZGl1czo0cHh9LmVsLXNrZWxldG9uX19we3dpZHRoOjEwMCV9LmVsLXNrZWxldG9uX19wLmlzLWxhc3R7d2lkdGg6NjElfS5lbC1za2VsZXRvbl9fcC5pcy1maXJzdHt3aWR0aDozMyV9LmVsLXNrZWxldG9uX190ZXh0e3dpZHRoOjEwMCU7aGVpZ2h0OjEzcHh9LmVsLXNrZWxldG9uX19jYXB0aW9ue2hlaWdodDoxMnB4fS5lbC1za2VsZXRvbl9faDF7aGVpZ2h0OjIwcHh9LmVsLXNrZWxldG9uX19oM3toZWlnaHQ6MThweH0uZWwtc2tlbGV0b25fX2g1e2hlaWdodDoxNnB4fS5lbC1za2VsZXRvbl9faW1hZ2V7d2lkdGg6dW5zZXQ7ZGlzcGxheTpmbGV4Oy1tcy1mbGV4LWFsaWduOmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7LXdlYmtpdC1ib3gtcGFjazpjZW50ZXI7LW1zLWZsZXgtcGFjazpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtib3JkZXItcmFkaXVzOjB9LmVsLXNrZWxldG9uX19pbWFnZSBzdmd7ZmlsbDojRENEREUwO3dpZHRoOjIyJTtoZWlnaHQ6MjIlfS5lbC1lbXB0eXtkaXNwbGF5Oi13ZWJraXQtYm94O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4Oy13ZWJraXQtYm94LXBhY2s6Y2VudGVyOy1tcy1mbGV4LXBhY2s6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7LXdlYmtpdC1ib3gtYWxpZ246Y2VudGVyOy1tcy1mbGV4LWFsaWduOmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7LW1zLWZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmbGV4LWRpcmVjdGlvbjpjb2x1bW47dGV4dC1hbGlnbjpjZW50ZXI7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6NDBweCAwfS5lbC1lbXB0eV9faW1hZ2V7d2lkdGg6MTYwcHh9LmVsLWVtcHR5X19pbWFnZSBpbWd7dXNlci1zZWxlY3Q6bm9uZTstby1vYmplY3QtZml0OmNvbnRhaW47b2JqZWN0LWZpdDpjb250YWlufS5lbC1lbXB0eV9faW1hZ2Ugc3Zne2ZpbGw6I0RDRERFMH0uZWwtZW1wdHlfX2Rlc2NyaXB0aW9ue21hcmdpbi10b3A6MjBweH0uZWwtZW1wdHlfX2Rlc2NyaXB0aW9uIHB7bWFyZ2luOjA7Zm9udC1zaXplOjE0cHg7Y29sb3I6IzkwOTM5OX0uZWwtZW1wdHlfX2JvdHRvbSwuZWwtcmVzdWx0X190aXRsZXttYXJnaW4tdG9wOjIwcHh9LmVsLWRlc2NyaXB0aW9uc3std2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3g7Zm9udC1zaXplOjE0cHg7Y29sb3I6IzMwMzEzM30uZWwtZGVzY3JpcHRpb25zX19oZWFkZXJ7ZGlzcGxheTotd2Via2l0LWJveDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDstd2Via2l0LWJveC1wYWNrOmp1c3RpZnk7LW1zLWZsZXgtcGFjazpqdXN0aWZ5O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuOy13ZWJraXQtYm94LWFsaWduOmNlbnRlcjstbXMtZmxleC1hbGlnbjpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO21hcmdpbi1ib3R0b206MjBweH0uZWwtZGVzY3JpcHRpb25zX190aXRsZXtmb250LXNpemU6MTZweDtmb250LXdlaWdodDo3MDB9LmVsLWRlc2NyaXB0aW9ucy0tbWluaSwuZWwtZGVzY3JpcHRpb25zLS1zbWFsbHtmb250LXNpemU6MTJweH0uZWwtZGVzY3JpcHRpb25zX19ib2R5e2NvbG9yOiM2MDYyNjY7YmFja2dyb3VuZC1jb2xvcjojRkZGfS5lbC1kZXNjcmlwdGlvbnNfX2JvZHkgLmVsLWRlc2NyaXB0aW9uc19fdGFibGV7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO3dpZHRoOjEwMCU7dGFibGUtbGF5b3V0OmZpeGVkfS5lbC1kZXNjcmlwdGlvbnNfX2JvZHkgLmVsLWRlc2NyaXB0aW9uc19fdGFibGUgLmVsLWRlc2NyaXB0aW9ucy1pdGVtX19jZWxsey13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDt0ZXh0LWFsaWduOmxlZnQ7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuNX0uZWwtZGVzY3JpcHRpb25zX19ib2R5IC5lbC1kZXNjcmlwdGlvbnNfX3RhYmxlIC5lbC1kZXNjcmlwdGlvbnMtaXRlbV9fY2VsbC5pcy1sZWZ0e3RleHQtYWxpZ246bGVmdH0uZWwtZGVzY3JpcHRpb25zX19ib2R5IC5lbC1kZXNjcmlwdGlvbnNfX3RhYmxlIC5lbC1kZXNjcmlwdGlvbnMtaXRlbV9fY2VsbC5pcy1jZW50ZXJ7dGV4dC1hbGlnbjpjZW50ZXJ9LmVsLWRlc2NyaXB0aW9uc19fYm9keSAuZWwtZGVzY3JpcHRpb25zX190YWJsZSAuZWwtZGVzY3JpcHRpb25zLWl0ZW1fX2NlbGwuaXMtcmlnaHR7dGV4dC1hbGlnbjpyaWdodH0uZWwtZGVzY3JpcHRpb25zIC5pcy1ib3JkZXJlZHt0YWJsZS1sYXlvdXQ6YXV0b30uZWwtZGVzY3JpcHRpb25zIC5pcy1ib3JkZXJlZCAuZWwtZGVzY3JpcHRpb25zLWl0ZW1fX2NlbGx7Ym9yZGVyOjFweCBzb2xpZCAjRUJFRUY1O3BhZGRpbmc6MTJweCAxMHB4fS5lbC1kZXNjcmlwdGlvbnMgOm5vdCguaXMtYm9yZGVyZWQpIC5lbC1kZXNjcmlwdGlvbnMtaXRlbV9fY2VsbHtwYWRkaW5nLWJvdHRvbToxMnB4fS5lbC1kZXNjcmlwdGlvbnMtLW1lZGl1bS5pcy1ib3JkZXJlZCAuZWwtZGVzY3JpcHRpb25zLWl0ZW1fX2NlbGx7cGFkZGluZzoxMHB4fS5lbC1kZXNjcmlwdGlvbnMtLW1lZGl1bTpub3QoLmlzLWJvcmRlcmVkKSAuZWwtZGVzY3JpcHRpb25zLWl0ZW1fX2NlbGx7cGFkZGluZy1ib3R0b206MTBweH0uZWwtZGVzY3JpcHRpb25zLS1zbWFsbC5pcy1ib3JkZXJlZCAuZWwtZGVzY3JpcHRpb25zLWl0ZW1fX2NlbGx7cGFkZGluZzo4cHggMTBweH0uZWwtZGVzY3JpcHRpb25zLS1zbWFsbDpub3QoLmlzLWJvcmRlcmVkKSAuZWwtZGVzY3JpcHRpb25zLWl0ZW1fX2NlbGx7cGFkZGluZy1ib3R0b206OHB4fS5lbC1kZXNjcmlwdGlvbnMtLW1pbmkuaXMtYm9yZGVyZWQgLmVsLWRlc2NyaXB0aW9ucy1pdGVtX19jZWxse3BhZGRpbmc6NnB4IDEwcHh9LmVsLWRlc2NyaXB0aW9ucy0tbWluaTpub3QoLmlzLWJvcmRlcmVkKSAuZWwtZGVzY3JpcHRpb25zLWl0ZW1fX2NlbGx7cGFkZGluZy1ib3R0b206NnB4fS5lbC1kZXNjcmlwdGlvbnMtaXRlbXt2ZXJ0aWNhbC1hbGlnbjp0b3B9LmVsLWRlc2NyaXB0aW9ucy1pdGVtX19jb250YWluZXJ7ZGlzcGxheTotd2Via2l0LWJveDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleH0uZWwtZGVzY3JpcHRpb25zLWl0ZW1fX2NvbnRhaW5lciAuZWwtZGVzY3JpcHRpb25zLWl0ZW1fX2NvbnRlbnQsLmVsLWRlc2NyaXB0aW9ucy1pdGVtX19jb250YWluZXIgLmVsLWRlc2NyaXB0aW9ucy1pdGVtX19sYWJlbHtkaXNwbGF5Oi13ZWJraXQtaW5saW5lLWJveDtkaXNwbGF5Oi1tcy1pbmxpbmUtZmxleGJveDtkaXNwbGF5OmlubGluZS1mbGV4Oy13ZWJraXQtYm94LWFsaWduOmJhc2VsaW5lOy1tcy1mbGV4LWFsaWduOmJhc2VsaW5lO2FsaWduLWl0ZW1zOmJhc2VsaW5lfS5lbC1kZXNjcmlwdGlvbnMtaXRlbV9fY29udGFpbmVyIC5lbC1kZXNjcmlwdGlvbnMtaXRlbV9fY29udGVudHstd2Via2l0LWJveC1mbGV4OjE7LW1zLWZsZXg6MTtmbGV4OjF9LmVsLWRlc2NyaXB0aW9ucy1pdGVtX19sYWJlbC5oYXMtY29sb246OmFmdGVye2NvbnRlbnQ6JzonO3Bvc2l0aW9uOnJlbGF0aXZlO3RvcDotLjVweH0uZWwtZGVzY3JpcHRpb25zLWl0ZW1fX2xhYmVsLmlzLWJvcmRlcmVkLWxhYmVse2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjojOTA5Mzk5O2JhY2tncm91bmQ6I2ZhZmFmYX0uZWwtZGVzY3JpcHRpb25zLWl0ZW1fX2xhYmVsOm5vdCguaXMtYm9yZGVyZWQtbGFiZWwpe21hcmdpbi1yaWdodDoxMHB4fS5lbC1kZXNjcmlwdGlvbnMtaXRlbV9fY29udGVudHt3b3JkLWJyZWFrOmJyZWFrLXdvcmQ7b3ZlcmZsb3ctd3JhcDpicmVhay13b3JkfS5lbC1yZXN1bHR7ZGlzcGxheTotd2Via2l0LWJveDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDstd2Via2l0LWJveC1wYWNrOmNlbnRlcjstbXMtZmxleC1wYWNrOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOy13ZWJraXQtYm94LWFsaWduOmNlbnRlcjstbXMtZmxleC1hbGlnbjpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyOy1tcy1mbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleC1kaXJlY3Rpb246Y29sdW1uO3RleHQtYWxpZ246Y2VudGVyOy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjQwcHggMzBweH0uZWwtcmVzdWx0X19pY29uIHN2Z3t3aWR0aDo2NHB4O2hlaWdodDo2NHB4fS5lbC1yZXN1bHRfX3RpdGxlIHB7bWFyZ2luOjA7Zm9udC1zaXplOjIwcHg7Y29sb3I6IzMwMzEzMztsaW5lLWhlaWdodDoxLjN9LmVsLXJlc3VsdF9fc3VidGl0bGV7bWFyZ2luLXRvcDoxMHB4fS5lbC1yZXN1bHRfX3N1YnRpdGxlIHB7bWFyZ2luOjA7Zm9udC1zaXplOjE0cHg7Y29sb3I6IzYwNjI2NjtsaW5lLWhlaWdodDoxLjN9LmVsLXJlc3VsdF9fZXh0cmF7bWFyZ2luLXRvcDozMHB4fS5lbC1yZXN1bHQgLmljb24tc3VjY2Vzc3tmaWxsOiM2N0MyM0F9LmVsLXJlc3VsdCAuaWNvbi1lcnJvcntmaWxsOiNGNTZDNkN9LmVsLXJlc3VsdCAuaWNvbi1pbmZve2ZpbGw6IzkwOTM5OX0uZWwtcmVzdWx0IC5pY29uLXdhcm5pbmd7ZmlsbDojRTZBMjNDfVwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/css-loader/dist/cjs.js??clonedRuleSet-9.use[1]!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-9.use[2]!./node_modules/element-ui/lib/theme-chalk/index.css\n");

/***/ }),

/***/ "./node_modules/css-loader/dist/cjs.js??clonedRuleSet-9.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-9.use[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/widgets/SidebarWidget.vue?vue&type=style&index=0&id=5c937b85&lang=css&":
/*!******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-9.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-9.use[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/widgets/SidebarWidget.vue?vue&type=style&index=0&id=5c937b85&lang=css& ***!
  \******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/***/ ((module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js */ \"./node_modules/css-loader/dist/runtime/cssWithMappingToString.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"\\n.brand-link {\\n    padding: 2px;\\n    text-align: center;\\n}\\n.user-panel .info .d-block {\\n    text-overflow: ellipsis;\\n    white-space: nowrap;\\n    overflow: hidden;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./resources/js/components/admin/widgets/SidebarWidget.vue\"],\"names\":[],\"mappings\":\";AAgHA;IACA,YAAA;IACA,kBAAA;AACA;AACA;IACA,uBAAA;IACA,mBAAA;IACA,gBAAA;AACA\",\"sourcesContent\":[\"<template>\\n    <aside class=\\\"main-sidebar sidebar-dark-red elevation-4\\\">\\n        <div class=\\\"text-center\\\" id=\\\"logo-ppal\\\">\\n            <img src=\\\"svg/logos/logo-plataforma.svg\\\" class=\\\"img-resposive pointer\\\" @click=\\\"goToPlatform()\\\" />\\n        </div>\\n\\n        <div class=\\\"sidebar\\\">\\n            <div class=\\\"user-panel mt-3 pb-3 mb-3 d-flex\\\">\\n                <!-- <div class=\\\"image\\\">\\n                    <img src=\\\"svg/avatars/avatar-default.svg\\\" class=\\\"img-circle elevation-2\\\" alt=\\\"User Image\\\" />\\n                </div>\\n                <div class=\\\"info\\\">\\n                    {{ UserData.name }}\\n                </div> -->\\n            </div>\\n\\n            <nav class=\\\"options\\\">\\n                <ul class=\\\"nav nav-pills nav-sidebar flex-column\\\" data-widget=\\\"treeview\\\" role=\\\"menu\\\" data-accordion=\\\"true\\\">\\n\\n                    <li v-bind:class=\\\"(item.is_separator == 1 ? 'nav-header' : 'nav-item') + ' ' + (item.childs.length > 0 ? 'with-child' : '')\\\" v-for=\\\"item of menu\\\" v-if=\\\"UserData != null\\\">\\n                        <router-link class=\\\"nav-link\\\" :tag=\\\"(item.childs.length > 0 ? 'span' : 'a')\\\" :to=\\\"(item.childs.length > 0 ? '#' : item.link)\\\" v-if=\\\"item.is_separator != 1\\\">\\n                            <i class=\\\"fas\\\" :class=\\\"item.icon\\\"></i>\\n                            {{ item.name }}\\n                        </router-link>\\n                        <span v-if=\\\"item.is_separator == 1\\\">\\n                            <i class=\\\"fas\\\" :class=\\\"item.icon\\\"></i>\\n                            <p>\\n                                {{ item.name }}\\n                            </p>\\n                        </span>\\n                        <ul class=\\\"nav nav-treeview\\\" v-if=\\\"item.is_separator != 1 && item.childs.length > 0\\\">\\n                            <li class=\\\"nav-item\\\" v-for=\\\"child of item.childs\\\">\\n                                <router-link tag=\\\"a\\\" class=\\\"nav-link\\\" :to=\\\"child.link\\\">\\n                                    <span>\\n                                        <i class=\\\"fa fa-dot-circle\\\"></i>\\n                                        {{ child.name }}\\n                                    </span>\\n                                </router-link>\\n                            </li>\\n                        </ul>\\n                    </li>\\n                </ul>\\n            </nav>\\n            <br />\\n            <br />\\n        </div>\\n        <div class=\\\"login-footer-menu\\\"></div>\\n    </aside>\\n</template>\\n\\n<script>\\nexport default {\\n    data() {\\n        return {\\n            menu: [],\\n            organizationTypeList: [],\\n            organizationType: 0\\n        };\\n    },\\n    mounted() {\\n        if(window.AT == \\\"\\\") {\\n           this.UserData = null;\\n           window.localStorage.removeItem('userDataIF');\\n        }\\n\\n        if(this.UserData != null) {\\n            axios\\n                .post(\\n                    \\\"/api/menu\\\",\\n                    {},\\n                    {\\n                        headers: {\\n                            Authorization: AT,\\n                        },\\n                    }\\n                )\\n                .then((resp) => {\\n                    this.menu = resp.data;\\n                });\\n        }\\n        this.loadOrganizationType();\\n    },\\n    methods: {\\n        loadOrganizationType() {\\n            axios.get($urlPlatform + \\\"/api/organizationsTypeGrouped\\\", {}, {}).then((response) => {\\n                let items = response.data;\\n                let _arr = [];\\n                for (let item of items) {\\n                    _arr.push(item);\\n                }\\n                this.organizationTypeList = _arr;\\n            });\\n        },\\n        goToHome(id) {\\n            if(this.$route.path != \\\"/\\\") {\\n                this.$router.push('/');\\n            }\\n            setTimeout(_ => {\\n                this.organizationType = id;\\n                this.$root.$emit('updateOrganizationType', id);\\n                jQuery('html, body').animate({\\n                    scrollTop: jQuery('.organizations-title').offset().top\\n                }, 500);\\n            }, 1000);\\n        },\\n        goToPlatform() {\\n            window.location.href = window.$urlPlatform;\\n        }\\n    },\\n};\\n</script>\\n<style>\\n.brand-link {\\n    padding: 2px;\\n    text-align: center;\\n}\\n.user-panel .info .d-block {\\n    text-overflow: ellipsis;\\n    white-space: nowrap;\\n    overflow: hidden;\\n}\\n</style>\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC05LnVzZVsxXSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3N0eWxlUG9zdExvYWRlci5qcyEuL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC05LnVzZVsyXSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vd2lkZ2V0cy9TaWRlYmFyV2lkZ2V0LnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTVjOTM3Yjg1Jmxhbmc9Y3NzJiIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBQ2tJO0FBQzdCO0FBQ3JHLDhCQUE4QixtRkFBMkIsQ0FBQyx3R0FBcUM7QUFDL0Y7QUFDQSx5REFBeUQsbUJBQW1CLHlCQUF5QixHQUFHLDhCQUE4Qiw4QkFBOEIsMEJBQTBCLHVCQUF1QixHQUFHLFNBQVMsc0hBQXNILE1BQU0sVUFBVSxXQUFXLEtBQUssS0FBSyxXQUFXLFdBQVcsV0FBVywybkJBQTJuQixnQkFBZ0IsMnNCQUEyc0IsWUFBWSxzUEFBc1AsWUFBWSw4Z0JBQThnQixhQUFhLHVZQUF1WSxjQUFjLGtCQUFrQiwyR0FBMkcsT0FBTyxrQkFBa0IsaUNBQWlDLGtDQUFrQywwREFBMEQsV0FBVyx1Q0FBdUMsdUdBQXVHLHdCQUF3QixvQ0FBb0MsMkVBQTJFLHdCQUF3QixzREFBc0QsNENBQTRDLG1CQUFtQixFQUFFLFdBQVcsc0NBQXNDLE9BQU8saUJBQWlCLGtDQUFrQyw0RUFBNEUsSUFBSSxzQkFBc0IsNENBQTRDLGdDQUFnQywyQ0FBMkMsc0NBQXNDLG1CQUFtQixtREFBbUQsZUFBZSxFQUFFLFdBQVcseUJBQXlCLDZDQUE2Qyx5Q0FBeUMsZUFBZSwrQkFBK0IsNkNBQTZDLGlFQUFpRSxnREFBZ0QsK0ZBQStGLE9BQU8sZUFBZSxRQUFRLFdBQVcsMkJBQTJCLHlEQUF5RCxXQUFXLE9BQU8sS0FBSyxtQ0FBbUMsbUJBQW1CLHlCQUF5QixHQUFHLDhCQUE4Qiw4QkFBOEIsMEJBQTBCLHVCQUF1QixHQUFHLCtCQUErQjtBQUNsMUo7QUFDQSxpRUFBZSx1QkFBdUIsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9jb21wb25lbnRzL2FkbWluL3dpZGdldHMvU2lkZWJhcldpZGdldC52dWU/N2VjNSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2Nzc1dpdGhNYXBwaW5nVG9TdHJpbmcuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBcIlxcbi5icmFuZC1saW5rIHtcXG4gICAgcGFkZGluZzogMnB4O1xcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxufVxcbi51c2VyLXBhbmVsIC5pbmZvIC5kLWJsb2NrIHtcXG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XFxuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxuICAgIG92ZXJmbG93OiBoaWRkZW47XFxufVxcblwiLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL3Jlc291cmNlcy9qcy9jb21wb25lbnRzL2FkbWluL3dpZGdldHMvU2lkZWJhcldpZGdldC52dWVcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIjtBQWdIQTtJQUNBLFlBQUE7SUFDQSxrQkFBQTtBQUNBO0FBQ0E7SUFDQSx1QkFBQTtJQUNBLG1CQUFBO0lBQ0EsZ0JBQUE7QUFDQVwiLFwic291cmNlc0NvbnRlbnRcIjpbXCI8dGVtcGxhdGU+XFxuICAgIDxhc2lkZSBjbGFzcz1cXFwibWFpbi1zaWRlYmFyIHNpZGViYXItZGFyay1yZWQgZWxldmF0aW9uLTRcXFwiPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwidGV4dC1jZW50ZXJcXFwiIGlkPVxcXCJsb2dvLXBwYWxcXFwiPlxcbiAgICAgICAgICAgIDxpbWcgc3JjPVxcXCJzdmcvbG9nb3MvbG9nby1wbGF0YWZvcm1hLnN2Z1xcXCIgY2xhc3M9XFxcImltZy1yZXNwb3NpdmUgcG9pbnRlclxcXCIgQGNsaWNrPVxcXCJnb1RvUGxhdGZvcm0oKVxcXCIgLz5cXG4gICAgICAgIDwvZGl2PlxcblxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwic2lkZWJhclxcXCI+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwidXNlci1wYW5lbCBtdC0zIHBiLTMgbWItMyBkLWZsZXhcXFwiPlxcbiAgICAgICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XFxcImltYWdlXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPVxcXCJzdmcvYXZhdGFycy9hdmF0YXItZGVmYXVsdC5zdmdcXFwiIGNsYXNzPVxcXCJpbWctY2lyY2xlIGVsZXZhdGlvbi0yXFxcIiBhbHQ9XFxcIlVzZXIgSW1hZ2VcXFwiIC8+XFxuICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJpbmZvXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgIHt7IFVzZXJEYXRhLm5hbWUgfX1cXG4gICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxcbiAgICAgICAgICAgIDwvZGl2PlxcblxcbiAgICAgICAgICAgIDxuYXYgY2xhc3M9XFxcIm9wdGlvbnNcXFwiPlxcbiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XFxcIm5hdiBuYXYtcGlsbHMgbmF2LXNpZGViYXIgZmxleC1jb2x1bW5cXFwiIGRhdGEtd2lkZ2V0PVxcXCJ0cmVldmlld1xcXCIgcm9sZT1cXFwibWVudVxcXCIgZGF0YS1hY2NvcmRpb249XFxcInRydWVcXFwiPlxcblxcbiAgICAgICAgICAgICAgICAgICAgPGxpIHYtYmluZDpjbGFzcz1cXFwiKGl0ZW0uaXNfc2VwYXJhdG9yID09IDEgPyAnbmF2LWhlYWRlcicgOiAnbmF2LWl0ZW0nKSArICcgJyArIChpdGVtLmNoaWxkcy5sZW5ndGggPiAwID8gJ3dpdGgtY2hpbGQnIDogJycpXFxcIiB2LWZvcj1cXFwiaXRlbSBvZiBtZW51XFxcIiB2LWlmPVxcXCJVc2VyRGF0YSAhPSBudWxsXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8cm91dGVyLWxpbmsgY2xhc3M9XFxcIm5hdi1saW5rXFxcIiA6dGFnPVxcXCIoaXRlbS5jaGlsZHMubGVuZ3RoID4gMCA/ICdzcGFuJyA6ICdhJylcXFwiIDp0bz1cXFwiKGl0ZW0uY2hpbGRzLmxlbmd0aCA+IDAgPyAnIycgOiBpdGVtLmxpbmspXFxcIiB2LWlmPVxcXCJpdGVtLmlzX3NlcGFyYXRvciAhPSAxXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XFxcImZhc1xcXCIgOmNsYXNzPVxcXCJpdGVtLmljb25cXFwiPjwvaT5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5uYW1lIH19XFxuICAgICAgICAgICAgICAgICAgICAgICAgPC9yb3V0ZXItbGluaz5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiB2LWlmPVxcXCJpdGVtLmlzX3NlcGFyYXRvciA9PSAxXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XFxcImZhc1xcXCIgOmNsYXNzPVxcXCJpdGVtLmljb25cXFwiPjwvaT5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLm5hbWUgfX1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XFxcIm5hdiBuYXYtdHJlZXZpZXdcXFwiIHYtaWY9XFxcIml0ZW0uaXNfc2VwYXJhdG9yICE9IDEgJiYgaXRlbS5jaGlsZHMubGVuZ3RoID4gMFxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cXFwibmF2LWl0ZW1cXFwiIHYtZm9yPVxcXCJjaGlsZCBvZiBpdGVtLmNoaWxkc1xcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cm91dGVyLWxpbmsgdGFnPVxcXCJhXFxcIiBjbGFzcz1cXFwibmF2LWxpbmtcXFwiIDp0bz1cXFwiY2hpbGQubGlua1xcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVxcXCJmYSBmYS1kb3QtY2lyY2xlXFxcIj48L2k+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGNoaWxkLm5hbWUgfX1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3JvdXRlci1saW5rPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XFxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxcbiAgICAgICAgICAgICAgICA8L3VsPlxcbiAgICAgICAgICAgIDwvbmF2PlxcbiAgICAgICAgICAgIDxiciAvPlxcbiAgICAgICAgICAgIDxiciAvPlxcbiAgICAgICAgPC9kaXY+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJsb2dpbi1mb290ZXItbWVudVxcXCI+PC9kaXY+XFxuICAgIDwvYXNpZGU+XFxuPC90ZW1wbGF0ZT5cXG5cXG48c2NyaXB0PlxcbmV4cG9ydCBkZWZhdWx0IHtcXG4gICAgZGF0YSgpIHtcXG4gICAgICAgIHJldHVybiB7XFxuICAgICAgICAgICAgbWVudTogW10sXFxuICAgICAgICAgICAgb3JnYW5pemF0aW9uVHlwZUxpc3Q6IFtdLFxcbiAgICAgICAgICAgIG9yZ2FuaXphdGlvblR5cGU6IDBcXG4gICAgICAgIH07XFxuICAgIH0sXFxuICAgIG1vdW50ZWQoKSB7XFxuICAgICAgICBpZih3aW5kb3cuQVQgPT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgIHRoaXMuVXNlckRhdGEgPSBudWxsO1xcbiAgICAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCd1c2VyRGF0YUlGJyk7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBpZih0aGlzLlVzZXJEYXRhICE9IG51bGwpIHtcXG4gICAgICAgICAgICBheGlvc1xcbiAgICAgICAgICAgICAgICAucG9zdChcXG4gICAgICAgICAgICAgICAgICAgIFxcXCIvYXBpL21lbnVcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAge30sXFxuICAgICAgICAgICAgICAgICAgICB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdXRob3JpemF0aW9uOiBBVCxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICApXFxuICAgICAgICAgICAgICAgIC50aGVuKChyZXNwKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1lbnUgPSByZXNwLmRhdGE7XFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfVxcbiAgICAgICAgdGhpcy5sb2FkT3JnYW5pemF0aW9uVHlwZSgpO1xcbiAgICB9LFxcbiAgICBtZXRob2RzOiB7XFxuICAgICAgICBsb2FkT3JnYW5pemF0aW9uVHlwZSgpIHtcXG4gICAgICAgICAgICBheGlvcy5nZXQoJHVybFBsYXRmb3JtICsgXFxcIi9hcGkvb3JnYW5pemF0aW9uc1R5cGVHcm91cGVkXFxcIiwge30sIHt9KS50aGVuKChyZXNwb25zZSkgPT4ge1xcbiAgICAgICAgICAgICAgICBsZXQgaXRlbXMgPSByZXNwb25zZS5kYXRhO1xcbiAgICAgICAgICAgICAgICBsZXQgX2FyciA9IFtdO1xcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpdGVtIG9mIGl0ZW1zKSB7XFxuICAgICAgICAgICAgICAgICAgICBfYXJyLnB1c2goaXRlbSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgdGhpcy5vcmdhbml6YXRpb25UeXBlTGlzdCA9IF9hcnI7XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9LFxcbiAgICAgICAgZ29Ub0hvbWUoaWQpIHtcXG4gICAgICAgICAgICBpZih0aGlzLiRyb3V0ZS5wYXRoICE9IFxcXCIvXFxcIikge1xcbiAgICAgICAgICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaCgnLycpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBzZXRUaW1lb3V0KF8gPT4ge1xcbiAgICAgICAgICAgICAgICB0aGlzLm9yZ2FuaXphdGlvblR5cGUgPSBpZDtcXG4gICAgICAgICAgICAgICAgdGhpcy4kcm9vdC4kZW1pdCgndXBkYXRlT3JnYW5pemF0aW9uVHlwZScsIGlkKTtcXG4gICAgICAgICAgICAgICAgalF1ZXJ5KCdodG1sLCBib2R5JykuYW5pbWF0ZSh7XFxuICAgICAgICAgICAgICAgICAgICBzY3JvbGxUb3A6IGpRdWVyeSgnLm9yZ2FuaXphdGlvbnMtdGl0bGUnKS5vZmZzZXQoKS50b3BcXG4gICAgICAgICAgICAgICAgfSwgNTAwKTtcXG4gICAgICAgICAgICB9LCAxMDAwKTtcXG4gICAgICAgIH0sXFxuICAgICAgICBnb1RvUGxhdGZvcm0oKSB7XFxuICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSB3aW5kb3cuJHVybFBsYXRmb3JtO1xcbiAgICAgICAgfVxcbiAgICB9LFxcbn07XFxuPC9zY3JpcHQ+XFxuPHN0eWxlPlxcbi5icmFuZC1saW5rIHtcXG4gICAgcGFkZGluZzogMnB4O1xcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxufVxcbi51c2VyLXBhbmVsIC5pbmZvIC5kLWJsb2NrIHtcXG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XFxuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxuICAgIG92ZXJmbG93OiBoaWRkZW47XFxufVxcbjwvc3R5bGU+XFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/css-loader/dist/cjs.js??clonedRuleSet-9.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-9.use[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/widgets/SidebarWidget.vue?vue&type=style&index=0&id=5c937b85&lang=css&\n");

/***/ }),

/***/ "./node_modules/css-loader/dist/runtime/api.js":
/*!*****************************************************!*\
  !*** ./node_modules/css-loader/dist/runtime/api.js ***!
  \*****************************************************/
/***/ ((module) => {

"use strict";
eval("\n\n/*\n  MIT License http://www.opensource.org/licenses/mit-license.php\n  Author Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\n// eslint-disable-next-line func-names\nmodule.exports = function (cssWithMappingToString) {\n  var list = []; // return the list of modules as css string\n\n  list.toString = function toString() {\n    return this.map(function (item) {\n      var content = cssWithMappingToString(item);\n\n      if (item[2]) {\n        return \"@media \".concat(item[2], \" {\").concat(content, \"}\");\n      }\n\n      return content;\n    }).join(\"\");\n  }; // import a list of modules into the list\n  // eslint-disable-next-line func-names\n\n\n  list.i = function (modules, mediaQuery, dedupe) {\n    if (typeof modules === \"string\") {\n      // eslint-disable-next-line no-param-reassign\n      modules = [[null, modules, \"\"]];\n    }\n\n    var alreadyImportedModules = {};\n\n    if (dedupe) {\n      for (var i = 0; i < this.length; i++) {\n        // eslint-disable-next-line prefer-destructuring\n        var id = this[i][0];\n\n        if (id != null) {\n          alreadyImportedModules[id] = true;\n        }\n      }\n    }\n\n    for (var _i = 0; _i < modules.length; _i++) {\n      var item = [].concat(modules[_i]);\n\n      if (dedupe && alreadyImportedModules[item[0]]) {\n        // eslint-disable-next-line no-continue\n        continue;\n      }\n\n      if (mediaQuery) {\n        if (!item[2]) {\n          item[2] = mediaQuery;\n        } else {\n          item[2] = \"\".concat(mediaQuery, \" and \").concat(item[2]);\n        }\n      }\n\n      list.push(item);\n    }\n  };\n\n  return list;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw0Q0FBNEMscUJBQXFCO0FBQ2pFOztBQUVBO0FBQ0EsS0FBSztBQUNMLEtBQUs7QUFDTDs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLHNCQUFzQixpQkFBaUI7QUFDdkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHFCQUFxQixxQkFBcUI7QUFDMUM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanM/YWU5ZSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuLypcbiAgTUlUIExpY2Vuc2UgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHBcbiAgQXV0aG9yIFRvYmlhcyBLb3BwZXJzIEBzb2tyYVxuKi9cbi8vIGNzcyBiYXNlIGNvZGUsIGluamVjdGVkIGJ5IHRoZSBjc3MtbG9hZGVyXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY3NzV2l0aE1hcHBpbmdUb1N0cmluZykge1xuICB2YXIgbGlzdCA9IFtdOyAvLyByZXR1cm4gdGhlIGxpc3Qgb2YgbW9kdWxlcyBhcyBjc3Mgc3RyaW5nXG5cbiAgbGlzdC50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgdmFyIGNvbnRlbnQgPSBjc3NXaXRoTWFwcGluZ1RvU3RyaW5nKGl0ZW0pO1xuXG4gICAgICBpZiAoaXRlbVsyXSkge1xuICAgICAgICByZXR1cm4gXCJAbWVkaWEgXCIuY29uY2F0KGl0ZW1bMl0sIFwiIHtcIikuY29uY2F0KGNvbnRlbnQsIFwifVwiKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgfSkuam9pbihcIlwiKTtcbiAgfTsgLy8gaW1wb3J0IGEgbGlzdCBvZiBtb2R1bGVzIGludG8gdGhlIGxpc3RcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcblxuXG4gIGxpc3QuaSA9IGZ1bmN0aW9uIChtb2R1bGVzLCBtZWRpYVF1ZXJ5LCBkZWR1cGUpIHtcbiAgICBpZiAodHlwZW9mIG1vZHVsZXMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgbW9kdWxlcyA9IFtbbnVsbCwgbW9kdWxlcywgXCJcIl1dO1xuICAgIH1cblxuICAgIHZhciBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzID0ge307XG5cbiAgICBpZiAoZGVkdXBlKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1kZXN0cnVjdHVyaW5nXG4gICAgICAgIHZhciBpZCA9IHRoaXNbaV1bMF07XG5cbiAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2lkXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgbW9kdWxlcy5sZW5ndGg7IF9pKyspIHtcbiAgICAgIHZhciBpdGVtID0gW10uY29uY2F0KG1vZHVsZXNbX2ldKTtcblxuICAgICAgaWYgKGRlZHVwZSAmJiBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2l0ZW1bMF1dKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250aW51ZVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG1lZGlhUXVlcnkpIHtcbiAgICAgICAgaWYgKCFpdGVtWzJdKSB7XG4gICAgICAgICAgaXRlbVsyXSA9IG1lZGlhUXVlcnk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXRlbVsyXSA9IFwiXCIuY29uY2F0KG1lZGlhUXVlcnksIFwiIGFuZCBcIikuY29uY2F0KGl0ZW1bMl0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxpc3QucHVzaChpdGVtKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIGxpc3Q7XG59OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/css-loader/dist/runtime/api.js\n");

/***/ }),

/***/ "./node_modules/css-loader/dist/runtime/cssWithMappingToString.js":
/*!************************************************************************!*\
  !*** ./node_modules/css-loader/dist/runtime/cssWithMappingToString.js ***!
  \************************************************************************/
/***/ ((module) => {

"use strict";
eval("\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr && (typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]); if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nmodule.exports = function cssWithMappingToString(item) {\n  var _item = _slicedToArray(item, 4),\n      content = _item[1],\n      cssMapping = _item[3];\n\n  if (!cssMapping) {\n    return content;\n  }\n\n  if (typeof btoa === \"function\") {\n    // eslint-disable-next-line no-undef\n    var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping))));\n    var data = \"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(base64);\n    var sourceMapping = \"/*# \".concat(data, \" */\");\n    var sourceURLs = cssMapping.sources.map(function (source) {\n      return \"/*# sourceURL=\".concat(cssMapping.sourceRoot || \"\").concat(source, \" */\");\n    });\n    return [content].concat(sourceURLs).concat([sourceMapping]).join(\"\\n\");\n  }\n\n  return [content].join(\"\\n\");\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvY3NzV2l0aE1hcHBpbmdUb1N0cmluZy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQ0FBa0M7O0FBRWxDLDhCQUE4Qjs7QUFFOUIsa0RBQWtELGdCQUFnQixnRUFBZ0Usd0RBQXdELDZEQUE2RCxzREFBc0Q7O0FBRTdTLHVDQUF1Qyx1REFBdUQsdUNBQXVDLFNBQVMsT0FBTyxvQkFBb0I7O0FBRXpLLHlDQUF5Qyw4RkFBOEYsd0JBQXdCLGVBQWUsZUFBZSxnQkFBZ0IsWUFBWSxNQUFNLHdCQUF3QiwrQkFBK0IsYUFBYSxxQkFBcUIsdUNBQXVDLGNBQWMsV0FBVyxZQUFZLFVBQVUsTUFBTSxtREFBbUQsVUFBVSxzQkFBc0I7O0FBRXZlLGdDQUFnQzs7QUFFaEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHVEQUF1RCxjQUFjO0FBQ3JFO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvY3NzV2l0aE1hcHBpbmdUb1N0cmluZy5qcz9mNjVlIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgeyB2YXIgX2kgPSBhcnIgJiYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgYXJyW1N5bWJvbC5pdGVyYXRvcl0gfHwgYXJyW1wiQEBpdGVyYXRvclwiXSk7IGlmIChfaSA9PSBudWxsKSByZXR1cm47IHZhciBfYXJyID0gW107IHZhciBfbiA9IHRydWU7IHZhciBfZCA9IGZhbHNlOyB2YXIgX3MsIF9lOyB0cnkgeyBmb3IgKF9pID0gX2kuY2FsbChhcnIpOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7IF9hcnIucHVzaChfcy52YWx1ZSk7IGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhazsgfSB9IGNhdGNoIChlcnIpIHsgX2QgPSB0cnVlOyBfZSA9IGVycjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSAhPSBudWxsKSBfaVtcInJldHVyblwiXSgpOyB9IGZpbmFsbHkgeyBpZiAoX2QpIHRocm93IF9lOyB9IH0gcmV0dXJuIF9hcnI7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyOyB9XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY3NzV2l0aE1hcHBpbmdUb1N0cmluZyhpdGVtKSB7XG4gIHZhciBfaXRlbSA9IF9zbGljZWRUb0FycmF5KGl0ZW0sIDQpLFxuICAgICAgY29udGVudCA9IF9pdGVtWzFdLFxuICAgICAgY3NzTWFwcGluZyA9IF9pdGVtWzNdO1xuXG4gIGlmICghY3NzTWFwcGluZykge1xuICAgIHJldHVybiBjb250ZW50O1xuICB9XG5cbiAgaWYgKHR5cGVvZiBidG9hID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgICB2YXIgYmFzZTY0ID0gYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoY3NzTWFwcGluZykpKSk7XG4gICAgdmFyIGRhdGEgPSBcInNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LFwiLmNvbmNhdChiYXNlNjQpO1xuICAgIHZhciBzb3VyY2VNYXBwaW5nID0gXCIvKiMgXCIuY29uY2F0KGRhdGEsIFwiICovXCIpO1xuICAgIHZhciBzb3VyY2VVUkxzID0gY3NzTWFwcGluZy5zb3VyY2VzLm1hcChmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgICByZXR1cm4gXCIvKiMgc291cmNlVVJMPVwiLmNvbmNhdChjc3NNYXBwaW5nLnNvdXJjZVJvb3QgfHwgXCJcIikuY29uY2F0KHNvdXJjZSwgXCIgKi9cIik7XG4gICAgfSk7XG4gICAgcmV0dXJuIFtjb250ZW50XS5jb25jYXQoc291cmNlVVJMcykuY29uY2F0KFtzb3VyY2VNYXBwaW5nXSkuam9pbihcIlxcblwiKTtcbiAgfVxuXG4gIHJldHVybiBbY29udGVudF0uam9pbihcIlxcblwiKTtcbn07Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/css-loader/dist/runtime/cssWithMappingToString.js\n");

/***/ }),

/***/ "./node_modules/css-loader/dist/runtime/getUrl.js":
/*!********************************************************!*\
  !*** ./node_modules/css-loader/dist/runtime/getUrl.js ***!
  \********************************************************/
/***/ ((module) => {

"use strict";
eval("\n\nmodule.exports = function (url, options) {\n  if (!options) {\n    // eslint-disable-next-line no-param-reassign\n    options = {};\n  } // eslint-disable-next-line no-underscore-dangle, no-param-reassign\n\n\n  url = url && url.__esModule ? url.default : url;\n\n  if (typeof url !== \"string\") {\n    return url;\n  } // If url is already wrapped in quotes, remove them\n\n\n  if (/^['\"].*['\"]$/.test(url)) {\n    // eslint-disable-next-line no-param-reassign\n    url = url.slice(1, -1);\n  }\n\n  if (options.hash) {\n    // eslint-disable-next-line no-param-reassign\n    url += options.hash;\n  } // Should url be wrapped?\n  // See https://drafts.csswg.org/css-values-3/#urls\n\n\n  if (/[\"'() \\t\\n]/.test(url) || options.needQuotes) {\n    return \"\\\"\".concat(url.replace(/\"/g, '\\\\\"').replace(/\\n/g, \"\\\\n\"), \"\\\"\");\n  }\n\n  return url;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvZ2V0VXJsLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7O0FBR0o7O0FBRUE7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvZ2V0VXJsLmpzPzU0YzAiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHVybCwgb3B0aW9ucykge1xuICBpZiAoIW9wdGlvbnMpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICBvcHRpb25zID0ge307XG4gIH0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVyc2NvcmUtZGFuZ2xlLCBuby1wYXJhbS1yZWFzc2lnblxuXG5cbiAgdXJsID0gdXJsICYmIHVybC5fX2VzTW9kdWxlID8gdXJsLmRlZmF1bHQgOiB1cmw7XG5cbiAgaWYgKHR5cGVvZiB1cmwgIT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4gdXJsO1xuICB9IC8vIElmIHVybCBpcyBhbHJlYWR5IHdyYXBwZWQgaW4gcXVvdGVzLCByZW1vdmUgdGhlbVxuXG5cbiAgaWYgKC9eWydcIl0uKlsnXCJdJC8udGVzdCh1cmwpKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgdXJsID0gdXJsLnNsaWNlKDEsIC0xKTtcbiAgfVxuXG4gIGlmIChvcHRpb25zLmhhc2gpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICB1cmwgKz0gb3B0aW9ucy5oYXNoO1xuICB9IC8vIFNob3VsZCB1cmwgYmUgd3JhcHBlZD9cbiAgLy8gU2VlIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtdmFsdWVzLTMvI3VybHNcblxuXG4gIGlmICgvW1wiJygpIFxcdFxcbl0vLnRlc3QodXJsKSB8fCBvcHRpb25zLm5lZWRRdW90ZXMpIHtcbiAgICByZXR1cm4gXCJcXFwiXCIuY29uY2F0KHVybC5yZXBsYWNlKC9cIi9nLCAnXFxcXFwiJykucmVwbGFjZSgvXFxuL2csIFwiXFxcXG5cIiksIFwiXFxcIlwiKTtcbiAgfVxuXG4gIHJldHVybiB1cmw7XG59OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/css-loader/dist/runtime/getUrl.js\n");

/***/ }),

/***/ "./node_modules/dayjs/dayjs.min.js":
/*!*****************************************!*\
  !*** ./node_modules/dayjs/dayjs.min.js ***!
  \*****************************************/
/***/ (function(module) {

eval("!function(t,n){ true?module.exports=n():0}(this,function(){\"use strict\";var t=\"millisecond\",n=\"second\",e=\"minute\",r=\"hour\",i=\"day\",s=\"week\",u=\"month\",o=\"quarter\",a=\"year\",h=/^(\\d{4})-?(\\d{1,2})-?(\\d{0,2})[^0-9]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?.?(\\d{1,3})?$/,f=/\\[([^\\]]+)]|Y{2,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,c=function(t,n,e){var r=String(t);return!r||r.length>=n?t:\"\"+Array(n+1-r.length).join(e)+t},d={s:c,z:function(t){var n=-t.utcOffset(),e=Math.abs(n),r=Math.floor(e/60),i=e%60;return(n<=0?\"+\":\"-\")+c(r,2,\"0\")+\":\"+c(i,2,\"0\")},m:function(t,n){var e=12*(n.year()-t.year())+(n.month()-t.month()),r=t.clone().add(e,u),i=n-r<0,s=t.clone().add(e+(i?-1:1),u);return Number(-(e+(n-r)/(i?r-s:s-r))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(h){return{M:u,y:a,w:s,d:i,D:\"date\",h:r,m:e,s:n,ms:t,Q:o}[h]||String(h||\"\").toLowerCase().replace(/s$/,\"\")},u:function(t){return void 0===t}},$={name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\")},l=\"en\",m={};m[l]=$;var y=function(t){return t instanceof v},M=function(t,n,e){var r;if(!t)return l;if(\"string\"==typeof t)m[t]&&(r=t),n&&(m[t]=n,r=t);else{var i=t.name;m[i]=t,r=i}return!e&&r&&(l=r),r||!e&&l},g=function(t,n,e){if(y(t))return t.clone();var r=n?\"string\"==typeof n?{format:n,pl:e}:n:{};return r.date=t,new v(r)},D=d;D.l=M,D.i=y,D.w=function(t,n){return g(t,{locale:n.$L,utc:n.$u,$offset:n.$offset})};var v=function(){function c(t){this.$L=this.$L||M(t.locale,null,!0),this.parse(t)}var d=c.prototype;return d.parse=function(t){this.$d=function(t){var n=t.date,e=t.utc;if(null===n)return new Date(NaN);if(D.u(n))return new Date;if(n instanceof Date)return new Date(n);if(\"string\"==typeof n&&!/Z$/i.test(n)){var r=n.match(h);if(r)return e?new Date(Date.UTC(r[1],r[2]-1,r[3]||1,r[4]||0,r[5]||0,r[6]||0,r[7]||0)):new Date(r[1],r[2]-1,r[3]||1,r[4]||0,r[5]||0,r[6]||0,r[7]||0)}return new Date(n)}(t),this.init()},d.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},d.$utils=function(){return D},d.isValid=function(){return!(\"Invalid Date\"===this.$d.toString())},d.isSame=function(t,n){var e=g(t);return this.startOf(n)<=e&&e<=this.endOf(n)},d.isAfter=function(t,n){return g(t)<this.startOf(n)},d.isBefore=function(t,n){return this.endOf(n)<g(t)},d.$g=function(t,n,e){return D.u(t)?this[n]:this.set(e,t)},d.year=function(t){return this.$g(t,\"$y\",a)},d.month=function(t){return this.$g(t,\"$M\",u)},d.day=function(t){return this.$g(t,\"$W\",i)},d.date=function(t){return this.$g(t,\"$D\",\"date\")},d.hour=function(t){return this.$g(t,\"$H\",r)},d.minute=function(t){return this.$g(t,\"$m\",e)},d.second=function(t){return this.$g(t,\"$s\",n)},d.millisecond=function(n){return this.$g(n,\"$ms\",t)},d.unix=function(){return Math.floor(this.valueOf()/1e3)},d.valueOf=function(){return this.$d.getTime()},d.startOf=function(t,o){var h=this,f=!!D.u(o)||o,c=D.p(t),d=function(t,n){var e=D.w(h.$u?Date.UTC(h.$y,n,t):new Date(h.$y,n,t),h);return f?e:e.endOf(i)},$=function(t,n){return D.w(h.toDate()[t].apply(h.toDate(),(f?[0,0,0,0]:[23,59,59,999]).slice(n)),h)},l=this.$W,m=this.$M,y=this.$D,M=\"set\"+(this.$u?\"UTC\":\"\");switch(c){case a:return f?d(1,0):d(31,11);case u:return f?d(1,m):d(0,m+1);case s:var g=this.$locale().weekStart||0,v=(l<g?l+7:l)-g;return d(f?y-v:y+(6-v),m);case i:case\"date\":return $(M+\"Hours\",0);case r:return $(M+\"Minutes\",1);case e:return $(M+\"Seconds\",2);case n:return $(M+\"Milliseconds\",3);default:return this.clone()}},d.endOf=function(t){return this.startOf(t,!1)},d.$set=function(s,o){var h,f=D.p(s),c=\"set\"+(this.$u?\"UTC\":\"\"),d=(h={},h[i]=c+\"Date\",h.date=c+\"Date\",h[u]=c+\"Month\",h[a]=c+\"FullYear\",h[r]=c+\"Hours\",h[e]=c+\"Minutes\",h[n]=c+\"Seconds\",h[t]=c+\"Milliseconds\",h)[f],$=f===i?this.$D+(o-this.$W):o;if(f===u||f===a){var l=this.clone().set(\"date\",1);l.$d[d]($),l.init(),this.$d=l.set(\"date\",Math.min(this.$D,l.daysInMonth())).toDate()}else d&&this.$d[d]($);return this.init(),this},d.set=function(t,n){return this.clone().$set(t,n)},d.get=function(t){return this[D.p(t)]()},d.add=function(t,o){var h,f=this;t=Number(t);var c=D.p(o),d=function(n){var e=g(f);return D.w(e.date(e.date()+Math.round(n*t)),f)};if(c===u)return this.set(u,this.$M+t);if(c===a)return this.set(a,this.$y+t);if(c===i)return d(1);if(c===s)return d(7);var $=(h={},h[e]=6e4,h[r]=36e5,h[n]=1e3,h)[c]||1,l=this.$d.getTime()+t*$;return D.w(l,this)},d.subtract=function(t,n){return this.add(-1*t,n)},d.format=function(t){var n=this;if(!this.isValid())return\"Invalid Date\";var e=t||\"YYYY-MM-DDTHH:mm:ssZ\",r=D.z(this),i=this.$locale(),s=this.$H,u=this.$m,o=this.$M,a=i.weekdays,h=i.months,c=function(t,r,i,s){return t&&(t[r]||t(n,e))||i[r].substr(0,s)},d=function(t){return D.s(s%12||12,t,\"0\")},$=i.meridiem||function(t,n,e){var r=t<12?\"AM\":\"PM\";return e?r.toLowerCase():r},l={YY:String(this.$y).slice(-2),YYYY:this.$y,M:o+1,MM:D.s(o+1,2,\"0\"),MMM:c(i.monthsShort,o,h,3),MMMM:h[o]||h(this,e),D:this.$D,DD:D.s(this.$D,2,\"0\"),d:String(this.$W),dd:c(i.weekdaysMin,this.$W,a,2),ddd:c(i.weekdaysShort,this.$W,a,3),dddd:a[this.$W],H:String(s),HH:D.s(s,2,\"0\"),h:d(1),hh:d(2),a:$(s,u,!0),A:$(s,u,!1),m:String(u),mm:D.s(u,2,\"0\"),s:String(this.$s),ss:D.s(this.$s,2,\"0\"),SSS:D.s(this.$ms,3,\"0\"),Z:r};return e.replace(f,function(t,n){return n||l[t]||r.replace(\":\",\"\")})},d.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},d.diff=function(t,h,f){var c,d=D.p(h),$=g(t),l=6e4*($.utcOffset()-this.utcOffset()),m=this-$,y=D.m(this,$);return y=(c={},c[a]=y/12,c[u]=y,c[o]=y/3,c[s]=(m-l)/6048e5,c[i]=(m-l)/864e5,c[r]=m/36e5,c[e]=m/6e4,c[n]=m/1e3,c)[d]||m,f?y:D.a(y)},d.daysInMonth=function(){return this.endOf(u).$D},d.$locale=function(){return m[this.$L]},d.locale=function(t,n){if(!t)return this.$L;var e=this.clone(),r=M(t,n,!0);return r&&(e.$L=r),e},d.clone=function(){return D.w(this.$d,this)},d.toDate=function(){return new Date(this.valueOf())},d.toJSON=function(){return this.isValid()?this.toISOString():null},d.toISOString=function(){return this.$d.toISOString()},d.toString=function(){return this.$d.toUTCString()},c}();return g.prototype=v.prototype,g.extend=function(t,n){return t(n,v,g),g},g.locale=M,g.isDayjs=y,g.unix=function(t){return g(1e3*t)},g.en=m[l],g.Ls=m,g});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZGF5anMvZGF5anMubWluLmpzIiwibWFwcGluZ3MiOiJBQUFBLGVBQWUsS0FBb0Qsb0JBQW9CLENBQTJELENBQUMsaUJBQWlCLGFBQWEsMkdBQTJHLEVBQUUsT0FBTyxJQUFJLE9BQU8sSUFBSSxZQUFZLElBQUksUUFBUSxJQUFJLFFBQVEsSUFBSSxRQUFRLElBQUksc0JBQXNCLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxPQUFPLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSx5QkFBeUIsZ0JBQWdCLHlEQUF5RCxJQUFJLGtCQUFrQiw2REFBNkQsK0NBQStDLGlCQUFpQiw4R0FBOEcseUNBQXlDLGVBQWUseUNBQXlDLGVBQWUsT0FBTyw4Q0FBOEMsa0RBQWtELGVBQWUsbUJBQW1CLElBQUksbU1BQW1NLGFBQWEsT0FBTyxrQkFBa0Isc0JBQXNCLG1CQUFtQixNQUFNLGVBQWUsa0RBQWtELEtBQUssYUFBYSxXQUFXLDRCQUE0QixtQkFBbUIseUJBQXlCLDRCQUE0QixjQUFjLE1BQU0seUJBQXlCLEtBQUssOEJBQThCLFlBQVksdUNBQXVDLEdBQUcsaUJBQWlCLGNBQWMsbURBQW1ELGtCQUFrQiwyQkFBMkIsb0JBQW9CLHFCQUFxQixpQ0FBaUMsMEJBQTBCLHdDQUF3Qyx1Q0FBdUMsaUJBQWlCLG9KQUFvSixtQkFBbUIsZ0JBQWdCLG1CQUFtQixjQUFjLG9MQUFvTCxxQkFBcUIsU0FBUyxzQkFBc0IsNkNBQTZDLHdCQUF3QixXQUFXLDRDQUE0Qyx5QkFBeUIsNEJBQTRCLDBCQUEwQiwwQkFBMEIsc0JBQXNCLG9DQUFvQyxvQkFBb0IseUJBQXlCLHFCQUFxQix5QkFBeUIsbUJBQW1CLHlCQUF5QixvQkFBb0IsOEJBQThCLG9CQUFvQix5QkFBeUIsc0JBQXNCLHlCQUF5QixzQkFBc0IseUJBQXlCLDJCQUEyQiwwQkFBMEIsbUJBQW1CLHNDQUFzQyxzQkFBc0IseUJBQXlCLHlCQUF5QixrREFBa0Qsd0RBQXdELHNCQUFzQixpQkFBaUIsb0ZBQW9GLDBEQUEwRCxVQUFVLGdDQUFnQyxnQ0FBZ0MseURBQXlELDBCQUEwQix3Q0FBd0MsK0JBQStCLCtCQUErQixvQ0FBb0MsNkJBQTZCLHFCQUFxQiwwQkFBMEIsc0JBQXNCLGlEQUFpRCwyS0FBMkssaUJBQWlCLGlDQUFpQyxxRkFBcUYsc0JBQXNCLHdCQUF3QixxQkFBcUIsOEJBQThCLG1CQUFtQixzQkFBc0IscUJBQXFCLGFBQWEsWUFBWSwyQkFBMkIsV0FBVyxnREFBZ0Qsc0NBQXNDLHNDQUFzQyxxQkFBcUIscUJBQXFCLFdBQVcsOERBQThELG1CQUFtQiwwQkFBMEIsd0JBQXdCLHNCQUFzQixXQUFXLHdDQUF3Qyx1SUFBdUksMkNBQTJDLGVBQWUsMkJBQTJCLCtCQUErQixxQkFBcUIsMkJBQTJCLElBQUksMlpBQTJaLGlDQUFpQyxrQ0FBa0MsRUFBRSx3QkFBd0Isc0RBQXNELHdCQUF3QixvRkFBb0YsY0FBYyxvSEFBb0gsMEJBQTBCLHdCQUF3QixzQkFBc0Isa0JBQWtCLHdCQUF3QixxQkFBcUIsK0JBQStCLHFCQUFxQixvQkFBb0IseUJBQXlCLHFCQUFxQixnQ0FBZ0MscUJBQXFCLDhDQUE4QywwQkFBMEIsNkJBQTZCLHVCQUF1Qiw2QkFBNkIsR0FBRyxHQUFHLHNEQUFzRCxrQkFBa0IsMkNBQTJDLGdCQUFnQixvQkFBb0IiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZGF5anMvZGF5anMubWluLmpzPzAxZjEiXSwic291cmNlc0NvbnRlbnQiOlsiIWZ1bmN0aW9uKHQsbil7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9bigpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUobik6dC5kYXlqcz1uKCl9KHRoaXMsZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjt2YXIgdD1cIm1pbGxpc2Vjb25kXCIsbj1cInNlY29uZFwiLGU9XCJtaW51dGVcIixyPVwiaG91clwiLGk9XCJkYXlcIixzPVwid2Vla1wiLHU9XCJtb250aFwiLG89XCJxdWFydGVyXCIsYT1cInllYXJcIixoPS9eKFxcZHs0fSktPyhcXGR7MSwyfSktPyhcXGR7MCwyfSlbXjAtOV0qKFxcZHsxLDJ9KT86PyhcXGR7MSwyfSk/Oj8oXFxkezEsMn0pPy4/KFxcZHsxLDN9KT8kLyxmPS9cXFsoW15cXF1dKyldfFl7Miw0fXxNezEsNH18RHsxLDJ9fGR7MSw0fXxIezEsMn18aHsxLDJ9fGF8QXxtezEsMn18c3sxLDJ9fFp7MSwyfXxTU1MvZyxjPWZ1bmN0aW9uKHQsbixlKXt2YXIgcj1TdHJpbmcodCk7cmV0dXJuIXJ8fHIubGVuZ3RoPj1uP3Q6XCJcIitBcnJheShuKzEtci5sZW5ndGgpLmpvaW4oZSkrdH0sZD17czpjLHo6ZnVuY3Rpb24odCl7dmFyIG49LXQudXRjT2Zmc2V0KCksZT1NYXRoLmFicyhuKSxyPU1hdGguZmxvb3IoZS82MCksaT1lJTYwO3JldHVybihuPD0wP1wiK1wiOlwiLVwiKStjKHIsMixcIjBcIikrXCI6XCIrYyhpLDIsXCIwXCIpfSxtOmZ1bmN0aW9uKHQsbil7dmFyIGU9MTIqKG4ueWVhcigpLXQueWVhcigpKSsobi5tb250aCgpLXQubW9udGgoKSkscj10LmNsb25lKCkuYWRkKGUsdSksaT1uLXI8MCxzPXQuY2xvbmUoKS5hZGQoZSsoaT8tMToxKSx1KTtyZXR1cm4gTnVtYmVyKC0oZSsobi1yKS8oaT9yLXM6cy1yKSl8fDApfSxhOmZ1bmN0aW9uKHQpe3JldHVybiB0PDA/TWF0aC5jZWlsKHQpfHwwOk1hdGguZmxvb3IodCl9LHA6ZnVuY3Rpb24oaCl7cmV0dXJue006dSx5OmEsdzpzLGQ6aSxEOlwiZGF0ZVwiLGg6cixtOmUsczpuLG1zOnQsUTpvfVtoXXx8U3RyaW5nKGh8fFwiXCIpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvcyQvLFwiXCIpfSx1OmZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10fX0sJD17bmFtZTpcImVuXCIsd2Vla2RheXM6XCJTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheVwiLnNwbGl0KFwiX1wiKSxtb250aHM6XCJKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyXCIuc3BsaXQoXCJfXCIpfSxsPVwiZW5cIixtPXt9O21bbF09JDt2YXIgeT1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIHZ9LE09ZnVuY3Rpb24odCxuLGUpe3ZhciByO2lmKCF0KXJldHVybiBsO2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0KW1bdF0mJihyPXQpLG4mJihtW3RdPW4scj10KTtlbHNle3ZhciBpPXQubmFtZTttW2ldPXQscj1pfXJldHVybiFlJiZyJiYobD1yKSxyfHwhZSYmbH0sZz1mdW5jdGlvbih0LG4sZSl7aWYoeSh0KSlyZXR1cm4gdC5jbG9uZSgpO3ZhciByPW4/XCJzdHJpbmdcIj09dHlwZW9mIG4/e2Zvcm1hdDpuLHBsOmV9Om46e307cmV0dXJuIHIuZGF0ZT10LG5ldyB2KHIpfSxEPWQ7RC5sPU0sRC5pPXksRC53PWZ1bmN0aW9uKHQsbil7cmV0dXJuIGcodCx7bG9jYWxlOm4uJEwsdXRjOm4uJHUsJG9mZnNldDpuLiRvZmZzZXR9KX07dmFyIHY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBjKHQpe3RoaXMuJEw9dGhpcy4kTHx8TSh0LmxvY2FsZSxudWxsLCEwKSx0aGlzLnBhcnNlKHQpfXZhciBkPWMucHJvdG90eXBlO3JldHVybiBkLnBhcnNlPWZ1bmN0aW9uKHQpe3RoaXMuJGQ9ZnVuY3Rpb24odCl7dmFyIG49dC5kYXRlLGU9dC51dGM7aWYobnVsbD09PW4pcmV0dXJuIG5ldyBEYXRlKE5hTik7aWYoRC51KG4pKXJldHVybiBuZXcgRGF0ZTtpZihuIGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4gbmV3IERhdGUobik7aWYoXCJzdHJpbmdcIj09dHlwZW9mIG4mJiEvWiQvaS50ZXN0KG4pKXt2YXIgcj1uLm1hdGNoKGgpO2lmKHIpcmV0dXJuIGU/bmV3IERhdGUoRGF0ZS5VVEMoclsxXSxyWzJdLTEsclszXXx8MSxyWzRdfHwwLHJbNV18fDAscls2XXx8MCxyWzddfHwwKSk6bmV3IERhdGUoclsxXSxyWzJdLTEsclszXXx8MSxyWzRdfHwwLHJbNV18fDAscls2XXx8MCxyWzddfHwwKX1yZXR1cm4gbmV3IERhdGUobil9KHQpLHRoaXMuaW5pdCgpfSxkLmluaXQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLiRkO3RoaXMuJHk9dC5nZXRGdWxsWWVhcigpLHRoaXMuJE09dC5nZXRNb250aCgpLHRoaXMuJEQ9dC5nZXREYXRlKCksdGhpcy4kVz10LmdldERheSgpLHRoaXMuJEg9dC5nZXRIb3VycygpLHRoaXMuJG09dC5nZXRNaW51dGVzKCksdGhpcy4kcz10LmdldFNlY29uZHMoKSx0aGlzLiRtcz10LmdldE1pbGxpc2Vjb25kcygpfSxkLiR1dGlscz1mdW5jdGlvbigpe3JldHVybiBEfSxkLmlzVmFsaWQ9ZnVuY3Rpb24oKXtyZXR1cm4hKFwiSW52YWxpZCBEYXRlXCI9PT10aGlzLiRkLnRvU3RyaW5nKCkpfSxkLmlzU2FtZT1mdW5jdGlvbih0LG4pe3ZhciBlPWcodCk7cmV0dXJuIHRoaXMuc3RhcnRPZihuKTw9ZSYmZTw9dGhpcy5lbmRPZihuKX0sZC5pc0FmdGVyPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGcodCk8dGhpcy5zdGFydE9mKG4pfSxkLmlzQmVmb3JlPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHRoaXMuZW5kT2Yobik8Zyh0KX0sZC4kZz1mdW5jdGlvbih0LG4sZSl7cmV0dXJuIEQudSh0KT90aGlzW25dOnRoaXMuc2V0KGUsdCl9LGQueWVhcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy4kZyh0LFwiJHlcIixhKX0sZC5tb250aD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy4kZyh0LFwiJE1cIix1KX0sZC5kYXk9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuJGcodCxcIiRXXCIsaSl9LGQuZGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy4kZyh0LFwiJERcIixcImRhdGVcIil9LGQuaG91cj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy4kZyh0LFwiJEhcIixyKX0sZC5taW51dGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuJGcodCxcIiRtXCIsZSl9LGQuc2Vjb25kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLiRnKHQsXCIkc1wiLG4pfSxkLm1pbGxpc2Vjb25kPWZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLiRnKG4sXCIkbXNcIix0KX0sZC51bml4PWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguZmxvb3IodGhpcy52YWx1ZU9mKCkvMWUzKX0sZC52YWx1ZU9mPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGQuZ2V0VGltZSgpfSxkLnN0YXJ0T2Y9ZnVuY3Rpb24odCxvKXt2YXIgaD10aGlzLGY9ISFELnUobyl8fG8sYz1ELnAodCksZD1mdW5jdGlvbih0LG4pe3ZhciBlPUQudyhoLiR1P0RhdGUuVVRDKGguJHksbix0KTpuZXcgRGF0ZShoLiR5LG4sdCksaCk7cmV0dXJuIGY/ZTplLmVuZE9mKGkpfSwkPWZ1bmN0aW9uKHQsbil7cmV0dXJuIEQudyhoLnRvRGF0ZSgpW3RdLmFwcGx5KGgudG9EYXRlKCksKGY/WzAsMCwwLDBdOlsyMyw1OSw1OSw5OTldKS5zbGljZShuKSksaCl9LGw9dGhpcy4kVyxtPXRoaXMuJE0seT10aGlzLiRELE09XCJzZXRcIisodGhpcy4kdT9cIlVUQ1wiOlwiXCIpO3N3aXRjaChjKXtjYXNlIGE6cmV0dXJuIGY/ZCgxLDApOmQoMzEsMTEpO2Nhc2UgdTpyZXR1cm4gZj9kKDEsbSk6ZCgwLG0rMSk7Y2FzZSBzOnZhciBnPXRoaXMuJGxvY2FsZSgpLndlZWtTdGFydHx8MCx2PShsPGc/bCs3OmwpLWc7cmV0dXJuIGQoZj95LXY6eSsoNi12KSxtKTtjYXNlIGk6Y2FzZVwiZGF0ZVwiOnJldHVybiAkKE0rXCJIb3Vyc1wiLDApO2Nhc2UgcjpyZXR1cm4gJChNK1wiTWludXRlc1wiLDEpO2Nhc2UgZTpyZXR1cm4gJChNK1wiU2Vjb25kc1wiLDIpO2Nhc2UgbjpyZXR1cm4gJChNK1wiTWlsbGlzZWNvbmRzXCIsMyk7ZGVmYXVsdDpyZXR1cm4gdGhpcy5jbG9uZSgpfX0sZC5lbmRPZj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zdGFydE9mKHQsITEpfSxkLiRzZXQ9ZnVuY3Rpb24ocyxvKXt2YXIgaCxmPUQucChzKSxjPVwic2V0XCIrKHRoaXMuJHU/XCJVVENcIjpcIlwiKSxkPShoPXt9LGhbaV09YytcIkRhdGVcIixoLmRhdGU9YytcIkRhdGVcIixoW3VdPWMrXCJNb250aFwiLGhbYV09YytcIkZ1bGxZZWFyXCIsaFtyXT1jK1wiSG91cnNcIixoW2VdPWMrXCJNaW51dGVzXCIsaFtuXT1jK1wiU2Vjb25kc1wiLGhbdF09YytcIk1pbGxpc2Vjb25kc1wiLGgpW2ZdLCQ9Zj09PWk/dGhpcy4kRCsoby10aGlzLiRXKTpvO2lmKGY9PT11fHxmPT09YSl7dmFyIGw9dGhpcy5jbG9uZSgpLnNldChcImRhdGVcIiwxKTtsLiRkW2RdKCQpLGwuaW5pdCgpLHRoaXMuJGQ9bC5zZXQoXCJkYXRlXCIsTWF0aC5taW4odGhpcy4kRCxsLmRheXNJbk1vbnRoKCkpKS50b0RhdGUoKX1lbHNlIGQmJnRoaXMuJGRbZF0oJCk7cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXN9LGQuc2V0PWZ1bmN0aW9uKHQsbil7cmV0dXJuIHRoaXMuY2xvbmUoKS4kc2V0KHQsbil9LGQuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzW0QucCh0KV0oKX0sZC5hZGQ9ZnVuY3Rpb24odCxvKXt2YXIgaCxmPXRoaXM7dD1OdW1iZXIodCk7dmFyIGM9RC5wKG8pLGQ9ZnVuY3Rpb24obil7dmFyIGU9ZyhmKTtyZXR1cm4gRC53KGUuZGF0ZShlLmRhdGUoKStNYXRoLnJvdW5kKG4qdCkpLGYpfTtpZihjPT09dSlyZXR1cm4gdGhpcy5zZXQodSx0aGlzLiRNK3QpO2lmKGM9PT1hKXJldHVybiB0aGlzLnNldChhLHRoaXMuJHkrdCk7aWYoYz09PWkpcmV0dXJuIGQoMSk7aWYoYz09PXMpcmV0dXJuIGQoNyk7dmFyICQ9KGg9e30saFtlXT02ZTQsaFtyXT0zNmU1LGhbbl09MWUzLGgpW2NdfHwxLGw9dGhpcy4kZC5nZXRUaW1lKCkrdCokO3JldHVybiBELncobCx0aGlzKX0sZC5zdWJ0cmFjdD1mdW5jdGlvbih0LG4pe3JldHVybiB0aGlzLmFkZCgtMSp0LG4pfSxkLmZvcm1hdD1mdW5jdGlvbih0KXt2YXIgbj10aGlzO2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm5cIkludmFsaWQgRGF0ZVwiO3ZhciBlPXR8fFwiWVlZWS1NTS1ERFRISDptbTpzc1pcIixyPUQueih0aGlzKSxpPXRoaXMuJGxvY2FsZSgpLHM9dGhpcy4kSCx1PXRoaXMuJG0sbz10aGlzLiRNLGE9aS53ZWVrZGF5cyxoPWkubW9udGhzLGM9ZnVuY3Rpb24odCxyLGkscyl7cmV0dXJuIHQmJih0W3JdfHx0KG4sZSkpfHxpW3JdLnN1YnN0cigwLHMpfSxkPWZ1bmN0aW9uKHQpe3JldHVybiBELnMocyUxMnx8MTIsdCxcIjBcIil9LCQ9aS5tZXJpZGllbXx8ZnVuY3Rpb24odCxuLGUpe3ZhciByPXQ8MTI/XCJBTVwiOlwiUE1cIjtyZXR1cm4gZT9yLnRvTG93ZXJDYXNlKCk6cn0sbD17WVk6U3RyaW5nKHRoaXMuJHkpLnNsaWNlKC0yKSxZWVlZOnRoaXMuJHksTTpvKzEsTU06RC5zKG8rMSwyLFwiMFwiKSxNTU06YyhpLm1vbnRoc1Nob3J0LG8saCwzKSxNTU1NOmhbb118fGgodGhpcyxlKSxEOnRoaXMuJEQsREQ6RC5zKHRoaXMuJEQsMixcIjBcIiksZDpTdHJpbmcodGhpcy4kVyksZGQ6YyhpLndlZWtkYXlzTWluLHRoaXMuJFcsYSwyKSxkZGQ6YyhpLndlZWtkYXlzU2hvcnQsdGhpcy4kVyxhLDMpLGRkZGQ6YVt0aGlzLiRXXSxIOlN0cmluZyhzKSxISDpELnMocywyLFwiMFwiKSxoOmQoMSksaGg6ZCgyKSxhOiQocyx1LCEwKSxBOiQocyx1LCExKSxtOlN0cmluZyh1KSxtbTpELnModSwyLFwiMFwiKSxzOlN0cmluZyh0aGlzLiRzKSxzczpELnModGhpcy4kcywyLFwiMFwiKSxTU1M6RC5zKHRoaXMuJG1zLDMsXCIwXCIpLFo6cn07cmV0dXJuIGUucmVwbGFjZShmLGZ1bmN0aW9uKHQsbil7cmV0dXJuIG58fGxbdF18fHIucmVwbGFjZShcIjpcIixcIlwiKX0pfSxkLnV0Y09mZnNldD1mdW5jdGlvbigpe3JldHVybiAxNSotTWF0aC5yb3VuZCh0aGlzLiRkLmdldFRpbWV6b25lT2Zmc2V0KCkvMTUpfSxkLmRpZmY9ZnVuY3Rpb24odCxoLGYpe3ZhciBjLGQ9RC5wKGgpLCQ9Zyh0KSxsPTZlNCooJC51dGNPZmZzZXQoKS10aGlzLnV0Y09mZnNldCgpKSxtPXRoaXMtJCx5PUQubSh0aGlzLCQpO3JldHVybiB5PShjPXt9LGNbYV09eS8xMixjW3VdPXksY1tvXT15LzMsY1tzXT0obS1sKS82MDQ4ZTUsY1tpXT0obS1sKS84NjRlNSxjW3JdPW0vMzZlNSxjW2VdPW0vNmU0LGNbbl09bS8xZTMsYylbZF18fG0sZj95OkQuYSh5KX0sZC5kYXlzSW5Nb250aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVuZE9mKHUpLiREfSxkLiRsb2NhbGU9ZnVuY3Rpb24oKXtyZXR1cm4gbVt0aGlzLiRMXX0sZC5sb2NhbGU9ZnVuY3Rpb24odCxuKXtpZighdClyZXR1cm4gdGhpcy4kTDt2YXIgZT10aGlzLmNsb25lKCkscj1NKHQsbiwhMCk7cmV0dXJuIHImJihlLiRMPXIpLGV9LGQuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gRC53KHRoaXMuJGQsdGhpcyl9LGQudG9EYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBEYXRlKHRoaXMudmFsdWVPZigpKX0sZC50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1ZhbGlkKCk/dGhpcy50b0lTT1N0cmluZygpOm51bGx9LGQudG9JU09TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kZC50b0lTT1N0cmluZygpfSxkLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGQudG9VVENTdHJpbmcoKX0sY30oKTtyZXR1cm4gZy5wcm90b3R5cGU9di5wcm90b3R5cGUsZy5leHRlbmQ9ZnVuY3Rpb24odCxuKXtyZXR1cm4gdChuLHYsZyksZ30sZy5sb2NhbGU9TSxnLmlzRGF5anM9eSxnLnVuaXg9ZnVuY3Rpb24odCl7cmV0dXJuIGcoMWUzKnQpfSxnLmVuPW1bbF0sZy5Mcz1tLGd9KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/dayjs/dayjs.min.js\n");

/***/ }),

/***/ "./node_modules/element-ui/lib/button-group.js":
/*!*****************************************************!*\
  !*** ./node_modules/element-ui/lib/button-group.js ***!
  \*****************************************************/
/***/ ((module) => {

eval("module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __nested_webpack_require_187__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __nested_webpack_require_187__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__nested_webpack_require_187__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__nested_webpack_require_187__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__nested_webpack_require_187__.d = function(exports, name, getter) {\n/******/ \t\tif(!__nested_webpack_require_187__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__nested_webpack_require_187__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__nested_webpack_require_187__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __nested_webpack_require_187__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__nested_webpack_require_187__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __nested_webpack_require_187__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__nested_webpack_require_187__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__nested_webpack_require_187__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__nested_webpack_require_187__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__nested_webpack_require_187__.p = \"/dist/\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __nested_webpack_require_187__(__nested_webpack_require_187__.s = 97);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_3672__) {\n\n\"use strict\";\n/* harmony export (binding) */ __nested_webpack_require_3672__.d(__nested_webpack_exports__, \"a\", function() { return normalizeComponent; });\n/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nfunction normalizeComponent (\n  scriptExports,\n  render,\n  staticRenderFns,\n  functionalTemplate,\n  injectStyles,\n  scopeId,\n  moduleIdentifier, /* server only */\n  shadowMode /* vue-cli only */\n) {\n  // Vue.extend constructor export interop\n  var options = typeof scriptExports === 'function'\n    ? scriptExports.options\n    : scriptExports\n\n  // render functions\n  if (render) {\n    options.render = render\n    options.staticRenderFns = staticRenderFns\n    options._compiled = true\n  }\n\n  // functional template\n  if (functionalTemplate) {\n    options.functional = true\n  }\n\n  // scopedId\n  if (scopeId) {\n    options._scopeId = 'data-v-' + scopeId\n  }\n\n  var hook\n  if (moduleIdentifier) { // server build\n    hook = function (context) {\n      // 2.3 injection\n      context =\n        context || // cached call\n        (this.$vnode && this.$vnode.ssrContext) || // stateful\n        (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n      // 2.2 with runInNewContext: true\n      if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n        context = __VUE_SSR_CONTEXT__\n      }\n      // inject component styles\n      if (injectStyles) {\n        injectStyles.call(this, context)\n      }\n      // register component module identifier for async chunk inferrence\n      if (context && context._registeredComponents) {\n        context._registeredComponents.add(moduleIdentifier)\n      }\n    }\n    // used by ssr in case component is cached and beforeCreate\n    // never gets called\n    options._ssrRegister = hook\n  } else if (injectStyles) {\n    hook = shadowMode\n      ? function () { injectStyles.call(this, this.$root.$options.shadowRoot) }\n      : injectStyles\n  }\n\n  if (hook) {\n    if (options.functional) {\n      // for template-only hot-reload because in that case the render fn doesn't\n      // go through the normalizer\n      options._injectStyles = hook\n      // register for functioal component in vue file\n      var originalRender = options.render\n      options.render = function renderWithStyleInjection (h, context) {\n        hook.call(context)\n        return originalRender(h, context)\n      }\n    } else {\n      // inject component registration as beforeCreate hook\n      var existing = options.beforeCreate\n      options.beforeCreate = existing\n        ? [].concat(existing, hook)\n        : [hook]\n    }\n  }\n\n  return {\n    exports: scriptExports,\n    options: options\n  }\n}\n\n\n/***/ }),\n\n/***/ 97:\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_6575__) {\n\n\"use strict\";\n__nested_webpack_require_6575__.r(__nested_webpack_exports__);\n\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/button/src/button-group.vue?vue&type=template&id=3d8661d0&\nvar render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\"div\", { staticClass: \"el-button-group\" }, [_vm._t(\"default\")], 2)\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/button/src/button-group.vue?vue&type=template&id=3d8661d0&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/button/src/button-group.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n\n/* harmony default export */ var button_groupvue_type_script_lang_js_ = ({\n  name: 'ElButtonGroup'\n});\n// CONCATENATED MODULE: ./packages/button/src/button-group.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_button_groupvue_type_script_lang_js_ = (button_groupvue_type_script_lang_js_); \n// EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js\nvar componentNormalizer = __nested_webpack_require_6575__(0);\n\n// CONCATENATED MODULE: ./packages/button/src/button-group.vue\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(componentNormalizer[\"a\" /* default */])(\n  src_button_groupvue_type_script_lang_js_,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"packages/button/src/button-group.vue\"\n/* harmony default export */ var button_group = (component.exports);\n// CONCATENATED MODULE: ./packages/button-group/index.js\n\n\n/* istanbul ignore next */\nbutton_group.install = function (Vue) {\n  Vue.component(button_group.name, button_group);\n};\n\n/* harmony default export */ var packages_button_group = __nested_webpack_exports__[\"default\"] = (button_group);\n\n/***/ })\n\n/******/ });//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvYnV0dG9uLWdyb3VwLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsOEJBQThCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLDhCQUFtQjtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBFQUEwRSw4QkFBbUI7QUFDN0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLDhCQUFtQjtBQUM3QjtBQUNBO0FBQ0EsVUFBVSw4QkFBbUI7QUFDN0I7QUFDQTtBQUNBLFVBQVUsOEJBQW1CO0FBQzdCLGVBQWUsOEJBQW1CO0FBQ2xDLG1EQUFtRCwrQkFBK0I7QUFDbEY7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLDhCQUFtQjtBQUM3QjtBQUNBLGlFQUFpRSxpQkFBaUI7QUFDbEY7QUFDQSwwREFBMEQsYUFBYTtBQUN2RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsOEJBQW1CO0FBQzdCLGdDQUFnQyw4QkFBbUI7QUFDbkQ7QUFDQTtBQUNBO0FBQ0EsV0FBVyw4QkFBbUI7QUFDOUIsa0RBQWtELGdDQUFnQztBQUNsRiwwRUFBMEUsOEJBQW1CLDRCQUE0QixvQkFBb0I7QUFDN0k7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLDhCQUFtQjtBQUM3QjtBQUNBLG9DQUFvQyw0QkFBNEI7QUFDaEUsMENBQTBDO0FBQzFDLFdBQVcsOEJBQW1CO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSw4QkFBbUIsa0NBQWtDO0FBQy9EO0FBQ0E7QUFDQSxVQUFVLDhCQUFtQjtBQUM3QjtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsOEJBQW1CLENBQUMsOEJBQW1CO0FBQ3hELFVBQVU7QUFDVjtBQUNBOztBQUVBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLCtCQUFtQjs7QUFFaEU7QUFDQSwrQkFBK0IsK0JBQW1CLEdBQUcsMEJBQW1CLG9CQUFvQiw0QkFBNEI7QUFDeEg7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0Esc0JBQXNCO0FBQ3RCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQSxPQUFPOztBQUVQO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLCtCQUFtQjs7QUFFaEU7QUFDQSwrQkFBbUIsR0FBRywwQkFBbUI7O0FBRXpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsZ0NBQWdDO0FBQ3JEO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLCtCQUFtQjs7QUFFN0M7Ozs7OztBQU1BOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSSxLQUFLLEVBQUUsWUFBWTtBQUN2QjtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHlEQUF5RCwwQkFBbUI7O0FBRTVFLE9BQU87O0FBRVAsVUFBVSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9lbGVtZW50LXVpL2xpYi9idXR0b24tZ3JvdXAuanM/OWM0NCJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9XG4vKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwXG4vKioqKioqLyBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4vKioqKioqLyBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4vKioqKioqLyBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbi8qKioqKiovIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuLyoqKioqKi8gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbi8qKioqKiovIFx0XHRcdGk6IG1vZHVsZUlkLFxuLyoqKioqKi8gXHRcdFx0bDogZmFsc2UsXG4vKioqKioqLyBcdFx0XHRleHBvcnRzOiB7fVxuLyoqKioqKi8gXHRcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuLyoqKioqKi8gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4vKioqKioqLyBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuLyoqKioqKi8gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbi8qKioqKiovIFx0fVxuLyoqKioqKi9cbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuLyoqKioqKi8gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbi8qKioqKiovIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuLyoqKioqKi8gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3Rcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4vKioqKioqLyBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuLyoqKioqKi8gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3Rcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4vKioqKioqLyBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbi8qKioqKiovIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4vKioqKioqLyBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbi8qKioqKiovIFx0XHRyZXR1cm4gbnM7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbi8qKioqKiovIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbi8qKioqKiovIFx0XHRyZXR1cm4gZ2V0dGVyO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiL2Rpc3QvXCI7XG4vKioqKioqL1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vKioqKioqLyBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDk3KTtcbi8qKioqKiovIH0pXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gKHtcblxuLyoqKi8gMDpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiYVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIG5vcm1hbGl6ZUNvbXBvbmVudDsgfSk7XG4vKiBnbG9iYWxzIF9fVlVFX1NTUl9DT05URVhUX18gKi9cblxuLy8gSU1QT1JUQU5UOiBEbyBOT1QgdXNlIEVTMjAxNSBmZWF0dXJlcyBpbiB0aGlzIGZpbGUgKGV4Y2VwdCBmb3IgbW9kdWxlcykuXG4vLyBUaGlzIG1vZHVsZSBpcyBhIHJ1bnRpbWUgdXRpbGl0eSBmb3IgY2xlYW5lciBjb21wb25lbnQgbW9kdWxlIG91dHB1dCBhbmQgd2lsbFxuLy8gYmUgaW5jbHVkZWQgaW4gdGhlIGZpbmFsIHdlYnBhY2sgdXNlciBidW5kbGUuXG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUNvbXBvbmVudCAoXG4gIHNjcmlwdEV4cG9ydHMsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmdW5jdGlvbmFsVGVtcGxhdGUsXG4gIGluamVjdFN0eWxlcyxcbiAgc2NvcGVJZCxcbiAgbW9kdWxlSWRlbnRpZmllciwgLyogc2VydmVyIG9ubHkgKi9cbiAgc2hhZG93TW9kZSAvKiB2dWUtY2xpIG9ubHkgKi9cbikge1xuICAvLyBWdWUuZXh0ZW5kIGNvbnN0cnVjdG9yIGV4cG9ydCBpbnRlcm9wXG4gIHZhciBvcHRpb25zID0gdHlwZW9mIHNjcmlwdEV4cG9ydHMgPT09ICdmdW5jdGlvbidcbiAgICA/IHNjcmlwdEV4cG9ydHMub3B0aW9uc1xuICAgIDogc2NyaXB0RXhwb3J0c1xuXG4gIC8vIHJlbmRlciBmdW5jdGlvbnNcbiAgaWYgKHJlbmRlcikge1xuICAgIG9wdGlvbnMucmVuZGVyID0gcmVuZGVyXG4gICAgb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnMgPSBzdGF0aWNSZW5kZXJGbnNcbiAgICBvcHRpb25zLl9jb21waWxlZCA9IHRydWVcbiAgfVxuXG4gIC8vIGZ1bmN0aW9uYWwgdGVtcGxhdGVcbiAgaWYgKGZ1bmN0aW9uYWxUZW1wbGF0ZSkge1xuICAgIG9wdGlvbnMuZnVuY3Rpb25hbCA9IHRydWVcbiAgfVxuXG4gIC8vIHNjb3BlZElkXG4gIGlmIChzY29wZUlkKSB7XG4gICAgb3B0aW9ucy5fc2NvcGVJZCA9ICdkYXRhLXYtJyArIHNjb3BlSWRcbiAgfVxuXG4gIHZhciBob29rXG4gIGlmIChtb2R1bGVJZGVudGlmaWVyKSB7IC8vIHNlcnZlciBidWlsZFxuICAgIGhvb2sgPSBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgLy8gMi4zIGluamVjdGlvblxuICAgICAgY29udGV4dCA9XG4gICAgICAgIGNvbnRleHQgfHwgLy8gY2FjaGVkIGNhbGxcbiAgICAgICAgKHRoaXMuJHZub2RlICYmIHRoaXMuJHZub2RlLnNzckNvbnRleHQpIHx8IC8vIHN0YXRlZnVsXG4gICAgICAgICh0aGlzLnBhcmVudCAmJiB0aGlzLnBhcmVudC4kdm5vZGUgJiYgdGhpcy5wYXJlbnQuJHZub2RlLnNzckNvbnRleHQpIC8vIGZ1bmN0aW9uYWxcbiAgICAgIC8vIDIuMiB3aXRoIHJ1bkluTmV3Q29udGV4dDogdHJ1ZVxuICAgICAgaWYgKCFjb250ZXh0ICYmIHR5cGVvZiBfX1ZVRV9TU1JfQ09OVEVYVF9fICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBjb250ZXh0ID0gX19WVUVfU1NSX0NPTlRFWFRfX1xuICAgICAgfVxuICAgICAgLy8gaW5qZWN0IGNvbXBvbmVudCBzdHlsZXNcbiAgICAgIGlmIChpbmplY3RTdHlsZXMpIHtcbiAgICAgICAgaW5qZWN0U3R5bGVzLmNhbGwodGhpcywgY29udGV4dClcbiAgICAgIH1cbiAgICAgIC8vIHJlZ2lzdGVyIGNvbXBvbmVudCBtb2R1bGUgaWRlbnRpZmllciBmb3IgYXN5bmMgY2h1bmsgaW5mZXJyZW5jZVxuICAgICAgaWYgKGNvbnRleHQgJiYgY29udGV4dC5fcmVnaXN0ZXJlZENvbXBvbmVudHMpIHtcbiAgICAgICAgY29udGV4dC5fcmVnaXN0ZXJlZENvbXBvbmVudHMuYWRkKG1vZHVsZUlkZW50aWZpZXIpXG4gICAgICB9XG4gICAgfVxuICAgIC8vIHVzZWQgYnkgc3NyIGluIGNhc2UgY29tcG9uZW50IGlzIGNhY2hlZCBhbmQgYmVmb3JlQ3JlYXRlXG4gICAgLy8gbmV2ZXIgZ2V0cyBjYWxsZWRcbiAgICBvcHRpb25zLl9zc3JSZWdpc3RlciA9IGhvb2tcbiAgfSBlbHNlIGlmIChpbmplY3RTdHlsZXMpIHtcbiAgICBob29rID0gc2hhZG93TW9kZVxuICAgICAgPyBmdW5jdGlvbiAoKSB7IGluamVjdFN0eWxlcy5jYWxsKHRoaXMsIHRoaXMuJHJvb3QuJG9wdGlvbnMuc2hhZG93Um9vdCkgfVxuICAgICAgOiBpbmplY3RTdHlsZXNcbiAgfVxuXG4gIGlmIChob29rKSB7XG4gICAgaWYgKG9wdGlvbnMuZnVuY3Rpb25hbCkge1xuICAgICAgLy8gZm9yIHRlbXBsYXRlLW9ubHkgaG90LXJlbG9hZCBiZWNhdXNlIGluIHRoYXQgY2FzZSB0aGUgcmVuZGVyIGZuIGRvZXNuJ3RcbiAgICAgIC8vIGdvIHRocm91Z2ggdGhlIG5vcm1hbGl6ZXJcbiAgICAgIG9wdGlvbnMuX2luamVjdFN0eWxlcyA9IGhvb2tcbiAgICAgIC8vIHJlZ2lzdGVyIGZvciBmdW5jdGlvYWwgY29tcG9uZW50IGluIHZ1ZSBmaWxlXG4gICAgICB2YXIgb3JpZ2luYWxSZW5kZXIgPSBvcHRpb25zLnJlbmRlclxuICAgICAgb3B0aW9ucy5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXJXaXRoU3R5bGVJbmplY3Rpb24gKGgsIGNvbnRleHQpIHtcbiAgICAgICAgaG9vay5jYWxsKGNvbnRleHQpXG4gICAgICAgIHJldHVybiBvcmlnaW5hbFJlbmRlcihoLCBjb250ZXh0KVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpbmplY3QgY29tcG9uZW50IHJlZ2lzdHJhdGlvbiBhcyBiZWZvcmVDcmVhdGUgaG9va1xuICAgICAgdmFyIGV4aXN0aW5nID0gb3B0aW9ucy5iZWZvcmVDcmVhdGVcbiAgICAgIG9wdGlvbnMuYmVmb3JlQ3JlYXRlID0gZXhpc3RpbmdcbiAgICAgICAgPyBbXS5jb25jYXQoZXhpc3RpbmcsIGhvb2spXG4gICAgICAgIDogW2hvb2tdXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBleHBvcnRzOiBzY3JpcHRFeHBvcnRzLFxuICAgIG9wdGlvbnM6IG9wdGlvbnNcbiAgfVxufVxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA5Nzpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvYnV0dG9uL3NyYy9idXR0b24tZ3JvdXAudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTNkODY2MWQwJlxudmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLWJ1dHRvbi1ncm91cFwiIH0sIFtfdm0uX3QoXCJkZWZhdWx0XCIpXSwgMilcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9idXR0b24vc3JjL2J1dHRvbi1ncm91cC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9M2Q4NjYxZDAmXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2J1dHRvbi9zcmMvYnV0dG9uLWdyb3VwLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBidXR0b25fZ3JvdXB2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBuYW1lOiAnRWxCdXR0b25Hcm91cCdcbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9idXR0b24vc3JjL2J1dHRvbi1ncm91cC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX2J1dHRvbl9ncm91cHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChidXR0b25fZ3JvdXB2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIEVYVEVSTkFMIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXG52YXIgY29tcG9uZW50Tm9ybWFsaXplciA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvYnV0dG9uL3NyYy9idXR0b24tZ3JvdXAudnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgY29tcG9uZW50ID0gT2JqZWN0KGNvbXBvbmVudE5vcm1hbGl6ZXJbXCJhXCIgLyogZGVmYXVsdCAqL10pKFxuICBzcmNfYnV0dG9uX2dyb3VwdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgYXBpOyB9XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL2J1dHRvbi9zcmMvYnV0dG9uLWdyb3VwLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBidXR0b25fZ3JvdXAgPSAoY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9idXR0b24tZ3JvdXAvaW5kZXguanNcblxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuYnV0dG9uX2dyb3VwLmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG4gIFZ1ZS5jb21wb25lbnQoYnV0dG9uX2dyb3VwLm5hbWUsIGJ1dHRvbl9ncm91cCk7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc19idXR0b25fZ3JvdXAgPSBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChidXR0b25fZ3JvdXApO1xuXG4vKioqLyB9KVxuXG4vKioqKioqLyB9KTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/button-group.js\n");

/***/ }),

/***/ "./node_modules/element-ui/lib/button.js":
/*!***********************************************!*\
  !*** ./node_modules/element-ui/lib/button.js ***!
  \***********************************************/
/***/ ((module) => {

eval("module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __nested_webpack_require_187__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __nested_webpack_require_187__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__nested_webpack_require_187__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__nested_webpack_require_187__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__nested_webpack_require_187__.d = function(exports, name, getter) {\n/******/ \t\tif(!__nested_webpack_require_187__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__nested_webpack_require_187__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__nested_webpack_require_187__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __nested_webpack_require_187__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__nested_webpack_require_187__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __nested_webpack_require_187__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__nested_webpack_require_187__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__nested_webpack_require_187__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__nested_webpack_require_187__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__nested_webpack_require_187__.p = \"/dist/\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __nested_webpack_require_187__(__nested_webpack_require_187__.s = 96);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_3672__) {\n\n\"use strict\";\n/* harmony export (binding) */ __nested_webpack_require_3672__.d(__nested_webpack_exports__, \"a\", function() { return normalizeComponent; });\n/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nfunction normalizeComponent (\n  scriptExports,\n  render,\n  staticRenderFns,\n  functionalTemplate,\n  injectStyles,\n  scopeId,\n  moduleIdentifier, /* server only */\n  shadowMode /* vue-cli only */\n) {\n  // Vue.extend constructor export interop\n  var options = typeof scriptExports === 'function'\n    ? scriptExports.options\n    : scriptExports\n\n  // render functions\n  if (render) {\n    options.render = render\n    options.staticRenderFns = staticRenderFns\n    options._compiled = true\n  }\n\n  // functional template\n  if (functionalTemplate) {\n    options.functional = true\n  }\n\n  // scopedId\n  if (scopeId) {\n    options._scopeId = 'data-v-' + scopeId\n  }\n\n  var hook\n  if (moduleIdentifier) { // server build\n    hook = function (context) {\n      // 2.3 injection\n      context =\n        context || // cached call\n        (this.$vnode && this.$vnode.ssrContext) || // stateful\n        (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n      // 2.2 with runInNewContext: true\n      if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n        context = __VUE_SSR_CONTEXT__\n      }\n      // inject component styles\n      if (injectStyles) {\n        injectStyles.call(this, context)\n      }\n      // register component module identifier for async chunk inferrence\n      if (context && context._registeredComponents) {\n        context._registeredComponents.add(moduleIdentifier)\n      }\n    }\n    // used by ssr in case component is cached and beforeCreate\n    // never gets called\n    options._ssrRegister = hook\n  } else if (injectStyles) {\n    hook = shadowMode\n      ? function () { injectStyles.call(this, this.$root.$options.shadowRoot) }\n      : injectStyles\n  }\n\n  if (hook) {\n    if (options.functional) {\n      // for template-only hot-reload because in that case the render fn doesn't\n      // go through the normalizer\n      options._injectStyles = hook\n      // register for functioal component in vue file\n      var originalRender = options.render\n      options.render = function renderWithStyleInjection (h, context) {\n        hook.call(context)\n        return originalRender(h, context)\n      }\n    } else {\n      // inject component registration as beforeCreate hook\n      var existing = options.beforeCreate\n      options.beforeCreate = existing\n        ? [].concat(existing, hook)\n        : [hook]\n    }\n  }\n\n  return {\n    exports: scriptExports,\n    options: options\n  }\n}\n\n\n/***/ }),\n\n/***/ 96:\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_6575__) {\n\n\"use strict\";\n__nested_webpack_require_6575__.r(__nested_webpack_exports__);\n\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/button/src/button.vue?vue&type=template&id=ca859fb4&\nvar render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"button\",\n    {\n      staticClass: \"el-button\",\n      class: [\n        _vm.type ? \"el-button--\" + _vm.type : \"\",\n        _vm.buttonSize ? \"el-button--\" + _vm.buttonSize : \"\",\n        {\n          \"is-disabled\": _vm.buttonDisabled,\n          \"is-loading\": _vm.loading,\n          \"is-plain\": _vm.plain,\n          \"is-round\": _vm.round,\n          \"is-circle\": _vm.circle\n        }\n      ],\n      attrs: {\n        disabled: _vm.buttonDisabled || _vm.loading,\n        autofocus: _vm.autofocus,\n        type: _vm.nativeType\n      },\n      on: { click: _vm.handleClick }\n    },\n    [\n      _vm.loading ? _c(\"i\", { staticClass: \"el-icon-loading\" }) : _vm._e(),\n      _vm.icon && !_vm.loading ? _c(\"i\", { class: _vm.icon }) : _vm._e(),\n      _vm.$slots.default ? _c(\"span\", [_vm._t(\"default\")], 2) : _vm._e()\n    ]\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/button/src/button.vue?vue&type=template&id=ca859fb4&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/button/src/button.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ var buttonvue_type_script_lang_js_ = ({\n  name: 'ElButton',\n\n  inject: {\n    elForm: {\n      default: ''\n    },\n    elFormItem: {\n      default: ''\n    }\n  },\n\n  props: {\n    type: {\n      type: String,\n      default: 'default'\n    },\n    size: String,\n    icon: {\n      type: String,\n      default: ''\n    },\n    nativeType: {\n      type: String,\n      default: 'button'\n    },\n    loading: Boolean,\n    disabled: Boolean,\n    plain: Boolean,\n    autofocus: Boolean,\n    round: Boolean,\n    circle: Boolean\n  },\n\n  computed: {\n    _elFormItemSize: function _elFormItemSize() {\n      return (this.elFormItem || {}).elFormItemSize;\n    },\n    buttonSize: function buttonSize() {\n      return this.size || this._elFormItemSize || (this.$ELEMENT || {}).size;\n    },\n    buttonDisabled: function buttonDisabled() {\n      return this.$options.propsData.hasOwnProperty('disabled') ? this.disabled : (this.elForm || {}).disabled;\n    }\n  },\n\n  methods: {\n    handleClick: function handleClick(evt) {\n      this.$emit('click', evt);\n    }\n  }\n});\n// CONCATENATED MODULE: ./packages/button/src/button.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_buttonvue_type_script_lang_js_ = (buttonvue_type_script_lang_js_); \n// EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js\nvar componentNormalizer = __nested_webpack_require_6575__(0);\n\n// CONCATENATED MODULE: ./packages/button/src/button.vue\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(componentNormalizer[\"a\" /* default */])(\n  src_buttonvue_type_script_lang_js_,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"packages/button/src/button.vue\"\n/* harmony default export */ var src_button = (component.exports);\n// CONCATENATED MODULE: ./packages/button/index.js\n\n\n/* istanbul ignore next */\nsrc_button.install = function (Vue) {\n  Vue.component(src_button.name, src_button);\n};\n\n/* harmony default export */ var packages_button = __nested_webpack_exports__[\"default\"] = (src_button);\n\n/***/ })\n\n/******/ });//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvYnV0dG9uLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsOEJBQThCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLDhCQUFtQjtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBFQUEwRSw4QkFBbUI7QUFDN0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLDhCQUFtQjtBQUM3QjtBQUNBO0FBQ0EsVUFBVSw4QkFBbUI7QUFDN0I7QUFDQTtBQUNBLFVBQVUsOEJBQW1CO0FBQzdCLGVBQWUsOEJBQW1CO0FBQ2xDLG1EQUFtRCwrQkFBK0I7QUFDbEY7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLDhCQUFtQjtBQUM3QjtBQUNBLGlFQUFpRSxpQkFBaUI7QUFDbEY7QUFDQSwwREFBMEQsYUFBYTtBQUN2RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsOEJBQW1CO0FBQzdCLGdDQUFnQyw4QkFBbUI7QUFDbkQ7QUFDQTtBQUNBO0FBQ0EsV0FBVyw4QkFBbUI7QUFDOUIsa0RBQWtELGdDQUFnQztBQUNsRiwwRUFBMEUsOEJBQW1CLDRCQUE0QixvQkFBb0I7QUFDN0k7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLDhCQUFtQjtBQUM3QjtBQUNBLG9DQUFvQyw0QkFBNEI7QUFDaEUsMENBQTBDO0FBQzFDLFdBQVcsOEJBQW1CO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSw4QkFBbUIsa0NBQWtDO0FBQy9EO0FBQ0E7QUFDQSxVQUFVLDhCQUFtQjtBQUM3QjtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsOEJBQW1CLENBQUMsOEJBQW1CO0FBQ3hELFVBQVU7QUFDVjtBQUNBOztBQUVBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLCtCQUFtQjs7QUFFaEU7QUFDQSwrQkFBK0IsK0JBQW1CLEdBQUcsMEJBQW1CLG9CQUFvQiw0QkFBNEI7QUFDeEg7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0Esc0JBQXNCO0FBQ3RCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQSxPQUFPOztBQUVQO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLCtCQUFtQjs7QUFFaEU7QUFDQSwrQkFBbUIsR0FBRywwQkFBbUI7O0FBRXpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxZQUFZO0FBQ1osS0FBSztBQUNMO0FBQ0EsOEJBQThCLGdDQUFnQztBQUM5RCwyQ0FBMkMsaUJBQWlCO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsbUNBQW1DO0FBQ25DLEtBQUs7QUFDTDtBQUNBLHNFQUFzRTtBQUN0RSxLQUFLO0FBQ0w7QUFDQSxvR0FBb0c7QUFDcEc7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLCtCQUFtQjs7QUFFN0M7Ozs7OztBQU1BOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSSxLQUFLLEVBQUUsWUFBWTtBQUN2QjtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG1EQUFtRCwwQkFBbUI7O0FBRXRFLE9BQU87O0FBRVAsVUFBVSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9lbGVtZW50LXVpL2xpYi9idXR0b24uanM/ZGEzMyJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9XG4vKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwXG4vKioqKioqLyBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4vKioqKioqLyBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4vKioqKioqLyBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbi8qKioqKiovIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuLyoqKioqKi8gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbi8qKioqKiovIFx0XHRcdGk6IG1vZHVsZUlkLFxuLyoqKioqKi8gXHRcdFx0bDogZmFsc2UsXG4vKioqKioqLyBcdFx0XHRleHBvcnRzOiB7fVxuLyoqKioqKi8gXHRcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuLyoqKioqKi8gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4vKioqKioqLyBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuLyoqKioqKi8gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbi8qKioqKiovIFx0fVxuLyoqKioqKi9cbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuLyoqKioqKi8gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbi8qKioqKiovIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuLyoqKioqKi8gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3Rcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4vKioqKioqLyBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuLyoqKioqKi8gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3Rcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4vKioqKioqLyBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbi8qKioqKiovIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4vKioqKioqLyBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbi8qKioqKiovIFx0XHRyZXR1cm4gbnM7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbi8qKioqKiovIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbi8qKioqKiovIFx0XHRyZXR1cm4gZ2V0dGVyO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiL2Rpc3QvXCI7XG4vKioqKioqL1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vKioqKioqLyBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDk2KTtcbi8qKioqKiovIH0pXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gKHtcblxuLyoqKi8gMDpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiYVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIG5vcm1hbGl6ZUNvbXBvbmVudDsgfSk7XG4vKiBnbG9iYWxzIF9fVlVFX1NTUl9DT05URVhUX18gKi9cblxuLy8gSU1QT1JUQU5UOiBEbyBOT1QgdXNlIEVTMjAxNSBmZWF0dXJlcyBpbiB0aGlzIGZpbGUgKGV4Y2VwdCBmb3IgbW9kdWxlcykuXG4vLyBUaGlzIG1vZHVsZSBpcyBhIHJ1bnRpbWUgdXRpbGl0eSBmb3IgY2xlYW5lciBjb21wb25lbnQgbW9kdWxlIG91dHB1dCBhbmQgd2lsbFxuLy8gYmUgaW5jbHVkZWQgaW4gdGhlIGZpbmFsIHdlYnBhY2sgdXNlciBidW5kbGUuXG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUNvbXBvbmVudCAoXG4gIHNjcmlwdEV4cG9ydHMsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmdW5jdGlvbmFsVGVtcGxhdGUsXG4gIGluamVjdFN0eWxlcyxcbiAgc2NvcGVJZCxcbiAgbW9kdWxlSWRlbnRpZmllciwgLyogc2VydmVyIG9ubHkgKi9cbiAgc2hhZG93TW9kZSAvKiB2dWUtY2xpIG9ubHkgKi9cbikge1xuICAvLyBWdWUuZXh0ZW5kIGNvbnN0cnVjdG9yIGV4cG9ydCBpbnRlcm9wXG4gIHZhciBvcHRpb25zID0gdHlwZW9mIHNjcmlwdEV4cG9ydHMgPT09ICdmdW5jdGlvbidcbiAgICA/IHNjcmlwdEV4cG9ydHMub3B0aW9uc1xuICAgIDogc2NyaXB0RXhwb3J0c1xuXG4gIC8vIHJlbmRlciBmdW5jdGlvbnNcbiAgaWYgKHJlbmRlcikge1xuICAgIG9wdGlvbnMucmVuZGVyID0gcmVuZGVyXG4gICAgb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnMgPSBzdGF0aWNSZW5kZXJGbnNcbiAgICBvcHRpb25zLl9jb21waWxlZCA9IHRydWVcbiAgfVxuXG4gIC8vIGZ1bmN0aW9uYWwgdGVtcGxhdGVcbiAgaWYgKGZ1bmN0aW9uYWxUZW1wbGF0ZSkge1xuICAgIG9wdGlvbnMuZnVuY3Rpb25hbCA9IHRydWVcbiAgfVxuXG4gIC8vIHNjb3BlZElkXG4gIGlmIChzY29wZUlkKSB7XG4gICAgb3B0aW9ucy5fc2NvcGVJZCA9ICdkYXRhLXYtJyArIHNjb3BlSWRcbiAgfVxuXG4gIHZhciBob29rXG4gIGlmIChtb2R1bGVJZGVudGlmaWVyKSB7IC8vIHNlcnZlciBidWlsZFxuICAgIGhvb2sgPSBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgLy8gMi4zIGluamVjdGlvblxuICAgICAgY29udGV4dCA9XG4gICAgICAgIGNvbnRleHQgfHwgLy8gY2FjaGVkIGNhbGxcbiAgICAgICAgKHRoaXMuJHZub2RlICYmIHRoaXMuJHZub2RlLnNzckNvbnRleHQpIHx8IC8vIHN0YXRlZnVsXG4gICAgICAgICh0aGlzLnBhcmVudCAmJiB0aGlzLnBhcmVudC4kdm5vZGUgJiYgdGhpcy5wYXJlbnQuJHZub2RlLnNzckNvbnRleHQpIC8vIGZ1bmN0aW9uYWxcbiAgICAgIC8vIDIuMiB3aXRoIHJ1bkluTmV3Q29udGV4dDogdHJ1ZVxuICAgICAgaWYgKCFjb250ZXh0ICYmIHR5cGVvZiBfX1ZVRV9TU1JfQ09OVEVYVF9fICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBjb250ZXh0ID0gX19WVUVfU1NSX0NPTlRFWFRfX1xuICAgICAgfVxuICAgICAgLy8gaW5qZWN0IGNvbXBvbmVudCBzdHlsZXNcbiAgICAgIGlmIChpbmplY3RTdHlsZXMpIHtcbiAgICAgICAgaW5qZWN0U3R5bGVzLmNhbGwodGhpcywgY29udGV4dClcbiAgICAgIH1cbiAgICAgIC8vIHJlZ2lzdGVyIGNvbXBvbmVudCBtb2R1bGUgaWRlbnRpZmllciBmb3IgYXN5bmMgY2h1bmsgaW5mZXJyZW5jZVxuICAgICAgaWYgKGNvbnRleHQgJiYgY29udGV4dC5fcmVnaXN0ZXJlZENvbXBvbmVudHMpIHtcbiAgICAgICAgY29udGV4dC5fcmVnaXN0ZXJlZENvbXBvbmVudHMuYWRkKG1vZHVsZUlkZW50aWZpZXIpXG4gICAgICB9XG4gICAgfVxuICAgIC8vIHVzZWQgYnkgc3NyIGluIGNhc2UgY29tcG9uZW50IGlzIGNhY2hlZCBhbmQgYmVmb3JlQ3JlYXRlXG4gICAgLy8gbmV2ZXIgZ2V0cyBjYWxsZWRcbiAgICBvcHRpb25zLl9zc3JSZWdpc3RlciA9IGhvb2tcbiAgfSBlbHNlIGlmIChpbmplY3RTdHlsZXMpIHtcbiAgICBob29rID0gc2hhZG93TW9kZVxuICAgICAgPyBmdW5jdGlvbiAoKSB7IGluamVjdFN0eWxlcy5jYWxsKHRoaXMsIHRoaXMuJHJvb3QuJG9wdGlvbnMuc2hhZG93Um9vdCkgfVxuICAgICAgOiBpbmplY3RTdHlsZXNcbiAgfVxuXG4gIGlmIChob29rKSB7XG4gICAgaWYgKG9wdGlvbnMuZnVuY3Rpb25hbCkge1xuICAgICAgLy8gZm9yIHRlbXBsYXRlLW9ubHkgaG90LXJlbG9hZCBiZWNhdXNlIGluIHRoYXQgY2FzZSB0aGUgcmVuZGVyIGZuIGRvZXNuJ3RcbiAgICAgIC8vIGdvIHRocm91Z2ggdGhlIG5vcm1hbGl6ZXJcbiAgICAgIG9wdGlvbnMuX2luamVjdFN0eWxlcyA9IGhvb2tcbiAgICAgIC8vIHJlZ2lzdGVyIGZvciBmdW5jdGlvYWwgY29tcG9uZW50IGluIHZ1ZSBmaWxlXG4gICAgICB2YXIgb3JpZ2luYWxSZW5kZXIgPSBvcHRpb25zLnJlbmRlclxuICAgICAgb3B0aW9ucy5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXJXaXRoU3R5bGVJbmplY3Rpb24gKGgsIGNvbnRleHQpIHtcbiAgICAgICAgaG9vay5jYWxsKGNvbnRleHQpXG4gICAgICAgIHJldHVybiBvcmlnaW5hbFJlbmRlcihoLCBjb250ZXh0KVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpbmplY3QgY29tcG9uZW50IHJlZ2lzdHJhdGlvbiBhcyBiZWZvcmVDcmVhdGUgaG9va1xuICAgICAgdmFyIGV4aXN0aW5nID0gb3B0aW9ucy5iZWZvcmVDcmVhdGVcbiAgICAgIG9wdGlvbnMuYmVmb3JlQ3JlYXRlID0gZXhpc3RpbmdcbiAgICAgICAgPyBbXS5jb25jYXQoZXhpc3RpbmcsIGhvb2spXG4gICAgICAgIDogW2hvb2tdXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBleHBvcnRzOiBzY3JpcHRFeHBvcnRzLFxuICAgIG9wdGlvbnM6IG9wdGlvbnNcbiAgfVxufVxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA5Njpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvYnV0dG9uL3NyYy9idXR0b24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWNhODU5ZmI0JlxudmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImJ1dHRvblwiLFxuICAgIHtcbiAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWJ1dHRvblwiLFxuICAgICAgY2xhc3M6IFtcbiAgICAgICAgX3ZtLnR5cGUgPyBcImVsLWJ1dHRvbi0tXCIgKyBfdm0udHlwZSA6IFwiXCIsXG4gICAgICAgIF92bS5idXR0b25TaXplID8gXCJlbC1idXR0b24tLVwiICsgX3ZtLmJ1dHRvblNpemUgOiBcIlwiLFxuICAgICAgICB7XG4gICAgICAgICAgXCJpcy1kaXNhYmxlZFwiOiBfdm0uYnV0dG9uRGlzYWJsZWQsXG4gICAgICAgICAgXCJpcy1sb2FkaW5nXCI6IF92bS5sb2FkaW5nLFxuICAgICAgICAgIFwiaXMtcGxhaW5cIjogX3ZtLnBsYWluLFxuICAgICAgICAgIFwiaXMtcm91bmRcIjogX3ZtLnJvdW5kLFxuICAgICAgICAgIFwiaXMtY2lyY2xlXCI6IF92bS5jaXJjbGVcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIGF0dHJzOiB7XG4gICAgICAgIGRpc2FibGVkOiBfdm0uYnV0dG9uRGlzYWJsZWQgfHwgX3ZtLmxvYWRpbmcsXG4gICAgICAgIGF1dG9mb2N1czogX3ZtLmF1dG9mb2N1cyxcbiAgICAgICAgdHlwZTogX3ZtLm5hdGl2ZVR5cGVcbiAgICAgIH0sXG4gICAgICBvbjogeyBjbGljazogX3ZtLmhhbmRsZUNsaWNrIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIF92bS5sb2FkaW5nID8gX2MoXCJpXCIsIHsgc3RhdGljQ2xhc3M6IFwiZWwtaWNvbi1sb2FkaW5nXCIgfSkgOiBfdm0uX2UoKSxcbiAgICAgIF92bS5pY29uICYmICFfdm0ubG9hZGluZyA/IF9jKFwiaVwiLCB7IGNsYXNzOiBfdm0uaWNvbiB9KSA6IF92bS5fZSgpLFxuICAgICAgX3ZtLiRzbG90cy5kZWZhdWx0ID8gX2MoXCJzcGFuXCIsIFtfdm0uX3QoXCJkZWZhdWx0XCIpXSwgMikgOiBfdm0uX2UoKVxuICAgIF1cbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2J1dHRvbi9zcmMvYnV0dG9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1jYTg1OWZiNCZcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvYnV0dG9uL3NyYy9idXR0b24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBidXR0b252dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBuYW1lOiAnRWxCdXR0b24nLFxuXG4gIGluamVjdDoge1xuICAgIGVsRm9ybToge1xuICAgICAgZGVmYXVsdDogJydcbiAgICB9LFxuICAgIGVsRm9ybUl0ZW06IHtcbiAgICAgIGRlZmF1bHQ6ICcnXG4gICAgfVxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgdHlwZToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2RlZmF1bHQnXG4gICAgfSxcbiAgICBzaXplOiBTdHJpbmcsXG4gICAgaWNvbjoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJydcbiAgICB9LFxuICAgIG5hdGl2ZVR5cGU6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdidXR0b24nXG4gICAgfSxcbiAgICBsb2FkaW5nOiBCb29sZWFuLFxuICAgIGRpc2FibGVkOiBCb29sZWFuLFxuICAgIHBsYWluOiBCb29sZWFuLFxuICAgIGF1dG9mb2N1czogQm9vbGVhbixcbiAgICByb3VuZDogQm9vbGVhbixcbiAgICBjaXJjbGU6IEJvb2xlYW5cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIF9lbEZvcm1JdGVtU2l6ZTogZnVuY3Rpb24gX2VsRm9ybUl0ZW1TaXplKCkge1xuICAgICAgcmV0dXJuICh0aGlzLmVsRm9ybUl0ZW0gfHwge30pLmVsRm9ybUl0ZW1TaXplO1xuICAgIH0sXG4gICAgYnV0dG9uU2l6ZTogZnVuY3Rpb24gYnV0dG9uU2l6ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNpemUgfHwgdGhpcy5fZWxGb3JtSXRlbVNpemUgfHwgKHRoaXMuJEVMRU1FTlQgfHwge30pLnNpemU7XG4gICAgfSxcbiAgICBidXR0b25EaXNhYmxlZDogZnVuY3Rpb24gYnV0dG9uRGlzYWJsZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kb3B0aW9ucy5wcm9wc0RhdGEuaGFzT3duUHJvcGVydHkoJ2Rpc2FibGVkJykgPyB0aGlzLmRpc2FibGVkIDogKHRoaXMuZWxGb3JtIHx8IHt9KS5kaXNhYmxlZDtcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGhhbmRsZUNsaWNrOiBmdW5jdGlvbiBoYW5kbGVDbGljayhldnQpIHtcbiAgICAgIHRoaXMuJGVtaXQoJ2NsaWNrJywgZXZ0KTtcbiAgICB9XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9idXR0b24vc3JjL2J1dHRvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX2J1dHRvbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChidXR0b252dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIEVYVEVSTkFMIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXG52YXIgY29tcG9uZW50Tm9ybWFsaXplciA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvYnV0dG9uL3NyYy9idXR0b24udnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgY29tcG9uZW50ID0gT2JqZWN0KGNvbXBvbmVudE5vcm1hbGl6ZXJbXCJhXCIgLyogZGVmYXVsdCAqL10pKFxuICBzcmNfYnV0dG9udnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgYXBpOyB9XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL2J1dHRvbi9zcmMvYnV0dG9uLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfYnV0dG9uID0gKGNvbXBvbmVudC5leHBvcnRzKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvYnV0dG9uL2luZGV4LmpzXG5cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbnNyY19idXR0b24uaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcbiAgVnVlLmNvbXBvbmVudChzcmNfYnV0dG9uLm5hbWUsIHNyY19idXR0b24pO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcGFja2FnZXNfYnV0dG9uID0gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoc3JjX2J1dHRvbik7XG5cbi8qKiovIH0pXG5cbi8qKioqKiovIH0pOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/button.js\n");

/***/ }),

/***/ "./node_modules/element-ui/lib/cascader-panel.js":
/*!*******************************************************!*\
  !*** ./node_modules/element-ui/lib/cascader-panel.js ***!
  \*******************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

eval("module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __nested_webpack_require_187__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __nested_webpack_require_187__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__nested_webpack_require_187__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__nested_webpack_require_187__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__nested_webpack_require_187__.d = function(exports, name, getter) {\n/******/ \t\tif(!__nested_webpack_require_187__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__nested_webpack_require_187__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__nested_webpack_require_187__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __nested_webpack_require_187__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__nested_webpack_require_187__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __nested_webpack_require_187__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__nested_webpack_require_187__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__nested_webpack_require_187__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__nested_webpack_require_187__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__nested_webpack_require_187__.p = \"/dist/\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __nested_webpack_require_187__(__nested_webpack_require_187__.s = 61);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_3672__) {\n\n\"use strict\";\n/* harmony export (binding) */ __nested_webpack_require_3672__.d(__nested_webpack_exports__, \"a\", function() { return normalizeComponent; });\n/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nfunction normalizeComponent (\n  scriptExports,\n  render,\n  staticRenderFns,\n  functionalTemplate,\n  injectStyles,\n  scopeId,\n  moduleIdentifier, /* server only */\n  shadowMode /* vue-cli only */\n) {\n  // Vue.extend constructor export interop\n  var options = typeof scriptExports === 'function'\n    ? scriptExports.options\n    : scriptExports\n\n  // render functions\n  if (render) {\n    options.render = render\n    options.staticRenderFns = staticRenderFns\n    options._compiled = true\n  }\n\n  // functional template\n  if (functionalTemplate) {\n    options.functional = true\n  }\n\n  // scopedId\n  if (scopeId) {\n    options._scopeId = 'data-v-' + scopeId\n  }\n\n  var hook\n  if (moduleIdentifier) { // server build\n    hook = function (context) {\n      // 2.3 injection\n      context =\n        context || // cached call\n        (this.$vnode && this.$vnode.ssrContext) || // stateful\n        (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n      // 2.2 with runInNewContext: true\n      if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n        context = __VUE_SSR_CONTEXT__\n      }\n      // inject component styles\n      if (injectStyles) {\n        injectStyles.call(this, context)\n      }\n      // register component module identifier for async chunk inferrence\n      if (context && context._registeredComponents) {\n        context._registeredComponents.add(moduleIdentifier)\n      }\n    }\n    // used by ssr in case component is cached and beforeCreate\n    // never gets called\n    options._ssrRegister = hook\n  } else if (injectStyles) {\n    hook = shadowMode\n      ? function () { injectStyles.call(this, this.$root.$options.shadowRoot) }\n      : injectStyles\n  }\n\n  if (hook) {\n    if (options.functional) {\n      // for template-only hot-reload because in that case the render fn doesn't\n      // go through the normalizer\n      options._injectStyles = hook\n      // register for functioal component in vue file\n      var originalRender = options.render\n      options.render = function renderWithStyleInjection (h, context) {\n        hook.call(context)\n        return originalRender(h, context)\n      }\n    } else {\n      // inject component registration as beforeCreate hook\n      var existing = options.beforeCreate\n      options.beforeCreate = existing\n        ? [].concat(existing, hook)\n        : [hook]\n    }\n  }\n\n  return {\n    exports: scriptExports,\n    options: options\n  }\n}\n\n\n/***/ }),\n\n/***/ 15:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/scrollbar */ \"./node_modules/element-ui/lib/scrollbar.js\");\n\n/***/ }),\n\n/***/ 18:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/checkbox */ \"./node_modules/element-ui/lib/checkbox.js\");\n\n/***/ }),\n\n/***/ 21:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/shared */ \"./node_modules/element-ui/lib/utils/shared.js\");\n\n/***/ }),\n\n/***/ 26:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! babel-helper-vue-jsx-merge-props */ \"./node_modules/babel-helper-vue-jsx-merge-props/index.js\");\n\n/***/ }),\n\n/***/ 3:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/util */ \"./node_modules/element-ui/lib/utils/util.js\");\n\n/***/ }),\n\n/***/ 31:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/scroll-into-view */ \"./node_modules/element-ui/lib/utils/scroll-into-view.js\");\n\n/***/ }),\n\n/***/ 41:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/aria-utils */ \"./node_modules/element-ui/lib/utils/aria-utils.js\");\n\n/***/ }),\n\n/***/ 52:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/radio */ \"./node_modules/element-ui/lib/radio.js\");\n\n/***/ }),\n\n/***/ 6:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/mixins/locale */ \"./node_modules/element-ui/lib/mixins/locale.js\");\n\n/***/ }),\n\n/***/ 61:\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_7612__) {\n\n\"use strict\";\n__nested_webpack_require_7612__.r(__nested_webpack_exports__);\n\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/cascader-panel/src/cascader-panel.vue?vue&type=template&id=34932346&\nvar cascader_panelvue_type_template_id_34932346_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    {\n      class: [\"el-cascader-panel\", _vm.border && \"is-bordered\"],\n      on: { keydown: _vm.handleKeyDown }\n    },\n    _vm._l(_vm.menus, function(menu, index) {\n      return _c(\"cascader-menu\", {\n        key: index,\n        ref: \"menu\",\n        refInFor: true,\n        attrs: { index: index, nodes: menu }\n      })\n    }),\n    1\n  )\n}\nvar staticRenderFns = []\ncascader_panelvue_type_template_id_34932346_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/cascader-panel/src/cascader-panel.vue?vue&type=template&id=34932346&\n\n// EXTERNAL MODULE: external \"babel-helper-vue-jsx-merge-props\"\nvar external_babel_helper_vue_jsx_merge_props_ = __nested_webpack_require_7612__(26);\nvar external_babel_helper_vue_jsx_merge_props_default = /*#__PURE__*/__nested_webpack_require_7612__.n(external_babel_helper_vue_jsx_merge_props_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/scrollbar\"\nvar scrollbar_ = __nested_webpack_require_7612__(15);\nvar scrollbar_default = /*#__PURE__*/__nested_webpack_require_7612__.n(scrollbar_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/checkbox\"\nvar checkbox_ = __nested_webpack_require_7612__(18);\nvar checkbox_default = /*#__PURE__*/__nested_webpack_require_7612__.n(checkbox_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/radio\"\nvar radio_ = __nested_webpack_require_7612__(52);\nvar radio_default = /*#__PURE__*/__nested_webpack_require_7612__.n(radio_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/util\"\nvar util_ = __nested_webpack_require_7612__(3);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/cascader-panel/src/cascader-node.vue?vue&type=script&lang=js&\n\n\n\n\n\n\nvar stopPropagation = function stopPropagation(e) {\n  return e.stopPropagation();\n};\n\n/* harmony default export */ var cascader_nodevue_type_script_lang_js_ = ({\n  inject: ['panel'],\n\n  components: {\n    ElCheckbox: checkbox_default.a,\n    ElRadio: radio_default.a\n  },\n\n  props: {\n    node: {\n      required: true\n    },\n    nodeId: String\n  },\n\n  computed: {\n    config: function config() {\n      return this.panel.config;\n    },\n    isLeaf: function isLeaf() {\n      return this.node.isLeaf;\n    },\n    isDisabled: function isDisabled() {\n      return this.node.isDisabled;\n    },\n    checkedValue: function checkedValue() {\n      return this.panel.checkedValue;\n    },\n    isChecked: function isChecked() {\n      return this.node.isSameNode(this.checkedValue);\n    },\n    inActivePath: function inActivePath() {\n      return this.isInPath(this.panel.activePath);\n    },\n    inCheckedPath: function inCheckedPath() {\n      var _this = this;\n\n      if (!this.config.checkStrictly) return false;\n\n      return this.panel.checkedNodePaths.some(function (checkedPath) {\n        return _this.isInPath(checkedPath);\n      });\n    },\n    value: function value() {\n      return this.node.getValueByOption();\n    }\n  },\n\n  methods: {\n    handleExpand: function handleExpand() {\n      var _this2 = this;\n\n      var panel = this.panel,\n          node = this.node,\n          isDisabled = this.isDisabled,\n          config = this.config;\n      var multiple = config.multiple,\n          checkStrictly = config.checkStrictly;\n\n\n      if (!checkStrictly && isDisabled || node.loading) return;\n\n      if (config.lazy && !node.loaded) {\n        panel.lazyLoad(node, function () {\n          // do not use cached leaf value here, invoke this.isLeaf to get new value.\n          var isLeaf = _this2.isLeaf;\n\n\n          if (!isLeaf) _this2.handleExpand();\n          if (multiple) {\n            // if leaf sync checked state, else clear checked state\n            var checked = isLeaf ? node.checked : false;\n            _this2.handleMultiCheckChange(checked);\n          }\n        });\n      } else {\n        panel.handleExpand(node);\n      }\n    },\n    handleCheckChange: function handleCheckChange() {\n      var panel = this.panel,\n          value = this.value,\n          node = this.node;\n\n      panel.handleCheckChange(value);\n      panel.handleExpand(node);\n    },\n    handleMultiCheckChange: function handleMultiCheckChange(checked) {\n      this.node.doCheck(checked);\n      this.panel.calculateMultiCheckedValue();\n    },\n    isInPath: function isInPath(pathNodes) {\n      var node = this.node;\n\n      var selectedPathNode = pathNodes[node.level - 1] || {};\n      return selectedPathNode.uid === node.uid;\n    },\n    renderPrefix: function renderPrefix(h) {\n      var isLeaf = this.isLeaf,\n          isChecked = this.isChecked,\n          config = this.config;\n      var checkStrictly = config.checkStrictly,\n          multiple = config.multiple;\n\n\n      if (multiple) {\n        return this.renderCheckbox(h);\n      } else if (checkStrictly) {\n        return this.renderRadio(h);\n      } else if (isLeaf && isChecked) {\n        return this.renderCheckIcon(h);\n      }\n\n      return null;\n    },\n    renderPostfix: function renderPostfix(h) {\n      var node = this.node,\n          isLeaf = this.isLeaf;\n\n\n      if (node.loading) {\n        return this.renderLoadingIcon(h);\n      } else if (!isLeaf) {\n        return this.renderExpandIcon(h);\n      }\n\n      return null;\n    },\n    renderCheckbox: function renderCheckbox(h) {\n      var node = this.node,\n          config = this.config,\n          isDisabled = this.isDisabled;\n\n      var events = {\n        on: { change: this.handleMultiCheckChange },\n        nativeOn: {}\n      };\n\n      if (config.checkStrictly) {\n        // when every node is selectable, click event should not trigger expand event.\n        events.nativeOn.click = stopPropagation;\n      }\n\n      return h('el-checkbox', external_babel_helper_vue_jsx_merge_props_default()([{\n        attrs: {\n          value: node.checked,\n          indeterminate: node.indeterminate,\n          disabled: isDisabled\n        }\n      }, events]));\n    },\n    renderRadio: function renderRadio(h) {\n      var checkedValue = this.checkedValue,\n          value = this.value,\n          isDisabled = this.isDisabled;\n\n      // to keep same reference if value cause radio's checked state is calculated by reference comparision;\n\n      if (Object(util_[\"isEqual\"])(value, checkedValue)) {\n        value = checkedValue;\n      }\n\n      return h(\n        'el-radio',\n        {\n          attrs: {\n            value: checkedValue,\n            label: value,\n            disabled: isDisabled\n          },\n          on: {\n            'change': this.handleCheckChange\n          },\n          nativeOn: {\n            'click': stopPropagation\n          }\n        },\n        [h('span')]\n      );\n    },\n    renderCheckIcon: function renderCheckIcon(h) {\n      return h('i', { 'class': 'el-icon-check el-cascader-node__prefix' });\n    },\n    renderLoadingIcon: function renderLoadingIcon(h) {\n      return h('i', { 'class': 'el-icon-loading el-cascader-node__postfix' });\n    },\n    renderExpandIcon: function renderExpandIcon(h) {\n      return h('i', { 'class': 'el-icon-arrow-right el-cascader-node__postfix' });\n    },\n    renderContent: function renderContent(h) {\n      var panel = this.panel,\n          node = this.node;\n\n      var render = panel.renderLabelFn;\n      var vnode = render ? render({ node: node, data: node.data }) : null;\n\n      return h(\n        'span',\n        { 'class': 'el-cascader-node__label' },\n        [vnode || node.label]\n      );\n    }\n  },\n\n  render: function render(h) {\n    var _this3 = this;\n\n    var inActivePath = this.inActivePath,\n        inCheckedPath = this.inCheckedPath,\n        isChecked = this.isChecked,\n        isLeaf = this.isLeaf,\n        isDisabled = this.isDisabled,\n        config = this.config,\n        nodeId = this.nodeId;\n    var expandTrigger = config.expandTrigger,\n        checkStrictly = config.checkStrictly,\n        multiple = config.multiple;\n\n    var disabled = !checkStrictly && isDisabled;\n    var events = { on: {} };\n\n    if (expandTrigger === 'click') {\n      events.on.click = this.handleExpand;\n    } else {\n      events.on.mouseenter = function (e) {\n        _this3.handleExpand();\n        _this3.$emit('expand', e);\n      };\n      events.on.focus = function (e) {\n        _this3.handleExpand();\n        _this3.$emit('expand', e);\n      };\n    }\n    if (isLeaf && !isDisabled && !checkStrictly && !multiple) {\n      events.on.click = this.handleCheckChange;\n    }\n\n    return h(\n      'li',\n      external_babel_helper_vue_jsx_merge_props_default()([{\n        attrs: {\n          role: 'menuitem',\n          id: nodeId,\n          'aria-expanded': inActivePath,\n          tabindex: disabled ? null : -1\n        },\n        'class': {\n          'el-cascader-node': true,\n          'is-selectable': checkStrictly,\n          'in-active-path': inActivePath,\n          'in-checked-path': inCheckedPath,\n          'is-active': isChecked,\n          'is-disabled': disabled\n        }\n      }, events]),\n      [this.renderPrefix(h), this.renderContent(h), this.renderPostfix(h)]\n    );\n  }\n});\n// CONCATENATED MODULE: ./packages/cascader-panel/src/cascader-node.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_cascader_nodevue_type_script_lang_js_ = (cascader_nodevue_type_script_lang_js_); \n// EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js\nvar componentNormalizer = __nested_webpack_require_7612__(0);\n\n// CONCATENATED MODULE: ./packages/cascader-panel/src/cascader-node.vue\nvar cascader_node_render, cascader_node_staticRenderFns\n\n\n\n\n/* normalize component */\n\nvar component = Object(componentNormalizer[\"a\" /* default */])(\n  src_cascader_nodevue_type_script_lang_js_,\n  cascader_node_render,\n  cascader_node_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"packages/cascader-panel/src/cascader-node.vue\"\n/* harmony default export */ var cascader_node = (component.exports);\n// EXTERNAL MODULE: external \"element-ui/lib/mixins/locale\"\nvar locale_ = __nested_webpack_require_7612__(6);\nvar locale_default = /*#__PURE__*/__nested_webpack_require_7612__.n(locale_);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/cascader-panel/src/cascader-menu.vue?vue&type=script&lang=js&\n\n\n\n\n\n\n\n/* harmony default export */ var cascader_menuvue_type_script_lang_js_ = ({\n  name: 'ElCascaderMenu',\n\n  mixins: [locale_default.a],\n\n  inject: ['panel'],\n\n  components: {\n    ElScrollbar: scrollbar_default.a,\n    CascaderNode: cascader_node\n  },\n\n  props: {\n    nodes: {\n      type: Array,\n      required: true\n    },\n    index: Number\n  },\n\n  data: function data() {\n    return {\n      activeNode: null,\n      hoverTimer: null,\n      id: Object(util_[\"generateId\"])()\n    };\n  },\n\n\n  computed: {\n    isEmpty: function isEmpty() {\n      return !this.nodes.length;\n    },\n    menuId: function menuId() {\n      return 'cascader-menu-' + this.id + '-' + this.index;\n    }\n  },\n\n  methods: {\n    handleExpand: function handleExpand(e) {\n      this.activeNode = e.target;\n    },\n    handleMouseMove: function handleMouseMove(e) {\n      var activeNode = this.activeNode,\n          hoverTimer = this.hoverTimer;\n      var hoverZone = this.$refs.hoverZone;\n\n\n      if (!activeNode || !hoverZone) return;\n\n      if (activeNode.contains(e.target)) {\n        clearTimeout(hoverTimer);\n\n        var _$el$getBoundingClien = this.$el.getBoundingClientRect(),\n            left = _$el$getBoundingClien.left;\n\n        var startX = e.clientX - left;\n        var _$el = this.$el,\n            offsetWidth = _$el.offsetWidth,\n            offsetHeight = _$el.offsetHeight;\n\n        var top = activeNode.offsetTop;\n        var bottom = top + activeNode.offsetHeight;\n\n        hoverZone.innerHTML = '\\n          <path style=\"pointer-events: auto;\" fill=\"transparent\" d=\"M' + startX + ' ' + top + ' L' + offsetWidth + ' 0 V' + top + ' Z\" />\\n          <path style=\"pointer-events: auto;\" fill=\"transparent\" d=\"M' + startX + ' ' + bottom + ' L' + offsetWidth + ' ' + offsetHeight + ' V' + bottom + ' Z\" />\\n        ';\n      } else if (!hoverTimer) {\n        this.hoverTimer = setTimeout(this.clearHoverZone, this.panel.config.hoverThreshold);\n      }\n    },\n    clearHoverZone: function clearHoverZone() {\n      var hoverZone = this.$refs.hoverZone;\n\n      if (!hoverZone) return;\n      hoverZone.innerHTML = '';\n    },\n    renderEmptyText: function renderEmptyText(h) {\n      return h(\n        'div',\n        { 'class': 'el-cascader-menu__empty-text' },\n        [this.t('el.cascader.noData')]\n      );\n    },\n    renderNodeList: function renderNodeList(h) {\n      var menuId = this.menuId;\n      var isHoverMenu = this.panel.isHoverMenu;\n\n      var events = { on: {} };\n\n      if (isHoverMenu) {\n        events.on.expand = this.handleExpand;\n      }\n\n      var nodes = this.nodes.map(function (node, index) {\n        var hasChildren = node.hasChildren;\n\n        return h('cascader-node', external_babel_helper_vue_jsx_merge_props_default()([{\n          key: node.uid,\n          attrs: { node: node,\n            'node-id': menuId + '-' + index,\n            'aria-haspopup': hasChildren,\n            'aria-owns': hasChildren ? menuId : null\n          }\n        }, events]));\n      });\n\n      return [].concat(nodes, [isHoverMenu ? h('svg', { ref: 'hoverZone', 'class': 'el-cascader-menu__hover-zone' }) : null]);\n    }\n  },\n\n  render: function render(h) {\n    var isEmpty = this.isEmpty,\n        menuId = this.menuId;\n\n    var events = { nativeOn: {} };\n\n    // optimize hover to expand experience (#8010)\n    if (this.panel.isHoverMenu) {\n      events.nativeOn.mousemove = this.handleMouseMove;\n      // events.nativeOn.mouseleave = this.clearHoverZone;\n    }\n\n    return h(\n      'el-scrollbar',\n      external_babel_helper_vue_jsx_merge_props_default()([{\n        attrs: {\n          tag: 'ul',\n          role: 'menu',\n          id: menuId,\n\n          'wrap-class': 'el-cascader-menu__wrap',\n          'view-class': {\n            'el-cascader-menu__list': true,\n            'is-empty': isEmpty\n          }\n        },\n        'class': 'el-cascader-menu' }, events]),\n      [isEmpty ? this.renderEmptyText(h) : this.renderNodeList(h)]\n    );\n  }\n});\n// CONCATENATED MODULE: ./packages/cascader-panel/src/cascader-menu.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_cascader_menuvue_type_script_lang_js_ = (cascader_menuvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/cascader-panel/src/cascader-menu.vue\nvar cascader_menu_render, cascader_menu_staticRenderFns\n\n\n\n\n/* normalize component */\n\nvar cascader_menu_component = Object(componentNormalizer[\"a\" /* default */])(\n  src_cascader_menuvue_type_script_lang_js_,\n  cascader_menu_render,\n  cascader_menu_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var cascader_menu_api; }\ncascader_menu_component.options.__file = \"packages/cascader-panel/src/cascader-menu.vue\"\n/* harmony default export */ var cascader_menu = (cascader_menu_component.exports);\n// EXTERNAL MODULE: external \"element-ui/lib/utils/shared\"\nvar shared_ = __nested_webpack_require_7612__(21);\n\n// CONCATENATED MODULE: ./packages/cascader-panel/src/node.js\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\n\n\nvar uid = 0;\n\nvar node_Node = function () {\n  function Node(data, config, parentNode) {\n    _classCallCheck(this, Node);\n\n    this.data = data;\n    this.config = config;\n    this.parent = parentNode || null;\n    this.level = !this.parent ? 1 : this.parent.level + 1;\n    this.uid = uid++;\n\n    this.initState();\n    this.initChildren();\n  }\n\n  Node.prototype.initState = function initState() {\n    var _config = this.config,\n        valueKey = _config.value,\n        labelKey = _config.label;\n\n\n    this.value = this.data[valueKey];\n    this.label = this.data[labelKey];\n    this.pathNodes = this.calculatePathNodes();\n    this.path = this.pathNodes.map(function (node) {\n      return node.value;\n    });\n    this.pathLabels = this.pathNodes.map(function (node) {\n      return node.label;\n    });\n\n    // lazy load\n    this.loading = false;\n    this.loaded = false;\n  };\n\n  Node.prototype.initChildren = function initChildren() {\n    var _this = this;\n\n    var config = this.config;\n\n    var childrenKey = config.children;\n    var childrenData = this.data[childrenKey];\n    this.hasChildren = Array.isArray(childrenData);\n    this.children = (childrenData || []).map(function (child) {\n      return new Node(child, config, _this);\n    });\n  };\n\n  Node.prototype.calculatePathNodes = function calculatePathNodes() {\n    var nodes = [this];\n    var parent = this.parent;\n\n    while (parent) {\n      nodes.unshift(parent);\n      parent = parent.parent;\n    }\n\n    return nodes;\n  };\n\n  Node.prototype.getPath = function getPath() {\n    return this.path;\n  };\n\n  Node.prototype.getValue = function getValue() {\n    return this.value;\n  };\n\n  Node.prototype.getValueByOption = function getValueByOption() {\n    return this.config.emitPath ? this.getPath() : this.getValue();\n  };\n\n  Node.prototype.getText = function getText(allLevels, separator) {\n    return allLevels ? this.pathLabels.join(separator) : this.label;\n  };\n\n  Node.prototype.isSameNode = function isSameNode(checkedValue) {\n    var value = this.getValueByOption();\n    return this.config.multiple && Array.isArray(checkedValue) ? checkedValue.some(function (val) {\n      return Object(util_[\"isEqual\"])(val, value);\n    }) : Object(util_[\"isEqual\"])(checkedValue, value);\n  };\n\n  Node.prototype.broadcast = function broadcast(event) {\n    for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      args[_key - 1] = arguments[_key];\n    }\n\n    var handlerName = 'onParent' + Object(util_[\"capitalize\"])(event);\n\n    this.children.forEach(function (child) {\n      if (child) {\n        // bottom up\n        child.broadcast.apply(child, [event].concat(args));\n        child[handlerName] && child[handlerName].apply(child, args);\n      }\n    });\n  };\n\n  Node.prototype.emit = function emit(event) {\n    var parent = this.parent;\n\n    var handlerName = 'onChild' + Object(util_[\"capitalize\"])(event);\n    if (parent) {\n      for (var _len2 = arguments.length, args = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n        args[_key2 - 1] = arguments[_key2];\n      }\n\n      parent[handlerName] && parent[handlerName].apply(parent, args);\n      parent.emit.apply(parent, [event].concat(args));\n    }\n  };\n\n  Node.prototype.onParentCheck = function onParentCheck(checked) {\n    if (!this.isDisabled) {\n      this.setCheckState(checked);\n    }\n  };\n\n  Node.prototype.onChildCheck = function onChildCheck() {\n    var children = this.children;\n\n    var validChildren = children.filter(function (child) {\n      return !child.isDisabled;\n    });\n    var checked = validChildren.length ? validChildren.every(function (child) {\n      return child.checked;\n    }) : false;\n\n    this.setCheckState(checked);\n  };\n\n  Node.prototype.setCheckState = function setCheckState(checked) {\n    var totalNum = this.children.length;\n    var checkedNum = this.children.reduce(function (c, p) {\n      var num = p.checked ? 1 : p.indeterminate ? 0.5 : 0;\n      return c + num;\n    }, 0);\n\n    this.checked = checked;\n    this.indeterminate = checkedNum !== totalNum && checkedNum > 0;\n  };\n\n  Node.prototype.syncCheckState = function syncCheckState(checkedValue) {\n    var value = this.getValueByOption();\n    var checked = this.isSameNode(checkedValue, value);\n\n    this.doCheck(checked);\n  };\n\n  Node.prototype.doCheck = function doCheck(checked) {\n    if (this.checked !== checked) {\n      if (this.config.checkStrictly) {\n        this.checked = checked;\n      } else {\n        // bottom up to unify the calculation of the indeterminate state\n        this.broadcast('check', checked);\n        this.setCheckState(checked);\n        this.emit('check');\n      }\n    }\n  };\n\n  _createClass(Node, [{\n    key: 'isDisabled',\n    get: function get() {\n      var data = this.data,\n          parent = this.parent,\n          config = this.config;\n\n      var disabledKey = config.disabled;\n      var checkStrictly = config.checkStrictly;\n\n      return data[disabledKey] || !checkStrictly && parent && parent.isDisabled;\n    }\n  }, {\n    key: 'isLeaf',\n    get: function get() {\n      var data = this.data,\n          loaded = this.loaded,\n          hasChildren = this.hasChildren,\n          children = this.children;\n      var _config2 = this.config,\n          lazy = _config2.lazy,\n          leafKey = _config2.leaf;\n\n      if (lazy) {\n        var isLeaf = Object(shared_[\"isDef\"])(data[leafKey]) ? data[leafKey] : loaded ? !children.length : false;\n        this.hasChildren = !isLeaf;\n        return isLeaf;\n      }\n      return !hasChildren;\n    }\n  }]);\n\n  return Node;\n}();\n\n/* harmony default export */ var src_node = (node_Node);\n// CONCATENATED MODULE: ./packages/cascader-panel/src/store.js\nfunction store_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\n\n\nvar flatNodes = function flatNodes(data, leafOnly) {\n  return data.reduce(function (res, node) {\n    if (node.isLeaf) {\n      res.push(node);\n    } else {\n      !leafOnly && res.push(node);\n      res = res.concat(flatNodes(node.children, leafOnly));\n    }\n    return res;\n  }, []);\n};\n\nvar store_Store = function () {\n  function Store(data, config) {\n    store_classCallCheck(this, Store);\n\n    this.config = config;\n    this.initNodes(data);\n  }\n\n  Store.prototype.initNodes = function initNodes(data) {\n    var _this = this;\n\n    data = Object(util_[\"coerceTruthyValueToArray\"])(data);\n    this.nodes = data.map(function (nodeData) {\n      return new src_node(nodeData, _this.config);\n    });\n    this.flattedNodes = this.getFlattedNodes(false, false);\n    this.leafNodes = this.getFlattedNodes(true, false);\n  };\n\n  Store.prototype.appendNode = function appendNode(nodeData, parentNode) {\n    var node = new src_node(nodeData, this.config, parentNode);\n    var children = parentNode ? parentNode.children : this.nodes;\n\n    children.push(node);\n  };\n\n  Store.prototype.appendNodes = function appendNodes(nodeDataList, parentNode) {\n    var _this2 = this;\n\n    nodeDataList = Object(util_[\"coerceTruthyValueToArray\"])(nodeDataList);\n    nodeDataList.forEach(function (nodeData) {\n      return _this2.appendNode(nodeData, parentNode);\n    });\n  };\n\n  Store.prototype.getNodes = function getNodes() {\n    return this.nodes;\n  };\n\n  Store.prototype.getFlattedNodes = function getFlattedNodes(leafOnly) {\n    var cached = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n    var cachedNodes = leafOnly ? this.leafNodes : this.flattedNodes;\n    return cached ? cachedNodes : flatNodes(this.nodes, leafOnly);\n  };\n\n  Store.prototype.getNodeByValue = function getNodeByValue(value) {\n    var nodes = this.getFlattedNodes(false, !this.config.lazy).filter(function (node) {\n      return Object(util_[\"valueEquals\"])(node.path, value) || node.value === value;\n    });\n    return nodes && nodes.length ? nodes[0] : null;\n  };\n\n  return Store;\n}();\n\n/* harmony default export */ var src_store = (store_Store);\n// EXTERNAL MODULE: external \"element-ui/lib/utils/merge\"\nvar merge_ = __nested_webpack_require_7612__(9);\nvar merge_default = /*#__PURE__*/__nested_webpack_require_7612__.n(merge_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/aria-utils\"\nvar aria_utils_ = __nested_webpack_require_7612__(41);\nvar aria_utils_default = /*#__PURE__*/__nested_webpack_require_7612__.n(aria_utils_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/scroll-into-view\"\nvar scroll_into_view_ = __nested_webpack_require_7612__(31);\nvar scroll_into_view_default = /*#__PURE__*/__nested_webpack_require_7612__.n(scroll_into_view_);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/cascader-panel/src/cascader-panel.vue?vue&type=script&lang=js&\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n\n\nvar KeyCode = aria_utils_default.a.keys;\n\nvar DefaultProps = {\n  expandTrigger: 'click', // or hover\n  multiple: false,\n  checkStrictly: false, // whether all nodes can be selected\n  emitPath: true, // wether to emit an array of all levels value in which node is located\n  lazy: false,\n  lazyLoad: util_[\"noop\"],\n  value: 'value',\n  label: 'label',\n  children: 'children',\n  leaf: 'leaf',\n  disabled: 'disabled',\n  hoverThreshold: 500\n};\n\nvar cascader_panelvue_type_script_lang_js_isLeaf = function isLeaf(el) {\n  return !el.getAttribute('aria-owns');\n};\n\nvar getSibling = function getSibling(el, distance) {\n  var parentNode = el.parentNode;\n\n  if (parentNode) {\n    var siblings = parentNode.querySelectorAll('.el-cascader-node[tabindex=\"-1\"]');\n    var index = Array.prototype.indexOf.call(siblings, el);\n    return siblings[index + distance] || null;\n  }\n  return null;\n};\n\nvar getMenuIndex = function getMenuIndex(el, distance) {\n  if (!el) return;\n  var pieces = el.id.split('-');\n  return Number(pieces[pieces.length - 2]);\n};\n\nvar focusNode = function focusNode(el) {\n  if (!el) return;\n  el.focus();\n  !cascader_panelvue_type_script_lang_js_isLeaf(el) && el.click();\n};\n\nvar checkNode = function checkNode(el) {\n  if (!el) return;\n\n  var input = el.querySelector('input');\n  if (input) {\n    input.click();\n  } else if (cascader_panelvue_type_script_lang_js_isLeaf(el)) {\n    el.click();\n  }\n};\n\n/* harmony default export */ var cascader_panelvue_type_script_lang_js_ = ({\n  name: 'ElCascaderPanel',\n\n  components: {\n    CascaderMenu: cascader_menu\n  },\n\n  props: {\n    value: {},\n    options: Array,\n    props: Object,\n    border: {\n      type: Boolean,\n      default: true\n    },\n    renderLabel: Function\n  },\n\n  provide: function provide() {\n    return {\n      panel: this\n    };\n  },\n  data: function data() {\n    return {\n      checkedValue: null,\n      checkedNodePaths: [],\n      store: [],\n      menus: [],\n      activePath: [],\n      loadCount: 0\n    };\n  },\n\n\n  computed: {\n    config: function config() {\n      return merge_default()(_extends({}, DefaultProps), this.props || {});\n    },\n    multiple: function multiple() {\n      return this.config.multiple;\n    },\n    checkStrictly: function checkStrictly() {\n      return this.config.checkStrictly;\n    },\n    leafOnly: function leafOnly() {\n      return !this.checkStrictly;\n    },\n    isHoverMenu: function isHoverMenu() {\n      return this.config.expandTrigger === 'hover';\n    },\n    renderLabelFn: function renderLabelFn() {\n      return this.renderLabel || this.$scopedSlots.default;\n    }\n  },\n\n  watch: {\n    value: function value() {\n      this.syncCheckedValue();\n      this.checkStrictly && this.calculateCheckedNodePaths();\n    },\n\n    options: {\n      handler: function handler() {\n        this.initStore();\n      },\n      immediate: true,\n      deep: true\n    },\n    checkedValue: function checkedValue(val) {\n      if (!Object(util_[\"isEqual\"])(val, this.value)) {\n        this.checkStrictly && this.calculateCheckedNodePaths();\n        this.$emit('input', val);\n        this.$emit('change', val);\n      }\n    }\n  },\n\n  mounted: function mounted() {\n    if (!this.isEmptyValue(this.value)) {\n      this.syncCheckedValue();\n    }\n  },\n\n\n  methods: {\n    initStore: function initStore() {\n      var config = this.config,\n          options = this.options;\n\n      if (config.lazy && Object(util_[\"isEmpty\"])(options)) {\n        this.lazyLoad();\n      } else {\n        this.store = new src_store(options, config);\n        this.menus = [this.store.getNodes()];\n        this.syncMenuState();\n      }\n    },\n    syncCheckedValue: function syncCheckedValue() {\n      var value = this.value,\n          checkedValue = this.checkedValue;\n\n      if (!Object(util_[\"isEqual\"])(value, checkedValue)) {\n        this.activePath = [];\n        this.checkedValue = value;\n        this.syncMenuState();\n      }\n    },\n    syncMenuState: function syncMenuState() {\n      var multiple = this.multiple,\n          checkStrictly = this.checkStrictly;\n\n      this.syncActivePath();\n      multiple && this.syncMultiCheckState();\n      checkStrictly && this.calculateCheckedNodePaths();\n      this.$nextTick(this.scrollIntoView);\n    },\n    syncMultiCheckState: function syncMultiCheckState() {\n      var _this = this;\n\n      var nodes = this.getFlattedNodes(this.leafOnly);\n\n      nodes.forEach(function (node) {\n        node.syncCheckState(_this.checkedValue);\n      });\n    },\n    isEmptyValue: function isEmptyValue(val) {\n      var multiple = this.multiple,\n          config = this.config;\n      var emitPath = config.emitPath;\n\n      if (multiple || emitPath) {\n        return Object(util_[\"isEmpty\"])(val);\n      }\n      return false;\n    },\n    syncActivePath: function syncActivePath() {\n      var _this2 = this;\n\n      var store = this.store,\n          multiple = this.multiple,\n          activePath = this.activePath,\n          checkedValue = this.checkedValue;\n\n\n      if (!Object(util_[\"isEmpty\"])(activePath)) {\n        var nodes = activePath.map(function (node) {\n          return _this2.getNodeByValue(node.getValue());\n        });\n        this.expandNodes(nodes);\n      } else if (!this.isEmptyValue(checkedValue)) {\n        var value = multiple ? checkedValue[0] : checkedValue;\n        var checkedNode = this.getNodeByValue(value) || {};\n        var _nodes = (checkedNode.pathNodes || []).slice(0, -1);\n        this.expandNodes(_nodes);\n      } else {\n        this.activePath = [];\n        this.menus = [store.getNodes()];\n      }\n    },\n    expandNodes: function expandNodes(nodes) {\n      var _this3 = this;\n\n      nodes.forEach(function (node) {\n        return _this3.handleExpand(node, true /* silent */);\n      });\n    },\n    calculateCheckedNodePaths: function calculateCheckedNodePaths() {\n      var _this4 = this;\n\n      var checkedValue = this.checkedValue,\n          multiple = this.multiple;\n\n      var checkedValues = multiple ? Object(util_[\"coerceTruthyValueToArray\"])(checkedValue) : [checkedValue];\n      this.checkedNodePaths = checkedValues.map(function (v) {\n        var checkedNode = _this4.getNodeByValue(v);\n        return checkedNode ? checkedNode.pathNodes : [];\n      });\n    },\n    handleKeyDown: function handleKeyDown(e) {\n      var target = e.target,\n          keyCode = e.keyCode;\n\n\n      switch (keyCode) {\n        case KeyCode.up:\n          var prev = getSibling(target, -1);\n          focusNode(prev);\n          break;\n        case KeyCode.down:\n          var next = getSibling(target, 1);\n          focusNode(next);\n          break;\n        case KeyCode.left:\n          var preMenu = this.$refs.menu[getMenuIndex(target) - 1];\n          if (preMenu) {\n            var expandedNode = preMenu.$el.querySelector('.el-cascader-node[aria-expanded=\"true\"]');\n            focusNode(expandedNode);\n          }\n          break;\n        case KeyCode.right:\n          var nextMenu = this.$refs.menu[getMenuIndex(target) + 1];\n          if (nextMenu) {\n            var firstNode = nextMenu.$el.querySelector('.el-cascader-node[tabindex=\"-1\"]');\n            focusNode(firstNode);\n          }\n          break;\n        case KeyCode.enter:\n          checkNode(target);\n          break;\n        case KeyCode.esc:\n        case KeyCode.tab:\n          this.$emit('close');\n          break;\n        default:\n          return;\n      }\n    },\n    handleExpand: function handleExpand(node, silent) {\n      var activePath = this.activePath;\n      var level = node.level;\n\n      var path = activePath.slice(0, level - 1);\n      var menus = this.menus.slice(0, level);\n\n      if (!node.isLeaf) {\n        path.push(node);\n        menus.push(node.children);\n      }\n\n      this.activePath = path;\n      this.menus = menus;\n\n      if (!silent) {\n        var pathValues = path.map(function (node) {\n          return node.getValue();\n        });\n        var activePathValues = activePath.map(function (node) {\n          return node.getValue();\n        });\n        if (!Object(util_[\"valueEquals\"])(pathValues, activePathValues)) {\n          this.$emit('active-item-change', pathValues); // Deprecated\n          this.$emit('expand-change', pathValues);\n        }\n      }\n    },\n    handleCheckChange: function handleCheckChange(value) {\n      this.checkedValue = value;\n    },\n    lazyLoad: function lazyLoad(node, onFullfiled) {\n      var _this5 = this;\n\n      var config = this.config;\n\n      if (!node) {\n        node = node || { root: true, level: 0 };\n        this.store = new src_store([], config);\n        this.menus = [this.store.getNodes()];\n      }\n      node.loading = true;\n      var resolve = function resolve(dataList) {\n        var parent = node.root ? null : node;\n        dataList && dataList.length && _this5.store.appendNodes(dataList, parent);\n        node.loading = false;\n        node.loaded = true;\n\n        // dispose default value on lazy load mode\n        if (Array.isArray(_this5.checkedValue)) {\n          var nodeValue = _this5.checkedValue[_this5.loadCount++];\n          var valueKey = _this5.config.value;\n          var leafKey = _this5.config.leaf;\n\n          if (Array.isArray(dataList) && dataList.filter(function (item) {\n            return item[valueKey] === nodeValue;\n          }).length > 0) {\n            var checkedNode = _this5.store.getNodeByValue(nodeValue);\n\n            if (!checkedNode.data[leafKey]) {\n              _this5.lazyLoad(checkedNode, function () {\n                _this5.handleExpand(checkedNode);\n              });\n            }\n\n            if (_this5.loadCount === _this5.checkedValue.length) {\n              _this5.$parent.computePresentText();\n            }\n          }\n        }\n\n        onFullfiled && onFullfiled(dataList);\n      };\n      config.lazyLoad(node, resolve);\n    },\n\n\n    /**\n     * public methods\n    */\n    calculateMultiCheckedValue: function calculateMultiCheckedValue() {\n      this.checkedValue = this.getCheckedNodes(this.leafOnly).map(function (node) {\n        return node.getValueByOption();\n      });\n    },\n    scrollIntoView: function scrollIntoView() {\n      if (this.$isServer) return;\n\n      var menus = this.$refs.menu || [];\n      menus.forEach(function (menu) {\n        var menuElement = menu.$el;\n        if (menuElement) {\n          var container = menuElement.querySelector('.el-scrollbar__wrap');\n          var activeNode = menuElement.querySelector('.el-cascader-node.is-active') || menuElement.querySelector('.el-cascader-node.in-active-path');\n          scroll_into_view_default()(container, activeNode);\n        }\n      });\n    },\n    getNodeByValue: function getNodeByValue(val) {\n      return this.store.getNodeByValue(val);\n    },\n    getFlattedNodes: function getFlattedNodes(leafOnly) {\n      var cached = !this.config.lazy;\n      return this.store.getFlattedNodes(leafOnly, cached);\n    },\n    getCheckedNodes: function getCheckedNodes(leafOnly) {\n      var checkedValue = this.checkedValue,\n          multiple = this.multiple;\n\n      if (multiple) {\n        var nodes = this.getFlattedNodes(leafOnly);\n        return nodes.filter(function (node) {\n          return node.checked;\n        });\n      } else {\n        return this.isEmptyValue(checkedValue) ? [] : [this.getNodeByValue(checkedValue)];\n      }\n    },\n    clearCheckedNodes: function clearCheckedNodes() {\n      var config = this.config,\n          leafOnly = this.leafOnly;\n      var multiple = config.multiple,\n          emitPath = config.emitPath;\n\n      if (multiple) {\n        this.getCheckedNodes(leafOnly).filter(function (node) {\n          return !node.isDisabled;\n        }).forEach(function (node) {\n          return node.doCheck(false);\n        });\n        this.calculateMultiCheckedValue();\n      } else {\n        this.checkedValue = emitPath ? [] : null;\n      }\n    }\n  }\n});\n// CONCATENATED MODULE: ./packages/cascader-panel/src/cascader-panel.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_cascader_panelvue_type_script_lang_js_ = (cascader_panelvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/cascader-panel/src/cascader-panel.vue\n\n\n\n\n\n/* normalize component */\n\nvar cascader_panel_component = Object(componentNormalizer[\"a\" /* default */])(\n  src_cascader_panelvue_type_script_lang_js_,\n  cascader_panelvue_type_template_id_34932346_render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var cascader_panel_api; }\ncascader_panel_component.options.__file = \"packages/cascader-panel/src/cascader-panel.vue\"\n/* harmony default export */ var cascader_panel = (cascader_panel_component.exports);\n// CONCATENATED MODULE: ./packages/cascader-panel/index.js\n\n\n/* istanbul ignore next */\ncascader_panel.install = function (Vue) {\n  Vue.component(cascader_panel.name, cascader_panel);\n};\n\n/* harmony default export */ var packages_cascader_panel = __nested_webpack_exports__[\"default\"] = (cascader_panel);\n\n/***/ }),\n\n/***/ 9:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/merge */ \"./node_modules/element-ui/lib/utils/merge.js\");\n\n/***/ })\n\n/******/ });//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvY2FzY2FkZXItcGFuZWwuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSw4QkFBOEI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsOEJBQW1CO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEVBQTBFLDhCQUFtQjtBQUM3RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsOEJBQW1CO0FBQzdCO0FBQ0E7QUFDQSxVQUFVLDhCQUFtQjtBQUM3QjtBQUNBO0FBQ0EsVUFBVSw4QkFBbUI7QUFDN0IsZUFBZSw4QkFBbUI7QUFDbEMsbURBQW1ELCtCQUErQjtBQUNsRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsOEJBQW1CO0FBQzdCO0FBQ0EsaUVBQWlFLGlCQUFpQjtBQUNsRjtBQUNBLDBEQUEwRCxhQUFhO0FBQ3ZFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSw4QkFBbUI7QUFDN0IsZ0NBQWdDLDhCQUFtQjtBQUNuRDtBQUNBO0FBQ0E7QUFDQSxXQUFXLDhCQUFtQjtBQUM5QixrREFBa0QsZ0NBQWdDO0FBQ2xGLDBFQUEwRSw4QkFBbUIsNEJBQTRCLG9CQUFvQjtBQUM3STtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsOEJBQW1CO0FBQzdCO0FBQ0Esb0NBQW9DLDRCQUE0QjtBQUNoRSwwQ0FBMEM7QUFDMUMsV0FBVyw4QkFBbUI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLDhCQUFtQixrQ0FBa0M7QUFDL0Q7QUFDQTtBQUNBLFVBQVUsOEJBQW1CO0FBQzdCO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQiw4QkFBbUIsQ0FBQyw4QkFBbUI7QUFDeEQsVUFBVTtBQUNWO0FBQ0E7O0FBRUE7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsK0JB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QUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0EsdUZBQXVGLGFBQWE7QUFDcEc7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsNkZBQTZGLGVBQWU7QUFDNUc7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQSx1REFBdUQsMENBQTBDOzs7OztBQUtqRztBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQSxhQUFhLCtCQUFtQjtBQUNoQyxpQ0FBaUMsK0JBQW1COztBQUVwRDtBQUNBLGtCQUFrQiwrQkFBbUI7QUFDckMsc0NBQXNDLCtCQUFtQjs7QUFFekQ7QUFDQSx3QkFBd0IsK0JBQW1CO0FBQzNDLDRDQUE0QywrQkFBbUI7O0FBRS9EO0FBQ0Esb0RBQW9ELGdCQUFnQixzQkFBc0IsT0FBTywyQkFBMkIsMEJBQTBCLHlEQUF5RCxpQ0FBaUM7O0FBRWhQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7QUFTQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0Esd0NBQXdDLGlDQUFpQztBQUN6RSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSx3REFBd0Q7QUFDeEQ7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVztBQUNYOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7OztBQUdMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsUUFBUTtBQUNSO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBOzs7Ozs7QUFNQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksS0FBSyxFQUFFLDJCQUEyQjtBQUN0QztBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDJEQUEyRCwwQkFBbUI7O0FBRTlFLE9BQU87O0FBRVA7QUFDQTs7QUFFQSxpQkFBaUIsbUJBQU8sQ0FBQyxnRkFBNEI7O0FBRXJELE9BQU87O0FBRVAsVUFBVSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9lbGVtZW50LXVpL2xpYi9jYXNjYWRlci1wYW5lbC5qcz8zOWU1Il0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID1cbi8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXBcbi8qKioqKiovIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbi8qKioqKiovIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbi8qKioqKiovIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuLyoqKioqKi8gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4vKioqKioqLyBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuLyoqKioqKi8gXHRcdFx0aTogbW9kdWxlSWQsXG4vKioqKioqLyBcdFx0XHRsOiBmYWxzZSxcbi8qKioqKiovIFx0XHRcdGV4cG9ydHM6IHt9XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4vKioqKioqLyBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbi8qKioqKiovIFx0XHRtb2R1bGUubCA9IHRydWU7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4vKioqKioqLyBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuLyoqKioqKi8gXHR9XG4vKioqKioqL1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4vKioqKioqLyBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4vKioqKioqLyBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4vKioqKioqLyBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbi8qKioqKiovIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuLyoqKioqKi8gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbi8qKioqKiovIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuLyoqKioqKi8gXHRcdHJldHVybiBucztcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuLyoqKioqKi8gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuLyoqKioqKi8gXHRcdHJldHVybiBnZXR0ZXI7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCIvZGlzdC9cIjtcbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8qKioqKiovIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gNjEpO1xuLyoqKioqKi8gfSlcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyAoe1xuXG4vKioqLyAwOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJhXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gbm9ybWFsaXplQ29tcG9uZW50OyB9KTtcbi8qIGdsb2JhbHMgX19WVUVfU1NSX0NPTlRFWFRfXyAqL1xuXG4vLyBJTVBPUlRBTlQ6IERvIE5PVCB1c2UgRVMyMDE1IGZlYXR1cmVzIGluIHRoaXMgZmlsZSAoZXhjZXB0IGZvciBtb2R1bGVzKS5cbi8vIFRoaXMgbW9kdWxlIGlzIGEgcnVudGltZSB1dGlsaXR5IGZvciBjbGVhbmVyIGNvbXBvbmVudCBtb2R1bGUgb3V0cHV0IGFuZCB3aWxsXG4vLyBiZSBpbmNsdWRlZCBpbiB0aGUgZmluYWwgd2VicGFjayB1c2VyIGJ1bmRsZS5cblxuZnVuY3Rpb24gbm9ybWFsaXplQ29tcG9uZW50IChcbiAgc2NyaXB0RXhwb3J0cyxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZ1bmN0aW9uYWxUZW1wbGF0ZSxcbiAgaW5qZWN0U3R5bGVzLFxuICBzY29wZUlkLFxuICBtb2R1bGVJZGVudGlmaWVyLCAvKiBzZXJ2ZXIgb25seSAqL1xuICBzaGFkb3dNb2RlIC8qIHZ1ZS1jbGkgb25seSAqL1xuKSB7XG4gIC8vIFZ1ZS5leHRlbmQgY29uc3RydWN0b3IgZXhwb3J0IGludGVyb3BcbiAgdmFyIG9wdGlvbnMgPSB0eXBlb2Ygc2NyaXB0RXhwb3J0cyA9PT0gJ2Z1bmN0aW9uJ1xuICAgID8gc2NyaXB0RXhwb3J0cy5vcHRpb25zXG4gICAgOiBzY3JpcHRFeHBvcnRzXG5cbiAgLy8gcmVuZGVyIGZ1bmN0aW9uc1xuICBpZiAocmVuZGVyKSB7XG4gICAgb3B0aW9ucy5yZW5kZXIgPSByZW5kZXJcbiAgICBvcHRpb25zLnN0YXRpY1JlbmRlckZucyA9IHN0YXRpY1JlbmRlckZuc1xuICAgIG9wdGlvbnMuX2NvbXBpbGVkID0gdHJ1ZVxuICB9XG5cbiAgLy8gZnVuY3Rpb25hbCB0ZW1wbGF0ZVxuICBpZiAoZnVuY3Rpb25hbFRlbXBsYXRlKSB7XG4gICAgb3B0aW9ucy5mdW5jdGlvbmFsID0gdHJ1ZVxuICB9XG5cbiAgLy8gc2NvcGVkSWRcbiAgaWYgKHNjb3BlSWQpIHtcbiAgICBvcHRpb25zLl9zY29wZUlkID0gJ2RhdGEtdi0nICsgc2NvcGVJZFxuICB9XG5cbiAgdmFyIGhvb2tcbiAgaWYgKG1vZHVsZUlkZW50aWZpZXIpIHsgLy8gc2VydmVyIGJ1aWxkXG4gICAgaG9vayA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgICAvLyAyLjMgaW5qZWN0aW9uXG4gICAgICBjb250ZXh0ID1cbiAgICAgICAgY29udGV4dCB8fCAvLyBjYWNoZWQgY2FsbFxuICAgICAgICAodGhpcy4kdm5vZGUgJiYgdGhpcy4kdm5vZGUuc3NyQ29udGV4dCkgfHwgLy8gc3RhdGVmdWxcbiAgICAgICAgKHRoaXMucGFyZW50ICYmIHRoaXMucGFyZW50LiR2bm9kZSAmJiB0aGlzLnBhcmVudC4kdm5vZGUuc3NyQ29udGV4dCkgLy8gZnVuY3Rpb25hbFxuICAgICAgLy8gMi4yIHdpdGggcnVuSW5OZXdDb250ZXh0OiB0cnVlXG4gICAgICBpZiAoIWNvbnRleHQgJiYgdHlwZW9mIF9fVlVFX1NTUl9DT05URVhUX18gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGNvbnRleHQgPSBfX1ZVRV9TU1JfQ09OVEVYVF9fXG4gICAgICB9XG4gICAgICAvLyBpbmplY3QgY29tcG9uZW50IHN0eWxlc1xuICAgICAgaWYgKGluamVjdFN0eWxlcykge1xuICAgICAgICBpbmplY3RTdHlsZXMuY2FsbCh0aGlzLCBjb250ZXh0KVxuICAgICAgfVxuICAgICAgLy8gcmVnaXN0ZXIgY29tcG9uZW50IG1vZHVsZSBpZGVudGlmaWVyIGZvciBhc3luYyBjaHVuayBpbmZlcnJlbmNlXG4gICAgICBpZiAoY29udGV4dCAmJiBjb250ZXh0Ll9yZWdpc3RlcmVkQ29tcG9uZW50cykge1xuICAgICAgICBjb250ZXh0Ll9yZWdpc3RlcmVkQ29tcG9uZW50cy5hZGQobW9kdWxlSWRlbnRpZmllcilcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gdXNlZCBieSBzc3IgaW4gY2FzZSBjb21wb25lbnQgaXMgY2FjaGVkIGFuZCBiZWZvcmVDcmVhdGVcbiAgICAvLyBuZXZlciBnZXRzIGNhbGxlZFxuICAgIG9wdGlvbnMuX3NzclJlZ2lzdGVyID0gaG9va1xuICB9IGVsc2UgaWYgKGluamVjdFN0eWxlcykge1xuICAgIGhvb2sgPSBzaGFkb3dNb2RlXG4gICAgICA/IGZ1bmN0aW9uICgpIHsgaW5qZWN0U3R5bGVzLmNhbGwodGhpcywgdGhpcy4kcm9vdC4kb3B0aW9ucy5zaGFkb3dSb290KSB9XG4gICAgICA6IGluamVjdFN0eWxlc1xuICB9XG5cbiAgaWYgKGhvb2spIHtcbiAgICBpZiAob3B0aW9ucy5mdW5jdGlvbmFsKSB7XG4gICAgICAvLyBmb3IgdGVtcGxhdGUtb25seSBob3QtcmVsb2FkIGJlY2F1c2UgaW4gdGhhdCBjYXNlIHRoZSByZW5kZXIgZm4gZG9lc24ndFxuICAgICAgLy8gZ28gdGhyb3VnaCB0aGUgbm9ybWFsaXplclxuICAgICAgb3B0aW9ucy5faW5qZWN0U3R5bGVzID0gaG9va1xuICAgICAgLy8gcmVnaXN0ZXIgZm9yIGZ1bmN0aW9hbCBjb21wb25lbnQgaW4gdnVlIGZpbGVcbiAgICAgIHZhciBvcmlnaW5hbFJlbmRlciA9IG9wdGlvbnMucmVuZGVyXG4gICAgICBvcHRpb25zLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcldpdGhTdHlsZUluamVjdGlvbiAoaCwgY29udGV4dCkge1xuICAgICAgICBob29rLmNhbGwoY29udGV4dClcbiAgICAgICAgcmV0dXJuIG9yaWdpbmFsUmVuZGVyKGgsIGNvbnRleHQpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGluamVjdCBjb21wb25lbnQgcmVnaXN0cmF0aW9uIGFzIGJlZm9yZUNyZWF0ZSBob29rXG4gICAgICB2YXIgZXhpc3RpbmcgPSBvcHRpb25zLmJlZm9yZUNyZWF0ZVxuICAgICAgb3B0aW9ucy5iZWZvcmVDcmVhdGUgPSBleGlzdGluZ1xuICAgICAgICA/IFtdLmNvbmNhdChleGlzdGluZywgaG9vaylcbiAgICAgICAgOiBbaG9va11cbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGV4cG9ydHM6IHNjcmlwdEV4cG9ydHMsXG4gICAgb3B0aW9uczogb3B0aW9uc1xuICB9XG59XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDE1OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi9zY3JvbGxiYXJcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAxODpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlbWVudC11aS9saWIvY2hlY2tib3hcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAyMTpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlbWVudC11aS9saWIvdXRpbHMvc2hhcmVkXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMjY6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImJhYmVsLWhlbHBlci12dWUtanN4LW1lcmdlLXByb3BzXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMzpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlbWVudC11aS9saWIvdXRpbHMvdXRpbFwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDMxOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi91dGlscy9zY3JvbGwtaW50by12aWV3XCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gNDE6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImVsZW1lbnQtdWkvbGliL3V0aWxzL2FyaWEtdXRpbHNcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyA1Mjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlbWVudC11aS9saWIvcmFkaW9cIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyA2OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi9taXhpbnMvbG9jYWxlXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gNjE6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2Nhc2NhZGVyLXBhbmVsL3NyYy9jYXNjYWRlci1wYW5lbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MzQ5MzIzNDYmXG52YXIgY2FzY2FkZXJfcGFuZWx2dWVfdHlwZV90ZW1wbGF0ZV9pZF8zNDkzMjM0Nl9yZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICB7XG4gICAgICBjbGFzczogW1wiZWwtY2FzY2FkZXItcGFuZWxcIiwgX3ZtLmJvcmRlciAmJiBcImlzLWJvcmRlcmVkXCJdLFxuICAgICAgb246IHsga2V5ZG93bjogX3ZtLmhhbmRsZUtleURvd24gfVxuICAgIH0sXG4gICAgX3ZtLl9sKF92bS5tZW51cywgZnVuY3Rpb24obWVudSwgaW5kZXgpIHtcbiAgICAgIHJldHVybiBfYyhcImNhc2NhZGVyLW1lbnVcIiwge1xuICAgICAgICBrZXk6IGluZGV4LFxuICAgICAgICByZWY6IFwibWVudVwiLFxuICAgICAgICByZWZJbkZvcjogdHJ1ZSxcbiAgICAgICAgYXR0cnM6IHsgaW5kZXg6IGluZGV4LCBub2RlczogbWVudSB9XG4gICAgICB9KVxuICAgIH0pLFxuICAgIDFcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5jYXNjYWRlcl9wYW5lbHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzM0OTMyMzQ2X3JlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY2FzY2FkZXItcGFuZWwvc3JjL2Nhc2NhZGVyLXBhbmVsLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zNDkzMjM0NiZcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcImJhYmVsLWhlbHBlci12dWUtanN4LW1lcmdlLXByb3BzXCJcbnZhciBleHRlcm5hbF9iYWJlbF9oZWxwZXJfdnVlX2pzeF9tZXJnZV9wcm9wc18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI2KTtcbnZhciBleHRlcm5hbF9iYWJlbF9oZWxwZXJfdnVlX2pzeF9tZXJnZV9wcm9wc19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihleHRlcm5hbF9iYWJlbF9oZWxwZXJfdnVlX2pzeF9tZXJnZV9wcm9wc18pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiZWxlbWVudC11aS9saWIvc2Nyb2xsYmFyXCJcbnZhciBzY3JvbGxiYXJfID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNSk7XG52YXIgc2Nyb2xsYmFyX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHNjcm9sbGJhcl8pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiZWxlbWVudC11aS9saWIvY2hlY2tib3hcIlxudmFyIGNoZWNrYm94XyA9IF9fd2VicGFja19yZXF1aXJlX18oMTgpO1xudmFyIGNoZWNrYm94X2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGNoZWNrYm94Xyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJlbGVtZW50LXVpL2xpYi9yYWRpb1wiXG52YXIgcmFkaW9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1Mik7XG52YXIgcmFkaW9fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4ocmFkaW9fKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcImVsZW1lbnQtdWkvbGliL3V0aWxzL3V0aWxcIlxudmFyIHV0aWxfID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvY2FzY2FkZXItcGFuZWwvc3JjL2Nhc2NhZGVyLW5vZGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuXG5cblxuXG5cblxudmFyIHN0b3BQcm9wYWdhdGlvbiA9IGZ1bmN0aW9uIHN0b3BQcm9wYWdhdGlvbihlKSB7XG4gIHJldHVybiBlLnN0b3BQcm9wYWdhdGlvbigpO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgY2FzY2FkZXJfbm9kZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIGluamVjdDogWydwYW5lbCddLFxuXG4gIGNvbXBvbmVudHM6IHtcbiAgICBFbENoZWNrYm94OiBjaGVja2JveF9kZWZhdWx0LmEsXG4gICAgRWxSYWRpbzogcmFkaW9fZGVmYXVsdC5hXG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBub2RlOiB7XG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAgbm9kZUlkOiBTdHJpbmdcbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNvbmZpZzogZnVuY3Rpb24gY29uZmlnKCkge1xuICAgICAgcmV0dXJuIHRoaXMucGFuZWwuY29uZmlnO1xuICAgIH0sXG4gICAgaXNMZWFmOiBmdW5jdGlvbiBpc0xlYWYoKSB7XG4gICAgICByZXR1cm4gdGhpcy5ub2RlLmlzTGVhZjtcbiAgICB9LFxuICAgIGlzRGlzYWJsZWQ6IGZ1bmN0aW9uIGlzRGlzYWJsZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5ub2RlLmlzRGlzYWJsZWQ7XG4gICAgfSxcbiAgICBjaGVja2VkVmFsdWU6IGZ1bmN0aW9uIGNoZWNrZWRWYWx1ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnBhbmVsLmNoZWNrZWRWYWx1ZTtcbiAgICB9LFxuICAgIGlzQ2hlY2tlZDogZnVuY3Rpb24gaXNDaGVja2VkKCkge1xuICAgICAgcmV0dXJuIHRoaXMubm9kZS5pc1NhbWVOb2RlKHRoaXMuY2hlY2tlZFZhbHVlKTtcbiAgICB9LFxuICAgIGluQWN0aXZlUGF0aDogZnVuY3Rpb24gaW5BY3RpdmVQYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNJblBhdGgodGhpcy5wYW5lbC5hY3RpdmVQYXRoKTtcbiAgICB9LFxuICAgIGluQ2hlY2tlZFBhdGg6IGZ1bmN0aW9uIGluQ2hlY2tlZFBhdGgoKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICBpZiAoIXRoaXMuY29uZmlnLmNoZWNrU3RyaWN0bHkpIHJldHVybiBmYWxzZTtcblxuICAgICAgcmV0dXJuIHRoaXMucGFuZWwuY2hlY2tlZE5vZGVQYXRocy5zb21lKGZ1bmN0aW9uIChjaGVja2VkUGF0aCkge1xuICAgICAgICByZXR1cm4gX3RoaXMuaXNJblBhdGgoY2hlY2tlZFBhdGgpO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICB2YWx1ZTogZnVuY3Rpb24gdmFsdWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5ub2RlLmdldFZhbHVlQnlPcHRpb24oKTtcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGhhbmRsZUV4cGFuZDogZnVuY3Rpb24gaGFuZGxlRXhwYW5kKCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHZhciBwYW5lbCA9IHRoaXMucGFuZWwsXG4gICAgICAgICAgbm9kZSA9IHRoaXMubm9kZSxcbiAgICAgICAgICBpc0Rpc2FibGVkID0gdGhpcy5pc0Rpc2FibGVkLFxuICAgICAgICAgIGNvbmZpZyA9IHRoaXMuY29uZmlnO1xuICAgICAgdmFyIG11bHRpcGxlID0gY29uZmlnLm11bHRpcGxlLFxuICAgICAgICAgIGNoZWNrU3RyaWN0bHkgPSBjb25maWcuY2hlY2tTdHJpY3RseTtcblxuXG4gICAgICBpZiAoIWNoZWNrU3RyaWN0bHkgJiYgaXNEaXNhYmxlZCB8fCBub2RlLmxvYWRpbmcpIHJldHVybjtcblxuICAgICAgaWYgKGNvbmZpZy5sYXp5ICYmICFub2RlLmxvYWRlZCkge1xuICAgICAgICBwYW5lbC5sYXp5TG9hZChub2RlLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgLy8gZG8gbm90IHVzZSBjYWNoZWQgbGVhZiB2YWx1ZSBoZXJlLCBpbnZva2UgdGhpcy5pc0xlYWYgdG8gZ2V0IG5ldyB2YWx1ZS5cbiAgICAgICAgICB2YXIgaXNMZWFmID0gX3RoaXMyLmlzTGVhZjtcblxuXG4gICAgICAgICAgaWYgKCFpc0xlYWYpIF90aGlzMi5oYW5kbGVFeHBhbmQoKTtcbiAgICAgICAgICBpZiAobXVsdGlwbGUpIHtcbiAgICAgICAgICAgIC8vIGlmIGxlYWYgc3luYyBjaGVja2VkIHN0YXRlLCBlbHNlIGNsZWFyIGNoZWNrZWQgc3RhdGVcbiAgICAgICAgICAgIHZhciBjaGVja2VkID0gaXNMZWFmID8gbm9kZS5jaGVja2VkIDogZmFsc2U7XG4gICAgICAgICAgICBfdGhpczIuaGFuZGxlTXVsdGlDaGVja0NoYW5nZShjaGVja2VkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFuZWwuaGFuZGxlRXhwYW5kKG5vZGUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgaGFuZGxlQ2hlY2tDaGFuZ2U6IGZ1bmN0aW9uIGhhbmRsZUNoZWNrQ2hhbmdlKCkge1xuICAgICAgdmFyIHBhbmVsID0gdGhpcy5wYW5lbCxcbiAgICAgICAgICB2YWx1ZSA9IHRoaXMudmFsdWUsXG4gICAgICAgICAgbm9kZSA9IHRoaXMubm9kZTtcblxuICAgICAgcGFuZWwuaGFuZGxlQ2hlY2tDaGFuZ2UodmFsdWUpO1xuICAgICAgcGFuZWwuaGFuZGxlRXhwYW5kKG5vZGUpO1xuICAgIH0sXG4gICAgaGFuZGxlTXVsdGlDaGVja0NoYW5nZTogZnVuY3Rpb24gaGFuZGxlTXVsdGlDaGVja0NoYW5nZShjaGVja2VkKSB7XG4gICAgICB0aGlzLm5vZGUuZG9DaGVjayhjaGVja2VkKTtcbiAgICAgIHRoaXMucGFuZWwuY2FsY3VsYXRlTXVsdGlDaGVja2VkVmFsdWUoKTtcbiAgICB9LFxuICAgIGlzSW5QYXRoOiBmdW5jdGlvbiBpc0luUGF0aChwYXRoTm9kZXMpIHtcbiAgICAgIHZhciBub2RlID0gdGhpcy5ub2RlO1xuXG4gICAgICB2YXIgc2VsZWN0ZWRQYXRoTm9kZSA9IHBhdGhOb2Rlc1tub2RlLmxldmVsIC0gMV0gfHwge307XG4gICAgICByZXR1cm4gc2VsZWN0ZWRQYXRoTm9kZS51aWQgPT09IG5vZGUudWlkO1xuICAgIH0sXG4gICAgcmVuZGVyUHJlZml4OiBmdW5jdGlvbiByZW5kZXJQcmVmaXgoaCkge1xuICAgICAgdmFyIGlzTGVhZiA9IHRoaXMuaXNMZWFmLFxuICAgICAgICAgIGlzQ2hlY2tlZCA9IHRoaXMuaXNDaGVja2VkLFxuICAgICAgICAgIGNvbmZpZyA9IHRoaXMuY29uZmlnO1xuICAgICAgdmFyIGNoZWNrU3RyaWN0bHkgPSBjb25maWcuY2hlY2tTdHJpY3RseSxcbiAgICAgICAgICBtdWx0aXBsZSA9IGNvbmZpZy5tdWx0aXBsZTtcblxuXG4gICAgICBpZiAobXVsdGlwbGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyQ2hlY2tib3goaCk7XG4gICAgICB9IGVsc2UgaWYgKGNoZWNrU3RyaWN0bHkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyUmFkaW8oaCk7XG4gICAgICB9IGVsc2UgaWYgKGlzTGVhZiAmJiBpc0NoZWNrZWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyQ2hlY2tJY29uKGgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9LFxuICAgIHJlbmRlclBvc3RmaXg6IGZ1bmN0aW9uIHJlbmRlclBvc3RmaXgoaCkge1xuICAgICAgdmFyIG5vZGUgPSB0aGlzLm5vZGUsXG4gICAgICAgICAgaXNMZWFmID0gdGhpcy5pc0xlYWY7XG5cblxuICAgICAgaWYgKG5vZGUubG9hZGluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJMb2FkaW5nSWNvbihoKTtcbiAgICAgIH0gZWxzZSBpZiAoIWlzTGVhZikge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJFeHBhbmRJY29uKGgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9LFxuICAgIHJlbmRlckNoZWNrYm94OiBmdW5jdGlvbiByZW5kZXJDaGVja2JveChoKSB7XG4gICAgICB2YXIgbm9kZSA9IHRoaXMubm9kZSxcbiAgICAgICAgICBjb25maWcgPSB0aGlzLmNvbmZpZyxcbiAgICAgICAgICBpc0Rpc2FibGVkID0gdGhpcy5pc0Rpc2FibGVkO1xuXG4gICAgICB2YXIgZXZlbnRzID0ge1xuICAgICAgICBvbjogeyBjaGFuZ2U6IHRoaXMuaGFuZGxlTXVsdGlDaGVja0NoYW5nZSB9LFxuICAgICAgICBuYXRpdmVPbjoge31cbiAgICAgIH07XG5cbiAgICAgIGlmIChjb25maWcuY2hlY2tTdHJpY3RseSkge1xuICAgICAgICAvLyB3aGVuIGV2ZXJ5IG5vZGUgaXMgc2VsZWN0YWJsZSwgY2xpY2sgZXZlbnQgc2hvdWxkIG5vdCB0cmlnZ2VyIGV4cGFuZCBldmVudC5cbiAgICAgICAgZXZlbnRzLm5hdGl2ZU9uLmNsaWNrID0gc3RvcFByb3BhZ2F0aW9uO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaCgnZWwtY2hlY2tib3gnLCBleHRlcm5hbF9iYWJlbF9oZWxwZXJfdnVlX2pzeF9tZXJnZV9wcm9wc19kZWZhdWx0KCkoW3tcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICB2YWx1ZTogbm9kZS5jaGVja2VkLFxuICAgICAgICAgIGluZGV0ZXJtaW5hdGU6IG5vZGUuaW5kZXRlcm1pbmF0ZSxcbiAgICAgICAgICBkaXNhYmxlZDogaXNEaXNhYmxlZFxuICAgICAgICB9XG4gICAgICB9LCBldmVudHNdKSk7XG4gICAgfSxcbiAgICByZW5kZXJSYWRpbzogZnVuY3Rpb24gcmVuZGVyUmFkaW8oaCkge1xuICAgICAgdmFyIGNoZWNrZWRWYWx1ZSA9IHRoaXMuY2hlY2tlZFZhbHVlLFxuICAgICAgICAgIHZhbHVlID0gdGhpcy52YWx1ZSxcbiAgICAgICAgICBpc0Rpc2FibGVkID0gdGhpcy5pc0Rpc2FibGVkO1xuXG4gICAgICAvLyB0byBrZWVwIHNhbWUgcmVmZXJlbmNlIGlmIHZhbHVlIGNhdXNlIHJhZGlvJ3MgY2hlY2tlZCBzdGF0ZSBpcyBjYWxjdWxhdGVkIGJ5IHJlZmVyZW5jZSBjb21wYXJpc2lvbjtcblxuICAgICAgaWYgKE9iamVjdCh1dGlsX1tcImlzRXF1YWxcIl0pKHZhbHVlLCBjaGVja2VkVmFsdWUpKSB7XG4gICAgICAgIHZhbHVlID0gY2hlY2tlZFZhbHVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaChcbiAgICAgICAgJ2VsLXJhZGlvJyxcbiAgICAgICAge1xuICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICB2YWx1ZTogY2hlY2tlZFZhbHVlLFxuICAgICAgICAgICAgbGFiZWw6IHZhbHVlLFxuICAgICAgICAgICAgZGlzYWJsZWQ6IGlzRGlzYWJsZWRcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAnY2hhbmdlJzogdGhpcy5oYW5kbGVDaGVja0NoYW5nZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgbmF0aXZlT246IHtcbiAgICAgICAgICAgICdjbGljayc6IHN0b3BQcm9wYWdhdGlvblxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgW2goJ3NwYW4nKV1cbiAgICAgICk7XG4gICAgfSxcbiAgICByZW5kZXJDaGVja0ljb246IGZ1bmN0aW9uIHJlbmRlckNoZWNrSWNvbihoKSB7XG4gICAgICByZXR1cm4gaCgnaScsIHsgJ2NsYXNzJzogJ2VsLWljb24tY2hlY2sgZWwtY2FzY2FkZXItbm9kZV9fcHJlZml4JyB9KTtcbiAgICB9LFxuICAgIHJlbmRlckxvYWRpbmdJY29uOiBmdW5jdGlvbiByZW5kZXJMb2FkaW5nSWNvbihoKSB7XG4gICAgICByZXR1cm4gaCgnaScsIHsgJ2NsYXNzJzogJ2VsLWljb24tbG9hZGluZyBlbC1jYXNjYWRlci1ub2RlX19wb3N0Zml4JyB9KTtcbiAgICB9LFxuICAgIHJlbmRlckV4cGFuZEljb246IGZ1bmN0aW9uIHJlbmRlckV4cGFuZEljb24oaCkge1xuICAgICAgcmV0dXJuIGgoJ2knLCB7ICdjbGFzcyc6ICdlbC1pY29uLWFycm93LXJpZ2h0IGVsLWNhc2NhZGVyLW5vZGVfX3Bvc3RmaXgnIH0pO1xuICAgIH0sXG4gICAgcmVuZGVyQ29udGVudDogZnVuY3Rpb24gcmVuZGVyQ29udGVudChoKSB7XG4gICAgICB2YXIgcGFuZWwgPSB0aGlzLnBhbmVsLFxuICAgICAgICAgIG5vZGUgPSB0aGlzLm5vZGU7XG5cbiAgICAgIHZhciByZW5kZXIgPSBwYW5lbC5yZW5kZXJMYWJlbEZuO1xuICAgICAgdmFyIHZub2RlID0gcmVuZGVyID8gcmVuZGVyKHsgbm9kZTogbm9kZSwgZGF0YTogbm9kZS5kYXRhIH0pIDogbnVsbDtcblxuICAgICAgcmV0dXJuIGgoXG4gICAgICAgICdzcGFuJyxcbiAgICAgICAgeyAnY2xhc3MnOiAnZWwtY2FzY2FkZXItbm9kZV9fbGFiZWwnIH0sXG4gICAgICAgIFt2bm9kZSB8fCBub2RlLmxhYmVsXVxuICAgICAgKTtcbiAgICB9XG4gIH0sXG5cbiAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIoaCkge1xuICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgdmFyIGluQWN0aXZlUGF0aCA9IHRoaXMuaW5BY3RpdmVQYXRoLFxuICAgICAgICBpbkNoZWNrZWRQYXRoID0gdGhpcy5pbkNoZWNrZWRQYXRoLFxuICAgICAgICBpc0NoZWNrZWQgPSB0aGlzLmlzQ2hlY2tlZCxcbiAgICAgICAgaXNMZWFmID0gdGhpcy5pc0xlYWYsXG4gICAgICAgIGlzRGlzYWJsZWQgPSB0aGlzLmlzRGlzYWJsZWQsXG4gICAgICAgIGNvbmZpZyA9IHRoaXMuY29uZmlnLFxuICAgICAgICBub2RlSWQgPSB0aGlzLm5vZGVJZDtcbiAgICB2YXIgZXhwYW5kVHJpZ2dlciA9IGNvbmZpZy5leHBhbmRUcmlnZ2VyLFxuICAgICAgICBjaGVja1N0cmljdGx5ID0gY29uZmlnLmNoZWNrU3RyaWN0bHksXG4gICAgICAgIG11bHRpcGxlID0gY29uZmlnLm11bHRpcGxlO1xuXG4gICAgdmFyIGRpc2FibGVkID0gIWNoZWNrU3RyaWN0bHkgJiYgaXNEaXNhYmxlZDtcbiAgICB2YXIgZXZlbnRzID0geyBvbjoge30gfTtcblxuICAgIGlmIChleHBhbmRUcmlnZ2VyID09PSAnY2xpY2snKSB7XG4gICAgICBldmVudHMub24uY2xpY2sgPSB0aGlzLmhhbmRsZUV4cGFuZDtcbiAgICB9IGVsc2Uge1xuICAgICAgZXZlbnRzLm9uLm1vdXNlZW50ZXIgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICBfdGhpczMuaGFuZGxlRXhwYW5kKCk7XG4gICAgICAgIF90aGlzMy4kZW1pdCgnZXhwYW5kJywgZSk7XG4gICAgICB9O1xuICAgICAgZXZlbnRzLm9uLmZvY3VzID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgX3RoaXMzLmhhbmRsZUV4cGFuZCgpO1xuICAgICAgICBfdGhpczMuJGVtaXQoJ2V4cGFuZCcsIGUpO1xuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKGlzTGVhZiAmJiAhaXNEaXNhYmxlZCAmJiAhY2hlY2tTdHJpY3RseSAmJiAhbXVsdGlwbGUpIHtcbiAgICAgIGV2ZW50cy5vbi5jbGljayA9IHRoaXMuaGFuZGxlQ2hlY2tDaGFuZ2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIGgoXG4gICAgICAnbGknLFxuICAgICAgZXh0ZXJuYWxfYmFiZWxfaGVscGVyX3Z1ZV9qc3hfbWVyZ2VfcHJvcHNfZGVmYXVsdCgpKFt7XG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgcm9sZTogJ21lbnVpdGVtJyxcbiAgICAgICAgICBpZDogbm9kZUlkLFxuICAgICAgICAgICdhcmlhLWV4cGFuZGVkJzogaW5BY3RpdmVQYXRoLFxuICAgICAgICAgIHRhYmluZGV4OiBkaXNhYmxlZCA/IG51bGwgOiAtMVxuICAgICAgICB9LFxuICAgICAgICAnY2xhc3MnOiB7XG4gICAgICAgICAgJ2VsLWNhc2NhZGVyLW5vZGUnOiB0cnVlLFxuICAgICAgICAgICdpcy1zZWxlY3RhYmxlJzogY2hlY2tTdHJpY3RseSxcbiAgICAgICAgICAnaW4tYWN0aXZlLXBhdGgnOiBpbkFjdGl2ZVBhdGgsXG4gICAgICAgICAgJ2luLWNoZWNrZWQtcGF0aCc6IGluQ2hlY2tlZFBhdGgsXG4gICAgICAgICAgJ2lzLWFjdGl2ZSc6IGlzQ2hlY2tlZCxcbiAgICAgICAgICAnaXMtZGlzYWJsZWQnOiBkaXNhYmxlZFxuICAgICAgICB9XG4gICAgICB9LCBldmVudHNdKSxcbiAgICAgIFt0aGlzLnJlbmRlclByZWZpeChoKSwgdGhpcy5yZW5kZXJDb250ZW50KGgpLCB0aGlzLnJlbmRlclBvc3RmaXgoaCldXG4gICAgKTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2Nhc2NhZGVyLXBhbmVsL3NyYy9jYXNjYWRlci1ub2RlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfY2FzY2FkZXJfbm9kZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChjYXNjYWRlcl9ub2RldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBFWFRFUk5BTCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1xudmFyIGNvbXBvbmVudE5vcm1hbGl6ZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2Nhc2NhZGVyLXBhbmVsL3NyYy9jYXNjYWRlci1ub2RlLnZ1ZVxudmFyIGNhc2NhZGVyX25vZGVfcmVuZGVyLCBjYXNjYWRlcl9ub2RlX3N0YXRpY1JlbmRlckZuc1xuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBjb21wb25lbnQgPSBPYmplY3QoY29tcG9uZW50Tm9ybWFsaXplcltcImFcIiAvKiBkZWZhdWx0ICovXSkoXG4gIHNyY19jYXNjYWRlcl9ub2RldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICBjYXNjYWRlcl9ub2RlX3JlbmRlcixcbiAgY2FzY2FkZXJfbm9kZV9zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGFwaTsgfVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy9jYXNjYWRlci1wYW5lbC9zcmMvY2FzY2FkZXItbm9kZS52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgY2FzY2FkZXJfbm9kZSA9IChjb21wb25lbnQuZXhwb3J0cyk7XG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiZWxlbWVudC11aS9saWIvbWl4aW5zL2xvY2FsZVwiXG52YXIgbG9jYWxlXyA9IF9fd2VicGFja19yZXF1aXJlX18oNik7XG52YXIgbG9jYWxlX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGxvY2FsZV8pO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9jYXNjYWRlci1wYW5lbC9zcmMvY2FzY2FkZXItbWVudS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG5cblxuXG5cblxuXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGNhc2NhZGVyX21lbnV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBuYW1lOiAnRWxDYXNjYWRlck1lbnUnLFxuXG4gIG1peGluczogW2xvY2FsZV9kZWZhdWx0LmFdLFxuXG4gIGluamVjdDogWydwYW5lbCddLFxuXG4gIGNvbXBvbmVudHM6IHtcbiAgICBFbFNjcm9sbGJhcjogc2Nyb2xsYmFyX2RlZmF1bHQuYSxcbiAgICBDYXNjYWRlck5vZGU6IGNhc2NhZGVyX25vZGVcbiAgfSxcblxuICBwcm9wczoge1xuICAgIG5vZGVzOiB7XG4gICAgICB0eXBlOiBBcnJheSxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICBpbmRleDogTnVtYmVyXG4gIH0sXG5cbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYWN0aXZlTm9kZTogbnVsbCxcbiAgICAgIGhvdmVyVGltZXI6IG51bGwsXG4gICAgICBpZDogT2JqZWN0KHV0aWxfW1wiZ2VuZXJhdGVJZFwiXSkoKVxuICAgIH07XG4gIH0sXG5cblxuICBjb21wdXRlZDoge1xuICAgIGlzRW1wdHk6IGZ1bmN0aW9uIGlzRW1wdHkoKSB7XG4gICAgICByZXR1cm4gIXRoaXMubm9kZXMubGVuZ3RoO1xuICAgIH0sXG4gICAgbWVudUlkOiBmdW5jdGlvbiBtZW51SWQoKSB7XG4gICAgICByZXR1cm4gJ2Nhc2NhZGVyLW1lbnUtJyArIHRoaXMuaWQgKyAnLScgKyB0aGlzLmluZGV4O1xuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgaGFuZGxlRXhwYW5kOiBmdW5jdGlvbiBoYW5kbGVFeHBhbmQoZSkge1xuICAgICAgdGhpcy5hY3RpdmVOb2RlID0gZS50YXJnZXQ7XG4gICAgfSxcbiAgICBoYW5kbGVNb3VzZU1vdmU6IGZ1bmN0aW9uIGhhbmRsZU1vdXNlTW92ZShlKSB7XG4gICAgICB2YXIgYWN0aXZlTm9kZSA9IHRoaXMuYWN0aXZlTm9kZSxcbiAgICAgICAgICBob3ZlclRpbWVyID0gdGhpcy5ob3ZlclRpbWVyO1xuICAgICAgdmFyIGhvdmVyWm9uZSA9IHRoaXMuJHJlZnMuaG92ZXJab25lO1xuXG5cbiAgICAgIGlmICghYWN0aXZlTm9kZSB8fCAhaG92ZXJab25lKSByZXR1cm47XG5cbiAgICAgIGlmIChhY3RpdmVOb2RlLmNvbnRhaW5zKGUudGFyZ2V0KSkge1xuICAgICAgICBjbGVhclRpbWVvdXQoaG92ZXJUaW1lcik7XG5cbiAgICAgICAgdmFyIF8kZWwkZ2V0Qm91bmRpbmdDbGllbiA9IHRoaXMuJGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLFxuICAgICAgICAgICAgbGVmdCA9IF8kZWwkZ2V0Qm91bmRpbmdDbGllbi5sZWZ0O1xuXG4gICAgICAgIHZhciBzdGFydFggPSBlLmNsaWVudFggLSBsZWZ0O1xuICAgICAgICB2YXIgXyRlbCA9IHRoaXMuJGVsLFxuICAgICAgICAgICAgb2Zmc2V0V2lkdGggPSBfJGVsLm9mZnNldFdpZHRoLFxuICAgICAgICAgICAgb2Zmc2V0SGVpZ2h0ID0gXyRlbC5vZmZzZXRIZWlnaHQ7XG5cbiAgICAgICAgdmFyIHRvcCA9IGFjdGl2ZU5vZGUub2Zmc2V0VG9wO1xuICAgICAgICB2YXIgYm90dG9tID0gdG9wICsgYWN0aXZlTm9kZS5vZmZzZXRIZWlnaHQ7XG5cbiAgICAgICAgaG92ZXJab25lLmlubmVySFRNTCA9ICdcXG4gICAgICAgICAgPHBhdGggc3R5bGU9XCJwb2ludGVyLWV2ZW50czogYXV0bztcIiBmaWxsPVwidHJhbnNwYXJlbnRcIiBkPVwiTScgKyBzdGFydFggKyAnICcgKyB0b3AgKyAnIEwnICsgb2Zmc2V0V2lkdGggKyAnIDAgVicgKyB0b3AgKyAnIFpcIiAvPlxcbiAgICAgICAgICA8cGF0aCBzdHlsZT1cInBvaW50ZXItZXZlbnRzOiBhdXRvO1wiIGZpbGw9XCJ0cmFuc3BhcmVudFwiIGQ9XCJNJyArIHN0YXJ0WCArICcgJyArIGJvdHRvbSArICcgTCcgKyBvZmZzZXRXaWR0aCArICcgJyArIG9mZnNldEhlaWdodCArICcgVicgKyBib3R0b20gKyAnIFpcIiAvPlxcbiAgICAgICAgJztcbiAgICAgIH0gZWxzZSBpZiAoIWhvdmVyVGltZXIpIHtcbiAgICAgICAgdGhpcy5ob3ZlclRpbWVyID0gc2V0VGltZW91dCh0aGlzLmNsZWFySG92ZXJab25lLCB0aGlzLnBhbmVsLmNvbmZpZy5ob3ZlclRocmVzaG9sZCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBjbGVhckhvdmVyWm9uZTogZnVuY3Rpb24gY2xlYXJIb3ZlclpvbmUoKSB7XG4gICAgICB2YXIgaG92ZXJab25lID0gdGhpcy4kcmVmcy5ob3ZlclpvbmU7XG5cbiAgICAgIGlmICghaG92ZXJab25lKSByZXR1cm47XG4gICAgICBob3ZlclpvbmUuaW5uZXJIVE1MID0gJyc7XG4gICAgfSxcbiAgICByZW5kZXJFbXB0eVRleHQ6IGZ1bmN0aW9uIHJlbmRlckVtcHR5VGV4dChoKSB7XG4gICAgICByZXR1cm4gaChcbiAgICAgICAgJ2RpdicsXG4gICAgICAgIHsgJ2NsYXNzJzogJ2VsLWNhc2NhZGVyLW1lbnVfX2VtcHR5LXRleHQnIH0sXG4gICAgICAgIFt0aGlzLnQoJ2VsLmNhc2NhZGVyLm5vRGF0YScpXVxuICAgICAgKTtcbiAgICB9LFxuICAgIHJlbmRlck5vZGVMaXN0OiBmdW5jdGlvbiByZW5kZXJOb2RlTGlzdChoKSB7XG4gICAgICB2YXIgbWVudUlkID0gdGhpcy5tZW51SWQ7XG4gICAgICB2YXIgaXNIb3Zlck1lbnUgPSB0aGlzLnBhbmVsLmlzSG92ZXJNZW51O1xuXG4gICAgICB2YXIgZXZlbnRzID0geyBvbjoge30gfTtcblxuICAgICAgaWYgKGlzSG92ZXJNZW51KSB7XG4gICAgICAgIGV2ZW50cy5vbi5leHBhbmQgPSB0aGlzLmhhbmRsZUV4cGFuZDtcbiAgICAgIH1cblxuICAgICAgdmFyIG5vZGVzID0gdGhpcy5ub2Rlcy5tYXAoZnVuY3Rpb24gKG5vZGUsIGluZGV4KSB7XG4gICAgICAgIHZhciBoYXNDaGlsZHJlbiA9IG5vZGUuaGFzQ2hpbGRyZW47XG5cbiAgICAgICAgcmV0dXJuIGgoJ2Nhc2NhZGVyLW5vZGUnLCBleHRlcm5hbF9iYWJlbF9oZWxwZXJfdnVlX2pzeF9tZXJnZV9wcm9wc19kZWZhdWx0KCkoW3tcbiAgICAgICAgICBrZXk6IG5vZGUudWlkLFxuICAgICAgICAgIGF0dHJzOiB7IG5vZGU6IG5vZGUsXG4gICAgICAgICAgICAnbm9kZS1pZCc6IG1lbnVJZCArICctJyArIGluZGV4LFxuICAgICAgICAgICAgJ2FyaWEtaGFzcG9wdXAnOiBoYXNDaGlsZHJlbixcbiAgICAgICAgICAgICdhcmlhLW93bnMnOiBoYXNDaGlsZHJlbiA/IG1lbnVJZCA6IG51bGxcbiAgICAgICAgICB9XG4gICAgICAgIH0sIGV2ZW50c10pKTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gW10uY29uY2F0KG5vZGVzLCBbaXNIb3Zlck1lbnUgPyBoKCdzdmcnLCB7IHJlZjogJ2hvdmVyWm9uZScsICdjbGFzcyc6ICdlbC1jYXNjYWRlci1tZW51X19ob3Zlci16b25lJyB9KSA6IG51bGxdKTtcbiAgICB9XG4gIH0sXG5cbiAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIoaCkge1xuICAgIHZhciBpc0VtcHR5ID0gdGhpcy5pc0VtcHR5LFxuICAgICAgICBtZW51SWQgPSB0aGlzLm1lbnVJZDtcblxuICAgIHZhciBldmVudHMgPSB7IG5hdGl2ZU9uOiB7fSB9O1xuXG4gICAgLy8gb3B0aW1pemUgaG92ZXIgdG8gZXhwYW5kIGV4cGVyaWVuY2UgKCM4MDEwKVxuICAgIGlmICh0aGlzLnBhbmVsLmlzSG92ZXJNZW51KSB7XG4gICAgICBldmVudHMubmF0aXZlT24ubW91c2Vtb3ZlID0gdGhpcy5oYW5kbGVNb3VzZU1vdmU7XG4gICAgICAvLyBldmVudHMubmF0aXZlT24ubW91c2VsZWF2ZSA9IHRoaXMuY2xlYXJIb3ZlclpvbmU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGgoXG4gICAgICAnZWwtc2Nyb2xsYmFyJyxcbiAgICAgIGV4dGVybmFsX2JhYmVsX2hlbHBlcl92dWVfanN4X21lcmdlX3Byb3BzX2RlZmF1bHQoKShbe1xuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIHRhZzogJ3VsJyxcbiAgICAgICAgICByb2xlOiAnbWVudScsXG4gICAgICAgICAgaWQ6IG1lbnVJZCxcblxuICAgICAgICAgICd3cmFwLWNsYXNzJzogJ2VsLWNhc2NhZGVyLW1lbnVfX3dyYXAnLFxuICAgICAgICAgICd2aWV3LWNsYXNzJzoge1xuICAgICAgICAgICAgJ2VsLWNhc2NhZGVyLW1lbnVfX2xpc3QnOiB0cnVlLFxuICAgICAgICAgICAgJ2lzLWVtcHR5JzogaXNFbXB0eVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgJ2NsYXNzJzogJ2VsLWNhc2NhZGVyLW1lbnUnIH0sIGV2ZW50c10pLFxuICAgICAgW2lzRW1wdHkgPyB0aGlzLnJlbmRlckVtcHR5VGV4dChoKSA6IHRoaXMucmVuZGVyTm9kZUxpc3QoaCldXG4gICAgKTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2Nhc2NhZGVyLXBhbmVsL3NyYy9jYXNjYWRlci1tZW51LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfY2FzY2FkZXJfbWVudXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChjYXNjYWRlcl9tZW51dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2Nhc2NhZGVyLXBhbmVsL3NyYy9jYXNjYWRlci1tZW51LnZ1ZVxudmFyIGNhc2NhZGVyX21lbnVfcmVuZGVyLCBjYXNjYWRlcl9tZW51X3N0YXRpY1JlbmRlckZuc1xuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBjYXNjYWRlcl9tZW51X2NvbXBvbmVudCA9IE9iamVjdChjb21wb25lbnROb3JtYWxpemVyW1wiYVwiIC8qIGRlZmF1bHQgKi9dKShcbiAgc3JjX2Nhc2NhZGVyX21lbnV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIGNhc2NhZGVyX21lbnVfcmVuZGVyLFxuICBjYXNjYWRlcl9tZW51X3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgY2FzY2FkZXJfbWVudV9hcGk7IH1cbmNhc2NhZGVyX21lbnVfY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy9jYXNjYWRlci1wYW5lbC9zcmMvY2FzY2FkZXItbWVudS52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgY2FzY2FkZXJfbWVudSA9IChjYXNjYWRlcl9tZW51X2NvbXBvbmVudC5leHBvcnRzKTtcbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJlbGVtZW50LXVpL2xpYi91dGlscy9zaGFyZWRcIlxudmFyIHNoYXJlZF8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jYXNjYWRlci1wYW5lbC9zcmMvbm9kZS5qc1xudmFyIF9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuXG5cblxudmFyIHVpZCA9IDA7XG5cbnZhciBub2RlX05vZGUgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIE5vZGUoZGF0YSwgY29uZmlnLCBwYXJlbnROb2RlKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIE5vZGUpO1xuXG4gICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICB0aGlzLnBhcmVudCA9IHBhcmVudE5vZGUgfHwgbnVsbDtcbiAgICB0aGlzLmxldmVsID0gIXRoaXMucGFyZW50ID8gMSA6IHRoaXMucGFyZW50LmxldmVsICsgMTtcbiAgICB0aGlzLnVpZCA9IHVpZCsrO1xuXG4gICAgdGhpcy5pbml0U3RhdGUoKTtcbiAgICB0aGlzLmluaXRDaGlsZHJlbigpO1xuICB9XG5cbiAgTm9kZS5wcm90b3R5cGUuaW5pdFN0YXRlID0gZnVuY3Rpb24gaW5pdFN0YXRlKCkge1xuICAgIHZhciBfY29uZmlnID0gdGhpcy5jb25maWcsXG4gICAgICAgIHZhbHVlS2V5ID0gX2NvbmZpZy52YWx1ZSxcbiAgICAgICAgbGFiZWxLZXkgPSBfY29uZmlnLmxhYmVsO1xuXG5cbiAgICB0aGlzLnZhbHVlID0gdGhpcy5kYXRhW3ZhbHVlS2V5XTtcbiAgICB0aGlzLmxhYmVsID0gdGhpcy5kYXRhW2xhYmVsS2V5XTtcbiAgICB0aGlzLnBhdGhOb2RlcyA9IHRoaXMuY2FsY3VsYXRlUGF0aE5vZGVzKCk7XG4gICAgdGhpcy5wYXRoID0gdGhpcy5wYXRoTm9kZXMubWFwKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICByZXR1cm4gbm9kZS52YWx1ZTtcbiAgICB9KTtcbiAgICB0aGlzLnBhdGhMYWJlbHMgPSB0aGlzLnBhdGhOb2Rlcy5tYXAoZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgIHJldHVybiBub2RlLmxhYmVsO1xuICAgIH0pO1xuXG4gICAgLy8gbGF6eSBsb2FkXG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgdGhpcy5sb2FkZWQgPSBmYWxzZTtcbiAgfTtcblxuICBOb2RlLnByb3RvdHlwZS5pbml0Q2hpbGRyZW4gPSBmdW5jdGlvbiBpbml0Q2hpbGRyZW4oKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHZhciBjb25maWcgPSB0aGlzLmNvbmZpZztcblxuICAgIHZhciBjaGlsZHJlbktleSA9IGNvbmZpZy5jaGlsZHJlbjtcbiAgICB2YXIgY2hpbGRyZW5EYXRhID0gdGhpcy5kYXRhW2NoaWxkcmVuS2V5XTtcbiAgICB0aGlzLmhhc0NoaWxkcmVuID0gQXJyYXkuaXNBcnJheShjaGlsZHJlbkRhdGEpO1xuICAgIHRoaXMuY2hpbGRyZW4gPSAoY2hpbGRyZW5EYXRhIHx8IFtdKS5tYXAoZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICByZXR1cm4gbmV3IE5vZGUoY2hpbGQsIGNvbmZpZywgX3RoaXMpO1xuICAgIH0pO1xuICB9O1xuXG4gIE5vZGUucHJvdG90eXBlLmNhbGN1bGF0ZVBhdGhOb2RlcyA9IGZ1bmN0aW9uIGNhbGN1bGF0ZVBhdGhOb2RlcygpIHtcbiAgICB2YXIgbm9kZXMgPSBbdGhpc107XG4gICAgdmFyIHBhcmVudCA9IHRoaXMucGFyZW50O1xuXG4gICAgd2hpbGUgKHBhcmVudCkge1xuICAgICAgbm9kZXMudW5zaGlmdChwYXJlbnQpO1xuICAgICAgcGFyZW50ID0gcGFyZW50LnBhcmVudDtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZXM7XG4gIH07XG5cbiAgTm9kZS5wcm90b3R5cGUuZ2V0UGF0aCA9IGZ1bmN0aW9uIGdldFBhdGgoKSB7XG4gICAgcmV0dXJuIHRoaXMucGF0aDtcbiAgfTtcblxuICBOb2RlLnByb3RvdHlwZS5nZXRWYWx1ZSA9IGZ1bmN0aW9uIGdldFZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICB9O1xuXG4gIE5vZGUucHJvdG90eXBlLmdldFZhbHVlQnlPcHRpb24gPSBmdW5jdGlvbiBnZXRWYWx1ZUJ5T3B0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5lbWl0UGF0aCA/IHRoaXMuZ2V0UGF0aCgpIDogdGhpcy5nZXRWYWx1ZSgpO1xuICB9O1xuXG4gIE5vZGUucHJvdG90eXBlLmdldFRleHQgPSBmdW5jdGlvbiBnZXRUZXh0KGFsbExldmVscywgc2VwYXJhdG9yKSB7XG4gICAgcmV0dXJuIGFsbExldmVscyA/IHRoaXMucGF0aExhYmVscy5qb2luKHNlcGFyYXRvcikgOiB0aGlzLmxhYmVsO1xuICB9O1xuXG4gIE5vZGUucHJvdG90eXBlLmlzU2FtZU5vZGUgPSBmdW5jdGlvbiBpc1NhbWVOb2RlKGNoZWNrZWRWYWx1ZSkge1xuICAgIHZhciB2YWx1ZSA9IHRoaXMuZ2V0VmFsdWVCeU9wdGlvbigpO1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5tdWx0aXBsZSAmJiBBcnJheS5pc0FycmF5KGNoZWNrZWRWYWx1ZSkgPyBjaGVja2VkVmFsdWUuc29tZShmdW5jdGlvbiAodmFsKSB7XG4gICAgICByZXR1cm4gT2JqZWN0KHV0aWxfW1wiaXNFcXVhbFwiXSkodmFsLCB2YWx1ZSk7XG4gICAgfSkgOiBPYmplY3QodXRpbF9bXCJpc0VxdWFsXCJdKShjaGVja2VkVmFsdWUsIHZhbHVlKTtcbiAgfTtcblxuICBOb2RlLnByb3RvdHlwZS5icm9hZGNhc3QgPSBmdW5jdGlvbiBicm9hZGNhc3QoZXZlbnQpIHtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHZhciBoYW5kbGVyTmFtZSA9ICdvblBhcmVudCcgKyBPYmplY3QodXRpbF9bXCJjYXBpdGFsaXplXCJdKShldmVudCk7XG5cbiAgICB0aGlzLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICBpZiAoY2hpbGQpIHtcbiAgICAgICAgLy8gYm90dG9tIHVwXG4gICAgICAgIGNoaWxkLmJyb2FkY2FzdC5hcHBseShjaGlsZCwgW2V2ZW50XS5jb25jYXQoYXJncykpO1xuICAgICAgICBjaGlsZFtoYW5kbGVyTmFtZV0gJiYgY2hpbGRbaGFuZGxlck5hbWVdLmFwcGx5KGNoaWxkLCBhcmdzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBOb2RlLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gZW1pdChldmVudCkge1xuICAgIHZhciBwYXJlbnQgPSB0aGlzLnBhcmVudDtcblxuICAgIHZhciBoYW5kbGVyTmFtZSA9ICdvbkNoaWxkJyArIE9iamVjdCh1dGlsX1tcImNhcGl0YWxpemVcIl0pKGV2ZW50KTtcbiAgICBpZiAocGFyZW50KSB7XG4gICAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVuMiA+IDEgPyBfbGVuMiAtIDEgOiAwKSwgX2tleTIgPSAxOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICAgIGFyZ3NbX2tleTIgLSAxXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgICB9XG5cbiAgICAgIHBhcmVudFtoYW5kbGVyTmFtZV0gJiYgcGFyZW50W2hhbmRsZXJOYW1lXS5hcHBseShwYXJlbnQsIGFyZ3MpO1xuICAgICAgcGFyZW50LmVtaXQuYXBwbHkocGFyZW50LCBbZXZlbnRdLmNvbmNhdChhcmdzKSk7XG4gICAgfVxuICB9O1xuXG4gIE5vZGUucHJvdG90eXBlLm9uUGFyZW50Q2hlY2sgPSBmdW5jdGlvbiBvblBhcmVudENoZWNrKGNoZWNrZWQpIHtcbiAgICBpZiAoIXRoaXMuaXNEaXNhYmxlZCkge1xuICAgICAgdGhpcy5zZXRDaGVja1N0YXRlKGNoZWNrZWQpO1xuICAgIH1cbiAgfTtcblxuICBOb2RlLnByb3RvdHlwZS5vbkNoaWxkQ2hlY2sgPSBmdW5jdGlvbiBvbkNoaWxkQ2hlY2soKSB7XG4gICAgdmFyIGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbjtcblxuICAgIHZhciB2YWxpZENoaWxkcmVuID0gY2hpbGRyZW4uZmlsdGVyKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgcmV0dXJuICFjaGlsZC5pc0Rpc2FibGVkO1xuICAgIH0pO1xuICAgIHZhciBjaGVja2VkID0gdmFsaWRDaGlsZHJlbi5sZW5ndGggPyB2YWxpZENoaWxkcmVuLmV2ZXJ5KGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgcmV0dXJuIGNoaWxkLmNoZWNrZWQ7XG4gICAgfSkgOiBmYWxzZTtcblxuICAgIHRoaXMuc2V0Q2hlY2tTdGF0ZShjaGVja2VkKTtcbiAgfTtcblxuICBOb2RlLnByb3RvdHlwZS5zZXRDaGVja1N0YXRlID0gZnVuY3Rpb24gc2V0Q2hlY2tTdGF0ZShjaGVja2VkKSB7XG4gICAgdmFyIHRvdGFsTnVtID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7XG4gICAgdmFyIGNoZWNrZWROdW0gPSB0aGlzLmNoaWxkcmVuLnJlZHVjZShmdW5jdGlvbiAoYywgcCkge1xuICAgICAgdmFyIG51bSA9IHAuY2hlY2tlZCA/IDEgOiBwLmluZGV0ZXJtaW5hdGUgPyAwLjUgOiAwO1xuICAgICAgcmV0dXJuIGMgKyBudW07XG4gICAgfSwgMCk7XG5cbiAgICB0aGlzLmNoZWNrZWQgPSBjaGVja2VkO1xuICAgIHRoaXMuaW5kZXRlcm1pbmF0ZSA9IGNoZWNrZWROdW0gIT09IHRvdGFsTnVtICYmIGNoZWNrZWROdW0gPiAwO1xuICB9O1xuXG4gIE5vZGUucHJvdG90eXBlLnN5bmNDaGVja1N0YXRlID0gZnVuY3Rpb24gc3luY0NoZWNrU3RhdGUoY2hlY2tlZFZhbHVlKSB7XG4gICAgdmFyIHZhbHVlID0gdGhpcy5nZXRWYWx1ZUJ5T3B0aW9uKCk7XG4gICAgdmFyIGNoZWNrZWQgPSB0aGlzLmlzU2FtZU5vZGUoY2hlY2tlZFZhbHVlLCB2YWx1ZSk7XG5cbiAgICB0aGlzLmRvQ2hlY2soY2hlY2tlZCk7XG4gIH07XG5cbiAgTm9kZS5wcm90b3R5cGUuZG9DaGVjayA9IGZ1bmN0aW9uIGRvQ2hlY2soY2hlY2tlZCkge1xuICAgIGlmICh0aGlzLmNoZWNrZWQgIT09IGNoZWNrZWQpIHtcbiAgICAgIGlmICh0aGlzLmNvbmZpZy5jaGVja1N0cmljdGx5KSB7XG4gICAgICAgIHRoaXMuY2hlY2tlZCA9IGNoZWNrZWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBib3R0b20gdXAgdG8gdW5pZnkgdGhlIGNhbGN1bGF0aW9uIG9mIHRoZSBpbmRldGVybWluYXRlIHN0YXRlXG4gICAgICAgIHRoaXMuYnJvYWRjYXN0KCdjaGVjaycsIGNoZWNrZWQpO1xuICAgICAgICB0aGlzLnNldENoZWNrU3RhdGUoY2hlY2tlZCk7XG4gICAgICAgIHRoaXMuZW1pdCgnY2hlY2snKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgX2NyZWF0ZUNsYXNzKE5vZGUsIFt7XG4gICAga2V5OiAnaXNEaXNhYmxlZCcsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSxcbiAgICAgICAgICBwYXJlbnQgPSB0aGlzLnBhcmVudCxcbiAgICAgICAgICBjb25maWcgPSB0aGlzLmNvbmZpZztcblxuICAgICAgdmFyIGRpc2FibGVkS2V5ID0gY29uZmlnLmRpc2FibGVkO1xuICAgICAgdmFyIGNoZWNrU3RyaWN0bHkgPSBjb25maWcuY2hlY2tTdHJpY3RseTtcblxuICAgICAgcmV0dXJuIGRhdGFbZGlzYWJsZWRLZXldIHx8ICFjaGVja1N0cmljdGx5ICYmIHBhcmVudCAmJiBwYXJlbnQuaXNEaXNhYmxlZDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdpc0xlYWYnLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEsXG4gICAgICAgICAgbG9hZGVkID0gdGhpcy5sb2FkZWQsXG4gICAgICAgICAgaGFzQ2hpbGRyZW4gPSB0aGlzLmhhc0NoaWxkcmVuLFxuICAgICAgICAgIGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbjtcbiAgICAgIHZhciBfY29uZmlnMiA9IHRoaXMuY29uZmlnLFxuICAgICAgICAgIGxhenkgPSBfY29uZmlnMi5sYXp5LFxuICAgICAgICAgIGxlYWZLZXkgPSBfY29uZmlnMi5sZWFmO1xuXG4gICAgICBpZiAobGF6eSkge1xuICAgICAgICB2YXIgaXNMZWFmID0gT2JqZWN0KHNoYXJlZF9bXCJpc0RlZlwiXSkoZGF0YVtsZWFmS2V5XSkgPyBkYXRhW2xlYWZLZXldIDogbG9hZGVkID8gIWNoaWxkcmVuLmxlbmd0aCA6IGZhbHNlO1xuICAgICAgICB0aGlzLmhhc0NoaWxkcmVuID0gIWlzTGVhZjtcbiAgICAgICAgcmV0dXJuIGlzTGVhZjtcbiAgICAgIH1cbiAgICAgIHJldHVybiAhaGFzQ2hpbGRyZW47XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIE5vZGU7XG59KCk7XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY19ub2RlID0gKG5vZGVfTm9kZSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2Nhc2NhZGVyLXBhbmVsL3NyYy9zdG9yZS5qc1xuZnVuY3Rpb24gc3RvcmVfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5cblxuXG52YXIgZmxhdE5vZGVzID0gZnVuY3Rpb24gZmxhdE5vZGVzKGRhdGEsIGxlYWZPbmx5KSB7XG4gIHJldHVybiBkYXRhLnJlZHVjZShmdW5jdGlvbiAocmVzLCBub2RlKSB7XG4gICAgaWYgKG5vZGUuaXNMZWFmKSB7XG4gICAgICByZXMucHVzaChub2RlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgIWxlYWZPbmx5ICYmIHJlcy5wdXNoKG5vZGUpO1xuICAgICAgcmVzID0gcmVzLmNvbmNhdChmbGF0Tm9kZXMobm9kZS5jaGlsZHJlbiwgbGVhZk9ubHkpKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfSwgW10pO1xufTtcblxudmFyIHN0b3JlX1N0b3JlID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBTdG9yZShkYXRhLCBjb25maWcpIHtcbiAgICBzdG9yZV9jbGFzc0NhbGxDaGVjayh0aGlzLCBTdG9yZSk7XG5cbiAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICB0aGlzLmluaXROb2RlcyhkYXRhKTtcbiAgfVxuXG4gIFN0b3JlLnByb3RvdHlwZS5pbml0Tm9kZXMgPSBmdW5jdGlvbiBpbml0Tm9kZXMoZGF0YSkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICBkYXRhID0gT2JqZWN0KHV0aWxfW1wiY29lcmNlVHJ1dGh5VmFsdWVUb0FycmF5XCJdKShkYXRhKTtcbiAgICB0aGlzLm5vZGVzID0gZGF0YS5tYXAoZnVuY3Rpb24gKG5vZGVEYXRhKSB7XG4gICAgICByZXR1cm4gbmV3IHNyY19ub2RlKG5vZGVEYXRhLCBfdGhpcy5jb25maWcpO1xuICAgIH0pO1xuICAgIHRoaXMuZmxhdHRlZE5vZGVzID0gdGhpcy5nZXRGbGF0dGVkTm9kZXMoZmFsc2UsIGZhbHNlKTtcbiAgICB0aGlzLmxlYWZOb2RlcyA9IHRoaXMuZ2V0RmxhdHRlZE5vZGVzKHRydWUsIGZhbHNlKTtcbiAgfTtcblxuICBTdG9yZS5wcm90b3R5cGUuYXBwZW5kTm9kZSA9IGZ1bmN0aW9uIGFwcGVuZE5vZGUobm9kZURhdGEsIHBhcmVudE5vZGUpIHtcbiAgICB2YXIgbm9kZSA9IG5ldyBzcmNfbm9kZShub2RlRGF0YSwgdGhpcy5jb25maWcsIHBhcmVudE5vZGUpO1xuICAgIHZhciBjaGlsZHJlbiA9IHBhcmVudE5vZGUgPyBwYXJlbnROb2RlLmNoaWxkcmVuIDogdGhpcy5ub2RlcztcblxuICAgIGNoaWxkcmVuLnB1c2gobm9kZSk7XG4gIH07XG5cbiAgU3RvcmUucHJvdG90eXBlLmFwcGVuZE5vZGVzID0gZnVuY3Rpb24gYXBwZW5kTm9kZXMobm9kZURhdGFMaXN0LCBwYXJlbnROb2RlKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICBub2RlRGF0YUxpc3QgPSBPYmplY3QodXRpbF9bXCJjb2VyY2VUcnV0aHlWYWx1ZVRvQXJyYXlcIl0pKG5vZGVEYXRhTGlzdCk7XG4gICAgbm9kZURhdGFMaXN0LmZvckVhY2goZnVuY3Rpb24gKG5vZGVEYXRhKSB7XG4gICAgICByZXR1cm4gX3RoaXMyLmFwcGVuZE5vZGUobm9kZURhdGEsIHBhcmVudE5vZGUpO1xuICAgIH0pO1xuICB9O1xuXG4gIFN0b3JlLnByb3RvdHlwZS5nZXROb2RlcyA9IGZ1bmN0aW9uIGdldE5vZGVzKCkge1xuICAgIHJldHVybiB0aGlzLm5vZGVzO1xuICB9O1xuXG4gIFN0b3JlLnByb3RvdHlwZS5nZXRGbGF0dGVkTm9kZXMgPSBmdW5jdGlvbiBnZXRGbGF0dGVkTm9kZXMobGVhZk9ubHkpIHtcbiAgICB2YXIgY2FjaGVkID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB0cnVlO1xuXG4gICAgdmFyIGNhY2hlZE5vZGVzID0gbGVhZk9ubHkgPyB0aGlzLmxlYWZOb2RlcyA6IHRoaXMuZmxhdHRlZE5vZGVzO1xuICAgIHJldHVybiBjYWNoZWQgPyBjYWNoZWROb2RlcyA6IGZsYXROb2Rlcyh0aGlzLm5vZGVzLCBsZWFmT25seSk7XG4gIH07XG5cbiAgU3RvcmUucHJvdG90eXBlLmdldE5vZGVCeVZhbHVlID0gZnVuY3Rpb24gZ2V0Tm9kZUJ5VmFsdWUodmFsdWUpIHtcbiAgICB2YXIgbm9kZXMgPSB0aGlzLmdldEZsYXR0ZWROb2RlcyhmYWxzZSwgIXRoaXMuY29uZmlnLmxhenkpLmZpbHRlcihmdW5jdGlvbiAobm9kZSkge1xuICAgICAgcmV0dXJuIE9iamVjdCh1dGlsX1tcInZhbHVlRXF1YWxzXCJdKShub2RlLnBhdGgsIHZhbHVlKSB8fCBub2RlLnZhbHVlID09PSB2YWx1ZTtcbiAgICB9KTtcbiAgICByZXR1cm4gbm9kZXMgJiYgbm9kZXMubGVuZ3RoID8gbm9kZXNbMF0gOiBudWxsO1xuICB9O1xuXG4gIHJldHVybiBTdG9yZTtcbn0oKTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX3N0b3JlID0gKHN0b3JlX1N0b3JlKTtcbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJlbGVtZW50LXVpL2xpYi91dGlscy9tZXJnZVwiXG52YXIgbWVyZ2VfID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5KTtcbnZhciBtZXJnZV9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihtZXJnZV8pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiZWxlbWVudC11aS9saWIvdXRpbHMvYXJpYS11dGlsc1wiXG52YXIgYXJpYV91dGlsc18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQxKTtcbnZhciBhcmlhX3V0aWxzX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGFyaWFfdXRpbHNfKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcImVsZW1lbnQtdWkvbGliL3V0aWxzL3Njcm9sbC1pbnRvLXZpZXdcIlxudmFyIHNjcm9sbF9pbnRvX3ZpZXdfID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMSk7XG52YXIgc2Nyb2xsX2ludG9fdmlld19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihzY3JvbGxfaW50b192aWV3Xyk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2Nhc2NhZGVyLXBhbmVsL3NyYy9jYXNjYWRlci1wYW5lbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5cblxuXG5cblxuXG5cbnZhciBLZXlDb2RlID0gYXJpYV91dGlsc19kZWZhdWx0LmEua2V5cztcblxudmFyIERlZmF1bHRQcm9wcyA9IHtcbiAgZXhwYW5kVHJpZ2dlcjogJ2NsaWNrJywgLy8gb3IgaG92ZXJcbiAgbXVsdGlwbGU6IGZhbHNlLFxuICBjaGVja1N0cmljdGx5OiBmYWxzZSwgLy8gd2hldGhlciBhbGwgbm9kZXMgY2FuIGJlIHNlbGVjdGVkXG4gIGVtaXRQYXRoOiB0cnVlLCAvLyB3ZXRoZXIgdG8gZW1pdCBhbiBhcnJheSBvZiBhbGwgbGV2ZWxzIHZhbHVlIGluIHdoaWNoIG5vZGUgaXMgbG9jYXRlZFxuICBsYXp5OiBmYWxzZSxcbiAgbGF6eUxvYWQ6IHV0aWxfW1wibm9vcFwiXSxcbiAgdmFsdWU6ICd2YWx1ZScsXG4gIGxhYmVsOiAnbGFiZWwnLFxuICBjaGlsZHJlbjogJ2NoaWxkcmVuJyxcbiAgbGVhZjogJ2xlYWYnLFxuICBkaXNhYmxlZDogJ2Rpc2FibGVkJyxcbiAgaG92ZXJUaHJlc2hvbGQ6IDUwMFxufTtcblxudmFyIGNhc2NhZGVyX3BhbmVsdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfaXNMZWFmID0gZnVuY3Rpb24gaXNMZWFmKGVsKSB7XG4gIHJldHVybiAhZWwuZ2V0QXR0cmlidXRlKCdhcmlhLW93bnMnKTtcbn07XG5cbnZhciBnZXRTaWJsaW5nID0gZnVuY3Rpb24gZ2V0U2libGluZyhlbCwgZGlzdGFuY2UpIHtcbiAgdmFyIHBhcmVudE5vZGUgPSBlbC5wYXJlbnROb2RlO1xuXG4gIGlmIChwYXJlbnROb2RlKSB7XG4gICAgdmFyIHNpYmxpbmdzID0gcGFyZW50Tm9kZS5xdWVyeVNlbGVjdG9yQWxsKCcuZWwtY2FzY2FkZXItbm9kZVt0YWJpbmRleD1cIi0xXCJdJyk7XG4gICAgdmFyIGluZGV4ID0gQXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChzaWJsaW5ncywgZWwpO1xuICAgIHJldHVybiBzaWJsaW5nc1tpbmRleCArIGRpc3RhbmNlXSB8fCBudWxsO1xuICB9XG4gIHJldHVybiBudWxsO1xufTtcblxudmFyIGdldE1lbnVJbmRleCA9IGZ1bmN0aW9uIGdldE1lbnVJbmRleChlbCwgZGlzdGFuY2UpIHtcbiAgaWYgKCFlbCkgcmV0dXJuO1xuICB2YXIgcGllY2VzID0gZWwuaWQuc3BsaXQoJy0nKTtcbiAgcmV0dXJuIE51bWJlcihwaWVjZXNbcGllY2VzLmxlbmd0aCAtIDJdKTtcbn07XG5cbnZhciBmb2N1c05vZGUgPSBmdW5jdGlvbiBmb2N1c05vZGUoZWwpIHtcbiAgaWYgKCFlbCkgcmV0dXJuO1xuICBlbC5mb2N1cygpO1xuICAhY2FzY2FkZXJfcGFuZWx2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19pc0xlYWYoZWwpICYmIGVsLmNsaWNrKCk7XG59O1xuXG52YXIgY2hlY2tOb2RlID0gZnVuY3Rpb24gY2hlY2tOb2RlKGVsKSB7XG4gIGlmICghZWwpIHJldHVybjtcblxuICB2YXIgaW5wdXQgPSBlbC5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpO1xuICBpZiAoaW5wdXQpIHtcbiAgICBpbnB1dC5jbGljaygpO1xuICB9IGVsc2UgaWYgKGNhc2NhZGVyX3BhbmVsdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfaXNMZWFmKGVsKSkge1xuICAgIGVsLmNsaWNrKCk7XG4gIH1cbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGNhc2NhZGVyX3BhbmVsdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbmFtZTogJ0VsQ2FzY2FkZXJQYW5lbCcsXG5cbiAgY29tcG9uZW50czoge1xuICAgIENhc2NhZGVyTWVudTogY2FzY2FkZXJfbWVudVxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgdmFsdWU6IHt9LFxuICAgIG9wdGlvbnM6IEFycmF5LFxuICAgIHByb3BzOiBPYmplY3QsXG4gICAgYm9yZGVyOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0sXG4gICAgcmVuZGVyTGFiZWw6IEZ1bmN0aW9uXG4gIH0sXG5cbiAgcHJvdmlkZTogZnVuY3Rpb24gcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGFuZWw6IHRoaXNcbiAgICB9O1xuICB9LFxuICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjaGVja2VkVmFsdWU6IG51bGwsXG4gICAgICBjaGVja2VkTm9kZVBhdGhzOiBbXSxcbiAgICAgIHN0b3JlOiBbXSxcbiAgICAgIG1lbnVzOiBbXSxcbiAgICAgIGFjdGl2ZVBhdGg6IFtdLFxuICAgICAgbG9hZENvdW50OiAwXG4gICAgfTtcbiAgfSxcblxuXG4gIGNvbXB1dGVkOiB7XG4gICAgY29uZmlnOiBmdW5jdGlvbiBjb25maWcoKSB7XG4gICAgICByZXR1cm4gbWVyZ2VfZGVmYXVsdCgpKF9leHRlbmRzKHt9LCBEZWZhdWx0UHJvcHMpLCB0aGlzLnByb3BzIHx8IHt9KTtcbiAgICB9LFxuICAgIG11bHRpcGxlOiBmdW5jdGlvbiBtdWx0aXBsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbmZpZy5tdWx0aXBsZTtcbiAgICB9LFxuICAgIGNoZWNrU3RyaWN0bHk6IGZ1bmN0aW9uIGNoZWNrU3RyaWN0bHkoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb25maWcuY2hlY2tTdHJpY3RseTtcbiAgICB9LFxuICAgIGxlYWZPbmx5OiBmdW5jdGlvbiBsZWFmT25seSgpIHtcbiAgICAgIHJldHVybiAhdGhpcy5jaGVja1N0cmljdGx5O1xuICAgIH0sXG4gICAgaXNIb3Zlck1lbnU6IGZ1bmN0aW9uIGlzSG92ZXJNZW51KCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29uZmlnLmV4cGFuZFRyaWdnZXIgPT09ICdob3Zlcic7XG4gICAgfSxcbiAgICByZW5kZXJMYWJlbEZuOiBmdW5jdGlvbiByZW5kZXJMYWJlbEZuKCkge1xuICAgICAgcmV0dXJuIHRoaXMucmVuZGVyTGFiZWwgfHwgdGhpcy4kc2NvcGVkU2xvdHMuZGVmYXVsdDtcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICB2YWx1ZTogZnVuY3Rpb24gdmFsdWUoKSB7XG4gICAgICB0aGlzLnN5bmNDaGVja2VkVmFsdWUoKTtcbiAgICAgIHRoaXMuY2hlY2tTdHJpY3RseSAmJiB0aGlzLmNhbGN1bGF0ZUNoZWNrZWROb2RlUGF0aHMoKTtcbiAgICB9LFxuXG4gICAgb3B0aW9uczoge1xuICAgICAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcigpIHtcbiAgICAgICAgdGhpcy5pbml0U3RvcmUoKTtcbiAgICAgIH0sXG4gICAgICBpbW1lZGlhdGU6IHRydWUsXG4gICAgICBkZWVwOiB0cnVlXG4gICAgfSxcbiAgICBjaGVja2VkVmFsdWU6IGZ1bmN0aW9uIGNoZWNrZWRWYWx1ZSh2YWwpIHtcbiAgICAgIGlmICghT2JqZWN0KHV0aWxfW1wiaXNFcXVhbFwiXSkodmFsLCB0aGlzLnZhbHVlKSkge1xuICAgICAgICB0aGlzLmNoZWNrU3RyaWN0bHkgJiYgdGhpcy5jYWxjdWxhdGVDaGVja2VkTm9kZVBhdGhzKCk7XG4gICAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgdmFsKTtcbiAgICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgdmFsKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCgpIHtcbiAgICBpZiAoIXRoaXMuaXNFbXB0eVZhbHVlKHRoaXMudmFsdWUpKSB7XG4gICAgICB0aGlzLnN5bmNDaGVja2VkVmFsdWUoKTtcbiAgICB9XG4gIH0sXG5cblxuICBtZXRob2RzOiB7XG4gICAgaW5pdFN0b3JlOiBmdW5jdGlvbiBpbml0U3RvcmUoKSB7XG4gICAgICB2YXIgY29uZmlnID0gdGhpcy5jb25maWcsXG4gICAgICAgICAgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcblxuICAgICAgaWYgKGNvbmZpZy5sYXp5ICYmIE9iamVjdCh1dGlsX1tcImlzRW1wdHlcIl0pKG9wdGlvbnMpKSB7XG4gICAgICAgIHRoaXMubGF6eUxvYWQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3RvcmUgPSBuZXcgc3JjX3N0b3JlKG9wdGlvbnMsIGNvbmZpZyk7XG4gICAgICAgIHRoaXMubWVudXMgPSBbdGhpcy5zdG9yZS5nZXROb2RlcygpXTtcbiAgICAgICAgdGhpcy5zeW5jTWVudVN0YXRlKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBzeW5jQ2hlY2tlZFZhbHVlOiBmdW5jdGlvbiBzeW5jQ2hlY2tlZFZhbHVlKCkge1xuICAgICAgdmFyIHZhbHVlID0gdGhpcy52YWx1ZSxcbiAgICAgICAgICBjaGVja2VkVmFsdWUgPSB0aGlzLmNoZWNrZWRWYWx1ZTtcblxuICAgICAgaWYgKCFPYmplY3QodXRpbF9bXCJpc0VxdWFsXCJdKSh2YWx1ZSwgY2hlY2tlZFZhbHVlKSkge1xuICAgICAgICB0aGlzLmFjdGl2ZVBhdGggPSBbXTtcbiAgICAgICAgdGhpcy5jaGVja2VkVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5zeW5jTWVudVN0YXRlKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBzeW5jTWVudVN0YXRlOiBmdW5jdGlvbiBzeW5jTWVudVN0YXRlKCkge1xuICAgICAgdmFyIG11bHRpcGxlID0gdGhpcy5tdWx0aXBsZSxcbiAgICAgICAgICBjaGVja1N0cmljdGx5ID0gdGhpcy5jaGVja1N0cmljdGx5O1xuXG4gICAgICB0aGlzLnN5bmNBY3RpdmVQYXRoKCk7XG4gICAgICBtdWx0aXBsZSAmJiB0aGlzLnN5bmNNdWx0aUNoZWNrU3RhdGUoKTtcbiAgICAgIGNoZWNrU3RyaWN0bHkgJiYgdGhpcy5jYWxjdWxhdGVDaGVja2VkTm9kZVBhdGhzKCk7XG4gICAgICB0aGlzLiRuZXh0VGljayh0aGlzLnNjcm9sbEludG9WaWV3KTtcbiAgICB9LFxuICAgIHN5bmNNdWx0aUNoZWNrU3RhdGU6IGZ1bmN0aW9uIHN5bmNNdWx0aUNoZWNrU3RhdGUoKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICB2YXIgbm9kZXMgPSB0aGlzLmdldEZsYXR0ZWROb2Rlcyh0aGlzLmxlYWZPbmx5KTtcblxuICAgICAgbm9kZXMuZm9yRWFjaChmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICBub2RlLnN5bmNDaGVja1N0YXRlKF90aGlzLmNoZWNrZWRWYWx1ZSk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGlzRW1wdHlWYWx1ZTogZnVuY3Rpb24gaXNFbXB0eVZhbHVlKHZhbCkge1xuICAgICAgdmFyIG11bHRpcGxlID0gdGhpcy5tdWx0aXBsZSxcbiAgICAgICAgICBjb25maWcgPSB0aGlzLmNvbmZpZztcbiAgICAgIHZhciBlbWl0UGF0aCA9IGNvbmZpZy5lbWl0UGF0aDtcblxuICAgICAgaWYgKG11bHRpcGxlIHx8IGVtaXRQYXRoKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QodXRpbF9bXCJpc0VtcHR5XCJdKSh2YWwpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG4gICAgc3luY0FjdGl2ZVBhdGg6IGZ1bmN0aW9uIHN5bmNBY3RpdmVQYXRoKCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHZhciBzdG9yZSA9IHRoaXMuc3RvcmUsXG4gICAgICAgICAgbXVsdGlwbGUgPSB0aGlzLm11bHRpcGxlLFxuICAgICAgICAgIGFjdGl2ZVBhdGggPSB0aGlzLmFjdGl2ZVBhdGgsXG4gICAgICAgICAgY2hlY2tlZFZhbHVlID0gdGhpcy5jaGVja2VkVmFsdWU7XG5cblxuICAgICAgaWYgKCFPYmplY3QodXRpbF9bXCJpc0VtcHR5XCJdKShhY3RpdmVQYXRoKSkge1xuICAgICAgICB2YXIgbm9kZXMgPSBhY3RpdmVQYXRoLm1hcChmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICAgIHJldHVybiBfdGhpczIuZ2V0Tm9kZUJ5VmFsdWUobm9kZS5nZXRWYWx1ZSgpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZXhwYW5kTm9kZXMobm9kZXMpO1xuICAgICAgfSBlbHNlIGlmICghdGhpcy5pc0VtcHR5VmFsdWUoY2hlY2tlZFZhbHVlKSkge1xuICAgICAgICB2YXIgdmFsdWUgPSBtdWx0aXBsZSA/IGNoZWNrZWRWYWx1ZVswXSA6IGNoZWNrZWRWYWx1ZTtcbiAgICAgICAgdmFyIGNoZWNrZWROb2RlID0gdGhpcy5nZXROb2RlQnlWYWx1ZSh2YWx1ZSkgfHwge307XG4gICAgICAgIHZhciBfbm9kZXMgPSAoY2hlY2tlZE5vZGUucGF0aE5vZGVzIHx8IFtdKS5zbGljZSgwLCAtMSk7XG4gICAgICAgIHRoaXMuZXhwYW5kTm9kZXMoX25vZGVzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYWN0aXZlUGF0aCA9IFtdO1xuICAgICAgICB0aGlzLm1lbnVzID0gW3N0b3JlLmdldE5vZGVzKCldO1xuICAgICAgfVxuICAgIH0sXG4gICAgZXhwYW5kTm9kZXM6IGZ1bmN0aW9uIGV4cGFuZE5vZGVzKG5vZGVzKSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgICAgbm9kZXMuZm9yRWFjaChmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICByZXR1cm4gX3RoaXMzLmhhbmRsZUV4cGFuZChub2RlLCB0cnVlIC8qIHNpbGVudCAqLyk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGNhbGN1bGF0ZUNoZWNrZWROb2RlUGF0aHM6IGZ1bmN0aW9uIGNhbGN1bGF0ZUNoZWNrZWROb2RlUGF0aHMoKSB7XG4gICAgICB2YXIgX3RoaXM0ID0gdGhpcztcblxuICAgICAgdmFyIGNoZWNrZWRWYWx1ZSA9IHRoaXMuY2hlY2tlZFZhbHVlLFxuICAgICAgICAgIG11bHRpcGxlID0gdGhpcy5tdWx0aXBsZTtcblxuICAgICAgdmFyIGNoZWNrZWRWYWx1ZXMgPSBtdWx0aXBsZSA/IE9iamVjdCh1dGlsX1tcImNvZXJjZVRydXRoeVZhbHVlVG9BcnJheVwiXSkoY2hlY2tlZFZhbHVlKSA6IFtjaGVja2VkVmFsdWVdO1xuICAgICAgdGhpcy5jaGVja2VkTm9kZVBhdGhzID0gY2hlY2tlZFZhbHVlcy5tYXAoZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgdmFyIGNoZWNrZWROb2RlID0gX3RoaXM0LmdldE5vZGVCeVZhbHVlKHYpO1xuICAgICAgICByZXR1cm4gY2hlY2tlZE5vZGUgPyBjaGVja2VkTm9kZS5wYXRoTm9kZXMgOiBbXTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgaGFuZGxlS2V5RG93bjogZnVuY3Rpb24gaGFuZGxlS2V5RG93bihlKSB7XG4gICAgICB2YXIgdGFyZ2V0ID0gZS50YXJnZXQsXG4gICAgICAgICAga2V5Q29kZSA9IGUua2V5Q29kZTtcblxuXG4gICAgICBzd2l0Y2ggKGtleUNvZGUpIHtcbiAgICAgICAgY2FzZSBLZXlDb2RlLnVwOlxuICAgICAgICAgIHZhciBwcmV2ID0gZ2V0U2libGluZyh0YXJnZXQsIC0xKTtcbiAgICAgICAgICBmb2N1c05vZGUocHJldik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgS2V5Q29kZS5kb3duOlxuICAgICAgICAgIHZhciBuZXh0ID0gZ2V0U2libGluZyh0YXJnZXQsIDEpO1xuICAgICAgICAgIGZvY3VzTm9kZShuZXh0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBLZXlDb2RlLmxlZnQ6XG4gICAgICAgICAgdmFyIHByZU1lbnUgPSB0aGlzLiRyZWZzLm1lbnVbZ2V0TWVudUluZGV4KHRhcmdldCkgLSAxXTtcbiAgICAgICAgICBpZiAocHJlTWVudSkge1xuICAgICAgICAgICAgdmFyIGV4cGFuZGVkTm9kZSA9IHByZU1lbnUuJGVsLnF1ZXJ5U2VsZWN0b3IoJy5lbC1jYXNjYWRlci1ub2RlW2FyaWEtZXhwYW5kZWQ9XCJ0cnVlXCJdJyk7XG4gICAgICAgICAgICBmb2N1c05vZGUoZXhwYW5kZWROb2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgS2V5Q29kZS5yaWdodDpcbiAgICAgICAgICB2YXIgbmV4dE1lbnUgPSB0aGlzLiRyZWZzLm1lbnVbZ2V0TWVudUluZGV4KHRhcmdldCkgKyAxXTtcbiAgICAgICAgICBpZiAobmV4dE1lbnUpIHtcbiAgICAgICAgICAgIHZhciBmaXJzdE5vZGUgPSBuZXh0TWVudS4kZWwucXVlcnlTZWxlY3RvcignLmVsLWNhc2NhZGVyLW5vZGVbdGFiaW5kZXg9XCItMVwiXScpO1xuICAgICAgICAgICAgZm9jdXNOb2RlKGZpcnN0Tm9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEtleUNvZGUuZW50ZXI6XG4gICAgICAgICAgY2hlY2tOb2RlKHRhcmdldCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgS2V5Q29kZS5lc2M6XG4gICAgICAgIGNhc2UgS2V5Q29kZS50YWI6XG4gICAgICAgICAgdGhpcy4kZW1pdCgnY2xvc2UnKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSxcbiAgICBoYW5kbGVFeHBhbmQ6IGZ1bmN0aW9uIGhhbmRsZUV4cGFuZChub2RlLCBzaWxlbnQpIHtcbiAgICAgIHZhciBhY3RpdmVQYXRoID0gdGhpcy5hY3RpdmVQYXRoO1xuICAgICAgdmFyIGxldmVsID0gbm9kZS5sZXZlbDtcblxuICAgICAgdmFyIHBhdGggPSBhY3RpdmVQYXRoLnNsaWNlKDAsIGxldmVsIC0gMSk7XG4gICAgICB2YXIgbWVudXMgPSB0aGlzLm1lbnVzLnNsaWNlKDAsIGxldmVsKTtcblxuICAgICAgaWYgKCFub2RlLmlzTGVhZikge1xuICAgICAgICBwYXRoLnB1c2gobm9kZSk7XG4gICAgICAgIG1lbnVzLnB1c2gobm9kZS5jaGlsZHJlbik7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuYWN0aXZlUGF0aCA9IHBhdGg7XG4gICAgICB0aGlzLm1lbnVzID0gbWVudXM7XG5cbiAgICAgIGlmICghc2lsZW50KSB7XG4gICAgICAgIHZhciBwYXRoVmFsdWVzID0gcGF0aC5tYXAoZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgICByZXR1cm4gbm9kZS5nZXRWYWx1ZSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgdmFyIGFjdGl2ZVBhdGhWYWx1ZXMgPSBhY3RpdmVQYXRoLm1hcChmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICAgIHJldHVybiBub2RlLmdldFZhbHVlKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIU9iamVjdCh1dGlsX1tcInZhbHVlRXF1YWxzXCJdKShwYXRoVmFsdWVzLCBhY3RpdmVQYXRoVmFsdWVzKSkge1xuICAgICAgICAgIHRoaXMuJGVtaXQoJ2FjdGl2ZS1pdGVtLWNoYW5nZScsIHBhdGhWYWx1ZXMpOyAvLyBEZXByZWNhdGVkXG4gICAgICAgICAgdGhpcy4kZW1pdCgnZXhwYW5kLWNoYW5nZScsIHBhdGhWYWx1ZXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBoYW5kbGVDaGVja0NoYW5nZTogZnVuY3Rpb24gaGFuZGxlQ2hlY2tDaGFuZ2UodmFsdWUpIHtcbiAgICAgIHRoaXMuY2hlY2tlZFZhbHVlID0gdmFsdWU7XG4gICAgfSxcbiAgICBsYXp5TG9hZDogZnVuY3Rpb24gbGF6eUxvYWQobm9kZSwgb25GdWxsZmlsZWQpIHtcbiAgICAgIHZhciBfdGhpczUgPSB0aGlzO1xuXG4gICAgICB2YXIgY29uZmlnID0gdGhpcy5jb25maWc7XG5cbiAgICAgIGlmICghbm9kZSkge1xuICAgICAgICBub2RlID0gbm9kZSB8fCB7IHJvb3Q6IHRydWUsIGxldmVsOiAwIH07XG4gICAgICAgIHRoaXMuc3RvcmUgPSBuZXcgc3JjX3N0b3JlKFtdLCBjb25maWcpO1xuICAgICAgICB0aGlzLm1lbnVzID0gW3RoaXMuc3RvcmUuZ2V0Tm9kZXMoKV07XG4gICAgICB9XG4gICAgICBub2RlLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgdmFyIHJlc29sdmUgPSBmdW5jdGlvbiByZXNvbHZlKGRhdGFMaXN0KSB7XG4gICAgICAgIHZhciBwYXJlbnQgPSBub2RlLnJvb3QgPyBudWxsIDogbm9kZTtcbiAgICAgICAgZGF0YUxpc3QgJiYgZGF0YUxpc3QubGVuZ3RoICYmIF90aGlzNS5zdG9yZS5hcHBlbmROb2RlcyhkYXRhTGlzdCwgcGFyZW50KTtcbiAgICAgICAgbm9kZS5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIG5vZGUubG9hZGVkID0gdHJ1ZTtcblxuICAgICAgICAvLyBkaXNwb3NlIGRlZmF1bHQgdmFsdWUgb24gbGF6eSBsb2FkIG1vZGVcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoX3RoaXM1LmNoZWNrZWRWYWx1ZSkpIHtcbiAgICAgICAgICB2YXIgbm9kZVZhbHVlID0gX3RoaXM1LmNoZWNrZWRWYWx1ZVtfdGhpczUubG9hZENvdW50KytdO1xuICAgICAgICAgIHZhciB2YWx1ZUtleSA9IF90aGlzNS5jb25maWcudmFsdWU7XG4gICAgICAgICAgdmFyIGxlYWZLZXkgPSBfdGhpczUuY29uZmlnLmxlYWY7XG5cbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhTGlzdCkgJiYgZGF0YUxpc3QuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbVt2YWx1ZUtleV0gPT09IG5vZGVWYWx1ZTtcbiAgICAgICAgICB9KS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB2YXIgY2hlY2tlZE5vZGUgPSBfdGhpczUuc3RvcmUuZ2V0Tm9kZUJ5VmFsdWUobm9kZVZhbHVlKTtcblxuICAgICAgICAgICAgaWYgKCFjaGVja2VkTm9kZS5kYXRhW2xlYWZLZXldKSB7XG4gICAgICAgICAgICAgIF90aGlzNS5sYXp5TG9hZChjaGVja2VkTm9kZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIF90aGlzNS5oYW5kbGVFeHBhbmQoY2hlY2tlZE5vZGUpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKF90aGlzNS5sb2FkQ291bnQgPT09IF90aGlzNS5jaGVja2VkVmFsdWUubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIF90aGlzNS4kcGFyZW50LmNvbXB1dGVQcmVzZW50VGV4dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIG9uRnVsbGZpbGVkICYmIG9uRnVsbGZpbGVkKGRhdGFMaXN0KTtcbiAgICAgIH07XG4gICAgICBjb25maWcubGF6eUxvYWQobm9kZSwgcmVzb2x2ZSk7XG4gICAgfSxcblxuXG4gICAgLyoqXG4gICAgICogcHVibGljIG1ldGhvZHNcbiAgICAqL1xuICAgIGNhbGN1bGF0ZU11bHRpQ2hlY2tlZFZhbHVlOiBmdW5jdGlvbiBjYWxjdWxhdGVNdWx0aUNoZWNrZWRWYWx1ZSgpIHtcbiAgICAgIHRoaXMuY2hlY2tlZFZhbHVlID0gdGhpcy5nZXRDaGVja2VkTm9kZXModGhpcy5sZWFmT25seSkubWFwKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmdldFZhbHVlQnlPcHRpb24oKTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgc2Nyb2xsSW50b1ZpZXc6IGZ1bmN0aW9uIHNjcm9sbEludG9WaWV3KCkge1xuICAgICAgaWYgKHRoaXMuJGlzU2VydmVyKSByZXR1cm47XG5cbiAgICAgIHZhciBtZW51cyA9IHRoaXMuJHJlZnMubWVudSB8fCBbXTtcbiAgICAgIG1lbnVzLmZvckVhY2goZnVuY3Rpb24gKG1lbnUpIHtcbiAgICAgICAgdmFyIG1lbnVFbGVtZW50ID0gbWVudS4kZWw7XG4gICAgICAgIGlmIChtZW51RWxlbWVudCkge1xuICAgICAgICAgIHZhciBjb250YWluZXIgPSBtZW51RWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuZWwtc2Nyb2xsYmFyX193cmFwJyk7XG4gICAgICAgICAgdmFyIGFjdGl2ZU5vZGUgPSBtZW51RWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuZWwtY2FzY2FkZXItbm9kZS5pcy1hY3RpdmUnKSB8fCBtZW51RWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuZWwtY2FzY2FkZXItbm9kZS5pbi1hY3RpdmUtcGF0aCcpO1xuICAgICAgICAgIHNjcm9sbF9pbnRvX3ZpZXdfZGVmYXVsdCgpKGNvbnRhaW5lciwgYWN0aXZlTm9kZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sXG4gICAgZ2V0Tm9kZUJ5VmFsdWU6IGZ1bmN0aW9uIGdldE5vZGVCeVZhbHVlKHZhbCkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RvcmUuZ2V0Tm9kZUJ5VmFsdWUodmFsKTtcbiAgICB9LFxuICAgIGdldEZsYXR0ZWROb2RlczogZnVuY3Rpb24gZ2V0RmxhdHRlZE5vZGVzKGxlYWZPbmx5KSB7XG4gICAgICB2YXIgY2FjaGVkID0gIXRoaXMuY29uZmlnLmxhenk7XG4gICAgICByZXR1cm4gdGhpcy5zdG9yZS5nZXRGbGF0dGVkTm9kZXMobGVhZk9ubHksIGNhY2hlZCk7XG4gICAgfSxcbiAgICBnZXRDaGVja2VkTm9kZXM6IGZ1bmN0aW9uIGdldENoZWNrZWROb2RlcyhsZWFmT25seSkge1xuICAgICAgdmFyIGNoZWNrZWRWYWx1ZSA9IHRoaXMuY2hlY2tlZFZhbHVlLFxuICAgICAgICAgIG11bHRpcGxlID0gdGhpcy5tdWx0aXBsZTtcblxuICAgICAgaWYgKG11bHRpcGxlKSB7XG4gICAgICAgIHZhciBub2RlcyA9IHRoaXMuZ2V0RmxhdHRlZE5vZGVzKGxlYWZPbmx5KTtcbiAgICAgICAgcmV0dXJuIG5vZGVzLmZpbHRlcihmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICAgIHJldHVybiBub2RlLmNoZWNrZWQ7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNFbXB0eVZhbHVlKGNoZWNrZWRWYWx1ZSkgPyBbXSA6IFt0aGlzLmdldE5vZGVCeVZhbHVlKGNoZWNrZWRWYWx1ZSldO1xuICAgICAgfVxuICAgIH0sXG4gICAgY2xlYXJDaGVja2VkTm9kZXM6IGZ1bmN0aW9uIGNsZWFyQ2hlY2tlZE5vZGVzKCkge1xuICAgICAgdmFyIGNvbmZpZyA9IHRoaXMuY29uZmlnLFxuICAgICAgICAgIGxlYWZPbmx5ID0gdGhpcy5sZWFmT25seTtcbiAgICAgIHZhciBtdWx0aXBsZSA9IGNvbmZpZy5tdWx0aXBsZSxcbiAgICAgICAgICBlbWl0UGF0aCA9IGNvbmZpZy5lbWl0UGF0aDtcblxuICAgICAgaWYgKG11bHRpcGxlKSB7XG4gICAgICAgIHRoaXMuZ2V0Q2hlY2tlZE5vZGVzKGxlYWZPbmx5KS5maWx0ZXIoZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgICByZXR1cm4gIW5vZGUuaXNEaXNhYmxlZDtcbiAgICAgICAgfSkuZm9yRWFjaChmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICAgIHJldHVybiBub2RlLmRvQ2hlY2soZmFsc2UpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jYWxjdWxhdGVNdWx0aUNoZWNrZWRWYWx1ZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jaGVja2VkVmFsdWUgPSBlbWl0UGF0aCA/IFtdIDogbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jYXNjYWRlci1wYW5lbC9zcmMvY2FzY2FkZXItcGFuZWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY19jYXNjYWRlcl9wYW5lbHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChjYXNjYWRlcl9wYW5lbHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jYXNjYWRlci1wYW5lbC9zcmMvY2FzY2FkZXItcGFuZWwudnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgY2FzY2FkZXJfcGFuZWxfY29tcG9uZW50ID0gT2JqZWN0KGNvbXBvbmVudE5vcm1hbGl6ZXJbXCJhXCIgLyogZGVmYXVsdCAqL10pKFxuICBzcmNfY2FzY2FkZXJfcGFuZWx2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIGNhc2NhZGVyX3BhbmVsdnVlX3R5cGVfdGVtcGxhdGVfaWRfMzQ5MzIzNDZfcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGNhc2NhZGVyX3BhbmVsX2FwaTsgfVxuY2FzY2FkZXJfcGFuZWxfY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy9jYXNjYWRlci1wYW5lbC9zcmMvY2FzY2FkZXItcGFuZWwudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGNhc2NhZGVyX3BhbmVsID0gKGNhc2NhZGVyX3BhbmVsX2NvbXBvbmVudC5leHBvcnRzKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY2FzY2FkZXItcGFuZWwvaW5kZXguanNcblxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuY2FzY2FkZXJfcGFuZWwuaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcbiAgVnVlLmNvbXBvbmVudChjYXNjYWRlcl9wYW5lbC5uYW1lLCBjYXNjYWRlcl9wYW5lbCk7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc19jYXNjYWRlcl9wYW5lbCA9IF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKGNhc2NhZGVyX3BhbmVsKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDk6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImVsZW1lbnQtdWkvbGliL3V0aWxzL21lcmdlXCIpO1xuXG4vKioqLyB9KVxuXG4vKioqKioqLyB9KTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/cascader-panel.js\n");

/***/ }),

/***/ "./node_modules/element-ui/lib/checkbox-group.js":
/*!*******************************************************!*\
  !*** ./node_modules/element-ui/lib/checkbox-group.js ***!
  \*******************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

eval("module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __nested_webpack_require_187__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __nested_webpack_require_187__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__nested_webpack_require_187__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__nested_webpack_require_187__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__nested_webpack_require_187__.d = function(exports, name, getter) {\n/******/ \t\tif(!__nested_webpack_require_187__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__nested_webpack_require_187__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__nested_webpack_require_187__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __nested_webpack_require_187__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__nested_webpack_require_187__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __nested_webpack_require_187__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__nested_webpack_require_187__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__nested_webpack_require_187__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__nested_webpack_require_187__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__nested_webpack_require_187__.p = \"/dist/\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __nested_webpack_require_187__(__nested_webpack_require_187__.s = 93);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_3672__) {\n\n\"use strict\";\n/* harmony export (binding) */ __nested_webpack_require_3672__.d(__nested_webpack_exports__, \"a\", function() { return normalizeComponent; });\n/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nfunction normalizeComponent (\n  scriptExports,\n  render,\n  staticRenderFns,\n  functionalTemplate,\n  injectStyles,\n  scopeId,\n  moduleIdentifier, /* server only */\n  shadowMode /* vue-cli only */\n) {\n  // Vue.extend constructor export interop\n  var options = typeof scriptExports === 'function'\n    ? scriptExports.options\n    : scriptExports\n\n  // render functions\n  if (render) {\n    options.render = render\n    options.staticRenderFns = staticRenderFns\n    options._compiled = true\n  }\n\n  // functional template\n  if (functionalTemplate) {\n    options.functional = true\n  }\n\n  // scopedId\n  if (scopeId) {\n    options._scopeId = 'data-v-' + scopeId\n  }\n\n  var hook\n  if (moduleIdentifier) { // server build\n    hook = function (context) {\n      // 2.3 injection\n      context =\n        context || // cached call\n        (this.$vnode && this.$vnode.ssrContext) || // stateful\n        (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n      // 2.2 with runInNewContext: true\n      if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n        context = __VUE_SSR_CONTEXT__\n      }\n      // inject component styles\n      if (injectStyles) {\n        injectStyles.call(this, context)\n      }\n      // register component module identifier for async chunk inferrence\n      if (context && context._registeredComponents) {\n        context._registeredComponents.add(moduleIdentifier)\n      }\n    }\n    // used by ssr in case component is cached and beforeCreate\n    // never gets called\n    options._ssrRegister = hook\n  } else if (injectStyles) {\n    hook = shadowMode\n      ? function () { injectStyles.call(this, this.$root.$options.shadowRoot) }\n      : injectStyles\n  }\n\n  if (hook) {\n    if (options.functional) {\n      // for template-only hot-reload because in that case the render fn doesn't\n      // go through the normalizer\n      options._injectStyles = hook\n      // register for functioal component in vue file\n      var originalRender = options.render\n      options.render = function renderWithStyleInjection (h, context) {\n        hook.call(context)\n        return originalRender(h, context)\n      }\n    } else {\n      // inject component registration as beforeCreate hook\n      var existing = options.beforeCreate\n      options.beforeCreate = existing\n        ? [].concat(existing, hook)\n        : [hook]\n    }\n  }\n\n  return {\n    exports: scriptExports,\n    options: options\n  }\n}\n\n\n/***/ }),\n\n/***/ 4:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/mixins/emitter */ \"./node_modules/element-ui/lib/mixins/emitter.js\");\n\n/***/ }),\n\n/***/ 93:\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_6691__) {\n\n\"use strict\";\n__nested_webpack_require_6691__.r(__nested_webpack_exports__);\n\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/checkbox/src/checkbox-group.vue?vue&type=template&id=7289a290&\nvar render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    {\n      staticClass: \"el-checkbox-group\",\n      attrs: { role: \"group\", \"aria-label\": \"checkbox-group\" }\n    },\n    [_vm._t(\"default\")],\n    2\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/checkbox/src/checkbox-group.vue?vue&type=template&id=7289a290&\n\n// EXTERNAL MODULE: external \"element-ui/lib/mixins/emitter\"\nvar emitter_ = __nested_webpack_require_6691__(4);\nvar emitter_default = /*#__PURE__*/__nested_webpack_require_6691__.n(emitter_);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/checkbox/src/checkbox-group.vue?vue&type=script&lang=js&\n\n\n\n/* harmony default export */ var checkbox_groupvue_type_script_lang_js_ = ({\n  name: 'ElCheckboxGroup',\n\n  componentName: 'ElCheckboxGroup',\n\n  mixins: [emitter_default.a],\n\n  inject: {\n    elFormItem: {\n      default: ''\n    }\n  },\n\n  props: {\n    value: {},\n    disabled: Boolean,\n    min: Number,\n    max: Number,\n    size: String,\n    fill: String,\n    textColor: String\n  },\n\n  computed: {\n    _elFormItemSize: function _elFormItemSize() {\n      return (this.elFormItem || {}).elFormItemSize;\n    },\n    checkboxGroupSize: function checkboxGroupSize() {\n      return this.size || this._elFormItemSize || (this.$ELEMENT || {}).size;\n    }\n  },\n\n  watch: {\n    value: function value(_value) {\n      this.dispatch('ElFormItem', 'el.form.change', [_value]);\n    }\n  }\n});\n// CONCATENATED MODULE: ./packages/checkbox/src/checkbox-group.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_checkbox_groupvue_type_script_lang_js_ = (checkbox_groupvue_type_script_lang_js_); \n// EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js\nvar componentNormalizer = __nested_webpack_require_6691__(0);\n\n// CONCATENATED MODULE: ./packages/checkbox/src/checkbox-group.vue\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(componentNormalizer[\"a\" /* default */])(\n  src_checkbox_groupvue_type_script_lang_js_,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"packages/checkbox/src/checkbox-group.vue\"\n/* harmony default export */ var checkbox_group = (component.exports);\n// CONCATENATED MODULE: ./packages/checkbox-group/index.js\n\n\n/* istanbul ignore next */\ncheckbox_group.install = function (Vue) {\n  Vue.component(checkbox_group.name, checkbox_group);\n};\n\n/* harmony default export */ var packages_checkbox_group = __nested_webpack_exports__[\"default\"] = (checkbox_group);\n\n/***/ })\n\n/******/ });//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvY2hlY2tib3gtZ3JvdXAuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSw4QkFBOEI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsOEJBQW1CO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEVBQTBFLDhCQUFtQjtBQUM3RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsOEJBQW1CO0FBQzdCO0FBQ0E7QUFDQSxVQUFVLDhCQUFtQjtBQUM3QjtBQUNBO0FBQ0EsVUFBVSw4QkFBbUI7QUFDN0IsZUFBZSw4QkFBbUI7QUFDbEMsbURBQW1ELCtCQUErQjtBQUNsRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsOEJBQW1CO0FBQzdCO0FBQ0EsaUVBQWlFLGlCQUFpQjtBQUNsRjtBQUNBLDBEQUEwRCxhQUFhO0FBQ3ZFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSw4QkFBbUI7QUFDN0IsZ0NBQWdDLDhCQUFtQjtBQUNuRDtBQUNBO0FBQ0E7QUFDQSxXQUFXLDhCQUFtQjtBQUM5QixrREFBa0QsZ0NBQWdDO0FBQ2xGLDBFQUEwRSw4QkFBbUIsNEJBQTRCLG9CQUFvQjtBQUM3STtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsOEJBQW1CO0FBQzdCO0FBQ0Esb0NBQW9DLDRCQUE0QjtBQUNoRSwwQ0FBMEM7QUFDMUMsV0FBVyw4QkFBbUI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLDhCQUFtQixrQ0FBa0M7QUFDL0Q7QUFDQTtBQUNBLFVBQVUsOEJBQW1CO0FBQzdCO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQiw4QkFBbUIsQ0FBQyw4QkFBbUI7QUFDeEQsVUFBVTtBQUNWO0FBQ0E7O0FBRUE7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsK0JBQW1COztBQUVoRTtBQUNBLCtCQUErQiwrQkFBbUIsR0FBRywwQkFBbUIsb0JBQW9CLDRCQUE0QjtBQUN4SDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwwQkFBMEI7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxzQkFBc0I7QUFDdEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBLE9BQU87O0FBRVA7QUFDQTs7QUFFQSxpQkFBaUIsbUJBQU8sQ0FBQyxzRkFBK0I7O0FBRXhELE9BQU87O0FBRVA7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsK0JBQW1COztBQUVoRTtBQUNBLCtCQUFtQixHQUFHLDBCQUFtQjs7QUFFekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0EsZUFBZSwrQkFBbUI7QUFDbEMsbUNBQW1DLCtCQUFtQjs7QUFFdEQ7Ozs7QUFJQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxtQ0FBbUM7QUFDbkMsS0FBSztBQUNMO0FBQ0Esc0VBQXNFO0FBQ3RFO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQiwrQkFBbUI7O0FBRTdDOzs7Ozs7QUFNQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksS0FBSyxFQUFFLFlBQVk7QUFDdkI7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwyREFBMkQsMEJBQW1COztBQUU5RSxPQUFPOztBQUVQLFVBQVUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvY2hlY2tib3gtZ3JvdXAuanM/Y2JjZSJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9XG4vKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwXG4vKioqKioqLyBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4vKioqKioqLyBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4vKioqKioqLyBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbi8qKioqKiovIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuLyoqKioqKi8gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbi8qKioqKiovIFx0XHRcdGk6IG1vZHVsZUlkLFxuLyoqKioqKi8gXHRcdFx0bDogZmFsc2UsXG4vKioqKioqLyBcdFx0XHRleHBvcnRzOiB7fVxuLyoqKioqKi8gXHRcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuLyoqKioqKi8gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4vKioqKioqLyBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuLyoqKioqKi8gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbi8qKioqKiovIFx0fVxuLyoqKioqKi9cbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuLyoqKioqKi8gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbi8qKioqKiovIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuLyoqKioqKi8gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3Rcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4vKioqKioqLyBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuLyoqKioqKi8gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3Rcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4vKioqKioqLyBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbi8qKioqKiovIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4vKioqKioqLyBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbi8qKioqKiovIFx0XHRyZXR1cm4gbnM7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbi8qKioqKiovIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbi8qKioqKiovIFx0XHRyZXR1cm4gZ2V0dGVyO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiL2Rpc3QvXCI7XG4vKioqKioqL1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vKioqKioqLyBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDkzKTtcbi8qKioqKiovIH0pXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gKHtcblxuLyoqKi8gMDpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiYVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIG5vcm1hbGl6ZUNvbXBvbmVudDsgfSk7XG4vKiBnbG9iYWxzIF9fVlVFX1NTUl9DT05URVhUX18gKi9cblxuLy8gSU1QT1JUQU5UOiBEbyBOT1QgdXNlIEVTMjAxNSBmZWF0dXJlcyBpbiB0aGlzIGZpbGUgKGV4Y2VwdCBmb3IgbW9kdWxlcykuXG4vLyBUaGlzIG1vZHVsZSBpcyBhIHJ1bnRpbWUgdXRpbGl0eSBmb3IgY2xlYW5lciBjb21wb25lbnQgbW9kdWxlIG91dHB1dCBhbmQgd2lsbFxuLy8gYmUgaW5jbHVkZWQgaW4gdGhlIGZpbmFsIHdlYnBhY2sgdXNlciBidW5kbGUuXG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUNvbXBvbmVudCAoXG4gIHNjcmlwdEV4cG9ydHMsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmdW5jdGlvbmFsVGVtcGxhdGUsXG4gIGluamVjdFN0eWxlcyxcbiAgc2NvcGVJZCxcbiAgbW9kdWxlSWRlbnRpZmllciwgLyogc2VydmVyIG9ubHkgKi9cbiAgc2hhZG93TW9kZSAvKiB2dWUtY2xpIG9ubHkgKi9cbikge1xuICAvLyBWdWUuZXh0ZW5kIGNvbnN0cnVjdG9yIGV4cG9ydCBpbnRlcm9wXG4gIHZhciBvcHRpb25zID0gdHlwZW9mIHNjcmlwdEV4cG9ydHMgPT09ICdmdW5jdGlvbidcbiAgICA/IHNjcmlwdEV4cG9ydHMub3B0aW9uc1xuICAgIDogc2NyaXB0RXhwb3J0c1xuXG4gIC8vIHJlbmRlciBmdW5jdGlvbnNcbiAgaWYgKHJlbmRlcikge1xuICAgIG9wdGlvbnMucmVuZGVyID0gcmVuZGVyXG4gICAgb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnMgPSBzdGF0aWNSZW5kZXJGbnNcbiAgICBvcHRpb25zLl9jb21waWxlZCA9IHRydWVcbiAgfVxuXG4gIC8vIGZ1bmN0aW9uYWwgdGVtcGxhdGVcbiAgaWYgKGZ1bmN0aW9uYWxUZW1wbGF0ZSkge1xuICAgIG9wdGlvbnMuZnVuY3Rpb25hbCA9IHRydWVcbiAgfVxuXG4gIC8vIHNjb3BlZElkXG4gIGlmIChzY29wZUlkKSB7XG4gICAgb3B0aW9ucy5fc2NvcGVJZCA9ICdkYXRhLXYtJyArIHNjb3BlSWRcbiAgfVxuXG4gIHZhciBob29rXG4gIGlmIChtb2R1bGVJZGVudGlmaWVyKSB7IC8vIHNlcnZlciBidWlsZFxuICAgIGhvb2sgPSBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgLy8gMi4zIGluamVjdGlvblxuICAgICAgY29udGV4dCA9XG4gICAgICAgIGNvbnRleHQgfHwgLy8gY2FjaGVkIGNhbGxcbiAgICAgICAgKHRoaXMuJHZub2RlICYmIHRoaXMuJHZub2RlLnNzckNvbnRleHQpIHx8IC8vIHN0YXRlZnVsXG4gICAgICAgICh0aGlzLnBhcmVudCAmJiB0aGlzLnBhcmVudC4kdm5vZGUgJiYgdGhpcy5wYXJlbnQuJHZub2RlLnNzckNvbnRleHQpIC8vIGZ1bmN0aW9uYWxcbiAgICAgIC8vIDIuMiB3aXRoIHJ1bkluTmV3Q29udGV4dDogdHJ1ZVxuICAgICAgaWYgKCFjb250ZXh0ICYmIHR5cGVvZiBfX1ZVRV9TU1JfQ09OVEVYVF9fICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBjb250ZXh0ID0gX19WVUVfU1NSX0NPTlRFWFRfX1xuICAgICAgfVxuICAgICAgLy8gaW5qZWN0IGNvbXBvbmVudCBzdHlsZXNcbiAgICAgIGlmIChpbmplY3RTdHlsZXMpIHtcbiAgICAgICAgaW5qZWN0U3R5bGVzLmNhbGwodGhpcywgY29udGV4dClcbiAgICAgIH1cbiAgICAgIC8vIHJlZ2lzdGVyIGNvbXBvbmVudCBtb2R1bGUgaWRlbnRpZmllciBmb3IgYXN5bmMgY2h1bmsgaW5mZXJyZW5jZVxuICAgICAgaWYgKGNvbnRleHQgJiYgY29udGV4dC5fcmVnaXN0ZXJlZENvbXBvbmVudHMpIHtcbiAgICAgICAgY29udGV4dC5fcmVnaXN0ZXJlZENvbXBvbmVudHMuYWRkKG1vZHVsZUlkZW50aWZpZXIpXG4gICAgICB9XG4gICAgfVxuICAgIC8vIHVzZWQgYnkgc3NyIGluIGNhc2UgY29tcG9uZW50IGlzIGNhY2hlZCBhbmQgYmVmb3JlQ3JlYXRlXG4gICAgLy8gbmV2ZXIgZ2V0cyBjYWxsZWRcbiAgICBvcHRpb25zLl9zc3JSZWdpc3RlciA9IGhvb2tcbiAgfSBlbHNlIGlmIChpbmplY3RTdHlsZXMpIHtcbiAgICBob29rID0gc2hhZG93TW9kZVxuICAgICAgPyBmdW5jdGlvbiAoKSB7IGluamVjdFN0eWxlcy5jYWxsKHRoaXMsIHRoaXMuJHJvb3QuJG9wdGlvbnMuc2hhZG93Um9vdCkgfVxuICAgICAgOiBpbmplY3RTdHlsZXNcbiAgfVxuXG4gIGlmIChob29rKSB7XG4gICAgaWYgKG9wdGlvbnMuZnVuY3Rpb25hbCkge1xuICAgICAgLy8gZm9yIHRlbXBsYXRlLW9ubHkgaG90LXJlbG9hZCBiZWNhdXNlIGluIHRoYXQgY2FzZSB0aGUgcmVuZGVyIGZuIGRvZXNuJ3RcbiAgICAgIC8vIGdvIHRocm91Z2ggdGhlIG5vcm1hbGl6ZXJcbiAgICAgIG9wdGlvbnMuX2luamVjdFN0eWxlcyA9IGhvb2tcbiAgICAgIC8vIHJlZ2lzdGVyIGZvciBmdW5jdGlvYWwgY29tcG9uZW50IGluIHZ1ZSBmaWxlXG4gICAgICB2YXIgb3JpZ2luYWxSZW5kZXIgPSBvcHRpb25zLnJlbmRlclxuICAgICAgb3B0aW9ucy5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXJXaXRoU3R5bGVJbmplY3Rpb24gKGgsIGNvbnRleHQpIHtcbiAgICAgICAgaG9vay5jYWxsKGNvbnRleHQpXG4gICAgICAgIHJldHVybiBvcmlnaW5hbFJlbmRlcihoLCBjb250ZXh0KVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpbmplY3QgY29tcG9uZW50IHJlZ2lzdHJhdGlvbiBhcyBiZWZvcmVDcmVhdGUgaG9va1xuICAgICAgdmFyIGV4aXN0aW5nID0gb3B0aW9ucy5iZWZvcmVDcmVhdGVcbiAgICAgIG9wdGlvbnMuYmVmb3JlQ3JlYXRlID0gZXhpc3RpbmdcbiAgICAgICAgPyBbXS5jb25jYXQoZXhpc3RpbmcsIGhvb2spXG4gICAgICAgIDogW2hvb2tdXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBleHBvcnRzOiBzY3JpcHRFeHBvcnRzLFxuICAgIG9wdGlvbnM6IG9wdGlvbnNcbiAgfVxufVxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA0OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi9taXhpbnMvZW1pdHRlclwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDkzOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9jaGVja2JveC9zcmMvY2hlY2tib3gtZ3JvdXAudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTcyODlhMjkwJlxudmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHtcbiAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWNoZWNrYm94LWdyb3VwXCIsXG4gICAgICBhdHRyczogeyByb2xlOiBcImdyb3VwXCIsIFwiYXJpYS1sYWJlbFwiOiBcImNoZWNrYm94LWdyb3VwXCIgfVxuICAgIH0sXG4gICAgW192bS5fdChcImRlZmF1bHRcIildLFxuICAgIDJcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2NoZWNrYm94L3NyYy9jaGVja2JveC1ncm91cC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NzI4OWEyOTAmXG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJlbGVtZW50LXVpL2xpYi9taXhpbnMvZW1pdHRlclwiXG52YXIgZW1pdHRlcl8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xudmFyIGVtaXR0ZXJfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oZW1pdHRlcl8pO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9jaGVja2JveC9zcmMvY2hlY2tib3gtZ3JvdXAudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuXG5cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgY2hlY2tib3hfZ3JvdXB2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBuYW1lOiAnRWxDaGVja2JveEdyb3VwJyxcblxuICBjb21wb25lbnROYW1lOiAnRWxDaGVja2JveEdyb3VwJyxcblxuICBtaXhpbnM6IFtlbWl0dGVyX2RlZmF1bHQuYV0sXG5cbiAgaW5qZWN0OiB7XG4gICAgZWxGb3JtSXRlbToge1xuICAgICAgZGVmYXVsdDogJydcbiAgICB9XG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICB2YWx1ZToge30sXG4gICAgZGlzYWJsZWQ6IEJvb2xlYW4sXG4gICAgbWluOiBOdW1iZXIsXG4gICAgbWF4OiBOdW1iZXIsXG4gICAgc2l6ZTogU3RyaW5nLFxuICAgIGZpbGw6IFN0cmluZyxcbiAgICB0ZXh0Q29sb3I6IFN0cmluZ1xuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgX2VsRm9ybUl0ZW1TaXplOiBmdW5jdGlvbiBfZWxGb3JtSXRlbVNpemUoKSB7XG4gICAgICByZXR1cm4gKHRoaXMuZWxGb3JtSXRlbSB8fCB7fSkuZWxGb3JtSXRlbVNpemU7XG4gICAgfSxcbiAgICBjaGVja2JveEdyb3VwU2l6ZTogZnVuY3Rpb24gY2hlY2tib3hHcm91cFNpemUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zaXplIHx8IHRoaXMuX2VsRm9ybUl0ZW1TaXplIHx8ICh0aGlzLiRFTEVNRU5UIHx8IHt9KS5zaXplO1xuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHZhbHVlOiBmdW5jdGlvbiB2YWx1ZShfdmFsdWUpIHtcbiAgICAgIHRoaXMuZGlzcGF0Y2goJ0VsRm9ybUl0ZW0nLCAnZWwuZm9ybS5jaGFuZ2UnLCBbX3ZhbHVlXSk7XG4gICAgfVxuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY2hlY2tib3gvc3JjL2NoZWNrYm94LWdyb3VwLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfY2hlY2tib3hfZ3JvdXB2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoY2hlY2tib3hfZ3JvdXB2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIEVYVEVSTkFMIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXG52YXIgY29tcG9uZW50Tm9ybWFsaXplciA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY2hlY2tib3gvc3JjL2NoZWNrYm94LWdyb3VwLnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGNvbXBvbmVudCA9IE9iamVjdChjb21wb25lbnROb3JtYWxpemVyW1wiYVwiIC8qIGRlZmF1bHQgKi9dKShcbiAgc3JjX2NoZWNrYm94X2dyb3VwdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgYXBpOyB9XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL2NoZWNrYm94L3NyYy9jaGVja2JveC1ncm91cC52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgY2hlY2tib3hfZ3JvdXAgPSAoY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jaGVja2JveC1ncm91cC9pbmRleC5qc1xuXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5jaGVja2JveF9ncm91cC5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuICBWdWUuY29tcG9uZW50KGNoZWNrYm94X2dyb3VwLm5hbWUsIGNoZWNrYm94X2dyb3VwKTtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhY2thZ2VzX2NoZWNrYm94X2dyb3VwID0gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoY2hlY2tib3hfZ3JvdXApO1xuXG4vKioqLyB9KVxuXG4vKioqKioqLyB9KTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/checkbox-group.js\n");

/***/ }),

/***/ "./node_modules/element-ui/lib/checkbox.js":
/*!*************************************************!*\
  !*** ./node_modules/element-ui/lib/checkbox.js ***!
  \*************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

eval("module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __nested_webpack_require_187__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __nested_webpack_require_187__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__nested_webpack_require_187__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__nested_webpack_require_187__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__nested_webpack_require_187__.d = function(exports, name, getter) {\n/******/ \t\tif(!__nested_webpack_require_187__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__nested_webpack_require_187__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__nested_webpack_require_187__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __nested_webpack_require_187__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__nested_webpack_require_187__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __nested_webpack_require_187__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__nested_webpack_require_187__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__nested_webpack_require_187__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__nested_webpack_require_187__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__nested_webpack_require_187__.p = \"/dist/\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __nested_webpack_require_187__(__nested_webpack_require_187__.s = 91);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_3672__) {\n\n\"use strict\";\n/* harmony export (binding) */ __nested_webpack_require_3672__.d(__nested_webpack_exports__, \"a\", function() { return normalizeComponent; });\n/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nfunction normalizeComponent (\n  scriptExports,\n  render,\n  staticRenderFns,\n  functionalTemplate,\n  injectStyles,\n  scopeId,\n  moduleIdentifier, /* server only */\n  shadowMode /* vue-cli only */\n) {\n  // Vue.extend constructor export interop\n  var options = typeof scriptExports === 'function'\n    ? scriptExports.options\n    : scriptExports\n\n  // render functions\n  if (render) {\n    options.render = render\n    options.staticRenderFns = staticRenderFns\n    options._compiled = true\n  }\n\n  // functional template\n  if (functionalTemplate) {\n    options.functional = true\n  }\n\n  // scopedId\n  if (scopeId) {\n    options._scopeId = 'data-v-' + scopeId\n  }\n\n  var hook\n  if (moduleIdentifier) { // server build\n    hook = function (context) {\n      // 2.3 injection\n      context =\n        context || // cached call\n        (this.$vnode && this.$vnode.ssrContext) || // stateful\n        (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n      // 2.2 with runInNewContext: true\n      if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n        context = __VUE_SSR_CONTEXT__\n      }\n      // inject component styles\n      if (injectStyles) {\n        injectStyles.call(this, context)\n      }\n      // register component module identifier for async chunk inferrence\n      if (context && context._registeredComponents) {\n        context._registeredComponents.add(moduleIdentifier)\n      }\n    }\n    // used by ssr in case component is cached and beforeCreate\n    // never gets called\n    options._ssrRegister = hook\n  } else if (injectStyles) {\n    hook = shadowMode\n      ? function () { injectStyles.call(this, this.$root.$options.shadowRoot) }\n      : injectStyles\n  }\n\n  if (hook) {\n    if (options.functional) {\n      // for template-only hot-reload because in that case the render fn doesn't\n      // go through the normalizer\n      options._injectStyles = hook\n      // register for functioal component in vue file\n      var originalRender = options.render\n      options.render = function renderWithStyleInjection (h, context) {\n        hook.call(context)\n        return originalRender(h, context)\n      }\n    } else {\n      // inject component registration as beforeCreate hook\n      var existing = options.beforeCreate\n      options.beforeCreate = existing\n        ? [].concat(existing, hook)\n        : [hook]\n    }\n  }\n\n  return {\n    exports: scriptExports,\n    options: options\n  }\n}\n\n\n/***/ }),\n\n/***/ 4:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/mixins/emitter */ \"./node_modules/element-ui/lib/mixins/emitter.js\");\n\n/***/ }),\n\n/***/ 91:\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_6691__) {\n\n\"use strict\";\n__nested_webpack_require_6691__.r(__nested_webpack_exports__);\n\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/checkbox/src/checkbox.vue?vue&type=template&id=d0387074&\nvar render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"label\",\n    {\n      staticClass: \"el-checkbox\",\n      class: [\n        _vm.border && _vm.checkboxSize\n          ? \"el-checkbox--\" + _vm.checkboxSize\n          : \"\",\n        { \"is-disabled\": _vm.isDisabled },\n        { \"is-bordered\": _vm.border },\n        { \"is-checked\": _vm.isChecked }\n      ],\n      attrs: { id: _vm.id }\n    },\n    [\n      _c(\n        \"span\",\n        {\n          staticClass: \"el-checkbox__input\",\n          class: {\n            \"is-disabled\": _vm.isDisabled,\n            \"is-checked\": _vm.isChecked,\n            \"is-indeterminate\": _vm.indeterminate,\n            \"is-focus\": _vm.focus\n          },\n          attrs: {\n            tabindex: _vm.indeterminate ? 0 : false,\n            role: _vm.indeterminate ? \"checkbox\" : false,\n            \"aria-checked\": _vm.indeterminate ? \"mixed\" : false\n          }\n        },\n        [\n          _c(\"span\", { staticClass: \"el-checkbox__inner\" }),\n          _vm.trueLabel || _vm.falseLabel\n            ? _c(\"input\", {\n                directives: [\n                  {\n                    name: \"model\",\n                    rawName: \"v-model\",\n                    value: _vm.model,\n                    expression: \"model\"\n                  }\n                ],\n                staticClass: \"el-checkbox__original\",\n                attrs: {\n                  type: \"checkbox\",\n                  \"aria-hidden\": _vm.indeterminate ? \"true\" : \"false\",\n                  name: _vm.name,\n                  disabled: _vm.isDisabled,\n                  \"true-value\": _vm.trueLabel,\n                  \"false-value\": _vm.falseLabel\n                },\n                domProps: {\n                  checked: Array.isArray(_vm.model)\n                    ? _vm._i(_vm.model, null) > -1\n                    : _vm._q(_vm.model, _vm.trueLabel)\n                },\n                on: {\n                  change: [\n                    function($event) {\n                      var $$a = _vm.model,\n                        $$el = $event.target,\n                        $$c = $$el.checked ? _vm.trueLabel : _vm.falseLabel\n                      if (Array.isArray($$a)) {\n                        var $$v = null,\n                          $$i = _vm._i($$a, $$v)\n                        if ($$el.checked) {\n                          $$i < 0 && (_vm.model = $$a.concat([$$v]))\n                        } else {\n                          $$i > -1 &&\n                            (_vm.model = $$a\n                              .slice(0, $$i)\n                              .concat($$a.slice($$i + 1)))\n                        }\n                      } else {\n                        _vm.model = $$c\n                      }\n                    },\n                    _vm.handleChange\n                  ],\n                  focus: function($event) {\n                    _vm.focus = true\n                  },\n                  blur: function($event) {\n                    _vm.focus = false\n                  }\n                }\n              })\n            : _c(\"input\", {\n                directives: [\n                  {\n                    name: \"model\",\n                    rawName: \"v-model\",\n                    value: _vm.model,\n                    expression: \"model\"\n                  }\n                ],\n                staticClass: \"el-checkbox__original\",\n                attrs: {\n                  type: \"checkbox\",\n                  \"aria-hidden\": _vm.indeterminate ? \"true\" : \"false\",\n                  disabled: _vm.isDisabled,\n                  name: _vm.name\n                },\n                domProps: {\n                  value: _vm.label,\n                  checked: Array.isArray(_vm.model)\n                    ? _vm._i(_vm.model, _vm.label) > -1\n                    : _vm.model\n                },\n                on: {\n                  change: [\n                    function($event) {\n                      var $$a = _vm.model,\n                        $$el = $event.target,\n                        $$c = $$el.checked ? true : false\n                      if (Array.isArray($$a)) {\n                        var $$v = _vm.label,\n                          $$i = _vm._i($$a, $$v)\n                        if ($$el.checked) {\n                          $$i < 0 && (_vm.model = $$a.concat([$$v]))\n                        } else {\n                          $$i > -1 &&\n                            (_vm.model = $$a\n                              .slice(0, $$i)\n                              .concat($$a.slice($$i + 1)))\n                        }\n                      } else {\n                        _vm.model = $$c\n                      }\n                    },\n                    _vm.handleChange\n                  ],\n                  focus: function($event) {\n                    _vm.focus = true\n                  },\n                  blur: function($event) {\n                    _vm.focus = false\n                  }\n                }\n              })\n        ]\n      ),\n      _vm.$slots.default || _vm.label\n        ? _c(\n            \"span\",\n            { staticClass: \"el-checkbox__label\" },\n            [\n              _vm._t(\"default\"),\n              !_vm.$slots.default ? [_vm._v(_vm._s(_vm.label))] : _vm._e()\n            ],\n            2\n          )\n        : _vm._e()\n    ]\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/checkbox/src/checkbox.vue?vue&type=template&id=d0387074&\n\n// EXTERNAL MODULE: external \"element-ui/lib/mixins/emitter\"\nvar emitter_ = __nested_webpack_require_6691__(4);\nvar emitter_default = /*#__PURE__*/__nested_webpack_require_6691__.n(emitter_);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/checkbox/src/checkbox.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n/* harmony default export */ var checkboxvue_type_script_lang_js_ = ({\n  name: 'ElCheckbox',\n\n  mixins: [emitter_default.a],\n\n  inject: {\n    elForm: {\n      default: ''\n    },\n    elFormItem: {\n      default: ''\n    }\n  },\n\n  componentName: 'ElCheckbox',\n\n  data: function data() {\n    return {\n      selfModel: false,\n      focus: false,\n      isLimitExceeded: false\n    };\n  },\n\n\n  computed: {\n    model: {\n      get: function get() {\n        return this.isGroup ? this.store : this.value !== undefined ? this.value : this.selfModel;\n      },\n      set: function set(val) {\n        if (this.isGroup) {\n          this.isLimitExceeded = false;\n          this._checkboxGroup.min !== undefined && val.length < this._checkboxGroup.min && (this.isLimitExceeded = true);\n\n          this._checkboxGroup.max !== undefined && val.length > this._checkboxGroup.max && (this.isLimitExceeded = true);\n\n          this.isLimitExceeded === false && this.dispatch('ElCheckboxGroup', 'input', [val]);\n        } else {\n          this.$emit('input', val);\n          this.selfModel = val;\n        }\n      }\n    },\n\n    isChecked: function isChecked() {\n      if ({}.toString.call(this.model) === '[object Boolean]') {\n        return this.model;\n      } else if (Array.isArray(this.model)) {\n        return this.model.indexOf(this.label) > -1;\n      } else if (this.model !== null && this.model !== undefined) {\n        return this.model === this.trueLabel;\n      }\n    },\n    isGroup: function isGroup() {\n      var parent = this.$parent;\n      while (parent) {\n        if (parent.$options.componentName !== 'ElCheckboxGroup') {\n          parent = parent.$parent;\n        } else {\n          this._checkboxGroup = parent;\n          return true;\n        }\n      }\n      return false;\n    },\n    store: function store() {\n      return this._checkboxGroup ? this._checkboxGroup.value : this.value;\n    },\n\n\n    /* used to make the isDisabled judgment under max/min props */\n    isLimitDisabled: function isLimitDisabled() {\n      var _checkboxGroup = this._checkboxGroup,\n          max = _checkboxGroup.max,\n          min = _checkboxGroup.min;\n\n      return !!(max || min) && this.model.length >= max && !this.isChecked || this.model.length <= min && this.isChecked;\n    },\n    isDisabled: function isDisabled() {\n      return this.isGroup ? this._checkboxGroup.disabled || this.disabled || (this.elForm || {}).disabled || this.isLimitDisabled : this.disabled || (this.elForm || {}).disabled;\n    },\n    _elFormItemSize: function _elFormItemSize() {\n      return (this.elFormItem || {}).elFormItemSize;\n    },\n    checkboxSize: function checkboxSize() {\n      var temCheckboxSize = this.size || this._elFormItemSize || (this.$ELEMENT || {}).size;\n      return this.isGroup ? this._checkboxGroup.checkboxGroupSize || temCheckboxSize : temCheckboxSize;\n    }\n  },\n\n  props: {\n    value: {},\n    label: {},\n    indeterminate: Boolean,\n    disabled: Boolean,\n    checked: Boolean,\n    name: String,\n    trueLabel: [String, Number],\n    falseLabel: [String, Number],\n    id: String, /* 当indeterminate为真时,为controls提供相关连的checkbox的id,表明元素间的控制关系*/\n    controls: String, /* 当indeterminate为真时,为controls提供相关连的checkbox的id,表明元素间的控制关系*/\n    border: Boolean,\n    size: String\n  },\n\n  methods: {\n    addToStore: function addToStore() {\n      if (Array.isArray(this.model) && this.model.indexOf(this.label) === -1) {\n        this.model.push(this.label);\n      } else {\n        this.model = this.trueLabel || true;\n      }\n    },\n    handleChange: function handleChange(ev) {\n      var _this = this;\n\n      if (this.isLimitExceeded) return;\n      var value = void 0;\n      if (ev.target.checked) {\n        value = this.trueLabel === undefined ? true : this.trueLabel;\n      } else {\n        value = this.falseLabel === undefined ? false : this.falseLabel;\n      }\n      this.$emit('change', value, ev);\n      this.$nextTick(function () {\n        if (_this.isGroup) {\n          _this.dispatch('ElCheckboxGroup', 'change', [_this._checkboxGroup.value]);\n        }\n      });\n    }\n  },\n\n  created: function created() {\n    this.checked && this.addToStore();\n  },\n  mounted: function mounted() {\n    // 为indeterminate元素 添加aria-controls 属性\n    if (this.indeterminate) {\n      this.$el.setAttribute('aria-controls', this.controls);\n    }\n  },\n\n\n  watch: {\n    value: function value(_value) {\n      this.dispatch('ElFormItem', 'el.form.change', _value);\n    }\n  }\n});\n// CONCATENATED MODULE: ./packages/checkbox/src/checkbox.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_checkboxvue_type_script_lang_js_ = (checkboxvue_type_script_lang_js_); \n// EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js\nvar componentNormalizer = __nested_webpack_require_6691__(0);\n\n// CONCATENATED MODULE: ./packages/checkbox/src/checkbox.vue\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(componentNormalizer[\"a\" /* default */])(\n  src_checkboxvue_type_script_lang_js_,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"packages/checkbox/src/checkbox.vue\"\n/* harmony default export */ var src_checkbox = (component.exports);\n// CONCATENATED MODULE: ./packages/checkbox/index.js\n\n\n/* istanbul ignore next */\nsrc_checkbox.install = function (Vue) {\n  Vue.component(src_checkbox.name, src_checkbox);\n};\n\n/* harmony default export */ var packages_checkbox = __nested_webpack_exports__[\"default\"] = (src_checkbox);\n\n/***/ })\n\n/******/ });//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvY2hlY2tib3guanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSw4QkFBOEI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsOEJBQW1CO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEVBQTBFLDhCQUFtQjtBQUM3RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsOEJBQW1CO0FBQzdCO0FBQ0E7QUFDQSxVQUFVLDhCQUFtQjtBQUM3QjtBQUNBO0FBQ0EsVUFBVSw4QkFBbUI7QUFDN0IsZUFBZSw4QkFBbUI7QUFDbEMsbURBQW1ELCtCQUErQjtBQUNsRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsOEJBQW1CO0FBQzdCO0FBQ0EsaUVBQWlFLGlCQUFpQjtBQUNsRjtBQUNBLDBEQUEwRCxhQUFhO0FBQ3ZFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSw4QkFBbUI7QUFDN0IsZ0NBQWdDLDhCQUFtQjtBQUNuRDtBQUNBO0FBQ0E7QUFDQSxXQUFXLDhCQUFtQjtBQUM5QixrREFBa0QsZ0NBQWdDO0FBQ2xGLDBFQUEwRSw4QkFBbUIsNEJBQTRCLG9CQUFvQjtBQUM3STtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsOEJBQW1CO0FBQzdCO0FBQ0Esb0NBQW9DLDRCQUE0QjtBQUNoRSwwQ0FBMEM7QUFDMUMsV0FBVyw4QkFBbUI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLDhCQUFtQixrQ0FBa0M7QUFDL0Q7QUFDQTtBQUNBLFVBQVUsOEJBQW1CO0FBQzdCO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQiw4QkFBbUIsQ0FBQyw4QkFBbUI7QUFDeEQsVUFBVTtBQUNWO0FBQ0E7O0FBRUE7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsK0JBQW1COztB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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsK0JBQW1COztBQUU3Qzs7Ozs7O0FBTUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLEtBQUssRUFBRSxZQUFZO0FBQ3ZCO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEscURBQXFELDBCQUFtQjs7QUFFeEUsT0FBTzs7QUFFUCxVQUFVIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2VsZW1lbnQtdWkvbGliL2NoZWNrYm94LmpzPzBiNzciXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPVxuLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcFxuLyoqKioqKi8gXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuLyoqKioqKi8gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuLyoqKioqKi8gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4vKioqKioqLyBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbi8qKioqKiovIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4vKioqKioqLyBcdFx0XHRpOiBtb2R1bGVJZCxcbi8qKioqKiovIFx0XHRcdGw6IGZhbHNlLFxuLyoqKioqKi8gXHRcdFx0ZXhwb3J0czoge31cbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbi8qKioqKiovIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuLyoqKioqKi8gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbi8qKioqKiovIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4vKioqKioqLyBcdH1cbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbi8qKioqKiovIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbi8qKioqKiovIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbi8qKioqKiovIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4vKioqKioqLyBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4vKioqKioqLyBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuLyoqKioqKi8gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4vKioqKioqLyBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuLyoqKioqKi8gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4vKioqKioqLyBcdFx0cmV0dXJuIG5zO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4vKioqKioqLyBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4vKioqKioqLyBcdFx0cmV0dXJuIGdldHRlcjtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIi9kaXN0L1wiO1xuLyoqKioqKi9cbi8qKioqKiovXG4vKioqKioqLyBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLyoqKioqKi8gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSA5MSk7XG4vKioqKioqLyB9KVxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKioqKiovICh7XG5cbi8qKiovIDA6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImFcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBub3JtYWxpemVDb21wb25lbnQ7IH0pO1xuLyogZ2xvYmFscyBfX1ZVRV9TU1JfQ09OVEVYVF9fICovXG5cbi8vIElNUE9SVEFOVDogRG8gTk9UIHVzZSBFUzIwMTUgZmVhdHVyZXMgaW4gdGhpcyBmaWxlIChleGNlcHQgZm9yIG1vZHVsZXMpLlxuLy8gVGhpcyBtb2R1bGUgaXMgYSBydW50aW1lIHV0aWxpdHkgZm9yIGNsZWFuZXIgY29tcG9uZW50IG1vZHVsZSBvdXRwdXQgYW5kIHdpbGxcbi8vIGJlIGluY2x1ZGVkIGluIHRoZSBmaW5hbCB3ZWJwYWNrIHVzZXIgYnVuZGxlLlxuXG5mdW5jdGlvbiBub3JtYWxpemVDb21wb25lbnQgKFxuICBzY3JpcHRFeHBvcnRzLFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZnVuY3Rpb25hbFRlbXBsYXRlLFxuICBpbmplY3RTdHlsZXMsXG4gIHNjb3BlSWQsXG4gIG1vZHVsZUlkZW50aWZpZXIsIC8qIHNlcnZlciBvbmx5ICovXG4gIHNoYWRvd01vZGUgLyogdnVlLWNsaSBvbmx5ICovXG4pIHtcbiAgLy8gVnVlLmV4dGVuZCBjb25zdHJ1Y3RvciBleHBvcnQgaW50ZXJvcFxuICB2YXIgb3B0aW9ucyA9IHR5cGVvZiBzY3JpcHRFeHBvcnRzID09PSAnZnVuY3Rpb24nXG4gICAgPyBzY3JpcHRFeHBvcnRzLm9wdGlvbnNcbiAgICA6IHNjcmlwdEV4cG9ydHNcblxuICAvLyByZW5kZXIgZnVuY3Rpb25zXG4gIGlmIChyZW5kZXIpIHtcbiAgICBvcHRpb25zLnJlbmRlciA9IHJlbmRlclxuICAgIG9wdGlvbnMuc3RhdGljUmVuZGVyRm5zID0gc3RhdGljUmVuZGVyRm5zXG4gICAgb3B0aW9ucy5fY29tcGlsZWQgPSB0cnVlXG4gIH1cblxuICAvLyBmdW5jdGlvbmFsIHRlbXBsYXRlXG4gIGlmIChmdW5jdGlvbmFsVGVtcGxhdGUpIHtcbiAgICBvcHRpb25zLmZ1bmN0aW9uYWwgPSB0cnVlXG4gIH1cblxuICAvLyBzY29wZWRJZFxuICBpZiAoc2NvcGVJZCkge1xuICAgIG9wdGlvbnMuX3Njb3BlSWQgPSAnZGF0YS12LScgKyBzY29wZUlkXG4gIH1cblxuICB2YXIgaG9va1xuICBpZiAobW9kdWxlSWRlbnRpZmllcikgeyAvLyBzZXJ2ZXIgYnVpbGRcbiAgICBob29rID0gZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICAgIC8vIDIuMyBpbmplY3Rpb25cbiAgICAgIGNvbnRleHQgPVxuICAgICAgICBjb250ZXh0IHx8IC8vIGNhY2hlZCBjYWxsXG4gICAgICAgICh0aGlzLiR2bm9kZSAmJiB0aGlzLiR2bm9kZS5zc3JDb250ZXh0KSB8fCAvLyBzdGF0ZWZ1bFxuICAgICAgICAodGhpcy5wYXJlbnQgJiYgdGhpcy5wYXJlbnQuJHZub2RlICYmIHRoaXMucGFyZW50LiR2bm9kZS5zc3JDb250ZXh0KSAvLyBmdW5jdGlvbmFsXG4gICAgICAvLyAyLjIgd2l0aCBydW5Jbk5ld0NvbnRleHQ6IHRydWVcbiAgICAgIGlmICghY29udGV4dCAmJiB0eXBlb2YgX19WVUVfU1NSX0NPTlRFWFRfXyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgY29udGV4dCA9IF9fVlVFX1NTUl9DT05URVhUX19cbiAgICAgIH1cbiAgICAgIC8vIGluamVjdCBjb21wb25lbnQgc3R5bGVzXG4gICAgICBpZiAoaW5qZWN0U3R5bGVzKSB7XG4gICAgICAgIGluamVjdFN0eWxlcy5jYWxsKHRoaXMsIGNvbnRleHQpXG4gICAgICB9XG4gICAgICAvLyByZWdpc3RlciBjb21wb25lbnQgbW9kdWxlIGlkZW50aWZpZXIgZm9yIGFzeW5jIGNodW5rIGluZmVycmVuY2VcbiAgICAgIGlmIChjb250ZXh0ICYmIGNvbnRleHQuX3JlZ2lzdGVyZWRDb21wb25lbnRzKSB7XG4gICAgICAgIGNvbnRleHQuX3JlZ2lzdGVyZWRDb21wb25lbnRzLmFkZChtb2R1bGVJZGVudGlmaWVyKVxuICAgICAgfVxuICAgIH1cbiAgICAvLyB1c2VkIGJ5IHNzciBpbiBjYXNlIGNvbXBvbmVudCBpcyBjYWNoZWQgYW5kIGJlZm9yZUNyZWF0ZVxuICAgIC8vIG5ldmVyIGdldHMgY2FsbGVkXG4gICAgb3B0aW9ucy5fc3NyUmVnaXN0ZXIgPSBob29rXG4gIH0gZWxzZSBpZiAoaW5qZWN0U3R5bGVzKSB7XG4gICAgaG9vayA9IHNoYWRvd01vZGVcbiAgICAgID8gZnVuY3Rpb24gKCkgeyBpbmplY3RTdHlsZXMuY2FsbCh0aGlzLCB0aGlzLiRyb290LiRvcHRpb25zLnNoYWRvd1Jvb3QpIH1cbiAgICAgIDogaW5qZWN0U3R5bGVzXG4gIH1cblxuICBpZiAoaG9vaykge1xuICAgIGlmIChvcHRpb25zLmZ1bmN0aW9uYWwpIHtcbiAgICAgIC8vIGZvciB0ZW1wbGF0ZS1vbmx5IGhvdC1yZWxvYWQgYmVjYXVzZSBpbiB0aGF0IGNhc2UgdGhlIHJlbmRlciBmbiBkb2Vzbid0XG4gICAgICAvLyBnbyB0aHJvdWdoIHRoZSBub3JtYWxpemVyXG4gICAgICBvcHRpb25zLl9pbmplY3RTdHlsZXMgPSBob29rXG4gICAgICAvLyByZWdpc3RlciBmb3IgZnVuY3Rpb2FsIGNvbXBvbmVudCBpbiB2dWUgZmlsZVxuICAgICAgdmFyIG9yaWdpbmFsUmVuZGVyID0gb3B0aW9ucy5yZW5kZXJcbiAgICAgIG9wdGlvbnMucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyV2l0aFN0eWxlSW5qZWN0aW9uIChoLCBjb250ZXh0KSB7XG4gICAgICAgIGhvb2suY2FsbChjb250ZXh0KVxuICAgICAgICByZXR1cm4gb3JpZ2luYWxSZW5kZXIoaCwgY29udGV4dClcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaW5qZWN0IGNvbXBvbmVudCByZWdpc3RyYXRpb24gYXMgYmVmb3JlQ3JlYXRlIGhvb2tcbiAgICAgIHZhciBleGlzdGluZyA9IG9wdGlvbnMuYmVmb3JlQ3JlYXRlXG4gICAgICBvcHRpb25zLmJlZm9yZUNyZWF0ZSA9IGV4aXN0aW5nXG4gICAgICAgID8gW10uY29uY2F0KGV4aXN0aW5nLCBob29rKVxuICAgICAgICA6IFtob29rXVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZXhwb3J0czogc2NyaXB0RXhwb3J0cyxcbiAgICBvcHRpb25zOiBvcHRpb25zXG4gIH1cbn1cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gNDpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlbWVudC11aS9saWIvbWl4aW5zL2VtaXR0ZXJcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyA5MTpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvY2hlY2tib3gvc3JjL2NoZWNrYm94LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1kMDM4NzA3NCZcbnZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJsYWJlbFwiLFxuICAgIHtcbiAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWNoZWNrYm94XCIsXG4gICAgICBjbGFzczogW1xuICAgICAgICBfdm0uYm9yZGVyICYmIF92bS5jaGVja2JveFNpemVcbiAgICAgICAgICA/IFwiZWwtY2hlY2tib3gtLVwiICsgX3ZtLmNoZWNrYm94U2l6ZVxuICAgICAgICAgIDogXCJcIixcbiAgICAgICAgeyBcImlzLWRpc2FibGVkXCI6IF92bS5pc0Rpc2FibGVkIH0sXG4gICAgICAgIHsgXCJpcy1ib3JkZXJlZFwiOiBfdm0uYm9yZGVyIH0sXG4gICAgICAgIHsgXCJpcy1jaGVja2VkXCI6IF92bS5pc0NoZWNrZWQgfVxuICAgICAgXSxcbiAgICAgIGF0dHJzOiB7IGlkOiBfdm0uaWQgfVxuICAgIH0sXG4gICAgW1xuICAgICAgX2MoXG4gICAgICAgIFwic3BhblwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtY2hlY2tib3hfX2lucHV0XCIsXG4gICAgICAgICAgY2xhc3M6IHtcbiAgICAgICAgICAgIFwiaXMtZGlzYWJsZWRcIjogX3ZtLmlzRGlzYWJsZWQsXG4gICAgICAgICAgICBcImlzLWNoZWNrZWRcIjogX3ZtLmlzQ2hlY2tlZCxcbiAgICAgICAgICAgIFwiaXMtaW5kZXRlcm1pbmF0ZVwiOiBfdm0uaW5kZXRlcm1pbmF0ZSxcbiAgICAgICAgICAgIFwiaXMtZm9jdXNcIjogX3ZtLmZvY3VzXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgdGFiaW5kZXg6IF92bS5pbmRldGVybWluYXRlID8gMCA6IGZhbHNlLFxuICAgICAgICAgICAgcm9sZTogX3ZtLmluZGV0ZXJtaW5hdGUgPyBcImNoZWNrYm94XCIgOiBmYWxzZSxcbiAgICAgICAgICAgIFwiYXJpYS1jaGVja2VkXCI6IF92bS5pbmRldGVybWluYXRlID8gXCJtaXhlZFwiIDogZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFtcbiAgICAgICAgICBfYyhcInNwYW5cIiwgeyBzdGF0aWNDbGFzczogXCJlbC1jaGVja2JveF9faW5uZXJcIiB9KSxcbiAgICAgICAgICBfdm0udHJ1ZUxhYmVsIHx8IF92bS5mYWxzZUxhYmVsXG4gICAgICAgICAgICA/IF9jKFwiaW5wdXRcIiwge1xuICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJtb2RlbFwiLFxuICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtbW9kZWxcIixcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IF92bS5tb2RlbCxcbiAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJtb2RlbFwiXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1jaGVja2JveF9fb3JpZ2luYWxcIixcbiAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgdHlwZTogXCJjaGVja2JveFwiLFxuICAgICAgICAgICAgICAgICAgXCJhcmlhLWhpZGRlblwiOiBfdm0uaW5kZXRlcm1pbmF0ZSA/IFwidHJ1ZVwiIDogXCJmYWxzZVwiLFxuICAgICAgICAgICAgICAgICAgbmFtZTogX3ZtLm5hbWUsXG4gICAgICAgICAgICAgICAgICBkaXNhYmxlZDogX3ZtLmlzRGlzYWJsZWQsXG4gICAgICAgICAgICAgICAgICBcInRydWUtdmFsdWVcIjogX3ZtLnRydWVMYWJlbCxcbiAgICAgICAgICAgICAgICAgIFwiZmFsc2UtdmFsdWVcIjogX3ZtLmZhbHNlTGFiZWxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGRvbVByb3BzOiB7XG4gICAgICAgICAgICAgICAgICBjaGVja2VkOiBBcnJheS5pc0FycmF5KF92bS5tb2RlbClcbiAgICAgICAgICAgICAgICAgICAgPyBfdm0uX2koX3ZtLm1vZGVsLCBudWxsKSA+IC0xXG4gICAgICAgICAgICAgICAgICAgIDogX3ZtLl9xKF92bS5tb2RlbCwgX3ZtLnRydWVMYWJlbClcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICBjaGFuZ2U6IFtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgdmFyICQkYSA9IF92bS5tb2RlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICQkZWwgPSAkZXZlbnQudGFyZ2V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgJCRjID0gJCRlbC5jaGVja2VkID8gX3ZtLnRydWVMYWJlbCA6IF92bS5mYWxzZUxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoJCRhKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyICQkdiA9IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICQkaSA9IF92bS5faSgkJGEsICQkdilcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkJGVsLmNoZWNrZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJCRpIDwgMCAmJiAoX3ZtLm1vZGVsID0gJCRhLmNvbmNhdChbJCR2XSkpXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAkJGkgPiAtMSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfdm0ubW9kZWwgPSAkJGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zbGljZSgwLCAkJGkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KCQkYS5zbGljZSgkJGkgKyAxKSkpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS5tb2RlbCA9ICQkY1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgX3ZtLmhhbmRsZUNoYW5nZVxuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgIGZvY3VzOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgX3ZtLmZvY3VzID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIGJsdXI6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICBfdm0uZm9jdXMgPSBmYWxzZVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIDogX2MoXCJpbnB1dFwiLCB7XG4gICAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIm1vZGVsXCIsXG4gICAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1tb2RlbFwiLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLm1vZGVsLFxuICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcIm1vZGVsXCJcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWNoZWNrYm94X19vcmlnaW5hbFwiLFxuICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiBcImNoZWNrYm94XCIsXG4gICAgICAgICAgICAgICAgICBcImFyaWEtaGlkZGVuXCI6IF92bS5pbmRldGVybWluYXRlID8gXCJ0cnVlXCIgOiBcImZhbHNlXCIsXG4gICAgICAgICAgICAgICAgICBkaXNhYmxlZDogX3ZtLmlzRGlzYWJsZWQsXG4gICAgICAgICAgICAgICAgICBuYW1lOiBfdm0ubmFtZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZG9tUHJvcHM6IHtcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0ubGFiZWwsXG4gICAgICAgICAgICAgICAgICBjaGVja2VkOiBBcnJheS5pc0FycmF5KF92bS5tb2RlbClcbiAgICAgICAgICAgICAgICAgICAgPyBfdm0uX2koX3ZtLm1vZGVsLCBfdm0ubGFiZWwpID4gLTFcbiAgICAgICAgICAgICAgICAgICAgOiBfdm0ubW9kZWxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICBjaGFuZ2U6IFtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgdmFyICQkYSA9IF92bS5tb2RlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICQkZWwgPSAkZXZlbnQudGFyZ2V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgJCRjID0gJCRlbC5jaGVja2VkID8gdHJ1ZSA6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoJCRhKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyICQkdiA9IF92bS5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJCRpID0gX3ZtLl9pKCQkYSwgJCR2KVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCQkZWwuY2hlY2tlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAkJGkgPCAwICYmIChfdm0ubW9kZWwgPSAkJGEuY29uY2F0KFskJHZdKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICQkaSA+IC0xICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKF92bS5tb2RlbCA9ICQkYVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNsaWNlKDAsICQkaSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoJCRhLnNsaWNlKCQkaSArIDEpKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLm1vZGVsID0gJCRjXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBfdm0uaGFuZGxlQ2hhbmdlXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgZm9jdXM6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICBfdm0uZm9jdXMgPSB0cnVlXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgYmx1cjogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIF92bS5mb2N1cyA9IGZhbHNlXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICBdXG4gICAgICApLFxuICAgICAgX3ZtLiRzbG90cy5kZWZhdWx0IHx8IF92bS5sYWJlbFxuICAgICAgICA/IF9jKFxuICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiBcImVsLWNoZWNrYm94X19sYWJlbFwiIH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF92bS5fdChcImRlZmF1bHRcIiksXG4gICAgICAgICAgICAgICFfdm0uJHNsb3RzLmRlZmF1bHQgPyBbX3ZtLl92KF92bS5fcyhfdm0ubGFiZWwpKV0gOiBfdm0uX2UoKVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIDJcbiAgICAgICAgICApXG4gICAgICAgIDogX3ZtLl9lKClcbiAgICBdXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jaGVja2JveC9zcmMvY2hlY2tib3gudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWQwMzg3MDc0JlxuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiZWxlbWVudC11aS9saWIvbWl4aW5zL2VtaXR0ZXJcIlxudmFyIGVtaXR0ZXJfID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcbnZhciBlbWl0dGVyX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGVtaXR0ZXJfKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvY2hlY2tib3gvc3JjL2NoZWNrYm94LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cblxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBjaGVja2JveHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG5hbWU6ICdFbENoZWNrYm94JyxcblxuICBtaXhpbnM6IFtlbWl0dGVyX2RlZmF1bHQuYV0sXG5cbiAgaW5qZWN0OiB7XG4gICAgZWxGb3JtOiB7XG4gICAgICBkZWZhdWx0OiAnJ1xuICAgIH0sXG4gICAgZWxGb3JtSXRlbToge1xuICAgICAgZGVmYXVsdDogJydcbiAgICB9XG4gIH0sXG5cbiAgY29tcG9uZW50TmFtZTogJ0VsQ2hlY2tib3gnLFxuXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNlbGZNb2RlbDogZmFsc2UsXG4gICAgICBmb2N1czogZmFsc2UsXG4gICAgICBpc0xpbWl0RXhjZWVkZWQ6IGZhbHNlXG4gICAgfTtcbiAgfSxcblxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbW9kZWw6IHtcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0dyb3VwID8gdGhpcy5zdG9yZSA6IHRoaXMudmFsdWUgIT09IHVuZGVmaW5lZCA/IHRoaXMudmFsdWUgOiB0aGlzLnNlbGZNb2RlbDtcbiAgICAgIH0sXG4gICAgICBzZXQ6IGZ1bmN0aW9uIHNldCh2YWwpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNHcm91cCkge1xuICAgICAgICAgIHRoaXMuaXNMaW1pdEV4Y2VlZGVkID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY2hlY2tib3hHcm91cC5taW4gIT09IHVuZGVmaW5lZCAmJiB2YWwubGVuZ3RoIDwgdGhpcy5fY2hlY2tib3hHcm91cC5taW4gJiYgKHRoaXMuaXNMaW1pdEV4Y2VlZGVkID0gdHJ1ZSk7XG5cbiAgICAgICAgICB0aGlzLl9jaGVja2JveEdyb3VwLm1heCAhPT0gdW5kZWZpbmVkICYmIHZhbC5sZW5ndGggPiB0aGlzLl9jaGVja2JveEdyb3VwLm1heCAmJiAodGhpcy5pc0xpbWl0RXhjZWVkZWQgPSB0cnVlKTtcblxuICAgICAgICAgIHRoaXMuaXNMaW1pdEV4Y2VlZGVkID09PSBmYWxzZSAmJiB0aGlzLmRpc3BhdGNoKCdFbENoZWNrYm94R3JvdXAnLCAnaW5wdXQnLCBbdmFsXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCB2YWwpO1xuICAgICAgICAgIHRoaXMuc2VsZk1vZGVsID0gdmFsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGlzQ2hlY2tlZDogZnVuY3Rpb24gaXNDaGVja2VkKCkge1xuICAgICAgaWYgKHt9LnRvU3RyaW5nLmNhbGwodGhpcy5tb2RlbCkgPT09ICdbb2JqZWN0IEJvb2xlYW5dJykge1xuICAgICAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLm1vZGVsKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5tb2RlbC5pbmRleE9mKHRoaXMubGFiZWwpID4gLTE7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMubW9kZWwgIT09IG51bGwgJiYgdGhpcy5tb2RlbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVsID09PSB0aGlzLnRydWVMYWJlbDtcbiAgICAgIH1cbiAgICB9LFxuICAgIGlzR3JvdXA6IGZ1bmN0aW9uIGlzR3JvdXAoKSB7XG4gICAgICB2YXIgcGFyZW50ID0gdGhpcy4kcGFyZW50O1xuICAgICAgd2hpbGUgKHBhcmVudCkge1xuICAgICAgICBpZiAocGFyZW50LiRvcHRpb25zLmNvbXBvbmVudE5hbWUgIT09ICdFbENoZWNrYm94R3JvdXAnKSB7XG4gICAgICAgICAgcGFyZW50ID0gcGFyZW50LiRwYXJlbnQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5fY2hlY2tib3hHcm91cCA9IHBhcmVudDtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG4gICAgc3RvcmU6IGZ1bmN0aW9uIHN0b3JlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2NoZWNrYm94R3JvdXAgPyB0aGlzLl9jaGVja2JveEdyb3VwLnZhbHVlIDogdGhpcy52YWx1ZTtcbiAgICB9LFxuXG5cbiAgICAvKiB1c2VkIHRvIG1ha2UgdGhlIGlzRGlzYWJsZWQganVkZ21lbnQgdW5kZXIgbWF4L21pbiBwcm9wcyAqL1xuICAgIGlzTGltaXREaXNhYmxlZDogZnVuY3Rpb24gaXNMaW1pdERpc2FibGVkKCkge1xuICAgICAgdmFyIF9jaGVja2JveEdyb3VwID0gdGhpcy5fY2hlY2tib3hHcm91cCxcbiAgICAgICAgICBtYXggPSBfY2hlY2tib3hHcm91cC5tYXgsXG4gICAgICAgICAgbWluID0gX2NoZWNrYm94R3JvdXAubWluO1xuXG4gICAgICByZXR1cm4gISEobWF4IHx8IG1pbikgJiYgdGhpcy5tb2RlbC5sZW5ndGggPj0gbWF4ICYmICF0aGlzLmlzQ2hlY2tlZCB8fCB0aGlzLm1vZGVsLmxlbmd0aCA8PSBtaW4gJiYgdGhpcy5pc0NoZWNrZWQ7XG4gICAgfSxcbiAgICBpc0Rpc2FibGVkOiBmdW5jdGlvbiBpc0Rpc2FibGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNHcm91cCA/IHRoaXMuX2NoZWNrYm94R3JvdXAuZGlzYWJsZWQgfHwgdGhpcy5kaXNhYmxlZCB8fCAodGhpcy5lbEZvcm0gfHwge30pLmRpc2FibGVkIHx8IHRoaXMuaXNMaW1pdERpc2FibGVkIDogdGhpcy5kaXNhYmxlZCB8fCAodGhpcy5lbEZvcm0gfHwge30pLmRpc2FibGVkO1xuICAgIH0sXG4gICAgX2VsRm9ybUl0ZW1TaXplOiBmdW5jdGlvbiBfZWxGb3JtSXRlbVNpemUoKSB7XG4gICAgICByZXR1cm4gKHRoaXMuZWxGb3JtSXRlbSB8fCB7fSkuZWxGb3JtSXRlbVNpemU7XG4gICAgfSxcbiAgICBjaGVja2JveFNpemU6IGZ1bmN0aW9uIGNoZWNrYm94U2l6ZSgpIHtcbiAgICAgIHZhciB0ZW1DaGVja2JveFNpemUgPSB0aGlzLnNpemUgfHwgdGhpcy5fZWxGb3JtSXRlbVNpemUgfHwgKHRoaXMuJEVMRU1FTlQgfHwge30pLnNpemU7XG4gICAgICByZXR1cm4gdGhpcy5pc0dyb3VwID8gdGhpcy5fY2hlY2tib3hHcm91cC5jaGVja2JveEdyb3VwU2l6ZSB8fCB0ZW1DaGVja2JveFNpemUgOiB0ZW1DaGVja2JveFNpemU7XG4gICAgfVxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgdmFsdWU6IHt9LFxuICAgIGxhYmVsOiB7fSxcbiAgICBpbmRldGVybWluYXRlOiBCb29sZWFuLFxuICAgIGRpc2FibGVkOiBCb29sZWFuLFxuICAgIGNoZWNrZWQ6IEJvb2xlYW4sXG4gICAgbmFtZTogU3RyaW5nLFxuICAgIHRydWVMYWJlbDogW1N0cmluZywgTnVtYmVyXSxcbiAgICBmYWxzZUxhYmVsOiBbU3RyaW5nLCBOdW1iZXJdLFxuICAgIGlkOiBTdHJpbmcsIC8qIOW9k2luZGV0ZXJtaW5hdGXkuLrnnJ/ml7bvvIzkuLpjb250cm9sc+aPkOS+m+ebuOWFs+i/nueahGNoZWNrYm9455qEaWTvvIzooajmmI7lhYPntKDpl7TnmoTmjqfliLblhbPns7sqL1xuICAgIGNvbnRyb2xzOiBTdHJpbmcsIC8qIOW9k2luZGV0ZXJtaW5hdGXkuLrnnJ/ml7bvvIzkuLpjb250cm9sc+aPkOS+m+ebuOWFs+i/nueahGNoZWNrYm9455qEaWTvvIzooajmmI7lhYPntKDpl7TnmoTmjqfliLblhbPns7sqL1xuICAgIGJvcmRlcjogQm9vbGVhbixcbiAgICBzaXplOiBTdHJpbmdcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgYWRkVG9TdG9yZTogZnVuY3Rpb24gYWRkVG9TdG9yZSgpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMubW9kZWwpICYmIHRoaXMubW9kZWwuaW5kZXhPZih0aGlzLmxhYmVsKSA9PT0gLTEpIHtcbiAgICAgICAgdGhpcy5tb2RlbC5wdXNoKHRoaXMubGFiZWwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5tb2RlbCA9IHRoaXMudHJ1ZUxhYmVsIHx8IHRydWU7XG4gICAgICB9XG4gICAgfSxcbiAgICBoYW5kbGVDaGFuZ2U6IGZ1bmN0aW9uIGhhbmRsZUNoYW5nZShldikge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgaWYgKHRoaXMuaXNMaW1pdEV4Y2VlZGVkKSByZXR1cm47XG4gICAgICB2YXIgdmFsdWUgPSB2b2lkIDA7XG4gICAgICBpZiAoZXYudGFyZ2V0LmNoZWNrZWQpIHtcbiAgICAgICAgdmFsdWUgPSB0aGlzLnRydWVMYWJlbCA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IHRoaXMudHJ1ZUxhYmVsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWUgPSB0aGlzLmZhbHNlTGFiZWwgPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogdGhpcy5mYWxzZUxhYmVsO1xuICAgICAgfVxuICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgdmFsdWUsIGV2KTtcbiAgICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKF90aGlzLmlzR3JvdXApIHtcbiAgICAgICAgICBfdGhpcy5kaXNwYXRjaCgnRWxDaGVja2JveEdyb3VwJywgJ2NoYW5nZScsIFtfdGhpcy5fY2hlY2tib3hHcm91cC52YWx1ZV0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZDogZnVuY3Rpb24gY3JlYXRlZCgpIHtcbiAgICB0aGlzLmNoZWNrZWQgJiYgdGhpcy5hZGRUb1N0b3JlKCk7XG4gIH0sXG4gIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7XG4gICAgLy8g5Li6aW5kZXRlcm1pbmF0ZeWFg+e0oCDmt7vliqBhcmlhLWNvbnRyb2xzIOWxnuaAp1xuICAgIGlmICh0aGlzLmluZGV0ZXJtaW5hdGUpIHtcbiAgICAgIHRoaXMuJGVsLnNldEF0dHJpYnV0ZSgnYXJpYS1jb250cm9scycsIHRoaXMuY29udHJvbHMpO1xuICAgIH1cbiAgfSxcblxuXG4gIHdhdGNoOiB7XG4gICAgdmFsdWU6IGZ1bmN0aW9uIHZhbHVlKF92YWx1ZSkge1xuICAgICAgdGhpcy5kaXNwYXRjaCgnRWxGb3JtSXRlbScsICdlbC5mb3JtLmNoYW5nZScsIF92YWx1ZSk7XG4gICAgfVxuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY2hlY2tib3gvc3JjL2NoZWNrYm94LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfY2hlY2tib3h2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoY2hlY2tib3h2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIEVYVEVSTkFMIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXG52YXIgY29tcG9uZW50Tm9ybWFsaXplciA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY2hlY2tib3gvc3JjL2NoZWNrYm94LnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGNvbXBvbmVudCA9IE9iamVjdChjb21wb25lbnROb3JtYWxpemVyW1wiYVwiIC8qIGRlZmF1bHQgKi9dKShcbiAgc3JjX2NoZWNrYm94dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgYXBpOyB9XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL2NoZWNrYm94L3NyYy9jaGVja2JveC52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX2NoZWNrYm94ID0gKGNvbXBvbmVudC5leHBvcnRzKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY2hlY2tib3gvaW5kZXguanNcblxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuc3JjX2NoZWNrYm94Lmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG4gIFZ1ZS5jb21wb25lbnQoc3JjX2NoZWNrYm94Lm5hbWUsIHNyY19jaGVja2JveCk7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc19jaGVja2JveCA9IF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKHNyY19jaGVja2JveCk7XG5cbi8qKiovIH0pXG5cbi8qKioqKiovIH0pOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/checkbox.js\n");

/***/ }),

/***/ "./node_modules/element-ui/lib/element-ui.common.js":
/*!**********************************************************!*\
  !*** ./node_modules/element-ui/lib/element-ui.common.js ***!
  \**********************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

eval("module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __nested_webpack_require_187__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __nested_webpack_require_187__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__nested_webpack_require_187__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__nested_webpack_require_187__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__nested_webpack_require_187__.d = function(exports, name, getter) {\n/******/ \t\tif(!__nested_webpack_require_187__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__nested_webpack_require_187__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__nested_webpack_require_187__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __nested_webpack_require_187__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__nested_webpack_require_187__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __nested_webpack_require_187__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__nested_webpack_require_187__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__nested_webpack_require_187__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__nested_webpack_require_187__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__nested_webpack_require_187__.p = \"/dist/\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __nested_webpack_require_187__(__nested_webpack_require_187__.s = 46);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/date-util */ \"./node_modules/element-ui/lib/utils/date-util.js\");\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/dom */ \"./node_modules/element-ui/lib/utils/dom.js\");\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/util */ \"./node_modules/element-ui/lib/utils/util.js\");\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/mixins/emitter */ \"./node_modules/element-ui/lib/mixins/emitter.js\");\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/mixins/locale */ \"./node_modules/element-ui/lib/mixins/locale.js\");\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/vue-popper */ \"./node_modules/element-ui/lib/utils/vue-popper.js\");\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.esm.js\");\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/merge */ \"./node_modules/element-ui/lib/utils/merge.js\");\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/input */ \"./node_modules/element-ui/lib/input.js\");\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/mixins/migrating */ \"./node_modules/element-ui/lib/mixins/migrating.js\");\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/clickoutside */ \"./node_modules/element-ui/lib/utils/clickoutside.js\");\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/popup */ \"./node_modules/element-ui/lib/utils/popup/index.js\");\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/locale */ \"./node_modules/element-ui/lib/locale/index.js\");\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/button */ \"./node_modules/element-ui/lib/button.js\");\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/checkbox */ \"./node_modules/element-ui/lib/checkbox.js\");\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/resize-event */ \"./node_modules/element-ui/lib/utils/resize-event.js\");\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/types */ \"./node_modules/element-ui/lib/utils/types.js\");\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! throttle-debounce/debounce */ \"./node_modules/throttle-debounce/debounce.js\");\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/scrollbar */ \"./node_modules/element-ui/lib/scrollbar.js\");\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/shared */ \"./node_modules/element-ui/lib/utils/shared.js\");\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/date */ \"./node_modules/element-ui/lib/utils/date.js\");\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/transitions/collapse-transition */ \"./node_modules/element-ui/lib/transitions/collapse-transition.js\");\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/vdom */ \"./node_modules/element-ui/lib/utils/vdom.js\");\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/mixins/focus */ \"./node_modules/element-ui/lib/mixins/focus.js\");\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! babel-helper-vue-jsx-merge-props */ \"./node_modules/babel-helper-vue-jsx-merge-props/index.js\");\n\n/***/ }),\n/* 25 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! throttle-debounce/throttle */ \"./node_modules/throttle-debounce/throttle.js\");\n\n/***/ }),\n/* 26 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/tooltip */ \"./node_modules/element-ui/lib/tooltip.js\");\n\n/***/ }),\n/* 27 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/scroll-into-view */ \"./node_modules/element-ui/lib/utils/scroll-into-view.js\");\n\n/***/ }),\n/* 28 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/lodash */ \"./node_modules/element-ui/lib/utils/lodash.js\");\n\n/***/ }),\n/* 29 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/button-group */ \"./node_modules/element-ui/lib/button-group.js\");\n\n/***/ }),\n/* 30 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/tag */ \"./node_modules/element-ui/lib/tag.js\");\n\n/***/ }),\n/* 31 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/scrollbar-width */ \"./node_modules/element-ui/lib/utils/scrollbar-width.js\");\n\n/***/ }),\n/* 32 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/checkbox-group */ \"./node_modules/element-ui/lib/checkbox-group.js\");\n\n/***/ }),\n/* 33 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/after-leave */ \"./node_modules/element-ui/lib/utils/after-leave.js\");\n\n/***/ }),\n/* 34 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/progress */ \"./node_modules/element-ui/lib/progress.js\");\n\n/***/ }),\n/* 35 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/aria-utils */ \"./node_modules/element-ui/lib/utils/aria-utils.js\");\n\n/***/ }),\n/* 36 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! throttle-debounce */ \"./node_modules/throttle-debounce/index.js\");\n\n/***/ }),\n/* 37 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/select */ \"./node_modules/element-ui/lib/select.js\");\n\n/***/ }),\n/* 38 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/option */ \"./node_modules/element-ui/lib/option.js\");\n\n/***/ }),\n/* 39 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! normalize-wheel */ \"./node_modules/normalize-wheel/index.js\");\n\n/***/ }),\n/* 40 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/aria-dialog */ \"./node_modules/element-ui/lib/utils/aria-dialog.js\");\n\n/***/ }),\n/* 41 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! async-validator */ \"./node_modules/async-validator/es/index.js\");\n\n/***/ }),\n/* 42 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/input-number */ \"./node_modules/element-ui/lib/input-number.js\");\n\n/***/ }),\n/* 43 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/cascader-panel */ \"./node_modules/element-ui/lib/cascader-panel.js\");\n\n/***/ }),\n/* 44 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/radio */ \"./node_modules/element-ui/lib/radio.js\");\n\n/***/ }),\n/* 45 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/popover */ \"./node_modules/element-ui/lib/popover.js\");\n\n/***/ }),\n/* 46 */\n/***/ (function(module, exports, __nested_webpack_require_8794__) {\n\nmodule.exports = __nested_webpack_require_8794__(47);\n\n\n/***/ }),\n/* 47 */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_8926__) {\n\n\"use strict\";\n__nested_webpack_require_8926__.r(__nested_webpack_exports__);\n\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/pagination/src/pager.vue?vue&type=template&id=7274f267&\nvar pagervue_type_template_id_7274f267_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"ul\",\n    { staticClass: \"el-pager\", on: { click: _vm.onPagerClick } },\n    [\n      _vm.pageCount > 0\n        ? _c(\n            \"li\",\n            {\n              staticClass: \"number\",\n              class: { active: _vm.currentPage === 1, disabled: _vm.disabled }\n            },\n            [_vm._v(\"1\")]\n          )\n        : _vm._e(),\n      _vm.showPrevMore\n        ? _c(\"li\", {\n            staticClass: \"el-icon more btn-quickprev\",\n            class: [_vm.quickprevIconClass, { disabled: _vm.disabled }],\n            on: {\n              mouseenter: function($event) {\n                _vm.onMouseenter(\"left\")\n              },\n              mouseleave: function($event) {\n                _vm.quickprevIconClass = \"el-icon-more\"\n              }\n            }\n          })\n        : _vm._e(),\n      _vm._l(_vm.pagers, function(pager) {\n        return _c(\n          \"li\",\n          {\n            key: pager,\n            staticClass: \"number\",\n            class: { active: _vm.currentPage === pager, disabled: _vm.disabled }\n          },\n          [_vm._v(_vm._s(pager))]\n        )\n      }),\n      _vm.showNextMore\n        ? _c(\"li\", {\n            staticClass: \"el-icon more btn-quicknext\",\n            class: [_vm.quicknextIconClass, { disabled: _vm.disabled }],\n            on: {\n              mouseenter: function($event) {\n                _vm.onMouseenter(\"right\")\n              },\n              mouseleave: function($event) {\n                _vm.quicknextIconClass = \"el-icon-more\"\n              }\n            }\n          })\n        : _vm._e(),\n      _vm.pageCount > 1\n        ? _c(\n            \"li\",\n            {\n              staticClass: \"number\",\n              class: {\n                active: _vm.currentPage === _vm.pageCount,\n                disabled: _vm.disabled\n              }\n            },\n            [_vm._v(_vm._s(_vm.pageCount))]\n          )\n        : _vm._e()\n    ],\n    2\n  )\n}\nvar staticRenderFns = []\npagervue_type_template_id_7274f267_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/pagination/src/pager.vue?vue&type=template&id=7274f267&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/pagination/src/pager.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ var pagervue_type_script_lang_js_ = ({\n  name: 'ElPager',\n\n  props: {\n    currentPage: Number,\n\n    pageCount: Number,\n\n    pagerCount: Number,\n\n    disabled: Boolean\n  },\n\n  watch: {\n    showPrevMore: function showPrevMore(val) {\n      if (!val) this.quickprevIconClass = 'el-icon-more';\n    },\n    showNextMore: function showNextMore(val) {\n      if (!val) this.quicknextIconClass = 'el-icon-more';\n    }\n  },\n\n  methods: {\n    onPagerClick: function onPagerClick(event) {\n      var target = event.target;\n      if (target.tagName === 'UL' || this.disabled) {\n        return;\n      }\n\n      var newPage = Number(event.target.textContent);\n      var pageCount = this.pageCount;\n      var currentPage = this.currentPage;\n      var pagerCountOffset = this.pagerCount - 2;\n\n      if (target.className.indexOf('more') !== -1) {\n        if (target.className.indexOf('quickprev') !== -1) {\n          newPage = currentPage - pagerCountOffset;\n        } else if (target.className.indexOf('quicknext') !== -1) {\n          newPage = currentPage + pagerCountOffset;\n        }\n      }\n\n      /* istanbul ignore if */\n      if (!isNaN(newPage)) {\n        if (newPage < 1) {\n          newPage = 1;\n        }\n\n        if (newPage > pageCount) {\n          newPage = pageCount;\n        }\n      }\n\n      if (newPage !== currentPage) {\n        this.$emit('change', newPage);\n      }\n    },\n    onMouseenter: function onMouseenter(direction) {\n      if (this.disabled) return;\n      if (direction === 'left') {\n        this.quickprevIconClass = 'el-icon-d-arrow-left';\n      } else {\n        this.quicknextIconClass = 'el-icon-d-arrow-right';\n      }\n    }\n  },\n\n  computed: {\n    pagers: function pagers() {\n      var pagerCount = this.pagerCount;\n      var halfPagerCount = (pagerCount - 1) / 2;\n\n      var currentPage = Number(this.currentPage);\n      var pageCount = Number(this.pageCount);\n\n      var showPrevMore = false;\n      var showNextMore = false;\n\n      if (pageCount > pagerCount) {\n        if (currentPage > pagerCount - halfPagerCount) {\n          showPrevMore = true;\n        }\n\n        if (currentPage < pageCount - halfPagerCount) {\n          showNextMore = true;\n        }\n      }\n\n      var array = [];\n\n      if (showPrevMore && !showNextMore) {\n        var startPage = pageCount - (pagerCount - 2);\n        for (var i = startPage; i < pageCount; i++) {\n          array.push(i);\n        }\n      } else if (!showPrevMore && showNextMore) {\n        for (var _i = 2; _i < pagerCount; _i++) {\n          array.push(_i);\n        }\n      } else if (showPrevMore && showNextMore) {\n        var offset = Math.floor(pagerCount / 2) - 1;\n        for (var _i2 = currentPage - offset; _i2 <= currentPage + offset; _i2++) {\n          array.push(_i2);\n        }\n      } else {\n        for (var _i3 = 2; _i3 < pageCount; _i3++) {\n          array.push(_i3);\n        }\n      }\n\n      this.showPrevMore = showPrevMore;\n      this.showNextMore = showNextMore;\n\n      return array;\n    }\n  },\n\n  data: function data() {\n    return {\n      current: null,\n      showPrevMore: false,\n      showNextMore: false,\n      quicknextIconClass: 'el-icon-more',\n      quickprevIconClass: 'el-icon-more'\n    };\n  }\n});\n// CONCATENATED MODULE: ./packages/pagination/src/pager.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_pagervue_type_script_lang_js_ = (pagervue_type_script_lang_js_); \n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js\n/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nfunction normalizeComponent (\n  scriptExports,\n  render,\n  staticRenderFns,\n  functionalTemplate,\n  injectStyles,\n  scopeId,\n  moduleIdentifier, /* server only */\n  shadowMode /* vue-cli only */\n) {\n  // Vue.extend constructor export interop\n  var options = typeof scriptExports === 'function'\n    ? scriptExports.options\n    : scriptExports\n\n  // render functions\n  if (render) {\n    options.render = render\n    options.staticRenderFns = staticRenderFns\n    options._compiled = true\n  }\n\n  // functional template\n  if (functionalTemplate) {\n    options.functional = true\n  }\n\n  // scopedId\n  if (scopeId) {\n    options._scopeId = 'data-v-' + scopeId\n  }\n\n  var hook\n  if (moduleIdentifier) { // server build\n    hook = function (context) {\n      // 2.3 injection\n      context =\n        context || // cached call\n        (this.$vnode && this.$vnode.ssrContext) || // stateful\n        (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n      // 2.2 with runInNewContext: true\n      if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n        context = __VUE_SSR_CONTEXT__\n      }\n      // inject component styles\n      if (injectStyles) {\n        injectStyles.call(this, context)\n      }\n      // register component module identifier for async chunk inferrence\n      if (context && context._registeredComponents) {\n        context._registeredComponents.add(moduleIdentifier)\n      }\n    }\n    // used by ssr in case component is cached and beforeCreate\n    // never gets called\n    options._ssrRegister = hook\n  } else if (injectStyles) {\n    hook = shadowMode\n      ? function () { injectStyles.call(this, this.$root.$options.shadowRoot) }\n      : injectStyles\n  }\n\n  if (hook) {\n    if (options.functional) {\n      // for template-only hot-reload because in that case the render fn doesn't\n      // go through the normalizer\n      options._injectStyles = hook\n      // register for functioal component in vue file\n      var originalRender = options.render\n      options.render = function renderWithStyleInjection (h, context) {\n        hook.call(context)\n        return originalRender(h, context)\n      }\n    } else {\n      // inject component registration as beforeCreate hook\n      var existing = options.beforeCreate\n      options.beforeCreate = existing\n        ? [].concat(existing, hook)\n        : [hook]\n    }\n  }\n\n  return {\n    exports: scriptExports,\n    options: options\n  }\n}\n\n// CONCATENATED MODULE: ./packages/pagination/src/pager.vue\n\n\n\n\n\n/* normalize component */\n\nvar component = normalizeComponent(\n  src_pagervue_type_script_lang_js_,\n  pagervue_type_template_id_7274f267_render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"packages/pagination/src/pager.vue\"\n/* harmony default export */ var pager = (component.exports);\n// EXTERNAL MODULE: external \"element-ui/lib/select\"\nvar select_ = __nested_webpack_require_8926__(37);\nvar select_default = /*#__PURE__*/__nested_webpack_require_8926__.n(select_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/option\"\nvar option_ = __nested_webpack_require_8926__(38);\nvar option_default = /*#__PURE__*/__nested_webpack_require_8926__.n(option_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/input\"\nvar input_ = __nested_webpack_require_8926__(8);\nvar input_default = /*#__PURE__*/__nested_webpack_require_8926__.n(input_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/mixins/locale\"\nvar locale_ = __nested_webpack_require_8926__(4);\nvar locale_default = /*#__PURE__*/__nested_webpack_require_8926__.n(locale_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/util\"\nvar util_ = __nested_webpack_require_8926__(2);\n\n// CONCATENATED MODULE: ./packages/pagination/src/pagination.js\n\n\n\n\n\n\n\n/* harmony default export */ var pagination = ({\n  name: 'ElPagination',\n\n  props: {\n    pageSize: {\n      type: Number,\n      default: 10\n    },\n\n    small: Boolean,\n\n    total: Number,\n\n    pageCount: Number,\n\n    pagerCount: {\n      type: Number,\n      validator: function validator(value) {\n        return (value | 0) === value && value > 4 && value < 22 && value % 2 === 1;\n      },\n\n      default: 7\n    },\n\n    currentPage: {\n      type: Number,\n      default: 1\n    },\n\n    layout: {\n      default: 'prev, pager, next, jumper, ->, total'\n    },\n\n    pageSizes: {\n      type: Array,\n      default: function _default() {\n        return [10, 20, 30, 40, 50, 100];\n      }\n    },\n\n    popperClass: String,\n\n    prevText: String,\n\n    nextText: String,\n\n    background: Boolean,\n\n    disabled: Boolean,\n\n    hideOnSinglePage: Boolean\n  },\n\n  data: function data() {\n    return {\n      internalCurrentPage: 1,\n      internalPageSize: 0,\n      lastEmittedPage: -1,\n      userChangePageSize: false\n    };\n  },\n  render: function render(h) {\n    var layout = this.layout;\n    if (!layout) return null;\n    if (this.hideOnSinglePage && (!this.internalPageCount || this.internalPageCount === 1)) return null;\n\n    var template = h('div', { 'class': ['el-pagination', {\n        'is-background': this.background,\n        'el-pagination--small': this.small\n      }] });\n    var TEMPLATE_MAP = {\n      prev: h('prev'),\n      jumper: h('jumper'),\n      pager: h('pager', {\n        attrs: { currentPage: this.internalCurrentPage, pageCount: this.internalPageCount, pagerCount: this.pagerCount, disabled: this.disabled },\n        on: {\n          'change': this.handleCurrentChange\n        }\n      }),\n      next: h('next'),\n      sizes: h('sizes', {\n        attrs: { pageSizes: this.pageSizes }\n      }),\n      slot: h('slot', [this.$slots.default ? this.$slots.default : '']),\n      total: h('total')\n    };\n    var components = layout.split(',').map(function (item) {\n      return item.trim();\n    });\n    var rightWrapper = h('div', { 'class': 'el-pagination__rightwrapper' });\n    var haveRightWrapper = false;\n\n    template.children = template.children || [];\n    rightWrapper.children = rightWrapper.children || [];\n    components.forEach(function (compo) {\n      if (compo === '->') {\n        haveRightWrapper = true;\n        return;\n      }\n\n      if (!haveRightWrapper) {\n        template.children.push(TEMPLATE_MAP[compo]);\n      } else {\n        rightWrapper.children.push(TEMPLATE_MAP[compo]);\n      }\n    });\n\n    if (haveRightWrapper) {\n      template.children.unshift(rightWrapper);\n    }\n\n    return template;\n  },\n\n\n  components: {\n    Prev: {\n      render: function render(h) {\n        return h(\n          'button',\n          {\n            attrs: {\n              type: 'button',\n\n              disabled: this.$parent.disabled || this.$parent.internalCurrentPage <= 1\n            },\n            'class': 'btn-prev', on: {\n              'click': this.$parent.prev\n            }\n          },\n          [this.$parent.prevText ? h('span', [this.$parent.prevText]) : h('i', { 'class': 'el-icon el-icon-arrow-left' })]\n        );\n      }\n    },\n\n    Next: {\n      render: function render(h) {\n        return h(\n          'button',\n          {\n            attrs: {\n              type: 'button',\n\n              disabled: this.$parent.disabled || this.$parent.internalCurrentPage === this.$parent.internalPageCount || this.$parent.internalPageCount === 0\n            },\n            'class': 'btn-next', on: {\n              'click': this.$parent.next\n            }\n          },\n          [this.$parent.nextText ? h('span', [this.$parent.nextText]) : h('i', { 'class': 'el-icon el-icon-arrow-right' })]\n        );\n      }\n    },\n\n    Sizes: {\n      mixins: [locale_default.a],\n\n      props: {\n        pageSizes: Array\n      },\n\n      watch: {\n        pageSizes: {\n          immediate: true,\n          handler: function handler(newVal, oldVal) {\n            if (Object(util_[\"valueEquals\"])(newVal, oldVal)) return;\n            if (Array.isArray(newVal)) {\n              this.$parent.internalPageSize = newVal.indexOf(this.$parent.pageSize) > -1 ? this.$parent.pageSize : this.pageSizes[0];\n            }\n          }\n        }\n      },\n\n      render: function render(h) {\n        var _this = this;\n\n        return h(\n          'span',\n          { 'class': 'el-pagination__sizes' },\n          [h(\n            'el-select',\n            {\n              attrs: {\n                value: this.$parent.internalPageSize,\n                popperClass: this.$parent.popperClass || '',\n                size: 'mini',\n\n                disabled: this.$parent.disabled },\n              on: {\n                'input': this.handleChange\n              }\n            },\n            [this.pageSizes.map(function (item) {\n              return h('el-option', {\n                attrs: {\n                  value: item,\n                  label: item + _this.t('el.pagination.pagesize') }\n              });\n            })]\n          )]\n        );\n      },\n\n\n      components: {\n        ElSelect: select_default.a,\n        ElOption: option_default.a\n      },\n\n      methods: {\n        handleChange: function handleChange(val) {\n          if (val !== this.$parent.internalPageSize) {\n            this.$parent.internalPageSize = val = parseInt(val, 10);\n            this.$parent.userChangePageSize = true;\n            this.$parent.$emit('update:pageSize', val);\n            this.$parent.$emit('size-change', val);\n          }\n        }\n      }\n    },\n\n    Jumper: {\n      mixins: [locale_default.a],\n\n      components: { ElInput: input_default.a },\n\n      data: function data() {\n        return {\n          userInput: null\n        };\n      },\n\n\n      watch: {\n        '$parent.internalCurrentPage': function $parentInternalCurrentPage() {\n          this.userInput = null;\n        }\n      },\n\n      methods: {\n        handleKeyup: function handleKeyup(_ref) {\n          var keyCode = _ref.keyCode,\n              target = _ref.target;\n\n          // Chrome, Safari, Firefox triggers change event on Enter\n          // Hack for IE: https://github.com/ElemeFE/element/issues/11710\n          // Drop this method when we no longer supports IE\n          if (keyCode === 13) {\n            this.handleChange(target.value);\n          }\n        },\n        handleInput: function handleInput(value) {\n          this.userInput = value;\n        },\n        handleChange: function handleChange(value) {\n          this.$parent.internalCurrentPage = this.$parent.getValidCurrentPage(value);\n          this.$parent.emitChange();\n          this.userInput = null;\n        }\n      },\n\n      render: function render(h) {\n        return h(\n          'span',\n          { 'class': 'el-pagination__jump' },\n          [this.t('el.pagination.goto'), h('el-input', {\n            'class': 'el-pagination__editor is-in-pagination',\n            attrs: { min: 1,\n              max: this.$parent.internalPageCount,\n              value: this.userInput !== null ? this.userInput : this.$parent.internalCurrentPage,\n              type: 'number',\n              disabled: this.$parent.disabled\n            },\n            nativeOn: {\n              'keyup': this.handleKeyup\n            },\n            on: {\n              'input': this.handleInput,\n              'change': this.handleChange\n            }\n          }), this.t('el.pagination.pageClassifier')]\n        );\n      }\n    },\n\n    Total: {\n      mixins: [locale_default.a],\n\n      render: function render(h) {\n        return typeof this.$parent.total === 'number' ? h(\n          'span',\n          { 'class': 'el-pagination__total' },\n          [this.t('el.pagination.total', { total: this.$parent.total })]\n        ) : '';\n      }\n    },\n\n    Pager: pager\n  },\n\n  methods: {\n    handleCurrentChange: function handleCurrentChange(val) {\n      this.internalCurrentPage = this.getValidCurrentPage(val);\n      this.userChangePageSize = true;\n      this.emitChange();\n    },\n    prev: function prev() {\n      if (this.disabled) return;\n      var newVal = this.internalCurrentPage - 1;\n      this.internalCurrentPage = this.getValidCurrentPage(newVal);\n      this.$emit('prev-click', this.internalCurrentPage);\n      this.emitChange();\n    },\n    next: function next() {\n      if (this.disabled) return;\n      var newVal = this.internalCurrentPage + 1;\n      this.internalCurrentPage = this.getValidCurrentPage(newVal);\n      this.$emit('next-click', this.internalCurrentPage);\n      this.emitChange();\n    },\n    getValidCurrentPage: function getValidCurrentPage(value) {\n      value = parseInt(value, 10);\n\n      var havePageCount = typeof this.internalPageCount === 'number';\n\n      var resetValue = void 0;\n      if (!havePageCount) {\n        if (isNaN(value) || value < 1) resetValue = 1;\n      } else {\n        if (value < 1) {\n          resetValue = 1;\n        } else if (value > this.internalPageCount) {\n          resetValue = this.internalPageCount;\n        }\n      }\n\n      if (resetValue === undefined && isNaN(value)) {\n        resetValue = 1;\n      } else if (resetValue === 0) {\n        resetValue = 1;\n      }\n\n      return resetValue === undefined ? value : resetValue;\n    },\n    emitChange: function emitChange() {\n      var _this2 = this;\n\n      this.$nextTick(function () {\n        if (_this2.internalCurrentPage !== _this2.lastEmittedPage || _this2.userChangePageSize) {\n          _this2.$emit('current-change', _this2.internalCurrentPage);\n          _this2.lastEmittedPage = _this2.internalCurrentPage;\n          _this2.userChangePageSize = false;\n        }\n      });\n    }\n  },\n\n  computed: {\n    internalPageCount: function internalPageCount() {\n      if (typeof this.total === 'number') {\n        return Math.max(1, Math.ceil(this.total / this.internalPageSize));\n      } else if (typeof this.pageCount === 'number') {\n        return Math.max(1, this.pageCount);\n      }\n      return null;\n    }\n  },\n\n  watch: {\n    currentPage: {\n      immediate: true,\n      handler: function handler(val) {\n        this.internalCurrentPage = this.getValidCurrentPage(val);\n      }\n    },\n\n    pageSize: {\n      immediate: true,\n      handler: function handler(val) {\n        this.internalPageSize = isNaN(val) ? 10 : val;\n      }\n    },\n\n    internalCurrentPage: {\n      immediate: true,\n      handler: function handler(newVal) {\n        this.$emit('update:currentPage', newVal);\n        this.lastEmittedPage = -1;\n      }\n    },\n\n    internalPageCount: function internalPageCount(newVal) {\n      /* istanbul ignore if */\n      var oldPage = this.internalCurrentPage;\n      if (newVal > 0 && oldPage === 0) {\n        this.internalCurrentPage = 1;\n      } else if (oldPage > newVal) {\n        this.internalCurrentPage = newVal === 0 ? 1 : newVal;\n        this.userChangePageSize && this.emitChange();\n      }\n      this.userChangePageSize = false;\n    }\n  }\n});\n// CONCATENATED MODULE: ./packages/pagination/index.js\n\n\n/* istanbul ignore next */\npagination.install = function (Vue) {\n  Vue.component(pagination.name, pagination);\n};\n\n/* harmony default export */ var packages_pagination = (pagination);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/dialog/src/component.vue?vue&type=template&id=60140e62&\nvar componentvue_type_template_id_60140e62_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"transition\",\n    {\n      attrs: { name: \"dialog-fade\" },\n      on: { \"after-enter\": _vm.afterEnter, \"after-leave\": _vm.afterLeave }\n    },\n    [\n      _c(\n        \"div\",\n        {\n          directives: [\n            {\n              name: \"show\",\n              rawName: \"v-show\",\n              value: _vm.visible,\n              expression: \"visible\"\n            }\n          ],\n          staticClass: \"el-dialog__wrapper\",\n          on: {\n            click: function($event) {\n              if ($event.target !== $event.currentTarget) {\n                return null\n              }\n              return _vm.handleWrapperClick($event)\n            }\n          }\n        },\n        [\n          _c(\n            \"div\",\n            {\n              key: _vm.key,\n              ref: \"dialog\",\n              class: [\n                \"el-dialog\",\n                {\n                  \"is-fullscreen\": _vm.fullscreen,\n                  \"el-dialog--center\": _vm.center\n                },\n                _vm.customClass\n              ],\n              style: _vm.style,\n              attrs: {\n                role: \"dialog\",\n                \"aria-modal\": \"true\",\n                \"aria-label\": _vm.title || \"dialog\"\n              }\n            },\n            [\n              _c(\n                \"div\",\n                { staticClass: \"el-dialog__header\" },\n                [\n                  _vm._t(\"title\", [\n                    _c(\"span\", { staticClass: \"el-dialog__title\" }, [\n                      _vm._v(_vm._s(_vm.title))\n                    ])\n                  ]),\n                  _vm.showClose\n                    ? _c(\n                        \"button\",\n                        {\n                          staticClass: \"el-dialog__headerbtn\",\n                          attrs: { type: \"button\", \"aria-label\": \"Close\" },\n                          on: { click: _vm.handleClose }\n                        },\n                        [\n                          _c(\"i\", {\n                            staticClass:\n                              \"el-dialog__close el-icon el-icon-close\"\n                          })\n                        ]\n                      )\n                    : _vm._e()\n                ],\n                2\n              ),\n              _vm.rendered\n                ? _c(\n                    \"div\",\n                    { staticClass: \"el-dialog__body\" },\n                    [_vm._t(\"default\")],\n                    2\n                  )\n                : _vm._e(),\n              _vm.$slots.footer\n                ? _c(\n                    \"div\",\n                    { staticClass: \"el-dialog__footer\" },\n                    [_vm._t(\"footer\")],\n                    2\n                  )\n                : _vm._e()\n            ]\n          )\n        ]\n      )\n    ]\n  )\n}\nvar componentvue_type_template_id_60140e62_staticRenderFns = []\ncomponentvue_type_template_id_60140e62_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/dialog/src/component.vue?vue&type=template&id=60140e62&\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/popup\"\nvar popup_ = __nested_webpack_require_8926__(11);\nvar popup_default = /*#__PURE__*/__nested_webpack_require_8926__.n(popup_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/mixins/migrating\"\nvar migrating_ = __nested_webpack_require_8926__(9);\nvar migrating_default = /*#__PURE__*/__nested_webpack_require_8926__.n(migrating_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/mixins/emitter\"\nvar emitter_ = __nested_webpack_require_8926__(3);\nvar emitter_default = /*#__PURE__*/__nested_webpack_require_8926__.n(emitter_);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/dialog/src/component.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n/* harmony default export */ var componentvue_type_script_lang_js_ = ({\n  name: 'ElDialog',\n\n  mixins: [popup_default.a, emitter_default.a, migrating_default.a],\n\n  props: {\n    title: {\n      type: String,\n      default: ''\n    },\n\n    modal: {\n      type: Boolean,\n      default: true\n    },\n\n    modalAppendToBody: {\n      type: Boolean,\n      default: true\n    },\n\n    appendToBody: {\n      type: Boolean,\n      default: false\n    },\n\n    lockScroll: {\n      type: Boolean,\n      default: true\n    },\n\n    closeOnClickModal: {\n      type: Boolean,\n      default: true\n    },\n\n    closeOnPressEscape: {\n      type: Boolean,\n      default: true\n    },\n\n    showClose: {\n      type: Boolean,\n      default: true\n    },\n\n    width: String,\n\n    fullscreen: Boolean,\n\n    customClass: {\n      type: String,\n      default: ''\n    },\n\n    top: {\n      type: String,\n      default: '15vh'\n    },\n    beforeClose: Function,\n    center: {\n      type: Boolean,\n      default: false\n    },\n\n    destroyOnClose: Boolean\n  },\n\n  data: function data() {\n    return {\n      closed: false,\n      key: 0\n    };\n  },\n\n\n  watch: {\n    visible: function visible(val) {\n      var _this = this;\n\n      if (val) {\n        this.closed = false;\n        this.$emit('open');\n        this.$el.addEventListener('scroll', this.updatePopper);\n        this.$nextTick(function () {\n          _this.$refs.dialog.scrollTop = 0;\n        });\n        if (this.appendToBody) {\n          document.body.appendChild(this.$el);\n        }\n      } else {\n        this.$el.removeEventListener('scroll', this.updatePopper);\n        if (!this.closed) this.$emit('close');\n        if (this.destroyOnClose) {\n          this.$nextTick(function () {\n            _this.key++;\n          });\n        }\n      }\n    }\n  },\n\n  computed: {\n    style: function style() {\n      var style = {};\n      if (!this.fullscreen) {\n        style.marginTop = this.top;\n        if (this.width) {\n          style.width = this.width;\n        }\n      }\n      return style;\n    }\n  },\n\n  methods: {\n    getMigratingConfig: function getMigratingConfig() {\n      return {\n        props: {\n          'size': 'size is removed.'\n        }\n      };\n    },\n    handleWrapperClick: function handleWrapperClick() {\n      if (!this.closeOnClickModal) return;\n      this.handleClose();\n    },\n    handleClose: function handleClose() {\n      if (typeof this.beforeClose === 'function') {\n        this.beforeClose(this.hide);\n      } else {\n        this.hide();\n      }\n    },\n    hide: function hide(cancel) {\n      if (cancel !== false) {\n        this.$emit('update:visible', false);\n        this.$emit('close');\n        this.closed = true;\n      }\n    },\n    updatePopper: function updatePopper() {\n      this.broadcast('ElSelectDropdown', 'updatePopper');\n      this.broadcast('ElDropdownMenu', 'updatePopper');\n    },\n    afterEnter: function afterEnter() {\n      this.$emit('opened');\n    },\n    afterLeave: function afterLeave() {\n      this.$emit('closed');\n    }\n  },\n\n  mounted: function mounted() {\n    if (this.visible) {\n      this.rendered = true;\n      this.open();\n      if (this.appendToBody) {\n        document.body.appendChild(this.$el);\n      }\n    }\n  },\n  destroyed: function destroyed() {\n    // if appendToBody is true, remove DOM node after destroy\n    if (this.appendToBody && this.$el && this.$el.parentNode) {\n      this.$el.parentNode.removeChild(this.$el);\n    }\n  }\n});\n// CONCATENATED MODULE: ./packages/dialog/src/component.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_componentvue_type_script_lang_js_ = (componentvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/dialog/src/component.vue\n\n\n\n\n\n/* normalize component */\n\nvar component_component = normalizeComponent(\n  src_componentvue_type_script_lang_js_,\n  componentvue_type_template_id_60140e62_render,\n  componentvue_type_template_id_60140e62_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var component_api; }\ncomponent_component.options.__file = \"packages/dialog/src/component.vue\"\n/* harmony default export */ var src_component = (component_component.exports);\n// CONCATENATED MODULE: ./packages/dialog/index.js\n\n\n/* istanbul ignore next */\nsrc_component.install = function (Vue) {\n  Vue.component(src_component.name, src_component);\n};\n\n/* harmony default export */ var dialog = (src_component);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/autocomplete/src/autocomplete.vue?vue&type=template&id=152f2ee6&\nvar autocompletevue_type_template_id_152f2ee6_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    {\n      directives: [\n        {\n          name: \"clickoutside\",\n          rawName: \"v-clickoutside\",\n          value: _vm.close,\n          expression: \"close\"\n        }\n      ],\n      staticClass: \"el-autocomplete\",\n      attrs: {\n        \"aria-haspopup\": \"listbox\",\n        role: \"combobox\",\n        \"aria-expanded\": _vm.suggestionVisible,\n        \"aria-owns\": _vm.id\n      }\n    },\n    [\n      _c(\n        \"el-input\",\n        _vm._b(\n          {\n            ref: \"input\",\n            on: {\n              input: _vm.handleInput,\n              change: _vm.handleChange,\n              focus: _vm.handleFocus,\n              blur: _vm.handleBlur,\n              clear: _vm.handleClear\n            },\n            nativeOn: {\n              keydown: [\n                function($event) {\n                  if (\n                    !(\"button\" in $event) &&\n                    _vm._k($event.keyCode, \"up\", 38, $event.key, [\n                      \"Up\",\n                      \"ArrowUp\"\n                    ])\n                  ) {\n                    return null\n                  }\n                  $event.preventDefault()\n                  _vm.highlight(_vm.highlightedIndex - 1)\n                },\n                function($event) {\n                  if (\n                    !(\"button\" in $event) &&\n                    _vm._k($event.keyCode, \"down\", 40, $event.key, [\n                      \"Down\",\n                      \"ArrowDown\"\n                    ])\n                  ) {\n                    return null\n                  }\n                  $event.preventDefault()\n                  _vm.highlight(_vm.highlightedIndex + 1)\n                },\n                function($event) {\n                  if (\n                    !(\"button\" in $event) &&\n                    _vm._k($event.keyCode, \"enter\", 13, $event.key, \"Enter\")\n                  ) {\n                    return null\n                  }\n                  return _vm.handleKeyEnter($event)\n                },\n                function($event) {\n                  if (\n                    !(\"button\" in $event) &&\n                    _vm._k($event.keyCode, \"tab\", 9, $event.key, \"Tab\")\n                  ) {\n                    return null\n                  }\n                  return _vm.close($event)\n                }\n              ]\n            }\n          },\n          \"el-input\",\n          [_vm.$props, _vm.$attrs],\n          false\n        ),\n        [\n          _vm.$slots.prepend\n            ? _c(\"template\", { slot: \"prepend\" }, [_vm._t(\"prepend\")], 2)\n            : _vm._e(),\n          _vm.$slots.append\n            ? _c(\"template\", { slot: \"append\" }, [_vm._t(\"append\")], 2)\n            : _vm._e(),\n          _vm.$slots.prefix\n            ? _c(\"template\", { slot: \"prefix\" }, [_vm._t(\"prefix\")], 2)\n            : _vm._e(),\n          _vm.$slots.suffix\n            ? _c(\"template\", { slot: \"suffix\" }, [_vm._t(\"suffix\")], 2)\n            : _vm._e()\n        ],\n        2\n      ),\n      _c(\n        \"el-autocomplete-suggestions\",\n        {\n          ref: \"suggestions\",\n          class: [_vm.popperClass ? _vm.popperClass : \"\"],\n          attrs: {\n            \"visible-arrow\": \"\",\n            \"popper-options\": _vm.popperOptions,\n            \"append-to-body\": _vm.popperAppendToBody,\n            placement: _vm.placement,\n            id: _vm.id\n          }\n        },\n        _vm._l(_vm.suggestions, function(item, index) {\n          return _c(\n            \"li\",\n            {\n              key: index,\n              class: { highlighted: _vm.highlightedIndex === index },\n              attrs: {\n                id: _vm.id + \"-item-\" + index,\n                role: \"option\",\n                \"aria-selected\": _vm.highlightedIndex === index\n              },\n              on: {\n                click: function($event) {\n                  _vm.select(item)\n                }\n              }\n            },\n            [\n              _vm._t(\n                \"default\",\n                [\n                  _vm._v(\"\\n        \" + _vm._s(item[_vm.valueKey]) + \"\\n      \")\n                ],\n                { item: item }\n              )\n            ],\n            2\n          )\n        }),\n        0\n      )\n    ],\n    1\n  )\n}\nvar autocompletevue_type_template_id_152f2ee6_staticRenderFns = []\nautocompletevue_type_template_id_152f2ee6_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/autocomplete/src/autocomplete.vue?vue&type=template&id=152f2ee6&\n\n// EXTERNAL MODULE: external \"throttle-debounce/debounce\"\nvar debounce_ = __nested_webpack_require_8926__(17);\nvar debounce_default = /*#__PURE__*/__nested_webpack_require_8926__.n(debounce_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/clickoutside\"\nvar clickoutside_ = __nested_webpack_require_8926__(10);\nvar clickoutside_default = /*#__PURE__*/__nested_webpack_require_8926__.n(clickoutside_);\n\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/autocomplete/src/autocomplete-suggestions.vue?vue&type=template&id=cd10dcf0&\nvar autocomplete_suggestionsvue_type_template_id_cd10dcf0_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"transition\",\n    { attrs: { name: \"el-zoom-in-top\" }, on: { \"after-leave\": _vm.doDestroy } },\n    [\n      _c(\n        \"div\",\n        {\n          directives: [\n            {\n              name: \"show\",\n              rawName: \"v-show\",\n              value: _vm.showPopper,\n              expression: \"showPopper\"\n            }\n          ],\n          staticClass: \"el-autocomplete-suggestion el-popper\",\n          class: {\n            \"is-loading\": !_vm.parent.hideLoading && _vm.parent.loading\n          },\n          style: { width: _vm.dropdownWidth },\n          attrs: { role: \"region\" }\n        },\n        [\n          _c(\n            \"el-scrollbar\",\n            {\n              attrs: {\n                tag: \"ul\",\n                \"wrap-class\": \"el-autocomplete-suggestion__wrap\",\n                \"view-class\": \"el-autocomplete-suggestion__list\"\n              }\n            },\n            [\n              !_vm.parent.hideLoading && _vm.parent.loading\n                ? _c(\"li\", [_c(\"i\", { staticClass: \"el-icon-loading\" })])\n                : _vm._t(\"default\")\n            ],\n            2\n          )\n        ],\n        1\n      )\n    ]\n  )\n}\nvar autocomplete_suggestionsvue_type_template_id_cd10dcf0_staticRenderFns = []\nautocomplete_suggestionsvue_type_template_id_cd10dcf0_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/autocomplete/src/autocomplete-suggestions.vue?vue&type=template&id=cd10dcf0&\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/vue-popper\"\nvar vue_popper_ = __nested_webpack_require_8926__(5);\nvar vue_popper_default = /*#__PURE__*/__nested_webpack_require_8926__.n(vue_popper_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/scrollbar\"\nvar scrollbar_ = __nested_webpack_require_8926__(18);\nvar scrollbar_default = /*#__PURE__*/__nested_webpack_require_8926__.n(scrollbar_);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/autocomplete/src/autocomplete-suggestions.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n/* harmony default export */ var autocomplete_suggestionsvue_type_script_lang_js_ = ({\n  components: { ElScrollbar: scrollbar_default.a },\n  mixins: [vue_popper_default.a, emitter_default.a],\n\n  componentName: 'ElAutocompleteSuggestions',\n\n  data: function data() {\n    return {\n      parent: this.$parent,\n      dropdownWidth: ''\n    };\n  },\n\n\n  props: {\n    options: {\n      default: function _default() {\n        return {\n          gpuAcceleration: false\n        };\n      }\n    },\n    id: String\n  },\n\n  methods: {\n    select: function select(item) {\n      this.dispatch('ElAutocomplete', 'item-click', item);\n    }\n  },\n\n  updated: function updated() {\n    var _this = this;\n\n    this.$nextTick(function (_) {\n      _this.popperJS && _this.updatePopper();\n    });\n  },\n  mounted: function mounted() {\n    this.$parent.popperElm = this.popperElm = this.$el;\n    this.referenceElm = this.$parent.$refs.input.$refs.input || this.$parent.$refs.input.$refs.textarea;\n    this.referenceList = this.$el.querySelector('.el-autocomplete-suggestion__list');\n    this.referenceList.setAttribute('role', 'listbox');\n    this.referenceList.setAttribute('id', this.id);\n  },\n  created: function created() {\n    var _this2 = this;\n\n    this.$on('visible', function (val, inputWidth) {\n      _this2.dropdownWidth = inputWidth + 'px';\n      _this2.showPopper = val;\n    });\n  }\n});\n// CONCATENATED MODULE: ./packages/autocomplete/src/autocomplete-suggestions.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_autocomplete_suggestionsvue_type_script_lang_js_ = (autocomplete_suggestionsvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/autocomplete/src/autocomplete-suggestions.vue\n\n\n\n\n\n/* normalize component */\n\nvar autocomplete_suggestions_component = normalizeComponent(\n  src_autocomplete_suggestionsvue_type_script_lang_js_,\n  autocomplete_suggestionsvue_type_template_id_cd10dcf0_render,\n  autocomplete_suggestionsvue_type_template_id_cd10dcf0_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var autocomplete_suggestions_api; }\nautocomplete_suggestions_component.options.__file = \"packages/autocomplete/src/autocomplete-suggestions.vue\"\n/* harmony default export */ var autocomplete_suggestions = (autocomplete_suggestions_component.exports);\n// EXTERNAL MODULE: external \"element-ui/lib/mixins/focus\"\nvar focus_ = __nested_webpack_require_8926__(23);\nvar focus_default = /*#__PURE__*/__nested_webpack_require_8926__.n(focus_);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/autocomplete/src/autocomplete.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n\n\n\n\n/* harmony default export */ var autocompletevue_type_script_lang_js_ = ({\n  name: 'ElAutocomplete',\n\n  mixins: [emitter_default.a, focus_default()('input'), migrating_default.a],\n\n  inheritAttrs: false,\n\n  componentName: 'ElAutocomplete',\n\n  components: {\n    ElInput: input_default.a,\n    ElAutocompleteSuggestions: autocomplete_suggestions\n  },\n\n  directives: { Clickoutside: clickoutside_default.a },\n\n  props: {\n    valueKey: {\n      type: String,\n      default: 'value'\n    },\n    popperClass: String,\n    popperOptions: Object,\n    placeholder: String,\n    clearable: {\n      type: Boolean,\n      default: false\n    },\n    disabled: Boolean,\n    name: String,\n    size: String,\n    value: String,\n    maxlength: Number,\n    minlength: Number,\n    autofocus: Boolean,\n    fetchSuggestions: Function,\n    triggerOnFocus: {\n      type: Boolean,\n      default: true\n    },\n    customItem: String,\n    selectWhenUnmatched: {\n      type: Boolean,\n      default: false\n    },\n    prefixIcon: String,\n    suffixIcon: String,\n    label: String,\n    debounce: {\n      type: Number,\n      default: 300\n    },\n    placement: {\n      type: String,\n      default: 'bottom-start'\n    },\n    hideLoading: Boolean,\n    popperAppendToBody: {\n      type: Boolean,\n      default: true\n    },\n    highlightFirstItem: {\n      type: Boolean,\n      default: false\n    }\n  },\n  data: function data() {\n    return {\n      activated: false,\n      suggestions: [],\n      loading: false,\n      highlightedIndex: -1,\n      suggestionDisabled: false\n    };\n  },\n\n  computed: {\n    suggestionVisible: function suggestionVisible() {\n      var suggestions = this.suggestions;\n      var isValidData = Array.isArray(suggestions) && suggestions.length > 0;\n      return (isValidData || this.loading) && this.activated;\n    },\n    id: function id() {\n      return 'el-autocomplete-' + Object(util_[\"generateId\"])();\n    }\n  },\n  watch: {\n    suggestionVisible: function suggestionVisible(val) {\n      var $input = this.getInput();\n      if ($input) {\n        this.broadcast('ElAutocompleteSuggestions', 'visible', [val, $input.offsetWidth]);\n      }\n    }\n  },\n  methods: {\n    getMigratingConfig: function getMigratingConfig() {\n      return {\n        props: {\n          'custom-item': 'custom-item is removed, use scoped slot instead.',\n          'props': 'props is removed, use value-key instead.'\n        }\n      };\n    },\n    getData: function getData(queryString) {\n      var _this = this;\n\n      if (this.suggestionDisabled) {\n        return;\n      }\n      this.loading = true;\n      this.fetchSuggestions(queryString, function (suggestions) {\n        _this.loading = false;\n        if (_this.suggestionDisabled) {\n          return;\n        }\n        if (Array.isArray(suggestions)) {\n          _this.suggestions = suggestions;\n          _this.highlightedIndex = _this.highlightFirstItem ? 0 : -1;\n        } else {\n          console.error('[Element Error][Autocomplete]autocomplete suggestions must be an array');\n        }\n      });\n    },\n    handleInput: function handleInput(value) {\n      this.$emit('input', value);\n      this.suggestionDisabled = false;\n      if (!this.triggerOnFocus && !value) {\n        this.suggestionDisabled = true;\n        this.suggestions = [];\n        return;\n      }\n      this.debouncedGetData(value);\n    },\n    handleChange: function handleChange(value) {\n      this.$emit('change', value);\n    },\n    handleFocus: function handleFocus(event) {\n      this.activated = true;\n      this.$emit('focus', event);\n      if (this.triggerOnFocus) {\n        this.debouncedGetData(this.value);\n      }\n    },\n    handleBlur: function handleBlur(event) {\n      this.$emit('blur', event);\n    },\n    handleClear: function handleClear() {\n      this.activated = false;\n      this.$emit('clear');\n    },\n    close: function close(e) {\n      this.activated = false;\n    },\n    handleKeyEnter: function handleKeyEnter(e) {\n      var _this2 = this;\n\n      if (this.suggestionVisible && this.highlightedIndex >= 0 && this.highlightedIndex < this.suggestions.length) {\n        e.preventDefault();\n        this.select(this.suggestions[this.highlightedIndex]);\n      } else if (this.selectWhenUnmatched) {\n        this.$emit('select', { value: this.value });\n        this.$nextTick(function (_) {\n          _this2.suggestions = [];\n          _this2.highlightedIndex = -1;\n        });\n      }\n    },\n    select: function select(item) {\n      var _this3 = this;\n\n      this.$emit('input', item[this.valueKey]);\n      this.$emit('select', item);\n      this.$nextTick(function (_) {\n        _this3.suggestions = [];\n        _this3.highlightedIndex = -1;\n      });\n    },\n    highlight: function highlight(index) {\n      if (!this.suggestionVisible || this.loading) {\n        return;\n      }\n      if (index < 0) {\n        this.highlightedIndex = -1;\n        return;\n      }\n      if (index >= this.suggestions.length) {\n        index = this.suggestions.length - 1;\n      }\n      var suggestion = this.$refs.suggestions.$el.querySelector('.el-autocomplete-suggestion__wrap');\n      var suggestionList = suggestion.querySelectorAll('.el-autocomplete-suggestion__list li');\n\n      var highlightItem = suggestionList[index];\n      var scrollTop = suggestion.scrollTop;\n      var offsetTop = highlightItem.offsetTop;\n\n      if (offsetTop + highlightItem.scrollHeight > scrollTop + suggestion.clientHeight) {\n        suggestion.scrollTop += highlightItem.scrollHeight;\n      }\n      if (offsetTop < scrollTop) {\n        suggestion.scrollTop -= highlightItem.scrollHeight;\n      }\n      this.highlightedIndex = index;\n      var $input = this.getInput();\n      $input.setAttribute('aria-activedescendant', this.id + '-item-' + this.highlightedIndex);\n    },\n    getInput: function getInput() {\n      return this.$refs.input.getInput();\n    }\n  },\n  mounted: function mounted() {\n    var _this4 = this;\n\n    this.debouncedGetData = debounce_default()(this.debounce, this.getData);\n    this.$on('item-click', function (item) {\n      _this4.select(item);\n    });\n    var $input = this.getInput();\n    $input.setAttribute('role', 'textbox');\n    $input.setAttribute('aria-autocomplete', 'list');\n    $input.setAttribute('aria-controls', 'id');\n    $input.setAttribute('aria-activedescendant', this.id + '-item-' + this.highlightedIndex);\n  },\n  beforeDestroy: function beforeDestroy() {\n    this.$refs.suggestions.$destroy();\n  }\n});\n// CONCATENATED MODULE: ./packages/autocomplete/src/autocomplete.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_autocompletevue_type_script_lang_js_ = (autocompletevue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/autocomplete/src/autocomplete.vue\n\n\n\n\n\n/* normalize component */\n\nvar autocomplete_component = normalizeComponent(\n  src_autocompletevue_type_script_lang_js_,\n  autocompletevue_type_template_id_152f2ee6_render,\n  autocompletevue_type_template_id_152f2ee6_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var autocomplete_api; }\nautocomplete_component.options.__file = \"packages/autocomplete/src/autocomplete.vue\"\n/* harmony default export */ var autocomplete = (autocomplete_component.exports);\n// CONCATENATED MODULE: ./packages/autocomplete/index.js\n\n\n/* istanbul ignore next */\nautocomplete.install = function (Vue) {\n  Vue.component(autocomplete.name, autocomplete);\n};\n\n/* harmony default export */ var packages_autocomplete = (autocomplete);\n// EXTERNAL MODULE: external \"element-ui/lib/button\"\nvar button_ = __nested_webpack_require_8926__(13);\nvar button_default = /*#__PURE__*/__nested_webpack_require_8926__.n(button_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/button-group\"\nvar button_group_ = __nested_webpack_require_8926__(29);\nvar button_group_default = /*#__PURE__*/__nested_webpack_require_8926__.n(button_group_);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/dropdown/src/dropdown.vue?vue&type=script&lang=js&\n\n\n\n\n\n\n\n\n/* harmony default export */ var dropdownvue_type_script_lang_js_ = ({\n  name: 'ElDropdown',\n\n  componentName: 'ElDropdown',\n\n  mixins: [emitter_default.a, migrating_default.a],\n\n  directives: { Clickoutside: clickoutside_default.a },\n\n  components: {\n    ElButton: button_default.a,\n    ElButtonGroup: button_group_default.a\n  },\n\n  provide: function provide() {\n    return {\n      dropdown: this\n    };\n  },\n\n\n  props: {\n    trigger: {\n      type: String,\n      default: 'hover'\n    },\n    type: String,\n    size: {\n      type: String,\n      default: ''\n    },\n    splitButton: Boolean,\n    hideOnClick: {\n      type: Boolean,\n      default: true\n    },\n    placement: {\n      type: String,\n      default: 'bottom-end'\n    },\n    visibleArrow: {\n      default: true\n    },\n    showTimeout: {\n      type: Number,\n      default: 250\n    },\n    hideTimeout: {\n      type: Number,\n      default: 150\n    },\n    tabindex: {\n      type: Number,\n      default: 0\n    },\n    disabled: {\n      type: Boolean,\n      default: false\n    }\n  },\n\n  data: function data() {\n    return {\n      timeout: null,\n      visible: false,\n      triggerElm: null,\n      menuItems: null,\n      menuItemsArray: null,\n      dropdownElm: null,\n      focusing: false,\n      listId: 'dropdown-menu-' + Object(util_[\"generateId\"])()\n    };\n  },\n\n\n  computed: {\n    dropdownSize: function dropdownSize() {\n      return this.size || (this.$ELEMENT || {}).size;\n    }\n  },\n\n  mounted: function mounted() {\n    this.$on('menu-item-click', this.handleMenuItemClick);\n  },\n\n\n  watch: {\n    visible: function visible(val) {\n      this.broadcast('ElDropdownMenu', 'visible', val);\n      this.$emit('visible-change', val);\n    },\n    focusing: function focusing(val) {\n      var selfDefine = this.$el.querySelector('.el-dropdown-selfdefine');\n      if (selfDefine) {\n        // 自定义\n        if (val) {\n          selfDefine.className += ' focusing';\n        } else {\n          selfDefine.className = selfDefine.className.replace('focusing', '');\n        }\n      }\n    }\n  },\n\n  methods: {\n    getMigratingConfig: function getMigratingConfig() {\n      return {\n        props: {\n          'menu-align': 'menu-align is renamed to placement.'\n        }\n      };\n    },\n    show: function show() {\n      var _this = this;\n\n      if (this.disabled) return;\n      clearTimeout(this.timeout);\n      this.timeout = setTimeout(function () {\n        _this.visible = true;\n      }, this.trigger === 'click' ? 0 : this.showTimeout);\n    },\n    hide: function hide() {\n      var _this2 = this;\n\n      if (this.disabled) return;\n      this.removeTabindex();\n      if (this.tabindex >= 0) {\n        this.resetTabindex(this.triggerElm);\n      }\n      clearTimeout(this.timeout);\n      this.timeout = setTimeout(function () {\n        _this2.visible = false;\n      }, this.trigger === 'click' ? 0 : this.hideTimeout);\n    },\n    handleClick: function handleClick() {\n      if (this.disabled) return;\n      if (this.visible) {\n        this.hide();\n      } else {\n        this.show();\n      }\n    },\n    handleTriggerKeyDown: function handleTriggerKeyDown(ev) {\n      var keyCode = ev.keyCode;\n      if ([38, 40].indexOf(keyCode) > -1) {\n        // up/down\n        this.removeTabindex();\n        this.resetTabindex(this.menuItems[0]);\n        this.menuItems[0].focus();\n        ev.preventDefault();\n        ev.stopPropagation();\n      } else if (keyCode === 13) {\n        // space enter选中\n        this.handleClick();\n      } else if ([9, 27].indexOf(keyCode) > -1) {\n        // tab || esc\n        this.hide();\n      }\n    },\n    handleItemKeyDown: function handleItemKeyDown(ev) {\n      var keyCode = ev.keyCode;\n      var target = ev.target;\n      var currentIndex = this.menuItemsArray.indexOf(target);\n      var max = this.menuItemsArray.length - 1;\n      var nextIndex = void 0;\n      if ([38, 40].indexOf(keyCode) > -1) {\n        // up/down\n        if (keyCode === 38) {\n          // up\n          nextIndex = currentIndex !== 0 ? currentIndex - 1 : 0;\n        } else {\n          // down\n          nextIndex = currentIndex < max ? currentIndex + 1 : max;\n        }\n        this.removeTabindex();\n        this.resetTabindex(this.menuItems[nextIndex]);\n        this.menuItems[nextIndex].focus();\n        ev.preventDefault();\n        ev.stopPropagation();\n      } else if (keyCode === 13) {\n        // enter选中\n        this.triggerElmFocus();\n        target.click();\n        if (this.hideOnClick) {\n          // click关闭\n          this.visible = false;\n        }\n      } else if ([9, 27].indexOf(keyCode) > -1) {\n        // tab // esc\n        this.hide();\n        this.triggerElmFocus();\n      }\n    },\n    resetTabindex: function resetTabindex(ele) {\n      // 下次tab时组件聚焦元素\n      this.removeTabindex();\n      ele.setAttribute('tabindex', '0'); // 下次期望的聚焦元素\n    },\n    removeTabindex: function removeTabindex() {\n      this.triggerElm.setAttribute('tabindex', '-1');\n      this.menuItemsArray.forEach(function (item) {\n        item.setAttribute('tabindex', '-1');\n      });\n    },\n    initAria: function initAria() {\n      this.dropdownElm.setAttribute('id', this.listId);\n      this.triggerElm.setAttribute('aria-haspopup', 'list');\n      this.triggerElm.setAttribute('aria-controls', this.listId);\n\n      if (!this.splitButton) {\n        // 自定义\n        this.triggerElm.setAttribute('role', 'button');\n        this.triggerElm.setAttribute('tabindex', this.tabindex);\n        this.triggerElm.setAttribute('class', (this.triggerElm.getAttribute('class') || '') + ' el-dropdown-selfdefine'); // 控制\n      }\n    },\n    initEvent: function initEvent() {\n      var _this3 = this;\n\n      var trigger = this.trigger,\n          show = this.show,\n          hide = this.hide,\n          handleClick = this.handleClick,\n          splitButton = this.splitButton,\n          handleTriggerKeyDown = this.handleTriggerKeyDown,\n          handleItemKeyDown = this.handleItemKeyDown;\n\n      this.triggerElm = splitButton ? this.$refs.trigger.$el : this.$slots.default[0].elm;\n\n      var dropdownElm = this.dropdownElm;\n\n      this.triggerElm.addEventListener('keydown', handleTriggerKeyDown); // triggerElm keydown\n      dropdownElm.addEventListener('keydown', handleItemKeyDown, true); // item keydown\n      // 控制自定义元素的样式\n      if (!splitButton) {\n        this.triggerElm.addEventListener('focus', function () {\n          _this3.focusing = true;\n        });\n        this.triggerElm.addEventListener('blur', function () {\n          _this3.focusing = false;\n        });\n        this.triggerElm.addEventListener('click', function () {\n          _this3.focusing = false;\n        });\n      }\n      if (trigger === 'hover') {\n        this.triggerElm.addEventListener('mouseenter', show);\n        this.triggerElm.addEventListener('mouseleave', hide);\n        dropdownElm.addEventListener('mouseenter', show);\n        dropdownElm.addEventListener('mouseleave', hide);\n      } else if (trigger === 'click') {\n        this.triggerElm.addEventListener('click', handleClick);\n      }\n    },\n    handleMenuItemClick: function handleMenuItemClick(command, instance) {\n      if (this.hideOnClick) {\n        this.visible = false;\n      }\n      this.$emit('command', command, instance);\n    },\n    triggerElmFocus: function triggerElmFocus() {\n      this.triggerElm.focus && this.triggerElm.focus();\n    },\n    initDomOperation: function initDomOperation() {\n      this.dropdownElm = this.popperElm;\n      this.menuItems = this.dropdownElm.querySelectorAll(\"[tabindex='-1']\");\n      this.menuItemsArray = [].slice.call(this.menuItems);\n\n      this.initEvent();\n      this.initAria();\n    }\n  },\n\n  render: function render(h) {\n    var _this4 = this;\n\n    var hide = this.hide,\n        splitButton = this.splitButton,\n        type = this.type,\n        dropdownSize = this.dropdownSize,\n        disabled = this.disabled;\n\n\n    var handleMainButtonClick = function handleMainButtonClick(event) {\n      _this4.$emit('click', event);\n      hide();\n    };\n\n    var triggerElm = null;\n    if (splitButton) {\n      triggerElm = h('el-button-group', [h(\n        'el-button',\n        {\n          attrs: { type: type, size: dropdownSize, disabled: disabled },\n          nativeOn: {\n            'click': handleMainButtonClick\n          }\n        },\n        [this.$slots.default]\n      ), h(\n        'el-button',\n        { ref: 'trigger', attrs: { type: type, size: dropdownSize, disabled: disabled },\n          'class': 'el-dropdown__caret-button' },\n        [h('i', { 'class': 'el-dropdown__icon el-icon-arrow-down' })]\n      )]);\n    } else {\n      triggerElm = this.$slots.default;\n      var vnodeData = triggerElm[0].data || {};\n      var _vnodeData$attrs = vnodeData.attrs,\n          attrs = _vnodeData$attrs === undefined ? {} : _vnodeData$attrs;\n\n      if (disabled && !attrs.disabled) {\n        attrs.disabled = true;\n        vnodeData.attrs = attrs;\n      }\n    }\n    var menuElm = disabled ? null : this.$slots.dropdown;\n\n    return h(\n      'div',\n      { 'class': 'el-dropdown', directives: [{\n          name: 'clickoutside',\n          value: hide\n        }],\n        attrs: { 'aria-disabled': disabled }\n      },\n      [triggerElm, menuElm]\n    );\n  }\n});\n// CONCATENATED MODULE: ./packages/dropdown/src/dropdown.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_dropdownvue_type_script_lang_js_ = (dropdownvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/dropdown/src/dropdown.vue\nvar dropdown_render, dropdown_staticRenderFns\n\n\n\n\n/* normalize component */\n\nvar dropdown_component = normalizeComponent(\n  src_dropdownvue_type_script_lang_js_,\n  dropdown_render,\n  dropdown_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var dropdown_api; }\ndropdown_component.options.__file = \"packages/dropdown/src/dropdown.vue\"\n/* harmony default export */ var dropdown = (dropdown_component.exports);\n// CONCATENATED MODULE: ./packages/dropdown/index.js\n\n\n/* istanbul ignore next */\ndropdown.install = function (Vue) {\n  Vue.component(dropdown.name, dropdown);\n};\n\n/* harmony default export */ var packages_dropdown = (dropdown);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/dropdown/src/dropdown-menu.vue?vue&type=template&id=0da6b714&\nvar dropdown_menuvue_type_template_id_0da6b714_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"transition\",\n    { attrs: { name: \"el-zoom-in-top\" }, on: { \"after-leave\": _vm.doDestroy } },\n    [\n      _c(\n        \"ul\",\n        {\n          directives: [\n            {\n              name: \"show\",\n              rawName: \"v-show\",\n              value: _vm.showPopper,\n              expression: \"showPopper\"\n            }\n          ],\n          staticClass: \"el-dropdown-menu el-popper\",\n          class: [_vm.size && \"el-dropdown-menu--\" + _vm.size]\n        },\n        [_vm._t(\"default\")],\n        2\n      )\n    ]\n  )\n}\nvar dropdown_menuvue_type_template_id_0da6b714_staticRenderFns = []\ndropdown_menuvue_type_template_id_0da6b714_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/dropdown/src/dropdown-menu.vue?vue&type=template&id=0da6b714&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/dropdown/src/dropdown-menu.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n\n\n\n/* harmony default export */ var dropdown_menuvue_type_script_lang_js_ = ({\n  name: 'ElDropdownMenu',\n\n  componentName: 'ElDropdownMenu',\n\n  mixins: [vue_popper_default.a],\n\n  props: {\n    visibleArrow: {\n      type: Boolean,\n      default: true\n    },\n    arrowOffset: {\n      type: Number,\n      default: 0\n    }\n  },\n\n  data: function data() {\n    return {\n      size: this.dropdown.dropdownSize\n    };\n  },\n\n\n  inject: ['dropdown'],\n\n  created: function created() {\n    var _this = this;\n\n    this.$on('updatePopper', function () {\n      if (_this.showPopper) _this.updatePopper();\n    });\n    this.$on('visible', function (val) {\n      _this.showPopper = val;\n    });\n  },\n  mounted: function mounted() {\n    this.dropdown.popperElm = this.popperElm = this.$el;\n    this.referenceElm = this.dropdown.$el;\n    // compatible with 2.6 new v-slot syntax\n    // issue link https://github.com/ElemeFE/element/issues/14345\n    this.dropdown.initDomOperation();\n  },\n\n\n  watch: {\n    'dropdown.placement': {\n      immediate: true,\n      handler: function handler(val) {\n        this.currentPlacement = val;\n      }\n    }\n  }\n});\n// CONCATENATED MODULE: ./packages/dropdown/src/dropdown-menu.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_dropdown_menuvue_type_script_lang_js_ = (dropdown_menuvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/dropdown/src/dropdown-menu.vue\n\n\n\n\n\n/* normalize component */\n\nvar dropdown_menu_component = normalizeComponent(\n  src_dropdown_menuvue_type_script_lang_js_,\n  dropdown_menuvue_type_template_id_0da6b714_render,\n  dropdown_menuvue_type_template_id_0da6b714_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var dropdown_menu_api; }\ndropdown_menu_component.options.__file = \"packages/dropdown/src/dropdown-menu.vue\"\n/* harmony default export */ var dropdown_menu = (dropdown_menu_component.exports);\n// CONCATENATED MODULE: ./packages/dropdown-menu/index.js\n\n\n/* istanbul ignore next */\ndropdown_menu.install = function (Vue) {\n  Vue.component(dropdown_menu.name, dropdown_menu);\n};\n\n/* harmony default export */ var packages_dropdown_menu = (dropdown_menu);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/dropdown/src/dropdown-item.vue?vue&type=template&id=6359102a&\nvar dropdown_itemvue_type_template_id_6359102a_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"li\",\n    {\n      staticClass: \"el-dropdown-menu__item\",\n      class: {\n        \"is-disabled\": _vm.disabled,\n        \"el-dropdown-menu__item--divided\": _vm.divided\n      },\n      attrs: {\n        \"aria-disabled\": _vm.disabled,\n        tabindex: _vm.disabled ? null : -1\n      },\n      on: { click: _vm.handleClick }\n    },\n    [_vm.icon ? _c(\"i\", { class: _vm.icon }) : _vm._e(), _vm._t(\"default\")],\n    2\n  )\n}\nvar dropdown_itemvue_type_template_id_6359102a_staticRenderFns = []\ndropdown_itemvue_type_template_id_6359102a_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/dropdown/src/dropdown-item.vue?vue&type=template&id=6359102a&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/dropdown/src/dropdown-item.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n/* harmony default export */ var dropdown_itemvue_type_script_lang_js_ = ({\n  name: 'ElDropdownItem',\n\n  mixins: [emitter_default.a],\n\n  props: {\n    command: {},\n    disabled: Boolean,\n    divided: Boolean,\n    icon: String\n  },\n\n  methods: {\n    handleClick: function handleClick(e) {\n      this.dispatch('ElDropdown', 'menu-item-click', [this.command, this]);\n    }\n  }\n});\n// CONCATENATED MODULE: ./packages/dropdown/src/dropdown-item.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_dropdown_itemvue_type_script_lang_js_ = (dropdown_itemvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/dropdown/src/dropdown-item.vue\n\n\n\n\n\n/* normalize component */\n\nvar dropdown_item_component = normalizeComponent(\n  src_dropdown_itemvue_type_script_lang_js_,\n  dropdown_itemvue_type_template_id_6359102a_render,\n  dropdown_itemvue_type_template_id_6359102a_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var dropdown_item_api; }\ndropdown_item_component.options.__file = \"packages/dropdown/src/dropdown-item.vue\"\n/* harmony default export */ var dropdown_item = (dropdown_item_component.exports);\n// CONCATENATED MODULE: ./packages/dropdown-item/index.js\n\n\n/* istanbul ignore next */\ndropdown_item.install = function (Vue) {\n  Vue.component(dropdown_item.name, dropdown_item);\n};\n\n/* harmony default export */ var packages_dropdown_item = (dropdown_item);\n// CONCATENATED MODULE: ./src/utils/aria-utils.js\nvar aria = aria || {};\n\naria.Utils = aria.Utils || {};\n\n/**\n * @desc Set focus on descendant nodes until the first focusable element is\n *       found.\n * @param element\n *          DOM node for which to find the first focusable descendant.\n * @returns\n *  true if a focusable element is found and focus is set.\n */\naria.Utils.focusFirstDescendant = function (element) {\n  for (var i = 0; i < element.childNodes.length; i++) {\n    var child = element.childNodes[i];\n    if (aria.Utils.attemptFocus(child) || aria.Utils.focusFirstDescendant(child)) {\n      return true;\n    }\n  }\n  return false;\n};\n\n/**\n * @desc Find the last descendant node that is focusable.\n * @param element\n *          DOM node for which to find the last focusable descendant.\n * @returns\n *  true if a focusable element is found and focus is set.\n */\n\naria.Utils.focusLastDescendant = function (element) {\n  for (var i = element.childNodes.length - 1; i >= 0; i--) {\n    var child = element.childNodes[i];\n    if (aria.Utils.attemptFocus(child) || aria.Utils.focusLastDescendant(child)) {\n      return true;\n    }\n  }\n  return false;\n};\n\n/**\n * @desc Set Attempt to set focus on the current node.\n * @param element\n *          The node to attempt to focus on.\n * @returns\n *  true if element is focused.\n */\naria.Utils.attemptFocus = function (element) {\n  if (!aria.Utils.isFocusable(element)) {\n    return false;\n  }\n  aria.Utils.IgnoreUtilFocusChanges = true;\n  try {\n    element.focus();\n  } catch (e) {}\n  aria.Utils.IgnoreUtilFocusChanges = false;\n  return document.activeElement === element;\n};\n\naria.Utils.isFocusable = function (element) {\n  if (element.tabIndex > 0 || element.tabIndex === 0 && element.getAttribute('tabIndex') !== null) {\n    return true;\n  }\n\n  if (element.disabled) {\n    return false;\n  }\n\n  switch (element.nodeName) {\n    case 'A':\n      return !!element.href && element.rel !== 'ignore';\n    case 'INPUT':\n      return element.type !== 'hidden' && element.type !== 'file';\n    case 'BUTTON':\n    case 'SELECT':\n    case 'TEXTAREA':\n      return true;\n    default:\n      return false;\n  }\n};\n\n/**\n * 触发一个事件\n * mouseenter, mouseleave, mouseover, keyup, change, click 等\n * @param  {Element} elm\n * @param  {String} name\n * @param  {*} opts\n */\naria.Utils.triggerEvent = function (elm, name) {\n  var eventName = void 0;\n\n  if (/^mouse|click/.test(name)) {\n    eventName = 'MouseEvents';\n  } else if (/^key/.test(name)) {\n    eventName = 'KeyboardEvent';\n  } else {\n    eventName = 'HTMLEvents';\n  }\n  var evt = document.createEvent(eventName);\n\n  for (var _len = arguments.length, opts = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n    opts[_key - 2] = arguments[_key];\n  }\n\n  evt.initEvent.apply(evt, [name].concat(opts));\n  elm.dispatchEvent ? elm.dispatchEvent(evt) : elm.fireEvent('on' + name, evt);\n\n  return elm;\n};\n\naria.Utils.keys = {\n  tab: 9,\n  enter: 13,\n  space: 32,\n  left: 37,\n  up: 38,\n  right: 39,\n  down: 40,\n  esc: 27\n};\n\n/* harmony default export */ var aria_utils = (aria.Utils);\n// CONCATENATED MODULE: ./src/utils/menu/aria-submenu.js\n\n\nvar SubMenu = function SubMenu(parent, domNode) {\n  this.domNode = domNode;\n  this.parent = parent;\n  this.subMenuItems = [];\n  this.subIndex = 0;\n  this.init();\n};\n\nSubMenu.prototype.init = function () {\n  this.subMenuItems = this.domNode.querySelectorAll('li');\n  this.addListeners();\n};\n\nSubMenu.prototype.gotoSubIndex = function (idx) {\n  if (idx === this.subMenuItems.length) {\n    idx = 0;\n  } else if (idx < 0) {\n    idx = this.subMenuItems.length - 1;\n  }\n  this.subMenuItems[idx].focus();\n  this.subIndex = idx;\n};\n\nSubMenu.prototype.addListeners = function () {\n  var _this = this;\n\n  var keys = aria_utils.keys;\n  var parentNode = this.parent.domNode;\n  Array.prototype.forEach.call(this.subMenuItems, function (el) {\n    el.addEventListener('keydown', function (event) {\n      var prevDef = false;\n      switch (event.keyCode) {\n        case keys.down:\n          _this.gotoSubIndex(_this.subIndex + 1);\n          prevDef = true;\n          break;\n        case keys.up:\n          _this.gotoSubIndex(_this.subIndex - 1);\n          prevDef = true;\n          break;\n        case keys.tab:\n          aria_utils.triggerEvent(parentNode, 'mouseleave');\n          break;\n        case keys.enter:\n        case keys.space:\n          prevDef = true;\n          event.currentTarget.click();\n          break;\n      }\n      if (prevDef) {\n        event.preventDefault();\n        event.stopPropagation();\n      }\n      return false;\n    });\n  });\n};\n\n/* harmony default export */ var aria_submenu = (SubMenu);\n// CONCATENATED MODULE: ./src/utils/menu/aria-menuitem.js\n\n\n\nvar MenuItem = function MenuItem(domNode) {\n  this.domNode = domNode;\n  this.submenu = null;\n  this.init();\n};\n\nMenuItem.prototype.init = function () {\n  this.domNode.setAttribute('tabindex', '0');\n  var menuChild = this.domNode.querySelector('.el-menu');\n  if (menuChild) {\n    this.submenu = new aria_submenu(this, menuChild);\n  }\n  this.addListeners();\n};\n\nMenuItem.prototype.addListeners = function () {\n  var _this = this;\n\n  var keys = aria_utils.keys;\n  this.domNode.addEventListener('keydown', function (event) {\n    var prevDef = false;\n    switch (event.keyCode) {\n      case keys.down:\n        aria_utils.triggerEvent(event.currentTarget, 'mouseenter');\n        _this.submenu && _this.submenu.gotoSubIndex(0);\n        prevDef = true;\n        break;\n      case keys.up:\n        aria_utils.triggerEvent(event.currentTarget, 'mouseenter');\n        _this.submenu && _this.submenu.gotoSubIndex(_this.submenu.subMenuItems.length - 1);\n        prevDef = true;\n        break;\n      case keys.tab:\n        aria_utils.triggerEvent(event.currentTarget, 'mouseleave');\n        break;\n      case keys.enter:\n      case keys.space:\n        prevDef = true;\n        event.currentTarget.click();\n        break;\n    }\n    if (prevDef) {\n      event.preventDefault();\n    }\n  });\n};\n\n/* harmony default export */ var aria_menuitem = (MenuItem);\n// CONCATENATED MODULE: ./src/utils/menu/aria-menubar.js\n\n\nvar Menu = function Menu(domNode) {\n  this.domNode = domNode;\n  this.init();\n};\n\nMenu.prototype.init = function () {\n  var menuChildren = this.domNode.childNodes;\n  [].filter.call(menuChildren, function (child) {\n    return child.nodeType === 1;\n  }).forEach(function (child) {\n    new aria_menuitem(child); // eslint-disable-line\n  });\n};\n/* harmony default export */ var aria_menubar = (Menu);\n// EXTERNAL MODULE: external \"element-ui/lib/utils/dom\"\nvar dom_ = __nested_webpack_require_8926__(1);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/menu/src/menu.vue?vue&type=script&lang=js&\n\n\n\n\n\n\n/* harmony default export */ var menuvue_type_script_lang_js_ = ({\n  name: 'ElMenu',\n\n  render: function render(h) {\n    var component = h(\n      'ul',\n      {\n        attrs: {\n          role: 'menubar'\n        },\n        key: +this.collapse,\n        style: { backgroundColor: this.backgroundColor || '' },\n        'class': {\n          'el-menu--horizontal': this.mode === 'horizontal',\n          'el-menu--collapse': this.collapse,\n          \"el-menu\": true\n        }\n      },\n      [this.$slots.default]\n    );\n\n    if (this.collapseTransition) {\n      return h('el-menu-collapse-transition', [component]);\n    } else {\n      return component;\n    }\n  },\n\n\n  componentName: 'ElMenu',\n\n  mixins: [emitter_default.a, migrating_default.a],\n\n  provide: function provide() {\n    return {\n      rootMenu: this\n    };\n  },\n\n\n  components: {\n    'el-menu-collapse-transition': {\n      functional: true,\n      render: function render(createElement, context) {\n        var data = {\n          props: {\n            mode: 'out-in'\n          },\n          on: {\n            beforeEnter: function beforeEnter(el) {\n              el.style.opacity = 0.2;\n            },\n            enter: function enter(el) {\n              Object(dom_[\"addClass\"])(el, 'el-opacity-transition');\n              el.style.opacity = 1;\n            },\n            afterEnter: function afterEnter(el) {\n              Object(dom_[\"removeClass\"])(el, 'el-opacity-transition');\n              el.style.opacity = '';\n            },\n            beforeLeave: function beforeLeave(el) {\n              if (!el.dataset) el.dataset = {};\n\n              if (Object(dom_[\"hasClass\"])(el, 'el-menu--collapse')) {\n                Object(dom_[\"removeClass\"])(el, 'el-menu--collapse');\n                el.dataset.oldOverflow = el.style.overflow;\n                el.dataset.scrollWidth = el.clientWidth;\n                Object(dom_[\"addClass\"])(el, 'el-menu--collapse');\n              } else {\n                Object(dom_[\"addClass\"])(el, 'el-menu--collapse');\n                el.dataset.oldOverflow = el.style.overflow;\n                el.dataset.scrollWidth = el.clientWidth;\n                Object(dom_[\"removeClass\"])(el, 'el-menu--collapse');\n              }\n\n              el.style.width = el.scrollWidth + 'px';\n              el.style.overflow = 'hidden';\n            },\n            leave: function leave(el) {\n              Object(dom_[\"addClass\"])(el, 'horizontal-collapse-transition');\n              el.style.width = el.dataset.scrollWidth + 'px';\n            }\n          }\n        };\n        return createElement('transition', data, context.children);\n      }\n    }\n  },\n\n  props: {\n    mode: {\n      type: String,\n      default: 'vertical'\n    },\n    defaultActive: {\n      type: String,\n      default: ''\n    },\n    defaultOpeneds: Array,\n    uniqueOpened: Boolean,\n    router: Boolean,\n    menuTrigger: {\n      type: String,\n      default: 'hover'\n    },\n    collapse: Boolean,\n    backgroundColor: String,\n    textColor: String,\n    activeTextColor: String,\n    collapseTransition: {\n      type: Boolean,\n      default: true\n    }\n  },\n  data: function data() {\n    return {\n      activeIndex: this.defaultActive,\n      openedMenus: this.defaultOpeneds && !this.collapse ? this.defaultOpeneds.slice(0) : [],\n      items: {},\n      submenus: {}\n    };\n  },\n\n  computed: {\n    hoverBackground: function hoverBackground() {\n      return this.backgroundColor ? this.mixColor(this.backgroundColor, 0.2) : '';\n    },\n    isMenuPopup: function isMenuPopup() {\n      return this.mode === 'horizontal' || this.mode === 'vertical' && this.collapse;\n    }\n  },\n  watch: {\n    defaultActive: function defaultActive(value) {\n      if (!this.items[value]) {\n        this.activeIndex = null;\n      }\n      this.updateActiveIndex(value);\n    },\n    defaultOpeneds: function defaultOpeneds(value) {\n      if (!this.collapse) {\n        this.openedMenus = value;\n      }\n    },\n    collapse: function collapse(value) {\n      if (value) this.openedMenus = [];\n      this.broadcast('ElSubmenu', 'toggle-collapse', value);\n    }\n  },\n  methods: {\n    updateActiveIndex: function updateActiveIndex(val) {\n      var item = this.items[val] || this.items[this.activeIndex] || this.items[this.defaultActive];\n      if (item) {\n        this.activeIndex = item.index;\n        this.initOpenedMenu();\n      } else {\n        this.activeIndex = null;\n      }\n    },\n    getMigratingConfig: function getMigratingConfig() {\n      return {\n        props: {\n          'theme': 'theme is removed.'\n        }\n      };\n    },\n    getColorChannels: function getColorChannels(color) {\n      color = color.replace('#', '');\n      if (/^[0-9a-fA-F]{3}$/.test(color)) {\n        color = color.split('');\n        for (var i = 2; i >= 0; i--) {\n          color.splice(i, 0, color[i]);\n        }\n        color = color.join('');\n      }\n      if (/^[0-9a-fA-F]{6}$/.test(color)) {\n        return {\n          red: parseInt(color.slice(0, 2), 16),\n          green: parseInt(color.slice(2, 4), 16),\n          blue: parseInt(color.slice(4, 6), 16)\n        };\n      } else {\n        return {\n          red: 255,\n          green: 255,\n          blue: 255\n        };\n      }\n    },\n    mixColor: function mixColor(color, percent) {\n      var _getColorChannels = this.getColorChannels(color),\n          red = _getColorChannels.red,\n          green = _getColorChannels.green,\n          blue = _getColorChannels.blue;\n\n      if (percent > 0) {\n        // shade given color\n        red *= 1 - percent;\n        green *= 1 - percent;\n        blue *= 1 - percent;\n      } else {\n        // tint given color\n        red += (255 - red) * percent;\n        green += (255 - green) * percent;\n        blue += (255 - blue) * percent;\n      }\n      return 'rgb(' + Math.round(red) + ', ' + Math.round(green) + ', ' + Math.round(blue) + ')';\n    },\n    addItem: function addItem(item) {\n      this.$set(this.items, item.index, item);\n    },\n    removeItem: function removeItem(item) {\n      delete this.items[item.index];\n    },\n    addSubmenu: function addSubmenu(item) {\n      this.$set(this.submenus, item.index, item);\n    },\n    removeSubmenu: function removeSubmenu(item) {\n      delete this.submenus[item.index];\n    },\n    openMenu: function openMenu(index, indexPath) {\n      var openedMenus = this.openedMenus;\n      if (openedMenus.indexOf(index) !== -1) return;\n      // 将不在该菜单路径下的其余菜单收起\n      // collapse all menu that are not under current menu item\n      if (this.uniqueOpened) {\n        this.openedMenus = openedMenus.filter(function (index) {\n          return indexPath.indexOf(index) !== -1;\n        });\n      }\n      this.openedMenus.push(index);\n    },\n    closeMenu: function closeMenu(index) {\n      var i = this.openedMenus.indexOf(index);\n      if (i !== -1) {\n        this.openedMenus.splice(i, 1);\n      }\n    },\n    handleSubmenuClick: function handleSubmenuClick(submenu) {\n      var index = submenu.index,\n          indexPath = submenu.indexPath;\n\n      var isOpened = this.openedMenus.indexOf(index) !== -1;\n\n      if (isOpened) {\n        this.closeMenu(index);\n        this.$emit('close', index, indexPath);\n      } else {\n        this.openMenu(index, indexPath);\n        this.$emit('open', index, indexPath);\n      }\n    },\n    handleItemClick: function handleItemClick(item) {\n      var _this = this;\n\n      var index = item.index,\n          indexPath = item.indexPath;\n\n      var oldActiveIndex = this.activeIndex;\n      var hasIndex = item.index !== null;\n\n      if (hasIndex) {\n        this.activeIndex = item.index;\n      }\n\n      this.$emit('select', index, indexPath, item);\n\n      if (this.mode === 'horizontal' || this.collapse) {\n        this.openedMenus = [];\n      }\n\n      if (this.router && hasIndex) {\n        this.routeToItem(item, function (error) {\n          _this.activeIndex = oldActiveIndex;\n          if (error) {\n            // vue-router 3.1.0+ push/replace cause NavigationDuplicated error \n            // https://github.com/ElemeFE/element/issues/17044\n            if (error.name === 'NavigationDuplicated') return;\n            console.error(error);\n          }\n        });\n      }\n    },\n\n    // 初始化展开菜单\n    // initialize opened menu\n    initOpenedMenu: function initOpenedMenu() {\n      var _this2 = this;\n\n      var index = this.activeIndex;\n      var activeItem = this.items[index];\n      if (!activeItem || this.mode === 'horizontal' || this.collapse) return;\n\n      var indexPath = activeItem.indexPath;\n\n      // 展开该菜单项的路径上所有子菜单\n      // expand all submenus of the menu item\n      indexPath.forEach(function (index) {\n        var submenu = _this2.submenus[index];\n        submenu && _this2.openMenu(index, submenu.indexPath);\n      });\n    },\n    routeToItem: function routeToItem(item, onError) {\n      var route = item.route || item.index;\n      try {\n        this.$router.push(route, function () {}, onError);\n      } catch (e) {\n        console.error(e);\n      }\n    },\n    open: function open(index) {\n      var _this3 = this;\n\n      var indexPath = this.submenus[index.toString()].indexPath;\n\n      indexPath.forEach(function (i) {\n        return _this3.openMenu(i, indexPath);\n      });\n    },\n    close: function close(index) {\n      this.closeMenu(index);\n    }\n  },\n  mounted: function mounted() {\n    this.initOpenedMenu();\n    this.$on('item-click', this.handleItemClick);\n    this.$on('submenu-click', this.handleSubmenuClick);\n    if (this.mode === 'horizontal') {\n      new aria_menubar(this.$el); // eslint-disable-line\n    }\n    this.$watch('items', this.updateActiveIndex);\n  }\n});\n// CONCATENATED MODULE: ./packages/menu/src/menu.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_menuvue_type_script_lang_js_ = (menuvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/menu/src/menu.vue\nvar menu_render, menu_staticRenderFns\n\n\n\n\n/* normalize component */\n\nvar menu_component = normalizeComponent(\n  src_menuvue_type_script_lang_js_,\n  menu_render,\n  menu_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var menu_api; }\nmenu_component.options.__file = \"packages/menu/src/menu.vue\"\n/* harmony default export */ var src_menu = (menu_component.exports);\n// CONCATENATED MODULE: ./packages/menu/index.js\n\n\n/* istanbul ignore next */\nsrc_menu.install = function (Vue) {\n  Vue.component(src_menu.name, src_menu);\n};\n\n/* harmony default export */ var packages_menu = (src_menu);\n// EXTERNAL MODULE: external \"element-ui/lib/transitions/collapse-transition\"\nvar collapse_transition_ = __nested_webpack_require_8926__(21);\nvar collapse_transition_default = /*#__PURE__*/__nested_webpack_require_8926__.n(collapse_transition_);\n\n// CONCATENATED MODULE: ./packages/menu/src/menu-mixin.js\n/* harmony default export */ var menu_mixin = ({\n  inject: ['rootMenu'],\n  computed: {\n    indexPath: function indexPath() {\n      var path = [this.index];\n      var parent = this.$parent;\n      while (parent.$options.componentName !== 'ElMenu') {\n        if (parent.index) {\n          path.unshift(parent.index);\n        }\n        parent = parent.$parent;\n      }\n      return path;\n    },\n    parentMenu: function parentMenu() {\n      var parent = this.$parent;\n      while (parent && ['ElMenu', 'ElSubmenu'].indexOf(parent.$options.componentName) === -1) {\n        parent = parent.$parent;\n      }\n      return parent;\n    },\n    paddingStyle: function paddingStyle() {\n      if (this.rootMenu.mode !== 'vertical') return {};\n\n      var padding = 20;\n      var parent = this.$parent;\n\n      if (this.rootMenu.collapse) {\n        padding = 20;\n      } else {\n        while (parent && parent.$options.componentName !== 'ElMenu') {\n          if (parent.$options.componentName === 'ElSubmenu') {\n            padding += 20;\n          }\n          parent = parent.$parent;\n        }\n      }\n      return { paddingLeft: padding + 'px' };\n    }\n  }\n});\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/menu/src/submenu.vue?vue&type=script&lang=js&\n\n\n\n\n\n\nvar poperMixins = {\n  props: {\n    transformOrigin: {\n      type: [Boolean, String],\n      default: false\n    },\n    offset: vue_popper_default.a.props.offset,\n    boundariesPadding: vue_popper_default.a.props.boundariesPadding,\n    popperOptions: vue_popper_default.a.props.popperOptions\n  },\n  data: vue_popper_default.a.data,\n  methods: vue_popper_default.a.methods,\n  beforeDestroy: vue_popper_default.a.beforeDestroy,\n  deactivated: vue_popper_default.a.deactivated\n};\n\n/* harmony default export */ var submenuvue_type_script_lang_js_ = ({\n  name: 'ElSubmenu',\n\n  componentName: 'ElSubmenu',\n\n  mixins: [menu_mixin, emitter_default.a, poperMixins],\n\n  components: { ElCollapseTransition: collapse_transition_default.a },\n\n  props: {\n    index: {\n      type: String,\n      required: true\n    },\n    showTimeout: {\n      type: Number,\n      default: 300\n    },\n    hideTimeout: {\n      type: Number,\n      default: 300\n    },\n    popperClass: String,\n    disabled: Boolean,\n    popperAppendToBody: {\n      type: Boolean,\n      default: undefined\n    }\n  },\n\n  data: function data() {\n    return {\n      popperJS: null,\n      timeout: null,\n      items: {},\n      submenus: {},\n      mouseInChild: false\n    };\n  },\n\n  watch: {\n    opened: function opened(val) {\n      var _this = this;\n\n      if (this.isMenuPopup) {\n        this.$nextTick(function (_) {\n          _this.updatePopper();\n        });\n      }\n    }\n  },\n  computed: {\n    // popper option\n    appendToBody: function appendToBody() {\n      return this.popperAppendToBody === undefined ? this.isFirstLevel : this.popperAppendToBody;\n    },\n    menuTransitionName: function menuTransitionName() {\n      return this.rootMenu.collapse ? 'el-zoom-in-left' : 'el-zoom-in-top';\n    },\n    opened: function opened() {\n      return this.rootMenu.openedMenus.indexOf(this.index) > -1;\n    },\n    active: function active() {\n      var isActive = false;\n      var submenus = this.submenus;\n      var items = this.items;\n\n      Object.keys(items).forEach(function (index) {\n        if (items[index].active) {\n          isActive = true;\n        }\n      });\n\n      Object.keys(submenus).forEach(function (index) {\n        if (submenus[index].active) {\n          isActive = true;\n        }\n      });\n\n      return isActive;\n    },\n    hoverBackground: function hoverBackground() {\n      return this.rootMenu.hoverBackground;\n    },\n    backgroundColor: function backgroundColor() {\n      return this.rootMenu.backgroundColor || '';\n    },\n    activeTextColor: function activeTextColor() {\n      return this.rootMenu.activeTextColor || '';\n    },\n    textColor: function textColor() {\n      return this.rootMenu.textColor || '';\n    },\n    mode: function mode() {\n      return this.rootMenu.mode;\n    },\n    isMenuPopup: function isMenuPopup() {\n      return this.rootMenu.isMenuPopup;\n    },\n    titleStyle: function titleStyle() {\n      if (this.mode !== 'horizontal') {\n        return {\n          color: this.textColor\n        };\n      }\n      return {\n        borderBottomColor: this.active ? this.rootMenu.activeTextColor ? this.activeTextColor : '' : 'transparent',\n        color: this.active ? this.activeTextColor : this.textColor\n      };\n    },\n    isFirstLevel: function isFirstLevel() {\n      var isFirstLevel = true;\n      var parent = this.$parent;\n      while (parent && parent !== this.rootMenu) {\n        if (['ElSubmenu', 'ElMenuItemGroup'].indexOf(parent.$options.componentName) > -1) {\n          isFirstLevel = false;\n          break;\n        } else {\n          parent = parent.$parent;\n        }\n      }\n      return isFirstLevel;\n    }\n  },\n  methods: {\n    handleCollapseToggle: function handleCollapseToggle(value) {\n      if (value) {\n        this.initPopper();\n      } else {\n        this.doDestroy();\n      }\n    },\n    addItem: function addItem(item) {\n      this.$set(this.items, item.index, item);\n    },\n    removeItem: function removeItem(item) {\n      delete this.items[item.index];\n    },\n    addSubmenu: function addSubmenu(item) {\n      this.$set(this.submenus, item.index, item);\n    },\n    removeSubmenu: function removeSubmenu(item) {\n      delete this.submenus[item.index];\n    },\n    handleClick: function handleClick() {\n      var rootMenu = this.rootMenu,\n          disabled = this.disabled;\n\n      if (rootMenu.menuTrigger === 'hover' && rootMenu.mode === 'horizontal' || rootMenu.collapse && rootMenu.mode === 'vertical' || disabled) {\n        return;\n      }\n      this.dispatch('ElMenu', 'submenu-click', this);\n    },\n    handleMouseenter: function handleMouseenter(event) {\n      var _this2 = this;\n\n      var showTimeout = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.showTimeout;\n\n\n      if (!('ActiveXObject' in window) && event.type === 'focus' && !event.relatedTarget) {\n        return;\n      }\n      var rootMenu = this.rootMenu,\n          disabled = this.disabled;\n\n      if (rootMenu.menuTrigger === 'click' && rootMenu.mode === 'horizontal' || !rootMenu.collapse && rootMenu.mode === 'vertical' || disabled) {\n        return;\n      }\n      this.dispatch('ElSubmenu', 'mouse-enter-child');\n      clearTimeout(this.timeout);\n      this.timeout = setTimeout(function () {\n        _this2.rootMenu.openMenu(_this2.index, _this2.indexPath);\n      }, showTimeout);\n\n      if (this.appendToBody) {\n        this.$parent.$el.dispatchEvent(new MouseEvent('mouseenter'));\n      }\n    },\n    handleMouseleave: function handleMouseleave() {\n      var _this3 = this;\n\n      var deepDispatch = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n      var rootMenu = this.rootMenu;\n\n      if (rootMenu.menuTrigger === 'click' && rootMenu.mode === 'horizontal' || !rootMenu.collapse && rootMenu.mode === 'vertical') {\n        return;\n      }\n      this.dispatch('ElSubmenu', 'mouse-leave-child');\n      clearTimeout(this.timeout);\n      this.timeout = setTimeout(function () {\n        !_this3.mouseInChild && _this3.rootMenu.closeMenu(_this3.index);\n      }, this.hideTimeout);\n\n      if (this.appendToBody && deepDispatch) {\n        if (this.$parent.$options.name === 'ElSubmenu') {\n          this.$parent.handleMouseleave(true);\n        }\n      }\n    },\n    handleTitleMouseenter: function handleTitleMouseenter() {\n      if (this.mode === 'horizontal' && !this.rootMenu.backgroundColor) return;\n      var title = this.$refs['submenu-title'];\n      title && (title.style.backgroundColor = this.rootMenu.hoverBackground);\n    },\n    handleTitleMouseleave: function handleTitleMouseleave() {\n      if (this.mode === 'horizontal' && !this.rootMenu.backgroundColor) return;\n      var title = this.$refs['submenu-title'];\n      title && (title.style.backgroundColor = this.rootMenu.backgroundColor || '');\n    },\n    updatePlacement: function updatePlacement() {\n      this.currentPlacement = this.mode === 'horizontal' && this.isFirstLevel ? 'bottom-start' : 'right-start';\n    },\n    initPopper: function initPopper() {\n      this.referenceElm = this.$el;\n      this.popperElm = this.$refs.menu;\n      this.updatePlacement();\n    }\n  },\n  created: function created() {\n    var _this4 = this;\n\n    this.$on('toggle-collapse', this.handleCollapseToggle);\n    this.$on('mouse-enter-child', function () {\n      _this4.mouseInChild = true;\n      clearTimeout(_this4.timeout);\n    });\n    this.$on('mouse-leave-child', function () {\n      _this4.mouseInChild = false;\n      clearTimeout(_this4.timeout);\n    });\n  },\n  mounted: function mounted() {\n    this.parentMenu.addSubmenu(this);\n    this.rootMenu.addSubmenu(this);\n    this.initPopper();\n  },\n  beforeDestroy: function beforeDestroy() {\n    this.parentMenu.removeSubmenu(this);\n    this.rootMenu.removeSubmenu(this);\n  },\n  render: function render(h) {\n    var _this5 = this;\n\n    var active = this.active,\n        opened = this.opened,\n        paddingStyle = this.paddingStyle,\n        titleStyle = this.titleStyle,\n        backgroundColor = this.backgroundColor,\n        rootMenu = this.rootMenu,\n        currentPlacement = this.currentPlacement,\n        menuTransitionName = this.menuTransitionName,\n        mode = this.mode,\n        disabled = this.disabled,\n        popperClass = this.popperClass,\n        $slots = this.$slots,\n        isFirstLevel = this.isFirstLevel;\n\n\n    var popupMenu = h(\n      'transition',\n      {\n        attrs: { name: menuTransitionName }\n      },\n      [h(\n        'div',\n        {\n          ref: 'menu',\n          directives: [{\n            name: 'show',\n            value: opened\n          }],\n\n          'class': ['el-menu--' + mode, popperClass],\n          on: {\n            'mouseenter': function mouseenter($event) {\n              return _this5.handleMouseenter($event, 100);\n            },\n            'mouseleave': function mouseleave() {\n              return _this5.handleMouseleave(true);\n            },\n            'focus': function focus($event) {\n              return _this5.handleMouseenter($event, 100);\n            }\n          }\n        },\n        [h(\n          'ul',\n          {\n            attrs: {\n              role: 'menu'\n            },\n            'class': ['el-menu el-menu--popup', 'el-menu--popup-' + currentPlacement],\n            style: { backgroundColor: rootMenu.backgroundColor || '' } },\n          [$slots.default]\n        )]\n      )]\n    );\n\n    var inlineMenu = h('el-collapse-transition', [h(\n      'ul',\n      {\n        attrs: {\n          role: 'menu'\n        },\n        'class': 'el-menu el-menu--inline',\n        directives: [{\n          name: 'show',\n          value: opened\n        }],\n\n        style: { backgroundColor: rootMenu.backgroundColor || '' } },\n      [$slots.default]\n    )]);\n\n    var submenuTitleIcon = rootMenu.mode === 'horizontal' && isFirstLevel || rootMenu.mode === 'vertical' && !rootMenu.collapse ? 'el-icon-arrow-down' : 'el-icon-arrow-right';\n\n    return h(\n      'li',\n      {\n        'class': {\n          'el-submenu': true,\n          'is-active': active,\n          'is-opened': opened,\n          'is-disabled': disabled\n        },\n        attrs: { role: 'menuitem',\n          'aria-haspopup': 'true',\n          'aria-expanded': opened\n        },\n        on: {\n          'mouseenter': this.handleMouseenter,\n          'mouseleave': function mouseleave() {\n            return _this5.handleMouseleave(false);\n          },\n          'focus': this.handleMouseenter\n        }\n      },\n      [h(\n        'div',\n        {\n          'class': 'el-submenu__title',\n          ref: 'submenu-title',\n          on: {\n            'click': this.handleClick,\n            'mouseenter': this.handleTitleMouseenter,\n            'mouseleave': this.handleTitleMouseleave\n          },\n\n          style: [paddingStyle, titleStyle, { backgroundColor: backgroundColor }]\n        },\n        [$slots.title, h('i', { 'class': ['el-submenu__icon-arrow', submenuTitleIcon] })]\n      ), this.isMenuPopup ? popupMenu : inlineMenu]\n    );\n  }\n});\n// CONCATENATED MODULE: ./packages/menu/src/submenu.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_submenuvue_type_script_lang_js_ = (submenuvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/menu/src/submenu.vue\nvar submenu_render, submenu_staticRenderFns\n\n\n\n\n/* normalize component */\n\nvar submenu_component = normalizeComponent(\n  src_submenuvue_type_script_lang_js_,\n  submenu_render,\n  submenu_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var submenu_api; }\nsubmenu_component.options.__file = \"packages/menu/src/submenu.vue\"\n/* harmony default export */ var submenu = (submenu_component.exports);\n// CONCATENATED MODULE: ./packages/submenu/index.js\n\n\n/* istanbul ignore next */\nsubmenu.install = function (Vue) {\n  Vue.component(submenu.name, submenu);\n};\n\n/* harmony default export */ var packages_submenu = (submenu);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/menu/src/menu-item.vue?vue&type=template&id=2a5dbfea&\nvar menu_itemvue_type_template_id_2a5dbfea_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"li\",\n    {\n      staticClass: \"el-menu-item\",\n      class: {\n        \"is-active\": _vm.active,\n        \"is-disabled\": _vm.disabled\n      },\n      style: [\n        _vm.paddingStyle,\n        _vm.itemStyle,\n        { backgroundColor: _vm.backgroundColor }\n      ],\n      attrs: { role: \"menuitem\", tabindex: \"-1\" },\n      on: {\n        click: _vm.handleClick,\n        mouseenter: _vm.onMouseEnter,\n        focus: _vm.onMouseEnter,\n        blur: _vm.onMouseLeave,\n        mouseleave: _vm.onMouseLeave\n      }\n    },\n    [\n      _vm.parentMenu.$options.componentName === \"ElMenu\" &&\n      _vm.rootMenu.collapse &&\n      _vm.$slots.title\n        ? _c(\"el-tooltip\", { attrs: { effect: \"dark\", placement: \"right\" } }, [\n            _c(\n              \"div\",\n              { attrs: { slot: \"content\" }, slot: \"content\" },\n              [_vm._t(\"title\")],\n              2\n            ),\n            _c(\n              \"div\",\n              {\n                staticStyle: {\n                  position: \"absolute\",\n                  left: \"0\",\n                  top: \"0\",\n                  height: \"100%\",\n                  width: \"100%\",\n                  display: \"inline-block\",\n                  \"box-sizing\": \"border-box\",\n                  padding: \"0 20px\"\n                }\n              },\n              [_vm._t(\"default\")],\n              2\n            )\n          ])\n        : [_vm._t(\"default\"), _vm._t(\"title\")]\n    ],\n    2\n  )\n}\nvar menu_itemvue_type_template_id_2a5dbfea_staticRenderFns = []\nmenu_itemvue_type_template_id_2a5dbfea_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/menu/src/menu-item.vue?vue&type=template&id=2a5dbfea&\n\n// EXTERNAL MODULE: external \"element-ui/lib/tooltip\"\nvar tooltip_ = __nested_webpack_require_8926__(26);\nvar tooltip_default = /*#__PURE__*/__nested_webpack_require_8926__.n(tooltip_);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/menu/src/menu-item.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n/* harmony default export */ var menu_itemvue_type_script_lang_js_ = ({\n  name: 'ElMenuItem',\n\n  componentName: 'ElMenuItem',\n\n  mixins: [menu_mixin, emitter_default.a],\n\n  components: { ElTooltip: tooltip_default.a },\n\n  props: {\n    index: {\n      default: null,\n      validator: function validator(val) {\n        return typeof val === 'string' || val === null;\n      }\n    },\n    route: [String, Object],\n    disabled: Boolean\n  },\n  computed: {\n    active: function active() {\n      return this.index === this.rootMenu.activeIndex;\n    },\n    hoverBackground: function hoverBackground() {\n      return this.rootMenu.hoverBackground;\n    },\n    backgroundColor: function backgroundColor() {\n      return this.rootMenu.backgroundColor || '';\n    },\n    activeTextColor: function activeTextColor() {\n      return this.rootMenu.activeTextColor || '';\n    },\n    textColor: function textColor() {\n      return this.rootMenu.textColor || '';\n    },\n    mode: function mode() {\n      return this.rootMenu.mode;\n    },\n    itemStyle: function itemStyle() {\n      var style = {\n        color: this.active ? this.activeTextColor : this.textColor\n      };\n      if (this.mode === 'horizontal' && !this.isNested) {\n        style.borderBottomColor = this.active ? this.rootMenu.activeTextColor ? this.activeTextColor : '' : 'transparent';\n      }\n      return style;\n    },\n    isNested: function isNested() {\n      return this.parentMenu !== this.rootMenu;\n    }\n  },\n  methods: {\n    onMouseEnter: function onMouseEnter() {\n      if (this.mode === 'horizontal' && !this.rootMenu.backgroundColor) return;\n      this.$el.style.backgroundColor = this.hoverBackground;\n    },\n    onMouseLeave: function onMouseLeave() {\n      if (this.mode === 'horizontal' && !this.rootMenu.backgroundColor) return;\n      this.$el.style.backgroundColor = this.backgroundColor;\n    },\n    handleClick: function handleClick() {\n      if (!this.disabled) {\n        this.dispatch('ElMenu', 'item-click', this);\n        this.$emit('click', this);\n      }\n    }\n  },\n  mounted: function mounted() {\n    this.parentMenu.addItem(this);\n    this.rootMenu.addItem(this);\n  },\n  beforeDestroy: function beforeDestroy() {\n    this.parentMenu.removeItem(this);\n    this.rootMenu.removeItem(this);\n  }\n});\n// CONCATENATED MODULE: ./packages/menu/src/menu-item.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_menu_itemvue_type_script_lang_js_ = (menu_itemvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/menu/src/menu-item.vue\n\n\n\n\n\n/* normalize component */\n\nvar menu_item_component = normalizeComponent(\n  src_menu_itemvue_type_script_lang_js_,\n  menu_itemvue_type_template_id_2a5dbfea_render,\n  menu_itemvue_type_template_id_2a5dbfea_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var menu_item_api; }\nmenu_item_component.options.__file = \"packages/menu/src/menu-item.vue\"\n/* harmony default export */ var menu_item = (menu_item_component.exports);\n// CONCATENATED MODULE: ./packages/menu-item/index.js\n\n\n/* istanbul ignore next */\nmenu_item.install = function (Vue) {\n  Vue.component(menu_item.name, menu_item);\n};\n\n/* harmony default export */ var packages_menu_item = (menu_item);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/menu/src/menu-item-group.vue?vue&type=template&id=543b7bdc&\nvar menu_item_groupvue_type_template_id_543b7bdc_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\"li\", { staticClass: \"el-menu-item-group\" }, [\n    _c(\n      \"div\",\n      {\n        staticClass: \"el-menu-item-group__title\",\n        style: { paddingLeft: _vm.levelPadding + \"px\" }\n      },\n      [!_vm.$slots.title ? [_vm._v(_vm._s(_vm.title))] : _vm._t(\"title\")],\n      2\n    ),\n    _c(\"ul\", [_vm._t(\"default\")], 2)\n  ])\n}\nvar menu_item_groupvue_type_template_id_543b7bdc_staticRenderFns = []\nmenu_item_groupvue_type_template_id_543b7bdc_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/menu/src/menu-item-group.vue?vue&type=template&id=543b7bdc&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/menu/src/menu-item-group.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ var menu_item_groupvue_type_script_lang_js_ = ({\n  name: 'ElMenuItemGroup',\n\n  componentName: 'ElMenuItemGroup',\n\n  inject: ['rootMenu'],\n  props: {\n    title: {\n      type: String\n    }\n  },\n  data: function data() {\n    return {\n      paddingLeft: 20\n    };\n  },\n\n  computed: {\n    levelPadding: function levelPadding() {\n      var padding = 20;\n      var parent = this.$parent;\n      if (this.rootMenu.collapse) return 20;\n      while (parent && parent.$options.componentName !== 'ElMenu') {\n        if (parent.$options.componentName === 'ElSubmenu') {\n          padding += 20;\n        }\n        parent = parent.$parent;\n      }\n      return padding;\n    }\n  }\n});\n// CONCATENATED MODULE: ./packages/menu/src/menu-item-group.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_menu_item_groupvue_type_script_lang_js_ = (menu_item_groupvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/menu/src/menu-item-group.vue\n\n\n\n\n\n/* normalize component */\n\nvar menu_item_group_component = normalizeComponent(\n  src_menu_item_groupvue_type_script_lang_js_,\n  menu_item_groupvue_type_template_id_543b7bdc_render,\n  menu_item_groupvue_type_template_id_543b7bdc_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var menu_item_group_api; }\nmenu_item_group_component.options.__file = \"packages/menu/src/menu-item-group.vue\"\n/* harmony default export */ var menu_item_group = (menu_item_group_component.exports);\n// CONCATENATED MODULE: ./packages/menu-item-group/index.js\n\n\n/* istanbul ignore next */\nmenu_item_group.install = function (Vue) {\n  Vue.component(menu_item_group.name, menu_item_group);\n};\n\n/* harmony default export */ var packages_menu_item_group = (menu_item_group);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/input/src/input.vue?vue&type=template&id=343dd774&\nvar inputvue_type_template_id_343dd774_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    {\n      class: [\n        _vm.type === \"textarea\" ? \"el-textarea\" : \"el-input\",\n        _vm.inputSize ? \"el-input--\" + _vm.inputSize : \"\",\n        {\n          \"is-disabled\": _vm.inputDisabled,\n          \"is-exceed\": _vm.inputExceed,\n          \"el-input-group\": _vm.$slots.prepend || _vm.$slots.append,\n          \"el-input-group--append\": _vm.$slots.append,\n          \"el-input-group--prepend\": _vm.$slots.prepend,\n          \"el-input--prefix\": _vm.$slots.prefix || _vm.prefixIcon,\n          \"el-input--suffix\":\n            _vm.$slots.suffix ||\n            _vm.suffixIcon ||\n            _vm.clearable ||\n            _vm.showPassword\n        }\n      ],\n      on: {\n        mouseenter: function($event) {\n          _vm.hovering = true\n        },\n        mouseleave: function($event) {\n          _vm.hovering = false\n        }\n      }\n    },\n    [\n      _vm.type !== \"textarea\"\n        ? [\n            _vm.$slots.prepend\n              ? _c(\n                  \"div\",\n                  { staticClass: \"el-input-group__prepend\" },\n                  [_vm._t(\"prepend\")],\n                  2\n                )\n              : _vm._e(),\n            _vm.type !== \"textarea\"\n              ? _c(\n                  \"input\",\n                  _vm._b(\n                    {\n                      ref: \"input\",\n                      staticClass: \"el-input__inner\",\n                      attrs: {\n                        tabindex: _vm.tabindex,\n                        type: _vm.showPassword\n                          ? _vm.passwordVisible\n                            ? \"text\"\n                            : \"password\"\n                          : _vm.type,\n                        disabled: _vm.inputDisabled,\n                        readonly: _vm.readonly,\n                        autocomplete: _vm.autoComplete || _vm.autocomplete,\n                        \"aria-label\": _vm.label\n                      },\n                      on: {\n                        compositionstart: _vm.handleCompositionStart,\n                        compositionupdate: _vm.handleCompositionUpdate,\n                        compositionend: _vm.handleCompositionEnd,\n                        input: _vm.handleInput,\n                        focus: _vm.handleFocus,\n                        blur: _vm.handleBlur,\n                        change: _vm.handleChange\n                      }\n                    },\n                    \"input\",\n                    _vm.$attrs,\n                    false\n                  )\n                )\n              : _vm._e(),\n            _vm.$slots.prefix || _vm.prefixIcon\n              ? _c(\n                  \"span\",\n                  { staticClass: \"el-input__prefix\" },\n                  [\n                    _vm._t(\"prefix\"),\n                    _vm.prefixIcon\n                      ? _c(\"i\", {\n                          staticClass: \"el-input__icon\",\n                          class: _vm.prefixIcon\n                        })\n                      : _vm._e()\n                  ],\n                  2\n                )\n              : _vm._e(),\n            _vm.getSuffixVisible()\n              ? _c(\"span\", { staticClass: \"el-input__suffix\" }, [\n                  _c(\n                    \"span\",\n                    { staticClass: \"el-input__suffix-inner\" },\n                    [\n                      !_vm.showClear ||\n                      !_vm.showPwdVisible ||\n                      !_vm.isWordLimitVisible\n                        ? [\n                            _vm._t(\"suffix\"),\n                            _vm.suffixIcon\n                              ? _c(\"i\", {\n                                  staticClass: \"el-input__icon\",\n                                  class: _vm.suffixIcon\n                                })\n                              : _vm._e()\n                          ]\n                        : _vm._e(),\n                      _vm.showClear\n                        ? _c(\"i\", {\n                            staticClass:\n                              \"el-input__icon el-icon-circle-close el-input__clear\",\n                            on: {\n                              mousedown: function($event) {\n                                $event.preventDefault()\n                              },\n                              click: _vm.clear\n                            }\n                          })\n                        : _vm._e(),\n                      _vm.showPwdVisible\n                        ? _c(\"i\", {\n                            staticClass:\n                              \"el-input__icon el-icon-view el-input__clear\",\n                            on: { click: _vm.handlePasswordVisible }\n                          })\n                        : _vm._e(),\n                      _vm.isWordLimitVisible\n                        ? _c(\"span\", { staticClass: \"el-input__count\" }, [\n                            _c(\n                              \"span\",\n                              { staticClass: \"el-input__count-inner\" },\n                              [\n                                _vm._v(\n                                  \"\\n            \" +\n                                    _vm._s(_vm.textLength) +\n                                    \"/\" +\n                                    _vm._s(_vm.upperLimit) +\n                                    \"\\n          \"\n                                )\n                              ]\n                            )\n                          ])\n                        : _vm._e()\n                    ],\n                    2\n                  ),\n                  _vm.validateState\n                    ? _c(\"i\", {\n                        staticClass: \"el-input__icon\",\n                        class: [\"el-input__validateIcon\", _vm.validateIcon]\n                      })\n                    : _vm._e()\n                ])\n              : _vm._e(),\n            _vm.$slots.append\n              ? _c(\n                  \"div\",\n                  { staticClass: \"el-input-group__append\" },\n                  [_vm._t(\"append\")],\n                  2\n                )\n              : _vm._e()\n          ]\n        : _c(\n            \"textarea\",\n            _vm._b(\n              {\n                ref: \"textarea\",\n                staticClass: \"el-textarea__inner\",\n                style: _vm.textareaStyle,\n                attrs: {\n                  tabindex: _vm.tabindex,\n                  disabled: _vm.inputDisabled,\n                  readonly: _vm.readonly,\n                  autocomplete: _vm.autoComplete || _vm.autocomplete,\n                  \"aria-label\": _vm.label\n                },\n                on: {\n                  compositionstart: _vm.handleCompositionStart,\n                  compositionupdate: _vm.handleCompositionUpdate,\n                  compositionend: _vm.handleCompositionEnd,\n                  input: _vm.handleInput,\n                  focus: _vm.handleFocus,\n                  blur: _vm.handleBlur,\n                  change: _vm.handleChange\n                }\n              },\n              \"textarea\",\n              _vm.$attrs,\n              false\n            )\n          ),\n      _vm.isWordLimitVisible && _vm.type === \"textarea\"\n        ? _c(\"span\", { staticClass: \"el-input__count\" }, [\n            _vm._v(_vm._s(_vm.textLength) + \"/\" + _vm._s(_vm.upperLimit))\n          ])\n        : _vm._e()\n    ],\n    2\n  )\n}\nvar inputvue_type_template_id_343dd774_staticRenderFns = []\ninputvue_type_template_id_343dd774_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/input/src/input.vue?vue&type=template&id=343dd774&\n\n// CONCATENATED MODULE: ./packages/input/src/calcTextareaHeight.js\nvar hiddenTextarea = void 0;\n\nvar HIDDEN_STYLE = '\\n  height:0 !important;\\n  visibility:hidden !important;\\n  overflow:hidden !important;\\n  position:absolute !important;\\n  z-index:-1000 !important;\\n  top:0 !important;\\n  right:0 !important\\n';\n\nvar CONTEXT_STYLE = ['letter-spacing', 'line-height', 'padding-top', 'padding-bottom', 'font-family', 'font-weight', 'font-size', 'text-rendering', 'text-transform', 'width', 'text-indent', 'padding-left', 'padding-right', 'border-width', 'box-sizing'];\n\nfunction calculateNodeStyling(targetElement) {\n  var style = window.getComputedStyle(targetElement);\n\n  var boxSizing = style.getPropertyValue('box-sizing');\n\n  var paddingSize = parseFloat(style.getPropertyValue('padding-bottom')) + parseFloat(style.getPropertyValue('padding-top'));\n\n  var borderSize = parseFloat(style.getPropertyValue('border-bottom-width')) + parseFloat(style.getPropertyValue('border-top-width'));\n\n  var contextStyle = CONTEXT_STYLE.map(function (name) {\n    return name + ':' + style.getPropertyValue(name);\n  }).join(';');\n\n  return { contextStyle: contextStyle, paddingSize: paddingSize, borderSize: borderSize, boxSizing: boxSizing };\n}\n\nfunction calcTextareaHeight(targetElement) {\n  var minRows = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n  var maxRows = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n  if (!hiddenTextarea) {\n    hiddenTextarea = document.createElement('textarea');\n    document.body.appendChild(hiddenTextarea);\n  }\n\n  var _calculateNodeStyling = calculateNodeStyling(targetElement),\n      paddingSize = _calculateNodeStyling.paddingSize,\n      borderSize = _calculateNodeStyling.borderSize,\n      boxSizing = _calculateNodeStyling.boxSizing,\n      contextStyle = _calculateNodeStyling.contextStyle;\n\n  hiddenTextarea.setAttribute('style', contextStyle + ';' + HIDDEN_STYLE);\n  hiddenTextarea.value = targetElement.value || targetElement.placeholder || '';\n\n  var height = hiddenTextarea.scrollHeight;\n  var result = {};\n\n  if (boxSizing === 'border-box') {\n    height = height + borderSize;\n  } else if (boxSizing === 'content-box') {\n    height = height - paddingSize;\n  }\n\n  hiddenTextarea.value = '';\n  var singleRowHeight = hiddenTextarea.scrollHeight - paddingSize;\n\n  if (minRows !== null) {\n    var minHeight = singleRowHeight * minRows;\n    if (boxSizing === 'border-box') {\n      minHeight = minHeight + paddingSize + borderSize;\n    }\n    height = Math.max(minHeight, height);\n    result.minHeight = minHeight + 'px';\n  }\n  if (maxRows !== null) {\n    var maxHeight = singleRowHeight * maxRows;\n    if (boxSizing === 'border-box') {\n      maxHeight = maxHeight + paddingSize + borderSize;\n    }\n    height = Math.min(maxHeight, height);\n  }\n  result.height = height + 'px';\n  hiddenTextarea.parentNode && hiddenTextarea.parentNode.removeChild(hiddenTextarea);\n  hiddenTextarea = null;\n  return result;\n};\n// EXTERNAL MODULE: external \"element-ui/lib/utils/merge\"\nvar merge_ = __nested_webpack_require_8926__(7);\nvar merge_default = /*#__PURE__*/__nested_webpack_require_8926__.n(merge_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/shared\"\nvar shared_ = __nested_webpack_require_8926__(19);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/input/src/input.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n\n/* harmony default export */ var inputvue_type_script_lang_js_ = ({\n  name: 'ElInput',\n\n  componentName: 'ElInput',\n\n  mixins: [emitter_default.a, migrating_default.a],\n\n  inheritAttrs: false,\n\n  inject: {\n    elForm: {\n      default: ''\n    },\n    elFormItem: {\n      default: ''\n    }\n  },\n\n  data: function data() {\n    return {\n      textareaCalcStyle: {},\n      hovering: false,\n      focused: false,\n      isComposing: false,\n      passwordVisible: false\n    };\n  },\n\n\n  props: {\n    value: [String, Number],\n    size: String,\n    resize: String,\n    form: String,\n    disabled: Boolean,\n    readonly: Boolean,\n    type: {\n      type: String,\n      default: 'text'\n    },\n    autosize: {\n      type: [Boolean, Object],\n      default: false\n    },\n    autocomplete: {\n      type: String,\n      default: 'off'\n    },\n    /** @Deprecated in next major version */\n    autoComplete: {\n      type: String,\n      validator: function validator(val) {\n          false && 0;\n        return true;\n      }\n    },\n    validateEvent: {\n      type: Boolean,\n      default: true\n    },\n    suffixIcon: String,\n    prefixIcon: String,\n    label: String,\n    clearable: {\n      type: Boolean,\n      default: false\n    },\n    showPassword: {\n      type: Boolean,\n      default: false\n    },\n    showWordLimit: {\n      type: Boolean,\n      default: false\n    },\n    tabindex: String\n  },\n\n  computed: {\n    _elFormItemSize: function _elFormItemSize() {\n      return (this.elFormItem || {}).elFormItemSize;\n    },\n    validateState: function validateState() {\n      return this.elFormItem ? this.elFormItem.validateState : '';\n    },\n    needStatusIcon: function needStatusIcon() {\n      return this.elForm ? this.elForm.statusIcon : false;\n    },\n    validateIcon: function validateIcon() {\n      return {\n        validating: 'el-icon-loading',\n        success: 'el-icon-circle-check',\n        error: 'el-icon-circle-close'\n      }[this.validateState];\n    },\n    textareaStyle: function textareaStyle() {\n      return merge_default()({}, this.textareaCalcStyle, { resize: this.resize });\n    },\n    inputSize: function inputSize() {\n      return this.size || this._elFormItemSize || (this.$ELEMENT || {}).size;\n    },\n    inputDisabled: function inputDisabled() {\n      return this.disabled || (this.elForm || {}).disabled;\n    },\n    nativeInputValue: function nativeInputValue() {\n      return this.value === null || this.value === undefined ? '' : String(this.value);\n    },\n    showClear: function showClear() {\n      return this.clearable && !this.inputDisabled && !this.readonly && this.nativeInputValue && (this.focused || this.hovering);\n    },\n    showPwdVisible: function showPwdVisible() {\n      return this.showPassword && !this.inputDisabled && !this.readonly && (!!this.nativeInputValue || this.focused);\n    },\n    isWordLimitVisible: function isWordLimitVisible() {\n      return this.showWordLimit && this.$attrs.maxlength && (this.type === 'text' || this.type === 'textarea') && !this.inputDisabled && !this.readonly && !this.showPassword;\n    },\n    upperLimit: function upperLimit() {\n      return this.$attrs.maxlength;\n    },\n    textLength: function textLength() {\n      if (typeof this.value === 'number') {\n        return String(this.value).length;\n      }\n\n      return (this.value || '').length;\n    },\n    inputExceed: function inputExceed() {\n      // show exceed style if length of initial value greater then maxlength\n      return this.isWordLimitVisible && this.textLength > this.upperLimit;\n    }\n  },\n\n  watch: {\n    value: function value(val) {\n      this.$nextTick(this.resizeTextarea);\n      if (this.validateEvent) {\n        this.dispatch('ElFormItem', 'el.form.change', [val]);\n      }\n    },\n\n    // native input value is set explicitly\n    // do not use v-model / :value in template\n    // see: https://github.com/ElemeFE/element/issues/14521\n    nativeInputValue: function nativeInputValue() {\n      this.setNativeInputValue();\n    },\n\n    // when change between <input> and <textarea>,\n    // update DOM dependent value and styles\n    // https://github.com/ElemeFE/element/issues/14857\n    type: function type() {\n      var _this = this;\n\n      this.$nextTick(function () {\n        _this.setNativeInputValue();\n        _this.resizeTextarea();\n        _this.updateIconOffset();\n      });\n    }\n  },\n\n  methods: {\n    focus: function focus() {\n      this.getInput().focus();\n    },\n    blur: function blur() {\n      this.getInput().blur();\n    },\n    getMigratingConfig: function getMigratingConfig() {\n      return {\n        props: {\n          'icon': 'icon is removed, use suffix-icon / prefix-icon instead.',\n          'on-icon-click': 'on-icon-click is removed.'\n        },\n        events: {\n          'click': 'click is removed.'\n        }\n      };\n    },\n    handleBlur: function handleBlur(event) {\n      this.focused = false;\n      this.$emit('blur', event);\n      if (this.validateEvent) {\n        this.dispatch('ElFormItem', 'el.form.blur', [this.value]);\n      }\n    },\n    select: function select() {\n      this.getInput().select();\n    },\n    resizeTextarea: function resizeTextarea() {\n      if (this.$isServer) return;\n      var autosize = this.autosize,\n          type = this.type;\n\n      if (type !== 'textarea') return;\n      if (!autosize) {\n        this.textareaCalcStyle = {\n          minHeight: calcTextareaHeight(this.$refs.textarea).minHeight\n        };\n        return;\n      }\n      var minRows = autosize.minRows;\n      var maxRows = autosize.maxRows;\n\n      this.textareaCalcStyle = calcTextareaHeight(this.$refs.textarea, minRows, maxRows);\n    },\n    setNativeInputValue: function setNativeInputValue() {\n      var input = this.getInput();\n      if (!input) return;\n      if (input.value === this.nativeInputValue) return;\n      input.value = this.nativeInputValue;\n    },\n    handleFocus: function handleFocus(event) {\n      this.focused = true;\n      this.$emit('focus', event);\n    },\n    handleCompositionStart: function handleCompositionStart(event) {\n      this.$emit('compositionstart', event);\n      this.isComposing = true;\n    },\n    handleCompositionUpdate: function handleCompositionUpdate(event) {\n      this.$emit('compositionupdate', event);\n      var text = event.target.value;\n      var lastCharacter = text[text.length - 1] || '';\n      this.isComposing = !Object(shared_[\"isKorean\"])(lastCharacter);\n    },\n    handleCompositionEnd: function handleCompositionEnd(event) {\n      this.$emit('compositionend', event);\n      if (this.isComposing) {\n        this.isComposing = false;\n        this.handleInput(event);\n      }\n    },\n    handleInput: function handleInput(event) {\n      // should not emit input during composition\n      // see: https://github.com/ElemeFE/element/issues/10516\n      if (this.isComposing) return;\n\n      // hack for https://github.com/ElemeFE/element/issues/8548\n      // should remove the following line when we don't support IE\n      if (event.target.value === this.nativeInputValue) return;\n\n      this.$emit('input', event.target.value);\n\n      // ensure native input value is controlled\n      // see: https://github.com/ElemeFE/element/issues/12850\n      this.$nextTick(this.setNativeInputValue);\n    },\n    handleChange: function handleChange(event) {\n      this.$emit('change', event.target.value);\n    },\n    calcIconOffset: function calcIconOffset(place) {\n      var elList = [].slice.call(this.$el.querySelectorAll('.el-input__' + place) || []);\n      if (!elList.length) return;\n      var el = null;\n      for (var i = 0; i < elList.length; i++) {\n        if (elList[i].parentNode === this.$el) {\n          el = elList[i];\n          break;\n        }\n      }\n      if (!el) return;\n      var pendantMap = {\n        suffix: 'append',\n        prefix: 'prepend'\n      };\n\n      var pendant = pendantMap[place];\n      if (this.$slots[pendant]) {\n        el.style.transform = 'translateX(' + (place === 'suffix' ? '-' : '') + this.$el.querySelector('.el-input-group__' + pendant).offsetWidth + 'px)';\n      } else {\n        el.removeAttribute('style');\n      }\n    },\n    updateIconOffset: function updateIconOffset() {\n      this.calcIconOffset('prefix');\n      this.calcIconOffset('suffix');\n    },\n    clear: function clear() {\n      this.$emit('input', '');\n      this.$emit('change', '');\n      this.$emit('clear');\n    },\n    handlePasswordVisible: function handlePasswordVisible() {\n      var _this2 = this;\n\n      this.passwordVisible = !this.passwordVisible;\n      this.$nextTick(function () {\n        _this2.focus();\n      });\n    },\n    getInput: function getInput() {\n      return this.$refs.input || this.$refs.textarea;\n    },\n    getSuffixVisible: function getSuffixVisible() {\n      return this.$slots.suffix || this.suffixIcon || this.showClear || this.showPassword || this.isWordLimitVisible || this.validateState && this.needStatusIcon;\n    }\n  },\n\n  created: function created() {\n    this.$on('inputSelect', this.select);\n  },\n  mounted: function mounted() {\n    this.setNativeInputValue();\n    this.resizeTextarea();\n    this.updateIconOffset();\n  },\n  updated: function updated() {\n    this.$nextTick(this.updateIconOffset);\n  }\n});\n// CONCATENATED MODULE: ./packages/input/src/input.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_inputvue_type_script_lang_js_ = (inputvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/input/src/input.vue\n\n\n\n\n\n/* normalize component */\n\nvar input_component = normalizeComponent(\n  src_inputvue_type_script_lang_js_,\n  inputvue_type_template_id_343dd774_render,\n  inputvue_type_template_id_343dd774_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var input_api; }\ninput_component.options.__file = \"packages/input/src/input.vue\"\n/* harmony default export */ var src_input = (input_component.exports);\n// CONCATENATED MODULE: ./packages/input/index.js\n\n\n/* istanbul ignore next */\nsrc_input.install = function (Vue) {\n  Vue.component(src_input.name, src_input);\n};\n\n/* harmony default export */ var packages_input = (src_input);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/input-number/src/input-number.vue?vue&type=template&id=42f8cf66&\nvar input_numbervue_type_template_id_42f8cf66_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    {\n      class: [\n        \"el-input-number\",\n        _vm.inputNumberSize ? \"el-input-number--\" + _vm.inputNumberSize : \"\",\n        { \"is-disabled\": _vm.inputNumberDisabled },\n        { \"is-without-controls\": !_vm.controls },\n        { \"is-controls-right\": _vm.controlsAtRight }\n      ],\n      on: {\n        dragstart: function($event) {\n          $event.preventDefault()\n        }\n      }\n    },\n    [\n      _vm.controls\n        ? _c(\n            \"span\",\n            {\n              directives: [\n                {\n                  name: \"repeat-click\",\n                  rawName: \"v-repeat-click\",\n                  value: _vm.decrease,\n                  expression: \"decrease\"\n                }\n              ],\n              staticClass: \"el-input-number__decrease\",\n              class: { \"is-disabled\": _vm.minDisabled },\n              attrs: { role: \"button\" },\n              on: {\n                keydown: function($event) {\n                  if (\n                    !(\"button\" in $event) &&\n                    _vm._k($event.keyCode, \"enter\", 13, $event.key, \"Enter\")\n                  ) {\n                    return null\n                  }\n                  return _vm.decrease($event)\n                }\n              }\n            },\n            [\n              _c(\"i\", {\n                class:\n                  \"el-icon-\" + (_vm.controlsAtRight ? \"arrow-down\" : \"minus\")\n              })\n            ]\n          )\n        : _vm._e(),\n      _vm.controls\n        ? _c(\n            \"span\",\n            {\n              directives: [\n                {\n                  name: \"repeat-click\",\n                  rawName: \"v-repeat-click\",\n                  value: _vm.increase,\n                  expression: \"increase\"\n                }\n              ],\n              staticClass: \"el-input-number__increase\",\n              class: { \"is-disabled\": _vm.maxDisabled },\n              attrs: { role: \"button\" },\n              on: {\n                keydown: function($event) {\n                  if (\n                    !(\"button\" in $event) &&\n                    _vm._k($event.keyCode, \"enter\", 13, $event.key, \"Enter\")\n                  ) {\n                    return null\n                  }\n                  return _vm.increase($event)\n                }\n              }\n            },\n            [\n              _c(\"i\", {\n                class: \"el-icon-\" + (_vm.controlsAtRight ? \"arrow-up\" : \"plus\")\n              })\n            ]\n          )\n        : _vm._e(),\n      _c(\"el-input\", {\n        ref: \"input\",\n        attrs: {\n          value: _vm.displayValue,\n          placeholder: _vm.placeholder,\n          disabled: _vm.inputNumberDisabled,\n          size: _vm.inputNumberSize,\n          max: _vm.max,\n          min: _vm.min,\n          name: _vm.name,\n          label: _vm.label\n        },\n        on: {\n          blur: _vm.handleBlur,\n          focus: _vm.handleFocus,\n          input: _vm.handleInput,\n          change: _vm.handleInputChange\n        },\n        nativeOn: {\n          keydown: [\n            function($event) {\n              if (\n                !(\"button\" in $event) &&\n                _vm._k($event.keyCode, \"up\", 38, $event.key, [\"Up\", \"ArrowUp\"])\n              ) {\n                return null\n              }\n              $event.preventDefault()\n              return _vm.increase($event)\n            },\n            function($event) {\n              if (\n                !(\"button\" in $event) &&\n                _vm._k($event.keyCode, \"down\", 40, $event.key, [\n                  \"Down\",\n                  \"ArrowDown\"\n                ])\n              ) {\n                return null\n              }\n              $event.preventDefault()\n              return _vm.decrease($event)\n            }\n          ]\n        }\n      })\n    ],\n    1\n  )\n}\nvar input_numbervue_type_template_id_42f8cf66_staticRenderFns = []\ninput_numbervue_type_template_id_42f8cf66_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/input-number/src/input-number.vue?vue&type=template&id=42f8cf66&\n\n// CONCATENATED MODULE: ./src/directives/repeat-click.js\n\n\n\n/* harmony default export */ var repeat_click = ({\n  bind: function bind(el, binding, vnode) {\n    var interval = null;\n    var startTime = void 0;\n    var maxIntervals = Object(util_[\"isMac\"])() ? 100 : 200;\n    var handler = function handler() {\n      return vnode.context[binding.expression].apply();\n    };\n    var clear = function clear() {\n      if (Date.now() - startTime < maxIntervals) {\n        handler();\n      }\n      clearInterval(interval);\n      interval = null;\n    };\n\n    Object(dom_[\"on\"])(el, 'mousedown', function (e) {\n      if (e.button !== 0) return;\n      startTime = Date.now();\n      Object(dom_[\"once\"])(document, 'mouseup', clear);\n      clearInterval(interval);\n      interval = setInterval(handler, maxIntervals);\n    });\n  }\n});\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/input-number/src/input-number.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n/* harmony default export */ var input_numbervue_type_script_lang_js_ = ({\n  name: 'ElInputNumber',\n  mixins: [focus_default()('input')],\n  inject: {\n    elForm: {\n      default: ''\n    },\n    elFormItem: {\n      default: ''\n    }\n  },\n  directives: {\n    repeatClick: repeat_click\n  },\n  components: {\n    ElInput: input_default.a\n  },\n  props: {\n    step: {\n      type: Number,\n      default: 1\n    },\n    stepStrictly: {\n      type: Boolean,\n      default: false\n    },\n    max: {\n      type: Number,\n      default: Infinity\n    },\n    min: {\n      type: Number,\n      default: -Infinity\n    },\n    value: {},\n    disabled: Boolean,\n    size: String,\n    controls: {\n      type: Boolean,\n      default: true\n    },\n    controlsPosition: {\n      type: String,\n      default: ''\n    },\n    name: String,\n    label: String,\n    placeholder: String,\n    precision: {\n      type: Number,\n      validator: function validator(val) {\n        return val >= 0 && val === parseInt(val, 10);\n      }\n    }\n  },\n  data: function data() {\n    return {\n      currentValue: 0,\n      userInput: null\n    };\n  },\n\n  watch: {\n    value: {\n      immediate: true,\n      handler: function handler(value) {\n        var newVal = value === undefined ? value : Number(value);\n        if (newVal !== undefined) {\n          if (isNaN(newVal)) {\n            return;\n          }\n\n          if (this.stepStrictly) {\n            var stepPrecision = this.getPrecision(this.step);\n            var precisionFactor = Math.pow(10, stepPrecision);\n            newVal = Math.round(newVal / this.step) * precisionFactor * this.step / precisionFactor;\n          }\n\n          if (this.precision !== undefined) {\n            newVal = this.toPrecision(newVal, this.precision);\n          }\n        }\n        if (newVal >= this.max) newVal = this.max;\n        if (newVal <= this.min) newVal = this.min;\n        this.currentValue = newVal;\n        this.userInput = null;\n        this.$emit('input', newVal);\n      }\n    }\n  },\n  computed: {\n    minDisabled: function minDisabled() {\n      return this._decrease(this.value, this.step) < this.min;\n    },\n    maxDisabled: function maxDisabled() {\n      return this._increase(this.value, this.step) > this.max;\n    },\n    numPrecision: function numPrecision() {\n      var value = this.value,\n          step = this.step,\n          getPrecision = this.getPrecision,\n          precision = this.precision;\n\n      var stepPrecision = getPrecision(step);\n      if (precision !== undefined) {\n        if (stepPrecision > precision) {\n          console.warn('[Element Warn][InputNumber]precision should not be less than the decimal places of step');\n        }\n        return precision;\n      } else {\n        return Math.max(getPrecision(value), stepPrecision);\n      }\n    },\n    controlsAtRight: function controlsAtRight() {\n      return this.controls && this.controlsPosition === 'right';\n    },\n    _elFormItemSize: function _elFormItemSize() {\n      return (this.elFormItem || {}).elFormItemSize;\n    },\n    inputNumberSize: function inputNumberSize() {\n      return this.size || this._elFormItemSize || (this.$ELEMENT || {}).size;\n    },\n    inputNumberDisabled: function inputNumberDisabled() {\n      return this.disabled || !!(this.elForm || {}).disabled;\n    },\n    displayValue: function displayValue() {\n      if (this.userInput !== null) {\n        return this.userInput;\n      }\n\n      var currentValue = this.currentValue;\n\n      if (typeof currentValue === 'number') {\n        if (this.stepStrictly) {\n          var stepPrecision = this.getPrecision(this.step);\n          var precisionFactor = Math.pow(10, stepPrecision);\n          currentValue = Math.round(currentValue / this.step) * precisionFactor * this.step / precisionFactor;\n        }\n\n        if (this.precision !== undefined) {\n          currentValue = currentValue.toFixed(this.precision);\n        }\n      }\n\n      return currentValue;\n    }\n  },\n  methods: {\n    toPrecision: function toPrecision(num, precision) {\n      if (precision === undefined) precision = this.numPrecision;\n      return parseFloat(Math.round(num * Math.pow(10, precision)) / Math.pow(10, precision));\n    },\n    getPrecision: function getPrecision(value) {\n      if (value === undefined) return 0;\n      var valueString = value.toString();\n      var dotPosition = valueString.indexOf('.');\n      var precision = 0;\n      if (dotPosition !== -1) {\n        precision = valueString.length - dotPosition - 1;\n      }\n      return precision;\n    },\n    _increase: function _increase(val, step) {\n      if (typeof val !== 'number' && val !== undefined) return this.currentValue;\n\n      var precisionFactor = Math.pow(10, this.numPrecision);\n      // Solve the accuracy problem of JS decimal calculation by converting the value to integer.\n      return this.toPrecision((precisionFactor * val + precisionFactor * step) / precisionFactor);\n    },\n    _decrease: function _decrease(val, step) {\n      if (typeof val !== 'number' && val !== undefined) return this.currentValue;\n\n      var precisionFactor = Math.pow(10, this.numPrecision);\n\n      return this.toPrecision((precisionFactor * val - precisionFactor * step) / precisionFactor);\n    },\n    increase: function increase() {\n      if (this.inputNumberDisabled || this.maxDisabled) return;\n      var value = this.value || 0;\n      var newVal = this._increase(value, this.step);\n      this.setCurrentValue(newVal);\n    },\n    decrease: function decrease() {\n      if (this.inputNumberDisabled || this.minDisabled) return;\n      var value = this.value || 0;\n      var newVal = this._decrease(value, this.step);\n      this.setCurrentValue(newVal);\n    },\n    handleBlur: function handleBlur(event) {\n      this.$emit('blur', event);\n    },\n    handleFocus: function handleFocus(event) {\n      this.$emit('focus', event);\n    },\n    setCurrentValue: function setCurrentValue(newVal) {\n      var oldVal = this.currentValue;\n      if (typeof newVal === 'number' && this.precision !== undefined) {\n        newVal = this.toPrecision(newVal, this.precision);\n      }\n      if (newVal >= this.max) newVal = this.max;\n      if (newVal <= this.min) newVal = this.min;\n      if (oldVal === newVal) return;\n      this.userInput = null;\n      this.$emit('input', newVal);\n      this.$emit('change', newVal, oldVal);\n      this.currentValue = newVal;\n    },\n    handleInput: function handleInput(value) {\n      this.userInput = value;\n    },\n    handleInputChange: function handleInputChange(value) {\n      var newVal = value === '' ? undefined : Number(value);\n      if (!isNaN(newVal) || value === '') {\n        this.setCurrentValue(newVal);\n      }\n      this.userInput = null;\n    },\n    select: function select() {\n      this.$refs.input.select();\n    }\n  },\n  mounted: function mounted() {\n    var innerInput = this.$refs.input.$refs.input;\n    innerInput.setAttribute('role', 'spinbutton');\n    innerInput.setAttribute('aria-valuemax', this.max);\n    innerInput.setAttribute('aria-valuemin', this.min);\n    innerInput.setAttribute('aria-valuenow', this.currentValue);\n    innerInput.setAttribute('aria-disabled', this.inputNumberDisabled);\n  },\n  updated: function updated() {\n    if (!this.$refs || !this.$refs.input) return;\n    var innerInput = this.$refs.input.$refs.input;\n    innerInput.setAttribute('aria-valuenow', this.currentValue);\n  }\n});\n// CONCATENATED MODULE: ./packages/input-number/src/input-number.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_input_numbervue_type_script_lang_js_ = (input_numbervue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/input-number/src/input-number.vue\n\n\n\n\n\n/* normalize component */\n\nvar input_number_component = normalizeComponent(\n  src_input_numbervue_type_script_lang_js_,\n  input_numbervue_type_template_id_42f8cf66_render,\n  input_numbervue_type_template_id_42f8cf66_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var input_number_api; }\ninput_number_component.options.__file = \"packages/input-number/src/input-number.vue\"\n/* harmony default export */ var input_number = (input_number_component.exports);\n// CONCATENATED MODULE: ./packages/input-number/index.js\n\n\n/* istanbul ignore next */\ninput_number.install = function (Vue) {\n  Vue.component(input_number.name, input_number);\n};\n\n/* harmony default export */ var packages_input_number = (input_number);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/radio/src/radio.vue?vue&type=template&id=69cd6268&\nvar radiovue_type_template_id_69cd6268_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"label\",\n    {\n      staticClass: \"el-radio\",\n      class: [\n        _vm.border && _vm.radioSize ? \"el-radio--\" + _vm.radioSize : \"\",\n        { \"is-disabled\": _vm.isDisabled },\n        { \"is-focus\": _vm.focus },\n        { \"is-bordered\": _vm.border },\n        { \"is-checked\": _vm.model === _vm.label }\n      ],\n      attrs: {\n        role: \"radio\",\n        \"aria-checked\": _vm.model === _vm.label,\n        \"aria-disabled\": _vm.isDisabled,\n        tabindex: _vm.tabIndex\n      },\n      on: {\n        keydown: function($event) {\n          if (\n            !(\"button\" in $event) &&\n            _vm._k($event.keyCode, \"space\", 32, $event.key, [\" \", \"Spacebar\"])\n          ) {\n            return null\n          }\n          $event.stopPropagation()\n          $event.preventDefault()\n          _vm.model = _vm.isDisabled ? _vm.model : _vm.label\n        }\n      }\n    },\n    [\n      _c(\n        \"span\",\n        {\n          staticClass: \"el-radio__input\",\n          class: {\n            \"is-disabled\": _vm.isDisabled,\n            \"is-checked\": _vm.model === _vm.label\n          }\n        },\n        [\n          _c(\"span\", { staticClass: \"el-radio__inner\" }),\n          _c(\"input\", {\n            directives: [\n              {\n                name: \"model\",\n                rawName: \"v-model\",\n                value: _vm.model,\n                expression: \"model\"\n              }\n            ],\n            ref: \"radio\",\n            staticClass: \"el-radio__original\",\n            attrs: {\n              type: \"radio\",\n              \"aria-hidden\": \"true\",\n              name: _vm.name,\n              disabled: _vm.isDisabled,\n              tabindex: \"-1\",\n              autocomplete: \"off\"\n            },\n            domProps: {\n              value: _vm.label,\n              checked: _vm._q(_vm.model, _vm.label)\n            },\n            on: {\n              focus: function($event) {\n                _vm.focus = true\n              },\n              blur: function($event) {\n                _vm.focus = false\n              },\n              change: [\n                function($event) {\n                  _vm.model = _vm.label\n                },\n                _vm.handleChange\n              ]\n            }\n          })\n        ]\n      ),\n      _c(\n        \"span\",\n        {\n          staticClass: \"el-radio__label\",\n          on: {\n            keydown: function($event) {\n              $event.stopPropagation()\n            }\n          }\n        },\n        [\n          _vm._t(\"default\"),\n          !_vm.$slots.default ? [_vm._v(_vm._s(_vm.label))] : _vm._e()\n        ],\n        2\n      )\n    ]\n  )\n}\nvar radiovue_type_template_id_69cd6268_staticRenderFns = []\nradiovue_type_template_id_69cd6268_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/radio/src/radio.vue?vue&type=template&id=69cd6268&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/radio/src/radio.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n/* harmony default export */ var radiovue_type_script_lang_js_ = ({\n  name: 'ElRadio',\n\n  mixins: [emitter_default.a],\n\n  inject: {\n    elForm: {\n      default: ''\n    },\n\n    elFormItem: {\n      default: ''\n    }\n  },\n\n  componentName: 'ElRadio',\n\n  props: {\n    value: {},\n    label: {},\n    disabled: Boolean,\n    name: String,\n    border: Boolean,\n    size: String\n  },\n\n  data: function data() {\n    return {\n      focus: false\n    };\n  },\n\n  computed: {\n    isGroup: function isGroup() {\n      var parent = this.$parent;\n      while (parent) {\n        if (parent.$options.componentName !== 'ElRadioGroup') {\n          parent = parent.$parent;\n        } else {\n          this._radioGroup = parent;\n          return true;\n        }\n      }\n      return false;\n    },\n\n    model: {\n      get: function get() {\n        return this.isGroup ? this._radioGroup.value : this.value;\n      },\n      set: function set(val) {\n        if (this.isGroup) {\n          this.dispatch('ElRadioGroup', 'input', [val]);\n        } else {\n          this.$emit('input', val);\n        }\n        this.$refs.radio && (this.$refs.radio.checked = this.model === this.label);\n      }\n    },\n    _elFormItemSize: function _elFormItemSize() {\n      return (this.elFormItem || {}).elFormItemSize;\n    },\n    radioSize: function radioSize() {\n      var temRadioSize = this.size || this._elFormItemSize || (this.$ELEMENT || {}).size;\n      return this.isGroup ? this._radioGroup.radioGroupSize || temRadioSize : temRadioSize;\n    },\n    isDisabled: function isDisabled() {\n      return this.isGroup ? this._radioGroup.disabled || this.disabled || (this.elForm || {}).disabled : this.disabled || (this.elForm || {}).disabled;\n    },\n    tabIndex: function tabIndex() {\n      return this.isDisabled || this.isGroup && this.model !== this.label ? -1 : 0;\n    }\n  },\n\n  methods: {\n    handleChange: function handleChange() {\n      var _this = this;\n\n      this.$nextTick(function () {\n        _this.$emit('change', _this.model);\n        _this.isGroup && _this.dispatch('ElRadioGroup', 'handleChange', _this.model);\n      });\n    }\n  }\n});\n// CONCATENATED MODULE: ./packages/radio/src/radio.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_radiovue_type_script_lang_js_ = (radiovue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/radio/src/radio.vue\n\n\n\n\n\n/* normalize component */\n\nvar radio_component = normalizeComponent(\n  src_radiovue_type_script_lang_js_,\n  radiovue_type_template_id_69cd6268_render,\n  radiovue_type_template_id_69cd6268_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var radio_api; }\nradio_component.options.__file = \"packages/radio/src/radio.vue\"\n/* harmony default export */ var src_radio = (radio_component.exports);\n// CONCATENATED MODULE: ./packages/radio/index.js\n\n\n/* istanbul ignore next */\nsrc_radio.install = function (Vue) {\n  Vue.component(src_radio.name, src_radio);\n};\n\n/* harmony default export */ var packages_radio = (src_radio);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/radio/src/radio-group.vue?vue&type=template&id=818a704c&\nvar radio_groupvue_type_template_id_818a704c_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    _vm._elTag,\n    {\n      tag: \"component\",\n      staticClass: \"el-radio-group\",\n      attrs: { role: \"radiogroup\" },\n      on: { keydown: _vm.handleKeydown }\n    },\n    [_vm._t(\"default\")],\n    2\n  )\n}\nvar radio_groupvue_type_template_id_818a704c_staticRenderFns = []\nradio_groupvue_type_template_id_818a704c_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/radio/src/radio-group.vue?vue&type=template&id=818a704c&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/radio/src/radio-group.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\nvar keyCode = Object.freeze({\n  LEFT: 37,\n  UP: 38,\n  RIGHT: 39,\n  DOWN: 40\n});\n/* harmony default export */ var radio_groupvue_type_script_lang_js_ = ({\n  name: 'ElRadioGroup',\n\n  componentName: 'ElRadioGroup',\n\n  inject: {\n    elFormItem: {\n      default: ''\n    }\n  },\n\n  mixins: [emitter_default.a],\n\n  props: {\n    value: {},\n    size: String,\n    fill: String,\n    textColor: String,\n    disabled: Boolean\n  },\n\n  computed: {\n    _elFormItemSize: function _elFormItemSize() {\n      return (this.elFormItem || {}).elFormItemSize;\n    },\n    _elTag: function _elTag() {\n      var tag = (this.$vnode.data || {}).tag;\n      if (!tag || tag === 'component') tag = 'div';\n      return tag;\n    },\n    radioGroupSize: function radioGroupSize() {\n      return this.size || this._elFormItemSize || (this.$ELEMENT || {}).size;\n    }\n  },\n\n  created: function created() {\n    var _this = this;\n\n    this.$on('handleChange', function (value) {\n      _this.$emit('change', value);\n    });\n  },\n  mounted: function mounted() {\n    // 当radioGroup没有默认选项时,第一个可以选中Tab导航\n    var radios = this.$el.querySelectorAll('[type=radio]');\n    var firstLabel = this.$el.querySelectorAll('[role=radio]')[0];\n    if (![].some.call(radios, function (radio) {\n      return radio.checked;\n    }) && firstLabel) {\n      firstLabel.tabIndex = 0;\n    }\n  },\n\n  methods: {\n    handleKeydown: function handleKeydown(e) {\n      // 左右上下按键 可以在radio组内切换不同选项\n      var target = e.target;\n      var className = target.nodeName === 'INPUT' ? '[type=radio]' : '[role=radio]';\n      var radios = this.$el.querySelectorAll(className);\n      var length = radios.length;\n      var index = [].indexOf.call(radios, target);\n      var roleRadios = this.$el.querySelectorAll('[role=radio]');\n      switch (e.keyCode) {\n        case keyCode.LEFT:\n        case keyCode.UP:\n          e.stopPropagation();\n          e.preventDefault();\n          if (index === 0) {\n            roleRadios[length - 1].click();\n            roleRadios[length - 1].focus();\n          } else {\n            roleRadios[index - 1].click();\n            roleRadios[index - 1].focus();\n          }\n          break;\n        case keyCode.RIGHT:\n        case keyCode.DOWN:\n          if (index === length - 1) {\n            e.stopPropagation();\n            e.preventDefault();\n            roleRadios[0].click();\n            roleRadios[0].focus();\n          } else {\n            roleRadios[index + 1].click();\n            roleRadios[index + 1].focus();\n          }\n          break;\n        default:\n          break;\n      }\n    }\n  },\n  watch: {\n    value: function value(_value) {\n      this.dispatch('ElFormItem', 'el.form.change', [this.value]);\n    }\n  }\n});\n// CONCATENATED MODULE: ./packages/radio/src/radio-group.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_radio_groupvue_type_script_lang_js_ = (radio_groupvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/radio/src/radio-group.vue\n\n\n\n\n\n/* normalize component */\n\nvar radio_group_component = normalizeComponent(\n  src_radio_groupvue_type_script_lang_js_,\n  radio_groupvue_type_template_id_818a704c_render,\n  radio_groupvue_type_template_id_818a704c_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var radio_group_api; }\nradio_group_component.options.__file = \"packages/radio/src/radio-group.vue\"\n/* harmony default export */ var radio_group = (radio_group_component.exports);\n// CONCATENATED MODULE: ./packages/radio-group/index.js\n\n\n/* istanbul ignore next */\nradio_group.install = function (Vue) {\n  Vue.component(radio_group.name, radio_group);\n};\n\n/* harmony default export */ var packages_radio_group = (radio_group);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/radio/src/radio-button.vue?vue&type=template&id=18a77a32&\nvar radio_buttonvue_type_template_id_18a77a32_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"label\",\n    {\n      staticClass: \"el-radio-button\",\n      class: [\n        _vm.size ? \"el-radio-button--\" + _vm.size : \"\",\n        { \"is-active\": _vm.value === _vm.label },\n        { \"is-disabled\": _vm.isDisabled },\n        { \"is-focus\": _vm.focus }\n      ],\n      attrs: {\n        role: \"radio\",\n        \"aria-checked\": _vm.value === _vm.label,\n        \"aria-disabled\": _vm.isDisabled,\n        tabindex: _vm.tabIndex\n      },\n      on: {\n        keydown: function($event) {\n          if (\n            !(\"button\" in $event) &&\n            _vm._k($event.keyCode, \"space\", 32, $event.key, [\" \", \"Spacebar\"])\n          ) {\n            return null\n          }\n          $event.stopPropagation()\n          $event.preventDefault()\n          _vm.value = _vm.isDisabled ? _vm.value : _vm.label\n        }\n      }\n    },\n    [\n      _c(\"input\", {\n        directives: [\n          {\n            name: \"model\",\n            rawName: \"v-model\",\n            value: _vm.value,\n            expression: \"value\"\n          }\n        ],\n        staticClass: \"el-radio-button__orig-radio\",\n        attrs: {\n          type: \"radio\",\n          name: _vm.name,\n          disabled: _vm.isDisabled,\n          tabindex: \"-1\",\n          autocomplete: \"off\"\n        },\n        domProps: { value: _vm.label, checked: _vm._q(_vm.value, _vm.label) },\n        on: {\n          change: [\n            function($event) {\n              _vm.value = _vm.label\n            },\n            _vm.handleChange\n          ],\n          focus: function($event) {\n            _vm.focus = true\n          },\n          blur: function($event) {\n            _vm.focus = false\n          }\n        }\n      }),\n      _c(\n        \"span\",\n        {\n          staticClass: \"el-radio-button__inner\",\n          style: _vm.value === _vm.label ? _vm.activeStyle : null,\n          on: {\n            keydown: function($event) {\n              $event.stopPropagation()\n            }\n          }\n        },\n        [\n          _vm._t(\"default\"),\n          !_vm.$slots.default ? [_vm._v(_vm._s(_vm.label))] : _vm._e()\n        ],\n        2\n      )\n    ]\n  )\n}\nvar radio_buttonvue_type_template_id_18a77a32_staticRenderFns = []\nradio_buttonvue_type_template_id_18a77a32_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/radio/src/radio-button.vue?vue&type=template&id=18a77a32&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/radio/src/radio-button.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n/* harmony default export */ var radio_buttonvue_type_script_lang_js_ = ({\n  name: 'ElRadioButton',\n\n  mixins: [emitter_default.a],\n\n  inject: {\n    elForm: {\n      default: ''\n    },\n    elFormItem: {\n      default: ''\n    }\n  },\n\n  props: {\n    label: {},\n    disabled: Boolean,\n    name: String\n  },\n  data: function data() {\n    return {\n      focus: false\n    };\n  },\n\n  computed: {\n    value: {\n      get: function get() {\n        return this._radioGroup.value;\n      },\n      set: function set(value) {\n        this._radioGroup.$emit('input', value);\n      }\n    },\n    _radioGroup: function _radioGroup() {\n      var parent = this.$parent;\n      while (parent) {\n        if (parent.$options.componentName !== 'ElRadioGroup') {\n          parent = parent.$parent;\n        } else {\n          return parent;\n        }\n      }\n      return false;\n    },\n    activeStyle: function activeStyle() {\n      return {\n        backgroundColor: this._radioGroup.fill || '',\n        borderColor: this._radioGroup.fill || '',\n        boxShadow: this._radioGroup.fill ? '-1px 0 0 0 ' + this._radioGroup.fill : '',\n        color: this._radioGroup.textColor || ''\n      };\n    },\n    _elFormItemSize: function _elFormItemSize() {\n      return (this.elFormItem || {}).elFormItemSize;\n    },\n    size: function size() {\n      return this._radioGroup.radioGroupSize || this._elFormItemSize || (this.$ELEMENT || {}).size;\n    },\n    isDisabled: function isDisabled() {\n      return this.disabled || this._radioGroup.disabled || (this.elForm || {}).disabled;\n    },\n    tabIndex: function tabIndex() {\n      return this.isDisabled || this._radioGroup && this.value !== this.label ? -1 : 0;\n    }\n  },\n\n  methods: {\n    handleChange: function handleChange() {\n      var _this = this;\n\n      this.$nextTick(function () {\n        _this.dispatch('ElRadioGroup', 'handleChange', _this.value);\n      });\n    }\n  }\n});\n// CONCATENATED MODULE: ./packages/radio/src/radio-button.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_radio_buttonvue_type_script_lang_js_ = (radio_buttonvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/radio/src/radio-button.vue\n\n\n\n\n\n/* normalize component */\n\nvar radio_button_component = normalizeComponent(\n  src_radio_buttonvue_type_script_lang_js_,\n  radio_buttonvue_type_template_id_18a77a32_render,\n  radio_buttonvue_type_template_id_18a77a32_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var radio_button_api; }\nradio_button_component.options.__file = \"packages/radio/src/radio-button.vue\"\n/* harmony default export */ var radio_button = (radio_button_component.exports);\n// CONCATENATED MODULE: ./packages/radio-button/index.js\n\n\n/* istanbul ignore next */\nradio_button.install = function (Vue) {\n  Vue.component(radio_button.name, radio_button);\n};\n\n/* harmony default export */ var packages_radio_button = (radio_button);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/checkbox/src/checkbox.vue?vue&type=template&id=d0387074&\nvar checkboxvue_type_template_id_d0387074_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"label\",\n    {\n      staticClass: \"el-checkbox\",\n      class: [\n        _vm.border && _vm.checkboxSize\n          ? \"el-checkbox--\" + _vm.checkboxSize\n          : \"\",\n        { \"is-disabled\": _vm.isDisabled },\n        { \"is-bordered\": _vm.border },\n        { \"is-checked\": _vm.isChecked }\n      ],\n      attrs: { id: _vm.id }\n    },\n    [\n      _c(\n        \"span\",\n        {\n          staticClass: \"el-checkbox__input\",\n          class: {\n            \"is-disabled\": _vm.isDisabled,\n            \"is-checked\": _vm.isChecked,\n            \"is-indeterminate\": _vm.indeterminate,\n            \"is-focus\": _vm.focus\n          },\n          attrs: {\n            tabindex: _vm.indeterminate ? 0 : false,\n            role: _vm.indeterminate ? \"checkbox\" : false,\n            \"aria-checked\": _vm.indeterminate ? \"mixed\" : false\n          }\n        },\n        [\n          _c(\"span\", { staticClass: \"el-checkbox__inner\" }),\n          _vm.trueLabel || _vm.falseLabel\n            ? _c(\"input\", {\n                directives: [\n                  {\n                    name: \"model\",\n                    rawName: \"v-model\",\n                    value: _vm.model,\n                    expression: \"model\"\n                  }\n                ],\n                staticClass: \"el-checkbox__original\",\n                attrs: {\n                  type: \"checkbox\",\n                  \"aria-hidden\": _vm.indeterminate ? \"true\" : \"false\",\n                  name: _vm.name,\n                  disabled: _vm.isDisabled,\n                  \"true-value\": _vm.trueLabel,\n                  \"false-value\": _vm.falseLabel\n                },\n                domProps: {\n                  checked: Array.isArray(_vm.model)\n                    ? _vm._i(_vm.model, null) > -1\n                    : _vm._q(_vm.model, _vm.trueLabel)\n                },\n                on: {\n                  change: [\n                    function($event) {\n                      var $$a = _vm.model,\n                        $$el = $event.target,\n                        $$c = $$el.checked ? _vm.trueLabel : _vm.falseLabel\n                      if (Array.isArray($$a)) {\n                        var $$v = null,\n                          $$i = _vm._i($$a, $$v)\n                        if ($$el.checked) {\n                          $$i < 0 && (_vm.model = $$a.concat([$$v]))\n                        } else {\n                          $$i > -1 &&\n                            (_vm.model = $$a\n                              .slice(0, $$i)\n                              .concat($$a.slice($$i + 1)))\n                        }\n                      } else {\n                        _vm.model = $$c\n                      }\n                    },\n                    _vm.handleChange\n                  ],\n                  focus: function($event) {\n                    _vm.focus = true\n                  },\n                  blur: function($event) {\n                    _vm.focus = false\n                  }\n                }\n              })\n            : _c(\"input\", {\n                directives: [\n                  {\n                    name: \"model\",\n                    rawName: \"v-model\",\n                    value: _vm.model,\n                    expression: \"model\"\n                  }\n                ],\n                staticClass: \"el-checkbox__original\",\n                attrs: {\n                  type: \"checkbox\",\n                  \"aria-hidden\": _vm.indeterminate ? \"true\" : \"false\",\n                  disabled: _vm.isDisabled,\n                  name: _vm.name\n                },\n                domProps: {\n                  value: _vm.label,\n                  checked: Array.isArray(_vm.model)\n                    ? _vm._i(_vm.model, _vm.label) > -1\n                    : _vm.model\n                },\n                on: {\n                  change: [\n                    function($event) {\n                      var $$a = _vm.model,\n                        $$el = $event.target,\n                        $$c = $$el.checked ? true : false\n                      if (Array.isArray($$a)) {\n                        var $$v = _vm.label,\n                          $$i = _vm._i($$a, $$v)\n                        if ($$el.checked) {\n                          $$i < 0 && (_vm.model = $$a.concat([$$v]))\n                        } else {\n                          $$i > -1 &&\n                            (_vm.model = $$a\n                              .slice(0, $$i)\n                              .concat($$a.slice($$i + 1)))\n                        }\n                      } else {\n                        _vm.model = $$c\n                      }\n                    },\n                    _vm.handleChange\n                  ],\n                  focus: function($event) {\n                    _vm.focus = true\n                  },\n                  blur: function($event) {\n                    _vm.focus = false\n                  }\n                }\n              })\n        ]\n      ),\n      _vm.$slots.default || _vm.label\n        ? _c(\n            \"span\",\n            { staticClass: \"el-checkbox__label\" },\n            [\n              _vm._t(\"default\"),\n              !_vm.$slots.default ? [_vm._v(_vm._s(_vm.label))] : _vm._e()\n            ],\n            2\n          )\n        : _vm._e()\n    ]\n  )\n}\nvar checkboxvue_type_template_id_d0387074_staticRenderFns = []\ncheckboxvue_type_template_id_d0387074_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/checkbox/src/checkbox.vue?vue&type=template&id=d0387074&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/checkbox/src/checkbox.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n/* harmony default export */ var checkboxvue_type_script_lang_js_ = ({\n  name: 'ElCheckbox',\n\n  mixins: [emitter_default.a],\n\n  inject: {\n    elForm: {\n      default: ''\n    },\n    elFormItem: {\n      default: ''\n    }\n  },\n\n  componentName: 'ElCheckbox',\n\n  data: function data() {\n    return {\n      selfModel: false,\n      focus: false,\n      isLimitExceeded: false\n    };\n  },\n\n\n  computed: {\n    model: {\n      get: function get() {\n        return this.isGroup ? this.store : this.value !== undefined ? this.value : this.selfModel;\n      },\n      set: function set(val) {\n        if (this.isGroup) {\n          this.isLimitExceeded = false;\n          this._checkboxGroup.min !== undefined && val.length < this._checkboxGroup.min && (this.isLimitExceeded = true);\n\n          this._checkboxGroup.max !== undefined && val.length > this._checkboxGroup.max && (this.isLimitExceeded = true);\n\n          this.isLimitExceeded === false && this.dispatch('ElCheckboxGroup', 'input', [val]);\n        } else {\n          this.$emit('input', val);\n          this.selfModel = val;\n        }\n      }\n    },\n\n    isChecked: function isChecked() {\n      if ({}.toString.call(this.model) === '[object Boolean]') {\n        return this.model;\n      } else if (Array.isArray(this.model)) {\n        return this.model.indexOf(this.label) > -1;\n      } else if (this.model !== null && this.model !== undefined) {\n        return this.model === this.trueLabel;\n      }\n    },\n    isGroup: function isGroup() {\n      var parent = this.$parent;\n      while (parent) {\n        if (parent.$options.componentName !== 'ElCheckboxGroup') {\n          parent = parent.$parent;\n        } else {\n          this._checkboxGroup = parent;\n          return true;\n        }\n      }\n      return false;\n    },\n    store: function store() {\n      return this._checkboxGroup ? this._checkboxGroup.value : this.value;\n    },\n\n\n    /* used to make the isDisabled judgment under max/min props */\n    isLimitDisabled: function isLimitDisabled() {\n      var _checkboxGroup = this._checkboxGroup,\n          max = _checkboxGroup.max,\n          min = _checkboxGroup.min;\n\n      return !!(max || min) && this.model.length >= max && !this.isChecked || this.model.length <= min && this.isChecked;\n    },\n    isDisabled: function isDisabled() {\n      return this.isGroup ? this._checkboxGroup.disabled || this.disabled || (this.elForm || {}).disabled || this.isLimitDisabled : this.disabled || (this.elForm || {}).disabled;\n    },\n    _elFormItemSize: function _elFormItemSize() {\n      return (this.elFormItem || {}).elFormItemSize;\n    },\n    checkboxSize: function checkboxSize() {\n      var temCheckboxSize = this.size || this._elFormItemSize || (this.$ELEMENT || {}).size;\n      return this.isGroup ? this._checkboxGroup.checkboxGroupSize || temCheckboxSize : temCheckboxSize;\n    }\n  },\n\n  props: {\n    value: {},\n    label: {},\n    indeterminate: Boolean,\n    disabled: Boolean,\n    checked: Boolean,\n    name: String,\n    trueLabel: [String, Number],\n    falseLabel: [String, Number],\n    id: String, /* 当indeterminate为真时,为controls提供相关连的checkbox的id,表明元素间的控制关系*/\n    controls: String, /* 当indeterminate为真时,为controls提供相关连的checkbox的id,表明元素间的控制关系*/\n    border: Boolean,\n    size: String\n  },\n\n  methods: {\n    addToStore: function addToStore() {\n      if (Array.isArray(this.model) && this.model.indexOf(this.label) === -1) {\n        this.model.push(this.label);\n      } else {\n        this.model = this.trueLabel || true;\n      }\n    },\n    handleChange: function handleChange(ev) {\n      var _this = this;\n\n      if (this.isLimitExceeded) return;\n      var value = void 0;\n      if (ev.target.checked) {\n        value = this.trueLabel === undefined ? true : this.trueLabel;\n      } else {\n        value = this.falseLabel === undefined ? false : this.falseLabel;\n      }\n      this.$emit('change', value, ev);\n      this.$nextTick(function () {\n        if (_this.isGroup) {\n          _this.dispatch('ElCheckboxGroup', 'change', [_this._checkboxGroup.value]);\n        }\n      });\n    }\n  },\n\n  created: function created() {\n    this.checked && this.addToStore();\n  },\n  mounted: function mounted() {\n    // 为indeterminate元素 添加aria-controls 属性\n    if (this.indeterminate) {\n      this.$el.setAttribute('aria-controls', this.controls);\n    }\n  },\n\n\n  watch: {\n    value: function value(_value) {\n      this.dispatch('ElFormItem', 'el.form.change', _value);\n    }\n  }\n});\n// CONCATENATED MODULE: ./packages/checkbox/src/checkbox.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_checkboxvue_type_script_lang_js_ = (checkboxvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/checkbox/src/checkbox.vue\n\n\n\n\n\n/* normalize component */\n\nvar checkbox_component = normalizeComponent(\n  src_checkboxvue_type_script_lang_js_,\n  checkboxvue_type_template_id_d0387074_render,\n  checkboxvue_type_template_id_d0387074_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var checkbox_api; }\ncheckbox_component.options.__file = \"packages/checkbox/src/checkbox.vue\"\n/* harmony default export */ var src_checkbox = (checkbox_component.exports);\n// CONCATENATED MODULE: ./packages/checkbox/index.js\n\n\n/* istanbul ignore next */\nsrc_checkbox.install = function (Vue) {\n  Vue.component(src_checkbox.name, src_checkbox);\n};\n\n/* harmony default export */ var packages_checkbox = (src_checkbox);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/checkbox/src/checkbox-button.vue?vue&type=template&id=478e906e&\nvar checkbox_buttonvue_type_template_id_478e906e_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"label\",\n    {\n      staticClass: \"el-checkbox-button\",\n      class: [\n        _vm.size ? \"el-checkbox-button--\" + _vm.size : \"\",\n        { \"is-disabled\": _vm.isDisabled },\n        { \"is-checked\": _vm.isChecked },\n        { \"is-focus\": _vm.focus }\n      ],\n      attrs: {\n        role: \"checkbox\",\n        \"aria-checked\": _vm.isChecked,\n        \"aria-disabled\": _vm.isDisabled\n      }\n    },\n    [\n      _vm.trueLabel || _vm.falseLabel\n        ? _c(\"input\", {\n            directives: [\n              {\n                name: \"model\",\n                rawName: \"v-model\",\n                value: _vm.model,\n                expression: \"model\"\n              }\n            ],\n            staticClass: \"el-checkbox-button__original\",\n            attrs: {\n              type: \"checkbox\",\n              name: _vm.name,\n              disabled: _vm.isDisabled,\n              \"true-value\": _vm.trueLabel,\n              \"false-value\": _vm.falseLabel\n            },\n            domProps: {\n              checked: Array.isArray(_vm.model)\n                ? _vm._i(_vm.model, null) > -1\n                : _vm._q(_vm.model, _vm.trueLabel)\n            },\n            on: {\n              change: [\n                function($event) {\n                  var $$a = _vm.model,\n                    $$el = $event.target,\n                    $$c = $$el.checked ? _vm.trueLabel : _vm.falseLabel\n                  if (Array.isArray($$a)) {\n                    var $$v = null,\n                      $$i = _vm._i($$a, $$v)\n                    if ($$el.checked) {\n                      $$i < 0 && (_vm.model = $$a.concat([$$v]))\n                    } else {\n                      $$i > -1 &&\n                        (_vm.model = $$a\n                          .slice(0, $$i)\n                          .concat($$a.slice($$i + 1)))\n                    }\n                  } else {\n                    _vm.model = $$c\n                  }\n                },\n                _vm.handleChange\n              ],\n              focus: function($event) {\n                _vm.focus = true\n              },\n              blur: function($event) {\n                _vm.focus = false\n              }\n            }\n          })\n        : _c(\"input\", {\n            directives: [\n              {\n                name: \"model\",\n                rawName: \"v-model\",\n                value: _vm.model,\n                expression: \"model\"\n              }\n            ],\n            staticClass: \"el-checkbox-button__original\",\n            attrs: {\n              type: \"checkbox\",\n              name: _vm.name,\n              disabled: _vm.isDisabled\n            },\n            domProps: {\n              value: _vm.label,\n              checked: Array.isArray(_vm.model)\n                ? _vm._i(_vm.model, _vm.label) > -1\n                : _vm.model\n            },\n            on: {\n              change: [\n                function($event) {\n                  var $$a = _vm.model,\n                    $$el = $event.target,\n                    $$c = $$el.checked ? true : false\n                  if (Array.isArray($$a)) {\n                    var $$v = _vm.label,\n                      $$i = _vm._i($$a, $$v)\n                    if ($$el.checked) {\n                      $$i < 0 && (_vm.model = $$a.concat([$$v]))\n                    } else {\n                      $$i > -1 &&\n                        (_vm.model = $$a\n                          .slice(0, $$i)\n                          .concat($$a.slice($$i + 1)))\n                    }\n                  } else {\n                    _vm.model = $$c\n                  }\n                },\n                _vm.handleChange\n              ],\n              focus: function($event) {\n                _vm.focus = true\n              },\n              blur: function($event) {\n                _vm.focus = false\n              }\n            }\n          }),\n      _vm.$slots.default || _vm.label\n        ? _c(\n            \"span\",\n            {\n              staticClass: \"el-checkbox-button__inner\",\n              style: _vm.isChecked ? _vm.activeStyle : null\n            },\n            [_vm._t(\"default\", [_vm._v(_vm._s(_vm.label))])],\n            2\n          )\n        : _vm._e()\n    ]\n  )\n}\nvar checkbox_buttonvue_type_template_id_478e906e_staticRenderFns = []\ncheckbox_buttonvue_type_template_id_478e906e_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/checkbox/src/checkbox-button.vue?vue&type=template&id=478e906e&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/checkbox/src/checkbox-button.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n/* harmony default export */ var checkbox_buttonvue_type_script_lang_js_ = ({\n  name: 'ElCheckboxButton',\n\n  mixins: [emitter_default.a],\n\n  inject: {\n    elForm: {\n      default: ''\n    },\n    elFormItem: {\n      default: ''\n    }\n  },\n\n  data: function data() {\n    return {\n      selfModel: false,\n      focus: false,\n      isLimitExceeded: false\n    };\n  },\n\n\n  props: {\n    value: {},\n    label: {},\n    disabled: Boolean,\n    checked: Boolean,\n    name: String,\n    trueLabel: [String, Number],\n    falseLabel: [String, Number]\n  },\n  computed: {\n    model: {\n      get: function get() {\n        return this._checkboxGroup ? this.store : this.value !== undefined ? this.value : this.selfModel;\n      },\n      set: function set(val) {\n        if (this._checkboxGroup) {\n          this.isLimitExceeded = false;\n          this._checkboxGroup.min !== undefined && val.length < this._checkboxGroup.min && (this.isLimitExceeded = true);\n\n          this._checkboxGroup.max !== undefined && val.length > this._checkboxGroup.max && (this.isLimitExceeded = true);\n\n          this.isLimitExceeded === false && this.dispatch('ElCheckboxGroup', 'input', [val]);\n        } else if (this.value !== undefined) {\n          this.$emit('input', val);\n        } else {\n          this.selfModel = val;\n        }\n      }\n    },\n\n    isChecked: function isChecked() {\n      if ({}.toString.call(this.model) === '[object Boolean]') {\n        return this.model;\n      } else if (Array.isArray(this.model)) {\n        return this.model.indexOf(this.label) > -1;\n      } else if (this.model !== null && this.model !== undefined) {\n        return this.model === this.trueLabel;\n      }\n    },\n    _checkboxGroup: function _checkboxGroup() {\n      var parent = this.$parent;\n      while (parent) {\n        if (parent.$options.componentName !== 'ElCheckboxGroup') {\n          parent = parent.$parent;\n        } else {\n          return parent;\n        }\n      }\n      return false;\n    },\n    store: function store() {\n      return this._checkboxGroup ? this._checkboxGroup.value : this.value;\n    },\n    activeStyle: function activeStyle() {\n      return {\n        backgroundColor: this._checkboxGroup.fill || '',\n        borderColor: this._checkboxGroup.fill || '',\n        color: this._checkboxGroup.textColor || '',\n        'box-shadow': '-1px 0 0 0 ' + this._checkboxGroup.fill\n\n      };\n    },\n    _elFormItemSize: function _elFormItemSize() {\n      return (this.elFormItem || {}).elFormItemSize;\n    },\n    size: function size() {\n      return this._checkboxGroup.checkboxGroupSize || this._elFormItemSize || (this.$ELEMENT || {}).size;\n    },\n\n\n    /* used to make the isDisabled judgment under max/min props */\n    isLimitDisabled: function isLimitDisabled() {\n      var _checkboxGroup2 = this._checkboxGroup,\n          max = _checkboxGroup2.max,\n          min = _checkboxGroup2.min;\n\n      return !!(max || min) && this.model.length >= max && !this.isChecked || this.model.length <= min && this.isChecked;\n    },\n    isDisabled: function isDisabled() {\n      return this._checkboxGroup ? this._checkboxGroup.disabled || this.disabled || (this.elForm || {}).disabled || this.isLimitDisabled : this.disabled || (this.elForm || {}).disabled;\n    }\n  },\n  methods: {\n    addToStore: function addToStore() {\n      if (Array.isArray(this.model) && this.model.indexOf(this.label) === -1) {\n        this.model.push(this.label);\n      } else {\n        this.model = this.trueLabel || true;\n      }\n    },\n    handleChange: function handleChange(ev) {\n      var _this = this;\n\n      if (this.isLimitExceeded) return;\n      var value = void 0;\n      if (ev.target.checked) {\n        value = this.trueLabel === undefined ? true : this.trueLabel;\n      } else {\n        value = this.falseLabel === undefined ? false : this.falseLabel;\n      }\n      this.$emit('change', value, ev);\n      this.$nextTick(function () {\n        if (_this._checkboxGroup) {\n          _this.dispatch('ElCheckboxGroup', 'change', [_this._checkboxGroup.value]);\n        }\n      });\n    }\n  },\n\n  created: function created() {\n    this.checked && this.addToStore();\n  }\n});\n// CONCATENATED MODULE: ./packages/checkbox/src/checkbox-button.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_checkbox_buttonvue_type_script_lang_js_ = (checkbox_buttonvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/checkbox/src/checkbox-button.vue\n\n\n\n\n\n/* normalize component */\n\nvar checkbox_button_component = normalizeComponent(\n  src_checkbox_buttonvue_type_script_lang_js_,\n  checkbox_buttonvue_type_template_id_478e906e_render,\n  checkbox_buttonvue_type_template_id_478e906e_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var checkbox_button_api; }\ncheckbox_button_component.options.__file = \"packages/checkbox/src/checkbox-button.vue\"\n/* harmony default export */ var checkbox_button = (checkbox_button_component.exports);\n// CONCATENATED MODULE: ./packages/checkbox-button/index.js\n\n\n/* istanbul ignore next */\ncheckbox_button.install = function (Vue) {\n  Vue.component(checkbox_button.name, checkbox_button);\n};\n\n/* harmony default export */ var packages_checkbox_button = (checkbox_button);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/checkbox/src/checkbox-group.vue?vue&type=template&id=7289a290&\nvar checkbox_groupvue_type_template_id_7289a290_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    {\n      staticClass: \"el-checkbox-group\",\n      attrs: { role: \"group\", \"aria-label\": \"checkbox-group\" }\n    },\n    [_vm._t(\"default\")],\n    2\n  )\n}\nvar checkbox_groupvue_type_template_id_7289a290_staticRenderFns = []\ncheckbox_groupvue_type_template_id_7289a290_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/checkbox/src/checkbox-group.vue?vue&type=template&id=7289a290&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/checkbox/src/checkbox-group.vue?vue&type=script&lang=js&\n\n\n\n/* harmony default export */ var checkbox_groupvue_type_script_lang_js_ = ({\n  name: 'ElCheckboxGroup',\n\n  componentName: 'ElCheckboxGroup',\n\n  mixins: [emitter_default.a],\n\n  inject: {\n    elFormItem: {\n      default: ''\n    }\n  },\n\n  props: {\n    value: {},\n    disabled: Boolean,\n    min: Number,\n    max: Number,\n    size: String,\n    fill: String,\n    textColor: String\n  },\n\n  computed: {\n    _elFormItemSize: function _elFormItemSize() {\n      return (this.elFormItem || {}).elFormItemSize;\n    },\n    checkboxGroupSize: function checkboxGroupSize() {\n      return this.size || this._elFormItemSize || (this.$ELEMENT || {}).size;\n    }\n  },\n\n  watch: {\n    value: function value(_value) {\n      this.dispatch('ElFormItem', 'el.form.change', [_value]);\n    }\n  }\n});\n// CONCATENATED MODULE: ./packages/checkbox/src/checkbox-group.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_checkbox_groupvue_type_script_lang_js_ = (checkbox_groupvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/checkbox/src/checkbox-group.vue\n\n\n\n\n\n/* normalize component */\n\nvar checkbox_group_component = normalizeComponent(\n  src_checkbox_groupvue_type_script_lang_js_,\n  checkbox_groupvue_type_template_id_7289a290_render,\n  checkbox_groupvue_type_template_id_7289a290_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var checkbox_group_api; }\ncheckbox_group_component.options.__file = \"packages/checkbox/src/checkbox-group.vue\"\n/* harmony default export */ var checkbox_group = (checkbox_group_component.exports);\n// CONCATENATED MODULE: ./packages/checkbox-group/index.js\n\n\n/* istanbul ignore next */\ncheckbox_group.install = function (Vue) {\n  Vue.component(checkbox_group.name, checkbox_group);\n};\n\n/* harmony default export */ var packages_checkbox_group = (checkbox_group);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/switch/src/component.vue?vue&type=template&id=2dcd8fbb&\nvar componentvue_type_template_id_2dcd8fbb_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    {\n      staticClass: \"el-switch\",\n      class: { \"is-disabled\": _vm.switchDisabled, \"is-checked\": _vm.checked },\n      attrs: {\n        role: \"switch\",\n        \"aria-checked\": _vm.checked,\n        \"aria-disabled\": _vm.switchDisabled\n      },\n      on: {\n        click: function($event) {\n          $event.preventDefault()\n          return _vm.switchValue($event)\n        }\n      }\n    },\n    [\n      _c(\"input\", {\n        ref: \"input\",\n        staticClass: \"el-switch__input\",\n        attrs: {\n          type: \"checkbox\",\n          id: _vm.id,\n          name: _vm.name,\n          \"true-value\": _vm.activeValue,\n          \"false-value\": _vm.inactiveValue,\n          disabled: _vm.switchDisabled\n        },\n        on: {\n          change: _vm.handleChange,\n          keydown: function($event) {\n            if (\n              !(\"button\" in $event) &&\n              _vm._k($event.keyCode, \"enter\", 13, $event.key, \"Enter\")\n            ) {\n              return null\n            }\n            return _vm.switchValue($event)\n          }\n        }\n      }),\n      _vm.inactiveIconClass || _vm.inactiveText\n        ? _c(\n            \"span\",\n            {\n              class: [\n                \"el-switch__label\",\n                \"el-switch__label--left\",\n                !_vm.checked ? \"is-active\" : \"\"\n              ]\n            },\n            [\n              _vm.inactiveIconClass\n                ? _c(\"i\", { class: [_vm.inactiveIconClass] })\n                : _vm._e(),\n              !_vm.inactiveIconClass && _vm.inactiveText\n                ? _c(\"span\", { attrs: { \"aria-hidden\": _vm.checked } }, [\n                    _vm._v(_vm._s(_vm.inactiveText))\n                  ])\n                : _vm._e()\n            ]\n          )\n        : _vm._e(),\n      _c(\"span\", {\n        ref: \"core\",\n        staticClass: \"el-switch__core\",\n        style: { width: _vm.coreWidth + \"px\" }\n      }),\n      _vm.activeIconClass || _vm.activeText\n        ? _c(\n            \"span\",\n            {\n              class: [\n                \"el-switch__label\",\n                \"el-switch__label--right\",\n                _vm.checked ? \"is-active\" : \"\"\n              ]\n            },\n            [\n              _vm.activeIconClass\n                ? _c(\"i\", { class: [_vm.activeIconClass] })\n                : _vm._e(),\n              !_vm.activeIconClass && _vm.activeText\n                ? _c(\"span\", { attrs: { \"aria-hidden\": !_vm.checked } }, [\n                    _vm._v(_vm._s(_vm.activeText))\n                  ])\n                : _vm._e()\n            ]\n          )\n        : _vm._e()\n    ]\n  )\n}\nvar componentvue_type_template_id_2dcd8fbb_staticRenderFns = []\ncomponentvue_type_template_id_2dcd8fbb_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/switch/src/component.vue?vue&type=template&id=2dcd8fbb&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/switch/src/component.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n/* harmony default export */ var switch_src_componentvue_type_script_lang_js_ = ({\n  name: 'ElSwitch',\n  mixins: [focus_default()('input'), migrating_default.a, emitter_default.a],\n  inject: {\n    elForm: {\n      default: ''\n    }\n  },\n  props: {\n    value: {\n      type: [Boolean, String, Number],\n      default: false\n    },\n    disabled: {\n      type: Boolean,\n      default: false\n    },\n    width: {\n      type: Number,\n      default: 40\n    },\n    activeIconClass: {\n      type: String,\n      default: ''\n    },\n    inactiveIconClass: {\n      type: String,\n      default: ''\n    },\n    activeText: String,\n    inactiveText: String,\n    activeColor: {\n      type: String,\n      default: ''\n    },\n    inactiveColor: {\n      type: String,\n      default: ''\n    },\n    activeValue: {\n      type: [Boolean, String, Number],\n      default: true\n    },\n    inactiveValue: {\n      type: [Boolean, String, Number],\n      default: false\n    },\n    name: {\n      type: String,\n      default: ''\n    },\n    validateEvent: {\n      type: Boolean,\n      default: true\n    },\n    id: String\n  },\n  data: function data() {\n    return {\n      coreWidth: this.width\n    };\n  },\n  created: function created() {\n    if (!~[this.activeValue, this.inactiveValue].indexOf(this.value)) {\n      this.$emit('input', this.inactiveValue);\n    }\n  },\n\n  computed: {\n    checked: function checked() {\n      return this.value === this.activeValue;\n    },\n    switchDisabled: function switchDisabled() {\n      return this.disabled || (this.elForm || {}).disabled;\n    }\n  },\n  watch: {\n    checked: function checked() {\n      this.$refs.input.checked = this.checked;\n      if (this.activeColor || this.inactiveColor) {\n        this.setBackgroundColor();\n      }\n      if (this.validateEvent) {\n        this.dispatch('ElFormItem', 'el.form.change', [this.value]);\n      }\n    }\n  },\n  methods: {\n    handleChange: function handleChange(event) {\n      var _this = this;\n\n      var val = this.checked ? this.inactiveValue : this.activeValue;\n      this.$emit('input', val);\n      this.$emit('change', val);\n      this.$nextTick(function () {\n        // set input's checked property\n        // in case parent refuses to change component's value\n        if (_this.$refs.input) {\n          _this.$refs.input.checked = _this.checked;\n        }\n      });\n    },\n    setBackgroundColor: function setBackgroundColor() {\n      var newColor = this.checked ? this.activeColor : this.inactiveColor;\n      this.$refs.core.style.borderColor = newColor;\n      this.$refs.core.style.backgroundColor = newColor;\n    },\n    switchValue: function switchValue() {\n      !this.switchDisabled && this.handleChange();\n    },\n    getMigratingConfig: function getMigratingConfig() {\n      return {\n        props: {\n          'on-color': 'on-color is renamed to active-color.',\n          'off-color': 'off-color is renamed to inactive-color.',\n          'on-text': 'on-text is renamed to active-text.',\n          'off-text': 'off-text is renamed to inactive-text.',\n          'on-value': 'on-value is renamed to active-value.',\n          'off-value': 'off-value is renamed to inactive-value.',\n          'on-icon-class': 'on-icon-class is renamed to active-icon-class.',\n          'off-icon-class': 'off-icon-class is renamed to inactive-icon-class.'\n        }\n      };\n    }\n  },\n  mounted: function mounted() {\n    /* istanbul ignore if */\n    this.coreWidth = this.width || 40;\n    if (this.activeColor || this.inactiveColor) {\n      this.setBackgroundColor();\n    }\n    this.$refs.input.checked = this.checked;\n  }\n});\n// CONCATENATED MODULE: ./packages/switch/src/component.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_switch_src_componentvue_type_script_lang_js_ = (switch_src_componentvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/switch/src/component.vue\n\n\n\n\n\n/* normalize component */\n\nvar src_component_component = normalizeComponent(\n  packages_switch_src_componentvue_type_script_lang_js_,\n  componentvue_type_template_id_2dcd8fbb_render,\n  componentvue_type_template_id_2dcd8fbb_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var src_component_api; }\nsrc_component_component.options.__file = \"packages/switch/src/component.vue\"\n/* harmony default export */ var switch_src_component = (src_component_component.exports);\n// CONCATENATED MODULE: ./packages/switch/index.js\n\n\n/* istanbul ignore next */\nswitch_src_component.install = function (Vue) {\n  Vue.component(switch_src_component.name, switch_src_component);\n};\n\n/* harmony default export */ var packages_switch = (switch_src_component);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/select/src/select.vue?vue&type=template&id=0e4aade6&\nvar selectvue_type_template_id_0e4aade6_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    {\n      directives: [\n        {\n          name: \"clickoutside\",\n          rawName: \"v-clickoutside\",\n          value: _vm.handleClose,\n          expression: \"handleClose\"\n        }\n      ],\n      staticClass: \"el-select\",\n      class: [_vm.selectSize ? \"el-select--\" + _vm.selectSize : \"\"],\n      on: {\n        click: function($event) {\n          $event.stopPropagation()\n          return _vm.toggleMenu($event)\n        }\n      }\n    },\n    [\n      _vm.multiple\n        ? _c(\n            \"div\",\n            {\n              ref: \"tags\",\n              staticClass: \"el-select__tags\",\n              style: { \"max-width\": _vm.inputWidth - 32 + \"px\", width: \"100%\" }\n            },\n            [\n              _vm.collapseTags && _vm.selected.length\n                ? _c(\n                    \"span\",\n                    [\n                      _c(\n                        \"el-tag\",\n                        {\n                          attrs: {\n                            closable: !_vm.selectDisabled,\n                            size: _vm.collapseTagSize,\n                            hit: _vm.selected[0].hitState,\n                            type: \"info\",\n                            \"disable-transitions\": \"\"\n                          },\n                          on: {\n                            close: function($event) {\n                              _vm.deleteTag($event, _vm.selected[0])\n                            }\n                          }\n                        },\n                        [\n                          _c(\"span\", { staticClass: \"el-select__tags-text\" }, [\n                            _vm._v(_vm._s(_vm.selected[0].currentLabel))\n                          ])\n                        ]\n                      ),\n                      _vm.selected.length > 1\n                        ? _c(\n                            \"el-tag\",\n                            {\n                              attrs: {\n                                closable: false,\n                                size: _vm.collapseTagSize,\n                                type: \"info\",\n                                \"disable-transitions\": \"\"\n                              }\n                            },\n                            [\n                              _c(\n                                \"span\",\n                                { staticClass: \"el-select__tags-text\" },\n                                [_vm._v(\"+ \" + _vm._s(_vm.selected.length - 1))]\n                              )\n                            ]\n                          )\n                        : _vm._e()\n                    ],\n                    1\n                  )\n                : _vm._e(),\n              !_vm.collapseTags\n                ? _c(\n                    \"transition-group\",\n                    { on: { \"after-leave\": _vm.resetInputHeight } },\n                    _vm._l(_vm.selected, function(item) {\n                      return _c(\n                        \"el-tag\",\n                        {\n                          key: _vm.getValueKey(item),\n                          attrs: {\n                            closable: !_vm.selectDisabled,\n                            size: _vm.collapseTagSize,\n                            hit: item.hitState,\n                            type: \"info\",\n                            \"disable-transitions\": \"\"\n                          },\n                          on: {\n                            close: function($event) {\n                              _vm.deleteTag($event, item)\n                            }\n                          }\n                        },\n                        [\n                          _c(\"span\", { staticClass: \"el-select__tags-text\" }, [\n                            _vm._v(_vm._s(item.currentLabel))\n                          ])\n                        ]\n                      )\n                    }),\n                    1\n                  )\n                : _vm._e(),\n              _vm.filterable\n                ? _c(\"input\", {\n                    directives: [\n                      {\n                        name: \"model\",\n                        rawName: \"v-model\",\n                        value: _vm.query,\n                        expression: \"query\"\n                      }\n                    ],\n                    ref: \"input\",\n                    staticClass: \"el-select__input\",\n                    class: [_vm.selectSize ? \"is-\" + _vm.selectSize : \"\"],\n                    style: {\n                      \"flex-grow\": \"1\",\n                      width: _vm.inputLength / (_vm.inputWidth - 32) + \"%\",\n                      \"max-width\": _vm.inputWidth - 42 + \"px\"\n                    },\n                    attrs: {\n                      type: \"text\",\n                      disabled: _vm.selectDisabled,\n                      autocomplete: _vm.autoComplete || _vm.autocomplete\n                    },\n                    domProps: { value: _vm.query },\n                    on: {\n                      focus: _vm.handleFocus,\n                      blur: function($event) {\n                        _vm.softFocus = false\n                      },\n                      keyup: _vm.managePlaceholder,\n                      keydown: [\n                        _vm.resetInputState,\n                        function($event) {\n                          if (\n                            !(\"button\" in $event) &&\n                            _vm._k($event.keyCode, \"down\", 40, $event.key, [\n                              \"Down\",\n                              \"ArrowDown\"\n                            ])\n                          ) {\n                            return null\n                          }\n                          $event.preventDefault()\n                          _vm.handleNavigate(\"next\")\n                        },\n                        function($event) {\n                          if (\n                            !(\"button\" in $event) &&\n                            _vm._k($event.keyCode, \"up\", 38, $event.key, [\n                              \"Up\",\n                              \"ArrowUp\"\n                            ])\n                          ) {\n                            return null\n                          }\n                          $event.preventDefault()\n                          _vm.handleNavigate(\"prev\")\n                        },\n                        function($event) {\n                          if (\n                            !(\"button\" in $event) &&\n                            _vm._k(\n                              $event.keyCode,\n                              \"enter\",\n                              13,\n                              $event.key,\n                              \"Enter\"\n                            )\n                          ) {\n                            return null\n                          }\n                          $event.preventDefault()\n                          return _vm.selectOption($event)\n                        },\n                        function($event) {\n                          if (\n                            !(\"button\" in $event) &&\n                            _vm._k($event.keyCode, \"esc\", 27, $event.key, [\n                              \"Esc\",\n                              \"Escape\"\n                            ])\n                          ) {\n                            return null\n                          }\n                          $event.stopPropagation()\n                          $event.preventDefault()\n                          _vm.visible = false\n                        },\n                        function($event) {\n                          if (\n                            !(\"button\" in $event) &&\n                            _vm._k(\n                              $event.keyCode,\n                              \"delete\",\n                              [8, 46],\n                              $event.key,\n                              [\"Backspace\", \"Delete\", \"Del\"]\n                            )\n                          ) {\n                            return null\n                          }\n                          return _vm.deletePrevTag($event)\n                        },\n                        function($event) {\n                          if (\n                            !(\"button\" in $event) &&\n                            _vm._k($event.keyCode, \"tab\", 9, $event.key, \"Tab\")\n                          ) {\n                            return null\n                          }\n                          _vm.visible = false\n                        }\n                      ],\n                      compositionstart: _vm.handleComposition,\n                      compositionupdate: _vm.handleComposition,\n                      compositionend: _vm.handleComposition,\n                      input: [\n                        function($event) {\n                          if ($event.target.composing) {\n                            return\n                          }\n                          _vm.query = $event.target.value\n                        },\n                        _vm.debouncedQueryChange\n                      ]\n                    }\n                  })\n                : _vm._e()\n            ],\n            1\n          )\n        : _vm._e(),\n      _c(\n        \"el-input\",\n        {\n          ref: \"reference\",\n          class: { \"is-focus\": _vm.visible },\n          attrs: {\n            type: \"text\",\n            placeholder: _vm.currentPlaceholder,\n            name: _vm.name,\n            id: _vm.id,\n            autocomplete: _vm.autoComplete || _vm.autocomplete,\n            size: _vm.selectSize,\n            disabled: _vm.selectDisabled,\n            readonly: _vm.readonly,\n            \"validate-event\": false,\n            tabindex: _vm.multiple && _vm.filterable ? \"-1\" : null\n          },\n          on: {\n            focus: _vm.handleFocus,\n            blur: _vm.handleBlur,\n            input: _vm.debouncedOnInputChange,\n            compositionstart: _vm.handleComposition,\n            compositionupdate: _vm.handleComposition,\n            compositionend: _vm.handleComposition\n          },\n          nativeOn: {\n            keydown: [\n              function($event) {\n                if (\n                  !(\"button\" in $event) &&\n                  _vm._k($event.keyCode, \"down\", 40, $event.key, [\n                    \"Down\",\n                    \"ArrowDown\"\n                  ])\n                ) {\n                  return null\n                }\n                $event.stopPropagation()\n                $event.preventDefault()\n                _vm.handleNavigate(\"next\")\n              },\n              function($event) {\n                if (\n                  !(\"button\" in $event) &&\n                  _vm._k($event.keyCode, \"up\", 38, $event.key, [\n                    \"Up\",\n                    \"ArrowUp\"\n                  ])\n                ) {\n                  return null\n                }\n                $event.stopPropagation()\n                $event.preventDefault()\n                _vm.handleNavigate(\"prev\")\n              },\n              function($event) {\n                if (\n                  !(\"button\" in $event) &&\n                  _vm._k($event.keyCode, \"enter\", 13, $event.key, \"Enter\")\n                ) {\n                  return null\n                }\n                $event.preventDefault()\n                return _vm.selectOption($event)\n              },\n              function($event) {\n                if (\n                  !(\"button\" in $event) &&\n                  _vm._k($event.keyCode, \"esc\", 27, $event.key, [\n                    \"Esc\",\n                    \"Escape\"\n                  ])\n                ) {\n                  return null\n                }\n                $event.stopPropagation()\n                $event.preventDefault()\n                _vm.visible = false\n              },\n              function($event) {\n                if (\n                  !(\"button\" in $event) &&\n                  _vm._k($event.keyCode, \"tab\", 9, $event.key, \"Tab\")\n                ) {\n                  return null\n                }\n                _vm.visible = false\n              }\n            ],\n            mouseenter: function($event) {\n              _vm.inputHovering = true\n            },\n            mouseleave: function($event) {\n              _vm.inputHovering = false\n            }\n          },\n          model: {\n            value: _vm.selectedLabel,\n            callback: function($$v) {\n              _vm.selectedLabel = $$v\n            },\n            expression: \"selectedLabel\"\n          }\n        },\n        [\n          _vm.$slots.prefix\n            ? _c(\"template\", { slot: \"prefix\" }, [_vm._t(\"prefix\")], 2)\n            : _vm._e(),\n          _c(\"template\", { slot: \"suffix\" }, [\n            _c(\"i\", {\n              directives: [\n                {\n                  name: \"show\",\n                  rawName: \"v-show\",\n                  value: !_vm.showClose,\n                  expression: \"!showClose\"\n                }\n              ],\n              class: [\n                \"el-select__caret\",\n                \"el-input__icon\",\n                \"el-icon-\" + _vm.iconClass\n              ]\n            }),\n            _vm.showClose\n              ? _c(\"i\", {\n                  staticClass:\n                    \"el-select__caret el-input__icon el-icon-circle-close\",\n                  on: { click: _vm.handleClearClick }\n                })\n              : _vm._e()\n          ])\n        ],\n        2\n      ),\n      _c(\n        \"transition\",\n        {\n          attrs: { name: \"el-zoom-in-top\" },\n          on: {\n            \"before-enter\": _vm.handleMenuEnter,\n            \"after-leave\": _vm.doDestroy\n          }\n        },\n        [\n          _c(\n            \"el-select-menu\",\n            {\n              directives: [\n                {\n                  name: \"show\",\n                  rawName: \"v-show\",\n                  value: _vm.visible && _vm.emptyText !== false,\n                  expression: \"visible && emptyText !== false\"\n                }\n              ],\n              ref: \"popper\",\n              attrs: { \"append-to-body\": _vm.popperAppendToBody }\n            },\n            [\n              _c(\n                \"el-scrollbar\",\n                {\n                  directives: [\n                    {\n                      name: \"show\",\n                      rawName: \"v-show\",\n                      value: _vm.options.length > 0 && !_vm.loading,\n                      expression: \"options.length > 0 && !loading\"\n                    }\n                  ],\n                  ref: \"scrollbar\",\n                  class: {\n                    \"is-empty\":\n                      !_vm.allowCreate &&\n                      _vm.query &&\n                      _vm.filteredOptionsCount === 0\n                  },\n                  attrs: {\n                    tag: \"ul\",\n                    \"wrap-class\": \"el-select-dropdown__wrap\",\n                    \"view-class\": \"el-select-dropdown__list\"\n                  }\n                },\n                [\n                  _vm.showNewOption\n                    ? _c(\"el-option\", {\n                        attrs: { value: _vm.query, created: \"\" }\n                      })\n                    : _vm._e(),\n                  _vm._t(\"default\")\n                ],\n                2\n              ),\n              _vm.emptyText &&\n              (!_vm.allowCreate ||\n                _vm.loading ||\n                (_vm.allowCreate && _vm.options.length === 0))\n                ? [\n                    _vm.$slots.empty\n                      ? _vm._t(\"empty\")\n                      : _c(\"p\", { staticClass: \"el-select-dropdown__empty\" }, [\n                          _vm._v(\n                            \"\\n          \" +\n                              _vm._s(_vm.emptyText) +\n                              \"\\n        \"\n                          )\n                        ])\n                  ]\n                : _vm._e()\n            ],\n            2\n          )\n        ],\n        1\n      )\n    ],\n    1\n  )\n}\nvar selectvue_type_template_id_0e4aade6_staticRenderFns = []\nselectvue_type_template_id_0e4aade6_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/select/src/select.vue?vue&type=template&id=0e4aade6&\n\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/select/src/select-dropdown.vue?vue&type=template&id=06828748&\nvar select_dropdownvue_type_template_id_06828748_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    {\n      staticClass: \"el-select-dropdown el-popper\",\n      class: [{ \"is-multiple\": _vm.$parent.multiple }, _vm.popperClass],\n      style: { minWidth: _vm.minWidth }\n    },\n    [_vm._t(\"default\")],\n    2\n  )\n}\nvar select_dropdownvue_type_template_id_06828748_staticRenderFns = []\nselect_dropdownvue_type_template_id_06828748_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/select/src/select-dropdown.vue?vue&type=template&id=06828748&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/select/src/select-dropdown.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n/* harmony default export */ var select_dropdownvue_type_script_lang_js_ = ({\n  name: 'ElSelectDropdown',\n\n  componentName: 'ElSelectDropdown',\n\n  mixins: [vue_popper_default.a],\n\n  props: {\n    placement: {\n      default: 'bottom-start'\n    },\n\n    boundariesPadding: {\n      default: 0\n    },\n\n    popperOptions: {\n      default: function _default() {\n        return {\n          gpuAcceleration: false\n        };\n      }\n    },\n\n    visibleArrow: {\n      default: true\n    },\n\n    appendToBody: {\n      type: Boolean,\n      default: true\n    }\n  },\n\n  data: function data() {\n    return {\n      minWidth: ''\n    };\n  },\n\n\n  computed: {\n    popperClass: function popperClass() {\n      return this.$parent.popperClass;\n    }\n  },\n\n  watch: {\n    '$parent.inputWidth': function $parentInputWidth() {\n      this.minWidth = this.$parent.$el.getBoundingClientRect().width + 'px';\n    }\n  },\n\n  mounted: function mounted() {\n    var _this = this;\n\n    this.referenceElm = this.$parent.$refs.reference.$el;\n    this.$parent.popperElm = this.popperElm = this.$el;\n    this.$on('updatePopper', function () {\n      if (_this.$parent.visible) _this.updatePopper();\n    });\n    this.$on('destroyPopper', this.destroyPopper);\n  }\n});\n// CONCATENATED MODULE: ./packages/select/src/select-dropdown.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_select_dropdownvue_type_script_lang_js_ = (select_dropdownvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/select/src/select-dropdown.vue\n\n\n\n\n\n/* normalize component */\n\nvar select_dropdown_component = normalizeComponent(\n  src_select_dropdownvue_type_script_lang_js_,\n  select_dropdownvue_type_template_id_06828748_render,\n  select_dropdownvue_type_template_id_06828748_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var select_dropdown_api; }\nselect_dropdown_component.options.__file = \"packages/select/src/select-dropdown.vue\"\n/* harmony default export */ var select_dropdown = (select_dropdown_component.exports);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/select/src/option.vue?vue&type=template&id=7a44c642&\nvar optionvue_type_template_id_7a44c642_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"li\",\n    {\n      directives: [\n        {\n          name: \"show\",\n          rawName: \"v-show\",\n          value: _vm.visible,\n          expression: \"visible\"\n        }\n      ],\n      staticClass: \"el-select-dropdown__item\",\n      class: {\n        selected: _vm.itemSelected,\n        \"is-disabled\": _vm.disabled || _vm.groupDisabled || _vm.limitReached,\n        hover: _vm.hover\n      },\n      on: {\n        mouseenter: _vm.hoverItem,\n        click: function($event) {\n          $event.stopPropagation()\n          return _vm.selectOptionClick($event)\n        }\n      }\n    },\n    [_vm._t(\"default\", [_c(\"span\", [_vm._v(_vm._s(_vm.currentLabel))])])],\n    2\n  )\n}\nvar optionvue_type_template_id_7a44c642_staticRenderFns = []\noptionvue_type_template_id_7a44c642_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/select/src/option.vue?vue&type=template&id=7a44c642&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/select/src/option.vue?vue&type=script&lang=js&\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n/* harmony default export */ var optionvue_type_script_lang_js_ = ({\n  mixins: [emitter_default.a],\n\n  name: 'ElOption',\n\n  componentName: 'ElOption',\n\n  inject: ['select'],\n\n  props: {\n    value: {\n      required: true\n    },\n    label: [String, Number],\n    created: Boolean,\n    disabled: {\n      type: Boolean,\n      default: false\n    }\n  },\n\n  data: function data() {\n    return {\n      index: -1,\n      groupDisabled: false,\n      visible: true,\n      hitState: false,\n      hover: false\n    };\n  },\n\n\n  computed: {\n    isObject: function isObject() {\n      return Object.prototype.toString.call(this.value).toLowerCase() === '[object object]';\n    },\n    currentLabel: function currentLabel() {\n      return this.label || (this.isObject ? '' : this.value);\n    },\n    currentValue: function currentValue() {\n      return this.value || this.label || '';\n    },\n    itemSelected: function itemSelected() {\n      if (!this.select.multiple) {\n        return this.isEqual(this.value, this.select.value);\n      } else {\n        return this.contains(this.select.value, this.value);\n      }\n    },\n    limitReached: function limitReached() {\n      if (this.select.multiple) {\n        return !this.itemSelected && (this.select.value || []).length >= this.select.multipleLimit && this.select.multipleLimit > 0;\n      } else {\n        return false;\n      }\n    }\n  },\n\n  watch: {\n    currentLabel: function currentLabel() {\n      if (!this.created && !this.select.remote) this.dispatch('ElSelect', 'setSelected');\n    },\n    value: function value(val, oldVal) {\n      var _select = this.select,\n          remote = _select.remote,\n          valueKey = _select.valueKey;\n\n      if (!this.created && !remote) {\n        if (valueKey && (typeof val === 'undefined' ? 'undefined' : _typeof(val)) === 'object' && (typeof oldVal === 'undefined' ? 'undefined' : _typeof(oldVal)) === 'object' && val[valueKey] === oldVal[valueKey]) {\n          return;\n        }\n        this.dispatch('ElSelect', 'setSelected');\n      }\n    }\n  },\n\n  methods: {\n    isEqual: function isEqual(a, b) {\n      if (!this.isObject) {\n        return a === b;\n      } else {\n        var valueKey = this.select.valueKey;\n        return Object(util_[\"getValueByPath\"])(a, valueKey) === Object(util_[\"getValueByPath\"])(b, valueKey);\n      }\n    },\n    contains: function contains() {\n      var arr = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n      var target = arguments[1];\n\n      if (!this.isObject) {\n        return arr && arr.indexOf(target) > -1;\n      } else {\n        var valueKey = this.select.valueKey;\n        return arr && arr.some(function (item) {\n          return Object(util_[\"getValueByPath\"])(item, valueKey) === Object(util_[\"getValueByPath\"])(target, valueKey);\n        });\n      }\n    },\n    handleGroupDisabled: function handleGroupDisabled(val) {\n      this.groupDisabled = val;\n    },\n    hoverItem: function hoverItem() {\n      if (!this.disabled && !this.groupDisabled) {\n        this.select.hoverIndex = this.select.options.indexOf(this);\n      }\n    },\n    selectOptionClick: function selectOptionClick() {\n      if (this.disabled !== true && this.groupDisabled !== true) {\n        this.dispatch('ElSelect', 'handleOptionClick', [this, true]);\n      }\n    },\n    queryChange: function queryChange(query) {\n      this.visible = new RegExp(Object(util_[\"escapeRegexpString\"])(query), 'i').test(this.currentLabel) || this.created;\n      if (!this.visible) {\n        this.select.filteredOptionsCount--;\n      }\n    }\n  },\n\n  created: function created() {\n    this.select.options.push(this);\n    this.select.cachedOptions.push(this);\n    this.select.optionsCount++;\n    this.select.filteredOptionsCount++;\n\n    this.$on('queryChange', this.queryChange);\n    this.$on('handleGroupDisabled', this.handleGroupDisabled);\n  },\n  beforeDestroy: function beforeDestroy() {\n    var _select2 = this.select,\n        selected = _select2.selected,\n        multiple = _select2.multiple;\n\n    var selectedOptions = multiple ? selected : [selected];\n    var index = this.select.cachedOptions.indexOf(this);\n    var selectedIndex = selectedOptions.indexOf(this);\n\n    // if option is not selected, remove it from cache\n    if (index > -1 && selectedIndex < 0) {\n      this.select.cachedOptions.splice(index, 1);\n    }\n    this.select.onOptionDestroy(this.select.options.indexOf(this));\n  }\n});\n// CONCATENATED MODULE: ./packages/select/src/option.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_optionvue_type_script_lang_js_ = (optionvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/select/src/option.vue\n\n\n\n\n\n/* normalize component */\n\nvar option_component = normalizeComponent(\n  src_optionvue_type_script_lang_js_,\n  optionvue_type_template_id_7a44c642_render,\n  optionvue_type_template_id_7a44c642_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var option_api; }\noption_component.options.__file = \"packages/select/src/option.vue\"\n/* harmony default export */ var src_option = (option_component.exports);\n// EXTERNAL MODULE: external \"element-ui/lib/tag\"\nvar tag_ = __nested_webpack_require_8926__(30);\nvar tag_default = /*#__PURE__*/__nested_webpack_require_8926__.n(tag_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/resize-event\"\nvar resize_event_ = __nested_webpack_require_8926__(15);\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/scroll-into-view\"\nvar scroll_into_view_ = __nested_webpack_require_8926__(27);\nvar scroll_into_view_default = /*#__PURE__*/__nested_webpack_require_8926__.n(scroll_into_view_);\n\n// CONCATENATED MODULE: ./packages/select/src/navigation-mixin.js\n/* harmony default export */ var navigation_mixin = ({\n  data: function data() {\n    return {\n      hoverOption: -1\n    };\n  },\n\n\n  computed: {\n    optionsAllDisabled: function optionsAllDisabled() {\n      return this.options.filter(function (option) {\n        return option.visible;\n      }).every(function (option) {\n        return option.disabled;\n      });\n    }\n  },\n\n  watch: {\n    hoverIndex: function hoverIndex(val) {\n      var _this = this;\n\n      if (typeof val === 'number' && val > -1) {\n        this.hoverOption = this.options[val] || {};\n      }\n      this.options.forEach(function (option) {\n        option.hover = _this.hoverOption === option;\n      });\n    }\n  },\n\n  methods: {\n    navigateOptions: function navigateOptions(direction) {\n      var _this2 = this;\n\n      if (!this.visible) {\n        this.visible = true;\n        return;\n      }\n      if (this.options.length === 0 || this.filteredOptionsCount === 0) return;\n      if (!this.optionsAllDisabled) {\n        if (direction === 'next') {\n          this.hoverIndex++;\n          if (this.hoverIndex === this.options.length) {\n            this.hoverIndex = 0;\n          }\n        } else if (direction === 'prev') {\n          this.hoverIndex--;\n          if (this.hoverIndex < 0) {\n            this.hoverIndex = this.options.length - 1;\n          }\n        }\n        var option = this.options[this.hoverIndex];\n        if (option.disabled === true || option.groupDisabled === true || !option.visible) {\n          this.navigateOptions(direction);\n        }\n        this.$nextTick(function () {\n          return _this2.scrollToOption(_this2.hoverOption);\n        });\n      }\n    }\n  }\n});\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/select/src/select.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/* harmony default export */ var selectvue_type_script_lang_js_ = ({\n  mixins: [emitter_default.a, locale_default.a, focus_default()('reference'), navigation_mixin],\n\n  name: 'ElSelect',\n\n  componentName: 'ElSelect',\n\n  inject: {\n    elForm: {\n      default: ''\n    },\n\n    elFormItem: {\n      default: ''\n    }\n  },\n\n  provide: function provide() {\n    return {\n      'select': this\n    };\n  },\n\n\n  computed: {\n    _elFormItemSize: function _elFormItemSize() {\n      return (this.elFormItem || {}).elFormItemSize;\n    },\n    readonly: function readonly() {\n      return !this.filterable || this.multiple || !Object(util_[\"isIE\"])() && !Object(util_[\"isEdge\"])() && !this.visible;\n    },\n    showClose: function showClose() {\n      var hasValue = this.multiple ? Array.isArray(this.value) && this.value.length > 0 : this.value !== undefined && this.value !== null && this.value !== '';\n      var criteria = this.clearable && !this.selectDisabled && this.inputHovering && hasValue;\n      return criteria;\n    },\n    iconClass: function iconClass() {\n      return this.remote && this.filterable ? '' : this.visible ? 'arrow-up is-reverse' : 'arrow-up';\n    },\n    debounce: function debounce() {\n      return this.remote ? 300 : 0;\n    },\n    emptyText: function emptyText() {\n      if (this.loading) {\n        return this.loadingText || this.t('el.select.loading');\n      } else {\n        if (this.remote && this.query === '' && this.options.length === 0) return false;\n        if (this.filterable && this.query && this.options.length > 0 && this.filteredOptionsCount === 0) {\n          return this.noMatchText || this.t('el.select.noMatch');\n        }\n        if (this.options.length === 0) {\n          return this.noDataText || this.t('el.select.noData');\n        }\n      }\n      return null;\n    },\n    showNewOption: function showNewOption() {\n      var _this = this;\n\n      var hasExistingOption = this.options.filter(function (option) {\n        return !option.created;\n      }).some(function (option) {\n        return option.currentLabel === _this.query;\n      });\n      return this.filterable && this.allowCreate && this.query !== '' && !hasExistingOption;\n    },\n    selectSize: function selectSize() {\n      return this.size || this._elFormItemSize || (this.$ELEMENT || {}).size;\n    },\n    selectDisabled: function selectDisabled() {\n      return this.disabled || (this.elForm || {}).disabled;\n    },\n    collapseTagSize: function collapseTagSize() {\n      return ['small', 'mini'].indexOf(this.selectSize) > -1 ? 'mini' : 'small';\n    },\n    propPlaceholder: function propPlaceholder() {\n      return typeof this.placeholder !== 'undefined' ? this.placeholder : this.t('el.select.placeholder');\n    }\n  },\n\n  components: {\n    ElInput: input_default.a,\n    ElSelectMenu: select_dropdown,\n    ElOption: src_option,\n    ElTag: tag_default.a,\n    ElScrollbar: scrollbar_default.a\n  },\n\n  directives: { Clickoutside: clickoutside_default.a },\n\n  props: {\n    name: String,\n    id: String,\n    value: {\n      required: true\n    },\n    autocomplete: {\n      type: String,\n      default: 'off'\n    },\n    /** @Deprecated in next major version */\n    autoComplete: {\n      type: String,\n      validator: function validator(val) {\n          false && 0;\n        return true;\n      }\n    },\n    automaticDropdown: Boolean,\n    size: String,\n    disabled: Boolean,\n    clearable: Boolean,\n    filterable: Boolean,\n    allowCreate: Boolean,\n    loading: Boolean,\n    popperClass: String,\n    remote: Boolean,\n    loadingText: String,\n    noMatchText: String,\n    noDataText: String,\n    remoteMethod: Function,\n    filterMethod: Function,\n    multiple: Boolean,\n    multipleLimit: {\n      type: Number,\n      default: 0\n    },\n    placeholder: {\n      type: String,\n      required: false\n    },\n    defaultFirstOption: Boolean,\n    reserveKeyword: Boolean,\n    valueKey: {\n      type: String,\n      default: 'value'\n    },\n    collapseTags: Boolean,\n    popperAppendToBody: {\n      type: Boolean,\n      default: true\n    }\n  },\n\n  data: function data() {\n    return {\n      options: [],\n      cachedOptions: [],\n      createdLabel: null,\n      createdSelected: false,\n      selected: this.multiple ? [] : {},\n      inputLength: 20,\n      inputWidth: 0,\n      initialInputHeight: 0,\n      cachedPlaceHolder: '',\n      optionsCount: 0,\n      filteredOptionsCount: 0,\n      visible: false,\n      softFocus: false,\n      selectedLabel: '',\n      hoverIndex: -1,\n      query: '',\n      previousQuery: null,\n      inputHovering: false,\n      currentPlaceholder: '',\n      menuVisibleOnFocus: false,\n      isOnComposition: false,\n      isSilentBlur: false\n    };\n  },\n\n\n  watch: {\n    selectDisabled: function selectDisabled() {\n      var _this2 = this;\n\n      this.$nextTick(function () {\n        _this2.resetInputHeight();\n      });\n    },\n    propPlaceholder: function propPlaceholder(val) {\n      this.cachedPlaceHolder = this.currentPlaceholder = val;\n    },\n    value: function value(val, oldVal) {\n      if (this.multiple) {\n        this.resetInputHeight();\n        if (val && val.length > 0 || this.$refs.input && this.query !== '') {\n          this.currentPlaceholder = '';\n        } else {\n          this.currentPlaceholder = this.cachedPlaceHolder;\n        }\n        if (this.filterable && !this.reserveKeyword) {\n          this.query = '';\n          this.handleQueryChange(this.query);\n        }\n      }\n      this.setSelected();\n      if (this.filterable && !this.multiple) {\n        this.inputLength = 20;\n      }\n      if (!Object(util_[\"valueEquals\"])(val, oldVal)) {\n        this.dispatch('ElFormItem', 'el.form.change', val);\n      }\n    },\n    visible: function visible(val) {\n      var _this3 = this;\n\n      if (!val) {\n        this.broadcast('ElSelectDropdown', 'destroyPopper');\n        if (this.$refs.input) {\n          this.$refs.input.blur();\n        }\n        this.query = '';\n        this.previousQuery = null;\n        this.selectedLabel = '';\n        this.inputLength = 20;\n        this.menuVisibleOnFocus = false;\n        this.resetHoverIndex();\n        this.$nextTick(function () {\n          if (_this3.$refs.input && _this3.$refs.input.value === '' && _this3.selected.length === 0) {\n            _this3.currentPlaceholder = _this3.cachedPlaceHolder;\n          }\n        });\n        if (!this.multiple) {\n          if (this.selected) {\n            if (this.filterable && this.allowCreate && this.createdSelected && this.createdLabel) {\n              this.selectedLabel = this.createdLabel;\n            } else {\n              this.selectedLabel = this.selected.currentLabel;\n            }\n            if (this.filterable) this.query = this.selectedLabel;\n          }\n\n          if (this.filterable) {\n            this.currentPlaceholder = this.cachedPlaceHolder;\n          }\n        }\n      } else {\n        this.broadcast('ElSelectDropdown', 'updatePopper');\n        if (this.filterable) {\n          this.query = this.remote ? '' : this.selectedLabel;\n          this.handleQueryChange(this.query);\n          if (this.multiple) {\n            this.$refs.input.focus();\n          } else {\n            if (!this.remote) {\n              this.broadcast('ElOption', 'queryChange', '');\n              this.broadcast('ElOptionGroup', 'queryChange');\n            }\n\n            if (this.selectedLabel) {\n              this.currentPlaceholder = this.selectedLabel;\n              this.selectedLabel = '';\n            }\n          }\n        }\n      }\n      this.$emit('visible-change', val);\n    },\n    options: function options() {\n      var _this4 = this;\n\n      if (this.$isServer) return;\n      this.$nextTick(function () {\n        _this4.broadcast('ElSelectDropdown', 'updatePopper');\n      });\n      if (this.multiple) {\n        this.resetInputHeight();\n      }\n      var inputs = this.$el.querySelectorAll('input');\n      if ([].indexOf.call(inputs, document.activeElement) === -1) {\n        this.setSelected();\n      }\n      if (this.defaultFirstOption && (this.filterable || this.remote) && this.filteredOptionsCount) {\n        this.checkDefaultFirstOption();\n      }\n    }\n  },\n\n  methods: {\n    handleNavigate: function handleNavigate(direction) {\n      if (this.isOnComposition) return;\n\n      this.navigateOptions(direction);\n    },\n    handleComposition: function handleComposition(event) {\n      var _this5 = this;\n\n      var text = event.target.value;\n      if (event.type === 'compositionend') {\n        this.isOnComposition = false;\n        this.$nextTick(function (_) {\n          return _this5.handleQueryChange(text);\n        });\n      } else {\n        var lastCharacter = text[text.length - 1] || '';\n        this.isOnComposition = !Object(shared_[\"isKorean\"])(lastCharacter);\n      }\n    },\n    handleQueryChange: function handleQueryChange(val) {\n      var _this6 = this;\n\n      if (this.previousQuery === val || this.isOnComposition) return;\n      if (this.previousQuery === null && (typeof this.filterMethod === 'function' || typeof this.remoteMethod === 'function')) {\n        this.previousQuery = val;\n        return;\n      }\n      this.previousQuery = val;\n      this.$nextTick(function () {\n        if (_this6.visible) _this6.broadcast('ElSelectDropdown', 'updatePopper');\n      });\n      this.hoverIndex = -1;\n      if (this.multiple && this.filterable) {\n        this.$nextTick(function () {\n          var length = _this6.$refs.input.value.length * 15 + 20;\n          _this6.inputLength = _this6.collapseTags ? Math.min(50, length) : length;\n          _this6.managePlaceholder();\n          _this6.resetInputHeight();\n        });\n      }\n      if (this.remote && typeof this.remoteMethod === 'function') {\n        this.hoverIndex = -1;\n        this.remoteMethod(val);\n      } else if (typeof this.filterMethod === 'function') {\n        this.filterMethod(val);\n        this.broadcast('ElOptionGroup', 'queryChange');\n      } else {\n        this.filteredOptionsCount = this.optionsCount;\n        this.broadcast('ElOption', 'queryChange', val);\n        this.broadcast('ElOptionGroup', 'queryChange');\n      }\n      if (this.defaultFirstOption && (this.filterable || this.remote) && this.filteredOptionsCount) {\n        this.checkDefaultFirstOption();\n      }\n    },\n    scrollToOption: function scrollToOption(option) {\n      var target = Array.isArray(option) && option[0] ? option[0].$el : option.$el;\n      if (this.$refs.popper && target) {\n        var menu = this.$refs.popper.$el.querySelector('.el-select-dropdown__wrap');\n        scroll_into_view_default()(menu, target);\n      }\n      this.$refs.scrollbar && this.$refs.scrollbar.handleScroll();\n    },\n    handleMenuEnter: function handleMenuEnter() {\n      var _this7 = this;\n\n      this.$nextTick(function () {\n        return _this7.scrollToOption(_this7.selected);\n      });\n    },\n    emitChange: function emitChange(val) {\n      if (!Object(util_[\"valueEquals\"])(this.value, val)) {\n        this.$emit('change', val);\n      }\n    },\n    getOption: function getOption(value) {\n      var option = void 0;\n      var isObject = Object.prototype.toString.call(value).toLowerCase() === '[object object]';\n      var isNull = Object.prototype.toString.call(value).toLowerCase() === '[object null]';\n      var isUndefined = Object.prototype.toString.call(value).toLowerCase() === '[object undefined]';\n\n      for (var i = this.cachedOptions.length - 1; i >= 0; i--) {\n        var cachedOption = this.cachedOptions[i];\n        var isEqual = isObject ? Object(util_[\"getValueByPath\"])(cachedOption.value, this.valueKey) === Object(util_[\"getValueByPath\"])(value, this.valueKey) : cachedOption.value === value;\n        if (isEqual) {\n          option = cachedOption;\n          break;\n        }\n      }\n      if (option) return option;\n      var label = !isObject && !isNull && !isUndefined ? String(value) : '';\n      var newOption = {\n        value: value,\n        currentLabel: label\n      };\n      if (this.multiple) {\n        newOption.hitState = false;\n      }\n      return newOption;\n    },\n    setSelected: function setSelected() {\n      var _this8 = this;\n\n      if (!this.multiple) {\n        var option = this.getOption(this.value);\n        if (option.created) {\n          this.createdLabel = option.currentLabel;\n          this.createdSelected = true;\n        } else {\n          this.createdSelected = false;\n        }\n        this.selectedLabel = option.currentLabel;\n        this.selected = option;\n        if (this.filterable) this.query = this.selectedLabel;\n        return;\n      }\n      var result = [];\n      if (Array.isArray(this.value)) {\n        this.value.forEach(function (value) {\n          result.push(_this8.getOption(value));\n        });\n      }\n      this.selected = result;\n      this.$nextTick(function () {\n        _this8.resetInputHeight();\n      });\n    },\n    handleFocus: function handleFocus(event) {\n      if (!this.softFocus) {\n        if (this.automaticDropdown || this.filterable) {\n          if (this.filterable && !this.visible) {\n            this.menuVisibleOnFocus = true;\n          }\n          this.visible = true;\n        }\n        this.$emit('focus', event);\n      } else {\n        this.softFocus = false;\n      }\n    },\n    blur: function blur() {\n      this.visible = false;\n      this.$refs.reference.blur();\n    },\n    handleBlur: function handleBlur(event) {\n      var _this9 = this;\n\n      setTimeout(function () {\n        if (_this9.isSilentBlur) {\n          _this9.isSilentBlur = false;\n        } else {\n          _this9.$emit('blur', event);\n        }\n      }, 50);\n      this.softFocus = false;\n    },\n    handleClearClick: function handleClearClick(event) {\n      this.deleteSelected(event);\n    },\n    doDestroy: function doDestroy() {\n      this.$refs.popper && this.$refs.popper.doDestroy();\n    },\n    handleClose: function handleClose() {\n      this.visible = false;\n    },\n    toggleLastOptionHitState: function toggleLastOptionHitState(hit) {\n      if (!Array.isArray(this.selected)) return;\n      var option = this.selected[this.selected.length - 1];\n      if (!option) return;\n\n      if (hit === true || hit === false) {\n        option.hitState = hit;\n        return hit;\n      }\n\n      option.hitState = !option.hitState;\n      return option.hitState;\n    },\n    deletePrevTag: function deletePrevTag(e) {\n      if (e.target.value.length <= 0 && !this.toggleLastOptionHitState()) {\n        var value = this.value.slice();\n        value.pop();\n        this.$emit('input', value);\n        this.emitChange(value);\n      }\n    },\n    managePlaceholder: function managePlaceholder() {\n      if (this.currentPlaceholder !== '') {\n        this.currentPlaceholder = this.$refs.input.value ? '' : this.cachedPlaceHolder;\n      }\n    },\n    resetInputState: function resetInputState(e) {\n      if (e.keyCode !== 8) this.toggleLastOptionHitState(false);\n      this.inputLength = this.$refs.input.value.length * 15 + 20;\n      this.resetInputHeight();\n    },\n    resetInputHeight: function resetInputHeight() {\n      var _this10 = this;\n\n      if (this.collapseTags && !this.filterable) return;\n      this.$nextTick(function () {\n        if (!_this10.$refs.reference) return;\n        var inputChildNodes = _this10.$refs.reference.$el.childNodes;\n        var input = [].filter.call(inputChildNodes, function (item) {\n          return item.tagName === 'INPUT';\n        })[0];\n        var tags = _this10.$refs.tags;\n        var tagsHeight = tags ? Math.round(tags.getBoundingClientRect().height) : 0;\n        var sizeInMap = _this10.initialInputHeight || 40;\n        input.style.height = _this10.selected.length === 0 ? sizeInMap + 'px' : Math.max(tags ? tagsHeight + (tagsHeight > sizeInMap ? 6 : 0) : 0, sizeInMap) + 'px';\n        if (_this10.visible && _this10.emptyText !== false) {\n          _this10.broadcast('ElSelectDropdown', 'updatePopper');\n        }\n      });\n    },\n    resetHoverIndex: function resetHoverIndex() {\n      var _this11 = this;\n\n      setTimeout(function () {\n        if (!_this11.multiple) {\n          _this11.hoverIndex = _this11.options.indexOf(_this11.selected);\n        } else {\n          if (_this11.selected.length > 0) {\n            _this11.hoverIndex = Math.min.apply(null, _this11.selected.map(function (item) {\n              return _this11.options.indexOf(item);\n            }));\n          } else {\n            _this11.hoverIndex = -1;\n          }\n        }\n      }, 300);\n    },\n    handleOptionSelect: function handleOptionSelect(option, byClick) {\n      var _this12 = this;\n\n      if (this.multiple) {\n        var value = (this.value || []).slice();\n        var optionIndex = this.getValueIndex(value, option.value);\n        if (optionIndex > -1) {\n          value.splice(optionIndex, 1);\n        } else if (this.multipleLimit <= 0 || value.length < this.multipleLimit) {\n          value.push(option.value);\n        }\n        this.$emit('input', value);\n        this.emitChange(value);\n        if (option.created) {\n          this.query = '';\n          this.handleQueryChange('');\n          this.inputLength = 20;\n        }\n        if (this.filterable) this.$refs.input.focus();\n      } else {\n        this.$emit('input', option.value);\n        this.emitChange(option.value);\n        this.visible = false;\n      }\n      this.isSilentBlur = byClick;\n      this.setSoftFocus();\n      if (this.visible) return;\n      this.$nextTick(function () {\n        _this12.scrollToOption(option);\n      });\n    },\n    setSoftFocus: function setSoftFocus() {\n      this.softFocus = true;\n      var input = this.$refs.input || this.$refs.reference;\n      if (input) {\n        input.focus();\n      }\n    },\n    getValueIndex: function getValueIndex() {\n      var arr = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n      var value = arguments[1];\n\n      var isObject = Object.prototype.toString.call(value).toLowerCase() === '[object object]';\n      if (!isObject) {\n        return arr.indexOf(value);\n      } else {\n        var valueKey = this.valueKey;\n        var index = -1;\n        arr.some(function (item, i) {\n          if (Object(util_[\"getValueByPath\"])(item, valueKey) === Object(util_[\"getValueByPath\"])(value, valueKey)) {\n            index = i;\n            return true;\n          }\n          return false;\n        });\n        return index;\n      }\n    },\n    toggleMenu: function toggleMenu() {\n      if (!this.selectDisabled) {\n        if (this.menuVisibleOnFocus) {\n          this.menuVisibleOnFocus = false;\n        } else {\n          this.visible = !this.visible;\n        }\n        if (this.visible) {\n          (this.$refs.input || this.$refs.reference).focus();\n        }\n      }\n    },\n    selectOption: function selectOption() {\n      if (!this.visible) {\n        this.toggleMenu();\n      } else {\n        if (this.options[this.hoverIndex]) {\n          this.handleOptionSelect(this.options[this.hoverIndex]);\n        }\n      }\n    },\n    deleteSelected: function deleteSelected(event) {\n      event.stopPropagation();\n      var value = this.multiple ? [] : '';\n      this.$emit('input', value);\n      this.emitChange(value);\n      this.visible = false;\n      this.$emit('clear');\n    },\n    deleteTag: function deleteTag(event, tag) {\n      var index = this.selected.indexOf(tag);\n      if (index > -1 && !this.selectDisabled) {\n        var value = this.value.slice();\n        value.splice(index, 1);\n        this.$emit('input', value);\n        this.emitChange(value);\n        this.$emit('remove-tag', tag.value);\n      }\n      event.stopPropagation();\n    },\n    onInputChange: function onInputChange() {\n      if (this.filterable && this.query !== this.selectedLabel) {\n        this.query = this.selectedLabel;\n        this.handleQueryChange(this.query);\n      }\n    },\n    onOptionDestroy: function onOptionDestroy(index) {\n      if (index > -1) {\n        this.optionsCount--;\n        this.filteredOptionsCount--;\n        this.options.splice(index, 1);\n      }\n    },\n    resetInputWidth: function resetInputWidth() {\n      this.inputWidth = this.$refs.reference.$el.getBoundingClientRect().width;\n    },\n    handleResize: function handleResize() {\n      this.resetInputWidth();\n      if (this.multiple) this.resetInputHeight();\n    },\n    checkDefaultFirstOption: function checkDefaultFirstOption() {\n      this.hoverIndex = -1;\n      // highlight the created option\n      var hasCreated = false;\n      for (var i = this.options.length - 1; i >= 0; i--) {\n        if (this.options[i].created) {\n          hasCreated = true;\n          this.hoverIndex = i;\n          break;\n        }\n      }\n      if (hasCreated) return;\n      for (var _i = 0; _i !== this.options.length; ++_i) {\n        var option = this.options[_i];\n        if (this.query) {\n          // highlight first options that passes the filter\n          if (!option.disabled && !option.groupDisabled && option.visible) {\n            this.hoverIndex = _i;\n            break;\n          }\n        } else {\n          // highlight currently selected option\n          if (option.itemSelected) {\n            this.hoverIndex = _i;\n            break;\n          }\n        }\n      }\n    },\n    getValueKey: function getValueKey(item) {\n      if (Object.prototype.toString.call(item.value).toLowerCase() !== '[object object]') {\n        return item.value;\n      } else {\n        return Object(util_[\"getValueByPath\"])(item.value, this.valueKey);\n      }\n    }\n  },\n\n  created: function created() {\n    var _this13 = this;\n\n    this.cachedPlaceHolder = this.currentPlaceholder = this.propPlaceholder;\n    if (this.multiple && !Array.isArray(this.value)) {\n      this.$emit('input', []);\n    }\n    if (!this.multiple && Array.isArray(this.value)) {\n      this.$emit('input', '');\n    }\n\n    this.debouncedOnInputChange = debounce_default()(this.debounce, function () {\n      _this13.onInputChange();\n    });\n\n    this.debouncedQueryChange = debounce_default()(this.debounce, function (e) {\n      _this13.handleQueryChange(e.target.value);\n    });\n\n    this.$on('handleOptionClick', this.handleOptionSelect);\n    this.$on('setSelected', this.setSelected);\n  },\n  mounted: function mounted() {\n    var _this14 = this;\n\n    if (this.multiple && Array.isArray(this.value) && this.value.length > 0) {\n      this.currentPlaceholder = '';\n    }\n    Object(resize_event_[\"addResizeListener\"])(this.$el, this.handleResize);\n\n    var reference = this.$refs.reference;\n    if (reference && reference.$el) {\n      var sizeMap = {\n        medium: 36,\n        small: 32,\n        mini: 28\n      };\n      var input = reference.$el.querySelector('input');\n      this.initialInputHeight = input.getBoundingClientRect().height || sizeMap[this.selectSize];\n    }\n    if (this.remote && this.multiple) {\n      this.resetInputHeight();\n    }\n    this.$nextTick(function () {\n      if (reference && reference.$el) {\n        _this14.inputWidth = reference.$el.getBoundingClientRect().width;\n      }\n    });\n    this.setSelected();\n  },\n  beforeDestroy: function beforeDestroy() {\n    if (this.$el && this.handleResize) Object(resize_event_[\"removeResizeListener\"])(this.$el, this.handleResize);\n  }\n});\n// CONCATENATED MODULE: ./packages/select/src/select.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_selectvue_type_script_lang_js_ = (selectvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/select/src/select.vue\n\n\n\n\n\n/* normalize component */\n\nvar select_component = normalizeComponent(\n  src_selectvue_type_script_lang_js_,\n  selectvue_type_template_id_0e4aade6_render,\n  selectvue_type_template_id_0e4aade6_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var select_api; }\nselect_component.options.__file = \"packages/select/src/select.vue\"\n/* harmony default export */ var src_select = (select_component.exports);\n// CONCATENATED MODULE: ./packages/select/index.js\n\n\n/* istanbul ignore next */\nsrc_select.install = function (Vue) {\n  Vue.component(src_select.name, src_select);\n};\n\n/* harmony default export */ var packages_select = (src_select);\n// CONCATENATED MODULE: ./packages/option/index.js\n\n\n/* istanbul ignore next */\nsrc_option.install = function (Vue) {\n  Vue.component(src_option.name, src_option);\n};\n\n/* harmony default export */ var packages_option = (src_option);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/select/src/option-group.vue?vue&type=template&id=6685e5de&\nvar option_groupvue_type_template_id_6685e5de_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"ul\",\n    {\n      directives: [\n        {\n          name: \"show\",\n          rawName: \"v-show\",\n          value: _vm.visible,\n          expression: \"visible\"\n        }\n      ],\n      staticClass: \"el-select-group__wrap\"\n    },\n    [\n      _c(\"li\", { staticClass: \"el-select-group__title\" }, [\n        _vm._v(_vm._s(_vm.label))\n      ]),\n      _c(\"li\", [\n        _c(\"ul\", { staticClass: \"el-select-group\" }, [_vm._t(\"default\")], 2)\n      ])\n    ]\n  )\n}\nvar option_groupvue_type_template_id_6685e5de_staticRenderFns = []\noption_groupvue_type_template_id_6685e5de_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/select/src/option-group.vue?vue&type=template&id=6685e5de&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/select/src/option-group.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n/* harmony default export */ var option_groupvue_type_script_lang_js_ = ({\n  mixins: [emitter_default.a],\n\n  name: 'ElOptionGroup',\n\n  componentName: 'ElOptionGroup',\n\n  props: {\n    label: String,\n    disabled: {\n      type: Boolean,\n      default: false\n    }\n  },\n\n  data: function data() {\n    return {\n      visible: true\n    };\n  },\n\n\n  watch: {\n    disabled: function disabled(val) {\n      this.broadcast('ElOption', 'handleGroupDisabled', val);\n    }\n  },\n\n  methods: {\n    queryChange: function queryChange() {\n      this.visible = this.$children && Array.isArray(this.$children) && this.$children.some(function (option) {\n        return option.visible === true;\n      });\n    }\n  },\n\n  created: function created() {\n    this.$on('queryChange', this.queryChange);\n  },\n  mounted: function mounted() {\n    if (this.disabled) {\n      this.broadcast('ElOption', 'handleGroupDisabled', this.disabled);\n    }\n  }\n});\n// CONCATENATED MODULE: ./packages/select/src/option-group.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_option_groupvue_type_script_lang_js_ = (option_groupvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/select/src/option-group.vue\n\n\n\n\n\n/* normalize component */\n\nvar option_group_component = normalizeComponent(\n  src_option_groupvue_type_script_lang_js_,\n  option_groupvue_type_template_id_6685e5de_render,\n  option_groupvue_type_template_id_6685e5de_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var option_group_api; }\noption_group_component.options.__file = \"packages/select/src/option-group.vue\"\n/* harmony default export */ var option_group = (option_group_component.exports);\n// CONCATENATED MODULE: ./packages/option-group/index.js\n\n\n/* istanbul ignore next */\noption_group.install = function (Vue) {\n  Vue.component(option_group.name, option_group);\n};\n\n/* harmony default export */ var packages_option_group = (option_group);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/button/src/button.vue?vue&type=template&id=ca859fb4&\nvar buttonvue_type_template_id_ca859fb4_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"button\",\n    {\n      staticClass: \"el-button\",\n      class: [\n        _vm.type ? \"el-button--\" + _vm.type : \"\",\n        _vm.buttonSize ? \"el-button--\" + _vm.buttonSize : \"\",\n        {\n          \"is-disabled\": _vm.buttonDisabled,\n          \"is-loading\": _vm.loading,\n          \"is-plain\": _vm.plain,\n          \"is-round\": _vm.round,\n          \"is-circle\": _vm.circle\n        }\n      ],\n      attrs: {\n        disabled: _vm.buttonDisabled || _vm.loading,\n        autofocus: _vm.autofocus,\n        type: _vm.nativeType\n      },\n      on: { click: _vm.handleClick }\n    },\n    [\n      _vm.loading ? _c(\"i\", { staticClass: \"el-icon-loading\" }) : _vm._e(),\n      _vm.icon && !_vm.loading ? _c(\"i\", { class: _vm.icon }) : _vm._e(),\n      _vm.$slots.default ? _c(\"span\", [_vm._t(\"default\")], 2) : _vm._e()\n    ]\n  )\n}\nvar buttonvue_type_template_id_ca859fb4_staticRenderFns = []\nbuttonvue_type_template_id_ca859fb4_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/button/src/button.vue?vue&type=template&id=ca859fb4&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/button/src/button.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ var buttonvue_type_script_lang_js_ = ({\n  name: 'ElButton',\n\n  inject: {\n    elForm: {\n      default: ''\n    },\n    elFormItem: {\n      default: ''\n    }\n  },\n\n  props: {\n    type: {\n      type: String,\n      default: 'default'\n    },\n    size: String,\n    icon: {\n      type: String,\n      default: ''\n    },\n    nativeType: {\n      type: String,\n      default: 'button'\n    },\n    loading: Boolean,\n    disabled: Boolean,\n    plain: Boolean,\n    autofocus: Boolean,\n    round: Boolean,\n    circle: Boolean\n  },\n\n  computed: {\n    _elFormItemSize: function _elFormItemSize() {\n      return (this.elFormItem || {}).elFormItemSize;\n    },\n    buttonSize: function buttonSize() {\n      return this.size || this._elFormItemSize || (this.$ELEMENT || {}).size;\n    },\n    buttonDisabled: function buttonDisabled() {\n      return this.$options.propsData.hasOwnProperty('disabled') ? this.disabled : (this.elForm || {}).disabled;\n    }\n  },\n\n  methods: {\n    handleClick: function handleClick(evt) {\n      this.$emit('click', evt);\n    }\n  }\n});\n// CONCATENATED MODULE: ./packages/button/src/button.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_buttonvue_type_script_lang_js_ = (buttonvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/button/src/button.vue\n\n\n\n\n\n/* normalize component */\n\nvar button_component = normalizeComponent(\n  src_buttonvue_type_script_lang_js_,\n  buttonvue_type_template_id_ca859fb4_render,\n  buttonvue_type_template_id_ca859fb4_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var button_api; }\nbutton_component.options.__file = \"packages/button/src/button.vue\"\n/* harmony default export */ var src_button = (button_component.exports);\n// CONCATENATED MODULE: ./packages/button/index.js\n\n\n/* istanbul ignore next */\nsrc_button.install = function (Vue) {\n  Vue.component(src_button.name, src_button);\n};\n\n/* harmony default export */ var packages_button = (src_button);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/button/src/button-group.vue?vue&type=template&id=3d8661d0&\nvar button_groupvue_type_template_id_3d8661d0_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\"div\", { staticClass: \"el-button-group\" }, [_vm._t(\"default\")], 2)\n}\nvar button_groupvue_type_template_id_3d8661d0_staticRenderFns = []\nbutton_groupvue_type_template_id_3d8661d0_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/button/src/button-group.vue?vue&type=template&id=3d8661d0&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/button/src/button-group.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n\n/* harmony default export */ var button_groupvue_type_script_lang_js_ = ({\n  name: 'ElButtonGroup'\n});\n// CONCATENATED MODULE: ./packages/button/src/button-group.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_button_groupvue_type_script_lang_js_ = (button_groupvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/button/src/button-group.vue\n\n\n\n\n\n/* normalize component */\n\nvar button_group_component = normalizeComponent(\n  src_button_groupvue_type_script_lang_js_,\n  button_groupvue_type_template_id_3d8661d0_render,\n  button_groupvue_type_template_id_3d8661d0_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var button_group_api; }\nbutton_group_component.options.__file = \"packages/button/src/button-group.vue\"\n/* harmony default export */ var button_group = (button_group_component.exports);\n// CONCATENATED MODULE: ./packages/button-group/index.js\n\n\n/* istanbul ignore next */\nbutton_group.install = function (Vue) {\n  Vue.component(button_group.name, button_group);\n};\n\n/* harmony default export */ var packages_button_group = (button_group);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/table/src/table.vue?vue&type=template&id=493fe34e&\nvar tablevue_type_template_id_493fe34e_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    {\n      staticClass: \"el-table\",\n      class: [\n        {\n          \"el-table--fit\": _vm.fit,\n          \"el-table--striped\": _vm.stripe,\n          \"el-table--border\": _vm.border || _vm.isGroup,\n          \"el-table--hidden\": _vm.isHidden,\n          \"el-table--group\": _vm.isGroup,\n          \"el-table--fluid-height\": _vm.maxHeight,\n          \"el-table--scrollable-x\": _vm.layout.scrollX,\n          \"el-table--scrollable-y\": _vm.layout.scrollY,\n          \"el-table--enable-row-hover\": !_vm.store.states.isComplex,\n          \"el-table--enable-row-transition\":\n            (_vm.store.states.data || []).length !== 0 &&\n            (_vm.store.states.data || []).length < 100\n        },\n        _vm.tableSize ? \"el-table--\" + _vm.tableSize : \"\"\n      ],\n      on: {\n        mouseleave: function($event) {\n          _vm.handleMouseLeave($event)\n        }\n      }\n    },\n    [\n      _c(\n        \"div\",\n        { ref: \"hiddenColumns\", staticClass: \"hidden-columns\" },\n        [_vm._t(\"default\")],\n        2\n      ),\n      _vm.showHeader\n        ? _c(\n            \"div\",\n            {\n              directives: [\n                {\n                  name: \"mousewheel\",\n                  rawName: \"v-mousewheel\",\n                  value: _vm.handleHeaderFooterMousewheel,\n                  expression: \"handleHeaderFooterMousewheel\"\n                }\n              ],\n              ref: \"headerWrapper\",\n              staticClass: \"el-table__header-wrapper\"\n            },\n            [\n              _c(\"table-header\", {\n                ref: \"tableHeader\",\n                style: {\n                  width: _vm.layout.bodyWidth ? _vm.layout.bodyWidth + \"px\" : \"\"\n                },\n                attrs: {\n                  store: _vm.store,\n                  border: _vm.border,\n                  \"default-sort\": _vm.defaultSort\n                }\n              })\n            ],\n            1\n          )\n        : _vm._e(),\n      _c(\n        \"div\",\n        {\n          ref: \"bodyWrapper\",\n          staticClass: \"el-table__body-wrapper\",\n          class: [\n            _vm.layout.scrollX\n              ? \"is-scrolling-\" + _vm.scrollPosition\n              : \"is-scrolling-none\"\n          ],\n          style: [_vm.bodyHeight]\n        },\n        [\n          _c(\"table-body\", {\n            style: {\n              width: _vm.bodyWidth\n            },\n            attrs: {\n              context: _vm.context,\n              store: _vm.store,\n              stripe: _vm.stripe,\n              \"row-class-name\": _vm.rowClassName,\n              \"row-style\": _vm.rowStyle,\n              highlight: _vm.highlightCurrentRow\n            }\n          }),\n          !_vm.data || _vm.data.length === 0\n            ? _c(\n                \"div\",\n                {\n                  ref: \"emptyBlock\",\n                  staticClass: \"el-table__empty-block\",\n                  style: _vm.emptyBlockStyle\n                },\n                [\n                  _c(\n                    \"span\",\n                    { staticClass: \"el-table__empty-text\" },\n                    [\n                      _vm._t(\"empty\", [\n                        _vm._v(\n                          _vm._s(_vm.emptyText || _vm.t(\"el.table.emptyText\"))\n                        )\n                      ])\n                    ],\n                    2\n                  )\n                ]\n              )\n            : _vm._e(),\n          _vm.$slots.append\n            ? _c(\n                \"div\",\n                {\n                  ref: \"appendWrapper\",\n                  staticClass: \"el-table__append-wrapper\"\n                },\n                [_vm._t(\"append\")],\n                2\n              )\n            : _vm._e()\n        ],\n        1\n      ),\n      _vm.showSummary\n        ? _c(\n            \"div\",\n            {\n              directives: [\n                {\n                  name: \"show\",\n                  rawName: \"v-show\",\n                  value: _vm.data && _vm.data.length > 0,\n                  expression: \"data && data.length > 0\"\n                },\n                {\n                  name: \"mousewheel\",\n                  rawName: \"v-mousewheel\",\n                  value: _vm.handleHeaderFooterMousewheel,\n                  expression: \"handleHeaderFooterMousewheel\"\n                }\n              ],\n              ref: \"footerWrapper\",\n              staticClass: \"el-table__footer-wrapper\"\n            },\n            [\n              _c(\"table-footer\", {\n                style: {\n                  width: _vm.layout.bodyWidth ? _vm.layout.bodyWidth + \"px\" : \"\"\n                },\n                attrs: {\n                  store: _vm.store,\n                  border: _vm.border,\n                  \"sum-text\": _vm.sumText || _vm.t(\"el.table.sumText\"),\n                  \"summary-method\": _vm.summaryMethod,\n                  \"default-sort\": _vm.defaultSort\n                }\n              })\n            ],\n            1\n          )\n        : _vm._e(),\n      _vm.fixedColumns.length > 0\n        ? _c(\n            \"div\",\n            {\n              directives: [\n                {\n                  name: \"mousewheel\",\n                  rawName: \"v-mousewheel\",\n                  value: _vm.handleFixedMousewheel,\n                  expression: \"handleFixedMousewheel\"\n                }\n              ],\n              ref: \"fixedWrapper\",\n              staticClass: \"el-table__fixed\",\n              style: [\n                {\n                  width: _vm.layout.fixedWidth\n                    ? _vm.layout.fixedWidth + \"px\"\n                    : \"\"\n                },\n                _vm.fixedHeight\n              ]\n            },\n            [\n              _vm.showHeader\n                ? _c(\n                    \"div\",\n                    {\n                      ref: \"fixedHeaderWrapper\",\n                      staticClass: \"el-table__fixed-header-wrapper\"\n                    },\n                    [\n                      _c(\"table-header\", {\n                        ref: \"fixedTableHeader\",\n                        style: {\n                          width: _vm.bodyWidth\n                        },\n                        attrs: {\n                          fixed: \"left\",\n                          border: _vm.border,\n                          store: _vm.store\n                        }\n                      })\n                    ],\n                    1\n                  )\n                : _vm._e(),\n              _c(\n                \"div\",\n                {\n                  ref: \"fixedBodyWrapper\",\n                  staticClass: \"el-table__fixed-body-wrapper\",\n                  style: [\n                    {\n                      top: _vm.layout.headerHeight + \"px\"\n                    },\n                    _vm.fixedBodyHeight\n                  ]\n                },\n                [\n                  _c(\"table-body\", {\n                    style: {\n                      width: _vm.bodyWidth\n                    },\n                    attrs: {\n                      fixed: \"left\",\n                      store: _vm.store,\n                      stripe: _vm.stripe,\n                      highlight: _vm.highlightCurrentRow,\n                      \"row-class-name\": _vm.rowClassName,\n                      \"row-style\": _vm.rowStyle\n                    }\n                  }),\n                  _vm.$slots.append\n                    ? _c(\"div\", {\n                        staticClass: \"el-table__append-gutter\",\n                        style: { height: _vm.layout.appendHeight + \"px\" }\n                      })\n                    : _vm._e()\n                ],\n                1\n              ),\n              _vm.showSummary\n                ? _c(\n                    \"div\",\n                    {\n                      directives: [\n                        {\n                          name: \"show\",\n                          rawName: \"v-show\",\n                          value: _vm.data && _vm.data.length > 0,\n                          expression: \"data && data.length > 0\"\n                        }\n                      ],\n                      ref: \"fixedFooterWrapper\",\n                      staticClass: \"el-table__fixed-footer-wrapper\"\n                    },\n                    [\n                      _c(\"table-footer\", {\n                        style: {\n                          width: _vm.bodyWidth\n                        },\n                        attrs: {\n                          fixed: \"left\",\n                          border: _vm.border,\n                          \"sum-text\": _vm.sumText || _vm.t(\"el.table.sumText\"),\n                          \"summary-method\": _vm.summaryMethod,\n                          store: _vm.store\n                        }\n                      })\n                    ],\n                    1\n                  )\n                : _vm._e()\n            ]\n          )\n        : _vm._e(),\n      _vm.rightFixedColumns.length > 0\n        ? _c(\n            \"div\",\n            {\n              directives: [\n                {\n                  name: \"mousewheel\",\n                  rawName: \"v-mousewheel\",\n                  value: _vm.handleFixedMousewheel,\n                  expression: \"handleFixedMousewheel\"\n                }\n              ],\n              ref: \"rightFixedWrapper\",\n              staticClass: \"el-table__fixed-right\",\n              style: [\n                {\n                  width: _vm.layout.rightFixedWidth\n                    ? _vm.layout.rightFixedWidth + \"px\"\n                    : \"\",\n                  right: _vm.layout.scrollY\n                    ? (_vm.border\n                        ? _vm.layout.gutterWidth\n                        : _vm.layout.gutterWidth || 0) + \"px\"\n                    : \"\"\n                },\n                _vm.fixedHeight\n              ]\n            },\n            [\n              _vm.showHeader\n                ? _c(\n                    \"div\",\n                    {\n                      ref: \"rightFixedHeaderWrapper\",\n                      staticClass: \"el-table__fixed-header-wrapper\"\n                    },\n                    [\n                      _c(\"table-header\", {\n                        ref: \"rightFixedTableHeader\",\n                        style: {\n                          width: _vm.bodyWidth\n                        },\n                        attrs: {\n                          fixed: \"right\",\n                          border: _vm.border,\n                          store: _vm.store\n                        }\n                      })\n                    ],\n                    1\n                  )\n                : _vm._e(),\n              _c(\n                \"div\",\n                {\n                  ref: \"rightFixedBodyWrapper\",\n                  staticClass: \"el-table__fixed-body-wrapper\",\n                  style: [\n                    {\n                      top: _vm.layout.headerHeight + \"px\"\n                    },\n                    _vm.fixedBodyHeight\n                  ]\n                },\n                [\n                  _c(\"table-body\", {\n                    style: {\n                      width: _vm.bodyWidth\n                    },\n                    attrs: {\n                      fixed: \"right\",\n                      store: _vm.store,\n                      stripe: _vm.stripe,\n                      \"row-class-name\": _vm.rowClassName,\n                      \"row-style\": _vm.rowStyle,\n                      highlight: _vm.highlightCurrentRow\n                    }\n                  }),\n                  _vm.$slots.append\n                    ? _c(\"div\", {\n                        staticClass: \"el-table__append-gutter\",\n                        style: { height: _vm.layout.appendHeight + \"px\" }\n                      })\n                    : _vm._e()\n                ],\n                1\n              ),\n              _vm.showSummary\n                ? _c(\n                    \"div\",\n                    {\n                      directives: [\n                        {\n                          name: \"show\",\n                          rawName: \"v-show\",\n                          value: _vm.data && _vm.data.length > 0,\n                          expression: \"data && data.length > 0\"\n                        }\n                      ],\n                      ref: \"rightFixedFooterWrapper\",\n                      staticClass: \"el-table__fixed-footer-wrapper\"\n                    },\n                    [\n                      _c(\"table-footer\", {\n                        style: {\n                          width: _vm.bodyWidth\n                        },\n                        attrs: {\n                          fixed: \"right\",\n                          border: _vm.border,\n                          \"sum-text\": _vm.sumText || _vm.t(\"el.table.sumText\"),\n                          \"summary-method\": _vm.summaryMethod,\n                          store: _vm.store\n                        }\n                      })\n                    ],\n                    1\n                  )\n                : _vm._e()\n            ]\n          )\n        : _vm._e(),\n      _vm.rightFixedColumns.length > 0\n        ? _c(\"div\", {\n            ref: \"rightFixedPatch\",\n            staticClass: \"el-table__fixed-right-patch\",\n            style: {\n              width: _vm.layout.scrollY ? _vm.layout.gutterWidth + \"px\" : \"0\",\n              height: _vm.layout.headerHeight + \"px\"\n            }\n          })\n        : _vm._e(),\n      _c(\"div\", {\n        directives: [\n          {\n            name: \"show\",\n            rawName: \"v-show\",\n            value: _vm.resizeProxyVisible,\n            expression: \"resizeProxyVisible\"\n          }\n        ],\n        ref: \"resizeProxy\",\n        staticClass: \"el-table__column-resize-proxy\"\n      })\n    ]\n  )\n}\nvar tablevue_type_template_id_493fe34e_staticRenderFns = []\ntablevue_type_template_id_493fe34e_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/table/src/table.vue?vue&type=template&id=493fe34e&\n\n// EXTERNAL MODULE: external \"element-ui/lib/checkbox\"\nvar checkbox_ = __nested_webpack_require_8926__(14);\nvar checkbox_default = /*#__PURE__*/__nested_webpack_require_8926__.n(checkbox_);\n\n// EXTERNAL MODULE: external \"throttle-debounce\"\nvar external_throttle_debounce_ = __nested_webpack_require_8926__(36);\n\n// EXTERNAL MODULE: external \"normalize-wheel\"\nvar external_normalize_wheel_ = __nested_webpack_require_8926__(39);\nvar external_normalize_wheel_default = /*#__PURE__*/__nested_webpack_require_8926__.n(external_normalize_wheel_);\n\n// CONCATENATED MODULE: ./src/directives/mousewheel.js\n\n\nvar isFirefox = typeof navigator !== 'undefined' && navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\n\nvar mousewheel_mousewheel = function mousewheel(element, callback) {\n  if (element && element.addEventListener) {\n    element.addEventListener(isFirefox ? 'DOMMouseScroll' : 'mousewheel', function (event) {\n      var normalized = external_normalize_wheel_default()(event);\n      callback && callback.apply(this, [event, normalized]);\n    });\n  }\n};\n\n/* harmony default export */ var directives_mousewheel = ({\n  bind: function bind(el, binding) {\n    mousewheel_mousewheel(el, binding.value);\n  }\n});\n// EXTERNAL MODULE: external \"vue\"\nvar external_vue_ = __nested_webpack_require_8926__(6);\nvar external_vue_default = /*#__PURE__*/__nested_webpack_require_8926__.n(external_vue_);\n\n// CONCATENATED MODULE: ./packages/table/src/util.js\nvar util_typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n\n\nvar getCell = function getCell(event) {\n  var cell = event.target;\n\n  while (cell && cell.tagName.toUpperCase() !== 'HTML') {\n    if (cell.tagName.toUpperCase() === 'TD') {\n      return cell;\n    }\n    cell = cell.parentNode;\n  }\n\n  return null;\n};\n\nvar util_isObject = function isObject(obj) {\n  return obj !== null && (typeof obj === 'undefined' ? 'undefined' : util_typeof(obj)) === 'object';\n};\n\nvar util_orderBy = function orderBy(array, sortKey, reverse, sortMethod, sortBy) {\n  if (!sortKey && !sortMethod && (!sortBy || Array.isArray(sortBy) && !sortBy.length)) {\n    return array;\n  }\n  if (typeof reverse === 'string') {\n    reverse = reverse === 'descending' ? -1 : 1;\n  } else {\n    reverse = reverse && reverse < 0 ? -1 : 1;\n  }\n  var getKey = sortMethod ? null : function (value, index) {\n    if (sortBy) {\n      if (!Array.isArray(sortBy)) {\n        sortBy = [sortBy];\n      }\n      return sortBy.map(function (by) {\n        if (typeof by === 'string') {\n          return Object(util_[\"getValueByPath\"])(value, by);\n        } else {\n          return by(value, index, array);\n        }\n      });\n    }\n    if (sortKey !== '$key') {\n      if (util_isObject(value) && '$value' in value) value = value.$value;\n    }\n    return [util_isObject(value) ? Object(util_[\"getValueByPath\"])(value, sortKey) : value];\n  };\n  var compare = function compare(a, b) {\n    if (sortMethod) {\n      return sortMethod(a.value, b.value);\n    }\n    for (var i = 0, len = a.key.length; i < len; i++) {\n      if (a.key[i] < b.key[i]) {\n        return -1;\n      }\n      if (a.key[i] > b.key[i]) {\n        return 1;\n      }\n    }\n    return 0;\n  };\n  return array.map(function (value, index) {\n    return {\n      value: value,\n      index: index,\n      key: getKey ? getKey(value, index) : null\n    };\n  }).sort(function (a, b) {\n    var order = compare(a, b);\n    if (!order) {\n      // make stable https://en.wikipedia.org/wiki/Sorting_algorithm#Stability\n      order = a.index - b.index;\n    }\n    return order * reverse;\n  }).map(function (item) {\n    return item.value;\n  });\n};\n\nvar getColumnById = function getColumnById(table, columnId) {\n  var column = null;\n  table.columns.forEach(function (item) {\n    if (item.id === columnId) {\n      column = item;\n    }\n  });\n  return column;\n};\n\nvar getColumnByKey = function getColumnByKey(table, columnKey) {\n  var column = null;\n  for (var i = 0; i < table.columns.length; i++) {\n    var item = table.columns[i];\n    if (item.columnKey === columnKey) {\n      column = item;\n      break;\n    }\n  }\n  return column;\n};\n\nvar getColumnByCell = function getColumnByCell(table, cell) {\n  var matches = (cell.className || '').match(/el-table_[^\\s]+/gm);\n  if (matches) {\n    return getColumnById(table, matches[0]);\n  }\n  return null;\n};\n\nvar getRowIdentity = function getRowIdentity(row, rowKey) {\n  if (!row) throw new Error('row is required when get row identity');\n  if (typeof rowKey === 'string') {\n    if (rowKey.indexOf('.') < 0) {\n      return row[rowKey];\n    }\n    var key = rowKey.split('.');\n    var current = row;\n    for (var i = 0; i < key.length; i++) {\n      current = current[key[i]];\n    }\n    return current;\n  } else if (typeof rowKey === 'function') {\n    return rowKey.call(null, row);\n  }\n};\n\nvar getKeysMap = function getKeysMap(array, rowKey) {\n  var arrayMap = {};\n  (array || []).forEach(function (row, index) {\n    arrayMap[getRowIdentity(row, rowKey)] = { row: row, index: index };\n  });\n  return arrayMap;\n};\n\nfunction hasOwn(obj, key) {\n  return Object.prototype.hasOwnProperty.call(obj, key);\n}\n\nfunction mergeOptions(defaults, config) {\n  var options = {};\n  var key = void 0;\n  for (key in defaults) {\n    options[key] = defaults[key];\n  }\n  for (key in config) {\n    if (hasOwn(config, key)) {\n      var value = config[key];\n      if (typeof value !== 'undefined') {\n        options[key] = value;\n      }\n    }\n  }\n  return options;\n}\n\nfunction parseWidth(width) {\n  if (width !== undefined) {\n    width = parseInt(width, 10);\n    if (isNaN(width)) {\n      width = null;\n    }\n  }\n  return width;\n}\n\nfunction parseMinWidth(minWidth) {\n  if (typeof minWidth !== 'undefined') {\n    minWidth = parseWidth(minWidth);\n    if (isNaN(minWidth)) {\n      minWidth = 80;\n    }\n  }\n  return minWidth;\n};\n\nfunction parseHeight(height) {\n  if (typeof height === 'number') {\n    return height;\n  }\n  if (typeof height === 'string') {\n    if (/^\\d+(?:px)?$/.test(height)) {\n      return parseInt(height, 10);\n    } else {\n      return height;\n    }\n  }\n  return null;\n}\n\n// https://github.com/reduxjs/redux/blob/master/src/compose.js\nfunction compose() {\n  for (var _len = arguments.length, funcs = Array(_len), _key = 0; _key < _len; _key++) {\n    funcs[_key] = arguments[_key];\n  }\n\n  if (funcs.length === 0) {\n    return function (arg) {\n      return arg;\n    };\n  }\n  if (funcs.length === 1) {\n    return funcs[0];\n  }\n  return funcs.reduce(function (a, b) {\n    return function () {\n      return a(b.apply(undefined, arguments));\n    };\n  });\n}\n\nfunction toggleRowStatus(statusArr, row, newVal) {\n  var changed = false;\n  var index = statusArr.indexOf(row);\n  var included = index !== -1;\n\n  var addRow = function addRow() {\n    statusArr.push(row);\n    changed = true;\n  };\n  var removeRow = function removeRow() {\n    statusArr.splice(index, 1);\n    changed = true;\n  };\n\n  if (typeof newVal === 'boolean') {\n    if (newVal && !included) {\n      addRow();\n    } else if (!newVal && included) {\n      removeRow();\n    }\n  } else {\n    if (included) {\n      removeRow();\n    } else {\n      addRow();\n    }\n  }\n  return changed;\n}\n\nfunction walkTreeNode(root, cb) {\n  var childrenKey = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'children';\n  var lazyKey = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'hasChildren';\n\n  var isNil = function isNil(array) {\n    return !(Array.isArray(array) && array.length);\n  };\n\n  function _walker(parent, children, level) {\n    cb(parent, children, level);\n    children.forEach(function (item) {\n      if (item[lazyKey]) {\n        cb(item, null, level + 1);\n        return;\n      }\n      var children = item[childrenKey];\n      if (!isNil(children)) {\n        _walker(item, children, level + 1);\n      }\n    });\n  }\n\n  root.forEach(function (item) {\n    if (item[lazyKey]) {\n      cb(item, null, 0);\n      return;\n    }\n    var children = item[childrenKey];\n    if (!isNil(children)) {\n      _walker(item, children, 0);\n    }\n  });\n}\n\nvar objectEquals = function objectEquals(objectA, objectB) {\n  // 取对象a和b的属性名\n  var aProps = Object.getOwnPropertyNames(objectA);\n  var bProps = Object.getOwnPropertyNames(objectB);\n  // 判断属性名的length是否一致\n  if (aProps.length !== bProps.length) {\n    return false;\n  }\n  // 循环取出属性名,再判断属性值是否一致\n  for (var i = 0; i < aProps.length; i++) {\n    var propName = aProps[i];\n    if (objectA[propName] !== objectB[propName]) {\n      return false;\n    }\n  }\n  return true;\n};\n// CONCATENATED MODULE: ./packages/table/src/store/expand.js\n\n\n/* harmony default export */ var expand = ({\n  data: function data() {\n    return {\n      states: {\n        defaultExpandAll: false,\n        expandRows: []\n      }\n    };\n  },\n\n\n  methods: {\n    updateExpandRows: function updateExpandRows() {\n      var _states = this.states,\n          _states$data = _states.data,\n          data = _states$data === undefined ? [] : _states$data,\n          rowKey = _states.rowKey,\n          defaultExpandAll = _states.defaultExpandAll,\n          expandRows = _states.expandRows;\n\n      if (defaultExpandAll) {\n        this.states.expandRows = data.slice();\n      } else if (rowKey) {\n        // TODO:这里的代码可以优化\n        var expandRowsMap = getKeysMap(expandRows, rowKey);\n        this.states.expandRows = data.reduce(function (prev, row) {\n          var rowId = getRowIdentity(row, rowKey);\n          var rowInfo = expandRowsMap[rowId];\n          if (rowInfo) {\n            prev.push(row);\n          }\n          return prev;\n        }, []);\n      } else {\n        this.states.expandRows = [];\n      }\n    },\n    toggleRowExpansion: function toggleRowExpansion(row, expanded) {\n      var changed = toggleRowStatus(this.states.expandRows, row, expanded);\n      if (changed) {\n        this.table.$emit('expand-change', row, this.states.expandRows.slice());\n        this.scheduleLayout();\n      }\n    },\n    setExpandRowKeys: function setExpandRowKeys(rowKeys) {\n      this.assertRowKey();\n      // TODO:这里的代码可以优化\n      var _states2 = this.states,\n          data = _states2.data,\n          rowKey = _states2.rowKey;\n\n      var keysMap = getKeysMap(data, rowKey);\n      this.states.expandRows = rowKeys.reduce(function (prev, cur) {\n        var info = keysMap[cur];\n        if (info) {\n          prev.push(info.row);\n        }\n        return prev;\n      }, []);\n    },\n    isRowExpanded: function isRowExpanded(row) {\n      var _states3 = this.states,\n          _states3$expandRows = _states3.expandRows,\n          expandRows = _states3$expandRows === undefined ? [] : _states3$expandRows,\n          rowKey = _states3.rowKey;\n\n      if (rowKey) {\n        var expandMap = getKeysMap(expandRows, rowKey);\n        return !!expandMap[getRowIdentity(row, rowKey)];\n      }\n      return expandRows.indexOf(row) !== -1;\n    }\n  }\n});\n// CONCATENATED MODULE: ./packages/table/src/store/current.js\n\n\n\n/* harmony default export */ var store_current = ({\n  data: function data() {\n    return {\n      states: {\n        // 不可响应的,设置 currentRowKey 时,data 不一定存在,也许无法算出正确的 currentRow\n        // 把该值缓存一下,当用户点击修改 currentRow 时,把该值重置为 null\n        _currentRowKey: null,\n        currentRow: null\n      }\n    };\n  },\n\n\n  methods: {\n    setCurrentRowKey: function setCurrentRowKey(key) {\n      this.assertRowKey();\n      this.states._currentRowKey = key;\n      this.setCurrentRowByKey(key);\n    },\n    restoreCurrentRowKey: function restoreCurrentRowKey() {\n      this.states._currentRowKey = null;\n    },\n    setCurrentRowByKey: function setCurrentRowByKey(key) {\n      var states = this.states;\n      var _states$data = states.data,\n          data = _states$data === undefined ? [] : _states$data,\n          rowKey = states.rowKey;\n\n      var currentRow = null;\n      if (rowKey) {\n        currentRow = Object(util_[\"arrayFind\"])(data, function (item) {\n          return getRowIdentity(item, rowKey) === key;\n        });\n      }\n      states.currentRow = currentRow;\n    },\n    updateCurrentRow: function updateCurrentRow(currentRow) {\n      var states = this.states,\n          table = this.table;\n\n      var oldCurrentRow = states.currentRow;\n      if (currentRow && currentRow !== oldCurrentRow) {\n        states.currentRow = currentRow;\n        table.$emit('current-change', currentRow, oldCurrentRow);\n        return;\n      }\n      if (!currentRow && oldCurrentRow) {\n        states.currentRow = null;\n        table.$emit('current-change', null, oldCurrentRow);\n      }\n    },\n    updateCurrentRowData: function updateCurrentRowData() {\n      var states = this.states,\n          table = this.table;\n      var rowKey = states.rowKey,\n          _currentRowKey = states._currentRowKey;\n      // data 为 null 时,解构时的默认值会被忽略\n\n      var data = states.data || [];\n      var oldCurrentRow = states.currentRow;\n\n      // 当 currentRow 不在 data 中时尝试更新数据\n      if (data.indexOf(oldCurrentRow) === -1 && oldCurrentRow) {\n        if (rowKey) {\n          var currentRowKey = getRowIdentity(oldCurrentRow, rowKey);\n          this.setCurrentRowByKey(currentRowKey);\n        } else {\n          states.currentRow = null;\n        }\n        if (states.currentRow === null) {\n          table.$emit('current-change', null, oldCurrentRow);\n        }\n      } else if (_currentRowKey) {\n        // 把初始时下设置的 rowKey 转化成 rowData\n        this.setCurrentRowByKey(_currentRowKey);\n        this.restoreCurrentRowKey();\n      }\n    }\n  }\n});\n// CONCATENATED MODULE: ./packages/table/src/store/tree.js\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\n\n\n/* harmony default export */ var tree = ({\n  data: function data() {\n    return {\n      states: {\n        // defaultExpandAll 存在于 expand.js 中,这里不重复添加\n        // 在展开行中,expandRowKeys 会被转化成 expandRows,expandRowKeys 这个属性只是记录了 TreeTable 行的展开\n        // TODO: 拆分为独立的 TreeTable,统一用法\n        expandRowKeys: [],\n        treeData: {},\n        indent: 16,\n        lazy: false,\n        lazyTreeNodeMap: {},\n        lazyColumnIdentifier: 'hasChildren',\n        childrenColumnName: 'children'\n      }\n    };\n  },\n\n\n  computed: {\n    // 嵌入型的数据,watch 无法是检测到变化 https://github.com/ElemeFE/element/issues/14998\n    // TODO: 使用 computed 解决该问题,是否会造成性能问题?\n    // @return { id: { level, children } }\n    normalizedData: function normalizedData() {\n      if (!this.states.rowKey) return {};\n      var data = this.states.data || [];\n      return this.normalize(data);\n    },\n\n    // @return { id: { children } }\n    // 针对懒加载的情形,不处理嵌套数据\n    normalizedLazyNode: function normalizedLazyNode() {\n      var _states = this.states,\n          rowKey = _states.rowKey,\n          lazyTreeNodeMap = _states.lazyTreeNodeMap,\n          lazyColumnIdentifier = _states.lazyColumnIdentifier;\n\n      var keys = Object.keys(lazyTreeNodeMap);\n      var res = {};\n      if (!keys.length) return res;\n      keys.forEach(function (key) {\n        if (lazyTreeNodeMap[key].length) {\n          var item = { children: [] };\n          lazyTreeNodeMap[key].forEach(function (row) {\n            var currentRowKey = getRowIdentity(row, rowKey);\n            item.children.push(currentRowKey);\n            if (row[lazyColumnIdentifier] && !res[currentRowKey]) {\n              res[currentRowKey] = { children: [] };\n            }\n          });\n          res[key] = item;\n        }\n      });\n      return res;\n    }\n  },\n\n  watch: {\n    normalizedData: 'updateTreeData',\n    normalizedLazyNode: 'updateTreeData'\n  },\n\n  methods: {\n    normalize: function normalize(data) {\n      var _states2 = this.states,\n          childrenColumnName = _states2.childrenColumnName,\n          lazyColumnIdentifier = _states2.lazyColumnIdentifier,\n          rowKey = _states2.rowKey,\n          lazy = _states2.lazy;\n\n      var res = {};\n      walkTreeNode(data, function (parent, children, level) {\n        var parentId = getRowIdentity(parent, rowKey);\n        if (Array.isArray(children)) {\n          res[parentId] = {\n            children: children.map(function (row) {\n              return getRowIdentity(row, rowKey);\n            }),\n            level: level\n          };\n        } else if (lazy) {\n          // 当 children 不存在且 lazy 为 true,该节点即为懒加载的节点\n          res[parentId] = {\n            children: [],\n            lazy: true,\n            level: level\n          };\n        }\n      }, childrenColumnName, lazyColumnIdentifier);\n      return res;\n    },\n    updateTreeData: function updateTreeData() {\n      var nested = this.normalizedData;\n      var normalizedLazyNode = this.normalizedLazyNode;\n      var keys = Object.keys(nested);\n      var newTreeData = {};\n      if (keys.length) {\n        var _states3 = this.states,\n            oldTreeData = _states3.treeData,\n            defaultExpandAll = _states3.defaultExpandAll,\n            expandRowKeys = _states3.expandRowKeys,\n            lazy = _states3.lazy;\n\n        var rootLazyRowKeys = [];\n        var getExpanded = function getExpanded(oldValue, key) {\n          var included = defaultExpandAll || expandRowKeys && expandRowKeys.indexOf(key) !== -1;\n          return !!(oldValue && oldValue.expanded || included);\n        };\n        // 合并 expanded 与 display,确保数据刷新后,状态不变\n        keys.forEach(function (key) {\n          var oldValue = oldTreeData[key];\n          var newValue = _extends({}, nested[key]);\n          newValue.expanded = getExpanded(oldValue, key);\n          if (newValue.lazy) {\n            var _ref = oldValue || {},\n                _ref$loaded = _ref.loaded,\n                loaded = _ref$loaded === undefined ? false : _ref$loaded,\n                _ref$loading = _ref.loading,\n                loading = _ref$loading === undefined ? false : _ref$loading;\n\n            newValue.loaded = !!loaded;\n            newValue.loading = !!loading;\n            rootLazyRowKeys.push(key);\n          }\n          newTreeData[key] = newValue;\n        });\n        // 根据懒加载数据更新 treeData\n        var lazyKeys = Object.keys(normalizedLazyNode);\n        if (lazy && lazyKeys.length && rootLazyRowKeys.length) {\n          lazyKeys.forEach(function (key) {\n            var oldValue = oldTreeData[key];\n            var lazyNodeChildren = normalizedLazyNode[key].children;\n            if (rootLazyRowKeys.indexOf(key) !== -1) {\n              // 懒加载的 root 节点,更新一下原有的数据,原来的 children 一定是空数组\n              if (newTreeData[key].children.length !== 0) {\n                throw new Error('[ElTable]children must be an empty array.');\n              }\n              newTreeData[key].children = lazyNodeChildren;\n            } else {\n              var _ref2 = oldValue || {},\n                  _ref2$loaded = _ref2.loaded,\n                  loaded = _ref2$loaded === undefined ? false : _ref2$loaded,\n                  _ref2$loading = _ref2.loading,\n                  loading = _ref2$loading === undefined ? false : _ref2$loading;\n\n              newTreeData[key] = {\n                lazy: true,\n                loaded: !!loaded,\n                loading: !!loading,\n                expanded: getExpanded(oldValue, key),\n                children: lazyNodeChildren,\n                level: ''\n              };\n            }\n          });\n        }\n      }\n      this.states.treeData = newTreeData;\n      this.updateTableScrollY();\n    },\n    updateTreeExpandKeys: function updateTreeExpandKeys(value) {\n      this.states.expandRowKeys = value;\n      this.updateTreeData();\n    },\n    toggleTreeExpansion: function toggleTreeExpansion(row, expanded) {\n      this.assertRowKey();\n\n      var _states4 = this.states,\n          rowKey = _states4.rowKey,\n          treeData = _states4.treeData;\n\n      var id = getRowIdentity(row, rowKey);\n      var data = id && treeData[id];\n      if (id && data && 'expanded' in data) {\n        var oldExpanded = data.expanded;\n        expanded = typeof expanded === 'undefined' ? !data.expanded : expanded;\n        treeData[id].expanded = expanded;\n        if (oldExpanded !== expanded) {\n          this.table.$emit('expand-change', row, expanded);\n        }\n        this.updateTableScrollY();\n      }\n    },\n    loadOrToggle: function loadOrToggle(row) {\n      this.assertRowKey();\n      var _states5 = this.states,\n          lazy = _states5.lazy,\n          treeData = _states5.treeData,\n          rowKey = _states5.rowKey;\n\n      var id = getRowIdentity(row, rowKey);\n      var data = treeData[id];\n      if (lazy && data && 'loaded' in data && !data.loaded) {\n        this.loadData(row, id, data);\n      } else {\n        this.toggleTreeExpansion(row);\n      }\n    },\n    loadData: function loadData(row, key, treeNode) {\n      var _this = this;\n\n      var load = this.table.load;\n      var rawTreeData = this.states.treeData;\n\n      if (load && !rawTreeData[key].loaded) {\n        rawTreeData[key].loading = true;\n        load(row, treeNode, function (data) {\n          if (!Array.isArray(data)) {\n            throw new Error('[ElTable] data must be an array');\n          }\n          var _states6 = _this.states,\n              lazyTreeNodeMap = _states6.lazyTreeNodeMap,\n              treeData = _states6.treeData;\n\n          treeData[key].loading = false;\n          treeData[key].loaded = true;\n          treeData[key].expanded = true;\n          if (data.length) {\n            _this.$set(lazyTreeNodeMap, key, data);\n          }\n          _this.table.$emit('expand-change', row, true);\n        });\n      }\n    }\n  }\n});\n// CONCATENATED MODULE: ./packages/table/src/store/watcher.js\n\n\n\n\n\n\n\nvar watcher_sortData = function sortData(data, states) {\n  var sortingColumn = states.sortingColumn;\n  if (!sortingColumn || typeof sortingColumn.sortable === 'string') {\n    return data;\n  }\n  return util_orderBy(data, states.sortProp, states.sortOrder, sortingColumn.sortMethod, sortingColumn.sortBy);\n};\n\nvar doFlattenColumns = function doFlattenColumns(columns) {\n  var result = [];\n  columns.forEach(function (column) {\n    if (column.children) {\n      result.push.apply(result, doFlattenColumns(column.children));\n    } else {\n      result.push(column);\n    }\n  });\n  return result;\n};\n\n/* harmony default export */ var watcher = (external_vue_default.a.extend({\n  data: function data() {\n    return {\n      states: {\n        // 3.0 版本后要求必须设置该属性\n        rowKey: null,\n\n        // 渲染的数据来源,是对 table 中的 data 过滤排序后的结果\n        data: [],\n\n        // 是否包含固定列\n        isComplex: false,\n\n        // 列\n        _columns: [], // 不可响应的\n        originColumns: [],\n        columns: [],\n        fixedColumns: [],\n        rightFixedColumns: [],\n        leafColumns: [],\n        fixedLeafColumns: [],\n        rightFixedLeafColumns: [],\n        leafColumnsLength: 0,\n        fixedLeafColumnsLength: 0,\n        rightFixedLeafColumnsLength: 0,\n\n        // 选择\n        isAllSelected: false,\n        selection: [],\n        reserveSelection: false,\n        selectOnIndeterminate: false,\n        selectable: null,\n\n        // 过滤\n        filters: {}, // 不可响应的\n        filteredData: null,\n\n        // 排序\n        sortingColumn: null,\n        sortProp: null,\n        sortOrder: null,\n\n        hoverRow: null\n      }\n    };\n  },\n\n\n  mixins: [expand, store_current, tree],\n\n  methods: {\n    // 检查 rowKey 是否存在\n    assertRowKey: function assertRowKey() {\n      var rowKey = this.states.rowKey;\n      if (!rowKey) throw new Error('[ElTable] prop row-key is required');\n    },\n\n\n    // 更新列\n    updateColumns: function updateColumns() {\n      var states = this.states;\n      var _columns = states._columns || [];\n      states.fixedColumns = _columns.filter(function (column) {\n        return column.fixed === true || column.fixed === 'left';\n      });\n      states.rightFixedColumns = _columns.filter(function (column) {\n        return column.fixed === 'right';\n      });\n\n      if (states.fixedColumns.length > 0 && _columns[0] && _columns[0].type === 'selection' && !_columns[0].fixed) {\n        _columns[0].fixed = true;\n        states.fixedColumns.unshift(_columns[0]);\n      }\n\n      var notFixedColumns = _columns.filter(function (column) {\n        return !column.fixed;\n      });\n      states.originColumns = [].concat(states.fixedColumns).concat(notFixedColumns).concat(states.rightFixedColumns);\n\n      var leafColumns = doFlattenColumns(notFixedColumns);\n      var fixedLeafColumns = doFlattenColumns(states.fixedColumns);\n      var rightFixedLeafColumns = doFlattenColumns(states.rightFixedColumns);\n\n      states.leafColumnsLength = leafColumns.length;\n      states.fixedLeafColumnsLength = fixedLeafColumns.length;\n      states.rightFixedLeafColumnsLength = rightFixedLeafColumns.length;\n\n      states.columns = [].concat(fixedLeafColumns).concat(leafColumns).concat(rightFixedLeafColumns);\n      states.isComplex = states.fixedColumns.length > 0 || states.rightFixedColumns.length > 0;\n    },\n\n\n    // 更新 DOM\n    scheduleLayout: function scheduleLayout(needUpdateColumns) {\n      if (needUpdateColumns) {\n        this.updateColumns();\n      }\n      this.table.debouncedUpdateLayout();\n    },\n\n\n    // 选择\n    isSelected: function isSelected(row) {\n      var _states$selection = this.states.selection,\n          selection = _states$selection === undefined ? [] : _states$selection;\n\n      return selection.indexOf(row) > -1;\n    },\n    clearSelection: function clearSelection() {\n      var states = this.states;\n      states.isAllSelected = false;\n      var oldSelection = states.selection;\n      if (oldSelection.length) {\n        states.selection = [];\n        this.table.$emit('selection-change', []);\n      }\n    },\n    cleanSelection: function cleanSelection() {\n      var states = this.states;\n      var data = states.data,\n          rowKey = states.rowKey,\n          selection = states.selection;\n\n      var deleted = void 0;\n      if (rowKey) {\n        deleted = [];\n        var selectedMap = getKeysMap(selection, rowKey);\n        var dataMap = getKeysMap(data, rowKey);\n        for (var key in selectedMap) {\n          if (selectedMap.hasOwnProperty(key) && !dataMap[key]) {\n            deleted.push(selectedMap[key].row);\n          }\n        }\n      } else {\n        deleted = selection.filter(function (item) {\n          return data.indexOf(item) === -1;\n        });\n      }\n      if (deleted.length) {\n        var newSelection = selection.filter(function (item) {\n          return deleted.indexOf(item) === -1;\n        });\n        states.selection = newSelection;\n        this.table.$emit('selection-change', newSelection.slice());\n      }\n    },\n    toggleRowSelection: function toggleRowSelection(row, selected) {\n      var emitChange = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n\n      var changed = toggleRowStatus(this.states.selection, row, selected);\n      if (changed) {\n        var newSelection = (this.states.selection || []).slice();\n        // 调用 API 修改选中值,不触发 select 事件\n        if (emitChange) {\n          this.table.$emit('select', newSelection, row);\n        }\n        this.table.$emit('selection-change', newSelection);\n      }\n    },\n    _toggleAllSelection: function _toggleAllSelection() {\n      var states = this.states;\n      var _states$data = states.data,\n          data = _states$data === undefined ? [] : _states$data,\n          selection = states.selection;\n      // when only some rows are selected (but not all), select or deselect all of them\n      // depending on the value of selectOnIndeterminate\n\n      var value = states.selectOnIndeterminate ? !states.isAllSelected : !(states.isAllSelected || selection.length);\n      states.isAllSelected = value;\n\n      var selectionChanged = false;\n      data.forEach(function (row, index) {\n        if (states.selectable) {\n          if (states.selectable.call(null, row, index) && toggleRowStatus(selection, row, value)) {\n            selectionChanged = true;\n          }\n        } else {\n          if (toggleRowStatus(selection, row, value)) {\n            selectionChanged = true;\n          }\n        }\n      });\n\n      if (selectionChanged) {\n        this.table.$emit('selection-change', selection ? selection.slice() : []);\n      }\n      this.table.$emit('select-all', selection);\n    },\n    updateSelectionByRowKey: function updateSelectionByRowKey() {\n      var states = this.states;\n      var selection = states.selection,\n          rowKey = states.rowKey,\n          data = states.data;\n\n      var selectedMap = getKeysMap(selection, rowKey);\n      data.forEach(function (row) {\n        var rowId = getRowIdentity(row, rowKey);\n        var rowInfo = selectedMap[rowId];\n        if (rowInfo) {\n          selection[rowInfo.index] = row;\n        }\n      });\n    },\n    updateAllSelected: function updateAllSelected() {\n      var states = this.states;\n      var selection = states.selection,\n          rowKey = states.rowKey,\n          selectable = states.selectable;\n      // data 为 null 时,解构时的默认值会被忽略\n\n      var data = states.data || [];\n      if (data.length === 0) {\n        states.isAllSelected = false;\n        return;\n      }\n\n      var selectedMap = void 0;\n      if (rowKey) {\n        selectedMap = getKeysMap(selection, rowKey);\n      }\n      var isSelected = function isSelected(row) {\n        if (selectedMap) {\n          return !!selectedMap[getRowIdentity(row, rowKey)];\n        } else {\n          return selection.indexOf(row) !== -1;\n        }\n      };\n      var isAllSelected = true;\n      var selectedCount = 0;\n      for (var i = 0, j = data.length; i < j; i++) {\n        var item = data[i];\n        var isRowSelectable = selectable && selectable.call(null, item, i);\n        if (!isSelected(item)) {\n          if (!selectable || isRowSelectable) {\n            isAllSelected = false;\n            break;\n          }\n        } else {\n          selectedCount++;\n        }\n      }\n\n      if (selectedCount === 0) isAllSelected = false;\n      states.isAllSelected = isAllSelected;\n    },\n\n\n    // 过滤与排序\n    updateFilters: function updateFilters(columns, values) {\n      if (!Array.isArray(columns)) {\n        columns = [columns];\n      }\n      var states = this.states;\n      var filters = {};\n      columns.forEach(function (col) {\n        states.filters[col.id] = values;\n        filters[col.columnKey || col.id] = values;\n      });\n\n      return filters;\n    },\n    updateSort: function updateSort(column, prop, order) {\n      if (this.states.sortingColumn && this.states.sortingColumn !== column) {\n        this.states.sortingColumn.order = null;\n      }\n      this.states.sortingColumn = column;\n      this.states.sortProp = prop;\n      this.states.sortOrder = order;\n    },\n    execFilter: function execFilter() {\n      var _this = this;\n\n      var states = this.states;\n      var _data = states._data,\n          filters = states.filters;\n\n      var data = _data;\n\n      Object.keys(filters).forEach(function (columnId) {\n        var values = states.filters[columnId];\n        if (!values || values.length === 0) return;\n        var column = getColumnById(_this.states, columnId);\n        if (column && column.filterMethod) {\n          data = data.filter(function (row) {\n            return values.some(function (value) {\n              return column.filterMethod.call(null, value, row, column);\n            });\n          });\n        }\n      });\n\n      states.filteredData = data;\n    },\n    execSort: function execSort() {\n      var states = this.states;\n      states.data = watcher_sortData(states.filteredData, states);\n    },\n\n\n    // 根据 filters 与 sort 去过滤 data\n    execQuery: function execQuery(ignore) {\n      if (!(ignore && ignore.filter)) {\n        this.execFilter();\n      }\n      this.execSort();\n    },\n    clearFilter: function clearFilter(columnKeys) {\n      var states = this.states;\n      var _table$$refs = this.table.$refs,\n          tableHeader = _table$$refs.tableHeader,\n          fixedTableHeader = _table$$refs.fixedTableHeader,\n          rightFixedTableHeader = _table$$refs.rightFixedTableHeader;\n\n\n      var panels = {};\n      if (tableHeader) panels = merge_default()(panels, tableHeader.filterPanels);\n      if (fixedTableHeader) panels = merge_default()(panels, fixedTableHeader.filterPanels);\n      if (rightFixedTableHeader) panels = merge_default()(panels, rightFixedTableHeader.filterPanels);\n\n      var keys = Object.keys(panels);\n      if (!keys.length) return;\n\n      if (typeof columnKeys === 'string') {\n        columnKeys = [columnKeys];\n      }\n\n      if (Array.isArray(columnKeys)) {\n        var columns = columnKeys.map(function (key) {\n          return getColumnByKey(states, key);\n        });\n        keys.forEach(function (key) {\n          var column = columns.find(function (col) {\n            return col.id === key;\n          });\n          if (column) {\n            // TODO: 优化这里的代码\n            panels[key].filteredValue = [];\n          }\n        });\n        this.commit('filterChange', {\n          column: columns,\n          values: [],\n          silent: true,\n          multi: true\n        });\n      } else {\n        keys.forEach(function (key) {\n          // TODO: 优化这里的代码\n          panels[key].filteredValue = [];\n        });\n\n        states.filters = {};\n        this.commit('filterChange', {\n          column: {},\n          values: [],\n          silent: true\n        });\n      }\n    },\n    clearSort: function clearSort() {\n      var states = this.states;\n      if (!states.sortingColumn) return;\n\n      this.updateSort(null, null, null);\n      this.commit('changeSortCondition', {\n        silent: true\n      });\n    },\n\n\n    // 适配层,expand-row-keys 在 Expand 与 TreeTable 中都有使用\n    setExpandRowKeysAdapter: function setExpandRowKeysAdapter(val) {\n      // 这里会触发额外的计算,但为了兼容性,暂时这么做\n      this.setExpandRowKeys(val);\n      this.updateTreeExpandKeys(val);\n    },\n\n\n    // 展开行与 TreeTable 都要使用\n    toggleRowExpansionAdapter: function toggleRowExpansionAdapter(row, expanded) {\n      var hasExpandColumn = this.states.columns.some(function (_ref) {\n        var type = _ref.type;\n        return type === 'expand';\n      });\n      if (hasExpandColumn) {\n        this.toggleRowExpansion(row, expanded);\n      } else {\n        this.toggleTreeExpansion(row, expanded);\n      }\n    }\n  }\n}));\n// CONCATENATED MODULE: ./packages/table/src/store/index.js\n\n\n\n\nwatcher.prototype.mutations = {\n  setData: function setData(states, data) {\n    var dataInstanceChanged = states._data !== data;\n    states._data = data;\n\n    this.execQuery();\n    // 数据变化,更新部分数据。\n    // 没有使用 computed,而是手动更新部分数据 https://github.com/vuejs/vue/issues/6660#issuecomment-331417140\n    this.updateCurrentRowData();\n    this.updateExpandRows();\n    if (states.reserveSelection) {\n      this.assertRowKey();\n      this.updateSelectionByRowKey();\n    } else {\n      if (dataInstanceChanged) {\n        this.clearSelection();\n      } else {\n        this.cleanSelection();\n      }\n    }\n    this.updateAllSelected();\n\n    this.updateTableScrollY();\n  },\n  insertColumn: function insertColumn(states, column, index, parent) {\n    var array = states._columns;\n    if (parent) {\n      array = parent.children;\n      if (!array) array = parent.children = [];\n    }\n\n    if (typeof index !== 'undefined') {\n      array.splice(index, 0, column);\n    } else {\n      array.push(column);\n    }\n\n    if (column.type === 'selection') {\n      states.selectable = column.selectable;\n      states.reserveSelection = column.reserveSelection;\n    }\n\n    if (this.table.$ready) {\n      this.updateColumns(); // hack for dynamics insert column\n      this.scheduleLayout();\n    }\n  },\n  removeColumn: function removeColumn(states, column, parent) {\n    var array = states._columns;\n    if (parent) {\n      array = parent.children;\n      if (!array) array = parent.children = [];\n    }\n    if (array) {\n      array.splice(array.indexOf(column), 1);\n    }\n\n    if (this.table.$ready) {\n      this.updateColumns(); // hack for dynamics remove column\n      this.scheduleLayout();\n    }\n  },\n  sort: function sort(states, options) {\n    var prop = options.prop,\n        order = options.order,\n        init = options.init;\n\n    if (prop) {\n      var column = Object(util_[\"arrayFind\"])(states.columns, function (column) {\n        return column.property === prop;\n      });\n      if (column) {\n        column.order = order;\n        this.updateSort(column, prop, order);\n        this.commit('changeSortCondition', { init: init });\n      }\n    }\n  },\n  changeSortCondition: function changeSortCondition(states, options) {\n    // 修复 pr https://github.com/ElemeFE/element/pull/15012 导致的 bug\n    var column = states.sortingColumn,\n        prop = states.sortProp,\n        order = states.sortOrder;\n\n    if (order === null) {\n      states.sortingColumn = null;\n      states.sortProp = null;\n    }\n    var ingore = { filter: true };\n    this.execQuery(ingore);\n\n    if (!options || !(options.silent || options.init)) {\n      this.table.$emit('sort-change', {\n        column: column,\n        prop: prop,\n        order: order\n      });\n    }\n\n    this.updateTableScrollY();\n  },\n  filterChange: function filterChange(states, options) {\n    var column = options.column,\n        values = options.values,\n        silent = options.silent;\n\n    var newFilters = this.updateFilters(column, values);\n\n    this.execQuery();\n\n    if (!silent) {\n      this.table.$emit('filter-change', newFilters);\n    }\n\n    this.updateTableScrollY();\n  },\n  toggleAllSelection: function toggleAllSelection() {\n    this.toggleAllSelection();\n  },\n  rowSelectedChanged: function rowSelectedChanged(states, row) {\n    this.toggleRowSelection(row);\n    this.updateAllSelected();\n  },\n  setHoverRow: function setHoverRow(states, row) {\n    states.hoverRow = row;\n  },\n  setCurrentRow: function setCurrentRow(states, row) {\n    this.updateCurrentRow(row);\n  }\n};\n\nwatcher.prototype.commit = function (name) {\n  var mutations = this.mutations;\n  if (mutations[name]) {\n    for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      args[_key - 1] = arguments[_key];\n    }\n\n    mutations[name].apply(this, [this.states].concat(args));\n  } else {\n    throw new Error('Action not found: ' + name);\n  }\n};\n\nwatcher.prototype.updateTableScrollY = function () {\n  external_vue_default.a.nextTick(this.table.updateScrollY);\n};\n\n/* harmony default export */ var src_store = (watcher);\n// CONCATENATED MODULE: ./packages/table/src/store/helper.js\n\n\n\nfunction createStore(table) {\n  var initialState = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  if (!table) {\n    throw new Error('Table is required.');\n  }\n\n  var store = new src_store();\n  store.table = table;\n  // fix https://github.com/ElemeFE/element/issues/14075\n  // related pr https://github.com/ElemeFE/element/pull/14146\n  store.toggleAllSelection = debounce_default()(10, store._toggleAllSelection);\n  Object.keys(initialState).forEach(function (key) {\n    store.states[key] = initialState[key];\n  });\n  return store;\n}\n\nfunction mapStates(mapper) {\n  var res = {};\n  Object.keys(mapper).forEach(function (key) {\n    var value = mapper[key];\n    var fn = void 0;\n    if (typeof value === 'string') {\n      fn = function fn() {\n        return this.store.states[value];\n      };\n    } else if (typeof value === 'function') {\n      fn = function fn() {\n        return value.call(this, this.store.states);\n      };\n    } else {\n      console.error('invalid value type');\n    }\n    if (fn) {\n      res[key] = fn;\n    }\n  });\n  return res;\n};\n// EXTERNAL MODULE: external \"element-ui/lib/utils/scrollbar-width\"\nvar scrollbar_width_ = __nested_webpack_require_8926__(31);\nvar scrollbar_width_default = /*#__PURE__*/__nested_webpack_require_8926__.n(scrollbar_width_);\n\n// CONCATENATED MODULE: ./packages/table/src/table-layout.js\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\n\n\n\nvar table_layout_TableLayout = function () {\n  function TableLayout(options) {\n    _classCallCheck(this, TableLayout);\n\n    this.observers = [];\n    this.table = null;\n    this.store = null;\n    this.columns = null;\n    this.fit = true;\n    this.showHeader = true;\n\n    this.height = null;\n    this.scrollX = false;\n    this.scrollY = false;\n    this.bodyWidth = null;\n    this.fixedWidth = null;\n    this.rightFixedWidth = null;\n    this.tableHeight = null;\n    this.headerHeight = 44; // Table Header Height\n    this.appendHeight = 0; // Append Slot Height\n    this.footerHeight = 44; // Table Footer Height\n    this.viewportHeight = null; // Table Height - Scroll Bar Height\n    this.bodyHeight = null; // Table Height - Table Header Height\n    this.fixedBodyHeight = null; // Table Height - Table Header Height - Scroll Bar Height\n    this.gutterWidth = scrollbar_width_default()();\n\n    for (var name in options) {\n      if (options.hasOwnProperty(name)) {\n        this[name] = options[name];\n      }\n    }\n\n    if (!this.table) {\n      throw new Error('table is required for Table Layout');\n    }\n    if (!this.store) {\n      throw new Error('store is required for Table Layout');\n    }\n  }\n\n  TableLayout.prototype.updateScrollY = function updateScrollY() {\n    var height = this.height;\n    if (height === null) return false;\n    var bodyWrapper = this.table.bodyWrapper;\n    if (this.table.$el && bodyWrapper) {\n      var body = bodyWrapper.querySelector('.el-table__body');\n      var prevScrollY = this.scrollY;\n      var scrollY = body.offsetHeight > this.bodyHeight;\n      this.scrollY = scrollY;\n      return prevScrollY !== scrollY;\n    }\n    return false;\n  };\n\n  TableLayout.prototype.setHeight = function setHeight(value) {\n    var _this = this;\n\n    var prop = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'height';\n\n    if (external_vue_default.a.prototype.$isServer) return;\n    var el = this.table.$el;\n    value = parseHeight(value);\n    this.height = value;\n\n    if (!el && (value || value === 0)) return external_vue_default.a.nextTick(function () {\n      return _this.setHeight(value, prop);\n    });\n\n    if (typeof value === 'number') {\n      el.style[prop] = value + 'px';\n      this.updateElsHeight();\n    } else if (typeof value === 'string') {\n      el.style[prop] = value;\n      this.updateElsHeight();\n    }\n  };\n\n  TableLayout.prototype.setMaxHeight = function setMaxHeight(value) {\n    this.setHeight(value, 'max-height');\n  };\n\n  TableLayout.prototype.getFlattenColumns = function getFlattenColumns() {\n    var flattenColumns = [];\n    var columns = this.table.columns;\n    columns.forEach(function (column) {\n      if (column.isColumnGroup) {\n        flattenColumns.push.apply(flattenColumns, column.columns);\n      } else {\n        flattenColumns.push(column);\n      }\n    });\n\n    return flattenColumns;\n  };\n\n  TableLayout.prototype.updateElsHeight = function updateElsHeight() {\n    var _this2 = this;\n\n    if (!this.table.$ready) return external_vue_default.a.nextTick(function () {\n      return _this2.updateElsHeight();\n    });\n    var _table$$refs = this.table.$refs,\n        headerWrapper = _table$$refs.headerWrapper,\n        appendWrapper = _table$$refs.appendWrapper,\n        footerWrapper = _table$$refs.footerWrapper;\n\n    this.appendHeight = appendWrapper ? appendWrapper.offsetHeight : 0;\n\n    if (this.showHeader && !headerWrapper) return;\n\n    // fix issue (https://github.com/ElemeFE/element/pull/16956)\n    var headerTrElm = headerWrapper ? headerWrapper.querySelector('.el-table__header tr') : null;\n    var noneHeader = this.headerDisplayNone(headerTrElm);\n\n    var headerHeight = this.headerHeight = !this.showHeader ? 0 : headerWrapper.offsetHeight;\n    if (this.showHeader && !noneHeader && headerWrapper.offsetWidth > 0 && (this.table.columns || []).length > 0 && headerHeight < 2) {\n      return external_vue_default.a.nextTick(function () {\n        return _this2.updateElsHeight();\n      });\n    }\n    var tableHeight = this.tableHeight = this.table.$el.clientHeight;\n    var footerHeight = this.footerHeight = footerWrapper ? footerWrapper.offsetHeight : 0;\n    if (this.height !== null) {\n      this.bodyHeight = tableHeight - headerHeight - footerHeight + (footerWrapper ? 1 : 0);\n    }\n    this.fixedBodyHeight = this.scrollX ? this.bodyHeight - this.gutterWidth : this.bodyHeight;\n\n    var noData = !(this.store.states.data && this.store.states.data.length);\n    this.viewportHeight = this.scrollX ? tableHeight - (noData ? 0 : this.gutterWidth) : tableHeight;\n    this.updateScrollY();\n    this.notifyObservers('scrollable');\n  };\n\n  TableLayout.prototype.headerDisplayNone = function headerDisplayNone(elm) {\n    if (!elm) return true;\n    var headerChild = elm;\n    while (headerChild.tagName !== 'DIV') {\n      if (getComputedStyle(headerChild).display === 'none') {\n        return true;\n      }\n      headerChild = headerChild.parentElement;\n    }\n    return false;\n  };\n\n  TableLayout.prototype.updateColumnsWidth = function updateColumnsWidth() {\n    if (external_vue_default.a.prototype.$isServer) return;\n    var fit = this.fit;\n    var bodyWidth = this.table.$el.clientWidth;\n    var bodyMinWidth = 0;\n\n    var flattenColumns = this.getFlattenColumns();\n    var flexColumns = flattenColumns.filter(function (column) {\n      return typeof column.width !== 'number';\n    });\n\n    flattenColumns.forEach(function (column) {\n      // Clean those columns whose width changed from flex to unflex\n      if (typeof column.width === 'number' && column.realWidth) column.realWidth = null;\n    });\n\n    if (flexColumns.length > 0 && fit) {\n      flattenColumns.forEach(function (column) {\n        bodyMinWidth += column.width || column.minWidth || 80;\n      });\n\n      var scrollYWidth = this.scrollY ? this.gutterWidth : 0;\n\n      if (bodyMinWidth <= bodyWidth - scrollYWidth) {\n        // DON'T HAVE SCROLL BAR\n        this.scrollX = false;\n\n        var totalFlexWidth = bodyWidth - scrollYWidth - bodyMinWidth;\n\n        if (flexColumns.length === 1) {\n          flexColumns[0].realWidth = (flexColumns[0].minWidth || 80) + totalFlexWidth;\n        } else {\n          var allColumnsWidth = flexColumns.reduce(function (prev, column) {\n            return prev + (column.minWidth || 80);\n          }, 0);\n          var flexWidthPerPixel = totalFlexWidth / allColumnsWidth;\n          var noneFirstWidth = 0;\n\n          flexColumns.forEach(function (column, index) {\n            if (index === 0) return;\n            var flexWidth = Math.floor((column.minWidth || 80) * flexWidthPerPixel);\n            noneFirstWidth += flexWidth;\n            column.realWidth = (column.minWidth || 80) + flexWidth;\n          });\n\n          flexColumns[0].realWidth = (flexColumns[0].minWidth || 80) + totalFlexWidth - noneFirstWidth;\n        }\n      } else {\n        // HAVE HORIZONTAL SCROLL BAR\n        this.scrollX = true;\n        flexColumns.forEach(function (column) {\n          column.realWidth = column.minWidth;\n        });\n      }\n\n      this.bodyWidth = Math.max(bodyMinWidth, bodyWidth);\n      this.table.resizeState.width = this.bodyWidth;\n    } else {\n      flattenColumns.forEach(function (column) {\n        if (!column.width && !column.minWidth) {\n          column.realWidth = 80;\n        } else {\n          column.realWidth = column.width || column.minWidth;\n        }\n\n        bodyMinWidth += column.realWidth;\n      });\n      this.scrollX = bodyMinWidth > bodyWidth;\n\n      this.bodyWidth = bodyMinWidth;\n    }\n\n    var fixedColumns = this.store.states.fixedColumns;\n\n    if (fixedColumns.length > 0) {\n      var fixedWidth = 0;\n      fixedColumns.forEach(function (column) {\n        fixedWidth += column.realWidth || column.width;\n      });\n\n      this.fixedWidth = fixedWidth;\n    }\n\n    var rightFixedColumns = this.store.states.rightFixedColumns;\n    if (rightFixedColumns.length > 0) {\n      var rightFixedWidth = 0;\n      rightFixedColumns.forEach(function (column) {\n        rightFixedWidth += column.realWidth || column.width;\n      });\n\n      this.rightFixedWidth = rightFixedWidth;\n    }\n\n    this.notifyObservers('columns');\n  };\n\n  TableLayout.prototype.addObserver = function addObserver(observer) {\n    this.observers.push(observer);\n  };\n\n  TableLayout.prototype.removeObserver = function removeObserver(observer) {\n    var index = this.observers.indexOf(observer);\n    if (index !== -1) {\n      this.observers.splice(index, 1);\n    }\n  };\n\n  TableLayout.prototype.notifyObservers = function notifyObservers(event) {\n    var _this3 = this;\n\n    var observers = this.observers;\n    observers.forEach(function (observer) {\n      switch (event) {\n        case 'columns':\n          observer.onColumnsChange(_this3);\n          break;\n        case 'scrollable':\n          observer.onScrollableChange(_this3);\n          break;\n        default:\n          throw new Error('Table Layout don\\'t have event ' + event + '.');\n      }\n    });\n  };\n\n  return TableLayout;\n}();\n\n/* harmony default export */ var table_layout = (table_layout_TableLayout);\n// CONCATENATED MODULE: ./packages/table/src/layout-observer.js\n/* harmony default export */ var layout_observer = ({\n  created: function created() {\n    this.tableLayout.addObserver(this);\n  },\n  destroyed: function destroyed() {\n    this.tableLayout.removeObserver(this);\n  },\n\n\n  computed: {\n    tableLayout: function tableLayout() {\n      var layout = this.layout;\n      if (!layout && this.table) {\n        layout = this.table.layout;\n      }\n      if (!layout) {\n        throw new Error('Can not find table layout.');\n      }\n      return layout;\n    }\n  },\n\n  mounted: function mounted() {\n    this.onColumnsChange(this.tableLayout);\n    this.onScrollableChange(this.tableLayout);\n  },\n  updated: function updated() {\n    if (this.__updated__) return;\n    this.onColumnsChange(this.tableLayout);\n    this.onScrollableChange(this.tableLayout);\n    this.__updated__ = true;\n  },\n\n\n  methods: {\n    onColumnsChange: function onColumnsChange(layout) {\n      var cols = this.$el.querySelectorAll('colgroup > col');\n      if (!cols.length) return;\n      var flattenColumns = layout.getFlattenColumns();\n      var columnsMap = {};\n      flattenColumns.forEach(function (column) {\n        columnsMap[column.id] = column;\n      });\n      for (var i = 0, j = cols.length; i < j; i++) {\n        var col = cols[i];\n        var name = col.getAttribute('name');\n        var column = columnsMap[name];\n        if (column) {\n          col.setAttribute('width', column.realWidth || column.width);\n        }\n      }\n    },\n    onScrollableChange: function onScrollableChange(layout) {\n      var cols = this.$el.querySelectorAll('colgroup > col[name=gutter]');\n      for (var i = 0, j = cols.length; i < j; i++) {\n        var col = cols[i];\n        col.setAttribute('width', layout.scrollY ? layout.gutterWidth : '0');\n      }\n      var ths = this.$el.querySelectorAll('th.gutter');\n      for (var _i = 0, _j = ths.length; _i < _j; _i++) {\n        var th = ths[_i];\n        th.style.width = layout.scrollY ? layout.gutterWidth + 'px' : '0';\n        th.style.display = layout.scrollY ? '' : 'none';\n      }\n    }\n  }\n});\n// CONCATENATED MODULE: ./packages/table/src/table-row.js\nvar table_row_extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\n\n/* harmony default export */ var table_row = ({\n  name: 'ElTableRow',\n  props: ['columns', 'row', 'index', 'isSelected', 'isExpanded', 'store', 'context', 'firstDefaultColumnIndex', 'treeRowData', 'treeIndent', 'columnsHidden', 'getSpan', 'getColspanRealWidth', 'getCellStyle', 'getCellClass', 'handleCellMouseLeave', 'handleCellMouseEnter', 'fixed'],\n  components: {\n    ElCheckbox: checkbox_default.a\n  },\n  render: function render() {\n    var _this = this;\n\n    var h = arguments[0];\n    var columns = this.columns,\n        row = this.row,\n        $index = this.index,\n        store = this.store,\n        context = this.context,\n        firstDefaultColumnIndex = this.firstDefaultColumnIndex,\n        treeRowData = this.treeRowData,\n        treeIndent = this.treeIndent,\n        _columnsHidden = this.columnsHidden,\n        columnsHidden = _columnsHidden === undefined ? [] : _columnsHidden,\n        isSelected = this.isSelected,\n        isExpanded = this.isExpanded;\n\n\n    return h('tr', [columns.map(function (column, cellIndex) {\n      var _getSpan = _this.getSpan(row, column, $index, cellIndex),\n          rowspan = _getSpan.rowspan,\n          colspan = _getSpan.colspan;\n\n      if (!rowspan || !colspan) {\n        return null;\n      }\n      var columnData = table_row_extends({}, column);\n      columnData.realWidth = _this.getColspanRealWidth(columns, colspan, cellIndex);\n      var data = {\n        store: store,\n        isSelected: isSelected,\n        isExpanded: isExpanded,\n        _self: context,\n        column: columnData,\n        row: row,\n        $index: $index\n      };\n      if (cellIndex === firstDefaultColumnIndex && treeRowData) {\n        data.treeNode = {\n          indent: treeRowData.level * treeIndent,\n          level: treeRowData.level\n        };\n        if (typeof treeRowData.expanded === 'boolean') {\n          data.treeNode.expanded = treeRowData.expanded;\n          // 表明是懒加载\n          if ('loading' in treeRowData) {\n            data.treeNode.loading = treeRowData.loading;\n          }\n          if ('noLazyChildren' in treeRowData) {\n            data.treeNode.noLazyChildren = treeRowData.noLazyChildren;\n          }\n        }\n      }\n      return h(\n        'td',\n        {\n          style: _this.getCellStyle($index, cellIndex, row, column),\n          'class': _this.getCellClass($index, cellIndex, row, column),\n          attrs: { rowspan: rowspan,\n            colspan: colspan\n          },\n          on: {\n            'mouseenter': function mouseenter($event) {\n              return _this.handleCellMouseEnter($event, row);\n            },\n            'mouseleave': _this.handleCellMouseLeave\n          }\n        },\n        [column.renderCell.call(_this._renderProxy, _this.$createElement, data, columnsHidden[cellIndex])]\n      );\n    })]);\n  }\n});\n// CONCATENATED MODULE: ./packages/table/src/table-body.js\nvar table_body_typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar table_body_extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\n\n\n\n\n\n\n\n\n\n\n/* harmony default export */ var table_body = ({\n  name: 'ElTableBody',\n\n  mixins: [layout_observer],\n\n  components: {\n    ElCheckbox: checkbox_default.a,\n    ElTooltip: tooltip_default.a,\n    TableRow: table_row\n  },\n\n  props: {\n    store: {\n      required: true\n    },\n    stripe: Boolean,\n    context: {},\n    rowClassName: [String, Function],\n    rowStyle: [Object, Function],\n    fixed: String,\n    highlight: Boolean\n  },\n\n  render: function render(h) {\n    var _this = this;\n\n    var data = this.data || [];\n    return h(\n      'table',\n      {\n        'class': 'el-table__body',\n        attrs: { cellspacing: '0',\n          cellpadding: '0',\n          border: '0' }\n      },\n      [h('colgroup', [this.columns.map(function (column) {\n        return h('col', {\n          attrs: { name: column.id },\n          key: column.id });\n      })]), h('tbody', [data.reduce(function (acc, row) {\n        return acc.concat(_this.wrappedRowRender(row, acc.length));\n      }, []), h('el-tooltip', {\n        attrs: { effect: this.table.tooltipEffect, placement: 'top', content: this.tooltipContent },\n        ref: 'tooltip' })])]\n    );\n  },\n\n\n  computed: table_body_extends({\n    table: function table() {\n      return this.$parent;\n    }\n  }, mapStates({\n    data: 'data',\n    columns: 'columns',\n    treeIndent: 'indent',\n    leftFixedLeafCount: 'fixedLeafColumnsLength',\n    rightFixedLeafCount: 'rightFixedLeafColumnsLength',\n    columnsCount: function columnsCount(states) {\n      return states.columns.length;\n    },\n    leftFixedCount: function leftFixedCount(states) {\n      return states.fixedColumns.length;\n    },\n    rightFixedCount: function rightFixedCount(states) {\n      return states.rightFixedColumns.length;\n    },\n    hasExpandColumn: function hasExpandColumn(states) {\n      return states.columns.some(function (_ref) {\n        var type = _ref.type;\n        return type === 'expand';\n      });\n    }\n  }), {\n    columnsHidden: function columnsHidden() {\n      var _this2 = this;\n\n      return this.columns.map(function (column, index) {\n        return _this2.isColumnHidden(index);\n      });\n    },\n    firstDefaultColumnIndex: function firstDefaultColumnIndex() {\n      return Object(util_[\"arrayFindIndex\"])(this.columns, function (_ref2) {\n        var type = _ref2.type;\n        return type === 'default';\n      });\n    }\n  }),\n\n  watch: {\n    // don't trigger getter of currentRow in getCellClass. see https://jsfiddle.net/oe2b4hqt/\n    // update DOM manually. see https://github.com/ElemeFE/element/pull/13954/files#diff-9b450c00d0a9dec0ffad5a3176972e40\n    'store.states.hoverRow': function storeStatesHoverRow(newVal, oldVal) {\n      var _this3 = this;\n\n      if (!this.store.states.isComplex || this.$isServer) return;\n      var raf = window.requestAnimationFrame;\n      if (!raf) {\n        raf = function raf(fn) {\n          return setTimeout(fn, 16);\n        };\n      }\n      raf(function () {\n        var rows = _this3.$el.querySelectorAll('.el-table__row');\n        var oldRow = rows[oldVal];\n        var newRow = rows[newVal];\n        if (oldRow) {\n          Object(dom_[\"removeClass\"])(oldRow, 'hover-row');\n        }\n        if (newRow) {\n          Object(dom_[\"addClass\"])(newRow, 'hover-row');\n        }\n      });\n    }\n  },\n\n  data: function data() {\n    return {\n      tooltipContent: ''\n    };\n  },\n  created: function created() {\n    this.activateTooltip = debounce_default()(50, function (tooltip) {\n      return tooltip.handleShowPopper();\n    });\n  },\n\n\n  methods: {\n    getKeyOfRow: function getKeyOfRow(row, index) {\n      var rowKey = this.table.rowKey;\n      if (rowKey) {\n        return getRowIdentity(row, rowKey);\n      }\n      return index;\n    },\n    isColumnHidden: function isColumnHidden(index) {\n      if (this.fixed === true || this.fixed === 'left') {\n        return index >= this.leftFixedLeafCount;\n      } else if (this.fixed === 'right') {\n        return index < this.columnsCount - this.rightFixedLeafCount;\n      } else {\n        return index < this.leftFixedLeafCount || index >= this.columnsCount - this.rightFixedLeafCount;\n      }\n    },\n    getSpan: function getSpan(row, column, rowIndex, columnIndex) {\n      var rowspan = 1;\n      var colspan = 1;\n      var fn = this.table.spanMethod;\n      if (typeof fn === 'function') {\n        var result = fn({\n          row: row,\n          column: column,\n          rowIndex: rowIndex,\n          columnIndex: columnIndex\n        });\n        if (Array.isArray(result)) {\n          rowspan = result[0];\n          colspan = result[1];\n        } else if ((typeof result === 'undefined' ? 'undefined' : table_body_typeof(result)) === 'object') {\n          rowspan = result.rowspan;\n          colspan = result.colspan;\n        }\n      }\n      return { rowspan: rowspan, colspan: colspan };\n    },\n    getRowStyle: function getRowStyle(row, rowIndex) {\n      var rowStyle = this.table.rowStyle;\n      if (typeof rowStyle === 'function') {\n        return rowStyle.call(null, {\n          row: row,\n          rowIndex: rowIndex\n        });\n      }\n      return rowStyle || null;\n    },\n    getRowClass: function getRowClass(row, rowIndex) {\n      var selection = this.store.states.selection;\n      var classes = ['el-table__row'];\n      if (this.table.highlightCurrentRow && row === this.store.states.currentRow) {\n        classes.push('current-row');\n      }\n\n      if (this.table.highlightSelectionRow) {\n        for (var i = 0; i < selection.length; i++) {\n          if (objectEquals(row, selection[i])) {\n            classes.push('selection-row');\n          }\n        };\n      }\n\n      if (this.stripe && rowIndex % 2 === 1) {\n        classes.push('el-table__row--striped');\n      }\n      var rowClassName = this.table.rowClassName;\n      if (typeof rowClassName === 'string') {\n        classes.push(rowClassName);\n      } else if (typeof rowClassName === 'function') {\n        classes.push(rowClassName.call(null, {\n          row: row,\n          rowIndex: rowIndex\n        }));\n      }\n\n      if (this.store.states.expandRows.indexOf(row) > -1) {\n        classes.push('expanded');\n      }\n\n      return classes;\n    },\n    getCellStyle: function getCellStyle(rowIndex, columnIndex, row, column) {\n      var cellStyle = this.table.cellStyle;\n      if (typeof cellStyle === 'function') {\n        return cellStyle.call(null, {\n          rowIndex: rowIndex,\n          columnIndex: columnIndex,\n          row: row,\n          column: column\n        });\n      }\n      return cellStyle;\n    },\n    getCellClass: function getCellClass(rowIndex, columnIndex, row, column) {\n      var classes = [column.id, column.align, column.className];\n\n      if (this.isColumnHidden(columnIndex)) {\n        classes.push('is-hidden');\n      }\n\n      var cellClassName = this.table.cellClassName;\n      if (typeof cellClassName === 'string') {\n        classes.push(cellClassName);\n      } else if (typeof cellClassName === 'function') {\n        classes.push(cellClassName.call(null, {\n          rowIndex: rowIndex,\n          columnIndex: columnIndex,\n          row: row,\n          column: column\n        }));\n      }\n\n      classes.push('el-table__cell');\n\n      return classes.join(' ');\n    },\n    getColspanRealWidth: function getColspanRealWidth(columns, colspan, index) {\n      if (colspan < 1) {\n        return columns[index].realWidth;\n      }\n      var widthArr = columns.map(function (_ref3) {\n        var realWidth = _ref3.realWidth;\n        return realWidth;\n      }).slice(index, index + colspan);\n      return widthArr.reduce(function (acc, width) {\n        return acc + width;\n      }, -1);\n    },\n    handleCellMouseEnter: function handleCellMouseEnter(event, row) {\n      var table = this.table;\n      var cell = getCell(event);\n\n      if (cell) {\n        var column = getColumnByCell(table, cell);\n        var hoverState = table.hoverState = { cell: cell, column: column, row: row };\n        table.$emit('cell-mouse-enter', hoverState.row, hoverState.column, hoverState.cell, event);\n      }\n\n      // 判断是否text-overflow, 如果是就显示tooltip\n      var cellChild = event.target.querySelector('.cell');\n      if (!(Object(dom_[\"hasClass\"])(cellChild, 'el-tooltip') && cellChild.childNodes.length)) {\n        return;\n      }\n      // use range width instead of scrollWidth to determine whether the text is overflowing\n      // to address a potential FireFox bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1074543#c3\n      var range = document.createRange();\n      range.setStart(cellChild, 0);\n      range.setEnd(cellChild, cellChild.childNodes.length);\n      var rangeWidth = range.getBoundingClientRect().width;\n      var padding = (parseInt(Object(dom_[\"getStyle\"])(cellChild, 'paddingLeft'), 10) || 0) + (parseInt(Object(dom_[\"getStyle\"])(cellChild, 'paddingRight'), 10) || 0);\n      if ((rangeWidth + padding > cellChild.offsetWidth || cellChild.scrollWidth > cellChild.offsetWidth) && this.$refs.tooltip) {\n        var tooltip = this.$refs.tooltip;\n        // TODO 会引起整个 Table 的重新渲染,需要优化\n        this.tooltipContent = cell.innerText || cell.textContent;\n        tooltip.referenceElm = cell;\n        tooltip.$refs.popper && (tooltip.$refs.popper.style.display = 'none');\n        tooltip.doDestroy();\n        tooltip.setExpectedState(true);\n        this.activateTooltip(tooltip);\n      }\n    },\n    handleCellMouseLeave: function handleCellMouseLeave(event) {\n      var tooltip = this.$refs.tooltip;\n      if (tooltip) {\n        tooltip.setExpectedState(false);\n        tooltip.handleClosePopper();\n      }\n      var cell = getCell(event);\n      if (!cell) return;\n\n      var oldHoverState = this.table.hoverState || {};\n      this.table.$emit('cell-mouse-leave', oldHoverState.row, oldHoverState.column, oldHoverState.cell, event);\n    },\n\n\n    handleMouseEnter: debounce_default()(30, function (index) {\n      this.store.commit('setHoverRow', index);\n    }),\n\n    handleMouseLeave: debounce_default()(30, function () {\n      this.store.commit('setHoverRow', null);\n    }),\n\n    handleContextMenu: function handleContextMenu(event, row) {\n      this.handleEvent(event, row, 'contextmenu');\n    },\n    handleDoubleClick: function handleDoubleClick(event, row) {\n      this.handleEvent(event, row, 'dblclick');\n    },\n    handleClick: function handleClick(event, row) {\n      this.store.commit('setCurrentRow', row);\n      this.handleEvent(event, row, 'click');\n    },\n    handleEvent: function handleEvent(event, row, name) {\n      var table = this.table;\n      var cell = getCell(event);\n      var column = void 0;\n      if (cell) {\n        column = getColumnByCell(table, cell);\n        if (column) {\n          table.$emit('cell-' + name, row, column, cell, event);\n        }\n      }\n      table.$emit('row-' + name, row, column, event);\n    },\n    rowRender: function rowRender(row, $index, treeRowData) {\n      var _this4 = this;\n\n      var h = this.$createElement;\n      var treeIndent = this.treeIndent,\n          columns = this.columns,\n          firstDefaultColumnIndex = this.firstDefaultColumnIndex;\n\n      var rowClasses = this.getRowClass(row, $index);\n      var display = true;\n      if (treeRowData) {\n        rowClasses.push('el-table__row--level-' + treeRowData.level);\n        display = treeRowData.display;\n      }\n      // 指令 v-show 会覆盖 row-style 中 display\n      // 使用 :style 代替 v-show https://github.com/ElemeFE/element/issues/16995\n      var displayStyle = display ? null : {\n        display: 'none'\n      };\n      return h(table_row, {\n        style: [displayStyle, this.getRowStyle(row, $index)],\n        'class': rowClasses,\n        key: this.getKeyOfRow(row, $index),\n        nativeOn: {\n          'dblclick': function dblclick($event) {\n            return _this4.handleDoubleClick($event, row);\n          },\n          'click': function click($event) {\n            return _this4.handleClick($event, row);\n          },\n          'contextmenu': function contextmenu($event) {\n            return _this4.handleContextMenu($event, row);\n          },\n          'mouseenter': function mouseenter(_) {\n            return _this4.handleMouseEnter($index);\n          },\n          'mouseleave': this.handleMouseLeave\n        },\n        attrs: {\n          columns: columns,\n          row: row,\n          index: $index,\n          store: this.store,\n          context: this.context || this.table.$vnode.context,\n          firstDefaultColumnIndex: firstDefaultColumnIndex,\n          treeRowData: treeRowData,\n          treeIndent: treeIndent,\n          columnsHidden: this.columnsHidden,\n          getSpan: this.getSpan,\n          getColspanRealWidth: this.getColspanRealWidth,\n          getCellStyle: this.getCellStyle,\n          getCellClass: this.getCellClass,\n          handleCellMouseEnter: this.handleCellMouseEnter,\n          handleCellMouseLeave: this.handleCellMouseLeave,\n          isSelected: this.store.isSelected(row),\n          isExpanded: this.store.states.expandRows.indexOf(row) > -1,\n          fixed: this.fixed\n        }\n      });\n    },\n    wrappedRowRender: function wrappedRowRender(row, $index) {\n      var _this5 = this;\n\n      var h = this.$createElement;\n\n      var store = this.store;\n      var isRowExpanded = store.isRowExpanded,\n          assertRowKey = store.assertRowKey;\n      var _store$states = store.states,\n          treeData = _store$states.treeData,\n          lazyTreeNodeMap = _store$states.lazyTreeNodeMap,\n          childrenColumnName = _store$states.childrenColumnName,\n          rowKey = _store$states.rowKey;\n\n      if (this.hasExpandColumn && isRowExpanded(row)) {\n        var renderExpanded = this.table.renderExpanded;\n        var tr = this.rowRender(row, $index);\n        if (!renderExpanded) {\n          console.error('[Element Error]renderExpanded is required.');\n          return tr;\n        }\n        // 使用二维数组,避免修改 $index\n        return [[tr, h(\n          'tr',\n          { key: 'expanded-row__' + tr.key },\n          [h(\n            'td',\n            {\n              attrs: { colspan: this.columnsCount },\n              'class': 'el-table__cell el-table__expanded-cell' },\n            [renderExpanded(this.$createElement, { row: row, $index: $index, store: this.store })]\n          )]\n        )]];\n      } else if (Object.keys(treeData).length) {\n        assertRowKey();\n        // TreeTable 时,rowKey 必须由用户设定,不使用 getKeyOfRow 计算\n        // 在调用 rowRender 函数时,仍然会计算 rowKey,不太好的操作\n        var key = getRowIdentity(row, rowKey);\n        var cur = treeData[key];\n        var treeRowData = null;\n        if (cur) {\n          treeRowData = {\n            expanded: cur.expanded,\n            level: cur.level,\n            display: true\n          };\n          if (typeof cur.lazy === 'boolean') {\n            if (typeof cur.loaded === 'boolean' && cur.loaded) {\n              treeRowData.noLazyChildren = !(cur.children && cur.children.length);\n            }\n            treeRowData.loading = cur.loading;\n          }\n        }\n        var tmp = [this.rowRender(row, $index, treeRowData)];\n        // 渲染嵌套数据\n        if (cur) {\n          // currentRow 记录的是 index,所以还需主动增加 TreeTable 的 index\n          var i = 0;\n          var traverse = function traverse(children, parent) {\n            if (!(children && children.length && parent)) return;\n            children.forEach(function (node) {\n              // 父节点的 display 状态影响子节点的显示状态\n              var innerTreeRowData = {\n                display: parent.display && parent.expanded,\n                level: parent.level + 1\n              };\n              var childKey = getRowIdentity(node, rowKey);\n              if (childKey === undefined || childKey === null) {\n                throw new Error('for nested data item, row-key is required.');\n              }\n              cur = table_body_extends({}, treeData[childKey]);\n              // 对于当前节点,分成有无子节点两种情况。\n              // 如果包含子节点的,设置 expanded 属性。\n              // 对于它子节点的 display 属性由它本身的 expanded 与 display 共同决定。\n              if (cur) {\n                innerTreeRowData.expanded = cur.expanded;\n                // 懒加载的某些节点,level 未知\n                cur.level = cur.level || innerTreeRowData.level;\n                cur.display = !!(cur.expanded && innerTreeRowData.display);\n                if (typeof cur.lazy === 'boolean') {\n                  if (typeof cur.loaded === 'boolean' && cur.loaded) {\n                    innerTreeRowData.noLazyChildren = !(cur.children && cur.children.length);\n                  }\n                  innerTreeRowData.loading = cur.loading;\n                }\n              }\n              i++;\n              tmp.push(_this5.rowRender(node, $index + i, innerTreeRowData));\n              if (cur) {\n                var _nodes = lazyTreeNodeMap[childKey] || node[childrenColumnName];\n                traverse(_nodes, cur);\n              }\n            });\n          };\n          // 对于 root 节点,display 一定为 true\n          cur.display = true;\n          var nodes = lazyTreeNodeMap[key] || row[childrenColumnName];\n          traverse(nodes, cur);\n        }\n        return tmp;\n      } else {\n        return this.rowRender(row, $index);\n      }\n    }\n  }\n});\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/table/src/filter-panel.vue?vue&type=template&id=7f2c919f&\nvar filter_panelvue_type_template_id_7f2c919f_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\"transition\", { attrs: { name: \"el-zoom-in-top\" } }, [\n    _vm.multiple\n      ? _c(\n          \"div\",\n          {\n            directives: [\n              {\n                name: \"clickoutside\",\n                rawName: \"v-clickoutside\",\n                value: _vm.handleOutsideClick,\n                expression: \"handleOutsideClick\"\n              },\n              {\n                name: \"show\",\n                rawName: \"v-show\",\n                value: _vm.showPopper,\n                expression: \"showPopper\"\n              }\n            ],\n            staticClass: \"el-table-filter\"\n          },\n          [\n            _c(\n              \"div\",\n              { staticClass: \"el-table-filter__content\" },\n              [\n                _c(\n                  \"el-scrollbar\",\n                  { attrs: { \"wrap-class\": \"el-table-filter__wrap\" } },\n                  [\n                    _c(\n                      \"el-checkbox-group\",\n                      {\n                        staticClass: \"el-table-filter__checkbox-group\",\n                        model: {\n                          value: _vm.filteredValue,\n                          callback: function($$v) {\n                            _vm.filteredValue = $$v\n                          },\n                          expression: \"filteredValue\"\n                        }\n                      },\n                      _vm._l(_vm.filters, function(filter) {\n                        return _c(\n                          \"el-checkbox\",\n                          { key: filter.value, attrs: { label: filter.value } },\n                          [_vm._v(_vm._s(filter.text))]\n                        )\n                      }),\n                      1\n                    )\n                  ],\n                  1\n                )\n              ],\n              1\n            ),\n            _c(\"div\", { staticClass: \"el-table-filter__bottom\" }, [\n              _c(\n                \"button\",\n                {\n                  class: { \"is-disabled\": _vm.filteredValue.length === 0 },\n                  attrs: { disabled: _vm.filteredValue.length === 0 },\n                  on: { click: _vm.handleConfirm }\n                },\n                [_vm._v(_vm._s(_vm.t(\"el.table.confirmFilter\")))]\n              ),\n              _c(\"button\", { on: { click: _vm.handleReset } }, [\n                _vm._v(_vm._s(_vm.t(\"el.table.resetFilter\")))\n              ])\n            ])\n          ]\n        )\n      : _c(\n          \"div\",\n          {\n            directives: [\n              {\n                name: \"clickoutside\",\n                rawName: \"v-clickoutside\",\n                value: _vm.handleOutsideClick,\n                expression: \"handleOutsideClick\"\n              },\n              {\n                name: \"show\",\n                rawName: \"v-show\",\n                value: _vm.showPopper,\n                expression: \"showPopper\"\n              }\n            ],\n            staticClass: \"el-table-filter\"\n          },\n          [\n            _c(\n              \"ul\",\n              { staticClass: \"el-table-filter__list\" },\n              [\n                _c(\n                  \"li\",\n                  {\n                    staticClass: \"el-table-filter__list-item\",\n                    class: {\n                      \"is-active\":\n                        _vm.filterValue === undefined ||\n                        _vm.filterValue === null\n                    },\n                    on: {\n                      click: function($event) {\n                        _vm.handleSelect(null)\n                      }\n                    }\n                  },\n                  [_vm._v(_vm._s(_vm.t(\"el.table.clearFilter\")))]\n                ),\n                _vm._l(_vm.filters, function(filter) {\n                  return _c(\n                    \"li\",\n                    {\n                      key: filter.value,\n                      staticClass: \"el-table-filter__list-item\",\n                      class: { \"is-active\": _vm.isActive(filter) },\n                      attrs: { label: filter.value },\n                      on: {\n                        click: function($event) {\n                          _vm.handleSelect(filter.value)\n                        }\n                      }\n                    },\n                    [_vm._v(_vm._s(filter.text))]\n                  )\n                })\n              ],\n              2\n            )\n          ]\n        )\n  ])\n}\nvar filter_panelvue_type_template_id_7f2c919f_staticRenderFns = []\nfilter_panelvue_type_template_id_7f2c919f_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/table/src/filter-panel.vue?vue&type=template&id=7f2c919f&\n\n// CONCATENATED MODULE: ./packages/table/src/dropdown.js\n\nvar dropdowns = [];\n\n!external_vue_default.a.prototype.$isServer && document.addEventListener('click', function (event) {\n  dropdowns.forEach(function (dropdown) {\n    var target = event.target;\n    if (!dropdown || !dropdown.$el) return;\n    if (target === dropdown.$el || dropdown.$el.contains(target)) {\n      return;\n    }\n    dropdown.handleOutsideClick && dropdown.handleOutsideClick(event);\n  });\n});\n\n/* harmony default export */ var src_dropdown = ({\n  open: function open(instance) {\n    if (instance) {\n      dropdowns.push(instance);\n    }\n  },\n  close: function close(instance) {\n    var index = dropdowns.indexOf(instance);\n    if (index !== -1) {\n      dropdowns.splice(instance, 1);\n    }\n  }\n});\n// EXTERNAL MODULE: external \"element-ui/lib/checkbox-group\"\nvar checkbox_group_ = __nested_webpack_require_8926__(32);\nvar checkbox_group_default = /*#__PURE__*/__nested_webpack_require_8926__.n(checkbox_group_);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/table/src/filter-panel.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n\n\n\n\n/* harmony default export */ var filter_panelvue_type_script_lang_js_ = ({\n  name: 'ElTableFilterPanel',\n\n  mixins: [vue_popper_default.a, locale_default.a],\n\n  directives: {\n    Clickoutside: clickoutside_default.a\n  },\n\n  components: {\n    ElCheckbox: checkbox_default.a,\n    ElCheckboxGroup: checkbox_group_default.a,\n    ElScrollbar: scrollbar_default.a\n  },\n\n  props: {\n    placement: {\n      type: String,\n      default: 'bottom-end'\n    }\n  },\n\n  methods: {\n    isActive: function isActive(filter) {\n      return filter.value === this.filterValue;\n    },\n    handleOutsideClick: function handleOutsideClick() {\n      var _this = this;\n\n      setTimeout(function () {\n        _this.showPopper = false;\n      }, 16);\n    },\n    handleConfirm: function handleConfirm() {\n      this.confirmFilter(this.filteredValue);\n      this.handleOutsideClick();\n    },\n    handleReset: function handleReset() {\n      this.filteredValue = [];\n      this.confirmFilter(this.filteredValue);\n      this.handleOutsideClick();\n    },\n    handleSelect: function handleSelect(filterValue) {\n      this.filterValue = filterValue;\n\n      if (typeof filterValue !== 'undefined' && filterValue !== null) {\n        this.confirmFilter(this.filteredValue);\n      } else {\n        this.confirmFilter([]);\n      }\n\n      this.handleOutsideClick();\n    },\n    confirmFilter: function confirmFilter(filteredValue) {\n      this.table.store.commit('filterChange', {\n        column: this.column,\n        values: filteredValue\n      });\n      this.table.store.updateAllSelected();\n    }\n  },\n\n  data: function data() {\n    return {\n      table: null,\n      cell: null,\n      column: null\n    };\n  },\n\n\n  computed: {\n    filters: function filters() {\n      return this.column && this.column.filters;\n    },\n\n\n    filterValue: {\n      get: function get() {\n        return (this.column.filteredValue || [])[0];\n      },\n      set: function set(value) {\n        if (this.filteredValue) {\n          if (typeof value !== 'undefined' && value !== null) {\n            this.filteredValue.splice(0, 1, value);\n          } else {\n            this.filteredValue.splice(0, 1);\n          }\n        }\n      }\n    },\n\n    filteredValue: {\n      get: function get() {\n        if (this.column) {\n          return this.column.filteredValue || [];\n        }\n        return [];\n      },\n      set: function set(value) {\n        if (this.column) {\n          this.column.filteredValue = value;\n        }\n      }\n    },\n\n    multiple: function multiple() {\n      if (this.column) {\n        return this.column.filterMultiple;\n      }\n      return true;\n    }\n  },\n\n  mounted: function mounted() {\n    var _this2 = this;\n\n    this.popperElm = this.$el;\n    this.referenceElm = this.cell;\n    this.table.bodyWrapper.addEventListener('scroll', function () {\n      _this2.updatePopper();\n    });\n\n    this.$watch('showPopper', function (value) {\n      if (_this2.column) _this2.column.filterOpened = value;\n      if (value) {\n        src_dropdown.open(_this2);\n      } else {\n        src_dropdown.close(_this2);\n      }\n    });\n  },\n\n  watch: {\n    showPopper: function showPopper(val) {\n      if (val === true && parseInt(this.popperJS._popper.style.zIndex, 10) < popup_[\"PopupManager\"].zIndex) {\n        this.popperJS._popper.style.zIndex = popup_[\"PopupManager\"].nextZIndex();\n      }\n    }\n  }\n});\n// CONCATENATED MODULE: ./packages/table/src/filter-panel.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_filter_panelvue_type_script_lang_js_ = (filter_panelvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/table/src/filter-panel.vue\n\n\n\n\n\n/* normalize component */\n\nvar filter_panel_component = normalizeComponent(\n  src_filter_panelvue_type_script_lang_js_,\n  filter_panelvue_type_template_id_7f2c919f_render,\n  filter_panelvue_type_template_id_7f2c919f_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var filter_panel_api; }\nfilter_panel_component.options.__file = \"packages/table/src/filter-panel.vue\"\n/* harmony default export */ var filter_panel = (filter_panel_component.exports);\n// CONCATENATED MODULE: ./packages/table/src/table-header.js\nvar table_header_extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\n\n\n\n\n\n\n\nvar getAllColumns = function getAllColumns(columns) {\n  var result = [];\n  columns.forEach(function (column) {\n    if (column.children) {\n      result.push(column);\n      result.push.apply(result, getAllColumns(column.children));\n    } else {\n      result.push(column);\n    }\n  });\n  return result;\n};\n\nvar convertToRows = function convertToRows(originColumns) {\n  var maxLevel = 1;\n  var traverse = function traverse(column, parent) {\n    if (parent) {\n      column.level = parent.level + 1;\n      if (maxLevel < column.level) {\n        maxLevel = column.level;\n      }\n    }\n    if (column.children) {\n      var colSpan = 0;\n      column.children.forEach(function (subColumn) {\n        traverse(subColumn, column);\n        colSpan += subColumn.colSpan;\n      });\n      column.colSpan = colSpan;\n    } else {\n      column.colSpan = 1;\n    }\n  };\n\n  originColumns.forEach(function (column) {\n    column.level = 1;\n    traverse(column);\n  });\n\n  var rows = [];\n  for (var i = 0; i < maxLevel; i++) {\n    rows.push([]);\n  }\n\n  var allColumns = getAllColumns(originColumns);\n\n  allColumns.forEach(function (column) {\n    if (!column.children) {\n      column.rowSpan = maxLevel - column.level + 1;\n    } else {\n      column.rowSpan = 1;\n    }\n    rows[column.level - 1].push(column);\n  });\n\n  return rows;\n};\n\n/* harmony default export */ var table_header = ({\n  name: 'ElTableHeader',\n\n  mixins: [layout_observer],\n\n  render: function render(h) {\n    var _this = this;\n\n    var originColumns = this.store.states.originColumns;\n    var columnRows = convertToRows(originColumns, this.columns);\n    // 是否拥有多级表头\n    var isGroup = columnRows.length > 1;\n    if (isGroup) this.$parent.isGroup = true;\n    return h(\n      'table',\n      {\n        'class': 'el-table__header',\n        attrs: { cellspacing: '0',\n          cellpadding: '0',\n          border: '0' }\n      },\n      [h('colgroup', [this.columns.map(function (column) {\n        return h('col', {\n          attrs: { name: column.id },\n          key: column.id });\n      }), this.hasGutter ? h('col', {\n        attrs: { name: 'gutter' }\n      }) : '']), h(\n        'thead',\n        { 'class': [{ 'is-group': isGroup, 'has-gutter': this.hasGutter }] },\n        [this._l(columnRows, function (columns, rowIndex) {\n          return h(\n            'tr',\n            {\n              style: _this.getHeaderRowStyle(rowIndex),\n              'class': _this.getHeaderRowClass(rowIndex)\n            },\n            [columns.map(function (column, cellIndex) {\n              return h(\n                'th',\n                {\n                  attrs: {\n                    colspan: column.colSpan,\n                    rowspan: column.rowSpan\n                  },\n                  on: {\n                    'mousemove': function mousemove($event) {\n                      return _this.handleMouseMove($event, column);\n                    },\n                    'mouseout': _this.handleMouseOut,\n                    'mousedown': function mousedown($event) {\n                      return _this.handleMouseDown($event, column);\n                    },\n                    'click': function click($event) {\n                      return _this.handleHeaderClick($event, column);\n                    },\n                    'contextmenu': function contextmenu($event) {\n                      return _this.handleHeaderContextMenu($event, column);\n                    }\n                  },\n\n                  style: _this.getHeaderCellStyle(rowIndex, cellIndex, columns, column),\n                  'class': _this.getHeaderCellClass(rowIndex, cellIndex, columns, column),\n                  key: column.id },\n                [h(\n                  'div',\n                  { 'class': ['cell', column.filteredValue && column.filteredValue.length > 0 ? 'highlight' : '', column.labelClassName] },\n                  [column.renderHeader ? column.renderHeader.call(_this._renderProxy, h, { column: column, $index: cellIndex, store: _this.store, _self: _this.$parent.$vnode.context }) : column.label, column.sortable ? h(\n                    'span',\n                    {\n                      'class': 'caret-wrapper',\n                      on: {\n                        'click': function click($event) {\n                          return _this.handleSortClick($event, column);\n                        }\n                      }\n                    },\n                    [h('i', { 'class': 'sort-caret ascending',\n                      on: {\n                        'click': function click($event) {\n                          return _this.handleSortClick($event, column, 'ascending');\n                        }\n                      }\n                    }), h('i', { 'class': 'sort-caret descending',\n                      on: {\n                        'click': function click($event) {\n                          return _this.handleSortClick($event, column, 'descending');\n                        }\n                      }\n                    })]\n                  ) : '', column.filterable ? h(\n                    'span',\n                    {\n                      'class': 'el-table__column-filter-trigger',\n                      on: {\n                        'click': function click($event) {\n                          return _this.handleFilterClick($event, column);\n                        }\n                      }\n                    },\n                    [h('i', { 'class': ['el-icon-arrow-down', column.filterOpened ? 'el-icon-arrow-up' : ''] })]\n                  ) : '']\n                )]\n              );\n            }), _this.hasGutter ? h('th', { 'class': 'el-table__cell gutter' }) : '']\n          );\n        })]\n      )]\n    );\n  },\n\n\n  props: {\n    fixed: String,\n    store: {\n      required: true\n    },\n    border: Boolean,\n    defaultSort: {\n      type: Object,\n      default: function _default() {\n        return {\n          prop: '',\n          order: ''\n        };\n      }\n    }\n  },\n\n  components: {\n    ElCheckbox: checkbox_default.a\n  },\n\n  computed: table_header_extends({\n    table: function table() {\n      return this.$parent;\n    },\n    hasGutter: function hasGutter() {\n      return !this.fixed && this.tableLayout.gutterWidth;\n    }\n  }, mapStates({\n    columns: 'columns',\n    isAllSelected: 'isAllSelected',\n    leftFixedLeafCount: 'fixedLeafColumnsLength',\n    rightFixedLeafCount: 'rightFixedLeafColumnsLength',\n    columnsCount: function columnsCount(states) {\n      return states.columns.length;\n    },\n    leftFixedCount: function leftFixedCount(states) {\n      return states.fixedColumns.length;\n    },\n    rightFixedCount: function rightFixedCount(states) {\n      return states.rightFixedColumns.length;\n    }\n  })),\n\n  created: function created() {\n    this.filterPanels = {};\n  },\n  mounted: function mounted() {\n    var _this2 = this;\n\n    // nextTick 是有必要的 https://github.com/ElemeFE/element/pull/11311\n    this.$nextTick(function () {\n      var _defaultSort = _this2.defaultSort,\n          prop = _defaultSort.prop,\n          order = _defaultSort.order;\n\n      var init = true;\n      _this2.store.commit('sort', { prop: prop, order: order, init: init });\n    });\n  },\n  beforeDestroy: function beforeDestroy() {\n    var panels = this.filterPanels;\n    for (var prop in panels) {\n      if (panels.hasOwnProperty(prop) && panels[prop]) {\n        panels[prop].$destroy(true);\n      }\n    }\n  },\n\n\n  methods: {\n    isCellHidden: function isCellHidden(index, columns) {\n      var start = 0;\n      for (var i = 0; i < index; i++) {\n        start += columns[i].colSpan;\n      }\n      var after = start + columns[index].colSpan - 1;\n      if (this.fixed === true || this.fixed === 'left') {\n        return after >= this.leftFixedLeafCount;\n      } else if (this.fixed === 'right') {\n        return start < this.columnsCount - this.rightFixedLeafCount;\n      } else {\n        return after < this.leftFixedLeafCount || start >= this.columnsCount - this.rightFixedLeafCount;\n      }\n    },\n    getHeaderRowStyle: function getHeaderRowStyle(rowIndex) {\n      var headerRowStyle = this.table.headerRowStyle;\n      if (typeof headerRowStyle === 'function') {\n        return headerRowStyle.call(null, { rowIndex: rowIndex });\n      }\n      return headerRowStyle;\n    },\n    getHeaderRowClass: function getHeaderRowClass(rowIndex) {\n      var classes = [];\n\n      var headerRowClassName = this.table.headerRowClassName;\n      if (typeof headerRowClassName === 'string') {\n        classes.push(headerRowClassName);\n      } else if (typeof headerRowClassName === 'function') {\n        classes.push(headerRowClassName.call(null, { rowIndex: rowIndex }));\n      }\n\n      return classes.join(' ');\n    },\n    getHeaderCellStyle: function getHeaderCellStyle(rowIndex, columnIndex, row, column) {\n      var headerCellStyle = this.table.headerCellStyle;\n      if (typeof headerCellStyle === 'function') {\n        return headerCellStyle.call(null, {\n          rowIndex: rowIndex,\n          columnIndex: columnIndex,\n          row: row,\n          column: column\n        });\n      }\n      return headerCellStyle;\n    },\n    getHeaderCellClass: function getHeaderCellClass(rowIndex, columnIndex, row, column) {\n      var classes = [column.id, column.order, column.headerAlign, column.className, column.labelClassName];\n\n      if (rowIndex === 0 && this.isCellHidden(columnIndex, row)) {\n        classes.push('is-hidden');\n      }\n\n      if (!column.children) {\n        classes.push('is-leaf');\n      }\n\n      if (column.sortable) {\n        classes.push('is-sortable');\n      }\n\n      var headerCellClassName = this.table.headerCellClassName;\n      if (typeof headerCellClassName === 'string') {\n        classes.push(headerCellClassName);\n      } else if (typeof headerCellClassName === 'function') {\n        classes.push(headerCellClassName.call(null, {\n          rowIndex: rowIndex,\n          columnIndex: columnIndex,\n          row: row,\n          column: column\n        }));\n      }\n\n      classes.push('el-table__cell');\n\n      return classes.join(' ');\n    },\n    toggleAllSelection: function toggleAllSelection() {\n      this.store.commit('toggleAllSelection');\n    },\n    handleFilterClick: function handleFilterClick(event, column) {\n      event.stopPropagation();\n      var target = event.target;\n      var cell = target.tagName === 'TH' ? target : target.parentNode;\n      if (Object(dom_[\"hasClass\"])(cell, 'noclick')) return;\n      cell = cell.querySelector('.el-table__column-filter-trigger') || cell;\n      var table = this.$parent;\n\n      var filterPanel = this.filterPanels[column.id];\n\n      if (filterPanel && column.filterOpened) {\n        filterPanel.showPopper = false;\n        return;\n      }\n\n      if (!filterPanel) {\n        filterPanel = new external_vue_default.a(filter_panel);\n        this.filterPanels[column.id] = filterPanel;\n        if (column.filterPlacement) {\n          filterPanel.placement = column.filterPlacement;\n        }\n        filterPanel.table = table;\n        filterPanel.cell = cell;\n        filterPanel.column = column;\n        !this.$isServer && filterPanel.$mount(document.createElement('div'));\n      }\n\n      setTimeout(function () {\n        filterPanel.showPopper = true;\n      }, 16);\n    },\n    handleHeaderClick: function handleHeaderClick(event, column) {\n      if (!column.filters && column.sortable) {\n        this.handleSortClick(event, column);\n      } else if (column.filterable && !column.sortable) {\n        this.handleFilterClick(event, column);\n      }\n\n      this.$parent.$emit('header-click', column, event);\n    },\n    handleHeaderContextMenu: function handleHeaderContextMenu(event, column) {\n      this.$parent.$emit('header-contextmenu', column, event);\n    },\n    handleMouseDown: function handleMouseDown(event, column) {\n      var _this3 = this;\n\n      if (this.$isServer) return;\n      if (column.children && column.children.length > 0) return;\n      /* istanbul ignore if */\n      if (this.draggingColumn && this.border) {\n        this.dragging = true;\n\n        this.$parent.resizeProxyVisible = true;\n\n        var table = this.$parent;\n        var tableEl = table.$el;\n        var tableLeft = tableEl.getBoundingClientRect().left;\n        var columnEl = this.$el.querySelector('th.' + column.id);\n        var columnRect = columnEl.getBoundingClientRect();\n        var minLeft = columnRect.left - tableLeft + 30;\n\n        Object(dom_[\"addClass\"])(columnEl, 'noclick');\n\n        this.dragState = {\n          startMouseLeft: event.clientX,\n          startLeft: columnRect.right - tableLeft,\n          startColumnLeft: columnRect.left - tableLeft,\n          tableLeft: tableLeft\n        };\n\n        var resizeProxy = table.$refs.resizeProxy;\n        resizeProxy.style.left = this.dragState.startLeft + 'px';\n\n        document.onselectstart = function () {\n          return false;\n        };\n        document.ondragstart = function () {\n          return false;\n        };\n\n        var handleMouseMove = function handleMouseMove(event) {\n          var deltaLeft = event.clientX - _this3.dragState.startMouseLeft;\n          var proxyLeft = _this3.dragState.startLeft + deltaLeft;\n\n          resizeProxy.style.left = Math.max(minLeft, proxyLeft) + 'px';\n        };\n\n        var handleMouseUp = function handleMouseUp() {\n          if (_this3.dragging) {\n            var _dragState = _this3.dragState,\n                startColumnLeft = _dragState.startColumnLeft,\n                startLeft = _dragState.startLeft;\n\n            var finalLeft = parseInt(resizeProxy.style.left, 10);\n            var columnWidth = finalLeft - startColumnLeft;\n            column.width = column.realWidth = columnWidth;\n            table.$emit('header-dragend', column.width, startLeft - startColumnLeft, column, event);\n\n            _this3.store.scheduleLayout();\n\n            document.body.style.cursor = '';\n            _this3.dragging = false;\n            _this3.draggingColumn = null;\n            _this3.dragState = {};\n\n            table.resizeProxyVisible = false;\n          }\n\n          document.removeEventListener('mousemove', handleMouseMove);\n          document.removeEventListener('mouseup', handleMouseUp);\n          document.onselectstart = null;\n          document.ondragstart = null;\n\n          setTimeout(function () {\n            Object(dom_[\"removeClass\"])(columnEl, 'noclick');\n          }, 0);\n        };\n\n        document.addEventListener('mousemove', handleMouseMove);\n        document.addEventListener('mouseup', handleMouseUp);\n      }\n    },\n    handleMouseMove: function handleMouseMove(event, column) {\n      if (column.children && column.children.length > 0) return;\n      var target = event.target;\n      while (target && target.tagName !== 'TH') {\n        target = target.parentNode;\n      }\n\n      if (!column || !column.resizable) return;\n\n      if (!this.dragging && this.border) {\n        var rect = target.getBoundingClientRect();\n\n        var bodyStyle = document.body.style;\n        if (rect.width > 12 && rect.right - event.pageX < 8) {\n          bodyStyle.cursor = 'col-resize';\n          if (Object(dom_[\"hasClass\"])(target, 'is-sortable')) {\n            target.style.cursor = 'col-resize';\n          }\n          this.draggingColumn = column;\n        } else if (!this.dragging) {\n          bodyStyle.cursor = '';\n          if (Object(dom_[\"hasClass\"])(target, 'is-sortable')) {\n            target.style.cursor = 'pointer';\n          }\n          this.draggingColumn = null;\n        }\n      }\n    },\n    handleMouseOut: function handleMouseOut() {\n      if (this.$isServer) return;\n      document.body.style.cursor = '';\n    },\n    toggleOrder: function toggleOrder(_ref) {\n      var order = _ref.order,\n          sortOrders = _ref.sortOrders;\n\n      if (order === '') return sortOrders[0];\n      var index = sortOrders.indexOf(order || null);\n      return sortOrders[index > sortOrders.length - 2 ? 0 : index + 1];\n    },\n    handleSortClick: function handleSortClick(event, column, givenOrder) {\n      event.stopPropagation();\n      var order = column.order === givenOrder ? null : givenOrder || this.toggleOrder(column);\n\n      var target = event.target;\n      while (target && target.tagName !== 'TH') {\n        target = target.parentNode;\n      }\n\n      if (target && target.tagName === 'TH') {\n        if (Object(dom_[\"hasClass\"])(target, 'noclick')) {\n          Object(dom_[\"removeClass\"])(target, 'noclick');\n          return;\n        }\n      }\n\n      if (!column.sortable) return;\n\n      var states = this.store.states;\n      var sortProp = states.sortProp;\n      var sortOrder = void 0;\n      var sortingColumn = states.sortingColumn;\n\n      if (sortingColumn !== column || sortingColumn === column && sortingColumn.order === null) {\n        if (sortingColumn) {\n          sortingColumn.order = null;\n        }\n        states.sortingColumn = column;\n        sortProp = column.property;\n      }\n\n      if (!order) {\n        sortOrder = column.order = null;\n      } else {\n        sortOrder = column.order = order;\n      }\n\n      states.sortProp = sortProp;\n      states.sortOrder = sortOrder;\n\n      this.store.commit('changeSortCondition');\n    }\n  },\n\n  data: function data() {\n    return {\n      draggingColumn: null,\n      dragging: false,\n      dragState: {}\n    };\n  }\n});\n// CONCATENATED MODULE: ./packages/table/src/table-footer.js\nvar table_footer_extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\n\n\n\n/* harmony default export */ var table_footer = ({\n  name: 'ElTableFooter',\n\n  mixins: [layout_observer],\n\n  render: function render(h) {\n    var _this = this;\n\n    var sums = [];\n    if (this.summaryMethod) {\n      sums = this.summaryMethod({ columns: this.columns, data: this.store.states.data });\n    } else {\n      this.columns.forEach(function (column, index) {\n        if (index === 0) {\n          sums[index] = _this.sumText;\n          return;\n        }\n        var values = _this.store.states.data.map(function (item) {\n          return Number(item[column.property]);\n        });\n        var precisions = [];\n        var notNumber = true;\n        values.forEach(function (value) {\n          if (!isNaN(value)) {\n            notNumber = false;\n            var decimal = ('' + value).split('.')[1];\n            precisions.push(decimal ? decimal.length : 0);\n          }\n        });\n        var precision = Math.max.apply(null, precisions);\n        if (!notNumber) {\n          sums[index] = values.reduce(function (prev, curr) {\n            var value = Number(curr);\n            if (!isNaN(value)) {\n              return parseFloat((prev + curr).toFixed(Math.min(precision, 20)));\n            } else {\n              return prev;\n            }\n          }, 0);\n        } else {\n          sums[index] = '';\n        }\n      });\n    }\n\n    return h(\n      'table',\n      {\n        'class': 'el-table__footer',\n        attrs: { cellspacing: '0',\n          cellpadding: '0',\n          border: '0' }\n      },\n      [h('colgroup', [this.columns.map(function (column) {\n        return h('col', {\n          attrs: { name: column.id },\n          key: column.id });\n      }), this.hasGutter ? h('col', {\n        attrs: { name: 'gutter' }\n      }) : '']), h(\n        'tbody',\n        { 'class': [{ 'has-gutter': this.hasGutter }] },\n        [h('tr', [this.columns.map(function (column, cellIndex) {\n          return h(\n            'td',\n            {\n              key: cellIndex,\n              attrs: { colspan: column.colSpan,\n                rowspan: column.rowSpan\n              },\n              'class': [].concat(_this.getRowClasses(column, cellIndex), ['el-table__cell']) },\n            [h(\n              'div',\n              { 'class': ['cell', column.labelClassName] },\n              [sums[cellIndex]]\n            )]\n          );\n        }), this.hasGutter ? h('th', { 'class': 'el-table__cell gutter' }) : ''])]\n      )]\n    );\n  },\n\n\n  props: {\n    fixed: String,\n    store: {\n      required: true\n    },\n    summaryMethod: Function,\n    sumText: String,\n    border: Boolean,\n    defaultSort: {\n      type: Object,\n      default: function _default() {\n        return {\n          prop: '',\n          order: ''\n        };\n      }\n    }\n  },\n\n  computed: table_footer_extends({\n    table: function table() {\n      return this.$parent;\n    },\n    hasGutter: function hasGutter() {\n      return !this.fixed && this.tableLayout.gutterWidth;\n    }\n  }, mapStates({\n    columns: 'columns',\n    isAllSelected: 'isAllSelected',\n    leftFixedLeafCount: 'fixedLeafColumnsLength',\n    rightFixedLeafCount: 'rightFixedLeafColumnsLength',\n    columnsCount: function columnsCount(states) {\n      return states.columns.length;\n    },\n    leftFixedCount: function leftFixedCount(states) {\n      return states.fixedColumns.length;\n    },\n    rightFixedCount: function rightFixedCount(states) {\n      return states.rightFixedColumns.length;\n    }\n  })),\n\n  methods: {\n    isCellHidden: function isCellHidden(index, columns, column) {\n      if (this.fixed === true || this.fixed === 'left') {\n        return index >= this.leftFixedLeafCount;\n      } else if (this.fixed === 'right') {\n        var before = 0;\n        for (var i = 0; i < index; i++) {\n          before += columns[i].colSpan;\n        }\n        return before < this.columnsCount - this.rightFixedLeafCount;\n      } else if (!this.fixed && column.fixed) {\n        // hide cell when footer instance is not fixed and column is fixed\n        return true;\n      } else {\n        return index < this.leftFixedCount || index >= this.columnsCount - this.rightFixedCount;\n      }\n    },\n    getRowClasses: function getRowClasses(column, cellIndex) {\n      var classes = [column.id, column.align, column.labelClassName];\n      if (column.className) {\n        classes.push(column.className);\n      }\n      if (this.isCellHidden(cellIndex, this.columns, column)) {\n        classes.push('is-hidden');\n      }\n      if (!column.children) {\n        classes.push('is-leaf');\n      }\n      return classes;\n    }\n  }\n});\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/table/src/table.vue?vue&type=script&lang=js&\nvar tablevue_type_script_lang_js_extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar tableIdSeed = 1;\n\n/* harmony default export */ var tablevue_type_script_lang_js_ = ({\n  name: 'ElTable',\n\n  mixins: [locale_default.a, migrating_default.a],\n\n  directives: {\n    Mousewheel: directives_mousewheel\n  },\n\n  props: {\n    data: {\n      type: Array,\n      default: function _default() {\n        return [];\n      }\n    },\n\n    size: String,\n\n    width: [String, Number],\n\n    height: [String, Number],\n\n    maxHeight: [String, Number],\n\n    fit: {\n      type: Boolean,\n      default: true\n    },\n\n    stripe: Boolean,\n\n    border: Boolean,\n\n    rowKey: [String, Function],\n\n    context: {},\n\n    showHeader: {\n      type: Boolean,\n      default: true\n    },\n\n    showSummary: Boolean,\n\n    sumText: String,\n\n    summaryMethod: Function,\n\n    rowClassName: [String, Function],\n\n    rowStyle: [Object, Function],\n\n    cellClassName: [String, Function],\n\n    cellStyle: [Object, Function],\n\n    headerRowClassName: [String, Function],\n\n    headerRowStyle: [Object, Function],\n\n    headerCellClassName: [String, Function],\n\n    headerCellStyle: [Object, Function],\n\n    highlightCurrentRow: Boolean,\n\n    highlightSelectionRow: {\n      type: Boolean,\n      default: false\n    },\n\n    currentRowKey: [String, Number],\n\n    emptyText: String,\n\n    expandRowKeys: Array,\n\n    defaultExpandAll: Boolean,\n\n    defaultSort: Object,\n\n    tooltipEffect: String,\n\n    spanMethod: Function,\n\n    selectOnIndeterminate: {\n      type: Boolean,\n      default: true\n    },\n\n    indent: {\n      type: Number,\n      default: 16\n    },\n\n    treeProps: {\n      type: Object,\n      default: function _default() {\n        return {\n          hasChildren: 'hasChildren',\n          children: 'children'\n        };\n      }\n    },\n\n    lazy: Boolean,\n\n    load: Function\n  },\n\n  components: {\n    TableHeader: table_header,\n    TableFooter: table_footer,\n    TableBody: table_body,\n    ElCheckbox: checkbox_default.a\n  },\n\n  methods: {\n    getMigratingConfig: function getMigratingConfig() {\n      return {\n        events: {\n          expand: 'expand is renamed to expand-change'\n        }\n      };\n    },\n    setCurrentRow: function setCurrentRow(row) {\n      this.store.commit('setCurrentRow', row);\n    },\n    toggleRowSelection: function toggleRowSelection(row, selected) {\n      this.store.toggleRowSelection(row, selected, false);\n      this.store.updateAllSelected();\n    },\n    toggleRowExpansion: function toggleRowExpansion(row, expanded) {\n      this.store.toggleRowExpansionAdapter(row, expanded);\n    },\n    clearSelection: function clearSelection() {\n      this.store.clearSelection();\n    },\n    clearFilter: function clearFilter(columnKeys) {\n      this.store.clearFilter(columnKeys);\n    },\n    clearSort: function clearSort() {\n      this.store.clearSort();\n    },\n    handleMouseLeave: function handleMouseLeave() {\n      this.store.commit('setHoverRow', null);\n      if (this.hoverState) this.hoverState = null;\n    },\n    updateScrollY: function updateScrollY() {\n      var changed = this.layout.updateScrollY();\n      if (changed) {\n        this.layout.notifyObservers('scrollable');\n        this.layout.updateColumnsWidth();\n      }\n    },\n    handleFixedMousewheel: function handleFixedMousewheel(event, data) {\n      var bodyWrapper = this.bodyWrapper;\n      if (Math.abs(data.spinY) > 0) {\n        var currentScrollTop = bodyWrapper.scrollTop;\n        if (data.pixelY < 0 && currentScrollTop !== 0) {\n          event.preventDefault();\n        }\n        if (data.pixelY > 0 && bodyWrapper.scrollHeight - bodyWrapper.clientHeight > currentScrollTop) {\n          event.preventDefault();\n        }\n        bodyWrapper.scrollTop += Math.ceil(data.pixelY / 5);\n      } else {\n        bodyWrapper.scrollLeft += Math.ceil(data.pixelX / 5);\n      }\n    },\n    handleHeaderFooterMousewheel: function handleHeaderFooterMousewheel(event, data) {\n      var pixelX = data.pixelX,\n          pixelY = data.pixelY;\n\n      if (Math.abs(pixelX) >= Math.abs(pixelY)) {\n        this.bodyWrapper.scrollLeft += data.pixelX / 5;\n      }\n    },\n\n\n    // TODO 使用 CSS transform\n    syncPostion: function syncPostion() {\n      var _bodyWrapper = this.bodyWrapper,\n          scrollLeft = _bodyWrapper.scrollLeft,\n          scrollTop = _bodyWrapper.scrollTop,\n          offsetWidth = _bodyWrapper.offsetWidth,\n          scrollWidth = _bodyWrapper.scrollWidth;\n      var _$refs = this.$refs,\n          headerWrapper = _$refs.headerWrapper,\n          footerWrapper = _$refs.footerWrapper,\n          fixedBodyWrapper = _$refs.fixedBodyWrapper,\n          rightFixedBodyWrapper = _$refs.rightFixedBodyWrapper;\n\n      if (headerWrapper) headerWrapper.scrollLeft = scrollLeft;\n      if (footerWrapper) footerWrapper.scrollLeft = scrollLeft;\n      if (fixedBodyWrapper) fixedBodyWrapper.scrollTop = scrollTop;\n      if (rightFixedBodyWrapper) rightFixedBodyWrapper.scrollTop = scrollTop;\n      var maxScrollLeftPosition = scrollWidth - offsetWidth - 1;\n      if (scrollLeft >= maxScrollLeftPosition) {\n        this.scrollPosition = 'right';\n      } else if (scrollLeft === 0) {\n        this.scrollPosition = 'left';\n      } else {\n        this.scrollPosition = 'middle';\n      }\n    },\n\n\n    throttleSyncPostion: Object(external_throttle_debounce_[\"throttle\"])(16, function () {\n      this.syncPostion();\n    }),\n\n    onScroll: function onScroll(evt) {\n      var raf = window.requestAnimationFrame;\n      if (!raf) {\n        this.throttleSyncPostion();\n      } else {\n        raf(this.syncPostion);\n      }\n    },\n    bindEvents: function bindEvents() {\n      this.bodyWrapper.addEventListener('scroll', this.onScroll, { passive: true });\n      if (this.fit) {\n        Object(resize_event_[\"addResizeListener\"])(this.$el, this.resizeListener);\n      }\n    },\n    unbindEvents: function unbindEvents() {\n      this.bodyWrapper.removeEventListener('scroll', this.onScroll, { passive: true });\n      if (this.fit) {\n        Object(resize_event_[\"removeResizeListener\"])(this.$el, this.resizeListener);\n      }\n    },\n    resizeListener: function resizeListener() {\n      if (!this.$ready) return;\n      var shouldUpdateLayout = false;\n      var el = this.$el;\n      var _resizeState = this.resizeState,\n          oldWidth = _resizeState.width,\n          oldHeight = _resizeState.height;\n\n\n      var width = el.offsetWidth;\n      if (oldWidth !== width) {\n        shouldUpdateLayout = true;\n      }\n\n      var height = el.offsetHeight;\n      if ((this.height || this.shouldUpdateHeight) && oldHeight !== height) {\n        shouldUpdateLayout = true;\n      }\n\n      if (shouldUpdateLayout) {\n        this.resizeState.width = width;\n        this.resizeState.height = height;\n        this.doLayout();\n      }\n    },\n    doLayout: function doLayout() {\n      if (this.shouldUpdateHeight) {\n        this.layout.updateElsHeight();\n      }\n      this.layout.updateColumnsWidth();\n    },\n    sort: function sort(prop, order) {\n      this.store.commit('sort', { prop: prop, order: order });\n    },\n    toggleAllSelection: function toggleAllSelection() {\n      this.store.commit('toggleAllSelection');\n    }\n  },\n\n  computed: tablevue_type_script_lang_js_extends({\n    tableSize: function tableSize() {\n      return this.size || (this.$ELEMENT || {}).size;\n    },\n    bodyWrapper: function bodyWrapper() {\n      return this.$refs.bodyWrapper;\n    },\n    shouldUpdateHeight: function shouldUpdateHeight() {\n      return this.height || this.maxHeight || this.fixedColumns.length > 0 || this.rightFixedColumns.length > 0;\n    },\n    bodyWidth: function bodyWidth() {\n      var _layout = this.layout,\n          bodyWidth = _layout.bodyWidth,\n          scrollY = _layout.scrollY,\n          gutterWidth = _layout.gutterWidth;\n\n      return bodyWidth ? bodyWidth - (scrollY ? gutterWidth : 0) + 'px' : '';\n    },\n    bodyHeight: function bodyHeight() {\n      var _layout2 = this.layout,\n          _layout2$headerHeight = _layout2.headerHeight,\n          headerHeight = _layout2$headerHeight === undefined ? 0 : _layout2$headerHeight,\n          bodyHeight = _layout2.bodyHeight,\n          _layout2$footerHeight = _layout2.footerHeight,\n          footerHeight = _layout2$footerHeight === undefined ? 0 : _layout2$footerHeight;\n\n      if (this.height) {\n        return {\n          height: bodyHeight ? bodyHeight + 'px' : ''\n        };\n      } else if (this.maxHeight) {\n        var maxHeight = parseHeight(this.maxHeight);\n        if (typeof maxHeight === 'number') {\n          return {\n            'max-height': maxHeight - footerHeight - (this.showHeader ? headerHeight : 0) + 'px'\n          };\n        }\n      }\n      return {};\n    },\n    fixedBodyHeight: function fixedBodyHeight() {\n      if (this.height) {\n        return {\n          height: this.layout.fixedBodyHeight ? this.layout.fixedBodyHeight + 'px' : ''\n        };\n      } else if (this.maxHeight) {\n        var maxHeight = parseHeight(this.maxHeight);\n        if (typeof maxHeight === 'number') {\n          maxHeight = this.layout.scrollX ? maxHeight - this.layout.gutterWidth : maxHeight;\n          if (this.showHeader) {\n            maxHeight -= this.layout.headerHeight;\n          }\n          maxHeight -= this.layout.footerHeight;\n          return {\n            'max-height': maxHeight + 'px'\n          };\n        }\n      }\n      return {};\n    },\n    fixedHeight: function fixedHeight() {\n      if (this.maxHeight) {\n        if (this.showSummary) {\n          return {\n            bottom: 0\n          };\n        }\n        return {\n          bottom: this.layout.scrollX && this.data.length ? this.layout.gutterWidth + 'px' : ''\n        };\n      } else {\n        if (this.showSummary) {\n          return {\n            height: this.layout.tableHeight ? this.layout.tableHeight + 'px' : ''\n          };\n        }\n        return {\n          height: this.layout.viewportHeight ? this.layout.viewportHeight + 'px' : ''\n        };\n      }\n    },\n    emptyBlockStyle: function emptyBlockStyle() {\n      if (this.data && this.data.length) return null;\n      var height = '100%';\n      if (this.layout.appendHeight) {\n        height = 'calc(100% - ' + this.layout.appendHeight + 'px)';\n      }\n      return {\n        width: this.bodyWidth,\n        height: height\n      };\n    }\n  }, mapStates({\n    selection: 'selection',\n    columns: 'columns',\n    tableData: 'data',\n    fixedColumns: 'fixedColumns',\n    rightFixedColumns: 'rightFixedColumns'\n  })),\n\n  watch: {\n    height: {\n      immediate: true,\n      handler: function handler(value) {\n        this.layout.setHeight(value);\n      }\n    },\n\n    maxHeight: {\n      immediate: true,\n      handler: function handler(value) {\n        this.layout.setMaxHeight(value);\n      }\n    },\n\n    currentRowKey: {\n      immediate: true,\n      handler: function handler(value) {\n        if (!this.rowKey) return;\n        this.store.setCurrentRowKey(value);\n      }\n    },\n\n    data: {\n      immediate: true,\n      handler: function handler(value) {\n        this.store.commit('setData', value);\n      }\n    },\n\n    expandRowKeys: {\n      immediate: true,\n      handler: function handler(newVal) {\n        if (newVal) {\n          this.store.setExpandRowKeysAdapter(newVal);\n        }\n      }\n    }\n  },\n\n  created: function created() {\n    var _this = this;\n\n    this.tableId = 'el-table_' + tableIdSeed++;\n    this.debouncedUpdateLayout = Object(external_throttle_debounce_[\"debounce\"])(50, function () {\n      return _this.doLayout();\n    });\n  },\n  mounted: function mounted() {\n    var _this2 = this;\n\n    this.bindEvents();\n    this.store.updateColumns();\n    this.doLayout();\n\n    this.resizeState = {\n      width: this.$el.offsetWidth,\n      height: this.$el.offsetHeight\n    };\n\n    // init filters\n    this.store.states.columns.forEach(function (column) {\n      if (column.filteredValue && column.filteredValue.length) {\n        _this2.store.commit('filterChange', {\n          column: column,\n          values: column.filteredValue,\n          silent: true\n        });\n      }\n    });\n\n    this.$ready = true;\n  },\n  destroyed: function destroyed() {\n    this.unbindEvents();\n  },\n  data: function data() {\n    var _treeProps = this.treeProps,\n        _treeProps$hasChildre = _treeProps.hasChildren,\n        hasChildren = _treeProps$hasChildre === undefined ? 'hasChildren' : _treeProps$hasChildre,\n        _treeProps$children = _treeProps.children,\n        children = _treeProps$children === undefined ? 'children' : _treeProps$children;\n\n    this.store = createStore(this, {\n      rowKey: this.rowKey,\n      defaultExpandAll: this.defaultExpandAll,\n      selectOnIndeterminate: this.selectOnIndeterminate,\n      // TreeTable 的相关配置\n      indent: this.indent,\n      lazy: this.lazy,\n      lazyColumnIdentifier: hasChildren,\n      childrenColumnName: children\n    });\n    var layout = new table_layout({\n      store: this.store,\n      table: this,\n      fit: this.fit,\n      showHeader: this.showHeader\n    });\n    return {\n      layout: layout,\n      isHidden: false,\n      renderExpanded: null,\n      resizeProxyVisible: false,\n      resizeState: {\n        width: null,\n        height: null\n      },\n      // 是否拥有多级表头\n      isGroup: false,\n      scrollPosition: 'left'\n    };\n  }\n});\n// CONCATENATED MODULE: ./packages/table/src/table.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_tablevue_type_script_lang_js_ = (tablevue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/table/src/table.vue\n\n\n\n\n\n/* normalize component */\n\nvar table_component = normalizeComponent(\n  src_tablevue_type_script_lang_js_,\n  tablevue_type_template_id_493fe34e_render,\n  tablevue_type_template_id_493fe34e_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var table_api; }\ntable_component.options.__file = \"packages/table/src/table.vue\"\n/* harmony default export */ var src_table = (table_component.exports);\n// CONCATENATED MODULE: ./packages/table/index.js\n\n\n/* istanbul ignore next */\nsrc_table.install = function (Vue) {\n  Vue.component(src_table.name, src_table);\n};\n\n/* harmony default export */ var packages_table = (src_table);\n// CONCATENATED MODULE: ./packages/table/src/config.js\n\n\nvar cellStarts = {\n  default: {\n    order: ''\n  },\n  selection: {\n    width: 48,\n    minWidth: 48,\n    realWidth: 48,\n    order: '',\n    className: 'el-table-column--selection'\n  },\n  expand: {\n    width: 48,\n    minWidth: 48,\n    realWidth: 48,\n    order: ''\n  },\n  index: {\n    width: 48,\n    minWidth: 48,\n    realWidth: 48,\n    order: ''\n  }\n};\n\n// 这些选项不应该被覆盖\nvar cellForced = {\n  selection: {\n    renderHeader: function renderHeader(h, _ref) {\n      var store = _ref.store;\n\n      return h('el-checkbox', {\n        attrs: {\n          disabled: store.states.data && store.states.data.length === 0,\n          indeterminate: store.states.selection.length > 0 && !this.isAllSelected,\n\n          value: this.isAllSelected },\n        on: {\n          'input': this.toggleAllSelection\n        }\n      });\n    },\n    renderCell: function renderCell(h, _ref2) {\n      var row = _ref2.row,\n          column = _ref2.column,\n          isSelected = _ref2.isSelected,\n          store = _ref2.store,\n          $index = _ref2.$index;\n\n      return h('el-checkbox', {\n        nativeOn: {\n          'click': function click(event) {\n            return event.stopPropagation();\n          }\n        },\n        attrs: {\n          value: isSelected,\n          disabled: column.selectable ? !column.selectable.call(null, row, $index) : false\n        },\n        on: {\n          'input': function input() {\n            store.commit('rowSelectedChanged', row);\n          }\n        }\n      });\n    },\n    sortable: false,\n    resizable: false\n  },\n  index: {\n    renderHeader: function renderHeader(h, _ref3) {\n      var column = _ref3.column;\n\n      return column.label || '#';\n    },\n    renderCell: function renderCell(h, _ref4) {\n      var $index = _ref4.$index,\n          column = _ref4.column;\n\n      var i = $index + 1;\n      var index = column.index;\n\n      if (typeof index === 'number') {\n        i = $index + index;\n      } else if (typeof index === 'function') {\n        i = index($index);\n      }\n\n      return h('div', [i]);\n    },\n    sortable: false\n  },\n  expand: {\n    renderHeader: function renderHeader(h, _ref5) {\n      var column = _ref5.column;\n\n      return column.label || '';\n    },\n    renderCell: function renderCell(h, _ref6) {\n      var row = _ref6.row,\n          store = _ref6.store,\n          isExpanded = _ref6.isExpanded;\n\n      var classes = ['el-table__expand-icon'];\n      if (isExpanded) {\n        classes.push('el-table__expand-icon--expanded');\n      }\n      var callback = function callback(e) {\n        e.stopPropagation();\n        store.toggleRowExpansion(row);\n      };\n      return h(\n        'div',\n        { 'class': classes,\n          on: {\n            'click': callback\n          }\n        },\n        [h('i', { 'class': 'el-icon el-icon-arrow-right' })]\n      );\n    },\n    sortable: false,\n    resizable: false,\n    className: 'el-table__expand-column'\n  }\n};\n\nfunction defaultRenderCell(h, _ref7) {\n  var row = _ref7.row,\n      column = _ref7.column,\n      $index = _ref7.$index;\n\n  var property = column.property;\n  var value = property && Object(util_[\"getPropByPath\"])(row, property).v;\n  if (column && column.formatter) {\n    return column.formatter(row, column, value, $index);\n  }\n  return value;\n}\n\nfunction treeCellPrefix(h, _ref8) {\n  var row = _ref8.row,\n      treeNode = _ref8.treeNode,\n      store = _ref8.store;\n\n  if (!treeNode) return null;\n  var ele = [];\n  var callback = function callback(e) {\n    e.stopPropagation();\n    store.loadOrToggle(row);\n  };\n  if (treeNode.indent) {\n    ele.push(h('span', { 'class': 'el-table__indent', style: { 'padding-left': treeNode.indent + 'px' } }));\n  }\n  if (typeof treeNode.expanded === 'boolean' && !treeNode.noLazyChildren) {\n    var expandClasses = ['el-table__expand-icon', treeNode.expanded ? 'el-table__expand-icon--expanded' : ''];\n    var iconClasses = ['el-icon-arrow-right'];\n    if (treeNode.loading) {\n      iconClasses = ['el-icon-loading'];\n    }\n    ele.push(h(\n      'div',\n      { 'class': expandClasses,\n        on: {\n          'click': callback\n        }\n      },\n      [h('i', { 'class': iconClasses })]\n    ));\n  } else {\n    ele.push(h('span', { 'class': 'el-table__placeholder' }));\n  }\n  return ele;\n}\n// CONCATENATED MODULE: ./packages/table/src/table-column.js\nvar table_column_extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\n\n\n\n\nvar columnIdSeed = 1;\n\n/* harmony default export */ var table_column = ({\n  name: 'ElTableColumn',\n\n  props: {\n    type: {\n      type: String,\n      default: 'default'\n    },\n    label: String,\n    className: String,\n    labelClassName: String,\n    property: String,\n    prop: String,\n    width: {},\n    minWidth: {},\n    renderHeader: Function,\n    sortable: {\n      type: [Boolean, String],\n      default: false\n    },\n    sortMethod: Function,\n    sortBy: [String, Function, Array],\n    resizable: {\n      type: Boolean,\n      default: true\n    },\n    columnKey: String,\n    align: String,\n    headerAlign: String,\n    showTooltipWhenOverflow: Boolean,\n    showOverflowTooltip: Boolean,\n    fixed: [Boolean, String],\n    formatter: Function,\n    selectable: Function,\n    reserveSelection: Boolean,\n    filterMethod: Function,\n    filteredValue: Array,\n    filters: Array,\n    filterPlacement: String,\n    filterMultiple: {\n      type: Boolean,\n      default: true\n    },\n    index: [Number, Function],\n    sortOrders: {\n      type: Array,\n      default: function _default() {\n        return ['ascending', 'descending', null];\n      },\n      validator: function validator(val) {\n        return val.every(function (order) {\n          return ['ascending', 'descending', null].indexOf(order) > -1;\n        });\n      }\n    }\n  },\n\n  data: function data() {\n    return {\n      isSubColumn: false,\n      columns: []\n    };\n  },\n\n\n  computed: {\n    owner: function owner() {\n      var parent = this.$parent;\n      while (parent && !parent.tableId) {\n        parent = parent.$parent;\n      }\n      return parent;\n    },\n    columnOrTableParent: function columnOrTableParent() {\n      var parent = this.$parent;\n      while (parent && !parent.tableId && !parent.columnId) {\n        parent = parent.$parent;\n      }\n      return parent;\n    },\n    realWidth: function realWidth() {\n      return parseWidth(this.width);\n    },\n    realMinWidth: function realMinWidth() {\n      return parseMinWidth(this.minWidth);\n    },\n    realAlign: function realAlign() {\n      return this.align ? 'is-' + this.align : null;\n    },\n    realHeaderAlign: function realHeaderAlign() {\n      return this.headerAlign ? 'is-' + this.headerAlign : this.realAlign;\n    }\n  },\n\n  methods: {\n    getPropsData: function getPropsData() {\n      var _this = this;\n\n      for (var _len = arguments.length, props = Array(_len), _key = 0; _key < _len; _key++) {\n        props[_key] = arguments[_key];\n      }\n\n      return props.reduce(function (prev, cur) {\n        if (Array.isArray(cur)) {\n          cur.forEach(function (key) {\n            prev[key] = _this[key];\n          });\n        }\n        return prev;\n      }, {});\n    },\n    getColumnElIndex: function getColumnElIndex(children, child) {\n      return [].indexOf.call(children, child);\n    },\n    setColumnWidth: function setColumnWidth(column) {\n      if (this.realWidth) {\n        column.width = this.realWidth;\n      }\n      if (this.realMinWidth) {\n        column.minWidth = this.realMinWidth;\n      }\n      if (!column.minWidth) {\n        column.minWidth = 80;\n      }\n      column.realWidth = column.width === undefined ? column.minWidth : column.width;\n      return column;\n    },\n    setColumnForcedProps: function setColumnForcedProps(column) {\n      // 对于特定类型的 column,某些属性不允许设置\n      var type = column.type;\n      var source = cellForced[type] || {};\n      Object.keys(source).forEach(function (prop) {\n        var value = source[prop];\n        if (value !== undefined) {\n          column[prop] = prop === 'className' ? column[prop] + ' ' + value : value;\n        }\n      });\n      return column;\n    },\n    setColumnRenders: function setColumnRenders(column) {\n      var _this2 = this;\n\n      var h = this.$createElement;\n\n      // renderHeader 属性不推荐使用。\n      if (this.renderHeader) {\n        console.warn('[Element Warn][TableColumn]Comparing to render-header, scoped-slot header is easier to use. We recommend users to use scoped-slot header.');\n      } else if (column.type !== 'selection') {\n        column.renderHeader = function (h, scope) {\n          var renderHeader = _this2.$scopedSlots.header;\n          return renderHeader ? renderHeader(scope) : column.label;\n        };\n      }\n\n      var originRenderCell = column.renderCell;\n      // TODO: 这里的实现调整\n      if (column.type === 'expand') {\n        // 对于展开行,renderCell 不允许配置的。在上一步中已经设置过,这里需要简单封装一下。\n        column.renderCell = function (h, data) {\n          return h(\n            'div',\n            { 'class': 'cell' },\n            [originRenderCell(h, data)]\n          );\n        };\n        this.owner.renderExpanded = function (h, data) {\n          return _this2.$scopedSlots.default ? _this2.$scopedSlots.default(data) : _this2.$slots.default;\n        };\n      } else {\n        originRenderCell = originRenderCell || defaultRenderCell;\n        // 对 renderCell 进行包装\n        column.renderCell = function (h, data) {\n          var children = null;\n          if (_this2.$scopedSlots.default) {\n            children = _this2.$scopedSlots.default(data);\n          } else {\n            children = originRenderCell(h, data);\n          }\n          var prefix = treeCellPrefix(h, data);\n          var props = {\n            class: 'cell',\n            style: {}\n          };\n          if (column.showOverflowTooltip) {\n            props.class += ' el-tooltip';\n            props.style = { width: (data.column.realWidth || data.column.width) - 1 + 'px' };\n          }\n          return h(\n            'div',\n            props,\n            [prefix, children]\n          );\n        };\n      }\n      return column;\n    },\n    registerNormalWatchers: function registerNormalWatchers() {\n      var _this3 = this;\n\n      var props = ['label', 'property', 'filters', 'filterMultiple', 'sortable', 'index', 'formatter', 'className', 'labelClassName', 'showOverflowTooltip'];\n      // 一些属性具有别名\n      var aliases = {\n        prop: 'property',\n        realAlign: 'align',\n        realHeaderAlign: 'headerAlign',\n        realWidth: 'width'\n      };\n      var allAliases = props.reduce(function (prev, cur) {\n        prev[cur] = cur;\n        return prev;\n      }, aliases);\n\n      Object.keys(allAliases).forEach(function (key) {\n        var columnKey = aliases[key];\n\n        _this3.$watch(key, function (newVal) {\n          _this3.columnConfig[columnKey] = newVal;\n        });\n      });\n    },\n    registerComplexWatchers: function registerComplexWatchers() {\n      var _this4 = this;\n\n      var props = ['fixed'];\n      var aliases = {\n        realWidth: 'width',\n        realMinWidth: 'minWidth'\n      };\n      var allAliases = props.reduce(function (prev, cur) {\n        prev[cur] = cur;\n        return prev;\n      }, aliases);\n\n      Object.keys(allAliases).forEach(function (key) {\n        var columnKey = aliases[key];\n\n        _this4.$watch(key, function (newVal) {\n          _this4.columnConfig[columnKey] = newVal;\n          var updateColumns = columnKey === 'fixed';\n          _this4.owner.store.scheduleLayout(updateColumns);\n        });\n      });\n    }\n  },\n\n  components: {\n    ElCheckbox: checkbox_default.a\n  },\n\n  beforeCreate: function beforeCreate() {\n    this.row = {};\n    this.column = {};\n    this.$index = 0;\n    this.columnId = '';\n  },\n  created: function created() {\n    var parent = this.columnOrTableParent;\n    this.isSubColumn = this.owner !== parent;\n    this.columnId = (parent.tableId || parent.columnId) + '_column_' + columnIdSeed++;\n\n    var type = this.type || 'default';\n    var sortable = this.sortable === '' ? true : this.sortable;\n    var defaults = table_column_extends({}, cellStarts[type], {\n      id: this.columnId,\n      type: type,\n      property: this.prop || this.property,\n      align: this.realAlign,\n      headerAlign: this.realHeaderAlign,\n      showOverflowTooltip: this.showOverflowTooltip || this.showTooltipWhenOverflow,\n      // filter 相关属性\n      filterable: this.filters || this.filterMethod,\n      filteredValue: [],\n      filterPlacement: '',\n      isColumnGroup: false,\n      filterOpened: false,\n      // sort 相关属性\n      sortable: sortable,\n      // index 列\n      index: this.index\n    });\n\n    var basicProps = ['columnKey', 'label', 'className', 'labelClassName', 'type', 'renderHeader', 'formatter', 'fixed', 'resizable'];\n    var sortProps = ['sortMethod', 'sortBy', 'sortOrders'];\n    var selectProps = ['selectable', 'reserveSelection'];\n    var filterProps = ['filterMethod', 'filters', 'filterMultiple', 'filterOpened', 'filteredValue', 'filterPlacement'];\n\n    var column = this.getPropsData(basicProps, sortProps, selectProps, filterProps);\n    column = mergeOptions(defaults, column);\n\n    // 注意 compose 中函数执行的顺序是从右到左\n    var chains = compose(this.setColumnRenders, this.setColumnWidth, this.setColumnForcedProps);\n    column = chains(column);\n\n    this.columnConfig = column;\n\n    // 注册 watcher\n    this.registerNormalWatchers();\n    this.registerComplexWatchers();\n  },\n  mounted: function mounted() {\n    var owner = this.owner;\n    var parent = this.columnOrTableParent;\n    var children = this.isSubColumn ? parent.$el.children : parent.$refs.hiddenColumns.children;\n    var columnIndex = this.getColumnElIndex(children, this.$el);\n\n    owner.store.commit('insertColumn', this.columnConfig, columnIndex, this.isSubColumn ? parent.columnConfig : null);\n  },\n  destroyed: function destroyed() {\n    if (!this.$parent) return;\n    var parent = this.$parent;\n    this.owner.store.commit('removeColumn', this.columnConfig, this.isSubColumn ? parent.columnConfig : null);\n  },\n  render: function render(h) {\n    // slots 也要渲染,需要计算合并表头\n    return h('div', this.$slots.default);\n  }\n});\n// CONCATENATED MODULE: ./packages/table-column/index.js\n\n\n/* istanbul ignore next */\ntable_column.install = function (Vue) {\n  Vue.component(table_column.name, table_column);\n};\n\n/* harmony default export */ var packages_table_column = (table_column);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/date-picker/src/picker.vue?vue&type=template&id=79ae069f&\nvar pickervue_type_template_id_79ae069f_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return !_vm.ranged\n    ? _c(\n        \"el-input\",\n        _vm._b(\n          {\n            directives: [\n              {\n                name: \"clickoutside\",\n                rawName: \"v-clickoutside\",\n                value: _vm.handleClose,\n                expression: \"handleClose\"\n              }\n            ],\n            ref: \"reference\",\n            staticClass: \"el-date-editor\",\n            class: \"el-date-editor--\" + _vm.type,\n            attrs: {\n              readonly:\n                !_vm.editable ||\n                _vm.readonly ||\n                _vm.type === \"dates\" ||\n                _vm.type === \"week\" ||\n                _vm.type === \"years\" ||\n                _vm.type === \"months\",\n              disabled: _vm.pickerDisabled,\n              size: _vm.pickerSize,\n              name: _vm.name,\n              placeholder: _vm.placeholder,\n              value: _vm.displayValue,\n              validateEvent: false\n            },\n            on: {\n              focus: _vm.handleFocus,\n              input: function(value) {\n                return (_vm.userInput = value)\n              },\n              change: _vm.handleChange\n            },\n            nativeOn: {\n              keydown: function($event) {\n                return _vm.handleKeydown($event)\n              },\n              mouseenter: function($event) {\n                return _vm.handleMouseEnter($event)\n              },\n              mouseleave: function($event) {\n                _vm.showClose = false\n              }\n            }\n          },\n          \"el-input\",\n          _vm.firstInputId,\n          false\n        ),\n        [\n          _c(\"i\", {\n            staticClass: \"el-input__icon\",\n            class: _vm.triggerClass,\n            attrs: { slot: \"prefix\" },\n            on: { click: _vm.handleFocus },\n            slot: \"prefix\"\n          }),\n          _vm.haveTrigger\n            ? _c(\"i\", {\n                staticClass: \"el-input__icon\",\n                class: [_vm.showClose ? \"\" + _vm.clearIcon : \"\"],\n                attrs: { slot: \"suffix\" },\n                on: { click: _vm.handleClickIcon },\n                slot: \"suffix\"\n              })\n            : _vm._e()\n        ]\n      )\n    : _c(\n        \"div\",\n        {\n          directives: [\n            {\n              name: \"clickoutside\",\n              rawName: \"v-clickoutside\",\n              value: _vm.handleClose,\n              expression: \"handleClose\"\n            }\n          ],\n          ref: \"reference\",\n          staticClass: \"el-date-editor el-range-editor el-input__inner\",\n          class: [\n            \"el-date-editor--\" + _vm.type,\n            _vm.pickerSize ? \"el-range-editor--\" + _vm.pickerSize : \"\",\n            _vm.pickerDisabled ? \"is-disabled\" : \"\",\n            _vm.pickerVisible ? \"is-active\" : \"\"\n          ],\n          on: {\n            click: _vm.handleRangeClick,\n            mouseenter: _vm.handleMouseEnter,\n            mouseleave: function($event) {\n              _vm.showClose = false\n            },\n            keydown: _vm.handleKeydown\n          }\n        },\n        [\n          _c(\"i\", {\n            class: [\"el-input__icon\", \"el-range__icon\", _vm.triggerClass]\n          }),\n          _c(\n            \"input\",\n            _vm._b(\n              {\n                staticClass: \"el-range-input\",\n                attrs: {\n                  autocomplete: \"off\",\n                  placeholder: _vm.startPlaceholder,\n                  disabled: _vm.pickerDisabled,\n                  readonly: !_vm.editable || _vm.readonly,\n                  name: _vm.name && _vm.name[0]\n                },\n                domProps: { value: _vm.displayValue && _vm.displayValue[0] },\n                on: {\n                  input: _vm.handleStartInput,\n                  change: _vm.handleStartChange,\n                  focus: _vm.handleFocus\n                }\n              },\n              \"input\",\n              _vm.firstInputId,\n              false\n            )\n          ),\n          _vm._t(\"range-separator\", [\n            _c(\"span\", { staticClass: \"el-range-separator\" }, [\n              _vm._v(_vm._s(_vm.rangeSeparator))\n            ])\n          ]),\n          _c(\n            \"input\",\n            _vm._b(\n              {\n                staticClass: \"el-range-input\",\n                attrs: {\n                  autocomplete: \"off\",\n                  placeholder: _vm.endPlaceholder,\n                  disabled: _vm.pickerDisabled,\n                  readonly: !_vm.editable || _vm.readonly,\n                  name: _vm.name && _vm.name[1]\n                },\n                domProps: { value: _vm.displayValue && _vm.displayValue[1] },\n                on: {\n                  input: _vm.handleEndInput,\n                  change: _vm.handleEndChange,\n                  focus: _vm.handleFocus\n                }\n              },\n              \"input\",\n              _vm.secondInputId,\n              false\n            )\n          ),\n          _vm.haveTrigger\n            ? _c(\"i\", {\n                staticClass: \"el-input__icon el-range__close-icon\",\n                class: [_vm.showClose ? \"\" + _vm.clearIcon : \"\"],\n                on: { click: _vm.handleClickIcon }\n              })\n            : _vm._e()\n        ],\n        2\n      )\n}\nvar pickervue_type_template_id_79ae069f_staticRenderFns = []\npickervue_type_template_id_79ae069f_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/date-picker/src/picker.vue?vue&type=template&id=79ae069f&\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/date-util\"\nvar date_util_ = __nested_webpack_require_8926__(0);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/date-picker/src/picker.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n\n\n\nvar NewPopper = {\n  props: {\n    appendToBody: vue_popper_default.a.props.appendToBody,\n    offset: vue_popper_default.a.props.offset,\n    boundariesPadding: vue_popper_default.a.props.boundariesPadding,\n    arrowOffset: vue_popper_default.a.props.arrowOffset,\n    transformOrigin: vue_popper_default.a.props.transformOrigin\n  },\n  methods: vue_popper_default.a.methods,\n  data: function data() {\n    return merge_default()({ visibleArrow: true }, vue_popper_default.a.data);\n  },\n\n  beforeDestroy: vue_popper_default.a.beforeDestroy\n};\n\nvar DEFAULT_FORMATS = {\n  date: 'yyyy-MM-dd',\n  month: 'yyyy-MM',\n  months: 'yyyy-MM',\n  datetime: 'yyyy-MM-dd HH:mm:ss',\n  time: 'HH:mm:ss',\n  week: 'yyyywWW',\n  timerange: 'HH:mm:ss',\n  daterange: 'yyyy-MM-dd',\n  monthrange: 'yyyy-MM',\n  datetimerange: 'yyyy-MM-dd HH:mm:ss',\n  year: 'yyyy',\n  years: 'yyyy'\n};\nvar HAVE_TRIGGER_TYPES = ['date', 'datetime', 'time', 'time-select', 'week', 'month', 'year', 'daterange', 'monthrange', 'timerange', 'datetimerange', 'dates', 'months', 'years'];\nvar pickervue_type_script_lang_js_DATE_FORMATTER = function DATE_FORMATTER(value, format) {\n  if (format === 'timestamp') return value.getTime();\n  return Object(date_util_[\"formatDate\"])(value, format);\n};\nvar pickervue_type_script_lang_js_DATE_PARSER = function DATE_PARSER(text, format) {\n  if (format === 'timestamp') return new Date(Number(text));\n  return Object(date_util_[\"parseDate\"])(text, format);\n};\nvar RANGE_FORMATTER = function RANGE_FORMATTER(value, format) {\n  if (Array.isArray(value) && value.length === 2) {\n    var start = value[0];\n    var end = value[1];\n\n    if (start && end) {\n      return [pickervue_type_script_lang_js_DATE_FORMATTER(start, format), pickervue_type_script_lang_js_DATE_FORMATTER(end, format)];\n    }\n  }\n  return '';\n};\nvar RANGE_PARSER = function RANGE_PARSER(array, format, separator) {\n  if (!Array.isArray(array)) {\n    array = array.split(separator);\n  }\n  if (array.length === 2) {\n    var range1 = array[0];\n    var range2 = array[1];\n\n    return [pickervue_type_script_lang_js_DATE_PARSER(range1, format), pickervue_type_script_lang_js_DATE_PARSER(range2, format)];\n  }\n  return [];\n};\nvar TYPE_VALUE_RESOLVER_MAP = {\n  default: {\n    formatter: function formatter(value) {\n      if (!value) return '';\n      return '' + value;\n    },\n    parser: function parser(text) {\n      if (text === undefined || text === '') return null;\n      return text;\n    }\n  },\n  week: {\n    formatter: function formatter(value, format) {\n      var week = Object(date_util_[\"getWeekNumber\"])(value);\n      var month = value.getMonth();\n      var trueDate = new Date(value);\n      if (week === 1 && month === 11) {\n        trueDate.setHours(0, 0, 0, 0);\n        trueDate.setDate(trueDate.getDate() + 3 - (trueDate.getDay() + 6) % 7);\n      }\n      var date = Object(date_util_[\"formatDate\"])(trueDate, format);\n\n      date = /WW/.test(date) ? date.replace(/WW/, week < 10 ? '0' + week : week) : date.replace(/W/, week);\n      return date;\n    },\n    parser: function parser(text, format) {\n      // parse as if a normal date\n      return TYPE_VALUE_RESOLVER_MAP.date.parser(text, format);\n    }\n  },\n  date: {\n    formatter: pickervue_type_script_lang_js_DATE_FORMATTER,\n    parser: pickervue_type_script_lang_js_DATE_PARSER\n  },\n  datetime: {\n    formatter: pickervue_type_script_lang_js_DATE_FORMATTER,\n    parser: pickervue_type_script_lang_js_DATE_PARSER\n  },\n  daterange: {\n    formatter: RANGE_FORMATTER,\n    parser: RANGE_PARSER\n  },\n  monthrange: {\n    formatter: RANGE_FORMATTER,\n    parser: RANGE_PARSER\n  },\n  datetimerange: {\n    formatter: RANGE_FORMATTER,\n    parser: RANGE_PARSER\n  },\n  timerange: {\n    formatter: RANGE_FORMATTER,\n    parser: RANGE_PARSER\n  },\n  time: {\n    formatter: pickervue_type_script_lang_js_DATE_FORMATTER,\n    parser: pickervue_type_script_lang_js_DATE_PARSER\n  },\n  month: {\n    formatter: pickervue_type_script_lang_js_DATE_FORMATTER,\n    parser: pickervue_type_script_lang_js_DATE_PARSER\n  },\n  year: {\n    formatter: pickervue_type_script_lang_js_DATE_FORMATTER,\n    parser: pickervue_type_script_lang_js_DATE_PARSER\n  },\n  number: {\n    formatter: function formatter(value) {\n      if (!value) return '';\n      return '' + value;\n    },\n    parser: function parser(text) {\n      var result = Number(text);\n\n      if (!isNaN(text)) {\n        return result;\n      } else {\n        return null;\n      }\n    }\n  },\n  dates: {\n    formatter: function formatter(value, format) {\n      return value.map(function (date) {\n        return pickervue_type_script_lang_js_DATE_FORMATTER(date, format);\n      });\n    },\n    parser: function parser(value, format) {\n      return (typeof value === 'string' ? value.split(', ') : value).map(function (date) {\n        return date instanceof Date ? date : pickervue_type_script_lang_js_DATE_PARSER(date, format);\n      });\n    }\n  },\n  months: {\n    formatter: function formatter(value, format) {\n      return value.map(function (date) {\n        return pickervue_type_script_lang_js_DATE_FORMATTER(date, format);\n      });\n    },\n    parser: function parser(value, format) {\n      return (typeof value === 'string' ? value.split(', ') : value).map(function (date) {\n        return date instanceof Date ? date : pickervue_type_script_lang_js_DATE_PARSER(date, format);\n      });\n    }\n  },\n  years: {\n    formatter: function formatter(value, format) {\n      return value.map(function (date) {\n        return pickervue_type_script_lang_js_DATE_FORMATTER(date, format);\n      });\n    },\n    parser: function parser(value, format) {\n      return (typeof value === 'string' ? value.split(', ') : value).map(function (date) {\n        return date instanceof Date ? date : pickervue_type_script_lang_js_DATE_PARSER(date, format);\n      });\n    }\n  }\n};\nvar PLACEMENT_MAP = {\n  left: 'bottom-start',\n  center: 'bottom',\n  right: 'bottom-end'\n};\n\nvar parseAsFormatAndType = function parseAsFormatAndType(value, customFormat, type) {\n  var rangeSeparator = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '-';\n\n  if (!value) return null;\n  var parser = (TYPE_VALUE_RESOLVER_MAP[type] || TYPE_VALUE_RESOLVER_MAP['default']).parser;\n  var format = customFormat || DEFAULT_FORMATS[type];\n  return parser(value, format, rangeSeparator);\n};\n\nvar formatAsFormatAndType = function formatAsFormatAndType(value, customFormat, type) {\n  if (!value) return null;\n  var formatter = (TYPE_VALUE_RESOLVER_MAP[type] || TYPE_VALUE_RESOLVER_MAP['default']).formatter;\n  var format = customFormat || DEFAULT_FORMATS[type];\n  return formatter(value, format);\n};\n\n/*\n * Considers:\n *   1. Date object\n *   2. date string\n *   3. array of 1 or 2\n */\nvar valueEquals = function valueEquals(a, b) {\n  // considers Date object and string\n  var dateEquals = function dateEquals(a, b) {\n    var aIsDate = a instanceof Date;\n    var bIsDate = b instanceof Date;\n    if (aIsDate && bIsDate) {\n      return a.getTime() === b.getTime();\n    }\n    if (!aIsDate && !bIsDate) {\n      return a === b;\n    }\n    return false;\n  };\n\n  var aIsArray = a instanceof Array;\n  var bIsArray = b instanceof Array;\n  if (aIsArray && bIsArray) {\n    if (a.length !== b.length) {\n      return false;\n    }\n    return a.every(function (item, index) {\n      return dateEquals(item, b[index]);\n    });\n  }\n  if (!aIsArray && !bIsArray) {\n    return dateEquals(a, b);\n  }\n  return false;\n};\n\nvar isString = function isString(val) {\n  return typeof val === 'string' || val instanceof String;\n};\n\nvar pickervue_type_script_lang_js_validator = function validator(val) {\n  // either: String, Array of String, null / undefined\n  return val === null || val === undefined || isString(val) || Array.isArray(val) && val.length === 2 && val.every(isString);\n};\n\n/* harmony default export */ var pickervue_type_script_lang_js_ = ({\n  mixins: [emitter_default.a, NewPopper],\n\n  inject: {\n    elForm: {\n      default: ''\n    },\n    elFormItem: {\n      default: ''\n    }\n  },\n\n  props: {\n    size: String,\n    format: String,\n    valueFormat: String,\n    readonly: Boolean,\n    placeholder: String,\n    startPlaceholder: String,\n    endPlaceholder: String,\n    prefixIcon: String,\n    clearIcon: {\n      type: String,\n      default: 'el-icon-circle-close'\n    },\n    name: {\n      default: '',\n      validator: pickervue_type_script_lang_js_validator\n    },\n    disabled: Boolean,\n    clearable: {\n      type: Boolean,\n      default: true\n    },\n    id: {\n      default: '',\n      validator: pickervue_type_script_lang_js_validator\n    },\n    popperClass: String,\n    editable: {\n      type: Boolean,\n      default: true\n    },\n    align: {\n      type: String,\n      default: 'left'\n    },\n    value: {},\n    defaultValue: {},\n    defaultTime: {},\n    rangeSeparator: {\n      default: '-'\n    },\n    pickerOptions: {},\n    unlinkPanels: Boolean,\n    validateEvent: {\n      type: Boolean,\n      default: true\n    }\n  },\n\n  components: { ElInput: input_default.a },\n\n  directives: { Clickoutside: clickoutside_default.a },\n\n  data: function data() {\n    return {\n      pickerVisible: false,\n      showClose: false,\n      userInput: null,\n      valueOnOpen: null, // value when picker opens, used to determine whether to emit change\n      unwatchPickerOptions: null\n    };\n  },\n\n\n  watch: {\n    pickerVisible: function pickerVisible(val) {\n      if (this.readonly || this.pickerDisabled) return;\n      if (val) {\n        this.showPicker();\n        this.valueOnOpen = Array.isArray(this.value) ? [].concat(this.value) : this.value;\n      } else {\n        this.hidePicker();\n        this.emitChange(this.value);\n        this.userInput = null;\n        if (this.validateEvent) {\n          this.dispatch('ElFormItem', 'el.form.blur');\n        }\n        this.$emit('blur', this);\n        this.blur();\n      }\n    },\n\n    parsedValue: {\n      immediate: true,\n      handler: function handler(val) {\n        if (this.picker) {\n          this.picker.value = val;\n        }\n      }\n    },\n    defaultValue: function defaultValue(val) {\n      // NOTE: should eventually move to jsx style picker + panel ?\n      if (this.picker) {\n        this.picker.defaultValue = val;\n      }\n    },\n    value: function value(val, oldVal) {\n      if (!valueEquals(val, oldVal) && !this.pickerVisible && this.validateEvent) {\n        this.dispatch('ElFormItem', 'el.form.change', val);\n      }\n    }\n  },\n\n  computed: {\n    ranged: function ranged() {\n      return this.type.indexOf('range') > -1;\n    },\n    reference: function reference() {\n      var reference = this.$refs.reference;\n      return reference.$el || reference;\n    },\n    refInput: function refInput() {\n      if (this.reference) {\n        return [].slice.call(this.reference.querySelectorAll('input'));\n      }\n      return [];\n    },\n    valueIsEmpty: function valueIsEmpty() {\n      var val = this.value;\n      if (Array.isArray(val)) {\n        for (var i = 0, len = val.length; i < len; i++) {\n          if (val[i]) {\n            return false;\n          }\n        }\n      } else {\n        if (val) {\n          return false;\n        }\n      }\n      return true;\n    },\n    triggerClass: function triggerClass() {\n      return this.prefixIcon || (this.type.indexOf('time') !== -1 ? 'el-icon-time' : 'el-icon-date');\n    },\n    selectionMode: function selectionMode() {\n      if (this.type === 'week') {\n        return 'week';\n      } else if (this.type === 'month') {\n        return 'month';\n      } else if (this.type === 'year') {\n        return 'year';\n      } else if (this.type === 'dates') {\n        return 'dates';\n      } else if (this.type === 'months') {\n        return 'months';\n      } else if (this.type === 'years') {\n        return 'years';\n      }\n\n      return 'day';\n    },\n    haveTrigger: function haveTrigger() {\n      if (typeof this.showTrigger !== 'undefined') {\n        return this.showTrigger;\n      }\n      return HAVE_TRIGGER_TYPES.indexOf(this.type) !== -1;\n    },\n    displayValue: function displayValue() {\n      var formattedValue = formatAsFormatAndType(this.parsedValue, this.format, this.type, this.rangeSeparator);\n      if (Array.isArray(this.userInput)) {\n        return [this.userInput[0] || formattedValue && formattedValue[0] || '', this.userInput[1] || formattedValue && formattedValue[1] || ''];\n      } else if (this.userInput !== null) {\n        return this.userInput;\n      } else if (formattedValue) {\n        return this.type === 'dates' || this.type === 'years' || this.type === 'months' ? formattedValue.join(', ') : formattedValue;\n      } else {\n        return '';\n      }\n    },\n    parsedValue: function parsedValue() {\n      if (!this.value) return this.value; // component value is not set\n      if (this.type === 'time-select') return this.value; // time-select does not require parsing, this might change in next major version\n\n      var valueIsDateObject = Object(date_util_[\"isDateObject\"])(this.value) || Array.isArray(this.value) && this.value.every(date_util_[\"isDateObject\"]);\n      if (valueIsDateObject) {\n        return this.value;\n      }\n\n      if (this.valueFormat) {\n        return parseAsFormatAndType(this.value, this.valueFormat, this.type, this.rangeSeparator) || this.value;\n      }\n\n      // NOTE: deal with common but incorrect usage, should remove in next major version\n      // user might provide string / timestamp without value-format, coerce them into date (or array of date)\n      return Array.isArray(this.value) ? this.value.map(function (val) {\n        return new Date(val);\n      }) : new Date(this.value);\n    },\n    _elFormItemSize: function _elFormItemSize() {\n      return (this.elFormItem || {}).elFormItemSize;\n    },\n    pickerSize: function pickerSize() {\n      return this.size || this._elFormItemSize || (this.$ELEMENT || {}).size;\n    },\n    pickerDisabled: function pickerDisabled() {\n      return this.disabled || (this.elForm || {}).disabled;\n    },\n    firstInputId: function firstInputId() {\n      var obj = {};\n      var id = void 0;\n      if (this.ranged) {\n        id = this.id && this.id[0];\n      } else {\n        id = this.id;\n      }\n      if (id) obj.id = id;\n      return obj;\n    },\n    secondInputId: function secondInputId() {\n      var obj = {};\n      var id = void 0;\n      if (this.ranged) {\n        id = this.id && this.id[1];\n      }\n      if (id) obj.id = id;\n      return obj;\n    }\n  },\n\n  created: function created() {\n    // vue-popper\n    this.popperOptions = {\n      boundariesPadding: 0,\n      gpuAcceleration: false\n    };\n    this.placement = PLACEMENT_MAP[this.align] || PLACEMENT_MAP.left;\n\n    this.$on('fieldReset', this.handleFieldReset);\n  },\n\n\n  methods: {\n    focus: function focus() {\n      if (!this.ranged) {\n        this.$refs.reference.focus();\n      } else {\n        this.handleFocus();\n      }\n    },\n    blur: function blur() {\n      this.refInput.forEach(function (input) {\n        return input.blur();\n      });\n    },\n\n\n    // {parse, formatTo} Value deals maps component value with internal Date\n    parseValue: function parseValue(value) {\n      var isParsed = Object(date_util_[\"isDateObject\"])(value) || Array.isArray(value) && value.every(date_util_[\"isDateObject\"]);\n      if (this.valueFormat && !isParsed) {\n        return parseAsFormatAndType(value, this.valueFormat, this.type, this.rangeSeparator) || value;\n      } else {\n        return value;\n      }\n    },\n    formatToValue: function formatToValue(date) {\n      var isFormattable = Object(date_util_[\"isDateObject\"])(date) || Array.isArray(date) && date.every(date_util_[\"isDateObject\"]);\n      if (this.valueFormat && isFormattable) {\n        return formatAsFormatAndType(date, this.valueFormat, this.type, this.rangeSeparator);\n      } else {\n        return date;\n      }\n    },\n\n\n    // {parse, formatTo} String deals with user input\n    parseString: function parseString(value) {\n      var type = Array.isArray(value) ? this.type : this.type.replace('range', '');\n      return parseAsFormatAndType(value, this.format, type);\n    },\n    formatToString: function formatToString(value) {\n      var type = Array.isArray(value) ? this.type : this.type.replace('range', '');\n      return formatAsFormatAndType(value, this.format, type);\n    },\n    handleMouseEnter: function handleMouseEnter() {\n      if (this.readonly || this.pickerDisabled) return;\n      if (!this.valueIsEmpty && this.clearable) {\n        this.showClose = true;\n      }\n    },\n    handleChange: function handleChange() {\n      if (this.userInput) {\n        var value = this.parseString(this.displayValue);\n        if (value) {\n          this.picker.value = value;\n          if (this.isValidValue(value)) {\n            this.emitInput(value);\n            this.userInput = null;\n          }\n        }\n      }\n      if (this.userInput === '') {\n        this.emitInput(null);\n        this.emitChange(null);\n        this.userInput = null;\n      }\n    },\n    handleStartInput: function handleStartInput(event) {\n      if (this.userInput) {\n        this.userInput = [event.target.value, this.userInput[1]];\n      } else {\n        this.userInput = [event.target.value, null];\n      }\n    },\n    handleEndInput: function handleEndInput(event) {\n      if (this.userInput) {\n        this.userInput = [this.userInput[0], event.target.value];\n      } else {\n        this.userInput = [null, event.target.value];\n      }\n    },\n    handleStartChange: function handleStartChange(event) {\n      var value = this.parseString(this.userInput && this.userInput[0]);\n      if (value) {\n        this.userInput = [this.formatToString(value), this.displayValue[1]];\n        var newValue = [value, this.picker.value && this.picker.value[1]];\n        this.picker.value = newValue;\n        if (this.isValidValue(newValue)) {\n          this.emitInput(newValue);\n          this.userInput = null;\n        }\n      }\n    },\n    handleEndChange: function handleEndChange(event) {\n      var value = this.parseString(this.userInput && this.userInput[1]);\n      if (value) {\n        this.userInput = [this.displayValue[0], this.formatToString(value)];\n        var newValue = [this.picker.value && this.picker.value[0], value];\n        this.picker.value = newValue;\n        if (this.isValidValue(newValue)) {\n          this.emitInput(newValue);\n          this.userInput = null;\n        }\n      }\n    },\n    handleClickIcon: function handleClickIcon(event) {\n      if (this.readonly || this.pickerDisabled) return;\n      if (this.showClose) {\n        this.valueOnOpen = this.value;\n        event.stopPropagation();\n        this.emitInput(null);\n        this.emitChange(null);\n        this.showClose = false;\n        if (this.picker && typeof this.picker.handleClear === 'function') {\n          this.picker.handleClear();\n        }\n      } else {\n        this.pickerVisible = !this.pickerVisible;\n      }\n    },\n    handleClose: function handleClose() {\n      if (!this.pickerVisible) return;\n      this.pickerVisible = false;\n\n      if (this.type === 'dates' || this.type === 'years' || this.type === 'months') {\n        // restore to former value\n        var oldValue = parseAsFormatAndType(this.valueOnOpen, this.valueFormat, this.type, this.rangeSeparator) || this.valueOnOpen;\n        this.emitInput(oldValue);\n      }\n    },\n    handleFieldReset: function handleFieldReset(initialValue) {\n      this.userInput = initialValue === '' ? null : initialValue;\n    },\n    handleFocus: function handleFocus() {\n      var type = this.type;\n\n      if (HAVE_TRIGGER_TYPES.indexOf(type) !== -1 && !this.pickerVisible) {\n        this.pickerVisible = true;\n      }\n      this.$emit('focus', this);\n    },\n    handleKeydown: function handleKeydown(event) {\n      var _this = this;\n\n      var keyCode = event.keyCode;\n\n      // ESC\n      if (keyCode === 27) {\n        this.pickerVisible = false;\n        event.stopPropagation();\n        return;\n      }\n\n      // Tab\n      if (keyCode === 9) {\n        if (!this.ranged) {\n          this.handleChange();\n          this.pickerVisible = this.picker.visible = false;\n          this.blur();\n          event.stopPropagation();\n        } else {\n          // user may change focus between two input\n          setTimeout(function () {\n            if (_this.refInput.indexOf(document.activeElement) === -1) {\n              _this.pickerVisible = false;\n              _this.blur();\n              event.stopPropagation();\n            }\n          }, 0);\n        }\n        return;\n      }\n\n      // Enter\n      if (keyCode === 13) {\n        if (this.userInput === '' || this.isValidValue(this.parseString(this.displayValue))) {\n          this.handleChange();\n          this.pickerVisible = this.picker.visible = false;\n          this.blur();\n        }\n        event.stopPropagation();\n        return;\n      }\n\n      // if user is typing, do not let picker handle key input\n      if (this.userInput) {\n        event.stopPropagation();\n        return;\n      }\n\n      // delegate other keys to panel\n      if (this.picker && this.picker.handleKeydown) {\n        this.picker.handleKeydown(event);\n      }\n    },\n    handleRangeClick: function handleRangeClick() {\n      var type = this.type;\n\n      if (HAVE_TRIGGER_TYPES.indexOf(type) !== -1 && !this.pickerVisible) {\n        this.pickerVisible = true;\n      }\n      this.$emit('focus', this);\n    },\n    hidePicker: function hidePicker() {\n      if (this.picker) {\n        this.picker.resetView && this.picker.resetView();\n        this.pickerVisible = this.picker.visible = false;\n        this.destroyPopper();\n      }\n    },\n    showPicker: function showPicker() {\n      var _this2 = this;\n\n      if (this.$isServer) return;\n      if (!this.picker) {\n        this.mountPicker();\n      }\n      this.pickerVisible = this.picker.visible = true;\n\n      this.updatePopper();\n\n      this.picker.value = this.parsedValue;\n      this.picker.resetView && this.picker.resetView();\n\n      this.$nextTick(function () {\n        _this2.picker.adjustSpinners && _this2.picker.adjustSpinners();\n      });\n    },\n    mountPicker: function mountPicker() {\n      var _this3 = this;\n\n      this.picker = new external_vue_default.a(this.panel).$mount();\n      this.picker.defaultValue = this.defaultValue;\n      this.picker.defaultTime = this.defaultTime;\n      this.picker.popperClass = this.popperClass;\n      this.popperElm = this.picker.$el;\n      this.picker.width = this.reference.getBoundingClientRect().width;\n      this.picker.showTime = this.type === 'datetime' || this.type === 'datetimerange';\n      this.picker.selectionMode = this.selectionMode;\n      this.picker.unlinkPanels = this.unlinkPanels;\n      this.picker.arrowControl = this.arrowControl || this.timeArrowControl || false;\n      this.$watch('format', function (format) {\n        _this3.picker.format = format;\n      });\n\n      var updateOptions = function updateOptions() {\n        var options = _this3.pickerOptions;\n\n        if (options && options.selectableRange) {\n          var ranges = options.selectableRange;\n          var parser = TYPE_VALUE_RESOLVER_MAP.datetimerange.parser;\n          var format = DEFAULT_FORMATS.timerange;\n\n          ranges = Array.isArray(ranges) ? ranges : [ranges];\n          _this3.picker.selectableRange = ranges.map(function (range) {\n            return parser(range, format, _this3.rangeSeparator);\n          });\n        }\n\n        for (var option in options) {\n          if (options.hasOwnProperty(option) &&\n          // 忽略 time-picker 的该配置项\n          option !== 'selectableRange') {\n            _this3.picker[option] = options[option];\n          }\n        }\n\n        // main format must prevail over undocumented pickerOptions.format\n        if (_this3.format) {\n          _this3.picker.format = _this3.format;\n        }\n      };\n      updateOptions();\n      this.unwatchPickerOptions = this.$watch('pickerOptions', function () {\n        return updateOptions();\n      }, { deep: true });\n      this.$el.appendChild(this.picker.$el);\n      this.picker.resetView && this.picker.resetView();\n\n      this.picker.$on('dodestroy', this.doDestroy);\n      this.picker.$on('pick', function () {\n        var date = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n        var visible = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n        _this3.userInput = null;\n        _this3.pickerVisible = _this3.picker.visible = visible;\n        _this3.emitInput(date);\n        _this3.picker.resetView && _this3.picker.resetView();\n      });\n\n      this.picker.$on('select-range', function (start, end, pos) {\n        if (_this3.refInput.length === 0) return;\n        if (!pos || pos === 'min') {\n          _this3.refInput[0].setSelectionRange(start, end);\n          _this3.refInput[0].focus();\n        } else if (pos === 'max') {\n          _this3.refInput[1].setSelectionRange(start, end);\n          _this3.refInput[1].focus();\n        }\n      });\n    },\n    unmountPicker: function unmountPicker() {\n      if (this.picker) {\n        this.picker.$destroy();\n        this.picker.$off();\n        if (typeof this.unwatchPickerOptions === 'function') {\n          this.unwatchPickerOptions();\n        }\n        this.picker.$el.parentNode.removeChild(this.picker.$el);\n      }\n    },\n    emitChange: function emitChange(val) {\n      // determine user real change only\n      if (!valueEquals(val, this.valueOnOpen)) {\n        this.$emit('change', val);\n        this.valueOnOpen = val;\n        if (this.validateEvent) {\n          this.dispatch('ElFormItem', 'el.form.change', val);\n        }\n      }\n    },\n    emitInput: function emitInput(val) {\n      var formatted = this.formatToValue(val);\n      if (!valueEquals(this.value, formatted)) {\n        this.$emit('input', formatted);\n      }\n    },\n    isValidValue: function isValidValue(value) {\n      if (!this.picker) {\n        this.mountPicker();\n      }\n      if (this.picker.isValidValue) {\n        return value && this.picker.isValidValue(value);\n      } else {\n        return true;\n      }\n    }\n  }\n});\n// CONCATENATED MODULE: ./packages/date-picker/src/picker.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_pickervue_type_script_lang_js_ = (pickervue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/date-picker/src/picker.vue\n\n\n\n\n\n/* normalize component */\n\nvar picker_component = normalizeComponent(\n  src_pickervue_type_script_lang_js_,\n  pickervue_type_template_id_79ae069f_render,\n  pickervue_type_template_id_79ae069f_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var picker_api; }\npicker_component.options.__file = \"packages/date-picker/src/picker.vue\"\n/* harmony default export */ var picker = (picker_component.exports);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/date-picker/src/panel/date.vue?vue&type=template&id=2440d4ea&\nvar datevue_type_template_id_2440d4ea_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"transition\",\n    {\n      attrs: { name: \"el-zoom-in-top\" },\n      on: { \"after-enter\": _vm.handleEnter, \"after-leave\": _vm.handleLeave }\n    },\n    [\n      _c(\n        \"div\",\n        {\n          directives: [\n            {\n              name: \"show\",\n              rawName: \"v-show\",\n              value: _vm.visible,\n              expression: \"visible\"\n            }\n          ],\n          staticClass: \"el-picker-panel el-date-picker el-popper\",\n          class: [\n            {\n              \"has-sidebar\": _vm.$slots.sidebar || _vm.shortcuts,\n              \"has-time\": _vm.showTime\n            },\n            _vm.popperClass\n          ]\n        },\n        [\n          _c(\n            \"div\",\n            { staticClass: \"el-picker-panel__body-wrapper\" },\n            [\n              _vm._t(\"sidebar\"),\n              _vm.shortcuts\n                ? _c(\n                    \"div\",\n                    { staticClass: \"el-picker-panel__sidebar\" },\n                    _vm._l(_vm.shortcuts, function(shortcut, key) {\n                      return _c(\n                        \"button\",\n                        {\n                          key: key,\n                          staticClass: \"el-picker-panel__shortcut\",\n                          attrs: { type: \"button\" },\n                          on: {\n                            click: function($event) {\n                              _vm.handleShortcutClick(shortcut)\n                            }\n                          }\n                        },\n                        [_vm._v(_vm._s(shortcut.text))]\n                      )\n                    }),\n                    0\n                  )\n                : _vm._e(),\n              _c(\"div\", { staticClass: \"el-picker-panel__body\" }, [\n                _vm.showTime\n                  ? _c(\"div\", { staticClass: \"el-date-picker__time-header\" }, [\n                      _c(\n                        \"span\",\n                        { staticClass: \"el-date-picker__editor-wrap\" },\n                        [\n                          _c(\"el-input\", {\n                            attrs: {\n                              placeholder: _vm.t(\"el.datepicker.selectDate\"),\n                              value: _vm.visibleDate,\n                              size: \"small\"\n                            },\n                            on: {\n                              input: function(val) {\n                                return (_vm.userInputDate = val)\n                              },\n                              change: _vm.handleVisibleDateChange\n                            }\n                          })\n                        ],\n                        1\n                      ),\n                      _c(\n                        \"span\",\n                        {\n                          directives: [\n                            {\n                              name: \"clickoutside\",\n                              rawName: \"v-clickoutside\",\n                              value: _vm.handleTimePickClose,\n                              expression: \"handleTimePickClose\"\n                            }\n                          ],\n                          staticClass: \"el-date-picker__editor-wrap\"\n                        },\n                        [\n                          _c(\"el-input\", {\n                            ref: \"input\",\n                            attrs: {\n                              placeholder: _vm.t(\"el.datepicker.selectTime\"),\n                              value: _vm.visibleTime,\n                              size: \"small\"\n                            },\n                            on: {\n                              focus: function($event) {\n                                _vm.timePickerVisible = true\n                              },\n                              input: function(val) {\n                                return (_vm.userInputTime = val)\n                              },\n                              change: _vm.handleVisibleTimeChange\n                            }\n                          }),\n                          _c(\"time-picker\", {\n                            ref: \"timepicker\",\n                            attrs: {\n                              \"time-arrow-control\": _vm.arrowControl,\n                              visible: _vm.timePickerVisible\n                            },\n                            on: {\n                              pick: _vm.handleTimePick,\n                              mounted: _vm.proxyTimePickerDataProperties\n                            }\n                          })\n                        ],\n                        1\n                      )\n                    ])\n                  : _vm._e(),\n                _c(\n                  \"div\",\n                  {\n                    directives: [\n                      {\n                        name: \"show\",\n                        rawName: \"v-show\",\n                        value: _vm.currentView !== \"time\",\n                        expression: \"currentView !== 'time'\"\n                      }\n                    ],\n                    staticClass: \"el-date-picker__header\",\n                    class: {\n                      \"el-date-picker__header--bordered\":\n                        _vm.currentView === \"year\" ||\n                        _vm.currentView === \"month\"\n                    }\n                  },\n                  [\n                    _c(\"button\", {\n                      staticClass:\n                        \"el-picker-panel__icon-btn el-date-picker__prev-btn el-icon-d-arrow-left\",\n                      attrs: {\n                        type: \"button\",\n                        \"aria-label\": _vm.t(\"el.datepicker.prevYear\")\n                      },\n                      on: { click: _vm.prevYear }\n                    }),\n                    _c(\"button\", {\n                      directives: [\n                        {\n                          name: \"show\",\n                          rawName: \"v-show\",\n                          value: _vm.currentView === \"date\",\n                          expression: \"currentView === 'date'\"\n                        }\n                      ],\n                      staticClass:\n                        \"el-picker-panel__icon-btn el-date-picker__prev-btn el-icon-arrow-left\",\n                      attrs: {\n                        type: \"button\",\n                        \"aria-label\": _vm.t(\"el.datepicker.prevMonth\")\n                      },\n                      on: { click: _vm.prevMonth }\n                    }),\n                    _c(\n                      \"span\",\n                      {\n                        staticClass: \"el-date-picker__header-label\",\n                        attrs: { role: \"button\" },\n                        on: { click: _vm.showYearPicker }\n                      },\n                      [_vm._v(_vm._s(_vm.yearLabel))]\n                    ),\n                    _c(\n                      \"span\",\n                      {\n                        directives: [\n                          {\n                            name: \"show\",\n                            rawName: \"v-show\",\n                            value: _vm.currentView === \"date\",\n                            expression: \"currentView === 'date'\"\n                          }\n                        ],\n                        staticClass: \"el-date-picker__header-label\",\n                        class: { active: _vm.currentView === \"month\" },\n                        attrs: { role: \"button\" },\n                        on: { click: _vm.showMonthPicker }\n                      },\n                      [\n                        _vm._v(\n                          _vm._s(_vm.t(\"el.datepicker.month\" + (_vm.month + 1)))\n                        )\n                      ]\n                    ),\n                    _c(\"button\", {\n                      staticClass:\n                        \"el-picker-panel__icon-btn el-date-picker__next-btn el-icon-d-arrow-right\",\n                      attrs: {\n                        type: \"button\",\n                        \"aria-label\": _vm.t(\"el.datepicker.nextYear\")\n                      },\n                      on: { click: _vm.nextYear }\n                    }),\n                    _c(\"button\", {\n                      directives: [\n                        {\n                          name: \"show\",\n                          rawName: \"v-show\",\n                          value: _vm.currentView === \"date\",\n                          expression: \"currentView === 'date'\"\n                        }\n                      ],\n                      staticClass:\n                        \"el-picker-panel__icon-btn el-date-picker__next-btn el-icon-arrow-right\",\n                      attrs: {\n                        type: \"button\",\n                        \"aria-label\": _vm.t(\"el.datepicker.nextMonth\")\n                      },\n                      on: { click: _vm.nextMonth }\n                    })\n                  ]\n                ),\n                _c(\n                  \"div\",\n                  { staticClass: \"el-picker-panel__content\" },\n                  [\n                    _c(\"date-table\", {\n                      directives: [\n                        {\n                          name: \"show\",\n                          rawName: \"v-show\",\n                          value: _vm.currentView === \"date\",\n                          expression: \"currentView === 'date'\"\n                        }\n                      ],\n                      attrs: {\n                        \"selection-mode\": _vm.selectionMode,\n                        \"first-day-of-week\": _vm.firstDayOfWeek,\n                        value: _vm.value,\n                        \"default-value\": _vm.defaultValue\n                          ? new Date(_vm.defaultValue)\n                          : null,\n                        date: _vm.date,\n                        \"cell-class-name\": _vm.cellClassName,\n                        \"disabled-date\": _vm.disabledDate\n                      },\n                      on: { pick: _vm.handleDatePick }\n                    }),\n                    _c(\"year-table\", {\n                      directives: [\n                        {\n                          name: \"show\",\n                          rawName: \"v-show\",\n                          value: _vm.currentView === \"year\",\n                          expression: \"currentView === 'year'\"\n                        }\n                      ],\n                      attrs: {\n                        \"selection-mode\": _vm.selectionMode,\n                        value: _vm.value,\n                        \"default-value\": _vm.defaultValue\n                          ? new Date(_vm.defaultValue)\n                          : null,\n                        date: _vm.date,\n                        \"disabled-date\": _vm.disabledDate\n                      },\n                      on: { pick: _vm.handleYearPick }\n                    }),\n                    _c(\"month-table\", {\n                      directives: [\n                        {\n                          name: \"show\",\n                          rawName: \"v-show\",\n                          value: _vm.currentView === \"month\",\n                          expression: \"currentView === 'month'\"\n                        }\n                      ],\n                      attrs: {\n                        \"selection-mode\": _vm.selectionMode,\n                        value: _vm.value,\n                        \"default-value\": _vm.defaultValue\n                          ? new Date(_vm.defaultValue)\n                          : null,\n                        date: _vm.date,\n                        \"disabled-date\": _vm.disabledDate\n                      },\n                      on: { pick: _vm.handleMonthPick }\n                    })\n                  ],\n                  1\n                )\n              ])\n            ],\n            2\n          ),\n          _c(\n            \"div\",\n            {\n              directives: [\n                {\n                  name: \"show\",\n                  rawName: \"v-show\",\n                  value:\n                    _vm.footerVisible &&\n                    (_vm.currentView === \"date\" ||\n                      _vm.currentView === \"month\" ||\n                      _vm.currentView === \"year\"),\n                  expression:\n                    \"footerVisible && (currentView === 'date' || currentView === 'month' || currentView === 'year')\"\n                }\n              ],\n              staticClass: \"el-picker-panel__footer\"\n            },\n            [\n              _c(\n                \"el-button\",\n                {\n                  directives: [\n                    {\n                      name: \"show\",\n                      rawName: \"v-show\",\n                      value:\n                        _vm.selectionMode !== \"dates\" &&\n                        _vm.selectionMode !== \"months\" &&\n                        _vm.selectionMode !== \"years\",\n                      expression:\n                        \"selectionMode !== 'dates' && selectionMode !== 'months' && selectionMode !== 'years'\"\n                    }\n                  ],\n                  staticClass: \"el-picker-panel__link-btn\",\n                  attrs: { size: \"mini\", type: \"text\" },\n                  on: { click: _vm.changeToNow }\n                },\n                [\n                  _vm._v(\n                    \"\\n        \" +\n                      _vm._s(_vm.t(\"el.datepicker.now\")) +\n                      \"\\n      \"\n                  )\n                ]\n              ),\n              _c(\n                \"el-button\",\n                {\n                  staticClass: \"el-picker-panel__link-btn\",\n                  attrs: { plain: \"\", size: \"mini\" },\n                  on: { click: _vm.confirm }\n                },\n                [\n                  _vm._v(\n                    \"\\n        \" +\n                      _vm._s(_vm.t(\"el.datepicker.confirm\")) +\n                      \"\\n      \"\n                  )\n                ]\n              )\n            ],\n            1\n          )\n        ]\n      )\n    ]\n  )\n}\nvar datevue_type_template_id_2440d4ea_staticRenderFns = []\ndatevue_type_template_id_2440d4ea_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/date-picker/src/panel/date.vue?vue&type=template&id=2440d4ea&\n\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/date-picker/src/panel/time.vue?vue&type=template&id=3d939089&\nvar timevue_type_template_id_3d939089_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"transition\",\n    {\n      attrs: { name: \"el-zoom-in-top\" },\n      on: {\n        \"after-leave\": function($event) {\n          _vm.$emit(\"dodestroy\")\n        }\n      }\n    },\n    [\n      _c(\n        \"div\",\n        {\n          directives: [\n            {\n              name: \"show\",\n              rawName: \"v-show\",\n              value: _vm.visible,\n              expression: \"visible\"\n            }\n          ],\n          staticClass: \"el-time-panel el-popper\",\n          class: _vm.popperClass\n        },\n        [\n          _c(\n            \"div\",\n            {\n              staticClass: \"el-time-panel__content\",\n              class: { \"has-seconds\": _vm.showSeconds }\n            },\n            [\n              _c(\"time-spinner\", {\n                ref: \"spinner\",\n                attrs: {\n                  \"arrow-control\": _vm.useArrow,\n                  \"show-seconds\": _vm.showSeconds,\n                  \"am-pm-mode\": _vm.amPmMode,\n                  date: _vm.date\n                },\n                on: {\n                  change: _vm.handleChange,\n                  \"select-range\": _vm.setSelectionRange\n                }\n              })\n            ],\n            1\n          ),\n          _c(\"div\", { staticClass: \"el-time-panel__footer\" }, [\n            _c(\n              \"button\",\n              {\n                staticClass: \"el-time-panel__btn cancel\",\n                attrs: { type: \"button\" },\n                on: { click: _vm.handleCancel }\n              },\n              [_vm._v(_vm._s(_vm.t(\"el.datepicker.cancel\")))]\n            ),\n            _c(\n              \"button\",\n              {\n                staticClass: \"el-time-panel__btn\",\n                class: { confirm: !_vm.disabled },\n                attrs: { type: \"button\" },\n                on: {\n                  click: function($event) {\n                    _vm.handleConfirm()\n                  }\n                }\n              },\n              [_vm._v(_vm._s(_vm.t(\"el.datepicker.confirm\")))]\n            )\n          ])\n        ]\n      )\n    ]\n  )\n}\nvar timevue_type_template_id_3d939089_staticRenderFns = []\ntimevue_type_template_id_3d939089_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/date-picker/src/panel/time.vue?vue&type=template&id=3d939089&\n\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/date-picker/src/basic/time-spinner.vue?vue&type=template&id=1facadeb&\nvar time_spinnervue_type_template_id_1facadeb_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    {\n      staticClass: \"el-time-spinner\",\n      class: { \"has-seconds\": _vm.showSeconds }\n    },\n    [\n      !_vm.arrowControl\n        ? [\n            _c(\n              \"el-scrollbar\",\n              {\n                ref: \"hours\",\n                staticClass: \"el-time-spinner__wrapper\",\n                attrs: {\n                  \"wrap-style\": \"max-height: inherit;\",\n                  \"view-class\": \"el-time-spinner__list\",\n                  noresize: \"\",\n                  tag: \"ul\"\n                },\n                nativeOn: {\n                  mouseenter: function($event) {\n                    _vm.emitSelectRange(\"hours\")\n                  },\n                  mousemove: function($event) {\n                    _vm.adjustCurrentSpinner(\"hours\")\n                  }\n                }\n              },\n              _vm._l(_vm.hoursList, function(disabled, hour) {\n                return _c(\n                  \"li\",\n                  {\n                    key: hour,\n                    staticClass: \"el-time-spinner__item\",\n                    class: { active: hour === _vm.hours, disabled: disabled },\n                    on: {\n                      click: function($event) {\n                        _vm.handleClick(\"hours\", {\n                          value: hour,\n                          disabled: disabled\n                        })\n                      }\n                    }\n                  },\n                  [\n                    _vm._v(\n                      _vm._s(\n                        (\"0\" + (_vm.amPmMode ? hour % 12 || 12 : hour)).slice(\n                          -2\n                        )\n                      ) + _vm._s(_vm.amPm(hour))\n                    )\n                  ]\n                )\n              }),\n              0\n            ),\n            _c(\n              \"el-scrollbar\",\n              {\n                ref: \"minutes\",\n                staticClass: \"el-time-spinner__wrapper\",\n                attrs: {\n                  \"wrap-style\": \"max-height: inherit;\",\n                  \"view-class\": \"el-time-spinner__list\",\n                  noresize: \"\",\n                  tag: \"ul\"\n                },\n                nativeOn: {\n                  mouseenter: function($event) {\n                    _vm.emitSelectRange(\"minutes\")\n                  },\n                  mousemove: function($event) {\n                    _vm.adjustCurrentSpinner(\"minutes\")\n                  }\n                }\n              },\n              _vm._l(_vm.minutesList, function(enabled, key) {\n                return _c(\n                  \"li\",\n                  {\n                    key: key,\n                    staticClass: \"el-time-spinner__item\",\n                    class: { active: key === _vm.minutes, disabled: !enabled },\n                    on: {\n                      click: function($event) {\n                        _vm.handleClick(\"minutes\", {\n                          value: key,\n                          disabled: false\n                        })\n                      }\n                    }\n                  },\n                  [_vm._v(_vm._s((\"0\" + key).slice(-2)))]\n                )\n              }),\n              0\n            ),\n            _c(\n              \"el-scrollbar\",\n              {\n                directives: [\n                  {\n                    name: \"show\",\n                    rawName: \"v-show\",\n                    value: _vm.showSeconds,\n                    expression: \"showSeconds\"\n                  }\n                ],\n                ref: \"seconds\",\n                staticClass: \"el-time-spinner__wrapper\",\n                attrs: {\n                  \"wrap-style\": \"max-height: inherit;\",\n                  \"view-class\": \"el-time-spinner__list\",\n                  noresize: \"\",\n                  tag: \"ul\"\n                },\n                nativeOn: {\n                  mouseenter: function($event) {\n                    _vm.emitSelectRange(\"seconds\")\n                  },\n                  mousemove: function($event) {\n                    _vm.adjustCurrentSpinner(\"seconds\")\n                  }\n                }\n              },\n              _vm._l(60, function(second, key) {\n                return _c(\n                  \"li\",\n                  {\n                    key: key,\n                    staticClass: \"el-time-spinner__item\",\n                    class: { active: key === _vm.seconds },\n                    on: {\n                      click: function($event) {\n                        _vm.handleClick(\"seconds\", {\n                          value: key,\n                          disabled: false\n                        })\n                      }\n                    }\n                  },\n                  [_vm._v(_vm._s((\"0\" + key).slice(-2)))]\n                )\n              }),\n              0\n            )\n          ]\n        : _vm._e(),\n      _vm.arrowControl\n        ? [\n            _c(\n              \"div\",\n              {\n                staticClass: \"el-time-spinner__wrapper is-arrow\",\n                on: {\n                  mouseenter: function($event) {\n                    _vm.emitSelectRange(\"hours\")\n                  }\n                }\n              },\n              [\n                _c(\"i\", {\n                  directives: [\n                    {\n                      name: \"repeat-click\",\n                      rawName: \"v-repeat-click\",\n                      value: _vm.decrease,\n                      expression: \"decrease\"\n                    }\n                  ],\n                  staticClass: \"el-time-spinner__arrow el-icon-arrow-up\"\n                }),\n                _c(\"i\", {\n                  directives: [\n                    {\n                      name: \"repeat-click\",\n                      rawName: \"v-repeat-click\",\n                      value: _vm.increase,\n                      expression: \"increase\"\n                    }\n                  ],\n                  staticClass: \"el-time-spinner__arrow el-icon-arrow-down\"\n                }),\n                _c(\n                  \"ul\",\n                  { ref: \"hours\", staticClass: \"el-time-spinner__list\" },\n                  _vm._l(_vm.arrowHourList, function(hour, key) {\n                    return _c(\n                      \"li\",\n                      {\n                        key: key,\n                        staticClass: \"el-time-spinner__item\",\n                        class: {\n                          active: hour === _vm.hours,\n                          disabled: _vm.hoursList[hour]\n                        }\n                      },\n                      [\n                        _vm._v(\n                          _vm._s(\n                            hour === undefined\n                              ? \"\"\n                              : (\n                                  \"0\" + (_vm.amPmMode ? hour % 12 || 12 : hour)\n                                ).slice(-2) + _vm.amPm(hour)\n                          )\n                        )\n                      ]\n                    )\n                  }),\n                  0\n                )\n              ]\n            ),\n            _c(\n              \"div\",\n              {\n                staticClass: \"el-time-spinner__wrapper is-arrow\",\n                on: {\n                  mouseenter: function($event) {\n                    _vm.emitSelectRange(\"minutes\")\n                  }\n                }\n              },\n              [\n                _c(\"i\", {\n                  directives: [\n                    {\n                      name: \"repeat-click\",\n                      rawName: \"v-repeat-click\",\n                      value: _vm.decrease,\n                      expression: \"decrease\"\n                    }\n                  ],\n                  staticClass: \"el-time-spinner__arrow el-icon-arrow-up\"\n                }),\n                _c(\"i\", {\n                  directives: [\n                    {\n                      name: \"repeat-click\",\n                      rawName: \"v-repeat-click\",\n                      value: _vm.increase,\n                      expression: \"increase\"\n                    }\n                  ],\n                  staticClass: \"el-time-spinner__arrow el-icon-arrow-down\"\n                }),\n                _c(\n                  \"ul\",\n                  { ref: \"minutes\", staticClass: \"el-time-spinner__list\" },\n                  _vm._l(_vm.arrowMinuteList, function(minute, key) {\n                    return _c(\n                      \"li\",\n                      {\n                        key: key,\n                        staticClass: \"el-time-spinner__item\",\n                        class: { active: minute === _vm.minutes }\n                      },\n                      [\n                        _vm._v(\n                          \"\\n          \" +\n                            _vm._s(\n                              minute === undefined\n                                ? \"\"\n                                : (\"0\" + minute).slice(-2)\n                            ) +\n                            \"\\n        \"\n                        )\n                      ]\n                    )\n                  }),\n                  0\n                )\n              ]\n            ),\n            _vm.showSeconds\n              ? _c(\n                  \"div\",\n                  {\n                    staticClass: \"el-time-spinner__wrapper is-arrow\",\n                    on: {\n                      mouseenter: function($event) {\n                        _vm.emitSelectRange(\"seconds\")\n                      }\n                    }\n                  },\n                  [\n                    _c(\"i\", {\n                      directives: [\n                        {\n                          name: \"repeat-click\",\n                          rawName: \"v-repeat-click\",\n                          value: _vm.decrease,\n                          expression: \"decrease\"\n                        }\n                      ],\n                      staticClass: \"el-time-spinner__arrow el-icon-arrow-up\"\n                    }),\n                    _c(\"i\", {\n                      directives: [\n                        {\n                          name: \"repeat-click\",\n                          rawName: \"v-repeat-click\",\n                          value: _vm.increase,\n                          expression: \"increase\"\n                        }\n                      ],\n                      staticClass: \"el-time-spinner__arrow el-icon-arrow-down\"\n                    }),\n                    _c(\n                      \"ul\",\n                      { ref: \"seconds\", staticClass: \"el-time-spinner__list\" },\n                      _vm._l(_vm.arrowSecondList, function(second, key) {\n                        return _c(\n                          \"li\",\n                          {\n                            key: key,\n                            staticClass: \"el-time-spinner__item\",\n                            class: { active: second === _vm.seconds }\n                          },\n                          [\n                            _vm._v(\n                              \"\\n          \" +\n                                _vm._s(\n                                  second === undefined\n                                    ? \"\"\n                                    : (\"0\" + second).slice(-2)\n                                ) +\n                                \"\\n        \"\n                            )\n                          ]\n                        )\n                      }),\n                      0\n                    )\n                  ]\n                )\n              : _vm._e()\n          ]\n        : _vm._e()\n    ],\n    2\n  )\n}\nvar time_spinnervue_type_template_id_1facadeb_staticRenderFns = []\ntime_spinnervue_type_template_id_1facadeb_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/date-picker/src/basic/time-spinner.vue?vue&type=template&id=1facadeb&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/date-picker/src/basic/time-spinner.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n/* harmony default export */ var time_spinnervue_type_script_lang_js_ = ({\n  components: { ElScrollbar: scrollbar_default.a },\n\n  directives: {\n    repeatClick: repeat_click\n  },\n\n  props: {\n    date: {},\n    defaultValue: {}, // reserved for future use\n    showSeconds: {\n      type: Boolean,\n      default: true\n    },\n    arrowControl: Boolean,\n    amPmMode: {\n      type: String,\n      default: '' // 'a': am/pm; 'A': AM/PM\n    }\n  },\n\n  computed: {\n    hours: function hours() {\n      return this.date.getHours();\n    },\n    minutes: function minutes() {\n      return this.date.getMinutes();\n    },\n    seconds: function seconds() {\n      return this.date.getSeconds();\n    },\n    hoursList: function hoursList() {\n      return Object(date_util_[\"getRangeHours\"])(this.selectableRange);\n    },\n    minutesList: function minutesList() {\n      return Object(date_util_[\"getRangeMinutes\"])(this.selectableRange, this.hours);\n    },\n    arrowHourList: function arrowHourList() {\n      var hours = this.hours;\n      return [hours > 0 ? hours - 1 : undefined, hours, hours < 23 ? hours + 1 : undefined];\n    },\n    arrowMinuteList: function arrowMinuteList() {\n      var minutes = this.minutes;\n      return [minutes > 0 ? minutes - 1 : undefined, minutes, minutes < 59 ? minutes + 1 : undefined];\n    },\n    arrowSecondList: function arrowSecondList() {\n      var seconds = this.seconds;\n      return [seconds > 0 ? seconds - 1 : undefined, seconds, seconds < 59 ? seconds + 1 : undefined];\n    }\n  },\n\n  data: function data() {\n    return {\n      selectableRange: [],\n      currentScrollbar: null\n    };\n  },\n  mounted: function mounted() {\n    var _this = this;\n\n    this.$nextTick(function () {\n      !_this.arrowControl && _this.bindScrollEvent();\n    });\n  },\n\n\n  methods: {\n    increase: function increase() {\n      this.scrollDown(1);\n    },\n    decrease: function decrease() {\n      this.scrollDown(-1);\n    },\n    modifyDateField: function modifyDateField(type, value) {\n      switch (type) {\n        case 'hours':\n          this.$emit('change', Object(date_util_[\"modifyTime\"])(this.date, value, this.minutes, this.seconds));break;\n        case 'minutes':\n          this.$emit('change', Object(date_util_[\"modifyTime\"])(this.date, this.hours, value, this.seconds));break;\n        case 'seconds':\n          this.$emit('change', Object(date_util_[\"modifyTime\"])(this.date, this.hours, this.minutes, value));break;\n      }\n    },\n    handleClick: function handleClick(type, _ref) {\n      var value = _ref.value,\n          disabled = _ref.disabled;\n\n      if (!disabled) {\n        this.modifyDateField(type, value);\n        this.emitSelectRange(type);\n        this.adjustSpinner(type, value);\n      }\n    },\n    emitSelectRange: function emitSelectRange(type) {\n      if (type === 'hours') {\n        this.$emit('select-range', 0, 2);\n      } else if (type === 'minutes') {\n        this.$emit('select-range', 3, 5);\n      } else if (type === 'seconds') {\n        this.$emit('select-range', 6, 8);\n      }\n      this.currentScrollbar = type;\n    },\n    bindScrollEvent: function bindScrollEvent() {\n      var _this2 = this;\n\n      var bindFunction = function bindFunction(type) {\n        _this2.$refs[type].wrap.onscroll = function (e) {\n          // TODO: scroll is emitted when set scrollTop programatically\n          // should find better solutions in the future!\n          _this2.handleScroll(type, e);\n        };\n      };\n      bindFunction('hours');\n      bindFunction('minutes');\n      bindFunction('seconds');\n    },\n    handleScroll: function handleScroll(type) {\n      var value = Math.min(Math.round((this.$refs[type].wrap.scrollTop - (this.scrollBarHeight(type) * 0.5 - 10) / this.typeItemHeight(type) + 3) / this.typeItemHeight(type)), type === 'hours' ? 23 : 59);\n      this.modifyDateField(type, value);\n    },\n\n\n    // NOTE: used by datetime / date-range panel\n    //       renamed from adjustScrollTop\n    //       should try to refactory it\n    adjustSpinners: function adjustSpinners() {\n      this.adjustSpinner('hours', this.hours);\n      this.adjustSpinner('minutes', this.minutes);\n      this.adjustSpinner('seconds', this.seconds);\n    },\n    adjustCurrentSpinner: function adjustCurrentSpinner(type) {\n      this.adjustSpinner(type, this[type]);\n    },\n    adjustSpinner: function adjustSpinner(type, value) {\n      if (this.arrowControl) return;\n      var el = this.$refs[type].wrap;\n      if (el) {\n        el.scrollTop = Math.max(0, value * this.typeItemHeight(type));\n      }\n    },\n    scrollDown: function scrollDown(step) {\n      var _this3 = this;\n\n      if (!this.currentScrollbar) {\n        this.emitSelectRange('hours');\n      }\n\n      var label = this.currentScrollbar;\n      var hoursList = this.hoursList;\n      var now = this[label];\n\n      if (this.currentScrollbar === 'hours') {\n        var total = Math.abs(step);\n        step = step > 0 ? 1 : -1;\n        var length = hoursList.length;\n        while (length-- && total) {\n          now = (now + step + hoursList.length) % hoursList.length;\n          if (hoursList[now]) {\n            continue;\n          }\n          total--;\n        }\n        if (hoursList[now]) return;\n      } else {\n        now = (now + step + 60) % 60;\n      }\n\n      this.modifyDateField(label, now);\n      this.adjustSpinner(label, now);\n      this.$nextTick(function () {\n        return _this3.emitSelectRange(_this3.currentScrollbar);\n      });\n    },\n    amPm: function amPm(hour) {\n      var shouldShowAmPm = this.amPmMode.toLowerCase() === 'a';\n      if (!shouldShowAmPm) return '';\n      var isCapital = this.amPmMode === 'A';\n      var content = hour < 12 ? ' am' : ' pm';\n      if (isCapital) content = content.toUpperCase();\n      return content;\n    },\n    typeItemHeight: function typeItemHeight(type) {\n      return this.$refs[type].$el.querySelector('li').offsetHeight;\n    },\n    scrollBarHeight: function scrollBarHeight(type) {\n      return this.$refs[type].$el.offsetHeight;\n    }\n  }\n});\n// CONCATENATED MODULE: ./packages/date-picker/src/basic/time-spinner.vue?vue&type=script&lang=js&\n /* harmony default export */ var basic_time_spinnervue_type_script_lang_js_ = (time_spinnervue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/date-picker/src/basic/time-spinner.vue\n\n\n\n\n\n/* normalize component */\n\nvar time_spinner_component = normalizeComponent(\n  basic_time_spinnervue_type_script_lang_js_,\n  time_spinnervue_type_template_id_1facadeb_render,\n  time_spinnervue_type_template_id_1facadeb_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var time_spinner_api; }\ntime_spinner_component.options.__file = \"packages/date-picker/src/basic/time-spinner.vue\"\n/* harmony default export */ var time_spinner = (time_spinner_component.exports);\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/date-picker/src/panel/time.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n/* harmony default export */ var timevue_type_script_lang_js_ = ({\n  mixins: [locale_default.a],\n\n  components: {\n    TimeSpinner: time_spinner\n  },\n\n  props: {\n    visible: Boolean,\n    timeArrowControl: Boolean\n  },\n\n  watch: {\n    visible: function visible(val) {\n      var _this = this;\n\n      if (val) {\n        this.oldValue = this.value;\n        this.$nextTick(function () {\n          return _this.$refs.spinner.emitSelectRange('hours');\n        });\n      } else {\n        this.needInitAdjust = true;\n      }\n    },\n    value: function value(newVal) {\n      var _this2 = this;\n\n      var date = void 0;\n      if (newVal instanceof Date) {\n        date = Object(date_util_[\"limitTimeRange\"])(newVal, this.selectableRange, this.format);\n      } else if (!newVal) {\n        date = this.defaultValue ? new Date(this.defaultValue) : new Date();\n      }\n\n      this.date = date;\n      if (this.visible && this.needInitAdjust) {\n        this.$nextTick(function (_) {\n          return _this2.adjustSpinners();\n        });\n        this.needInitAdjust = false;\n      }\n    },\n    selectableRange: function selectableRange(val) {\n      this.$refs.spinner.selectableRange = val;\n    },\n    defaultValue: function defaultValue(val) {\n      if (!Object(date_util_[\"isDate\"])(this.value)) {\n        this.date = val ? new Date(val) : new Date();\n      }\n    }\n  },\n\n  data: function data() {\n    return {\n      popperClass: '',\n      format: 'HH:mm:ss',\n      value: '',\n      defaultValue: null,\n      date: new Date(),\n      oldValue: new Date(),\n      selectableRange: [],\n      selectionRange: [0, 2],\n      disabled: false,\n      arrowControl: false,\n      needInitAdjust: true\n    };\n  },\n\n\n  computed: {\n    showSeconds: function showSeconds() {\n      return (this.format || '').indexOf('ss') !== -1;\n    },\n    useArrow: function useArrow() {\n      return this.arrowControl || this.timeArrowControl || false;\n    },\n    amPmMode: function amPmMode() {\n      if ((this.format || '').indexOf('A') !== -1) return 'A';\n      if ((this.format || '').indexOf('a') !== -1) return 'a';\n      return '';\n    }\n  },\n\n  methods: {\n    handleCancel: function handleCancel() {\n      this.$emit('pick', this.oldValue, false);\n    },\n    handleChange: function handleChange(date) {\n      // this.visible avoids edge cases, when use scrolls during panel closing animation\n      if (this.visible) {\n        this.date = Object(date_util_[\"clearMilliseconds\"])(date);\n        // if date is out of range, do not emit\n        if (this.isValidValue(this.date)) {\n          this.$emit('pick', this.date, true);\n        }\n      }\n    },\n    setSelectionRange: function setSelectionRange(start, end) {\n      this.$emit('select-range', start, end);\n      this.selectionRange = [start, end];\n    },\n    handleConfirm: function handleConfirm() {\n      var visible = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n      var first = arguments[1];\n\n      if (first) return;\n      var date = Object(date_util_[\"clearMilliseconds\"])(Object(date_util_[\"limitTimeRange\"])(this.date, this.selectableRange, this.format));\n      this.$emit('pick', date, visible, first);\n    },\n    handleKeydown: function handleKeydown(event) {\n      var keyCode = event.keyCode;\n      var mapping = { 38: -1, 40: 1, 37: -1, 39: 1 };\n\n      // Left or Right\n      if (keyCode === 37 || keyCode === 39) {\n        var step = mapping[keyCode];\n        this.changeSelectionRange(step);\n        event.preventDefault();\n        return;\n      }\n\n      // Up or Down\n      if (keyCode === 38 || keyCode === 40) {\n        var _step = mapping[keyCode];\n        this.$refs.spinner.scrollDown(_step);\n        event.preventDefault();\n        return;\n      }\n    },\n    isValidValue: function isValidValue(date) {\n      return Object(date_util_[\"timeWithinRange\"])(date, this.selectableRange, this.format);\n    },\n    adjustSpinners: function adjustSpinners() {\n      return this.$refs.spinner.adjustSpinners();\n    },\n    changeSelectionRange: function changeSelectionRange(step) {\n      var list = [0, 3].concat(this.showSeconds ? [6] : []);\n      var mapping = ['hours', 'minutes'].concat(this.showSeconds ? ['seconds'] : []);\n      var index = list.indexOf(this.selectionRange[0]);\n      var next = (index + step + list.length) % list.length;\n      this.$refs.spinner.emitSelectRange(mapping[next]);\n    }\n  },\n\n  mounted: function mounted() {\n    var _this3 = this;\n\n    this.$nextTick(function () {\n      return _this3.handleConfirm(true, true);\n    });\n    this.$emit('mounted');\n  }\n});\n// CONCATENATED MODULE: ./packages/date-picker/src/panel/time.vue?vue&type=script&lang=js&\n /* harmony default export */ var panel_timevue_type_script_lang_js_ = (timevue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/date-picker/src/panel/time.vue\n\n\n\n\n\n/* normalize component */\n\nvar time_component = normalizeComponent(\n  panel_timevue_type_script_lang_js_,\n  timevue_type_template_id_3d939089_render,\n  timevue_type_template_id_3d939089_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var time_api; }\ntime_component.options.__file = \"packages/date-picker/src/panel/time.vue\"\n/* harmony default export */ var panel_time = (time_component.exports);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/date-picker/src/basic/year-table.vue?vue&type=template&id=c86ab5e0&\nvar year_tablevue_type_template_id_c86ab5e0_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"table\",\n    { staticClass: \"el-year-table\", on: { click: _vm.handleYearTableClick } },\n    [\n      _c(\"tbody\", [\n        _c(\"tr\", [\n          _c(\n            \"td\",\n            {\n              staticClass: \"available\",\n              class: _vm.getCellStyle(_vm.startYear + 0)\n            },\n            [_c(\"a\", { staticClass: \"cell\" }, [_vm._v(_vm._s(_vm.startYear))])]\n          ),\n          _c(\n            \"td\",\n            {\n              staticClass: \"available\",\n              class: _vm.getCellStyle(_vm.startYear + 1)\n            },\n            [\n              _c(\"a\", { staticClass: \"cell\" }, [\n                _vm._v(_vm._s(_vm.startYear + 1))\n              ])\n            ]\n          ),\n          _c(\n            \"td\",\n            {\n              staticClass: \"available\",\n              class: _vm.getCellStyle(_vm.startYear + 2)\n            },\n            [\n              _c(\"a\", { staticClass: \"cell\" }, [\n                _vm._v(_vm._s(_vm.startYear + 2))\n              ])\n            ]\n          ),\n          _c(\n            \"td\",\n            {\n              staticClass: \"available\",\n              class: _vm.getCellStyle(_vm.startYear + 3)\n            },\n            [\n              _c(\"a\", { staticClass: \"cell\" }, [\n                _vm._v(_vm._s(_vm.startYear + 3))\n              ])\n            ]\n          )\n        ]),\n        _c(\"tr\", [\n          _c(\n            \"td\",\n            {\n              staticClass: \"available\",\n              class: _vm.getCellStyle(_vm.startYear + 4)\n            },\n            [\n              _c(\"a\", { staticClass: \"cell\" }, [\n                _vm._v(_vm._s(_vm.startYear + 4))\n              ])\n            ]\n          ),\n          _c(\n            \"td\",\n            {\n              staticClass: \"available\",\n              class: _vm.getCellStyle(_vm.startYear + 5)\n            },\n            [\n              _c(\"a\", { staticClass: \"cell\" }, [\n                _vm._v(_vm._s(_vm.startYear + 5))\n              ])\n            ]\n          ),\n          _c(\n            \"td\",\n            {\n              staticClass: \"available\",\n              class: _vm.getCellStyle(_vm.startYear + 6)\n            },\n            [\n              _c(\"a\", { staticClass: \"cell\" }, [\n                _vm._v(_vm._s(_vm.startYear + 6))\n              ])\n            ]\n          ),\n          _c(\n            \"td\",\n            {\n              staticClass: \"available\",\n              class: _vm.getCellStyle(_vm.startYear + 7)\n            },\n            [\n              _c(\"a\", { staticClass: \"cell\" }, [\n                _vm._v(_vm._s(_vm.startYear + 7))\n              ])\n            ]\n          )\n        ]),\n        _c(\"tr\", [\n          _c(\n            \"td\",\n            {\n              staticClass: \"available\",\n              class: _vm.getCellStyle(_vm.startYear + 8)\n            },\n            [\n              _c(\"a\", { staticClass: \"cell\" }, [\n                _vm._v(_vm._s(_vm.startYear + 8))\n              ])\n            ]\n          ),\n          _c(\n            \"td\",\n            {\n              staticClass: \"available\",\n              class: _vm.getCellStyle(_vm.startYear + 9)\n            },\n            [\n              _c(\"a\", { staticClass: \"cell\" }, [\n                _vm._v(_vm._s(_vm.startYear + 9))\n              ])\n            ]\n          ),\n          _c(\"td\"),\n          _c(\"td\")\n        ])\n      ])\n    ]\n  )\n}\nvar year_tablevue_type_template_id_c86ab5e0_staticRenderFns = []\nyear_tablevue_type_template_id_c86ab5e0_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/date-picker/src/basic/year-table.vue?vue&type=template&id=c86ab5e0&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/date-picker/src/basic/year-table.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\nvar year_tablevue_type_script_lang_js_datesInYear = function datesInYear(year) {\n  var numOfDays = Object(date_util_[\"getDayCountOfYear\"])(year);\n  var firstDay = new Date(year, 0, 1);\n  return Object(date_util_[\"range\"])(numOfDays).map(function (n) {\n    return Object(date_util_[\"nextDate\"])(firstDay, n);\n  });\n};\n\n/* harmony default export */ var year_tablevue_type_script_lang_js_ = ({\n  props: {\n    disabledDate: {},\n    value: {},\n    defaultValue: {\n      validator: function validator(val) {\n        // null or valid Date Object\n        return val === null || val instanceof Date && Object(date_util_[\"isDate\"])(val);\n      }\n    },\n    date: {},\n    selectionMode: {}\n  },\n\n  computed: {\n    startYear: function startYear() {\n      return Math.floor(this.date.getFullYear() / 10) * 10;\n    }\n  },\n\n  methods: {\n    getCellStyle: function getCellStyle(year) {\n      var style = {};\n      var today = new Date();\n\n      style.disabled = typeof this.disabledDate === 'function' ? year_tablevue_type_script_lang_js_datesInYear(year).every(this.disabledDate) : false;\n      style.current = Object(util_[\"arrayFindIndex\"])(Object(util_[\"coerceTruthyValueToArray\"])(this.value), function (date) {\n        return date.getFullYear() === year;\n      }) >= 0;\n      style.today = today.getFullYear() === year;\n      style.default = this.defaultValue && this.defaultValue.getFullYear() === year;\n\n      return style;\n    },\n    handleYearTableClick: function handleYearTableClick(event) {\n      var target = event.target;\n      if (target.tagName === 'A') {\n        if (Object(dom_[\"hasClass\"])(target.parentNode, 'disabled')) return;\n        var year = target.textContent || target.innerText;\n        if (this.selectionMode === 'years') {\n          var value = this.value || [];\n          var idx = Object(util_[\"arrayFindIndex\"])(value, function (date) {\n            return date.getFullYear() === Number(year);\n          });\n          var newValue = idx > -1 ? [].concat(value.slice(0, idx), value.slice(idx + 1)) : [].concat(value, [new Date(year)]);\n          this.$emit('pick', newValue);\n        } else {\n          this.$emit('pick', Number(year));\n        }\n      }\n    }\n  }\n});\n// CONCATENATED MODULE: ./packages/date-picker/src/basic/year-table.vue?vue&type=script&lang=js&\n /* harmony default export */ var basic_year_tablevue_type_script_lang_js_ = (year_tablevue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/date-picker/src/basic/year-table.vue\n\n\n\n\n\n/* normalize component */\n\nvar year_table_component = normalizeComponent(\n  basic_year_tablevue_type_script_lang_js_,\n  year_tablevue_type_template_id_c86ab5e0_render,\n  year_tablevue_type_template_id_c86ab5e0_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var year_table_api; }\nyear_table_component.options.__file = \"packages/date-picker/src/basic/year-table.vue\"\n/* harmony default export */ var year_table = (year_table_component.exports);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/date-picker/src/basic/month-table.vue?vue&type=template&id=654d4f42&\nvar month_tablevue_type_template_id_654d4f42_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"table\",\n    {\n      staticClass: \"el-month-table\",\n      on: { click: _vm.handleMonthTableClick, mousemove: _vm.handleMouseMove }\n    },\n    [\n      _c(\n        \"tbody\",\n        _vm._l(_vm.rows, function(row, key) {\n          return _c(\n            \"tr\",\n            { key: key },\n            _vm._l(row, function(cell, key) {\n              return _c(\"td\", { key: key, class: _vm.getCellStyle(cell) }, [\n                _c(\"div\", [\n                  _c(\"a\", { staticClass: \"cell\" }, [\n                    _vm._v(\n                      _vm._s(\n                        _vm.t(\"el.datepicker.months.\" + _vm.months[cell.text])\n                      )\n                    )\n                  ])\n                ])\n              ])\n            }),\n            0\n          )\n        }),\n        0\n      )\n    ]\n  )\n}\nvar month_tablevue_type_template_id_654d4f42_staticRenderFns = []\nmonth_tablevue_type_template_id_654d4f42_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/date-picker/src/basic/month-table.vue?vue&type=template&id=654d4f42&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/date-picker/src/basic/month-table.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\nvar month_tablevue_type_script_lang_js_datesInMonth = function datesInMonth(year, month) {\n  var numOfDays = Object(date_util_[\"getDayCountOfMonth\"])(year, month);\n  var firstDay = new Date(year, month, 1);\n  return Object(date_util_[\"range\"])(numOfDays).map(function (n) {\n    return Object(date_util_[\"nextDate\"])(firstDay, n);\n  });\n};\n\nvar clearDate = function clearDate(date) {\n  return new Date(date.getFullYear(), date.getMonth());\n};\n\nvar getMonthTimestamp = function getMonthTimestamp(time) {\n  if (typeof time === 'number' || typeof time === 'string') {\n    return clearDate(new Date(time)).getTime();\n  } else if (time instanceof Date) {\n    return clearDate(time).getTime();\n  } else {\n    return NaN;\n  }\n};\n\n// remove the first element that satisfies `pred` from arr\n// return a new array if modification occurs\n// return the original array otherwise\nvar month_tablevue_type_script_lang_js_removeFromArray = function removeFromArray(arr, pred) {\n  var idx = typeof pred === 'function' ? Object(util_[\"arrayFindIndex\"])(arr, pred) : arr.indexOf(pred);\n  return idx >= 0 ? [].concat(arr.slice(0, idx), arr.slice(idx + 1)) : arr;\n};\n/* harmony default export */ var month_tablevue_type_script_lang_js_ = ({\n  props: {\n    disabledDate: {},\n    value: {},\n    selectionMode: {\n      default: 'month'\n    },\n    minDate: {},\n\n    maxDate: {},\n    defaultValue: {\n      validator: function validator(val) {\n        // null or valid Date Object\n        return val === null || Object(date_util_[\"isDate\"])(val) || Array.isArray(val) && val.every(date_util_[\"isDate\"]);\n      }\n    },\n    date: {},\n    rangeState: {\n      default: function _default() {\n        return {\n          endDate: null,\n          selecting: false\n        };\n      }\n    }\n  },\n\n  mixins: [locale_default.a],\n\n  watch: {\n    'rangeState.endDate': function rangeStateEndDate(newVal) {\n      this.markRange(this.minDate, newVal);\n    },\n    minDate: function minDate(newVal, oldVal) {\n      if (getMonthTimestamp(newVal) !== getMonthTimestamp(oldVal)) {\n        this.markRange(this.minDate, this.maxDate);\n      }\n    },\n    maxDate: function maxDate(newVal, oldVal) {\n      if (getMonthTimestamp(newVal) !== getMonthTimestamp(oldVal)) {\n        this.markRange(this.minDate, this.maxDate);\n      }\n    }\n  },\n\n  data: function data() {\n    return {\n      months: ['jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep', 'oct', 'nov', 'dec'],\n      tableRows: [[], [], []],\n      lastRow: null,\n      lastColumn: null\n    };\n  },\n\n\n  methods: {\n    cellMatchesDate: function cellMatchesDate(cell, date) {\n      var value = new Date(date);\n      return this.date.getFullYear() === value.getFullYear() && Number(cell.text) === value.getMonth();\n    },\n    getCellStyle: function getCellStyle(cell) {\n      var _this = this;\n\n      var style = {};\n      var year = this.date.getFullYear();\n      var today = new Date();\n      var month = cell.text;\n      var defaultValue = this.defaultValue ? Array.isArray(this.defaultValue) ? this.defaultValue : [this.defaultValue] : [];\n      style.disabled = typeof this.disabledDate === 'function' ? month_tablevue_type_script_lang_js_datesInMonth(year, month).every(this.disabledDate) : false;\n      style.current = Object(util_[\"arrayFindIndex\"])(Object(util_[\"coerceTruthyValueToArray\"])(this.value), function (date) {\n        return date.getFullYear() === year && date.getMonth() === month;\n      }) >= 0;\n      style.today = today.getFullYear() === year && today.getMonth() === month;\n      style.default = defaultValue.some(function (date) {\n        return _this.cellMatchesDate(cell, date);\n      });\n\n      if (cell.inRange) {\n        style['in-range'] = true;\n\n        if (cell.start) {\n          style['start-date'] = true;\n        }\n\n        if (cell.end) {\n          style['end-date'] = true;\n        }\n      }\n      return style;\n    },\n    getMonthOfCell: function getMonthOfCell(month) {\n      var year = this.date.getFullYear();\n      return new Date(year, month, 1);\n    },\n    markRange: function markRange(minDate, maxDate) {\n      minDate = getMonthTimestamp(minDate);\n      maxDate = getMonthTimestamp(maxDate) || minDate;\n      var _ref = [Math.min(minDate, maxDate), Math.max(minDate, maxDate)];\n      minDate = _ref[0];\n      maxDate = _ref[1];\n\n      var rows = this.rows;\n      for (var i = 0, k = rows.length; i < k; i++) {\n        var row = rows[i];\n        for (var j = 0, l = row.length; j < l; j++) {\n\n          var cell = row[j];\n          var index = i * 4 + j;\n          var time = new Date(this.date.getFullYear(), index).getTime();\n\n          cell.inRange = minDate && time >= minDate && time <= maxDate;\n          cell.start = minDate && time === minDate;\n          cell.end = maxDate && time === maxDate;\n        }\n      }\n    },\n    handleMouseMove: function handleMouseMove(event) {\n      if (!this.rangeState.selecting) return;\n\n      var target = event.target;\n      if (target.tagName === 'A') {\n        target = target.parentNode.parentNode;\n      }\n      if (target.tagName === 'DIV') {\n        target = target.parentNode;\n      }\n      if (target.tagName !== 'TD') return;\n\n      var row = target.parentNode.rowIndex;\n      var column = target.cellIndex;\n      // can not select disabled date\n      if (this.rows[row][column].disabled) return;\n\n      // only update rangeState when mouse moves to a new cell\n      // this avoids frequent Date object creation and improves performance\n      if (row !== this.lastRow || column !== this.lastColumn) {\n        this.lastRow = row;\n        this.lastColumn = column;\n        this.$emit('changerange', {\n          minDate: this.minDate,\n          maxDate: this.maxDate,\n          rangeState: {\n            selecting: true,\n            endDate: this.getMonthOfCell(row * 4 + column)\n          }\n        });\n      }\n    },\n    handleMonthTableClick: function handleMonthTableClick(event) {\n      var target = event.target;\n      if (target.tagName === 'A') {\n        target = target.parentNode.parentNode;\n      }\n      if (target.tagName === 'DIV') {\n        target = target.parentNode;\n      }\n      if (target.tagName !== 'TD') return;\n      if (Object(dom_[\"hasClass\"])(target, 'disabled')) return;\n      var column = target.cellIndex;\n      var row = target.parentNode.rowIndex;\n      var month = row * 4 + column;\n      var newDate = this.getMonthOfCell(month);\n      if (this.selectionMode === 'range') {\n        if (!this.rangeState.selecting) {\n          this.$emit('pick', { minDate: newDate, maxDate: null });\n          this.rangeState.selecting = true;\n        } else {\n          if (newDate >= this.minDate) {\n            this.$emit('pick', { minDate: this.minDate, maxDate: newDate });\n          } else {\n            this.$emit('pick', { minDate: newDate, maxDate: this.minDate });\n          }\n          this.rangeState.selecting = false;\n        }\n      } else if (this.selectionMode === 'months') {\n        var value = this.value || [];\n        var year = this.date.getFullYear();\n        var newValue = Object(util_[\"arrayFindIndex\"])(value, function (date) {\n          return date.getFullYear() === year && date.getMonth() === month;\n        }) >= 0 ? month_tablevue_type_script_lang_js_removeFromArray(value, function (date) {\n          return date.getTime() === newDate.getTime();\n        }) : [].concat(value, [newDate]);\n        this.$emit('pick', newValue);\n      } else {\n        this.$emit('pick', month);\n      }\n    }\n  },\n\n  computed: {\n    rows: function rows() {\n      var _this2 = this;\n\n      // TODO: refactory rows / getCellClasses\n      var rows = this.tableRows;\n      var disabledDate = this.disabledDate;\n      var selectedDate = [];\n      var now = getMonthTimestamp(new Date());\n\n      for (var i = 0; i < 3; i++) {\n        var row = rows[i];\n\n        var _loop = function _loop(j) {\n          var cell = row[j];\n          if (!cell) {\n            cell = { row: i, column: j, type: 'normal', inRange: false, start: false, end: false };\n          }\n\n          cell.type = 'normal';\n\n          var index = i * 4 + j;\n          var time = new Date(_this2.date.getFullYear(), index).getTime();\n          cell.inRange = time >= getMonthTimestamp(_this2.minDate) && time <= getMonthTimestamp(_this2.maxDate);\n          cell.start = _this2.minDate && time === getMonthTimestamp(_this2.minDate);\n          cell.end = _this2.maxDate && time === getMonthTimestamp(_this2.maxDate);\n          var isToday = time === now;\n\n          if (isToday) {\n            cell.type = 'today';\n          }\n          cell.text = index;\n          var cellDate = new Date(time);\n          cell.disabled = typeof disabledDate === 'function' && disabledDate(cellDate);\n          cell.selected = Object(util_[\"arrayFind\"])(selectedDate, function (date) {\n            return date.getTime() === cellDate.getTime();\n          });\n\n          _this2.$set(row, j, cell);\n        };\n\n        for (var j = 0; j < 4; j++) {\n          _loop(j);\n        }\n      }\n      return rows;\n    }\n  }\n});\n// CONCATENATED MODULE: ./packages/date-picker/src/basic/month-table.vue?vue&type=script&lang=js&\n /* harmony default export */ var basic_month_tablevue_type_script_lang_js_ = (month_tablevue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/date-picker/src/basic/month-table.vue\n\n\n\n\n\n/* normalize component */\n\nvar month_table_component = normalizeComponent(\n  basic_month_tablevue_type_script_lang_js_,\n  month_tablevue_type_template_id_654d4f42_render,\n  month_tablevue_type_template_id_654d4f42_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var month_table_api; }\nmonth_table_component.options.__file = \"packages/date-picker/src/basic/month-table.vue\"\n/* harmony default export */ var month_table = (month_table_component.exports);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/date-picker/src/basic/date-table.vue?vue&type=template&id=5d1f3341&\nvar date_tablevue_type_template_id_5d1f3341_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"table\",\n    {\n      staticClass: \"el-date-table\",\n      class: { \"is-week-mode\": _vm.selectionMode === \"week\" },\n      attrs: { cellspacing: \"0\", cellpadding: \"0\" },\n      on: { click: _vm.handleClick, mousemove: _vm.handleMouseMove }\n    },\n    [\n      _c(\n        \"tbody\",\n        [\n          _c(\n            \"tr\",\n            [\n              _vm.showWeekNumber\n                ? _c(\"th\", [_vm._v(_vm._s(_vm.t(\"el.datepicker.week\")))])\n                : _vm._e(),\n              _vm._l(_vm.WEEKS, function(week, key) {\n                return _c(\"th\", { key: key }, [\n                  _vm._v(_vm._s(_vm.t(\"el.datepicker.weeks.\" + week)))\n                ])\n              })\n            ],\n            2\n          ),\n          _vm._l(_vm.rows, function(row, key) {\n            return _c(\n              \"tr\",\n              {\n                key: key,\n                staticClass: \"el-date-table__row\",\n                class: { current: _vm.isWeekActive(row[1]) }\n              },\n              _vm._l(row, function(cell, key) {\n                return _c(\"td\", { key: key, class: _vm.getCellClasses(cell) }, [\n                  _c(\"div\", [\n                    _c(\"span\", [\n                      _vm._v(\"\\n          \" + _vm._s(cell.text) + \"\\n        \")\n                    ])\n                  ])\n                ])\n              }),\n              0\n            )\n          })\n        ],\n        2\n      )\n    ]\n  )\n}\nvar date_tablevue_type_template_id_5d1f3341_staticRenderFns = []\ndate_tablevue_type_template_id_5d1f3341_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/date-picker/src/basic/date-table.vue?vue&type=template&id=5d1f3341&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/date-picker/src/basic/date-table.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\nvar _WEEKS = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'];\nvar date_tablevue_type_script_lang_js_getDateTimestamp = function getDateTimestamp(time) {\n  if (typeof time === 'number' || typeof time === 'string') {\n    return Object(date_util_[\"clearTime\"])(new Date(time)).getTime();\n  } else if (time instanceof Date) {\n    return Object(date_util_[\"clearTime\"])(time).getTime();\n  } else {\n    return NaN;\n  }\n};\n\n// remove the first element that satisfies `pred` from arr\n// return a new array if modification occurs\n// return the original array otherwise\nvar date_tablevue_type_script_lang_js_removeFromArray = function removeFromArray(arr, pred) {\n  var idx = typeof pred === 'function' ? Object(util_[\"arrayFindIndex\"])(arr, pred) : arr.indexOf(pred);\n  return idx >= 0 ? [].concat(arr.slice(0, idx), arr.slice(idx + 1)) : arr;\n};\n\n/* harmony default export */ var date_tablevue_type_script_lang_js_ = ({\n  mixins: [locale_default.a],\n\n  props: {\n    firstDayOfWeek: {\n      default: 7,\n      type: Number,\n      validator: function validator(val) {\n        return val >= 1 && val <= 7;\n      }\n    },\n\n    value: {},\n\n    defaultValue: {\n      validator: function validator(val) {\n        // either: null, valid Date object, Array of valid Date objects\n        return val === null || Object(date_util_[\"isDate\"])(val) || Array.isArray(val) && val.every(date_util_[\"isDate\"]);\n      }\n    },\n\n    date: {},\n\n    selectionMode: {\n      default: 'day'\n    },\n\n    showWeekNumber: {\n      type: Boolean,\n      default: false\n    },\n\n    disabledDate: {},\n\n    cellClassName: {},\n\n    minDate: {},\n\n    maxDate: {},\n\n    rangeState: {\n      default: function _default() {\n        return {\n          endDate: null,\n          selecting: false\n        };\n      }\n    }\n  },\n\n  computed: {\n    offsetDay: function offsetDay() {\n      var week = this.firstDayOfWeek;\n      // 周日为界限,左右偏移的天数,3217654 例如周一就是 -1,目的是调整前两行日期的位置\n      return week > 3 ? 7 - week : -week;\n    },\n    WEEKS: function WEEKS() {\n      var week = this.firstDayOfWeek;\n      return _WEEKS.concat(_WEEKS).slice(week, week + 7);\n    },\n    year: function year() {\n      return this.date.getFullYear();\n    },\n    month: function month() {\n      return this.date.getMonth();\n    },\n    startDate: function startDate() {\n      return Object(date_util_[\"getStartDateOfMonth\"])(this.year, this.month);\n    },\n    rows: function rows() {\n      var _this = this;\n\n      // TODO: refactory rows / getCellClasses\n      var date = new Date(this.year, this.month, 1);\n      var day = Object(date_util_[\"getFirstDayOfMonth\"])(date); // day of first day\n      var dateCountOfMonth = Object(date_util_[\"getDayCountOfMonth\"])(date.getFullYear(), date.getMonth());\n      var dateCountOfLastMonth = Object(date_util_[\"getDayCountOfMonth\"])(date.getFullYear(), date.getMonth() === 0 ? 11 : date.getMonth() - 1);\n\n      day = day === 0 ? 7 : day;\n\n      var offset = this.offsetDay;\n      var rows = this.tableRows;\n      var count = 1;\n\n      var startDate = this.startDate;\n      var disabledDate = this.disabledDate;\n      var cellClassName = this.cellClassName;\n      var selectedDate = this.selectionMode === 'dates' ? Object(util_[\"coerceTruthyValueToArray\"])(this.value) : [];\n      var now = date_tablevue_type_script_lang_js_getDateTimestamp(new Date());\n\n      for (var i = 0; i < 6; i++) {\n        var row = rows[i];\n\n        if (this.showWeekNumber) {\n          if (!row[0]) {\n            row[0] = { type: 'week', text: Object(date_util_[\"getWeekNumber\"])(Object(date_util_[\"nextDate\"])(startDate, i * 7 + 1)) };\n          }\n        }\n\n        var _loop = function _loop(j) {\n          var cell = row[_this.showWeekNumber ? j + 1 : j];\n          if (!cell) {\n            cell = { row: i, column: j, type: 'normal', inRange: false, start: false, end: false };\n          }\n\n          cell.type = 'normal';\n\n          var index = i * 7 + j;\n          var time = Object(date_util_[\"nextDate\"])(startDate, index - offset).getTime();\n          cell.inRange = time >= date_tablevue_type_script_lang_js_getDateTimestamp(_this.minDate) && time <= date_tablevue_type_script_lang_js_getDateTimestamp(_this.maxDate);\n          cell.start = _this.minDate && time === date_tablevue_type_script_lang_js_getDateTimestamp(_this.minDate);\n          cell.end = _this.maxDate && time === date_tablevue_type_script_lang_js_getDateTimestamp(_this.maxDate);\n          var isToday = time === now;\n\n          if (isToday) {\n            cell.type = 'today';\n          }\n\n          if (i >= 0 && i <= 1) {\n            var numberOfDaysFromPreviousMonth = day + offset < 0 ? 7 + day + offset : day + offset;\n\n            if (j + i * 7 >= numberOfDaysFromPreviousMonth) {\n              cell.text = count++;\n            } else {\n              cell.text = dateCountOfLastMonth - (numberOfDaysFromPreviousMonth - j % 7) + 1 + i * 7;\n              cell.type = 'prev-month';\n            }\n          } else {\n            if (count <= dateCountOfMonth) {\n              cell.text = count++;\n            } else {\n              cell.text = count++ - dateCountOfMonth;\n              cell.type = 'next-month';\n            }\n          }\n\n          var cellDate = new Date(time);\n          cell.disabled = typeof disabledDate === 'function' && disabledDate(cellDate);\n          cell.selected = Object(util_[\"arrayFind\"])(selectedDate, function (date) {\n            return date.getTime() === cellDate.getTime();\n          });\n          cell.customClass = typeof cellClassName === 'function' && cellClassName(cellDate);\n          _this.$set(row, _this.showWeekNumber ? j + 1 : j, cell);\n        };\n\n        for (var j = 0; j < 7; j++) {\n          _loop(j);\n        }\n\n        if (this.selectionMode === 'week') {\n          var start = this.showWeekNumber ? 1 : 0;\n          var end = this.showWeekNumber ? 7 : 6;\n          var isWeekActive = this.isWeekActive(row[start + 1]);\n\n          row[start].inRange = isWeekActive;\n          row[start].start = isWeekActive;\n          row[end].inRange = isWeekActive;\n          row[end].end = isWeekActive;\n        }\n      }\n\n      return rows;\n    }\n  },\n\n  watch: {\n    'rangeState.endDate': function rangeStateEndDate(newVal) {\n      this.markRange(this.minDate, newVal);\n    },\n    minDate: function minDate(newVal, oldVal) {\n      if (date_tablevue_type_script_lang_js_getDateTimestamp(newVal) !== date_tablevue_type_script_lang_js_getDateTimestamp(oldVal)) {\n        this.markRange(this.minDate, this.maxDate);\n      }\n    },\n    maxDate: function maxDate(newVal, oldVal) {\n      if (date_tablevue_type_script_lang_js_getDateTimestamp(newVal) !== date_tablevue_type_script_lang_js_getDateTimestamp(oldVal)) {\n        this.markRange(this.minDate, this.maxDate);\n      }\n    }\n  },\n\n  data: function data() {\n    return {\n      tableRows: [[], [], [], [], [], []],\n      lastRow: null,\n      lastColumn: null\n    };\n  },\n\n\n  methods: {\n    cellMatchesDate: function cellMatchesDate(cell, date) {\n      var value = new Date(date);\n      return this.year === value.getFullYear() && this.month === value.getMonth() && Number(cell.text) === value.getDate();\n    },\n    getCellClasses: function getCellClasses(cell) {\n      var _this2 = this;\n\n      var selectionMode = this.selectionMode;\n      var defaultValue = this.defaultValue ? Array.isArray(this.defaultValue) ? this.defaultValue : [this.defaultValue] : [];\n\n      var classes = [];\n      if ((cell.type === 'normal' || cell.type === 'today') && !cell.disabled) {\n        classes.push('available');\n        if (cell.type === 'today') {\n          classes.push('today');\n        }\n      } else {\n        classes.push(cell.type);\n      }\n\n      if (cell.type === 'normal' && defaultValue.some(function (date) {\n        return _this2.cellMatchesDate(cell, date);\n      })) {\n        classes.push('default');\n      }\n\n      if (selectionMode === 'day' && (cell.type === 'normal' || cell.type === 'today') && this.cellMatchesDate(cell, this.value)) {\n        classes.push('current');\n      }\n\n      if (cell.inRange && (cell.type === 'normal' || cell.type === 'today' || this.selectionMode === 'week')) {\n        classes.push('in-range');\n\n        if (cell.start) {\n          classes.push('start-date');\n        }\n\n        if (cell.end) {\n          classes.push('end-date');\n        }\n      }\n\n      if (cell.disabled) {\n        classes.push('disabled');\n      }\n\n      if (cell.selected) {\n        classes.push('selected');\n      }\n\n      if (cell.customClass) {\n        classes.push(cell.customClass);\n      }\n\n      return classes.join(' ');\n    },\n    getDateOfCell: function getDateOfCell(row, column) {\n      var offsetFromStart = row * 7 + (column - (this.showWeekNumber ? 1 : 0)) - this.offsetDay;\n      return Object(date_util_[\"nextDate\"])(this.startDate, offsetFromStart);\n    },\n    isWeekActive: function isWeekActive(cell) {\n      if (this.selectionMode !== 'week') return false;\n      var newDate = new Date(this.year, this.month, 1);\n      var year = newDate.getFullYear();\n      var month = newDate.getMonth();\n\n      if (cell.type === 'prev-month') {\n        newDate.setMonth(month === 0 ? 11 : month - 1);\n        newDate.setFullYear(month === 0 ? year - 1 : year);\n      }\n\n      if (cell.type === 'next-month') {\n        newDate.setMonth(month === 11 ? 0 : month + 1);\n        newDate.setFullYear(month === 11 ? year + 1 : year);\n      }\n\n      newDate.setDate(parseInt(cell.text, 10));\n\n      if (Object(date_util_[\"isDate\"])(this.value)) {\n        var dayOffset = (this.value.getDay() - this.firstDayOfWeek + 7) % 7 - 1;\n        var weekDate = Object(date_util_[\"prevDate\"])(this.value, dayOffset);\n        return weekDate.getTime() === newDate.getTime();\n      }\n      return false;\n    },\n    markRange: function markRange(minDate, maxDate) {\n      minDate = date_tablevue_type_script_lang_js_getDateTimestamp(minDate);\n      maxDate = date_tablevue_type_script_lang_js_getDateTimestamp(maxDate) || minDate;\n      var _ref = [Math.min(minDate, maxDate), Math.max(minDate, maxDate)];\n      minDate = _ref[0];\n      maxDate = _ref[1];\n\n\n      var startDate = this.startDate;\n      var rows = this.rows;\n      for (var i = 0, k = rows.length; i < k; i++) {\n        var row = rows[i];\n        for (var j = 0, l = row.length; j < l; j++) {\n          if (this.showWeekNumber && j === 0) continue;\n\n          var _cell = row[j];\n          var index = i * 7 + j + (this.showWeekNumber ? -1 : 0);\n          var time = Object(date_util_[\"nextDate\"])(startDate, index - this.offsetDay).getTime();\n\n          _cell.inRange = minDate && time >= minDate && time <= maxDate;\n          _cell.start = minDate && time === minDate;\n          _cell.end = maxDate && time === maxDate;\n        }\n      }\n    },\n    handleMouseMove: function handleMouseMove(event) {\n      if (!this.rangeState.selecting) return;\n\n      var target = event.target;\n      if (target.tagName === 'SPAN') {\n        target = target.parentNode.parentNode;\n      }\n      if (target.tagName === 'DIV') {\n        target = target.parentNode;\n      }\n      if (target.tagName !== 'TD') return;\n\n      var row = target.parentNode.rowIndex - 1;\n      var column = target.cellIndex;\n\n      // can not select disabled date\n      if (this.rows[row][column].disabled) return;\n\n      // only update rangeState when mouse moves to a new cell\n      // this avoids frequent Date object creation and improves performance\n      if (row !== this.lastRow || column !== this.lastColumn) {\n        this.lastRow = row;\n        this.lastColumn = column;\n        this.$emit('changerange', {\n          minDate: this.minDate,\n          maxDate: this.maxDate,\n          rangeState: {\n            selecting: true,\n            endDate: this.getDateOfCell(row, column)\n          }\n        });\n      }\n    },\n    handleClick: function handleClick(event) {\n      var target = event.target;\n      if (target.tagName === 'SPAN') {\n        target = target.parentNode.parentNode;\n      }\n      if (target.tagName === 'DIV') {\n        target = target.parentNode;\n      }\n\n      if (target.tagName !== 'TD') return;\n\n      var row = target.parentNode.rowIndex - 1;\n      var column = this.selectionMode === 'week' ? 1 : target.cellIndex;\n      var cell = this.rows[row][column];\n\n      if (cell.disabled || cell.type === 'week') return;\n\n      var newDate = this.getDateOfCell(row, column);\n\n      if (this.selectionMode === 'range') {\n        if (!this.rangeState.selecting) {\n          this.$emit('pick', { minDate: newDate, maxDate: null });\n          this.rangeState.selecting = true;\n        } else {\n          if (newDate >= this.minDate) {\n            this.$emit('pick', { minDate: this.minDate, maxDate: newDate });\n          } else {\n            this.$emit('pick', { minDate: newDate, maxDate: this.minDate });\n          }\n          this.rangeState.selecting = false;\n        }\n      } else if (this.selectionMode === 'day') {\n        this.$emit('pick', newDate);\n      } else if (this.selectionMode === 'week') {\n        var weekNumber = Object(date_util_[\"getWeekNumber\"])(newDate);\n        var value = newDate.getFullYear() + 'w' + weekNumber;\n        this.$emit('pick', {\n          year: newDate.getFullYear(),\n          week: weekNumber,\n          value: value,\n          date: newDate\n        });\n      } else if (this.selectionMode === 'dates') {\n        var _value = this.value || [];\n        var newValue = cell.selected ? date_tablevue_type_script_lang_js_removeFromArray(_value, function (date) {\n          return date.getTime() === newDate.getTime();\n        }) : [].concat(_value, [newDate]);\n        this.$emit('pick', newValue);\n      }\n    }\n  }\n});\n// CONCATENATED MODULE: ./packages/date-picker/src/basic/date-table.vue?vue&type=script&lang=js&\n /* harmony default export */ var basic_date_tablevue_type_script_lang_js_ = (date_tablevue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/date-picker/src/basic/date-table.vue\n\n\n\n\n\n/* normalize component */\n\nvar date_table_component = normalizeComponent(\n  basic_date_tablevue_type_script_lang_js_,\n  date_tablevue_type_template_id_5d1f3341_render,\n  date_tablevue_type_template_id_5d1f3341_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var date_table_api; }\ndate_table_component.options.__file = \"packages/date-picker/src/basic/date-table.vue\"\n/* harmony default export */ var date_table = (date_table_component.exports);\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/date-picker/src/panel/date.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n\n\n\n\n\n/* harmony default export */ var datevue_type_script_lang_js_ = ({\n  mixins: [locale_default.a],\n\n  directives: { Clickoutside: clickoutside_default.a },\n\n  watch: {\n    showTime: function showTime(val) {\n      var _this = this;\n\n      /* istanbul ignore if */\n      if (!val) return;\n      this.$nextTick(function (_) {\n        var inputElm = _this.$refs.input.$el;\n        if (inputElm) {\n          _this.pickerWidth = inputElm.getBoundingClientRect().width + 10;\n        }\n      });\n    },\n    value: function value(val) {\n      if (this.selectionMode === 'dates' && this.value) return;\n      if (this.selectionMode === 'months' && this.value) return;\n      if (this.selectionMode === 'years' && this.value) return;\n      if (Object(date_util_[\"isDate\"])(val)) {\n        this.date = new Date(val);\n      } else {\n        this.date = this.getDefaultValue();\n      }\n    },\n    defaultValue: function defaultValue(val) {\n      if (!Object(date_util_[\"isDate\"])(this.value)) {\n        this.date = val ? new Date(val) : new Date();\n      }\n    },\n    timePickerVisible: function timePickerVisible(val) {\n      var _this2 = this;\n\n      if (val) this.$nextTick(function () {\n        return _this2.$refs.timepicker.adjustSpinners();\n      });\n    },\n    selectionMode: function selectionMode(newVal) {\n      if (newVal === 'month') {\n        /* istanbul ignore next */\n        if (this.currentView !== 'year' || this.currentView !== 'month') {\n          this.currentView = 'month';\n        }\n      } else if (newVal === 'dates') {\n        this.currentView = 'date';\n      } else if (newVal === 'years') {\n        this.currentView = 'year';\n      } else if (newVal === 'months') {\n        this.currentView = 'month';\n      }\n    }\n  },\n\n  methods: {\n    proxyTimePickerDataProperties: function proxyTimePickerDataProperties() {\n      var _this3 = this;\n\n      var format = function format(timeFormat) {\n        _this3.$refs.timepicker.format = timeFormat;\n      };\n      var value = function value(_value) {\n        _this3.$refs.timepicker.value = _value;\n      };\n      var date = function date(_date) {\n        _this3.$refs.timepicker.date = _date;\n      };\n      var selectableRange = function selectableRange(_selectableRange) {\n        _this3.$refs.timepicker.selectableRange = _selectableRange;\n      };\n\n      this.$watch('value', value);\n      this.$watch('date', date);\n      this.$watch('selectableRange', selectableRange);\n\n      format(this.timeFormat);\n      value(this.value);\n      date(this.date);\n      selectableRange(this.selectableRange);\n    },\n    handleClear: function handleClear() {\n      this.date = this.getDefaultValue();\n      this.$emit('pick', null);\n    },\n    emit: function emit(value) {\n      var _this4 = this;\n\n      for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n        args[_key - 1] = arguments[_key];\n      }\n\n      if (!value) {\n        this.$emit.apply(this, ['pick', value].concat(args));\n      } else if (Array.isArray(value)) {\n        var dates = value.map(function (date) {\n          return _this4.showTime ? Object(date_util_[\"clearMilliseconds\"])(date) : Object(date_util_[\"clearTime\"])(date);\n        });\n        this.$emit.apply(this, ['pick', dates].concat(args));\n      } else {\n        this.$emit.apply(this, ['pick', this.showTime ? Object(date_util_[\"clearMilliseconds\"])(value) : Object(date_util_[\"clearTime\"])(value)].concat(args));\n      }\n      this.userInputDate = null;\n      this.userInputTime = null;\n    },\n\n\n    // resetDate() {\n    //   this.date = new Date(this.date);\n    // },\n\n    showMonthPicker: function showMonthPicker() {\n      this.currentView = 'month';\n    },\n    showYearPicker: function showYearPicker() {\n      this.currentView = 'year';\n    },\n\n\n    // XXX: 没用到\n    // handleLabelClick() {\n    //   if (this.currentView === 'date') {\n    //     this.showMonthPicker();\n    //   } else if (this.currentView === 'month') {\n    //     this.showYearPicker();\n    //   }\n    // },\n\n    prevMonth: function prevMonth() {\n      this.date = Object(date_util_[\"prevMonth\"])(this.date);\n    },\n    nextMonth: function nextMonth() {\n      this.date = Object(date_util_[\"nextMonth\"])(this.date);\n    },\n    prevYear: function prevYear() {\n      if (this.currentView === 'year') {\n        this.date = Object(date_util_[\"prevYear\"])(this.date, 10);\n      } else {\n        this.date = Object(date_util_[\"prevYear\"])(this.date);\n      }\n    },\n    nextYear: function nextYear() {\n      if (this.currentView === 'year') {\n        this.date = Object(date_util_[\"nextYear\"])(this.date, 10);\n      } else {\n        this.date = Object(date_util_[\"nextYear\"])(this.date);\n      }\n    },\n    handleShortcutClick: function handleShortcutClick(shortcut) {\n      if (shortcut.onClick) {\n        shortcut.onClick(this);\n      }\n    },\n    handleTimePick: function handleTimePick(value, visible, first) {\n      if (Object(date_util_[\"isDate\"])(value)) {\n        var newDate = this.value ? Object(date_util_[\"modifyTime\"])(this.value, value.getHours(), value.getMinutes(), value.getSeconds()) : Object(date_util_[\"modifyWithTimeString\"])(this.getDefaultValue(), this.defaultTime);\n        this.date = newDate;\n        this.emit(this.date, true);\n      } else {\n        this.emit(value, true);\n      }\n      if (!first) {\n        this.timePickerVisible = visible;\n      }\n    },\n    handleTimePickClose: function handleTimePickClose() {\n      this.timePickerVisible = false;\n    },\n    handleMonthPick: function handleMonthPick(month) {\n      if (this.selectionMode === 'month') {\n        this.date = Object(date_util_[\"modifyDate\"])(this.date, this.year, month, 1);\n        this.emit(this.date);\n      } else if (this.selectionMode === 'months') {\n        this.emit(month, true);\n      } else {\n        this.date = Object(date_util_[\"changeYearMonthAndClampDate\"])(this.date, this.year, month);\n        // TODO: should emit intermediate value ??\n        // this.emit(this.date);\n        this.currentView = 'date';\n      }\n    },\n    handleDatePick: function handleDatePick(value) {\n      if (this.selectionMode === 'day') {\n        var newDate = this.value ? Object(date_util_[\"modifyDate\"])(this.value, value.getFullYear(), value.getMonth(), value.getDate()) : Object(date_util_[\"modifyWithTimeString\"])(value, this.defaultTime);\n        // change default time while out of selectableRange\n        if (!this.checkDateWithinRange(newDate)) {\n          newDate = Object(date_util_[\"modifyDate\"])(this.selectableRange[0][0], value.getFullYear(), value.getMonth(), value.getDate());\n        }\n        this.date = newDate;\n        this.emit(this.date, this.showTime);\n      } else if (this.selectionMode === 'week') {\n        this.emit(value.date);\n      } else if (this.selectionMode === 'dates') {\n        this.emit(value, true); // set false to keep panel open\n      }\n    },\n    handleYearPick: function handleYearPick(year) {\n      if (this.selectionMode === 'year') {\n        this.date = Object(date_util_[\"modifyDate\"])(this.date, year, 0, 1);\n        this.emit(this.date);\n      } else if (this.selectionMode === 'years') {\n        this.emit(year, true);\n      } else {\n        this.date = Object(date_util_[\"changeYearMonthAndClampDate\"])(this.date, year, this.month);\n        // TODO: should emit intermediate value ??\n        // this.emit(this.date, true);\n        this.currentView = 'month';\n      }\n    },\n    changeToNow: function changeToNow() {\n      // NOTE: not a permanent solution\n      //       consider disable \"now\" button in the future\n      if ((!this.disabledDate || !this.disabledDate(new Date())) && this.checkDateWithinRange(new Date())) {\n        this.date = new Date();\n        this.emit(this.date);\n      }\n    },\n    confirm: function confirm() {\n      if (this.selectionMode === 'dates' || this.selectionMode === 'months' || this.selectionMode === 'years') {\n        this.emit(this.value);\n      } else {\n        // value were emitted in handle{Date,Time}Pick, nothing to update here\n        // deal with the scenario where: user opens the picker, then confirm without doing anything\n        var value = this.value ? this.value : Object(date_util_[\"modifyWithTimeString\"])(this.getDefaultValue(), this.defaultTime);\n        this.date = new Date(value); // refresh date\n        this.emit(value);\n      }\n    },\n    resetView: function resetView() {\n      if (this.selectionMode === 'month' || this.selectionMode === 'months') {\n        this.currentView = 'month';\n      } else if (this.selectionMode === 'year' || this.selectionMode === 'years') {\n        this.currentView = 'year';\n      } else {\n        this.currentView = 'date';\n      }\n    },\n    handleEnter: function handleEnter() {\n      document.body.addEventListener('keydown', this.handleKeydown);\n    },\n    handleLeave: function handleLeave() {\n      this.$emit('dodestroy');\n      document.body.removeEventListener('keydown', this.handleKeydown);\n    },\n    handleKeydown: function handleKeydown(event) {\n      var keyCode = event.keyCode;\n      var list = [38, 40, 37, 39];\n      if (this.visible && !this.timePickerVisible) {\n        if (list.indexOf(keyCode) !== -1) {\n          this.handleKeyControl(keyCode);\n          event.stopPropagation();\n          event.preventDefault();\n        }\n        if (keyCode === 13 && this.userInputDate === null && this.userInputTime === null) {\n          // Enter\n          this.emit(this.date, false);\n        }\n      }\n    },\n    handleKeyControl: function handleKeyControl(keyCode) {\n      var mapping = {\n        'year': {\n          38: -4, 40: 4, 37: -1, 39: 1, offset: function offset(date, step) {\n            return date.setFullYear(date.getFullYear() + step);\n          }\n        },\n        'month': {\n          38: -4, 40: 4, 37: -1, 39: 1, offset: function offset(date, step) {\n            return date.setMonth(date.getMonth() + step);\n          }\n        },\n        'week': {\n          38: -1, 40: 1, 37: -1, 39: 1, offset: function offset(date, step) {\n            return date.setDate(date.getDate() + step * 7);\n          }\n        },\n        'day': {\n          38: -7, 40: 7, 37: -1, 39: 1, offset: function offset(date, step) {\n            return date.setDate(date.getDate() + step);\n          }\n        }\n      };\n      var mode = this.selectionMode;\n      var year = 3.1536e10;\n      var now = this.date.getTime();\n      var newDate = new Date(this.date.getTime());\n      while (Math.abs(now - newDate.getTime()) <= year) {\n        var map = mapping[mode];\n        map.offset(newDate, map[keyCode]);\n        if (typeof this.disabledDate === 'function' && this.disabledDate(newDate)) {\n          continue;\n        }\n        this.date = newDate;\n        this.$emit('pick', newDate, true);\n        break;\n      }\n    },\n    handleVisibleTimeChange: function handleVisibleTimeChange(value) {\n      var time = Object(date_util_[\"parseDate\"])(value, this.timeFormat);\n      if (time && this.checkDateWithinRange(time)) {\n        this.date = Object(date_util_[\"modifyDate\"])(time, this.year, this.month, this.monthDate);\n        this.userInputTime = null;\n        this.$refs.timepicker.value = this.date;\n        this.timePickerVisible = false;\n        this.emit(this.date, true);\n      }\n    },\n    handleVisibleDateChange: function handleVisibleDateChange(value) {\n      var date = Object(date_util_[\"parseDate\"])(value, this.dateFormat);\n      if (date) {\n        if (typeof this.disabledDate === 'function' && this.disabledDate(date)) {\n          return;\n        }\n        this.date = Object(date_util_[\"modifyTime\"])(date, this.date.getHours(), this.date.getMinutes(), this.date.getSeconds());\n        this.userInputDate = null;\n        this.resetView();\n        this.emit(this.date, true);\n      }\n    },\n    isValidValue: function isValidValue(value) {\n      return value && !isNaN(value) && (typeof this.disabledDate === 'function' ? !this.disabledDate(value) : true) && this.checkDateWithinRange(value);\n    },\n    getDefaultValue: function getDefaultValue() {\n      // if default-value is set, return it\n      // otherwise, return now (the moment this method gets called)\n      return this.defaultValue ? new Date(this.defaultValue) : new Date();\n    },\n    checkDateWithinRange: function checkDateWithinRange(date) {\n      return this.selectableRange.length > 0 ? Object(date_util_[\"timeWithinRange\"])(date, this.selectableRange, this.format || 'HH:mm:ss') : true;\n    }\n  },\n\n  components: {\n    TimePicker: panel_time, YearTable: year_table, MonthTable: month_table, DateTable: date_table, ElInput: input_default.a, ElButton: button_default.a\n  },\n\n  data: function data() {\n    return {\n      popperClass: '',\n      date: new Date(),\n      value: '',\n      defaultValue: null, // use getDefaultValue() for time computation\n      defaultTime: null,\n      showTime: false,\n      selectionMode: 'day',\n      shortcuts: '',\n      visible: false,\n      currentView: 'date',\n      disabledDate: '',\n      cellClassName: '',\n      selectableRange: [],\n      firstDayOfWeek: 7,\n      showWeekNumber: false,\n      timePickerVisible: false,\n      format: '',\n      arrowControl: false,\n      userInputDate: null,\n      userInputTime: null\n    };\n  },\n\n\n  computed: {\n    year: function year() {\n      return this.date.getFullYear();\n    },\n    month: function month() {\n      return this.date.getMonth();\n    },\n    week: function week() {\n      return Object(date_util_[\"getWeekNumber\"])(this.date);\n    },\n    monthDate: function monthDate() {\n      return this.date.getDate();\n    },\n    footerVisible: function footerVisible() {\n      return this.showTime || this.selectionMode === 'dates' || this.selectionMode === 'months' || this.selectionMode === 'years';\n    },\n    visibleTime: function visibleTime() {\n      if (this.userInputTime !== null) {\n        return this.userInputTime;\n      } else {\n        return Object(date_util_[\"formatDate\"])(this.value || this.defaultValue, this.timeFormat);\n      }\n    },\n    visibleDate: function visibleDate() {\n      if (this.userInputDate !== null) {\n        return this.userInputDate;\n      } else {\n        return Object(date_util_[\"formatDate\"])(this.value || this.defaultValue, this.dateFormat);\n      }\n    },\n    yearLabel: function yearLabel() {\n      var yearTranslation = this.t('el.datepicker.year');\n      if (this.currentView === 'year') {\n        var startYear = Math.floor(this.year / 10) * 10;\n        if (yearTranslation) {\n          return startYear + ' ' + yearTranslation + ' - ' + (startYear + 9) + ' ' + yearTranslation;\n        }\n        return startYear + ' - ' + (startYear + 9);\n      }\n      return this.year + ' ' + yearTranslation;\n    },\n    timeFormat: function timeFormat() {\n      if (this.format) {\n        return Object(date_util_[\"extractTimeFormat\"])(this.format);\n      } else {\n        return 'HH:mm:ss';\n      }\n    },\n    dateFormat: function dateFormat() {\n      if (this.format) {\n        return Object(date_util_[\"extractDateFormat\"])(this.format);\n      } else {\n        return 'yyyy-MM-dd';\n      }\n    }\n  }\n});\n// CONCATENATED MODULE: ./packages/date-picker/src/panel/date.vue?vue&type=script&lang=js&\n /* harmony default export */ var panel_datevue_type_script_lang_js_ = (datevue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/date-picker/src/panel/date.vue\n\n\n\n\n\n/* normalize component */\n\nvar date_component = normalizeComponent(\n  panel_datevue_type_script_lang_js_,\n  datevue_type_template_id_2440d4ea_render,\n  datevue_type_template_id_2440d4ea_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var date_api; }\ndate_component.options.__file = \"packages/date-picker/src/panel/date.vue\"\n/* harmony default export */ var panel_date = (date_component.exports);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/date-picker/src/panel/date-range.vue?vue&type=template&id=2652849a&\nvar date_rangevue_type_template_id_2652849a_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"transition\",\n    {\n      attrs: { name: \"el-zoom-in-top\" },\n      on: {\n        \"after-leave\": function($event) {\n          _vm.$emit(\"dodestroy\")\n        }\n      }\n    },\n    [\n      _c(\n        \"div\",\n        {\n          directives: [\n            {\n              name: \"show\",\n              rawName: \"v-show\",\n              value: _vm.visible,\n              expression: \"visible\"\n            }\n          ],\n          staticClass: \"el-picker-panel el-date-range-picker el-popper\",\n          class: [\n            {\n              \"has-sidebar\": _vm.$slots.sidebar || _vm.shortcuts,\n              \"has-time\": _vm.showTime\n            },\n            _vm.popperClass\n          ]\n        },\n        [\n          _c(\n            \"div\",\n            { staticClass: \"el-picker-panel__body-wrapper\" },\n            [\n              _vm._t(\"sidebar\"),\n              _vm.shortcuts\n                ? _c(\n                    \"div\",\n                    { staticClass: \"el-picker-panel__sidebar\" },\n                    _vm._l(_vm.shortcuts, function(shortcut, key) {\n                      return _c(\n                        \"button\",\n                        {\n                          key: key,\n                          staticClass: \"el-picker-panel__shortcut\",\n                          attrs: { type: \"button\" },\n                          on: {\n                            click: function($event) {\n                              _vm.handleShortcutClick(shortcut)\n                            }\n                          }\n                        },\n                        [_vm._v(_vm._s(shortcut.text))]\n                      )\n                    }),\n                    0\n                  )\n                : _vm._e(),\n              _c(\"div\", { staticClass: \"el-picker-panel__body\" }, [\n                _vm.showTime\n                  ? _c(\n                      \"div\",\n                      { staticClass: \"el-date-range-picker__time-header\" },\n                      [\n                        _c(\n                          \"span\",\n                          { staticClass: \"el-date-range-picker__editors-wrap\" },\n                          [\n                            _c(\n                              \"span\",\n                              {\n                                staticClass:\n                                  \"el-date-range-picker__time-picker-wrap\"\n                              },\n                              [\n                                _c(\"el-input\", {\n                                  ref: \"minInput\",\n                                  staticClass: \"el-date-range-picker__editor\",\n                                  attrs: {\n                                    size: \"small\",\n                                    disabled: _vm.rangeState.selecting,\n                                    placeholder: _vm.t(\n                                      \"el.datepicker.startDate\"\n                                    ),\n                                    value: _vm.minVisibleDate\n                                  },\n                                  on: {\n                                    input: function(val) {\n                                      return _vm.handleDateInput(val, \"min\")\n                                    },\n                                    change: function(val) {\n                                      return _vm.handleDateChange(val, \"min\")\n                                    }\n                                  }\n                                })\n                              ],\n                              1\n                            ),\n                            _c(\n                              \"span\",\n                              {\n                                directives: [\n                                  {\n                                    name: \"clickoutside\",\n                                    rawName: \"v-clickoutside\",\n                                    value: _vm.handleMinTimeClose,\n                                    expression: \"handleMinTimeClose\"\n                                  }\n                                ],\n                                staticClass:\n                                  \"el-date-range-picker__time-picker-wrap\"\n                              },\n                              [\n                                _c(\"el-input\", {\n                                  staticClass: \"el-date-range-picker__editor\",\n                                  attrs: {\n                                    size: \"small\",\n                                    disabled: _vm.rangeState.selecting,\n                                    placeholder: _vm.t(\n                                      \"el.datepicker.startTime\"\n                                    ),\n                                    value: _vm.minVisibleTime\n                                  },\n                                  on: {\n                                    focus: function($event) {\n                                      _vm.minTimePickerVisible = true\n                                    },\n                                    input: function(val) {\n                                      return _vm.handleTimeInput(val, \"min\")\n                                    },\n                                    change: function(val) {\n                                      return _vm.handleTimeChange(val, \"min\")\n                                    }\n                                  }\n                                }),\n                                _c(\"time-picker\", {\n                                  ref: \"minTimePicker\",\n                                  attrs: {\n                                    \"time-arrow-control\": _vm.arrowControl,\n                                    visible: _vm.minTimePickerVisible\n                                  },\n                                  on: {\n                                    pick: _vm.handleMinTimePick,\n                                    mounted: function($event) {\n                                      _vm.$refs.minTimePicker.format =\n                                        _vm.timeFormat\n                                    }\n                                  }\n                                })\n                              ],\n                              1\n                            )\n                          ]\n                        ),\n                        _c(\"span\", { staticClass: \"el-icon-arrow-right\" }),\n                        _c(\n                          \"span\",\n                          {\n                            staticClass:\n                              \"el-date-range-picker__editors-wrap is-right\"\n                          },\n                          [\n                            _c(\n                              \"span\",\n                              {\n                                staticClass:\n                                  \"el-date-range-picker__time-picker-wrap\"\n                              },\n                              [\n                                _c(\"el-input\", {\n                                  staticClass: \"el-date-range-picker__editor\",\n                                  attrs: {\n                                    size: \"small\",\n                                    disabled: _vm.rangeState.selecting,\n                                    placeholder: _vm.t(\"el.datepicker.endDate\"),\n                                    value: _vm.maxVisibleDate,\n                                    readonly: !_vm.minDate\n                                  },\n                                  on: {\n                                    input: function(val) {\n                                      return _vm.handleDateInput(val, \"max\")\n                                    },\n                                    change: function(val) {\n                                      return _vm.handleDateChange(val, \"max\")\n                                    }\n                                  }\n                                })\n                              ],\n                              1\n                            ),\n                            _c(\n                              \"span\",\n                              {\n                                directives: [\n                                  {\n                                    name: \"clickoutside\",\n                                    rawName: \"v-clickoutside\",\n                                    value: _vm.handleMaxTimeClose,\n                                    expression: \"handleMaxTimeClose\"\n                                  }\n                                ],\n                                staticClass:\n                                  \"el-date-range-picker__time-picker-wrap\"\n                              },\n                              [\n                                _c(\"el-input\", {\n                                  staticClass: \"el-date-range-picker__editor\",\n                                  attrs: {\n                                    size: \"small\",\n                                    disabled: _vm.rangeState.selecting,\n                                    placeholder: _vm.t(\"el.datepicker.endTime\"),\n                                    value: _vm.maxVisibleTime,\n                                    readonly: !_vm.minDate\n                                  },\n                                  on: {\n                                    focus: function($event) {\n                                      _vm.minDate &&\n                                        (_vm.maxTimePickerVisible = true)\n                                    },\n                                    input: function(val) {\n                                      return _vm.handleTimeInput(val, \"max\")\n                                    },\n                                    change: function(val) {\n                                      return _vm.handleTimeChange(val, \"max\")\n                                    }\n                                  }\n                                }),\n                                _c(\"time-picker\", {\n                                  ref: \"maxTimePicker\",\n                                  attrs: {\n                                    \"time-arrow-control\": _vm.arrowControl,\n                                    visible: _vm.maxTimePickerVisible\n                                  },\n                                  on: {\n                                    pick: _vm.handleMaxTimePick,\n                                    mounted: function($event) {\n                                      _vm.$refs.maxTimePicker.format =\n                                        _vm.timeFormat\n                                    }\n                                  }\n                                })\n                              ],\n                              1\n                            )\n                          ]\n                        )\n                      ]\n                    )\n                  : _vm._e(),\n                _c(\n                  \"div\",\n                  {\n                    staticClass:\n                      \"el-picker-panel__content el-date-range-picker__content is-left\"\n                  },\n                  [\n                    _c(\"div\", { staticClass: \"el-date-range-picker__header\" }, [\n                      _c(\"button\", {\n                        staticClass:\n                          \"el-picker-panel__icon-btn el-icon-d-arrow-left\",\n                        attrs: { type: \"button\" },\n                        on: { click: _vm.leftPrevYear }\n                      }),\n                      _c(\"button\", {\n                        staticClass:\n                          \"el-picker-panel__icon-btn el-icon-arrow-left\",\n                        attrs: { type: \"button\" },\n                        on: { click: _vm.leftPrevMonth }\n                      }),\n                      _vm.unlinkPanels\n                        ? _c(\"button\", {\n                            staticClass:\n                              \"el-picker-panel__icon-btn el-icon-d-arrow-right\",\n                            class: { \"is-disabled\": !_vm.enableYearArrow },\n                            attrs: {\n                              type: \"button\",\n                              disabled: !_vm.enableYearArrow\n                            },\n                            on: { click: _vm.leftNextYear }\n                          })\n                        : _vm._e(),\n                      _vm.unlinkPanels\n                        ? _c(\"button\", {\n                            staticClass:\n                              \"el-picker-panel__icon-btn el-icon-arrow-right\",\n                            class: { \"is-disabled\": !_vm.enableMonthArrow },\n                            attrs: {\n                              type: \"button\",\n                              disabled: !_vm.enableMonthArrow\n                            },\n                            on: { click: _vm.leftNextMonth }\n                          })\n                        : _vm._e(),\n                      _c(\"div\", [_vm._v(_vm._s(_vm.leftLabel))])\n                    ]),\n                    _c(\"date-table\", {\n                      attrs: {\n                        \"selection-mode\": \"range\",\n                        date: _vm.leftDate,\n                        \"default-value\": _vm.defaultValue,\n                        \"min-date\": _vm.minDate,\n                        \"max-date\": _vm.maxDate,\n                        \"range-state\": _vm.rangeState,\n                        \"disabled-date\": _vm.disabledDate,\n                        \"cell-class-name\": _vm.cellClassName,\n                        \"first-day-of-week\": _vm.firstDayOfWeek\n                      },\n                      on: {\n                        changerange: _vm.handleChangeRange,\n                        pick: _vm.handleRangePick\n                      }\n                    })\n                  ],\n                  1\n                ),\n                _c(\n                  \"div\",\n                  {\n                    staticClass:\n                      \"el-picker-panel__content el-date-range-picker__content is-right\"\n                  },\n                  [\n                    _c(\"div\", { staticClass: \"el-date-range-picker__header\" }, [\n                      _vm.unlinkPanels\n                        ? _c(\"button\", {\n                            staticClass:\n                              \"el-picker-panel__icon-btn el-icon-d-arrow-left\",\n                            class: { \"is-disabled\": !_vm.enableYearArrow },\n                            attrs: {\n                              type: \"button\",\n                              disabled: !_vm.enableYearArrow\n                            },\n                            on: { click: _vm.rightPrevYear }\n                          })\n                        : _vm._e(),\n                      _vm.unlinkPanels\n                        ? _c(\"button\", {\n                            staticClass:\n                              \"el-picker-panel__icon-btn el-icon-arrow-left\",\n                            class: { \"is-disabled\": !_vm.enableMonthArrow },\n                            attrs: {\n                              type: \"button\",\n                              disabled: !_vm.enableMonthArrow\n                            },\n                            on: { click: _vm.rightPrevMonth }\n                          })\n                        : _vm._e(),\n                      _c(\"button\", {\n                        staticClass:\n                          \"el-picker-panel__icon-btn el-icon-d-arrow-right\",\n                        attrs: { type: \"button\" },\n                        on: { click: _vm.rightNextYear }\n                      }),\n                      _c(\"button\", {\n                        staticClass:\n                          \"el-picker-panel__icon-btn el-icon-arrow-right\",\n                        attrs: { type: \"button\" },\n                        on: { click: _vm.rightNextMonth }\n                      }),\n                      _c(\"div\", [_vm._v(_vm._s(_vm.rightLabel))])\n                    ]),\n                    _c(\"date-table\", {\n                      attrs: {\n                        \"selection-mode\": \"range\",\n                        date: _vm.rightDate,\n                        \"default-value\": _vm.defaultValue,\n                        \"min-date\": _vm.minDate,\n                        \"max-date\": _vm.maxDate,\n                        \"range-state\": _vm.rangeState,\n                        \"disabled-date\": _vm.disabledDate,\n                        \"cell-class-name\": _vm.cellClassName,\n                        \"first-day-of-week\": _vm.firstDayOfWeek\n                      },\n                      on: {\n                        changerange: _vm.handleChangeRange,\n                        pick: _vm.handleRangePick\n                      }\n                    })\n                  ],\n                  1\n                )\n              ])\n            ],\n            2\n          ),\n          _vm.showTime\n            ? _c(\n                \"div\",\n                { staticClass: \"el-picker-panel__footer\" },\n                [\n                  _c(\n                    \"el-button\",\n                    {\n                      staticClass: \"el-picker-panel__link-btn\",\n                      attrs: { size: \"mini\", type: \"text\" },\n                      on: { click: _vm.handleClear }\n                    },\n                    [\n                      _vm._v(\n                        \"\\n        \" +\n                          _vm._s(_vm.t(\"el.datepicker.clear\")) +\n                          \"\\n      \"\n                      )\n                    ]\n                  ),\n                  _c(\n                    \"el-button\",\n                    {\n                      staticClass: \"el-picker-panel__link-btn\",\n                      attrs: {\n                        plain: \"\",\n                        size: \"mini\",\n                        disabled: _vm.btnDisabled\n                      },\n                      on: {\n                        click: function($event) {\n                          _vm.handleConfirm(false)\n                        }\n                      }\n                    },\n                    [\n                      _vm._v(\n                        \"\\n        \" +\n                          _vm._s(_vm.t(\"el.datepicker.confirm\")) +\n                          \"\\n      \"\n                      )\n                    ]\n                  )\n                ],\n                1\n              )\n            : _vm._e()\n        ]\n      )\n    ]\n  )\n}\nvar date_rangevue_type_template_id_2652849a_staticRenderFns = []\ndate_rangevue_type_template_id_2652849a_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/date-picker/src/panel/date-range.vue?vue&type=template&id=2652849a&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/date-picker/src/panel/date-range.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n\n\n\nvar date_rangevue_type_script_lang_js_calcDefaultValue = function calcDefaultValue(defaultValue) {\n  if (Array.isArray(defaultValue)) {\n    return [new Date(defaultValue[0]), new Date(defaultValue[1])];\n  } else if (defaultValue) {\n    return [new Date(defaultValue), Object(date_util_[\"nextDate\"])(new Date(defaultValue), 1)];\n  } else {\n    return [new Date(), Object(date_util_[\"nextDate\"])(new Date(), 1)];\n  }\n};\n\n/* harmony default export */ var date_rangevue_type_script_lang_js_ = ({\n  mixins: [locale_default.a],\n\n  directives: { Clickoutside: clickoutside_default.a },\n\n  computed: {\n    btnDisabled: function btnDisabled() {\n      return !(this.minDate && this.maxDate && !this.selecting && this.isValidValue([this.minDate, this.maxDate]));\n    },\n    leftLabel: function leftLabel() {\n      return this.leftDate.getFullYear() + ' ' + this.t('el.datepicker.year') + ' ' + this.t('el.datepicker.month' + (this.leftDate.getMonth() + 1));\n    },\n    rightLabel: function rightLabel() {\n      return this.rightDate.getFullYear() + ' ' + this.t('el.datepicker.year') + ' ' + this.t('el.datepicker.month' + (this.rightDate.getMonth() + 1));\n    },\n    leftYear: function leftYear() {\n      return this.leftDate.getFullYear();\n    },\n    leftMonth: function leftMonth() {\n      return this.leftDate.getMonth();\n    },\n    leftMonthDate: function leftMonthDate() {\n      return this.leftDate.getDate();\n    },\n    rightYear: function rightYear() {\n      return this.rightDate.getFullYear();\n    },\n    rightMonth: function rightMonth() {\n      return this.rightDate.getMonth();\n    },\n    rightMonthDate: function rightMonthDate() {\n      return this.rightDate.getDate();\n    },\n    minVisibleDate: function minVisibleDate() {\n      if (this.dateUserInput.min !== null) return this.dateUserInput.min;\n      if (this.minDate) return Object(date_util_[\"formatDate\"])(this.minDate, this.dateFormat);\n      return '';\n    },\n    maxVisibleDate: function maxVisibleDate() {\n      if (this.dateUserInput.max !== null) return this.dateUserInput.max;\n      if (this.maxDate || this.minDate) return Object(date_util_[\"formatDate\"])(this.maxDate || this.minDate, this.dateFormat);\n      return '';\n    },\n    minVisibleTime: function minVisibleTime() {\n      if (this.timeUserInput.min !== null) return this.timeUserInput.min;\n      if (this.minDate) return Object(date_util_[\"formatDate\"])(this.minDate, this.timeFormat);\n      return '';\n    },\n    maxVisibleTime: function maxVisibleTime() {\n      if (this.timeUserInput.max !== null) return this.timeUserInput.max;\n      if (this.maxDate || this.minDate) return Object(date_util_[\"formatDate\"])(this.maxDate || this.minDate, this.timeFormat);\n      return '';\n    },\n    timeFormat: function timeFormat() {\n      if (this.format) {\n        return Object(date_util_[\"extractTimeFormat\"])(this.format);\n      } else {\n        return 'HH:mm:ss';\n      }\n    },\n    dateFormat: function dateFormat() {\n      if (this.format) {\n        return Object(date_util_[\"extractDateFormat\"])(this.format);\n      } else {\n        return 'yyyy-MM-dd';\n      }\n    },\n    enableMonthArrow: function enableMonthArrow() {\n      var nextMonth = (this.leftMonth + 1) % 12;\n      var yearOffset = this.leftMonth + 1 >= 12 ? 1 : 0;\n      return this.unlinkPanels && new Date(this.leftYear + yearOffset, nextMonth) < new Date(this.rightYear, this.rightMonth);\n    },\n    enableYearArrow: function enableYearArrow() {\n      return this.unlinkPanels && this.rightYear * 12 + this.rightMonth - (this.leftYear * 12 + this.leftMonth + 1) >= 12;\n    }\n  },\n\n  data: function data() {\n    return {\n      popperClass: '',\n      value: [],\n      defaultValue: null,\n      defaultTime: null,\n      minDate: '',\n      maxDate: '',\n      leftDate: new Date(),\n      rightDate: Object(date_util_[\"nextMonth\"])(new Date()),\n      rangeState: {\n        endDate: null,\n        selecting: false,\n        row: null,\n        column: null\n      },\n      showTime: false,\n      shortcuts: '',\n      visible: '',\n      disabledDate: '',\n      cellClassName: '',\n      firstDayOfWeek: 7,\n      minTimePickerVisible: false,\n      maxTimePickerVisible: false,\n      format: '',\n      arrowControl: false,\n      unlinkPanels: false,\n      dateUserInput: {\n        min: null,\n        max: null\n      },\n      timeUserInput: {\n        min: null,\n        max: null\n      }\n    };\n  },\n\n\n  watch: {\n    minDate: function minDate(val) {\n      var _this = this;\n\n      this.dateUserInput.min = null;\n      this.timeUserInput.min = null;\n      this.$nextTick(function () {\n        if (_this.$refs.maxTimePicker && _this.maxDate && _this.maxDate < _this.minDate) {\n          var format = 'HH:mm:ss';\n          _this.$refs.maxTimePicker.selectableRange = [[Object(date_util_[\"parseDate\"])(Object(date_util_[\"formatDate\"])(_this.minDate, format), format), Object(date_util_[\"parseDate\"])('23:59:59', format)]];\n        }\n      });\n      if (val && this.$refs.minTimePicker) {\n        this.$refs.minTimePicker.date = val;\n        this.$refs.minTimePicker.value = val;\n      }\n    },\n    maxDate: function maxDate(val) {\n      this.dateUserInput.max = null;\n      this.timeUserInput.max = null;\n      if (val && this.$refs.maxTimePicker) {\n        this.$refs.maxTimePicker.date = val;\n        this.$refs.maxTimePicker.value = val;\n      }\n    },\n    minTimePickerVisible: function minTimePickerVisible(val) {\n      var _this2 = this;\n\n      if (val) {\n        this.$nextTick(function () {\n          _this2.$refs.minTimePicker.date = _this2.minDate;\n          _this2.$refs.minTimePicker.value = _this2.minDate;\n          _this2.$refs.minTimePicker.adjustSpinners();\n        });\n      }\n    },\n    maxTimePickerVisible: function maxTimePickerVisible(val) {\n      var _this3 = this;\n\n      if (val) {\n        this.$nextTick(function () {\n          _this3.$refs.maxTimePicker.date = _this3.maxDate;\n          _this3.$refs.maxTimePicker.value = _this3.maxDate;\n          _this3.$refs.maxTimePicker.adjustSpinners();\n        });\n      }\n    },\n    value: function value(newVal) {\n      if (!newVal) {\n        this.minDate = null;\n        this.maxDate = null;\n      } else if (Array.isArray(newVal)) {\n        this.minDate = Object(date_util_[\"isDate\"])(newVal[0]) ? new Date(newVal[0]) : null;\n        this.maxDate = Object(date_util_[\"isDate\"])(newVal[1]) ? new Date(newVal[1]) : null;\n        if (this.minDate) {\n          this.leftDate = this.minDate;\n          if (this.unlinkPanels && this.maxDate) {\n            var minDateYear = this.minDate.getFullYear();\n            var minDateMonth = this.minDate.getMonth();\n            var maxDateYear = this.maxDate.getFullYear();\n            var maxDateMonth = this.maxDate.getMonth();\n            this.rightDate = minDateYear === maxDateYear && minDateMonth === maxDateMonth ? Object(date_util_[\"nextMonth\"])(this.maxDate) : this.maxDate;\n          } else {\n            this.rightDate = Object(date_util_[\"nextMonth\"])(this.leftDate);\n          }\n        } else {\n          this.leftDate = date_rangevue_type_script_lang_js_calcDefaultValue(this.defaultValue)[0];\n          this.rightDate = Object(date_util_[\"nextMonth\"])(this.leftDate);\n        }\n      }\n    },\n    defaultValue: function defaultValue(val) {\n      if (!Array.isArray(this.value)) {\n        var _calcDefaultValue = date_rangevue_type_script_lang_js_calcDefaultValue(val),\n            left = _calcDefaultValue[0],\n            right = _calcDefaultValue[1];\n\n        this.leftDate = left;\n        this.rightDate = val && val[1] && this.unlinkPanels ? right : Object(date_util_[\"nextMonth\"])(this.leftDate);\n      }\n    }\n  },\n\n  methods: {\n    handleClear: function handleClear() {\n      this.minDate = null;\n      this.maxDate = null;\n      this.leftDate = date_rangevue_type_script_lang_js_calcDefaultValue(this.defaultValue)[0];\n      this.rightDate = Object(date_util_[\"nextMonth\"])(this.leftDate);\n      this.$emit('pick', null);\n    },\n    handleChangeRange: function handleChangeRange(val) {\n      this.minDate = val.minDate;\n      this.maxDate = val.maxDate;\n      this.rangeState = val.rangeState;\n    },\n    handleDateInput: function handleDateInput(value, type) {\n      this.dateUserInput[type] = value;\n      if (value.length !== this.dateFormat.length) return;\n      var parsedValue = Object(date_util_[\"parseDate\"])(value, this.dateFormat);\n\n      if (parsedValue) {\n        if (typeof this.disabledDate === 'function' && this.disabledDate(new Date(parsedValue))) {\n          return;\n        }\n        if (type === 'min') {\n          this.minDate = Object(date_util_[\"modifyDate\"])(this.minDate || new Date(), parsedValue.getFullYear(), parsedValue.getMonth(), parsedValue.getDate());\n          this.leftDate = new Date(parsedValue);\n          if (!this.unlinkPanels) {\n            this.rightDate = Object(date_util_[\"nextMonth\"])(this.leftDate);\n          }\n        } else {\n          this.maxDate = Object(date_util_[\"modifyDate\"])(this.maxDate || new Date(), parsedValue.getFullYear(), parsedValue.getMonth(), parsedValue.getDate());\n          this.rightDate = new Date(parsedValue);\n          if (!this.unlinkPanels) {\n            this.leftDate = Object(date_util_[\"prevMonth\"])(parsedValue);\n          }\n        }\n      }\n    },\n    handleDateChange: function handleDateChange(value, type) {\n      var parsedValue = Object(date_util_[\"parseDate\"])(value, this.dateFormat);\n      if (parsedValue) {\n        if (type === 'min') {\n          this.minDate = Object(date_util_[\"modifyDate\"])(this.minDate, parsedValue.getFullYear(), parsedValue.getMonth(), parsedValue.getDate());\n          if (this.minDate > this.maxDate) {\n            this.maxDate = this.minDate;\n          }\n        } else {\n          this.maxDate = Object(date_util_[\"modifyDate\"])(this.maxDate, parsedValue.getFullYear(), parsedValue.getMonth(), parsedValue.getDate());\n          if (this.maxDate < this.minDate) {\n            this.minDate = this.maxDate;\n          }\n        }\n      }\n    },\n    handleTimeInput: function handleTimeInput(value, type) {\n      var _this4 = this;\n\n      this.timeUserInput[type] = value;\n      if (value.length !== this.timeFormat.length) return;\n      var parsedValue = Object(date_util_[\"parseDate\"])(value, this.timeFormat);\n\n      if (parsedValue) {\n        if (type === 'min') {\n          this.minDate = Object(date_util_[\"modifyTime\"])(this.minDate, parsedValue.getHours(), parsedValue.getMinutes(), parsedValue.getSeconds());\n          this.$nextTick(function (_) {\n            return _this4.$refs.minTimePicker.adjustSpinners();\n          });\n        } else {\n          this.maxDate = Object(date_util_[\"modifyTime\"])(this.maxDate, parsedValue.getHours(), parsedValue.getMinutes(), parsedValue.getSeconds());\n          this.$nextTick(function (_) {\n            return _this4.$refs.maxTimePicker.adjustSpinners();\n          });\n        }\n      }\n    },\n    handleTimeChange: function handleTimeChange(value, type) {\n      var parsedValue = Object(date_util_[\"parseDate\"])(value, this.timeFormat);\n      if (parsedValue) {\n        if (type === 'min') {\n          this.minDate = Object(date_util_[\"modifyTime\"])(this.minDate, parsedValue.getHours(), parsedValue.getMinutes(), parsedValue.getSeconds());\n          if (this.minDate > this.maxDate) {\n            this.maxDate = this.minDate;\n          }\n          this.$refs.minTimePicker.value = this.minDate;\n          this.minTimePickerVisible = false;\n        } else {\n          this.maxDate = Object(date_util_[\"modifyTime\"])(this.maxDate, parsedValue.getHours(), parsedValue.getMinutes(), parsedValue.getSeconds());\n          if (this.maxDate < this.minDate) {\n            this.minDate = this.maxDate;\n          }\n          this.$refs.maxTimePicker.value = this.minDate;\n          this.maxTimePickerVisible = false;\n        }\n      }\n    },\n    handleRangePick: function handleRangePick(val) {\n      var _this5 = this;\n\n      var close = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n      var defaultTime = this.defaultTime || [];\n      var minDate = Object(date_util_[\"modifyWithTimeString\"])(val.minDate, defaultTime[0]);\n      var maxDate = Object(date_util_[\"modifyWithTimeString\"])(val.maxDate, defaultTime[1]);\n\n      if (this.maxDate === maxDate && this.minDate === minDate) {\n        return;\n      }\n      this.onPick && this.onPick(val);\n      this.maxDate = maxDate;\n      this.minDate = minDate;\n\n      // workaround for https://github.com/ElemeFE/element/issues/7539, should remove this block when we don't have to care about Chromium 55 - 57\n      setTimeout(function () {\n        _this5.maxDate = maxDate;\n        _this5.minDate = minDate;\n      }, 10);\n      if (!close || this.showTime) return;\n      this.handleConfirm();\n    },\n    handleShortcutClick: function handleShortcutClick(shortcut) {\n      if (shortcut.onClick) {\n        shortcut.onClick(this);\n      }\n    },\n    handleMinTimePick: function handleMinTimePick(value, visible, first) {\n      this.minDate = this.minDate || new Date();\n      if (value) {\n        this.minDate = Object(date_util_[\"modifyTime\"])(this.minDate, value.getHours(), value.getMinutes(), value.getSeconds());\n      }\n\n      if (!first) {\n        this.minTimePickerVisible = visible;\n      }\n\n      if (!this.maxDate || this.maxDate && this.maxDate.getTime() < this.minDate.getTime()) {\n        this.maxDate = new Date(this.minDate);\n      }\n    },\n    handleMinTimeClose: function handleMinTimeClose() {\n      this.minTimePickerVisible = false;\n    },\n    handleMaxTimePick: function handleMaxTimePick(value, visible, first) {\n      if (this.maxDate && value) {\n        this.maxDate = Object(date_util_[\"modifyTime\"])(this.maxDate, value.getHours(), value.getMinutes(), value.getSeconds());\n      }\n\n      if (!first) {\n        this.maxTimePickerVisible = visible;\n      }\n\n      if (this.maxDate && this.minDate && this.minDate.getTime() > this.maxDate.getTime()) {\n        this.minDate = new Date(this.maxDate);\n      }\n    },\n    handleMaxTimeClose: function handleMaxTimeClose() {\n      this.maxTimePickerVisible = false;\n    },\n\n\n    // leftPrev*, rightNext* need to take care of `unlinkPanels`\n    leftPrevYear: function leftPrevYear() {\n      this.leftDate = Object(date_util_[\"prevYear\"])(this.leftDate);\n      if (!this.unlinkPanels) {\n        this.rightDate = Object(date_util_[\"nextMonth\"])(this.leftDate);\n      }\n    },\n    leftPrevMonth: function leftPrevMonth() {\n      this.leftDate = Object(date_util_[\"prevMonth\"])(this.leftDate);\n      if (!this.unlinkPanels) {\n        this.rightDate = Object(date_util_[\"nextMonth\"])(this.leftDate);\n      }\n    },\n    rightNextYear: function rightNextYear() {\n      if (!this.unlinkPanels) {\n        this.leftDate = Object(date_util_[\"nextYear\"])(this.leftDate);\n        this.rightDate = Object(date_util_[\"nextMonth\"])(this.leftDate);\n      } else {\n        this.rightDate = Object(date_util_[\"nextYear\"])(this.rightDate);\n      }\n    },\n    rightNextMonth: function rightNextMonth() {\n      if (!this.unlinkPanels) {\n        this.leftDate = Object(date_util_[\"nextMonth\"])(this.leftDate);\n        this.rightDate = Object(date_util_[\"nextMonth\"])(this.leftDate);\n      } else {\n        this.rightDate = Object(date_util_[\"nextMonth\"])(this.rightDate);\n      }\n    },\n\n\n    // leftNext*, rightPrev* are called when `unlinkPanels` is true\n    leftNextYear: function leftNextYear() {\n      this.leftDate = Object(date_util_[\"nextYear\"])(this.leftDate);\n    },\n    leftNextMonth: function leftNextMonth() {\n      this.leftDate = Object(date_util_[\"nextMonth\"])(this.leftDate);\n    },\n    rightPrevYear: function rightPrevYear() {\n      this.rightDate = Object(date_util_[\"prevYear\"])(this.rightDate);\n    },\n    rightPrevMonth: function rightPrevMonth() {\n      this.rightDate = Object(date_util_[\"prevMonth\"])(this.rightDate);\n    },\n    handleConfirm: function handleConfirm() {\n      var visible = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n      if (this.isValidValue([this.minDate, this.maxDate])) {\n        this.$emit('pick', [this.minDate, this.maxDate], visible);\n      }\n    },\n    isValidValue: function isValidValue(value) {\n      return Array.isArray(value) && value && value[0] && value[1] && Object(date_util_[\"isDate\"])(value[0]) && Object(date_util_[\"isDate\"])(value[1]) && value[0].getTime() <= value[1].getTime() && (typeof this.disabledDate === 'function' ? !this.disabledDate(value[0]) && !this.disabledDate(value[1]) : true);\n    },\n    resetView: function resetView() {\n      // NOTE: this is a hack to reset {min, max}Date on picker open.\n      // TODO: correct way of doing so is to refactor {min, max}Date to be dependent on value and internal selection state\n      //       an alternative would be resetView whenever picker becomes visible, should also investigate date-panel's resetView\n      if (this.minDate && this.maxDate == null) this.rangeState.selecting = false;\n      this.minDate = this.value && Object(date_util_[\"isDate\"])(this.value[0]) ? new Date(this.value[0]) : null;\n      this.maxDate = this.value && Object(date_util_[\"isDate\"])(this.value[0]) ? new Date(this.value[1]) : null;\n    }\n  },\n\n  components: { TimePicker: panel_time, DateTable: date_table, ElInput: input_default.a, ElButton: button_default.a }\n});\n// CONCATENATED MODULE: ./packages/date-picker/src/panel/date-range.vue?vue&type=script&lang=js&\n /* harmony default export */ var panel_date_rangevue_type_script_lang_js_ = (date_rangevue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/date-picker/src/panel/date-range.vue\n\n\n\n\n\n/* normalize component */\n\nvar date_range_component = normalizeComponent(\n  panel_date_rangevue_type_script_lang_js_,\n  date_rangevue_type_template_id_2652849a_render,\n  date_rangevue_type_template_id_2652849a_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var date_range_api; }\ndate_range_component.options.__file = \"packages/date-picker/src/panel/date-range.vue\"\n/* harmony default export */ var date_range = (date_range_component.exports);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/date-picker/src/panel/month-range.vue?vue&type=template&id=f2645fb8&\nvar month_rangevue_type_template_id_f2645fb8_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"transition\",\n    {\n      attrs: { name: \"el-zoom-in-top\" },\n      on: {\n        \"after-leave\": function($event) {\n          _vm.$emit(\"dodestroy\")\n        }\n      }\n    },\n    [\n      _c(\n        \"div\",\n        {\n          directives: [\n            {\n              name: \"show\",\n              rawName: \"v-show\",\n              value: _vm.visible,\n              expression: \"visible\"\n            }\n          ],\n          staticClass: \"el-picker-panel el-date-range-picker el-popper\",\n          class: [\n            {\n              \"has-sidebar\": _vm.$slots.sidebar || _vm.shortcuts\n            },\n            _vm.popperClass\n          ]\n        },\n        [\n          _c(\n            \"div\",\n            { staticClass: \"el-picker-panel__body-wrapper\" },\n            [\n              _vm._t(\"sidebar\"),\n              _vm.shortcuts\n                ? _c(\n                    \"div\",\n                    { staticClass: \"el-picker-panel__sidebar\" },\n                    _vm._l(_vm.shortcuts, function(shortcut, key) {\n                      return _c(\n                        \"button\",\n                        {\n                          key: key,\n                          staticClass: \"el-picker-panel__shortcut\",\n                          attrs: { type: \"button\" },\n                          on: {\n                            click: function($event) {\n                              _vm.handleShortcutClick(shortcut)\n                            }\n                          }\n                        },\n                        [_vm._v(_vm._s(shortcut.text))]\n                      )\n                    }),\n                    0\n                  )\n                : _vm._e(),\n              _c(\"div\", { staticClass: \"el-picker-panel__body\" }, [\n                _c(\n                  \"div\",\n                  {\n                    staticClass:\n                      \"el-picker-panel__content el-date-range-picker__content is-left\"\n                  },\n                  [\n                    _c(\"div\", { staticClass: \"el-date-range-picker__header\" }, [\n                      _c(\"button\", {\n                        staticClass:\n                          \"el-picker-panel__icon-btn el-icon-d-arrow-left\",\n                        attrs: { type: \"button\" },\n                        on: { click: _vm.leftPrevYear }\n                      }),\n                      _vm.unlinkPanels\n                        ? _c(\"button\", {\n                            staticClass:\n                              \"el-picker-panel__icon-btn el-icon-d-arrow-right\",\n                            class: { \"is-disabled\": !_vm.enableYearArrow },\n                            attrs: {\n                              type: \"button\",\n                              disabled: !_vm.enableYearArrow\n                            },\n                            on: { click: _vm.leftNextYear }\n                          })\n                        : _vm._e(),\n                      _c(\"div\", [_vm._v(_vm._s(_vm.leftLabel))])\n                    ]),\n                    _c(\"month-table\", {\n                      attrs: {\n                        \"selection-mode\": \"range\",\n                        date: _vm.leftDate,\n                        \"default-value\": _vm.defaultValue,\n                        \"min-date\": _vm.minDate,\n                        \"max-date\": _vm.maxDate,\n                        \"range-state\": _vm.rangeState,\n                        \"disabled-date\": _vm.disabledDate\n                      },\n                      on: {\n                        changerange: _vm.handleChangeRange,\n                        pick: _vm.handleRangePick\n                      }\n                    })\n                  ],\n                  1\n                ),\n                _c(\n                  \"div\",\n                  {\n                    staticClass:\n                      \"el-picker-panel__content el-date-range-picker__content is-right\"\n                  },\n                  [\n                    _c(\"div\", { staticClass: \"el-date-range-picker__header\" }, [\n                      _vm.unlinkPanels\n                        ? _c(\"button\", {\n                            staticClass:\n                              \"el-picker-panel__icon-btn el-icon-d-arrow-left\",\n                            class: { \"is-disabled\": !_vm.enableYearArrow },\n                            attrs: {\n                              type: \"button\",\n                              disabled: !_vm.enableYearArrow\n                            },\n                            on: { click: _vm.rightPrevYear }\n                          })\n                        : _vm._e(),\n                      _c(\"button\", {\n                        staticClass:\n                          \"el-picker-panel__icon-btn el-icon-d-arrow-right\",\n                        attrs: { type: \"button\" },\n                        on: { click: _vm.rightNextYear }\n                      }),\n                      _c(\"div\", [_vm._v(_vm._s(_vm.rightLabel))])\n                    ]),\n                    _c(\"month-table\", {\n                      attrs: {\n                        \"selection-mode\": \"range\",\n                        date: _vm.rightDate,\n                        \"default-value\": _vm.defaultValue,\n                        \"min-date\": _vm.minDate,\n                        \"max-date\": _vm.maxDate,\n                        \"range-state\": _vm.rangeState,\n                        \"disabled-date\": _vm.disabledDate\n                      },\n                      on: {\n                        changerange: _vm.handleChangeRange,\n                        pick: _vm.handleRangePick\n                      }\n                    })\n                  ],\n                  1\n                )\n              ])\n            ],\n            2\n          )\n        ]\n      )\n    ]\n  )\n}\nvar month_rangevue_type_template_id_f2645fb8_staticRenderFns = []\nmonth_rangevue_type_template_id_f2645fb8_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/date-picker/src/panel/month-range.vue?vue&type=template&id=f2645fb8&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/date-picker/src/panel/month-range.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n\n\nvar month_rangevue_type_script_lang_js_calcDefaultValue = function calcDefaultValue(defaultValue) {\n  if (Array.isArray(defaultValue)) {\n    return [new Date(defaultValue[0]), new Date(defaultValue[1])];\n  } else if (defaultValue) {\n    return [new Date(defaultValue), Object(date_util_[\"nextMonth\"])(new Date(defaultValue))];\n  } else {\n    return [new Date(), Object(date_util_[\"nextMonth\"])(new Date())];\n  }\n};\n/* harmony default export */ var month_rangevue_type_script_lang_js_ = ({\n  mixins: [locale_default.a],\n\n  directives: { Clickoutside: clickoutside_default.a },\n\n  computed: {\n    btnDisabled: function btnDisabled() {\n      return !(this.minDate && this.maxDate && !this.selecting && this.isValidValue([this.minDate, this.maxDate]));\n    },\n    leftLabel: function leftLabel() {\n      return this.leftDate.getFullYear() + ' ' + this.t('el.datepicker.year');\n    },\n    rightLabel: function rightLabel() {\n      return this.rightDate.getFullYear() + ' ' + this.t('el.datepicker.year');\n    },\n    leftYear: function leftYear() {\n      return this.leftDate.getFullYear();\n    },\n    rightYear: function rightYear() {\n      return this.rightDate.getFullYear() === this.leftDate.getFullYear() ? this.leftDate.getFullYear() + 1 : this.rightDate.getFullYear();\n    },\n    enableYearArrow: function enableYearArrow() {\n      return this.unlinkPanels && this.rightYear > this.leftYear + 1;\n    }\n  },\n\n  data: function data() {\n    return {\n      popperClass: '',\n      value: [],\n      defaultValue: null,\n      defaultTime: null,\n      minDate: '',\n      maxDate: '',\n      leftDate: new Date(),\n      rightDate: Object(date_util_[\"nextYear\"])(new Date()),\n      rangeState: {\n        endDate: null,\n        selecting: false,\n        row: null,\n        column: null\n      },\n      shortcuts: '',\n      visible: '',\n      disabledDate: '',\n      format: '',\n      arrowControl: false,\n      unlinkPanels: false\n    };\n  },\n\n\n  watch: {\n    value: function value(newVal) {\n      if (!newVal) {\n        this.minDate = null;\n        this.maxDate = null;\n      } else if (Array.isArray(newVal)) {\n        this.minDate = Object(date_util_[\"isDate\"])(newVal[0]) ? new Date(newVal[0]) : null;\n        this.maxDate = Object(date_util_[\"isDate\"])(newVal[1]) ? new Date(newVal[1]) : null;\n        if (this.minDate) {\n          this.leftDate = this.minDate;\n          if (this.unlinkPanels && this.maxDate) {\n            var minDateYear = this.minDate.getFullYear();\n            var maxDateYear = this.maxDate.getFullYear();\n            this.rightDate = minDateYear === maxDateYear ? Object(date_util_[\"nextYear\"])(this.maxDate) : this.maxDate;\n          } else {\n            this.rightDate = Object(date_util_[\"nextYear\"])(this.leftDate);\n          }\n        } else {\n          this.leftDate = month_rangevue_type_script_lang_js_calcDefaultValue(this.defaultValue)[0];\n          this.rightDate = Object(date_util_[\"nextYear\"])(this.leftDate);\n        }\n      }\n    },\n    defaultValue: function defaultValue(val) {\n      if (!Array.isArray(this.value)) {\n        var _calcDefaultValue = month_rangevue_type_script_lang_js_calcDefaultValue(val),\n            left = _calcDefaultValue[0],\n            right = _calcDefaultValue[1];\n\n        this.leftDate = left;\n        this.rightDate = val && val[1] && left.getFullYear() !== right.getFullYear() && this.unlinkPanels ? right : Object(date_util_[\"nextYear\"])(this.leftDate);\n      }\n    }\n  },\n\n  methods: {\n    handleClear: function handleClear() {\n      this.minDate = null;\n      this.maxDate = null;\n      this.leftDate = month_rangevue_type_script_lang_js_calcDefaultValue(this.defaultValue)[0];\n      this.rightDate = Object(date_util_[\"nextYear\"])(this.leftDate);\n      this.$emit('pick', null);\n    },\n    handleChangeRange: function handleChangeRange(val) {\n      this.minDate = val.minDate;\n      this.maxDate = val.maxDate;\n      this.rangeState = val.rangeState;\n    },\n    handleRangePick: function handleRangePick(val) {\n      var _this = this;\n\n      var close = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n      var defaultTime = this.defaultTime || [];\n      var minDate = Object(date_util_[\"modifyWithTimeString\"])(val.minDate, defaultTime[0]);\n      var maxDate = Object(date_util_[\"modifyWithTimeString\"])(val.maxDate, defaultTime[1]);\n      if (this.maxDate === maxDate && this.minDate === minDate) {\n        return;\n      }\n      this.onPick && this.onPick(val);\n      this.maxDate = maxDate;\n      this.minDate = minDate;\n\n      // workaround for https://github.com/ElemeFE/element/issues/7539, should remove this block when we don't have to care about Chromium 55 - 57\n      setTimeout(function () {\n        _this.maxDate = maxDate;\n        _this.minDate = minDate;\n      }, 10);\n      if (!close) return;\n      this.handleConfirm();\n    },\n    handleShortcutClick: function handleShortcutClick(shortcut) {\n      if (shortcut.onClick) {\n        shortcut.onClick(this);\n      }\n    },\n\n\n    // leftPrev*, rightNext* need to take care of `unlinkPanels`\n    leftPrevYear: function leftPrevYear() {\n      this.leftDate = Object(date_util_[\"prevYear\"])(this.leftDate);\n      if (!this.unlinkPanels) {\n        this.rightDate = Object(date_util_[\"prevYear\"])(this.rightDate);\n      }\n    },\n    rightNextYear: function rightNextYear() {\n      if (!this.unlinkPanels) {\n        this.leftDate = Object(date_util_[\"nextYear\"])(this.leftDate);\n      }\n      this.rightDate = Object(date_util_[\"nextYear\"])(this.rightDate);\n    },\n\n\n    // leftNext*, rightPrev* are called when `unlinkPanels` is true\n    leftNextYear: function leftNextYear() {\n      this.leftDate = Object(date_util_[\"nextYear\"])(this.leftDate);\n    },\n    rightPrevYear: function rightPrevYear() {\n      this.rightDate = Object(date_util_[\"prevYear\"])(this.rightDate);\n    },\n    handleConfirm: function handleConfirm() {\n      var visible = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n      if (this.isValidValue([this.minDate, this.maxDate])) {\n        this.$emit('pick', [this.minDate, this.maxDate], visible);\n      }\n    },\n    isValidValue: function isValidValue(value) {\n      return Array.isArray(value) && value && value[0] && value[1] && Object(date_util_[\"isDate\"])(value[0]) && Object(date_util_[\"isDate\"])(value[1]) && value[0].getTime() <= value[1].getTime() && (typeof this.disabledDate === 'function' ? !this.disabledDate(value[0]) && !this.disabledDate(value[1]) : true);\n    },\n    resetView: function resetView() {\n      // NOTE: this is a hack to reset {min, max}Date on picker open.\n      // TODO: correct way of doing so is to refactor {min, max}Date to be dependent on value and internal selection state\n      //       an alternative would be resetView whenever picker becomes visible, should also investigate date-panel's resetView\n      this.minDate = this.value && Object(date_util_[\"isDate\"])(this.value[0]) ? new Date(this.value[0]) : null;\n      this.maxDate = this.value && Object(date_util_[\"isDate\"])(this.value[0]) ? new Date(this.value[1]) : null;\n    }\n  },\n\n  components: { MonthTable: month_table, ElInput: input_default.a, ElButton: button_default.a }\n});\n// CONCATENATED MODULE: ./packages/date-picker/src/panel/month-range.vue?vue&type=script&lang=js&\n /* harmony default export */ var panel_month_rangevue_type_script_lang_js_ = (month_rangevue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/date-picker/src/panel/month-range.vue\n\n\n\n\n\n/* normalize component */\n\nvar month_range_component = normalizeComponent(\n  panel_month_rangevue_type_script_lang_js_,\n  month_rangevue_type_template_id_f2645fb8_render,\n  month_rangevue_type_template_id_f2645fb8_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var month_range_api; }\nmonth_range_component.options.__file = \"packages/date-picker/src/panel/month-range.vue\"\n/* harmony default export */ var month_range = (month_range_component.exports);\n// CONCATENATED MODULE: ./packages/date-picker/src/picker/date-picker.js\n\n\n\n\n\nvar date_picker_getPanel = function getPanel(type) {\n  if (type === 'daterange' || type === 'datetimerange') {\n    return date_range;\n  } else if (type === 'monthrange') {\n    return month_range;\n  }\n  return panel_date;\n};\n\n/* harmony default export */ var date_picker = ({\n  mixins: [picker],\n\n  name: 'ElDatePicker',\n\n  props: {\n    type: {\n      type: String,\n      default: 'date'\n    },\n    timeArrowControl: Boolean\n  },\n\n  watch: {\n    type: function type(_type) {\n      if (this.picker) {\n        this.unmountPicker();\n        this.panel = date_picker_getPanel(_type);\n        this.mountPicker();\n      } else {\n        this.panel = date_picker_getPanel(_type);\n      }\n    }\n  },\n\n  created: function created() {\n    this.panel = date_picker_getPanel(this.type);\n  }\n});\n// CONCATENATED MODULE: ./packages/date-picker/index.js\n\n\n/* istanbul ignore next */\ndate_picker.install = function install(Vue) {\n  Vue.component(date_picker.name, date_picker);\n};\n\n/* harmony default export */ var packages_date_picker = (date_picker);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/date-picker/src/panel/time-select.vue?vue&type=template&id=51ab9320&\nvar time_selectvue_type_template_id_51ab9320_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"transition\",\n    {\n      attrs: { name: \"el-zoom-in-top\" },\n      on: {\n        \"before-enter\": _vm.handleMenuEnter,\n        \"after-leave\": function($event) {\n          _vm.$emit(\"dodestroy\")\n        }\n      }\n    },\n    [\n      _c(\n        \"div\",\n        {\n          directives: [\n            {\n              name: \"show\",\n              rawName: \"v-show\",\n              value: _vm.visible,\n              expression: \"visible\"\n            }\n          ],\n          ref: \"popper\",\n          staticClass: \"el-picker-panel time-select el-popper\",\n          class: _vm.popperClass,\n          style: { width: _vm.width + \"px\" }\n        },\n        [\n          _c(\n            \"el-scrollbar\",\n            {\n              attrs: { noresize: \"\", \"wrap-class\": \"el-picker-panel__content\" }\n            },\n            _vm._l(_vm.items, function(item) {\n              return _c(\n                \"div\",\n                {\n                  key: item.value,\n                  staticClass: \"time-select-item\",\n                  class: {\n                    selected: _vm.value === item.value,\n                    disabled: item.disabled,\n                    default: item.value === _vm.defaultValue\n                  },\n                  attrs: { disabled: item.disabled },\n                  on: {\n                    click: function($event) {\n                      _vm.handleClick(item)\n                    }\n                  }\n                },\n                [_vm._v(_vm._s(item.value))]\n              )\n            }),\n            0\n          )\n        ],\n        1\n      )\n    ]\n  )\n}\nvar time_selectvue_type_template_id_51ab9320_staticRenderFns = []\ntime_selectvue_type_template_id_51ab9320_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/date-picker/src/panel/time-select.vue?vue&type=template&id=51ab9320&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/date-picker/src/panel/time-select.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\nvar parseTime = function parseTime(time) {\n  var values = (time || '').split(':');\n  if (values.length >= 2) {\n    var hours = parseInt(values[0], 10);\n    var minutes = parseInt(values[1], 10);\n\n    return {\n      hours: hours,\n      minutes: minutes\n    };\n  }\n  /* istanbul ignore next */\n  return null;\n};\n\nvar compareTime = function compareTime(time1, time2) {\n  var value1 = parseTime(time1);\n  var value2 = parseTime(time2);\n\n  var minutes1 = value1.minutes + value1.hours * 60;\n  var minutes2 = value2.minutes + value2.hours * 60;\n\n  if (minutes1 === minutes2) {\n    return 0;\n  }\n\n  return minutes1 > minutes2 ? 1 : -1;\n};\n\nvar formatTime = function formatTime(time) {\n  return (time.hours < 10 ? '0' + time.hours : time.hours) + ':' + (time.minutes < 10 ? '0' + time.minutes : time.minutes);\n};\n\nvar nextTime = function nextTime(time, step) {\n  var timeValue = parseTime(time);\n  var stepValue = parseTime(step);\n\n  var next = {\n    hours: timeValue.hours,\n    minutes: timeValue.minutes\n  };\n\n  next.minutes += stepValue.minutes;\n  next.hours += stepValue.hours;\n\n  next.hours += Math.floor(next.minutes / 60);\n  next.minutes = next.minutes % 60;\n\n  return formatTime(next);\n};\n\n/* harmony default export */ var time_selectvue_type_script_lang_js_ = ({\n  components: { ElScrollbar: scrollbar_default.a },\n\n  watch: {\n    value: function value(val) {\n      var _this = this;\n\n      if (!val) return;\n      this.$nextTick(function () {\n        return _this.scrollToOption();\n      });\n    }\n  },\n\n  methods: {\n    handleClick: function handleClick(item) {\n      if (!item.disabled) {\n        this.$emit('pick', item.value);\n      }\n    },\n    handleClear: function handleClear() {\n      this.$emit('pick', null);\n    },\n    scrollToOption: function scrollToOption() {\n      var selector = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '.selected';\n\n      var menu = this.$refs.popper.querySelector('.el-picker-panel__content');\n      scroll_into_view_default()(menu, menu.querySelector(selector));\n    },\n    handleMenuEnter: function handleMenuEnter() {\n      var _this2 = this;\n\n      var selected = this.items.map(function (item) {\n        return item.value;\n      }).indexOf(this.value) !== -1;\n      var hasDefault = this.items.map(function (item) {\n        return item.value;\n      }).indexOf(this.defaultValue) !== -1;\n      var option = selected && '.selected' || hasDefault && '.default' || '.time-select-item:not(.disabled)';\n      this.$nextTick(function () {\n        return _this2.scrollToOption(option);\n      });\n    },\n    scrollDown: function scrollDown(step) {\n      var items = this.items;\n      var length = items.length;\n      var total = items.length;\n      var index = items.map(function (item) {\n        return item.value;\n      }).indexOf(this.value);\n      while (total--) {\n        index = (index + step + length) % length;\n        if (!items[index].disabled) {\n          this.$emit('pick', items[index].value, true);\n          return;\n        }\n      }\n    },\n    isValidValue: function isValidValue(date) {\n      return this.items.filter(function (item) {\n        return !item.disabled;\n      }).map(function (item) {\n        return item.value;\n      }).indexOf(date) !== -1;\n    },\n    handleKeydown: function handleKeydown(event) {\n      var keyCode = event.keyCode;\n      if (keyCode === 38 || keyCode === 40) {\n        var mapping = { 40: 1, 38: -1 };\n        var offset = mapping[keyCode.toString()];\n        this.scrollDown(offset);\n        event.stopPropagation();\n        return;\n      }\n    }\n  },\n\n  data: function data() {\n    return {\n      popperClass: '',\n      start: '09:00',\n      end: '18:00',\n      step: '00:30',\n      value: '',\n      defaultValue: '',\n      visible: false,\n      minTime: '',\n      maxTime: '',\n      width: 0\n    };\n  },\n\n\n  computed: {\n    items: function items() {\n      var start = this.start;\n      var end = this.end;\n      var step = this.step;\n\n      var result = [];\n\n      if (start && end && step) {\n        var current = start;\n        while (compareTime(current, end) <= 0) {\n          result.push({\n            value: current,\n            disabled: compareTime(current, this.minTime || '-1:-1') <= 0 || compareTime(current, this.maxTime || '100:100') >= 0\n          });\n          current = nextTime(current, step);\n        }\n      }\n\n      return result;\n    }\n  }\n});\n// CONCATENATED MODULE: ./packages/date-picker/src/panel/time-select.vue?vue&type=script&lang=js&\n /* harmony default export */ var panel_time_selectvue_type_script_lang_js_ = (time_selectvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/date-picker/src/panel/time-select.vue\n\n\n\n\n\n/* normalize component */\n\nvar time_select_component = normalizeComponent(\n  panel_time_selectvue_type_script_lang_js_,\n  time_selectvue_type_template_id_51ab9320_render,\n  time_selectvue_type_template_id_51ab9320_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var time_select_api; }\ntime_select_component.options.__file = \"packages/date-picker/src/panel/time-select.vue\"\n/* harmony default export */ var time_select = (time_select_component.exports);\n// CONCATENATED MODULE: ./packages/date-picker/src/picker/time-select.js\n\n\n\n/* harmony default export */ var picker_time_select = ({\n  mixins: [picker],\n\n  name: 'ElTimeSelect',\n\n  componentName: 'ElTimeSelect',\n\n  props: {\n    type: {\n      type: String,\n      default: 'time-select'\n    }\n  },\n\n  beforeCreate: function beforeCreate() {\n    this.panel = time_select;\n  }\n});\n// CONCATENATED MODULE: ./packages/time-select/index.js\n\n\n/* istanbul ignore next */\npicker_time_select.install = function (Vue) {\n  Vue.component(picker_time_select.name, picker_time_select);\n};\n\n/* harmony default export */ var packages_time_select = (picker_time_select);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/date-picker/src/panel/time-range.vue?vue&type=template&id=fb28660e&\nvar time_rangevue_type_template_id_fb28660e_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"transition\",\n    {\n      attrs: { name: \"el-zoom-in-top\" },\n      on: {\n        \"after-leave\": function($event) {\n          _vm.$emit(\"dodestroy\")\n        }\n      }\n    },\n    [\n      _c(\n        \"div\",\n        {\n          directives: [\n            {\n              name: \"show\",\n              rawName: \"v-show\",\n              value: _vm.visible,\n              expression: \"visible\"\n            }\n          ],\n          staticClass: \"el-time-range-picker el-picker-panel el-popper\",\n          class: _vm.popperClass\n        },\n        [\n          _c(\"div\", { staticClass: \"el-time-range-picker__content\" }, [\n            _c(\"div\", { staticClass: \"el-time-range-picker__cell\" }, [\n              _c(\"div\", { staticClass: \"el-time-range-picker__header\" }, [\n                _vm._v(_vm._s(_vm.t(\"el.datepicker.startTime\")))\n              ]),\n              _c(\n                \"div\",\n                {\n                  staticClass:\n                    \"el-time-range-picker__body el-time-panel__content\",\n                  class: {\n                    \"has-seconds\": _vm.showSeconds,\n                    \"is-arrow\": _vm.arrowControl\n                  }\n                },\n                [\n                  _c(\"time-spinner\", {\n                    ref: \"minSpinner\",\n                    attrs: {\n                      \"show-seconds\": _vm.showSeconds,\n                      \"am-pm-mode\": _vm.amPmMode,\n                      \"arrow-control\": _vm.arrowControl,\n                      date: _vm.minDate\n                    },\n                    on: {\n                      change: _vm.handleMinChange,\n                      \"select-range\": _vm.setMinSelectionRange\n                    }\n                  })\n                ],\n                1\n              )\n            ]),\n            _c(\"div\", { staticClass: \"el-time-range-picker__cell\" }, [\n              _c(\"div\", { staticClass: \"el-time-range-picker__header\" }, [\n                _vm._v(_vm._s(_vm.t(\"el.datepicker.endTime\")))\n              ]),\n              _c(\n                \"div\",\n                {\n                  staticClass:\n                    \"el-time-range-picker__body el-time-panel__content\",\n                  class: {\n                    \"has-seconds\": _vm.showSeconds,\n                    \"is-arrow\": _vm.arrowControl\n                  }\n                },\n                [\n                  _c(\"time-spinner\", {\n                    ref: \"maxSpinner\",\n                    attrs: {\n                      \"show-seconds\": _vm.showSeconds,\n                      \"am-pm-mode\": _vm.amPmMode,\n                      \"arrow-control\": _vm.arrowControl,\n                      date: _vm.maxDate\n                    },\n                    on: {\n                      change: _vm.handleMaxChange,\n                      \"select-range\": _vm.setMaxSelectionRange\n                    }\n                  })\n                ],\n                1\n              )\n            ])\n          ]),\n          _c(\"div\", { staticClass: \"el-time-panel__footer\" }, [\n            _c(\n              \"button\",\n              {\n                staticClass: \"el-time-panel__btn cancel\",\n                attrs: { type: \"button\" },\n                on: {\n                  click: function($event) {\n                    _vm.handleCancel()\n                  }\n                }\n              },\n              [_vm._v(_vm._s(_vm.t(\"el.datepicker.cancel\")))]\n            ),\n            _c(\n              \"button\",\n              {\n                staticClass: \"el-time-panel__btn confirm\",\n                attrs: { type: \"button\", disabled: _vm.btnDisabled },\n                on: {\n                  click: function($event) {\n                    _vm.handleConfirm()\n                  }\n                }\n              },\n              [_vm._v(_vm._s(_vm.t(\"el.datepicker.confirm\")))]\n            )\n          ])\n        ]\n      )\n    ]\n  )\n}\nvar time_rangevue_type_template_id_fb28660e_staticRenderFns = []\ntime_rangevue_type_template_id_fb28660e_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/date-picker/src/panel/time-range.vue?vue&type=template&id=fb28660e&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/date-picker/src/panel/time-range.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\nvar MIN_TIME = Object(date_util_[\"parseDate\"])('00:00:00', 'HH:mm:ss');\nvar MAX_TIME = Object(date_util_[\"parseDate\"])('23:59:59', 'HH:mm:ss');\n\nvar time_rangevue_type_script_lang_js_minTimeOfDay = function minTimeOfDay(date) {\n  return Object(date_util_[\"modifyDate\"])(MIN_TIME, date.getFullYear(), date.getMonth(), date.getDate());\n};\n\nvar time_rangevue_type_script_lang_js_maxTimeOfDay = function maxTimeOfDay(date) {\n  return Object(date_util_[\"modifyDate\"])(MAX_TIME, date.getFullYear(), date.getMonth(), date.getDate());\n};\n\n// increase time by amount of milliseconds, but within the range of day\nvar advanceTime = function advanceTime(date, amount) {\n  return new Date(Math.min(date.getTime() + amount, time_rangevue_type_script_lang_js_maxTimeOfDay(date).getTime()));\n};\n\n/* harmony default export */ var time_rangevue_type_script_lang_js_ = ({\n  mixins: [locale_default.a],\n\n  components: { TimeSpinner: time_spinner },\n\n  computed: {\n    showSeconds: function showSeconds() {\n      return (this.format || '').indexOf('ss') !== -1;\n    },\n    offset: function offset() {\n      return this.showSeconds ? 11 : 8;\n    },\n    spinner: function spinner() {\n      return this.selectionRange[0] < this.offset ? this.$refs.minSpinner : this.$refs.maxSpinner;\n    },\n    btnDisabled: function btnDisabled() {\n      return this.minDate.getTime() > this.maxDate.getTime();\n    },\n    amPmMode: function amPmMode() {\n      if ((this.format || '').indexOf('A') !== -1) return 'A';\n      if ((this.format || '').indexOf('a') !== -1) return 'a';\n      return '';\n    }\n  },\n\n  data: function data() {\n    return {\n      popperClass: '',\n      minDate: new Date(),\n      maxDate: new Date(),\n      value: [],\n      oldValue: [new Date(), new Date()],\n      defaultValue: null,\n      format: 'HH:mm:ss',\n      visible: false,\n      selectionRange: [0, 2],\n      arrowControl: false\n    };\n  },\n\n\n  watch: {\n    value: function value(_value) {\n      if (Array.isArray(_value)) {\n        this.minDate = new Date(_value[0]);\n        this.maxDate = new Date(_value[1]);\n      } else {\n        if (Array.isArray(this.defaultValue)) {\n          this.minDate = new Date(this.defaultValue[0]);\n          this.maxDate = new Date(this.defaultValue[1]);\n        } else if (this.defaultValue) {\n          this.minDate = new Date(this.defaultValue);\n          this.maxDate = advanceTime(new Date(this.defaultValue), 60 * 60 * 1000);\n        } else {\n          this.minDate = new Date();\n          this.maxDate = advanceTime(new Date(), 60 * 60 * 1000);\n        }\n      }\n    },\n    visible: function visible(val) {\n      var _this = this;\n\n      if (val) {\n        this.oldValue = this.value;\n        this.$nextTick(function () {\n          return _this.$refs.minSpinner.emitSelectRange('hours');\n        });\n      }\n    }\n  },\n\n  methods: {\n    handleClear: function handleClear() {\n      this.$emit('pick', null);\n    },\n    handleCancel: function handleCancel() {\n      this.$emit('pick', this.oldValue);\n    },\n    handleMinChange: function handleMinChange(date) {\n      this.minDate = Object(date_util_[\"clearMilliseconds\"])(date);\n      this.handleChange();\n    },\n    handleMaxChange: function handleMaxChange(date) {\n      this.maxDate = Object(date_util_[\"clearMilliseconds\"])(date);\n      this.handleChange();\n    },\n    handleChange: function handleChange() {\n      if (this.isValidValue([this.minDate, this.maxDate])) {\n        this.$refs.minSpinner.selectableRange = [[time_rangevue_type_script_lang_js_minTimeOfDay(this.minDate), this.maxDate]];\n        this.$refs.maxSpinner.selectableRange = [[this.minDate, time_rangevue_type_script_lang_js_maxTimeOfDay(this.maxDate)]];\n        this.$emit('pick', [this.minDate, this.maxDate], true);\n      }\n    },\n    setMinSelectionRange: function setMinSelectionRange(start, end) {\n      this.$emit('select-range', start, end, 'min');\n      this.selectionRange = [start, end];\n    },\n    setMaxSelectionRange: function setMaxSelectionRange(start, end) {\n      this.$emit('select-range', start, end, 'max');\n      this.selectionRange = [start + this.offset, end + this.offset];\n    },\n    handleConfirm: function handleConfirm() {\n      var visible = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n      var minSelectableRange = this.$refs.minSpinner.selectableRange;\n      var maxSelectableRange = this.$refs.maxSpinner.selectableRange;\n\n      this.minDate = Object(date_util_[\"limitTimeRange\"])(this.minDate, minSelectableRange, this.format);\n      this.maxDate = Object(date_util_[\"limitTimeRange\"])(this.maxDate, maxSelectableRange, this.format);\n\n      this.$emit('pick', [this.minDate, this.maxDate], visible);\n    },\n    adjustSpinners: function adjustSpinners() {\n      this.$refs.minSpinner.adjustSpinners();\n      this.$refs.maxSpinner.adjustSpinners();\n    },\n    changeSelectionRange: function changeSelectionRange(step) {\n      var list = this.showSeconds ? [0, 3, 6, 11, 14, 17] : [0, 3, 8, 11];\n      var mapping = ['hours', 'minutes'].concat(this.showSeconds ? ['seconds'] : []);\n      var index = list.indexOf(this.selectionRange[0]);\n      var next = (index + step + list.length) % list.length;\n      var half = list.length / 2;\n      if (next < half) {\n        this.$refs.minSpinner.emitSelectRange(mapping[next]);\n      } else {\n        this.$refs.maxSpinner.emitSelectRange(mapping[next - half]);\n      }\n    },\n    isValidValue: function isValidValue(date) {\n      return Array.isArray(date) && Object(date_util_[\"timeWithinRange\"])(this.minDate, this.$refs.minSpinner.selectableRange) && Object(date_util_[\"timeWithinRange\"])(this.maxDate, this.$refs.maxSpinner.selectableRange);\n    },\n    handleKeydown: function handleKeydown(event) {\n      var keyCode = event.keyCode;\n      var mapping = { 38: -1, 40: 1, 37: -1, 39: 1 };\n\n      // Left or Right\n      if (keyCode === 37 || keyCode === 39) {\n        var step = mapping[keyCode];\n        this.changeSelectionRange(step);\n        event.preventDefault();\n        return;\n      }\n\n      // Up or Down\n      if (keyCode === 38 || keyCode === 40) {\n        var _step = mapping[keyCode];\n        this.spinner.scrollDown(_step);\n        event.preventDefault();\n        return;\n      }\n    }\n  }\n});\n// CONCATENATED MODULE: ./packages/date-picker/src/panel/time-range.vue?vue&type=script&lang=js&\n /* harmony default export */ var panel_time_rangevue_type_script_lang_js_ = (time_rangevue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/date-picker/src/panel/time-range.vue\n\n\n\n\n\n/* normalize component */\n\nvar time_range_component = normalizeComponent(\n  panel_time_rangevue_type_script_lang_js_,\n  time_rangevue_type_template_id_fb28660e_render,\n  time_rangevue_type_template_id_fb28660e_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var time_range_api; }\ntime_range_component.options.__file = \"packages/date-picker/src/panel/time-range.vue\"\n/* harmony default export */ var time_range = (time_range_component.exports);\n// CONCATENATED MODULE: ./packages/date-picker/src/picker/time-picker.js\n\n\n\n\n/* harmony default export */ var time_picker = ({\n  mixins: [picker],\n\n  name: 'ElTimePicker',\n\n  props: {\n    isRange: Boolean,\n    arrowControl: Boolean\n  },\n\n  data: function data() {\n    return {\n      type: ''\n    };\n  },\n\n\n  watch: {\n    isRange: function isRange(_isRange) {\n      if (this.picker) {\n        this.unmountPicker();\n        this.type = _isRange ? 'timerange' : 'time';\n        this.panel = _isRange ? time_range : panel_time;\n        this.mountPicker();\n      } else {\n        this.type = _isRange ? 'timerange' : 'time';\n        this.panel = _isRange ? time_range : panel_time;\n      }\n    }\n  },\n\n  created: function created() {\n    this.type = this.isRange ? 'timerange' : 'time';\n    this.panel = this.isRange ? time_range : panel_time;\n  }\n});\n// CONCATENATED MODULE: ./packages/time-picker/index.js\n\n\n/* istanbul ignore next */\ntime_picker.install = function (Vue) {\n  Vue.component(time_picker.name, time_picker);\n};\n\n/* harmony default export */ var packages_time_picker = (time_picker);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/popover/src/main.vue?vue&type=template&id=52060272&\nvar mainvue_type_template_id_52060272_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"span\",\n    [\n      _c(\n        \"transition\",\n        {\n          attrs: { name: _vm.transition },\n          on: {\n            \"after-enter\": _vm.handleAfterEnter,\n            \"after-leave\": _vm.handleAfterLeave\n          }\n        },\n        [\n          _c(\n            \"div\",\n            {\n              directives: [\n                {\n                  name: \"show\",\n                  rawName: \"v-show\",\n                  value: !_vm.disabled && _vm.showPopper,\n                  expression: \"!disabled && showPopper\"\n                }\n              ],\n              ref: \"popper\",\n              staticClass: \"el-popover el-popper\",\n              class: [_vm.popperClass, _vm.content && \"el-popover--plain\"],\n              style: { width: _vm.width + \"px\" },\n              attrs: {\n                role: \"tooltip\",\n                id: _vm.tooltipId,\n                \"aria-hidden\":\n                  _vm.disabled || !_vm.showPopper ? \"true\" : \"false\"\n              }\n            },\n            [\n              _vm.title\n                ? _c(\"div\", {\n                    staticClass: \"el-popover__title\",\n                    domProps: { textContent: _vm._s(_vm.title) }\n                  })\n                : _vm._e(),\n              _vm._t(\"default\", [_vm._v(_vm._s(_vm.content))])\n            ],\n            2\n          )\n        ]\n      ),\n      _c(\n        \"span\",\n        { ref: \"wrapper\", staticClass: \"el-popover__reference-wrapper\" },\n        [_vm._t(\"reference\")],\n        2\n      )\n    ],\n    1\n  )\n}\nvar mainvue_type_template_id_52060272_staticRenderFns = []\nmainvue_type_template_id_52060272_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/popover/src/main.vue?vue&type=template&id=52060272&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/popover/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n/* harmony default export */ var mainvue_type_script_lang_js_ = ({\n  name: 'ElPopover',\n\n  mixins: [vue_popper_default.a],\n\n  props: {\n    trigger: {\n      type: String,\n      default: 'click',\n      validator: function validator(value) {\n        return ['click', 'focus', 'hover', 'manual'].indexOf(value) > -1;\n      }\n    },\n    openDelay: {\n      type: Number,\n      default: 0\n    },\n    closeDelay: {\n      type: Number,\n      default: 200\n    },\n    title: String,\n    disabled: Boolean,\n    content: String,\n    reference: {},\n    popperClass: String,\n    width: {},\n    visibleArrow: {\n      default: true\n    },\n    arrowOffset: {\n      type: Number,\n      default: 0\n    },\n    transition: {\n      type: String,\n      default: 'fade-in-linear'\n    },\n    tabindex: {\n      type: Number,\n      default: 0\n    }\n  },\n\n  computed: {\n    tooltipId: function tooltipId() {\n      return 'el-popover-' + Object(util_[\"generateId\"])();\n    }\n  },\n  watch: {\n    showPopper: function showPopper(val) {\n      if (this.disabled) {\n        return;\n      }\n      val ? this.$emit('show') : this.$emit('hide');\n    }\n  },\n\n  mounted: function mounted() {\n    var _this = this;\n\n    var reference = this.referenceElm = this.reference || this.$refs.reference;\n    var popper = this.popper || this.$refs.popper;\n\n    if (!reference && this.$refs.wrapper.children) {\n      reference = this.referenceElm = this.$refs.wrapper.children[0];\n    }\n    // 可访问性\n    if (reference) {\n      Object(dom_[\"addClass\"])(reference, 'el-popover__reference');\n      reference.setAttribute('aria-describedby', this.tooltipId);\n      reference.setAttribute('tabindex', this.tabindex); // tab序列\n      popper.setAttribute('tabindex', 0);\n\n      if (this.trigger !== 'click') {\n        Object(dom_[\"on\"])(reference, 'focusin', function () {\n          _this.handleFocus();\n          var instance = reference.__vue__;\n          if (instance && typeof instance.focus === 'function') {\n            instance.focus();\n          }\n        });\n        Object(dom_[\"on\"])(popper, 'focusin', this.handleFocus);\n        Object(dom_[\"on\"])(reference, 'focusout', this.handleBlur);\n        Object(dom_[\"on\"])(popper, 'focusout', this.handleBlur);\n      }\n      Object(dom_[\"on\"])(reference, 'keydown', this.handleKeydown);\n      Object(dom_[\"on\"])(reference, 'click', this.handleClick);\n    }\n    if (this.trigger === 'click') {\n      Object(dom_[\"on\"])(reference, 'click', this.doToggle);\n      Object(dom_[\"on\"])(document, 'click', this.handleDocumentClick);\n    } else if (this.trigger === 'hover') {\n      Object(dom_[\"on\"])(reference, 'mouseenter', this.handleMouseEnter);\n      Object(dom_[\"on\"])(popper, 'mouseenter', this.handleMouseEnter);\n      Object(dom_[\"on\"])(reference, 'mouseleave', this.handleMouseLeave);\n      Object(dom_[\"on\"])(popper, 'mouseleave', this.handleMouseLeave);\n    } else if (this.trigger === 'focus') {\n      if (this.tabindex < 0) {\n        console.warn('[Element Warn][Popover]a negative taindex means that the element cannot be focused by tab key');\n      }\n      if (reference.querySelector('input, textarea')) {\n        Object(dom_[\"on\"])(reference, 'focusin', this.doShow);\n        Object(dom_[\"on\"])(reference, 'focusout', this.doClose);\n      } else {\n        Object(dom_[\"on\"])(reference, 'mousedown', this.doShow);\n        Object(dom_[\"on\"])(reference, 'mouseup', this.doClose);\n      }\n    }\n  },\n  beforeDestroy: function beforeDestroy() {\n    this.cleanup();\n  },\n  deactivated: function deactivated() {\n    this.cleanup();\n  },\n\n\n  methods: {\n    doToggle: function doToggle() {\n      this.showPopper = !this.showPopper;\n    },\n    doShow: function doShow() {\n      this.showPopper = true;\n    },\n    doClose: function doClose() {\n      this.showPopper = false;\n    },\n    handleFocus: function handleFocus() {\n      Object(dom_[\"addClass\"])(this.referenceElm, 'focusing');\n      if (this.trigger === 'click' || this.trigger === 'focus') this.showPopper = true;\n    },\n    handleClick: function handleClick() {\n      Object(dom_[\"removeClass\"])(this.referenceElm, 'focusing');\n    },\n    handleBlur: function handleBlur() {\n      Object(dom_[\"removeClass\"])(this.referenceElm, 'focusing');\n      if (this.trigger === 'click' || this.trigger === 'focus') this.showPopper = false;\n    },\n    handleMouseEnter: function handleMouseEnter() {\n      var _this2 = this;\n\n      clearTimeout(this._timer);\n      if (this.openDelay) {\n        this._timer = setTimeout(function () {\n          _this2.showPopper = true;\n        }, this.openDelay);\n      } else {\n        this.showPopper = true;\n      }\n    },\n    handleKeydown: function handleKeydown(ev) {\n      if (ev.keyCode === 27 && this.trigger !== 'manual') {\n        // esc\n        this.doClose();\n      }\n    },\n    handleMouseLeave: function handleMouseLeave() {\n      var _this3 = this;\n\n      clearTimeout(this._timer);\n      if (this.closeDelay) {\n        this._timer = setTimeout(function () {\n          _this3.showPopper = false;\n        }, this.closeDelay);\n      } else {\n        this.showPopper = false;\n      }\n    },\n    handleDocumentClick: function handleDocumentClick(e) {\n      var reference = this.reference || this.$refs.reference;\n      var popper = this.popper || this.$refs.popper;\n\n      if (!reference && this.$refs.wrapper.children) {\n        reference = this.referenceElm = this.$refs.wrapper.children[0];\n      }\n      if (!this.$el || !reference || this.$el.contains(e.target) || reference.contains(e.target) || !popper || popper.contains(e.target)) return;\n      this.showPopper = false;\n    },\n    handleAfterEnter: function handleAfterEnter() {\n      this.$emit('after-enter');\n    },\n    handleAfterLeave: function handleAfterLeave() {\n      this.$emit('after-leave');\n      this.doDestroy();\n    },\n    cleanup: function cleanup() {\n      if (this.openDelay || this.closeDelay) {\n        clearTimeout(this._timer);\n      }\n    }\n  },\n\n  destroyed: function destroyed() {\n    var reference = this.reference;\n\n    Object(dom_[\"off\"])(reference, 'click', this.doToggle);\n    Object(dom_[\"off\"])(reference, 'mouseup', this.doClose);\n    Object(dom_[\"off\"])(reference, 'mousedown', this.doShow);\n    Object(dom_[\"off\"])(reference, 'focusin', this.doShow);\n    Object(dom_[\"off\"])(reference, 'focusout', this.doClose);\n    Object(dom_[\"off\"])(reference, 'mousedown', this.doShow);\n    Object(dom_[\"off\"])(reference, 'mouseup', this.doClose);\n    Object(dom_[\"off\"])(reference, 'mouseleave', this.handleMouseLeave);\n    Object(dom_[\"off\"])(reference, 'mouseenter', this.handleMouseEnter);\n    Object(dom_[\"off\"])(document, 'click', this.handleDocumentClick);\n  }\n});\n// CONCATENATED MODULE: ./packages/popover/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_mainvue_type_script_lang_js_ = (mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/popover/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar main_component = normalizeComponent(\n  src_mainvue_type_script_lang_js_,\n  mainvue_type_template_id_52060272_render,\n  mainvue_type_template_id_52060272_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var main_api; }\nmain_component.options.__file = \"packages/popover/src/main.vue\"\n/* harmony default export */ var main = (main_component.exports);\n// CONCATENATED MODULE: ./packages/popover/src/directive.js\nvar getReference = function getReference(el, binding, vnode) {\n  var _ref = binding.expression ? binding.value : binding.arg;\n  var popper = vnode.context.$refs[_ref];\n  if (popper) {\n    if (Array.isArray(popper)) {\n      popper[0].$refs.reference = el;\n    } else {\n      popper.$refs.reference = el;\n    }\n  }\n};\n\n/* harmony default export */ var directive = ({\n  bind: function bind(el, binding, vnode) {\n    getReference(el, binding, vnode);\n  },\n  inserted: function inserted(el, binding, vnode) {\n    getReference(el, binding, vnode);\n  }\n});\n// CONCATENATED MODULE: ./packages/popover/index.js\n\n\n\n\nexternal_vue_default.a.directive('popover', directive);\n\n/* istanbul ignore next */\nmain.install = function (Vue) {\n  Vue.directive('popover', directive);\n  Vue.component(main.name, main);\n};\nmain.directive = directive;\n\n/* harmony default export */ var popover = (main);\n// CONCATENATED MODULE: ./packages/tooltip/src/main.js\n\n\n\n\n\n\n/* harmony default export */ var src_main = ({\n  name: 'ElTooltip',\n\n  mixins: [vue_popper_default.a],\n\n  props: {\n    openDelay: {\n      type: Number,\n      default: 0\n    },\n    disabled: Boolean,\n    manual: Boolean,\n    effect: {\n      type: String,\n      default: 'dark'\n    },\n    arrowOffset: {\n      type: Number,\n      default: 0\n    },\n    popperClass: String,\n    content: String,\n    visibleArrow: {\n      default: true\n    },\n    transition: {\n      type: String,\n      default: 'el-fade-in-linear'\n    },\n    popperOptions: {\n      default: function _default() {\n        return {\n          boundariesPadding: 10,\n          gpuAcceleration: false\n        };\n      }\n    },\n    enterable: {\n      type: Boolean,\n      default: true\n    },\n    hideAfter: {\n      type: Number,\n      default: 0\n    },\n    tabindex: {\n      type: Number,\n      default: 0\n    }\n  },\n\n  data: function data() {\n    return {\n      tooltipId: 'el-tooltip-' + Object(util_[\"generateId\"])(),\n      timeoutPending: null,\n      focusing: false\n    };\n  },\n  beforeCreate: function beforeCreate() {\n    var _this = this;\n\n    if (this.$isServer) return;\n\n    this.popperVM = new external_vue_default.a({\n      data: { node: '' },\n      render: function render(h) {\n        return this.node;\n      }\n    }).$mount();\n\n    this.debounceClose = debounce_default()(200, function () {\n      return _this.handleClosePopper();\n    });\n  },\n  render: function render(h) {\n    var _this2 = this;\n\n    if (this.popperVM) {\n      this.popperVM.node = h(\n        'transition',\n        {\n          attrs: {\n            name: this.transition\n          },\n          on: {\n            'afterLeave': this.doDestroy\n          }\n        },\n        [h(\n          'div',\n          {\n            on: {\n              'mouseleave': function mouseleave() {\n                _this2.setExpectedState(false);_this2.debounceClose();\n              },\n              'mouseenter': function mouseenter() {\n                _this2.setExpectedState(true);\n              }\n            },\n\n            ref: 'popper',\n            attrs: { role: 'tooltip',\n              id: this.tooltipId,\n              'aria-hidden': this.disabled || !this.showPopper ? 'true' : 'false'\n            },\n            directives: [{\n              name: 'show',\n              value: !this.disabled && this.showPopper\n            }],\n\n            'class': ['el-tooltip__popper', 'is-' + this.effect, this.popperClass] },\n          [this.$slots.content || this.content]\n        )]\n      );\n    }\n\n    var firstElement = this.getFirstElement();\n    if (!firstElement) return null;\n\n    var data = firstElement.data = firstElement.data || {};\n    data.staticClass = this.addTooltipClass(data.staticClass);\n\n    return firstElement;\n  },\n  mounted: function mounted() {\n    var _this3 = this;\n\n    this.referenceElm = this.$el;\n    if (this.$el.nodeType === 1) {\n      this.$el.setAttribute('aria-describedby', this.tooltipId);\n      this.$el.setAttribute('tabindex', this.tabindex);\n      Object(dom_[\"on\"])(this.referenceElm, 'mouseenter', this.show);\n      Object(dom_[\"on\"])(this.referenceElm, 'mouseleave', this.hide);\n      Object(dom_[\"on\"])(this.referenceElm, 'focus', function () {\n        if (!_this3.$slots.default || !_this3.$slots.default.length) {\n          _this3.handleFocus();\n          return;\n        }\n        var instance = _this3.$slots.default[0].componentInstance;\n        if (instance && instance.focus) {\n          instance.focus();\n        } else {\n          _this3.handleFocus();\n        }\n      });\n      Object(dom_[\"on\"])(this.referenceElm, 'blur', this.handleBlur);\n      Object(dom_[\"on\"])(this.referenceElm, 'click', this.removeFocusing);\n    }\n    // fix issue https://github.com/ElemeFE/element/issues/14424\n    if (this.value && this.popperVM) {\n      this.popperVM.$nextTick(function () {\n        if (_this3.value) {\n          _this3.updatePopper();\n        }\n      });\n    }\n  },\n\n  watch: {\n    focusing: function focusing(val) {\n      if (val) {\n        Object(dom_[\"addClass\"])(this.referenceElm, 'focusing');\n      } else {\n        Object(dom_[\"removeClass\"])(this.referenceElm, 'focusing');\n      }\n    }\n  },\n  methods: {\n    show: function show() {\n      this.setExpectedState(true);\n      this.handleShowPopper();\n    },\n    hide: function hide() {\n      this.setExpectedState(false);\n      this.debounceClose();\n    },\n    handleFocus: function handleFocus() {\n      this.focusing = true;\n      this.show();\n    },\n    handleBlur: function handleBlur() {\n      this.focusing = false;\n      this.hide();\n    },\n    removeFocusing: function removeFocusing() {\n      this.focusing = false;\n    },\n    addTooltipClass: function addTooltipClass(prev) {\n      if (!prev) {\n        return 'el-tooltip';\n      } else {\n        return 'el-tooltip ' + prev.replace('el-tooltip', '');\n      }\n    },\n    handleShowPopper: function handleShowPopper() {\n      var _this4 = this;\n\n      if (!this.expectedState || this.manual) return;\n      clearTimeout(this.timeout);\n      this.timeout = setTimeout(function () {\n        _this4.showPopper = true;\n      }, this.openDelay);\n\n      if (this.hideAfter > 0) {\n        this.timeoutPending = setTimeout(function () {\n          _this4.showPopper = false;\n        }, this.hideAfter);\n      }\n    },\n    handleClosePopper: function handleClosePopper() {\n      if (this.enterable && this.expectedState || this.manual) return;\n      clearTimeout(this.timeout);\n\n      if (this.timeoutPending) {\n        clearTimeout(this.timeoutPending);\n      }\n      this.showPopper = false;\n\n      if (this.disabled) {\n        this.doDestroy();\n      }\n    },\n    setExpectedState: function setExpectedState(expectedState) {\n      if (expectedState === false) {\n        clearTimeout(this.timeoutPending);\n      }\n      this.expectedState = expectedState;\n    },\n    getFirstElement: function getFirstElement() {\n      var slots = this.$slots.default;\n      if (!Array.isArray(slots)) return null;\n      var element = null;\n      for (var index = 0; index < slots.length; index++) {\n        if (slots[index] && slots[index].tag) {\n          element = slots[index];\n          break;\n        };\n      }\n      return element;\n    }\n  },\n\n  beforeDestroy: function beforeDestroy() {\n    this.popperVM && this.popperVM.$destroy();\n  },\n  destroyed: function destroyed() {\n    var reference = this.referenceElm;\n    if (reference.nodeType === 1) {\n      Object(dom_[\"off\"])(reference, 'mouseenter', this.show);\n      Object(dom_[\"off\"])(reference, 'mouseleave', this.hide);\n      Object(dom_[\"off\"])(reference, 'focus', this.handleFocus);\n      Object(dom_[\"off\"])(reference, 'blur', this.handleBlur);\n      Object(dom_[\"off\"])(reference, 'click', this.removeFocusing);\n    }\n  }\n});\n// CONCATENATED MODULE: ./packages/tooltip/index.js\n\n\n/* istanbul ignore next */\nsrc_main.install = function (Vue) {\n  Vue.component(src_main.name, src_main);\n};\n\n/* harmony default export */ var packages_tooltip = (src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/message-box/src/main.vue?vue&type=template&id=6b29b012&\nvar mainvue_type_template_id_6b29b012_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\"transition\", { attrs: { name: \"msgbox-fade\" } }, [\n    _c(\n      \"div\",\n      {\n        directives: [\n          {\n            name: \"show\",\n            rawName: \"v-show\",\n            value: _vm.visible,\n            expression: \"visible\"\n          }\n        ],\n        staticClass: \"el-message-box__wrapper\",\n        attrs: {\n          tabindex: \"-1\",\n          role: \"dialog\",\n          \"aria-modal\": \"true\",\n          \"aria-label\": _vm.title || \"dialog\"\n        },\n        on: {\n          click: function($event) {\n            if ($event.target !== $event.currentTarget) {\n              return null\n            }\n            return _vm.handleWrapperClick($event)\n          }\n        }\n      },\n      [\n        _c(\n          \"div\",\n          {\n            staticClass: \"el-message-box\",\n            class: [_vm.customClass, _vm.center && \"el-message-box--center\"]\n          },\n          [\n            _vm.title !== null\n              ? _c(\"div\", { staticClass: \"el-message-box__header\" }, [\n                  _c(\"div\", { staticClass: \"el-message-box__title\" }, [\n                    _vm.icon && _vm.center\n                      ? _c(\"div\", {\n                          class: [\"el-message-box__status\", _vm.icon]\n                        })\n                      : _vm._e(),\n                    _c(\"span\", [_vm._v(_vm._s(_vm.title))])\n                  ]),\n                  _vm.showClose\n                    ? _c(\n                        \"button\",\n                        {\n                          staticClass: \"el-message-box__headerbtn\",\n                          attrs: { type: \"button\", \"aria-label\": \"Close\" },\n                          on: {\n                            click: function($event) {\n                              _vm.handleAction(\n                                _vm.distinguishCancelAndClose\n                                  ? \"close\"\n                                  : \"cancel\"\n                              )\n                            },\n                            keydown: function($event) {\n                              if (\n                                !(\"button\" in $event) &&\n                                _vm._k(\n                                  $event.keyCode,\n                                  \"enter\",\n                                  13,\n                                  $event.key,\n                                  \"Enter\"\n                                )\n                              ) {\n                                return null\n                              }\n                              _vm.handleAction(\n                                _vm.distinguishCancelAndClose\n                                  ? \"close\"\n                                  : \"cancel\"\n                              )\n                            }\n                          }\n                        },\n                        [\n                          _c(\"i\", {\n                            staticClass: \"el-message-box__close el-icon-close\"\n                          })\n                        ]\n                      )\n                    : _vm._e()\n                ])\n              : _vm._e(),\n            _c(\"div\", { staticClass: \"el-message-box__content\" }, [\n              _c(\"div\", { staticClass: \"el-message-box__container\" }, [\n                _vm.icon && !_vm.center && _vm.message !== \"\"\n                  ? _c(\"div\", { class: [\"el-message-box__status\", _vm.icon] })\n                  : _vm._e(),\n                _vm.message !== \"\"\n                  ? _c(\n                      \"div\",\n                      { staticClass: \"el-message-box__message\" },\n                      [\n                        _vm._t(\"default\", [\n                          !_vm.dangerouslyUseHTMLString\n                            ? _c(\"p\", [_vm._v(_vm._s(_vm.message))])\n                            : _c(\"p\", {\n                                domProps: { innerHTML: _vm._s(_vm.message) }\n                              })\n                        ])\n                      ],\n                      2\n                    )\n                  : _vm._e()\n              ]),\n              _c(\n                \"div\",\n                {\n                  directives: [\n                    {\n                      name: \"show\",\n                      rawName: \"v-show\",\n                      value: _vm.showInput,\n                      expression: \"showInput\"\n                    }\n                  ],\n                  staticClass: \"el-message-box__input\"\n                },\n                [\n                  _c(\"el-input\", {\n                    ref: \"input\",\n                    attrs: {\n                      type: _vm.inputType,\n                      placeholder: _vm.inputPlaceholder\n                    },\n                    nativeOn: {\n                      keydown: function($event) {\n                        if (\n                          !(\"button\" in $event) &&\n                          _vm._k(\n                            $event.keyCode,\n                            \"enter\",\n                            13,\n                            $event.key,\n                            \"Enter\"\n                          )\n                        ) {\n                          return null\n                        }\n                        return _vm.handleInputEnter($event)\n                      }\n                    },\n                    model: {\n                      value: _vm.inputValue,\n                      callback: function($$v) {\n                        _vm.inputValue = $$v\n                      },\n                      expression: \"inputValue\"\n                    }\n                  }),\n                  _c(\n                    \"div\",\n                    {\n                      staticClass: \"el-message-box__errormsg\",\n                      style: {\n                        visibility: !!_vm.editorErrorMessage\n                          ? \"visible\"\n                          : \"hidden\"\n                      }\n                    },\n                    [_vm._v(_vm._s(_vm.editorErrorMessage))]\n                  )\n                ],\n                1\n              )\n            ]),\n            _c(\n              \"div\",\n              { staticClass: \"el-message-box__btns\" },\n              [\n                _vm.showCancelButton\n                  ? _c(\n                      \"el-button\",\n                      {\n                        class: [_vm.cancelButtonClasses],\n                        attrs: {\n                          loading: _vm.cancelButtonLoading,\n                          round: _vm.roundButton,\n                          size: \"small\"\n                        },\n                        on: {\n                          keydown: function($event) {\n                            if (\n                              !(\"button\" in $event) &&\n                              _vm._k(\n                                $event.keyCode,\n                                \"enter\",\n                                13,\n                                $event.key,\n                                \"Enter\"\n                              )\n                            ) {\n                              return null\n                            }\n                            _vm.handleAction(\"cancel\")\n                          }\n                        },\n                        nativeOn: {\n                          click: function($event) {\n                            _vm.handleAction(\"cancel\")\n                          }\n                        }\n                      },\n                      [\n                        _vm._v(\n                          \"\\n          \" +\n                            _vm._s(\n                              _vm.cancelButtonText ||\n                                _vm.t(\"el.messagebox.cancel\")\n                            ) +\n                            \"\\n        \"\n                        )\n                      ]\n                    )\n                  : _vm._e(),\n                _c(\n                  \"el-button\",\n                  {\n                    directives: [\n                      {\n                        name: \"show\",\n                        rawName: \"v-show\",\n                        value: _vm.showConfirmButton,\n                        expression: \"showConfirmButton\"\n                      }\n                    ],\n                    ref: \"confirm\",\n                    class: [_vm.confirmButtonClasses],\n                    attrs: {\n                      loading: _vm.confirmButtonLoading,\n                      round: _vm.roundButton,\n                      size: \"small\"\n                    },\n                    on: {\n                      keydown: function($event) {\n                        if (\n                          !(\"button\" in $event) &&\n                          _vm._k(\n                            $event.keyCode,\n                            \"enter\",\n                            13,\n                            $event.key,\n                            \"Enter\"\n                          )\n                        ) {\n                          return null\n                        }\n                        _vm.handleAction(\"confirm\")\n                      }\n                    },\n                    nativeOn: {\n                      click: function($event) {\n                        _vm.handleAction(\"confirm\")\n                      }\n                    }\n                  },\n                  [\n                    _vm._v(\n                      \"\\n          \" +\n                        _vm._s(\n                          _vm.confirmButtonText ||\n                            _vm.t(\"el.messagebox.confirm\")\n                        ) +\n                        \"\\n        \"\n                    )\n                  ]\n                )\n              ],\n              1\n            )\n          ]\n        )\n      ]\n    )\n  ])\n}\nvar mainvue_type_template_id_6b29b012_staticRenderFns = []\nmainvue_type_template_id_6b29b012_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/message-box/src/main.vue?vue&type=template&id=6b29b012&\n\n// EXTERNAL MODULE: external \"element-ui/lib/locale\"\nvar lib_locale_ = __nested_webpack_require_8926__(12);\nvar lib_locale_default = /*#__PURE__*/__nested_webpack_require_8926__.n(lib_locale_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/aria-dialog\"\nvar aria_dialog_ = __nested_webpack_require_8926__(40);\nvar aria_dialog_default = /*#__PURE__*/__nested_webpack_require_8926__.n(aria_dialog_);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/message-box/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n\n\n\nvar messageBox = void 0;\nvar typeMap = {\n  success: 'success',\n  info: 'info',\n  warning: 'warning',\n  error: 'error'\n};\n\n/* harmony default export */ var message_box_src_mainvue_type_script_lang_js_ = ({\n  mixins: [popup_default.a, locale_default.a],\n\n  props: {\n    modal: {\n      default: true\n    },\n    lockScroll: {\n      default: true\n    },\n    showClose: {\n      type: Boolean,\n      default: true\n    },\n    closeOnClickModal: {\n      default: true\n    },\n    closeOnPressEscape: {\n      default: true\n    },\n    closeOnHashChange: {\n      default: true\n    },\n    center: {\n      default: false,\n      type: Boolean\n    },\n    roundButton: {\n      default: false,\n      type: Boolean\n    }\n  },\n\n  components: {\n    ElInput: input_default.a,\n    ElButton: button_default.a\n  },\n\n  computed: {\n    icon: function icon() {\n      var type = this.type,\n          iconClass = this.iconClass;\n\n      return iconClass || (type && typeMap[type] ? 'el-icon-' + typeMap[type] : '');\n    },\n    confirmButtonClasses: function confirmButtonClasses() {\n      return 'el-button--primary ' + this.confirmButtonClass;\n    },\n    cancelButtonClasses: function cancelButtonClasses() {\n      return '' + this.cancelButtonClass;\n    }\n  },\n\n  methods: {\n    getSafeClose: function getSafeClose() {\n      var _this = this;\n\n      var currentId = this.uid;\n      return function () {\n        _this.$nextTick(function () {\n          if (currentId === _this.uid) _this.doClose();\n        });\n      };\n    },\n    doClose: function doClose() {\n      var _this2 = this;\n\n      if (!this.visible) return;\n      this.visible = false;\n      this._closing = true;\n\n      this.onClose && this.onClose();\n      messageBox.closeDialog(); // 解绑\n      if (this.lockScroll) {\n        setTimeout(this.restoreBodyStyle, 200);\n      }\n      this.opened = false;\n      this.doAfterClose();\n      setTimeout(function () {\n        if (_this2.action) _this2.callback(_this2.action, _this2);\n      });\n    },\n    handleWrapperClick: function handleWrapperClick() {\n      if (this.closeOnClickModal) {\n        this.handleAction(this.distinguishCancelAndClose ? 'close' : 'cancel');\n      }\n    },\n    handleInputEnter: function handleInputEnter() {\n      if (this.inputType !== 'textarea') {\n        return this.handleAction('confirm');\n      }\n    },\n    handleAction: function handleAction(action) {\n      if (this.$type === 'prompt' && action === 'confirm' && !this.validate()) {\n        return;\n      }\n      this.action = action;\n      if (typeof this.beforeClose === 'function') {\n        this.close = this.getSafeClose();\n        this.beforeClose(action, this, this.close);\n      } else {\n        this.doClose();\n      }\n    },\n    validate: function validate() {\n      if (this.$type === 'prompt') {\n        var inputPattern = this.inputPattern;\n        if (inputPattern && !inputPattern.test(this.inputValue || '')) {\n          this.editorErrorMessage = this.inputErrorMessage || Object(lib_locale_[\"t\"])('el.messagebox.error');\n          Object(dom_[\"addClass\"])(this.getInputElement(), 'invalid');\n          return false;\n        }\n        var inputValidator = this.inputValidator;\n        if (typeof inputValidator === 'function') {\n          var validateResult = inputValidator(this.inputValue);\n          if (validateResult === false) {\n            this.editorErrorMessage = this.inputErrorMessage || Object(lib_locale_[\"t\"])('el.messagebox.error');\n            Object(dom_[\"addClass\"])(this.getInputElement(), 'invalid');\n            return false;\n          }\n          if (typeof validateResult === 'string') {\n            this.editorErrorMessage = validateResult;\n            Object(dom_[\"addClass\"])(this.getInputElement(), 'invalid');\n            return false;\n          }\n        }\n      }\n      this.editorErrorMessage = '';\n      Object(dom_[\"removeClass\"])(this.getInputElement(), 'invalid');\n      return true;\n    },\n    getFirstFocus: function getFirstFocus() {\n      var btn = this.$el.querySelector('.el-message-box__btns .el-button');\n      var title = this.$el.querySelector('.el-message-box__btns .el-message-box__title');\n      return btn || title;\n    },\n    getInputElement: function getInputElement() {\n      var inputRefs = this.$refs.input.$refs;\n      return inputRefs.input || inputRefs.textarea;\n    },\n    handleClose: function handleClose() {\n      this.handleAction('close');\n    }\n  },\n\n  watch: {\n    inputValue: {\n      immediate: true,\n      handler: function handler(val) {\n        var _this3 = this;\n\n        this.$nextTick(function (_) {\n          if (_this3.$type === 'prompt' && val !== null) {\n            _this3.validate();\n          }\n        });\n      }\n    },\n\n    visible: function visible(val) {\n      var _this4 = this;\n\n      if (val) {\n        this.uid++;\n        if (this.$type === 'alert' || this.$type === 'confirm') {\n          this.$nextTick(function () {\n            _this4.$refs.confirm.$el.focus();\n          });\n        }\n        this.focusAfterClosed = document.activeElement;\n        messageBox = new aria_dialog_default.a(this.$el, this.focusAfterClosed, this.getFirstFocus());\n      }\n\n      // prompt\n      if (this.$type !== 'prompt') return;\n      if (val) {\n        setTimeout(function () {\n          if (_this4.$refs.input && _this4.$refs.input.$el) {\n            _this4.getInputElement().focus();\n          }\n        }, 500);\n      } else {\n        this.editorErrorMessage = '';\n        Object(dom_[\"removeClass\"])(this.getInputElement(), 'invalid');\n      }\n    }\n  },\n\n  mounted: function mounted() {\n    var _this5 = this;\n\n    this.$nextTick(function () {\n      if (_this5.closeOnHashChange) {\n        window.addEventListener('hashchange', _this5.close);\n      }\n    });\n  },\n  beforeDestroy: function beforeDestroy() {\n    if (this.closeOnHashChange) {\n      window.removeEventListener('hashchange', this.close);\n    }\n    setTimeout(function () {\n      messageBox.closeDialog();\n    });\n  },\n  data: function data() {\n    return {\n      uid: 1,\n      title: undefined,\n      message: '',\n      type: '',\n      iconClass: '',\n      customClass: '',\n      showInput: false,\n      inputValue: null,\n      inputPlaceholder: '',\n      inputType: 'text',\n      inputPattern: null,\n      inputValidator: null,\n      inputErrorMessage: '',\n      showConfirmButton: true,\n      showCancelButton: false,\n      action: '',\n      confirmButtonText: '',\n      cancelButtonText: '',\n      confirmButtonLoading: false,\n      cancelButtonLoading: false,\n      confirmButtonClass: '',\n      confirmButtonDisabled: false,\n      cancelButtonClass: '',\n      editorErrorMessage: null,\n      callback: null,\n      dangerouslyUseHTMLString: false,\n      focusAfterClosed: null,\n      isOnComposition: false,\n      distinguishCancelAndClose: false\n    };\n  }\n});\n// CONCATENATED MODULE: ./packages/message-box/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_message_box_src_mainvue_type_script_lang_js_ = (message_box_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/message-box/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar src_main_component = normalizeComponent(\n  packages_message_box_src_mainvue_type_script_lang_js_,\n  mainvue_type_template_id_6b29b012_render,\n  mainvue_type_template_id_6b29b012_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var src_main_api; }\nsrc_main_component.options.__file = \"packages/message-box/src/main.vue\"\n/* harmony default export */ var message_box_src_main = (src_main_component.exports);\n// EXTERNAL MODULE: external \"element-ui/lib/utils/vdom\"\nvar vdom_ = __nested_webpack_require_8926__(22);\n\n// CONCATENATED MODULE: ./packages/message-box/src/main.js\nvar main_typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar main_defaults = {\n  title: null,\n  message: '',\n  type: '',\n  iconClass: '',\n  showInput: false,\n  showClose: true,\n  modalFade: true,\n  lockScroll: true,\n  closeOnClickModal: true,\n  closeOnPressEscape: true,\n  closeOnHashChange: true,\n  inputValue: null,\n  inputPlaceholder: '',\n  inputType: 'text',\n  inputPattern: null,\n  inputValidator: null,\n  inputErrorMessage: '',\n  showConfirmButton: true,\n  showCancelButton: false,\n  confirmButtonPosition: 'right',\n  confirmButtonHighlight: false,\n  cancelButtonHighlight: false,\n  confirmButtonText: '',\n  cancelButtonText: '',\n  confirmButtonClass: '',\n  cancelButtonClass: '',\n  customClass: '',\n  beforeClose: null,\n  dangerouslyUseHTMLString: false,\n  center: false,\n  roundButton: false,\n  distinguishCancelAndClose: false\n};\n\n\n\n\n\n\nvar MessageBoxConstructor = external_vue_default.a.extend(message_box_src_main);\n\nvar currentMsg = void 0,\n    main_instance = void 0;\nvar msgQueue = [];\n\nvar defaultCallback = function defaultCallback(action) {\n  if (currentMsg) {\n    var callback = currentMsg.callback;\n    if (typeof callback === 'function') {\n      if (main_instance.showInput) {\n        callback(main_instance.inputValue, action);\n      } else {\n        callback(action);\n      }\n    }\n    if (currentMsg.resolve) {\n      if (action === 'confirm') {\n        if (main_instance.showInput) {\n          currentMsg.resolve({ value: main_instance.inputValue, action: action });\n        } else {\n          currentMsg.resolve(action);\n        }\n      } else if (currentMsg.reject && (action === 'cancel' || action === 'close')) {\n        currentMsg.reject(action);\n      }\n    }\n  }\n};\n\nvar initInstance = function initInstance() {\n  main_instance = new MessageBoxConstructor({\n    el: document.createElement('div')\n  });\n\n  main_instance.callback = defaultCallback;\n};\n\nvar main_showNextMsg = function showNextMsg() {\n  if (!main_instance) {\n    initInstance();\n  }\n  main_instance.action = '';\n\n  if (!main_instance.visible || main_instance.closeTimer) {\n    if (msgQueue.length > 0) {\n      currentMsg = msgQueue.shift();\n\n      var options = currentMsg.options;\n      for (var prop in options) {\n        if (options.hasOwnProperty(prop)) {\n          main_instance[prop] = options[prop];\n        }\n      }\n      if (options.callback === undefined) {\n        main_instance.callback = defaultCallback;\n      }\n\n      var oldCb = main_instance.callback;\n      main_instance.callback = function (action, instance) {\n        oldCb(action, instance);\n        showNextMsg();\n      };\n      if (Object(vdom_[\"isVNode\"])(main_instance.message)) {\n        main_instance.$slots.default = [main_instance.message];\n        main_instance.message = null;\n      } else {\n        delete main_instance.$slots.default;\n      }\n      ['modal', 'showClose', 'closeOnClickModal', 'closeOnPressEscape', 'closeOnHashChange'].forEach(function (prop) {\n        if (main_instance[prop] === undefined) {\n          main_instance[prop] = true;\n        }\n      });\n      document.body.appendChild(main_instance.$el);\n\n      external_vue_default.a.nextTick(function () {\n        main_instance.visible = true;\n      });\n    }\n  }\n};\n\nvar main_MessageBox = function MessageBox(options, callback) {\n  if (external_vue_default.a.prototype.$isServer) return;\n  if (typeof options === 'string' || Object(vdom_[\"isVNode\"])(options)) {\n    options = {\n      message: options\n    };\n    if (typeof arguments[1] === 'string') {\n      options.title = arguments[1];\n    }\n  } else if (options.callback && !callback) {\n    callback = options.callback;\n  }\n\n  if (typeof Promise !== 'undefined') {\n    return new Promise(function (resolve, reject) {\n      // eslint-disable-line\n      msgQueue.push({\n        options: merge_default()({}, main_defaults, MessageBox.defaults, options),\n        callback: callback,\n        resolve: resolve,\n        reject: reject\n      });\n\n      main_showNextMsg();\n    });\n  } else {\n    msgQueue.push({\n      options: merge_default()({}, main_defaults, MessageBox.defaults, options),\n      callback: callback\n    });\n\n    main_showNextMsg();\n  }\n};\n\nmain_MessageBox.setDefaults = function (defaults) {\n  main_MessageBox.defaults = defaults;\n};\n\nmain_MessageBox.alert = function (message, title, options) {\n  if ((typeof title === 'undefined' ? 'undefined' : main_typeof(title)) === 'object') {\n    options = title;\n    title = '';\n  } else if (title === undefined) {\n    title = '';\n  }\n  return main_MessageBox(merge_default()({\n    title: title,\n    message: message,\n    $type: 'alert',\n    closeOnPressEscape: false,\n    closeOnClickModal: false\n  }, options));\n};\n\nmain_MessageBox.confirm = function (message, title, options) {\n  if ((typeof title === 'undefined' ? 'undefined' : main_typeof(title)) === 'object') {\n    options = title;\n    title = '';\n  } else if (title === undefined) {\n    title = '';\n  }\n  return main_MessageBox(merge_default()({\n    title: title,\n    message: message,\n    $type: 'confirm',\n    showCancelButton: true\n  }, options));\n};\n\nmain_MessageBox.prompt = function (message, title, options) {\n  if ((typeof title === 'undefined' ? 'undefined' : main_typeof(title)) === 'object') {\n    options = title;\n    title = '';\n  } else if (title === undefined) {\n    title = '';\n  }\n  return main_MessageBox(merge_default()({\n    title: title,\n    message: message,\n    showCancelButton: true,\n    showInput: true,\n    $type: 'prompt'\n  }, options));\n};\n\nmain_MessageBox.close = function () {\n  main_instance.doClose();\n  main_instance.visible = false;\n  msgQueue = [];\n  currentMsg = null;\n};\n\n/* harmony default export */ var packages_message_box_src_main = (main_MessageBox);\n\n// CONCATENATED MODULE: ./packages/message-box/index.js\n\n/* harmony default export */ var message_box = (packages_message_box_src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/breadcrumb/src/breadcrumb.vue?vue&type=template&id=4b464c06&\nvar breadcrumbvue_type_template_id_4b464c06_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    {\n      staticClass: \"el-breadcrumb\",\n      attrs: { \"aria-label\": \"Breadcrumb\", role: \"navigation\" }\n    },\n    [_vm._t(\"default\")],\n    2\n  )\n}\nvar breadcrumbvue_type_template_id_4b464c06_staticRenderFns = []\nbreadcrumbvue_type_template_id_4b464c06_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/breadcrumb/src/breadcrumb.vue?vue&type=template&id=4b464c06&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/breadcrumb/src/breadcrumb.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n\n/* harmony default export */ var breadcrumbvue_type_script_lang_js_ = ({\n  name: 'ElBreadcrumb',\n\n  props: {\n    separator: {\n      type: String,\n      default: '/'\n    },\n    separatorClass: {\n      type: String,\n      default: ''\n    }\n  },\n\n  provide: function provide() {\n    return {\n      elBreadcrumb: this\n    };\n  },\n  mounted: function mounted() {\n    var items = this.$el.querySelectorAll('.el-breadcrumb__item');\n    if (items.length) {\n      items[items.length - 1].setAttribute('aria-current', 'page');\n    }\n  }\n});\n// CONCATENATED MODULE: ./packages/breadcrumb/src/breadcrumb.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_breadcrumbvue_type_script_lang_js_ = (breadcrumbvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/breadcrumb/src/breadcrumb.vue\n\n\n\n\n\n/* normalize component */\n\nvar breadcrumb_component = normalizeComponent(\n  src_breadcrumbvue_type_script_lang_js_,\n  breadcrumbvue_type_template_id_4b464c06_render,\n  breadcrumbvue_type_template_id_4b464c06_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var breadcrumb_api; }\nbreadcrumb_component.options.__file = \"packages/breadcrumb/src/breadcrumb.vue\"\n/* harmony default export */ var breadcrumb = (breadcrumb_component.exports);\n// CONCATENATED MODULE: ./packages/breadcrumb/index.js\n\n\n/* istanbul ignore next */\nbreadcrumb.install = function (Vue) {\n  Vue.component(breadcrumb.name, breadcrumb);\n};\n\n/* harmony default export */ var packages_breadcrumb = (breadcrumb);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/breadcrumb/src/breadcrumb-item.vue?vue&type=template&id=fcf9eaac&\nvar breadcrumb_itemvue_type_template_id_fcf9eaac_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\"span\", { staticClass: \"el-breadcrumb__item\" }, [\n    _c(\n      \"span\",\n      {\n        ref: \"link\",\n        class: [\"el-breadcrumb__inner\", _vm.to ? \"is-link\" : \"\"],\n        attrs: { role: \"link\" }\n      },\n      [_vm._t(\"default\")],\n      2\n    ),\n    _vm.separatorClass\n      ? _c(\"i\", {\n          staticClass: \"el-breadcrumb__separator\",\n          class: _vm.separatorClass\n        })\n      : _c(\n          \"span\",\n          {\n            staticClass: \"el-breadcrumb__separator\",\n            attrs: { role: \"presentation\" }\n          },\n          [_vm._v(_vm._s(_vm.separator))]\n        )\n  ])\n}\nvar breadcrumb_itemvue_type_template_id_fcf9eaac_staticRenderFns = []\nbreadcrumb_itemvue_type_template_id_fcf9eaac_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/breadcrumb/src/breadcrumb-item.vue?vue&type=template&id=fcf9eaac&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/breadcrumb/src/breadcrumb-item.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ var breadcrumb_itemvue_type_script_lang_js_ = ({\n  name: 'ElBreadcrumbItem',\n  props: {\n    to: {},\n    replace: Boolean\n  },\n  data: function data() {\n    return {\n      separator: '',\n      separatorClass: ''\n    };\n  },\n\n\n  inject: ['elBreadcrumb'],\n\n  mounted: function mounted() {\n    var _this = this;\n\n    this.separator = this.elBreadcrumb.separator;\n    this.separatorClass = this.elBreadcrumb.separatorClass;\n    var link = this.$refs.link;\n    link.setAttribute('role', 'link');\n    link.addEventListener('click', function (_) {\n      var to = _this.to,\n          $router = _this.$router;\n\n      if (!to || !$router) return;\n      _this.replace ? $router.replace(to) : $router.push(to);\n    });\n  }\n});\n// CONCATENATED MODULE: ./packages/breadcrumb/src/breadcrumb-item.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_breadcrumb_itemvue_type_script_lang_js_ = (breadcrumb_itemvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/breadcrumb/src/breadcrumb-item.vue\n\n\n\n\n\n/* normalize component */\n\nvar breadcrumb_item_component = normalizeComponent(\n  src_breadcrumb_itemvue_type_script_lang_js_,\n  breadcrumb_itemvue_type_template_id_fcf9eaac_render,\n  breadcrumb_itemvue_type_template_id_fcf9eaac_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var breadcrumb_item_api; }\nbreadcrumb_item_component.options.__file = \"packages/breadcrumb/src/breadcrumb-item.vue\"\n/* harmony default export */ var breadcrumb_item = (breadcrumb_item_component.exports);\n// CONCATENATED MODULE: ./packages/breadcrumb-item/index.js\n\n\n/* istanbul ignore next */\nbreadcrumb_item.install = function (Vue) {\n  Vue.component(breadcrumb_item.name, breadcrumb_item);\n};\n\n/* harmony default export */ var packages_breadcrumb_item = (breadcrumb_item);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/form/src/form.vue?vue&type=template&id=a1b5ff34&\nvar formvue_type_template_id_a1b5ff34_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"form\",\n    {\n      staticClass: \"el-form\",\n      class: [\n        _vm.labelPosition ? \"el-form--label-\" + _vm.labelPosition : \"\",\n        { \"el-form--inline\": _vm.inline }\n      ]\n    },\n    [_vm._t(\"default\")],\n    2\n  )\n}\nvar formvue_type_template_id_a1b5ff34_staticRenderFns = []\nformvue_type_template_id_a1b5ff34_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/form/src/form.vue?vue&type=template&id=a1b5ff34&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/form/src/form.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n/* harmony default export */ var formvue_type_script_lang_js_ = ({\n  name: 'ElForm',\n\n  componentName: 'ElForm',\n\n  provide: function provide() {\n    return {\n      elForm: this\n    };\n  },\n\n\n  props: {\n    model: Object,\n    rules: Object,\n    labelPosition: String,\n    labelWidth: String,\n    labelSuffix: {\n      type: String,\n      default: ''\n    },\n    inline: Boolean,\n    inlineMessage: Boolean,\n    statusIcon: Boolean,\n    showMessage: {\n      type: Boolean,\n      default: true\n    },\n    size: String,\n    disabled: Boolean,\n    validateOnRuleChange: {\n      type: Boolean,\n      default: true\n    },\n    hideRequiredAsterisk: {\n      type: Boolean,\n      default: false\n    }\n  },\n  watch: {\n    rules: function rules() {\n      // remove then add event listeners on form-item after form rules change\n      this.fields.forEach(function (field) {\n        field.removeValidateEvents();\n        field.addValidateEvents();\n      });\n\n      if (this.validateOnRuleChange) {\n        this.validate(function () {});\n      }\n    }\n  },\n  computed: {\n    autoLabelWidth: function autoLabelWidth() {\n      if (!this.potentialLabelWidthArr.length) return 0;\n      var max = Math.max.apply(Math, this.potentialLabelWidthArr);\n      return max ? max + 'px' : '';\n    }\n  },\n  data: function data() {\n    return {\n      fields: [],\n      potentialLabelWidthArr: [] // use this array to calculate auto width\n    };\n  },\n  created: function created() {\n    var _this = this;\n\n    this.$on('el.form.addField', function (field) {\n      if (field) {\n        _this.fields.push(field);\n      }\n    });\n    /* istanbul ignore next */\n    this.$on('el.form.removeField', function (field) {\n      if (field.prop) {\n        _this.fields.splice(_this.fields.indexOf(field), 1);\n      }\n    });\n  },\n\n  methods: {\n    resetFields: function resetFields() {\n      if (!this.model) {\n        console.warn('[Element Warn][Form]model is required for resetFields to work.');\n        return;\n      }\n      this.fields.forEach(function (field) {\n        field.resetField();\n      });\n    },\n    clearValidate: function clearValidate() {\n      var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\n      var fields = props.length ? typeof props === 'string' ? this.fields.filter(function (field) {\n        return props === field.prop;\n      }) : this.fields.filter(function (field) {\n        return props.indexOf(field.prop) > -1;\n      }) : this.fields;\n      fields.forEach(function (field) {\n        field.clearValidate();\n      });\n    },\n    validate: function validate(callback) {\n      var _this2 = this;\n\n      if (!this.model) {\n        console.warn('[Element Warn][Form]model is required for validate to work!');\n        return;\n      }\n\n      var promise = void 0;\n      // if no callback, return promise\n      if (typeof callback !== 'function' && window.Promise) {\n        promise = new window.Promise(function (resolve, reject) {\n          callback = function callback(valid, invalidFields) {\n            valid ? resolve(valid) : reject(invalidFields);\n          };\n        });\n      }\n\n      var valid = true;\n      var count = 0;\n      // 如果需要验证的fields为空,调用验证时立刻返回callback\n      if (this.fields.length === 0 && callback) {\n        callback(true);\n      }\n      var invalidFields = {};\n      this.fields.forEach(function (field) {\n        field.validate('', function (message, field) {\n          if (message) {\n            valid = false;\n          }\n          invalidFields = merge_default()({}, invalidFields, field);\n          if (typeof callback === 'function' && ++count === _this2.fields.length) {\n            callback(valid, invalidFields);\n          }\n        });\n      });\n\n      if (promise) {\n        return promise;\n      }\n    },\n    validateField: function validateField(props, cb) {\n      props = [].concat(props);\n      var fields = this.fields.filter(function (field) {\n        return props.indexOf(field.prop) !== -1;\n      });\n      if (!fields.length) {\n        console.warn('[Element Warn]please pass correct props!');\n        return;\n      }\n\n      fields.forEach(function (field) {\n        field.validate('', cb);\n      });\n    },\n    getLabelWidthIndex: function getLabelWidthIndex(width) {\n      var index = this.potentialLabelWidthArr.indexOf(width);\n      // it's impossible\n      if (index === -1) {\n        throw new Error('[ElementForm]unpected width ', width);\n      }\n      return index;\n    },\n    registerLabelWidth: function registerLabelWidth(val, oldVal) {\n      if (val && oldVal) {\n        var index = this.getLabelWidthIndex(oldVal);\n        this.potentialLabelWidthArr.splice(index, 1, val);\n      } else if (val) {\n        this.potentialLabelWidthArr.push(val);\n      }\n    },\n    deregisterLabelWidth: function deregisterLabelWidth(val) {\n      var index = this.getLabelWidthIndex(val);\n      this.potentialLabelWidthArr.splice(index, 1);\n    }\n  }\n});\n// CONCATENATED MODULE: ./packages/form/src/form.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_formvue_type_script_lang_js_ = (formvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/form/src/form.vue\n\n\n\n\n\n/* normalize component */\n\nvar form_component = normalizeComponent(\n  src_formvue_type_script_lang_js_,\n  formvue_type_template_id_a1b5ff34_render,\n  formvue_type_template_id_a1b5ff34_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var form_api; }\nform_component.options.__file = \"packages/form/src/form.vue\"\n/* harmony default export */ var src_form = (form_component.exports);\n// CONCATENATED MODULE: ./packages/form/index.js\n\n\n/* istanbul ignore next */\nsrc_form.install = function (Vue) {\n  Vue.component(src_form.name, src_form);\n};\n\n/* harmony default export */ var packages_form = (src_form);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/form/src/form-item.vue?vue&type=template&id=b6f3db6c&\nvar form_itemvue_type_template_id_b6f3db6c_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    {\n      staticClass: \"el-form-item\",\n      class: [\n        {\n          \"el-form-item--feedback\": _vm.elForm && _vm.elForm.statusIcon,\n          \"is-error\": _vm.validateState === \"error\",\n          \"is-validating\": _vm.validateState === \"validating\",\n          \"is-success\": _vm.validateState === \"success\",\n          \"is-required\": _vm.isRequired || _vm.required,\n          \"is-no-asterisk\": _vm.elForm && _vm.elForm.hideRequiredAsterisk\n        },\n        _vm.sizeClass ? \"el-form-item--\" + _vm.sizeClass : \"\"\n      ]\n    },\n    [\n      _c(\n        \"label-wrap\",\n        {\n          attrs: {\n            \"is-auto-width\": _vm.labelStyle && _vm.labelStyle.width === \"auto\",\n            \"update-all\": _vm.form.labelWidth === \"auto\"\n          }\n        },\n        [\n          _vm.label || _vm.$slots.label\n            ? _c(\n                \"label\",\n                {\n                  staticClass: \"el-form-item__label\",\n                  style: _vm.labelStyle,\n                  attrs: { for: _vm.labelFor }\n                },\n                [\n                  _vm._t(\"label\", [\n                    _vm._v(_vm._s(_vm.label + _vm.form.labelSuffix))\n                  ])\n                ],\n                2\n              )\n            : _vm._e()\n        ]\n      ),\n      _c(\n        \"div\",\n        { staticClass: \"el-form-item__content\", style: _vm.contentStyle },\n        [\n          _vm._t(\"default\"),\n          _c(\n            \"transition\",\n            { attrs: { name: \"el-zoom-in-top\" } },\n            [\n              _vm.validateState === \"error\" &&\n              _vm.showMessage &&\n              _vm.form.showMessage\n                ? _vm._t(\n                    \"error\",\n                    [\n                      _c(\n                        \"div\",\n                        {\n                          staticClass: \"el-form-item__error\",\n                          class: {\n                            \"el-form-item__error--inline\":\n                              typeof _vm.inlineMessage === \"boolean\"\n                                ? _vm.inlineMessage\n                                : (_vm.elForm && _vm.elForm.inlineMessage) ||\n                                  false\n                          }\n                        },\n                        [\n                          _vm._v(\n                            \"\\n          \" +\n                              _vm._s(_vm.validateMessage) +\n                              \"\\n        \"\n                          )\n                        ]\n                      )\n                    ],\n                    { error: _vm.validateMessage }\n                  )\n                : _vm._e()\n            ],\n            2\n          )\n        ],\n        2\n      )\n    ],\n    1\n  )\n}\nvar form_itemvue_type_template_id_b6f3db6c_staticRenderFns = []\nform_itemvue_type_template_id_b6f3db6c_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/form/src/form-item.vue?vue&type=template&id=b6f3db6c&\n\n// EXTERNAL MODULE: external \"async-validator\"\nvar external_async_validator_ = __nested_webpack_require_8926__(41);\nvar external_async_validator_default = /*#__PURE__*/__nested_webpack_require_8926__.n(external_async_validator_);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/form/src/label-wrap.vue?vue&type=script&lang=js&\n\n\n/* harmony default export */ var label_wrapvue_type_script_lang_js_ = ({\n  props: {\n    isAutoWidth: Boolean,\n    updateAll: Boolean\n  },\n\n  inject: ['elForm', 'elFormItem'],\n\n  render: function render() {\n    var h = arguments[0];\n\n    var slots = this.$slots.default;\n    if (!slots) return null;\n    if (this.isAutoWidth) {\n      var autoLabelWidth = this.elForm.autoLabelWidth;\n      var style = {};\n      if (autoLabelWidth && autoLabelWidth !== 'auto') {\n        var marginLeft = parseInt(autoLabelWidth, 10) - this.computedWidth;\n        if (marginLeft) {\n          style.marginLeft = marginLeft + 'px';\n        }\n      }\n      return h(\n        'div',\n        { 'class': 'el-form-item__label-wrap', style: style },\n        [slots]\n      );\n    } else {\n      return slots[0];\n    }\n  },\n\n\n  methods: {\n    getLabelWidth: function getLabelWidth() {\n      if (this.$el && this.$el.firstElementChild) {\n        var computedWidth = window.getComputedStyle(this.$el.firstElementChild).width;\n        return Math.ceil(parseFloat(computedWidth));\n      } else {\n        return 0;\n      }\n    },\n    updateLabelWidth: function updateLabelWidth() {\n      var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'update';\n\n      if (this.$slots.default && this.isAutoWidth && this.$el.firstElementChild) {\n        if (action === 'update') {\n          this.computedWidth = this.getLabelWidth();\n        } else if (action === 'remove') {\n          this.elForm.deregisterLabelWidth(this.computedWidth);\n        }\n      }\n    }\n  },\n\n  watch: {\n    computedWidth: function computedWidth(val, oldVal) {\n      if (this.updateAll) {\n        this.elForm.registerLabelWidth(val, oldVal);\n        this.elFormItem.updateComputedLabelWidth(val);\n      }\n    }\n  },\n\n  data: function data() {\n    return {\n      computedWidth: 0\n    };\n  },\n  mounted: function mounted() {\n    this.updateLabelWidth('update');\n  },\n  updated: function updated() {\n    this.updateLabelWidth('update');\n  },\n  beforeDestroy: function beforeDestroy() {\n    this.updateLabelWidth('remove');\n  }\n});\n// CONCATENATED MODULE: ./packages/form/src/label-wrap.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_label_wrapvue_type_script_lang_js_ = (label_wrapvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/form/src/label-wrap.vue\nvar label_wrap_render, label_wrap_staticRenderFns\n\n\n\n\n/* normalize component */\n\nvar label_wrap_component = normalizeComponent(\n  src_label_wrapvue_type_script_lang_js_,\n  label_wrap_render,\n  label_wrap_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var label_wrap_api; }\nlabel_wrap_component.options.__file = \"packages/form/src/label-wrap.vue\"\n/* harmony default export */ var label_wrap = (label_wrap_component.exports);\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/form/src/form-item.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n/* harmony default export */ var form_itemvue_type_script_lang_js_ = ({\n  name: 'ElFormItem',\n\n  componentName: 'ElFormItem',\n\n  mixins: [emitter_default.a],\n\n  provide: function provide() {\n    return {\n      elFormItem: this\n    };\n  },\n\n\n  inject: ['elForm'],\n\n  props: {\n    label: String,\n    labelWidth: String,\n    prop: String,\n    required: {\n      type: Boolean,\n      default: undefined\n    },\n    rules: [Object, Array],\n    error: String,\n    validateStatus: String,\n    for: String,\n    inlineMessage: {\n      type: [String, Boolean],\n      default: ''\n    },\n    showMessage: {\n      type: Boolean,\n      default: true\n    },\n    size: String\n  },\n  components: {\n    // use this component to calculate auto width\n    LabelWrap: label_wrap\n  },\n  watch: {\n    error: {\n      immediate: true,\n      handler: function handler(value) {\n        this.validateMessage = value;\n        this.validateState = value ? 'error' : '';\n      }\n    },\n    validateStatus: function validateStatus(value) {\n      this.validateState = value;\n    },\n    rules: function rules(value) {\n      if ((!value || value.length === 0) && this.required === undefined) {\n        this.clearValidate();\n      }\n    }\n  },\n  computed: {\n    labelFor: function labelFor() {\n      return this.for || this.prop;\n    },\n    labelStyle: function labelStyle() {\n      var ret = {};\n      if (this.form.labelPosition === 'top') return ret;\n      var labelWidth = this.labelWidth || this.form.labelWidth;\n      if (labelWidth) {\n        ret.width = labelWidth;\n      }\n      return ret;\n    },\n    contentStyle: function contentStyle() {\n      var ret = {};\n      var label = this.label;\n      if (this.form.labelPosition === 'top' || this.form.inline) return ret;\n      if (!label && !this.labelWidth && this.isNested) return ret;\n      var labelWidth = this.labelWidth || this.form.labelWidth;\n      if (labelWidth === 'auto') {\n        if (this.labelWidth === 'auto') {\n          ret.marginLeft = this.computedLabelWidth;\n        } else if (this.form.labelWidth === 'auto') {\n          ret.marginLeft = this.elForm.autoLabelWidth;\n        }\n      } else {\n        ret.marginLeft = labelWidth;\n      }\n      return ret;\n    },\n    form: function form() {\n      var parent = this.$parent;\n      var parentName = parent.$options.componentName;\n      while (parentName !== 'ElForm') {\n        if (parentName === 'ElFormItem') {\n          this.isNested = true;\n        }\n        parent = parent.$parent;\n        parentName = parent.$options.componentName;\n      }\n      return parent;\n    },\n    fieldValue: function fieldValue() {\n      var model = this.form.model;\n      if (!model || !this.prop) {\n        return;\n      }\n\n      var path = this.prop;\n      if (path.indexOf(':') !== -1) {\n        path = path.replace(/:/, '.');\n      }\n\n      return Object(util_[\"getPropByPath\"])(model, path, true).v;\n    },\n    isRequired: function isRequired() {\n      var rules = this.getRules();\n      var isRequired = false;\n\n      if (rules && rules.length) {\n        rules.every(function (rule) {\n          if (rule.required) {\n            isRequired = true;\n            return false;\n          }\n          return true;\n        });\n      }\n      return isRequired;\n    },\n    _formSize: function _formSize() {\n      return this.elForm.size;\n    },\n    elFormItemSize: function elFormItemSize() {\n      return this.size || this._formSize;\n    },\n    sizeClass: function sizeClass() {\n      return this.elFormItemSize || (this.$ELEMENT || {}).size;\n    }\n  },\n  data: function data() {\n    return {\n      validateState: '',\n      validateMessage: '',\n      validateDisabled: false,\n      validator: {},\n      isNested: false,\n      computedLabelWidth: ''\n    };\n  },\n\n  methods: {\n    validate: function validate(trigger) {\n      var _this = this;\n\n      var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : util_[\"noop\"];\n\n      this.validateDisabled = false;\n      var rules = this.getFilteredRule(trigger);\n      if ((!rules || rules.length === 0) && this.required === undefined) {\n        callback();\n        return true;\n      }\n\n      this.validateState = 'validating';\n\n      var descriptor = {};\n      if (rules && rules.length > 0) {\n        rules.forEach(function (rule) {\n          delete rule.trigger;\n        });\n      }\n      descriptor[this.prop] = rules;\n\n      var validator = new external_async_validator_default.a(descriptor);\n      var model = {};\n\n      model[this.prop] = this.fieldValue;\n\n      validator.validate(model, { firstFields: true }, function (errors, invalidFields) {\n        _this.validateState = !errors ? 'success' : 'error';\n        _this.validateMessage = errors ? errors[0].message : '';\n\n        callback(_this.validateMessage, invalidFields);\n        _this.elForm && _this.elForm.$emit('validate', _this.prop, !errors, _this.validateMessage || null);\n      });\n    },\n    clearValidate: function clearValidate() {\n      this.validateState = '';\n      this.validateMessage = '';\n      this.validateDisabled = false;\n    },\n    resetField: function resetField() {\n      var _this2 = this;\n\n      this.validateState = '';\n      this.validateMessage = '';\n\n      var model = this.form.model;\n      var value = this.fieldValue;\n      var path = this.prop;\n      if (path.indexOf(':') !== -1) {\n        path = path.replace(/:/, '.');\n      }\n\n      var prop = Object(util_[\"getPropByPath\"])(model, path, true);\n\n      this.validateDisabled = true;\n      if (Array.isArray(value)) {\n        prop.o[prop.k] = [].concat(this.initialValue);\n      } else {\n        prop.o[prop.k] = this.initialValue;\n      }\n\n      // reset validateDisabled after onFieldChange triggered\n      this.$nextTick(function () {\n        _this2.validateDisabled = false;\n      });\n\n      this.broadcast('ElTimeSelect', 'fieldReset', this.initialValue);\n    },\n    getRules: function getRules() {\n      var formRules = this.form.rules;\n      var selfRules = this.rules;\n      var requiredRule = this.required !== undefined ? { required: !!this.required } : [];\n\n      var prop = Object(util_[\"getPropByPath\"])(formRules, this.prop || '');\n      formRules = formRules ? prop.o[this.prop || ''] || prop.v : [];\n\n      return [].concat(selfRules || formRules || []).concat(requiredRule);\n    },\n    getFilteredRule: function getFilteredRule(trigger) {\n      var rules = this.getRules();\n\n      return rules.filter(function (rule) {\n        if (!rule.trigger || trigger === '') return true;\n        if (Array.isArray(rule.trigger)) {\n          return rule.trigger.indexOf(trigger) > -1;\n        } else {\n          return rule.trigger === trigger;\n        }\n      }).map(function (rule) {\n        return merge_default()({}, rule);\n      });\n    },\n    onFieldBlur: function onFieldBlur() {\n      this.validate('blur');\n    },\n    onFieldChange: function onFieldChange() {\n      if (this.validateDisabled) {\n        this.validateDisabled = false;\n        return;\n      }\n\n      this.validate('change');\n    },\n    updateComputedLabelWidth: function updateComputedLabelWidth(width) {\n      this.computedLabelWidth = width ? width + 'px' : '';\n    },\n    addValidateEvents: function addValidateEvents() {\n      var rules = this.getRules();\n\n      if (rules.length || this.required !== undefined) {\n        this.$on('el.form.blur', this.onFieldBlur);\n        this.$on('el.form.change', this.onFieldChange);\n      }\n    },\n    removeValidateEvents: function removeValidateEvents() {\n      this.$off();\n    }\n  },\n  mounted: function mounted() {\n    if (this.prop) {\n      this.dispatch('ElForm', 'el.form.addField', [this]);\n\n      var initialValue = this.fieldValue;\n      if (Array.isArray(initialValue)) {\n        initialValue = [].concat(initialValue);\n      }\n      Object.defineProperty(this, 'initialValue', {\n        value: initialValue\n      });\n\n      this.addValidateEvents();\n    }\n  },\n  beforeDestroy: function beforeDestroy() {\n    this.dispatch('ElForm', 'el.form.removeField', [this]);\n  }\n});\n// CONCATENATED MODULE: ./packages/form/src/form-item.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_form_itemvue_type_script_lang_js_ = (form_itemvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/form/src/form-item.vue\n\n\n\n\n\n/* normalize component */\n\nvar form_item_component = normalizeComponent(\n  src_form_itemvue_type_script_lang_js_,\n  form_itemvue_type_template_id_b6f3db6c_render,\n  form_itemvue_type_template_id_b6f3db6c_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var form_item_api; }\nform_item_component.options.__file = \"packages/form/src/form-item.vue\"\n/* harmony default export */ var form_item = (form_item_component.exports);\n// CONCATENATED MODULE: ./packages/form-item/index.js\n\n\n/* istanbul ignore next */\nform_item.install = function (Vue) {\n  Vue.component(form_item.name, form_item);\n};\n\n/* harmony default export */ var packages_form_item = (form_item);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/tabs/src/tab-bar.vue?vue&type=template&id=2031f33a&\nvar tab_barvue_type_template_id_2031f33a_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\"div\", {\n    staticClass: \"el-tabs__active-bar\",\n    class: \"is-\" + _vm.rootTabs.tabPosition,\n    style: _vm.barStyle\n  })\n}\nvar tab_barvue_type_template_id_2031f33a_staticRenderFns = []\ntab_barvue_type_template_id_2031f33a_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/tabs/src/tab-bar.vue?vue&type=template&id=2031f33a&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/tabs/src/tab-bar.vue?vue&type=script&lang=js&\n//\n//\n//\n\n\n/* harmony default export */ var tab_barvue_type_script_lang_js_ = ({\n  name: 'TabBar',\n\n  props: {\n    tabs: Array\n  },\n\n  inject: ['rootTabs'],\n\n  computed: {\n    barStyle: {\n      get: function get() {\n        var _this = this;\n\n        var style = {};\n        var offset = 0;\n        var tabSize = 0;\n        var sizeName = ['top', 'bottom'].indexOf(this.rootTabs.tabPosition) !== -1 ? 'width' : 'height';\n        var sizeDir = sizeName === 'width' ? 'x' : 'y';\n        var firstUpperCase = function firstUpperCase(str) {\n          return str.toLowerCase().replace(/( |^)[a-z]/g, function (L) {\n            return L.toUpperCase();\n          });\n        };\n        this.tabs.every(function (tab, index) {\n          var $el = Object(util_[\"arrayFind\"])(_this.$parent.$refs.tabs || [], function (t) {\n            return t.id.replace('tab-', '') === tab.paneName;\n          });\n          if (!$el) {\n            return false;\n          }\n\n          if (!tab.active) {\n            offset += $el['client' + firstUpperCase(sizeName)];\n            return true;\n          } else {\n            tabSize = $el['client' + firstUpperCase(sizeName)];\n            var tabStyles = window.getComputedStyle($el);\n            if (sizeName === 'width' && _this.tabs.length > 1) {\n              tabSize -= parseFloat(tabStyles.paddingLeft) + parseFloat(tabStyles.paddingRight);\n            }\n            if (sizeName === 'width') {\n              offset += parseFloat(tabStyles.paddingLeft);\n            }\n            return false;\n          }\n        });\n\n        var transform = 'translate' + firstUpperCase(sizeDir) + '(' + offset + 'px)';\n        style[sizeName] = tabSize + 'px';\n        style.transform = transform;\n        style.msTransform = transform;\n        style.webkitTransform = transform;\n\n        return style;\n      }\n    }\n  }\n});\n// CONCATENATED MODULE: ./packages/tabs/src/tab-bar.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_tab_barvue_type_script_lang_js_ = (tab_barvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/tabs/src/tab-bar.vue\n\n\n\n\n\n/* normalize component */\n\nvar tab_bar_component = normalizeComponent(\n  src_tab_barvue_type_script_lang_js_,\n  tab_barvue_type_template_id_2031f33a_render,\n  tab_barvue_type_template_id_2031f33a_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var tab_bar_api; }\ntab_bar_component.options.__file = \"packages/tabs/src/tab-bar.vue\"\n/* harmony default export */ var tab_bar = (tab_bar_component.exports);\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/tabs/src/tab-nav.vue?vue&type=script&lang=js&\n\n\n\n\nfunction noop() {}\nvar tab_navvue_type_script_lang_js_firstUpperCase = function firstUpperCase(str) {\n  return str.toLowerCase().replace(/( |^)[a-z]/g, function (L) {\n    return L.toUpperCase();\n  });\n};\n\n/* harmony default export */ var tab_navvue_type_script_lang_js_ = ({\n  name: 'TabNav',\n\n  components: {\n    TabBar: tab_bar\n  },\n\n  inject: ['rootTabs'],\n\n  props: {\n    panes: Array,\n    currentName: String,\n    editable: Boolean,\n    onTabClick: {\n      type: Function,\n      default: noop\n    },\n    onTabRemove: {\n      type: Function,\n      default: noop\n    },\n    type: String,\n    stretch: Boolean\n  },\n\n  data: function data() {\n    return {\n      scrollable: false,\n      navOffset: 0,\n      isFocus: false,\n      focusable: true\n    };\n  },\n\n\n  computed: {\n    navStyle: function navStyle() {\n      var dir = ['top', 'bottom'].indexOf(this.rootTabs.tabPosition) !== -1 ? 'X' : 'Y';\n      return {\n        transform: 'translate' + dir + '(-' + this.navOffset + 'px)'\n      };\n    },\n    sizeName: function sizeName() {\n      return ['top', 'bottom'].indexOf(this.rootTabs.tabPosition) !== -1 ? 'width' : 'height';\n    }\n  },\n\n  methods: {\n    scrollPrev: function scrollPrev() {\n      var containerSize = this.$refs.navScroll['offset' + tab_navvue_type_script_lang_js_firstUpperCase(this.sizeName)];\n      var currentOffset = this.navOffset;\n\n      if (!currentOffset) return;\n\n      var newOffset = currentOffset > containerSize ? currentOffset - containerSize : 0;\n\n      this.navOffset = newOffset;\n    },\n    scrollNext: function scrollNext() {\n      var navSize = this.$refs.nav['offset' + tab_navvue_type_script_lang_js_firstUpperCase(this.sizeName)];\n      var containerSize = this.$refs.navScroll['offset' + tab_navvue_type_script_lang_js_firstUpperCase(this.sizeName)];\n      var currentOffset = this.navOffset;\n\n      if (navSize - currentOffset <= containerSize) return;\n\n      var newOffset = navSize - currentOffset > containerSize * 2 ? currentOffset + containerSize : navSize - containerSize;\n\n      this.navOffset = newOffset;\n    },\n    scrollToActiveTab: function scrollToActiveTab() {\n      if (!this.scrollable) return;\n      var nav = this.$refs.nav;\n      var activeTab = this.$el.querySelector('.is-active');\n      if (!activeTab) return;\n      var navScroll = this.$refs.navScroll;\n      var isHorizontal = ['top', 'bottom'].indexOf(this.rootTabs.tabPosition) !== -1;\n      var activeTabBounding = activeTab.getBoundingClientRect();\n      var navScrollBounding = navScroll.getBoundingClientRect();\n      var maxOffset = isHorizontal ? nav.offsetWidth - navScrollBounding.width : nav.offsetHeight - navScrollBounding.height;\n      var currentOffset = this.navOffset;\n      var newOffset = currentOffset;\n\n      if (isHorizontal) {\n        if (activeTabBounding.left < navScrollBounding.left) {\n          newOffset = currentOffset - (navScrollBounding.left - activeTabBounding.left);\n        }\n        if (activeTabBounding.right > navScrollBounding.right) {\n          newOffset = currentOffset + activeTabBounding.right - navScrollBounding.right;\n        }\n      } else {\n        if (activeTabBounding.top < navScrollBounding.top) {\n          newOffset = currentOffset - (navScrollBounding.top - activeTabBounding.top);\n        }\n        if (activeTabBounding.bottom > navScrollBounding.bottom) {\n          newOffset = currentOffset + (activeTabBounding.bottom - navScrollBounding.bottom);\n        }\n      }\n      newOffset = Math.max(newOffset, 0);\n      this.navOffset = Math.min(newOffset, maxOffset);\n    },\n    update: function update() {\n      if (!this.$refs.nav) return;\n      var sizeName = this.sizeName;\n      var navSize = this.$refs.nav['offset' + tab_navvue_type_script_lang_js_firstUpperCase(sizeName)];\n      var containerSize = this.$refs.navScroll['offset' + tab_navvue_type_script_lang_js_firstUpperCase(sizeName)];\n      var currentOffset = this.navOffset;\n\n      if (containerSize < navSize) {\n        var _currentOffset = this.navOffset;\n        this.scrollable = this.scrollable || {};\n        this.scrollable.prev = _currentOffset;\n        this.scrollable.next = _currentOffset + containerSize < navSize;\n        if (navSize - _currentOffset < containerSize) {\n          this.navOffset = navSize - containerSize;\n        }\n      } else {\n        this.scrollable = false;\n        if (currentOffset > 0) {\n          this.navOffset = 0;\n        }\n      }\n    },\n    changeTab: function changeTab(e) {\n      var keyCode = e.keyCode;\n      var nextIndex = void 0;\n      var currentIndex = void 0,\n          tabList = void 0;\n      if ([37, 38, 39, 40].indexOf(keyCode) !== -1) {\n        // 左右上下键更换tab\n        tabList = e.currentTarget.querySelectorAll('[role=tab]');\n        currentIndex = Array.prototype.indexOf.call(tabList, e.target);\n      } else {\n        return;\n      }\n      if (keyCode === 37 || keyCode === 38) {\n        // left\n        if (currentIndex === 0) {\n          // first\n          nextIndex = tabList.length - 1;\n        } else {\n          nextIndex = currentIndex - 1;\n        }\n      } else {\n        // right\n        if (currentIndex < tabList.length - 1) {\n          // not last\n          nextIndex = currentIndex + 1;\n        } else {\n          nextIndex = 0;\n        }\n      }\n      tabList[nextIndex].focus(); // 改变焦点元素\n      tabList[nextIndex].click(); // 选中下一个tab\n      this.setFocus();\n    },\n    setFocus: function setFocus() {\n      if (this.focusable) {\n        this.isFocus = true;\n      }\n    },\n    removeFocus: function removeFocus() {\n      this.isFocus = false;\n    },\n    visibilityChangeHandler: function visibilityChangeHandler() {\n      var _this = this;\n\n      var visibility = document.visibilityState;\n      if (visibility === 'hidden') {\n        this.focusable = false;\n      } else if (visibility === 'visible') {\n        setTimeout(function () {\n          _this.focusable = true;\n        }, 50);\n      }\n    },\n    windowBlurHandler: function windowBlurHandler() {\n      this.focusable = false;\n    },\n    windowFocusHandler: function windowFocusHandler() {\n      var _this2 = this;\n\n      setTimeout(function () {\n        _this2.focusable = true;\n      }, 50);\n    }\n  },\n\n  updated: function updated() {\n    this.update();\n  },\n  render: function render(h) {\n    var _this3 = this;\n\n    var type = this.type,\n        panes = this.panes,\n        editable = this.editable,\n        stretch = this.stretch,\n        onTabClick = this.onTabClick,\n        onTabRemove = this.onTabRemove,\n        navStyle = this.navStyle,\n        scrollable = this.scrollable,\n        scrollNext = this.scrollNext,\n        scrollPrev = this.scrollPrev,\n        changeTab = this.changeTab,\n        setFocus = this.setFocus,\n        removeFocus = this.removeFocus;\n\n    var scrollBtn = scrollable ? [h(\n      'span',\n      { 'class': ['el-tabs__nav-prev', scrollable.prev ? '' : 'is-disabled'], on: {\n          'click': scrollPrev\n        }\n      },\n      [h('i', { 'class': 'el-icon-arrow-left' })]\n    ), h(\n      'span',\n      { 'class': ['el-tabs__nav-next', scrollable.next ? '' : 'is-disabled'], on: {\n          'click': scrollNext\n        }\n      },\n      [h('i', { 'class': 'el-icon-arrow-right' })]\n    )] : null;\n\n    var tabs = this._l(panes, function (pane, index) {\n      var _ref;\n\n      var tabName = pane.name || pane.index || index;\n      var closable = pane.isClosable || editable;\n\n      pane.index = '' + index;\n\n      var btnClose = closable ? h('span', { 'class': 'el-icon-close', on: {\n          'click': function click(ev) {\n            onTabRemove(pane, ev);\n          }\n        }\n      }) : null;\n\n      var tabLabelContent = pane.$slots.label || pane.label;\n      var tabindex = pane.active ? 0 : -1;\n      return h(\n        'div',\n        {\n          'class': (_ref = {\n            'el-tabs__item': true\n          }, _ref['is-' + _this3.rootTabs.tabPosition] = true, _ref['is-active'] = pane.active, _ref['is-disabled'] = pane.disabled, _ref['is-closable'] = closable, _ref['is-focus'] = _this3.isFocus, _ref),\n          attrs: { id: 'tab-' + tabName,\n\n            'aria-controls': 'pane-' + tabName,\n            role: 'tab',\n            'aria-selected': pane.active,\n\n            tabindex: tabindex\n          },\n          key: 'tab-' + tabName, ref: 'tabs', refInFor: true,\n          on: {\n            'focus': function focus() {\n              setFocus();\n            },\n            'blur': function blur() {\n              removeFocus();\n            },\n            'click': function click(ev) {\n              removeFocus();onTabClick(pane, tabName, ev);\n            },\n            'keydown': function keydown(ev) {\n              if (closable && (ev.keyCode === 46 || ev.keyCode === 8)) {\n                onTabRemove(pane, ev);\n              }\n            }\n          }\n        },\n        [tabLabelContent, btnClose]\n      );\n    });\n    return h(\n      'div',\n      { 'class': ['el-tabs__nav-wrap', scrollable ? 'is-scrollable' : '', 'is-' + this.rootTabs.tabPosition] },\n      [scrollBtn, h(\n        'div',\n        { 'class': ['el-tabs__nav-scroll'], ref: 'navScroll' },\n        [h(\n          'div',\n          {\n            'class': ['el-tabs__nav', 'is-' + this.rootTabs.tabPosition, stretch && ['top', 'bottom'].indexOf(this.rootTabs.tabPosition) !== -1 ? 'is-stretch' : ''],\n            ref: 'nav',\n            style: navStyle,\n            attrs: { role: 'tablist'\n            },\n            on: {\n              'keydown': changeTab\n            }\n          },\n          [!type ? h('tab-bar', {\n            attrs: { tabs: panes }\n          }) : null, tabs]\n        )]\n      )]\n    );\n  },\n  mounted: function mounted() {\n    var _this4 = this;\n\n    Object(resize_event_[\"addResizeListener\"])(this.$el, this.update);\n    document.addEventListener('visibilitychange', this.visibilityChangeHandler);\n    window.addEventListener('blur', this.windowBlurHandler);\n    window.addEventListener('focus', this.windowFocusHandler);\n    setTimeout(function () {\n      _this4.scrollToActiveTab();\n    }, 0);\n  },\n  beforeDestroy: function beforeDestroy() {\n    if (this.$el && this.update) Object(resize_event_[\"removeResizeListener\"])(this.$el, this.update);\n    document.removeEventListener('visibilitychange', this.visibilityChangeHandler);\n    window.removeEventListener('blur', this.windowBlurHandler);\n    window.removeEventListener('focus', this.windowFocusHandler);\n  }\n});\n// CONCATENATED MODULE: ./packages/tabs/src/tab-nav.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_tab_navvue_type_script_lang_js_ = (tab_navvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/tabs/src/tab-nav.vue\nvar tab_nav_render, tab_nav_staticRenderFns\n\n\n\n\n/* normalize component */\n\nvar tab_nav_component = normalizeComponent(\n  src_tab_navvue_type_script_lang_js_,\n  tab_nav_render,\n  tab_nav_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var tab_nav_api; }\ntab_nav_component.options.__file = \"packages/tabs/src/tab-nav.vue\"\n/* harmony default export */ var tab_nav = (tab_nav_component.exports);\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/tabs/src/tabs.vue?vue&type=script&lang=js&\n\n\n\n/* harmony default export */ var tabsvue_type_script_lang_js_ = ({\n  name: 'ElTabs',\n\n  components: {\n    TabNav: tab_nav\n  },\n\n  props: {\n    type: String,\n    activeName: String,\n    closable: Boolean,\n    addable: Boolean,\n    value: {},\n    editable: Boolean,\n    tabPosition: {\n      type: String,\n      default: 'top'\n    },\n    beforeLeave: Function,\n    stretch: Boolean\n  },\n\n  provide: function provide() {\n    return {\n      rootTabs: this\n    };\n  },\n  data: function data() {\n    return {\n      currentName: this.value || this.activeName,\n      panes: []\n    };\n  },\n\n\n  watch: {\n    activeName: function activeName(value) {\n      this.setCurrentName(value);\n    },\n    value: function value(_value) {\n      this.setCurrentName(_value);\n    },\n    currentName: function currentName(value) {\n      var _this = this;\n\n      if (this.$refs.nav) {\n        this.$nextTick(function () {\n          _this.$refs.nav.$nextTick(function (_) {\n            _this.$refs.nav.scrollToActiveTab();\n          });\n        });\n      }\n    }\n  },\n\n  methods: {\n    calcPaneInstances: function calcPaneInstances() {\n      var _this2 = this;\n\n      var isForceUpdate = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n      if (this.$slots.default) {\n        var paneSlots = this.$slots.default.filter(function (vnode) {\n          return vnode.tag && vnode.componentOptions && vnode.componentOptions.Ctor.options.name === 'ElTabPane';\n        });\n        // update indeed\n        var panes = paneSlots.map(function (_ref) {\n          var componentInstance = _ref.componentInstance;\n          return componentInstance;\n        });\n        var panesChanged = !(panes.length === this.panes.length && panes.every(function (pane, index) {\n          return pane === _this2.panes[index];\n        }));\n        if (isForceUpdate || panesChanged) {\n          this.panes = panes;\n        }\n      } else if (this.panes.length !== 0) {\n        this.panes = [];\n      }\n    },\n    handleTabClick: function handleTabClick(tab, tabName, event) {\n      if (tab.disabled) return;\n      this.setCurrentName(tabName);\n      this.$emit('tab-click', tab, event);\n    },\n    handleTabRemove: function handleTabRemove(pane, ev) {\n      if (pane.disabled) return;\n      ev.stopPropagation();\n      this.$emit('edit', pane.name, 'remove');\n      this.$emit('tab-remove', pane.name);\n    },\n    handleTabAdd: function handleTabAdd() {\n      this.$emit('edit', null, 'add');\n      this.$emit('tab-add');\n    },\n    setCurrentName: function setCurrentName(value) {\n      var _this3 = this;\n\n      var changeCurrentName = function changeCurrentName() {\n        _this3.currentName = value;\n        _this3.$emit('input', value);\n      };\n      if (this.currentName !== value && this.beforeLeave) {\n        var before = this.beforeLeave(value, this.currentName);\n        if (before && before.then) {\n          before.then(function () {\n            changeCurrentName();\n            _this3.$refs.nav && _this3.$refs.nav.removeFocus();\n          }, function () {\n            // https://github.com/ElemeFE/element/pull/14816\n            // ignore promise rejection in `before-leave` hook\n          });\n        } else if (before !== false) {\n          changeCurrentName();\n        }\n      } else {\n        changeCurrentName();\n      }\n    }\n  },\n\n  render: function render(h) {\n    var _ref2;\n\n    var type = this.type,\n        handleTabClick = this.handleTabClick,\n        handleTabRemove = this.handleTabRemove,\n        handleTabAdd = this.handleTabAdd,\n        currentName = this.currentName,\n        panes = this.panes,\n        editable = this.editable,\n        addable = this.addable,\n        tabPosition = this.tabPosition,\n        stretch = this.stretch;\n\n\n    var newButton = editable || addable ? h(\n      'span',\n      {\n        'class': 'el-tabs__new-tab',\n        on: {\n          'click': handleTabAdd,\n          'keydown': function keydown(ev) {\n            if (ev.keyCode === 13) {\n              handleTabAdd();\n            }\n          }\n        },\n        attrs: {\n          tabindex: '0'\n        }\n      },\n      [h('i', { 'class': 'el-icon-plus' })]\n    ) : null;\n\n    var navData = {\n      props: {\n        currentName: currentName,\n        onTabClick: handleTabClick,\n        onTabRemove: handleTabRemove,\n        editable: editable,\n        type: type,\n        panes: panes,\n        stretch: stretch\n      },\n      ref: 'nav'\n    };\n    var header = h(\n      'div',\n      { 'class': ['el-tabs__header', 'is-' + tabPosition] },\n      [newButton, h('tab-nav', navData)]\n    );\n    var panels = h(\n      'div',\n      { 'class': 'el-tabs__content' },\n      [this.$slots.default]\n    );\n\n    return h(\n      'div',\n      { 'class': (_ref2 = {\n          'el-tabs': true,\n          'el-tabs--card': type === 'card'\n        }, _ref2['el-tabs--' + tabPosition] = true, _ref2['el-tabs--border-card'] = type === 'border-card', _ref2) },\n      [tabPosition !== 'bottom' ? [header, panels] : [panels, header]]\n    );\n  },\n  created: function created() {\n    if (!this.currentName) {\n      this.setCurrentName('0');\n    }\n\n    this.$on('tab-nav-update', this.calcPaneInstances.bind(null, true));\n  },\n  mounted: function mounted() {\n    this.calcPaneInstances();\n  },\n  updated: function updated() {\n    this.calcPaneInstances();\n  }\n});\n// CONCATENATED MODULE: ./packages/tabs/src/tabs.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_tabsvue_type_script_lang_js_ = (tabsvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/tabs/src/tabs.vue\nvar tabs_render, tabs_staticRenderFns\n\n\n\n\n/* normalize component */\n\nvar tabs_component = normalizeComponent(\n  src_tabsvue_type_script_lang_js_,\n  tabs_render,\n  tabs_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var tabs_api; }\ntabs_component.options.__file = \"packages/tabs/src/tabs.vue\"\n/* harmony default export */ var tabs = (tabs_component.exports);\n// CONCATENATED MODULE: ./packages/tabs/index.js\n\n\n/* istanbul ignore next */\ntabs.install = function (Vue) {\n  Vue.component(tabs.name, tabs);\n};\n\n/* harmony default export */ var packages_tabs = (tabs);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/tabs/src/tab-pane.vue?vue&type=template&id=9145a070&\nvar tab_panevue_type_template_id_9145a070_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return !_vm.lazy || _vm.loaded || _vm.active\n    ? _c(\n        \"div\",\n        {\n          directives: [\n            {\n              name: \"show\",\n              rawName: \"v-show\",\n              value: _vm.active,\n              expression: \"active\"\n            }\n          ],\n          staticClass: \"el-tab-pane\",\n          attrs: {\n            role: \"tabpanel\",\n            \"aria-hidden\": !_vm.active,\n            id: \"pane-\" + _vm.paneName,\n            \"aria-labelledby\": \"tab-\" + _vm.paneName\n          }\n        },\n        [_vm._t(\"default\")],\n        2\n      )\n    : _vm._e()\n}\nvar tab_panevue_type_template_id_9145a070_staticRenderFns = []\ntab_panevue_type_template_id_9145a070_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/tabs/src/tab-pane.vue?vue&type=template&id=9145a070&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/tabs/src/tab-pane.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ var tab_panevue_type_script_lang_js_ = ({\n  name: 'ElTabPane',\n\n  componentName: 'ElTabPane',\n\n  props: {\n    label: String,\n    labelContent: Function,\n    name: String,\n    closable: Boolean,\n    disabled: Boolean,\n    lazy: Boolean\n  },\n\n  data: function data() {\n    return {\n      index: null,\n      loaded: false\n    };\n  },\n\n\n  computed: {\n    isClosable: function isClosable() {\n      return this.closable || this.$parent.closable;\n    },\n    active: function active() {\n      var active = this.$parent.currentName === (this.name || this.index);\n      if (active) {\n        this.loaded = true;\n      }\n      return active;\n    },\n    paneName: function paneName() {\n      return this.name || this.index;\n    }\n  },\n\n  updated: function updated() {\n    this.$parent.$emit('tab-nav-update');\n  }\n});\n// CONCATENATED MODULE: ./packages/tabs/src/tab-pane.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_tab_panevue_type_script_lang_js_ = (tab_panevue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/tabs/src/tab-pane.vue\n\n\n\n\n\n/* normalize component */\n\nvar tab_pane_component = normalizeComponent(\n  src_tab_panevue_type_script_lang_js_,\n  tab_panevue_type_template_id_9145a070_render,\n  tab_panevue_type_template_id_9145a070_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var tab_pane_api; }\ntab_pane_component.options.__file = \"packages/tabs/src/tab-pane.vue\"\n/* harmony default export */ var tab_pane = (tab_pane_component.exports);\n// CONCATENATED MODULE: ./packages/tab-pane/index.js\n\n\n/* istanbul ignore next */\ntab_pane.install = function (Vue) {\n  Vue.component(tab_pane.name, tab_pane);\n};\n\n/* harmony default export */ var packages_tab_pane = (tab_pane);\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/tag/src/tag.vue?vue&type=script&lang=js&\n\n/* harmony default export */ var tagvue_type_script_lang_js_ = ({\n  name: 'ElTag',\n  props: {\n    text: String,\n    closable: Boolean,\n    type: String,\n    hit: Boolean,\n    disableTransitions: Boolean,\n    color: String,\n    size: String,\n    effect: {\n      type: String,\n      default: 'light',\n      validator: function validator(val) {\n        return ['dark', 'light', 'plain'].indexOf(val) !== -1;\n      }\n    }\n  },\n  methods: {\n    handleClose: function handleClose(event) {\n      event.stopPropagation();\n      this.$emit('close', event);\n    },\n    handleClick: function handleClick(event) {\n      this.$emit('click', event);\n    }\n  },\n  computed: {\n    tagSize: function tagSize() {\n      return this.size || (this.$ELEMENT || {}).size;\n    }\n  },\n  render: function render(h) {\n    var type = this.type,\n        tagSize = this.tagSize,\n        hit = this.hit,\n        effect = this.effect;\n\n    var classes = ['el-tag', type ? 'el-tag--' + type : '', tagSize ? 'el-tag--' + tagSize : '', effect ? 'el-tag--' + effect : '', hit && 'is-hit'];\n    var tagEl = h(\n      'span',\n      {\n        'class': classes,\n        style: { backgroundColor: this.color },\n        on: {\n          'click': this.handleClick\n        }\n      },\n      [this.$slots.default, this.closable && h('i', { 'class': 'el-tag__close el-icon-close', on: {\n          'click': this.handleClose\n        }\n      })]\n    );\n\n    return this.disableTransitions ? tagEl : h(\n      'transition',\n      {\n        attrs: { name: 'el-zoom-in-center' }\n      },\n      [tagEl]\n    );\n  }\n});\n// CONCATENATED MODULE: ./packages/tag/src/tag.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_tagvue_type_script_lang_js_ = (tagvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/tag/src/tag.vue\nvar tag_render, tag_staticRenderFns\n\n\n\n\n/* normalize component */\n\nvar tag_component = normalizeComponent(\n  src_tagvue_type_script_lang_js_,\n  tag_render,\n  tag_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var tag_api; }\ntag_component.options.__file = \"packages/tag/src/tag.vue\"\n/* harmony default export */ var src_tag = (tag_component.exports);\n// CONCATENATED MODULE: ./packages/tag/index.js\n\n\n/* istanbul ignore next */\nsrc_tag.install = function (Vue) {\n  Vue.component(src_tag.name, src_tag);\n};\n\n/* harmony default export */ var packages_tag = (src_tag);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/tree/src/tree.vue?vue&type=template&id=547575a6&\nvar treevue_type_template_id_547575a6_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    {\n      staticClass: \"el-tree\",\n      class: {\n        \"el-tree--highlight-current\": _vm.highlightCurrent,\n        \"is-dragging\": !!_vm.dragState.draggingNode,\n        \"is-drop-not-allow\": !_vm.dragState.allowDrop,\n        \"is-drop-inner\": _vm.dragState.dropType === \"inner\"\n      },\n      attrs: { role: \"tree\" }\n    },\n    [\n      _vm._l(_vm.root.childNodes, function(child) {\n        return _c(\"el-tree-node\", {\n          key: _vm.getNodeKey(child),\n          attrs: {\n            node: child,\n            props: _vm.props,\n            \"render-after-expand\": _vm.renderAfterExpand,\n            \"show-checkbox\": _vm.showCheckbox,\n            \"render-content\": _vm.renderContent\n          },\n          on: { \"node-expand\": _vm.handleNodeExpand }\n        })\n      }),\n      _vm.isEmpty\n        ? _c(\"div\", { staticClass: \"el-tree__empty-block\" }, [\n            _c(\"span\", { staticClass: \"el-tree__empty-text\" }, [\n              _vm._v(_vm._s(_vm.emptyText))\n            ])\n          ])\n        : _vm._e(),\n      _c(\"div\", {\n        directives: [\n          {\n            name: \"show\",\n            rawName: \"v-show\",\n            value: _vm.dragState.showDropIndicator,\n            expression: \"dragState.showDropIndicator\"\n          }\n        ],\n        ref: \"dropIndicator\",\n        staticClass: \"el-tree__drop-indicator\"\n      })\n    ],\n    2\n  )\n}\nvar treevue_type_template_id_547575a6_staticRenderFns = []\ntreevue_type_template_id_547575a6_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/tree/src/tree.vue?vue&type=template&id=547575a6&\n\n// CONCATENATED MODULE: ./packages/tree/src/model/util.js\nvar NODE_KEY = '$treeNodeId';\n\nvar markNodeData = function markNodeData(node, data) {\n  if (!data || data[NODE_KEY]) return;\n  Object.defineProperty(data, NODE_KEY, {\n    value: node.id,\n    enumerable: false,\n    configurable: false,\n    writable: false\n  });\n};\n\nvar util_getNodeKey = function getNodeKey(key, data) {\n  if (!key) return data[NODE_KEY];\n  return data[key];\n};\n\nvar findNearestComponent = function findNearestComponent(element, componentName) {\n  var target = element;\n  while (target && target.tagName !== 'BODY') {\n    if (target.__vue__ && target.__vue__.$options.name === componentName) {\n      return target.__vue__;\n    }\n    target = target.parentNode;\n  }\n  return null;\n};\n// CONCATENATED MODULE: ./packages/tree/src/model/node.js\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction node_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\n\n\n\nvar getChildState = function getChildState(node) {\n  var all = true;\n  var none = true;\n  var allWithoutDisable = true;\n  for (var i = 0, j = node.length; i < j; i++) {\n    var n = node[i];\n    if (n.checked !== true || n.indeterminate) {\n      all = false;\n      if (!n.disabled) {\n        allWithoutDisable = false;\n      }\n    }\n    if (n.checked !== false || n.indeterminate) {\n      none = false;\n    }\n  }\n\n  return { all: all, none: none, allWithoutDisable: allWithoutDisable, half: !all && !none };\n};\n\nvar reInitChecked = function reInitChecked(node) {\n  if (node.childNodes.length === 0 || node.loading) return;\n\n  var _getChildState = getChildState(node.childNodes),\n      all = _getChildState.all,\n      none = _getChildState.none,\n      half = _getChildState.half;\n\n  if (all) {\n    node.checked = true;\n    node.indeterminate = false;\n  } else if (half) {\n    node.checked = false;\n    node.indeterminate = true;\n  } else if (none) {\n    node.checked = false;\n    node.indeterminate = false;\n  }\n\n  var parent = node.parent;\n  if (!parent || parent.level === 0) return;\n\n  if (!node.store.checkStrictly) {\n    reInitChecked(parent);\n  }\n};\n\nvar getPropertyFromData = function getPropertyFromData(node, prop) {\n  var props = node.store.props;\n  var data = node.data || {};\n  var config = props[prop];\n\n  if (typeof config === 'function') {\n    return config(data, node);\n  } else if (typeof config === 'string') {\n    return data[config];\n  } else if (typeof config === 'undefined') {\n    var dataProp = data[prop];\n    return dataProp === undefined ? '' : dataProp;\n  }\n};\n\nvar nodeIdSeed = 0;\n\nvar node_Node = function () {\n  function Node(options) {\n    node_classCallCheck(this, Node);\n\n    this.id = nodeIdSeed++;\n    this.text = null;\n    this.checked = false;\n    this.indeterminate = false;\n    this.data = null;\n    this.expanded = false;\n    this.parent = null;\n    this.visible = true;\n    this.isCurrent = false;\n\n    for (var name in options) {\n      if (options.hasOwnProperty(name)) {\n        this[name] = options[name];\n      }\n    }\n\n    // internal\n    this.level = 0;\n    this.loaded = false;\n    this.childNodes = [];\n    this.loading = false;\n\n    if (this.parent) {\n      this.level = this.parent.level + 1;\n    }\n\n    var store = this.store;\n    if (!store) {\n      throw new Error('[Node]store is required!');\n    }\n    store.registerNode(this);\n\n    var props = store.props;\n    if (props && typeof props.isLeaf !== 'undefined') {\n      var isLeaf = getPropertyFromData(this, 'isLeaf');\n      if (typeof isLeaf === 'boolean') {\n        this.isLeafByUser = isLeaf;\n      }\n    }\n\n    if (store.lazy !== true && this.data) {\n      this.setData(this.data);\n\n      if (store.defaultExpandAll) {\n        this.expanded = true;\n      }\n    } else if (this.level > 0 && store.lazy && store.defaultExpandAll) {\n      this.expand();\n    }\n    if (!Array.isArray(this.data)) {\n      markNodeData(this, this.data);\n    }\n    if (!this.data) return;\n    var defaultExpandedKeys = store.defaultExpandedKeys;\n    var key = store.key;\n    if (key && defaultExpandedKeys && defaultExpandedKeys.indexOf(this.key) !== -1) {\n      this.expand(null, store.autoExpandParent);\n    }\n\n    if (key && store.currentNodeKey !== undefined && this.key === store.currentNodeKey) {\n      store.currentNode = this;\n      store.currentNode.isCurrent = true;\n    }\n\n    if (store.lazy) {\n      store._initDefaultCheckedNode(this);\n    }\n\n    this.updateLeafState();\n  }\n\n  Node.prototype.setData = function setData(data) {\n    if (!Array.isArray(data)) {\n      markNodeData(this, data);\n    }\n\n    this.data = data;\n    this.childNodes = [];\n\n    var children = void 0;\n    if (this.level === 0 && this.data instanceof Array) {\n      children = this.data;\n    } else {\n      children = getPropertyFromData(this, 'children') || [];\n    }\n\n    for (var i = 0, j = children.length; i < j; i++) {\n      this.insertChild({ data: children[i] });\n    }\n  };\n\n  Node.prototype.contains = function contains(target) {\n    var deep = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n    var walk = function walk(parent) {\n      var children = parent.childNodes || [];\n      var result = false;\n      for (var i = 0, j = children.length; i < j; i++) {\n        var child = children[i];\n        if (child === target || deep && walk(child)) {\n          result = true;\n          break;\n        }\n      }\n      return result;\n    };\n\n    return walk(this);\n  };\n\n  Node.prototype.remove = function remove() {\n    var parent = this.parent;\n    if (parent) {\n      parent.removeChild(this);\n    }\n  };\n\n  Node.prototype.insertChild = function insertChild(child, index, batch) {\n    if (!child) throw new Error('insertChild error: child is required.');\n\n    if (!(child instanceof Node)) {\n      if (!batch) {\n        var children = this.getChildren(true) || [];\n        if (children.indexOf(child.data) === -1) {\n          if (typeof index === 'undefined' || index < 0) {\n            children.push(child.data);\n          } else {\n            children.splice(index, 0, child.data);\n          }\n        }\n      }\n      merge_default()(child, {\n        parent: this,\n        store: this.store\n      });\n      child = new Node(child);\n    }\n\n    child.level = this.level + 1;\n\n    if (typeof index === 'undefined' || index < 0) {\n      this.childNodes.push(child);\n    } else {\n      this.childNodes.splice(index, 0, child);\n    }\n\n    this.updateLeafState();\n  };\n\n  Node.prototype.insertBefore = function insertBefore(child, ref) {\n    var index = void 0;\n    if (ref) {\n      index = this.childNodes.indexOf(ref);\n    }\n    this.insertChild(child, index);\n  };\n\n  Node.prototype.insertAfter = function insertAfter(child, ref) {\n    var index = void 0;\n    if (ref) {\n      index = this.childNodes.indexOf(ref);\n      if (index !== -1) index += 1;\n    }\n    this.insertChild(child, index);\n  };\n\n  Node.prototype.removeChild = function removeChild(child) {\n    var children = this.getChildren() || [];\n    var dataIndex = children.indexOf(child.data);\n    if (dataIndex > -1) {\n      children.splice(dataIndex, 1);\n    }\n\n    var index = this.childNodes.indexOf(child);\n\n    if (index > -1) {\n      this.store && this.store.deregisterNode(child);\n      child.parent = null;\n      this.childNodes.splice(index, 1);\n    }\n\n    this.updateLeafState();\n  };\n\n  Node.prototype.removeChildByData = function removeChildByData(data) {\n    var targetNode = null;\n\n    for (var i = 0; i < this.childNodes.length; i++) {\n      if (this.childNodes[i].data === data) {\n        targetNode = this.childNodes[i];\n        break;\n      }\n    }\n\n    if (targetNode) {\n      this.removeChild(targetNode);\n    }\n  };\n\n  Node.prototype.expand = function expand(callback, expandParent) {\n    var _this = this;\n\n    var done = function done() {\n      if (expandParent) {\n        var parent = _this.parent;\n        while (parent.level > 0) {\n          parent.expanded = true;\n          parent = parent.parent;\n        }\n      }\n      _this.expanded = true;\n      if (callback) callback();\n    };\n\n    if (this.shouldLoadData()) {\n      this.loadData(function (data) {\n        if (data instanceof Array) {\n          if (_this.checked) {\n            _this.setChecked(true, true);\n          } else if (!_this.store.checkStrictly) {\n            reInitChecked(_this);\n          }\n          done();\n        }\n      });\n    } else {\n      done();\n    }\n  };\n\n  Node.prototype.doCreateChildren = function doCreateChildren(array) {\n    var _this2 = this;\n\n    var defaultProps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    array.forEach(function (item) {\n      _this2.insertChild(merge_default()({ data: item }, defaultProps), undefined, true);\n    });\n  };\n\n  Node.prototype.collapse = function collapse() {\n    this.expanded = false;\n  };\n\n  Node.prototype.shouldLoadData = function shouldLoadData() {\n    return this.store.lazy === true && this.store.load && !this.loaded;\n  };\n\n  Node.prototype.updateLeafState = function updateLeafState() {\n    if (this.store.lazy === true && this.loaded !== true && typeof this.isLeafByUser !== 'undefined') {\n      this.isLeaf = this.isLeafByUser;\n      return;\n    }\n    var childNodes = this.childNodes;\n    if (!this.store.lazy || this.store.lazy === true && this.loaded === true) {\n      this.isLeaf = !childNodes || childNodes.length === 0;\n      return;\n    }\n    this.isLeaf = false;\n  };\n\n  Node.prototype.setChecked = function setChecked(value, deep, recursion, passValue) {\n    var _this3 = this;\n\n    this.indeterminate = value === 'half';\n    this.checked = value === true;\n\n    if (this.store.checkStrictly) return;\n\n    if (!(this.shouldLoadData() && !this.store.checkDescendants)) {\n      var _getChildState2 = getChildState(this.childNodes),\n          all = _getChildState2.all,\n          allWithoutDisable = _getChildState2.allWithoutDisable;\n\n      if (!this.isLeaf && !all && allWithoutDisable) {\n        this.checked = false;\n        value = false;\n      }\n\n      var handleDescendants = function handleDescendants() {\n        if (deep) {\n          var childNodes = _this3.childNodes;\n          for (var i = 0, j = childNodes.length; i < j; i++) {\n            var child = childNodes[i];\n            passValue = passValue || value !== false;\n            var isCheck = child.disabled ? child.checked : passValue;\n            child.setChecked(isCheck, deep, true, passValue);\n          }\n\n          var _getChildState3 = getChildState(childNodes),\n              half = _getChildState3.half,\n              _all = _getChildState3.all;\n\n          if (!_all) {\n            _this3.checked = _all;\n            _this3.indeterminate = half;\n          }\n        }\n      };\n\n      if (this.shouldLoadData()) {\n        // Only work on lazy load data.\n        this.loadData(function () {\n          handleDescendants();\n          reInitChecked(_this3);\n        }, {\n          checked: value !== false\n        });\n        return;\n      } else {\n        handleDescendants();\n      }\n    }\n\n    var parent = this.parent;\n    if (!parent || parent.level === 0) return;\n\n    if (!recursion) {\n      reInitChecked(parent);\n    }\n  };\n\n  Node.prototype.getChildren = function getChildren() {\n    var forceInit = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n    // this is data\n    if (this.level === 0) return this.data;\n    var data = this.data;\n    if (!data) return null;\n\n    var props = this.store.props;\n    var children = 'children';\n    if (props) {\n      children = props.children || 'children';\n    }\n\n    if (data[children] === undefined) {\n      data[children] = null;\n    }\n\n    if (forceInit && !data[children]) {\n      data[children] = [];\n    }\n\n    return data[children];\n  };\n\n  Node.prototype.updateChildren = function updateChildren() {\n    var _this4 = this;\n\n    var newData = this.getChildren() || [];\n    var oldData = this.childNodes.map(function (node) {\n      return node.data;\n    });\n\n    var newDataMap = {};\n    var newNodes = [];\n\n    newData.forEach(function (item, index) {\n      var key = item[NODE_KEY];\n      var isNodeExists = !!key && Object(util_[\"arrayFindIndex\"])(oldData, function (data) {\n        return data[NODE_KEY] === key;\n      }) >= 0;\n      if (isNodeExists) {\n        newDataMap[key] = { index: index, data: item };\n      } else {\n        newNodes.push({ index: index, data: item });\n      }\n    });\n\n    if (!this.store.lazy) {\n      oldData.forEach(function (item) {\n        if (!newDataMap[item[NODE_KEY]]) _this4.removeChildByData(item);\n      });\n    }\n\n    newNodes.forEach(function (_ref) {\n      var index = _ref.index,\n          data = _ref.data;\n\n      _this4.insertChild({ data: data }, index);\n    });\n\n    this.updateLeafState();\n  };\n\n  Node.prototype.loadData = function loadData(callback) {\n    var _this5 = this;\n\n    var defaultProps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    if (this.store.lazy === true && this.store.load && !this.loaded && (!this.loading || Object.keys(defaultProps).length)) {\n      this.loading = true;\n\n      var resolve = function resolve(children) {\n        _this5.childNodes = [];\n\n        _this5.doCreateChildren(children, defaultProps);\n        _this5.loaded = true;\n        _this5.loading = false;\n        _this5.updateLeafState();\n        if (callback) {\n          callback.call(_this5, children);\n        }\n      };\n\n      this.store.load(this, resolve);\n    } else {\n      if (callback) {\n        callback.call(this);\n      }\n    }\n  };\n\n  _createClass(Node, [{\n    key: 'label',\n    get: function get() {\n      return getPropertyFromData(this, 'label');\n    }\n  }, {\n    key: 'key',\n    get: function get() {\n      var nodeKey = this.store.key;\n      if (this.data) return this.data[nodeKey];\n      return null;\n    }\n  }, {\n    key: 'disabled',\n    get: function get() {\n      return getPropertyFromData(this, 'disabled');\n    }\n  }, {\n    key: 'nextSibling',\n    get: function get() {\n      var parent = this.parent;\n      if (parent) {\n        var index = parent.childNodes.indexOf(this);\n        if (index > -1) {\n          return parent.childNodes[index + 1];\n        }\n      }\n      return null;\n    }\n  }, {\n    key: 'previousSibling',\n    get: function get() {\n      var parent = this.parent;\n      if (parent) {\n        var index = parent.childNodes.indexOf(this);\n        if (index > -1) {\n          return index > 0 ? parent.childNodes[index - 1] : null;\n        }\n      }\n      return null;\n    }\n  }]);\n\n  return Node;\n}();\n\n/* harmony default export */ var model_node = (node_Node);\n// CONCATENATED MODULE: ./packages/tree/src/model/tree-store.js\nvar tree_store_typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nfunction tree_store_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\n\n\nvar tree_store_TreeStore = function () {\n  function TreeStore(options) {\n    var _this = this;\n\n    tree_store_classCallCheck(this, TreeStore);\n\n    this.currentNode = null;\n    this.currentNodeKey = null;\n\n    for (var option in options) {\n      if (options.hasOwnProperty(option)) {\n        this[option] = options[option];\n      }\n    }\n\n    this.nodesMap = {};\n\n    this.root = new model_node({\n      data: this.data,\n      store: this\n    });\n\n    if (this.lazy && this.load) {\n      var loadFn = this.load;\n      loadFn(this.root, function (data) {\n        _this.root.doCreateChildren(data);\n        _this._initDefaultCheckedNodes();\n      });\n    } else {\n      this._initDefaultCheckedNodes();\n    }\n  }\n\n  TreeStore.prototype.filter = function filter(value) {\n    var filterNodeMethod = this.filterNodeMethod;\n    var lazy = this.lazy;\n    var traverse = function traverse(node) {\n      var childNodes = node.root ? node.root.childNodes : node.childNodes;\n\n      childNodes.forEach(function (child) {\n        child.visible = filterNodeMethod.call(child, value, child.data, child);\n\n        traverse(child);\n      });\n\n      if (!node.visible && childNodes.length) {\n        var allHidden = true;\n        allHidden = !childNodes.some(function (child) {\n          return child.visible;\n        });\n\n        if (node.root) {\n          node.root.visible = allHidden === false;\n        } else {\n          node.visible = allHidden === false;\n        }\n      }\n      if (!value) return;\n\n      if (node.visible && !node.isLeaf && !lazy) node.expand();\n    };\n\n    traverse(this);\n  };\n\n  TreeStore.prototype.setData = function setData(newVal) {\n    var instanceChanged = newVal !== this.root.data;\n    if (instanceChanged) {\n      this.root.setData(newVal);\n      this._initDefaultCheckedNodes();\n    } else {\n      this.root.updateChildren();\n    }\n  };\n\n  TreeStore.prototype.getNode = function getNode(data) {\n    if (data instanceof model_node) return data;\n    var key = (typeof data === 'undefined' ? 'undefined' : tree_store_typeof(data)) !== 'object' ? data : util_getNodeKey(this.key, data);\n    return this.nodesMap[key] || null;\n  };\n\n  TreeStore.prototype.insertBefore = function insertBefore(data, refData) {\n    var refNode = this.getNode(refData);\n    refNode.parent.insertBefore({ data: data }, refNode);\n  };\n\n  TreeStore.prototype.insertAfter = function insertAfter(data, refData) {\n    var refNode = this.getNode(refData);\n    refNode.parent.insertAfter({ data: data }, refNode);\n  };\n\n  TreeStore.prototype.remove = function remove(data) {\n    var node = this.getNode(data);\n\n    if (node && node.parent) {\n      if (node === this.currentNode) {\n        this.currentNode = null;\n      }\n      node.parent.removeChild(node);\n    }\n  };\n\n  TreeStore.prototype.append = function append(data, parentData) {\n    var parentNode = parentData ? this.getNode(parentData) : this.root;\n\n    if (parentNode) {\n      parentNode.insertChild({ data: data });\n    }\n  };\n\n  TreeStore.prototype._initDefaultCheckedNodes = function _initDefaultCheckedNodes() {\n    var _this2 = this;\n\n    var defaultCheckedKeys = this.defaultCheckedKeys || [];\n    var nodesMap = this.nodesMap;\n\n    defaultCheckedKeys.forEach(function (checkedKey) {\n      var node = nodesMap[checkedKey];\n\n      if (node) {\n        node.setChecked(true, !_this2.checkStrictly);\n      }\n    });\n  };\n\n  TreeStore.prototype._initDefaultCheckedNode = function _initDefaultCheckedNode(node) {\n    var defaultCheckedKeys = this.defaultCheckedKeys || [];\n\n    if (defaultCheckedKeys.indexOf(node.key) !== -1) {\n      node.setChecked(true, !this.checkStrictly);\n    }\n  };\n\n  TreeStore.prototype.setDefaultCheckedKey = function setDefaultCheckedKey(newVal) {\n    if (newVal !== this.defaultCheckedKeys) {\n      this.defaultCheckedKeys = newVal;\n      this._initDefaultCheckedNodes();\n    }\n  };\n\n  TreeStore.prototype.registerNode = function registerNode(node) {\n    var key = this.key;\n    if (!key || !node || !node.data) return;\n\n    var nodeKey = node.key;\n    if (nodeKey !== undefined) this.nodesMap[node.key] = node;\n  };\n\n  TreeStore.prototype.deregisterNode = function deregisterNode(node) {\n    var _this3 = this;\n\n    var key = this.key;\n    if (!key || !node || !node.data) return;\n\n    node.childNodes.forEach(function (child) {\n      _this3.deregisterNode(child);\n    });\n\n    delete this.nodesMap[node.key];\n  };\n\n  TreeStore.prototype.getCheckedNodes = function getCheckedNodes() {\n    var leafOnly = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n    var includeHalfChecked = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n    var checkedNodes = [];\n    var traverse = function traverse(node) {\n      var childNodes = node.root ? node.root.childNodes : node.childNodes;\n\n      childNodes.forEach(function (child) {\n        if ((child.checked || includeHalfChecked && child.indeterminate) && (!leafOnly || leafOnly && child.isLeaf)) {\n          checkedNodes.push(child.data);\n        }\n\n        traverse(child);\n      });\n    };\n\n    traverse(this);\n\n    return checkedNodes;\n  };\n\n  TreeStore.prototype.getCheckedKeys = function getCheckedKeys() {\n    var _this4 = this;\n\n    var leafOnly = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n    return this.getCheckedNodes(leafOnly).map(function (data) {\n      return (data || {})[_this4.key];\n    });\n  };\n\n  TreeStore.prototype.getHalfCheckedNodes = function getHalfCheckedNodes() {\n    var nodes = [];\n    var traverse = function traverse(node) {\n      var childNodes = node.root ? node.root.childNodes : node.childNodes;\n\n      childNodes.forEach(function (child) {\n        if (child.indeterminate) {\n          nodes.push(child.data);\n        }\n\n        traverse(child);\n      });\n    };\n\n    traverse(this);\n\n    return nodes;\n  };\n\n  TreeStore.prototype.getHalfCheckedKeys = function getHalfCheckedKeys() {\n    var _this5 = this;\n\n    return this.getHalfCheckedNodes().map(function (data) {\n      return (data || {})[_this5.key];\n    });\n  };\n\n  TreeStore.prototype._getAllNodes = function _getAllNodes() {\n    var allNodes = [];\n    var nodesMap = this.nodesMap;\n    for (var nodeKey in nodesMap) {\n      if (nodesMap.hasOwnProperty(nodeKey)) {\n        allNodes.push(nodesMap[nodeKey]);\n      }\n    }\n\n    return allNodes;\n  };\n\n  TreeStore.prototype.updateChildren = function updateChildren(key, data) {\n    var node = this.nodesMap[key];\n    if (!node) return;\n    var childNodes = node.childNodes;\n    for (var i = childNodes.length - 1; i >= 0; i--) {\n      var child = childNodes[i];\n      this.remove(child.data);\n    }\n    for (var _i = 0, j = data.length; _i < j; _i++) {\n      var _child = data[_i];\n      this.append(_child, node.data);\n    }\n  };\n\n  TreeStore.prototype._setCheckedKeys = function _setCheckedKeys(key) {\n    var leafOnly = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n    var checkedKeys = arguments[2];\n\n    var allNodes = this._getAllNodes().sort(function (a, b) {\n      return b.level - a.level;\n    });\n    var cache = Object.create(null);\n    var keys = Object.keys(checkedKeys);\n    allNodes.forEach(function (node) {\n      return node.setChecked(false, false);\n    });\n    for (var i = 0, j = allNodes.length; i < j; i++) {\n      var node = allNodes[i];\n      var nodeKey = node.data[key].toString();\n      var checked = keys.indexOf(nodeKey) > -1;\n      if (!checked) {\n        if (node.checked && !cache[nodeKey]) {\n          node.setChecked(false, false);\n        }\n        continue;\n      }\n\n      var parent = node.parent;\n      while (parent && parent.level > 0) {\n        cache[parent.data[key]] = true;\n        parent = parent.parent;\n      }\n\n      if (node.isLeaf || this.checkStrictly) {\n        node.setChecked(true, false);\n        continue;\n      }\n      node.setChecked(true, true);\n\n      if (leafOnly) {\n        (function () {\n          node.setChecked(false, false);\n          var traverse = function traverse(node) {\n            var childNodes = node.childNodes;\n            childNodes.forEach(function (child) {\n              if (!child.isLeaf) {\n                child.setChecked(false, false);\n              }\n              traverse(child);\n            });\n          };\n          traverse(node);\n        })();\n      }\n    }\n  };\n\n  TreeStore.prototype.setCheckedNodes = function setCheckedNodes(array) {\n    var leafOnly = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n    var key = this.key;\n    var checkedKeys = {};\n    array.forEach(function (item) {\n      checkedKeys[(item || {})[key]] = true;\n    });\n\n    this._setCheckedKeys(key, leafOnly, checkedKeys);\n  };\n\n  TreeStore.prototype.setCheckedKeys = function setCheckedKeys(keys) {\n    var leafOnly = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n    this.defaultCheckedKeys = keys;\n    var key = this.key;\n    var checkedKeys = {};\n    keys.forEach(function (key) {\n      checkedKeys[key] = true;\n    });\n\n    this._setCheckedKeys(key, leafOnly, checkedKeys);\n  };\n\n  TreeStore.prototype.setDefaultExpandedKeys = function setDefaultExpandedKeys(keys) {\n    var _this6 = this;\n\n    keys = keys || [];\n    this.defaultExpandedKeys = keys;\n\n    keys.forEach(function (key) {\n      var node = _this6.getNode(key);\n      if (node) node.expand(null, _this6.autoExpandParent);\n    });\n  };\n\n  TreeStore.prototype.setChecked = function setChecked(data, checked, deep) {\n    var node = this.getNode(data);\n\n    if (node) {\n      node.setChecked(!!checked, deep);\n    }\n  };\n\n  TreeStore.prototype.getCurrentNode = function getCurrentNode() {\n    return this.currentNode;\n  };\n\n  TreeStore.prototype.setCurrentNode = function setCurrentNode(currentNode) {\n    var prevCurrentNode = this.currentNode;\n    if (prevCurrentNode) {\n      prevCurrentNode.isCurrent = false;\n    }\n    this.currentNode = currentNode;\n    this.currentNode.isCurrent = true;\n  };\n\n  TreeStore.prototype.setUserCurrentNode = function setUserCurrentNode(node) {\n    var key = node[this.key];\n    var currNode = this.nodesMap[key];\n    this.setCurrentNode(currNode);\n  };\n\n  TreeStore.prototype.setCurrentNodeKey = function setCurrentNodeKey(key) {\n    if (key === null || key === undefined) {\n      this.currentNode && (this.currentNode.isCurrent = false);\n      this.currentNode = null;\n      return;\n    }\n    var node = this.getNode(key);\n    if (node) {\n      this.setCurrentNode(node);\n    }\n  };\n\n  return TreeStore;\n}();\n\n/* harmony default export */ var tree_store = (tree_store_TreeStore);\n;\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/tree/src/tree-node.vue?vue&type=template&id=3ba3ef0e&\nvar tree_nodevue_type_template_id_3ba3ef0e_render = function() {\n  var this$1 = this\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    {\n      directives: [\n        {\n          name: \"show\",\n          rawName: \"v-show\",\n          value: _vm.node.visible,\n          expression: \"node.visible\"\n        }\n      ],\n      ref: \"node\",\n      staticClass: \"el-tree-node\",\n      class: {\n        \"is-expanded\": _vm.expanded,\n        \"is-current\": _vm.node.isCurrent,\n        \"is-hidden\": !_vm.node.visible,\n        \"is-focusable\": !_vm.node.disabled,\n        \"is-checked\": !_vm.node.disabled && _vm.node.checked\n      },\n      attrs: {\n        role: \"treeitem\",\n        tabindex: \"-1\",\n        \"aria-expanded\": _vm.expanded,\n        \"aria-disabled\": _vm.node.disabled,\n        \"aria-checked\": _vm.node.checked,\n        draggable: _vm.tree.draggable\n      },\n      on: {\n        click: function($event) {\n          $event.stopPropagation()\n          return _vm.handleClick($event)\n        },\n        contextmenu: function($event) {\n          return this$1.handleContextMenu($event)\n        },\n        dragstart: function($event) {\n          $event.stopPropagation()\n          return _vm.handleDragStart($event)\n        },\n        dragover: function($event) {\n          $event.stopPropagation()\n          return _vm.handleDragOver($event)\n        },\n        dragend: function($event) {\n          $event.stopPropagation()\n          return _vm.handleDragEnd($event)\n        },\n        drop: function($event) {\n          $event.stopPropagation()\n          return _vm.handleDrop($event)\n        }\n      }\n    },\n    [\n      _c(\n        \"div\",\n        {\n          staticClass: \"el-tree-node__content\",\n          style: {\n            \"padding-left\": (_vm.node.level - 1) * _vm.tree.indent + \"px\"\n          }\n        },\n        [\n          _c(\"span\", {\n            class: [\n              {\n                \"is-leaf\": _vm.node.isLeaf,\n                expanded: !_vm.node.isLeaf && _vm.expanded\n              },\n              \"el-tree-node__expand-icon\",\n              _vm.tree.iconClass ? _vm.tree.iconClass : \"el-icon-caret-right\"\n            ],\n            on: {\n              click: function($event) {\n                $event.stopPropagation()\n                return _vm.handleExpandIconClick($event)\n              }\n            }\n          }),\n          _vm.showCheckbox\n            ? _c(\"el-checkbox\", {\n                attrs: {\n                  indeterminate: _vm.node.indeterminate,\n                  disabled: !!_vm.node.disabled\n                },\n                on: { change: _vm.handleCheckChange },\n                nativeOn: {\n                  click: function($event) {\n                    $event.stopPropagation()\n                  }\n                },\n                model: {\n                  value: _vm.node.checked,\n                  callback: function($$v) {\n                    _vm.$set(_vm.node, \"checked\", $$v)\n                  },\n                  expression: \"node.checked\"\n                }\n              })\n            : _vm._e(),\n          _vm.node.loading\n            ? _c(\"span\", {\n                staticClass: \"el-tree-node__loading-icon el-icon-loading\"\n              })\n            : _vm._e(),\n          _c(\"node-content\", { attrs: { node: _vm.node } })\n        ],\n        1\n      ),\n      _c(\"el-collapse-transition\", [\n        !_vm.renderAfterExpand || _vm.childNodeRendered\n          ? _c(\n              \"div\",\n              {\n                directives: [\n                  {\n                    name: \"show\",\n                    rawName: \"v-show\",\n                    value: _vm.expanded,\n                    expression: \"expanded\"\n                  }\n                ],\n                staticClass: \"el-tree-node__children\",\n                attrs: { role: \"group\", \"aria-expanded\": _vm.expanded }\n              },\n              _vm._l(_vm.node.childNodes, function(child) {\n                return _c(\"el-tree-node\", {\n                  key: _vm.getNodeKey(child),\n                  attrs: {\n                    \"render-content\": _vm.renderContent,\n                    \"render-after-expand\": _vm.renderAfterExpand,\n                    \"show-checkbox\": _vm.showCheckbox,\n                    node: child\n                  },\n                  on: { \"node-expand\": _vm.handleChildNodeExpand }\n                })\n              }),\n              1\n            )\n          : _vm._e()\n      ])\n    ],\n    1\n  )\n}\nvar tree_nodevue_type_template_id_3ba3ef0e_staticRenderFns = []\ntree_nodevue_type_template_id_3ba3ef0e_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/tree/src/tree-node.vue?vue&type=template&id=3ba3ef0e&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/tree/src/tree-node.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n/* harmony default export */ var tree_nodevue_type_script_lang_js_ = ({\n  name: 'ElTreeNode',\n\n  componentName: 'ElTreeNode',\n\n  mixins: [emitter_default.a],\n\n  props: {\n    node: {\n      default: function _default() {\n        return {};\n      }\n    },\n    props: {},\n    renderContent: Function,\n    renderAfterExpand: {\n      type: Boolean,\n      default: true\n    },\n    showCheckbox: {\n      type: Boolean,\n      default: false\n    }\n  },\n\n  components: {\n    ElCollapseTransition: collapse_transition_default.a,\n    ElCheckbox: checkbox_default.a,\n    NodeContent: {\n      props: {\n        node: {\n          required: true\n        }\n      },\n      render: function render(h) {\n        var parent = this.$parent;\n        var tree = parent.tree;\n        var node = this.node;\n        var data = node.data,\n            store = node.store;\n\n        return parent.renderContent ? parent.renderContent.call(parent._renderProxy, h, { _self: tree.$vnode.context, node: node, data: data, store: store }) : tree.$scopedSlots.default ? tree.$scopedSlots.default({ node: node, data: data }) : h(\n          'span',\n          { 'class': 'el-tree-node__label' },\n          [node.label]\n        );\n      }\n    }\n  },\n\n  data: function data() {\n    return {\n      tree: null,\n      expanded: false,\n      childNodeRendered: false,\n      oldChecked: null,\n      oldIndeterminate: null\n    };\n  },\n\n\n  watch: {\n    'node.indeterminate': function nodeIndeterminate(val) {\n      this.handleSelectChange(this.node.checked, val);\n    },\n    'node.checked': function nodeChecked(val) {\n      this.handleSelectChange(val, this.node.indeterminate);\n    },\n    'node.expanded': function nodeExpanded(val) {\n      var _this = this;\n\n      this.$nextTick(function () {\n        return _this.expanded = val;\n      });\n      if (val) {\n        this.childNodeRendered = true;\n      }\n    }\n  },\n\n  methods: {\n    getNodeKey: function getNodeKey(node) {\n      return util_getNodeKey(this.tree.nodeKey, node.data);\n    },\n    handleSelectChange: function handleSelectChange(checked, indeterminate) {\n      if (this.oldChecked !== checked && this.oldIndeterminate !== indeterminate) {\n        this.tree.$emit('check-change', this.node.data, checked, indeterminate);\n      }\n      this.oldChecked = checked;\n      this.indeterminate = indeterminate;\n    },\n    handleClick: function handleClick() {\n      var store = this.tree.store;\n      store.setCurrentNode(this.node);\n      this.tree.$emit('current-change', store.currentNode ? store.currentNode.data : null, store.currentNode);\n      this.tree.currentNode = this;\n      if (this.tree.expandOnClickNode) {\n        this.handleExpandIconClick();\n      }\n      if (this.tree.checkOnClickNode && !this.node.disabled) {\n        this.handleCheckChange(null, {\n          target: { checked: !this.node.checked }\n        });\n      }\n      this.tree.$emit('node-click', this.node.data, this.node, this);\n    },\n    handleContextMenu: function handleContextMenu(event) {\n      if (this.tree._events['node-contextmenu'] && this.tree._events['node-contextmenu'].length > 0) {\n        event.stopPropagation();\n        event.preventDefault();\n      }\n      this.tree.$emit('node-contextmenu', event, this.node.data, this.node, this);\n    },\n    handleExpandIconClick: function handleExpandIconClick() {\n      if (this.node.isLeaf) return;\n      if (this.expanded) {\n        this.tree.$emit('node-collapse', this.node.data, this.node, this);\n        this.node.collapse();\n      } else {\n        this.node.expand();\n        this.$emit('node-expand', this.node.data, this.node, this);\n      }\n    },\n    handleCheckChange: function handleCheckChange(value, ev) {\n      var _this2 = this;\n\n      this.node.setChecked(ev.target.checked, !this.tree.checkStrictly);\n      this.$nextTick(function () {\n        var store = _this2.tree.store;\n        _this2.tree.$emit('check', _this2.node.data, {\n          checkedNodes: store.getCheckedNodes(),\n          checkedKeys: store.getCheckedKeys(),\n          halfCheckedNodes: store.getHalfCheckedNodes(),\n          halfCheckedKeys: store.getHalfCheckedKeys()\n        });\n      });\n    },\n    handleChildNodeExpand: function handleChildNodeExpand(nodeData, node, instance) {\n      this.broadcast('ElTreeNode', 'tree-node-expand', node);\n      this.tree.$emit('node-expand', nodeData, node, instance);\n    },\n    handleDragStart: function handleDragStart(event) {\n      if (!this.tree.draggable) return;\n      this.tree.$emit('tree-node-drag-start', event, this);\n    },\n    handleDragOver: function handleDragOver(event) {\n      if (!this.tree.draggable) return;\n      this.tree.$emit('tree-node-drag-over', event, this);\n      event.preventDefault();\n    },\n    handleDrop: function handleDrop(event) {\n      event.preventDefault();\n    },\n    handleDragEnd: function handleDragEnd(event) {\n      if (!this.tree.draggable) return;\n      this.tree.$emit('tree-node-drag-end', event, this);\n    }\n  },\n\n  created: function created() {\n    var _this3 = this;\n\n    var parent = this.$parent;\n\n    if (parent.isTree) {\n      this.tree = parent;\n    } else {\n      this.tree = parent.tree;\n    }\n\n    var tree = this.tree;\n    if (!tree) {\n      console.warn('Can not find node\\'s tree.');\n    }\n\n    var props = tree.props || {};\n    var childrenKey = props['children'] || 'children';\n\n    this.$watch('node.data.' + childrenKey, function () {\n      _this3.node.updateChildren();\n    });\n\n    if (this.node.expanded) {\n      this.expanded = true;\n      this.childNodeRendered = true;\n    }\n\n    if (this.tree.accordion) {\n      this.$on('tree-node-expand', function (node) {\n        if (_this3.node !== node) {\n          _this3.node.collapse();\n        }\n      });\n    }\n  }\n});\n// CONCATENATED MODULE: ./packages/tree/src/tree-node.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_tree_nodevue_type_script_lang_js_ = (tree_nodevue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/tree/src/tree-node.vue\n\n\n\n\n\n/* normalize component */\n\nvar tree_node_component = normalizeComponent(\n  src_tree_nodevue_type_script_lang_js_,\n  tree_nodevue_type_template_id_3ba3ef0e_render,\n  tree_nodevue_type_template_id_3ba3ef0e_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var tree_node_api; }\ntree_node_component.options.__file = \"packages/tree/src/tree-node.vue\"\n/* harmony default export */ var tree_node = (tree_node_component.exports);\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/tree/src/tree.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n\n\n/* harmony default export */ var treevue_type_script_lang_js_ = ({\n  name: 'ElTree',\n\n  mixins: [emitter_default.a],\n\n  components: {\n    ElTreeNode: tree_node\n  },\n\n  data: function data() {\n    return {\n      store: null,\n      root: null,\n      currentNode: null,\n      treeItems: null,\n      checkboxItems: [],\n      dragState: {\n        showDropIndicator: false,\n        draggingNode: null,\n        dropNode: null,\n        allowDrop: true\n      }\n    };\n  },\n\n\n  props: {\n    data: {\n      type: Array\n    },\n    emptyText: {\n      type: String,\n      default: function _default() {\n        return Object(lib_locale_[\"t\"])('el.tree.emptyText');\n      }\n    },\n    renderAfterExpand: {\n      type: Boolean,\n      default: true\n    },\n    nodeKey: String,\n    checkStrictly: Boolean,\n    defaultExpandAll: Boolean,\n    expandOnClickNode: {\n      type: Boolean,\n      default: true\n    },\n    checkOnClickNode: Boolean,\n    checkDescendants: {\n      type: Boolean,\n      default: false\n    },\n    autoExpandParent: {\n      type: Boolean,\n      default: true\n    },\n    defaultCheckedKeys: Array,\n    defaultExpandedKeys: Array,\n    currentNodeKey: [String, Number],\n    renderContent: Function,\n    showCheckbox: {\n      type: Boolean,\n      default: false\n    },\n    draggable: {\n      type: Boolean,\n      default: false\n    },\n    allowDrag: Function,\n    allowDrop: Function,\n    props: {\n      default: function _default() {\n        return {\n          children: 'children',\n          label: 'label',\n          disabled: 'disabled'\n        };\n      }\n    },\n    lazy: {\n      type: Boolean,\n      default: false\n    },\n    highlightCurrent: Boolean,\n    load: Function,\n    filterNodeMethod: Function,\n    accordion: Boolean,\n    indent: {\n      type: Number,\n      default: 18\n    },\n    iconClass: String\n  },\n\n  computed: {\n    children: {\n      set: function set(value) {\n        this.data = value;\n      },\n      get: function get() {\n        return this.data;\n      }\n    },\n\n    treeItemArray: function treeItemArray() {\n      return Array.prototype.slice.call(this.treeItems);\n    },\n    isEmpty: function isEmpty() {\n      var childNodes = this.root.childNodes;\n\n      return !childNodes || childNodes.length === 0 || childNodes.every(function (_ref) {\n        var visible = _ref.visible;\n        return !visible;\n      });\n    }\n  },\n\n  watch: {\n    defaultCheckedKeys: function defaultCheckedKeys(newVal) {\n      this.store.setDefaultCheckedKey(newVal);\n    },\n    defaultExpandedKeys: function defaultExpandedKeys(newVal) {\n      this.store.defaultExpandedKeys = newVal;\n      this.store.setDefaultExpandedKeys(newVal);\n    },\n    data: function data(newVal) {\n      this.store.setData(newVal);\n    },\n    checkboxItems: function checkboxItems(val) {\n      Array.prototype.forEach.call(val, function (checkbox) {\n        checkbox.setAttribute('tabindex', -1);\n      });\n    },\n    checkStrictly: function checkStrictly(newVal) {\n      this.store.checkStrictly = newVal;\n    }\n  },\n\n  methods: {\n    filter: function filter(value) {\n      if (!this.filterNodeMethod) throw new Error('[Tree] filterNodeMethod is required when filter');\n      this.store.filter(value);\n    },\n    getNodeKey: function getNodeKey(node) {\n      return util_getNodeKey(this.nodeKey, node.data);\n    },\n    getNodePath: function getNodePath(data) {\n      if (!this.nodeKey) throw new Error('[Tree] nodeKey is required in getNodePath');\n      var node = this.store.getNode(data);\n      if (!node) return [];\n      var path = [node.data];\n      var parent = node.parent;\n      while (parent && parent !== this.root) {\n        path.push(parent.data);\n        parent = parent.parent;\n      }\n      return path.reverse();\n    },\n    getCheckedNodes: function getCheckedNodes(leafOnly, includeHalfChecked) {\n      return this.store.getCheckedNodes(leafOnly, includeHalfChecked);\n    },\n    getCheckedKeys: function getCheckedKeys(leafOnly) {\n      return this.store.getCheckedKeys(leafOnly);\n    },\n    getCurrentNode: function getCurrentNode() {\n      var currentNode = this.store.getCurrentNode();\n      return currentNode ? currentNode.data : null;\n    },\n    getCurrentKey: function getCurrentKey() {\n      if (!this.nodeKey) throw new Error('[Tree] nodeKey is required in getCurrentKey');\n      var currentNode = this.getCurrentNode();\n      return currentNode ? currentNode[this.nodeKey] : null;\n    },\n    setCheckedNodes: function setCheckedNodes(nodes, leafOnly) {\n      if (!this.nodeKey) throw new Error('[Tree] nodeKey is required in setCheckedNodes');\n      this.store.setCheckedNodes(nodes, leafOnly);\n    },\n    setCheckedKeys: function setCheckedKeys(keys, leafOnly) {\n      if (!this.nodeKey) throw new Error('[Tree] nodeKey is required in setCheckedKeys');\n      this.store.setCheckedKeys(keys, leafOnly);\n    },\n    setChecked: function setChecked(data, checked, deep) {\n      this.store.setChecked(data, checked, deep);\n    },\n    getHalfCheckedNodes: function getHalfCheckedNodes() {\n      return this.store.getHalfCheckedNodes();\n    },\n    getHalfCheckedKeys: function getHalfCheckedKeys() {\n      return this.store.getHalfCheckedKeys();\n    },\n    setCurrentNode: function setCurrentNode(node) {\n      if (!this.nodeKey) throw new Error('[Tree] nodeKey is required in setCurrentNode');\n      this.store.setUserCurrentNode(node);\n    },\n    setCurrentKey: function setCurrentKey(key) {\n      if (!this.nodeKey) throw new Error('[Tree] nodeKey is required in setCurrentKey');\n      this.store.setCurrentNodeKey(key);\n    },\n    getNode: function getNode(data) {\n      return this.store.getNode(data);\n    },\n    remove: function remove(data) {\n      this.store.remove(data);\n    },\n    append: function append(data, parentNode) {\n      this.store.append(data, parentNode);\n    },\n    insertBefore: function insertBefore(data, refNode) {\n      this.store.insertBefore(data, refNode);\n    },\n    insertAfter: function insertAfter(data, refNode) {\n      this.store.insertAfter(data, refNode);\n    },\n    handleNodeExpand: function handleNodeExpand(nodeData, node, instance) {\n      this.broadcast('ElTreeNode', 'tree-node-expand', node);\n      this.$emit('node-expand', nodeData, node, instance);\n    },\n    updateKeyChildren: function updateKeyChildren(key, data) {\n      if (!this.nodeKey) throw new Error('[Tree] nodeKey is required in updateKeyChild');\n      this.store.updateChildren(key, data);\n    },\n    initTabIndex: function initTabIndex() {\n      this.treeItems = this.$el.querySelectorAll('.is-focusable[role=treeitem]');\n      this.checkboxItems = this.$el.querySelectorAll('input[type=checkbox]');\n      var checkedItem = this.$el.querySelectorAll('.is-checked[role=treeitem]');\n      if (checkedItem.length) {\n        checkedItem[0].setAttribute('tabindex', 0);\n        return;\n      }\n      this.treeItems[0] && this.treeItems[0].setAttribute('tabindex', 0);\n    },\n    handleKeydown: function handleKeydown(ev) {\n      var currentItem = ev.target;\n      if (currentItem.className.indexOf('el-tree-node') === -1) return;\n      var keyCode = ev.keyCode;\n      this.treeItems = this.$el.querySelectorAll('.is-focusable[role=treeitem]');\n      var currentIndex = this.treeItemArray.indexOf(currentItem);\n      var nextIndex = void 0;\n      if ([38, 40].indexOf(keyCode) > -1) {\n        // up、down\n        ev.preventDefault();\n        if (keyCode === 38) {\n          // up\n          nextIndex = currentIndex !== 0 ? currentIndex - 1 : 0;\n        } else {\n          nextIndex = currentIndex < this.treeItemArray.length - 1 ? currentIndex + 1 : 0;\n        }\n        this.treeItemArray[nextIndex].focus(); // 选中\n      }\n      if ([37, 39].indexOf(keyCode) > -1) {\n        // left、right 展开\n        ev.preventDefault();\n        currentItem.click(); // 选中\n      }\n      var hasInput = currentItem.querySelector('[type=\"checkbox\"]');\n      if ([13, 32].indexOf(keyCode) > -1 && hasInput) {\n        // space enter选中checkbox\n        ev.preventDefault();\n        hasInput.click();\n      }\n    }\n  },\n\n  created: function created() {\n    var _this = this;\n\n    this.isTree = true;\n\n    this.store = new tree_store({\n      key: this.nodeKey,\n      data: this.data,\n      lazy: this.lazy,\n      props: this.props,\n      load: this.load,\n      currentNodeKey: this.currentNodeKey,\n      checkStrictly: this.checkStrictly,\n      checkDescendants: this.checkDescendants,\n      defaultCheckedKeys: this.defaultCheckedKeys,\n      defaultExpandedKeys: this.defaultExpandedKeys,\n      autoExpandParent: this.autoExpandParent,\n      defaultExpandAll: this.defaultExpandAll,\n      filterNodeMethod: this.filterNodeMethod\n    });\n\n    this.root = this.store.root;\n\n    var dragState = this.dragState;\n    this.$on('tree-node-drag-start', function (event, treeNode) {\n      if (typeof _this.allowDrag === 'function' && !_this.allowDrag(treeNode.node)) {\n        event.preventDefault();\n        return false;\n      }\n      event.dataTransfer.effectAllowed = 'move';\n\n      // wrap in try catch to address IE's error when first param is 'text/plain'\n      try {\n        // setData is required for draggable to work in FireFox\n        // the content has to be '' so dragging a node out of the tree won't open a new tab in FireFox\n        event.dataTransfer.setData('text/plain', '');\n      } catch (e) {}\n      dragState.draggingNode = treeNode;\n      _this.$emit('node-drag-start', treeNode.node, event);\n    });\n\n    this.$on('tree-node-drag-over', function (event, treeNode) {\n      var dropNode = findNearestComponent(event.target, 'ElTreeNode');\n      var oldDropNode = dragState.dropNode;\n      if (oldDropNode && oldDropNode !== dropNode) {\n        Object(dom_[\"removeClass\"])(oldDropNode.$el, 'is-drop-inner');\n      }\n      var draggingNode = dragState.draggingNode;\n      if (!draggingNode || !dropNode) return;\n\n      var dropPrev = true;\n      var dropInner = true;\n      var dropNext = true;\n      var userAllowDropInner = true;\n      if (typeof _this.allowDrop === 'function') {\n        dropPrev = _this.allowDrop(draggingNode.node, dropNode.node, 'prev');\n        userAllowDropInner = dropInner = _this.allowDrop(draggingNode.node, dropNode.node, 'inner');\n        dropNext = _this.allowDrop(draggingNode.node, dropNode.node, 'next');\n      }\n      event.dataTransfer.dropEffect = dropInner ? 'move' : 'none';\n      if ((dropPrev || dropInner || dropNext) && oldDropNode !== dropNode) {\n        if (oldDropNode) {\n          _this.$emit('node-drag-leave', draggingNode.node, oldDropNode.node, event);\n        }\n        _this.$emit('node-drag-enter', draggingNode.node, dropNode.node, event);\n      }\n\n      if (dropPrev || dropInner || dropNext) {\n        dragState.dropNode = dropNode;\n      }\n\n      if (dropNode.node.nextSibling === draggingNode.node) {\n        dropNext = false;\n      }\n      if (dropNode.node.previousSibling === draggingNode.node) {\n        dropPrev = false;\n      }\n      if (dropNode.node.contains(draggingNode.node, false)) {\n        dropInner = false;\n      }\n      if (draggingNode.node === dropNode.node || draggingNode.node.contains(dropNode.node)) {\n        dropPrev = false;\n        dropInner = false;\n        dropNext = false;\n      }\n\n      var targetPosition = dropNode.$el.getBoundingClientRect();\n      var treePosition = _this.$el.getBoundingClientRect();\n\n      var dropType = void 0;\n      var prevPercent = dropPrev ? dropInner ? 0.25 : dropNext ? 0.45 : 1 : -1;\n      var nextPercent = dropNext ? dropInner ? 0.75 : dropPrev ? 0.55 : 0 : 1;\n\n      var indicatorTop = -9999;\n      var distance = event.clientY - targetPosition.top;\n      if (distance < targetPosition.height * prevPercent) {\n        dropType = 'before';\n      } else if (distance > targetPosition.height * nextPercent) {\n        dropType = 'after';\n      } else if (dropInner) {\n        dropType = 'inner';\n      } else {\n        dropType = 'none';\n      }\n\n      var iconPosition = dropNode.$el.querySelector('.el-tree-node__expand-icon').getBoundingClientRect();\n      var dropIndicator = _this.$refs.dropIndicator;\n      if (dropType === 'before') {\n        indicatorTop = iconPosition.top - treePosition.top;\n      } else if (dropType === 'after') {\n        indicatorTop = iconPosition.bottom - treePosition.top;\n      }\n      dropIndicator.style.top = indicatorTop + 'px';\n      dropIndicator.style.left = iconPosition.right - treePosition.left + 'px';\n\n      if (dropType === 'inner') {\n        Object(dom_[\"addClass\"])(dropNode.$el, 'is-drop-inner');\n      } else {\n        Object(dom_[\"removeClass\"])(dropNode.$el, 'is-drop-inner');\n      }\n\n      dragState.showDropIndicator = dropType === 'before' || dropType === 'after';\n      dragState.allowDrop = dragState.showDropIndicator || userAllowDropInner;\n      dragState.dropType = dropType;\n      _this.$emit('node-drag-over', draggingNode.node, dropNode.node, event);\n    });\n\n    this.$on('tree-node-drag-end', function (event) {\n      var draggingNode = dragState.draggingNode,\n          dropType = dragState.dropType,\n          dropNode = dragState.dropNode;\n\n      event.preventDefault();\n      event.dataTransfer.dropEffect = 'move';\n\n      if (draggingNode && dropNode) {\n        var draggingNodeCopy = { data: draggingNode.node.data };\n        if (dropType !== 'none') {\n          draggingNode.node.remove();\n        }\n        if (dropType === 'before') {\n          dropNode.node.parent.insertBefore(draggingNodeCopy, dropNode.node);\n        } else if (dropType === 'after') {\n          dropNode.node.parent.insertAfter(draggingNodeCopy, dropNode.node);\n        } else if (dropType === 'inner') {\n          dropNode.node.insertChild(draggingNodeCopy);\n        }\n        if (dropType !== 'none') {\n          _this.store.registerNode(draggingNodeCopy);\n        }\n\n        Object(dom_[\"removeClass\"])(dropNode.$el, 'is-drop-inner');\n\n        _this.$emit('node-drag-end', draggingNode.node, dropNode.node, dropType, event);\n        if (dropType !== 'none') {\n          _this.$emit('node-drop', draggingNode.node, dropNode.node, dropType, event);\n        }\n      }\n      if (draggingNode && !dropNode) {\n        _this.$emit('node-drag-end', draggingNode.node, null, dropType, event);\n      }\n\n      dragState.showDropIndicator = false;\n      dragState.draggingNode = null;\n      dragState.dropNode = null;\n      dragState.allowDrop = true;\n    });\n  },\n  mounted: function mounted() {\n    this.initTabIndex();\n    this.$el.addEventListener('keydown', this.handleKeydown);\n  },\n  updated: function updated() {\n    this.treeItems = this.$el.querySelectorAll('[role=treeitem]');\n    this.checkboxItems = this.$el.querySelectorAll('input[type=checkbox]');\n  }\n});\n// CONCATENATED MODULE: ./packages/tree/src/tree.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_treevue_type_script_lang_js_ = (treevue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/tree/src/tree.vue\n\n\n\n\n\n/* normalize component */\n\nvar tree_component = normalizeComponent(\n  src_treevue_type_script_lang_js_,\n  treevue_type_template_id_547575a6_render,\n  treevue_type_template_id_547575a6_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var tree_api; }\ntree_component.options.__file = \"packages/tree/src/tree.vue\"\n/* harmony default export */ var src_tree = (tree_component.exports);\n// CONCATENATED MODULE: ./packages/tree/index.js\n\n\n/* istanbul ignore next */\nsrc_tree.install = function (Vue) {\n  Vue.component(src_tree.name, src_tree);\n};\n\n/* harmony default export */ var packages_tree = (src_tree);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/alert/src/main.vue?vue&type=template&id=6e53341b&\nvar mainvue_type_template_id_6e53341b_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\"transition\", { attrs: { name: \"el-alert-fade\" } }, [\n    _c(\n      \"div\",\n      {\n        directives: [\n          {\n            name: \"show\",\n            rawName: \"v-show\",\n            value: _vm.visible,\n            expression: \"visible\"\n          }\n        ],\n        staticClass: \"el-alert\",\n        class: [\n          _vm.typeClass,\n          _vm.center ? \"is-center\" : \"\",\n          \"is-\" + _vm.effect\n        ],\n        attrs: { role: \"alert\" }\n      },\n      [\n        _vm.showIcon\n          ? _c(\"i\", {\n              staticClass: \"el-alert__icon\",\n              class: [_vm.iconClass, _vm.isBigIcon]\n            })\n          : _vm._e(),\n        _c(\"div\", { staticClass: \"el-alert__content\" }, [\n          _vm.title || _vm.$slots.title\n            ? _c(\n                \"span\",\n                { staticClass: \"el-alert__title\", class: [_vm.isBoldTitle] },\n                [_vm._t(\"title\", [_vm._v(_vm._s(_vm.title))])],\n                2\n              )\n            : _vm._e(),\n          _vm.$slots.default && !_vm.description\n            ? _c(\n                \"p\",\n                { staticClass: \"el-alert__description\" },\n                [_vm._t(\"default\")],\n                2\n              )\n            : _vm._e(),\n          _vm.description && !_vm.$slots.default\n            ? _c(\"p\", { staticClass: \"el-alert__description\" }, [\n                _vm._v(_vm._s(_vm.description))\n              ])\n            : _vm._e(),\n          _c(\n            \"i\",\n            {\n              directives: [\n                {\n                  name: \"show\",\n                  rawName: \"v-show\",\n                  value: _vm.closable,\n                  expression: \"closable\"\n                }\n              ],\n              staticClass: \"el-alert__closebtn\",\n              class: {\n                \"is-customed\": _vm.closeText !== \"\",\n                \"el-icon-close\": _vm.closeText === \"\"\n              },\n              on: {\n                click: function($event) {\n                  _vm.close()\n                }\n              }\n            },\n            [_vm._v(_vm._s(_vm.closeText))]\n          )\n        ])\n      ]\n    )\n  ])\n}\nvar mainvue_type_template_id_6e53341b_staticRenderFns = []\nmainvue_type_template_id_6e53341b_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/alert/src/main.vue?vue&type=template&id=6e53341b&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/alert/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\nvar TYPE_CLASSES_MAP = {\n  'success': 'el-icon-success',\n  'warning': 'el-icon-warning',\n  'error': 'el-icon-error'\n};\n/* harmony default export */ var alert_src_mainvue_type_script_lang_js_ = ({\n  name: 'ElAlert',\n\n  props: {\n    title: {\n      type: String,\n      default: ''\n    },\n    description: {\n      type: String,\n      default: ''\n    },\n    type: {\n      type: String,\n      default: 'info'\n    },\n    closable: {\n      type: Boolean,\n      default: true\n    },\n    closeText: {\n      type: String,\n      default: ''\n    },\n    showIcon: Boolean,\n    center: Boolean,\n    effect: {\n      type: String,\n      default: 'light',\n      validator: function validator(value) {\n        return ['light', 'dark'].indexOf(value) !== -1;\n      }\n    }\n  },\n\n  data: function data() {\n    return {\n      visible: true\n    };\n  },\n\n\n  methods: {\n    close: function close() {\n      this.visible = false;\n      this.$emit('close');\n    }\n  },\n\n  computed: {\n    typeClass: function typeClass() {\n      return 'el-alert--' + this.type;\n    },\n    iconClass: function iconClass() {\n      return TYPE_CLASSES_MAP[this.type] || 'el-icon-info';\n    },\n    isBigIcon: function isBigIcon() {\n      return this.description || this.$slots.default ? 'is-big' : '';\n    },\n    isBoldTitle: function isBoldTitle() {\n      return this.description || this.$slots.default ? 'is-bold' : '';\n    }\n  }\n});\n// CONCATENATED MODULE: ./packages/alert/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_alert_src_mainvue_type_script_lang_js_ = (alert_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/alert/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar alert_src_main_component = normalizeComponent(\n  packages_alert_src_mainvue_type_script_lang_js_,\n  mainvue_type_template_id_6e53341b_render,\n  mainvue_type_template_id_6e53341b_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var alert_src_main_api; }\nalert_src_main_component.options.__file = \"packages/alert/src/main.vue\"\n/* harmony default export */ var alert_src_main = (alert_src_main_component.exports);\n// CONCATENATED MODULE: ./packages/alert/index.js\n\n\n/* istanbul ignore next */\nalert_src_main.install = function (Vue) {\n  Vue.component(alert_src_main.name, alert_src_main);\n};\n\n/* harmony default export */ var packages_alert = (alert_src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/notification/src/main.vue?vue&type=template&id=43dbc3d8&\nvar mainvue_type_template_id_43dbc3d8_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\"transition\", { attrs: { name: \"el-notification-fade\" } }, [\n    _c(\n      \"div\",\n      {\n        directives: [\n          {\n            name: \"show\",\n            rawName: \"v-show\",\n            value: _vm.visible,\n            expression: \"visible\"\n          }\n        ],\n        class: [\"el-notification\", _vm.customClass, _vm.horizontalClass],\n        style: _vm.positionStyle,\n        attrs: { role: \"alert\" },\n        on: {\n          mouseenter: function($event) {\n            _vm.clearTimer()\n          },\n          mouseleave: function($event) {\n            _vm.startTimer()\n          },\n          click: _vm.click\n        }\n      },\n      [\n        _vm.type || _vm.iconClass\n          ? _c(\"i\", {\n              staticClass: \"el-notification__icon\",\n              class: [_vm.typeClass, _vm.iconClass]\n            })\n          : _vm._e(),\n        _c(\n          \"div\",\n          {\n            staticClass: \"el-notification__group\",\n            class: { \"is-with-icon\": _vm.typeClass || _vm.iconClass }\n          },\n          [\n            _c(\"h2\", {\n              staticClass: \"el-notification__title\",\n              domProps: { textContent: _vm._s(_vm.title) }\n            }),\n            _c(\n              \"div\",\n              {\n                directives: [\n                  {\n                    name: \"show\",\n                    rawName: \"v-show\",\n                    value: _vm.message,\n                    expression: \"message\"\n                  }\n                ],\n                staticClass: \"el-notification__content\"\n              },\n              [\n                _vm._t(\"default\", [\n                  !_vm.dangerouslyUseHTMLString\n                    ? _c(\"p\", [_vm._v(_vm._s(_vm.message))])\n                    : _c(\"p\", { domProps: { innerHTML: _vm._s(_vm.message) } })\n                ])\n              ],\n              2\n            ),\n            _vm.showClose\n              ? _c(\"div\", {\n                  staticClass: \"el-notification__closeBtn el-icon-close\",\n                  on: {\n                    click: function($event) {\n                      $event.stopPropagation()\n                      return _vm.close($event)\n                    }\n                  }\n                })\n              : _vm._e()\n          ]\n        )\n      ]\n    )\n  ])\n}\nvar mainvue_type_template_id_43dbc3d8_staticRenderFns = []\nmainvue_type_template_id_43dbc3d8_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/notification/src/main.vue?vue&type=template&id=43dbc3d8&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/notification/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\nvar mainvue_type_script_lang_js_typeMap = {\n  success: 'success',\n  info: 'info',\n  warning: 'warning',\n  error: 'error'\n};\n\n/* harmony default export */ var notification_src_mainvue_type_script_lang_js_ = ({\n  data: function data() {\n    return {\n      visible: false,\n      title: '',\n      message: '',\n      duration: 4500,\n      type: '',\n      showClose: true,\n      customClass: '',\n      iconClass: '',\n      onClose: null,\n      onClick: null,\n      closed: false,\n      verticalOffset: 0,\n      timer: null,\n      dangerouslyUseHTMLString: false,\n      position: 'top-right'\n    };\n  },\n\n\n  computed: {\n    typeClass: function typeClass() {\n      return this.type && mainvue_type_script_lang_js_typeMap[this.type] ? 'el-icon-' + mainvue_type_script_lang_js_typeMap[this.type] : '';\n    },\n    horizontalClass: function horizontalClass() {\n      return this.position.indexOf('right') > -1 ? 'right' : 'left';\n    },\n    verticalProperty: function verticalProperty() {\n      return (/^top-/.test(this.position) ? 'top' : 'bottom'\n      );\n    },\n    positionStyle: function positionStyle() {\n      var _ref;\n\n      return _ref = {}, _ref[this.verticalProperty] = this.verticalOffset + 'px', _ref;\n    }\n  },\n\n  watch: {\n    closed: function closed(newVal) {\n      if (newVal) {\n        this.visible = false;\n        this.$el.addEventListener('transitionend', this.destroyElement);\n      }\n    }\n  },\n\n  methods: {\n    destroyElement: function destroyElement() {\n      this.$el.removeEventListener('transitionend', this.destroyElement);\n      this.$destroy(true);\n      this.$el.parentNode.removeChild(this.$el);\n    },\n    click: function click() {\n      if (typeof this.onClick === 'function') {\n        this.onClick();\n      }\n    },\n    close: function close() {\n      this.closed = true;\n      if (typeof this.onClose === 'function') {\n        this.onClose();\n      }\n    },\n    clearTimer: function clearTimer() {\n      clearTimeout(this.timer);\n    },\n    startTimer: function startTimer() {\n      var _this = this;\n\n      if (this.duration > 0) {\n        this.timer = setTimeout(function () {\n          if (!_this.closed) {\n            _this.close();\n          }\n        }, this.duration);\n      }\n    },\n    keydown: function keydown(e) {\n      if (e.keyCode === 46 || e.keyCode === 8) {\n        this.clearTimer(); // detele 取消倒计时\n      } else if (e.keyCode === 27) {\n        // esc关闭消息\n        if (!this.closed) {\n          this.close();\n        }\n      } else {\n        this.startTimer(); // 恢复倒计时\n      }\n    }\n  },\n  mounted: function mounted() {\n    var _this2 = this;\n\n    if (this.duration > 0) {\n      this.timer = setTimeout(function () {\n        if (!_this2.closed) {\n          _this2.close();\n        }\n      }, this.duration);\n    }\n    document.addEventListener('keydown', this.keydown);\n  },\n  beforeDestroy: function beforeDestroy() {\n    document.removeEventListener('keydown', this.keydown);\n  }\n});\n// CONCATENATED MODULE: ./packages/notification/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_notification_src_mainvue_type_script_lang_js_ = (notification_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/notification/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar notification_src_main_component = normalizeComponent(\n  packages_notification_src_mainvue_type_script_lang_js_,\n  mainvue_type_template_id_43dbc3d8_render,\n  mainvue_type_template_id_43dbc3d8_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var notification_src_main_api; }\nnotification_src_main_component.options.__file = \"packages/notification/src/main.vue\"\n/* harmony default export */ var notification_src_main = (notification_src_main_component.exports);\n// CONCATENATED MODULE: ./packages/notification/src/main.js\n\n\n\n\n\nvar NotificationConstructor = external_vue_default.a.extend(notification_src_main);\n\nvar src_main_instance = void 0;\nvar instances = [];\nvar seed = 1;\n\nvar main_Notification = function Notification(options) {\n  if (external_vue_default.a.prototype.$isServer) return;\n  options = merge_default()({}, options);\n  var userOnClose = options.onClose;\n  var id = 'notification_' + seed++;\n  var position = options.position || 'top-right';\n\n  options.onClose = function () {\n    Notification.close(id, userOnClose);\n  };\n\n  src_main_instance = new NotificationConstructor({\n    data: options\n  });\n\n  if (Object(vdom_[\"isVNode\"])(options.message)) {\n    src_main_instance.$slots.default = [options.message];\n    options.message = 'REPLACED_BY_VNODE';\n  }\n  src_main_instance.id = id;\n  src_main_instance.$mount();\n  document.body.appendChild(src_main_instance.$el);\n  src_main_instance.visible = true;\n  src_main_instance.dom = src_main_instance.$el;\n  src_main_instance.dom.style.zIndex = popup_[\"PopupManager\"].nextZIndex();\n\n  var verticalOffset = options.offset || 0;\n  instances.filter(function (item) {\n    return item.position === position;\n  }).forEach(function (item) {\n    verticalOffset += item.$el.offsetHeight + 16;\n  });\n  verticalOffset += 16;\n  src_main_instance.verticalOffset = verticalOffset;\n  instances.push(src_main_instance);\n  return src_main_instance;\n};\n\n['success', 'warning', 'info', 'error'].forEach(function (type) {\n  main_Notification[type] = function (options) {\n    if (typeof options === 'string' || Object(vdom_[\"isVNode\"])(options)) {\n      options = {\n        message: options\n      };\n    }\n    options.type = type;\n    return main_Notification(options);\n  };\n});\n\nmain_Notification.close = function (id, userOnClose) {\n  var index = -1;\n  var len = instances.length;\n  var instance = instances.filter(function (instance, i) {\n    if (instance.id === id) {\n      index = i;\n      return true;\n    }\n    return false;\n  })[0];\n  if (!instance) return;\n\n  if (typeof userOnClose === 'function') {\n    userOnClose(instance);\n  }\n  instances.splice(index, 1);\n\n  if (len <= 1) return;\n  var position = instance.position;\n  var removedHeight = instance.dom.offsetHeight;\n  for (var i = index; i < len - 1; i++) {\n    if (instances[i].position === position) {\n      instances[i].dom.style[instance.verticalProperty] = parseInt(instances[i].dom.style[instance.verticalProperty], 10) - removedHeight - 16 + 'px';\n    }\n  }\n};\n\nmain_Notification.closeAll = function () {\n  for (var i = instances.length - 1; i >= 0; i--) {\n    instances[i].close();\n  }\n};\n\n/* harmony default export */ var packages_notification_src_main = (main_Notification);\n// CONCATENATED MODULE: ./packages/notification/index.js\n\n/* harmony default export */ var notification = (packages_notification_src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/slider/src/main.vue?vue&type=template&id=32708644&\nvar mainvue_type_template_id_32708644_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    {\n      staticClass: \"el-slider\",\n      class: {\n        \"is-vertical\": _vm.vertical,\n        \"el-slider--with-input\": _vm.showInput\n      },\n      attrs: {\n        role: \"slider\",\n        \"aria-valuemin\": _vm.min,\n        \"aria-valuemax\": _vm.max,\n        \"aria-orientation\": _vm.vertical ? \"vertical\" : \"horizontal\",\n        \"aria-disabled\": _vm.sliderDisabled\n      }\n    },\n    [\n      _vm.showInput && !_vm.range\n        ? _c(\"el-input-number\", {\n            ref: \"input\",\n            staticClass: \"el-slider__input\",\n            attrs: {\n              step: _vm.step,\n              disabled: _vm.sliderDisabled,\n              controls: _vm.showInputControls,\n              min: _vm.min,\n              max: _vm.max,\n              debounce: _vm.debounce,\n              size: _vm.inputSize\n            },\n            on: { change: _vm.emitChange },\n            model: {\n              value: _vm.firstValue,\n              callback: function($$v) {\n                _vm.firstValue = $$v\n              },\n              expression: \"firstValue\"\n            }\n          })\n        : _vm._e(),\n      _c(\n        \"div\",\n        {\n          ref: \"slider\",\n          staticClass: \"el-slider__runway\",\n          class: { \"show-input\": _vm.showInput, disabled: _vm.sliderDisabled },\n          style: _vm.runwayStyle,\n          on: { click: _vm.onSliderClick }\n        },\n        [\n          _c(\"div\", { staticClass: \"el-slider__bar\", style: _vm.barStyle }),\n          _c(\"slider-button\", {\n            ref: \"button1\",\n            attrs: {\n              vertical: _vm.vertical,\n              \"tooltip-class\": _vm.tooltipClass\n            },\n            model: {\n              value: _vm.firstValue,\n              callback: function($$v) {\n                _vm.firstValue = $$v\n              },\n              expression: \"firstValue\"\n            }\n          }),\n          _vm.range\n            ? _c(\"slider-button\", {\n                ref: \"button2\",\n                attrs: {\n                  vertical: _vm.vertical,\n                  \"tooltip-class\": _vm.tooltipClass\n                },\n                model: {\n                  value: _vm.secondValue,\n                  callback: function($$v) {\n                    _vm.secondValue = $$v\n                  },\n                  expression: \"secondValue\"\n                }\n              })\n            : _vm._e(),\n          _vm._l(_vm.stops, function(item, key) {\n            return _vm.showStops\n              ? _c(\"div\", {\n                  key: key,\n                  staticClass: \"el-slider__stop\",\n                  style: _vm.getStopStyle(item)\n                })\n              : _vm._e()\n          }),\n          _vm.markList.length > 0\n            ? [\n                _c(\n                  \"div\",\n                  _vm._l(_vm.markList, function(item, key) {\n                    return _c(\"div\", {\n                      key: key,\n                      staticClass: \"el-slider__stop el-slider__marks-stop\",\n                      style: _vm.getStopStyle(item.position)\n                    })\n                  }),\n                  0\n                ),\n                _c(\n                  \"div\",\n                  { staticClass: \"el-slider__marks\" },\n                  _vm._l(_vm.markList, function(item, key) {\n                    return _c(\"slider-marker\", {\n                      key: key,\n                      style: _vm.getStopStyle(item.position),\n                      attrs: { mark: item.mark }\n                    })\n                  }),\n                  1\n                )\n              ]\n            : _vm._e()\n        ],\n        2\n      )\n    ],\n    1\n  )\n}\nvar mainvue_type_template_id_32708644_staticRenderFns = []\nmainvue_type_template_id_32708644_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/slider/src/main.vue?vue&type=template&id=32708644&\n\n// EXTERNAL MODULE: external \"element-ui/lib/input-number\"\nvar input_number_ = __nested_webpack_require_8926__(42);\nvar input_number_default = /*#__PURE__*/__nested_webpack_require_8926__.n(input_number_);\n\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/slider/src/button.vue?vue&type=template&id=e72d2ad2&\nvar buttonvue_type_template_id_e72d2ad2_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    {\n      ref: \"button\",\n      staticClass: \"el-slider__button-wrapper\",\n      class: { hover: _vm.hovering, dragging: _vm.dragging },\n      style: _vm.wrapperStyle,\n      attrs: { tabindex: \"0\" },\n      on: {\n        mouseenter: _vm.handleMouseEnter,\n        mouseleave: _vm.handleMouseLeave,\n        mousedown: _vm.onButtonDown,\n        touchstart: _vm.onButtonDown,\n        focus: _vm.handleMouseEnter,\n        blur: _vm.handleMouseLeave,\n        keydown: [\n          function($event) {\n            if (\n              !(\"button\" in $event) &&\n              _vm._k($event.keyCode, \"left\", 37, $event.key, [\n                \"Left\",\n                \"ArrowLeft\"\n              ])\n            ) {\n              return null\n            }\n            if (\"button\" in $event && $event.button !== 0) {\n              return null\n            }\n            return _vm.onLeftKeyDown($event)\n          },\n          function($event) {\n            if (\n              !(\"button\" in $event) &&\n              _vm._k($event.keyCode, \"right\", 39, $event.key, [\n                \"Right\",\n                \"ArrowRight\"\n              ])\n            ) {\n              return null\n            }\n            if (\"button\" in $event && $event.button !== 2) {\n              return null\n            }\n            return _vm.onRightKeyDown($event)\n          },\n          function($event) {\n            if (\n              !(\"button\" in $event) &&\n              _vm._k($event.keyCode, \"down\", 40, $event.key, [\n                \"Down\",\n                \"ArrowDown\"\n              ])\n            ) {\n              return null\n            }\n            $event.preventDefault()\n            return _vm.onLeftKeyDown($event)\n          },\n          function($event) {\n            if (\n              !(\"button\" in $event) &&\n              _vm._k($event.keyCode, \"up\", 38, $event.key, [\"Up\", \"ArrowUp\"])\n            ) {\n              return null\n            }\n            $event.preventDefault()\n            return _vm.onRightKeyDown($event)\n          }\n        ]\n      }\n    },\n    [\n      _c(\n        \"el-tooltip\",\n        {\n          ref: \"tooltip\",\n          attrs: {\n            placement: \"top\",\n            \"popper-class\": _vm.tooltipClass,\n            disabled: !_vm.showTooltip\n          }\n        },\n        [\n          _c(\"span\", { attrs: { slot: \"content\" }, slot: \"content\" }, [\n            _vm._v(_vm._s(_vm.formatValue))\n          ]),\n          _c(\"div\", {\n            staticClass: \"el-slider__button\",\n            class: { hover: _vm.hovering, dragging: _vm.dragging }\n          })\n        ]\n      )\n    ],\n    1\n  )\n}\nvar buttonvue_type_template_id_e72d2ad2_staticRenderFns = []\nbuttonvue_type_template_id_e72d2ad2_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/slider/src/button.vue?vue&type=template&id=e72d2ad2&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/slider/src/button.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n/* harmony default export */ var slider_src_buttonvue_type_script_lang_js_ = ({\n  name: 'ElSliderButton',\n\n  components: {\n    ElTooltip: tooltip_default.a\n  },\n\n  props: {\n    value: {\n      type: Number,\n      default: 0\n    },\n    vertical: {\n      type: Boolean,\n      default: false\n    },\n    tooltipClass: String\n  },\n\n  data: function data() {\n    return {\n      hovering: false,\n      dragging: false,\n      isClick: false,\n      startX: 0,\n      currentX: 0,\n      startY: 0,\n      currentY: 0,\n      startPosition: 0,\n      newPosition: null,\n      oldValue: this.value\n    };\n  },\n\n\n  computed: {\n    disabled: function disabled() {\n      return this.$parent.sliderDisabled;\n    },\n    max: function max() {\n      return this.$parent.max;\n    },\n    min: function min() {\n      return this.$parent.min;\n    },\n    step: function step() {\n      return this.$parent.step;\n    },\n    showTooltip: function showTooltip() {\n      return this.$parent.showTooltip;\n    },\n    precision: function precision() {\n      return this.$parent.precision;\n    },\n    currentPosition: function currentPosition() {\n      return (this.value - this.min) / (this.max - this.min) * 100 + '%';\n    },\n    enableFormat: function enableFormat() {\n      return this.$parent.formatTooltip instanceof Function;\n    },\n    formatValue: function formatValue() {\n      return this.enableFormat && this.$parent.formatTooltip(this.value) || this.value;\n    },\n    wrapperStyle: function wrapperStyle() {\n      return this.vertical ? { bottom: this.currentPosition } : { left: this.currentPosition };\n    }\n  },\n\n  watch: {\n    dragging: function dragging(val) {\n      this.$parent.dragging = val;\n    }\n  },\n\n  methods: {\n    displayTooltip: function displayTooltip() {\n      this.$refs.tooltip && (this.$refs.tooltip.showPopper = true);\n    },\n    hideTooltip: function hideTooltip() {\n      this.$refs.tooltip && (this.$refs.tooltip.showPopper = false);\n    },\n    handleMouseEnter: function handleMouseEnter() {\n      this.hovering = true;\n      this.displayTooltip();\n    },\n    handleMouseLeave: function handleMouseLeave() {\n      this.hovering = false;\n      this.hideTooltip();\n    },\n    onButtonDown: function onButtonDown(event) {\n      if (this.disabled) return;\n      event.preventDefault();\n      this.onDragStart(event);\n      window.addEventListener('mousemove', this.onDragging);\n      window.addEventListener('touchmove', this.onDragging);\n      window.addEventListener('mouseup', this.onDragEnd);\n      window.addEventListener('touchend', this.onDragEnd);\n      window.addEventListener('contextmenu', this.onDragEnd);\n    },\n    onLeftKeyDown: function onLeftKeyDown() {\n      if (this.disabled) return;\n      this.newPosition = parseFloat(this.currentPosition) - this.step / (this.max - this.min) * 100;\n      this.setPosition(this.newPosition);\n      this.$parent.emitChange();\n    },\n    onRightKeyDown: function onRightKeyDown() {\n      if (this.disabled) return;\n      this.newPosition = parseFloat(this.currentPosition) + this.step / (this.max - this.min) * 100;\n      this.setPosition(this.newPosition);\n      this.$parent.emitChange();\n    },\n    onDragStart: function onDragStart(event) {\n      this.dragging = true;\n      this.isClick = true;\n      if (event.type === 'touchstart') {\n        event.clientY = event.touches[0].clientY;\n        event.clientX = event.touches[0].clientX;\n      }\n      if (this.vertical) {\n        this.startY = event.clientY;\n      } else {\n        this.startX = event.clientX;\n      }\n      this.startPosition = parseFloat(this.currentPosition);\n      this.newPosition = this.startPosition;\n    },\n    onDragging: function onDragging(event) {\n      if (this.dragging) {\n        this.isClick = false;\n        this.displayTooltip();\n        this.$parent.resetSize();\n        var diff = 0;\n        if (event.type === 'touchmove') {\n          event.clientY = event.touches[0].clientY;\n          event.clientX = event.touches[0].clientX;\n        }\n        if (this.vertical) {\n          this.currentY = event.clientY;\n          diff = (this.startY - this.currentY) / this.$parent.sliderSize * 100;\n        } else {\n          this.currentX = event.clientX;\n          diff = (this.currentX - this.startX) / this.$parent.sliderSize * 100;\n        }\n        this.newPosition = this.startPosition + diff;\n        this.setPosition(this.newPosition);\n      }\n    },\n    onDragEnd: function onDragEnd() {\n      var _this = this;\n\n      if (this.dragging) {\n        /*\n         * 防止在 mouseup 后立即触发 click,导致滑块有几率产生一小段位移\n         * 不使用 preventDefault 是因为 mouseup 和 click 没有注册在同一个 DOM 上\n         */\n        setTimeout(function () {\n          _this.dragging = false;\n          _this.hideTooltip();\n          if (!_this.isClick) {\n            _this.setPosition(_this.newPosition);\n            _this.$parent.emitChange();\n          }\n        }, 0);\n        window.removeEventListener('mousemove', this.onDragging);\n        window.removeEventListener('touchmove', this.onDragging);\n        window.removeEventListener('mouseup', this.onDragEnd);\n        window.removeEventListener('touchend', this.onDragEnd);\n        window.removeEventListener('contextmenu', this.onDragEnd);\n      }\n    },\n    setPosition: function setPosition(newPosition) {\n      var _this2 = this;\n\n      if (newPosition === null || isNaN(newPosition)) return;\n      if (newPosition < 0) {\n        newPosition = 0;\n      } else if (newPosition > 100) {\n        newPosition = 100;\n      }\n      var lengthPerStep = 100 / ((this.max - this.min) / this.step);\n      var steps = Math.round(newPosition / lengthPerStep);\n      var value = steps * lengthPerStep * (this.max - this.min) * 0.01 + this.min;\n      value = parseFloat(value.toFixed(this.precision));\n      this.$emit('input', value);\n      this.$nextTick(function () {\n        _this2.displayTooltip();\n        _this2.$refs.tooltip && _this2.$refs.tooltip.updatePopper();\n      });\n      if (!this.dragging && this.value !== this.oldValue) {\n        this.oldValue = this.value;\n      }\n    }\n  }\n});\n// CONCATENATED MODULE: ./packages/slider/src/button.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_slider_src_buttonvue_type_script_lang_js_ = (slider_src_buttonvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/slider/src/button.vue\n\n\n\n\n\n/* normalize component */\n\nvar src_button_component = normalizeComponent(\n  packages_slider_src_buttonvue_type_script_lang_js_,\n  buttonvue_type_template_id_e72d2ad2_render,\n  buttonvue_type_template_id_e72d2ad2_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var src_button_api; }\nsrc_button_component.options.__file = \"packages/slider/src/button.vue\"\n/* harmony default export */ var slider_src_button = (src_button_component.exports);\n// CONCATENATED MODULE: ./packages/slider/src/marker.js\n/* harmony default export */ var marker = ({\n  name: 'ElMarker',\n\n  props: {\n    mark: {\n      type: [String, Object]\n    }\n  },\n  render: function render() {\n    var h = arguments[0];\n\n    var label = typeof this.mark === 'string' ? this.mark : this.mark.label;\n\n    return h(\n      'div',\n      { 'class': 'el-slider__marks-text', style: this.mark.style || {} },\n      [label]\n    );\n  }\n});\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/slider/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n/* harmony default export */ var slider_src_mainvue_type_script_lang_js_ = ({\n  name: 'ElSlider',\n\n  mixins: [emitter_default.a],\n\n  inject: {\n    elForm: {\n      default: ''\n    }\n  },\n\n  props: {\n    min: {\n      type: Number,\n      default: 0\n    },\n    max: {\n      type: Number,\n      default: 100\n    },\n    step: {\n      type: Number,\n      default: 1\n    },\n    value: {\n      type: [Number, Array],\n      default: 0\n    },\n    showInput: {\n      type: Boolean,\n      default: false\n    },\n    showInputControls: {\n      type: Boolean,\n      default: true\n    },\n    inputSize: {\n      type: String,\n      default: 'small'\n    },\n    showStops: {\n      type: Boolean,\n      default: false\n    },\n    showTooltip: {\n      type: Boolean,\n      default: true\n    },\n    formatTooltip: Function,\n    disabled: {\n      type: Boolean,\n      default: false\n    },\n    range: {\n      type: Boolean,\n      default: false\n    },\n    vertical: {\n      type: Boolean,\n      default: false\n    },\n    height: {\n      type: String\n    },\n    debounce: {\n      type: Number,\n      default: 300\n    },\n    label: {\n      type: String\n    },\n    tooltipClass: String,\n    marks: Object\n  },\n\n  components: {\n    ElInputNumber: input_number_default.a,\n    SliderButton: slider_src_button,\n    SliderMarker: marker\n  },\n\n  data: function data() {\n    return {\n      firstValue: null,\n      secondValue: null,\n      oldValue: null,\n      dragging: false,\n      sliderSize: 1\n    };\n  },\n\n\n  watch: {\n    value: function value(val, oldVal) {\n      if (this.dragging || Array.isArray(val) && Array.isArray(oldVal) && val.every(function (item, index) {\n        return item === oldVal[index];\n      })) {\n        return;\n      }\n      this.setValues();\n    },\n    dragging: function dragging(val) {\n      if (!val) {\n        this.setValues();\n      }\n    },\n    firstValue: function firstValue(val) {\n      if (this.range) {\n        this.$emit('input', [this.minValue, this.maxValue]);\n      } else {\n        this.$emit('input', val);\n      }\n    },\n    secondValue: function secondValue() {\n      if (this.range) {\n        this.$emit('input', [this.minValue, this.maxValue]);\n      }\n    },\n    min: function min() {\n      this.setValues();\n    },\n    max: function max() {\n      this.setValues();\n    }\n  },\n\n  methods: {\n    valueChanged: function valueChanged() {\n      var _this = this;\n\n      if (this.range) {\n        return ![this.minValue, this.maxValue].every(function (item, index) {\n          return item === _this.oldValue[index];\n        });\n      } else {\n        return this.value !== this.oldValue;\n      }\n    },\n    setValues: function setValues() {\n      if (this.min > this.max) {\n        console.error('[Element Error][Slider]min should not be greater than max.');\n        return;\n      }\n      var val = this.value;\n      if (this.range && Array.isArray(val)) {\n        if (val[1] < this.min) {\n          this.$emit('input', [this.min, this.min]);\n        } else if (val[0] > this.max) {\n          this.$emit('input', [this.max, this.max]);\n        } else if (val[0] < this.min) {\n          this.$emit('input', [this.min, val[1]]);\n        } else if (val[1] > this.max) {\n          this.$emit('input', [val[0], this.max]);\n        } else {\n          this.firstValue = val[0];\n          this.secondValue = val[1];\n          if (this.valueChanged()) {\n            this.dispatch('ElFormItem', 'el.form.change', [this.minValue, this.maxValue]);\n            this.oldValue = val.slice();\n          }\n        }\n      } else if (!this.range && typeof val === 'number' && !isNaN(val)) {\n        if (val < this.min) {\n          this.$emit('input', this.min);\n        } else if (val > this.max) {\n          this.$emit('input', this.max);\n        } else {\n          this.firstValue = val;\n          if (this.valueChanged()) {\n            this.dispatch('ElFormItem', 'el.form.change', val);\n            this.oldValue = val;\n          }\n        }\n      }\n    },\n    setPosition: function setPosition(percent) {\n      var targetValue = this.min + percent * (this.max - this.min) / 100;\n      if (!this.range) {\n        this.$refs.button1.setPosition(percent);\n        return;\n      }\n      var button = void 0;\n      if (Math.abs(this.minValue - targetValue) < Math.abs(this.maxValue - targetValue)) {\n        button = this.firstValue < this.secondValue ? 'button1' : 'button2';\n      } else {\n        button = this.firstValue > this.secondValue ? 'button1' : 'button2';\n      }\n      this.$refs[button].setPosition(percent);\n    },\n    onSliderClick: function onSliderClick(event) {\n      if (this.sliderDisabled || this.dragging) return;\n      this.resetSize();\n      if (this.vertical) {\n        var sliderOffsetBottom = this.$refs.slider.getBoundingClientRect().bottom;\n        this.setPosition((sliderOffsetBottom - event.clientY) / this.sliderSize * 100);\n      } else {\n        var sliderOffsetLeft = this.$refs.slider.getBoundingClientRect().left;\n        this.setPosition((event.clientX - sliderOffsetLeft) / this.sliderSize * 100);\n      }\n      this.emitChange();\n    },\n    resetSize: function resetSize() {\n      if (this.$refs.slider) {\n        this.sliderSize = this.$refs.slider['client' + (this.vertical ? 'Height' : 'Width')];\n      }\n    },\n    emitChange: function emitChange() {\n      var _this2 = this;\n\n      this.$nextTick(function () {\n        _this2.$emit('change', _this2.range ? [_this2.minValue, _this2.maxValue] : _this2.value);\n      });\n    },\n    getStopStyle: function getStopStyle(position) {\n      return this.vertical ? { 'bottom': position + '%' } : { 'left': position + '%' };\n    }\n  },\n\n  computed: {\n    stops: function stops() {\n      var _this3 = this;\n\n      if (!this.showStops || this.min > this.max) return [];\n      if (this.step === 0) {\n          false && 0;\n        return [];\n      }\n      var stopCount = (this.max - this.min) / this.step;\n      var stepWidth = 100 * this.step / (this.max - this.min);\n      var result = [];\n      for (var i = 1; i < stopCount; i++) {\n        result.push(i * stepWidth);\n      }\n      if (this.range) {\n        return result.filter(function (step) {\n          return step < 100 * (_this3.minValue - _this3.min) / (_this3.max - _this3.min) || step > 100 * (_this3.maxValue - _this3.min) / (_this3.max - _this3.min);\n        });\n      } else {\n        return result.filter(function (step) {\n          return step > 100 * (_this3.firstValue - _this3.min) / (_this3.max - _this3.min);\n        });\n      }\n    },\n    markList: function markList() {\n      var _this4 = this;\n\n      if (!this.marks) {\n        return [];\n      }\n\n      var marksKeys = Object.keys(this.marks);\n      return marksKeys.map(parseFloat).sort(function (a, b) {\n        return a - b;\n      }).filter(function (point) {\n        return point <= _this4.max && point >= _this4.min;\n      }).map(function (point) {\n        return {\n          point: point,\n          position: (point - _this4.min) * 100 / (_this4.max - _this4.min),\n          mark: _this4.marks[point]\n        };\n      });\n    },\n    minValue: function minValue() {\n      return Math.min(this.firstValue, this.secondValue);\n    },\n    maxValue: function maxValue() {\n      return Math.max(this.firstValue, this.secondValue);\n    },\n    barSize: function barSize() {\n      return this.range ? 100 * (this.maxValue - this.minValue) / (this.max - this.min) + '%' : 100 * (this.firstValue - this.min) / (this.max - this.min) + '%';\n    },\n    barStart: function barStart() {\n      return this.range ? 100 * (this.minValue - this.min) / (this.max - this.min) + '%' : '0%';\n    },\n    precision: function precision() {\n      var precisions = [this.min, this.max, this.step].map(function (item) {\n        var decimal = ('' + item).split('.')[1];\n        return decimal ? decimal.length : 0;\n      });\n      return Math.max.apply(null, precisions);\n    },\n    runwayStyle: function runwayStyle() {\n      return this.vertical ? { height: this.height } : {};\n    },\n    barStyle: function barStyle() {\n      return this.vertical ? {\n        height: this.barSize,\n        bottom: this.barStart\n      } : {\n        width: this.barSize,\n        left: this.barStart\n      };\n    },\n    sliderDisabled: function sliderDisabled() {\n      return this.disabled || (this.elForm || {}).disabled;\n    }\n  },\n\n  mounted: function mounted() {\n    var valuetext = void 0;\n    if (this.range) {\n      if (Array.isArray(this.value)) {\n        this.firstValue = Math.max(this.min, this.value[0]);\n        this.secondValue = Math.min(this.max, this.value[1]);\n      } else {\n        this.firstValue = this.min;\n        this.secondValue = this.max;\n      }\n      this.oldValue = [this.firstValue, this.secondValue];\n      valuetext = this.firstValue + '-' + this.secondValue;\n    } else {\n      if (typeof this.value !== 'number' || isNaN(this.value)) {\n        this.firstValue = this.min;\n      } else {\n        this.firstValue = Math.min(this.max, Math.max(this.min, this.value));\n      }\n      this.oldValue = this.firstValue;\n      valuetext = this.firstValue;\n    }\n    this.$el.setAttribute('aria-valuetext', valuetext);\n\n    // label screen reader\n    this.$el.setAttribute('aria-label', this.label ? this.label : 'slider between ' + this.min + ' and ' + this.max);\n\n    this.resetSize();\n    window.addEventListener('resize', this.resetSize);\n  },\n  beforeDestroy: function beforeDestroy() {\n    window.removeEventListener('resize', this.resetSize);\n  }\n});\n// CONCATENATED MODULE: ./packages/slider/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_slider_src_mainvue_type_script_lang_js_ = (slider_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/slider/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar slider_src_main_component = normalizeComponent(\n  packages_slider_src_mainvue_type_script_lang_js_,\n  mainvue_type_template_id_32708644_render,\n  mainvue_type_template_id_32708644_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var slider_src_main_api; }\nslider_src_main_component.options.__file = \"packages/slider/src/main.vue\"\n/* harmony default export */ var slider_src_main = (slider_src_main_component.exports);\n// CONCATENATED MODULE: ./packages/slider/index.js\n\n\n/* istanbul ignore next */\nslider_src_main.install = function (Vue) {\n  Vue.component(slider_src_main.name, slider_src_main);\n};\n\n/* harmony default export */ var slider = (slider_src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/loading/src/loading.vue?vue&type=template&id=eee0a7ac&\nvar loadingvue_type_template_id_eee0a7ac_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"transition\",\n    {\n      attrs: { name: \"el-loading-fade\" },\n      on: { \"after-leave\": _vm.handleAfterLeave }\n    },\n    [\n      _c(\n        \"div\",\n        {\n          directives: [\n            {\n              name: \"show\",\n              rawName: \"v-show\",\n              value: _vm.visible,\n              expression: \"visible\"\n            }\n          ],\n          staticClass: \"el-loading-mask\",\n          class: [_vm.customClass, { \"is-fullscreen\": _vm.fullscreen }],\n          style: { backgroundColor: _vm.background || \"\" }\n        },\n        [\n          _c(\"div\", { staticClass: \"el-loading-spinner\" }, [\n            !_vm.spinner\n              ? _c(\n                  \"svg\",\n                  {\n                    staticClass: \"circular\",\n                    attrs: { viewBox: \"25 25 50 50\" }\n                  },\n                  [\n                    _c(\"circle\", {\n                      staticClass: \"path\",\n                      attrs: { cx: \"50\", cy: \"50\", r: \"20\", fill: \"none\" }\n                    })\n                  ]\n                )\n              : _c(\"i\", { class: _vm.spinner }),\n            _vm.text\n              ? _c(\"p\", { staticClass: \"el-loading-text\" }, [\n                  _vm._v(_vm._s(_vm.text))\n                ])\n              : _vm._e()\n          ])\n        ]\n      )\n    ]\n  )\n}\nvar loadingvue_type_template_id_eee0a7ac_staticRenderFns = []\nloadingvue_type_template_id_eee0a7ac_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/loading/src/loading.vue?vue&type=template&id=eee0a7ac&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/loading/src/loading.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ var loadingvue_type_script_lang_js_ = ({\n  data: function data() {\n    return {\n      text: null,\n      spinner: null,\n      background: null,\n      fullscreen: true,\n      visible: false,\n      customClass: ''\n    };\n  },\n\n\n  methods: {\n    handleAfterLeave: function handleAfterLeave() {\n      this.$emit('after-leave');\n    },\n    setText: function setText(text) {\n      this.text = text;\n    }\n  }\n});\n// CONCATENATED MODULE: ./packages/loading/src/loading.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_loadingvue_type_script_lang_js_ = (loadingvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/loading/src/loading.vue\n\n\n\n\n\n/* normalize component */\n\nvar loading_component = normalizeComponent(\n  src_loadingvue_type_script_lang_js_,\n  loadingvue_type_template_id_eee0a7ac_render,\n  loadingvue_type_template_id_eee0a7ac_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var loading_api; }\nloading_component.options.__file = \"packages/loading/src/loading.vue\"\n/* harmony default export */ var loading = (loading_component.exports);\n// EXTERNAL MODULE: external \"element-ui/lib/utils/after-leave\"\nvar after_leave_ = __nested_webpack_require_8926__(33);\nvar after_leave_default = /*#__PURE__*/__nested_webpack_require_8926__.n(after_leave_);\n\n// CONCATENATED MODULE: ./packages/loading/src/directive.js\n\n\n\n\n\nvar Mask = external_vue_default.a.extend(loading);\n\nvar loadingDirective = {};\nloadingDirective.install = function (Vue) {\n  if (Vue.prototype.$isServer) return;\n  var toggleLoading = function toggleLoading(el, binding) {\n    if (binding.value) {\n      Vue.nextTick(function () {\n        if (binding.modifiers.fullscreen) {\n          el.originalPosition = Object(dom_[\"getStyle\"])(document.body, 'position');\n          el.originalOverflow = Object(dom_[\"getStyle\"])(document.body, 'overflow');\n          el.maskStyle.zIndex = popup_[\"PopupManager\"].nextZIndex();\n\n          Object(dom_[\"addClass\"])(el.mask, 'is-fullscreen');\n          insertDom(document.body, el, binding);\n        } else {\n          Object(dom_[\"removeClass\"])(el.mask, 'is-fullscreen');\n\n          if (binding.modifiers.body) {\n            el.originalPosition = Object(dom_[\"getStyle\"])(document.body, 'position');\n\n            ['top', 'left'].forEach(function (property) {\n              var scroll = property === 'top' ? 'scrollTop' : 'scrollLeft';\n              el.maskStyle[property] = el.getBoundingClientRect()[property] + document.body[scroll] + document.documentElement[scroll] - parseInt(Object(dom_[\"getStyle\"])(document.body, 'margin-' + property), 10) + 'px';\n            });\n            ['height', 'width'].forEach(function (property) {\n              el.maskStyle[property] = el.getBoundingClientRect()[property] + 'px';\n            });\n\n            insertDom(document.body, el, binding);\n          } else {\n            el.originalPosition = Object(dom_[\"getStyle\"])(el, 'position');\n            insertDom(el, el, binding);\n          }\n        }\n      });\n    } else {\n      after_leave_default()(el.instance, function (_) {\n        if (!el.instance.hiding) return;\n        el.domVisible = false;\n        var target = binding.modifiers.fullscreen || binding.modifiers.body ? document.body : el;\n        Object(dom_[\"removeClass\"])(target, 'el-loading-parent--relative');\n        Object(dom_[\"removeClass\"])(target, 'el-loading-parent--hidden');\n        el.instance.hiding = false;\n      }, 300, true);\n      el.instance.visible = false;\n      el.instance.hiding = true;\n    }\n  };\n  var insertDom = function insertDom(parent, el, binding) {\n    if (!el.domVisible && Object(dom_[\"getStyle\"])(el, 'display') !== 'none' && Object(dom_[\"getStyle\"])(el, 'visibility') !== 'hidden') {\n      Object.keys(el.maskStyle).forEach(function (property) {\n        el.mask.style[property] = el.maskStyle[property];\n      });\n\n      if (el.originalPosition !== 'absolute' && el.originalPosition !== 'fixed' && el.originalPosition !== 'sticky') {\n        Object(dom_[\"addClass\"])(parent, 'el-loading-parent--relative');\n      }\n      if (binding.modifiers.fullscreen && binding.modifiers.lock) {\n        Object(dom_[\"addClass\"])(parent, 'el-loading-parent--hidden');\n      }\n      el.domVisible = true;\n\n      parent.appendChild(el.mask);\n      Vue.nextTick(function () {\n        if (el.instance.hiding) {\n          el.instance.$emit('after-leave');\n        } else {\n          el.instance.visible = true;\n        }\n      });\n      el.domInserted = true;\n    } else if (el.domVisible && el.instance.hiding === true) {\n      el.instance.visible = true;\n      el.instance.hiding = false;\n    }\n  };\n\n  Vue.directive('loading', {\n    bind: function bind(el, binding, vnode) {\n      var textExr = el.getAttribute('element-loading-text');\n      var spinnerExr = el.getAttribute('element-loading-spinner');\n      var backgroundExr = el.getAttribute('element-loading-background');\n      var customClassExr = el.getAttribute('element-loading-custom-class');\n      var vm = vnode.context;\n      var mask = new Mask({\n        el: document.createElement('div'),\n        data: {\n          text: vm && vm[textExr] || textExr,\n          spinner: vm && vm[spinnerExr] || spinnerExr,\n          background: vm && vm[backgroundExr] || backgroundExr,\n          customClass: vm && vm[customClassExr] || customClassExr,\n          fullscreen: !!binding.modifiers.fullscreen\n        }\n      });\n      el.instance = mask;\n      el.mask = mask.$el;\n      el.maskStyle = {};\n\n      binding.value && toggleLoading(el, binding);\n    },\n\n    update: function update(el, binding) {\n      el.instance.setText(el.getAttribute('element-loading-text'));\n      if (binding.oldValue !== binding.value) {\n        toggleLoading(el, binding);\n      }\n    },\n\n    unbind: function unbind(el, binding) {\n      if (el.domInserted) {\n        el.mask && el.mask.parentNode && el.mask.parentNode.removeChild(el.mask);\n        toggleLoading(el, { value: false, modifiers: binding.modifiers });\n      }\n      el.instance && el.instance.$destroy();\n    }\n  });\n};\n\n/* harmony default export */ var src_directive = (loadingDirective);\n// CONCATENATED MODULE: ./packages/loading/src/index.js\n\n\n\n\n\n\n\nvar LoadingConstructor = external_vue_default.a.extend(loading);\n\nvar src_defaults = {\n  text: null,\n  fullscreen: true,\n  body: false,\n  lock: false,\n  customClass: ''\n};\n\nvar fullscreenLoading = void 0;\n\nLoadingConstructor.prototype.originalPosition = '';\nLoadingConstructor.prototype.originalOverflow = '';\n\nLoadingConstructor.prototype.close = function () {\n  var _this = this;\n\n  if (this.fullscreen) {\n    fullscreenLoading = undefined;\n  }\n  after_leave_default()(this, function (_) {\n    var target = _this.fullscreen || _this.body ? document.body : _this.target;\n    Object(dom_[\"removeClass\"])(target, 'el-loading-parent--relative');\n    Object(dom_[\"removeClass\"])(target, 'el-loading-parent--hidden');\n    if (_this.$el && _this.$el.parentNode) {\n      _this.$el.parentNode.removeChild(_this.$el);\n    }\n    _this.$destroy();\n  }, 300);\n  this.visible = false;\n};\n\nvar src_addStyle = function addStyle(options, parent, instance) {\n  var maskStyle = {};\n  if (options.fullscreen) {\n    instance.originalPosition = Object(dom_[\"getStyle\"])(document.body, 'position');\n    instance.originalOverflow = Object(dom_[\"getStyle\"])(document.body, 'overflow');\n    maskStyle.zIndex = popup_[\"PopupManager\"].nextZIndex();\n  } else if (options.body) {\n    instance.originalPosition = Object(dom_[\"getStyle\"])(document.body, 'position');\n    ['top', 'left'].forEach(function (property) {\n      var scroll = property === 'top' ? 'scrollTop' : 'scrollLeft';\n      maskStyle[property] = options.target.getBoundingClientRect()[property] + document.body[scroll] + document.documentElement[scroll] + 'px';\n    });\n    ['height', 'width'].forEach(function (property) {\n      maskStyle[property] = options.target.getBoundingClientRect()[property] + 'px';\n    });\n  } else {\n    instance.originalPosition = Object(dom_[\"getStyle\"])(parent, 'position');\n  }\n  Object.keys(maskStyle).forEach(function (property) {\n    instance.$el.style[property] = maskStyle[property];\n  });\n};\n\nvar src_Loading = function Loading() {\n  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n  if (external_vue_default.a.prototype.$isServer) return;\n  options = merge_default()({}, src_defaults, options);\n  if (typeof options.target === 'string') {\n    options.target = document.querySelector(options.target);\n  }\n  options.target = options.target || document.body;\n  if (options.target !== document.body) {\n    options.fullscreen = false;\n  } else {\n    options.body = true;\n  }\n  if (options.fullscreen && fullscreenLoading) {\n    return fullscreenLoading;\n  }\n\n  var parent = options.body ? document.body : options.target;\n  var instance = new LoadingConstructor({\n    el: document.createElement('div'),\n    data: options\n  });\n\n  src_addStyle(options, parent, instance);\n  if (instance.originalPosition !== 'absolute' && instance.originalPosition !== 'fixed' && instance.originalPosition !== 'sticky') {\n    Object(dom_[\"addClass\"])(parent, 'el-loading-parent--relative');\n  }\n  if (options.fullscreen && options.lock) {\n    Object(dom_[\"addClass\"])(parent, 'el-loading-parent--hidden');\n  }\n  parent.appendChild(instance.$el);\n  external_vue_default.a.nextTick(function () {\n    instance.visible = true;\n  });\n  if (options.fullscreen) {\n    fullscreenLoading = instance;\n  }\n  return instance;\n};\n\n/* harmony default export */ var src = (src_Loading);\n// CONCATENATED MODULE: ./packages/loading/index.js\n\n\n\n/* harmony default export */ var packages_loading = ({\n  install: function install(Vue) {\n    Vue.use(src_directive);\n    Vue.prototype.$loading = src;\n  },\n\n  directive: src_directive,\n  service: src\n});\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/icon/src/icon.vue?vue&type=template&id=cb3fe7f4&\nvar iconvue_type_template_id_cb3fe7f4_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\"i\", { class: \"el-icon-\" + _vm.name })\n}\nvar iconvue_type_template_id_cb3fe7f4_staticRenderFns = []\niconvue_type_template_id_cb3fe7f4_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/icon/src/icon.vue?vue&type=template&id=cb3fe7f4&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/icon/src/icon.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n\n/* harmony default export */ var iconvue_type_script_lang_js_ = ({\n  name: 'ElIcon',\n\n  props: {\n    name: String\n  }\n});\n// CONCATENATED MODULE: ./packages/icon/src/icon.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_iconvue_type_script_lang_js_ = (iconvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/icon/src/icon.vue\n\n\n\n\n\n/* normalize component */\n\nvar icon_component = normalizeComponent(\n  src_iconvue_type_script_lang_js_,\n  iconvue_type_template_id_cb3fe7f4_render,\n  iconvue_type_template_id_cb3fe7f4_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var icon_api; }\nicon_component.options.__file = \"packages/icon/src/icon.vue\"\n/* harmony default export */ var icon = (icon_component.exports);\n// CONCATENATED MODULE: ./packages/icon/index.js\n\n\n/* istanbul ignore next */\nicon.install = function (Vue) {\n  Vue.component(icon.name, icon);\n};\n\n/* harmony default export */ var packages_icon = (icon);\n// CONCATENATED MODULE: ./packages/row/src/row.js\n/* harmony default export */ var src_row = ({\n  name: 'ElRow',\n\n  componentName: 'ElRow',\n\n  props: {\n    tag: {\n      type: String,\n      default: 'div'\n    },\n    gutter: Number,\n    type: String,\n    justify: {\n      type: String,\n      default: 'start'\n    },\n    align: String\n  },\n\n  computed: {\n    style: function style() {\n      var ret = {};\n\n      if (this.gutter) {\n        ret.marginLeft = '-' + this.gutter / 2 + 'px';\n        ret.marginRight = ret.marginLeft;\n      }\n\n      return ret;\n    }\n  },\n\n  render: function render(h) {\n    return h(this.tag, {\n      class: ['el-row', this.justify !== 'start' ? 'is-justify-' + this.justify : '', this.align ? 'is-align-' + this.align : '', { 'el-row--flex': this.type === 'flex' }],\n      style: this.style\n    }, this.$slots.default);\n  }\n});\n// CONCATENATED MODULE: ./packages/row/index.js\n\n\n/* istanbul ignore next */\nsrc_row.install = function (Vue) {\n  Vue.component(src_row.name, src_row);\n};\n\n/* harmony default export */ var packages_row = (src_row);\n// CONCATENATED MODULE: ./packages/col/src/col.js\nvar col_typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n/* harmony default export */ var col = ({\n  name: 'ElCol',\n\n  props: {\n    span: {\n      type: Number,\n      default: 24\n    },\n    tag: {\n      type: String,\n      default: 'div'\n    },\n    offset: Number,\n    pull: Number,\n    push: Number,\n    xs: [Number, Object],\n    sm: [Number, Object],\n    md: [Number, Object],\n    lg: [Number, Object],\n    xl: [Number, Object]\n  },\n\n  computed: {\n    gutter: function gutter() {\n      var parent = this.$parent;\n      while (parent && parent.$options.componentName !== 'ElRow') {\n        parent = parent.$parent;\n      }\n      return parent ? parent.gutter : 0;\n    }\n  },\n  render: function render(h) {\n    var _this = this;\n\n    var classList = [];\n    var style = {};\n\n    if (this.gutter) {\n      style.paddingLeft = this.gutter / 2 + 'px';\n      style.paddingRight = style.paddingLeft;\n    }\n\n    ['span', 'offset', 'pull', 'push'].forEach(function (prop) {\n      if (_this[prop] || _this[prop] === 0) {\n        classList.push(prop !== 'span' ? 'el-col-' + prop + '-' + _this[prop] : 'el-col-' + _this[prop]);\n      }\n    });\n\n    ['xs', 'sm', 'md', 'lg', 'xl'].forEach(function (size) {\n      if (typeof _this[size] === 'number') {\n        classList.push('el-col-' + size + '-' + _this[size]);\n      } else if (col_typeof(_this[size]) === 'object') {\n        var props = _this[size];\n        Object.keys(props).forEach(function (prop) {\n          classList.push(prop !== 'span' ? 'el-col-' + size + '-' + prop + '-' + props[prop] : 'el-col-' + size + '-' + props[prop]);\n        });\n      }\n    });\n\n    return h(this.tag, {\n      class: ['el-col', classList],\n      style: style\n    }, this.$slots.default);\n  }\n});\n// CONCATENATED MODULE: ./packages/col/index.js\n\n\n/* istanbul ignore next */\ncol.install = function (Vue) {\n  Vue.component(col.name, col);\n};\n\n/* harmony default export */ var packages_col = (col);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/upload/src/upload-list.vue?vue&type=template&id=173fedf5&\nvar upload_listvue_type_template_id_173fedf5_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"transition-group\",\n    {\n      class: [\n        \"el-upload-list\",\n        \"el-upload-list--\" + _vm.listType,\n        { \"is-disabled\": _vm.disabled }\n      ],\n      attrs: { tag: \"ul\", name: \"el-list\" }\n    },\n    _vm._l(_vm.files, function(file) {\n      return _c(\n        \"li\",\n        {\n          key: file.uid,\n          class: [\n            \"el-upload-list__item\",\n            \"is-\" + file.status,\n            _vm.focusing ? \"focusing\" : \"\"\n          ],\n          attrs: { tabindex: \"0\" },\n          on: {\n            keydown: function($event) {\n              if (\n                !(\"button\" in $event) &&\n                _vm._k($event.keyCode, \"delete\", [8, 46], $event.key, [\n                  \"Backspace\",\n                  \"Delete\",\n                  \"Del\"\n                ])\n              ) {\n                return null\n              }\n              !_vm.disabled && _vm.$emit(\"remove\", file)\n            },\n            focus: function($event) {\n              _vm.focusing = true\n            },\n            blur: function($event) {\n              _vm.focusing = false\n            },\n            click: function($event) {\n              _vm.focusing = false\n            }\n          }\n        },\n        [\n          _vm._t(\n            \"default\",\n            [\n              file.status !== \"uploading\" &&\n              [\"picture-card\", \"picture\"].indexOf(_vm.listType) > -1\n                ? _c(\"img\", {\n                    staticClass: \"el-upload-list__item-thumbnail\",\n                    attrs: { src: file.url, alt: \"\" }\n                  })\n                : _vm._e(),\n              _c(\n                \"a\",\n                {\n                  staticClass: \"el-upload-list__item-name\",\n                  on: {\n                    click: function($event) {\n                      _vm.handleClick(file)\n                    }\n                  }\n                },\n                [\n                  _c(\"i\", { staticClass: \"el-icon-document\" }),\n                  _vm._v(_vm._s(file.name) + \"\\n      \")\n                ]\n              ),\n              _c(\n                \"label\",\n                { staticClass: \"el-upload-list__item-status-label\" },\n                [\n                  _c(\"i\", {\n                    class: {\n                      \"el-icon-upload-success\": true,\n                      \"el-icon-circle-check\": _vm.listType === \"text\",\n                      \"el-icon-check\":\n                        [\"picture-card\", \"picture\"].indexOf(_vm.listType) > -1\n                    }\n                  })\n                ]\n              ),\n              !_vm.disabled\n                ? _c(\"i\", {\n                    staticClass: \"el-icon-close\",\n                    on: {\n                      click: function($event) {\n                        _vm.$emit(\"remove\", file)\n                      }\n                    }\n                  })\n                : _vm._e(),\n              !_vm.disabled\n                ? _c(\"i\", { staticClass: \"el-icon-close-tip\" }, [\n                    _vm._v(_vm._s(_vm.t(\"el.upload.deleteTip\")))\n                  ])\n                : _vm._e(),\n              file.status === \"uploading\"\n                ? _c(\"el-progress\", {\n                    attrs: {\n                      type: _vm.listType === \"picture-card\" ? \"circle\" : \"line\",\n                      \"stroke-width\": _vm.listType === \"picture-card\" ? 6 : 2,\n                      percentage: _vm.parsePercentage(file.percentage)\n                    }\n                  })\n                : _vm._e(),\n              _vm.listType === \"picture-card\"\n                ? _c(\"span\", { staticClass: \"el-upload-list__item-actions\" }, [\n                    _vm.handlePreview && _vm.listType === \"picture-card\"\n                      ? _c(\n                          \"span\",\n                          {\n                            staticClass: \"el-upload-list__item-preview\",\n                            on: {\n                              click: function($event) {\n                                _vm.handlePreview(file)\n                              }\n                            }\n                          },\n                          [_c(\"i\", { staticClass: \"el-icon-zoom-in\" })]\n                        )\n                      : _vm._e(),\n                    !_vm.disabled\n                      ? _c(\n                          \"span\",\n                          {\n                            staticClass: \"el-upload-list__item-delete\",\n                            on: {\n                              click: function($event) {\n                                _vm.$emit(\"remove\", file)\n                              }\n                            }\n                          },\n                          [_c(\"i\", { staticClass: \"el-icon-delete\" })]\n                        )\n                      : _vm._e()\n                  ])\n                : _vm._e()\n            ],\n            { file: file }\n          )\n        ],\n        2\n      )\n    }),\n    0\n  )\n}\nvar upload_listvue_type_template_id_173fedf5_staticRenderFns = []\nupload_listvue_type_template_id_173fedf5_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/upload/src/upload-list.vue?vue&type=template&id=173fedf5&\n\n// EXTERNAL MODULE: external \"element-ui/lib/progress\"\nvar progress_ = __nested_webpack_require_8926__(34);\nvar progress_default = /*#__PURE__*/__nested_webpack_require_8926__.n(progress_);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/upload/src/upload-list.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n/* harmony default export */ var upload_listvue_type_script_lang_js_ = ({\n\n  name: 'ElUploadList',\n\n  mixins: [locale_default.a],\n\n  data: function data() {\n    return {\n      focusing: false\n    };\n  },\n\n  components: { ElProgress: progress_default.a },\n\n  props: {\n    files: {\n      type: Array,\n      default: function _default() {\n        return [];\n      }\n    },\n    disabled: {\n      type: Boolean,\n      default: false\n    },\n    handlePreview: Function,\n    listType: String\n  },\n  methods: {\n    parsePercentage: function parsePercentage(val) {\n      return parseInt(val, 10);\n    },\n    handleClick: function handleClick(file) {\n      this.handlePreview && this.handlePreview(file);\n    }\n  }\n});\n// CONCATENATED MODULE: ./packages/upload/src/upload-list.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_upload_listvue_type_script_lang_js_ = (upload_listvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/upload/src/upload-list.vue\n\n\n\n\n\n/* normalize component */\n\nvar upload_list_component = normalizeComponent(\n  src_upload_listvue_type_script_lang_js_,\n  upload_listvue_type_template_id_173fedf5_render,\n  upload_listvue_type_template_id_173fedf5_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var upload_list_api; }\nupload_list_component.options.__file = \"packages/upload/src/upload-list.vue\"\n/* harmony default export */ var upload_list = (upload_list_component.exports);\n// EXTERNAL MODULE: external \"babel-helper-vue-jsx-merge-props\"\nvar external_babel_helper_vue_jsx_merge_props_ = __nested_webpack_require_8926__(24);\nvar external_babel_helper_vue_jsx_merge_props_default = /*#__PURE__*/__nested_webpack_require_8926__.n(external_babel_helper_vue_jsx_merge_props_);\n\n// CONCATENATED MODULE: ./packages/upload/src/ajax.js\nfunction getError(action, option, xhr) {\n  var msg = void 0;\n  if (xhr.response) {\n    msg = '' + (xhr.response.error || xhr.response);\n  } else if (xhr.responseText) {\n    msg = '' + xhr.responseText;\n  } else {\n    msg = 'fail to post ' + action + ' ' + xhr.status;\n  }\n\n  var err = new Error(msg);\n  err.status = xhr.status;\n  err.method = 'post';\n  err.url = action;\n  return err;\n}\n\nfunction getBody(xhr) {\n  var text = xhr.responseText || xhr.response;\n  if (!text) {\n    return text;\n  }\n\n  try {\n    return JSON.parse(text);\n  } catch (e) {\n    return text;\n  }\n}\n\nfunction upload(option) {\n  if (typeof XMLHttpRequest === 'undefined') {\n    return;\n  }\n\n  var xhr = new XMLHttpRequest();\n  var action = option.action;\n\n  if (xhr.upload) {\n    xhr.upload.onprogress = function progress(e) {\n      if (e.total > 0) {\n        e.percent = e.loaded / e.total * 100;\n      }\n      option.onProgress(e);\n    };\n  }\n\n  var formData = new FormData();\n\n  if (option.data) {\n    Object.keys(option.data).forEach(function (key) {\n      formData.append(key, option.data[key]);\n    });\n  }\n\n  formData.append(option.filename, option.file, option.file.name);\n\n  xhr.onerror = function error(e) {\n    option.onError(e);\n  };\n\n  xhr.onload = function onload() {\n    if (xhr.status < 200 || xhr.status >= 300) {\n      return option.onError(getError(action, option, xhr));\n    }\n\n    option.onSuccess(getBody(xhr));\n  };\n\n  xhr.open('post', action, true);\n\n  if (option.withCredentials && 'withCredentials' in xhr) {\n    xhr.withCredentials = true;\n  }\n\n  var headers = option.headers || {};\n\n  for (var item in headers) {\n    if (headers.hasOwnProperty(item) && headers[item] !== null) {\n      xhr.setRequestHeader(item, headers[item]);\n    }\n  }\n  xhr.send(formData);\n  return xhr;\n}\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/upload/src/upload-dragger.vue?vue&type=template&id=7ebbf219&\nvar upload_draggervue_type_template_id_7ebbf219_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    {\n      staticClass: \"el-upload-dragger\",\n      class: {\n        \"is-dragover\": _vm.dragover\n      },\n      on: {\n        drop: function($event) {\n          $event.preventDefault()\n          return _vm.onDrop($event)\n        },\n        dragover: function($event) {\n          $event.preventDefault()\n          return _vm.onDragover($event)\n        },\n        dragleave: function($event) {\n          $event.preventDefault()\n          _vm.dragover = false\n        }\n      }\n    },\n    [_vm._t(\"default\")],\n    2\n  )\n}\nvar upload_draggervue_type_template_id_7ebbf219_staticRenderFns = []\nupload_draggervue_type_template_id_7ebbf219_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/upload/src/upload-dragger.vue?vue&type=template&id=7ebbf219&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/upload/src/upload-dragger.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ var upload_draggervue_type_script_lang_js_ = ({\n  name: 'ElUploadDrag',\n  props: {\n    disabled: Boolean\n  },\n  inject: {\n    uploader: {\n      default: ''\n    }\n  },\n  data: function data() {\n    return {\n      dragover: false\n    };\n  },\n\n  methods: {\n    onDragover: function onDragover() {\n      if (!this.disabled) {\n        this.dragover = true;\n      }\n    },\n    onDrop: function onDrop(e) {\n      if (this.disabled || !this.uploader) return;\n      var accept = this.uploader.accept;\n      this.dragover = false;\n      if (!accept) {\n        this.$emit('file', e.dataTransfer.files);\n        return;\n      }\n      this.$emit('file', [].slice.call(e.dataTransfer.files).filter(function (file) {\n        var type = file.type,\n            name = file.name;\n\n        var extension = name.indexOf('.') > -1 ? '.' + name.split('.').pop() : '';\n        var baseType = type.replace(/\\/.*$/, '');\n        return accept.split(',').map(function (type) {\n          return type.trim();\n        }).filter(function (type) {\n          return type;\n        }).some(function (acceptedType) {\n          if (/\\..+$/.test(acceptedType)) {\n            return extension === acceptedType;\n          }\n          if (/\\/\\*$/.test(acceptedType)) {\n            return baseType === acceptedType.replace(/\\/\\*$/, '');\n          }\n          if (/^[^\\/]+\\/[^\\/]+$/.test(acceptedType)) {\n            return type === acceptedType;\n          }\n          return false;\n        });\n      }));\n    }\n  }\n});\n// CONCATENATED MODULE: ./packages/upload/src/upload-dragger.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_upload_draggervue_type_script_lang_js_ = (upload_draggervue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/upload/src/upload-dragger.vue\n\n\n\n\n\n/* normalize component */\n\nvar upload_dragger_component = normalizeComponent(\n  src_upload_draggervue_type_script_lang_js_,\n  upload_draggervue_type_template_id_7ebbf219_render,\n  upload_draggervue_type_template_id_7ebbf219_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var upload_dragger_api; }\nupload_dragger_component.options.__file = \"packages/upload/src/upload-dragger.vue\"\n/* harmony default export */ var upload_dragger = (upload_dragger_component.exports);\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/upload/src/upload.vue?vue&type=script&lang=js&\n\n\n\n\n\n/* harmony default export */ var uploadvue_type_script_lang_js_ = ({\n  inject: ['uploader'],\n  components: {\n    UploadDragger: upload_dragger\n  },\n  props: {\n    type: String,\n    action: {\n      type: String,\n      required: true\n    },\n    name: {\n      type: String,\n      default: 'file'\n    },\n    data: Object,\n    headers: Object,\n    withCredentials: Boolean,\n    multiple: Boolean,\n    accept: String,\n    onStart: Function,\n    onProgress: Function,\n    onSuccess: Function,\n    onError: Function,\n    beforeUpload: Function,\n    drag: Boolean,\n    onPreview: {\n      type: Function,\n      default: function _default() {}\n    },\n    onRemove: {\n      type: Function,\n      default: function _default() {}\n    },\n    fileList: Array,\n    autoUpload: Boolean,\n    listType: String,\n    httpRequest: {\n      type: Function,\n      default: upload\n    },\n    disabled: Boolean,\n    limit: Number,\n    onExceed: Function\n  },\n\n  data: function data() {\n    return {\n      mouseover: false,\n      reqs: {}\n    };\n  },\n\n\n  methods: {\n    isImage: function isImage(str) {\n      return str.indexOf('image') !== -1;\n    },\n    handleChange: function handleChange(ev) {\n      var files = ev.target.files;\n\n      if (!files) return;\n      this.uploadFiles(files);\n    },\n    uploadFiles: function uploadFiles(files) {\n      var _this = this;\n\n      if (this.limit && this.fileList.length + files.length > this.limit) {\n        this.onExceed && this.onExceed(files, this.fileList);\n        return;\n      }\n\n      var postFiles = Array.prototype.slice.call(files);\n      if (!this.multiple) {\n        postFiles = postFiles.slice(0, 1);\n      }\n\n      if (postFiles.length === 0) {\n        return;\n      }\n\n      postFiles.forEach(function (rawFile) {\n        _this.onStart(rawFile);\n        if (_this.autoUpload) _this.upload(rawFile);\n      });\n    },\n    upload: function upload(rawFile) {\n      var _this2 = this;\n\n      this.$refs.input.value = null;\n\n      if (!this.beforeUpload) {\n        return this.post(rawFile);\n      }\n\n      var before = this.beforeUpload(rawFile);\n      if (before && before.then) {\n        before.then(function (processedFile) {\n          var fileType = Object.prototype.toString.call(processedFile);\n\n          if (fileType === '[object File]' || fileType === '[object Blob]') {\n            if (fileType === '[object Blob]') {\n              processedFile = new File([processedFile], rawFile.name, {\n                type: rawFile.type\n              });\n            }\n            for (var p in rawFile) {\n              if (rawFile.hasOwnProperty(p)) {\n                processedFile[p] = rawFile[p];\n              }\n            }\n            _this2.post(processedFile);\n          } else {\n            _this2.post(rawFile);\n          }\n        }, function () {\n          _this2.onRemove(null, rawFile);\n        });\n      } else if (before !== false) {\n        this.post(rawFile);\n      } else {\n        this.onRemove(null, rawFile);\n      }\n    },\n    abort: function abort(file) {\n      var reqs = this.reqs;\n\n      if (file) {\n        var uid = file;\n        if (file.uid) uid = file.uid;\n        if (reqs[uid]) {\n          reqs[uid].abort();\n        }\n      } else {\n        Object.keys(reqs).forEach(function (uid) {\n          if (reqs[uid]) reqs[uid].abort();\n          delete reqs[uid];\n        });\n      }\n    },\n    post: function post(rawFile) {\n      var _this3 = this;\n\n      var uid = rawFile.uid;\n\n      var options = {\n        headers: this.headers,\n        withCredentials: this.withCredentials,\n        file: rawFile,\n        data: this.data,\n        filename: this.name,\n        action: this.action,\n        onProgress: function onProgress(e) {\n          _this3.onProgress(e, rawFile);\n        },\n        onSuccess: function onSuccess(res) {\n          _this3.onSuccess(res, rawFile);\n          delete _this3.reqs[uid];\n        },\n        onError: function onError(err) {\n          _this3.onError(err, rawFile);\n          delete _this3.reqs[uid];\n        }\n      };\n      var req = this.httpRequest(options);\n      this.reqs[uid] = req;\n      if (req && req.then) {\n        req.then(options.onSuccess, options.onError);\n      }\n    },\n    handleClick: function handleClick() {\n      if (!this.disabled) {\n        this.$refs.input.value = null;\n        this.$refs.input.click();\n      }\n    },\n    handleKeydown: function handleKeydown(e) {\n      if (e.target !== e.currentTarget) return;\n      if (e.keyCode === 13 || e.keyCode === 32) {\n        this.handleClick();\n      }\n    }\n  },\n\n  render: function render(h) {\n    var handleClick = this.handleClick,\n        drag = this.drag,\n        name = this.name,\n        handleChange = this.handleChange,\n        multiple = this.multiple,\n        accept = this.accept,\n        listType = this.listType,\n        uploadFiles = this.uploadFiles,\n        disabled = this.disabled,\n        handleKeydown = this.handleKeydown;\n\n    var data = {\n      class: {\n        'el-upload': true\n      },\n      on: {\n        click: handleClick,\n        keydown: handleKeydown\n      }\n    };\n    data.class['el-upload--' + listType] = true;\n    return h(\n      'div',\n      external_babel_helper_vue_jsx_merge_props_default()([data, {\n        attrs: { tabindex: '0' }\n      }]),\n      [drag ? h(\n        'upload-dragger',\n        {\n          attrs: { disabled: disabled },\n          on: {\n            'file': uploadFiles\n          }\n        },\n        [this.$slots.default]\n      ) : this.$slots.default, h('input', { 'class': 'el-upload__input', attrs: { type: 'file', name: name, multiple: multiple, accept: accept },\n        ref: 'input', on: {\n          'change': handleChange\n        }\n      })]\n    );\n  }\n});\n// CONCATENATED MODULE: ./packages/upload/src/upload.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_uploadvue_type_script_lang_js_ = (uploadvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/upload/src/upload.vue\nvar upload_render, upload_staticRenderFns\n\n\n\n\n/* normalize component */\n\nvar upload_component = normalizeComponent(\n  src_uploadvue_type_script_lang_js_,\n  upload_render,\n  upload_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var upload_api; }\nupload_component.options.__file = \"packages/upload/src/upload.vue\"\n/* harmony default export */ var src_upload = (upload_component.exports);\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/upload/src/index.vue?vue&type=script&lang=js&\n\n\n\n\n\n\nfunction srcvue_type_script_lang_js_noop() {}\n\n/* harmony default export */ var srcvue_type_script_lang_js_ = ({\n  name: 'ElUpload',\n\n  mixins: [migrating_default.a],\n\n  components: {\n    ElProgress: progress_default.a,\n    UploadList: upload_list,\n    Upload: src_upload\n  },\n\n  provide: function provide() {\n    return {\n      uploader: this\n    };\n  },\n\n\n  inject: {\n    elForm: {\n      default: ''\n    }\n  },\n\n  props: {\n    action: {\n      type: String,\n      required: true\n    },\n    headers: {\n      type: Object,\n      default: function _default() {\n        return {};\n      }\n    },\n    data: Object,\n    multiple: Boolean,\n    name: {\n      type: String,\n      default: 'file'\n    },\n    drag: Boolean,\n    dragger: Boolean,\n    withCredentials: Boolean,\n    showFileList: {\n      type: Boolean,\n      default: true\n    },\n    accept: String,\n    type: {\n      type: String,\n      default: 'select'\n    },\n    beforeUpload: Function,\n    beforeRemove: Function,\n    onRemove: {\n      type: Function,\n      default: srcvue_type_script_lang_js_noop\n    },\n    onChange: {\n      type: Function,\n      default: srcvue_type_script_lang_js_noop\n    },\n    onPreview: {\n      type: Function\n    },\n    onSuccess: {\n      type: Function,\n      default: srcvue_type_script_lang_js_noop\n    },\n    onProgress: {\n      type: Function,\n      default: srcvue_type_script_lang_js_noop\n    },\n    onError: {\n      type: Function,\n      default: srcvue_type_script_lang_js_noop\n    },\n    fileList: {\n      type: Array,\n      default: function _default() {\n        return [];\n      }\n    },\n    autoUpload: {\n      type: Boolean,\n      default: true\n    },\n    listType: {\n      type: String,\n      default: 'text' // text,picture,picture-card\n    },\n    httpRequest: Function,\n    disabled: Boolean,\n    limit: Number,\n    onExceed: {\n      type: Function,\n      default: srcvue_type_script_lang_js_noop\n    }\n  },\n\n  data: function data() {\n    return {\n      uploadFiles: [],\n      dragOver: false,\n      draging: false,\n      tempIndex: 1\n    };\n  },\n\n\n  computed: {\n    uploadDisabled: function uploadDisabled() {\n      return this.disabled || (this.elForm || {}).disabled;\n    }\n  },\n\n  watch: {\n    listType: function listType(type) {\n      if (type === 'picture-card' || type === 'picture') {\n        this.uploadFiles = this.uploadFiles.map(function (file) {\n          if (!file.url && file.raw) {\n            try {\n              file.url = URL.createObjectURL(file.raw);\n            } catch (err) {\n              console.error('[Element Error][Upload]', err);\n            }\n          }\n          return file;\n        });\n      }\n    },\n\n    fileList: {\n      immediate: true,\n      handler: function handler(fileList) {\n        var _this = this;\n\n        this.uploadFiles = fileList.map(function (item) {\n          item.uid = item.uid || Date.now() + _this.tempIndex++;\n          item.status = item.status || 'success';\n          return item;\n        });\n      }\n    }\n  },\n\n  methods: {\n    handleStart: function handleStart(rawFile) {\n      rawFile.uid = Date.now() + this.tempIndex++;\n      var file = {\n        status: 'ready',\n        name: rawFile.name,\n        size: rawFile.size,\n        percentage: 0,\n        uid: rawFile.uid,\n        raw: rawFile\n      };\n\n      if (this.listType === 'picture-card' || this.listType === 'picture') {\n        try {\n          file.url = URL.createObjectURL(rawFile);\n        } catch (err) {\n          console.error('[Element Error][Upload]', err);\n          return;\n        }\n      }\n\n      this.uploadFiles.push(file);\n      this.onChange(file, this.uploadFiles);\n    },\n    handleProgress: function handleProgress(ev, rawFile) {\n      var file = this.getFile(rawFile);\n      this.onProgress(ev, file, this.uploadFiles);\n      file.status = 'uploading';\n      file.percentage = ev.percent || 0;\n    },\n    handleSuccess: function handleSuccess(res, rawFile) {\n      var file = this.getFile(rawFile);\n\n      if (file) {\n        file.status = 'success';\n        file.response = res;\n\n        this.onSuccess(res, file, this.uploadFiles);\n        this.onChange(file, this.uploadFiles);\n      }\n    },\n    handleError: function handleError(err, rawFile) {\n      var file = this.getFile(rawFile);\n      var fileList = this.uploadFiles;\n\n      file.status = 'fail';\n\n      fileList.splice(fileList.indexOf(file), 1);\n\n      this.onError(err, file, this.uploadFiles);\n      this.onChange(file, this.uploadFiles);\n    },\n    handleRemove: function handleRemove(file, raw) {\n      var _this2 = this;\n\n      if (raw) {\n        file = this.getFile(raw);\n      }\n      var doRemove = function doRemove() {\n        _this2.abort(file);\n        var fileList = _this2.uploadFiles;\n        fileList.splice(fileList.indexOf(file), 1);\n        _this2.onRemove(file, fileList);\n      };\n\n      if (!this.beforeRemove) {\n        doRemove();\n      } else if (typeof this.beforeRemove === 'function') {\n        var before = this.beforeRemove(file, this.uploadFiles);\n        if (before && before.then) {\n          before.then(function () {\n            doRemove();\n          }, srcvue_type_script_lang_js_noop);\n        } else if (before !== false) {\n          doRemove();\n        }\n      }\n    },\n    getFile: function getFile(rawFile) {\n      var fileList = this.uploadFiles;\n      var target = void 0;\n      fileList.every(function (item) {\n        target = rawFile.uid === item.uid ? item : null;\n        return !target;\n      });\n      return target;\n    },\n    abort: function abort(file) {\n      this.$refs['upload-inner'].abort(file);\n    },\n    clearFiles: function clearFiles() {\n      this.uploadFiles = [];\n    },\n    submit: function submit() {\n      var _this3 = this;\n\n      this.uploadFiles.filter(function (file) {\n        return file.status === 'ready';\n      }).forEach(function (file) {\n        _this3.$refs['upload-inner'].upload(file.raw);\n      });\n    },\n    getMigratingConfig: function getMigratingConfig() {\n      return {\n        props: {\n          'default-file-list': 'default-file-list is renamed to file-list.',\n          'show-upload-list': 'show-upload-list is renamed to show-file-list.',\n          'thumbnail-mode': 'thumbnail-mode has been deprecated, you can implement the same effect according to this case: http://element.eleme.io/#/zh-CN/component/upload#yong-hu-tou-xiang-shang-chuan'\n        }\n      };\n    }\n  },\n\n  beforeDestroy: function beforeDestroy() {\n    this.uploadFiles.forEach(function (file) {\n      if (file.url && file.url.indexOf('blob:') === 0) {\n        URL.revokeObjectURL(file.url);\n      }\n    });\n  },\n  render: function render(h) {\n    var _this4 = this;\n\n    var uploadList = void 0;\n\n    if (this.showFileList) {\n      uploadList = h(\n        upload_list,\n        {\n          attrs: {\n            disabled: this.uploadDisabled,\n            listType: this.listType,\n            files: this.uploadFiles,\n\n            handlePreview: this.onPreview },\n          on: {\n            'remove': this.handleRemove\n          }\n        },\n        [function (props) {\n          if (_this4.$scopedSlots.file) {\n            return _this4.$scopedSlots.file({\n              file: props.file\n            });\n          }\n        }]\n      );\n    }\n\n    var uploadData = {\n      props: {\n        type: this.type,\n        drag: this.drag,\n        action: this.action,\n        multiple: this.multiple,\n        'before-upload': this.beforeUpload,\n        'with-credentials': this.withCredentials,\n        headers: this.headers,\n        name: this.name,\n        data: this.data,\n        accept: this.accept,\n        fileList: this.uploadFiles,\n        autoUpload: this.autoUpload,\n        listType: this.listType,\n        disabled: this.uploadDisabled,\n        limit: this.limit,\n        'on-exceed': this.onExceed,\n        'on-start': this.handleStart,\n        'on-progress': this.handleProgress,\n        'on-success': this.handleSuccess,\n        'on-error': this.handleError,\n        'on-preview': this.onPreview,\n        'on-remove': this.handleRemove,\n        'http-request': this.httpRequest\n      },\n      ref: 'upload-inner'\n    };\n\n    var trigger = this.$slots.trigger || this.$slots.default;\n    var uploadComponent = h(\n      'upload',\n      uploadData,\n      [trigger]\n    );\n\n    return h('div', [this.listType === 'picture-card' ? uploadList : '', this.$slots.trigger ? [uploadComponent, this.$slots.default] : uploadComponent, this.$slots.tip, this.listType !== 'picture-card' ? uploadList : '']);\n  }\n});\n// CONCATENATED MODULE: ./packages/upload/src/index.vue?vue&type=script&lang=js&\n /* harmony default export */ var upload_srcvue_type_script_lang_js_ = (srcvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/upload/src/index.vue\nvar src_render, src_staticRenderFns\n\n\n\n\n/* normalize component */\n\nvar upload_src_component = normalizeComponent(\n  upload_srcvue_type_script_lang_js_,\n  src_render,\n  src_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var src_api; }\nupload_src_component.options.__file = \"packages/upload/src/index.vue\"\n/* harmony default export */ var upload_src = (upload_src_component.exports);\n// CONCATENATED MODULE: ./packages/upload/index.js\n\n\n/* istanbul ignore next */\nupload_src.install = function (Vue) {\n  Vue.component(upload_src.name, upload_src);\n};\n\n/* harmony default export */ var packages_upload = (upload_src);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/progress/src/progress.vue?vue&type=template&id=229ee406&\nvar progressvue_type_template_id_229ee406_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    {\n      staticClass: \"el-progress\",\n      class: [\n        \"el-progress--\" + _vm.type,\n        _vm.status ? \"is-\" + _vm.status : \"\",\n        {\n          \"el-progress--without-text\": !_vm.showText,\n          \"el-progress--text-inside\": _vm.textInside\n        }\n      ],\n      attrs: {\n        role: \"progressbar\",\n        \"aria-valuenow\": _vm.percentage,\n        \"aria-valuemin\": \"0\",\n        \"aria-valuemax\": \"100\"\n      }\n    },\n    [\n      _vm.type === \"line\"\n        ? _c(\"div\", { staticClass: \"el-progress-bar\" }, [\n            _c(\n              \"div\",\n              {\n                staticClass: \"el-progress-bar__outer\",\n                style: {\n                  height: _vm.strokeWidth + \"px\",\n                  backgroundColor: _vm.defineBackColor\n                }\n              },\n              [\n                _c(\n                  \"div\",\n                  {\n                    staticClass: \"el-progress-bar__inner\",\n                    style: _vm.barStyle\n                  },\n                  [\n                    _vm.showText && _vm.textInside\n                      ? _c(\n                          \"div\",\n                          {\n                            staticClass: \"el-progress-bar__innerText\",\n                            style: { color: _vm.textColor }\n                          },\n                          [_vm._v(_vm._s(_vm.content))]\n                        )\n                      : _vm._e()\n                  ]\n                )\n              ]\n            )\n          ])\n        : _c(\n            \"div\",\n            {\n              staticClass: \"el-progress-circle\",\n              style: { height: _vm.width + \"px\", width: _vm.width + \"px\" }\n            },\n            [\n              _c(\"svg\", { attrs: { viewBox: \"0 0 100 100\" } }, [\n                _c(\"path\", {\n                  staticClass: \"el-progress-circle__track\",\n                  style: _vm.trailPathStyle,\n                  attrs: {\n                    d: _vm.trackPath,\n                    stroke: _vm.defineBackColor,\n                    \"stroke-width\": _vm.relativeStrokeWidth,\n                    fill: \"none\"\n                  }\n                }),\n                _c(\"path\", {\n                  staticClass: \"el-progress-circle__path\",\n                  style: _vm.circlePathStyle,\n                  attrs: {\n                    d: _vm.trackPath,\n                    stroke: _vm.stroke,\n                    fill: \"none\",\n                    \"stroke-linecap\": _vm.strokeLinecap,\n                    \"stroke-width\": _vm.percentage ? _vm.relativeStrokeWidth : 0\n                  }\n                })\n              ])\n            ]\n          ),\n      _vm.showText && !_vm.textInside\n        ? _c(\n            \"div\",\n            {\n              staticClass: \"el-progress__text\",\n              style: {\n                fontSize: _vm.progressTextSize + \"px\",\n                color: _vm.textColor\n              }\n            },\n            [\n              !_vm.status\n                ? [_vm._v(_vm._s(_vm.content))]\n                : _c(\"i\", { class: _vm.iconClass })\n            ],\n            2\n          )\n        : _vm._e()\n    ]\n  )\n}\nvar progressvue_type_template_id_229ee406_staticRenderFns = []\nprogressvue_type_template_id_229ee406_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/progress/src/progress.vue?vue&type=template&id=229ee406&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/progress/src/progress.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ var progressvue_type_script_lang_js_ = ({\n  name: 'ElProgress',\n  props: {\n    type: {\n      type: String,\n      default: 'line',\n      validator: function validator(val) {\n        return ['line', 'circle', 'dashboard'].indexOf(val) > -1;\n      }\n    },\n    percentage: {\n      type: Number,\n      default: 0,\n      required: true,\n      validator: function validator(val) {\n        return val >= 0 && val <= 100;\n      }\n    },\n    status: {\n      type: String,\n      validator: function validator(val) {\n        return ['success', 'exception', 'warning'].indexOf(val) > -1;\n      }\n    },\n    strokeWidth: {\n      type: Number,\n      default: 6\n    },\n    strokeLinecap: {\n      type: String,\n      default: 'round'\n    },\n    textInside: {\n      type: Boolean,\n      default: false\n    },\n    width: {\n      type: Number,\n      default: 126\n    },\n    showText: {\n      type: Boolean,\n      default: true\n    },\n    color: {\n      type: [String, Array, Function],\n      default: ''\n    },\n    defineBackColor: {\n      type: [String, Array, Function],\n      default: '#ebeef5'\n    },\n    textColor: {\n      type: [String, Array, Function],\n      default: '#606266'\n    },\n    format: Function\n  },\n  computed: {\n    barStyle: function barStyle() {\n      var style = {};\n      style.width = this.percentage + '%';\n      style.backgroundColor = this.getCurrentColor(this.percentage);\n      return style;\n    },\n    relativeStrokeWidth: function relativeStrokeWidth() {\n      return (this.strokeWidth / this.width * 100).toFixed(1);\n    },\n    radius: function radius() {\n      if (this.type === 'circle' || this.type === 'dashboard') {\n        return parseInt(50 - parseFloat(this.relativeStrokeWidth) / 2, 10);\n      } else {\n        return 0;\n      }\n    },\n    trackPath: function trackPath() {\n      var radius = this.radius;\n      var isDashboard = this.type === 'dashboard';\n      return '\\n        M 50 50\\n        m 0 ' + (isDashboard ? '' : '-') + radius + '\\n        a ' + radius + ' ' + radius + ' 0 1 1 0 ' + (isDashboard ? '-' : '') + radius * 2 + '\\n        a ' + radius + ' ' + radius + ' 0 1 1 0 ' + (isDashboard ? '' : '-') + radius * 2 + '\\n        ';\n    },\n    perimeter: function perimeter() {\n      return 2 * Math.PI * this.radius;\n    },\n    rate: function rate() {\n      return this.type === 'dashboard' ? 0.75 : 1;\n    },\n    strokeDashoffset: function strokeDashoffset() {\n      var offset = -1 * this.perimeter * (1 - this.rate) / 2;\n      return offset + 'px';\n    },\n    trailPathStyle: function trailPathStyle() {\n      return {\n        strokeDasharray: this.perimeter * this.rate + 'px, ' + this.perimeter + 'px',\n        strokeDashoffset: this.strokeDashoffset\n      };\n    },\n    circlePathStyle: function circlePathStyle() {\n      return {\n        strokeDasharray: this.perimeter * this.rate * (this.percentage / 100) + 'px, ' + this.perimeter + 'px',\n        strokeDashoffset: this.strokeDashoffset,\n        transition: 'stroke-dasharray 0.6s ease 0s, stroke 0.6s ease'\n      };\n    },\n    stroke: function stroke() {\n      var ret = void 0;\n      if (this.color) {\n        ret = this.getCurrentColor(this.percentage);\n      } else {\n        switch (this.status) {\n          case 'success':\n            ret = '#13ce66';\n            break;\n          case 'exception':\n            ret = '#ff4949';\n            break;\n          case 'warning':\n            ret = '#e6a23c';\n            break;\n          default:\n            ret = '#20a0ff';\n        }\n      }\n      return ret;\n    },\n    iconClass: function iconClass() {\n      if (this.status === 'warning') {\n        return 'el-icon-warning';\n      }\n      if (this.type === 'line') {\n        return this.status === 'success' ? 'el-icon-circle-check' : 'el-icon-circle-close';\n      } else {\n        return this.status === 'success' ? 'el-icon-check' : 'el-icon-close';\n      }\n    },\n    progressTextSize: function progressTextSize() {\n      return this.type === 'line' ? 12 + this.strokeWidth * 0.4 : this.width * 0.111111 + 2;\n    },\n    content: function content() {\n      if (typeof this.format === 'function') {\n        return this.format(this.percentage) || '';\n      } else {\n        return this.percentage + '%';\n      }\n    }\n  },\n  methods: {\n    getCurrentColor: function getCurrentColor(percentage) {\n      if (typeof this.color === 'function') {\n        return this.color(percentage);\n      } else if (typeof this.color === 'string') {\n        return this.color;\n      } else {\n        return this.getLevelColor(percentage);\n      }\n    },\n    getLevelColor: function getLevelColor(percentage) {\n      var colorArray = this.getColorArray().sort(function (a, b) {\n        return a.percentage - b.percentage;\n      });\n\n      for (var i = 0; i < colorArray.length; i++) {\n        if (colorArray[i].percentage > percentage) {\n          return colorArray[i].color;\n        }\n      }\n      return colorArray[colorArray.length - 1].color;\n    },\n    getColorArray: function getColorArray() {\n      var color = this.color;\n      var span = 100 / color.length;\n      return color.map(function (seriesColor, index) {\n        if (typeof seriesColor === 'string') {\n          return {\n            color: seriesColor,\n            percentage: (index + 1) * span\n          };\n        }\n        return seriesColor;\n      });\n    }\n  }\n});\n// CONCATENATED MODULE: ./packages/progress/src/progress.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_progressvue_type_script_lang_js_ = (progressvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/progress/src/progress.vue\n\n\n\n\n\n/* normalize component */\n\nvar progress_component = normalizeComponent(\n  src_progressvue_type_script_lang_js_,\n  progressvue_type_template_id_229ee406_render,\n  progressvue_type_template_id_229ee406_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var progress_api; }\nprogress_component.options.__file = \"packages/progress/src/progress.vue\"\n/* harmony default export */ var progress = (progress_component.exports);\n// CONCATENATED MODULE: ./packages/progress/index.js\n\n\n/* istanbul ignore next */\nprogress.install = function (Vue) {\n  Vue.component(progress.name, progress);\n};\n\n/* harmony default export */ var packages_progress = (progress);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/spinner/src/spinner.vue?vue&type=template&id=697b8538&\nvar spinnervue_type_template_id_697b8538_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\"span\", { staticClass: \"el-spinner\" }, [\n    _c(\n      \"svg\",\n      {\n        staticClass: \"el-spinner-inner\",\n        style: { width: _vm.radius / 2 + \"px\", height: _vm.radius / 2 + \"px\" },\n        attrs: { viewBox: \"0 0 50 50\" }\n      },\n      [\n        _c(\"circle\", {\n          staticClass: \"path\",\n          attrs: {\n            cx: \"25\",\n            cy: \"25\",\n            r: \"20\",\n            fill: \"none\",\n            stroke: _vm.strokeColor,\n            \"stroke-width\": _vm.strokeWidth\n          }\n        })\n      ]\n    )\n  ])\n}\nvar spinnervue_type_template_id_697b8538_staticRenderFns = []\nspinnervue_type_template_id_697b8538_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/spinner/src/spinner.vue?vue&type=template&id=697b8538&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/spinner/src/spinner.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ var spinnervue_type_script_lang_js_ = ({\n  name: 'ElSpinner',\n  props: {\n    type: String,\n    radius: {\n      type: Number,\n      default: 100\n    },\n    strokeWidth: {\n      type: Number,\n      default: 5\n    },\n    strokeColor: {\n      type: String,\n      default: '#efefef'\n    }\n  }\n});\n// CONCATENATED MODULE: ./packages/spinner/src/spinner.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_spinnervue_type_script_lang_js_ = (spinnervue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/spinner/src/spinner.vue\n\n\n\n\n\n/* normalize component */\n\nvar spinner_component = normalizeComponent(\n  src_spinnervue_type_script_lang_js_,\n  spinnervue_type_template_id_697b8538_render,\n  spinnervue_type_template_id_697b8538_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var spinner_api; }\nspinner_component.options.__file = \"packages/spinner/src/spinner.vue\"\n/* harmony default export */ var spinner = (spinner_component.exports);\n// CONCATENATED MODULE: ./packages/spinner/index.js\n\n\n/* istanbul ignore next */\nspinner.install = function (Vue) {\n  Vue.component(spinner.name, spinner);\n};\n\n/* harmony default export */ var packages_spinner = (spinner);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/message/src/main.vue?vue&type=template&id=455b9f60&\nvar mainvue_type_template_id_455b9f60_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"transition\",\n    {\n      attrs: { name: \"el-message-fade\" },\n      on: { \"after-leave\": _vm.handleAfterLeave }\n    },\n    [\n      _c(\n        \"div\",\n        {\n          directives: [\n            {\n              name: \"show\",\n              rawName: \"v-show\",\n              value: _vm.visible,\n              expression: \"visible\"\n            }\n          ],\n          class: [\n            \"el-message\",\n            _vm.type && !_vm.iconClass ? \"el-message--\" + _vm.type : \"\",\n            _vm.center ? \"is-center\" : \"\",\n            _vm.showClose ? \"is-closable\" : \"\",\n            _vm.customClass\n          ],\n          style: _vm.positionStyle,\n          attrs: { role: \"alert\" },\n          on: { mouseenter: _vm.clearTimer, mouseleave: _vm.startTimer }\n        },\n        [\n          _vm.iconClass\n            ? _c(\"i\", { class: _vm.iconClass })\n            : _c(\"i\", { class: _vm.typeClass }),\n          _vm._t(\"default\", [\n            !_vm.dangerouslyUseHTMLString\n              ? _c(\"p\", { staticClass: \"el-message__content\" }, [\n                  _vm._v(_vm._s(_vm.message))\n                ])\n              : _c(\"p\", {\n                  staticClass: \"el-message__content\",\n                  domProps: { innerHTML: _vm._s(_vm.message) }\n                })\n          ]),\n          _vm.showClose\n            ? _c(\"i\", {\n                staticClass: \"el-message__closeBtn el-icon-close\",\n                on: { click: _vm.close }\n              })\n            : _vm._e()\n        ],\n        2\n      )\n    ]\n  )\n}\nvar mainvue_type_template_id_455b9f60_staticRenderFns = []\nmainvue_type_template_id_455b9f60_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/message/src/main.vue?vue&type=template&id=455b9f60&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/message/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\nvar src_mainvue_type_script_lang_js_typeMap = {\n  success: 'success',\n  info: 'info',\n  warning: 'warning',\n  error: 'error'\n};\n\n/* harmony default export */ var message_src_mainvue_type_script_lang_js_ = ({\n  data: function data() {\n    return {\n      visible: false,\n      message: '',\n      duration: 3000,\n      type: 'info',\n      iconClass: '',\n      customClass: '',\n      onClose: null,\n      showClose: false,\n      closed: false,\n      verticalOffset: 20,\n      timer: null,\n      dangerouslyUseHTMLString: false,\n      center: false\n    };\n  },\n\n\n  computed: {\n    typeClass: function typeClass() {\n      return this.type && !this.iconClass ? 'el-message__icon el-icon-' + src_mainvue_type_script_lang_js_typeMap[this.type] : '';\n    },\n    positionStyle: function positionStyle() {\n      return {\n        'top': this.verticalOffset + 'px'\n      };\n    }\n  },\n\n  watch: {\n    closed: function closed(newVal) {\n      if (newVal) {\n        this.visible = false;\n      }\n    }\n  },\n\n  methods: {\n    handleAfterLeave: function handleAfterLeave() {\n      this.$destroy(true);\n      this.$el.parentNode.removeChild(this.$el);\n    },\n    close: function close() {\n      this.closed = true;\n      if (typeof this.onClose === 'function') {\n        this.onClose(this);\n      }\n    },\n    clearTimer: function clearTimer() {\n      clearTimeout(this.timer);\n    },\n    startTimer: function startTimer() {\n      var _this = this;\n\n      if (this.duration > 0) {\n        this.timer = setTimeout(function () {\n          if (!_this.closed) {\n            _this.close();\n          }\n        }, this.duration);\n      }\n    },\n    keydown: function keydown(e) {\n      if (e.keyCode === 27) {\n        // esc关闭消息\n        if (!this.closed) {\n          this.close();\n        }\n      }\n    }\n  },\n  mounted: function mounted() {\n    this.startTimer();\n    document.addEventListener('keydown', this.keydown);\n  },\n  beforeDestroy: function beforeDestroy() {\n    document.removeEventListener('keydown', this.keydown);\n  }\n});\n// CONCATENATED MODULE: ./packages/message/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_message_src_mainvue_type_script_lang_js_ = (message_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/message/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar message_src_main_component = normalizeComponent(\n  packages_message_src_mainvue_type_script_lang_js_,\n  mainvue_type_template_id_455b9f60_render,\n  mainvue_type_template_id_455b9f60_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var message_src_main_api; }\nmessage_src_main_component.options.__file = \"packages/message/src/main.vue\"\n/* harmony default export */ var message_src_main = (message_src_main_component.exports);\n// EXTERNAL MODULE: external \"element-ui/lib/utils/types\"\nvar types_ = __nested_webpack_require_8926__(16);\n\n// CONCATENATED MODULE: ./packages/message/src/main.js\nvar main_extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\n\n\n\n\n\nvar MessageConstructor = external_vue_default.a.extend(message_src_main);\n\nvar message_src_main_instance = void 0;\nvar main_instances = [];\nvar main_seed = 1;\n\nvar main_Message = function Message(options) {\n  if (external_vue_default.a.prototype.$isServer) return;\n  options = options || {};\n  if (typeof options === 'string') {\n    options = {\n      message: options\n    };\n  }\n  var userOnClose = options.onClose;\n  var id = 'message_' + main_seed++;\n\n  options.onClose = function () {\n    Message.close(id, userOnClose);\n  };\n  message_src_main_instance = new MessageConstructor({\n    data: options\n  });\n  message_src_main_instance.id = id;\n  if (Object(vdom_[\"isVNode\"])(message_src_main_instance.message)) {\n    message_src_main_instance.$slots.default = [message_src_main_instance.message];\n    message_src_main_instance.message = null;\n  }\n  message_src_main_instance.$mount();\n  document.body.appendChild(message_src_main_instance.$el);\n  var verticalOffset = options.offset || 20;\n  main_instances.forEach(function (item) {\n    verticalOffset += item.$el.offsetHeight + 16;\n  });\n  message_src_main_instance.verticalOffset = verticalOffset;\n  message_src_main_instance.visible = true;\n  message_src_main_instance.$el.style.zIndex = popup_[\"PopupManager\"].nextZIndex();\n  main_instances.push(message_src_main_instance);\n  return message_src_main_instance;\n};\n\n['success', 'warning', 'info', 'error'].forEach(function (type) {\n  main_Message[type] = function (options) {\n    if (Object(types_[\"isObject\"])(options) && !Object(vdom_[\"isVNode\"])(options)) {\n      return main_Message(main_extends({}, options, {\n        type: type\n      }));\n    }\n    return main_Message({\n      type: type,\n      message: options\n    });\n  };\n});\n\nmain_Message.close = function (id, userOnClose) {\n  var len = main_instances.length;\n  var index = -1;\n  var removedHeight = void 0;\n  for (var i = 0; i < len; i++) {\n    if (id === main_instances[i].id) {\n      removedHeight = main_instances[i].$el.offsetHeight;\n      index = i;\n      if (typeof userOnClose === 'function') {\n        userOnClose(main_instances[i]);\n      }\n      main_instances.splice(i, 1);\n      break;\n    }\n  }\n  if (len <= 1 || index === -1 || index > main_instances.length - 1) return;\n  for (var _i = index; _i < len - 1; _i++) {\n    var dom = main_instances[_i].$el;\n    dom.style['top'] = parseInt(dom.style['top'], 10) - removedHeight - 16 + 'px';\n  }\n};\n\nmain_Message.closeAll = function () {\n  for (var i = main_instances.length - 1; i >= 0; i--) {\n    main_instances[i].close();\n  }\n};\n\n/* harmony default export */ var packages_message_src_main = (main_Message);\n// CONCATENATED MODULE: ./packages/message/index.js\n\n/* harmony default export */ var packages_message = (packages_message_src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/badge/src/main.vue?vue&type=template&id=7ccb6598&\nvar mainvue_type_template_id_7ccb6598_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    { staticClass: \"el-badge\" },\n    [\n      _vm._t(\"default\"),\n      _c(\"transition\", { attrs: { name: \"el-zoom-in-center\" } }, [\n        _c(\"sup\", {\n          directives: [\n            {\n              name: \"show\",\n              rawName: \"v-show\",\n              value:\n                !_vm.hidden && (_vm.content || _vm.content === 0 || _vm.isDot),\n              expression: \"!hidden && (content || content === 0 || isDot)\"\n            }\n          ],\n          staticClass: \"el-badge__content\",\n          class: [\n            _vm.type ? \"el-badge__content--\" + _vm.type : null,\n            {\n              \"is-fixed\": _vm.$slots.default,\n              \"is-dot\": _vm.isDot\n            }\n          ],\n          domProps: { textContent: _vm._s(_vm.content) }\n        })\n      ])\n    ],\n    2\n  )\n}\nvar mainvue_type_template_id_7ccb6598_staticRenderFns = []\nmainvue_type_template_id_7ccb6598_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/badge/src/main.vue?vue&type=template&id=7ccb6598&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/badge/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ var badge_src_mainvue_type_script_lang_js_ = ({\n  name: 'ElBadge',\n\n  props: {\n    value: [String, Number],\n    max: Number,\n    isDot: Boolean,\n    hidden: Boolean,\n    type: {\n      type: String,\n      validator: function validator(val) {\n        return ['primary', 'success', 'warning', 'info', 'danger'].indexOf(val) > -1;\n      }\n    }\n  },\n\n  computed: {\n    content: function content() {\n      if (this.isDot) return;\n\n      var value = this.value;\n      var max = this.max;\n\n      if (typeof value === 'number' && typeof max === 'number') {\n        return max < value ? max + '+' : value;\n      }\n\n      return value;\n    }\n  }\n});\n// CONCATENATED MODULE: ./packages/badge/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_badge_src_mainvue_type_script_lang_js_ = (badge_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/badge/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar badge_src_main_component = normalizeComponent(\n  packages_badge_src_mainvue_type_script_lang_js_,\n  mainvue_type_template_id_7ccb6598_render,\n  mainvue_type_template_id_7ccb6598_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var badge_src_main_api; }\nbadge_src_main_component.options.__file = \"packages/badge/src/main.vue\"\n/* harmony default export */ var badge_src_main = (badge_src_main_component.exports);\n// CONCATENATED MODULE: ./packages/badge/index.js\n\n\n/* istanbul ignore next */\nbadge_src_main.install = function (Vue) {\n  Vue.component(badge_src_main.name, badge_src_main);\n};\n\n/* harmony default export */ var badge = (badge_src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/card/src/main.vue?vue&type=template&id=59a4a40f&\nvar mainvue_type_template_id_59a4a40f_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    {\n      staticClass: \"el-card\",\n      class: _vm.shadow ? \"is-\" + _vm.shadow + \"-shadow\" : \"is-always-shadow\"\n    },\n    [\n      _vm.$slots.header || _vm.header\n        ? _c(\n            \"div\",\n            { staticClass: \"el-card__header\" },\n            [_vm._t(\"header\", [_vm._v(_vm._s(_vm.header))])],\n            2\n          )\n        : _vm._e(),\n      _c(\n        \"div\",\n        { staticClass: \"el-card__body\", style: _vm.bodyStyle },\n        [_vm._t(\"default\")],\n        2\n      )\n    ]\n  )\n}\nvar mainvue_type_template_id_59a4a40f_staticRenderFns = []\nmainvue_type_template_id_59a4a40f_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/card/src/main.vue?vue&type=template&id=59a4a40f&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/card/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ var card_src_mainvue_type_script_lang_js_ = ({\n  name: 'ElCard',\n  props: {\n    header: {},\n    bodyStyle: {},\n    shadow: {\n      type: String\n    }\n  }\n});\n// CONCATENATED MODULE: ./packages/card/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_card_src_mainvue_type_script_lang_js_ = (card_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/card/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar card_src_main_component = normalizeComponent(\n  packages_card_src_mainvue_type_script_lang_js_,\n  mainvue_type_template_id_59a4a40f_render,\n  mainvue_type_template_id_59a4a40f_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var card_src_main_api; }\ncard_src_main_component.options.__file = \"packages/card/src/main.vue\"\n/* harmony default export */ var card_src_main = (card_src_main_component.exports);\n// CONCATENATED MODULE: ./packages/card/index.js\n\n\n/* istanbul ignore next */\ncard_src_main.install = function (Vue) {\n  Vue.component(card_src_main.name, card_src_main);\n};\n\n/* harmony default export */ var card = (card_src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/rate/src/main.vue?vue&type=template&id=ada57782&\nvar mainvue_type_template_id_ada57782_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    {\n      staticClass: \"el-rate\",\n      attrs: {\n        role: \"slider\",\n        \"aria-valuenow\": _vm.currentValue,\n        \"aria-valuetext\": _vm.text,\n        \"aria-valuemin\": \"0\",\n        \"aria-valuemax\": _vm.max,\n        tabindex: \"0\"\n      },\n      on: { keydown: _vm.handleKey }\n    },\n    [\n      _vm._l(_vm.max, function(item, key) {\n        return _c(\n          \"span\",\n          {\n            key: key,\n            staticClass: \"el-rate__item\",\n            style: { cursor: _vm.rateDisabled ? \"auto\" : \"pointer\" },\n            on: {\n              mousemove: function($event) {\n                _vm.setCurrentValue(item, $event)\n              },\n              mouseleave: _vm.resetCurrentValue,\n              click: function($event) {\n                _vm.selectValue(item)\n              }\n            }\n          },\n          [\n            _c(\n              \"i\",\n              {\n                staticClass: \"el-rate__icon\",\n                class: [\n                  _vm.classes[item - 1],\n                  { hover: _vm.hoverIndex === item }\n                ],\n                style: _vm.getIconStyle(item)\n              },\n              [\n                _vm.showDecimalIcon(item)\n                  ? _c(\"i\", {\n                      staticClass: \"el-rate__decimal\",\n                      class: _vm.decimalIconClass,\n                      style: _vm.decimalStyle\n                    })\n                  : _vm._e()\n              ]\n            )\n          ]\n        )\n      }),\n      _vm.showText || _vm.showScore\n        ? _c(\n            \"span\",\n            { staticClass: \"el-rate__text\", style: { color: _vm.textColor } },\n            [_vm._v(_vm._s(_vm.text))]\n          )\n        : _vm._e()\n    ],\n    2\n  )\n}\nvar mainvue_type_template_id_ada57782_staticRenderFns = []\nmainvue_type_template_id_ada57782_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/rate/src/main.vue?vue&type=template&id=ada57782&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/rate/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n/* harmony default export */ var rate_src_mainvue_type_script_lang_js_ = ({\n  name: 'ElRate',\n\n  mixins: [migrating_default.a],\n\n  inject: {\n    elForm: {\n      default: ''\n    }\n  },\n\n  data: function data() {\n    return {\n      pointerAtLeftHalf: true,\n      currentValue: this.value,\n      hoverIndex: -1\n    };\n  },\n\n\n  props: {\n    value: {\n      type: Number,\n      default: 0\n    },\n    lowThreshold: {\n      type: Number,\n      default: 2\n    },\n    highThreshold: {\n      type: Number,\n      default: 4\n    },\n    max: {\n      type: Number,\n      default: 5\n    },\n    colors: {\n      type: [Array, Object],\n      default: function _default() {\n        return ['#F7BA2A', '#F7BA2A', '#F7BA2A'];\n      }\n    },\n    voidColor: {\n      type: String,\n      default: '#C6D1DE'\n    },\n    disabledVoidColor: {\n      type: String,\n      default: '#EFF2F7'\n    },\n    iconClasses: {\n      type: [Array, Object],\n      default: function _default() {\n        return ['el-icon-star-on', 'el-icon-star-on', 'el-icon-star-on'];\n      }\n    },\n    voidIconClass: {\n      type: String,\n      default: 'el-icon-star-off'\n    },\n    disabledVoidIconClass: {\n      type: String,\n      default: 'el-icon-star-on'\n    },\n    disabled: {\n      type: Boolean,\n      default: false\n    },\n    allowHalf: {\n      type: Boolean,\n      default: false\n    },\n    showText: {\n      type: Boolean,\n      default: false\n    },\n    showScore: {\n      type: Boolean,\n      default: false\n    },\n    textColor: {\n      type: String,\n      default: '#1f2d3d'\n    },\n    texts: {\n      type: Array,\n      default: function _default() {\n        return ['极差', '失望', '一般', '满意', '惊喜'];\n      }\n    },\n    scoreTemplate: {\n      type: String,\n      default: '{value}'\n    }\n  },\n\n  computed: {\n    text: function text() {\n      var result = '';\n      if (this.showScore) {\n        result = this.scoreTemplate.replace(/\\{\\s*value\\s*\\}/, this.rateDisabled ? this.value : this.currentValue);\n      } else if (this.showText) {\n        result = this.texts[Math.ceil(this.currentValue) - 1];\n      }\n      return result;\n    },\n    decimalStyle: function decimalStyle() {\n      var width = '';\n      if (this.rateDisabled) {\n        width = this.valueDecimal + '%';\n      } else if (this.allowHalf) {\n        width = '50%';\n      }\n      return {\n        color: this.activeColor,\n        width: width\n      };\n    },\n    valueDecimal: function valueDecimal() {\n      return this.value * 100 - Math.floor(this.value) * 100;\n    },\n    classMap: function classMap() {\n      var _ref;\n\n      return Array.isArray(this.iconClasses) ? (_ref = {}, _ref[this.lowThreshold] = this.iconClasses[0], _ref[this.highThreshold] = { value: this.iconClasses[1], excluded: true }, _ref[this.max] = this.iconClasses[2], _ref) : this.iconClasses;\n    },\n    decimalIconClass: function decimalIconClass() {\n      return this.getValueFromMap(this.value, this.classMap);\n    },\n    voidClass: function voidClass() {\n      return this.rateDisabled ? this.disabledVoidIconClass : this.voidIconClass;\n    },\n    activeClass: function activeClass() {\n      return this.getValueFromMap(this.currentValue, this.classMap);\n    },\n    colorMap: function colorMap() {\n      var _ref2;\n\n      return Array.isArray(this.colors) ? (_ref2 = {}, _ref2[this.lowThreshold] = this.colors[0], _ref2[this.highThreshold] = { value: this.colors[1], excluded: true }, _ref2[this.max] = this.colors[2], _ref2) : this.colors;\n    },\n    activeColor: function activeColor() {\n      return this.getValueFromMap(this.currentValue, this.colorMap);\n    },\n    classes: function classes() {\n      var result = [];\n      var i = 0;\n      var threshold = this.currentValue;\n      if (this.allowHalf && this.currentValue !== Math.floor(this.currentValue)) {\n        threshold--;\n      }\n      for (; i < threshold; i++) {\n        result.push(this.activeClass);\n      }\n      for (; i < this.max; i++) {\n        result.push(this.voidClass);\n      }\n      return result;\n    },\n    rateDisabled: function rateDisabled() {\n      return this.disabled || (this.elForm || {}).disabled;\n    }\n  },\n\n  watch: {\n    value: function value(val) {\n      this.currentValue = val;\n      this.pointerAtLeftHalf = this.value !== Math.floor(this.value);\n    }\n  },\n\n  methods: {\n    getMigratingConfig: function getMigratingConfig() {\n      return {\n        props: {\n          'text-template': 'text-template is renamed to score-template.'\n        }\n      };\n    },\n    getValueFromMap: function getValueFromMap(value, map) {\n      var matchedKeys = Object.keys(map).filter(function (key) {\n        var val = map[key];\n        var excluded = Object(types_[\"isObject\"])(val) ? val.excluded : false;\n        return excluded ? value < key : value <= key;\n      }).sort(function (a, b) {\n        return a - b;\n      });\n      var matchedValue = map[matchedKeys[0]];\n      return Object(types_[\"isObject\"])(matchedValue) ? matchedValue.value : matchedValue || '';\n    },\n    showDecimalIcon: function showDecimalIcon(item) {\n      var showWhenDisabled = this.rateDisabled && this.valueDecimal > 0 && item - 1 < this.value && item > this.value;\n      /* istanbul ignore next */\n      var showWhenAllowHalf = this.allowHalf && this.pointerAtLeftHalf && item - 0.5 <= this.currentValue && item > this.currentValue;\n      return showWhenDisabled || showWhenAllowHalf;\n    },\n    getIconStyle: function getIconStyle(item) {\n      var voidColor = this.rateDisabled ? this.disabledVoidColor : this.voidColor;\n      return {\n        color: item <= this.currentValue ? this.activeColor : voidColor\n      };\n    },\n    selectValue: function selectValue(value) {\n      if (this.rateDisabled) {\n        return;\n      }\n      if (this.allowHalf && this.pointerAtLeftHalf) {\n        this.$emit('input', this.currentValue);\n        this.$emit('change', this.currentValue);\n      } else {\n        this.$emit('input', value);\n        this.$emit('change', value);\n      }\n    },\n    handleKey: function handleKey(e) {\n      if (this.rateDisabled) {\n        return;\n      }\n      var currentValue = this.currentValue;\n      var keyCode = e.keyCode;\n      if (keyCode === 38 || keyCode === 39) {\n        // left / down\n        if (this.allowHalf) {\n          currentValue += 0.5;\n        } else {\n          currentValue += 1;\n        }\n        e.stopPropagation();\n        e.preventDefault();\n      } else if (keyCode === 37 || keyCode === 40) {\n        if (this.allowHalf) {\n          currentValue -= 0.5;\n        } else {\n          currentValue -= 1;\n        }\n        e.stopPropagation();\n        e.preventDefault();\n      }\n      currentValue = currentValue < 0 ? 0 : currentValue;\n      currentValue = currentValue > this.max ? this.max : currentValue;\n\n      this.$emit('input', currentValue);\n      this.$emit('change', currentValue);\n    },\n    setCurrentValue: function setCurrentValue(value, event) {\n      if (this.rateDisabled) {\n        return;\n      }\n      /* istanbul ignore if */\n      if (this.allowHalf) {\n        var target = event.target;\n        if (Object(dom_[\"hasClass\"])(target, 'el-rate__item')) {\n          target = target.querySelector('.el-rate__icon');\n        }\n        if (Object(dom_[\"hasClass\"])(target, 'el-rate__decimal')) {\n          target = target.parentNode;\n        }\n        this.pointerAtLeftHalf = event.offsetX * 2 <= target.clientWidth;\n        this.currentValue = this.pointerAtLeftHalf ? value - 0.5 : value;\n      } else {\n        this.currentValue = value;\n      }\n      this.hoverIndex = value;\n    },\n    resetCurrentValue: function resetCurrentValue() {\n      if (this.rateDisabled) {\n        return;\n      }\n      if (this.allowHalf) {\n        this.pointerAtLeftHalf = this.value !== Math.floor(this.value);\n      }\n      this.currentValue = this.value;\n      this.hoverIndex = -1;\n    }\n  },\n\n  created: function created() {\n    if (!this.value) {\n      this.$emit('input', 0);\n    }\n  }\n});\n// CONCATENATED MODULE: ./packages/rate/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_rate_src_mainvue_type_script_lang_js_ = (rate_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/rate/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar rate_src_main_component = normalizeComponent(\n  packages_rate_src_mainvue_type_script_lang_js_,\n  mainvue_type_template_id_ada57782_render,\n  mainvue_type_template_id_ada57782_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var rate_src_main_api; }\nrate_src_main_component.options.__file = \"packages/rate/src/main.vue\"\n/* harmony default export */ var rate_src_main = (rate_src_main_component.exports);\n// CONCATENATED MODULE: ./packages/rate/index.js\n\n\n/* istanbul ignore next */\nrate_src_main.install = function (Vue) {\n  Vue.component(rate_src_main.name, rate_src_main);\n};\n\n/* harmony default export */ var packages_rate = (rate_src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/steps/src/steps.vue?vue&type=template&id=3c6b6dc0&\nvar stepsvue_type_template_id_3c6b6dc0_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    {\n      staticClass: \"el-steps\",\n      class: [\n        !_vm.simple && \"el-steps--\" + _vm.direction,\n        _vm.simple && \"el-steps--simple\"\n      ]\n    },\n    [_vm._t(\"default\")],\n    2\n  )\n}\nvar stepsvue_type_template_id_3c6b6dc0_staticRenderFns = []\nstepsvue_type_template_id_3c6b6dc0_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/steps/src/steps.vue?vue&type=template&id=3c6b6dc0&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/steps/src/steps.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n/* harmony default export */ var stepsvue_type_script_lang_js_ = ({\n  name: 'ElSteps',\n\n  mixins: [migrating_default.a],\n\n  props: {\n    space: [Number, String],\n    active: Number,\n    direction: {\n      type: String,\n      default: 'horizontal'\n    },\n    alignCenter: Boolean,\n    simple: Boolean,\n    finishStatus: {\n      type: String,\n      default: 'finish'\n    },\n    processStatus: {\n      type: String,\n      default: 'process'\n    }\n  },\n\n  data: function data() {\n    return {\n      steps: [],\n      stepOffset: 0\n    };\n  },\n\n\n  methods: {\n    getMigratingConfig: function getMigratingConfig() {\n      return {\n        props: {\n          'center': 'center is removed.'\n        }\n      };\n    }\n  },\n\n  watch: {\n    active: function active(newVal, oldVal) {\n      this.$emit('change', newVal, oldVal);\n    },\n    steps: function steps(_steps) {\n      _steps.forEach(function (child, index) {\n        child.index = index;\n      });\n    }\n  }\n});\n// CONCATENATED MODULE: ./packages/steps/src/steps.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_stepsvue_type_script_lang_js_ = (stepsvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/steps/src/steps.vue\n\n\n\n\n\n/* normalize component */\n\nvar steps_component = normalizeComponent(\n  src_stepsvue_type_script_lang_js_,\n  stepsvue_type_template_id_3c6b6dc0_render,\n  stepsvue_type_template_id_3c6b6dc0_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var steps_api; }\nsteps_component.options.__file = \"packages/steps/src/steps.vue\"\n/* harmony default export */ var steps = (steps_component.exports);\n// CONCATENATED MODULE: ./packages/steps/index.js\n\n\n/* istanbul ignore next */\nsteps.install = function (Vue) {\n  Vue.component(steps.name, steps);\n};\n\n/* harmony default export */ var packages_steps = (steps);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/steps/src/step.vue?vue&type=template&id=f414a87a&\nvar stepvue_type_template_id_f414a87a_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    {\n      staticClass: \"el-step\",\n      class: [\n        !_vm.isSimple && \"is-\" + _vm.$parent.direction,\n        _vm.isSimple && \"is-simple\",\n        _vm.isLast && !_vm.space && !_vm.isCenter && \"is-flex\",\n        _vm.isCenter && !_vm.isVertical && !_vm.isSimple && \"is-center\"\n      ],\n      style: _vm.style\n    },\n    [\n      _c(\n        \"div\",\n        { staticClass: \"el-step__head\", class: \"is-\" + _vm.currentStatus },\n        [\n          _c(\n            \"div\",\n            {\n              staticClass: \"el-step__line\",\n              style: _vm.isLast\n                ? \"\"\n                : { marginRight: _vm.$parent.stepOffset + \"px\" }\n            },\n            [\n              _c(\"i\", {\n                staticClass: \"el-step__line-inner\",\n                style: _vm.lineStyle\n              })\n            ]\n          ),\n          _c(\n            \"div\",\n            {\n              staticClass: \"el-step__icon\",\n              class: \"is-\" + (_vm.icon ? \"icon\" : \"text\")\n            },\n            [\n              _vm.currentStatus !== \"success\" && _vm.currentStatus !== \"error\"\n                ? _vm._t(\"icon\", [\n                    _vm.icon\n                      ? _c(\"i\", {\n                          staticClass: \"el-step__icon-inner\",\n                          class: [_vm.icon]\n                        })\n                      : _vm._e(),\n                    !_vm.icon && !_vm.isSimple\n                      ? _c(\"div\", { staticClass: \"el-step__icon-inner\" }, [\n                          _vm._v(_vm._s(_vm.index + 1))\n                        ])\n                      : _vm._e()\n                  ])\n                : _c(\"i\", {\n                    staticClass: \"el-step__icon-inner is-status\",\n                    class: [\n                      \"el-icon-\" +\n                        (_vm.currentStatus === \"success\" ? \"check\" : \"close\")\n                    ]\n                  })\n            ],\n            2\n          )\n        ]\n      ),\n      _c(\"div\", { staticClass: \"el-step__main\" }, [\n        _c(\n          \"div\",\n          {\n            ref: \"title\",\n            staticClass: \"el-step__title\",\n            class: [\"is-\" + _vm.currentStatus]\n          },\n          [_vm._t(\"title\", [_vm._v(_vm._s(_vm.title))])],\n          2\n        ),\n        _vm.isSimple\n          ? _c(\"div\", { staticClass: \"el-step__arrow\" })\n          : _c(\n              \"div\",\n              {\n                staticClass: \"el-step__description\",\n                class: [\"is-\" + _vm.currentStatus]\n              },\n              [_vm._t(\"description\", [_vm._v(_vm._s(_vm.description))])],\n              2\n            )\n      ])\n    ]\n  )\n}\nvar stepvue_type_template_id_f414a87a_staticRenderFns = []\nstepvue_type_template_id_f414a87a_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/steps/src/step.vue?vue&type=template&id=f414a87a&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/steps/src/step.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ var stepvue_type_script_lang_js_ = ({\n  name: 'ElStep',\n\n  props: {\n    title: String,\n    icon: String,\n    description: String,\n    status: String\n  },\n\n  data: function data() {\n    return {\n      index: -1,\n      lineStyle: {},\n      internalStatus: ''\n    };\n  },\n  beforeCreate: function beforeCreate() {\n    this.$parent.steps.push(this);\n  },\n  beforeDestroy: function beforeDestroy() {\n    var steps = this.$parent.steps;\n    var index = steps.indexOf(this);\n    if (index >= 0) {\n      steps.splice(index, 1);\n    }\n  },\n\n\n  computed: {\n    currentStatus: function currentStatus() {\n      return this.status || this.internalStatus;\n    },\n    prevStatus: function prevStatus() {\n      var prevStep = this.$parent.steps[this.index - 1];\n      return prevStep ? prevStep.currentStatus : 'wait';\n    },\n    isCenter: function isCenter() {\n      return this.$parent.alignCenter;\n    },\n    isVertical: function isVertical() {\n      return this.$parent.direction === 'vertical';\n    },\n    isSimple: function isSimple() {\n      return this.$parent.simple;\n    },\n    isLast: function isLast() {\n      var parent = this.$parent;\n      return parent.steps[parent.steps.length - 1] === this;\n    },\n    stepsCount: function stepsCount() {\n      return this.$parent.steps.length;\n    },\n    space: function space() {\n      var isSimple = this.isSimple,\n          space = this.$parent.space;\n\n      return isSimple ? '' : space;\n    },\n\n    style: function style() {\n      var style = {};\n      var parent = this.$parent;\n      var len = parent.steps.length;\n\n      var space = typeof this.space === 'number' ? this.space + 'px' : this.space ? this.space : 100 / (len - (this.isCenter ? 0 : 1)) + '%';\n      style.flexBasis = space;\n      if (this.isVertical) return style;\n      if (this.isLast) {\n        style.maxWidth = 100 / this.stepsCount + '%';\n      } else {\n        style.marginRight = -this.$parent.stepOffset + 'px';\n      }\n\n      return style;\n    }\n  },\n\n  methods: {\n    updateStatus: function updateStatus(val) {\n      var prevChild = this.$parent.$children[this.index - 1];\n\n      if (val > this.index) {\n        this.internalStatus = this.$parent.finishStatus;\n      } else if (val === this.index && this.prevStatus !== 'error') {\n        this.internalStatus = this.$parent.processStatus;\n      } else {\n        this.internalStatus = 'wait';\n      }\n\n      if (prevChild) prevChild.calcProgress(this.internalStatus);\n    },\n    calcProgress: function calcProgress(status) {\n      var step = 100;\n      var style = {};\n\n      style.transitionDelay = 150 * this.index + 'ms';\n      if (status === this.$parent.processStatus) {\n        step = this.currentStatus !== 'error' ? 0 : 0;\n      } else if (status === 'wait') {\n        step = 0;\n        style.transitionDelay = -150 * this.index + 'ms';\n      }\n\n      style.borderWidth = step && !this.isSimple ? '1px' : 0;\n      this.$parent.direction === 'vertical' ? style.height = step + '%' : style.width = step + '%';\n\n      this.lineStyle = style;\n    }\n  },\n\n  mounted: function mounted() {\n    var _this = this;\n\n    var unwatch = this.$watch('index', function (val) {\n      _this.$watch('$parent.active', _this.updateStatus, { immediate: true });\n      _this.$watch('$parent.processStatus', function () {\n        var activeIndex = _this.$parent.active;\n        _this.updateStatus(activeIndex);\n      }, { immediate: true });\n      unwatch();\n    });\n  }\n});\n// CONCATENATED MODULE: ./packages/steps/src/step.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_stepvue_type_script_lang_js_ = (stepvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/steps/src/step.vue\n\n\n\n\n\n/* normalize component */\n\nvar step_component = normalizeComponent(\n  src_stepvue_type_script_lang_js_,\n  stepvue_type_template_id_f414a87a_render,\n  stepvue_type_template_id_f414a87a_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var step_api; }\nstep_component.options.__file = \"packages/steps/src/step.vue\"\n/* harmony default export */ var step = (step_component.exports);\n// CONCATENATED MODULE: ./packages/step/index.js\n\n\n/* istanbul ignore next */\nstep.install = function (Vue) {\n  Vue.component(step.name, step);\n};\n\n/* harmony default export */ var packages_step = (step);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/carousel/src/main.vue?vue&type=template&id=5d5d1482&\nvar mainvue_type_template_id_5d5d1482_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    {\n      class: _vm.carouselClasses,\n      on: {\n        mouseenter: function($event) {\n          $event.stopPropagation()\n          return _vm.handleMouseEnter($event)\n        },\n        mouseleave: function($event) {\n          $event.stopPropagation()\n          return _vm.handleMouseLeave($event)\n        }\n      }\n    },\n    [\n      _c(\n        \"div\",\n        {\n          staticClass: \"el-carousel__container\",\n          style: { height: _vm.height }\n        },\n        [\n          _vm.arrowDisplay\n            ? _c(\"transition\", { attrs: { name: \"carousel-arrow-left\" } }, [\n                _c(\n                  \"button\",\n                  {\n                    directives: [\n                      {\n                        name: \"show\",\n                        rawName: \"v-show\",\n                        value:\n                          (_vm.arrow === \"always\" || _vm.hover) &&\n                          (_vm.loop || _vm.activeIndex > 0),\n                        expression:\n                          \"(arrow === 'always' || hover) && (loop || activeIndex > 0)\"\n                      }\n                    ],\n                    staticClass: \"el-carousel__arrow el-carousel__arrow--left\",\n                    attrs: { type: \"button\" },\n                    on: {\n                      mouseenter: function($event) {\n                        _vm.handleButtonEnter(\"left\")\n                      },\n                      mouseleave: _vm.handleButtonLeave,\n                      click: function($event) {\n                        $event.stopPropagation()\n                        _vm.throttledArrowClick(_vm.activeIndex - 1)\n                      }\n                    }\n                  },\n                  [_c(\"i\", { staticClass: \"el-icon-arrow-left\" })]\n                )\n              ])\n            : _vm._e(),\n          _vm.arrowDisplay\n            ? _c(\"transition\", { attrs: { name: \"carousel-arrow-right\" } }, [\n                _c(\n                  \"button\",\n                  {\n                    directives: [\n                      {\n                        name: \"show\",\n                        rawName: \"v-show\",\n                        value:\n                          (_vm.arrow === \"always\" || _vm.hover) &&\n                          (_vm.loop || _vm.activeIndex < _vm.items.length - 1),\n                        expression:\n                          \"(arrow === 'always' || hover) && (loop || activeIndex < items.length - 1)\"\n                      }\n                    ],\n                    staticClass: \"el-carousel__arrow el-carousel__arrow--right\",\n                    attrs: { type: \"button\" },\n                    on: {\n                      mouseenter: function($event) {\n                        _vm.handleButtonEnter(\"right\")\n                      },\n                      mouseleave: _vm.handleButtonLeave,\n                      click: function($event) {\n                        $event.stopPropagation()\n                        _vm.throttledArrowClick(_vm.activeIndex + 1)\n                      }\n                    }\n                  },\n                  [_c(\"i\", { staticClass: \"el-icon-arrow-right\" })]\n                )\n              ])\n            : _vm._e(),\n          _vm._t(\"default\")\n        ],\n        2\n      ),\n      _vm.indicatorPosition !== \"none\"\n        ? _c(\n            \"ul\",\n            { class: _vm.indicatorsClasses },\n            _vm._l(_vm.items, function(item, index) {\n              return _c(\n                \"li\",\n                {\n                  key: index,\n                  class: [\n                    \"el-carousel__indicator\",\n                    \"el-carousel__indicator--\" + _vm.direction,\n                    { \"is-active\": index === _vm.activeIndex }\n                  ],\n                  on: {\n                    mouseenter: function($event) {\n                      _vm.throttledIndicatorHover(index)\n                    },\n                    click: function($event) {\n                      $event.stopPropagation()\n                      _vm.handleIndicatorClick(index)\n                    }\n                  }\n                },\n                [\n                  _c(\"button\", { staticClass: \"el-carousel__button\" }, [\n                    _vm.hasLabel\n                      ? _c(\"span\", [_vm._v(_vm._s(item.label))])\n                      : _vm._e()\n                  ])\n                ]\n              )\n            }),\n            0\n          )\n        : _vm._e()\n    ]\n  )\n}\nvar mainvue_type_template_id_5d5d1482_staticRenderFns = []\nmainvue_type_template_id_5d5d1482_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/carousel/src/main.vue?vue&type=template&id=5d5d1482&\n\n// EXTERNAL MODULE: external \"throttle-debounce/throttle\"\nvar throttle_ = __nested_webpack_require_8926__(25);\nvar throttle_default = /*#__PURE__*/__nested_webpack_require_8926__.n(throttle_);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/carousel/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n/* harmony default export */ var carousel_src_mainvue_type_script_lang_js_ = ({\n  name: 'ElCarousel',\n\n  props: {\n    initialIndex: {\n      type: Number,\n      default: 0\n    },\n    height: String,\n    trigger: {\n      type: String,\n      default: 'hover'\n    },\n    autoplay: {\n      type: Boolean,\n      default: true\n    },\n    interval: {\n      type: Number,\n      default: 3000\n    },\n    indicatorPosition: String,\n    indicator: {\n      type: Boolean,\n      default: true\n    },\n    arrow: {\n      type: String,\n      default: 'hover'\n    },\n    type: String,\n    loop: {\n      type: Boolean,\n      default: true\n    },\n    direction: {\n      type: String,\n      default: 'horizontal',\n      validator: function validator(val) {\n        return ['horizontal', 'vertical'].indexOf(val) !== -1;\n      }\n    }\n  },\n\n  data: function data() {\n    return {\n      items: [],\n      activeIndex: -1,\n      containerWidth: 0,\n      timer: null,\n      hover: false\n    };\n  },\n\n\n  computed: {\n    arrowDisplay: function arrowDisplay() {\n      return this.arrow !== 'never' && this.direction !== 'vertical';\n    },\n    hasLabel: function hasLabel() {\n      return this.items.some(function (item) {\n        return item.label.toString().length > 0;\n      });\n    },\n    carouselClasses: function carouselClasses() {\n      var classes = ['el-carousel', 'el-carousel--' + this.direction];\n      if (this.type === 'card') {\n        classes.push('el-carousel--card');\n      }\n      return classes;\n    },\n    indicatorsClasses: function indicatorsClasses() {\n      var classes = ['el-carousel__indicators', 'el-carousel__indicators--' + this.direction];\n      if (this.hasLabel) {\n        classes.push('el-carousel__indicators--labels');\n      }\n      if (this.indicatorPosition === 'outside' || this.type === 'card') {\n        classes.push('el-carousel__indicators--outside');\n      }\n      return classes;\n    }\n  },\n\n  watch: {\n    items: function items(val) {\n      if (val.length > 0) this.setActiveItem(this.initialIndex);\n    },\n    activeIndex: function activeIndex(val, oldVal) {\n      this.resetItemPosition(oldVal);\n      if (oldVal > -1) {\n        this.$emit('change', val, oldVal);\n      }\n    },\n    autoplay: function autoplay(val) {\n      val ? this.startTimer() : this.pauseTimer();\n    },\n    loop: function loop() {\n      this.setActiveItem(this.activeIndex);\n    },\n    interval: function interval() {\n      this.pauseTimer();\n      this.startTimer();\n    }\n  },\n\n  methods: {\n    handleMouseEnter: function handleMouseEnter() {\n      this.hover = true;\n      this.pauseTimer();\n    },\n    handleMouseLeave: function handleMouseLeave() {\n      this.hover = false;\n      this.startTimer();\n    },\n    itemInStage: function itemInStage(item, index) {\n      var length = this.items.length;\n      if (index === length - 1 && item.inStage && this.items[0].active || item.inStage && this.items[index + 1] && this.items[index + 1].active) {\n        return 'left';\n      } else if (index === 0 && item.inStage && this.items[length - 1].active || item.inStage && this.items[index - 1] && this.items[index - 1].active) {\n        return 'right';\n      }\n      return false;\n    },\n    handleButtonEnter: function handleButtonEnter(arrow) {\n      var _this = this;\n\n      if (this.direction === 'vertical') return;\n      this.items.forEach(function (item, index) {\n        if (arrow === _this.itemInStage(item, index)) {\n          item.hover = true;\n        }\n      });\n    },\n    handleButtonLeave: function handleButtonLeave() {\n      if (this.direction === 'vertical') return;\n      this.items.forEach(function (item) {\n        item.hover = false;\n      });\n    },\n    updateItems: function updateItems() {\n      this.items = this.$children.filter(function (child) {\n        return child.$options.name === 'ElCarouselItem';\n      });\n    },\n    resetItemPosition: function resetItemPosition(oldIndex) {\n      var _this2 = this;\n\n      this.items.forEach(function (item, index) {\n        item.translateItem(index, _this2.activeIndex, oldIndex);\n      });\n    },\n    playSlides: function playSlides() {\n      if (this.activeIndex < this.items.length - 1) {\n        this.activeIndex++;\n      } else if (this.loop) {\n        this.activeIndex = 0;\n      }\n    },\n    pauseTimer: function pauseTimer() {\n      if (this.timer) {\n        clearInterval(this.timer);\n        this.timer = null;\n      }\n    },\n    startTimer: function startTimer() {\n      if (this.interval <= 0 || !this.autoplay || this.timer) return;\n      this.timer = setInterval(this.playSlides, this.interval);\n    },\n    resetTimer: function resetTimer() {\n      this.pauseTimer();\n      this.startTimer();\n    },\n    setActiveItem: function setActiveItem(index) {\n      if (typeof index === 'string') {\n        var filteredItems = this.items.filter(function (item) {\n          return item.name === index;\n        });\n        if (filteredItems.length > 0) {\n          index = this.items.indexOf(filteredItems[0]);\n        }\n      }\n      index = Number(index);\n      if (isNaN(index) || index !== Math.floor(index)) {\n        console.warn('[Element Warn][Carousel]index must be an integer.');\n        return;\n      }\n      var length = this.items.length;\n      var oldIndex = this.activeIndex;\n      if (index < 0) {\n        this.activeIndex = this.loop ? length - 1 : 0;\n      } else if (index >= length) {\n        this.activeIndex = this.loop ? 0 : length - 1;\n      } else {\n        this.activeIndex = index;\n      }\n      if (oldIndex === this.activeIndex) {\n        this.resetItemPosition(oldIndex);\n      }\n      this.resetTimer();\n    },\n    prev: function prev() {\n      this.setActiveItem(this.activeIndex - 1);\n    },\n    next: function next() {\n      this.setActiveItem(this.activeIndex + 1);\n    },\n    handleIndicatorClick: function handleIndicatorClick(index) {\n      this.activeIndex = index;\n    },\n    handleIndicatorHover: function handleIndicatorHover(index) {\n      if (this.trigger === 'hover' && index !== this.activeIndex) {\n        this.activeIndex = index;\n      }\n    }\n  },\n\n  created: function created() {\n    var _this3 = this;\n\n    this.throttledArrowClick = throttle_default()(300, true, function (index) {\n      _this3.setActiveItem(index);\n    });\n    this.throttledIndicatorHover = throttle_default()(300, function (index) {\n      _this3.handleIndicatorHover(index);\n    });\n  },\n  mounted: function mounted() {\n    var _this4 = this;\n\n    this.updateItems();\n    this.$nextTick(function () {\n      Object(resize_event_[\"addResizeListener\"])(_this4.$el, _this4.resetItemPosition);\n      if (_this4.initialIndex < _this4.items.length && _this4.initialIndex >= 0) {\n        _this4.activeIndex = _this4.initialIndex;\n      }\n      _this4.startTimer();\n    });\n  },\n  beforeDestroy: function beforeDestroy() {\n    if (this.$el) Object(resize_event_[\"removeResizeListener\"])(this.$el, this.resetItemPosition);\n    this.pauseTimer();\n  }\n});\n// CONCATENATED MODULE: ./packages/carousel/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_carousel_src_mainvue_type_script_lang_js_ = (carousel_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/carousel/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar carousel_src_main_component = normalizeComponent(\n  packages_carousel_src_mainvue_type_script_lang_js_,\n  mainvue_type_template_id_5d5d1482_render,\n  mainvue_type_template_id_5d5d1482_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var carousel_src_main_api; }\ncarousel_src_main_component.options.__file = \"packages/carousel/src/main.vue\"\n/* harmony default export */ var carousel_src_main = (carousel_src_main_component.exports);\n// CONCATENATED MODULE: ./packages/carousel/index.js\n\n\n/* istanbul ignore next */\ncarousel_src_main.install = function (Vue) {\n  Vue.component(carousel_src_main.name, carousel_src_main);\n};\n\n/* harmony default export */ var carousel = (carousel_src_main);\n// CONCATENATED MODULE: ./packages/scrollbar/src/util.js\nvar BAR_MAP = {\n  vertical: {\n    offset: 'offsetHeight',\n    scroll: 'scrollTop',\n    scrollSize: 'scrollHeight',\n    size: 'height',\n    key: 'vertical',\n    axis: 'Y',\n    client: 'clientY',\n    direction: 'top'\n  },\n  horizontal: {\n    offset: 'offsetWidth',\n    scroll: 'scrollLeft',\n    scrollSize: 'scrollWidth',\n    size: 'width',\n    key: 'horizontal',\n    axis: 'X',\n    client: 'clientX',\n    direction: 'left'\n  }\n};\n\nfunction renderThumbStyle(_ref) {\n  var move = _ref.move,\n      size = _ref.size,\n      bar = _ref.bar;\n\n  var style = {};\n  var translate = 'translate' + bar.axis + '(' + move + '%)';\n\n  style[bar.size] = size;\n  style.transform = translate;\n  style.msTransform = translate;\n  style.webkitTransform = translate;\n\n  return style;\n};\n// CONCATENATED MODULE: ./packages/scrollbar/src/bar.js\n\n\n\n/* istanbul ignore next */\n/* harmony default export */ var src_bar = ({\n  name: 'Bar',\n\n  props: {\n    vertical: Boolean,\n    size: String,\n    move: Number\n  },\n\n  computed: {\n    bar: function bar() {\n      return BAR_MAP[this.vertical ? 'vertical' : 'horizontal'];\n    },\n    wrap: function wrap() {\n      return this.$parent.wrap;\n    }\n  },\n\n  render: function render(h) {\n    var size = this.size,\n        move = this.move,\n        bar = this.bar;\n\n\n    return h(\n      'div',\n      {\n        'class': ['el-scrollbar__bar', 'is-' + bar.key],\n        on: {\n          'mousedown': this.clickTrackHandler\n        }\n      },\n      [h('div', {\n        ref: 'thumb',\n        'class': 'el-scrollbar__thumb',\n        on: {\n          'mousedown': this.clickThumbHandler\n        },\n\n        style: renderThumbStyle({ size: size, move: move, bar: bar }) })]\n    );\n  },\n\n\n  methods: {\n    clickThumbHandler: function clickThumbHandler(e) {\n      // prevent click event of right button\n      if (e.ctrlKey || e.button === 2) {\n        return;\n      }\n      this.startDrag(e);\n      this[this.bar.axis] = e.currentTarget[this.bar.offset] - (e[this.bar.client] - e.currentTarget.getBoundingClientRect()[this.bar.direction]);\n    },\n    clickTrackHandler: function clickTrackHandler(e) {\n      var offset = Math.abs(e.target.getBoundingClientRect()[this.bar.direction] - e[this.bar.client]);\n      var thumbHalf = this.$refs.thumb[this.bar.offset] / 2;\n      var thumbPositionPercentage = (offset - thumbHalf) * 100 / this.$el[this.bar.offset];\n\n      this.wrap[this.bar.scroll] = thumbPositionPercentage * this.wrap[this.bar.scrollSize] / 100;\n    },\n    startDrag: function startDrag(e) {\n      e.stopImmediatePropagation();\n      this.cursorDown = true;\n\n      Object(dom_[\"on\"])(document, 'mousemove', this.mouseMoveDocumentHandler);\n      Object(dom_[\"on\"])(document, 'mouseup', this.mouseUpDocumentHandler);\n      document.onselectstart = function () {\n        return false;\n      };\n    },\n    mouseMoveDocumentHandler: function mouseMoveDocumentHandler(e) {\n      if (this.cursorDown === false) return;\n      var prevPage = this[this.bar.axis];\n\n      if (!prevPage) return;\n\n      var offset = (this.$el.getBoundingClientRect()[this.bar.direction] - e[this.bar.client]) * -1;\n      var thumbClickPosition = this.$refs.thumb[this.bar.offset] - prevPage;\n      var thumbPositionPercentage = (offset - thumbClickPosition) * 100 / this.$el[this.bar.offset];\n\n      this.wrap[this.bar.scroll] = thumbPositionPercentage * this.wrap[this.bar.scrollSize] / 100;\n    },\n    mouseUpDocumentHandler: function mouseUpDocumentHandler(e) {\n      this.cursorDown = false;\n      this[this.bar.axis] = 0;\n      Object(dom_[\"off\"])(document, 'mousemove', this.mouseMoveDocumentHandler);\n      document.onselectstart = null;\n    }\n  },\n\n  destroyed: function destroyed() {\n    Object(dom_[\"off\"])(document, 'mouseup', this.mouseUpDocumentHandler);\n  }\n});\n// CONCATENATED MODULE: ./packages/scrollbar/src/main.js\n// reference https://github.com/noeldelgado/gemini-scrollbar/blob/master/index.js\n\n\n\n\n\n\n/* istanbul ignore next */\n/* harmony default export */ var scrollbar_src_main = ({\n  name: 'ElScrollbar',\n\n  components: { Bar: src_bar },\n\n  props: {\n    native: Boolean,\n    wrapStyle: {},\n    wrapClass: {},\n    viewClass: {},\n    viewStyle: {},\n    noresize: Boolean, // 如果 container 尺寸不会发生变化,最好设置它可以优化性能\n    tag: {\n      type: String,\n      default: 'div'\n    }\n  },\n\n  data: function data() {\n    return {\n      sizeWidth: '0',\n      sizeHeight: '0',\n      moveX: 0,\n      moveY: 0\n    };\n  },\n\n\n  computed: {\n    wrap: function wrap() {\n      return this.$refs.wrap;\n    }\n  },\n\n  render: function render(h) {\n    var gutter = scrollbar_width_default()();\n    var style = this.wrapStyle;\n\n    if (gutter) {\n      var gutterWith = '-' + gutter + 'px';\n      var gutterStyle = 'margin-bottom: ' + gutterWith + '; margin-right: ' + gutterWith + ';';\n\n      if (Array.isArray(this.wrapStyle)) {\n        style = Object(util_[\"toObject\"])(this.wrapStyle);\n        style.marginRight = style.marginBottom = gutterWith;\n      } else if (typeof this.wrapStyle === 'string') {\n        style += gutterStyle;\n      } else {\n        style = gutterStyle;\n      }\n    }\n    var view = h(this.tag, {\n      class: ['el-scrollbar__view', this.viewClass],\n      style: this.viewStyle,\n      ref: 'resize'\n    }, this.$slots.default);\n    var wrap = h(\n      'div',\n      {\n        ref: 'wrap',\n        style: style,\n        on: {\n          'scroll': this.handleScroll\n        },\n\n        'class': [this.wrapClass, 'el-scrollbar__wrap', gutter ? '' : 'el-scrollbar__wrap--hidden-default'] },\n      [[view]]\n    );\n    var nodes = void 0;\n\n    if (!this.native) {\n      nodes = [wrap, h(src_bar, {\n        attrs: {\n          move: this.moveX,\n          size: this.sizeWidth }\n      }), h(src_bar, {\n        attrs: {\n          vertical: true,\n          move: this.moveY,\n          size: this.sizeHeight }\n      })];\n    } else {\n      nodes = [h(\n        'div',\n        {\n          ref: 'wrap',\n          'class': [this.wrapClass, 'el-scrollbar__wrap'],\n          style: style },\n        [[view]]\n      )];\n    }\n    return h('div', { class: 'el-scrollbar' }, nodes);\n  },\n\n\n  methods: {\n    handleScroll: function handleScroll() {\n      var wrap = this.wrap;\n\n      this.moveY = wrap.scrollTop * 100 / wrap.clientHeight;\n      this.moveX = wrap.scrollLeft * 100 / wrap.clientWidth;\n    },\n    update: function update() {\n      var heightPercentage = void 0,\n          widthPercentage = void 0;\n      var wrap = this.wrap;\n      if (!wrap) return;\n\n      heightPercentage = wrap.clientHeight * 100 / wrap.scrollHeight;\n      widthPercentage = wrap.clientWidth * 100 / wrap.scrollWidth;\n\n      this.sizeHeight = heightPercentage < 100 ? heightPercentage + '%' : '';\n      this.sizeWidth = widthPercentage < 100 ? widthPercentage + '%' : '';\n    }\n  },\n\n  mounted: function mounted() {\n    if (this.native) return;\n    this.$nextTick(this.update);\n    !this.noresize && Object(resize_event_[\"addResizeListener\"])(this.$refs.resize, this.update);\n  },\n  beforeDestroy: function beforeDestroy() {\n    if (this.native) return;\n    !this.noresize && Object(resize_event_[\"removeResizeListener\"])(this.$refs.resize, this.update);\n  }\n});\n// CONCATENATED MODULE: ./packages/scrollbar/index.js\n\n\n/* istanbul ignore next */\nscrollbar_src_main.install = function (Vue) {\n  Vue.component(scrollbar_src_main.name, scrollbar_src_main);\n};\n\n/* harmony default export */ var scrollbar = (scrollbar_src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/carousel/src/item.vue?vue&type=template&id=1801ae19&\nvar itemvue_type_template_id_1801ae19_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    {\n      directives: [\n        {\n          name: \"show\",\n          rawName: \"v-show\",\n          value: _vm.ready,\n          expression: \"ready\"\n        }\n      ],\n      staticClass: \"el-carousel__item\",\n      class: {\n        \"is-active\": _vm.active,\n        \"el-carousel__item--card\": _vm.$parent.type === \"card\",\n        \"is-in-stage\": _vm.inStage,\n        \"is-hover\": _vm.hover,\n        \"is-animating\": _vm.animating\n      },\n      style: _vm.itemStyle,\n      on: { click: _vm.handleItemClick }\n    },\n    [\n      _vm.$parent.type === \"card\"\n        ? _c(\"div\", {\n            directives: [\n              {\n                name: \"show\",\n                rawName: \"v-show\",\n                value: !_vm.active,\n                expression: \"!active\"\n              }\n            ],\n            staticClass: \"el-carousel__mask\"\n          })\n        : _vm._e(),\n      _vm._t(\"default\")\n    ],\n    2\n  )\n}\nvar itemvue_type_template_id_1801ae19_staticRenderFns = []\nitemvue_type_template_id_1801ae19_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/carousel/src/item.vue?vue&type=template&id=1801ae19&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/carousel/src/item.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\nvar CARD_SCALE = 0.83;\n/* harmony default export */ var itemvue_type_script_lang_js_ = ({\n  name: 'ElCarouselItem',\n\n  props: {\n    name: String,\n    label: {\n      type: [String, Number],\n      default: ''\n    }\n  },\n\n  data: function data() {\n    return {\n      hover: false,\n      translate: 0,\n      scale: 1,\n      active: false,\n      ready: false,\n      inStage: false,\n      animating: false\n    };\n  },\n\n\n  methods: {\n    processIndex: function processIndex(index, activeIndex, length) {\n      if (activeIndex === 0 && index === length - 1) {\n        return -1;\n      } else if (activeIndex === length - 1 && index === 0) {\n        return length;\n      } else if (index < activeIndex - 1 && activeIndex - index >= length / 2) {\n        return length + 1;\n      } else if (index > activeIndex + 1 && index - activeIndex >= length / 2) {\n        return -2;\n      }\n      return index;\n    },\n    calcCardTranslate: function calcCardTranslate(index, activeIndex) {\n      var parentWidth = this.$parent.$el.offsetWidth;\n      if (this.inStage) {\n        return parentWidth * ((2 - CARD_SCALE) * (index - activeIndex) + 1) / 4;\n      } else if (index < activeIndex) {\n        return -(1 + CARD_SCALE) * parentWidth / 4;\n      } else {\n        return (3 + CARD_SCALE) * parentWidth / 4;\n      }\n    },\n    calcTranslate: function calcTranslate(index, activeIndex, isVertical) {\n      var distance = this.$parent.$el[isVertical ? 'offsetHeight' : 'offsetWidth'];\n      return distance * (index - activeIndex);\n    },\n    translateItem: function translateItem(index, activeIndex, oldIndex) {\n      var parentType = this.$parent.type;\n      var parentDirection = this.parentDirection;\n      var length = this.$parent.items.length;\n      if (parentType !== 'card' && oldIndex !== undefined) {\n        this.animating = index === activeIndex || index === oldIndex;\n      }\n      if (index !== activeIndex && length > 2 && this.$parent.loop) {\n        index = this.processIndex(index, activeIndex, length);\n      }\n      if (parentType === 'card') {\n        if (parentDirection === 'vertical') {\n          console.warn('[Element Warn][Carousel]vertical direction is not supported in card mode');\n        }\n        this.inStage = Math.round(Math.abs(index - activeIndex)) <= 1;\n        this.active = index === activeIndex;\n        this.translate = this.calcCardTranslate(index, activeIndex);\n        this.scale = this.active ? 1 : CARD_SCALE;\n      } else {\n        this.active = index === activeIndex;\n        var isVertical = parentDirection === 'vertical';\n        this.translate = this.calcTranslate(index, activeIndex, isVertical);\n        this.scale = 1;\n      }\n      this.ready = true;\n    },\n    handleItemClick: function handleItemClick() {\n      var parent = this.$parent;\n      if (parent && parent.type === 'card') {\n        var index = parent.items.indexOf(this);\n        parent.setActiveItem(index);\n      }\n    }\n  },\n\n  computed: {\n    parentDirection: function parentDirection() {\n      return this.$parent.direction;\n    },\n    itemStyle: function itemStyle() {\n      var translateType = this.parentDirection === 'vertical' ? 'translateY' : 'translateX';\n      var value = translateType + '(' + this.translate + 'px) scale(' + this.scale + ')';\n      var style = {\n        transform: value\n      };\n      return Object(util_[\"autoprefixer\"])(style);\n    }\n  },\n\n  created: function created() {\n    this.$parent && this.$parent.updateItems();\n  },\n  destroyed: function destroyed() {\n    this.$parent && this.$parent.updateItems();\n  }\n});\n// CONCATENATED MODULE: ./packages/carousel/src/item.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_itemvue_type_script_lang_js_ = (itemvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/carousel/src/item.vue\n\n\n\n\n\n/* normalize component */\n\nvar item_component = normalizeComponent(\n  src_itemvue_type_script_lang_js_,\n  itemvue_type_template_id_1801ae19_render,\n  itemvue_type_template_id_1801ae19_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var item_api; }\nitem_component.options.__file = \"packages/carousel/src/item.vue\"\n/* harmony default export */ var src_item = (item_component.exports);\n// CONCATENATED MODULE: ./packages/carousel-item/index.js\n\n\n/* istanbul ignore next */\nsrc_item.install = function (Vue) {\n  Vue.component(src_item.name, src_item);\n};\n\n/* harmony default export */ var carousel_item = (src_item);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/collapse/src/collapse.vue?vue&type=template&id=461d57f4&\nvar collapsevue_type_template_id_461d57f4_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    {\n      staticClass: \"el-collapse\",\n      attrs: { role: \"tablist\", \"aria-multiselectable\": \"true\" }\n    },\n    [_vm._t(\"default\")],\n    2\n  )\n}\nvar collapsevue_type_template_id_461d57f4_staticRenderFns = []\ncollapsevue_type_template_id_461d57f4_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/collapse/src/collapse.vue?vue&type=template&id=461d57f4&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/collapse/src/collapse.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n\n/* harmony default export */ var collapsevue_type_script_lang_js_ = ({\n  name: 'ElCollapse',\n\n  componentName: 'ElCollapse',\n\n  props: {\n    accordion: Boolean,\n    value: {\n      type: [Array, String, Number],\n      default: function _default() {\n        return [];\n      }\n    }\n  },\n\n  data: function data() {\n    return {\n      activeNames: [].concat(this.value)\n    };\n  },\n  provide: function provide() {\n    return {\n      collapse: this\n    };\n  },\n\n\n  watch: {\n    value: function value(_value) {\n      this.activeNames = [].concat(_value);\n    }\n  },\n\n  methods: {\n    setActiveNames: function setActiveNames(activeNames) {\n      activeNames = [].concat(activeNames);\n      var value = this.accordion ? activeNames[0] : activeNames;\n      this.activeNames = activeNames;\n      this.$emit('input', value);\n      this.$emit('change', value);\n    },\n    handleItemClick: function handleItemClick(item) {\n      if (this.accordion) {\n        this.setActiveNames((this.activeNames[0] || this.activeNames[0] === 0) && this.activeNames[0] === item.name ? '' : item.name);\n      } else {\n        var activeNames = this.activeNames.slice(0);\n        var index = activeNames.indexOf(item.name);\n\n        if (index > -1) {\n          activeNames.splice(index, 1);\n        } else {\n          activeNames.push(item.name);\n        }\n        this.setActiveNames(activeNames);\n      }\n    }\n  },\n\n  created: function created() {\n    this.$on('item-click', this.handleItemClick);\n  }\n});\n// CONCATENATED MODULE: ./packages/collapse/src/collapse.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_collapsevue_type_script_lang_js_ = (collapsevue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/collapse/src/collapse.vue\n\n\n\n\n\n/* normalize component */\n\nvar collapse_component = normalizeComponent(\n  src_collapsevue_type_script_lang_js_,\n  collapsevue_type_template_id_461d57f4_render,\n  collapsevue_type_template_id_461d57f4_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var collapse_api; }\ncollapse_component.options.__file = \"packages/collapse/src/collapse.vue\"\n/* harmony default export */ var collapse = (collapse_component.exports);\n// CONCATENATED MODULE: ./packages/collapse/index.js\n\n\n/* istanbul ignore next */\ncollapse.install = function (Vue) {\n  Vue.component(collapse.name, collapse);\n};\n\n/* harmony default export */ var packages_collapse = (collapse);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/collapse/src/collapse-item.vue?vue&type=template&id=2d05faac&\nvar collapse_itemvue_type_template_id_2d05faac_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    {\n      staticClass: \"el-collapse-item\",\n      class: { \"is-active\": _vm.isActive, \"is-disabled\": _vm.disabled }\n    },\n    [\n      _c(\n        \"div\",\n        {\n          attrs: {\n            role: \"tab\",\n            \"aria-expanded\": _vm.isActive,\n            \"aria-controls\": \"el-collapse-content-\" + _vm.id,\n            \"aria-describedby\": \"el-collapse-content-\" + _vm.id\n          }\n        },\n        [\n          _c(\n            \"div\",\n            {\n              staticClass: \"el-collapse-item__header\",\n              class: {\n                focusing: _vm.focusing,\n                \"is-active\": _vm.isActive\n              },\n              attrs: {\n                role: \"button\",\n                id: \"el-collapse-head-\" + _vm.id,\n                tabindex: _vm.disabled ? undefined : 0\n              },\n              on: {\n                click: _vm.handleHeaderClick,\n                keyup: function($event) {\n                  if (\n                    !(\"button\" in $event) &&\n                    _vm._k($event.keyCode, \"space\", 32, $event.key, [\n                      \" \",\n                      \"Spacebar\"\n                    ]) &&\n                    _vm._k($event.keyCode, \"enter\", 13, $event.key, \"Enter\")\n                  ) {\n                    return null\n                  }\n                  $event.stopPropagation()\n                  return _vm.handleEnterClick($event)\n                },\n                focus: _vm.handleFocus,\n                blur: function($event) {\n                  _vm.focusing = false\n                }\n              }\n            },\n            [\n              _vm._t(\"title\", [_vm._v(_vm._s(_vm.title))]),\n              _c(\"i\", {\n                staticClass: \"el-collapse-item__arrow el-icon-arrow-right\",\n                class: { \"is-active\": _vm.isActive }\n              })\n            ],\n            2\n          )\n        ]\n      ),\n      _c(\"el-collapse-transition\", [\n        _c(\n          \"div\",\n          {\n            directives: [\n              {\n                name: \"show\",\n                rawName: \"v-show\",\n                value: _vm.isActive,\n                expression: \"isActive\"\n              }\n            ],\n            staticClass: \"el-collapse-item__wrap\",\n            attrs: {\n              role: \"tabpanel\",\n              \"aria-hidden\": !_vm.isActive,\n              \"aria-labelledby\": \"el-collapse-head-\" + _vm.id,\n              id: \"el-collapse-content-\" + _vm.id\n            }\n          },\n          [\n            _c(\n              \"div\",\n              { staticClass: \"el-collapse-item__content\" },\n              [_vm._t(\"default\")],\n              2\n            )\n          ]\n        )\n      ])\n    ],\n    1\n  )\n}\nvar collapse_itemvue_type_template_id_2d05faac_staticRenderFns = []\ncollapse_itemvue_type_template_id_2d05faac_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/collapse/src/collapse-item.vue?vue&type=template&id=2d05faac&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/collapse/src/collapse-item.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n/* harmony default export */ var collapse_itemvue_type_script_lang_js_ = ({\n  name: 'ElCollapseItem',\n\n  componentName: 'ElCollapseItem',\n\n  mixins: [emitter_default.a],\n\n  components: { ElCollapseTransition: collapse_transition_default.a },\n\n  data: function data() {\n    return {\n      contentWrapStyle: {\n        height: 'auto',\n        display: 'block'\n      },\n      contentHeight: 0,\n      focusing: false,\n      isClick: false,\n      id: Object(util_[\"generateId\"])()\n    };\n  },\n\n\n  inject: ['collapse'],\n\n  props: {\n    title: String,\n    name: {\n      type: [String, Number],\n      default: function _default() {\n        return this._uid;\n      }\n    },\n    disabled: Boolean\n  },\n\n  computed: {\n    isActive: function isActive() {\n      return this.collapse.activeNames.indexOf(this.name) > -1;\n    }\n  },\n\n  methods: {\n    handleFocus: function handleFocus() {\n      var _this = this;\n\n      setTimeout(function () {\n        if (!_this.isClick) {\n          _this.focusing = true;\n        } else {\n          _this.isClick = false;\n        }\n      }, 50);\n    },\n    handleHeaderClick: function handleHeaderClick() {\n      if (this.disabled) return;\n      this.dispatch('ElCollapse', 'item-click', this);\n      this.focusing = false;\n      this.isClick = true;\n    },\n    handleEnterClick: function handleEnterClick() {\n      this.dispatch('ElCollapse', 'item-click', this);\n    }\n  }\n});\n// CONCATENATED MODULE: ./packages/collapse/src/collapse-item.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_collapse_itemvue_type_script_lang_js_ = (collapse_itemvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/collapse/src/collapse-item.vue\n\n\n\n\n\n/* normalize component */\n\nvar collapse_item_component = normalizeComponent(\n  src_collapse_itemvue_type_script_lang_js_,\n  collapse_itemvue_type_template_id_2d05faac_render,\n  collapse_itemvue_type_template_id_2d05faac_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var collapse_item_api; }\ncollapse_item_component.options.__file = \"packages/collapse/src/collapse-item.vue\"\n/* harmony default export */ var collapse_item = (collapse_item_component.exports);\n// CONCATENATED MODULE: ./packages/collapse-item/index.js\n\n\n/* istanbul ignore next */\ncollapse_item.install = function (Vue) {\n  Vue.component(collapse_item.name, collapse_item);\n};\n\n/* harmony default export */ var packages_collapse_item = (collapse_item);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/cascader/src/cascader.vue?vue&type=template&id=032537a6&\nvar cascadervue_type_template_id_032537a6_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    {\n      directives: [\n        {\n          name: \"clickoutside\",\n          rawName: \"v-clickoutside\",\n          value: function() {\n            return _vm.toggleDropDownVisible(false)\n          },\n          expression: \"() => toggleDropDownVisible(false)\"\n        }\n      ],\n      ref: \"reference\",\n      class: [\n        \"el-cascader\",\n        _vm.realSize && \"el-cascader--\" + _vm.realSize,\n        { \"is-disabled\": _vm.isDisabled }\n      ],\n      on: {\n        mouseenter: function($event) {\n          _vm.inputHover = true\n        },\n        mouseleave: function($event) {\n          _vm.inputHover = false\n        },\n        click: function() {\n          return _vm.toggleDropDownVisible(_vm.readonly ? undefined : true)\n        },\n        keydown: _vm.handleKeyDown\n      }\n    },\n    [\n      _c(\n        \"el-input\",\n        {\n          ref: \"input\",\n          class: { \"is-focus\": _vm.dropDownVisible },\n          attrs: {\n            size: _vm.realSize,\n            placeholder: _vm.placeholder,\n            readonly: _vm.readonly,\n            disabled: _vm.isDisabled,\n            \"validate-event\": false\n          },\n          on: {\n            focus: _vm.handleFocus,\n            blur: _vm.handleBlur,\n            input: _vm.handleInput\n          },\n          model: {\n            value: _vm.multiple ? _vm.presentText : _vm.inputValue,\n            callback: function($$v) {\n              _vm.multiple ? _vm.presentText : (_vm.inputValue = $$v)\n            },\n            expression: \"multiple ? presentText : inputValue\"\n          }\n        },\n        [\n          _c(\"template\", { slot: \"suffix\" }, [\n            _vm.clearBtnVisible\n              ? _c(\"i\", {\n                  key: \"clear\",\n                  staticClass: \"el-input__icon el-icon-circle-close\",\n                  on: {\n                    click: function($event) {\n                      $event.stopPropagation()\n                      return _vm.handleClear($event)\n                    }\n                  }\n                })\n              : _c(\"i\", {\n                  key: \"arrow-down\",\n                  class: [\n                    \"el-input__icon\",\n                    \"el-icon-arrow-down\",\n                    _vm.dropDownVisible && \"is-reverse\"\n                  ],\n                  on: {\n                    click: function($event) {\n                      $event.stopPropagation()\n                      _vm.toggleDropDownVisible()\n                    }\n                  }\n                })\n          ])\n        ],\n        2\n      ),\n      _vm.multiple\n        ? _c(\n            \"div\",\n            { staticClass: \"el-cascader__tags\" },\n            [\n              _vm._l(_vm.presentTags, function(tag) {\n                return _c(\n                  \"el-tag\",\n                  {\n                    key: tag.key,\n                    attrs: {\n                      type: \"info\",\n                      size: _vm.tagSize,\n                      hit: tag.hitState,\n                      closable: tag.closable,\n                      \"disable-transitions\": \"\"\n                    },\n                    on: {\n                      close: function($event) {\n                        _vm.deleteTag(tag)\n                      }\n                    }\n                  },\n                  [_c(\"span\", [_vm._v(_vm._s(tag.text))])]\n                )\n              }),\n              _vm.filterable && !_vm.isDisabled\n                ? _c(\"input\", {\n                    directives: [\n                      {\n                        name: \"model\",\n                        rawName: \"v-model.trim\",\n                        value: _vm.inputValue,\n                        expression: \"inputValue\",\n                        modifiers: { trim: true }\n                      }\n                    ],\n                    staticClass: \"el-cascader__search-input\",\n                    attrs: {\n                      type: \"text\",\n                      placeholder: _vm.presentTags.length ? \"\" : _vm.placeholder\n                    },\n                    domProps: { value: _vm.inputValue },\n                    on: {\n                      input: [\n                        function($event) {\n                          if ($event.target.composing) {\n                            return\n                          }\n                          _vm.inputValue = $event.target.value.trim()\n                        },\n                        function(e) {\n                          return _vm.handleInput(_vm.inputValue, e)\n                        }\n                      ],\n                      click: function($event) {\n                        $event.stopPropagation()\n                        _vm.toggleDropDownVisible(true)\n                      },\n                      keydown: function($event) {\n                        if (\n                          !(\"button\" in $event) &&\n                          _vm._k(\n                            $event.keyCode,\n                            \"delete\",\n                            [8, 46],\n                            $event.key,\n                            [\"Backspace\", \"Delete\", \"Del\"]\n                          )\n                        ) {\n                          return null\n                        }\n                        return _vm.handleDelete($event)\n                      },\n                      blur: function($event) {\n                        _vm.$forceUpdate()\n                      }\n                    }\n                  })\n                : _vm._e()\n            ],\n            2\n          )\n        : _vm._e(),\n      _c(\n        \"transition\",\n        {\n          attrs: { name: \"el-zoom-in-top\" },\n          on: { \"after-leave\": _vm.handleDropdownLeave }\n        },\n        [\n          _c(\n            \"div\",\n            {\n              directives: [\n                {\n                  name: \"show\",\n                  rawName: \"v-show\",\n                  value: _vm.dropDownVisible,\n                  expression: \"dropDownVisible\"\n                }\n              ],\n              ref: \"popper\",\n              class: [\"el-popper\", \"el-cascader__dropdown\", _vm.popperClass]\n            },\n            [\n              _c(\"el-cascader-panel\", {\n                directives: [\n                  {\n                    name: \"show\",\n                    rawName: \"v-show\",\n                    value: !_vm.filtering,\n                    expression: \"!filtering\"\n                  }\n                ],\n                ref: \"panel\",\n                attrs: {\n                  options: _vm.options,\n                  props: _vm.config,\n                  border: false,\n                  \"render-label\": _vm.$scopedSlots.default\n                },\n                on: {\n                  \"expand-change\": _vm.handleExpandChange,\n                  close: function($event) {\n                    _vm.toggleDropDownVisible(false)\n                  }\n                },\n                model: {\n                  value: _vm.checkedValue,\n                  callback: function($$v) {\n                    _vm.checkedValue = $$v\n                  },\n                  expression: \"checkedValue\"\n                }\n              }),\n              _vm.filterable\n                ? _c(\n                    \"el-scrollbar\",\n                    {\n                      directives: [\n                        {\n                          name: \"show\",\n                          rawName: \"v-show\",\n                          value: _vm.filtering,\n                          expression: \"filtering\"\n                        }\n                      ],\n                      ref: \"suggestionPanel\",\n                      staticClass: \"el-cascader__suggestion-panel\",\n                      attrs: {\n                        tag: \"ul\",\n                        \"view-class\": \"el-cascader__suggestion-list\"\n                      },\n                      nativeOn: {\n                        keydown: function($event) {\n                          return _vm.handleSuggestionKeyDown($event)\n                        }\n                      }\n                    },\n                    [\n                      _vm.suggestions.length\n                        ? _vm._l(_vm.suggestions, function(item, index) {\n                            return _c(\n                              \"li\",\n                              {\n                                key: item.uid,\n                                class: [\n                                  \"el-cascader__suggestion-item\",\n                                  item.checked && \"is-checked\"\n                                ],\n                                attrs: { tabindex: -1 },\n                                on: {\n                                  click: function($event) {\n                                    _vm.handleSuggestionClick(index)\n                                  }\n                                }\n                              },\n                              [\n                                _c(\"span\", [_vm._v(_vm._s(item.text))]),\n                                item.checked\n                                  ? _c(\"i\", { staticClass: \"el-icon-check\" })\n                                  : _vm._e()\n                              ]\n                            )\n                          })\n                        : _vm._t(\"empty\", [\n                            _c(\n                              \"li\",\n                              { staticClass: \"el-cascader__empty-text\" },\n                              [_vm._v(_vm._s(_vm.t(\"el.cascader.noMatch\")))]\n                            )\n                          ])\n                    ],\n                    2\n                  )\n                : _vm._e()\n            ],\n            1\n          )\n        ]\n      )\n    ],\n    1\n  )\n}\nvar cascadervue_type_template_id_032537a6_staticRenderFns = []\ncascadervue_type_template_id_032537a6_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/cascader/src/cascader.vue?vue&type=template&id=032537a6&\n\n// EXTERNAL MODULE: external \"element-ui/lib/cascader-panel\"\nvar cascader_panel_ = __nested_webpack_require_8926__(43);\nvar cascader_panel_default = /*#__PURE__*/__nested_webpack_require_8926__.n(cascader_panel_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/aria-utils\"\nvar aria_utils_ = __nested_webpack_require_8926__(35);\nvar aria_utils_default = /*#__PURE__*/__nested_webpack_require_8926__.n(aria_utils_);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/cascader/src/cascader.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar KeyCode = aria_utils_default.a.keys;\n\nvar MigratingProps = {\n  expandTrigger: {\n    newProp: 'expandTrigger',\n    type: String\n  },\n  changeOnSelect: {\n    newProp: 'checkStrictly',\n    type: Boolean\n  },\n  hoverThreshold: {\n    newProp: 'hoverThreshold',\n    type: Number\n  }\n};\n\nvar PopperMixin = {\n  props: {\n    placement: {\n      type: String,\n      default: 'bottom-start'\n    },\n    appendToBody: vue_popper_default.a.props.appendToBody,\n    visibleArrow: {\n      type: Boolean,\n      default: true\n    },\n    arrowOffset: vue_popper_default.a.props.arrowOffset,\n    offset: vue_popper_default.a.props.offset,\n    boundariesPadding: vue_popper_default.a.props.boundariesPadding,\n    popperOptions: vue_popper_default.a.props.popperOptions,\n    transformOrigin: vue_popper_default.a.props.transformOrigin\n  },\n  methods: vue_popper_default.a.methods,\n  data: vue_popper_default.a.data,\n  beforeDestroy: vue_popper_default.a.beforeDestroy\n};\n\nvar InputSizeMap = {\n  medium: 36,\n  small: 32,\n  mini: 28\n};\n\n/* harmony default export */ var cascadervue_type_script_lang_js_ = ({\n  name: 'ElCascader',\n\n  directives: { Clickoutside: clickoutside_default.a },\n\n  mixins: [PopperMixin, emitter_default.a, locale_default.a, migrating_default.a],\n\n  inject: {\n    elForm: {\n      default: ''\n    },\n    elFormItem: {\n      default: ''\n    }\n  },\n\n  components: {\n    ElInput: input_default.a,\n    ElTag: tag_default.a,\n    ElScrollbar: scrollbar_default.a,\n    ElCascaderPanel: cascader_panel_default.a\n  },\n\n  props: {\n    value: {},\n    options: Array,\n    props: Object,\n    size: String,\n    placeholder: {\n      type: String,\n      default: function _default() {\n        return Object(lib_locale_[\"t\"])('el.cascader.placeholder');\n      }\n    },\n    disabled: Boolean,\n    clearable: Boolean,\n    filterable: Boolean,\n    filterMethod: Function,\n    separator: {\n      type: String,\n      default: ' / '\n    },\n    showAllLevels: {\n      type: Boolean,\n      default: true\n    },\n    collapseTags: Boolean,\n    debounce: {\n      type: Number,\n      default: 300\n    },\n    beforeFilter: {\n      type: Function,\n      default: function _default() {\n        return function () {};\n      }\n    },\n    popperClass: String\n  },\n\n  data: function data() {\n    return {\n      dropDownVisible: false,\n      checkedValue: this.value,\n      inputHover: false,\n      inputValue: null,\n      presentText: null,\n      presentTags: [],\n      checkedNodes: [],\n      filtering: false,\n      suggestions: [],\n      inputInitialHeight: 0,\n      pressDeleteCount: 0\n    };\n  },\n\n\n  computed: {\n    realSize: function realSize() {\n      var _elFormItemSize = (this.elFormItem || {}).elFormItemSize;\n      return this.size || _elFormItemSize || (this.$ELEMENT || {}).size;\n    },\n    tagSize: function tagSize() {\n      return ['small', 'mini'].indexOf(this.realSize) > -1 ? 'mini' : 'small';\n    },\n    isDisabled: function isDisabled() {\n      return this.disabled || (this.elForm || {}).disabled;\n    },\n    config: function config() {\n      var config = this.props || {};\n      var $attrs = this.$attrs;\n\n\n      Object.keys(MigratingProps).forEach(function (oldProp) {\n        var _MigratingProps$oldPr = MigratingProps[oldProp],\n            newProp = _MigratingProps$oldPr.newProp,\n            type = _MigratingProps$oldPr.type;\n\n        var oldValue = $attrs[oldProp] || $attrs[Object(util_[\"kebabCase\"])(oldProp)];\n        if (Object(shared_[\"isDef\"])(oldProp) && !Object(shared_[\"isDef\"])(config[newProp])) {\n          if (type === Boolean && oldValue === '') {\n            oldValue = true;\n          }\n          config[newProp] = oldValue;\n        }\n      });\n\n      return config;\n    },\n    multiple: function multiple() {\n      return this.config.multiple;\n    },\n    leafOnly: function leafOnly() {\n      return !this.config.checkStrictly;\n    },\n    readonly: function readonly() {\n      return !this.filterable || this.multiple;\n    },\n    clearBtnVisible: function clearBtnVisible() {\n      if (!this.clearable || this.isDisabled || this.filtering || !this.inputHover) {\n        return false;\n      }\n\n      return this.multiple ? !!this.checkedNodes.filter(function (node) {\n        return !node.isDisabled;\n      }).length : !!this.presentText;\n    },\n    panel: function panel() {\n      return this.$refs.panel;\n    }\n  },\n\n  watch: {\n    disabled: function disabled() {\n      this.computePresentContent();\n    },\n    value: function value(val) {\n      if (!Object(util_[\"isEqual\"])(val, this.checkedValue)) {\n        this.checkedValue = val;\n        this.computePresentContent();\n      }\n    },\n    checkedValue: function checkedValue(val) {\n      var value = this.value,\n          dropDownVisible = this.dropDownVisible;\n      var _config = this.config,\n          checkStrictly = _config.checkStrictly,\n          multiple = _config.multiple;\n\n\n      if (!Object(util_[\"isEqual\"])(val, value) || Object(types_[\"isUndefined\"])(value)) {\n        this.computePresentContent();\n        // hide dropdown when single mode\n        if (!multiple && !checkStrictly && dropDownVisible) {\n          this.toggleDropDownVisible(false);\n        }\n\n        this.$emit('input', val);\n        this.$emit('change', val);\n        this.dispatch('ElFormItem', 'el.form.change', [val]);\n      }\n    },\n\n    options: {\n      handler: function handler() {\n        this.$nextTick(this.computePresentContent);\n      },\n      deep: true\n    },\n    presentText: function presentText(val) {\n      this.inputValue = val;\n    },\n    presentTags: function presentTags(val, oldVal) {\n      if (this.multiple && (val.length || oldVal.length)) {\n        this.$nextTick(this.updateStyle);\n      }\n    },\n    filtering: function filtering(val) {\n      this.$nextTick(this.updatePopper);\n    }\n  },\n\n  mounted: function mounted() {\n    var _this = this;\n\n    var input = this.$refs.input;\n\n    if (input && input.$el) {\n      this.inputInitialHeight = input.$el.offsetHeight || InputSizeMap[this.realSize] || 40;\n    }\n\n    if (!this.isEmptyValue(this.value)) {\n      this.computePresentContent();\n    }\n\n    this.filterHandler = debounce_default()(this.debounce, function () {\n      var inputValue = _this.inputValue;\n\n\n      if (!inputValue) {\n        _this.filtering = false;\n        return;\n      }\n\n      var before = _this.beforeFilter(inputValue);\n      if (before && before.then) {\n        before.then(_this.getSuggestions);\n      } else if (before !== false) {\n        _this.getSuggestions();\n      } else {\n        _this.filtering = false;\n      }\n    });\n\n    Object(resize_event_[\"addResizeListener\"])(this.$el, this.updateStyle);\n  },\n  beforeDestroy: function beforeDestroy() {\n    Object(resize_event_[\"removeResizeListener\"])(this.$el, this.updateStyle);\n  },\n\n\n  methods: {\n    getMigratingConfig: function getMigratingConfig() {\n      return {\n        props: {\n          'expand-trigger': 'expand-trigger is removed, use `props.expandTrigger` instead.',\n          'change-on-select': 'change-on-select is removed, use `props.checkStrictly` instead.',\n          'hover-threshold': 'hover-threshold is removed, use `props.hoverThreshold` instead'\n        },\n        events: {\n          'active-item-change': 'active-item-change is renamed to expand-change'\n        }\n      };\n    },\n    toggleDropDownVisible: function toggleDropDownVisible(visible) {\n      var _this2 = this;\n\n      if (this.isDisabled) return;\n\n      var dropDownVisible = this.dropDownVisible;\n      var input = this.$refs.input;\n\n      visible = Object(shared_[\"isDef\"])(visible) ? visible : !dropDownVisible;\n      if (visible !== dropDownVisible) {\n        this.dropDownVisible = visible;\n        if (visible) {\n          this.$nextTick(function () {\n            _this2.updatePopper();\n            _this2.panel.scrollIntoView();\n          });\n        }\n        input.$refs.input.setAttribute('aria-expanded', visible);\n        this.$emit('visible-change', visible);\n      }\n    },\n    handleDropdownLeave: function handleDropdownLeave() {\n      this.filtering = false;\n      this.inputValue = this.presentText;\n      this.doDestroy();\n    },\n    handleKeyDown: function handleKeyDown(event) {\n      switch (event.keyCode) {\n        case KeyCode.enter:\n          this.toggleDropDownVisible();\n          break;\n        case KeyCode.down:\n          this.toggleDropDownVisible(true);\n          this.focusFirstNode();\n          event.preventDefault();\n          break;\n        case KeyCode.esc:\n        case KeyCode.tab:\n          this.toggleDropDownVisible(false);\n          break;\n      }\n    },\n    handleFocus: function handleFocus(e) {\n      this.$emit('focus', e);\n    },\n    handleBlur: function handleBlur(e) {\n      this.$emit('blur', e);\n    },\n    handleInput: function handleInput(val, event) {\n      !this.dropDownVisible && this.toggleDropDownVisible(true);\n\n      if (event && event.isComposing) return;\n      if (val) {\n        this.filterHandler();\n      } else {\n        this.filtering = false;\n      }\n    },\n    handleClear: function handleClear() {\n      this.presentText = '';\n      this.panel.clearCheckedNodes();\n    },\n    handleExpandChange: function handleExpandChange(value) {\n      this.$nextTick(this.updatePopper.bind(this));\n      this.$emit('expand-change', value);\n      this.$emit('active-item-change', value); // Deprecated\n    },\n    focusFirstNode: function focusFirstNode() {\n      var _this3 = this;\n\n      this.$nextTick(function () {\n        var filtering = _this3.filtering;\n        var _$refs = _this3.$refs,\n            popper = _$refs.popper,\n            suggestionPanel = _$refs.suggestionPanel;\n\n        var firstNode = null;\n\n        if (filtering && suggestionPanel) {\n          firstNode = suggestionPanel.$el.querySelector('.el-cascader__suggestion-item');\n        } else {\n          var firstMenu = popper.querySelector('.el-cascader-menu');\n          firstNode = firstMenu.querySelector('.el-cascader-node[tabindex=\"-1\"]');\n        }\n\n        if (firstNode) {\n          firstNode.focus();\n          !filtering && firstNode.click();\n        }\n      });\n    },\n    computePresentContent: function computePresentContent() {\n      var _this4 = this;\n\n      // nextTick is required, because checked nodes may not change right now\n      this.$nextTick(function () {\n        if (_this4.config.multiple) {\n          _this4.computePresentTags();\n          _this4.presentText = _this4.presentTags.length ? ' ' : null;\n        } else {\n          _this4.computePresentText();\n        }\n      });\n    },\n    isEmptyValue: function isEmptyValue(val) {\n      var multiple = this.multiple;\n      var emitPath = this.panel.config.emitPath;\n\n      if (multiple || emitPath) {\n        return Object(util_[\"isEmpty\"])(val);\n      }\n      return false;\n    },\n    computePresentText: function computePresentText() {\n      var checkedValue = this.checkedValue,\n          config = this.config;\n\n      if (!this.isEmptyValue(checkedValue)) {\n        var node = this.panel.getNodeByValue(checkedValue);\n        if (node && (config.checkStrictly || node.isLeaf)) {\n          this.presentText = node.getText(this.showAllLevels, this.separator);\n          return;\n        }\n      }\n      this.presentText = null;\n    },\n    computePresentTags: function computePresentTags() {\n      var isDisabled = this.isDisabled,\n          leafOnly = this.leafOnly,\n          showAllLevels = this.showAllLevels,\n          separator = this.separator,\n          collapseTags = this.collapseTags;\n\n      var checkedNodes = this.getCheckedNodes(leafOnly);\n      var tags = [];\n\n      var genTag = function genTag(node) {\n        return {\n          node: node,\n          key: node.uid,\n          text: node.getText(showAllLevels, separator),\n          hitState: false,\n          closable: !isDisabled && !node.isDisabled\n        };\n      };\n\n      if (checkedNodes.length) {\n        var first = checkedNodes[0],\n            rest = checkedNodes.slice(1);\n\n        var restCount = rest.length;\n        tags.push(genTag(first));\n\n        if (restCount) {\n          if (collapseTags) {\n            tags.push({\n              key: -1,\n              text: '+ ' + restCount,\n              closable: false\n            });\n          } else {\n            rest.forEach(function (node) {\n              return tags.push(genTag(node));\n            });\n          }\n        }\n      }\n\n      this.checkedNodes = checkedNodes;\n      this.presentTags = tags;\n    },\n    getSuggestions: function getSuggestions() {\n      var _this5 = this;\n\n      var filterMethod = this.filterMethod;\n\n\n      if (!Object(types_[\"isFunction\"])(filterMethod)) {\n        filterMethod = function filterMethod(node, keyword) {\n          return node.text.includes(keyword);\n        };\n      }\n\n      var suggestions = this.panel.getFlattedNodes(this.leafOnly).filter(function (node) {\n        if (node.isDisabled) return false;\n        node.text = node.getText(_this5.showAllLevels, _this5.separator) || '';\n        return filterMethod(node, _this5.inputValue);\n      });\n\n      if (this.multiple) {\n        this.presentTags.forEach(function (tag) {\n          tag.hitState = false;\n        });\n      } else {\n        suggestions.forEach(function (node) {\n          node.checked = Object(util_[\"isEqual\"])(_this5.checkedValue, node.getValueByOption());\n        });\n      }\n\n      this.filtering = true;\n      this.suggestions = suggestions;\n      this.$nextTick(this.updatePopper);\n    },\n    handleSuggestionKeyDown: function handleSuggestionKeyDown(event) {\n      var keyCode = event.keyCode,\n          target = event.target;\n\n      switch (keyCode) {\n        case KeyCode.enter:\n          target.click();\n          break;\n        case KeyCode.up:\n          var prev = target.previousElementSibling;\n          prev && prev.focus();\n          break;\n        case KeyCode.down:\n          var next = target.nextElementSibling;\n          next && next.focus();\n          break;\n        case KeyCode.esc:\n        case KeyCode.tab:\n          this.toggleDropDownVisible(false);\n          break;\n      }\n    },\n    handleDelete: function handleDelete() {\n      var inputValue = this.inputValue,\n          pressDeleteCount = this.pressDeleteCount,\n          presentTags = this.presentTags;\n\n      var lastIndex = presentTags.length - 1;\n      var lastTag = presentTags[lastIndex];\n      this.pressDeleteCount = inputValue ? 0 : pressDeleteCount + 1;\n\n      if (!lastTag) return;\n\n      if (this.pressDeleteCount) {\n        if (lastTag.hitState) {\n          this.deleteTag(lastTag);\n        } else {\n          lastTag.hitState = true;\n        }\n      }\n    },\n    handleSuggestionClick: function handleSuggestionClick(index) {\n      var multiple = this.multiple;\n\n      var targetNode = this.suggestions[index];\n\n      if (multiple) {\n        var checked = targetNode.checked;\n\n        targetNode.doCheck(!checked);\n        this.panel.calculateMultiCheckedValue();\n      } else {\n        this.checkedValue = targetNode.getValueByOption();\n        this.toggleDropDownVisible(false);\n      }\n    },\n    deleteTag: function deleteTag(tag) {\n      var checkedValue = this.checkedValue;\n\n      var current = tag.node.getValueByOption();\n      var val = checkedValue.find(function (n) {\n        return Object(util_[\"isEqual\"])(n, current);\n      });\n      this.checkedValue = checkedValue.filter(function (n) {\n        return !Object(util_[\"isEqual\"])(n, current);\n      });\n      this.$emit('remove-tag', val);\n    },\n    updateStyle: function updateStyle() {\n      var $el = this.$el,\n          inputInitialHeight = this.inputInitialHeight;\n\n      if (this.$isServer || !$el) return;\n\n      var suggestionPanel = this.$refs.suggestionPanel;\n\n      var inputInner = $el.querySelector('.el-input__inner');\n\n      if (!inputInner) return;\n\n      var tags = $el.querySelector('.el-cascader__tags');\n      var suggestionPanelEl = null;\n\n      if (suggestionPanel && (suggestionPanelEl = suggestionPanel.$el)) {\n        var suggestionList = suggestionPanelEl.querySelector('.el-cascader__suggestion-list');\n        suggestionList.style.minWidth = inputInner.offsetWidth + 'px';\n      }\n\n      if (tags) {\n        var offsetHeight = Math.round(tags.getBoundingClientRect().height);\n        var height = Math.max(offsetHeight + 6, inputInitialHeight) + 'px';\n        inputInner.style.height = height;\n        if (this.dropDownVisible) {\n          this.updatePopper();\n        }\n      }\n    },\n\n\n    /**\n     * public methods\n    */\n    getCheckedNodes: function getCheckedNodes(leafOnly) {\n      return this.panel.getCheckedNodes(leafOnly);\n    }\n  }\n});\n// CONCATENATED MODULE: ./packages/cascader/src/cascader.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_cascadervue_type_script_lang_js_ = (cascadervue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/cascader/src/cascader.vue\n\n\n\n\n\n/* normalize component */\n\nvar cascader_component = normalizeComponent(\n  src_cascadervue_type_script_lang_js_,\n  cascadervue_type_template_id_032537a6_render,\n  cascadervue_type_template_id_032537a6_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var cascader_api; }\ncascader_component.options.__file = \"packages/cascader/src/cascader.vue\"\n/* harmony default export */ var cascader = (cascader_component.exports);\n// CONCATENATED MODULE: ./packages/cascader/index.js\n\n\n/* istanbul ignore next */\ncascader.install = function (Vue) {\n  Vue.component(cascader.name, cascader);\n};\n\n/* harmony default export */ var packages_cascader = (cascader);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/color-picker/src/main.vue?vue&type=template&id=55c8ade7&\nvar mainvue_type_template_id_55c8ade7_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    {\n      directives: [\n        {\n          name: \"clickoutside\",\n          rawName: \"v-clickoutside\",\n          value: _vm.hide,\n          expression: \"hide\"\n        }\n      ],\n      class: [\n        \"el-color-picker\",\n        _vm.colorDisabled ? \"is-disabled\" : \"\",\n        _vm.colorSize ? \"el-color-picker--\" + _vm.colorSize : \"\"\n      ]\n    },\n    [\n      _vm.colorDisabled\n        ? _c(\"div\", { staticClass: \"el-color-picker__mask\" })\n        : _vm._e(),\n      _c(\n        \"div\",\n        {\n          staticClass: \"el-color-picker__trigger\",\n          on: { click: _vm.handleTrigger }\n        },\n        [\n          _c(\n            \"span\",\n            {\n              staticClass: \"el-color-picker__color\",\n              class: { \"is-alpha\": _vm.showAlpha }\n            },\n            [\n              _c(\"span\", {\n                staticClass: \"el-color-picker__color-inner\",\n                style: {\n                  backgroundColor: _vm.displayedColor\n                }\n              }),\n              !_vm.value && !_vm.showPanelColor\n                ? _c(\"span\", {\n                    staticClass: \"el-color-picker__empty el-icon-close\"\n                  })\n                : _vm._e()\n            ]\n          ),\n          _c(\"span\", {\n            directives: [\n              {\n                name: \"show\",\n                rawName: \"v-show\",\n                value: _vm.value || _vm.showPanelColor,\n                expression: \"value || showPanelColor\"\n              }\n            ],\n            staticClass: \"el-color-picker__icon el-icon-arrow-down\"\n          })\n        ]\n      ),\n      _c(\"picker-dropdown\", {\n        ref: \"dropdown\",\n        class: [\"el-color-picker__panel\", _vm.popperClass || \"\"],\n        attrs: {\n          color: _vm.color,\n          \"show-alpha\": _vm.showAlpha,\n          predefine: _vm.predefine\n        },\n        on: { pick: _vm.confirmValue, clear: _vm.clearValue },\n        model: {\n          value: _vm.showPicker,\n          callback: function($$v) {\n            _vm.showPicker = $$v\n          },\n          expression: \"showPicker\"\n        }\n      })\n    ],\n    1\n  )\n}\nvar mainvue_type_template_id_55c8ade7_staticRenderFns = []\nmainvue_type_template_id_55c8ade7_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/color-picker/src/main.vue?vue&type=template&id=55c8ade7&\n\n// CONCATENATED MODULE: ./packages/color-picker/src/color.js\nvar color_typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nfunction color_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar hsv2hsl = function hsv2hsl(hue, sat, val) {\n  return [hue, sat * val / ((hue = (2 - sat) * val) < 1 ? hue : 2 - hue) || 0, hue / 2];\n};\n\n// Need to handle 1.0 as 100%, since once it is a number, there is no difference between it and 1\n// <http://stackoverflow.com/questions/7422072/javascript-how-to-detect-number-as-a-decimal-including-1-0>\nvar isOnePointZero = function isOnePointZero(n) {\n  return typeof n === 'string' && n.indexOf('.') !== -1 && parseFloat(n) === 1;\n};\n\nvar isPercentage = function isPercentage(n) {\n  return typeof n === 'string' && n.indexOf('%') !== -1;\n};\n\n// Take input from [0, n] and return it as [0, 1]\nvar bound01 = function bound01(value, max) {\n  if (isOnePointZero(value)) value = '100%';\n\n  var processPercent = isPercentage(value);\n  value = Math.min(max, Math.max(0, parseFloat(value)));\n\n  // Automatically convert percentage into number\n  if (processPercent) {\n    value = parseInt(value * max, 10) / 100;\n  }\n\n  // Handle floating point rounding errors\n  if (Math.abs(value - max) < 0.000001) {\n    return 1;\n  }\n\n  // Convert into [0, 1] range if it isn't already\n  return value % max / parseFloat(max);\n};\n\nvar INT_HEX_MAP = { 10: 'A', 11: 'B', 12: 'C', 13: 'D', 14: 'E', 15: 'F' };\n\nvar toHex = function toHex(_ref) {\n  var r = _ref.r,\n      g = _ref.g,\n      b = _ref.b;\n\n  var hexOne = function hexOne(value) {\n    value = Math.min(Math.round(value), 255);\n    var high = Math.floor(value / 16);\n    var low = value % 16;\n    return '' + (INT_HEX_MAP[high] || high) + (INT_HEX_MAP[low] || low);\n  };\n\n  if (isNaN(r) || isNaN(g) || isNaN(b)) return '';\n\n  return '#' + hexOne(r) + hexOne(g) + hexOne(b);\n};\n\nvar HEX_INT_MAP = { A: 10, B: 11, C: 12, D: 13, E: 14, F: 15 };\n\nvar parseHexChannel = function parseHexChannel(hex) {\n  if (hex.length === 2) {\n    return (HEX_INT_MAP[hex[0].toUpperCase()] || +hex[0]) * 16 + (HEX_INT_MAP[hex[1].toUpperCase()] || +hex[1]);\n  }\n\n  return HEX_INT_MAP[hex[1].toUpperCase()] || +hex[1];\n};\n\nvar hsl2hsv = function hsl2hsv(hue, sat, light) {\n  sat = sat / 100;\n  light = light / 100;\n  var smin = sat;\n  var lmin = Math.max(light, 0.01);\n  var sv = void 0;\n  var v = void 0;\n\n  light *= 2;\n  sat *= light <= 1 ? light : 2 - light;\n  smin *= lmin <= 1 ? lmin : 2 - lmin;\n  v = (light + sat) / 2;\n  sv = light === 0 ? 2 * smin / (lmin + smin) : 2 * sat / (light + sat);\n\n  return {\n    h: hue,\n    s: sv * 100,\n    v: v * 100\n  };\n};\n\n// `rgbToHsv`\n// Converts an RGB color value to HSV\n// *Assumes:* r, g, and b are contained in the set [0, 255] or [0, 1]\n// *Returns:* { h, s, v } in [0,1]\nvar rgb2hsv = function rgb2hsv(r, g, b) {\n  r = bound01(r, 255);\n  g = bound01(g, 255);\n  b = bound01(b, 255);\n\n  var max = Math.max(r, g, b);\n  var min = Math.min(r, g, b);\n  var h = void 0,\n      s = void 0;\n  var v = max;\n\n  var d = max - min;\n  s = max === 0 ? 0 : d / max;\n\n  if (max === min) {\n    h = 0; // achromatic\n  } else {\n    switch (max) {\n      case r:\n        h = (g - b) / d + (g < b ? 6 : 0);\n        break;\n      case g:\n        h = (b - r) / d + 2;\n        break;\n      case b:\n        h = (r - g) / d + 4;\n        break;\n    }\n    h /= 6;\n  }\n\n  return { h: h * 360, s: s * 100, v: v * 100 };\n};\n\n// `hsvToRgb`\n// Converts an HSV color value to RGB.\n// *Assumes:* h is contained in [0, 1] or [0, 360] and s and v are contained in [0, 1] or [0, 100]\n// *Returns:* { r, g, b } in the set [0, 255]\nvar hsv2rgb = function hsv2rgb(h, s, v) {\n  h = bound01(h, 360) * 6;\n  s = bound01(s, 100);\n  v = bound01(v, 100);\n\n  var i = Math.floor(h);\n  var f = h - i;\n  var p = v * (1 - s);\n  var q = v * (1 - f * s);\n  var t = v * (1 - (1 - f) * s);\n  var mod = i % 6;\n  var r = [v, q, p, p, t, v][mod];\n  var g = [t, v, v, q, p, p][mod];\n  var b = [p, p, t, v, v, q][mod];\n\n  return {\n    r: Math.round(r * 255),\n    g: Math.round(g * 255),\n    b: Math.round(b * 255)\n  };\n};\n\nvar Color = function () {\n  function Color(options) {\n    color_classCallCheck(this, Color);\n\n    this._hue = 0;\n    this._saturation = 100;\n    this._value = 100;\n    this._alpha = 100;\n\n    this.enableAlpha = false;\n    this.format = 'hex';\n    this.value = '';\n\n    options = options || {};\n\n    for (var option in options) {\n      if (options.hasOwnProperty(option)) {\n        this[option] = options[option];\n      }\n    }\n\n    this.doOnChange();\n  }\n\n  Color.prototype.set = function set(prop, value) {\n    if (arguments.length === 1 && (typeof prop === 'undefined' ? 'undefined' : color_typeof(prop)) === 'object') {\n      for (var p in prop) {\n        if (prop.hasOwnProperty(p)) {\n          this.set(p, prop[p]);\n        }\n      }\n\n      return;\n    }\n\n    this['_' + prop] = value;\n    this.doOnChange();\n  };\n\n  Color.prototype.get = function get(prop) {\n    return this['_' + prop];\n  };\n\n  Color.prototype.toRgb = function toRgb() {\n    return hsv2rgb(this._hue, this._saturation, this._value);\n  };\n\n  Color.prototype.fromString = function fromString(value) {\n    var _this = this;\n\n    if (!value) {\n      this._hue = 0;\n      this._saturation = 100;\n      this._value = 100;\n\n      this.doOnChange();\n      return;\n    }\n\n    var fromHSV = function fromHSV(h, s, v) {\n      _this._hue = Math.max(0, Math.min(360, h));\n      _this._saturation = Math.max(0, Math.min(100, s));\n      _this._value = Math.max(0, Math.min(100, v));\n\n      _this.doOnChange();\n    };\n\n    if (value.indexOf('hsl') !== -1) {\n      var parts = value.replace(/hsla|hsl|\\(|\\)/gm, '').split(/\\s|,/g).filter(function (val) {\n        return val !== '';\n      }).map(function (val, index) {\n        return index > 2 ? parseFloat(val) : parseInt(val, 10);\n      });\n\n      if (parts.length === 4) {\n        this._alpha = Math.floor(parseFloat(parts[3]) * 100);\n      } else if (parts.length === 3) {\n        this._alpha = 100;\n      }\n      if (parts.length >= 3) {\n        var _hsl2hsv = hsl2hsv(parts[0], parts[1], parts[2]),\n            h = _hsl2hsv.h,\n            s = _hsl2hsv.s,\n            v = _hsl2hsv.v;\n\n        fromHSV(h, s, v);\n      }\n    } else if (value.indexOf('hsv') !== -1) {\n      var _parts = value.replace(/hsva|hsv|\\(|\\)/gm, '').split(/\\s|,/g).filter(function (val) {\n        return val !== '';\n      }).map(function (val, index) {\n        return index > 2 ? parseFloat(val) : parseInt(val, 10);\n      });\n\n      if (_parts.length === 4) {\n        this._alpha = Math.floor(parseFloat(_parts[3]) * 100);\n      } else if (_parts.length === 3) {\n        this._alpha = 100;\n      }\n      if (_parts.length >= 3) {\n        fromHSV(_parts[0], _parts[1], _parts[2]);\n      }\n    } else if (value.indexOf('rgb') !== -1) {\n      var _parts2 = value.replace(/rgba|rgb|\\(|\\)/gm, '').split(/\\s|,/g).filter(function (val) {\n        return val !== '';\n      }).map(function (val, index) {\n        return index > 2 ? parseFloat(val) : parseInt(val, 10);\n      });\n\n      if (_parts2.length === 4) {\n        this._alpha = Math.floor(parseFloat(_parts2[3]) * 100);\n      } else if (_parts2.length === 3) {\n        this._alpha = 100;\n      }\n      if (_parts2.length >= 3) {\n        var _rgb2hsv = rgb2hsv(_parts2[0], _parts2[1], _parts2[2]),\n            _h = _rgb2hsv.h,\n            _s = _rgb2hsv.s,\n            _v = _rgb2hsv.v;\n\n        fromHSV(_h, _s, _v);\n      }\n    } else if (value.indexOf('#') !== -1) {\n      var hex = value.replace('#', '').trim();\n      if (!/^(?:[0-9a-fA-F]{3}){1,2}|[0-9a-fA-F]{8}$/.test(hex)) return;\n      var r = void 0,\n          g = void 0,\n          b = void 0;\n\n      if (hex.length === 3) {\n        r = parseHexChannel(hex[0] + hex[0]);\n        g = parseHexChannel(hex[1] + hex[1]);\n        b = parseHexChannel(hex[2] + hex[2]);\n      } else if (hex.length === 6 || hex.length === 8) {\n        r = parseHexChannel(hex.substring(0, 2));\n        g = parseHexChannel(hex.substring(2, 4));\n        b = parseHexChannel(hex.substring(4, 6));\n      }\n\n      if (hex.length === 8) {\n        this._alpha = Math.floor(parseHexChannel(hex.substring(6)) / 255 * 100);\n      } else if (hex.length === 3 || hex.length === 6) {\n        this._alpha = 100;\n      }\n\n      var _rgb2hsv2 = rgb2hsv(r, g, b),\n          _h2 = _rgb2hsv2.h,\n          _s2 = _rgb2hsv2.s,\n          _v2 = _rgb2hsv2.v;\n\n      fromHSV(_h2, _s2, _v2);\n    }\n  };\n\n  Color.prototype.compare = function compare(color) {\n    return Math.abs(color._hue - this._hue) < 2 && Math.abs(color._saturation - this._saturation) < 1 && Math.abs(color._value - this._value) < 1 && Math.abs(color._alpha - this._alpha) < 1;\n  };\n\n  Color.prototype.doOnChange = function doOnChange() {\n    var _hue = this._hue,\n        _saturation = this._saturation,\n        _value = this._value,\n        _alpha = this._alpha,\n        format = this.format;\n\n\n    if (this.enableAlpha) {\n      switch (format) {\n        case 'hsl':\n          var hsl = hsv2hsl(_hue, _saturation / 100, _value / 100);\n          this.value = 'hsla(' + _hue + ', ' + Math.round(hsl[1] * 100) + '%, ' + Math.round(hsl[2] * 100) + '%, ' + _alpha / 100 + ')';\n          break;\n        case 'hsv':\n          this.value = 'hsva(' + _hue + ', ' + Math.round(_saturation) + '%, ' + Math.round(_value) + '%, ' + _alpha / 100 + ')';\n          break;\n        default:\n          var _hsv2rgb = hsv2rgb(_hue, _saturation, _value),\n              r = _hsv2rgb.r,\n              g = _hsv2rgb.g,\n              b = _hsv2rgb.b;\n\n          this.value = 'rgba(' + r + ', ' + g + ', ' + b + ', ' + _alpha / 100 + ')';\n      }\n    } else {\n      switch (format) {\n        case 'hsl':\n          var _hsl = hsv2hsl(_hue, _saturation / 100, _value / 100);\n          this.value = 'hsl(' + _hue + ', ' + Math.round(_hsl[1] * 100) + '%, ' + Math.round(_hsl[2] * 100) + '%)';\n          break;\n        case 'hsv':\n          this.value = 'hsv(' + _hue + ', ' + Math.round(_saturation) + '%, ' + Math.round(_value) + '%)';\n          break;\n        case 'rgb':\n          var _hsv2rgb2 = hsv2rgb(_hue, _saturation, _value),\n              _r = _hsv2rgb2.r,\n              _g = _hsv2rgb2.g,\n              _b = _hsv2rgb2.b;\n\n          this.value = 'rgb(' + _r + ', ' + _g + ', ' + _b + ')';\n          break;\n        default:\n          this.value = toHex(hsv2rgb(_hue, _saturation, _value));\n      }\n    }\n  };\n\n  return Color;\n}();\n\n/* harmony default export */ var src_color = (Color);\n;\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/color-picker/src/components/picker-dropdown.vue?vue&type=template&id=06601625&\nvar picker_dropdownvue_type_template_id_06601625_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"transition\",\n    { attrs: { name: \"el-zoom-in-top\" }, on: { \"after-leave\": _vm.doDestroy } },\n    [\n      _c(\n        \"div\",\n        {\n          directives: [\n            {\n              name: \"show\",\n              rawName: \"v-show\",\n              value: _vm.showPopper,\n              expression: \"showPopper\"\n            }\n          ],\n          staticClass: \"el-color-dropdown\"\n        },\n        [\n          _c(\n            \"div\",\n            { staticClass: \"el-color-dropdown__main-wrapper\" },\n            [\n              _c(\"hue-slider\", {\n                ref: \"hue\",\n                staticStyle: { float: \"right\" },\n                attrs: { color: _vm.color, vertical: \"\" }\n              }),\n              _c(\"sv-panel\", { ref: \"sl\", attrs: { color: _vm.color } })\n            ],\n            1\n          ),\n          _vm.showAlpha\n            ? _c(\"alpha-slider\", { ref: \"alpha\", attrs: { color: _vm.color } })\n            : _vm._e(),\n          _vm.predefine\n            ? _c(\"predefine\", {\n                attrs: { color: _vm.color, colors: _vm.predefine }\n              })\n            : _vm._e(),\n          _c(\n            \"div\",\n            { staticClass: \"el-color-dropdown__btns\" },\n            [\n              _c(\n                \"span\",\n                { staticClass: \"el-color-dropdown__value\" },\n                [\n                  _c(\"el-input\", {\n                    attrs: { \"validate-event\": false, size: \"mini\" },\n                    on: { blur: _vm.handleConfirm },\n                    nativeOn: {\n                      keyup: function($event) {\n                        if (\n                          !(\"button\" in $event) &&\n                          _vm._k(\n                            $event.keyCode,\n                            \"enter\",\n                            13,\n                            $event.key,\n                            \"Enter\"\n                          )\n                        ) {\n                          return null\n                        }\n                        return _vm.handleConfirm($event)\n                      }\n                    },\n                    model: {\n                      value: _vm.customInput,\n                      callback: function($$v) {\n                        _vm.customInput = $$v\n                      },\n                      expression: \"customInput\"\n                    }\n                  })\n                ],\n                1\n              ),\n              _c(\n                \"el-button\",\n                {\n                  staticClass: \"el-color-dropdown__link-btn\",\n                  attrs: { size: \"mini\", type: \"text\" },\n                  on: {\n                    click: function($event) {\n                      _vm.$emit(\"clear\")\n                    }\n                  }\n                },\n                [\n                  _vm._v(\n                    \"\\n        \" +\n                      _vm._s(_vm.t(\"el.colorpicker.clear\")) +\n                      \"\\n      \"\n                  )\n                ]\n              ),\n              _c(\n                \"el-button\",\n                {\n                  staticClass: \"el-color-dropdown__btn\",\n                  attrs: { plain: \"\", size: \"mini\" },\n                  on: { click: _vm.confirmValue }\n                },\n                [\n                  _vm._v(\n                    \"\\n        \" +\n                      _vm._s(_vm.t(\"el.colorpicker.confirm\")) +\n                      \"\\n      \"\n                  )\n                ]\n              )\n            ],\n            1\n          )\n        ],\n        1\n      )\n    ]\n  )\n}\nvar picker_dropdownvue_type_template_id_06601625_staticRenderFns = []\npicker_dropdownvue_type_template_id_06601625_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/color-picker/src/components/picker-dropdown.vue?vue&type=template&id=06601625&\n\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/color-picker/src/components/sv-panel.vue?vue&type=template&id=d8583596&\nvar sv_panelvue_type_template_id_d8583596_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    {\n      staticClass: \"el-color-svpanel\",\n      style: {\n        backgroundColor: _vm.background\n      }\n    },\n    [\n      _c(\"div\", { staticClass: \"el-color-svpanel__white\" }),\n      _c(\"div\", { staticClass: \"el-color-svpanel__black\" }),\n      _c(\n        \"div\",\n        {\n          staticClass: \"el-color-svpanel__cursor\",\n          style: {\n            top: _vm.cursorTop + \"px\",\n            left: _vm.cursorLeft + \"px\"\n          }\n        },\n        [_c(\"div\")]\n      )\n    ]\n  )\n}\nvar sv_panelvue_type_template_id_d8583596_staticRenderFns = []\nsv_panelvue_type_template_id_d8583596_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/color-picker/src/components/sv-panel.vue?vue&type=template&id=d8583596&\n\n// CONCATENATED MODULE: ./packages/color-picker/src/draggable.js\n\nvar isDragging = false;\n\n/* harmony default export */ var draggable = (function (element, options) {\n  if (external_vue_default.a.prototype.$isServer) return;\n  var moveFn = function moveFn(event) {\n    if (options.drag) {\n      options.drag(event);\n    }\n  };\n  var upFn = function upFn(event) {\n    document.removeEventListener('mousemove', moveFn);\n    document.removeEventListener('mouseup', upFn);\n    document.onselectstart = null;\n    document.ondragstart = null;\n\n    isDragging = false;\n\n    if (options.end) {\n      options.end(event);\n    }\n  };\n  element.addEventListener('mousedown', function (event) {\n    if (isDragging) return;\n    document.onselectstart = function () {\n      return false;\n    };\n    document.ondragstart = function () {\n      return false;\n    };\n\n    document.addEventListener('mousemove', moveFn);\n    document.addEventListener('mouseup', upFn);\n    isDragging = true;\n\n    if (options.start) {\n      options.start(event);\n    }\n  });\n});\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/color-picker/src/components/sv-panel.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n/* harmony default export */ var sv_panelvue_type_script_lang_js_ = ({\n  name: 'el-sl-panel',\n\n  props: {\n    color: {\n      required: true\n    }\n  },\n\n  computed: {\n    colorValue: function colorValue() {\n      var hue = this.color.get('hue');\n      var value = this.color.get('value');\n      return { hue: hue, value: value };\n    }\n  },\n\n  watch: {\n    colorValue: function colorValue() {\n      this.update();\n    }\n  },\n\n  methods: {\n    update: function update() {\n      var saturation = this.color.get('saturation');\n      var value = this.color.get('value');\n\n      var el = this.$el;\n      var width = el.clientWidth,\n          height = el.clientHeight;\n\n\n      this.cursorLeft = saturation * width / 100;\n      this.cursorTop = (100 - value) * height / 100;\n\n      this.background = 'hsl(' + this.color.get('hue') + ', 100%, 50%)';\n    },\n    handleDrag: function handleDrag(event) {\n      var el = this.$el;\n      var rect = el.getBoundingClientRect();\n\n      var left = event.clientX - rect.left;\n      var top = event.clientY - rect.top;\n      left = Math.max(0, left);\n      left = Math.min(left, rect.width);\n\n      top = Math.max(0, top);\n      top = Math.min(top, rect.height);\n\n      this.cursorLeft = left;\n      this.cursorTop = top;\n      this.color.set({\n        saturation: left / rect.width * 100,\n        value: 100 - top / rect.height * 100\n      });\n    }\n  },\n\n  mounted: function mounted() {\n    var _this = this;\n\n    draggable(this.$el, {\n      drag: function drag(event) {\n        _this.handleDrag(event);\n      },\n      end: function end(event) {\n        _this.handleDrag(event);\n      }\n    });\n\n    this.update();\n  },\n  data: function data() {\n    return {\n      cursorTop: 0,\n      cursorLeft: 0,\n      background: 'hsl(0, 100%, 50%)'\n    };\n  }\n});\n// CONCATENATED MODULE: ./packages/color-picker/src/components/sv-panel.vue?vue&type=script&lang=js&\n /* harmony default export */ var components_sv_panelvue_type_script_lang_js_ = (sv_panelvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/color-picker/src/components/sv-panel.vue\n\n\n\n\n\n/* normalize component */\n\nvar sv_panel_component = normalizeComponent(\n  components_sv_panelvue_type_script_lang_js_,\n  sv_panelvue_type_template_id_d8583596_render,\n  sv_panelvue_type_template_id_d8583596_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var sv_panel_api; }\nsv_panel_component.options.__file = \"packages/color-picker/src/components/sv-panel.vue\"\n/* harmony default export */ var sv_panel = (sv_panel_component.exports);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/color-picker/src/components/hue-slider.vue?vue&type=template&id=5cdc43b1&\nvar hue_slidervue_type_template_id_5cdc43b1_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    {\n      staticClass: \"el-color-hue-slider\",\n      class: { \"is-vertical\": _vm.vertical }\n    },\n    [\n      _c(\"div\", {\n        ref: \"bar\",\n        staticClass: \"el-color-hue-slider__bar\",\n        on: { click: _vm.handleClick }\n      }),\n      _c(\"div\", {\n        ref: \"thumb\",\n        staticClass: \"el-color-hue-slider__thumb\",\n        style: {\n          left: _vm.thumbLeft + \"px\",\n          top: _vm.thumbTop + \"px\"\n        }\n      })\n    ]\n  )\n}\nvar hue_slidervue_type_template_id_5cdc43b1_staticRenderFns = []\nhue_slidervue_type_template_id_5cdc43b1_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/color-picker/src/components/hue-slider.vue?vue&type=template&id=5cdc43b1&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/color-picker/src/components/hue-slider.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n/* harmony default export */ var hue_slidervue_type_script_lang_js_ = ({\n  name: 'el-color-hue-slider',\n\n  props: {\n    color: {\n      required: true\n    },\n\n    vertical: Boolean\n  },\n\n  data: function data() {\n    return {\n      thumbLeft: 0,\n      thumbTop: 0\n    };\n  },\n\n\n  computed: {\n    hueValue: function hueValue() {\n      var hue = this.color.get('hue');\n      return hue;\n    }\n  },\n\n  watch: {\n    hueValue: function hueValue() {\n      this.update();\n    }\n  },\n\n  methods: {\n    handleClick: function handleClick(event) {\n      var thumb = this.$refs.thumb;\n      var target = event.target;\n\n      if (target !== thumb) {\n        this.handleDrag(event);\n      }\n    },\n    handleDrag: function handleDrag(event) {\n      var rect = this.$el.getBoundingClientRect();\n      var thumb = this.$refs.thumb;\n\n      var hue = void 0;\n\n      if (!this.vertical) {\n        var left = event.clientX - rect.left;\n        left = Math.min(left, rect.width - thumb.offsetWidth / 2);\n        left = Math.max(thumb.offsetWidth / 2, left);\n\n        hue = Math.round((left - thumb.offsetWidth / 2) / (rect.width - thumb.offsetWidth) * 360);\n      } else {\n        var top = event.clientY - rect.top;\n        top = Math.min(top, rect.height - thumb.offsetHeight / 2);\n        top = Math.max(thumb.offsetHeight / 2, top);\n\n        hue = Math.round((top - thumb.offsetHeight / 2) / (rect.height - thumb.offsetHeight) * 360);\n      }\n\n      this.color.set('hue', hue);\n    },\n    getThumbLeft: function getThumbLeft() {\n      if (this.vertical) return 0;\n      var el = this.$el;\n      var hue = this.color.get('hue');\n\n      if (!el) return 0;\n      var thumb = this.$refs.thumb;\n      return Math.round(hue * (el.offsetWidth - thumb.offsetWidth / 2) / 360);\n    },\n    getThumbTop: function getThumbTop() {\n      if (!this.vertical) return 0;\n      var el = this.$el;\n      var hue = this.color.get('hue');\n\n      if (!el) return 0;\n      var thumb = this.$refs.thumb;\n      return Math.round(hue * (el.offsetHeight - thumb.offsetHeight / 2) / 360);\n    },\n    update: function update() {\n      this.thumbLeft = this.getThumbLeft();\n      this.thumbTop = this.getThumbTop();\n    }\n  },\n\n  mounted: function mounted() {\n    var _this = this;\n\n    var _$refs = this.$refs,\n        bar = _$refs.bar,\n        thumb = _$refs.thumb;\n\n\n    var dragConfig = {\n      drag: function drag(event) {\n        _this.handleDrag(event);\n      },\n      end: function end(event) {\n        _this.handleDrag(event);\n      }\n    };\n\n    draggable(bar, dragConfig);\n    draggable(thumb, dragConfig);\n    this.update();\n  }\n});\n// CONCATENATED MODULE: ./packages/color-picker/src/components/hue-slider.vue?vue&type=script&lang=js&\n /* harmony default export */ var components_hue_slidervue_type_script_lang_js_ = (hue_slidervue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/color-picker/src/components/hue-slider.vue\n\n\n\n\n\n/* normalize component */\n\nvar hue_slider_component = normalizeComponent(\n  components_hue_slidervue_type_script_lang_js_,\n  hue_slidervue_type_template_id_5cdc43b1_render,\n  hue_slidervue_type_template_id_5cdc43b1_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var hue_slider_api; }\nhue_slider_component.options.__file = \"packages/color-picker/src/components/hue-slider.vue\"\n/* harmony default export */ var hue_slider = (hue_slider_component.exports);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/color-picker/src/components/alpha-slider.vue?vue&type=template&id=068c66cb&\nvar alpha_slidervue_type_template_id_068c66cb_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    {\n      staticClass: \"el-color-alpha-slider\",\n      class: { \"is-vertical\": _vm.vertical }\n    },\n    [\n      _c(\"div\", {\n        ref: \"bar\",\n        staticClass: \"el-color-alpha-slider__bar\",\n        style: {\n          background: _vm.background\n        },\n        on: { click: _vm.handleClick }\n      }),\n      _c(\"div\", {\n        ref: \"thumb\",\n        staticClass: \"el-color-alpha-slider__thumb\",\n        style: {\n          left: _vm.thumbLeft + \"px\",\n          top: _vm.thumbTop + \"px\"\n        }\n      })\n    ]\n  )\n}\nvar alpha_slidervue_type_template_id_068c66cb_staticRenderFns = []\nalpha_slidervue_type_template_id_068c66cb_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/color-picker/src/components/alpha-slider.vue?vue&type=template&id=068c66cb&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/color-picker/src/components/alpha-slider.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n/* harmony default export */ var alpha_slidervue_type_script_lang_js_ = ({\n  name: 'el-color-alpha-slider',\n\n  props: {\n    color: {\n      required: true\n    },\n    vertical: Boolean\n  },\n\n  watch: {\n    'color._alpha': function color_alpha() {\n      this.update();\n    },\n    'color.value': function colorValue() {\n      this.update();\n    }\n  },\n\n  methods: {\n    handleClick: function handleClick(event) {\n      var thumb = this.$refs.thumb;\n      var target = event.target;\n\n      if (target !== thumb) {\n        this.handleDrag(event);\n      }\n    },\n    handleDrag: function handleDrag(event) {\n      var rect = this.$el.getBoundingClientRect();\n      var thumb = this.$refs.thumb;\n\n\n      if (!this.vertical) {\n        var left = event.clientX - rect.left;\n        left = Math.max(thumb.offsetWidth / 2, left);\n        left = Math.min(left, rect.width - thumb.offsetWidth / 2);\n\n        this.color.set('alpha', Math.round((left - thumb.offsetWidth / 2) / (rect.width - thumb.offsetWidth) * 100));\n      } else {\n        var top = event.clientY - rect.top;\n        top = Math.max(thumb.offsetHeight / 2, top);\n        top = Math.min(top, rect.height - thumb.offsetHeight / 2);\n\n        this.color.set('alpha', Math.round((top - thumb.offsetHeight / 2) / (rect.height - thumb.offsetHeight) * 100));\n      }\n    },\n    getThumbLeft: function getThumbLeft() {\n      if (this.vertical) return 0;\n      var el = this.$el;\n      var alpha = this.color._alpha;\n\n      if (!el) return 0;\n      var thumb = this.$refs.thumb;\n      return Math.round(alpha * (el.offsetWidth - thumb.offsetWidth / 2) / 100);\n    },\n    getThumbTop: function getThumbTop() {\n      if (!this.vertical) return 0;\n      var el = this.$el;\n      var alpha = this.color._alpha;\n\n      if (!el) return 0;\n      var thumb = this.$refs.thumb;\n      return Math.round(alpha * (el.offsetHeight - thumb.offsetHeight / 2) / 100);\n    },\n    getBackground: function getBackground() {\n      if (this.color && this.color.value) {\n        var _color$toRgb = this.color.toRgb(),\n            r = _color$toRgb.r,\n            g = _color$toRgb.g,\n            b = _color$toRgb.b;\n\n        return 'linear-gradient(to right, rgba(' + r + ', ' + g + ', ' + b + ', 0) 0%, rgba(' + r + ', ' + g + ', ' + b + ', 1) 100%)';\n      }\n      return null;\n    },\n    update: function update() {\n      this.thumbLeft = this.getThumbLeft();\n      this.thumbTop = this.getThumbTop();\n      this.background = this.getBackground();\n    }\n  },\n\n  data: function data() {\n    return {\n      thumbLeft: 0,\n      thumbTop: 0,\n      background: null\n    };\n  },\n  mounted: function mounted() {\n    var _this = this;\n\n    var _$refs = this.$refs,\n        bar = _$refs.bar,\n        thumb = _$refs.thumb;\n\n\n    var dragConfig = {\n      drag: function drag(event) {\n        _this.handleDrag(event);\n      },\n      end: function end(event) {\n        _this.handleDrag(event);\n      }\n    };\n\n    draggable(bar, dragConfig);\n    draggable(thumb, dragConfig);\n    this.update();\n  }\n});\n// CONCATENATED MODULE: ./packages/color-picker/src/components/alpha-slider.vue?vue&type=script&lang=js&\n /* harmony default export */ var components_alpha_slidervue_type_script_lang_js_ = (alpha_slidervue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/color-picker/src/components/alpha-slider.vue\n\n\n\n\n\n/* normalize component */\n\nvar alpha_slider_component = normalizeComponent(\n  components_alpha_slidervue_type_script_lang_js_,\n  alpha_slidervue_type_template_id_068c66cb_render,\n  alpha_slidervue_type_template_id_068c66cb_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var alpha_slider_api; }\nalpha_slider_component.options.__file = \"packages/color-picker/src/components/alpha-slider.vue\"\n/* harmony default export */ var alpha_slider = (alpha_slider_component.exports);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/color-picker/src/components/predefine.vue?vue&type=template&id=06e03093&\nvar predefinevue_type_template_id_06e03093_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\"div\", { staticClass: \"el-color-predefine\" }, [\n    _c(\n      \"div\",\n      { staticClass: \"el-color-predefine__colors\" },\n      _vm._l(_vm.rgbaColors, function(item, index) {\n        return _c(\n          \"div\",\n          {\n            key: _vm.colors[index],\n            staticClass: \"el-color-predefine__color-selector\",\n            class: { selected: item.selected, \"is-alpha\": item._alpha < 100 },\n            on: {\n              click: function($event) {\n                _vm.handleSelect(index)\n              }\n            }\n          },\n          [_c(\"div\", { style: { \"background-color\": item.value } })]\n        )\n      }),\n      0\n    )\n  ])\n}\nvar predefinevue_type_template_id_06e03093_staticRenderFns = []\npredefinevue_type_template_id_06e03093_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/color-picker/src/components/predefine.vue?vue&type=template&id=06e03093&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/color-picker/src/components/predefine.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n/* harmony default export */ var predefinevue_type_script_lang_js_ = ({\n  props: {\n    colors: { type: Array, required: true },\n    color: { required: true }\n  },\n  data: function data() {\n    return {\n      rgbaColors: this.parseColors(this.colors, this.color)\n    };\n  },\n\n  methods: {\n    handleSelect: function handleSelect(index) {\n      this.color.fromString(this.colors[index]);\n    },\n    parseColors: function parseColors(colors, color) {\n      return colors.map(function (value) {\n        var c = new src_color();\n        c.enableAlpha = true;\n        c.format = 'rgba';\n        c.fromString(value);\n        c.selected = c.value === color.value;\n        return c;\n      });\n    }\n  },\n  watch: {\n    '$parent.currentColor': function $parentCurrentColor(val) {\n      var color = new src_color();\n      color.fromString(val);\n\n      this.rgbaColors.forEach(function (item) {\n        item.selected = color.compare(item);\n      });\n    },\n    colors: function colors(newVal) {\n      this.rgbaColors = this.parseColors(newVal, this.color);\n    },\n    color: function color(newVal) {\n      this.rgbaColors = this.parseColors(this.colors, newVal);\n    }\n  }\n});\n// CONCATENATED MODULE: ./packages/color-picker/src/components/predefine.vue?vue&type=script&lang=js&\n /* harmony default export */ var components_predefinevue_type_script_lang_js_ = (predefinevue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/color-picker/src/components/predefine.vue\n\n\n\n\n\n/* normalize component */\n\nvar predefine_component = normalizeComponent(\n  components_predefinevue_type_script_lang_js_,\n  predefinevue_type_template_id_06e03093_render,\n  predefinevue_type_template_id_06e03093_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var predefine_api; }\npredefine_component.options.__file = \"packages/color-picker/src/components/predefine.vue\"\n/* harmony default export */ var predefine = (predefine_component.exports);\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/color-picker/src/components/picker-dropdown.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n\n\n\n\n/* harmony default export */ var picker_dropdownvue_type_script_lang_js_ = ({\n  name: 'el-color-picker-dropdown',\n\n  mixins: [vue_popper_default.a, locale_default.a],\n\n  components: {\n    SvPanel: sv_panel,\n    HueSlider: hue_slider,\n    AlphaSlider: alpha_slider,\n    ElInput: input_default.a,\n    ElButton: button_default.a,\n    Predefine: predefine\n  },\n\n  props: {\n    color: {\n      required: true\n    },\n    showAlpha: Boolean,\n    predefine: Array\n  },\n\n  data: function data() {\n    return {\n      customInput: ''\n    };\n  },\n\n\n  computed: {\n    currentColor: function currentColor() {\n      var parent = this.$parent;\n      return !parent.value && !parent.showPanelColor ? '' : parent.color.value;\n    }\n  },\n\n  methods: {\n    confirmValue: function confirmValue() {\n      this.$emit('pick');\n    },\n    handleConfirm: function handleConfirm() {\n      this.color.fromString(this.customInput);\n    }\n  },\n\n  mounted: function mounted() {\n    this.$parent.popperElm = this.popperElm = this.$el;\n    this.referenceElm = this.$parent.$el;\n  },\n\n\n  watch: {\n    showPopper: function showPopper(val) {\n      var _this = this;\n\n      if (val === true) {\n        this.$nextTick(function () {\n          var _$refs = _this.$refs,\n              sl = _$refs.sl,\n              hue = _$refs.hue,\n              alpha = _$refs.alpha;\n\n          sl && sl.update();\n          hue && hue.update();\n          alpha && alpha.update();\n        });\n      }\n    },\n\n\n    currentColor: {\n      immediate: true,\n      handler: function handler(val) {\n        this.customInput = val;\n      }\n    }\n  }\n});\n// CONCATENATED MODULE: ./packages/color-picker/src/components/picker-dropdown.vue?vue&type=script&lang=js&\n /* harmony default export */ var components_picker_dropdownvue_type_script_lang_js_ = (picker_dropdownvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/color-picker/src/components/picker-dropdown.vue\n\n\n\n\n\n/* normalize component */\n\nvar picker_dropdown_component = normalizeComponent(\n  components_picker_dropdownvue_type_script_lang_js_,\n  picker_dropdownvue_type_template_id_06601625_render,\n  picker_dropdownvue_type_template_id_06601625_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var picker_dropdown_api; }\npicker_dropdown_component.options.__file = \"packages/color-picker/src/components/picker-dropdown.vue\"\n/* harmony default export */ var picker_dropdown = (picker_dropdown_component.exports);\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/color-picker/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n/* harmony default export */ var color_picker_src_mainvue_type_script_lang_js_ = ({\n  name: 'ElColorPicker',\n\n  mixins: [emitter_default.a],\n\n  props: {\n    value: String,\n    showAlpha: Boolean,\n    colorFormat: String,\n    disabled: Boolean,\n    size: String,\n    popperClass: String,\n    predefine: Array\n  },\n\n  inject: {\n    elForm: {\n      default: ''\n    },\n    elFormItem: {\n      default: ''\n    }\n  },\n\n  directives: { Clickoutside: clickoutside_default.a },\n\n  computed: {\n    displayedColor: function displayedColor() {\n      if (!this.value && !this.showPanelColor) {\n        return 'transparent';\n      }\n\n      return this.displayedRgb(this.color, this.showAlpha);\n    },\n    _elFormItemSize: function _elFormItemSize() {\n      return (this.elFormItem || {}).elFormItemSize;\n    },\n    colorSize: function colorSize() {\n      return this.size || this._elFormItemSize || (this.$ELEMENT || {}).size;\n    },\n    colorDisabled: function colorDisabled() {\n      return this.disabled || (this.elForm || {}).disabled;\n    }\n  },\n\n  watch: {\n    value: function value(val) {\n      if (!val) {\n        this.showPanelColor = false;\n      } else if (val && val !== this.color.value) {\n        this.color.fromString(val);\n      }\n    },\n\n    color: {\n      deep: true,\n      handler: function handler() {\n        this.showPanelColor = true;\n      }\n    },\n    displayedColor: function displayedColor(val) {\n      if (!this.showPicker) return;\n      var currentValueColor = new src_color({\n        enableAlpha: this.showAlpha,\n        format: this.colorFormat\n      });\n      currentValueColor.fromString(this.value);\n\n      var currentValueColorRgb = this.displayedRgb(currentValueColor, this.showAlpha);\n      if (val !== currentValueColorRgb) {\n        this.$emit('active-change', val);\n      }\n    }\n  },\n\n  methods: {\n    handleTrigger: function handleTrigger() {\n      if (this.colorDisabled) return;\n      this.showPicker = !this.showPicker;\n    },\n    confirmValue: function confirmValue() {\n      var value = this.color.value;\n      this.$emit('input', value);\n      this.$emit('change', value);\n      this.dispatch('ElFormItem', 'el.form.change', value);\n      this.showPicker = false;\n    },\n    clearValue: function clearValue() {\n      this.$emit('input', null);\n      this.$emit('change', null);\n      if (this.value !== null) {\n        this.dispatch('ElFormItem', 'el.form.change', null);\n      }\n      this.showPanelColor = false;\n      this.showPicker = false;\n      this.resetColor();\n    },\n    hide: function hide() {\n      this.showPicker = false;\n      this.resetColor();\n    },\n    resetColor: function resetColor() {\n      var _this = this;\n\n      this.$nextTick(function (_) {\n        if (_this.value) {\n          _this.color.fromString(_this.value);\n        } else {\n          _this.showPanelColor = false;\n        }\n      });\n    },\n    displayedRgb: function displayedRgb(color, showAlpha) {\n      if (!(color instanceof src_color)) {\n        throw Error('color should be instance of Color Class');\n      }\n\n      var _color$toRgb = color.toRgb(),\n          r = _color$toRgb.r,\n          g = _color$toRgb.g,\n          b = _color$toRgb.b;\n\n      return showAlpha ? 'rgba(' + r + ', ' + g + ', ' + b + ', ' + color.get('alpha') / 100 + ')' : 'rgb(' + r + ', ' + g + ', ' + b + ')';\n    }\n  },\n\n  mounted: function mounted() {\n    var value = this.value;\n    if (value) {\n      this.color.fromString(value);\n    }\n    this.popperElm = this.$refs.dropdown.$el;\n  },\n  data: function data() {\n    var color = new src_color({\n      enableAlpha: this.showAlpha,\n      format: this.colorFormat\n    });\n\n    return {\n      color: color,\n      showPicker: false,\n      showPanelColor: false\n    };\n  },\n\n\n  components: {\n    PickerDropdown: picker_dropdown\n  }\n});\n// CONCATENATED MODULE: ./packages/color-picker/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_color_picker_src_mainvue_type_script_lang_js_ = (color_picker_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/color-picker/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar color_picker_src_main_component = normalizeComponent(\n  packages_color_picker_src_mainvue_type_script_lang_js_,\n  mainvue_type_template_id_55c8ade7_render,\n  mainvue_type_template_id_55c8ade7_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var color_picker_src_main_api; }\ncolor_picker_src_main_component.options.__file = \"packages/color-picker/src/main.vue\"\n/* harmony default export */ var color_picker_src_main = (color_picker_src_main_component.exports);\n// CONCATENATED MODULE: ./packages/color-picker/index.js\n\n\n/* istanbul ignore next */\ncolor_picker_src_main.install = function (Vue) {\n  Vue.component(color_picker_src_main.name, color_picker_src_main);\n};\n\n/* harmony default export */ var color_picker = (color_picker_src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/transfer/src/main.vue?vue&type=template&id=5c654dd8&\nvar mainvue_type_template_id_5c654dd8_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    { staticClass: \"el-transfer\" },\n    [\n      _c(\n        \"transfer-panel\",\n        _vm._b(\n          {\n            ref: \"leftPanel\",\n            attrs: {\n              data: _vm.sourceData,\n              title: _vm.titles[0] || _vm.t(\"el.transfer.titles.0\"),\n              \"default-checked\": _vm.leftDefaultChecked,\n              placeholder:\n                _vm.filterPlaceholder || _vm.t(\"el.transfer.filterPlaceholder\")\n            },\n            on: { \"checked-change\": _vm.onSourceCheckedChange }\n          },\n          \"transfer-panel\",\n          _vm.$props,\n          false\n        ),\n        [_vm._t(\"left-footer\")],\n        2\n      ),\n      _c(\n        \"div\",\n        { staticClass: \"el-transfer__buttons\" },\n        [\n          _c(\n            \"el-button\",\n            {\n              class: [\n                \"el-transfer__button\",\n                _vm.hasButtonTexts ? \"is-with-texts\" : \"\"\n              ],\n              attrs: {\n                type: \"primary\",\n                disabled: _vm.rightChecked.length === 0\n              },\n              nativeOn: {\n                click: function($event) {\n                  return _vm.addToLeft($event)\n                }\n              }\n            },\n            [\n              _c(\"i\", { staticClass: \"el-icon-arrow-left\" }),\n              _vm.buttonTexts[0] !== undefined\n                ? _c(\"span\", [_vm._v(_vm._s(_vm.buttonTexts[0]))])\n                : _vm._e()\n            ]\n          ),\n          _c(\n            \"el-button\",\n            {\n              class: [\n                \"el-transfer__button\",\n                _vm.hasButtonTexts ? \"is-with-texts\" : \"\"\n              ],\n              attrs: {\n                type: \"primary\",\n                disabled: _vm.leftChecked.length === 0\n              },\n              nativeOn: {\n                click: function($event) {\n                  return _vm.addToRight($event)\n                }\n              }\n            },\n            [\n              _vm.buttonTexts[1] !== undefined\n                ? _c(\"span\", [_vm._v(_vm._s(_vm.buttonTexts[1]))])\n                : _vm._e(),\n              _c(\"i\", { staticClass: \"el-icon-arrow-right\" })\n            ]\n          )\n        ],\n        1\n      ),\n      _c(\n        \"transfer-panel\",\n        _vm._b(\n          {\n            ref: \"rightPanel\",\n            attrs: {\n              data: _vm.targetData,\n              title: _vm.titles[1] || _vm.t(\"el.transfer.titles.1\"),\n              \"default-checked\": _vm.rightDefaultChecked,\n              placeholder:\n                _vm.filterPlaceholder || _vm.t(\"el.transfer.filterPlaceholder\")\n            },\n            on: { \"checked-change\": _vm.onTargetCheckedChange }\n          },\n          \"transfer-panel\",\n          _vm.$props,\n          false\n        ),\n        [_vm._t(\"right-footer\")],\n        2\n      )\n    ],\n    1\n  )\n}\nvar mainvue_type_template_id_5c654dd8_staticRenderFns = []\nmainvue_type_template_id_5c654dd8_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/transfer/src/main.vue?vue&type=template&id=5c654dd8&\n\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/transfer/src/transfer-panel.vue?vue&type=template&id=2ddab8bd&\nvar transfer_panelvue_type_template_id_2ddab8bd_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\"div\", { staticClass: \"el-transfer-panel\" }, [\n    _c(\n      \"p\",\n      { staticClass: \"el-transfer-panel__header\" },\n      [\n        _c(\n          \"el-checkbox\",\n          {\n            attrs: { indeterminate: _vm.isIndeterminate },\n            on: { change: _vm.handleAllCheckedChange },\n            model: {\n              value: _vm.allChecked,\n              callback: function($$v) {\n                _vm.allChecked = $$v\n              },\n              expression: \"allChecked\"\n            }\n          },\n          [\n            _vm._v(\"\\n      \" + _vm._s(_vm.title) + \"\\n      \"),\n            _c(\"span\", [_vm._v(_vm._s(_vm.checkedSummary))])\n          ]\n        )\n      ],\n      1\n    ),\n    _c(\n      \"div\",\n      {\n        class: [\n          \"el-transfer-panel__body\",\n          _vm.hasFooter ? \"is-with-footer\" : \"\"\n        ]\n      },\n      [\n        _vm.filterable\n          ? _c(\n              \"el-input\",\n              {\n                staticClass: \"el-transfer-panel__filter\",\n                attrs: { size: \"small\", placeholder: _vm.placeholder },\n                nativeOn: {\n                  mouseenter: function($event) {\n                    _vm.inputHover = true\n                  },\n                  mouseleave: function($event) {\n                    _vm.inputHover = false\n                  }\n                },\n                model: {\n                  value: _vm.query,\n                  callback: function($$v) {\n                    _vm.query = $$v\n                  },\n                  expression: \"query\"\n                }\n              },\n              [\n                _c(\"i\", {\n                  class: [\"el-input__icon\", \"el-icon-\" + _vm.inputIcon],\n                  attrs: { slot: \"prefix\" },\n                  on: { click: _vm.clearQuery },\n                  slot: \"prefix\"\n                })\n              ]\n            )\n          : _vm._e(),\n        _c(\n          \"el-checkbox-group\",\n          {\n            directives: [\n              {\n                name: \"show\",\n                rawName: \"v-show\",\n                value: !_vm.hasNoMatch && _vm.data.length > 0,\n                expression: \"!hasNoMatch && data.length > 0\"\n              }\n            ],\n            staticClass: \"el-transfer-panel__list\",\n            class: { \"is-filterable\": _vm.filterable },\n            model: {\n              value: _vm.checked,\n              callback: function($$v) {\n                _vm.checked = $$v\n              },\n              expression: \"checked\"\n            }\n          },\n          _vm._l(_vm.filteredData, function(item) {\n            return _c(\n              \"el-checkbox\",\n              {\n                key: item[_vm.keyProp],\n                staticClass: \"el-transfer-panel__item\",\n                attrs: {\n                  label: item[_vm.keyProp],\n                  disabled: item[_vm.disabledProp]\n                }\n              },\n              [_c(\"option-content\", { attrs: { option: item } })],\n              1\n            )\n          }),\n          1\n        ),\n        _c(\n          \"p\",\n          {\n            directives: [\n              {\n                name: \"show\",\n                rawName: \"v-show\",\n                value: _vm.hasNoMatch,\n                expression: \"hasNoMatch\"\n              }\n            ],\n            staticClass: \"el-transfer-panel__empty\"\n          },\n          [_vm._v(_vm._s(_vm.t(\"el.transfer.noMatch\")))]\n        ),\n        _c(\n          \"p\",\n          {\n            directives: [\n              {\n                name: \"show\",\n                rawName: \"v-show\",\n                value: _vm.data.length === 0 && !_vm.hasNoMatch,\n                expression: \"data.length === 0 && !hasNoMatch\"\n              }\n            ],\n            staticClass: \"el-transfer-panel__empty\"\n          },\n          [_vm._v(_vm._s(_vm.t(\"el.transfer.noData\")))]\n        )\n      ],\n      1\n    ),\n    _vm.hasFooter\n      ? _c(\n          \"p\",\n          { staticClass: \"el-transfer-panel__footer\" },\n          [_vm._t(\"default\")],\n          2\n        )\n      : _vm._e()\n  ])\n}\nvar transfer_panelvue_type_template_id_2ddab8bd_staticRenderFns = []\ntransfer_panelvue_type_template_id_2ddab8bd_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/transfer/src/transfer-panel.vue?vue&type=template&id=2ddab8bd&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/transfer/src/transfer-panel.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n/* harmony default export */ var transfer_panelvue_type_script_lang_js_ = ({\n  mixins: [locale_default.a],\n\n  name: 'ElTransferPanel',\n\n  componentName: 'ElTransferPanel',\n\n  components: {\n    ElCheckboxGroup: checkbox_group_default.a,\n    ElCheckbox: checkbox_default.a,\n    ElInput: input_default.a,\n    OptionContent: {\n      props: {\n        option: Object\n      },\n      render: function render(h) {\n        var getParent = function getParent(vm) {\n          if (vm.$options.componentName === 'ElTransferPanel') {\n            return vm;\n          } else if (vm.$parent) {\n            return getParent(vm.$parent);\n          } else {\n            return vm;\n          }\n        };\n        var panel = getParent(this);\n        var transfer = panel.$parent || panel;\n        return panel.renderContent ? panel.renderContent(h, this.option) : transfer.$scopedSlots.default ? transfer.$scopedSlots.default({ option: this.option }) : h('span', [this.option[panel.labelProp] || this.option[panel.keyProp]]);\n      }\n    }\n  },\n\n  props: {\n    data: {\n      type: Array,\n      default: function _default() {\n        return [];\n      }\n    },\n    renderContent: Function,\n    placeholder: String,\n    title: String,\n    filterable: Boolean,\n    format: Object,\n    filterMethod: Function,\n    defaultChecked: Array,\n    props: Object\n  },\n\n  data: function data() {\n    return {\n      checked: [],\n      allChecked: false,\n      query: '',\n      inputHover: false,\n      checkChangeByUser: true\n    };\n  },\n\n\n  watch: {\n    checked: function checked(val, oldVal) {\n      this.updateAllChecked();\n      if (this.checkChangeByUser) {\n        var movedKeys = val.concat(oldVal).filter(function (v) {\n          return val.indexOf(v) === -1 || oldVal.indexOf(v) === -1;\n        });\n        this.$emit('checked-change', val, movedKeys);\n      } else {\n        this.$emit('checked-change', val);\n        this.checkChangeByUser = true;\n      }\n    },\n    data: function data() {\n      var _this = this;\n\n      var checked = [];\n      var filteredDataKeys = this.filteredData.map(function (item) {\n        return item[_this.keyProp];\n      });\n      this.checked.forEach(function (item) {\n        if (filteredDataKeys.indexOf(item) > -1) {\n          checked.push(item);\n        }\n      });\n      this.checkChangeByUser = false;\n      this.checked = checked;\n    },\n    checkableData: function checkableData() {\n      this.updateAllChecked();\n    },\n\n\n    defaultChecked: {\n      immediate: true,\n      handler: function handler(val, oldVal) {\n        var _this2 = this;\n\n        if (oldVal && val.length === oldVal.length && val.every(function (item) {\n          return oldVal.indexOf(item) > -1;\n        })) return;\n        var checked = [];\n        var checkableDataKeys = this.checkableData.map(function (item) {\n          return item[_this2.keyProp];\n        });\n        val.forEach(function (item) {\n          if (checkableDataKeys.indexOf(item) > -1) {\n            checked.push(item);\n          }\n        });\n        this.checkChangeByUser = false;\n        this.checked = checked;\n      }\n    }\n  },\n\n  computed: {\n    filteredData: function filteredData() {\n      var _this3 = this;\n\n      return this.data.filter(function (item) {\n        if (typeof _this3.filterMethod === 'function') {\n          return _this3.filterMethod(_this3.query, item);\n        } else {\n          var label = item[_this3.labelProp] || item[_this3.keyProp].toString();\n          return label.toLowerCase().indexOf(_this3.query.toLowerCase()) > -1;\n        }\n      });\n    },\n    checkableData: function checkableData() {\n      var _this4 = this;\n\n      return this.filteredData.filter(function (item) {\n        return !item[_this4.disabledProp];\n      });\n    },\n    checkedSummary: function checkedSummary() {\n      var checkedLength = this.checked.length;\n      var dataLength = this.data.length;\n      var _format = this.format,\n          noChecked = _format.noChecked,\n          hasChecked = _format.hasChecked;\n\n      if (noChecked && hasChecked) {\n        return checkedLength > 0 ? hasChecked.replace(/\\${checked}/g, checkedLength).replace(/\\${total}/g, dataLength) : noChecked.replace(/\\${total}/g, dataLength);\n      } else {\n        return checkedLength + '/' + dataLength;\n      }\n    },\n    isIndeterminate: function isIndeterminate() {\n      var checkedLength = this.checked.length;\n      return checkedLength > 0 && checkedLength < this.checkableData.length;\n    },\n    hasNoMatch: function hasNoMatch() {\n      return this.query.length > 0 && this.filteredData.length === 0;\n    },\n    inputIcon: function inputIcon() {\n      return this.query.length > 0 && this.inputHover ? 'circle-close' : 'search';\n    },\n    labelProp: function labelProp() {\n      return this.props.label || 'label';\n    },\n    keyProp: function keyProp() {\n      return this.props.key || 'key';\n    },\n    disabledProp: function disabledProp() {\n      return this.props.disabled || 'disabled';\n    },\n    hasFooter: function hasFooter() {\n      return !!this.$slots.default;\n    }\n  },\n\n  methods: {\n    updateAllChecked: function updateAllChecked() {\n      var _this5 = this;\n\n      var checkableDataKeys = this.checkableData.map(function (item) {\n        return item[_this5.keyProp];\n      });\n      this.allChecked = checkableDataKeys.length > 0 && checkableDataKeys.every(function (item) {\n        return _this5.checked.indexOf(item) > -1;\n      });\n    },\n    handleAllCheckedChange: function handleAllCheckedChange(value) {\n      var _this6 = this;\n\n      this.checked = value ? this.checkableData.map(function (item) {\n        return item[_this6.keyProp];\n      }) : [];\n    },\n    clearQuery: function clearQuery() {\n      if (this.inputIcon === 'circle-close') {\n        this.query = '';\n      }\n    }\n  }\n});\n// CONCATENATED MODULE: ./packages/transfer/src/transfer-panel.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_transfer_panelvue_type_script_lang_js_ = (transfer_panelvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/transfer/src/transfer-panel.vue\n\n\n\n\n\n/* normalize component */\n\nvar transfer_panel_component = normalizeComponent(\n  src_transfer_panelvue_type_script_lang_js_,\n  transfer_panelvue_type_template_id_2ddab8bd_render,\n  transfer_panelvue_type_template_id_2ddab8bd_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var transfer_panel_api; }\ntransfer_panel_component.options.__file = \"packages/transfer/src/transfer-panel.vue\"\n/* harmony default export */ var transfer_panel = (transfer_panel_component.exports);\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/transfer/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n\n/* harmony default export */ var transfer_src_mainvue_type_script_lang_js_ = ({\n  name: 'ElTransfer',\n\n  mixins: [emitter_default.a, locale_default.a, migrating_default.a],\n\n  components: {\n    TransferPanel: transfer_panel,\n    ElButton: button_default.a\n  },\n\n  props: {\n    data: {\n      type: Array,\n      default: function _default() {\n        return [];\n      }\n    },\n    titles: {\n      type: Array,\n      default: function _default() {\n        return [];\n      }\n    },\n    buttonTexts: {\n      type: Array,\n      default: function _default() {\n        return [];\n      }\n    },\n    filterPlaceholder: {\n      type: String,\n      default: ''\n    },\n    filterMethod: Function,\n    leftDefaultChecked: {\n      type: Array,\n      default: function _default() {\n        return [];\n      }\n    },\n    rightDefaultChecked: {\n      type: Array,\n      default: function _default() {\n        return [];\n      }\n    },\n    renderContent: Function,\n    value: {\n      type: Array,\n      default: function _default() {\n        return [];\n      }\n    },\n    format: {\n      type: Object,\n      default: function _default() {\n        return {};\n      }\n    },\n    filterable: Boolean,\n    props: {\n      type: Object,\n      default: function _default() {\n        return {\n          label: 'label',\n          key: 'key',\n          disabled: 'disabled'\n        };\n      }\n    },\n    targetOrder: {\n      type: String,\n      default: 'original'\n    }\n  },\n\n  data: function data() {\n    return {\n      leftChecked: [],\n      rightChecked: []\n    };\n  },\n\n\n  computed: {\n    dataObj: function dataObj() {\n      var key = this.props.key;\n      return this.data.reduce(function (o, cur) {\n        return (o[cur[key]] = cur) && o;\n      }, {});\n    },\n    sourceData: function sourceData() {\n      var _this = this;\n\n      return this.data.filter(function (item) {\n        return _this.value.indexOf(item[_this.props.key]) === -1;\n      });\n    },\n    targetData: function targetData() {\n      var _this2 = this;\n\n      if (this.targetOrder === 'original') {\n        return this.data.filter(function (item) {\n          return _this2.value.indexOf(item[_this2.props.key]) > -1;\n        });\n      } else {\n        return this.value.reduce(function (arr, cur) {\n          var val = _this2.dataObj[cur];\n          if (val) {\n            arr.push(val);\n          }\n          return arr;\n        }, []);\n      }\n    },\n    hasButtonTexts: function hasButtonTexts() {\n      return this.buttonTexts.length === 2;\n    }\n  },\n\n  watch: {\n    value: function value(val) {\n      this.dispatch('ElFormItem', 'el.form.change', val);\n    }\n  },\n\n  methods: {\n    getMigratingConfig: function getMigratingConfig() {\n      return {\n        props: {\n          'footer-format': 'footer-format is renamed to format.'\n        }\n      };\n    },\n    onSourceCheckedChange: function onSourceCheckedChange(val, movedKeys) {\n      this.leftChecked = val;\n      if (movedKeys === undefined) return;\n      this.$emit('left-check-change', val, movedKeys);\n    },\n    onTargetCheckedChange: function onTargetCheckedChange(val, movedKeys) {\n      this.rightChecked = val;\n      if (movedKeys === undefined) return;\n      this.$emit('right-check-change', val, movedKeys);\n    },\n    addToLeft: function addToLeft() {\n      var currentValue = this.value.slice();\n      this.rightChecked.forEach(function (item) {\n        var index = currentValue.indexOf(item);\n        if (index > -1) {\n          currentValue.splice(index, 1);\n        }\n      });\n      this.$emit('input', currentValue);\n      this.$emit('change', currentValue, 'left', this.rightChecked);\n    },\n    addToRight: function addToRight() {\n      var _this3 = this;\n\n      var currentValue = this.value.slice();\n      var itemsToBeMoved = [];\n      var key = this.props.key;\n      this.data.forEach(function (item) {\n        var itemKey = item[key];\n        if (_this3.leftChecked.indexOf(itemKey) > -1 && _this3.value.indexOf(itemKey) === -1) {\n          itemsToBeMoved.push(itemKey);\n        }\n      });\n      currentValue = this.targetOrder === 'unshift' ? itemsToBeMoved.concat(currentValue) : currentValue.concat(itemsToBeMoved);\n      this.$emit('input', currentValue);\n      this.$emit('change', currentValue, 'right', this.leftChecked);\n    },\n    clearQuery: function clearQuery(which) {\n      if (which === 'left') {\n        this.$refs.leftPanel.query = '';\n      } else if (which === 'right') {\n        this.$refs.rightPanel.query = '';\n      }\n    }\n  }\n});\n// CONCATENATED MODULE: ./packages/transfer/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_transfer_src_mainvue_type_script_lang_js_ = (transfer_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/transfer/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar transfer_src_main_component = normalizeComponent(\n  packages_transfer_src_mainvue_type_script_lang_js_,\n  mainvue_type_template_id_5c654dd8_render,\n  mainvue_type_template_id_5c654dd8_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var transfer_src_main_api; }\ntransfer_src_main_component.options.__file = \"packages/transfer/src/main.vue\"\n/* harmony default export */ var transfer_src_main = (transfer_src_main_component.exports);\n// CONCATENATED MODULE: ./packages/transfer/index.js\n\n\n/* istanbul ignore next */\ntransfer_src_main.install = function (Vue) {\n  Vue.component(transfer_src_main.name, transfer_src_main);\n};\n\n/* harmony default export */ var transfer = (transfer_src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/container/src/main.vue?vue&type=template&id=5bf181d4&\nvar mainvue_type_template_id_5bf181d4_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"section\",\n    { staticClass: \"el-container\", class: { \"is-vertical\": _vm.isVertical } },\n    [_vm._t(\"default\")],\n    2\n  )\n}\nvar mainvue_type_template_id_5bf181d4_staticRenderFns = []\nmainvue_type_template_id_5bf181d4_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/container/src/main.vue?vue&type=template&id=5bf181d4&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/container/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ var container_src_mainvue_type_script_lang_js_ = ({\n  name: 'ElContainer',\n\n  componentName: 'ElContainer',\n\n  props: {\n    direction: String\n  },\n\n  computed: {\n    isVertical: function isVertical() {\n      if (this.direction === 'vertical') {\n        return true;\n      } else if (this.direction === 'horizontal') {\n        return false;\n      }\n      return this.$slots && this.$slots.default ? this.$slots.default.some(function (vnode) {\n        var tag = vnode.componentOptions && vnode.componentOptions.tag;\n        return tag === 'el-header' || tag === 'el-footer';\n      }) : false;\n    }\n  }\n});\n// CONCATENATED MODULE: ./packages/container/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_container_src_mainvue_type_script_lang_js_ = (container_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/container/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar container_src_main_component = normalizeComponent(\n  packages_container_src_mainvue_type_script_lang_js_,\n  mainvue_type_template_id_5bf181d4_render,\n  mainvue_type_template_id_5bf181d4_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var container_src_main_api; }\ncontainer_src_main_component.options.__file = \"packages/container/src/main.vue\"\n/* harmony default export */ var container_src_main = (container_src_main_component.exports);\n// CONCATENATED MODULE: ./packages/container/index.js\n\n\n/* istanbul ignore next */\ncontainer_src_main.install = function (Vue) {\n  Vue.component(container_src_main.name, container_src_main);\n};\n\n/* harmony default export */ var packages_container = (container_src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/header/src/main.vue?vue&type=template&id=2b296ab2&\nvar mainvue_type_template_id_2b296ab2_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"header\",\n    { staticClass: \"el-header\", style: { height: _vm.height } },\n    [_vm._t(\"default\")],\n    2\n  )\n}\nvar mainvue_type_template_id_2b296ab2_staticRenderFns = []\nmainvue_type_template_id_2b296ab2_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/header/src/main.vue?vue&type=template&id=2b296ab2&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/header/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ var header_src_mainvue_type_script_lang_js_ = ({\n  name: 'ElHeader',\n\n  componentName: 'ElHeader',\n\n  props: {\n    height: {\n      type: String,\n      default: '60px'\n    }\n  }\n});\n// CONCATENATED MODULE: ./packages/header/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_header_src_mainvue_type_script_lang_js_ = (header_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/header/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar header_src_main_component = normalizeComponent(\n  packages_header_src_mainvue_type_script_lang_js_,\n  mainvue_type_template_id_2b296ab2_render,\n  mainvue_type_template_id_2b296ab2_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var header_src_main_api; }\nheader_src_main_component.options.__file = \"packages/header/src/main.vue\"\n/* harmony default export */ var header_src_main = (header_src_main_component.exports);\n// CONCATENATED MODULE: ./packages/header/index.js\n\n\n/* istanbul ignore next */\nheader_src_main.install = function (Vue) {\n  Vue.component(header_src_main.name, header_src_main);\n};\n\n/* harmony default export */ var header = (header_src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/aside/src/main.vue?vue&type=template&id=03411dbf&\nvar mainvue_type_template_id_03411dbf_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"aside\",\n    { staticClass: \"el-aside\", style: { width: _vm.width } },\n    [_vm._t(\"default\")],\n    2\n  )\n}\nvar mainvue_type_template_id_03411dbf_staticRenderFns = []\nmainvue_type_template_id_03411dbf_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/aside/src/main.vue?vue&type=template&id=03411dbf&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/aside/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ var aside_src_mainvue_type_script_lang_js_ = ({\n  name: 'ElAside',\n\n  componentName: 'ElAside',\n\n  props: {\n    width: {\n      type: String,\n      default: '300px'\n    }\n  }\n});\n// CONCATENATED MODULE: ./packages/aside/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_aside_src_mainvue_type_script_lang_js_ = (aside_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/aside/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar aside_src_main_component = normalizeComponent(\n  packages_aside_src_mainvue_type_script_lang_js_,\n  mainvue_type_template_id_03411dbf_render,\n  mainvue_type_template_id_03411dbf_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var aside_src_main_api; }\naside_src_main_component.options.__file = \"packages/aside/src/main.vue\"\n/* harmony default export */ var aside_src_main = (aside_src_main_component.exports);\n// CONCATENATED MODULE: ./packages/aside/index.js\n\n\n/* istanbul ignore next */\naside_src_main.install = function (Vue) {\n  Vue.component(aside_src_main.name, aside_src_main);\n};\n\n/* harmony default export */ var aside = (aside_src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/main/src/main.vue?vue&type=template&id=2a3a7406&\nvar mainvue_type_template_id_2a3a7406_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\"main\", { staticClass: \"el-main\" }, [_vm._t(\"default\")], 2)\n}\nvar mainvue_type_template_id_2a3a7406_staticRenderFns = []\nmainvue_type_template_id_2a3a7406_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/main/src/main.vue?vue&type=template&id=2a3a7406&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/main/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ var main_src_mainvue_type_script_lang_js_ = ({\n  name: 'ElMain',\n  componentName: 'ElMain'\n});\n// CONCATENATED MODULE: ./packages/main/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_main_src_mainvue_type_script_lang_js_ = (main_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/main/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar main_src_main_component = normalizeComponent(\n  packages_main_src_mainvue_type_script_lang_js_,\n  mainvue_type_template_id_2a3a7406_render,\n  mainvue_type_template_id_2a3a7406_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var main_src_main_api; }\nmain_src_main_component.options.__file = \"packages/main/src/main.vue\"\n/* harmony default export */ var main_src_main = (main_src_main_component.exports);\n// CONCATENATED MODULE: ./packages/main/index.js\n\n\n/* istanbul ignore next */\nmain_src_main.install = function (Vue) {\n  Vue.component(main_src_main.name, main_src_main);\n};\n\n/* harmony default export */ var packages_main = (main_src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/footer/src/main.vue?vue&type=template&id=80210338&\nvar mainvue_type_template_id_80210338_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"footer\",\n    { staticClass: \"el-footer\", style: { height: _vm.height } },\n    [_vm._t(\"default\")],\n    2\n  )\n}\nvar mainvue_type_template_id_80210338_staticRenderFns = []\nmainvue_type_template_id_80210338_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/footer/src/main.vue?vue&type=template&id=80210338&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/footer/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ var footer_src_mainvue_type_script_lang_js_ = ({\n  name: 'ElFooter',\n\n  componentName: 'ElFooter',\n\n  props: {\n    height: {\n      type: String,\n      default: '60px'\n    }\n  }\n});\n// CONCATENATED MODULE: ./packages/footer/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_footer_src_mainvue_type_script_lang_js_ = (footer_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/footer/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar footer_src_main_component = normalizeComponent(\n  packages_footer_src_mainvue_type_script_lang_js_,\n  mainvue_type_template_id_80210338_render,\n  mainvue_type_template_id_80210338_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var footer_src_main_api; }\nfooter_src_main_component.options.__file = \"packages/footer/src/main.vue\"\n/* harmony default export */ var footer_src_main = (footer_src_main_component.exports);\n// CONCATENATED MODULE: ./packages/footer/index.js\n\n\n/* istanbul ignore next */\nfooter_src_main.install = function (Vue) {\n  Vue.component(footer_src_main.name, footer_src_main);\n};\n\n/* harmony default export */ var footer = (footer_src_main);\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/timeline/src/main.vue?vue&type=script&lang=js&\n\n/* harmony default export */ var timeline_src_mainvue_type_script_lang_js_ = ({\n  name: 'ElTimeline',\n\n  props: {\n    reverse: {\n      type: Boolean,\n      default: false\n    }\n  },\n\n  provide: function provide() {\n    return {\n      timeline: this\n    };\n  },\n  render: function render() {\n    var h = arguments[0];\n\n    var reverse = this.reverse;\n    var classes = {\n      'el-timeline': true,\n      'is-reverse': reverse\n    };\n    var slots = this.$slots.default || [];\n    if (reverse) {\n      slots = slots.reverse();\n    }\n    return h(\n      'ul',\n      { 'class': classes },\n      [slots]\n    );\n  }\n});\n// CONCATENATED MODULE: ./packages/timeline/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_timeline_src_mainvue_type_script_lang_js_ = (timeline_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/timeline/src/main.vue\nvar main_render, main_staticRenderFns\n\n\n\n\n/* normalize component */\n\nvar timeline_src_main_component = normalizeComponent(\n  packages_timeline_src_mainvue_type_script_lang_js_,\n  main_render,\n  main_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var timeline_src_main_api; }\ntimeline_src_main_component.options.__file = \"packages/timeline/src/main.vue\"\n/* harmony default export */ var timeline_src_main = (timeline_src_main_component.exports);\n// CONCATENATED MODULE: ./packages/timeline/index.js\n\n\n/* istanbul ignore next */\ntimeline_src_main.install = function (Vue) {\n  Vue.component(timeline_src_main.name, timeline_src_main);\n};\n\n/* harmony default export */ var timeline = (timeline_src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/timeline/src/item.vue?vue&type=template&id=61a69e50&\nvar itemvue_type_template_id_61a69e50_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\"li\", { staticClass: \"el-timeline-item\" }, [\n    _c(\"div\", { staticClass: \"el-timeline-item__tail\" }),\n    !_vm.$slots.dot\n      ? _c(\n          \"div\",\n          {\n            staticClass: \"el-timeline-item__node\",\n            class: [\n              \"el-timeline-item__node--\" + (_vm.size || \"\"),\n              \"el-timeline-item__node--\" + (_vm.type || \"\")\n            ],\n            style: {\n              backgroundColor: _vm.color\n            }\n          },\n          [\n            _vm.icon\n              ? _c(\"i\", {\n                  staticClass: \"el-timeline-item__icon\",\n                  class: _vm.icon\n                })\n              : _vm._e()\n          ]\n        )\n      : _vm._e(),\n    _vm.$slots.dot\n      ? _c(\"div\", { staticClass: \"el-timeline-item__dot\" }, [_vm._t(\"dot\")], 2)\n      : _vm._e(),\n    _c(\"div\", { staticClass: \"el-timeline-item__wrapper\" }, [\n      !_vm.hideTimestamp && _vm.placement === \"top\"\n        ? _c(\"div\", { staticClass: \"el-timeline-item__timestamp is-top\" }, [\n            _vm._v(\"\\n      \" + _vm._s(_vm.timestamp) + \"\\n    \")\n          ])\n        : _vm._e(),\n      _c(\n        \"div\",\n        { staticClass: \"el-timeline-item__content\" },\n        [_vm._t(\"default\")],\n        2\n      ),\n      !_vm.hideTimestamp && _vm.placement === \"bottom\"\n        ? _c(\"div\", { staticClass: \"el-timeline-item__timestamp is-bottom\" }, [\n            _vm._v(\"\\n      \" + _vm._s(_vm.timestamp) + \"\\n    \")\n          ])\n        : _vm._e()\n    ])\n  ])\n}\nvar itemvue_type_template_id_61a69e50_staticRenderFns = []\nitemvue_type_template_id_61a69e50_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/timeline/src/item.vue?vue&type=template&id=61a69e50&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/timeline/src/item.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ var timeline_src_itemvue_type_script_lang_js_ = ({\n  name: 'ElTimelineItem',\n\n  inject: ['timeline'],\n\n  props: {\n    timestamp: String,\n\n    hideTimestamp: {\n      type: Boolean,\n      default: false\n    },\n\n    placement: {\n      type: String,\n      default: 'bottom'\n    },\n\n    type: String,\n\n    color: String,\n\n    size: {\n      type: String,\n      default: 'normal'\n    },\n\n    icon: String\n  }\n});\n// CONCATENATED MODULE: ./packages/timeline/src/item.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_timeline_src_itemvue_type_script_lang_js_ = (timeline_src_itemvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/timeline/src/item.vue\n\n\n\n\n\n/* normalize component */\n\nvar src_item_component = normalizeComponent(\n  packages_timeline_src_itemvue_type_script_lang_js_,\n  itemvue_type_template_id_61a69e50_render,\n  itemvue_type_template_id_61a69e50_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var src_item_api; }\nsrc_item_component.options.__file = \"packages/timeline/src/item.vue\"\n/* harmony default export */ var timeline_src_item = (src_item_component.exports);\n// CONCATENATED MODULE: ./packages/timeline-item/index.js\n\n\n/* istanbul ignore next */\ntimeline_src_item.install = function (Vue) {\n  Vue.component(timeline_src_item.name, timeline_src_item);\n};\n\n/* harmony default export */ var timeline_item = (timeline_src_item);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/link/src/main.vue?vue&type=template&id=01cf3b65&\nvar mainvue_type_template_id_01cf3b65_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"a\",\n    _vm._b(\n      {\n        class: [\n          \"el-link\",\n          _vm.type ? \"el-link--\" + _vm.type : \"\",\n          _vm.disabled && \"is-disabled\",\n          _vm.underline && !_vm.disabled && \"is-underline\"\n        ],\n        attrs: { href: _vm.disabled ? null : _vm.href },\n        on: { click: _vm.handleClick }\n      },\n      \"a\",\n      _vm.$attrs,\n      false\n    ),\n    [\n      _vm.icon ? _c(\"i\", { class: _vm.icon }) : _vm._e(),\n      _vm.$slots.default\n        ? _c(\"span\", { staticClass: \"el-link--inner\" }, [_vm._t(\"default\")], 2)\n        : _vm._e(),\n      _vm.$slots.icon ? [_vm.$slots.icon ? _vm._t(\"icon\") : _vm._e()] : _vm._e()\n    ],\n    2\n  )\n}\nvar mainvue_type_template_id_01cf3b65_staticRenderFns = []\nmainvue_type_template_id_01cf3b65_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/link/src/main.vue?vue&type=template&id=01cf3b65&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/link/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n/* harmony default export */ var link_src_mainvue_type_script_lang_js_ = ({\n  name: 'ElLink',\n\n  props: {\n    type: {\n      type: String,\n      default: 'default'\n    },\n    underline: {\n      type: Boolean,\n      default: true\n    },\n    disabled: Boolean,\n    href: String,\n    icon: String\n  },\n\n  methods: {\n    handleClick: function handleClick(event) {\n      if (!this.disabled) {\n        if (!this.href) {\n          this.$emit('click', event);\n        }\n      }\n    }\n  }\n});\n// CONCATENATED MODULE: ./packages/link/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_link_src_mainvue_type_script_lang_js_ = (link_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/link/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar link_src_main_component = normalizeComponent(\n  packages_link_src_mainvue_type_script_lang_js_,\n  mainvue_type_template_id_01cf3b65_render,\n  mainvue_type_template_id_01cf3b65_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var link_src_main_api; }\nlink_src_main_component.options.__file = \"packages/link/src/main.vue\"\n/* harmony default export */ var link_src_main = (link_src_main_component.exports);\n// CONCATENATED MODULE: ./packages/link/index.js\n\n\n/* istanbul ignore next */\nlink_src_main.install = function (Vue) {\n  Vue.component(link_src_main.name, link_src_main);\n};\n\n/* harmony default export */ var packages_link = (link_src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/divider/src/main.vue?vue&type=template&id=7fa02a7e&functional=true&\nvar mainvue_type_template_id_7fa02a7e_functional_true_render = function(_h, _vm) {\n  var _c = _vm._c\n  return _c(\n    \"div\",\n    _vm._g(\n      _vm._b(\n        {\n          class: [\n            _vm.data.staticClass,\n            \"el-divider\",\n            \"el-divider--\" + _vm.props.direction\n          ]\n        },\n        \"div\",\n        _vm.data.attrs,\n        false\n      ),\n      _vm.listeners\n    ),\n    [\n      _vm.slots().default && _vm.props.direction !== \"vertical\"\n        ? _c(\n            \"div\",\n            { class: [\"el-divider__text\", \"is-\" + _vm.props.contentPosition] },\n            [_vm._t(\"default\")],\n            2\n          )\n        : _vm._e()\n    ]\n  )\n}\nvar mainvue_type_template_id_7fa02a7e_functional_true_staticRenderFns = []\nmainvue_type_template_id_7fa02a7e_functional_true_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/divider/src/main.vue?vue&type=template&id=7fa02a7e&functional=true&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/divider/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ var divider_src_mainvue_type_script_lang_js_ = ({\n  name: 'ElDivider',\n  props: {\n    direction: {\n      type: String,\n      default: 'horizontal',\n      validator: function validator(val) {\n        return ['horizontal', 'vertical'].indexOf(val) !== -1;\n      }\n    },\n    contentPosition: {\n      type: String,\n      default: 'center',\n      validator: function validator(val) {\n        return ['left', 'center', 'right'].indexOf(val) !== -1;\n      }\n    }\n  }\n});\n// CONCATENATED MODULE: ./packages/divider/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_divider_src_mainvue_type_script_lang_js_ = (divider_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/divider/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar divider_src_main_component = normalizeComponent(\n  packages_divider_src_mainvue_type_script_lang_js_,\n  mainvue_type_template_id_7fa02a7e_functional_true_render,\n  mainvue_type_template_id_7fa02a7e_functional_true_staticRenderFns,\n  true,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var divider_src_main_api; }\ndivider_src_main_component.options.__file = \"packages/divider/src/main.vue\"\n/* harmony default export */ var divider_src_main = (divider_src_main_component.exports);\n// CONCATENATED MODULE: ./packages/divider/index.js\n\n\n/* istanbul ignore next */\ndivider_src_main.install = function (Vue) {\n  Vue.component(divider_src_main.name, divider_src_main);\n};\n\n/* harmony default export */ var divider = (divider_src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/image/src/main.vue?vue&type=template&id=44d84a7c&\nvar mainvue_type_template_id_44d84a7c_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    { staticClass: \"el-image\" },\n    [\n      _vm.loading\n        ? _vm._t(\"placeholder\", [\n            _c(\"div\", { staticClass: \"el-image__placeholder\" })\n          ])\n        : _vm.error\n        ? _vm._t(\"error\", [\n            _c(\"div\", { staticClass: \"el-image__error\" }, [\n              _vm._v(_vm._s(_vm.t(\"el.image.error\")))\n            ])\n          ])\n        : _c(\n            \"img\",\n            _vm._g(\n              _vm._b(\n                {\n                  staticClass: \"el-image__inner\",\n                  class: {\n                    \"el-image__inner--center\": _vm.alignCenter,\n                    \"el-image__preview\": _vm.preview\n                  },\n                  style: _vm.imageStyle,\n                  attrs: { src: _vm.src },\n                  on: { click: _vm.clickHandler }\n                },\n                \"img\",\n                _vm.$attrs,\n                false\n              ),\n              _vm.$listeners\n            )\n          ),\n      _vm.preview\n        ? [\n            _vm.showViewer\n              ? _c(\"image-viewer\", {\n                  attrs: {\n                    \"z-index\": _vm.zIndex,\n                    \"initial-index\": _vm.imageIndex,\n                    \"on-close\": _vm.closeViewer,\n                    \"url-list\": _vm.previewSrcList\n                  }\n                })\n              : _vm._e()\n          ]\n        : _vm._e()\n    ],\n    2\n  )\n}\nvar mainvue_type_template_id_44d84a7c_staticRenderFns = []\nmainvue_type_template_id_44d84a7c_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/image/src/main.vue?vue&type=template&id=44d84a7c&\n\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/image/src/image-viewer.vue?vue&type=template&id=5e73b307&\nvar image_viewervue_type_template_id_5e73b307_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\"transition\", { attrs: { name: \"viewer-fade\" } }, [\n    _c(\n      \"div\",\n      {\n        ref: \"el-image-viewer__wrapper\",\n        staticClass: \"el-image-viewer__wrapper\",\n        style: { \"z-index\": _vm.viewerZIndex },\n        attrs: { tabindex: \"-1\" }\n      },\n      [\n        _c(\"div\", {\n          staticClass: \"el-image-viewer__mask\",\n          on: {\n            click: function($event) {\n              if ($event.target !== $event.currentTarget) {\n                return null\n              }\n              return _vm.handleMaskClick($event)\n            }\n          }\n        }),\n        _c(\n          \"span\",\n          {\n            staticClass: \"el-image-viewer__btn el-image-viewer__close\",\n            on: { click: _vm.hide }\n          },\n          [_c(\"i\", { staticClass: \"el-icon-close\" })]\n        ),\n        !_vm.isSingle\n          ? [\n              _c(\n                \"span\",\n                {\n                  staticClass: \"el-image-viewer__btn el-image-viewer__prev\",\n                  class: { \"is-disabled\": !_vm.infinite && _vm.isFirst },\n                  on: { click: _vm.prev }\n                },\n                [_c(\"i\", { staticClass: \"el-icon-arrow-left\" })]\n              ),\n              _c(\n                \"span\",\n                {\n                  staticClass: \"el-image-viewer__btn el-image-viewer__next\",\n                  class: { \"is-disabled\": !_vm.infinite && _vm.isLast },\n                  on: { click: _vm.next }\n                },\n                [_c(\"i\", { staticClass: \"el-icon-arrow-right\" })]\n              )\n            ]\n          : _vm._e(),\n        _c(\n          \"div\",\n          { staticClass: \"el-image-viewer__btn el-image-viewer__actions\" },\n          [\n            _c(\"div\", { staticClass: \"el-image-viewer__actions__inner\" }, [\n              _c(\"i\", {\n                staticClass: \"el-icon-zoom-out\",\n                on: {\n                  click: function($event) {\n                    _vm.handleActions(\"zoomOut\")\n                  }\n                }\n              }),\n              _c(\"i\", {\n                staticClass: \"el-icon-zoom-in\",\n                on: {\n                  click: function($event) {\n                    _vm.handleActions(\"zoomIn\")\n                  }\n                }\n              }),\n              _c(\"i\", { staticClass: \"el-image-viewer__actions__divider\" }),\n              _c(\"i\", { class: _vm.mode.icon, on: { click: _vm.toggleMode } }),\n              _c(\"i\", { staticClass: \"el-image-viewer__actions__divider\" }),\n              _c(\"i\", {\n                staticClass: \"el-icon-refresh-left\",\n                on: {\n                  click: function($event) {\n                    _vm.handleActions(\"anticlocelise\")\n                  }\n                }\n              }),\n              _c(\"i\", {\n                staticClass: \"el-icon-refresh-right\",\n                on: {\n                  click: function($event) {\n                    _vm.handleActions(\"clocelise\")\n                  }\n                }\n              })\n            ])\n          ]\n        ),\n        _c(\n          \"div\",\n          { staticClass: \"el-image-viewer__canvas\" },\n          _vm._l(_vm.urlList, function(url, i) {\n            return i === _vm.index\n              ? _c(\"img\", {\n                  key: url,\n                  ref: \"img\",\n                  refInFor: true,\n                  staticClass: \"el-image-viewer__img\",\n                  style: _vm.imgStyle,\n                  attrs: { src: _vm.currentImg },\n                  on: {\n                    load: _vm.handleImgLoad,\n                    error: _vm.handleImgError,\n                    mousedown: _vm.handleMouseDown\n                  }\n                })\n              : _vm._e()\n          }),\n          0\n        )\n      ],\n      2\n    )\n  ])\n}\nvar image_viewervue_type_template_id_5e73b307_staticRenderFns = []\nimage_viewervue_type_template_id_5e73b307_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/image/src/image-viewer.vue?vue&type=template&id=5e73b307&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/image/src/image-viewer.vue?vue&type=script&lang=js&\nvar image_viewervue_type_script_lang_js_extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\nvar Mode = {\n  CONTAIN: {\n    name: 'contain',\n    icon: 'el-icon-full-screen'\n  },\n  ORIGINAL: {\n    name: 'original',\n    icon: 'el-icon-c-scale-to-original'\n  }\n};\n\nvar mousewheelEventName = Object(util_[\"isFirefox\"])() ? 'DOMMouseScroll' : 'mousewheel';\n\n/* harmony default export */ var image_viewervue_type_script_lang_js_ = ({\n  name: 'elImageViewer',\n\n  props: {\n    urlList: {\n      type: Array,\n      default: function _default() {\n        return [];\n      }\n    },\n    zIndex: {\n      type: Number,\n      default: 2000\n    },\n    onSwitch: {\n      type: Function,\n      default: function _default() {}\n    },\n    onClose: {\n      type: Function,\n      default: function _default() {}\n    },\n    initialIndex: {\n      type: Number,\n      default: 0\n    },\n    appendToBody: {\n      type: Boolean,\n      default: true\n    },\n    maskClosable: {\n      type: Boolean,\n      default: true\n    }\n  },\n\n  data: function data() {\n    return {\n      index: this.initialIndex,\n      isShow: false,\n      infinite: true,\n      loading: false,\n      mode: Mode.CONTAIN,\n      transform: {\n        scale: 1,\n        deg: 0,\n        offsetX: 0,\n        offsetY: 0,\n        enableTransition: false\n      }\n    };\n  },\n\n  computed: {\n    isSingle: function isSingle() {\n      return this.urlList.length <= 1;\n    },\n    isFirst: function isFirst() {\n      return this.index === 0;\n    },\n    isLast: function isLast() {\n      return this.index === this.urlList.length - 1;\n    },\n    currentImg: function currentImg() {\n      return this.urlList[this.index];\n    },\n    imgStyle: function imgStyle() {\n      var _transform = this.transform,\n          scale = _transform.scale,\n          deg = _transform.deg,\n          offsetX = _transform.offsetX,\n          offsetY = _transform.offsetY,\n          enableTransition = _transform.enableTransition;\n\n      var style = {\n        transform: 'scale(' + scale + ') rotate(' + deg + 'deg)',\n        transition: enableTransition ? 'transform .3s' : '',\n        'margin-left': offsetX + 'px',\n        'margin-top': offsetY + 'px'\n      };\n      if (this.mode === Mode.CONTAIN) {\n        style.maxWidth = style.maxHeight = '100%';\n      }\n      return style;\n    },\n    viewerZIndex: function viewerZIndex() {\n      var nextZIndex = popup_[\"PopupManager\"].nextZIndex();\n      return this.zIndex > nextZIndex ? this.zIndex : nextZIndex;\n    }\n  },\n  watch: {\n    index: {\n      handler: function handler(val) {\n        this.reset();\n        this.onSwitch(val);\n      }\n    },\n    currentImg: function currentImg(val) {\n      var _this = this;\n\n      this.$nextTick(function (_) {\n        var $img = _this.$refs.img[0];\n        if (!$img.complete) {\n          _this.loading = true;\n        }\n      });\n    }\n  },\n  methods: {\n    hide: function hide() {\n      this.deviceSupportUninstall();\n      this.onClose();\n    },\n    deviceSupportInstall: function deviceSupportInstall() {\n      var _this2 = this;\n\n      this._keyDownHandler = function (e) {\n        e.stopPropagation();\n        var keyCode = e.keyCode;\n        switch (keyCode) {\n          // ESC\n          case 27:\n            _this2.hide();\n            break;\n          // SPACE\n          case 32:\n            _this2.toggleMode();\n            break;\n          // LEFT_ARROW\n          case 37:\n            _this2.prev();\n            break;\n          // UP_ARROW\n          case 38:\n            _this2.handleActions('zoomIn');\n            break;\n          // RIGHT_ARROW\n          case 39:\n            _this2.next();\n            break;\n          // DOWN_ARROW\n          case 40:\n            _this2.handleActions('zoomOut');\n            break;\n        }\n      };\n      this._mouseWheelHandler = Object(util_[\"rafThrottle\"])(function (e) {\n        var delta = e.wheelDelta ? e.wheelDelta : -e.detail;\n        if (delta > 0) {\n          _this2.handleActions('zoomIn', {\n            zoomRate: 0.015,\n            enableTransition: false\n          });\n        } else {\n          _this2.handleActions('zoomOut', {\n            zoomRate: 0.015,\n            enableTransition: false\n          });\n        }\n      });\n      Object(dom_[\"on\"])(document, 'keydown', this._keyDownHandler);\n      Object(dom_[\"on\"])(document, mousewheelEventName, this._mouseWheelHandler);\n    },\n    deviceSupportUninstall: function deviceSupportUninstall() {\n      Object(dom_[\"off\"])(document, 'keydown', this._keyDownHandler);\n      Object(dom_[\"off\"])(document, mousewheelEventName, this._mouseWheelHandler);\n      this._keyDownHandler = null;\n      this._mouseWheelHandler = null;\n    },\n    handleImgLoad: function handleImgLoad(e) {\n      this.loading = false;\n    },\n    handleImgError: function handleImgError(e) {\n      this.loading = false;\n      e.target.alt = '加载失败';\n    },\n    handleMouseDown: function handleMouseDown(e) {\n      var _this3 = this;\n\n      if (this.loading || e.button !== 0) return;\n\n      var _transform2 = this.transform,\n          offsetX = _transform2.offsetX,\n          offsetY = _transform2.offsetY;\n\n      var startX = e.pageX;\n      var startY = e.pageY;\n      this._dragHandler = Object(util_[\"rafThrottle\"])(function (ev) {\n        _this3.transform.offsetX = offsetX + ev.pageX - startX;\n        _this3.transform.offsetY = offsetY + ev.pageY - startY;\n      });\n      Object(dom_[\"on\"])(document, 'mousemove', this._dragHandler);\n      Object(dom_[\"on\"])(document, 'mouseup', function (ev) {\n        Object(dom_[\"off\"])(document, 'mousemove', _this3._dragHandler);\n      });\n\n      e.preventDefault();\n    },\n    handleMaskClick: function handleMaskClick() {\n      if (this.maskClosable) {\n        this.hide();\n      }\n    },\n    reset: function reset() {\n      this.transform = {\n        scale: 1,\n        deg: 0,\n        offsetX: 0,\n        offsetY: 0,\n        enableTransition: false\n      };\n    },\n    toggleMode: function toggleMode() {\n      if (this.loading) return;\n\n      var modeNames = Object.keys(Mode);\n      var modeValues = Object.values(Mode);\n      var index = modeValues.indexOf(this.mode);\n      var nextIndex = (index + 1) % modeNames.length;\n      this.mode = Mode[modeNames[nextIndex]];\n      this.reset();\n    },\n    prev: function prev() {\n      if (this.isFirst && !this.infinite) return;\n      var len = this.urlList.length;\n      this.index = (this.index - 1 + len) % len;\n    },\n    next: function next() {\n      if (this.isLast && !this.infinite) return;\n      var len = this.urlList.length;\n      this.index = (this.index + 1) % len;\n    },\n    handleActions: function handleActions(action) {\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n      if (this.loading) return;\n\n      var _zoomRate$rotateDeg$e = image_viewervue_type_script_lang_js_extends({\n        zoomRate: 0.2,\n        rotateDeg: 90,\n        enableTransition: true\n      }, options),\n          zoomRate = _zoomRate$rotateDeg$e.zoomRate,\n          rotateDeg = _zoomRate$rotateDeg$e.rotateDeg,\n          enableTransition = _zoomRate$rotateDeg$e.enableTransition;\n\n      var transform = this.transform;\n\n      switch (action) {\n        case 'zoomOut':\n          if (transform.scale > 0.2) {\n            transform.scale = parseFloat((transform.scale - zoomRate).toFixed(3));\n          }\n          break;\n        case 'zoomIn':\n          transform.scale = parseFloat((transform.scale + zoomRate).toFixed(3));\n          break;\n        case 'clocelise':\n          transform.deg += rotateDeg;\n          break;\n        case 'anticlocelise':\n          transform.deg -= rotateDeg;\n          break;\n      }\n      transform.enableTransition = enableTransition;\n    }\n  },\n  mounted: function mounted() {\n    this.deviceSupportInstall();\n    if (this.appendToBody) {\n      document.body.appendChild(this.$el);\n    }\n    // add tabindex then wrapper can be focusable via Javascript\n    // focus wrapper so arrow key can't cause inner scroll behavior underneath\n    this.$refs['el-image-viewer__wrapper'].focus();\n  },\n  destroyed: function destroyed() {\n    // if appendToBody is true, remove DOM node after destroy\n    if (this.appendToBody && this.$el && this.$el.parentNode) {\n      this.$el.parentNode.removeChild(this.$el);\n    }\n  }\n});\n// CONCATENATED MODULE: ./packages/image/src/image-viewer.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_image_viewervue_type_script_lang_js_ = (image_viewervue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/image/src/image-viewer.vue\n\n\n\n\n\n/* normalize component */\n\nvar image_viewer_component = normalizeComponent(\n  src_image_viewervue_type_script_lang_js_,\n  image_viewervue_type_template_id_5e73b307_render,\n  image_viewervue_type_template_id_5e73b307_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var image_viewer_api; }\nimage_viewer_component.options.__file = \"packages/image/src/image-viewer.vue\"\n/* harmony default export */ var image_viewer = (image_viewer_component.exports);\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/image/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n\nvar isSupportObjectFit = function isSupportObjectFit() {\n  return document.documentElement.style.objectFit !== undefined;\n};\n\nvar ObjectFit = {\n  NONE: 'none',\n  CONTAIN: 'contain',\n  COVER: 'cover',\n  FILL: 'fill',\n  SCALE_DOWN: 'scale-down'\n};\n\nvar prevOverflow = '';\n\n/* harmony default export */ var image_src_mainvue_type_script_lang_js_ = ({\n  name: 'ElImage',\n\n  mixins: [locale_default.a],\n  inheritAttrs: false,\n\n  components: {\n    ImageViewer: image_viewer\n  },\n\n  props: {\n    src: String,\n    fit: String,\n    lazy: Boolean,\n    scrollContainer: {},\n    previewSrcList: {\n      type: Array,\n      default: function _default() {\n        return [];\n      }\n    },\n    zIndex: {\n      type: Number,\n      default: 2000\n    },\n    initialIndex: Number\n  },\n\n  data: function data() {\n    return {\n      loading: true,\n      error: false,\n      show: !this.lazy,\n      imageWidth: 0,\n      imageHeight: 0,\n      showViewer: false\n    };\n  },\n\n\n  computed: {\n    imageStyle: function imageStyle() {\n      var fit = this.fit;\n\n      if (!this.$isServer && fit) {\n        return isSupportObjectFit() ? { 'object-fit': fit } : this.getImageStyle(fit);\n      }\n      return {};\n    },\n    alignCenter: function alignCenter() {\n      return !this.$isServer && !isSupportObjectFit() && this.fit !== ObjectFit.FILL;\n    },\n    preview: function preview() {\n      var previewSrcList = this.previewSrcList;\n\n      return Array.isArray(previewSrcList) && previewSrcList.length > 0;\n    },\n    imageIndex: function imageIndex() {\n      var previewIndex = 0;\n      var initialIndex = this.initialIndex;\n      if (initialIndex >= 0) {\n        previewIndex = initialIndex;\n        return previewIndex;\n      }\n      var srcIndex = this.previewSrcList.indexOf(this.src);\n      if (srcIndex >= 0) {\n        previewIndex = srcIndex;\n        return previewIndex;\n      }\n      return previewIndex;\n    }\n  },\n\n  watch: {\n    src: function src(val) {\n      this.show && this.loadImage();\n    },\n    show: function show(val) {\n      val && this.loadImage();\n    }\n  },\n\n  mounted: function mounted() {\n    if (this.lazy) {\n      this.addLazyLoadListener();\n    } else {\n      this.loadImage();\n    }\n  },\n  beforeDestroy: function beforeDestroy() {\n    this.lazy && this.removeLazyLoadListener();\n  },\n\n\n  methods: {\n    loadImage: function loadImage() {\n      var _this = this;\n\n      if (this.$isServer) return;\n\n      // reset status\n      this.loading = true;\n      this.error = false;\n\n      var img = new Image();\n      img.onload = function (e) {\n        return _this.handleLoad(e, img);\n      };\n      img.onerror = this.handleError.bind(this);\n\n      // bind html attrs\n      // so it can behave consistently\n      Object.keys(this.$attrs).forEach(function (key) {\n        var value = _this.$attrs[key];\n        img.setAttribute(key, value);\n      });\n      img.src = this.src;\n    },\n    handleLoad: function handleLoad(e, img) {\n      this.imageWidth = img.width;\n      this.imageHeight = img.height;\n      this.loading = false;\n      this.error = false;\n    },\n    handleError: function handleError(e) {\n      this.loading = false;\n      this.error = true;\n      this.$emit('error', e);\n    },\n    handleLazyLoad: function handleLazyLoad() {\n      if (Object(dom_[\"isInContainer\"])(this.$el, this._scrollContainer)) {\n        this.show = true;\n        this.removeLazyLoadListener();\n      }\n    },\n    addLazyLoadListener: function addLazyLoadListener() {\n      if (this.$isServer) return;\n\n      var scrollContainer = this.scrollContainer;\n\n      var _scrollContainer = null;\n\n      if (Object(types_[\"isHtmlElement\"])(scrollContainer)) {\n        _scrollContainer = scrollContainer;\n      } else if (Object(types_[\"isString\"])(scrollContainer)) {\n        _scrollContainer = document.querySelector(scrollContainer);\n      } else {\n        _scrollContainer = Object(dom_[\"getScrollContainer\"])(this.$el);\n      }\n\n      if (_scrollContainer) {\n        this._scrollContainer = _scrollContainer;\n        this._lazyLoadHandler = throttle_default()(200, this.handleLazyLoad);\n        Object(dom_[\"on\"])(_scrollContainer, 'scroll', this._lazyLoadHandler);\n        this.handleLazyLoad();\n      }\n    },\n    removeLazyLoadListener: function removeLazyLoadListener() {\n      var _scrollContainer = this._scrollContainer,\n          _lazyLoadHandler = this._lazyLoadHandler;\n\n\n      if (this.$isServer || !_scrollContainer || !_lazyLoadHandler) return;\n\n      Object(dom_[\"off\"])(_scrollContainer, 'scroll', _lazyLoadHandler);\n      this._scrollContainer = null;\n      this._lazyLoadHandler = null;\n    },\n\n    /**\n     * simulate object-fit behavior to compatible with IE11 and other browsers which not support object-fit\n     */\n    getImageStyle: function getImageStyle(fit) {\n      var imageWidth = this.imageWidth,\n          imageHeight = this.imageHeight;\n      var _$el = this.$el,\n          containerWidth = _$el.clientWidth,\n          containerHeight = _$el.clientHeight;\n\n\n      if (!imageWidth || !imageHeight || !containerWidth || !containerHeight) return {};\n\n      var imageAspectRatio = imageWidth / imageHeight;\n      var containerAspectRatio = containerWidth / containerHeight;\n\n      if (fit === ObjectFit.SCALE_DOWN) {\n        var isSmaller = imageWidth < containerWidth && imageHeight < containerHeight;\n        fit = isSmaller ? ObjectFit.NONE : ObjectFit.CONTAIN;\n      }\n\n      switch (fit) {\n        case ObjectFit.NONE:\n          return { width: 'auto', height: 'auto' };\n        case ObjectFit.CONTAIN:\n          return imageAspectRatio < containerAspectRatio ? { width: 'auto' } : { height: 'auto' };\n        case ObjectFit.COVER:\n          return imageAspectRatio < containerAspectRatio ? { height: 'auto' } : { width: 'auto' };\n        default:\n          return {};\n      }\n    },\n    clickHandler: function clickHandler() {\n      // don't show viewer when preview is false\n      if (!this.preview) {\n        return;\n      }\n      // prevent body scroll\n      prevOverflow = document.body.style.overflow;\n      document.body.style.overflow = 'hidden';\n      this.showViewer = true;\n    },\n    closeViewer: function closeViewer() {\n      document.body.style.overflow = prevOverflow;\n      this.showViewer = false;\n    }\n  }\n});\n// CONCATENATED MODULE: ./packages/image/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_image_src_mainvue_type_script_lang_js_ = (image_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/image/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar image_src_main_component = normalizeComponent(\n  packages_image_src_mainvue_type_script_lang_js_,\n  mainvue_type_template_id_44d84a7c_render,\n  mainvue_type_template_id_44d84a7c_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var image_src_main_api; }\nimage_src_main_component.options.__file = \"packages/image/src/main.vue\"\n/* harmony default export */ var image_src_main = (image_src_main_component.exports);\n// CONCATENATED MODULE: ./packages/image/index.js\n\n\n/* istanbul ignore next */\nimage_src_main.install = function (Vue) {\n  Vue.component(image_src_main.name, image_src_main);\n};\n\n/* harmony default export */ var packages_image = (image_src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/calendar/src/main.vue?vue&type=template&id=6d9756be&\nvar mainvue_type_template_id_6d9756be_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\"div\", { staticClass: \"el-calendar\" }, [\n    _c(\"div\", { staticClass: \"el-calendar__header\" }, [\n      _c(\"div\", { staticClass: \"el-calendar__title\" }, [\n        _vm._v(\"\\n      \" + _vm._s(_vm.i18nDate) + \"\\n    \")\n      ]),\n      _vm.validatedRange.length === 0\n        ? _c(\n            \"div\",\n            { staticClass: \"el-calendar__button-group\" },\n            [\n              _c(\n                \"el-button-group\",\n                [\n                  _c(\n                    \"el-button\",\n                    {\n                      attrs: { type: \"plain\", size: \"mini\" },\n                      on: {\n                        click: function($event) {\n                          _vm.selectDate(\"prev-month\")\n                        }\n                      }\n                    },\n                    [\n                      _vm._v(\n                        \"\\n          \" +\n                          _vm._s(_vm.t(\"el.datepicker.prevMonth\")) +\n                          \"\\n        \"\n                      )\n                    ]\n                  ),\n                  _c(\n                    \"el-button\",\n                    {\n                      attrs: { type: \"plain\", size: \"mini\" },\n                      on: {\n                        click: function($event) {\n                          _vm.selectDate(\"today\")\n                        }\n                      }\n                    },\n                    [\n                      _vm._v(\n                        \"\\n          \" +\n                          _vm._s(_vm.t(\"el.datepicker.today\")) +\n                          \"\\n        \"\n                      )\n                    ]\n                  ),\n                  _c(\n                    \"el-button\",\n                    {\n                      attrs: { type: \"plain\", size: \"mini\" },\n                      on: {\n                        click: function($event) {\n                          _vm.selectDate(\"next-month\")\n                        }\n                      }\n                    },\n                    [\n                      _vm._v(\n                        \"\\n          \" +\n                          _vm._s(_vm.t(\"el.datepicker.nextMonth\")) +\n                          \"\\n        \"\n                      )\n                    ]\n                  )\n                ],\n                1\n              )\n            ],\n            1\n          )\n        : _vm._e()\n    ]),\n    _vm.validatedRange.length === 0\n      ? _c(\n          \"div\",\n          { key: \"no-range\", staticClass: \"el-calendar__body\" },\n          [\n            _c(\"date-table\", {\n              attrs: {\n                date: _vm.date,\n                \"selected-day\": _vm.realSelectedDay,\n                \"first-day-of-week\": _vm.realFirstDayOfWeek\n              },\n              on: { pick: _vm.pickDay }\n            })\n          ],\n          1\n        )\n      : _c(\n          \"div\",\n          { key: \"has-range\", staticClass: \"el-calendar__body\" },\n          _vm._l(_vm.validatedRange, function(range, index) {\n            return _c(\"date-table\", {\n              key: index,\n              attrs: {\n                date: range[0],\n                \"selected-day\": _vm.realSelectedDay,\n                range: range,\n                \"hide-header\": index !== 0,\n                \"first-day-of-week\": _vm.realFirstDayOfWeek\n              },\n              on: { pick: _vm.pickDay }\n            })\n          }),\n          1\n        )\n  ])\n}\nvar mainvue_type_template_id_6d9756be_staticRenderFns = []\nmainvue_type_template_id_6d9756be_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/calendar/src/main.vue?vue&type=template&id=6d9756be&\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/date\"\nvar date_ = __nested_webpack_require_8926__(20);\nvar date_default = /*#__PURE__*/__nested_webpack_require_8926__.n(date_);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/calendar/src/date-table.vue?vue&type=script&lang=js&\n\n\n\n\n/* harmony default export */ var src_date_tablevue_type_script_lang_js_ = ({\n  props: {\n    selectedDay: String, // formated date yyyy-MM-dd\n    range: {\n      type: Array,\n      validator: function validator(val) {\n        if (!(val && val.length)) return true;\n        var start = val[0],\n            end = val[1];\n\n        return Object(date_util_[\"validateRangeInOneMonth\"])(start, end);\n      }\n    },\n    date: Date,\n    hideHeader: Boolean,\n    firstDayOfWeek: Number\n  },\n\n  inject: ['elCalendar'],\n\n  methods: {\n    toNestedArr: function toNestedArr(days) {\n      return Object(date_util_[\"range\"])(days.length / 7).map(function (_, index) {\n        var start = index * 7;\n        return days.slice(start, start + 7);\n      });\n    },\n    getFormateDate: function getFormateDate(day, type) {\n      if (!day || ['prev', 'current', 'next'].indexOf(type) === -1) {\n        throw new Error('invalid day or type');\n      }\n      var prefix = this.curMonthDatePrefix;\n      if (type === 'prev') {\n        prefix = this.prevMonthDatePrefix;\n      } else if (type === 'next') {\n        prefix = this.nextMonthDatePrefix;\n      }\n      day = ('00' + day).slice(-2);\n      return prefix + '-' + day;\n    },\n    getCellClass: function getCellClass(_ref) {\n      var text = _ref.text,\n          type = _ref.type;\n\n      var classes = [type];\n      if (type === 'current') {\n        var date = this.getFormateDate(text, type);\n        if (date === this.selectedDay) {\n          classes.push('is-selected');\n        }\n        if (date === this.formatedToday) {\n          classes.push('is-today');\n        }\n      }\n      return classes;\n    },\n    pickDay: function pickDay(_ref2) {\n      var text = _ref2.text,\n          type = _ref2.type;\n\n      var date = this.getFormateDate(text, type);\n      this.$emit('pick', date);\n    },\n    cellRenderProxy: function cellRenderProxy(_ref3) {\n      var text = _ref3.text,\n          type = _ref3.type;\n      var h = this.$createElement;\n\n      var render = this.elCalendar.$scopedSlots.dateCell;\n      if (!render) return h('span', [text]);\n\n      var day = this.getFormateDate(text, type);\n      var date = new Date(day);\n      var data = {\n        isSelected: this.selectedDay === day,\n        type: type + '-month',\n        day: day\n      };\n      return render({ date: date, data: data });\n    }\n  },\n\n  computed: {\n    WEEK_DAYS: function WEEK_DAYS() {\n      return Object(date_util_[\"getI18nSettings\"])().dayNames;\n    },\n    prevMonthDatePrefix: function prevMonthDatePrefix() {\n      var temp = new Date(this.date.getTime());\n      temp.setDate(0);\n      return date_default.a.format(temp, 'yyyy-MM');\n    },\n    curMonthDatePrefix: function curMonthDatePrefix() {\n      return date_default.a.format(this.date, 'yyyy-MM');\n    },\n    nextMonthDatePrefix: function nextMonthDatePrefix() {\n      var temp = new Date(this.date.getFullYear(), this.date.getMonth() + 1, 1);\n      return date_default.a.format(temp, 'yyyy-MM');\n    },\n    formatedToday: function formatedToday() {\n      return this.elCalendar.formatedToday;\n    },\n    isInRange: function isInRange() {\n      return this.range && this.range.length;\n    },\n    rows: function rows() {\n      var days = [];\n      // if range exists, should render days in range.\n      if (this.isInRange) {\n        var _range = this.range,\n            start = _range[0],\n            end = _range[1];\n\n        var currentMonthRange = Object(date_util_[\"range\"])(end.getDate() - start.getDate() + 1).map(function (_, index) {\n          return {\n            text: start.getDate() + index,\n            type: 'current'\n          };\n        });\n        var remaining = currentMonthRange.length % 7;\n        remaining = remaining === 0 ? 0 : 7 - remaining;\n        var nextMonthRange = Object(date_util_[\"range\"])(remaining).map(function (_, index) {\n          return {\n            text: index + 1,\n            type: 'next'\n          };\n        });\n        days = currentMonthRange.concat(nextMonthRange);\n      } else {\n        var date = this.date;\n        var firstDay = Object(date_util_[\"getFirstDayOfMonth\"])(date);\n        firstDay = firstDay === 0 ? 7 : firstDay;\n        var firstDayOfWeek = typeof this.firstDayOfWeek === 'number' ? this.firstDayOfWeek : 1;\n        var offset = (7 + firstDay - firstDayOfWeek) % 7;\n        var prevMonthDays = Object(date_util_[\"getPrevMonthLastDays\"])(date, offset).map(function (day) {\n          return {\n            text: day,\n            type: 'prev'\n          };\n        });\n        var currentMonthDays = Object(date_util_[\"getMonthDays\"])(date).map(function (day) {\n          return {\n            text: day,\n            type: 'current'\n          };\n        });\n        days = [].concat(prevMonthDays, currentMonthDays);\n        var nextMonthDays = Object(date_util_[\"range\"])(42 - days.length).map(function (_, index) {\n          return {\n            text: index + 1,\n            type: 'next'\n          };\n        });\n        days = days.concat(nextMonthDays);\n      }\n      return this.toNestedArr(days);\n    },\n    weekDays: function weekDays() {\n      var start = this.firstDayOfWeek;\n      var WEEK_DAYS = this.WEEK_DAYS;\n\n\n      if (typeof start !== 'number' || start === 0) {\n        return WEEK_DAYS.slice();\n      } else {\n        return WEEK_DAYS.slice(start).concat(WEEK_DAYS.slice(0, start));\n      }\n    }\n  },\n\n  render: function render() {\n    var _this = this;\n\n    var h = arguments[0];\n\n    var thead = this.hideHeader ? null : h('thead', [this.weekDays.map(function (day) {\n      return h(\n        'th',\n        { key: day },\n        [day]\n      );\n    })]);\n    return h(\n      'table',\n      {\n        'class': {\n          'el-calendar-table': true,\n          'is-range': this.isInRange\n        },\n        attrs: { cellspacing: '0',\n          cellpadding: '0' }\n      },\n      [thead, h('tbody', [this.rows.map(function (row, index) {\n        return h(\n          'tr',\n          {\n            'class': {\n              'el-calendar-table__row': true,\n              'el-calendar-table__row--hide-border': index === 0 && _this.hideHeader\n            },\n            key: index },\n          [row.map(function (cell, key) {\n            return h(\n              'td',\n              { key: key,\n                'class': _this.getCellClass(cell),\n                on: {\n                  'click': _this.pickDay.bind(_this, cell)\n                }\n              },\n              [h(\n                'div',\n                { 'class': 'el-calendar-day' },\n                [_this.cellRenderProxy(cell)]\n              )]\n            );\n          })]\n        );\n      })])]\n    );\n  }\n});\n// CONCATENATED MODULE: ./packages/calendar/src/date-table.vue?vue&type=script&lang=js&\n /* harmony default export */ var calendar_src_date_tablevue_type_script_lang_js_ = (src_date_tablevue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/calendar/src/date-table.vue\nvar date_table_render, date_table_staticRenderFns\n\n\n\n\n/* normalize component */\n\nvar src_date_table_component = normalizeComponent(\n  calendar_src_date_tablevue_type_script_lang_js_,\n  date_table_render,\n  date_table_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var src_date_table_api; }\nsrc_date_table_component.options.__file = \"packages/calendar/src/date-table.vue\"\n/* harmony default export */ var src_date_table = (src_date_table_component.exports);\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/calendar/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n\n\nvar validTypes = ['prev-month', 'today', 'next-month'];\nvar weekDays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\nvar oneDay = 86400000;\n\n/* harmony default export */ var calendar_src_mainvue_type_script_lang_js_ = ({\n  name: 'ElCalendar',\n\n  mixins: [locale_default.a],\n\n  components: {\n    DateTable: src_date_table,\n    ElButton: button_default.a,\n    ElButtonGroup: button_group_default.a\n  },\n\n  props: {\n    value: [Date, String, Number],\n    range: {\n      type: Array,\n      validator: function validator(range) {\n        if (Array.isArray(range)) {\n          return range.length === 2 && range.every(function (item) {\n            return typeof item === 'string' || typeof item === 'number' || item instanceof Date;\n          });\n        } else {\n          return true;\n        }\n      }\n    },\n    firstDayOfWeek: {\n      type: Number,\n      default: 1\n    }\n  },\n\n  provide: function provide() {\n    return {\n      elCalendar: this\n    };\n  },\n\n\n  methods: {\n    pickDay: function pickDay(day) {\n      this.realSelectedDay = day;\n    },\n    selectDate: function selectDate(type) {\n      if (validTypes.indexOf(type) === -1) {\n        throw new Error('invalid type ' + type);\n      }\n      var day = '';\n      if (type === 'prev-month') {\n        day = this.prevMonthDatePrefix + '-01';\n      } else if (type === 'next-month') {\n        day = this.nextMonthDatePrefix + '-01';\n      } else {\n        day = this.formatedToday;\n      }\n\n      if (day === this.formatedDate) return;\n      this.pickDay(day);\n    },\n    toDate: function toDate(val) {\n      if (!val) {\n        throw new Error('invalid val');\n      }\n      return val instanceof Date ? val : new Date(val);\n    },\n    rangeValidator: function rangeValidator(date, isStart) {\n      var firstDayOfWeek = this.realFirstDayOfWeek;\n      var expected = isStart ? firstDayOfWeek : firstDayOfWeek === 0 ? 6 : firstDayOfWeek - 1;\n      var message = (isStart ? 'start' : 'end') + ' of range should be ' + weekDays[expected] + '.';\n      if (date.getDay() !== expected) {\n        console.warn('[ElementCalendar]', message, 'Invalid range will be ignored.');\n        return false;\n      }\n      return true;\n    }\n  },\n\n  computed: {\n    prevMonthDatePrefix: function prevMonthDatePrefix() {\n      var temp = new Date(this.date.getTime());\n      temp.setDate(0);\n      return date_default.a.format(temp, 'yyyy-MM');\n    },\n    curMonthDatePrefix: function curMonthDatePrefix() {\n      return date_default.a.format(this.date, 'yyyy-MM');\n    },\n    nextMonthDatePrefix: function nextMonthDatePrefix() {\n      var temp = new Date(this.date.getFullYear(), this.date.getMonth() + 1, 1);\n      return date_default.a.format(temp, 'yyyy-MM');\n    },\n    formatedDate: function formatedDate() {\n      return date_default.a.format(this.date, 'yyyy-MM-dd');\n    },\n    i18nDate: function i18nDate() {\n      var year = this.date.getFullYear();\n      var month = this.date.getMonth() + 1;\n      return year + ' ' + this.t('el.datepicker.year') + ' ' + this.t('el.datepicker.month' + month);\n    },\n    formatedToday: function formatedToday() {\n      return date_default.a.format(this.now, 'yyyy-MM-dd');\n    },\n\n\n    realSelectedDay: {\n      get: function get() {\n        if (!this.value) return this.selectedDay;\n        return this.formatedDate;\n      },\n      set: function set(val) {\n        this.selectedDay = val;\n        var date = new Date(val);\n        this.$emit('input', date);\n      }\n    },\n\n    date: function date() {\n      if (!this.value) {\n        if (this.realSelectedDay) {\n          var d = this.selectedDay.split('-');\n          return new Date(d[0], d[1] - 1, d[2]);\n        } else if (this.validatedRange.length) {\n          return this.validatedRange[0][0];\n        }\n        return this.now;\n      } else {\n        return this.toDate(this.value);\n      }\n    },\n\n\n    // if range is valid, we get a two-digit array\n    validatedRange: function validatedRange() {\n      var _this = this;\n\n      var range = this.range;\n      if (!range) return [];\n      range = range.reduce(function (prev, val, index) {\n        var date = _this.toDate(val);\n        if (_this.rangeValidator(date, index === 0)) {\n          prev = prev.concat(date);\n        }\n        return prev;\n      }, []);\n      if (range.length === 2) {\n        var _range = range,\n            start = _range[0],\n            end = _range[1];\n\n        if (start > end) {\n          console.warn('[ElementCalendar]end time should be greater than start time');\n          return [];\n        }\n        // start time and end time in one month\n        if (Object(date_util_[\"validateRangeInOneMonth\"])(start, end)) {\n          return [[start, end]];\n        }\n        var data = [];\n        var startDay = new Date(start.getFullYear(), start.getMonth() + 1, 1);\n        var lastDay = this.toDate(startDay.getTime() - oneDay);\n        if (!Object(date_util_[\"validateRangeInOneMonth\"])(startDay, end)) {\n          console.warn('[ElementCalendar]start time and end time interval must not exceed two months');\n          return [];\n        }\n        // 第一个月的时间范围\n        data.push([start, lastDay]);\n        // 下一月的时间范围,需要计算一下该月的第一个周起始日\n        var firstDayOfWeek = this.realFirstDayOfWeek;\n        var nextMontFirstDay = startDay.getDay();\n        var interval = 0;\n        if (nextMontFirstDay !== firstDayOfWeek) {\n          if (firstDayOfWeek === 0) {\n            interval = 7 - nextMontFirstDay;\n          } else {\n            interval = firstDayOfWeek - nextMontFirstDay;\n            interval = interval > 0 ? interval : 7 + interval;\n          }\n        }\n        startDay = this.toDate(startDay.getTime() + interval * oneDay);\n        if (startDay.getDate() < end.getDate()) {\n          data.push([startDay, end]);\n        }\n        return data;\n      }\n      return [];\n    },\n    realFirstDayOfWeek: function realFirstDayOfWeek() {\n      if (this.firstDayOfWeek < 1 || this.firstDayOfWeek > 6) {\n        return 0;\n      }\n      return Math.floor(this.firstDayOfWeek);\n    }\n  },\n\n  data: function data() {\n    return {\n      selectedDay: '',\n      now: new Date()\n    };\n  }\n});\n// CONCATENATED MODULE: ./packages/calendar/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_calendar_src_mainvue_type_script_lang_js_ = (calendar_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/calendar/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar calendar_src_main_component = normalizeComponent(\n  packages_calendar_src_mainvue_type_script_lang_js_,\n  mainvue_type_template_id_6d9756be_render,\n  mainvue_type_template_id_6d9756be_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var calendar_src_main_api; }\ncalendar_src_main_component.options.__file = \"packages/calendar/src/main.vue\"\n/* harmony default export */ var calendar_src_main = (calendar_src_main_component.exports);\n// CONCATENATED MODULE: ./packages/calendar/index.js\n\n\n/* istanbul ignore next */\ncalendar_src_main.install = function (Vue) {\n  Vue.component(calendar_src_main.name, calendar_src_main);\n};\n\n/* harmony default export */ var calendar = (calendar_src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/backtop/src/main.vue?vue&type=template&id=257dd4a9&\nvar mainvue_type_template_id_257dd4a9_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\"transition\", { attrs: { name: \"el-fade-in\" } }, [\n    _vm.visible\n      ? _c(\n          \"div\",\n          {\n            staticClass: \"el-backtop\",\n            style: {\n              right: _vm.styleRight,\n              bottom: _vm.styleBottom\n            },\n            on: {\n              click: function($event) {\n                $event.stopPropagation()\n                return _vm.handleClick($event)\n              }\n            }\n          },\n          [\n            _vm._t(\"default\", [_c(\"el-icon\", { attrs: { name: \"caret-top\" } })])\n          ],\n          2\n        )\n      : _vm._e()\n  ])\n}\nvar mainvue_type_template_id_257dd4a9_staticRenderFns = []\nmainvue_type_template_id_257dd4a9_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/backtop/src/main.vue?vue&type=template&id=257dd4a9&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/backtop/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\nvar cubic = function cubic(value) {\n  return Math.pow(value, 3);\n};\nvar easeInOutCubic = function easeInOutCubic(value) {\n  return value < 0.5 ? cubic(value * 2) / 2 : 1 - cubic((1 - value) * 2) / 2;\n};\n\n/* harmony default export */ var backtop_src_mainvue_type_script_lang_js_ = ({\n  name: 'ElBacktop',\n\n  props: {\n    visibilityHeight: {\n      type: Number,\n      default: 200\n    },\n    target: [String],\n    right: {\n      type: Number,\n      default: 40\n    },\n    bottom: {\n      type: Number,\n      default: 40\n    }\n  },\n\n  data: function data() {\n    return {\n      el: null,\n      container: null,\n      visible: false\n    };\n  },\n\n\n  computed: {\n    styleBottom: function styleBottom() {\n      return this.bottom + 'px';\n    },\n    styleRight: function styleRight() {\n      return this.right + 'px';\n    }\n  },\n\n  mounted: function mounted() {\n    this.init();\n    this.throttledScrollHandler = throttle_default()(300, this.onScroll);\n    this.container.addEventListener('scroll', this.throttledScrollHandler);\n  },\n\n\n  methods: {\n    init: function init() {\n      this.container = document;\n      this.el = document.documentElement;\n      if (this.target) {\n        this.el = document.querySelector(this.target);\n        if (!this.el) {\n          throw new Error('target is not existed: ' + this.target);\n        }\n        this.container = this.el;\n      }\n    },\n    onScroll: function onScroll() {\n      var scrollTop = this.el.scrollTop;\n      this.visible = scrollTop >= this.visibilityHeight;\n    },\n    handleClick: function handleClick(e) {\n      this.scrollToTop();\n      this.$emit('click', e);\n    },\n    scrollToTop: function scrollToTop() {\n      var el = this.el;\n      var beginTime = Date.now();\n      var beginValue = el.scrollTop;\n      var rAF = window.requestAnimationFrame || function (func) {\n        return setTimeout(func, 16);\n      };\n      var frameFunc = function frameFunc() {\n        var progress = (Date.now() - beginTime) / 500;\n        if (progress < 1) {\n          el.scrollTop = beginValue * (1 - easeInOutCubic(progress));\n          rAF(frameFunc);\n        } else {\n          el.scrollTop = 0;\n        }\n      };\n      rAF(frameFunc);\n    }\n  },\n\n  beforeDestroy: function beforeDestroy() {\n    this.container.removeEventListener('scroll', this.throttledScrollHandler);\n  }\n});\n// CONCATENATED MODULE: ./packages/backtop/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_backtop_src_mainvue_type_script_lang_js_ = (backtop_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/backtop/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar backtop_src_main_component = normalizeComponent(\n  packages_backtop_src_mainvue_type_script_lang_js_,\n  mainvue_type_template_id_257dd4a9_render,\n  mainvue_type_template_id_257dd4a9_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var backtop_src_main_api; }\nbacktop_src_main_component.options.__file = \"packages/backtop/src/main.vue\"\n/* harmony default export */ var backtop_src_main = (backtop_src_main_component.exports);\n// CONCATENATED MODULE: ./packages/backtop/index.js\n\n\n/* istanbul ignore next */\nbacktop_src_main.install = function (Vue) {\n  Vue.component(backtop_src_main.name, backtop_src_main);\n};\n\n/* harmony default export */ var backtop = (backtop_src_main);\n// CONCATENATED MODULE: ./packages/infinite-scroll/src/main.js\n\n\n\n\nvar getStyleComputedProperty = function getStyleComputedProperty(element, property) {\n  if (element === window) {\n    element = document.documentElement;\n  }\n\n  if (element.nodeType !== 1) {\n    return [];\n  }\n  // NOTE: 1 DOM access here\n  var css = window.getComputedStyle(element, null);\n  return property ? css[property] : css;\n};\n\nvar entries = function entries(obj) {\n  return Object.keys(obj || {}).map(function (key) {\n    return [key, obj[key]];\n  });\n};\n\nvar getPositionSize = function getPositionSize(el, prop) {\n  return el === window || el === document ? document.documentElement[prop] : el[prop];\n};\n\nvar getOffsetHeight = function getOffsetHeight(el) {\n  return getPositionSize(el, 'offsetHeight');\n};\n\nvar getClientHeight = function getClientHeight(el) {\n  return getPositionSize(el, 'clientHeight');\n};\n\nvar scope = 'ElInfiniteScroll';\nvar attributes = {\n  delay: {\n    type: Number,\n    default: 200\n  },\n  distance: {\n    type: Number,\n    default: 0\n  },\n  disabled: {\n    type: Boolean,\n    default: false\n  },\n  immediate: {\n    type: Boolean,\n    default: true\n  }\n};\n\nvar main_getScrollOptions = function getScrollOptions(el, vm) {\n  if (!Object(types_[\"isHtmlElement\"])(el)) return {};\n\n  return entries(attributes).reduce(function (map, _ref) {\n    var key = _ref[0],\n        option = _ref[1];\n    var type = option.type,\n        defaultValue = option.default;\n\n    var value = el.getAttribute('infinite-scroll-' + key);\n    value = Object(types_[\"isUndefined\"])(vm[value]) ? value : vm[value];\n    switch (type) {\n      case Number:\n        value = Number(value);\n        value = Number.isNaN(value) ? defaultValue : value;\n        break;\n      case Boolean:\n        value = Object(types_[\"isDefined\"])(value) ? value === 'false' ? false : Boolean(value) : defaultValue;\n        break;\n      default:\n        value = type(value);\n    }\n    map[key] = value;\n    return map;\n  }, {});\n};\n\nvar getElementTop = function getElementTop(el) {\n  return el.getBoundingClientRect().top;\n};\n\nvar main_handleScroll = function handleScroll(cb) {\n  var _scope = this[scope],\n      el = _scope.el,\n      vm = _scope.vm,\n      container = _scope.container,\n      observer = _scope.observer;\n\n  var _getScrollOptions = main_getScrollOptions(el, vm),\n      distance = _getScrollOptions.distance,\n      disabled = _getScrollOptions.disabled;\n\n  if (disabled) return;\n\n  var containerInfo = container.getBoundingClientRect();\n  if (!containerInfo.width && !containerInfo.height) return;\n\n  var shouldTrigger = false;\n\n  if (container === el) {\n    // be aware of difference between clientHeight & offsetHeight & window.getComputedStyle().height\n    var scrollBottom = container.scrollTop + getClientHeight(container);\n    shouldTrigger = container.scrollHeight - scrollBottom <= distance;\n  } else {\n    var heightBelowTop = getOffsetHeight(el) + getElementTop(el) - getElementTop(container);\n    var offsetHeight = getOffsetHeight(container);\n    var borderBottom = Number.parseFloat(getStyleComputedProperty(container, 'borderBottomWidth'));\n    shouldTrigger = heightBelowTop - offsetHeight + borderBottom <= distance;\n  }\n\n  if (shouldTrigger && Object(types_[\"isFunction\"])(cb)) {\n    cb.call(vm);\n  } else if (observer) {\n    observer.disconnect();\n    this[scope].observer = null;\n  }\n};\n\n/* harmony default export */ var infinite_scroll_src_main = ({\n  name: 'InfiniteScroll',\n  inserted: function inserted(el, binding, vnode) {\n    var cb = binding.value;\n\n    var vm = vnode.context;\n    // only include vertical scroll\n    var container = Object(dom_[\"getScrollContainer\"])(el, true);\n\n    var _getScrollOptions2 = main_getScrollOptions(el, vm),\n        delay = _getScrollOptions2.delay,\n        immediate = _getScrollOptions2.immediate;\n\n    var onScroll = debounce_default()(delay, main_handleScroll.bind(el, cb));\n\n    el[scope] = { el: el, vm: vm, container: container, onScroll: onScroll };\n\n    if (container) {\n      container.addEventListener('scroll', onScroll);\n\n      if (immediate) {\n        var observer = el[scope].observer = new MutationObserver(onScroll);\n        observer.observe(container, { childList: true, subtree: true });\n        onScroll();\n      }\n    }\n  },\n  unbind: function unbind(el) {\n    var _el$scope = el[scope],\n        container = _el$scope.container,\n        onScroll = _el$scope.onScroll;\n\n    if (container) {\n      container.removeEventListener('scroll', onScroll);\n    }\n  }\n});\n// CONCATENATED MODULE: ./packages/infinite-scroll/index.js\n\n\n/* istanbul ignore next */\ninfinite_scroll_src_main.install = function (Vue) {\n  Vue.directive(infinite_scroll_src_main.name, infinite_scroll_src_main);\n};\n\n/* harmony default export */ var infinite_scroll = (infinite_scroll_src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/page-header/src/main.vue?vue&type=template&id=5070954c&\nvar mainvue_type_template_id_5070954c_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\"div\", { staticClass: \"el-page-header\" }, [\n    _c(\n      \"div\",\n      {\n        staticClass: \"el-page-header__left\",\n        on: {\n          click: function($event) {\n            _vm.$emit(\"back\")\n          }\n        }\n      },\n      [\n        _c(\"i\", { staticClass: \"el-icon-back\" }),\n        _c(\n          \"div\",\n          { staticClass: \"el-page-header__title\" },\n          [_vm._t(\"title\", [_vm._v(_vm._s(_vm.title))])],\n          2\n        )\n      ]\n    ),\n    _c(\n      \"div\",\n      { staticClass: \"el-page-header__content\" },\n      [_vm._t(\"content\", [_vm._v(_vm._s(_vm.content))])],\n      2\n    )\n  ])\n}\nvar mainvue_type_template_id_5070954c_staticRenderFns = []\nmainvue_type_template_id_5070954c_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/page-header/src/main.vue?vue&type=template&id=5070954c&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/page-header/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n/* harmony default export */ var page_header_src_mainvue_type_script_lang_js_ = ({\n  name: 'ElPageHeader',\n\n  props: {\n    title: {\n      type: String,\n      default: function _default() {\n        return Object(lib_locale_[\"t\"])('el.pageHeader.title');\n      }\n    },\n    content: String\n  }\n});\n// CONCATENATED MODULE: ./packages/page-header/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_page_header_src_mainvue_type_script_lang_js_ = (page_header_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/page-header/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar page_header_src_main_component = normalizeComponent(\n  packages_page_header_src_mainvue_type_script_lang_js_,\n  mainvue_type_template_id_5070954c_render,\n  mainvue_type_template_id_5070954c_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var page_header_src_main_api; }\npage_header_src_main_component.options.__file = \"packages/page-header/src/main.vue\"\n/* harmony default export */ var page_header_src_main = (page_header_src_main_component.exports);\n// CONCATENATED MODULE: ./packages/page-header/index.js\n\n\n/* istanbul ignore next */\npage_header_src_main.install = function (Vue) {\n  Vue.component(page_header_src_main.name, page_header_src_main);\n};\n\n/* harmony default export */ var page_header = (page_header_src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/cascader-panel/src/cascader-panel.vue?vue&type=template&id=34932346&\nvar cascader_panelvue_type_template_id_34932346_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    {\n      class: [\"el-cascader-panel\", _vm.border && \"is-bordered\"],\n      on: { keydown: _vm.handleKeyDown }\n    },\n    _vm._l(_vm.menus, function(menu, index) {\n      return _c(\"cascader-menu\", {\n        key: index,\n        ref: \"menu\",\n        refInFor: true,\n        attrs: { index: index, nodes: menu }\n      })\n    }),\n    1\n  )\n}\nvar cascader_panelvue_type_template_id_34932346_staticRenderFns = []\ncascader_panelvue_type_template_id_34932346_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/cascader-panel/src/cascader-panel.vue?vue&type=template&id=34932346&\n\n// EXTERNAL MODULE: external \"element-ui/lib/radio\"\nvar radio_ = __nested_webpack_require_8926__(44);\nvar radio_default = /*#__PURE__*/__nested_webpack_require_8926__.n(radio_);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/cascader-panel/src/cascader-node.vue?vue&type=script&lang=js&\n\n\n\n\n\n\nvar stopPropagation = function stopPropagation(e) {\n  return e.stopPropagation();\n};\n\n/* harmony default export */ var cascader_nodevue_type_script_lang_js_ = ({\n  inject: ['panel'],\n\n  components: {\n    ElCheckbox: checkbox_default.a,\n    ElRadio: radio_default.a\n  },\n\n  props: {\n    node: {\n      required: true\n    },\n    nodeId: String\n  },\n\n  computed: {\n    config: function config() {\n      return this.panel.config;\n    },\n    isLeaf: function isLeaf() {\n      return this.node.isLeaf;\n    },\n    isDisabled: function isDisabled() {\n      return this.node.isDisabled;\n    },\n    checkedValue: function checkedValue() {\n      return this.panel.checkedValue;\n    },\n    isChecked: function isChecked() {\n      return this.node.isSameNode(this.checkedValue);\n    },\n    inActivePath: function inActivePath() {\n      return this.isInPath(this.panel.activePath);\n    },\n    inCheckedPath: function inCheckedPath() {\n      var _this = this;\n\n      if (!this.config.checkStrictly) return false;\n\n      return this.panel.checkedNodePaths.some(function (checkedPath) {\n        return _this.isInPath(checkedPath);\n      });\n    },\n    value: function value() {\n      return this.node.getValueByOption();\n    }\n  },\n\n  methods: {\n    handleExpand: function handleExpand() {\n      var _this2 = this;\n\n      var panel = this.panel,\n          node = this.node,\n          isDisabled = this.isDisabled,\n          config = this.config;\n      var multiple = config.multiple,\n          checkStrictly = config.checkStrictly;\n\n\n      if (!checkStrictly && isDisabled || node.loading) return;\n\n      if (config.lazy && !node.loaded) {\n        panel.lazyLoad(node, function () {\n          // do not use cached leaf value here, invoke this.isLeaf to get new value.\n          var isLeaf = _this2.isLeaf;\n\n\n          if (!isLeaf) _this2.handleExpand();\n          if (multiple) {\n            // if leaf sync checked state, else clear checked state\n            var checked = isLeaf ? node.checked : false;\n            _this2.handleMultiCheckChange(checked);\n          }\n        });\n      } else {\n        panel.handleExpand(node);\n      }\n    },\n    handleCheckChange: function handleCheckChange() {\n      var panel = this.panel,\n          value = this.value,\n          node = this.node;\n\n      panel.handleCheckChange(value);\n      panel.handleExpand(node);\n    },\n    handleMultiCheckChange: function handleMultiCheckChange(checked) {\n      this.node.doCheck(checked);\n      this.panel.calculateMultiCheckedValue();\n    },\n    isInPath: function isInPath(pathNodes) {\n      var node = this.node;\n\n      var selectedPathNode = pathNodes[node.level - 1] || {};\n      return selectedPathNode.uid === node.uid;\n    },\n    renderPrefix: function renderPrefix(h) {\n      var isLeaf = this.isLeaf,\n          isChecked = this.isChecked,\n          config = this.config;\n      var checkStrictly = config.checkStrictly,\n          multiple = config.multiple;\n\n\n      if (multiple) {\n        return this.renderCheckbox(h);\n      } else if (checkStrictly) {\n        return this.renderRadio(h);\n      } else if (isLeaf && isChecked) {\n        return this.renderCheckIcon(h);\n      }\n\n      return null;\n    },\n    renderPostfix: function renderPostfix(h) {\n      var node = this.node,\n          isLeaf = this.isLeaf;\n\n\n      if (node.loading) {\n        return this.renderLoadingIcon(h);\n      } else if (!isLeaf) {\n        return this.renderExpandIcon(h);\n      }\n\n      return null;\n    },\n    renderCheckbox: function renderCheckbox(h) {\n      var node = this.node,\n          config = this.config,\n          isDisabled = this.isDisabled;\n\n      var events = {\n        on: { change: this.handleMultiCheckChange },\n        nativeOn: {}\n      };\n\n      if (config.checkStrictly) {\n        // when every node is selectable, click event should not trigger expand event.\n        events.nativeOn.click = stopPropagation;\n      }\n\n      return h('el-checkbox', external_babel_helper_vue_jsx_merge_props_default()([{\n        attrs: {\n          value: node.checked,\n          indeterminate: node.indeterminate,\n          disabled: isDisabled\n        }\n      }, events]));\n    },\n    renderRadio: function renderRadio(h) {\n      var checkedValue = this.checkedValue,\n          value = this.value,\n          isDisabled = this.isDisabled;\n\n      // to keep same reference if value cause radio's checked state is calculated by reference comparision;\n\n      if (Object(util_[\"isEqual\"])(value, checkedValue)) {\n        value = checkedValue;\n      }\n\n      return h(\n        'el-radio',\n        {\n          attrs: {\n            value: checkedValue,\n            label: value,\n            disabled: isDisabled\n          },\n          on: {\n            'change': this.handleCheckChange\n          },\n          nativeOn: {\n            'click': stopPropagation\n          }\n        },\n        [h('span')]\n      );\n    },\n    renderCheckIcon: function renderCheckIcon(h) {\n      return h('i', { 'class': 'el-icon-check el-cascader-node__prefix' });\n    },\n    renderLoadingIcon: function renderLoadingIcon(h) {\n      return h('i', { 'class': 'el-icon-loading el-cascader-node__postfix' });\n    },\n    renderExpandIcon: function renderExpandIcon(h) {\n      return h('i', { 'class': 'el-icon-arrow-right el-cascader-node__postfix' });\n    },\n    renderContent: function renderContent(h) {\n      var panel = this.panel,\n          node = this.node;\n\n      var render = panel.renderLabelFn;\n      var vnode = render ? render({ node: node, data: node.data }) : null;\n\n      return h(\n        'span',\n        { 'class': 'el-cascader-node__label' },\n        [vnode || node.label]\n      );\n    }\n  },\n\n  render: function render(h) {\n    var _this3 = this;\n\n    var inActivePath = this.inActivePath,\n        inCheckedPath = this.inCheckedPath,\n        isChecked = this.isChecked,\n        isLeaf = this.isLeaf,\n        isDisabled = this.isDisabled,\n        config = this.config,\n        nodeId = this.nodeId;\n    var expandTrigger = config.expandTrigger,\n        checkStrictly = config.checkStrictly,\n        multiple = config.multiple;\n\n    var disabled = !checkStrictly && isDisabled;\n    var events = { on: {} };\n\n    if (expandTrigger === 'click') {\n      events.on.click = this.handleExpand;\n    } else {\n      events.on.mouseenter = function (e) {\n        _this3.handleExpand();\n        _this3.$emit('expand', e);\n      };\n      events.on.focus = function (e) {\n        _this3.handleExpand();\n        _this3.$emit('expand', e);\n      };\n    }\n    if (isLeaf && !isDisabled && !checkStrictly && !multiple) {\n      events.on.click = this.handleCheckChange;\n    }\n\n    return h(\n      'li',\n      external_babel_helper_vue_jsx_merge_props_default()([{\n        attrs: {\n          role: 'menuitem',\n          id: nodeId,\n          'aria-expanded': inActivePath,\n          tabindex: disabled ? null : -1\n        },\n        'class': {\n          'el-cascader-node': true,\n          'is-selectable': checkStrictly,\n          'in-active-path': inActivePath,\n          'in-checked-path': inCheckedPath,\n          'is-active': isChecked,\n          'is-disabled': disabled\n        }\n      }, events]),\n      [this.renderPrefix(h), this.renderContent(h), this.renderPostfix(h)]\n    );\n  }\n});\n// CONCATENATED MODULE: ./packages/cascader-panel/src/cascader-node.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_cascader_nodevue_type_script_lang_js_ = (cascader_nodevue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/cascader-panel/src/cascader-node.vue\nvar cascader_node_render, cascader_node_staticRenderFns\n\n\n\n\n/* normalize component */\n\nvar cascader_node_component = normalizeComponent(\n  src_cascader_nodevue_type_script_lang_js_,\n  cascader_node_render,\n  cascader_node_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var cascader_node_api; }\ncascader_node_component.options.__file = \"packages/cascader-panel/src/cascader-node.vue\"\n/* harmony default export */ var cascader_node = (cascader_node_component.exports);\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/cascader-panel/src/cascader-menu.vue?vue&type=script&lang=js&\n\n\n\n\n\n\n\n/* harmony default export */ var cascader_menuvue_type_script_lang_js_ = ({\n  name: 'ElCascaderMenu',\n\n  mixins: [locale_default.a],\n\n  inject: ['panel'],\n\n  components: {\n    ElScrollbar: scrollbar_default.a,\n    CascaderNode: cascader_node\n  },\n\n  props: {\n    nodes: {\n      type: Array,\n      required: true\n    },\n    index: Number\n  },\n\n  data: function data() {\n    return {\n      activeNode: null,\n      hoverTimer: null,\n      id: Object(util_[\"generateId\"])()\n    };\n  },\n\n\n  computed: {\n    isEmpty: function isEmpty() {\n      return !this.nodes.length;\n    },\n    menuId: function menuId() {\n      return 'cascader-menu-' + this.id + '-' + this.index;\n    }\n  },\n\n  methods: {\n    handleExpand: function handleExpand(e) {\n      this.activeNode = e.target;\n    },\n    handleMouseMove: function handleMouseMove(e) {\n      var activeNode = this.activeNode,\n          hoverTimer = this.hoverTimer;\n      var hoverZone = this.$refs.hoverZone;\n\n\n      if (!activeNode || !hoverZone) return;\n\n      if (activeNode.contains(e.target)) {\n        clearTimeout(hoverTimer);\n\n        var _$el$getBoundingClien = this.$el.getBoundingClientRect(),\n            left = _$el$getBoundingClien.left;\n\n        var startX = e.clientX - left;\n        var _$el = this.$el,\n            offsetWidth = _$el.offsetWidth,\n            offsetHeight = _$el.offsetHeight;\n\n        var top = activeNode.offsetTop;\n        var bottom = top + activeNode.offsetHeight;\n\n        hoverZone.innerHTML = '\\n          <path style=\"pointer-events: auto;\" fill=\"transparent\" d=\"M' + startX + ' ' + top + ' L' + offsetWidth + ' 0 V' + top + ' Z\" />\\n          <path style=\"pointer-events: auto;\" fill=\"transparent\" d=\"M' + startX + ' ' + bottom + ' L' + offsetWidth + ' ' + offsetHeight + ' V' + bottom + ' Z\" />\\n        ';\n      } else if (!hoverTimer) {\n        this.hoverTimer = setTimeout(this.clearHoverZone, this.panel.config.hoverThreshold);\n      }\n    },\n    clearHoverZone: function clearHoverZone() {\n      var hoverZone = this.$refs.hoverZone;\n\n      if (!hoverZone) return;\n      hoverZone.innerHTML = '';\n    },\n    renderEmptyText: function renderEmptyText(h) {\n      return h(\n        'div',\n        { 'class': 'el-cascader-menu__empty-text' },\n        [this.t('el.cascader.noData')]\n      );\n    },\n    renderNodeList: function renderNodeList(h) {\n      var menuId = this.menuId;\n      var isHoverMenu = this.panel.isHoverMenu;\n\n      var events = { on: {} };\n\n      if (isHoverMenu) {\n        events.on.expand = this.handleExpand;\n      }\n\n      var nodes = this.nodes.map(function (node, index) {\n        var hasChildren = node.hasChildren;\n\n        return h('cascader-node', external_babel_helper_vue_jsx_merge_props_default()([{\n          key: node.uid,\n          attrs: { node: node,\n            'node-id': menuId + '-' + index,\n            'aria-haspopup': hasChildren,\n            'aria-owns': hasChildren ? menuId : null\n          }\n        }, events]));\n      });\n\n      return [].concat(nodes, [isHoverMenu ? h('svg', { ref: 'hoverZone', 'class': 'el-cascader-menu__hover-zone' }) : null]);\n    }\n  },\n\n  render: function render(h) {\n    var isEmpty = this.isEmpty,\n        menuId = this.menuId;\n\n    var events = { nativeOn: {} };\n\n    // optimize hover to expand experience (#8010)\n    if (this.panel.isHoverMenu) {\n      events.nativeOn.mousemove = this.handleMouseMove;\n      // events.nativeOn.mouseleave = this.clearHoverZone;\n    }\n\n    return h(\n      'el-scrollbar',\n      external_babel_helper_vue_jsx_merge_props_default()([{\n        attrs: {\n          tag: 'ul',\n          role: 'menu',\n          id: menuId,\n\n          'wrap-class': 'el-cascader-menu__wrap',\n          'view-class': {\n            'el-cascader-menu__list': true,\n            'is-empty': isEmpty\n          }\n        },\n        'class': 'el-cascader-menu' }, events]),\n      [isEmpty ? this.renderEmptyText(h) : this.renderNodeList(h)]\n    );\n  }\n});\n// CONCATENATED MODULE: ./packages/cascader-panel/src/cascader-menu.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_cascader_menuvue_type_script_lang_js_ = (cascader_menuvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/cascader-panel/src/cascader-menu.vue\nvar cascader_menu_render, cascader_menu_staticRenderFns\n\n\n\n\n/* normalize component */\n\nvar cascader_menu_component = normalizeComponent(\n  src_cascader_menuvue_type_script_lang_js_,\n  cascader_menu_render,\n  cascader_menu_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var cascader_menu_api; }\ncascader_menu_component.options.__file = \"packages/cascader-panel/src/cascader-menu.vue\"\n/* harmony default export */ var cascader_menu = (cascader_menu_component.exports);\n// CONCATENATED MODULE: ./packages/cascader-panel/src/node.js\nvar node_createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction src_node_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\n\n\nvar uid = 0;\n\nvar src_node_Node = function () {\n  function Node(data, config, parentNode) {\n    src_node_classCallCheck(this, Node);\n\n    this.data = data;\n    this.config = config;\n    this.parent = parentNode || null;\n    this.level = !this.parent ? 1 : this.parent.level + 1;\n    this.uid = uid++;\n\n    this.initState();\n    this.initChildren();\n  }\n\n  Node.prototype.initState = function initState() {\n    var _config = this.config,\n        valueKey = _config.value,\n        labelKey = _config.label;\n\n\n    this.value = this.data[valueKey];\n    this.label = this.data[labelKey];\n    this.pathNodes = this.calculatePathNodes();\n    this.path = this.pathNodes.map(function (node) {\n      return node.value;\n    });\n    this.pathLabels = this.pathNodes.map(function (node) {\n      return node.label;\n    });\n\n    // lazy load\n    this.loading = false;\n    this.loaded = false;\n  };\n\n  Node.prototype.initChildren = function initChildren() {\n    var _this = this;\n\n    var config = this.config;\n\n    var childrenKey = config.children;\n    var childrenData = this.data[childrenKey];\n    this.hasChildren = Array.isArray(childrenData);\n    this.children = (childrenData || []).map(function (child) {\n      return new Node(child, config, _this);\n    });\n  };\n\n  Node.prototype.calculatePathNodes = function calculatePathNodes() {\n    var nodes = [this];\n    var parent = this.parent;\n\n    while (parent) {\n      nodes.unshift(parent);\n      parent = parent.parent;\n    }\n\n    return nodes;\n  };\n\n  Node.prototype.getPath = function getPath() {\n    return this.path;\n  };\n\n  Node.prototype.getValue = function getValue() {\n    return this.value;\n  };\n\n  Node.prototype.getValueByOption = function getValueByOption() {\n    return this.config.emitPath ? this.getPath() : this.getValue();\n  };\n\n  Node.prototype.getText = function getText(allLevels, separator) {\n    return allLevels ? this.pathLabels.join(separator) : this.label;\n  };\n\n  Node.prototype.isSameNode = function isSameNode(checkedValue) {\n    var value = this.getValueByOption();\n    return this.config.multiple && Array.isArray(checkedValue) ? checkedValue.some(function (val) {\n      return Object(util_[\"isEqual\"])(val, value);\n    }) : Object(util_[\"isEqual\"])(checkedValue, value);\n  };\n\n  Node.prototype.broadcast = function broadcast(event) {\n    for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      args[_key - 1] = arguments[_key];\n    }\n\n    var handlerName = 'onParent' + Object(util_[\"capitalize\"])(event);\n\n    this.children.forEach(function (child) {\n      if (child) {\n        // bottom up\n        child.broadcast.apply(child, [event].concat(args));\n        child[handlerName] && child[handlerName].apply(child, args);\n      }\n    });\n  };\n\n  Node.prototype.emit = function emit(event) {\n    var parent = this.parent;\n\n    var handlerName = 'onChild' + Object(util_[\"capitalize\"])(event);\n    if (parent) {\n      for (var _len2 = arguments.length, args = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n        args[_key2 - 1] = arguments[_key2];\n      }\n\n      parent[handlerName] && parent[handlerName].apply(parent, args);\n      parent.emit.apply(parent, [event].concat(args));\n    }\n  };\n\n  Node.prototype.onParentCheck = function onParentCheck(checked) {\n    if (!this.isDisabled) {\n      this.setCheckState(checked);\n    }\n  };\n\n  Node.prototype.onChildCheck = function onChildCheck() {\n    var children = this.children;\n\n    var validChildren = children.filter(function (child) {\n      return !child.isDisabled;\n    });\n    var checked = validChildren.length ? validChildren.every(function (child) {\n      return child.checked;\n    }) : false;\n\n    this.setCheckState(checked);\n  };\n\n  Node.prototype.setCheckState = function setCheckState(checked) {\n    var totalNum = this.children.length;\n    var checkedNum = this.children.reduce(function (c, p) {\n      var num = p.checked ? 1 : p.indeterminate ? 0.5 : 0;\n      return c + num;\n    }, 0);\n\n    this.checked = checked;\n    this.indeterminate = checkedNum !== totalNum && checkedNum > 0;\n  };\n\n  Node.prototype.syncCheckState = function syncCheckState(checkedValue) {\n    var value = this.getValueByOption();\n    var checked = this.isSameNode(checkedValue, value);\n\n    this.doCheck(checked);\n  };\n\n  Node.prototype.doCheck = function doCheck(checked) {\n    if (this.checked !== checked) {\n      if (this.config.checkStrictly) {\n        this.checked = checked;\n      } else {\n        // bottom up to unify the calculation of the indeterminate state\n        this.broadcast('check', checked);\n        this.setCheckState(checked);\n        this.emit('check');\n      }\n    }\n  };\n\n  node_createClass(Node, [{\n    key: 'isDisabled',\n    get: function get() {\n      var data = this.data,\n          parent = this.parent,\n          config = this.config;\n\n      var disabledKey = config.disabled;\n      var checkStrictly = config.checkStrictly;\n\n      return data[disabledKey] || !checkStrictly && parent && parent.isDisabled;\n    }\n  }, {\n    key: 'isLeaf',\n    get: function get() {\n      var data = this.data,\n          loaded = this.loaded,\n          hasChildren = this.hasChildren,\n          children = this.children;\n      var _config2 = this.config,\n          lazy = _config2.lazy,\n          leafKey = _config2.leaf;\n\n      if (lazy) {\n        var isLeaf = Object(shared_[\"isDef\"])(data[leafKey]) ? data[leafKey] : loaded ? !children.length : false;\n        this.hasChildren = !isLeaf;\n        return isLeaf;\n      }\n      return !hasChildren;\n    }\n  }]);\n\n  return Node;\n}();\n\n/* harmony default export */ var src_node = (src_node_Node);\n// CONCATENATED MODULE: ./packages/cascader-panel/src/store.js\nfunction store_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\n\n\nvar flatNodes = function flatNodes(data, leafOnly) {\n  return data.reduce(function (res, node) {\n    if (node.isLeaf) {\n      res.push(node);\n    } else {\n      !leafOnly && res.push(node);\n      res = res.concat(flatNodes(node.children, leafOnly));\n    }\n    return res;\n  }, []);\n};\n\nvar store_Store = function () {\n  function Store(data, config) {\n    store_classCallCheck(this, Store);\n\n    this.config = config;\n    this.initNodes(data);\n  }\n\n  Store.prototype.initNodes = function initNodes(data) {\n    var _this = this;\n\n    data = Object(util_[\"coerceTruthyValueToArray\"])(data);\n    this.nodes = data.map(function (nodeData) {\n      return new src_node(nodeData, _this.config);\n    });\n    this.flattedNodes = this.getFlattedNodes(false, false);\n    this.leafNodes = this.getFlattedNodes(true, false);\n  };\n\n  Store.prototype.appendNode = function appendNode(nodeData, parentNode) {\n    var node = new src_node(nodeData, this.config, parentNode);\n    var children = parentNode ? parentNode.children : this.nodes;\n\n    children.push(node);\n  };\n\n  Store.prototype.appendNodes = function appendNodes(nodeDataList, parentNode) {\n    var _this2 = this;\n\n    nodeDataList = Object(util_[\"coerceTruthyValueToArray\"])(nodeDataList);\n    nodeDataList.forEach(function (nodeData) {\n      return _this2.appendNode(nodeData, parentNode);\n    });\n  };\n\n  Store.prototype.getNodes = function getNodes() {\n    return this.nodes;\n  };\n\n  Store.prototype.getFlattedNodes = function getFlattedNodes(leafOnly) {\n    var cached = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n    var cachedNodes = leafOnly ? this.leafNodes : this.flattedNodes;\n    return cached ? cachedNodes : flatNodes(this.nodes, leafOnly);\n  };\n\n  Store.prototype.getNodeByValue = function getNodeByValue(value) {\n    var nodes = this.getFlattedNodes(false, !this.config.lazy).filter(function (node) {\n      return Object(util_[\"valueEquals\"])(node.path, value) || node.value === value;\n    });\n    return nodes && nodes.length ? nodes[0] : null;\n  };\n\n  return Store;\n}();\n\n/* harmony default export */ var cascader_panel_src_store = (store_Store);\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/cascader-panel/src/cascader-panel.vue?vue&type=script&lang=js&\nvar cascader_panelvue_type_script_lang_js_extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n\n\nvar cascader_panelvue_type_script_lang_js_KeyCode = aria_utils_default.a.keys;\n\nvar DefaultProps = {\n  expandTrigger: 'click', // or hover\n  multiple: false,\n  checkStrictly: false, // whether all nodes can be selected\n  emitPath: true, // wether to emit an array of all levels value in which node is located\n  lazy: false,\n  lazyLoad: util_[\"noop\"],\n  value: 'value',\n  label: 'label',\n  children: 'children',\n  leaf: 'leaf',\n  disabled: 'disabled',\n  hoverThreshold: 500\n};\n\nvar cascader_panelvue_type_script_lang_js_isLeaf = function isLeaf(el) {\n  return !el.getAttribute('aria-owns');\n};\n\nvar getSibling = function getSibling(el, distance) {\n  var parentNode = el.parentNode;\n\n  if (parentNode) {\n    var siblings = parentNode.querySelectorAll('.el-cascader-node[tabindex=\"-1\"]');\n    var index = Array.prototype.indexOf.call(siblings, el);\n    return siblings[index + distance] || null;\n  }\n  return null;\n};\n\nvar getMenuIndex = function getMenuIndex(el, distance) {\n  if (!el) return;\n  var pieces = el.id.split('-');\n  return Number(pieces[pieces.length - 2]);\n};\n\nvar focusNode = function focusNode(el) {\n  if (!el) return;\n  el.focus();\n  !cascader_panelvue_type_script_lang_js_isLeaf(el) && el.click();\n};\n\nvar checkNode = function checkNode(el) {\n  if (!el) return;\n\n  var input = el.querySelector('input');\n  if (input) {\n    input.click();\n  } else if (cascader_panelvue_type_script_lang_js_isLeaf(el)) {\n    el.click();\n  }\n};\n\n/* harmony default export */ var cascader_panelvue_type_script_lang_js_ = ({\n  name: 'ElCascaderPanel',\n\n  components: {\n    CascaderMenu: cascader_menu\n  },\n\n  props: {\n    value: {},\n    options: Array,\n    props: Object,\n    border: {\n      type: Boolean,\n      default: true\n    },\n    renderLabel: Function\n  },\n\n  provide: function provide() {\n    return {\n      panel: this\n    };\n  },\n  data: function data() {\n    return {\n      checkedValue: null,\n      checkedNodePaths: [],\n      store: [],\n      menus: [],\n      activePath: [],\n      loadCount: 0\n    };\n  },\n\n\n  computed: {\n    config: function config() {\n      return merge_default()(cascader_panelvue_type_script_lang_js_extends({}, DefaultProps), this.props || {});\n    },\n    multiple: function multiple() {\n      return this.config.multiple;\n    },\n    checkStrictly: function checkStrictly() {\n      return this.config.checkStrictly;\n    },\n    leafOnly: function leafOnly() {\n      return !this.checkStrictly;\n    },\n    isHoverMenu: function isHoverMenu() {\n      return this.config.expandTrigger === 'hover';\n    },\n    renderLabelFn: function renderLabelFn() {\n      return this.renderLabel || this.$scopedSlots.default;\n    }\n  },\n\n  watch: {\n    value: function value() {\n      this.syncCheckedValue();\n      this.checkStrictly && this.calculateCheckedNodePaths();\n    },\n\n    options: {\n      handler: function handler() {\n        this.initStore();\n      },\n      immediate: true,\n      deep: true\n    },\n    checkedValue: function checkedValue(val) {\n      if (!Object(util_[\"isEqual\"])(val, this.value)) {\n        this.checkStrictly && this.calculateCheckedNodePaths();\n        this.$emit('input', val);\n        this.$emit('change', val);\n      }\n    }\n  },\n\n  mounted: function mounted() {\n    if (!this.isEmptyValue(this.value)) {\n      this.syncCheckedValue();\n    }\n  },\n\n\n  methods: {\n    initStore: function initStore() {\n      var config = this.config,\n          options = this.options;\n\n      if (config.lazy && Object(util_[\"isEmpty\"])(options)) {\n        this.lazyLoad();\n      } else {\n        this.store = new cascader_panel_src_store(options, config);\n        this.menus = [this.store.getNodes()];\n        this.syncMenuState();\n      }\n    },\n    syncCheckedValue: function syncCheckedValue() {\n      var value = this.value,\n          checkedValue = this.checkedValue;\n\n      if (!Object(util_[\"isEqual\"])(value, checkedValue)) {\n        this.activePath = [];\n        this.checkedValue = value;\n        this.syncMenuState();\n      }\n    },\n    syncMenuState: function syncMenuState() {\n      var multiple = this.multiple,\n          checkStrictly = this.checkStrictly;\n\n      this.syncActivePath();\n      multiple && this.syncMultiCheckState();\n      checkStrictly && this.calculateCheckedNodePaths();\n      this.$nextTick(this.scrollIntoView);\n    },\n    syncMultiCheckState: function syncMultiCheckState() {\n      var _this = this;\n\n      var nodes = this.getFlattedNodes(this.leafOnly);\n\n      nodes.forEach(function (node) {\n        node.syncCheckState(_this.checkedValue);\n      });\n    },\n    isEmptyValue: function isEmptyValue(val) {\n      var multiple = this.multiple,\n          config = this.config;\n      var emitPath = config.emitPath;\n\n      if (multiple || emitPath) {\n        return Object(util_[\"isEmpty\"])(val);\n      }\n      return false;\n    },\n    syncActivePath: function syncActivePath() {\n      var _this2 = this;\n\n      var store = this.store,\n          multiple = this.multiple,\n          activePath = this.activePath,\n          checkedValue = this.checkedValue;\n\n\n      if (!Object(util_[\"isEmpty\"])(activePath)) {\n        var nodes = activePath.map(function (node) {\n          return _this2.getNodeByValue(node.getValue());\n        });\n        this.expandNodes(nodes);\n      } else if (!this.isEmptyValue(checkedValue)) {\n        var value = multiple ? checkedValue[0] : checkedValue;\n        var checkedNode = this.getNodeByValue(value) || {};\n        var _nodes = (checkedNode.pathNodes || []).slice(0, -1);\n        this.expandNodes(_nodes);\n      } else {\n        this.activePath = [];\n        this.menus = [store.getNodes()];\n      }\n    },\n    expandNodes: function expandNodes(nodes) {\n      var _this3 = this;\n\n      nodes.forEach(function (node) {\n        return _this3.handleExpand(node, true /* silent */);\n      });\n    },\n    calculateCheckedNodePaths: function calculateCheckedNodePaths() {\n      var _this4 = this;\n\n      var checkedValue = this.checkedValue,\n          multiple = this.multiple;\n\n      var checkedValues = multiple ? Object(util_[\"coerceTruthyValueToArray\"])(checkedValue) : [checkedValue];\n      this.checkedNodePaths = checkedValues.map(function (v) {\n        var checkedNode = _this4.getNodeByValue(v);\n        return checkedNode ? checkedNode.pathNodes : [];\n      });\n    },\n    handleKeyDown: function handleKeyDown(e) {\n      var target = e.target,\n          keyCode = e.keyCode;\n\n\n      switch (keyCode) {\n        case cascader_panelvue_type_script_lang_js_KeyCode.up:\n          var prev = getSibling(target, -1);\n          focusNode(prev);\n          break;\n        case cascader_panelvue_type_script_lang_js_KeyCode.down:\n          var next = getSibling(target, 1);\n          focusNode(next);\n          break;\n        case cascader_panelvue_type_script_lang_js_KeyCode.left:\n          var preMenu = this.$refs.menu[getMenuIndex(target) - 1];\n          if (preMenu) {\n            var expandedNode = preMenu.$el.querySelector('.el-cascader-node[aria-expanded=\"true\"]');\n            focusNode(expandedNode);\n          }\n          break;\n        case cascader_panelvue_type_script_lang_js_KeyCode.right:\n          var nextMenu = this.$refs.menu[getMenuIndex(target) + 1];\n          if (nextMenu) {\n            var firstNode = nextMenu.$el.querySelector('.el-cascader-node[tabindex=\"-1\"]');\n            focusNode(firstNode);\n          }\n          break;\n        case cascader_panelvue_type_script_lang_js_KeyCode.enter:\n          checkNode(target);\n          break;\n        case cascader_panelvue_type_script_lang_js_KeyCode.esc:\n        case cascader_panelvue_type_script_lang_js_KeyCode.tab:\n          this.$emit('close');\n          break;\n        default:\n          return;\n      }\n    },\n    handleExpand: function handleExpand(node, silent) {\n      var activePath = this.activePath;\n      var level = node.level;\n\n      var path = activePath.slice(0, level - 1);\n      var menus = this.menus.slice(0, level);\n\n      if (!node.isLeaf) {\n        path.push(node);\n        menus.push(node.children);\n      }\n\n      this.activePath = path;\n      this.menus = menus;\n\n      if (!silent) {\n        var pathValues = path.map(function (node) {\n          return node.getValue();\n        });\n        var activePathValues = activePath.map(function (node) {\n          return node.getValue();\n        });\n        if (!Object(util_[\"valueEquals\"])(pathValues, activePathValues)) {\n          this.$emit('active-item-change', pathValues); // Deprecated\n          this.$emit('expand-change', pathValues);\n        }\n      }\n    },\n    handleCheckChange: function handleCheckChange(value) {\n      this.checkedValue = value;\n    },\n    lazyLoad: function lazyLoad(node, onFullfiled) {\n      var _this5 = this;\n\n      var config = this.config;\n\n      if (!node) {\n        node = node || { root: true, level: 0 };\n        this.store = new cascader_panel_src_store([], config);\n        this.menus = [this.store.getNodes()];\n      }\n      node.loading = true;\n      var resolve = function resolve(dataList) {\n        var parent = node.root ? null : node;\n        dataList && dataList.length && _this5.store.appendNodes(dataList, parent);\n        node.loading = false;\n        node.loaded = true;\n\n        // dispose default value on lazy load mode\n        if (Array.isArray(_this5.checkedValue)) {\n          var nodeValue = _this5.checkedValue[_this5.loadCount++];\n          var valueKey = _this5.config.value;\n          var leafKey = _this5.config.leaf;\n\n          if (Array.isArray(dataList) && dataList.filter(function (item) {\n            return item[valueKey] === nodeValue;\n          }).length > 0) {\n            var checkedNode = _this5.store.getNodeByValue(nodeValue);\n\n            if (!checkedNode.data[leafKey]) {\n              _this5.lazyLoad(checkedNode, function () {\n                _this5.handleExpand(checkedNode);\n              });\n            }\n\n            if (_this5.loadCount === _this5.checkedValue.length) {\n              _this5.$parent.computePresentText();\n            }\n          }\n        }\n\n        onFullfiled && onFullfiled(dataList);\n      };\n      config.lazyLoad(node, resolve);\n    },\n\n\n    /**\n     * public methods\n    */\n    calculateMultiCheckedValue: function calculateMultiCheckedValue() {\n      this.checkedValue = this.getCheckedNodes(this.leafOnly).map(function (node) {\n        return node.getValueByOption();\n      });\n    },\n    scrollIntoView: function scrollIntoView() {\n      if (this.$isServer) return;\n\n      var menus = this.$refs.menu || [];\n      menus.forEach(function (menu) {\n        var menuElement = menu.$el;\n        if (menuElement) {\n          var container = menuElement.querySelector('.el-scrollbar__wrap');\n          var activeNode = menuElement.querySelector('.el-cascader-node.is-active') || menuElement.querySelector('.el-cascader-node.in-active-path');\n          scroll_into_view_default()(container, activeNode);\n        }\n      });\n    },\n    getNodeByValue: function getNodeByValue(val) {\n      return this.store.getNodeByValue(val);\n    },\n    getFlattedNodes: function getFlattedNodes(leafOnly) {\n      var cached = !this.config.lazy;\n      return this.store.getFlattedNodes(leafOnly, cached);\n    },\n    getCheckedNodes: function getCheckedNodes(leafOnly) {\n      var checkedValue = this.checkedValue,\n          multiple = this.multiple;\n\n      if (multiple) {\n        var nodes = this.getFlattedNodes(leafOnly);\n        return nodes.filter(function (node) {\n          return node.checked;\n        });\n      } else {\n        return this.isEmptyValue(checkedValue) ? [] : [this.getNodeByValue(checkedValue)];\n      }\n    },\n    clearCheckedNodes: function clearCheckedNodes() {\n      var config = this.config,\n          leafOnly = this.leafOnly;\n      var multiple = config.multiple,\n          emitPath = config.emitPath;\n\n      if (multiple) {\n        this.getCheckedNodes(leafOnly).filter(function (node) {\n          return !node.isDisabled;\n        }).forEach(function (node) {\n          return node.doCheck(false);\n        });\n        this.calculateMultiCheckedValue();\n      } else {\n        this.checkedValue = emitPath ? [] : null;\n      }\n    }\n  }\n});\n// CONCATENATED MODULE: ./packages/cascader-panel/src/cascader-panel.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_cascader_panelvue_type_script_lang_js_ = (cascader_panelvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/cascader-panel/src/cascader-panel.vue\n\n\n\n\n\n/* normalize component */\n\nvar cascader_panel_component = normalizeComponent(\n  src_cascader_panelvue_type_script_lang_js_,\n  cascader_panelvue_type_template_id_34932346_render,\n  cascader_panelvue_type_template_id_34932346_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var cascader_panel_api; }\ncascader_panel_component.options.__file = \"packages/cascader-panel/src/cascader-panel.vue\"\n/* harmony default export */ var cascader_panel = (cascader_panel_component.exports);\n// CONCATENATED MODULE: ./packages/cascader-panel/index.js\n\n\n/* istanbul ignore next */\ncascader_panel.install = function (Vue) {\n  Vue.component(cascader_panel.name, cascader_panel);\n};\n\n/* harmony default export */ var packages_cascader_panel = (cascader_panel);\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/avatar/src/main.vue?vue&type=script&lang=js&\n\n/* harmony default export */ var avatar_src_mainvue_type_script_lang_js_ = ({\n  name: 'ElAvatar',\n\n  props: {\n    size: {\n      type: [Number, String],\n      validator: function validator(val) {\n        if (typeof val === 'string') {\n          return ['large', 'medium', 'small'].includes(val);\n        }\n        return typeof val === 'number';\n      }\n    },\n    shape: {\n      type: String,\n      default: 'circle',\n      validator: function validator(val) {\n        return ['circle', 'square'].includes(val);\n      }\n    },\n    icon: String,\n    src: String,\n    alt: String,\n    srcSet: String,\n    error: Function,\n    fit: {\n      type: String,\n      default: 'cover'\n    }\n  },\n\n  data: function data() {\n    return {\n      isImageExist: true\n    };\n  },\n\n\n  computed: {\n    avatarClass: function avatarClass() {\n      var size = this.size,\n          icon = this.icon,\n          shape = this.shape;\n\n      var classList = ['el-avatar'];\n\n      if (size && typeof size === 'string') {\n        classList.push('el-avatar--' + size);\n      }\n\n      if (icon) {\n        classList.push('el-avatar--icon');\n      }\n\n      if (shape) {\n        classList.push('el-avatar--' + shape);\n      }\n\n      return classList.join(' ');\n    }\n  },\n\n  methods: {\n    handleError: function handleError() {\n      var error = this.error;\n\n      var errorFlag = error ? error() : undefined;\n      if (errorFlag !== false) {\n        this.isImageExist = false;\n      }\n    },\n    renderAvatar: function renderAvatar() {\n      var h = this.$createElement;\n      var icon = this.icon,\n          src = this.src,\n          alt = this.alt,\n          isImageExist = this.isImageExist,\n          srcSet = this.srcSet,\n          fit = this.fit;\n\n\n      if (isImageExist && src) {\n        return h('img', {\n          attrs: {\n            src: src,\n\n            alt: alt,\n            srcSet: srcSet\n          },\n          on: {\n            'error': this.handleError\n          },\n          style: { 'object-fit': fit } });\n      }\n\n      if (icon) {\n        return h('i', { 'class': icon });\n      }\n\n      return this.$slots.default;\n    }\n  },\n\n  render: function render() {\n    var h = arguments[0];\n    var avatarClass = this.avatarClass,\n        size = this.size;\n\n\n    var sizeStyle = typeof size === 'number' ? {\n      height: size + 'px',\n      width: size + 'px',\n      lineHeight: size + 'px'\n    } : {};\n\n    return h(\n      'span',\n      { 'class': avatarClass, style: sizeStyle },\n      [this.renderAvatar()]\n    );\n  }\n});\n// CONCATENATED MODULE: ./packages/avatar/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_avatar_src_mainvue_type_script_lang_js_ = (avatar_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/avatar/src/main.vue\nvar src_main_render, src_main_staticRenderFns\n\n\n\n\n/* normalize component */\n\nvar avatar_src_main_component = normalizeComponent(\n  packages_avatar_src_mainvue_type_script_lang_js_,\n  src_main_render,\n  src_main_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var avatar_src_main_api; }\navatar_src_main_component.options.__file = \"packages/avatar/src/main.vue\"\n/* harmony default export */ var avatar_src_main = (avatar_src_main_component.exports);\n// CONCATENATED MODULE: ./packages/avatar/index.js\n\n\n/* istanbul ignore next */\navatar_src_main.install = function (Vue) {\n  Vue.component(avatar_src_main.name, avatar_src_main);\n};\n\n/* harmony default export */ var avatar = (avatar_src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/drawer/src/main.vue?vue&type=template&id=a4885264&\nvar mainvue_type_template_id_a4885264_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"transition\",\n    {\n      attrs: { name: \"el-drawer-fade\" },\n      on: { \"after-enter\": _vm.afterEnter, \"after-leave\": _vm.afterLeave }\n    },\n    [\n      _c(\n        \"div\",\n        {\n          directives: [\n            {\n              name: \"show\",\n              rawName: \"v-show\",\n              value: _vm.visible,\n              expression: \"visible\"\n            }\n          ],\n          staticClass: \"el-drawer__wrapper\",\n          attrs: { tabindex: \"-1\" }\n        },\n        [\n          _c(\n            \"div\",\n            {\n              staticClass: \"el-drawer__container\",\n              class: _vm.visible && \"el-drawer__open\",\n              attrs: { role: \"document\", tabindex: \"-1\" },\n              on: {\n                click: function($event) {\n                  if ($event.target !== $event.currentTarget) {\n                    return null\n                  }\n                  return _vm.handleWrapperClick($event)\n                }\n              }\n            },\n            [\n              _c(\n                \"div\",\n                {\n                  ref: \"drawer\",\n                  staticClass: \"el-drawer\",\n                  class: [_vm.direction, _vm.customClass],\n                  style: _vm.isHorizontal\n                    ? \"width: \" + _vm.drawerSize\n                    : \"height: \" + _vm.drawerSize,\n                  attrs: {\n                    \"aria-modal\": \"true\",\n                    \"aria-labelledby\": \"el-drawer__title\",\n                    \"aria-label\": _vm.title,\n                    role: \"dialog\",\n                    tabindex: \"-1\"\n                  }\n                },\n                [\n                  _vm.withHeader\n                    ? _c(\n                        \"header\",\n                        {\n                          staticClass: \"el-drawer__header\",\n                          attrs: { id: \"el-drawer__title\" }\n                        },\n                        [\n                          _vm._t(\"title\", [\n                            _c(\n                              \"span\",\n                              { attrs: { role: \"heading\", title: _vm.title } },\n                              [_vm._v(_vm._s(_vm.title))]\n                            )\n                          ]),\n                          _vm.showClose\n                            ? _c(\n                                \"button\",\n                                {\n                                  staticClass: \"el-drawer__close-btn\",\n                                  attrs: {\n                                    \"aria-label\":\n                                      \"close \" + (_vm.title || \"drawer\"),\n                                    type: \"button\"\n                                  },\n                                  on: { click: _vm.closeDrawer }\n                                },\n                                [\n                                  _c(\"i\", {\n                                    staticClass:\n                                      \"el-dialog__close el-icon el-icon-close\"\n                                  })\n                                ]\n                              )\n                            : _vm._e()\n                        ],\n                        2\n                      )\n                    : _vm._e(),\n                  _vm.rendered\n                    ? _c(\n                        \"section\",\n                        { staticClass: \"el-drawer__body\" },\n                        [_vm._t(\"default\")],\n                        2\n                      )\n                    : _vm._e()\n                ]\n              )\n            ]\n          )\n        ]\n      )\n    ]\n  )\n}\nvar mainvue_type_template_id_a4885264_staticRenderFns = []\nmainvue_type_template_id_a4885264_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/drawer/src/main.vue?vue&type=template&id=a4885264&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/drawer/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n/* harmony default export */ var drawer_src_mainvue_type_script_lang_js_ = ({\n  name: 'ElDrawer',\n  mixins: [popup_default.a, emitter_default.a],\n  props: {\n    appendToBody: {\n      type: Boolean,\n      default: false\n    },\n    beforeClose: {\n      type: Function\n    },\n    customClass: {\n      type: String,\n      default: ''\n    },\n    closeOnPressEscape: {\n      type: Boolean,\n      default: true\n    },\n    destroyOnClose: {\n      type: Boolean,\n      default: false\n    },\n    modal: {\n      type: Boolean,\n      default: true\n    },\n    direction: {\n      type: String,\n      default: 'rtl',\n      validator: function validator(val) {\n        return ['ltr', 'rtl', 'ttb', 'btt'].indexOf(val) !== -1;\n      }\n    },\n    modalAppendToBody: {\n      type: Boolean,\n      default: true\n    },\n    showClose: {\n      type: Boolean,\n      default: true\n    },\n    size: {\n      type: [Number, String],\n      default: '30%'\n    },\n    title: {\n      type: String,\n      default: ''\n    },\n    visible: {\n      type: Boolean\n    },\n    wrapperClosable: {\n      type: Boolean,\n      default: true\n    },\n    withHeader: {\n      type: Boolean,\n      default: true\n    }\n  },\n  computed: {\n    isHorizontal: function isHorizontal() {\n      return this.direction === 'rtl' || this.direction === 'ltr';\n    },\n    drawerSize: function drawerSize() {\n      return typeof this.size === 'number' ? this.size + 'px' : this.size;\n    }\n  },\n  data: function data() {\n    return {\n      closed: false,\n      prevActiveElement: null\n    };\n  },\n\n  watch: {\n    visible: function visible(val) {\n      var _this = this;\n\n      if (val) {\n        this.closed = false;\n        this.$emit('open');\n        if (this.appendToBody) {\n          document.body.appendChild(this.$el);\n        }\n        this.prevActiveElement = document.activeElement;\n      } else {\n        if (!this.closed) {\n          this.$emit('close');\n          if (this.destroyOnClose === true) {\n            this.rendered = false;\n          }\n        }\n        this.$nextTick(function () {\n          if (_this.prevActiveElement) {\n            _this.prevActiveElement.focus();\n          }\n        });\n      }\n    }\n  },\n  methods: {\n    afterEnter: function afterEnter() {\n      this.$emit('opened');\n    },\n    afterLeave: function afterLeave() {\n      this.$emit('closed');\n    },\n    hide: function hide(cancel) {\n      if (cancel !== false) {\n        this.$emit('update:visible', false);\n        this.$emit('close');\n        if (this.destroyOnClose === true) {\n          this.rendered = false;\n        }\n        this.closed = true;\n      }\n    },\n    handleWrapperClick: function handleWrapperClick() {\n      if (this.wrapperClosable) {\n        this.closeDrawer();\n      }\n    },\n    closeDrawer: function closeDrawer() {\n      if (typeof this.beforeClose === 'function') {\n        this.beforeClose(this.hide);\n      } else {\n        this.hide();\n      }\n    },\n    handleClose: function handleClose() {\n      // This method here will be called by PopupManger, when the `closeOnPressEscape` was set to true\n      // pressing `ESC` will call this method, and also close the drawer.\n      // This method also calls `beforeClose` if there was one.\n      this.closeDrawer();\n    }\n  },\n  mounted: function mounted() {\n    if (this.visible) {\n      this.rendered = true;\n      this.open();\n      if (this.appendToBody) {\n        document.body.appendChild(this.$el);\n      }\n    }\n  },\n  destroyed: function destroyed() {\n    // if appendToBody is true, remove DOM node after destroy\n    if (this.appendToBody && this.$el && this.$el.parentNode) {\n      this.$el.parentNode.removeChild(this.$el);\n    }\n  }\n});\n// CONCATENATED MODULE: ./packages/drawer/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_drawer_src_mainvue_type_script_lang_js_ = (drawer_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/drawer/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar drawer_src_main_component = normalizeComponent(\n  packages_drawer_src_mainvue_type_script_lang_js_,\n  mainvue_type_template_id_a4885264_render,\n  mainvue_type_template_id_a4885264_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var drawer_src_main_api; }\ndrawer_src_main_component.options.__file = \"packages/drawer/src/main.vue\"\n/* harmony default export */ var drawer_src_main = (drawer_src_main_component.exports);\n// CONCATENATED MODULE: ./packages/drawer/index.js\n\n\n/* istanbul ignore next */\ndrawer_src_main.install = function (Vue) {\n  Vue.component(drawer_src_main.name, drawer_src_main);\n};\n\n/* harmony default export */ var drawer = (drawer_src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/statistic/src/main.vue?vue&type=template&id=76339aa7&\nvar mainvue_type_template_id_76339aa7_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\"div\", { staticClass: \"el-statistic\" }, [\n    _vm.title || _vm.$slots.title\n      ? _c(\n          \"div\",\n          { staticClass: \"head\" },\n          [\n            _vm._t(\"title\", [\n              _c(\"span\", { staticClass: \"title\" }, [\n                _vm._v(\"\\n        \" + _vm._s(_vm.title) + \"\\n      \")\n              ])\n            ])\n          ],\n          2\n        )\n      : _vm._e(),\n    _c(\"div\", { staticClass: \"con\" }, [\n      _vm.prefix || _vm.$slots.prefix\n        ? _c(\n            \"span\",\n            { staticClass: \"prefix\" },\n            [\n              _vm._t(\"prefix\", [\n                _vm._v(\"\\n        \" + _vm._s(_vm.prefix) + \"\\n      \")\n              ])\n            ],\n            2\n          )\n        : _vm._e(),\n      _c(\n        \"span\",\n        { staticClass: \"number\", style: _vm.valueStyle },\n        [_vm._t(\"formatter\", [_vm._v(\" \" + _vm._s(_vm.disposeValue))])],\n        2\n      ),\n      _vm.suffix || _vm.$slots.suffix\n        ? _c(\n            \"span\",\n            { staticClass: \"suffix\" },\n            [\n              _vm._t(\"suffix\", [\n                _vm._v(\"\\n        \" + _vm._s(_vm.suffix) + \"\\n      \")\n              ])\n            ],\n            2\n          )\n        : _vm._e()\n    ])\n  ])\n}\nvar mainvue_type_template_id_76339aa7_staticRenderFns = []\nmainvue_type_template_id_76339aa7_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/statistic/src/main.vue?vue&type=template&id=76339aa7&\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/lodash\"\nvar lodash_ = __nested_webpack_require_8926__(28);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/statistic/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n/* harmony default export */ var statistic_src_mainvue_type_script_lang_js_ = ({\n  name: 'ElStatistic',\n  data: function data() {\n    return {\n      disposeValue: '',\n      timeTask: null,\n      REFRESH_INTERVAL: 1000 / 30\n    };\n  },\n\n  props: {\n    decimalSeparator: {\n      type: String,\n      default: '.'\n    },\n    groupSeparator: {\n      type: String,\n      default: ''\n    },\n    precision: {\n      type: Number,\n      default: null\n    },\n    value: {\n      type: [String, Number, Date],\n      default: ''\n    },\n    prefix: {\n      type: String,\n      default: ''\n    },\n    suffix: {\n      type: String,\n      default: ''\n    },\n    title: {\n      type: [String, Number],\n      default: ''\n    },\n    timeIndices: {\n      type: Boolean,\n      default: false\n    },\n    valueStyle: {\n      type: Object,\n      default: function _default() {\n        return {};\n      }\n    },\n    format: {\n      type: String,\n      default: 'HH:mm:ss:SSS'\n    },\n    rate: {\n      type: Number,\n      default: 1000\n    }\n  },\n  created: function created() {\n    this.branch();\n  },\n\n  watch: {\n    value: function value() {\n      this.branch();\n    },\n    groupSeparator: function groupSeparator() {\n      this.dispose();\n    },\n    mulriple: function mulriple() {\n      this.dispose();\n    }\n  },\n  methods: {\n    branch: function branch() {\n      var timeIndices = this.timeIndices,\n          countDown = this.countDown,\n          dispose = this.dispose;\n\n      if (timeIndices) {\n        countDown(this.value.valueOf() || this.value);\n      } else {\n        dispose();\n      }\n    },\n    magnification: function magnification(num) {\n      var mulriple = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1000;\n      var groupSeparator = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : ',';\n\n      // magnification factor\n      var level = String(mulriple).length;\n      return num.replace(new RegExp('(\\\\d)(?=(\\\\d{' + (level - 1) + '})+$)', 'g'), '$1' + groupSeparator);\n    },\n    dispose: function dispose() {\n      var value = this.value,\n          rate = this.rate,\n          groupSeparator = this.groupSeparator;\n\n      if (!Object(lodash_[\"isNumber\"])(value)) return false;\n      if (this.precision) {\n        value = value.toFixed(this.precision);\n      }\n\n      var _String$split = String(value).split('.'),\n          integer = _String$split[0],\n          decimal = _String$split[1];\n      // 1000 multiplying power\n\n\n      if (groupSeparator) {\n        integer = this.magnification(integer, rate, groupSeparator);\n      }\n      var result = '' + integer + (decimal ? this.decimalSeparator + decimal : '');\n      this.disposeValue = result;\n      return result;\n    },\n    diffDate: function diffDate(minuend, subtrahend) {\n      return Math.max(minuend - subtrahend, 0);\n    },\n    suspend: function suspend(isStop) {\n      if (isStop) {\n        if (this.timeTask) {\n          clearInterval(this.timeTask);\n          this.timeTask = null;\n        }\n      } else {\n        this.branch();\n      }\n      return this.disposeValue;\n    },\n\n    formatTimeStr: function formatTimeStr(time) {\n      var format = this.format;\n\n      var escapeRegex = /\\[[^\\]]*]/g;\n      var keepList = (format.match(escapeRegex) || []).map(function (str) {\n        return str.slice(1, -1);\n      });\n      var timeUnits = [['Y', 1000 * 60 * 60 * 24 * 365], // years\n      ['M', 1000 * 60 * 60 * 24 * 30], // months\n      ['D', 1000 * 60 * 60 * 24], // days\n      ['H', 1000 * 60 * 60], // hours\n      ['m', 1000 * 60], // minutes\n      ['s', 1000], // seconds\n      ['S', 1] // million seconds\n      ];\n      var formatText = Object(lodash_[\"reduce\"])(timeUnits, function (con, item) {\n        var name = item[0];\n        return con.replace(new RegExp(name + '+', 'g'), function (match) {\n          var sum = Object(lodash_[\"chain\"])(time).divide(item[1]).floor(0).value();\n          time -= Object(lodash_[\"multiply\"])(sum, item[1]);\n          return Object(lodash_[\"padStart\"])(String(sum), String(match).length, 0);\n        });\n      }, format);\n      var index = 0;\n      return formatText.replace(escapeRegex, function () {\n        var match = keepList[index];\n        index += 1;\n        return match;\n      });\n    },\n    stopTime: function stopTime(time) {\n      var result = true; // stop\n      if (time) {\n        this.$emit('change', time);\n        result = false;\n      } else {\n        result = true;\n        this.suspend(true);\n        this.$emit('finish', true);\n      }\n      return result;\n    },\n    countDown: function countDown(timeVlaue) {\n      var REFRESH_INTERVAL = this.REFRESH_INTERVAL,\n          timeTask = this.timeTask,\n          diffDate = this.diffDate,\n          formatTimeStr = this.formatTimeStr,\n          stopTime = this.stopTime,\n          suspend = this.suspend;\n\n      if (timeTask) return;\n      var than = this;\n      this.timeTask = setInterval(function () {\n        var diffTiem = diffDate(timeVlaue, Date.now());\n        than.disposeValue = formatTimeStr(diffTiem);\n        stopTime(diffTiem);\n      }, REFRESH_INTERVAL);\n      this.$once('hook:beforeDestroy', function () {\n        suspend(true);\n      });\n    }\n  }\n});\n// CONCATENATED MODULE: ./packages/statistic/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_statistic_src_mainvue_type_script_lang_js_ = (statistic_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/statistic/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar statistic_src_main_component = normalizeComponent(\n  packages_statistic_src_mainvue_type_script_lang_js_,\n  mainvue_type_template_id_76339aa7_render,\n  mainvue_type_template_id_76339aa7_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var statistic_src_main_api; }\nstatistic_src_main_component.options.__file = \"packages/statistic/src/main.vue\"\n/* harmony default export */ var statistic_src_main = (statistic_src_main_component.exports);\n// CONCATENATED MODULE: ./packages/statistic/index.js\n\n\n/* istanbul ignore next */\nstatistic_src_main.install = function (Vue) {\n  Vue.component(statistic_src_main.name, statistic_src_main);\n};\n\n/* harmony default export */ var statistic = (statistic_src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/popconfirm/src/main.vue?vue&type=template&id=048de730&\nvar mainvue_type_template_id_048de730_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"el-popover\",\n    _vm._b(\n      {\n        attrs: { trigger: \"click\" },\n        model: {\n          value: _vm.visible,\n          callback: function($$v) {\n            _vm.visible = $$v\n          },\n          expression: \"visible\"\n        }\n      },\n      \"el-popover\",\n      _vm.$attrs,\n      false\n    ),\n    [\n      _c(\"div\", { staticClass: \"el-popconfirm\" }, [\n        _c(\"p\", { staticClass: \"el-popconfirm__main\" }, [\n          !_vm.hideIcon\n            ? _c(\"i\", {\n                staticClass: \"el-popconfirm__icon\",\n                class: _vm.icon,\n                style: { color: _vm.iconColor }\n              })\n            : _vm._e(),\n          _vm._v(\"\\n      \" + _vm._s(_vm.title) + \"\\n    \")\n        ]),\n        _c(\n          \"div\",\n          { staticClass: \"el-popconfirm__action\" },\n          [\n            _c(\n              \"el-button\",\n              {\n                attrs: { size: \"mini\", type: _vm.cancelButtonType },\n                on: { click: _vm.cancel }\n              },\n              [\n                _vm._v(\n                  \"\\n        \" +\n                    _vm._s(_vm.displayCancelButtonText) +\n                    \"\\n      \"\n                )\n              ]\n            ),\n            _c(\n              \"el-button\",\n              {\n                attrs: { size: \"mini\", type: _vm.confirmButtonType },\n                on: { click: _vm.confirm }\n              },\n              [\n                _vm._v(\n                  \"\\n        \" +\n                    _vm._s(_vm.displayConfirmButtonText) +\n                    \"\\n      \"\n                )\n              ]\n            )\n          ],\n          1\n        )\n      ]),\n      _vm._t(\"reference\", null, { slot: \"reference\" })\n    ],\n    2\n  )\n}\nvar mainvue_type_template_id_048de730_staticRenderFns = []\nmainvue_type_template_id_048de730_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/popconfirm/src/main.vue?vue&type=template&id=048de730&\n\n// EXTERNAL MODULE: external \"element-ui/lib/popover\"\nvar popover_ = __nested_webpack_require_8926__(45);\nvar popover_default = /*#__PURE__*/__nested_webpack_require_8926__.n(popover_);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/popconfirm/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n/* harmony default export */ var popconfirm_src_mainvue_type_script_lang_js_ = ({\n  name: 'ElPopconfirm',\n  props: {\n    title: {\n      type: String\n    },\n    confirmButtonText: {\n      type: String\n    },\n    cancelButtonText: {\n      type: String\n    },\n    confirmButtonType: {\n      type: String,\n      default: 'primary'\n    },\n    cancelButtonType: {\n      type: String,\n      default: 'text'\n    },\n    icon: {\n      type: String,\n      default: 'el-icon-question'\n    },\n    iconColor: {\n      type: String,\n      default: '#f90'\n    },\n    hideIcon: {\n      type: Boolean,\n      default: false\n    }\n  },\n  components: {\n    ElPopover: popover_default.a,\n    ElButton: button_default.a\n  },\n  data: function data() {\n    return {\n      visible: false\n    };\n  },\n\n  computed: {\n    displayConfirmButtonText: function displayConfirmButtonText() {\n      return this.confirmButtonText || Object(lib_locale_[\"t\"])('el.popconfirm.confirmButtonText');\n    },\n    displayCancelButtonText: function displayCancelButtonText() {\n      return this.cancelButtonText || Object(lib_locale_[\"t\"])('el.popconfirm.cancelButtonText');\n    }\n  },\n  methods: {\n    confirm: function confirm() {\n      this.visible = false;\n      this.$emit('confirm');\n    },\n    cancel: function cancel() {\n      this.visible = false;\n      this.$emit('cancel');\n    }\n  }\n});\n// CONCATENATED MODULE: ./packages/popconfirm/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_popconfirm_src_mainvue_type_script_lang_js_ = (popconfirm_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/popconfirm/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar popconfirm_src_main_component = normalizeComponent(\n  packages_popconfirm_src_mainvue_type_script_lang_js_,\n  mainvue_type_template_id_048de730_render,\n  mainvue_type_template_id_048de730_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var popconfirm_src_main_api; }\npopconfirm_src_main_component.options.__file = \"packages/popconfirm/src/main.vue\"\n/* harmony default export */ var popconfirm_src_main = (popconfirm_src_main_component.exports);\n// CONCATENATED MODULE: ./packages/popconfirm/index.js\n\n\n/* istanbul ignore next */\npopconfirm_src_main.install = function (Vue) {\n  Vue.component(popconfirm_src_main.name, popconfirm_src_main);\n};\n\n/* harmony default export */ var popconfirm = (popconfirm_src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/skeleton/src/index.vue?vue&type=template&id=7f659269&\nvar srcvue_type_template_id_7f659269_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    [\n      _vm.uiLoading\n        ? [\n            _c(\n              \"div\",\n              _vm._b(\n                { class: [\"el-skeleton\", _vm.animated ? \"is-animated\" : \"\"] },\n                \"div\",\n                _vm.$attrs,\n                false\n              ),\n              [\n                _vm._l(_vm.count, function(i) {\n                  return [\n                    _vm.loading\n                      ? _vm._t(\n                          \"template\",\n                          _vm._l(_vm.rows, function(item) {\n                            return _c(\"el-skeleton-item\", {\n                              key: i + \"-\" + item,\n                              class: {\n                                \"el-skeleton__paragraph\": item !== 1,\n                                \"is-first\": item === 1,\n                                \"is-last\": item === _vm.rows && _vm.rows > 1\n                              },\n                              attrs: { variant: \"p\" }\n                            })\n                          })\n                        )\n                      : _vm._e()\n                  ]\n                })\n              ],\n              2\n            )\n          ]\n        : [_vm._t(\"default\", null, null, _vm.$attrs)]\n    ],\n    2\n  )\n}\nvar srcvue_type_template_id_7f659269_staticRenderFns = []\nsrcvue_type_template_id_7f659269_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/skeleton/src/index.vue?vue&type=template&id=7f659269&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/skeleton/src/index.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ var skeleton_srcvue_type_script_lang_js_ = ({\n  name: 'ElSkeleton',\n  props: {\n    animated: {\n      type: Boolean,\n      default: false\n    },\n    count: {\n      type: Number,\n      default: 1\n    },\n    rows: {\n      type: Number,\n      default: 4\n    },\n    loading: {\n      type: Boolean,\n      default: true\n    },\n    throttle: {\n      type: Number,\n      default: 0\n    }\n  },\n  watch: {\n    loading: {\n      handler: function handler(loading) {\n        var _this = this;\n\n        if (this.throttle <= 0) {\n          this.uiLoading = loading;\n          return;\n        }\n        if (loading) {\n          clearTimeout(this.timeoutHandle);\n          this.timeoutHandle = setTimeout(function () {\n            _this.uiLoading = _this.loading;\n          }, this.throttle);\n        } else {\n          this.uiLoading = loading;\n        }\n      },\n\n      immediate: true\n    }\n  },\n  data: function data() {\n    return {\n      uiLoading: this.throttle <= 0 ? this.loading : false\n    };\n  }\n});\n// CONCATENATED MODULE: ./packages/skeleton/src/index.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_skeleton_srcvue_type_script_lang_js_ = (skeleton_srcvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/skeleton/src/index.vue\n\n\n\n\n\n/* normalize component */\n\nvar skeleton_src_component = normalizeComponent(\n  packages_skeleton_srcvue_type_script_lang_js_,\n  srcvue_type_template_id_7f659269_render,\n  srcvue_type_template_id_7f659269_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var skeleton_src_api; }\nskeleton_src_component.options.__file = \"packages/skeleton/src/index.vue\"\n/* harmony default export */ var skeleton_src = (skeleton_src_component.exports);\n// CONCATENATED MODULE: ./packages/skeleton/index.js\n\n\n/* istanbul ignore next */\nskeleton_src.install = function (Vue) {\n  Vue.component(skeleton_src.name, skeleton_src);\n};\n\n/* harmony default export */ var skeleton = (skeleton_src);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/skeleton/src/item.vue?vue&type=template&id=4bc8804c&\nvar itemvue_type_template_id_4bc8804c_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    { class: [\"el-skeleton__item\", \"el-skeleton__\" + _vm.variant] },\n    [_vm.variant === \"image\" ? _c(\"img-placeholder\") : _vm._e()],\n    1\n  )\n}\nvar itemvue_type_template_id_4bc8804c_staticRenderFns = []\nitemvue_type_template_id_4bc8804c_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/skeleton/src/item.vue?vue&type=template&id=4bc8804c&\n\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/skeleton/src/img-placeholder.vue?vue&type=template&id=1b2cb5c0&\nvar img_placeholdervue_type_template_id_1b2cb5c0_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"svg\",\n    {\n      attrs: { viewBox: \"0 0 1024 1024\", xmlns: \"http://www.w3.org/2000/svg\" }\n    },\n    [\n      _c(\"path\", {\n        attrs: {\n          d:\n            \"M64 896V128h896v768H64z m64-128l192-192 116.352 116.352L640 448l256 307.2V192H128v576z m224-480a96 96 0 1 1-0.064 192.064A96 96 0 0 1 352 288z\"\n        }\n      })\n    ]\n  )\n}\nvar img_placeholdervue_type_template_id_1b2cb5c0_staticRenderFns = []\nimg_placeholdervue_type_template_id_1b2cb5c0_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/skeleton/src/img-placeholder.vue?vue&type=template&id=1b2cb5c0&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/skeleton/src/img-placeholder.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ var img_placeholdervue_type_script_lang_js_ = ({\n  name: 'ImgPlaceholder'\n});\n// CONCATENATED MODULE: ./packages/skeleton/src/img-placeholder.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_img_placeholdervue_type_script_lang_js_ = (img_placeholdervue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/skeleton/src/img-placeholder.vue\n\n\n\n\n\n/* normalize component */\n\nvar img_placeholder_component = normalizeComponent(\n  src_img_placeholdervue_type_script_lang_js_,\n  img_placeholdervue_type_template_id_1b2cb5c0_render,\n  img_placeholdervue_type_template_id_1b2cb5c0_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var img_placeholder_api; }\nimg_placeholder_component.options.__file = \"packages/skeleton/src/img-placeholder.vue\"\n/* harmony default export */ var img_placeholder = (img_placeholder_component.exports);\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/skeleton/src/item.vue?vue&type=script&lang=js&\nvar _components;\n\n//\n//\n//\n//\n//\n//\n\n\n\n/* harmony default export */ var skeleton_src_itemvue_type_script_lang_js_ = ({\n  name: 'ElSkeletonItem',\n  props: {\n    variant: {\n      type: String,\n      default: 'text'\n    }\n  },\n  components: (_components = {}, _components[img_placeholder.name] = img_placeholder, _components)\n});\n// CONCATENATED MODULE: ./packages/skeleton/src/item.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_skeleton_src_itemvue_type_script_lang_js_ = (skeleton_src_itemvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/skeleton/src/item.vue\n\n\n\n\n\n/* normalize component */\n\nvar skeleton_src_item_component = normalizeComponent(\n  packages_skeleton_src_itemvue_type_script_lang_js_,\n  itemvue_type_template_id_4bc8804c_render,\n  itemvue_type_template_id_4bc8804c_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var skeleton_src_item_api; }\nskeleton_src_item_component.options.__file = \"packages/skeleton/src/item.vue\"\n/* harmony default export */ var skeleton_src_item = (skeleton_src_item_component.exports);\n// CONCATENATED MODULE: ./packages/skeleton-item/index.js\n\n\n/* istanbul ignore next */\nskeleton_src_item.install = function (Vue) {\n  Vue.component(skeleton_src_item.name, skeleton_src_item);\n};\n\n/* harmony default export */ var skeleton_item = (skeleton_src_item);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/empty/src/index.vue?vue&type=template&id=347ced91&\nvar srcvue_type_template_id_347ced91_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\"div\", { staticClass: \"el-empty\" }, [\n    _c(\n      \"div\",\n      { staticClass: \"el-empty__image\", style: _vm.imageStyle },\n      [\n        _vm.image\n          ? _c(\"img\", {\n              attrs: { src: _vm.image, ondragstart: \"return false\" }\n            })\n          : _vm._t(\"image\", [_c(\"img-empty\")])\n      ],\n      2\n    ),\n    _c(\n      \"div\",\n      { staticClass: \"el-empty__description\" },\n      [\n        _vm.$slots.description\n          ? _vm._t(\"description\")\n          : _c(\"p\", [_vm._v(_vm._s(_vm.emptyDescription))])\n      ],\n      2\n    ),\n    _vm.$slots.default\n      ? _c(\"div\", { staticClass: \"el-empty__bottom\" }, [_vm._t(\"default\")], 2)\n      : _vm._e()\n  ])\n}\nvar srcvue_type_template_id_347ced91_staticRenderFns = []\nsrcvue_type_template_id_347ced91_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/empty/src/index.vue?vue&type=template&id=347ced91&\n\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/empty/src/img-empty.vue?vue&type=template&id=42918b82&\nvar img_emptyvue_type_template_id_42918b82_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"svg\",\n    {\n      attrs: {\n        viewBox: \"0 0 79 86\",\n        version: \"1.1\",\n        xmlns: \"http://www.w3.org/2000/svg\",\n        \"xmlns:xlink\": \"http://www.w3.org/1999/xlink\"\n      }\n    },\n    [\n      _c(\n        \"defs\",\n        [\n          _c(\n            \"linearGradient\",\n            {\n              attrs: {\n                id: \"linearGradient-1-\" + _vm.id,\n                x1: \"38.8503086%\",\n                y1: \"0%\",\n                x2: \"61.1496914%\",\n                y2: \"100%\"\n              }\n            },\n            [\n              _c(\"stop\", { attrs: { \"stop-color\": \"#FCFCFD\", offset: \"0%\" } }),\n              _c(\"stop\", { attrs: { \"stop-color\": \"#EEEFF3\", offset: \"100%\" } })\n            ],\n            1\n          ),\n          _c(\n            \"linearGradient\",\n            {\n              attrs: {\n                id: \"linearGradient-2-\" + _vm.id,\n                x1: \"0%\",\n                y1: \"9.5%\",\n                x2: \"100%\",\n                y2: \"90.5%\"\n              }\n            },\n            [\n              _c(\"stop\", { attrs: { \"stop-color\": \"#FCFCFD\", offset: \"0%\" } }),\n              _c(\"stop\", { attrs: { \"stop-color\": \"#E9EBEF\", offset: \"100%\" } })\n            ],\n            1\n          ),\n          _c(\"rect\", {\n            attrs: {\n              id: \"path-3-\" + _vm.id,\n              x: \"0\",\n              y: \"0\",\n              width: \"17\",\n              height: \"36\"\n            }\n          })\n        ],\n        1\n      ),\n      _c(\n        \"g\",\n        {\n          attrs: {\n            id: \"Illustrations\",\n            stroke: \"none\",\n            \"stroke-width\": \"1\",\n            fill: \"none\",\n            \"fill-rule\": \"evenodd\"\n          }\n        },\n        [\n          _c(\n            \"g\",\n            {\n              attrs: {\n                id: \"B-type\",\n                transform: \"translate(-1268.000000, -535.000000)\"\n              }\n            },\n            [\n              _c(\n                \"g\",\n                {\n                  attrs: {\n                    id: \"Group-2\",\n                    transform: \"translate(1268.000000, 535.000000)\"\n                  }\n                },\n                [\n                  _c(\"path\", {\n                    attrs: {\n                      id: \"Oval-Copy-2\",\n                      d:\n                        \"M39.5,86 C61.3152476,86 79,83.9106622 79,81.3333333 C79,78.7560045 57.3152476,78 35.5,78 C13.6847524,78 0,78.7560045 0,81.3333333 C0,83.9106622 17.6847524,86 39.5,86 Z\",\n                      fill: \"#F7F8FC\"\n                    }\n                  }),\n                  _c(\"polygon\", {\n                    attrs: {\n                      id: \"Rectangle-Copy-14\",\n                      fill: \"#E5E7E9\",\n                      transform:\n                        \"translate(27.500000, 51.500000) scale(1, -1) translate(-27.500000, -51.500000) \",\n                      points: \"13 58 53 58 42 45 2 45\"\n                    }\n                  }),\n                  _c(\n                    \"g\",\n                    {\n                      attrs: {\n                        id: \"Group-Copy\",\n                        transform:\n                          \"translate(34.500000, 31.500000) scale(-1, 1) rotate(-25.000000) translate(-34.500000, -31.500000) translate(7.000000, 10.000000)\"\n                      }\n                    },\n                    [\n                      _c(\"polygon\", {\n                        attrs: {\n                          id: \"Rectangle-Copy-10\",\n                          fill: \"#E5E7E9\",\n                          transform:\n                            \"translate(11.500000, 5.000000) scale(1, -1) translate(-11.500000, -5.000000) \",\n                          points: \"2.84078316e-14 3 18 3 23 7 5 7\"\n                        }\n                      }),\n                      _c(\"polygon\", {\n                        attrs: {\n                          id: \"Rectangle-Copy-11\",\n                          fill: \"#EDEEF2\",\n                          points:\n                            \"-3.69149156e-15 7 38 7 38 43 -3.69149156e-15 43\"\n                        }\n                      }),\n                      _c(\"rect\", {\n                        attrs: {\n                          id: \"Rectangle-Copy-12\",\n                          fill: \"url(#linearGradient-1-\" + _vm.id + \")\",\n                          transform:\n                            \"translate(46.500000, 25.000000) scale(-1, 1) translate(-46.500000, -25.000000) \",\n                          x: \"38\",\n                          y: \"7\",\n                          width: \"17\",\n                          height: \"36\"\n                        }\n                      }),\n                      _c(\"polygon\", {\n                        attrs: {\n                          id: \"Rectangle-Copy-13\",\n                          fill: \"#F8F9FB\",\n                          transform:\n                            \"translate(39.500000, 3.500000) scale(-1, 1) translate(-39.500000, -3.500000) \",\n                          points:\n                            \"24 7 41 7 55 -3.63806207e-12 38 -3.63806207e-12\"\n                        }\n                      })\n                    ]\n                  ),\n                  _c(\"rect\", {\n                    attrs: {\n                      id: \"Rectangle-Copy-15\",\n                      fill: \"url(#linearGradient-2-\" + _vm.id + \")\",\n                      x: \"13\",\n                      y: \"45\",\n                      width: \"40\",\n                      height: \"36\"\n                    }\n                  }),\n                  _c(\n                    \"g\",\n                    {\n                      attrs: {\n                        id: \"Rectangle-Copy-17\",\n                        transform: \"translate(53.000000, 45.000000)\"\n                      }\n                    },\n                    [\n                      _c(\n                        \"mask\",\n                        { attrs: { id: \"mask-4-\" + _vm.id, fill: \"white\" } },\n                        [\n                          _c(\"use\", {\n                            attrs: { \"xlink:href\": \"#path-3-\" + _vm.id }\n                          })\n                        ]\n                      ),\n                      _c(\"use\", {\n                        attrs: {\n                          id: \"Mask\",\n                          fill: \"#E0E3E9\",\n                          transform:\n                            \"translate(8.500000, 18.000000) scale(-1, 1) translate(-8.500000, -18.000000) \",\n                          \"xlink:href\": \"#path-3-\" + _vm.id\n                        }\n                      }),\n                      _c(\"polygon\", {\n                        attrs: {\n                          id: \"Rectangle-Copy\",\n                          fill: \"#D5D7DE\",\n                          mask: \"url(#mask-4-\" + _vm.id + \")\",\n                          transform:\n                            \"translate(12.000000, 9.000000) scale(-1, 1) translate(-12.000000, -9.000000) \",\n                          points: \"7 0 24 0 20 18 -1.70530257e-13 16\"\n                        }\n                      })\n                    ]\n                  ),\n                  _c(\"polygon\", {\n                    attrs: {\n                      id: \"Rectangle-Copy-18\",\n                      fill: \"#F8F9FB\",\n                      transform:\n                        \"translate(66.000000, 51.500000) scale(-1, 1) translate(-66.000000, -51.500000) \",\n                      points: \"62 45 79 45 70 58 53 58\"\n                    }\n                  })\n                ]\n              )\n            ]\n          )\n        ]\n      )\n    ]\n  )\n}\nvar img_emptyvue_type_template_id_42918b82_staticRenderFns = []\nimg_emptyvue_type_template_id_42918b82_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/empty/src/img-empty.vue?vue&type=template&id=42918b82&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/empty/src/img-empty.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\nvar img_emptyvue_type_script_lang_js_id = 0;\n/* harmony default export */ var img_emptyvue_type_script_lang_js_ = ({\n  name: 'ImgEmpty',\n  data: function data() {\n    return {\n      id: ++img_emptyvue_type_script_lang_js_id\n    };\n  }\n});\n// CONCATENATED MODULE: ./packages/empty/src/img-empty.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_img_emptyvue_type_script_lang_js_ = (img_emptyvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/empty/src/img-empty.vue\n\n\n\n\n\n/* normalize component */\n\nvar img_empty_component = normalizeComponent(\n  src_img_emptyvue_type_script_lang_js_,\n  img_emptyvue_type_template_id_42918b82_render,\n  img_emptyvue_type_template_id_42918b82_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var img_empty_api; }\nimg_empty_component.options.__file = \"packages/empty/src/img-empty.vue\"\n/* harmony default export */ var img_empty = (img_empty_component.exports);\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/empty/src/index.vue?vue&type=script&lang=js&\nvar srcvue_type_script_lang_js_components;\n\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n/* harmony default export */ var empty_srcvue_type_script_lang_js_ = ({\n  name: 'ElEmpty',\n  components: (srcvue_type_script_lang_js_components = {}, srcvue_type_script_lang_js_components[img_empty.name] = img_empty, srcvue_type_script_lang_js_components),\n  props: {\n    image: {\n      type: String,\n      default: ''\n    },\n    imageSize: Number,\n    description: {\n      type: String,\n      default: ''\n    }\n  },\n  computed: {\n    emptyDescription: function emptyDescription() {\n      return this.description || Object(lib_locale_[\"t\"])('el.empty.description');\n    },\n    imageStyle: function imageStyle() {\n      return {\n        width: this.imageSize ? this.imageSize + 'px' : ''\n      };\n    }\n  }\n});\n// CONCATENATED MODULE: ./packages/empty/src/index.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_empty_srcvue_type_script_lang_js_ = (empty_srcvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/empty/src/index.vue\n\n\n\n\n\n/* normalize component */\n\nvar empty_src_component = normalizeComponent(\n  packages_empty_srcvue_type_script_lang_js_,\n  srcvue_type_template_id_347ced91_render,\n  srcvue_type_template_id_347ced91_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var empty_src_api; }\nempty_src_component.options.__file = \"packages/empty/src/index.vue\"\n/* harmony default export */ var empty_src = (empty_src_component.exports);\n// CONCATENATED MODULE: ./packages/empty/index.js\n\n\nempty_src.install = function (Vue) {\n  Vue.component(empty_src.name, empty_src);\n};\n\n/* harmony default export */ var empty = (empty_src);\n// CONCATENATED MODULE: ./packages/descriptions/src/descriptions-row.js\nvar descriptions_row_extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\n/* harmony default export */ var descriptions_row = ({\n  name: 'ElDescriptionsRow',\n  props: {\n    row: {\n      type: Array\n    }\n  },\n  inject: ['elDescriptions'],\n  render: function render(h) {\n    var elDescriptions = this.elDescriptions;\n\n    var row = (this.row || []).map(function (item) {\n      return descriptions_row_extends({}, item, {\n        label: item.slots.label || item.props.label\n      }, ['labelClassName', 'contentClassName', 'labelStyle', 'contentStyle'].reduce(function (res, key) {\n        res[key] = item.props[key] || elDescriptions[key];\n        return res;\n      }, {}));\n    });\n    if (elDescriptions.direction === 'vertical') {\n      return h('tbody', [h(\n        'tr',\n        { 'class': 'el-descriptions-row' },\n        [row.map(function (item) {\n          var _ref;\n\n          return h(\n            'th',\n            {\n              'class': (_ref = {\n                'el-descriptions-item__cell': true,\n                'el-descriptions-item__label': true,\n                'has-colon': elDescriptions.border ? false : elDescriptions.colon,\n                'is-bordered-label': elDescriptions.border\n              }, _ref[item.labelClassName] = true, _ref),\n              style: item.labelStyle,\n              attrs: { colSpan: item.props.span\n              }\n            },\n            [item.label]\n          );\n        })]\n      ), h(\n        'tr',\n        { 'class': 'el-descriptions-row' },\n        [row.map(function (item) {\n          return h(\n            'td',\n            {\n              'class': ['el-descriptions-item__cell', 'el-descriptions-item__content', item.contentClassName],\n              style: item.contentStyle,\n              attrs: { colSpan: item.props.span\n              }\n            },\n            [item.slots.default]\n          );\n        })]\n      )]);\n    }\n    if (elDescriptions.border) {\n      return h('tbody', [h(\n        'tr',\n        { 'class': 'el-descriptions-row' },\n        [row.map(function (item) {\n          var _ref2;\n\n          return [h(\n            'th',\n            {\n              'class': (_ref2 = {\n                'el-descriptions-item__cell': true,\n                'el-descriptions-item__label': true,\n                'is-bordered-label': elDescriptions.border\n              }, _ref2[item.labelClassName] = true, _ref2),\n              style: item.labelStyle,\n              attrs: { colSpan: '1'\n              }\n            },\n            [item.label]\n          ), h(\n            'td',\n            {\n              'class': ['el-descriptions-item__cell', 'el-descriptions-item__content', item.contentClassName],\n              style: item.contentStyle,\n              attrs: { colSpan: item.props.span * 2 - 1\n              }\n            },\n            [item.slots.default]\n          )];\n        })]\n      )]);\n    }\n    return h('tbody', [h(\n      'tr',\n      { 'class': 'el-descriptions-row' },\n      [row.map(function (item) {\n        var _ref3;\n\n        return h(\n          'td',\n          { 'class': 'el-descriptions-item el-descriptions-item__cell', attrs: { colSpan: item.props.span }\n          },\n          [h(\n            'div',\n            { 'class': 'el-descriptions-item__container' },\n            [h(\n              'span',\n              {\n                'class': (_ref3 = {\n                  'el-descriptions-item__label': true,\n                  'has-colon': elDescriptions.colon\n                }, _ref3[item.labelClassName] = true, _ref3),\n                style: item.labelStyle\n              },\n              [item.label]\n            ), h(\n              'span',\n              {\n                'class': ['el-descriptions-item__content', item.contentClassName],\n                style: item.contentStyle\n              },\n              [item.slots.default]\n            )]\n          )]\n        );\n      })]\n    )]);\n  }\n});\n// CONCATENATED MODULE: ./packages/descriptions/src/index.js\nvar src_extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar src_components;\n\n\n\n\n/* harmony default export */ var descriptions_src = ({\n  name: 'ElDescriptions',\n  components: (src_components = {}, src_components[descriptions_row.name] = descriptions_row, src_components),\n  props: {\n    border: {\n      type: Boolean,\n      default: false\n    },\n    column: {\n      type: Number,\n      default: 3\n    },\n    direction: {\n      type: String,\n      default: 'horizontal'\n    },\n    size: {\n      type: String\n      // validator: isValidComponentSize,\n    },\n    title: {\n      type: String,\n      default: ''\n    },\n    extra: {\n      type: String,\n      default: ''\n    },\n    labelStyle: {\n      type: Object\n    },\n    contentStyle: {\n      type: Object\n    },\n    labelClassName: {\n      type: String,\n      default: ''\n    },\n    contentClassName: {\n      type: String,\n      default: ''\n    },\n    colon: {\n      type: Boolean,\n      default: true\n    }\n  },\n  computed: {\n    descriptionsSize: function descriptionsSize() {\n      return this.size || (this.$ELEMENT || {}).size;\n    }\n  },\n  provide: function provide() {\n    return {\n      elDescriptions: this\n    };\n  },\n\n  methods: {\n    getOptionProps: function getOptionProps(vnode) {\n      if (vnode.componentOptions) {\n        var componentOptions = vnode.componentOptions;\n        var _componentOptions$pro = componentOptions.propsData,\n            propsData = _componentOptions$pro === undefined ? {} : _componentOptions$pro,\n            _componentOptions$Cto = componentOptions.Ctor,\n            Ctor = _componentOptions$Cto === undefined ? {} : _componentOptions$Cto;\n\n        var props = (Ctor.options || {}).props || {};\n        var res = {};\n        for (var k in props) {\n          var v = props[k];\n          var defaultValue = v.default;\n          if (defaultValue !== undefined) {\n            res[k] = Object(types_[\"isFunction\"])(defaultValue) ? defaultValue.call(vnode) : defaultValue;\n          }\n        }\n        return src_extends({}, res, propsData);\n      }\n      return {};\n    },\n    getSlots: function getSlots(vnode) {\n      var _this = this;\n\n      var componentOptions = vnode.componentOptions || {};\n      var children = vnode.children || componentOptions.children || [];\n      var slots = {};\n      children.forEach(function (child) {\n        if (!_this.isEmptyElement(child)) {\n          var name = child.data && child.data.slot || 'default';\n          slots[name] = slots[name] || [];\n          if (child.tag === 'template') {\n            slots[name].push(child.children);\n          } else {\n            slots[name].push(child);\n          }\n        }\n      });\n      return src_extends({}, slots);\n    },\n    isEmptyElement: function isEmptyElement(c) {\n      return !(c.tag || c.text && c.text.trim() !== '');\n    },\n    filledNode: function filledNode(node, span, count) {\n      var isLast = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n      if (!node.props) {\n        node.props = {};\n      }\n      if (span > count) {\n        node.props.span = count;\n      }\n      if (isLast) {\n        // set the max span, cause of the last td\n        node.props.span = count;\n      }\n      return node;\n    },\n    getRows: function getRows() {\n      var _this2 = this;\n\n      var children = (this.$slots.default || []).filter(function (vnode) {\n        return vnode.tag && vnode.componentOptions && vnode.componentOptions.Ctor.options.name === 'ElDescriptionsItem';\n      });\n      var nodes = children.map(function (vnode) {\n        return {\n          props: _this2.getOptionProps(vnode),\n          slots: _this2.getSlots(vnode),\n          vnode: vnode\n        };\n      });\n      var rows = [];\n      var temp = [];\n      var count = this.column;\n\n      nodes.forEach(function (node, index) {\n        var span = node.props.span || 1;\n\n        if (index === children.length - 1) {\n          temp.push(_this2.filledNode(node, span, count, true));\n          rows.push(temp);\n          return;\n        }\n\n        if (span < count) {\n          count -= span;\n          temp.push(node);\n        } else {\n          temp.push(_this2.filledNode(node, span, count));\n          rows.push(temp);\n          count = _this2.column;\n          temp = [];\n        }\n      });\n\n      return rows;\n    }\n  },\n  render: function render() {\n    var h = arguments[0];\n    var title = this.title,\n        extra = this.extra,\n        border = this.border,\n        descriptionsSize = this.descriptionsSize,\n        $slots = this.$slots;\n\n    var rows = this.getRows();\n\n    return h(\n      'div',\n      { 'class': 'el-descriptions' },\n      [title || extra || $slots.title || $slots.extra ? h(\n        'div',\n        { 'class': 'el-descriptions__header' },\n        [h(\n          'div',\n          { 'class': 'el-descriptions__title' },\n          [$slots.title ? $slots.title : title]\n        ), h(\n          'div',\n          { 'class': 'el-descriptions__extra' },\n          [$slots.extra ? $slots.extra : extra]\n        )]\n      ) : null, h(\n        'div',\n        { 'class': 'el-descriptions__body' },\n        [h(\n          'table',\n          { 'class': ['el-descriptions__table', { 'is-bordered': border }, descriptionsSize ? 'el-descriptions--' + descriptionsSize : ''] },\n          [rows.map(function (row) {\n            return h(descriptions_row, {\n              attrs: { row: row }\n            });\n          })]\n        )]\n      )]\n    );\n  }\n});\n// CONCATENATED MODULE: ./packages/descriptions/index.js\n\n\n/* istanbul ignore next */\ndescriptions_src.install = function install(Vue) {\n  Vue.component(descriptions_src.name, descriptions_src);\n};\n\n/* harmony default export */ var descriptions = (descriptions_src);\n// CONCATENATED MODULE: ./packages/descriptions/src/descriptions-item.js\n/* harmony default export */ var descriptions_item = ({\n  name: 'ElDescriptionsItem',\n  props: {\n    label: {\n      type: String,\n      default: ''\n    },\n    span: {\n      type: Number,\n      default: 1\n    },\n    contentClassName: {\n      type: String,\n      default: ''\n    },\n    contentStyle: {\n      type: Object\n    },\n    labelClassName: {\n      type: String,\n      default: ''\n    },\n    labelStyle: {\n      type: Object\n    }\n  },\n  render: function render() {\n    return null;\n  }\n});\n// CONCATENATED MODULE: ./packages/descriptions-item/index.js\n\n\n/* istanbul ignore next */\ndescriptions_item.install = function install(Vue) {\n  Vue.component(descriptions_item.name, descriptions_item);\n};\n\n/* harmony default export */ var packages_descriptions_item = (descriptions_item);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/result/src/index.vue?vue&type=template&id=3408b139&\nvar srcvue_type_template_id_3408b139_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\"div\", { staticClass: \"el-result\" }, [\n    _c(\n      \"div\",\n      { staticClass: \"el-result__icon\" },\n      [\n        _vm._t(\"icon\", [\n          _c(_vm.iconElement, { tag: \"component\", class: _vm.iconElement })\n        ])\n      ],\n      2\n    ),\n    _vm.title || _vm.$slots.title\n      ? _c(\n          \"div\",\n          { staticClass: \"el-result__title\" },\n          [_vm._t(\"title\", [_c(\"p\", [_vm._v(_vm._s(_vm.title))])])],\n          2\n        )\n      : _vm._e(),\n    _vm.subTitle || _vm.$slots.subTitle\n      ? _c(\n          \"div\",\n          { staticClass: \"el-result__subtitle\" },\n          [_vm._t(\"subTitle\", [_c(\"p\", [_vm._v(_vm._s(_vm.subTitle))])])],\n          2\n        )\n      : _vm._e(),\n    _vm.$slots.extra\n      ? _c(\"div\", { staticClass: \"el-result__extra\" }, [_vm._t(\"extra\")], 2)\n      : _vm._e()\n  ])\n}\nvar srcvue_type_template_id_3408b139_staticRenderFns = []\nsrcvue_type_template_id_3408b139_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/result/src/index.vue?vue&type=template&id=3408b139&\n\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/result/src/icon-success.vue?vue&type=template&id=18119418&\nvar icon_successvue_type_template_id_18119418_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"svg\",\n    { attrs: { viewBox: \"0 0 48 48\", xmlns: \"http://www.w3.org/2000/svg\" } },\n    [\n      _c(\"path\", {\n        attrs: {\n          d:\n            \"M24,4 C35.045695,4 44,12.954305 44,24 C44,35.045695 35.045695,44 24,44 C12.954305,44 4,35.045695 4,24 C4,12.954305 12.954305,4 24,4 Z M34.5548098,16.4485711 C33.9612228,15.8504763 32.9988282,15.8504763 32.4052412,16.4485711 L32.4052412,16.4485711 L21.413757,27.5805811 L21.413757,27.5805811 L21.4034642,27.590855 C21.0097542,27.9781674 20.3766105,27.9729811 19.9892981,27.5792711 L19.9892981,27.5792711 L15.5947588,23.1121428 C15.0011718,22.514048 14.0387772,22.514048 13.4451902,23.1121428 C12.8516033,23.7102376 12.8516033,24.6799409 13.4451902,25.2780357 L13.4451902,25.2780357 L19.6260786,31.5514289 C20.2196656,32.1495237 21.1820602,32.1495237 21.7756472,31.5514289 L21.7756472,31.5514289 L34.5548098,18.614464 C35.1483967,18.0163692 35.1483967,17.0466659 34.5548098,16.4485711 Z\"\n        }\n      })\n    ]\n  )\n}\nvar icon_successvue_type_template_id_18119418_staticRenderFns = []\nicon_successvue_type_template_id_18119418_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/result/src/icon-success.vue?vue&type=template&id=18119418&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/result/src/icon-success.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ var icon_successvue_type_script_lang_js_ = ({\n  name: 'IconSuccess'\n});\n// CONCATENATED MODULE: ./packages/result/src/icon-success.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_icon_successvue_type_script_lang_js_ = (icon_successvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/result/src/icon-success.vue\n\n\n\n\n\n/* normalize component */\n\nvar icon_success_component = normalizeComponent(\n  src_icon_successvue_type_script_lang_js_,\n  icon_successvue_type_template_id_18119418_render,\n  icon_successvue_type_template_id_18119418_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var icon_success_api; }\nicon_success_component.options.__file = \"packages/result/src/icon-success.vue\"\n/* harmony default export */ var icon_success = (icon_success_component.exports);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/result/src/icon-error.vue?vue&type=template&id=21199246&\nvar icon_errorvue_type_template_id_21199246_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"svg\",\n    { attrs: { viewBox: \"0 0 48 48\", xmlns: \"http://www.w3.org/2000/svg\" } },\n    [\n      _c(\"path\", {\n        attrs: {\n          d:\n            \"M24,4 C35.045695,4 44,12.954305 44,24 C44,35.045695 35.045695,44 24,44 C12.954305,44 4,35.045695 4,24 C4,12.954305 12.954305,4 24,4 Z M32.57818,15.42182 C32.0157534,14.8593933 31.1038797,14.8593933 30.541453,15.42182 L30.541453,15.42182 L24.0006789,21.9625941 L17.458547,15.42182 C16.8961203,14.8593933 15.9842466,14.8593933 15.42182,15.42182 C14.8593933,15.9842466 14.8593933,16.8961203 15.42182,17.458547 L15.42182,17.458547 L21.9639519,23.9993211 L15.42182,30.541453 C14.8593933,31.1038797 14.8593933,32.0157534 15.42182,32.57818 C15.9842466,33.1406067 16.8961203,33.1406067 17.458547,32.57818 L17.458547,32.57818 L24.0006789,26.0360481 L30.541453,32.57818 C31.1038797,33.1406067 32.0157534,33.1406067 32.57818,32.57818 C33.1406067,32.0157534 33.1406067,31.1038797 32.57818,30.541453 L32.57818,30.541453 L26.0374059,23.9993211 L32.57818,17.458547 C33.1406067,16.8961203 33.1406067,15.9842466 32.57818,15.42182 Z\"\n        }\n      })\n    ]\n  )\n}\nvar icon_errorvue_type_template_id_21199246_staticRenderFns = []\nicon_errorvue_type_template_id_21199246_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/result/src/icon-error.vue?vue&type=template&id=21199246&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/result/src/icon-error.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ var icon_errorvue_type_script_lang_js_ = ({\n  name: 'IconError'\n});\n// CONCATENATED MODULE: ./packages/result/src/icon-error.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_icon_errorvue_type_script_lang_js_ = (icon_errorvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/result/src/icon-error.vue\n\n\n\n\n\n/* normalize component */\n\nvar icon_error_component = normalizeComponent(\n  src_icon_errorvue_type_script_lang_js_,\n  icon_errorvue_type_template_id_21199246_render,\n  icon_errorvue_type_template_id_21199246_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var icon_error_api; }\nicon_error_component.options.__file = \"packages/result/src/icon-error.vue\"\n/* harmony default export */ var icon_error = (icon_error_component.exports);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/result/src/icon-warning.vue?vue&type=template&id=46fe8f31&\nvar icon_warningvue_type_template_id_46fe8f31_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"svg\",\n    { attrs: { viewBox: \"0 0 48 48\", xmlns: \"http://www.w3.org/2000/svg\" } },\n    [\n      _c(\"path\", {\n        attrs: {\n          d:\n            \"M24,4 C35.045695,4 44,12.954305 44,24 C44,35.045695 35.045695,44 24,44 C12.954305,44 4,35.045695 4,24 C4,12.954305 12.954305,4 24,4 Z M24,31 C22.8954305,31 22,31.8954305 22,33 C22,34.1045695 22.8954305,35 24,35 C25.1045695,35 26,34.1045695 26,33 C26,31.8954305 25.1045695,31 24,31 Z M24,14 C23.1715729,14 22.5,14.6715729 22.5,15.5 L22.5,15.5 L22.5,27.5 C22.5,28.3284271 23.1715729,29 24,29 C24.8284271,29 25.5,28.3284271 25.5,27.5 L25.5,27.5 L25.5,15.5 C25.5,14.6715729 24.8284271,14 24,14 Z\"\n        }\n      })\n    ]\n  )\n}\nvar icon_warningvue_type_template_id_46fe8f31_staticRenderFns = []\nicon_warningvue_type_template_id_46fe8f31_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/result/src/icon-warning.vue?vue&type=template&id=46fe8f31&\n\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib??vue-loader-options!./packages/result/src/icon-warning.vue?vue&type=script&lang=ts&\n\n\n\n\n\n\n\n\n\n/* harmony default export */ var icon_warningvue_type_script_lang_ts_ = ({\n  name: 'IconWarning'\n});\n\n// CONCATENATED MODULE: ./packages/result/src/icon-warning.vue?vue&type=script&lang=ts&\n /* harmony default export */ var src_icon_warningvue_type_script_lang_ts_ = (icon_warningvue_type_script_lang_ts_); \n// CONCATENATED MODULE: ./packages/result/src/icon-warning.vue\n\n\n\n\n\n/* normalize component */\n\nvar icon_warning_component = normalizeComponent(\n  src_icon_warningvue_type_script_lang_ts_,\n  icon_warningvue_type_template_id_46fe8f31_render,\n  icon_warningvue_type_template_id_46fe8f31_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var icon_warning_api; }\nicon_warning_component.options.__file = \"packages/result/src/icon-warning.vue\"\n/* harmony default export */ var icon_warning = (icon_warning_component.exports);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/result/src/icon-info.vue?vue&type=template&id=19e3de69&\nvar icon_infovue_type_template_id_19e3de69_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"svg\",\n    { attrs: { viewBox: \"0 0 48 48\", xmlns: \"http://www.w3.org/2000/svg\" } },\n    [\n      _c(\"path\", {\n        attrs: {\n          d:\n            \"M24,4 C35.045695,4 44,12.954305 44,24 C44,35.045695 35.045695,44 24,44 C12.954305,44 4,35.045695 4,24 C4,12.954305 12.954305,4 24,4 Z M24,19 L21,19 C20.1715729,19 19.5,19.6715729 19.5,20.5 C19.5,21.3284271 20.1715729,22 21,22 L21,22 L22.5,22 L22.5,31 L21,31 C20.1715729,31 19.5,31.6715729 19.5,32.5 C19.5,33.3284271 20.1715729,34 21,34 L21,34 L27,34 C27.8284271,34 28.5,33.3284271 28.5,32.5 C28.5,31.6715729 27.8284271,31 27,31 L27,31 L25.5,31 L25.5,20.5 C25.5,19.6715729 24.8284271,19 24,19 L24,19 Z M24,13 C22.8954305,13 22,13.8954305 22,15 C22,16.1045695 22.8954305,17 24,17 C25.1045695,17 26,16.1045695 26,15 C26,13.8954305 25.1045695,13 24,13 Z\"\n        }\n      })\n    ]\n  )\n}\nvar icon_infovue_type_template_id_19e3de69_staticRenderFns = []\nicon_infovue_type_template_id_19e3de69_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/result/src/icon-info.vue?vue&type=template&id=19e3de69&\n\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib??vue-loader-options!./packages/result/src/icon-info.vue?vue&type=script&lang=ts&\n\n\n\n\n\n\n\n\n\n/* harmony default export */ var icon_infovue_type_script_lang_ts_ = ({\n  name: 'IconInfo'\n});\n\n// CONCATENATED MODULE: ./packages/result/src/icon-info.vue?vue&type=script&lang=ts&\n /* harmony default export */ var src_icon_infovue_type_script_lang_ts_ = (icon_infovue_type_script_lang_ts_); \n// CONCATENATED MODULE: ./packages/result/src/icon-info.vue\n\n\n\n\n\n/* normalize component */\n\nvar icon_info_component = normalizeComponent(\n  src_icon_infovue_type_script_lang_ts_,\n  icon_infovue_type_template_id_19e3de69_render,\n  icon_infovue_type_template_id_19e3de69_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var icon_info_api; }\nicon_info_component.options.__file = \"packages/result/src/icon-info.vue\"\n/* harmony default export */ var icon_info = (icon_info_component.exports);\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/result/src/index.vue?vue&type=script&lang=js&\nvar result_srcvue_type_script_lang_js_components;\n\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\nvar IconMap = {\n  success: 'icon-success',\n  warning: 'icon-warning',\n  error: 'icon-error',\n  info: 'icon-info'\n};\n\n/* harmony default export */ var result_srcvue_type_script_lang_js_ = ({\n  name: 'ElResult',\n  components: (result_srcvue_type_script_lang_js_components = {}, result_srcvue_type_script_lang_js_components[icon_success.name] = icon_success, result_srcvue_type_script_lang_js_components[icon_error.name] = icon_error, result_srcvue_type_script_lang_js_components[icon_warning.name] = icon_warning, result_srcvue_type_script_lang_js_components[icon_info.name] = icon_info, result_srcvue_type_script_lang_js_components),\n  props: {\n    title: {\n      type: String,\n      default: ''\n    },\n    subTitle: {\n      type: String,\n      default: ''\n    },\n    icon: {\n      type: String,\n      default: 'info'\n    }\n  },\n  computed: {\n    iconElement: function iconElement() {\n      var icon = this.icon;\n      return icon && IconMap[icon] ? IconMap[icon] : 'icon-info';\n    }\n  }\n});\n// CONCATENATED MODULE: ./packages/result/src/index.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_result_srcvue_type_script_lang_js_ = (result_srcvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/result/src/index.vue\n\n\n\n\n\n/* normalize component */\n\nvar result_src_component = normalizeComponent(\n  packages_result_srcvue_type_script_lang_js_,\n  srcvue_type_template_id_3408b139_render,\n  srcvue_type_template_id_3408b139_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var result_src_api; }\nresult_src_component.options.__file = \"packages/result/src/index.vue\"\n/* harmony default export */ var result_src = (result_src_component.exports);\n// CONCATENATED MODULE: ./packages/result/index.js\n\n\n/* istanbul ignore next */\nresult_src.install = function (Vue) {\n  Vue.component(result_src.name, result_src);\n};\n\n/* harmony default export */ var packages_result = (result_src);\n// CONCATENATED MODULE: ./src/index.js\n/* Automatically generated by './build/bin/build-entry.js' */\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar components = [packages_pagination, dialog, packages_autocomplete, packages_dropdown, packages_dropdown_menu, packages_dropdown_item, packages_menu, packages_submenu, packages_menu_item, packages_menu_item_group, packages_input, packages_input_number, packages_radio, packages_radio_group, packages_radio_button, packages_checkbox, packages_checkbox_button, packages_checkbox_group, packages_switch, packages_select, packages_option, packages_option_group, packages_button, packages_button_group, packages_table, packages_table_column, packages_date_picker, packages_time_select, packages_time_picker, popover, packages_tooltip, packages_breadcrumb, packages_breadcrumb_item, packages_form, packages_form_item, packages_tabs, packages_tab_pane, packages_tag, packages_tree, packages_alert, slider, packages_icon, packages_row, packages_col, packages_upload, packages_progress, packages_spinner, badge, card, packages_rate, packages_steps, packages_step, carousel, scrollbar, carousel_item, packages_collapse, packages_collapse_item, packages_cascader, color_picker, transfer, packages_container, header, aside, packages_main, footer, timeline, timeline_item, packages_link, divider, packages_image, calendar, backtop, page_header, packages_cascader_panel, avatar, drawer, statistic, popconfirm, skeleton, skeleton_item, empty, descriptions, packages_descriptions_item, packages_result, collapse_transition_default.a];\n\nvar src_install = function install(Vue) {\n  var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  lib_locale_default.a.use(opts.locale);\n  lib_locale_default.a.i18n(opts.i18n);\n\n  components.forEach(function (component) {\n    Vue.component(component.name, component);\n  });\n\n  Vue.use(infinite_scroll);\n  Vue.use(packages_loading.directive);\n\n  Vue.prototype.$ELEMENT = {\n    size: opts.size || '',\n    zIndex: opts.zIndex || 2000\n  };\n\n  Vue.prototype.$loading = packages_loading.service;\n  Vue.prototype.$msgbox = message_box;\n  Vue.prototype.$alert = message_box.alert;\n  Vue.prototype.$confirm = message_box.confirm;\n  Vue.prototype.$prompt = message_box.prompt;\n  Vue.prototype.$notify = notification;\n  Vue.prototype.$message = packages_message;\n};\n\n/* istanbul ignore if */\nif (typeof window !== 'undefined' && window.Vue) {\n  src_install(window.Vue);\n}\n\n/* harmony default export */ var src_0 = __nested_webpack_exports__[\"default\"] = ({\n  version: '2.15.14',\n  locale: lib_locale_default.a.use,\n  i18n: lib_locale_default.a.i18n,\n  install: src_install,\n  CollapseTransition: collapse_transition_default.a,\n  Loading: packages_loading,\n  Pagination: packages_pagination,\n  Dialog: dialog,\n  Autocomplete: packages_autocomplete,\n  Dropdown: packages_dropdown,\n  DropdownMenu: packages_dropdown_menu,\n  DropdownItem: packages_dropdown_item,\n  Menu: packages_menu,\n  Submenu: packages_submenu,\n  MenuItem: packages_menu_item,\n  MenuItemGroup: packages_menu_item_group,\n  Input: packages_input,\n  InputNumber: packages_input_number,\n  Radio: packages_radio,\n  RadioGroup: packages_radio_group,\n  RadioButton: packages_radio_button,\n  Checkbox: packages_checkbox,\n  CheckboxButton: packages_checkbox_button,\n  CheckboxGroup: packages_checkbox_group,\n  Switch: packages_switch,\n  Select: packages_select,\n  Option: packages_option,\n  OptionGroup: packages_option_group,\n  Button: packages_button,\n  ButtonGroup: packages_button_group,\n  Table: packages_table,\n  TableColumn: packages_table_column,\n  DatePicker: packages_date_picker,\n  TimeSelect: packages_time_select,\n  TimePicker: packages_time_picker,\n  Popover: popover,\n  Tooltip: packages_tooltip,\n  MessageBox: message_box,\n  Breadcrumb: packages_breadcrumb,\n  BreadcrumbItem: packages_breadcrumb_item,\n  Form: packages_form,\n  FormItem: packages_form_item,\n  Tabs: packages_tabs,\n  TabPane: packages_tab_pane,\n  Tag: packages_tag,\n  Tree: packages_tree,\n  Alert: packages_alert,\n  Notification: notification,\n  Slider: slider,\n  Icon: packages_icon,\n  Row: packages_row,\n  Col: packages_col,\n  Upload: packages_upload,\n  Progress: packages_progress,\n  Spinner: packages_spinner,\n  Message: packages_message,\n  Badge: badge,\n  Card: card,\n  Rate: packages_rate,\n  Steps: packages_steps,\n  Step: packages_step,\n  Carousel: carousel,\n  Scrollbar: scrollbar,\n  CarouselItem: carousel_item,\n  Collapse: packages_collapse,\n  CollapseItem: packages_collapse_item,\n  Cascader: packages_cascader,\n  ColorPicker: color_picker,\n  Transfer: transfer,\n  Container: packages_container,\n  Header: header,\n  Aside: aside,\n  Main: packages_main,\n  Footer: footer,\n  Timeline: timeline,\n  TimelineItem: timeline_item,\n  Link: packages_link,\n  Divider: divider,\n  Image: packages_image,\n  Calendar: calendar,\n  Backtop: backtop,\n  InfiniteScroll: infinite_scroll,\n  PageHeader: page_header,\n  CascaderPanel: packages_cascader_panel,\n  Avatar: avatar,\n  Drawer: drawer,\n  Statistic: statistic,\n  Popconfirm: popconfirm,\n  Skeleton: skeleton,\n  SkeletonItem: skeleton_item,\n  Empty: empty,\n  Descriptions: descriptions,\n  DescriptionsItem: packages_descriptions_item,\n  Result: packages_result\n});\n\n/***/ })\n/******/ ])[\"default\"];//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvZWxlbWVudC11aS5jb21tb24uanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSw4QkFBOEI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsOEJBQW1CO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEVBQTBFLDhCQUFtQjtBQUM3RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsOEJBQW1CO0FBQzdCO0FBQ0E7QUFDQSxVQUFVLDhCQUFtQjtBQUM3QjtBQUNBO0FBQ0EsVUFBVSw4QkFBbUI7QUFDN0IsZUFBZSw4QkFBbUI7QUFDbEMsbURBQW1ELCtCQUErQjtBQUNsRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsOEJBQW1CO0FBQzdCO0FBQ0EsaUVBQWlFLGlCQUFpQjtBQUNsRjtBQUNBLDBEQUEwRCxhQUFhO0FBQ3ZFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSw4QkFBbUI7QUFDN0IsZ0NBQWdDLDhCQUFtQjtBQUNuRDtBQUNBO0FBQ0E7QUFDQSxXQUFXLDhCQUFtQjtBQUM5QixrREFBa0QsZ0NBQWdDO0FBQ2xGLDBFQUEwRSw4QkFBbUIsNEJBQTRCLG9CQUFvQjtBQUM3STtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsOEJBQW1CO0FBQzdCO0FBQ0Esb0NBQW9DLDRCQUE0QjtBQUNoRSwwQ0FBMEM7QUFDMUMsV0FBVyw4QkFBbUI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLDhCQUFtQixrQ0FBa0M7QUFDL0Q7QUFDQTtBQUNBLFVBQVUsOEJBQW1CO0FBQzdCO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQiw4QkFBbUIsQ0FBQyw4QkFBbUI7QUFDeEQsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlCQUFpQixtQkFBTyxD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RTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckIsV0FBVztBQUNYO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsOENBQThDLHdCQUF3QjtBQUN0RTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7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QTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7Ozs7OztBQU1BOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSSxLQUFLLEVBQUUsc0JBQXNCO0FBQ2pDO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtB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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTs7Ozs7O0FBTUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLEtBQUssRUFBRSxxQ0FBcUM7QUFDaEQ7QUFDQTtBQUNBO0FBQ0EsYUFBYSwrQkFBbUI7QUFDaEMsaUNBQWlDLCtCQUFtQjs7QUFFcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7OztBQVdBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSCxnQkFBZ0Isc0NBQXNDOztBQUV0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1IsK0JBQStCLG1CQUFtQjtBQUNsRDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7Ozs7OztBQU1BOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSSxLQUFLLEVBQUUseUJBQXlCO0FBQ3BDO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGNBQWMsK0JBQW1CO0FBQ2pDLGtDQUFrQywrQkFBbUI7O0FBRXJEO0FBQ0Esb0JBQW9CLCtCQUFtQjtBQUN2Qyx3Q0FBd0MsK0JBQW1COztBQUUzRDs7Ozs7Ozs7O0FBU0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSxnQkFBZ0Isc0NBQXNDOztBQUV0RDtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0EsOENBQThDO0FBQzlDO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUM7QUFDekMsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBIQUEwSDtBQUMxSDtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLHlFQUF5RTtBQUN6RSx3RUFBd0U7QUFDeEU7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFD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Q2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsOENBQThDLFFBQVE7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFlBQVksU0FBUztBQUNyQixZQUFZLFFBQVE7QUFDcEIsWUFBWSxHQUFHO0FBQ2Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBLHFGQUFxRixhQUFhO0FBQ2xHO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIOztBQUVBO0FBQ0E7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILDhCQUE4QjtBQUM5QixHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsV0FBVywrQkFBbUI7O0FBRTlCOzs7Ozs7O0FBT0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxpQkFBaUIsNkNBQTZDO0FBQzlEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSx3QkFBd0IsRUFBRTtBQUMxQjtBQUNBLHdCQUF3QixRQUFRO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsK0NBQStDO0FBQy9DLFFBQVE7QUFDUjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0M7QUFDbEM7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBOzs7OztBQUtBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSSxLQUFLLEVBQUUsaUJBQWlCO0FBQzVCO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDJCQUEyQiwrQkFBbUI7QUFDOUMsK0NBQStDLCtCQUFtQjs7QUFFbEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBLENBQUM7QUFDRDs7Ozs7OztBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNI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QSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsbUJBQW1CO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTs7Ozs7O0FBTUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLEtBQUssRUFBRSxrQkFBa0I7QUFDN0I7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLHdDQUF3QztBQUNsRCxVQUFVLHNDQUFzQztBQUNoRCxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsZ0NBQWdDO0FBQ3ZELHVCQUF1QixnQkFBZ0I7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixnQ0FBZ0M7QUFDdkQsdUJBQXVCLGdCQUFnQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTs7QUFFQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsbUNBQW1DO0FBQ25DLEtBQUs7QUFDTDtBQUNBLHNFQUFzRTtBQUN0RSxLQUFLO0FBQ0w7QUFDQSxrREFBa0Q7QUFDbEQsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FB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QTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLGdEQUFnRDtBQUNoRDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7Ozs7OztBQU1BOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSSxLQUFLLEVBQUUsMEJBQTBCO0FBQ3JDO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkIsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUFJQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7Ozs7OztBQU1BOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSSxLQUFLLEVBQUUsNEJBQTRCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBLHFHQUFxRyxxQkFBcUIsbUJBQW1COztBQUU3STtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQUtBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7Ozs7OztBQU1BOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSSxLQUFLLEVBQUUsbUJBQW1CO0FBQzlCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsK0JBQW1CO0FBQzlCLCtCQUErQiwrQkFBbUI7O0FBRWxEO0FBQ0Esb0JBQW9CLCtCQUFtQjs7QUFFdkM7QUFDQSx3QkFBd0IsK0JBQW1CO0FBQzNDLDRDQUE0QywrQkFBbUI7O0FBRS9EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsT0FBTztBQUNQO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFrQkE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0EsbUNBQW1DO0FBQ25DLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLE9BQU87QUFDUDtBQUNBLEtBQUs7QUFDTDtBQUNBLHNFQUFzRTtBQUN0RSxLQUFLO0FBQ0w7QUFDQSxnREFBZ0Q7QUFDaEQsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVILGdCQUFnQixzQ0FBc0M7O0FBRXREO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxNQUFLLElBQUksQ0FBSztBQUN2QjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUM7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsa0RBQWtELFFBQVE7QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNENBQTRDLFFBQVE7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsNEJBQTRCO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTs7Ozs7O0FBTUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLEtBQUssRUFBRSxtQkFBbUI7QUFDOUI7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG1FQUFtRSxhQUFhO0FBQ2hGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLG1CQUFtQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxRQUFRO0FBQ1I7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0Esb0RBQW9ELGdCQUFnQixzQkFBc0IsT0FBTywyQkFBMkIsMEJBQTBCLHlEQUF5RCxpQ0FBaUM7Ozs7QUFJaFA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0EsMkJBQTJCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLE1BQU07QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMLGlCQUFpQixNQUFNO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDO0FBQ3JDO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQztBQUNwQztBQUNBO0FBQ0EscUNBQXFDO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkLHdDQUF3QztBQUN4QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7Ozs7Ozs7O0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsbUJBQW1CO0FBQ25COztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUMsT0FBTztBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7OztBQUdMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFdBQVc7QUFDWDtBQUNBLE9BQU87O0FBRVA7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7OztBQUdMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw0QkFBNEI7QUFDNUI7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw0QkFBNEI7QUFDNUI7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsNkNBQTZDLFlBQVk7QUFDekQ7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25COztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsdUZBQXVGLGFBQWE7QUFDcEc7QUFDQTs7QUFFQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7Ozs7QUFJQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsK0JBQW1CO0FBQzFDLDJDQUEyQywrQkFBbUI7O0FBRTlEO0FBQ0Esa0RBQWtELDBDQUEwQzs7Ozs7O0FBTTVGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEI7QUFDNUIsMkJBQTJCO0FBQzNCLDRCQUE0QjtBQUM1QixnQ0FBZ0M7QUFDaEMsNEJBQTRCO0FBQzVCLGlDQUFpQztBQUNqQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxPQUFPOztBQUVQOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVzs7QUFFWDtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7O0FBRUE7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtB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QTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2YsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHdCQUF3QixzQkFBc0I7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw4Q0FBOEM7QUFDOUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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SztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FB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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7OztBQWVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBOztBQUVBOztBQUVBLGVBQWU7O0FBRWY7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTDtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsbUVBQW1FLGVBQWU7QUFDbEY7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0Esc0VBQXNFLGVBQWU7QUFDckY7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxrQ0FBa0MsMEJBQTBCO0FBQzVELEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSw4Q0FBOEM7QUFDOUMsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBOzs7Ozs7QUFNQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksS0FBSyxFQUFFLGtCQUFrQjtBQUM3QjtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHFDQUFxQztBQUNyQztBQUNBO0FB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O0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEI7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsMENBQTBDO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsZ0JBQWdCO0FBQ3JDLGtCQUFrQix3QkFBd0I7QUFDMUM7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsZ0JBQWdCO0FBQ3pDLHNCQUFzQiw0QkFBNEI7QUFDbEQ7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakIsNEJBQTRCLGdEQUFnRDtBQUM1RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QixtQ0FBbUM7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQiw0QkFBNEIsZ0RBQWdEO0FBQzVFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCO0FBQ3RCLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQSxpQkFBaUIsK0JBQW1COztBQUVwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7O0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLDZCQUE2QixvQkFBb0I7QUFDakQsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsYUFBYTtBQUNiLG9CQUFvQjtBQUNwQixtQkFBbUI7QUFDbkI7QUFDQTtBQUNBLEtBQUs7QUFDTCxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUgsZ0JBQWdCLDBCQUEwQjs7QUFFMUMsZ0JBQWdCLHNDQUFzQzs7QUFFdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQyxTQUFTO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQSxRQUFRO0FBQ1I7QUFDQSxRQUFRO0FBQ1I7QUFDQSxRQUFRO0FBQ1I7QUFDQSxRQUFRO0FBQ1I7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0EsUUFBUTtBQUNSO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSwwQ0FBMEM7QUFDMUMsMERBQTBEOztBQUUxRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsbUNBQW1DO0FBQ25DLEtBQUs7QUFDTDtBQUNBLHNFQUFzRTtBQUN0RSxLQUFLO0FBQ0w7QUFDQSxnREFBZ0Q7QUFDaEQsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7OztBQUdMLFFBQVEsaUJBQWlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLEtBQUs7OztBQUdMLFFBQVEsaUJBQWlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sSUFBSSxZQUFZO0FBQ3ZCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTs7Ozs7O0FBTUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLEtBQUssRUFBRSxtQkFBbUI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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QUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBOzs7Ozs7QUFNQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksS0FBSyxFQUFFLHlCQUF5QjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7QUFNQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULFFBQVE7QUFDUjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxzQkFBc0I7O0FBRXRCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBOzs7Ozs7QUFNQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksS0FBSyxFQUFFLGlCQUFpQjtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLG9DQUFvQyxtQ0FBbUM7QUFDN0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYix1QkFBdUIscUJBQXFCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLHdCQUF3QixxQkFBcUI7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0Esd0JBQXdCLHFCQUFxQjtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSx3QkFBd0IscUJBQXFCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSx3QkFBd0IscUJBQXFCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLHdCQUF3QixxQkFBcUI7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0Esd0JBQXdCLHFCQUFxQjtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSx3QkFBd0IscUJBQXFCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSx3QkFBd0IscUJBQXFCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLHdCQUF3QixxQkFBcUI7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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QUUsdUJBQXVCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OztBQVlBO0FBQ0E7O0FBRUEsZ0JBQWdCLHNDQUFzQzs7QUFFdEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBLFFBQVE7QUFDUjtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBLHlGQUF5RixhQUFhO0FBQ3RHO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQTtBQUNBLFFBQVE7O0FBRVI7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBLFFBQVE7O0FBRVI7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0EsUUFBUTtBQUNSLGdDQUFnQztBQUNoQztBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUix3Q0FBd0MsVUFBVTtBQUNsRDtBQUNBO0FBQ0EscUNBQXFDO0FBQ3JDO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7Ozs7OztBQU1BOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSSxLQUFLLEVBQUUsaUJBQWlCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSx3QkFBd0I7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsY0FBYyw4Q0FBOEM7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7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QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7QUFVQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsZ0JBQWdCLHNDQUFzQzs7QUFFdEQ7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1gsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSx3Q0FBd0MsU0FBUztBQUNqRCx1REFBdUQsU0FBUztBQUNoRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSCxnQkFBZ0I7QUFDaEIsQ0FBQztBQUNEO0FBQ0E7QUFDQTs7Ozs7O0FBTUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLEtBQUssRUFBRSx1QkFBdUI7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxl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O0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxnQkFBZ0Isa0NBQWtDOztBQUVsRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTs7Ozs7O0FBTUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLEtBQUssRUFBRSx3QkFBd0I7QUFDbkM7QUFDQTtBQUNBOzs7O0FBSUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsd0JBQXdCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLHNCQUFzQiw4Q0FBOEM7QUFDcEUsd0JBQXdCLDJDQUEyQztBQUNuRSwwQkFBMEIsNkNBQTZDO0FBQ3ZFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwyQ0FBMkM7QUFDbkUsMEJBQTBCLDZDQUE2QztBQUN2RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixzQ0FBc0M7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsZ0JBQWdCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLDJDQUEyQztBQUNwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7O0FBTUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsZ0JBQWdCLDJCQUEyQjs7QUFFM0M7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxzQkFBc0I7O0FBRXRCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7Ozs7OztBQU1BOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSSxLQUFLLEVBQUUsdUJBQXVCO0FBQ2xDO0FBQ0E7QUFDQTs7Ozs7QUFLQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixzQkFBc0I7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLHlCQUF5QjtBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0M7QUFDaEMsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsOERBQThEO0FBQ3hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7OztBQU9BO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseURBQXlEO0FBQ3pEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULFFBQVE7QUFDUjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxRQUFRO0FBQ1I7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBOzs7Ozs7QUFNQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksS0FBSyxFQUFFLGlCQUFpQjtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDs7Ozs7QUFLQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7Ozs7OztBQU9BO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBOztBQUVBO0FBQ0EsY0FBYyxVQUFVO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQ0FBK0M7QUFDL0MsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViLG9GQUFvRjtBQUNwRjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLHNCQUFzQjtBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLFNBQVMsdUJBQXVCO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBLDRCQUE0Qix1Q0FBdUM7QUFDbkUsOEJBQThCLHNDQUFzQztB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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7O0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxnQ0FBZ0M7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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O0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBOzs7Ozs7QUFNQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksS0FBSyxFQUFFLDRCQUE0QjtBQUN2QztBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQUlBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQSxvQ0FBb0M7QUFDcEM7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEM7QUFDNUM7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7Ozs7OztBQU1BOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSSxLQUFLLEVBQUUsaUJBQWlCO0FBQzVCO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQjtBQUMzQixpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSwrREFBK0Q7QUFDekU7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLFNBQVMsMEJBQTBCO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQSxnQ0FBZ0MsK0JBQW1CO0FBQ25ELG9EQUFvRCwrQkFBbUI7O0FBRXZFOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsbURBQW1EO0FBQzdEO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBS0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLEtBQUssRUFBRSx1QkFBdUI7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7QUFPQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSx3REFBd0Q7QUFDeEQ7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQjtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBLGtDQUFrQyxtQkFBbUI7QUFDckQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EseURBQXlELDRCQUE0Qjs7QUFFckY7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsaUNBQWlDO0FBQ2pDLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBOzs7Ozs7QUFNQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksS0FBSyxFQUFFLHNCQUFzQjtBQUNqQztBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7O0FBRUg7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTs7Ozs7O0FBTUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLEtBQUssRUFBRSxvQkFBb0I7QUFDL0I7QUFDQTtBQUNBOzs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7O0FBRUg7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQztBQUNsQyxrQ0FBa0M7QUFDbEM7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0Es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QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUEseUNBQXlDLE9BQU87QUFDaEQseUJBQXlCLG1CQUFtQjtBQUM1QztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDLE9BQU87QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBLG9CQUFvQiw0QkFBNEI7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFD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QSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFD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QTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTs7Ozs7O0FBTUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLEtBQUssRUFBRSxzQkFBc0I7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7O0FBU0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLCtDQUErQztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBLFFBQVE7QUFDUjtBQUNBLFFBQVE7QUFDUjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGlDQUFpQztBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtB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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsdUJBQXVCLFNBQVMsaUJBQWlCLG1CQUFtQjtBQUNwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQixXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FBSUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLCtCQUErQiwrQkFBK0IsSUFBSTtBQUNsRTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTs7Ozs7O0FBTUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLEtBQUssRUFBRSx1QkFBdUI7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxRQUFRLGdFQUFnRTtBQUN4RTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7QUFPQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxRQUFRO0FBQ1I7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQSxVQUFVO0FBQ1Y7QUFDQSxVQUFVO0FBQ1Y7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7Ozs7OztBQU1BOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSSxLQUFLLEVBQUUsMkJBQTJCO0FBQ3RDO0FBQ0E7QUFDQTs7Ozs7O0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNULFFBQVE7QUFDUjtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQixPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLG9CQUFvQjtBQUN2QztBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSw0Q0FBNEMsc0NBQXNDLDhEQUE4RDtBQUNoSjtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFLQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksS0FBSyxFQUFFLG1CQUFtQjtBQUM5QjtBQUNBO0FBQ0E7Ozs7Ozs7QUFPQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQSxnREFBZ0Q7QUFDaEQ7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1gsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsMkNBQTJDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBS0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLEtBQUssRUFBRSxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLHNCQUFzQixnQ0FBZ0M7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDO0FBQ3JDLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkIsYUFBYTtBQUNiO0FBQ0EsMEJBQTBCLFNBQVMsMEJBQTBCO0FBQzdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLHNCQUFzQjtBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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QTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7OztBQU1BO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxpQkFBaUIsTUFBTTtBQUN2QjtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQ0FBK0MsYUFBYTtBQUM1RCxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUEseURBQXlELDhFQUE4RSw0Q0FBNEM7QUFDbkwsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUEscURBQXFELDJFQUEyRSx1Q0FBdUM7QUFDdkssS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLGVBQWU7QUFDNUI7QUFDQTtBQUNBLGFBQWEsY0FBYztBQUMzQjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxnREFBZ0Q7QUFDaEQ7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTs7Ozs7O0FBTUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLEtBQUssRUFBRSwwQkFBMEI7QUFDckM7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FBSUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7Ozs7OztBQU1BOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSSxLQUFLLEVBQUUsa0JBQWtCO0FBQzdCO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxVQUFVLGdFQUFnRTtBQUMxRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQixhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBLG9DQUFvQyxvQ0FBb0M7QUFDeEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQiw4QkFBOEI7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLCtCQUErQjtBQUN2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQjtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBLFFBQVE7QUFDUjtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTtBQUNBLDJEQUEyRCxpQkFBaUI7QUFDNUU7QUFDQTtBQUNBO0FBQ0EsT0FBTyxJQUFJLGlCQUFpQjtBQUM1QjtBQUNBLEtBQUs7QUFDTDtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7Ozs7OztBQU1BOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSSxLQUFLLEVBQUUsaUJBQWlCO0FBQzVCO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkIsU0FBUztBQUNUO0FBQ0E7QUFDQSxpQ0FBaUMsU0FBUywrQkFBK0I7QUFDekU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCLGdCQUFnQjtBQUM3QztBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CLDZCQUE2QixtQ0FBbUM7QUFDaEU7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsU0FBUyxnQ0FBZ0M7QUFDMUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCLGdCQUFnQjtBQUM3QztBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CLDZCQUE2QixvQ0FBb0M7QUFDakU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLDhCQUE4QjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQSxpQ0FBaUMsb0NBQW9DO0FBQ3JFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBLGdCQUFnQiwrQkFBbUI7QUFDbkMsb0NBQW9DLCtCQUFtQjs7QUFFdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQUtBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBOzs7Ozs7QUFNQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksS0FBSyxFQUFFLDhCQUE4QjtBQUN6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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0EsUUFBUTtBQUNSO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBOzs7Ozs7QUFNQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksS0FBSyxFQUFFLGlCQUFpQjtBQUM1QjtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTs7Ozs7O0FBTUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLEtBQUssRUFBRSxxQkFBcUI7QUFDaEM7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZixLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtB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QUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsZ0JBQWdCLHNDQUFzQzs7QUFFdEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQSxrREFBa0Q7QUFDbEQsaUVBQWlFO0FBQ2pFLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsZ0RBQWdEO0FBQ2hELEtBQUs7QUFDTDtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLCtDQUErQztBQUMvQyxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsWUFBWTtBQUNaO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULFFBQVE7QUFDUjtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsVUFBVTtB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QUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLE9BQU87O0FBRVA7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxPQUFPOztBQUVQO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSw0QkFBNEIsRUFBRSxFQUFFLElBQUksYUFBYSxFQUFFO0FBQ25EO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNB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QUNBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7Ozs7OztBQU1BOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSSxLQUFLLEVBQUUscUJBQXFCO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2YsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FBSUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7Ozs7OztBQU1BOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSSxLQUFLLEVBQUUsdUJBQXVCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2YsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxjQUFjO0FBQ2QsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUFJQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTs7Ozs7O0FBTUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLEtBQUssRUFBRSx5QkFBeUI7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsbUNBQW1DO0FBQ3hEO0FBQ0E7QUFDQSxRQUFRLDJDQUEyQztBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsd0RBQXdEO0FBQzdFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1gsdUJBQXVCLFNBQVMsa0NBQWtDO0FBQ2xFO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUFJQTtBQUNBO0FBQ0EsY0FBYyw2QkFBNkI7QUFDM0MsYUFBYTtBQUNiLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7Ozs7OztBQU1BOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSSxLQUFLLEVBQUUsc0JBQXNCO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7OztBQVdBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBOzs7Ozs7QUFNQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksS0FBSyxFQUFFLDRCQUE0QjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O0FBT0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSCxnQkFBZ0Isc0NBQXNDOztBQUV0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsbUNBQW1DO0FBQ25DLEtBQUs7QUFDTDtBQUNBLHNFQUFzRTtBQUN0RSxLQUFLO0FBQ0w7QUFDQSxnREFBZ0Q7QUFDaEQ7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksMENBQTBDO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7OztBQU9BO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJJQUEySSxxQkFBcUI7QUFDaEs7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7OztBQUdMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwwREFBMEQsUUFBUSwrQkFBK0IsTUFBTSx3Q0FBd0MsTUFBTTtBQUNySixRQUFRO0FBQ1I7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBOzs7Ozs7QUFNQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksS0FBSyxFQUFFLDJCQUEyQjtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7QUFRQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxJQUFJO0FBQ1gsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFD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OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBOzs7Ozs7QUFNQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksS0FBSyxFQUFFLDBCQUEwQjtBQUNyQztBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLGdFQUFnRTtBQUM5RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTs7Ozs7O0FBTUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJ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QUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7Ozs7OztBQU1BOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSSxLQUFLLEVBQUUseUJBQXlCO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7O0FBUUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBOztBQUVBO0FBQ0Esd0NBQXdDLG9CQUFvQjtBQUM1RDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBLFFBQVE7QUFDUjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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QUNBLElBQUksS0FBSyxFQUFFLDJCQUEyQjtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7O0FBU0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1gsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQSxRQUFRO0FBQ1I7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLEtBQUs7OztBQUdMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTs7Ozs7O0FBTUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLEtBQUssRUFBRSw4QkFBOEI7QUFDekM7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsU0FBUyxzQkFBc0I7QUFDM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQSwrQ0FBK0MsU0FBUyxxQkFBcUI7QUFDN0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBOzs7Ozs7QUFNQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksS0FBSyxFQUFFLDZCQUE2QjtBQUN4QztBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw4QkFBOEI7QUFDOUI7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7QUFTQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0EsNkVBQTZFLGlDQUFpQztBQUM5RyxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSx3REFBd0Q7QUFDeEQ7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVztBQUNYOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7OztBQUdMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsUUFBUTtBQUNSO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBOzs7Ozs7QUFNQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksS0FBSyxFQUFFLDJCQUEyQjtBQUN0QztBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQSxXQUFXO0FBQ1gsbUJBQW1CLHFCQUFxQjtBQUN4Qzs7QUFFQTtBQUNBLHdCQUF3QixlQUFlO0FBQ3ZDOztBQUVBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07O0FBRU47QUFDQTtBQUNBLFFBQVEsd0NBQXdDO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFLQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksS0FBSyxFQUFFLDRCQUE0QjtBQUN2QztBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsd0JBQXdCO0FBQ3ZDLFlBQVk7QUFDWixLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkIsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixrQ0FBa0M7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQztBQUNuQyx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsU0FBUyxxQ0FBcUM7QUFDOUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DO0FBQ25DLHdDQUF3QztBQUN4QyxpQ0FBaUM7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUM7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsZ0NBQWdDO0FBQzFEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFD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QUFDTDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7Ozs7OztBQU1BOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSSxLQUFLLEVBQUUsZ0NBQWdDO0FBQzNDO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQiwyREFBMkQ7QUFDN0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQjtBQUMvQix1Q0FBdUM7QUFDdkMsNkJBQTZCO0FBQzdCLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdB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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTs7Ozs7O0FBTUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLEtBQUssRUFBRSxzQkFBc0I7QUFDakM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQUtBO0FBQ0E7QUFDQSx5REFBeUQ7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxLQUFL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IndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvZWxlbWVudC11aS5jb21tb24uanM/ZDRjMiJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9XG4vKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwXG4vKioqKioqLyBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4vKioqKioqLyBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4vKioqKioqLyBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbi8qKioqKiovIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuLyoqKioqKi8gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbi8qKioqKiovIFx0XHRcdGk6IG1vZHVsZUlkLFxuLyoqKioqKi8gXHRcdFx0bDogZmFsc2UsXG4vKioqKioqLyBcdFx0XHRleHBvcnRzOiB7fVxuLyoqKioqKi8gXHRcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuLyoqKioqKi8gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4vKioqKioqLyBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuLyoqKioqKi8gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbi8qKioqKiovIFx0fVxuLyoqKioqKi9cbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuLyoqKioqKi8gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbi8qKioqKiovIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuLyoqKioqKi8gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3Rcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4vKioqKioqLyBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuLyoqKioqKi8gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3Rcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4vKioqKioqLyBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbi8qKioqKiovIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4vKioqKioqLyBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbi8qKioqKiovIFx0XHRyZXR1cm4gbnM7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbi8qKioqKiovIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbi8qKioqKiovIFx0XHRyZXR1cm4gZ2V0dGVyO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiL2Rpc3QvXCI7XG4vKioqKioqL1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vKioqKioqLyBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDQ2KTtcbi8qKioqKiovIH0pXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gKFtcbi8qIDAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlbWVudC11aS9saWIvdXRpbHMvZGF0ZS11dGlsXCIpO1xuXG4vKioqLyB9KSxcbi8qIDEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlbWVudC11aS9saWIvdXRpbHMvZG9tXCIpO1xuXG4vKioqLyB9KSxcbi8qIDIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlbWVudC11aS9saWIvdXRpbHMvdXRpbFwiKTtcblxuLyoqKi8gfSksXG4vKiAzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImVsZW1lbnQtdWkvbGliL21peGlucy9lbWl0dGVyXCIpO1xuXG4vKioqLyB9KSxcbi8qIDQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlbWVudC11aS9saWIvbWl4aW5zL2xvY2FsZVwiKTtcblxuLyoqKi8gfSksXG4vKiA1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImVsZW1lbnQtdWkvbGliL3V0aWxzL3Z1ZS1wb3BwZXJcIik7XG5cbi8qKiovIH0pLFxuLyogNiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJ2dWVcIik7XG5cbi8qKiovIH0pLFxuLyogNyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi91dGlscy9tZXJnZVwiKTtcblxuLyoqKi8gfSksXG4vKiA4ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImVsZW1lbnQtdWkvbGliL2lucHV0XCIpO1xuXG4vKioqLyB9KSxcbi8qIDkgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlbWVudC11aS9saWIvbWl4aW5zL21pZ3JhdGluZ1wiKTtcblxuLyoqKi8gfSksXG4vKiAxMCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi91dGlscy9jbGlja291dHNpZGVcIik7XG5cbi8qKiovIH0pLFxuLyogMTEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlbWVudC11aS9saWIvdXRpbHMvcG9wdXBcIik7XG5cbi8qKiovIH0pLFxuLyogMTIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlbWVudC11aS9saWIvbG9jYWxlXCIpO1xuXG4vKioqLyB9KSxcbi8qIDEzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImVsZW1lbnQtdWkvbGliL2J1dHRvblwiKTtcblxuLyoqKi8gfSksXG4vKiAxNCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi9jaGVja2JveFwiKTtcblxuLyoqKi8gfSksXG4vKiAxNSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi91dGlscy9yZXNpemUtZXZlbnRcIik7XG5cbi8qKiovIH0pLFxuLyogMTYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlbWVudC11aS9saWIvdXRpbHMvdHlwZXNcIik7XG5cbi8qKiovIH0pLFxuLyogMTcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwidGhyb3R0bGUtZGVib3VuY2UvZGVib3VuY2VcIik7XG5cbi8qKiovIH0pLFxuLyogMTggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlbWVudC11aS9saWIvc2Nyb2xsYmFyXCIpO1xuXG4vKioqLyB9KSxcbi8qIDE5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImVsZW1lbnQtdWkvbGliL3V0aWxzL3NoYXJlZFwiKTtcblxuLyoqKi8gfSksXG4vKiAyMCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi91dGlscy9kYXRlXCIpO1xuXG4vKioqLyB9KSxcbi8qIDIxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImVsZW1lbnQtdWkvbGliL3RyYW5zaXRpb25zL2NvbGxhcHNlLXRyYW5zaXRpb25cIik7XG5cbi8qKiovIH0pLFxuLyogMjIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlbWVudC11aS9saWIvdXRpbHMvdmRvbVwiKTtcblxuLyoqKi8gfSksXG4vKiAyMyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi9taXhpbnMvZm9jdXNcIik7XG5cbi8qKiovIH0pLFxuLyogMjQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiYmFiZWwtaGVscGVyLXZ1ZS1qc3gtbWVyZ2UtcHJvcHNcIik7XG5cbi8qKiovIH0pLFxuLyogMjUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwidGhyb3R0bGUtZGVib3VuY2UvdGhyb3R0bGVcIik7XG5cbi8qKiovIH0pLFxuLyogMjYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlbWVudC11aS9saWIvdG9vbHRpcFwiKTtcblxuLyoqKi8gfSksXG4vKiAyNyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi91dGlscy9zY3JvbGwtaW50by12aWV3XCIpO1xuXG4vKioqLyB9KSxcbi8qIDI4ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImVsZW1lbnQtdWkvbGliL3V0aWxzL2xvZGFzaFwiKTtcblxuLyoqKi8gfSksXG4vKiAyOSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi9idXR0b24tZ3JvdXBcIik7XG5cbi8qKiovIH0pLFxuLyogMzAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlbWVudC11aS9saWIvdGFnXCIpO1xuXG4vKioqLyB9KSxcbi8qIDMxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImVsZW1lbnQtdWkvbGliL3V0aWxzL3Njcm9sbGJhci13aWR0aFwiKTtcblxuLyoqKi8gfSksXG4vKiAzMiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi9jaGVja2JveC1ncm91cFwiKTtcblxuLyoqKi8gfSksXG4vKiAzMyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi91dGlscy9hZnRlci1sZWF2ZVwiKTtcblxuLyoqKi8gfSksXG4vKiAzNCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi9wcm9ncmVzc1wiKTtcblxuLyoqKi8gfSksXG4vKiAzNSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi91dGlscy9hcmlhLXV0aWxzXCIpO1xuXG4vKioqLyB9KSxcbi8qIDM2ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInRocm90dGxlLWRlYm91bmNlXCIpO1xuXG4vKioqLyB9KSxcbi8qIDM3ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImVsZW1lbnQtdWkvbGliL3NlbGVjdFwiKTtcblxuLyoqKi8gfSksXG4vKiAzOCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi9vcHRpb25cIik7XG5cbi8qKiovIH0pLFxuLyogMzkgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwibm9ybWFsaXplLXdoZWVsXCIpO1xuXG4vKioqLyB9KSxcbi8qIDQwICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImVsZW1lbnQtdWkvbGliL3V0aWxzL2FyaWEtZGlhbG9nXCIpO1xuXG4vKioqLyB9KSxcbi8qIDQxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImFzeW5jLXZhbGlkYXRvclwiKTtcblxuLyoqKi8gfSksXG4vKiA0MiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi9pbnB1dC1udW1iZXJcIik7XG5cbi8qKiovIH0pLFxuLyogNDMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlbWVudC11aS9saWIvY2FzY2FkZXItcGFuZWxcIik7XG5cbi8qKiovIH0pLFxuLyogNDQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlbWVudC11aS9saWIvcmFkaW9cIik7XG5cbi8qKiovIH0pLFxuLyogNDUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlbWVudC11aS9saWIvcG9wb3ZlclwiKTtcblxuLyoqKi8gfSksXG4vKiA0NiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX18oNDcpO1xuXG5cbi8qKiovIH0pLFxuLyogNDcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvcGFnaW5hdGlvbi9zcmMvcGFnZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTcyNzRmMjY3JlxudmFyIHBhZ2VydnVlX3R5cGVfdGVtcGxhdGVfaWRfNzI3NGYyNjdfcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwidWxcIixcbiAgICB7IHN0YXRpY0NsYXNzOiBcImVsLXBhZ2VyXCIsIG9uOiB7IGNsaWNrOiBfdm0ub25QYWdlckNsaWNrIH0gfSxcbiAgICBbXG4gICAgICBfdm0ucGFnZUNvdW50ID4gMFxuICAgICAgICA/IF9jKFxuICAgICAgICAgICAgXCJsaVwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJudW1iZXJcIixcbiAgICAgICAgICAgICAgY2xhc3M6IHsgYWN0aXZlOiBfdm0uY3VycmVudFBhZ2UgPT09IDEsIGRpc2FibGVkOiBfdm0uZGlzYWJsZWQgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtfdm0uX3YoXCIxXCIpXVxuICAgICAgICAgIClcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgIF92bS5zaG93UHJldk1vcmVcbiAgICAgICAgPyBfYyhcImxpXCIsIHtcbiAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWljb24gbW9yZSBidG4tcXVpY2twcmV2XCIsXG4gICAgICAgICAgICBjbGFzczogW192bS5xdWlja3ByZXZJY29uQ2xhc3MsIHsgZGlzYWJsZWQ6IF92bS5kaXNhYmxlZCB9XSxcbiAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgIG1vdXNlZW50ZXI6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgIF92bS5vbk1vdXNlZW50ZXIoXCJsZWZ0XCIpXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIG1vdXNlbGVhdmU6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgIF92bS5xdWlja3ByZXZJY29uQ2xhc3MgPSBcImVsLWljb24tbW9yZVwiXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgX3ZtLl9sKF92bS5wYWdlcnMsIGZ1bmN0aW9uKHBhZ2VyKSB7XG4gICAgICAgIHJldHVybiBfYyhcbiAgICAgICAgICBcImxpXCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAga2V5OiBwYWdlcixcbiAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcIm51bWJlclwiLFxuICAgICAgICAgICAgY2xhc3M6IHsgYWN0aXZlOiBfdm0uY3VycmVudFBhZ2UgPT09IHBhZ2VyLCBkaXNhYmxlZDogX3ZtLmRpc2FibGVkIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFtfdm0uX3YoX3ZtLl9zKHBhZ2VyKSldXG4gICAgICAgIClcbiAgICAgIH0pLFxuICAgICAgX3ZtLnNob3dOZXh0TW9yZVxuICAgICAgICA/IF9jKFwibGlcIiwge1xuICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtaWNvbiBtb3JlIGJ0bi1xdWlja25leHRcIixcbiAgICAgICAgICAgIGNsYXNzOiBbX3ZtLnF1aWNrbmV4dEljb25DbGFzcywgeyBkaXNhYmxlZDogX3ZtLmRpc2FibGVkIH1dLFxuICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgbW91c2VlbnRlcjogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgX3ZtLm9uTW91c2VlbnRlcihcInJpZ2h0XCIpXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIG1vdXNlbGVhdmU6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgIF92bS5xdWlja25leHRJY29uQ2xhc3MgPSBcImVsLWljb24tbW9yZVwiXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgX3ZtLnBhZ2VDb3VudCA+IDFcbiAgICAgICAgPyBfYyhcbiAgICAgICAgICAgIFwibGlcIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwibnVtYmVyXCIsXG4gICAgICAgICAgICAgIGNsYXNzOiB7XG4gICAgICAgICAgICAgICAgYWN0aXZlOiBfdm0uY3VycmVudFBhZ2UgPT09IF92bS5wYWdlQ291bnQsXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ6IF92bS5kaXNhYmxlZFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW192bS5fdihfdm0uX3MoX3ZtLnBhZ2VDb3VudCkpXVxuICAgICAgICAgIClcbiAgICAgICAgOiBfdm0uX2UoKVxuICAgIF0sXG4gICAgMlxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnBhZ2VydnVlX3R5cGVfdGVtcGxhdGVfaWRfNzI3NGYyNjdfcmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9wYWdpbmF0aW9uL3NyYy9wYWdlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NzI3NGYyNjcmXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3BhZ2luYXRpb24vc3JjL3BhZ2VyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWdlcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG5hbWU6ICdFbFBhZ2VyJyxcblxuICBwcm9wczoge1xuICAgIGN1cnJlbnRQYWdlOiBOdW1iZXIsXG5cbiAgICBwYWdlQ291bnQ6IE51bWJlcixcblxuICAgIHBhZ2VyQ291bnQ6IE51bWJlcixcblxuICAgIGRpc2FibGVkOiBCb29sZWFuXG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBzaG93UHJldk1vcmU6IGZ1bmN0aW9uIHNob3dQcmV2TW9yZSh2YWwpIHtcbiAgICAgIGlmICghdmFsKSB0aGlzLnF1aWNrcHJldkljb25DbGFzcyA9ICdlbC1pY29uLW1vcmUnO1xuICAgIH0sXG4gICAgc2hvd05leHRNb3JlOiBmdW5jdGlvbiBzaG93TmV4dE1vcmUodmFsKSB7XG4gICAgICBpZiAoIXZhbCkgdGhpcy5xdWlja25leHRJY29uQ2xhc3MgPSAnZWwtaWNvbi1tb3JlJztcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uUGFnZXJDbGljazogZnVuY3Rpb24gb25QYWdlckNsaWNrKGV2ZW50KSB7XG4gICAgICB2YXIgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuICAgICAgaWYgKHRhcmdldC50YWdOYW1lID09PSAnVUwnIHx8IHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgbmV3UGFnZSA9IE51bWJlcihldmVudC50YXJnZXQudGV4dENvbnRlbnQpO1xuICAgICAgdmFyIHBhZ2VDb3VudCA9IHRoaXMucGFnZUNvdW50O1xuICAgICAgdmFyIGN1cnJlbnRQYWdlID0gdGhpcy5jdXJyZW50UGFnZTtcbiAgICAgIHZhciBwYWdlckNvdW50T2Zmc2V0ID0gdGhpcy5wYWdlckNvdW50IC0gMjtcblxuICAgICAgaWYgKHRhcmdldC5jbGFzc05hbWUuaW5kZXhPZignbW9yZScpICE9PSAtMSkge1xuICAgICAgICBpZiAodGFyZ2V0LmNsYXNzTmFtZS5pbmRleE9mKCdxdWlja3ByZXYnKSAhPT0gLTEpIHtcbiAgICAgICAgICBuZXdQYWdlID0gY3VycmVudFBhZ2UgLSBwYWdlckNvdW50T2Zmc2V0O1xuICAgICAgICB9IGVsc2UgaWYgKHRhcmdldC5jbGFzc05hbWUuaW5kZXhPZigncXVpY2tuZXh0JykgIT09IC0xKSB7XG4gICAgICAgICAgbmV3UGFnZSA9IGN1cnJlbnRQYWdlICsgcGFnZXJDb3VudE9mZnNldDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmICghaXNOYU4obmV3UGFnZSkpIHtcbiAgICAgICAgaWYgKG5ld1BhZ2UgPCAxKSB7XG4gICAgICAgICAgbmV3UGFnZSA9IDE7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmV3UGFnZSA+IHBhZ2VDb3VudCkge1xuICAgICAgICAgIG5ld1BhZ2UgPSBwYWdlQ291bnQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG5ld1BhZ2UgIT09IGN1cnJlbnRQYWdlKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIG5ld1BhZ2UpO1xuICAgICAgfVxuICAgIH0sXG4gICAgb25Nb3VzZWVudGVyOiBmdW5jdGlvbiBvbk1vdXNlZW50ZXIoZGlyZWN0aW9uKSB7XG4gICAgICBpZiAodGhpcy5kaXNhYmxlZCkgcmV0dXJuO1xuICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gJ2xlZnQnKSB7XG4gICAgICAgIHRoaXMucXVpY2twcmV2SWNvbkNsYXNzID0gJ2VsLWljb24tZC1hcnJvdy1sZWZ0JztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucXVpY2tuZXh0SWNvbkNsYXNzID0gJ2VsLWljb24tZC1hcnJvdy1yaWdodCc7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgcGFnZXJzOiBmdW5jdGlvbiBwYWdlcnMoKSB7XG4gICAgICB2YXIgcGFnZXJDb3VudCA9IHRoaXMucGFnZXJDb3VudDtcbiAgICAgIHZhciBoYWxmUGFnZXJDb3VudCA9IChwYWdlckNvdW50IC0gMSkgLyAyO1xuXG4gICAgICB2YXIgY3VycmVudFBhZ2UgPSBOdW1iZXIodGhpcy5jdXJyZW50UGFnZSk7XG4gICAgICB2YXIgcGFnZUNvdW50ID0gTnVtYmVyKHRoaXMucGFnZUNvdW50KTtcblxuICAgICAgdmFyIHNob3dQcmV2TW9yZSA9IGZhbHNlO1xuICAgICAgdmFyIHNob3dOZXh0TW9yZSA9IGZhbHNlO1xuXG4gICAgICBpZiAocGFnZUNvdW50ID4gcGFnZXJDb3VudCkge1xuICAgICAgICBpZiAoY3VycmVudFBhZ2UgPiBwYWdlckNvdW50IC0gaGFsZlBhZ2VyQ291bnQpIHtcbiAgICAgICAgICBzaG93UHJldk1vcmUgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGN1cnJlbnRQYWdlIDwgcGFnZUNvdW50IC0gaGFsZlBhZ2VyQ291bnQpIHtcbiAgICAgICAgICBzaG93TmV4dE1vcmUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBhcnJheSA9IFtdO1xuXG4gICAgICBpZiAoc2hvd1ByZXZNb3JlICYmICFzaG93TmV4dE1vcmUpIHtcbiAgICAgICAgdmFyIHN0YXJ0UGFnZSA9IHBhZ2VDb3VudCAtIChwYWdlckNvdW50IC0gMik7XG4gICAgICAgIGZvciAodmFyIGkgPSBzdGFydFBhZ2U7IGkgPCBwYWdlQ291bnQ7IGkrKykge1xuICAgICAgICAgIGFycmF5LnB1c2goaSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoIXNob3dQcmV2TW9yZSAmJiBzaG93TmV4dE1vcmUpIHtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAyOyBfaSA8IHBhZ2VyQ291bnQ7IF9pKyspIHtcbiAgICAgICAgICBhcnJheS5wdXNoKF9pKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChzaG93UHJldk1vcmUgJiYgc2hvd05leHRNb3JlKSB7XG4gICAgICAgIHZhciBvZmZzZXQgPSBNYXRoLmZsb29yKHBhZ2VyQ291bnQgLyAyKSAtIDE7XG4gICAgICAgIGZvciAodmFyIF9pMiA9IGN1cnJlbnRQYWdlIC0gb2Zmc2V0OyBfaTIgPD0gY3VycmVudFBhZ2UgKyBvZmZzZXQ7IF9pMisrKSB7XG4gICAgICAgICAgYXJyYXkucHVzaChfaTIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKHZhciBfaTMgPSAyOyBfaTMgPCBwYWdlQ291bnQ7IF9pMysrKSB7XG4gICAgICAgICAgYXJyYXkucHVzaChfaTMpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2hvd1ByZXZNb3JlID0gc2hvd1ByZXZNb3JlO1xuICAgICAgdGhpcy5zaG93TmV4dE1vcmUgPSBzaG93TmV4dE1vcmU7XG5cbiAgICAgIHJldHVybiBhcnJheTtcbiAgICB9XG4gIH0sXG5cbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY3VycmVudDogbnVsbCxcbiAgICAgIHNob3dQcmV2TW9yZTogZmFsc2UsXG4gICAgICBzaG93TmV4dE1vcmU6IGZhbHNlLFxuICAgICAgcXVpY2tuZXh0SWNvbkNsYXNzOiAnZWwtaWNvbi1tb3JlJyxcbiAgICAgIHF1aWNrcHJldkljb25DbGFzczogJ2VsLWljb24tbW9yZSdcbiAgICB9O1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvcGFnaW5hdGlvbi9zcmMvcGFnZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY19wYWdlcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChwYWdlcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXG4vKiBnbG9iYWxzIF9fVlVFX1NTUl9DT05URVhUX18gKi9cblxuLy8gSU1QT1JUQU5UOiBEbyBOT1QgdXNlIEVTMjAxNSBmZWF0dXJlcyBpbiB0aGlzIGZpbGUgKGV4Y2VwdCBmb3IgbW9kdWxlcykuXG4vLyBUaGlzIG1vZHVsZSBpcyBhIHJ1bnRpbWUgdXRpbGl0eSBmb3IgY2xlYW5lciBjb21wb25lbnQgbW9kdWxlIG91dHB1dCBhbmQgd2lsbFxuLy8gYmUgaW5jbHVkZWQgaW4gdGhlIGZpbmFsIHdlYnBhY2sgdXNlciBidW5kbGUuXG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUNvbXBvbmVudCAoXG4gIHNjcmlwdEV4cG9ydHMsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmdW5jdGlvbmFsVGVtcGxhdGUsXG4gIGluamVjdFN0eWxlcyxcbiAgc2NvcGVJZCxcbiAgbW9kdWxlSWRlbnRpZmllciwgLyogc2VydmVyIG9ubHkgKi9cbiAgc2hhZG93TW9kZSAvKiB2dWUtY2xpIG9ubHkgKi9cbikge1xuICAvLyBWdWUuZXh0ZW5kIGNvbnN0cnVjdG9yIGV4cG9ydCBpbnRlcm9wXG4gIHZhciBvcHRpb25zID0gdHlwZW9mIHNjcmlwdEV4cG9ydHMgPT09ICdmdW5jdGlvbidcbiAgICA/IHNjcmlwdEV4cG9ydHMub3B0aW9uc1xuICAgIDogc2NyaXB0RXhwb3J0c1xuXG4gIC8vIHJlbmRlciBmdW5jdGlvbnNcbiAgaWYgKHJlbmRlcikge1xuICAgIG9wdGlvbnMucmVuZGVyID0gcmVuZGVyXG4gICAgb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnMgPSBzdGF0aWNSZW5kZXJGbnNcbiAgICBvcHRpb25zLl9jb21waWxlZCA9IHRydWVcbiAgfVxuXG4gIC8vIGZ1bmN0aW9uYWwgdGVtcGxhdGVcbiAgaWYgKGZ1bmN0aW9uYWxUZW1wbGF0ZSkge1xuICAgIG9wdGlvbnMuZnVuY3Rpb25hbCA9IHRydWVcbiAgfVxuXG4gIC8vIHNjb3BlZElkXG4gIGlmIChzY29wZUlkKSB7XG4gICAgb3B0aW9ucy5fc2NvcGVJZCA9ICdkYXRhLXYtJyArIHNjb3BlSWRcbiAgfVxuXG4gIHZhciBob29rXG4gIGlmIChtb2R1bGVJZGVudGlmaWVyKSB7IC8vIHNlcnZlciBidWlsZFxuICAgIGhvb2sgPSBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgLy8gMi4zIGluamVjdGlvblxuICAgICAgY29udGV4dCA9XG4gICAgICAgIGNvbnRleHQgfHwgLy8gY2FjaGVkIGNhbGxcbiAgICAgICAgKHRoaXMuJHZub2RlICYmIHRoaXMuJHZub2RlLnNzckNvbnRleHQpIHx8IC8vIHN0YXRlZnVsXG4gICAgICAgICh0aGlzLnBhcmVudCAmJiB0aGlzLnBhcmVudC4kdm5vZGUgJiYgdGhpcy5wYXJlbnQuJHZub2RlLnNzckNvbnRleHQpIC8vIGZ1bmN0aW9uYWxcbiAgICAgIC8vIDIuMiB3aXRoIHJ1bkluTmV3Q29udGV4dDogdHJ1ZVxuICAgICAgaWYgKCFjb250ZXh0ICYmIHR5cGVvZiBfX1ZVRV9TU1JfQ09OVEVYVF9fICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBjb250ZXh0ID0gX19WVUVfU1NSX0NPTlRFWFRfX1xuICAgICAgfVxuICAgICAgLy8gaW5qZWN0IGNvbXBvbmVudCBzdHlsZXNcbiAgICAgIGlmIChpbmplY3RTdHlsZXMpIHtcbiAgICAgICAgaW5qZWN0U3R5bGVzLmNhbGwodGhpcywgY29udGV4dClcbiAgICAgIH1cbiAgICAgIC8vIHJlZ2lzdGVyIGNvbXBvbmVudCBtb2R1bGUgaWRlbnRpZmllciBmb3IgYXN5bmMgY2h1bmsgaW5mZXJyZW5jZVxuICAgICAgaWYgKGNvbnRleHQgJiYgY29udGV4dC5fcmVnaXN0ZXJlZENvbXBvbmVudHMpIHtcbiAgICAgICAgY29udGV4dC5fcmVnaXN0ZXJlZENvbXBvbmVudHMuYWRkKG1vZHVsZUlkZW50aWZpZXIpXG4gICAgICB9XG4gICAgfVxuICAgIC8vIHVzZWQgYnkgc3NyIGluIGNhc2UgY29tcG9uZW50IGlzIGNhY2hlZCBhbmQgYmVmb3JlQ3JlYXRlXG4gICAgLy8gbmV2ZXIgZ2V0cyBjYWxsZWRcbiAgICBvcHRpb25zLl9zc3JSZWdpc3RlciA9IGhvb2tcbiAgfSBlbHNlIGlmIChpbmplY3RTdHlsZXMpIHtcbiAgICBob29rID0gc2hhZG93TW9kZVxuICAgICAgPyBmdW5jdGlvbiAoKSB7IGluamVjdFN0eWxlcy5jYWxsKHRoaXMsIHRoaXMuJHJvb3QuJG9wdGlvbnMuc2hhZG93Um9vdCkgfVxuICAgICAgOiBpbmplY3RTdHlsZXNcbiAgfVxuXG4gIGlmIChob29rKSB7XG4gICAgaWYgKG9wdGlvbnMuZnVuY3Rpb25hbCkge1xuICAgICAgLy8gZm9yIHRlbXBsYXRlLW9ubHkgaG90LXJlbG9hZCBiZWNhdXNlIGluIHRoYXQgY2FzZSB0aGUgcmVuZGVyIGZuIGRvZXNuJ3RcbiAgICAgIC8vIGdvIHRocm91Z2ggdGhlIG5vcm1hbGl6ZXJcbiAgICAgIG9wdGlvbnMuX2luamVjdFN0eWxlcyA9IGhvb2tcbiAgICAgIC8vIHJlZ2lzdGVyIGZvciBmdW5jdGlvYWwgY29tcG9uZW50IGluIHZ1ZSBmaWxlXG4gICAgICB2YXIgb3JpZ2luYWxSZW5kZXIgPSBvcHRpb25zLnJlbmRlclxuICAgICAgb3B0aW9ucy5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXJXaXRoU3R5bGVJbmplY3Rpb24gKGgsIGNvbnRleHQpIHtcbiAgICAgICAgaG9vay5jYWxsKGNvbnRleHQpXG4gICAgICAgIHJldHVybiBvcmlnaW5hbFJlbmRlcihoLCBjb250ZXh0KVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpbmplY3QgY29tcG9uZW50IHJlZ2lzdHJhdGlvbiBhcyBiZWZvcmVDcmVhdGUgaG9va1xuICAgICAgdmFyIGV4aXN0aW5nID0gb3B0aW9ucy5iZWZvcmVDcmVhdGVcbiAgICAgIG9wdGlvbnMuYmVmb3JlQ3JlYXRlID0gZXhpc3RpbmdcbiAgICAgICAgPyBbXS5jb25jYXQoZXhpc3RpbmcsIGhvb2spXG4gICAgICAgIDogW2hvb2tdXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBleHBvcnRzOiBzY3JpcHRFeHBvcnRzLFxuICAgIG9wdGlvbnM6IG9wdGlvbnNcbiAgfVxufVxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3BhZ2luYXRpb24vc3JjL3BhZ2VyLnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgc3JjX3BhZ2VydnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICBwYWdlcnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzcyNzRmMjY3X3JlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBhcGk7IH1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvcGFnaW5hdGlvbi9zcmMvcGFnZXIudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhZ2VyID0gKGNvbXBvbmVudC5leHBvcnRzKTtcbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJlbGVtZW50LXVpL2xpYi9zZWxlY3RcIlxudmFyIHNlbGVjdF8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM3KTtcbnZhciBzZWxlY3RfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oc2VsZWN0Xyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJlbGVtZW50LXVpL2xpYi9vcHRpb25cIlxudmFyIG9wdGlvbl8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM4KTtcbnZhciBvcHRpb25fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4ob3B0aW9uXyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJlbGVtZW50LXVpL2xpYi9pbnB1dFwiXG52YXIgaW5wdXRfID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTtcbnZhciBpbnB1dF9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihpbnB1dF8pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiZWxlbWVudC11aS9saWIvbWl4aW5zL2xvY2FsZVwiXG52YXIgbG9jYWxlXyA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XG52YXIgbG9jYWxlX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGxvY2FsZV8pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiZWxlbWVudC11aS9saWIvdXRpbHMvdXRpbFwiXG52YXIgdXRpbF8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3BhZ2luYXRpb24vc3JjL3BhZ2luYXRpb24uanNcblxuXG5cblxuXG5cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcGFnaW5hdGlvbiA9ICh7XG4gIG5hbWU6ICdFbFBhZ2luYXRpb24nLFxuXG4gIHByb3BzOiB7XG4gICAgcGFnZVNpemU6IHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGRlZmF1bHQ6IDEwXG4gICAgfSxcblxuICAgIHNtYWxsOiBCb29sZWFuLFxuXG4gICAgdG90YWw6IE51bWJlcixcblxuICAgIHBhZ2VDb3VudDogTnVtYmVyLFxuXG4gICAgcGFnZXJDb3VudDoge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgdmFsaWRhdG9yOiBmdW5jdGlvbiB2YWxpZGF0b3IodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuICh2YWx1ZSB8IDApID09PSB2YWx1ZSAmJiB2YWx1ZSA+IDQgJiYgdmFsdWUgPCAyMiAmJiB2YWx1ZSAlIDIgPT09IDE7XG4gICAgICB9LFxuXG4gICAgICBkZWZhdWx0OiA3XG4gICAgfSxcblxuICAgIGN1cnJlbnRQYWdlOiB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBkZWZhdWx0OiAxXG4gICAgfSxcblxuICAgIGxheW91dDoge1xuICAgICAgZGVmYXVsdDogJ3ByZXYsIHBhZ2VyLCBuZXh0LCBqdW1wZXIsIC0+LCB0b3RhbCdcbiAgICB9LFxuXG4gICAgcGFnZVNpemVzOiB7XG4gICAgICB0eXBlOiBBcnJheSxcbiAgICAgIGRlZmF1bHQ6IGZ1bmN0aW9uIF9kZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gWzEwLCAyMCwgMzAsIDQwLCA1MCwgMTAwXTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcG9wcGVyQ2xhc3M6IFN0cmluZyxcblxuICAgIHByZXZUZXh0OiBTdHJpbmcsXG5cbiAgICBuZXh0VGV4dDogU3RyaW5nLFxuXG4gICAgYmFja2dyb3VuZDogQm9vbGVhbixcblxuICAgIGRpc2FibGVkOiBCb29sZWFuLFxuXG4gICAgaGlkZU9uU2luZ2xlUGFnZTogQm9vbGVhblxuICB9LFxuXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGludGVybmFsQ3VycmVudFBhZ2U6IDEsXG4gICAgICBpbnRlcm5hbFBhZ2VTaXplOiAwLFxuICAgICAgbGFzdEVtaXR0ZWRQYWdlOiAtMSxcbiAgICAgIHVzZXJDaGFuZ2VQYWdlU2l6ZTogZmFsc2VcbiAgICB9O1xuICB9LFxuICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcihoKSB7XG4gICAgdmFyIGxheW91dCA9IHRoaXMubGF5b3V0O1xuICAgIGlmICghbGF5b3V0KSByZXR1cm4gbnVsbDtcbiAgICBpZiAodGhpcy5oaWRlT25TaW5nbGVQYWdlICYmICghdGhpcy5pbnRlcm5hbFBhZ2VDb3VudCB8fCB0aGlzLmludGVybmFsUGFnZUNvdW50ID09PSAxKSkgcmV0dXJuIG51bGw7XG5cbiAgICB2YXIgdGVtcGxhdGUgPSBoKCdkaXYnLCB7ICdjbGFzcyc6IFsnZWwtcGFnaW5hdGlvbicsIHtcbiAgICAgICAgJ2lzLWJhY2tncm91bmQnOiB0aGlzLmJhY2tncm91bmQsXG4gICAgICAgICdlbC1wYWdpbmF0aW9uLS1zbWFsbCc6IHRoaXMuc21hbGxcbiAgICAgIH1dIH0pO1xuICAgIHZhciBURU1QTEFURV9NQVAgPSB7XG4gICAgICBwcmV2OiBoKCdwcmV2JyksXG4gICAgICBqdW1wZXI6IGgoJ2p1bXBlcicpLFxuICAgICAgcGFnZXI6IGgoJ3BhZ2VyJywge1xuICAgICAgICBhdHRyczogeyBjdXJyZW50UGFnZTogdGhpcy5pbnRlcm5hbEN1cnJlbnRQYWdlLCBwYWdlQ291bnQ6IHRoaXMuaW50ZXJuYWxQYWdlQ291bnQsIHBhZ2VyQ291bnQ6IHRoaXMucGFnZXJDb3VudCwgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWQgfSxcbiAgICAgICAgb246IHtcbiAgICAgICAgICAnY2hhbmdlJzogdGhpcy5oYW5kbGVDdXJyZW50Q2hhbmdlXG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgbmV4dDogaCgnbmV4dCcpLFxuICAgICAgc2l6ZXM6IGgoJ3NpemVzJywge1xuICAgICAgICBhdHRyczogeyBwYWdlU2l6ZXM6IHRoaXMucGFnZVNpemVzIH1cbiAgICAgIH0pLFxuICAgICAgc2xvdDogaCgnc2xvdCcsIFt0aGlzLiRzbG90cy5kZWZhdWx0ID8gdGhpcy4kc2xvdHMuZGVmYXVsdCA6ICcnXSksXG4gICAgICB0b3RhbDogaCgndG90YWwnKVxuICAgIH07XG4gICAgdmFyIGNvbXBvbmVudHMgPSBsYXlvdXQuc3BsaXQoJywnKS5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHJldHVybiBpdGVtLnRyaW0oKTtcbiAgICB9KTtcbiAgICB2YXIgcmlnaHRXcmFwcGVyID0gaCgnZGl2JywgeyAnY2xhc3MnOiAnZWwtcGFnaW5hdGlvbl9fcmlnaHR3cmFwcGVyJyB9KTtcbiAgICB2YXIgaGF2ZVJpZ2h0V3JhcHBlciA9IGZhbHNlO1xuXG4gICAgdGVtcGxhdGUuY2hpbGRyZW4gPSB0ZW1wbGF0ZS5jaGlsZHJlbiB8fCBbXTtcbiAgICByaWdodFdyYXBwZXIuY2hpbGRyZW4gPSByaWdodFdyYXBwZXIuY2hpbGRyZW4gfHwgW107XG4gICAgY29tcG9uZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChjb21wbykge1xuICAgICAgaWYgKGNvbXBvID09PSAnLT4nKSB7XG4gICAgICAgIGhhdmVSaWdodFdyYXBwZXIgPSB0cnVlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghaGF2ZVJpZ2h0V3JhcHBlcikge1xuICAgICAgICB0ZW1wbGF0ZS5jaGlsZHJlbi5wdXNoKFRFTVBMQVRFX01BUFtjb21wb10pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmlnaHRXcmFwcGVyLmNoaWxkcmVuLnB1c2goVEVNUExBVEVfTUFQW2NvbXBvXSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoaGF2ZVJpZ2h0V3JhcHBlcikge1xuICAgICAgdGVtcGxhdGUuY2hpbGRyZW4udW5zaGlmdChyaWdodFdyYXBwZXIpO1xuICAgIH1cblxuICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgfSxcblxuXG4gIGNvbXBvbmVudHM6IHtcbiAgICBQcmV2OiB7XG4gICAgICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcihoKSB7XG4gICAgICAgIHJldHVybiBoKFxuICAgICAgICAgICdidXR0b24nLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgIHR5cGU6ICdidXR0b24nLFxuXG4gICAgICAgICAgICAgIGRpc2FibGVkOiB0aGlzLiRwYXJlbnQuZGlzYWJsZWQgfHwgdGhpcy4kcGFyZW50LmludGVybmFsQ3VycmVudFBhZ2UgPD0gMVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdjbGFzcyc6ICdidG4tcHJldicsIG9uOiB7XG4gICAgICAgICAgICAgICdjbGljayc6IHRoaXMuJHBhcmVudC5wcmV2XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBbdGhpcy4kcGFyZW50LnByZXZUZXh0ID8gaCgnc3BhbicsIFt0aGlzLiRwYXJlbnQucHJldlRleHRdKSA6IGgoJ2knLCB7ICdjbGFzcyc6ICdlbC1pY29uIGVsLWljb24tYXJyb3ctbGVmdCcgfSldXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIE5leHQ6IHtcbiAgICAgIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKGgpIHtcbiAgICAgICAgcmV0dXJuIGgoXG4gICAgICAgICAgJ2J1dHRvbicsXG4gICAgICAgICAge1xuICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgdHlwZTogJ2J1dHRvbicsXG5cbiAgICAgICAgICAgICAgZGlzYWJsZWQ6IHRoaXMuJHBhcmVudC5kaXNhYmxlZCB8fCB0aGlzLiRwYXJlbnQuaW50ZXJuYWxDdXJyZW50UGFnZSA9PT0gdGhpcy4kcGFyZW50LmludGVybmFsUGFnZUNvdW50IHx8IHRoaXMuJHBhcmVudC5pbnRlcm5hbFBhZ2VDb3VudCA9PT0gMFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdjbGFzcyc6ICdidG4tbmV4dCcsIG9uOiB7XG4gICAgICAgICAgICAgICdjbGljayc6IHRoaXMuJHBhcmVudC5uZXh0XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBbdGhpcy4kcGFyZW50Lm5leHRUZXh0ID8gaCgnc3BhbicsIFt0aGlzLiRwYXJlbnQubmV4dFRleHRdKSA6IGgoJ2knLCB7ICdjbGFzcyc6ICdlbC1pY29uIGVsLWljb24tYXJyb3ctcmlnaHQnIH0pXVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBTaXplczoge1xuICAgICAgbWl4aW5zOiBbbG9jYWxlX2RlZmF1bHQuYV0sXG5cbiAgICAgIHByb3BzOiB7XG4gICAgICAgIHBhZ2VTaXplczogQXJyYXlcbiAgICAgIH0sXG5cbiAgICAgIHdhdGNoOiB7XG4gICAgICAgIHBhZ2VTaXplczoge1xuICAgICAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcbiAgICAgICAgICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKG5ld1ZhbCwgb2xkVmFsKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0KHV0aWxfW1widmFsdWVFcXVhbHNcIl0pKG5ld1ZhbCwgb2xkVmFsKSkgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobmV3VmFsKSkge1xuICAgICAgICAgICAgICB0aGlzLiRwYXJlbnQuaW50ZXJuYWxQYWdlU2l6ZSA9IG5ld1ZhbC5pbmRleE9mKHRoaXMuJHBhcmVudC5wYWdlU2l6ZSkgPiAtMSA/IHRoaXMuJHBhcmVudC5wYWdlU2l6ZSA6IHRoaXMucGFnZVNpemVzWzBdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIoaCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICAgIHJldHVybiBoKFxuICAgICAgICAgICdzcGFuJyxcbiAgICAgICAgICB7ICdjbGFzcyc6ICdlbC1wYWdpbmF0aW9uX19zaXplcycgfSxcbiAgICAgICAgICBbaChcbiAgICAgICAgICAgICdlbC1zZWxlY3QnLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLiRwYXJlbnQuaW50ZXJuYWxQYWdlU2l6ZSxcbiAgICAgICAgICAgICAgICBwb3BwZXJDbGFzczogdGhpcy4kcGFyZW50LnBvcHBlckNsYXNzIHx8ICcnLFxuICAgICAgICAgICAgICAgIHNpemU6ICdtaW5pJyxcblxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiB0aGlzLiRwYXJlbnQuZGlzYWJsZWQgfSxcbiAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAnaW5wdXQnOiB0aGlzLmhhbmRsZUNoYW5nZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW3RoaXMucGFnZVNpemVzLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgICAgICByZXR1cm4gaCgnZWwtb3B0aW9uJywge1xuICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICB2YWx1ZTogaXRlbSxcbiAgICAgICAgICAgICAgICAgIGxhYmVsOiBpdGVtICsgX3RoaXMudCgnZWwucGFnaW5hdGlvbi5wYWdlc2l6ZScpIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KV1cbiAgICAgICAgICApXVxuICAgICAgICApO1xuICAgICAgfSxcblxuXG4gICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgIEVsU2VsZWN0OiBzZWxlY3RfZGVmYXVsdC5hLFxuICAgICAgICBFbE9wdGlvbjogb3B0aW9uX2RlZmF1bHQuYVxuICAgICAgfSxcblxuICAgICAgbWV0aG9kczoge1xuICAgICAgICBoYW5kbGVDaGFuZ2U6IGZ1bmN0aW9uIGhhbmRsZUNoYW5nZSh2YWwpIHtcbiAgICAgICAgICBpZiAodmFsICE9PSB0aGlzLiRwYXJlbnQuaW50ZXJuYWxQYWdlU2l6ZSkge1xuICAgICAgICAgICAgdGhpcy4kcGFyZW50LmludGVybmFsUGFnZVNpemUgPSB2YWwgPSBwYXJzZUludCh2YWwsIDEwKTtcbiAgICAgICAgICAgIHRoaXMuJHBhcmVudC51c2VyQ2hhbmdlUGFnZVNpemUgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy4kcGFyZW50LiRlbWl0KCd1cGRhdGU6cGFnZVNpemUnLCB2YWwpO1xuICAgICAgICAgICAgdGhpcy4kcGFyZW50LiRlbWl0KCdzaXplLWNoYW5nZScsIHZhbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIEp1bXBlcjoge1xuICAgICAgbWl4aW5zOiBbbG9jYWxlX2RlZmF1bHQuYV0sXG5cbiAgICAgIGNvbXBvbmVudHM6IHsgRWxJbnB1dDogaW5wdXRfZGVmYXVsdC5hIH0sXG5cbiAgICAgIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdXNlcklucHV0OiBudWxsXG4gICAgICAgIH07XG4gICAgICB9LFxuXG5cbiAgICAgIHdhdGNoOiB7XG4gICAgICAgICckcGFyZW50LmludGVybmFsQ3VycmVudFBhZ2UnOiBmdW5jdGlvbiAkcGFyZW50SW50ZXJuYWxDdXJyZW50UGFnZSgpIHtcbiAgICAgICAgICB0aGlzLnVzZXJJbnB1dCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIG1ldGhvZHM6IHtcbiAgICAgICAgaGFuZGxlS2V5dXA6IGZ1bmN0aW9uIGhhbmRsZUtleXVwKF9yZWYpIHtcbiAgICAgICAgICB2YXIga2V5Q29kZSA9IF9yZWYua2V5Q29kZSxcbiAgICAgICAgICAgICAgdGFyZ2V0ID0gX3JlZi50YXJnZXQ7XG5cbiAgICAgICAgICAvLyBDaHJvbWUsIFNhZmFyaSwgRmlyZWZveCB0cmlnZ2VycyBjaGFuZ2UgZXZlbnQgb24gRW50ZXJcbiAgICAgICAgICAvLyBIYWNrIGZvciBJRTogaHR0cHM6Ly9naXRodWIuY29tL0VsZW1lRkUvZWxlbWVudC9pc3N1ZXMvMTE3MTBcbiAgICAgICAgICAvLyBEcm9wIHRoaXMgbWV0aG9kIHdoZW4gd2Ugbm8gbG9uZ2VyIHN1cHBvcnRzIElFXG4gICAgICAgICAgaWYgKGtleUNvZGUgPT09IDEzKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSh0YXJnZXQudmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgaGFuZGxlSW5wdXQ6IGZ1bmN0aW9uIGhhbmRsZUlucHV0KHZhbHVlKSB7XG4gICAgICAgICAgdGhpcy51c2VySW5wdXQgPSB2YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgaGFuZGxlQ2hhbmdlOiBmdW5jdGlvbiBoYW5kbGVDaGFuZ2UodmFsdWUpIHtcbiAgICAgICAgICB0aGlzLiRwYXJlbnQuaW50ZXJuYWxDdXJyZW50UGFnZSA9IHRoaXMuJHBhcmVudC5nZXRWYWxpZEN1cnJlbnRQYWdlKHZhbHVlKTtcbiAgICAgICAgICB0aGlzLiRwYXJlbnQuZW1pdENoYW5nZSgpO1xuICAgICAgICAgIHRoaXMudXNlcklucHV0ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIoaCkge1xuICAgICAgICByZXR1cm4gaChcbiAgICAgICAgICAnc3BhbicsXG4gICAgICAgICAgeyAnY2xhc3MnOiAnZWwtcGFnaW5hdGlvbl9fanVtcCcgfSxcbiAgICAgICAgICBbdGhpcy50KCdlbC5wYWdpbmF0aW9uLmdvdG8nKSwgaCgnZWwtaW5wdXQnLCB7XG4gICAgICAgICAgICAnY2xhc3MnOiAnZWwtcGFnaW5hdGlvbl9fZWRpdG9yIGlzLWluLXBhZ2luYXRpb24nLFxuICAgICAgICAgICAgYXR0cnM6IHsgbWluOiAxLFxuICAgICAgICAgICAgICBtYXg6IHRoaXMuJHBhcmVudC5pbnRlcm5hbFBhZ2VDb3VudCxcbiAgICAgICAgICAgICAgdmFsdWU6IHRoaXMudXNlcklucHV0ICE9PSBudWxsID8gdGhpcy51c2VySW5wdXQgOiB0aGlzLiRwYXJlbnQuaW50ZXJuYWxDdXJyZW50UGFnZSxcbiAgICAgICAgICAgICAgdHlwZTogJ251bWJlcicsXG4gICAgICAgICAgICAgIGRpc2FibGVkOiB0aGlzLiRwYXJlbnQuZGlzYWJsZWRcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuYXRpdmVPbjoge1xuICAgICAgICAgICAgICAna2V5dXAnOiB0aGlzLmhhbmRsZUtleXVwXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgJ2lucHV0JzogdGhpcy5oYW5kbGVJbnB1dCxcbiAgICAgICAgICAgICAgJ2NoYW5nZSc6IHRoaXMuaGFuZGxlQ2hhbmdlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksIHRoaXMudCgnZWwucGFnaW5hdGlvbi5wYWdlQ2xhc3NpZmllcicpXVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBUb3RhbDoge1xuICAgICAgbWl4aW5zOiBbbG9jYWxlX2RlZmF1bHQuYV0sXG5cbiAgICAgIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKGgpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB0aGlzLiRwYXJlbnQudG90YWwgPT09ICdudW1iZXInID8gaChcbiAgICAgICAgICAnc3BhbicsXG4gICAgICAgICAgeyAnY2xhc3MnOiAnZWwtcGFnaW5hdGlvbl9fdG90YWwnIH0sXG4gICAgICAgICAgW3RoaXMudCgnZWwucGFnaW5hdGlvbi50b3RhbCcsIHsgdG90YWw6IHRoaXMuJHBhcmVudC50b3RhbCB9KV1cbiAgICAgICAgKSA6ICcnO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBQYWdlcjogcGFnZXJcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgaGFuZGxlQ3VycmVudENoYW5nZTogZnVuY3Rpb24gaGFuZGxlQ3VycmVudENoYW5nZSh2YWwpIHtcbiAgICAgIHRoaXMuaW50ZXJuYWxDdXJyZW50UGFnZSA9IHRoaXMuZ2V0VmFsaWRDdXJyZW50UGFnZSh2YWwpO1xuICAgICAgdGhpcy51c2VyQ2hhbmdlUGFnZVNpemUgPSB0cnVlO1xuICAgICAgdGhpcy5lbWl0Q2hhbmdlKCk7XG4gICAgfSxcbiAgICBwcmV2OiBmdW5jdGlvbiBwcmV2KCkge1xuICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHJldHVybjtcbiAgICAgIHZhciBuZXdWYWwgPSB0aGlzLmludGVybmFsQ3VycmVudFBhZ2UgLSAxO1xuICAgICAgdGhpcy5pbnRlcm5hbEN1cnJlbnRQYWdlID0gdGhpcy5nZXRWYWxpZEN1cnJlbnRQYWdlKG5ld1ZhbCk7XG4gICAgICB0aGlzLiRlbWl0KCdwcmV2LWNsaWNrJywgdGhpcy5pbnRlcm5hbEN1cnJlbnRQYWdlKTtcbiAgICAgIHRoaXMuZW1pdENoYW5nZSgpO1xuICAgIH0sXG4gICAgbmV4dDogZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgIGlmICh0aGlzLmRpc2FibGVkKSByZXR1cm47XG4gICAgICB2YXIgbmV3VmFsID0gdGhpcy5pbnRlcm5hbEN1cnJlbnRQYWdlICsgMTtcbiAgICAgIHRoaXMuaW50ZXJuYWxDdXJyZW50UGFnZSA9IHRoaXMuZ2V0VmFsaWRDdXJyZW50UGFnZShuZXdWYWwpO1xuICAgICAgdGhpcy4kZW1pdCgnbmV4dC1jbGljaycsIHRoaXMuaW50ZXJuYWxDdXJyZW50UGFnZSk7XG4gICAgICB0aGlzLmVtaXRDaGFuZ2UoKTtcbiAgICB9LFxuICAgIGdldFZhbGlkQ3VycmVudFBhZ2U6IGZ1bmN0aW9uIGdldFZhbGlkQ3VycmVudFBhZ2UodmFsdWUpIHtcbiAgICAgIHZhbHVlID0gcGFyc2VJbnQodmFsdWUsIDEwKTtcblxuICAgICAgdmFyIGhhdmVQYWdlQ291bnQgPSB0eXBlb2YgdGhpcy5pbnRlcm5hbFBhZ2VDb3VudCA9PT0gJ251bWJlcic7XG5cbiAgICAgIHZhciByZXNldFZhbHVlID0gdm9pZCAwO1xuICAgICAgaWYgKCFoYXZlUGFnZUNvdW50KSB7XG4gICAgICAgIGlmIChpc05hTih2YWx1ZSkgfHwgdmFsdWUgPCAxKSByZXNldFZhbHVlID0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh2YWx1ZSA8IDEpIHtcbiAgICAgICAgICByZXNldFZhbHVlID0gMTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA+IHRoaXMuaW50ZXJuYWxQYWdlQ291bnQpIHtcbiAgICAgICAgICByZXNldFZhbHVlID0gdGhpcy5pbnRlcm5hbFBhZ2VDb3VudDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAocmVzZXRWYWx1ZSA9PT0gdW5kZWZpbmVkICYmIGlzTmFOKHZhbHVlKSkge1xuICAgICAgICByZXNldFZhbHVlID0gMTtcbiAgICAgIH0gZWxzZSBpZiAocmVzZXRWYWx1ZSA9PT0gMCkge1xuICAgICAgICByZXNldFZhbHVlID0gMTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc2V0VmFsdWUgPT09IHVuZGVmaW5lZCA/IHZhbHVlIDogcmVzZXRWYWx1ZTtcbiAgICB9LFxuICAgIGVtaXRDaGFuZ2U6IGZ1bmN0aW9uIGVtaXRDaGFuZ2UoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoX3RoaXMyLmludGVybmFsQ3VycmVudFBhZ2UgIT09IF90aGlzMi5sYXN0RW1pdHRlZFBhZ2UgfHwgX3RoaXMyLnVzZXJDaGFuZ2VQYWdlU2l6ZSkge1xuICAgICAgICAgIF90aGlzMi4kZW1pdCgnY3VycmVudC1jaGFuZ2UnLCBfdGhpczIuaW50ZXJuYWxDdXJyZW50UGFnZSk7XG4gICAgICAgICAgX3RoaXMyLmxhc3RFbWl0dGVkUGFnZSA9IF90aGlzMi5pbnRlcm5hbEN1cnJlbnRQYWdlO1xuICAgICAgICAgIF90aGlzMi51c2VyQ2hhbmdlUGFnZVNpemUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgaW50ZXJuYWxQYWdlQ291bnQ6IGZ1bmN0aW9uIGludGVybmFsUGFnZUNvdW50KCkge1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLnRvdGFsID09PSAnbnVtYmVyJykge1xuICAgICAgICByZXR1cm4gTWF0aC5tYXgoMSwgTWF0aC5jZWlsKHRoaXMudG90YWwgLyB0aGlzLmludGVybmFsUGFnZVNpemUpKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMucGFnZUNvdW50ID09PSAnbnVtYmVyJykge1xuICAgICAgICByZXR1cm4gTWF0aC5tYXgoMSwgdGhpcy5wYWdlQ291bnQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgY3VycmVudFBhZ2U6IHtcbiAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcbiAgICAgIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIodmFsKSB7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxDdXJyZW50UGFnZSA9IHRoaXMuZ2V0VmFsaWRDdXJyZW50UGFnZSh2YWwpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBwYWdlU2l6ZToge1xuICAgICAgaW1tZWRpYXRlOiB0cnVlLFxuICAgICAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcih2YWwpIHtcbiAgICAgICAgdGhpcy5pbnRlcm5hbFBhZ2VTaXplID0gaXNOYU4odmFsKSA/IDEwIDogdmFsO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBpbnRlcm5hbEN1cnJlbnRQYWdlOiB7XG4gICAgICBpbW1lZGlhdGU6IHRydWUsXG4gICAgICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKG5ld1ZhbCkge1xuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6Y3VycmVudFBhZ2UnLCBuZXdWYWwpO1xuICAgICAgICB0aGlzLmxhc3RFbWl0dGVkUGFnZSA9IC0xO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBpbnRlcm5hbFBhZ2VDb3VudDogZnVuY3Rpb24gaW50ZXJuYWxQYWdlQ291bnQobmV3VmFsKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIHZhciBvbGRQYWdlID0gdGhpcy5pbnRlcm5hbEN1cnJlbnRQYWdlO1xuICAgICAgaWYgKG5ld1ZhbCA+IDAgJiYgb2xkUGFnZSA9PT0gMCkge1xuICAgICAgICB0aGlzLmludGVybmFsQ3VycmVudFBhZ2UgPSAxO1xuICAgICAgfSBlbHNlIGlmIChvbGRQYWdlID4gbmV3VmFsKSB7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxDdXJyZW50UGFnZSA9IG5ld1ZhbCA9PT0gMCA/IDEgOiBuZXdWYWw7XG4gICAgICAgIHRoaXMudXNlckNoYW5nZVBhZ2VTaXplICYmIHRoaXMuZW1pdENoYW5nZSgpO1xuICAgICAgfVxuICAgICAgdGhpcy51c2VyQ2hhbmdlUGFnZVNpemUgPSBmYWxzZTtcbiAgICB9XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9wYWdpbmF0aW9uL2luZGV4LmpzXG5cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbnBhZ2luYXRpb24uaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcbiAgVnVlLmNvbXBvbmVudChwYWdpbmF0aW9uLm5hbWUsIHBhZ2luYXRpb24pO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcGFja2FnZXNfcGFnaW5hdGlvbiA9IChwYWdpbmF0aW9uKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvZGlhbG9nL3NyYy9jb21wb25lbnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTYwMTQwZTYyJlxudmFyIGNvbXBvbmVudHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzYwMTQwZTYyX3JlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcInRyYW5zaXRpb25cIixcbiAgICB7XG4gICAgICBhdHRyczogeyBuYW1lOiBcImRpYWxvZy1mYWRlXCIgfSxcbiAgICAgIG9uOiB7IFwiYWZ0ZXItZW50ZXJcIjogX3ZtLmFmdGVyRW50ZXIsIFwiYWZ0ZXItbGVhdmVcIjogX3ZtLmFmdGVyTGVhdmUgfVxuICAgIH0sXG4gICAgW1xuICAgICAgX2MoXG4gICAgICAgIFwiZGl2XCIsXG4gICAgICAgIHtcbiAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgICB2YWx1ZTogX3ZtLnZpc2libGUsXG4gICAgICAgICAgICAgIGV4cHJlc3Npb246IFwidmlzaWJsZVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXSxcbiAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1kaWFsb2dfX3dyYXBwZXJcIixcbiAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICBpZiAoJGV2ZW50LnRhcmdldCAhPT0gJGV2ZW50LmN1cnJlbnRUYXJnZXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBfdm0uaGFuZGxlV3JhcHBlckNsaWNrKCRldmVudClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFtcbiAgICAgICAgICBfYyhcbiAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGtleTogX3ZtLmtleSxcbiAgICAgICAgICAgICAgcmVmOiBcImRpYWxvZ1wiLFxuICAgICAgICAgICAgICBjbGFzczogW1xuICAgICAgICAgICAgICAgIFwiZWwtZGlhbG9nXCIsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgXCJpcy1mdWxsc2NyZWVuXCI6IF92bS5mdWxsc2NyZWVuLFxuICAgICAgICAgICAgICAgICAgXCJlbC1kaWFsb2ctLWNlbnRlclwiOiBfdm0uY2VudGVyXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBfdm0uY3VzdG9tQ2xhc3NcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgc3R5bGU6IF92bS5zdHlsZSxcbiAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICByb2xlOiBcImRpYWxvZ1wiLFxuICAgICAgICAgICAgICAgIFwiYXJpYS1tb2RhbFwiOiBcInRydWVcIixcbiAgICAgICAgICAgICAgICBcImFyaWEtbGFiZWxcIjogX3ZtLnRpdGxlIHx8IFwiZGlhbG9nXCJcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiBcImVsLWRpYWxvZ19faGVhZGVyXCIgfSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBfdm0uX3QoXCJ0aXRsZVwiLCBbXG4gICAgICAgICAgICAgICAgICAgIF9jKFwic3BhblwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLWRpYWxvZ19fdGl0bGVcIiB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KF92bS5fcyhfdm0udGl0bGUpKVxuICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICBfdm0uc2hvd0Nsb3NlXG4gICAgICAgICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1kaWFsb2dfX2hlYWRlcmJ0blwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyB0eXBlOiBcImJ1dHRvblwiLCBcImFyaWEtbGFiZWxcIjogXCJDbG9zZVwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0uaGFuZGxlQ2xvc2UgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJpXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZWwtZGlhbG9nX19jbG9zZSBlbC1pY29uIGVsLWljb24tY2xvc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBfdm0ucmVuZGVyZWRcbiAgICAgICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiBcImVsLWRpYWxvZ19fYm9keVwiIH0sXG4gICAgICAgICAgICAgICAgICAgIFtfdm0uX3QoXCJkZWZhdWx0XCIpXSxcbiAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgIF92bS4kc2xvdHMuZm9vdGVyXG4gICAgICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJlbC1kaWFsb2dfX2Zvb3RlclwiIH0sXG4gICAgICAgICAgICAgICAgICAgIFtfdm0uX3QoXCJmb290ZXJcIildLFxuICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICAgICAgXVxuICAgICAgICAgIClcbiAgICAgICAgXVxuICAgICAgKVxuICAgIF1cbiAgKVxufVxudmFyIGNvbXBvbmVudHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzYwMTQwZTYyX3N0YXRpY1JlbmRlckZucyA9IFtdXG5jb21wb25lbnR2dWVfdHlwZV90ZW1wbGF0ZV9pZF82MDE0MGU2Ml9yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2RpYWxvZy9zcmMvY29tcG9uZW50LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02MDE0MGU2MiZcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcImVsZW1lbnQtdWkvbGliL3V0aWxzL3BvcHVwXCJcbnZhciBwb3B1cF8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKTtcbnZhciBwb3B1cF9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihwb3B1cF8pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiZWxlbWVudC11aS9saWIvbWl4aW5zL21pZ3JhdGluZ1wiXG52YXIgbWlncmF0aW5nXyA9IF9fd2VicGFja19yZXF1aXJlX18oOSk7XG52YXIgbWlncmF0aW5nX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKG1pZ3JhdGluZ18pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiZWxlbWVudC11aS9saWIvbWl4aW5zL2VtaXR0ZXJcIlxudmFyIGVtaXR0ZXJfID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcbnZhciBlbWl0dGVyX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGVtaXR0ZXJfKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvZGlhbG9nL3NyYy9jb21wb25lbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5cblxuXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGNvbXBvbmVudHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG5hbWU6ICdFbERpYWxvZycsXG5cbiAgbWl4aW5zOiBbcG9wdXBfZGVmYXVsdC5hLCBlbWl0dGVyX2RlZmF1bHQuYSwgbWlncmF0aW5nX2RlZmF1bHQuYV0sXG5cbiAgcHJvcHM6IHtcbiAgICB0aXRsZToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJydcbiAgICB9LFxuXG4gICAgbW9kYWw6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSxcblxuICAgIG1vZGFsQXBwZW5kVG9Cb2R5OiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0sXG5cbiAgICBhcHBlbmRUb0JvZHk6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0sXG5cbiAgICBsb2NrU2Nyb2xsOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0sXG5cbiAgICBjbG9zZU9uQ2xpY2tNb2RhbDoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9LFxuXG4gICAgY2xvc2VPblByZXNzRXNjYXBlOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0sXG5cbiAgICBzaG93Q2xvc2U6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSxcblxuICAgIHdpZHRoOiBTdHJpbmcsXG5cbiAgICBmdWxsc2NyZWVuOiBCb29sZWFuLFxuXG4gICAgY3VzdG9tQ2xhc3M6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICcnXG4gICAgfSxcblxuICAgIHRvcDoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJzE1dmgnXG4gICAgfSxcbiAgICBiZWZvcmVDbG9zZTogRnVuY3Rpb24sXG4gICAgY2VudGVyOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9LFxuXG4gICAgZGVzdHJveU9uQ2xvc2U6IEJvb2xlYW5cbiAgfSxcblxuICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjbG9zZWQ6IGZhbHNlLFxuICAgICAga2V5OiAwXG4gICAgfTtcbiAgfSxcblxuXG4gIHdhdGNoOiB7XG4gICAgdmlzaWJsZTogZnVuY3Rpb24gdmlzaWJsZSh2YWwpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIGlmICh2YWwpIHtcbiAgICAgICAgdGhpcy5jbG9zZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy4kZW1pdCgnb3BlbicpO1xuICAgICAgICB0aGlzLiRlbC5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLnVwZGF0ZVBvcHBlcik7XG4gICAgICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfdGhpcy4kcmVmcy5kaWFsb2cuc2Nyb2xsVG9wID0gMDtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh0aGlzLmFwcGVuZFRvQm9keSkge1xuICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy4kZWwpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLiRlbC5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLnVwZGF0ZVBvcHBlcik7XG4gICAgICAgIGlmICghdGhpcy5jbG9zZWQpIHRoaXMuJGVtaXQoJ2Nsb3NlJyk7XG4gICAgICAgIGlmICh0aGlzLmRlc3Ryb3lPbkNsb3NlKSB7XG4gICAgICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMua2V5Kys7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzdHlsZTogZnVuY3Rpb24gc3R5bGUoKSB7XG4gICAgICB2YXIgc3R5bGUgPSB7fTtcbiAgICAgIGlmICghdGhpcy5mdWxsc2NyZWVuKSB7XG4gICAgICAgIHN0eWxlLm1hcmdpblRvcCA9IHRoaXMudG9wO1xuICAgICAgICBpZiAodGhpcy53aWR0aCkge1xuICAgICAgICAgIHN0eWxlLndpZHRoID0gdGhpcy53aWR0aDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHN0eWxlO1xuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0TWlncmF0aW5nQ29uZmlnOiBmdW5jdGlvbiBnZXRNaWdyYXRpbmdDb25maWcoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwcm9wczoge1xuICAgICAgICAgICdzaXplJzogJ3NpemUgaXMgcmVtb3ZlZC4nXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSxcbiAgICBoYW5kbGVXcmFwcGVyQ2xpY2s6IGZ1bmN0aW9uIGhhbmRsZVdyYXBwZXJDbGljaygpIHtcbiAgICAgIGlmICghdGhpcy5jbG9zZU9uQ2xpY2tNb2RhbCkgcmV0dXJuO1xuICAgICAgdGhpcy5oYW5kbGVDbG9zZSgpO1xuICAgIH0sXG4gICAgaGFuZGxlQ2xvc2U6IGZ1bmN0aW9uIGhhbmRsZUNsb3NlKCkge1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLmJlZm9yZUNsb3NlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMuYmVmb3JlQ2xvc2UodGhpcy5oaWRlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgaGlkZTogZnVuY3Rpb24gaGlkZShjYW5jZWwpIHtcbiAgICAgIGlmIChjYW5jZWwgIT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTp2aXNpYmxlJywgZmFsc2UpO1xuICAgICAgICB0aGlzLiRlbWl0KCdjbG9zZScpO1xuICAgICAgICB0aGlzLmNsb3NlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfSxcbiAgICB1cGRhdGVQb3BwZXI6IGZ1bmN0aW9uIHVwZGF0ZVBvcHBlcigpIHtcbiAgICAgIHRoaXMuYnJvYWRjYXN0KCdFbFNlbGVjdERyb3Bkb3duJywgJ3VwZGF0ZVBvcHBlcicpO1xuICAgICAgdGhpcy5icm9hZGNhc3QoJ0VsRHJvcGRvd25NZW51JywgJ3VwZGF0ZVBvcHBlcicpO1xuICAgIH0sXG4gICAgYWZ0ZXJFbnRlcjogZnVuY3Rpb24gYWZ0ZXJFbnRlcigpIHtcbiAgICAgIHRoaXMuJGVtaXQoJ29wZW5lZCcpO1xuICAgIH0sXG4gICAgYWZ0ZXJMZWF2ZTogZnVuY3Rpb24gYWZ0ZXJMZWF2ZSgpIHtcbiAgICAgIHRoaXMuJGVtaXQoJ2Nsb3NlZCcpO1xuICAgIH1cbiAgfSxcblxuICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge1xuICAgIGlmICh0aGlzLnZpc2libGUpIHtcbiAgICAgIHRoaXMucmVuZGVyZWQgPSB0cnVlO1xuICAgICAgdGhpcy5vcGVuKCk7XG4gICAgICBpZiAodGhpcy5hcHBlbmRUb0JvZHkpIHtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLiRlbCk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBkZXN0cm95ZWQ6IGZ1bmN0aW9uIGRlc3Ryb3llZCgpIHtcbiAgICAvLyBpZiBhcHBlbmRUb0JvZHkgaXMgdHJ1ZSwgcmVtb3ZlIERPTSBub2RlIGFmdGVyIGRlc3Ryb3lcbiAgICBpZiAodGhpcy5hcHBlbmRUb0JvZHkgJiYgdGhpcy4kZWwgJiYgdGhpcy4kZWwucGFyZW50Tm9kZSkge1xuICAgICAgdGhpcy4kZWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLiRlbCk7XG4gICAgfVxuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZGlhbG9nL3NyYy9jb21wb25lbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY19jb21wb25lbnR2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoY29tcG9uZW50dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2RpYWxvZy9zcmMvY29tcG9uZW50LnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGNvbXBvbmVudF9jb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIHNyY19jb21wb25lbnR2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIGNvbXBvbmVudHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzYwMTQwZTYyX3JlbmRlcixcbiAgY29tcG9uZW50dnVlX3R5cGVfdGVtcGxhdGVfaWRfNjAxNDBlNjJfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBjb21wb25lbnRfYXBpOyB9XG5jb21wb25lbnRfY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy9kaWFsb2cvc3JjL2NvbXBvbmVudC52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX2NvbXBvbmVudCA9IChjb21wb25lbnRfY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9kaWFsb2cvaW5kZXguanNcblxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuc3JjX2NvbXBvbmVudC5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuICBWdWUuY29tcG9uZW50KHNyY19jb21wb25lbnQubmFtZSwgc3JjX2NvbXBvbmVudCk7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBkaWFsb2cgPSAoc3JjX2NvbXBvbmVudCk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2F1dG9jb21wbGV0ZS9zcmMvYXV0b2NvbXBsZXRlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xNTJmMmVlNiZcbnZhciBhdXRvY29tcGxldGV2dWVfdHlwZV90ZW1wbGF0ZV9pZF8xNTJmMmVlNl9yZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICB7XG4gICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcImNsaWNrb3V0c2lkZVwiLFxuICAgICAgICAgIHJhd05hbWU6IFwidi1jbGlja291dHNpZGVcIixcbiAgICAgICAgICB2YWx1ZTogX3ZtLmNsb3NlLFxuICAgICAgICAgIGV4cHJlc3Npb246IFwiY2xvc2VcIlxuICAgICAgICB9XG4gICAgICBdLFxuICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtYXV0b2NvbXBsZXRlXCIsXG4gICAgICBhdHRyczoge1xuICAgICAgICBcImFyaWEtaGFzcG9wdXBcIjogXCJsaXN0Ym94XCIsXG4gICAgICAgIHJvbGU6IFwiY29tYm9ib3hcIixcbiAgICAgICAgXCJhcmlhLWV4cGFuZGVkXCI6IF92bS5zdWdnZXN0aW9uVmlzaWJsZSxcbiAgICAgICAgXCJhcmlhLW93bnNcIjogX3ZtLmlkXG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICBfYyhcbiAgICAgICAgXCJlbC1pbnB1dFwiLFxuICAgICAgICBfdm0uX2IoXG4gICAgICAgICAge1xuICAgICAgICAgICAgcmVmOiBcImlucHV0XCIsXG4gICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICBpbnB1dDogX3ZtLmhhbmRsZUlucHV0LFxuICAgICAgICAgICAgICBjaGFuZ2U6IF92bS5oYW5kbGVDaGFuZ2UsXG4gICAgICAgICAgICAgIGZvY3VzOiBfdm0uaGFuZGxlRm9jdXMsXG4gICAgICAgICAgICAgIGJsdXI6IF92bS5oYW5kbGVCbHVyLFxuICAgICAgICAgICAgICBjbGVhcjogX3ZtLmhhbmRsZUNsZWFyXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmF0aXZlT246IHtcbiAgICAgICAgICAgICAga2V5ZG93bjogW1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAhKFwiYnV0dG9uXCIgaW4gJGV2ZW50KSAmJlxuICAgICAgICAgICAgICAgICAgICBfdm0uX2soJGV2ZW50LmtleUNvZGUsIFwidXBcIiwgMzgsICRldmVudC5rZXksIFtcbiAgICAgICAgICAgICAgICAgICAgICBcIlVwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgXCJBcnJvd1VwXCJcbiAgICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgICAgICAgIF92bS5oaWdobGlnaHQoX3ZtLmhpZ2hsaWdodGVkSW5kZXggLSAxKVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICEoXCJidXR0b25cIiBpbiAkZXZlbnQpICYmXG4gICAgICAgICAgICAgICAgICAgIF92bS5faygkZXZlbnQua2V5Q29kZSwgXCJkb3duXCIsIDQwLCAkZXZlbnQua2V5LCBbXG4gICAgICAgICAgICAgICAgICAgICAgXCJEb3duXCIsXG4gICAgICAgICAgICAgICAgICAgICAgXCJBcnJvd0Rvd25cIlxuICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgICAgICAgX3ZtLmhpZ2hsaWdodChfdm0uaGlnaGxpZ2h0ZWRJbmRleCArIDEpXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgIShcImJ1dHRvblwiIGluICRldmVudCkgJiZcbiAgICAgICAgICAgICAgICAgICAgX3ZtLl9rKCRldmVudC5rZXlDb2RlLCBcImVudGVyXCIsIDEzLCAkZXZlbnQua2V5LCBcIkVudGVyXCIpXG4gICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0uaGFuZGxlS2V5RW50ZXIoJGV2ZW50KVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICEoXCJidXR0b25cIiBpbiAkZXZlbnQpICYmXG4gICAgICAgICAgICAgICAgICAgIF92bS5faygkZXZlbnQua2V5Q29kZSwgXCJ0YWJcIiwgOSwgJGV2ZW50LmtleSwgXCJUYWJcIilcbiAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS5jbG9zZSgkZXZlbnQpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImVsLWlucHV0XCIsXG4gICAgICAgICAgW192bS4kcHJvcHMsIF92bS4kYXR0cnNdLFxuICAgICAgICAgIGZhbHNlXG4gICAgICAgICksXG4gICAgICAgIFtcbiAgICAgICAgICBfdm0uJHNsb3RzLnByZXBlbmRcbiAgICAgICAgICAgID8gX2MoXCJ0ZW1wbGF0ZVwiLCB7IHNsb3Q6IFwicHJlcGVuZFwiIH0sIFtfdm0uX3QoXCJwcmVwZW5kXCIpXSwgMilcbiAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgX3ZtLiRzbG90cy5hcHBlbmRcbiAgICAgICAgICAgID8gX2MoXCJ0ZW1wbGF0ZVwiLCB7IHNsb3Q6IFwiYXBwZW5kXCIgfSwgW192bS5fdChcImFwcGVuZFwiKV0sIDIpXG4gICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgIF92bS4kc2xvdHMucHJlZml4XG4gICAgICAgICAgICA/IF9jKFwidGVtcGxhdGVcIiwgeyBzbG90OiBcInByZWZpeFwiIH0sIFtfdm0uX3QoXCJwcmVmaXhcIildLCAyKVxuICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICBfdm0uJHNsb3RzLnN1ZmZpeFxuICAgICAgICAgICAgPyBfYyhcInRlbXBsYXRlXCIsIHsgc2xvdDogXCJzdWZmaXhcIiB9LCBbX3ZtLl90KFwic3VmZml4XCIpXSwgMilcbiAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgXSxcbiAgICAgICAgMlxuICAgICAgKSxcbiAgICAgIF9jKFxuICAgICAgICBcImVsLWF1dG9jb21wbGV0ZS1zdWdnZXN0aW9uc1wiLFxuICAgICAgICB7XG4gICAgICAgICAgcmVmOiBcInN1Z2dlc3Rpb25zXCIsXG4gICAgICAgICAgY2xhc3M6IFtfdm0ucG9wcGVyQ2xhc3MgPyBfdm0ucG9wcGVyQ2xhc3MgOiBcIlwiXSxcbiAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgXCJ2aXNpYmxlLWFycm93XCI6IFwiXCIsXG4gICAgICAgICAgICBcInBvcHBlci1vcHRpb25zXCI6IF92bS5wb3BwZXJPcHRpb25zLFxuICAgICAgICAgICAgXCJhcHBlbmQtdG8tYm9keVwiOiBfdm0ucG9wcGVyQXBwZW5kVG9Cb2R5LFxuICAgICAgICAgICAgcGxhY2VtZW50OiBfdm0ucGxhY2VtZW50LFxuICAgICAgICAgICAgaWQ6IF92bS5pZFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgX3ZtLl9sKF92bS5zdWdnZXN0aW9ucywgZnVuY3Rpb24oaXRlbSwgaW5kZXgpIHtcbiAgICAgICAgICByZXR1cm4gX2MoXG4gICAgICAgICAgICBcImxpXCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGtleTogaW5kZXgsXG4gICAgICAgICAgICAgIGNsYXNzOiB7IGhpZ2hsaWdodGVkOiBfdm0uaGlnaGxpZ2h0ZWRJbmRleCA9PT0gaW5kZXggfSxcbiAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICBpZDogX3ZtLmlkICsgXCItaXRlbS1cIiArIGluZGV4LFxuICAgICAgICAgICAgICAgIHJvbGU6IFwib3B0aW9uXCIsXG4gICAgICAgICAgICAgICAgXCJhcmlhLXNlbGVjdGVkXCI6IF92bS5oaWdobGlnaHRlZEluZGV4ID09PSBpbmRleFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgIF92bS5zZWxlY3QoaXRlbSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF92bS5fdChcbiAgICAgICAgICAgICAgICBcImRlZmF1bHRcIixcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBfdm0uX3YoXCJcXG4gICAgICAgIFwiICsgX3ZtLl9zKGl0ZW1bX3ZtLnZhbHVlS2V5XSkgKyBcIlxcbiAgICAgIFwiKVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgeyBpdGVtOiBpdGVtIH1cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIDJcbiAgICAgICAgICApXG4gICAgICAgIH0pLFxuICAgICAgICAwXG4gICAgICApXG4gICAgXSxcbiAgICAxXG4gIClcbn1cbnZhciBhdXRvY29tcGxldGV2dWVfdHlwZV90ZW1wbGF0ZV9pZF8xNTJmMmVlNl9zdGF0aWNSZW5kZXJGbnMgPSBbXVxuYXV0b2NvbXBsZXRldnVlX3R5cGVfdGVtcGxhdGVfaWRfMTUyZjJlZTZfcmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9hdXRvY29tcGxldGUvc3JjL2F1dG9jb21wbGV0ZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MTUyZjJlZTYmXG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJ0aHJvdHRsZS1kZWJvdW5jZS9kZWJvdW5jZVwiXG52YXIgZGVib3VuY2VfID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNyk7XG52YXIgZGVib3VuY2VfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oZGVib3VuY2VfKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcImVsZW1lbnQtdWkvbGliL3V0aWxzL2NsaWNrb3V0c2lkZVwiXG52YXIgY2xpY2tvdXRzaWRlXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTApO1xudmFyIGNsaWNrb3V0c2lkZV9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihjbGlja291dHNpZGVfKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9hdXRvY29tcGxldGUvc3JjL2F1dG9jb21wbGV0ZS1zdWdnZXN0aW9ucy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9Y2QxMGRjZjAmXG52YXIgYXV0b2NvbXBsZXRlX3N1Z2dlc3Rpb25zdnVlX3R5cGVfdGVtcGxhdGVfaWRfY2QxMGRjZjBfcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwidHJhbnNpdGlvblwiLFxuICAgIHsgYXR0cnM6IHsgbmFtZTogXCJlbC16b29tLWluLXRvcFwiIH0sIG9uOiB7IFwiYWZ0ZXItbGVhdmVcIjogX3ZtLmRvRGVzdHJveSB9IH0sXG4gICAgW1xuICAgICAgX2MoXG4gICAgICAgIFwiZGl2XCIsXG4gICAgICAgIHtcbiAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgICB2YWx1ZTogX3ZtLnNob3dQb3BwZXIsXG4gICAgICAgICAgICAgIGV4cHJlc3Npb246IFwic2hvd1BvcHBlclwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXSxcbiAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1hdXRvY29tcGxldGUtc3VnZ2VzdGlvbiBlbC1wb3BwZXJcIixcbiAgICAgICAgICBjbGFzczoge1xuICAgICAgICAgICAgXCJpcy1sb2FkaW5nXCI6ICFfdm0ucGFyZW50LmhpZGVMb2FkaW5nICYmIF92bS5wYXJlbnQubG9hZGluZ1xuICAgICAgICAgIH0sXG4gICAgICAgICAgc3R5bGU6IHsgd2lkdGg6IF92bS5kcm9wZG93bldpZHRoIH0sXG4gICAgICAgICAgYXR0cnM6IHsgcm9sZTogXCJyZWdpb25cIiB9XG4gICAgICAgIH0sXG4gICAgICAgIFtcbiAgICAgICAgICBfYyhcbiAgICAgICAgICAgIFwiZWwtc2Nyb2xsYmFyXCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgdGFnOiBcInVsXCIsXG4gICAgICAgICAgICAgICAgXCJ3cmFwLWNsYXNzXCI6IFwiZWwtYXV0b2NvbXBsZXRlLXN1Z2dlc3Rpb25fX3dyYXBcIixcbiAgICAgICAgICAgICAgICBcInZpZXctY2xhc3NcIjogXCJlbC1hdXRvY29tcGxldGUtc3VnZ2VzdGlvbl9fbGlzdFwiXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICFfdm0ucGFyZW50LmhpZGVMb2FkaW5nICYmIF92bS5wYXJlbnQubG9hZGluZ1xuICAgICAgICAgICAgICAgID8gX2MoXCJsaVwiLCBbX2MoXCJpXCIsIHsgc3RhdGljQ2xhc3M6IFwiZWwtaWNvbi1sb2FkaW5nXCIgfSldKVxuICAgICAgICAgICAgICAgIDogX3ZtLl90KFwiZGVmYXVsdFwiKVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIDJcbiAgICAgICAgICApXG4gICAgICAgIF0sXG4gICAgICAgIDFcbiAgICAgIClcbiAgICBdXG4gIClcbn1cbnZhciBhdXRvY29tcGxldGVfc3VnZ2VzdGlvbnN2dWVfdHlwZV90ZW1wbGF0ZV9pZF9jZDEwZGNmMF9zdGF0aWNSZW5kZXJGbnMgPSBbXVxuYXV0b2NvbXBsZXRlX3N1Z2dlc3Rpb25zdnVlX3R5cGVfdGVtcGxhdGVfaWRfY2QxMGRjZjBfcmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9hdXRvY29tcGxldGUvc3JjL2F1dG9jb21wbGV0ZS1zdWdnZXN0aW9ucy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9Y2QxMGRjZjAmXG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJlbGVtZW50LXVpL2xpYi91dGlscy92dWUtcG9wcGVyXCJcbnZhciB2dWVfcG9wcGVyXyA9IF9fd2VicGFja19yZXF1aXJlX18oNSk7XG52YXIgdnVlX3BvcHBlcl9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubih2dWVfcG9wcGVyXyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJlbGVtZW50LXVpL2xpYi9zY3JvbGxiYXJcIlxudmFyIHNjcm9sbGJhcl8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4KTtcbnZhciBzY3JvbGxiYXJfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oc2Nyb2xsYmFyXyk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2F1dG9jb21wbGV0ZS9zcmMvYXV0b2NvbXBsZXRlLXN1Z2dlc3Rpb25zLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cblxuXG5cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgYXV0b2NvbXBsZXRlX3N1Z2dlc3Rpb25zdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgY29tcG9uZW50czogeyBFbFNjcm9sbGJhcjogc2Nyb2xsYmFyX2RlZmF1bHQuYSB9LFxuICBtaXhpbnM6IFt2dWVfcG9wcGVyX2RlZmF1bHQuYSwgZW1pdHRlcl9kZWZhdWx0LmFdLFxuXG4gIGNvbXBvbmVudE5hbWU6ICdFbEF1dG9jb21wbGV0ZVN1Z2dlc3Rpb25zJyxcblxuICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBwYXJlbnQ6IHRoaXMuJHBhcmVudCxcbiAgICAgIGRyb3Bkb3duV2lkdGg6ICcnXG4gICAgfTtcbiAgfSxcblxuXG4gIHByb3BzOiB7XG4gICAgb3B0aW9uczoge1xuICAgICAgZGVmYXVsdDogZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZ3B1QWNjZWxlcmF0aW9uOiBmYWxzZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0sXG4gICAgaWQ6IFN0cmluZ1xuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBzZWxlY3Q6IGZ1bmN0aW9uIHNlbGVjdChpdGVtKSB7XG4gICAgICB0aGlzLmRpc3BhdGNoKCdFbEF1dG9jb21wbGV0ZScsICdpdGVtLWNsaWNrJywgaXRlbSk7XG4gICAgfVxuICB9LFxuXG4gIHVwZGF0ZWQ6IGZ1bmN0aW9uIHVwZGF0ZWQoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uIChfKSB7XG4gICAgICBfdGhpcy5wb3BwZXJKUyAmJiBfdGhpcy51cGRhdGVQb3BwZXIoKTtcbiAgICB9KTtcbiAgfSxcbiAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCgpIHtcbiAgICB0aGlzLiRwYXJlbnQucG9wcGVyRWxtID0gdGhpcy5wb3BwZXJFbG0gPSB0aGlzLiRlbDtcbiAgICB0aGlzLnJlZmVyZW5jZUVsbSA9IHRoaXMuJHBhcmVudC4kcmVmcy5pbnB1dC4kcmVmcy5pbnB1dCB8fCB0aGlzLiRwYXJlbnQuJHJlZnMuaW5wdXQuJHJlZnMudGV4dGFyZWE7XG4gICAgdGhpcy5yZWZlcmVuY2VMaXN0ID0gdGhpcy4kZWwucXVlcnlTZWxlY3RvcignLmVsLWF1dG9jb21wbGV0ZS1zdWdnZXN0aW9uX19saXN0Jyk7XG4gICAgdGhpcy5yZWZlcmVuY2VMaXN0LnNldEF0dHJpYnV0ZSgncm9sZScsICdsaXN0Ym94Jyk7XG4gICAgdGhpcy5yZWZlcmVuY2VMaXN0LnNldEF0dHJpYnV0ZSgnaWQnLCB0aGlzLmlkKTtcbiAgfSxcbiAgY3JlYXRlZDogZnVuY3Rpb24gY3JlYXRlZCgpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIHRoaXMuJG9uKCd2aXNpYmxlJywgZnVuY3Rpb24gKHZhbCwgaW5wdXRXaWR0aCkge1xuICAgICAgX3RoaXMyLmRyb3Bkb3duV2lkdGggPSBpbnB1dFdpZHRoICsgJ3B4JztcbiAgICAgIF90aGlzMi5zaG93UG9wcGVyID0gdmFsO1xuICAgIH0pO1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvYXV0b2NvbXBsZXRlL3NyYy9hdXRvY29tcGxldGUtc3VnZ2VzdGlvbnMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY19hdXRvY29tcGxldGVfc3VnZ2VzdGlvbnN2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoYXV0b2NvbXBsZXRlX3N1Z2dlc3Rpb25zdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2F1dG9jb21wbGV0ZS9zcmMvYXV0b2NvbXBsZXRlLXN1Z2dlc3Rpb25zLnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGF1dG9jb21wbGV0ZV9zdWdnZXN0aW9uc19jb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIHNyY19hdXRvY29tcGxldGVfc3VnZ2VzdGlvbnN2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIGF1dG9jb21wbGV0ZV9zdWdnZXN0aW9uc3Z1ZV90eXBlX3RlbXBsYXRlX2lkX2NkMTBkY2YwX3JlbmRlcixcbiAgYXV0b2NvbXBsZXRlX3N1Z2dlc3Rpb25zdnVlX3R5cGVfdGVtcGxhdGVfaWRfY2QxMGRjZjBfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBhdXRvY29tcGxldGVfc3VnZ2VzdGlvbnNfYXBpOyB9XG5hdXRvY29tcGxldGVfc3VnZ2VzdGlvbnNfY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy9hdXRvY29tcGxldGUvc3JjL2F1dG9jb21wbGV0ZS1zdWdnZXN0aW9ucy52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgYXV0b2NvbXBsZXRlX3N1Z2dlc3Rpb25zID0gKGF1dG9jb21wbGV0ZV9zdWdnZXN0aW9uc19jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiZWxlbWVudC11aS9saWIvbWl4aW5zL2ZvY3VzXCJcbnZhciBmb2N1c18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzKTtcbnZhciBmb2N1c19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihmb2N1c18pO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9hdXRvY29tcGxldGUvc3JjL2F1dG9jb21wbGV0ZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuXG5cblxuXG5cblxuXG5cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgYXV0b2NvbXBsZXRldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbmFtZTogJ0VsQXV0b2NvbXBsZXRlJyxcblxuICBtaXhpbnM6IFtlbWl0dGVyX2RlZmF1bHQuYSwgZm9jdXNfZGVmYXVsdCgpKCdpbnB1dCcpLCBtaWdyYXRpbmdfZGVmYXVsdC5hXSxcblxuICBpbmhlcml0QXR0cnM6IGZhbHNlLFxuXG4gIGNvbXBvbmVudE5hbWU6ICdFbEF1dG9jb21wbGV0ZScsXG5cbiAgY29tcG9uZW50czoge1xuICAgIEVsSW5wdXQ6IGlucHV0X2RlZmF1bHQuYSxcbiAgICBFbEF1dG9jb21wbGV0ZVN1Z2dlc3Rpb25zOiBhdXRvY29tcGxldGVfc3VnZ2VzdGlvbnNcbiAgfSxcblxuICBkaXJlY3RpdmVzOiB7IENsaWNrb3V0c2lkZTogY2xpY2tvdXRzaWRlX2RlZmF1bHQuYSB9LFxuXG4gIHByb3BzOiB7XG4gICAgdmFsdWVLZXk6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICd2YWx1ZSdcbiAgICB9LFxuICAgIHBvcHBlckNsYXNzOiBTdHJpbmcsXG4gICAgcG9wcGVyT3B0aW9uczogT2JqZWN0LFxuICAgIHBsYWNlaG9sZGVyOiBTdHJpbmcsXG4gICAgY2xlYXJhYmxlOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9LFxuICAgIGRpc2FibGVkOiBCb29sZWFuLFxuICAgIG5hbWU6IFN0cmluZyxcbiAgICBzaXplOiBTdHJpbmcsXG4gICAgdmFsdWU6IFN0cmluZyxcbiAgICBtYXhsZW5ndGg6IE51bWJlcixcbiAgICBtaW5sZW5ndGg6IE51bWJlcixcbiAgICBhdXRvZm9jdXM6IEJvb2xlYW4sXG4gICAgZmV0Y2hTdWdnZXN0aW9uczogRnVuY3Rpb24sXG4gICAgdHJpZ2dlck9uRm9jdXM6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSxcbiAgICBjdXN0b21JdGVtOiBTdHJpbmcsXG4gICAgc2VsZWN0V2hlblVubWF0Y2hlZDoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSxcbiAgICBwcmVmaXhJY29uOiBTdHJpbmcsXG4gICAgc3VmZml4SWNvbjogU3RyaW5nLFxuICAgIGxhYmVsOiBTdHJpbmcsXG4gICAgZGVib3VuY2U6IHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGRlZmF1bHQ6IDMwMFxuICAgIH0sXG4gICAgcGxhY2VtZW50OiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnYm90dG9tLXN0YXJ0J1xuICAgIH0sXG4gICAgaGlkZUxvYWRpbmc6IEJvb2xlYW4sXG4gICAgcG9wcGVyQXBwZW5kVG9Cb2R5OiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0sXG4gICAgaGlnaGxpZ2h0Rmlyc3RJdGVtOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9XG4gIH0sXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFjdGl2YXRlZDogZmFsc2UsXG4gICAgICBzdWdnZXN0aW9uczogW10sXG4gICAgICBsb2FkaW5nOiBmYWxzZSxcbiAgICAgIGhpZ2hsaWdodGVkSW5kZXg6IC0xLFxuICAgICAgc3VnZ2VzdGlvbkRpc2FibGVkOiBmYWxzZVxuICAgIH07XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzdWdnZXN0aW9uVmlzaWJsZTogZnVuY3Rpb24gc3VnZ2VzdGlvblZpc2libGUoKSB7XG4gICAgICB2YXIgc3VnZ2VzdGlvbnMgPSB0aGlzLnN1Z2dlc3Rpb25zO1xuICAgICAgdmFyIGlzVmFsaWREYXRhID0gQXJyYXkuaXNBcnJheShzdWdnZXN0aW9ucykgJiYgc3VnZ2VzdGlvbnMubGVuZ3RoID4gMDtcbiAgICAgIHJldHVybiAoaXNWYWxpZERhdGEgfHwgdGhpcy5sb2FkaW5nKSAmJiB0aGlzLmFjdGl2YXRlZDtcbiAgICB9LFxuICAgIGlkOiBmdW5jdGlvbiBpZCgpIHtcbiAgICAgIHJldHVybiAnZWwtYXV0b2NvbXBsZXRlLScgKyBPYmplY3QodXRpbF9bXCJnZW5lcmF0ZUlkXCJdKSgpO1xuICAgIH1cbiAgfSxcbiAgd2F0Y2g6IHtcbiAgICBzdWdnZXN0aW9uVmlzaWJsZTogZnVuY3Rpb24gc3VnZ2VzdGlvblZpc2libGUodmFsKSB7XG4gICAgICB2YXIgJGlucHV0ID0gdGhpcy5nZXRJbnB1dCgpO1xuICAgICAgaWYgKCRpbnB1dCkge1xuICAgICAgICB0aGlzLmJyb2FkY2FzdCgnRWxBdXRvY29tcGxldGVTdWdnZXN0aW9ucycsICd2aXNpYmxlJywgW3ZhbCwgJGlucHV0Lm9mZnNldFdpZHRoXSk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBtZXRob2RzOiB7XG4gICAgZ2V0TWlncmF0aW5nQ29uZmlnOiBmdW5jdGlvbiBnZXRNaWdyYXRpbmdDb25maWcoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwcm9wczoge1xuICAgICAgICAgICdjdXN0b20taXRlbSc6ICdjdXN0b20taXRlbSBpcyByZW1vdmVkLCB1c2Ugc2NvcGVkIHNsb3QgaW5zdGVhZC4nLFxuICAgICAgICAgICdwcm9wcyc6ICdwcm9wcyBpcyByZW1vdmVkLCB1c2UgdmFsdWUta2V5IGluc3RlYWQuJ1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0sXG4gICAgZ2V0RGF0YTogZnVuY3Rpb24gZ2V0RGF0YShxdWVyeVN0cmluZykge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgaWYgKHRoaXMuc3VnZ2VzdGlvbkRpc2FibGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICB0aGlzLmZldGNoU3VnZ2VzdGlvbnMocXVlcnlTdHJpbmcsIGZ1bmN0aW9uIChzdWdnZXN0aW9ucykge1xuICAgICAgICBfdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIGlmIChfdGhpcy5zdWdnZXN0aW9uRGlzYWJsZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc3VnZ2VzdGlvbnMpKSB7XG4gICAgICAgICAgX3RoaXMuc3VnZ2VzdGlvbnMgPSBzdWdnZXN0aW9ucztcbiAgICAgICAgICBfdGhpcy5oaWdobGlnaHRlZEluZGV4ID0gX3RoaXMuaGlnaGxpZ2h0Rmlyc3RJdGVtID8gMCA6IC0xO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tFbGVtZW50IEVycm9yXVtBdXRvY29tcGxldGVdYXV0b2NvbXBsZXRlIHN1Z2dlc3Rpb25zIG11c3QgYmUgYW4gYXJyYXknKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSxcbiAgICBoYW5kbGVJbnB1dDogZnVuY3Rpb24gaGFuZGxlSW5wdXQodmFsdWUpIHtcbiAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgdmFsdWUpO1xuICAgICAgdGhpcy5zdWdnZXN0aW9uRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgIGlmICghdGhpcy50cmlnZ2VyT25Gb2N1cyAmJiAhdmFsdWUpIHtcbiAgICAgICAgdGhpcy5zdWdnZXN0aW9uRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnN1Z2dlc3Rpb25zID0gW107XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuZGVib3VuY2VkR2V0RGF0YSh2YWx1ZSk7XG4gICAgfSxcbiAgICBoYW5kbGVDaGFuZ2U6IGZ1bmN0aW9uIGhhbmRsZUNoYW5nZSh2YWx1ZSkge1xuICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgdmFsdWUpO1xuICAgIH0sXG4gICAgaGFuZGxlRm9jdXM6IGZ1bmN0aW9uIGhhbmRsZUZvY3VzKGV2ZW50KSB7XG4gICAgICB0aGlzLmFjdGl2YXRlZCA9IHRydWU7XG4gICAgICB0aGlzLiRlbWl0KCdmb2N1cycsIGV2ZW50KTtcbiAgICAgIGlmICh0aGlzLnRyaWdnZXJPbkZvY3VzKSB7XG4gICAgICAgIHRoaXMuZGVib3VuY2VkR2V0RGF0YSh0aGlzLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGhhbmRsZUJsdXI6IGZ1bmN0aW9uIGhhbmRsZUJsdXIoZXZlbnQpIHtcbiAgICAgIHRoaXMuJGVtaXQoJ2JsdXInLCBldmVudCk7XG4gICAgfSxcbiAgICBoYW5kbGVDbGVhcjogZnVuY3Rpb24gaGFuZGxlQ2xlYXIoKSB7XG4gICAgICB0aGlzLmFjdGl2YXRlZCA9IGZhbHNlO1xuICAgICAgdGhpcy4kZW1pdCgnY2xlYXInKTtcbiAgICB9LFxuICAgIGNsb3NlOiBmdW5jdGlvbiBjbG9zZShlKSB7XG4gICAgICB0aGlzLmFjdGl2YXRlZCA9IGZhbHNlO1xuICAgIH0sXG4gICAgaGFuZGxlS2V5RW50ZXI6IGZ1bmN0aW9uIGhhbmRsZUtleUVudGVyKGUpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICBpZiAodGhpcy5zdWdnZXN0aW9uVmlzaWJsZSAmJiB0aGlzLmhpZ2hsaWdodGVkSW5kZXggPj0gMCAmJiB0aGlzLmhpZ2hsaWdodGVkSW5kZXggPCB0aGlzLnN1Z2dlc3Rpb25zLmxlbmd0aCkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuc2VsZWN0KHRoaXMuc3VnZ2VzdGlvbnNbdGhpcy5oaWdobGlnaHRlZEluZGV4XSk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0V2hlblVubWF0Y2hlZCkge1xuICAgICAgICB0aGlzLiRlbWl0KCdzZWxlY3QnLCB7IHZhbHVlOiB0aGlzLnZhbHVlIH0pO1xuICAgICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoXykge1xuICAgICAgICAgIF90aGlzMi5zdWdnZXN0aW9ucyA9IFtdO1xuICAgICAgICAgIF90aGlzMi5oaWdobGlnaHRlZEluZGV4ID0gLTE7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gICAgc2VsZWN0OiBmdW5jdGlvbiBzZWxlY3QoaXRlbSkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgaXRlbVt0aGlzLnZhbHVlS2V5XSk7XG4gICAgICB0aGlzLiRlbWl0KCdzZWxlY3QnLCBpdGVtKTtcbiAgICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uIChfKSB7XG4gICAgICAgIF90aGlzMy5zdWdnZXN0aW9ucyA9IFtdO1xuICAgICAgICBfdGhpczMuaGlnaGxpZ2h0ZWRJbmRleCA9IC0xO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBoaWdobGlnaHQ6IGZ1bmN0aW9uIGhpZ2hsaWdodChpbmRleCkge1xuICAgICAgaWYgKCF0aGlzLnN1Z2dlc3Rpb25WaXNpYmxlIHx8IHRoaXMubG9hZGluZykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICAgIHRoaXMuaGlnaGxpZ2h0ZWRJbmRleCA9IC0xO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoaW5kZXggPj0gdGhpcy5zdWdnZXN0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgaW5kZXggPSB0aGlzLnN1Z2dlc3Rpb25zLmxlbmd0aCAtIDE7XG4gICAgICB9XG4gICAgICB2YXIgc3VnZ2VzdGlvbiA9IHRoaXMuJHJlZnMuc3VnZ2VzdGlvbnMuJGVsLnF1ZXJ5U2VsZWN0b3IoJy5lbC1hdXRvY29tcGxldGUtc3VnZ2VzdGlvbl9fd3JhcCcpO1xuICAgICAgdmFyIHN1Z2dlc3Rpb25MaXN0ID0gc3VnZ2VzdGlvbi5xdWVyeVNlbGVjdG9yQWxsKCcuZWwtYXV0b2NvbXBsZXRlLXN1Z2dlc3Rpb25fX2xpc3QgbGknKTtcblxuICAgICAgdmFyIGhpZ2hsaWdodEl0ZW0gPSBzdWdnZXN0aW9uTGlzdFtpbmRleF07XG4gICAgICB2YXIgc2Nyb2xsVG9wID0gc3VnZ2VzdGlvbi5zY3JvbGxUb3A7XG4gICAgICB2YXIgb2Zmc2V0VG9wID0gaGlnaGxpZ2h0SXRlbS5vZmZzZXRUb3A7XG5cbiAgICAgIGlmIChvZmZzZXRUb3AgKyBoaWdobGlnaHRJdGVtLnNjcm9sbEhlaWdodCA+IHNjcm9sbFRvcCArIHN1Z2dlc3Rpb24uY2xpZW50SGVpZ2h0KSB7XG4gICAgICAgIHN1Z2dlc3Rpb24uc2Nyb2xsVG9wICs9IGhpZ2hsaWdodEl0ZW0uc2Nyb2xsSGVpZ2h0O1xuICAgICAgfVxuICAgICAgaWYgKG9mZnNldFRvcCA8IHNjcm9sbFRvcCkge1xuICAgICAgICBzdWdnZXN0aW9uLnNjcm9sbFRvcCAtPSBoaWdobGlnaHRJdGVtLnNjcm9sbEhlaWdodDtcbiAgICAgIH1cbiAgICAgIHRoaXMuaGlnaGxpZ2h0ZWRJbmRleCA9IGluZGV4O1xuICAgICAgdmFyICRpbnB1dCA9IHRoaXMuZ2V0SW5wdXQoKTtcbiAgICAgICRpbnB1dC5zZXRBdHRyaWJ1dGUoJ2FyaWEtYWN0aXZlZGVzY2VuZGFudCcsIHRoaXMuaWQgKyAnLWl0ZW0tJyArIHRoaXMuaGlnaGxpZ2h0ZWRJbmRleCk7XG4gICAgfSxcbiAgICBnZXRJbnB1dDogZnVuY3Rpb24gZ2V0SW5wdXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcmVmcy5pbnB1dC5nZXRJbnB1dCgpO1xuICAgIH1cbiAgfSxcbiAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCgpIHtcbiAgICB2YXIgX3RoaXM0ID0gdGhpcztcblxuICAgIHRoaXMuZGVib3VuY2VkR2V0RGF0YSA9IGRlYm91bmNlX2RlZmF1bHQoKSh0aGlzLmRlYm91bmNlLCB0aGlzLmdldERhdGEpO1xuICAgIHRoaXMuJG9uKCdpdGVtLWNsaWNrJywgZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIF90aGlzNC5zZWxlY3QoaXRlbSk7XG4gICAgfSk7XG4gICAgdmFyICRpbnB1dCA9IHRoaXMuZ2V0SW5wdXQoKTtcbiAgICAkaW5wdXQuc2V0QXR0cmlidXRlKCdyb2xlJywgJ3RleHRib3gnKTtcbiAgICAkaW5wdXQuc2V0QXR0cmlidXRlKCdhcmlhLWF1dG9jb21wbGV0ZScsICdsaXN0Jyk7XG4gICAgJGlucHV0LnNldEF0dHJpYnV0ZSgnYXJpYS1jb250cm9scycsICdpZCcpO1xuICAgICRpbnB1dC5zZXRBdHRyaWJ1dGUoJ2FyaWEtYWN0aXZlZGVzY2VuZGFudCcsIHRoaXMuaWQgKyAnLWl0ZW0tJyArIHRoaXMuaGlnaGxpZ2h0ZWRJbmRleCk7XG4gIH0sXG4gIGJlZm9yZURlc3Ryb3k6IGZ1bmN0aW9uIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgdGhpcy4kcmVmcy5zdWdnZXN0aW9ucy4kZGVzdHJveSgpO1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvYXV0b2NvbXBsZXRlL3NyYy9hdXRvY29tcGxldGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY19hdXRvY29tcGxldGV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoYXV0b2NvbXBsZXRldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2F1dG9jb21wbGV0ZS9zcmMvYXV0b2NvbXBsZXRlLnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGF1dG9jb21wbGV0ZV9jb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIHNyY19hdXRvY29tcGxldGV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIGF1dG9jb21wbGV0ZXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzE1MmYyZWU2X3JlbmRlcixcbiAgYXV0b2NvbXBsZXRldnVlX3R5cGVfdGVtcGxhdGVfaWRfMTUyZjJlZTZfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBhdXRvY29tcGxldGVfYXBpOyB9XG5hdXRvY29tcGxldGVfY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy9hdXRvY29tcGxldGUvc3JjL2F1dG9jb21wbGV0ZS52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgYXV0b2NvbXBsZXRlID0gKGF1dG9jb21wbGV0ZV9jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2F1dG9jb21wbGV0ZS9pbmRleC5qc1xuXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5hdXRvY29tcGxldGUuaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcbiAgVnVlLmNvbXBvbmVudChhdXRvY29tcGxldGUubmFtZSwgYXV0b2NvbXBsZXRlKTtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhY2thZ2VzX2F1dG9jb21wbGV0ZSA9IChhdXRvY29tcGxldGUpO1xuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcImVsZW1lbnQtdWkvbGliL2J1dHRvblwiXG52YXIgYnV0dG9uXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTMpO1xudmFyIGJ1dHRvbl9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihidXR0b25fKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcImVsZW1lbnQtdWkvbGliL2J1dHRvbi1ncm91cFwiXG52YXIgYnV0dG9uX2dyb3VwXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjkpO1xudmFyIGJ1dHRvbl9ncm91cF9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihidXR0b25fZ3JvdXBfKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvZHJvcGRvd24vc3JjL2Ryb3Bkb3duLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcblxuXG5cblxuXG5cblxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBkcm9wZG93bnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG5hbWU6ICdFbERyb3Bkb3duJyxcblxuICBjb21wb25lbnROYW1lOiAnRWxEcm9wZG93bicsXG5cbiAgbWl4aW5zOiBbZW1pdHRlcl9kZWZhdWx0LmEsIG1pZ3JhdGluZ19kZWZhdWx0LmFdLFxuXG4gIGRpcmVjdGl2ZXM6IHsgQ2xpY2tvdXRzaWRlOiBjbGlja291dHNpZGVfZGVmYXVsdC5hIH0sXG5cbiAgY29tcG9uZW50czoge1xuICAgIEVsQnV0dG9uOiBidXR0b25fZGVmYXVsdC5hLFxuICAgIEVsQnV0dG9uR3JvdXA6IGJ1dHRvbl9ncm91cF9kZWZhdWx0LmFcbiAgfSxcblxuICBwcm92aWRlOiBmdW5jdGlvbiBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICBkcm9wZG93bjogdGhpc1xuICAgIH07XG4gIH0sXG5cblxuICBwcm9wczoge1xuICAgIHRyaWdnZXI6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdob3ZlcidcbiAgICB9LFxuICAgIHR5cGU6IFN0cmluZyxcbiAgICBzaXplOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnJ1xuICAgIH0sXG4gICAgc3BsaXRCdXR0b246IEJvb2xlYW4sXG4gICAgaGlkZU9uQ2xpY2s6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSxcbiAgICBwbGFjZW1lbnQ6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdib3R0b20tZW5kJ1xuICAgIH0sXG4gICAgdmlzaWJsZUFycm93OiB7XG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSxcbiAgICBzaG93VGltZW91dDoge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZGVmYXVsdDogMjUwXG4gICAgfSxcbiAgICBoaWRlVGltZW91dDoge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZGVmYXVsdDogMTUwXG4gICAgfSxcbiAgICB0YWJpbmRleDoge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZGVmYXVsdDogMFxuICAgIH0sXG4gICAgZGlzYWJsZWQ6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICB0aW1lb3V0OiBudWxsLFxuICAgICAgdmlzaWJsZTogZmFsc2UsXG4gICAgICB0cmlnZ2VyRWxtOiBudWxsLFxuICAgICAgbWVudUl0ZW1zOiBudWxsLFxuICAgICAgbWVudUl0ZW1zQXJyYXk6IG51bGwsXG4gICAgICBkcm9wZG93bkVsbTogbnVsbCxcbiAgICAgIGZvY3VzaW5nOiBmYWxzZSxcbiAgICAgIGxpc3RJZDogJ2Ryb3Bkb3duLW1lbnUtJyArIE9iamVjdCh1dGlsX1tcImdlbmVyYXRlSWRcIl0pKClcbiAgICB9O1xuICB9LFxuXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBkcm9wZG93blNpemU6IGZ1bmN0aW9uIGRyb3Bkb3duU2l6ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNpemUgfHwgKHRoaXMuJEVMRU1FTlQgfHwge30pLnNpemU7XG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7XG4gICAgdGhpcy4kb24oJ21lbnUtaXRlbS1jbGljaycsIHRoaXMuaGFuZGxlTWVudUl0ZW1DbGljayk7XG4gIH0sXG5cblxuICB3YXRjaDoge1xuICAgIHZpc2libGU6IGZ1bmN0aW9uIHZpc2libGUodmFsKSB7XG4gICAgICB0aGlzLmJyb2FkY2FzdCgnRWxEcm9wZG93bk1lbnUnLCAndmlzaWJsZScsIHZhbCk7XG4gICAgICB0aGlzLiRlbWl0KCd2aXNpYmxlLWNoYW5nZScsIHZhbCk7XG4gICAgfSxcbiAgICBmb2N1c2luZzogZnVuY3Rpb24gZm9jdXNpbmcodmFsKSB7XG4gICAgICB2YXIgc2VsZkRlZmluZSA9IHRoaXMuJGVsLnF1ZXJ5U2VsZWN0b3IoJy5lbC1kcm9wZG93bi1zZWxmZGVmaW5lJyk7XG4gICAgICBpZiAoc2VsZkRlZmluZSkge1xuICAgICAgICAvLyDoh6rlrprkuYlcbiAgICAgICAgaWYgKHZhbCkge1xuICAgICAgICAgIHNlbGZEZWZpbmUuY2xhc3NOYW1lICs9ICcgZm9jdXNpbmcnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNlbGZEZWZpbmUuY2xhc3NOYW1lID0gc2VsZkRlZmluZS5jbGFzc05hbWUucmVwbGFjZSgnZm9jdXNpbmcnLCAnJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldE1pZ3JhdGluZ0NvbmZpZzogZnVuY3Rpb24gZ2V0TWlncmF0aW5nQ29uZmlnKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAnbWVudS1hbGlnbic6ICdtZW51LWFsaWduIGlzIHJlbmFtZWQgdG8gcGxhY2VtZW50LidcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9LFxuICAgIHNob3c6IGZ1bmN0aW9uIHNob3coKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICBpZiAodGhpcy5kaXNhYmxlZCkgcmV0dXJuO1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7XG4gICAgICB0aGlzLnRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMudmlzaWJsZSA9IHRydWU7XG4gICAgICB9LCB0aGlzLnRyaWdnZXIgPT09ICdjbGljaycgPyAwIDogdGhpcy5zaG93VGltZW91dCk7XG4gICAgfSxcbiAgICBoaWRlOiBmdW5jdGlvbiBoaWRlKCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIGlmICh0aGlzLmRpc2FibGVkKSByZXR1cm47XG4gICAgICB0aGlzLnJlbW92ZVRhYmluZGV4KCk7XG4gICAgICBpZiAodGhpcy50YWJpbmRleCA+PSAwKSB7XG4gICAgICAgIHRoaXMucmVzZXRUYWJpbmRleCh0aGlzLnRyaWdnZXJFbG0pO1xuICAgICAgfVxuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7XG4gICAgICB0aGlzLnRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMyLnZpc2libGUgPSBmYWxzZTtcbiAgICAgIH0sIHRoaXMudHJpZ2dlciA9PT0gJ2NsaWNrJyA/IDAgOiB0aGlzLmhpZGVUaW1lb3V0KTtcbiAgICB9LFxuICAgIGhhbmRsZUNsaWNrOiBmdW5jdGlvbiBoYW5kbGVDbGljaygpIHtcbiAgICAgIGlmICh0aGlzLmRpc2FibGVkKSByZXR1cm47XG4gICAgICBpZiAodGhpcy52aXNpYmxlKSB7XG4gICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zaG93KCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBoYW5kbGVUcmlnZ2VyS2V5RG93bjogZnVuY3Rpb24gaGFuZGxlVHJpZ2dlcktleURvd24oZXYpIHtcbiAgICAgIHZhciBrZXlDb2RlID0gZXYua2V5Q29kZTtcbiAgICAgIGlmIChbMzgsIDQwXS5pbmRleE9mKGtleUNvZGUpID4gLTEpIHtcbiAgICAgICAgLy8gdXAvZG93blxuICAgICAgICB0aGlzLnJlbW92ZVRhYmluZGV4KCk7XG4gICAgICAgIHRoaXMucmVzZXRUYWJpbmRleCh0aGlzLm1lbnVJdGVtc1swXSk7XG4gICAgICAgIHRoaXMubWVudUl0ZW1zWzBdLmZvY3VzKCk7XG4gICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgfSBlbHNlIGlmIChrZXlDb2RlID09PSAxMykge1xuICAgICAgICAvLyBzcGFjZSBlbnRlcumAieS4rVxuICAgICAgICB0aGlzLmhhbmRsZUNsaWNrKCk7XG4gICAgICB9IGVsc2UgaWYgKFs5LCAyN10uaW5kZXhPZihrZXlDb2RlKSA+IC0xKSB7XG4gICAgICAgIC8vIHRhYiB8fCBlc2NcbiAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBoYW5kbGVJdGVtS2V5RG93bjogZnVuY3Rpb24gaGFuZGxlSXRlbUtleURvd24oZXYpIHtcbiAgICAgIHZhciBrZXlDb2RlID0gZXYua2V5Q29kZTtcbiAgICAgIHZhciB0YXJnZXQgPSBldi50YXJnZXQ7XG4gICAgICB2YXIgY3VycmVudEluZGV4ID0gdGhpcy5tZW51SXRlbXNBcnJheS5pbmRleE9mKHRhcmdldCk7XG4gICAgICB2YXIgbWF4ID0gdGhpcy5tZW51SXRlbXNBcnJheS5sZW5ndGggLSAxO1xuICAgICAgdmFyIG5leHRJbmRleCA9IHZvaWQgMDtcbiAgICAgIGlmIChbMzgsIDQwXS5pbmRleE9mKGtleUNvZGUpID4gLTEpIHtcbiAgICAgICAgLy8gdXAvZG93blxuICAgICAgICBpZiAoa2V5Q29kZSA9PT0gMzgpIHtcbiAgICAgICAgICAvLyB1cFxuICAgICAgICAgIG5leHRJbmRleCA9IGN1cnJlbnRJbmRleCAhPT0gMCA/IGN1cnJlbnRJbmRleCAtIDEgOiAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGRvd25cbiAgICAgICAgICBuZXh0SW5kZXggPSBjdXJyZW50SW5kZXggPCBtYXggPyBjdXJyZW50SW5kZXggKyAxIDogbWF4O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVtb3ZlVGFiaW5kZXgoKTtcbiAgICAgICAgdGhpcy5yZXNldFRhYmluZGV4KHRoaXMubWVudUl0ZW1zW25leHRJbmRleF0pO1xuICAgICAgICB0aGlzLm1lbnVJdGVtc1tuZXh0SW5kZXhdLmZvY3VzKCk7XG4gICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgfSBlbHNlIGlmIChrZXlDb2RlID09PSAxMykge1xuICAgICAgICAvLyBlbnRlcumAieS4rVxuICAgICAgICB0aGlzLnRyaWdnZXJFbG1Gb2N1cygpO1xuICAgICAgICB0YXJnZXQuY2xpY2soKTtcbiAgICAgICAgaWYgKHRoaXMuaGlkZU9uQ2xpY2spIHtcbiAgICAgICAgICAvLyBjbGlja+WFs+mXrVxuICAgICAgICAgIHRoaXMudmlzaWJsZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKFs5LCAyN10uaW5kZXhPZihrZXlDb2RlKSA+IC0xKSB7XG4gICAgICAgIC8vIHRhYiAvLyBlc2NcbiAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICAgIHRoaXMudHJpZ2dlckVsbUZvY3VzKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICByZXNldFRhYmluZGV4OiBmdW5jdGlvbiByZXNldFRhYmluZGV4KGVsZSkge1xuICAgICAgLy8g5LiL5qyhdGFi5pe257uE5Lu26IGa54Sm5YWD57SgXG4gICAgICB0aGlzLnJlbW92ZVRhYmluZGV4KCk7XG4gICAgICBlbGUuc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsICcwJyk7IC8vIOS4i+asoeacn+acm+eahOiBmueEpuWFg+e0oFxuICAgIH0sXG4gICAgcmVtb3ZlVGFiaW5kZXg6IGZ1bmN0aW9uIHJlbW92ZVRhYmluZGV4KCkge1xuICAgICAgdGhpcy50cmlnZ2VyRWxtLnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAnLTEnKTtcbiAgICAgIHRoaXMubWVudUl0ZW1zQXJyYXkuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICBpdGVtLnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAnLTEnKTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgaW5pdEFyaWE6IGZ1bmN0aW9uIGluaXRBcmlhKCkge1xuICAgICAgdGhpcy5kcm9wZG93bkVsbS5zZXRBdHRyaWJ1dGUoJ2lkJywgdGhpcy5saXN0SWQpO1xuICAgICAgdGhpcy50cmlnZ2VyRWxtLnNldEF0dHJpYnV0ZSgnYXJpYS1oYXNwb3B1cCcsICdsaXN0Jyk7XG4gICAgICB0aGlzLnRyaWdnZXJFbG0uc2V0QXR0cmlidXRlKCdhcmlhLWNvbnRyb2xzJywgdGhpcy5saXN0SWQpO1xuXG4gICAgICBpZiAoIXRoaXMuc3BsaXRCdXR0b24pIHtcbiAgICAgICAgLy8g6Ieq5a6a5LmJXG4gICAgICAgIHRoaXMudHJpZ2dlckVsbS5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAnYnV0dG9uJyk7XG4gICAgICAgIHRoaXMudHJpZ2dlckVsbS5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgdGhpcy50YWJpbmRleCk7XG4gICAgICAgIHRoaXMudHJpZ2dlckVsbS5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgKHRoaXMudHJpZ2dlckVsbS5nZXRBdHRyaWJ1dGUoJ2NsYXNzJykgfHwgJycpICsgJyBlbC1kcm9wZG93bi1zZWxmZGVmaW5lJyk7IC8vIOaOp+WItlxuICAgICAgfVxuICAgIH0sXG4gICAgaW5pdEV2ZW50OiBmdW5jdGlvbiBpbml0RXZlbnQoKSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgICAgdmFyIHRyaWdnZXIgPSB0aGlzLnRyaWdnZXIsXG4gICAgICAgICAgc2hvdyA9IHRoaXMuc2hvdyxcbiAgICAgICAgICBoaWRlID0gdGhpcy5oaWRlLFxuICAgICAgICAgIGhhbmRsZUNsaWNrID0gdGhpcy5oYW5kbGVDbGljayxcbiAgICAgICAgICBzcGxpdEJ1dHRvbiA9IHRoaXMuc3BsaXRCdXR0b24sXG4gICAgICAgICAgaGFuZGxlVHJpZ2dlcktleURvd24gPSB0aGlzLmhhbmRsZVRyaWdnZXJLZXlEb3duLFxuICAgICAgICAgIGhhbmRsZUl0ZW1LZXlEb3duID0gdGhpcy5oYW5kbGVJdGVtS2V5RG93bjtcblxuICAgICAgdGhpcy50cmlnZ2VyRWxtID0gc3BsaXRCdXR0b24gPyB0aGlzLiRyZWZzLnRyaWdnZXIuJGVsIDogdGhpcy4kc2xvdHMuZGVmYXVsdFswXS5lbG07XG5cbiAgICAgIHZhciBkcm9wZG93bkVsbSA9IHRoaXMuZHJvcGRvd25FbG07XG5cbiAgICAgIHRoaXMudHJpZ2dlckVsbS5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgaGFuZGxlVHJpZ2dlcktleURvd24pOyAvLyB0cmlnZ2VyRWxtIGtleWRvd25cbiAgICAgIGRyb3Bkb3duRWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBoYW5kbGVJdGVtS2V5RG93biwgdHJ1ZSk7IC8vIGl0ZW0ga2V5ZG93blxuICAgICAgLy8g5o6n5Yi26Ieq5a6a5LmJ5YWD57Sg55qE5qC35byPXG4gICAgICBpZiAoIXNwbGl0QnV0dG9uKSB7XG4gICAgICAgIHRoaXMudHJpZ2dlckVsbS5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfdGhpczMuZm9jdXNpbmcgPSB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy50cmlnZ2VyRWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgX3RoaXMzLmZvY3VzaW5nID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnRyaWdnZXJFbG0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgX3RoaXMzLmZvY3VzaW5nID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKHRyaWdnZXIgPT09ICdob3ZlcicpIHtcbiAgICAgICAgdGhpcy50cmlnZ2VyRWxtLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZW50ZXInLCBzaG93KTtcbiAgICAgICAgdGhpcy50cmlnZ2VyRWxtLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbGVhdmUnLCBoaWRlKTtcbiAgICAgICAgZHJvcGRvd25FbG0uYWRkRXZlbnRMaXN0ZW5lcignbW91c2VlbnRlcicsIHNob3cpO1xuICAgICAgICBkcm9wZG93bkVsbS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWxlYXZlJywgaGlkZSk7XG4gICAgICB9IGVsc2UgaWYgKHRyaWdnZXIgPT09ICdjbGljaycpIHtcbiAgICAgICAgdGhpcy50cmlnZ2VyRWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaGFuZGxlQ2xpY2spO1xuICAgICAgfVxuICAgIH0sXG4gICAgaGFuZGxlTWVudUl0ZW1DbGljazogZnVuY3Rpb24gaGFuZGxlTWVudUl0ZW1DbGljayhjb21tYW5kLCBpbnN0YW5jZSkge1xuICAgICAgaWYgKHRoaXMuaGlkZU9uQ2xpY2spIHtcbiAgICAgICAgdGhpcy52aXNpYmxlID0gZmFsc2U7XG4gICAgICB9XG4gICAgICB0aGlzLiRlbWl0KCdjb21tYW5kJywgY29tbWFuZCwgaW5zdGFuY2UpO1xuICAgIH0sXG4gICAgdHJpZ2dlckVsbUZvY3VzOiBmdW5jdGlvbiB0cmlnZ2VyRWxtRm9jdXMoKSB7XG4gICAgICB0aGlzLnRyaWdnZXJFbG0uZm9jdXMgJiYgdGhpcy50cmlnZ2VyRWxtLmZvY3VzKCk7XG4gICAgfSxcbiAgICBpbml0RG9tT3BlcmF0aW9uOiBmdW5jdGlvbiBpbml0RG9tT3BlcmF0aW9uKCkge1xuICAgICAgdGhpcy5kcm9wZG93bkVsbSA9IHRoaXMucG9wcGVyRWxtO1xuICAgICAgdGhpcy5tZW51SXRlbXMgPSB0aGlzLmRyb3Bkb3duRWxtLnF1ZXJ5U2VsZWN0b3JBbGwoXCJbdGFiaW5kZXg9Jy0xJ11cIik7XG4gICAgICB0aGlzLm1lbnVJdGVtc0FycmF5ID0gW10uc2xpY2UuY2FsbCh0aGlzLm1lbnVJdGVtcyk7XG5cbiAgICAgIHRoaXMuaW5pdEV2ZW50KCk7XG4gICAgICB0aGlzLmluaXRBcmlhKCk7XG4gICAgfVxuICB9LFxuXG4gIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKGgpIHtcbiAgICB2YXIgX3RoaXM0ID0gdGhpcztcblxuICAgIHZhciBoaWRlID0gdGhpcy5oaWRlLFxuICAgICAgICBzcGxpdEJ1dHRvbiA9IHRoaXMuc3BsaXRCdXR0b24sXG4gICAgICAgIHR5cGUgPSB0aGlzLnR5cGUsXG4gICAgICAgIGRyb3Bkb3duU2l6ZSA9IHRoaXMuZHJvcGRvd25TaXplLFxuICAgICAgICBkaXNhYmxlZCA9IHRoaXMuZGlzYWJsZWQ7XG5cblxuICAgIHZhciBoYW5kbGVNYWluQnV0dG9uQ2xpY2sgPSBmdW5jdGlvbiBoYW5kbGVNYWluQnV0dG9uQ2xpY2soZXZlbnQpIHtcbiAgICAgIF90aGlzNC4kZW1pdCgnY2xpY2snLCBldmVudCk7XG4gICAgICBoaWRlKCk7XG4gICAgfTtcblxuICAgIHZhciB0cmlnZ2VyRWxtID0gbnVsbDtcbiAgICBpZiAoc3BsaXRCdXR0b24pIHtcbiAgICAgIHRyaWdnZXJFbG0gPSBoKCdlbC1idXR0b24tZ3JvdXAnLCBbaChcbiAgICAgICAgJ2VsLWJ1dHRvbicsXG4gICAgICAgIHtcbiAgICAgICAgICBhdHRyczogeyB0eXBlOiB0eXBlLCBzaXplOiBkcm9wZG93blNpemUsIGRpc2FibGVkOiBkaXNhYmxlZCB9LFxuICAgICAgICAgIG5hdGl2ZU9uOiB7XG4gICAgICAgICAgICAnY2xpY2snOiBoYW5kbGVNYWluQnV0dG9uQ2xpY2tcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFt0aGlzLiRzbG90cy5kZWZhdWx0XVxuICAgICAgKSwgaChcbiAgICAgICAgJ2VsLWJ1dHRvbicsXG4gICAgICAgIHsgcmVmOiAndHJpZ2dlcicsIGF0dHJzOiB7IHR5cGU6IHR5cGUsIHNpemU6IGRyb3Bkb3duU2l6ZSwgZGlzYWJsZWQ6IGRpc2FibGVkIH0sXG4gICAgICAgICAgJ2NsYXNzJzogJ2VsLWRyb3Bkb3duX19jYXJldC1idXR0b24nIH0sXG4gICAgICAgIFtoKCdpJywgeyAnY2xhc3MnOiAnZWwtZHJvcGRvd25fX2ljb24gZWwtaWNvbi1hcnJvdy1kb3duJyB9KV1cbiAgICAgICldKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdHJpZ2dlckVsbSA9IHRoaXMuJHNsb3RzLmRlZmF1bHQ7XG4gICAgICB2YXIgdm5vZGVEYXRhID0gdHJpZ2dlckVsbVswXS5kYXRhIHx8IHt9O1xuICAgICAgdmFyIF92bm9kZURhdGEkYXR0cnMgPSB2bm9kZURhdGEuYXR0cnMsXG4gICAgICAgICAgYXR0cnMgPSBfdm5vZGVEYXRhJGF0dHJzID09PSB1bmRlZmluZWQgPyB7fSA6IF92bm9kZURhdGEkYXR0cnM7XG5cbiAgICAgIGlmIChkaXNhYmxlZCAmJiAhYXR0cnMuZGlzYWJsZWQpIHtcbiAgICAgICAgYXR0cnMuZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICB2bm9kZURhdGEuYXR0cnMgPSBhdHRycztcbiAgICAgIH1cbiAgICB9XG4gICAgdmFyIG1lbnVFbG0gPSBkaXNhYmxlZCA/IG51bGwgOiB0aGlzLiRzbG90cy5kcm9wZG93bjtcblxuICAgIHJldHVybiBoKFxuICAgICAgJ2RpdicsXG4gICAgICB7ICdjbGFzcyc6ICdlbC1kcm9wZG93bicsIGRpcmVjdGl2ZXM6IFt7XG4gICAgICAgICAgbmFtZTogJ2NsaWNrb3V0c2lkZScsXG4gICAgICAgICAgdmFsdWU6IGhpZGVcbiAgICAgICAgfV0sXG4gICAgICAgIGF0dHJzOiB7ICdhcmlhLWRpc2FibGVkJzogZGlzYWJsZWQgfVxuICAgICAgfSxcbiAgICAgIFt0cmlnZ2VyRWxtLCBtZW51RWxtXVxuICAgICk7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9kcm9wZG93bi9zcmMvZHJvcGRvd24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY19kcm9wZG93bnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChkcm9wZG93bnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9kcm9wZG93bi9zcmMvZHJvcGRvd24udnVlXG52YXIgZHJvcGRvd25fcmVuZGVyLCBkcm9wZG93bl9zdGF0aWNSZW5kZXJGbnNcblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgZHJvcGRvd25fY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBzcmNfZHJvcGRvd252dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIGRyb3Bkb3duX3JlbmRlcixcbiAgZHJvcGRvd25fc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBkcm9wZG93bl9hcGk7IH1cbmRyb3Bkb3duX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvZHJvcGRvd24vc3JjL2Ryb3Bkb3duLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBkcm9wZG93biA9IChkcm9wZG93bl9jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2Ryb3Bkb3duL2luZGV4LmpzXG5cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmRyb3Bkb3duLmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG4gIFZ1ZS5jb21wb25lbnQoZHJvcGRvd24ubmFtZSwgZHJvcGRvd24pO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcGFja2FnZXNfZHJvcGRvd24gPSAoZHJvcGRvd24pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9kcm9wZG93bi9zcmMvZHJvcGRvd24tbWVudS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MGRhNmI3MTQmXG52YXIgZHJvcGRvd25fbWVudXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzBkYTZiNzE0X3JlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcInRyYW5zaXRpb25cIixcbiAgICB7IGF0dHJzOiB7IG5hbWU6IFwiZWwtem9vbS1pbi10b3BcIiB9LCBvbjogeyBcImFmdGVyLWxlYXZlXCI6IF92bS5kb0Rlc3Ryb3kgfSB9LFxuICAgIFtcbiAgICAgIF9jKFxuICAgICAgICBcInVsXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgICB2YWx1ZTogX3ZtLnNob3dQb3BwZXIsXG4gICAgICAgICAgICAgIGV4cHJlc3Npb246IFwic2hvd1BvcHBlclwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXSxcbiAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1kcm9wZG93bi1tZW51IGVsLXBvcHBlclwiLFxuICAgICAgICAgIGNsYXNzOiBbX3ZtLnNpemUgJiYgXCJlbC1kcm9wZG93bi1tZW51LS1cIiArIF92bS5zaXplXVxuICAgICAgICB9LFxuICAgICAgICBbX3ZtLl90KFwiZGVmYXVsdFwiKV0sXG4gICAgICAgIDJcbiAgICAgIClcbiAgICBdXG4gIClcbn1cbnZhciBkcm9wZG93bl9tZW51dnVlX3R5cGVfdGVtcGxhdGVfaWRfMGRhNmI3MTRfc3RhdGljUmVuZGVyRm5zID0gW11cbmRyb3Bkb3duX21lbnV2dWVfdHlwZV90ZW1wbGF0ZV9pZF8wZGE2YjcxNF9yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2Ryb3Bkb3duL3NyYy9kcm9wZG93bi1tZW51LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wZGE2YjcxNCZcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvZHJvcGRvd24vc3JjL2Ryb3Bkb3duLW1lbnUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGRyb3Bkb3duX21lbnV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBuYW1lOiAnRWxEcm9wZG93bk1lbnUnLFxuXG4gIGNvbXBvbmVudE5hbWU6ICdFbERyb3Bkb3duTWVudScsXG5cbiAgbWl4aW5zOiBbdnVlX3BvcHBlcl9kZWZhdWx0LmFdLFxuXG4gIHByb3BzOiB7XG4gICAgdmlzaWJsZUFycm93OiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0sXG4gICAgYXJyb3dPZmZzZXQ6IHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGRlZmF1bHQ6IDBcbiAgICB9XG4gIH0sXG5cbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2l6ZTogdGhpcy5kcm9wZG93bi5kcm9wZG93blNpemVcbiAgICB9O1xuICB9LFxuXG5cbiAgaW5qZWN0OiBbJ2Ryb3Bkb3duJ10sXG5cbiAgY3JlYXRlZDogZnVuY3Rpb24gY3JlYXRlZCgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdGhpcy4kb24oJ3VwZGF0ZVBvcHBlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChfdGhpcy5zaG93UG9wcGVyKSBfdGhpcy51cGRhdGVQb3BwZXIoKTtcbiAgICB9KTtcbiAgICB0aGlzLiRvbigndmlzaWJsZScsIGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgIF90aGlzLnNob3dQb3BwZXIgPSB2YWw7XG4gICAgfSk7XG4gIH0sXG4gIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7XG4gICAgdGhpcy5kcm9wZG93bi5wb3BwZXJFbG0gPSB0aGlzLnBvcHBlckVsbSA9IHRoaXMuJGVsO1xuICAgIHRoaXMucmVmZXJlbmNlRWxtID0gdGhpcy5kcm9wZG93bi4kZWw7XG4gICAgLy8gY29tcGF0aWJsZSB3aXRoIDIuNiBuZXcgdi1zbG90IHN5bnRheFxuICAgIC8vIGlzc3VlIGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL0VsZW1lRkUvZWxlbWVudC9pc3N1ZXMvMTQzNDVcbiAgICB0aGlzLmRyb3Bkb3duLmluaXREb21PcGVyYXRpb24oKTtcbiAgfSxcblxuXG4gIHdhdGNoOiB7XG4gICAgJ2Ryb3Bkb3duLnBsYWNlbWVudCc6IHtcbiAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcbiAgICAgIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIodmFsKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFBsYWNlbWVudCA9IHZhbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9kcm9wZG93bi9zcmMvZHJvcGRvd24tbWVudS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX2Ryb3Bkb3duX21lbnV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoZHJvcGRvd25fbWVudXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9kcm9wZG93bi9zcmMvZHJvcGRvd24tbWVudS52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBkcm9wZG93bl9tZW51X2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgc3JjX2Ryb3Bkb3duX21lbnV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIGRyb3Bkb3duX21lbnV2dWVfdHlwZV90ZW1wbGF0ZV9pZF8wZGE2YjcxNF9yZW5kZXIsXG4gIGRyb3Bkb3duX21lbnV2dWVfdHlwZV90ZW1wbGF0ZV9pZF8wZGE2YjcxNF9zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGRyb3Bkb3duX21lbnVfYXBpOyB9XG5kcm9wZG93bl9tZW51X2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvZHJvcGRvd24vc3JjL2Ryb3Bkb3duLW1lbnUudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGRyb3Bkb3duX21lbnUgPSAoZHJvcGRvd25fbWVudV9jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2Ryb3Bkb3duLW1lbnUvaW5kZXguanNcblxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuZHJvcGRvd25fbWVudS5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuICBWdWUuY29tcG9uZW50KGRyb3Bkb3duX21lbnUubmFtZSwgZHJvcGRvd25fbWVudSk7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc19kcm9wZG93bl9tZW51ID0gKGRyb3Bkb3duX21lbnUpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9kcm9wZG93bi9zcmMvZHJvcGRvd24taXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NjM1OTEwMmEmXG52YXIgZHJvcGRvd25faXRlbXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzYzNTkxMDJhX3JlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImxpXCIsXG4gICAge1xuICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtZHJvcGRvd24tbWVudV9faXRlbVwiLFxuICAgICAgY2xhc3M6IHtcbiAgICAgICAgXCJpcy1kaXNhYmxlZFwiOiBfdm0uZGlzYWJsZWQsXG4gICAgICAgIFwiZWwtZHJvcGRvd24tbWVudV9faXRlbS0tZGl2aWRlZFwiOiBfdm0uZGl2aWRlZFxuICAgICAgfSxcbiAgICAgIGF0dHJzOiB7XG4gICAgICAgIFwiYXJpYS1kaXNhYmxlZFwiOiBfdm0uZGlzYWJsZWQsXG4gICAgICAgIHRhYmluZGV4OiBfdm0uZGlzYWJsZWQgPyBudWxsIDogLTFcbiAgICAgIH0sXG4gICAgICBvbjogeyBjbGljazogX3ZtLmhhbmRsZUNsaWNrIH1cbiAgICB9LFxuICAgIFtfdm0uaWNvbiA/IF9jKFwiaVwiLCB7IGNsYXNzOiBfdm0uaWNvbiB9KSA6IF92bS5fZSgpLCBfdm0uX3QoXCJkZWZhdWx0XCIpXSxcbiAgICAyXG4gIClcbn1cbnZhciBkcm9wZG93bl9pdGVtdnVlX3R5cGVfdGVtcGxhdGVfaWRfNjM1OTEwMmFfc3RhdGljUmVuZGVyRm5zID0gW11cbmRyb3Bkb3duX2l0ZW12dWVfdHlwZV90ZW1wbGF0ZV9pZF82MzU5MTAyYV9yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2Ryb3Bkb3duL3NyYy9kcm9wZG93bi1pdGVtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02MzU5MTAyYSZcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvZHJvcGRvd24vc3JjL2Ryb3Bkb3duLWl0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgZHJvcGRvd25faXRlbXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG5hbWU6ICdFbERyb3Bkb3duSXRlbScsXG5cbiAgbWl4aW5zOiBbZW1pdHRlcl9kZWZhdWx0LmFdLFxuXG4gIHByb3BzOiB7XG4gICAgY29tbWFuZDoge30sXG4gICAgZGlzYWJsZWQ6IEJvb2xlYW4sXG4gICAgZGl2aWRlZDogQm9vbGVhbixcbiAgICBpY29uOiBTdHJpbmdcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgaGFuZGxlQ2xpY2s6IGZ1bmN0aW9uIGhhbmRsZUNsaWNrKGUpIHtcbiAgICAgIHRoaXMuZGlzcGF0Y2goJ0VsRHJvcGRvd24nLCAnbWVudS1pdGVtLWNsaWNrJywgW3RoaXMuY29tbWFuZCwgdGhpc10pO1xuICAgIH1cbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2Ryb3Bkb3duL3NyYy9kcm9wZG93bi1pdGVtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfZHJvcGRvd25faXRlbXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChkcm9wZG93bl9pdGVtdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2Ryb3Bkb3duL3NyYy9kcm9wZG93bi1pdGVtLnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGRyb3Bkb3duX2l0ZW1fY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBzcmNfZHJvcGRvd25faXRlbXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgZHJvcGRvd25faXRlbXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzYzNTkxMDJhX3JlbmRlcixcbiAgZHJvcGRvd25faXRlbXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzYzNTkxMDJhX3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgZHJvcGRvd25faXRlbV9hcGk7IH1cbmRyb3Bkb3duX2l0ZW1fY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy9kcm9wZG93bi9zcmMvZHJvcGRvd24taXRlbS52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgZHJvcGRvd25faXRlbSA9IChkcm9wZG93bl9pdGVtX2NvbXBvbmVudC5leHBvcnRzKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZHJvcGRvd24taXRlbS9pbmRleC5qc1xuXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5kcm9wZG93bl9pdGVtLmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG4gIFZ1ZS5jb21wb25lbnQoZHJvcGRvd25faXRlbS5uYW1lLCBkcm9wZG93bl9pdGVtKTtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhY2thZ2VzX2Ryb3Bkb3duX2l0ZW0gPSAoZHJvcGRvd25faXRlbSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy91dGlscy9hcmlhLXV0aWxzLmpzXG52YXIgYXJpYSA9IGFyaWEgfHwge307XG5cbmFyaWEuVXRpbHMgPSBhcmlhLlV0aWxzIHx8IHt9O1xuXG4vKipcbiAqIEBkZXNjIFNldCBmb2N1cyBvbiBkZXNjZW5kYW50IG5vZGVzIHVudGlsIHRoZSBmaXJzdCBmb2N1c2FibGUgZWxlbWVudCBpc1xuICogICAgICAgZm91bmQuXG4gKiBAcGFyYW0gZWxlbWVudFxuICogICAgICAgICAgRE9NIG5vZGUgZm9yIHdoaWNoIHRvIGZpbmQgdGhlIGZpcnN0IGZvY3VzYWJsZSBkZXNjZW5kYW50LlxuICogQHJldHVybnNcbiAqICB0cnVlIGlmIGEgZm9jdXNhYmxlIGVsZW1lbnQgaXMgZm91bmQgYW5kIGZvY3VzIGlzIHNldC5cbiAqL1xuYXJpYS5VdGlscy5mb2N1c0ZpcnN0RGVzY2VuZGFudCA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGNoaWxkID0gZWxlbWVudC5jaGlsZE5vZGVzW2ldO1xuICAgIGlmIChhcmlhLlV0aWxzLmF0dGVtcHRGb2N1cyhjaGlsZCkgfHwgYXJpYS5VdGlscy5mb2N1c0ZpcnN0RGVzY2VuZGFudChjaGlsZCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiAqIEBkZXNjIEZpbmQgdGhlIGxhc3QgZGVzY2VuZGFudCBub2RlIHRoYXQgaXMgZm9jdXNhYmxlLlxuICogQHBhcmFtIGVsZW1lbnRcbiAqICAgICAgICAgIERPTSBub2RlIGZvciB3aGljaCB0byBmaW5kIHRoZSBsYXN0IGZvY3VzYWJsZSBkZXNjZW5kYW50LlxuICogQHJldHVybnNcbiAqICB0cnVlIGlmIGEgZm9jdXNhYmxlIGVsZW1lbnQgaXMgZm91bmQgYW5kIGZvY3VzIGlzIHNldC5cbiAqL1xuXG5hcmlhLlV0aWxzLmZvY3VzTGFzdERlc2NlbmRhbnQgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICBmb3IgKHZhciBpID0gZWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgdmFyIGNoaWxkID0gZWxlbWVudC5jaGlsZE5vZGVzW2ldO1xuICAgIGlmIChhcmlhLlV0aWxzLmF0dGVtcHRGb2N1cyhjaGlsZCkgfHwgYXJpYS5VdGlscy5mb2N1c0xhc3REZXNjZW5kYW50KGNoaWxkKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogQGRlc2MgU2V0IEF0dGVtcHQgdG8gc2V0IGZvY3VzIG9uIHRoZSBjdXJyZW50IG5vZGUuXG4gKiBAcGFyYW0gZWxlbWVudFxuICogICAgICAgICAgVGhlIG5vZGUgdG8gYXR0ZW1wdCB0byBmb2N1cyBvbi5cbiAqIEByZXR1cm5zXG4gKiAgdHJ1ZSBpZiBlbGVtZW50IGlzIGZvY3VzZWQuXG4gKi9cbmFyaWEuVXRpbHMuYXR0ZW1wdEZvY3VzID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgaWYgKCFhcmlhLlV0aWxzLmlzRm9jdXNhYmxlKGVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGFyaWEuVXRpbHMuSWdub3JlVXRpbEZvY3VzQ2hhbmdlcyA9IHRydWU7XG4gIHRyeSB7XG4gICAgZWxlbWVudC5mb2N1cygpO1xuICB9IGNhdGNoIChlKSB7fVxuICBhcmlhLlV0aWxzLklnbm9yZVV0aWxGb2N1c0NoYW5nZXMgPSBmYWxzZTtcbiAgcmV0dXJuIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IGVsZW1lbnQ7XG59O1xuXG5hcmlhLlV0aWxzLmlzRm9jdXNhYmxlID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgaWYgKGVsZW1lbnQudGFiSW5kZXggPiAwIHx8IGVsZW1lbnQudGFiSW5kZXggPT09IDAgJiYgZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3RhYkluZGV4JykgIT09IG51bGwpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChlbGVtZW50LmRpc2FibGVkKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc3dpdGNoIChlbGVtZW50Lm5vZGVOYW1lKSB7XG4gICAgY2FzZSAnQSc6XG4gICAgICByZXR1cm4gISFlbGVtZW50LmhyZWYgJiYgZWxlbWVudC5yZWwgIT09ICdpZ25vcmUnO1xuICAgIGNhc2UgJ0lOUFVUJzpcbiAgICAgIHJldHVybiBlbGVtZW50LnR5cGUgIT09ICdoaWRkZW4nICYmIGVsZW1lbnQudHlwZSAhPT0gJ2ZpbGUnO1xuICAgIGNhc2UgJ0JVVFRPTic6XG4gICAgY2FzZSAnU0VMRUNUJzpcbiAgICBjYXNlICdURVhUQVJFQSc6XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuXG4vKipcbiAqIOinpuWPkeS4gOS4quS6i+S7tlxuICogbW91c2VlbnRlciwgbW91c2VsZWF2ZSwgbW91c2VvdmVyLCBrZXl1cCwgY2hhbmdlLCBjbGljayDnrYlcbiAqIEBwYXJhbSAge0VsZW1lbnR9IGVsbVxuICogQHBhcmFtICB7U3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0gIHsqfSBvcHRzXG4gKi9cbmFyaWEuVXRpbHMudHJpZ2dlckV2ZW50ID0gZnVuY3Rpb24gKGVsbSwgbmFtZSkge1xuICB2YXIgZXZlbnROYW1lID0gdm9pZCAwO1xuXG4gIGlmICgvXm1vdXNlfGNsaWNrLy50ZXN0KG5hbWUpKSB7XG4gICAgZXZlbnROYW1lID0gJ01vdXNlRXZlbnRzJztcbiAgfSBlbHNlIGlmICgvXmtleS8udGVzdChuYW1lKSkge1xuICAgIGV2ZW50TmFtZSA9ICdLZXlib2FyZEV2ZW50JztcbiAgfSBlbHNlIHtcbiAgICBldmVudE5hbWUgPSAnSFRNTEV2ZW50cyc7XG4gIH1cbiAgdmFyIGV2dCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KGV2ZW50TmFtZSk7XG5cbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIG9wdHMgPSBBcnJheShfbGVuID4gMiA/IF9sZW4gLSAyIDogMCksIF9rZXkgPSAyOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgb3B0c1tfa2V5IC0gMl0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICBldnQuaW5pdEV2ZW50LmFwcGx5KGV2dCwgW25hbWVdLmNvbmNhdChvcHRzKSk7XG4gIGVsbS5kaXNwYXRjaEV2ZW50ID8gZWxtLmRpc3BhdGNoRXZlbnQoZXZ0KSA6IGVsbS5maXJlRXZlbnQoJ29uJyArIG5hbWUsIGV2dCk7XG5cbiAgcmV0dXJuIGVsbTtcbn07XG5cbmFyaWEuVXRpbHMua2V5cyA9IHtcbiAgdGFiOiA5LFxuICBlbnRlcjogMTMsXG4gIHNwYWNlOiAzMixcbiAgbGVmdDogMzcsXG4gIHVwOiAzOCxcbiAgcmlnaHQ6IDM5LFxuICBkb3duOiA0MCxcbiAgZXNjOiAyN1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgYXJpYV91dGlscyA9IChhcmlhLlV0aWxzKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL3V0aWxzL21lbnUvYXJpYS1zdWJtZW51LmpzXG5cblxudmFyIFN1Yk1lbnUgPSBmdW5jdGlvbiBTdWJNZW51KHBhcmVudCwgZG9tTm9kZSkge1xuICB0aGlzLmRvbU5vZGUgPSBkb21Ob2RlO1xuICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgdGhpcy5zdWJNZW51SXRlbXMgPSBbXTtcbiAgdGhpcy5zdWJJbmRleCA9IDA7XG4gIHRoaXMuaW5pdCgpO1xufTtcblxuU3ViTWVudS5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5zdWJNZW51SXRlbXMgPSB0aGlzLmRvbU5vZGUucXVlcnlTZWxlY3RvckFsbCgnbGknKTtcbiAgdGhpcy5hZGRMaXN0ZW5lcnMoKTtcbn07XG5cblN1Yk1lbnUucHJvdG90eXBlLmdvdG9TdWJJbmRleCA9IGZ1bmN0aW9uIChpZHgpIHtcbiAgaWYgKGlkeCA9PT0gdGhpcy5zdWJNZW51SXRlbXMubGVuZ3RoKSB7XG4gICAgaWR4ID0gMDtcbiAgfSBlbHNlIGlmIChpZHggPCAwKSB7XG4gICAgaWR4ID0gdGhpcy5zdWJNZW51SXRlbXMubGVuZ3RoIC0gMTtcbiAgfVxuICB0aGlzLnN1Yk1lbnVJdGVtc1tpZHhdLmZvY3VzKCk7XG4gIHRoaXMuc3ViSW5kZXggPSBpZHg7XG59O1xuXG5TdWJNZW51LnByb3RvdHlwZS5hZGRMaXN0ZW5lcnMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgdmFyIGtleXMgPSBhcmlhX3V0aWxzLmtleXM7XG4gIHZhciBwYXJlbnROb2RlID0gdGhpcy5wYXJlbnQuZG9tTm9kZTtcbiAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbCh0aGlzLnN1Yk1lbnVJdGVtcywgZnVuY3Rpb24gKGVsKSB7XG4gICAgZWwuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgdmFyIHByZXZEZWYgPSBmYWxzZTtcbiAgICAgIHN3aXRjaCAoZXZlbnQua2V5Q29kZSkge1xuICAgICAgICBjYXNlIGtleXMuZG93bjpcbiAgICAgICAgICBfdGhpcy5nb3RvU3ViSW5kZXgoX3RoaXMuc3ViSW5kZXggKyAxKTtcbiAgICAgICAgICBwcmV2RGVmID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBrZXlzLnVwOlxuICAgICAgICAgIF90aGlzLmdvdG9TdWJJbmRleChfdGhpcy5zdWJJbmRleCAtIDEpO1xuICAgICAgICAgIHByZXZEZWYgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIGtleXMudGFiOlxuICAgICAgICAgIGFyaWFfdXRpbHMudHJpZ2dlckV2ZW50KHBhcmVudE5vZGUsICdtb3VzZWxlYXZlJyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2Uga2V5cy5lbnRlcjpcbiAgICAgICAgY2FzZSBrZXlzLnNwYWNlOlxuICAgICAgICAgIHByZXZEZWYgPSB0cnVlO1xuICAgICAgICAgIGV2ZW50LmN1cnJlbnRUYXJnZXQuY2xpY2soKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGlmIChwcmV2RGVmKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0pO1xuICB9KTtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGFyaWFfc3VibWVudSA9IChTdWJNZW51KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL3V0aWxzL21lbnUvYXJpYS1tZW51aXRlbS5qc1xuXG5cblxudmFyIE1lbnVJdGVtID0gZnVuY3Rpb24gTWVudUl0ZW0oZG9tTm9kZSkge1xuICB0aGlzLmRvbU5vZGUgPSBkb21Ob2RlO1xuICB0aGlzLnN1Ym1lbnUgPSBudWxsO1xuICB0aGlzLmluaXQoKTtcbn07XG5cbk1lbnVJdGVtLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmRvbU5vZGUuc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsICcwJyk7XG4gIHZhciBtZW51Q2hpbGQgPSB0aGlzLmRvbU5vZGUucXVlcnlTZWxlY3RvcignLmVsLW1lbnUnKTtcbiAgaWYgKG1lbnVDaGlsZCkge1xuICAgIHRoaXMuc3VibWVudSA9IG5ldyBhcmlhX3N1Ym1lbnUodGhpcywgbWVudUNoaWxkKTtcbiAgfVxuICB0aGlzLmFkZExpc3RlbmVycygpO1xufTtcblxuTWVudUl0ZW0ucHJvdG90eXBlLmFkZExpc3RlbmVycyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF90aGlzID0gdGhpcztcblxuICB2YXIga2V5cyA9IGFyaWFfdXRpbHMua2V5cztcbiAgdGhpcy5kb21Ob2RlLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICB2YXIgcHJldkRlZiA9IGZhbHNlO1xuICAgIHN3aXRjaCAoZXZlbnQua2V5Q29kZSkge1xuICAgICAgY2FzZSBrZXlzLmRvd246XG4gICAgICAgIGFyaWFfdXRpbHMudHJpZ2dlckV2ZW50KGV2ZW50LmN1cnJlbnRUYXJnZXQsICdtb3VzZWVudGVyJyk7XG4gICAgICAgIF90aGlzLnN1Ym1lbnUgJiYgX3RoaXMuc3VibWVudS5nb3RvU3ViSW5kZXgoMCk7XG4gICAgICAgIHByZXZEZWYgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2Uga2V5cy51cDpcbiAgICAgICAgYXJpYV91dGlscy50cmlnZ2VyRXZlbnQoZXZlbnQuY3VycmVudFRhcmdldCwgJ21vdXNlZW50ZXInKTtcbiAgICAgICAgX3RoaXMuc3VibWVudSAmJiBfdGhpcy5zdWJtZW51LmdvdG9TdWJJbmRleChfdGhpcy5zdWJtZW51LnN1Yk1lbnVJdGVtcy5sZW5ndGggLSAxKTtcbiAgICAgICAgcHJldkRlZiA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBrZXlzLnRhYjpcbiAgICAgICAgYXJpYV91dGlscy50cmlnZ2VyRXZlbnQoZXZlbnQuY3VycmVudFRhcmdldCwgJ21vdXNlbGVhdmUnKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIGtleXMuZW50ZXI6XG4gICAgICBjYXNlIGtleXMuc3BhY2U6XG4gICAgICAgIHByZXZEZWYgPSB0cnVlO1xuICAgICAgICBldmVudC5jdXJyZW50VGFyZ2V0LmNsaWNrKCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBpZiAocHJldkRlZikge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH0pO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgYXJpYV9tZW51aXRlbSA9IChNZW51SXRlbSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy91dGlscy9tZW51L2FyaWEtbWVudWJhci5qc1xuXG5cbnZhciBNZW51ID0gZnVuY3Rpb24gTWVudShkb21Ob2RlKSB7XG4gIHRoaXMuZG9tTm9kZSA9IGRvbU5vZGU7XG4gIHRoaXMuaW5pdCgpO1xufTtcblxuTWVudS5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIG1lbnVDaGlsZHJlbiA9IHRoaXMuZG9tTm9kZS5jaGlsZE5vZGVzO1xuICBbXS5maWx0ZXIuY2FsbChtZW51Q2hpbGRyZW4sIGZ1bmN0aW9uIChjaGlsZCkge1xuICAgIHJldHVybiBjaGlsZC5ub2RlVHlwZSA9PT0gMTtcbiAgfSkuZm9yRWFjaChmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICBuZXcgYXJpYV9tZW51aXRlbShjaGlsZCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgfSk7XG59O1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgYXJpYV9tZW51YmFyID0gKE1lbnUpO1xuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcImVsZW1lbnQtdWkvbGliL3V0aWxzL2RvbVwiXG52YXIgZG9tXyA9IF9fd2VicGFja19yZXF1aXJlX18oMSk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL21lbnUvc3JjL21lbnUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuXG5cblxuXG5cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgbWVudXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG5hbWU6ICdFbE1lbnUnLFxuXG4gIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKGgpIHtcbiAgICB2YXIgY29tcG9uZW50ID0gaChcbiAgICAgICd1bCcsXG4gICAgICB7XG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgcm9sZTogJ21lbnViYXInXG4gICAgICAgIH0sXG4gICAgICAgIGtleTogK3RoaXMuY29sbGFwc2UsXG4gICAgICAgIHN0eWxlOiB7IGJhY2tncm91bmRDb2xvcjogdGhpcy5iYWNrZ3JvdW5kQ29sb3IgfHwgJycgfSxcbiAgICAgICAgJ2NsYXNzJzoge1xuICAgICAgICAgICdlbC1tZW51LS1ob3Jpem9udGFsJzogdGhpcy5tb2RlID09PSAnaG9yaXpvbnRhbCcsXG4gICAgICAgICAgJ2VsLW1lbnUtLWNvbGxhcHNlJzogdGhpcy5jb2xsYXBzZSxcbiAgICAgICAgICBcImVsLW1lbnVcIjogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgW3RoaXMuJHNsb3RzLmRlZmF1bHRdXG4gICAgKTtcblxuICAgIGlmICh0aGlzLmNvbGxhcHNlVHJhbnNpdGlvbikge1xuICAgICAgcmV0dXJuIGgoJ2VsLW1lbnUtY29sbGFwc2UtdHJhbnNpdGlvbicsIFtjb21wb25lbnRdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGNvbXBvbmVudDtcbiAgICB9XG4gIH0sXG5cblxuICBjb21wb25lbnROYW1lOiAnRWxNZW51JyxcblxuICBtaXhpbnM6IFtlbWl0dGVyX2RlZmF1bHQuYSwgbWlncmF0aW5nX2RlZmF1bHQuYV0sXG5cbiAgcHJvdmlkZTogZnVuY3Rpb24gcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcm9vdE1lbnU6IHRoaXNcbiAgICB9O1xuICB9LFxuXG5cbiAgY29tcG9uZW50czoge1xuICAgICdlbC1tZW51LWNvbGxhcHNlLXRyYW5zaXRpb24nOiB7XG4gICAgICBmdW5jdGlvbmFsOiB0cnVlLFxuICAgICAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIoY3JlYXRlRWxlbWVudCwgY29udGV4dCkge1xuICAgICAgICB2YXIgZGF0YSA9IHtcbiAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgbW9kZTogJ291dC1pbidcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICBiZWZvcmVFbnRlcjogZnVuY3Rpb24gYmVmb3JlRW50ZXIoZWwpIHtcbiAgICAgICAgICAgICAgZWwuc3R5bGUub3BhY2l0eSA9IDAuMjtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbnRlcjogZnVuY3Rpb24gZW50ZXIoZWwpIHtcbiAgICAgICAgICAgICAgT2JqZWN0KGRvbV9bXCJhZGRDbGFzc1wiXSkoZWwsICdlbC1vcGFjaXR5LXRyYW5zaXRpb24nKTtcbiAgICAgICAgICAgICAgZWwuc3R5bGUub3BhY2l0eSA9IDE7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWZ0ZXJFbnRlcjogZnVuY3Rpb24gYWZ0ZXJFbnRlcihlbCkge1xuICAgICAgICAgICAgICBPYmplY3QoZG9tX1tcInJlbW92ZUNsYXNzXCJdKShlbCwgJ2VsLW9wYWNpdHktdHJhbnNpdGlvbicpO1xuICAgICAgICAgICAgICBlbC5zdHlsZS5vcGFjaXR5ID0gJyc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmVmb3JlTGVhdmU6IGZ1bmN0aW9uIGJlZm9yZUxlYXZlKGVsKSB7XG4gICAgICAgICAgICAgIGlmICghZWwuZGF0YXNldCkgZWwuZGF0YXNldCA9IHt9O1xuXG4gICAgICAgICAgICAgIGlmIChPYmplY3QoZG9tX1tcImhhc0NsYXNzXCJdKShlbCwgJ2VsLW1lbnUtLWNvbGxhcHNlJykpIHtcbiAgICAgICAgICAgICAgICBPYmplY3QoZG9tX1tcInJlbW92ZUNsYXNzXCJdKShlbCwgJ2VsLW1lbnUtLWNvbGxhcHNlJyk7XG4gICAgICAgICAgICAgICAgZWwuZGF0YXNldC5vbGRPdmVyZmxvdyA9IGVsLnN0eWxlLm92ZXJmbG93O1xuICAgICAgICAgICAgICAgIGVsLmRhdGFzZXQuc2Nyb2xsV2lkdGggPSBlbC5jbGllbnRXaWR0aDtcbiAgICAgICAgICAgICAgICBPYmplY3QoZG9tX1tcImFkZENsYXNzXCJdKShlbCwgJ2VsLW1lbnUtLWNvbGxhcHNlJyk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0KGRvbV9bXCJhZGRDbGFzc1wiXSkoZWwsICdlbC1tZW51LS1jb2xsYXBzZScpO1xuICAgICAgICAgICAgICAgIGVsLmRhdGFzZXQub2xkT3ZlcmZsb3cgPSBlbC5zdHlsZS5vdmVyZmxvdztcbiAgICAgICAgICAgICAgICBlbC5kYXRhc2V0LnNjcm9sbFdpZHRoID0gZWwuY2xpZW50V2lkdGg7XG4gICAgICAgICAgICAgICAgT2JqZWN0KGRvbV9bXCJyZW1vdmVDbGFzc1wiXSkoZWwsICdlbC1tZW51LS1jb2xsYXBzZScpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZWwuc3R5bGUud2lkdGggPSBlbC5zY3JvbGxXaWR0aCArICdweCc7XG4gICAgICAgICAgICAgIGVsLnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVhdmU6IGZ1bmN0aW9uIGxlYXZlKGVsKSB7XG4gICAgICAgICAgICAgIE9iamVjdChkb21fW1wiYWRkQ2xhc3NcIl0pKGVsLCAnaG9yaXpvbnRhbC1jb2xsYXBzZS10cmFuc2l0aW9uJyk7XG4gICAgICAgICAgICAgIGVsLnN0eWxlLndpZHRoID0gZWwuZGF0YXNldC5zY3JvbGxXaWR0aCArICdweCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gY3JlYXRlRWxlbWVudCgndHJhbnNpdGlvbicsIGRhdGEsIGNvbnRleHQuY2hpbGRyZW4pO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBwcm9wczoge1xuICAgIG1vZGU6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICd2ZXJ0aWNhbCdcbiAgICB9LFxuICAgIGRlZmF1bHRBY3RpdmU6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICcnXG4gICAgfSxcbiAgICBkZWZhdWx0T3BlbmVkczogQXJyYXksXG4gICAgdW5pcXVlT3BlbmVkOiBCb29sZWFuLFxuICAgIHJvdXRlcjogQm9vbGVhbixcbiAgICBtZW51VHJpZ2dlcjoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2hvdmVyJ1xuICAgIH0sXG4gICAgY29sbGFwc2U6IEJvb2xlYW4sXG4gICAgYmFja2dyb3VuZENvbG9yOiBTdHJpbmcsXG4gICAgdGV4dENvbG9yOiBTdHJpbmcsXG4gICAgYWN0aXZlVGV4dENvbG9yOiBTdHJpbmcsXG4gICAgY29sbGFwc2VUcmFuc2l0aW9uOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH1cbiAgfSxcbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYWN0aXZlSW5kZXg6IHRoaXMuZGVmYXVsdEFjdGl2ZSxcbiAgICAgIG9wZW5lZE1lbnVzOiB0aGlzLmRlZmF1bHRPcGVuZWRzICYmICF0aGlzLmNvbGxhcHNlID8gdGhpcy5kZWZhdWx0T3BlbmVkcy5zbGljZSgwKSA6IFtdLFxuICAgICAgaXRlbXM6IHt9LFxuICAgICAgc3VibWVudXM6IHt9XG4gICAgfTtcbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGhvdmVyQmFja2dyb3VuZDogZnVuY3Rpb24gaG92ZXJCYWNrZ3JvdW5kKCkge1xuICAgICAgcmV0dXJuIHRoaXMuYmFja2dyb3VuZENvbG9yID8gdGhpcy5taXhDb2xvcih0aGlzLmJhY2tncm91bmRDb2xvciwgMC4yKSA6ICcnO1xuICAgIH0sXG4gICAgaXNNZW51UG9wdXA6IGZ1bmN0aW9uIGlzTWVudVBvcHVwKCkge1xuICAgICAgcmV0dXJuIHRoaXMubW9kZSA9PT0gJ2hvcml6b250YWwnIHx8IHRoaXMubW9kZSA9PT0gJ3ZlcnRpY2FsJyAmJiB0aGlzLmNvbGxhcHNlO1xuICAgIH1cbiAgfSxcbiAgd2F0Y2g6IHtcbiAgICBkZWZhdWx0QWN0aXZlOiBmdW5jdGlvbiBkZWZhdWx0QWN0aXZlKHZhbHVlKSB7XG4gICAgICBpZiAoIXRoaXMuaXRlbXNbdmFsdWVdKSB7XG4gICAgICAgIHRoaXMuYWN0aXZlSW5kZXggPSBudWxsO1xuICAgICAgfVxuICAgICAgdGhpcy51cGRhdGVBY3RpdmVJbmRleCh2YWx1ZSk7XG4gICAgfSxcbiAgICBkZWZhdWx0T3BlbmVkczogZnVuY3Rpb24gZGVmYXVsdE9wZW5lZHModmFsdWUpIHtcbiAgICAgIGlmICghdGhpcy5jb2xsYXBzZSkge1xuICAgICAgICB0aGlzLm9wZW5lZE1lbnVzID0gdmFsdWU7XG4gICAgICB9XG4gICAgfSxcbiAgICBjb2xsYXBzZTogZnVuY3Rpb24gY29sbGFwc2UodmFsdWUpIHtcbiAgICAgIGlmICh2YWx1ZSkgdGhpcy5vcGVuZWRNZW51cyA9IFtdO1xuICAgICAgdGhpcy5icm9hZGNhc3QoJ0VsU3VibWVudScsICd0b2dnbGUtY29sbGFwc2UnLCB2YWx1ZSk7XG4gICAgfVxuICB9LFxuICBtZXRob2RzOiB7XG4gICAgdXBkYXRlQWN0aXZlSW5kZXg6IGZ1bmN0aW9uIHVwZGF0ZUFjdGl2ZUluZGV4KHZhbCkge1xuICAgICAgdmFyIGl0ZW0gPSB0aGlzLml0ZW1zW3ZhbF0gfHwgdGhpcy5pdGVtc1t0aGlzLmFjdGl2ZUluZGV4XSB8fCB0aGlzLml0ZW1zW3RoaXMuZGVmYXVsdEFjdGl2ZV07XG4gICAgICBpZiAoaXRlbSkge1xuICAgICAgICB0aGlzLmFjdGl2ZUluZGV4ID0gaXRlbS5pbmRleDtcbiAgICAgICAgdGhpcy5pbml0T3BlbmVkTWVudSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5hY3RpdmVJbmRleCA9IG51bGw7XG4gICAgICB9XG4gICAgfSxcbiAgICBnZXRNaWdyYXRpbmdDb25maWc6IGZ1bmN0aW9uIGdldE1pZ3JhdGluZ0NvbmZpZygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgJ3RoZW1lJzogJ3RoZW1lIGlzIHJlbW92ZWQuJ1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0sXG4gICAgZ2V0Q29sb3JDaGFubmVsczogZnVuY3Rpb24gZ2V0Q29sb3JDaGFubmVscyhjb2xvcikge1xuICAgICAgY29sb3IgPSBjb2xvci5yZXBsYWNlKCcjJywgJycpO1xuICAgICAgaWYgKC9eWzAtOWEtZkEtRl17M30kLy50ZXN0KGNvbG9yKSkge1xuICAgICAgICBjb2xvciA9IGNvbG9yLnNwbGl0KCcnKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDI7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgY29sb3Iuc3BsaWNlKGksIDAsIGNvbG9yW2ldKTtcbiAgICAgICAgfVxuICAgICAgICBjb2xvciA9IGNvbG9yLmpvaW4oJycpO1xuICAgICAgfVxuICAgICAgaWYgKC9eWzAtOWEtZkEtRl17Nn0kLy50ZXN0KGNvbG9yKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHJlZDogcGFyc2VJbnQoY29sb3Iuc2xpY2UoMCwgMiksIDE2KSxcbiAgICAgICAgICBncmVlbjogcGFyc2VJbnQoY29sb3Iuc2xpY2UoMiwgNCksIDE2KSxcbiAgICAgICAgICBibHVlOiBwYXJzZUludChjb2xvci5zbGljZSg0LCA2KSwgMTYpXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHJlZDogMjU1LFxuICAgICAgICAgIGdyZWVuOiAyNTUsXG4gICAgICAgICAgYmx1ZTogMjU1XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSxcbiAgICBtaXhDb2xvcjogZnVuY3Rpb24gbWl4Q29sb3IoY29sb3IsIHBlcmNlbnQpIHtcbiAgICAgIHZhciBfZ2V0Q29sb3JDaGFubmVscyA9IHRoaXMuZ2V0Q29sb3JDaGFubmVscyhjb2xvciksXG4gICAgICAgICAgcmVkID0gX2dldENvbG9yQ2hhbm5lbHMucmVkLFxuICAgICAgICAgIGdyZWVuID0gX2dldENvbG9yQ2hhbm5lbHMuZ3JlZW4sXG4gICAgICAgICAgYmx1ZSA9IF9nZXRDb2xvckNoYW5uZWxzLmJsdWU7XG5cbiAgICAgIGlmIChwZXJjZW50ID4gMCkge1xuICAgICAgICAvLyBzaGFkZSBnaXZlbiBjb2xvclxuICAgICAgICByZWQgKj0gMSAtIHBlcmNlbnQ7XG4gICAgICAgIGdyZWVuICo9IDEgLSBwZXJjZW50O1xuICAgICAgICBibHVlICo9IDEgLSBwZXJjZW50O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdGludCBnaXZlbiBjb2xvclxuICAgICAgICByZWQgKz0gKDI1NSAtIHJlZCkgKiBwZXJjZW50O1xuICAgICAgICBncmVlbiArPSAoMjU1IC0gZ3JlZW4pICogcGVyY2VudDtcbiAgICAgICAgYmx1ZSArPSAoMjU1IC0gYmx1ZSkgKiBwZXJjZW50O1xuICAgICAgfVxuICAgICAgcmV0dXJuICdyZ2IoJyArIE1hdGgucm91bmQocmVkKSArICcsICcgKyBNYXRoLnJvdW5kKGdyZWVuKSArICcsICcgKyBNYXRoLnJvdW5kKGJsdWUpICsgJyknO1xuICAgIH0sXG4gICAgYWRkSXRlbTogZnVuY3Rpb24gYWRkSXRlbShpdGVtKSB7XG4gICAgICB0aGlzLiRzZXQodGhpcy5pdGVtcywgaXRlbS5pbmRleCwgaXRlbSk7XG4gICAgfSxcbiAgICByZW1vdmVJdGVtOiBmdW5jdGlvbiByZW1vdmVJdGVtKGl0ZW0pIHtcbiAgICAgIGRlbGV0ZSB0aGlzLml0ZW1zW2l0ZW0uaW5kZXhdO1xuICAgIH0sXG4gICAgYWRkU3VibWVudTogZnVuY3Rpb24gYWRkU3VibWVudShpdGVtKSB7XG4gICAgICB0aGlzLiRzZXQodGhpcy5zdWJtZW51cywgaXRlbS5pbmRleCwgaXRlbSk7XG4gICAgfSxcbiAgICByZW1vdmVTdWJtZW51OiBmdW5jdGlvbiByZW1vdmVTdWJtZW51KGl0ZW0pIHtcbiAgICAgIGRlbGV0ZSB0aGlzLnN1Ym1lbnVzW2l0ZW0uaW5kZXhdO1xuICAgIH0sXG4gICAgb3Blbk1lbnU6IGZ1bmN0aW9uIG9wZW5NZW51KGluZGV4LCBpbmRleFBhdGgpIHtcbiAgICAgIHZhciBvcGVuZWRNZW51cyA9IHRoaXMub3BlbmVkTWVudXM7XG4gICAgICBpZiAob3BlbmVkTWVudXMuaW5kZXhPZihpbmRleCkgIT09IC0xKSByZXR1cm47XG4gICAgICAvLyDlsIbkuI3lnKjor6Xoj5zljZXot6/lvoTkuIvnmoTlhbbkvZnoj5zljZXmlLbotbdcbiAgICAgIC8vIGNvbGxhcHNlIGFsbCBtZW51IHRoYXQgYXJlIG5vdCB1bmRlciBjdXJyZW50IG1lbnUgaXRlbVxuICAgICAgaWYgKHRoaXMudW5pcXVlT3BlbmVkKSB7XG4gICAgICAgIHRoaXMub3BlbmVkTWVudXMgPSBvcGVuZWRNZW51cy5maWx0ZXIoZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgICAgcmV0dXJuIGluZGV4UGF0aC5pbmRleE9mKGluZGV4KSAhPT0gLTE7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdGhpcy5vcGVuZWRNZW51cy5wdXNoKGluZGV4KTtcbiAgICB9LFxuICAgIGNsb3NlTWVudTogZnVuY3Rpb24gY2xvc2VNZW51KGluZGV4KSB7XG4gICAgICB2YXIgaSA9IHRoaXMub3BlbmVkTWVudXMuaW5kZXhPZihpbmRleCk7XG4gICAgICBpZiAoaSAhPT0gLTEpIHtcbiAgICAgICAgdGhpcy5vcGVuZWRNZW51cy5zcGxpY2UoaSwgMSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBoYW5kbGVTdWJtZW51Q2xpY2s6IGZ1bmN0aW9uIGhhbmRsZVN1Ym1lbnVDbGljayhzdWJtZW51KSB7XG4gICAgICB2YXIgaW5kZXggPSBzdWJtZW51LmluZGV4LFxuICAgICAgICAgIGluZGV4UGF0aCA9IHN1Ym1lbnUuaW5kZXhQYXRoO1xuXG4gICAgICB2YXIgaXNPcGVuZWQgPSB0aGlzLm9wZW5lZE1lbnVzLmluZGV4T2YoaW5kZXgpICE9PSAtMTtcblxuICAgICAgaWYgKGlzT3BlbmVkKSB7XG4gICAgICAgIHRoaXMuY2xvc2VNZW51KGluZGV4KTtcbiAgICAgICAgdGhpcy4kZW1pdCgnY2xvc2UnLCBpbmRleCwgaW5kZXhQYXRoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub3Blbk1lbnUoaW5kZXgsIGluZGV4UGF0aCk7XG4gICAgICAgIHRoaXMuJGVtaXQoJ29wZW4nLCBpbmRleCwgaW5kZXhQYXRoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGhhbmRsZUl0ZW1DbGljazogZnVuY3Rpb24gaGFuZGxlSXRlbUNsaWNrKGl0ZW0pIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIHZhciBpbmRleCA9IGl0ZW0uaW5kZXgsXG4gICAgICAgICAgaW5kZXhQYXRoID0gaXRlbS5pbmRleFBhdGg7XG5cbiAgICAgIHZhciBvbGRBY3RpdmVJbmRleCA9IHRoaXMuYWN0aXZlSW5kZXg7XG4gICAgICB2YXIgaGFzSW5kZXggPSBpdGVtLmluZGV4ICE9PSBudWxsO1xuXG4gICAgICBpZiAoaGFzSW5kZXgpIHtcbiAgICAgICAgdGhpcy5hY3RpdmVJbmRleCA9IGl0ZW0uaW5kZXg7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuJGVtaXQoJ3NlbGVjdCcsIGluZGV4LCBpbmRleFBhdGgsIGl0ZW0pO1xuXG4gICAgICBpZiAodGhpcy5tb2RlID09PSAnaG9yaXpvbnRhbCcgfHwgdGhpcy5jb2xsYXBzZSkge1xuICAgICAgICB0aGlzLm9wZW5lZE1lbnVzID0gW107XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnJvdXRlciAmJiBoYXNJbmRleCkge1xuICAgICAgICB0aGlzLnJvdXRlVG9JdGVtKGl0ZW0sIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgIF90aGlzLmFjdGl2ZUluZGV4ID0gb2xkQWN0aXZlSW5kZXg7XG4gICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAvLyB2dWUtcm91dGVyIDMuMS4wKyBwdXNoL3JlcGxhY2UgY2F1c2UgTmF2aWdhdGlvbkR1cGxpY2F0ZWQgZXJyb3IgXG4gICAgICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vRWxlbWVGRS9lbGVtZW50L2lzc3Vlcy8xNzA0NFxuICAgICAgICAgICAgaWYgKGVycm9yLm5hbWUgPT09ICdOYXZpZ2F0aW9uRHVwbGljYXRlZCcpIHJldHVybjtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIOWIneWni+WMluWxleW8gOiPnOWNlVxuICAgIC8vIGluaXRpYWxpemUgb3BlbmVkIG1lbnVcbiAgICBpbml0T3BlbmVkTWVudTogZnVuY3Rpb24gaW5pdE9wZW5lZE1lbnUoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgdmFyIGluZGV4ID0gdGhpcy5hY3RpdmVJbmRleDtcbiAgICAgIHZhciBhY3RpdmVJdGVtID0gdGhpcy5pdGVtc1tpbmRleF07XG4gICAgICBpZiAoIWFjdGl2ZUl0ZW0gfHwgdGhpcy5tb2RlID09PSAnaG9yaXpvbnRhbCcgfHwgdGhpcy5jb2xsYXBzZSkgcmV0dXJuO1xuXG4gICAgICB2YXIgaW5kZXhQYXRoID0gYWN0aXZlSXRlbS5pbmRleFBhdGg7XG5cbiAgICAgIC8vIOWxleW8gOivpeiPnOWNlemhueeahOi3r+W+hOS4iuaJgOacieWtkOiPnOWNlVxuICAgICAgLy8gZXhwYW5kIGFsbCBzdWJtZW51cyBvZiB0aGUgbWVudSBpdGVtXG4gICAgICBpbmRleFBhdGguZm9yRWFjaChmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgdmFyIHN1Ym1lbnUgPSBfdGhpczIuc3VibWVudXNbaW5kZXhdO1xuICAgICAgICBzdWJtZW51ICYmIF90aGlzMi5vcGVuTWVudShpbmRleCwgc3VibWVudS5pbmRleFBhdGgpO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICByb3V0ZVRvSXRlbTogZnVuY3Rpb24gcm91dGVUb0l0ZW0oaXRlbSwgb25FcnJvcikge1xuICAgICAgdmFyIHJvdXRlID0gaXRlbS5yb3V0ZSB8fCBpdGVtLmluZGV4O1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy4kcm91dGVyLnB1c2gocm91dGUsIGZ1bmN0aW9uICgpIHt9LCBvbkVycm9yKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIG9wZW46IGZ1bmN0aW9uIG9wZW4oaW5kZXgpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgICB2YXIgaW5kZXhQYXRoID0gdGhpcy5zdWJtZW51c1tpbmRleC50b1N0cmluZygpXS5pbmRleFBhdGg7XG5cbiAgICAgIGluZGV4UGF0aC5mb3JFYWNoKGZ1bmN0aW9uIChpKSB7XG4gICAgICAgIHJldHVybiBfdGhpczMub3Blbk1lbnUoaSwgaW5kZXhQYXRoKTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgY2xvc2U6IGZ1bmN0aW9uIGNsb3NlKGluZGV4KSB7XG4gICAgICB0aGlzLmNsb3NlTWVudShpbmRleCk7XG4gICAgfVxuICB9LFxuICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge1xuICAgIHRoaXMuaW5pdE9wZW5lZE1lbnUoKTtcbiAgICB0aGlzLiRvbignaXRlbS1jbGljaycsIHRoaXMuaGFuZGxlSXRlbUNsaWNrKTtcbiAgICB0aGlzLiRvbignc3VibWVudS1jbGljaycsIHRoaXMuaGFuZGxlU3VibWVudUNsaWNrKTtcbiAgICBpZiAodGhpcy5tb2RlID09PSAnaG9yaXpvbnRhbCcpIHtcbiAgICAgIG5ldyBhcmlhX21lbnViYXIodGhpcy4kZWwpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgfVxuICAgIHRoaXMuJHdhdGNoKCdpdGVtcycsIHRoaXMudXBkYXRlQWN0aXZlSW5kZXgpO1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvbWVudS9zcmMvbWVudS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX21lbnV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAobWVudXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9tZW51L3NyYy9tZW51LnZ1ZVxudmFyIG1lbnVfcmVuZGVyLCBtZW51X3N0YXRpY1JlbmRlckZuc1xuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBtZW51X2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgc3JjX21lbnV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIG1lbnVfcmVuZGVyLFxuICBtZW51X3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgbWVudV9hcGk7IH1cbm1lbnVfY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy9tZW51L3NyYy9tZW51LnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfbWVudSA9IChtZW51X2NvbXBvbmVudC5leHBvcnRzKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvbWVudS9pbmRleC5qc1xuXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5zcmNfbWVudS5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuICBWdWUuY29tcG9uZW50KHNyY19tZW51Lm5hbWUsIHNyY19tZW51KTtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhY2thZ2VzX21lbnUgPSAoc3JjX21lbnUpO1xuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcImVsZW1lbnQtdWkvbGliL3RyYW5zaXRpb25zL2NvbGxhcHNlLXRyYW5zaXRpb25cIlxudmFyIGNvbGxhcHNlX3RyYW5zaXRpb25fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMSk7XG52YXIgY29sbGFwc2VfdHJhbnNpdGlvbl9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihjb2xsYXBzZV90cmFuc2l0aW9uXyk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvbWVudS9zcmMvbWVudS1taXhpbi5qc1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgbWVudV9taXhpbiA9ICh7XG4gIGluamVjdDogWydyb290TWVudSddLFxuICBjb21wdXRlZDoge1xuICAgIGluZGV4UGF0aDogZnVuY3Rpb24gaW5kZXhQYXRoKCkge1xuICAgICAgdmFyIHBhdGggPSBbdGhpcy5pbmRleF07XG4gICAgICB2YXIgcGFyZW50ID0gdGhpcy4kcGFyZW50O1xuICAgICAgd2hpbGUgKHBhcmVudC4kb3B0aW9ucy5jb21wb25lbnROYW1lICE9PSAnRWxNZW51Jykge1xuICAgICAgICBpZiAocGFyZW50LmluZGV4KSB7XG4gICAgICAgICAgcGF0aC51bnNoaWZ0KHBhcmVudC5pbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgcGFyZW50ID0gcGFyZW50LiRwYXJlbnQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gcGF0aDtcbiAgICB9LFxuICAgIHBhcmVudE1lbnU6IGZ1bmN0aW9uIHBhcmVudE1lbnUoKSB7XG4gICAgICB2YXIgcGFyZW50ID0gdGhpcy4kcGFyZW50O1xuICAgICAgd2hpbGUgKHBhcmVudCAmJiBbJ0VsTWVudScsICdFbFN1Ym1lbnUnXS5pbmRleE9mKHBhcmVudC4kb3B0aW9ucy5jb21wb25lbnROYW1lKSA9PT0gLTEpIHtcbiAgICAgICAgcGFyZW50ID0gcGFyZW50LiRwYXJlbnQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gcGFyZW50O1xuICAgIH0sXG4gICAgcGFkZGluZ1N0eWxlOiBmdW5jdGlvbiBwYWRkaW5nU3R5bGUoKSB7XG4gICAgICBpZiAodGhpcy5yb290TWVudS5tb2RlICE9PSAndmVydGljYWwnKSByZXR1cm4ge307XG5cbiAgICAgIHZhciBwYWRkaW5nID0gMjA7XG4gICAgICB2YXIgcGFyZW50ID0gdGhpcy4kcGFyZW50O1xuXG4gICAgICBpZiAodGhpcy5yb290TWVudS5jb2xsYXBzZSkge1xuICAgICAgICBwYWRkaW5nID0gMjA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3aGlsZSAocGFyZW50ICYmIHBhcmVudC4kb3B0aW9ucy5jb21wb25lbnROYW1lICE9PSAnRWxNZW51Jykge1xuICAgICAgICAgIGlmIChwYXJlbnQuJG9wdGlvbnMuY29tcG9uZW50TmFtZSA9PT0gJ0VsU3VibWVudScpIHtcbiAgICAgICAgICAgIHBhZGRpbmcgKz0gMjA7XG4gICAgICAgICAgfVxuICAgICAgICAgIHBhcmVudCA9IHBhcmVudC4kcGFyZW50O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4geyBwYWRkaW5nTGVmdDogcGFkZGluZyArICdweCcgfTtcbiAgICB9XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvbWVudS9zcmMvc3VibWVudS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG5cblxuXG5cblxuXG52YXIgcG9wZXJNaXhpbnMgPSB7XG4gIHByb3BzOiB7XG4gICAgdHJhbnNmb3JtT3JpZ2luOiB7XG4gICAgICB0eXBlOiBbQm9vbGVhbiwgU3RyaW5nXSxcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSxcbiAgICBvZmZzZXQ6IHZ1ZV9wb3BwZXJfZGVmYXVsdC5hLnByb3BzLm9mZnNldCxcbiAgICBib3VuZGFyaWVzUGFkZGluZzogdnVlX3BvcHBlcl9kZWZhdWx0LmEucHJvcHMuYm91bmRhcmllc1BhZGRpbmcsXG4gICAgcG9wcGVyT3B0aW9uczogdnVlX3BvcHBlcl9kZWZhdWx0LmEucHJvcHMucG9wcGVyT3B0aW9uc1xuICB9LFxuICBkYXRhOiB2dWVfcG9wcGVyX2RlZmF1bHQuYS5kYXRhLFxuICBtZXRob2RzOiB2dWVfcG9wcGVyX2RlZmF1bHQuYS5tZXRob2RzLFxuICBiZWZvcmVEZXN0cm95OiB2dWVfcG9wcGVyX2RlZmF1bHQuYS5iZWZvcmVEZXN0cm95LFxuICBkZWFjdGl2YXRlZDogdnVlX3BvcHBlcl9kZWZhdWx0LmEuZGVhY3RpdmF0ZWRcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHN1Ym1lbnV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBuYW1lOiAnRWxTdWJtZW51JyxcblxuICBjb21wb25lbnROYW1lOiAnRWxTdWJtZW51JyxcblxuICBtaXhpbnM6IFttZW51X21peGluLCBlbWl0dGVyX2RlZmF1bHQuYSwgcG9wZXJNaXhpbnNdLFxuXG4gIGNvbXBvbmVudHM6IHsgRWxDb2xsYXBzZVRyYW5zaXRpb246IGNvbGxhcHNlX3RyYW5zaXRpb25fZGVmYXVsdC5hIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBpbmRleDoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHNob3dUaW1lb3V0OiB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBkZWZhdWx0OiAzMDBcbiAgICB9LFxuICAgIGhpZGVUaW1lb3V0OiB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBkZWZhdWx0OiAzMDBcbiAgICB9LFxuICAgIHBvcHBlckNsYXNzOiBTdHJpbmcsXG4gICAgZGlzYWJsZWQ6IEJvb2xlYW4sXG4gICAgcG9wcGVyQXBwZW5kVG9Cb2R5OiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdW5kZWZpbmVkXG4gICAgfVxuICB9LFxuXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBvcHBlckpTOiBudWxsLFxuICAgICAgdGltZW91dDogbnVsbCxcbiAgICAgIGl0ZW1zOiB7fSxcbiAgICAgIHN1Ym1lbnVzOiB7fSxcbiAgICAgIG1vdXNlSW5DaGlsZDogZmFsc2VcbiAgICB9O1xuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgb3BlbmVkOiBmdW5jdGlvbiBvcGVuZWQodmFsKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICBpZiAodGhpcy5pc01lbnVQb3B1cCkge1xuICAgICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoXykge1xuICAgICAgICAgIF90aGlzLnVwZGF0ZVBvcHBlcigpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIGNvbXB1dGVkOiB7XG4gICAgLy8gcG9wcGVyIG9wdGlvblxuICAgIGFwcGVuZFRvQm9keTogZnVuY3Rpb24gYXBwZW5kVG9Cb2R5KCkge1xuICAgICAgcmV0dXJuIHRoaXMucG9wcGVyQXBwZW5kVG9Cb2R5ID09PSB1bmRlZmluZWQgPyB0aGlzLmlzRmlyc3RMZXZlbCA6IHRoaXMucG9wcGVyQXBwZW5kVG9Cb2R5O1xuICAgIH0sXG4gICAgbWVudVRyYW5zaXRpb25OYW1lOiBmdW5jdGlvbiBtZW51VHJhbnNpdGlvbk5hbWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb290TWVudS5jb2xsYXBzZSA/ICdlbC16b29tLWluLWxlZnQnIDogJ2VsLXpvb20taW4tdG9wJztcbiAgICB9LFxuICAgIG9wZW5lZDogZnVuY3Rpb24gb3BlbmVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMucm9vdE1lbnUub3BlbmVkTWVudXMuaW5kZXhPZih0aGlzLmluZGV4KSA+IC0xO1xuICAgIH0sXG4gICAgYWN0aXZlOiBmdW5jdGlvbiBhY3RpdmUoKSB7XG4gICAgICB2YXIgaXNBY3RpdmUgPSBmYWxzZTtcbiAgICAgIHZhciBzdWJtZW51cyA9IHRoaXMuc3VibWVudXM7XG4gICAgICB2YXIgaXRlbXMgPSB0aGlzLml0ZW1zO1xuXG4gICAgICBPYmplY3Qua2V5cyhpdGVtcykuZm9yRWFjaChmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgaWYgKGl0ZW1zW2luZGV4XS5hY3RpdmUpIHtcbiAgICAgICAgICBpc0FjdGl2ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBPYmplY3Qua2V5cyhzdWJtZW51cykuZm9yRWFjaChmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgaWYgKHN1Ym1lbnVzW2luZGV4XS5hY3RpdmUpIHtcbiAgICAgICAgICBpc0FjdGl2ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gaXNBY3RpdmU7XG4gICAgfSxcbiAgICBob3ZlckJhY2tncm91bmQ6IGZ1bmN0aW9uIGhvdmVyQmFja2dyb3VuZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJvb3RNZW51LmhvdmVyQmFja2dyb3VuZDtcbiAgICB9LFxuICAgIGJhY2tncm91bmRDb2xvcjogZnVuY3Rpb24gYmFja2dyb3VuZENvbG9yKCkge1xuICAgICAgcmV0dXJuIHRoaXMucm9vdE1lbnUuYmFja2dyb3VuZENvbG9yIHx8ICcnO1xuICAgIH0sXG4gICAgYWN0aXZlVGV4dENvbG9yOiBmdW5jdGlvbiBhY3RpdmVUZXh0Q29sb3IoKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb290TWVudS5hY3RpdmVUZXh0Q29sb3IgfHwgJyc7XG4gICAgfSxcbiAgICB0ZXh0Q29sb3I6IGZ1bmN0aW9uIHRleHRDb2xvcigpIHtcbiAgICAgIHJldHVybiB0aGlzLnJvb3RNZW51LnRleHRDb2xvciB8fCAnJztcbiAgICB9LFxuICAgIG1vZGU6IGZ1bmN0aW9uIG1vZGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb290TWVudS5tb2RlO1xuICAgIH0sXG4gICAgaXNNZW51UG9wdXA6IGZ1bmN0aW9uIGlzTWVudVBvcHVwKCkge1xuICAgICAgcmV0dXJuIHRoaXMucm9vdE1lbnUuaXNNZW51UG9wdXA7XG4gICAgfSxcbiAgICB0aXRsZVN0eWxlOiBmdW5jdGlvbiB0aXRsZVN0eWxlKCkge1xuICAgICAgaWYgKHRoaXMubW9kZSAhPT0gJ2hvcml6b250YWwnKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29sb3I6IHRoaXMudGV4dENvbG9yXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBib3JkZXJCb3R0b21Db2xvcjogdGhpcy5hY3RpdmUgPyB0aGlzLnJvb3RNZW51LmFjdGl2ZVRleHRDb2xvciA/IHRoaXMuYWN0aXZlVGV4dENvbG9yIDogJycgOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICBjb2xvcjogdGhpcy5hY3RpdmUgPyB0aGlzLmFjdGl2ZVRleHRDb2xvciA6IHRoaXMudGV4dENvbG9yXG4gICAgICB9O1xuICAgIH0sXG4gICAgaXNGaXJzdExldmVsOiBmdW5jdGlvbiBpc0ZpcnN0TGV2ZWwoKSB7XG4gICAgICB2YXIgaXNGaXJzdExldmVsID0gdHJ1ZTtcbiAgICAgIHZhciBwYXJlbnQgPSB0aGlzLiRwYXJlbnQ7XG4gICAgICB3aGlsZSAocGFyZW50ICYmIHBhcmVudCAhPT0gdGhpcy5yb290TWVudSkge1xuICAgICAgICBpZiAoWydFbFN1Ym1lbnUnLCAnRWxNZW51SXRlbUdyb3VwJ10uaW5kZXhPZihwYXJlbnQuJG9wdGlvbnMuY29tcG9uZW50TmFtZSkgPiAtMSkge1xuICAgICAgICAgIGlzRmlyc3RMZXZlbCA9IGZhbHNlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhcmVudCA9IHBhcmVudC4kcGFyZW50O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gaXNGaXJzdExldmVsO1xuICAgIH1cbiAgfSxcbiAgbWV0aG9kczoge1xuICAgIGhhbmRsZUNvbGxhcHNlVG9nZ2xlOiBmdW5jdGlvbiBoYW5kbGVDb2xsYXBzZVRvZ2dsZSh2YWx1ZSkge1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuaW5pdFBvcHBlcigpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5kb0Rlc3Ryb3koKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGFkZEl0ZW06IGZ1bmN0aW9uIGFkZEl0ZW0oaXRlbSkge1xuICAgICAgdGhpcy4kc2V0KHRoaXMuaXRlbXMsIGl0ZW0uaW5kZXgsIGl0ZW0pO1xuICAgIH0sXG4gICAgcmVtb3ZlSXRlbTogZnVuY3Rpb24gcmVtb3ZlSXRlbShpdGVtKSB7XG4gICAgICBkZWxldGUgdGhpcy5pdGVtc1tpdGVtLmluZGV4XTtcbiAgICB9LFxuICAgIGFkZFN1Ym1lbnU6IGZ1bmN0aW9uIGFkZFN1Ym1lbnUoaXRlbSkge1xuICAgICAgdGhpcy4kc2V0KHRoaXMuc3VibWVudXMsIGl0ZW0uaW5kZXgsIGl0ZW0pO1xuICAgIH0sXG4gICAgcmVtb3ZlU3VibWVudTogZnVuY3Rpb24gcmVtb3ZlU3VibWVudShpdGVtKSB7XG4gICAgICBkZWxldGUgdGhpcy5zdWJtZW51c1tpdGVtLmluZGV4XTtcbiAgICB9LFxuICAgIGhhbmRsZUNsaWNrOiBmdW5jdGlvbiBoYW5kbGVDbGljaygpIHtcbiAgICAgIHZhciByb290TWVudSA9IHRoaXMucm9vdE1lbnUsXG4gICAgICAgICAgZGlzYWJsZWQgPSB0aGlzLmRpc2FibGVkO1xuXG4gICAgICBpZiAocm9vdE1lbnUubWVudVRyaWdnZXIgPT09ICdob3ZlcicgJiYgcm9vdE1lbnUubW9kZSA9PT0gJ2hvcml6b250YWwnIHx8IHJvb3RNZW51LmNvbGxhcHNlICYmIHJvb3RNZW51Lm1vZGUgPT09ICd2ZXJ0aWNhbCcgfHwgZGlzYWJsZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5kaXNwYXRjaCgnRWxNZW51JywgJ3N1Ym1lbnUtY2xpY2snLCB0aGlzKTtcbiAgICB9LFxuICAgIGhhbmRsZU1vdXNlZW50ZXI6IGZ1bmN0aW9uIGhhbmRsZU1vdXNlZW50ZXIoZXZlbnQpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB2YXIgc2hvd1RpbWVvdXQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHRoaXMuc2hvd1RpbWVvdXQ7XG5cblxuICAgICAgaWYgKCEoJ0FjdGl2ZVhPYmplY3QnIGluIHdpbmRvdykgJiYgZXZlbnQudHlwZSA9PT0gJ2ZvY3VzJyAmJiAhZXZlbnQucmVsYXRlZFRhcmdldCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB2YXIgcm9vdE1lbnUgPSB0aGlzLnJvb3RNZW51LFxuICAgICAgICAgIGRpc2FibGVkID0gdGhpcy5kaXNhYmxlZDtcblxuICAgICAgaWYgKHJvb3RNZW51Lm1lbnVUcmlnZ2VyID09PSAnY2xpY2snICYmIHJvb3RNZW51Lm1vZGUgPT09ICdob3Jpem9udGFsJyB8fCAhcm9vdE1lbnUuY29sbGFwc2UgJiYgcm9vdE1lbnUubW9kZSA9PT0gJ3ZlcnRpY2FsJyB8fCBkaXNhYmxlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmRpc3BhdGNoKCdFbFN1Ym1lbnUnLCAnbW91c2UtZW50ZXItY2hpbGQnKTtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpO1xuICAgICAgdGhpcy50aW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzMi5yb290TWVudS5vcGVuTWVudShfdGhpczIuaW5kZXgsIF90aGlzMi5pbmRleFBhdGgpO1xuICAgICAgfSwgc2hvd1RpbWVvdXQpO1xuXG4gICAgICBpZiAodGhpcy5hcHBlbmRUb0JvZHkpIHtcbiAgICAgICAgdGhpcy4kcGFyZW50LiRlbC5kaXNwYXRjaEV2ZW50KG5ldyBNb3VzZUV2ZW50KCdtb3VzZWVudGVyJykpO1xuICAgICAgfVxuICAgIH0sXG4gICAgaGFuZGxlTW91c2VsZWF2ZTogZnVuY3Rpb24gaGFuZGxlTW91c2VsZWF2ZSgpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgICB2YXIgZGVlcERpc3BhdGNoID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBmYWxzZTtcbiAgICAgIHZhciByb290TWVudSA9IHRoaXMucm9vdE1lbnU7XG5cbiAgICAgIGlmIChyb290TWVudS5tZW51VHJpZ2dlciA9PT0gJ2NsaWNrJyAmJiByb290TWVudS5tb2RlID09PSAnaG9yaXpvbnRhbCcgfHwgIXJvb3RNZW51LmNvbGxhcHNlICYmIHJvb3RNZW51Lm1vZGUgPT09ICd2ZXJ0aWNhbCcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5kaXNwYXRjaCgnRWxTdWJtZW51JywgJ21vdXNlLWxlYXZlLWNoaWxkJyk7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KTtcbiAgICAgIHRoaXMudGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAhX3RoaXMzLm1vdXNlSW5DaGlsZCAmJiBfdGhpczMucm9vdE1lbnUuY2xvc2VNZW51KF90aGlzMy5pbmRleCk7XG4gICAgICB9LCB0aGlzLmhpZGVUaW1lb3V0KTtcblxuICAgICAgaWYgKHRoaXMuYXBwZW5kVG9Cb2R5ICYmIGRlZXBEaXNwYXRjaCkge1xuICAgICAgICBpZiAodGhpcy4kcGFyZW50LiRvcHRpb25zLm5hbWUgPT09ICdFbFN1Ym1lbnUnKSB7XG4gICAgICAgICAgdGhpcy4kcGFyZW50LmhhbmRsZU1vdXNlbGVhdmUodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGhhbmRsZVRpdGxlTW91c2VlbnRlcjogZnVuY3Rpb24gaGFuZGxlVGl0bGVNb3VzZWVudGVyKCkge1xuICAgICAgaWYgKHRoaXMubW9kZSA9PT0gJ2hvcml6b250YWwnICYmICF0aGlzLnJvb3RNZW51LmJhY2tncm91bmRDb2xvcikgcmV0dXJuO1xuICAgICAgdmFyIHRpdGxlID0gdGhpcy4kcmVmc1snc3VibWVudS10aXRsZSddO1xuICAgICAgdGl0bGUgJiYgKHRpdGxlLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMucm9vdE1lbnUuaG92ZXJCYWNrZ3JvdW5kKTtcbiAgICB9LFxuICAgIGhhbmRsZVRpdGxlTW91c2VsZWF2ZTogZnVuY3Rpb24gaGFuZGxlVGl0bGVNb3VzZWxlYXZlKCkge1xuICAgICAgaWYgKHRoaXMubW9kZSA9PT0gJ2hvcml6b250YWwnICYmICF0aGlzLnJvb3RNZW51LmJhY2tncm91bmRDb2xvcikgcmV0dXJuO1xuICAgICAgdmFyIHRpdGxlID0gdGhpcy4kcmVmc1snc3VibWVudS10aXRsZSddO1xuICAgICAgdGl0bGUgJiYgKHRpdGxlLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMucm9vdE1lbnUuYmFja2dyb3VuZENvbG9yIHx8ICcnKTtcbiAgICB9LFxuICAgIHVwZGF0ZVBsYWNlbWVudDogZnVuY3Rpb24gdXBkYXRlUGxhY2VtZW50KCkge1xuICAgICAgdGhpcy5jdXJyZW50UGxhY2VtZW50ID0gdGhpcy5tb2RlID09PSAnaG9yaXpvbnRhbCcgJiYgdGhpcy5pc0ZpcnN0TGV2ZWwgPyAnYm90dG9tLXN0YXJ0JyA6ICdyaWdodC1zdGFydCc7XG4gICAgfSxcbiAgICBpbml0UG9wcGVyOiBmdW5jdGlvbiBpbml0UG9wcGVyKCkge1xuICAgICAgdGhpcy5yZWZlcmVuY2VFbG0gPSB0aGlzLiRlbDtcbiAgICAgIHRoaXMucG9wcGVyRWxtID0gdGhpcy4kcmVmcy5tZW51O1xuICAgICAgdGhpcy51cGRhdGVQbGFjZW1lbnQoKTtcbiAgICB9XG4gIH0sXG4gIGNyZWF0ZWQ6IGZ1bmN0aW9uIGNyZWF0ZWQoKSB7XG4gICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cbiAgICB0aGlzLiRvbigndG9nZ2xlLWNvbGxhcHNlJywgdGhpcy5oYW5kbGVDb2xsYXBzZVRvZ2dsZSk7XG4gICAgdGhpcy4kb24oJ21vdXNlLWVudGVyLWNoaWxkJywgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXM0Lm1vdXNlSW5DaGlsZCA9IHRydWU7XG4gICAgICBjbGVhclRpbWVvdXQoX3RoaXM0LnRpbWVvdXQpO1xuICAgIH0pO1xuICAgIHRoaXMuJG9uKCdtb3VzZS1sZWF2ZS1jaGlsZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzNC5tb3VzZUluQ2hpbGQgPSBmYWxzZTtcbiAgICAgIGNsZWFyVGltZW91dChfdGhpczQudGltZW91dCk7XG4gICAgfSk7XG4gIH0sXG4gIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7XG4gICAgdGhpcy5wYXJlbnRNZW51LmFkZFN1Ym1lbnUodGhpcyk7XG4gICAgdGhpcy5yb290TWVudS5hZGRTdWJtZW51KHRoaXMpO1xuICAgIHRoaXMuaW5pdFBvcHBlcigpO1xuICB9LFxuICBiZWZvcmVEZXN0cm95OiBmdW5jdGlvbiBiZWZvcmVEZXN0cm95KCkge1xuICAgIHRoaXMucGFyZW50TWVudS5yZW1vdmVTdWJtZW51KHRoaXMpO1xuICAgIHRoaXMucm9vdE1lbnUucmVtb3ZlU3VibWVudSh0aGlzKTtcbiAgfSxcbiAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIoaCkge1xuICAgIHZhciBfdGhpczUgPSB0aGlzO1xuXG4gICAgdmFyIGFjdGl2ZSA9IHRoaXMuYWN0aXZlLFxuICAgICAgICBvcGVuZWQgPSB0aGlzLm9wZW5lZCxcbiAgICAgICAgcGFkZGluZ1N0eWxlID0gdGhpcy5wYWRkaW5nU3R5bGUsXG4gICAgICAgIHRpdGxlU3R5bGUgPSB0aGlzLnRpdGxlU3R5bGUsXG4gICAgICAgIGJhY2tncm91bmRDb2xvciA9IHRoaXMuYmFja2dyb3VuZENvbG9yLFxuICAgICAgICByb290TWVudSA9IHRoaXMucm9vdE1lbnUsXG4gICAgICAgIGN1cnJlbnRQbGFjZW1lbnQgPSB0aGlzLmN1cnJlbnRQbGFjZW1lbnQsXG4gICAgICAgIG1lbnVUcmFuc2l0aW9uTmFtZSA9IHRoaXMubWVudVRyYW5zaXRpb25OYW1lLFxuICAgICAgICBtb2RlID0gdGhpcy5tb2RlLFxuICAgICAgICBkaXNhYmxlZCA9IHRoaXMuZGlzYWJsZWQsXG4gICAgICAgIHBvcHBlckNsYXNzID0gdGhpcy5wb3BwZXJDbGFzcyxcbiAgICAgICAgJHNsb3RzID0gdGhpcy4kc2xvdHMsXG4gICAgICAgIGlzRmlyc3RMZXZlbCA9IHRoaXMuaXNGaXJzdExldmVsO1xuXG5cbiAgICB2YXIgcG9wdXBNZW51ID0gaChcbiAgICAgICd0cmFuc2l0aW9uJyxcbiAgICAgIHtcbiAgICAgICAgYXR0cnM6IHsgbmFtZTogbWVudVRyYW5zaXRpb25OYW1lIH1cbiAgICAgIH0sXG4gICAgICBbaChcbiAgICAgICAgJ2RpdicsXG4gICAgICAgIHtcbiAgICAgICAgICByZWY6ICdtZW51JyxcbiAgICAgICAgICBkaXJlY3RpdmVzOiBbe1xuICAgICAgICAgICAgbmFtZTogJ3Nob3cnLFxuICAgICAgICAgICAgdmFsdWU6IG9wZW5lZFxuICAgICAgICAgIH1dLFxuXG4gICAgICAgICAgJ2NsYXNzJzogWydlbC1tZW51LS0nICsgbW9kZSwgcG9wcGVyQ2xhc3NdLFxuICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAnbW91c2VlbnRlcic6IGZ1bmN0aW9uIG1vdXNlZW50ZXIoJGV2ZW50KSB7XG4gICAgICAgICAgICAgIHJldHVybiBfdGhpczUuaGFuZGxlTW91c2VlbnRlcigkZXZlbnQsIDEwMCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ21vdXNlbGVhdmUnOiBmdW5jdGlvbiBtb3VzZWxlYXZlKCkge1xuICAgICAgICAgICAgICByZXR1cm4gX3RoaXM1LmhhbmRsZU1vdXNlbGVhdmUodHJ1ZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ2ZvY3VzJzogZnVuY3Rpb24gZm9jdXMoJGV2ZW50KSB7XG4gICAgICAgICAgICAgIHJldHVybiBfdGhpczUuaGFuZGxlTW91c2VlbnRlcigkZXZlbnQsIDEwMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBbaChcbiAgICAgICAgICAndWwnLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgIHJvbGU6ICdtZW51J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdjbGFzcyc6IFsnZWwtbWVudSBlbC1tZW51LS1wb3B1cCcsICdlbC1tZW51LS1wb3B1cC0nICsgY3VycmVudFBsYWNlbWVudF0sXG4gICAgICAgICAgICBzdHlsZTogeyBiYWNrZ3JvdW5kQ29sb3I6IHJvb3RNZW51LmJhY2tncm91bmRDb2xvciB8fCAnJyB9IH0sXG4gICAgICAgICAgWyRzbG90cy5kZWZhdWx0XVxuICAgICAgICApXVxuICAgICAgKV1cbiAgICApO1xuXG4gICAgdmFyIGlubGluZU1lbnUgPSBoKCdlbC1jb2xsYXBzZS10cmFuc2l0aW9uJywgW2goXG4gICAgICAndWwnLFxuICAgICAge1xuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIHJvbGU6ICdtZW51J1xuICAgICAgICB9LFxuICAgICAgICAnY2xhc3MnOiAnZWwtbWVudSBlbC1tZW51LS1pbmxpbmUnLFxuICAgICAgICBkaXJlY3RpdmVzOiBbe1xuICAgICAgICAgIG5hbWU6ICdzaG93JyxcbiAgICAgICAgICB2YWx1ZTogb3BlbmVkXG4gICAgICAgIH1dLFxuXG4gICAgICAgIHN0eWxlOiB7IGJhY2tncm91bmRDb2xvcjogcm9vdE1lbnUuYmFja2dyb3VuZENvbG9yIHx8ICcnIH0gfSxcbiAgICAgIFskc2xvdHMuZGVmYXVsdF1cbiAgICApXSk7XG5cbiAgICB2YXIgc3VibWVudVRpdGxlSWNvbiA9IHJvb3RNZW51Lm1vZGUgPT09ICdob3Jpem9udGFsJyAmJiBpc0ZpcnN0TGV2ZWwgfHwgcm9vdE1lbnUubW9kZSA9PT0gJ3ZlcnRpY2FsJyAmJiAhcm9vdE1lbnUuY29sbGFwc2UgPyAnZWwtaWNvbi1hcnJvdy1kb3duJyA6ICdlbC1pY29uLWFycm93LXJpZ2h0JztcblxuICAgIHJldHVybiBoKFxuICAgICAgJ2xpJyxcbiAgICAgIHtcbiAgICAgICAgJ2NsYXNzJzoge1xuICAgICAgICAgICdlbC1zdWJtZW51JzogdHJ1ZSxcbiAgICAgICAgICAnaXMtYWN0aXZlJzogYWN0aXZlLFxuICAgICAgICAgICdpcy1vcGVuZWQnOiBvcGVuZWQsXG4gICAgICAgICAgJ2lzLWRpc2FibGVkJzogZGlzYWJsZWRcbiAgICAgICAgfSxcbiAgICAgICAgYXR0cnM6IHsgcm9sZTogJ21lbnVpdGVtJyxcbiAgICAgICAgICAnYXJpYS1oYXNwb3B1cCc6ICd0cnVlJyxcbiAgICAgICAgICAnYXJpYS1leHBhbmRlZCc6IG9wZW5lZFxuICAgICAgICB9LFxuICAgICAgICBvbjoge1xuICAgICAgICAgICdtb3VzZWVudGVyJzogdGhpcy5oYW5kbGVNb3VzZWVudGVyLFxuICAgICAgICAgICdtb3VzZWxlYXZlJzogZnVuY3Rpb24gbW91c2VsZWF2ZSgpIHtcbiAgICAgICAgICAgIHJldHVybiBfdGhpczUuaGFuZGxlTW91c2VsZWF2ZShmYWxzZSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICAnZm9jdXMnOiB0aGlzLmhhbmRsZU1vdXNlZW50ZXJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFtoKFxuICAgICAgICAnZGl2JyxcbiAgICAgICAge1xuICAgICAgICAgICdjbGFzcyc6ICdlbC1zdWJtZW51X190aXRsZScsXG4gICAgICAgICAgcmVmOiAnc3VibWVudS10aXRsZScsXG4gICAgICAgICAgb246IHtcbiAgICAgICAgICAgICdjbGljayc6IHRoaXMuaGFuZGxlQ2xpY2ssXG4gICAgICAgICAgICAnbW91c2VlbnRlcic6IHRoaXMuaGFuZGxlVGl0bGVNb3VzZWVudGVyLFxuICAgICAgICAgICAgJ21vdXNlbGVhdmUnOiB0aGlzLmhhbmRsZVRpdGxlTW91c2VsZWF2ZVxuICAgICAgICAgIH0sXG5cbiAgICAgICAgICBzdHlsZTogW3BhZGRpbmdTdHlsZSwgdGl0bGVTdHlsZSwgeyBiYWNrZ3JvdW5kQ29sb3I6IGJhY2tncm91bmRDb2xvciB9XVxuICAgICAgICB9LFxuICAgICAgICBbJHNsb3RzLnRpdGxlLCBoKCdpJywgeyAnY2xhc3MnOiBbJ2VsLXN1Ym1lbnVfX2ljb24tYXJyb3cnLCBzdWJtZW51VGl0bGVJY29uXSB9KV1cbiAgICAgICksIHRoaXMuaXNNZW51UG9wdXAgPyBwb3B1cE1lbnUgOiBpbmxpbmVNZW51XVxuICAgICk7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9tZW51L3NyYy9zdWJtZW51LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfc3VibWVudXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChzdWJtZW51dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL21lbnUvc3JjL3N1Ym1lbnUudnVlXG52YXIgc3VibWVudV9yZW5kZXIsIHN1Ym1lbnVfc3RhdGljUmVuZGVyRm5zXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIHN1Ym1lbnVfY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBzcmNfc3VibWVudXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgc3VibWVudV9yZW5kZXIsXG4gIHN1Ym1lbnVfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBzdWJtZW51X2FwaTsgfVxuc3VibWVudV9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL21lbnUvc3JjL3N1Ym1lbnUudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHN1Ym1lbnUgPSAoc3VibWVudV9jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3N1Ym1lbnUvaW5kZXguanNcblxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuc3VibWVudS5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuICBWdWUuY29tcG9uZW50KHN1Ym1lbnUubmFtZSwgc3VibWVudSk7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc19zdWJtZW51ID0gKHN1Ym1lbnUpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9tZW51L3NyYy9tZW51LWl0ZW0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTJhNWRiZmVhJlxudmFyIG1lbnVfaXRlbXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzJhNWRiZmVhX3JlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImxpXCIsXG4gICAge1xuICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtbWVudS1pdGVtXCIsXG4gICAgICBjbGFzczoge1xuICAgICAgICBcImlzLWFjdGl2ZVwiOiBfdm0uYWN0aXZlLFxuICAgICAgICBcImlzLWRpc2FibGVkXCI6IF92bS5kaXNhYmxlZFxuICAgICAgfSxcbiAgICAgIHN0eWxlOiBbXG4gICAgICAgIF92bS5wYWRkaW5nU3R5bGUsXG4gICAgICAgIF92bS5pdGVtU3R5bGUsXG4gICAgICAgIHsgYmFja2dyb3VuZENvbG9yOiBfdm0uYmFja2dyb3VuZENvbG9yIH1cbiAgICAgIF0sXG4gICAgICBhdHRyczogeyByb2xlOiBcIm1lbnVpdGVtXCIsIHRhYmluZGV4OiBcIi0xXCIgfSxcbiAgICAgIG9uOiB7XG4gICAgICAgIGNsaWNrOiBfdm0uaGFuZGxlQ2xpY2ssXG4gICAgICAgIG1vdXNlZW50ZXI6IF92bS5vbk1vdXNlRW50ZXIsXG4gICAgICAgIGZvY3VzOiBfdm0ub25Nb3VzZUVudGVyLFxuICAgICAgICBibHVyOiBfdm0ub25Nb3VzZUxlYXZlLFxuICAgICAgICBtb3VzZWxlYXZlOiBfdm0ub25Nb3VzZUxlYXZlXG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICBfdm0ucGFyZW50TWVudS4kb3B0aW9ucy5jb21wb25lbnROYW1lID09PSBcIkVsTWVudVwiICYmXG4gICAgICBfdm0ucm9vdE1lbnUuY29sbGFwc2UgJiZcbiAgICAgIF92bS4kc2xvdHMudGl0bGVcbiAgICAgICAgPyBfYyhcImVsLXRvb2x0aXBcIiwgeyBhdHRyczogeyBlZmZlY3Q6IFwiZGFya1wiLCBwbGFjZW1lbnQ6IFwicmlnaHRcIiB9IH0sIFtcbiAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICB7IGF0dHJzOiB7IHNsb3Q6IFwiY29udGVudFwiIH0sIHNsb3Q6IFwiY29udGVudFwiIH0sXG4gICAgICAgICAgICAgIFtfdm0uX3QoXCJ0aXRsZVwiKV0sXG4gICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7XG4gICAgICAgICAgICAgICAgICBwb3NpdGlvbjogXCJhYnNvbHV0ZVwiLFxuICAgICAgICAgICAgICAgICAgbGVmdDogXCIwXCIsXG4gICAgICAgICAgICAgICAgICB0b3A6IFwiMFwiLFxuICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBcIjEwMCVcIixcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IFwiaW5saW5lLWJsb2NrXCIsXG4gICAgICAgICAgICAgICAgICBcImJveC1zaXppbmdcIjogXCJib3JkZXItYm94XCIsXG4gICAgICAgICAgICAgICAgICBwYWRkaW5nOiBcIjAgMjBweFwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBbX3ZtLl90KFwiZGVmYXVsdFwiKV0sXG4gICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIClcbiAgICAgICAgICBdKVxuICAgICAgICA6IFtfdm0uX3QoXCJkZWZhdWx0XCIpLCBfdm0uX3QoXCJ0aXRsZVwiKV1cbiAgICBdLFxuICAgIDJcbiAgKVxufVxudmFyIG1lbnVfaXRlbXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzJhNWRiZmVhX3N0YXRpY1JlbmRlckZucyA9IFtdXG5tZW51X2l0ZW12dWVfdHlwZV90ZW1wbGF0ZV9pZF8yYTVkYmZlYV9yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL21lbnUvc3JjL21lbnUtaXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MmE1ZGJmZWEmXG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJlbGVtZW50LXVpL2xpYi90b29sdGlwXCJcbnZhciB0b29sdGlwXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjYpO1xudmFyIHRvb2x0aXBfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4odG9vbHRpcF8pO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9tZW51L3NyYy9tZW51LWl0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5cblxuXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIG1lbnVfaXRlbXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG5hbWU6ICdFbE1lbnVJdGVtJyxcblxuICBjb21wb25lbnROYW1lOiAnRWxNZW51SXRlbScsXG5cbiAgbWl4aW5zOiBbbWVudV9taXhpbiwgZW1pdHRlcl9kZWZhdWx0LmFdLFxuXG4gIGNvbXBvbmVudHM6IHsgRWxUb29sdGlwOiB0b29sdGlwX2RlZmF1bHQuYSB9LFxuXG4gIHByb3BzOiB7XG4gICAgaW5kZXg6IHtcbiAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICB2YWxpZGF0b3I6IGZ1bmN0aW9uIHZhbGlkYXRvcih2YWwpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnIHx8IHZhbCA9PT0gbnVsbDtcbiAgICAgIH1cbiAgICB9LFxuICAgIHJvdXRlOiBbU3RyaW5nLCBPYmplY3RdLFxuICAgIGRpc2FibGVkOiBCb29sZWFuXG4gIH0sXG4gIGNvbXB1dGVkOiB7XG4gICAgYWN0aXZlOiBmdW5jdGlvbiBhY3RpdmUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbmRleCA9PT0gdGhpcy5yb290TWVudS5hY3RpdmVJbmRleDtcbiAgICB9LFxuICAgIGhvdmVyQmFja2dyb3VuZDogZnVuY3Rpb24gaG92ZXJCYWNrZ3JvdW5kKCkge1xuICAgICAgcmV0dXJuIHRoaXMucm9vdE1lbnUuaG92ZXJCYWNrZ3JvdW5kO1xuICAgIH0sXG4gICAgYmFja2dyb3VuZENvbG9yOiBmdW5jdGlvbiBiYWNrZ3JvdW5kQ29sb3IoKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb290TWVudS5iYWNrZ3JvdW5kQ29sb3IgfHwgJyc7XG4gICAgfSxcbiAgICBhY3RpdmVUZXh0Q29sb3I6IGZ1bmN0aW9uIGFjdGl2ZVRleHRDb2xvcigpIHtcbiAgICAgIHJldHVybiB0aGlzLnJvb3RNZW51LmFjdGl2ZVRleHRDb2xvciB8fCAnJztcbiAgICB9LFxuICAgIHRleHRDb2xvcjogZnVuY3Rpb24gdGV4dENvbG9yKCkge1xuICAgICAgcmV0dXJuIHRoaXMucm9vdE1lbnUudGV4dENvbG9yIHx8ICcnO1xuICAgIH0sXG4gICAgbW9kZTogZnVuY3Rpb24gbW9kZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJvb3RNZW51Lm1vZGU7XG4gICAgfSxcbiAgICBpdGVtU3R5bGU6IGZ1bmN0aW9uIGl0ZW1TdHlsZSgpIHtcbiAgICAgIHZhciBzdHlsZSA9IHtcbiAgICAgICAgY29sb3I6IHRoaXMuYWN0aXZlID8gdGhpcy5hY3RpdmVUZXh0Q29sb3IgOiB0aGlzLnRleHRDb2xvclxuICAgICAgfTtcbiAgICAgIGlmICh0aGlzLm1vZGUgPT09ICdob3Jpem9udGFsJyAmJiAhdGhpcy5pc05lc3RlZCkge1xuICAgICAgICBzdHlsZS5ib3JkZXJCb3R0b21Db2xvciA9IHRoaXMuYWN0aXZlID8gdGhpcy5yb290TWVudS5hY3RpdmVUZXh0Q29sb3IgPyB0aGlzLmFjdGl2ZVRleHRDb2xvciA6ICcnIDogJ3RyYW5zcGFyZW50JztcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdHlsZTtcbiAgICB9LFxuICAgIGlzTmVzdGVkOiBmdW5jdGlvbiBpc05lc3RlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnBhcmVudE1lbnUgIT09IHRoaXMucm9vdE1lbnU7XG4gICAgfVxuICB9LFxuICBtZXRob2RzOiB7XG4gICAgb25Nb3VzZUVudGVyOiBmdW5jdGlvbiBvbk1vdXNlRW50ZXIoKSB7XG4gICAgICBpZiAodGhpcy5tb2RlID09PSAnaG9yaXpvbnRhbCcgJiYgIXRoaXMucm9vdE1lbnUuYmFja2dyb3VuZENvbG9yKSByZXR1cm47XG4gICAgICB0aGlzLiRlbC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSB0aGlzLmhvdmVyQmFja2dyb3VuZDtcbiAgICB9LFxuICAgIG9uTW91c2VMZWF2ZTogZnVuY3Rpb24gb25Nb3VzZUxlYXZlKCkge1xuICAgICAgaWYgKHRoaXMubW9kZSA9PT0gJ2hvcml6b250YWwnICYmICF0aGlzLnJvb3RNZW51LmJhY2tncm91bmRDb2xvcikgcmV0dXJuO1xuICAgICAgdGhpcy4kZWwuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGhpcy5iYWNrZ3JvdW5kQ29sb3I7XG4gICAgfSxcbiAgICBoYW5kbGVDbGljazogZnVuY3Rpb24gaGFuZGxlQ2xpY2soKSB7XG4gICAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaCgnRWxNZW51JywgJ2l0ZW0tY2xpY2snLCB0aGlzKTtcbiAgICAgICAgdGhpcy4kZW1pdCgnY2xpY2snLCB0aGlzKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7XG4gICAgdGhpcy5wYXJlbnRNZW51LmFkZEl0ZW0odGhpcyk7XG4gICAgdGhpcy5yb290TWVudS5hZGRJdGVtKHRoaXMpO1xuICB9LFxuICBiZWZvcmVEZXN0cm95OiBmdW5jdGlvbiBiZWZvcmVEZXN0cm95KCkge1xuICAgIHRoaXMucGFyZW50TWVudS5yZW1vdmVJdGVtKHRoaXMpO1xuICAgIHRoaXMucm9vdE1lbnUucmVtb3ZlSXRlbSh0aGlzKTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL21lbnUvc3JjL21lbnUtaXRlbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX21lbnVfaXRlbXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChtZW51X2l0ZW12dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvbWVudS9zcmMvbWVudS1pdGVtLnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIG1lbnVfaXRlbV9jb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIHNyY19tZW51X2l0ZW12dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIG1lbnVfaXRlbXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzJhNWRiZmVhX3JlbmRlcixcbiAgbWVudV9pdGVtdnVlX3R5cGVfdGVtcGxhdGVfaWRfMmE1ZGJmZWFfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBtZW51X2l0ZW1fYXBpOyB9XG5tZW51X2l0ZW1fY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy9tZW51L3NyYy9tZW51LWl0ZW0udnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIG1lbnVfaXRlbSA9IChtZW51X2l0ZW1fY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9tZW51LWl0ZW0vaW5kZXguanNcblxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xubWVudV9pdGVtLmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG4gIFZ1ZS5jb21wb25lbnQobWVudV9pdGVtLm5hbWUsIG1lbnVfaXRlbSk7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc19tZW51X2l0ZW0gPSAobWVudV9pdGVtKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvbWVudS9zcmMvbWVudS1pdGVtLWdyb3VwLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01NDNiN2JkYyZcbnZhciBtZW51X2l0ZW1fZ3JvdXB2dWVfdHlwZV90ZW1wbGF0ZV9pZF81NDNiN2JkY19yZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJsaVwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLW1lbnUtaXRlbS1ncm91cFwiIH0sIFtcbiAgICBfYyhcbiAgICAgIFwiZGl2XCIsXG4gICAgICB7XG4gICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLW1lbnUtaXRlbS1ncm91cF9fdGl0bGVcIixcbiAgICAgICAgc3R5bGU6IHsgcGFkZGluZ0xlZnQ6IF92bS5sZXZlbFBhZGRpbmcgKyBcInB4XCIgfVxuICAgICAgfSxcbiAgICAgIFshX3ZtLiRzbG90cy50aXRsZSA/IFtfdm0uX3YoX3ZtLl9zKF92bS50aXRsZSkpXSA6IF92bS5fdChcInRpdGxlXCIpXSxcbiAgICAgIDJcbiAgICApLFxuICAgIF9jKFwidWxcIiwgW192bS5fdChcImRlZmF1bHRcIildLCAyKVxuICBdKVxufVxudmFyIG1lbnVfaXRlbV9ncm91cHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzU0M2I3YmRjX3N0YXRpY1JlbmRlckZucyA9IFtdXG5tZW51X2l0ZW1fZ3JvdXB2dWVfdHlwZV90ZW1wbGF0ZV9pZF81NDNiN2JkY19yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL21lbnUvc3JjL21lbnUtaXRlbS1ncm91cC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NTQzYjdiZGMmXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL21lbnUvc3JjL21lbnUtaXRlbS1ncm91cC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgbWVudV9pdGVtX2dyb3VwdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbmFtZTogJ0VsTWVudUl0ZW1Hcm91cCcsXG5cbiAgY29tcG9uZW50TmFtZTogJ0VsTWVudUl0ZW1Hcm91cCcsXG5cbiAgaW5qZWN0OiBbJ3Jvb3RNZW51J10sXG4gIHByb3BzOiB7XG4gICAgdGl0bGU6IHtcbiAgICAgIHR5cGU6IFN0cmluZ1xuICAgIH1cbiAgfSxcbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGFkZGluZ0xlZnQ6IDIwXG4gICAgfTtcbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGxldmVsUGFkZGluZzogZnVuY3Rpb24gbGV2ZWxQYWRkaW5nKCkge1xuICAgICAgdmFyIHBhZGRpbmcgPSAyMDtcbiAgICAgIHZhciBwYXJlbnQgPSB0aGlzLiRwYXJlbnQ7XG4gICAgICBpZiAodGhpcy5yb290TWVudS5jb2xsYXBzZSkgcmV0dXJuIDIwO1xuICAgICAgd2hpbGUgKHBhcmVudCAmJiBwYXJlbnQuJG9wdGlvbnMuY29tcG9uZW50TmFtZSAhPT0gJ0VsTWVudScpIHtcbiAgICAgICAgaWYgKHBhcmVudC4kb3B0aW9ucy5jb21wb25lbnROYW1lID09PSAnRWxTdWJtZW51Jykge1xuICAgICAgICAgIHBhZGRpbmcgKz0gMjA7XG4gICAgICAgIH1cbiAgICAgICAgcGFyZW50ID0gcGFyZW50LiRwYXJlbnQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gcGFkZGluZztcbiAgICB9XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9tZW51L3NyYy9tZW51LWl0ZW0tZ3JvdXAudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY19tZW51X2l0ZW1fZ3JvdXB2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAobWVudV9pdGVtX2dyb3VwdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL21lbnUvc3JjL21lbnUtaXRlbS1ncm91cC52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBtZW51X2l0ZW1fZ3JvdXBfY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBzcmNfbWVudV9pdGVtX2dyb3VwdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICBtZW51X2l0ZW1fZ3JvdXB2dWVfdHlwZV90ZW1wbGF0ZV9pZF81NDNiN2JkY19yZW5kZXIsXG4gIG1lbnVfaXRlbV9ncm91cHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzU0M2I3YmRjX3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgbWVudV9pdGVtX2dyb3VwX2FwaTsgfVxubWVudV9pdGVtX2dyb3VwX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvbWVudS9zcmMvbWVudS1pdGVtLWdyb3VwLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBtZW51X2l0ZW1fZ3JvdXAgPSAobWVudV9pdGVtX2dyb3VwX2NvbXBvbmVudC5leHBvcnRzKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvbWVudS1pdGVtLWdyb3VwL2luZGV4LmpzXG5cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbm1lbnVfaXRlbV9ncm91cC5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuICBWdWUuY29tcG9uZW50KG1lbnVfaXRlbV9ncm91cC5uYW1lLCBtZW51X2l0ZW1fZ3JvdXApO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcGFja2FnZXNfbWVudV9pdGVtX2dyb3VwID0gKG1lbnVfaXRlbV9ncm91cCk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2lucHV0L3NyYy9pbnB1dC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MzQzZGQ3NzQmXG52YXIgaW5wdXR2dWVfdHlwZV90ZW1wbGF0ZV9pZF8zNDNkZDc3NF9yZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICB7XG4gICAgICBjbGFzczogW1xuICAgICAgICBfdm0udHlwZSA9PT0gXCJ0ZXh0YXJlYVwiID8gXCJlbC10ZXh0YXJlYVwiIDogXCJlbC1pbnB1dFwiLFxuICAgICAgICBfdm0uaW5wdXRTaXplID8gXCJlbC1pbnB1dC0tXCIgKyBfdm0uaW5wdXRTaXplIDogXCJcIixcbiAgICAgICAge1xuICAgICAgICAgIFwiaXMtZGlzYWJsZWRcIjogX3ZtLmlucHV0RGlzYWJsZWQsXG4gICAgICAgICAgXCJpcy1leGNlZWRcIjogX3ZtLmlucHV0RXhjZWVkLFxuICAgICAgICAgIFwiZWwtaW5wdXQtZ3JvdXBcIjogX3ZtLiRzbG90cy5wcmVwZW5kIHx8IF92bS4kc2xvdHMuYXBwZW5kLFxuICAgICAgICAgIFwiZWwtaW5wdXQtZ3JvdXAtLWFwcGVuZFwiOiBfdm0uJHNsb3RzLmFwcGVuZCxcbiAgICAgICAgICBcImVsLWlucHV0LWdyb3VwLS1wcmVwZW5kXCI6IF92bS4kc2xvdHMucHJlcGVuZCxcbiAgICAgICAgICBcImVsLWlucHV0LS1wcmVmaXhcIjogX3ZtLiRzbG90cy5wcmVmaXggfHwgX3ZtLnByZWZpeEljb24sXG4gICAgICAgICAgXCJlbC1pbnB1dC0tc3VmZml4XCI6XG4gICAgICAgICAgICBfdm0uJHNsb3RzLnN1ZmZpeCB8fFxuICAgICAgICAgICAgX3ZtLnN1ZmZpeEljb24gfHxcbiAgICAgICAgICAgIF92bS5jbGVhcmFibGUgfHxcbiAgICAgICAgICAgIF92bS5zaG93UGFzc3dvcmRcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIG9uOiB7XG4gICAgICAgIG1vdXNlZW50ZXI6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgIF92bS5ob3ZlcmluZyA9IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgbW91c2VsZWF2ZTogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgX3ZtLmhvdmVyaW5nID0gZmFsc2VcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgW1xuICAgICAgX3ZtLnR5cGUgIT09IFwidGV4dGFyZWFcIlxuICAgICAgICA/IFtcbiAgICAgICAgICAgIF92bS4kc2xvdHMucHJlcGVuZFxuICAgICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwiZWwtaW5wdXQtZ3JvdXBfX3ByZXBlbmRcIiB9LFxuICAgICAgICAgICAgICAgICAgW192bS5fdChcInByZXBlbmRcIildLFxuICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgIF92bS50eXBlICE9PSBcInRleHRhcmVhXCJcbiAgICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICAgIFwiaW5wdXRcIixcbiAgICAgICAgICAgICAgICAgIF92bS5fYihcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIHJlZjogXCJpbnB1dFwiLFxuICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWlucHV0X19pbm5lclwiLFxuICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleDogX3ZtLnRhYmluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogX3ZtLnNob3dQYXNzd29yZFxuICAgICAgICAgICAgICAgICAgICAgICAgICA/IF92bS5wYXNzd29yZFZpc2libGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcInBhc3N3b3JkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfdm0udHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBfdm0uaW5wdXREaXNhYmxlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRvbmx5OiBfdm0ucmVhZG9ubHksXG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU6IF92bS5hdXRvQ29tcGxldGUgfHwgX3ZtLmF1dG9jb21wbGV0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBfdm0ubGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGlvbnN0YXJ0OiBfdm0uaGFuZGxlQ29tcG9zaXRpb25TdGFydCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvc2l0aW9udXBkYXRlOiBfdm0uaGFuZGxlQ29tcG9zaXRpb25VcGRhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGlvbmVuZDogX3ZtLmhhbmRsZUNvbXBvc2l0aW9uRW5kLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQ6IF92bS5oYW5kbGVJbnB1dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzOiBfdm0uaGFuZGxlRm9jdXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBibHVyOiBfdm0uaGFuZGxlQmx1cixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZTogX3ZtLmhhbmRsZUNoYW5nZVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgXCJpbnB1dFwiLFxuICAgICAgICAgICAgICAgICAgICBfdm0uJGF0dHJzLFxuICAgICAgICAgICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgIF92bS4kc2xvdHMucHJlZml4IHx8IF92bS5wcmVmaXhJY29uXG4gICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwiZWwtaW5wdXRfX3ByZWZpeFwiIH0sXG4gICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIF92bS5fdChcInByZWZpeFwiKSxcbiAgICAgICAgICAgICAgICAgICAgX3ZtLnByZWZpeEljb25cbiAgICAgICAgICAgICAgICAgICAgICA/IF9jKFwiaVwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWlucHV0X19pY29uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0ucHJlZml4SWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgIF92bS5nZXRTdWZmaXhWaXNpYmxlKClcbiAgICAgICAgICAgICAgPyBfYyhcInNwYW5cIiwgeyBzdGF0aWNDbGFzczogXCJlbC1pbnB1dF9fc3VmZml4XCIgfSwgW1xuICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiBcImVsLWlucHV0X19zdWZmaXgtaW5uZXJcIiB9LFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgIV92bS5zaG93Q2xlYXIgfHxcbiAgICAgICAgICAgICAgICAgICAgICAhX3ZtLnNob3dQd2RWaXNpYmxlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgIV92bS5pc1dvcmRMaW1pdFZpc2libGVcbiAgICAgICAgICAgICAgICAgICAgICAgID8gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdChcInN1ZmZpeFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uc3VmZml4SWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBfYyhcImlcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWlucHV0X19pY29uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IF92bS5zdWZmaXhJY29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgICAgICAgICAgX3ZtLnNob3dDbGVhclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBfYyhcImlcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlbC1pbnB1dF9faWNvbiBlbC1pY29uLWNpcmNsZS1jbG9zZSBlbC1pbnB1dF9fY2xlYXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW91c2Vkb3duOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogX3ZtLmNsZWFyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgICAgICAgICBfdm0uc2hvd1B3ZFZpc2libGVcbiAgICAgICAgICAgICAgICAgICAgICAgID8gX2MoXCJpXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZWwtaW5wdXRfX2ljb24gZWwtaWNvbi12aWV3IGVsLWlucHV0X19jbGVhclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0uaGFuZGxlUGFzc3dvcmRWaXNpYmxlIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgICAgICAgICAgX3ZtLmlzV29yZExpbWl0VmlzaWJsZVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBfYyhcInNwYW5cIiwgeyBzdGF0aWNDbGFzczogXCJlbC1pbnB1dF9fY291bnRcIiB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwiZWwtaW5wdXRfX2NvdW50LWlubmVyXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICAgICAgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl9zKF92bS50ZXh0TGVuZ3RoKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIi9cIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3MoX3ZtLnVwcGVyTGltaXQpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBfdm0udmFsaWRhdGVTdGF0ZVxuICAgICAgICAgICAgICAgICAgICA/IF9jKFwiaVwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1pbnB1dF9faWNvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IFtcImVsLWlucHV0X192YWxpZGF0ZUljb25cIiwgX3ZtLnZhbGlkYXRlSWNvbl1cbiAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgIF92bS4kc2xvdHMuYXBwZW5kXG4gICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJlbC1pbnB1dC1ncm91cF9fYXBwZW5kXCIgfSxcbiAgICAgICAgICAgICAgICAgIFtfdm0uX3QoXCJhcHBlbmRcIildLFxuICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICAgIF1cbiAgICAgICAgOiBfYyhcbiAgICAgICAgICAgIFwidGV4dGFyZWFcIixcbiAgICAgICAgICAgIF92bS5fYihcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJlZjogXCJ0ZXh0YXJlYVwiLFxuICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXRleHRhcmVhX19pbm5lclwiLFxuICAgICAgICAgICAgICAgIHN0eWxlOiBfdm0udGV4dGFyZWFTdHlsZSxcbiAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgdGFiaW5kZXg6IF92bS50YWJpbmRleCxcbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBfdm0uaW5wdXREaXNhYmxlZCxcbiAgICAgICAgICAgICAgICAgIHJlYWRvbmx5OiBfdm0ucmVhZG9ubHksXG4gICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU6IF92bS5hdXRvQ29tcGxldGUgfHwgX3ZtLmF1dG9jb21wbGV0ZSxcbiAgICAgICAgICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBfdm0ubGFiZWxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICBjb21wb3NpdGlvbnN0YXJ0OiBfdm0uaGFuZGxlQ29tcG9zaXRpb25TdGFydCxcbiAgICAgICAgICAgICAgICAgIGNvbXBvc2l0aW9udXBkYXRlOiBfdm0uaGFuZGxlQ29tcG9zaXRpb25VcGRhdGUsXG4gICAgICAgICAgICAgICAgICBjb21wb3NpdGlvbmVuZDogX3ZtLmhhbmRsZUNvbXBvc2l0aW9uRW5kLFxuICAgICAgICAgICAgICAgICAgaW5wdXQ6IF92bS5oYW5kbGVJbnB1dCxcbiAgICAgICAgICAgICAgICAgIGZvY3VzOiBfdm0uaGFuZGxlRm9jdXMsXG4gICAgICAgICAgICAgICAgICBibHVyOiBfdm0uaGFuZGxlQmx1cixcbiAgICAgICAgICAgICAgICAgIGNoYW5nZTogX3ZtLmhhbmRsZUNoYW5nZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXCJ0ZXh0YXJlYVwiLFxuICAgICAgICAgICAgICBfdm0uJGF0dHJzLFxuICAgICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICAgKVxuICAgICAgICAgICksXG4gICAgICBfdm0uaXNXb3JkTGltaXRWaXNpYmxlICYmIF92bS50eXBlID09PSBcInRleHRhcmVhXCJcbiAgICAgICAgPyBfYyhcInNwYW5cIiwgeyBzdGF0aWNDbGFzczogXCJlbC1pbnB1dF9fY291bnRcIiB9LCBbXG4gICAgICAgICAgICBfdm0uX3YoX3ZtLl9zKF92bS50ZXh0TGVuZ3RoKSArIFwiL1wiICsgX3ZtLl9zKF92bS51cHBlckxpbWl0KSlcbiAgICAgICAgICBdKVxuICAgICAgICA6IF92bS5fZSgpXG4gICAgXSxcbiAgICAyXG4gIClcbn1cbnZhciBpbnB1dHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzM0M2RkNzc0X3N0YXRpY1JlbmRlckZucyA9IFtdXG5pbnB1dHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzM0M2RkNzc0X3JlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvaW5wdXQvc3JjL2lucHV0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zNDNkZDc3NCZcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9pbnB1dC9zcmMvY2FsY1RleHRhcmVhSGVpZ2h0LmpzXG52YXIgaGlkZGVuVGV4dGFyZWEgPSB2b2lkIDA7XG5cbnZhciBISURERU5fU1RZTEUgPSAnXFxuICBoZWlnaHQ6MCAhaW1wb3J0YW50O1xcbiAgdmlzaWJpbGl0eTpoaWRkZW4gIWltcG9ydGFudDtcXG4gIG92ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50O1xcbiAgcG9zaXRpb246YWJzb2x1dGUgIWltcG9ydGFudDtcXG4gIHotaW5kZXg6LTEwMDAgIWltcG9ydGFudDtcXG4gIHRvcDowICFpbXBvcnRhbnQ7XFxuICByaWdodDowICFpbXBvcnRhbnRcXG4nO1xuXG52YXIgQ09OVEVYVF9TVFlMRSA9IFsnbGV0dGVyLXNwYWNpbmcnLCAnbGluZS1oZWlnaHQnLCAncGFkZGluZy10b3AnLCAncGFkZGluZy1ib3R0b20nLCAnZm9udC1mYW1pbHknLCAnZm9udC13ZWlnaHQnLCAnZm9udC1zaXplJywgJ3RleHQtcmVuZGVyaW5nJywgJ3RleHQtdHJhbnNmb3JtJywgJ3dpZHRoJywgJ3RleHQtaW5kZW50JywgJ3BhZGRpbmctbGVmdCcsICdwYWRkaW5nLXJpZ2h0JywgJ2JvcmRlci13aWR0aCcsICdib3gtc2l6aW5nJ107XG5cbmZ1bmN0aW9uIGNhbGN1bGF0ZU5vZGVTdHlsaW5nKHRhcmdldEVsZW1lbnQpIHtcbiAgdmFyIHN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUodGFyZ2V0RWxlbWVudCk7XG5cbiAgdmFyIGJveFNpemluZyA9IHN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ2JveC1zaXppbmcnKTtcblxuICB2YXIgcGFkZGluZ1NpemUgPSBwYXJzZUZsb2F0KHN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ3BhZGRpbmctYm90dG9tJykpICsgcGFyc2VGbG9hdChzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCdwYWRkaW5nLXRvcCcpKTtcblxuICB2YXIgYm9yZGVyU2l6ZSA9IHBhcnNlRmxvYXQoc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgnYm9yZGVyLWJvdHRvbS13aWR0aCcpKSArIHBhcnNlRmxvYXQoc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgnYm9yZGVyLXRvcC13aWR0aCcpKTtcblxuICB2YXIgY29udGV4dFN0eWxlID0gQ09OVEVYVF9TVFlMRS5tYXAoZnVuY3Rpb24gKG5hbWUpIHtcbiAgICByZXR1cm4gbmFtZSArICc6JyArIHN0eWxlLmdldFByb3BlcnR5VmFsdWUobmFtZSk7XG4gIH0pLmpvaW4oJzsnKTtcblxuICByZXR1cm4geyBjb250ZXh0U3R5bGU6IGNvbnRleHRTdHlsZSwgcGFkZGluZ1NpemU6IHBhZGRpbmdTaXplLCBib3JkZXJTaXplOiBib3JkZXJTaXplLCBib3hTaXppbmc6IGJveFNpemluZyB9O1xufVxuXG5mdW5jdGlvbiBjYWxjVGV4dGFyZWFIZWlnaHQodGFyZ2V0RWxlbWVudCkge1xuICB2YXIgbWluUm93cyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogMTtcbiAgdmFyIG1heFJvd3MgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IG51bGw7XG5cbiAgaWYgKCFoaWRkZW5UZXh0YXJlYSkge1xuICAgIGhpZGRlblRleHRhcmVhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGV4dGFyZWEnKTtcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGhpZGRlblRleHRhcmVhKTtcbiAgfVxuXG4gIHZhciBfY2FsY3VsYXRlTm9kZVN0eWxpbmcgPSBjYWxjdWxhdGVOb2RlU3R5bGluZyh0YXJnZXRFbGVtZW50KSxcbiAgICAgIHBhZGRpbmdTaXplID0gX2NhbGN1bGF0ZU5vZGVTdHlsaW5nLnBhZGRpbmdTaXplLFxuICAgICAgYm9yZGVyU2l6ZSA9IF9jYWxjdWxhdGVOb2RlU3R5bGluZy5ib3JkZXJTaXplLFxuICAgICAgYm94U2l6aW5nID0gX2NhbGN1bGF0ZU5vZGVTdHlsaW5nLmJveFNpemluZyxcbiAgICAgIGNvbnRleHRTdHlsZSA9IF9jYWxjdWxhdGVOb2RlU3R5bGluZy5jb250ZXh0U3R5bGU7XG5cbiAgaGlkZGVuVGV4dGFyZWEuc2V0QXR0cmlidXRlKCdzdHlsZScsIGNvbnRleHRTdHlsZSArICc7JyArIEhJRERFTl9TVFlMRSk7XG4gIGhpZGRlblRleHRhcmVhLnZhbHVlID0gdGFyZ2V0RWxlbWVudC52YWx1ZSB8fCB0YXJnZXRFbGVtZW50LnBsYWNlaG9sZGVyIHx8ICcnO1xuXG4gIHZhciBoZWlnaHQgPSBoaWRkZW5UZXh0YXJlYS5zY3JvbGxIZWlnaHQ7XG4gIHZhciByZXN1bHQgPSB7fTtcblxuICBpZiAoYm94U2l6aW5nID09PSAnYm9yZGVyLWJveCcpIHtcbiAgICBoZWlnaHQgPSBoZWlnaHQgKyBib3JkZXJTaXplO1xuICB9IGVsc2UgaWYgKGJveFNpemluZyA9PT0gJ2NvbnRlbnQtYm94Jykge1xuICAgIGhlaWdodCA9IGhlaWdodCAtIHBhZGRpbmdTaXplO1xuICB9XG5cbiAgaGlkZGVuVGV4dGFyZWEudmFsdWUgPSAnJztcbiAgdmFyIHNpbmdsZVJvd0hlaWdodCA9IGhpZGRlblRleHRhcmVhLnNjcm9sbEhlaWdodCAtIHBhZGRpbmdTaXplO1xuXG4gIGlmIChtaW5Sb3dzICE9PSBudWxsKSB7XG4gICAgdmFyIG1pbkhlaWdodCA9IHNpbmdsZVJvd0hlaWdodCAqIG1pblJvd3M7XG4gICAgaWYgKGJveFNpemluZyA9PT0gJ2JvcmRlci1ib3gnKSB7XG4gICAgICBtaW5IZWlnaHQgPSBtaW5IZWlnaHQgKyBwYWRkaW5nU2l6ZSArIGJvcmRlclNpemU7XG4gICAgfVxuICAgIGhlaWdodCA9IE1hdGgubWF4KG1pbkhlaWdodCwgaGVpZ2h0KTtcbiAgICByZXN1bHQubWluSGVpZ2h0ID0gbWluSGVpZ2h0ICsgJ3B4JztcbiAgfVxuICBpZiAobWF4Um93cyAhPT0gbnVsbCkge1xuICAgIHZhciBtYXhIZWlnaHQgPSBzaW5nbGVSb3dIZWlnaHQgKiBtYXhSb3dzO1xuICAgIGlmIChib3hTaXppbmcgPT09ICdib3JkZXItYm94Jykge1xuICAgICAgbWF4SGVpZ2h0ID0gbWF4SGVpZ2h0ICsgcGFkZGluZ1NpemUgKyBib3JkZXJTaXplO1xuICAgIH1cbiAgICBoZWlnaHQgPSBNYXRoLm1pbihtYXhIZWlnaHQsIGhlaWdodCk7XG4gIH1cbiAgcmVzdWx0LmhlaWdodCA9IGhlaWdodCArICdweCc7XG4gIGhpZGRlblRleHRhcmVhLnBhcmVudE5vZGUgJiYgaGlkZGVuVGV4dGFyZWEucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChoaWRkZW5UZXh0YXJlYSk7XG4gIGhpZGRlblRleHRhcmVhID0gbnVsbDtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiZWxlbWVudC11aS9saWIvdXRpbHMvbWVyZ2VcIlxudmFyIG1lcmdlXyA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XG52YXIgbWVyZ2VfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4obWVyZ2VfKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcImVsZW1lbnQtdWkvbGliL3V0aWxzL3NoYXJlZFwiXG52YXIgc2hhcmVkXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTkpO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9pbnB1dC9zcmMvaW5wdXQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuXG5cblxuXG5cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgaW5wdXR2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBuYW1lOiAnRWxJbnB1dCcsXG5cbiAgY29tcG9uZW50TmFtZTogJ0VsSW5wdXQnLFxuXG4gIG1peGluczogW2VtaXR0ZXJfZGVmYXVsdC5hLCBtaWdyYXRpbmdfZGVmYXVsdC5hXSxcblxuICBpbmhlcml0QXR0cnM6IGZhbHNlLFxuXG4gIGluamVjdDoge1xuICAgIGVsRm9ybToge1xuICAgICAgZGVmYXVsdDogJydcbiAgICB9LFxuICAgIGVsRm9ybUl0ZW06IHtcbiAgICAgIGRlZmF1bHQ6ICcnXG4gICAgfVxuICB9LFxuXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRleHRhcmVhQ2FsY1N0eWxlOiB7fSxcbiAgICAgIGhvdmVyaW5nOiBmYWxzZSxcbiAgICAgIGZvY3VzZWQ6IGZhbHNlLFxuICAgICAgaXNDb21wb3Npbmc6IGZhbHNlLFxuICAgICAgcGFzc3dvcmRWaXNpYmxlOiBmYWxzZVxuICAgIH07XG4gIH0sXG5cblxuICBwcm9wczoge1xuICAgIHZhbHVlOiBbU3RyaW5nLCBOdW1iZXJdLFxuICAgIHNpemU6IFN0cmluZyxcbiAgICByZXNpemU6IFN0cmluZyxcbiAgICBmb3JtOiBTdHJpbmcsXG4gICAgZGlzYWJsZWQ6IEJvb2xlYW4sXG4gICAgcmVhZG9ubHk6IEJvb2xlYW4sXG4gICAgdHlwZToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ3RleHQnXG4gICAgfSxcbiAgICBhdXRvc2l6ZToge1xuICAgICAgdHlwZTogW0Jvb2xlYW4sIE9iamVjdF0sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0sXG4gICAgYXV0b2NvbXBsZXRlOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnb2ZmJ1xuICAgIH0sXG4gICAgLyoqIEBEZXByZWNhdGVkIGluIG5leHQgbWFqb3IgdmVyc2lvbiAqL1xuICAgIGF1dG9Db21wbGV0ZToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgdmFsaWRhdG9yOiBmdW5jdGlvbiB2YWxpZGF0b3IodmFsKSB7XG4gICAgICAgICBmYWxzZSAmJiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSxcbiAgICB2YWxpZGF0ZUV2ZW50OiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0sXG4gICAgc3VmZml4SWNvbjogU3RyaW5nLFxuICAgIHByZWZpeEljb246IFN0cmluZyxcbiAgICBsYWJlbDogU3RyaW5nLFxuICAgIGNsZWFyYWJsZToge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSxcbiAgICBzaG93UGFzc3dvcmQ6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0sXG4gICAgc2hvd1dvcmRMaW1pdDoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSxcbiAgICB0YWJpbmRleDogU3RyaW5nXG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBfZWxGb3JtSXRlbVNpemU6IGZ1bmN0aW9uIF9lbEZvcm1JdGVtU2l6ZSgpIHtcbiAgICAgIHJldHVybiAodGhpcy5lbEZvcm1JdGVtIHx8IHt9KS5lbEZvcm1JdGVtU2l6ZTtcbiAgICB9LFxuICAgIHZhbGlkYXRlU3RhdGU6IGZ1bmN0aW9uIHZhbGlkYXRlU3RhdGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbEZvcm1JdGVtID8gdGhpcy5lbEZvcm1JdGVtLnZhbGlkYXRlU3RhdGUgOiAnJztcbiAgICB9LFxuICAgIG5lZWRTdGF0dXNJY29uOiBmdW5jdGlvbiBuZWVkU3RhdHVzSWNvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmVsRm9ybSA/IHRoaXMuZWxGb3JtLnN0YXR1c0ljb24gOiBmYWxzZTtcbiAgICB9LFxuICAgIHZhbGlkYXRlSWNvbjogZnVuY3Rpb24gdmFsaWRhdGVJY29uKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsaWRhdGluZzogJ2VsLWljb24tbG9hZGluZycsXG4gICAgICAgIHN1Y2Nlc3M6ICdlbC1pY29uLWNpcmNsZS1jaGVjaycsXG4gICAgICAgIGVycm9yOiAnZWwtaWNvbi1jaXJjbGUtY2xvc2UnXG4gICAgICB9W3RoaXMudmFsaWRhdGVTdGF0ZV07XG4gICAgfSxcbiAgICB0ZXh0YXJlYVN0eWxlOiBmdW5jdGlvbiB0ZXh0YXJlYVN0eWxlKCkge1xuICAgICAgcmV0dXJuIG1lcmdlX2RlZmF1bHQoKSh7fSwgdGhpcy50ZXh0YXJlYUNhbGNTdHlsZSwgeyByZXNpemU6IHRoaXMucmVzaXplIH0pO1xuICAgIH0sXG4gICAgaW5wdXRTaXplOiBmdW5jdGlvbiBpbnB1dFNpemUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zaXplIHx8IHRoaXMuX2VsRm9ybUl0ZW1TaXplIHx8ICh0aGlzLiRFTEVNRU5UIHx8IHt9KS5zaXplO1xuICAgIH0sXG4gICAgaW5wdXREaXNhYmxlZDogZnVuY3Rpb24gaW5wdXREaXNhYmxlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRpc2FibGVkIHx8ICh0aGlzLmVsRm9ybSB8fCB7fSkuZGlzYWJsZWQ7XG4gICAgfSxcbiAgICBuYXRpdmVJbnB1dFZhbHVlOiBmdW5jdGlvbiBuYXRpdmVJbnB1dFZhbHVlKCkge1xuICAgICAgcmV0dXJuIHRoaXMudmFsdWUgPT09IG51bGwgfHwgdGhpcy52YWx1ZSA9PT0gdW5kZWZpbmVkID8gJycgOiBTdHJpbmcodGhpcy52YWx1ZSk7XG4gICAgfSxcbiAgICBzaG93Q2xlYXI6IGZ1bmN0aW9uIHNob3dDbGVhcigpIHtcbiAgICAgIHJldHVybiB0aGlzLmNsZWFyYWJsZSAmJiAhdGhpcy5pbnB1dERpc2FibGVkICYmICF0aGlzLnJlYWRvbmx5ICYmIHRoaXMubmF0aXZlSW5wdXRWYWx1ZSAmJiAodGhpcy5mb2N1c2VkIHx8IHRoaXMuaG92ZXJpbmcpO1xuICAgIH0sXG4gICAgc2hvd1B3ZFZpc2libGU6IGZ1bmN0aW9uIHNob3dQd2RWaXNpYmxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2hvd1Bhc3N3b3JkICYmICF0aGlzLmlucHV0RGlzYWJsZWQgJiYgIXRoaXMucmVhZG9ubHkgJiYgKCEhdGhpcy5uYXRpdmVJbnB1dFZhbHVlIHx8IHRoaXMuZm9jdXNlZCk7XG4gICAgfSxcbiAgICBpc1dvcmRMaW1pdFZpc2libGU6IGZ1bmN0aW9uIGlzV29yZExpbWl0VmlzaWJsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNob3dXb3JkTGltaXQgJiYgdGhpcy4kYXR0cnMubWF4bGVuZ3RoICYmICh0aGlzLnR5cGUgPT09ICd0ZXh0JyB8fCB0aGlzLnR5cGUgPT09ICd0ZXh0YXJlYScpICYmICF0aGlzLmlucHV0RGlzYWJsZWQgJiYgIXRoaXMucmVhZG9ubHkgJiYgIXRoaXMuc2hvd1Bhc3N3b3JkO1xuICAgIH0sXG4gICAgdXBwZXJMaW1pdDogZnVuY3Rpb24gdXBwZXJMaW1pdCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRhdHRycy5tYXhsZW5ndGg7XG4gICAgfSxcbiAgICB0ZXh0TGVuZ3RoOiBmdW5jdGlvbiB0ZXh0TGVuZ3RoKCkge1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLnZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgICByZXR1cm4gU3RyaW5nKHRoaXMudmFsdWUpLmxlbmd0aDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuICh0aGlzLnZhbHVlIHx8ICcnKS5sZW5ndGg7XG4gICAgfSxcbiAgICBpbnB1dEV4Y2VlZDogZnVuY3Rpb24gaW5wdXRFeGNlZWQoKSB7XG4gICAgICAvLyBzaG93IGV4Y2VlZCBzdHlsZSBpZiBsZW5ndGggb2YgaW5pdGlhbCB2YWx1ZSBncmVhdGVyIHRoZW4gbWF4bGVuZ3RoXG4gICAgICByZXR1cm4gdGhpcy5pc1dvcmRMaW1pdFZpc2libGUgJiYgdGhpcy50ZXh0TGVuZ3RoID4gdGhpcy51cHBlckxpbWl0O1xuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHZhbHVlOiBmdW5jdGlvbiB2YWx1ZSh2YWwpIHtcbiAgICAgIHRoaXMuJG5leHRUaWNrKHRoaXMucmVzaXplVGV4dGFyZWEpO1xuICAgICAgaWYgKHRoaXMudmFsaWRhdGVFdmVudCkge1xuICAgICAgICB0aGlzLmRpc3BhdGNoKCdFbEZvcm1JdGVtJywgJ2VsLmZvcm0uY2hhbmdlJywgW3ZhbF0pO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBuYXRpdmUgaW5wdXQgdmFsdWUgaXMgc2V0IGV4cGxpY2l0bHlcbiAgICAvLyBkbyBub3QgdXNlIHYtbW9kZWwgLyA6dmFsdWUgaW4gdGVtcGxhdGVcbiAgICAvLyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9FbGVtZUZFL2VsZW1lbnQvaXNzdWVzLzE0NTIxXG4gICAgbmF0aXZlSW5wdXRWYWx1ZTogZnVuY3Rpb24gbmF0aXZlSW5wdXRWYWx1ZSgpIHtcbiAgICAgIHRoaXMuc2V0TmF0aXZlSW5wdXRWYWx1ZSgpO1xuICAgIH0sXG5cbiAgICAvLyB3aGVuIGNoYW5nZSBiZXR3ZWVuIDxpbnB1dD4gYW5kIDx0ZXh0YXJlYT4sXG4gICAgLy8gdXBkYXRlIERPTSBkZXBlbmRlbnQgdmFsdWUgYW5kIHN0eWxlc1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9FbGVtZUZFL2VsZW1lbnQvaXNzdWVzLzE0ODU3XG4gICAgdHlwZTogZnVuY3Rpb24gdHlwZSgpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMuc2V0TmF0aXZlSW5wdXRWYWx1ZSgpO1xuICAgICAgICBfdGhpcy5yZXNpemVUZXh0YXJlYSgpO1xuICAgICAgICBfdGhpcy51cGRhdGVJY29uT2Zmc2V0KCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGZvY3VzOiBmdW5jdGlvbiBmb2N1cygpIHtcbiAgICAgIHRoaXMuZ2V0SW5wdXQoKS5mb2N1cygpO1xuICAgIH0sXG4gICAgYmx1cjogZnVuY3Rpb24gYmx1cigpIHtcbiAgICAgIHRoaXMuZ2V0SW5wdXQoKS5ibHVyKCk7XG4gICAgfSxcbiAgICBnZXRNaWdyYXRpbmdDb25maWc6IGZ1bmN0aW9uIGdldE1pZ3JhdGluZ0NvbmZpZygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgJ2ljb24nOiAnaWNvbiBpcyByZW1vdmVkLCB1c2Ugc3VmZml4LWljb24gLyBwcmVmaXgtaWNvbiBpbnN0ZWFkLicsXG4gICAgICAgICAgJ29uLWljb24tY2xpY2snOiAnb24taWNvbi1jbGljayBpcyByZW1vdmVkLidcbiAgICAgICAgfSxcbiAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgJ2NsaWNrJzogJ2NsaWNrIGlzIHJlbW92ZWQuJ1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0sXG4gICAgaGFuZGxlQmx1cjogZnVuY3Rpb24gaGFuZGxlQmx1cihldmVudCkge1xuICAgICAgdGhpcy5mb2N1c2VkID0gZmFsc2U7XG4gICAgICB0aGlzLiRlbWl0KCdibHVyJywgZXZlbnQpO1xuICAgICAgaWYgKHRoaXMudmFsaWRhdGVFdmVudCkge1xuICAgICAgICB0aGlzLmRpc3BhdGNoKCdFbEZvcm1JdGVtJywgJ2VsLmZvcm0uYmx1cicsIFt0aGlzLnZhbHVlXSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBzZWxlY3Q6IGZ1bmN0aW9uIHNlbGVjdCgpIHtcbiAgICAgIHRoaXMuZ2V0SW5wdXQoKS5zZWxlY3QoKTtcbiAgICB9LFxuICAgIHJlc2l6ZVRleHRhcmVhOiBmdW5jdGlvbiByZXNpemVUZXh0YXJlYSgpIHtcbiAgICAgIGlmICh0aGlzLiRpc1NlcnZlcikgcmV0dXJuO1xuICAgICAgdmFyIGF1dG9zaXplID0gdGhpcy5hdXRvc2l6ZSxcbiAgICAgICAgICB0eXBlID0gdGhpcy50eXBlO1xuXG4gICAgICBpZiAodHlwZSAhPT0gJ3RleHRhcmVhJykgcmV0dXJuO1xuICAgICAgaWYgKCFhdXRvc2l6ZSkge1xuICAgICAgICB0aGlzLnRleHRhcmVhQ2FsY1N0eWxlID0ge1xuICAgICAgICAgIG1pbkhlaWdodDogY2FsY1RleHRhcmVhSGVpZ2h0KHRoaXMuJHJlZnMudGV4dGFyZWEpLm1pbkhlaWdodFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB2YXIgbWluUm93cyA9IGF1dG9zaXplLm1pblJvd3M7XG4gICAgICB2YXIgbWF4Um93cyA9IGF1dG9zaXplLm1heFJvd3M7XG5cbiAgICAgIHRoaXMudGV4dGFyZWFDYWxjU3R5bGUgPSBjYWxjVGV4dGFyZWFIZWlnaHQodGhpcy4kcmVmcy50ZXh0YXJlYSwgbWluUm93cywgbWF4Um93cyk7XG4gICAgfSxcbiAgICBzZXROYXRpdmVJbnB1dFZhbHVlOiBmdW5jdGlvbiBzZXROYXRpdmVJbnB1dFZhbHVlKCkge1xuICAgICAgdmFyIGlucHV0ID0gdGhpcy5nZXRJbnB1dCgpO1xuICAgICAgaWYgKCFpbnB1dCkgcmV0dXJuO1xuICAgICAgaWYgKGlucHV0LnZhbHVlID09PSB0aGlzLm5hdGl2ZUlucHV0VmFsdWUpIHJldHVybjtcbiAgICAgIGlucHV0LnZhbHVlID0gdGhpcy5uYXRpdmVJbnB1dFZhbHVlO1xuICAgIH0sXG4gICAgaGFuZGxlRm9jdXM6IGZ1bmN0aW9uIGhhbmRsZUZvY3VzKGV2ZW50KSB7XG4gICAgICB0aGlzLmZvY3VzZWQgPSB0cnVlO1xuICAgICAgdGhpcy4kZW1pdCgnZm9jdXMnLCBldmVudCk7XG4gICAgfSxcbiAgICBoYW5kbGVDb21wb3NpdGlvblN0YXJ0OiBmdW5jdGlvbiBoYW5kbGVDb21wb3NpdGlvblN0YXJ0KGV2ZW50KSB7XG4gICAgICB0aGlzLiRlbWl0KCdjb21wb3NpdGlvbnN0YXJ0JywgZXZlbnQpO1xuICAgICAgdGhpcy5pc0NvbXBvc2luZyA9IHRydWU7XG4gICAgfSxcbiAgICBoYW5kbGVDb21wb3NpdGlvblVwZGF0ZTogZnVuY3Rpb24gaGFuZGxlQ29tcG9zaXRpb25VcGRhdGUoZXZlbnQpIHtcbiAgICAgIHRoaXMuJGVtaXQoJ2NvbXBvc2l0aW9udXBkYXRlJywgZXZlbnQpO1xuICAgICAgdmFyIHRleHQgPSBldmVudC50YXJnZXQudmFsdWU7XG4gICAgICB2YXIgbGFzdENoYXJhY3RlciA9IHRleHRbdGV4dC5sZW5ndGggLSAxXSB8fCAnJztcbiAgICAgIHRoaXMuaXNDb21wb3NpbmcgPSAhT2JqZWN0KHNoYXJlZF9bXCJpc0tvcmVhblwiXSkobGFzdENoYXJhY3Rlcik7XG4gICAgfSxcbiAgICBoYW5kbGVDb21wb3NpdGlvbkVuZDogZnVuY3Rpb24gaGFuZGxlQ29tcG9zaXRpb25FbmQoZXZlbnQpIHtcbiAgICAgIHRoaXMuJGVtaXQoJ2NvbXBvc2l0aW9uZW5kJywgZXZlbnQpO1xuICAgICAgaWYgKHRoaXMuaXNDb21wb3NpbmcpIHtcbiAgICAgICAgdGhpcy5pc0NvbXBvc2luZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmhhbmRsZUlucHV0KGV2ZW50KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGhhbmRsZUlucHV0OiBmdW5jdGlvbiBoYW5kbGVJbnB1dChldmVudCkge1xuICAgICAgLy8gc2hvdWxkIG5vdCBlbWl0IGlucHV0IGR1cmluZyBjb21wb3NpdGlvblxuICAgICAgLy8gc2VlOiBodHRwczovL2dpdGh1Yi5jb20vRWxlbWVGRS9lbGVtZW50L2lzc3Vlcy8xMDUxNlxuICAgICAgaWYgKHRoaXMuaXNDb21wb3NpbmcpIHJldHVybjtcblxuICAgICAgLy8gaGFjayBmb3IgaHR0cHM6Ly9naXRodWIuY29tL0VsZW1lRkUvZWxlbWVudC9pc3N1ZXMvODU0OFxuICAgICAgLy8gc2hvdWxkIHJlbW92ZSB0aGUgZm9sbG93aW5nIGxpbmUgd2hlbiB3ZSBkb24ndCBzdXBwb3J0IElFXG4gICAgICBpZiAoZXZlbnQudGFyZ2V0LnZhbHVlID09PSB0aGlzLm5hdGl2ZUlucHV0VmFsdWUpIHJldHVybjtcblxuICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCBldmVudC50YXJnZXQudmFsdWUpO1xuXG4gICAgICAvLyBlbnN1cmUgbmF0aXZlIGlucHV0IHZhbHVlIGlzIGNvbnRyb2xsZWRcbiAgICAgIC8vIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL0VsZW1lRkUvZWxlbWVudC9pc3N1ZXMvMTI4NTBcbiAgICAgIHRoaXMuJG5leHRUaWNrKHRoaXMuc2V0TmF0aXZlSW5wdXRWYWx1ZSk7XG4gICAgfSxcbiAgICBoYW5kbGVDaGFuZ2U6IGZ1bmN0aW9uIGhhbmRsZUNoYW5nZShldmVudCkge1xuICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgZXZlbnQudGFyZ2V0LnZhbHVlKTtcbiAgICB9LFxuICAgIGNhbGNJY29uT2Zmc2V0OiBmdW5jdGlvbiBjYWxjSWNvbk9mZnNldChwbGFjZSkge1xuICAgICAgdmFyIGVsTGlzdCA9IFtdLnNsaWNlLmNhbGwodGhpcy4kZWwucXVlcnlTZWxlY3RvckFsbCgnLmVsLWlucHV0X18nICsgcGxhY2UpIHx8IFtdKTtcbiAgICAgIGlmICghZWxMaXN0Lmxlbmd0aCkgcmV0dXJuO1xuICAgICAgdmFyIGVsID0gbnVsbDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxMaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChlbExpc3RbaV0ucGFyZW50Tm9kZSA9PT0gdGhpcy4kZWwpIHtcbiAgICAgICAgICBlbCA9IGVsTGlzdFtpXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFlbCkgcmV0dXJuO1xuICAgICAgdmFyIHBlbmRhbnRNYXAgPSB7XG4gICAgICAgIHN1ZmZpeDogJ2FwcGVuZCcsXG4gICAgICAgIHByZWZpeDogJ3ByZXBlbmQnXG4gICAgICB9O1xuXG4gICAgICB2YXIgcGVuZGFudCA9IHBlbmRhbnRNYXBbcGxhY2VdO1xuICAgICAgaWYgKHRoaXMuJHNsb3RzW3BlbmRhbnRdKSB7XG4gICAgICAgIGVsLnN0eWxlLnRyYW5zZm9ybSA9ICd0cmFuc2xhdGVYKCcgKyAocGxhY2UgPT09ICdzdWZmaXgnID8gJy0nIDogJycpICsgdGhpcy4kZWwucXVlcnlTZWxlY3RvcignLmVsLWlucHV0LWdyb3VwX18nICsgcGVuZGFudCkub2Zmc2V0V2lkdGggKyAncHgpJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZSgnc3R5bGUnKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVwZGF0ZUljb25PZmZzZXQ6IGZ1bmN0aW9uIHVwZGF0ZUljb25PZmZzZXQoKSB7XG4gICAgICB0aGlzLmNhbGNJY29uT2Zmc2V0KCdwcmVmaXgnKTtcbiAgICAgIHRoaXMuY2FsY0ljb25PZmZzZXQoJ3N1ZmZpeCcpO1xuICAgIH0sXG4gICAgY2xlYXI6IGZ1bmN0aW9uIGNsZWFyKCkge1xuICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCAnJyk7XG4gICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCAnJyk7XG4gICAgICB0aGlzLiRlbWl0KCdjbGVhcicpO1xuICAgIH0sXG4gICAgaGFuZGxlUGFzc3dvcmRWaXNpYmxlOiBmdW5jdGlvbiBoYW5kbGVQYXNzd29yZFZpc2libGUoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgdGhpcy5wYXNzd29yZFZpc2libGUgPSAhdGhpcy5wYXNzd29yZFZpc2libGU7XG4gICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzMi5mb2N1cygpO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBnZXRJbnB1dDogZnVuY3Rpb24gZ2V0SW5wdXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcmVmcy5pbnB1dCB8fCB0aGlzLiRyZWZzLnRleHRhcmVhO1xuICAgIH0sXG4gICAgZ2V0U3VmZml4VmlzaWJsZTogZnVuY3Rpb24gZ2V0U3VmZml4VmlzaWJsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRzbG90cy5zdWZmaXggfHwgdGhpcy5zdWZmaXhJY29uIHx8IHRoaXMuc2hvd0NsZWFyIHx8IHRoaXMuc2hvd1Bhc3N3b3JkIHx8IHRoaXMuaXNXb3JkTGltaXRWaXNpYmxlIHx8IHRoaXMudmFsaWRhdGVTdGF0ZSAmJiB0aGlzLm5lZWRTdGF0dXNJY29uO1xuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkOiBmdW5jdGlvbiBjcmVhdGVkKCkge1xuICAgIHRoaXMuJG9uKCdpbnB1dFNlbGVjdCcsIHRoaXMuc2VsZWN0KTtcbiAgfSxcbiAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCgpIHtcbiAgICB0aGlzLnNldE5hdGl2ZUlucHV0VmFsdWUoKTtcbiAgICB0aGlzLnJlc2l6ZVRleHRhcmVhKCk7XG4gICAgdGhpcy51cGRhdGVJY29uT2Zmc2V0KCk7XG4gIH0sXG4gIHVwZGF0ZWQ6IGZ1bmN0aW9uIHVwZGF0ZWQoKSB7XG4gICAgdGhpcy4kbmV4dFRpY2sodGhpcy51cGRhdGVJY29uT2Zmc2V0KTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2lucHV0L3NyYy9pbnB1dC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX2lucHV0dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKGlucHV0dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2lucHV0L3NyYy9pbnB1dC52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBpbnB1dF9jb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIHNyY19pbnB1dHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgaW5wdXR2dWVfdHlwZV90ZW1wbGF0ZV9pZF8zNDNkZDc3NF9yZW5kZXIsXG4gIGlucHV0dnVlX3R5cGVfdGVtcGxhdGVfaWRfMzQzZGQ3NzRfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBpbnB1dF9hcGk7IH1cbmlucHV0X2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvaW5wdXQvc3JjL2lucHV0LnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfaW5wdXQgPSAoaW5wdXRfY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9pbnB1dC9pbmRleC5qc1xuXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5zcmNfaW5wdXQuaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcbiAgVnVlLmNvbXBvbmVudChzcmNfaW5wdXQubmFtZSwgc3JjX2lucHV0KTtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhY2thZ2VzX2lucHV0ID0gKHNyY19pbnB1dCk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2lucHV0LW51bWJlci9zcmMvaW5wdXQtbnVtYmVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00MmY4Y2Y2NiZcbnZhciBpbnB1dF9udW1iZXJ2dWVfdHlwZV90ZW1wbGF0ZV9pZF80MmY4Y2Y2Nl9yZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICB7XG4gICAgICBjbGFzczogW1xuICAgICAgICBcImVsLWlucHV0LW51bWJlclwiLFxuICAgICAgICBfdm0uaW5wdXROdW1iZXJTaXplID8gXCJlbC1pbnB1dC1udW1iZXItLVwiICsgX3ZtLmlucHV0TnVtYmVyU2l6ZSA6IFwiXCIsXG4gICAgICAgIHsgXCJpcy1kaXNhYmxlZFwiOiBfdm0uaW5wdXROdW1iZXJEaXNhYmxlZCB9LFxuICAgICAgICB7IFwiaXMtd2l0aG91dC1jb250cm9sc1wiOiAhX3ZtLmNvbnRyb2xzIH0sXG4gICAgICAgIHsgXCJpcy1jb250cm9scy1yaWdodFwiOiBfdm0uY29udHJvbHNBdFJpZ2h0IH1cbiAgICAgIF0sXG4gICAgICBvbjoge1xuICAgICAgICBkcmFnc3RhcnQ6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIF92bS5jb250cm9sc1xuICAgICAgICA/IF9jKFxuICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBuYW1lOiBcInJlcGVhdC1jbGlja1wiLFxuICAgICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXJlcGVhdC1jbGlja1wiLFxuICAgICAgICAgICAgICAgICAgdmFsdWU6IF92bS5kZWNyZWFzZSxcbiAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwiZGVjcmVhc2VcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtaW5wdXQtbnVtYmVyX19kZWNyZWFzZVwiLFxuICAgICAgICAgICAgICBjbGFzczogeyBcImlzLWRpc2FibGVkXCI6IF92bS5taW5EaXNhYmxlZCB9LFxuICAgICAgICAgICAgICBhdHRyczogeyByb2xlOiBcImJ1dHRvblwiIH0sXG4gICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAga2V5ZG93bjogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICEoXCJidXR0b25cIiBpbiAkZXZlbnQpICYmXG4gICAgICAgICAgICAgICAgICAgIF92bS5faygkZXZlbnQua2V5Q29kZSwgXCJlbnRlclwiLCAxMywgJGV2ZW50LmtleSwgXCJFbnRlclwiKVxuICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLmRlY3JlYXNlKCRldmVudClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF9jKFwiaVwiLCB7XG4gICAgICAgICAgICAgICAgY2xhc3M6XG4gICAgICAgICAgICAgICAgICBcImVsLWljb24tXCIgKyAoX3ZtLmNvbnRyb2xzQXRSaWdodCA/IFwiYXJyb3ctZG93blwiIDogXCJtaW51c1wiKVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIClcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgIF92bS5jb250cm9sc1xuICAgICAgICA/IF9jKFxuICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBuYW1lOiBcInJlcGVhdC1jbGlja1wiLFxuICAgICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXJlcGVhdC1jbGlja1wiLFxuICAgICAgICAgICAgICAgICAgdmFsdWU6IF92bS5pbmNyZWFzZSxcbiAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwiaW5jcmVhc2VcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtaW5wdXQtbnVtYmVyX19pbmNyZWFzZVwiLFxuICAgICAgICAgICAgICBjbGFzczogeyBcImlzLWRpc2FibGVkXCI6IF92bS5tYXhEaXNhYmxlZCB9LFxuICAgICAgICAgICAgICBhdHRyczogeyByb2xlOiBcImJ1dHRvblwiIH0sXG4gICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAga2V5ZG93bjogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICEoXCJidXR0b25cIiBpbiAkZXZlbnQpICYmXG4gICAgICAgICAgICAgICAgICAgIF92bS5faygkZXZlbnQua2V5Q29kZSwgXCJlbnRlclwiLCAxMywgJGV2ZW50LmtleSwgXCJFbnRlclwiKVxuICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLmluY3JlYXNlKCRldmVudClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF9jKFwiaVwiLCB7XG4gICAgICAgICAgICAgICAgY2xhc3M6IFwiZWwtaWNvbi1cIiArIChfdm0uY29udHJvbHNBdFJpZ2h0ID8gXCJhcnJvdy11cFwiIDogXCJwbHVzXCIpXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgKVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgX2MoXCJlbC1pbnB1dFwiLCB7XG4gICAgICAgIHJlZjogXCJpbnB1dFwiLFxuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIHZhbHVlOiBfdm0uZGlzcGxheVZhbHVlLFxuICAgICAgICAgIHBsYWNlaG9sZGVyOiBfdm0ucGxhY2Vob2xkZXIsXG4gICAgICAgICAgZGlzYWJsZWQ6IF92bS5pbnB1dE51bWJlckRpc2FibGVkLFxuICAgICAgICAgIHNpemU6IF92bS5pbnB1dE51bWJlclNpemUsXG4gICAgICAgICAgbWF4OiBfdm0ubWF4LFxuICAgICAgICAgIG1pbjogX3ZtLm1pbixcbiAgICAgICAgICBuYW1lOiBfdm0ubmFtZSxcbiAgICAgICAgICBsYWJlbDogX3ZtLmxhYmVsXG4gICAgICAgIH0sXG4gICAgICAgIG9uOiB7XG4gICAgICAgICAgYmx1cjogX3ZtLmhhbmRsZUJsdXIsXG4gICAgICAgICAgZm9jdXM6IF92bS5oYW5kbGVGb2N1cyxcbiAgICAgICAgICBpbnB1dDogX3ZtLmhhbmRsZUlucHV0LFxuICAgICAgICAgIGNoYW5nZTogX3ZtLmhhbmRsZUlucHV0Q2hhbmdlXG4gICAgICAgIH0sXG4gICAgICAgIG5hdGl2ZU9uOiB7XG4gICAgICAgICAga2V5ZG93bjogW1xuICAgICAgICAgICAgZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAhKFwiYnV0dG9uXCIgaW4gJGV2ZW50KSAmJlxuICAgICAgICAgICAgICAgIF92bS5faygkZXZlbnQua2V5Q29kZSwgXCJ1cFwiLCAzOCwgJGV2ZW50LmtleSwgW1wiVXBcIiwgXCJBcnJvd1VwXCJdKVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICAgIHJldHVybiBfdm0uaW5jcmVhc2UoJGV2ZW50KVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgIShcImJ1dHRvblwiIGluICRldmVudCkgJiZcbiAgICAgICAgICAgICAgICBfdm0uX2soJGV2ZW50LmtleUNvZGUsIFwiZG93blwiLCA0MCwgJGV2ZW50LmtleSwgW1xuICAgICAgICAgICAgICAgICAgXCJEb3duXCIsXG4gICAgICAgICAgICAgICAgICBcIkFycm93RG93blwiXG4gICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgICByZXR1cm4gX3ZtLmRlY3JlYXNlKCRldmVudClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgXSxcbiAgICAxXG4gIClcbn1cbnZhciBpbnB1dF9udW1iZXJ2dWVfdHlwZV90ZW1wbGF0ZV9pZF80MmY4Y2Y2Nl9zdGF0aWNSZW5kZXJGbnMgPSBbXVxuaW5wdXRfbnVtYmVydnVlX3R5cGVfdGVtcGxhdGVfaWRfNDJmOGNmNjZfcmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9pbnB1dC1udW1iZXIvc3JjL2lucHV0LW51bWJlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NDJmOGNmNjYmXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2RpcmVjdGl2ZXMvcmVwZWF0LWNsaWNrLmpzXG5cblxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciByZXBlYXRfY2xpY2sgPSAoe1xuICBiaW5kOiBmdW5jdGlvbiBiaW5kKGVsLCBiaW5kaW5nLCB2bm9kZSkge1xuICAgIHZhciBpbnRlcnZhbCA9IG51bGw7XG4gICAgdmFyIHN0YXJ0VGltZSA9IHZvaWQgMDtcbiAgICB2YXIgbWF4SW50ZXJ2YWxzID0gT2JqZWN0KHV0aWxfW1wiaXNNYWNcIl0pKCkgPyAxMDAgOiAyMDA7XG4gICAgdmFyIGhhbmRsZXIgPSBmdW5jdGlvbiBoYW5kbGVyKCkge1xuICAgICAgcmV0dXJuIHZub2RlLmNvbnRleHRbYmluZGluZy5leHByZXNzaW9uXS5hcHBseSgpO1xuICAgIH07XG4gICAgdmFyIGNsZWFyID0gZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgICBpZiAoRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSA8IG1heEludGVydmFscykge1xuICAgICAgICBoYW5kbGVyKCk7XG4gICAgICB9XG4gICAgICBjbGVhckludGVydmFsKGludGVydmFsKTtcbiAgICAgIGludGVydmFsID0gbnVsbDtcbiAgICB9O1xuXG4gICAgT2JqZWN0KGRvbV9bXCJvblwiXSkoZWwsICdtb3VzZWRvd24nLCBmdW5jdGlvbiAoZSkge1xuICAgICAgaWYgKGUuYnV0dG9uICE9PSAwKSByZXR1cm47XG4gICAgICBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgT2JqZWN0KGRvbV9bXCJvbmNlXCJdKShkb2N1bWVudCwgJ21vdXNldXAnLCBjbGVhcik7XG4gICAgICBjbGVhckludGVydmFsKGludGVydmFsKTtcbiAgICAgIGludGVydmFsID0gc2V0SW50ZXJ2YWwoaGFuZGxlciwgbWF4SW50ZXJ2YWxzKTtcbiAgICB9KTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9pbnB1dC1udW1iZXIvc3JjL2lucHV0LW51bWJlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuXG5cblxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBpbnB1dF9udW1iZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBuYW1lOiAnRWxJbnB1dE51bWJlcicsXG4gIG1peGluczogW2ZvY3VzX2RlZmF1bHQoKSgnaW5wdXQnKV0sXG4gIGluamVjdDoge1xuICAgIGVsRm9ybToge1xuICAgICAgZGVmYXVsdDogJydcbiAgICB9LFxuICAgIGVsRm9ybUl0ZW06IHtcbiAgICAgIGRlZmF1bHQ6ICcnXG4gICAgfVxuICB9LFxuICBkaXJlY3RpdmVzOiB7XG4gICAgcmVwZWF0Q2xpY2s6IHJlcGVhdF9jbGlja1xuICB9LFxuICBjb21wb25lbnRzOiB7XG4gICAgRWxJbnB1dDogaW5wdXRfZGVmYXVsdC5hXG4gIH0sXG4gIHByb3BzOiB7XG4gICAgc3RlcDoge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZGVmYXVsdDogMVxuICAgIH0sXG4gICAgc3RlcFN0cmljdGx5OiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9LFxuICAgIG1heDoge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZGVmYXVsdDogSW5maW5pdHlcbiAgICB9LFxuICAgIG1pbjoge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZGVmYXVsdDogLUluZmluaXR5XG4gICAgfSxcbiAgICB2YWx1ZToge30sXG4gICAgZGlzYWJsZWQ6IEJvb2xlYW4sXG4gICAgc2l6ZTogU3RyaW5nLFxuICAgIGNvbnRyb2xzOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0sXG4gICAgY29udHJvbHNQb3NpdGlvbjoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJydcbiAgICB9LFxuICAgIG5hbWU6IFN0cmluZyxcbiAgICBsYWJlbDogU3RyaW5nLFxuICAgIHBsYWNlaG9sZGVyOiBTdHJpbmcsXG4gICAgcHJlY2lzaW9uOiB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICB2YWxpZGF0b3I6IGZ1bmN0aW9uIHZhbGlkYXRvcih2YWwpIHtcbiAgICAgICAgcmV0dXJuIHZhbCA+PSAwICYmIHZhbCA9PT0gcGFyc2VJbnQodmFsLCAxMCk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjdXJyZW50VmFsdWU6IDAsXG4gICAgICB1c2VySW5wdXQ6IG51bGxcbiAgICB9O1xuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgdmFsdWU6IHtcbiAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcbiAgICAgIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIodmFsdWUpIHtcbiAgICAgICAgdmFyIG5ld1ZhbCA9IHZhbHVlID09PSB1bmRlZmluZWQgPyB2YWx1ZSA6IE51bWJlcih2YWx1ZSk7XG4gICAgICAgIGlmIChuZXdWYWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmIChpc05hTihuZXdWYWwpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHRoaXMuc3RlcFN0cmljdGx5KSB7XG4gICAgICAgICAgICB2YXIgc3RlcFByZWNpc2lvbiA9IHRoaXMuZ2V0UHJlY2lzaW9uKHRoaXMuc3RlcCk7XG4gICAgICAgICAgICB2YXIgcHJlY2lzaW9uRmFjdG9yID0gTWF0aC5wb3coMTAsIHN0ZXBQcmVjaXNpb24pO1xuICAgICAgICAgICAgbmV3VmFsID0gTWF0aC5yb3VuZChuZXdWYWwgLyB0aGlzLnN0ZXApICogcHJlY2lzaW9uRmFjdG9yICogdGhpcy5zdGVwIC8gcHJlY2lzaW9uRmFjdG9yO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0aGlzLnByZWNpc2lvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBuZXdWYWwgPSB0aGlzLnRvUHJlY2lzaW9uKG5ld1ZhbCwgdGhpcy5wcmVjaXNpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobmV3VmFsID49IHRoaXMubWF4KSBuZXdWYWwgPSB0aGlzLm1heDtcbiAgICAgICAgaWYgKG5ld1ZhbCA8PSB0aGlzLm1pbikgbmV3VmFsID0gdGhpcy5taW47XG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gbmV3VmFsO1xuICAgICAgICB0aGlzLnVzZXJJbnB1dCA9IG51bGw7XG4gICAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgbmV3VmFsKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIGNvbXB1dGVkOiB7XG4gICAgbWluRGlzYWJsZWQ6IGZ1bmN0aW9uIG1pbkRpc2FibGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2RlY3JlYXNlKHRoaXMudmFsdWUsIHRoaXMuc3RlcCkgPCB0aGlzLm1pbjtcbiAgICB9LFxuICAgIG1heERpc2FibGVkOiBmdW5jdGlvbiBtYXhEaXNhYmxlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9pbmNyZWFzZSh0aGlzLnZhbHVlLCB0aGlzLnN0ZXApID4gdGhpcy5tYXg7XG4gICAgfSxcbiAgICBudW1QcmVjaXNpb246IGZ1bmN0aW9uIG51bVByZWNpc2lvbigpIHtcbiAgICAgIHZhciB2YWx1ZSA9IHRoaXMudmFsdWUsXG4gICAgICAgICAgc3RlcCA9IHRoaXMuc3RlcCxcbiAgICAgICAgICBnZXRQcmVjaXNpb24gPSB0aGlzLmdldFByZWNpc2lvbixcbiAgICAgICAgICBwcmVjaXNpb24gPSB0aGlzLnByZWNpc2lvbjtcblxuICAgICAgdmFyIHN0ZXBQcmVjaXNpb24gPSBnZXRQcmVjaXNpb24oc3RlcCk7XG4gICAgICBpZiAocHJlY2lzaW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHN0ZXBQcmVjaXNpb24gPiBwcmVjaXNpb24pIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ1tFbGVtZW50IFdhcm5dW0lucHV0TnVtYmVyXXByZWNpc2lvbiBzaG91bGQgbm90IGJlIGxlc3MgdGhhbiB0aGUgZGVjaW1hbCBwbGFjZXMgb2Ygc3RlcCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcmVjaXNpb247XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gTWF0aC5tYXgoZ2V0UHJlY2lzaW9uKHZhbHVlKSwgc3RlcFByZWNpc2lvbik7XG4gICAgICB9XG4gICAgfSxcbiAgICBjb250cm9sc0F0UmlnaHQ6IGZ1bmN0aW9uIGNvbnRyb2xzQXRSaWdodCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xzICYmIHRoaXMuY29udHJvbHNQb3NpdGlvbiA9PT0gJ3JpZ2h0JztcbiAgICB9LFxuICAgIF9lbEZvcm1JdGVtU2l6ZTogZnVuY3Rpb24gX2VsRm9ybUl0ZW1TaXplKCkge1xuICAgICAgcmV0dXJuICh0aGlzLmVsRm9ybUl0ZW0gfHwge30pLmVsRm9ybUl0ZW1TaXplO1xuICAgIH0sXG4gICAgaW5wdXROdW1iZXJTaXplOiBmdW5jdGlvbiBpbnB1dE51bWJlclNpemUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zaXplIHx8IHRoaXMuX2VsRm9ybUl0ZW1TaXplIHx8ICh0aGlzLiRFTEVNRU5UIHx8IHt9KS5zaXplO1xuICAgIH0sXG4gICAgaW5wdXROdW1iZXJEaXNhYmxlZDogZnVuY3Rpb24gaW5wdXROdW1iZXJEaXNhYmxlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRpc2FibGVkIHx8ICEhKHRoaXMuZWxGb3JtIHx8IHt9KS5kaXNhYmxlZDtcbiAgICB9LFxuICAgIGRpc3BsYXlWYWx1ZTogZnVuY3Rpb24gZGlzcGxheVZhbHVlKCkge1xuICAgICAgaWYgKHRoaXMudXNlcklucHV0ICE9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnVzZXJJbnB1dDtcbiAgICAgIH1cblxuICAgICAgdmFyIGN1cnJlbnRWYWx1ZSA9IHRoaXMuY3VycmVudFZhbHVlO1xuXG4gICAgICBpZiAodHlwZW9mIGN1cnJlbnRWYWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RlcFN0cmljdGx5KSB7XG4gICAgICAgICAgdmFyIHN0ZXBQcmVjaXNpb24gPSB0aGlzLmdldFByZWNpc2lvbih0aGlzLnN0ZXApO1xuICAgICAgICAgIHZhciBwcmVjaXNpb25GYWN0b3IgPSBNYXRoLnBvdygxMCwgc3RlcFByZWNpc2lvbik7XG4gICAgICAgICAgY3VycmVudFZhbHVlID0gTWF0aC5yb3VuZChjdXJyZW50VmFsdWUgLyB0aGlzLnN0ZXApICogcHJlY2lzaW9uRmFjdG9yICogdGhpcy5zdGVwIC8gcHJlY2lzaW9uRmFjdG9yO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMucHJlY2lzaW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjdXJyZW50VmFsdWUgPSBjdXJyZW50VmFsdWUudG9GaXhlZCh0aGlzLnByZWNpc2lvbik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGN1cnJlbnRWYWx1ZTtcbiAgICB9XG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICB0b1ByZWNpc2lvbjogZnVuY3Rpb24gdG9QcmVjaXNpb24obnVtLCBwcmVjaXNpb24pIHtcbiAgICAgIGlmIChwcmVjaXNpb24gPT09IHVuZGVmaW5lZCkgcHJlY2lzaW9uID0gdGhpcy5udW1QcmVjaXNpb247XG4gICAgICByZXR1cm4gcGFyc2VGbG9hdChNYXRoLnJvdW5kKG51bSAqIE1hdGgucG93KDEwLCBwcmVjaXNpb24pKSAvIE1hdGgucG93KDEwLCBwcmVjaXNpb24pKTtcbiAgICB9LFxuICAgIGdldFByZWNpc2lvbjogZnVuY3Rpb24gZ2V0UHJlY2lzaW9uKHZhbHVlKSB7XG4gICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIDA7XG4gICAgICB2YXIgdmFsdWVTdHJpbmcgPSB2YWx1ZS50b1N0cmluZygpO1xuICAgICAgdmFyIGRvdFBvc2l0aW9uID0gdmFsdWVTdHJpbmcuaW5kZXhPZignLicpO1xuICAgICAgdmFyIHByZWNpc2lvbiA9IDA7XG4gICAgICBpZiAoZG90UG9zaXRpb24gIT09IC0xKSB7XG4gICAgICAgIHByZWNpc2lvbiA9IHZhbHVlU3RyaW5nLmxlbmd0aCAtIGRvdFBvc2l0aW9uIC0gMTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwcmVjaXNpb247XG4gICAgfSxcbiAgICBfaW5jcmVhc2U6IGZ1bmN0aW9uIF9pbmNyZWFzZSh2YWwsIHN0ZXApIHtcbiAgICAgIGlmICh0eXBlb2YgdmFsICE9PSAnbnVtYmVyJyAmJiB2YWwgIT09IHVuZGVmaW5lZCkgcmV0dXJuIHRoaXMuY3VycmVudFZhbHVlO1xuXG4gICAgICB2YXIgcHJlY2lzaW9uRmFjdG9yID0gTWF0aC5wb3coMTAsIHRoaXMubnVtUHJlY2lzaW9uKTtcbiAgICAgIC8vIFNvbHZlIHRoZSBhY2N1cmFjeSBwcm9ibGVtIG9mIEpTIGRlY2ltYWwgY2FsY3VsYXRpb24gYnkgY29udmVydGluZyB0aGUgdmFsdWUgdG8gaW50ZWdlci5cbiAgICAgIHJldHVybiB0aGlzLnRvUHJlY2lzaW9uKChwcmVjaXNpb25GYWN0b3IgKiB2YWwgKyBwcmVjaXNpb25GYWN0b3IgKiBzdGVwKSAvIHByZWNpc2lvbkZhY3Rvcik7XG4gICAgfSxcbiAgICBfZGVjcmVhc2U6IGZ1bmN0aW9uIF9kZWNyZWFzZSh2YWwsIHN0ZXApIHtcbiAgICAgIGlmICh0eXBlb2YgdmFsICE9PSAnbnVtYmVyJyAmJiB2YWwgIT09IHVuZGVmaW5lZCkgcmV0dXJuIHRoaXMuY3VycmVudFZhbHVlO1xuXG4gICAgICB2YXIgcHJlY2lzaW9uRmFjdG9yID0gTWF0aC5wb3coMTAsIHRoaXMubnVtUHJlY2lzaW9uKTtcblxuICAgICAgcmV0dXJuIHRoaXMudG9QcmVjaXNpb24oKHByZWNpc2lvbkZhY3RvciAqIHZhbCAtIHByZWNpc2lvbkZhY3RvciAqIHN0ZXApIC8gcHJlY2lzaW9uRmFjdG9yKTtcbiAgICB9LFxuICAgIGluY3JlYXNlOiBmdW5jdGlvbiBpbmNyZWFzZSgpIHtcbiAgICAgIGlmICh0aGlzLmlucHV0TnVtYmVyRGlzYWJsZWQgfHwgdGhpcy5tYXhEaXNhYmxlZCkgcmV0dXJuO1xuICAgICAgdmFyIHZhbHVlID0gdGhpcy52YWx1ZSB8fCAwO1xuICAgICAgdmFyIG5ld1ZhbCA9IHRoaXMuX2luY3JlYXNlKHZhbHVlLCB0aGlzLnN0ZXApO1xuICAgICAgdGhpcy5zZXRDdXJyZW50VmFsdWUobmV3VmFsKTtcbiAgICB9LFxuICAgIGRlY3JlYXNlOiBmdW5jdGlvbiBkZWNyZWFzZSgpIHtcbiAgICAgIGlmICh0aGlzLmlucHV0TnVtYmVyRGlzYWJsZWQgfHwgdGhpcy5taW5EaXNhYmxlZCkgcmV0dXJuO1xuICAgICAgdmFyIHZhbHVlID0gdGhpcy52YWx1ZSB8fCAwO1xuICAgICAgdmFyIG5ld1ZhbCA9IHRoaXMuX2RlY3JlYXNlKHZhbHVlLCB0aGlzLnN0ZXApO1xuICAgICAgdGhpcy5zZXRDdXJyZW50VmFsdWUobmV3VmFsKTtcbiAgICB9LFxuICAgIGhhbmRsZUJsdXI6IGZ1bmN0aW9uIGhhbmRsZUJsdXIoZXZlbnQpIHtcbiAgICAgIHRoaXMuJGVtaXQoJ2JsdXInLCBldmVudCk7XG4gICAgfSxcbiAgICBoYW5kbGVGb2N1czogZnVuY3Rpb24gaGFuZGxlRm9jdXMoZXZlbnQpIHtcbiAgICAgIHRoaXMuJGVtaXQoJ2ZvY3VzJywgZXZlbnQpO1xuICAgIH0sXG4gICAgc2V0Q3VycmVudFZhbHVlOiBmdW5jdGlvbiBzZXRDdXJyZW50VmFsdWUobmV3VmFsKSB7XG4gICAgICB2YXIgb2xkVmFsID0gdGhpcy5jdXJyZW50VmFsdWU7XG4gICAgICBpZiAodHlwZW9mIG5ld1ZhbCA9PT0gJ251bWJlcicgJiYgdGhpcy5wcmVjaXNpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBuZXdWYWwgPSB0aGlzLnRvUHJlY2lzaW9uKG5ld1ZhbCwgdGhpcy5wcmVjaXNpb24pO1xuICAgICAgfVxuICAgICAgaWYgKG5ld1ZhbCA+PSB0aGlzLm1heCkgbmV3VmFsID0gdGhpcy5tYXg7XG4gICAgICBpZiAobmV3VmFsIDw9IHRoaXMubWluKSBuZXdWYWwgPSB0aGlzLm1pbjtcbiAgICAgIGlmIChvbGRWYWwgPT09IG5ld1ZhbCkgcmV0dXJuO1xuICAgICAgdGhpcy51c2VySW5wdXQgPSBudWxsO1xuICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCBuZXdWYWwpO1xuICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgbmV3VmFsLCBvbGRWYWwpO1xuICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSBuZXdWYWw7XG4gICAgfSxcbiAgICBoYW5kbGVJbnB1dDogZnVuY3Rpb24gaGFuZGxlSW5wdXQodmFsdWUpIHtcbiAgICAgIHRoaXMudXNlcklucHV0ID0gdmFsdWU7XG4gICAgfSxcbiAgICBoYW5kbGVJbnB1dENoYW5nZTogZnVuY3Rpb24gaGFuZGxlSW5wdXRDaGFuZ2UodmFsdWUpIHtcbiAgICAgIHZhciBuZXdWYWwgPSB2YWx1ZSA9PT0gJycgPyB1bmRlZmluZWQgOiBOdW1iZXIodmFsdWUpO1xuICAgICAgaWYgKCFpc05hTihuZXdWYWwpIHx8IHZhbHVlID09PSAnJykge1xuICAgICAgICB0aGlzLnNldEN1cnJlbnRWYWx1ZShuZXdWYWwpO1xuICAgICAgfVxuICAgICAgdGhpcy51c2VySW5wdXQgPSBudWxsO1xuICAgIH0sXG4gICAgc2VsZWN0OiBmdW5jdGlvbiBzZWxlY3QoKSB7XG4gICAgICB0aGlzLiRyZWZzLmlucHV0LnNlbGVjdCgpO1xuICAgIH1cbiAgfSxcbiAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCgpIHtcbiAgICB2YXIgaW5uZXJJbnB1dCA9IHRoaXMuJHJlZnMuaW5wdXQuJHJlZnMuaW5wdXQ7XG4gICAgaW5uZXJJbnB1dC5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAnc3BpbmJ1dHRvbicpO1xuICAgIGlubmVySW5wdXQuc2V0QXR0cmlidXRlKCdhcmlhLXZhbHVlbWF4JywgdGhpcy5tYXgpO1xuICAgIGlubmVySW5wdXQuc2V0QXR0cmlidXRlKCdhcmlhLXZhbHVlbWluJywgdGhpcy5taW4pO1xuICAgIGlubmVySW5wdXQuc2V0QXR0cmlidXRlKCdhcmlhLXZhbHVlbm93JywgdGhpcy5jdXJyZW50VmFsdWUpO1xuICAgIGlubmVySW5wdXQuc2V0QXR0cmlidXRlKCdhcmlhLWRpc2FibGVkJywgdGhpcy5pbnB1dE51bWJlckRpc2FibGVkKTtcbiAgfSxcbiAgdXBkYXRlZDogZnVuY3Rpb24gdXBkYXRlZCgpIHtcbiAgICBpZiAoIXRoaXMuJHJlZnMgfHwgIXRoaXMuJHJlZnMuaW5wdXQpIHJldHVybjtcbiAgICB2YXIgaW5uZXJJbnB1dCA9IHRoaXMuJHJlZnMuaW5wdXQuJHJlZnMuaW5wdXQ7XG4gICAgaW5uZXJJbnB1dC5zZXRBdHRyaWJ1dGUoJ2FyaWEtdmFsdWVub3cnLCB0aGlzLmN1cnJlbnRWYWx1ZSk7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9pbnB1dC1udW1iZXIvc3JjL2lucHV0LW51bWJlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX2lucHV0X251bWJlcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChpbnB1dF9udW1iZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvaW5wdXQtbnVtYmVyL3NyYy9pbnB1dC1udW1iZXIudnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgaW5wdXRfbnVtYmVyX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgc3JjX2lucHV0X251bWJlcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgaW5wdXRfbnVtYmVydnVlX3R5cGVfdGVtcGxhdGVfaWRfNDJmOGNmNjZfcmVuZGVyLFxuICBpbnB1dF9udW1iZXJ2dWVfdHlwZV90ZW1wbGF0ZV9pZF80MmY4Y2Y2Nl9zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGlucHV0X251bWJlcl9hcGk7IH1cbmlucHV0X251bWJlcl9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL2lucHV0LW51bWJlci9zcmMvaW5wdXQtbnVtYmVyLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBpbnB1dF9udW1iZXIgPSAoaW5wdXRfbnVtYmVyX2NvbXBvbmVudC5leHBvcnRzKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvaW5wdXQtbnVtYmVyL2luZGV4LmpzXG5cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmlucHV0X251bWJlci5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuICBWdWUuY29tcG9uZW50KGlucHV0X251bWJlci5uYW1lLCBpbnB1dF9udW1iZXIpO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcGFja2FnZXNfaW5wdXRfbnVtYmVyID0gKGlucHV0X251bWJlcik7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3JhZGlvL3NyYy9yYWRpby52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NjljZDYyNjgmXG52YXIgcmFkaW92dWVfdHlwZV90ZW1wbGF0ZV9pZF82OWNkNjI2OF9yZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJsYWJlbFwiLFxuICAgIHtcbiAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXJhZGlvXCIsXG4gICAgICBjbGFzczogW1xuICAgICAgICBfdm0uYm9yZGVyICYmIF92bS5yYWRpb1NpemUgPyBcImVsLXJhZGlvLS1cIiArIF92bS5yYWRpb1NpemUgOiBcIlwiLFxuICAgICAgICB7IFwiaXMtZGlzYWJsZWRcIjogX3ZtLmlzRGlzYWJsZWQgfSxcbiAgICAgICAgeyBcImlzLWZvY3VzXCI6IF92bS5mb2N1cyB9LFxuICAgICAgICB7IFwiaXMtYm9yZGVyZWRcIjogX3ZtLmJvcmRlciB9LFxuICAgICAgICB7IFwiaXMtY2hlY2tlZFwiOiBfdm0ubW9kZWwgPT09IF92bS5sYWJlbCB9XG4gICAgICBdLFxuICAgICAgYXR0cnM6IHtcbiAgICAgICAgcm9sZTogXCJyYWRpb1wiLFxuICAgICAgICBcImFyaWEtY2hlY2tlZFwiOiBfdm0ubW9kZWwgPT09IF92bS5sYWJlbCxcbiAgICAgICAgXCJhcmlhLWRpc2FibGVkXCI6IF92bS5pc0Rpc2FibGVkLFxuICAgICAgICB0YWJpbmRleDogX3ZtLnRhYkluZGV4XG4gICAgICB9LFxuICAgICAgb246IHtcbiAgICAgICAga2V5ZG93bjogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIShcImJ1dHRvblwiIGluICRldmVudCkgJiZcbiAgICAgICAgICAgIF92bS5faygkZXZlbnQua2V5Q29kZSwgXCJzcGFjZVwiLCAzMiwgJGV2ZW50LmtleSwgW1wiIFwiLCBcIlNwYWNlYmFyXCJdKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgICB9XG4gICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICBfdm0ubW9kZWwgPSBfdm0uaXNEaXNhYmxlZCA/IF92bS5tb2RlbCA6IF92bS5sYWJlbFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICBfYyhcbiAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1yYWRpb19faW5wdXRcIixcbiAgICAgICAgICBjbGFzczoge1xuICAgICAgICAgICAgXCJpcy1kaXNhYmxlZFwiOiBfdm0uaXNEaXNhYmxlZCxcbiAgICAgICAgICAgIFwiaXMtY2hlY2tlZFwiOiBfdm0ubW9kZWwgPT09IF92bS5sYWJlbFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF9jKFwic3BhblwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLXJhZGlvX19pbm5lclwiIH0pLFxuICAgICAgICAgIF9jKFwiaW5wdXRcIiwge1xuICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJtb2RlbFwiLFxuICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1tb2RlbFwiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0ubW9kZWwsXG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJtb2RlbFwiXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICByZWY6IFwicmFkaW9cIixcbiAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXJhZGlvX19vcmlnaW5hbFwiLFxuICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgdHlwZTogXCJyYWRpb1wiLFxuICAgICAgICAgICAgICBcImFyaWEtaGlkZGVuXCI6IFwidHJ1ZVwiLFxuICAgICAgICAgICAgICBuYW1lOiBfdm0ubmFtZSxcbiAgICAgICAgICAgICAgZGlzYWJsZWQ6IF92bS5pc0Rpc2FibGVkLFxuICAgICAgICAgICAgICB0YWJpbmRleDogXCItMVwiLFxuICAgICAgICAgICAgICBhdXRvY29tcGxldGU6IFwib2ZmXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkb21Qcm9wczoge1xuICAgICAgICAgICAgICB2YWx1ZTogX3ZtLmxhYmVsLFxuICAgICAgICAgICAgICBjaGVja2VkOiBfdm0uX3EoX3ZtLm1vZGVsLCBfdm0ubGFiZWwpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgZm9jdXM6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgIF92bS5mb2N1cyA9IHRydWVcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgYmx1cjogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgX3ZtLmZvY3VzID0gZmFsc2VcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgY2hhbmdlOiBbXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICBfdm0ubW9kZWwgPSBfdm0ubGFiZWxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF92bS5oYW5kbGVDaGFuZ2VcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIF1cbiAgICAgICksXG4gICAgICBfYyhcbiAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1yYWRpb19fbGFiZWxcIixcbiAgICAgICAgICBvbjoge1xuICAgICAgICAgICAga2V5ZG93bjogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF92bS5fdChcImRlZmF1bHRcIiksXG4gICAgICAgICAgIV92bS4kc2xvdHMuZGVmYXVsdCA/IFtfdm0uX3YoX3ZtLl9zKF92bS5sYWJlbCkpXSA6IF92bS5fZSgpXG4gICAgICAgIF0sXG4gICAgICAgIDJcbiAgICAgIClcbiAgICBdXG4gIClcbn1cbnZhciByYWRpb3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzY5Y2Q2MjY4X3N0YXRpY1JlbmRlckZucyA9IFtdXG5yYWRpb3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzY5Y2Q2MjY4X3JlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvcmFkaW8vc3JjL3JhZGlvLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02OWNkNjI2OCZcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvcmFkaW8vc3JjL3JhZGlvLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHJhZGlvdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbmFtZTogJ0VsUmFkaW8nLFxuXG4gIG1peGluczogW2VtaXR0ZXJfZGVmYXVsdC5hXSxcblxuICBpbmplY3Q6IHtcbiAgICBlbEZvcm06IHtcbiAgICAgIGRlZmF1bHQ6ICcnXG4gICAgfSxcblxuICAgIGVsRm9ybUl0ZW06IHtcbiAgICAgIGRlZmF1bHQ6ICcnXG4gICAgfVxuICB9LFxuXG4gIGNvbXBvbmVudE5hbWU6ICdFbFJhZGlvJyxcblxuICBwcm9wczoge1xuICAgIHZhbHVlOiB7fSxcbiAgICBsYWJlbDoge30sXG4gICAgZGlzYWJsZWQ6IEJvb2xlYW4sXG4gICAgbmFtZTogU3RyaW5nLFxuICAgIGJvcmRlcjogQm9vbGVhbixcbiAgICBzaXplOiBTdHJpbmdcbiAgfSxcblxuICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBmb2N1czogZmFsc2VcbiAgICB9O1xuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgaXNHcm91cDogZnVuY3Rpb24gaXNHcm91cCgpIHtcbiAgICAgIHZhciBwYXJlbnQgPSB0aGlzLiRwYXJlbnQ7XG4gICAgICB3aGlsZSAocGFyZW50KSB7XG4gICAgICAgIGlmIChwYXJlbnQuJG9wdGlvbnMuY29tcG9uZW50TmFtZSAhPT0gJ0VsUmFkaW9Hcm91cCcpIHtcbiAgICAgICAgICBwYXJlbnQgPSBwYXJlbnQuJHBhcmVudDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl9yYWRpb0dyb3VwID0gcGFyZW50O1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcblxuICAgIG1vZGVsOiB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNHcm91cCA/IHRoaXMuX3JhZGlvR3JvdXAudmFsdWUgOiB0aGlzLnZhbHVlO1xuICAgICAgfSxcbiAgICAgIHNldDogZnVuY3Rpb24gc2V0KHZhbCkge1xuICAgICAgICBpZiAodGhpcy5pc0dyb3VwKSB7XG4gICAgICAgICAgdGhpcy5kaXNwYXRjaCgnRWxSYWRpb0dyb3VwJywgJ2lucHV0JywgW3ZhbF0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgdmFsKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiRyZWZzLnJhZGlvICYmICh0aGlzLiRyZWZzLnJhZGlvLmNoZWNrZWQgPSB0aGlzLm1vZGVsID09PSB0aGlzLmxhYmVsKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIF9lbEZvcm1JdGVtU2l6ZTogZnVuY3Rpb24gX2VsRm9ybUl0ZW1TaXplKCkge1xuICAgICAgcmV0dXJuICh0aGlzLmVsRm9ybUl0ZW0gfHwge30pLmVsRm9ybUl0ZW1TaXplO1xuICAgIH0sXG4gICAgcmFkaW9TaXplOiBmdW5jdGlvbiByYWRpb1NpemUoKSB7XG4gICAgICB2YXIgdGVtUmFkaW9TaXplID0gdGhpcy5zaXplIHx8IHRoaXMuX2VsRm9ybUl0ZW1TaXplIHx8ICh0aGlzLiRFTEVNRU5UIHx8IHt9KS5zaXplO1xuICAgICAgcmV0dXJuIHRoaXMuaXNHcm91cCA/IHRoaXMuX3JhZGlvR3JvdXAucmFkaW9Hcm91cFNpemUgfHwgdGVtUmFkaW9TaXplIDogdGVtUmFkaW9TaXplO1xuICAgIH0sXG4gICAgaXNEaXNhYmxlZDogZnVuY3Rpb24gaXNEaXNhYmxlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzR3JvdXAgPyB0aGlzLl9yYWRpb0dyb3VwLmRpc2FibGVkIHx8IHRoaXMuZGlzYWJsZWQgfHwgKHRoaXMuZWxGb3JtIHx8IHt9KS5kaXNhYmxlZCA6IHRoaXMuZGlzYWJsZWQgfHwgKHRoaXMuZWxGb3JtIHx8IHt9KS5kaXNhYmxlZDtcbiAgICB9LFxuICAgIHRhYkluZGV4OiBmdW5jdGlvbiB0YWJJbmRleCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzRGlzYWJsZWQgfHwgdGhpcy5pc0dyb3VwICYmIHRoaXMubW9kZWwgIT09IHRoaXMubGFiZWwgPyAtMSA6IDA7XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBoYW5kbGVDaGFuZ2U6IGZ1bmN0aW9uIGhhbmRsZUNoYW5nZSgpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMuJGVtaXQoJ2NoYW5nZScsIF90aGlzLm1vZGVsKTtcbiAgICAgICAgX3RoaXMuaXNHcm91cCAmJiBfdGhpcy5kaXNwYXRjaCgnRWxSYWRpb0dyb3VwJywgJ2hhbmRsZUNoYW5nZScsIF90aGlzLm1vZGVsKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3JhZGlvL3NyYy9yYWRpby52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX3JhZGlvdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHJhZGlvdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3JhZGlvL3NyYy9yYWRpby52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciByYWRpb19jb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIHNyY19yYWRpb3Z1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgcmFkaW92dWVfdHlwZV90ZW1wbGF0ZV9pZF82OWNkNjI2OF9yZW5kZXIsXG4gIHJhZGlvdnVlX3R5cGVfdGVtcGxhdGVfaWRfNjljZDYyNjhfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciByYWRpb19hcGk7IH1cbnJhZGlvX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvcmFkaW8vc3JjL3JhZGlvLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfcmFkaW8gPSAocmFkaW9fY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9yYWRpby9pbmRleC5qc1xuXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5zcmNfcmFkaW8uaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcbiAgVnVlLmNvbXBvbmVudChzcmNfcmFkaW8ubmFtZSwgc3JjX3JhZGlvKTtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhY2thZ2VzX3JhZGlvID0gKHNyY19yYWRpbyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3JhZGlvL3NyYy9yYWRpby1ncm91cC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ODE4YTcwNGMmXG52YXIgcmFkaW9fZ3JvdXB2dWVfdHlwZV90ZW1wbGF0ZV9pZF84MThhNzA0Y19yZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgX3ZtLl9lbFRhZyxcbiAgICB7XG4gICAgICB0YWc6IFwiY29tcG9uZW50XCIsXG4gICAgICBzdGF0aWNDbGFzczogXCJlbC1yYWRpby1ncm91cFwiLFxuICAgICAgYXR0cnM6IHsgcm9sZTogXCJyYWRpb2dyb3VwXCIgfSxcbiAgICAgIG9uOiB7IGtleWRvd246IF92bS5oYW5kbGVLZXlkb3duIH1cbiAgICB9LFxuICAgIFtfdm0uX3QoXCJkZWZhdWx0XCIpXSxcbiAgICAyXG4gIClcbn1cbnZhciByYWRpb19ncm91cHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzgxOGE3MDRjX3N0YXRpY1JlbmRlckZucyA9IFtdXG5yYWRpb19ncm91cHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzgxOGE3MDRjX3JlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvcmFkaW8vc3JjL3JhZGlvLWdyb3VwLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD04MThhNzA0YyZcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvcmFkaW8vc3JjL3JhZGlvLWdyb3VwLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cblxuXG52YXIga2V5Q29kZSA9IE9iamVjdC5mcmVlemUoe1xuICBMRUZUOiAzNyxcbiAgVVA6IDM4LFxuICBSSUdIVDogMzksXG4gIERPV046IDQwXG59KTtcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHJhZGlvX2dyb3VwdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbmFtZTogJ0VsUmFkaW9Hcm91cCcsXG5cbiAgY29tcG9uZW50TmFtZTogJ0VsUmFkaW9Hcm91cCcsXG5cbiAgaW5qZWN0OiB7XG4gICAgZWxGb3JtSXRlbToge1xuICAgICAgZGVmYXVsdDogJydcbiAgICB9XG4gIH0sXG5cbiAgbWl4aW5zOiBbZW1pdHRlcl9kZWZhdWx0LmFdLFxuXG4gIHByb3BzOiB7XG4gICAgdmFsdWU6IHt9LFxuICAgIHNpemU6IFN0cmluZyxcbiAgICBmaWxsOiBTdHJpbmcsXG4gICAgdGV4dENvbG9yOiBTdHJpbmcsXG4gICAgZGlzYWJsZWQ6IEJvb2xlYW5cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIF9lbEZvcm1JdGVtU2l6ZTogZnVuY3Rpb24gX2VsRm9ybUl0ZW1TaXplKCkge1xuICAgICAgcmV0dXJuICh0aGlzLmVsRm9ybUl0ZW0gfHwge30pLmVsRm9ybUl0ZW1TaXplO1xuICAgIH0sXG4gICAgX2VsVGFnOiBmdW5jdGlvbiBfZWxUYWcoKSB7XG4gICAgICB2YXIgdGFnID0gKHRoaXMuJHZub2RlLmRhdGEgfHwge30pLnRhZztcbiAgICAgIGlmICghdGFnIHx8IHRhZyA9PT0gJ2NvbXBvbmVudCcpIHRhZyA9ICdkaXYnO1xuICAgICAgcmV0dXJuIHRhZztcbiAgICB9LFxuICAgIHJhZGlvR3JvdXBTaXplOiBmdW5jdGlvbiByYWRpb0dyb3VwU2l6ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNpemUgfHwgdGhpcy5fZWxGb3JtSXRlbVNpemUgfHwgKHRoaXMuJEVMRU1FTlQgfHwge30pLnNpemU7XG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQ6IGZ1bmN0aW9uIGNyZWF0ZWQoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHRoaXMuJG9uKCdoYW5kbGVDaGFuZ2UnLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIF90aGlzLiRlbWl0KCdjaGFuZ2UnLCB2YWx1ZSk7XG4gICAgfSk7XG4gIH0sXG4gIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7XG4gICAgLy8g5b2TcmFkaW9Hcm91cOayoeaciem7mOiupOmAiemhueaXtu+8jOesrOS4gOS4quWPr+S7pemAieS4rVRhYuWvvOiIqlxuICAgIHZhciByYWRpb3MgPSB0aGlzLiRlbC5xdWVyeVNlbGVjdG9yQWxsKCdbdHlwZT1yYWRpb10nKTtcbiAgICB2YXIgZmlyc3RMYWJlbCA9IHRoaXMuJGVsLnF1ZXJ5U2VsZWN0b3JBbGwoJ1tyb2xlPXJhZGlvXScpWzBdO1xuICAgIGlmICghW10uc29tZS5jYWxsKHJhZGlvcywgZnVuY3Rpb24gKHJhZGlvKSB7XG4gICAgICByZXR1cm4gcmFkaW8uY2hlY2tlZDtcbiAgICB9KSAmJiBmaXJzdExhYmVsKSB7XG4gICAgICBmaXJzdExhYmVsLnRhYkluZGV4ID0gMDtcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGhhbmRsZUtleWRvd246IGZ1bmN0aW9uIGhhbmRsZUtleWRvd24oZSkge1xuICAgICAgLy8g5bem5Y+z5LiK5LiL5oyJ6ZSuIOWPr+S7peWcqHJhZGlv57uE5YaF5YiH5o2i5LiN5ZCM6YCJ6aG5XG4gICAgICB2YXIgdGFyZ2V0ID0gZS50YXJnZXQ7XG4gICAgICB2YXIgY2xhc3NOYW1lID0gdGFyZ2V0Lm5vZGVOYW1lID09PSAnSU5QVVQnID8gJ1t0eXBlPXJhZGlvXScgOiAnW3JvbGU9cmFkaW9dJztcbiAgICAgIHZhciByYWRpb3MgPSB0aGlzLiRlbC5xdWVyeVNlbGVjdG9yQWxsKGNsYXNzTmFtZSk7XG4gICAgICB2YXIgbGVuZ3RoID0gcmFkaW9zLmxlbmd0aDtcbiAgICAgIHZhciBpbmRleCA9IFtdLmluZGV4T2YuY2FsbChyYWRpb3MsIHRhcmdldCk7XG4gICAgICB2YXIgcm9sZVJhZGlvcyA9IHRoaXMuJGVsLnF1ZXJ5U2VsZWN0b3JBbGwoJ1tyb2xlPXJhZGlvXScpO1xuICAgICAgc3dpdGNoIChlLmtleUNvZGUpIHtcbiAgICAgICAgY2FzZSBrZXlDb2RlLkxFRlQ6XG4gICAgICAgIGNhc2Uga2V5Q29kZS5VUDpcbiAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBpZiAoaW5kZXggPT09IDApIHtcbiAgICAgICAgICAgIHJvbGVSYWRpb3NbbGVuZ3RoIC0gMV0uY2xpY2soKTtcbiAgICAgICAgICAgIHJvbGVSYWRpb3NbbGVuZ3RoIC0gMV0uZm9jdXMoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcm9sZVJhZGlvc1tpbmRleCAtIDFdLmNsaWNrKCk7XG4gICAgICAgICAgICByb2xlUmFkaW9zW2luZGV4IC0gMV0uZm9jdXMoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2Uga2V5Q29kZS5SSUdIVDpcbiAgICAgICAgY2FzZSBrZXlDb2RlLkRPV046XG4gICAgICAgICAgaWYgKGluZGV4ID09PSBsZW5ndGggLSAxKSB7XG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgcm9sZVJhZGlvc1swXS5jbGljaygpO1xuICAgICAgICAgICAgcm9sZVJhZGlvc1swXS5mb2N1cygpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByb2xlUmFkaW9zW2luZGV4ICsgMV0uY2xpY2soKTtcbiAgICAgICAgICAgIHJvbGVSYWRpb3NbaW5kZXggKyAxXS5mb2N1cygpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIHdhdGNoOiB7XG4gICAgdmFsdWU6IGZ1bmN0aW9uIHZhbHVlKF92YWx1ZSkge1xuICAgICAgdGhpcy5kaXNwYXRjaCgnRWxGb3JtSXRlbScsICdlbC5mb3JtLmNoYW5nZScsIFt0aGlzLnZhbHVlXSk7XG4gICAgfVxuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvcmFkaW8vc3JjL3JhZGlvLWdyb3VwLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfcmFkaW9fZ3JvdXB2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAocmFkaW9fZ3JvdXB2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvcmFkaW8vc3JjL3JhZGlvLWdyb3VwLnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIHJhZGlvX2dyb3VwX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgc3JjX3JhZGlvX2dyb3VwdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICByYWRpb19ncm91cHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzgxOGE3MDRjX3JlbmRlcixcbiAgcmFkaW9fZ3JvdXB2dWVfdHlwZV90ZW1wbGF0ZV9pZF84MThhNzA0Y19zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIHJhZGlvX2dyb3VwX2FwaTsgfVxucmFkaW9fZ3JvdXBfY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy9yYWRpby9zcmMvcmFkaW8tZ3JvdXAudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHJhZGlvX2dyb3VwID0gKHJhZGlvX2dyb3VwX2NvbXBvbmVudC5leHBvcnRzKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvcmFkaW8tZ3JvdXAvaW5kZXguanNcblxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xucmFkaW9fZ3JvdXAuaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcbiAgVnVlLmNvbXBvbmVudChyYWRpb19ncm91cC5uYW1lLCByYWRpb19ncm91cCk7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc19yYWRpb19ncm91cCA9IChyYWRpb19ncm91cCk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3JhZGlvL3NyYy9yYWRpby1idXR0b24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTE4YTc3YTMyJlxudmFyIHJhZGlvX2J1dHRvbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzE4YTc3YTMyX3JlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImxhYmVsXCIsXG4gICAge1xuICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtcmFkaW8tYnV0dG9uXCIsXG4gICAgICBjbGFzczogW1xuICAgICAgICBfdm0uc2l6ZSA/IFwiZWwtcmFkaW8tYnV0dG9uLS1cIiArIF92bS5zaXplIDogXCJcIixcbiAgICAgICAgeyBcImlzLWFjdGl2ZVwiOiBfdm0udmFsdWUgPT09IF92bS5sYWJlbCB9LFxuICAgICAgICB7IFwiaXMtZGlzYWJsZWRcIjogX3ZtLmlzRGlzYWJsZWQgfSxcbiAgICAgICAgeyBcImlzLWZvY3VzXCI6IF92bS5mb2N1cyB9XG4gICAgICBdLFxuICAgICAgYXR0cnM6IHtcbiAgICAgICAgcm9sZTogXCJyYWRpb1wiLFxuICAgICAgICBcImFyaWEtY2hlY2tlZFwiOiBfdm0udmFsdWUgPT09IF92bS5sYWJlbCxcbiAgICAgICAgXCJhcmlhLWRpc2FibGVkXCI6IF92bS5pc0Rpc2FibGVkLFxuICAgICAgICB0YWJpbmRleDogX3ZtLnRhYkluZGV4XG4gICAgICB9LFxuICAgICAgb246IHtcbiAgICAgICAga2V5ZG93bjogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIShcImJ1dHRvblwiIGluICRldmVudCkgJiZcbiAgICAgICAgICAgIF92bS5faygkZXZlbnQua2V5Q29kZSwgXCJzcGFjZVwiLCAzMiwgJGV2ZW50LmtleSwgW1wiIFwiLCBcIlNwYWNlYmFyXCJdKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgICB9XG4gICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICBfdm0udmFsdWUgPSBfdm0uaXNEaXNhYmxlZCA/IF92bS52YWx1ZSA6IF92bS5sYWJlbFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICBfYyhcImlucHV0XCIsIHtcbiAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwibW9kZWxcIixcbiAgICAgICAgICAgIHJhd05hbWU6IFwidi1tb2RlbFwiLFxuICAgICAgICAgICAgdmFsdWU6IF92bS52YWx1ZSxcbiAgICAgICAgICAgIGV4cHJlc3Npb246IFwidmFsdWVcIlxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtcmFkaW8tYnV0dG9uX19vcmlnLXJhZGlvXCIsXG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgdHlwZTogXCJyYWRpb1wiLFxuICAgICAgICAgIG5hbWU6IF92bS5uYW1lLFxuICAgICAgICAgIGRpc2FibGVkOiBfdm0uaXNEaXNhYmxlZCxcbiAgICAgICAgICB0YWJpbmRleDogXCItMVwiLFxuICAgICAgICAgIGF1dG9jb21wbGV0ZTogXCJvZmZcIlxuICAgICAgICB9LFxuICAgICAgICBkb21Qcm9wczogeyB2YWx1ZTogX3ZtLmxhYmVsLCBjaGVja2VkOiBfdm0uX3EoX3ZtLnZhbHVlLCBfdm0ubGFiZWwpIH0sXG4gICAgICAgIG9uOiB7XG4gICAgICAgICAgY2hhbmdlOiBbXG4gICAgICAgICAgICBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgX3ZtLnZhbHVlID0gX3ZtLmxhYmVsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgX3ZtLmhhbmRsZUNoYW5nZVxuICAgICAgICAgIF0sXG4gICAgICAgICAgZm9jdXM6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgX3ZtLmZvY3VzID0gdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgYmx1cjogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICBfdm0uZm9jdXMgPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBfYyhcbiAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1yYWRpby1idXR0b25fX2lubmVyXCIsXG4gICAgICAgICAgc3R5bGU6IF92bS52YWx1ZSA9PT0gX3ZtLmxhYmVsID8gX3ZtLmFjdGl2ZVN0eWxlIDogbnVsbCxcbiAgICAgICAgICBvbjoge1xuICAgICAgICAgICAga2V5ZG93bjogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF92bS5fdChcImRlZmF1bHRcIiksXG4gICAgICAgICAgIV92bS4kc2xvdHMuZGVmYXVsdCA/IFtfdm0uX3YoX3ZtLl9zKF92bS5sYWJlbCkpXSA6IF92bS5fZSgpXG4gICAgICAgIF0sXG4gICAgICAgIDJcbiAgICAgIClcbiAgICBdXG4gIClcbn1cbnZhciByYWRpb19idXR0b252dWVfdHlwZV90ZW1wbGF0ZV9pZF8xOGE3N2EzMl9zdGF0aWNSZW5kZXJGbnMgPSBbXVxucmFkaW9fYnV0dG9udnVlX3R5cGVfdGVtcGxhdGVfaWRfMThhNzdhMzJfcmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9yYWRpby9zcmMvcmFkaW8tYnV0dG9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xOGE3N2EzMiZcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvcmFkaW8vc3JjL3JhZGlvLWJ1dHRvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcmFkaW9fYnV0dG9udnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbmFtZTogJ0VsUmFkaW9CdXR0b24nLFxuXG4gIG1peGluczogW2VtaXR0ZXJfZGVmYXVsdC5hXSxcblxuICBpbmplY3Q6IHtcbiAgICBlbEZvcm06IHtcbiAgICAgIGRlZmF1bHQ6ICcnXG4gICAgfSxcbiAgICBlbEZvcm1JdGVtOiB7XG4gICAgICBkZWZhdWx0OiAnJ1xuICAgIH1cbiAgfSxcblxuICBwcm9wczoge1xuICAgIGxhYmVsOiB7fSxcbiAgICBkaXNhYmxlZDogQm9vbGVhbixcbiAgICBuYW1lOiBTdHJpbmdcbiAgfSxcbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZm9jdXM6IGZhbHNlXG4gICAgfTtcbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHZhbHVlOiB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JhZGlvR3JvdXAudmFsdWU7XG4gICAgICB9LFxuICAgICAgc2V0OiBmdW5jdGlvbiBzZXQodmFsdWUpIHtcbiAgICAgICAgdGhpcy5fcmFkaW9Hcm91cC4kZW1pdCgnaW5wdXQnLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBfcmFkaW9Hcm91cDogZnVuY3Rpb24gX3JhZGlvR3JvdXAoKSB7XG4gICAgICB2YXIgcGFyZW50ID0gdGhpcy4kcGFyZW50O1xuICAgICAgd2hpbGUgKHBhcmVudCkge1xuICAgICAgICBpZiAocGFyZW50LiRvcHRpb25zLmNvbXBvbmVudE5hbWUgIT09ICdFbFJhZGlvR3JvdXAnKSB7XG4gICAgICAgICAgcGFyZW50ID0gcGFyZW50LiRwYXJlbnQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHBhcmVudDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG4gICAgYWN0aXZlU3R5bGU6IGZ1bmN0aW9uIGFjdGl2ZVN0eWxlKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGlzLl9yYWRpb0dyb3VwLmZpbGwgfHwgJycsXG4gICAgICAgIGJvcmRlckNvbG9yOiB0aGlzLl9yYWRpb0dyb3VwLmZpbGwgfHwgJycsXG4gICAgICAgIGJveFNoYWRvdzogdGhpcy5fcmFkaW9Hcm91cC5maWxsID8gJy0xcHggMCAwIDAgJyArIHRoaXMuX3JhZGlvR3JvdXAuZmlsbCA6ICcnLFxuICAgICAgICBjb2xvcjogdGhpcy5fcmFkaW9Hcm91cC50ZXh0Q29sb3IgfHwgJydcbiAgICAgIH07XG4gICAgfSxcbiAgICBfZWxGb3JtSXRlbVNpemU6IGZ1bmN0aW9uIF9lbEZvcm1JdGVtU2l6ZSgpIHtcbiAgICAgIHJldHVybiAodGhpcy5lbEZvcm1JdGVtIHx8IHt9KS5lbEZvcm1JdGVtU2l6ZTtcbiAgICB9LFxuICAgIHNpemU6IGZ1bmN0aW9uIHNpemUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcmFkaW9Hcm91cC5yYWRpb0dyb3VwU2l6ZSB8fCB0aGlzLl9lbEZvcm1JdGVtU2l6ZSB8fCAodGhpcy4kRUxFTUVOVCB8fCB7fSkuc2l6ZTtcbiAgICB9LFxuICAgIGlzRGlzYWJsZWQ6IGZ1bmN0aW9uIGlzRGlzYWJsZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5kaXNhYmxlZCB8fCB0aGlzLl9yYWRpb0dyb3VwLmRpc2FibGVkIHx8ICh0aGlzLmVsRm9ybSB8fCB7fSkuZGlzYWJsZWQ7XG4gICAgfSxcbiAgICB0YWJJbmRleDogZnVuY3Rpb24gdGFiSW5kZXgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc0Rpc2FibGVkIHx8IHRoaXMuX3JhZGlvR3JvdXAgJiYgdGhpcy52YWx1ZSAhPT0gdGhpcy5sYWJlbCA/IC0xIDogMDtcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGhhbmRsZUNoYW5nZTogZnVuY3Rpb24gaGFuZGxlQ2hhbmdlKCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpcy5kaXNwYXRjaCgnRWxSYWRpb0dyb3VwJywgJ2hhbmRsZUNoYW5nZScsIF90aGlzLnZhbHVlKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3JhZGlvL3NyYy9yYWRpby1idXR0b24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY19yYWRpb19idXR0b252dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAocmFkaW9fYnV0dG9udnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3JhZGlvL3NyYy9yYWRpby1idXR0b24udnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgcmFkaW9fYnV0dG9uX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgc3JjX3JhZGlvX2J1dHRvbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgcmFkaW9fYnV0dG9udnVlX3R5cGVfdGVtcGxhdGVfaWRfMThhNzdhMzJfcmVuZGVyLFxuICByYWRpb19idXR0b252dWVfdHlwZV90ZW1wbGF0ZV9pZF8xOGE3N2EzMl9zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIHJhZGlvX2J1dHRvbl9hcGk7IH1cbnJhZGlvX2J1dHRvbl9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL3JhZGlvL3NyYy9yYWRpby1idXR0b24udnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHJhZGlvX2J1dHRvbiA9IChyYWRpb19idXR0b25fY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9yYWRpby1idXR0b24vaW5kZXguanNcblxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xucmFkaW9fYnV0dG9uLmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG4gIFZ1ZS5jb21wb25lbnQocmFkaW9fYnV0dG9uLm5hbWUsIHJhZGlvX2J1dHRvbik7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc19yYWRpb19idXR0b24gPSAocmFkaW9fYnV0dG9uKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvY2hlY2tib3gvc3JjL2NoZWNrYm94LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1kMDM4NzA3NCZcbnZhciBjaGVja2JveHZ1ZV90eXBlX3RlbXBsYXRlX2lkX2QwMzg3MDc0X3JlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImxhYmVsXCIsXG4gICAge1xuICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtY2hlY2tib3hcIixcbiAgICAgIGNsYXNzOiBbXG4gICAgICAgIF92bS5ib3JkZXIgJiYgX3ZtLmNoZWNrYm94U2l6ZVxuICAgICAgICAgID8gXCJlbC1jaGVja2JveC0tXCIgKyBfdm0uY2hlY2tib3hTaXplXG4gICAgICAgICAgOiBcIlwiLFxuICAgICAgICB7IFwiaXMtZGlzYWJsZWRcIjogX3ZtLmlzRGlzYWJsZWQgfSxcbiAgICAgICAgeyBcImlzLWJvcmRlcmVkXCI6IF92bS5ib3JkZXIgfSxcbiAgICAgICAgeyBcImlzLWNoZWNrZWRcIjogX3ZtLmlzQ2hlY2tlZCB9XG4gICAgICBdLFxuICAgICAgYXR0cnM6IHsgaWQ6IF92bS5pZCB9XG4gICAgfSxcbiAgICBbXG4gICAgICBfYyhcbiAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1jaGVja2JveF9faW5wdXRcIixcbiAgICAgICAgICBjbGFzczoge1xuICAgICAgICAgICAgXCJpcy1kaXNhYmxlZFwiOiBfdm0uaXNEaXNhYmxlZCxcbiAgICAgICAgICAgIFwiaXMtY2hlY2tlZFwiOiBfdm0uaXNDaGVja2VkLFxuICAgICAgICAgICAgXCJpcy1pbmRldGVybWluYXRlXCI6IF92bS5pbmRldGVybWluYXRlLFxuICAgICAgICAgICAgXCJpcy1mb2N1c1wiOiBfdm0uZm9jdXNcbiAgICAgICAgICB9LFxuICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICB0YWJpbmRleDogX3ZtLmluZGV0ZXJtaW5hdGUgPyAwIDogZmFsc2UsXG4gICAgICAgICAgICByb2xlOiBfdm0uaW5kZXRlcm1pbmF0ZSA/IFwiY2hlY2tib3hcIiA6IGZhbHNlLFxuICAgICAgICAgICAgXCJhcmlhLWNoZWNrZWRcIjogX3ZtLmluZGV0ZXJtaW5hdGUgPyBcIm1peGVkXCIgOiBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF9jKFwic3BhblwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLWNoZWNrYm94X19pbm5lclwiIH0pLFxuICAgICAgICAgIF92bS50cnVlTGFiZWwgfHwgX3ZtLmZhbHNlTGFiZWxcbiAgICAgICAgICAgID8gX2MoXCJpbnB1dFwiLCB7XG4gICAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIm1vZGVsXCIsXG4gICAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1tb2RlbFwiLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLm1vZGVsLFxuICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcIm1vZGVsXCJcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWNoZWNrYm94X19vcmlnaW5hbFwiLFxuICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiBcImNoZWNrYm94XCIsXG4gICAgICAgICAgICAgICAgICBcImFyaWEtaGlkZGVuXCI6IF92bS5pbmRldGVybWluYXRlID8gXCJ0cnVlXCIgOiBcImZhbHNlXCIsXG4gICAgICAgICAgICAgICAgICBuYW1lOiBfdm0ubmFtZSxcbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBfdm0uaXNEaXNhYmxlZCxcbiAgICAgICAgICAgICAgICAgIFwidHJ1ZS12YWx1ZVwiOiBfdm0udHJ1ZUxhYmVsLFxuICAgICAgICAgICAgICAgICAgXCJmYWxzZS12YWx1ZVwiOiBfdm0uZmFsc2VMYWJlbFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZG9tUHJvcHM6IHtcbiAgICAgICAgICAgICAgICAgIGNoZWNrZWQ6IEFycmF5LmlzQXJyYXkoX3ZtLm1vZGVsKVxuICAgICAgICAgICAgICAgICAgICA/IF92bS5faShfdm0ubW9kZWwsIG51bGwpID4gLTFcbiAgICAgICAgICAgICAgICAgICAgOiBfdm0uX3EoX3ZtLm1vZGVsLCBfdm0udHJ1ZUxhYmVsKVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgIGNoYW5nZTogW1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICB2YXIgJCRhID0gX3ZtLm1vZGVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgJCRlbCA9ICRldmVudC50YXJnZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAkJGMgPSAkJGVsLmNoZWNrZWQgPyBfdm0udHJ1ZUxhYmVsIDogX3ZtLmZhbHNlTGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSgkJGEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgJCR2ID0gbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJCRpID0gX3ZtLl9pKCQkYSwgJCR2KVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCQkZWwuY2hlY2tlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAkJGkgPCAwICYmIChfdm0ubW9kZWwgPSAkJGEuY29uY2F0KFskJHZdKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICQkaSA+IC0xICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKF92bS5tb2RlbCA9ICQkYVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNsaWNlKDAsICQkaSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoJCRhLnNsaWNlKCQkaSArIDEpKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLm1vZGVsID0gJCRjXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBfdm0uaGFuZGxlQ2hhbmdlXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgZm9jdXM6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICBfdm0uZm9jdXMgPSB0cnVlXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgYmx1cjogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIF92bS5mb2N1cyA9IGZhbHNlXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgOiBfYyhcImlucHV0XCIsIHtcbiAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwibW9kZWxcIixcbiAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LW1vZGVsXCIsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0ubW9kZWwsXG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwibW9kZWxcIlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtY2hlY2tib3hfX29yaWdpbmFsXCIsXG4gICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6IFwiY2hlY2tib3hcIixcbiAgICAgICAgICAgICAgICAgIFwiYXJpYS1oaWRkZW5cIjogX3ZtLmluZGV0ZXJtaW5hdGUgPyBcInRydWVcIiA6IFwiZmFsc2VcIixcbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBfdm0uaXNEaXNhYmxlZCxcbiAgICAgICAgICAgICAgICAgIG5hbWU6IF92bS5uYW1lXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBkb21Qcm9wczoge1xuICAgICAgICAgICAgICAgICAgdmFsdWU6IF92bS5sYWJlbCxcbiAgICAgICAgICAgICAgICAgIGNoZWNrZWQ6IEFycmF5LmlzQXJyYXkoX3ZtLm1vZGVsKVxuICAgICAgICAgICAgICAgICAgICA/IF92bS5faShfdm0ubW9kZWwsIF92bS5sYWJlbCkgPiAtMVxuICAgICAgICAgICAgICAgICAgICA6IF92bS5tb2RlbFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgIGNoYW5nZTogW1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICB2YXIgJCRhID0gX3ZtLm1vZGVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgJCRlbCA9ICRldmVudC50YXJnZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAkJGMgPSAkJGVsLmNoZWNrZWQgPyB0cnVlIDogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSgkJGEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgJCR2ID0gX3ZtLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAkJGkgPSBfdm0uX2koJCRhLCAkJHYpXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoJCRlbC5jaGVja2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICQkaSA8IDAgJiYgKF92bS5tb2RlbCA9ICQkYS5jb25jYXQoWyQkdl0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJCRpID4gLTEgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX3ZtLm1vZGVsID0gJCRhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2xpY2UoMCwgJCRpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdCgkJGEuc2xpY2UoJCRpICsgMSkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfdm0ubW9kZWwgPSAkJGNcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIF92bS5oYW5kbGVDaGFuZ2VcbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICBmb2N1czogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIF92bS5mb2N1cyA9IHRydWVcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBibHVyOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgX3ZtLmZvY3VzID0gZmFsc2VcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgIF1cbiAgICAgICksXG4gICAgICBfdm0uJHNsb3RzLmRlZmF1bHQgfHwgX3ZtLmxhYmVsXG4gICAgICAgID8gX2MoXG4gICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwiZWwtY2hlY2tib3hfX2xhYmVsXCIgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX3ZtLl90KFwiZGVmYXVsdFwiKSxcbiAgICAgICAgICAgICAgIV92bS4kc2xvdHMuZGVmYXVsdCA/IFtfdm0uX3YoX3ZtLl9zKF92bS5sYWJlbCkpXSA6IF92bS5fZSgpXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgMlxuICAgICAgICAgIClcbiAgICAgICAgOiBfdm0uX2UoKVxuICAgIF1cbiAgKVxufVxudmFyIGNoZWNrYm94dnVlX3R5cGVfdGVtcGxhdGVfaWRfZDAzODcwNzRfc3RhdGljUmVuZGVyRm5zID0gW11cbmNoZWNrYm94dnVlX3R5cGVfdGVtcGxhdGVfaWRfZDAzODcwNzRfcmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jaGVja2JveC9zcmMvY2hlY2tib3gudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWQwMzg3MDc0JlxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9jaGVja2JveC9zcmMvY2hlY2tib3gudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGNoZWNrYm94dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbmFtZTogJ0VsQ2hlY2tib3gnLFxuXG4gIG1peGluczogW2VtaXR0ZXJfZGVmYXVsdC5hXSxcblxuICBpbmplY3Q6IHtcbiAgICBlbEZvcm06IHtcbiAgICAgIGRlZmF1bHQ6ICcnXG4gICAgfSxcbiAgICBlbEZvcm1JdGVtOiB7XG4gICAgICBkZWZhdWx0OiAnJ1xuICAgIH1cbiAgfSxcblxuICBjb21wb25lbnROYW1lOiAnRWxDaGVja2JveCcsXG5cbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2VsZk1vZGVsOiBmYWxzZSxcbiAgICAgIGZvY3VzOiBmYWxzZSxcbiAgICAgIGlzTGltaXRFeGNlZWRlZDogZmFsc2VcbiAgICB9O1xuICB9LFxuXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBtb2RlbDoge1xuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzR3JvdXAgPyB0aGlzLnN0b3JlIDogdGhpcy52YWx1ZSAhPT0gdW5kZWZpbmVkID8gdGhpcy52YWx1ZSA6IHRoaXMuc2VsZk1vZGVsO1xuICAgICAgfSxcbiAgICAgIHNldDogZnVuY3Rpb24gc2V0KHZhbCkge1xuICAgICAgICBpZiAodGhpcy5pc0dyb3VwKSB7XG4gICAgICAgICAgdGhpcy5pc0xpbWl0RXhjZWVkZWQgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jaGVja2JveEdyb3VwLm1pbiAhPT0gdW5kZWZpbmVkICYmIHZhbC5sZW5ndGggPCB0aGlzLl9jaGVja2JveEdyb3VwLm1pbiAmJiAodGhpcy5pc0xpbWl0RXhjZWVkZWQgPSB0cnVlKTtcblxuICAgICAgICAgIHRoaXMuX2NoZWNrYm94R3JvdXAubWF4ICE9PSB1bmRlZmluZWQgJiYgdmFsLmxlbmd0aCA+IHRoaXMuX2NoZWNrYm94R3JvdXAubWF4ICYmICh0aGlzLmlzTGltaXRFeGNlZWRlZCA9IHRydWUpO1xuXG4gICAgICAgICAgdGhpcy5pc0xpbWl0RXhjZWVkZWQgPT09IGZhbHNlICYmIHRoaXMuZGlzcGF0Y2goJ0VsQ2hlY2tib3hHcm91cCcsICdpbnB1dCcsIFt2YWxdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIHZhbCk7XG4gICAgICAgICAgdGhpcy5zZWxmTW9kZWwgPSB2YWw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgaXNDaGVja2VkOiBmdW5jdGlvbiBpc0NoZWNrZWQoKSB7XG4gICAgICBpZiAoe30udG9TdHJpbmcuY2FsbCh0aGlzLm1vZGVsKSA9PT0gJ1tvYmplY3QgQm9vbGVhbl0nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHRoaXMubW9kZWwpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVsLmluZGV4T2YodGhpcy5sYWJlbCkgPiAtMTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5tb2RlbCAhPT0gbnVsbCAmJiB0aGlzLm1vZGVsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZWwgPT09IHRoaXMudHJ1ZUxhYmVsO1xuICAgICAgfVxuICAgIH0sXG4gICAgaXNHcm91cDogZnVuY3Rpb24gaXNHcm91cCgpIHtcbiAgICAgIHZhciBwYXJlbnQgPSB0aGlzLiRwYXJlbnQ7XG4gICAgICB3aGlsZSAocGFyZW50KSB7XG4gICAgICAgIGlmIChwYXJlbnQuJG9wdGlvbnMuY29tcG9uZW50TmFtZSAhPT0gJ0VsQ2hlY2tib3hHcm91cCcpIHtcbiAgICAgICAgICBwYXJlbnQgPSBwYXJlbnQuJHBhcmVudDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl9jaGVja2JveEdyb3VwID0gcGFyZW50O1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcbiAgICBzdG9yZTogZnVuY3Rpb24gc3RvcmUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fY2hlY2tib3hHcm91cCA/IHRoaXMuX2NoZWNrYm94R3JvdXAudmFsdWUgOiB0aGlzLnZhbHVlO1xuICAgIH0sXG5cblxuICAgIC8qIHVzZWQgdG8gbWFrZSB0aGUgaXNEaXNhYmxlZCBqdWRnbWVudCB1bmRlciBtYXgvbWluIHByb3BzICovXG4gICAgaXNMaW1pdERpc2FibGVkOiBmdW5jdGlvbiBpc0xpbWl0RGlzYWJsZWQoKSB7XG4gICAgICB2YXIgX2NoZWNrYm94R3JvdXAgPSB0aGlzLl9jaGVja2JveEdyb3VwLFxuICAgICAgICAgIG1heCA9IF9jaGVja2JveEdyb3VwLm1heCxcbiAgICAgICAgICBtaW4gPSBfY2hlY2tib3hHcm91cC5taW47XG5cbiAgICAgIHJldHVybiAhIShtYXggfHwgbWluKSAmJiB0aGlzLm1vZGVsLmxlbmd0aCA+PSBtYXggJiYgIXRoaXMuaXNDaGVja2VkIHx8IHRoaXMubW9kZWwubGVuZ3RoIDw9IG1pbiAmJiB0aGlzLmlzQ2hlY2tlZDtcbiAgICB9LFxuICAgIGlzRGlzYWJsZWQ6IGZ1bmN0aW9uIGlzRGlzYWJsZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc0dyb3VwID8gdGhpcy5fY2hlY2tib3hHcm91cC5kaXNhYmxlZCB8fCB0aGlzLmRpc2FibGVkIHx8ICh0aGlzLmVsRm9ybSB8fCB7fSkuZGlzYWJsZWQgfHwgdGhpcy5pc0xpbWl0RGlzYWJsZWQgOiB0aGlzLmRpc2FibGVkIHx8ICh0aGlzLmVsRm9ybSB8fCB7fSkuZGlzYWJsZWQ7XG4gICAgfSxcbiAgICBfZWxGb3JtSXRlbVNpemU6IGZ1bmN0aW9uIF9lbEZvcm1JdGVtU2l6ZSgpIHtcbiAgICAgIHJldHVybiAodGhpcy5lbEZvcm1JdGVtIHx8IHt9KS5lbEZvcm1JdGVtU2l6ZTtcbiAgICB9LFxuICAgIGNoZWNrYm94U2l6ZTogZnVuY3Rpb24gY2hlY2tib3hTaXplKCkge1xuICAgICAgdmFyIHRlbUNoZWNrYm94U2l6ZSA9IHRoaXMuc2l6ZSB8fCB0aGlzLl9lbEZvcm1JdGVtU2l6ZSB8fCAodGhpcy4kRUxFTUVOVCB8fCB7fSkuc2l6ZTtcbiAgICAgIHJldHVybiB0aGlzLmlzR3JvdXAgPyB0aGlzLl9jaGVja2JveEdyb3VwLmNoZWNrYm94R3JvdXBTaXplIHx8IHRlbUNoZWNrYm94U2l6ZSA6IHRlbUNoZWNrYm94U2l6ZTtcbiAgICB9XG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICB2YWx1ZToge30sXG4gICAgbGFiZWw6IHt9LFxuICAgIGluZGV0ZXJtaW5hdGU6IEJvb2xlYW4sXG4gICAgZGlzYWJsZWQ6IEJvb2xlYW4sXG4gICAgY2hlY2tlZDogQm9vbGVhbixcbiAgICBuYW1lOiBTdHJpbmcsXG4gICAgdHJ1ZUxhYmVsOiBbU3RyaW5nLCBOdW1iZXJdLFxuICAgIGZhbHNlTGFiZWw6IFtTdHJpbmcsIE51bWJlcl0sXG4gICAgaWQ6IFN0cmluZywgLyog5b2TaW5kZXRlcm1pbmF0ZeS4uuecn+aXtu+8jOS4umNvbnRyb2xz5o+Q5L6b55u45YWz6L+e55qEY2hlY2tib3jnmoRpZO+8jOihqOaYjuWFg+e0oOmXtOeahOaOp+WItuWFs+ezuyovXG4gICAgY29udHJvbHM6IFN0cmluZywgLyog5b2TaW5kZXRlcm1pbmF0ZeS4uuecn+aXtu+8jOS4umNvbnRyb2xz5o+Q5L6b55u45YWz6L+e55qEY2hlY2tib3jnmoRpZO+8jOihqOaYjuWFg+e0oOmXtOeahOaOp+WItuWFs+ezuyovXG4gICAgYm9yZGVyOiBCb29sZWFuLFxuICAgIHNpemU6IFN0cmluZ1xuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBhZGRUb1N0b3JlOiBmdW5jdGlvbiBhZGRUb1N0b3JlKCkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5tb2RlbCkgJiYgdGhpcy5tb2RlbC5pbmRleE9mKHRoaXMubGFiZWwpID09PSAtMSkge1xuICAgICAgICB0aGlzLm1vZGVsLnB1c2godGhpcy5sYWJlbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm1vZGVsID0gdGhpcy50cnVlTGFiZWwgfHwgdHJ1ZTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGhhbmRsZUNoYW5nZTogZnVuY3Rpb24gaGFuZGxlQ2hhbmdlKGV2KSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICBpZiAodGhpcy5pc0xpbWl0RXhjZWVkZWQpIHJldHVybjtcbiAgICAgIHZhciB2YWx1ZSA9IHZvaWQgMDtcbiAgICAgIGlmIChldi50YXJnZXQuY2hlY2tlZCkge1xuICAgICAgICB2YWx1ZSA9IHRoaXMudHJ1ZUxhYmVsID09PSB1bmRlZmluZWQgPyB0cnVlIDogdGhpcy50cnVlTGFiZWw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZSA9IHRoaXMuZmFsc2VMYWJlbCA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiB0aGlzLmZhbHNlTGFiZWw7XG4gICAgICB9XG4gICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCB2YWx1ZSwgZXYpO1xuICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoX3RoaXMuaXNHcm91cCkge1xuICAgICAgICAgIF90aGlzLmRpc3BhdGNoKCdFbENoZWNrYm94R3JvdXAnLCAnY2hhbmdlJywgW190aGlzLl9jaGVja2JveEdyb3VwLnZhbHVlXSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkOiBmdW5jdGlvbiBjcmVhdGVkKCkge1xuICAgIHRoaXMuY2hlY2tlZCAmJiB0aGlzLmFkZFRvU3RvcmUoKTtcbiAgfSxcbiAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCgpIHtcbiAgICAvLyDkuLppbmRldGVybWluYXRl5YWD57SgIOa3u+WKoGFyaWEtY29udHJvbHMg5bGe5oCnXG4gICAgaWYgKHRoaXMuaW5kZXRlcm1pbmF0ZSkge1xuICAgICAgdGhpcy4kZWwuc2V0QXR0cmlidXRlKCdhcmlhLWNvbnRyb2xzJywgdGhpcy5jb250cm9scyk7XG4gICAgfVxuICB9LFxuXG5cbiAgd2F0Y2g6IHtcbiAgICB2YWx1ZTogZnVuY3Rpb24gdmFsdWUoX3ZhbHVlKSB7XG4gICAgICB0aGlzLmRpc3BhdGNoKCdFbEZvcm1JdGVtJywgJ2VsLmZvcm0uY2hhbmdlJywgX3ZhbHVlKTtcbiAgICB9XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jaGVja2JveC9zcmMvY2hlY2tib3gudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY19jaGVja2JveHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChjaGVja2JveHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jaGVja2JveC9zcmMvY2hlY2tib3gudnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgY2hlY2tib3hfY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBzcmNfY2hlY2tib3h2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIGNoZWNrYm94dnVlX3R5cGVfdGVtcGxhdGVfaWRfZDAzODcwNzRfcmVuZGVyLFxuICBjaGVja2JveHZ1ZV90eXBlX3RlbXBsYXRlX2lkX2QwMzg3MDc0X3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgY2hlY2tib3hfYXBpOyB9XG5jaGVja2JveF9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL2NoZWNrYm94L3NyYy9jaGVja2JveC52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX2NoZWNrYm94ID0gKGNoZWNrYm94X2NvbXBvbmVudC5leHBvcnRzKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY2hlY2tib3gvaW5kZXguanNcblxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuc3JjX2NoZWNrYm94Lmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG4gIFZ1ZS5jb21wb25lbnQoc3JjX2NoZWNrYm94Lm5hbWUsIHNyY19jaGVja2JveCk7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc19jaGVja2JveCA9IChzcmNfY2hlY2tib3gpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9jaGVja2JveC9zcmMvY2hlY2tib3gtYnV0dG9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00NzhlOTA2ZSZcbnZhciBjaGVja2JveF9idXR0b252dWVfdHlwZV90ZW1wbGF0ZV9pZF80NzhlOTA2ZV9yZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJsYWJlbFwiLFxuICAgIHtcbiAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWNoZWNrYm94LWJ1dHRvblwiLFxuICAgICAgY2xhc3M6IFtcbiAgICAgICAgX3ZtLnNpemUgPyBcImVsLWNoZWNrYm94LWJ1dHRvbi0tXCIgKyBfdm0uc2l6ZSA6IFwiXCIsXG4gICAgICAgIHsgXCJpcy1kaXNhYmxlZFwiOiBfdm0uaXNEaXNhYmxlZCB9LFxuICAgICAgICB7IFwiaXMtY2hlY2tlZFwiOiBfdm0uaXNDaGVja2VkIH0sXG4gICAgICAgIHsgXCJpcy1mb2N1c1wiOiBfdm0uZm9jdXMgfVxuICAgICAgXSxcbiAgICAgIGF0dHJzOiB7XG4gICAgICAgIHJvbGU6IFwiY2hlY2tib3hcIixcbiAgICAgICAgXCJhcmlhLWNoZWNrZWRcIjogX3ZtLmlzQ2hlY2tlZCxcbiAgICAgICAgXCJhcmlhLWRpc2FibGVkXCI6IF92bS5pc0Rpc2FibGVkXG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICBfdm0udHJ1ZUxhYmVsIHx8IF92bS5mYWxzZUxhYmVsXG4gICAgICAgID8gX2MoXCJpbnB1dFwiLCB7XG4gICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcIm1vZGVsXCIsXG4gICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LW1vZGVsXCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IF92bS5tb2RlbCxcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcIm1vZGVsXCJcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWNoZWNrYm94LWJ1dHRvbl9fb3JpZ2luYWxcIixcbiAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgIHR5cGU6IFwiY2hlY2tib3hcIixcbiAgICAgICAgICAgICAgbmFtZTogX3ZtLm5hbWUsXG4gICAgICAgICAgICAgIGRpc2FibGVkOiBfdm0uaXNEaXNhYmxlZCxcbiAgICAgICAgICAgICAgXCJ0cnVlLXZhbHVlXCI6IF92bS50cnVlTGFiZWwsXG4gICAgICAgICAgICAgIFwiZmFsc2UtdmFsdWVcIjogX3ZtLmZhbHNlTGFiZWxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkb21Qcm9wczoge1xuICAgICAgICAgICAgICBjaGVja2VkOiBBcnJheS5pc0FycmF5KF92bS5tb2RlbClcbiAgICAgICAgICAgICAgICA/IF92bS5faShfdm0ubW9kZWwsIG51bGwpID4gLTFcbiAgICAgICAgICAgICAgICA6IF92bS5fcShfdm0ubW9kZWwsIF92bS50cnVlTGFiZWwpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgY2hhbmdlOiBbXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICB2YXIgJCRhID0gX3ZtLm1vZGVsLFxuICAgICAgICAgICAgICAgICAgICAkJGVsID0gJGV2ZW50LnRhcmdldCxcbiAgICAgICAgICAgICAgICAgICAgJCRjID0gJCRlbC5jaGVja2VkID8gX3ZtLnRydWVMYWJlbCA6IF92bS5mYWxzZUxhYmVsXG4gICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSgkJGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciAkJHYgPSBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICQkaSA9IF92bS5faSgkJGEsICQkdilcbiAgICAgICAgICAgICAgICAgICAgaWYgKCQkZWwuY2hlY2tlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICQkaSA8IDAgJiYgKF92bS5tb2RlbCA9ICQkYS5jb25jYXQoWyQkdl0pKVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICQkaSA+IC0xICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAoX3ZtLm1vZGVsID0gJCRhXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5zbGljZSgwLCAkJGkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoJCRhLnNsaWNlKCQkaSArIDEpKSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgX3ZtLm1vZGVsID0gJCRjXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBfdm0uaGFuZGxlQ2hhbmdlXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIGZvY3VzOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICBfdm0uZm9jdXMgPSB0cnVlXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGJsdXI6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgIF92bS5mb2N1cyA9IGZhbHNlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICA6IF9jKFwiaW5wdXRcIiwge1xuICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJtb2RlbFwiLFxuICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1tb2RlbFwiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0ubW9kZWwsXG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJtb2RlbFwiXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1jaGVja2JveC1idXR0b25fX29yaWdpbmFsXCIsXG4gICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICB0eXBlOiBcImNoZWNrYm94XCIsXG4gICAgICAgICAgICAgIG5hbWU6IF92bS5uYW1lLFxuICAgICAgICAgICAgICBkaXNhYmxlZDogX3ZtLmlzRGlzYWJsZWRcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkb21Qcm9wczoge1xuICAgICAgICAgICAgICB2YWx1ZTogX3ZtLmxhYmVsLFxuICAgICAgICAgICAgICBjaGVja2VkOiBBcnJheS5pc0FycmF5KF92bS5tb2RlbClcbiAgICAgICAgICAgICAgICA/IF92bS5faShfdm0ubW9kZWwsIF92bS5sYWJlbCkgPiAtMVxuICAgICAgICAgICAgICAgIDogX3ZtLm1vZGVsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgY2hhbmdlOiBbXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICB2YXIgJCRhID0gX3ZtLm1vZGVsLFxuICAgICAgICAgICAgICAgICAgICAkJGVsID0gJGV2ZW50LnRhcmdldCxcbiAgICAgICAgICAgICAgICAgICAgJCRjID0gJCRlbC5jaGVja2VkID8gdHJ1ZSA6IGZhbHNlXG4gICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSgkJGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciAkJHYgPSBfdm0ubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgICAgJCRpID0gX3ZtLl9pKCQkYSwgJCR2KVxuICAgICAgICAgICAgICAgICAgICBpZiAoJCRlbC5jaGVja2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgJCRpIDwgMCAmJiAoX3ZtLm1vZGVsID0gJCRhLmNvbmNhdChbJCR2XSkpXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgJCRpID4gLTEgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIChfdm0ubW9kZWwgPSAkJGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLnNsaWNlKDAsICQkaSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdCgkJGEuc2xpY2UoJCRpICsgMSkpKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBfdm0ubW9kZWwgPSAkJGNcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF92bS5oYW5kbGVDaGFuZ2VcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgZm9jdXM6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgIF92bS5mb2N1cyA9IHRydWVcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgYmx1cjogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgX3ZtLmZvY3VzID0gZmFsc2VcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLFxuICAgICAgX3ZtLiRzbG90cy5kZWZhdWx0IHx8IF92bS5sYWJlbFxuICAgICAgICA/IF9jKFxuICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWNoZWNrYm94LWJ1dHRvbl9faW5uZXJcIixcbiAgICAgICAgICAgICAgc3R5bGU6IF92bS5pc0NoZWNrZWQgPyBfdm0uYWN0aXZlU3R5bGUgOiBudWxsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW192bS5fdChcImRlZmF1bHRcIiwgW192bS5fdihfdm0uX3MoX3ZtLmxhYmVsKSldKV0sXG4gICAgICAgICAgICAyXG4gICAgICAgICAgKVxuICAgICAgICA6IF92bS5fZSgpXG4gICAgXVxuICApXG59XG52YXIgY2hlY2tib3hfYnV0dG9udnVlX3R5cGVfdGVtcGxhdGVfaWRfNDc4ZTkwNmVfc3RhdGljUmVuZGVyRm5zID0gW11cbmNoZWNrYm94X2J1dHRvbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzQ3OGU5MDZlX3JlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY2hlY2tib3gvc3JjL2NoZWNrYm94LWJ1dHRvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NDc4ZTkwNmUmXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2NoZWNrYm94L3NyYy9jaGVja2JveC1idXR0b24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgY2hlY2tib3hfYnV0dG9udnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbmFtZTogJ0VsQ2hlY2tib3hCdXR0b24nLFxuXG4gIG1peGluczogW2VtaXR0ZXJfZGVmYXVsdC5hXSxcblxuICBpbmplY3Q6IHtcbiAgICBlbEZvcm06IHtcbiAgICAgIGRlZmF1bHQ6ICcnXG4gICAgfSxcbiAgICBlbEZvcm1JdGVtOiB7XG4gICAgICBkZWZhdWx0OiAnJ1xuICAgIH1cbiAgfSxcblxuICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzZWxmTW9kZWw6IGZhbHNlLFxuICAgICAgZm9jdXM6IGZhbHNlLFxuICAgICAgaXNMaW1pdEV4Y2VlZGVkOiBmYWxzZVxuICAgIH07XG4gIH0sXG5cblxuICBwcm9wczoge1xuICAgIHZhbHVlOiB7fSxcbiAgICBsYWJlbDoge30sXG4gICAgZGlzYWJsZWQ6IEJvb2xlYW4sXG4gICAgY2hlY2tlZDogQm9vbGVhbixcbiAgICBuYW1lOiBTdHJpbmcsXG4gICAgdHJ1ZUxhYmVsOiBbU3RyaW5nLCBOdW1iZXJdLFxuICAgIGZhbHNlTGFiZWw6IFtTdHJpbmcsIE51bWJlcl1cbiAgfSxcbiAgY29tcHV0ZWQ6IHtcbiAgICBtb2RlbDoge1xuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jaGVja2JveEdyb3VwID8gdGhpcy5zdG9yZSA6IHRoaXMudmFsdWUgIT09IHVuZGVmaW5lZCA/IHRoaXMudmFsdWUgOiB0aGlzLnNlbGZNb2RlbDtcbiAgICAgIH0sXG4gICAgICBzZXQ6IGZ1bmN0aW9uIHNldCh2YWwpIHtcbiAgICAgICAgaWYgKHRoaXMuX2NoZWNrYm94R3JvdXApIHtcbiAgICAgICAgICB0aGlzLmlzTGltaXRFeGNlZWRlZCA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuX2NoZWNrYm94R3JvdXAubWluICE9PSB1bmRlZmluZWQgJiYgdmFsLmxlbmd0aCA8IHRoaXMuX2NoZWNrYm94R3JvdXAubWluICYmICh0aGlzLmlzTGltaXRFeGNlZWRlZCA9IHRydWUpO1xuXG4gICAgICAgICAgdGhpcy5fY2hlY2tib3hHcm91cC5tYXggIT09IHVuZGVmaW5lZCAmJiB2YWwubGVuZ3RoID4gdGhpcy5fY2hlY2tib3hHcm91cC5tYXggJiYgKHRoaXMuaXNMaW1pdEV4Y2VlZGVkID0gdHJ1ZSk7XG5cbiAgICAgICAgICB0aGlzLmlzTGltaXRFeGNlZWRlZCA9PT0gZmFsc2UgJiYgdGhpcy5kaXNwYXRjaCgnRWxDaGVja2JveEdyb3VwJywgJ2lucHV0JywgW3ZhbF0pO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgdmFsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNlbGZNb2RlbCA9IHZhbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBpc0NoZWNrZWQ6IGZ1bmN0aW9uIGlzQ2hlY2tlZCgpIHtcbiAgICAgIGlmICh7fS50b1N0cmluZy5jYWxsKHRoaXMubW9kZWwpID09PSAnW29iamVjdCBCb29sZWFuXScpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5tb2RlbCkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZWwuaW5kZXhPZih0aGlzLmxhYmVsKSA+IC0xO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLm1vZGVsICE9PSBudWxsICYmIHRoaXMubW9kZWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tb2RlbCA9PT0gdGhpcy50cnVlTGFiZWw7XG4gICAgICB9XG4gICAgfSxcbiAgICBfY2hlY2tib3hHcm91cDogZnVuY3Rpb24gX2NoZWNrYm94R3JvdXAoKSB7XG4gICAgICB2YXIgcGFyZW50ID0gdGhpcy4kcGFyZW50O1xuICAgICAgd2hpbGUgKHBhcmVudCkge1xuICAgICAgICBpZiAocGFyZW50LiRvcHRpb25zLmNvbXBvbmVudE5hbWUgIT09ICdFbENoZWNrYm94R3JvdXAnKSB7XG4gICAgICAgICAgcGFyZW50ID0gcGFyZW50LiRwYXJlbnQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHBhcmVudDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG4gICAgc3RvcmU6IGZ1bmN0aW9uIHN0b3JlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2NoZWNrYm94R3JvdXAgPyB0aGlzLl9jaGVja2JveEdyb3VwLnZhbHVlIDogdGhpcy52YWx1ZTtcbiAgICB9LFxuICAgIGFjdGl2ZVN0eWxlOiBmdW5jdGlvbiBhY3RpdmVTdHlsZSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogdGhpcy5fY2hlY2tib3hHcm91cC5maWxsIHx8ICcnLFxuICAgICAgICBib3JkZXJDb2xvcjogdGhpcy5fY2hlY2tib3hHcm91cC5maWxsIHx8ICcnLFxuICAgICAgICBjb2xvcjogdGhpcy5fY2hlY2tib3hHcm91cC50ZXh0Q29sb3IgfHwgJycsXG4gICAgICAgICdib3gtc2hhZG93JzogJy0xcHggMCAwIDAgJyArIHRoaXMuX2NoZWNrYm94R3JvdXAuZmlsbFxuXG4gICAgICB9O1xuICAgIH0sXG4gICAgX2VsRm9ybUl0ZW1TaXplOiBmdW5jdGlvbiBfZWxGb3JtSXRlbVNpemUoKSB7XG4gICAgICByZXR1cm4gKHRoaXMuZWxGb3JtSXRlbSB8fCB7fSkuZWxGb3JtSXRlbVNpemU7XG4gICAgfSxcbiAgICBzaXplOiBmdW5jdGlvbiBzaXplKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2NoZWNrYm94R3JvdXAuY2hlY2tib3hHcm91cFNpemUgfHwgdGhpcy5fZWxGb3JtSXRlbVNpemUgfHwgKHRoaXMuJEVMRU1FTlQgfHwge30pLnNpemU7XG4gICAgfSxcblxuXG4gICAgLyogdXNlZCB0byBtYWtlIHRoZSBpc0Rpc2FibGVkIGp1ZGdtZW50IHVuZGVyIG1heC9taW4gcHJvcHMgKi9cbiAgICBpc0xpbWl0RGlzYWJsZWQ6IGZ1bmN0aW9uIGlzTGltaXREaXNhYmxlZCgpIHtcbiAgICAgIHZhciBfY2hlY2tib3hHcm91cDIgPSB0aGlzLl9jaGVja2JveEdyb3VwLFxuICAgICAgICAgIG1heCA9IF9jaGVja2JveEdyb3VwMi5tYXgsXG4gICAgICAgICAgbWluID0gX2NoZWNrYm94R3JvdXAyLm1pbjtcblxuICAgICAgcmV0dXJuICEhKG1heCB8fCBtaW4pICYmIHRoaXMubW9kZWwubGVuZ3RoID49IG1heCAmJiAhdGhpcy5pc0NoZWNrZWQgfHwgdGhpcy5tb2RlbC5sZW5ndGggPD0gbWluICYmIHRoaXMuaXNDaGVja2VkO1xuICAgIH0sXG4gICAgaXNEaXNhYmxlZDogZnVuY3Rpb24gaXNEaXNhYmxlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9jaGVja2JveEdyb3VwID8gdGhpcy5fY2hlY2tib3hHcm91cC5kaXNhYmxlZCB8fCB0aGlzLmRpc2FibGVkIHx8ICh0aGlzLmVsRm9ybSB8fCB7fSkuZGlzYWJsZWQgfHwgdGhpcy5pc0xpbWl0RGlzYWJsZWQgOiB0aGlzLmRpc2FibGVkIHx8ICh0aGlzLmVsRm9ybSB8fCB7fSkuZGlzYWJsZWQ7XG4gICAgfVxuICB9LFxuICBtZXRob2RzOiB7XG4gICAgYWRkVG9TdG9yZTogZnVuY3Rpb24gYWRkVG9TdG9yZSgpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMubW9kZWwpICYmIHRoaXMubW9kZWwuaW5kZXhPZih0aGlzLmxhYmVsKSA9PT0gLTEpIHtcbiAgICAgICAgdGhpcy5tb2RlbC5wdXNoKHRoaXMubGFiZWwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5tb2RlbCA9IHRoaXMudHJ1ZUxhYmVsIHx8IHRydWU7XG4gICAgICB9XG4gICAgfSxcbiAgICBoYW5kbGVDaGFuZ2U6IGZ1bmN0aW9uIGhhbmRsZUNoYW5nZShldikge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgaWYgKHRoaXMuaXNMaW1pdEV4Y2VlZGVkKSByZXR1cm47XG4gICAgICB2YXIgdmFsdWUgPSB2b2lkIDA7XG4gICAgICBpZiAoZXYudGFyZ2V0LmNoZWNrZWQpIHtcbiAgICAgICAgdmFsdWUgPSB0aGlzLnRydWVMYWJlbCA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IHRoaXMudHJ1ZUxhYmVsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWUgPSB0aGlzLmZhbHNlTGFiZWwgPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogdGhpcy5mYWxzZUxhYmVsO1xuICAgICAgfVxuICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgdmFsdWUsIGV2KTtcbiAgICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKF90aGlzLl9jaGVja2JveEdyb3VwKSB7XG4gICAgICAgICAgX3RoaXMuZGlzcGF0Y2goJ0VsQ2hlY2tib3hHcm91cCcsICdjaGFuZ2UnLCBbX3RoaXMuX2NoZWNrYm94R3JvdXAudmFsdWVdKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQ6IGZ1bmN0aW9uIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5jaGVja2VkICYmIHRoaXMuYWRkVG9TdG9yZSgpO1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY2hlY2tib3gvc3JjL2NoZWNrYm94LWJ1dHRvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX2NoZWNrYm94X2J1dHRvbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChjaGVja2JveF9idXR0b252dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY2hlY2tib3gvc3JjL2NoZWNrYm94LWJ1dHRvbi52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBjaGVja2JveF9idXR0b25fY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBzcmNfY2hlY2tib3hfYnV0dG9udnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICBjaGVja2JveF9idXR0b252dWVfdHlwZV90ZW1wbGF0ZV9pZF80NzhlOTA2ZV9yZW5kZXIsXG4gIGNoZWNrYm94X2J1dHRvbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzQ3OGU5MDZlX3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgY2hlY2tib3hfYnV0dG9uX2FwaTsgfVxuY2hlY2tib3hfYnV0dG9uX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvY2hlY2tib3gvc3JjL2NoZWNrYm94LWJ1dHRvbi52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgY2hlY2tib3hfYnV0dG9uID0gKGNoZWNrYm94X2J1dHRvbl9jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2NoZWNrYm94LWJ1dHRvbi9pbmRleC5qc1xuXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5jaGVja2JveF9idXR0b24uaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcbiAgVnVlLmNvbXBvbmVudChjaGVja2JveF9idXR0b24ubmFtZSwgY2hlY2tib3hfYnV0dG9uKTtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhY2thZ2VzX2NoZWNrYm94X2J1dHRvbiA9IChjaGVja2JveF9idXR0b24pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9jaGVja2JveC9zcmMvY2hlY2tib3gtZ3JvdXAudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTcyODlhMjkwJlxudmFyIGNoZWNrYm94X2dyb3VwdnVlX3R5cGVfdGVtcGxhdGVfaWRfNzI4OWEyOTBfcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAge1xuICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtY2hlY2tib3gtZ3JvdXBcIixcbiAgICAgIGF0dHJzOiB7IHJvbGU6IFwiZ3JvdXBcIiwgXCJhcmlhLWxhYmVsXCI6IFwiY2hlY2tib3gtZ3JvdXBcIiB9XG4gICAgfSxcbiAgICBbX3ZtLl90KFwiZGVmYXVsdFwiKV0sXG4gICAgMlxuICApXG59XG52YXIgY2hlY2tib3hfZ3JvdXB2dWVfdHlwZV90ZW1wbGF0ZV9pZF83Mjg5YTI5MF9zdGF0aWNSZW5kZXJGbnMgPSBbXVxuY2hlY2tib3hfZ3JvdXB2dWVfdHlwZV90ZW1wbGF0ZV9pZF83Mjg5YTI5MF9yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2NoZWNrYm94L3NyYy9jaGVja2JveC1ncm91cC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NzI4OWEyOTAmXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2NoZWNrYm94L3NyYy9jaGVja2JveC1ncm91cC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG5cblxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBjaGVja2JveF9ncm91cHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG5hbWU6ICdFbENoZWNrYm94R3JvdXAnLFxuXG4gIGNvbXBvbmVudE5hbWU6ICdFbENoZWNrYm94R3JvdXAnLFxuXG4gIG1peGluczogW2VtaXR0ZXJfZGVmYXVsdC5hXSxcblxuICBpbmplY3Q6IHtcbiAgICBlbEZvcm1JdGVtOiB7XG4gICAgICBkZWZhdWx0OiAnJ1xuICAgIH1cbiAgfSxcblxuICBwcm9wczoge1xuICAgIHZhbHVlOiB7fSxcbiAgICBkaXNhYmxlZDogQm9vbGVhbixcbiAgICBtaW46IE51bWJlcixcbiAgICBtYXg6IE51bWJlcixcbiAgICBzaXplOiBTdHJpbmcsXG4gICAgZmlsbDogU3RyaW5nLFxuICAgIHRleHRDb2xvcjogU3RyaW5nXG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBfZWxGb3JtSXRlbVNpemU6IGZ1bmN0aW9uIF9lbEZvcm1JdGVtU2l6ZSgpIHtcbiAgICAgIHJldHVybiAodGhpcy5lbEZvcm1JdGVtIHx8IHt9KS5lbEZvcm1JdGVtU2l6ZTtcbiAgICB9LFxuICAgIGNoZWNrYm94R3JvdXBTaXplOiBmdW5jdGlvbiBjaGVja2JveEdyb3VwU2l6ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNpemUgfHwgdGhpcy5fZWxGb3JtSXRlbVNpemUgfHwgKHRoaXMuJEVMRU1FTlQgfHwge30pLnNpemU7XG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgdmFsdWU6IGZ1bmN0aW9uIHZhbHVlKF92YWx1ZSkge1xuICAgICAgdGhpcy5kaXNwYXRjaCgnRWxGb3JtSXRlbScsICdlbC5mb3JtLmNoYW5nZScsIFtfdmFsdWVdKTtcbiAgICB9XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jaGVja2JveC9zcmMvY2hlY2tib3gtZ3JvdXAudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY19jaGVja2JveF9ncm91cHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChjaGVja2JveF9ncm91cHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jaGVja2JveC9zcmMvY2hlY2tib3gtZ3JvdXAudnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgY2hlY2tib3hfZ3JvdXBfY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBzcmNfY2hlY2tib3hfZ3JvdXB2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIGNoZWNrYm94X2dyb3VwdnVlX3R5cGVfdGVtcGxhdGVfaWRfNzI4OWEyOTBfcmVuZGVyLFxuICBjaGVja2JveF9ncm91cHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzcyODlhMjkwX3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgY2hlY2tib3hfZ3JvdXBfYXBpOyB9XG5jaGVja2JveF9ncm91cF9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL2NoZWNrYm94L3NyYy9jaGVja2JveC1ncm91cC52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgY2hlY2tib3hfZ3JvdXAgPSAoY2hlY2tib3hfZ3JvdXBfY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jaGVja2JveC1ncm91cC9pbmRleC5qc1xuXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5jaGVja2JveF9ncm91cC5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuICBWdWUuY29tcG9uZW50KGNoZWNrYm94X2dyb3VwLm5hbWUsIGNoZWNrYm94X2dyb3VwKTtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhY2thZ2VzX2NoZWNrYm94X2dyb3VwID0gKGNoZWNrYm94X2dyb3VwKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvc3dpdGNoL3NyYy9jb21wb25lbnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTJkY2Q4ZmJiJlxudmFyIGNvbXBvbmVudHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzJkY2Q4ZmJiX3JlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHtcbiAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXN3aXRjaFwiLFxuICAgICAgY2xhc3M6IHsgXCJpcy1kaXNhYmxlZFwiOiBfdm0uc3dpdGNoRGlzYWJsZWQsIFwiaXMtY2hlY2tlZFwiOiBfdm0uY2hlY2tlZCB9LFxuICAgICAgYXR0cnM6IHtcbiAgICAgICAgcm9sZTogXCJzd2l0Y2hcIixcbiAgICAgICAgXCJhcmlhLWNoZWNrZWRcIjogX3ZtLmNoZWNrZWQsXG4gICAgICAgIFwiYXJpYS1kaXNhYmxlZFwiOiBfdm0uc3dpdGNoRGlzYWJsZWRcbiAgICAgIH0sXG4gICAgICBvbjoge1xuICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICByZXR1cm4gX3ZtLnN3aXRjaFZhbHVlKCRldmVudClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgW1xuICAgICAgX2MoXCJpbnB1dFwiLCB7XG4gICAgICAgIHJlZjogXCJpbnB1dFwiLFxuICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1zd2l0Y2hfX2lucHV0XCIsXG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgdHlwZTogXCJjaGVja2JveFwiLFxuICAgICAgICAgIGlkOiBfdm0uaWQsXG4gICAgICAgICAgbmFtZTogX3ZtLm5hbWUsXG4gICAgICAgICAgXCJ0cnVlLXZhbHVlXCI6IF92bS5hY3RpdmVWYWx1ZSxcbiAgICAgICAgICBcImZhbHNlLXZhbHVlXCI6IF92bS5pbmFjdGl2ZVZhbHVlLFxuICAgICAgICAgIGRpc2FibGVkOiBfdm0uc3dpdGNoRGlzYWJsZWRcbiAgICAgICAgfSxcbiAgICAgICAgb246IHtcbiAgICAgICAgICBjaGFuZ2U6IF92bS5oYW5kbGVDaGFuZ2UsXG4gICAgICAgICAga2V5ZG93bjogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICEoXCJidXR0b25cIiBpbiAkZXZlbnQpICYmXG4gICAgICAgICAgICAgIF92bS5faygkZXZlbnQua2V5Q29kZSwgXCJlbnRlclwiLCAxMywgJGV2ZW50LmtleSwgXCJFbnRlclwiKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gX3ZtLnN3aXRjaFZhbHVlKCRldmVudClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgX3ZtLmluYWN0aXZlSWNvbkNsYXNzIHx8IF92bS5pbmFjdGl2ZVRleHRcbiAgICAgICAgPyBfYyhcbiAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjbGFzczogW1xuICAgICAgICAgICAgICAgIFwiZWwtc3dpdGNoX19sYWJlbFwiLFxuICAgICAgICAgICAgICAgIFwiZWwtc3dpdGNoX19sYWJlbC0tbGVmdFwiLFxuICAgICAgICAgICAgICAgICFfdm0uY2hlY2tlZCA/IFwiaXMtYWN0aXZlXCIgOiBcIlwiXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF92bS5pbmFjdGl2ZUljb25DbGFzc1xuICAgICAgICAgICAgICAgID8gX2MoXCJpXCIsIHsgY2xhc3M6IFtfdm0uaW5hY3RpdmVJY29uQ2xhc3NdIH0pXG4gICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgIV92bS5pbmFjdGl2ZUljb25DbGFzcyAmJiBfdm0uaW5hY3RpdmVUZXh0XG4gICAgICAgICAgICAgICAgPyBfYyhcInNwYW5cIiwgeyBhdHRyczogeyBcImFyaWEtaGlkZGVuXCI6IF92bS5jaGVja2VkIH0gfSwgW1xuICAgICAgICAgICAgICAgICAgICBfdm0uX3YoX3ZtLl9zKF92bS5pbmFjdGl2ZVRleHQpKVxuICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgICAgICBdXG4gICAgICAgICAgKVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgX2MoXCJzcGFuXCIsIHtcbiAgICAgICAgcmVmOiBcImNvcmVcIixcbiAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtc3dpdGNoX19jb3JlXCIsXG4gICAgICAgIHN0eWxlOiB7IHdpZHRoOiBfdm0uY29yZVdpZHRoICsgXCJweFwiIH1cbiAgICAgIH0pLFxuICAgICAgX3ZtLmFjdGl2ZUljb25DbGFzcyB8fCBfdm0uYWN0aXZlVGV4dFxuICAgICAgICA/IF9jKFxuICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNsYXNzOiBbXG4gICAgICAgICAgICAgICAgXCJlbC1zd2l0Y2hfX2xhYmVsXCIsXG4gICAgICAgICAgICAgICAgXCJlbC1zd2l0Y2hfX2xhYmVsLS1yaWdodFwiLFxuICAgICAgICAgICAgICAgIF92bS5jaGVja2VkID8gXCJpcy1hY3RpdmVcIiA6IFwiXCJcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX3ZtLmFjdGl2ZUljb25DbGFzc1xuICAgICAgICAgICAgICAgID8gX2MoXCJpXCIsIHsgY2xhc3M6IFtfdm0uYWN0aXZlSWNvbkNsYXNzXSB9KVxuICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgICFfdm0uYWN0aXZlSWNvbkNsYXNzICYmIF92bS5hY3RpdmVUZXh0XG4gICAgICAgICAgICAgICAgPyBfYyhcInNwYW5cIiwgeyBhdHRyczogeyBcImFyaWEtaGlkZGVuXCI6ICFfdm0uY2hlY2tlZCB9IH0sIFtcbiAgICAgICAgICAgICAgICAgICAgX3ZtLl92KF92bS5fcyhfdm0uYWN0aXZlVGV4dCkpXG4gICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgICAgIF1cbiAgICAgICAgICApXG4gICAgICAgIDogX3ZtLl9lKClcbiAgICBdXG4gIClcbn1cbnZhciBjb21wb25lbnR2dWVfdHlwZV90ZW1wbGF0ZV9pZF8yZGNkOGZiYl9zdGF0aWNSZW5kZXJGbnMgPSBbXVxuY29tcG9uZW50dnVlX3R5cGVfdGVtcGxhdGVfaWRfMmRjZDhmYmJfcmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9zd2l0Y2gvc3JjL2NvbXBvbmVudC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MmRjZDhmYmImXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3N3aXRjaC9zcmMvY29tcG9uZW50LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cblxuXG5cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3dpdGNoX3NyY19jb21wb25lbnR2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBuYW1lOiAnRWxTd2l0Y2gnLFxuICBtaXhpbnM6IFtmb2N1c19kZWZhdWx0KCkoJ2lucHV0JyksIG1pZ3JhdGluZ19kZWZhdWx0LmEsIGVtaXR0ZXJfZGVmYXVsdC5hXSxcbiAgaW5qZWN0OiB7XG4gICAgZWxGb3JtOiB7XG4gICAgICBkZWZhdWx0OiAnJ1xuICAgIH1cbiAgfSxcbiAgcHJvcHM6IHtcbiAgICB2YWx1ZToge1xuICAgICAgdHlwZTogW0Jvb2xlYW4sIFN0cmluZywgTnVtYmVyXSxcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSxcbiAgICBkaXNhYmxlZDoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSxcbiAgICB3aWR0aDoge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZGVmYXVsdDogNDBcbiAgICB9LFxuICAgIGFjdGl2ZUljb25DbGFzczoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJydcbiAgICB9LFxuICAgIGluYWN0aXZlSWNvbkNsYXNzOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnJ1xuICAgIH0sXG4gICAgYWN0aXZlVGV4dDogU3RyaW5nLFxuICAgIGluYWN0aXZlVGV4dDogU3RyaW5nLFxuICAgIGFjdGl2ZUNvbG9yOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnJ1xuICAgIH0sXG4gICAgaW5hY3RpdmVDb2xvcjoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJydcbiAgICB9LFxuICAgIGFjdGl2ZVZhbHVlOiB7XG4gICAgICB0eXBlOiBbQm9vbGVhbiwgU3RyaW5nLCBOdW1iZXJdLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0sXG4gICAgaW5hY3RpdmVWYWx1ZToge1xuICAgICAgdHlwZTogW0Jvb2xlYW4sIFN0cmluZywgTnVtYmVyXSxcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSxcbiAgICBuYW1lOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnJ1xuICAgIH0sXG4gICAgdmFsaWRhdGVFdmVudDoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9LFxuICAgIGlkOiBTdHJpbmdcbiAgfSxcbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29yZVdpZHRoOiB0aGlzLndpZHRoXG4gICAgfTtcbiAgfSxcbiAgY3JlYXRlZDogZnVuY3Rpb24gY3JlYXRlZCgpIHtcbiAgICBpZiAoIX5bdGhpcy5hY3RpdmVWYWx1ZSwgdGhpcy5pbmFjdGl2ZVZhbHVlXS5pbmRleE9mKHRoaXMudmFsdWUpKSB7XG4gICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIHRoaXMuaW5hY3RpdmVWYWx1ZSk7XG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgY2hlY2tlZDogZnVuY3Rpb24gY2hlY2tlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnZhbHVlID09PSB0aGlzLmFjdGl2ZVZhbHVlO1xuICAgIH0sXG4gICAgc3dpdGNoRGlzYWJsZWQ6IGZ1bmN0aW9uIHN3aXRjaERpc2FibGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQgfHwgKHRoaXMuZWxGb3JtIHx8IHt9KS5kaXNhYmxlZDtcbiAgICB9XG4gIH0sXG4gIHdhdGNoOiB7XG4gICAgY2hlY2tlZDogZnVuY3Rpb24gY2hlY2tlZCgpIHtcbiAgICAgIHRoaXMuJHJlZnMuaW5wdXQuY2hlY2tlZCA9IHRoaXMuY2hlY2tlZDtcbiAgICAgIGlmICh0aGlzLmFjdGl2ZUNvbG9yIHx8IHRoaXMuaW5hY3RpdmVDb2xvcikge1xuICAgICAgICB0aGlzLnNldEJhY2tncm91bmRDb2xvcigpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMudmFsaWRhdGVFdmVudCkge1xuICAgICAgICB0aGlzLmRpc3BhdGNoKCdFbEZvcm1JdGVtJywgJ2VsLmZvcm0uY2hhbmdlJywgW3RoaXMudmFsdWVdKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICBoYW5kbGVDaGFuZ2U6IGZ1bmN0aW9uIGhhbmRsZUNoYW5nZShldmVudCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgdmFyIHZhbCA9IHRoaXMuY2hlY2tlZCA/IHRoaXMuaW5hY3RpdmVWYWx1ZSA6IHRoaXMuYWN0aXZlVmFsdWU7XG4gICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIHZhbCk7XG4gICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCB2YWwpO1xuICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBzZXQgaW5wdXQncyBjaGVja2VkIHByb3BlcnR5XG4gICAgICAgIC8vIGluIGNhc2UgcGFyZW50IHJlZnVzZXMgdG8gY2hhbmdlIGNvbXBvbmVudCdzIHZhbHVlXG4gICAgICAgIGlmIChfdGhpcy4kcmVmcy5pbnB1dCkge1xuICAgICAgICAgIF90aGlzLiRyZWZzLmlucHV0LmNoZWNrZWQgPSBfdGhpcy5jaGVja2VkO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuICAgIHNldEJhY2tncm91bmRDb2xvcjogZnVuY3Rpb24gc2V0QmFja2dyb3VuZENvbG9yKCkge1xuICAgICAgdmFyIG5ld0NvbG9yID0gdGhpcy5jaGVja2VkID8gdGhpcy5hY3RpdmVDb2xvciA6IHRoaXMuaW5hY3RpdmVDb2xvcjtcbiAgICAgIHRoaXMuJHJlZnMuY29yZS5zdHlsZS5ib3JkZXJDb2xvciA9IG5ld0NvbG9yO1xuICAgICAgdGhpcy4kcmVmcy5jb3JlLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IG5ld0NvbG9yO1xuICAgIH0sXG4gICAgc3dpdGNoVmFsdWU6IGZ1bmN0aW9uIHN3aXRjaFZhbHVlKCkge1xuICAgICAgIXRoaXMuc3dpdGNoRGlzYWJsZWQgJiYgdGhpcy5oYW5kbGVDaGFuZ2UoKTtcbiAgICB9LFxuICAgIGdldE1pZ3JhdGluZ0NvbmZpZzogZnVuY3Rpb24gZ2V0TWlncmF0aW5nQ29uZmlnKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAnb24tY29sb3InOiAnb24tY29sb3IgaXMgcmVuYW1lZCB0byBhY3RpdmUtY29sb3IuJyxcbiAgICAgICAgICAnb2ZmLWNvbG9yJzogJ29mZi1jb2xvciBpcyByZW5hbWVkIHRvIGluYWN0aXZlLWNvbG9yLicsXG4gICAgICAgICAgJ29uLXRleHQnOiAnb24tdGV4dCBpcyByZW5hbWVkIHRvIGFjdGl2ZS10ZXh0LicsXG4gICAgICAgICAgJ29mZi10ZXh0JzogJ29mZi10ZXh0IGlzIHJlbmFtZWQgdG8gaW5hY3RpdmUtdGV4dC4nLFxuICAgICAgICAgICdvbi12YWx1ZSc6ICdvbi12YWx1ZSBpcyByZW5hbWVkIHRvIGFjdGl2ZS12YWx1ZS4nLFxuICAgICAgICAgICdvZmYtdmFsdWUnOiAnb2ZmLXZhbHVlIGlzIHJlbmFtZWQgdG8gaW5hY3RpdmUtdmFsdWUuJyxcbiAgICAgICAgICAnb24taWNvbi1jbGFzcyc6ICdvbi1pY29uLWNsYXNzIGlzIHJlbmFtZWQgdG8gYWN0aXZlLWljb24tY2xhc3MuJyxcbiAgICAgICAgICAnb2ZmLWljb24tY2xhc3MnOiAnb2ZmLWljb24tY2xhc3MgaXMgcmVuYW1lZCB0byBpbmFjdGl2ZS1pY29uLWNsYXNzLidcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gIH0sXG4gIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgdGhpcy5jb3JlV2lkdGggPSB0aGlzLndpZHRoIHx8IDQwO1xuICAgIGlmICh0aGlzLmFjdGl2ZUNvbG9yIHx8IHRoaXMuaW5hY3RpdmVDb2xvcikge1xuICAgICAgdGhpcy5zZXRCYWNrZ3JvdW5kQ29sb3IoKTtcbiAgICB9XG4gICAgdGhpcy4kcmVmcy5pbnB1dC5jaGVja2VkID0gdGhpcy5jaGVja2VkO1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvc3dpdGNoL3NyYy9jb21wb25lbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhY2thZ2VzX3N3aXRjaF9zcmNfY29tcG9uZW50dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHN3aXRjaF9zcmNfY29tcG9uZW50dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3N3aXRjaC9zcmMvY29tcG9uZW50LnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIHNyY19jb21wb25lbnRfY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBwYWNrYWdlc19zd2l0Y2hfc3JjX2NvbXBvbmVudHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgY29tcG9uZW50dnVlX3R5cGVfdGVtcGxhdGVfaWRfMmRjZDhmYmJfcmVuZGVyLFxuICBjb21wb25lbnR2dWVfdHlwZV90ZW1wbGF0ZV9pZF8yZGNkOGZiYl9zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIHNyY19jb21wb25lbnRfYXBpOyB9XG5zcmNfY29tcG9uZW50X2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvc3dpdGNoL3NyYy9jb21wb25lbnQudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHN3aXRjaF9zcmNfY29tcG9uZW50ID0gKHNyY19jb21wb25lbnRfY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9zd2l0Y2gvaW5kZXguanNcblxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuc3dpdGNoX3NyY19jb21wb25lbnQuaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcbiAgVnVlLmNvbXBvbmVudChzd2l0Y2hfc3JjX2NvbXBvbmVudC5uYW1lLCBzd2l0Y2hfc3JjX2NvbXBvbmVudCk7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc19zd2l0Y2ggPSAoc3dpdGNoX3NyY19jb21wb25lbnQpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9zZWxlY3Qvc3JjL3NlbGVjdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MGU0YWFkZTYmXG52YXIgc2VsZWN0dnVlX3R5cGVfdGVtcGxhdGVfaWRfMGU0YWFkZTZfcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAge1xuICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJjbGlja291dHNpZGVcIixcbiAgICAgICAgICByYXdOYW1lOiBcInYtY2xpY2tvdXRzaWRlXCIsXG4gICAgICAgICAgdmFsdWU6IF92bS5oYW5kbGVDbG9zZSxcbiAgICAgICAgICBleHByZXNzaW9uOiBcImhhbmRsZUNsb3NlXCJcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXNlbGVjdFwiLFxuICAgICAgY2xhc3M6IFtfdm0uc2VsZWN0U2l6ZSA/IFwiZWwtc2VsZWN0LS1cIiArIF92bS5zZWxlY3RTaXplIDogXCJcIl0sXG4gICAgICBvbjoge1xuICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgcmV0dXJuIF92bS50b2dnbGVNZW51KCRldmVudClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgW1xuICAgICAgX3ZtLm11bHRpcGxlXG4gICAgICAgID8gX2MoXG4gICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICByZWY6IFwidGFnc1wiLFxuICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1zZWxlY3RfX3RhZ3NcIixcbiAgICAgICAgICAgICAgc3R5bGU6IHsgXCJtYXgtd2lkdGhcIjogX3ZtLmlucHV0V2lkdGggLSAzMiArIFwicHhcIiwgd2lkdGg6IFwiMTAwJVwiIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF92bS5jb2xsYXBzZVRhZ3MgJiYgX3ZtLnNlbGVjdGVkLmxlbmd0aFxuICAgICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICBcImVsLXRhZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NhYmxlOiAhX3ZtLnNlbGVjdERpc2FibGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU6IF92bS5jb2xsYXBzZVRhZ1NpemUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGl0OiBfdm0uc2VsZWN0ZWRbMF0uaGl0U3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJpbmZvXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXNhYmxlLXRyYW5zaXRpb25zXCI6IFwiXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZTogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uZGVsZXRlVGFnKCRldmVudCwgX3ZtLnNlbGVjdGVkWzBdKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJzcGFuXCIsIHsgc3RhdGljQ2xhc3M6IFwiZWwtc2VsZWN0X190YWdzLXRleHRcIiB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KF92bS5fcyhfdm0uc2VsZWN0ZWRbMF0uY3VycmVudExhYmVsKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgIF92bS5zZWxlY3RlZC5sZW5ndGggPiAxXG4gICAgICAgICAgICAgICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZWwtdGFnXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2FibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplOiBfdm0uY29sbGFwc2VUYWdTaXplLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImluZm9cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXNhYmxlLXRyYW5zaXRpb25zXCI6IFwiXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJlbC1zZWxlY3RfX3RhZ3MtdGV4dFwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtfdm0uX3YoXCIrIFwiICsgX3ZtLl9zKF92bS5zZWxlY3RlZC5sZW5ndGggLSAxKSldXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICAhX3ZtLmNvbGxhcHNlVGFnc1xuICAgICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICAgIFwidHJhbnNpdGlvbi1ncm91cFwiLFxuICAgICAgICAgICAgICAgICAgICB7IG9uOiB7IFwiYWZ0ZXItbGVhdmVcIjogX3ZtLnJlc2V0SW5wdXRIZWlnaHQgfSB9LFxuICAgICAgICAgICAgICAgICAgICBfdm0uX2woX3ZtLnNlbGVjdGVkLCBmdW5jdGlvbihpdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJlbC10YWdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBfdm0uZ2V0VmFsdWVLZXkoaXRlbSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2FibGU6ICFfdm0uc2VsZWN0RGlzYWJsZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZTogX3ZtLmNvbGxhcHNlVGFnU2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaXQ6IGl0ZW0uaGl0U3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJpbmZvXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXNhYmxlLXRyYW5zaXRpb25zXCI6IFwiXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZTogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uZGVsZXRlVGFnKCRldmVudCwgaXRlbSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFwic3BhblwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLXNlbGVjdF9fdGFncy10ZXh0XCIgfSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihfdm0uX3MoaXRlbS5jdXJyZW50TGFiZWwpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICBfdm0uZmlsdGVyYWJsZVxuICAgICAgICAgICAgICAgID8gX2MoXCJpbnB1dFwiLCB7XG4gICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIm1vZGVsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtbW9kZWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0ucXVlcnksXG4gICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcInF1ZXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIHJlZjogXCJpbnB1dFwiLFxuICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1zZWxlY3RfX2lucHV0XCIsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzOiBbX3ZtLnNlbGVjdFNpemUgPyBcImlzLVwiICsgX3ZtLnNlbGVjdFNpemUgOiBcIlwiXSxcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICBcImZsZXgtZ3Jvd1wiOiBcIjFcIixcbiAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogX3ZtLmlucHV0TGVuZ3RoIC8gKF92bS5pbnB1dFdpZHRoIC0gMzIpICsgXCIlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgXCJtYXgtd2lkdGhcIjogX3ZtLmlucHV0V2lkdGggLSA0MiArIFwicHhcIlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBfdm0uc2VsZWN0RGlzYWJsZWQsXG4gICAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlOiBfdm0uYXV0b0NvbXBsZXRlIHx8IF92bS5hdXRvY29tcGxldGVcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZG9tUHJvcHM6IHsgdmFsdWU6IF92bS5xdWVyeSB9LFxuICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgIGZvY3VzOiBfdm0uaGFuZGxlRm9jdXMsXG4gICAgICAgICAgICAgICAgICAgICAgYmx1cjogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfdm0uc29mdEZvY3VzID0gZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIGtleXVwOiBfdm0ubWFuYWdlUGxhY2Vob2xkZXIsXG4gICAgICAgICAgICAgICAgICAgICAga2V5ZG93bjogW1xuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLnJlc2V0SW5wdXRTdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIShcImJ1dHRvblwiIGluICRldmVudCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX2soJGV2ZW50LmtleUNvZGUsIFwiZG93blwiLCA0MCwgJGV2ZW50LmtleSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJEb3duXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkFycm93RG93blwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uaGFuZGxlTmF2aWdhdGUoXCJuZXh0XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhKFwiYnV0dG9uXCIgaW4gJGV2ZW50KSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5faygkZXZlbnQua2V5Q29kZSwgXCJ1cFwiLCAzOCwgJGV2ZW50LmtleSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJVcFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJBcnJvd1VwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5oYW5kbGVOYXZpZ2F0ZShcInByZXZcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICEoXCJidXR0b25cIiBpbiAkZXZlbnQpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl9rKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50LmtleUNvZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImVudGVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudC5rZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkVudGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS5zZWxlY3RPcHRpb24oJGV2ZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIShcImJ1dHRvblwiIGluICRldmVudCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX2soJGV2ZW50LmtleUNvZGUsIFwiZXNjXCIsIDI3LCAkZXZlbnQua2V5LCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkVzY1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJFc2NhcGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF92bS52aXNpYmxlID0gZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICEoXCJidXR0b25cIiBpbiAkZXZlbnQpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl9rKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50LmtleUNvZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRlbGV0ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzgsIDQ2XSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudC5rZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXCJCYWNrc3BhY2VcIiwgXCJEZWxldGVcIiwgXCJEZWxcIl1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS5kZWxldGVQcmV2VGFnKCRldmVudClcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICEoXCJidXR0b25cIiBpbiAkZXZlbnQpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl9rKCRldmVudC5rZXlDb2RlLCBcInRhYlwiLCA5LCAkZXZlbnQua2V5LCBcIlRhYlwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIF92bS52aXNpYmxlID0gZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgIGNvbXBvc2l0aW9uc3RhcnQ6IF92bS5oYW5kbGVDb21wb3NpdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGlvbnVwZGF0ZTogX3ZtLmhhbmRsZUNvbXBvc2l0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgIGNvbXBvc2l0aW9uZW5kOiBfdm0uaGFuZGxlQ29tcG9zaXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgaW5wdXQ6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGV2ZW50LnRhcmdldC5jb21wb3NpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0ucXVlcnkgPSAkZXZlbnQudGFyZ2V0LnZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLmRlYm91bmNlZFF1ZXJ5Q2hhbmdlXG4gICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAxXG4gICAgICAgICAgKVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgX2MoXG4gICAgICAgIFwiZWwtaW5wdXRcIixcbiAgICAgICAge1xuICAgICAgICAgIHJlZjogXCJyZWZlcmVuY2VcIixcbiAgICAgICAgICBjbGFzczogeyBcImlzLWZvY3VzXCI6IF92bS52aXNpYmxlIH0sXG4gICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgcGxhY2Vob2xkZXI6IF92bS5jdXJyZW50UGxhY2Vob2xkZXIsXG4gICAgICAgICAgICBuYW1lOiBfdm0ubmFtZSxcbiAgICAgICAgICAgIGlkOiBfdm0uaWQsXG4gICAgICAgICAgICBhdXRvY29tcGxldGU6IF92bS5hdXRvQ29tcGxldGUgfHwgX3ZtLmF1dG9jb21wbGV0ZSxcbiAgICAgICAgICAgIHNpemU6IF92bS5zZWxlY3RTaXplLFxuICAgICAgICAgICAgZGlzYWJsZWQ6IF92bS5zZWxlY3REaXNhYmxlZCxcbiAgICAgICAgICAgIHJlYWRvbmx5OiBfdm0ucmVhZG9ubHksXG4gICAgICAgICAgICBcInZhbGlkYXRlLWV2ZW50XCI6IGZhbHNlLFxuICAgICAgICAgICAgdGFiaW5kZXg6IF92bS5tdWx0aXBsZSAmJiBfdm0uZmlsdGVyYWJsZSA/IFwiLTFcIiA6IG51bGxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICBmb2N1czogX3ZtLmhhbmRsZUZvY3VzLFxuICAgICAgICAgICAgYmx1cjogX3ZtLmhhbmRsZUJsdXIsXG4gICAgICAgICAgICBpbnB1dDogX3ZtLmRlYm91bmNlZE9uSW5wdXRDaGFuZ2UsXG4gICAgICAgICAgICBjb21wb3NpdGlvbnN0YXJ0OiBfdm0uaGFuZGxlQ29tcG9zaXRpb24sXG4gICAgICAgICAgICBjb21wb3NpdGlvbnVwZGF0ZTogX3ZtLmhhbmRsZUNvbXBvc2l0aW9uLFxuICAgICAgICAgICAgY29tcG9zaXRpb25lbmQ6IF92bS5oYW5kbGVDb21wb3NpdGlvblxuICAgICAgICAgIH0sXG4gICAgICAgICAgbmF0aXZlT246IHtcbiAgICAgICAgICAgIGtleWRvd246IFtcbiAgICAgICAgICAgICAgZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgIShcImJ1dHRvblwiIGluICRldmVudCkgJiZcbiAgICAgICAgICAgICAgICAgIF92bS5faygkZXZlbnQua2V5Q29kZSwgXCJkb3duXCIsIDQwLCAkZXZlbnQua2V5LCBbXG4gICAgICAgICAgICAgICAgICAgIFwiRG93blwiLFxuICAgICAgICAgICAgICAgICAgICBcIkFycm93RG93blwiXG4gICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgICAgICBfdm0uaGFuZGxlTmF2aWdhdGUoXCJuZXh0XCIpXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICEoXCJidXR0b25cIiBpbiAkZXZlbnQpICYmXG4gICAgICAgICAgICAgICAgICBfdm0uX2soJGV2ZW50LmtleUNvZGUsIFwidXBcIiwgMzgsICRldmVudC5rZXksIFtcbiAgICAgICAgICAgICAgICAgICAgXCJVcFwiLFxuICAgICAgICAgICAgICAgICAgICBcIkFycm93VXBcIlxuICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICAgICAgX3ZtLmhhbmRsZU5hdmlnYXRlKFwicHJldlwiKVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAhKFwiYnV0dG9uXCIgaW4gJGV2ZW50KSAmJlxuICAgICAgICAgICAgICAgICAgX3ZtLl9rKCRldmVudC5rZXlDb2RlLCBcImVudGVyXCIsIDEzLCAkZXZlbnQua2V5LCBcIkVudGVyXCIpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgICAgIHJldHVybiBfdm0uc2VsZWN0T3B0aW9uKCRldmVudClcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgIShcImJ1dHRvblwiIGluICRldmVudCkgJiZcbiAgICAgICAgICAgICAgICAgIF92bS5faygkZXZlbnQua2V5Q29kZSwgXCJlc2NcIiwgMjcsICRldmVudC5rZXksIFtcbiAgICAgICAgICAgICAgICAgICAgXCJFc2NcIixcbiAgICAgICAgICAgICAgICAgICAgXCJFc2NhcGVcIlxuICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICAgICAgX3ZtLnZpc2libGUgPSBmYWxzZVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAhKFwiYnV0dG9uXCIgaW4gJGV2ZW50KSAmJlxuICAgICAgICAgICAgICAgICAgX3ZtLl9rKCRldmVudC5rZXlDb2RlLCBcInRhYlwiLCA5LCAkZXZlbnQua2V5LCBcIlRhYlwiKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgX3ZtLnZpc2libGUgPSBmYWxzZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgbW91c2VlbnRlcjogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgIF92bS5pbnB1dEhvdmVyaW5nID0gdHJ1ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1vdXNlbGVhdmU6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICBfdm0uaW5wdXRIb3ZlcmluZyA9IGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBtb2RlbDoge1xuICAgICAgICAgICAgdmFsdWU6IF92bS5zZWxlY3RlZExhYmVsLFxuICAgICAgICAgICAgY2FsbGJhY2s6IGZ1bmN0aW9uKCQkdikge1xuICAgICAgICAgICAgICBfdm0uc2VsZWN0ZWRMYWJlbCA9ICQkdlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGV4cHJlc3Npb246IFwic2VsZWN0ZWRMYWJlbFwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBbXG4gICAgICAgICAgX3ZtLiRzbG90cy5wcmVmaXhcbiAgICAgICAgICAgID8gX2MoXCJ0ZW1wbGF0ZVwiLCB7IHNsb3Q6IFwicHJlZml4XCIgfSwgW192bS5fdChcInByZWZpeFwiKV0sIDIpXG4gICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgIF9jKFwidGVtcGxhdGVcIiwgeyBzbG90OiBcInN1ZmZpeFwiIH0sIFtcbiAgICAgICAgICAgIF9jKFwiaVwiLCB7XG4gICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogIV92bS5zaG93Q2xvc2UsXG4gICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcIiFzaG93Q2xvc2VcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgY2xhc3M6IFtcbiAgICAgICAgICAgICAgICBcImVsLXNlbGVjdF9fY2FyZXRcIixcbiAgICAgICAgICAgICAgICBcImVsLWlucHV0X19pY29uXCIsXG4gICAgICAgICAgICAgICAgXCJlbC1pY29uLVwiICsgX3ZtLmljb25DbGFzc1xuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIF92bS5zaG93Q2xvc2VcbiAgICAgICAgICAgICAgPyBfYyhcImlcIiwge1xuICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6XG4gICAgICAgICAgICAgICAgICAgIFwiZWwtc2VsZWN0X19jYXJldCBlbC1pbnB1dF9faWNvbiBlbC1pY29uLWNpcmNsZS1jbG9zZVwiLFxuICAgICAgICAgICAgICAgICAgb246IHsgY2xpY2s6IF92bS5oYW5kbGVDbGVhckNsaWNrIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgICAgXSlcbiAgICAgICAgXSxcbiAgICAgICAgMlxuICAgICAgKSxcbiAgICAgIF9jKFxuICAgICAgICBcInRyYW5zaXRpb25cIixcbiAgICAgICAge1xuICAgICAgICAgIGF0dHJzOiB7IG5hbWU6IFwiZWwtem9vbS1pbi10b3BcIiB9LFxuICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICBcImJlZm9yZS1lbnRlclwiOiBfdm0uaGFuZGxlTWVudUVudGVyLFxuICAgICAgICAgICAgXCJhZnRlci1sZWF2ZVwiOiBfdm0uZG9EZXN0cm95XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBbXG4gICAgICAgICAgX2MoXG4gICAgICAgICAgICBcImVsLXNlbGVjdC1tZW51XCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLnZpc2libGUgJiYgX3ZtLmVtcHR5VGV4dCAhPT0gZmFsc2UsXG4gICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcInZpc2libGUgJiYgZW1wdHlUZXh0ICE9PSBmYWxzZVwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICByZWY6IFwicG9wcGVyXCIsXG4gICAgICAgICAgICAgIGF0dHJzOiB7IFwiYXBwZW5kLXRvLWJvZHlcIjogX3ZtLnBvcHBlckFwcGVuZFRvQm9keSB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICBcImVsLXNjcm9sbGJhclwiLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IF92bS5vcHRpb25zLmxlbmd0aCA+IDAgJiYgIV92bS5sb2FkaW5nLFxuICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwib3B0aW9ucy5sZW5ndGggPiAwICYmICFsb2FkaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgIHJlZjogXCJzY3JvbGxiYXJcIixcbiAgICAgICAgICAgICAgICAgIGNsYXNzOiB7XG4gICAgICAgICAgICAgICAgICAgIFwiaXMtZW1wdHlcIjpcbiAgICAgICAgICAgICAgICAgICAgICAhX3ZtLmFsbG93Q3JlYXRlICYmXG4gICAgICAgICAgICAgICAgICAgICAgX3ZtLnF1ZXJ5ICYmXG4gICAgICAgICAgICAgICAgICAgICAgX3ZtLmZpbHRlcmVkT3B0aW9uc0NvdW50ID09PSAwXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgdGFnOiBcInVsXCIsXG4gICAgICAgICAgICAgICAgICAgIFwid3JhcC1jbGFzc1wiOiBcImVsLXNlbGVjdC1kcm9wZG93bl9fd3JhcFwiLFxuICAgICAgICAgICAgICAgICAgICBcInZpZXctY2xhc3NcIjogXCJlbC1zZWxlY3QtZHJvcGRvd25fX2xpc3RcIlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgX3ZtLnNob3dOZXdPcHRpb25cbiAgICAgICAgICAgICAgICAgICAgPyBfYyhcImVsLW9wdGlvblwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyB2YWx1ZTogX3ZtLnF1ZXJ5LCBjcmVhdGVkOiBcIlwiIH1cbiAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICAgICAgX3ZtLl90KFwiZGVmYXVsdFwiKVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBfdm0uZW1wdHlUZXh0ICYmXG4gICAgICAgICAgICAgICghX3ZtLmFsbG93Q3JlYXRlIHx8XG4gICAgICAgICAgICAgICAgX3ZtLmxvYWRpbmcgfHxcbiAgICAgICAgICAgICAgICAoX3ZtLmFsbG93Q3JlYXRlICYmIF92bS5vcHRpb25zLmxlbmd0aCA9PT0gMCkpXG4gICAgICAgICAgICAgICAgPyBbXG4gICAgICAgICAgICAgICAgICAgIF92bS4kc2xvdHMuZW1wdHlcbiAgICAgICAgICAgICAgICAgICAgICA/IF92bS5fdChcImVtcHR5XCIpXG4gICAgICAgICAgICAgICAgICAgICAgOiBfYyhcInBcIiwgeyBzdGF0aWNDbGFzczogXCJlbC1zZWxlY3QtZHJvcGRvd25fX2VtcHR5XCIgfSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgICAgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl9zKF92bS5lbXB0eVRleHQpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAyXG4gICAgICAgICAgKVxuICAgICAgICBdLFxuICAgICAgICAxXG4gICAgICApXG4gICAgXSxcbiAgICAxXG4gIClcbn1cbnZhciBzZWxlY3R2dWVfdHlwZV90ZW1wbGF0ZV9pZF8wZTRhYWRlNl9zdGF0aWNSZW5kZXJGbnMgPSBbXVxuc2VsZWN0dnVlX3R5cGVfdGVtcGxhdGVfaWRfMGU0YWFkZTZfcmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9zZWxlY3Qvc3JjL3NlbGVjdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MGU0YWFkZTYmXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvc2VsZWN0L3NyYy9zZWxlY3QtZHJvcGRvd24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTA2ODI4NzQ4JlxudmFyIHNlbGVjdF9kcm9wZG93bnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzA2ODI4NzQ4X3JlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHtcbiAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXNlbGVjdC1kcm9wZG93biBlbC1wb3BwZXJcIixcbiAgICAgIGNsYXNzOiBbeyBcImlzLW11bHRpcGxlXCI6IF92bS4kcGFyZW50Lm11bHRpcGxlIH0sIF92bS5wb3BwZXJDbGFzc10sXG4gICAgICBzdHlsZTogeyBtaW5XaWR0aDogX3ZtLm1pbldpZHRoIH1cbiAgICB9LFxuICAgIFtfdm0uX3QoXCJkZWZhdWx0XCIpXSxcbiAgICAyXG4gIClcbn1cbnZhciBzZWxlY3RfZHJvcGRvd252dWVfdHlwZV90ZW1wbGF0ZV9pZF8wNjgyODc0OF9zdGF0aWNSZW5kZXJGbnMgPSBbXVxuc2VsZWN0X2Ryb3Bkb3dudnVlX3R5cGVfdGVtcGxhdGVfaWRfMDY4Mjg3NDhfcmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9zZWxlY3Qvc3JjL3NlbGVjdC1kcm9wZG93bi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MDY4Mjg3NDgmXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3NlbGVjdC9zcmMvc2VsZWN0LWRyb3Bkb3duLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNlbGVjdF9kcm9wZG93bnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG5hbWU6ICdFbFNlbGVjdERyb3Bkb3duJyxcblxuICBjb21wb25lbnROYW1lOiAnRWxTZWxlY3REcm9wZG93bicsXG5cbiAgbWl4aW5zOiBbdnVlX3BvcHBlcl9kZWZhdWx0LmFdLFxuXG4gIHByb3BzOiB7XG4gICAgcGxhY2VtZW50OiB7XG4gICAgICBkZWZhdWx0OiAnYm90dG9tLXN0YXJ0J1xuICAgIH0sXG5cbiAgICBib3VuZGFyaWVzUGFkZGluZzoge1xuICAgICAgZGVmYXVsdDogMFxuICAgIH0sXG5cbiAgICBwb3BwZXJPcHRpb25zOiB7XG4gICAgICBkZWZhdWx0OiBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBncHVBY2NlbGVyYXRpb246IGZhbHNlXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSxcblxuICAgIHZpc2libGVBcnJvdzoge1xuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0sXG5cbiAgICBhcHBlbmRUb0JvZHk6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfVxuICB9LFxuXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1pbldpZHRoOiAnJ1xuICAgIH07XG4gIH0sXG5cblxuICBjb21wdXRlZDoge1xuICAgIHBvcHBlckNsYXNzOiBmdW5jdGlvbiBwb3BwZXJDbGFzcygpIHtcbiAgICAgIHJldHVybiB0aGlzLiRwYXJlbnQucG9wcGVyQ2xhc3M7XG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgJyRwYXJlbnQuaW5wdXRXaWR0aCc6IGZ1bmN0aW9uICRwYXJlbnRJbnB1dFdpZHRoKCkge1xuICAgICAgdGhpcy5taW5XaWR0aCA9IHRoaXMuJHBhcmVudC4kZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggKyAncHgnO1xuICAgIH1cbiAgfSxcblxuICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB0aGlzLnJlZmVyZW5jZUVsbSA9IHRoaXMuJHBhcmVudC4kcmVmcy5yZWZlcmVuY2UuJGVsO1xuICAgIHRoaXMuJHBhcmVudC5wb3BwZXJFbG0gPSB0aGlzLnBvcHBlckVsbSA9IHRoaXMuJGVsO1xuICAgIHRoaXMuJG9uKCd1cGRhdGVQb3BwZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoX3RoaXMuJHBhcmVudC52aXNpYmxlKSBfdGhpcy51cGRhdGVQb3BwZXIoKTtcbiAgICB9KTtcbiAgICB0aGlzLiRvbignZGVzdHJveVBvcHBlcicsIHRoaXMuZGVzdHJveVBvcHBlcik7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9zZWxlY3Qvc3JjL3NlbGVjdC1kcm9wZG93bi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX3NlbGVjdF9kcm9wZG93bnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChzZWxlY3RfZHJvcGRvd252dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvc2VsZWN0L3NyYy9zZWxlY3QtZHJvcGRvd24udnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgc2VsZWN0X2Ryb3Bkb3duX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgc3JjX3NlbGVjdF9kcm9wZG93bnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgc2VsZWN0X2Ryb3Bkb3dudnVlX3R5cGVfdGVtcGxhdGVfaWRfMDY4Mjg3NDhfcmVuZGVyLFxuICBzZWxlY3RfZHJvcGRvd252dWVfdHlwZV90ZW1wbGF0ZV9pZF8wNjgyODc0OF9zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIHNlbGVjdF9kcm9wZG93bl9hcGk7IH1cbnNlbGVjdF9kcm9wZG93bl9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL3NlbGVjdC9zcmMvc2VsZWN0LWRyb3Bkb3duLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzZWxlY3RfZHJvcGRvd24gPSAoc2VsZWN0X2Ryb3Bkb3duX2NvbXBvbmVudC5leHBvcnRzKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvc2VsZWN0L3NyYy9vcHRpb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTdhNDRjNjQyJlxudmFyIG9wdGlvbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzdhNDRjNjQyX3JlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImxpXCIsXG4gICAge1xuICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICB2YWx1ZTogX3ZtLnZpc2libGUsXG4gICAgICAgICAgZXhwcmVzc2lvbjogXCJ2aXNpYmxlXCJcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXNlbGVjdC1kcm9wZG93bl9faXRlbVwiLFxuICAgICAgY2xhc3M6IHtcbiAgICAgICAgc2VsZWN0ZWQ6IF92bS5pdGVtU2VsZWN0ZWQsXG4gICAgICAgIFwiaXMtZGlzYWJsZWRcIjogX3ZtLmRpc2FibGVkIHx8IF92bS5ncm91cERpc2FibGVkIHx8IF92bS5saW1pdFJlYWNoZWQsXG4gICAgICAgIGhvdmVyOiBfdm0uaG92ZXJcbiAgICAgIH0sXG4gICAgICBvbjoge1xuICAgICAgICBtb3VzZWVudGVyOiBfdm0uaG92ZXJJdGVtLFxuICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgcmV0dXJuIF92bS5zZWxlY3RPcHRpb25DbGljaygkZXZlbnQpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFtfdm0uX3QoXCJkZWZhdWx0XCIsIFtfYyhcInNwYW5cIiwgW192bS5fdihfdm0uX3MoX3ZtLmN1cnJlbnRMYWJlbCkpXSldKV0sXG4gICAgMlxuICApXG59XG52YXIgb3B0aW9udnVlX3R5cGVfdGVtcGxhdGVfaWRfN2E0NGM2NDJfc3RhdGljUmVuZGVyRm5zID0gW11cbm9wdGlvbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzdhNDRjNjQyX3JlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvc2VsZWN0L3NyYy9vcHRpb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTdhNDRjNjQyJlxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9zZWxlY3Qvc3JjL29wdGlvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG52YXIgX3R5cGVvZiA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiID8gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfSA6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07XG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5cblxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBvcHRpb252dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBtaXhpbnM6IFtlbWl0dGVyX2RlZmF1bHQuYV0sXG5cbiAgbmFtZTogJ0VsT3B0aW9uJyxcblxuICBjb21wb25lbnROYW1lOiAnRWxPcHRpb24nLFxuXG4gIGluamVjdDogWydzZWxlY3QnXSxcblxuICBwcm9wczoge1xuICAgIHZhbHVlOiB7XG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAgbGFiZWw6IFtTdHJpbmcsIE51bWJlcl0sXG4gICAgY3JlYXRlZDogQm9vbGVhbixcbiAgICBkaXNhYmxlZDoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGluZGV4OiAtMSxcbiAgICAgIGdyb3VwRGlzYWJsZWQ6IGZhbHNlLFxuICAgICAgdmlzaWJsZTogdHJ1ZSxcbiAgICAgIGhpdFN0YXRlOiBmYWxzZSxcbiAgICAgIGhvdmVyOiBmYWxzZVxuICAgIH07XG4gIH0sXG5cblxuICBjb21wdXRlZDoge1xuICAgIGlzT2JqZWN0OiBmdW5jdGlvbiBpc09iamVjdCgpIHtcbiAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodGhpcy52YWx1ZSkudG9Mb3dlckNhc2UoKSA9PT0gJ1tvYmplY3Qgb2JqZWN0XSc7XG4gICAgfSxcbiAgICBjdXJyZW50TGFiZWw6IGZ1bmN0aW9uIGN1cnJlbnRMYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmxhYmVsIHx8ICh0aGlzLmlzT2JqZWN0ID8gJycgOiB0aGlzLnZhbHVlKTtcbiAgICB9LFxuICAgIGN1cnJlbnRWYWx1ZTogZnVuY3Rpb24gY3VycmVudFZhbHVlKCkge1xuICAgICAgcmV0dXJuIHRoaXMudmFsdWUgfHwgdGhpcy5sYWJlbCB8fCAnJztcbiAgICB9LFxuICAgIGl0ZW1TZWxlY3RlZDogZnVuY3Rpb24gaXRlbVNlbGVjdGVkKCkge1xuICAgICAgaWYgKCF0aGlzLnNlbGVjdC5tdWx0aXBsZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0VxdWFsKHRoaXMudmFsdWUsIHRoaXMuc2VsZWN0LnZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5zKHRoaXMuc2VsZWN0LnZhbHVlLCB0aGlzLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGxpbWl0UmVhY2hlZDogZnVuY3Rpb24gbGltaXRSZWFjaGVkKCkge1xuICAgICAgaWYgKHRoaXMuc2VsZWN0Lm11bHRpcGxlKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5pdGVtU2VsZWN0ZWQgJiYgKHRoaXMuc2VsZWN0LnZhbHVlIHx8IFtdKS5sZW5ndGggPj0gdGhpcy5zZWxlY3QubXVsdGlwbGVMaW1pdCAmJiB0aGlzLnNlbGVjdC5tdWx0aXBsZUxpbWl0ID4gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBjdXJyZW50TGFiZWw6IGZ1bmN0aW9uIGN1cnJlbnRMYWJlbCgpIHtcbiAgICAgIGlmICghdGhpcy5jcmVhdGVkICYmICF0aGlzLnNlbGVjdC5yZW1vdGUpIHRoaXMuZGlzcGF0Y2goJ0VsU2VsZWN0JywgJ3NldFNlbGVjdGVkJyk7XG4gICAgfSxcbiAgICB2YWx1ZTogZnVuY3Rpb24gdmFsdWUodmFsLCBvbGRWYWwpIHtcbiAgICAgIHZhciBfc2VsZWN0ID0gdGhpcy5zZWxlY3QsXG4gICAgICAgICAgcmVtb3RlID0gX3NlbGVjdC5yZW1vdGUsXG4gICAgICAgICAgdmFsdWVLZXkgPSBfc2VsZWN0LnZhbHVlS2V5O1xuXG4gICAgICBpZiAoIXRoaXMuY3JlYXRlZCAmJiAhcmVtb3RlKSB7XG4gICAgICAgIGlmICh2YWx1ZUtleSAmJiAodHlwZW9mIHZhbCA9PT0gJ3VuZGVmaW5lZCcgPyAndW5kZWZpbmVkJyA6IF90eXBlb2YodmFsKSkgPT09ICdvYmplY3QnICYmICh0eXBlb2Ygb2xkVmFsID09PSAndW5kZWZpbmVkJyA/ICd1bmRlZmluZWQnIDogX3R5cGVvZihvbGRWYWwpKSA9PT0gJ29iamVjdCcgJiYgdmFsW3ZhbHVlS2V5XSA9PT0gb2xkVmFsW3ZhbHVlS2V5XSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRpc3BhdGNoKCdFbFNlbGVjdCcsICdzZXRTZWxlY3RlZCcpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgaXNFcXVhbDogZnVuY3Rpb24gaXNFcXVhbChhLCBiKSB7XG4gICAgICBpZiAoIXRoaXMuaXNPYmplY3QpIHtcbiAgICAgICAgcmV0dXJuIGEgPT09IGI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgdmFsdWVLZXkgPSB0aGlzLnNlbGVjdC52YWx1ZUtleTtcbiAgICAgICAgcmV0dXJuIE9iamVjdCh1dGlsX1tcImdldFZhbHVlQnlQYXRoXCJdKShhLCB2YWx1ZUtleSkgPT09IE9iamVjdCh1dGlsX1tcImdldFZhbHVlQnlQYXRoXCJdKShiLCB2YWx1ZUtleSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBjb250YWluczogZnVuY3Rpb24gY29udGFpbnMoKSB7XG4gICAgICB2YXIgYXJyID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBbXTtcbiAgICAgIHZhciB0YXJnZXQgPSBhcmd1bWVudHNbMV07XG5cbiAgICAgIGlmICghdGhpcy5pc09iamVjdCkge1xuICAgICAgICByZXR1cm4gYXJyICYmIGFyci5pbmRleE9mKHRhcmdldCkgPiAtMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciB2YWx1ZUtleSA9IHRoaXMuc2VsZWN0LnZhbHVlS2V5O1xuICAgICAgICByZXR1cm4gYXJyICYmIGFyci5zb21lKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgcmV0dXJuIE9iamVjdCh1dGlsX1tcImdldFZhbHVlQnlQYXRoXCJdKShpdGVtLCB2YWx1ZUtleSkgPT09IE9iamVjdCh1dGlsX1tcImdldFZhbHVlQnlQYXRoXCJdKSh0YXJnZXQsIHZhbHVlS2V5KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBoYW5kbGVHcm91cERpc2FibGVkOiBmdW5jdGlvbiBoYW5kbGVHcm91cERpc2FibGVkKHZhbCkge1xuICAgICAgdGhpcy5ncm91cERpc2FibGVkID0gdmFsO1xuICAgIH0sXG4gICAgaG92ZXJJdGVtOiBmdW5jdGlvbiBob3Zlckl0ZW0oKSB7XG4gICAgICBpZiAoIXRoaXMuZGlzYWJsZWQgJiYgIXRoaXMuZ3JvdXBEaXNhYmxlZCkge1xuICAgICAgICB0aGlzLnNlbGVjdC5ob3ZlckluZGV4ID0gdGhpcy5zZWxlY3Qub3B0aW9ucy5pbmRleE9mKHRoaXMpO1xuICAgICAgfVxuICAgIH0sXG4gICAgc2VsZWN0T3B0aW9uQ2xpY2s6IGZ1bmN0aW9uIHNlbGVjdE9wdGlvbkNsaWNrKCkge1xuICAgICAgaWYgKHRoaXMuZGlzYWJsZWQgIT09IHRydWUgJiYgdGhpcy5ncm91cERpc2FibGVkICE9PSB0cnVlKSB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2goJ0VsU2VsZWN0JywgJ2hhbmRsZU9wdGlvbkNsaWNrJywgW3RoaXMsIHRydWVdKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHF1ZXJ5Q2hhbmdlOiBmdW5jdGlvbiBxdWVyeUNoYW5nZShxdWVyeSkge1xuICAgICAgdGhpcy52aXNpYmxlID0gbmV3IFJlZ0V4cChPYmplY3QodXRpbF9bXCJlc2NhcGVSZWdleHBTdHJpbmdcIl0pKHF1ZXJ5KSwgJ2knKS50ZXN0KHRoaXMuY3VycmVudExhYmVsKSB8fCB0aGlzLmNyZWF0ZWQ7XG4gICAgICBpZiAoIXRoaXMudmlzaWJsZSkge1xuICAgICAgICB0aGlzLnNlbGVjdC5maWx0ZXJlZE9wdGlvbnNDb3VudC0tO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkOiBmdW5jdGlvbiBjcmVhdGVkKCkge1xuICAgIHRoaXMuc2VsZWN0Lm9wdGlvbnMucHVzaCh0aGlzKTtcbiAgICB0aGlzLnNlbGVjdC5jYWNoZWRPcHRpb25zLnB1c2godGhpcyk7XG4gICAgdGhpcy5zZWxlY3Qub3B0aW9uc0NvdW50Kys7XG4gICAgdGhpcy5zZWxlY3QuZmlsdGVyZWRPcHRpb25zQ291bnQrKztcblxuICAgIHRoaXMuJG9uKCdxdWVyeUNoYW5nZScsIHRoaXMucXVlcnlDaGFuZ2UpO1xuICAgIHRoaXMuJG9uKCdoYW5kbGVHcm91cERpc2FibGVkJywgdGhpcy5oYW5kbGVHcm91cERpc2FibGVkKTtcbiAgfSxcbiAgYmVmb3JlRGVzdHJveTogZnVuY3Rpb24gYmVmb3JlRGVzdHJveSgpIHtcbiAgICB2YXIgX3NlbGVjdDIgPSB0aGlzLnNlbGVjdCxcbiAgICAgICAgc2VsZWN0ZWQgPSBfc2VsZWN0Mi5zZWxlY3RlZCxcbiAgICAgICAgbXVsdGlwbGUgPSBfc2VsZWN0Mi5tdWx0aXBsZTtcblxuICAgIHZhciBzZWxlY3RlZE9wdGlvbnMgPSBtdWx0aXBsZSA/IHNlbGVjdGVkIDogW3NlbGVjdGVkXTtcbiAgICB2YXIgaW5kZXggPSB0aGlzLnNlbGVjdC5jYWNoZWRPcHRpb25zLmluZGV4T2YodGhpcyk7XG4gICAgdmFyIHNlbGVjdGVkSW5kZXggPSBzZWxlY3RlZE9wdGlvbnMuaW5kZXhPZih0aGlzKTtcblxuICAgIC8vIGlmIG9wdGlvbiBpcyBub3Qgc2VsZWN0ZWQsIHJlbW92ZSBpdCBmcm9tIGNhY2hlXG4gICAgaWYgKGluZGV4ID4gLTEgJiYgc2VsZWN0ZWRJbmRleCA8IDApIHtcbiAgICAgIHRoaXMuc2VsZWN0LmNhY2hlZE9wdGlvbnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gICAgdGhpcy5zZWxlY3Qub25PcHRpb25EZXN0cm95KHRoaXMuc2VsZWN0Lm9wdGlvbnMuaW5kZXhPZih0aGlzKSk7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9zZWxlY3Qvc3JjL29wdGlvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX29wdGlvbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChvcHRpb252dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvc2VsZWN0L3NyYy9vcHRpb24udnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgb3B0aW9uX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgc3JjX29wdGlvbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgb3B0aW9udnVlX3R5cGVfdGVtcGxhdGVfaWRfN2E0NGM2NDJfcmVuZGVyLFxuICBvcHRpb252dWVfdHlwZV90ZW1wbGF0ZV9pZF83YTQ0YzY0Ml9zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIG9wdGlvbl9hcGk7IH1cbm9wdGlvbl9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL3NlbGVjdC9zcmMvb3B0aW9uLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfb3B0aW9uID0gKG9wdGlvbl9jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiZWxlbWVudC11aS9saWIvdGFnXCJcbnZhciB0YWdfID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMCk7XG52YXIgdGFnX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHRhZ18pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiZWxlbWVudC11aS9saWIvdXRpbHMvcmVzaXplLWV2ZW50XCJcbnZhciByZXNpemVfZXZlbnRfID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNSk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJlbGVtZW50LXVpL2xpYi91dGlscy9zY3JvbGwtaW50by12aWV3XCJcbnZhciBzY3JvbGxfaW50b192aWV3XyA9IF9fd2VicGFja19yZXF1aXJlX18oMjcpO1xudmFyIHNjcm9sbF9pbnRvX3ZpZXdfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oc2Nyb2xsX2ludG9fdmlld18pO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3NlbGVjdC9zcmMvbmF2aWdhdGlvbi1taXhpbi5qc1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgbmF2aWdhdGlvbl9taXhpbiA9ICh7XG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGhvdmVyT3B0aW9uOiAtMVxuICAgIH07XG4gIH0sXG5cblxuICBjb21wdXRlZDoge1xuICAgIG9wdGlvbnNBbGxEaXNhYmxlZDogZnVuY3Rpb24gb3B0aW9uc0FsbERpc2FibGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5maWx0ZXIoZnVuY3Rpb24gKG9wdGlvbikge1xuICAgICAgICByZXR1cm4gb3B0aW9uLnZpc2libGU7XG4gICAgICB9KS5ldmVyeShmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICAgIHJldHVybiBvcHRpb24uZGlzYWJsZWQ7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBob3ZlckluZGV4OiBmdW5jdGlvbiBob3ZlckluZGV4KHZhbCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInICYmIHZhbCA+IC0xKSB7XG4gICAgICAgIHRoaXMuaG92ZXJPcHRpb24gPSB0aGlzLm9wdGlvbnNbdmFsXSB8fCB7fTtcbiAgICAgIH1cbiAgICAgIHRoaXMub3B0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgICAgb3B0aW9uLmhvdmVyID0gX3RoaXMuaG92ZXJPcHRpb24gPT09IG9wdGlvbjtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgbmF2aWdhdGVPcHRpb25zOiBmdW5jdGlvbiBuYXZpZ2F0ZU9wdGlvbnMoZGlyZWN0aW9uKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgaWYgKCF0aGlzLnZpc2libGUpIHtcbiAgICAgICAgdGhpcy52aXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5sZW5ndGggPT09IDAgfHwgdGhpcy5maWx0ZXJlZE9wdGlvbnNDb3VudCA9PT0gMCkgcmV0dXJuO1xuICAgICAgaWYgKCF0aGlzLm9wdGlvbnNBbGxEaXNhYmxlZCkge1xuICAgICAgICBpZiAoZGlyZWN0aW9uID09PSAnbmV4dCcpIHtcbiAgICAgICAgICB0aGlzLmhvdmVySW5kZXgrKztcbiAgICAgICAgICBpZiAodGhpcy5ob3ZlckluZGV4ID09PSB0aGlzLm9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmhvdmVySW5kZXggPSAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09ICdwcmV2Jykge1xuICAgICAgICAgIHRoaXMuaG92ZXJJbmRleC0tO1xuICAgICAgICAgIGlmICh0aGlzLmhvdmVySW5kZXggPCAwKSB7XG4gICAgICAgICAgICB0aGlzLmhvdmVySW5kZXggPSB0aGlzLm9wdGlvbnMubGVuZ3RoIC0gMTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG9wdGlvbiA9IHRoaXMub3B0aW9uc1t0aGlzLmhvdmVySW5kZXhdO1xuICAgICAgICBpZiAob3B0aW9uLmRpc2FibGVkID09PSB0cnVlIHx8IG9wdGlvbi5ncm91cERpc2FibGVkID09PSB0cnVlIHx8ICFvcHRpb24udmlzaWJsZSkge1xuICAgICAgICAgIHRoaXMubmF2aWdhdGVPcHRpb25zKGRpcmVjdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBfdGhpczIuc2Nyb2xsVG9PcHRpb24oX3RoaXMyLmhvdmVyT3B0aW9uKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3NlbGVjdC9zcmMvc2VsZWN0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNlbGVjdHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG1peGluczogW2VtaXR0ZXJfZGVmYXVsdC5hLCBsb2NhbGVfZGVmYXVsdC5hLCBmb2N1c19kZWZhdWx0KCkoJ3JlZmVyZW5jZScpLCBuYXZpZ2F0aW9uX21peGluXSxcblxuICBuYW1lOiAnRWxTZWxlY3QnLFxuXG4gIGNvbXBvbmVudE5hbWU6ICdFbFNlbGVjdCcsXG5cbiAgaW5qZWN0OiB7XG4gICAgZWxGb3JtOiB7XG4gICAgICBkZWZhdWx0OiAnJ1xuICAgIH0sXG5cbiAgICBlbEZvcm1JdGVtOiB7XG4gICAgICBkZWZhdWx0OiAnJ1xuICAgIH1cbiAgfSxcblxuICBwcm92aWRlOiBmdW5jdGlvbiBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAnc2VsZWN0JzogdGhpc1xuICAgIH07XG4gIH0sXG5cblxuICBjb21wdXRlZDoge1xuICAgIF9lbEZvcm1JdGVtU2l6ZTogZnVuY3Rpb24gX2VsRm9ybUl0ZW1TaXplKCkge1xuICAgICAgcmV0dXJuICh0aGlzLmVsRm9ybUl0ZW0gfHwge30pLmVsRm9ybUl0ZW1TaXplO1xuICAgIH0sXG4gICAgcmVhZG9ubHk6IGZ1bmN0aW9uIHJlYWRvbmx5KCkge1xuICAgICAgcmV0dXJuICF0aGlzLmZpbHRlcmFibGUgfHwgdGhpcy5tdWx0aXBsZSB8fCAhT2JqZWN0KHV0aWxfW1wiaXNJRVwiXSkoKSAmJiAhT2JqZWN0KHV0aWxfW1wiaXNFZGdlXCJdKSgpICYmICF0aGlzLnZpc2libGU7XG4gICAgfSxcbiAgICBzaG93Q2xvc2U6IGZ1bmN0aW9uIHNob3dDbG9zZSgpIHtcbiAgICAgIHZhciBoYXNWYWx1ZSA9IHRoaXMubXVsdGlwbGUgPyBBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpICYmIHRoaXMudmFsdWUubGVuZ3RoID4gMCA6IHRoaXMudmFsdWUgIT09IHVuZGVmaW5lZCAmJiB0aGlzLnZhbHVlICE9PSBudWxsICYmIHRoaXMudmFsdWUgIT09ICcnO1xuICAgICAgdmFyIGNyaXRlcmlhID0gdGhpcy5jbGVhcmFibGUgJiYgIXRoaXMuc2VsZWN0RGlzYWJsZWQgJiYgdGhpcy5pbnB1dEhvdmVyaW5nICYmIGhhc1ZhbHVlO1xuICAgICAgcmV0dXJuIGNyaXRlcmlhO1xuICAgIH0sXG4gICAgaWNvbkNsYXNzOiBmdW5jdGlvbiBpY29uQ2xhc3MoKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZW1vdGUgJiYgdGhpcy5maWx0ZXJhYmxlID8gJycgOiB0aGlzLnZpc2libGUgPyAnYXJyb3ctdXAgaXMtcmV2ZXJzZScgOiAnYXJyb3ctdXAnO1xuICAgIH0sXG4gICAgZGVib3VuY2U6IGZ1bmN0aW9uIGRlYm91bmNlKCkge1xuICAgICAgcmV0dXJuIHRoaXMucmVtb3RlID8gMzAwIDogMDtcbiAgICB9LFxuICAgIGVtcHR5VGV4dDogZnVuY3Rpb24gZW1wdHlUZXh0KCkge1xuICAgICAgaWYgKHRoaXMubG9hZGluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2FkaW5nVGV4dCB8fCB0aGlzLnQoJ2VsLnNlbGVjdC5sb2FkaW5nJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGhpcy5yZW1vdGUgJiYgdGhpcy5xdWVyeSA9PT0gJycgJiYgdGhpcy5vcHRpb25zLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5maWx0ZXJhYmxlICYmIHRoaXMucXVlcnkgJiYgdGhpcy5vcHRpb25zLmxlbmd0aCA+IDAgJiYgdGhpcy5maWx0ZXJlZE9wdGlvbnNDb3VudCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLm5vTWF0Y2hUZXh0IHx8IHRoaXMudCgnZWwuc2VsZWN0Lm5vTWF0Y2gnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLm5vRGF0YVRleHQgfHwgdGhpcy50KCdlbC5zZWxlY3Qubm9EYXRhJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0sXG4gICAgc2hvd05ld09wdGlvbjogZnVuY3Rpb24gc2hvd05ld09wdGlvbigpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIHZhciBoYXNFeGlzdGluZ09wdGlvbiA9IHRoaXMub3B0aW9ucy5maWx0ZXIoZnVuY3Rpb24gKG9wdGlvbikge1xuICAgICAgICByZXR1cm4gIW9wdGlvbi5jcmVhdGVkO1xuICAgICAgfSkuc29tZShmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICAgIHJldHVybiBvcHRpb24uY3VycmVudExhYmVsID09PSBfdGhpcy5xdWVyeTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyYWJsZSAmJiB0aGlzLmFsbG93Q3JlYXRlICYmIHRoaXMucXVlcnkgIT09ICcnICYmICFoYXNFeGlzdGluZ09wdGlvbjtcbiAgICB9LFxuICAgIHNlbGVjdFNpemU6IGZ1bmN0aW9uIHNlbGVjdFNpemUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zaXplIHx8IHRoaXMuX2VsRm9ybUl0ZW1TaXplIHx8ICh0aGlzLiRFTEVNRU5UIHx8IHt9KS5zaXplO1xuICAgIH0sXG4gICAgc2VsZWN0RGlzYWJsZWQ6IGZ1bmN0aW9uIHNlbGVjdERpc2FibGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQgfHwgKHRoaXMuZWxGb3JtIHx8IHt9KS5kaXNhYmxlZDtcbiAgICB9LFxuICAgIGNvbGxhcHNlVGFnU2l6ZTogZnVuY3Rpb24gY29sbGFwc2VUYWdTaXplKCkge1xuICAgICAgcmV0dXJuIFsnc21hbGwnLCAnbWluaSddLmluZGV4T2YodGhpcy5zZWxlY3RTaXplKSA+IC0xID8gJ21pbmknIDogJ3NtYWxsJztcbiAgICB9LFxuICAgIHByb3BQbGFjZWhvbGRlcjogZnVuY3Rpb24gcHJvcFBsYWNlaG9sZGVyKCkge1xuICAgICAgcmV0dXJuIHR5cGVvZiB0aGlzLnBsYWNlaG9sZGVyICE9PSAndW5kZWZpbmVkJyA/IHRoaXMucGxhY2Vob2xkZXIgOiB0aGlzLnQoJ2VsLnNlbGVjdC5wbGFjZWhvbGRlcicpO1xuICAgIH1cbiAgfSxcblxuICBjb21wb25lbnRzOiB7XG4gICAgRWxJbnB1dDogaW5wdXRfZGVmYXVsdC5hLFxuICAgIEVsU2VsZWN0TWVudTogc2VsZWN0X2Ryb3Bkb3duLFxuICAgIEVsT3B0aW9uOiBzcmNfb3B0aW9uLFxuICAgIEVsVGFnOiB0YWdfZGVmYXVsdC5hLFxuICAgIEVsU2Nyb2xsYmFyOiBzY3JvbGxiYXJfZGVmYXVsdC5hXG4gIH0sXG5cbiAgZGlyZWN0aXZlczogeyBDbGlja291dHNpZGU6IGNsaWNrb3V0c2lkZV9kZWZhdWx0LmEgfSxcblxuICBwcm9wczoge1xuICAgIG5hbWU6IFN0cmluZyxcbiAgICBpZDogU3RyaW5nLFxuICAgIHZhbHVlOiB7XG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAgYXV0b2NvbXBsZXRlOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnb2ZmJ1xuICAgIH0sXG4gICAgLyoqIEBEZXByZWNhdGVkIGluIG5leHQgbWFqb3IgdmVyc2lvbiAqL1xuICAgIGF1dG9Db21wbGV0ZToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgdmFsaWRhdG9yOiBmdW5jdGlvbiB2YWxpZGF0b3IodmFsKSB7XG4gICAgICAgICBmYWxzZSAmJiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSxcbiAgICBhdXRvbWF0aWNEcm9wZG93bjogQm9vbGVhbixcbiAgICBzaXplOiBTdHJpbmcsXG4gICAgZGlzYWJsZWQ6IEJvb2xlYW4sXG4gICAgY2xlYXJhYmxlOiBCb29sZWFuLFxuICAgIGZpbHRlcmFibGU6IEJvb2xlYW4sXG4gICAgYWxsb3dDcmVhdGU6IEJvb2xlYW4sXG4gICAgbG9hZGluZzogQm9vbGVhbixcbiAgICBwb3BwZXJDbGFzczogU3RyaW5nLFxuICAgIHJlbW90ZTogQm9vbGVhbixcbiAgICBsb2FkaW5nVGV4dDogU3RyaW5nLFxuICAgIG5vTWF0Y2hUZXh0OiBTdHJpbmcsXG4gICAgbm9EYXRhVGV4dDogU3RyaW5nLFxuICAgIHJlbW90ZU1ldGhvZDogRnVuY3Rpb24sXG4gICAgZmlsdGVyTWV0aG9kOiBGdW5jdGlvbixcbiAgICBtdWx0aXBsZTogQm9vbGVhbixcbiAgICBtdWx0aXBsZUxpbWl0OiB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBkZWZhdWx0OiAwXG4gICAgfSxcbiAgICBwbGFjZWhvbGRlcjoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfSxcbiAgICBkZWZhdWx0Rmlyc3RPcHRpb246IEJvb2xlYW4sXG4gICAgcmVzZXJ2ZUtleXdvcmQ6IEJvb2xlYW4sXG4gICAgdmFsdWVLZXk6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICd2YWx1ZSdcbiAgICB9LFxuICAgIGNvbGxhcHNlVGFnczogQm9vbGVhbixcbiAgICBwb3BwZXJBcHBlbmRUb0JvZHk6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfVxuICB9LFxuXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9wdGlvbnM6IFtdLFxuICAgICAgY2FjaGVkT3B0aW9uczogW10sXG4gICAgICBjcmVhdGVkTGFiZWw6IG51bGwsXG4gICAgICBjcmVhdGVkU2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgc2VsZWN0ZWQ6IHRoaXMubXVsdGlwbGUgPyBbXSA6IHt9LFxuICAgICAgaW5wdXRMZW5ndGg6IDIwLFxuICAgICAgaW5wdXRXaWR0aDogMCxcbiAgICAgIGluaXRpYWxJbnB1dEhlaWdodDogMCxcbiAgICAgIGNhY2hlZFBsYWNlSG9sZGVyOiAnJyxcbiAgICAgIG9wdGlvbnNDb3VudDogMCxcbiAgICAgIGZpbHRlcmVkT3B0aW9uc0NvdW50OiAwLFxuICAgICAgdmlzaWJsZTogZmFsc2UsXG4gICAgICBzb2Z0Rm9jdXM6IGZhbHNlLFxuICAgICAgc2VsZWN0ZWRMYWJlbDogJycsXG4gICAgICBob3ZlckluZGV4OiAtMSxcbiAgICAgIHF1ZXJ5OiAnJyxcbiAgICAgIHByZXZpb3VzUXVlcnk6IG51bGwsXG4gICAgICBpbnB1dEhvdmVyaW5nOiBmYWxzZSxcbiAgICAgIGN1cnJlbnRQbGFjZWhvbGRlcjogJycsXG4gICAgICBtZW51VmlzaWJsZU9uRm9jdXM6IGZhbHNlLFxuICAgICAgaXNPbkNvbXBvc2l0aW9uOiBmYWxzZSxcbiAgICAgIGlzU2lsZW50Qmx1cjogZmFsc2VcbiAgICB9O1xuICB9LFxuXG5cbiAgd2F0Y2g6IHtcbiAgICBzZWxlY3REaXNhYmxlZDogZnVuY3Rpb24gc2VsZWN0RGlzYWJsZWQoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpczIucmVzZXRJbnB1dEhlaWdodCgpO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBwcm9wUGxhY2Vob2xkZXI6IGZ1bmN0aW9uIHByb3BQbGFjZWhvbGRlcih2YWwpIHtcbiAgICAgIHRoaXMuY2FjaGVkUGxhY2VIb2xkZXIgPSB0aGlzLmN1cnJlbnRQbGFjZWhvbGRlciA9IHZhbDtcbiAgICB9LFxuICAgIHZhbHVlOiBmdW5jdGlvbiB2YWx1ZSh2YWwsIG9sZFZhbCkge1xuICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgdGhpcy5yZXNldElucHV0SGVpZ2h0KCk7XG4gICAgICAgIGlmICh2YWwgJiYgdmFsLmxlbmd0aCA+IDAgfHwgdGhpcy4kcmVmcy5pbnB1dCAmJiB0aGlzLnF1ZXJ5ICE9PSAnJykge1xuICAgICAgICAgIHRoaXMuY3VycmVudFBsYWNlaG9sZGVyID0gJyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50UGxhY2Vob2xkZXIgPSB0aGlzLmNhY2hlZFBsYWNlSG9sZGVyO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmZpbHRlcmFibGUgJiYgIXRoaXMucmVzZXJ2ZUtleXdvcmQpIHtcbiAgICAgICAgICB0aGlzLnF1ZXJ5ID0gJyc7XG4gICAgICAgICAgdGhpcy5oYW5kbGVRdWVyeUNoYW5nZSh0aGlzLnF1ZXJ5KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5zZXRTZWxlY3RlZCgpO1xuICAgICAgaWYgKHRoaXMuZmlsdGVyYWJsZSAmJiAhdGhpcy5tdWx0aXBsZSkge1xuICAgICAgICB0aGlzLmlucHV0TGVuZ3RoID0gMjA7XG4gICAgICB9XG4gICAgICBpZiAoIU9iamVjdCh1dGlsX1tcInZhbHVlRXF1YWxzXCJdKSh2YWwsIG9sZFZhbCkpIHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaCgnRWxGb3JtSXRlbScsICdlbC5mb3JtLmNoYW5nZScsIHZhbCk7XG4gICAgICB9XG4gICAgfSxcbiAgICB2aXNpYmxlOiBmdW5jdGlvbiB2aXNpYmxlKHZhbCkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgIGlmICghdmFsKSB7XG4gICAgICAgIHRoaXMuYnJvYWRjYXN0KCdFbFNlbGVjdERyb3Bkb3duJywgJ2Rlc3Ryb3lQb3BwZXInKTtcbiAgICAgICAgaWYgKHRoaXMuJHJlZnMuaW5wdXQpIHtcbiAgICAgICAgICB0aGlzLiRyZWZzLmlucHV0LmJsdXIoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnF1ZXJ5ID0gJyc7XG4gICAgICAgIHRoaXMucHJldmlvdXNRdWVyeSA9IG51bGw7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRMYWJlbCA9ICcnO1xuICAgICAgICB0aGlzLmlucHV0TGVuZ3RoID0gMjA7XG4gICAgICAgIHRoaXMubWVudVZpc2libGVPbkZvY3VzID0gZmFsc2U7XG4gICAgICAgIHRoaXMucmVzZXRIb3ZlckluZGV4KCk7XG4gICAgICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAoX3RoaXMzLiRyZWZzLmlucHV0ICYmIF90aGlzMy4kcmVmcy5pbnB1dC52YWx1ZSA9PT0gJycgJiYgX3RoaXMzLnNlbGVjdGVkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgX3RoaXMzLmN1cnJlbnRQbGFjZWhvbGRlciA9IF90aGlzMy5jYWNoZWRQbGFjZUhvbGRlcjtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIXRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZmlsdGVyYWJsZSAmJiB0aGlzLmFsbG93Q3JlYXRlICYmIHRoaXMuY3JlYXRlZFNlbGVjdGVkICYmIHRoaXMuY3JlYXRlZExhYmVsKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRMYWJlbCA9IHRoaXMuY3JlYXRlZExhYmVsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZExhYmVsID0gdGhpcy5zZWxlY3RlZC5jdXJyZW50TGFiZWw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5maWx0ZXJhYmxlKSB0aGlzLnF1ZXJ5ID0gdGhpcy5zZWxlY3RlZExhYmVsO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0aGlzLmZpbHRlcmFibGUpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBsYWNlaG9sZGVyID0gdGhpcy5jYWNoZWRQbGFjZUhvbGRlcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYnJvYWRjYXN0KCdFbFNlbGVjdERyb3Bkb3duJywgJ3VwZGF0ZVBvcHBlcicpO1xuICAgICAgICBpZiAodGhpcy5maWx0ZXJhYmxlKSB7XG4gICAgICAgICAgdGhpcy5xdWVyeSA9IHRoaXMucmVtb3RlID8gJycgOiB0aGlzLnNlbGVjdGVkTGFiZWw7XG4gICAgICAgICAgdGhpcy5oYW5kbGVRdWVyeUNoYW5nZSh0aGlzLnF1ZXJ5KTtcbiAgICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICAgICAgdGhpcy4kcmVmcy5pbnB1dC5mb2N1cygpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMucmVtb3RlKSB7XG4gICAgICAgICAgICAgIHRoaXMuYnJvYWRjYXN0KCdFbE9wdGlvbicsICdxdWVyeUNoYW5nZScsICcnKTtcbiAgICAgICAgICAgICAgdGhpcy5icm9hZGNhc3QoJ0VsT3B0aW9uR3JvdXAnLCAncXVlcnlDaGFuZ2UnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRMYWJlbCkge1xuICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRQbGFjZWhvbGRlciA9IHRoaXMuc2VsZWN0ZWRMYWJlbDtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZExhYmVsID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLiRlbWl0KCd2aXNpYmxlLWNoYW5nZScsIHZhbCk7XG4gICAgfSxcbiAgICBvcHRpb25zOiBmdW5jdGlvbiBvcHRpb25zKCkge1xuICAgICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cbiAgICAgIGlmICh0aGlzLiRpc1NlcnZlcikgcmV0dXJuO1xuICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpczQuYnJvYWRjYXN0KCdFbFNlbGVjdERyb3Bkb3duJywgJ3VwZGF0ZVBvcHBlcicpO1xuICAgICAgfSk7XG4gICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICB0aGlzLnJlc2V0SW5wdXRIZWlnaHQoKTtcbiAgICAgIH1cbiAgICAgIHZhciBpbnB1dHMgPSB0aGlzLiRlbC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dCcpO1xuICAgICAgaWYgKFtdLmluZGV4T2YuY2FsbChpbnB1dHMsIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpID09PSAtMSkge1xuICAgICAgICB0aGlzLnNldFNlbGVjdGVkKCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5kZWZhdWx0Rmlyc3RPcHRpb24gJiYgKHRoaXMuZmlsdGVyYWJsZSB8fCB0aGlzLnJlbW90ZSkgJiYgdGhpcy5maWx0ZXJlZE9wdGlvbnNDb3VudCkge1xuICAgICAgICB0aGlzLmNoZWNrRGVmYXVsdEZpcnN0T3B0aW9uKCk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBoYW5kbGVOYXZpZ2F0ZTogZnVuY3Rpb24gaGFuZGxlTmF2aWdhdGUoZGlyZWN0aW9uKSB7XG4gICAgICBpZiAodGhpcy5pc09uQ29tcG9zaXRpb24pIHJldHVybjtcblxuICAgICAgdGhpcy5uYXZpZ2F0ZU9wdGlvbnMoZGlyZWN0aW9uKTtcbiAgICB9LFxuICAgIGhhbmRsZUNvbXBvc2l0aW9uOiBmdW5jdGlvbiBoYW5kbGVDb21wb3NpdGlvbihldmVudCkge1xuICAgICAgdmFyIF90aGlzNSA9IHRoaXM7XG5cbiAgICAgIHZhciB0ZXh0ID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgICAgaWYgKGV2ZW50LnR5cGUgPT09ICdjb21wb3NpdGlvbmVuZCcpIHtcbiAgICAgICAgdGhpcy5pc09uQ29tcG9zaXRpb24gPSBmYWxzZTtcbiAgICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKF8pIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXM1LmhhbmRsZVF1ZXJ5Q2hhbmdlKHRleHQpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBsYXN0Q2hhcmFjdGVyID0gdGV4dFt0ZXh0Lmxlbmd0aCAtIDFdIHx8ICcnO1xuICAgICAgICB0aGlzLmlzT25Db21wb3NpdGlvbiA9ICFPYmplY3Qoc2hhcmVkX1tcImlzS29yZWFuXCJdKShsYXN0Q2hhcmFjdGVyKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGhhbmRsZVF1ZXJ5Q2hhbmdlOiBmdW5jdGlvbiBoYW5kbGVRdWVyeUNoYW5nZSh2YWwpIHtcbiAgICAgIHZhciBfdGhpczYgPSB0aGlzO1xuXG4gICAgICBpZiAodGhpcy5wcmV2aW91c1F1ZXJ5ID09PSB2YWwgfHwgdGhpcy5pc09uQ29tcG9zaXRpb24pIHJldHVybjtcbiAgICAgIGlmICh0aGlzLnByZXZpb3VzUXVlcnkgPT09IG51bGwgJiYgKHR5cGVvZiB0aGlzLmZpbHRlck1ldGhvZCA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgdGhpcy5yZW1vdGVNZXRob2QgPT09ICdmdW5jdGlvbicpKSB7XG4gICAgICAgIHRoaXMucHJldmlvdXNRdWVyeSA9IHZhbDtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5wcmV2aW91c1F1ZXJ5ID0gdmFsO1xuICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoX3RoaXM2LnZpc2libGUpIF90aGlzNi5icm9hZGNhc3QoJ0VsU2VsZWN0RHJvcGRvd24nLCAndXBkYXRlUG9wcGVyJyk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuaG92ZXJJbmRleCA9IC0xO1xuICAgICAgaWYgKHRoaXMubXVsdGlwbGUgJiYgdGhpcy5maWx0ZXJhYmxlKSB7XG4gICAgICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB2YXIgbGVuZ3RoID0gX3RoaXM2LiRyZWZzLmlucHV0LnZhbHVlLmxlbmd0aCAqIDE1ICsgMjA7XG4gICAgICAgICAgX3RoaXM2LmlucHV0TGVuZ3RoID0gX3RoaXM2LmNvbGxhcHNlVGFncyA/IE1hdGgubWluKDUwLCBsZW5ndGgpIDogbGVuZ3RoO1xuICAgICAgICAgIF90aGlzNi5tYW5hZ2VQbGFjZWhvbGRlcigpO1xuICAgICAgICAgIF90aGlzNi5yZXNldElucHV0SGVpZ2h0KCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMucmVtb3RlICYmIHR5cGVvZiB0aGlzLnJlbW90ZU1ldGhvZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLmhvdmVySW5kZXggPSAtMTtcbiAgICAgICAgdGhpcy5yZW1vdGVNZXRob2QodmFsKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMuZmlsdGVyTWV0aG9kID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyTWV0aG9kKHZhbCk7XG4gICAgICAgIHRoaXMuYnJvYWRjYXN0KCdFbE9wdGlvbkdyb3VwJywgJ3F1ZXJ5Q2hhbmdlJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmZpbHRlcmVkT3B0aW9uc0NvdW50ID0gdGhpcy5vcHRpb25zQ291bnQ7XG4gICAgICAgIHRoaXMuYnJvYWRjYXN0KCdFbE9wdGlvbicsICdxdWVyeUNoYW5nZScsIHZhbCk7XG4gICAgICAgIHRoaXMuYnJvYWRjYXN0KCdFbE9wdGlvbkdyb3VwJywgJ3F1ZXJ5Q2hhbmdlJyk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5kZWZhdWx0Rmlyc3RPcHRpb24gJiYgKHRoaXMuZmlsdGVyYWJsZSB8fCB0aGlzLnJlbW90ZSkgJiYgdGhpcy5maWx0ZXJlZE9wdGlvbnNDb3VudCkge1xuICAgICAgICB0aGlzLmNoZWNrRGVmYXVsdEZpcnN0T3B0aW9uKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBzY3JvbGxUb09wdGlvbjogZnVuY3Rpb24gc2Nyb2xsVG9PcHRpb24ob3B0aW9uKSB7XG4gICAgICB2YXIgdGFyZ2V0ID0gQXJyYXkuaXNBcnJheShvcHRpb24pICYmIG9wdGlvblswXSA/IG9wdGlvblswXS4kZWwgOiBvcHRpb24uJGVsO1xuICAgICAgaWYgKHRoaXMuJHJlZnMucG9wcGVyICYmIHRhcmdldCkge1xuICAgICAgICB2YXIgbWVudSA9IHRoaXMuJHJlZnMucG9wcGVyLiRlbC5xdWVyeVNlbGVjdG9yKCcuZWwtc2VsZWN0LWRyb3Bkb3duX193cmFwJyk7XG4gICAgICAgIHNjcm9sbF9pbnRvX3ZpZXdfZGVmYXVsdCgpKG1lbnUsIHRhcmdldCk7XG4gICAgICB9XG4gICAgICB0aGlzLiRyZWZzLnNjcm9sbGJhciAmJiB0aGlzLiRyZWZzLnNjcm9sbGJhci5oYW5kbGVTY3JvbGwoKTtcbiAgICB9LFxuICAgIGhhbmRsZU1lbnVFbnRlcjogZnVuY3Rpb24gaGFuZGxlTWVudUVudGVyKCkge1xuICAgICAgdmFyIF90aGlzNyA9IHRoaXM7XG5cbiAgICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzNy5zY3JvbGxUb09wdGlvbihfdGhpczcuc2VsZWN0ZWQpO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBlbWl0Q2hhbmdlOiBmdW5jdGlvbiBlbWl0Q2hhbmdlKHZhbCkge1xuICAgICAgaWYgKCFPYmplY3QodXRpbF9bXCJ2YWx1ZUVxdWFsc1wiXSkodGhpcy52YWx1ZSwgdmFsKSkge1xuICAgICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCB2YWwpO1xuICAgICAgfVxuICAgIH0sXG4gICAgZ2V0T3B0aW9uOiBmdW5jdGlvbiBnZXRPcHRpb24odmFsdWUpIHtcbiAgICAgIHZhciBvcHRpb24gPSB2b2lkIDA7XG4gICAgICB2YXIgaXNPYmplY3QgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpLnRvTG93ZXJDYXNlKCkgPT09ICdbb2JqZWN0IG9iamVjdF0nO1xuICAgICAgdmFyIGlzTnVsbCA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkudG9Mb3dlckNhc2UoKSA9PT0gJ1tvYmplY3QgbnVsbF0nO1xuICAgICAgdmFyIGlzVW5kZWZpbmVkID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKS50b0xvd2VyQ2FzZSgpID09PSAnW29iamVjdCB1bmRlZmluZWRdJztcblxuICAgICAgZm9yICh2YXIgaSA9IHRoaXMuY2FjaGVkT3B0aW9ucy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICB2YXIgY2FjaGVkT3B0aW9uID0gdGhpcy5jYWNoZWRPcHRpb25zW2ldO1xuICAgICAgICB2YXIgaXNFcXVhbCA9IGlzT2JqZWN0ID8gT2JqZWN0KHV0aWxfW1wiZ2V0VmFsdWVCeVBhdGhcIl0pKGNhY2hlZE9wdGlvbi52YWx1ZSwgdGhpcy52YWx1ZUtleSkgPT09IE9iamVjdCh1dGlsX1tcImdldFZhbHVlQnlQYXRoXCJdKSh2YWx1ZSwgdGhpcy52YWx1ZUtleSkgOiBjYWNoZWRPcHRpb24udmFsdWUgPT09IHZhbHVlO1xuICAgICAgICBpZiAoaXNFcXVhbCkge1xuICAgICAgICAgIG9wdGlvbiA9IGNhY2hlZE9wdGlvbjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbikgcmV0dXJuIG9wdGlvbjtcbiAgICAgIHZhciBsYWJlbCA9ICFpc09iamVjdCAmJiAhaXNOdWxsICYmICFpc1VuZGVmaW5lZCA/IFN0cmluZyh2YWx1ZSkgOiAnJztcbiAgICAgIHZhciBuZXdPcHRpb24gPSB7XG4gICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgY3VycmVudExhYmVsOiBsYWJlbFxuICAgICAgfTtcbiAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgIG5ld09wdGlvbi5oaXRTdGF0ZSA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ld09wdGlvbjtcbiAgICB9LFxuICAgIHNldFNlbGVjdGVkOiBmdW5jdGlvbiBzZXRTZWxlY3RlZCgpIHtcbiAgICAgIHZhciBfdGhpczggPSB0aGlzO1xuXG4gICAgICBpZiAoIXRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgdmFyIG9wdGlvbiA9IHRoaXMuZ2V0T3B0aW9uKHRoaXMudmFsdWUpO1xuICAgICAgICBpZiAob3B0aW9uLmNyZWF0ZWQpIHtcbiAgICAgICAgICB0aGlzLmNyZWF0ZWRMYWJlbCA9IG9wdGlvbi5jdXJyZW50TGFiZWw7XG4gICAgICAgICAgdGhpcy5jcmVhdGVkU2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY3JlYXRlZFNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3RlZExhYmVsID0gb3B0aW9uLmN1cnJlbnRMYWJlbDtcbiAgICAgICAgdGhpcy5zZWxlY3RlZCA9IG9wdGlvbjtcbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyYWJsZSkgdGhpcy5xdWVyeSA9IHRoaXMuc2VsZWN0ZWRMYWJlbDtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkpIHtcbiAgICAgICAgdGhpcy52YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKF90aGlzOC5nZXRPcHRpb24odmFsdWUpKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLnNlbGVjdGVkID0gcmVzdWx0O1xuICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpczgucmVzZXRJbnB1dEhlaWdodCgpO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBoYW5kbGVGb2N1czogZnVuY3Rpb24gaGFuZGxlRm9jdXMoZXZlbnQpIHtcbiAgICAgIGlmICghdGhpcy5zb2Z0Rm9jdXMpIHtcbiAgICAgICAgaWYgKHRoaXMuYXV0b21hdGljRHJvcGRvd24gfHwgdGhpcy5maWx0ZXJhYmxlKSB7XG4gICAgICAgICAgaWYgKHRoaXMuZmlsdGVyYWJsZSAmJiAhdGhpcy52aXNpYmxlKSB7XG4gICAgICAgICAgICB0aGlzLm1lbnVWaXNpYmxlT25Gb2N1cyA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMudmlzaWJsZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4kZW1pdCgnZm9jdXMnLCBldmVudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNvZnRGb2N1cyA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0sXG4gICAgYmx1cjogZnVuY3Rpb24gYmx1cigpIHtcbiAgICAgIHRoaXMudmlzaWJsZSA9IGZhbHNlO1xuICAgICAgdGhpcy4kcmVmcy5yZWZlcmVuY2UuYmx1cigpO1xuICAgIH0sXG4gICAgaGFuZGxlQmx1cjogZnVuY3Rpb24gaGFuZGxlQmx1cihldmVudCkge1xuICAgICAgdmFyIF90aGlzOSA9IHRoaXM7XG5cbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoX3RoaXM5LmlzU2lsZW50Qmx1cikge1xuICAgICAgICAgIF90aGlzOS5pc1NpbGVudEJsdXIgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBfdGhpczkuJGVtaXQoJ2JsdXInLCBldmVudCk7XG4gICAgICAgIH1cbiAgICAgIH0sIDUwKTtcbiAgICAgIHRoaXMuc29mdEZvY3VzID0gZmFsc2U7XG4gICAgfSxcbiAgICBoYW5kbGVDbGVhckNsaWNrOiBmdW5jdGlvbiBoYW5kbGVDbGVhckNsaWNrKGV2ZW50KSB7XG4gICAgICB0aGlzLmRlbGV0ZVNlbGVjdGVkKGV2ZW50KTtcbiAgICB9LFxuICAgIGRvRGVzdHJveTogZnVuY3Rpb24gZG9EZXN0cm95KCkge1xuICAgICAgdGhpcy4kcmVmcy5wb3BwZXIgJiYgdGhpcy4kcmVmcy5wb3BwZXIuZG9EZXN0cm95KCk7XG4gICAgfSxcbiAgICBoYW5kbGVDbG9zZTogZnVuY3Rpb24gaGFuZGxlQ2xvc2UoKSB7XG4gICAgICB0aGlzLnZpc2libGUgPSBmYWxzZTtcbiAgICB9LFxuICAgIHRvZ2dsZUxhc3RPcHRpb25IaXRTdGF0ZTogZnVuY3Rpb24gdG9nZ2xlTGFzdE9wdGlvbkhpdFN0YXRlKGhpdCkge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHRoaXMuc2VsZWN0ZWQpKSByZXR1cm47XG4gICAgICB2YXIgb3B0aW9uID0gdGhpcy5zZWxlY3RlZFt0aGlzLnNlbGVjdGVkLmxlbmd0aCAtIDFdO1xuICAgICAgaWYgKCFvcHRpb24pIHJldHVybjtcblxuICAgICAgaWYgKGhpdCA9PT0gdHJ1ZSB8fCBoaXQgPT09IGZhbHNlKSB7XG4gICAgICAgIG9wdGlvbi5oaXRTdGF0ZSA9IGhpdDtcbiAgICAgICAgcmV0dXJuIGhpdDtcbiAgICAgIH1cblxuICAgICAgb3B0aW9uLmhpdFN0YXRlID0gIW9wdGlvbi5oaXRTdGF0ZTtcbiAgICAgIHJldHVybiBvcHRpb24uaGl0U3RhdGU7XG4gICAgfSxcbiAgICBkZWxldGVQcmV2VGFnOiBmdW5jdGlvbiBkZWxldGVQcmV2VGFnKGUpIHtcbiAgICAgIGlmIChlLnRhcmdldC52YWx1ZS5sZW5ndGggPD0gMCAmJiAhdGhpcy50b2dnbGVMYXN0T3B0aW9uSGl0U3RhdGUoKSkge1xuICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLnZhbHVlLnNsaWNlKCk7XG4gICAgICAgIHZhbHVlLnBvcCgpO1xuICAgICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIHZhbHVlKTtcbiAgICAgICAgdGhpcy5lbWl0Q2hhbmdlKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIG1hbmFnZVBsYWNlaG9sZGVyOiBmdW5jdGlvbiBtYW5hZ2VQbGFjZWhvbGRlcigpIHtcbiAgICAgIGlmICh0aGlzLmN1cnJlbnRQbGFjZWhvbGRlciAhPT0gJycpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50UGxhY2Vob2xkZXIgPSB0aGlzLiRyZWZzLmlucHV0LnZhbHVlID8gJycgOiB0aGlzLmNhY2hlZFBsYWNlSG9sZGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgcmVzZXRJbnB1dFN0YXRlOiBmdW5jdGlvbiByZXNldElucHV0U3RhdGUoZSkge1xuICAgICAgaWYgKGUua2V5Q29kZSAhPT0gOCkgdGhpcy50b2dnbGVMYXN0T3B0aW9uSGl0U3RhdGUoZmFsc2UpO1xuICAgICAgdGhpcy5pbnB1dExlbmd0aCA9IHRoaXMuJHJlZnMuaW5wdXQudmFsdWUubGVuZ3RoICogMTUgKyAyMDtcbiAgICAgIHRoaXMucmVzZXRJbnB1dEhlaWdodCgpO1xuICAgIH0sXG4gICAgcmVzZXRJbnB1dEhlaWdodDogZnVuY3Rpb24gcmVzZXRJbnB1dEhlaWdodCgpIHtcbiAgICAgIHZhciBfdGhpczEwID0gdGhpcztcblxuICAgICAgaWYgKHRoaXMuY29sbGFwc2VUYWdzICYmICF0aGlzLmZpbHRlcmFibGUpIHJldHVybjtcbiAgICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFfdGhpczEwLiRyZWZzLnJlZmVyZW5jZSkgcmV0dXJuO1xuICAgICAgICB2YXIgaW5wdXRDaGlsZE5vZGVzID0gX3RoaXMxMC4kcmVmcy5yZWZlcmVuY2UuJGVsLmNoaWxkTm9kZXM7XG4gICAgICAgIHZhciBpbnB1dCA9IFtdLmZpbHRlci5jYWxsKGlucHV0Q2hpbGROb2RlcywgZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICByZXR1cm4gaXRlbS50YWdOYW1lID09PSAnSU5QVVQnO1xuICAgICAgICB9KVswXTtcbiAgICAgICAgdmFyIHRhZ3MgPSBfdGhpczEwLiRyZWZzLnRhZ3M7XG4gICAgICAgIHZhciB0YWdzSGVpZ2h0ID0gdGFncyA/IE1hdGgucm91bmQodGFncy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQpIDogMDtcbiAgICAgICAgdmFyIHNpemVJbk1hcCA9IF90aGlzMTAuaW5pdGlhbElucHV0SGVpZ2h0IHx8IDQwO1xuICAgICAgICBpbnB1dC5zdHlsZS5oZWlnaHQgPSBfdGhpczEwLnNlbGVjdGVkLmxlbmd0aCA9PT0gMCA/IHNpemVJbk1hcCArICdweCcgOiBNYXRoLm1heCh0YWdzID8gdGFnc0hlaWdodCArICh0YWdzSGVpZ2h0ID4gc2l6ZUluTWFwID8gNiA6IDApIDogMCwgc2l6ZUluTWFwKSArICdweCc7XG4gICAgICAgIGlmIChfdGhpczEwLnZpc2libGUgJiYgX3RoaXMxMC5lbXB0eVRleHQgIT09IGZhbHNlKSB7XG4gICAgICAgICAgX3RoaXMxMC5icm9hZGNhc3QoJ0VsU2VsZWN0RHJvcGRvd24nLCAndXBkYXRlUG9wcGVyJyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sXG4gICAgcmVzZXRIb3ZlckluZGV4OiBmdW5jdGlvbiByZXNldEhvdmVySW5kZXgoKSB7XG4gICAgICB2YXIgX3RoaXMxMSA9IHRoaXM7XG5cbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIV90aGlzMTEubXVsdGlwbGUpIHtcbiAgICAgICAgICBfdGhpczExLmhvdmVySW5kZXggPSBfdGhpczExLm9wdGlvbnMuaW5kZXhPZihfdGhpczExLnNlbGVjdGVkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoX3RoaXMxMS5zZWxlY3RlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBfdGhpczExLmhvdmVySW5kZXggPSBNYXRoLm1pbi5hcHBseShudWxsLCBfdGhpczExLnNlbGVjdGVkLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgICAgICByZXR1cm4gX3RoaXMxMS5vcHRpb25zLmluZGV4T2YoaXRlbSk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIF90aGlzMTEuaG92ZXJJbmRleCA9IC0xO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSwgMzAwKTtcbiAgICB9LFxuICAgIGhhbmRsZU9wdGlvblNlbGVjdDogZnVuY3Rpb24gaGFuZGxlT3B0aW9uU2VsZWN0KG9wdGlvbiwgYnlDbGljaykge1xuICAgICAgdmFyIF90aGlzMTIgPSB0aGlzO1xuXG4gICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICB2YXIgdmFsdWUgPSAodGhpcy52YWx1ZSB8fCBbXSkuc2xpY2UoKTtcbiAgICAgICAgdmFyIG9wdGlvbkluZGV4ID0gdGhpcy5nZXRWYWx1ZUluZGV4KHZhbHVlLCBvcHRpb24udmFsdWUpO1xuICAgICAgICBpZiAob3B0aW9uSW5kZXggPiAtMSkge1xuICAgICAgICAgIHZhbHVlLnNwbGljZShvcHRpb25JbmRleCwgMSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5tdWx0aXBsZUxpbWl0IDw9IDAgfHwgdmFsdWUubGVuZ3RoIDwgdGhpcy5tdWx0aXBsZUxpbWl0KSB7XG4gICAgICAgICAgdmFsdWUucHVzaChvcHRpb24udmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgdmFsdWUpO1xuICAgICAgICB0aGlzLmVtaXRDaGFuZ2UodmFsdWUpO1xuICAgICAgICBpZiAob3B0aW9uLmNyZWF0ZWQpIHtcbiAgICAgICAgICB0aGlzLnF1ZXJ5ID0gJyc7XG4gICAgICAgICAgdGhpcy5oYW5kbGVRdWVyeUNoYW5nZSgnJyk7XG4gICAgICAgICAgdGhpcy5pbnB1dExlbmd0aCA9IDIwO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmZpbHRlcmFibGUpIHRoaXMuJHJlZnMuaW5wdXQuZm9jdXMoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ2lucHV0Jywgb3B0aW9uLnZhbHVlKTtcbiAgICAgICAgdGhpcy5lbWl0Q2hhbmdlKG9wdGlvbi52YWx1ZSk7XG4gICAgICAgIHRoaXMudmlzaWJsZSA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgdGhpcy5pc1NpbGVudEJsdXIgPSBieUNsaWNrO1xuICAgICAgdGhpcy5zZXRTb2Z0Rm9jdXMoKTtcbiAgICAgIGlmICh0aGlzLnZpc2libGUpIHJldHVybjtcbiAgICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMxMi5zY3JvbGxUb09wdGlvbihvcHRpb24pO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBzZXRTb2Z0Rm9jdXM6IGZ1bmN0aW9uIHNldFNvZnRGb2N1cygpIHtcbiAgICAgIHRoaXMuc29mdEZvY3VzID0gdHJ1ZTtcbiAgICAgIHZhciBpbnB1dCA9IHRoaXMuJHJlZnMuaW5wdXQgfHwgdGhpcy4kcmVmcy5yZWZlcmVuY2U7XG4gICAgICBpZiAoaW5wdXQpIHtcbiAgICAgICAgaW5wdXQuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGdldFZhbHVlSW5kZXg6IGZ1bmN0aW9uIGdldFZhbHVlSW5kZXgoKSB7XG4gICAgICB2YXIgYXJyID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBbXTtcbiAgICAgIHZhciB2YWx1ZSA9IGFyZ3VtZW50c1sxXTtcblxuICAgICAgdmFyIGlzT2JqZWN0ID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKS50b0xvd2VyQ2FzZSgpID09PSAnW29iamVjdCBvYmplY3RdJztcbiAgICAgIGlmICghaXNPYmplY3QpIHtcbiAgICAgICAgcmV0dXJuIGFyci5pbmRleE9mKHZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciB2YWx1ZUtleSA9IHRoaXMudmFsdWVLZXk7XG4gICAgICAgIHZhciBpbmRleCA9IC0xO1xuICAgICAgICBhcnIuc29tZShmdW5jdGlvbiAoaXRlbSwgaSkge1xuICAgICAgICAgIGlmIChPYmplY3QodXRpbF9bXCJnZXRWYWx1ZUJ5UGF0aFwiXSkoaXRlbSwgdmFsdWVLZXkpID09PSBPYmplY3QodXRpbF9bXCJnZXRWYWx1ZUJ5UGF0aFwiXSkodmFsdWUsIHZhbHVlS2V5KSkge1xuICAgICAgICAgICAgaW5kZXggPSBpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBpbmRleDtcbiAgICAgIH1cbiAgICB9LFxuICAgIHRvZ2dsZU1lbnU6IGZ1bmN0aW9uIHRvZ2dsZU1lbnUoKSB7XG4gICAgICBpZiAoIXRoaXMuc2VsZWN0RGlzYWJsZWQpIHtcbiAgICAgICAgaWYgKHRoaXMubWVudVZpc2libGVPbkZvY3VzKSB7XG4gICAgICAgICAgdGhpcy5tZW51VmlzaWJsZU9uRm9jdXMgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnZpc2libGUgPSAhdGhpcy52aXNpYmxlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnZpc2libGUpIHtcbiAgICAgICAgICAodGhpcy4kcmVmcy5pbnB1dCB8fCB0aGlzLiRyZWZzLnJlZmVyZW5jZSkuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgc2VsZWN0T3B0aW9uOiBmdW5jdGlvbiBzZWxlY3RPcHRpb24oKSB7XG4gICAgICBpZiAoIXRoaXMudmlzaWJsZSkge1xuICAgICAgICB0aGlzLnRvZ2dsZU1lbnUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnNbdGhpcy5ob3ZlckluZGV4XSkge1xuICAgICAgICAgIHRoaXMuaGFuZGxlT3B0aW9uU2VsZWN0KHRoaXMub3B0aW9uc1t0aGlzLmhvdmVySW5kZXhdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgZGVsZXRlU2VsZWN0ZWQ6IGZ1bmN0aW9uIGRlbGV0ZVNlbGVjdGVkKGV2ZW50KSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHZhciB2YWx1ZSA9IHRoaXMubXVsdGlwbGUgPyBbXSA6ICcnO1xuICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCB2YWx1ZSk7XG4gICAgICB0aGlzLmVtaXRDaGFuZ2UodmFsdWUpO1xuICAgICAgdGhpcy52aXNpYmxlID0gZmFsc2U7XG4gICAgICB0aGlzLiRlbWl0KCdjbGVhcicpO1xuICAgIH0sXG4gICAgZGVsZXRlVGFnOiBmdW5jdGlvbiBkZWxldGVUYWcoZXZlbnQsIHRhZykge1xuICAgICAgdmFyIGluZGV4ID0gdGhpcy5zZWxlY3RlZC5pbmRleE9mKHRhZyk7XG4gICAgICBpZiAoaW5kZXggPiAtMSAmJiAhdGhpcy5zZWxlY3REaXNhYmxlZCkge1xuICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLnZhbHVlLnNsaWNlKCk7XG4gICAgICAgIHZhbHVlLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgdmFsdWUpO1xuICAgICAgICB0aGlzLmVtaXRDaGFuZ2UodmFsdWUpO1xuICAgICAgICB0aGlzLiRlbWl0KCdyZW1vdmUtdGFnJywgdGFnLnZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH0sXG4gICAgb25JbnB1dENoYW5nZTogZnVuY3Rpb24gb25JbnB1dENoYW5nZSgpIHtcbiAgICAgIGlmICh0aGlzLmZpbHRlcmFibGUgJiYgdGhpcy5xdWVyeSAhPT0gdGhpcy5zZWxlY3RlZExhYmVsKSB7XG4gICAgICAgIHRoaXMucXVlcnkgPSB0aGlzLnNlbGVjdGVkTGFiZWw7XG4gICAgICAgIHRoaXMuaGFuZGxlUXVlcnlDaGFuZ2UodGhpcy5xdWVyeSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBvbk9wdGlvbkRlc3Ryb3k6IGZ1bmN0aW9uIG9uT3B0aW9uRGVzdHJveShpbmRleCkge1xuICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zQ291bnQtLTtcbiAgICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnNDb3VudC0tO1xuICAgICAgICB0aGlzLm9wdGlvbnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHJlc2V0SW5wdXRXaWR0aDogZnVuY3Rpb24gcmVzZXRJbnB1dFdpZHRoKCkge1xuICAgICAgdGhpcy5pbnB1dFdpZHRoID0gdGhpcy4kcmVmcy5yZWZlcmVuY2UuJGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgIH0sXG4gICAgaGFuZGxlUmVzaXplOiBmdW5jdGlvbiBoYW5kbGVSZXNpemUoKSB7XG4gICAgICB0aGlzLnJlc2V0SW5wdXRXaWR0aCgpO1xuICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHRoaXMucmVzZXRJbnB1dEhlaWdodCgpO1xuICAgIH0sXG4gICAgY2hlY2tEZWZhdWx0Rmlyc3RPcHRpb246IGZ1bmN0aW9uIGNoZWNrRGVmYXVsdEZpcnN0T3B0aW9uKCkge1xuICAgICAgdGhpcy5ob3ZlckluZGV4ID0gLTE7XG4gICAgICAvLyBoaWdobGlnaHQgdGhlIGNyZWF0ZWQgb3B0aW9uXG4gICAgICB2YXIgaGFzQ3JlYXRlZCA9IGZhbHNlO1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMub3B0aW9ucy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zW2ldLmNyZWF0ZWQpIHtcbiAgICAgICAgICBoYXNDcmVhdGVkID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmhvdmVySW5kZXggPSBpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaGFzQ3JlYXRlZCkgcmV0dXJuO1xuICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSAhPT0gdGhpcy5vcHRpb25zLmxlbmd0aDsgKytfaSkge1xuICAgICAgICB2YXIgb3B0aW9uID0gdGhpcy5vcHRpb25zW19pXTtcbiAgICAgICAgaWYgKHRoaXMucXVlcnkpIHtcbiAgICAgICAgICAvLyBoaWdobGlnaHQgZmlyc3Qgb3B0aW9ucyB0aGF0IHBhc3NlcyB0aGUgZmlsdGVyXG4gICAgICAgICAgaWYgKCFvcHRpb24uZGlzYWJsZWQgJiYgIW9wdGlvbi5ncm91cERpc2FibGVkICYmIG9wdGlvbi52aXNpYmxlKSB7XG4gICAgICAgICAgICB0aGlzLmhvdmVySW5kZXggPSBfaTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBoaWdobGlnaHQgY3VycmVudGx5IHNlbGVjdGVkIG9wdGlvblxuICAgICAgICAgIGlmIChvcHRpb24uaXRlbVNlbGVjdGVkKSB7XG4gICAgICAgICAgICB0aGlzLmhvdmVySW5kZXggPSBfaTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgZ2V0VmFsdWVLZXk6IGZ1bmN0aW9uIGdldFZhbHVlS2V5KGl0ZW0pIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaXRlbS52YWx1ZSkudG9Mb3dlckNhc2UoKSAhPT0gJ1tvYmplY3Qgb2JqZWN0XScpIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0udmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gT2JqZWN0KHV0aWxfW1wiZ2V0VmFsdWVCeVBhdGhcIl0pKGl0ZW0udmFsdWUsIHRoaXMudmFsdWVLZXkpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkOiBmdW5jdGlvbiBjcmVhdGVkKCkge1xuICAgIHZhciBfdGhpczEzID0gdGhpcztcblxuICAgIHRoaXMuY2FjaGVkUGxhY2VIb2xkZXIgPSB0aGlzLmN1cnJlbnRQbGFjZWhvbGRlciA9IHRoaXMucHJvcFBsYWNlaG9sZGVyO1xuICAgIGlmICh0aGlzLm11bHRpcGxlICYmICFBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpKSB7XG4gICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIFtdKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLm11bHRpcGxlICYmIEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkpIHtcbiAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgJycpO1xuICAgIH1cblxuICAgIHRoaXMuZGVib3VuY2VkT25JbnB1dENoYW5nZSA9IGRlYm91bmNlX2RlZmF1bHQoKSh0aGlzLmRlYm91bmNlLCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczEzLm9uSW5wdXRDaGFuZ2UoKTtcbiAgICB9KTtcblxuICAgIHRoaXMuZGVib3VuY2VkUXVlcnlDaGFuZ2UgPSBkZWJvdW5jZV9kZWZhdWx0KCkodGhpcy5kZWJvdW5jZSwgZnVuY3Rpb24gKGUpIHtcbiAgICAgIF90aGlzMTMuaGFuZGxlUXVlcnlDaGFuZ2UoZS50YXJnZXQudmFsdWUpO1xuICAgIH0pO1xuXG4gICAgdGhpcy4kb24oJ2hhbmRsZU9wdGlvbkNsaWNrJywgdGhpcy5oYW5kbGVPcHRpb25TZWxlY3QpO1xuICAgIHRoaXMuJG9uKCdzZXRTZWxlY3RlZCcsIHRoaXMuc2V0U2VsZWN0ZWQpO1xuICB9LFxuICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge1xuICAgIHZhciBfdGhpczE0ID0gdGhpcztcblxuICAgIGlmICh0aGlzLm11bHRpcGxlICYmIEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkgJiYgdGhpcy52YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmN1cnJlbnRQbGFjZWhvbGRlciA9ICcnO1xuICAgIH1cbiAgICBPYmplY3QocmVzaXplX2V2ZW50X1tcImFkZFJlc2l6ZUxpc3RlbmVyXCJdKSh0aGlzLiRlbCwgdGhpcy5oYW5kbGVSZXNpemUpO1xuXG4gICAgdmFyIHJlZmVyZW5jZSA9IHRoaXMuJHJlZnMucmVmZXJlbmNlO1xuICAgIGlmIChyZWZlcmVuY2UgJiYgcmVmZXJlbmNlLiRlbCkge1xuICAgICAgdmFyIHNpemVNYXAgPSB7XG4gICAgICAgIG1lZGl1bTogMzYsXG4gICAgICAgIHNtYWxsOiAzMixcbiAgICAgICAgbWluaTogMjhcbiAgICAgIH07XG4gICAgICB2YXIgaW5wdXQgPSByZWZlcmVuY2UuJGVsLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0Jyk7XG4gICAgICB0aGlzLmluaXRpYWxJbnB1dEhlaWdodCA9IGlucHV0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCB8fCBzaXplTWFwW3RoaXMuc2VsZWN0U2l6ZV07XG4gICAgfVxuICAgIGlmICh0aGlzLnJlbW90ZSAmJiB0aGlzLm11bHRpcGxlKSB7XG4gICAgICB0aGlzLnJlc2V0SW5wdXRIZWlnaHQoKTtcbiAgICB9XG4gICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKHJlZmVyZW5jZSAmJiByZWZlcmVuY2UuJGVsKSB7XG4gICAgICAgIF90aGlzMTQuaW5wdXRXaWR0aCA9IHJlZmVyZW5jZS4kZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5zZXRTZWxlY3RlZCgpO1xuICB9LFxuICBiZWZvcmVEZXN0cm95OiBmdW5jdGlvbiBiZWZvcmVEZXN0cm95KCkge1xuICAgIGlmICh0aGlzLiRlbCAmJiB0aGlzLmhhbmRsZVJlc2l6ZSkgT2JqZWN0KHJlc2l6ZV9ldmVudF9bXCJyZW1vdmVSZXNpemVMaXN0ZW5lclwiXSkodGhpcy4kZWwsIHRoaXMuaGFuZGxlUmVzaXplKTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3NlbGVjdC9zcmMvc2VsZWN0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfc2VsZWN0dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHNlbGVjdHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9zZWxlY3Qvc3JjL3NlbGVjdC52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBzZWxlY3RfY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBzcmNfc2VsZWN0dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICBzZWxlY3R2dWVfdHlwZV90ZW1wbGF0ZV9pZF8wZTRhYWRlNl9yZW5kZXIsXG4gIHNlbGVjdHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzBlNGFhZGU2X3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgc2VsZWN0X2FwaTsgfVxuc2VsZWN0X2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvc2VsZWN0L3NyYy9zZWxlY3QudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY19zZWxlY3QgPSAoc2VsZWN0X2NvbXBvbmVudC5leHBvcnRzKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvc2VsZWN0L2luZGV4LmpzXG5cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbnNyY19zZWxlY3QuaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcbiAgVnVlLmNvbXBvbmVudChzcmNfc2VsZWN0Lm5hbWUsIHNyY19zZWxlY3QpO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcGFja2FnZXNfc2VsZWN0ID0gKHNyY19zZWxlY3QpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9vcHRpb24vaW5kZXguanNcblxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuc3JjX29wdGlvbi5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuICBWdWUuY29tcG9uZW50KHNyY19vcHRpb24ubmFtZSwgc3JjX29wdGlvbik7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc19vcHRpb24gPSAoc3JjX29wdGlvbik7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3NlbGVjdC9zcmMvb3B0aW9uLWdyb3VwLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02Njg1ZTVkZSZcbnZhciBvcHRpb25fZ3JvdXB2dWVfdHlwZV90ZW1wbGF0ZV9pZF82Njg1ZTVkZV9yZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJ1bFwiLFxuICAgIHtcbiAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgdmFsdWU6IF92bS52aXNpYmxlLFxuICAgICAgICAgIGV4cHJlc3Npb246IFwidmlzaWJsZVwiXG4gICAgICAgIH1cbiAgICAgIF0sXG4gICAgICBzdGF0aWNDbGFzczogXCJlbC1zZWxlY3QtZ3JvdXBfX3dyYXBcIlxuICAgIH0sXG4gICAgW1xuICAgICAgX2MoXCJsaVwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLXNlbGVjdC1ncm91cF9fdGl0bGVcIiB9LCBbXG4gICAgICAgIF92bS5fdihfdm0uX3MoX3ZtLmxhYmVsKSlcbiAgICAgIF0pLFxuICAgICAgX2MoXCJsaVwiLCBbXG4gICAgICAgIF9jKFwidWxcIiwgeyBzdGF0aWNDbGFzczogXCJlbC1zZWxlY3QtZ3JvdXBcIiB9LCBbX3ZtLl90KFwiZGVmYXVsdFwiKV0sIDIpXG4gICAgICBdKVxuICAgIF1cbiAgKVxufVxudmFyIG9wdGlvbl9ncm91cHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzY2ODVlNWRlX3N0YXRpY1JlbmRlckZucyA9IFtdXG5vcHRpb25fZ3JvdXB2dWVfdHlwZV90ZW1wbGF0ZV9pZF82Njg1ZTVkZV9yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3NlbGVjdC9zcmMvb3B0aW9uLWdyb3VwLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02Njg1ZTVkZSZcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvc2VsZWN0L3NyYy9vcHRpb24tZ3JvdXAudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cblxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBvcHRpb25fZ3JvdXB2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBtaXhpbnM6IFtlbWl0dGVyX2RlZmF1bHQuYV0sXG5cbiAgbmFtZTogJ0VsT3B0aW9uR3JvdXAnLFxuXG4gIGNvbXBvbmVudE5hbWU6ICdFbE9wdGlvbkdyb3VwJyxcblxuICBwcm9wczoge1xuICAgIGxhYmVsOiBTdHJpbmcsXG4gICAgZGlzYWJsZWQ6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICB2aXNpYmxlOiB0cnVlXG4gICAgfTtcbiAgfSxcblxuXG4gIHdhdGNoOiB7XG4gICAgZGlzYWJsZWQ6IGZ1bmN0aW9uIGRpc2FibGVkKHZhbCkge1xuICAgICAgdGhpcy5icm9hZGNhc3QoJ0VsT3B0aW9uJywgJ2hhbmRsZUdyb3VwRGlzYWJsZWQnLCB2YWwpO1xuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgcXVlcnlDaGFuZ2U6IGZ1bmN0aW9uIHF1ZXJ5Q2hhbmdlKCkge1xuICAgICAgdGhpcy52aXNpYmxlID0gdGhpcy4kY2hpbGRyZW4gJiYgQXJyYXkuaXNBcnJheSh0aGlzLiRjaGlsZHJlbikgJiYgdGhpcy4kY2hpbGRyZW4uc29tZShmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICAgIHJldHVybiBvcHRpb24udmlzaWJsZSA9PT0gdHJ1ZTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkOiBmdW5jdGlvbiBjcmVhdGVkKCkge1xuICAgIHRoaXMuJG9uKCdxdWVyeUNoYW5nZScsIHRoaXMucXVlcnlDaGFuZ2UpO1xuICB9LFxuICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLmJyb2FkY2FzdCgnRWxPcHRpb24nLCAnaGFuZGxlR3JvdXBEaXNhYmxlZCcsIHRoaXMuZGlzYWJsZWQpO1xuICAgIH1cbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3NlbGVjdC9zcmMvb3B0aW9uLWdyb3VwLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfb3B0aW9uX2dyb3VwdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKG9wdGlvbl9ncm91cHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9zZWxlY3Qvc3JjL29wdGlvbi1ncm91cC52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBvcHRpb25fZ3JvdXBfY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBzcmNfb3B0aW9uX2dyb3VwdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICBvcHRpb25fZ3JvdXB2dWVfdHlwZV90ZW1wbGF0ZV9pZF82Njg1ZTVkZV9yZW5kZXIsXG4gIG9wdGlvbl9ncm91cHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzY2ODVlNWRlX3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgb3B0aW9uX2dyb3VwX2FwaTsgfVxub3B0aW9uX2dyb3VwX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvc2VsZWN0L3NyYy9vcHRpb24tZ3JvdXAudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIG9wdGlvbl9ncm91cCA9IChvcHRpb25fZ3JvdXBfY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9vcHRpb24tZ3JvdXAvaW5kZXguanNcblxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xub3B0aW9uX2dyb3VwLmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG4gIFZ1ZS5jb21wb25lbnQob3B0aW9uX2dyb3VwLm5hbWUsIG9wdGlvbl9ncm91cCk7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc19vcHRpb25fZ3JvdXAgPSAob3B0aW9uX2dyb3VwKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvYnV0dG9uL3NyYy9idXR0b24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWNhODU5ZmI0JlxudmFyIGJ1dHRvbnZ1ZV90eXBlX3RlbXBsYXRlX2lkX2NhODU5ZmI0X3JlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImJ1dHRvblwiLFxuICAgIHtcbiAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWJ1dHRvblwiLFxuICAgICAgY2xhc3M6IFtcbiAgICAgICAgX3ZtLnR5cGUgPyBcImVsLWJ1dHRvbi0tXCIgKyBfdm0udHlwZSA6IFwiXCIsXG4gICAgICAgIF92bS5idXR0b25TaXplID8gXCJlbC1idXR0b24tLVwiICsgX3ZtLmJ1dHRvblNpemUgOiBcIlwiLFxuICAgICAgICB7XG4gICAgICAgICAgXCJpcy1kaXNhYmxlZFwiOiBfdm0uYnV0dG9uRGlzYWJsZWQsXG4gICAgICAgICAgXCJpcy1sb2FkaW5nXCI6IF92bS5sb2FkaW5nLFxuICAgICAgICAgIFwiaXMtcGxhaW5cIjogX3ZtLnBsYWluLFxuICAgICAgICAgIFwiaXMtcm91bmRcIjogX3ZtLnJvdW5kLFxuICAgICAgICAgIFwiaXMtY2lyY2xlXCI6IF92bS5jaXJjbGVcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIGF0dHJzOiB7XG4gICAgICAgIGRpc2FibGVkOiBfdm0uYnV0dG9uRGlzYWJsZWQgfHwgX3ZtLmxvYWRpbmcsXG4gICAgICAgIGF1dG9mb2N1czogX3ZtLmF1dG9mb2N1cyxcbiAgICAgICAgdHlwZTogX3ZtLm5hdGl2ZVR5cGVcbiAgICAgIH0sXG4gICAgICBvbjogeyBjbGljazogX3ZtLmhhbmRsZUNsaWNrIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIF92bS5sb2FkaW5nID8gX2MoXCJpXCIsIHsgc3RhdGljQ2xhc3M6IFwiZWwtaWNvbi1sb2FkaW5nXCIgfSkgOiBfdm0uX2UoKSxcbiAgICAgIF92bS5pY29uICYmICFfdm0ubG9hZGluZyA/IF9jKFwiaVwiLCB7IGNsYXNzOiBfdm0uaWNvbiB9KSA6IF92bS5fZSgpLFxuICAgICAgX3ZtLiRzbG90cy5kZWZhdWx0ID8gX2MoXCJzcGFuXCIsIFtfdm0uX3QoXCJkZWZhdWx0XCIpXSwgMikgOiBfdm0uX2UoKVxuICAgIF1cbiAgKVxufVxudmFyIGJ1dHRvbnZ1ZV90eXBlX3RlbXBsYXRlX2lkX2NhODU5ZmI0X3N0YXRpY1JlbmRlckZucyA9IFtdXG5idXR0b252dWVfdHlwZV90ZW1wbGF0ZV9pZF9jYTg1OWZiNF9yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2J1dHRvbi9zcmMvYnV0dG9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1jYTg1OWZiNCZcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvYnV0dG9uL3NyYy9idXR0b24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBidXR0b252dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBuYW1lOiAnRWxCdXR0b24nLFxuXG4gIGluamVjdDoge1xuICAgIGVsRm9ybToge1xuICAgICAgZGVmYXVsdDogJydcbiAgICB9LFxuICAgIGVsRm9ybUl0ZW06IHtcbiAgICAgIGRlZmF1bHQ6ICcnXG4gICAgfVxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgdHlwZToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2RlZmF1bHQnXG4gICAgfSxcbiAgICBzaXplOiBTdHJpbmcsXG4gICAgaWNvbjoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJydcbiAgICB9LFxuICAgIG5hdGl2ZVR5cGU6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdidXR0b24nXG4gICAgfSxcbiAgICBsb2FkaW5nOiBCb29sZWFuLFxuICAgIGRpc2FibGVkOiBCb29sZWFuLFxuICAgIHBsYWluOiBCb29sZWFuLFxuICAgIGF1dG9mb2N1czogQm9vbGVhbixcbiAgICByb3VuZDogQm9vbGVhbixcbiAgICBjaXJjbGU6IEJvb2xlYW5cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIF9lbEZvcm1JdGVtU2l6ZTogZnVuY3Rpb24gX2VsRm9ybUl0ZW1TaXplKCkge1xuICAgICAgcmV0dXJuICh0aGlzLmVsRm9ybUl0ZW0gfHwge30pLmVsRm9ybUl0ZW1TaXplO1xuICAgIH0sXG4gICAgYnV0dG9uU2l6ZTogZnVuY3Rpb24gYnV0dG9uU2l6ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNpemUgfHwgdGhpcy5fZWxGb3JtSXRlbVNpemUgfHwgKHRoaXMuJEVMRU1FTlQgfHwge30pLnNpemU7XG4gICAgfSxcbiAgICBidXR0b25EaXNhYmxlZDogZnVuY3Rpb24gYnV0dG9uRGlzYWJsZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kb3B0aW9ucy5wcm9wc0RhdGEuaGFzT3duUHJvcGVydHkoJ2Rpc2FibGVkJykgPyB0aGlzLmRpc2FibGVkIDogKHRoaXMuZWxGb3JtIHx8IHt9KS5kaXNhYmxlZDtcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGhhbmRsZUNsaWNrOiBmdW5jdGlvbiBoYW5kbGVDbGljayhldnQpIHtcbiAgICAgIHRoaXMuJGVtaXQoJ2NsaWNrJywgZXZ0KTtcbiAgICB9XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9idXR0b24vc3JjL2J1dHRvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX2J1dHRvbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChidXR0b252dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvYnV0dG9uL3NyYy9idXR0b24udnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgYnV0dG9uX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgc3JjX2J1dHRvbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgYnV0dG9udnVlX3R5cGVfdGVtcGxhdGVfaWRfY2E4NTlmYjRfcmVuZGVyLFxuICBidXR0b252dWVfdHlwZV90ZW1wbGF0ZV9pZF9jYTg1OWZiNF9zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGJ1dHRvbl9hcGk7IH1cbmJ1dHRvbl9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL2J1dHRvbi9zcmMvYnV0dG9uLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfYnV0dG9uID0gKGJ1dHRvbl9jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2J1dHRvbi9pbmRleC5qc1xuXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5zcmNfYnV0dG9uLmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG4gIFZ1ZS5jb21wb25lbnQoc3JjX2J1dHRvbi5uYW1lLCBzcmNfYnV0dG9uKTtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhY2thZ2VzX2J1dHRvbiA9IChzcmNfYnV0dG9uKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvYnV0dG9uL3NyYy9idXR0b24tZ3JvdXAudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTNkODY2MWQwJlxudmFyIGJ1dHRvbl9ncm91cHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzNkODY2MWQwX3JlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLWJ1dHRvbi1ncm91cFwiIH0sIFtfdm0uX3QoXCJkZWZhdWx0XCIpXSwgMilcbn1cbnZhciBidXR0b25fZ3JvdXB2dWVfdHlwZV90ZW1wbGF0ZV9pZF8zZDg2NjFkMF9zdGF0aWNSZW5kZXJGbnMgPSBbXVxuYnV0dG9uX2dyb3VwdnVlX3R5cGVfdGVtcGxhdGVfaWRfM2Q4NjYxZDBfcmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9idXR0b24vc3JjL2J1dHRvbi1ncm91cC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9M2Q4NjYxZDAmXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2J1dHRvbi9zcmMvYnV0dG9uLWdyb3VwLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBidXR0b25fZ3JvdXB2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBuYW1lOiAnRWxCdXR0b25Hcm91cCdcbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9idXR0b24vc3JjL2J1dHRvbi1ncm91cC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX2J1dHRvbl9ncm91cHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChidXR0b25fZ3JvdXB2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvYnV0dG9uL3NyYy9idXR0b24tZ3JvdXAudnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgYnV0dG9uX2dyb3VwX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgc3JjX2J1dHRvbl9ncm91cHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgYnV0dG9uX2dyb3VwdnVlX3R5cGVfdGVtcGxhdGVfaWRfM2Q4NjYxZDBfcmVuZGVyLFxuICBidXR0b25fZ3JvdXB2dWVfdHlwZV90ZW1wbGF0ZV9pZF8zZDg2NjFkMF9zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGJ1dHRvbl9ncm91cF9hcGk7IH1cbmJ1dHRvbl9ncm91cF9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL2J1dHRvbi9zcmMvYnV0dG9uLWdyb3VwLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBidXR0b25fZ3JvdXAgPSAoYnV0dG9uX2dyb3VwX2NvbXBvbmVudC5leHBvcnRzKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvYnV0dG9uLWdyb3VwL2luZGV4LmpzXG5cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmJ1dHRvbl9ncm91cC5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuICBWdWUuY29tcG9uZW50KGJ1dHRvbl9ncm91cC5uYW1lLCBidXR0b25fZ3JvdXApO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcGFja2FnZXNfYnV0dG9uX2dyb3VwID0gKGJ1dHRvbl9ncm91cCk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3RhYmxlL3NyYy90YWJsZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NDkzZmUzNGUmXG52YXIgdGFibGV2dWVfdHlwZV90ZW1wbGF0ZV9pZF80OTNmZTM0ZV9yZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICB7XG4gICAgICBzdGF0aWNDbGFzczogXCJlbC10YWJsZVwiLFxuICAgICAgY2xhc3M6IFtcbiAgICAgICAge1xuICAgICAgICAgIFwiZWwtdGFibGUtLWZpdFwiOiBfdm0uZml0LFxuICAgICAgICAgIFwiZWwtdGFibGUtLXN0cmlwZWRcIjogX3ZtLnN0cmlwZSxcbiAgICAgICAgICBcImVsLXRhYmxlLS1ib3JkZXJcIjogX3ZtLmJvcmRlciB8fCBfdm0uaXNHcm91cCxcbiAgICAgICAgICBcImVsLXRhYmxlLS1oaWRkZW5cIjogX3ZtLmlzSGlkZGVuLFxuICAgICAgICAgIFwiZWwtdGFibGUtLWdyb3VwXCI6IF92bS5pc0dyb3VwLFxuICAgICAgICAgIFwiZWwtdGFibGUtLWZsdWlkLWhlaWdodFwiOiBfdm0ubWF4SGVpZ2h0LFxuICAgICAgICAgIFwiZWwtdGFibGUtLXNjcm9sbGFibGUteFwiOiBfdm0ubGF5b3V0LnNjcm9sbFgsXG4gICAgICAgICAgXCJlbC10YWJsZS0tc2Nyb2xsYWJsZS15XCI6IF92bS5sYXlvdXQuc2Nyb2xsWSxcbiAgICAgICAgICBcImVsLXRhYmxlLS1lbmFibGUtcm93LWhvdmVyXCI6ICFfdm0uc3RvcmUuc3RhdGVzLmlzQ29tcGxleCxcbiAgICAgICAgICBcImVsLXRhYmxlLS1lbmFibGUtcm93LXRyYW5zaXRpb25cIjpcbiAgICAgICAgICAgIChfdm0uc3RvcmUuc3RhdGVzLmRhdGEgfHwgW10pLmxlbmd0aCAhPT0gMCAmJlxuICAgICAgICAgICAgKF92bS5zdG9yZS5zdGF0ZXMuZGF0YSB8fCBbXSkubGVuZ3RoIDwgMTAwXG4gICAgICAgIH0sXG4gICAgICAgIF92bS50YWJsZVNpemUgPyBcImVsLXRhYmxlLS1cIiArIF92bS50YWJsZVNpemUgOiBcIlwiXG4gICAgICBdLFxuICAgICAgb246IHtcbiAgICAgICAgbW91c2VsZWF2ZTogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgX3ZtLmhhbmRsZU1vdXNlTGVhdmUoJGV2ZW50KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICBfYyhcbiAgICAgICAgXCJkaXZcIixcbiAgICAgICAgeyByZWY6IFwiaGlkZGVuQ29sdW1uc1wiLCBzdGF0aWNDbGFzczogXCJoaWRkZW4tY29sdW1uc1wiIH0sXG4gICAgICAgIFtfdm0uX3QoXCJkZWZhdWx0XCIpXSxcbiAgICAgICAgMlxuICAgICAgKSxcbiAgICAgIF92bS5zaG93SGVhZGVyXG4gICAgICAgID8gX2MoXG4gICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgbmFtZTogXCJtb3VzZXdoZWVsXCIsXG4gICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtbW91c2V3aGVlbFwiLFxuICAgICAgICAgICAgICAgICAgdmFsdWU6IF92bS5oYW5kbGVIZWFkZXJGb290ZXJNb3VzZXdoZWVsLFxuICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJoYW5kbGVIZWFkZXJGb290ZXJNb3VzZXdoZWVsXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIHJlZjogXCJoZWFkZXJXcmFwcGVyXCIsXG4gICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXRhYmxlX19oZWFkZXItd3JhcHBlclwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfYyhcInRhYmxlLWhlYWRlclwiLCB7XG4gICAgICAgICAgICAgICAgcmVmOiBcInRhYmxlSGVhZGVyXCIsXG4gICAgICAgICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiBfdm0ubGF5b3V0LmJvZHlXaWR0aCA/IF92bS5sYXlvdXQuYm9keVdpZHRoICsgXCJweFwiIDogXCJcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgIHN0b3JlOiBfdm0uc3RvcmUsXG4gICAgICAgICAgICAgICAgICBib3JkZXI6IF92bS5ib3JkZXIsXG4gICAgICAgICAgICAgICAgICBcImRlZmF1bHQtc29ydFwiOiBfdm0uZGVmYXVsdFNvcnRcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgMVxuICAgICAgICAgIClcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgIF9jKFxuICAgICAgICBcImRpdlwiLFxuICAgICAgICB7XG4gICAgICAgICAgcmVmOiBcImJvZHlXcmFwcGVyXCIsXG4gICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtdGFibGVfX2JvZHktd3JhcHBlclwiLFxuICAgICAgICAgIGNsYXNzOiBbXG4gICAgICAgICAgICBfdm0ubGF5b3V0LnNjcm9sbFhcbiAgICAgICAgICAgICAgPyBcImlzLXNjcm9sbGluZy1cIiArIF92bS5zY3JvbGxQb3NpdGlvblxuICAgICAgICAgICAgICA6IFwiaXMtc2Nyb2xsaW5nLW5vbmVcIlxuICAgICAgICAgIF0sXG4gICAgICAgICAgc3R5bGU6IFtfdm0uYm9keUhlaWdodF1cbiAgICAgICAgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF9jKFwidGFibGUtYm9keVwiLCB7XG4gICAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgICB3aWR0aDogX3ZtLmJvZHlXaWR0aFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgIGNvbnRleHQ6IF92bS5jb250ZXh0LFxuICAgICAgICAgICAgICBzdG9yZTogX3ZtLnN0b3JlLFxuICAgICAgICAgICAgICBzdHJpcGU6IF92bS5zdHJpcGUsXG4gICAgICAgICAgICAgIFwicm93LWNsYXNzLW5hbWVcIjogX3ZtLnJvd0NsYXNzTmFtZSxcbiAgICAgICAgICAgICAgXCJyb3ctc3R5bGVcIjogX3ZtLnJvd1N0eWxlLFxuICAgICAgICAgICAgICBoaWdobGlnaHQ6IF92bS5oaWdobGlnaHRDdXJyZW50Um93XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAgIV92bS5kYXRhIHx8IF92bS5kYXRhLmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHJlZjogXCJlbXB0eUJsb2NrXCIsXG4gICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC10YWJsZV9fZW1wdHktYmxvY2tcIixcbiAgICAgICAgICAgICAgICAgIHN0eWxlOiBfdm0uZW1wdHlCbG9ja1N0eWxlXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwiZWwtdGFibGVfX2VtcHR5LXRleHRcIiB9LFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgX3ZtLl90KFwiZW1wdHlcIiwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFxuICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3MoX3ZtLmVtcHR5VGV4dCB8fCBfdm0udChcImVsLnRhYmxlLmVtcHR5VGV4dFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgIF92bS4kc2xvdHMuYXBwZW5kXG4gICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgcmVmOiBcImFwcGVuZFdyYXBwZXJcIixcbiAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXRhYmxlX19hcHBlbmQtd3JhcHBlclwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbX3ZtLl90KFwiYXBwZW5kXCIpXSxcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgXSxcbiAgICAgICAgMVxuICAgICAgKSxcbiAgICAgIF92bS5zaG93U3VtbWFyeVxuICAgICAgICA/IF9jKFxuICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0uZGF0YSAmJiBfdm0uZGF0YS5sZW5ndGggPiAwLFxuICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJkYXRhICYmIGRhdGEubGVuZ3RoID4gMFwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBuYW1lOiBcIm1vdXNld2hlZWxcIixcbiAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1tb3VzZXdoZWVsXCIsXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLmhhbmRsZUhlYWRlckZvb3Rlck1vdXNld2hlZWwsXG4gICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcImhhbmRsZUhlYWRlckZvb3Rlck1vdXNld2hlZWxcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgcmVmOiBcImZvb3RlcldyYXBwZXJcIixcbiAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtdGFibGVfX2Zvb3Rlci13cmFwcGVyXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF9jKFwidGFibGUtZm9vdGVyXCIsIHtcbiAgICAgICAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgICAgICAgd2lkdGg6IF92bS5sYXlvdXQuYm9keVdpZHRoID8gX3ZtLmxheW91dC5ib2R5V2lkdGggKyBcInB4XCIgOiBcIlwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgc3RvcmU6IF92bS5zdG9yZSxcbiAgICAgICAgICAgICAgICAgIGJvcmRlcjogX3ZtLmJvcmRlcixcbiAgICAgICAgICAgICAgICAgIFwic3VtLXRleHRcIjogX3ZtLnN1bVRleHQgfHwgX3ZtLnQoXCJlbC50YWJsZS5zdW1UZXh0XCIpLFxuICAgICAgICAgICAgICAgICAgXCJzdW1tYXJ5LW1ldGhvZFwiOiBfdm0uc3VtbWFyeU1ldGhvZCxcbiAgICAgICAgICAgICAgICAgIFwiZGVmYXVsdC1zb3J0XCI6IF92bS5kZWZhdWx0U29ydFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAxXG4gICAgICAgICAgKVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgX3ZtLmZpeGVkQ29sdW1ucy5sZW5ndGggPiAwXG4gICAgICAgID8gX2MoXG4gICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgbmFtZTogXCJtb3VzZXdoZWVsXCIsXG4gICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtbW91c2V3aGVlbFwiLFxuICAgICAgICAgICAgICAgICAgdmFsdWU6IF92bS5oYW5kbGVGaXhlZE1vdXNld2hlZWwsXG4gICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcImhhbmRsZUZpeGVkTW91c2V3aGVlbFwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICByZWY6IFwiZml4ZWRXcmFwcGVyXCIsXG4gICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXRhYmxlX19maXhlZFwiLFxuICAgICAgICAgICAgICBzdHlsZTogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiBfdm0ubGF5b3V0LmZpeGVkV2lkdGhcbiAgICAgICAgICAgICAgICAgICAgPyBfdm0ubGF5b3V0LmZpeGVkV2lkdGggKyBcInB4XCJcbiAgICAgICAgICAgICAgICAgICAgOiBcIlwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBfdm0uZml4ZWRIZWlnaHRcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX3ZtLnNob3dIZWFkZXJcbiAgICAgICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgcmVmOiBcImZpeGVkSGVhZGVyV3JhcHBlclwiLFxuICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXRhYmxlX19maXhlZC1oZWFkZXItd3JhcHBlclwiXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICBfYyhcInRhYmxlLWhlYWRlclwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWY6IFwiZml4ZWRUYWJsZUhlYWRlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IF92bS5ib2R5V2lkdGhcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBmaXhlZDogXCJsZWZ0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogX3ZtLmJvcmRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmU6IF92bS5zdG9yZVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHJlZjogXCJmaXhlZEJvZHlXcmFwcGVyXCIsXG4gICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC10YWJsZV9fZml4ZWQtYm9keS13cmFwcGVyXCIsXG4gICAgICAgICAgICAgICAgICBzdHlsZTogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgdG9wOiBfdm0ubGF5b3V0LmhlYWRlckhlaWdodCArIFwicHhcIlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBfdm0uZml4ZWRCb2R5SGVpZ2h0XG4gICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBfYyhcInRhYmxlLWJvZHlcIiwge1xuICAgICAgICAgICAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBfdm0uYm9keVdpZHRoXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgZml4ZWQ6IFwibGVmdFwiLFxuICAgICAgICAgICAgICAgICAgICAgIHN0b3JlOiBfdm0uc3RvcmUsXG4gICAgICAgICAgICAgICAgICAgICAgc3RyaXBlOiBfdm0uc3RyaXBlLFxuICAgICAgICAgICAgICAgICAgICAgIGhpZ2hsaWdodDogX3ZtLmhpZ2hsaWdodEN1cnJlbnRSb3csXG4gICAgICAgICAgICAgICAgICAgICAgXCJyb3ctY2xhc3MtbmFtZVwiOiBfdm0ucm93Q2xhc3NOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgIFwicm93LXN0eWxlXCI6IF92bS5yb3dTdHlsZVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgIF92bS4kc2xvdHMuYXBwZW5kXG4gICAgICAgICAgICAgICAgICAgID8gX2MoXCJkaXZcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtdGFibGVfX2FwcGVuZC1ndXR0ZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlOiB7IGhlaWdodDogX3ZtLmxheW91dC5hcHBlbmRIZWlnaHQgKyBcInB4XCIgfVxuICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgX3ZtLnNob3dTdW1tYXJ5XG4gICAgICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0uZGF0YSAmJiBfdm0uZGF0YS5sZW5ndGggPiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcImRhdGEgJiYgZGF0YS5sZW5ndGggPiAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgIHJlZjogXCJmaXhlZEZvb3RlcldyYXBwZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC10YWJsZV9fZml4ZWQtZm9vdGVyLXdyYXBwZXJcIlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgX2MoXCJ0YWJsZS1mb290ZXJcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IF92bS5ib2R5V2lkdGhcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBmaXhlZDogXCJsZWZ0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogX3ZtLmJvcmRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzdW0tdGV4dFwiOiBfdm0uc3VtVGV4dCB8fCBfdm0udChcImVsLnRhYmxlLnN1bVRleHRcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwic3VtbWFyeS1tZXRob2RcIjogX3ZtLnN1bW1hcnlNZXRob2QsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlOiBfdm0uc3RvcmVcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICAgICAgXVxuICAgICAgICAgIClcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgIF92bS5yaWdodEZpeGVkQ29sdW1ucy5sZW5ndGggPiAwXG4gICAgICAgID8gX2MoXG4gICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgbmFtZTogXCJtb3VzZXdoZWVsXCIsXG4gICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtbW91c2V3aGVlbFwiLFxuICAgICAgICAgICAgICAgICAgdmFsdWU6IF92bS5oYW5kbGVGaXhlZE1vdXNld2hlZWwsXG4gICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcImhhbmRsZUZpeGVkTW91c2V3aGVlbFwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICByZWY6IFwicmlnaHRGaXhlZFdyYXBwZXJcIixcbiAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtdGFibGVfX2ZpeGVkLXJpZ2h0XCIsXG4gICAgICAgICAgICAgIHN0eWxlOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgd2lkdGg6IF92bS5sYXlvdXQucmlnaHRGaXhlZFdpZHRoXG4gICAgICAgICAgICAgICAgICAgID8gX3ZtLmxheW91dC5yaWdodEZpeGVkV2lkdGggKyBcInB4XCJcbiAgICAgICAgICAgICAgICAgICAgOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgcmlnaHQ6IF92bS5sYXlvdXQuc2Nyb2xsWVxuICAgICAgICAgICAgICAgICAgICA/IChfdm0uYm9yZGVyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IF92bS5sYXlvdXQuZ3V0dGVyV2lkdGhcbiAgICAgICAgICAgICAgICAgICAgICAgIDogX3ZtLmxheW91dC5ndXR0ZXJXaWR0aCB8fCAwKSArIFwicHhcIlxuICAgICAgICAgICAgICAgICAgICA6IFwiXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF92bS5maXhlZEhlaWdodFxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfdm0uc2hvd0hlYWRlclxuICAgICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICByZWY6IFwicmlnaHRGaXhlZEhlYWRlcldyYXBwZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC10YWJsZV9fZml4ZWQtaGVhZGVyLXdyYXBwZXJcIlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgX2MoXCJ0YWJsZS1oZWFkZXJcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVmOiBcInJpZ2h0Rml4ZWRUYWJsZUhlYWRlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IF92bS5ib2R5V2lkdGhcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBmaXhlZDogXCJyaWdodFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IF92bS5ib3JkZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlOiBfdm0uc3RvcmVcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICByZWY6IFwicmlnaHRGaXhlZEJvZHlXcmFwcGVyXCIsXG4gICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC10YWJsZV9fZml4ZWQtYm9keS13cmFwcGVyXCIsXG4gICAgICAgICAgICAgICAgICBzdHlsZTogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgdG9wOiBfdm0ubGF5b3V0LmhlYWRlckhlaWdodCArIFwicHhcIlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBfdm0uZml4ZWRCb2R5SGVpZ2h0XG4gICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBfYyhcInRhYmxlLWJvZHlcIiwge1xuICAgICAgICAgICAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBfdm0uYm9keVdpZHRoXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgZml4ZWQ6IFwicmlnaHRcIixcbiAgICAgICAgICAgICAgICAgICAgICBzdG9yZTogX3ZtLnN0b3JlLFxuICAgICAgICAgICAgICAgICAgICAgIHN0cmlwZTogX3ZtLnN0cmlwZSxcbiAgICAgICAgICAgICAgICAgICAgICBcInJvdy1jbGFzcy1uYW1lXCI6IF92bS5yb3dDbGFzc05hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgXCJyb3ctc3R5bGVcIjogX3ZtLnJvd1N0eWxlLFxuICAgICAgICAgICAgICAgICAgICAgIGhpZ2hsaWdodDogX3ZtLmhpZ2hsaWdodEN1cnJlbnRSb3dcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICBfdm0uJHNsb3RzLmFwcGVuZFxuICAgICAgICAgICAgICAgICAgICA/IF9jKFwiZGl2XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXRhYmxlX19hcHBlbmQtZ3V0dGVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZTogeyBoZWlnaHQ6IF92bS5sYXlvdXQuYXBwZW5kSGVpZ2h0ICsgXCJweFwiIH1cbiAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIF92bS5zaG93U3VtbWFyeVxuICAgICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLmRhdGEgJiYgX3ZtLmRhdGEubGVuZ3RoID4gMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJkYXRhICYmIGRhdGEubGVuZ3RoID4gMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICByZWY6IFwicmlnaHRGaXhlZEZvb3RlcldyYXBwZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC10YWJsZV9fZml4ZWQtZm9vdGVyLXdyYXBwZXJcIlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgX2MoXCJ0YWJsZS1mb290ZXJcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IF92bS5ib2R5V2lkdGhcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBmaXhlZDogXCJyaWdodFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IF92bS5ib3JkZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwic3VtLXRleHRcIjogX3ZtLnN1bVRleHQgfHwgX3ZtLnQoXCJlbC50YWJsZS5zdW1UZXh0XCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcInN1bW1hcnktbWV0aG9kXCI6IF92bS5zdW1tYXJ5TWV0aG9kLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yZTogX3ZtLnN0b3JlXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgICAgIF1cbiAgICAgICAgICApXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfdm0ucmlnaHRGaXhlZENvbHVtbnMubGVuZ3RoID4gMFxuICAgICAgICA/IF9jKFwiZGl2XCIsIHtcbiAgICAgICAgICAgIHJlZjogXCJyaWdodEZpeGVkUGF0Y2hcIixcbiAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXRhYmxlX19maXhlZC1yaWdodC1wYXRjaFwiLFxuICAgICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgICAgd2lkdGg6IF92bS5sYXlvdXQuc2Nyb2xsWSA/IF92bS5sYXlvdXQuZ3V0dGVyV2lkdGggKyBcInB4XCIgOiBcIjBcIixcbiAgICAgICAgICAgICAgaGVpZ2h0OiBfdm0ubGF5b3V0LmhlYWRlckhlaWdodCArIFwicHhcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfYyhcImRpdlwiLCB7XG4gICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICB2YWx1ZTogX3ZtLnJlc2l6ZVByb3h5VmlzaWJsZSxcbiAgICAgICAgICAgIGV4cHJlc3Npb246IFwicmVzaXplUHJveHlWaXNpYmxlXCJcbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHJlZjogXCJyZXNpemVQcm94eVwiLFxuICAgICAgICBzdGF0aWNDbGFzczogXCJlbC10YWJsZV9fY29sdW1uLXJlc2l6ZS1wcm94eVwiXG4gICAgICB9KVxuICAgIF1cbiAgKVxufVxudmFyIHRhYmxldnVlX3R5cGVfdGVtcGxhdGVfaWRfNDkzZmUzNGVfc3RhdGljUmVuZGVyRm5zID0gW11cbnRhYmxldnVlX3R5cGVfdGVtcGxhdGVfaWRfNDkzZmUzNGVfcmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy90YWJsZS9zcmMvdGFibGUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTQ5M2ZlMzRlJlxuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiZWxlbWVudC11aS9saWIvY2hlY2tib3hcIlxudmFyIGNoZWNrYm94XyA9IF9fd2VicGFja19yZXF1aXJlX18oMTQpO1xudmFyIGNoZWNrYm94X2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGNoZWNrYm94Xyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJ0aHJvdHRsZS1kZWJvdW5jZVwiXG52YXIgZXh0ZXJuYWxfdGhyb3R0bGVfZGVib3VuY2VfID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNik7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJub3JtYWxpemUtd2hlZWxcIlxudmFyIGV4dGVybmFsX25vcm1hbGl6ZV93aGVlbF8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM5KTtcbnZhciBleHRlcm5hbF9ub3JtYWxpemVfd2hlZWxfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oZXh0ZXJuYWxfbm9ybWFsaXplX3doZWVsXyk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2RpcmVjdGl2ZXMvbW91c2V3aGVlbC5qc1xuXG5cbnZhciBpc0ZpcmVmb3ggPSB0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkuaW5kZXhPZignZmlyZWZveCcpID4gLTE7XG5cbnZhciBtb3VzZXdoZWVsX21vdXNld2hlZWwgPSBmdW5jdGlvbiBtb3VzZXdoZWVsKGVsZW1lbnQsIGNhbGxiYWNrKSB7XG4gIGlmIChlbGVtZW50ICYmIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcikge1xuICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihpc0ZpcmVmb3ggPyAnRE9NTW91c2VTY3JvbGwnIDogJ21vdXNld2hlZWwnLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIHZhciBub3JtYWxpemVkID0gZXh0ZXJuYWxfbm9ybWFsaXplX3doZWVsX2RlZmF1bHQoKShldmVudCk7XG4gICAgICBjYWxsYmFjayAmJiBjYWxsYmFjay5hcHBseSh0aGlzLCBbZXZlbnQsIG5vcm1hbGl6ZWRdKTtcbiAgICB9KTtcbiAgfVxufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgZGlyZWN0aXZlc19tb3VzZXdoZWVsID0gKHtcbiAgYmluZDogZnVuY3Rpb24gYmluZChlbCwgYmluZGluZykge1xuICAgIG1vdXNld2hlZWxfbW91c2V3aGVlbChlbCwgYmluZGluZy52YWx1ZSk7XG4gIH1cbn0pO1xuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcInZ1ZVwiXG52YXIgZXh0ZXJuYWxfdnVlXyA9IF9fd2VicGFja19yZXF1aXJlX18oNik7XG52YXIgZXh0ZXJuYWxfdnVlX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGV4dGVybmFsX3Z1ZV8pO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3RhYmxlL3NyYy91dGlsLmpzXG52YXIgdXRpbF90eXBlb2YgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIiA/IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH0gOiBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9O1xuXG5cblxudmFyIGdldENlbGwgPSBmdW5jdGlvbiBnZXRDZWxsKGV2ZW50KSB7XG4gIHZhciBjZWxsID0gZXZlbnQudGFyZ2V0O1xuXG4gIHdoaWxlIChjZWxsICYmIGNlbGwudGFnTmFtZS50b1VwcGVyQ2FzZSgpICE9PSAnSFRNTCcpIHtcbiAgICBpZiAoY2VsbC50YWdOYW1lLnRvVXBwZXJDYXNlKCkgPT09ICdURCcpIHtcbiAgICAgIHJldHVybiBjZWxsO1xuICAgIH1cbiAgICBjZWxsID0gY2VsbC5wYXJlbnROb2RlO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG52YXIgdXRpbF9pc09iamVjdCA9IGZ1bmN0aW9uIGlzT2JqZWN0KG9iaikge1xuICByZXR1cm4gb2JqICE9PSBudWxsICYmICh0eXBlb2Ygb2JqID09PSAndW5kZWZpbmVkJyA/ICd1bmRlZmluZWQnIDogdXRpbF90eXBlb2Yob2JqKSkgPT09ICdvYmplY3QnO1xufTtcblxudmFyIHV0aWxfb3JkZXJCeSA9IGZ1bmN0aW9uIG9yZGVyQnkoYXJyYXksIHNvcnRLZXksIHJldmVyc2UsIHNvcnRNZXRob2QsIHNvcnRCeSkge1xuICBpZiAoIXNvcnRLZXkgJiYgIXNvcnRNZXRob2QgJiYgKCFzb3J0QnkgfHwgQXJyYXkuaXNBcnJheShzb3J0QnkpICYmICFzb3J0QnkubGVuZ3RoKSkge1xuICAgIHJldHVybiBhcnJheTtcbiAgfVxuICBpZiAodHlwZW9mIHJldmVyc2UgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV2ZXJzZSA9IHJldmVyc2UgPT09ICdkZXNjZW5kaW5nJyA/IC0xIDogMTtcbiAgfSBlbHNlIHtcbiAgICByZXZlcnNlID0gcmV2ZXJzZSAmJiByZXZlcnNlIDwgMCA/IC0xIDogMTtcbiAgfVxuICB2YXIgZ2V0S2V5ID0gc29ydE1ldGhvZCA/IG51bGwgOiBmdW5jdGlvbiAodmFsdWUsIGluZGV4KSB7XG4gICAgaWYgKHNvcnRCeSkge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHNvcnRCeSkpIHtcbiAgICAgICAgc29ydEJ5ID0gW3NvcnRCeV07XG4gICAgICB9XG4gICAgICByZXR1cm4gc29ydEJ5Lm1hcChmdW5jdGlvbiAoYnkpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBieSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICByZXR1cm4gT2JqZWN0KHV0aWxfW1wiZ2V0VmFsdWVCeVBhdGhcIl0pKHZhbHVlLCBieSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGJ5KHZhbHVlLCBpbmRleCwgYXJyYXkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHNvcnRLZXkgIT09ICcka2V5Jykge1xuICAgICAgaWYgKHV0aWxfaXNPYmplY3QodmFsdWUpICYmICckdmFsdWUnIGluIHZhbHVlKSB2YWx1ZSA9IHZhbHVlLiR2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIFt1dGlsX2lzT2JqZWN0KHZhbHVlKSA/IE9iamVjdCh1dGlsX1tcImdldFZhbHVlQnlQYXRoXCJdKSh2YWx1ZSwgc29ydEtleSkgOiB2YWx1ZV07XG4gIH07XG4gIHZhciBjb21wYXJlID0gZnVuY3Rpb24gY29tcGFyZShhLCBiKSB7XG4gICAgaWYgKHNvcnRNZXRob2QpIHtcbiAgICAgIHJldHVybiBzb3J0TWV0aG9kKGEudmFsdWUsIGIudmFsdWUpO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gYS5rZXkubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGlmIChhLmtleVtpXSA8IGIua2V5W2ldKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH1cbiAgICAgIGlmIChhLmtleVtpXSA+IGIua2V5W2ldKSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gMDtcbiAgfTtcbiAgcmV0dXJuIGFycmF5Lm1hcChmdW5jdGlvbiAodmFsdWUsIGluZGV4KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgIGtleTogZ2V0S2V5ID8gZ2V0S2V5KHZhbHVlLCBpbmRleCkgOiBudWxsXG4gICAgfTtcbiAgfSkuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgIHZhciBvcmRlciA9IGNvbXBhcmUoYSwgYik7XG4gICAgaWYgKCFvcmRlcikge1xuICAgICAgLy8gbWFrZSBzdGFibGUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU29ydGluZ19hbGdvcml0aG0jU3RhYmlsaXR5XG4gICAgICBvcmRlciA9IGEuaW5kZXggLSBiLmluZGV4O1xuICAgIH1cbiAgICByZXR1cm4gb3JkZXIgKiByZXZlcnNlO1xuICB9KS5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICByZXR1cm4gaXRlbS52YWx1ZTtcbiAgfSk7XG59O1xuXG52YXIgZ2V0Q29sdW1uQnlJZCA9IGZ1bmN0aW9uIGdldENvbHVtbkJ5SWQodGFibGUsIGNvbHVtbklkKSB7XG4gIHZhciBjb2x1bW4gPSBudWxsO1xuICB0YWJsZS5jb2x1bW5zLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICBpZiAoaXRlbS5pZCA9PT0gY29sdW1uSWQpIHtcbiAgICAgIGNvbHVtbiA9IGl0ZW07XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGNvbHVtbjtcbn07XG5cbnZhciBnZXRDb2x1bW5CeUtleSA9IGZ1bmN0aW9uIGdldENvbHVtbkJ5S2V5KHRhYmxlLCBjb2x1bW5LZXkpIHtcbiAgdmFyIGNvbHVtbiA9IG51bGw7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdGFibGUuY29sdW1ucy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBpdGVtID0gdGFibGUuY29sdW1uc1tpXTtcbiAgICBpZiAoaXRlbS5jb2x1bW5LZXkgPT09IGNvbHVtbktleSkge1xuICAgICAgY29sdW1uID0gaXRlbTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY29sdW1uO1xufTtcblxudmFyIGdldENvbHVtbkJ5Q2VsbCA9IGZ1bmN0aW9uIGdldENvbHVtbkJ5Q2VsbCh0YWJsZSwgY2VsbCkge1xuICB2YXIgbWF0Y2hlcyA9IChjZWxsLmNsYXNzTmFtZSB8fCAnJykubWF0Y2goL2VsLXRhYmxlX1teXFxzXSsvZ20pO1xuICBpZiAobWF0Y2hlcykge1xuICAgIHJldHVybiBnZXRDb2x1bW5CeUlkKHRhYmxlLCBtYXRjaGVzWzBdKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5cbnZhciBnZXRSb3dJZGVudGl0eSA9IGZ1bmN0aW9uIGdldFJvd0lkZW50aXR5KHJvdywgcm93S2V5KSB7XG4gIGlmICghcm93KSB0aHJvdyBuZXcgRXJyb3IoJ3JvdyBpcyByZXF1aXJlZCB3aGVuIGdldCByb3cgaWRlbnRpdHknKTtcbiAgaWYgKHR5cGVvZiByb3dLZXkgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKHJvd0tleS5pbmRleE9mKCcuJykgPCAwKSB7XG4gICAgICByZXR1cm4gcm93W3Jvd0tleV07XG4gICAgfVxuICAgIHZhciBrZXkgPSByb3dLZXkuc3BsaXQoJy4nKTtcbiAgICB2YXIgY3VycmVudCA9IHJvdztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleS5sZW5ndGg7IGkrKykge1xuICAgICAgY3VycmVudCA9IGN1cnJlbnRba2V5W2ldXTtcbiAgICB9XG4gICAgcmV0dXJuIGN1cnJlbnQ7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHJvd0tleSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiByb3dLZXkuY2FsbChudWxsLCByb3cpO1xuICB9XG59O1xuXG52YXIgZ2V0S2V5c01hcCA9IGZ1bmN0aW9uIGdldEtleXNNYXAoYXJyYXksIHJvd0tleSkge1xuICB2YXIgYXJyYXlNYXAgPSB7fTtcbiAgKGFycmF5IHx8IFtdKS5mb3JFYWNoKGZ1bmN0aW9uIChyb3csIGluZGV4KSB7XG4gICAgYXJyYXlNYXBbZ2V0Um93SWRlbnRpdHkocm93LCByb3dLZXkpXSA9IHsgcm93OiByb3csIGluZGV4OiBpbmRleCB9O1xuICB9KTtcbiAgcmV0dXJuIGFycmF5TWFwO1xufTtcblxuZnVuY3Rpb24gaGFzT3duKG9iaiwga2V5KSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpO1xufVxuXG5mdW5jdGlvbiBtZXJnZU9wdGlvbnMoZGVmYXVsdHMsIGNvbmZpZykge1xuICB2YXIgb3B0aW9ucyA9IHt9O1xuICB2YXIga2V5ID0gdm9pZCAwO1xuICBmb3IgKGtleSBpbiBkZWZhdWx0cykge1xuICAgIG9wdGlvbnNba2V5XSA9IGRlZmF1bHRzW2tleV07XG4gIH1cbiAgZm9yIChrZXkgaW4gY29uZmlnKSB7XG4gICAgaWYgKGhhc093bihjb25maWcsIGtleSkpIHtcbiAgICAgIHZhciB2YWx1ZSA9IGNvbmZpZ1trZXldO1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgb3B0aW9uc1trZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBvcHRpb25zO1xufVxuXG5mdW5jdGlvbiBwYXJzZVdpZHRoKHdpZHRoKSB7XG4gIGlmICh3aWR0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgd2lkdGggPSBwYXJzZUludCh3aWR0aCwgMTApO1xuICAgIGlmIChpc05hTih3aWR0aCkpIHtcbiAgICAgIHdpZHRoID0gbnVsbDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHdpZHRoO1xufVxuXG5mdW5jdGlvbiBwYXJzZU1pbldpZHRoKG1pbldpZHRoKSB7XG4gIGlmICh0eXBlb2YgbWluV2lkdGggIT09ICd1bmRlZmluZWQnKSB7XG4gICAgbWluV2lkdGggPSBwYXJzZVdpZHRoKG1pbldpZHRoKTtcbiAgICBpZiAoaXNOYU4obWluV2lkdGgpKSB7XG4gICAgICBtaW5XaWR0aCA9IDgwO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbWluV2lkdGg7XG59O1xuXG5mdW5jdGlvbiBwYXJzZUhlaWdodChoZWlnaHQpIHtcbiAgaWYgKHR5cGVvZiBoZWlnaHQgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIGhlaWdodDtcbiAgfVxuICBpZiAodHlwZW9mIGhlaWdodCA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAoL15cXGQrKD86cHgpPyQvLnRlc3QoaGVpZ2h0KSkge1xuICAgICAgcmV0dXJuIHBhcnNlSW50KGhlaWdodCwgMTApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gaGVpZ2h0O1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3JlZHV4anMvcmVkdXgvYmxvYi9tYXN0ZXIvc3JjL2NvbXBvc2UuanNcbmZ1bmN0aW9uIGNvbXBvc2UoKSB7XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBmdW5jcyA9IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIGZ1bmNzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgaWYgKGZ1bmNzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoYXJnKSB7XG4gICAgICByZXR1cm4gYXJnO1xuICAgIH07XG4gIH1cbiAgaWYgKGZ1bmNzLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiBmdW5jc1swXTtcbiAgfVxuICByZXR1cm4gZnVuY3MucmVkdWNlKGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBhKGIuYXBwbHkodW5kZWZpbmVkLCBhcmd1bWVudHMpKTtcbiAgICB9O1xuICB9KTtcbn1cblxuZnVuY3Rpb24gdG9nZ2xlUm93U3RhdHVzKHN0YXR1c0Fyciwgcm93LCBuZXdWYWwpIHtcbiAgdmFyIGNoYW5nZWQgPSBmYWxzZTtcbiAgdmFyIGluZGV4ID0gc3RhdHVzQXJyLmluZGV4T2Yocm93KTtcbiAgdmFyIGluY2x1ZGVkID0gaW5kZXggIT09IC0xO1xuXG4gIHZhciBhZGRSb3cgPSBmdW5jdGlvbiBhZGRSb3coKSB7XG4gICAgc3RhdHVzQXJyLnB1c2gocm93KTtcbiAgICBjaGFuZ2VkID0gdHJ1ZTtcbiAgfTtcbiAgdmFyIHJlbW92ZVJvdyA9IGZ1bmN0aW9uIHJlbW92ZVJvdygpIHtcbiAgICBzdGF0dXNBcnIuc3BsaWNlKGluZGV4LCAxKTtcbiAgICBjaGFuZ2VkID0gdHJ1ZTtcbiAgfTtcblxuICBpZiAodHlwZW9mIG5ld1ZhbCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgaWYgKG5ld1ZhbCAmJiAhaW5jbHVkZWQpIHtcbiAgICAgIGFkZFJvdygpO1xuICAgIH0gZWxzZSBpZiAoIW5ld1ZhbCAmJiBpbmNsdWRlZCkge1xuICAgICAgcmVtb3ZlUm93KCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChpbmNsdWRlZCkge1xuICAgICAgcmVtb3ZlUm93KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFkZFJvdygpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY2hhbmdlZDtcbn1cblxuZnVuY3Rpb24gd2Fsa1RyZWVOb2RlKHJvb3QsIGNiKSB7XG4gIHZhciBjaGlsZHJlbktleSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogJ2NoaWxkcmVuJztcbiAgdmFyIGxhenlLZXkgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6ICdoYXNDaGlsZHJlbic7XG5cbiAgdmFyIGlzTmlsID0gZnVuY3Rpb24gaXNOaWwoYXJyYXkpIHtcbiAgICByZXR1cm4gIShBcnJheS5pc0FycmF5KGFycmF5KSAmJiBhcnJheS5sZW5ndGgpO1xuICB9O1xuXG4gIGZ1bmN0aW9uIF93YWxrZXIocGFyZW50LCBjaGlsZHJlbiwgbGV2ZWwpIHtcbiAgICBjYihwYXJlbnQsIGNoaWxkcmVuLCBsZXZlbCk7XG4gICAgY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgaWYgKGl0ZW1bbGF6eUtleV0pIHtcbiAgICAgICAgY2IoaXRlbSwgbnVsbCwgbGV2ZWwgKyAxKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdmFyIGNoaWxkcmVuID0gaXRlbVtjaGlsZHJlbktleV07XG4gICAgICBpZiAoIWlzTmlsKGNoaWxkcmVuKSkge1xuICAgICAgICBfd2Fsa2VyKGl0ZW0sIGNoaWxkcmVuLCBsZXZlbCArIDEpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcm9vdC5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgaWYgKGl0ZW1bbGF6eUtleV0pIHtcbiAgICAgIGNiKGl0ZW0sIG51bGwsIDApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgY2hpbGRyZW4gPSBpdGVtW2NoaWxkcmVuS2V5XTtcbiAgICBpZiAoIWlzTmlsKGNoaWxkcmVuKSkge1xuICAgICAgX3dhbGtlcihpdGVtLCBjaGlsZHJlbiwgMCk7XG4gICAgfVxuICB9KTtcbn1cblxudmFyIG9iamVjdEVxdWFscyA9IGZ1bmN0aW9uIG9iamVjdEVxdWFscyhvYmplY3RBLCBvYmplY3RCKSB7XG4gIC8vIOWPluWvueixoWHlkoxi55qE5bGe5oCn5ZCNXG4gIHZhciBhUHJvcHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3RBKTtcbiAgdmFyIGJQcm9wcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdEIpO1xuICAvLyDliKTmlq3lsZ7mgKflkI3nmoRsZW5ndGjmmK/lkKbkuIDoh7RcbiAgaWYgKGFQcm9wcy5sZW5ndGggIT09IGJQcm9wcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8g5b6q546v5Y+W5Ye65bGe5oCn5ZCN77yM5YaN5Yik5pat5bGe5oCn5YC85piv5ZCm5LiA6Ie0XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYVByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHByb3BOYW1lID0gYVByb3BzW2ldO1xuICAgIGlmIChvYmplY3RBW3Byb3BOYW1lXSAhPT0gb2JqZWN0Qltwcm9wTmFtZV0pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59O1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy90YWJsZS9zcmMvc3RvcmUvZXhwYW5kLmpzXG5cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgZXhwYW5kID0gKHtcbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdGVzOiB7XG4gICAgICAgIGRlZmF1bHRFeHBhbmRBbGw6IGZhbHNlLFxuICAgICAgICBleHBhbmRSb3dzOiBbXVxuICAgICAgfVxuICAgIH07XG4gIH0sXG5cblxuICBtZXRob2RzOiB7XG4gICAgdXBkYXRlRXhwYW5kUm93czogZnVuY3Rpb24gdXBkYXRlRXhwYW5kUm93cygpIHtcbiAgICAgIHZhciBfc3RhdGVzID0gdGhpcy5zdGF0ZXMsXG4gICAgICAgICAgX3N0YXRlcyRkYXRhID0gX3N0YXRlcy5kYXRhLFxuICAgICAgICAgIGRhdGEgPSBfc3RhdGVzJGRhdGEgPT09IHVuZGVmaW5lZCA/IFtdIDogX3N0YXRlcyRkYXRhLFxuICAgICAgICAgIHJvd0tleSA9IF9zdGF0ZXMucm93S2V5LFxuICAgICAgICAgIGRlZmF1bHRFeHBhbmRBbGwgPSBfc3RhdGVzLmRlZmF1bHRFeHBhbmRBbGwsXG4gICAgICAgICAgZXhwYW5kUm93cyA9IF9zdGF0ZXMuZXhwYW5kUm93cztcblxuICAgICAgaWYgKGRlZmF1bHRFeHBhbmRBbGwpIHtcbiAgICAgICAgdGhpcy5zdGF0ZXMuZXhwYW5kUm93cyA9IGRhdGEuc2xpY2UoKTtcbiAgICAgIH0gZWxzZSBpZiAocm93S2V5KSB7XG4gICAgICAgIC8vIFRPRE/vvJrov5nph4znmoTku6PnoIHlj6/ku6XkvJjljJZcbiAgICAgICAgdmFyIGV4cGFuZFJvd3NNYXAgPSBnZXRLZXlzTWFwKGV4cGFuZFJvd3MsIHJvd0tleSk7XG4gICAgICAgIHRoaXMuc3RhdGVzLmV4cGFuZFJvd3MgPSBkYXRhLnJlZHVjZShmdW5jdGlvbiAocHJldiwgcm93KSB7XG4gICAgICAgICAgdmFyIHJvd0lkID0gZ2V0Um93SWRlbnRpdHkocm93LCByb3dLZXkpO1xuICAgICAgICAgIHZhciByb3dJbmZvID0gZXhwYW5kUm93c01hcFtyb3dJZF07XG4gICAgICAgICAgaWYgKHJvd0luZm8pIHtcbiAgICAgICAgICAgIHByZXYucHVzaChyb3cpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcHJldjtcbiAgICAgICAgfSwgW10pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zdGF0ZXMuZXhwYW5kUm93cyA9IFtdO1xuICAgICAgfVxuICAgIH0sXG4gICAgdG9nZ2xlUm93RXhwYW5zaW9uOiBmdW5jdGlvbiB0b2dnbGVSb3dFeHBhbnNpb24ocm93LCBleHBhbmRlZCkge1xuICAgICAgdmFyIGNoYW5nZWQgPSB0b2dnbGVSb3dTdGF0dXModGhpcy5zdGF0ZXMuZXhwYW5kUm93cywgcm93LCBleHBhbmRlZCk7XG4gICAgICBpZiAoY2hhbmdlZCkge1xuICAgICAgICB0aGlzLnRhYmxlLiRlbWl0KCdleHBhbmQtY2hhbmdlJywgcm93LCB0aGlzLnN0YXRlcy5leHBhbmRSb3dzLnNsaWNlKCkpO1xuICAgICAgICB0aGlzLnNjaGVkdWxlTGF5b3V0KCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBzZXRFeHBhbmRSb3dLZXlzOiBmdW5jdGlvbiBzZXRFeHBhbmRSb3dLZXlzKHJvd0tleXMpIHtcbiAgICAgIHRoaXMuYXNzZXJ0Um93S2V5KCk7XG4gICAgICAvLyBUT0RP77ya6L+Z6YeM55qE5Luj56CB5Y+v5Lul5LyY5YyWXG4gICAgICB2YXIgX3N0YXRlczIgPSB0aGlzLnN0YXRlcyxcbiAgICAgICAgICBkYXRhID0gX3N0YXRlczIuZGF0YSxcbiAgICAgICAgICByb3dLZXkgPSBfc3RhdGVzMi5yb3dLZXk7XG5cbiAgICAgIHZhciBrZXlzTWFwID0gZ2V0S2V5c01hcChkYXRhLCByb3dLZXkpO1xuICAgICAgdGhpcy5zdGF0ZXMuZXhwYW5kUm93cyA9IHJvd0tleXMucmVkdWNlKGZ1bmN0aW9uIChwcmV2LCBjdXIpIHtcbiAgICAgICAgdmFyIGluZm8gPSBrZXlzTWFwW2N1cl07XG4gICAgICAgIGlmIChpbmZvKSB7XG4gICAgICAgICAgcHJldi5wdXNoKGluZm8ucm93KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJldjtcbiAgICAgIH0sIFtdKTtcbiAgICB9LFxuICAgIGlzUm93RXhwYW5kZWQ6IGZ1bmN0aW9uIGlzUm93RXhwYW5kZWQocm93KSB7XG4gICAgICB2YXIgX3N0YXRlczMgPSB0aGlzLnN0YXRlcyxcbiAgICAgICAgICBfc3RhdGVzMyRleHBhbmRSb3dzID0gX3N0YXRlczMuZXhwYW5kUm93cyxcbiAgICAgICAgICBleHBhbmRSb3dzID0gX3N0YXRlczMkZXhwYW5kUm93cyA9PT0gdW5kZWZpbmVkID8gW10gOiBfc3RhdGVzMyRleHBhbmRSb3dzLFxuICAgICAgICAgIHJvd0tleSA9IF9zdGF0ZXMzLnJvd0tleTtcblxuICAgICAgaWYgKHJvd0tleSkge1xuICAgICAgICB2YXIgZXhwYW5kTWFwID0gZ2V0S2V5c01hcChleHBhbmRSb3dzLCByb3dLZXkpO1xuICAgICAgICByZXR1cm4gISFleHBhbmRNYXBbZ2V0Um93SWRlbnRpdHkocm93LCByb3dLZXkpXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBleHBhbmRSb3dzLmluZGV4T2Yocm93KSAhPT0gLTE7XG4gICAgfVxuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdGFibGUvc3JjL3N0b3JlL2N1cnJlbnQuanNcblxuXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHN0b3JlX2N1cnJlbnQgPSAoe1xuICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0ZXM6IHtcbiAgICAgICAgLy8g5LiN5Y+v5ZON5bqU55qE77yM6K6+572uIGN1cnJlbnRSb3dLZXkg5pe277yMZGF0YSDkuI3kuIDlrprlrZjlnKjvvIzkuZ/orrjml6Dms5Xnrpflh7rmraPnoa7nmoQgY3VycmVudFJvd1xuICAgICAgICAvLyDmioror6XlgLznvJPlrZjkuIDkuIvvvIzlvZPnlKjmiLfngrnlh7vkv67mlLkgY3VycmVudFJvdyDml7bvvIzmioror6XlgLzph43nva7kuLogbnVsbFxuICAgICAgICBfY3VycmVudFJvd0tleTogbnVsbCxcbiAgICAgICAgY3VycmVudFJvdzogbnVsbFxuICAgICAgfVxuICAgIH07XG4gIH0sXG5cblxuICBtZXRob2RzOiB7XG4gICAgc2V0Q3VycmVudFJvd0tleTogZnVuY3Rpb24gc2V0Q3VycmVudFJvd0tleShrZXkpIHtcbiAgICAgIHRoaXMuYXNzZXJ0Um93S2V5KCk7XG4gICAgICB0aGlzLnN0YXRlcy5fY3VycmVudFJvd0tleSA9IGtleTtcbiAgICAgIHRoaXMuc2V0Q3VycmVudFJvd0J5S2V5KGtleSk7XG4gICAgfSxcbiAgICByZXN0b3JlQ3VycmVudFJvd0tleTogZnVuY3Rpb24gcmVzdG9yZUN1cnJlbnRSb3dLZXkoKSB7XG4gICAgICB0aGlzLnN0YXRlcy5fY3VycmVudFJvd0tleSA9IG51bGw7XG4gICAgfSxcbiAgICBzZXRDdXJyZW50Um93QnlLZXk6IGZ1bmN0aW9uIHNldEN1cnJlbnRSb3dCeUtleShrZXkpIHtcbiAgICAgIHZhciBzdGF0ZXMgPSB0aGlzLnN0YXRlcztcbiAgICAgIHZhciBfc3RhdGVzJGRhdGEgPSBzdGF0ZXMuZGF0YSxcbiAgICAgICAgICBkYXRhID0gX3N0YXRlcyRkYXRhID09PSB1bmRlZmluZWQgPyBbXSA6IF9zdGF0ZXMkZGF0YSxcbiAgICAgICAgICByb3dLZXkgPSBzdGF0ZXMucm93S2V5O1xuXG4gICAgICB2YXIgY3VycmVudFJvdyA9IG51bGw7XG4gICAgICBpZiAocm93S2V5KSB7XG4gICAgICAgIGN1cnJlbnRSb3cgPSBPYmplY3QodXRpbF9bXCJhcnJheUZpbmRcIl0pKGRhdGEsIGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgcmV0dXJuIGdldFJvd0lkZW50aXR5KGl0ZW0sIHJvd0tleSkgPT09IGtleTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBzdGF0ZXMuY3VycmVudFJvdyA9IGN1cnJlbnRSb3c7XG4gICAgfSxcbiAgICB1cGRhdGVDdXJyZW50Um93OiBmdW5jdGlvbiB1cGRhdGVDdXJyZW50Um93KGN1cnJlbnRSb3cpIHtcbiAgICAgIHZhciBzdGF0ZXMgPSB0aGlzLnN0YXRlcyxcbiAgICAgICAgICB0YWJsZSA9IHRoaXMudGFibGU7XG5cbiAgICAgIHZhciBvbGRDdXJyZW50Um93ID0gc3RhdGVzLmN1cnJlbnRSb3c7XG4gICAgICBpZiAoY3VycmVudFJvdyAmJiBjdXJyZW50Um93ICE9PSBvbGRDdXJyZW50Um93KSB7XG4gICAgICAgIHN0YXRlcy5jdXJyZW50Um93ID0gY3VycmVudFJvdztcbiAgICAgICAgdGFibGUuJGVtaXQoJ2N1cnJlbnQtY2hhbmdlJywgY3VycmVudFJvdywgb2xkQ3VycmVudFJvdyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghY3VycmVudFJvdyAmJiBvbGRDdXJyZW50Um93KSB7XG4gICAgICAgIHN0YXRlcy5jdXJyZW50Um93ID0gbnVsbDtcbiAgICAgICAgdGFibGUuJGVtaXQoJ2N1cnJlbnQtY2hhbmdlJywgbnVsbCwgb2xkQ3VycmVudFJvdyk7XG4gICAgICB9XG4gICAgfSxcbiAgICB1cGRhdGVDdXJyZW50Um93RGF0YTogZnVuY3Rpb24gdXBkYXRlQ3VycmVudFJvd0RhdGEoKSB7XG4gICAgICB2YXIgc3RhdGVzID0gdGhpcy5zdGF0ZXMsXG4gICAgICAgICAgdGFibGUgPSB0aGlzLnRhYmxlO1xuICAgICAgdmFyIHJvd0tleSA9IHN0YXRlcy5yb3dLZXksXG4gICAgICAgICAgX2N1cnJlbnRSb3dLZXkgPSBzdGF0ZXMuX2N1cnJlbnRSb3dLZXk7XG4gICAgICAvLyBkYXRhIOS4uiBudWxsIOaXtu+8jOino+aehOaXtueahOm7mOiupOWAvOS8muiiq+W/veeVpVxuXG4gICAgICB2YXIgZGF0YSA9IHN0YXRlcy5kYXRhIHx8IFtdO1xuICAgICAgdmFyIG9sZEN1cnJlbnRSb3cgPSBzdGF0ZXMuY3VycmVudFJvdztcblxuICAgICAgLy8g5b2TIGN1cnJlbnRSb3cg5LiN5ZyoIGRhdGEg5Lit5pe25bCd6K+V5pu05paw5pWw5o2uXG4gICAgICBpZiAoZGF0YS5pbmRleE9mKG9sZEN1cnJlbnRSb3cpID09PSAtMSAmJiBvbGRDdXJyZW50Um93KSB7XG4gICAgICAgIGlmIChyb3dLZXkpIHtcbiAgICAgICAgICB2YXIgY3VycmVudFJvd0tleSA9IGdldFJvd0lkZW50aXR5KG9sZEN1cnJlbnRSb3csIHJvd0tleSk7XG4gICAgICAgICAgdGhpcy5zZXRDdXJyZW50Um93QnlLZXkoY3VycmVudFJvd0tleSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RhdGVzLmN1cnJlbnRSb3cgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0ZXMuY3VycmVudFJvdyA9PT0gbnVsbCkge1xuICAgICAgICAgIHRhYmxlLiRlbWl0KCdjdXJyZW50LWNoYW5nZScsIG51bGwsIG9sZEN1cnJlbnRSb3cpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKF9jdXJyZW50Um93S2V5KSB7XG4gICAgICAgIC8vIOaKiuWIneWni+aXtuS4i+iuvue9rueahCByb3dLZXkg6L2s5YyW5oiQIHJvd0RhdGFcbiAgICAgICAgdGhpcy5zZXRDdXJyZW50Um93QnlLZXkoX2N1cnJlbnRSb3dLZXkpO1xuICAgICAgICB0aGlzLnJlc3RvcmVDdXJyZW50Um93S2V5KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdGFibGUvc3JjL3N0b3JlL3RyZWUuanNcbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XG5cblxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciB0cmVlID0gKHtcbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdGVzOiB7XG4gICAgICAgIC8vIGRlZmF1bHRFeHBhbmRBbGwg5a2Y5Zyo5LqOIGV4cGFuZC5qcyDkuK3vvIzov5nph4zkuI3ph43lpI3mt7vliqBcbiAgICAgICAgLy8g5Zyo5bGV5byA6KGM5Lit77yMZXhwYW5kUm93S2V5cyDkvJrooqvovazljJbmiJAgZXhwYW5kUm93c++8jGV4cGFuZFJvd0tleXMg6L+Z5Liq5bGe5oCn5Y+q5piv6K6w5b2V5LqGIFRyZWVUYWJsZSDooYznmoTlsZXlvIBcbiAgICAgICAgLy8gVE9ETzog5ouG5YiG5Li654us56uL55qEIFRyZWVUYWJsZe+8jOe7n+S4gOeUqOazlVxuICAgICAgICBleHBhbmRSb3dLZXlzOiBbXSxcbiAgICAgICAgdHJlZURhdGE6IHt9LFxuICAgICAgICBpbmRlbnQ6IDE2LFxuICAgICAgICBsYXp5OiBmYWxzZSxcbiAgICAgICAgbGF6eVRyZWVOb2RlTWFwOiB7fSxcbiAgICAgICAgbGF6eUNvbHVtbklkZW50aWZpZXI6ICdoYXNDaGlsZHJlbicsXG4gICAgICAgIGNoaWxkcmVuQ29sdW1uTmFtZTogJ2NoaWxkcmVuJ1xuICAgICAgfVxuICAgIH07XG4gIH0sXG5cblxuICBjb21wdXRlZDoge1xuICAgIC8vIOW1jOWFpeWei+eahOaVsOaNru+8jHdhdGNoIOaXoOazleaYr+ajgOa1i+WIsOWPmOWMliBodHRwczovL2dpdGh1Yi5jb20vRWxlbWVGRS9lbGVtZW50L2lzc3Vlcy8xNDk5OFxuICAgIC8vIFRPRE86IOS9v+eUqCBjb21wdXRlZCDop6PlhrPor6Xpl67popjvvIzmmK/lkKbkvJrpgKDmiJDmgKfog73pl67popjvvJ9cbiAgICAvLyBAcmV0dXJuIHsgaWQ6IHsgbGV2ZWwsIGNoaWxkcmVuIH0gfVxuICAgIG5vcm1hbGl6ZWREYXRhOiBmdW5jdGlvbiBub3JtYWxpemVkRGF0YSgpIHtcbiAgICAgIGlmICghdGhpcy5zdGF0ZXMucm93S2V5KSByZXR1cm4ge307XG4gICAgICB2YXIgZGF0YSA9IHRoaXMuc3RhdGVzLmRhdGEgfHwgW107XG4gICAgICByZXR1cm4gdGhpcy5ub3JtYWxpemUoZGF0YSk7XG4gICAgfSxcblxuICAgIC8vIEByZXR1cm4geyBpZDogeyBjaGlsZHJlbiB9IH1cbiAgICAvLyDpkojlr7nmh5LliqDovb3nmoTmg4XlvaLvvIzkuI3lpITnkIbltYzlpZfmlbDmja5cbiAgICBub3JtYWxpemVkTGF6eU5vZGU6IGZ1bmN0aW9uIG5vcm1hbGl6ZWRMYXp5Tm9kZSgpIHtcbiAgICAgIHZhciBfc3RhdGVzID0gdGhpcy5zdGF0ZXMsXG4gICAgICAgICAgcm93S2V5ID0gX3N0YXRlcy5yb3dLZXksXG4gICAgICAgICAgbGF6eVRyZWVOb2RlTWFwID0gX3N0YXRlcy5sYXp5VHJlZU5vZGVNYXAsXG4gICAgICAgICAgbGF6eUNvbHVtbklkZW50aWZpZXIgPSBfc3RhdGVzLmxhenlDb2x1bW5JZGVudGlmaWVyO1xuXG4gICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGxhenlUcmVlTm9kZU1hcCk7XG4gICAgICB2YXIgcmVzID0ge307XG4gICAgICBpZiAoIWtleXMubGVuZ3RoKSByZXR1cm4gcmVzO1xuICAgICAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgaWYgKGxhenlUcmVlTm9kZU1hcFtrZXldLmxlbmd0aCkge1xuICAgICAgICAgIHZhciBpdGVtID0geyBjaGlsZHJlbjogW10gfTtcbiAgICAgICAgICBsYXp5VHJlZU5vZGVNYXBba2V5XS5mb3JFYWNoKGZ1bmN0aW9uIChyb3cpIHtcbiAgICAgICAgICAgIHZhciBjdXJyZW50Um93S2V5ID0gZ2V0Um93SWRlbnRpdHkocm93LCByb3dLZXkpO1xuICAgICAgICAgICAgaXRlbS5jaGlsZHJlbi5wdXNoKGN1cnJlbnRSb3dLZXkpO1xuICAgICAgICAgICAgaWYgKHJvd1tsYXp5Q29sdW1uSWRlbnRpZmllcl0gJiYgIXJlc1tjdXJyZW50Um93S2V5XSkge1xuICAgICAgICAgICAgICByZXNbY3VycmVudFJvd0tleV0gPSB7IGNoaWxkcmVuOiBbXSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJlc1trZXldID0gaXRlbTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIG5vcm1hbGl6ZWREYXRhOiAndXBkYXRlVHJlZURhdGEnLFxuICAgIG5vcm1hbGl6ZWRMYXp5Tm9kZTogJ3VwZGF0ZVRyZWVEYXRhJ1xuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBub3JtYWxpemU6IGZ1bmN0aW9uIG5vcm1hbGl6ZShkYXRhKSB7XG4gICAgICB2YXIgX3N0YXRlczIgPSB0aGlzLnN0YXRlcyxcbiAgICAgICAgICBjaGlsZHJlbkNvbHVtbk5hbWUgPSBfc3RhdGVzMi5jaGlsZHJlbkNvbHVtbk5hbWUsXG4gICAgICAgICAgbGF6eUNvbHVtbklkZW50aWZpZXIgPSBfc3RhdGVzMi5sYXp5Q29sdW1uSWRlbnRpZmllcixcbiAgICAgICAgICByb3dLZXkgPSBfc3RhdGVzMi5yb3dLZXksXG4gICAgICAgICAgbGF6eSA9IF9zdGF0ZXMyLmxhenk7XG5cbiAgICAgIHZhciByZXMgPSB7fTtcbiAgICAgIHdhbGtUcmVlTm9kZShkYXRhLCBmdW5jdGlvbiAocGFyZW50LCBjaGlsZHJlbiwgbGV2ZWwpIHtcbiAgICAgICAgdmFyIHBhcmVudElkID0gZ2V0Um93SWRlbnRpdHkocGFyZW50LCByb3dLZXkpO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICAgICAgICByZXNbcGFyZW50SWRdID0ge1xuICAgICAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuLm1hcChmdW5jdGlvbiAocm93KSB7XG4gICAgICAgICAgICAgIHJldHVybiBnZXRSb3dJZGVudGl0eShyb3csIHJvd0tleSk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGxldmVsOiBsZXZlbFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAobGF6eSkge1xuICAgICAgICAgIC8vIOW9kyBjaGlsZHJlbiDkuI3lrZjlnKjkuJQgbGF6eSDkuLogdHJ1Ze+8jOivpeiKgueCueWNs+S4uuaHkuWKoOi9veeahOiKgueCuVxuICAgICAgICAgIHJlc1twYXJlbnRJZF0gPSB7XG4gICAgICAgICAgICBjaGlsZHJlbjogW10sXG4gICAgICAgICAgICBsYXp5OiB0cnVlLFxuICAgICAgICAgICAgbGV2ZWw6IGxldmVsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSwgY2hpbGRyZW5Db2x1bW5OYW1lLCBsYXp5Q29sdW1uSWRlbnRpZmllcik7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0sXG4gICAgdXBkYXRlVHJlZURhdGE6IGZ1bmN0aW9uIHVwZGF0ZVRyZWVEYXRhKCkge1xuICAgICAgdmFyIG5lc3RlZCA9IHRoaXMubm9ybWFsaXplZERhdGE7XG4gICAgICB2YXIgbm9ybWFsaXplZExhenlOb2RlID0gdGhpcy5ub3JtYWxpemVkTGF6eU5vZGU7XG4gICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG5lc3RlZCk7XG4gICAgICB2YXIgbmV3VHJlZURhdGEgPSB7fTtcbiAgICAgIGlmIChrZXlzLmxlbmd0aCkge1xuICAgICAgICB2YXIgX3N0YXRlczMgPSB0aGlzLnN0YXRlcyxcbiAgICAgICAgICAgIG9sZFRyZWVEYXRhID0gX3N0YXRlczMudHJlZURhdGEsXG4gICAgICAgICAgICBkZWZhdWx0RXhwYW5kQWxsID0gX3N0YXRlczMuZGVmYXVsdEV4cGFuZEFsbCxcbiAgICAgICAgICAgIGV4cGFuZFJvd0tleXMgPSBfc3RhdGVzMy5leHBhbmRSb3dLZXlzLFxuICAgICAgICAgICAgbGF6eSA9IF9zdGF0ZXMzLmxhenk7XG5cbiAgICAgICAgdmFyIHJvb3RMYXp5Um93S2V5cyA9IFtdO1xuICAgICAgICB2YXIgZ2V0RXhwYW5kZWQgPSBmdW5jdGlvbiBnZXRFeHBhbmRlZChvbGRWYWx1ZSwga2V5KSB7XG4gICAgICAgICAgdmFyIGluY2x1ZGVkID0gZGVmYXVsdEV4cGFuZEFsbCB8fCBleHBhbmRSb3dLZXlzICYmIGV4cGFuZFJvd0tleXMuaW5kZXhPZihrZXkpICE9PSAtMTtcbiAgICAgICAgICByZXR1cm4gISEob2xkVmFsdWUgJiYgb2xkVmFsdWUuZXhwYW5kZWQgfHwgaW5jbHVkZWQpO1xuICAgICAgICB9O1xuICAgICAgICAvLyDlkIjlubYgZXhwYW5kZWQg5LiOIGRpc3BsYXnvvIznoa7kv53mlbDmja7liLfmlrDlkI7vvIznirbmgIHkuI3lj5hcbiAgICAgICAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICB2YXIgb2xkVmFsdWUgPSBvbGRUcmVlRGF0YVtrZXldO1xuICAgICAgICAgIHZhciBuZXdWYWx1ZSA9IF9leHRlbmRzKHt9LCBuZXN0ZWRba2V5XSk7XG4gICAgICAgICAgbmV3VmFsdWUuZXhwYW5kZWQgPSBnZXRFeHBhbmRlZChvbGRWYWx1ZSwga2V5KTtcbiAgICAgICAgICBpZiAobmV3VmFsdWUubGF6eSkge1xuICAgICAgICAgICAgdmFyIF9yZWYgPSBvbGRWYWx1ZSB8fCB7fSxcbiAgICAgICAgICAgICAgICBfcmVmJGxvYWRlZCA9IF9yZWYubG9hZGVkLFxuICAgICAgICAgICAgICAgIGxvYWRlZCA9IF9yZWYkbG9hZGVkID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IF9yZWYkbG9hZGVkLFxuICAgICAgICAgICAgICAgIF9yZWYkbG9hZGluZyA9IF9yZWYubG9hZGluZyxcbiAgICAgICAgICAgICAgICBsb2FkaW5nID0gX3JlZiRsb2FkaW5nID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IF9yZWYkbG9hZGluZztcblxuICAgICAgICAgICAgbmV3VmFsdWUubG9hZGVkID0gISFsb2FkZWQ7XG4gICAgICAgICAgICBuZXdWYWx1ZS5sb2FkaW5nID0gISFsb2FkaW5nO1xuICAgICAgICAgICAgcm9vdExhenlSb3dLZXlzLnB1c2goa2V5KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbmV3VHJlZURhdGFba2V5XSA9IG5ld1ZhbHVlO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8g5qC55o2u5oeS5Yqg6L295pWw5o2u5pu05pawIHRyZWVEYXRhXG4gICAgICAgIHZhciBsYXp5S2V5cyA9IE9iamVjdC5rZXlzKG5vcm1hbGl6ZWRMYXp5Tm9kZSk7XG4gICAgICAgIGlmIChsYXp5ICYmIGxhenlLZXlzLmxlbmd0aCAmJiByb290TGF6eVJvd0tleXMubGVuZ3RoKSB7XG4gICAgICAgICAgbGF6eUtleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICB2YXIgb2xkVmFsdWUgPSBvbGRUcmVlRGF0YVtrZXldO1xuICAgICAgICAgICAgdmFyIGxhenlOb2RlQ2hpbGRyZW4gPSBub3JtYWxpemVkTGF6eU5vZGVba2V5XS5jaGlsZHJlbjtcbiAgICAgICAgICAgIGlmIChyb290TGF6eVJvd0tleXMuaW5kZXhPZihrZXkpICE9PSAtMSkge1xuICAgICAgICAgICAgICAvLyDmh5LliqDovb3nmoQgcm9vdCDoioLngrnvvIzmm7TmlrDkuIDkuIvljp/mnInnmoTmlbDmja7vvIzljp/mnaXnmoQgY2hpbGRyZW4g5LiA5a6a5piv56m65pWw57uEXG4gICAgICAgICAgICAgIGlmIChuZXdUcmVlRGF0YVtrZXldLmNoaWxkcmVuLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignW0VsVGFibGVdY2hpbGRyZW4gbXVzdCBiZSBhbiBlbXB0eSBhcnJheS4nKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBuZXdUcmVlRGF0YVtrZXldLmNoaWxkcmVuID0gbGF6eU5vZGVDaGlsZHJlbjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHZhciBfcmVmMiA9IG9sZFZhbHVlIHx8IHt9LFxuICAgICAgICAgICAgICAgICAgX3JlZjIkbG9hZGVkID0gX3JlZjIubG9hZGVkLFxuICAgICAgICAgICAgICAgICAgbG9hZGVkID0gX3JlZjIkbG9hZGVkID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IF9yZWYyJGxvYWRlZCxcbiAgICAgICAgICAgICAgICAgIF9yZWYyJGxvYWRpbmcgPSBfcmVmMi5sb2FkaW5nLFxuICAgICAgICAgICAgICAgICAgbG9hZGluZyA9IF9yZWYyJGxvYWRpbmcgPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogX3JlZjIkbG9hZGluZztcblxuICAgICAgICAgICAgICBuZXdUcmVlRGF0YVtrZXldID0ge1xuICAgICAgICAgICAgICAgIGxhenk6IHRydWUsXG4gICAgICAgICAgICAgICAgbG9hZGVkOiAhIWxvYWRlZCxcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiAhIWxvYWRpbmcsXG4gICAgICAgICAgICAgICAgZXhwYW5kZWQ6IGdldEV4cGFuZGVkKG9sZFZhbHVlLCBrZXkpLFxuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBsYXp5Tm9kZUNoaWxkcmVuLFxuICAgICAgICAgICAgICAgIGxldmVsOiAnJ1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnN0YXRlcy50cmVlRGF0YSA9IG5ld1RyZWVEYXRhO1xuICAgICAgdGhpcy51cGRhdGVUYWJsZVNjcm9sbFkoKTtcbiAgICB9LFxuICAgIHVwZGF0ZVRyZWVFeHBhbmRLZXlzOiBmdW5jdGlvbiB1cGRhdGVUcmVlRXhwYW5kS2V5cyh2YWx1ZSkge1xuICAgICAgdGhpcy5zdGF0ZXMuZXhwYW5kUm93S2V5cyA9IHZhbHVlO1xuICAgICAgdGhpcy51cGRhdGVUcmVlRGF0YSgpO1xuICAgIH0sXG4gICAgdG9nZ2xlVHJlZUV4cGFuc2lvbjogZnVuY3Rpb24gdG9nZ2xlVHJlZUV4cGFuc2lvbihyb3csIGV4cGFuZGVkKSB7XG4gICAgICB0aGlzLmFzc2VydFJvd0tleSgpO1xuXG4gICAgICB2YXIgX3N0YXRlczQgPSB0aGlzLnN0YXRlcyxcbiAgICAgICAgICByb3dLZXkgPSBfc3RhdGVzNC5yb3dLZXksXG4gICAgICAgICAgdHJlZURhdGEgPSBfc3RhdGVzNC50cmVlRGF0YTtcblxuICAgICAgdmFyIGlkID0gZ2V0Um93SWRlbnRpdHkocm93LCByb3dLZXkpO1xuICAgICAgdmFyIGRhdGEgPSBpZCAmJiB0cmVlRGF0YVtpZF07XG4gICAgICBpZiAoaWQgJiYgZGF0YSAmJiAnZXhwYW5kZWQnIGluIGRhdGEpIHtcbiAgICAgICAgdmFyIG9sZEV4cGFuZGVkID0gZGF0YS5leHBhbmRlZDtcbiAgICAgICAgZXhwYW5kZWQgPSB0eXBlb2YgZXhwYW5kZWQgPT09ICd1bmRlZmluZWQnID8gIWRhdGEuZXhwYW5kZWQgOiBleHBhbmRlZDtcbiAgICAgICAgdHJlZURhdGFbaWRdLmV4cGFuZGVkID0gZXhwYW5kZWQ7XG4gICAgICAgIGlmIChvbGRFeHBhbmRlZCAhPT0gZXhwYW5kZWQpIHtcbiAgICAgICAgICB0aGlzLnRhYmxlLiRlbWl0KCdleHBhbmQtY2hhbmdlJywgcm93LCBleHBhbmRlZCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVUYWJsZVNjcm9sbFkoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGxvYWRPclRvZ2dsZTogZnVuY3Rpb24gbG9hZE9yVG9nZ2xlKHJvdykge1xuICAgICAgdGhpcy5hc3NlcnRSb3dLZXkoKTtcbiAgICAgIHZhciBfc3RhdGVzNSA9IHRoaXMuc3RhdGVzLFxuICAgICAgICAgIGxhenkgPSBfc3RhdGVzNS5sYXp5LFxuICAgICAgICAgIHRyZWVEYXRhID0gX3N0YXRlczUudHJlZURhdGEsXG4gICAgICAgICAgcm93S2V5ID0gX3N0YXRlczUucm93S2V5O1xuXG4gICAgICB2YXIgaWQgPSBnZXRSb3dJZGVudGl0eShyb3csIHJvd0tleSk7XG4gICAgICB2YXIgZGF0YSA9IHRyZWVEYXRhW2lkXTtcbiAgICAgIGlmIChsYXp5ICYmIGRhdGEgJiYgJ2xvYWRlZCcgaW4gZGF0YSAmJiAhZGF0YS5sb2FkZWQpIHtcbiAgICAgICAgdGhpcy5sb2FkRGF0YShyb3csIGlkLCBkYXRhKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudG9nZ2xlVHJlZUV4cGFuc2lvbihyb3cpO1xuICAgICAgfVxuICAgIH0sXG4gICAgbG9hZERhdGE6IGZ1bmN0aW9uIGxvYWREYXRhKHJvdywga2V5LCB0cmVlTm9kZSkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgdmFyIGxvYWQgPSB0aGlzLnRhYmxlLmxvYWQ7XG4gICAgICB2YXIgcmF3VHJlZURhdGEgPSB0aGlzLnN0YXRlcy50cmVlRGF0YTtcblxuICAgICAgaWYgKGxvYWQgJiYgIXJhd1RyZWVEYXRhW2tleV0ubG9hZGVkKSB7XG4gICAgICAgIHJhd1RyZWVEYXRhW2tleV0ubG9hZGluZyA9IHRydWU7XG4gICAgICAgIGxvYWQocm93LCB0cmVlTm9kZSwgZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignW0VsVGFibGVdIGRhdGEgbXVzdCBiZSBhbiBhcnJheScpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgX3N0YXRlczYgPSBfdGhpcy5zdGF0ZXMsXG4gICAgICAgICAgICAgIGxhenlUcmVlTm9kZU1hcCA9IF9zdGF0ZXM2LmxhenlUcmVlTm9kZU1hcCxcbiAgICAgICAgICAgICAgdHJlZURhdGEgPSBfc3RhdGVzNi50cmVlRGF0YTtcblxuICAgICAgICAgIHRyZWVEYXRhW2tleV0ubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgIHRyZWVEYXRhW2tleV0ubG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICB0cmVlRGF0YVtrZXldLmV4cGFuZGVkID0gdHJ1ZTtcbiAgICAgICAgICBpZiAoZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICAgIF90aGlzLiRzZXQobGF6eVRyZWVOb2RlTWFwLCBrZXksIGRhdGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBfdGhpcy50YWJsZS4kZW1pdCgnZXhwYW5kLWNoYW5nZScsIHJvdywgdHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3RhYmxlL3NyYy9zdG9yZS93YXRjaGVyLmpzXG5cblxuXG5cblxuXG5cbnZhciB3YXRjaGVyX3NvcnREYXRhID0gZnVuY3Rpb24gc29ydERhdGEoZGF0YSwgc3RhdGVzKSB7XG4gIHZhciBzb3J0aW5nQ29sdW1uID0gc3RhdGVzLnNvcnRpbmdDb2x1bW47XG4gIGlmICghc29ydGluZ0NvbHVtbiB8fCB0eXBlb2Ygc29ydGluZ0NvbHVtbi5zb3J0YWJsZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuICByZXR1cm4gdXRpbF9vcmRlckJ5KGRhdGEsIHN0YXRlcy5zb3J0UHJvcCwgc3RhdGVzLnNvcnRPcmRlciwgc29ydGluZ0NvbHVtbi5zb3J0TWV0aG9kLCBzb3J0aW5nQ29sdW1uLnNvcnRCeSk7XG59O1xuXG52YXIgZG9GbGF0dGVuQ29sdW1ucyA9IGZ1bmN0aW9uIGRvRmxhdHRlbkNvbHVtbnMoY29sdW1ucykge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGNvbHVtbnMuZm9yRWFjaChmdW5jdGlvbiAoY29sdW1uKSB7XG4gICAgaWYgKGNvbHVtbi5jaGlsZHJlbikge1xuICAgICAgcmVzdWx0LnB1c2guYXBwbHkocmVzdWx0LCBkb0ZsYXR0ZW5Db2x1bW5zKGNvbHVtbi5jaGlsZHJlbikpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucHVzaChjb2x1bW4pO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciB3YXRjaGVyID0gKGV4dGVybmFsX3Z1ZV9kZWZhdWx0LmEuZXh0ZW5kKHtcbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdGVzOiB7XG4gICAgICAgIC8vIDMuMCDniYjmnKzlkI7opoHmsYLlv4Xpobvorr7nva7or6XlsZ7mgKdcbiAgICAgICAgcm93S2V5OiBudWxsLFxuXG4gICAgICAgIC8vIOa4suafk+eahOaVsOaNruadpea6kO+8jOaYr+WvuSB0YWJsZSDkuK3nmoQgZGF0YSDov4fmu6TmjpLluo/lkI7nmoTnu5PmnpxcbiAgICAgICAgZGF0YTogW10sXG5cbiAgICAgICAgLy8g5piv5ZCm5YyF5ZCr5Zu65a6a5YiXXG4gICAgICAgIGlzQ29tcGxleDogZmFsc2UsXG5cbiAgICAgICAgLy8g5YiXXG4gICAgICAgIF9jb2x1bW5zOiBbXSwgLy8g5LiN5Y+v5ZON5bqU55qEXG4gICAgICAgIG9yaWdpbkNvbHVtbnM6IFtdLFxuICAgICAgICBjb2x1bW5zOiBbXSxcbiAgICAgICAgZml4ZWRDb2x1bW5zOiBbXSxcbiAgICAgICAgcmlnaHRGaXhlZENvbHVtbnM6IFtdLFxuICAgICAgICBsZWFmQ29sdW1uczogW10sXG4gICAgICAgIGZpeGVkTGVhZkNvbHVtbnM6IFtdLFxuICAgICAgICByaWdodEZpeGVkTGVhZkNvbHVtbnM6IFtdLFxuICAgICAgICBsZWFmQ29sdW1uc0xlbmd0aDogMCxcbiAgICAgICAgZml4ZWRMZWFmQ29sdW1uc0xlbmd0aDogMCxcbiAgICAgICAgcmlnaHRGaXhlZExlYWZDb2x1bW5zTGVuZ3RoOiAwLFxuXG4gICAgICAgIC8vIOmAieaLqVxuICAgICAgICBpc0FsbFNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgc2VsZWN0aW9uOiBbXSxcbiAgICAgICAgcmVzZXJ2ZVNlbGVjdGlvbjogZmFsc2UsXG4gICAgICAgIHNlbGVjdE9uSW5kZXRlcm1pbmF0ZTogZmFsc2UsXG4gICAgICAgIHNlbGVjdGFibGU6IG51bGwsXG5cbiAgICAgICAgLy8g6L+H5rukXG4gICAgICAgIGZpbHRlcnM6IHt9LCAvLyDkuI3lj6/lk43lupTnmoRcbiAgICAgICAgZmlsdGVyZWREYXRhOiBudWxsLFxuXG4gICAgICAgIC8vIOaOkuW6j1xuICAgICAgICBzb3J0aW5nQ29sdW1uOiBudWxsLFxuICAgICAgICBzb3J0UHJvcDogbnVsbCxcbiAgICAgICAgc29ydE9yZGVyOiBudWxsLFxuXG4gICAgICAgIGhvdmVyUm93OiBudWxsXG4gICAgICB9XG4gICAgfTtcbiAgfSxcblxuXG4gIG1peGluczogW2V4cGFuZCwgc3RvcmVfY3VycmVudCwgdHJlZV0sXG5cbiAgbWV0aG9kczoge1xuICAgIC8vIOajgOafpSByb3dLZXkg5piv5ZCm5a2Y5ZyoXG4gICAgYXNzZXJ0Um93S2V5OiBmdW5jdGlvbiBhc3NlcnRSb3dLZXkoKSB7XG4gICAgICB2YXIgcm93S2V5ID0gdGhpcy5zdGF0ZXMucm93S2V5O1xuICAgICAgaWYgKCFyb3dLZXkpIHRocm93IG5ldyBFcnJvcignW0VsVGFibGVdIHByb3Agcm93LWtleSBpcyByZXF1aXJlZCcpO1xuICAgIH0sXG5cblxuICAgIC8vIOabtOaWsOWIl1xuICAgIHVwZGF0ZUNvbHVtbnM6IGZ1bmN0aW9uIHVwZGF0ZUNvbHVtbnMoKSB7XG4gICAgICB2YXIgc3RhdGVzID0gdGhpcy5zdGF0ZXM7XG4gICAgICB2YXIgX2NvbHVtbnMgPSBzdGF0ZXMuX2NvbHVtbnMgfHwgW107XG4gICAgICBzdGF0ZXMuZml4ZWRDb2x1bW5zID0gX2NvbHVtbnMuZmlsdGVyKGZ1bmN0aW9uIChjb2x1bW4pIHtcbiAgICAgICAgcmV0dXJuIGNvbHVtbi5maXhlZCA9PT0gdHJ1ZSB8fCBjb2x1bW4uZml4ZWQgPT09ICdsZWZ0JztcbiAgICAgIH0pO1xuICAgICAgc3RhdGVzLnJpZ2h0Rml4ZWRDb2x1bW5zID0gX2NvbHVtbnMuZmlsdGVyKGZ1bmN0aW9uIChjb2x1bW4pIHtcbiAgICAgICAgcmV0dXJuIGNvbHVtbi5maXhlZCA9PT0gJ3JpZ2h0JztcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoc3RhdGVzLmZpeGVkQ29sdW1ucy5sZW5ndGggPiAwICYmIF9jb2x1bW5zWzBdICYmIF9jb2x1bW5zWzBdLnR5cGUgPT09ICdzZWxlY3Rpb24nICYmICFfY29sdW1uc1swXS5maXhlZCkge1xuICAgICAgICBfY29sdW1uc1swXS5maXhlZCA9IHRydWU7XG4gICAgICAgIHN0YXRlcy5maXhlZENvbHVtbnMudW5zaGlmdChfY29sdW1uc1swXSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBub3RGaXhlZENvbHVtbnMgPSBfY29sdW1ucy5maWx0ZXIoZnVuY3Rpb24gKGNvbHVtbikge1xuICAgICAgICByZXR1cm4gIWNvbHVtbi5maXhlZDtcbiAgICAgIH0pO1xuICAgICAgc3RhdGVzLm9yaWdpbkNvbHVtbnMgPSBbXS5jb25jYXQoc3RhdGVzLmZpeGVkQ29sdW1ucykuY29uY2F0KG5vdEZpeGVkQ29sdW1ucykuY29uY2F0KHN0YXRlcy5yaWdodEZpeGVkQ29sdW1ucyk7XG5cbiAgICAgIHZhciBsZWFmQ29sdW1ucyA9IGRvRmxhdHRlbkNvbHVtbnMobm90Rml4ZWRDb2x1bW5zKTtcbiAgICAgIHZhciBmaXhlZExlYWZDb2x1bW5zID0gZG9GbGF0dGVuQ29sdW1ucyhzdGF0ZXMuZml4ZWRDb2x1bW5zKTtcbiAgICAgIHZhciByaWdodEZpeGVkTGVhZkNvbHVtbnMgPSBkb0ZsYXR0ZW5Db2x1bW5zKHN0YXRlcy5yaWdodEZpeGVkQ29sdW1ucyk7XG5cbiAgICAgIHN0YXRlcy5sZWFmQ29sdW1uc0xlbmd0aCA9IGxlYWZDb2x1bW5zLmxlbmd0aDtcbiAgICAgIHN0YXRlcy5maXhlZExlYWZDb2x1bW5zTGVuZ3RoID0gZml4ZWRMZWFmQ29sdW1ucy5sZW5ndGg7XG4gICAgICBzdGF0ZXMucmlnaHRGaXhlZExlYWZDb2x1bW5zTGVuZ3RoID0gcmlnaHRGaXhlZExlYWZDb2x1bW5zLmxlbmd0aDtcblxuICAgICAgc3RhdGVzLmNvbHVtbnMgPSBbXS5jb25jYXQoZml4ZWRMZWFmQ29sdW1ucykuY29uY2F0KGxlYWZDb2x1bW5zKS5jb25jYXQocmlnaHRGaXhlZExlYWZDb2x1bW5zKTtcbiAgICAgIHN0YXRlcy5pc0NvbXBsZXggPSBzdGF0ZXMuZml4ZWRDb2x1bW5zLmxlbmd0aCA+IDAgfHwgc3RhdGVzLnJpZ2h0Rml4ZWRDb2x1bW5zLmxlbmd0aCA+IDA7XG4gICAgfSxcblxuXG4gICAgLy8g5pu05pawIERPTVxuICAgIHNjaGVkdWxlTGF5b3V0OiBmdW5jdGlvbiBzY2hlZHVsZUxheW91dChuZWVkVXBkYXRlQ29sdW1ucykge1xuICAgICAgaWYgKG5lZWRVcGRhdGVDb2x1bW5zKSB7XG4gICAgICAgIHRoaXMudXBkYXRlQ29sdW1ucygpO1xuICAgICAgfVxuICAgICAgdGhpcy50YWJsZS5kZWJvdW5jZWRVcGRhdGVMYXlvdXQoKTtcbiAgICB9LFxuXG5cbiAgICAvLyDpgInmi6lcbiAgICBpc1NlbGVjdGVkOiBmdW5jdGlvbiBpc1NlbGVjdGVkKHJvdykge1xuICAgICAgdmFyIF9zdGF0ZXMkc2VsZWN0aW9uID0gdGhpcy5zdGF0ZXMuc2VsZWN0aW9uLFxuICAgICAgICAgIHNlbGVjdGlvbiA9IF9zdGF0ZXMkc2VsZWN0aW9uID09PSB1bmRlZmluZWQgPyBbXSA6IF9zdGF0ZXMkc2VsZWN0aW9uO1xuXG4gICAgICByZXR1cm4gc2VsZWN0aW9uLmluZGV4T2Yocm93KSA+IC0xO1xuICAgIH0sXG4gICAgY2xlYXJTZWxlY3Rpb246IGZ1bmN0aW9uIGNsZWFyU2VsZWN0aW9uKCkge1xuICAgICAgdmFyIHN0YXRlcyA9IHRoaXMuc3RhdGVzO1xuICAgICAgc3RhdGVzLmlzQWxsU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgIHZhciBvbGRTZWxlY3Rpb24gPSBzdGF0ZXMuc2VsZWN0aW9uO1xuICAgICAgaWYgKG9sZFNlbGVjdGlvbi5sZW5ndGgpIHtcbiAgICAgICAgc3RhdGVzLnNlbGVjdGlvbiA9IFtdO1xuICAgICAgICB0aGlzLnRhYmxlLiRlbWl0KCdzZWxlY3Rpb24tY2hhbmdlJywgW10pO1xuICAgICAgfVxuICAgIH0sXG4gICAgY2xlYW5TZWxlY3Rpb246IGZ1bmN0aW9uIGNsZWFuU2VsZWN0aW9uKCkge1xuICAgICAgdmFyIHN0YXRlcyA9IHRoaXMuc3RhdGVzO1xuICAgICAgdmFyIGRhdGEgPSBzdGF0ZXMuZGF0YSxcbiAgICAgICAgICByb3dLZXkgPSBzdGF0ZXMucm93S2V5LFxuICAgICAgICAgIHNlbGVjdGlvbiA9IHN0YXRlcy5zZWxlY3Rpb247XG5cbiAgICAgIHZhciBkZWxldGVkID0gdm9pZCAwO1xuICAgICAgaWYgKHJvd0tleSkge1xuICAgICAgICBkZWxldGVkID0gW107XG4gICAgICAgIHZhciBzZWxlY3RlZE1hcCA9IGdldEtleXNNYXAoc2VsZWN0aW9uLCByb3dLZXkpO1xuICAgICAgICB2YXIgZGF0YU1hcCA9IGdldEtleXNNYXAoZGF0YSwgcm93S2V5KTtcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHNlbGVjdGVkTWFwKSB7XG4gICAgICAgICAgaWYgKHNlbGVjdGVkTWFwLmhhc093blByb3BlcnR5KGtleSkgJiYgIWRhdGFNYXBba2V5XSkge1xuICAgICAgICAgICAgZGVsZXRlZC5wdXNoKHNlbGVjdGVkTWFwW2tleV0ucm93KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlbGV0ZWQgPSBzZWxlY3Rpb24uZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgcmV0dXJuIGRhdGEuaW5kZXhPZihpdGVtKSA9PT0gLTE7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKGRlbGV0ZWQubGVuZ3RoKSB7XG4gICAgICAgIHZhciBuZXdTZWxlY3Rpb24gPSBzZWxlY3Rpb24uZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgcmV0dXJuIGRlbGV0ZWQuaW5kZXhPZihpdGVtKSA9PT0gLTE7XG4gICAgICAgIH0pO1xuICAgICAgICBzdGF0ZXMuc2VsZWN0aW9uID0gbmV3U2VsZWN0aW9uO1xuICAgICAgICB0aGlzLnRhYmxlLiRlbWl0KCdzZWxlY3Rpb24tY2hhbmdlJywgbmV3U2VsZWN0aW9uLnNsaWNlKCkpO1xuICAgICAgfVxuICAgIH0sXG4gICAgdG9nZ2xlUm93U2VsZWN0aW9uOiBmdW5jdGlvbiB0b2dnbGVSb3dTZWxlY3Rpb24ocm93LCBzZWxlY3RlZCkge1xuICAgICAgdmFyIGVtaXRDaGFuZ2UgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHRydWU7XG5cbiAgICAgIHZhciBjaGFuZ2VkID0gdG9nZ2xlUm93U3RhdHVzKHRoaXMuc3RhdGVzLnNlbGVjdGlvbiwgcm93LCBzZWxlY3RlZCk7XG4gICAgICBpZiAoY2hhbmdlZCkge1xuICAgICAgICB2YXIgbmV3U2VsZWN0aW9uID0gKHRoaXMuc3RhdGVzLnNlbGVjdGlvbiB8fCBbXSkuc2xpY2UoKTtcbiAgICAgICAgLy8g6LCD55SoIEFQSSDkv67mlLnpgInkuK3lgLzvvIzkuI3op6blj5Egc2VsZWN0IOS6i+S7tlxuICAgICAgICBpZiAoZW1pdENoYW5nZSkge1xuICAgICAgICAgIHRoaXMudGFibGUuJGVtaXQoJ3NlbGVjdCcsIG5ld1NlbGVjdGlvbiwgcm93KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRhYmxlLiRlbWl0KCdzZWxlY3Rpb24tY2hhbmdlJywgbmV3U2VsZWN0aW9uKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIF90b2dnbGVBbGxTZWxlY3Rpb246IGZ1bmN0aW9uIF90b2dnbGVBbGxTZWxlY3Rpb24oKSB7XG4gICAgICB2YXIgc3RhdGVzID0gdGhpcy5zdGF0ZXM7XG4gICAgICB2YXIgX3N0YXRlcyRkYXRhID0gc3RhdGVzLmRhdGEsXG4gICAgICAgICAgZGF0YSA9IF9zdGF0ZXMkZGF0YSA9PT0gdW5kZWZpbmVkID8gW10gOiBfc3RhdGVzJGRhdGEsXG4gICAgICAgICAgc2VsZWN0aW9uID0gc3RhdGVzLnNlbGVjdGlvbjtcbiAgICAgIC8vIHdoZW4gb25seSBzb21lIHJvd3MgYXJlIHNlbGVjdGVkIChidXQgbm90IGFsbCksIHNlbGVjdCBvciBkZXNlbGVjdCBhbGwgb2YgdGhlbVxuICAgICAgLy8gZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBvZiBzZWxlY3RPbkluZGV0ZXJtaW5hdGVcblxuICAgICAgdmFyIHZhbHVlID0gc3RhdGVzLnNlbGVjdE9uSW5kZXRlcm1pbmF0ZSA/ICFzdGF0ZXMuaXNBbGxTZWxlY3RlZCA6ICEoc3RhdGVzLmlzQWxsU2VsZWN0ZWQgfHwgc2VsZWN0aW9uLmxlbmd0aCk7XG4gICAgICBzdGF0ZXMuaXNBbGxTZWxlY3RlZCA9IHZhbHVlO1xuXG4gICAgICB2YXIgc2VsZWN0aW9uQ2hhbmdlZCA9IGZhbHNlO1xuICAgICAgZGF0YS5mb3JFYWNoKGZ1bmN0aW9uIChyb3csIGluZGV4KSB7XG4gICAgICAgIGlmIChzdGF0ZXMuc2VsZWN0YWJsZSkge1xuICAgICAgICAgIGlmIChzdGF0ZXMuc2VsZWN0YWJsZS5jYWxsKG51bGwsIHJvdywgaW5kZXgpICYmIHRvZ2dsZVJvd1N0YXR1cyhzZWxlY3Rpb24sIHJvdywgdmFsdWUpKSB7XG4gICAgICAgICAgICBzZWxlY3Rpb25DaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHRvZ2dsZVJvd1N0YXR1cyhzZWxlY3Rpb24sIHJvdywgdmFsdWUpKSB7XG4gICAgICAgICAgICBzZWxlY3Rpb25DaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAoc2VsZWN0aW9uQ2hhbmdlZCkge1xuICAgICAgICB0aGlzLnRhYmxlLiRlbWl0KCdzZWxlY3Rpb24tY2hhbmdlJywgc2VsZWN0aW9uID8gc2VsZWN0aW9uLnNsaWNlKCkgOiBbXSk7XG4gICAgICB9XG4gICAgICB0aGlzLnRhYmxlLiRlbWl0KCdzZWxlY3QtYWxsJywgc2VsZWN0aW9uKTtcbiAgICB9LFxuICAgIHVwZGF0ZVNlbGVjdGlvbkJ5Um93S2V5OiBmdW5jdGlvbiB1cGRhdGVTZWxlY3Rpb25CeVJvd0tleSgpIHtcbiAgICAgIHZhciBzdGF0ZXMgPSB0aGlzLnN0YXRlcztcbiAgICAgIHZhciBzZWxlY3Rpb24gPSBzdGF0ZXMuc2VsZWN0aW9uLFxuICAgICAgICAgIHJvd0tleSA9IHN0YXRlcy5yb3dLZXksXG4gICAgICAgICAgZGF0YSA9IHN0YXRlcy5kYXRhO1xuXG4gICAgICB2YXIgc2VsZWN0ZWRNYXAgPSBnZXRLZXlzTWFwKHNlbGVjdGlvbiwgcm93S2V5KTtcbiAgICAgIGRhdGEuZm9yRWFjaChmdW5jdGlvbiAocm93KSB7XG4gICAgICAgIHZhciByb3dJZCA9IGdldFJvd0lkZW50aXR5KHJvdywgcm93S2V5KTtcbiAgICAgICAgdmFyIHJvd0luZm8gPSBzZWxlY3RlZE1hcFtyb3dJZF07XG4gICAgICAgIGlmIChyb3dJbmZvKSB7XG4gICAgICAgICAgc2VsZWN0aW9uW3Jvd0luZm8uaW5kZXhdID0gcm93O1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuICAgIHVwZGF0ZUFsbFNlbGVjdGVkOiBmdW5jdGlvbiB1cGRhdGVBbGxTZWxlY3RlZCgpIHtcbiAgICAgIHZhciBzdGF0ZXMgPSB0aGlzLnN0YXRlcztcbiAgICAgIHZhciBzZWxlY3Rpb24gPSBzdGF0ZXMuc2VsZWN0aW9uLFxuICAgICAgICAgIHJvd0tleSA9IHN0YXRlcy5yb3dLZXksXG4gICAgICAgICAgc2VsZWN0YWJsZSA9IHN0YXRlcy5zZWxlY3RhYmxlO1xuICAgICAgLy8gZGF0YSDkuLogbnVsbCDml7bvvIzop6PmnoTml7bnmoTpu5jorqTlgLzkvJrooqvlv73nlaVcblxuICAgICAgdmFyIGRhdGEgPSBzdGF0ZXMuZGF0YSB8fCBbXTtcbiAgICAgIGlmIChkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBzdGF0ZXMuaXNBbGxTZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBzZWxlY3RlZE1hcCA9IHZvaWQgMDtcbiAgICAgIGlmIChyb3dLZXkpIHtcbiAgICAgICAgc2VsZWN0ZWRNYXAgPSBnZXRLZXlzTWFwKHNlbGVjdGlvbiwgcm93S2V5KTtcbiAgICAgIH1cbiAgICAgIHZhciBpc1NlbGVjdGVkID0gZnVuY3Rpb24gaXNTZWxlY3RlZChyb3cpIHtcbiAgICAgICAgaWYgKHNlbGVjdGVkTWFwKSB7XG4gICAgICAgICAgcmV0dXJuICEhc2VsZWN0ZWRNYXBbZ2V0Um93SWRlbnRpdHkocm93LCByb3dLZXkpXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gc2VsZWN0aW9uLmluZGV4T2Yocm93KSAhPT0gLTE7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICB2YXIgaXNBbGxTZWxlY3RlZCA9IHRydWU7XG4gICAgICB2YXIgc2VsZWN0ZWRDb3VudCA9IDA7XG4gICAgICBmb3IgKHZhciBpID0gMCwgaiA9IGRhdGEubGVuZ3RoOyBpIDwgajsgaSsrKSB7XG4gICAgICAgIHZhciBpdGVtID0gZGF0YVtpXTtcbiAgICAgICAgdmFyIGlzUm93U2VsZWN0YWJsZSA9IHNlbGVjdGFibGUgJiYgc2VsZWN0YWJsZS5jYWxsKG51bGwsIGl0ZW0sIGkpO1xuICAgICAgICBpZiAoIWlzU2VsZWN0ZWQoaXRlbSkpIHtcbiAgICAgICAgICBpZiAoIXNlbGVjdGFibGUgfHwgaXNSb3dTZWxlY3RhYmxlKSB7XG4gICAgICAgICAgICBpc0FsbFNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2VsZWN0ZWRDb3VudCsrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChzZWxlY3RlZENvdW50ID09PSAwKSBpc0FsbFNlbGVjdGVkID0gZmFsc2U7XG4gICAgICBzdGF0ZXMuaXNBbGxTZWxlY3RlZCA9IGlzQWxsU2VsZWN0ZWQ7XG4gICAgfSxcblxuXG4gICAgLy8g6L+H5ruk5LiO5o6S5bqPXG4gICAgdXBkYXRlRmlsdGVyczogZnVuY3Rpb24gdXBkYXRlRmlsdGVycyhjb2x1bW5zLCB2YWx1ZXMpIHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShjb2x1bW5zKSkge1xuICAgICAgICBjb2x1bW5zID0gW2NvbHVtbnNdO1xuICAgICAgfVxuICAgICAgdmFyIHN0YXRlcyA9IHRoaXMuc3RhdGVzO1xuICAgICAgdmFyIGZpbHRlcnMgPSB7fTtcbiAgICAgIGNvbHVtbnMuZm9yRWFjaChmdW5jdGlvbiAoY29sKSB7XG4gICAgICAgIHN0YXRlcy5maWx0ZXJzW2NvbC5pZF0gPSB2YWx1ZXM7XG4gICAgICAgIGZpbHRlcnNbY29sLmNvbHVtbktleSB8fCBjb2wuaWRdID0gdmFsdWVzO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBmaWx0ZXJzO1xuICAgIH0sXG4gICAgdXBkYXRlU29ydDogZnVuY3Rpb24gdXBkYXRlU29ydChjb2x1bW4sIHByb3AsIG9yZGVyKSB7XG4gICAgICBpZiAodGhpcy5zdGF0ZXMuc29ydGluZ0NvbHVtbiAmJiB0aGlzLnN0YXRlcy5zb3J0aW5nQ29sdW1uICE9PSBjb2x1bW4pIHtcbiAgICAgICAgdGhpcy5zdGF0ZXMuc29ydGluZ0NvbHVtbi5vcmRlciA9IG51bGw7XG4gICAgICB9XG4gICAgICB0aGlzLnN0YXRlcy5zb3J0aW5nQ29sdW1uID0gY29sdW1uO1xuICAgICAgdGhpcy5zdGF0ZXMuc29ydFByb3AgPSBwcm9wO1xuICAgICAgdGhpcy5zdGF0ZXMuc29ydE9yZGVyID0gb3JkZXI7XG4gICAgfSxcbiAgICBleGVjRmlsdGVyOiBmdW5jdGlvbiBleGVjRmlsdGVyKCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgdmFyIHN0YXRlcyA9IHRoaXMuc3RhdGVzO1xuICAgICAgdmFyIF9kYXRhID0gc3RhdGVzLl9kYXRhLFxuICAgICAgICAgIGZpbHRlcnMgPSBzdGF0ZXMuZmlsdGVycztcblxuICAgICAgdmFyIGRhdGEgPSBfZGF0YTtcblxuICAgICAgT2JqZWN0LmtleXMoZmlsdGVycykuZm9yRWFjaChmdW5jdGlvbiAoY29sdW1uSWQpIHtcbiAgICAgICAgdmFyIHZhbHVlcyA9IHN0YXRlcy5maWx0ZXJzW2NvbHVtbklkXTtcbiAgICAgICAgaWYgKCF2YWx1ZXMgfHwgdmFsdWVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgICAgICB2YXIgY29sdW1uID0gZ2V0Q29sdW1uQnlJZChfdGhpcy5zdGF0ZXMsIGNvbHVtbklkKTtcbiAgICAgICAgaWYgKGNvbHVtbiAmJiBjb2x1bW4uZmlsdGVyTWV0aG9kKSB7XG4gICAgICAgICAgZGF0YSA9IGRhdGEuZmlsdGVyKGZ1bmN0aW9uIChyb3cpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZXMuc29tZShmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGNvbHVtbi5maWx0ZXJNZXRob2QuY2FsbChudWxsLCB2YWx1ZSwgcm93LCBjb2x1bW4pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBzdGF0ZXMuZmlsdGVyZWREYXRhID0gZGF0YTtcbiAgICB9LFxuICAgIGV4ZWNTb3J0OiBmdW5jdGlvbiBleGVjU29ydCgpIHtcbiAgICAgIHZhciBzdGF0ZXMgPSB0aGlzLnN0YXRlcztcbiAgICAgIHN0YXRlcy5kYXRhID0gd2F0Y2hlcl9zb3J0RGF0YShzdGF0ZXMuZmlsdGVyZWREYXRhLCBzdGF0ZXMpO1xuICAgIH0sXG5cblxuICAgIC8vIOagueaNriBmaWx0ZXJzIOS4jiBzb3J0IOWOu+i/h+a7pCBkYXRhXG4gICAgZXhlY1F1ZXJ5OiBmdW5jdGlvbiBleGVjUXVlcnkoaWdub3JlKSB7XG4gICAgICBpZiAoIShpZ25vcmUgJiYgaWdub3JlLmZpbHRlcikpIHtcbiAgICAgICAgdGhpcy5leGVjRmlsdGVyKCk7XG4gICAgICB9XG4gICAgICB0aGlzLmV4ZWNTb3J0KCk7XG4gICAgfSxcbiAgICBjbGVhckZpbHRlcjogZnVuY3Rpb24gY2xlYXJGaWx0ZXIoY29sdW1uS2V5cykge1xuICAgICAgdmFyIHN0YXRlcyA9IHRoaXMuc3RhdGVzO1xuICAgICAgdmFyIF90YWJsZSQkcmVmcyA9IHRoaXMudGFibGUuJHJlZnMsXG4gICAgICAgICAgdGFibGVIZWFkZXIgPSBfdGFibGUkJHJlZnMudGFibGVIZWFkZXIsXG4gICAgICAgICAgZml4ZWRUYWJsZUhlYWRlciA9IF90YWJsZSQkcmVmcy5maXhlZFRhYmxlSGVhZGVyLFxuICAgICAgICAgIHJpZ2h0Rml4ZWRUYWJsZUhlYWRlciA9IF90YWJsZSQkcmVmcy5yaWdodEZpeGVkVGFibGVIZWFkZXI7XG5cblxuICAgICAgdmFyIHBhbmVscyA9IHt9O1xuICAgICAgaWYgKHRhYmxlSGVhZGVyKSBwYW5lbHMgPSBtZXJnZV9kZWZhdWx0KCkocGFuZWxzLCB0YWJsZUhlYWRlci5maWx0ZXJQYW5lbHMpO1xuICAgICAgaWYgKGZpeGVkVGFibGVIZWFkZXIpIHBhbmVscyA9IG1lcmdlX2RlZmF1bHQoKShwYW5lbHMsIGZpeGVkVGFibGVIZWFkZXIuZmlsdGVyUGFuZWxzKTtcbiAgICAgIGlmIChyaWdodEZpeGVkVGFibGVIZWFkZXIpIHBhbmVscyA9IG1lcmdlX2RlZmF1bHQoKShwYW5lbHMsIHJpZ2h0Rml4ZWRUYWJsZUhlYWRlci5maWx0ZXJQYW5lbHMpO1xuXG4gICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHBhbmVscyk7XG4gICAgICBpZiAoIWtleXMubGVuZ3RoKSByZXR1cm47XG5cbiAgICAgIGlmICh0eXBlb2YgY29sdW1uS2V5cyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29sdW1uS2V5cyA9IFtjb2x1bW5LZXlzXTtcbiAgICAgIH1cblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY29sdW1uS2V5cykpIHtcbiAgICAgICAgdmFyIGNvbHVtbnMgPSBjb2x1bW5LZXlzLm1hcChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgcmV0dXJuIGdldENvbHVtbkJ5S2V5KHN0YXRlcywga2V5KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGtleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgdmFyIGNvbHVtbiA9IGNvbHVtbnMuZmluZChmdW5jdGlvbiAoY29sKSB7XG4gICAgICAgICAgICByZXR1cm4gY29sLmlkID09PSBrZXk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKGNvbHVtbikge1xuICAgICAgICAgICAgLy8gVE9ETzog5LyY5YyW6L+Z6YeM55qE5Luj56CBXG4gICAgICAgICAgICBwYW5lbHNba2V5XS5maWx0ZXJlZFZhbHVlID0gW107XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jb21taXQoJ2ZpbHRlckNoYW5nZScsIHtcbiAgICAgICAgICBjb2x1bW46IGNvbHVtbnMsXG4gICAgICAgICAgdmFsdWVzOiBbXSxcbiAgICAgICAgICBzaWxlbnQ6IHRydWUsXG4gICAgICAgICAgbXVsdGk6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBrZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgIC8vIFRPRE86IOS8mOWMlui/memHjOeahOS7o+eggVxuICAgICAgICAgIHBhbmVsc1trZXldLmZpbHRlcmVkVmFsdWUgPSBbXTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc3RhdGVzLmZpbHRlcnMgPSB7fTtcbiAgICAgICAgdGhpcy5jb21taXQoJ2ZpbHRlckNoYW5nZScsIHtcbiAgICAgICAgICBjb2x1bW46IHt9LFxuICAgICAgICAgIHZhbHVlczogW10sXG4gICAgICAgICAgc2lsZW50OiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gICAgY2xlYXJTb3J0OiBmdW5jdGlvbiBjbGVhclNvcnQoKSB7XG4gICAgICB2YXIgc3RhdGVzID0gdGhpcy5zdGF0ZXM7XG4gICAgICBpZiAoIXN0YXRlcy5zb3J0aW5nQ29sdW1uKSByZXR1cm47XG5cbiAgICAgIHRoaXMudXBkYXRlU29ydChudWxsLCBudWxsLCBudWxsKTtcbiAgICAgIHRoaXMuY29tbWl0KCdjaGFuZ2VTb3J0Q29uZGl0aW9uJywge1xuICAgICAgICBzaWxlbnQ6IHRydWVcbiAgICAgIH0pO1xuICAgIH0sXG5cblxuICAgIC8vIOmAgumFjeWxgu+8jGV4cGFuZC1yb3cta2V5cyDlnKggRXhwYW5kIOS4jiBUcmVlVGFibGUg5Lit6YO95pyJ5L2/55SoXG4gICAgc2V0RXhwYW5kUm93S2V5c0FkYXB0ZXI6IGZ1bmN0aW9uIHNldEV4cGFuZFJvd0tleXNBZGFwdGVyKHZhbCkge1xuICAgICAgLy8g6L+Z6YeM5Lya6Kem5Y+R6aKd5aSW55qE6K6h566X77yM5L2G5Li65LqG5YW85a655oCn77yM5pqC5pe26L+Z5LmI5YGaXG4gICAgICB0aGlzLnNldEV4cGFuZFJvd0tleXModmFsKTtcbiAgICAgIHRoaXMudXBkYXRlVHJlZUV4cGFuZEtleXModmFsKTtcbiAgICB9LFxuXG5cbiAgICAvLyDlsZXlvIDooYzkuI4gVHJlZVRhYmxlIOmDveimgeS9v+eUqFxuICAgIHRvZ2dsZVJvd0V4cGFuc2lvbkFkYXB0ZXI6IGZ1bmN0aW9uIHRvZ2dsZVJvd0V4cGFuc2lvbkFkYXB0ZXIocm93LCBleHBhbmRlZCkge1xuICAgICAgdmFyIGhhc0V4cGFuZENvbHVtbiA9IHRoaXMuc3RhdGVzLmNvbHVtbnMuc29tZShmdW5jdGlvbiAoX3JlZikge1xuICAgICAgICB2YXIgdHlwZSA9IF9yZWYudHlwZTtcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09ICdleHBhbmQnO1xuICAgICAgfSk7XG4gICAgICBpZiAoaGFzRXhwYW5kQ29sdW1uKSB7XG4gICAgICAgIHRoaXMudG9nZ2xlUm93RXhwYW5zaW9uKHJvdywgZXhwYW5kZWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy50b2dnbGVUcmVlRXhwYW5zaW9uKHJvdywgZXhwYW5kZWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufSkpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy90YWJsZS9zcmMvc3RvcmUvaW5kZXguanNcblxuXG5cblxud2F0Y2hlci5wcm90b3R5cGUubXV0YXRpb25zID0ge1xuICBzZXREYXRhOiBmdW5jdGlvbiBzZXREYXRhKHN0YXRlcywgZGF0YSkge1xuICAgIHZhciBkYXRhSW5zdGFuY2VDaGFuZ2VkID0gc3RhdGVzLl9kYXRhICE9PSBkYXRhO1xuICAgIHN0YXRlcy5fZGF0YSA9IGRhdGE7XG5cbiAgICB0aGlzLmV4ZWNRdWVyeSgpO1xuICAgIC8vIOaVsOaNruWPmOWMlu+8jOabtOaWsOmDqOWIhuaVsOaNruOAglxuICAgIC8vIOayoeacieS9v+eUqCBjb21wdXRlZO+8jOiAjOaYr+aJi+WKqOabtOaWsOmDqOWIhuaVsOaNriBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlL2lzc3Vlcy82NjYwI2lzc3VlY29tbWVudC0zMzE0MTcxNDBcbiAgICB0aGlzLnVwZGF0ZUN1cnJlbnRSb3dEYXRhKCk7XG4gICAgdGhpcy51cGRhdGVFeHBhbmRSb3dzKCk7XG4gICAgaWYgKHN0YXRlcy5yZXNlcnZlU2VsZWN0aW9uKSB7XG4gICAgICB0aGlzLmFzc2VydFJvd0tleSgpO1xuICAgICAgdGhpcy51cGRhdGVTZWxlY3Rpb25CeVJvd0tleSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoZGF0YUluc3RhbmNlQ2hhbmdlZCkge1xuICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNsZWFuU2VsZWN0aW9uKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMudXBkYXRlQWxsU2VsZWN0ZWQoKTtcblxuICAgIHRoaXMudXBkYXRlVGFibGVTY3JvbGxZKCk7XG4gIH0sXG4gIGluc2VydENvbHVtbjogZnVuY3Rpb24gaW5zZXJ0Q29sdW1uKHN0YXRlcywgY29sdW1uLCBpbmRleCwgcGFyZW50KSB7XG4gICAgdmFyIGFycmF5ID0gc3RhdGVzLl9jb2x1bW5zO1xuICAgIGlmIChwYXJlbnQpIHtcbiAgICAgIGFycmF5ID0gcGFyZW50LmNoaWxkcmVuO1xuICAgICAgaWYgKCFhcnJheSkgYXJyYXkgPSBwYXJlbnQuY2hpbGRyZW4gPSBbXTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluZGV4ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgYXJyYXkuc3BsaWNlKGluZGV4LCAwLCBjb2x1bW4pO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcnJheS5wdXNoKGNvbHVtbik7XG4gICAgfVxuXG4gICAgaWYgKGNvbHVtbi50eXBlID09PSAnc2VsZWN0aW9uJykge1xuICAgICAgc3RhdGVzLnNlbGVjdGFibGUgPSBjb2x1bW4uc2VsZWN0YWJsZTtcbiAgICAgIHN0YXRlcy5yZXNlcnZlU2VsZWN0aW9uID0gY29sdW1uLnJlc2VydmVTZWxlY3Rpb247XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudGFibGUuJHJlYWR5KSB7XG4gICAgICB0aGlzLnVwZGF0ZUNvbHVtbnMoKTsgLy8gaGFjayBmb3IgZHluYW1pY3MgaW5zZXJ0IGNvbHVtblxuICAgICAgdGhpcy5zY2hlZHVsZUxheW91dCgpO1xuICAgIH1cbiAgfSxcbiAgcmVtb3ZlQ29sdW1uOiBmdW5jdGlvbiByZW1vdmVDb2x1bW4oc3RhdGVzLCBjb2x1bW4sIHBhcmVudCkge1xuICAgIHZhciBhcnJheSA9IHN0YXRlcy5fY29sdW1ucztcbiAgICBpZiAocGFyZW50KSB7XG4gICAgICBhcnJheSA9IHBhcmVudC5jaGlsZHJlbjtcbiAgICAgIGlmICghYXJyYXkpIGFycmF5ID0gcGFyZW50LmNoaWxkcmVuID0gW107XG4gICAgfVxuICAgIGlmIChhcnJheSkge1xuICAgICAgYXJyYXkuc3BsaWNlKGFycmF5LmluZGV4T2YoY29sdW1uKSwgMSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudGFibGUuJHJlYWR5KSB7XG4gICAgICB0aGlzLnVwZGF0ZUNvbHVtbnMoKTsgLy8gaGFjayBmb3IgZHluYW1pY3MgcmVtb3ZlIGNvbHVtblxuICAgICAgdGhpcy5zY2hlZHVsZUxheW91dCgpO1xuICAgIH1cbiAgfSxcbiAgc29ydDogZnVuY3Rpb24gc29ydChzdGF0ZXMsIG9wdGlvbnMpIHtcbiAgICB2YXIgcHJvcCA9IG9wdGlvbnMucHJvcCxcbiAgICAgICAgb3JkZXIgPSBvcHRpb25zLm9yZGVyLFxuICAgICAgICBpbml0ID0gb3B0aW9ucy5pbml0O1xuXG4gICAgaWYgKHByb3ApIHtcbiAgICAgIHZhciBjb2x1bW4gPSBPYmplY3QodXRpbF9bXCJhcnJheUZpbmRcIl0pKHN0YXRlcy5jb2x1bW5zLCBmdW5jdGlvbiAoY29sdW1uKSB7XG4gICAgICAgIHJldHVybiBjb2x1bW4ucHJvcGVydHkgPT09IHByb3A7XG4gICAgICB9KTtcbiAgICAgIGlmIChjb2x1bW4pIHtcbiAgICAgICAgY29sdW1uLm9yZGVyID0gb3JkZXI7XG4gICAgICAgIHRoaXMudXBkYXRlU29ydChjb2x1bW4sIHByb3AsIG9yZGVyKTtcbiAgICAgICAgdGhpcy5jb21taXQoJ2NoYW5nZVNvcnRDb25kaXRpb24nLCB7IGluaXQ6IGluaXQgfSk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBjaGFuZ2VTb3J0Q29uZGl0aW9uOiBmdW5jdGlvbiBjaGFuZ2VTb3J0Q29uZGl0aW9uKHN0YXRlcywgb3B0aW9ucykge1xuICAgIC8vIOS/ruWkjSBwciBodHRwczovL2dpdGh1Yi5jb20vRWxlbWVGRS9lbGVtZW50L3B1bGwvMTUwMTIg5a+86Ie055qEIGJ1Z1xuICAgIHZhciBjb2x1bW4gPSBzdGF0ZXMuc29ydGluZ0NvbHVtbixcbiAgICAgICAgcHJvcCA9IHN0YXRlcy5zb3J0UHJvcCxcbiAgICAgICAgb3JkZXIgPSBzdGF0ZXMuc29ydE9yZGVyO1xuXG4gICAgaWYgKG9yZGVyID09PSBudWxsKSB7XG4gICAgICBzdGF0ZXMuc29ydGluZ0NvbHVtbiA9IG51bGw7XG4gICAgICBzdGF0ZXMuc29ydFByb3AgPSBudWxsO1xuICAgIH1cbiAgICB2YXIgaW5nb3JlID0geyBmaWx0ZXI6IHRydWUgfTtcbiAgICB0aGlzLmV4ZWNRdWVyeShpbmdvcmUpO1xuXG4gICAgaWYgKCFvcHRpb25zIHx8ICEob3B0aW9ucy5zaWxlbnQgfHwgb3B0aW9ucy5pbml0KSkge1xuICAgICAgdGhpcy50YWJsZS4kZW1pdCgnc29ydC1jaGFuZ2UnLCB7XG4gICAgICAgIGNvbHVtbjogY29sdW1uLFxuICAgICAgICBwcm9wOiBwcm9wLFxuICAgICAgICBvcmRlcjogb3JkZXJcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlVGFibGVTY3JvbGxZKCk7XG4gIH0sXG4gIGZpbHRlckNoYW5nZTogZnVuY3Rpb24gZmlsdGVyQ2hhbmdlKHN0YXRlcywgb3B0aW9ucykge1xuICAgIHZhciBjb2x1bW4gPSBvcHRpb25zLmNvbHVtbixcbiAgICAgICAgdmFsdWVzID0gb3B0aW9ucy52YWx1ZXMsXG4gICAgICAgIHNpbGVudCA9IG9wdGlvbnMuc2lsZW50O1xuXG4gICAgdmFyIG5ld0ZpbHRlcnMgPSB0aGlzLnVwZGF0ZUZpbHRlcnMoY29sdW1uLCB2YWx1ZXMpO1xuXG4gICAgdGhpcy5leGVjUXVlcnkoKTtcblxuICAgIGlmICghc2lsZW50KSB7XG4gICAgICB0aGlzLnRhYmxlLiRlbWl0KCdmaWx0ZXItY2hhbmdlJywgbmV3RmlsdGVycyk7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVUYWJsZVNjcm9sbFkoKTtcbiAgfSxcbiAgdG9nZ2xlQWxsU2VsZWN0aW9uOiBmdW5jdGlvbiB0b2dnbGVBbGxTZWxlY3Rpb24oKSB7XG4gICAgdGhpcy50b2dnbGVBbGxTZWxlY3Rpb24oKTtcbiAgfSxcbiAgcm93U2VsZWN0ZWRDaGFuZ2VkOiBmdW5jdGlvbiByb3dTZWxlY3RlZENoYW5nZWQoc3RhdGVzLCByb3cpIHtcbiAgICB0aGlzLnRvZ2dsZVJvd1NlbGVjdGlvbihyb3cpO1xuICAgIHRoaXMudXBkYXRlQWxsU2VsZWN0ZWQoKTtcbiAgfSxcbiAgc2V0SG92ZXJSb3c6IGZ1bmN0aW9uIHNldEhvdmVyUm93KHN0YXRlcywgcm93KSB7XG4gICAgc3RhdGVzLmhvdmVyUm93ID0gcm93O1xuICB9LFxuICBzZXRDdXJyZW50Um93OiBmdW5jdGlvbiBzZXRDdXJyZW50Um93KHN0YXRlcywgcm93KSB7XG4gICAgdGhpcy51cGRhdGVDdXJyZW50Um93KHJvdyk7XG4gIH1cbn07XG5cbndhdGNoZXIucHJvdG90eXBlLmNvbW1pdCA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIHZhciBtdXRhdGlvbnMgPSB0aGlzLm11dGF0aW9ucztcbiAgaWYgKG11dGF0aW9uc1tuYW1lXSkge1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgbXV0YXRpb25zW25hbWVdLmFwcGx5KHRoaXMsIFt0aGlzLnN0YXRlc10uY29uY2F0KGFyZ3MpKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0FjdGlvbiBub3QgZm91bmQ6ICcgKyBuYW1lKTtcbiAgfVxufTtcblxud2F0Y2hlci5wcm90b3R5cGUudXBkYXRlVGFibGVTY3JvbGxZID0gZnVuY3Rpb24gKCkge1xuICBleHRlcm5hbF92dWVfZGVmYXVsdC5hLm5leHRUaWNrKHRoaXMudGFibGUudXBkYXRlU2Nyb2xsWSk7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfc3RvcmUgPSAod2F0Y2hlcik7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3RhYmxlL3NyYy9zdG9yZS9oZWxwZXIuanNcblxuXG5cbmZ1bmN0aW9uIGNyZWF0ZVN0b3JlKHRhYmxlKSB7XG4gIHZhciBpbml0aWFsU3RhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuXG4gIGlmICghdGFibGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RhYmxlIGlzIHJlcXVpcmVkLicpO1xuICB9XG5cbiAgdmFyIHN0b3JlID0gbmV3IHNyY19zdG9yZSgpO1xuICBzdG9yZS50YWJsZSA9IHRhYmxlO1xuICAvLyBmaXggaHR0cHM6Ly9naXRodWIuY29tL0VsZW1lRkUvZWxlbWVudC9pc3N1ZXMvMTQwNzVcbiAgLy8gcmVsYXRlZCBwciBodHRwczovL2dpdGh1Yi5jb20vRWxlbWVGRS9lbGVtZW50L3B1bGwvMTQxNDZcbiAgc3RvcmUudG9nZ2xlQWxsU2VsZWN0aW9uID0gZGVib3VuY2VfZGVmYXVsdCgpKDEwLCBzdG9yZS5fdG9nZ2xlQWxsU2VsZWN0aW9uKTtcbiAgT2JqZWN0LmtleXMoaW5pdGlhbFN0YXRlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICBzdG9yZS5zdGF0ZXNba2V5XSA9IGluaXRpYWxTdGF0ZVtrZXldO1xuICB9KTtcbiAgcmV0dXJuIHN0b3JlO1xufVxuXG5mdW5jdGlvbiBtYXBTdGF0ZXMobWFwcGVyKSB7XG4gIHZhciByZXMgPSB7fTtcbiAgT2JqZWN0LmtleXMobWFwcGVyKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgdmFsdWUgPSBtYXBwZXJba2V5XTtcbiAgICB2YXIgZm4gPSB2b2lkIDA7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGZuID0gZnVuY3Rpb24gZm4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0b3JlLnN0YXRlc1t2YWx1ZV07XG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBmbiA9IGZ1bmN0aW9uIGZuKCkge1xuICAgICAgICByZXR1cm4gdmFsdWUuY2FsbCh0aGlzLCB0aGlzLnN0b3JlLnN0YXRlcyk7XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdpbnZhbGlkIHZhbHVlIHR5cGUnKTtcbiAgICB9XG4gICAgaWYgKGZuKSB7XG4gICAgICByZXNba2V5XSA9IGZuO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXM7XG59O1xuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcImVsZW1lbnQtdWkvbGliL3V0aWxzL3Njcm9sbGJhci13aWR0aFwiXG52YXIgc2Nyb2xsYmFyX3dpZHRoXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzEpO1xudmFyIHNjcm9sbGJhcl93aWR0aF9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihzY3JvbGxiYXJfd2lkdGhfKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy90YWJsZS9zcmMvdGFibGUtbGF5b3V0LmpzXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5cblxuXG5cbnZhciB0YWJsZV9sYXlvdXRfVGFibGVMYXlvdXQgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFRhYmxlTGF5b3V0KG9wdGlvbnMpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgVGFibGVMYXlvdXQpO1xuXG4gICAgdGhpcy5vYnNlcnZlcnMgPSBbXTtcbiAgICB0aGlzLnRhYmxlID0gbnVsbDtcbiAgICB0aGlzLnN0b3JlID0gbnVsbDtcbiAgICB0aGlzLmNvbHVtbnMgPSBudWxsO1xuICAgIHRoaXMuZml0ID0gdHJ1ZTtcbiAgICB0aGlzLnNob3dIZWFkZXIgPSB0cnVlO1xuXG4gICAgdGhpcy5oZWlnaHQgPSBudWxsO1xuICAgIHRoaXMuc2Nyb2xsWCA9IGZhbHNlO1xuICAgIHRoaXMuc2Nyb2xsWSA9IGZhbHNlO1xuICAgIHRoaXMuYm9keVdpZHRoID0gbnVsbDtcbiAgICB0aGlzLmZpeGVkV2lkdGggPSBudWxsO1xuICAgIHRoaXMucmlnaHRGaXhlZFdpZHRoID0gbnVsbDtcbiAgICB0aGlzLnRhYmxlSGVpZ2h0ID0gbnVsbDtcbiAgICB0aGlzLmhlYWRlckhlaWdodCA9IDQ0OyAvLyBUYWJsZSBIZWFkZXIgSGVpZ2h0XG4gICAgdGhpcy5hcHBlbmRIZWlnaHQgPSAwOyAvLyBBcHBlbmQgU2xvdCBIZWlnaHRcbiAgICB0aGlzLmZvb3RlckhlaWdodCA9IDQ0OyAvLyBUYWJsZSBGb290ZXIgSGVpZ2h0XG4gICAgdGhpcy52aWV3cG9ydEhlaWdodCA9IG51bGw7IC8vIFRhYmxlIEhlaWdodCAtIFNjcm9sbCBCYXIgSGVpZ2h0XG4gICAgdGhpcy5ib2R5SGVpZ2h0ID0gbnVsbDsgLy8gVGFibGUgSGVpZ2h0IC0gVGFibGUgSGVhZGVyIEhlaWdodFxuICAgIHRoaXMuZml4ZWRCb2R5SGVpZ2h0ID0gbnVsbDsgLy8gVGFibGUgSGVpZ2h0IC0gVGFibGUgSGVhZGVyIEhlaWdodCAtIFNjcm9sbCBCYXIgSGVpZ2h0XG4gICAgdGhpcy5ndXR0ZXJXaWR0aCA9IHNjcm9sbGJhcl93aWR0aF9kZWZhdWx0KCkoKTtcblxuICAgIGZvciAodmFyIG5hbWUgaW4gb3B0aW9ucykge1xuICAgICAgaWYgKG9wdGlvbnMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgdGhpc1tuYW1lXSA9IG9wdGlvbnNbbmFtZV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnRhYmxlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RhYmxlIGlzIHJlcXVpcmVkIGZvciBUYWJsZSBMYXlvdXQnKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnN0b3JlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3N0b3JlIGlzIHJlcXVpcmVkIGZvciBUYWJsZSBMYXlvdXQnKTtcbiAgICB9XG4gIH1cblxuICBUYWJsZUxheW91dC5wcm90b3R5cGUudXBkYXRlU2Nyb2xsWSA9IGZ1bmN0aW9uIHVwZGF0ZVNjcm9sbFkoKSB7XG4gICAgdmFyIGhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuICAgIGlmIChoZWlnaHQgPT09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgICB2YXIgYm9keVdyYXBwZXIgPSB0aGlzLnRhYmxlLmJvZHlXcmFwcGVyO1xuICAgIGlmICh0aGlzLnRhYmxlLiRlbCAmJiBib2R5V3JhcHBlcikge1xuICAgICAgdmFyIGJvZHkgPSBib2R5V3JhcHBlci5xdWVyeVNlbGVjdG9yKCcuZWwtdGFibGVfX2JvZHknKTtcbiAgICAgIHZhciBwcmV2U2Nyb2xsWSA9IHRoaXMuc2Nyb2xsWTtcbiAgICAgIHZhciBzY3JvbGxZID0gYm9keS5vZmZzZXRIZWlnaHQgPiB0aGlzLmJvZHlIZWlnaHQ7XG4gICAgICB0aGlzLnNjcm9sbFkgPSBzY3JvbGxZO1xuICAgICAgcmV0dXJuIHByZXZTY3JvbGxZICE9PSBzY3JvbGxZO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG5cbiAgVGFibGVMYXlvdXQucHJvdG90eXBlLnNldEhlaWdodCA9IGZ1bmN0aW9uIHNldEhlaWdodCh2YWx1ZSkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB2YXIgcHJvcCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogJ2hlaWdodCc7XG5cbiAgICBpZiAoZXh0ZXJuYWxfdnVlX2RlZmF1bHQuYS5wcm90b3R5cGUuJGlzU2VydmVyKSByZXR1cm47XG4gICAgdmFyIGVsID0gdGhpcy50YWJsZS4kZWw7XG4gICAgdmFsdWUgPSBwYXJzZUhlaWdodCh2YWx1ZSk7XG4gICAgdGhpcy5oZWlnaHQgPSB2YWx1ZTtcblxuICAgIGlmICghZWwgJiYgKHZhbHVlIHx8IHZhbHVlID09PSAwKSkgcmV0dXJuIGV4dGVybmFsX3Z1ZV9kZWZhdWx0LmEubmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF90aGlzLnNldEhlaWdodCh2YWx1ZSwgcHJvcCk7XG4gICAgfSk7XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgZWwuc3R5bGVbcHJvcF0gPSB2YWx1ZSArICdweCc7XG4gICAgICB0aGlzLnVwZGF0ZUVsc0hlaWdodCgpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgZWwuc3R5bGVbcHJvcF0gPSB2YWx1ZTtcbiAgICAgIHRoaXMudXBkYXRlRWxzSGVpZ2h0KCk7XG4gICAgfVxuICB9O1xuXG4gIFRhYmxlTGF5b3V0LnByb3RvdHlwZS5zZXRNYXhIZWlnaHQgPSBmdW5jdGlvbiBzZXRNYXhIZWlnaHQodmFsdWUpIHtcbiAgICB0aGlzLnNldEhlaWdodCh2YWx1ZSwgJ21heC1oZWlnaHQnKTtcbiAgfTtcblxuICBUYWJsZUxheW91dC5wcm90b3R5cGUuZ2V0RmxhdHRlbkNvbHVtbnMgPSBmdW5jdGlvbiBnZXRGbGF0dGVuQ29sdW1ucygpIHtcbiAgICB2YXIgZmxhdHRlbkNvbHVtbnMgPSBbXTtcbiAgICB2YXIgY29sdW1ucyA9IHRoaXMudGFibGUuY29sdW1ucztcbiAgICBjb2x1bW5zLmZvckVhY2goZnVuY3Rpb24gKGNvbHVtbikge1xuICAgICAgaWYgKGNvbHVtbi5pc0NvbHVtbkdyb3VwKSB7XG4gICAgICAgIGZsYXR0ZW5Db2x1bW5zLnB1c2guYXBwbHkoZmxhdHRlbkNvbHVtbnMsIGNvbHVtbi5jb2x1bW5zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZsYXR0ZW5Db2x1bW5zLnB1c2goY29sdW1uKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBmbGF0dGVuQ29sdW1ucztcbiAgfTtcblxuICBUYWJsZUxheW91dC5wcm90b3R5cGUudXBkYXRlRWxzSGVpZ2h0ID0gZnVuY3Rpb24gdXBkYXRlRWxzSGVpZ2h0KCkge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgaWYgKCF0aGlzLnRhYmxlLiRyZWFkeSkgcmV0dXJuIGV4dGVybmFsX3Z1ZV9kZWZhdWx0LmEubmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF90aGlzMi51cGRhdGVFbHNIZWlnaHQoKTtcbiAgICB9KTtcbiAgICB2YXIgX3RhYmxlJCRyZWZzID0gdGhpcy50YWJsZS4kcmVmcyxcbiAgICAgICAgaGVhZGVyV3JhcHBlciA9IF90YWJsZSQkcmVmcy5oZWFkZXJXcmFwcGVyLFxuICAgICAgICBhcHBlbmRXcmFwcGVyID0gX3RhYmxlJCRyZWZzLmFwcGVuZFdyYXBwZXIsXG4gICAgICAgIGZvb3RlcldyYXBwZXIgPSBfdGFibGUkJHJlZnMuZm9vdGVyV3JhcHBlcjtcblxuICAgIHRoaXMuYXBwZW5kSGVpZ2h0ID0gYXBwZW5kV3JhcHBlciA/IGFwcGVuZFdyYXBwZXIub2Zmc2V0SGVpZ2h0IDogMDtcblxuICAgIGlmICh0aGlzLnNob3dIZWFkZXIgJiYgIWhlYWRlcldyYXBwZXIpIHJldHVybjtcblxuICAgIC8vIGZpeCBpc3N1ZSAoaHR0cHM6Ly9naXRodWIuY29tL0VsZW1lRkUvZWxlbWVudC9wdWxsLzE2OTU2KVxuICAgIHZhciBoZWFkZXJUckVsbSA9IGhlYWRlcldyYXBwZXIgPyBoZWFkZXJXcmFwcGVyLnF1ZXJ5U2VsZWN0b3IoJy5lbC10YWJsZV9faGVhZGVyIHRyJykgOiBudWxsO1xuICAgIHZhciBub25lSGVhZGVyID0gdGhpcy5oZWFkZXJEaXNwbGF5Tm9uZShoZWFkZXJUckVsbSk7XG5cbiAgICB2YXIgaGVhZGVySGVpZ2h0ID0gdGhpcy5oZWFkZXJIZWlnaHQgPSAhdGhpcy5zaG93SGVhZGVyID8gMCA6IGhlYWRlcldyYXBwZXIub2Zmc2V0SGVpZ2h0O1xuICAgIGlmICh0aGlzLnNob3dIZWFkZXIgJiYgIW5vbmVIZWFkZXIgJiYgaGVhZGVyV3JhcHBlci5vZmZzZXRXaWR0aCA+IDAgJiYgKHRoaXMudGFibGUuY29sdW1ucyB8fCBbXSkubGVuZ3RoID4gMCAmJiBoZWFkZXJIZWlnaHQgPCAyKSB7XG4gICAgICByZXR1cm4gZXh0ZXJuYWxfdnVlX2RlZmF1bHQuYS5uZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBfdGhpczIudXBkYXRlRWxzSGVpZ2h0KCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgdmFyIHRhYmxlSGVpZ2h0ID0gdGhpcy50YWJsZUhlaWdodCA9IHRoaXMudGFibGUuJGVsLmNsaWVudEhlaWdodDtcbiAgICB2YXIgZm9vdGVySGVpZ2h0ID0gdGhpcy5mb290ZXJIZWlnaHQgPSBmb290ZXJXcmFwcGVyID8gZm9vdGVyV3JhcHBlci5vZmZzZXRIZWlnaHQgOiAwO1xuICAgIGlmICh0aGlzLmhlaWdodCAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5ib2R5SGVpZ2h0ID0gdGFibGVIZWlnaHQgLSBoZWFkZXJIZWlnaHQgLSBmb290ZXJIZWlnaHQgKyAoZm9vdGVyV3JhcHBlciA/IDEgOiAwKTtcbiAgICB9XG4gICAgdGhpcy5maXhlZEJvZHlIZWlnaHQgPSB0aGlzLnNjcm9sbFggPyB0aGlzLmJvZHlIZWlnaHQgLSB0aGlzLmd1dHRlcldpZHRoIDogdGhpcy5ib2R5SGVpZ2h0O1xuXG4gICAgdmFyIG5vRGF0YSA9ICEodGhpcy5zdG9yZS5zdGF0ZXMuZGF0YSAmJiB0aGlzLnN0b3JlLnN0YXRlcy5kYXRhLmxlbmd0aCk7XG4gICAgdGhpcy52aWV3cG9ydEhlaWdodCA9IHRoaXMuc2Nyb2xsWCA/IHRhYmxlSGVpZ2h0IC0gKG5vRGF0YSA/IDAgOiB0aGlzLmd1dHRlcldpZHRoKSA6IHRhYmxlSGVpZ2h0O1xuICAgIHRoaXMudXBkYXRlU2Nyb2xsWSgpO1xuICAgIHRoaXMubm90aWZ5T2JzZXJ2ZXJzKCdzY3JvbGxhYmxlJyk7XG4gIH07XG5cbiAgVGFibGVMYXlvdXQucHJvdG90eXBlLmhlYWRlckRpc3BsYXlOb25lID0gZnVuY3Rpb24gaGVhZGVyRGlzcGxheU5vbmUoZWxtKSB7XG4gICAgaWYgKCFlbG0pIHJldHVybiB0cnVlO1xuICAgIHZhciBoZWFkZXJDaGlsZCA9IGVsbTtcbiAgICB3aGlsZSAoaGVhZGVyQ2hpbGQudGFnTmFtZSAhPT0gJ0RJVicpIHtcbiAgICAgIGlmIChnZXRDb21wdXRlZFN0eWxlKGhlYWRlckNoaWxkKS5kaXNwbGF5ID09PSAnbm9uZScpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBoZWFkZXJDaGlsZCA9IGhlYWRlckNoaWxkLnBhcmVudEVsZW1lbnQ7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcblxuICBUYWJsZUxheW91dC5wcm90b3R5cGUudXBkYXRlQ29sdW1uc1dpZHRoID0gZnVuY3Rpb24gdXBkYXRlQ29sdW1uc1dpZHRoKCkge1xuICAgIGlmIChleHRlcm5hbF92dWVfZGVmYXVsdC5hLnByb3RvdHlwZS4kaXNTZXJ2ZXIpIHJldHVybjtcbiAgICB2YXIgZml0ID0gdGhpcy5maXQ7XG4gICAgdmFyIGJvZHlXaWR0aCA9IHRoaXMudGFibGUuJGVsLmNsaWVudFdpZHRoO1xuICAgIHZhciBib2R5TWluV2lkdGggPSAwO1xuXG4gICAgdmFyIGZsYXR0ZW5Db2x1bW5zID0gdGhpcy5nZXRGbGF0dGVuQ29sdW1ucygpO1xuICAgIHZhciBmbGV4Q29sdW1ucyA9IGZsYXR0ZW5Db2x1bW5zLmZpbHRlcihmdW5jdGlvbiAoY29sdW1uKSB7XG4gICAgICByZXR1cm4gdHlwZW9mIGNvbHVtbi53aWR0aCAhPT0gJ251bWJlcic7XG4gICAgfSk7XG5cbiAgICBmbGF0dGVuQ29sdW1ucy5mb3JFYWNoKGZ1bmN0aW9uIChjb2x1bW4pIHtcbiAgICAgIC8vIENsZWFuIHRob3NlIGNvbHVtbnMgd2hvc2Ugd2lkdGggY2hhbmdlZCBmcm9tIGZsZXggdG8gdW5mbGV4XG4gICAgICBpZiAodHlwZW9mIGNvbHVtbi53aWR0aCA9PT0gJ251bWJlcicgJiYgY29sdW1uLnJlYWxXaWR0aCkgY29sdW1uLnJlYWxXaWR0aCA9IG51bGw7XG4gICAgfSk7XG5cbiAgICBpZiAoZmxleENvbHVtbnMubGVuZ3RoID4gMCAmJiBmaXQpIHtcbiAgICAgIGZsYXR0ZW5Db2x1bW5zLmZvckVhY2goZnVuY3Rpb24gKGNvbHVtbikge1xuICAgICAgICBib2R5TWluV2lkdGggKz0gY29sdW1uLndpZHRoIHx8IGNvbHVtbi5taW5XaWR0aCB8fCA4MDtcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgc2Nyb2xsWVdpZHRoID0gdGhpcy5zY3JvbGxZID8gdGhpcy5ndXR0ZXJXaWR0aCA6IDA7XG5cbiAgICAgIGlmIChib2R5TWluV2lkdGggPD0gYm9keVdpZHRoIC0gc2Nyb2xsWVdpZHRoKSB7XG4gICAgICAgIC8vIERPTidUIEhBVkUgU0NST0xMIEJBUlxuICAgICAgICB0aGlzLnNjcm9sbFggPSBmYWxzZTtcblxuICAgICAgICB2YXIgdG90YWxGbGV4V2lkdGggPSBib2R5V2lkdGggLSBzY3JvbGxZV2lkdGggLSBib2R5TWluV2lkdGg7XG5cbiAgICAgICAgaWYgKGZsZXhDb2x1bW5zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIGZsZXhDb2x1bW5zWzBdLnJlYWxXaWR0aCA9IChmbGV4Q29sdW1uc1swXS5taW5XaWR0aCB8fCA4MCkgKyB0b3RhbEZsZXhXaWR0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgYWxsQ29sdW1uc1dpZHRoID0gZmxleENvbHVtbnMucmVkdWNlKGZ1bmN0aW9uIChwcmV2LCBjb2x1bW4pIHtcbiAgICAgICAgICAgIHJldHVybiBwcmV2ICsgKGNvbHVtbi5taW5XaWR0aCB8fCA4MCk7XG4gICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgdmFyIGZsZXhXaWR0aFBlclBpeGVsID0gdG90YWxGbGV4V2lkdGggLyBhbGxDb2x1bW5zV2lkdGg7XG4gICAgICAgICAgdmFyIG5vbmVGaXJzdFdpZHRoID0gMDtcblxuICAgICAgICAgIGZsZXhDb2x1bW5zLmZvckVhY2goZnVuY3Rpb24gKGNvbHVtbiwgaW5kZXgpIHtcbiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gMCkgcmV0dXJuO1xuICAgICAgICAgICAgdmFyIGZsZXhXaWR0aCA9IE1hdGguZmxvb3IoKGNvbHVtbi5taW5XaWR0aCB8fCA4MCkgKiBmbGV4V2lkdGhQZXJQaXhlbCk7XG4gICAgICAgICAgICBub25lRmlyc3RXaWR0aCArPSBmbGV4V2lkdGg7XG4gICAgICAgICAgICBjb2x1bW4ucmVhbFdpZHRoID0gKGNvbHVtbi5taW5XaWR0aCB8fCA4MCkgKyBmbGV4V2lkdGg7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBmbGV4Q29sdW1uc1swXS5yZWFsV2lkdGggPSAoZmxleENvbHVtbnNbMF0ubWluV2lkdGggfHwgODApICsgdG90YWxGbGV4V2lkdGggLSBub25lRmlyc3RXaWR0aDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSEFWRSBIT1JJWk9OVEFMIFNDUk9MTCBCQVJcbiAgICAgICAgdGhpcy5zY3JvbGxYID0gdHJ1ZTtcbiAgICAgICAgZmxleENvbHVtbnMuZm9yRWFjaChmdW5jdGlvbiAoY29sdW1uKSB7XG4gICAgICAgICAgY29sdW1uLnJlYWxXaWR0aCA9IGNvbHVtbi5taW5XaWR0aDtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuYm9keVdpZHRoID0gTWF0aC5tYXgoYm9keU1pbldpZHRoLCBib2R5V2lkdGgpO1xuICAgICAgdGhpcy50YWJsZS5yZXNpemVTdGF0ZS53aWR0aCA9IHRoaXMuYm9keVdpZHRoO1xuICAgIH0gZWxzZSB7XG4gICAgICBmbGF0dGVuQ29sdW1ucy5mb3JFYWNoKGZ1bmN0aW9uIChjb2x1bW4pIHtcbiAgICAgICAgaWYgKCFjb2x1bW4ud2lkdGggJiYgIWNvbHVtbi5taW5XaWR0aCkge1xuICAgICAgICAgIGNvbHVtbi5yZWFsV2lkdGggPSA4MDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb2x1bW4ucmVhbFdpZHRoID0gY29sdW1uLndpZHRoIHx8IGNvbHVtbi5taW5XaWR0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIGJvZHlNaW5XaWR0aCArPSBjb2x1bW4ucmVhbFdpZHRoO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnNjcm9sbFggPSBib2R5TWluV2lkdGggPiBib2R5V2lkdGg7XG5cbiAgICAgIHRoaXMuYm9keVdpZHRoID0gYm9keU1pbldpZHRoO1xuICAgIH1cblxuICAgIHZhciBmaXhlZENvbHVtbnMgPSB0aGlzLnN0b3JlLnN0YXRlcy5maXhlZENvbHVtbnM7XG5cbiAgICBpZiAoZml4ZWRDb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgIHZhciBmaXhlZFdpZHRoID0gMDtcbiAgICAgIGZpeGVkQ29sdW1ucy5mb3JFYWNoKGZ1bmN0aW9uIChjb2x1bW4pIHtcbiAgICAgICAgZml4ZWRXaWR0aCArPSBjb2x1bW4ucmVhbFdpZHRoIHx8IGNvbHVtbi53aWR0aDtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmZpeGVkV2lkdGggPSBmaXhlZFdpZHRoO1xuICAgIH1cblxuICAgIHZhciByaWdodEZpeGVkQ29sdW1ucyA9IHRoaXMuc3RvcmUuc3RhdGVzLnJpZ2h0Rml4ZWRDb2x1bW5zO1xuICAgIGlmIChyaWdodEZpeGVkQ29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgICB2YXIgcmlnaHRGaXhlZFdpZHRoID0gMDtcbiAgICAgIHJpZ2h0Rml4ZWRDb2x1bW5zLmZvckVhY2goZnVuY3Rpb24gKGNvbHVtbikge1xuICAgICAgICByaWdodEZpeGVkV2lkdGggKz0gY29sdW1uLnJlYWxXaWR0aCB8fCBjb2x1bW4ud2lkdGg7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5yaWdodEZpeGVkV2lkdGggPSByaWdodEZpeGVkV2lkdGg7XG4gICAgfVxuXG4gICAgdGhpcy5ub3RpZnlPYnNlcnZlcnMoJ2NvbHVtbnMnKTtcbiAgfTtcblxuICBUYWJsZUxheW91dC5wcm90b3R5cGUuYWRkT2JzZXJ2ZXIgPSBmdW5jdGlvbiBhZGRPYnNlcnZlcihvYnNlcnZlcikge1xuICAgIHRoaXMub2JzZXJ2ZXJzLnB1c2gob2JzZXJ2ZXIpO1xuICB9O1xuXG4gIFRhYmxlTGF5b3V0LnByb3RvdHlwZS5yZW1vdmVPYnNlcnZlciA9IGZ1bmN0aW9uIHJlbW92ZU9ic2VydmVyKG9ic2VydmVyKSB7XG4gICAgdmFyIGluZGV4ID0gdGhpcy5vYnNlcnZlcnMuaW5kZXhPZihvYnNlcnZlcik7XG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5vYnNlcnZlcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gIH07XG5cbiAgVGFibGVMYXlvdXQucHJvdG90eXBlLm5vdGlmeU9ic2VydmVycyA9IGZ1bmN0aW9uIG5vdGlmeU9ic2VydmVycyhldmVudCkge1xuICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgdmFyIG9ic2VydmVycyA9IHRoaXMub2JzZXJ2ZXJzO1xuICAgIG9ic2VydmVycy5mb3JFYWNoKGZ1bmN0aW9uIChvYnNlcnZlcikge1xuICAgICAgc3dpdGNoIChldmVudCkge1xuICAgICAgICBjYXNlICdjb2x1bW5zJzpcbiAgICAgICAgICBvYnNlcnZlci5vbkNvbHVtbnNDaGFuZ2UoX3RoaXMzKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnc2Nyb2xsYWJsZSc6XG4gICAgICAgICAgb2JzZXJ2ZXIub25TY3JvbGxhYmxlQ2hhbmdlKF90aGlzMyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUYWJsZSBMYXlvdXQgZG9uXFwndCBoYXZlIGV2ZW50ICcgKyBldmVudCArICcuJyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgcmV0dXJuIFRhYmxlTGF5b3V0O1xufSgpO1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciB0YWJsZV9sYXlvdXQgPSAodGFibGVfbGF5b3V0X1RhYmxlTGF5b3V0KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdGFibGUvc3JjL2xheW91dC1vYnNlcnZlci5qc1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgbGF5b3V0X29ic2VydmVyID0gKHtcbiAgY3JlYXRlZDogZnVuY3Rpb24gY3JlYXRlZCgpIHtcbiAgICB0aGlzLnRhYmxlTGF5b3V0LmFkZE9ic2VydmVyKHRoaXMpO1xuICB9LFxuICBkZXN0cm95ZWQ6IGZ1bmN0aW9uIGRlc3Ryb3llZCgpIHtcbiAgICB0aGlzLnRhYmxlTGF5b3V0LnJlbW92ZU9ic2VydmVyKHRoaXMpO1xuICB9LFxuXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB0YWJsZUxheW91dDogZnVuY3Rpb24gdGFibGVMYXlvdXQoKSB7XG4gICAgICB2YXIgbGF5b3V0ID0gdGhpcy5sYXlvdXQ7XG4gICAgICBpZiAoIWxheW91dCAmJiB0aGlzLnRhYmxlKSB7XG4gICAgICAgIGxheW91dCA9IHRoaXMudGFibGUubGF5b3V0O1xuICAgICAgfVxuICAgICAgaWYgKCFsYXlvdXQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW4gbm90IGZpbmQgdGFibGUgbGF5b3V0LicpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGxheW91dDtcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCgpIHtcbiAgICB0aGlzLm9uQ29sdW1uc0NoYW5nZSh0aGlzLnRhYmxlTGF5b3V0KTtcbiAgICB0aGlzLm9uU2Nyb2xsYWJsZUNoYW5nZSh0aGlzLnRhYmxlTGF5b3V0KTtcbiAgfSxcbiAgdXBkYXRlZDogZnVuY3Rpb24gdXBkYXRlZCgpIHtcbiAgICBpZiAodGhpcy5fX3VwZGF0ZWRfXykgcmV0dXJuO1xuICAgIHRoaXMub25Db2x1bW5zQ2hhbmdlKHRoaXMudGFibGVMYXlvdXQpO1xuICAgIHRoaXMub25TY3JvbGxhYmxlQ2hhbmdlKHRoaXMudGFibGVMYXlvdXQpO1xuICAgIHRoaXMuX191cGRhdGVkX18gPSB0cnVlO1xuICB9LFxuXG5cbiAgbWV0aG9kczoge1xuICAgIG9uQ29sdW1uc0NoYW5nZTogZnVuY3Rpb24gb25Db2x1bW5zQ2hhbmdlKGxheW91dCkge1xuICAgICAgdmFyIGNvbHMgPSB0aGlzLiRlbC5xdWVyeVNlbGVjdG9yQWxsKCdjb2xncm91cCA+IGNvbCcpO1xuICAgICAgaWYgKCFjb2xzLmxlbmd0aCkgcmV0dXJuO1xuICAgICAgdmFyIGZsYXR0ZW5Db2x1bW5zID0gbGF5b3V0LmdldEZsYXR0ZW5Db2x1bW5zKCk7XG4gICAgICB2YXIgY29sdW1uc01hcCA9IHt9O1xuICAgICAgZmxhdHRlbkNvbHVtbnMuZm9yRWFjaChmdW5jdGlvbiAoY29sdW1uKSB7XG4gICAgICAgIGNvbHVtbnNNYXBbY29sdW1uLmlkXSA9IGNvbHVtbjtcbiAgICAgIH0pO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSBjb2xzLmxlbmd0aDsgaSA8IGo7IGkrKykge1xuICAgICAgICB2YXIgY29sID0gY29sc1tpXTtcbiAgICAgICAgdmFyIG5hbWUgPSBjb2wuZ2V0QXR0cmlidXRlKCduYW1lJyk7XG4gICAgICAgIHZhciBjb2x1bW4gPSBjb2x1bW5zTWFwW25hbWVdO1xuICAgICAgICBpZiAoY29sdW1uKSB7XG4gICAgICAgICAgY29sLnNldEF0dHJpYnV0ZSgnd2lkdGgnLCBjb2x1bW4ucmVhbFdpZHRoIHx8IGNvbHVtbi53aWR0aCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIG9uU2Nyb2xsYWJsZUNoYW5nZTogZnVuY3Rpb24gb25TY3JvbGxhYmxlQ2hhbmdlKGxheW91dCkge1xuICAgICAgdmFyIGNvbHMgPSB0aGlzLiRlbC5xdWVyeVNlbGVjdG9yQWxsKCdjb2xncm91cCA+IGNvbFtuYW1lPWd1dHRlcl0nKTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBqID0gY29scy5sZW5ndGg7IGkgPCBqOyBpKyspIHtcbiAgICAgICAgdmFyIGNvbCA9IGNvbHNbaV07XG4gICAgICAgIGNvbC5zZXRBdHRyaWJ1dGUoJ3dpZHRoJywgbGF5b3V0LnNjcm9sbFkgPyBsYXlvdXQuZ3V0dGVyV2lkdGggOiAnMCcpO1xuICAgICAgfVxuICAgICAgdmFyIHRocyA9IHRoaXMuJGVsLnF1ZXJ5U2VsZWN0b3JBbGwoJ3RoLmd1dHRlcicpO1xuICAgICAgZm9yICh2YXIgX2kgPSAwLCBfaiA9IHRocy5sZW5ndGg7IF9pIDwgX2o7IF9pKyspIHtcbiAgICAgICAgdmFyIHRoID0gdGhzW19pXTtcbiAgICAgICAgdGguc3R5bGUud2lkdGggPSBsYXlvdXQuc2Nyb2xsWSA/IGxheW91dC5ndXR0ZXJXaWR0aCArICdweCcgOiAnMCc7XG4gICAgICAgIHRoLnN0eWxlLmRpc3BsYXkgPSBsYXlvdXQuc2Nyb2xsWSA/ICcnIDogJ25vbmUnO1xuICAgICAgfVxuICAgIH1cbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3RhYmxlL3NyYy90YWJsZS1yb3cuanNcbnZhciB0YWJsZV9yb3dfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XG5cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgdGFibGVfcm93ID0gKHtcbiAgbmFtZTogJ0VsVGFibGVSb3cnLFxuICBwcm9wczogWydjb2x1bW5zJywgJ3JvdycsICdpbmRleCcsICdpc1NlbGVjdGVkJywgJ2lzRXhwYW5kZWQnLCAnc3RvcmUnLCAnY29udGV4dCcsICdmaXJzdERlZmF1bHRDb2x1bW5JbmRleCcsICd0cmVlUm93RGF0YScsICd0cmVlSW5kZW50JywgJ2NvbHVtbnNIaWRkZW4nLCAnZ2V0U3BhbicsICdnZXRDb2xzcGFuUmVhbFdpZHRoJywgJ2dldENlbGxTdHlsZScsICdnZXRDZWxsQ2xhc3MnLCAnaGFuZGxlQ2VsbE1vdXNlTGVhdmUnLCAnaGFuZGxlQ2VsbE1vdXNlRW50ZXInLCAnZml4ZWQnXSxcbiAgY29tcG9uZW50czoge1xuICAgIEVsQ2hlY2tib3g6IGNoZWNrYm94X2RlZmF1bHQuYVxuICB9LFxuICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdmFyIGggPSBhcmd1bWVudHNbMF07XG4gICAgdmFyIGNvbHVtbnMgPSB0aGlzLmNvbHVtbnMsXG4gICAgICAgIHJvdyA9IHRoaXMucm93LFxuICAgICAgICAkaW5kZXggPSB0aGlzLmluZGV4LFxuICAgICAgICBzdG9yZSA9IHRoaXMuc3RvcmUsXG4gICAgICAgIGNvbnRleHQgPSB0aGlzLmNvbnRleHQsXG4gICAgICAgIGZpcnN0RGVmYXVsdENvbHVtbkluZGV4ID0gdGhpcy5maXJzdERlZmF1bHRDb2x1bW5JbmRleCxcbiAgICAgICAgdHJlZVJvd0RhdGEgPSB0aGlzLnRyZWVSb3dEYXRhLFxuICAgICAgICB0cmVlSW5kZW50ID0gdGhpcy50cmVlSW5kZW50LFxuICAgICAgICBfY29sdW1uc0hpZGRlbiA9IHRoaXMuY29sdW1uc0hpZGRlbixcbiAgICAgICAgY29sdW1uc0hpZGRlbiA9IF9jb2x1bW5zSGlkZGVuID09PSB1bmRlZmluZWQgPyBbXSA6IF9jb2x1bW5zSGlkZGVuLFxuICAgICAgICBpc1NlbGVjdGVkID0gdGhpcy5pc1NlbGVjdGVkLFxuICAgICAgICBpc0V4cGFuZGVkID0gdGhpcy5pc0V4cGFuZGVkO1xuXG5cbiAgICByZXR1cm4gaCgndHInLCBbY29sdW1ucy5tYXAoZnVuY3Rpb24gKGNvbHVtbiwgY2VsbEluZGV4KSB7XG4gICAgICB2YXIgX2dldFNwYW4gPSBfdGhpcy5nZXRTcGFuKHJvdywgY29sdW1uLCAkaW5kZXgsIGNlbGxJbmRleCksXG4gICAgICAgICAgcm93c3BhbiA9IF9nZXRTcGFuLnJvd3NwYW4sXG4gICAgICAgICAgY29sc3BhbiA9IF9nZXRTcGFuLmNvbHNwYW47XG5cbiAgICAgIGlmICghcm93c3BhbiB8fCAhY29sc3Bhbikge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIHZhciBjb2x1bW5EYXRhID0gdGFibGVfcm93X2V4dGVuZHMoe30sIGNvbHVtbik7XG4gICAgICBjb2x1bW5EYXRhLnJlYWxXaWR0aCA9IF90aGlzLmdldENvbHNwYW5SZWFsV2lkdGgoY29sdW1ucywgY29sc3BhbiwgY2VsbEluZGV4KTtcbiAgICAgIHZhciBkYXRhID0ge1xuICAgICAgICBzdG9yZTogc3RvcmUsXG4gICAgICAgIGlzU2VsZWN0ZWQ6IGlzU2VsZWN0ZWQsXG4gICAgICAgIGlzRXhwYW5kZWQ6IGlzRXhwYW5kZWQsXG4gICAgICAgIF9zZWxmOiBjb250ZXh0LFxuICAgICAgICBjb2x1bW46IGNvbHVtbkRhdGEsXG4gICAgICAgIHJvdzogcm93LFxuICAgICAgICAkaW5kZXg6ICRpbmRleFxuICAgICAgfTtcbiAgICAgIGlmIChjZWxsSW5kZXggPT09IGZpcnN0RGVmYXVsdENvbHVtbkluZGV4ICYmIHRyZWVSb3dEYXRhKSB7XG4gICAgICAgIGRhdGEudHJlZU5vZGUgPSB7XG4gICAgICAgICAgaW5kZW50OiB0cmVlUm93RGF0YS5sZXZlbCAqIHRyZWVJbmRlbnQsXG4gICAgICAgICAgbGV2ZWw6IHRyZWVSb3dEYXRhLmxldmVsXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0eXBlb2YgdHJlZVJvd0RhdGEuZXhwYW5kZWQgPT09ICdib29sZWFuJykge1xuICAgICAgICAgIGRhdGEudHJlZU5vZGUuZXhwYW5kZWQgPSB0cmVlUm93RGF0YS5leHBhbmRlZDtcbiAgICAgICAgICAvLyDooajmmI7mmK/mh5LliqDovb1cbiAgICAgICAgICBpZiAoJ2xvYWRpbmcnIGluIHRyZWVSb3dEYXRhKSB7XG4gICAgICAgICAgICBkYXRhLnRyZWVOb2RlLmxvYWRpbmcgPSB0cmVlUm93RGF0YS5sb2FkaW5nO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoJ25vTGF6eUNoaWxkcmVuJyBpbiB0cmVlUm93RGF0YSkge1xuICAgICAgICAgICAgZGF0YS50cmVlTm9kZS5ub0xhenlDaGlsZHJlbiA9IHRyZWVSb3dEYXRhLm5vTGF6eUNoaWxkcmVuO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGgoXG4gICAgICAgICd0ZCcsXG4gICAgICAgIHtcbiAgICAgICAgICBzdHlsZTogX3RoaXMuZ2V0Q2VsbFN0eWxlKCRpbmRleCwgY2VsbEluZGV4LCByb3csIGNvbHVtbiksXG4gICAgICAgICAgJ2NsYXNzJzogX3RoaXMuZ2V0Q2VsbENsYXNzKCRpbmRleCwgY2VsbEluZGV4LCByb3csIGNvbHVtbiksXG4gICAgICAgICAgYXR0cnM6IHsgcm93c3Bhbjogcm93c3BhbixcbiAgICAgICAgICAgIGNvbHNwYW46IGNvbHNwYW5cbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAnbW91c2VlbnRlcic6IGZ1bmN0aW9uIG1vdXNlZW50ZXIoJGV2ZW50KSB7XG4gICAgICAgICAgICAgIHJldHVybiBfdGhpcy5oYW5kbGVDZWxsTW91c2VFbnRlcigkZXZlbnQsIHJvdyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ21vdXNlbGVhdmUnOiBfdGhpcy5oYW5kbGVDZWxsTW91c2VMZWF2ZVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgW2NvbHVtbi5yZW5kZXJDZWxsLmNhbGwoX3RoaXMuX3JlbmRlclByb3h5LCBfdGhpcy4kY3JlYXRlRWxlbWVudCwgZGF0YSwgY29sdW1uc0hpZGRlbltjZWxsSW5kZXhdKV1cbiAgICAgICk7XG4gICAgfSldKTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3RhYmxlL3NyYy90YWJsZS1ib2R5LmpzXG52YXIgdGFibGVfYm9keV90eXBlb2YgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIiA/IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH0gOiBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9O1xuXG52YXIgdGFibGVfYm9keV9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcblxuXG5cblxuXG5cblxuXG5cblxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciB0YWJsZV9ib2R5ID0gKHtcbiAgbmFtZTogJ0VsVGFibGVCb2R5JyxcblxuICBtaXhpbnM6IFtsYXlvdXRfb2JzZXJ2ZXJdLFxuXG4gIGNvbXBvbmVudHM6IHtcbiAgICBFbENoZWNrYm94OiBjaGVja2JveF9kZWZhdWx0LmEsXG4gICAgRWxUb29sdGlwOiB0b29sdGlwX2RlZmF1bHQuYSxcbiAgICBUYWJsZVJvdzogdGFibGVfcm93XG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBzdG9yZToge1xuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHN0cmlwZTogQm9vbGVhbixcbiAgICBjb250ZXh0OiB7fSxcbiAgICByb3dDbGFzc05hbWU6IFtTdHJpbmcsIEZ1bmN0aW9uXSxcbiAgICByb3dTdHlsZTogW09iamVjdCwgRnVuY3Rpb25dLFxuICAgIGZpeGVkOiBTdHJpbmcsXG4gICAgaGlnaGxpZ2h0OiBCb29sZWFuXG4gIH0sXG5cbiAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIoaCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSB8fCBbXTtcbiAgICByZXR1cm4gaChcbiAgICAgICd0YWJsZScsXG4gICAgICB7XG4gICAgICAgICdjbGFzcyc6ICdlbC10YWJsZV9fYm9keScsXG4gICAgICAgIGF0dHJzOiB7IGNlbGxzcGFjaW5nOiAnMCcsXG4gICAgICAgICAgY2VsbHBhZGRpbmc6ICcwJyxcbiAgICAgICAgICBib3JkZXI6ICcwJyB9XG4gICAgICB9LFxuICAgICAgW2goJ2NvbGdyb3VwJywgW3RoaXMuY29sdW1ucy5tYXAoZnVuY3Rpb24gKGNvbHVtbikge1xuICAgICAgICByZXR1cm4gaCgnY29sJywge1xuICAgICAgICAgIGF0dHJzOiB7IG5hbWU6IGNvbHVtbi5pZCB9LFxuICAgICAgICAgIGtleTogY29sdW1uLmlkIH0pO1xuICAgICAgfSldKSwgaCgndGJvZHknLCBbZGF0YS5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcm93KSB7XG4gICAgICAgIHJldHVybiBhY2MuY29uY2F0KF90aGlzLndyYXBwZWRSb3dSZW5kZXIocm93LCBhY2MubGVuZ3RoKSk7XG4gICAgICB9LCBbXSksIGgoJ2VsLXRvb2x0aXAnLCB7XG4gICAgICAgIGF0dHJzOiB7IGVmZmVjdDogdGhpcy50YWJsZS50b29sdGlwRWZmZWN0LCBwbGFjZW1lbnQ6ICd0b3AnLCBjb250ZW50OiB0aGlzLnRvb2x0aXBDb250ZW50IH0sXG4gICAgICAgIHJlZjogJ3Rvb2x0aXAnIH0pXSldXG4gICAgKTtcbiAgfSxcblxuXG4gIGNvbXB1dGVkOiB0YWJsZV9ib2R5X2V4dGVuZHMoe1xuICAgIHRhYmxlOiBmdW5jdGlvbiB0YWJsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRwYXJlbnQ7XG4gICAgfVxuICB9LCBtYXBTdGF0ZXMoe1xuICAgIGRhdGE6ICdkYXRhJyxcbiAgICBjb2x1bW5zOiAnY29sdW1ucycsXG4gICAgdHJlZUluZGVudDogJ2luZGVudCcsXG4gICAgbGVmdEZpeGVkTGVhZkNvdW50OiAnZml4ZWRMZWFmQ29sdW1uc0xlbmd0aCcsXG4gICAgcmlnaHRGaXhlZExlYWZDb3VudDogJ3JpZ2h0Rml4ZWRMZWFmQ29sdW1uc0xlbmd0aCcsXG4gICAgY29sdW1uc0NvdW50OiBmdW5jdGlvbiBjb2x1bW5zQ291bnQoc3RhdGVzKSB7XG4gICAgICByZXR1cm4gc3RhdGVzLmNvbHVtbnMubGVuZ3RoO1xuICAgIH0sXG4gICAgbGVmdEZpeGVkQ291bnQ6IGZ1bmN0aW9uIGxlZnRGaXhlZENvdW50KHN0YXRlcykge1xuICAgICAgcmV0dXJuIHN0YXRlcy5maXhlZENvbHVtbnMubGVuZ3RoO1xuICAgIH0sXG4gICAgcmlnaHRGaXhlZENvdW50OiBmdW5jdGlvbiByaWdodEZpeGVkQ291bnQoc3RhdGVzKSB7XG4gICAgICByZXR1cm4gc3RhdGVzLnJpZ2h0Rml4ZWRDb2x1bW5zLmxlbmd0aDtcbiAgICB9LFxuICAgIGhhc0V4cGFuZENvbHVtbjogZnVuY3Rpb24gaGFzRXhwYW5kQ29sdW1uKHN0YXRlcykge1xuICAgICAgcmV0dXJuIHN0YXRlcy5jb2x1bW5zLnNvbWUoZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgICAgdmFyIHR5cGUgPSBfcmVmLnR5cGU7XG4gICAgICAgIHJldHVybiB0eXBlID09PSAnZXhwYW5kJztcbiAgICAgIH0pO1xuICAgIH1cbiAgfSksIHtcbiAgICBjb2x1bW5zSGlkZGVuOiBmdW5jdGlvbiBjb2x1bW5zSGlkZGVuKCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHJldHVybiB0aGlzLmNvbHVtbnMubWFwKGZ1bmN0aW9uIChjb2x1bW4sIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBfdGhpczIuaXNDb2x1bW5IaWRkZW4oaW5kZXgpO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBmaXJzdERlZmF1bHRDb2x1bW5JbmRleDogZnVuY3Rpb24gZmlyc3REZWZhdWx0Q29sdW1uSW5kZXgoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0KHV0aWxfW1wiYXJyYXlGaW5kSW5kZXhcIl0pKHRoaXMuY29sdW1ucywgZnVuY3Rpb24gKF9yZWYyKSB7XG4gICAgICAgIHZhciB0eXBlID0gX3JlZjIudHlwZTtcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09ICdkZWZhdWx0JztcbiAgICAgIH0pO1xuICAgIH1cbiAgfSksXG5cbiAgd2F0Y2g6IHtcbiAgICAvLyBkb24ndCB0cmlnZ2VyIGdldHRlciBvZiBjdXJyZW50Um93IGluIGdldENlbGxDbGFzcy4gc2VlIGh0dHBzOi8vanNmaWRkbGUubmV0L29lMmI0aHF0L1xuICAgIC8vIHVwZGF0ZSBET00gbWFudWFsbHkuIHNlZSBodHRwczovL2dpdGh1Yi5jb20vRWxlbWVGRS9lbGVtZW50L3B1bGwvMTM5NTQvZmlsZXMjZGlmZi05YjQ1MGMwMGQwYTlkZWMwZmZhZDVhMzE3Njk3MmU0MFxuICAgICdzdG9yZS5zdGF0ZXMuaG92ZXJSb3cnOiBmdW5jdGlvbiBzdG9yZVN0YXRlc0hvdmVyUm93KG5ld1ZhbCwgb2xkVmFsKSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgICAgaWYgKCF0aGlzLnN0b3JlLnN0YXRlcy5pc0NvbXBsZXggfHwgdGhpcy4kaXNTZXJ2ZXIpIHJldHVybjtcbiAgICAgIHZhciByYWYgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lO1xuICAgICAgaWYgKCFyYWYpIHtcbiAgICAgICAgcmFmID0gZnVuY3Rpb24gcmFmKGZuKSB7XG4gICAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZm4sIDE2KTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJhZihmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciByb3dzID0gX3RoaXMzLiRlbC5xdWVyeVNlbGVjdG9yQWxsKCcuZWwtdGFibGVfX3JvdycpO1xuICAgICAgICB2YXIgb2xkUm93ID0gcm93c1tvbGRWYWxdO1xuICAgICAgICB2YXIgbmV3Um93ID0gcm93c1tuZXdWYWxdO1xuICAgICAgICBpZiAob2xkUm93KSB7XG4gICAgICAgICAgT2JqZWN0KGRvbV9bXCJyZW1vdmVDbGFzc1wiXSkob2xkUm93LCAnaG92ZXItcm93Jyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5ld1Jvdykge1xuICAgICAgICAgIE9iamVjdChkb21fW1wiYWRkQ2xhc3NcIl0pKG5ld1JvdywgJ2hvdmVyLXJvdycpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH0sXG5cbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdG9vbHRpcENvbnRlbnQ6ICcnXG4gICAgfTtcbiAgfSxcbiAgY3JlYXRlZDogZnVuY3Rpb24gY3JlYXRlZCgpIHtcbiAgICB0aGlzLmFjdGl2YXRlVG9vbHRpcCA9IGRlYm91bmNlX2RlZmF1bHQoKSg1MCwgZnVuY3Rpb24gKHRvb2x0aXApIHtcbiAgICAgIHJldHVybiB0b29sdGlwLmhhbmRsZVNob3dQb3BwZXIoKTtcbiAgICB9KTtcbiAgfSxcblxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRLZXlPZlJvdzogZnVuY3Rpb24gZ2V0S2V5T2ZSb3cocm93LCBpbmRleCkge1xuICAgICAgdmFyIHJvd0tleSA9IHRoaXMudGFibGUucm93S2V5O1xuICAgICAgaWYgKHJvd0tleSkge1xuICAgICAgICByZXR1cm4gZ2V0Um93SWRlbnRpdHkocm93LCByb3dLZXkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH0sXG4gICAgaXNDb2x1bW5IaWRkZW46IGZ1bmN0aW9uIGlzQ29sdW1uSGlkZGVuKGluZGV4KSB7XG4gICAgICBpZiAodGhpcy5maXhlZCA9PT0gdHJ1ZSB8fCB0aGlzLmZpeGVkID09PSAnbGVmdCcpIHtcbiAgICAgICAgcmV0dXJuIGluZGV4ID49IHRoaXMubGVmdEZpeGVkTGVhZkNvdW50O1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmZpeGVkID09PSAncmlnaHQnKSB7XG4gICAgICAgIHJldHVybiBpbmRleCA8IHRoaXMuY29sdW1uc0NvdW50IC0gdGhpcy5yaWdodEZpeGVkTGVhZkNvdW50O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGluZGV4IDwgdGhpcy5sZWZ0Rml4ZWRMZWFmQ291bnQgfHwgaW5kZXggPj0gdGhpcy5jb2x1bW5zQ291bnQgLSB0aGlzLnJpZ2h0Rml4ZWRMZWFmQ291bnQ7XG4gICAgICB9XG4gICAgfSxcbiAgICBnZXRTcGFuOiBmdW5jdGlvbiBnZXRTcGFuKHJvdywgY29sdW1uLCByb3dJbmRleCwgY29sdW1uSW5kZXgpIHtcbiAgICAgIHZhciByb3dzcGFuID0gMTtcbiAgICAgIHZhciBjb2xzcGFuID0gMTtcbiAgICAgIHZhciBmbiA9IHRoaXMudGFibGUuc3Bhbk1ldGhvZDtcbiAgICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IGZuKHtcbiAgICAgICAgICByb3c6IHJvdyxcbiAgICAgICAgICBjb2x1bW46IGNvbHVtbixcbiAgICAgICAgICByb3dJbmRleDogcm93SW5kZXgsXG4gICAgICAgICAgY29sdW1uSW5kZXg6IGNvbHVtbkluZGV4XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHQpKSB7XG4gICAgICAgICAgcm93c3BhbiA9IHJlc3VsdFswXTtcbiAgICAgICAgICBjb2xzcGFuID0gcmVzdWx0WzFdO1xuICAgICAgICB9IGVsc2UgaWYgKCh0eXBlb2YgcmVzdWx0ID09PSAndW5kZWZpbmVkJyA/ICd1bmRlZmluZWQnIDogdGFibGVfYm9keV90eXBlb2YocmVzdWx0KSkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgcm93c3BhbiA9IHJlc3VsdC5yb3dzcGFuO1xuICAgICAgICAgIGNvbHNwYW4gPSByZXN1bHQuY29sc3BhbjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHsgcm93c3Bhbjogcm93c3BhbiwgY29sc3BhbjogY29sc3BhbiB9O1xuICAgIH0sXG4gICAgZ2V0Um93U3R5bGU6IGZ1bmN0aW9uIGdldFJvd1N0eWxlKHJvdywgcm93SW5kZXgpIHtcbiAgICAgIHZhciByb3dTdHlsZSA9IHRoaXMudGFibGUucm93U3R5bGU7XG4gICAgICBpZiAodHlwZW9mIHJvd1N0eWxlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiByb3dTdHlsZS5jYWxsKG51bGwsIHtcbiAgICAgICAgICByb3c6IHJvdyxcbiAgICAgICAgICByb3dJbmRleDogcm93SW5kZXhcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcm93U3R5bGUgfHwgbnVsbDtcbiAgICB9LFxuICAgIGdldFJvd0NsYXNzOiBmdW5jdGlvbiBnZXRSb3dDbGFzcyhyb3csIHJvd0luZGV4KSB7XG4gICAgICB2YXIgc2VsZWN0aW9uID0gdGhpcy5zdG9yZS5zdGF0ZXMuc2VsZWN0aW9uO1xuICAgICAgdmFyIGNsYXNzZXMgPSBbJ2VsLXRhYmxlX19yb3cnXTtcbiAgICAgIGlmICh0aGlzLnRhYmxlLmhpZ2hsaWdodEN1cnJlbnRSb3cgJiYgcm93ID09PSB0aGlzLnN0b3JlLnN0YXRlcy5jdXJyZW50Um93KSB7XG4gICAgICAgIGNsYXNzZXMucHVzaCgnY3VycmVudC1yb3cnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMudGFibGUuaGlnaGxpZ2h0U2VsZWN0aW9uUm93KSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VsZWN0aW9uLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKG9iamVjdEVxdWFscyhyb3csIHNlbGVjdGlvbltpXSkpIHtcbiAgICAgICAgICAgIGNsYXNzZXMucHVzaCgnc2VsZWN0aW9uLXJvdycpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuc3RyaXBlICYmIHJvd0luZGV4ICUgMiA9PT0gMSkge1xuICAgICAgICBjbGFzc2VzLnB1c2goJ2VsLXRhYmxlX19yb3ctLXN0cmlwZWQnKTtcbiAgICAgIH1cbiAgICAgIHZhciByb3dDbGFzc05hbWUgPSB0aGlzLnRhYmxlLnJvd0NsYXNzTmFtZTtcbiAgICAgIGlmICh0eXBlb2Ygcm93Q2xhc3NOYW1lID09PSAnc3RyaW5nJykge1xuICAgICAgICBjbGFzc2VzLnB1c2gocm93Q2xhc3NOYW1lKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHJvd0NsYXNzTmFtZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjbGFzc2VzLnB1c2gocm93Q2xhc3NOYW1lLmNhbGwobnVsbCwge1xuICAgICAgICAgIHJvdzogcm93LFxuICAgICAgICAgIHJvd0luZGV4OiByb3dJbmRleFxuICAgICAgICB9KSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnN0b3JlLnN0YXRlcy5leHBhbmRSb3dzLmluZGV4T2Yocm93KSA+IC0xKSB7XG4gICAgICAgIGNsYXNzZXMucHVzaCgnZXhwYW5kZWQnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNsYXNzZXM7XG4gICAgfSxcbiAgICBnZXRDZWxsU3R5bGU6IGZ1bmN0aW9uIGdldENlbGxTdHlsZShyb3dJbmRleCwgY29sdW1uSW5kZXgsIHJvdywgY29sdW1uKSB7XG4gICAgICB2YXIgY2VsbFN0eWxlID0gdGhpcy50YWJsZS5jZWxsU3R5bGU7XG4gICAgICBpZiAodHlwZW9mIGNlbGxTdHlsZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gY2VsbFN0eWxlLmNhbGwobnVsbCwge1xuICAgICAgICAgIHJvd0luZGV4OiByb3dJbmRleCxcbiAgICAgICAgICBjb2x1bW5JbmRleDogY29sdW1uSW5kZXgsXG4gICAgICAgICAgcm93OiByb3csXG4gICAgICAgICAgY29sdW1uOiBjb2x1bW5cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gY2VsbFN0eWxlO1xuICAgIH0sXG4gICAgZ2V0Q2VsbENsYXNzOiBmdW5jdGlvbiBnZXRDZWxsQ2xhc3Mocm93SW5kZXgsIGNvbHVtbkluZGV4LCByb3csIGNvbHVtbikge1xuICAgICAgdmFyIGNsYXNzZXMgPSBbY29sdW1uLmlkLCBjb2x1bW4uYWxpZ24sIGNvbHVtbi5jbGFzc05hbWVdO1xuXG4gICAgICBpZiAodGhpcy5pc0NvbHVtbkhpZGRlbihjb2x1bW5JbmRleCkpIHtcbiAgICAgICAgY2xhc3Nlcy5wdXNoKCdpcy1oaWRkZW4nKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGNlbGxDbGFzc05hbWUgPSB0aGlzLnRhYmxlLmNlbGxDbGFzc05hbWU7XG4gICAgICBpZiAodHlwZW9mIGNlbGxDbGFzc05hbWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNsYXNzZXMucHVzaChjZWxsQ2xhc3NOYW1lKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGNlbGxDbGFzc05hbWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY2xhc3Nlcy5wdXNoKGNlbGxDbGFzc05hbWUuY2FsbChudWxsLCB7XG4gICAgICAgICAgcm93SW5kZXg6IHJvd0luZGV4LFxuICAgICAgICAgIGNvbHVtbkluZGV4OiBjb2x1bW5JbmRleCxcbiAgICAgICAgICByb3c6IHJvdyxcbiAgICAgICAgICBjb2x1bW46IGNvbHVtblxuICAgICAgICB9KSk7XG4gICAgICB9XG5cbiAgICAgIGNsYXNzZXMucHVzaCgnZWwtdGFibGVfX2NlbGwnKTtcblxuICAgICAgcmV0dXJuIGNsYXNzZXMuam9pbignICcpO1xuICAgIH0sXG4gICAgZ2V0Q29sc3BhblJlYWxXaWR0aDogZnVuY3Rpb24gZ2V0Q29sc3BhblJlYWxXaWR0aChjb2x1bW5zLCBjb2xzcGFuLCBpbmRleCkge1xuICAgICAgaWYgKGNvbHNwYW4gPCAxKSB7XG4gICAgICAgIHJldHVybiBjb2x1bW5zW2luZGV4XS5yZWFsV2lkdGg7XG4gICAgICB9XG4gICAgICB2YXIgd2lkdGhBcnIgPSBjb2x1bW5zLm1hcChmdW5jdGlvbiAoX3JlZjMpIHtcbiAgICAgICAgdmFyIHJlYWxXaWR0aCA9IF9yZWYzLnJlYWxXaWR0aDtcbiAgICAgICAgcmV0dXJuIHJlYWxXaWR0aDtcbiAgICAgIH0pLnNsaWNlKGluZGV4LCBpbmRleCArIGNvbHNwYW4pO1xuICAgICAgcmV0dXJuIHdpZHRoQXJyLnJlZHVjZShmdW5jdGlvbiAoYWNjLCB3aWR0aCkge1xuICAgICAgICByZXR1cm4gYWNjICsgd2lkdGg7XG4gICAgICB9LCAtMSk7XG4gICAgfSxcbiAgICBoYW5kbGVDZWxsTW91c2VFbnRlcjogZnVuY3Rpb24gaGFuZGxlQ2VsbE1vdXNlRW50ZXIoZXZlbnQsIHJvdykge1xuICAgICAgdmFyIHRhYmxlID0gdGhpcy50YWJsZTtcbiAgICAgIHZhciBjZWxsID0gZ2V0Q2VsbChldmVudCk7XG5cbiAgICAgIGlmIChjZWxsKSB7XG4gICAgICAgIHZhciBjb2x1bW4gPSBnZXRDb2x1bW5CeUNlbGwodGFibGUsIGNlbGwpO1xuICAgICAgICB2YXIgaG92ZXJTdGF0ZSA9IHRhYmxlLmhvdmVyU3RhdGUgPSB7IGNlbGw6IGNlbGwsIGNvbHVtbjogY29sdW1uLCByb3c6IHJvdyB9O1xuICAgICAgICB0YWJsZS4kZW1pdCgnY2VsbC1tb3VzZS1lbnRlcicsIGhvdmVyU3RhdGUucm93LCBob3ZlclN0YXRlLmNvbHVtbiwgaG92ZXJTdGF0ZS5jZWxsLCBldmVudCk7XG4gICAgICB9XG5cbiAgICAgIC8vIOWIpOaWreaYr+WQpnRleHQtb3ZlcmZsb3csIOWmguaenOaYr+WwseaYvuekunRvb2x0aXBcbiAgICAgIHZhciBjZWxsQ2hpbGQgPSBldmVudC50YXJnZXQucXVlcnlTZWxlY3RvcignLmNlbGwnKTtcbiAgICAgIGlmICghKE9iamVjdChkb21fW1wiaGFzQ2xhc3NcIl0pKGNlbGxDaGlsZCwgJ2VsLXRvb2x0aXAnKSAmJiBjZWxsQ2hpbGQuY2hpbGROb2Rlcy5sZW5ndGgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8vIHVzZSByYW5nZSB3aWR0aCBpbnN0ZWFkIG9mIHNjcm9sbFdpZHRoIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSB0ZXh0IGlzIG92ZXJmbG93aW5nXG4gICAgICAvLyB0byBhZGRyZXNzIGEgcG90ZW50aWFsIEZpcmVGb3ggYnVnOiBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDc0NTQzI2MzXG4gICAgICB2YXIgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICAgICAgcmFuZ2Uuc2V0U3RhcnQoY2VsbENoaWxkLCAwKTtcbiAgICAgIHJhbmdlLnNldEVuZChjZWxsQ2hpbGQsIGNlbGxDaGlsZC5jaGlsZE5vZGVzLmxlbmd0aCk7XG4gICAgICB2YXIgcmFuZ2VXaWR0aCA9IHJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgICAgdmFyIHBhZGRpbmcgPSAocGFyc2VJbnQoT2JqZWN0KGRvbV9bXCJnZXRTdHlsZVwiXSkoY2VsbENoaWxkLCAncGFkZGluZ0xlZnQnKSwgMTApIHx8IDApICsgKHBhcnNlSW50KE9iamVjdChkb21fW1wiZ2V0U3R5bGVcIl0pKGNlbGxDaGlsZCwgJ3BhZGRpbmdSaWdodCcpLCAxMCkgfHwgMCk7XG4gICAgICBpZiAoKHJhbmdlV2lkdGggKyBwYWRkaW5nID4gY2VsbENoaWxkLm9mZnNldFdpZHRoIHx8IGNlbGxDaGlsZC5zY3JvbGxXaWR0aCA+IGNlbGxDaGlsZC5vZmZzZXRXaWR0aCkgJiYgdGhpcy4kcmVmcy50b29sdGlwKSB7XG4gICAgICAgIHZhciB0b29sdGlwID0gdGhpcy4kcmVmcy50b29sdGlwO1xuICAgICAgICAvLyBUT0RPIOS8muW8lei1t+aVtOS4qiBUYWJsZSDnmoTph43mlrDmuLLmn5PvvIzpnIDopoHkvJjljJZcbiAgICAgICAgdGhpcy50b29sdGlwQ29udGVudCA9IGNlbGwuaW5uZXJUZXh0IHx8IGNlbGwudGV4dENvbnRlbnQ7XG4gICAgICAgIHRvb2x0aXAucmVmZXJlbmNlRWxtID0gY2VsbDtcbiAgICAgICAgdG9vbHRpcC4kcmVmcy5wb3BwZXIgJiYgKHRvb2x0aXAuJHJlZnMucG9wcGVyLnN0eWxlLmRpc3BsYXkgPSAnbm9uZScpO1xuICAgICAgICB0b29sdGlwLmRvRGVzdHJveSgpO1xuICAgICAgICB0b29sdGlwLnNldEV4cGVjdGVkU3RhdGUodHJ1ZSk7XG4gICAgICAgIHRoaXMuYWN0aXZhdGVUb29sdGlwKHRvb2x0aXApO1xuICAgICAgfVxuICAgIH0sXG4gICAgaGFuZGxlQ2VsbE1vdXNlTGVhdmU6IGZ1bmN0aW9uIGhhbmRsZUNlbGxNb3VzZUxlYXZlKGV2ZW50KSB7XG4gICAgICB2YXIgdG9vbHRpcCA9IHRoaXMuJHJlZnMudG9vbHRpcDtcbiAgICAgIGlmICh0b29sdGlwKSB7XG4gICAgICAgIHRvb2x0aXAuc2V0RXhwZWN0ZWRTdGF0ZShmYWxzZSk7XG4gICAgICAgIHRvb2x0aXAuaGFuZGxlQ2xvc2VQb3BwZXIoKTtcbiAgICAgIH1cbiAgICAgIHZhciBjZWxsID0gZ2V0Q2VsbChldmVudCk7XG4gICAgICBpZiAoIWNlbGwpIHJldHVybjtcblxuICAgICAgdmFyIG9sZEhvdmVyU3RhdGUgPSB0aGlzLnRhYmxlLmhvdmVyU3RhdGUgfHwge307XG4gICAgICB0aGlzLnRhYmxlLiRlbWl0KCdjZWxsLW1vdXNlLWxlYXZlJywgb2xkSG92ZXJTdGF0ZS5yb3csIG9sZEhvdmVyU3RhdGUuY29sdW1uLCBvbGRIb3ZlclN0YXRlLmNlbGwsIGV2ZW50KTtcbiAgICB9LFxuXG5cbiAgICBoYW5kbGVNb3VzZUVudGVyOiBkZWJvdW5jZV9kZWZhdWx0KCkoMzAsIGZ1bmN0aW9uIChpbmRleCkge1xuICAgICAgdGhpcy5zdG9yZS5jb21taXQoJ3NldEhvdmVyUm93JywgaW5kZXgpO1xuICAgIH0pLFxuXG4gICAgaGFuZGxlTW91c2VMZWF2ZTogZGVib3VuY2VfZGVmYXVsdCgpKDMwLCBmdW5jdGlvbiAoKSB7XG4gICAgICB0aGlzLnN0b3JlLmNvbW1pdCgnc2V0SG92ZXJSb3cnLCBudWxsKTtcbiAgICB9KSxcblxuICAgIGhhbmRsZUNvbnRleHRNZW51OiBmdW5jdGlvbiBoYW5kbGVDb250ZXh0TWVudShldmVudCwgcm93KSB7XG4gICAgICB0aGlzLmhhbmRsZUV2ZW50KGV2ZW50LCByb3csICdjb250ZXh0bWVudScpO1xuICAgIH0sXG4gICAgaGFuZGxlRG91YmxlQ2xpY2s6IGZ1bmN0aW9uIGhhbmRsZURvdWJsZUNsaWNrKGV2ZW50LCByb3cpIHtcbiAgICAgIHRoaXMuaGFuZGxlRXZlbnQoZXZlbnQsIHJvdywgJ2RibGNsaWNrJyk7XG4gICAgfSxcbiAgICBoYW5kbGVDbGljazogZnVuY3Rpb24gaGFuZGxlQ2xpY2soZXZlbnQsIHJvdykge1xuICAgICAgdGhpcy5zdG9yZS5jb21taXQoJ3NldEN1cnJlbnRSb3cnLCByb3cpO1xuICAgICAgdGhpcy5oYW5kbGVFdmVudChldmVudCwgcm93LCAnY2xpY2snKTtcbiAgICB9LFxuICAgIGhhbmRsZUV2ZW50OiBmdW5jdGlvbiBoYW5kbGVFdmVudChldmVudCwgcm93LCBuYW1lKSB7XG4gICAgICB2YXIgdGFibGUgPSB0aGlzLnRhYmxlO1xuICAgICAgdmFyIGNlbGwgPSBnZXRDZWxsKGV2ZW50KTtcbiAgICAgIHZhciBjb2x1bW4gPSB2b2lkIDA7XG4gICAgICBpZiAoY2VsbCkge1xuICAgICAgICBjb2x1bW4gPSBnZXRDb2x1bW5CeUNlbGwodGFibGUsIGNlbGwpO1xuICAgICAgICBpZiAoY29sdW1uKSB7XG4gICAgICAgICAgdGFibGUuJGVtaXQoJ2NlbGwtJyArIG5hbWUsIHJvdywgY29sdW1uLCBjZWxsLCBldmVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRhYmxlLiRlbWl0KCdyb3ctJyArIG5hbWUsIHJvdywgY29sdW1uLCBldmVudCk7XG4gICAgfSxcbiAgICByb3dSZW5kZXI6IGZ1bmN0aW9uIHJvd1JlbmRlcihyb3csICRpbmRleCwgdHJlZVJvd0RhdGEpIHtcbiAgICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgICB2YXIgaCA9IHRoaXMuJGNyZWF0ZUVsZW1lbnQ7XG4gICAgICB2YXIgdHJlZUluZGVudCA9IHRoaXMudHJlZUluZGVudCxcbiAgICAgICAgICBjb2x1bW5zID0gdGhpcy5jb2x1bW5zLFxuICAgICAgICAgIGZpcnN0RGVmYXVsdENvbHVtbkluZGV4ID0gdGhpcy5maXJzdERlZmF1bHRDb2x1bW5JbmRleDtcblxuICAgICAgdmFyIHJvd0NsYXNzZXMgPSB0aGlzLmdldFJvd0NsYXNzKHJvdywgJGluZGV4KTtcbiAgICAgIHZhciBkaXNwbGF5ID0gdHJ1ZTtcbiAgICAgIGlmICh0cmVlUm93RGF0YSkge1xuICAgICAgICByb3dDbGFzc2VzLnB1c2goJ2VsLXRhYmxlX19yb3ctLWxldmVsLScgKyB0cmVlUm93RGF0YS5sZXZlbCk7XG4gICAgICAgIGRpc3BsYXkgPSB0cmVlUm93RGF0YS5kaXNwbGF5O1xuICAgICAgfVxuICAgICAgLy8g5oyH5LukIHYtc2hvdyDkvJropobnm5Ygcm93LXN0eWxlIOS4rSBkaXNwbGF5XG4gICAgICAvLyDkvb/nlKggOnN0eWxlIOS7o+abvyB2LXNob3cgaHR0cHM6Ly9naXRodWIuY29tL0VsZW1lRkUvZWxlbWVudC9pc3N1ZXMvMTY5OTVcbiAgICAgIHZhciBkaXNwbGF5U3R5bGUgPSBkaXNwbGF5ID8gbnVsbCA6IHtcbiAgICAgICAgZGlzcGxheTogJ25vbmUnXG4gICAgICB9O1xuICAgICAgcmV0dXJuIGgodGFibGVfcm93LCB7XG4gICAgICAgIHN0eWxlOiBbZGlzcGxheVN0eWxlLCB0aGlzLmdldFJvd1N0eWxlKHJvdywgJGluZGV4KV0sXG4gICAgICAgICdjbGFzcyc6IHJvd0NsYXNzZXMsXG4gICAgICAgIGtleTogdGhpcy5nZXRLZXlPZlJvdyhyb3csICRpbmRleCksXG4gICAgICAgIG5hdGl2ZU9uOiB7XG4gICAgICAgICAgJ2RibGNsaWNrJzogZnVuY3Rpb24gZGJsY2xpY2soJGV2ZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gX3RoaXM0LmhhbmRsZURvdWJsZUNsaWNrKCRldmVudCwgcm93KTtcbiAgICAgICAgICB9LFxuICAgICAgICAgICdjbGljayc6IGZ1bmN0aW9uIGNsaWNrKCRldmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIF90aGlzNC5oYW5kbGVDbGljaygkZXZlbnQsIHJvdyk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICAnY29udGV4dG1lbnUnOiBmdW5jdGlvbiBjb250ZXh0bWVudSgkZXZlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBfdGhpczQuaGFuZGxlQ29udGV4dE1lbnUoJGV2ZW50LCByb3cpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgJ21vdXNlZW50ZXInOiBmdW5jdGlvbiBtb3VzZWVudGVyKF8pIHtcbiAgICAgICAgICAgIHJldHVybiBfdGhpczQuaGFuZGxlTW91c2VFbnRlcigkaW5kZXgpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgJ21vdXNlbGVhdmUnOiB0aGlzLmhhbmRsZU1vdXNlTGVhdmVcbiAgICAgICAgfSxcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICBjb2x1bW5zOiBjb2x1bW5zLFxuICAgICAgICAgIHJvdzogcm93LFxuICAgICAgICAgIGluZGV4OiAkaW5kZXgsXG4gICAgICAgICAgc3RvcmU6IHRoaXMuc3RvcmUsXG4gICAgICAgICAgY29udGV4dDogdGhpcy5jb250ZXh0IHx8IHRoaXMudGFibGUuJHZub2RlLmNvbnRleHQsXG4gICAgICAgICAgZmlyc3REZWZhdWx0Q29sdW1uSW5kZXg6IGZpcnN0RGVmYXVsdENvbHVtbkluZGV4LFxuICAgICAgICAgIHRyZWVSb3dEYXRhOiB0cmVlUm93RGF0YSxcbiAgICAgICAgICB0cmVlSW5kZW50OiB0cmVlSW5kZW50LFxuICAgICAgICAgIGNvbHVtbnNIaWRkZW46IHRoaXMuY29sdW1uc0hpZGRlbixcbiAgICAgICAgICBnZXRTcGFuOiB0aGlzLmdldFNwYW4sXG4gICAgICAgICAgZ2V0Q29sc3BhblJlYWxXaWR0aDogdGhpcy5nZXRDb2xzcGFuUmVhbFdpZHRoLFxuICAgICAgICAgIGdldENlbGxTdHlsZTogdGhpcy5nZXRDZWxsU3R5bGUsXG4gICAgICAgICAgZ2V0Q2VsbENsYXNzOiB0aGlzLmdldENlbGxDbGFzcyxcbiAgICAgICAgICBoYW5kbGVDZWxsTW91c2VFbnRlcjogdGhpcy5oYW5kbGVDZWxsTW91c2VFbnRlcixcbiAgICAgICAgICBoYW5kbGVDZWxsTW91c2VMZWF2ZTogdGhpcy5oYW5kbGVDZWxsTW91c2VMZWF2ZSxcbiAgICAgICAgICBpc1NlbGVjdGVkOiB0aGlzLnN0b3JlLmlzU2VsZWN0ZWQocm93KSxcbiAgICAgICAgICBpc0V4cGFuZGVkOiB0aGlzLnN0b3JlLnN0YXRlcy5leHBhbmRSb3dzLmluZGV4T2Yocm93KSA+IC0xLFxuICAgICAgICAgIGZpeGVkOiB0aGlzLmZpeGVkXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sXG4gICAgd3JhcHBlZFJvd1JlbmRlcjogZnVuY3Rpb24gd3JhcHBlZFJvd1JlbmRlcihyb3csICRpbmRleCkge1xuICAgICAgdmFyIF90aGlzNSA9IHRoaXM7XG5cbiAgICAgIHZhciBoID0gdGhpcy4kY3JlYXRlRWxlbWVudDtcblxuICAgICAgdmFyIHN0b3JlID0gdGhpcy5zdG9yZTtcbiAgICAgIHZhciBpc1Jvd0V4cGFuZGVkID0gc3RvcmUuaXNSb3dFeHBhbmRlZCxcbiAgICAgICAgICBhc3NlcnRSb3dLZXkgPSBzdG9yZS5hc3NlcnRSb3dLZXk7XG4gICAgICB2YXIgX3N0b3JlJHN0YXRlcyA9IHN0b3JlLnN0YXRlcyxcbiAgICAgICAgICB0cmVlRGF0YSA9IF9zdG9yZSRzdGF0ZXMudHJlZURhdGEsXG4gICAgICAgICAgbGF6eVRyZWVOb2RlTWFwID0gX3N0b3JlJHN0YXRlcy5sYXp5VHJlZU5vZGVNYXAsXG4gICAgICAgICAgY2hpbGRyZW5Db2x1bW5OYW1lID0gX3N0b3JlJHN0YXRlcy5jaGlsZHJlbkNvbHVtbk5hbWUsXG4gICAgICAgICAgcm93S2V5ID0gX3N0b3JlJHN0YXRlcy5yb3dLZXk7XG5cbiAgICAgIGlmICh0aGlzLmhhc0V4cGFuZENvbHVtbiAmJiBpc1Jvd0V4cGFuZGVkKHJvdykpIHtcbiAgICAgICAgdmFyIHJlbmRlckV4cGFuZGVkID0gdGhpcy50YWJsZS5yZW5kZXJFeHBhbmRlZDtcbiAgICAgICAgdmFyIHRyID0gdGhpcy5yb3dSZW5kZXIocm93LCAkaW5kZXgpO1xuICAgICAgICBpZiAoIXJlbmRlckV4cGFuZGVkKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignW0VsZW1lbnQgRXJyb3JdcmVuZGVyRXhwYW5kZWQgaXMgcmVxdWlyZWQuJyk7XG4gICAgICAgICAgcmV0dXJuIHRyO1xuICAgICAgICB9XG4gICAgICAgIC8vIOS9v+eUqOS6jOe7tOaVsOe7hO+8jOmBv+WFjeS/ruaUuSAkaW5kZXhcbiAgICAgICAgcmV0dXJuIFtbdHIsIGgoXG4gICAgICAgICAgJ3RyJyxcbiAgICAgICAgICB7IGtleTogJ2V4cGFuZGVkLXJvd19fJyArIHRyLmtleSB9LFxuICAgICAgICAgIFtoKFxuICAgICAgICAgICAgJ3RkJyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYXR0cnM6IHsgY29sc3BhbjogdGhpcy5jb2x1bW5zQ291bnQgfSxcbiAgICAgICAgICAgICAgJ2NsYXNzJzogJ2VsLXRhYmxlX19jZWxsIGVsLXRhYmxlX19leHBhbmRlZC1jZWxsJyB9LFxuICAgICAgICAgICAgW3JlbmRlckV4cGFuZGVkKHRoaXMuJGNyZWF0ZUVsZW1lbnQsIHsgcm93OiByb3csICRpbmRleDogJGluZGV4LCBzdG9yZTogdGhpcy5zdG9yZSB9KV1cbiAgICAgICAgICApXVxuICAgICAgICApXV07XG4gICAgICB9IGVsc2UgaWYgKE9iamVjdC5rZXlzKHRyZWVEYXRhKS5sZW5ndGgpIHtcbiAgICAgICAgYXNzZXJ0Um93S2V5KCk7XG4gICAgICAgIC8vIFRyZWVUYWJsZSDml7bvvIxyb3dLZXkg5b+F6aG755Sx55So5oi36K6+5a6a77yM5LiN5L2/55SoIGdldEtleU9mUm93IOiuoeeul1xuICAgICAgICAvLyDlnKjosIPnlKggcm93UmVuZGVyIOWHveaVsOaXtu+8jOS7jeeEtuS8muiuoeeulyByb3dLZXnvvIzkuI3lpKrlpb3nmoTmk43kvZxcbiAgICAgICAgdmFyIGtleSA9IGdldFJvd0lkZW50aXR5KHJvdywgcm93S2V5KTtcbiAgICAgICAgdmFyIGN1ciA9IHRyZWVEYXRhW2tleV07XG4gICAgICAgIHZhciB0cmVlUm93RGF0YSA9IG51bGw7XG4gICAgICAgIGlmIChjdXIpIHtcbiAgICAgICAgICB0cmVlUm93RGF0YSA9IHtcbiAgICAgICAgICAgIGV4cGFuZGVkOiBjdXIuZXhwYW5kZWQsXG4gICAgICAgICAgICBsZXZlbDogY3VyLmxldmVsLFxuICAgICAgICAgICAgZGlzcGxheTogdHJ1ZVxuICAgICAgICAgIH07XG4gICAgICAgICAgaWYgKHR5cGVvZiBjdXIubGF6eSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGN1ci5sb2FkZWQgPT09ICdib29sZWFuJyAmJiBjdXIubG9hZGVkKSB7XG4gICAgICAgICAgICAgIHRyZWVSb3dEYXRhLm5vTGF6eUNoaWxkcmVuID0gIShjdXIuY2hpbGRyZW4gJiYgY3VyLmNoaWxkcmVuLmxlbmd0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0cmVlUm93RGF0YS5sb2FkaW5nID0gY3VyLmxvYWRpbmc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHZhciB0bXAgPSBbdGhpcy5yb3dSZW5kZXIocm93LCAkaW5kZXgsIHRyZWVSb3dEYXRhKV07XG4gICAgICAgIC8vIOa4suafk+W1jOWll+aVsOaNrlxuICAgICAgICBpZiAoY3VyKSB7XG4gICAgICAgICAgLy8gY3VycmVudFJvdyDorrDlvZXnmoTmmK8gaW5kZXjvvIzmiYDku6Xov5jpnIDkuLvliqjlop7liqAgVHJlZVRhYmxlIOeahCBpbmRleFxuICAgICAgICAgIHZhciBpID0gMDtcbiAgICAgICAgICB2YXIgdHJhdmVyc2UgPSBmdW5jdGlvbiB0cmF2ZXJzZShjaGlsZHJlbiwgcGFyZW50KSB7XG4gICAgICAgICAgICBpZiAoIShjaGlsZHJlbiAmJiBjaGlsZHJlbi5sZW5ndGggJiYgcGFyZW50KSkgcmV0dXJuO1xuICAgICAgICAgICAgY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICAgICAgICAvLyDniLboioLngrnnmoQgZGlzcGxheSDnirbmgIHlvbHlk43lrZDoioLngrnnmoTmmL7npLrnirbmgIFcbiAgICAgICAgICAgICAgdmFyIGlubmVyVHJlZVJvd0RhdGEgPSB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogcGFyZW50LmRpc3BsYXkgJiYgcGFyZW50LmV4cGFuZGVkLFxuICAgICAgICAgICAgICAgIGxldmVsOiBwYXJlbnQubGV2ZWwgKyAxXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIHZhciBjaGlsZEtleSA9IGdldFJvd0lkZW50aXR5KG5vZGUsIHJvd0tleSk7XG4gICAgICAgICAgICAgIGlmIChjaGlsZEtleSA9PT0gdW5kZWZpbmVkIHx8IGNoaWxkS2V5ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdmb3IgbmVzdGVkIGRhdGEgaXRlbSwgcm93LWtleSBpcyByZXF1aXJlZC4nKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjdXIgPSB0YWJsZV9ib2R5X2V4dGVuZHMoe30sIHRyZWVEYXRhW2NoaWxkS2V5XSk7XG4gICAgICAgICAgICAgIC8vIOWvueS6juW9k+WJjeiKgueCue+8jOWIhuaIkOacieaXoOWtkOiKgueCueS4pOenjeaDheWGteOAglxuICAgICAgICAgICAgICAvLyDlpoLmnpzljIXlkKvlrZDoioLngrnnmoTvvIzorr7nva4gZXhwYW5kZWQg5bGe5oCn44CCXG4gICAgICAgICAgICAgIC8vIOWvueS6juWug+WtkOiKgueCueeahCBkaXNwbGF5IOWxnuaAp+eUseWug+acrOi6q+eahCBleHBhbmRlZCDkuI4gZGlzcGxheSDlhbHlkIzlhrPlrprjgIJcbiAgICAgICAgICAgICAgaWYgKGN1cikge1xuICAgICAgICAgICAgICAgIGlubmVyVHJlZVJvd0RhdGEuZXhwYW5kZWQgPSBjdXIuZXhwYW5kZWQ7XG4gICAgICAgICAgICAgICAgLy8g5oeS5Yqg6L2955qE5p+Q5Lqb6IqC54K577yMbGV2ZWwg5pyq55+lXG4gICAgICAgICAgICAgICAgY3VyLmxldmVsID0gY3VyLmxldmVsIHx8IGlubmVyVHJlZVJvd0RhdGEubGV2ZWw7XG4gICAgICAgICAgICAgICAgY3VyLmRpc3BsYXkgPSAhIShjdXIuZXhwYW5kZWQgJiYgaW5uZXJUcmVlUm93RGF0YS5kaXNwbGF5KTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGN1ci5sYXp5ID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY3VyLmxvYWRlZCA9PT0gJ2Jvb2xlYW4nICYmIGN1ci5sb2FkZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5uZXJUcmVlUm93RGF0YS5ub0xhenlDaGlsZHJlbiA9ICEoY3VyLmNoaWxkcmVuICYmIGN1ci5jaGlsZHJlbi5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgaW5uZXJUcmVlUm93RGF0YS5sb2FkaW5nID0gY3VyLmxvYWRpbmc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgdG1wLnB1c2goX3RoaXM1LnJvd1JlbmRlcihub2RlLCAkaW5kZXggKyBpLCBpbm5lclRyZWVSb3dEYXRhKSk7XG4gICAgICAgICAgICAgIGlmIChjdXIpIHtcbiAgICAgICAgICAgICAgICB2YXIgX25vZGVzID0gbGF6eVRyZWVOb2RlTWFwW2NoaWxkS2V5XSB8fCBub2RlW2NoaWxkcmVuQ29sdW1uTmFtZV07XG4gICAgICAgICAgICAgICAgdHJhdmVyc2UoX25vZGVzLCBjdXIpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9O1xuICAgICAgICAgIC8vIOWvueS6jiByb290IOiKgueCue+8jGRpc3BsYXkg5LiA5a6a5Li6IHRydWVcbiAgICAgICAgICBjdXIuZGlzcGxheSA9IHRydWU7XG4gICAgICAgICAgdmFyIG5vZGVzID0gbGF6eVRyZWVOb2RlTWFwW2tleV0gfHwgcm93W2NoaWxkcmVuQ29sdW1uTmFtZV07XG4gICAgICAgICAgdHJhdmVyc2Uobm9kZXMsIGN1cik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRtcDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJvd1JlbmRlcihyb3csICRpbmRleCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvdGFibGUvc3JjL2ZpbHRlci1wYW5lbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9N2YyYzkxOWYmXG52YXIgZmlsdGVyX3BhbmVsdnVlX3R5cGVfdGVtcGxhdGVfaWRfN2YyYzkxOWZfcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFwidHJhbnNpdGlvblwiLCB7IGF0dHJzOiB7IG5hbWU6IFwiZWwtem9vbS1pbi10b3BcIiB9IH0sIFtcbiAgICBfdm0ubXVsdGlwbGVcbiAgICAgID8gX2MoXG4gICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImNsaWNrb3V0c2lkZVwiLFxuICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1jbGlja291dHNpZGVcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLmhhbmRsZU91dHNpZGVDbGljayxcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcImhhbmRsZU91dHNpZGVDbGlja1wiXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0uc2hvd1BvcHBlcixcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcInNob3dQb3BwZXJcIlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtdGFibGUtZmlsdGVyXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFtcbiAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiBcImVsLXRhYmxlLWZpbHRlcl9fY29udGVudFwiIH0sXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgIFwiZWwtc2Nyb2xsYmFyXCIsXG4gICAgICAgICAgICAgICAgICB7IGF0dHJzOiB7IFwid3JhcC1jbGFzc1wiOiBcImVsLXRhYmxlLWZpbHRlcl9fd3JhcFwiIH0gfSxcbiAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgICAgXCJlbC1jaGVja2JveC1ncm91cFwiLFxuICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXRhYmxlLWZpbHRlcl9fY2hlY2tib3gtZ3JvdXBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0uZmlsdGVyZWRWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IGZ1bmN0aW9uKCQkdikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5maWx0ZXJlZFZhbHVlID0gJCR2XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwiZmlsdGVyZWRWYWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICBfdm0uX2woX3ZtLmZpbHRlcnMsIGZ1bmN0aW9uKGZpbHRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcImVsLWNoZWNrYm94XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHsga2V5OiBmaWx0ZXIudmFsdWUsIGF0dHJzOiB7IGxhYmVsOiBmaWx0ZXIudmFsdWUgfSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBbX3ZtLl92KF92bS5fcyhmaWx0ZXIudGV4dCkpXVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLXRhYmxlLWZpbHRlcl9fYm90dG9tXCIgfSwgW1xuICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGNsYXNzOiB7IFwiaXMtZGlzYWJsZWRcIjogX3ZtLmZpbHRlcmVkVmFsdWUubGVuZ3RoID09PSAwIH0sXG4gICAgICAgICAgICAgICAgICBhdHRyczogeyBkaXNhYmxlZDogX3ZtLmZpbHRlcmVkVmFsdWUubGVuZ3RoID09PSAwIH0sXG4gICAgICAgICAgICAgICAgICBvbjogeyBjbGljazogX3ZtLmhhbmRsZUNvbmZpcm0gfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW192bS5fdihfdm0uX3MoX3ZtLnQoXCJlbC50YWJsZS5jb25maXJtRmlsdGVyXCIpKSldXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIF9jKFwiYnV0dG9uXCIsIHsgb246IHsgY2xpY2s6IF92bS5oYW5kbGVSZXNldCB9IH0sIFtcbiAgICAgICAgICAgICAgICBfdm0uX3YoX3ZtLl9zKF92bS50KFwiZWwudGFibGUucmVzZXRGaWx0ZXJcIikpKVxuICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgXSlcbiAgICAgICAgICBdXG4gICAgICAgIClcbiAgICAgIDogX2MoXG4gICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImNsaWNrb3V0c2lkZVwiLFxuICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1jbGlja291dHNpZGVcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLmhhbmRsZU91dHNpZGVDbGljayxcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcImhhbmRsZU91dHNpZGVDbGlja1wiXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0uc2hvd1BvcHBlcixcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcInNob3dQb3BwZXJcIlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtdGFibGUtZmlsdGVyXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFtcbiAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICBcInVsXCIsXG4gICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwiZWwtdGFibGUtZmlsdGVyX19saXN0XCIgfSxcbiAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgXCJsaVwiLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC10YWJsZS1maWx0ZXJfX2xpc3QtaXRlbVwiLFxuICAgICAgICAgICAgICAgICAgICBjbGFzczoge1xuICAgICAgICAgICAgICAgICAgICAgIFwiaXMtYWN0aXZlXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICBfdm0uZmlsdGVyVmFsdWUgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLmZpbHRlclZhbHVlID09PSBudWxsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLmhhbmRsZVNlbGVjdChudWxsKVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIFtfdm0uX3YoX3ZtLl9zKF92bS50KFwiZWwudGFibGUuY2xlYXJGaWx0ZXJcIikpKV1cbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIF92bS5fbChfdm0uZmlsdGVycywgZnVuY3Rpb24oZmlsdGVyKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gX2MoXG4gICAgICAgICAgICAgICAgICAgIFwibGlcIixcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIGtleTogZmlsdGVyLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXRhYmxlLWZpbHRlcl9fbGlzdC1pdGVtXCIsXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IHsgXCJpcy1hY3RpdmVcIjogX3ZtLmlzQWN0aXZlKGZpbHRlcikgfSxcbiAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBsYWJlbDogZmlsdGVyLnZhbHVlIH0sXG4gICAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLmhhbmRsZVNlbGVjdChmaWx0ZXIudmFsdWUpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBbX3ZtLl92KF92bS5fcyhmaWx0ZXIudGV4dCkpXVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIClcbiAgICAgICAgICBdXG4gICAgICAgIClcbiAgXSlcbn1cbnZhciBmaWx0ZXJfcGFuZWx2dWVfdHlwZV90ZW1wbGF0ZV9pZF83ZjJjOTE5Zl9zdGF0aWNSZW5kZXJGbnMgPSBbXVxuZmlsdGVyX3BhbmVsdnVlX3R5cGVfdGVtcGxhdGVfaWRfN2YyYzkxOWZfcmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy90YWJsZS9zcmMvZmlsdGVyLXBhbmVsLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03ZjJjOTE5ZiZcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy90YWJsZS9zcmMvZHJvcGRvd24uanNcblxudmFyIGRyb3Bkb3ducyA9IFtdO1xuXG4hZXh0ZXJuYWxfdnVlX2RlZmF1bHQuYS5wcm90b3R5cGUuJGlzU2VydmVyICYmIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKGV2ZW50KSB7XG4gIGRyb3Bkb3ducy5mb3JFYWNoKGZ1bmN0aW9uIChkcm9wZG93bikge1xuICAgIHZhciB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG4gICAgaWYgKCFkcm9wZG93biB8fCAhZHJvcGRvd24uJGVsKSByZXR1cm47XG4gICAgaWYgKHRhcmdldCA9PT0gZHJvcGRvd24uJGVsIHx8IGRyb3Bkb3duLiRlbC5jb250YWlucyh0YXJnZXQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGRyb3Bkb3duLmhhbmRsZU91dHNpZGVDbGljayAmJiBkcm9wZG93bi5oYW5kbGVPdXRzaWRlQ2xpY2soZXZlbnQpO1xuICB9KTtcbn0pO1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfZHJvcGRvd24gPSAoe1xuICBvcGVuOiBmdW5jdGlvbiBvcGVuKGluc3RhbmNlKSB7XG4gICAgaWYgKGluc3RhbmNlKSB7XG4gICAgICBkcm9wZG93bnMucHVzaChpbnN0YW5jZSk7XG4gICAgfVxuICB9LFxuICBjbG9zZTogZnVuY3Rpb24gY2xvc2UoaW5zdGFuY2UpIHtcbiAgICB2YXIgaW5kZXggPSBkcm9wZG93bnMuaW5kZXhPZihpbnN0YW5jZSk7XG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgZHJvcGRvd25zLnNwbGljZShpbnN0YW5jZSwgMSk7XG4gICAgfVxuICB9XG59KTtcbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJlbGVtZW50LXVpL2xpYi9jaGVja2JveC1ncm91cFwiXG52YXIgY2hlY2tib3hfZ3JvdXBfID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMik7XG52YXIgY2hlY2tib3hfZ3JvdXBfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oY2hlY2tib3hfZ3JvdXBfKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvdGFibGUvc3JjL2ZpbHRlci1wYW5lbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuXG5cblxuXG5cblxuXG5cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgZmlsdGVyX3BhbmVsdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbmFtZTogJ0VsVGFibGVGaWx0ZXJQYW5lbCcsXG5cbiAgbWl4aW5zOiBbdnVlX3BvcHBlcl9kZWZhdWx0LmEsIGxvY2FsZV9kZWZhdWx0LmFdLFxuXG4gIGRpcmVjdGl2ZXM6IHtcbiAgICBDbGlja291dHNpZGU6IGNsaWNrb3V0c2lkZV9kZWZhdWx0LmFcbiAgfSxcblxuICBjb21wb25lbnRzOiB7XG4gICAgRWxDaGVja2JveDogY2hlY2tib3hfZGVmYXVsdC5hLFxuICAgIEVsQ2hlY2tib3hHcm91cDogY2hlY2tib3hfZ3JvdXBfZGVmYXVsdC5hLFxuICAgIEVsU2Nyb2xsYmFyOiBzY3JvbGxiYXJfZGVmYXVsdC5hXG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBwbGFjZW1lbnQ6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdib3R0b20tZW5kJ1xuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgaXNBY3RpdmU6IGZ1bmN0aW9uIGlzQWN0aXZlKGZpbHRlcikge1xuICAgICAgcmV0dXJuIGZpbHRlci52YWx1ZSA9PT0gdGhpcy5maWx0ZXJWYWx1ZTtcbiAgICB9LFxuICAgIGhhbmRsZU91dHNpZGVDbGljazogZnVuY3Rpb24gaGFuZGxlT3V0c2lkZUNsaWNrKCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzLnNob3dQb3BwZXIgPSBmYWxzZTtcbiAgICAgIH0sIDE2KTtcbiAgICB9LFxuICAgIGhhbmRsZUNvbmZpcm06IGZ1bmN0aW9uIGhhbmRsZUNvbmZpcm0oKSB7XG4gICAgICB0aGlzLmNvbmZpcm1GaWx0ZXIodGhpcy5maWx0ZXJlZFZhbHVlKTtcbiAgICAgIHRoaXMuaGFuZGxlT3V0c2lkZUNsaWNrKCk7XG4gICAgfSxcbiAgICBoYW5kbGVSZXNldDogZnVuY3Rpb24gaGFuZGxlUmVzZXQoKSB7XG4gICAgICB0aGlzLmZpbHRlcmVkVmFsdWUgPSBbXTtcbiAgICAgIHRoaXMuY29uZmlybUZpbHRlcih0aGlzLmZpbHRlcmVkVmFsdWUpO1xuICAgICAgdGhpcy5oYW5kbGVPdXRzaWRlQ2xpY2soKTtcbiAgICB9LFxuICAgIGhhbmRsZVNlbGVjdDogZnVuY3Rpb24gaGFuZGxlU2VsZWN0KGZpbHRlclZhbHVlKSB7XG4gICAgICB0aGlzLmZpbHRlclZhbHVlID0gZmlsdGVyVmFsdWU7XG5cbiAgICAgIGlmICh0eXBlb2YgZmlsdGVyVmFsdWUgIT09ICd1bmRlZmluZWQnICYmIGZpbHRlclZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuY29uZmlybUZpbHRlcih0aGlzLmZpbHRlcmVkVmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jb25maXJtRmlsdGVyKFtdKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5oYW5kbGVPdXRzaWRlQ2xpY2soKTtcbiAgICB9LFxuICAgIGNvbmZpcm1GaWx0ZXI6IGZ1bmN0aW9uIGNvbmZpcm1GaWx0ZXIoZmlsdGVyZWRWYWx1ZSkge1xuICAgICAgdGhpcy50YWJsZS5zdG9yZS5jb21taXQoJ2ZpbHRlckNoYW5nZScsIHtcbiAgICAgICAgY29sdW1uOiB0aGlzLmNvbHVtbixcbiAgICAgICAgdmFsdWVzOiBmaWx0ZXJlZFZhbHVlXG4gICAgICB9KTtcbiAgICAgIHRoaXMudGFibGUuc3RvcmUudXBkYXRlQWxsU2VsZWN0ZWQoKTtcbiAgICB9XG4gIH0sXG5cbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdGFibGU6IG51bGwsXG4gICAgICBjZWxsOiBudWxsLFxuICAgICAgY29sdW1uOiBudWxsXG4gICAgfTtcbiAgfSxcblxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZmlsdGVyczogZnVuY3Rpb24gZmlsdGVycygpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbHVtbiAmJiB0aGlzLmNvbHVtbi5maWx0ZXJzO1xuICAgIH0sXG5cblxuICAgIGZpbHRlclZhbHVlOiB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLmNvbHVtbi5maWx0ZXJlZFZhbHVlIHx8IFtdKVswXTtcbiAgICAgIH0sXG4gICAgICBzZXQ6IGZ1bmN0aW9uIHNldCh2YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5maWx0ZXJlZFZhbHVlKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRWYWx1ZS5zcGxpY2UoMCwgMSwgdmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlcmVkVmFsdWUuc3BsaWNlKDAsIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmaWx0ZXJlZFZhbHVlOiB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgaWYgKHRoaXMuY29sdW1uKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uLmZpbHRlcmVkVmFsdWUgfHwgW107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfSxcbiAgICAgIHNldDogZnVuY3Rpb24gc2V0KHZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbHVtbikge1xuICAgICAgICAgIHRoaXMuY29sdW1uLmZpbHRlcmVkVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBtdWx0aXBsZTogZnVuY3Rpb24gbXVsdGlwbGUoKSB7XG4gICAgICBpZiAodGhpcy5jb2x1bW4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uLmZpbHRlck11bHRpcGxlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICB0aGlzLnBvcHBlckVsbSA9IHRoaXMuJGVsO1xuICAgIHRoaXMucmVmZXJlbmNlRWxtID0gdGhpcy5jZWxsO1xuICAgIHRoaXMudGFibGUuYm9keVdyYXBwZXIuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMyLnVwZGF0ZVBvcHBlcigpO1xuICAgIH0pO1xuXG4gICAgdGhpcy4kd2F0Y2goJ3Nob3dQb3BwZXInLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGlmIChfdGhpczIuY29sdW1uKSBfdGhpczIuY29sdW1uLmZpbHRlck9wZW5lZCA9IHZhbHVlO1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIHNyY19kcm9wZG93bi5vcGVuKF90aGlzMik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzcmNfZHJvcGRvd24uY2xvc2UoX3RoaXMyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHNob3dQb3BwZXI6IGZ1bmN0aW9uIHNob3dQb3BwZXIodmFsKSB7XG4gICAgICBpZiAodmFsID09PSB0cnVlICYmIHBhcnNlSW50KHRoaXMucG9wcGVySlMuX3BvcHBlci5zdHlsZS56SW5kZXgsIDEwKSA8IHBvcHVwX1tcIlBvcHVwTWFuYWdlclwiXS56SW5kZXgpIHtcbiAgICAgICAgdGhpcy5wb3BwZXJKUy5fcG9wcGVyLnN0eWxlLnpJbmRleCA9IHBvcHVwX1tcIlBvcHVwTWFuYWdlclwiXS5uZXh0WkluZGV4KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdGFibGUvc3JjL2ZpbHRlci1wYW5lbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX2ZpbHRlcl9wYW5lbHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChmaWx0ZXJfcGFuZWx2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdGFibGUvc3JjL2ZpbHRlci1wYW5lbC52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBmaWx0ZXJfcGFuZWxfY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBzcmNfZmlsdGVyX3BhbmVsdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICBmaWx0ZXJfcGFuZWx2dWVfdHlwZV90ZW1wbGF0ZV9pZF83ZjJjOTE5Zl9yZW5kZXIsXG4gIGZpbHRlcl9wYW5lbHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzdmMmM5MTlmX3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgZmlsdGVyX3BhbmVsX2FwaTsgfVxuZmlsdGVyX3BhbmVsX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvdGFibGUvc3JjL2ZpbHRlci1wYW5lbC52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgZmlsdGVyX3BhbmVsID0gKGZpbHRlcl9wYW5lbF9jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3RhYmxlL3NyYy90YWJsZS1oZWFkZXIuanNcbnZhciB0YWJsZV9oZWFkZXJfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XG5cblxuXG5cblxuXG5cblxudmFyIGdldEFsbENvbHVtbnMgPSBmdW5jdGlvbiBnZXRBbGxDb2x1bW5zKGNvbHVtbnMpIHtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBjb2x1bW5zLmZvckVhY2goZnVuY3Rpb24gKGNvbHVtbikge1xuICAgIGlmIChjb2x1bW4uY2hpbGRyZW4pIHtcbiAgICAgIHJlc3VsdC5wdXNoKGNvbHVtbik7XG4gICAgICByZXN1bHQucHVzaC5hcHBseShyZXN1bHQsIGdldEFsbENvbHVtbnMoY29sdW1uLmNoaWxkcmVuKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdC5wdXNoKGNvbHVtbik7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbnZhciBjb252ZXJ0VG9Sb3dzID0gZnVuY3Rpb24gY29udmVydFRvUm93cyhvcmlnaW5Db2x1bW5zKSB7XG4gIHZhciBtYXhMZXZlbCA9IDE7XG4gIHZhciB0cmF2ZXJzZSA9IGZ1bmN0aW9uIHRyYXZlcnNlKGNvbHVtbiwgcGFyZW50KSB7XG4gICAgaWYgKHBhcmVudCkge1xuICAgICAgY29sdW1uLmxldmVsID0gcGFyZW50LmxldmVsICsgMTtcbiAgICAgIGlmIChtYXhMZXZlbCA8IGNvbHVtbi5sZXZlbCkge1xuICAgICAgICBtYXhMZXZlbCA9IGNvbHVtbi5sZXZlbDtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNvbHVtbi5jaGlsZHJlbikge1xuICAgICAgdmFyIGNvbFNwYW4gPSAwO1xuICAgICAgY29sdW1uLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24gKHN1YkNvbHVtbikge1xuICAgICAgICB0cmF2ZXJzZShzdWJDb2x1bW4sIGNvbHVtbik7XG4gICAgICAgIGNvbFNwYW4gKz0gc3ViQ29sdW1uLmNvbFNwYW47XG4gICAgICB9KTtcbiAgICAgIGNvbHVtbi5jb2xTcGFuID0gY29sU3BhbjtcbiAgICB9IGVsc2Uge1xuICAgICAgY29sdW1uLmNvbFNwYW4gPSAxO1xuICAgIH1cbiAgfTtcblxuICBvcmlnaW5Db2x1bW5zLmZvckVhY2goZnVuY3Rpb24gKGNvbHVtbikge1xuICAgIGNvbHVtbi5sZXZlbCA9IDE7XG4gICAgdHJhdmVyc2UoY29sdW1uKTtcbiAgfSk7XG5cbiAgdmFyIHJvd3MgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXhMZXZlbDsgaSsrKSB7XG4gICAgcm93cy5wdXNoKFtdKTtcbiAgfVxuXG4gIHZhciBhbGxDb2x1bW5zID0gZ2V0QWxsQ29sdW1ucyhvcmlnaW5Db2x1bW5zKTtcblxuICBhbGxDb2x1bW5zLmZvckVhY2goZnVuY3Rpb24gKGNvbHVtbikge1xuICAgIGlmICghY29sdW1uLmNoaWxkcmVuKSB7XG4gICAgICBjb2x1bW4ucm93U3BhbiA9IG1heExldmVsIC0gY29sdW1uLmxldmVsICsgMTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29sdW1uLnJvd1NwYW4gPSAxO1xuICAgIH1cbiAgICByb3dzW2NvbHVtbi5sZXZlbCAtIDFdLnB1c2goY29sdW1uKTtcbiAgfSk7XG5cbiAgcmV0dXJuIHJvd3M7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciB0YWJsZV9oZWFkZXIgPSAoe1xuICBuYW1lOiAnRWxUYWJsZUhlYWRlcicsXG5cbiAgbWl4aW5zOiBbbGF5b3V0X29ic2VydmVyXSxcblxuICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcihoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHZhciBvcmlnaW5Db2x1bW5zID0gdGhpcy5zdG9yZS5zdGF0ZXMub3JpZ2luQ29sdW1ucztcbiAgICB2YXIgY29sdW1uUm93cyA9IGNvbnZlcnRUb1Jvd3Mob3JpZ2luQ29sdW1ucywgdGhpcy5jb2x1bW5zKTtcbiAgICAvLyDmmK/lkKbmi6XmnInlpJrnuqfooajlpLRcbiAgICB2YXIgaXNHcm91cCA9IGNvbHVtblJvd3MubGVuZ3RoID4gMTtcbiAgICBpZiAoaXNHcm91cCkgdGhpcy4kcGFyZW50LmlzR3JvdXAgPSB0cnVlO1xuICAgIHJldHVybiBoKFxuICAgICAgJ3RhYmxlJyxcbiAgICAgIHtcbiAgICAgICAgJ2NsYXNzJzogJ2VsLXRhYmxlX19oZWFkZXInLFxuICAgICAgICBhdHRyczogeyBjZWxsc3BhY2luZzogJzAnLFxuICAgICAgICAgIGNlbGxwYWRkaW5nOiAnMCcsXG4gICAgICAgICAgYm9yZGVyOiAnMCcgfVxuICAgICAgfSxcbiAgICAgIFtoKCdjb2xncm91cCcsIFt0aGlzLmNvbHVtbnMubWFwKGZ1bmN0aW9uIChjb2x1bW4pIHtcbiAgICAgICAgcmV0dXJuIGgoJ2NvbCcsIHtcbiAgICAgICAgICBhdHRyczogeyBuYW1lOiBjb2x1bW4uaWQgfSxcbiAgICAgICAgICBrZXk6IGNvbHVtbi5pZCB9KTtcbiAgICAgIH0pLCB0aGlzLmhhc0d1dHRlciA/IGgoJ2NvbCcsIHtcbiAgICAgICAgYXR0cnM6IHsgbmFtZTogJ2d1dHRlcicgfVxuICAgICAgfSkgOiAnJ10pLCBoKFxuICAgICAgICAndGhlYWQnLFxuICAgICAgICB7ICdjbGFzcyc6IFt7ICdpcy1ncm91cCc6IGlzR3JvdXAsICdoYXMtZ3V0dGVyJzogdGhpcy5oYXNHdXR0ZXIgfV0gfSxcbiAgICAgICAgW3RoaXMuX2woY29sdW1uUm93cywgZnVuY3Rpb24gKGNvbHVtbnMsIHJvd0luZGV4KSB7XG4gICAgICAgICAgcmV0dXJuIGgoXG4gICAgICAgICAgICAndHInLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzdHlsZTogX3RoaXMuZ2V0SGVhZGVyUm93U3R5bGUocm93SW5kZXgpLFxuICAgICAgICAgICAgICAnY2xhc3MnOiBfdGhpcy5nZXRIZWFkZXJSb3dDbGFzcyhyb3dJbmRleClcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbY29sdW1ucy5tYXAoZnVuY3Rpb24gKGNvbHVtbiwgY2VsbEluZGV4KSB7XG4gICAgICAgICAgICAgIHJldHVybiBoKFxuICAgICAgICAgICAgICAgICd0aCcsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgY29sc3BhbjogY29sdW1uLmNvbFNwYW4sXG4gICAgICAgICAgICAgICAgICAgIHJvd3NwYW46IGNvbHVtbi5yb3dTcGFuXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgJ21vdXNlbW92ZSc6IGZ1bmN0aW9uIG1vdXNlbW92ZSgkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMuaGFuZGxlTW91c2VNb3ZlKCRldmVudCwgY29sdW1uKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgJ21vdXNlb3V0JzogX3RoaXMuaGFuZGxlTW91c2VPdXQsXG4gICAgICAgICAgICAgICAgICAgICdtb3VzZWRvd24nOiBmdW5jdGlvbiBtb3VzZWRvd24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLmhhbmRsZU1vdXNlRG93bigkZXZlbnQsIGNvbHVtbik7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICdjbGljayc6IGZ1bmN0aW9uIGNsaWNrKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcy5oYW5kbGVIZWFkZXJDbGljaygkZXZlbnQsIGNvbHVtbik7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICdjb250ZXh0bWVudSc6IGZ1bmN0aW9uIGNvbnRleHRtZW51KCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcy5oYW5kbGVIZWFkZXJDb250ZXh0TWVudSgkZXZlbnQsIGNvbHVtbik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICAgIHN0eWxlOiBfdGhpcy5nZXRIZWFkZXJDZWxsU3R5bGUocm93SW5kZXgsIGNlbGxJbmRleCwgY29sdW1ucywgY29sdW1uKSxcbiAgICAgICAgICAgICAgICAgICdjbGFzcyc6IF90aGlzLmdldEhlYWRlckNlbGxDbGFzcyhyb3dJbmRleCwgY2VsbEluZGV4LCBjb2x1bW5zLCBjb2x1bW4pLFxuICAgICAgICAgICAgICAgICAga2V5OiBjb2x1bW4uaWQgfSxcbiAgICAgICAgICAgICAgICBbaChcbiAgICAgICAgICAgICAgICAgICdkaXYnLFxuICAgICAgICAgICAgICAgICAgeyAnY2xhc3MnOiBbJ2NlbGwnLCBjb2x1bW4uZmlsdGVyZWRWYWx1ZSAmJiBjb2x1bW4uZmlsdGVyZWRWYWx1ZS5sZW5ndGggPiAwID8gJ2hpZ2hsaWdodCcgOiAnJywgY29sdW1uLmxhYmVsQ2xhc3NOYW1lXSB9LFxuICAgICAgICAgICAgICAgICAgW2NvbHVtbi5yZW5kZXJIZWFkZXIgPyBjb2x1bW4ucmVuZGVySGVhZGVyLmNhbGwoX3RoaXMuX3JlbmRlclByb3h5LCBoLCB7IGNvbHVtbjogY29sdW1uLCAkaW5kZXg6IGNlbGxJbmRleCwgc3RvcmU6IF90aGlzLnN0b3JlLCBfc2VsZjogX3RoaXMuJHBhcmVudC4kdm5vZGUuY29udGV4dCB9KSA6IGNvbHVtbi5sYWJlbCwgY29sdW1uLnNvcnRhYmxlID8gaChcbiAgICAgICAgICAgICAgICAgICAgJ3NwYW4nLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgJ2NsYXNzJzogJ2NhcmV0LXdyYXBwZXInLFxuICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnY2xpY2snOiBmdW5jdGlvbiBjbGljaygkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLmhhbmRsZVNvcnRDbGljaygkZXZlbnQsIGNvbHVtbik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBbaCgnaScsIHsgJ2NsYXNzJzogJ3NvcnQtY2FyZXQgYXNjZW5kaW5nJyxcbiAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2NsaWNrJzogZnVuY3Rpb24gY2xpY2soJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcy5oYW5kbGVTb3J0Q2xpY2soJGV2ZW50LCBjb2x1bW4sICdhc2NlbmRpbmcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pLCBoKCdpJywgeyAnY2xhc3MnOiAnc29ydC1jYXJldCBkZXNjZW5kaW5nJyxcbiAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2NsaWNrJzogZnVuY3Rpb24gY2xpY2soJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcy5oYW5kbGVTb3J0Q2xpY2soJGV2ZW50LCBjb2x1bW4sICdkZXNjZW5kaW5nJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KV1cbiAgICAgICAgICAgICAgICAgICkgOiAnJywgY29sdW1uLmZpbHRlcmFibGUgPyBoKFxuICAgICAgICAgICAgICAgICAgICAnc3BhbicsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAnY2xhc3MnOiAnZWwtdGFibGVfX2NvbHVtbi1maWx0ZXItdHJpZ2dlcicsXG4gICAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdjbGljayc6IGZ1bmN0aW9uIGNsaWNrKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMuaGFuZGxlRmlsdGVyQ2xpY2soJGV2ZW50LCBjb2x1bW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgW2goJ2knLCB7ICdjbGFzcyc6IFsnZWwtaWNvbi1hcnJvdy1kb3duJywgY29sdW1uLmZpbHRlck9wZW5lZCA/ICdlbC1pY29uLWFycm93LXVwJyA6ICcnXSB9KV1cbiAgICAgICAgICAgICAgICAgICkgOiAnJ11cbiAgICAgICAgICAgICAgICApXVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSksIF90aGlzLmhhc0d1dHRlciA/IGgoJ3RoJywgeyAnY2xhc3MnOiAnZWwtdGFibGVfX2NlbGwgZ3V0dGVyJyB9KSA6ICcnXVxuICAgICAgICAgICk7XG4gICAgICAgIH0pXVxuICAgICAgKV1cbiAgICApO1xuICB9LFxuXG5cbiAgcHJvcHM6IHtcbiAgICBmaXhlZDogU3RyaW5nLFxuICAgIHN0b3JlOiB7XG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAgYm9yZGVyOiBCb29sZWFuLFxuICAgIGRlZmF1bHRTb3J0OiB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICBkZWZhdWx0OiBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwcm9wOiAnJyxcbiAgICAgICAgICBvcmRlcjogJydcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgY29tcG9uZW50czoge1xuICAgIEVsQ2hlY2tib3g6IGNoZWNrYm94X2RlZmF1bHQuYVxuICB9LFxuXG4gIGNvbXB1dGVkOiB0YWJsZV9oZWFkZXJfZXh0ZW5kcyh7XG4gICAgdGFibGU6IGZ1bmN0aW9uIHRhYmxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHBhcmVudDtcbiAgICB9LFxuICAgIGhhc0d1dHRlcjogZnVuY3Rpb24gaGFzR3V0dGVyKCkge1xuICAgICAgcmV0dXJuICF0aGlzLmZpeGVkICYmIHRoaXMudGFibGVMYXlvdXQuZ3V0dGVyV2lkdGg7XG4gICAgfVxuICB9LCBtYXBTdGF0ZXMoe1xuICAgIGNvbHVtbnM6ICdjb2x1bW5zJyxcbiAgICBpc0FsbFNlbGVjdGVkOiAnaXNBbGxTZWxlY3RlZCcsXG4gICAgbGVmdEZpeGVkTGVhZkNvdW50OiAnZml4ZWRMZWFmQ29sdW1uc0xlbmd0aCcsXG4gICAgcmlnaHRGaXhlZExlYWZDb3VudDogJ3JpZ2h0Rml4ZWRMZWFmQ29sdW1uc0xlbmd0aCcsXG4gICAgY29sdW1uc0NvdW50OiBmdW5jdGlvbiBjb2x1bW5zQ291bnQoc3RhdGVzKSB7XG4gICAgICByZXR1cm4gc3RhdGVzLmNvbHVtbnMubGVuZ3RoO1xuICAgIH0sXG4gICAgbGVmdEZpeGVkQ291bnQ6IGZ1bmN0aW9uIGxlZnRGaXhlZENvdW50KHN0YXRlcykge1xuICAgICAgcmV0dXJuIHN0YXRlcy5maXhlZENvbHVtbnMubGVuZ3RoO1xuICAgIH0sXG4gICAgcmlnaHRGaXhlZENvdW50OiBmdW5jdGlvbiByaWdodEZpeGVkQ291bnQoc3RhdGVzKSB7XG4gICAgICByZXR1cm4gc3RhdGVzLnJpZ2h0Rml4ZWRDb2x1bW5zLmxlbmd0aDtcbiAgICB9XG4gIH0pKSxcblxuICBjcmVhdGVkOiBmdW5jdGlvbiBjcmVhdGVkKCkge1xuICAgIHRoaXMuZmlsdGVyUGFuZWxzID0ge307XG4gIH0sXG4gIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAvLyBuZXh0VGljayDmmK/mnInlv4XopoHnmoQgaHR0cHM6Ly9naXRodWIuY29tL0VsZW1lRkUvZWxlbWVudC9wdWxsLzExMzExXG4gICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIF9kZWZhdWx0U29ydCA9IF90aGlzMi5kZWZhdWx0U29ydCxcbiAgICAgICAgICBwcm9wID0gX2RlZmF1bHRTb3J0LnByb3AsXG4gICAgICAgICAgb3JkZXIgPSBfZGVmYXVsdFNvcnQub3JkZXI7XG5cbiAgICAgIHZhciBpbml0ID0gdHJ1ZTtcbiAgICAgIF90aGlzMi5zdG9yZS5jb21taXQoJ3NvcnQnLCB7IHByb3A6IHByb3AsIG9yZGVyOiBvcmRlciwgaW5pdDogaW5pdCB9KTtcbiAgICB9KTtcbiAgfSxcbiAgYmVmb3JlRGVzdHJveTogZnVuY3Rpb24gYmVmb3JlRGVzdHJveSgpIHtcbiAgICB2YXIgcGFuZWxzID0gdGhpcy5maWx0ZXJQYW5lbHM7XG4gICAgZm9yICh2YXIgcHJvcCBpbiBwYW5lbHMpIHtcbiAgICAgIGlmIChwYW5lbHMuaGFzT3duUHJvcGVydHkocHJvcCkgJiYgcGFuZWxzW3Byb3BdKSB7XG4gICAgICAgIHBhbmVsc1twcm9wXS4kZGVzdHJveSh0cnVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cblxuICBtZXRob2RzOiB7XG4gICAgaXNDZWxsSGlkZGVuOiBmdW5jdGlvbiBpc0NlbGxIaWRkZW4oaW5kZXgsIGNvbHVtbnMpIHtcbiAgICAgIHZhciBzdGFydCA9IDA7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGluZGV4OyBpKyspIHtcbiAgICAgICAgc3RhcnQgKz0gY29sdW1uc1tpXS5jb2xTcGFuO1xuICAgICAgfVxuICAgICAgdmFyIGFmdGVyID0gc3RhcnQgKyBjb2x1bW5zW2luZGV4XS5jb2xTcGFuIC0gMTtcbiAgICAgIGlmICh0aGlzLmZpeGVkID09PSB0cnVlIHx8IHRoaXMuZml4ZWQgPT09ICdsZWZ0Jykge1xuICAgICAgICByZXR1cm4gYWZ0ZXIgPj0gdGhpcy5sZWZ0Rml4ZWRMZWFmQ291bnQ7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuZml4ZWQgPT09ICdyaWdodCcpIHtcbiAgICAgICAgcmV0dXJuIHN0YXJ0IDwgdGhpcy5jb2x1bW5zQ291bnQgLSB0aGlzLnJpZ2h0Rml4ZWRMZWFmQ291bnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYWZ0ZXIgPCB0aGlzLmxlZnRGaXhlZExlYWZDb3VudCB8fCBzdGFydCA+PSB0aGlzLmNvbHVtbnNDb3VudCAtIHRoaXMucmlnaHRGaXhlZExlYWZDb3VudDtcbiAgICAgIH1cbiAgICB9LFxuICAgIGdldEhlYWRlclJvd1N0eWxlOiBmdW5jdGlvbiBnZXRIZWFkZXJSb3dTdHlsZShyb3dJbmRleCkge1xuICAgICAgdmFyIGhlYWRlclJvd1N0eWxlID0gdGhpcy50YWJsZS5oZWFkZXJSb3dTdHlsZTtcbiAgICAgIGlmICh0eXBlb2YgaGVhZGVyUm93U3R5bGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIGhlYWRlclJvd1N0eWxlLmNhbGwobnVsbCwgeyByb3dJbmRleDogcm93SW5kZXggfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gaGVhZGVyUm93U3R5bGU7XG4gICAgfSxcbiAgICBnZXRIZWFkZXJSb3dDbGFzczogZnVuY3Rpb24gZ2V0SGVhZGVyUm93Q2xhc3Mocm93SW5kZXgpIHtcbiAgICAgIHZhciBjbGFzc2VzID0gW107XG5cbiAgICAgIHZhciBoZWFkZXJSb3dDbGFzc05hbWUgPSB0aGlzLnRhYmxlLmhlYWRlclJvd0NsYXNzTmFtZTtcbiAgICAgIGlmICh0eXBlb2YgaGVhZGVyUm93Q2xhc3NOYW1lID09PSAnc3RyaW5nJykge1xuICAgICAgICBjbGFzc2VzLnB1c2goaGVhZGVyUm93Q2xhc3NOYW1lKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGhlYWRlclJvd0NsYXNzTmFtZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjbGFzc2VzLnB1c2goaGVhZGVyUm93Q2xhc3NOYW1lLmNhbGwobnVsbCwgeyByb3dJbmRleDogcm93SW5kZXggfSkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY2xhc3Nlcy5qb2luKCcgJyk7XG4gICAgfSxcbiAgICBnZXRIZWFkZXJDZWxsU3R5bGU6IGZ1bmN0aW9uIGdldEhlYWRlckNlbGxTdHlsZShyb3dJbmRleCwgY29sdW1uSW5kZXgsIHJvdywgY29sdW1uKSB7XG4gICAgICB2YXIgaGVhZGVyQ2VsbFN0eWxlID0gdGhpcy50YWJsZS5oZWFkZXJDZWxsU3R5bGU7XG4gICAgICBpZiAodHlwZW9mIGhlYWRlckNlbGxTdHlsZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gaGVhZGVyQ2VsbFN0eWxlLmNhbGwobnVsbCwge1xuICAgICAgICAgIHJvd0luZGV4OiByb3dJbmRleCxcbiAgICAgICAgICBjb2x1bW5JbmRleDogY29sdW1uSW5kZXgsXG4gICAgICAgICAgcm93OiByb3csXG4gICAgICAgICAgY29sdW1uOiBjb2x1bW5cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gaGVhZGVyQ2VsbFN0eWxlO1xuICAgIH0sXG4gICAgZ2V0SGVhZGVyQ2VsbENsYXNzOiBmdW5jdGlvbiBnZXRIZWFkZXJDZWxsQ2xhc3Mocm93SW5kZXgsIGNvbHVtbkluZGV4LCByb3csIGNvbHVtbikge1xuICAgICAgdmFyIGNsYXNzZXMgPSBbY29sdW1uLmlkLCBjb2x1bW4ub3JkZXIsIGNvbHVtbi5oZWFkZXJBbGlnbiwgY29sdW1uLmNsYXNzTmFtZSwgY29sdW1uLmxhYmVsQ2xhc3NOYW1lXTtcblxuICAgICAgaWYgKHJvd0luZGV4ID09PSAwICYmIHRoaXMuaXNDZWxsSGlkZGVuKGNvbHVtbkluZGV4LCByb3cpKSB7XG4gICAgICAgIGNsYXNzZXMucHVzaCgnaXMtaGlkZGVuJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghY29sdW1uLmNoaWxkcmVuKSB7XG4gICAgICAgIGNsYXNzZXMucHVzaCgnaXMtbGVhZicpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29sdW1uLnNvcnRhYmxlKSB7XG4gICAgICAgIGNsYXNzZXMucHVzaCgnaXMtc29ydGFibGUnKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGhlYWRlckNlbGxDbGFzc05hbWUgPSB0aGlzLnRhYmxlLmhlYWRlckNlbGxDbGFzc05hbWU7XG4gICAgICBpZiAodHlwZW9mIGhlYWRlckNlbGxDbGFzc05hbWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNsYXNzZXMucHVzaChoZWFkZXJDZWxsQ2xhc3NOYW1lKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGhlYWRlckNlbGxDbGFzc05hbWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY2xhc3Nlcy5wdXNoKGhlYWRlckNlbGxDbGFzc05hbWUuY2FsbChudWxsLCB7XG4gICAgICAgICAgcm93SW5kZXg6IHJvd0luZGV4LFxuICAgICAgICAgIGNvbHVtbkluZGV4OiBjb2x1bW5JbmRleCxcbiAgICAgICAgICByb3c6IHJvdyxcbiAgICAgICAgICBjb2x1bW46IGNvbHVtblxuICAgICAgICB9KSk7XG4gICAgICB9XG5cbiAgICAgIGNsYXNzZXMucHVzaCgnZWwtdGFibGVfX2NlbGwnKTtcblxuICAgICAgcmV0dXJuIGNsYXNzZXMuam9pbignICcpO1xuICAgIH0sXG4gICAgdG9nZ2xlQWxsU2VsZWN0aW9uOiBmdW5jdGlvbiB0b2dnbGVBbGxTZWxlY3Rpb24oKSB7XG4gICAgICB0aGlzLnN0b3JlLmNvbW1pdCgndG9nZ2xlQWxsU2VsZWN0aW9uJyk7XG4gICAgfSxcbiAgICBoYW5kbGVGaWx0ZXJDbGljazogZnVuY3Rpb24gaGFuZGxlRmlsdGVyQ2xpY2soZXZlbnQsIGNvbHVtbikge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB2YXIgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuICAgICAgdmFyIGNlbGwgPSB0YXJnZXQudGFnTmFtZSA9PT0gJ1RIJyA/IHRhcmdldCA6IHRhcmdldC5wYXJlbnROb2RlO1xuICAgICAgaWYgKE9iamVjdChkb21fW1wiaGFzQ2xhc3NcIl0pKGNlbGwsICdub2NsaWNrJykpIHJldHVybjtcbiAgICAgIGNlbGwgPSBjZWxsLnF1ZXJ5U2VsZWN0b3IoJy5lbC10YWJsZV9fY29sdW1uLWZpbHRlci10cmlnZ2VyJykgfHwgY2VsbDtcbiAgICAgIHZhciB0YWJsZSA9IHRoaXMuJHBhcmVudDtcblxuICAgICAgdmFyIGZpbHRlclBhbmVsID0gdGhpcy5maWx0ZXJQYW5lbHNbY29sdW1uLmlkXTtcblxuICAgICAgaWYgKGZpbHRlclBhbmVsICYmIGNvbHVtbi5maWx0ZXJPcGVuZWQpIHtcbiAgICAgICAgZmlsdGVyUGFuZWwuc2hvd1BvcHBlciA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghZmlsdGVyUGFuZWwpIHtcbiAgICAgICAgZmlsdGVyUGFuZWwgPSBuZXcgZXh0ZXJuYWxfdnVlX2RlZmF1bHQuYShmaWx0ZXJfcGFuZWwpO1xuICAgICAgICB0aGlzLmZpbHRlclBhbmVsc1tjb2x1bW4uaWRdID0gZmlsdGVyUGFuZWw7XG4gICAgICAgIGlmIChjb2x1bW4uZmlsdGVyUGxhY2VtZW50KSB7XG4gICAgICAgICAgZmlsdGVyUGFuZWwucGxhY2VtZW50ID0gY29sdW1uLmZpbHRlclBsYWNlbWVudDtcbiAgICAgICAgfVxuICAgICAgICBmaWx0ZXJQYW5lbC50YWJsZSA9IHRhYmxlO1xuICAgICAgICBmaWx0ZXJQYW5lbC5jZWxsID0gY2VsbDtcbiAgICAgICAgZmlsdGVyUGFuZWwuY29sdW1uID0gY29sdW1uO1xuICAgICAgICAhdGhpcy4kaXNTZXJ2ZXIgJiYgZmlsdGVyUGFuZWwuJG1vdW50KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTtcbiAgICAgIH1cblxuICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZpbHRlclBhbmVsLnNob3dQb3BwZXIgPSB0cnVlO1xuICAgICAgfSwgMTYpO1xuICAgIH0sXG4gICAgaGFuZGxlSGVhZGVyQ2xpY2s6IGZ1bmN0aW9uIGhhbmRsZUhlYWRlckNsaWNrKGV2ZW50LCBjb2x1bW4pIHtcbiAgICAgIGlmICghY29sdW1uLmZpbHRlcnMgJiYgY29sdW1uLnNvcnRhYmxlKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlU29ydENsaWNrKGV2ZW50LCBjb2x1bW4pO1xuICAgICAgfSBlbHNlIGlmIChjb2x1bW4uZmlsdGVyYWJsZSAmJiAhY29sdW1uLnNvcnRhYmxlKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlRmlsdGVyQ2xpY2soZXZlbnQsIGNvbHVtbik7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuJHBhcmVudC4kZW1pdCgnaGVhZGVyLWNsaWNrJywgY29sdW1uLCBldmVudCk7XG4gICAgfSxcbiAgICBoYW5kbGVIZWFkZXJDb250ZXh0TWVudTogZnVuY3Rpb24gaGFuZGxlSGVhZGVyQ29udGV4dE1lbnUoZXZlbnQsIGNvbHVtbikge1xuICAgICAgdGhpcy4kcGFyZW50LiRlbWl0KCdoZWFkZXItY29udGV4dG1lbnUnLCBjb2x1bW4sIGV2ZW50KTtcbiAgICB9LFxuICAgIGhhbmRsZU1vdXNlRG93bjogZnVuY3Rpb24gaGFuZGxlTW91c2VEb3duKGV2ZW50LCBjb2x1bW4pIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgICBpZiAodGhpcy4kaXNTZXJ2ZXIpIHJldHVybjtcbiAgICAgIGlmIChjb2x1bW4uY2hpbGRyZW4gJiYgY29sdW1uLmNoaWxkcmVuLmxlbmd0aCA+IDApIHJldHVybjtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKHRoaXMuZHJhZ2dpbmdDb2x1bW4gJiYgdGhpcy5ib3JkZXIpIHtcbiAgICAgICAgdGhpcy5kcmFnZ2luZyA9IHRydWU7XG5cbiAgICAgICAgdGhpcy4kcGFyZW50LnJlc2l6ZVByb3h5VmlzaWJsZSA9IHRydWU7XG5cbiAgICAgICAgdmFyIHRhYmxlID0gdGhpcy4kcGFyZW50O1xuICAgICAgICB2YXIgdGFibGVFbCA9IHRhYmxlLiRlbDtcbiAgICAgICAgdmFyIHRhYmxlTGVmdCA9IHRhYmxlRWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcbiAgICAgICAgdmFyIGNvbHVtbkVsID0gdGhpcy4kZWwucXVlcnlTZWxlY3RvcigndGguJyArIGNvbHVtbi5pZCk7XG4gICAgICAgIHZhciBjb2x1bW5SZWN0ID0gY29sdW1uRWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIHZhciBtaW5MZWZ0ID0gY29sdW1uUmVjdC5sZWZ0IC0gdGFibGVMZWZ0ICsgMzA7XG5cbiAgICAgICAgT2JqZWN0KGRvbV9bXCJhZGRDbGFzc1wiXSkoY29sdW1uRWwsICdub2NsaWNrJyk7XG5cbiAgICAgICAgdGhpcy5kcmFnU3RhdGUgPSB7XG4gICAgICAgICAgc3RhcnRNb3VzZUxlZnQ6IGV2ZW50LmNsaWVudFgsXG4gICAgICAgICAgc3RhcnRMZWZ0OiBjb2x1bW5SZWN0LnJpZ2h0IC0gdGFibGVMZWZ0LFxuICAgICAgICAgIHN0YXJ0Q29sdW1uTGVmdDogY29sdW1uUmVjdC5sZWZ0IC0gdGFibGVMZWZ0LFxuICAgICAgICAgIHRhYmxlTGVmdDogdGFibGVMZWZ0XG4gICAgICAgIH07XG5cbiAgICAgICAgdmFyIHJlc2l6ZVByb3h5ID0gdGFibGUuJHJlZnMucmVzaXplUHJveHk7XG4gICAgICAgIHJlc2l6ZVByb3h5LnN0eWxlLmxlZnQgPSB0aGlzLmRyYWdTdGF0ZS5zdGFydExlZnQgKyAncHgnO1xuXG4gICAgICAgIGRvY3VtZW50Lm9uc2VsZWN0c3RhcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9O1xuICAgICAgICBkb2N1bWVudC5vbmRyYWdzdGFydCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH07XG5cbiAgICAgICAgdmFyIGhhbmRsZU1vdXNlTW92ZSA9IGZ1bmN0aW9uIGhhbmRsZU1vdXNlTW92ZShldmVudCkge1xuICAgICAgICAgIHZhciBkZWx0YUxlZnQgPSBldmVudC5jbGllbnRYIC0gX3RoaXMzLmRyYWdTdGF0ZS5zdGFydE1vdXNlTGVmdDtcbiAgICAgICAgICB2YXIgcHJveHlMZWZ0ID0gX3RoaXMzLmRyYWdTdGF0ZS5zdGFydExlZnQgKyBkZWx0YUxlZnQ7XG5cbiAgICAgICAgICByZXNpemVQcm94eS5zdHlsZS5sZWZ0ID0gTWF0aC5tYXgobWluTGVmdCwgcHJveHlMZWZ0KSArICdweCc7XG4gICAgICAgIH07XG5cbiAgICAgICAgdmFyIGhhbmRsZU1vdXNlVXAgPSBmdW5jdGlvbiBoYW5kbGVNb3VzZVVwKCkge1xuICAgICAgICAgIGlmIChfdGhpczMuZHJhZ2dpbmcpIHtcbiAgICAgICAgICAgIHZhciBfZHJhZ1N0YXRlID0gX3RoaXMzLmRyYWdTdGF0ZSxcbiAgICAgICAgICAgICAgICBzdGFydENvbHVtbkxlZnQgPSBfZHJhZ1N0YXRlLnN0YXJ0Q29sdW1uTGVmdCxcbiAgICAgICAgICAgICAgICBzdGFydExlZnQgPSBfZHJhZ1N0YXRlLnN0YXJ0TGVmdDtcblxuICAgICAgICAgICAgdmFyIGZpbmFsTGVmdCA9IHBhcnNlSW50KHJlc2l6ZVByb3h5LnN0eWxlLmxlZnQsIDEwKTtcbiAgICAgICAgICAgIHZhciBjb2x1bW5XaWR0aCA9IGZpbmFsTGVmdCAtIHN0YXJ0Q29sdW1uTGVmdDtcbiAgICAgICAgICAgIGNvbHVtbi53aWR0aCA9IGNvbHVtbi5yZWFsV2lkdGggPSBjb2x1bW5XaWR0aDtcbiAgICAgICAgICAgIHRhYmxlLiRlbWl0KCdoZWFkZXItZHJhZ2VuZCcsIGNvbHVtbi53aWR0aCwgc3RhcnRMZWZ0IC0gc3RhcnRDb2x1bW5MZWZ0LCBjb2x1bW4sIGV2ZW50KTtcblxuICAgICAgICAgICAgX3RoaXMzLnN0b3JlLnNjaGVkdWxlTGF5b3V0KCk7XG5cbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gJyc7XG4gICAgICAgICAgICBfdGhpczMuZHJhZ2dpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIF90aGlzMy5kcmFnZ2luZ0NvbHVtbiA9IG51bGw7XG4gICAgICAgICAgICBfdGhpczMuZHJhZ1N0YXRlID0ge307XG5cbiAgICAgICAgICAgIHRhYmxlLnJlc2l6ZVByb3h5VmlzaWJsZSA9IGZhbHNlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIGhhbmRsZU1vdXNlTW92ZSk7XG4gICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIGhhbmRsZU1vdXNlVXApO1xuICAgICAgICAgIGRvY3VtZW50Lm9uc2VsZWN0c3RhcnQgPSBudWxsO1xuICAgICAgICAgIGRvY3VtZW50Lm9uZHJhZ3N0YXJ0ID0gbnVsbDtcblxuICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgT2JqZWN0KGRvbV9bXCJyZW1vdmVDbGFzc1wiXSkoY29sdW1uRWwsICdub2NsaWNrJyk7XG4gICAgICAgICAgfSwgMCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgaGFuZGxlTW91c2VNb3ZlKTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIGhhbmRsZU1vdXNlVXApO1xuICAgICAgfVxuICAgIH0sXG4gICAgaGFuZGxlTW91c2VNb3ZlOiBmdW5jdGlvbiBoYW5kbGVNb3VzZU1vdmUoZXZlbnQsIGNvbHVtbikge1xuICAgICAgaWYgKGNvbHVtbi5jaGlsZHJlbiAmJiBjb2x1bW4uY2hpbGRyZW4ubGVuZ3RoID4gMCkgcmV0dXJuO1xuICAgICAgdmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldDtcbiAgICAgIHdoaWxlICh0YXJnZXQgJiYgdGFyZ2V0LnRhZ05hbWUgIT09ICdUSCcpIHtcbiAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGU7XG4gICAgICB9XG5cbiAgICAgIGlmICghY29sdW1uIHx8ICFjb2x1bW4ucmVzaXphYmxlKSByZXR1cm47XG5cbiAgICAgIGlmICghdGhpcy5kcmFnZ2luZyAmJiB0aGlzLmJvcmRlcikge1xuICAgICAgICB2YXIgcmVjdCA9IHRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgICB2YXIgYm9keVN0eWxlID0gZG9jdW1lbnQuYm9keS5zdHlsZTtcbiAgICAgICAgaWYgKHJlY3Qud2lkdGggPiAxMiAmJiByZWN0LnJpZ2h0IC0gZXZlbnQucGFnZVggPCA4KSB7XG4gICAgICAgICAgYm9keVN0eWxlLmN1cnNvciA9ICdjb2wtcmVzaXplJztcbiAgICAgICAgICBpZiAoT2JqZWN0KGRvbV9bXCJoYXNDbGFzc1wiXSkodGFyZ2V0LCAnaXMtc29ydGFibGUnKSkge1xuICAgICAgICAgICAgdGFyZ2V0LnN0eWxlLmN1cnNvciA9ICdjb2wtcmVzaXplJztcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5kcmFnZ2luZ0NvbHVtbiA9IGNvbHVtbjtcbiAgICAgICAgfSBlbHNlIGlmICghdGhpcy5kcmFnZ2luZykge1xuICAgICAgICAgIGJvZHlTdHlsZS5jdXJzb3IgPSAnJztcbiAgICAgICAgICBpZiAoT2JqZWN0KGRvbV9bXCJoYXNDbGFzc1wiXSkodGFyZ2V0LCAnaXMtc29ydGFibGUnKSkge1xuICAgICAgICAgICAgdGFyZ2V0LnN0eWxlLmN1cnNvciA9ICdwb2ludGVyJztcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5kcmFnZ2luZ0NvbHVtbiA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGhhbmRsZU1vdXNlT3V0OiBmdW5jdGlvbiBoYW5kbGVNb3VzZU91dCgpIHtcbiAgICAgIGlmICh0aGlzLiRpc1NlcnZlcikgcmV0dXJuO1xuICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3IgPSAnJztcbiAgICB9LFxuICAgIHRvZ2dsZU9yZGVyOiBmdW5jdGlvbiB0b2dnbGVPcmRlcihfcmVmKSB7XG4gICAgICB2YXIgb3JkZXIgPSBfcmVmLm9yZGVyLFxuICAgICAgICAgIHNvcnRPcmRlcnMgPSBfcmVmLnNvcnRPcmRlcnM7XG5cbiAgICAgIGlmIChvcmRlciA9PT0gJycpIHJldHVybiBzb3J0T3JkZXJzWzBdO1xuICAgICAgdmFyIGluZGV4ID0gc29ydE9yZGVycy5pbmRleE9mKG9yZGVyIHx8IG51bGwpO1xuICAgICAgcmV0dXJuIHNvcnRPcmRlcnNbaW5kZXggPiBzb3J0T3JkZXJzLmxlbmd0aCAtIDIgPyAwIDogaW5kZXggKyAxXTtcbiAgICB9LFxuICAgIGhhbmRsZVNvcnRDbGljazogZnVuY3Rpb24gaGFuZGxlU29ydENsaWNrKGV2ZW50LCBjb2x1bW4sIGdpdmVuT3JkZXIpIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgdmFyIG9yZGVyID0gY29sdW1uLm9yZGVyID09PSBnaXZlbk9yZGVyID8gbnVsbCA6IGdpdmVuT3JkZXIgfHwgdGhpcy50b2dnbGVPcmRlcihjb2x1bW4pO1xuXG4gICAgICB2YXIgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuICAgICAgd2hpbGUgKHRhcmdldCAmJiB0YXJnZXQudGFnTmFtZSAhPT0gJ1RIJykge1xuICAgICAgICB0YXJnZXQgPSB0YXJnZXQucGFyZW50Tm9kZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRhcmdldCAmJiB0YXJnZXQudGFnTmFtZSA9PT0gJ1RIJykge1xuICAgICAgICBpZiAoT2JqZWN0KGRvbV9bXCJoYXNDbGFzc1wiXSkodGFyZ2V0LCAnbm9jbGljaycpKSB7XG4gICAgICAgICAgT2JqZWN0KGRvbV9bXCJyZW1vdmVDbGFzc1wiXSkodGFyZ2V0LCAnbm9jbGljaycpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIWNvbHVtbi5zb3J0YWJsZSkgcmV0dXJuO1xuXG4gICAgICB2YXIgc3RhdGVzID0gdGhpcy5zdG9yZS5zdGF0ZXM7XG4gICAgICB2YXIgc29ydFByb3AgPSBzdGF0ZXMuc29ydFByb3A7XG4gICAgICB2YXIgc29ydE9yZGVyID0gdm9pZCAwO1xuICAgICAgdmFyIHNvcnRpbmdDb2x1bW4gPSBzdGF0ZXMuc29ydGluZ0NvbHVtbjtcblxuICAgICAgaWYgKHNvcnRpbmdDb2x1bW4gIT09IGNvbHVtbiB8fCBzb3J0aW5nQ29sdW1uID09PSBjb2x1bW4gJiYgc29ydGluZ0NvbHVtbi5vcmRlciA9PT0gbnVsbCkge1xuICAgICAgICBpZiAoc29ydGluZ0NvbHVtbikge1xuICAgICAgICAgIHNvcnRpbmdDb2x1bW4ub3JkZXIgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRlcy5zb3J0aW5nQ29sdW1uID0gY29sdW1uO1xuICAgICAgICBzb3J0UHJvcCA9IGNvbHVtbi5wcm9wZXJ0eTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFvcmRlcikge1xuICAgICAgICBzb3J0T3JkZXIgPSBjb2x1bW4ub3JkZXIgPSBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc29ydE9yZGVyID0gY29sdW1uLm9yZGVyID0gb3JkZXI7XG4gICAgICB9XG5cbiAgICAgIHN0YXRlcy5zb3J0UHJvcCA9IHNvcnRQcm9wO1xuICAgICAgc3RhdGVzLnNvcnRPcmRlciA9IHNvcnRPcmRlcjtcblxuICAgICAgdGhpcy5zdG9yZS5jb21taXQoJ2NoYW5nZVNvcnRDb25kaXRpb24nKTtcbiAgICB9XG4gIH0sXG5cbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZHJhZ2dpbmdDb2x1bW46IG51bGwsXG4gICAgICBkcmFnZ2luZzogZmFsc2UsXG4gICAgICBkcmFnU3RhdGU6IHt9XG4gICAgfTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3RhYmxlL3NyYy90YWJsZS1mb290ZXIuanNcbnZhciB0YWJsZV9mb290ZXJfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XG5cblxuXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHRhYmxlX2Zvb3RlciA9ICh7XG4gIG5hbWU6ICdFbFRhYmxlRm9vdGVyJyxcblxuICBtaXhpbnM6IFtsYXlvdXRfb2JzZXJ2ZXJdLFxuXG4gIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKGgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdmFyIHN1bXMgPSBbXTtcbiAgICBpZiAodGhpcy5zdW1tYXJ5TWV0aG9kKSB7XG4gICAgICBzdW1zID0gdGhpcy5zdW1tYXJ5TWV0aG9kKHsgY29sdW1uczogdGhpcy5jb2x1bW5zLCBkYXRhOiB0aGlzLnN0b3JlLnN0YXRlcy5kYXRhIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaChmdW5jdGlvbiAoY29sdW1uLCBpbmRleCkge1xuICAgICAgICBpZiAoaW5kZXggPT09IDApIHtcbiAgICAgICAgICBzdW1zW2luZGV4XSA9IF90aGlzLnN1bVRleHQ7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciB2YWx1ZXMgPSBfdGhpcy5zdG9yZS5zdGF0ZXMuZGF0YS5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICByZXR1cm4gTnVtYmVyKGl0ZW1bY29sdW1uLnByb3BlcnR5XSk7XG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgcHJlY2lzaW9ucyA9IFtdO1xuICAgICAgICB2YXIgbm90TnVtYmVyID0gdHJ1ZTtcbiAgICAgICAgdmFsdWVzLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKCFpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICAgIG5vdE51bWJlciA9IGZhbHNlO1xuICAgICAgICAgICAgdmFyIGRlY2ltYWwgPSAoJycgKyB2YWx1ZSkuc3BsaXQoJy4nKVsxXTtcbiAgICAgICAgICAgIHByZWNpc2lvbnMucHVzaChkZWNpbWFsID8gZGVjaW1hbC5sZW5ndGggOiAwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgcHJlY2lzaW9uID0gTWF0aC5tYXguYXBwbHkobnVsbCwgcHJlY2lzaW9ucyk7XG4gICAgICAgIGlmICghbm90TnVtYmVyKSB7XG4gICAgICAgICAgc3Vtc1tpbmRleF0gPSB2YWx1ZXMucmVkdWNlKGZ1bmN0aW9uIChwcmV2LCBjdXJyKSB7XG4gICAgICAgICAgICB2YXIgdmFsdWUgPSBOdW1iZXIoY3Vycik7XG4gICAgICAgICAgICBpZiAoIWlzTmFOKHZhbHVlKSkge1xuICAgICAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdCgocHJldiArIGN1cnIpLnRvRml4ZWQoTWF0aC5taW4ocHJlY2lzaW9uLCAyMCkpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiBwcmV2O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN1bXNbaW5kZXhdID0gJyc7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBoKFxuICAgICAgJ3RhYmxlJyxcbiAgICAgIHtcbiAgICAgICAgJ2NsYXNzJzogJ2VsLXRhYmxlX19mb290ZXInLFxuICAgICAgICBhdHRyczogeyBjZWxsc3BhY2luZzogJzAnLFxuICAgICAgICAgIGNlbGxwYWRkaW5nOiAnMCcsXG4gICAgICAgICAgYm9yZGVyOiAnMCcgfVxuICAgICAgfSxcbiAgICAgIFtoKCdjb2xncm91cCcsIFt0aGlzLmNvbHVtbnMubWFwKGZ1bmN0aW9uIChjb2x1bW4pIHtcbiAgICAgICAgcmV0dXJuIGgoJ2NvbCcsIHtcbiAgICAgICAgICBhdHRyczogeyBuYW1lOiBjb2x1bW4uaWQgfSxcbiAgICAgICAgICBrZXk6IGNvbHVtbi5pZCB9KTtcbiAgICAgIH0pLCB0aGlzLmhhc0d1dHRlciA/IGgoJ2NvbCcsIHtcbiAgICAgICAgYXR0cnM6IHsgbmFtZTogJ2d1dHRlcicgfVxuICAgICAgfSkgOiAnJ10pLCBoKFxuICAgICAgICAndGJvZHknLFxuICAgICAgICB7ICdjbGFzcyc6IFt7ICdoYXMtZ3V0dGVyJzogdGhpcy5oYXNHdXR0ZXIgfV0gfSxcbiAgICAgICAgW2goJ3RyJywgW3RoaXMuY29sdW1ucy5tYXAoZnVuY3Rpb24gKGNvbHVtbiwgY2VsbEluZGV4KSB7XG4gICAgICAgICAgcmV0dXJuIGgoXG4gICAgICAgICAgICAndGQnLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBrZXk6IGNlbGxJbmRleCxcbiAgICAgICAgICAgICAgYXR0cnM6IHsgY29sc3BhbjogY29sdW1uLmNvbFNwYW4sXG4gICAgICAgICAgICAgICAgcm93c3BhbjogY29sdW1uLnJvd1NwYW5cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgJ2NsYXNzJzogW10uY29uY2F0KF90aGlzLmdldFJvd0NsYXNzZXMoY29sdW1uLCBjZWxsSW5kZXgpLCBbJ2VsLXRhYmxlX19jZWxsJ10pIH0sXG4gICAgICAgICAgICBbaChcbiAgICAgICAgICAgICAgJ2RpdicsXG4gICAgICAgICAgICAgIHsgJ2NsYXNzJzogWydjZWxsJywgY29sdW1uLmxhYmVsQ2xhc3NOYW1lXSB9LFxuICAgICAgICAgICAgICBbc3Vtc1tjZWxsSW5kZXhdXVxuICAgICAgICAgICAgKV1cbiAgICAgICAgICApO1xuICAgICAgICB9KSwgdGhpcy5oYXNHdXR0ZXIgPyBoKCd0aCcsIHsgJ2NsYXNzJzogJ2VsLXRhYmxlX19jZWxsIGd1dHRlcicgfSkgOiAnJ10pXVxuICAgICAgKV1cbiAgICApO1xuICB9LFxuXG5cbiAgcHJvcHM6IHtcbiAgICBmaXhlZDogU3RyaW5nLFxuICAgIHN0b3JlOiB7XG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAgc3VtbWFyeU1ldGhvZDogRnVuY3Rpb24sXG4gICAgc3VtVGV4dDogU3RyaW5nLFxuICAgIGJvcmRlcjogQm9vbGVhbixcbiAgICBkZWZhdWx0U29ydDoge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgZGVmYXVsdDogZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcHJvcDogJycsXG4gICAgICAgICAgb3JkZXI6ICcnXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB0YWJsZV9mb290ZXJfZXh0ZW5kcyh7XG4gICAgdGFibGU6IGZ1bmN0aW9uIHRhYmxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHBhcmVudDtcbiAgICB9LFxuICAgIGhhc0d1dHRlcjogZnVuY3Rpb24gaGFzR3V0dGVyKCkge1xuICAgICAgcmV0dXJuICF0aGlzLmZpeGVkICYmIHRoaXMudGFibGVMYXlvdXQuZ3V0dGVyV2lkdGg7XG4gICAgfVxuICB9LCBtYXBTdGF0ZXMoe1xuICAgIGNvbHVtbnM6ICdjb2x1bW5zJyxcbiAgICBpc0FsbFNlbGVjdGVkOiAnaXNBbGxTZWxlY3RlZCcsXG4gICAgbGVmdEZpeGVkTGVhZkNvdW50OiAnZml4ZWRMZWFmQ29sdW1uc0xlbmd0aCcsXG4gICAgcmlnaHRGaXhlZExlYWZDb3VudDogJ3JpZ2h0Rml4ZWRMZWFmQ29sdW1uc0xlbmd0aCcsXG4gICAgY29sdW1uc0NvdW50OiBmdW5jdGlvbiBjb2x1bW5zQ291bnQoc3RhdGVzKSB7XG4gICAgICByZXR1cm4gc3RhdGVzLmNvbHVtbnMubGVuZ3RoO1xuICAgIH0sXG4gICAgbGVmdEZpeGVkQ291bnQ6IGZ1bmN0aW9uIGxlZnRGaXhlZENvdW50KHN0YXRlcykge1xuICAgICAgcmV0dXJuIHN0YXRlcy5maXhlZENvbHVtbnMubGVuZ3RoO1xuICAgIH0sXG4gICAgcmlnaHRGaXhlZENvdW50OiBmdW5jdGlvbiByaWdodEZpeGVkQ291bnQoc3RhdGVzKSB7XG4gICAgICByZXR1cm4gc3RhdGVzLnJpZ2h0Rml4ZWRDb2x1bW5zLmxlbmd0aDtcbiAgICB9XG4gIH0pKSxcblxuICBtZXRob2RzOiB7XG4gICAgaXNDZWxsSGlkZGVuOiBmdW5jdGlvbiBpc0NlbGxIaWRkZW4oaW5kZXgsIGNvbHVtbnMsIGNvbHVtbikge1xuICAgICAgaWYgKHRoaXMuZml4ZWQgPT09IHRydWUgfHwgdGhpcy5maXhlZCA9PT0gJ2xlZnQnKSB7XG4gICAgICAgIHJldHVybiBpbmRleCA+PSB0aGlzLmxlZnRGaXhlZExlYWZDb3VudDtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5maXhlZCA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICB2YXIgYmVmb3JlID0gMDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbmRleDsgaSsrKSB7XG4gICAgICAgICAgYmVmb3JlICs9IGNvbHVtbnNbaV0uY29sU3BhbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYmVmb3JlIDwgdGhpcy5jb2x1bW5zQ291bnQgLSB0aGlzLnJpZ2h0Rml4ZWRMZWFmQ291bnQ7XG4gICAgICB9IGVsc2UgaWYgKCF0aGlzLmZpeGVkICYmIGNvbHVtbi5maXhlZCkge1xuICAgICAgICAvLyBoaWRlIGNlbGwgd2hlbiBmb290ZXIgaW5zdGFuY2UgaXMgbm90IGZpeGVkIGFuZCBjb2x1bW4gaXMgZml4ZWRcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gaW5kZXggPCB0aGlzLmxlZnRGaXhlZENvdW50IHx8IGluZGV4ID49IHRoaXMuY29sdW1uc0NvdW50IC0gdGhpcy5yaWdodEZpeGVkQ291bnQ7XG4gICAgICB9XG4gICAgfSxcbiAgICBnZXRSb3dDbGFzc2VzOiBmdW5jdGlvbiBnZXRSb3dDbGFzc2VzKGNvbHVtbiwgY2VsbEluZGV4KSB7XG4gICAgICB2YXIgY2xhc3NlcyA9IFtjb2x1bW4uaWQsIGNvbHVtbi5hbGlnbiwgY29sdW1uLmxhYmVsQ2xhc3NOYW1lXTtcbiAgICAgIGlmIChjb2x1bW4uY2xhc3NOYW1lKSB7XG4gICAgICAgIGNsYXNzZXMucHVzaChjb2x1bW4uY2xhc3NOYW1lKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmlzQ2VsbEhpZGRlbihjZWxsSW5kZXgsIHRoaXMuY29sdW1ucywgY29sdW1uKSkge1xuICAgICAgICBjbGFzc2VzLnB1c2goJ2lzLWhpZGRlbicpO1xuICAgICAgfVxuICAgICAgaWYgKCFjb2x1bW4uY2hpbGRyZW4pIHtcbiAgICAgICAgY2xhc3Nlcy5wdXNoKCdpcy1sZWFmJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gY2xhc3NlcztcbiAgICB9XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvdGFibGUvc3JjL3RhYmxlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbnZhciB0YWJsZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbnZhciB0YWJsZUlkU2VlZCA9IDE7XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHRhYmxldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbmFtZTogJ0VsVGFibGUnLFxuXG4gIG1peGluczogW2xvY2FsZV9kZWZhdWx0LmEsIG1pZ3JhdGluZ19kZWZhdWx0LmFdLFxuXG4gIGRpcmVjdGl2ZXM6IHtcbiAgICBNb3VzZXdoZWVsOiBkaXJlY3RpdmVzX21vdXNld2hlZWxcbiAgfSxcblxuICBwcm9wczoge1xuICAgIGRhdGE6IHtcbiAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgZGVmYXVsdDogZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2l6ZTogU3RyaW5nLFxuXG4gICAgd2lkdGg6IFtTdHJpbmcsIE51bWJlcl0sXG5cbiAgICBoZWlnaHQ6IFtTdHJpbmcsIE51bWJlcl0sXG5cbiAgICBtYXhIZWlnaHQ6IFtTdHJpbmcsIE51bWJlcl0sXG5cbiAgICBmaXQ6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSxcblxuICAgIHN0cmlwZTogQm9vbGVhbixcblxuICAgIGJvcmRlcjogQm9vbGVhbixcblxuICAgIHJvd0tleTogW1N0cmluZywgRnVuY3Rpb25dLFxuXG4gICAgY29udGV4dDoge30sXG5cbiAgICBzaG93SGVhZGVyOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0sXG5cbiAgICBzaG93U3VtbWFyeTogQm9vbGVhbixcblxuICAgIHN1bVRleHQ6IFN0cmluZyxcblxuICAgIHN1bW1hcnlNZXRob2Q6IEZ1bmN0aW9uLFxuXG4gICAgcm93Q2xhc3NOYW1lOiBbU3RyaW5nLCBGdW5jdGlvbl0sXG5cbiAgICByb3dTdHlsZTogW09iamVjdCwgRnVuY3Rpb25dLFxuXG4gICAgY2VsbENsYXNzTmFtZTogW1N0cmluZywgRnVuY3Rpb25dLFxuXG4gICAgY2VsbFN0eWxlOiBbT2JqZWN0LCBGdW5jdGlvbl0sXG5cbiAgICBoZWFkZXJSb3dDbGFzc05hbWU6IFtTdHJpbmcsIEZ1bmN0aW9uXSxcblxuICAgIGhlYWRlclJvd1N0eWxlOiBbT2JqZWN0LCBGdW5jdGlvbl0sXG5cbiAgICBoZWFkZXJDZWxsQ2xhc3NOYW1lOiBbU3RyaW5nLCBGdW5jdGlvbl0sXG5cbiAgICBoZWFkZXJDZWxsU3R5bGU6IFtPYmplY3QsIEZ1bmN0aW9uXSxcblxuICAgIGhpZ2hsaWdodEN1cnJlbnRSb3c6IEJvb2xlYW4sXG5cbiAgICBoaWdobGlnaHRTZWxlY3Rpb25Sb3c6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0sXG5cbiAgICBjdXJyZW50Um93S2V5OiBbU3RyaW5nLCBOdW1iZXJdLFxuXG4gICAgZW1wdHlUZXh0OiBTdHJpbmcsXG5cbiAgICBleHBhbmRSb3dLZXlzOiBBcnJheSxcblxuICAgIGRlZmF1bHRFeHBhbmRBbGw6IEJvb2xlYW4sXG5cbiAgICBkZWZhdWx0U29ydDogT2JqZWN0LFxuXG4gICAgdG9vbHRpcEVmZmVjdDogU3RyaW5nLFxuXG4gICAgc3Bhbk1ldGhvZDogRnVuY3Rpb24sXG5cbiAgICBzZWxlY3RPbkluZGV0ZXJtaW5hdGU6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSxcblxuICAgIGluZGVudDoge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZGVmYXVsdDogMTZcbiAgICB9LFxuXG4gICAgdHJlZVByb3BzOiB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICBkZWZhdWx0OiBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBoYXNDaGlsZHJlbjogJ2hhc0NoaWxkcmVuJyxcbiAgICAgICAgICBjaGlsZHJlbjogJ2NoaWxkcmVuJ1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBsYXp5OiBCb29sZWFuLFxuXG4gICAgbG9hZDogRnVuY3Rpb25cbiAgfSxcblxuICBjb21wb25lbnRzOiB7XG4gICAgVGFibGVIZWFkZXI6IHRhYmxlX2hlYWRlcixcbiAgICBUYWJsZUZvb3RlcjogdGFibGVfZm9vdGVyLFxuICAgIFRhYmxlQm9keTogdGFibGVfYm9keSxcbiAgICBFbENoZWNrYm94OiBjaGVja2JveF9kZWZhdWx0LmFcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0TWlncmF0aW5nQ29uZmlnOiBmdW5jdGlvbiBnZXRNaWdyYXRpbmdDb25maWcoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICBleHBhbmQ6ICdleHBhbmQgaXMgcmVuYW1lZCB0byBleHBhbmQtY2hhbmdlJ1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0sXG4gICAgc2V0Q3VycmVudFJvdzogZnVuY3Rpb24gc2V0Q3VycmVudFJvdyhyb3cpIHtcbiAgICAgIHRoaXMuc3RvcmUuY29tbWl0KCdzZXRDdXJyZW50Um93Jywgcm93KTtcbiAgICB9LFxuICAgIHRvZ2dsZVJvd1NlbGVjdGlvbjogZnVuY3Rpb24gdG9nZ2xlUm93U2VsZWN0aW9uKHJvdywgc2VsZWN0ZWQpIHtcbiAgICAgIHRoaXMuc3RvcmUudG9nZ2xlUm93U2VsZWN0aW9uKHJvdywgc2VsZWN0ZWQsIGZhbHNlKTtcbiAgICAgIHRoaXMuc3RvcmUudXBkYXRlQWxsU2VsZWN0ZWQoKTtcbiAgICB9LFxuICAgIHRvZ2dsZVJvd0V4cGFuc2lvbjogZnVuY3Rpb24gdG9nZ2xlUm93RXhwYW5zaW9uKHJvdywgZXhwYW5kZWQpIHtcbiAgICAgIHRoaXMuc3RvcmUudG9nZ2xlUm93RXhwYW5zaW9uQWRhcHRlcihyb3csIGV4cGFuZGVkKTtcbiAgICB9LFxuICAgIGNsZWFyU2VsZWN0aW9uOiBmdW5jdGlvbiBjbGVhclNlbGVjdGlvbigpIHtcbiAgICAgIHRoaXMuc3RvcmUuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICB9LFxuICAgIGNsZWFyRmlsdGVyOiBmdW5jdGlvbiBjbGVhckZpbHRlcihjb2x1bW5LZXlzKSB7XG4gICAgICB0aGlzLnN0b3JlLmNsZWFyRmlsdGVyKGNvbHVtbktleXMpO1xuICAgIH0sXG4gICAgY2xlYXJTb3J0OiBmdW5jdGlvbiBjbGVhclNvcnQoKSB7XG4gICAgICB0aGlzLnN0b3JlLmNsZWFyU29ydCgpO1xuICAgIH0sXG4gICAgaGFuZGxlTW91c2VMZWF2ZTogZnVuY3Rpb24gaGFuZGxlTW91c2VMZWF2ZSgpIHtcbiAgICAgIHRoaXMuc3RvcmUuY29tbWl0KCdzZXRIb3ZlclJvdycsIG51bGwpO1xuICAgICAgaWYgKHRoaXMuaG92ZXJTdGF0ZSkgdGhpcy5ob3ZlclN0YXRlID0gbnVsbDtcbiAgICB9LFxuICAgIHVwZGF0ZVNjcm9sbFk6IGZ1bmN0aW9uIHVwZGF0ZVNjcm9sbFkoKSB7XG4gICAgICB2YXIgY2hhbmdlZCA9IHRoaXMubGF5b3V0LnVwZGF0ZVNjcm9sbFkoKTtcbiAgICAgIGlmIChjaGFuZ2VkKSB7XG4gICAgICAgIHRoaXMubGF5b3V0Lm5vdGlmeU9ic2VydmVycygnc2Nyb2xsYWJsZScpO1xuICAgICAgICB0aGlzLmxheW91dC51cGRhdGVDb2x1bW5zV2lkdGgoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGhhbmRsZUZpeGVkTW91c2V3aGVlbDogZnVuY3Rpb24gaGFuZGxlRml4ZWRNb3VzZXdoZWVsKGV2ZW50LCBkYXRhKSB7XG4gICAgICB2YXIgYm9keVdyYXBwZXIgPSB0aGlzLmJvZHlXcmFwcGVyO1xuICAgICAgaWYgKE1hdGguYWJzKGRhdGEuc3BpblkpID4gMCkge1xuICAgICAgICB2YXIgY3VycmVudFNjcm9sbFRvcCA9IGJvZHlXcmFwcGVyLnNjcm9sbFRvcDtcbiAgICAgICAgaWYgKGRhdGEucGl4ZWxZIDwgMCAmJiBjdXJyZW50U2Nyb2xsVG9wICE9PSAwKSB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF0YS5waXhlbFkgPiAwICYmIGJvZHlXcmFwcGVyLnNjcm9sbEhlaWdodCAtIGJvZHlXcmFwcGVyLmNsaWVudEhlaWdodCA+IGN1cnJlbnRTY3JvbGxUb3ApIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgICAgIGJvZHlXcmFwcGVyLnNjcm9sbFRvcCArPSBNYXRoLmNlaWwoZGF0YS5waXhlbFkgLyA1KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJvZHlXcmFwcGVyLnNjcm9sbExlZnQgKz0gTWF0aC5jZWlsKGRhdGEucGl4ZWxYIC8gNSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBoYW5kbGVIZWFkZXJGb290ZXJNb3VzZXdoZWVsOiBmdW5jdGlvbiBoYW5kbGVIZWFkZXJGb290ZXJNb3VzZXdoZWVsKGV2ZW50LCBkYXRhKSB7XG4gICAgICB2YXIgcGl4ZWxYID0gZGF0YS5waXhlbFgsXG4gICAgICAgICAgcGl4ZWxZID0gZGF0YS5waXhlbFk7XG5cbiAgICAgIGlmIChNYXRoLmFicyhwaXhlbFgpID49IE1hdGguYWJzKHBpeGVsWSkpIHtcbiAgICAgICAgdGhpcy5ib2R5V3JhcHBlci5zY3JvbGxMZWZ0ICs9IGRhdGEucGl4ZWxYIC8gNTtcbiAgICAgIH1cbiAgICB9LFxuXG5cbiAgICAvLyBUT0RPIOS9v+eUqCBDU1MgdHJhbnNmb3JtXG4gICAgc3luY1Bvc3Rpb246IGZ1bmN0aW9uIHN5bmNQb3N0aW9uKCkge1xuICAgICAgdmFyIF9ib2R5V3JhcHBlciA9IHRoaXMuYm9keVdyYXBwZXIsXG4gICAgICAgICAgc2Nyb2xsTGVmdCA9IF9ib2R5V3JhcHBlci5zY3JvbGxMZWZ0LFxuICAgICAgICAgIHNjcm9sbFRvcCA9IF9ib2R5V3JhcHBlci5zY3JvbGxUb3AsXG4gICAgICAgICAgb2Zmc2V0V2lkdGggPSBfYm9keVdyYXBwZXIub2Zmc2V0V2lkdGgsXG4gICAgICAgICAgc2Nyb2xsV2lkdGggPSBfYm9keVdyYXBwZXIuc2Nyb2xsV2lkdGg7XG4gICAgICB2YXIgXyRyZWZzID0gdGhpcy4kcmVmcyxcbiAgICAgICAgICBoZWFkZXJXcmFwcGVyID0gXyRyZWZzLmhlYWRlcldyYXBwZXIsXG4gICAgICAgICAgZm9vdGVyV3JhcHBlciA9IF8kcmVmcy5mb290ZXJXcmFwcGVyLFxuICAgICAgICAgIGZpeGVkQm9keVdyYXBwZXIgPSBfJHJlZnMuZml4ZWRCb2R5V3JhcHBlcixcbiAgICAgICAgICByaWdodEZpeGVkQm9keVdyYXBwZXIgPSBfJHJlZnMucmlnaHRGaXhlZEJvZHlXcmFwcGVyO1xuXG4gICAgICBpZiAoaGVhZGVyV3JhcHBlcikgaGVhZGVyV3JhcHBlci5zY3JvbGxMZWZ0ID0gc2Nyb2xsTGVmdDtcbiAgICAgIGlmIChmb290ZXJXcmFwcGVyKSBmb290ZXJXcmFwcGVyLnNjcm9sbExlZnQgPSBzY3JvbGxMZWZ0O1xuICAgICAgaWYgKGZpeGVkQm9keVdyYXBwZXIpIGZpeGVkQm9keVdyYXBwZXIuc2Nyb2xsVG9wID0gc2Nyb2xsVG9wO1xuICAgICAgaWYgKHJpZ2h0Rml4ZWRCb2R5V3JhcHBlcikgcmlnaHRGaXhlZEJvZHlXcmFwcGVyLnNjcm9sbFRvcCA9IHNjcm9sbFRvcDtcbiAgICAgIHZhciBtYXhTY3JvbGxMZWZ0UG9zaXRpb24gPSBzY3JvbGxXaWR0aCAtIG9mZnNldFdpZHRoIC0gMTtcbiAgICAgIGlmIChzY3JvbGxMZWZ0ID49IG1heFNjcm9sbExlZnRQb3NpdGlvbikge1xuICAgICAgICB0aGlzLnNjcm9sbFBvc2l0aW9uID0gJ3JpZ2h0JztcbiAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsTGVmdCA9PT0gMCkge1xuICAgICAgICB0aGlzLnNjcm9sbFBvc2l0aW9uID0gJ2xlZnQnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zY3JvbGxQb3NpdGlvbiA9ICdtaWRkbGUnO1xuICAgICAgfVxuICAgIH0sXG5cblxuICAgIHRocm90dGxlU3luY1Bvc3Rpb246IE9iamVjdChleHRlcm5hbF90aHJvdHRsZV9kZWJvdW5jZV9bXCJ0aHJvdHRsZVwiXSkoMTYsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoaXMuc3luY1Bvc3Rpb24oKTtcbiAgICB9KSxcblxuICAgIG9uU2Nyb2xsOiBmdW5jdGlvbiBvblNjcm9sbChldnQpIHtcbiAgICAgIHZhciByYWYgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lO1xuICAgICAgaWYgKCFyYWYpIHtcbiAgICAgICAgdGhpcy50aHJvdHRsZVN5bmNQb3N0aW9uKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByYWYodGhpcy5zeW5jUG9zdGlvbik7XG4gICAgICB9XG4gICAgfSxcbiAgICBiaW5kRXZlbnRzOiBmdW5jdGlvbiBiaW5kRXZlbnRzKCkge1xuICAgICAgdGhpcy5ib2R5V3JhcHBlci5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLm9uU2Nyb2xsLCB7IHBhc3NpdmU6IHRydWUgfSk7XG4gICAgICBpZiAodGhpcy5maXQpIHtcbiAgICAgICAgT2JqZWN0KHJlc2l6ZV9ldmVudF9bXCJhZGRSZXNpemVMaXN0ZW5lclwiXSkodGhpcy4kZWwsIHRoaXMucmVzaXplTGlzdGVuZXIpO1xuICAgICAgfVxuICAgIH0sXG4gICAgdW5iaW5kRXZlbnRzOiBmdW5jdGlvbiB1bmJpbmRFdmVudHMoKSB7XG4gICAgICB0aGlzLmJvZHlXcmFwcGVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMub25TY3JvbGwsIHsgcGFzc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIGlmICh0aGlzLmZpdCkge1xuICAgICAgICBPYmplY3QocmVzaXplX2V2ZW50X1tcInJlbW92ZVJlc2l6ZUxpc3RlbmVyXCJdKSh0aGlzLiRlbCwgdGhpcy5yZXNpemVMaXN0ZW5lcik7XG4gICAgICB9XG4gICAgfSxcbiAgICByZXNpemVMaXN0ZW5lcjogZnVuY3Rpb24gcmVzaXplTGlzdGVuZXIoKSB7XG4gICAgICBpZiAoIXRoaXMuJHJlYWR5KSByZXR1cm47XG4gICAgICB2YXIgc2hvdWxkVXBkYXRlTGF5b3V0ID0gZmFsc2U7XG4gICAgICB2YXIgZWwgPSB0aGlzLiRlbDtcbiAgICAgIHZhciBfcmVzaXplU3RhdGUgPSB0aGlzLnJlc2l6ZVN0YXRlLFxuICAgICAgICAgIG9sZFdpZHRoID0gX3Jlc2l6ZVN0YXRlLndpZHRoLFxuICAgICAgICAgIG9sZEhlaWdodCA9IF9yZXNpemVTdGF0ZS5oZWlnaHQ7XG5cblxuICAgICAgdmFyIHdpZHRoID0gZWwub2Zmc2V0V2lkdGg7XG4gICAgICBpZiAob2xkV2lkdGggIT09IHdpZHRoKSB7XG4gICAgICAgIHNob3VsZFVwZGF0ZUxheW91dCA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIHZhciBoZWlnaHQgPSBlbC5vZmZzZXRIZWlnaHQ7XG4gICAgICBpZiAoKHRoaXMuaGVpZ2h0IHx8IHRoaXMuc2hvdWxkVXBkYXRlSGVpZ2h0KSAmJiBvbGRIZWlnaHQgIT09IGhlaWdodCkge1xuICAgICAgICBzaG91bGRVcGRhdGVMYXlvdXQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2hvdWxkVXBkYXRlTGF5b3V0KSB7XG4gICAgICAgIHRoaXMucmVzaXplU3RhdGUud2lkdGggPSB3aWR0aDtcbiAgICAgICAgdGhpcy5yZXNpemVTdGF0ZS5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICAgIHRoaXMuZG9MYXlvdXQoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGRvTGF5b3V0OiBmdW5jdGlvbiBkb0xheW91dCgpIHtcbiAgICAgIGlmICh0aGlzLnNob3VsZFVwZGF0ZUhlaWdodCkge1xuICAgICAgICB0aGlzLmxheW91dC51cGRhdGVFbHNIZWlnaHQoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMubGF5b3V0LnVwZGF0ZUNvbHVtbnNXaWR0aCgpO1xuICAgIH0sXG4gICAgc29ydDogZnVuY3Rpb24gc29ydChwcm9wLCBvcmRlcikge1xuICAgICAgdGhpcy5zdG9yZS5jb21taXQoJ3NvcnQnLCB7IHByb3A6IHByb3AsIG9yZGVyOiBvcmRlciB9KTtcbiAgICB9LFxuICAgIHRvZ2dsZUFsbFNlbGVjdGlvbjogZnVuY3Rpb24gdG9nZ2xlQWxsU2VsZWN0aW9uKCkge1xuICAgICAgdGhpcy5zdG9yZS5jb21taXQoJ3RvZ2dsZUFsbFNlbGVjdGlvbicpO1xuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDogdGFibGV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19leHRlbmRzKHtcbiAgICB0YWJsZVNpemU6IGZ1bmN0aW9uIHRhYmxlU2l6ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNpemUgfHwgKHRoaXMuJEVMRU1FTlQgfHwge30pLnNpemU7XG4gICAgfSxcbiAgICBib2R5V3JhcHBlcjogZnVuY3Rpb24gYm9keVdyYXBwZXIoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcmVmcy5ib2R5V3JhcHBlcjtcbiAgICB9LFxuICAgIHNob3VsZFVwZGF0ZUhlaWdodDogZnVuY3Rpb24gc2hvdWxkVXBkYXRlSGVpZ2h0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGVpZ2h0IHx8IHRoaXMubWF4SGVpZ2h0IHx8IHRoaXMuZml4ZWRDb2x1bW5zLmxlbmd0aCA+IDAgfHwgdGhpcy5yaWdodEZpeGVkQ29sdW1ucy5sZW5ndGggPiAwO1xuICAgIH0sXG4gICAgYm9keVdpZHRoOiBmdW5jdGlvbiBib2R5V2lkdGgoKSB7XG4gICAgICB2YXIgX2xheW91dCA9IHRoaXMubGF5b3V0LFxuICAgICAgICAgIGJvZHlXaWR0aCA9IF9sYXlvdXQuYm9keVdpZHRoLFxuICAgICAgICAgIHNjcm9sbFkgPSBfbGF5b3V0LnNjcm9sbFksXG4gICAgICAgICAgZ3V0dGVyV2lkdGggPSBfbGF5b3V0Lmd1dHRlcldpZHRoO1xuXG4gICAgICByZXR1cm4gYm9keVdpZHRoID8gYm9keVdpZHRoIC0gKHNjcm9sbFkgPyBndXR0ZXJXaWR0aCA6IDApICsgJ3B4JyA6ICcnO1xuICAgIH0sXG4gICAgYm9keUhlaWdodDogZnVuY3Rpb24gYm9keUhlaWdodCgpIHtcbiAgICAgIHZhciBfbGF5b3V0MiA9IHRoaXMubGF5b3V0LFxuICAgICAgICAgIF9sYXlvdXQyJGhlYWRlckhlaWdodCA9IF9sYXlvdXQyLmhlYWRlckhlaWdodCxcbiAgICAgICAgICBoZWFkZXJIZWlnaHQgPSBfbGF5b3V0MiRoZWFkZXJIZWlnaHQgPT09IHVuZGVmaW5lZCA/IDAgOiBfbGF5b3V0MiRoZWFkZXJIZWlnaHQsXG4gICAgICAgICAgYm9keUhlaWdodCA9IF9sYXlvdXQyLmJvZHlIZWlnaHQsXG4gICAgICAgICAgX2xheW91dDIkZm9vdGVySGVpZ2h0ID0gX2xheW91dDIuZm9vdGVySGVpZ2h0LFxuICAgICAgICAgIGZvb3RlckhlaWdodCA9IF9sYXlvdXQyJGZvb3RlckhlaWdodCA9PT0gdW5kZWZpbmVkID8gMCA6IF9sYXlvdXQyJGZvb3RlckhlaWdodDtcblxuICAgICAgaWYgKHRoaXMuaGVpZ2h0KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaGVpZ2h0OiBib2R5SGVpZ2h0ID8gYm9keUhlaWdodCArICdweCcgOiAnJ1xuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmICh0aGlzLm1heEhlaWdodCkge1xuICAgICAgICB2YXIgbWF4SGVpZ2h0ID0gcGFyc2VIZWlnaHQodGhpcy5tYXhIZWlnaHQpO1xuICAgICAgICBpZiAodHlwZW9mIG1heEhlaWdodCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ21heC1oZWlnaHQnOiBtYXhIZWlnaHQgLSBmb290ZXJIZWlnaHQgLSAodGhpcy5zaG93SGVhZGVyID8gaGVhZGVySGVpZ2h0IDogMCkgKyAncHgnXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHt9O1xuICAgIH0sXG4gICAgZml4ZWRCb2R5SGVpZ2h0OiBmdW5jdGlvbiBmaXhlZEJvZHlIZWlnaHQoKSB7XG4gICAgICBpZiAodGhpcy5oZWlnaHQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBoZWlnaHQ6IHRoaXMubGF5b3V0LmZpeGVkQm9keUhlaWdodCA/IHRoaXMubGF5b3V0LmZpeGVkQm9keUhlaWdodCArICdweCcgOiAnJ1xuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmICh0aGlzLm1heEhlaWdodCkge1xuICAgICAgICB2YXIgbWF4SGVpZ2h0ID0gcGFyc2VIZWlnaHQodGhpcy5tYXhIZWlnaHQpO1xuICAgICAgICBpZiAodHlwZW9mIG1heEhlaWdodCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICBtYXhIZWlnaHQgPSB0aGlzLmxheW91dC5zY3JvbGxYID8gbWF4SGVpZ2h0IC0gdGhpcy5sYXlvdXQuZ3V0dGVyV2lkdGggOiBtYXhIZWlnaHQ7XG4gICAgICAgICAgaWYgKHRoaXMuc2hvd0hlYWRlcikge1xuICAgICAgICAgICAgbWF4SGVpZ2h0IC09IHRoaXMubGF5b3V0LmhlYWRlckhlaWdodDtcbiAgICAgICAgICB9XG4gICAgICAgICAgbWF4SGVpZ2h0IC09IHRoaXMubGF5b3V0LmZvb3RlckhlaWdodDtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ21heC1oZWlnaHQnOiBtYXhIZWlnaHQgKyAncHgnXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHt9O1xuICAgIH0sXG4gICAgZml4ZWRIZWlnaHQ6IGZ1bmN0aW9uIGZpeGVkSGVpZ2h0KCkge1xuICAgICAgaWYgKHRoaXMubWF4SGVpZ2h0KSB7XG4gICAgICAgIGlmICh0aGlzLnNob3dTdW1tYXJ5KSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGJvdHRvbTogMFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBib3R0b206IHRoaXMubGF5b3V0LnNjcm9sbFggJiYgdGhpcy5kYXRhLmxlbmd0aCA/IHRoaXMubGF5b3V0Lmd1dHRlcldpZHRoICsgJ3B4JyA6ICcnXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGhpcy5zaG93U3VtbWFyeSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBoZWlnaHQ6IHRoaXMubGF5b3V0LnRhYmxlSGVpZ2h0ID8gdGhpcy5sYXlvdXQudGFibGVIZWlnaHQgKyAncHgnIDogJydcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaGVpZ2h0OiB0aGlzLmxheW91dC52aWV3cG9ydEhlaWdodCA/IHRoaXMubGF5b3V0LnZpZXdwb3J0SGVpZ2h0ICsgJ3B4JyA6ICcnXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSxcbiAgICBlbXB0eUJsb2NrU3R5bGU6IGZ1bmN0aW9uIGVtcHR5QmxvY2tTdHlsZSgpIHtcbiAgICAgIGlmICh0aGlzLmRhdGEgJiYgdGhpcy5kYXRhLmxlbmd0aCkgcmV0dXJuIG51bGw7XG4gICAgICB2YXIgaGVpZ2h0ID0gJzEwMCUnO1xuICAgICAgaWYgKHRoaXMubGF5b3V0LmFwcGVuZEhlaWdodCkge1xuICAgICAgICBoZWlnaHQgPSAnY2FsYygxMDAlIC0gJyArIHRoaXMubGF5b3V0LmFwcGVuZEhlaWdodCArICdweCknO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgd2lkdGg6IHRoaXMuYm9keVdpZHRoLFxuICAgICAgICBoZWlnaHQ6IGhlaWdodFxuICAgICAgfTtcbiAgICB9XG4gIH0sIG1hcFN0YXRlcyh7XG4gICAgc2VsZWN0aW9uOiAnc2VsZWN0aW9uJyxcbiAgICBjb2x1bW5zOiAnY29sdW1ucycsXG4gICAgdGFibGVEYXRhOiAnZGF0YScsXG4gICAgZml4ZWRDb2x1bW5zOiAnZml4ZWRDb2x1bW5zJyxcbiAgICByaWdodEZpeGVkQ29sdW1uczogJ3JpZ2h0Rml4ZWRDb2x1bW5zJ1xuICB9KSksXG5cbiAgd2F0Y2g6IHtcbiAgICBoZWlnaHQ6IHtcbiAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcbiAgICAgIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIodmFsdWUpIHtcbiAgICAgICAgdGhpcy5sYXlvdXQuc2V0SGVpZ2h0KHZhbHVlKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbWF4SGVpZ2h0OiB7XG4gICAgICBpbW1lZGlhdGU6IHRydWUsXG4gICAgICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKHZhbHVlKSB7XG4gICAgICAgIHRoaXMubGF5b3V0LnNldE1heEhlaWdodCh2YWx1ZSk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRSb3dLZXk6IHtcbiAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcbiAgICAgIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIodmFsdWUpIHtcbiAgICAgICAgaWYgKCF0aGlzLnJvd0tleSkgcmV0dXJuO1xuICAgICAgICB0aGlzLnN0b3JlLnNldEN1cnJlbnRSb3dLZXkodmFsdWUpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBkYXRhOiB7XG4gICAgICBpbW1lZGlhdGU6IHRydWUsXG4gICAgICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuc3RvcmUuY29tbWl0KCdzZXREYXRhJywgdmFsdWUpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBleHBhbmRSb3dLZXlzOiB7XG4gICAgICBpbW1lZGlhdGU6IHRydWUsXG4gICAgICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKG5ld1ZhbCkge1xuICAgICAgICBpZiAobmV3VmFsKSB7XG4gICAgICAgICAgdGhpcy5zdG9yZS5zZXRFeHBhbmRSb3dLZXlzQWRhcHRlcihuZXdWYWwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQ6IGZ1bmN0aW9uIGNyZWF0ZWQoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHRoaXMudGFibGVJZCA9ICdlbC10YWJsZV8nICsgdGFibGVJZFNlZWQrKztcbiAgICB0aGlzLmRlYm91bmNlZFVwZGF0ZUxheW91dCA9IE9iamVjdChleHRlcm5hbF90aHJvdHRsZV9kZWJvdW5jZV9bXCJkZWJvdW5jZVwiXSkoNTAsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpcy5kb0xheW91dCgpO1xuICAgIH0pO1xuICB9LFxuICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgdGhpcy5iaW5kRXZlbnRzKCk7XG4gICAgdGhpcy5zdG9yZS51cGRhdGVDb2x1bW5zKCk7XG4gICAgdGhpcy5kb0xheW91dCgpO1xuXG4gICAgdGhpcy5yZXNpemVTdGF0ZSA9IHtcbiAgICAgIHdpZHRoOiB0aGlzLiRlbC5vZmZzZXRXaWR0aCxcbiAgICAgIGhlaWdodDogdGhpcy4kZWwub2Zmc2V0SGVpZ2h0XG4gICAgfTtcblxuICAgIC8vIGluaXQgZmlsdGVyc1xuICAgIHRoaXMuc3RvcmUuc3RhdGVzLmNvbHVtbnMuZm9yRWFjaChmdW5jdGlvbiAoY29sdW1uKSB7XG4gICAgICBpZiAoY29sdW1uLmZpbHRlcmVkVmFsdWUgJiYgY29sdW1uLmZpbHRlcmVkVmFsdWUubGVuZ3RoKSB7XG4gICAgICAgIF90aGlzMi5zdG9yZS5jb21taXQoJ2ZpbHRlckNoYW5nZScsIHtcbiAgICAgICAgICBjb2x1bW46IGNvbHVtbixcbiAgICAgICAgICB2YWx1ZXM6IGNvbHVtbi5maWx0ZXJlZFZhbHVlLFxuICAgICAgICAgIHNpbGVudDogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuJHJlYWR5ID0gdHJ1ZTtcbiAgfSxcbiAgZGVzdHJveWVkOiBmdW5jdGlvbiBkZXN0cm95ZWQoKSB7XG4gICAgdGhpcy51bmJpbmRFdmVudHMoKTtcbiAgfSxcbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICB2YXIgX3RyZWVQcm9wcyA9IHRoaXMudHJlZVByb3BzLFxuICAgICAgICBfdHJlZVByb3BzJGhhc0NoaWxkcmUgPSBfdHJlZVByb3BzLmhhc0NoaWxkcmVuLFxuICAgICAgICBoYXNDaGlsZHJlbiA9IF90cmVlUHJvcHMkaGFzQ2hpbGRyZSA9PT0gdW5kZWZpbmVkID8gJ2hhc0NoaWxkcmVuJyA6IF90cmVlUHJvcHMkaGFzQ2hpbGRyZSxcbiAgICAgICAgX3RyZWVQcm9wcyRjaGlsZHJlbiA9IF90cmVlUHJvcHMuY2hpbGRyZW4sXG4gICAgICAgIGNoaWxkcmVuID0gX3RyZWVQcm9wcyRjaGlsZHJlbiA9PT0gdW5kZWZpbmVkID8gJ2NoaWxkcmVuJyA6IF90cmVlUHJvcHMkY2hpbGRyZW47XG5cbiAgICB0aGlzLnN0b3JlID0gY3JlYXRlU3RvcmUodGhpcywge1xuICAgICAgcm93S2V5OiB0aGlzLnJvd0tleSxcbiAgICAgIGRlZmF1bHRFeHBhbmRBbGw6IHRoaXMuZGVmYXVsdEV4cGFuZEFsbCxcbiAgICAgIHNlbGVjdE9uSW5kZXRlcm1pbmF0ZTogdGhpcy5zZWxlY3RPbkluZGV0ZXJtaW5hdGUsXG4gICAgICAvLyBUcmVlVGFibGUg55qE55u45YWz6YWN572uXG4gICAgICBpbmRlbnQ6IHRoaXMuaW5kZW50LFxuICAgICAgbGF6eTogdGhpcy5sYXp5LFxuICAgICAgbGF6eUNvbHVtbklkZW50aWZpZXI6IGhhc0NoaWxkcmVuLFxuICAgICAgY2hpbGRyZW5Db2x1bW5OYW1lOiBjaGlsZHJlblxuICAgIH0pO1xuICAgIHZhciBsYXlvdXQgPSBuZXcgdGFibGVfbGF5b3V0KHtcbiAgICAgIHN0b3JlOiB0aGlzLnN0b3JlLFxuICAgICAgdGFibGU6IHRoaXMsXG4gICAgICBmaXQ6IHRoaXMuZml0LFxuICAgICAgc2hvd0hlYWRlcjogdGhpcy5zaG93SGVhZGVyXG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxheW91dDogbGF5b3V0LFxuICAgICAgaXNIaWRkZW46IGZhbHNlLFxuICAgICAgcmVuZGVyRXhwYW5kZWQ6IG51bGwsXG4gICAgICByZXNpemVQcm94eVZpc2libGU6IGZhbHNlLFxuICAgICAgcmVzaXplU3RhdGU6IHtcbiAgICAgICAgd2lkdGg6IG51bGwsXG4gICAgICAgIGhlaWdodDogbnVsbFxuICAgICAgfSxcbiAgICAgIC8vIOaYr+WQpuaLpeacieWkmue6p+ihqOWktFxuICAgICAgaXNHcm91cDogZmFsc2UsXG4gICAgICBzY3JvbGxQb3NpdGlvbjogJ2xlZnQnXG4gICAgfTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3RhYmxlL3NyYy90YWJsZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX3RhYmxldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHRhYmxldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3RhYmxlL3NyYy90YWJsZS52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciB0YWJsZV9jb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIHNyY190YWJsZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgdGFibGV2dWVfdHlwZV90ZW1wbGF0ZV9pZF80OTNmZTM0ZV9yZW5kZXIsXG4gIHRhYmxldnVlX3R5cGVfdGVtcGxhdGVfaWRfNDkzZmUzNGVfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciB0YWJsZV9hcGk7IH1cbnRhYmxlX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvdGFibGUvc3JjL3RhYmxlLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfdGFibGUgPSAodGFibGVfY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy90YWJsZS9pbmRleC5qc1xuXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5zcmNfdGFibGUuaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcbiAgVnVlLmNvbXBvbmVudChzcmNfdGFibGUubmFtZSwgc3JjX3RhYmxlKTtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhY2thZ2VzX3RhYmxlID0gKHNyY190YWJsZSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3RhYmxlL3NyYy9jb25maWcuanNcblxuXG52YXIgY2VsbFN0YXJ0cyA9IHtcbiAgZGVmYXVsdDoge1xuICAgIG9yZGVyOiAnJ1xuICB9LFxuICBzZWxlY3Rpb246IHtcbiAgICB3aWR0aDogNDgsXG4gICAgbWluV2lkdGg6IDQ4LFxuICAgIHJlYWxXaWR0aDogNDgsXG4gICAgb3JkZXI6ICcnLFxuICAgIGNsYXNzTmFtZTogJ2VsLXRhYmxlLWNvbHVtbi0tc2VsZWN0aW9uJ1xuICB9LFxuICBleHBhbmQ6IHtcbiAgICB3aWR0aDogNDgsXG4gICAgbWluV2lkdGg6IDQ4LFxuICAgIHJlYWxXaWR0aDogNDgsXG4gICAgb3JkZXI6ICcnXG4gIH0sXG4gIGluZGV4OiB7XG4gICAgd2lkdGg6IDQ4LFxuICAgIG1pbldpZHRoOiA0OCxcbiAgICByZWFsV2lkdGg6IDQ4LFxuICAgIG9yZGVyOiAnJ1xuICB9XG59O1xuXG4vLyDov5nkupvpgInpobnkuI3lupTor6Xooqvopobnm5ZcbnZhciBjZWxsRm9yY2VkID0ge1xuICBzZWxlY3Rpb246IHtcbiAgICByZW5kZXJIZWFkZXI6IGZ1bmN0aW9uIHJlbmRlckhlYWRlcihoLCBfcmVmKSB7XG4gICAgICB2YXIgc3RvcmUgPSBfcmVmLnN0b3JlO1xuXG4gICAgICByZXR1cm4gaCgnZWwtY2hlY2tib3gnLCB7XG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgZGlzYWJsZWQ6IHN0b3JlLnN0YXRlcy5kYXRhICYmIHN0b3JlLnN0YXRlcy5kYXRhLmxlbmd0aCA9PT0gMCxcbiAgICAgICAgICBpbmRldGVybWluYXRlOiBzdG9yZS5zdGF0ZXMuc2VsZWN0aW9uLmxlbmd0aCA+IDAgJiYgIXRoaXMuaXNBbGxTZWxlY3RlZCxcblxuICAgICAgICAgIHZhbHVlOiB0aGlzLmlzQWxsU2VsZWN0ZWQgfSxcbiAgICAgICAgb246IHtcbiAgICAgICAgICAnaW5wdXQnOiB0aGlzLnRvZ2dsZUFsbFNlbGVjdGlvblxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuICAgIHJlbmRlckNlbGw6IGZ1bmN0aW9uIHJlbmRlckNlbGwoaCwgX3JlZjIpIHtcbiAgICAgIHZhciByb3cgPSBfcmVmMi5yb3csXG4gICAgICAgICAgY29sdW1uID0gX3JlZjIuY29sdW1uLFxuICAgICAgICAgIGlzU2VsZWN0ZWQgPSBfcmVmMi5pc1NlbGVjdGVkLFxuICAgICAgICAgIHN0b3JlID0gX3JlZjIuc3RvcmUsXG4gICAgICAgICAgJGluZGV4ID0gX3JlZjIuJGluZGV4O1xuXG4gICAgICByZXR1cm4gaCgnZWwtY2hlY2tib3gnLCB7XG4gICAgICAgIG5hdGl2ZU9uOiB7XG4gICAgICAgICAgJ2NsaWNrJzogZnVuY3Rpb24gY2xpY2soZXZlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgdmFsdWU6IGlzU2VsZWN0ZWQsXG4gICAgICAgICAgZGlzYWJsZWQ6IGNvbHVtbi5zZWxlY3RhYmxlID8gIWNvbHVtbi5zZWxlY3RhYmxlLmNhbGwobnVsbCwgcm93LCAkaW5kZXgpIDogZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAgb246IHtcbiAgICAgICAgICAnaW5wdXQnOiBmdW5jdGlvbiBpbnB1dCgpIHtcbiAgICAgICAgICAgIHN0b3JlLmNvbW1pdCgncm93U2VsZWN0ZWRDaGFuZ2VkJywgcm93KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sXG4gICAgc29ydGFibGU6IGZhbHNlLFxuICAgIHJlc2l6YWJsZTogZmFsc2VcbiAgfSxcbiAgaW5kZXg6IHtcbiAgICByZW5kZXJIZWFkZXI6IGZ1bmN0aW9uIHJlbmRlckhlYWRlcihoLCBfcmVmMykge1xuICAgICAgdmFyIGNvbHVtbiA9IF9yZWYzLmNvbHVtbjtcblxuICAgICAgcmV0dXJuIGNvbHVtbi5sYWJlbCB8fCAnIyc7XG4gICAgfSxcbiAgICByZW5kZXJDZWxsOiBmdW5jdGlvbiByZW5kZXJDZWxsKGgsIF9yZWY0KSB7XG4gICAgICB2YXIgJGluZGV4ID0gX3JlZjQuJGluZGV4LFxuICAgICAgICAgIGNvbHVtbiA9IF9yZWY0LmNvbHVtbjtcblxuICAgICAgdmFyIGkgPSAkaW5kZXggKyAxO1xuICAgICAgdmFyIGluZGV4ID0gY29sdW1uLmluZGV4O1xuXG4gICAgICBpZiAodHlwZW9mIGluZGV4ID09PSAnbnVtYmVyJykge1xuICAgICAgICBpID0gJGluZGV4ICsgaW5kZXg7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbmRleCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBpID0gaW5kZXgoJGluZGV4KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGgoJ2RpdicsIFtpXSk7XG4gICAgfSxcbiAgICBzb3J0YWJsZTogZmFsc2VcbiAgfSxcbiAgZXhwYW5kOiB7XG4gICAgcmVuZGVySGVhZGVyOiBmdW5jdGlvbiByZW5kZXJIZWFkZXIoaCwgX3JlZjUpIHtcbiAgICAgIHZhciBjb2x1bW4gPSBfcmVmNS5jb2x1bW47XG5cbiAgICAgIHJldHVybiBjb2x1bW4ubGFiZWwgfHwgJyc7XG4gICAgfSxcbiAgICByZW5kZXJDZWxsOiBmdW5jdGlvbiByZW5kZXJDZWxsKGgsIF9yZWY2KSB7XG4gICAgICB2YXIgcm93ID0gX3JlZjYucm93LFxuICAgICAgICAgIHN0b3JlID0gX3JlZjYuc3RvcmUsXG4gICAgICAgICAgaXNFeHBhbmRlZCA9IF9yZWY2LmlzRXhwYW5kZWQ7XG5cbiAgICAgIHZhciBjbGFzc2VzID0gWydlbC10YWJsZV9fZXhwYW5kLWljb24nXTtcbiAgICAgIGlmIChpc0V4cGFuZGVkKSB7XG4gICAgICAgIGNsYXNzZXMucHVzaCgnZWwtdGFibGVfX2V4cGFuZC1pY29uLS1leHBhbmRlZCcpO1xuICAgICAgfVxuICAgICAgdmFyIGNhbGxiYWNrID0gZnVuY3Rpb24gY2FsbGJhY2soZSkge1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBzdG9yZS50b2dnbGVSb3dFeHBhbnNpb24ocm93KTtcbiAgICAgIH07XG4gICAgICByZXR1cm4gaChcbiAgICAgICAgJ2RpdicsXG4gICAgICAgIHsgJ2NsYXNzJzogY2xhc3NlcyxcbiAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgJ2NsaWNrJzogY2FsbGJhY2tcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFtoKCdpJywgeyAnY2xhc3MnOiAnZWwtaWNvbiBlbC1pY29uLWFycm93LXJpZ2h0JyB9KV1cbiAgICAgICk7XG4gICAgfSxcbiAgICBzb3J0YWJsZTogZmFsc2UsXG4gICAgcmVzaXphYmxlOiBmYWxzZSxcbiAgICBjbGFzc05hbWU6ICdlbC10YWJsZV9fZXhwYW5kLWNvbHVtbidcbiAgfVxufTtcblxuZnVuY3Rpb24gZGVmYXVsdFJlbmRlckNlbGwoaCwgX3JlZjcpIHtcbiAgdmFyIHJvdyA9IF9yZWY3LnJvdyxcbiAgICAgIGNvbHVtbiA9IF9yZWY3LmNvbHVtbixcbiAgICAgICRpbmRleCA9IF9yZWY3LiRpbmRleDtcblxuICB2YXIgcHJvcGVydHkgPSBjb2x1bW4ucHJvcGVydHk7XG4gIHZhciB2YWx1ZSA9IHByb3BlcnR5ICYmIE9iamVjdCh1dGlsX1tcImdldFByb3BCeVBhdGhcIl0pKHJvdywgcHJvcGVydHkpLnY7XG4gIGlmIChjb2x1bW4gJiYgY29sdW1uLmZvcm1hdHRlcikge1xuICAgIHJldHVybiBjb2x1bW4uZm9ybWF0dGVyKHJvdywgY29sdW1uLCB2YWx1ZSwgJGluZGV4KTtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIHRyZWVDZWxsUHJlZml4KGgsIF9yZWY4KSB7XG4gIHZhciByb3cgPSBfcmVmOC5yb3csXG4gICAgICB0cmVlTm9kZSA9IF9yZWY4LnRyZWVOb2RlLFxuICAgICAgc3RvcmUgPSBfcmVmOC5zdG9yZTtcblxuICBpZiAoIXRyZWVOb2RlKSByZXR1cm4gbnVsbDtcbiAgdmFyIGVsZSA9IFtdO1xuICB2YXIgY2FsbGJhY2sgPSBmdW5jdGlvbiBjYWxsYmFjayhlKSB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBzdG9yZS5sb2FkT3JUb2dnbGUocm93KTtcbiAgfTtcbiAgaWYgKHRyZWVOb2RlLmluZGVudCkge1xuICAgIGVsZS5wdXNoKGgoJ3NwYW4nLCB7ICdjbGFzcyc6ICdlbC10YWJsZV9faW5kZW50Jywgc3R5bGU6IHsgJ3BhZGRpbmctbGVmdCc6IHRyZWVOb2RlLmluZGVudCArICdweCcgfSB9KSk7XG4gIH1cbiAgaWYgKHR5cGVvZiB0cmVlTm9kZS5leHBhbmRlZCA9PT0gJ2Jvb2xlYW4nICYmICF0cmVlTm9kZS5ub0xhenlDaGlsZHJlbikge1xuICAgIHZhciBleHBhbmRDbGFzc2VzID0gWydlbC10YWJsZV9fZXhwYW5kLWljb24nLCB0cmVlTm9kZS5leHBhbmRlZCA/ICdlbC10YWJsZV9fZXhwYW5kLWljb24tLWV4cGFuZGVkJyA6ICcnXTtcbiAgICB2YXIgaWNvbkNsYXNzZXMgPSBbJ2VsLWljb24tYXJyb3ctcmlnaHQnXTtcbiAgICBpZiAodHJlZU5vZGUubG9hZGluZykge1xuICAgICAgaWNvbkNsYXNzZXMgPSBbJ2VsLWljb24tbG9hZGluZyddO1xuICAgIH1cbiAgICBlbGUucHVzaChoKFxuICAgICAgJ2RpdicsXG4gICAgICB7ICdjbGFzcyc6IGV4cGFuZENsYXNzZXMsXG4gICAgICAgIG9uOiB7XG4gICAgICAgICAgJ2NsaWNrJzogY2FsbGJhY2tcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFtoKCdpJywgeyAnY2xhc3MnOiBpY29uQ2xhc3NlcyB9KV1cbiAgICApKTtcbiAgfSBlbHNlIHtcbiAgICBlbGUucHVzaChoKCdzcGFuJywgeyAnY2xhc3MnOiAnZWwtdGFibGVfX3BsYWNlaG9sZGVyJyB9KSk7XG4gIH1cbiAgcmV0dXJuIGVsZTtcbn1cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdGFibGUvc3JjL3RhYmxlLWNvbHVtbi5qc1xudmFyIHRhYmxlX2NvbHVtbl9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcblxuXG5cblxuXG52YXIgY29sdW1uSWRTZWVkID0gMTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgdGFibGVfY29sdW1uID0gKHtcbiAgbmFtZTogJ0VsVGFibGVDb2x1bW4nLFxuXG4gIHByb3BzOiB7XG4gICAgdHlwZToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2RlZmF1bHQnXG4gICAgfSxcbiAgICBsYWJlbDogU3RyaW5nLFxuICAgIGNsYXNzTmFtZTogU3RyaW5nLFxuICAgIGxhYmVsQ2xhc3NOYW1lOiBTdHJpbmcsXG4gICAgcHJvcGVydHk6IFN0cmluZyxcbiAgICBwcm9wOiBTdHJpbmcsXG4gICAgd2lkdGg6IHt9LFxuICAgIG1pbldpZHRoOiB7fSxcbiAgICByZW5kZXJIZWFkZXI6IEZ1bmN0aW9uLFxuICAgIHNvcnRhYmxlOiB7XG4gICAgICB0eXBlOiBbQm9vbGVhbiwgU3RyaW5nXSxcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSxcbiAgICBzb3J0TWV0aG9kOiBGdW5jdGlvbixcbiAgICBzb3J0Qnk6IFtTdHJpbmcsIEZ1bmN0aW9uLCBBcnJheV0sXG4gICAgcmVzaXphYmxlOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0sXG4gICAgY29sdW1uS2V5OiBTdHJpbmcsXG4gICAgYWxpZ246IFN0cmluZyxcbiAgICBoZWFkZXJBbGlnbjogU3RyaW5nLFxuICAgIHNob3dUb29sdGlwV2hlbk92ZXJmbG93OiBCb29sZWFuLFxuICAgIHNob3dPdmVyZmxvd1Rvb2x0aXA6IEJvb2xlYW4sXG4gICAgZml4ZWQ6IFtCb29sZWFuLCBTdHJpbmddLFxuICAgIGZvcm1hdHRlcjogRnVuY3Rpb24sXG4gICAgc2VsZWN0YWJsZTogRnVuY3Rpb24sXG4gICAgcmVzZXJ2ZVNlbGVjdGlvbjogQm9vbGVhbixcbiAgICBmaWx0ZXJNZXRob2Q6IEZ1bmN0aW9uLFxuICAgIGZpbHRlcmVkVmFsdWU6IEFycmF5LFxuICAgIGZpbHRlcnM6IEFycmF5LFxuICAgIGZpbHRlclBsYWNlbWVudDogU3RyaW5nLFxuICAgIGZpbHRlck11bHRpcGxlOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0sXG4gICAgaW5kZXg6IFtOdW1iZXIsIEZ1bmN0aW9uXSxcbiAgICBzb3J0T3JkZXJzOiB7XG4gICAgICB0eXBlOiBBcnJheSxcbiAgICAgIGRlZmF1bHQ6IGZ1bmN0aW9uIF9kZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gWydhc2NlbmRpbmcnLCAnZGVzY2VuZGluZycsIG51bGxdO1xuICAgICAgfSxcbiAgICAgIHZhbGlkYXRvcjogZnVuY3Rpb24gdmFsaWRhdG9yKHZhbCkge1xuICAgICAgICByZXR1cm4gdmFsLmV2ZXJ5KGZ1bmN0aW9uIChvcmRlcikge1xuICAgICAgICAgIHJldHVybiBbJ2FzY2VuZGluZycsICdkZXNjZW5kaW5nJywgbnVsbF0uaW5kZXhPZihvcmRlcikgPiAtMTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzU3ViQ29sdW1uOiBmYWxzZSxcbiAgICAgIGNvbHVtbnM6IFtdXG4gICAgfTtcbiAgfSxcblxuXG4gIGNvbXB1dGVkOiB7XG4gICAgb3duZXI6IGZ1bmN0aW9uIG93bmVyKCkge1xuICAgICAgdmFyIHBhcmVudCA9IHRoaXMuJHBhcmVudDtcbiAgICAgIHdoaWxlIChwYXJlbnQgJiYgIXBhcmVudC50YWJsZUlkKSB7XG4gICAgICAgIHBhcmVudCA9IHBhcmVudC4kcGFyZW50O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHBhcmVudDtcbiAgICB9LFxuICAgIGNvbHVtbk9yVGFibGVQYXJlbnQ6IGZ1bmN0aW9uIGNvbHVtbk9yVGFibGVQYXJlbnQoKSB7XG4gICAgICB2YXIgcGFyZW50ID0gdGhpcy4kcGFyZW50O1xuICAgICAgd2hpbGUgKHBhcmVudCAmJiAhcGFyZW50LnRhYmxlSWQgJiYgIXBhcmVudC5jb2x1bW5JZCkge1xuICAgICAgICBwYXJlbnQgPSBwYXJlbnQuJHBhcmVudDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgfSxcbiAgICByZWFsV2lkdGg6IGZ1bmN0aW9uIHJlYWxXaWR0aCgpIHtcbiAgICAgIHJldHVybiBwYXJzZVdpZHRoKHRoaXMud2lkdGgpO1xuICAgIH0sXG4gICAgcmVhbE1pbldpZHRoOiBmdW5jdGlvbiByZWFsTWluV2lkdGgoKSB7XG4gICAgICByZXR1cm4gcGFyc2VNaW5XaWR0aCh0aGlzLm1pbldpZHRoKTtcbiAgICB9LFxuICAgIHJlYWxBbGlnbjogZnVuY3Rpb24gcmVhbEFsaWduKCkge1xuICAgICAgcmV0dXJuIHRoaXMuYWxpZ24gPyAnaXMtJyArIHRoaXMuYWxpZ24gOiBudWxsO1xuICAgIH0sXG4gICAgcmVhbEhlYWRlckFsaWduOiBmdW5jdGlvbiByZWFsSGVhZGVyQWxpZ24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5oZWFkZXJBbGlnbiA/ICdpcy0nICsgdGhpcy5oZWFkZXJBbGlnbiA6IHRoaXMucmVhbEFsaWduO1xuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0UHJvcHNEYXRhOiBmdW5jdGlvbiBnZXRQcm9wc0RhdGEoKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgcHJvcHMgPSBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgICAgcHJvcHNbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwcm9wcy5yZWR1Y2UoZnVuY3Rpb24gKHByZXYsIGN1cikge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjdXIpKSB7XG4gICAgICAgICAgY3VyLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgcHJldltrZXldID0gX3RoaXNba2V5XTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJldjtcbiAgICAgIH0sIHt9KTtcbiAgICB9LFxuICAgIGdldENvbHVtbkVsSW5kZXg6IGZ1bmN0aW9uIGdldENvbHVtbkVsSW5kZXgoY2hpbGRyZW4sIGNoaWxkKSB7XG4gICAgICByZXR1cm4gW10uaW5kZXhPZi5jYWxsKGNoaWxkcmVuLCBjaGlsZCk7XG4gICAgfSxcbiAgICBzZXRDb2x1bW5XaWR0aDogZnVuY3Rpb24gc2V0Q29sdW1uV2lkdGgoY29sdW1uKSB7XG4gICAgICBpZiAodGhpcy5yZWFsV2lkdGgpIHtcbiAgICAgICAgY29sdW1uLndpZHRoID0gdGhpcy5yZWFsV2lkdGg7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5yZWFsTWluV2lkdGgpIHtcbiAgICAgICAgY29sdW1uLm1pbldpZHRoID0gdGhpcy5yZWFsTWluV2lkdGg7XG4gICAgICB9XG4gICAgICBpZiAoIWNvbHVtbi5taW5XaWR0aCkge1xuICAgICAgICBjb2x1bW4ubWluV2lkdGggPSA4MDtcbiAgICAgIH1cbiAgICAgIGNvbHVtbi5yZWFsV2lkdGggPSBjb2x1bW4ud2lkdGggPT09IHVuZGVmaW5lZCA/IGNvbHVtbi5taW5XaWR0aCA6IGNvbHVtbi53aWR0aDtcbiAgICAgIHJldHVybiBjb2x1bW47XG4gICAgfSxcbiAgICBzZXRDb2x1bW5Gb3JjZWRQcm9wczogZnVuY3Rpb24gc2V0Q29sdW1uRm9yY2VkUHJvcHMoY29sdW1uKSB7XG4gICAgICAvLyDlr7nkuo7nibnlrprnsbvlnovnmoQgY29sdW1u77yM5p+Q5Lqb5bGe5oCn5LiN5YWB6K646K6+572uXG4gICAgICB2YXIgdHlwZSA9IGNvbHVtbi50eXBlO1xuICAgICAgdmFyIHNvdXJjZSA9IGNlbGxGb3JjZWRbdHlwZV0gfHwge307XG4gICAgICBPYmplY3Qua2V5cyhzb3VyY2UpLmZvckVhY2goZnVuY3Rpb24gKHByb3ApIHtcbiAgICAgICAgdmFyIHZhbHVlID0gc291cmNlW3Byb3BdO1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNvbHVtbltwcm9wXSA9IHByb3AgPT09ICdjbGFzc05hbWUnID8gY29sdW1uW3Byb3BdICsgJyAnICsgdmFsdWUgOiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gY29sdW1uO1xuICAgIH0sXG4gICAgc2V0Q29sdW1uUmVuZGVyczogZnVuY3Rpb24gc2V0Q29sdW1uUmVuZGVycyhjb2x1bW4pIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB2YXIgaCA9IHRoaXMuJGNyZWF0ZUVsZW1lbnQ7XG5cbiAgICAgIC8vIHJlbmRlckhlYWRlciDlsZ7mgKfkuI3mjqjojZDkvb/nlKjjgIJcbiAgICAgIGlmICh0aGlzLnJlbmRlckhlYWRlcikge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1tFbGVtZW50IFdhcm5dW1RhYmxlQ29sdW1uXUNvbXBhcmluZyB0byByZW5kZXItaGVhZGVyLCBzY29wZWQtc2xvdCBoZWFkZXIgaXMgZWFzaWVyIHRvIHVzZS4gV2UgcmVjb21tZW5kIHVzZXJzIHRvIHVzZSBzY29wZWQtc2xvdCBoZWFkZXIuJyk7XG4gICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlICE9PSAnc2VsZWN0aW9uJykge1xuICAgICAgICBjb2x1bW4ucmVuZGVySGVhZGVyID0gZnVuY3Rpb24gKGgsIHNjb3BlKSB7XG4gICAgICAgICAgdmFyIHJlbmRlckhlYWRlciA9IF90aGlzMi4kc2NvcGVkU2xvdHMuaGVhZGVyO1xuICAgICAgICAgIHJldHVybiByZW5kZXJIZWFkZXIgPyByZW5kZXJIZWFkZXIoc2NvcGUpIDogY29sdW1uLmxhYmVsO1xuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICB2YXIgb3JpZ2luUmVuZGVyQ2VsbCA9IGNvbHVtbi5yZW5kZXJDZWxsO1xuICAgICAgLy8gVE9ETzog6L+Z6YeM55qE5a6e546w6LCD5pW0XG4gICAgICBpZiAoY29sdW1uLnR5cGUgPT09ICdleHBhbmQnKSB7XG4gICAgICAgIC8vIOWvueS6juWxleW8gOihjO+8jHJlbmRlckNlbGwg5LiN5YWB6K646YWN572u55qE44CC5Zyo5LiK5LiA5q2l5Lit5bey57uP6K6+572u6L+H77yM6L+Z6YeM6ZyA6KaB566A5Y2V5bCB6KOF5LiA5LiL44CCXG4gICAgICAgIGNvbHVtbi5yZW5kZXJDZWxsID0gZnVuY3Rpb24gKGgsIGRhdGEpIHtcbiAgICAgICAgICByZXR1cm4gaChcbiAgICAgICAgICAgICdkaXYnLFxuICAgICAgICAgICAgeyAnY2xhc3MnOiAnY2VsbCcgfSxcbiAgICAgICAgICAgIFtvcmlnaW5SZW5kZXJDZWxsKGgsIGRhdGEpXVxuICAgICAgICAgICk7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMub3duZXIucmVuZGVyRXhwYW5kZWQgPSBmdW5jdGlvbiAoaCwgZGF0YSkge1xuICAgICAgICAgIHJldHVybiBfdGhpczIuJHNjb3BlZFNsb3RzLmRlZmF1bHQgPyBfdGhpczIuJHNjb3BlZFNsb3RzLmRlZmF1bHQoZGF0YSkgOiBfdGhpczIuJHNsb3RzLmRlZmF1bHQ7XG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvcmlnaW5SZW5kZXJDZWxsID0gb3JpZ2luUmVuZGVyQ2VsbCB8fCBkZWZhdWx0UmVuZGVyQ2VsbDtcbiAgICAgICAgLy8g5a+5IHJlbmRlckNlbGwg6L+b6KGM5YyF6KOFXG4gICAgICAgIGNvbHVtbi5yZW5kZXJDZWxsID0gZnVuY3Rpb24gKGgsIGRhdGEpIHtcbiAgICAgICAgICB2YXIgY2hpbGRyZW4gPSBudWxsO1xuICAgICAgICAgIGlmIChfdGhpczIuJHNjb3BlZFNsb3RzLmRlZmF1bHQpIHtcbiAgICAgICAgICAgIGNoaWxkcmVuID0gX3RoaXMyLiRzY29wZWRTbG90cy5kZWZhdWx0KGRhdGEpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjaGlsZHJlbiA9IG9yaWdpblJlbmRlckNlbGwoaCwgZGF0YSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBwcmVmaXggPSB0cmVlQ2VsbFByZWZpeChoLCBkYXRhKTtcbiAgICAgICAgICB2YXIgcHJvcHMgPSB7XG4gICAgICAgICAgICBjbGFzczogJ2NlbGwnLFxuICAgICAgICAgICAgc3R5bGU6IHt9XG4gICAgICAgICAgfTtcbiAgICAgICAgICBpZiAoY29sdW1uLnNob3dPdmVyZmxvd1Rvb2x0aXApIHtcbiAgICAgICAgICAgIHByb3BzLmNsYXNzICs9ICcgZWwtdG9vbHRpcCc7XG4gICAgICAgICAgICBwcm9wcy5zdHlsZSA9IHsgd2lkdGg6IChkYXRhLmNvbHVtbi5yZWFsV2lkdGggfHwgZGF0YS5jb2x1bW4ud2lkdGgpIC0gMSArICdweCcgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGgoXG4gICAgICAgICAgICAnZGl2JyxcbiAgICAgICAgICAgIHByb3BzLFxuICAgICAgICAgICAgW3ByZWZpeCwgY2hpbGRyZW5dXG4gICAgICAgICAgKTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb2x1bW47XG4gICAgfSxcbiAgICByZWdpc3Rlck5vcm1hbFdhdGNoZXJzOiBmdW5jdGlvbiByZWdpc3Rlck5vcm1hbFdhdGNoZXJzKCkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgIHZhciBwcm9wcyA9IFsnbGFiZWwnLCAncHJvcGVydHknLCAnZmlsdGVycycsICdmaWx0ZXJNdWx0aXBsZScsICdzb3J0YWJsZScsICdpbmRleCcsICdmb3JtYXR0ZXInLCAnY2xhc3NOYW1lJywgJ2xhYmVsQ2xhc3NOYW1lJywgJ3Nob3dPdmVyZmxvd1Rvb2x0aXAnXTtcbiAgICAgIC8vIOS4gOS6m+WxnuaAp+WFt+acieWIq+WQjVxuICAgICAgdmFyIGFsaWFzZXMgPSB7XG4gICAgICAgIHByb3A6ICdwcm9wZXJ0eScsXG4gICAgICAgIHJlYWxBbGlnbjogJ2FsaWduJyxcbiAgICAgICAgcmVhbEhlYWRlckFsaWduOiAnaGVhZGVyQWxpZ24nLFxuICAgICAgICByZWFsV2lkdGg6ICd3aWR0aCdcbiAgICAgIH07XG4gICAgICB2YXIgYWxsQWxpYXNlcyA9IHByb3BzLnJlZHVjZShmdW5jdGlvbiAocHJldiwgY3VyKSB7XG4gICAgICAgIHByZXZbY3VyXSA9IGN1cjtcbiAgICAgICAgcmV0dXJuIHByZXY7XG4gICAgICB9LCBhbGlhc2VzKTtcblxuICAgICAgT2JqZWN0LmtleXMoYWxsQWxpYXNlcykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHZhciBjb2x1bW5LZXkgPSBhbGlhc2VzW2tleV07XG5cbiAgICAgICAgX3RoaXMzLiR3YXRjaChrZXksIGZ1bmN0aW9uIChuZXdWYWwpIHtcbiAgICAgICAgICBfdGhpczMuY29sdW1uQ29uZmlnW2NvbHVtbktleV0gPSBuZXdWYWw7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICByZWdpc3RlckNvbXBsZXhXYXRjaGVyczogZnVuY3Rpb24gcmVnaXN0ZXJDb21wbGV4V2F0Y2hlcnMoKSB7XG4gICAgICB2YXIgX3RoaXM0ID0gdGhpcztcblxuICAgICAgdmFyIHByb3BzID0gWydmaXhlZCddO1xuICAgICAgdmFyIGFsaWFzZXMgPSB7XG4gICAgICAgIHJlYWxXaWR0aDogJ3dpZHRoJyxcbiAgICAgICAgcmVhbE1pbldpZHRoOiAnbWluV2lkdGgnXG4gICAgICB9O1xuICAgICAgdmFyIGFsbEFsaWFzZXMgPSBwcm9wcy5yZWR1Y2UoZnVuY3Rpb24gKHByZXYsIGN1cikge1xuICAgICAgICBwcmV2W2N1cl0gPSBjdXI7XG4gICAgICAgIHJldHVybiBwcmV2O1xuICAgICAgfSwgYWxpYXNlcyk7XG5cbiAgICAgIE9iamVjdC5rZXlzKGFsbEFsaWFzZXMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICB2YXIgY29sdW1uS2V5ID0gYWxpYXNlc1trZXldO1xuXG4gICAgICAgIF90aGlzNC4kd2F0Y2goa2V5LCBmdW5jdGlvbiAobmV3VmFsKSB7XG4gICAgICAgICAgX3RoaXM0LmNvbHVtbkNvbmZpZ1tjb2x1bW5LZXldID0gbmV3VmFsO1xuICAgICAgICAgIHZhciB1cGRhdGVDb2x1bW5zID0gY29sdW1uS2V5ID09PSAnZml4ZWQnO1xuICAgICAgICAgIF90aGlzNC5vd25lci5zdG9yZS5zY2hlZHVsZUxheW91dCh1cGRhdGVDb2x1bW5zKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sXG5cbiAgY29tcG9uZW50czoge1xuICAgIEVsQ2hlY2tib3g6IGNoZWNrYm94X2RlZmF1bHQuYVxuICB9LFxuXG4gIGJlZm9yZUNyZWF0ZTogZnVuY3Rpb24gYmVmb3JlQ3JlYXRlKCkge1xuICAgIHRoaXMucm93ID0ge307XG4gICAgdGhpcy5jb2x1bW4gPSB7fTtcbiAgICB0aGlzLiRpbmRleCA9IDA7XG4gICAgdGhpcy5jb2x1bW5JZCA9ICcnO1xuICB9LFxuICBjcmVhdGVkOiBmdW5jdGlvbiBjcmVhdGVkKCkge1xuICAgIHZhciBwYXJlbnQgPSB0aGlzLmNvbHVtbk9yVGFibGVQYXJlbnQ7XG4gICAgdGhpcy5pc1N1YkNvbHVtbiA9IHRoaXMub3duZXIgIT09IHBhcmVudDtcbiAgICB0aGlzLmNvbHVtbklkID0gKHBhcmVudC50YWJsZUlkIHx8IHBhcmVudC5jb2x1bW5JZCkgKyAnX2NvbHVtbl8nICsgY29sdW1uSWRTZWVkKys7XG5cbiAgICB2YXIgdHlwZSA9IHRoaXMudHlwZSB8fCAnZGVmYXVsdCc7XG4gICAgdmFyIHNvcnRhYmxlID0gdGhpcy5zb3J0YWJsZSA9PT0gJycgPyB0cnVlIDogdGhpcy5zb3J0YWJsZTtcbiAgICB2YXIgZGVmYXVsdHMgPSB0YWJsZV9jb2x1bW5fZXh0ZW5kcyh7fSwgY2VsbFN0YXJ0c1t0eXBlXSwge1xuICAgICAgaWQ6IHRoaXMuY29sdW1uSWQsXG4gICAgICB0eXBlOiB0eXBlLFxuICAgICAgcHJvcGVydHk6IHRoaXMucHJvcCB8fCB0aGlzLnByb3BlcnR5LFxuICAgICAgYWxpZ246IHRoaXMucmVhbEFsaWduLFxuICAgICAgaGVhZGVyQWxpZ246IHRoaXMucmVhbEhlYWRlckFsaWduLFxuICAgICAgc2hvd092ZXJmbG93VG9vbHRpcDogdGhpcy5zaG93T3ZlcmZsb3dUb29sdGlwIHx8IHRoaXMuc2hvd1Rvb2x0aXBXaGVuT3ZlcmZsb3csXG4gICAgICAvLyBmaWx0ZXIg55u45YWz5bGe5oCnXG4gICAgICBmaWx0ZXJhYmxlOiB0aGlzLmZpbHRlcnMgfHwgdGhpcy5maWx0ZXJNZXRob2QsXG4gICAgICBmaWx0ZXJlZFZhbHVlOiBbXSxcbiAgICAgIGZpbHRlclBsYWNlbWVudDogJycsXG4gICAgICBpc0NvbHVtbkdyb3VwOiBmYWxzZSxcbiAgICAgIGZpbHRlck9wZW5lZDogZmFsc2UsXG4gICAgICAvLyBzb3J0IOebuOWFs+WxnuaAp1xuICAgICAgc29ydGFibGU6IHNvcnRhYmxlLFxuICAgICAgLy8gaW5kZXgg5YiXXG4gICAgICBpbmRleDogdGhpcy5pbmRleFxuICAgIH0pO1xuXG4gICAgdmFyIGJhc2ljUHJvcHMgPSBbJ2NvbHVtbktleScsICdsYWJlbCcsICdjbGFzc05hbWUnLCAnbGFiZWxDbGFzc05hbWUnLCAndHlwZScsICdyZW5kZXJIZWFkZXInLCAnZm9ybWF0dGVyJywgJ2ZpeGVkJywgJ3Jlc2l6YWJsZSddO1xuICAgIHZhciBzb3J0UHJvcHMgPSBbJ3NvcnRNZXRob2QnLCAnc29ydEJ5JywgJ3NvcnRPcmRlcnMnXTtcbiAgICB2YXIgc2VsZWN0UHJvcHMgPSBbJ3NlbGVjdGFibGUnLCAncmVzZXJ2ZVNlbGVjdGlvbiddO1xuICAgIHZhciBmaWx0ZXJQcm9wcyA9IFsnZmlsdGVyTWV0aG9kJywgJ2ZpbHRlcnMnLCAnZmlsdGVyTXVsdGlwbGUnLCAnZmlsdGVyT3BlbmVkJywgJ2ZpbHRlcmVkVmFsdWUnLCAnZmlsdGVyUGxhY2VtZW50J107XG5cbiAgICB2YXIgY29sdW1uID0gdGhpcy5nZXRQcm9wc0RhdGEoYmFzaWNQcm9wcywgc29ydFByb3BzLCBzZWxlY3RQcm9wcywgZmlsdGVyUHJvcHMpO1xuICAgIGNvbHVtbiA9IG1lcmdlT3B0aW9ucyhkZWZhdWx0cywgY29sdW1uKTtcblxuICAgIC8vIOazqOaEjyBjb21wb3NlIOS4reWHveaVsOaJp+ihjOeahOmhuuW6j+aYr+S7juWPs+WIsOW3plxuICAgIHZhciBjaGFpbnMgPSBjb21wb3NlKHRoaXMuc2V0Q29sdW1uUmVuZGVycywgdGhpcy5zZXRDb2x1bW5XaWR0aCwgdGhpcy5zZXRDb2x1bW5Gb3JjZWRQcm9wcyk7XG4gICAgY29sdW1uID0gY2hhaW5zKGNvbHVtbik7XG5cbiAgICB0aGlzLmNvbHVtbkNvbmZpZyA9IGNvbHVtbjtcblxuICAgIC8vIOazqOWGjCB3YXRjaGVyXG4gICAgdGhpcy5yZWdpc3Rlck5vcm1hbFdhdGNoZXJzKCk7XG4gICAgdGhpcy5yZWdpc3RlckNvbXBsZXhXYXRjaGVycygpO1xuICB9LFxuICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge1xuICAgIHZhciBvd25lciA9IHRoaXMub3duZXI7XG4gICAgdmFyIHBhcmVudCA9IHRoaXMuY29sdW1uT3JUYWJsZVBhcmVudDtcbiAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLmlzU3ViQ29sdW1uID8gcGFyZW50LiRlbC5jaGlsZHJlbiA6IHBhcmVudC4kcmVmcy5oaWRkZW5Db2x1bW5zLmNoaWxkcmVuO1xuICAgIHZhciBjb2x1bW5JbmRleCA9IHRoaXMuZ2V0Q29sdW1uRWxJbmRleChjaGlsZHJlbiwgdGhpcy4kZWwpO1xuXG4gICAgb3duZXIuc3RvcmUuY29tbWl0KCdpbnNlcnRDb2x1bW4nLCB0aGlzLmNvbHVtbkNvbmZpZywgY29sdW1uSW5kZXgsIHRoaXMuaXNTdWJDb2x1bW4gPyBwYXJlbnQuY29sdW1uQ29uZmlnIDogbnVsbCk7XG4gIH0sXG4gIGRlc3Ryb3llZDogZnVuY3Rpb24gZGVzdHJveWVkKCkge1xuICAgIGlmICghdGhpcy4kcGFyZW50KSByZXR1cm47XG4gICAgdmFyIHBhcmVudCA9IHRoaXMuJHBhcmVudDtcbiAgICB0aGlzLm93bmVyLnN0b3JlLmNvbW1pdCgncmVtb3ZlQ29sdW1uJywgdGhpcy5jb2x1bW5Db25maWcsIHRoaXMuaXNTdWJDb2x1bW4gPyBwYXJlbnQuY29sdW1uQ29uZmlnIDogbnVsbCk7XG4gIH0sXG4gIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKGgpIHtcbiAgICAvLyBzbG90cyDkuZ/opoHmuLLmn5PvvIzpnIDopoHorqHnrpflkIjlubbooajlpLRcbiAgICByZXR1cm4gaCgnZGl2JywgdGhpcy4kc2xvdHMuZGVmYXVsdCk7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy90YWJsZS1jb2x1bW4vaW5kZXguanNcblxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xudGFibGVfY29sdW1uLmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG4gIFZ1ZS5jb21wb25lbnQodGFibGVfY29sdW1uLm5hbWUsIHRhYmxlX2NvbHVtbik7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc190YWJsZV9jb2x1bW4gPSAodGFibGVfY29sdW1uKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvZGF0ZS1waWNrZXIvc3JjL3BpY2tlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NzlhZTA2OWYmXG52YXIgcGlja2VydnVlX3R5cGVfdGVtcGxhdGVfaWRfNzlhZTA2OWZfcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuICFfdm0ucmFuZ2VkXG4gICAgPyBfYyhcbiAgICAgICAgXCJlbC1pbnB1dFwiLFxuICAgICAgICBfdm0uX2IoXG4gICAgICAgICAge1xuICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJjbGlja291dHNpZGVcIixcbiAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtY2xpY2tvdXRzaWRlXCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IF92bS5oYW5kbGVDbG9zZSxcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcImhhbmRsZUNsb3NlXCJcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHJlZjogXCJyZWZlcmVuY2VcIixcbiAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWRhdGUtZWRpdG9yXCIsXG4gICAgICAgICAgICBjbGFzczogXCJlbC1kYXRlLWVkaXRvci0tXCIgKyBfdm0udHlwZSxcbiAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgIHJlYWRvbmx5OlxuICAgICAgICAgICAgICAgICFfdm0uZWRpdGFibGUgfHxcbiAgICAgICAgICAgICAgICBfdm0ucmVhZG9ubHkgfHxcbiAgICAgICAgICAgICAgICBfdm0udHlwZSA9PT0gXCJkYXRlc1wiIHx8XG4gICAgICAgICAgICAgICAgX3ZtLnR5cGUgPT09IFwid2Vla1wiIHx8XG4gICAgICAgICAgICAgICAgX3ZtLnR5cGUgPT09IFwieWVhcnNcIiB8fFxuICAgICAgICAgICAgICAgIF92bS50eXBlID09PSBcIm1vbnRoc1wiLFxuICAgICAgICAgICAgICBkaXNhYmxlZDogX3ZtLnBpY2tlckRpc2FibGVkLFxuICAgICAgICAgICAgICBzaXplOiBfdm0ucGlja2VyU2l6ZSxcbiAgICAgICAgICAgICAgbmFtZTogX3ZtLm5hbWUsXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBfdm0ucGxhY2Vob2xkZXIsXG4gICAgICAgICAgICAgIHZhbHVlOiBfdm0uZGlzcGxheVZhbHVlLFxuICAgICAgICAgICAgICB2YWxpZGF0ZUV2ZW50OiBmYWxzZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgIGZvY3VzOiBfdm0uaGFuZGxlRm9jdXMsXG4gICAgICAgICAgICAgIGlucHV0OiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoX3ZtLnVzZXJJbnB1dCA9IHZhbHVlKVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBjaGFuZ2U6IF92bS5oYW5kbGVDaGFuZ2VcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuYXRpdmVPbjoge1xuICAgICAgICAgICAgICBrZXlkb3duOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLmhhbmRsZUtleWRvd24oJGV2ZW50KVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBtb3VzZWVudGVyOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLmhhbmRsZU1vdXNlRW50ZXIoJGV2ZW50KVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBtb3VzZWxlYXZlOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICBfdm0uc2hvd0Nsb3NlID0gZmFsc2VcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJlbC1pbnB1dFwiLFxuICAgICAgICAgIF92bS5maXJzdElucHV0SWQsXG4gICAgICAgICAgZmFsc2VcbiAgICAgICAgKSxcbiAgICAgICAgW1xuICAgICAgICAgIF9jKFwiaVwiLCB7XG4gICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1pbnB1dF9faWNvblwiLFxuICAgICAgICAgICAgY2xhc3M6IF92bS50cmlnZ2VyQ2xhc3MsXG4gICAgICAgICAgICBhdHRyczogeyBzbG90OiBcInByZWZpeFwiIH0sXG4gICAgICAgICAgICBvbjogeyBjbGljazogX3ZtLmhhbmRsZUZvY3VzIH0sXG4gICAgICAgICAgICBzbG90OiBcInByZWZpeFwiXG4gICAgICAgICAgfSksXG4gICAgICAgICAgX3ZtLmhhdmVUcmlnZ2VyXG4gICAgICAgICAgICA/IF9jKFwiaVwiLCB7XG4gICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtaW5wdXRfX2ljb25cIixcbiAgICAgICAgICAgICAgICBjbGFzczogW192bS5zaG93Q2xvc2UgPyBcIlwiICsgX3ZtLmNsZWFySWNvbiA6IFwiXCJdLFxuICAgICAgICAgICAgICAgIGF0dHJzOiB7IHNsb3Q6IFwic3VmZml4XCIgfSxcbiAgICAgICAgICAgICAgICBvbjogeyBjbGljazogX3ZtLmhhbmRsZUNsaWNrSWNvbiB9LFxuICAgICAgICAgICAgICAgIHNsb3Q6IFwic3VmZml4XCJcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgXVxuICAgICAgKVxuICAgIDogX2MoXG4gICAgICAgIFwiZGl2XCIsXG4gICAgICAgIHtcbiAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6IFwiY2xpY2tvdXRzaWRlXCIsXG4gICAgICAgICAgICAgIHJhd05hbWU6IFwidi1jbGlja291dHNpZGVcIixcbiAgICAgICAgICAgICAgdmFsdWU6IF92bS5oYW5kbGVDbG9zZSxcbiAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJoYW5kbGVDbG9zZVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXSxcbiAgICAgICAgICByZWY6IFwicmVmZXJlbmNlXCIsXG4gICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtZGF0ZS1lZGl0b3IgZWwtcmFuZ2UtZWRpdG9yIGVsLWlucHV0X19pbm5lclwiLFxuICAgICAgICAgIGNsYXNzOiBbXG4gICAgICAgICAgICBcImVsLWRhdGUtZWRpdG9yLS1cIiArIF92bS50eXBlLFxuICAgICAgICAgICAgX3ZtLnBpY2tlclNpemUgPyBcImVsLXJhbmdlLWVkaXRvci0tXCIgKyBfdm0ucGlja2VyU2l6ZSA6IFwiXCIsXG4gICAgICAgICAgICBfdm0ucGlja2VyRGlzYWJsZWQgPyBcImlzLWRpc2FibGVkXCIgOiBcIlwiLFxuICAgICAgICAgICAgX3ZtLnBpY2tlclZpc2libGUgPyBcImlzLWFjdGl2ZVwiIDogXCJcIlxuICAgICAgICAgIF0sXG4gICAgICAgICAgb246IHtcbiAgICAgICAgICAgIGNsaWNrOiBfdm0uaGFuZGxlUmFuZ2VDbGljayxcbiAgICAgICAgICAgIG1vdXNlZW50ZXI6IF92bS5oYW5kbGVNb3VzZUVudGVyLFxuICAgICAgICAgICAgbW91c2VsZWF2ZTogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgIF92bS5zaG93Q2xvc2UgPSBmYWxzZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGtleWRvd246IF92bS5oYW5kbGVLZXlkb3duXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBbXG4gICAgICAgICAgX2MoXCJpXCIsIHtcbiAgICAgICAgICAgIGNsYXNzOiBbXCJlbC1pbnB1dF9faWNvblwiLCBcImVsLXJhbmdlX19pY29uXCIsIF92bS50cmlnZ2VyQ2xhc3NdXG4gICAgICAgICAgfSksXG4gICAgICAgICAgX2MoXG4gICAgICAgICAgICBcImlucHV0XCIsXG4gICAgICAgICAgICBfdm0uX2IoXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1yYW5nZS1pbnB1dFwiLFxuICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU6IFwib2ZmXCIsXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogX3ZtLnN0YXJ0UGxhY2Vob2xkZXIsXG4gICAgICAgICAgICAgICAgICBkaXNhYmxlZDogX3ZtLnBpY2tlckRpc2FibGVkLFxuICAgICAgICAgICAgICAgICAgcmVhZG9ubHk6ICFfdm0uZWRpdGFibGUgfHwgX3ZtLnJlYWRvbmx5LFxuICAgICAgICAgICAgICAgICAgbmFtZTogX3ZtLm5hbWUgJiYgX3ZtLm5hbWVbMF1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGRvbVByb3BzOiB7IHZhbHVlOiBfdm0uZGlzcGxheVZhbHVlICYmIF92bS5kaXNwbGF5VmFsdWVbMF0gfSxcbiAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgaW5wdXQ6IF92bS5oYW5kbGVTdGFydElucHV0LFxuICAgICAgICAgICAgICAgICAgY2hhbmdlOiBfdm0uaGFuZGxlU3RhcnRDaGFuZ2UsXG4gICAgICAgICAgICAgICAgICBmb2N1czogX3ZtLmhhbmRsZUZvY3VzXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBcImlucHV0XCIsXG4gICAgICAgICAgICAgIF92bS5maXJzdElucHV0SWQsXG4gICAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICAgICApXG4gICAgICAgICAgKSxcbiAgICAgICAgICBfdm0uX3QoXCJyYW5nZS1zZXBhcmF0b3JcIiwgW1xuICAgICAgICAgICAgX2MoXCJzcGFuXCIsIHsgc3RhdGljQ2xhc3M6IFwiZWwtcmFuZ2Utc2VwYXJhdG9yXCIgfSwgW1xuICAgICAgICAgICAgICBfdm0uX3YoX3ZtLl9zKF92bS5yYW5nZVNlcGFyYXRvcikpXG4gICAgICAgICAgICBdKVxuICAgICAgICAgIF0pLFxuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJpbnB1dFwiLFxuICAgICAgICAgICAgX3ZtLl9iKFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtcmFuZ2UtaW5wdXRcIixcbiAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlOiBcIm9mZlwiLFxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IF92bS5lbmRQbGFjZWhvbGRlcixcbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBfdm0ucGlja2VyRGlzYWJsZWQsXG4gICAgICAgICAgICAgICAgICByZWFkb25seTogIV92bS5lZGl0YWJsZSB8fCBfdm0ucmVhZG9ubHksXG4gICAgICAgICAgICAgICAgICBuYW1lOiBfdm0ubmFtZSAmJiBfdm0ubmFtZVsxXVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZG9tUHJvcHM6IHsgdmFsdWU6IF92bS5kaXNwbGF5VmFsdWUgJiYgX3ZtLmRpc3BsYXlWYWx1ZVsxXSB9LFxuICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICBpbnB1dDogX3ZtLmhhbmRsZUVuZElucHV0LFxuICAgICAgICAgICAgICAgICAgY2hhbmdlOiBfdm0uaGFuZGxlRW5kQ2hhbmdlLFxuICAgICAgICAgICAgICAgICAgZm9jdXM6IF92bS5oYW5kbGVGb2N1c1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXCJpbnB1dFwiLFxuICAgICAgICAgICAgICBfdm0uc2Vjb25kSW5wdXRJZCxcbiAgICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgICAgIClcbiAgICAgICAgICApLFxuICAgICAgICAgIF92bS5oYXZlVHJpZ2dlclxuICAgICAgICAgICAgPyBfYyhcImlcIiwge1xuICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWlucHV0X19pY29uIGVsLXJhbmdlX19jbG9zZS1pY29uXCIsXG4gICAgICAgICAgICAgICAgY2xhc3M6IFtfdm0uc2hvd0Nsb3NlID8gXCJcIiArIF92bS5jbGVhckljb24gOiBcIlwiXSxcbiAgICAgICAgICAgICAgICBvbjogeyBjbGljazogX3ZtLmhhbmRsZUNsaWNrSWNvbiB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgIF0sXG4gICAgICAgIDJcbiAgICAgIClcbn1cbnZhciBwaWNrZXJ2dWVfdHlwZV90ZW1wbGF0ZV9pZF83OWFlMDY5Zl9zdGF0aWNSZW5kZXJGbnMgPSBbXVxucGlja2VydnVlX3R5cGVfdGVtcGxhdGVfaWRfNzlhZTA2OWZfcmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9kYXRlLXBpY2tlci9zcmMvcGlja2VyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03OWFlMDY5ZiZcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcImVsZW1lbnQtdWkvbGliL3V0aWxzL2RhdGUtdXRpbFwiXG52YXIgZGF0ZV91dGlsXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9waWNrZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuXG5cblxuXG5cblxuXG5cbnZhciBOZXdQb3BwZXIgPSB7XG4gIHByb3BzOiB7XG4gICAgYXBwZW5kVG9Cb2R5OiB2dWVfcG9wcGVyX2RlZmF1bHQuYS5wcm9wcy5hcHBlbmRUb0JvZHksXG4gICAgb2Zmc2V0OiB2dWVfcG9wcGVyX2RlZmF1bHQuYS5wcm9wcy5vZmZzZXQsXG4gICAgYm91bmRhcmllc1BhZGRpbmc6IHZ1ZV9wb3BwZXJfZGVmYXVsdC5hLnByb3BzLmJvdW5kYXJpZXNQYWRkaW5nLFxuICAgIGFycm93T2Zmc2V0OiB2dWVfcG9wcGVyX2RlZmF1bHQuYS5wcm9wcy5hcnJvd09mZnNldCxcbiAgICB0cmFuc2Zvcm1PcmlnaW46IHZ1ZV9wb3BwZXJfZGVmYXVsdC5hLnByb3BzLnRyYW5zZm9ybU9yaWdpblxuICB9LFxuICBtZXRob2RzOiB2dWVfcG9wcGVyX2RlZmF1bHQuYS5tZXRob2RzLFxuICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgIHJldHVybiBtZXJnZV9kZWZhdWx0KCkoeyB2aXNpYmxlQXJyb3c6IHRydWUgfSwgdnVlX3BvcHBlcl9kZWZhdWx0LmEuZGF0YSk7XG4gIH0sXG5cbiAgYmVmb3JlRGVzdHJveTogdnVlX3BvcHBlcl9kZWZhdWx0LmEuYmVmb3JlRGVzdHJveVxufTtcblxudmFyIERFRkFVTFRfRk9STUFUUyA9IHtcbiAgZGF0ZTogJ3l5eXktTU0tZGQnLFxuICBtb250aDogJ3l5eXktTU0nLFxuICBtb250aHM6ICd5eXl5LU1NJyxcbiAgZGF0ZXRpbWU6ICd5eXl5LU1NLWRkIEhIOm1tOnNzJyxcbiAgdGltZTogJ0hIOm1tOnNzJyxcbiAgd2VlazogJ3l5eXl3V1cnLFxuICB0aW1lcmFuZ2U6ICdISDptbTpzcycsXG4gIGRhdGVyYW5nZTogJ3l5eXktTU0tZGQnLFxuICBtb250aHJhbmdlOiAneXl5eS1NTScsXG4gIGRhdGV0aW1lcmFuZ2U6ICd5eXl5LU1NLWRkIEhIOm1tOnNzJyxcbiAgeWVhcjogJ3l5eXknLFxuICB5ZWFyczogJ3l5eXknXG59O1xudmFyIEhBVkVfVFJJR0dFUl9UWVBFUyA9IFsnZGF0ZScsICdkYXRldGltZScsICd0aW1lJywgJ3RpbWUtc2VsZWN0JywgJ3dlZWsnLCAnbW9udGgnLCAneWVhcicsICdkYXRlcmFuZ2UnLCAnbW9udGhyYW5nZScsICd0aW1lcmFuZ2UnLCAnZGF0ZXRpbWVyYW5nZScsICdkYXRlcycsICdtb250aHMnLCAneWVhcnMnXTtcbnZhciBwaWNrZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19EQVRFX0ZPUk1BVFRFUiA9IGZ1bmN0aW9uIERBVEVfRk9STUFUVEVSKHZhbHVlLCBmb3JtYXQpIHtcbiAgaWYgKGZvcm1hdCA9PT0gJ3RpbWVzdGFtcCcpIHJldHVybiB2YWx1ZS5nZXRUaW1lKCk7XG4gIHJldHVybiBPYmplY3QoZGF0ZV91dGlsX1tcImZvcm1hdERhdGVcIl0pKHZhbHVlLCBmb3JtYXQpO1xufTtcbnZhciBwaWNrZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19EQVRFX1BBUlNFUiA9IGZ1bmN0aW9uIERBVEVfUEFSU0VSKHRleHQsIGZvcm1hdCkge1xuICBpZiAoZm9ybWF0ID09PSAndGltZXN0YW1wJykgcmV0dXJuIG5ldyBEYXRlKE51bWJlcih0ZXh0KSk7XG4gIHJldHVybiBPYmplY3QoZGF0ZV91dGlsX1tcInBhcnNlRGF0ZVwiXSkodGV4dCwgZm9ybWF0KTtcbn07XG52YXIgUkFOR0VfRk9STUFUVEVSID0gZnVuY3Rpb24gUkFOR0VfRk9STUFUVEVSKHZhbHVlLCBmb3JtYXQpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gMikge1xuICAgIHZhciBzdGFydCA9IHZhbHVlWzBdO1xuICAgIHZhciBlbmQgPSB2YWx1ZVsxXTtcblxuICAgIGlmIChzdGFydCAmJiBlbmQpIHtcbiAgICAgIHJldHVybiBbcGlja2VydnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfREFURV9GT1JNQVRURVIoc3RhcnQsIGZvcm1hdCksIHBpY2tlcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX0RBVEVfRk9STUFUVEVSKGVuZCwgZm9ybWF0KV07XG4gICAgfVxuICB9XG4gIHJldHVybiAnJztcbn07XG52YXIgUkFOR0VfUEFSU0VSID0gZnVuY3Rpb24gUkFOR0VfUEFSU0VSKGFycmF5LCBmb3JtYXQsIHNlcGFyYXRvcikge1xuICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyYXkpKSB7XG4gICAgYXJyYXkgPSBhcnJheS5zcGxpdChzZXBhcmF0b3IpO1xuICB9XG4gIGlmIChhcnJheS5sZW5ndGggPT09IDIpIHtcbiAgICB2YXIgcmFuZ2UxID0gYXJyYXlbMF07XG4gICAgdmFyIHJhbmdlMiA9IGFycmF5WzFdO1xuXG4gICAgcmV0dXJuIFtwaWNrZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19EQVRFX1BBUlNFUihyYW5nZTEsIGZvcm1hdCksIHBpY2tlcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX0RBVEVfUEFSU0VSKHJhbmdlMiwgZm9ybWF0KV07XG4gIH1cbiAgcmV0dXJuIFtdO1xufTtcbnZhciBUWVBFX1ZBTFVFX1JFU09MVkVSX01BUCA9IHtcbiAgZGVmYXVsdDoge1xuICAgIGZvcm1hdHRlcjogZnVuY3Rpb24gZm9ybWF0dGVyKHZhbHVlKSB7XG4gICAgICBpZiAoIXZhbHVlKSByZXR1cm4gJyc7XG4gICAgICByZXR1cm4gJycgKyB2YWx1ZTtcbiAgICB9LFxuICAgIHBhcnNlcjogZnVuY3Rpb24gcGFyc2VyKHRleHQpIHtcbiAgICAgIGlmICh0ZXh0ID09PSB1bmRlZmluZWQgfHwgdGV4dCA9PT0gJycpIHJldHVybiBudWxsO1xuICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfVxuICB9LFxuICB3ZWVrOiB7XG4gICAgZm9ybWF0dGVyOiBmdW5jdGlvbiBmb3JtYXR0ZXIodmFsdWUsIGZvcm1hdCkge1xuICAgICAgdmFyIHdlZWsgPSBPYmplY3QoZGF0ZV91dGlsX1tcImdldFdlZWtOdW1iZXJcIl0pKHZhbHVlKTtcbiAgICAgIHZhciBtb250aCA9IHZhbHVlLmdldE1vbnRoKCk7XG4gICAgICB2YXIgdHJ1ZURhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG4gICAgICBpZiAod2VlayA9PT0gMSAmJiBtb250aCA9PT0gMTEpIHtcbiAgICAgICAgdHJ1ZURhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gICAgICAgIHRydWVEYXRlLnNldERhdGUodHJ1ZURhdGUuZ2V0RGF0ZSgpICsgMyAtICh0cnVlRGF0ZS5nZXREYXkoKSArIDYpICUgNyk7XG4gICAgICB9XG4gICAgICB2YXIgZGF0ZSA9IE9iamVjdChkYXRlX3V0aWxfW1wiZm9ybWF0RGF0ZVwiXSkodHJ1ZURhdGUsIGZvcm1hdCk7XG5cbiAgICAgIGRhdGUgPSAvV1cvLnRlc3QoZGF0ZSkgPyBkYXRlLnJlcGxhY2UoL1dXLywgd2VlayA8IDEwID8gJzAnICsgd2VlayA6IHdlZWspIDogZGF0ZS5yZXBsYWNlKC9XLywgd2Vlayk7XG4gICAgICByZXR1cm4gZGF0ZTtcbiAgICB9LFxuICAgIHBhcnNlcjogZnVuY3Rpb24gcGFyc2VyKHRleHQsIGZvcm1hdCkge1xuICAgICAgLy8gcGFyc2UgYXMgaWYgYSBub3JtYWwgZGF0ZVxuICAgICAgcmV0dXJuIFRZUEVfVkFMVUVfUkVTT0xWRVJfTUFQLmRhdGUucGFyc2VyKHRleHQsIGZvcm1hdCk7XG4gICAgfVxuICB9LFxuICBkYXRlOiB7XG4gICAgZm9ybWF0dGVyOiBwaWNrZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19EQVRFX0ZPUk1BVFRFUixcbiAgICBwYXJzZXI6IHBpY2tlcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX0RBVEVfUEFSU0VSXG4gIH0sXG4gIGRhdGV0aW1lOiB7XG4gICAgZm9ybWF0dGVyOiBwaWNrZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19EQVRFX0ZPUk1BVFRFUixcbiAgICBwYXJzZXI6IHBpY2tlcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX0RBVEVfUEFSU0VSXG4gIH0sXG4gIGRhdGVyYW5nZToge1xuICAgIGZvcm1hdHRlcjogUkFOR0VfRk9STUFUVEVSLFxuICAgIHBhcnNlcjogUkFOR0VfUEFSU0VSXG4gIH0sXG4gIG1vbnRocmFuZ2U6IHtcbiAgICBmb3JtYXR0ZXI6IFJBTkdFX0ZPUk1BVFRFUixcbiAgICBwYXJzZXI6IFJBTkdFX1BBUlNFUlxuICB9LFxuICBkYXRldGltZXJhbmdlOiB7XG4gICAgZm9ybWF0dGVyOiBSQU5HRV9GT1JNQVRURVIsXG4gICAgcGFyc2VyOiBSQU5HRV9QQVJTRVJcbiAgfSxcbiAgdGltZXJhbmdlOiB7XG4gICAgZm9ybWF0dGVyOiBSQU5HRV9GT1JNQVRURVIsXG4gICAgcGFyc2VyOiBSQU5HRV9QQVJTRVJcbiAgfSxcbiAgdGltZToge1xuICAgIGZvcm1hdHRlcjogcGlja2VydnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfREFURV9GT1JNQVRURVIsXG4gICAgcGFyc2VyOiBwaWNrZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19EQVRFX1BBUlNFUlxuICB9LFxuICBtb250aDoge1xuICAgIGZvcm1hdHRlcjogcGlja2VydnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfREFURV9GT1JNQVRURVIsXG4gICAgcGFyc2VyOiBwaWNrZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19EQVRFX1BBUlNFUlxuICB9LFxuICB5ZWFyOiB7XG4gICAgZm9ybWF0dGVyOiBwaWNrZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19EQVRFX0ZPUk1BVFRFUixcbiAgICBwYXJzZXI6IHBpY2tlcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX0RBVEVfUEFSU0VSXG4gIH0sXG4gIG51bWJlcjoge1xuICAgIGZvcm1hdHRlcjogZnVuY3Rpb24gZm9ybWF0dGVyKHZhbHVlKSB7XG4gICAgICBpZiAoIXZhbHVlKSByZXR1cm4gJyc7XG4gICAgICByZXR1cm4gJycgKyB2YWx1ZTtcbiAgICB9LFxuICAgIHBhcnNlcjogZnVuY3Rpb24gcGFyc2VyKHRleHQpIHtcbiAgICAgIHZhciByZXN1bHQgPSBOdW1iZXIodGV4dCk7XG5cbiAgICAgIGlmICghaXNOYU4odGV4dCkpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgZGF0ZXM6IHtcbiAgICBmb3JtYXR0ZXI6IGZ1bmN0aW9uIGZvcm1hdHRlcih2YWx1ZSwgZm9ybWF0KSB7XG4gICAgICByZXR1cm4gdmFsdWUubWFwKGZ1bmN0aW9uIChkYXRlKSB7XG4gICAgICAgIHJldHVybiBwaWNrZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19EQVRFX0ZPUk1BVFRFUihkYXRlLCBmb3JtYXQpO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBwYXJzZXI6IGZ1bmN0aW9uIHBhcnNlcih2YWx1ZSwgZm9ybWF0KSB7XG4gICAgICByZXR1cm4gKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyB2YWx1ZS5zcGxpdCgnLCAnKSA6IHZhbHVlKS5tYXAoZnVuY3Rpb24gKGRhdGUpIHtcbiAgICAgICAgcmV0dXJuIGRhdGUgaW5zdGFuY2VvZiBEYXRlID8gZGF0ZSA6IHBpY2tlcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX0RBVEVfUEFSU0VSKGRhdGUsIGZvcm1hdCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIG1vbnRoczoge1xuICAgIGZvcm1hdHRlcjogZnVuY3Rpb24gZm9ybWF0dGVyKHZhbHVlLCBmb3JtYXQpIHtcbiAgICAgIHJldHVybiB2YWx1ZS5tYXAoZnVuY3Rpb24gKGRhdGUpIHtcbiAgICAgICAgcmV0dXJuIHBpY2tlcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX0RBVEVfRk9STUFUVEVSKGRhdGUsIGZvcm1hdCk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIHBhcnNlcjogZnVuY3Rpb24gcGFyc2VyKHZhbHVlLCBmb3JtYXQpIHtcbiAgICAgIHJldHVybiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlLnNwbGl0KCcsICcpIDogdmFsdWUpLm1hcChmdW5jdGlvbiAoZGF0ZSkge1xuICAgICAgICByZXR1cm4gZGF0ZSBpbnN0YW5jZW9mIERhdGUgPyBkYXRlIDogcGlja2VydnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfREFURV9QQVJTRVIoZGF0ZSwgZm9ybWF0KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgeWVhcnM6IHtcbiAgICBmb3JtYXR0ZXI6IGZ1bmN0aW9uIGZvcm1hdHRlcih2YWx1ZSwgZm9ybWF0KSB7XG4gICAgICByZXR1cm4gdmFsdWUubWFwKGZ1bmN0aW9uIChkYXRlKSB7XG4gICAgICAgIHJldHVybiBwaWNrZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19EQVRFX0ZPUk1BVFRFUihkYXRlLCBmb3JtYXQpO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBwYXJzZXI6IGZ1bmN0aW9uIHBhcnNlcih2YWx1ZSwgZm9ybWF0KSB7XG4gICAgICByZXR1cm4gKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyB2YWx1ZS5zcGxpdCgnLCAnKSA6IHZhbHVlKS5tYXAoZnVuY3Rpb24gKGRhdGUpIHtcbiAgICAgICAgcmV0dXJuIGRhdGUgaW5zdGFuY2VvZiBEYXRlID8gZGF0ZSA6IHBpY2tlcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX0RBVEVfUEFSU0VSKGRhdGUsIGZvcm1hdCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn07XG52YXIgUExBQ0VNRU5UX01BUCA9IHtcbiAgbGVmdDogJ2JvdHRvbS1zdGFydCcsXG4gIGNlbnRlcjogJ2JvdHRvbScsXG4gIHJpZ2h0OiAnYm90dG9tLWVuZCdcbn07XG5cbnZhciBwYXJzZUFzRm9ybWF0QW5kVHlwZSA9IGZ1bmN0aW9uIHBhcnNlQXNGb3JtYXRBbmRUeXBlKHZhbHVlLCBjdXN0b21Gb3JtYXQsIHR5cGUpIHtcbiAgdmFyIHJhbmdlU2VwYXJhdG9yID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiAnLSc7XG5cbiAgaWYgKCF2YWx1ZSkgcmV0dXJuIG51bGw7XG4gIHZhciBwYXJzZXIgPSAoVFlQRV9WQUxVRV9SRVNPTFZFUl9NQVBbdHlwZV0gfHwgVFlQRV9WQUxVRV9SRVNPTFZFUl9NQVBbJ2RlZmF1bHQnXSkucGFyc2VyO1xuICB2YXIgZm9ybWF0ID0gY3VzdG9tRm9ybWF0IHx8IERFRkFVTFRfRk9STUFUU1t0eXBlXTtcbiAgcmV0dXJuIHBhcnNlcih2YWx1ZSwgZm9ybWF0LCByYW5nZVNlcGFyYXRvcik7XG59O1xuXG52YXIgZm9ybWF0QXNGb3JtYXRBbmRUeXBlID0gZnVuY3Rpb24gZm9ybWF0QXNGb3JtYXRBbmRUeXBlKHZhbHVlLCBjdXN0b21Gb3JtYXQsIHR5cGUpIHtcbiAgaWYgKCF2YWx1ZSkgcmV0dXJuIG51bGw7XG4gIHZhciBmb3JtYXR0ZXIgPSAoVFlQRV9WQUxVRV9SRVNPTFZFUl9NQVBbdHlwZV0gfHwgVFlQRV9WQUxVRV9SRVNPTFZFUl9NQVBbJ2RlZmF1bHQnXSkuZm9ybWF0dGVyO1xuICB2YXIgZm9ybWF0ID0gY3VzdG9tRm9ybWF0IHx8IERFRkFVTFRfRk9STUFUU1t0eXBlXTtcbiAgcmV0dXJuIGZvcm1hdHRlcih2YWx1ZSwgZm9ybWF0KTtcbn07XG5cbi8qXG4gKiBDb25zaWRlcnM6XG4gKiAgIDEuIERhdGUgb2JqZWN0XG4gKiAgIDIuIGRhdGUgc3RyaW5nXG4gKiAgIDMuIGFycmF5IG9mIDEgb3IgMlxuICovXG52YXIgdmFsdWVFcXVhbHMgPSBmdW5jdGlvbiB2YWx1ZUVxdWFscyhhLCBiKSB7XG4gIC8vIGNvbnNpZGVycyBEYXRlIG9iamVjdCBhbmQgc3RyaW5nXG4gIHZhciBkYXRlRXF1YWxzID0gZnVuY3Rpb24gZGF0ZUVxdWFscyhhLCBiKSB7XG4gICAgdmFyIGFJc0RhdGUgPSBhIGluc3RhbmNlb2YgRGF0ZTtcbiAgICB2YXIgYklzRGF0ZSA9IGIgaW5zdGFuY2VvZiBEYXRlO1xuICAgIGlmIChhSXNEYXRlICYmIGJJc0RhdGUpIHtcbiAgICAgIHJldHVybiBhLmdldFRpbWUoKSA9PT0gYi5nZXRUaW1lKCk7XG4gICAgfVxuICAgIGlmICghYUlzRGF0ZSAmJiAhYklzRGF0ZSkge1xuICAgICAgcmV0dXJuIGEgPT09IGI7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcblxuICB2YXIgYUlzQXJyYXkgPSBhIGluc3RhbmNlb2YgQXJyYXk7XG4gIHZhciBiSXNBcnJheSA9IGIgaW5zdGFuY2VvZiBBcnJheTtcbiAgaWYgKGFJc0FycmF5ICYmIGJJc0FycmF5KSB7XG4gICAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gYS5ldmVyeShmdW5jdGlvbiAoaXRlbSwgaW5kZXgpIHtcbiAgICAgIHJldHVybiBkYXRlRXF1YWxzKGl0ZW0sIGJbaW5kZXhdKTtcbiAgICB9KTtcbiAgfVxuICBpZiAoIWFJc0FycmF5ICYmICFiSXNBcnJheSkge1xuICAgIHJldHVybiBkYXRlRXF1YWxzKGEsIGIpO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn07XG5cbnZhciBpc1N0cmluZyA9IGZ1bmN0aW9uIGlzU3RyaW5nKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ3N0cmluZycgfHwgdmFsIGluc3RhbmNlb2YgU3RyaW5nO1xufTtcblxudmFyIHBpY2tlcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX3ZhbGlkYXRvciA9IGZ1bmN0aW9uIHZhbGlkYXRvcih2YWwpIHtcbiAgLy8gZWl0aGVyOiBTdHJpbmcsIEFycmF5IG9mIFN0cmluZywgbnVsbCAvIHVuZGVmaW5lZFxuICByZXR1cm4gdmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkIHx8IGlzU3RyaW5nKHZhbCkgfHwgQXJyYXkuaXNBcnJheSh2YWwpICYmIHZhbC5sZW5ndGggPT09IDIgJiYgdmFsLmV2ZXJ5KGlzU3RyaW5nKTtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBpY2tlcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG1peGluczogW2VtaXR0ZXJfZGVmYXVsdC5hLCBOZXdQb3BwZXJdLFxuXG4gIGluamVjdDoge1xuICAgIGVsRm9ybToge1xuICAgICAgZGVmYXVsdDogJydcbiAgICB9LFxuICAgIGVsRm9ybUl0ZW06IHtcbiAgICAgIGRlZmF1bHQ6ICcnXG4gICAgfVxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgc2l6ZTogU3RyaW5nLFxuICAgIGZvcm1hdDogU3RyaW5nLFxuICAgIHZhbHVlRm9ybWF0OiBTdHJpbmcsXG4gICAgcmVhZG9ubHk6IEJvb2xlYW4sXG4gICAgcGxhY2Vob2xkZXI6IFN0cmluZyxcbiAgICBzdGFydFBsYWNlaG9sZGVyOiBTdHJpbmcsXG4gICAgZW5kUGxhY2Vob2xkZXI6IFN0cmluZyxcbiAgICBwcmVmaXhJY29uOiBTdHJpbmcsXG4gICAgY2xlYXJJY29uOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnZWwtaWNvbi1jaXJjbGUtY2xvc2UnXG4gICAgfSxcbiAgICBuYW1lOiB7XG4gICAgICBkZWZhdWx0OiAnJyxcbiAgICAgIHZhbGlkYXRvcjogcGlja2VydnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfdmFsaWRhdG9yXG4gICAgfSxcbiAgICBkaXNhYmxlZDogQm9vbGVhbixcbiAgICBjbGVhcmFibGU6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSxcbiAgICBpZDoge1xuICAgICAgZGVmYXVsdDogJycsXG4gICAgICB2YWxpZGF0b3I6IHBpY2tlcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX3ZhbGlkYXRvclxuICAgIH0sXG4gICAgcG9wcGVyQ2xhc3M6IFN0cmluZyxcbiAgICBlZGl0YWJsZToge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9LFxuICAgIGFsaWduOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnbGVmdCdcbiAgICB9LFxuICAgIHZhbHVlOiB7fSxcbiAgICBkZWZhdWx0VmFsdWU6IHt9LFxuICAgIGRlZmF1bHRUaW1lOiB7fSxcbiAgICByYW5nZVNlcGFyYXRvcjoge1xuICAgICAgZGVmYXVsdDogJy0nXG4gICAgfSxcbiAgICBwaWNrZXJPcHRpb25zOiB7fSxcbiAgICB1bmxpbmtQYW5lbHM6IEJvb2xlYW4sXG4gICAgdmFsaWRhdGVFdmVudDoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9XG4gIH0sXG5cbiAgY29tcG9uZW50czogeyBFbElucHV0OiBpbnB1dF9kZWZhdWx0LmEgfSxcblxuICBkaXJlY3RpdmVzOiB7IENsaWNrb3V0c2lkZTogY2xpY2tvdXRzaWRlX2RlZmF1bHQuYSB9LFxuXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBpY2tlclZpc2libGU6IGZhbHNlLFxuICAgICAgc2hvd0Nsb3NlOiBmYWxzZSxcbiAgICAgIHVzZXJJbnB1dDogbnVsbCxcbiAgICAgIHZhbHVlT25PcGVuOiBudWxsLCAvLyB2YWx1ZSB3aGVuIHBpY2tlciBvcGVucywgdXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciB0byBlbWl0IGNoYW5nZVxuICAgICAgdW53YXRjaFBpY2tlck9wdGlvbnM6IG51bGxcbiAgICB9O1xuICB9LFxuXG5cbiAgd2F0Y2g6IHtcbiAgICBwaWNrZXJWaXNpYmxlOiBmdW5jdGlvbiBwaWNrZXJWaXNpYmxlKHZhbCkge1xuICAgICAgaWYgKHRoaXMucmVhZG9ubHkgfHwgdGhpcy5waWNrZXJEaXNhYmxlZCkgcmV0dXJuO1xuICAgICAgaWYgKHZhbCkge1xuICAgICAgICB0aGlzLnNob3dQaWNrZXIoKTtcbiAgICAgICAgdGhpcy52YWx1ZU9uT3BlbiA9IEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkgPyBbXS5jb25jYXQodGhpcy52YWx1ZSkgOiB0aGlzLnZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5oaWRlUGlja2VyKCk7XG4gICAgICAgIHRoaXMuZW1pdENoYW5nZSh0aGlzLnZhbHVlKTtcbiAgICAgICAgdGhpcy51c2VySW5wdXQgPSBudWxsO1xuICAgICAgICBpZiAodGhpcy52YWxpZGF0ZUV2ZW50KSB7XG4gICAgICAgICAgdGhpcy5kaXNwYXRjaCgnRWxGb3JtSXRlbScsICdlbC5mb3JtLmJsdXInKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiRlbWl0KCdibHVyJywgdGhpcyk7XG4gICAgICAgIHRoaXMuYmx1cigpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBwYXJzZWRWYWx1ZToge1xuICAgICAgaW1tZWRpYXRlOiB0cnVlLFxuICAgICAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcih2YWwpIHtcbiAgICAgICAgaWYgKHRoaXMucGlja2VyKSB7XG4gICAgICAgICAgdGhpcy5waWNrZXIudmFsdWUgPSB2YWw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGRlZmF1bHRWYWx1ZTogZnVuY3Rpb24gZGVmYXVsdFZhbHVlKHZhbCkge1xuICAgICAgLy8gTk9URTogc2hvdWxkIGV2ZW50dWFsbHkgbW92ZSB0byBqc3ggc3R5bGUgcGlja2VyICsgcGFuZWwgP1xuICAgICAgaWYgKHRoaXMucGlja2VyKSB7XG4gICAgICAgIHRoaXMucGlja2VyLmRlZmF1bHRWYWx1ZSA9IHZhbDtcbiAgICAgIH1cbiAgICB9LFxuICAgIHZhbHVlOiBmdW5jdGlvbiB2YWx1ZSh2YWwsIG9sZFZhbCkge1xuICAgICAgaWYgKCF2YWx1ZUVxdWFscyh2YWwsIG9sZFZhbCkgJiYgIXRoaXMucGlja2VyVmlzaWJsZSAmJiB0aGlzLnZhbGlkYXRlRXZlbnQpIHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaCgnRWxGb3JtSXRlbScsICdlbC5mb3JtLmNoYW5nZScsIHZhbCk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgcmFuZ2VkOiBmdW5jdGlvbiByYW5nZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy50eXBlLmluZGV4T2YoJ3JhbmdlJykgPiAtMTtcbiAgICB9LFxuICAgIHJlZmVyZW5jZTogZnVuY3Rpb24gcmVmZXJlbmNlKCkge1xuICAgICAgdmFyIHJlZmVyZW5jZSA9IHRoaXMuJHJlZnMucmVmZXJlbmNlO1xuICAgICAgcmV0dXJuIHJlZmVyZW5jZS4kZWwgfHwgcmVmZXJlbmNlO1xuICAgIH0sXG4gICAgcmVmSW5wdXQ6IGZ1bmN0aW9uIHJlZklucHV0KCkge1xuICAgICAgaWYgKHRoaXMucmVmZXJlbmNlKSB7XG4gICAgICAgIHJldHVybiBbXS5zbGljZS5jYWxsKHRoaXMucmVmZXJlbmNlLnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0JykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFtdO1xuICAgIH0sXG4gICAgdmFsdWVJc0VtcHR5OiBmdW5jdGlvbiB2YWx1ZUlzRW1wdHkoKSB7XG4gICAgICB2YXIgdmFsID0gdGhpcy52YWx1ZTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHZhbC5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgIGlmICh2YWxbaV0pIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh2YWwpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gICAgdHJpZ2dlckNsYXNzOiBmdW5jdGlvbiB0cmlnZ2VyQ2xhc3MoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcmVmaXhJY29uIHx8ICh0aGlzLnR5cGUuaW5kZXhPZigndGltZScpICE9PSAtMSA/ICdlbC1pY29uLXRpbWUnIDogJ2VsLWljb24tZGF0ZScpO1xuICAgIH0sXG4gICAgc2VsZWN0aW9uTW9kZTogZnVuY3Rpb24gc2VsZWN0aW9uTW9kZSgpIHtcbiAgICAgIGlmICh0aGlzLnR5cGUgPT09ICd3ZWVrJykge1xuICAgICAgICByZXR1cm4gJ3dlZWsnO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnR5cGUgPT09ICdtb250aCcpIHtcbiAgICAgICAgcmV0dXJuICdtb250aCc7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMudHlwZSA9PT0gJ3llYXInKSB7XG4gICAgICAgIHJldHVybiAneWVhcic7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMudHlwZSA9PT0gJ2RhdGVzJykge1xuICAgICAgICByZXR1cm4gJ2RhdGVzJztcbiAgICAgIH0gZWxzZSBpZiAodGhpcy50eXBlID09PSAnbW9udGhzJykge1xuICAgICAgICByZXR1cm4gJ21vbnRocyc7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMudHlwZSA9PT0gJ3llYXJzJykge1xuICAgICAgICByZXR1cm4gJ3llYXJzJztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuICdkYXknO1xuICAgIH0sXG4gICAgaGF2ZVRyaWdnZXI6IGZ1bmN0aW9uIGhhdmVUcmlnZ2VyKCkge1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLnNob3dUcmlnZ2VyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gdGhpcy5zaG93VHJpZ2dlcjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBIQVZFX1RSSUdHRVJfVFlQRVMuaW5kZXhPZih0aGlzLnR5cGUpICE9PSAtMTtcbiAgICB9LFxuICAgIGRpc3BsYXlWYWx1ZTogZnVuY3Rpb24gZGlzcGxheVZhbHVlKCkge1xuICAgICAgdmFyIGZvcm1hdHRlZFZhbHVlID0gZm9ybWF0QXNGb3JtYXRBbmRUeXBlKHRoaXMucGFyc2VkVmFsdWUsIHRoaXMuZm9ybWF0LCB0aGlzLnR5cGUsIHRoaXMucmFuZ2VTZXBhcmF0b3IpO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy51c2VySW5wdXQpKSB7XG4gICAgICAgIHJldHVybiBbdGhpcy51c2VySW5wdXRbMF0gfHwgZm9ybWF0dGVkVmFsdWUgJiYgZm9ybWF0dGVkVmFsdWVbMF0gfHwgJycsIHRoaXMudXNlcklucHV0WzFdIHx8IGZvcm1hdHRlZFZhbHVlICYmIGZvcm1hdHRlZFZhbHVlWzFdIHx8ICcnXTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy51c2VySW5wdXQgIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudXNlcklucHV0O1xuICAgICAgfSBlbHNlIGlmIChmb3JtYXR0ZWRWYWx1ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlID09PSAnZGF0ZXMnIHx8IHRoaXMudHlwZSA9PT0gJ3llYXJzJyB8fCB0aGlzLnR5cGUgPT09ICdtb250aHMnID8gZm9ybWF0dGVkVmFsdWUuam9pbignLCAnKSA6IGZvcm1hdHRlZFZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuICAgIH0sXG4gICAgcGFyc2VkVmFsdWU6IGZ1bmN0aW9uIHBhcnNlZFZhbHVlKCkge1xuICAgICAgaWYgKCF0aGlzLnZhbHVlKSByZXR1cm4gdGhpcy52YWx1ZTsgLy8gY29tcG9uZW50IHZhbHVlIGlzIG5vdCBzZXRcbiAgICAgIGlmICh0aGlzLnR5cGUgPT09ICd0aW1lLXNlbGVjdCcpIHJldHVybiB0aGlzLnZhbHVlOyAvLyB0aW1lLXNlbGVjdCBkb2VzIG5vdCByZXF1aXJlIHBhcnNpbmcsIHRoaXMgbWlnaHQgY2hhbmdlIGluIG5leHQgbWFqb3IgdmVyc2lvblxuXG4gICAgICB2YXIgdmFsdWVJc0RhdGVPYmplY3QgPSBPYmplY3QoZGF0ZV91dGlsX1tcImlzRGF0ZU9iamVjdFwiXSkodGhpcy52YWx1ZSkgfHwgQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSAmJiB0aGlzLnZhbHVlLmV2ZXJ5KGRhdGVfdXRpbF9bXCJpc0RhdGVPYmplY3RcIl0pO1xuICAgICAgaWYgKHZhbHVlSXNEYXRlT2JqZWN0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy52YWx1ZUZvcm1hdCkge1xuICAgICAgICByZXR1cm4gcGFyc2VBc0Zvcm1hdEFuZFR5cGUodGhpcy52YWx1ZSwgdGhpcy52YWx1ZUZvcm1hdCwgdGhpcy50eXBlLCB0aGlzLnJhbmdlU2VwYXJhdG9yKSB8fCB0aGlzLnZhbHVlO1xuICAgICAgfVxuXG4gICAgICAvLyBOT1RFOiBkZWFsIHdpdGggY29tbW9uIGJ1dCBpbmNvcnJlY3QgdXNhZ2UsIHNob3VsZCByZW1vdmUgaW4gbmV4dCBtYWpvciB2ZXJzaW9uXG4gICAgICAvLyB1c2VyIG1pZ2h0IHByb3ZpZGUgc3RyaW5nIC8gdGltZXN0YW1wIHdpdGhvdXQgdmFsdWUtZm9ybWF0LCBjb2VyY2UgdGhlbSBpbnRvIGRhdGUgKG9yIGFycmF5IG9mIGRhdGUpXG4gICAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSA/IHRoaXMudmFsdWUubWFwKGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHZhbCk7XG4gICAgICB9KSA6IG5ldyBEYXRlKHRoaXMudmFsdWUpO1xuICAgIH0sXG4gICAgX2VsRm9ybUl0ZW1TaXplOiBmdW5jdGlvbiBfZWxGb3JtSXRlbVNpemUoKSB7XG4gICAgICByZXR1cm4gKHRoaXMuZWxGb3JtSXRlbSB8fCB7fSkuZWxGb3JtSXRlbVNpemU7XG4gICAgfSxcbiAgICBwaWNrZXJTaXplOiBmdW5jdGlvbiBwaWNrZXJTaXplKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2l6ZSB8fCB0aGlzLl9lbEZvcm1JdGVtU2l6ZSB8fCAodGhpcy4kRUxFTUVOVCB8fCB7fSkuc2l6ZTtcbiAgICB9LFxuICAgIHBpY2tlckRpc2FibGVkOiBmdW5jdGlvbiBwaWNrZXJEaXNhYmxlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRpc2FibGVkIHx8ICh0aGlzLmVsRm9ybSB8fCB7fSkuZGlzYWJsZWQ7XG4gICAgfSxcbiAgICBmaXJzdElucHV0SWQ6IGZ1bmN0aW9uIGZpcnN0SW5wdXRJZCgpIHtcbiAgICAgIHZhciBvYmogPSB7fTtcbiAgICAgIHZhciBpZCA9IHZvaWQgMDtcbiAgICAgIGlmICh0aGlzLnJhbmdlZCkge1xuICAgICAgICBpZCA9IHRoaXMuaWQgJiYgdGhpcy5pZFswXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlkID0gdGhpcy5pZDtcbiAgICAgIH1cbiAgICAgIGlmIChpZCkgb2JqLmlkID0gaWQ7XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH0sXG4gICAgc2Vjb25kSW5wdXRJZDogZnVuY3Rpb24gc2Vjb25kSW5wdXRJZCgpIHtcbiAgICAgIHZhciBvYmogPSB7fTtcbiAgICAgIHZhciBpZCA9IHZvaWQgMDtcbiAgICAgIGlmICh0aGlzLnJhbmdlZCkge1xuICAgICAgICBpZCA9IHRoaXMuaWQgJiYgdGhpcy5pZFsxXTtcbiAgICAgIH1cbiAgICAgIGlmIChpZCkgb2JqLmlkID0gaWQ7XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkOiBmdW5jdGlvbiBjcmVhdGVkKCkge1xuICAgIC8vIHZ1ZS1wb3BwZXJcbiAgICB0aGlzLnBvcHBlck9wdGlvbnMgPSB7XG4gICAgICBib3VuZGFyaWVzUGFkZGluZzogMCxcbiAgICAgIGdwdUFjY2VsZXJhdGlvbjogZmFsc2VcbiAgICB9O1xuICAgIHRoaXMucGxhY2VtZW50ID0gUExBQ0VNRU5UX01BUFt0aGlzLmFsaWduXSB8fCBQTEFDRU1FTlRfTUFQLmxlZnQ7XG5cbiAgICB0aGlzLiRvbignZmllbGRSZXNldCcsIHRoaXMuaGFuZGxlRmllbGRSZXNldCk7XG4gIH0sXG5cblxuICBtZXRob2RzOiB7XG4gICAgZm9jdXM6IGZ1bmN0aW9uIGZvY3VzKCkge1xuICAgICAgaWYgKCF0aGlzLnJhbmdlZCkge1xuICAgICAgICB0aGlzLiRyZWZzLnJlZmVyZW5jZS5mb2N1cygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5oYW5kbGVGb2N1cygpO1xuICAgICAgfVxuICAgIH0sXG4gICAgYmx1cjogZnVuY3Rpb24gYmx1cigpIHtcbiAgICAgIHRoaXMucmVmSW5wdXQuZm9yRWFjaChmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0LmJsdXIoKTtcbiAgICAgIH0pO1xuICAgIH0sXG5cblxuICAgIC8vIHtwYXJzZSwgZm9ybWF0VG99IFZhbHVlIGRlYWxzIG1hcHMgY29tcG9uZW50IHZhbHVlIHdpdGggaW50ZXJuYWwgRGF0ZVxuICAgIHBhcnNlVmFsdWU6IGZ1bmN0aW9uIHBhcnNlVmFsdWUodmFsdWUpIHtcbiAgICAgIHZhciBpc1BhcnNlZCA9IE9iamVjdChkYXRlX3V0aWxfW1wiaXNEYXRlT2JqZWN0XCJdKSh2YWx1ZSkgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUuZXZlcnkoZGF0ZV91dGlsX1tcImlzRGF0ZU9iamVjdFwiXSk7XG4gICAgICBpZiAodGhpcy52YWx1ZUZvcm1hdCAmJiAhaXNQYXJzZWQpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlQXNGb3JtYXRBbmRUeXBlKHZhbHVlLCB0aGlzLnZhbHVlRm9ybWF0LCB0aGlzLnR5cGUsIHRoaXMucmFuZ2VTZXBhcmF0b3IpIHx8IHZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgIH0sXG4gICAgZm9ybWF0VG9WYWx1ZTogZnVuY3Rpb24gZm9ybWF0VG9WYWx1ZShkYXRlKSB7XG4gICAgICB2YXIgaXNGb3JtYXR0YWJsZSA9IE9iamVjdChkYXRlX3V0aWxfW1wiaXNEYXRlT2JqZWN0XCJdKShkYXRlKSB8fCBBcnJheS5pc0FycmF5KGRhdGUpICYmIGRhdGUuZXZlcnkoZGF0ZV91dGlsX1tcImlzRGF0ZU9iamVjdFwiXSk7XG4gICAgICBpZiAodGhpcy52YWx1ZUZvcm1hdCAmJiBpc0Zvcm1hdHRhYmxlKSB7XG4gICAgICAgIHJldHVybiBmb3JtYXRBc0Zvcm1hdEFuZFR5cGUoZGF0ZSwgdGhpcy52YWx1ZUZvcm1hdCwgdGhpcy50eXBlLCB0aGlzLnJhbmdlU2VwYXJhdG9yKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBkYXRlO1xuICAgICAgfVxuICAgIH0sXG5cblxuICAgIC8vIHtwYXJzZSwgZm9ybWF0VG99IFN0cmluZyBkZWFscyB3aXRoIHVzZXIgaW5wdXRcbiAgICBwYXJzZVN0cmluZzogZnVuY3Rpb24gcGFyc2VTdHJpbmcodmFsdWUpIHtcbiAgICAgIHZhciB0eXBlID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB0aGlzLnR5cGUgOiB0aGlzLnR5cGUucmVwbGFjZSgncmFuZ2UnLCAnJyk7XG4gICAgICByZXR1cm4gcGFyc2VBc0Zvcm1hdEFuZFR5cGUodmFsdWUsIHRoaXMuZm9ybWF0LCB0eXBlKTtcbiAgICB9LFxuICAgIGZvcm1hdFRvU3RyaW5nOiBmdW5jdGlvbiBmb3JtYXRUb1N0cmluZyh2YWx1ZSkge1xuICAgICAgdmFyIHR5cGUgPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHRoaXMudHlwZSA6IHRoaXMudHlwZS5yZXBsYWNlKCdyYW5nZScsICcnKTtcbiAgICAgIHJldHVybiBmb3JtYXRBc0Zvcm1hdEFuZFR5cGUodmFsdWUsIHRoaXMuZm9ybWF0LCB0eXBlKTtcbiAgICB9LFxuICAgIGhhbmRsZU1vdXNlRW50ZXI6IGZ1bmN0aW9uIGhhbmRsZU1vdXNlRW50ZXIoKSB7XG4gICAgICBpZiAodGhpcy5yZWFkb25seSB8fCB0aGlzLnBpY2tlckRpc2FibGVkKSByZXR1cm47XG4gICAgICBpZiAoIXRoaXMudmFsdWVJc0VtcHR5ICYmIHRoaXMuY2xlYXJhYmxlKSB7XG4gICAgICAgIHRoaXMuc2hvd0Nsb3NlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGhhbmRsZUNoYW5nZTogZnVuY3Rpb24gaGFuZGxlQ2hhbmdlKCkge1xuICAgICAgaWYgKHRoaXMudXNlcklucHV0KSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IHRoaXMucGFyc2VTdHJpbmcodGhpcy5kaXNwbGF5VmFsdWUpO1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICB0aGlzLnBpY2tlci52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgIGlmICh0aGlzLmlzVmFsaWRWYWx1ZSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdElucHV0KHZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMudXNlcklucHV0ID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnVzZXJJbnB1dCA9PT0gJycpIHtcbiAgICAgICAgdGhpcy5lbWl0SW5wdXQobnVsbCk7XG4gICAgICAgIHRoaXMuZW1pdENoYW5nZShudWxsKTtcbiAgICAgICAgdGhpcy51c2VySW5wdXQgPSBudWxsO1xuICAgICAgfVxuICAgIH0sXG4gICAgaGFuZGxlU3RhcnRJbnB1dDogZnVuY3Rpb24gaGFuZGxlU3RhcnRJbnB1dChldmVudCkge1xuICAgICAgaWYgKHRoaXMudXNlcklucHV0KSB7XG4gICAgICAgIHRoaXMudXNlcklucHV0ID0gW2V2ZW50LnRhcmdldC52YWx1ZSwgdGhpcy51c2VySW5wdXRbMV1dO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy51c2VySW5wdXQgPSBbZXZlbnQudGFyZ2V0LnZhbHVlLCBudWxsXTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGhhbmRsZUVuZElucHV0OiBmdW5jdGlvbiBoYW5kbGVFbmRJbnB1dChldmVudCkge1xuICAgICAgaWYgKHRoaXMudXNlcklucHV0KSB7XG4gICAgICAgIHRoaXMudXNlcklucHV0ID0gW3RoaXMudXNlcklucHV0WzBdLCBldmVudC50YXJnZXQudmFsdWVdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy51c2VySW5wdXQgPSBbbnVsbCwgZXZlbnQudGFyZ2V0LnZhbHVlXTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGhhbmRsZVN0YXJ0Q2hhbmdlOiBmdW5jdGlvbiBoYW5kbGVTdGFydENoYW5nZShldmVudCkge1xuICAgICAgdmFyIHZhbHVlID0gdGhpcy5wYXJzZVN0cmluZyh0aGlzLnVzZXJJbnB1dCAmJiB0aGlzLnVzZXJJbnB1dFswXSk7XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgdGhpcy51c2VySW5wdXQgPSBbdGhpcy5mb3JtYXRUb1N0cmluZyh2YWx1ZSksIHRoaXMuZGlzcGxheVZhbHVlWzFdXTtcbiAgICAgICAgdmFyIG5ld1ZhbHVlID0gW3ZhbHVlLCB0aGlzLnBpY2tlci52YWx1ZSAmJiB0aGlzLnBpY2tlci52YWx1ZVsxXV07XG4gICAgICAgIHRoaXMucGlja2VyLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgICAgIGlmICh0aGlzLmlzVmFsaWRWYWx1ZShuZXdWYWx1ZSkpIHtcbiAgICAgICAgICB0aGlzLmVtaXRJbnB1dChuZXdWYWx1ZSk7XG4gICAgICAgICAgdGhpcy51c2VySW5wdXQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBoYW5kbGVFbmRDaGFuZ2U6IGZ1bmN0aW9uIGhhbmRsZUVuZENoYW5nZShldmVudCkge1xuICAgICAgdmFyIHZhbHVlID0gdGhpcy5wYXJzZVN0cmluZyh0aGlzLnVzZXJJbnB1dCAmJiB0aGlzLnVzZXJJbnB1dFsxXSk7XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgdGhpcy51c2VySW5wdXQgPSBbdGhpcy5kaXNwbGF5VmFsdWVbMF0sIHRoaXMuZm9ybWF0VG9TdHJpbmcodmFsdWUpXTtcbiAgICAgICAgdmFyIG5ld1ZhbHVlID0gW3RoaXMucGlja2VyLnZhbHVlICYmIHRoaXMucGlja2VyLnZhbHVlWzBdLCB2YWx1ZV07XG4gICAgICAgIHRoaXMucGlja2VyLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgICAgIGlmICh0aGlzLmlzVmFsaWRWYWx1ZShuZXdWYWx1ZSkpIHtcbiAgICAgICAgICB0aGlzLmVtaXRJbnB1dChuZXdWYWx1ZSk7XG4gICAgICAgICAgdGhpcy51c2VySW5wdXQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBoYW5kbGVDbGlja0ljb246IGZ1bmN0aW9uIGhhbmRsZUNsaWNrSWNvbihldmVudCkge1xuICAgICAgaWYgKHRoaXMucmVhZG9ubHkgfHwgdGhpcy5waWNrZXJEaXNhYmxlZCkgcmV0dXJuO1xuICAgICAgaWYgKHRoaXMuc2hvd0Nsb3NlKSB7XG4gICAgICAgIHRoaXMudmFsdWVPbk9wZW4gPSB0aGlzLnZhbHVlO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy5lbWl0SW5wdXQobnVsbCk7XG4gICAgICAgIHRoaXMuZW1pdENoYW5nZShudWxsKTtcbiAgICAgICAgdGhpcy5zaG93Q2xvc2UgPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMucGlja2VyICYmIHR5cGVvZiB0aGlzLnBpY2tlci5oYW5kbGVDbGVhciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHRoaXMucGlja2VyLmhhbmRsZUNsZWFyKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucGlja2VyVmlzaWJsZSA9ICF0aGlzLnBpY2tlclZpc2libGU7XG4gICAgICB9XG4gICAgfSxcbiAgICBoYW5kbGVDbG9zZTogZnVuY3Rpb24gaGFuZGxlQ2xvc2UoKSB7XG4gICAgICBpZiAoIXRoaXMucGlja2VyVmlzaWJsZSkgcmV0dXJuO1xuICAgICAgdGhpcy5waWNrZXJWaXNpYmxlID0gZmFsc2U7XG5cbiAgICAgIGlmICh0aGlzLnR5cGUgPT09ICdkYXRlcycgfHwgdGhpcy50eXBlID09PSAneWVhcnMnIHx8IHRoaXMudHlwZSA9PT0gJ21vbnRocycpIHtcbiAgICAgICAgLy8gcmVzdG9yZSB0byBmb3JtZXIgdmFsdWVcbiAgICAgICAgdmFyIG9sZFZhbHVlID0gcGFyc2VBc0Zvcm1hdEFuZFR5cGUodGhpcy52YWx1ZU9uT3BlbiwgdGhpcy52YWx1ZUZvcm1hdCwgdGhpcy50eXBlLCB0aGlzLnJhbmdlU2VwYXJhdG9yKSB8fCB0aGlzLnZhbHVlT25PcGVuO1xuICAgICAgICB0aGlzLmVtaXRJbnB1dChvbGRWYWx1ZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBoYW5kbGVGaWVsZFJlc2V0OiBmdW5jdGlvbiBoYW5kbGVGaWVsZFJlc2V0KGluaXRpYWxWYWx1ZSkge1xuICAgICAgdGhpcy51c2VySW5wdXQgPSBpbml0aWFsVmFsdWUgPT09ICcnID8gbnVsbCA6IGluaXRpYWxWYWx1ZTtcbiAgICB9LFxuICAgIGhhbmRsZUZvY3VzOiBmdW5jdGlvbiBoYW5kbGVGb2N1cygpIHtcbiAgICAgIHZhciB0eXBlID0gdGhpcy50eXBlO1xuXG4gICAgICBpZiAoSEFWRV9UUklHR0VSX1RZUEVTLmluZGV4T2YodHlwZSkgIT09IC0xICYmICF0aGlzLnBpY2tlclZpc2libGUpIHtcbiAgICAgICAgdGhpcy5waWNrZXJWaXNpYmxlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHRoaXMuJGVtaXQoJ2ZvY3VzJywgdGhpcyk7XG4gICAgfSxcbiAgICBoYW5kbGVLZXlkb3duOiBmdW5jdGlvbiBoYW5kbGVLZXlkb3duKGV2ZW50KSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICB2YXIga2V5Q29kZSA9IGV2ZW50LmtleUNvZGU7XG5cbiAgICAgIC8vIEVTQ1xuICAgICAgaWYgKGtleUNvZGUgPT09IDI3KSB7XG4gICAgICAgIHRoaXMucGlja2VyVmlzaWJsZSA9IGZhbHNlO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBUYWJcbiAgICAgIGlmIChrZXlDb2RlID09PSA5KSB7XG4gICAgICAgIGlmICghdGhpcy5yYW5nZWQpIHtcbiAgICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSgpO1xuICAgICAgICAgIHRoaXMucGlja2VyVmlzaWJsZSA9IHRoaXMucGlja2VyLnZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmJsdXIoKTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyB1c2VyIG1heSBjaGFuZ2UgZm9jdXMgYmV0d2VlbiB0d28gaW5wdXRcbiAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChfdGhpcy5yZWZJbnB1dC5pbmRleE9mKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpID09PSAtMSkge1xuICAgICAgICAgICAgICBfdGhpcy5waWNrZXJWaXNpYmxlID0gZmFsc2U7XG4gICAgICAgICAgICAgIF90aGlzLmJsdXIoKTtcbiAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBFbnRlclxuICAgICAgaWYgKGtleUNvZGUgPT09IDEzKSB7XG4gICAgICAgIGlmICh0aGlzLnVzZXJJbnB1dCA9PT0gJycgfHwgdGhpcy5pc1ZhbGlkVmFsdWUodGhpcy5wYXJzZVN0cmluZyh0aGlzLmRpc3BsYXlWYWx1ZSkpKSB7XG4gICAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UoKTtcbiAgICAgICAgICB0aGlzLnBpY2tlclZpc2libGUgPSB0aGlzLnBpY2tlci52aXNpYmxlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5ibHVyKCk7XG4gICAgICAgIH1cbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gaWYgdXNlciBpcyB0eXBpbmcsIGRvIG5vdCBsZXQgcGlja2VyIGhhbmRsZSBrZXkgaW5wdXRcbiAgICAgIGlmICh0aGlzLnVzZXJJbnB1dCkge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBkZWxlZ2F0ZSBvdGhlciBrZXlzIHRvIHBhbmVsXG4gICAgICBpZiAodGhpcy5waWNrZXIgJiYgdGhpcy5waWNrZXIuaGFuZGxlS2V5ZG93bikge1xuICAgICAgICB0aGlzLnBpY2tlci5oYW5kbGVLZXlkb3duKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGhhbmRsZVJhbmdlQ2xpY2s6IGZ1bmN0aW9uIGhhbmRsZVJhbmdlQ2xpY2soKSB7XG4gICAgICB2YXIgdHlwZSA9IHRoaXMudHlwZTtcblxuICAgICAgaWYgKEhBVkVfVFJJR0dFUl9UWVBFUy5pbmRleE9mKHR5cGUpICE9PSAtMSAmJiAhdGhpcy5waWNrZXJWaXNpYmxlKSB7XG4gICAgICAgIHRoaXMucGlja2VyVmlzaWJsZSA9IHRydWU7XG4gICAgICB9XG4gICAgICB0aGlzLiRlbWl0KCdmb2N1cycsIHRoaXMpO1xuICAgIH0sXG4gICAgaGlkZVBpY2tlcjogZnVuY3Rpb24gaGlkZVBpY2tlcigpIHtcbiAgICAgIGlmICh0aGlzLnBpY2tlcikge1xuICAgICAgICB0aGlzLnBpY2tlci5yZXNldFZpZXcgJiYgdGhpcy5waWNrZXIucmVzZXRWaWV3KCk7XG4gICAgICAgIHRoaXMucGlja2VyVmlzaWJsZSA9IHRoaXMucGlja2VyLnZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5kZXN0cm95UG9wcGVyKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBzaG93UGlja2VyOiBmdW5jdGlvbiBzaG93UGlja2VyKCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIGlmICh0aGlzLiRpc1NlcnZlcikgcmV0dXJuO1xuICAgICAgaWYgKCF0aGlzLnBpY2tlcikge1xuICAgICAgICB0aGlzLm1vdW50UGlja2VyKCk7XG4gICAgICB9XG4gICAgICB0aGlzLnBpY2tlclZpc2libGUgPSB0aGlzLnBpY2tlci52aXNpYmxlID0gdHJ1ZTtcblxuICAgICAgdGhpcy51cGRhdGVQb3BwZXIoKTtcblxuICAgICAgdGhpcy5waWNrZXIudmFsdWUgPSB0aGlzLnBhcnNlZFZhbHVlO1xuICAgICAgdGhpcy5waWNrZXIucmVzZXRWaWV3ICYmIHRoaXMucGlja2VyLnJlc2V0VmlldygpO1xuXG4gICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzMi5waWNrZXIuYWRqdXN0U3Bpbm5lcnMgJiYgX3RoaXMyLnBpY2tlci5hZGp1c3RTcGlubmVycygpO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBtb3VudFBpY2tlcjogZnVuY3Rpb24gbW91bnRQaWNrZXIoKSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgICAgdGhpcy5waWNrZXIgPSBuZXcgZXh0ZXJuYWxfdnVlX2RlZmF1bHQuYSh0aGlzLnBhbmVsKS4kbW91bnQoKTtcbiAgICAgIHRoaXMucGlja2VyLmRlZmF1bHRWYWx1ZSA9IHRoaXMuZGVmYXVsdFZhbHVlO1xuICAgICAgdGhpcy5waWNrZXIuZGVmYXVsdFRpbWUgPSB0aGlzLmRlZmF1bHRUaW1lO1xuICAgICAgdGhpcy5waWNrZXIucG9wcGVyQ2xhc3MgPSB0aGlzLnBvcHBlckNsYXNzO1xuICAgICAgdGhpcy5wb3BwZXJFbG0gPSB0aGlzLnBpY2tlci4kZWw7XG4gICAgICB0aGlzLnBpY2tlci53aWR0aCA9IHRoaXMucmVmZXJlbmNlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgICAgdGhpcy5waWNrZXIuc2hvd1RpbWUgPSB0aGlzLnR5cGUgPT09ICdkYXRldGltZScgfHwgdGhpcy50eXBlID09PSAnZGF0ZXRpbWVyYW5nZSc7XG4gICAgICB0aGlzLnBpY2tlci5zZWxlY3Rpb25Nb2RlID0gdGhpcy5zZWxlY3Rpb25Nb2RlO1xuICAgICAgdGhpcy5waWNrZXIudW5saW5rUGFuZWxzID0gdGhpcy51bmxpbmtQYW5lbHM7XG4gICAgICB0aGlzLnBpY2tlci5hcnJvd0NvbnRyb2wgPSB0aGlzLmFycm93Q29udHJvbCB8fCB0aGlzLnRpbWVBcnJvd0NvbnRyb2wgfHwgZmFsc2U7XG4gICAgICB0aGlzLiR3YXRjaCgnZm9ybWF0JywgZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICBfdGhpczMucGlja2VyLmZvcm1hdCA9IGZvcm1hdDtcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgdXBkYXRlT3B0aW9ucyA9IGZ1bmN0aW9uIHVwZGF0ZU9wdGlvbnMoKSB7XG4gICAgICAgIHZhciBvcHRpb25zID0gX3RoaXMzLnBpY2tlck9wdGlvbnM7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5zZWxlY3RhYmxlUmFuZ2UpIHtcbiAgICAgICAgICB2YXIgcmFuZ2VzID0gb3B0aW9ucy5zZWxlY3RhYmxlUmFuZ2U7XG4gICAgICAgICAgdmFyIHBhcnNlciA9IFRZUEVfVkFMVUVfUkVTT0xWRVJfTUFQLmRhdGV0aW1lcmFuZ2UucGFyc2VyO1xuICAgICAgICAgIHZhciBmb3JtYXQgPSBERUZBVUxUX0ZPUk1BVFMudGltZXJhbmdlO1xuXG4gICAgICAgICAgcmFuZ2VzID0gQXJyYXkuaXNBcnJheShyYW5nZXMpID8gcmFuZ2VzIDogW3Jhbmdlc107XG4gICAgICAgICAgX3RoaXMzLnBpY2tlci5zZWxlY3RhYmxlUmFuZ2UgPSByYW5nZXMubWFwKGZ1bmN0aW9uIChyYW5nZSkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlcihyYW5nZSwgZm9ybWF0LCBfdGhpczMucmFuZ2VTZXBhcmF0b3IpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yICh2YXIgb3B0aW9uIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICBpZiAob3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShvcHRpb24pICYmXG4gICAgICAgICAgLy8g5b+955WlIHRpbWUtcGlja2VyIOeahOivpemFjee9rumhuVxuICAgICAgICAgIG9wdGlvbiAhPT0gJ3NlbGVjdGFibGVSYW5nZScpIHtcbiAgICAgICAgICAgIF90aGlzMy5waWNrZXJbb3B0aW9uXSA9IG9wdGlvbnNbb3B0aW9uXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBtYWluIGZvcm1hdCBtdXN0IHByZXZhaWwgb3ZlciB1bmRvY3VtZW50ZWQgcGlja2VyT3B0aW9ucy5mb3JtYXRcbiAgICAgICAgaWYgKF90aGlzMy5mb3JtYXQpIHtcbiAgICAgICAgICBfdGhpczMucGlja2VyLmZvcm1hdCA9IF90aGlzMy5mb3JtYXQ7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICB1cGRhdGVPcHRpb25zKCk7XG4gICAgICB0aGlzLnVud2F0Y2hQaWNrZXJPcHRpb25zID0gdGhpcy4kd2F0Y2goJ3BpY2tlck9wdGlvbnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB1cGRhdGVPcHRpb25zKCk7XG4gICAgICB9LCB7IGRlZXA6IHRydWUgfSk7XG4gICAgICB0aGlzLiRlbC5hcHBlbmRDaGlsZCh0aGlzLnBpY2tlci4kZWwpO1xuICAgICAgdGhpcy5waWNrZXIucmVzZXRWaWV3ICYmIHRoaXMucGlja2VyLnJlc2V0VmlldygpO1xuXG4gICAgICB0aGlzLnBpY2tlci4kb24oJ2RvZGVzdHJveScsIHRoaXMuZG9EZXN0cm95KTtcbiAgICAgIHRoaXMucGlja2VyLiRvbigncGljaycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6ICcnO1xuICAgICAgICB2YXIgdmlzaWJsZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZmFsc2U7XG5cbiAgICAgICAgX3RoaXMzLnVzZXJJbnB1dCA9IG51bGw7XG4gICAgICAgIF90aGlzMy5waWNrZXJWaXNpYmxlID0gX3RoaXMzLnBpY2tlci52aXNpYmxlID0gdmlzaWJsZTtcbiAgICAgICAgX3RoaXMzLmVtaXRJbnB1dChkYXRlKTtcbiAgICAgICAgX3RoaXMzLnBpY2tlci5yZXNldFZpZXcgJiYgX3RoaXMzLnBpY2tlci5yZXNldFZpZXcoKTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnBpY2tlci4kb24oJ3NlbGVjdC1yYW5nZScsIGZ1bmN0aW9uIChzdGFydCwgZW5kLCBwb3MpIHtcbiAgICAgICAgaWYgKF90aGlzMy5yZWZJbnB1dC5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICAgICAgaWYgKCFwb3MgfHwgcG9zID09PSAnbWluJykge1xuICAgICAgICAgIF90aGlzMy5yZWZJbnB1dFswXS5zZXRTZWxlY3Rpb25SYW5nZShzdGFydCwgZW5kKTtcbiAgICAgICAgICBfdGhpczMucmVmSW5wdXRbMF0uZm9jdXMoKTtcbiAgICAgICAgfSBlbHNlIGlmIChwb3MgPT09ICdtYXgnKSB7XG4gICAgICAgICAgX3RoaXMzLnJlZklucHV0WzFdLnNldFNlbGVjdGlvblJhbmdlKHN0YXJ0LCBlbmQpO1xuICAgICAgICAgIF90aGlzMy5yZWZJbnB1dFsxXS5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuICAgIHVubW91bnRQaWNrZXI6IGZ1bmN0aW9uIHVubW91bnRQaWNrZXIoKSB7XG4gICAgICBpZiAodGhpcy5waWNrZXIpIHtcbiAgICAgICAgdGhpcy5waWNrZXIuJGRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5waWNrZXIuJG9mZigpO1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMudW53YXRjaFBpY2tlck9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB0aGlzLnVud2F0Y2hQaWNrZXJPcHRpb25zKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5waWNrZXIuJGVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5waWNrZXIuJGVsKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGVtaXRDaGFuZ2U6IGZ1bmN0aW9uIGVtaXRDaGFuZ2UodmFsKSB7XG4gICAgICAvLyBkZXRlcm1pbmUgdXNlciByZWFsIGNoYW5nZSBvbmx5XG4gICAgICBpZiAoIXZhbHVlRXF1YWxzKHZhbCwgdGhpcy52YWx1ZU9uT3BlbikpIHtcbiAgICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgdmFsKTtcbiAgICAgICAgdGhpcy52YWx1ZU9uT3BlbiA9IHZhbDtcbiAgICAgICAgaWYgKHRoaXMudmFsaWRhdGVFdmVudCkge1xuICAgICAgICAgIHRoaXMuZGlzcGF0Y2goJ0VsRm9ybUl0ZW0nLCAnZWwuZm9ybS5jaGFuZ2UnLCB2YWwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBlbWl0SW5wdXQ6IGZ1bmN0aW9uIGVtaXRJbnB1dCh2YWwpIHtcbiAgICAgIHZhciBmb3JtYXR0ZWQgPSB0aGlzLmZvcm1hdFRvVmFsdWUodmFsKTtcbiAgICAgIGlmICghdmFsdWVFcXVhbHModGhpcy52YWx1ZSwgZm9ybWF0dGVkKSkge1xuICAgICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIGZvcm1hdHRlZCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBpc1ZhbGlkVmFsdWU6IGZ1bmN0aW9uIGlzVmFsaWRWYWx1ZSh2YWx1ZSkge1xuICAgICAgaWYgKCF0aGlzLnBpY2tlcikge1xuICAgICAgICB0aGlzLm1vdW50UGlja2VyKCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5waWNrZXIuaXNWYWxpZFZhbHVlKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSAmJiB0aGlzLnBpY2tlci5pc1ZhbGlkVmFsdWUodmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZGF0ZS1waWNrZXIvc3JjL3BpY2tlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX3BpY2tlcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChwaWNrZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZGF0ZS1waWNrZXIvc3JjL3BpY2tlci52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBwaWNrZXJfY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBzcmNfcGlja2VydnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICBwaWNrZXJ2dWVfdHlwZV90ZW1wbGF0ZV9pZF83OWFlMDY5Zl9yZW5kZXIsXG4gIHBpY2tlcnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzc5YWUwNjlmX3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgcGlja2VyX2FwaTsgfVxucGlja2VyX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvZGF0ZS1waWNrZXIvc3JjL3BpY2tlci52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcGlja2VyID0gKHBpY2tlcl9jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9wYW5lbC9kYXRlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yNDQwZDRlYSZcbnZhciBkYXRldnVlX3R5cGVfdGVtcGxhdGVfaWRfMjQ0MGQ0ZWFfcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwidHJhbnNpdGlvblwiLFxuICAgIHtcbiAgICAgIGF0dHJzOiB7IG5hbWU6IFwiZWwtem9vbS1pbi10b3BcIiB9LFxuICAgICAgb246IHsgXCJhZnRlci1lbnRlclwiOiBfdm0uaGFuZGxlRW50ZXIsIFwiYWZ0ZXItbGVhdmVcIjogX3ZtLmhhbmRsZUxlYXZlIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIF9jKFxuICAgICAgICBcImRpdlwiLFxuICAgICAgICB7XG4gICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgICAgdmFsdWU6IF92bS52aXNpYmxlLFxuICAgICAgICAgICAgICBleHByZXNzaW9uOiBcInZpc2libGVcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIF0sXG4gICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtcGlja2VyLXBhbmVsIGVsLWRhdGUtcGlja2VyIGVsLXBvcHBlclwiLFxuICAgICAgICAgIGNsYXNzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFwiaGFzLXNpZGViYXJcIjogX3ZtLiRzbG90cy5zaWRlYmFyIHx8IF92bS5zaG9ydGN1dHMsXG4gICAgICAgICAgICAgIFwiaGFzLXRpbWVcIjogX3ZtLnNob3dUaW1lXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgX3ZtLnBvcHBlckNsYXNzXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBbXG4gICAgICAgICAgX2MoXG4gICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJlbC1waWNrZXItcGFuZWxfX2JvZHktd3JhcHBlclwiIH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF92bS5fdChcInNpZGViYXJcIiksXG4gICAgICAgICAgICAgIF92bS5zaG9ydGN1dHNcbiAgICAgICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiBcImVsLXBpY2tlci1wYW5lbF9fc2lkZWJhclwiIH0sXG4gICAgICAgICAgICAgICAgICAgIF92bS5fbChfdm0uc2hvcnRjdXRzLCBmdW5jdGlvbihzaG9ydGN1dCwga2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJidXR0b25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXBpY2tlci1wYW5lbF9fc2hvcnRjdXRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgdHlwZTogXCJidXR0b25cIiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5oYW5kbGVTaG9ydGN1dENsaWNrKHNob3J0Y3V0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtfdm0uX3YoX3ZtLl9zKHNob3J0Y3V0LnRleHQpKV1cbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJlbC1waWNrZXItcGFuZWxfX2JvZHlcIiB9LCBbXG4gICAgICAgICAgICAgICAgX3ZtLnNob3dUaW1lXG4gICAgICAgICAgICAgICAgICA/IF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiZWwtZGF0ZS1waWNrZXJfX3RpbWUtaGVhZGVyXCIgfSwgW1xuICAgICAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiBcImVsLWRhdGUtcGlja2VyX19lZGl0b3Itd3JhcFwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFwiZWwtaW5wdXRcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogX3ZtLnQoXCJlbC5kYXRlcGlja2VyLnNlbGVjdERhdGVcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLnZpc2libGVEYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZTogXCJzbWFsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQ6IGZ1bmN0aW9uKHZhbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKF92bS51c2VySW5wdXREYXRlID0gdmFsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZTogX3ZtLmhhbmRsZVZpc2libGVEYXRlQ2hhbmdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcImNsaWNrb3V0c2lkZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LWNsaWNrb3V0c2lkZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IF92bS5oYW5kbGVUaW1lUGlja0Nsb3NlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJoYW5kbGVUaW1lUGlja0Nsb3NlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWRhdGUtcGlja2VyX19lZGl0b3Itd3JhcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcImVsLWlucHV0XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWY6IFwiaW5wdXRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IF92bS50KFwiZWwuZGF0ZXBpY2tlci5zZWxlY3RUaW1lXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IF92bS52aXNpYmxlVGltZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU6IFwic21hbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLnRpbWVQaWNrZXJWaXNpYmxlID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0OiBmdW5jdGlvbih2YWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChfdm0udXNlcklucHV0VGltZSA9IHZhbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2U6IF92bS5oYW5kbGVWaXNpYmxlVGltZUNoYW5nZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFwidGltZS1waWNrZXJcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZjogXCJ0aW1lcGlja2VyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidGltZS1hcnJvdy1jb250cm9sXCI6IF92bS5hcnJvd0NvbnRyb2wsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmxlOiBfdm0udGltZVBpY2tlclZpc2libGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaWNrOiBfdm0uaGFuZGxlVGltZVBpY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3VudGVkOiBfdm0ucHJveHlUaW1lUGlja2VyRGF0YVByb3BlcnRpZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IF92bS5jdXJyZW50VmlldyAhPT0gXCJ0aW1lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcImN1cnJlbnRWaWV3ICE9PSAndGltZSdcIlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtZGF0ZS1waWNrZXJfX2hlYWRlclwiLFxuICAgICAgICAgICAgICAgICAgICBjbGFzczoge1xuICAgICAgICAgICAgICAgICAgICAgIFwiZWwtZGF0ZS1waWNrZXJfX2hlYWRlci0tYm9yZGVyZWRcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS5jdXJyZW50VmlldyA9PT0gXCJ5ZWFyXCIgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS5jdXJyZW50VmlldyA9PT0gXCJtb250aFwiXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIF9jKFwiYnV0dG9uXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczpcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZWwtcGlja2VyLXBhbmVsX19pY29uLWJ0biBlbC1kYXRlLXBpY2tlcl9fcHJldi1idG4gZWwtaWNvbi1kLWFycm93LWxlZnRcIixcbiAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJidXR0b25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBfdm0udChcImVsLmRhdGVwaWNrZXIucHJldlllYXJcIilcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0ucHJldlllYXIgfVxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgX2MoXCJidXR0b25cIiwge1xuICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0uY3VycmVudFZpZXcgPT09IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcImN1cnJlbnRWaWV3ID09PSAnZGF0ZSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6XG4gICAgICAgICAgICAgICAgICAgICAgICBcImVsLXBpY2tlci1wYW5lbF9faWNvbi1idG4gZWwtZGF0ZS1waWNrZXJfX3ByZXYtYnRuIGVsLWljb24tYXJyb3ctbGVmdFwiLFxuICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IF92bS50KFwiZWwuZGF0ZXBpY2tlci5wcmV2TW9udGhcIilcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0ucHJldk1vbnRoIH1cbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWRhdGUtcGlja2VyX19oZWFkZXItbGFiZWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHJvbGU6IFwiYnV0dG9uXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0uc2hvd1llYXJQaWNrZXIgfVxuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgW192bS5fdihfdm0uX3MoX3ZtLnllYXJMYWJlbCkpXVxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0uY3VycmVudFZpZXcgPT09IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwiY3VycmVudFZpZXcgPT09ICdkYXRlJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1kYXRlLXBpY2tlcl9faGVhZGVyLWxhYmVsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogeyBhY3RpdmU6IF92bS5jdXJyZW50VmlldyA9PT0gXCJtb250aFwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyByb2xlOiBcImJ1dHRvblwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBvbjogeyBjbGljazogX3ZtLnNob3dNb250aFBpY2tlciB9XG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fcyhfdm0udChcImVsLmRhdGVwaWNrZXIubW9udGhcIiArIChfdm0ubW9udGggKyAxKSkpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICBfYyhcImJ1dHRvblwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6XG4gICAgICAgICAgICAgICAgICAgICAgICBcImVsLXBpY2tlci1wYW5lbF9faWNvbi1idG4gZWwtZGF0ZS1waWNrZXJfX25leHQtYnRuIGVsLWljb24tZC1hcnJvdy1yaWdodFwiLFxuICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IF92bS50KFwiZWwuZGF0ZXBpY2tlci5uZXh0WWVhclwiKVxuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgb246IHsgY2xpY2s6IF92bS5uZXh0WWVhciB9XG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICBfYyhcImJ1dHRvblwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IF92bS5jdXJyZW50VmlldyA9PT0gXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwiY3VycmVudFZpZXcgPT09ICdkYXRlJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczpcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZWwtcGlja2VyLXBhbmVsX19pY29uLWJ0biBlbC1kYXRlLXBpY2tlcl9fbmV4dC1idG4gZWwtaWNvbi1hcnJvdy1yaWdodFwiLFxuICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IF92bS50KFwiZWwuZGF0ZXBpY2tlci5uZXh0TW9udGhcIilcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0ubmV4dE1vbnRoIH1cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwiZWwtcGlja2VyLXBhbmVsX19jb250ZW50XCIgfSxcbiAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgX2MoXCJkYXRlLXRhYmxlXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLmN1cnJlbnRWaWV3ID09PSBcImRhdGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJjdXJyZW50VmlldyA9PT0gJ2RhdGUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBcInNlbGVjdGlvbi1tb2RlXCI6IF92bS5zZWxlY3Rpb25Nb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJmaXJzdC1kYXktb2Ytd2Vla1wiOiBfdm0uZmlyc3REYXlPZldlZWssXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkZWZhdWx0LXZhbHVlXCI6IF92bS5kZWZhdWx0VmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBuZXcgRGF0ZShfdm0uZGVmYXVsdFZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRlOiBfdm0uZGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiY2VsbC1jbGFzcy1uYW1lXCI6IF92bS5jZWxsQ2xhc3NOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXNhYmxlZC1kYXRlXCI6IF92bS5kaXNhYmxlZERhdGVcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIG9uOiB7IHBpY2s6IF92bS5oYW5kbGVEYXRlUGljayB9XG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICBfYyhcInllYXItdGFibGVcIiwge1xuICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0uY3VycmVudFZpZXcgPT09IFwieWVhclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcImN1cnJlbnRWaWV3ID09PSAneWVhcidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwic2VsZWN0aW9uLW1vZGVcIjogX3ZtLnNlbGVjdGlvbk1vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkZWZhdWx0LXZhbHVlXCI6IF92bS5kZWZhdWx0VmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBuZXcgRGF0ZShfdm0uZGVmYXVsdFZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRlOiBfdm0uZGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGlzYWJsZWQtZGF0ZVwiOiBfdm0uZGlzYWJsZWREYXRlXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICBvbjogeyBwaWNrOiBfdm0uaGFuZGxlWWVhclBpY2sgfVxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgX2MoXCJtb250aC10YWJsZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IF92bS5jdXJyZW50VmlldyA9PT0gXCJtb250aFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcImN1cnJlbnRWaWV3ID09PSAnbW9udGgnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBcInNlbGVjdGlvbi1tb2RlXCI6IF92bS5zZWxlY3Rpb25Nb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IF92bS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGVmYXVsdC12YWx1ZVwiOiBfdm0uZGVmYXVsdFZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gbmV3IERhdGUoX3ZtLmRlZmF1bHRWYWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZTogX3ZtLmRhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRpc2FibGVkLWRhdGVcIjogX3ZtLmRpc2FibGVkRGF0ZVxuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgb246IHsgcGljazogX3ZtLmhhbmRsZU1vbnRoUGljayB9XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAyXG4gICAgICAgICAgKSxcbiAgICAgICAgICBfYyhcbiAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgICAgICB2YWx1ZTpcbiAgICAgICAgICAgICAgICAgICAgX3ZtLmZvb3RlclZpc2libGUgJiZcbiAgICAgICAgICAgICAgICAgICAgKF92bS5jdXJyZW50VmlldyA9PT0gXCJkYXRlXCIgfHxcbiAgICAgICAgICAgICAgICAgICAgICBfdm0uY3VycmVudFZpZXcgPT09IFwibW9udGhcIiB8fFxuICAgICAgICAgICAgICAgICAgICAgIF92bS5jdXJyZW50VmlldyA9PT0gXCJ5ZWFyXCIpLFxuICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjpcbiAgICAgICAgICAgICAgICAgICAgXCJmb290ZXJWaXNpYmxlICYmIChjdXJyZW50VmlldyA9PT0gJ2RhdGUnIHx8IGN1cnJlbnRWaWV3ID09PSAnbW9udGgnIHx8IGN1cnJlbnRWaWV3ID09PSAneWVhcicpXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXBpY2tlci1wYW5lbF9fZm9vdGVyXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgIFwiZWwtYnV0dG9uXCIsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTpcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS5zZWxlY3Rpb25Nb2RlICE9PSBcImRhdGVzXCIgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS5zZWxlY3Rpb25Nb2RlICE9PSBcIm1vbnRoc1wiICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBfdm0uc2VsZWN0aW9uTW9kZSAhPT0gXCJ5ZWFyc1wiLFxuICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246XG4gICAgICAgICAgICAgICAgICAgICAgICBcInNlbGVjdGlvbk1vZGUgIT09ICdkYXRlcycgJiYgc2VsZWN0aW9uTW9kZSAhPT0gJ21vbnRocycgJiYgc2VsZWN0aW9uTW9kZSAhPT0gJ3llYXJzJ1wiXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1waWNrZXItcGFuZWxfX2xpbmstYnRuXCIsXG4gICAgICAgICAgICAgICAgICBhdHRyczogeyBzaXplOiBcIm1pbmlcIiwgdHlwZTogXCJ0ZXh0XCIgfSxcbiAgICAgICAgICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0uY2hhbmdlVG9Ob3cgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgX3ZtLl92KFxuICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgIF92bS5fcyhfdm0udChcImVsLmRhdGVwaWNrZXIubm93XCIpKSArXG4gICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICBcIlxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgXCJlbC1idXR0b25cIixcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1waWNrZXItcGFuZWxfX2xpbmstYnRuXCIsXG4gICAgICAgICAgICAgICAgICBhdHRyczogeyBwbGFpbjogXCJcIiwgc2l6ZTogXCJtaW5pXCIgfSxcbiAgICAgICAgICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0uY29uZmlybSB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgX3ZtLl9zKF92bS50KFwiZWwuZGF0ZXBpY2tlci5jb25maXJtXCIpKSArXG4gICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICBcIlxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIDFcbiAgICAgICAgICApXG4gICAgICAgIF1cbiAgICAgIClcbiAgICBdXG4gIClcbn1cbnZhciBkYXRldnVlX3R5cGVfdGVtcGxhdGVfaWRfMjQ0MGQ0ZWFfc3RhdGljUmVuZGVyRm5zID0gW11cbmRhdGV2dWVfdHlwZV90ZW1wbGF0ZV9pZF8yNDQwZDRlYV9yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9wYW5lbC9kYXRlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yNDQwZDRlYSZcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9kYXRlLXBpY2tlci9zcmMvcGFuZWwvdGltZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9M2Q5MzkwODkmXG52YXIgdGltZXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzNkOTM5MDg5X3JlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcInRyYW5zaXRpb25cIixcbiAgICB7XG4gICAgICBhdHRyczogeyBuYW1lOiBcImVsLXpvb20taW4tdG9wXCIgfSxcbiAgICAgIG9uOiB7XG4gICAgICAgIFwiYWZ0ZXItbGVhdmVcIjogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgX3ZtLiRlbWl0KFwiZG9kZXN0cm95XCIpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIF9jKFxuICAgICAgICBcImRpdlwiLFxuICAgICAgICB7XG4gICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgICAgdmFsdWU6IF92bS52aXNpYmxlLFxuICAgICAgICAgICAgICBleHByZXNzaW9uOiBcInZpc2libGVcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIF0sXG4gICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtdGltZS1wYW5lbCBlbC1wb3BwZXJcIixcbiAgICAgICAgICBjbGFzczogX3ZtLnBvcHBlckNsYXNzXG4gICAgICAgIH0sXG4gICAgICAgIFtcbiAgICAgICAgICBfYyhcbiAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXRpbWUtcGFuZWxfX2NvbnRlbnRcIixcbiAgICAgICAgICAgICAgY2xhc3M6IHsgXCJoYXMtc2Vjb25kc1wiOiBfdm0uc2hvd1NlY29uZHMgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX2MoXCJ0aW1lLXNwaW5uZXJcIiwge1xuICAgICAgICAgICAgICAgIHJlZjogXCJzcGlubmVyXCIsXG4gICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgIFwiYXJyb3ctY29udHJvbFwiOiBfdm0udXNlQXJyb3csXG4gICAgICAgICAgICAgICAgICBcInNob3ctc2Vjb25kc1wiOiBfdm0uc2hvd1NlY29uZHMsXG4gICAgICAgICAgICAgICAgICBcImFtLXBtLW1vZGVcIjogX3ZtLmFtUG1Nb2RlLFxuICAgICAgICAgICAgICAgICAgZGF0ZTogX3ZtLmRhdGVcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICBjaGFuZ2U6IF92bS5oYW5kbGVDaGFuZ2UsXG4gICAgICAgICAgICAgICAgICBcInNlbGVjdC1yYW5nZVwiOiBfdm0uc2V0U2VsZWN0aW9uUmFuZ2VcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgMVxuICAgICAgICAgICksXG4gICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJlbC10aW1lLXBhbmVsX19mb290ZXJcIiB9LCBbXG4gICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgXCJidXR0b25cIixcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXRpbWUtcGFuZWxfX2J0biBjYW5jZWxcIixcbiAgICAgICAgICAgICAgICBhdHRyczogeyB0eXBlOiBcImJ1dHRvblwiIH0sXG4gICAgICAgICAgICAgICAgb246IHsgY2xpY2s6IF92bS5oYW5kbGVDYW5jZWwgfVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBbX3ZtLl92KF92bS5fcyhfdm0udChcImVsLmRhdGVwaWNrZXIuY2FuY2VsXCIpKSldXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgIFwiYnV0dG9uXCIsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC10aW1lLXBhbmVsX19idG5cIixcbiAgICAgICAgICAgICAgICBjbGFzczogeyBjb25maXJtOiAhX3ZtLmRpc2FibGVkIH0sXG4gICAgICAgICAgICAgICAgYXR0cnM6IHsgdHlwZTogXCJidXR0b25cIiB9LFxuICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIF92bS5oYW5kbGVDb25maXJtKClcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFtfdm0uX3YoX3ZtLl9zKF92bS50KFwiZWwuZGF0ZXBpY2tlci5jb25maXJtXCIpKSldXG4gICAgICAgICAgICApXG4gICAgICAgICAgXSlcbiAgICAgICAgXVxuICAgICAgKVxuICAgIF1cbiAgKVxufVxudmFyIHRpbWV2dWVfdHlwZV90ZW1wbGF0ZV9pZF8zZDkzOTA4OV9zdGF0aWNSZW5kZXJGbnMgPSBbXVxudGltZXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzNkOTM5MDg5X3JlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZGF0ZS1waWNrZXIvc3JjL3BhbmVsL3RpbWUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTNkOTM5MDg5JlxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9iYXNpYy90aW1lLXNwaW5uZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTFmYWNhZGViJlxudmFyIHRpbWVfc3Bpbm5lcnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzFmYWNhZGViX3JlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHtcbiAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXRpbWUtc3Bpbm5lclwiLFxuICAgICAgY2xhc3M6IHsgXCJoYXMtc2Vjb25kc1wiOiBfdm0uc2hvd1NlY29uZHMgfVxuICAgIH0sXG4gICAgW1xuICAgICAgIV92bS5hcnJvd0NvbnRyb2xcbiAgICAgICAgPyBbXG4gICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgXCJlbC1zY3JvbGxiYXJcIixcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJlZjogXCJob3Vyc1wiLFxuICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXRpbWUtc3Bpbm5lcl9fd3JhcHBlclwiLFxuICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICBcIndyYXAtc3R5bGVcIjogXCJtYXgtaGVpZ2h0OiBpbmhlcml0O1wiLFxuICAgICAgICAgICAgICAgICAgXCJ2aWV3LWNsYXNzXCI6IFwiZWwtdGltZS1zcGlubmVyX19saXN0XCIsXG4gICAgICAgICAgICAgICAgICBub3Jlc2l6ZTogXCJcIixcbiAgICAgICAgICAgICAgICAgIHRhZzogXCJ1bFwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBuYXRpdmVPbjoge1xuICAgICAgICAgICAgICAgICAgbW91c2VlbnRlcjogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIF92bS5lbWl0U2VsZWN0UmFuZ2UoXCJob3Vyc1wiKVxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIG1vdXNlbW92ZTogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIF92bS5hZGp1c3RDdXJyZW50U3Bpbm5lcihcImhvdXJzXCIpXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBfdm0uX2woX3ZtLmhvdXJzTGlzdCwgZnVuY3Rpb24oZGlzYWJsZWQsIGhvdXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX2MoXG4gICAgICAgICAgICAgICAgICBcImxpXCIsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGtleTogaG91cixcbiAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtdGltZS1zcGlubmVyX19pdGVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzOiB7IGFjdGl2ZTogaG91ciA9PT0gX3ZtLmhvdXJzLCBkaXNhYmxlZDogZGlzYWJsZWQgfSxcbiAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfdm0uaGFuZGxlQ2xpY2soXCJob3Vyc1wiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBob3VyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogZGlzYWJsZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICAgICAgX3ZtLl9zKFxuICAgICAgICAgICAgICAgICAgICAgICAgKFwiMFwiICsgKF92bS5hbVBtTW9kZSA/IGhvdXIgJSAxMiB8fCAxMiA6IGhvdXIpKS5zbGljZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLTJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICApICsgX3ZtLl9zKF92bS5hbVBtKGhvdXIpKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICBcImVsLXNjcm9sbGJhclwiLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmVmOiBcIm1pbnV0ZXNcIixcbiAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC10aW1lLXNwaW5uZXJfX3dyYXBwZXJcIixcbiAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgXCJ3cmFwLXN0eWxlXCI6IFwibWF4LWhlaWdodDogaW5oZXJpdDtcIixcbiAgICAgICAgICAgICAgICAgIFwidmlldy1jbGFzc1wiOiBcImVsLXRpbWUtc3Bpbm5lcl9fbGlzdFwiLFxuICAgICAgICAgICAgICAgICAgbm9yZXNpemU6IFwiXCIsXG4gICAgICAgICAgICAgICAgICB0YWc6IFwidWxcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbmF0aXZlT246IHtcbiAgICAgICAgICAgICAgICAgIG1vdXNlZW50ZXI6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICBfdm0uZW1pdFNlbGVjdFJhbmdlKFwibWludXRlc1wiKVxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIG1vdXNlbW92ZTogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIF92bS5hZGp1c3RDdXJyZW50U3Bpbm5lcihcIm1pbnV0ZXNcIilcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIF92bS5fbChfdm0ubWludXRlc0xpc3QsIGZ1bmN0aW9uKGVuYWJsZWQsIGtleSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfYyhcbiAgICAgICAgICAgICAgICAgIFwibGlcIixcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXRpbWUtc3Bpbm5lcl9faXRlbVwiLFxuICAgICAgICAgICAgICAgICAgICBjbGFzczogeyBhY3RpdmU6IGtleSA9PT0gX3ZtLm1pbnV0ZXMsIGRpc2FibGVkOiAhZW5hYmxlZCB9LFxuICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS5oYW5kbGVDbGljayhcIm1pbnV0ZXNcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZToga2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgW192bS5fdihfdm0uX3MoKFwiMFwiICsga2V5KS5zbGljZSgtMikpKV1cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAwXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgIFwiZWwtc2Nyb2xsYmFyXCIsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLnNob3dTZWNvbmRzLFxuICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcInNob3dTZWNvbmRzXCJcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHJlZjogXCJzZWNvbmRzXCIsXG4gICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtdGltZS1zcGlubmVyX193cmFwcGVyXCIsXG4gICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgIFwid3JhcC1zdHlsZVwiOiBcIm1heC1oZWlnaHQ6IGluaGVyaXQ7XCIsXG4gICAgICAgICAgICAgICAgICBcInZpZXctY2xhc3NcIjogXCJlbC10aW1lLXNwaW5uZXJfX2xpc3RcIixcbiAgICAgICAgICAgICAgICAgIG5vcmVzaXplOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgdGFnOiBcInVsXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG5hdGl2ZU9uOiB7XG4gICAgICAgICAgICAgICAgICBtb3VzZWVudGVyOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgX3ZtLmVtaXRTZWxlY3RSYW5nZShcInNlY29uZHNcIilcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBtb3VzZW1vdmU6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICBfdm0uYWRqdXN0Q3VycmVudFNwaW5uZXIoXCJzZWNvbmRzXCIpXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBfdm0uX2woNjAsIGZ1bmN0aW9uKHNlY29uZCwga2V5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9jKFxuICAgICAgICAgICAgICAgICAgXCJsaVwiLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtdGltZS1zcGlubmVyX19pdGVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzOiB7IGFjdGl2ZToga2V5ID09PSBfdm0uc2Vjb25kcyB9LFxuICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS5oYW5kbGVDbGljayhcInNlY29uZHNcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZToga2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgW192bS5fdihfdm0uX3MoKFwiMFwiICsga2V5KS5zbGljZSgtMikpKV1cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAwXG4gICAgICAgICAgICApXG4gICAgICAgICAgXVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgX3ZtLmFycm93Q29udHJvbFxuICAgICAgICA/IFtcbiAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtdGltZS1zcGlubmVyX193cmFwcGVyIGlzLWFycm93XCIsXG4gICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgIG1vdXNlZW50ZXI6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICBfdm0uZW1pdFNlbGVjdFJhbmdlKFwiaG91cnNcIilcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBfYyhcImlcIiwge1xuICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJyZXBlYXQtY2xpY2tcIixcbiAgICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtcmVwZWF0LWNsaWNrXCIsXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IF92bS5kZWNyZWFzZSxcbiAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcImRlY3JlYXNlXCJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXRpbWUtc3Bpbm5lcl9fYXJyb3cgZWwtaWNvbi1hcnJvdy11cFwiXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgX2MoXCJpXCIsIHtcbiAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwicmVwZWF0LWNsaWNrXCIsXG4gICAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXJlcGVhdC1jbGlja1wiLFxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0uaW5jcmVhc2UsXG4gICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJpbmNyZWFzZVwiXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC10aW1lLXNwaW5uZXJfX2Fycm93IGVsLWljb24tYXJyb3ctZG93blwiXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICBcInVsXCIsXG4gICAgICAgICAgICAgICAgICB7IHJlZjogXCJob3Vyc1wiLCBzdGF0aWNDbGFzczogXCJlbC10aW1lLXNwaW5uZXJfX2xpc3RcIiB9LFxuICAgICAgICAgICAgICAgICAgX3ZtLl9sKF92bS5hcnJvd0hvdXJMaXN0LCBmdW5jdGlvbihob3VyLCBrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jKFxuICAgICAgICAgICAgICAgICAgICAgIFwibGlcIixcbiAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXRpbWUtc3Bpbm5lcl9faXRlbVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlOiBob3VyID09PSBfdm0uaG91cnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBfdm0uaG91cnNMaXN0W2hvdXJdXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3VyID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gXCJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIwXCIgKyAoX3ZtLmFtUG1Nb2RlID8gaG91ciAlIDEyIHx8IDEyIDogaG91cilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKS5zbGljZSgtMikgKyBfdm0uYW1QbShob3VyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXRpbWUtc3Bpbm5lcl9fd3JhcHBlciBpcy1hcnJvd1wiLFxuICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICBtb3VzZWVudGVyOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgX3ZtLmVtaXRTZWxlY3RSYW5nZShcIm1pbnV0ZXNcIilcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBfYyhcImlcIiwge1xuICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJyZXBlYXQtY2xpY2tcIixcbiAgICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtcmVwZWF0LWNsaWNrXCIsXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IF92bS5kZWNyZWFzZSxcbiAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcImRlY3JlYXNlXCJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXRpbWUtc3Bpbm5lcl9fYXJyb3cgZWwtaWNvbi1hcnJvdy11cFwiXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgX2MoXCJpXCIsIHtcbiAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwicmVwZWF0LWNsaWNrXCIsXG4gICAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXJlcGVhdC1jbGlja1wiLFxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0uaW5jcmVhc2UsXG4gICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJpbmNyZWFzZVwiXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC10aW1lLXNwaW5uZXJfX2Fycm93IGVsLWljb24tYXJyb3ctZG93blwiXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICBcInVsXCIsXG4gICAgICAgICAgICAgICAgICB7IHJlZjogXCJtaW51dGVzXCIsIHN0YXRpY0NsYXNzOiBcImVsLXRpbWUtc3Bpbm5lcl9fbGlzdFwiIH0sXG4gICAgICAgICAgICAgICAgICBfdm0uX2woX3ZtLmFycm93TWludXRlTGlzdCwgZnVuY3Rpb24obWludXRlLCBrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jKFxuICAgICAgICAgICAgICAgICAgICAgIFwibGlcIixcbiAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXRpbWUtc3Bpbm5lcl9faXRlbVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IHsgYWN0aXZlOiBtaW51dGUgPT09IF92bS5taW51dGVzIH1cbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgICAgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbnV0ZSA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gXCJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IChcIjBcIiArIG1pbnV0ZSkuc2xpY2UoLTIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBfdm0uc2hvd1NlY29uZHNcbiAgICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXRpbWUtc3Bpbm5lcl9fd3JhcHBlciBpcy1hcnJvd1wiLFxuICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgIG1vdXNlZW50ZXI6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLmVtaXRTZWxlY3RSYW5nZShcInNlY29uZHNcIilcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIF9jKFwiaVwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcInJlcGVhdC1jbGlja1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtcmVwZWF0LWNsaWNrXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0uZGVjcmVhc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwiZGVjcmVhc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtdGltZS1zcGlubmVyX19hcnJvdyBlbC1pY29uLWFycm93LXVwXCJcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIF9jKFwiaVwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcInJlcGVhdC1jbGlja1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtcmVwZWF0LWNsaWNrXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0uaW5jcmVhc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwiaW5jcmVhc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtdGltZS1zcGlubmVyX19hcnJvdyBlbC1pY29uLWFycm93LWRvd25cIlxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgICAgXCJ1bFwiLFxuICAgICAgICAgICAgICAgICAgICAgIHsgcmVmOiBcInNlY29uZHNcIiwgc3RhdGljQ2xhc3M6IFwiZWwtdGltZS1zcGlubmVyX19saXN0XCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICBfdm0uX2woX3ZtLmFycm93U2Vjb25kTGlzdCwgZnVuY3Rpb24oc2Vjb25kLCBrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJsaVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtdGltZS1zcGlubmVyX19pdGVtXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IHsgYWN0aXZlOiBzZWNvbmQgPT09IF92bS5zZWNvbmRzIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICAgIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl9zKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFwiXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKFwiMFwiICsgc2Vjb25kKS5zbGljZSgtMilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICAgIF1cbiAgICAgICAgOiBfdm0uX2UoKVxuICAgIF0sXG4gICAgMlxuICApXG59XG52YXIgdGltZV9zcGlubmVydnVlX3R5cGVfdGVtcGxhdGVfaWRfMWZhY2FkZWJfc3RhdGljUmVuZGVyRm5zID0gW11cbnRpbWVfc3Bpbm5lcnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzFmYWNhZGViX3JlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZGF0ZS1waWNrZXIvc3JjL2Jhc2ljL3RpbWUtc3Bpbm5lci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MWZhY2FkZWImXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9iYXNpYy90aW1lLXNwaW5uZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5cblxuXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHRpbWVfc3Bpbm5lcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIGNvbXBvbmVudHM6IHsgRWxTY3JvbGxiYXI6IHNjcm9sbGJhcl9kZWZhdWx0LmEgfSxcblxuICBkaXJlY3RpdmVzOiB7XG4gICAgcmVwZWF0Q2xpY2s6IHJlcGVhdF9jbGlja1xuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgZGF0ZToge30sXG4gICAgZGVmYXVsdFZhbHVlOiB7fSwgLy8gcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2VcbiAgICBzaG93U2Vjb25kczoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9LFxuICAgIGFycm93Q29udHJvbDogQm9vbGVhbixcbiAgICBhbVBtTW9kZToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJycgLy8gJ2EnOiBhbS9wbTsgJ0EnOiBBTS9QTVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGhvdXJzOiBmdW5jdGlvbiBob3VycygpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGUuZ2V0SG91cnMoKTtcbiAgICB9LFxuICAgIG1pbnV0ZXM6IGZ1bmN0aW9uIG1pbnV0ZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRlLmdldE1pbnV0ZXMoKTtcbiAgICB9LFxuICAgIHNlY29uZHM6IGZ1bmN0aW9uIHNlY29uZHMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRlLmdldFNlY29uZHMoKTtcbiAgICB9LFxuICAgIGhvdXJzTGlzdDogZnVuY3Rpb24gaG91cnNMaXN0KCkge1xuICAgICAgcmV0dXJuIE9iamVjdChkYXRlX3V0aWxfW1wiZ2V0UmFuZ2VIb3Vyc1wiXSkodGhpcy5zZWxlY3RhYmxlUmFuZ2UpO1xuICAgIH0sXG4gICAgbWludXRlc0xpc3Q6IGZ1bmN0aW9uIG1pbnV0ZXNMaXN0KCkge1xuICAgICAgcmV0dXJuIE9iamVjdChkYXRlX3V0aWxfW1wiZ2V0UmFuZ2VNaW51dGVzXCJdKSh0aGlzLnNlbGVjdGFibGVSYW5nZSwgdGhpcy5ob3Vycyk7XG4gICAgfSxcbiAgICBhcnJvd0hvdXJMaXN0OiBmdW5jdGlvbiBhcnJvd0hvdXJMaXN0KCkge1xuICAgICAgdmFyIGhvdXJzID0gdGhpcy5ob3VycztcbiAgICAgIHJldHVybiBbaG91cnMgPiAwID8gaG91cnMgLSAxIDogdW5kZWZpbmVkLCBob3VycywgaG91cnMgPCAyMyA/IGhvdXJzICsgMSA6IHVuZGVmaW5lZF07XG4gICAgfSxcbiAgICBhcnJvd01pbnV0ZUxpc3Q6IGZ1bmN0aW9uIGFycm93TWludXRlTGlzdCgpIHtcbiAgICAgIHZhciBtaW51dGVzID0gdGhpcy5taW51dGVzO1xuICAgICAgcmV0dXJuIFttaW51dGVzID4gMCA/IG1pbnV0ZXMgLSAxIDogdW5kZWZpbmVkLCBtaW51dGVzLCBtaW51dGVzIDwgNTkgPyBtaW51dGVzICsgMSA6IHVuZGVmaW5lZF07XG4gICAgfSxcbiAgICBhcnJvd1NlY29uZExpc3Q6IGZ1bmN0aW9uIGFycm93U2Vjb25kTGlzdCgpIHtcbiAgICAgIHZhciBzZWNvbmRzID0gdGhpcy5zZWNvbmRzO1xuICAgICAgcmV0dXJuIFtzZWNvbmRzID4gMCA/IHNlY29uZHMgLSAxIDogdW5kZWZpbmVkLCBzZWNvbmRzLCBzZWNvbmRzIDwgNTkgPyBzZWNvbmRzICsgMSA6IHVuZGVmaW5lZF07XG4gICAgfVxuICB9LFxuXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNlbGVjdGFibGVSYW5nZTogW10sXG4gICAgICBjdXJyZW50U2Nyb2xsYmFyOiBudWxsXG4gICAgfTtcbiAgfSxcbiAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgIV90aGlzLmFycm93Q29udHJvbCAmJiBfdGhpcy5iaW5kU2Nyb2xsRXZlbnQoKTtcbiAgICB9KTtcbiAgfSxcblxuXG4gIG1ldGhvZHM6IHtcbiAgICBpbmNyZWFzZTogZnVuY3Rpb24gaW5jcmVhc2UoKSB7XG4gICAgICB0aGlzLnNjcm9sbERvd24oMSk7XG4gICAgfSxcbiAgICBkZWNyZWFzZTogZnVuY3Rpb24gZGVjcmVhc2UoKSB7XG4gICAgICB0aGlzLnNjcm9sbERvd24oLTEpO1xuICAgIH0sXG4gICAgbW9kaWZ5RGF0ZUZpZWxkOiBmdW5jdGlvbiBtb2RpZnlEYXRlRmllbGQodHlwZSwgdmFsdWUpIHtcbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlICdob3Vycyc6XG4gICAgICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgT2JqZWN0KGRhdGVfdXRpbF9bXCJtb2RpZnlUaW1lXCJdKSh0aGlzLmRhdGUsIHZhbHVlLCB0aGlzLm1pbnV0ZXMsIHRoaXMuc2Vjb25kcykpO2JyZWFrO1xuICAgICAgICBjYXNlICdtaW51dGVzJzpcbiAgICAgICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCBPYmplY3QoZGF0ZV91dGlsX1tcIm1vZGlmeVRpbWVcIl0pKHRoaXMuZGF0ZSwgdGhpcy5ob3VycywgdmFsdWUsIHRoaXMuc2Vjb25kcykpO2JyZWFrO1xuICAgICAgICBjYXNlICdzZWNvbmRzJzpcbiAgICAgICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCBPYmplY3QoZGF0ZV91dGlsX1tcIm1vZGlmeVRpbWVcIl0pKHRoaXMuZGF0ZSwgdGhpcy5ob3VycywgdGhpcy5taW51dGVzLCB2YWx1ZSkpO2JyZWFrO1xuICAgICAgfVxuICAgIH0sXG4gICAgaGFuZGxlQ2xpY2s6IGZ1bmN0aW9uIGhhbmRsZUNsaWNrKHR5cGUsIF9yZWYpIHtcbiAgICAgIHZhciB2YWx1ZSA9IF9yZWYudmFsdWUsXG4gICAgICAgICAgZGlzYWJsZWQgPSBfcmVmLmRpc2FibGVkO1xuXG4gICAgICBpZiAoIWRpc2FibGVkKSB7XG4gICAgICAgIHRoaXMubW9kaWZ5RGF0ZUZpZWxkKHR5cGUsIHZhbHVlKTtcbiAgICAgICAgdGhpcy5lbWl0U2VsZWN0UmFuZ2UodHlwZSk7XG4gICAgICAgIHRoaXMuYWRqdXN0U3Bpbm5lcih0eXBlLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBlbWl0U2VsZWN0UmFuZ2U6IGZ1bmN0aW9uIGVtaXRTZWxlY3RSYW5nZSh0eXBlKSB7XG4gICAgICBpZiAodHlwZSA9PT0gJ2hvdXJzJykge1xuICAgICAgICB0aGlzLiRlbWl0KCdzZWxlY3QtcmFuZ2UnLCAwLCAyKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ21pbnV0ZXMnKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3NlbGVjdC1yYW5nZScsIDMsIDUpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnc2Vjb25kcycpIHtcbiAgICAgICAgdGhpcy4kZW1pdCgnc2VsZWN0LXJhbmdlJywgNiwgOCk7XG4gICAgICB9XG4gICAgICB0aGlzLmN1cnJlbnRTY3JvbGxiYXIgPSB0eXBlO1xuICAgIH0sXG4gICAgYmluZFNjcm9sbEV2ZW50OiBmdW5jdGlvbiBiaW5kU2Nyb2xsRXZlbnQoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgdmFyIGJpbmRGdW5jdGlvbiA9IGZ1bmN0aW9uIGJpbmRGdW5jdGlvbih0eXBlKSB7XG4gICAgICAgIF90aGlzMi4kcmVmc1t0eXBlXS53cmFwLm9uc2Nyb2xsID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAvLyBUT0RPOiBzY3JvbGwgaXMgZW1pdHRlZCB3aGVuIHNldCBzY3JvbGxUb3AgcHJvZ3JhbWF0aWNhbGx5XG4gICAgICAgICAgLy8gc2hvdWxkIGZpbmQgYmV0dGVyIHNvbHV0aW9ucyBpbiB0aGUgZnV0dXJlIVxuICAgICAgICAgIF90aGlzMi5oYW5kbGVTY3JvbGwodHlwZSwgZSk7XG4gICAgICAgIH07XG4gICAgICB9O1xuICAgICAgYmluZEZ1bmN0aW9uKCdob3VycycpO1xuICAgICAgYmluZEZ1bmN0aW9uKCdtaW51dGVzJyk7XG4gICAgICBiaW5kRnVuY3Rpb24oJ3NlY29uZHMnKTtcbiAgICB9LFxuICAgIGhhbmRsZVNjcm9sbDogZnVuY3Rpb24gaGFuZGxlU2Nyb2xsKHR5cGUpIHtcbiAgICAgIHZhciB2YWx1ZSA9IE1hdGgubWluKE1hdGgucm91bmQoKHRoaXMuJHJlZnNbdHlwZV0ud3JhcC5zY3JvbGxUb3AgLSAodGhpcy5zY3JvbGxCYXJIZWlnaHQodHlwZSkgKiAwLjUgLSAxMCkgLyB0aGlzLnR5cGVJdGVtSGVpZ2h0KHR5cGUpICsgMykgLyB0aGlzLnR5cGVJdGVtSGVpZ2h0KHR5cGUpKSwgdHlwZSA9PT0gJ2hvdXJzJyA/IDIzIDogNTkpO1xuICAgICAgdGhpcy5tb2RpZnlEYXRlRmllbGQodHlwZSwgdmFsdWUpO1xuICAgIH0sXG5cblxuICAgIC8vIE5PVEU6IHVzZWQgYnkgZGF0ZXRpbWUgLyBkYXRlLXJhbmdlIHBhbmVsXG4gICAgLy8gICAgICAgcmVuYW1lZCBmcm9tIGFkanVzdFNjcm9sbFRvcFxuICAgIC8vICAgICAgIHNob3VsZCB0cnkgdG8gcmVmYWN0b3J5IGl0XG4gICAgYWRqdXN0U3Bpbm5lcnM6IGZ1bmN0aW9uIGFkanVzdFNwaW5uZXJzKCkge1xuICAgICAgdGhpcy5hZGp1c3RTcGlubmVyKCdob3VycycsIHRoaXMuaG91cnMpO1xuICAgICAgdGhpcy5hZGp1c3RTcGlubmVyKCdtaW51dGVzJywgdGhpcy5taW51dGVzKTtcbiAgICAgIHRoaXMuYWRqdXN0U3Bpbm5lcignc2Vjb25kcycsIHRoaXMuc2Vjb25kcyk7XG4gICAgfSxcbiAgICBhZGp1c3RDdXJyZW50U3Bpbm5lcjogZnVuY3Rpb24gYWRqdXN0Q3VycmVudFNwaW5uZXIodHlwZSkge1xuICAgICAgdGhpcy5hZGp1c3RTcGlubmVyKHR5cGUsIHRoaXNbdHlwZV0pO1xuICAgIH0sXG4gICAgYWRqdXN0U3Bpbm5lcjogZnVuY3Rpb24gYWRqdXN0U3Bpbm5lcih0eXBlLCB2YWx1ZSkge1xuICAgICAgaWYgKHRoaXMuYXJyb3dDb250cm9sKSByZXR1cm47XG4gICAgICB2YXIgZWwgPSB0aGlzLiRyZWZzW3R5cGVdLndyYXA7XG4gICAgICBpZiAoZWwpIHtcbiAgICAgICAgZWwuc2Nyb2xsVG9wID0gTWF0aC5tYXgoMCwgdmFsdWUgKiB0aGlzLnR5cGVJdGVtSGVpZ2h0KHR5cGUpKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHNjcm9sbERvd246IGZ1bmN0aW9uIHNjcm9sbERvd24oc3RlcCkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgIGlmICghdGhpcy5jdXJyZW50U2Nyb2xsYmFyKSB7XG4gICAgICAgIHRoaXMuZW1pdFNlbGVjdFJhbmdlKCdob3VycycpO1xuICAgICAgfVxuXG4gICAgICB2YXIgbGFiZWwgPSB0aGlzLmN1cnJlbnRTY3JvbGxiYXI7XG4gICAgICB2YXIgaG91cnNMaXN0ID0gdGhpcy5ob3Vyc0xpc3Q7XG4gICAgICB2YXIgbm93ID0gdGhpc1tsYWJlbF07XG5cbiAgICAgIGlmICh0aGlzLmN1cnJlbnRTY3JvbGxiYXIgPT09ICdob3VycycpIHtcbiAgICAgICAgdmFyIHRvdGFsID0gTWF0aC5hYnMoc3RlcCk7XG4gICAgICAgIHN0ZXAgPSBzdGVwID4gMCA/IDEgOiAtMTtcbiAgICAgICAgdmFyIGxlbmd0aCA9IGhvdXJzTGlzdC5sZW5ndGg7XG4gICAgICAgIHdoaWxlIChsZW5ndGgtLSAmJiB0b3RhbCkge1xuICAgICAgICAgIG5vdyA9IChub3cgKyBzdGVwICsgaG91cnNMaXN0Lmxlbmd0aCkgJSBob3Vyc0xpc3QubGVuZ3RoO1xuICAgICAgICAgIGlmIChob3Vyc0xpc3Rbbm93XSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRvdGFsLS07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhvdXJzTGlzdFtub3ddKSByZXR1cm47XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub3cgPSAobm93ICsgc3RlcCArIDYwKSAlIDYwO1xuICAgICAgfVxuXG4gICAgICB0aGlzLm1vZGlmeURhdGVGaWVsZChsYWJlbCwgbm93KTtcbiAgICAgIHRoaXMuYWRqdXN0U3Bpbm5lcihsYWJlbCwgbm93KTtcbiAgICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzMy5lbWl0U2VsZWN0UmFuZ2UoX3RoaXMzLmN1cnJlbnRTY3JvbGxiYXIpO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBhbVBtOiBmdW5jdGlvbiBhbVBtKGhvdXIpIHtcbiAgICAgIHZhciBzaG91bGRTaG93QW1QbSA9IHRoaXMuYW1QbU1vZGUudG9Mb3dlckNhc2UoKSA9PT0gJ2EnO1xuICAgICAgaWYgKCFzaG91bGRTaG93QW1QbSkgcmV0dXJuICcnO1xuICAgICAgdmFyIGlzQ2FwaXRhbCA9IHRoaXMuYW1QbU1vZGUgPT09ICdBJztcbiAgICAgIHZhciBjb250ZW50ID0gaG91ciA8IDEyID8gJyBhbScgOiAnIHBtJztcbiAgICAgIGlmIChpc0NhcGl0YWwpIGNvbnRlbnQgPSBjb250ZW50LnRvVXBwZXJDYXNlKCk7XG4gICAgICByZXR1cm4gY29udGVudDtcbiAgICB9LFxuICAgIHR5cGVJdGVtSGVpZ2h0OiBmdW5jdGlvbiB0eXBlSXRlbUhlaWdodCh0eXBlKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcmVmc1t0eXBlXS4kZWwucXVlcnlTZWxlY3RvcignbGknKS5vZmZzZXRIZWlnaHQ7XG4gICAgfSxcbiAgICBzY3JvbGxCYXJIZWlnaHQ6IGZ1bmN0aW9uIHNjcm9sbEJhckhlaWdodCh0eXBlKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcmVmc1t0eXBlXS4kZWwub2Zmc2V0SGVpZ2h0O1xuICAgIH1cbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9iYXNpYy90aW1lLXNwaW5uZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGJhc2ljX3RpbWVfc3Bpbm5lcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh0aW1lX3NwaW5uZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZGF0ZS1waWNrZXIvc3JjL2Jhc2ljL3RpbWUtc3Bpbm5lci52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciB0aW1lX3NwaW5uZXJfY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBiYXNpY190aW1lX3NwaW5uZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIHRpbWVfc3Bpbm5lcnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzFmYWNhZGViX3JlbmRlcixcbiAgdGltZV9zcGlubmVydnVlX3R5cGVfdGVtcGxhdGVfaWRfMWZhY2FkZWJfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciB0aW1lX3NwaW5uZXJfYXBpOyB9XG50aW1lX3NwaW5uZXJfY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy9kYXRlLXBpY2tlci9zcmMvYmFzaWMvdGltZS1zcGlubmVyLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciB0aW1lX3NwaW5uZXIgPSAodGltZV9zcGlubmVyX2NvbXBvbmVudC5leHBvcnRzKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9wYW5lbC90aW1lLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5cblxuXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHRpbWV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBtaXhpbnM6IFtsb2NhbGVfZGVmYXVsdC5hXSxcblxuICBjb21wb25lbnRzOiB7XG4gICAgVGltZVNwaW5uZXI6IHRpbWVfc3Bpbm5lclxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgdmlzaWJsZTogQm9vbGVhbixcbiAgICB0aW1lQXJyb3dDb250cm9sOiBCb29sZWFuXG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICB2aXNpYmxlOiBmdW5jdGlvbiB2aXNpYmxlKHZhbCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgaWYgKHZhbCkge1xuICAgICAgICB0aGlzLm9sZFZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBfdGhpcy4kcmVmcy5zcGlubmVyLmVtaXRTZWxlY3RSYW5nZSgnaG91cnMnKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm5lZWRJbml0QWRqdXN0ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHZhbHVlOiBmdW5jdGlvbiB2YWx1ZShuZXdWYWwpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB2YXIgZGF0ZSA9IHZvaWQgMDtcbiAgICAgIGlmIChuZXdWYWwgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgIGRhdGUgPSBPYmplY3QoZGF0ZV91dGlsX1tcImxpbWl0VGltZVJhbmdlXCJdKShuZXdWYWwsIHRoaXMuc2VsZWN0YWJsZVJhbmdlLCB0aGlzLmZvcm1hdCk7XG4gICAgICB9IGVsc2UgaWYgKCFuZXdWYWwpIHtcbiAgICAgICAgZGF0ZSA9IHRoaXMuZGVmYXVsdFZhbHVlID8gbmV3IERhdGUodGhpcy5kZWZhdWx0VmFsdWUpIDogbmV3IERhdGUoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5kYXRlID0gZGF0ZTtcbiAgICAgIGlmICh0aGlzLnZpc2libGUgJiYgdGhpcy5uZWVkSW5pdEFkanVzdCkge1xuICAgICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoXykge1xuICAgICAgICAgIHJldHVybiBfdGhpczIuYWRqdXN0U3Bpbm5lcnMoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubmVlZEluaXRBZGp1c3QgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHNlbGVjdGFibGVSYW5nZTogZnVuY3Rpb24gc2VsZWN0YWJsZVJhbmdlKHZhbCkge1xuICAgICAgdGhpcy4kcmVmcy5zcGlubmVyLnNlbGVjdGFibGVSYW5nZSA9IHZhbDtcbiAgICB9LFxuICAgIGRlZmF1bHRWYWx1ZTogZnVuY3Rpb24gZGVmYXVsdFZhbHVlKHZhbCkge1xuICAgICAgaWYgKCFPYmplY3QoZGF0ZV91dGlsX1tcImlzRGF0ZVwiXSkodGhpcy52YWx1ZSkpIHtcbiAgICAgICAgdGhpcy5kYXRlID0gdmFsID8gbmV3IERhdGUodmFsKSA6IG5ldyBEYXRlKCk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBvcHBlckNsYXNzOiAnJyxcbiAgICAgIGZvcm1hdDogJ0hIOm1tOnNzJyxcbiAgICAgIHZhbHVlOiAnJyxcbiAgICAgIGRlZmF1bHRWYWx1ZTogbnVsbCxcbiAgICAgIGRhdGU6IG5ldyBEYXRlKCksXG4gICAgICBvbGRWYWx1ZTogbmV3IERhdGUoKSxcbiAgICAgIHNlbGVjdGFibGVSYW5nZTogW10sXG4gICAgICBzZWxlY3Rpb25SYW5nZTogWzAsIDJdLFxuICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgICAgYXJyb3dDb250cm9sOiBmYWxzZSxcbiAgICAgIG5lZWRJbml0QWRqdXN0OiB0cnVlXG4gICAgfTtcbiAgfSxcblxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc2hvd1NlY29uZHM6IGZ1bmN0aW9uIHNob3dTZWNvbmRzKCkge1xuICAgICAgcmV0dXJuICh0aGlzLmZvcm1hdCB8fCAnJykuaW5kZXhPZignc3MnKSAhPT0gLTE7XG4gICAgfSxcbiAgICB1c2VBcnJvdzogZnVuY3Rpb24gdXNlQXJyb3coKSB7XG4gICAgICByZXR1cm4gdGhpcy5hcnJvd0NvbnRyb2wgfHwgdGhpcy50aW1lQXJyb3dDb250cm9sIHx8IGZhbHNlO1xuICAgIH0sXG4gICAgYW1QbU1vZGU6IGZ1bmN0aW9uIGFtUG1Nb2RlKCkge1xuICAgICAgaWYgKCh0aGlzLmZvcm1hdCB8fCAnJykuaW5kZXhPZignQScpICE9PSAtMSkgcmV0dXJuICdBJztcbiAgICAgIGlmICgodGhpcy5mb3JtYXQgfHwgJycpLmluZGV4T2YoJ2EnKSAhPT0gLTEpIHJldHVybiAnYSc7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBoYW5kbGVDYW5jZWw6IGZ1bmN0aW9uIGhhbmRsZUNhbmNlbCgpIHtcbiAgICAgIHRoaXMuJGVtaXQoJ3BpY2snLCB0aGlzLm9sZFZhbHVlLCBmYWxzZSk7XG4gICAgfSxcbiAgICBoYW5kbGVDaGFuZ2U6IGZ1bmN0aW9uIGhhbmRsZUNoYW5nZShkYXRlKSB7XG4gICAgICAvLyB0aGlzLnZpc2libGUgYXZvaWRzIGVkZ2UgY2FzZXMsIHdoZW4gdXNlIHNjcm9sbHMgZHVyaW5nIHBhbmVsIGNsb3NpbmcgYW5pbWF0aW9uXG4gICAgICBpZiAodGhpcy52aXNpYmxlKSB7XG4gICAgICAgIHRoaXMuZGF0ZSA9IE9iamVjdChkYXRlX3V0aWxfW1wiY2xlYXJNaWxsaXNlY29uZHNcIl0pKGRhdGUpO1xuICAgICAgICAvLyBpZiBkYXRlIGlzIG91dCBvZiByYW5nZSwgZG8gbm90IGVtaXRcbiAgICAgICAgaWYgKHRoaXMuaXNWYWxpZFZhbHVlKHRoaXMuZGF0ZSkpIHtcbiAgICAgICAgICB0aGlzLiRlbWl0KCdwaWNrJywgdGhpcy5kYXRlLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgc2V0U2VsZWN0aW9uUmFuZ2U6IGZ1bmN0aW9uIHNldFNlbGVjdGlvblJhbmdlKHN0YXJ0LCBlbmQpIHtcbiAgICAgIHRoaXMuJGVtaXQoJ3NlbGVjdC1yYW5nZScsIHN0YXJ0LCBlbmQpO1xuICAgICAgdGhpcy5zZWxlY3Rpb25SYW5nZSA9IFtzdGFydCwgZW5kXTtcbiAgICB9LFxuICAgIGhhbmRsZUNvbmZpcm06IGZ1bmN0aW9uIGhhbmRsZUNvbmZpcm0oKSB7XG4gICAgICB2YXIgdmlzaWJsZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogZmFsc2U7XG4gICAgICB2YXIgZmlyc3QgPSBhcmd1bWVudHNbMV07XG5cbiAgICAgIGlmIChmaXJzdCkgcmV0dXJuO1xuICAgICAgdmFyIGRhdGUgPSBPYmplY3QoZGF0ZV91dGlsX1tcImNsZWFyTWlsbGlzZWNvbmRzXCJdKShPYmplY3QoZGF0ZV91dGlsX1tcImxpbWl0VGltZVJhbmdlXCJdKSh0aGlzLmRhdGUsIHRoaXMuc2VsZWN0YWJsZVJhbmdlLCB0aGlzLmZvcm1hdCkpO1xuICAgICAgdGhpcy4kZW1pdCgncGljaycsIGRhdGUsIHZpc2libGUsIGZpcnN0KTtcbiAgICB9LFxuICAgIGhhbmRsZUtleWRvd246IGZ1bmN0aW9uIGhhbmRsZUtleWRvd24oZXZlbnQpIHtcbiAgICAgIHZhciBrZXlDb2RlID0gZXZlbnQua2V5Q29kZTtcbiAgICAgIHZhciBtYXBwaW5nID0geyAzODogLTEsIDQwOiAxLCAzNzogLTEsIDM5OiAxIH07XG5cbiAgICAgIC8vIExlZnQgb3IgUmlnaHRcbiAgICAgIGlmIChrZXlDb2RlID09PSAzNyB8fCBrZXlDb2RlID09PSAzOSkge1xuICAgICAgICB2YXIgc3RlcCA9IG1hcHBpbmdba2V5Q29kZV07XG4gICAgICAgIHRoaXMuY2hhbmdlU2VsZWN0aW9uUmFuZ2Uoc3RlcCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gVXAgb3IgRG93blxuICAgICAgaWYgKGtleUNvZGUgPT09IDM4IHx8IGtleUNvZGUgPT09IDQwKSB7XG4gICAgICAgIHZhciBfc3RlcCA9IG1hcHBpbmdba2V5Q29kZV07XG4gICAgICAgIHRoaXMuJHJlZnMuc3Bpbm5lci5zY3JvbGxEb3duKF9zdGVwKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0sXG4gICAgaXNWYWxpZFZhbHVlOiBmdW5jdGlvbiBpc1ZhbGlkVmFsdWUoZGF0ZSkge1xuICAgICAgcmV0dXJuIE9iamVjdChkYXRlX3V0aWxfW1widGltZVdpdGhpblJhbmdlXCJdKShkYXRlLCB0aGlzLnNlbGVjdGFibGVSYW5nZSwgdGhpcy5mb3JtYXQpO1xuICAgIH0sXG4gICAgYWRqdXN0U3Bpbm5lcnM6IGZ1bmN0aW9uIGFkanVzdFNwaW5uZXJzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHJlZnMuc3Bpbm5lci5hZGp1c3RTcGlubmVycygpO1xuICAgIH0sXG4gICAgY2hhbmdlU2VsZWN0aW9uUmFuZ2U6IGZ1bmN0aW9uIGNoYW5nZVNlbGVjdGlvblJhbmdlKHN0ZXApIHtcbiAgICAgIHZhciBsaXN0ID0gWzAsIDNdLmNvbmNhdCh0aGlzLnNob3dTZWNvbmRzID8gWzZdIDogW10pO1xuICAgICAgdmFyIG1hcHBpbmcgPSBbJ2hvdXJzJywgJ21pbnV0ZXMnXS5jb25jYXQodGhpcy5zaG93U2Vjb25kcyA/IFsnc2Vjb25kcyddIDogW10pO1xuICAgICAgdmFyIGluZGV4ID0gbGlzdC5pbmRleE9mKHRoaXMuc2VsZWN0aW9uUmFuZ2VbMF0pO1xuICAgICAgdmFyIG5leHQgPSAoaW5kZXggKyBzdGVwICsgbGlzdC5sZW5ndGgpICUgbGlzdC5sZW5ndGg7XG4gICAgICB0aGlzLiRyZWZzLnNwaW5uZXIuZW1pdFNlbGVjdFJhbmdlKG1hcHBpbmdbbmV4dF0pO1xuICAgIH1cbiAgfSxcblxuICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge1xuICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF90aGlzMy5oYW5kbGVDb25maXJtKHRydWUsIHRydWUpO1xuICAgIH0pO1xuICAgIHRoaXMuJGVtaXQoJ21vdW50ZWQnKTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9wYW5lbC90aW1lLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYW5lbF90aW1ldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHRpbWV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZGF0ZS1waWNrZXIvc3JjL3BhbmVsL3RpbWUudnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgdGltZV9jb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIHBhbmVsX3RpbWV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIHRpbWV2dWVfdHlwZV90ZW1wbGF0ZV9pZF8zZDkzOTA4OV9yZW5kZXIsXG4gIHRpbWV2dWVfdHlwZV90ZW1wbGF0ZV9pZF8zZDkzOTA4OV9zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIHRpbWVfYXBpOyB9XG50aW1lX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvZGF0ZS1waWNrZXIvc3JjL3BhbmVsL3RpbWUudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhbmVsX3RpbWUgPSAodGltZV9jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9iYXNpYy95ZWFyLXRhYmxlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1jODZhYjVlMCZcbnZhciB5ZWFyX3RhYmxldnVlX3R5cGVfdGVtcGxhdGVfaWRfYzg2YWI1ZTBfcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwidGFibGVcIixcbiAgICB7IHN0YXRpY0NsYXNzOiBcImVsLXllYXItdGFibGVcIiwgb246IHsgY2xpY2s6IF92bS5oYW5kbGVZZWFyVGFibGVDbGljayB9IH0sXG4gICAgW1xuICAgICAgX2MoXCJ0Ym9keVwiLCBbXG4gICAgICAgIF9jKFwidHJcIiwgW1xuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJ0ZFwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJhdmFpbGFibGVcIixcbiAgICAgICAgICAgICAgY2xhc3M6IF92bS5nZXRDZWxsU3R5bGUoX3ZtLnN0YXJ0WWVhciArIDApXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW19jKFwiYVwiLCB7IHN0YXRpY0NsYXNzOiBcImNlbGxcIiB9LCBbX3ZtLl92KF92bS5fcyhfdm0uc3RhcnRZZWFyKSldKV1cbiAgICAgICAgICApLFxuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJ0ZFwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJhdmFpbGFibGVcIixcbiAgICAgICAgICAgICAgY2xhc3M6IF92bS5nZXRDZWxsU3R5bGUoX3ZtLnN0YXJ0WWVhciArIDEpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfYyhcImFcIiwgeyBzdGF0aWNDbGFzczogXCJjZWxsXCIgfSwgW1xuICAgICAgICAgICAgICAgIF92bS5fdihfdm0uX3MoX3ZtLnN0YXJ0WWVhciArIDEpKVxuICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgXVxuICAgICAgICAgICksXG4gICAgICAgICAgX2MoXG4gICAgICAgICAgICBcInRkXCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImF2YWlsYWJsZVwiLFxuICAgICAgICAgICAgICBjbGFzczogX3ZtLmdldENlbGxTdHlsZShfdm0uc3RhcnRZZWFyICsgMilcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF9jKFwiYVwiLCB7IHN0YXRpY0NsYXNzOiBcImNlbGxcIiB9LCBbXG4gICAgICAgICAgICAgICAgX3ZtLl92KF92bS5fcyhfdm0uc3RhcnRZZWFyICsgMikpXG4gICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgKSxcbiAgICAgICAgICBfYyhcbiAgICAgICAgICAgIFwidGRcIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiYXZhaWxhYmxlXCIsXG4gICAgICAgICAgICAgIGNsYXNzOiBfdm0uZ2V0Q2VsbFN0eWxlKF92bS5zdGFydFllYXIgKyAzKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX2MoXCJhXCIsIHsgc3RhdGljQ2xhc3M6IFwiY2VsbFwiIH0sIFtcbiAgICAgICAgICAgICAgICBfdm0uX3YoX3ZtLl9zKF92bS5zdGFydFllYXIgKyAzKSlcbiAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICApXG4gICAgICAgIF0pLFxuICAgICAgICBfYyhcInRyXCIsIFtcbiAgICAgICAgICBfYyhcbiAgICAgICAgICAgIFwidGRcIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiYXZhaWxhYmxlXCIsXG4gICAgICAgICAgICAgIGNsYXNzOiBfdm0uZ2V0Q2VsbFN0eWxlKF92bS5zdGFydFllYXIgKyA0KVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX2MoXCJhXCIsIHsgc3RhdGljQ2xhc3M6IFwiY2VsbFwiIH0sIFtcbiAgICAgICAgICAgICAgICBfdm0uX3YoX3ZtLl9zKF92bS5zdGFydFllYXIgKyA0KSlcbiAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICApLFxuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJ0ZFwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJhdmFpbGFibGVcIixcbiAgICAgICAgICAgICAgY2xhc3M6IF92bS5nZXRDZWxsU3R5bGUoX3ZtLnN0YXJ0WWVhciArIDUpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfYyhcImFcIiwgeyBzdGF0aWNDbGFzczogXCJjZWxsXCIgfSwgW1xuICAgICAgICAgICAgICAgIF92bS5fdihfdm0uX3MoX3ZtLnN0YXJ0WWVhciArIDUpKVxuICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgXVxuICAgICAgICAgICksXG4gICAgICAgICAgX2MoXG4gICAgICAgICAgICBcInRkXCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImF2YWlsYWJsZVwiLFxuICAgICAgICAgICAgICBjbGFzczogX3ZtLmdldENlbGxTdHlsZShfdm0uc3RhcnRZZWFyICsgNilcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF9jKFwiYVwiLCB7IHN0YXRpY0NsYXNzOiBcImNlbGxcIiB9LCBbXG4gICAgICAgICAgICAgICAgX3ZtLl92KF92bS5fcyhfdm0uc3RhcnRZZWFyICsgNikpXG4gICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgKSxcbiAgICAgICAgICBfYyhcbiAgICAgICAgICAgIFwidGRcIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiYXZhaWxhYmxlXCIsXG4gICAgICAgICAgICAgIGNsYXNzOiBfdm0uZ2V0Q2VsbFN0eWxlKF92bS5zdGFydFllYXIgKyA3KVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX2MoXCJhXCIsIHsgc3RhdGljQ2xhc3M6IFwiY2VsbFwiIH0sIFtcbiAgICAgICAgICAgICAgICBfdm0uX3YoX3ZtLl9zKF92bS5zdGFydFllYXIgKyA3KSlcbiAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICApXG4gICAgICAgIF0pLFxuICAgICAgICBfYyhcInRyXCIsIFtcbiAgICAgICAgICBfYyhcbiAgICAgICAgICAgIFwidGRcIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiYXZhaWxhYmxlXCIsXG4gICAgICAgICAgICAgIGNsYXNzOiBfdm0uZ2V0Q2VsbFN0eWxlKF92bS5zdGFydFllYXIgKyA4KVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX2MoXCJhXCIsIHsgc3RhdGljQ2xhc3M6IFwiY2VsbFwiIH0sIFtcbiAgICAgICAgICAgICAgICBfdm0uX3YoX3ZtLl9zKF92bS5zdGFydFllYXIgKyA4KSlcbiAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICApLFxuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJ0ZFwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJhdmFpbGFibGVcIixcbiAgICAgICAgICAgICAgY2xhc3M6IF92bS5nZXRDZWxsU3R5bGUoX3ZtLnN0YXJ0WWVhciArIDkpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfYyhcImFcIiwgeyBzdGF0aWNDbGFzczogXCJjZWxsXCIgfSwgW1xuICAgICAgICAgICAgICAgIF92bS5fdihfdm0uX3MoX3ZtLnN0YXJ0WWVhciArIDkpKVxuICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgXVxuICAgICAgICAgICksXG4gICAgICAgICAgX2MoXCJ0ZFwiKSxcbiAgICAgICAgICBfYyhcInRkXCIpXG4gICAgICAgIF0pXG4gICAgICBdKVxuICAgIF1cbiAgKVxufVxudmFyIHllYXJfdGFibGV2dWVfdHlwZV90ZW1wbGF0ZV9pZF9jODZhYjVlMF9zdGF0aWNSZW5kZXJGbnMgPSBbXVxueWVhcl90YWJsZXZ1ZV90eXBlX3RlbXBsYXRlX2lkX2M4NmFiNWUwX3JlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZGF0ZS1waWNrZXIvc3JjL2Jhc2ljL3llYXItdGFibGUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWM4NmFiNWUwJlxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9kYXRlLXBpY2tlci9zcmMvYmFzaWMveWVhci10YWJsZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cblxuXG5cblxudmFyIHllYXJfdGFibGV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19kYXRlc0luWWVhciA9IGZ1bmN0aW9uIGRhdGVzSW5ZZWFyKHllYXIpIHtcbiAgdmFyIG51bU9mRGF5cyA9IE9iamVjdChkYXRlX3V0aWxfW1wiZ2V0RGF5Q291bnRPZlllYXJcIl0pKHllYXIpO1xuICB2YXIgZmlyc3REYXkgPSBuZXcgRGF0ZSh5ZWFyLCAwLCAxKTtcbiAgcmV0dXJuIE9iamVjdChkYXRlX3V0aWxfW1wicmFuZ2VcIl0pKG51bU9mRGF5cykubWFwKGZ1bmN0aW9uIChuKSB7XG4gICAgcmV0dXJuIE9iamVjdChkYXRlX3V0aWxfW1wibmV4dERhdGVcIl0pKGZpcnN0RGF5LCBuKTtcbiAgfSk7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciB5ZWFyX3RhYmxldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgcHJvcHM6IHtcbiAgICBkaXNhYmxlZERhdGU6IHt9LFxuICAgIHZhbHVlOiB7fSxcbiAgICBkZWZhdWx0VmFsdWU6IHtcbiAgICAgIHZhbGlkYXRvcjogZnVuY3Rpb24gdmFsaWRhdG9yKHZhbCkge1xuICAgICAgICAvLyBudWxsIG9yIHZhbGlkIERhdGUgT2JqZWN0XG4gICAgICAgIHJldHVybiB2YWwgPT09IG51bGwgfHwgdmFsIGluc3RhbmNlb2YgRGF0ZSAmJiBPYmplY3QoZGF0ZV91dGlsX1tcImlzRGF0ZVwiXSkodmFsKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGRhdGU6IHt9LFxuICAgIHNlbGVjdGlvbk1vZGU6IHt9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzdGFydFllYXI6IGZ1bmN0aW9uIHN0YXJ0WWVhcigpIHtcbiAgICAgIHJldHVybiBNYXRoLmZsb29yKHRoaXMuZGF0ZS5nZXRGdWxsWWVhcigpIC8gMTApICogMTA7XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRDZWxsU3R5bGU6IGZ1bmN0aW9uIGdldENlbGxTdHlsZSh5ZWFyKSB7XG4gICAgICB2YXIgc3R5bGUgPSB7fTtcbiAgICAgIHZhciB0b2RheSA9IG5ldyBEYXRlKCk7XG5cbiAgICAgIHN0eWxlLmRpc2FibGVkID0gdHlwZW9mIHRoaXMuZGlzYWJsZWREYXRlID09PSAnZnVuY3Rpb24nID8geWVhcl90YWJsZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX2RhdGVzSW5ZZWFyKHllYXIpLmV2ZXJ5KHRoaXMuZGlzYWJsZWREYXRlKSA6IGZhbHNlO1xuICAgICAgc3R5bGUuY3VycmVudCA9IE9iamVjdCh1dGlsX1tcImFycmF5RmluZEluZGV4XCJdKShPYmplY3QodXRpbF9bXCJjb2VyY2VUcnV0aHlWYWx1ZVRvQXJyYXlcIl0pKHRoaXMudmFsdWUpLCBmdW5jdGlvbiAoZGF0ZSkge1xuICAgICAgICByZXR1cm4gZGF0ZS5nZXRGdWxsWWVhcigpID09PSB5ZWFyO1xuICAgICAgfSkgPj0gMDtcbiAgICAgIHN0eWxlLnRvZGF5ID0gdG9kYXkuZ2V0RnVsbFllYXIoKSA9PT0geWVhcjtcbiAgICAgIHN0eWxlLmRlZmF1bHQgPSB0aGlzLmRlZmF1bHRWYWx1ZSAmJiB0aGlzLmRlZmF1bHRWYWx1ZS5nZXRGdWxsWWVhcigpID09PSB5ZWFyO1xuXG4gICAgICByZXR1cm4gc3R5bGU7XG4gICAgfSxcbiAgICBoYW5kbGVZZWFyVGFibGVDbGljazogZnVuY3Rpb24gaGFuZGxlWWVhclRhYmxlQ2xpY2soZXZlbnQpIHtcbiAgICAgIHZhciB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG4gICAgICBpZiAodGFyZ2V0LnRhZ05hbWUgPT09ICdBJykge1xuICAgICAgICBpZiAoT2JqZWN0KGRvbV9bXCJoYXNDbGFzc1wiXSkodGFyZ2V0LnBhcmVudE5vZGUsICdkaXNhYmxlZCcpKSByZXR1cm47XG4gICAgICAgIHZhciB5ZWFyID0gdGFyZ2V0LnRleHRDb250ZW50IHx8IHRhcmdldC5pbm5lclRleHQ7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICd5ZWFycycpIHtcbiAgICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLnZhbHVlIHx8IFtdO1xuICAgICAgICAgIHZhciBpZHggPSBPYmplY3QodXRpbF9bXCJhcnJheUZpbmRJbmRleFwiXSkodmFsdWUsIGZ1bmN0aW9uIChkYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0ZS5nZXRGdWxsWWVhcigpID09PSBOdW1iZXIoeWVhcik7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdmFyIG5ld1ZhbHVlID0gaWR4ID4gLTEgPyBbXS5jb25jYXQodmFsdWUuc2xpY2UoMCwgaWR4KSwgdmFsdWUuc2xpY2UoaWR4ICsgMSkpIDogW10uY29uY2F0KHZhbHVlLCBbbmV3IERhdGUoeWVhcildKTtcbiAgICAgICAgICB0aGlzLiRlbWl0KCdwaWNrJywgbmV3VmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuJGVtaXQoJ3BpY2snLCBOdW1iZXIoeWVhcikpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZGF0ZS1waWNrZXIvc3JjL2Jhc2ljL3llYXItdGFibGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGJhc2ljX3llYXJfdGFibGV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoeWVhcl90YWJsZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9kYXRlLXBpY2tlci9zcmMvYmFzaWMveWVhci10YWJsZS52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciB5ZWFyX3RhYmxlX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgYmFzaWNfeWVhcl90YWJsZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgeWVhcl90YWJsZXZ1ZV90eXBlX3RlbXBsYXRlX2lkX2M4NmFiNWUwX3JlbmRlcixcbiAgeWVhcl90YWJsZXZ1ZV90eXBlX3RlbXBsYXRlX2lkX2M4NmFiNWUwX3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgeWVhcl90YWJsZV9hcGk7IH1cbnllYXJfdGFibGVfY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy9kYXRlLXBpY2tlci9zcmMvYmFzaWMveWVhci10YWJsZS52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgeWVhcl90YWJsZSA9ICh5ZWFyX3RhYmxlX2NvbXBvbmVudC5leHBvcnRzKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvZGF0ZS1waWNrZXIvc3JjL2Jhc2ljL21vbnRoLXRhYmxlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02NTRkNGY0MiZcbnZhciBtb250aF90YWJsZXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzY1NGQ0ZjQyX3JlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcInRhYmxlXCIsXG4gICAge1xuICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtbW9udGgtdGFibGVcIixcbiAgICAgIG9uOiB7IGNsaWNrOiBfdm0uaGFuZGxlTW9udGhUYWJsZUNsaWNrLCBtb3VzZW1vdmU6IF92bS5oYW5kbGVNb3VzZU1vdmUgfVxuICAgIH0sXG4gICAgW1xuICAgICAgX2MoXG4gICAgICAgIFwidGJvZHlcIixcbiAgICAgICAgX3ZtLl9sKF92bS5yb3dzLCBmdW5jdGlvbihyb3csIGtleSkge1xuICAgICAgICAgIHJldHVybiBfYyhcbiAgICAgICAgICAgIFwidHJcIixcbiAgICAgICAgICAgIHsga2V5OiBrZXkgfSxcbiAgICAgICAgICAgIF92bS5fbChyb3csIGZ1bmN0aW9uKGNlbGwsIGtleSkge1xuICAgICAgICAgICAgICByZXR1cm4gX2MoXCJ0ZFwiLCB7IGtleToga2V5LCBjbGFzczogX3ZtLmdldENlbGxTdHlsZShjZWxsKSB9LCBbXG4gICAgICAgICAgICAgICAgX2MoXCJkaXZcIiwgW1xuICAgICAgICAgICAgICAgICAgX2MoXCJhXCIsIHsgc3RhdGljQ2xhc3M6IFwiY2VsbFwiIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFxuICAgICAgICAgICAgICAgICAgICAgIF92bS5fcyhcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS50KFwiZWwuZGF0ZXBpY2tlci5tb250aHMuXCIgKyBfdm0ubW9udGhzW2NlbGwudGV4dF0pXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIDBcbiAgICAgICAgICApXG4gICAgICAgIH0pLFxuICAgICAgICAwXG4gICAgICApXG4gICAgXVxuICApXG59XG52YXIgbW9udGhfdGFibGV2dWVfdHlwZV90ZW1wbGF0ZV9pZF82NTRkNGY0Ml9zdGF0aWNSZW5kZXJGbnMgPSBbXVxubW9udGhfdGFibGV2dWVfdHlwZV90ZW1wbGF0ZV9pZF82NTRkNGY0Ml9yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9iYXNpYy9tb250aC10YWJsZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NjU0ZDRmNDImXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9iYXNpYy9tb250aC10YWJsZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuXG5cblxuXG5cbnZhciBtb250aF90YWJsZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX2RhdGVzSW5Nb250aCA9IGZ1bmN0aW9uIGRhdGVzSW5Nb250aCh5ZWFyLCBtb250aCkge1xuICB2YXIgbnVtT2ZEYXlzID0gT2JqZWN0KGRhdGVfdXRpbF9bXCJnZXREYXlDb3VudE9mTW9udGhcIl0pKHllYXIsIG1vbnRoKTtcbiAgdmFyIGZpcnN0RGF5ID0gbmV3IERhdGUoeWVhciwgbW9udGgsIDEpO1xuICByZXR1cm4gT2JqZWN0KGRhdGVfdXRpbF9bXCJyYW5nZVwiXSkobnVtT2ZEYXlzKS5tYXAoZnVuY3Rpb24gKG4pIHtcbiAgICByZXR1cm4gT2JqZWN0KGRhdGVfdXRpbF9bXCJuZXh0RGF0ZVwiXSkoZmlyc3REYXksIG4pO1xuICB9KTtcbn07XG5cbnZhciBjbGVhckRhdGUgPSBmdW5jdGlvbiBjbGVhckRhdGUoZGF0ZSkge1xuICByZXR1cm4gbmV3IERhdGUoZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCkpO1xufTtcblxudmFyIGdldE1vbnRoVGltZXN0YW1wID0gZnVuY3Rpb24gZ2V0TW9udGhUaW1lc3RhbXAodGltZSkge1xuICBpZiAodHlwZW9mIHRpbWUgPT09ICdudW1iZXInIHx8IHR5cGVvZiB0aW1lID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBjbGVhckRhdGUobmV3IERhdGUodGltZSkpLmdldFRpbWUoKTtcbiAgfSBlbHNlIGlmICh0aW1lIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgIHJldHVybiBjbGVhckRhdGUodGltZSkuZ2V0VGltZSgpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBOYU47XG4gIH1cbn07XG5cbi8vIHJlbW92ZSB0aGUgZmlyc3QgZWxlbWVudCB0aGF0IHNhdGlzZmllcyBgcHJlZGAgZnJvbSBhcnJcbi8vIHJldHVybiBhIG5ldyBhcnJheSBpZiBtb2RpZmljYXRpb24gb2NjdXJzXG4vLyByZXR1cm4gdGhlIG9yaWdpbmFsIGFycmF5IG90aGVyd2lzZVxudmFyIG1vbnRoX3RhYmxldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfcmVtb3ZlRnJvbUFycmF5ID0gZnVuY3Rpb24gcmVtb3ZlRnJvbUFycmF5KGFyciwgcHJlZCkge1xuICB2YXIgaWR4ID0gdHlwZW9mIHByZWQgPT09ICdmdW5jdGlvbicgPyBPYmplY3QodXRpbF9bXCJhcnJheUZpbmRJbmRleFwiXSkoYXJyLCBwcmVkKSA6IGFyci5pbmRleE9mKHByZWQpO1xuICByZXR1cm4gaWR4ID49IDAgPyBbXS5jb25jYXQoYXJyLnNsaWNlKDAsIGlkeCksIGFyci5zbGljZShpZHggKyAxKSkgOiBhcnI7XG59O1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgbW9udGhfdGFibGV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBwcm9wczoge1xuICAgIGRpc2FibGVkRGF0ZToge30sXG4gICAgdmFsdWU6IHt9LFxuICAgIHNlbGVjdGlvbk1vZGU6IHtcbiAgICAgIGRlZmF1bHQ6ICdtb250aCdcbiAgICB9LFxuICAgIG1pbkRhdGU6IHt9LFxuXG4gICAgbWF4RGF0ZToge30sXG4gICAgZGVmYXVsdFZhbHVlOiB7XG4gICAgICB2YWxpZGF0b3I6IGZ1bmN0aW9uIHZhbGlkYXRvcih2YWwpIHtcbiAgICAgICAgLy8gbnVsbCBvciB2YWxpZCBEYXRlIE9iamVjdFxuICAgICAgICByZXR1cm4gdmFsID09PSBudWxsIHx8IE9iamVjdChkYXRlX3V0aWxfW1wiaXNEYXRlXCJdKSh2YWwpIHx8IEFycmF5LmlzQXJyYXkodmFsKSAmJiB2YWwuZXZlcnkoZGF0ZV91dGlsX1tcImlzRGF0ZVwiXSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBkYXRlOiB7fSxcbiAgICByYW5nZVN0YXRlOiB7XG4gICAgICBkZWZhdWx0OiBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBlbmREYXRlOiBudWxsLFxuICAgICAgICAgIHNlbGVjdGluZzogZmFsc2VcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWl4aW5zOiBbbG9jYWxlX2RlZmF1bHQuYV0sXG5cbiAgd2F0Y2g6IHtcbiAgICAncmFuZ2VTdGF0ZS5lbmREYXRlJzogZnVuY3Rpb24gcmFuZ2VTdGF0ZUVuZERhdGUobmV3VmFsKSB7XG4gICAgICB0aGlzLm1hcmtSYW5nZSh0aGlzLm1pbkRhdGUsIG5ld1ZhbCk7XG4gICAgfSxcbiAgICBtaW5EYXRlOiBmdW5jdGlvbiBtaW5EYXRlKG5ld1ZhbCwgb2xkVmFsKSB7XG4gICAgICBpZiAoZ2V0TW9udGhUaW1lc3RhbXAobmV3VmFsKSAhPT0gZ2V0TW9udGhUaW1lc3RhbXAob2xkVmFsKSkge1xuICAgICAgICB0aGlzLm1hcmtSYW5nZSh0aGlzLm1pbkRhdGUsIHRoaXMubWF4RGF0ZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBtYXhEYXRlOiBmdW5jdGlvbiBtYXhEYXRlKG5ld1ZhbCwgb2xkVmFsKSB7XG4gICAgICBpZiAoZ2V0TW9udGhUaW1lc3RhbXAobmV3VmFsKSAhPT0gZ2V0TW9udGhUaW1lc3RhbXAob2xkVmFsKSkge1xuICAgICAgICB0aGlzLm1hcmtSYW5nZSh0aGlzLm1pbkRhdGUsIHRoaXMubWF4RGF0ZSk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1vbnRoczogWydqYW4nLCAnZmViJywgJ21hcicsICdhcHInLCAnbWF5JywgJ2p1bicsICdqdWwnLCAnYXVnJywgJ3NlcCcsICdvY3QnLCAnbm92JywgJ2RlYyddLFxuICAgICAgdGFibGVSb3dzOiBbW10sIFtdLCBbXV0sXG4gICAgICBsYXN0Um93OiBudWxsLFxuICAgICAgbGFzdENvbHVtbjogbnVsbFxuICAgIH07XG4gIH0sXG5cblxuICBtZXRob2RzOiB7XG4gICAgY2VsbE1hdGNoZXNEYXRlOiBmdW5jdGlvbiBjZWxsTWF0Y2hlc0RhdGUoY2VsbCwgZGF0ZSkge1xuICAgICAgdmFyIHZhbHVlID0gbmV3IERhdGUoZGF0ZSk7XG4gICAgICByZXR1cm4gdGhpcy5kYXRlLmdldEZ1bGxZZWFyKCkgPT09IHZhbHVlLmdldEZ1bGxZZWFyKCkgJiYgTnVtYmVyKGNlbGwudGV4dCkgPT09IHZhbHVlLmdldE1vbnRoKCk7XG4gICAgfSxcbiAgICBnZXRDZWxsU3R5bGU6IGZ1bmN0aW9uIGdldENlbGxTdHlsZShjZWxsKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICB2YXIgc3R5bGUgPSB7fTtcbiAgICAgIHZhciB5ZWFyID0gdGhpcy5kYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICB2YXIgdG9kYXkgPSBuZXcgRGF0ZSgpO1xuICAgICAgdmFyIG1vbnRoID0gY2VsbC50ZXh0O1xuICAgICAgdmFyIGRlZmF1bHRWYWx1ZSA9IHRoaXMuZGVmYXVsdFZhbHVlID8gQXJyYXkuaXNBcnJheSh0aGlzLmRlZmF1bHRWYWx1ZSkgPyB0aGlzLmRlZmF1bHRWYWx1ZSA6IFt0aGlzLmRlZmF1bHRWYWx1ZV0gOiBbXTtcbiAgICAgIHN0eWxlLmRpc2FibGVkID0gdHlwZW9mIHRoaXMuZGlzYWJsZWREYXRlID09PSAnZnVuY3Rpb24nID8gbW9udGhfdGFibGV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19kYXRlc0luTW9udGgoeWVhciwgbW9udGgpLmV2ZXJ5KHRoaXMuZGlzYWJsZWREYXRlKSA6IGZhbHNlO1xuICAgICAgc3R5bGUuY3VycmVudCA9IE9iamVjdCh1dGlsX1tcImFycmF5RmluZEluZGV4XCJdKShPYmplY3QodXRpbF9bXCJjb2VyY2VUcnV0aHlWYWx1ZVRvQXJyYXlcIl0pKHRoaXMudmFsdWUpLCBmdW5jdGlvbiAoZGF0ZSkge1xuICAgICAgICByZXR1cm4gZGF0ZS5nZXRGdWxsWWVhcigpID09PSB5ZWFyICYmIGRhdGUuZ2V0TW9udGgoKSA9PT0gbW9udGg7XG4gICAgICB9KSA+PSAwO1xuICAgICAgc3R5bGUudG9kYXkgPSB0b2RheS5nZXRGdWxsWWVhcigpID09PSB5ZWFyICYmIHRvZGF5LmdldE1vbnRoKCkgPT09IG1vbnRoO1xuICAgICAgc3R5bGUuZGVmYXVsdCA9IGRlZmF1bHRWYWx1ZS5zb21lKGZ1bmN0aW9uIChkYXRlKSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5jZWxsTWF0Y2hlc0RhdGUoY2VsbCwgZGF0ZSk7XG4gICAgICB9KTtcblxuICAgICAgaWYgKGNlbGwuaW5SYW5nZSkge1xuICAgICAgICBzdHlsZVsnaW4tcmFuZ2UnXSA9IHRydWU7XG5cbiAgICAgICAgaWYgKGNlbGwuc3RhcnQpIHtcbiAgICAgICAgICBzdHlsZVsnc3RhcnQtZGF0ZSddID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjZWxsLmVuZCkge1xuICAgICAgICAgIHN0eWxlWydlbmQtZGF0ZSddID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHN0eWxlO1xuICAgIH0sXG4gICAgZ2V0TW9udGhPZkNlbGw6IGZ1bmN0aW9uIGdldE1vbnRoT2ZDZWxsKG1vbnRoKSB7XG4gICAgICB2YXIgeWVhciA9IHRoaXMuZGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKHllYXIsIG1vbnRoLCAxKTtcbiAgICB9LFxuICAgIG1hcmtSYW5nZTogZnVuY3Rpb24gbWFya1JhbmdlKG1pbkRhdGUsIG1heERhdGUpIHtcbiAgICAgIG1pbkRhdGUgPSBnZXRNb250aFRpbWVzdGFtcChtaW5EYXRlKTtcbiAgICAgIG1heERhdGUgPSBnZXRNb250aFRpbWVzdGFtcChtYXhEYXRlKSB8fCBtaW5EYXRlO1xuICAgICAgdmFyIF9yZWYgPSBbTWF0aC5taW4obWluRGF0ZSwgbWF4RGF0ZSksIE1hdGgubWF4KG1pbkRhdGUsIG1heERhdGUpXTtcbiAgICAgIG1pbkRhdGUgPSBfcmVmWzBdO1xuICAgICAgbWF4RGF0ZSA9IF9yZWZbMV07XG5cbiAgICAgIHZhciByb3dzID0gdGhpcy5yb3dzO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGsgPSByb3dzLmxlbmd0aDsgaSA8IGs7IGkrKykge1xuICAgICAgICB2YXIgcm93ID0gcm93c1tpXTtcbiAgICAgICAgZm9yICh2YXIgaiA9IDAsIGwgPSByb3cubGVuZ3RoOyBqIDwgbDsgaisrKSB7XG5cbiAgICAgICAgICB2YXIgY2VsbCA9IHJvd1tqXTtcbiAgICAgICAgICB2YXIgaW5kZXggPSBpICogNCArIGo7XG4gICAgICAgICAgdmFyIHRpbWUgPSBuZXcgRGF0ZSh0aGlzLmRhdGUuZ2V0RnVsbFllYXIoKSwgaW5kZXgpLmdldFRpbWUoKTtcblxuICAgICAgICAgIGNlbGwuaW5SYW5nZSA9IG1pbkRhdGUgJiYgdGltZSA+PSBtaW5EYXRlICYmIHRpbWUgPD0gbWF4RGF0ZTtcbiAgICAgICAgICBjZWxsLnN0YXJ0ID0gbWluRGF0ZSAmJiB0aW1lID09PSBtaW5EYXRlO1xuICAgICAgICAgIGNlbGwuZW5kID0gbWF4RGF0ZSAmJiB0aW1lID09PSBtYXhEYXRlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBoYW5kbGVNb3VzZU1vdmU6IGZ1bmN0aW9uIGhhbmRsZU1vdXNlTW92ZShldmVudCkge1xuICAgICAgaWYgKCF0aGlzLnJhbmdlU3RhdGUuc2VsZWN0aW5nKSByZXR1cm47XG5cbiAgICAgIHZhciB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG4gICAgICBpZiAodGFyZ2V0LnRhZ05hbWUgPT09ICdBJykge1xuICAgICAgICB0YXJnZXQgPSB0YXJnZXQucGFyZW50Tm9kZS5wYXJlbnROb2RlO1xuICAgICAgfVxuICAgICAgaWYgKHRhcmdldC50YWdOYW1lID09PSAnRElWJykge1xuICAgICAgICB0YXJnZXQgPSB0YXJnZXQucGFyZW50Tm9kZTtcbiAgICAgIH1cbiAgICAgIGlmICh0YXJnZXQudGFnTmFtZSAhPT0gJ1REJykgcmV0dXJuO1xuXG4gICAgICB2YXIgcm93ID0gdGFyZ2V0LnBhcmVudE5vZGUucm93SW5kZXg7XG4gICAgICB2YXIgY29sdW1uID0gdGFyZ2V0LmNlbGxJbmRleDtcbiAgICAgIC8vIGNhbiBub3Qgc2VsZWN0IGRpc2FibGVkIGRhdGVcbiAgICAgIGlmICh0aGlzLnJvd3Nbcm93XVtjb2x1bW5dLmRpc2FibGVkKSByZXR1cm47XG5cbiAgICAgIC8vIG9ubHkgdXBkYXRlIHJhbmdlU3RhdGUgd2hlbiBtb3VzZSBtb3ZlcyB0byBhIG5ldyBjZWxsXG4gICAgICAvLyB0aGlzIGF2b2lkcyBmcmVxdWVudCBEYXRlIG9iamVjdCBjcmVhdGlvbiBhbmQgaW1wcm92ZXMgcGVyZm9ybWFuY2VcbiAgICAgIGlmIChyb3cgIT09IHRoaXMubGFzdFJvdyB8fCBjb2x1bW4gIT09IHRoaXMubGFzdENvbHVtbikge1xuICAgICAgICB0aGlzLmxhc3RSb3cgPSByb3c7XG4gICAgICAgIHRoaXMubGFzdENvbHVtbiA9IGNvbHVtbjtcbiAgICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlcmFuZ2UnLCB7XG4gICAgICAgICAgbWluRGF0ZTogdGhpcy5taW5EYXRlLFxuICAgICAgICAgIG1heERhdGU6IHRoaXMubWF4RGF0ZSxcbiAgICAgICAgICByYW5nZVN0YXRlOiB7XG4gICAgICAgICAgICBzZWxlY3Rpbmc6IHRydWUsXG4gICAgICAgICAgICBlbmREYXRlOiB0aGlzLmdldE1vbnRoT2ZDZWxsKHJvdyAqIDQgKyBjb2x1bW4pXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGhhbmRsZU1vbnRoVGFibGVDbGljazogZnVuY3Rpb24gaGFuZGxlTW9udGhUYWJsZUNsaWNrKGV2ZW50KSB7XG4gICAgICB2YXIgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuICAgICAgaWYgKHRhcmdldC50YWdOYW1lID09PSAnQScpIHtcbiAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGUucGFyZW50Tm9kZTtcbiAgICAgIH1cbiAgICAgIGlmICh0YXJnZXQudGFnTmFtZSA9PT0gJ0RJVicpIHtcbiAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGU7XG4gICAgICB9XG4gICAgICBpZiAodGFyZ2V0LnRhZ05hbWUgIT09ICdURCcpIHJldHVybjtcbiAgICAgIGlmIChPYmplY3QoZG9tX1tcImhhc0NsYXNzXCJdKSh0YXJnZXQsICdkaXNhYmxlZCcpKSByZXR1cm47XG4gICAgICB2YXIgY29sdW1uID0gdGFyZ2V0LmNlbGxJbmRleDtcbiAgICAgIHZhciByb3cgPSB0YXJnZXQucGFyZW50Tm9kZS5yb3dJbmRleDtcbiAgICAgIHZhciBtb250aCA9IHJvdyAqIDQgKyBjb2x1bW47XG4gICAgICB2YXIgbmV3RGF0ZSA9IHRoaXMuZ2V0TW9udGhPZkNlbGwobW9udGgpO1xuICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ3JhbmdlJykge1xuICAgICAgICBpZiAoIXRoaXMucmFuZ2VTdGF0ZS5zZWxlY3RpbmcpIHtcbiAgICAgICAgICB0aGlzLiRlbWl0KCdwaWNrJywgeyBtaW5EYXRlOiBuZXdEYXRlLCBtYXhEYXRlOiBudWxsIH0pO1xuICAgICAgICAgIHRoaXMucmFuZ2VTdGF0ZS5zZWxlY3RpbmcgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChuZXdEYXRlID49IHRoaXMubWluRGF0ZSkge1xuICAgICAgICAgICAgdGhpcy4kZW1pdCgncGljaycsIHsgbWluRGF0ZTogdGhpcy5taW5EYXRlLCBtYXhEYXRlOiBuZXdEYXRlIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLiRlbWl0KCdwaWNrJywgeyBtaW5EYXRlOiBuZXdEYXRlLCBtYXhEYXRlOiB0aGlzLm1pbkRhdGUgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMucmFuZ2VTdGF0ZS5zZWxlY3RpbmcgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICdtb250aHMnKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IHRoaXMudmFsdWUgfHwgW107XG4gICAgICAgIHZhciB5ZWFyID0gdGhpcy5kYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgIHZhciBuZXdWYWx1ZSA9IE9iamVjdCh1dGlsX1tcImFycmF5RmluZEluZGV4XCJdKSh2YWx1ZSwgZnVuY3Rpb24gKGRhdGUpIHtcbiAgICAgICAgICByZXR1cm4gZGF0ZS5nZXRGdWxsWWVhcigpID09PSB5ZWFyICYmIGRhdGUuZ2V0TW9udGgoKSA9PT0gbW9udGg7XG4gICAgICAgIH0pID49IDAgPyBtb250aF90YWJsZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX3JlbW92ZUZyb21BcnJheSh2YWx1ZSwgZnVuY3Rpb24gKGRhdGUpIHtcbiAgICAgICAgICByZXR1cm4gZGF0ZS5nZXRUaW1lKCkgPT09IG5ld0RhdGUuZ2V0VGltZSgpO1xuICAgICAgICB9KSA6IFtdLmNvbmNhdCh2YWx1ZSwgW25ld0RhdGVdKTtcbiAgICAgICAgdGhpcy4kZW1pdCgncGljaycsIG5ld1ZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3BpY2snLCBtb250aCk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgcm93czogZnVuY3Rpb24gcm93cygpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICAvLyBUT0RPOiByZWZhY3Rvcnkgcm93cyAvIGdldENlbGxDbGFzc2VzXG4gICAgICB2YXIgcm93cyA9IHRoaXMudGFibGVSb3dzO1xuICAgICAgdmFyIGRpc2FibGVkRGF0ZSA9IHRoaXMuZGlzYWJsZWREYXRlO1xuICAgICAgdmFyIHNlbGVjdGVkRGF0ZSA9IFtdO1xuICAgICAgdmFyIG5vdyA9IGdldE1vbnRoVGltZXN0YW1wKG5ldyBEYXRlKCkpO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDM7IGkrKykge1xuICAgICAgICB2YXIgcm93ID0gcm93c1tpXTtcblxuICAgICAgICB2YXIgX2xvb3AgPSBmdW5jdGlvbiBfbG9vcChqKSB7XG4gICAgICAgICAgdmFyIGNlbGwgPSByb3dbal07XG4gICAgICAgICAgaWYgKCFjZWxsKSB7XG4gICAgICAgICAgICBjZWxsID0geyByb3c6IGksIGNvbHVtbjogaiwgdHlwZTogJ25vcm1hbCcsIGluUmFuZ2U6IGZhbHNlLCBzdGFydDogZmFsc2UsIGVuZDogZmFsc2UgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjZWxsLnR5cGUgPSAnbm9ybWFsJztcblxuICAgICAgICAgIHZhciBpbmRleCA9IGkgKiA0ICsgajtcbiAgICAgICAgICB2YXIgdGltZSA9IG5ldyBEYXRlKF90aGlzMi5kYXRlLmdldEZ1bGxZZWFyKCksIGluZGV4KS5nZXRUaW1lKCk7XG4gICAgICAgICAgY2VsbC5pblJhbmdlID0gdGltZSA+PSBnZXRNb250aFRpbWVzdGFtcChfdGhpczIubWluRGF0ZSkgJiYgdGltZSA8PSBnZXRNb250aFRpbWVzdGFtcChfdGhpczIubWF4RGF0ZSk7XG4gICAgICAgICAgY2VsbC5zdGFydCA9IF90aGlzMi5taW5EYXRlICYmIHRpbWUgPT09IGdldE1vbnRoVGltZXN0YW1wKF90aGlzMi5taW5EYXRlKTtcbiAgICAgICAgICBjZWxsLmVuZCA9IF90aGlzMi5tYXhEYXRlICYmIHRpbWUgPT09IGdldE1vbnRoVGltZXN0YW1wKF90aGlzMi5tYXhEYXRlKTtcbiAgICAgICAgICB2YXIgaXNUb2RheSA9IHRpbWUgPT09IG5vdztcblxuICAgICAgICAgIGlmIChpc1RvZGF5KSB7XG4gICAgICAgICAgICBjZWxsLnR5cGUgPSAndG9kYXknO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjZWxsLnRleHQgPSBpbmRleDtcbiAgICAgICAgICB2YXIgY2VsbERhdGUgPSBuZXcgRGF0ZSh0aW1lKTtcbiAgICAgICAgICBjZWxsLmRpc2FibGVkID0gdHlwZW9mIGRpc2FibGVkRGF0ZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkaXNhYmxlZERhdGUoY2VsbERhdGUpO1xuICAgICAgICAgIGNlbGwuc2VsZWN0ZWQgPSBPYmplY3QodXRpbF9bXCJhcnJheUZpbmRcIl0pKHNlbGVjdGVkRGF0ZSwgZnVuY3Rpb24gKGRhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRlLmdldFRpbWUoKSA9PT0gY2VsbERhdGUuZ2V0VGltZSgpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgX3RoaXMyLiRzZXQocm93LCBqLCBjZWxsKTtcbiAgICAgICAgfTtcblxuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDQ7IGorKykge1xuICAgICAgICAgIF9sb29wKGopO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcm93cztcbiAgICB9XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9kYXRlLXBpY2tlci9zcmMvYmFzaWMvbW9udGgtdGFibGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGJhc2ljX21vbnRoX3RhYmxldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKG1vbnRoX3RhYmxldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9iYXNpYy9tb250aC10YWJsZS52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBtb250aF90YWJsZV9jb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIGJhc2ljX21vbnRoX3RhYmxldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICBtb250aF90YWJsZXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzY1NGQ0ZjQyX3JlbmRlcixcbiAgbW9udGhfdGFibGV2dWVfdHlwZV90ZW1wbGF0ZV9pZF82NTRkNGY0Ml9zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIG1vbnRoX3RhYmxlX2FwaTsgfVxubW9udGhfdGFibGVfY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy9kYXRlLXBpY2tlci9zcmMvYmFzaWMvbW9udGgtdGFibGUudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIG1vbnRoX3RhYmxlID0gKG1vbnRoX3RhYmxlX2NvbXBvbmVudC5leHBvcnRzKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvZGF0ZS1waWNrZXIvc3JjL2Jhc2ljL2RhdGUtdGFibGUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTVkMWYzMzQxJlxudmFyIGRhdGVfdGFibGV2dWVfdHlwZV90ZW1wbGF0ZV9pZF81ZDFmMzM0MV9yZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJ0YWJsZVwiLFxuICAgIHtcbiAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWRhdGUtdGFibGVcIixcbiAgICAgIGNsYXNzOiB7IFwiaXMtd2Vlay1tb2RlXCI6IF92bS5zZWxlY3Rpb25Nb2RlID09PSBcIndlZWtcIiB9LFxuICAgICAgYXR0cnM6IHsgY2VsbHNwYWNpbmc6IFwiMFwiLCBjZWxscGFkZGluZzogXCIwXCIgfSxcbiAgICAgIG9uOiB7IGNsaWNrOiBfdm0uaGFuZGxlQ2xpY2ssIG1vdXNlbW92ZTogX3ZtLmhhbmRsZU1vdXNlTW92ZSB9XG4gICAgfSxcbiAgICBbXG4gICAgICBfYyhcbiAgICAgICAgXCJ0Ym9keVwiLFxuICAgICAgICBbXG4gICAgICAgICAgX2MoXG4gICAgICAgICAgICBcInRyXCIsXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF92bS5zaG93V2Vla051bWJlclxuICAgICAgICAgICAgICAgID8gX2MoXCJ0aFwiLCBbX3ZtLl92KF92bS5fcyhfdm0udChcImVsLmRhdGVwaWNrZXIud2Vla1wiKSkpXSlcbiAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICBfdm0uX2woX3ZtLldFRUtTLCBmdW5jdGlvbih3ZWVrLCBrZXkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX2MoXCJ0aFwiLCB7IGtleToga2V5IH0sIFtcbiAgICAgICAgICAgICAgICAgIF92bS5fdihfdm0uX3MoX3ZtLnQoXCJlbC5kYXRlcGlja2VyLndlZWtzLlwiICsgd2VlaykpKVxuICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgMlxuICAgICAgICAgICksXG4gICAgICAgICAgX3ZtLl9sKF92bS5yb3dzLCBmdW5jdGlvbihyb3csIGtleSkge1xuICAgICAgICAgICAgcmV0dXJuIF9jKFxuICAgICAgICAgICAgICBcInRyXCIsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1kYXRlLXRhYmxlX19yb3dcIixcbiAgICAgICAgICAgICAgICBjbGFzczogeyBjdXJyZW50OiBfdm0uaXNXZWVrQWN0aXZlKHJvd1sxXSkgfVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBfdm0uX2wocm93LCBmdW5jdGlvbihjZWxsLCBrZXkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX2MoXCJ0ZFwiLCB7IGtleToga2V5LCBjbGFzczogX3ZtLmdldENlbGxDbGFzc2VzKGNlbGwpIH0sIFtcbiAgICAgICAgICAgICAgICAgIF9jKFwiZGl2XCIsIFtcbiAgICAgICAgICAgICAgICAgICAgX2MoXCJzcGFuXCIsIFtcbiAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCJcXG4gICAgICAgICAgXCIgKyBfdm0uX3MoY2VsbC50ZXh0KSArIFwiXFxuICAgICAgICBcIilcbiAgICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIDBcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9KVxuICAgICAgICBdLFxuICAgICAgICAyXG4gICAgICApXG4gICAgXVxuICApXG59XG52YXIgZGF0ZV90YWJsZXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzVkMWYzMzQxX3N0YXRpY1JlbmRlckZucyA9IFtdXG5kYXRlX3RhYmxldnVlX3R5cGVfdGVtcGxhdGVfaWRfNWQxZjMzNDFfcmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9kYXRlLXBpY2tlci9zcmMvYmFzaWMvZGF0ZS10YWJsZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NWQxZjMzNDEmXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9iYXNpYy9kYXRlLXRhYmxlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuXG5cblxuXG52YXIgX1dFRUtTID0gWydzdW4nLCAnbW9uJywgJ3R1ZScsICd3ZWQnLCAndGh1JywgJ2ZyaScsICdzYXQnXTtcbnZhciBkYXRlX3RhYmxldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfZ2V0RGF0ZVRpbWVzdGFtcCA9IGZ1bmN0aW9uIGdldERhdGVUaW1lc3RhbXAodGltZSkge1xuICBpZiAodHlwZW9mIHRpbWUgPT09ICdudW1iZXInIHx8IHR5cGVvZiB0aW1lID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBPYmplY3QoZGF0ZV91dGlsX1tcImNsZWFyVGltZVwiXSkobmV3IERhdGUodGltZSkpLmdldFRpbWUoKTtcbiAgfSBlbHNlIGlmICh0aW1lIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgIHJldHVybiBPYmplY3QoZGF0ZV91dGlsX1tcImNsZWFyVGltZVwiXSkodGltZSkuZ2V0VGltZSgpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBOYU47XG4gIH1cbn07XG5cbi8vIHJlbW92ZSB0aGUgZmlyc3QgZWxlbWVudCB0aGF0IHNhdGlzZmllcyBgcHJlZGAgZnJvbSBhcnJcbi8vIHJldHVybiBhIG5ldyBhcnJheSBpZiBtb2RpZmljYXRpb24gb2NjdXJzXG4vLyByZXR1cm4gdGhlIG9yaWdpbmFsIGFycmF5IG90aGVyd2lzZVxudmFyIGRhdGVfdGFibGV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19yZW1vdmVGcm9tQXJyYXkgPSBmdW5jdGlvbiByZW1vdmVGcm9tQXJyYXkoYXJyLCBwcmVkKSB7XG4gIHZhciBpZHggPSB0eXBlb2YgcHJlZCA9PT0gJ2Z1bmN0aW9uJyA/IE9iamVjdCh1dGlsX1tcImFycmF5RmluZEluZGV4XCJdKShhcnIsIHByZWQpIDogYXJyLmluZGV4T2YocHJlZCk7XG4gIHJldHVybiBpZHggPj0gMCA/IFtdLmNvbmNhdChhcnIuc2xpY2UoMCwgaWR4KSwgYXJyLnNsaWNlKGlkeCArIDEpKSA6IGFycjtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGRhdGVfdGFibGV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBtaXhpbnM6IFtsb2NhbGVfZGVmYXVsdC5hXSxcblxuICBwcm9wczoge1xuICAgIGZpcnN0RGF5T2ZXZWVrOiB7XG4gICAgICBkZWZhdWx0OiA3LFxuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgdmFsaWRhdG9yOiBmdW5jdGlvbiB2YWxpZGF0b3IodmFsKSB7XG4gICAgICAgIHJldHVybiB2YWwgPj0gMSAmJiB2YWwgPD0gNztcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgdmFsdWU6IHt9LFxuXG4gICAgZGVmYXVsdFZhbHVlOiB7XG4gICAgICB2YWxpZGF0b3I6IGZ1bmN0aW9uIHZhbGlkYXRvcih2YWwpIHtcbiAgICAgICAgLy8gZWl0aGVyOiBudWxsLCB2YWxpZCBEYXRlIG9iamVjdCwgQXJyYXkgb2YgdmFsaWQgRGF0ZSBvYmplY3RzXG4gICAgICAgIHJldHVybiB2YWwgPT09IG51bGwgfHwgT2JqZWN0KGRhdGVfdXRpbF9bXCJpc0RhdGVcIl0pKHZhbCkgfHwgQXJyYXkuaXNBcnJheSh2YWwpICYmIHZhbC5ldmVyeShkYXRlX3V0aWxfW1wiaXNEYXRlXCJdKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZGF0ZToge30sXG5cbiAgICBzZWxlY3Rpb25Nb2RlOiB7XG4gICAgICBkZWZhdWx0OiAnZGF5J1xuICAgIH0sXG5cbiAgICBzaG93V2Vla051bWJlcjoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSxcblxuICAgIGRpc2FibGVkRGF0ZToge30sXG5cbiAgICBjZWxsQ2xhc3NOYW1lOiB7fSxcblxuICAgIG1pbkRhdGU6IHt9LFxuXG4gICAgbWF4RGF0ZToge30sXG5cbiAgICByYW5nZVN0YXRlOiB7XG4gICAgICBkZWZhdWx0OiBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBlbmREYXRlOiBudWxsLFxuICAgICAgICAgIHNlbGVjdGluZzogZmFsc2VcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBvZmZzZXREYXk6IGZ1bmN0aW9uIG9mZnNldERheSgpIHtcbiAgICAgIHZhciB3ZWVrID0gdGhpcy5maXJzdERheU9mV2VlaztcbiAgICAgIC8vIOWRqOaXpeS4uueVjOmZkO+8jOW3puWPs+WBj+enu+eahOWkqeaVsO+8jDMyMTc2NTQg5L6L5aaC5ZGo5LiA5bCx5pivIC0x77yM55uu55qE5piv6LCD5pW05YmN5Lik6KGM5pel5pyf55qE5L2N572uXG4gICAgICByZXR1cm4gd2VlayA+IDMgPyA3IC0gd2VlayA6IC13ZWVrO1xuICAgIH0sXG4gICAgV0VFS1M6IGZ1bmN0aW9uIFdFRUtTKCkge1xuICAgICAgdmFyIHdlZWsgPSB0aGlzLmZpcnN0RGF5T2ZXZWVrO1xuICAgICAgcmV0dXJuIF9XRUVLUy5jb25jYXQoX1dFRUtTKS5zbGljZSh3ZWVrLCB3ZWVrICsgNyk7XG4gICAgfSxcbiAgICB5ZWFyOiBmdW5jdGlvbiB5ZWFyKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgIH0sXG4gICAgbW9udGg6IGZ1bmN0aW9uIG1vbnRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0ZS5nZXRNb250aCgpO1xuICAgIH0sXG4gICAgc3RhcnREYXRlOiBmdW5jdGlvbiBzdGFydERhdGUoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0KGRhdGVfdXRpbF9bXCJnZXRTdGFydERhdGVPZk1vbnRoXCJdKSh0aGlzLnllYXIsIHRoaXMubW9udGgpO1xuICAgIH0sXG4gICAgcm93czogZnVuY3Rpb24gcm93cygpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIC8vIFRPRE86IHJlZmFjdG9yeSByb3dzIC8gZ2V0Q2VsbENsYXNzZXNcbiAgICAgIHZhciBkYXRlID0gbmV3IERhdGUodGhpcy55ZWFyLCB0aGlzLm1vbnRoLCAxKTtcbiAgICAgIHZhciBkYXkgPSBPYmplY3QoZGF0ZV91dGlsX1tcImdldEZpcnN0RGF5T2ZNb250aFwiXSkoZGF0ZSk7IC8vIGRheSBvZiBmaXJzdCBkYXlcbiAgICAgIHZhciBkYXRlQ291bnRPZk1vbnRoID0gT2JqZWN0KGRhdGVfdXRpbF9bXCJnZXREYXlDb3VudE9mTW9udGhcIl0pKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpKTtcbiAgICAgIHZhciBkYXRlQ291bnRPZkxhc3RNb250aCA9IE9iamVjdChkYXRlX3V0aWxfW1wiZ2V0RGF5Q291bnRPZk1vbnRoXCJdKShkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSA9PT0gMCA/IDExIDogZGF0ZS5nZXRNb250aCgpIC0gMSk7XG5cbiAgICAgIGRheSA9IGRheSA9PT0gMCA/IDcgOiBkYXk7XG5cbiAgICAgIHZhciBvZmZzZXQgPSB0aGlzLm9mZnNldERheTtcbiAgICAgIHZhciByb3dzID0gdGhpcy50YWJsZVJvd3M7XG4gICAgICB2YXIgY291bnQgPSAxO1xuXG4gICAgICB2YXIgc3RhcnREYXRlID0gdGhpcy5zdGFydERhdGU7XG4gICAgICB2YXIgZGlzYWJsZWREYXRlID0gdGhpcy5kaXNhYmxlZERhdGU7XG4gICAgICB2YXIgY2VsbENsYXNzTmFtZSA9IHRoaXMuY2VsbENsYXNzTmFtZTtcbiAgICAgIHZhciBzZWxlY3RlZERhdGUgPSB0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICdkYXRlcycgPyBPYmplY3QodXRpbF9bXCJjb2VyY2VUcnV0aHlWYWx1ZVRvQXJyYXlcIl0pKHRoaXMudmFsdWUpIDogW107XG4gICAgICB2YXIgbm93ID0gZGF0ZV90YWJsZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX2dldERhdGVUaW1lc3RhbXAobmV3IERhdGUoKSk7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNjsgaSsrKSB7XG4gICAgICAgIHZhciByb3cgPSByb3dzW2ldO1xuXG4gICAgICAgIGlmICh0aGlzLnNob3dXZWVrTnVtYmVyKSB7XG4gICAgICAgICAgaWYgKCFyb3dbMF0pIHtcbiAgICAgICAgICAgIHJvd1swXSA9IHsgdHlwZTogJ3dlZWsnLCB0ZXh0OiBPYmplY3QoZGF0ZV91dGlsX1tcImdldFdlZWtOdW1iZXJcIl0pKE9iamVjdChkYXRlX3V0aWxfW1wibmV4dERhdGVcIl0pKHN0YXJ0RGF0ZSwgaSAqIDcgKyAxKSkgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgX2xvb3AgPSBmdW5jdGlvbiBfbG9vcChqKSB7XG4gICAgICAgICAgdmFyIGNlbGwgPSByb3dbX3RoaXMuc2hvd1dlZWtOdW1iZXIgPyBqICsgMSA6IGpdO1xuICAgICAgICAgIGlmICghY2VsbCkge1xuICAgICAgICAgICAgY2VsbCA9IHsgcm93OiBpLCBjb2x1bW46IGosIHR5cGU6ICdub3JtYWwnLCBpblJhbmdlOiBmYWxzZSwgc3RhcnQ6IGZhbHNlLCBlbmQ6IGZhbHNlIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2VsbC50eXBlID0gJ25vcm1hbCc7XG5cbiAgICAgICAgICB2YXIgaW5kZXggPSBpICogNyArIGo7XG4gICAgICAgICAgdmFyIHRpbWUgPSBPYmplY3QoZGF0ZV91dGlsX1tcIm5leHREYXRlXCJdKShzdGFydERhdGUsIGluZGV4IC0gb2Zmc2V0KS5nZXRUaW1lKCk7XG4gICAgICAgICAgY2VsbC5pblJhbmdlID0gdGltZSA+PSBkYXRlX3RhYmxldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfZ2V0RGF0ZVRpbWVzdGFtcChfdGhpcy5taW5EYXRlKSAmJiB0aW1lIDw9IGRhdGVfdGFibGV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19nZXREYXRlVGltZXN0YW1wKF90aGlzLm1heERhdGUpO1xuICAgICAgICAgIGNlbGwuc3RhcnQgPSBfdGhpcy5taW5EYXRlICYmIHRpbWUgPT09IGRhdGVfdGFibGV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19nZXREYXRlVGltZXN0YW1wKF90aGlzLm1pbkRhdGUpO1xuICAgICAgICAgIGNlbGwuZW5kID0gX3RoaXMubWF4RGF0ZSAmJiB0aW1lID09PSBkYXRlX3RhYmxldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfZ2V0RGF0ZVRpbWVzdGFtcChfdGhpcy5tYXhEYXRlKTtcbiAgICAgICAgICB2YXIgaXNUb2RheSA9IHRpbWUgPT09IG5vdztcblxuICAgICAgICAgIGlmIChpc1RvZGF5KSB7XG4gICAgICAgICAgICBjZWxsLnR5cGUgPSAndG9kYXknO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChpID49IDAgJiYgaSA8PSAxKSB7XG4gICAgICAgICAgICB2YXIgbnVtYmVyT2ZEYXlzRnJvbVByZXZpb3VzTW9udGggPSBkYXkgKyBvZmZzZXQgPCAwID8gNyArIGRheSArIG9mZnNldCA6IGRheSArIG9mZnNldDtcblxuICAgICAgICAgICAgaWYgKGogKyBpICogNyA+PSBudW1iZXJPZkRheXNGcm9tUHJldmlvdXNNb250aCkge1xuICAgICAgICAgICAgICBjZWxsLnRleHQgPSBjb3VudCsrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY2VsbC50ZXh0ID0gZGF0ZUNvdW50T2ZMYXN0TW9udGggLSAobnVtYmVyT2ZEYXlzRnJvbVByZXZpb3VzTW9udGggLSBqICUgNykgKyAxICsgaSAqIDc7XG4gICAgICAgICAgICAgIGNlbGwudHlwZSA9ICdwcmV2LW1vbnRoJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGNvdW50IDw9IGRhdGVDb3VudE9mTW9udGgpIHtcbiAgICAgICAgICAgICAgY2VsbC50ZXh0ID0gY291bnQrKztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNlbGwudGV4dCA9IGNvdW50KysgLSBkYXRlQ291bnRPZk1vbnRoO1xuICAgICAgICAgICAgICBjZWxsLnR5cGUgPSAnbmV4dC1tb250aCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIGNlbGxEYXRlID0gbmV3IERhdGUodGltZSk7XG4gICAgICAgICAgY2VsbC5kaXNhYmxlZCA9IHR5cGVvZiBkaXNhYmxlZERhdGUgPT09ICdmdW5jdGlvbicgJiYgZGlzYWJsZWREYXRlKGNlbGxEYXRlKTtcbiAgICAgICAgICBjZWxsLnNlbGVjdGVkID0gT2JqZWN0KHV0aWxfW1wiYXJyYXlGaW5kXCJdKShzZWxlY3RlZERhdGUsIGZ1bmN0aW9uIChkYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0ZS5nZXRUaW1lKCkgPT09IGNlbGxEYXRlLmdldFRpbWUoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjZWxsLmN1c3RvbUNsYXNzID0gdHlwZW9mIGNlbGxDbGFzc05hbWUgPT09ICdmdW5jdGlvbicgJiYgY2VsbENsYXNzTmFtZShjZWxsRGF0ZSk7XG4gICAgICAgICAgX3RoaXMuJHNldChyb3csIF90aGlzLnNob3dXZWVrTnVtYmVyID8gaiArIDEgOiBqLCBjZWxsKTtcbiAgICAgICAgfTtcblxuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDc7IGorKykge1xuICAgICAgICAgIF9sb29wKGopO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ3dlZWsnKSB7XG4gICAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5zaG93V2Vla051bWJlciA/IDEgOiAwO1xuICAgICAgICAgIHZhciBlbmQgPSB0aGlzLnNob3dXZWVrTnVtYmVyID8gNyA6IDY7XG4gICAgICAgICAgdmFyIGlzV2Vla0FjdGl2ZSA9IHRoaXMuaXNXZWVrQWN0aXZlKHJvd1tzdGFydCArIDFdKTtcblxuICAgICAgICAgIHJvd1tzdGFydF0uaW5SYW5nZSA9IGlzV2Vla0FjdGl2ZTtcbiAgICAgICAgICByb3dbc3RhcnRdLnN0YXJ0ID0gaXNXZWVrQWN0aXZlO1xuICAgICAgICAgIHJvd1tlbmRdLmluUmFuZ2UgPSBpc1dlZWtBY3RpdmU7XG4gICAgICAgICAgcm93W2VuZF0uZW5kID0gaXNXZWVrQWN0aXZlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByb3dzO1xuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgICdyYW5nZVN0YXRlLmVuZERhdGUnOiBmdW5jdGlvbiByYW5nZVN0YXRlRW5kRGF0ZShuZXdWYWwpIHtcbiAgICAgIHRoaXMubWFya1JhbmdlKHRoaXMubWluRGF0ZSwgbmV3VmFsKTtcbiAgICB9LFxuICAgIG1pbkRhdGU6IGZ1bmN0aW9uIG1pbkRhdGUobmV3VmFsLCBvbGRWYWwpIHtcbiAgICAgIGlmIChkYXRlX3RhYmxldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfZ2V0RGF0ZVRpbWVzdGFtcChuZXdWYWwpICE9PSBkYXRlX3RhYmxldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfZ2V0RGF0ZVRpbWVzdGFtcChvbGRWYWwpKSB7XG4gICAgICAgIHRoaXMubWFya1JhbmdlKHRoaXMubWluRGF0ZSwgdGhpcy5tYXhEYXRlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIG1heERhdGU6IGZ1bmN0aW9uIG1heERhdGUobmV3VmFsLCBvbGRWYWwpIHtcbiAgICAgIGlmIChkYXRlX3RhYmxldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfZ2V0RGF0ZVRpbWVzdGFtcChuZXdWYWwpICE9PSBkYXRlX3RhYmxldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfZ2V0RGF0ZVRpbWVzdGFtcChvbGRWYWwpKSB7XG4gICAgICAgIHRoaXMubWFya1JhbmdlKHRoaXMubWluRGF0ZSwgdGhpcy5tYXhEYXRlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdGFibGVSb3dzOiBbW10sIFtdLCBbXSwgW10sIFtdLCBbXV0sXG4gICAgICBsYXN0Um93OiBudWxsLFxuICAgICAgbGFzdENvbHVtbjogbnVsbFxuICAgIH07XG4gIH0sXG5cblxuICBtZXRob2RzOiB7XG4gICAgY2VsbE1hdGNoZXNEYXRlOiBmdW5jdGlvbiBjZWxsTWF0Y2hlc0RhdGUoY2VsbCwgZGF0ZSkge1xuICAgICAgdmFyIHZhbHVlID0gbmV3IERhdGUoZGF0ZSk7XG4gICAgICByZXR1cm4gdGhpcy55ZWFyID09PSB2YWx1ZS5nZXRGdWxsWWVhcigpICYmIHRoaXMubW9udGggPT09IHZhbHVlLmdldE1vbnRoKCkgJiYgTnVtYmVyKGNlbGwudGV4dCkgPT09IHZhbHVlLmdldERhdGUoKTtcbiAgICB9LFxuICAgIGdldENlbGxDbGFzc2VzOiBmdW5jdGlvbiBnZXRDZWxsQ2xhc3NlcyhjZWxsKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgdmFyIHNlbGVjdGlvbk1vZGUgPSB0aGlzLnNlbGVjdGlvbk1vZGU7XG4gICAgICB2YXIgZGVmYXVsdFZhbHVlID0gdGhpcy5kZWZhdWx0VmFsdWUgPyBBcnJheS5pc0FycmF5KHRoaXMuZGVmYXVsdFZhbHVlKSA/IHRoaXMuZGVmYXVsdFZhbHVlIDogW3RoaXMuZGVmYXVsdFZhbHVlXSA6IFtdO1xuXG4gICAgICB2YXIgY2xhc3NlcyA9IFtdO1xuICAgICAgaWYgKChjZWxsLnR5cGUgPT09ICdub3JtYWwnIHx8IGNlbGwudHlwZSA9PT0gJ3RvZGF5JykgJiYgIWNlbGwuZGlzYWJsZWQpIHtcbiAgICAgICAgY2xhc3Nlcy5wdXNoKCdhdmFpbGFibGUnKTtcbiAgICAgICAgaWYgKGNlbGwudHlwZSA9PT0gJ3RvZGF5Jykge1xuICAgICAgICAgIGNsYXNzZXMucHVzaCgndG9kYXknKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2xhc3Nlcy5wdXNoKGNlbGwudHlwZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjZWxsLnR5cGUgPT09ICdub3JtYWwnICYmIGRlZmF1bHRWYWx1ZS5zb21lKGZ1bmN0aW9uIChkYXRlKSB7XG4gICAgICAgIHJldHVybiBfdGhpczIuY2VsbE1hdGNoZXNEYXRlKGNlbGwsIGRhdGUpO1xuICAgICAgfSkpIHtcbiAgICAgICAgY2xhc3Nlcy5wdXNoKCdkZWZhdWx0Jyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzZWxlY3Rpb25Nb2RlID09PSAnZGF5JyAmJiAoY2VsbC50eXBlID09PSAnbm9ybWFsJyB8fCBjZWxsLnR5cGUgPT09ICd0b2RheScpICYmIHRoaXMuY2VsbE1hdGNoZXNEYXRlKGNlbGwsIHRoaXMudmFsdWUpKSB7XG4gICAgICAgIGNsYXNzZXMucHVzaCgnY3VycmVudCcpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2VsbC5pblJhbmdlICYmIChjZWxsLnR5cGUgPT09ICdub3JtYWwnIHx8IGNlbGwudHlwZSA9PT0gJ3RvZGF5JyB8fCB0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICd3ZWVrJykpIHtcbiAgICAgICAgY2xhc3Nlcy5wdXNoKCdpbi1yYW5nZScpO1xuXG4gICAgICAgIGlmIChjZWxsLnN0YXJ0KSB7XG4gICAgICAgICAgY2xhc3Nlcy5wdXNoKCdzdGFydC1kYXRlJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2VsbC5lbmQpIHtcbiAgICAgICAgICBjbGFzc2VzLnB1c2goJ2VuZC1kYXRlJyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGNlbGwuZGlzYWJsZWQpIHtcbiAgICAgICAgY2xhc3Nlcy5wdXNoKCdkaXNhYmxlZCcpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2VsbC5zZWxlY3RlZCkge1xuICAgICAgICBjbGFzc2VzLnB1c2goJ3NlbGVjdGVkJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjZWxsLmN1c3RvbUNsYXNzKSB7XG4gICAgICAgIGNsYXNzZXMucHVzaChjZWxsLmN1c3RvbUNsYXNzKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNsYXNzZXMuam9pbignICcpO1xuICAgIH0sXG4gICAgZ2V0RGF0ZU9mQ2VsbDogZnVuY3Rpb24gZ2V0RGF0ZU9mQ2VsbChyb3csIGNvbHVtbikge1xuICAgICAgdmFyIG9mZnNldEZyb21TdGFydCA9IHJvdyAqIDcgKyAoY29sdW1uIC0gKHRoaXMuc2hvd1dlZWtOdW1iZXIgPyAxIDogMCkpIC0gdGhpcy5vZmZzZXREYXk7XG4gICAgICByZXR1cm4gT2JqZWN0KGRhdGVfdXRpbF9bXCJuZXh0RGF0ZVwiXSkodGhpcy5zdGFydERhdGUsIG9mZnNldEZyb21TdGFydCk7XG4gICAgfSxcbiAgICBpc1dlZWtBY3RpdmU6IGZ1bmN0aW9uIGlzV2Vla0FjdGl2ZShjZWxsKSB7XG4gICAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlICE9PSAnd2VlaycpIHJldHVybiBmYWxzZTtcbiAgICAgIHZhciBuZXdEYXRlID0gbmV3IERhdGUodGhpcy55ZWFyLCB0aGlzLm1vbnRoLCAxKTtcbiAgICAgIHZhciB5ZWFyID0gbmV3RGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgdmFyIG1vbnRoID0gbmV3RGF0ZS5nZXRNb250aCgpO1xuXG4gICAgICBpZiAoY2VsbC50eXBlID09PSAncHJldi1tb250aCcpIHtcbiAgICAgICAgbmV3RGF0ZS5zZXRNb250aChtb250aCA9PT0gMCA/IDExIDogbW9udGggLSAxKTtcbiAgICAgICAgbmV3RGF0ZS5zZXRGdWxsWWVhcihtb250aCA9PT0gMCA/IHllYXIgLSAxIDogeWVhcik7XG4gICAgICB9XG5cbiAgICAgIGlmIChjZWxsLnR5cGUgPT09ICduZXh0LW1vbnRoJykge1xuICAgICAgICBuZXdEYXRlLnNldE1vbnRoKG1vbnRoID09PSAxMSA/IDAgOiBtb250aCArIDEpO1xuICAgICAgICBuZXdEYXRlLnNldEZ1bGxZZWFyKG1vbnRoID09PSAxMSA/IHllYXIgKyAxIDogeWVhcik7XG4gICAgICB9XG5cbiAgICAgIG5ld0RhdGUuc2V0RGF0ZShwYXJzZUludChjZWxsLnRleHQsIDEwKSk7XG5cbiAgICAgIGlmIChPYmplY3QoZGF0ZV91dGlsX1tcImlzRGF0ZVwiXSkodGhpcy52YWx1ZSkpIHtcbiAgICAgICAgdmFyIGRheU9mZnNldCA9ICh0aGlzLnZhbHVlLmdldERheSgpIC0gdGhpcy5maXJzdERheU9mV2VlayArIDcpICUgNyAtIDE7XG4gICAgICAgIHZhciB3ZWVrRGF0ZSA9IE9iamVjdChkYXRlX3V0aWxfW1wicHJldkRhdGVcIl0pKHRoaXMudmFsdWUsIGRheU9mZnNldCk7XG4gICAgICAgIHJldHVybiB3ZWVrRGF0ZS5nZXRUaW1lKCkgPT09IG5ld0RhdGUuZ2V0VGltZSgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG4gICAgbWFya1JhbmdlOiBmdW5jdGlvbiBtYXJrUmFuZ2UobWluRGF0ZSwgbWF4RGF0ZSkge1xuICAgICAgbWluRGF0ZSA9IGRhdGVfdGFibGV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19nZXREYXRlVGltZXN0YW1wKG1pbkRhdGUpO1xuICAgICAgbWF4RGF0ZSA9IGRhdGVfdGFibGV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19nZXREYXRlVGltZXN0YW1wKG1heERhdGUpIHx8IG1pbkRhdGU7XG4gICAgICB2YXIgX3JlZiA9IFtNYXRoLm1pbihtaW5EYXRlLCBtYXhEYXRlKSwgTWF0aC5tYXgobWluRGF0ZSwgbWF4RGF0ZSldO1xuICAgICAgbWluRGF0ZSA9IF9yZWZbMF07XG4gICAgICBtYXhEYXRlID0gX3JlZlsxXTtcblxuXG4gICAgICB2YXIgc3RhcnREYXRlID0gdGhpcy5zdGFydERhdGU7XG4gICAgICB2YXIgcm93cyA9IHRoaXMucm93cztcbiAgICAgIGZvciAodmFyIGkgPSAwLCBrID0gcm93cy5sZW5ndGg7IGkgPCBrOyBpKyspIHtcbiAgICAgICAgdmFyIHJvdyA9IHJvd3NbaV07XG4gICAgICAgIGZvciAodmFyIGogPSAwLCBsID0gcm93Lmxlbmd0aDsgaiA8IGw7IGorKykge1xuICAgICAgICAgIGlmICh0aGlzLnNob3dXZWVrTnVtYmVyICYmIGogPT09IDApIGNvbnRpbnVlO1xuXG4gICAgICAgICAgdmFyIF9jZWxsID0gcm93W2pdO1xuICAgICAgICAgIHZhciBpbmRleCA9IGkgKiA3ICsgaiArICh0aGlzLnNob3dXZWVrTnVtYmVyID8gLTEgOiAwKTtcbiAgICAgICAgICB2YXIgdGltZSA9IE9iamVjdChkYXRlX3V0aWxfW1wibmV4dERhdGVcIl0pKHN0YXJ0RGF0ZSwgaW5kZXggLSB0aGlzLm9mZnNldERheSkuZ2V0VGltZSgpO1xuXG4gICAgICAgICAgX2NlbGwuaW5SYW5nZSA9IG1pbkRhdGUgJiYgdGltZSA+PSBtaW5EYXRlICYmIHRpbWUgPD0gbWF4RGF0ZTtcbiAgICAgICAgICBfY2VsbC5zdGFydCA9IG1pbkRhdGUgJiYgdGltZSA9PT0gbWluRGF0ZTtcbiAgICAgICAgICBfY2VsbC5lbmQgPSBtYXhEYXRlICYmIHRpbWUgPT09IG1heERhdGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGhhbmRsZU1vdXNlTW92ZTogZnVuY3Rpb24gaGFuZGxlTW91c2VNb3ZlKGV2ZW50KSB7XG4gICAgICBpZiAoIXRoaXMucmFuZ2VTdGF0ZS5zZWxlY3RpbmcpIHJldHVybjtcblxuICAgICAgdmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldDtcbiAgICAgIGlmICh0YXJnZXQudGFnTmFtZSA9PT0gJ1NQQU4nKSB7XG4gICAgICAgIHRhcmdldCA9IHRhcmdldC5wYXJlbnROb2RlLnBhcmVudE5vZGU7XG4gICAgICB9XG4gICAgICBpZiAodGFyZ2V0LnRhZ05hbWUgPT09ICdESVYnKSB7XG4gICAgICAgIHRhcmdldCA9IHRhcmdldC5wYXJlbnROb2RlO1xuICAgICAgfVxuICAgICAgaWYgKHRhcmdldC50YWdOYW1lICE9PSAnVEQnKSByZXR1cm47XG5cbiAgICAgIHZhciByb3cgPSB0YXJnZXQucGFyZW50Tm9kZS5yb3dJbmRleCAtIDE7XG4gICAgICB2YXIgY29sdW1uID0gdGFyZ2V0LmNlbGxJbmRleDtcblxuICAgICAgLy8gY2FuIG5vdCBzZWxlY3QgZGlzYWJsZWQgZGF0ZVxuICAgICAgaWYgKHRoaXMucm93c1tyb3ddW2NvbHVtbl0uZGlzYWJsZWQpIHJldHVybjtcblxuICAgICAgLy8gb25seSB1cGRhdGUgcmFuZ2VTdGF0ZSB3aGVuIG1vdXNlIG1vdmVzIHRvIGEgbmV3IGNlbGxcbiAgICAgIC8vIHRoaXMgYXZvaWRzIGZyZXF1ZW50IERhdGUgb2JqZWN0IGNyZWF0aW9uIGFuZCBpbXByb3ZlcyBwZXJmb3JtYW5jZVxuICAgICAgaWYgKHJvdyAhPT0gdGhpcy5sYXN0Um93IHx8IGNvbHVtbiAhPT0gdGhpcy5sYXN0Q29sdW1uKSB7XG4gICAgICAgIHRoaXMubGFzdFJvdyA9IHJvdztcbiAgICAgICAgdGhpcy5sYXN0Q29sdW1uID0gY29sdW1uO1xuICAgICAgICB0aGlzLiRlbWl0KCdjaGFuZ2VyYW5nZScsIHtcbiAgICAgICAgICBtaW5EYXRlOiB0aGlzLm1pbkRhdGUsXG4gICAgICAgICAgbWF4RGF0ZTogdGhpcy5tYXhEYXRlLFxuICAgICAgICAgIHJhbmdlU3RhdGU6IHtcbiAgICAgICAgICAgIHNlbGVjdGluZzogdHJ1ZSxcbiAgICAgICAgICAgIGVuZERhdGU6IHRoaXMuZ2V0RGF0ZU9mQ2VsbChyb3csIGNvbHVtbilcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gICAgaGFuZGxlQ2xpY2s6IGZ1bmN0aW9uIGhhbmRsZUNsaWNrKGV2ZW50KSB7XG4gICAgICB2YXIgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuICAgICAgaWYgKHRhcmdldC50YWdOYW1lID09PSAnU1BBTicpIHtcbiAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGUucGFyZW50Tm9kZTtcbiAgICAgIH1cbiAgICAgIGlmICh0YXJnZXQudGFnTmFtZSA9PT0gJ0RJVicpIHtcbiAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGU7XG4gICAgICB9XG5cbiAgICAgIGlmICh0YXJnZXQudGFnTmFtZSAhPT0gJ1REJykgcmV0dXJuO1xuXG4gICAgICB2YXIgcm93ID0gdGFyZ2V0LnBhcmVudE5vZGUucm93SW5kZXggLSAxO1xuICAgICAgdmFyIGNvbHVtbiA9IHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ3dlZWsnID8gMSA6IHRhcmdldC5jZWxsSW5kZXg7XG4gICAgICB2YXIgY2VsbCA9IHRoaXMucm93c1tyb3ddW2NvbHVtbl07XG5cbiAgICAgIGlmIChjZWxsLmRpc2FibGVkIHx8IGNlbGwudHlwZSA9PT0gJ3dlZWsnKSByZXR1cm47XG5cbiAgICAgIHZhciBuZXdEYXRlID0gdGhpcy5nZXREYXRlT2ZDZWxsKHJvdywgY29sdW1uKTtcblxuICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ3JhbmdlJykge1xuICAgICAgICBpZiAoIXRoaXMucmFuZ2VTdGF0ZS5zZWxlY3RpbmcpIHtcbiAgICAgICAgICB0aGlzLiRlbWl0KCdwaWNrJywgeyBtaW5EYXRlOiBuZXdEYXRlLCBtYXhEYXRlOiBudWxsIH0pO1xuICAgICAgICAgIHRoaXMucmFuZ2VTdGF0ZS5zZWxlY3RpbmcgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChuZXdEYXRlID49IHRoaXMubWluRGF0ZSkge1xuICAgICAgICAgICAgdGhpcy4kZW1pdCgncGljaycsIHsgbWluRGF0ZTogdGhpcy5taW5EYXRlLCBtYXhEYXRlOiBuZXdEYXRlIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLiRlbWl0KCdwaWNrJywgeyBtaW5EYXRlOiBuZXdEYXRlLCBtYXhEYXRlOiB0aGlzLm1pbkRhdGUgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMucmFuZ2VTdGF0ZS5zZWxlY3RpbmcgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICdkYXknKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3BpY2snLCBuZXdEYXRlKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlID09PSAnd2VlaycpIHtcbiAgICAgICAgdmFyIHdlZWtOdW1iZXIgPSBPYmplY3QoZGF0ZV91dGlsX1tcImdldFdlZWtOdW1iZXJcIl0pKG5ld0RhdGUpO1xuICAgICAgICB2YXIgdmFsdWUgPSBuZXdEYXRlLmdldEZ1bGxZZWFyKCkgKyAndycgKyB3ZWVrTnVtYmVyO1xuICAgICAgICB0aGlzLiRlbWl0KCdwaWNrJywge1xuICAgICAgICAgIHllYXI6IG5ld0RhdGUuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgICB3ZWVrOiB3ZWVrTnVtYmVyLFxuICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICBkYXRlOiBuZXdEYXRlXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICdkYXRlcycpIHtcbiAgICAgICAgdmFyIF92YWx1ZSA9IHRoaXMudmFsdWUgfHwgW107XG4gICAgICAgIHZhciBuZXdWYWx1ZSA9IGNlbGwuc2VsZWN0ZWQgPyBkYXRlX3RhYmxldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfcmVtb3ZlRnJvbUFycmF5KF92YWx1ZSwgZnVuY3Rpb24gKGRhdGUpIHtcbiAgICAgICAgICByZXR1cm4gZGF0ZS5nZXRUaW1lKCkgPT09IG5ld0RhdGUuZ2V0VGltZSgpO1xuICAgICAgICB9KSA6IFtdLmNvbmNhdChfdmFsdWUsIFtuZXdEYXRlXSk7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3BpY2snLCBuZXdWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZGF0ZS1waWNrZXIvc3JjL2Jhc2ljL2RhdGUtdGFibGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGJhc2ljX2RhdGVfdGFibGV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoZGF0ZV90YWJsZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9kYXRlLXBpY2tlci9zcmMvYmFzaWMvZGF0ZS10YWJsZS52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBkYXRlX3RhYmxlX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgYmFzaWNfZGF0ZV90YWJsZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgZGF0ZV90YWJsZXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzVkMWYzMzQxX3JlbmRlcixcbiAgZGF0ZV90YWJsZXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzVkMWYzMzQxX3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgZGF0ZV90YWJsZV9hcGk7IH1cbmRhdGVfdGFibGVfY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy9kYXRlLXBpY2tlci9zcmMvYmFzaWMvZGF0ZS10YWJsZS52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgZGF0ZV90YWJsZSA9IChkYXRlX3RhYmxlX2NvbXBvbmVudC5leHBvcnRzKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9wYW5lbC9kYXRlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGRhdGV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBtaXhpbnM6IFtsb2NhbGVfZGVmYXVsdC5hXSxcblxuICBkaXJlY3RpdmVzOiB7IENsaWNrb3V0c2lkZTogY2xpY2tvdXRzaWRlX2RlZmF1bHQuYSB9LFxuXG4gIHdhdGNoOiB7XG4gICAgc2hvd1RpbWU6IGZ1bmN0aW9uIHNob3dUaW1lKHZhbCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAoIXZhbCkgcmV0dXJuO1xuICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKF8pIHtcbiAgICAgICAgdmFyIGlucHV0RWxtID0gX3RoaXMuJHJlZnMuaW5wdXQuJGVsO1xuICAgICAgICBpZiAoaW5wdXRFbG0pIHtcbiAgICAgICAgICBfdGhpcy5waWNrZXJXaWR0aCA9IGlucHV0RWxtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoICsgMTA7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHZhbHVlKHZhbCkge1xuICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ2RhdGVzJyAmJiB0aGlzLnZhbHVlKSByZXR1cm47XG4gICAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlID09PSAnbW9udGhzJyAmJiB0aGlzLnZhbHVlKSByZXR1cm47XG4gICAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlID09PSAneWVhcnMnICYmIHRoaXMudmFsdWUpIHJldHVybjtcbiAgICAgIGlmIChPYmplY3QoZGF0ZV91dGlsX1tcImlzRGF0ZVwiXSkodmFsKSkge1xuICAgICAgICB0aGlzLmRhdGUgPSBuZXcgRGF0ZSh2YWwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5kYXRlID0gdGhpcy5nZXREZWZhdWx0VmFsdWUoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGRlZmF1bHRWYWx1ZTogZnVuY3Rpb24gZGVmYXVsdFZhbHVlKHZhbCkge1xuICAgICAgaWYgKCFPYmplY3QoZGF0ZV91dGlsX1tcImlzRGF0ZVwiXSkodGhpcy52YWx1ZSkpIHtcbiAgICAgICAgdGhpcy5kYXRlID0gdmFsID8gbmV3IERhdGUodmFsKSA6IG5ldyBEYXRlKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICB0aW1lUGlja2VyVmlzaWJsZTogZnVuY3Rpb24gdGltZVBpY2tlclZpc2libGUodmFsKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgaWYgKHZhbCkgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gX3RoaXMyLiRyZWZzLnRpbWVwaWNrZXIuYWRqdXN0U3Bpbm5lcnMoKTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgc2VsZWN0aW9uTW9kZTogZnVuY3Rpb24gc2VsZWN0aW9uTW9kZShuZXdWYWwpIHtcbiAgICAgIGlmIChuZXdWYWwgPT09ICdtb250aCcpIHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFZpZXcgIT09ICd5ZWFyJyB8fCB0aGlzLmN1cnJlbnRWaWV3ICE9PSAnbW9udGgnKSB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50VmlldyA9ICdtb250aCc7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAobmV3VmFsID09PSAnZGF0ZXMnKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFZpZXcgPSAnZGF0ZSc7XG4gICAgICB9IGVsc2UgaWYgKG5ld1ZhbCA9PT0gJ3llYXJzJykge1xuICAgICAgICB0aGlzLmN1cnJlbnRWaWV3ID0gJ3llYXInO1xuICAgICAgfSBlbHNlIGlmIChuZXdWYWwgPT09ICdtb250aHMnKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFZpZXcgPSAnbW9udGgnO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgcHJveHlUaW1lUGlja2VyRGF0YVByb3BlcnRpZXM6IGZ1bmN0aW9uIHByb3h5VGltZVBpY2tlckRhdGFQcm9wZXJ0aWVzKCkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgIHZhciBmb3JtYXQgPSBmdW5jdGlvbiBmb3JtYXQodGltZUZvcm1hdCkge1xuICAgICAgICBfdGhpczMuJHJlZnMudGltZXBpY2tlci5mb3JtYXQgPSB0aW1lRm9ybWF0O1xuICAgICAgfTtcbiAgICAgIHZhciB2YWx1ZSA9IGZ1bmN0aW9uIHZhbHVlKF92YWx1ZSkge1xuICAgICAgICBfdGhpczMuJHJlZnMudGltZXBpY2tlci52YWx1ZSA9IF92YWx1ZTtcbiAgICAgIH07XG4gICAgICB2YXIgZGF0ZSA9IGZ1bmN0aW9uIGRhdGUoX2RhdGUpIHtcbiAgICAgICAgX3RoaXMzLiRyZWZzLnRpbWVwaWNrZXIuZGF0ZSA9IF9kYXRlO1xuICAgICAgfTtcbiAgICAgIHZhciBzZWxlY3RhYmxlUmFuZ2UgPSBmdW5jdGlvbiBzZWxlY3RhYmxlUmFuZ2UoX3NlbGVjdGFibGVSYW5nZSkge1xuICAgICAgICBfdGhpczMuJHJlZnMudGltZXBpY2tlci5zZWxlY3RhYmxlUmFuZ2UgPSBfc2VsZWN0YWJsZVJhbmdlO1xuICAgICAgfTtcblxuICAgICAgdGhpcy4kd2F0Y2goJ3ZhbHVlJywgdmFsdWUpO1xuICAgICAgdGhpcy4kd2F0Y2goJ2RhdGUnLCBkYXRlKTtcbiAgICAgIHRoaXMuJHdhdGNoKCdzZWxlY3RhYmxlUmFuZ2UnLCBzZWxlY3RhYmxlUmFuZ2UpO1xuXG4gICAgICBmb3JtYXQodGhpcy50aW1lRm9ybWF0KTtcbiAgICAgIHZhbHVlKHRoaXMudmFsdWUpO1xuICAgICAgZGF0ZSh0aGlzLmRhdGUpO1xuICAgICAgc2VsZWN0YWJsZVJhbmdlKHRoaXMuc2VsZWN0YWJsZVJhbmdlKTtcbiAgICB9LFxuICAgIGhhbmRsZUNsZWFyOiBmdW5jdGlvbiBoYW5kbGVDbGVhcigpIHtcbiAgICAgIHRoaXMuZGF0ZSA9IHRoaXMuZ2V0RGVmYXVsdFZhbHVlKCk7XG4gICAgICB0aGlzLiRlbWl0KCdwaWNrJywgbnVsbCk7XG4gICAgfSxcbiAgICBlbWl0OiBmdW5jdGlvbiBlbWl0KHZhbHVlKSB7XG4gICAgICB2YXIgX3RoaXM0ID0gdGhpcztcblxuICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICAgIGFyZ3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgIHRoaXMuJGVtaXQuYXBwbHkodGhpcywgWydwaWNrJywgdmFsdWVdLmNvbmNhdChhcmdzKSk7XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHZhciBkYXRlcyA9IHZhbHVlLm1hcChmdW5jdGlvbiAoZGF0ZSkge1xuICAgICAgICAgIHJldHVybiBfdGhpczQuc2hvd1RpbWUgPyBPYmplY3QoZGF0ZV91dGlsX1tcImNsZWFyTWlsbGlzZWNvbmRzXCJdKShkYXRlKSA6IE9iamVjdChkYXRlX3V0aWxfW1wiY2xlYXJUaW1lXCJdKShkYXRlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuJGVtaXQuYXBwbHkodGhpcywgWydwaWNrJywgZGF0ZXNdLmNvbmNhdChhcmdzKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLiRlbWl0LmFwcGx5KHRoaXMsIFsncGljaycsIHRoaXMuc2hvd1RpbWUgPyBPYmplY3QoZGF0ZV91dGlsX1tcImNsZWFyTWlsbGlzZWNvbmRzXCJdKSh2YWx1ZSkgOiBPYmplY3QoZGF0ZV91dGlsX1tcImNsZWFyVGltZVwiXSkodmFsdWUpXS5jb25jYXQoYXJncykpO1xuICAgICAgfVxuICAgICAgdGhpcy51c2VySW5wdXREYXRlID0gbnVsbDtcbiAgICAgIHRoaXMudXNlcklucHV0VGltZSA9IG51bGw7XG4gICAgfSxcblxuXG4gICAgLy8gcmVzZXREYXRlKCkge1xuICAgIC8vICAgdGhpcy5kYXRlID0gbmV3IERhdGUodGhpcy5kYXRlKTtcbiAgICAvLyB9LFxuXG4gICAgc2hvd01vbnRoUGlja2VyOiBmdW5jdGlvbiBzaG93TW9udGhQaWNrZXIoKSB7XG4gICAgICB0aGlzLmN1cnJlbnRWaWV3ID0gJ21vbnRoJztcbiAgICB9LFxuICAgIHNob3dZZWFyUGlja2VyOiBmdW5jdGlvbiBzaG93WWVhclBpY2tlcigpIHtcbiAgICAgIHRoaXMuY3VycmVudFZpZXcgPSAneWVhcic7XG4gICAgfSxcblxuXG4gICAgLy8gWFhYOiDmsqHnlKjliLBcbiAgICAvLyBoYW5kbGVMYWJlbENsaWNrKCkge1xuICAgIC8vICAgaWYgKHRoaXMuY3VycmVudFZpZXcgPT09ICdkYXRlJykge1xuICAgIC8vICAgICB0aGlzLnNob3dNb250aFBpY2tlcigpO1xuICAgIC8vICAgfSBlbHNlIGlmICh0aGlzLmN1cnJlbnRWaWV3ID09PSAnbW9udGgnKSB7XG4gICAgLy8gICAgIHRoaXMuc2hvd1llYXJQaWNrZXIoKTtcbiAgICAvLyAgIH1cbiAgICAvLyB9LFxuXG4gICAgcHJldk1vbnRoOiBmdW5jdGlvbiBwcmV2TW9udGgoKSB7XG4gICAgICB0aGlzLmRhdGUgPSBPYmplY3QoZGF0ZV91dGlsX1tcInByZXZNb250aFwiXSkodGhpcy5kYXRlKTtcbiAgICB9LFxuICAgIG5leHRNb250aDogZnVuY3Rpb24gbmV4dE1vbnRoKCkge1xuICAgICAgdGhpcy5kYXRlID0gT2JqZWN0KGRhdGVfdXRpbF9bXCJuZXh0TW9udGhcIl0pKHRoaXMuZGF0ZSk7XG4gICAgfSxcbiAgICBwcmV2WWVhcjogZnVuY3Rpb24gcHJldlllYXIoKSB7XG4gICAgICBpZiAodGhpcy5jdXJyZW50VmlldyA9PT0gJ3llYXInKSB7XG4gICAgICAgIHRoaXMuZGF0ZSA9IE9iamVjdChkYXRlX3V0aWxfW1wicHJldlllYXJcIl0pKHRoaXMuZGF0ZSwgMTApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5kYXRlID0gT2JqZWN0KGRhdGVfdXRpbF9bXCJwcmV2WWVhclwiXSkodGhpcy5kYXRlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIG5leHRZZWFyOiBmdW5jdGlvbiBuZXh0WWVhcigpIHtcbiAgICAgIGlmICh0aGlzLmN1cnJlbnRWaWV3ID09PSAneWVhcicpIHtcbiAgICAgICAgdGhpcy5kYXRlID0gT2JqZWN0KGRhdGVfdXRpbF9bXCJuZXh0WWVhclwiXSkodGhpcy5kYXRlLCAxMCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRhdGUgPSBPYmplY3QoZGF0ZV91dGlsX1tcIm5leHRZZWFyXCJdKSh0aGlzLmRhdGUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgaGFuZGxlU2hvcnRjdXRDbGljazogZnVuY3Rpb24gaGFuZGxlU2hvcnRjdXRDbGljayhzaG9ydGN1dCkge1xuICAgICAgaWYgKHNob3J0Y3V0Lm9uQ2xpY2spIHtcbiAgICAgICAgc2hvcnRjdXQub25DbGljayh0aGlzKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGhhbmRsZVRpbWVQaWNrOiBmdW5jdGlvbiBoYW5kbGVUaW1lUGljayh2YWx1ZSwgdmlzaWJsZSwgZmlyc3QpIHtcbiAgICAgIGlmIChPYmplY3QoZGF0ZV91dGlsX1tcImlzRGF0ZVwiXSkodmFsdWUpKSB7XG4gICAgICAgIHZhciBuZXdEYXRlID0gdGhpcy52YWx1ZSA/IE9iamVjdChkYXRlX3V0aWxfW1wibW9kaWZ5VGltZVwiXSkodGhpcy52YWx1ZSwgdmFsdWUuZ2V0SG91cnMoKSwgdmFsdWUuZ2V0TWludXRlcygpLCB2YWx1ZS5nZXRTZWNvbmRzKCkpIDogT2JqZWN0KGRhdGVfdXRpbF9bXCJtb2RpZnlXaXRoVGltZVN0cmluZ1wiXSkodGhpcy5nZXREZWZhdWx0VmFsdWUoKSwgdGhpcy5kZWZhdWx0VGltZSk7XG4gICAgICAgIHRoaXMuZGF0ZSA9IG5ld0RhdGU7XG4gICAgICAgIHRoaXMuZW1pdCh0aGlzLmRhdGUsIHRydWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5lbWl0KHZhbHVlLCB0cnVlKTtcbiAgICAgIH1cbiAgICAgIGlmICghZmlyc3QpIHtcbiAgICAgICAgdGhpcy50aW1lUGlja2VyVmlzaWJsZSA9IHZpc2libGU7XG4gICAgICB9XG4gICAgfSxcbiAgICBoYW5kbGVUaW1lUGlja0Nsb3NlOiBmdW5jdGlvbiBoYW5kbGVUaW1lUGlja0Nsb3NlKCkge1xuICAgICAgdGhpcy50aW1lUGlja2VyVmlzaWJsZSA9IGZhbHNlO1xuICAgIH0sXG4gICAgaGFuZGxlTW9udGhQaWNrOiBmdW5jdGlvbiBoYW5kbGVNb250aFBpY2sobW9udGgpIHtcbiAgICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICdtb250aCcpIHtcbiAgICAgICAgdGhpcy5kYXRlID0gT2JqZWN0KGRhdGVfdXRpbF9bXCJtb2RpZnlEYXRlXCJdKSh0aGlzLmRhdGUsIHRoaXMueWVhciwgbW9udGgsIDEpO1xuICAgICAgICB0aGlzLmVtaXQodGhpcy5kYXRlKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlID09PSAnbW9udGhzJykge1xuICAgICAgICB0aGlzLmVtaXQobW9udGgsIHRydWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5kYXRlID0gT2JqZWN0KGRhdGVfdXRpbF9bXCJjaGFuZ2VZZWFyTW9udGhBbmRDbGFtcERhdGVcIl0pKHRoaXMuZGF0ZSwgdGhpcy55ZWFyLCBtb250aCk7XG4gICAgICAgIC8vIFRPRE86IHNob3VsZCBlbWl0IGludGVybWVkaWF0ZSB2YWx1ZSA/P1xuICAgICAgICAvLyB0aGlzLmVtaXQodGhpcy5kYXRlKTtcbiAgICAgICAgdGhpcy5jdXJyZW50VmlldyA9ICdkYXRlJztcbiAgICAgIH1cbiAgICB9LFxuICAgIGhhbmRsZURhdGVQaWNrOiBmdW5jdGlvbiBoYW5kbGVEYXRlUGljayh2YWx1ZSkge1xuICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ2RheScpIHtcbiAgICAgICAgdmFyIG5ld0RhdGUgPSB0aGlzLnZhbHVlID8gT2JqZWN0KGRhdGVfdXRpbF9bXCJtb2RpZnlEYXRlXCJdKSh0aGlzLnZhbHVlLCB2YWx1ZS5nZXRGdWxsWWVhcigpLCB2YWx1ZS5nZXRNb250aCgpLCB2YWx1ZS5nZXREYXRlKCkpIDogT2JqZWN0KGRhdGVfdXRpbF9bXCJtb2RpZnlXaXRoVGltZVN0cmluZ1wiXSkodmFsdWUsIHRoaXMuZGVmYXVsdFRpbWUpO1xuICAgICAgICAvLyBjaGFuZ2UgZGVmYXVsdCB0aW1lIHdoaWxlIG91dCBvZiBzZWxlY3RhYmxlUmFuZ2VcbiAgICAgICAgaWYgKCF0aGlzLmNoZWNrRGF0ZVdpdGhpblJhbmdlKG5ld0RhdGUpKSB7XG4gICAgICAgICAgbmV3RGF0ZSA9IE9iamVjdChkYXRlX3V0aWxfW1wibW9kaWZ5RGF0ZVwiXSkodGhpcy5zZWxlY3RhYmxlUmFuZ2VbMF1bMF0sIHZhbHVlLmdldEZ1bGxZZWFyKCksIHZhbHVlLmdldE1vbnRoKCksIHZhbHVlLmdldERhdGUoKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kYXRlID0gbmV3RGF0ZTtcbiAgICAgICAgdGhpcy5lbWl0KHRoaXMuZGF0ZSwgdGhpcy5zaG93VGltZSk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ3dlZWsnKSB7XG4gICAgICAgIHRoaXMuZW1pdCh2YWx1ZS5kYXRlKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlID09PSAnZGF0ZXMnKSB7XG4gICAgICAgIHRoaXMuZW1pdCh2YWx1ZSwgdHJ1ZSk7IC8vIHNldCBmYWxzZSB0byBrZWVwIHBhbmVsIG9wZW5cbiAgICAgIH1cbiAgICB9LFxuICAgIGhhbmRsZVllYXJQaWNrOiBmdW5jdGlvbiBoYW5kbGVZZWFyUGljayh5ZWFyKSB7XG4gICAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlID09PSAneWVhcicpIHtcbiAgICAgICAgdGhpcy5kYXRlID0gT2JqZWN0KGRhdGVfdXRpbF9bXCJtb2RpZnlEYXRlXCJdKSh0aGlzLmRhdGUsIHllYXIsIDAsIDEpO1xuICAgICAgICB0aGlzLmVtaXQodGhpcy5kYXRlKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlID09PSAneWVhcnMnKSB7XG4gICAgICAgIHRoaXMuZW1pdCh5ZWFyLCB0cnVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZGF0ZSA9IE9iamVjdChkYXRlX3V0aWxfW1wiY2hhbmdlWWVhck1vbnRoQW5kQ2xhbXBEYXRlXCJdKSh0aGlzLmRhdGUsIHllYXIsIHRoaXMubW9udGgpO1xuICAgICAgICAvLyBUT0RPOiBzaG91bGQgZW1pdCBpbnRlcm1lZGlhdGUgdmFsdWUgPz9cbiAgICAgICAgLy8gdGhpcy5lbWl0KHRoaXMuZGF0ZSwgdHJ1ZSk7XG4gICAgICAgIHRoaXMuY3VycmVudFZpZXcgPSAnbW9udGgnO1xuICAgICAgfVxuICAgIH0sXG4gICAgY2hhbmdlVG9Ob3c6IGZ1bmN0aW9uIGNoYW5nZVRvTm93KCkge1xuICAgICAgLy8gTk9URTogbm90IGEgcGVybWFuZW50IHNvbHV0aW9uXG4gICAgICAvLyAgICAgICBjb25zaWRlciBkaXNhYmxlIFwibm93XCIgYnV0dG9uIGluIHRoZSBmdXR1cmVcbiAgICAgIGlmICgoIXRoaXMuZGlzYWJsZWREYXRlIHx8ICF0aGlzLmRpc2FibGVkRGF0ZShuZXcgRGF0ZSgpKSkgJiYgdGhpcy5jaGVja0RhdGVXaXRoaW5SYW5nZShuZXcgRGF0ZSgpKSkge1xuICAgICAgICB0aGlzLmRhdGUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICB0aGlzLmVtaXQodGhpcy5kYXRlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGNvbmZpcm06IGZ1bmN0aW9uIGNvbmZpcm0oKSB7XG4gICAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlID09PSAnZGF0ZXMnIHx8IHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ21vbnRocycgfHwgdGhpcy5zZWxlY3Rpb25Nb2RlID09PSAneWVhcnMnKSB7XG4gICAgICAgIHRoaXMuZW1pdCh0aGlzLnZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHZhbHVlIHdlcmUgZW1pdHRlZCBpbiBoYW5kbGV7RGF0ZSxUaW1lfVBpY2ssIG5vdGhpbmcgdG8gdXBkYXRlIGhlcmVcbiAgICAgICAgLy8gZGVhbCB3aXRoIHRoZSBzY2VuYXJpbyB3aGVyZTogdXNlciBvcGVucyB0aGUgcGlja2VyLCB0aGVuIGNvbmZpcm0gd2l0aG91dCBkb2luZyBhbnl0aGluZ1xuICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLnZhbHVlID8gdGhpcy52YWx1ZSA6IE9iamVjdChkYXRlX3V0aWxfW1wibW9kaWZ5V2l0aFRpbWVTdHJpbmdcIl0pKHRoaXMuZ2V0RGVmYXVsdFZhbHVlKCksIHRoaXMuZGVmYXVsdFRpbWUpO1xuICAgICAgICB0aGlzLmRhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7IC8vIHJlZnJlc2ggZGF0ZVxuICAgICAgICB0aGlzLmVtaXQodmFsdWUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgcmVzZXRWaWV3OiBmdW5jdGlvbiByZXNldFZpZXcoKSB7XG4gICAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlID09PSAnbW9udGgnIHx8IHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ21vbnRocycpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VmlldyA9ICdtb250aCc7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ3llYXInIHx8IHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ3llYXJzJykge1xuICAgICAgICB0aGlzLmN1cnJlbnRWaWV3ID0gJ3llYXInO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VmlldyA9ICdkYXRlJztcbiAgICAgIH1cbiAgICB9LFxuICAgIGhhbmRsZUVudGVyOiBmdW5jdGlvbiBoYW5kbGVFbnRlcigpIHtcbiAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuaGFuZGxlS2V5ZG93bik7XG4gICAgfSxcbiAgICBoYW5kbGVMZWF2ZTogZnVuY3Rpb24gaGFuZGxlTGVhdmUoKSB7XG4gICAgICB0aGlzLiRlbWl0KCdkb2Rlc3Ryb3knKTtcbiAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuaGFuZGxlS2V5ZG93bik7XG4gICAgfSxcbiAgICBoYW5kbGVLZXlkb3duOiBmdW5jdGlvbiBoYW5kbGVLZXlkb3duKGV2ZW50KSB7XG4gICAgICB2YXIga2V5Q29kZSA9IGV2ZW50LmtleUNvZGU7XG4gICAgICB2YXIgbGlzdCA9IFszOCwgNDAsIDM3LCAzOV07XG4gICAgICBpZiAodGhpcy52aXNpYmxlICYmICF0aGlzLnRpbWVQaWNrZXJWaXNpYmxlKSB7XG4gICAgICAgIGlmIChsaXN0LmluZGV4T2Yoa2V5Q29kZSkgIT09IC0xKSB7XG4gICAgICAgICAgdGhpcy5oYW5kbGVLZXlDb250cm9sKGtleUNvZGUpO1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleUNvZGUgPT09IDEzICYmIHRoaXMudXNlcklucHV0RGF0ZSA9PT0gbnVsbCAmJiB0aGlzLnVzZXJJbnB1dFRpbWUgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBFbnRlclxuICAgICAgICAgIHRoaXMuZW1pdCh0aGlzLmRhdGUsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgaGFuZGxlS2V5Q29udHJvbDogZnVuY3Rpb24gaGFuZGxlS2V5Q29udHJvbChrZXlDb2RlKSB7XG4gICAgICB2YXIgbWFwcGluZyA9IHtcbiAgICAgICAgJ3llYXInOiB7XG4gICAgICAgICAgMzg6IC00LCA0MDogNCwgMzc6IC0xLCAzOTogMSwgb2Zmc2V0OiBmdW5jdGlvbiBvZmZzZXQoZGF0ZSwgc3RlcCkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGUuc2V0RnVsbFllYXIoZGF0ZS5nZXRGdWxsWWVhcigpICsgc3RlcCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAnbW9udGgnOiB7XG4gICAgICAgICAgMzg6IC00LCA0MDogNCwgMzc6IC0xLCAzOTogMSwgb2Zmc2V0OiBmdW5jdGlvbiBvZmZzZXQoZGF0ZSwgc3RlcCkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGUuc2V0TW9udGgoZGF0ZS5nZXRNb250aCgpICsgc3RlcCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAnd2Vlayc6IHtcbiAgICAgICAgICAzODogLTEsIDQwOiAxLCAzNzogLTEsIDM5OiAxLCBvZmZzZXQ6IGZ1bmN0aW9uIG9mZnNldChkYXRlLCBzdGVwKSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgc3RlcCAqIDcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgJ2RheSc6IHtcbiAgICAgICAgICAzODogLTcsIDQwOiA3LCAzNzogLTEsIDM5OiAxLCBvZmZzZXQ6IGZ1bmN0aW9uIG9mZnNldChkYXRlLCBzdGVwKSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgc3RlcCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgdmFyIG1vZGUgPSB0aGlzLnNlbGVjdGlvbk1vZGU7XG4gICAgICB2YXIgeWVhciA9IDMuMTUzNmUxMDtcbiAgICAgIHZhciBub3cgPSB0aGlzLmRhdGUuZ2V0VGltZSgpO1xuICAgICAgdmFyIG5ld0RhdGUgPSBuZXcgRGF0ZSh0aGlzLmRhdGUuZ2V0VGltZSgpKTtcbiAgICAgIHdoaWxlIChNYXRoLmFicyhub3cgLSBuZXdEYXRlLmdldFRpbWUoKSkgPD0geWVhcikge1xuICAgICAgICB2YXIgbWFwID0gbWFwcGluZ1ttb2RlXTtcbiAgICAgICAgbWFwLm9mZnNldChuZXdEYXRlLCBtYXBba2V5Q29kZV0pO1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZGlzYWJsZWREYXRlID09PSAnZnVuY3Rpb24nICYmIHRoaXMuZGlzYWJsZWREYXRlKG5ld0RhdGUpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kYXRlID0gbmV3RGF0ZTtcbiAgICAgICAgdGhpcy4kZW1pdCgncGljaycsIG5ld0RhdGUsIHRydWUpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9LFxuICAgIGhhbmRsZVZpc2libGVUaW1lQ2hhbmdlOiBmdW5jdGlvbiBoYW5kbGVWaXNpYmxlVGltZUNoYW5nZSh2YWx1ZSkge1xuICAgICAgdmFyIHRpbWUgPSBPYmplY3QoZGF0ZV91dGlsX1tcInBhcnNlRGF0ZVwiXSkodmFsdWUsIHRoaXMudGltZUZvcm1hdCk7XG4gICAgICBpZiAodGltZSAmJiB0aGlzLmNoZWNrRGF0ZVdpdGhpblJhbmdlKHRpbWUpKSB7XG4gICAgICAgIHRoaXMuZGF0ZSA9IE9iamVjdChkYXRlX3V0aWxfW1wibW9kaWZ5RGF0ZVwiXSkodGltZSwgdGhpcy55ZWFyLCB0aGlzLm1vbnRoLCB0aGlzLm1vbnRoRGF0ZSk7XG4gICAgICAgIHRoaXMudXNlcklucHV0VGltZSA9IG51bGw7XG4gICAgICAgIHRoaXMuJHJlZnMudGltZXBpY2tlci52YWx1ZSA9IHRoaXMuZGF0ZTtcbiAgICAgICAgdGhpcy50aW1lUGlja2VyVmlzaWJsZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmVtaXQodGhpcy5kYXRlLCB0cnVlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGhhbmRsZVZpc2libGVEYXRlQ2hhbmdlOiBmdW5jdGlvbiBoYW5kbGVWaXNpYmxlRGF0ZUNoYW5nZSh2YWx1ZSkge1xuICAgICAgdmFyIGRhdGUgPSBPYmplY3QoZGF0ZV91dGlsX1tcInBhcnNlRGF0ZVwiXSkodmFsdWUsIHRoaXMuZGF0ZUZvcm1hdCk7XG4gICAgICBpZiAoZGF0ZSkge1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZGlzYWJsZWREYXRlID09PSAnZnVuY3Rpb24nICYmIHRoaXMuZGlzYWJsZWREYXRlKGRhdGUpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGF0ZSA9IE9iamVjdChkYXRlX3V0aWxfW1wibW9kaWZ5VGltZVwiXSkoZGF0ZSwgdGhpcy5kYXRlLmdldEhvdXJzKCksIHRoaXMuZGF0ZS5nZXRNaW51dGVzKCksIHRoaXMuZGF0ZS5nZXRTZWNvbmRzKCkpO1xuICAgICAgICB0aGlzLnVzZXJJbnB1dERhdGUgPSBudWxsO1xuICAgICAgICB0aGlzLnJlc2V0VmlldygpO1xuICAgICAgICB0aGlzLmVtaXQodGhpcy5kYXRlLCB0cnVlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGlzVmFsaWRWYWx1ZTogZnVuY3Rpb24gaXNWYWxpZFZhbHVlKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWUgJiYgIWlzTmFOKHZhbHVlKSAmJiAodHlwZW9mIHRoaXMuZGlzYWJsZWREYXRlID09PSAnZnVuY3Rpb24nID8gIXRoaXMuZGlzYWJsZWREYXRlKHZhbHVlKSA6IHRydWUpICYmIHRoaXMuY2hlY2tEYXRlV2l0aGluUmFuZ2UodmFsdWUpO1xuICAgIH0sXG4gICAgZ2V0RGVmYXVsdFZhbHVlOiBmdW5jdGlvbiBnZXREZWZhdWx0VmFsdWUoKSB7XG4gICAgICAvLyBpZiBkZWZhdWx0LXZhbHVlIGlzIHNldCwgcmV0dXJuIGl0XG4gICAgICAvLyBvdGhlcndpc2UsIHJldHVybiBub3cgKHRoZSBtb21lbnQgdGhpcyBtZXRob2QgZ2V0cyBjYWxsZWQpXG4gICAgICByZXR1cm4gdGhpcy5kZWZhdWx0VmFsdWUgPyBuZXcgRGF0ZSh0aGlzLmRlZmF1bHRWYWx1ZSkgOiBuZXcgRGF0ZSgpO1xuICAgIH0sXG4gICAgY2hlY2tEYXRlV2l0aGluUmFuZ2U6IGZ1bmN0aW9uIGNoZWNrRGF0ZVdpdGhpblJhbmdlKGRhdGUpIHtcbiAgICAgIHJldHVybiB0aGlzLnNlbGVjdGFibGVSYW5nZS5sZW5ndGggPiAwID8gT2JqZWN0KGRhdGVfdXRpbF9bXCJ0aW1lV2l0aGluUmFuZ2VcIl0pKGRhdGUsIHRoaXMuc2VsZWN0YWJsZVJhbmdlLCB0aGlzLmZvcm1hdCB8fCAnSEg6bW06c3MnKSA6IHRydWU7XG4gICAgfVxuICB9LFxuXG4gIGNvbXBvbmVudHM6IHtcbiAgICBUaW1lUGlja2VyOiBwYW5lbF90aW1lLCBZZWFyVGFibGU6IHllYXJfdGFibGUsIE1vbnRoVGFibGU6IG1vbnRoX3RhYmxlLCBEYXRlVGFibGU6IGRhdGVfdGFibGUsIEVsSW5wdXQ6IGlucHV0X2RlZmF1bHQuYSwgRWxCdXR0b246IGJ1dHRvbl9kZWZhdWx0LmFcbiAgfSxcblxuICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBwb3BwZXJDbGFzczogJycsXG4gICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgdmFsdWU6ICcnLFxuICAgICAgZGVmYXVsdFZhbHVlOiBudWxsLCAvLyB1c2UgZ2V0RGVmYXVsdFZhbHVlKCkgZm9yIHRpbWUgY29tcHV0YXRpb25cbiAgICAgIGRlZmF1bHRUaW1lOiBudWxsLFxuICAgICAgc2hvd1RpbWU6IGZhbHNlLFxuICAgICAgc2VsZWN0aW9uTW9kZTogJ2RheScsXG4gICAgICBzaG9ydGN1dHM6ICcnLFxuICAgICAgdmlzaWJsZTogZmFsc2UsXG4gICAgICBjdXJyZW50VmlldzogJ2RhdGUnLFxuICAgICAgZGlzYWJsZWREYXRlOiAnJyxcbiAgICAgIGNlbGxDbGFzc05hbWU6ICcnLFxuICAgICAgc2VsZWN0YWJsZVJhbmdlOiBbXSxcbiAgICAgIGZpcnN0RGF5T2ZXZWVrOiA3LFxuICAgICAgc2hvd1dlZWtOdW1iZXI6IGZhbHNlLFxuICAgICAgdGltZVBpY2tlclZpc2libGU6IGZhbHNlLFxuICAgICAgZm9ybWF0OiAnJyxcbiAgICAgIGFycm93Q29udHJvbDogZmFsc2UsXG4gICAgICB1c2VySW5wdXREYXRlOiBudWxsLFxuICAgICAgdXNlcklucHV0VGltZTogbnVsbFxuICAgIH07XG4gIH0sXG5cblxuICBjb21wdXRlZDoge1xuICAgIHllYXI6IGZ1bmN0aW9uIHllYXIoKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgfSxcbiAgICBtb250aDogZnVuY3Rpb24gbW9udGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRlLmdldE1vbnRoKCk7XG4gICAgfSxcbiAgICB3ZWVrOiBmdW5jdGlvbiB3ZWVrKCkge1xuICAgICAgcmV0dXJuIE9iamVjdChkYXRlX3V0aWxfW1wiZ2V0V2Vla051bWJlclwiXSkodGhpcy5kYXRlKTtcbiAgICB9LFxuICAgIG1vbnRoRGF0ZTogZnVuY3Rpb24gbW9udGhEYXRlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0ZS5nZXREYXRlKCk7XG4gICAgfSxcbiAgICBmb290ZXJWaXNpYmxlOiBmdW5jdGlvbiBmb290ZXJWaXNpYmxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2hvd1RpbWUgfHwgdGhpcy5zZWxlY3Rpb25Nb2RlID09PSAnZGF0ZXMnIHx8IHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ21vbnRocycgfHwgdGhpcy5zZWxlY3Rpb25Nb2RlID09PSAneWVhcnMnO1xuICAgIH0sXG4gICAgdmlzaWJsZVRpbWU6IGZ1bmN0aW9uIHZpc2libGVUaW1lKCkge1xuICAgICAgaWYgKHRoaXMudXNlcklucHV0VGltZSAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdGhpcy51c2VySW5wdXRUaW1lO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdChkYXRlX3V0aWxfW1wiZm9ybWF0RGF0ZVwiXSkodGhpcy52YWx1ZSB8fCB0aGlzLmRlZmF1bHRWYWx1ZSwgdGhpcy50aW1lRm9ybWF0KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHZpc2libGVEYXRlOiBmdW5jdGlvbiB2aXNpYmxlRGF0ZSgpIHtcbiAgICAgIGlmICh0aGlzLnVzZXJJbnB1dERhdGUgIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudXNlcklucHV0RGF0ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBPYmplY3QoZGF0ZV91dGlsX1tcImZvcm1hdERhdGVcIl0pKHRoaXMudmFsdWUgfHwgdGhpcy5kZWZhdWx0VmFsdWUsIHRoaXMuZGF0ZUZvcm1hdCk7XG4gICAgICB9XG4gICAgfSxcbiAgICB5ZWFyTGFiZWw6IGZ1bmN0aW9uIHllYXJMYWJlbCgpIHtcbiAgICAgIHZhciB5ZWFyVHJhbnNsYXRpb24gPSB0aGlzLnQoJ2VsLmRhdGVwaWNrZXIueWVhcicpO1xuICAgICAgaWYgKHRoaXMuY3VycmVudFZpZXcgPT09ICd5ZWFyJykge1xuICAgICAgICB2YXIgc3RhcnRZZWFyID0gTWF0aC5mbG9vcih0aGlzLnllYXIgLyAxMCkgKiAxMDtcbiAgICAgICAgaWYgKHllYXJUcmFuc2xhdGlvbikge1xuICAgICAgICAgIHJldHVybiBzdGFydFllYXIgKyAnICcgKyB5ZWFyVHJhbnNsYXRpb24gKyAnIC0gJyArIChzdGFydFllYXIgKyA5KSArICcgJyArIHllYXJUcmFuc2xhdGlvbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RhcnRZZWFyICsgJyAtICcgKyAoc3RhcnRZZWFyICsgOSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy55ZWFyICsgJyAnICsgeWVhclRyYW5zbGF0aW9uO1xuICAgIH0sXG4gICAgdGltZUZvcm1hdDogZnVuY3Rpb24gdGltZUZvcm1hdCgpIHtcbiAgICAgIGlmICh0aGlzLmZvcm1hdCkge1xuICAgICAgICByZXR1cm4gT2JqZWN0KGRhdGVfdXRpbF9bXCJleHRyYWN0VGltZUZvcm1hdFwiXSkodGhpcy5mb3JtYXQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuICdISDptbTpzcyc7XG4gICAgICB9XG4gICAgfSxcbiAgICBkYXRlRm9ybWF0OiBmdW5jdGlvbiBkYXRlRm9ybWF0KCkge1xuICAgICAgaWYgKHRoaXMuZm9ybWF0KSB7XG4gICAgICAgIHJldHVybiBPYmplY3QoZGF0ZV91dGlsX1tcImV4dHJhY3REYXRlRm9ybWF0XCJdKSh0aGlzLmZvcm1hdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gJ3l5eXktTU0tZGQnO1xuICAgICAgfVxuICAgIH1cbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9wYW5lbC9kYXRlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYW5lbF9kYXRldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKGRhdGV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZGF0ZS1waWNrZXIvc3JjL3BhbmVsL2RhdGUudnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgZGF0ZV9jb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIHBhbmVsX2RhdGV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIGRhdGV2dWVfdHlwZV90ZW1wbGF0ZV9pZF8yNDQwZDRlYV9yZW5kZXIsXG4gIGRhdGV2dWVfdHlwZV90ZW1wbGF0ZV9pZF8yNDQwZDRlYV9zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGRhdGVfYXBpOyB9XG5kYXRlX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvZGF0ZS1waWNrZXIvc3JjL3BhbmVsL2RhdGUudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhbmVsX2RhdGUgPSAoZGF0ZV9jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9wYW5lbC9kYXRlLXJhbmdlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yNjUyODQ5YSZcbnZhciBkYXRlX3JhbmdldnVlX3R5cGVfdGVtcGxhdGVfaWRfMjY1Mjg0OWFfcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwidHJhbnNpdGlvblwiLFxuICAgIHtcbiAgICAgIGF0dHJzOiB7IG5hbWU6IFwiZWwtem9vbS1pbi10b3BcIiB9LFxuICAgICAgb246IHtcbiAgICAgICAgXCJhZnRlci1sZWF2ZVwiOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICBfdm0uJGVtaXQoXCJkb2Rlc3Ryb3lcIilcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgW1xuICAgICAgX2MoXG4gICAgICAgIFwiZGl2XCIsXG4gICAgICAgIHtcbiAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgICB2YWx1ZTogX3ZtLnZpc2libGUsXG4gICAgICAgICAgICAgIGV4cHJlc3Npb246IFwidmlzaWJsZVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXSxcbiAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1waWNrZXItcGFuZWwgZWwtZGF0ZS1yYW5nZS1waWNrZXIgZWwtcG9wcGVyXCIsXG4gICAgICAgICAgY2xhc3M6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgXCJoYXMtc2lkZWJhclwiOiBfdm0uJHNsb3RzLnNpZGViYXIgfHwgX3ZtLnNob3J0Y3V0cyxcbiAgICAgICAgICAgICAgXCJoYXMtdGltZVwiOiBfdm0uc2hvd1RpbWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfdm0ucG9wcGVyQ2xhc3NcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFtcbiAgICAgICAgICBfYyhcbiAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiBcImVsLXBpY2tlci1wYW5lbF9fYm9keS13cmFwcGVyXCIgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX3ZtLl90KFwic2lkZWJhclwiKSxcbiAgICAgICAgICAgICAgX3ZtLnNob3J0Y3V0c1xuICAgICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwiZWwtcGlja2VyLXBhbmVsX19zaWRlYmFyXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgX3ZtLl9sKF92bS5zaG9ydGN1dHMsIGZ1bmN0aW9uKHNob3J0Y3V0LCBrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtcGlja2VyLXBhbmVsX19zaG9ydGN1dFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyB0eXBlOiBcImJ1dHRvblwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLmhhbmRsZVNob3J0Y3V0Q2xpY2soc2hvcnRjdXQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgW192bS5fdihfdm0uX3Moc2hvcnRjdXQudGV4dCkpXVxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLXBpY2tlci1wYW5lbF9fYm9keVwiIH0sIFtcbiAgICAgICAgICAgICAgICBfdm0uc2hvd1RpbWVcbiAgICAgICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiBcImVsLWRhdGUtcmFuZ2UtcGlja2VyX190aW1lLWhlYWRlclwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiBcImVsLWRhdGUtcmFuZ2UtcGlja2VyX19lZGl0b3JzLXdyYXBcIiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlbC1kYXRlLXJhbmdlLXBpY2tlcl9fdGltZS1waWNrZXItd3JhcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcImVsLWlucHV0XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWY6IFwibWluSW5wdXRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1kYXRlLXJhbmdlLXBpY2tlcl9fZWRpdG9yXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU6IFwic21hbGxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBfdm0ucmFuZ2VTdGF0ZS5zZWxlY3RpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogX3ZtLnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZWwuZGF0ZXBpY2tlci5zdGFydERhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0ubWluVmlzaWJsZURhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dDogZnVuY3Rpb24odmFsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0uaGFuZGxlRGF0ZUlucHV0KHZhbCwgXCJtaW5cIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2U6IGZ1bmN0aW9uKHZhbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLmhhbmRsZURhdGVDaGFuZ2UodmFsLCBcIm1pblwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJjbGlja291dHNpZGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1jbGlja291dHNpZGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0uaGFuZGxlTWluVGltZUNsb3NlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJoYW5kbGVNaW5UaW1lQ2xvc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlbC1kYXRlLXJhbmdlLXBpY2tlcl9fdGltZS1waWNrZXItd3JhcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcImVsLWlucHV0XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1kYXRlLXJhbmdlLXBpY2tlcl9fZWRpdG9yXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU6IFwic21hbGxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBfdm0ucmFuZ2VTdGF0ZS5zZWxlY3RpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogX3ZtLnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZWwuZGF0ZXBpY2tlci5zdGFydFRpbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0ubWluVmlzaWJsZVRpbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2N1czogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5taW5UaW1lUGlja2VyVmlzaWJsZSA9IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dDogZnVuY3Rpb24odmFsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0uaGFuZGxlVGltZUlucHV0KHZhbCwgXCJtaW5cIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2U6IGZ1bmN0aW9uKHZhbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLmhhbmRsZVRpbWVDaGFuZ2UodmFsLCBcIm1pblwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFwidGltZS1waWNrZXJcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZjogXCJtaW5UaW1lUGlja2VyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidGltZS1hcnJvdy1jb250cm9sXCI6IF92bS5hcnJvd0NvbnRyb2wsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmxlOiBfdm0ubWluVGltZVBpY2tlclZpc2libGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaWNrOiBfdm0uaGFuZGxlTWluVGltZVBpY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3VudGVkOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLiRyZWZzLm1pblRpbWVQaWNrZXIuZm9ybWF0ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0udGltZUZvcm1hdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJzcGFuXCIsIHsgc3RhdGljQ2xhc3M6IFwiZWwtaWNvbi1hcnJvdy1yaWdodFwiIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImVsLWRhdGUtcmFuZ2UtcGlja2VyX19lZGl0b3JzLXdyYXAgaXMtcmlnaHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlbC1kYXRlLXJhbmdlLXBpY2tlcl9fdGltZS1waWNrZXItd3JhcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcImVsLWlucHV0XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1kYXRlLXJhbmdlLXBpY2tlcl9fZWRpdG9yXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU6IFwic21hbGxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBfdm0ucmFuZ2VTdGF0ZS5zZWxlY3RpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogX3ZtLnQoXCJlbC5kYXRlcGlja2VyLmVuZERhdGVcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLm1heFZpc2libGVEYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZG9ubHk6ICFfdm0ubWluRGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0OiBmdW5jdGlvbih2YWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS5oYW5kbGVEYXRlSW5wdXQodmFsLCBcIm1heFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZTogZnVuY3Rpb24odmFsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0uaGFuZGxlRGF0ZUNoYW5nZSh2YWwsIFwibWF4XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcImNsaWNrb3V0c2lkZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LWNsaWNrb3V0c2lkZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IF92bS5oYW5kbGVNYXhUaW1lQ2xvc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcImhhbmRsZU1heFRpbWVDbG9zZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImVsLWRhdGUtcmFuZ2UtcGlja2VyX190aW1lLXBpY2tlci13cmFwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFwiZWwtaW5wdXRcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWRhdGUtcmFuZ2UtcGlja2VyX19lZGl0b3JcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZTogXCJzbWFsbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IF92bS5yYW5nZVN0YXRlLnNlbGVjdGluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBfdm0udChcImVsLmRhdGVwaWNrZXIuZW5kVGltZVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0ubWF4VmlzaWJsZVRpbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkb25seTogIV92bS5taW5EYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9jdXM6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0ubWluRGF0ZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfdm0ubWF4VGltZVBpY2tlclZpc2libGUgPSB0cnVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0OiBmdW5jdGlvbih2YWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS5oYW5kbGVUaW1lSW5wdXQodmFsLCBcIm1heFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZTogZnVuY3Rpb24odmFsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0uaGFuZGxlVGltZUNoYW5nZSh2YWwsIFwibWF4XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJ0aW1lLXBpY2tlclwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmOiBcIm1heFRpbWVQaWNrZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0aW1lLWFycm93LWNvbnRyb2xcIjogX3ZtLmFycm93Q29udHJvbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpc2libGU6IF92bS5tYXhUaW1lUGlja2VyVmlzaWJsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpY2s6IF92bS5oYW5kbGVNYXhUaW1lUGljayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdW50ZWQ6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uJHJlZnMubWF4VGltZVBpY2tlci5mb3JtYXQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS50aW1lRm9ybWF0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczpcbiAgICAgICAgICAgICAgICAgICAgICBcImVsLXBpY2tlci1wYW5lbF9fY29udGVudCBlbC1kYXRlLXJhbmdlLXBpY2tlcl9fY29udGVudCBpcy1sZWZ0XCJcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiZWwtZGF0ZS1yYW5nZS1waWNrZXJfX2hlYWRlclwiIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICBfYyhcImJ1dHRvblwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlbC1waWNrZXItcGFuZWxfX2ljb24tYnRuIGVsLWljb24tZC1hcnJvdy1sZWZ0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyB0eXBlOiBcImJ1dHRvblwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBvbjogeyBjbGljazogX3ZtLmxlZnRQcmV2WWVhciB9XG4gICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgX2MoXCJidXR0b25cIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiZWwtcGlja2VyLXBhbmVsX19pY29uLWJ0biBlbC1pY29uLWFycm93LWxlZnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHR5cGU6IFwiYnV0dG9uXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0ubGVmdFByZXZNb250aCB9XG4gICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgX3ZtLnVubGlua1BhbmVsc1xuICAgICAgICAgICAgICAgICAgICAgICAgPyBfYyhcImJ1dHRvblwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImVsLXBpY2tlci1wYW5lbF9faWNvbi1idG4gZWwtaWNvbi1kLWFycm93LXJpZ2h0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IHsgXCJpcy1kaXNhYmxlZFwiOiAhX3ZtLmVuYWJsZVllYXJBcnJvdyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6ICFfdm0uZW5hYmxlWWVhckFycm93XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjogeyBjbGljazogX3ZtLmxlZnROZXh0WWVhciB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICAgICAgICAgIF92bS51bmxpbmtQYW5lbHNcbiAgICAgICAgICAgICAgICAgICAgICAgID8gX2MoXCJidXR0b25cIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlbC1waWNrZXItcGFuZWxfX2ljb24tYnRuIGVsLWljb24tYXJyb3ctcmlnaHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogeyBcImlzLWRpc2FibGVkXCI6ICFfdm0uZW5hYmxlTW9udGhBcnJvdyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6ICFfdm0uZW5hYmxlTW9udGhBcnJvd1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsgY2xpY2s6IF92bS5sZWZ0TmV4dE1vbnRoIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgICAgICAgICAgX2MoXCJkaXZcIiwgW192bS5fdihfdm0uX3MoX3ZtLmxlZnRMYWJlbCkpXSlcbiAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgIF9jKFwiZGF0ZS10YWJsZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwic2VsZWN0aW9uLW1vZGVcIjogXCJyYW5nZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZTogX3ZtLmxlZnREYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkZWZhdWx0LXZhbHVlXCI6IF92bS5kZWZhdWx0VmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm1pbi1kYXRlXCI6IF92bS5taW5EYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJtYXgtZGF0ZVwiOiBfdm0ubWF4RGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwicmFuZ2Utc3RhdGVcIjogX3ZtLnJhbmdlU3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRpc2FibGVkLWRhdGVcIjogX3ZtLmRpc2FibGVkRGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiY2VsbC1jbGFzcy1uYW1lXCI6IF92bS5jZWxsQ2xhc3NOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJmaXJzdC1kYXktb2Ytd2Vla1wiOiBfdm0uZmlyc3REYXlPZldlZWtcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VyYW5nZTogX3ZtLmhhbmRsZUNoYW5nZVJhbmdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGljazogX3ZtLmhhbmRsZVJhbmdlUGlja1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOlxuICAgICAgICAgICAgICAgICAgICAgIFwiZWwtcGlja2VyLXBhbmVsX19jb250ZW50IGVsLWRhdGUtcmFuZ2UtcGlja2VyX19jb250ZW50IGlzLXJpZ2h0XCJcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiZWwtZGF0ZS1yYW5nZS1waWNrZXJfX2hlYWRlclwiIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICBfdm0udW5saW5rUGFuZWxzXG4gICAgICAgICAgICAgICAgICAgICAgICA/IF9jKFwiYnV0dG9uXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZWwtcGlja2VyLXBhbmVsX19pY29uLWJ0biBlbC1pY29uLWQtYXJyb3ctbGVmdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiB7IFwiaXMtZGlzYWJsZWRcIjogIV92bS5lbmFibGVZZWFyQXJyb3cgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJidXR0b25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiAhX3ZtLmVuYWJsZVllYXJBcnJvd1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsgY2xpY2s6IF92bS5yaWdodFByZXZZZWFyIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgICAgICAgICAgX3ZtLnVubGlua1BhbmVsc1xuICAgICAgICAgICAgICAgICAgICAgICAgPyBfYyhcImJ1dHRvblwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImVsLXBpY2tlci1wYW5lbF9faWNvbi1idG4gZWwtaWNvbi1hcnJvdy1sZWZ0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IHsgXCJpcy1kaXNhYmxlZFwiOiAhX3ZtLmVuYWJsZU1vbnRoQXJyb3cgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJidXR0b25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiAhX3ZtLmVuYWJsZU1vbnRoQXJyb3dcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0ucmlnaHRQcmV2TW9udGggfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgICAgICAgICBfYyhcImJ1dHRvblwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlbC1waWNrZXItcGFuZWxfX2ljb24tYnRuIGVsLWljb24tZC1hcnJvdy1yaWdodFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgdHlwZTogXCJidXR0b25cIiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgb246IHsgY2xpY2s6IF92bS5yaWdodE5leHRZZWFyIH1cbiAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICBfYyhcImJ1dHRvblwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlbC1waWNrZXItcGFuZWxfX2ljb24tYnRuIGVsLWljb24tYXJyb3ctcmlnaHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHR5cGU6IFwiYnV0dG9uXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0ucmlnaHROZXh0TW9udGggfVxuICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgIF9jKFwiZGl2XCIsIFtfdm0uX3YoX3ZtLl9zKF92bS5yaWdodExhYmVsKSldKVxuICAgICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgICAgX2MoXCJkYXRlLXRhYmxlXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJzZWxlY3Rpb24tbW9kZVwiOiBcInJhbmdlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRlOiBfdm0ucmlnaHREYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkZWZhdWx0LXZhbHVlXCI6IF92bS5kZWZhdWx0VmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm1pbi1kYXRlXCI6IF92bS5taW5EYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJtYXgtZGF0ZVwiOiBfdm0ubWF4RGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwicmFuZ2Utc3RhdGVcIjogX3ZtLnJhbmdlU3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRpc2FibGVkLWRhdGVcIjogX3ZtLmRpc2FibGVkRGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiY2VsbC1jbGFzcy1uYW1lXCI6IF92bS5jZWxsQ2xhc3NOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJmaXJzdC1kYXktb2Ytd2Vla1wiOiBfdm0uZmlyc3REYXlPZldlZWtcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VyYW5nZTogX3ZtLmhhbmRsZUNoYW5nZVJhbmdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGljazogX3ZtLmhhbmRsZVJhbmdlUGlja1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIDJcbiAgICAgICAgICApLFxuICAgICAgICAgIF92bS5zaG93VGltZVxuICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwiZWwtcGlja2VyLXBhbmVsX19mb290ZXJcIiB9LFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICBcImVsLWJ1dHRvblwiLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtcGlja2VyLXBhbmVsX19saW5rLWJ0blwiLFxuICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHNpemU6IFwibWluaVwiLCB0eXBlOiBcInRleHRcIiB9LFxuICAgICAgICAgICAgICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0uaGFuZGxlQ2xlYXIgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl9zKF92bS50KFwiZWwuZGF0ZXBpY2tlci5jbGVhclwiKSkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgIFwiZWwtYnV0dG9uXCIsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1waWNrZXItcGFuZWxfX2xpbmstYnRuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWluOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZTogXCJtaW5pXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogX3ZtLmJ0bkRpc2FibGVkXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uaGFuZGxlQ29uZmlybShmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3MoX3ZtLnQoXCJlbC5kYXRlcGlja2VyLmNvbmZpcm1cIikpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgIF1cbiAgICAgIClcbiAgICBdXG4gIClcbn1cbnZhciBkYXRlX3JhbmdldnVlX3R5cGVfdGVtcGxhdGVfaWRfMjY1Mjg0OWFfc3RhdGljUmVuZGVyRm5zID0gW11cbmRhdGVfcmFuZ2V2dWVfdHlwZV90ZW1wbGF0ZV9pZF8yNjUyODQ5YV9yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9wYW5lbC9kYXRlLXJhbmdlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yNjUyODQ5YSZcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvZGF0ZS1waWNrZXIvc3JjL3BhbmVsL2RhdGUtcmFuZ2UudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5cblxuXG5cblxuXG5cblxudmFyIGRhdGVfcmFuZ2V2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19jYWxjRGVmYXVsdFZhbHVlID0gZnVuY3Rpb24gY2FsY0RlZmF1bHRWYWx1ZShkZWZhdWx0VmFsdWUpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoZGVmYXVsdFZhbHVlKSkge1xuICAgIHJldHVybiBbbmV3IERhdGUoZGVmYXVsdFZhbHVlWzBdKSwgbmV3IERhdGUoZGVmYXVsdFZhbHVlWzFdKV07XG4gIH0gZWxzZSBpZiAoZGVmYXVsdFZhbHVlKSB7XG4gICAgcmV0dXJuIFtuZXcgRGF0ZShkZWZhdWx0VmFsdWUpLCBPYmplY3QoZGF0ZV91dGlsX1tcIm5leHREYXRlXCJdKShuZXcgRGF0ZShkZWZhdWx0VmFsdWUpLCAxKV07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIFtuZXcgRGF0ZSgpLCBPYmplY3QoZGF0ZV91dGlsX1tcIm5leHREYXRlXCJdKShuZXcgRGF0ZSgpLCAxKV07XG4gIH1cbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGRhdGVfcmFuZ2V2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBtaXhpbnM6IFtsb2NhbGVfZGVmYXVsdC5hXSxcblxuICBkaXJlY3RpdmVzOiB7IENsaWNrb3V0c2lkZTogY2xpY2tvdXRzaWRlX2RlZmF1bHQuYSB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgYnRuRGlzYWJsZWQ6IGZ1bmN0aW9uIGJ0bkRpc2FibGVkKCkge1xuICAgICAgcmV0dXJuICEodGhpcy5taW5EYXRlICYmIHRoaXMubWF4RGF0ZSAmJiAhdGhpcy5zZWxlY3RpbmcgJiYgdGhpcy5pc1ZhbGlkVmFsdWUoW3RoaXMubWluRGF0ZSwgdGhpcy5tYXhEYXRlXSkpO1xuICAgIH0sXG4gICAgbGVmdExhYmVsOiBmdW5jdGlvbiBsZWZ0TGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5sZWZ0RGF0ZS5nZXRGdWxsWWVhcigpICsgJyAnICsgdGhpcy50KCdlbC5kYXRlcGlja2VyLnllYXInKSArICcgJyArIHRoaXMudCgnZWwuZGF0ZXBpY2tlci5tb250aCcgKyAodGhpcy5sZWZ0RGF0ZS5nZXRNb250aCgpICsgMSkpO1xuICAgIH0sXG4gICAgcmlnaHRMYWJlbDogZnVuY3Rpb24gcmlnaHRMYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJpZ2h0RGF0ZS5nZXRGdWxsWWVhcigpICsgJyAnICsgdGhpcy50KCdlbC5kYXRlcGlja2VyLnllYXInKSArICcgJyArIHRoaXMudCgnZWwuZGF0ZXBpY2tlci5tb250aCcgKyAodGhpcy5yaWdodERhdGUuZ2V0TW9udGgoKSArIDEpKTtcbiAgICB9LFxuICAgIGxlZnRZZWFyOiBmdW5jdGlvbiBsZWZ0WWVhcigpIHtcbiAgICAgIHJldHVybiB0aGlzLmxlZnREYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgfSxcbiAgICBsZWZ0TW9udGg6IGZ1bmN0aW9uIGxlZnRNb250aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmxlZnREYXRlLmdldE1vbnRoKCk7XG4gICAgfSxcbiAgICBsZWZ0TW9udGhEYXRlOiBmdW5jdGlvbiBsZWZ0TW9udGhEYXRlKCkge1xuICAgICAgcmV0dXJuIHRoaXMubGVmdERhdGUuZ2V0RGF0ZSgpO1xuICAgIH0sXG4gICAgcmlnaHRZZWFyOiBmdW5jdGlvbiByaWdodFllYXIoKSB7XG4gICAgICByZXR1cm4gdGhpcy5yaWdodERhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICB9LFxuICAgIHJpZ2h0TW9udGg6IGZ1bmN0aW9uIHJpZ2h0TW9udGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5yaWdodERhdGUuZ2V0TW9udGgoKTtcbiAgICB9LFxuICAgIHJpZ2h0TW9udGhEYXRlOiBmdW5jdGlvbiByaWdodE1vbnRoRGF0ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJpZ2h0RGF0ZS5nZXREYXRlKCk7XG4gICAgfSxcbiAgICBtaW5WaXNpYmxlRGF0ZTogZnVuY3Rpb24gbWluVmlzaWJsZURhdGUoKSB7XG4gICAgICBpZiAodGhpcy5kYXRlVXNlcklucHV0Lm1pbiAhPT0gbnVsbCkgcmV0dXJuIHRoaXMuZGF0ZVVzZXJJbnB1dC5taW47XG4gICAgICBpZiAodGhpcy5taW5EYXRlKSByZXR1cm4gT2JqZWN0KGRhdGVfdXRpbF9bXCJmb3JtYXREYXRlXCJdKSh0aGlzLm1pbkRhdGUsIHRoaXMuZGF0ZUZvcm1hdCk7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfSxcbiAgICBtYXhWaXNpYmxlRGF0ZTogZnVuY3Rpb24gbWF4VmlzaWJsZURhdGUoKSB7XG4gICAgICBpZiAodGhpcy5kYXRlVXNlcklucHV0Lm1heCAhPT0gbnVsbCkgcmV0dXJuIHRoaXMuZGF0ZVVzZXJJbnB1dC5tYXg7XG4gICAgICBpZiAodGhpcy5tYXhEYXRlIHx8IHRoaXMubWluRGF0ZSkgcmV0dXJuIE9iamVjdChkYXRlX3V0aWxfW1wiZm9ybWF0RGF0ZVwiXSkodGhpcy5tYXhEYXRlIHx8IHRoaXMubWluRGF0ZSwgdGhpcy5kYXRlRm9ybWF0KTtcbiAgICAgIHJldHVybiAnJztcbiAgICB9LFxuICAgIG1pblZpc2libGVUaW1lOiBmdW5jdGlvbiBtaW5WaXNpYmxlVGltZSgpIHtcbiAgICAgIGlmICh0aGlzLnRpbWVVc2VySW5wdXQubWluICE9PSBudWxsKSByZXR1cm4gdGhpcy50aW1lVXNlcklucHV0Lm1pbjtcbiAgICAgIGlmICh0aGlzLm1pbkRhdGUpIHJldHVybiBPYmplY3QoZGF0ZV91dGlsX1tcImZvcm1hdERhdGVcIl0pKHRoaXMubWluRGF0ZSwgdGhpcy50aW1lRm9ybWF0KTtcbiAgICAgIHJldHVybiAnJztcbiAgICB9LFxuICAgIG1heFZpc2libGVUaW1lOiBmdW5jdGlvbiBtYXhWaXNpYmxlVGltZSgpIHtcbiAgICAgIGlmICh0aGlzLnRpbWVVc2VySW5wdXQubWF4ICE9PSBudWxsKSByZXR1cm4gdGhpcy50aW1lVXNlcklucHV0Lm1heDtcbiAgICAgIGlmICh0aGlzLm1heERhdGUgfHwgdGhpcy5taW5EYXRlKSByZXR1cm4gT2JqZWN0KGRhdGVfdXRpbF9bXCJmb3JtYXREYXRlXCJdKSh0aGlzLm1heERhdGUgfHwgdGhpcy5taW5EYXRlLCB0aGlzLnRpbWVGb3JtYXQpO1xuICAgICAgcmV0dXJuICcnO1xuICAgIH0sXG4gICAgdGltZUZvcm1hdDogZnVuY3Rpb24gdGltZUZvcm1hdCgpIHtcbiAgICAgIGlmICh0aGlzLmZvcm1hdCkge1xuICAgICAgICByZXR1cm4gT2JqZWN0KGRhdGVfdXRpbF9bXCJleHRyYWN0VGltZUZvcm1hdFwiXSkodGhpcy5mb3JtYXQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuICdISDptbTpzcyc7XG4gICAgICB9XG4gICAgfSxcbiAgICBkYXRlRm9ybWF0OiBmdW5jdGlvbiBkYXRlRm9ybWF0KCkge1xuICAgICAgaWYgKHRoaXMuZm9ybWF0KSB7XG4gICAgICAgIHJldHVybiBPYmplY3QoZGF0ZV91dGlsX1tcImV4dHJhY3REYXRlRm9ybWF0XCJdKSh0aGlzLmZvcm1hdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gJ3l5eXktTU0tZGQnO1xuICAgICAgfVxuICAgIH0sXG4gICAgZW5hYmxlTW9udGhBcnJvdzogZnVuY3Rpb24gZW5hYmxlTW9udGhBcnJvdygpIHtcbiAgICAgIHZhciBuZXh0TW9udGggPSAodGhpcy5sZWZ0TW9udGggKyAxKSAlIDEyO1xuICAgICAgdmFyIHllYXJPZmZzZXQgPSB0aGlzLmxlZnRNb250aCArIDEgPj0gMTIgPyAxIDogMDtcbiAgICAgIHJldHVybiB0aGlzLnVubGlua1BhbmVscyAmJiBuZXcgRGF0ZSh0aGlzLmxlZnRZZWFyICsgeWVhck9mZnNldCwgbmV4dE1vbnRoKSA8IG5ldyBEYXRlKHRoaXMucmlnaHRZZWFyLCB0aGlzLnJpZ2h0TW9udGgpO1xuICAgIH0sXG4gICAgZW5hYmxlWWVhckFycm93OiBmdW5jdGlvbiBlbmFibGVZZWFyQXJyb3coKSB7XG4gICAgICByZXR1cm4gdGhpcy51bmxpbmtQYW5lbHMgJiYgdGhpcy5yaWdodFllYXIgKiAxMiArIHRoaXMucmlnaHRNb250aCAtICh0aGlzLmxlZnRZZWFyICogMTIgKyB0aGlzLmxlZnRNb250aCArIDEpID49IDEyO1xuICAgIH1cbiAgfSxcblxuICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBwb3BwZXJDbGFzczogJycsXG4gICAgICB2YWx1ZTogW10sXG4gICAgICBkZWZhdWx0VmFsdWU6IG51bGwsXG4gICAgICBkZWZhdWx0VGltZTogbnVsbCxcbiAgICAgIG1pbkRhdGU6ICcnLFxuICAgICAgbWF4RGF0ZTogJycsXG4gICAgICBsZWZ0RGF0ZTogbmV3IERhdGUoKSxcbiAgICAgIHJpZ2h0RGF0ZTogT2JqZWN0KGRhdGVfdXRpbF9bXCJuZXh0TW9udGhcIl0pKG5ldyBEYXRlKCkpLFxuICAgICAgcmFuZ2VTdGF0ZToge1xuICAgICAgICBlbmREYXRlOiBudWxsLFxuICAgICAgICBzZWxlY3Rpbmc6IGZhbHNlLFxuICAgICAgICByb3c6IG51bGwsXG4gICAgICAgIGNvbHVtbjogbnVsbFxuICAgICAgfSxcbiAgICAgIHNob3dUaW1lOiBmYWxzZSxcbiAgICAgIHNob3J0Y3V0czogJycsXG4gICAgICB2aXNpYmxlOiAnJyxcbiAgICAgIGRpc2FibGVkRGF0ZTogJycsXG4gICAgICBjZWxsQ2xhc3NOYW1lOiAnJyxcbiAgICAgIGZpcnN0RGF5T2ZXZWVrOiA3LFxuICAgICAgbWluVGltZVBpY2tlclZpc2libGU6IGZhbHNlLFxuICAgICAgbWF4VGltZVBpY2tlclZpc2libGU6IGZhbHNlLFxuICAgICAgZm9ybWF0OiAnJyxcbiAgICAgIGFycm93Q29udHJvbDogZmFsc2UsXG4gICAgICB1bmxpbmtQYW5lbHM6IGZhbHNlLFxuICAgICAgZGF0ZVVzZXJJbnB1dDoge1xuICAgICAgICBtaW46IG51bGwsXG4gICAgICAgIG1heDogbnVsbFxuICAgICAgfSxcbiAgICAgIHRpbWVVc2VySW5wdXQ6IHtcbiAgICAgICAgbWluOiBudWxsLFxuICAgICAgICBtYXg6IG51bGxcbiAgICAgIH1cbiAgICB9O1xuICB9LFxuXG5cbiAgd2F0Y2g6IHtcbiAgICBtaW5EYXRlOiBmdW5jdGlvbiBtaW5EYXRlKHZhbCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgdGhpcy5kYXRlVXNlcklucHV0Lm1pbiA9IG51bGw7XG4gICAgICB0aGlzLnRpbWVVc2VySW5wdXQubWluID0gbnVsbDtcbiAgICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKF90aGlzLiRyZWZzLm1heFRpbWVQaWNrZXIgJiYgX3RoaXMubWF4RGF0ZSAmJiBfdGhpcy5tYXhEYXRlIDwgX3RoaXMubWluRGF0ZSkge1xuICAgICAgICAgIHZhciBmb3JtYXQgPSAnSEg6bW06c3MnO1xuICAgICAgICAgIF90aGlzLiRyZWZzLm1heFRpbWVQaWNrZXIuc2VsZWN0YWJsZVJhbmdlID0gW1tPYmplY3QoZGF0ZV91dGlsX1tcInBhcnNlRGF0ZVwiXSkoT2JqZWN0KGRhdGVfdXRpbF9bXCJmb3JtYXREYXRlXCJdKShfdGhpcy5taW5EYXRlLCBmb3JtYXQpLCBmb3JtYXQpLCBPYmplY3QoZGF0ZV91dGlsX1tcInBhcnNlRGF0ZVwiXSkoJzIzOjU5OjU5JywgZm9ybWF0KV1dO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmICh2YWwgJiYgdGhpcy4kcmVmcy5taW5UaW1lUGlja2VyKSB7XG4gICAgICAgIHRoaXMuJHJlZnMubWluVGltZVBpY2tlci5kYXRlID0gdmFsO1xuICAgICAgICB0aGlzLiRyZWZzLm1pblRpbWVQaWNrZXIudmFsdWUgPSB2YWw7XG4gICAgICB9XG4gICAgfSxcbiAgICBtYXhEYXRlOiBmdW5jdGlvbiBtYXhEYXRlKHZhbCkge1xuICAgICAgdGhpcy5kYXRlVXNlcklucHV0Lm1heCA9IG51bGw7XG4gICAgICB0aGlzLnRpbWVVc2VySW5wdXQubWF4ID0gbnVsbDtcbiAgICAgIGlmICh2YWwgJiYgdGhpcy4kcmVmcy5tYXhUaW1lUGlja2VyKSB7XG4gICAgICAgIHRoaXMuJHJlZnMubWF4VGltZVBpY2tlci5kYXRlID0gdmFsO1xuICAgICAgICB0aGlzLiRyZWZzLm1heFRpbWVQaWNrZXIudmFsdWUgPSB2YWw7XG4gICAgICB9XG4gICAgfSxcbiAgICBtaW5UaW1lUGlja2VyVmlzaWJsZTogZnVuY3Rpb24gbWluVGltZVBpY2tlclZpc2libGUodmFsKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgaWYgKHZhbCkge1xuICAgICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgX3RoaXMyLiRyZWZzLm1pblRpbWVQaWNrZXIuZGF0ZSA9IF90aGlzMi5taW5EYXRlO1xuICAgICAgICAgIF90aGlzMi4kcmVmcy5taW5UaW1lUGlja2VyLnZhbHVlID0gX3RoaXMyLm1pbkRhdGU7XG4gICAgICAgICAgX3RoaXMyLiRyZWZzLm1pblRpbWVQaWNrZXIuYWRqdXN0U3Bpbm5lcnMoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBtYXhUaW1lUGlja2VyVmlzaWJsZTogZnVuY3Rpb24gbWF4VGltZVBpY2tlclZpc2libGUodmFsKSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgICAgaWYgKHZhbCkge1xuICAgICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgX3RoaXMzLiRyZWZzLm1heFRpbWVQaWNrZXIuZGF0ZSA9IF90aGlzMy5tYXhEYXRlO1xuICAgICAgICAgIF90aGlzMy4kcmVmcy5tYXhUaW1lUGlja2VyLnZhbHVlID0gX3RoaXMzLm1heERhdGU7XG4gICAgICAgICAgX3RoaXMzLiRyZWZzLm1heFRpbWVQaWNrZXIuYWRqdXN0U3Bpbm5lcnMoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgICB2YWx1ZTogZnVuY3Rpb24gdmFsdWUobmV3VmFsKSB7XG4gICAgICBpZiAoIW5ld1ZhbCkge1xuICAgICAgICB0aGlzLm1pbkRhdGUgPSBudWxsO1xuICAgICAgICB0aGlzLm1heERhdGUgPSBudWxsO1xuICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG5ld1ZhbCkpIHtcbiAgICAgICAgdGhpcy5taW5EYXRlID0gT2JqZWN0KGRhdGVfdXRpbF9bXCJpc0RhdGVcIl0pKG5ld1ZhbFswXSkgPyBuZXcgRGF0ZShuZXdWYWxbMF0pIDogbnVsbDtcbiAgICAgICAgdGhpcy5tYXhEYXRlID0gT2JqZWN0KGRhdGVfdXRpbF9bXCJpc0RhdGVcIl0pKG5ld1ZhbFsxXSkgPyBuZXcgRGF0ZShuZXdWYWxbMV0pIDogbnVsbDtcbiAgICAgICAgaWYgKHRoaXMubWluRGF0ZSkge1xuICAgICAgICAgIHRoaXMubGVmdERhdGUgPSB0aGlzLm1pbkRhdGU7XG4gICAgICAgICAgaWYgKHRoaXMudW5saW5rUGFuZWxzICYmIHRoaXMubWF4RGF0ZSkge1xuICAgICAgICAgICAgdmFyIG1pbkRhdGVZZWFyID0gdGhpcy5taW5EYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgICAgICB2YXIgbWluRGF0ZU1vbnRoID0gdGhpcy5taW5EYXRlLmdldE1vbnRoKCk7XG4gICAgICAgICAgICB2YXIgbWF4RGF0ZVllYXIgPSB0aGlzLm1heERhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgICAgIHZhciBtYXhEYXRlTW9udGggPSB0aGlzLm1heERhdGUuZ2V0TW9udGgoKTtcbiAgICAgICAgICAgIHRoaXMucmlnaHREYXRlID0gbWluRGF0ZVllYXIgPT09IG1heERhdGVZZWFyICYmIG1pbkRhdGVNb250aCA9PT0gbWF4RGF0ZU1vbnRoID8gT2JqZWN0KGRhdGVfdXRpbF9bXCJuZXh0TW9udGhcIl0pKHRoaXMubWF4RGF0ZSkgOiB0aGlzLm1heERhdGU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmlnaHREYXRlID0gT2JqZWN0KGRhdGVfdXRpbF9bXCJuZXh0TW9udGhcIl0pKHRoaXMubGVmdERhdGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmxlZnREYXRlID0gZGF0ZV9yYW5nZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX2NhbGNEZWZhdWx0VmFsdWUodGhpcy5kZWZhdWx0VmFsdWUpWzBdO1xuICAgICAgICAgIHRoaXMucmlnaHREYXRlID0gT2JqZWN0KGRhdGVfdXRpbF9bXCJuZXh0TW9udGhcIl0pKHRoaXMubGVmdERhdGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBkZWZhdWx0VmFsdWU6IGZ1bmN0aW9uIGRlZmF1bHRWYWx1ZSh2YWwpIHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSkge1xuICAgICAgICB2YXIgX2NhbGNEZWZhdWx0VmFsdWUgPSBkYXRlX3JhbmdldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfY2FsY0RlZmF1bHRWYWx1ZSh2YWwpLFxuICAgICAgICAgICAgbGVmdCA9IF9jYWxjRGVmYXVsdFZhbHVlWzBdLFxuICAgICAgICAgICAgcmlnaHQgPSBfY2FsY0RlZmF1bHRWYWx1ZVsxXTtcblxuICAgICAgICB0aGlzLmxlZnREYXRlID0gbGVmdDtcbiAgICAgICAgdGhpcy5yaWdodERhdGUgPSB2YWwgJiYgdmFsWzFdICYmIHRoaXMudW5saW5rUGFuZWxzID8gcmlnaHQgOiBPYmplY3QoZGF0ZV91dGlsX1tcIm5leHRNb250aFwiXSkodGhpcy5sZWZ0RGF0ZSk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBoYW5kbGVDbGVhcjogZnVuY3Rpb24gaGFuZGxlQ2xlYXIoKSB7XG4gICAgICB0aGlzLm1pbkRhdGUgPSBudWxsO1xuICAgICAgdGhpcy5tYXhEYXRlID0gbnVsbDtcbiAgICAgIHRoaXMubGVmdERhdGUgPSBkYXRlX3JhbmdldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfY2FsY0RlZmF1bHRWYWx1ZSh0aGlzLmRlZmF1bHRWYWx1ZSlbMF07XG4gICAgICB0aGlzLnJpZ2h0RGF0ZSA9IE9iamVjdChkYXRlX3V0aWxfW1wibmV4dE1vbnRoXCJdKSh0aGlzLmxlZnREYXRlKTtcbiAgICAgIHRoaXMuJGVtaXQoJ3BpY2snLCBudWxsKTtcbiAgICB9LFxuICAgIGhhbmRsZUNoYW5nZVJhbmdlOiBmdW5jdGlvbiBoYW5kbGVDaGFuZ2VSYW5nZSh2YWwpIHtcbiAgICAgIHRoaXMubWluRGF0ZSA9IHZhbC5taW5EYXRlO1xuICAgICAgdGhpcy5tYXhEYXRlID0gdmFsLm1heERhdGU7XG4gICAgICB0aGlzLnJhbmdlU3RhdGUgPSB2YWwucmFuZ2VTdGF0ZTtcbiAgICB9LFxuICAgIGhhbmRsZURhdGVJbnB1dDogZnVuY3Rpb24gaGFuZGxlRGF0ZUlucHV0KHZhbHVlLCB0eXBlKSB7XG4gICAgICB0aGlzLmRhdGVVc2VySW5wdXRbdHlwZV0gPSB2YWx1ZTtcbiAgICAgIGlmICh2YWx1ZS5sZW5ndGggIT09IHRoaXMuZGF0ZUZvcm1hdC5sZW5ndGgpIHJldHVybjtcbiAgICAgIHZhciBwYXJzZWRWYWx1ZSA9IE9iamVjdChkYXRlX3V0aWxfW1wicGFyc2VEYXRlXCJdKSh2YWx1ZSwgdGhpcy5kYXRlRm9ybWF0KTtcblxuICAgICAgaWYgKHBhcnNlZFZhbHVlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5kaXNhYmxlZERhdGUgPT09ICdmdW5jdGlvbicgJiYgdGhpcy5kaXNhYmxlZERhdGUobmV3IERhdGUocGFyc2VkVmFsdWUpKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZSA9PT0gJ21pbicpIHtcbiAgICAgICAgICB0aGlzLm1pbkRhdGUgPSBPYmplY3QoZGF0ZV91dGlsX1tcIm1vZGlmeURhdGVcIl0pKHRoaXMubWluRGF0ZSB8fCBuZXcgRGF0ZSgpLCBwYXJzZWRWYWx1ZS5nZXRGdWxsWWVhcigpLCBwYXJzZWRWYWx1ZS5nZXRNb250aCgpLCBwYXJzZWRWYWx1ZS5nZXREYXRlKCkpO1xuICAgICAgICAgIHRoaXMubGVmdERhdGUgPSBuZXcgRGF0ZShwYXJzZWRWYWx1ZSk7XG4gICAgICAgICAgaWYgKCF0aGlzLnVubGlua1BhbmVscykge1xuICAgICAgICAgICAgdGhpcy5yaWdodERhdGUgPSBPYmplY3QoZGF0ZV91dGlsX1tcIm5leHRNb250aFwiXSkodGhpcy5sZWZ0RGF0ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubWF4RGF0ZSA9IE9iamVjdChkYXRlX3V0aWxfW1wibW9kaWZ5RGF0ZVwiXSkodGhpcy5tYXhEYXRlIHx8IG5ldyBEYXRlKCksIHBhcnNlZFZhbHVlLmdldEZ1bGxZZWFyKCksIHBhcnNlZFZhbHVlLmdldE1vbnRoKCksIHBhcnNlZFZhbHVlLmdldERhdGUoKSk7XG4gICAgICAgICAgdGhpcy5yaWdodERhdGUgPSBuZXcgRGF0ZShwYXJzZWRWYWx1ZSk7XG4gICAgICAgICAgaWYgKCF0aGlzLnVubGlua1BhbmVscykge1xuICAgICAgICAgICAgdGhpcy5sZWZ0RGF0ZSA9IE9iamVjdChkYXRlX3V0aWxfW1wicHJldk1vbnRoXCJdKShwYXJzZWRWYWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBoYW5kbGVEYXRlQ2hhbmdlOiBmdW5jdGlvbiBoYW5kbGVEYXRlQ2hhbmdlKHZhbHVlLCB0eXBlKSB7XG4gICAgICB2YXIgcGFyc2VkVmFsdWUgPSBPYmplY3QoZGF0ZV91dGlsX1tcInBhcnNlRGF0ZVwiXSkodmFsdWUsIHRoaXMuZGF0ZUZvcm1hdCk7XG4gICAgICBpZiAocGFyc2VkVmFsdWUpIHtcbiAgICAgICAgaWYgKHR5cGUgPT09ICdtaW4nKSB7XG4gICAgICAgICAgdGhpcy5taW5EYXRlID0gT2JqZWN0KGRhdGVfdXRpbF9bXCJtb2RpZnlEYXRlXCJdKSh0aGlzLm1pbkRhdGUsIHBhcnNlZFZhbHVlLmdldEZ1bGxZZWFyKCksIHBhcnNlZFZhbHVlLmdldE1vbnRoKCksIHBhcnNlZFZhbHVlLmdldERhdGUoKSk7XG4gICAgICAgICAgaWYgKHRoaXMubWluRGF0ZSA+IHRoaXMubWF4RGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5tYXhEYXRlID0gdGhpcy5taW5EYXRlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLm1heERhdGUgPSBPYmplY3QoZGF0ZV91dGlsX1tcIm1vZGlmeURhdGVcIl0pKHRoaXMubWF4RGF0ZSwgcGFyc2VkVmFsdWUuZ2V0RnVsbFllYXIoKSwgcGFyc2VkVmFsdWUuZ2V0TW9udGgoKSwgcGFyc2VkVmFsdWUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICBpZiAodGhpcy5tYXhEYXRlIDwgdGhpcy5taW5EYXRlKSB7XG4gICAgICAgICAgICB0aGlzLm1pbkRhdGUgPSB0aGlzLm1heERhdGU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBoYW5kbGVUaW1lSW5wdXQ6IGZ1bmN0aW9uIGhhbmRsZVRpbWVJbnB1dCh2YWx1ZSwgdHlwZSkge1xuICAgICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cbiAgICAgIHRoaXMudGltZVVzZXJJbnB1dFt0eXBlXSA9IHZhbHVlO1xuICAgICAgaWYgKHZhbHVlLmxlbmd0aCAhPT0gdGhpcy50aW1lRm9ybWF0Lmxlbmd0aCkgcmV0dXJuO1xuICAgICAgdmFyIHBhcnNlZFZhbHVlID0gT2JqZWN0KGRhdGVfdXRpbF9bXCJwYXJzZURhdGVcIl0pKHZhbHVlLCB0aGlzLnRpbWVGb3JtYXQpO1xuXG4gICAgICBpZiAocGFyc2VkVmFsdWUpIHtcbiAgICAgICAgaWYgKHR5cGUgPT09ICdtaW4nKSB7XG4gICAgICAgICAgdGhpcy5taW5EYXRlID0gT2JqZWN0KGRhdGVfdXRpbF9bXCJtb2RpZnlUaW1lXCJdKSh0aGlzLm1pbkRhdGUsIHBhcnNlZFZhbHVlLmdldEhvdXJzKCksIHBhcnNlZFZhbHVlLmdldE1pbnV0ZXMoKSwgcGFyc2VkVmFsdWUuZ2V0U2Vjb25kcygpKTtcbiAgICAgICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoXykge1xuICAgICAgICAgICAgcmV0dXJuIF90aGlzNC4kcmVmcy5taW5UaW1lUGlja2VyLmFkanVzdFNwaW5uZXJzKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5tYXhEYXRlID0gT2JqZWN0KGRhdGVfdXRpbF9bXCJtb2RpZnlUaW1lXCJdKSh0aGlzLm1heERhdGUsIHBhcnNlZFZhbHVlLmdldEhvdXJzKCksIHBhcnNlZFZhbHVlLmdldE1pbnV0ZXMoKSwgcGFyc2VkVmFsdWUuZ2V0U2Vjb25kcygpKTtcbiAgICAgICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoXykge1xuICAgICAgICAgICAgcmV0dXJuIF90aGlzNC4kcmVmcy5tYXhUaW1lUGlja2VyLmFkanVzdFNwaW5uZXJzKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGhhbmRsZVRpbWVDaGFuZ2U6IGZ1bmN0aW9uIGhhbmRsZVRpbWVDaGFuZ2UodmFsdWUsIHR5cGUpIHtcbiAgICAgIHZhciBwYXJzZWRWYWx1ZSA9IE9iamVjdChkYXRlX3V0aWxfW1wicGFyc2VEYXRlXCJdKSh2YWx1ZSwgdGhpcy50aW1lRm9ybWF0KTtcbiAgICAgIGlmIChwYXJzZWRWYWx1ZSkge1xuICAgICAgICBpZiAodHlwZSA9PT0gJ21pbicpIHtcbiAgICAgICAgICB0aGlzLm1pbkRhdGUgPSBPYmplY3QoZGF0ZV91dGlsX1tcIm1vZGlmeVRpbWVcIl0pKHRoaXMubWluRGF0ZSwgcGFyc2VkVmFsdWUuZ2V0SG91cnMoKSwgcGFyc2VkVmFsdWUuZ2V0TWludXRlcygpLCBwYXJzZWRWYWx1ZS5nZXRTZWNvbmRzKCkpO1xuICAgICAgICAgIGlmICh0aGlzLm1pbkRhdGUgPiB0aGlzLm1heERhdGUpIHtcbiAgICAgICAgICAgIHRoaXMubWF4RGF0ZSA9IHRoaXMubWluRGF0ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy4kcmVmcy5taW5UaW1lUGlja2VyLnZhbHVlID0gdGhpcy5taW5EYXRlO1xuICAgICAgICAgIHRoaXMubWluVGltZVBpY2tlclZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLm1heERhdGUgPSBPYmplY3QoZGF0ZV91dGlsX1tcIm1vZGlmeVRpbWVcIl0pKHRoaXMubWF4RGF0ZSwgcGFyc2VkVmFsdWUuZ2V0SG91cnMoKSwgcGFyc2VkVmFsdWUuZ2V0TWludXRlcygpLCBwYXJzZWRWYWx1ZS5nZXRTZWNvbmRzKCkpO1xuICAgICAgICAgIGlmICh0aGlzLm1heERhdGUgPCB0aGlzLm1pbkRhdGUpIHtcbiAgICAgICAgICAgIHRoaXMubWluRGF0ZSA9IHRoaXMubWF4RGF0ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy4kcmVmcy5tYXhUaW1lUGlja2VyLnZhbHVlID0gdGhpcy5taW5EYXRlO1xuICAgICAgICAgIHRoaXMubWF4VGltZVBpY2tlclZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgaGFuZGxlUmFuZ2VQaWNrOiBmdW5jdGlvbiBoYW5kbGVSYW5nZVBpY2sodmFsKSB7XG4gICAgICB2YXIgX3RoaXM1ID0gdGhpcztcblxuICAgICAgdmFyIGNsb3NlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB0cnVlO1xuXG4gICAgICB2YXIgZGVmYXVsdFRpbWUgPSB0aGlzLmRlZmF1bHRUaW1lIHx8IFtdO1xuICAgICAgdmFyIG1pbkRhdGUgPSBPYmplY3QoZGF0ZV91dGlsX1tcIm1vZGlmeVdpdGhUaW1lU3RyaW5nXCJdKSh2YWwubWluRGF0ZSwgZGVmYXVsdFRpbWVbMF0pO1xuICAgICAgdmFyIG1heERhdGUgPSBPYmplY3QoZGF0ZV91dGlsX1tcIm1vZGlmeVdpdGhUaW1lU3RyaW5nXCJdKSh2YWwubWF4RGF0ZSwgZGVmYXVsdFRpbWVbMV0pO1xuXG4gICAgICBpZiAodGhpcy5tYXhEYXRlID09PSBtYXhEYXRlICYmIHRoaXMubWluRGF0ZSA9PT0gbWluRGF0ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLm9uUGljayAmJiB0aGlzLm9uUGljayh2YWwpO1xuICAgICAgdGhpcy5tYXhEYXRlID0gbWF4RGF0ZTtcbiAgICAgIHRoaXMubWluRGF0ZSA9IG1pbkRhdGU7XG5cbiAgICAgIC8vIHdvcmthcm91bmQgZm9yIGh0dHBzOi8vZ2l0aHViLmNvbS9FbGVtZUZFL2VsZW1lbnQvaXNzdWVzLzc1MzksIHNob3VsZCByZW1vdmUgdGhpcyBibG9jayB3aGVuIHdlIGRvbid0IGhhdmUgdG8gY2FyZSBhYm91dCBDaHJvbWl1bSA1NSAtIDU3XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXM1Lm1heERhdGUgPSBtYXhEYXRlO1xuICAgICAgICBfdGhpczUubWluRGF0ZSA9IG1pbkRhdGU7XG4gICAgICB9LCAxMCk7XG4gICAgICBpZiAoIWNsb3NlIHx8IHRoaXMuc2hvd1RpbWUpIHJldHVybjtcbiAgICAgIHRoaXMuaGFuZGxlQ29uZmlybSgpO1xuICAgIH0sXG4gICAgaGFuZGxlU2hvcnRjdXRDbGljazogZnVuY3Rpb24gaGFuZGxlU2hvcnRjdXRDbGljayhzaG9ydGN1dCkge1xuICAgICAgaWYgKHNob3J0Y3V0Lm9uQ2xpY2spIHtcbiAgICAgICAgc2hvcnRjdXQub25DbGljayh0aGlzKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGhhbmRsZU1pblRpbWVQaWNrOiBmdW5jdGlvbiBoYW5kbGVNaW5UaW1lUGljayh2YWx1ZSwgdmlzaWJsZSwgZmlyc3QpIHtcbiAgICAgIHRoaXMubWluRGF0ZSA9IHRoaXMubWluRGF0ZSB8fCBuZXcgRGF0ZSgpO1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIHRoaXMubWluRGF0ZSA9IE9iamVjdChkYXRlX3V0aWxfW1wibW9kaWZ5VGltZVwiXSkodGhpcy5taW5EYXRlLCB2YWx1ZS5nZXRIb3VycygpLCB2YWx1ZS5nZXRNaW51dGVzKCksIHZhbHVlLmdldFNlY29uZHMoKSk7XG4gICAgICB9XG5cbiAgICAgIGlmICghZmlyc3QpIHtcbiAgICAgICAgdGhpcy5taW5UaW1lUGlja2VyVmlzaWJsZSA9IHZpc2libGU7XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5tYXhEYXRlIHx8IHRoaXMubWF4RGF0ZSAmJiB0aGlzLm1heERhdGUuZ2V0VGltZSgpIDwgdGhpcy5taW5EYXRlLmdldFRpbWUoKSkge1xuICAgICAgICB0aGlzLm1heERhdGUgPSBuZXcgRGF0ZSh0aGlzLm1pbkRhdGUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgaGFuZGxlTWluVGltZUNsb3NlOiBmdW5jdGlvbiBoYW5kbGVNaW5UaW1lQ2xvc2UoKSB7XG4gICAgICB0aGlzLm1pblRpbWVQaWNrZXJWaXNpYmxlID0gZmFsc2U7XG4gICAgfSxcbiAgICBoYW5kbGVNYXhUaW1lUGljazogZnVuY3Rpb24gaGFuZGxlTWF4VGltZVBpY2sodmFsdWUsIHZpc2libGUsIGZpcnN0KSB7XG4gICAgICBpZiAodGhpcy5tYXhEYXRlICYmIHZhbHVlKSB7XG4gICAgICAgIHRoaXMubWF4RGF0ZSA9IE9iamVjdChkYXRlX3V0aWxfW1wibW9kaWZ5VGltZVwiXSkodGhpcy5tYXhEYXRlLCB2YWx1ZS5nZXRIb3VycygpLCB2YWx1ZS5nZXRNaW51dGVzKCksIHZhbHVlLmdldFNlY29uZHMoKSk7XG4gICAgICB9XG5cbiAgICAgIGlmICghZmlyc3QpIHtcbiAgICAgICAgdGhpcy5tYXhUaW1lUGlja2VyVmlzaWJsZSA9IHZpc2libGU7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm1heERhdGUgJiYgdGhpcy5taW5EYXRlICYmIHRoaXMubWluRGF0ZS5nZXRUaW1lKCkgPiB0aGlzLm1heERhdGUuZ2V0VGltZSgpKSB7XG4gICAgICAgIHRoaXMubWluRGF0ZSA9IG5ldyBEYXRlKHRoaXMubWF4RGF0ZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBoYW5kbGVNYXhUaW1lQ2xvc2U6IGZ1bmN0aW9uIGhhbmRsZU1heFRpbWVDbG9zZSgpIHtcbiAgICAgIHRoaXMubWF4VGltZVBpY2tlclZpc2libGUgPSBmYWxzZTtcbiAgICB9LFxuXG5cbiAgICAvLyBsZWZ0UHJldiosIHJpZ2h0TmV4dCogbmVlZCB0byB0YWtlIGNhcmUgb2YgYHVubGlua1BhbmVsc2BcbiAgICBsZWZ0UHJldlllYXI6IGZ1bmN0aW9uIGxlZnRQcmV2WWVhcigpIHtcbiAgICAgIHRoaXMubGVmdERhdGUgPSBPYmplY3QoZGF0ZV91dGlsX1tcInByZXZZZWFyXCJdKSh0aGlzLmxlZnREYXRlKTtcbiAgICAgIGlmICghdGhpcy51bmxpbmtQYW5lbHMpIHtcbiAgICAgICAgdGhpcy5yaWdodERhdGUgPSBPYmplY3QoZGF0ZV91dGlsX1tcIm5leHRNb250aFwiXSkodGhpcy5sZWZ0RGF0ZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBsZWZ0UHJldk1vbnRoOiBmdW5jdGlvbiBsZWZ0UHJldk1vbnRoKCkge1xuICAgICAgdGhpcy5sZWZ0RGF0ZSA9IE9iamVjdChkYXRlX3V0aWxfW1wicHJldk1vbnRoXCJdKSh0aGlzLmxlZnREYXRlKTtcbiAgICAgIGlmICghdGhpcy51bmxpbmtQYW5lbHMpIHtcbiAgICAgICAgdGhpcy5yaWdodERhdGUgPSBPYmplY3QoZGF0ZV91dGlsX1tcIm5leHRNb250aFwiXSkodGhpcy5sZWZ0RGF0ZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICByaWdodE5leHRZZWFyOiBmdW5jdGlvbiByaWdodE5leHRZZWFyKCkge1xuICAgICAgaWYgKCF0aGlzLnVubGlua1BhbmVscykge1xuICAgICAgICB0aGlzLmxlZnREYXRlID0gT2JqZWN0KGRhdGVfdXRpbF9bXCJuZXh0WWVhclwiXSkodGhpcy5sZWZ0RGF0ZSk7XG4gICAgICAgIHRoaXMucmlnaHREYXRlID0gT2JqZWN0KGRhdGVfdXRpbF9bXCJuZXh0TW9udGhcIl0pKHRoaXMubGVmdERhdGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5yaWdodERhdGUgPSBPYmplY3QoZGF0ZV91dGlsX1tcIm5leHRZZWFyXCJdKSh0aGlzLnJpZ2h0RGF0ZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICByaWdodE5leHRNb250aDogZnVuY3Rpb24gcmlnaHROZXh0TW9udGgoKSB7XG4gICAgICBpZiAoIXRoaXMudW5saW5rUGFuZWxzKSB7XG4gICAgICAgIHRoaXMubGVmdERhdGUgPSBPYmplY3QoZGF0ZV91dGlsX1tcIm5leHRNb250aFwiXSkodGhpcy5sZWZ0RGF0ZSk7XG4gICAgICAgIHRoaXMucmlnaHREYXRlID0gT2JqZWN0KGRhdGVfdXRpbF9bXCJuZXh0TW9udGhcIl0pKHRoaXMubGVmdERhdGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5yaWdodERhdGUgPSBPYmplY3QoZGF0ZV91dGlsX1tcIm5leHRNb250aFwiXSkodGhpcy5yaWdodERhdGUpO1xuICAgICAgfVxuICAgIH0sXG5cblxuICAgIC8vIGxlZnROZXh0KiwgcmlnaHRQcmV2KiBhcmUgY2FsbGVkIHdoZW4gYHVubGlua1BhbmVsc2AgaXMgdHJ1ZVxuICAgIGxlZnROZXh0WWVhcjogZnVuY3Rpb24gbGVmdE5leHRZZWFyKCkge1xuICAgICAgdGhpcy5sZWZ0RGF0ZSA9IE9iamVjdChkYXRlX3V0aWxfW1wibmV4dFllYXJcIl0pKHRoaXMubGVmdERhdGUpO1xuICAgIH0sXG4gICAgbGVmdE5leHRNb250aDogZnVuY3Rpb24gbGVmdE5leHRNb250aCgpIHtcbiAgICAgIHRoaXMubGVmdERhdGUgPSBPYmplY3QoZGF0ZV91dGlsX1tcIm5leHRNb250aFwiXSkodGhpcy5sZWZ0RGF0ZSk7XG4gICAgfSxcbiAgICByaWdodFByZXZZZWFyOiBmdW5jdGlvbiByaWdodFByZXZZZWFyKCkge1xuICAgICAgdGhpcy5yaWdodERhdGUgPSBPYmplY3QoZGF0ZV91dGlsX1tcInByZXZZZWFyXCJdKSh0aGlzLnJpZ2h0RGF0ZSk7XG4gICAgfSxcbiAgICByaWdodFByZXZNb250aDogZnVuY3Rpb24gcmlnaHRQcmV2TW9udGgoKSB7XG4gICAgICB0aGlzLnJpZ2h0RGF0ZSA9IE9iamVjdChkYXRlX3V0aWxfW1wicHJldk1vbnRoXCJdKSh0aGlzLnJpZ2h0RGF0ZSk7XG4gICAgfSxcbiAgICBoYW5kbGVDb25maXJtOiBmdW5jdGlvbiBoYW5kbGVDb25maXJtKCkge1xuICAgICAgdmFyIHZpc2libGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGZhbHNlO1xuXG4gICAgICBpZiAodGhpcy5pc1ZhbGlkVmFsdWUoW3RoaXMubWluRGF0ZSwgdGhpcy5tYXhEYXRlXSkpIHtcbiAgICAgICAgdGhpcy4kZW1pdCgncGljaycsIFt0aGlzLm1pbkRhdGUsIHRoaXMubWF4RGF0ZV0sIHZpc2libGUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgaXNWYWxpZFZhbHVlOiBmdW5jdGlvbiBpc1ZhbGlkVmFsdWUodmFsdWUpIHtcbiAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZSAmJiB2YWx1ZVswXSAmJiB2YWx1ZVsxXSAmJiBPYmplY3QoZGF0ZV91dGlsX1tcImlzRGF0ZVwiXSkodmFsdWVbMF0pICYmIE9iamVjdChkYXRlX3V0aWxfW1wiaXNEYXRlXCJdKSh2YWx1ZVsxXSkgJiYgdmFsdWVbMF0uZ2V0VGltZSgpIDw9IHZhbHVlWzFdLmdldFRpbWUoKSAmJiAodHlwZW9mIHRoaXMuZGlzYWJsZWREYXRlID09PSAnZnVuY3Rpb24nID8gIXRoaXMuZGlzYWJsZWREYXRlKHZhbHVlWzBdKSAmJiAhdGhpcy5kaXNhYmxlZERhdGUodmFsdWVbMV0pIDogdHJ1ZSk7XG4gICAgfSxcbiAgICByZXNldFZpZXc6IGZ1bmN0aW9uIHJlc2V0VmlldygpIHtcbiAgICAgIC8vIE5PVEU6IHRoaXMgaXMgYSBoYWNrIHRvIHJlc2V0IHttaW4sIG1heH1EYXRlIG9uIHBpY2tlciBvcGVuLlxuICAgICAgLy8gVE9ETzogY29ycmVjdCB3YXkgb2YgZG9pbmcgc28gaXMgdG8gcmVmYWN0b3Ige21pbiwgbWF4fURhdGUgdG8gYmUgZGVwZW5kZW50IG9uIHZhbHVlIGFuZCBpbnRlcm5hbCBzZWxlY3Rpb24gc3RhdGVcbiAgICAgIC8vICAgICAgIGFuIGFsdGVybmF0aXZlIHdvdWxkIGJlIHJlc2V0VmlldyB3aGVuZXZlciBwaWNrZXIgYmVjb21lcyB2aXNpYmxlLCBzaG91bGQgYWxzbyBpbnZlc3RpZ2F0ZSBkYXRlLXBhbmVsJ3MgcmVzZXRWaWV3XG4gICAgICBpZiAodGhpcy5taW5EYXRlICYmIHRoaXMubWF4RGF0ZSA9PSBudWxsKSB0aGlzLnJhbmdlU3RhdGUuc2VsZWN0aW5nID0gZmFsc2U7XG4gICAgICB0aGlzLm1pbkRhdGUgPSB0aGlzLnZhbHVlICYmIE9iamVjdChkYXRlX3V0aWxfW1wiaXNEYXRlXCJdKSh0aGlzLnZhbHVlWzBdKSA/IG5ldyBEYXRlKHRoaXMudmFsdWVbMF0pIDogbnVsbDtcbiAgICAgIHRoaXMubWF4RGF0ZSA9IHRoaXMudmFsdWUgJiYgT2JqZWN0KGRhdGVfdXRpbF9bXCJpc0RhdGVcIl0pKHRoaXMudmFsdWVbMF0pID8gbmV3IERhdGUodGhpcy52YWx1ZVsxXSkgOiBudWxsO1xuICAgIH1cbiAgfSxcblxuICBjb21wb25lbnRzOiB7IFRpbWVQaWNrZXI6IHBhbmVsX3RpbWUsIERhdGVUYWJsZTogZGF0ZV90YWJsZSwgRWxJbnB1dDogaW5wdXRfZGVmYXVsdC5hLCBFbEJ1dHRvbjogYnV0dG9uX2RlZmF1bHQuYSB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZGF0ZS1waWNrZXIvc3JjL3BhbmVsL2RhdGUtcmFuZ2UudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhbmVsX2RhdGVfcmFuZ2V2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoZGF0ZV9yYW5nZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9kYXRlLXBpY2tlci9zcmMvcGFuZWwvZGF0ZS1yYW5nZS52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBkYXRlX3JhbmdlX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgcGFuZWxfZGF0ZV9yYW5nZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgZGF0ZV9yYW5nZXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzI2NTI4NDlhX3JlbmRlcixcbiAgZGF0ZV9yYW5nZXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzI2NTI4NDlhX3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgZGF0ZV9yYW5nZV9hcGk7IH1cbmRhdGVfcmFuZ2VfY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy9kYXRlLXBpY2tlci9zcmMvcGFuZWwvZGF0ZS1yYW5nZS52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgZGF0ZV9yYW5nZSA9IChkYXRlX3JhbmdlX2NvbXBvbmVudC5leHBvcnRzKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvZGF0ZS1waWNrZXIvc3JjL3BhbmVsL21vbnRoLXJhbmdlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1mMjY0NWZiOCZcbnZhciBtb250aF9yYW5nZXZ1ZV90eXBlX3RlbXBsYXRlX2lkX2YyNjQ1ZmI4X3JlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcInRyYW5zaXRpb25cIixcbiAgICB7XG4gICAgICBhdHRyczogeyBuYW1lOiBcImVsLXpvb20taW4tdG9wXCIgfSxcbiAgICAgIG9uOiB7XG4gICAgICAgIFwiYWZ0ZXItbGVhdmVcIjogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgX3ZtLiRlbWl0KFwiZG9kZXN0cm95XCIpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIF9jKFxuICAgICAgICBcImRpdlwiLFxuICAgICAgICB7XG4gICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgICAgdmFsdWU6IF92bS52aXNpYmxlLFxuICAgICAgICAgICAgICBleHByZXNzaW9uOiBcInZpc2libGVcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIF0sXG4gICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtcGlja2VyLXBhbmVsIGVsLWRhdGUtcmFuZ2UtcGlja2VyIGVsLXBvcHBlclwiLFxuICAgICAgICAgIGNsYXNzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFwiaGFzLXNpZGViYXJcIjogX3ZtLiRzbG90cy5zaWRlYmFyIHx8IF92bS5zaG9ydGN1dHNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfdm0ucG9wcGVyQ2xhc3NcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFtcbiAgICAgICAgICBfYyhcbiAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiBcImVsLXBpY2tlci1wYW5lbF9fYm9keS13cmFwcGVyXCIgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX3ZtLl90KFwic2lkZWJhclwiKSxcbiAgICAgICAgICAgICAgX3ZtLnNob3J0Y3V0c1xuICAgICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwiZWwtcGlja2VyLXBhbmVsX19zaWRlYmFyXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgX3ZtLl9sKF92bS5zaG9ydGN1dHMsIGZ1bmN0aW9uKHNob3J0Y3V0LCBrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtcGlja2VyLXBhbmVsX19zaG9ydGN1dFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyB0eXBlOiBcImJ1dHRvblwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLmhhbmRsZVNob3J0Y3V0Q2xpY2soc2hvcnRjdXQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgW192bS5fdihfdm0uX3Moc2hvcnRjdXQudGV4dCkpXVxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLXBpY2tlci1wYW5lbF9fYm9keVwiIH0sIFtcbiAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOlxuICAgICAgICAgICAgICAgICAgICAgIFwiZWwtcGlja2VyLXBhbmVsX19jb250ZW50IGVsLWRhdGUtcmFuZ2UtcGlja2VyX19jb250ZW50IGlzLWxlZnRcIlxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJlbC1kYXRlLXJhbmdlLXBpY2tlcl9faGVhZGVyXCIgfSwgW1xuICAgICAgICAgICAgICAgICAgICAgIF9jKFwiYnV0dG9uXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICBcImVsLXBpY2tlci1wYW5lbF9faWNvbi1idG4gZWwtaWNvbi1kLWFycm93LWxlZnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHR5cGU6IFwiYnV0dG9uXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0ubGVmdFByZXZZZWFyIH1cbiAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICBfdm0udW5saW5rUGFuZWxzXG4gICAgICAgICAgICAgICAgICAgICAgICA/IF9jKFwiYnV0dG9uXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZWwtcGlja2VyLXBhbmVsX19pY29uLWJ0biBlbC1pY29uLWQtYXJyb3ctcmlnaHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogeyBcImlzLWRpc2FibGVkXCI6ICFfdm0uZW5hYmxlWWVhckFycm93IH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYnV0dG9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogIV92bS5lbmFibGVZZWFyQXJyb3dcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0ubGVmdE5leHRZZWFyIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgICAgICAgICAgX2MoXCJkaXZcIiwgW192bS5fdihfdm0uX3MoX3ZtLmxlZnRMYWJlbCkpXSlcbiAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgIF9jKFwibW9udGgtdGFibGVcIiwge1xuICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBcInNlbGVjdGlvbi1tb2RlXCI6IFwicmFuZ2VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGU6IF92bS5sZWZ0RGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGVmYXVsdC12YWx1ZVwiOiBfdm0uZGVmYXVsdFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJtaW4tZGF0ZVwiOiBfdm0ubWluRGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibWF4LWRhdGVcIjogX3ZtLm1heERhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBcInJhbmdlLXN0YXRlXCI6IF92bS5yYW5nZVN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXNhYmxlZC1kYXRlXCI6IF92bS5kaXNhYmxlZERhdGVcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VyYW5nZTogX3ZtLmhhbmRsZUNoYW5nZVJhbmdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGljazogX3ZtLmhhbmRsZVJhbmdlUGlja1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOlxuICAgICAgICAgICAgICAgICAgICAgIFwiZWwtcGlja2VyLXBhbmVsX19jb250ZW50IGVsLWRhdGUtcmFuZ2UtcGlja2VyX19jb250ZW50IGlzLXJpZ2h0XCJcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiZWwtZGF0ZS1yYW5nZS1waWNrZXJfX2hlYWRlclwiIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICBfdm0udW5saW5rUGFuZWxzXG4gICAgICAgICAgICAgICAgICAgICAgICA/IF9jKFwiYnV0dG9uXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZWwtcGlja2VyLXBhbmVsX19pY29uLWJ0biBlbC1pY29uLWQtYXJyb3ctbGVmdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiB7IFwiaXMtZGlzYWJsZWRcIjogIV92bS5lbmFibGVZZWFyQXJyb3cgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJidXR0b25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiAhX3ZtLmVuYWJsZVllYXJBcnJvd1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsgY2xpY2s6IF92bS5yaWdodFByZXZZZWFyIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgICAgICAgICAgX2MoXCJidXR0b25cIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiZWwtcGlja2VyLXBhbmVsX19pY29uLWJ0biBlbC1pY29uLWQtYXJyb3ctcmlnaHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHR5cGU6IFwiYnV0dG9uXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0ucmlnaHROZXh0WWVhciB9XG4gICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgX2MoXCJkaXZcIiwgW192bS5fdihfdm0uX3MoX3ZtLnJpZ2h0TGFiZWwpKV0pXG4gICAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICAgICBfYyhcIm1vbnRoLXRhYmxlXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJzZWxlY3Rpb24tbW9kZVwiOiBcInJhbmdlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRlOiBfdm0ucmlnaHREYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkZWZhdWx0LXZhbHVlXCI6IF92bS5kZWZhdWx0VmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm1pbi1kYXRlXCI6IF92bS5taW5EYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJtYXgtZGF0ZVwiOiBfdm0ubWF4RGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwicmFuZ2Utc3RhdGVcIjogX3ZtLnJhbmdlU3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRpc2FibGVkLWRhdGVcIjogX3ZtLmRpc2FibGVkRGF0ZVxuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZXJhbmdlOiBfdm0uaGFuZGxlQ2hhbmdlUmFuZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBwaWNrOiBfdm0uaGFuZGxlUmFuZ2VQaWNrXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgMlxuICAgICAgICAgIClcbiAgICAgICAgXVxuICAgICAgKVxuICAgIF1cbiAgKVxufVxudmFyIG1vbnRoX3JhbmdldnVlX3R5cGVfdGVtcGxhdGVfaWRfZjI2NDVmYjhfc3RhdGljUmVuZGVyRm5zID0gW11cbm1vbnRoX3JhbmdldnVlX3R5cGVfdGVtcGxhdGVfaWRfZjI2NDVmYjhfcmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9kYXRlLXBpY2tlci9zcmMvcGFuZWwvbW9udGgtcmFuZ2UudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWYyNjQ1ZmI4JlxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9kYXRlLXBpY2tlci9zcmMvcGFuZWwvbW9udGgtcmFuZ2UudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuXG5cblxuXG5cblxuXG52YXIgbW9udGhfcmFuZ2V2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19jYWxjRGVmYXVsdFZhbHVlID0gZnVuY3Rpb24gY2FsY0RlZmF1bHRWYWx1ZShkZWZhdWx0VmFsdWUpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoZGVmYXVsdFZhbHVlKSkge1xuICAgIHJldHVybiBbbmV3IERhdGUoZGVmYXVsdFZhbHVlWzBdKSwgbmV3IERhdGUoZGVmYXVsdFZhbHVlWzFdKV07XG4gIH0gZWxzZSBpZiAoZGVmYXVsdFZhbHVlKSB7XG4gICAgcmV0dXJuIFtuZXcgRGF0ZShkZWZhdWx0VmFsdWUpLCBPYmplY3QoZGF0ZV91dGlsX1tcIm5leHRNb250aFwiXSkobmV3IERhdGUoZGVmYXVsdFZhbHVlKSldO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBbbmV3IERhdGUoKSwgT2JqZWN0KGRhdGVfdXRpbF9bXCJuZXh0TW9udGhcIl0pKG5ldyBEYXRlKCkpXTtcbiAgfVxufTtcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIG1vbnRoX3JhbmdldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbWl4aW5zOiBbbG9jYWxlX2RlZmF1bHQuYV0sXG5cbiAgZGlyZWN0aXZlczogeyBDbGlja291dHNpZGU6IGNsaWNrb3V0c2lkZV9kZWZhdWx0LmEgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGJ0bkRpc2FibGVkOiBmdW5jdGlvbiBidG5EaXNhYmxlZCgpIHtcbiAgICAgIHJldHVybiAhKHRoaXMubWluRGF0ZSAmJiB0aGlzLm1heERhdGUgJiYgIXRoaXMuc2VsZWN0aW5nICYmIHRoaXMuaXNWYWxpZFZhbHVlKFt0aGlzLm1pbkRhdGUsIHRoaXMubWF4RGF0ZV0pKTtcbiAgICB9LFxuICAgIGxlZnRMYWJlbDogZnVuY3Rpb24gbGVmdExhYmVsKCkge1xuICAgICAgcmV0dXJuIHRoaXMubGVmdERhdGUuZ2V0RnVsbFllYXIoKSArICcgJyArIHRoaXMudCgnZWwuZGF0ZXBpY2tlci55ZWFyJyk7XG4gICAgfSxcbiAgICByaWdodExhYmVsOiBmdW5jdGlvbiByaWdodExhYmVsKCkge1xuICAgICAgcmV0dXJuIHRoaXMucmlnaHREYXRlLmdldEZ1bGxZZWFyKCkgKyAnICcgKyB0aGlzLnQoJ2VsLmRhdGVwaWNrZXIueWVhcicpO1xuICAgIH0sXG4gICAgbGVmdFllYXI6IGZ1bmN0aW9uIGxlZnRZZWFyKCkge1xuICAgICAgcmV0dXJuIHRoaXMubGVmdERhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICB9LFxuICAgIHJpZ2h0WWVhcjogZnVuY3Rpb24gcmlnaHRZZWFyKCkge1xuICAgICAgcmV0dXJuIHRoaXMucmlnaHREYXRlLmdldEZ1bGxZZWFyKCkgPT09IHRoaXMubGVmdERhdGUuZ2V0RnVsbFllYXIoKSA/IHRoaXMubGVmdERhdGUuZ2V0RnVsbFllYXIoKSArIDEgOiB0aGlzLnJpZ2h0RGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgIH0sXG4gICAgZW5hYmxlWWVhckFycm93OiBmdW5jdGlvbiBlbmFibGVZZWFyQXJyb3coKSB7XG4gICAgICByZXR1cm4gdGhpcy51bmxpbmtQYW5lbHMgJiYgdGhpcy5yaWdodFllYXIgPiB0aGlzLmxlZnRZZWFyICsgMTtcbiAgICB9XG4gIH0sXG5cbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcG9wcGVyQ2xhc3M6ICcnLFxuICAgICAgdmFsdWU6IFtdLFxuICAgICAgZGVmYXVsdFZhbHVlOiBudWxsLFxuICAgICAgZGVmYXVsdFRpbWU6IG51bGwsXG4gICAgICBtaW5EYXRlOiAnJyxcbiAgICAgIG1heERhdGU6ICcnLFxuICAgICAgbGVmdERhdGU6IG5ldyBEYXRlKCksXG4gICAgICByaWdodERhdGU6IE9iamVjdChkYXRlX3V0aWxfW1wibmV4dFllYXJcIl0pKG5ldyBEYXRlKCkpLFxuICAgICAgcmFuZ2VTdGF0ZToge1xuICAgICAgICBlbmREYXRlOiBudWxsLFxuICAgICAgICBzZWxlY3Rpbmc6IGZhbHNlLFxuICAgICAgICByb3c6IG51bGwsXG4gICAgICAgIGNvbHVtbjogbnVsbFxuICAgICAgfSxcbiAgICAgIHNob3J0Y3V0czogJycsXG4gICAgICB2aXNpYmxlOiAnJyxcbiAgICAgIGRpc2FibGVkRGF0ZTogJycsXG4gICAgICBmb3JtYXQ6ICcnLFxuICAgICAgYXJyb3dDb250cm9sOiBmYWxzZSxcbiAgICAgIHVubGlua1BhbmVsczogZmFsc2VcbiAgICB9O1xuICB9LFxuXG5cbiAgd2F0Y2g6IHtcbiAgICB2YWx1ZTogZnVuY3Rpb24gdmFsdWUobmV3VmFsKSB7XG4gICAgICBpZiAoIW5ld1ZhbCkge1xuICAgICAgICB0aGlzLm1pbkRhdGUgPSBudWxsO1xuICAgICAgICB0aGlzLm1heERhdGUgPSBudWxsO1xuICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG5ld1ZhbCkpIHtcbiAgICAgICAgdGhpcy5taW5EYXRlID0gT2JqZWN0KGRhdGVfdXRpbF9bXCJpc0RhdGVcIl0pKG5ld1ZhbFswXSkgPyBuZXcgRGF0ZShuZXdWYWxbMF0pIDogbnVsbDtcbiAgICAgICAgdGhpcy5tYXhEYXRlID0gT2JqZWN0KGRhdGVfdXRpbF9bXCJpc0RhdGVcIl0pKG5ld1ZhbFsxXSkgPyBuZXcgRGF0ZShuZXdWYWxbMV0pIDogbnVsbDtcbiAgICAgICAgaWYgKHRoaXMubWluRGF0ZSkge1xuICAgICAgICAgIHRoaXMubGVmdERhdGUgPSB0aGlzLm1pbkRhdGU7XG4gICAgICAgICAgaWYgKHRoaXMudW5saW5rUGFuZWxzICYmIHRoaXMubWF4RGF0ZSkge1xuICAgICAgICAgICAgdmFyIG1pbkRhdGVZZWFyID0gdGhpcy5taW5EYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgICAgICB2YXIgbWF4RGF0ZVllYXIgPSB0aGlzLm1heERhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgICAgIHRoaXMucmlnaHREYXRlID0gbWluRGF0ZVllYXIgPT09IG1heERhdGVZZWFyID8gT2JqZWN0KGRhdGVfdXRpbF9bXCJuZXh0WWVhclwiXSkodGhpcy5tYXhEYXRlKSA6IHRoaXMubWF4RGF0ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yaWdodERhdGUgPSBPYmplY3QoZGF0ZV91dGlsX1tcIm5leHRZZWFyXCJdKSh0aGlzLmxlZnREYXRlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5sZWZ0RGF0ZSA9IG1vbnRoX3JhbmdldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfY2FsY0RlZmF1bHRWYWx1ZSh0aGlzLmRlZmF1bHRWYWx1ZSlbMF07XG4gICAgICAgICAgdGhpcy5yaWdodERhdGUgPSBPYmplY3QoZGF0ZV91dGlsX1tcIm5leHRZZWFyXCJdKSh0aGlzLmxlZnREYXRlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgZGVmYXVsdFZhbHVlOiBmdW5jdGlvbiBkZWZhdWx0VmFsdWUodmFsKSB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkpIHtcbiAgICAgICAgdmFyIF9jYWxjRGVmYXVsdFZhbHVlID0gbW9udGhfcmFuZ2V2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19jYWxjRGVmYXVsdFZhbHVlKHZhbCksXG4gICAgICAgICAgICBsZWZ0ID0gX2NhbGNEZWZhdWx0VmFsdWVbMF0sXG4gICAgICAgICAgICByaWdodCA9IF9jYWxjRGVmYXVsdFZhbHVlWzFdO1xuXG4gICAgICAgIHRoaXMubGVmdERhdGUgPSBsZWZ0O1xuICAgICAgICB0aGlzLnJpZ2h0RGF0ZSA9IHZhbCAmJiB2YWxbMV0gJiYgbGVmdC5nZXRGdWxsWWVhcigpICE9PSByaWdodC5nZXRGdWxsWWVhcigpICYmIHRoaXMudW5saW5rUGFuZWxzID8gcmlnaHQgOiBPYmplY3QoZGF0ZV91dGlsX1tcIm5leHRZZWFyXCJdKSh0aGlzLmxlZnREYXRlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGhhbmRsZUNsZWFyOiBmdW5jdGlvbiBoYW5kbGVDbGVhcigpIHtcbiAgICAgIHRoaXMubWluRGF0ZSA9IG51bGw7XG4gICAgICB0aGlzLm1heERhdGUgPSBudWxsO1xuICAgICAgdGhpcy5sZWZ0RGF0ZSA9IG1vbnRoX3JhbmdldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfY2FsY0RlZmF1bHRWYWx1ZSh0aGlzLmRlZmF1bHRWYWx1ZSlbMF07XG4gICAgICB0aGlzLnJpZ2h0RGF0ZSA9IE9iamVjdChkYXRlX3V0aWxfW1wibmV4dFllYXJcIl0pKHRoaXMubGVmdERhdGUpO1xuICAgICAgdGhpcy4kZW1pdCgncGljaycsIG51bGwpO1xuICAgIH0sXG4gICAgaGFuZGxlQ2hhbmdlUmFuZ2U6IGZ1bmN0aW9uIGhhbmRsZUNoYW5nZVJhbmdlKHZhbCkge1xuICAgICAgdGhpcy5taW5EYXRlID0gdmFsLm1pbkRhdGU7XG4gICAgICB0aGlzLm1heERhdGUgPSB2YWwubWF4RGF0ZTtcbiAgICAgIHRoaXMucmFuZ2VTdGF0ZSA9IHZhbC5yYW5nZVN0YXRlO1xuICAgIH0sXG4gICAgaGFuZGxlUmFuZ2VQaWNrOiBmdW5jdGlvbiBoYW5kbGVSYW5nZVBpY2sodmFsKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICB2YXIgY2xvc2UgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHRydWU7XG5cbiAgICAgIHZhciBkZWZhdWx0VGltZSA9IHRoaXMuZGVmYXVsdFRpbWUgfHwgW107XG4gICAgICB2YXIgbWluRGF0ZSA9IE9iamVjdChkYXRlX3V0aWxfW1wibW9kaWZ5V2l0aFRpbWVTdHJpbmdcIl0pKHZhbC5taW5EYXRlLCBkZWZhdWx0VGltZVswXSk7XG4gICAgICB2YXIgbWF4RGF0ZSA9IE9iamVjdChkYXRlX3V0aWxfW1wibW9kaWZ5V2l0aFRpbWVTdHJpbmdcIl0pKHZhbC5tYXhEYXRlLCBkZWZhdWx0VGltZVsxXSk7XG4gICAgICBpZiAodGhpcy5tYXhEYXRlID09PSBtYXhEYXRlICYmIHRoaXMubWluRGF0ZSA9PT0gbWluRGF0ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLm9uUGljayAmJiB0aGlzLm9uUGljayh2YWwpO1xuICAgICAgdGhpcy5tYXhEYXRlID0gbWF4RGF0ZTtcbiAgICAgIHRoaXMubWluRGF0ZSA9IG1pbkRhdGU7XG5cbiAgICAgIC8vIHdvcmthcm91bmQgZm9yIGh0dHBzOi8vZ2l0aHViLmNvbS9FbGVtZUZFL2VsZW1lbnQvaXNzdWVzLzc1MzksIHNob3VsZCByZW1vdmUgdGhpcyBibG9jayB3aGVuIHdlIGRvbid0IGhhdmUgdG8gY2FyZSBhYm91dCBDaHJvbWl1bSA1NSAtIDU3XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMubWF4RGF0ZSA9IG1heERhdGU7XG4gICAgICAgIF90aGlzLm1pbkRhdGUgPSBtaW5EYXRlO1xuICAgICAgfSwgMTApO1xuICAgICAgaWYgKCFjbG9zZSkgcmV0dXJuO1xuICAgICAgdGhpcy5oYW5kbGVDb25maXJtKCk7XG4gICAgfSxcbiAgICBoYW5kbGVTaG9ydGN1dENsaWNrOiBmdW5jdGlvbiBoYW5kbGVTaG9ydGN1dENsaWNrKHNob3J0Y3V0KSB7XG4gICAgICBpZiAoc2hvcnRjdXQub25DbGljaykge1xuICAgICAgICBzaG9ydGN1dC5vbkNsaWNrKHRoaXMpO1xuICAgICAgfVxuICAgIH0sXG5cblxuICAgIC8vIGxlZnRQcmV2KiwgcmlnaHROZXh0KiBuZWVkIHRvIHRha2UgY2FyZSBvZiBgdW5saW5rUGFuZWxzYFxuICAgIGxlZnRQcmV2WWVhcjogZnVuY3Rpb24gbGVmdFByZXZZZWFyKCkge1xuICAgICAgdGhpcy5sZWZ0RGF0ZSA9IE9iamVjdChkYXRlX3V0aWxfW1wicHJldlllYXJcIl0pKHRoaXMubGVmdERhdGUpO1xuICAgICAgaWYgKCF0aGlzLnVubGlua1BhbmVscykge1xuICAgICAgICB0aGlzLnJpZ2h0RGF0ZSA9IE9iamVjdChkYXRlX3V0aWxfW1wicHJldlllYXJcIl0pKHRoaXMucmlnaHREYXRlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHJpZ2h0TmV4dFllYXI6IGZ1bmN0aW9uIHJpZ2h0TmV4dFllYXIoKSB7XG4gICAgICBpZiAoIXRoaXMudW5saW5rUGFuZWxzKSB7XG4gICAgICAgIHRoaXMubGVmdERhdGUgPSBPYmplY3QoZGF0ZV91dGlsX1tcIm5leHRZZWFyXCJdKSh0aGlzLmxlZnREYXRlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucmlnaHREYXRlID0gT2JqZWN0KGRhdGVfdXRpbF9bXCJuZXh0WWVhclwiXSkodGhpcy5yaWdodERhdGUpO1xuICAgIH0sXG5cblxuICAgIC8vIGxlZnROZXh0KiwgcmlnaHRQcmV2KiBhcmUgY2FsbGVkIHdoZW4gYHVubGlua1BhbmVsc2AgaXMgdHJ1ZVxuICAgIGxlZnROZXh0WWVhcjogZnVuY3Rpb24gbGVmdE5leHRZZWFyKCkge1xuICAgICAgdGhpcy5sZWZ0RGF0ZSA9IE9iamVjdChkYXRlX3V0aWxfW1wibmV4dFllYXJcIl0pKHRoaXMubGVmdERhdGUpO1xuICAgIH0sXG4gICAgcmlnaHRQcmV2WWVhcjogZnVuY3Rpb24gcmlnaHRQcmV2WWVhcigpIHtcbiAgICAgIHRoaXMucmlnaHREYXRlID0gT2JqZWN0KGRhdGVfdXRpbF9bXCJwcmV2WWVhclwiXSkodGhpcy5yaWdodERhdGUpO1xuICAgIH0sXG4gICAgaGFuZGxlQ29uZmlybTogZnVuY3Rpb24gaGFuZGxlQ29uZmlybSgpIHtcbiAgICAgIHZhciB2aXNpYmxlID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBmYWxzZTtcblxuICAgICAgaWYgKHRoaXMuaXNWYWxpZFZhbHVlKFt0aGlzLm1pbkRhdGUsIHRoaXMubWF4RGF0ZV0pKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3BpY2snLCBbdGhpcy5taW5EYXRlLCB0aGlzLm1heERhdGVdLCB2aXNpYmxlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGlzVmFsaWRWYWx1ZTogZnVuY3Rpb24gaXNWYWxpZFZhbHVlKHZhbHVlKSB7XG4gICAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUgJiYgdmFsdWVbMF0gJiYgdmFsdWVbMV0gJiYgT2JqZWN0KGRhdGVfdXRpbF9bXCJpc0RhdGVcIl0pKHZhbHVlWzBdKSAmJiBPYmplY3QoZGF0ZV91dGlsX1tcImlzRGF0ZVwiXSkodmFsdWVbMV0pICYmIHZhbHVlWzBdLmdldFRpbWUoKSA8PSB2YWx1ZVsxXS5nZXRUaW1lKCkgJiYgKHR5cGVvZiB0aGlzLmRpc2FibGVkRGF0ZSA9PT0gJ2Z1bmN0aW9uJyA/ICF0aGlzLmRpc2FibGVkRGF0ZSh2YWx1ZVswXSkgJiYgIXRoaXMuZGlzYWJsZWREYXRlKHZhbHVlWzFdKSA6IHRydWUpO1xuICAgIH0sXG4gICAgcmVzZXRWaWV3OiBmdW5jdGlvbiByZXNldFZpZXcoKSB7XG4gICAgICAvLyBOT1RFOiB0aGlzIGlzIGEgaGFjayB0byByZXNldCB7bWluLCBtYXh9RGF0ZSBvbiBwaWNrZXIgb3Blbi5cbiAgICAgIC8vIFRPRE86IGNvcnJlY3Qgd2F5IG9mIGRvaW5nIHNvIGlzIHRvIHJlZmFjdG9yIHttaW4sIG1heH1EYXRlIHRvIGJlIGRlcGVuZGVudCBvbiB2YWx1ZSBhbmQgaW50ZXJuYWwgc2VsZWN0aW9uIHN0YXRlXG4gICAgICAvLyAgICAgICBhbiBhbHRlcm5hdGl2ZSB3b3VsZCBiZSByZXNldFZpZXcgd2hlbmV2ZXIgcGlja2VyIGJlY29tZXMgdmlzaWJsZSwgc2hvdWxkIGFsc28gaW52ZXN0aWdhdGUgZGF0ZS1wYW5lbCdzIHJlc2V0Vmlld1xuICAgICAgdGhpcy5taW5EYXRlID0gdGhpcy52YWx1ZSAmJiBPYmplY3QoZGF0ZV91dGlsX1tcImlzRGF0ZVwiXSkodGhpcy52YWx1ZVswXSkgPyBuZXcgRGF0ZSh0aGlzLnZhbHVlWzBdKSA6IG51bGw7XG4gICAgICB0aGlzLm1heERhdGUgPSB0aGlzLnZhbHVlICYmIE9iamVjdChkYXRlX3V0aWxfW1wiaXNEYXRlXCJdKSh0aGlzLnZhbHVlWzBdKSA/IG5ldyBEYXRlKHRoaXMudmFsdWVbMV0pIDogbnVsbDtcbiAgICB9XG4gIH0sXG5cbiAgY29tcG9uZW50czogeyBNb250aFRhYmxlOiBtb250aF90YWJsZSwgRWxJbnB1dDogaW5wdXRfZGVmYXVsdC5hLCBFbEJ1dHRvbjogYnV0dG9uX2RlZmF1bHQuYSB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZGF0ZS1waWNrZXIvc3JjL3BhbmVsL21vbnRoLXJhbmdlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYW5lbF9tb250aF9yYW5nZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChtb250aF9yYW5nZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9kYXRlLXBpY2tlci9zcmMvcGFuZWwvbW9udGgtcmFuZ2UudnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgbW9udGhfcmFuZ2VfY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBwYW5lbF9tb250aF9yYW5nZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgbW9udGhfcmFuZ2V2dWVfdHlwZV90ZW1wbGF0ZV9pZF9mMjY0NWZiOF9yZW5kZXIsXG4gIG1vbnRoX3JhbmdldnVlX3R5cGVfdGVtcGxhdGVfaWRfZjI2NDVmYjhfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBtb250aF9yYW5nZV9hcGk7IH1cbm1vbnRoX3JhbmdlX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvZGF0ZS1waWNrZXIvc3JjL3BhbmVsL21vbnRoLXJhbmdlLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBtb250aF9yYW5nZSA9IChtb250aF9yYW5nZV9jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9waWNrZXIvZGF0ZS1waWNrZXIuanNcblxuXG5cblxuXG52YXIgZGF0ZV9waWNrZXJfZ2V0UGFuZWwgPSBmdW5jdGlvbiBnZXRQYW5lbCh0eXBlKSB7XG4gIGlmICh0eXBlID09PSAnZGF0ZXJhbmdlJyB8fCB0eXBlID09PSAnZGF0ZXRpbWVyYW5nZScpIHtcbiAgICByZXR1cm4gZGF0ZV9yYW5nZTtcbiAgfSBlbHNlIGlmICh0eXBlID09PSAnbW9udGhyYW5nZScpIHtcbiAgICByZXR1cm4gbW9udGhfcmFuZ2U7XG4gIH1cbiAgcmV0dXJuIHBhbmVsX2RhdGU7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBkYXRlX3BpY2tlciA9ICh7XG4gIG1peGluczogW3BpY2tlcl0sXG5cbiAgbmFtZTogJ0VsRGF0ZVBpY2tlcicsXG5cbiAgcHJvcHM6IHtcbiAgICB0eXBlOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnZGF0ZSdcbiAgICB9LFxuICAgIHRpbWVBcnJvd0NvbnRyb2w6IEJvb2xlYW5cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHR5cGU6IGZ1bmN0aW9uIHR5cGUoX3R5cGUpIHtcbiAgICAgIGlmICh0aGlzLnBpY2tlcikge1xuICAgICAgICB0aGlzLnVubW91bnRQaWNrZXIoKTtcbiAgICAgICAgdGhpcy5wYW5lbCA9IGRhdGVfcGlja2VyX2dldFBhbmVsKF90eXBlKTtcbiAgICAgICAgdGhpcy5tb3VudFBpY2tlcigpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wYW5lbCA9IGRhdGVfcGlja2VyX2dldFBhbmVsKF90eXBlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZDogZnVuY3Rpb24gY3JlYXRlZCgpIHtcbiAgICB0aGlzLnBhbmVsID0gZGF0ZV9waWNrZXJfZ2V0UGFuZWwodGhpcy50eXBlKTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2RhdGUtcGlja2VyL2luZGV4LmpzXG5cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmRhdGVfcGlja2VyLmluc3RhbGwgPSBmdW5jdGlvbiBpbnN0YWxsKFZ1ZSkge1xuICBWdWUuY29tcG9uZW50KGRhdGVfcGlja2VyLm5hbWUsIGRhdGVfcGlja2VyKTtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhY2thZ2VzX2RhdGVfcGlja2VyID0gKGRhdGVfcGlja2VyKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvZGF0ZS1waWNrZXIvc3JjL3BhbmVsL3RpbWUtc2VsZWN0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01MWFiOTMyMCZcbnZhciB0aW1lX3NlbGVjdHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzUxYWI5MzIwX3JlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcInRyYW5zaXRpb25cIixcbiAgICB7XG4gICAgICBhdHRyczogeyBuYW1lOiBcImVsLXpvb20taW4tdG9wXCIgfSxcbiAgICAgIG9uOiB7XG4gICAgICAgIFwiYmVmb3JlLWVudGVyXCI6IF92bS5oYW5kbGVNZW51RW50ZXIsXG4gICAgICAgIFwiYWZ0ZXItbGVhdmVcIjogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgX3ZtLiRlbWl0KFwiZG9kZXN0cm95XCIpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIF9jKFxuICAgICAgICBcImRpdlwiLFxuICAgICAgICB7XG4gICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgICAgdmFsdWU6IF92bS52aXNpYmxlLFxuICAgICAgICAgICAgICBleHByZXNzaW9uOiBcInZpc2libGVcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIF0sXG4gICAgICAgICAgcmVmOiBcInBvcHBlclwiLFxuICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXBpY2tlci1wYW5lbCB0aW1lLXNlbGVjdCBlbC1wb3BwZXJcIixcbiAgICAgICAgICBjbGFzczogX3ZtLnBvcHBlckNsYXNzLFxuICAgICAgICAgIHN0eWxlOiB7IHdpZHRoOiBfdm0ud2lkdGggKyBcInB4XCIgfVxuICAgICAgICB9LFxuICAgICAgICBbXG4gICAgICAgICAgX2MoXG4gICAgICAgICAgICBcImVsLXNjcm9sbGJhclwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBhdHRyczogeyBub3Jlc2l6ZTogXCJcIiwgXCJ3cmFwLWNsYXNzXCI6IFwiZWwtcGlja2VyLXBhbmVsX19jb250ZW50XCIgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF92bS5fbChfdm0uaXRlbXMsIGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICAgICAgICAgICAgcmV0dXJuIF9jKFxuICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAga2V5OiBpdGVtLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwidGltZS1zZWxlY3QtaXRlbVwiLFxuICAgICAgICAgICAgICAgICAgY2xhc3M6IHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IF92bS52YWx1ZSA9PT0gaXRlbS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGl0ZW0uZGlzYWJsZWQsXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGl0ZW0udmFsdWUgPT09IF92bS5kZWZhdWx0VmFsdWVcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBhdHRyczogeyBkaXNhYmxlZDogaXRlbS5kaXNhYmxlZCB9LFxuICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgIF92bS5oYW5kbGVDbGljayhpdGVtKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbX3ZtLl92KF92bS5fcyhpdGVtLnZhbHVlKSldXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgMFxuICAgICAgICAgIClcbiAgICAgICAgXSxcbiAgICAgICAgMVxuICAgICAgKVxuICAgIF1cbiAgKVxufVxudmFyIHRpbWVfc2VsZWN0dnVlX3R5cGVfdGVtcGxhdGVfaWRfNTFhYjkzMjBfc3RhdGljUmVuZGVyRm5zID0gW11cbnRpbWVfc2VsZWN0dnVlX3R5cGVfdGVtcGxhdGVfaWRfNTFhYjkzMjBfcmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9kYXRlLXBpY2tlci9zcmMvcGFuZWwvdGltZS1zZWxlY3QudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTUxYWI5MzIwJlxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9kYXRlLXBpY2tlci9zcmMvcGFuZWwvdGltZS1zZWxlY3QudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cblxuXG5cbnZhciBwYXJzZVRpbWUgPSBmdW5jdGlvbiBwYXJzZVRpbWUodGltZSkge1xuICB2YXIgdmFsdWVzID0gKHRpbWUgfHwgJycpLnNwbGl0KCc6Jyk7XG4gIGlmICh2YWx1ZXMubGVuZ3RoID49IDIpIHtcbiAgICB2YXIgaG91cnMgPSBwYXJzZUludCh2YWx1ZXNbMF0sIDEwKTtcbiAgICB2YXIgbWludXRlcyA9IHBhcnNlSW50KHZhbHVlc1sxXSwgMTApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGhvdXJzOiBob3VycyxcbiAgICAgIG1pbnV0ZXM6IG1pbnV0ZXNcbiAgICB9O1xuICB9XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIHJldHVybiBudWxsO1xufTtcblxudmFyIGNvbXBhcmVUaW1lID0gZnVuY3Rpb24gY29tcGFyZVRpbWUodGltZTEsIHRpbWUyKSB7XG4gIHZhciB2YWx1ZTEgPSBwYXJzZVRpbWUodGltZTEpO1xuICB2YXIgdmFsdWUyID0gcGFyc2VUaW1lKHRpbWUyKTtcblxuICB2YXIgbWludXRlczEgPSB2YWx1ZTEubWludXRlcyArIHZhbHVlMS5ob3VycyAqIDYwO1xuICB2YXIgbWludXRlczIgPSB2YWx1ZTIubWludXRlcyArIHZhbHVlMi5ob3VycyAqIDYwO1xuXG4gIGlmIChtaW51dGVzMSA9PT0gbWludXRlczIpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIHJldHVybiBtaW51dGVzMSA+IG1pbnV0ZXMyID8gMSA6IC0xO1xufTtcblxudmFyIGZvcm1hdFRpbWUgPSBmdW5jdGlvbiBmb3JtYXRUaW1lKHRpbWUpIHtcbiAgcmV0dXJuICh0aW1lLmhvdXJzIDwgMTAgPyAnMCcgKyB0aW1lLmhvdXJzIDogdGltZS5ob3VycykgKyAnOicgKyAodGltZS5taW51dGVzIDwgMTAgPyAnMCcgKyB0aW1lLm1pbnV0ZXMgOiB0aW1lLm1pbnV0ZXMpO1xufTtcblxudmFyIG5leHRUaW1lID0gZnVuY3Rpb24gbmV4dFRpbWUodGltZSwgc3RlcCkge1xuICB2YXIgdGltZVZhbHVlID0gcGFyc2VUaW1lKHRpbWUpO1xuICB2YXIgc3RlcFZhbHVlID0gcGFyc2VUaW1lKHN0ZXApO1xuXG4gIHZhciBuZXh0ID0ge1xuICAgIGhvdXJzOiB0aW1lVmFsdWUuaG91cnMsXG4gICAgbWludXRlczogdGltZVZhbHVlLm1pbnV0ZXNcbiAgfTtcblxuICBuZXh0Lm1pbnV0ZXMgKz0gc3RlcFZhbHVlLm1pbnV0ZXM7XG4gIG5leHQuaG91cnMgKz0gc3RlcFZhbHVlLmhvdXJzO1xuXG4gIG5leHQuaG91cnMgKz0gTWF0aC5mbG9vcihuZXh0Lm1pbnV0ZXMgLyA2MCk7XG4gIG5leHQubWludXRlcyA9IG5leHQubWludXRlcyAlIDYwO1xuXG4gIHJldHVybiBmb3JtYXRUaW1lKG5leHQpO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgdGltZV9zZWxlY3R2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBjb21wb25lbnRzOiB7IEVsU2Nyb2xsYmFyOiBzY3JvbGxiYXJfZGVmYXVsdC5hIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICB2YWx1ZTogZnVuY3Rpb24gdmFsdWUodmFsKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICBpZiAoIXZhbCkgcmV0dXJuO1xuICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gX3RoaXMuc2Nyb2xsVG9PcHRpb24oKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgaGFuZGxlQ2xpY2s6IGZ1bmN0aW9uIGhhbmRsZUNsaWNrKGl0ZW0pIHtcbiAgICAgIGlmICghaXRlbS5kaXNhYmxlZCkge1xuICAgICAgICB0aGlzLiRlbWl0KCdwaWNrJywgaXRlbS52YWx1ZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBoYW5kbGVDbGVhcjogZnVuY3Rpb24gaGFuZGxlQ2xlYXIoKSB7XG4gICAgICB0aGlzLiRlbWl0KCdwaWNrJywgbnVsbCk7XG4gICAgfSxcbiAgICBzY3JvbGxUb09wdGlvbjogZnVuY3Rpb24gc2Nyb2xsVG9PcHRpb24oKSB7XG4gICAgICB2YXIgc2VsZWN0b3IgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6ICcuc2VsZWN0ZWQnO1xuXG4gICAgICB2YXIgbWVudSA9IHRoaXMuJHJlZnMucG9wcGVyLnF1ZXJ5U2VsZWN0b3IoJy5lbC1waWNrZXItcGFuZWxfX2NvbnRlbnQnKTtcbiAgICAgIHNjcm9sbF9pbnRvX3ZpZXdfZGVmYXVsdCgpKG1lbnUsIG1lbnUucXVlcnlTZWxlY3RvcihzZWxlY3RvcikpO1xuICAgIH0sXG4gICAgaGFuZGxlTWVudUVudGVyOiBmdW5jdGlvbiBoYW5kbGVNZW51RW50ZXIoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgdmFyIHNlbGVjdGVkID0gdGhpcy5pdGVtcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0udmFsdWU7XG4gICAgICB9KS5pbmRleE9mKHRoaXMudmFsdWUpICE9PSAtMTtcbiAgICAgIHZhciBoYXNEZWZhdWx0ID0gdGhpcy5pdGVtcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0udmFsdWU7XG4gICAgICB9KS5pbmRleE9mKHRoaXMuZGVmYXVsdFZhbHVlKSAhPT0gLTE7XG4gICAgICB2YXIgb3B0aW9uID0gc2VsZWN0ZWQgJiYgJy5zZWxlY3RlZCcgfHwgaGFzRGVmYXVsdCAmJiAnLmRlZmF1bHQnIHx8ICcudGltZS1zZWxlY3QtaXRlbTpub3QoLmRpc2FibGVkKSc7XG4gICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBfdGhpczIuc2Nyb2xsVG9PcHRpb24ob3B0aW9uKTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgc2Nyb2xsRG93bjogZnVuY3Rpb24gc2Nyb2xsRG93bihzdGVwKSB7XG4gICAgICB2YXIgaXRlbXMgPSB0aGlzLml0ZW1zO1xuICAgICAgdmFyIGxlbmd0aCA9IGl0ZW1zLmxlbmd0aDtcbiAgICAgIHZhciB0b3RhbCA9IGl0ZW1zLmxlbmd0aDtcbiAgICAgIHZhciBpbmRleCA9IGl0ZW1zLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICByZXR1cm4gaXRlbS52YWx1ZTtcbiAgICAgIH0pLmluZGV4T2YodGhpcy52YWx1ZSk7XG4gICAgICB3aGlsZSAodG90YWwtLSkge1xuICAgICAgICBpbmRleCA9IChpbmRleCArIHN0ZXAgKyBsZW5ndGgpICUgbGVuZ3RoO1xuICAgICAgICBpZiAoIWl0ZW1zW2luZGV4XS5kaXNhYmxlZCkge1xuICAgICAgICAgIHRoaXMuJGVtaXQoJ3BpY2snLCBpdGVtc1tpbmRleF0udmFsdWUsIHRydWUpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgaXNWYWxpZFZhbHVlOiBmdW5jdGlvbiBpc1ZhbGlkVmFsdWUoZGF0ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuaXRlbXMuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIHJldHVybiAhaXRlbS5kaXNhYmxlZDtcbiAgICAgIH0pLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICByZXR1cm4gaXRlbS52YWx1ZTtcbiAgICAgIH0pLmluZGV4T2YoZGF0ZSkgIT09IC0xO1xuICAgIH0sXG4gICAgaGFuZGxlS2V5ZG93bjogZnVuY3Rpb24gaGFuZGxlS2V5ZG93bihldmVudCkge1xuICAgICAgdmFyIGtleUNvZGUgPSBldmVudC5rZXlDb2RlO1xuICAgICAgaWYgKGtleUNvZGUgPT09IDM4IHx8IGtleUNvZGUgPT09IDQwKSB7XG4gICAgICAgIHZhciBtYXBwaW5nID0geyA0MDogMSwgMzg6IC0xIH07XG4gICAgICAgIHZhciBvZmZzZXQgPSBtYXBwaW5nW2tleUNvZGUudG9TdHJpbmcoKV07XG4gICAgICAgIHRoaXMuc2Nyb2xsRG93bihvZmZzZXQpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBwb3BwZXJDbGFzczogJycsXG4gICAgICBzdGFydDogJzA5OjAwJyxcbiAgICAgIGVuZDogJzE4OjAwJyxcbiAgICAgIHN0ZXA6ICcwMDozMCcsXG4gICAgICB2YWx1ZTogJycsXG4gICAgICBkZWZhdWx0VmFsdWU6ICcnLFxuICAgICAgdmlzaWJsZTogZmFsc2UsXG4gICAgICBtaW5UaW1lOiAnJyxcbiAgICAgIG1heFRpbWU6ICcnLFxuICAgICAgd2lkdGg6IDBcbiAgICB9O1xuICB9LFxuXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBpdGVtczogZnVuY3Rpb24gaXRlbXMoKSB7XG4gICAgICB2YXIgc3RhcnQgPSB0aGlzLnN0YXJ0O1xuICAgICAgdmFyIGVuZCA9IHRoaXMuZW5kO1xuICAgICAgdmFyIHN0ZXAgPSB0aGlzLnN0ZXA7XG5cbiAgICAgIHZhciByZXN1bHQgPSBbXTtcblxuICAgICAgaWYgKHN0YXJ0ICYmIGVuZCAmJiBzdGVwKSB7XG4gICAgICAgIHZhciBjdXJyZW50ID0gc3RhcnQ7XG4gICAgICAgIHdoaWxlIChjb21wYXJlVGltZShjdXJyZW50LCBlbmQpIDw9IDApIHtcbiAgICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgICB2YWx1ZTogY3VycmVudCxcbiAgICAgICAgICAgIGRpc2FibGVkOiBjb21wYXJlVGltZShjdXJyZW50LCB0aGlzLm1pblRpbWUgfHwgJy0xOi0xJykgPD0gMCB8fCBjb21wYXJlVGltZShjdXJyZW50LCB0aGlzLm1heFRpbWUgfHwgJzEwMDoxMDAnKSA+PSAwXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY3VycmVudCA9IG5leHRUaW1lKGN1cnJlbnQsIHN0ZXApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZGF0ZS1waWNrZXIvc3JjL3BhbmVsL3RpbWUtc2VsZWN0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYW5lbF90aW1lX3NlbGVjdHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh0aW1lX3NlbGVjdHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9kYXRlLXBpY2tlci9zcmMvcGFuZWwvdGltZS1zZWxlY3QudnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgdGltZV9zZWxlY3RfY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBwYW5lbF90aW1lX3NlbGVjdHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgdGltZV9zZWxlY3R2dWVfdHlwZV90ZW1wbGF0ZV9pZF81MWFiOTMyMF9yZW5kZXIsXG4gIHRpbWVfc2VsZWN0dnVlX3R5cGVfdGVtcGxhdGVfaWRfNTFhYjkzMjBfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciB0aW1lX3NlbGVjdF9hcGk7IH1cbnRpbWVfc2VsZWN0X2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvZGF0ZS1waWNrZXIvc3JjL3BhbmVsL3RpbWUtc2VsZWN0LnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciB0aW1lX3NlbGVjdCA9ICh0aW1lX3NlbGVjdF9jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9waWNrZXIvdGltZS1zZWxlY3QuanNcblxuXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBpY2tlcl90aW1lX3NlbGVjdCA9ICh7XG4gIG1peGluczogW3BpY2tlcl0sXG5cbiAgbmFtZTogJ0VsVGltZVNlbGVjdCcsXG5cbiAgY29tcG9uZW50TmFtZTogJ0VsVGltZVNlbGVjdCcsXG5cbiAgcHJvcHM6IHtcbiAgICB0eXBlOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAndGltZS1zZWxlY3QnXG4gICAgfVxuICB9LFxuXG4gIGJlZm9yZUNyZWF0ZTogZnVuY3Rpb24gYmVmb3JlQ3JlYXRlKCkge1xuICAgIHRoaXMucGFuZWwgPSB0aW1lX3NlbGVjdDtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3RpbWUtc2VsZWN0L2luZGV4LmpzXG5cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbnBpY2tlcl90aW1lX3NlbGVjdC5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuICBWdWUuY29tcG9uZW50KHBpY2tlcl90aW1lX3NlbGVjdC5uYW1lLCBwaWNrZXJfdGltZV9zZWxlY3QpO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcGFja2FnZXNfdGltZV9zZWxlY3QgPSAocGlja2VyX3RpbWVfc2VsZWN0KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvZGF0ZS1waWNrZXIvc3JjL3BhbmVsL3RpbWUtcmFuZ2UudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWZiMjg2NjBlJlxudmFyIHRpbWVfcmFuZ2V2dWVfdHlwZV90ZW1wbGF0ZV9pZF9mYjI4NjYwZV9yZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJ0cmFuc2l0aW9uXCIsXG4gICAge1xuICAgICAgYXR0cnM6IHsgbmFtZTogXCJlbC16b29tLWluLXRvcFwiIH0sXG4gICAgICBvbjoge1xuICAgICAgICBcImFmdGVyLWxlYXZlXCI6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgIF92bS4kZW1pdChcImRvZGVzdHJveVwiKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICBfYyhcbiAgICAgICAgXCJkaXZcIixcbiAgICAgICAge1xuICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgIHZhbHVlOiBfdm0udmlzaWJsZSxcbiAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJ2aXNpYmxlXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdLFxuICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXRpbWUtcmFuZ2UtcGlja2VyIGVsLXBpY2tlci1wYW5lbCBlbC1wb3BwZXJcIixcbiAgICAgICAgICBjbGFzczogX3ZtLnBvcHBlckNsYXNzXG4gICAgICAgIH0sXG4gICAgICAgIFtcbiAgICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLXRpbWUtcmFuZ2UtcGlja2VyX19jb250ZW50XCIgfSwgW1xuICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJlbC10aW1lLXJhbmdlLXBpY2tlcl9fY2VsbFwiIH0sIFtcbiAgICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJlbC10aW1lLXJhbmdlLXBpY2tlcl9faGVhZGVyXCIgfSwgW1xuICAgICAgICAgICAgICAgIF92bS5fdihfdm0uX3MoX3ZtLnQoXCJlbC5kYXRlcGlja2VyLnN0YXJ0VGltZVwiKSkpXG4gICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOlxuICAgICAgICAgICAgICAgICAgICBcImVsLXRpbWUtcmFuZ2UtcGlja2VyX19ib2R5IGVsLXRpbWUtcGFuZWxfX2NvbnRlbnRcIixcbiAgICAgICAgICAgICAgICAgIGNsYXNzOiB7XG4gICAgICAgICAgICAgICAgICAgIFwiaGFzLXNlY29uZHNcIjogX3ZtLnNob3dTZWNvbmRzLFxuICAgICAgICAgICAgICAgICAgICBcImlzLWFycm93XCI6IF92bS5hcnJvd0NvbnRyb2xcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgIF9jKFwidGltZS1zcGlubmVyXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgcmVmOiBcIm1pblNwaW5uZXJcIixcbiAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICBcInNob3ctc2Vjb25kc1wiOiBfdm0uc2hvd1NlY29uZHMsXG4gICAgICAgICAgICAgICAgICAgICAgXCJhbS1wbS1tb2RlXCI6IF92bS5hbVBtTW9kZSxcbiAgICAgICAgICAgICAgICAgICAgICBcImFycm93LWNvbnRyb2xcIjogX3ZtLmFycm93Q29udHJvbCxcbiAgICAgICAgICAgICAgICAgICAgICBkYXRlOiBfdm0ubWluRGF0ZVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZTogX3ZtLmhhbmRsZU1pbkNoYW5nZSxcbiAgICAgICAgICAgICAgICAgICAgICBcInNlbGVjdC1yYW5nZVwiOiBfdm0uc2V0TWluU2VsZWN0aW9uUmFuZ2VcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLXRpbWUtcmFuZ2UtcGlja2VyX19jZWxsXCIgfSwgW1xuICAgICAgICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLXRpbWUtcmFuZ2UtcGlja2VyX19oZWFkZXJcIiB9LCBbXG4gICAgICAgICAgICAgICAgX3ZtLl92KF92bS5fcyhfdm0udChcImVsLmRhdGVwaWNrZXIuZW5kVGltZVwiKSkpXG4gICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOlxuICAgICAgICAgICAgICAgICAgICBcImVsLXRpbWUtcmFuZ2UtcGlja2VyX19ib2R5IGVsLXRpbWUtcGFuZWxfX2NvbnRlbnRcIixcbiAgICAgICAgICAgICAgICAgIGNsYXNzOiB7XG4gICAgICAgICAgICAgICAgICAgIFwiaGFzLXNlY29uZHNcIjogX3ZtLnNob3dTZWNvbmRzLFxuICAgICAgICAgICAgICAgICAgICBcImlzLWFycm93XCI6IF92bS5hcnJvd0NvbnRyb2xcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgIF9jKFwidGltZS1zcGlubmVyXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgcmVmOiBcIm1heFNwaW5uZXJcIixcbiAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICBcInNob3ctc2Vjb25kc1wiOiBfdm0uc2hvd1NlY29uZHMsXG4gICAgICAgICAgICAgICAgICAgICAgXCJhbS1wbS1tb2RlXCI6IF92bS5hbVBtTW9kZSxcbiAgICAgICAgICAgICAgICAgICAgICBcImFycm93LWNvbnRyb2xcIjogX3ZtLmFycm93Q29udHJvbCxcbiAgICAgICAgICAgICAgICAgICAgICBkYXRlOiBfdm0ubWF4RGF0ZVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZTogX3ZtLmhhbmRsZU1heENoYW5nZSxcbiAgICAgICAgICAgICAgICAgICAgICBcInNlbGVjdC1yYW5nZVwiOiBfdm0uc2V0TWF4U2VsZWN0aW9uUmFuZ2VcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgXSlcbiAgICAgICAgICBdKSxcbiAgICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLXRpbWUtcGFuZWxfX2Zvb3RlclwiIH0sIFtcbiAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICBcImJ1dHRvblwiLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtdGltZS1wYW5lbF9fYnRuIGNhbmNlbFwiLFxuICAgICAgICAgICAgICAgIGF0dHJzOiB7IHR5cGU6IFwiYnV0dG9uXCIgfSxcbiAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICBfdm0uaGFuZGxlQ2FuY2VsKClcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFtfdm0uX3YoX3ZtLl9zKF92bS50KFwiZWwuZGF0ZXBpY2tlci5jYW5jZWxcIikpKV1cbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgXCJidXR0b25cIixcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXRpbWUtcGFuZWxfX2J0biBjb25maXJtXCIsXG4gICAgICAgICAgICAgICAgYXR0cnM6IHsgdHlwZTogXCJidXR0b25cIiwgZGlzYWJsZWQ6IF92bS5idG5EaXNhYmxlZCB9LFxuICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIF92bS5oYW5kbGVDb25maXJtKClcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFtfdm0uX3YoX3ZtLl9zKF92bS50KFwiZWwuZGF0ZXBpY2tlci5jb25maXJtXCIpKSldXG4gICAgICAgICAgICApXG4gICAgICAgICAgXSlcbiAgICAgICAgXVxuICAgICAgKVxuICAgIF1cbiAgKVxufVxudmFyIHRpbWVfcmFuZ2V2dWVfdHlwZV90ZW1wbGF0ZV9pZF9mYjI4NjYwZV9zdGF0aWNSZW5kZXJGbnMgPSBbXVxudGltZV9yYW5nZXZ1ZV90eXBlX3RlbXBsYXRlX2lkX2ZiMjg2NjBlX3JlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZGF0ZS1waWNrZXIvc3JjL3BhbmVsL3RpbWUtcmFuZ2UudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWZiMjg2NjBlJlxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9kYXRlLXBpY2tlci9zcmMvcGFuZWwvdGltZS1yYW5nZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cblxuXG5cblxudmFyIE1JTl9USU1FID0gT2JqZWN0KGRhdGVfdXRpbF9bXCJwYXJzZURhdGVcIl0pKCcwMDowMDowMCcsICdISDptbTpzcycpO1xudmFyIE1BWF9USU1FID0gT2JqZWN0KGRhdGVfdXRpbF9bXCJwYXJzZURhdGVcIl0pKCcyMzo1OTo1OScsICdISDptbTpzcycpO1xuXG52YXIgdGltZV9yYW5nZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX21pblRpbWVPZkRheSA9IGZ1bmN0aW9uIG1pblRpbWVPZkRheShkYXRlKSB7XG4gIHJldHVybiBPYmplY3QoZGF0ZV91dGlsX1tcIm1vZGlmeURhdGVcIl0pKE1JTl9USU1FLCBkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCkpO1xufTtcblxudmFyIHRpbWVfcmFuZ2V2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19tYXhUaW1lT2ZEYXkgPSBmdW5jdGlvbiBtYXhUaW1lT2ZEYXkoZGF0ZSkge1xuICByZXR1cm4gT2JqZWN0KGRhdGVfdXRpbF9bXCJtb2RpZnlEYXRlXCJdKShNQVhfVElNRSwgZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCksIGRhdGUuZ2V0RGF0ZSgpKTtcbn07XG5cbi8vIGluY3JlYXNlIHRpbWUgYnkgYW1vdW50IG9mIG1pbGxpc2Vjb25kcywgYnV0IHdpdGhpbiB0aGUgcmFuZ2Ugb2YgZGF5XG52YXIgYWR2YW5jZVRpbWUgPSBmdW5jdGlvbiBhZHZhbmNlVGltZShkYXRlLCBhbW91bnQpIHtcbiAgcmV0dXJuIG5ldyBEYXRlKE1hdGgubWluKGRhdGUuZ2V0VGltZSgpICsgYW1vdW50LCB0aW1lX3JhbmdldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfbWF4VGltZU9mRGF5KGRhdGUpLmdldFRpbWUoKSkpO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgdGltZV9yYW5nZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG1peGluczogW2xvY2FsZV9kZWZhdWx0LmFdLFxuXG4gIGNvbXBvbmVudHM6IHsgVGltZVNwaW5uZXI6IHRpbWVfc3Bpbm5lciB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc2hvd1NlY29uZHM6IGZ1bmN0aW9uIHNob3dTZWNvbmRzKCkge1xuICAgICAgcmV0dXJuICh0aGlzLmZvcm1hdCB8fCAnJykuaW5kZXhPZignc3MnKSAhPT0gLTE7XG4gICAgfSxcbiAgICBvZmZzZXQ6IGZ1bmN0aW9uIG9mZnNldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNob3dTZWNvbmRzID8gMTEgOiA4O1xuICAgIH0sXG4gICAgc3Bpbm5lcjogZnVuY3Rpb24gc3Bpbm5lcigpIHtcbiAgICAgIHJldHVybiB0aGlzLnNlbGVjdGlvblJhbmdlWzBdIDwgdGhpcy5vZmZzZXQgPyB0aGlzLiRyZWZzLm1pblNwaW5uZXIgOiB0aGlzLiRyZWZzLm1heFNwaW5uZXI7XG4gICAgfSxcbiAgICBidG5EaXNhYmxlZDogZnVuY3Rpb24gYnRuRGlzYWJsZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5taW5EYXRlLmdldFRpbWUoKSA+IHRoaXMubWF4RGF0ZS5nZXRUaW1lKCk7XG4gICAgfSxcbiAgICBhbVBtTW9kZTogZnVuY3Rpb24gYW1QbU1vZGUoKSB7XG4gICAgICBpZiAoKHRoaXMuZm9ybWF0IHx8ICcnKS5pbmRleE9mKCdBJykgIT09IC0xKSByZXR1cm4gJ0EnO1xuICAgICAgaWYgKCh0aGlzLmZvcm1hdCB8fCAnJykuaW5kZXhPZignYScpICE9PSAtMSkgcmV0dXJuICdhJztcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH0sXG5cbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcG9wcGVyQ2xhc3M6ICcnLFxuICAgICAgbWluRGF0ZTogbmV3IERhdGUoKSxcbiAgICAgIG1heERhdGU6IG5ldyBEYXRlKCksXG4gICAgICB2YWx1ZTogW10sXG4gICAgICBvbGRWYWx1ZTogW25ldyBEYXRlKCksIG5ldyBEYXRlKCldLFxuICAgICAgZGVmYXVsdFZhbHVlOiBudWxsLFxuICAgICAgZm9ybWF0OiAnSEg6bW06c3MnLFxuICAgICAgdmlzaWJsZTogZmFsc2UsXG4gICAgICBzZWxlY3Rpb25SYW5nZTogWzAsIDJdLFxuICAgICAgYXJyb3dDb250cm9sOiBmYWxzZVxuICAgIH07XG4gIH0sXG5cblxuICB3YXRjaDoge1xuICAgIHZhbHVlOiBmdW5jdGlvbiB2YWx1ZShfdmFsdWUpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KF92YWx1ZSkpIHtcbiAgICAgICAgdGhpcy5taW5EYXRlID0gbmV3IERhdGUoX3ZhbHVlWzBdKTtcbiAgICAgICAgdGhpcy5tYXhEYXRlID0gbmV3IERhdGUoX3ZhbHVlWzFdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuZGVmYXVsdFZhbHVlKSkge1xuICAgICAgICAgIHRoaXMubWluRGF0ZSA9IG5ldyBEYXRlKHRoaXMuZGVmYXVsdFZhbHVlWzBdKTtcbiAgICAgICAgICB0aGlzLm1heERhdGUgPSBuZXcgRGF0ZSh0aGlzLmRlZmF1bHRWYWx1ZVsxXSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5kZWZhdWx0VmFsdWUpIHtcbiAgICAgICAgICB0aGlzLm1pbkRhdGUgPSBuZXcgRGF0ZSh0aGlzLmRlZmF1bHRWYWx1ZSk7XG4gICAgICAgICAgdGhpcy5tYXhEYXRlID0gYWR2YW5jZVRpbWUobmV3IERhdGUodGhpcy5kZWZhdWx0VmFsdWUpLCA2MCAqIDYwICogMTAwMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5taW5EYXRlID0gbmV3IERhdGUoKTtcbiAgICAgICAgICB0aGlzLm1heERhdGUgPSBhZHZhbmNlVGltZShuZXcgRGF0ZSgpLCA2MCAqIDYwICogMTAwMCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIHZpc2libGU6IGZ1bmN0aW9uIHZpc2libGUodmFsKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICBpZiAodmFsKSB7XG4gICAgICAgIHRoaXMub2xkVmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIF90aGlzLiRyZWZzLm1pblNwaW5uZXIuZW1pdFNlbGVjdFJhbmdlKCdob3VycycpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGhhbmRsZUNsZWFyOiBmdW5jdGlvbiBoYW5kbGVDbGVhcigpIHtcbiAgICAgIHRoaXMuJGVtaXQoJ3BpY2snLCBudWxsKTtcbiAgICB9LFxuICAgIGhhbmRsZUNhbmNlbDogZnVuY3Rpb24gaGFuZGxlQ2FuY2VsKCkge1xuICAgICAgdGhpcy4kZW1pdCgncGljaycsIHRoaXMub2xkVmFsdWUpO1xuICAgIH0sXG4gICAgaGFuZGxlTWluQ2hhbmdlOiBmdW5jdGlvbiBoYW5kbGVNaW5DaGFuZ2UoZGF0ZSkge1xuICAgICAgdGhpcy5taW5EYXRlID0gT2JqZWN0KGRhdGVfdXRpbF9bXCJjbGVhck1pbGxpc2Vjb25kc1wiXSkoZGF0ZSk7XG4gICAgICB0aGlzLmhhbmRsZUNoYW5nZSgpO1xuICAgIH0sXG4gICAgaGFuZGxlTWF4Q2hhbmdlOiBmdW5jdGlvbiBoYW5kbGVNYXhDaGFuZ2UoZGF0ZSkge1xuICAgICAgdGhpcy5tYXhEYXRlID0gT2JqZWN0KGRhdGVfdXRpbF9bXCJjbGVhck1pbGxpc2Vjb25kc1wiXSkoZGF0ZSk7XG4gICAgICB0aGlzLmhhbmRsZUNoYW5nZSgpO1xuICAgIH0sXG4gICAgaGFuZGxlQ2hhbmdlOiBmdW5jdGlvbiBoYW5kbGVDaGFuZ2UoKSB7XG4gICAgICBpZiAodGhpcy5pc1ZhbGlkVmFsdWUoW3RoaXMubWluRGF0ZSwgdGhpcy5tYXhEYXRlXSkpIHtcbiAgICAgICAgdGhpcy4kcmVmcy5taW5TcGlubmVyLnNlbGVjdGFibGVSYW5nZSA9IFtbdGltZV9yYW5nZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX21pblRpbWVPZkRheSh0aGlzLm1pbkRhdGUpLCB0aGlzLm1heERhdGVdXTtcbiAgICAgICAgdGhpcy4kcmVmcy5tYXhTcGlubmVyLnNlbGVjdGFibGVSYW5nZSA9IFtbdGhpcy5taW5EYXRlLCB0aW1lX3JhbmdldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfbWF4VGltZU9mRGF5KHRoaXMubWF4RGF0ZSldXTtcbiAgICAgICAgdGhpcy4kZW1pdCgncGljaycsIFt0aGlzLm1pbkRhdGUsIHRoaXMubWF4RGF0ZV0sIHRydWUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgc2V0TWluU2VsZWN0aW9uUmFuZ2U6IGZ1bmN0aW9uIHNldE1pblNlbGVjdGlvblJhbmdlKHN0YXJ0LCBlbmQpIHtcbiAgICAgIHRoaXMuJGVtaXQoJ3NlbGVjdC1yYW5nZScsIHN0YXJ0LCBlbmQsICdtaW4nKTtcbiAgICAgIHRoaXMuc2VsZWN0aW9uUmFuZ2UgPSBbc3RhcnQsIGVuZF07XG4gICAgfSxcbiAgICBzZXRNYXhTZWxlY3Rpb25SYW5nZTogZnVuY3Rpb24gc2V0TWF4U2VsZWN0aW9uUmFuZ2Uoc3RhcnQsIGVuZCkge1xuICAgICAgdGhpcy4kZW1pdCgnc2VsZWN0LXJhbmdlJywgc3RhcnQsIGVuZCwgJ21heCcpO1xuICAgICAgdGhpcy5zZWxlY3Rpb25SYW5nZSA9IFtzdGFydCArIHRoaXMub2Zmc2V0LCBlbmQgKyB0aGlzLm9mZnNldF07XG4gICAgfSxcbiAgICBoYW5kbGVDb25maXJtOiBmdW5jdGlvbiBoYW5kbGVDb25maXJtKCkge1xuICAgICAgdmFyIHZpc2libGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGZhbHNlO1xuXG4gICAgICB2YXIgbWluU2VsZWN0YWJsZVJhbmdlID0gdGhpcy4kcmVmcy5taW5TcGlubmVyLnNlbGVjdGFibGVSYW5nZTtcbiAgICAgIHZhciBtYXhTZWxlY3RhYmxlUmFuZ2UgPSB0aGlzLiRyZWZzLm1heFNwaW5uZXIuc2VsZWN0YWJsZVJhbmdlO1xuXG4gICAgICB0aGlzLm1pbkRhdGUgPSBPYmplY3QoZGF0ZV91dGlsX1tcImxpbWl0VGltZVJhbmdlXCJdKSh0aGlzLm1pbkRhdGUsIG1pblNlbGVjdGFibGVSYW5nZSwgdGhpcy5mb3JtYXQpO1xuICAgICAgdGhpcy5tYXhEYXRlID0gT2JqZWN0KGRhdGVfdXRpbF9bXCJsaW1pdFRpbWVSYW5nZVwiXSkodGhpcy5tYXhEYXRlLCBtYXhTZWxlY3RhYmxlUmFuZ2UsIHRoaXMuZm9ybWF0KTtcblxuICAgICAgdGhpcy4kZW1pdCgncGljaycsIFt0aGlzLm1pbkRhdGUsIHRoaXMubWF4RGF0ZV0sIHZpc2libGUpO1xuICAgIH0sXG4gICAgYWRqdXN0U3Bpbm5lcnM6IGZ1bmN0aW9uIGFkanVzdFNwaW5uZXJzKCkge1xuICAgICAgdGhpcy4kcmVmcy5taW5TcGlubmVyLmFkanVzdFNwaW5uZXJzKCk7XG4gICAgICB0aGlzLiRyZWZzLm1heFNwaW5uZXIuYWRqdXN0U3Bpbm5lcnMoKTtcbiAgICB9LFxuICAgIGNoYW5nZVNlbGVjdGlvblJhbmdlOiBmdW5jdGlvbiBjaGFuZ2VTZWxlY3Rpb25SYW5nZShzdGVwKSB7XG4gICAgICB2YXIgbGlzdCA9IHRoaXMuc2hvd1NlY29uZHMgPyBbMCwgMywgNiwgMTEsIDE0LCAxN10gOiBbMCwgMywgOCwgMTFdO1xuICAgICAgdmFyIG1hcHBpbmcgPSBbJ2hvdXJzJywgJ21pbnV0ZXMnXS5jb25jYXQodGhpcy5zaG93U2Vjb25kcyA/IFsnc2Vjb25kcyddIDogW10pO1xuICAgICAgdmFyIGluZGV4ID0gbGlzdC5pbmRleE9mKHRoaXMuc2VsZWN0aW9uUmFuZ2VbMF0pO1xuICAgICAgdmFyIG5leHQgPSAoaW5kZXggKyBzdGVwICsgbGlzdC5sZW5ndGgpICUgbGlzdC5sZW5ndGg7XG4gICAgICB2YXIgaGFsZiA9IGxpc3QubGVuZ3RoIC8gMjtcbiAgICAgIGlmIChuZXh0IDwgaGFsZikge1xuICAgICAgICB0aGlzLiRyZWZzLm1pblNwaW5uZXIuZW1pdFNlbGVjdFJhbmdlKG1hcHBpbmdbbmV4dF0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy4kcmVmcy5tYXhTcGlubmVyLmVtaXRTZWxlY3RSYW5nZShtYXBwaW5nW25leHQgLSBoYWxmXSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBpc1ZhbGlkVmFsdWU6IGZ1bmN0aW9uIGlzVmFsaWRWYWx1ZShkYXRlKSB7XG4gICAgICByZXR1cm4gQXJyYXkuaXNBcnJheShkYXRlKSAmJiBPYmplY3QoZGF0ZV91dGlsX1tcInRpbWVXaXRoaW5SYW5nZVwiXSkodGhpcy5taW5EYXRlLCB0aGlzLiRyZWZzLm1pblNwaW5uZXIuc2VsZWN0YWJsZVJhbmdlKSAmJiBPYmplY3QoZGF0ZV91dGlsX1tcInRpbWVXaXRoaW5SYW5nZVwiXSkodGhpcy5tYXhEYXRlLCB0aGlzLiRyZWZzLm1heFNwaW5uZXIuc2VsZWN0YWJsZVJhbmdlKTtcbiAgICB9LFxuICAgIGhhbmRsZUtleWRvd246IGZ1bmN0aW9uIGhhbmRsZUtleWRvd24oZXZlbnQpIHtcbiAgICAgIHZhciBrZXlDb2RlID0gZXZlbnQua2V5Q29kZTtcbiAgICAgIHZhciBtYXBwaW5nID0geyAzODogLTEsIDQwOiAxLCAzNzogLTEsIDM5OiAxIH07XG5cbiAgICAgIC8vIExlZnQgb3IgUmlnaHRcbiAgICAgIGlmIChrZXlDb2RlID09PSAzNyB8fCBrZXlDb2RlID09PSAzOSkge1xuICAgICAgICB2YXIgc3RlcCA9IG1hcHBpbmdba2V5Q29kZV07XG4gICAgICAgIHRoaXMuY2hhbmdlU2VsZWN0aW9uUmFuZ2Uoc3RlcCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gVXAgb3IgRG93blxuICAgICAgaWYgKGtleUNvZGUgPT09IDM4IHx8IGtleUNvZGUgPT09IDQwKSB7XG4gICAgICAgIHZhciBfc3RlcCA9IG1hcHBpbmdba2V5Q29kZV07XG4gICAgICAgIHRoaXMuc3Bpbm5lci5zY3JvbGxEb3duKF9zdGVwKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9wYW5lbC90aW1lLXJhbmdlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYW5lbF90aW1lX3JhbmdldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHRpbWVfcmFuZ2V2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZGF0ZS1waWNrZXIvc3JjL3BhbmVsL3RpbWUtcmFuZ2UudnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgdGltZV9yYW5nZV9jb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIHBhbmVsX3RpbWVfcmFuZ2V2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIHRpbWVfcmFuZ2V2dWVfdHlwZV90ZW1wbGF0ZV9pZF9mYjI4NjYwZV9yZW5kZXIsXG4gIHRpbWVfcmFuZ2V2dWVfdHlwZV90ZW1wbGF0ZV9pZF9mYjI4NjYwZV9zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIHRpbWVfcmFuZ2VfYXBpOyB9XG50aW1lX3JhbmdlX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvZGF0ZS1waWNrZXIvc3JjL3BhbmVsL3RpbWUtcmFuZ2UudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHRpbWVfcmFuZ2UgPSAodGltZV9yYW5nZV9jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9waWNrZXIvdGltZS1waWNrZXIuanNcblxuXG5cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgdGltZV9waWNrZXIgPSAoe1xuICBtaXhpbnM6IFtwaWNrZXJdLFxuXG4gIG5hbWU6ICdFbFRpbWVQaWNrZXInLFxuXG4gIHByb3BzOiB7XG4gICAgaXNSYW5nZTogQm9vbGVhbixcbiAgICBhcnJvd0NvbnRyb2w6IEJvb2xlYW5cbiAgfSxcblxuICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnJ1xuICAgIH07XG4gIH0sXG5cblxuICB3YXRjaDoge1xuICAgIGlzUmFuZ2U6IGZ1bmN0aW9uIGlzUmFuZ2UoX2lzUmFuZ2UpIHtcbiAgICAgIGlmICh0aGlzLnBpY2tlcikge1xuICAgICAgICB0aGlzLnVubW91bnRQaWNrZXIoKTtcbiAgICAgICAgdGhpcy50eXBlID0gX2lzUmFuZ2UgPyAndGltZXJhbmdlJyA6ICd0aW1lJztcbiAgICAgICAgdGhpcy5wYW5lbCA9IF9pc1JhbmdlID8gdGltZV9yYW5nZSA6IHBhbmVsX3RpbWU7XG4gICAgICAgIHRoaXMubW91bnRQaWNrZXIoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudHlwZSA9IF9pc1JhbmdlID8gJ3RpbWVyYW5nZScgOiAndGltZSc7XG4gICAgICAgIHRoaXMucGFuZWwgPSBfaXNSYW5nZSA/IHRpbWVfcmFuZ2UgOiBwYW5lbF90aW1lO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkOiBmdW5jdGlvbiBjcmVhdGVkKCkge1xuICAgIHRoaXMudHlwZSA9IHRoaXMuaXNSYW5nZSA/ICd0aW1lcmFuZ2UnIDogJ3RpbWUnO1xuICAgIHRoaXMucGFuZWwgPSB0aGlzLmlzUmFuZ2UgPyB0aW1lX3JhbmdlIDogcGFuZWxfdGltZTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3RpbWUtcGlja2VyL2luZGV4LmpzXG5cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbnRpbWVfcGlja2VyLmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG4gIFZ1ZS5jb21wb25lbnQodGltZV9waWNrZXIubmFtZSwgdGltZV9waWNrZXIpO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcGFja2FnZXNfdGltZV9waWNrZXIgPSAodGltZV9waWNrZXIpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9wb3BvdmVyL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01MjA2MDI3MiZcbnZhciBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfNTIwNjAyNzJfcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwic3BhblwiLFxuICAgIFtcbiAgICAgIF9jKFxuICAgICAgICBcInRyYW5zaXRpb25cIixcbiAgICAgICAge1xuICAgICAgICAgIGF0dHJzOiB7IG5hbWU6IF92bS50cmFuc2l0aW9uIH0sXG4gICAgICAgICAgb246IHtcbiAgICAgICAgICAgIFwiYWZ0ZXItZW50ZXJcIjogX3ZtLmhhbmRsZUFmdGVyRW50ZXIsXG4gICAgICAgICAgICBcImFmdGVyLWxlYXZlXCI6IF92bS5oYW5kbGVBZnRlckxlYXZlXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBbXG4gICAgICAgICAgX2MoXG4gICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgICAgICAgdmFsdWU6ICFfdm0uZGlzYWJsZWQgJiYgX3ZtLnNob3dQb3BwZXIsXG4gICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcIiFkaXNhYmxlZCAmJiBzaG93UG9wcGVyXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIHJlZjogXCJwb3BwZXJcIixcbiAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtcG9wb3ZlciBlbC1wb3BwZXJcIixcbiAgICAgICAgICAgICAgY2xhc3M6IFtfdm0ucG9wcGVyQ2xhc3MsIF92bS5jb250ZW50ICYmIFwiZWwtcG9wb3Zlci0tcGxhaW5cIl0sXG4gICAgICAgICAgICAgIHN0eWxlOiB7IHdpZHRoOiBfdm0ud2lkdGggKyBcInB4XCIgfSxcbiAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICByb2xlOiBcInRvb2x0aXBcIixcbiAgICAgICAgICAgICAgICBpZDogX3ZtLnRvb2x0aXBJZCxcbiAgICAgICAgICAgICAgICBcImFyaWEtaGlkZGVuXCI6XG4gICAgICAgICAgICAgICAgICBfdm0uZGlzYWJsZWQgfHwgIV92bS5zaG93UG9wcGVyID8gXCJ0cnVlXCIgOiBcImZhbHNlXCJcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX3ZtLnRpdGxlXG4gICAgICAgICAgICAgICAgPyBfYyhcImRpdlwiLCB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXBvcG92ZXJfX3RpdGxlXCIsXG4gICAgICAgICAgICAgICAgICAgIGRvbVByb3BzOiB7IHRleHRDb250ZW50OiBfdm0uX3MoX3ZtLnRpdGxlKSB9XG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgIF92bS5fdChcImRlZmF1bHRcIiwgW192bS5fdihfdm0uX3MoX3ZtLmNvbnRlbnQpKV0pXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgMlxuICAgICAgICAgIClcbiAgICAgICAgXVxuICAgICAgKSxcbiAgICAgIF9jKFxuICAgICAgICBcInNwYW5cIixcbiAgICAgICAgeyByZWY6IFwid3JhcHBlclwiLCBzdGF0aWNDbGFzczogXCJlbC1wb3BvdmVyX19yZWZlcmVuY2Utd3JhcHBlclwiIH0sXG4gICAgICAgIFtfdm0uX3QoXCJyZWZlcmVuY2VcIildLFxuICAgICAgICAyXG4gICAgICApXG4gICAgXSxcbiAgICAxXG4gIClcbn1cbnZhciBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfNTIwNjAyNzJfc3RhdGljUmVuZGVyRm5zID0gW11cbm1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF81MjA2MDI3Ml9yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3BvcG92ZXIvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTUyMDYwMjcyJlxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9wb3BvdmVyL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cblxuXG5cblxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBtYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbmFtZTogJ0VsUG9wb3ZlcicsXG5cbiAgbWl4aW5zOiBbdnVlX3BvcHBlcl9kZWZhdWx0LmFdLFxuXG4gIHByb3BzOiB7XG4gICAgdHJpZ2dlcjoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2NsaWNrJyxcbiAgICAgIHZhbGlkYXRvcjogZnVuY3Rpb24gdmFsaWRhdG9yKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBbJ2NsaWNrJywgJ2ZvY3VzJywgJ2hvdmVyJywgJ21hbnVhbCddLmluZGV4T2YodmFsdWUpID4gLTE7XG4gICAgICB9XG4gICAgfSxcbiAgICBvcGVuRGVsYXk6IHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGRlZmF1bHQ6IDBcbiAgICB9LFxuICAgIGNsb3NlRGVsYXk6IHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGRlZmF1bHQ6IDIwMFxuICAgIH0sXG4gICAgdGl0bGU6IFN0cmluZyxcbiAgICBkaXNhYmxlZDogQm9vbGVhbixcbiAgICBjb250ZW50OiBTdHJpbmcsXG4gICAgcmVmZXJlbmNlOiB7fSxcbiAgICBwb3BwZXJDbGFzczogU3RyaW5nLFxuICAgIHdpZHRoOiB7fSxcbiAgICB2aXNpYmxlQXJyb3c6IHtcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9LFxuICAgIGFycm93T2Zmc2V0OiB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBkZWZhdWx0OiAwXG4gICAgfSxcbiAgICB0cmFuc2l0aW9uOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnZmFkZS1pbi1saW5lYXInXG4gICAgfSxcbiAgICB0YWJpbmRleDoge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZGVmYXVsdDogMFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHRvb2x0aXBJZDogZnVuY3Rpb24gdG9vbHRpcElkKCkge1xuICAgICAgcmV0dXJuICdlbC1wb3BvdmVyLScgKyBPYmplY3QodXRpbF9bXCJnZW5lcmF0ZUlkXCJdKSgpO1xuICAgIH1cbiAgfSxcbiAgd2F0Y2g6IHtcbiAgICBzaG93UG9wcGVyOiBmdW5jdGlvbiBzaG93UG9wcGVyKHZhbCkge1xuICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdmFsID8gdGhpcy4kZW1pdCgnc2hvdycpIDogdGhpcy4kZW1pdCgnaGlkZScpO1xuICAgIH1cbiAgfSxcblxuICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB2YXIgcmVmZXJlbmNlID0gdGhpcy5yZWZlcmVuY2VFbG0gPSB0aGlzLnJlZmVyZW5jZSB8fCB0aGlzLiRyZWZzLnJlZmVyZW5jZTtcbiAgICB2YXIgcG9wcGVyID0gdGhpcy5wb3BwZXIgfHwgdGhpcy4kcmVmcy5wb3BwZXI7XG5cbiAgICBpZiAoIXJlZmVyZW5jZSAmJiB0aGlzLiRyZWZzLndyYXBwZXIuY2hpbGRyZW4pIHtcbiAgICAgIHJlZmVyZW5jZSA9IHRoaXMucmVmZXJlbmNlRWxtID0gdGhpcy4kcmVmcy53cmFwcGVyLmNoaWxkcmVuWzBdO1xuICAgIH1cbiAgICAvLyDlj6/orr/pl67mgKdcbiAgICBpZiAocmVmZXJlbmNlKSB7XG4gICAgICBPYmplY3QoZG9tX1tcImFkZENsYXNzXCJdKShyZWZlcmVuY2UsICdlbC1wb3BvdmVyX19yZWZlcmVuY2UnKTtcbiAgICAgIHJlZmVyZW5jZS5zZXRBdHRyaWJ1dGUoJ2FyaWEtZGVzY3JpYmVkYnknLCB0aGlzLnRvb2x0aXBJZCk7XG4gICAgICByZWZlcmVuY2Uuc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsIHRoaXMudGFiaW5kZXgpOyAvLyB0YWLluo/liJdcbiAgICAgIHBvcHBlci5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgMCk7XG5cbiAgICAgIGlmICh0aGlzLnRyaWdnZXIgIT09ICdjbGljaycpIHtcbiAgICAgICAgT2JqZWN0KGRvbV9bXCJvblwiXSkocmVmZXJlbmNlLCAnZm9jdXNpbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfdGhpcy5oYW5kbGVGb2N1cygpO1xuICAgICAgICAgIHZhciBpbnN0YW5jZSA9IHJlZmVyZW5jZS5fX3Z1ZV9fO1xuICAgICAgICAgIGlmIChpbnN0YW5jZSAmJiB0eXBlb2YgaW5zdGFuY2UuZm9jdXMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGluc3RhbmNlLmZvY3VzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0KGRvbV9bXCJvblwiXSkocG9wcGVyLCAnZm9jdXNpbicsIHRoaXMuaGFuZGxlRm9jdXMpO1xuICAgICAgICBPYmplY3QoZG9tX1tcIm9uXCJdKShyZWZlcmVuY2UsICdmb2N1c291dCcsIHRoaXMuaGFuZGxlQmx1cik7XG4gICAgICAgIE9iamVjdChkb21fW1wib25cIl0pKHBvcHBlciwgJ2ZvY3Vzb3V0JywgdGhpcy5oYW5kbGVCbHVyKTtcbiAgICAgIH1cbiAgICAgIE9iamVjdChkb21fW1wib25cIl0pKHJlZmVyZW5jZSwgJ2tleWRvd24nLCB0aGlzLmhhbmRsZUtleWRvd24pO1xuICAgICAgT2JqZWN0KGRvbV9bXCJvblwiXSkocmVmZXJlbmNlLCAnY2xpY2snLCB0aGlzLmhhbmRsZUNsaWNrKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudHJpZ2dlciA9PT0gJ2NsaWNrJykge1xuICAgICAgT2JqZWN0KGRvbV9bXCJvblwiXSkocmVmZXJlbmNlLCAnY2xpY2snLCB0aGlzLmRvVG9nZ2xlKTtcbiAgICAgIE9iamVjdChkb21fW1wib25cIl0pKGRvY3VtZW50LCAnY2xpY2snLCB0aGlzLmhhbmRsZURvY3VtZW50Q2xpY2spO1xuICAgIH0gZWxzZSBpZiAodGhpcy50cmlnZ2VyID09PSAnaG92ZXInKSB7XG4gICAgICBPYmplY3QoZG9tX1tcIm9uXCJdKShyZWZlcmVuY2UsICdtb3VzZWVudGVyJywgdGhpcy5oYW5kbGVNb3VzZUVudGVyKTtcbiAgICAgIE9iamVjdChkb21fW1wib25cIl0pKHBvcHBlciwgJ21vdXNlZW50ZXInLCB0aGlzLmhhbmRsZU1vdXNlRW50ZXIpO1xuICAgICAgT2JqZWN0KGRvbV9bXCJvblwiXSkocmVmZXJlbmNlLCAnbW91c2VsZWF2ZScsIHRoaXMuaGFuZGxlTW91c2VMZWF2ZSk7XG4gICAgICBPYmplY3QoZG9tX1tcIm9uXCJdKShwb3BwZXIsICdtb3VzZWxlYXZlJywgdGhpcy5oYW5kbGVNb3VzZUxlYXZlKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMudHJpZ2dlciA9PT0gJ2ZvY3VzJykge1xuICAgICAgaWYgKHRoaXMudGFiaW5kZXggPCAwKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignW0VsZW1lbnQgV2Fybl1bUG9wb3Zlcl1hIG5lZ2F0aXZlIHRhaW5kZXggbWVhbnMgdGhhdCB0aGUgZWxlbWVudCBjYW5ub3QgYmUgZm9jdXNlZCBieSB0YWIga2V5Jyk7XG4gICAgICB9XG4gICAgICBpZiAocmVmZXJlbmNlLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0LCB0ZXh0YXJlYScpKSB7XG4gICAgICAgIE9iamVjdChkb21fW1wib25cIl0pKHJlZmVyZW5jZSwgJ2ZvY3VzaW4nLCB0aGlzLmRvU2hvdyk7XG4gICAgICAgIE9iamVjdChkb21fW1wib25cIl0pKHJlZmVyZW5jZSwgJ2ZvY3Vzb3V0JywgdGhpcy5kb0Nsb3NlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIE9iamVjdChkb21fW1wib25cIl0pKHJlZmVyZW5jZSwgJ21vdXNlZG93bicsIHRoaXMuZG9TaG93KTtcbiAgICAgICAgT2JqZWN0KGRvbV9bXCJvblwiXSkocmVmZXJlbmNlLCAnbW91c2V1cCcsIHRoaXMuZG9DbG9zZSk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBiZWZvcmVEZXN0cm95OiBmdW5jdGlvbiBiZWZvcmVEZXN0cm95KCkge1xuICAgIHRoaXMuY2xlYW51cCgpO1xuICB9LFxuICBkZWFjdGl2YXRlZDogZnVuY3Rpb24gZGVhY3RpdmF0ZWQoKSB7XG4gICAgdGhpcy5jbGVhbnVwKCk7XG4gIH0sXG5cblxuICBtZXRob2RzOiB7XG4gICAgZG9Ub2dnbGU6IGZ1bmN0aW9uIGRvVG9nZ2xlKCkge1xuICAgICAgdGhpcy5zaG93UG9wcGVyID0gIXRoaXMuc2hvd1BvcHBlcjtcbiAgICB9LFxuICAgIGRvU2hvdzogZnVuY3Rpb24gZG9TaG93KCkge1xuICAgICAgdGhpcy5zaG93UG9wcGVyID0gdHJ1ZTtcbiAgICB9LFxuICAgIGRvQ2xvc2U6IGZ1bmN0aW9uIGRvQ2xvc2UoKSB7XG4gICAgICB0aGlzLnNob3dQb3BwZXIgPSBmYWxzZTtcbiAgICB9LFxuICAgIGhhbmRsZUZvY3VzOiBmdW5jdGlvbiBoYW5kbGVGb2N1cygpIHtcbiAgICAgIE9iamVjdChkb21fW1wiYWRkQ2xhc3NcIl0pKHRoaXMucmVmZXJlbmNlRWxtLCAnZm9jdXNpbmcnKTtcbiAgICAgIGlmICh0aGlzLnRyaWdnZXIgPT09ICdjbGljaycgfHwgdGhpcy50cmlnZ2VyID09PSAnZm9jdXMnKSB0aGlzLnNob3dQb3BwZXIgPSB0cnVlO1xuICAgIH0sXG4gICAgaGFuZGxlQ2xpY2s6IGZ1bmN0aW9uIGhhbmRsZUNsaWNrKCkge1xuICAgICAgT2JqZWN0KGRvbV9bXCJyZW1vdmVDbGFzc1wiXSkodGhpcy5yZWZlcmVuY2VFbG0sICdmb2N1c2luZycpO1xuICAgIH0sXG4gICAgaGFuZGxlQmx1cjogZnVuY3Rpb24gaGFuZGxlQmx1cigpIHtcbiAgICAgIE9iamVjdChkb21fW1wicmVtb3ZlQ2xhc3NcIl0pKHRoaXMucmVmZXJlbmNlRWxtLCAnZm9jdXNpbmcnKTtcbiAgICAgIGlmICh0aGlzLnRyaWdnZXIgPT09ICdjbGljaycgfHwgdGhpcy50cmlnZ2VyID09PSAnZm9jdXMnKSB0aGlzLnNob3dQb3BwZXIgPSBmYWxzZTtcbiAgICB9LFxuICAgIGhhbmRsZU1vdXNlRW50ZXI6IGZ1bmN0aW9uIGhhbmRsZU1vdXNlRW50ZXIoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyKTtcbiAgICAgIGlmICh0aGlzLm9wZW5EZWxheSkge1xuICAgICAgICB0aGlzLl90aW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF90aGlzMi5zaG93UG9wcGVyID0gdHJ1ZTtcbiAgICAgICAgfSwgdGhpcy5vcGVuRGVsYXkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zaG93UG9wcGVyID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGhhbmRsZUtleWRvd246IGZ1bmN0aW9uIGhhbmRsZUtleWRvd24oZXYpIHtcbiAgICAgIGlmIChldi5rZXlDb2RlID09PSAyNyAmJiB0aGlzLnRyaWdnZXIgIT09ICdtYW51YWwnKSB7XG4gICAgICAgIC8vIGVzY1xuICAgICAgICB0aGlzLmRvQ2xvc2UoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGhhbmRsZU1vdXNlTGVhdmU6IGZ1bmN0aW9uIGhhbmRsZU1vdXNlTGVhdmUoKSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyKTtcbiAgICAgIGlmICh0aGlzLmNsb3NlRGVsYXkpIHtcbiAgICAgICAgdGhpcy5fdGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfdGhpczMuc2hvd1BvcHBlciA9IGZhbHNlO1xuICAgICAgICB9LCB0aGlzLmNsb3NlRGVsYXkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zaG93UG9wcGVyID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSxcbiAgICBoYW5kbGVEb2N1bWVudENsaWNrOiBmdW5jdGlvbiBoYW5kbGVEb2N1bWVudENsaWNrKGUpIHtcbiAgICAgIHZhciByZWZlcmVuY2UgPSB0aGlzLnJlZmVyZW5jZSB8fCB0aGlzLiRyZWZzLnJlZmVyZW5jZTtcbiAgICAgIHZhciBwb3BwZXIgPSB0aGlzLnBvcHBlciB8fCB0aGlzLiRyZWZzLnBvcHBlcjtcblxuICAgICAgaWYgKCFyZWZlcmVuY2UgJiYgdGhpcy4kcmVmcy53cmFwcGVyLmNoaWxkcmVuKSB7XG4gICAgICAgIHJlZmVyZW5jZSA9IHRoaXMucmVmZXJlbmNlRWxtID0gdGhpcy4kcmVmcy53cmFwcGVyLmNoaWxkcmVuWzBdO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLiRlbCB8fCAhcmVmZXJlbmNlIHx8IHRoaXMuJGVsLmNvbnRhaW5zKGUudGFyZ2V0KSB8fCByZWZlcmVuY2UuY29udGFpbnMoZS50YXJnZXQpIHx8ICFwb3BwZXIgfHwgcG9wcGVyLmNvbnRhaW5zKGUudGFyZ2V0KSkgcmV0dXJuO1xuICAgICAgdGhpcy5zaG93UG9wcGVyID0gZmFsc2U7XG4gICAgfSxcbiAgICBoYW5kbGVBZnRlckVudGVyOiBmdW5jdGlvbiBoYW5kbGVBZnRlckVudGVyKCkge1xuICAgICAgdGhpcy4kZW1pdCgnYWZ0ZXItZW50ZXInKTtcbiAgICB9LFxuICAgIGhhbmRsZUFmdGVyTGVhdmU6IGZ1bmN0aW9uIGhhbmRsZUFmdGVyTGVhdmUoKSB7XG4gICAgICB0aGlzLiRlbWl0KCdhZnRlci1sZWF2ZScpO1xuICAgICAgdGhpcy5kb0Rlc3Ryb3koKTtcbiAgICB9LFxuICAgIGNsZWFudXA6IGZ1bmN0aW9uIGNsZWFudXAoKSB7XG4gICAgICBpZiAodGhpcy5vcGVuRGVsYXkgfHwgdGhpcy5jbG9zZURlbGF5KSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lcik7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGRlc3Ryb3llZDogZnVuY3Rpb24gZGVzdHJveWVkKCkge1xuICAgIHZhciByZWZlcmVuY2UgPSB0aGlzLnJlZmVyZW5jZTtcblxuICAgIE9iamVjdChkb21fW1wib2ZmXCJdKShyZWZlcmVuY2UsICdjbGljaycsIHRoaXMuZG9Ub2dnbGUpO1xuICAgIE9iamVjdChkb21fW1wib2ZmXCJdKShyZWZlcmVuY2UsICdtb3VzZXVwJywgdGhpcy5kb0Nsb3NlKTtcbiAgICBPYmplY3QoZG9tX1tcIm9mZlwiXSkocmVmZXJlbmNlLCAnbW91c2Vkb3duJywgdGhpcy5kb1Nob3cpO1xuICAgIE9iamVjdChkb21fW1wib2ZmXCJdKShyZWZlcmVuY2UsICdmb2N1c2luJywgdGhpcy5kb1Nob3cpO1xuICAgIE9iamVjdChkb21fW1wib2ZmXCJdKShyZWZlcmVuY2UsICdmb2N1c291dCcsIHRoaXMuZG9DbG9zZSk7XG4gICAgT2JqZWN0KGRvbV9bXCJvZmZcIl0pKHJlZmVyZW5jZSwgJ21vdXNlZG93bicsIHRoaXMuZG9TaG93KTtcbiAgICBPYmplY3QoZG9tX1tcIm9mZlwiXSkocmVmZXJlbmNlLCAnbW91c2V1cCcsIHRoaXMuZG9DbG9zZSk7XG4gICAgT2JqZWN0KGRvbV9bXCJvZmZcIl0pKHJlZmVyZW5jZSwgJ21vdXNlbGVhdmUnLCB0aGlzLmhhbmRsZU1vdXNlTGVhdmUpO1xuICAgIE9iamVjdChkb21fW1wib2ZmXCJdKShyZWZlcmVuY2UsICdtb3VzZWVudGVyJywgdGhpcy5oYW5kbGVNb3VzZUVudGVyKTtcbiAgICBPYmplY3QoZG9tX1tcIm9mZlwiXSkoZG9jdW1lbnQsICdjbGljaycsIHRoaXMuaGFuZGxlRG9jdW1lbnRDbGljayk7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9wb3BvdmVyL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChtYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3BvcG92ZXIvc3JjL21haW4udnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgbWFpbl9jb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIHNyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfNTIwNjAyNzJfcmVuZGVyLFxuICBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfNTIwNjAyNzJfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBtYWluX2FwaTsgfVxubWFpbl9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL3BvcG92ZXIvc3JjL21haW4udnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIG1haW4gPSAobWFpbl9jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3BvcG92ZXIvc3JjL2RpcmVjdGl2ZS5qc1xudmFyIGdldFJlZmVyZW5jZSA9IGZ1bmN0aW9uIGdldFJlZmVyZW5jZShlbCwgYmluZGluZywgdm5vZGUpIHtcbiAgdmFyIF9yZWYgPSBiaW5kaW5nLmV4cHJlc3Npb24gPyBiaW5kaW5nLnZhbHVlIDogYmluZGluZy5hcmc7XG4gIHZhciBwb3BwZXIgPSB2bm9kZS5jb250ZXh0LiRyZWZzW19yZWZdO1xuICBpZiAocG9wcGVyKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocG9wcGVyKSkge1xuICAgICAgcG9wcGVyWzBdLiRyZWZzLnJlZmVyZW5jZSA9IGVsO1xuICAgIH0gZWxzZSB7XG4gICAgICBwb3BwZXIuJHJlZnMucmVmZXJlbmNlID0gZWw7XG4gICAgfVxuICB9XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBkaXJlY3RpdmUgPSAoe1xuICBiaW5kOiBmdW5jdGlvbiBiaW5kKGVsLCBiaW5kaW5nLCB2bm9kZSkge1xuICAgIGdldFJlZmVyZW5jZShlbCwgYmluZGluZywgdm5vZGUpO1xuICB9LFxuICBpbnNlcnRlZDogZnVuY3Rpb24gaW5zZXJ0ZWQoZWwsIGJpbmRpbmcsIHZub2RlKSB7XG4gICAgZ2V0UmVmZXJlbmNlKGVsLCBiaW5kaW5nLCB2bm9kZSk7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9wb3BvdmVyL2luZGV4LmpzXG5cblxuXG5cbmV4dGVybmFsX3Z1ZV9kZWZhdWx0LmEuZGlyZWN0aXZlKCdwb3BvdmVyJywgZGlyZWN0aXZlKTtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbm1haW4uaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcbiAgVnVlLmRpcmVjdGl2ZSgncG9wb3ZlcicsIGRpcmVjdGl2ZSk7XG4gIFZ1ZS5jb21wb25lbnQobWFpbi5uYW1lLCBtYWluKTtcbn07XG5tYWluLmRpcmVjdGl2ZSA9IGRpcmVjdGl2ZTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcG9wb3ZlciA9IChtYWluKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdG9vbHRpcC9zcmMvbWFpbi5qc1xuXG5cblxuXG5cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX21haW4gPSAoe1xuICBuYW1lOiAnRWxUb29sdGlwJyxcblxuICBtaXhpbnM6IFt2dWVfcG9wcGVyX2RlZmF1bHQuYV0sXG5cbiAgcHJvcHM6IHtcbiAgICBvcGVuRGVsYXk6IHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGRlZmF1bHQ6IDBcbiAgICB9LFxuICAgIGRpc2FibGVkOiBCb29sZWFuLFxuICAgIG1hbnVhbDogQm9vbGVhbixcbiAgICBlZmZlY3Q6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdkYXJrJ1xuICAgIH0sXG4gICAgYXJyb3dPZmZzZXQ6IHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGRlZmF1bHQ6IDBcbiAgICB9LFxuICAgIHBvcHBlckNsYXNzOiBTdHJpbmcsXG4gICAgY29udGVudDogU3RyaW5nLFxuICAgIHZpc2libGVBcnJvdzoge1xuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0sXG4gICAgdHJhbnNpdGlvbjoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2VsLWZhZGUtaW4tbGluZWFyJ1xuICAgIH0sXG4gICAgcG9wcGVyT3B0aW9uczoge1xuICAgICAgZGVmYXVsdDogZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgYm91bmRhcmllc1BhZGRpbmc6IDEwLFxuICAgICAgICAgIGdwdUFjY2VsZXJhdGlvbjogZmFsc2VcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGVudGVyYWJsZToge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9LFxuICAgIGhpZGVBZnRlcjoge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZGVmYXVsdDogMFxuICAgIH0sXG4gICAgdGFiaW5kZXg6IHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGRlZmF1bHQ6IDBcbiAgICB9XG4gIH0sXG5cbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdG9vbHRpcElkOiAnZWwtdG9vbHRpcC0nICsgT2JqZWN0KHV0aWxfW1wiZ2VuZXJhdGVJZFwiXSkoKSxcbiAgICAgIHRpbWVvdXRQZW5kaW5nOiBudWxsLFxuICAgICAgZm9jdXNpbmc6IGZhbHNlXG4gICAgfTtcbiAgfSxcbiAgYmVmb3JlQ3JlYXRlOiBmdW5jdGlvbiBiZWZvcmVDcmVhdGUoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIGlmICh0aGlzLiRpc1NlcnZlcikgcmV0dXJuO1xuXG4gICAgdGhpcy5wb3BwZXJWTSA9IG5ldyBleHRlcm5hbF92dWVfZGVmYXVsdC5hKHtcbiAgICAgIGRhdGE6IHsgbm9kZTogJycgfSxcbiAgICAgIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKGgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubm9kZTtcbiAgICAgIH1cbiAgICB9KS4kbW91bnQoKTtcblxuICAgIHRoaXMuZGVib3VuY2VDbG9zZSA9IGRlYm91bmNlX2RlZmF1bHQoKSgyMDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpcy5oYW5kbGVDbG9zZVBvcHBlcigpO1xuICAgIH0pO1xuICB9LFxuICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcihoKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICBpZiAodGhpcy5wb3BwZXJWTSkge1xuICAgICAgdGhpcy5wb3BwZXJWTS5ub2RlID0gaChcbiAgICAgICAgJ3RyYW5zaXRpb24nLFxuICAgICAgICB7XG4gICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgIG5hbWU6IHRoaXMudHJhbnNpdGlvblxuICAgICAgICAgIH0sXG4gICAgICAgICAgb246IHtcbiAgICAgICAgICAgICdhZnRlckxlYXZlJzogdGhpcy5kb0Rlc3Ryb3lcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFtoKFxuICAgICAgICAgICdkaXYnLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICdtb3VzZWxlYXZlJzogZnVuY3Rpb24gbW91c2VsZWF2ZSgpIHtcbiAgICAgICAgICAgICAgICBfdGhpczIuc2V0RXhwZWN0ZWRTdGF0ZShmYWxzZSk7X3RoaXMyLmRlYm91bmNlQ2xvc2UoKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgJ21vdXNlZW50ZXInOiBmdW5jdGlvbiBtb3VzZWVudGVyKCkge1xuICAgICAgICAgICAgICAgIF90aGlzMi5zZXRFeHBlY3RlZFN0YXRlKHRydWUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICByZWY6ICdwb3BwZXInLFxuICAgICAgICAgICAgYXR0cnM6IHsgcm9sZTogJ3Rvb2x0aXAnLFxuICAgICAgICAgICAgICBpZDogdGhpcy50b29sdGlwSWQsXG4gICAgICAgICAgICAgICdhcmlhLWhpZGRlbic6IHRoaXMuZGlzYWJsZWQgfHwgIXRoaXMuc2hvd1BvcHBlciA/ICd0cnVlJyA6ICdmYWxzZSdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkaXJlY3RpdmVzOiBbe1xuICAgICAgICAgICAgICBuYW1lOiAnc2hvdycsXG4gICAgICAgICAgICAgIHZhbHVlOiAhdGhpcy5kaXNhYmxlZCAmJiB0aGlzLnNob3dQb3BwZXJcbiAgICAgICAgICAgIH1dLFxuXG4gICAgICAgICAgICAnY2xhc3MnOiBbJ2VsLXRvb2x0aXBfX3BvcHBlcicsICdpcy0nICsgdGhpcy5lZmZlY3QsIHRoaXMucG9wcGVyQ2xhc3NdIH0sXG4gICAgICAgICAgW3RoaXMuJHNsb3RzLmNvbnRlbnQgfHwgdGhpcy5jb250ZW50XVxuICAgICAgICApXVxuICAgICAgKTtcbiAgICB9XG5cbiAgICB2YXIgZmlyc3RFbGVtZW50ID0gdGhpcy5nZXRGaXJzdEVsZW1lbnQoKTtcbiAgICBpZiAoIWZpcnN0RWxlbWVudCkgcmV0dXJuIG51bGw7XG5cbiAgICB2YXIgZGF0YSA9IGZpcnN0RWxlbWVudC5kYXRhID0gZmlyc3RFbGVtZW50LmRhdGEgfHwge307XG4gICAgZGF0YS5zdGF0aWNDbGFzcyA9IHRoaXMuYWRkVG9vbHRpcENsYXNzKGRhdGEuc3RhdGljQ2xhc3MpO1xuXG4gICAgcmV0dXJuIGZpcnN0RWxlbWVudDtcbiAgfSxcbiAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCgpIHtcbiAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgIHRoaXMucmVmZXJlbmNlRWxtID0gdGhpcy4kZWw7XG4gICAgaWYgKHRoaXMuJGVsLm5vZGVUeXBlID09PSAxKSB7XG4gICAgICB0aGlzLiRlbC5zZXRBdHRyaWJ1dGUoJ2FyaWEtZGVzY3JpYmVkYnknLCB0aGlzLnRvb2x0aXBJZCk7XG4gICAgICB0aGlzLiRlbC5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgdGhpcy50YWJpbmRleCk7XG4gICAgICBPYmplY3QoZG9tX1tcIm9uXCJdKSh0aGlzLnJlZmVyZW5jZUVsbSwgJ21vdXNlZW50ZXInLCB0aGlzLnNob3cpO1xuICAgICAgT2JqZWN0KGRvbV9bXCJvblwiXSkodGhpcy5yZWZlcmVuY2VFbG0sICdtb3VzZWxlYXZlJywgdGhpcy5oaWRlKTtcbiAgICAgIE9iamVjdChkb21fW1wib25cIl0pKHRoaXMucmVmZXJlbmNlRWxtLCAnZm9jdXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghX3RoaXMzLiRzbG90cy5kZWZhdWx0IHx8ICFfdGhpczMuJHNsb3RzLmRlZmF1bHQubGVuZ3RoKSB7XG4gICAgICAgICAgX3RoaXMzLmhhbmRsZUZvY3VzKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IF90aGlzMy4kc2xvdHMuZGVmYXVsdFswXS5jb21wb25lbnRJbnN0YW5jZTtcbiAgICAgICAgaWYgKGluc3RhbmNlICYmIGluc3RhbmNlLmZvY3VzKSB7XG4gICAgICAgICAgaW5zdGFuY2UuZm9jdXMoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBfdGhpczMuaGFuZGxlRm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBPYmplY3QoZG9tX1tcIm9uXCJdKSh0aGlzLnJlZmVyZW5jZUVsbSwgJ2JsdXInLCB0aGlzLmhhbmRsZUJsdXIpO1xuICAgICAgT2JqZWN0KGRvbV9bXCJvblwiXSkodGhpcy5yZWZlcmVuY2VFbG0sICdjbGljaycsIHRoaXMucmVtb3ZlRm9jdXNpbmcpO1xuICAgIH1cbiAgICAvLyBmaXggaXNzdWUgaHR0cHM6Ly9naXRodWIuY29tL0VsZW1lRkUvZWxlbWVudC9pc3N1ZXMvMTQ0MjRcbiAgICBpZiAodGhpcy52YWx1ZSAmJiB0aGlzLnBvcHBlclZNKSB7XG4gICAgICB0aGlzLnBvcHBlclZNLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChfdGhpczMudmFsdWUpIHtcbiAgICAgICAgICBfdGhpczMudXBkYXRlUG9wcGVyKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIGZvY3VzaW5nOiBmdW5jdGlvbiBmb2N1c2luZyh2YWwpIHtcbiAgICAgIGlmICh2YWwpIHtcbiAgICAgICAgT2JqZWN0KGRvbV9bXCJhZGRDbGFzc1wiXSkodGhpcy5yZWZlcmVuY2VFbG0sICdmb2N1c2luZycpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgT2JqZWN0KGRvbV9bXCJyZW1vdmVDbGFzc1wiXSkodGhpcy5yZWZlcmVuY2VFbG0sICdmb2N1c2luZycpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgbWV0aG9kczoge1xuICAgIHNob3c6IGZ1bmN0aW9uIHNob3coKSB7XG4gICAgICB0aGlzLnNldEV4cGVjdGVkU3RhdGUodHJ1ZSk7XG4gICAgICB0aGlzLmhhbmRsZVNob3dQb3BwZXIoKTtcbiAgICB9LFxuICAgIGhpZGU6IGZ1bmN0aW9uIGhpZGUoKSB7XG4gICAgICB0aGlzLnNldEV4cGVjdGVkU3RhdGUoZmFsc2UpO1xuICAgICAgdGhpcy5kZWJvdW5jZUNsb3NlKCk7XG4gICAgfSxcbiAgICBoYW5kbGVGb2N1czogZnVuY3Rpb24gaGFuZGxlRm9jdXMoKSB7XG4gICAgICB0aGlzLmZvY3VzaW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMuc2hvdygpO1xuICAgIH0sXG4gICAgaGFuZGxlQmx1cjogZnVuY3Rpb24gaGFuZGxlQmx1cigpIHtcbiAgICAgIHRoaXMuZm9jdXNpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuaGlkZSgpO1xuICAgIH0sXG4gICAgcmVtb3ZlRm9jdXNpbmc6IGZ1bmN0aW9uIHJlbW92ZUZvY3VzaW5nKCkge1xuICAgICAgdGhpcy5mb2N1c2luZyA9IGZhbHNlO1xuICAgIH0sXG4gICAgYWRkVG9vbHRpcENsYXNzOiBmdW5jdGlvbiBhZGRUb29sdGlwQ2xhc3MocHJldikge1xuICAgICAgaWYgKCFwcmV2KSB7XG4gICAgICAgIHJldHVybiAnZWwtdG9vbHRpcCc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gJ2VsLXRvb2x0aXAgJyArIHByZXYucmVwbGFjZSgnZWwtdG9vbHRpcCcsICcnKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGhhbmRsZVNob3dQb3BwZXI6IGZ1bmN0aW9uIGhhbmRsZVNob3dQb3BwZXIoKSB7XG4gICAgICB2YXIgX3RoaXM0ID0gdGhpcztcblxuICAgICAgaWYgKCF0aGlzLmV4cGVjdGVkU3RhdGUgfHwgdGhpcy5tYW51YWwpIHJldHVybjtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpO1xuICAgICAgdGhpcy50aW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzNC5zaG93UG9wcGVyID0gdHJ1ZTtcbiAgICAgIH0sIHRoaXMub3BlbkRlbGF5KTtcblxuICAgICAgaWYgKHRoaXMuaGlkZUFmdGVyID4gMCkge1xuICAgICAgICB0aGlzLnRpbWVvdXRQZW5kaW5nID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgX3RoaXM0LnNob3dQb3BwZXIgPSBmYWxzZTtcbiAgICAgICAgfSwgdGhpcy5oaWRlQWZ0ZXIpO1xuICAgICAgfVxuICAgIH0sXG4gICAgaGFuZGxlQ2xvc2VQb3BwZXI6IGZ1bmN0aW9uIGhhbmRsZUNsb3NlUG9wcGVyKCkge1xuICAgICAgaWYgKHRoaXMuZW50ZXJhYmxlICYmIHRoaXMuZXhwZWN0ZWRTdGF0ZSB8fCB0aGlzLm1hbnVhbCkgcmV0dXJuO1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7XG5cbiAgICAgIGlmICh0aGlzLnRpbWVvdXRQZW5kaW5nKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXRQZW5kaW5nKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2hvd1BvcHBlciA9IGZhbHNlO1xuXG4gICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICB0aGlzLmRvRGVzdHJveSgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgc2V0RXhwZWN0ZWRTdGF0ZTogZnVuY3Rpb24gc2V0RXhwZWN0ZWRTdGF0ZShleHBlY3RlZFN0YXRlKSB7XG4gICAgICBpZiAoZXhwZWN0ZWRTdGF0ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dFBlbmRpbmcpO1xuICAgICAgfVxuICAgICAgdGhpcy5leHBlY3RlZFN0YXRlID0gZXhwZWN0ZWRTdGF0ZTtcbiAgICB9LFxuICAgIGdldEZpcnN0RWxlbWVudDogZnVuY3Rpb24gZ2V0Rmlyc3RFbGVtZW50KCkge1xuICAgICAgdmFyIHNsb3RzID0gdGhpcy4kc2xvdHMuZGVmYXVsdDtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShzbG90cykpIHJldHVybiBudWxsO1xuICAgICAgdmFyIGVsZW1lbnQgPSBudWxsO1xuICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHNsb3RzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICBpZiAoc2xvdHNbaW5kZXhdICYmIHNsb3RzW2luZGV4XS50YWcpIHtcbiAgICAgICAgICBlbGVtZW50ID0gc2xvdHNbaW5kZXhdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxuICB9LFxuXG4gIGJlZm9yZURlc3Ryb3k6IGZ1bmN0aW9uIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgdGhpcy5wb3BwZXJWTSAmJiB0aGlzLnBvcHBlclZNLiRkZXN0cm95KCk7XG4gIH0sXG4gIGRlc3Ryb3llZDogZnVuY3Rpb24gZGVzdHJveWVkKCkge1xuICAgIHZhciByZWZlcmVuY2UgPSB0aGlzLnJlZmVyZW5jZUVsbTtcbiAgICBpZiAocmVmZXJlbmNlLm5vZGVUeXBlID09PSAxKSB7XG4gICAgICBPYmplY3QoZG9tX1tcIm9mZlwiXSkocmVmZXJlbmNlLCAnbW91c2VlbnRlcicsIHRoaXMuc2hvdyk7XG4gICAgICBPYmplY3QoZG9tX1tcIm9mZlwiXSkocmVmZXJlbmNlLCAnbW91c2VsZWF2ZScsIHRoaXMuaGlkZSk7XG4gICAgICBPYmplY3QoZG9tX1tcIm9mZlwiXSkocmVmZXJlbmNlLCAnZm9jdXMnLCB0aGlzLmhhbmRsZUZvY3VzKTtcbiAgICAgIE9iamVjdChkb21fW1wib2ZmXCJdKShyZWZlcmVuY2UsICdibHVyJywgdGhpcy5oYW5kbGVCbHVyKTtcbiAgICAgIE9iamVjdChkb21fW1wib2ZmXCJdKShyZWZlcmVuY2UsICdjbGljaycsIHRoaXMucmVtb3ZlRm9jdXNpbmcpO1xuICAgIH1cbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3Rvb2x0aXAvaW5kZXguanNcblxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuc3JjX21haW4uaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcbiAgVnVlLmNvbXBvbmVudChzcmNfbWFpbi5uYW1lLCBzcmNfbWFpbik7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc190b29sdGlwID0gKHNyY19tYWluKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvbWVzc2FnZS1ib3gvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTZiMjliMDEyJlxudmFyIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF82YjI5YjAxMl9yZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJ0cmFuc2l0aW9uXCIsIHsgYXR0cnM6IHsgbmFtZTogXCJtc2dib3gtZmFkZVwiIH0gfSwgW1xuICAgIF9jKFxuICAgICAgXCJkaXZcIixcbiAgICAgIHtcbiAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgIHZhbHVlOiBfdm0udmlzaWJsZSxcbiAgICAgICAgICAgIGV4cHJlc3Npb246IFwidmlzaWJsZVwiXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1tZXNzYWdlLWJveF9fd3JhcHBlclwiLFxuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIHRhYmluZGV4OiBcIi0xXCIsXG4gICAgICAgICAgcm9sZTogXCJkaWFsb2dcIixcbiAgICAgICAgICBcImFyaWEtbW9kYWxcIjogXCJ0cnVlXCIsXG4gICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IF92bS50aXRsZSB8fCBcImRpYWxvZ1wiXG4gICAgICAgIH0sXG4gICAgICAgIG9uOiB7XG4gICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgaWYgKCRldmVudC50YXJnZXQgIT09ICRldmVudC5jdXJyZW50VGFyZ2V0KSB7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gX3ZtLmhhbmRsZVdyYXBwZXJDbGljaygkZXZlbnQpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgW1xuICAgICAgICBfYyhcbiAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLW1lc3NhZ2UtYm94XCIsXG4gICAgICAgICAgICBjbGFzczogW192bS5jdXN0b21DbGFzcywgX3ZtLmNlbnRlciAmJiBcImVsLW1lc3NhZ2UtYm94LS1jZW50ZXJcIl1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFtcbiAgICAgICAgICAgIF92bS50aXRsZSAhPT0gbnVsbFxuICAgICAgICAgICAgICA/IF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiZWwtbWVzc2FnZS1ib3hfX2hlYWRlclwiIH0sIFtcbiAgICAgICAgICAgICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiZWwtbWVzc2FnZS1ib3hfX3RpdGxlXCIgfSwgW1xuICAgICAgICAgICAgICAgICAgICBfdm0uaWNvbiAmJiBfdm0uY2VudGVyXG4gICAgICAgICAgICAgICAgICAgICAgPyBfYyhcImRpdlwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBbXCJlbC1tZXNzYWdlLWJveF9fc3RhdHVzXCIsIF92bS5pY29uXVxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICAgICAgICBfYyhcInNwYW5cIiwgW192bS5fdihfdm0uX3MoX3ZtLnRpdGxlKSldKVxuICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICBfdm0uc2hvd0Nsb3NlXG4gICAgICAgICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1tZXNzYWdlLWJveF9faGVhZGVyYnRuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHR5cGU6IFwiYnV0dG9uXCIsIFwiYXJpYS1sYWJlbFwiOiBcIkNsb3NlXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uaGFuZGxlQWN0aW9uKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uZGlzdGluZ3Vpc2hDYW5jZWxBbmRDbG9zZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gXCJjbG9zZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcImNhbmNlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlkb3duOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIShcImJ1dHRvblwiIGluICRldmVudCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl9rKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudC5rZXlDb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZW50ZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnQua2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiRW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5oYW5kbGVBY3Rpb24oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5kaXN0aW5ndWlzaENhbmNlbEFuZENsb3NlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcImNsb3NlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwiY2FuY2VsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFwiaVwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtbWVzc2FnZS1ib3hfX2Nsb3NlIGVsLWljb24tY2xvc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLW1lc3NhZ2UtYm94X19jb250ZW50XCIgfSwgW1xuICAgICAgICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLW1lc3NhZ2UtYm94X19jb250YWluZXJcIiB9LCBbXG4gICAgICAgICAgICAgICAgX3ZtLmljb24gJiYgIV92bS5jZW50ZXIgJiYgX3ZtLm1lc3NhZ2UgIT09IFwiXCJcbiAgICAgICAgICAgICAgICAgID8gX2MoXCJkaXZcIiwgeyBjbGFzczogW1wiZWwtbWVzc2FnZS1ib3hfX3N0YXR1c1wiLCBfdm0uaWNvbl0gfSlcbiAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgICAgX3ZtLm1lc3NhZ2UgIT09IFwiXCJcbiAgICAgICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiBcImVsLW1lc3NhZ2UtYm94X19tZXNzYWdlXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3QoXCJkZWZhdWx0XCIsIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIV92bS5kYW5nZXJvdXNseVVzZUhUTUxTdHJpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IF9jKFwicFwiLCBbX3ZtLl92KF92bS5fcyhfdm0ubWVzc2FnZSkpXSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF9jKFwicFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbVByb3BzOiB7IGlubmVySFRNTDogX3ZtLl9zKF92bS5tZXNzYWdlKSB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0uc2hvd0lucHV0LFxuICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwic2hvd0lucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLW1lc3NhZ2UtYm94X19pbnB1dFwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBfYyhcImVsLWlucHV0XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgcmVmOiBcImlucHV0XCIsXG4gICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogX3ZtLmlucHV0VHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogX3ZtLmlucHV0UGxhY2Vob2xkZXJcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgbmF0aXZlT246IHtcbiAgICAgICAgICAgICAgICAgICAgICBrZXlkb3duOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIShcImJ1dHRvblwiIGluICRldmVudCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl9rKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudC5rZXlDb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZW50ZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnQua2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiRW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0uaGFuZGxlSW5wdXRFbnRlcigkZXZlbnQpXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBtb2RlbDoge1xuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0uaW5wdXRWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjazogZnVuY3Rpb24oJCR2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfdm0uaW5wdXRWYWx1ZSA9ICQkdlxuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJpbnB1dFZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLW1lc3NhZ2UtYm94X19lcnJvcm1zZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmlsaXR5OiAhIV92bS5lZGl0b3JFcnJvck1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcInZpc2libGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwiaGlkZGVuXCJcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFtfdm0uX3YoX3ZtLl9zKF92bS5lZGl0b3JFcnJvck1lc3NhZ2UpKV1cbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJlbC1tZXNzYWdlLWJveF9fYnRuc1wiIH0sXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBfdm0uc2hvd0NhbmNlbEJ1dHRvblxuICAgICAgICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICAgICAgICBcImVsLWJ1dHRvblwiLFxuICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBbX3ZtLmNhbmNlbEJ1dHRvbkNsYXNzZXNdLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGluZzogX3ZtLmNhbmNlbEJ1dHRvbkxvYWRpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJvdW5kOiBfdm0ucm91bmRCdXR0b24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU6IFwic21hbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGtleWRvd246IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEoXCJidXR0b25cIiBpbiAkZXZlbnQpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX2soXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudC5rZXlDb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImVudGVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnQua2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkVudGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5oYW5kbGVBY3Rpb24oXCJjYW5jZWxcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZU9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uaGFuZGxlQWN0aW9uKFwiY2FuY2VsXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgICAgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5jYW5jZWxCdXR0b25UZXh0IHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS50KFwiZWwubWVzc2FnZWJveC5jYW5jZWxcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICBcImVsLWJ1dHRvblwiLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IF92bS5zaG93Q29uZmlybUJ1dHRvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwic2hvd0NvbmZpcm1CdXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgcmVmOiBcImNvbmZpcm1cIixcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M6IFtfdm0uY29uZmlybUJ1dHRvbkNsYXNzZXNdLFxuICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgIGxvYWRpbmc6IF92bS5jb25maXJtQnV0dG9uTG9hZGluZyxcbiAgICAgICAgICAgICAgICAgICAgICByb3VuZDogX3ZtLnJvdW5kQnV0dG9uLFxuICAgICAgICAgICAgICAgICAgICAgIHNpemU6IFwic21hbGxcIlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgIGtleWRvd246IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAhKFwiYnV0dG9uXCIgaW4gJGV2ZW50KSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX2soXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50LmtleUNvZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlbnRlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudC5rZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJFbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLmhhbmRsZUFjdGlvbihcImNvbmZpcm1cIilcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIG5hdGl2ZU9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLmhhbmRsZUFjdGlvbihcImNvbmZpcm1cIilcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIF92bS5fdihcbiAgICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgICBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5jb25maXJtQnV0dG9uVGV4dCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS50KFwiZWwubWVzc2FnZWJveC5jb25maXJtXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICApICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAxXG4gICAgICAgICAgICApXG4gICAgICAgICAgXVxuICAgICAgICApXG4gICAgICBdXG4gICAgKVxuICBdKVxufVxudmFyIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF82YjI5YjAxMl9zdGF0aWNSZW5kZXJGbnMgPSBbXVxubWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzZiMjliMDEyX3JlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvbWVzc2FnZS1ib3gvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTZiMjliMDEyJlxuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiZWxlbWVudC11aS9saWIvbG9jYWxlXCJcbnZhciBsaWJfbG9jYWxlXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTIpO1xudmFyIGxpYl9sb2NhbGVfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4obGliX2xvY2FsZV8pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiZWxlbWVudC11aS9saWIvdXRpbHMvYXJpYS1kaWFsb2dcIlxudmFyIGFyaWFfZGlhbG9nXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDApO1xudmFyIGFyaWFfZGlhbG9nX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGFyaWFfZGlhbG9nXyk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL21lc3NhZ2UtYm94L3NyYy9tYWluLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5cblxuXG5cblxuXG5cblxudmFyIG1lc3NhZ2VCb3ggPSB2b2lkIDA7XG52YXIgdHlwZU1hcCA9IHtcbiAgc3VjY2VzczogJ3N1Y2Nlc3MnLFxuICBpbmZvOiAnaW5mbycsXG4gIHdhcm5pbmc6ICd3YXJuaW5nJyxcbiAgZXJyb3I6ICdlcnJvcidcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIG1lc3NhZ2VfYm94X3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbWl4aW5zOiBbcG9wdXBfZGVmYXVsdC5hLCBsb2NhbGVfZGVmYXVsdC5hXSxcblxuICBwcm9wczoge1xuICAgIG1vZGFsOiB7XG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSxcbiAgICBsb2NrU2Nyb2xsOiB7XG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSxcbiAgICBzaG93Q2xvc2U6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSxcbiAgICBjbG9zZU9uQ2xpY2tNb2RhbDoge1xuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0sXG4gICAgY2xvc2VPblByZXNzRXNjYXBlOiB7XG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSxcbiAgICBjbG9zZU9uSGFzaENoYW5nZToge1xuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0sXG4gICAgY2VudGVyOiB7XG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIHR5cGU6IEJvb2xlYW5cbiAgICB9LFxuICAgIHJvdW5kQnV0dG9uOiB7XG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIHR5cGU6IEJvb2xlYW5cbiAgICB9XG4gIH0sXG5cbiAgY29tcG9uZW50czoge1xuICAgIEVsSW5wdXQ6IGlucHV0X2RlZmF1bHQuYSxcbiAgICBFbEJ1dHRvbjogYnV0dG9uX2RlZmF1bHQuYVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgaWNvbjogZnVuY3Rpb24gaWNvbigpIHtcbiAgICAgIHZhciB0eXBlID0gdGhpcy50eXBlLFxuICAgICAgICAgIGljb25DbGFzcyA9IHRoaXMuaWNvbkNsYXNzO1xuXG4gICAgICByZXR1cm4gaWNvbkNsYXNzIHx8ICh0eXBlICYmIHR5cGVNYXBbdHlwZV0gPyAnZWwtaWNvbi0nICsgdHlwZU1hcFt0eXBlXSA6ICcnKTtcbiAgICB9LFxuICAgIGNvbmZpcm1CdXR0b25DbGFzc2VzOiBmdW5jdGlvbiBjb25maXJtQnV0dG9uQ2xhc3NlcygpIHtcbiAgICAgIHJldHVybiAnZWwtYnV0dG9uLS1wcmltYXJ5ICcgKyB0aGlzLmNvbmZpcm1CdXR0b25DbGFzcztcbiAgICB9LFxuICAgIGNhbmNlbEJ1dHRvbkNsYXNzZXM6IGZ1bmN0aW9uIGNhbmNlbEJ1dHRvbkNsYXNzZXMoKSB7XG4gICAgICByZXR1cm4gJycgKyB0aGlzLmNhbmNlbEJ1dHRvbkNsYXNzO1xuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0U2FmZUNsb3NlOiBmdW5jdGlvbiBnZXRTYWZlQ2xvc2UoKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICB2YXIgY3VycmVudElkID0gdGhpcy51aWQ7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmIChjdXJyZW50SWQgPT09IF90aGlzLnVpZCkgX3RoaXMuZG9DbG9zZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgfSxcbiAgICBkb0Nsb3NlOiBmdW5jdGlvbiBkb0Nsb3NlKCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIGlmICghdGhpcy52aXNpYmxlKSByZXR1cm47XG4gICAgICB0aGlzLnZpc2libGUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2Nsb3NpbmcgPSB0cnVlO1xuXG4gICAgICB0aGlzLm9uQ2xvc2UgJiYgdGhpcy5vbkNsb3NlKCk7XG4gICAgICBtZXNzYWdlQm94LmNsb3NlRGlhbG9nKCk7IC8vIOino+e7kVxuICAgICAgaWYgKHRoaXMubG9ja1Njcm9sbCkge1xuICAgICAgICBzZXRUaW1lb3V0KHRoaXMucmVzdG9yZUJvZHlTdHlsZSwgMjAwKTtcbiAgICAgIH1cbiAgICAgIHRoaXMub3BlbmVkID0gZmFsc2U7XG4gICAgICB0aGlzLmRvQWZ0ZXJDbG9zZSgpO1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChfdGhpczIuYWN0aW9uKSBfdGhpczIuY2FsbGJhY2soX3RoaXMyLmFjdGlvbiwgX3RoaXMyKTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgaGFuZGxlV3JhcHBlckNsaWNrOiBmdW5jdGlvbiBoYW5kbGVXcmFwcGVyQ2xpY2soKSB7XG4gICAgICBpZiAodGhpcy5jbG9zZU9uQ2xpY2tNb2RhbCkge1xuICAgICAgICB0aGlzLmhhbmRsZUFjdGlvbih0aGlzLmRpc3Rpbmd1aXNoQ2FuY2VsQW5kQ2xvc2UgPyAnY2xvc2UnIDogJ2NhbmNlbCcpO1xuICAgICAgfVxuICAgIH0sXG4gICAgaGFuZGxlSW5wdXRFbnRlcjogZnVuY3Rpb24gaGFuZGxlSW5wdXRFbnRlcigpIHtcbiAgICAgIGlmICh0aGlzLmlucHV0VHlwZSAhPT0gJ3RleHRhcmVhJykge1xuICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVBY3Rpb24oJ2NvbmZpcm0nKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGhhbmRsZUFjdGlvbjogZnVuY3Rpb24gaGFuZGxlQWN0aW9uKGFjdGlvbikge1xuICAgICAgaWYgKHRoaXMuJHR5cGUgPT09ICdwcm9tcHQnICYmIGFjdGlvbiA9PT0gJ2NvbmZpcm0nICYmICF0aGlzLnZhbGlkYXRlKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5hY3Rpb24gPSBhY3Rpb247XG4gICAgICBpZiAodHlwZW9mIHRoaXMuYmVmb3JlQ2xvc2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5jbG9zZSA9IHRoaXMuZ2V0U2FmZUNsb3NlKCk7XG4gICAgICAgIHRoaXMuYmVmb3JlQ2xvc2UoYWN0aW9uLCB0aGlzLCB0aGlzLmNsb3NlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZG9DbG9zZSgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgdmFsaWRhdGU6IGZ1bmN0aW9uIHZhbGlkYXRlKCkge1xuICAgICAgaWYgKHRoaXMuJHR5cGUgPT09ICdwcm9tcHQnKSB7XG4gICAgICAgIHZhciBpbnB1dFBhdHRlcm4gPSB0aGlzLmlucHV0UGF0dGVybjtcbiAgICAgICAgaWYgKGlucHV0UGF0dGVybiAmJiAhaW5wdXRQYXR0ZXJuLnRlc3QodGhpcy5pbnB1dFZhbHVlIHx8ICcnKSkge1xuICAgICAgICAgIHRoaXMuZWRpdG9yRXJyb3JNZXNzYWdlID0gdGhpcy5pbnB1dEVycm9yTWVzc2FnZSB8fCBPYmplY3QobGliX2xvY2FsZV9bXCJ0XCJdKSgnZWwubWVzc2FnZWJveC5lcnJvcicpO1xuICAgICAgICAgIE9iamVjdChkb21fW1wiYWRkQ2xhc3NcIl0pKHRoaXMuZ2V0SW5wdXRFbGVtZW50KCksICdpbnZhbGlkJyk7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBpbnB1dFZhbGlkYXRvciA9IHRoaXMuaW5wdXRWYWxpZGF0b3I7XG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXRWYWxpZGF0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB2YXIgdmFsaWRhdGVSZXN1bHQgPSBpbnB1dFZhbGlkYXRvcih0aGlzLmlucHV0VmFsdWUpO1xuICAgICAgICAgIGlmICh2YWxpZGF0ZVJlc3VsdCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yRXJyb3JNZXNzYWdlID0gdGhpcy5pbnB1dEVycm9yTWVzc2FnZSB8fCBPYmplY3QobGliX2xvY2FsZV9bXCJ0XCJdKSgnZWwubWVzc2FnZWJveC5lcnJvcicpO1xuICAgICAgICAgICAgT2JqZWN0KGRvbV9bXCJhZGRDbGFzc1wiXSkodGhpcy5nZXRJbnB1dEVsZW1lbnQoKSwgJ2ludmFsaWQnKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHR5cGVvZiB2YWxpZGF0ZVJlc3VsdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yRXJyb3JNZXNzYWdlID0gdmFsaWRhdGVSZXN1bHQ7XG4gICAgICAgICAgICBPYmplY3QoZG9tX1tcImFkZENsYXNzXCJdKSh0aGlzLmdldElucHV0RWxlbWVudCgpLCAnaW52YWxpZCcpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5lZGl0b3JFcnJvck1lc3NhZ2UgPSAnJztcbiAgICAgIE9iamVjdChkb21fW1wicmVtb3ZlQ2xhc3NcIl0pKHRoaXMuZ2V0SW5wdXRFbGVtZW50KCksICdpbnZhbGlkJyk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICAgIGdldEZpcnN0Rm9jdXM6IGZ1bmN0aW9uIGdldEZpcnN0Rm9jdXMoKSB7XG4gICAgICB2YXIgYnRuID0gdGhpcy4kZWwucXVlcnlTZWxlY3RvcignLmVsLW1lc3NhZ2UtYm94X19idG5zIC5lbC1idXR0b24nKTtcbiAgICAgIHZhciB0aXRsZSA9IHRoaXMuJGVsLnF1ZXJ5U2VsZWN0b3IoJy5lbC1tZXNzYWdlLWJveF9fYnRucyAuZWwtbWVzc2FnZS1ib3hfX3RpdGxlJyk7XG4gICAgICByZXR1cm4gYnRuIHx8IHRpdGxlO1xuICAgIH0sXG4gICAgZ2V0SW5wdXRFbGVtZW50OiBmdW5jdGlvbiBnZXRJbnB1dEVsZW1lbnQoKSB7XG4gICAgICB2YXIgaW5wdXRSZWZzID0gdGhpcy4kcmVmcy5pbnB1dC4kcmVmcztcbiAgICAgIHJldHVybiBpbnB1dFJlZnMuaW5wdXQgfHwgaW5wdXRSZWZzLnRleHRhcmVhO1xuICAgIH0sXG4gICAgaGFuZGxlQ2xvc2U6IGZ1bmN0aW9uIGhhbmRsZUNsb3NlKCkge1xuICAgICAgdGhpcy5oYW5kbGVBY3Rpb24oJ2Nsb3NlJyk7XG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgaW5wdXRWYWx1ZToge1xuICAgICAgaW1tZWRpYXRlOiB0cnVlLFxuICAgICAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcih2YWwpIHtcbiAgICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKF8pIHtcbiAgICAgICAgICBpZiAoX3RoaXMzLiR0eXBlID09PSAncHJvbXB0JyAmJiB2YWwgIT09IG51bGwpIHtcbiAgICAgICAgICAgIF90aGlzMy52YWxpZGF0ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIHZpc2libGU6IGZ1bmN0aW9uIHZpc2libGUodmFsKSB7XG4gICAgICB2YXIgX3RoaXM0ID0gdGhpcztcblxuICAgICAgaWYgKHZhbCkge1xuICAgICAgICB0aGlzLnVpZCsrO1xuICAgICAgICBpZiAodGhpcy4kdHlwZSA9PT0gJ2FsZXJ0JyB8fCB0aGlzLiR0eXBlID09PSAnY29uZmlybScpIHtcbiAgICAgICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpczQuJHJlZnMuY29uZmlybS4kZWwuZm9jdXMoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZvY3VzQWZ0ZXJDbG9zZWQgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICAgICAgICBtZXNzYWdlQm94ID0gbmV3IGFyaWFfZGlhbG9nX2RlZmF1bHQuYSh0aGlzLiRlbCwgdGhpcy5mb2N1c0FmdGVyQ2xvc2VkLCB0aGlzLmdldEZpcnN0Rm9jdXMoKSk7XG4gICAgICB9XG5cbiAgICAgIC8vIHByb21wdFxuICAgICAgaWYgKHRoaXMuJHR5cGUgIT09ICdwcm9tcHQnKSByZXR1cm47XG4gICAgICBpZiAodmFsKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmIChfdGhpczQuJHJlZnMuaW5wdXQgJiYgX3RoaXM0LiRyZWZzLmlucHV0LiRlbCkge1xuICAgICAgICAgICAgX3RoaXM0LmdldElucHV0RWxlbWVudCgpLmZvY3VzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LCA1MDApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5lZGl0b3JFcnJvck1lc3NhZ2UgPSAnJztcbiAgICAgICAgT2JqZWN0KGRvbV9bXCJyZW1vdmVDbGFzc1wiXSkodGhpcy5nZXRJbnB1dEVsZW1lbnQoKSwgJ2ludmFsaWQnKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCgpIHtcbiAgICB2YXIgX3RoaXM1ID0gdGhpcztcblxuICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChfdGhpczUuY2xvc2VPbkhhc2hDaGFuZ2UpIHtcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2hhc2hjaGFuZ2UnLCBfdGhpczUuY2xvc2UpO1xuICAgICAgfVxuICAgIH0pO1xuICB9LFxuICBiZWZvcmVEZXN0cm95OiBmdW5jdGlvbiBiZWZvcmVEZXN0cm95KCkge1xuICAgIGlmICh0aGlzLmNsb3NlT25IYXNoQ2hhbmdlKSB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignaGFzaGNoYW5nZScsIHRoaXMuY2xvc2UpO1xuICAgIH1cbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIG1lc3NhZ2VCb3guY2xvc2VEaWFsb2coKTtcbiAgICB9KTtcbiAgfSxcbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdWlkOiAxLFxuICAgICAgdGl0bGU6IHVuZGVmaW5lZCxcbiAgICAgIG1lc3NhZ2U6ICcnLFxuICAgICAgdHlwZTogJycsXG4gICAgICBpY29uQ2xhc3M6ICcnLFxuICAgICAgY3VzdG9tQ2xhc3M6ICcnLFxuICAgICAgc2hvd0lucHV0OiBmYWxzZSxcbiAgICAgIGlucHV0VmFsdWU6IG51bGwsXG4gICAgICBpbnB1dFBsYWNlaG9sZGVyOiAnJyxcbiAgICAgIGlucHV0VHlwZTogJ3RleHQnLFxuICAgICAgaW5wdXRQYXR0ZXJuOiBudWxsLFxuICAgICAgaW5wdXRWYWxpZGF0b3I6IG51bGwsXG4gICAgICBpbnB1dEVycm9yTWVzc2FnZTogJycsXG4gICAgICBzaG93Q29uZmlybUJ1dHRvbjogdHJ1ZSxcbiAgICAgIHNob3dDYW5jZWxCdXR0b246IGZhbHNlLFxuICAgICAgYWN0aW9uOiAnJyxcbiAgICAgIGNvbmZpcm1CdXR0b25UZXh0OiAnJyxcbiAgICAgIGNhbmNlbEJ1dHRvblRleHQ6ICcnLFxuICAgICAgY29uZmlybUJ1dHRvbkxvYWRpbmc6IGZhbHNlLFxuICAgICAgY2FuY2VsQnV0dG9uTG9hZGluZzogZmFsc2UsXG4gICAgICBjb25maXJtQnV0dG9uQ2xhc3M6ICcnLFxuICAgICAgY29uZmlybUJ1dHRvbkRpc2FibGVkOiBmYWxzZSxcbiAgICAgIGNhbmNlbEJ1dHRvbkNsYXNzOiAnJyxcbiAgICAgIGVkaXRvckVycm9yTWVzc2FnZTogbnVsbCxcbiAgICAgIGNhbGxiYWNrOiBudWxsLFxuICAgICAgZGFuZ2Vyb3VzbHlVc2VIVE1MU3RyaW5nOiBmYWxzZSxcbiAgICAgIGZvY3VzQWZ0ZXJDbG9zZWQ6IG51bGwsXG4gICAgICBpc09uQ29tcG9zaXRpb246IGZhbHNlLFxuICAgICAgZGlzdGluZ3Vpc2hDYW5jZWxBbmRDbG9zZTogZmFsc2VcbiAgICB9O1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvbWVzc2FnZS1ib3gvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhY2thZ2VzX21lc3NhZ2VfYm94X3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKG1lc3NhZ2VfYm94X3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL21lc3NhZ2UtYm94L3NyYy9tYWluLnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIHNyY19tYWluX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgcGFja2FnZXNfbWVzc2FnZV9ib3hfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF82YjI5YjAxMl9yZW5kZXIsXG4gIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF82YjI5YjAxMl9zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIHNyY19tYWluX2FwaTsgfVxuc3JjX21haW5fY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy9tZXNzYWdlLWJveC9zcmMvbWFpbi52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgbWVzc2FnZV9ib3hfc3JjX21haW4gPSAoc3JjX21haW5fY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcImVsZW1lbnQtdWkvbGliL3V0aWxzL3Zkb21cIlxudmFyIHZkb21fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMik7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvbWVzc2FnZS1ib3gvc3JjL21haW4uanNcbnZhciBtYWluX3R5cGVvZiA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiID8gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfSA6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07XG5cbnZhciBtYWluX2RlZmF1bHRzID0ge1xuICB0aXRsZTogbnVsbCxcbiAgbWVzc2FnZTogJycsXG4gIHR5cGU6ICcnLFxuICBpY29uQ2xhc3M6ICcnLFxuICBzaG93SW5wdXQ6IGZhbHNlLFxuICBzaG93Q2xvc2U6IHRydWUsXG4gIG1vZGFsRmFkZTogdHJ1ZSxcbiAgbG9ja1Njcm9sbDogdHJ1ZSxcbiAgY2xvc2VPbkNsaWNrTW9kYWw6IHRydWUsXG4gIGNsb3NlT25QcmVzc0VzY2FwZTogdHJ1ZSxcbiAgY2xvc2VPbkhhc2hDaGFuZ2U6IHRydWUsXG4gIGlucHV0VmFsdWU6IG51bGwsXG4gIGlucHV0UGxhY2Vob2xkZXI6ICcnLFxuICBpbnB1dFR5cGU6ICd0ZXh0JyxcbiAgaW5wdXRQYXR0ZXJuOiBudWxsLFxuICBpbnB1dFZhbGlkYXRvcjogbnVsbCxcbiAgaW5wdXRFcnJvck1lc3NhZ2U6ICcnLFxuICBzaG93Q29uZmlybUJ1dHRvbjogdHJ1ZSxcbiAgc2hvd0NhbmNlbEJ1dHRvbjogZmFsc2UsXG4gIGNvbmZpcm1CdXR0b25Qb3NpdGlvbjogJ3JpZ2h0JyxcbiAgY29uZmlybUJ1dHRvbkhpZ2hsaWdodDogZmFsc2UsXG4gIGNhbmNlbEJ1dHRvbkhpZ2hsaWdodDogZmFsc2UsXG4gIGNvbmZpcm1CdXR0b25UZXh0OiAnJyxcbiAgY2FuY2VsQnV0dG9uVGV4dDogJycsXG4gIGNvbmZpcm1CdXR0b25DbGFzczogJycsXG4gIGNhbmNlbEJ1dHRvbkNsYXNzOiAnJyxcbiAgY3VzdG9tQ2xhc3M6ICcnLFxuICBiZWZvcmVDbG9zZTogbnVsbCxcbiAgZGFuZ2Vyb3VzbHlVc2VIVE1MU3RyaW5nOiBmYWxzZSxcbiAgY2VudGVyOiBmYWxzZSxcbiAgcm91bmRCdXR0b246IGZhbHNlLFxuICBkaXN0aW5ndWlzaENhbmNlbEFuZENsb3NlOiBmYWxzZVxufTtcblxuXG5cblxuXG5cbnZhciBNZXNzYWdlQm94Q29uc3RydWN0b3IgPSBleHRlcm5hbF92dWVfZGVmYXVsdC5hLmV4dGVuZChtZXNzYWdlX2JveF9zcmNfbWFpbik7XG5cbnZhciBjdXJyZW50TXNnID0gdm9pZCAwLFxuICAgIG1haW5faW5zdGFuY2UgPSB2b2lkIDA7XG52YXIgbXNnUXVldWUgPSBbXTtcblxudmFyIGRlZmF1bHRDYWxsYmFjayA9IGZ1bmN0aW9uIGRlZmF1bHRDYWxsYmFjayhhY3Rpb24pIHtcbiAgaWYgKGN1cnJlbnRNc2cpIHtcbiAgICB2YXIgY2FsbGJhY2sgPSBjdXJyZW50TXNnLmNhbGxiYWNrO1xuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGlmIChtYWluX2luc3RhbmNlLnNob3dJbnB1dCkge1xuICAgICAgICBjYWxsYmFjayhtYWluX2luc3RhbmNlLmlucHV0VmFsdWUsIGFjdGlvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYWxsYmFjayhhY3Rpb24pO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY3VycmVudE1zZy5yZXNvbHZlKSB7XG4gICAgICBpZiAoYWN0aW9uID09PSAnY29uZmlybScpIHtcbiAgICAgICAgaWYgKG1haW5faW5zdGFuY2Uuc2hvd0lucHV0KSB7XG4gICAgICAgICAgY3VycmVudE1zZy5yZXNvbHZlKHsgdmFsdWU6IG1haW5faW5zdGFuY2UuaW5wdXRWYWx1ZSwgYWN0aW9uOiBhY3Rpb24gfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY3VycmVudE1zZy5yZXNvbHZlKGFjdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoY3VycmVudE1zZy5yZWplY3QgJiYgKGFjdGlvbiA9PT0gJ2NhbmNlbCcgfHwgYWN0aW9uID09PSAnY2xvc2UnKSkge1xuICAgICAgICBjdXJyZW50TXNnLnJlamVjdChhY3Rpb24pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxudmFyIGluaXRJbnN0YW5jZSA9IGZ1bmN0aW9uIGluaXRJbnN0YW5jZSgpIHtcbiAgbWFpbl9pbnN0YW5jZSA9IG5ldyBNZXNzYWdlQm94Q29uc3RydWN0b3Ioe1xuICAgIGVsOiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxuICB9KTtcblxuICBtYWluX2luc3RhbmNlLmNhbGxiYWNrID0gZGVmYXVsdENhbGxiYWNrO1xufTtcblxudmFyIG1haW5fc2hvd05leHRNc2cgPSBmdW5jdGlvbiBzaG93TmV4dE1zZygpIHtcbiAgaWYgKCFtYWluX2luc3RhbmNlKSB7XG4gICAgaW5pdEluc3RhbmNlKCk7XG4gIH1cbiAgbWFpbl9pbnN0YW5jZS5hY3Rpb24gPSAnJztcblxuICBpZiAoIW1haW5faW5zdGFuY2UudmlzaWJsZSB8fCBtYWluX2luc3RhbmNlLmNsb3NlVGltZXIpIHtcbiAgICBpZiAobXNnUXVldWUubGVuZ3RoID4gMCkge1xuICAgICAgY3VycmVudE1zZyA9IG1zZ1F1ZXVlLnNoaWZ0KCk7XG5cbiAgICAgIHZhciBvcHRpb25zID0gY3VycmVudE1zZy5vcHRpb25zO1xuICAgICAgZm9yICh2YXIgcHJvcCBpbiBvcHRpb25zKSB7XG4gICAgICAgIGlmIChvcHRpb25zLmhhc093blByb3BlcnR5KHByb3ApKSB7XG4gICAgICAgICAgbWFpbl9pbnN0YW5jZVtwcm9wXSA9IG9wdGlvbnNbcHJvcF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25zLmNhbGxiYWNrID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbWFpbl9pbnN0YW5jZS5jYWxsYmFjayA9IGRlZmF1bHRDYWxsYmFjaztcbiAgICAgIH1cblxuICAgICAgdmFyIG9sZENiID0gbWFpbl9pbnN0YW5jZS5jYWxsYmFjaztcbiAgICAgIG1haW5faW5zdGFuY2UuY2FsbGJhY2sgPSBmdW5jdGlvbiAoYWN0aW9uLCBpbnN0YW5jZSkge1xuICAgICAgICBvbGRDYihhY3Rpb24sIGluc3RhbmNlKTtcbiAgICAgICAgc2hvd05leHRNc2coKTtcbiAgICAgIH07XG4gICAgICBpZiAoT2JqZWN0KHZkb21fW1wiaXNWTm9kZVwiXSkobWFpbl9pbnN0YW5jZS5tZXNzYWdlKSkge1xuICAgICAgICBtYWluX2luc3RhbmNlLiRzbG90cy5kZWZhdWx0ID0gW21haW5faW5zdGFuY2UubWVzc2FnZV07XG4gICAgICAgIG1haW5faW5zdGFuY2UubWVzc2FnZSA9IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGUgbWFpbl9pbnN0YW5jZS4kc2xvdHMuZGVmYXVsdDtcbiAgICAgIH1cbiAgICAgIFsnbW9kYWwnLCAnc2hvd0Nsb3NlJywgJ2Nsb3NlT25DbGlja01vZGFsJywgJ2Nsb3NlT25QcmVzc0VzY2FwZScsICdjbG9zZU9uSGFzaENoYW5nZSddLmZvckVhY2goZnVuY3Rpb24gKHByb3ApIHtcbiAgICAgICAgaWYgKG1haW5faW5zdGFuY2VbcHJvcF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIG1haW5faW5zdGFuY2VbcHJvcF0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobWFpbl9pbnN0YW5jZS4kZWwpO1xuXG4gICAgICBleHRlcm5hbF92dWVfZGVmYXVsdC5hLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbWFpbl9pbnN0YW5jZS52aXNpYmxlID0gdHJ1ZTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufTtcblxudmFyIG1haW5fTWVzc2FnZUJveCA9IGZ1bmN0aW9uIE1lc3NhZ2VCb3gob3B0aW9ucywgY2FsbGJhY2spIHtcbiAgaWYgKGV4dGVybmFsX3Z1ZV9kZWZhdWx0LmEucHJvdG90eXBlLiRpc1NlcnZlcikgcmV0dXJuO1xuICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdzdHJpbmcnIHx8IE9iamVjdCh2ZG9tX1tcImlzVk5vZGVcIl0pKG9wdGlvbnMpKSB7XG4gICAgb3B0aW9ucyA9IHtcbiAgICAgIG1lc3NhZ2U6IG9wdGlvbnNcbiAgICB9O1xuICAgIGlmICh0eXBlb2YgYXJndW1lbnRzWzFdID09PSAnc3RyaW5nJykge1xuICAgICAgb3B0aW9ucy50aXRsZSA9IGFyZ3VtZW50c1sxXTtcbiAgICB9XG4gIH0gZWxzZSBpZiAob3B0aW9ucy5jYWxsYmFjayAmJiAhY2FsbGJhY2spIHtcbiAgICBjYWxsYmFjayA9IG9wdGlvbnMuY2FsbGJhY2s7XG4gIH1cblxuICBpZiAodHlwZW9mIFByb21pc2UgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICAgIG1zZ1F1ZXVlLnB1c2goe1xuICAgICAgICBvcHRpb25zOiBtZXJnZV9kZWZhdWx0KCkoe30sIG1haW5fZGVmYXVsdHMsIE1lc3NhZ2VCb3guZGVmYXVsdHMsIG9wdGlvbnMpLFxuICAgICAgICBjYWxsYmFjazogY2FsbGJhY2ssXG4gICAgICAgIHJlc29sdmU6IHJlc29sdmUsXG4gICAgICAgIHJlamVjdDogcmVqZWN0XG4gICAgICB9KTtcblxuICAgICAgbWFpbl9zaG93TmV4dE1zZygpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG1zZ1F1ZXVlLnB1c2goe1xuICAgICAgb3B0aW9uczogbWVyZ2VfZGVmYXVsdCgpKHt9LCBtYWluX2RlZmF1bHRzLCBNZXNzYWdlQm94LmRlZmF1bHRzLCBvcHRpb25zKSxcbiAgICAgIGNhbGxiYWNrOiBjYWxsYmFja1xuICAgIH0pO1xuXG4gICAgbWFpbl9zaG93TmV4dE1zZygpO1xuICB9XG59O1xuXG5tYWluX01lc3NhZ2VCb3guc2V0RGVmYXVsdHMgPSBmdW5jdGlvbiAoZGVmYXVsdHMpIHtcbiAgbWFpbl9NZXNzYWdlQm94LmRlZmF1bHRzID0gZGVmYXVsdHM7XG59O1xuXG5tYWluX01lc3NhZ2VCb3guYWxlcnQgPSBmdW5jdGlvbiAobWVzc2FnZSwgdGl0bGUsIG9wdGlvbnMpIHtcbiAgaWYgKCh0eXBlb2YgdGl0bGUgPT09ICd1bmRlZmluZWQnID8gJ3VuZGVmaW5lZCcgOiBtYWluX3R5cGVvZih0aXRsZSkpID09PSAnb2JqZWN0Jykge1xuICAgIG9wdGlvbnMgPSB0aXRsZTtcbiAgICB0aXRsZSA9ICcnO1xuICB9IGVsc2UgaWYgKHRpdGxlID09PSB1bmRlZmluZWQpIHtcbiAgICB0aXRsZSA9ICcnO1xuICB9XG4gIHJldHVybiBtYWluX01lc3NhZ2VCb3gobWVyZ2VfZGVmYXVsdCgpKHtcbiAgICB0aXRsZTogdGl0bGUsXG4gICAgbWVzc2FnZTogbWVzc2FnZSxcbiAgICAkdHlwZTogJ2FsZXJ0JyxcbiAgICBjbG9zZU9uUHJlc3NFc2NhcGU6IGZhbHNlLFxuICAgIGNsb3NlT25DbGlja01vZGFsOiBmYWxzZVxuICB9LCBvcHRpb25zKSk7XG59O1xuXG5tYWluX01lc3NhZ2VCb3guY29uZmlybSA9IGZ1bmN0aW9uIChtZXNzYWdlLCB0aXRsZSwgb3B0aW9ucykge1xuICBpZiAoKHR5cGVvZiB0aXRsZSA9PT0gJ3VuZGVmaW5lZCcgPyAndW5kZWZpbmVkJyA6IG1haW5fdHlwZW9mKHRpdGxlKSkgPT09ICdvYmplY3QnKSB7XG4gICAgb3B0aW9ucyA9IHRpdGxlO1xuICAgIHRpdGxlID0gJyc7XG4gIH0gZWxzZSBpZiAodGl0bGUgPT09IHVuZGVmaW5lZCkge1xuICAgIHRpdGxlID0gJyc7XG4gIH1cbiAgcmV0dXJuIG1haW5fTWVzc2FnZUJveChtZXJnZV9kZWZhdWx0KCkoe1xuICAgIHRpdGxlOiB0aXRsZSxcbiAgICBtZXNzYWdlOiBtZXNzYWdlLFxuICAgICR0eXBlOiAnY29uZmlybScsXG4gICAgc2hvd0NhbmNlbEJ1dHRvbjogdHJ1ZVxuICB9LCBvcHRpb25zKSk7XG59O1xuXG5tYWluX01lc3NhZ2VCb3gucHJvbXB0ID0gZnVuY3Rpb24gKG1lc3NhZ2UsIHRpdGxlLCBvcHRpb25zKSB7XG4gIGlmICgodHlwZW9mIHRpdGxlID09PSAndW5kZWZpbmVkJyA/ICd1bmRlZmluZWQnIDogbWFpbl90eXBlb2YodGl0bGUpKSA9PT0gJ29iamVjdCcpIHtcbiAgICBvcHRpb25zID0gdGl0bGU7XG4gICAgdGl0bGUgPSAnJztcbiAgfSBlbHNlIGlmICh0aXRsZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGl0bGUgPSAnJztcbiAgfVxuICByZXR1cm4gbWFpbl9NZXNzYWdlQm94KG1lcmdlX2RlZmF1bHQoKSh7XG4gICAgdGl0bGU6IHRpdGxlLFxuICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXG4gICAgc2hvd0NhbmNlbEJ1dHRvbjogdHJ1ZSxcbiAgICBzaG93SW5wdXQ6IHRydWUsXG4gICAgJHR5cGU6ICdwcm9tcHQnXG4gIH0sIG9wdGlvbnMpKTtcbn07XG5cbm1haW5fTWVzc2FnZUJveC5jbG9zZSA9IGZ1bmN0aW9uICgpIHtcbiAgbWFpbl9pbnN0YW5jZS5kb0Nsb3NlKCk7XG4gIG1haW5faW5zdGFuY2UudmlzaWJsZSA9IGZhbHNlO1xuICBtc2dRdWV1ZSA9IFtdO1xuICBjdXJyZW50TXNnID0gbnVsbDtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhY2thZ2VzX21lc3NhZ2VfYm94X3NyY19tYWluID0gKG1haW5fTWVzc2FnZUJveCk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvbWVzc2FnZS1ib3gvaW5kZXguanNcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgbWVzc2FnZV9ib3ggPSAocGFja2FnZXNfbWVzc2FnZV9ib3hfc3JjX21haW4pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9icmVhZGNydW1iL3NyYy9icmVhZGNydW1iLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00YjQ2NGMwNiZcbnZhciBicmVhZGNydW1idnVlX3R5cGVfdGVtcGxhdGVfaWRfNGI0NjRjMDZfcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAge1xuICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtYnJlYWRjcnVtYlwiLFxuICAgICAgYXR0cnM6IHsgXCJhcmlhLWxhYmVsXCI6IFwiQnJlYWRjcnVtYlwiLCByb2xlOiBcIm5hdmlnYXRpb25cIiB9XG4gICAgfSxcbiAgICBbX3ZtLl90KFwiZGVmYXVsdFwiKV0sXG4gICAgMlxuICApXG59XG52YXIgYnJlYWRjcnVtYnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzRiNDY0YzA2X3N0YXRpY1JlbmRlckZucyA9IFtdXG5icmVhZGNydW1idnVlX3R5cGVfdGVtcGxhdGVfaWRfNGI0NjRjMDZfcmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9icmVhZGNydW1iL3NyYy9icmVhZGNydW1iLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00YjQ2NGMwNiZcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvYnJlYWRjcnVtYi9zcmMvYnJlYWRjcnVtYi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgYnJlYWRjcnVtYnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG5hbWU6ICdFbEJyZWFkY3J1bWInLFxuXG4gIHByb3BzOiB7XG4gICAgc2VwYXJhdG9yOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnLydcbiAgICB9LFxuICAgIHNlcGFyYXRvckNsYXNzOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnJ1xuICAgIH1cbiAgfSxcblxuICBwcm92aWRlOiBmdW5jdGlvbiBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICBlbEJyZWFkY3J1bWI6IHRoaXNcbiAgICB9O1xuICB9LFxuICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge1xuICAgIHZhciBpdGVtcyA9IHRoaXMuJGVsLnF1ZXJ5U2VsZWN0b3JBbGwoJy5lbC1icmVhZGNydW1iX19pdGVtJyk7XG4gICAgaWYgKGl0ZW1zLmxlbmd0aCkge1xuICAgICAgaXRlbXNbaXRlbXMubGVuZ3RoIC0gMV0uc2V0QXR0cmlidXRlKCdhcmlhLWN1cnJlbnQnLCAncGFnZScpO1xuICAgIH1cbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2JyZWFkY3J1bWIvc3JjL2JyZWFkY3J1bWIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY19icmVhZGNydW1idnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKGJyZWFkY3J1bWJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvYnJlYWRjcnVtYi9zcmMvYnJlYWRjcnVtYi52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBicmVhZGNydW1iX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgc3JjX2JyZWFkY3J1bWJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIGJyZWFkY3J1bWJ2dWVfdHlwZV90ZW1wbGF0ZV9pZF80YjQ2NGMwNl9yZW5kZXIsXG4gIGJyZWFkY3J1bWJ2dWVfdHlwZV90ZW1wbGF0ZV9pZF80YjQ2NGMwNl9zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGJyZWFkY3J1bWJfYXBpOyB9XG5icmVhZGNydW1iX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvYnJlYWRjcnVtYi9zcmMvYnJlYWRjcnVtYi52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgYnJlYWRjcnVtYiA9IChicmVhZGNydW1iX2NvbXBvbmVudC5leHBvcnRzKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvYnJlYWRjcnVtYi9pbmRleC5qc1xuXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5icmVhZGNydW1iLmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG4gIFZ1ZS5jb21wb25lbnQoYnJlYWRjcnVtYi5uYW1lLCBicmVhZGNydW1iKTtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhY2thZ2VzX2JyZWFkY3J1bWIgPSAoYnJlYWRjcnVtYik7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2JyZWFkY3J1bWIvc3JjL2JyZWFkY3J1bWItaXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZmNmOWVhYWMmXG52YXIgYnJlYWRjcnVtYl9pdGVtdnVlX3R5cGVfdGVtcGxhdGVfaWRfZmNmOWVhYWNfcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFwic3BhblwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLWJyZWFkY3J1bWJfX2l0ZW1cIiB9LCBbXG4gICAgX2MoXG4gICAgICBcInNwYW5cIixcbiAgICAgIHtcbiAgICAgICAgcmVmOiBcImxpbmtcIixcbiAgICAgICAgY2xhc3M6IFtcImVsLWJyZWFkY3J1bWJfX2lubmVyXCIsIF92bS50byA/IFwiaXMtbGlua1wiIDogXCJcIl0sXG4gICAgICAgIGF0dHJzOiB7IHJvbGU6IFwibGlua1wiIH1cbiAgICAgIH0sXG4gICAgICBbX3ZtLl90KFwiZGVmYXVsdFwiKV0sXG4gICAgICAyXG4gICAgKSxcbiAgICBfdm0uc2VwYXJhdG9yQ2xhc3NcbiAgICAgID8gX2MoXCJpXCIsIHtcbiAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1icmVhZGNydW1iX19zZXBhcmF0b3JcIixcbiAgICAgICAgICBjbGFzczogX3ZtLnNlcGFyYXRvckNsYXNzXG4gICAgICAgIH0pXG4gICAgICA6IF9jKFxuICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWJyZWFkY3J1bWJfX3NlcGFyYXRvclwiLFxuICAgICAgICAgICAgYXR0cnM6IHsgcm9sZTogXCJwcmVzZW50YXRpb25cIiB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBbX3ZtLl92KF92bS5fcyhfdm0uc2VwYXJhdG9yKSldXG4gICAgICAgIClcbiAgXSlcbn1cbnZhciBicmVhZGNydW1iX2l0ZW12dWVfdHlwZV90ZW1wbGF0ZV9pZF9mY2Y5ZWFhY19zdGF0aWNSZW5kZXJGbnMgPSBbXVxuYnJlYWRjcnVtYl9pdGVtdnVlX3R5cGVfdGVtcGxhdGVfaWRfZmNmOWVhYWNfcmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9icmVhZGNydW1iL3NyYy9icmVhZGNydW1iLWl0ZW0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWZjZjllYWFjJlxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9icmVhZGNydW1iL3NyYy9icmVhZGNydW1iLWl0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBicmVhZGNydW1iX2l0ZW12dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBuYW1lOiAnRWxCcmVhZGNydW1iSXRlbScsXG4gIHByb3BzOiB7XG4gICAgdG86IHt9LFxuICAgIHJlcGxhY2U6IEJvb2xlYW5cbiAgfSxcbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2VwYXJhdG9yOiAnJyxcbiAgICAgIHNlcGFyYXRvckNsYXNzOiAnJ1xuICAgIH07XG4gIH0sXG5cblxuICBpbmplY3Q6IFsnZWxCcmVhZGNydW1iJ10sXG5cbiAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdGhpcy5zZXBhcmF0b3IgPSB0aGlzLmVsQnJlYWRjcnVtYi5zZXBhcmF0b3I7XG4gICAgdGhpcy5zZXBhcmF0b3JDbGFzcyA9IHRoaXMuZWxCcmVhZGNydW1iLnNlcGFyYXRvckNsYXNzO1xuICAgIHZhciBsaW5rID0gdGhpcy4kcmVmcy5saW5rO1xuICAgIGxpbmsuc2V0QXR0cmlidXRlKCdyb2xlJywgJ2xpbmsnKTtcbiAgICBsaW5rLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKF8pIHtcbiAgICAgIHZhciB0byA9IF90aGlzLnRvLFxuICAgICAgICAgICRyb3V0ZXIgPSBfdGhpcy4kcm91dGVyO1xuXG4gICAgICBpZiAoIXRvIHx8ICEkcm91dGVyKSByZXR1cm47XG4gICAgICBfdGhpcy5yZXBsYWNlID8gJHJvdXRlci5yZXBsYWNlKHRvKSA6ICRyb3V0ZXIucHVzaCh0byk7XG4gICAgfSk7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9icmVhZGNydW1iL3NyYy9icmVhZGNydW1iLWl0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY19icmVhZGNydW1iX2l0ZW12dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoYnJlYWRjcnVtYl9pdGVtdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2JyZWFkY3J1bWIvc3JjL2JyZWFkY3J1bWItaXRlbS52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBicmVhZGNydW1iX2l0ZW1fY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBzcmNfYnJlYWRjcnVtYl9pdGVtdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICBicmVhZGNydW1iX2l0ZW12dWVfdHlwZV90ZW1wbGF0ZV9pZF9mY2Y5ZWFhY19yZW5kZXIsXG4gIGJyZWFkY3J1bWJfaXRlbXZ1ZV90eXBlX3RlbXBsYXRlX2lkX2ZjZjllYWFjX3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgYnJlYWRjcnVtYl9pdGVtX2FwaTsgfVxuYnJlYWRjcnVtYl9pdGVtX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvYnJlYWRjcnVtYi9zcmMvYnJlYWRjcnVtYi1pdGVtLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBicmVhZGNydW1iX2l0ZW0gPSAoYnJlYWRjcnVtYl9pdGVtX2NvbXBvbmVudC5leHBvcnRzKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvYnJlYWRjcnVtYi1pdGVtL2luZGV4LmpzXG5cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmJyZWFkY3J1bWJfaXRlbS5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuICBWdWUuY29tcG9uZW50KGJyZWFkY3J1bWJfaXRlbS5uYW1lLCBicmVhZGNydW1iX2l0ZW0pO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcGFja2FnZXNfYnJlYWRjcnVtYl9pdGVtID0gKGJyZWFkY3J1bWJfaXRlbSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2Zvcm0vc3JjL2Zvcm0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWExYjVmZjM0JlxudmFyIGZvcm12dWVfdHlwZV90ZW1wbGF0ZV9pZF9hMWI1ZmYzNF9yZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJmb3JtXCIsXG4gICAge1xuICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtZm9ybVwiLFxuICAgICAgY2xhc3M6IFtcbiAgICAgICAgX3ZtLmxhYmVsUG9zaXRpb24gPyBcImVsLWZvcm0tLWxhYmVsLVwiICsgX3ZtLmxhYmVsUG9zaXRpb24gOiBcIlwiLFxuICAgICAgICB7IFwiZWwtZm9ybS0taW5saW5lXCI6IF92bS5pbmxpbmUgfVxuICAgICAgXVxuICAgIH0sXG4gICAgW192bS5fdChcImRlZmF1bHRcIildLFxuICAgIDJcbiAgKVxufVxudmFyIGZvcm12dWVfdHlwZV90ZW1wbGF0ZV9pZF9hMWI1ZmYzNF9zdGF0aWNSZW5kZXJGbnMgPSBbXVxuZm9ybXZ1ZV90eXBlX3RlbXBsYXRlX2lkX2ExYjVmZjM0X3JlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZm9ybS9zcmMvZm9ybS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9YTFiNWZmMzQmXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2Zvcm0vc3JjL2Zvcm0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cblxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBmb3JtdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbmFtZTogJ0VsRm9ybScsXG5cbiAgY29tcG9uZW50TmFtZTogJ0VsRm9ybScsXG5cbiAgcHJvdmlkZTogZnVuY3Rpb24gcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZWxGb3JtOiB0aGlzXG4gICAgfTtcbiAgfSxcblxuXG4gIHByb3BzOiB7XG4gICAgbW9kZWw6IE9iamVjdCxcbiAgICBydWxlczogT2JqZWN0LFxuICAgIGxhYmVsUG9zaXRpb246IFN0cmluZyxcbiAgICBsYWJlbFdpZHRoOiBTdHJpbmcsXG4gICAgbGFiZWxTdWZmaXg6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICcnXG4gICAgfSxcbiAgICBpbmxpbmU6IEJvb2xlYW4sXG4gICAgaW5saW5lTWVzc2FnZTogQm9vbGVhbixcbiAgICBzdGF0dXNJY29uOiBCb29sZWFuLFxuICAgIHNob3dNZXNzYWdlOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0sXG4gICAgc2l6ZTogU3RyaW5nLFxuICAgIGRpc2FibGVkOiBCb29sZWFuLFxuICAgIHZhbGlkYXRlT25SdWxlQ2hhbmdlOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0sXG4gICAgaGlkZVJlcXVpcmVkQXN0ZXJpc2s6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH1cbiAgfSxcbiAgd2F0Y2g6IHtcbiAgICBydWxlczogZnVuY3Rpb24gcnVsZXMoKSB7XG4gICAgICAvLyByZW1vdmUgdGhlbiBhZGQgZXZlbnQgbGlzdGVuZXJzIG9uIGZvcm0taXRlbSBhZnRlciBmb3JtIHJ1bGVzIGNoYW5nZVxuICAgICAgdGhpcy5maWVsZHMuZm9yRWFjaChmdW5jdGlvbiAoZmllbGQpIHtcbiAgICAgICAgZmllbGQucmVtb3ZlVmFsaWRhdGVFdmVudHMoKTtcbiAgICAgICAgZmllbGQuYWRkVmFsaWRhdGVFdmVudHMoKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAodGhpcy52YWxpZGF0ZU9uUnVsZUNoYW5nZSkge1xuICAgICAgICB0aGlzLnZhbGlkYXRlKGZ1bmN0aW9uICgpIHt9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIGNvbXB1dGVkOiB7XG4gICAgYXV0b0xhYmVsV2lkdGg6IGZ1bmN0aW9uIGF1dG9MYWJlbFdpZHRoKCkge1xuICAgICAgaWYgKCF0aGlzLnBvdGVudGlhbExhYmVsV2lkdGhBcnIubGVuZ3RoKSByZXR1cm4gMDtcbiAgICAgIHZhciBtYXggPSBNYXRoLm1heC5hcHBseShNYXRoLCB0aGlzLnBvdGVudGlhbExhYmVsV2lkdGhBcnIpO1xuICAgICAgcmV0dXJuIG1heCA/IG1heCArICdweCcgOiAnJztcbiAgICB9XG4gIH0sXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZpZWxkczogW10sXG4gICAgICBwb3RlbnRpYWxMYWJlbFdpZHRoQXJyOiBbXSAvLyB1c2UgdGhpcyBhcnJheSB0byBjYWxjdWxhdGUgYXV0byB3aWR0aFxuICAgIH07XG4gIH0sXG4gIGNyZWF0ZWQ6IGZ1bmN0aW9uIGNyZWF0ZWQoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHRoaXMuJG9uKCdlbC5mb3JtLmFkZEZpZWxkJywgZnVuY3Rpb24gKGZpZWxkKSB7XG4gICAgICBpZiAoZmllbGQpIHtcbiAgICAgICAgX3RoaXMuZmllbGRzLnB1c2goZmllbGQpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgdGhpcy4kb24oJ2VsLmZvcm0ucmVtb3ZlRmllbGQnLCBmdW5jdGlvbiAoZmllbGQpIHtcbiAgICAgIGlmIChmaWVsZC5wcm9wKSB7XG4gICAgICAgIF90aGlzLmZpZWxkcy5zcGxpY2UoX3RoaXMuZmllbGRzLmluZGV4T2YoZmllbGQpLCAxKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgcmVzZXRGaWVsZHM6IGZ1bmN0aW9uIHJlc2V0RmllbGRzKCkge1xuICAgICAgaWYgKCF0aGlzLm1vZGVsKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignW0VsZW1lbnQgV2Fybl1bRm9ybV1tb2RlbCBpcyByZXF1aXJlZCBmb3IgcmVzZXRGaWVsZHMgdG8gd29yay4nKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5maWVsZHMuZm9yRWFjaChmdW5jdGlvbiAoZmllbGQpIHtcbiAgICAgICAgZmllbGQucmVzZXRGaWVsZCgpO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBjbGVhclZhbGlkYXRlOiBmdW5jdGlvbiBjbGVhclZhbGlkYXRlKCkge1xuICAgICAgdmFyIHByb3BzID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBbXTtcblxuICAgICAgdmFyIGZpZWxkcyA9IHByb3BzLmxlbmd0aCA/IHR5cGVvZiBwcm9wcyA9PT0gJ3N0cmluZycgPyB0aGlzLmZpZWxkcy5maWx0ZXIoZnVuY3Rpb24gKGZpZWxkKSB7XG4gICAgICAgIHJldHVybiBwcm9wcyA9PT0gZmllbGQucHJvcDtcbiAgICAgIH0pIDogdGhpcy5maWVsZHMuZmlsdGVyKGZ1bmN0aW9uIChmaWVsZCkge1xuICAgICAgICByZXR1cm4gcHJvcHMuaW5kZXhPZihmaWVsZC5wcm9wKSA+IC0xO1xuICAgICAgfSkgOiB0aGlzLmZpZWxkcztcbiAgICAgIGZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uIChmaWVsZCkge1xuICAgICAgICBmaWVsZC5jbGVhclZhbGlkYXRlKCk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIHZhbGlkYXRlOiBmdW5jdGlvbiB2YWxpZGF0ZShjYWxsYmFjaykge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIGlmICghdGhpcy5tb2RlbCkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1tFbGVtZW50IFdhcm5dW0Zvcm1dbW9kZWwgaXMgcmVxdWlyZWQgZm9yIHZhbGlkYXRlIHRvIHdvcmshJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIHByb21pc2UgPSB2b2lkIDA7XG4gICAgICAvLyBpZiBubyBjYWxsYmFjaywgcmV0dXJuIHByb21pc2VcbiAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicgJiYgd2luZG93LlByb21pc2UpIHtcbiAgICAgICAgcHJvbWlzZSA9IG5ldyB3aW5kb3cuUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiBjYWxsYmFjayh2YWxpZCwgaW52YWxpZEZpZWxkcykge1xuICAgICAgICAgICAgdmFsaWQgPyByZXNvbHZlKHZhbGlkKSA6IHJlamVjdChpbnZhbGlkRmllbGRzKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdmFyIHZhbGlkID0gdHJ1ZTtcbiAgICAgIHZhciBjb3VudCA9IDA7XG4gICAgICAvLyDlpoLmnpzpnIDopoHpqozor4HnmoRmaWVsZHPkuLrnqbrvvIzosIPnlKjpqozor4Hml7bnq4vliLvov5Tlm55jYWxsYmFja1xuICAgICAgaWYgKHRoaXMuZmllbGRzLmxlbmd0aCA9PT0gMCAmJiBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayh0cnVlKTtcbiAgICAgIH1cbiAgICAgIHZhciBpbnZhbGlkRmllbGRzID0ge307XG4gICAgICB0aGlzLmZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uIChmaWVsZCkge1xuICAgICAgICBmaWVsZC52YWxpZGF0ZSgnJywgZnVuY3Rpb24gKG1lc3NhZ2UsIGZpZWxkKSB7XG4gICAgICAgICAgaWYgKG1lc3NhZ2UpIHtcbiAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGludmFsaWRGaWVsZHMgPSBtZXJnZV9kZWZhdWx0KCkoe30sIGludmFsaWRGaWVsZHMsIGZpZWxkKTtcbiAgICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nICYmICsrY291bnQgPT09IF90aGlzMi5maWVsZHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjYWxsYmFjayh2YWxpZCwgaW52YWxpZEZpZWxkcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAocHJvbWlzZSkge1xuICAgICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHZhbGlkYXRlRmllbGQ6IGZ1bmN0aW9uIHZhbGlkYXRlRmllbGQocHJvcHMsIGNiKSB7XG4gICAgICBwcm9wcyA9IFtdLmNvbmNhdChwcm9wcyk7XG4gICAgICB2YXIgZmllbGRzID0gdGhpcy5maWVsZHMuZmlsdGVyKGZ1bmN0aW9uIChmaWVsZCkge1xuICAgICAgICByZXR1cm4gcHJvcHMuaW5kZXhPZihmaWVsZC5wcm9wKSAhPT0gLTE7XG4gICAgICB9KTtcbiAgICAgIGlmICghZmllbGRzLmxlbmd0aCkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1tFbGVtZW50IFdhcm5dcGxlYXNlIHBhc3MgY29ycmVjdCBwcm9wcyEnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBmaWVsZHMuZm9yRWFjaChmdW5jdGlvbiAoZmllbGQpIHtcbiAgICAgICAgZmllbGQudmFsaWRhdGUoJycsIGNiKTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgZ2V0TGFiZWxXaWR0aEluZGV4OiBmdW5jdGlvbiBnZXRMYWJlbFdpZHRoSW5kZXgod2lkdGgpIHtcbiAgICAgIHZhciBpbmRleCA9IHRoaXMucG90ZW50aWFsTGFiZWxXaWR0aEFyci5pbmRleE9mKHdpZHRoKTtcbiAgICAgIC8vIGl0J3MgaW1wb3NzaWJsZVxuICAgICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1tFbGVtZW50Rm9ybV11bnBlY3RlZCB3aWR0aCAnLCB3aWR0aCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gaW5kZXg7XG4gICAgfSxcbiAgICByZWdpc3RlckxhYmVsV2lkdGg6IGZ1bmN0aW9uIHJlZ2lzdGVyTGFiZWxXaWR0aCh2YWwsIG9sZFZhbCkge1xuICAgICAgaWYgKHZhbCAmJiBvbGRWYWwpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5nZXRMYWJlbFdpZHRoSW5kZXgob2xkVmFsKTtcbiAgICAgICAgdGhpcy5wb3RlbnRpYWxMYWJlbFdpZHRoQXJyLnNwbGljZShpbmRleCwgMSwgdmFsKTtcbiAgICAgIH0gZWxzZSBpZiAodmFsKSB7XG4gICAgICAgIHRoaXMucG90ZW50aWFsTGFiZWxXaWR0aEFyci5wdXNoKHZhbCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBkZXJlZ2lzdGVyTGFiZWxXaWR0aDogZnVuY3Rpb24gZGVyZWdpc3RlckxhYmVsV2lkdGgodmFsKSB7XG4gICAgICB2YXIgaW5kZXggPSB0aGlzLmdldExhYmVsV2lkdGhJbmRleCh2YWwpO1xuICAgICAgdGhpcy5wb3RlbnRpYWxMYWJlbFdpZHRoQXJyLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZm9ybS9zcmMvZm9ybS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX2Zvcm12dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoZm9ybXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9mb3JtL3NyYy9mb3JtLnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGZvcm1fY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBzcmNfZm9ybXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgZm9ybXZ1ZV90eXBlX3RlbXBsYXRlX2lkX2ExYjVmZjM0X3JlbmRlcixcbiAgZm9ybXZ1ZV90eXBlX3RlbXBsYXRlX2lkX2ExYjVmZjM0X3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgZm9ybV9hcGk7IH1cbmZvcm1fY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy9mb3JtL3NyYy9mb3JtLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfZm9ybSA9IChmb3JtX2NvbXBvbmVudC5leHBvcnRzKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZm9ybS9pbmRleC5qc1xuXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5zcmNfZm9ybS5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuICBWdWUuY29tcG9uZW50KHNyY19mb3JtLm5hbWUsIHNyY19mb3JtKTtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhY2thZ2VzX2Zvcm0gPSAoc3JjX2Zvcm0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9mb3JtL3NyYy9mb3JtLWl0ZW0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWI2ZjNkYjZjJlxudmFyIGZvcm1faXRlbXZ1ZV90eXBlX3RlbXBsYXRlX2lkX2I2ZjNkYjZjX3JlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHtcbiAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWZvcm0taXRlbVwiLFxuICAgICAgY2xhc3M6IFtcbiAgICAgICAge1xuICAgICAgICAgIFwiZWwtZm9ybS1pdGVtLS1mZWVkYmFja1wiOiBfdm0uZWxGb3JtICYmIF92bS5lbEZvcm0uc3RhdHVzSWNvbixcbiAgICAgICAgICBcImlzLWVycm9yXCI6IF92bS52YWxpZGF0ZVN0YXRlID09PSBcImVycm9yXCIsXG4gICAgICAgICAgXCJpcy12YWxpZGF0aW5nXCI6IF92bS52YWxpZGF0ZVN0YXRlID09PSBcInZhbGlkYXRpbmdcIixcbiAgICAgICAgICBcImlzLXN1Y2Nlc3NcIjogX3ZtLnZhbGlkYXRlU3RhdGUgPT09IFwic3VjY2Vzc1wiLFxuICAgICAgICAgIFwiaXMtcmVxdWlyZWRcIjogX3ZtLmlzUmVxdWlyZWQgfHwgX3ZtLnJlcXVpcmVkLFxuICAgICAgICAgIFwiaXMtbm8tYXN0ZXJpc2tcIjogX3ZtLmVsRm9ybSAmJiBfdm0uZWxGb3JtLmhpZGVSZXF1aXJlZEFzdGVyaXNrXG4gICAgICAgIH0sXG4gICAgICAgIF92bS5zaXplQ2xhc3MgPyBcImVsLWZvcm0taXRlbS0tXCIgKyBfdm0uc2l6ZUNsYXNzIDogXCJcIlxuICAgICAgXVxuICAgIH0sXG4gICAgW1xuICAgICAgX2MoXG4gICAgICAgIFwibGFiZWwtd3JhcFwiLFxuICAgICAgICB7XG4gICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgIFwiaXMtYXV0by13aWR0aFwiOiBfdm0ubGFiZWxTdHlsZSAmJiBfdm0ubGFiZWxTdHlsZS53aWR0aCA9PT0gXCJhdXRvXCIsXG4gICAgICAgICAgICBcInVwZGF0ZS1hbGxcIjogX3ZtLmZvcm0ubGFiZWxXaWR0aCA9PT0gXCJhdXRvXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFtcbiAgICAgICAgICBfdm0ubGFiZWwgfHwgX3ZtLiRzbG90cy5sYWJlbFxuICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICBcImxhYmVsXCIsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtZm9ybS1pdGVtX19sYWJlbFwiLFxuICAgICAgICAgICAgICAgICAgc3R5bGU6IF92bS5sYWJlbFN0eWxlLFxuICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgZm9yOiBfdm0ubGFiZWxGb3IgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgX3ZtLl90KFwibGFiZWxcIiwgW1xuICAgICAgICAgICAgICAgICAgICBfdm0uX3YoX3ZtLl9zKF92bS5sYWJlbCArIF92bS5mb3JtLmxhYmVsU3VmZml4KSlcbiAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgXVxuICAgICAgKSxcbiAgICAgIF9jKFxuICAgICAgICBcImRpdlwiLFxuICAgICAgICB7IHN0YXRpY0NsYXNzOiBcImVsLWZvcm0taXRlbV9fY29udGVudFwiLCBzdHlsZTogX3ZtLmNvbnRlbnRTdHlsZSB9LFxuICAgICAgICBbXG4gICAgICAgICAgX3ZtLl90KFwiZGVmYXVsdFwiKSxcbiAgICAgICAgICBfYyhcbiAgICAgICAgICAgIFwidHJhbnNpdGlvblwiLFxuICAgICAgICAgICAgeyBhdHRyczogeyBuYW1lOiBcImVsLXpvb20taW4tdG9wXCIgfSB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfdm0udmFsaWRhdGVTdGF0ZSA9PT0gXCJlcnJvclwiICYmXG4gICAgICAgICAgICAgIF92bS5zaG93TWVzc2FnZSAmJlxuICAgICAgICAgICAgICBfdm0uZm9ybS5zaG93TWVzc2FnZVxuICAgICAgICAgICAgICAgID8gX3ZtLl90KFxuICAgICAgICAgICAgICAgICAgICBcImVycm9yXCIsXG4gICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWZvcm0taXRlbV9fZXJyb3JcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImVsLWZvcm0taXRlbV9fZXJyb3ItLWlubGluZVwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIF92bS5pbmxpbmVNZXNzYWdlID09PSBcImJvb2xlYW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IF92bS5pbmxpbmVNZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKF92bS5lbEZvcm0gJiYgX3ZtLmVsRm9ybS5pbmxpbmVNZXNzYWdlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgICBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3MoX3ZtLnZhbGlkYXRlTWVzc2FnZSkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIHsgZXJyb3I6IF92bS52YWxpZGF0ZU1lc3NhZ2UgfVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAyXG4gICAgICAgICAgKVxuICAgICAgICBdLFxuICAgICAgICAyXG4gICAgICApXG4gICAgXSxcbiAgICAxXG4gIClcbn1cbnZhciBmb3JtX2l0ZW12dWVfdHlwZV90ZW1wbGF0ZV9pZF9iNmYzZGI2Y19zdGF0aWNSZW5kZXJGbnMgPSBbXVxuZm9ybV9pdGVtdnVlX3R5cGVfdGVtcGxhdGVfaWRfYjZmM2RiNmNfcmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9mb3JtL3NyYy9mb3JtLWl0ZW0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWI2ZjNkYjZjJlxuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiYXN5bmMtdmFsaWRhdG9yXCJcbnZhciBleHRlcm5hbF9hc3luY192YWxpZGF0b3JfID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0MSk7XG52YXIgZXh0ZXJuYWxfYXN5bmNfdmFsaWRhdG9yX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGV4dGVybmFsX2FzeW5jX3ZhbGlkYXRvcl8pO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9mb3JtL3NyYy9sYWJlbC13cmFwLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcblxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBsYWJlbF93cmFwdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgcHJvcHM6IHtcbiAgICBpc0F1dG9XaWR0aDogQm9vbGVhbixcbiAgICB1cGRhdGVBbGw6IEJvb2xlYW5cbiAgfSxcblxuICBpbmplY3Q6IFsnZWxGb3JtJywgJ2VsRm9ybUl0ZW0nXSxcblxuICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICB2YXIgaCA9IGFyZ3VtZW50c1swXTtcblxuICAgIHZhciBzbG90cyA9IHRoaXMuJHNsb3RzLmRlZmF1bHQ7XG4gICAgaWYgKCFzbG90cykgcmV0dXJuIG51bGw7XG4gICAgaWYgKHRoaXMuaXNBdXRvV2lkdGgpIHtcbiAgICAgIHZhciBhdXRvTGFiZWxXaWR0aCA9IHRoaXMuZWxGb3JtLmF1dG9MYWJlbFdpZHRoO1xuICAgICAgdmFyIHN0eWxlID0ge307XG4gICAgICBpZiAoYXV0b0xhYmVsV2lkdGggJiYgYXV0b0xhYmVsV2lkdGggIT09ICdhdXRvJykge1xuICAgICAgICB2YXIgbWFyZ2luTGVmdCA9IHBhcnNlSW50KGF1dG9MYWJlbFdpZHRoLCAxMCkgLSB0aGlzLmNvbXB1dGVkV2lkdGg7XG4gICAgICAgIGlmIChtYXJnaW5MZWZ0KSB7XG4gICAgICAgICAgc3R5bGUubWFyZ2luTGVmdCA9IG1hcmdpbkxlZnQgKyAncHgnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gaChcbiAgICAgICAgJ2RpdicsXG4gICAgICAgIHsgJ2NsYXNzJzogJ2VsLWZvcm0taXRlbV9fbGFiZWwtd3JhcCcsIHN0eWxlOiBzdHlsZSB9LFxuICAgICAgICBbc2xvdHNdXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gc2xvdHNbMF07XG4gICAgfVxuICB9LFxuXG5cbiAgbWV0aG9kczoge1xuICAgIGdldExhYmVsV2lkdGg6IGZ1bmN0aW9uIGdldExhYmVsV2lkdGgoKSB7XG4gICAgICBpZiAodGhpcy4kZWwgJiYgdGhpcy4kZWwuZmlyc3RFbGVtZW50Q2hpbGQpIHtcbiAgICAgICAgdmFyIGNvbXB1dGVkV2lkdGggPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLiRlbC5maXJzdEVsZW1lbnRDaGlsZCkud2lkdGg7XG4gICAgICAgIHJldHVybiBNYXRoLmNlaWwocGFyc2VGbG9hdChjb21wdXRlZFdpZHRoKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVwZGF0ZUxhYmVsV2lkdGg6IGZ1bmN0aW9uIHVwZGF0ZUxhYmVsV2lkdGgoKSB7XG4gICAgICB2YXIgYWN0aW9uID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiAndXBkYXRlJztcblxuICAgICAgaWYgKHRoaXMuJHNsb3RzLmRlZmF1bHQgJiYgdGhpcy5pc0F1dG9XaWR0aCAmJiB0aGlzLiRlbC5maXJzdEVsZW1lbnRDaGlsZCkge1xuICAgICAgICBpZiAoYWN0aW9uID09PSAndXBkYXRlJykge1xuICAgICAgICAgIHRoaXMuY29tcHV0ZWRXaWR0aCA9IHRoaXMuZ2V0TGFiZWxXaWR0aCgpO1xuICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbiA9PT0gJ3JlbW92ZScpIHtcbiAgICAgICAgICB0aGlzLmVsRm9ybS5kZXJlZ2lzdGVyTGFiZWxXaWR0aCh0aGlzLmNvbXB1dGVkV2lkdGgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgY29tcHV0ZWRXaWR0aDogZnVuY3Rpb24gY29tcHV0ZWRXaWR0aCh2YWwsIG9sZFZhbCkge1xuICAgICAgaWYgKHRoaXMudXBkYXRlQWxsKSB7XG4gICAgICAgIHRoaXMuZWxGb3JtLnJlZ2lzdGVyTGFiZWxXaWR0aCh2YWwsIG9sZFZhbCk7XG4gICAgICAgIHRoaXMuZWxGb3JtSXRlbS51cGRhdGVDb21wdXRlZExhYmVsV2lkdGgodmFsKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29tcHV0ZWRXaWR0aDogMFxuICAgIH07XG4gIH0sXG4gIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7XG4gICAgdGhpcy51cGRhdGVMYWJlbFdpZHRoKCd1cGRhdGUnKTtcbiAgfSxcbiAgdXBkYXRlZDogZnVuY3Rpb24gdXBkYXRlZCgpIHtcbiAgICB0aGlzLnVwZGF0ZUxhYmVsV2lkdGgoJ3VwZGF0ZScpO1xuICB9LFxuICBiZWZvcmVEZXN0cm95OiBmdW5jdGlvbiBiZWZvcmVEZXN0cm95KCkge1xuICAgIHRoaXMudXBkYXRlTGFiZWxXaWR0aCgncmVtb3ZlJyk7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9mb3JtL3NyYy9sYWJlbC13cmFwLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfbGFiZWxfd3JhcHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChsYWJlbF93cmFwdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2Zvcm0vc3JjL2xhYmVsLXdyYXAudnVlXG52YXIgbGFiZWxfd3JhcF9yZW5kZXIsIGxhYmVsX3dyYXBfc3RhdGljUmVuZGVyRm5zXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGxhYmVsX3dyYXBfY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBzcmNfbGFiZWxfd3JhcHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgbGFiZWxfd3JhcF9yZW5kZXIsXG4gIGxhYmVsX3dyYXBfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBsYWJlbF93cmFwX2FwaTsgfVxubGFiZWxfd3JhcF9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL2Zvcm0vc3JjL2xhYmVsLXdyYXAudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGxhYmVsX3dyYXAgPSAobGFiZWxfd3JhcF9jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9mb3JtL3NyYy9mb3JtLWl0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuXG5cblxuXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGZvcm1faXRlbXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG5hbWU6ICdFbEZvcm1JdGVtJyxcblxuICBjb21wb25lbnROYW1lOiAnRWxGb3JtSXRlbScsXG5cbiAgbWl4aW5zOiBbZW1pdHRlcl9kZWZhdWx0LmFdLFxuXG4gIHByb3ZpZGU6IGZ1bmN0aW9uIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVsRm9ybUl0ZW06IHRoaXNcbiAgICB9O1xuICB9LFxuXG5cbiAgaW5qZWN0OiBbJ2VsRm9ybSddLFxuXG4gIHByb3BzOiB7XG4gICAgbGFiZWw6IFN0cmluZyxcbiAgICBsYWJlbFdpZHRoOiBTdHJpbmcsXG4gICAgcHJvcDogU3RyaW5nLFxuICAgIHJlcXVpcmVkOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdW5kZWZpbmVkXG4gICAgfSxcbiAgICBydWxlczogW09iamVjdCwgQXJyYXldLFxuICAgIGVycm9yOiBTdHJpbmcsXG4gICAgdmFsaWRhdGVTdGF0dXM6IFN0cmluZyxcbiAgICBmb3I6IFN0cmluZyxcbiAgICBpbmxpbmVNZXNzYWdlOiB7XG4gICAgICB0eXBlOiBbU3RyaW5nLCBCb29sZWFuXSxcbiAgICAgIGRlZmF1bHQ6ICcnXG4gICAgfSxcbiAgICBzaG93TWVzc2FnZToge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9LFxuICAgIHNpemU6IFN0cmluZ1xuICB9LFxuICBjb21wb25lbnRzOiB7XG4gICAgLy8gdXNlIHRoaXMgY29tcG9uZW50IHRvIGNhbGN1bGF0ZSBhdXRvIHdpZHRoXG4gICAgTGFiZWxXcmFwOiBsYWJlbF93cmFwXG4gIH0sXG4gIHdhdGNoOiB7XG4gICAgZXJyb3I6IHtcbiAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcbiAgICAgIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIodmFsdWUpIHtcbiAgICAgICAgdGhpcy52YWxpZGF0ZU1lc3NhZ2UgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy52YWxpZGF0ZVN0YXRlID0gdmFsdWUgPyAnZXJyb3InIDogJyc7XG4gICAgICB9XG4gICAgfSxcbiAgICB2YWxpZGF0ZVN0YXR1czogZnVuY3Rpb24gdmFsaWRhdGVTdGF0dXModmFsdWUpIHtcbiAgICAgIHRoaXMudmFsaWRhdGVTdGF0ZSA9IHZhbHVlO1xuICAgIH0sXG4gICAgcnVsZXM6IGZ1bmN0aW9uIHJ1bGVzKHZhbHVlKSB7XG4gICAgICBpZiAoKCF2YWx1ZSB8fCB2YWx1ZS5sZW5ndGggPT09IDApICYmIHRoaXMucmVxdWlyZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmNsZWFyVmFsaWRhdGUoKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIGNvbXB1dGVkOiB7XG4gICAgbGFiZWxGb3I6IGZ1bmN0aW9uIGxhYmVsRm9yKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZm9yIHx8IHRoaXMucHJvcDtcbiAgICB9LFxuICAgIGxhYmVsU3R5bGU6IGZ1bmN0aW9uIGxhYmVsU3R5bGUoKSB7XG4gICAgICB2YXIgcmV0ID0ge307XG4gICAgICBpZiAodGhpcy5mb3JtLmxhYmVsUG9zaXRpb24gPT09ICd0b3AnKSByZXR1cm4gcmV0O1xuICAgICAgdmFyIGxhYmVsV2lkdGggPSB0aGlzLmxhYmVsV2lkdGggfHwgdGhpcy5mb3JtLmxhYmVsV2lkdGg7XG4gICAgICBpZiAobGFiZWxXaWR0aCkge1xuICAgICAgICByZXQud2lkdGggPSBsYWJlbFdpZHRoO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJldDtcbiAgICB9LFxuICAgIGNvbnRlbnRTdHlsZTogZnVuY3Rpb24gY29udGVudFN0eWxlKCkge1xuICAgICAgdmFyIHJldCA9IHt9O1xuICAgICAgdmFyIGxhYmVsID0gdGhpcy5sYWJlbDtcbiAgICAgIGlmICh0aGlzLmZvcm0ubGFiZWxQb3NpdGlvbiA9PT0gJ3RvcCcgfHwgdGhpcy5mb3JtLmlubGluZSkgcmV0dXJuIHJldDtcbiAgICAgIGlmICghbGFiZWwgJiYgIXRoaXMubGFiZWxXaWR0aCAmJiB0aGlzLmlzTmVzdGVkKSByZXR1cm4gcmV0O1xuICAgICAgdmFyIGxhYmVsV2lkdGggPSB0aGlzLmxhYmVsV2lkdGggfHwgdGhpcy5mb3JtLmxhYmVsV2lkdGg7XG4gICAgICBpZiAobGFiZWxXaWR0aCA9PT0gJ2F1dG8nKSB7XG4gICAgICAgIGlmICh0aGlzLmxhYmVsV2lkdGggPT09ICdhdXRvJykge1xuICAgICAgICAgIHJldC5tYXJnaW5MZWZ0ID0gdGhpcy5jb21wdXRlZExhYmVsV2lkdGg7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5mb3JtLmxhYmVsV2lkdGggPT09ICdhdXRvJykge1xuICAgICAgICAgIHJldC5tYXJnaW5MZWZ0ID0gdGhpcy5lbEZvcm0uYXV0b0xhYmVsV2lkdGg7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldC5tYXJnaW5MZWZ0ID0gbGFiZWxXaWR0aDtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXQ7XG4gICAgfSxcbiAgICBmb3JtOiBmdW5jdGlvbiBmb3JtKCkge1xuICAgICAgdmFyIHBhcmVudCA9IHRoaXMuJHBhcmVudDtcbiAgICAgIHZhciBwYXJlbnROYW1lID0gcGFyZW50LiRvcHRpb25zLmNvbXBvbmVudE5hbWU7XG4gICAgICB3aGlsZSAocGFyZW50TmFtZSAhPT0gJ0VsRm9ybScpIHtcbiAgICAgICAgaWYgKHBhcmVudE5hbWUgPT09ICdFbEZvcm1JdGVtJykge1xuICAgICAgICAgIHRoaXMuaXNOZXN0ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHBhcmVudCA9IHBhcmVudC4kcGFyZW50O1xuICAgICAgICBwYXJlbnROYW1lID0gcGFyZW50LiRvcHRpb25zLmNvbXBvbmVudE5hbWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gcGFyZW50O1xuICAgIH0sXG4gICAgZmllbGRWYWx1ZTogZnVuY3Rpb24gZmllbGRWYWx1ZSgpIHtcbiAgICAgIHZhciBtb2RlbCA9IHRoaXMuZm9ybS5tb2RlbDtcbiAgICAgIGlmICghbW9kZWwgfHwgIXRoaXMucHJvcCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBwYXRoID0gdGhpcy5wcm9wO1xuICAgICAgaWYgKHBhdGguaW5kZXhPZignOicpICE9PSAtMSkge1xuICAgICAgICBwYXRoID0gcGF0aC5yZXBsYWNlKC86LywgJy4nKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIE9iamVjdCh1dGlsX1tcImdldFByb3BCeVBhdGhcIl0pKG1vZGVsLCBwYXRoLCB0cnVlKS52O1xuICAgIH0sXG4gICAgaXNSZXF1aXJlZDogZnVuY3Rpb24gaXNSZXF1aXJlZCgpIHtcbiAgICAgIHZhciBydWxlcyA9IHRoaXMuZ2V0UnVsZXMoKTtcbiAgICAgIHZhciBpc1JlcXVpcmVkID0gZmFsc2U7XG5cbiAgICAgIGlmIChydWxlcyAmJiBydWxlcy5sZW5ndGgpIHtcbiAgICAgICAgcnVsZXMuZXZlcnkoZnVuY3Rpb24gKHJ1bGUpIHtcbiAgICAgICAgICBpZiAocnVsZS5yZXF1aXJlZCkge1xuICAgICAgICAgICAgaXNSZXF1aXJlZCA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpc1JlcXVpcmVkO1xuICAgIH0sXG4gICAgX2Zvcm1TaXplOiBmdW5jdGlvbiBfZm9ybVNpemUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbEZvcm0uc2l6ZTtcbiAgICB9LFxuICAgIGVsRm9ybUl0ZW1TaXplOiBmdW5jdGlvbiBlbEZvcm1JdGVtU2l6ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNpemUgfHwgdGhpcy5fZm9ybVNpemU7XG4gICAgfSxcbiAgICBzaXplQ2xhc3M6IGZ1bmN0aW9uIHNpemVDbGFzcygpIHtcbiAgICAgIHJldHVybiB0aGlzLmVsRm9ybUl0ZW1TaXplIHx8ICh0aGlzLiRFTEVNRU5UIHx8IHt9KS5zaXplO1xuICAgIH1cbiAgfSxcbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsaWRhdGVTdGF0ZTogJycsXG4gICAgICB2YWxpZGF0ZU1lc3NhZ2U6ICcnLFxuICAgICAgdmFsaWRhdGVEaXNhYmxlZDogZmFsc2UsXG4gICAgICB2YWxpZGF0b3I6IHt9LFxuICAgICAgaXNOZXN0ZWQ6IGZhbHNlLFxuICAgICAgY29tcHV0ZWRMYWJlbFdpZHRoOiAnJ1xuICAgIH07XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHZhbGlkYXRlOiBmdW5jdGlvbiB2YWxpZGF0ZSh0cmlnZ2VyKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICB2YXIgY2FsbGJhY2sgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHV0aWxfW1wibm9vcFwiXTtcblxuICAgICAgdGhpcy52YWxpZGF0ZURpc2FibGVkID0gZmFsc2U7XG4gICAgICB2YXIgcnVsZXMgPSB0aGlzLmdldEZpbHRlcmVkUnVsZSh0cmlnZ2VyKTtcbiAgICAgIGlmICgoIXJ1bGVzIHx8IHJ1bGVzLmxlbmd0aCA9PT0gMCkgJiYgdGhpcy5yZXF1aXJlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnZhbGlkYXRlU3RhdGUgPSAndmFsaWRhdGluZyc7XG5cbiAgICAgIHZhciBkZXNjcmlwdG9yID0ge307XG4gICAgICBpZiAocnVsZXMgJiYgcnVsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBydWxlcy5mb3JFYWNoKGZ1bmN0aW9uIChydWxlKSB7XG4gICAgICAgICAgZGVsZXRlIHJ1bGUudHJpZ2dlcjtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBkZXNjcmlwdG9yW3RoaXMucHJvcF0gPSBydWxlcztcblxuICAgICAgdmFyIHZhbGlkYXRvciA9IG5ldyBleHRlcm5hbF9hc3luY192YWxpZGF0b3JfZGVmYXVsdC5hKGRlc2NyaXB0b3IpO1xuICAgICAgdmFyIG1vZGVsID0ge307XG5cbiAgICAgIG1vZGVsW3RoaXMucHJvcF0gPSB0aGlzLmZpZWxkVmFsdWU7XG5cbiAgICAgIHZhbGlkYXRvci52YWxpZGF0ZShtb2RlbCwgeyBmaXJzdEZpZWxkczogdHJ1ZSB9LCBmdW5jdGlvbiAoZXJyb3JzLCBpbnZhbGlkRmllbGRzKSB7XG4gICAgICAgIF90aGlzLnZhbGlkYXRlU3RhdGUgPSAhZXJyb3JzID8gJ3N1Y2Nlc3MnIDogJ2Vycm9yJztcbiAgICAgICAgX3RoaXMudmFsaWRhdGVNZXNzYWdlID0gZXJyb3JzID8gZXJyb3JzWzBdLm1lc3NhZ2UgOiAnJztcblxuICAgICAgICBjYWxsYmFjayhfdGhpcy52YWxpZGF0ZU1lc3NhZ2UsIGludmFsaWRGaWVsZHMpO1xuICAgICAgICBfdGhpcy5lbEZvcm0gJiYgX3RoaXMuZWxGb3JtLiRlbWl0KCd2YWxpZGF0ZScsIF90aGlzLnByb3AsICFlcnJvcnMsIF90aGlzLnZhbGlkYXRlTWVzc2FnZSB8fCBudWxsKTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgY2xlYXJWYWxpZGF0ZTogZnVuY3Rpb24gY2xlYXJWYWxpZGF0ZSgpIHtcbiAgICAgIHRoaXMudmFsaWRhdGVTdGF0ZSA9ICcnO1xuICAgICAgdGhpcy52YWxpZGF0ZU1lc3NhZ2UgPSAnJztcbiAgICAgIHRoaXMudmFsaWRhdGVEaXNhYmxlZCA9IGZhbHNlO1xuICAgIH0sXG4gICAgcmVzZXRGaWVsZDogZnVuY3Rpb24gcmVzZXRGaWVsZCgpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB0aGlzLnZhbGlkYXRlU3RhdGUgPSAnJztcbiAgICAgIHRoaXMudmFsaWRhdGVNZXNzYWdlID0gJyc7XG5cbiAgICAgIHZhciBtb2RlbCA9IHRoaXMuZm9ybS5tb2RlbDtcbiAgICAgIHZhciB2YWx1ZSA9IHRoaXMuZmllbGRWYWx1ZTtcbiAgICAgIHZhciBwYXRoID0gdGhpcy5wcm9wO1xuICAgICAgaWYgKHBhdGguaW5kZXhPZignOicpICE9PSAtMSkge1xuICAgICAgICBwYXRoID0gcGF0aC5yZXBsYWNlKC86LywgJy4nKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHByb3AgPSBPYmplY3QodXRpbF9bXCJnZXRQcm9wQnlQYXRoXCJdKShtb2RlbCwgcGF0aCwgdHJ1ZSk7XG5cbiAgICAgIHRoaXMudmFsaWRhdGVEaXNhYmxlZCA9IHRydWU7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgcHJvcC5vW3Byb3Aua10gPSBbXS5jb25jYXQodGhpcy5pbml0aWFsVmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJvcC5vW3Byb3Aua10gPSB0aGlzLmluaXRpYWxWYWx1ZTtcbiAgICAgIH1cblxuICAgICAgLy8gcmVzZXQgdmFsaWRhdGVEaXNhYmxlZCBhZnRlciBvbkZpZWxkQ2hhbmdlIHRyaWdnZXJlZFxuICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpczIudmFsaWRhdGVEaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuYnJvYWRjYXN0KCdFbFRpbWVTZWxlY3QnLCAnZmllbGRSZXNldCcsIHRoaXMuaW5pdGlhbFZhbHVlKTtcbiAgICB9LFxuICAgIGdldFJ1bGVzOiBmdW5jdGlvbiBnZXRSdWxlcygpIHtcbiAgICAgIHZhciBmb3JtUnVsZXMgPSB0aGlzLmZvcm0ucnVsZXM7XG4gICAgICB2YXIgc2VsZlJ1bGVzID0gdGhpcy5ydWxlcztcbiAgICAgIHZhciByZXF1aXJlZFJ1bGUgPSB0aGlzLnJlcXVpcmVkICE9PSB1bmRlZmluZWQgPyB7IHJlcXVpcmVkOiAhIXRoaXMucmVxdWlyZWQgfSA6IFtdO1xuXG4gICAgICB2YXIgcHJvcCA9IE9iamVjdCh1dGlsX1tcImdldFByb3BCeVBhdGhcIl0pKGZvcm1SdWxlcywgdGhpcy5wcm9wIHx8ICcnKTtcbiAgICAgIGZvcm1SdWxlcyA9IGZvcm1SdWxlcyA/IHByb3Aub1t0aGlzLnByb3AgfHwgJyddIHx8IHByb3AudiA6IFtdO1xuXG4gICAgICByZXR1cm4gW10uY29uY2F0KHNlbGZSdWxlcyB8fCBmb3JtUnVsZXMgfHwgW10pLmNvbmNhdChyZXF1aXJlZFJ1bGUpO1xuICAgIH0sXG4gICAgZ2V0RmlsdGVyZWRSdWxlOiBmdW5jdGlvbiBnZXRGaWx0ZXJlZFJ1bGUodHJpZ2dlcikge1xuICAgICAgdmFyIHJ1bGVzID0gdGhpcy5nZXRSdWxlcygpO1xuXG4gICAgICByZXR1cm4gcnVsZXMuZmlsdGVyKGZ1bmN0aW9uIChydWxlKSB7XG4gICAgICAgIGlmICghcnVsZS50cmlnZ2VyIHx8IHRyaWdnZXIgPT09ICcnKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocnVsZS50cmlnZ2VyKSkge1xuICAgICAgICAgIHJldHVybiBydWxlLnRyaWdnZXIuaW5kZXhPZih0cmlnZ2VyKSA+IC0xO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBydWxlLnRyaWdnZXIgPT09IHRyaWdnZXI7XG4gICAgICAgIH1cbiAgICAgIH0pLm1hcChmdW5jdGlvbiAocnVsZSkge1xuICAgICAgICByZXR1cm4gbWVyZ2VfZGVmYXVsdCgpKHt9LCBydWxlKTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgb25GaWVsZEJsdXI6IGZ1bmN0aW9uIG9uRmllbGRCbHVyKCkge1xuICAgICAgdGhpcy52YWxpZGF0ZSgnYmx1cicpO1xuICAgIH0sXG4gICAgb25GaWVsZENoYW5nZTogZnVuY3Rpb24gb25GaWVsZENoYW5nZSgpIHtcbiAgICAgIGlmICh0aGlzLnZhbGlkYXRlRGlzYWJsZWQpIHtcbiAgICAgICAgdGhpcy52YWxpZGF0ZURpc2FibGVkID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy52YWxpZGF0ZSgnY2hhbmdlJyk7XG4gICAgfSxcbiAgICB1cGRhdGVDb21wdXRlZExhYmVsV2lkdGg6IGZ1bmN0aW9uIHVwZGF0ZUNvbXB1dGVkTGFiZWxXaWR0aCh3aWR0aCkge1xuICAgICAgdGhpcy5jb21wdXRlZExhYmVsV2lkdGggPSB3aWR0aCA/IHdpZHRoICsgJ3B4JyA6ICcnO1xuICAgIH0sXG4gICAgYWRkVmFsaWRhdGVFdmVudHM6IGZ1bmN0aW9uIGFkZFZhbGlkYXRlRXZlbnRzKCkge1xuICAgICAgdmFyIHJ1bGVzID0gdGhpcy5nZXRSdWxlcygpO1xuXG4gICAgICBpZiAocnVsZXMubGVuZ3RoIHx8IHRoaXMucmVxdWlyZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLiRvbignZWwuZm9ybS5ibHVyJywgdGhpcy5vbkZpZWxkQmx1cik7XG4gICAgICAgIHRoaXMuJG9uKCdlbC5mb3JtLmNoYW5nZScsIHRoaXMub25GaWVsZENoYW5nZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICByZW1vdmVWYWxpZGF0ZUV2ZW50czogZnVuY3Rpb24gcmVtb3ZlVmFsaWRhdGVFdmVudHMoKSB7XG4gICAgICB0aGlzLiRvZmYoKTtcbiAgICB9XG4gIH0sXG4gIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7XG4gICAgaWYgKHRoaXMucHJvcCkge1xuICAgICAgdGhpcy5kaXNwYXRjaCgnRWxGb3JtJywgJ2VsLmZvcm0uYWRkRmllbGQnLCBbdGhpc10pO1xuXG4gICAgICB2YXIgaW5pdGlhbFZhbHVlID0gdGhpcy5maWVsZFZhbHVlO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaW5pdGlhbFZhbHVlKSkge1xuICAgICAgICBpbml0aWFsVmFsdWUgPSBbXS5jb25jYXQoaW5pdGlhbFZhbHVlKTtcbiAgICAgIH1cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnaW5pdGlhbFZhbHVlJywge1xuICAgICAgICB2YWx1ZTogaW5pdGlhbFZhbHVlXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5hZGRWYWxpZGF0ZUV2ZW50cygpO1xuICAgIH1cbiAgfSxcbiAgYmVmb3JlRGVzdHJveTogZnVuY3Rpb24gYmVmb3JlRGVzdHJveSgpIHtcbiAgICB0aGlzLmRpc3BhdGNoKCdFbEZvcm0nLCAnZWwuZm9ybS5yZW1vdmVGaWVsZCcsIFt0aGlzXSk7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9mb3JtL3NyYy9mb3JtLWl0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY19mb3JtX2l0ZW12dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoZm9ybV9pdGVtdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2Zvcm0vc3JjL2Zvcm0taXRlbS52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBmb3JtX2l0ZW1fY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBzcmNfZm9ybV9pdGVtdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICBmb3JtX2l0ZW12dWVfdHlwZV90ZW1wbGF0ZV9pZF9iNmYzZGI2Y19yZW5kZXIsXG4gIGZvcm1faXRlbXZ1ZV90eXBlX3RlbXBsYXRlX2lkX2I2ZjNkYjZjX3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgZm9ybV9pdGVtX2FwaTsgfVxuZm9ybV9pdGVtX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvZm9ybS9zcmMvZm9ybS1pdGVtLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBmb3JtX2l0ZW0gPSAoZm9ybV9pdGVtX2NvbXBvbmVudC5leHBvcnRzKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZm9ybS1pdGVtL2luZGV4LmpzXG5cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmZvcm1faXRlbS5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuICBWdWUuY29tcG9uZW50KGZvcm1faXRlbS5uYW1lLCBmb3JtX2l0ZW0pO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcGFja2FnZXNfZm9ybV9pdGVtID0gKGZvcm1faXRlbSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3RhYnMvc3JjL3RhYi1iYXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTIwMzFmMzNhJlxudmFyIHRhYl9iYXJ2dWVfdHlwZV90ZW1wbGF0ZV9pZF8yMDMxZjMzYV9yZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJkaXZcIiwge1xuICAgIHN0YXRpY0NsYXNzOiBcImVsLXRhYnNfX2FjdGl2ZS1iYXJcIixcbiAgICBjbGFzczogXCJpcy1cIiArIF92bS5yb290VGFicy50YWJQb3NpdGlvbixcbiAgICBzdHlsZTogX3ZtLmJhclN0eWxlXG4gIH0pXG59XG52YXIgdGFiX2JhcnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzIwMzFmMzNhX3N0YXRpY1JlbmRlckZucyA9IFtdXG50YWJfYmFydnVlX3R5cGVfdGVtcGxhdGVfaWRfMjAzMWYzM2FfcmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy90YWJzL3NyYy90YWItYmFyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yMDMxZjMzYSZcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvdGFicy9zcmMvdGFiLWJhci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4vL1xuLy9cbi8vXG5cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgdGFiX2JhcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG5hbWU6ICdUYWJCYXInLFxuXG4gIHByb3BzOiB7XG4gICAgdGFiczogQXJyYXlcbiAgfSxcblxuICBpbmplY3Q6IFsncm9vdFRhYnMnXSxcblxuICBjb21wdXRlZDoge1xuICAgIGJhclN0eWxlOiB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgICB2YXIgc3R5bGUgPSB7fTtcbiAgICAgICAgdmFyIG9mZnNldCA9IDA7XG4gICAgICAgIHZhciB0YWJTaXplID0gMDtcbiAgICAgICAgdmFyIHNpemVOYW1lID0gWyd0b3AnLCAnYm90dG9tJ10uaW5kZXhPZih0aGlzLnJvb3RUYWJzLnRhYlBvc2l0aW9uKSAhPT0gLTEgPyAnd2lkdGgnIDogJ2hlaWdodCc7XG4gICAgICAgIHZhciBzaXplRGlyID0gc2l6ZU5hbWUgPT09ICd3aWR0aCcgPyAneCcgOiAneSc7XG4gICAgICAgIHZhciBmaXJzdFVwcGVyQ2FzZSA9IGZ1bmN0aW9uIGZpcnN0VXBwZXJDYXNlKHN0cikge1xuICAgICAgICAgIHJldHVybiBzdHIudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC8oIHxeKVthLXpdL2csIGZ1bmN0aW9uIChMKSB7XG4gICAgICAgICAgICByZXR1cm4gTC50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLnRhYnMuZXZlcnkoZnVuY3Rpb24gKHRhYiwgaW5kZXgpIHtcbiAgICAgICAgICB2YXIgJGVsID0gT2JqZWN0KHV0aWxfW1wiYXJyYXlGaW5kXCJdKShfdGhpcy4kcGFyZW50LiRyZWZzLnRhYnMgfHwgW10sIGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICByZXR1cm4gdC5pZC5yZXBsYWNlKCd0YWItJywgJycpID09PSB0YWIucGFuZU5hbWU7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKCEkZWwpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIXRhYi5hY3RpdmUpIHtcbiAgICAgICAgICAgIG9mZnNldCArPSAkZWxbJ2NsaWVudCcgKyBmaXJzdFVwcGVyQ2FzZShzaXplTmFtZSldO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRhYlNpemUgPSAkZWxbJ2NsaWVudCcgKyBmaXJzdFVwcGVyQ2FzZShzaXplTmFtZSldO1xuICAgICAgICAgICAgdmFyIHRhYlN0eWxlcyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKCRlbCk7XG4gICAgICAgICAgICBpZiAoc2l6ZU5hbWUgPT09ICd3aWR0aCcgJiYgX3RoaXMudGFicy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgIHRhYlNpemUgLT0gcGFyc2VGbG9hdCh0YWJTdHlsZXMucGFkZGluZ0xlZnQpICsgcGFyc2VGbG9hdCh0YWJTdHlsZXMucGFkZGluZ1JpZ2h0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzaXplTmFtZSA9PT0gJ3dpZHRoJykge1xuICAgICAgICAgICAgICBvZmZzZXQgKz0gcGFyc2VGbG9hdCh0YWJTdHlsZXMucGFkZGluZ0xlZnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdmFyIHRyYW5zZm9ybSA9ICd0cmFuc2xhdGUnICsgZmlyc3RVcHBlckNhc2Uoc2l6ZURpcikgKyAnKCcgKyBvZmZzZXQgKyAncHgpJztcbiAgICAgICAgc3R5bGVbc2l6ZU5hbWVdID0gdGFiU2l6ZSArICdweCc7XG4gICAgICAgIHN0eWxlLnRyYW5zZm9ybSA9IHRyYW5zZm9ybTtcbiAgICAgICAgc3R5bGUubXNUcmFuc2Zvcm0gPSB0cmFuc2Zvcm07XG4gICAgICAgIHN0eWxlLndlYmtpdFRyYW5zZm9ybSA9IHRyYW5zZm9ybTtcblxuICAgICAgICByZXR1cm4gc3R5bGU7XG4gICAgICB9XG4gICAgfVxuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdGFicy9zcmMvdGFiLWJhci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX3RhYl9iYXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAodGFiX2JhcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy90YWJzL3NyYy90YWItYmFyLnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIHRhYl9iYXJfY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBzcmNfdGFiX2JhcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgdGFiX2JhcnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzIwMzFmMzNhX3JlbmRlcixcbiAgdGFiX2JhcnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzIwMzFmMzNhX3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgdGFiX2Jhcl9hcGk7IH1cbnRhYl9iYXJfY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy90YWJzL3NyYy90YWItYmFyLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciB0YWJfYmFyID0gKHRhYl9iYXJfY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvdGFicy9zcmMvdGFiLW5hdi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG5cblxuXG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxudmFyIHRhYl9uYXZ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19maXJzdFVwcGVyQ2FzZSA9IGZ1bmN0aW9uIGZpcnN0VXBwZXJDYXNlKHN0cikge1xuICByZXR1cm4gc3RyLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvKCB8XilbYS16XS9nLCBmdW5jdGlvbiAoTCkge1xuICAgIHJldHVybiBMLnRvVXBwZXJDYXNlKCk7XG4gIH0pO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgdGFiX25hdnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG5hbWU6ICdUYWJOYXYnLFxuXG4gIGNvbXBvbmVudHM6IHtcbiAgICBUYWJCYXI6IHRhYl9iYXJcbiAgfSxcblxuICBpbmplY3Q6IFsncm9vdFRhYnMnXSxcblxuICBwcm9wczoge1xuICAgIHBhbmVzOiBBcnJheSxcbiAgICBjdXJyZW50TmFtZTogU3RyaW5nLFxuICAgIGVkaXRhYmxlOiBCb29sZWFuLFxuICAgIG9uVGFiQ2xpY2s6IHtcbiAgICAgIHR5cGU6IEZ1bmN0aW9uLFxuICAgICAgZGVmYXVsdDogbm9vcFxuICAgIH0sXG4gICAgb25UYWJSZW1vdmU6IHtcbiAgICAgIHR5cGU6IEZ1bmN0aW9uLFxuICAgICAgZGVmYXVsdDogbm9vcFxuICAgIH0sXG4gICAgdHlwZTogU3RyaW5nLFxuICAgIHN0cmV0Y2g6IEJvb2xlYW5cbiAgfSxcblxuICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzY3JvbGxhYmxlOiBmYWxzZSxcbiAgICAgIG5hdk9mZnNldDogMCxcbiAgICAgIGlzRm9jdXM6IGZhbHNlLFxuICAgICAgZm9jdXNhYmxlOiB0cnVlXG4gICAgfTtcbiAgfSxcblxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbmF2U3R5bGU6IGZ1bmN0aW9uIG5hdlN0eWxlKCkge1xuICAgICAgdmFyIGRpciA9IFsndG9wJywgJ2JvdHRvbSddLmluZGV4T2YodGhpcy5yb290VGFicy50YWJQb3NpdGlvbikgIT09IC0xID8gJ1gnIDogJ1knO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHJhbnNmb3JtOiAndHJhbnNsYXRlJyArIGRpciArICcoLScgKyB0aGlzLm5hdk9mZnNldCArICdweCknXG4gICAgICB9O1xuICAgIH0sXG4gICAgc2l6ZU5hbWU6IGZ1bmN0aW9uIHNpemVOYW1lKCkge1xuICAgICAgcmV0dXJuIFsndG9wJywgJ2JvdHRvbSddLmluZGV4T2YodGhpcy5yb290VGFicy50YWJQb3NpdGlvbikgIT09IC0xID8gJ3dpZHRoJyA6ICdoZWlnaHQnO1xuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgc2Nyb2xsUHJldjogZnVuY3Rpb24gc2Nyb2xsUHJldigpIHtcbiAgICAgIHZhciBjb250YWluZXJTaXplID0gdGhpcy4kcmVmcy5uYXZTY3JvbGxbJ29mZnNldCcgKyB0YWJfbmF2dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfZmlyc3RVcHBlckNhc2UodGhpcy5zaXplTmFtZSldO1xuICAgICAgdmFyIGN1cnJlbnRPZmZzZXQgPSB0aGlzLm5hdk9mZnNldDtcblxuICAgICAgaWYgKCFjdXJyZW50T2Zmc2V0KSByZXR1cm47XG5cbiAgICAgIHZhciBuZXdPZmZzZXQgPSBjdXJyZW50T2Zmc2V0ID4gY29udGFpbmVyU2l6ZSA/IGN1cnJlbnRPZmZzZXQgLSBjb250YWluZXJTaXplIDogMDtcblxuICAgICAgdGhpcy5uYXZPZmZzZXQgPSBuZXdPZmZzZXQ7XG4gICAgfSxcbiAgICBzY3JvbGxOZXh0OiBmdW5jdGlvbiBzY3JvbGxOZXh0KCkge1xuICAgICAgdmFyIG5hdlNpemUgPSB0aGlzLiRyZWZzLm5hdlsnb2Zmc2V0JyArIHRhYl9uYXZ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19maXJzdFVwcGVyQ2FzZSh0aGlzLnNpemVOYW1lKV07XG4gICAgICB2YXIgY29udGFpbmVyU2l6ZSA9IHRoaXMuJHJlZnMubmF2U2Nyb2xsWydvZmZzZXQnICsgdGFiX25hdnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX2ZpcnN0VXBwZXJDYXNlKHRoaXMuc2l6ZU5hbWUpXTtcbiAgICAgIHZhciBjdXJyZW50T2Zmc2V0ID0gdGhpcy5uYXZPZmZzZXQ7XG5cbiAgICAgIGlmIChuYXZTaXplIC0gY3VycmVudE9mZnNldCA8PSBjb250YWluZXJTaXplKSByZXR1cm47XG5cbiAgICAgIHZhciBuZXdPZmZzZXQgPSBuYXZTaXplIC0gY3VycmVudE9mZnNldCA+IGNvbnRhaW5lclNpemUgKiAyID8gY3VycmVudE9mZnNldCArIGNvbnRhaW5lclNpemUgOiBuYXZTaXplIC0gY29udGFpbmVyU2l6ZTtcblxuICAgICAgdGhpcy5uYXZPZmZzZXQgPSBuZXdPZmZzZXQ7XG4gICAgfSxcbiAgICBzY3JvbGxUb0FjdGl2ZVRhYjogZnVuY3Rpb24gc2Nyb2xsVG9BY3RpdmVUYWIoKSB7XG4gICAgICBpZiAoIXRoaXMuc2Nyb2xsYWJsZSkgcmV0dXJuO1xuICAgICAgdmFyIG5hdiA9IHRoaXMuJHJlZnMubmF2O1xuICAgICAgdmFyIGFjdGl2ZVRhYiA9IHRoaXMuJGVsLnF1ZXJ5U2VsZWN0b3IoJy5pcy1hY3RpdmUnKTtcbiAgICAgIGlmICghYWN0aXZlVGFiKSByZXR1cm47XG4gICAgICB2YXIgbmF2U2Nyb2xsID0gdGhpcy4kcmVmcy5uYXZTY3JvbGw7XG4gICAgICB2YXIgaXNIb3Jpem9udGFsID0gWyd0b3AnLCAnYm90dG9tJ10uaW5kZXhPZih0aGlzLnJvb3RUYWJzLnRhYlBvc2l0aW9uKSAhPT0gLTE7XG4gICAgICB2YXIgYWN0aXZlVGFiQm91bmRpbmcgPSBhY3RpdmVUYWIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICB2YXIgbmF2U2Nyb2xsQm91bmRpbmcgPSBuYXZTY3JvbGwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICB2YXIgbWF4T2Zmc2V0ID0gaXNIb3Jpem9udGFsID8gbmF2Lm9mZnNldFdpZHRoIC0gbmF2U2Nyb2xsQm91bmRpbmcud2lkdGggOiBuYXYub2Zmc2V0SGVpZ2h0IC0gbmF2U2Nyb2xsQm91bmRpbmcuaGVpZ2h0O1xuICAgICAgdmFyIGN1cnJlbnRPZmZzZXQgPSB0aGlzLm5hdk9mZnNldDtcbiAgICAgIHZhciBuZXdPZmZzZXQgPSBjdXJyZW50T2Zmc2V0O1xuXG4gICAgICBpZiAoaXNIb3Jpem9udGFsKSB7XG4gICAgICAgIGlmIChhY3RpdmVUYWJCb3VuZGluZy5sZWZ0IDwgbmF2U2Nyb2xsQm91bmRpbmcubGVmdCkge1xuICAgICAgICAgIG5ld09mZnNldCA9IGN1cnJlbnRPZmZzZXQgLSAobmF2U2Nyb2xsQm91bmRpbmcubGVmdCAtIGFjdGl2ZVRhYkJvdW5kaW5nLmxlZnQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhY3RpdmVUYWJCb3VuZGluZy5yaWdodCA+IG5hdlNjcm9sbEJvdW5kaW5nLnJpZ2h0KSB7XG4gICAgICAgICAgbmV3T2Zmc2V0ID0gY3VycmVudE9mZnNldCArIGFjdGl2ZVRhYkJvdW5kaW5nLnJpZ2h0IC0gbmF2U2Nyb2xsQm91bmRpbmcucmlnaHQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChhY3RpdmVUYWJCb3VuZGluZy50b3AgPCBuYXZTY3JvbGxCb3VuZGluZy50b3ApIHtcbiAgICAgICAgICBuZXdPZmZzZXQgPSBjdXJyZW50T2Zmc2V0IC0gKG5hdlNjcm9sbEJvdW5kaW5nLnRvcCAtIGFjdGl2ZVRhYkJvdW5kaW5nLnRvcCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFjdGl2ZVRhYkJvdW5kaW5nLmJvdHRvbSA+IG5hdlNjcm9sbEJvdW5kaW5nLmJvdHRvbSkge1xuICAgICAgICAgIG5ld09mZnNldCA9IGN1cnJlbnRPZmZzZXQgKyAoYWN0aXZlVGFiQm91bmRpbmcuYm90dG9tIC0gbmF2U2Nyb2xsQm91bmRpbmcuYm90dG9tKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbmV3T2Zmc2V0ID0gTWF0aC5tYXgobmV3T2Zmc2V0LCAwKTtcbiAgICAgIHRoaXMubmF2T2Zmc2V0ID0gTWF0aC5taW4obmV3T2Zmc2V0LCBtYXhPZmZzZXQpO1xuICAgIH0sXG4gICAgdXBkYXRlOiBmdW5jdGlvbiB1cGRhdGUoKSB7XG4gICAgICBpZiAoIXRoaXMuJHJlZnMubmF2KSByZXR1cm47XG4gICAgICB2YXIgc2l6ZU5hbWUgPSB0aGlzLnNpemVOYW1lO1xuICAgICAgdmFyIG5hdlNpemUgPSB0aGlzLiRyZWZzLm5hdlsnb2Zmc2V0JyArIHRhYl9uYXZ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19maXJzdFVwcGVyQ2FzZShzaXplTmFtZSldO1xuICAgICAgdmFyIGNvbnRhaW5lclNpemUgPSB0aGlzLiRyZWZzLm5hdlNjcm9sbFsnb2Zmc2V0JyArIHRhYl9uYXZ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19maXJzdFVwcGVyQ2FzZShzaXplTmFtZSldO1xuICAgICAgdmFyIGN1cnJlbnRPZmZzZXQgPSB0aGlzLm5hdk9mZnNldDtcblxuICAgICAgaWYgKGNvbnRhaW5lclNpemUgPCBuYXZTaXplKSB7XG4gICAgICAgIHZhciBfY3VycmVudE9mZnNldCA9IHRoaXMubmF2T2Zmc2V0O1xuICAgICAgICB0aGlzLnNjcm9sbGFibGUgPSB0aGlzLnNjcm9sbGFibGUgfHwge307XG4gICAgICAgIHRoaXMuc2Nyb2xsYWJsZS5wcmV2ID0gX2N1cnJlbnRPZmZzZXQ7XG4gICAgICAgIHRoaXMuc2Nyb2xsYWJsZS5uZXh0ID0gX2N1cnJlbnRPZmZzZXQgKyBjb250YWluZXJTaXplIDwgbmF2U2l6ZTtcbiAgICAgICAgaWYgKG5hdlNpemUgLSBfY3VycmVudE9mZnNldCA8IGNvbnRhaW5lclNpemUpIHtcbiAgICAgICAgICB0aGlzLm5hdk9mZnNldCA9IG5hdlNpemUgLSBjb250YWluZXJTaXplO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNjcm9sbGFibGUgPSBmYWxzZTtcbiAgICAgICAgaWYgKGN1cnJlbnRPZmZzZXQgPiAwKSB7XG4gICAgICAgICAgdGhpcy5uYXZPZmZzZXQgPSAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBjaGFuZ2VUYWI6IGZ1bmN0aW9uIGNoYW5nZVRhYihlKSB7XG4gICAgICB2YXIga2V5Q29kZSA9IGUua2V5Q29kZTtcbiAgICAgIHZhciBuZXh0SW5kZXggPSB2b2lkIDA7XG4gICAgICB2YXIgY3VycmVudEluZGV4ID0gdm9pZCAwLFxuICAgICAgICAgIHRhYkxpc3QgPSB2b2lkIDA7XG4gICAgICBpZiAoWzM3LCAzOCwgMzksIDQwXS5pbmRleE9mKGtleUNvZGUpICE9PSAtMSkge1xuICAgICAgICAvLyDlt6blj7PkuIrkuIvplK7mm7TmjaJ0YWJcbiAgICAgICAgdGFiTGlzdCA9IGUuY3VycmVudFRhcmdldC5xdWVyeVNlbGVjdG9yQWxsKCdbcm9sZT10YWJdJyk7XG4gICAgICAgIGN1cnJlbnRJbmRleCA9IEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwodGFiTGlzdCwgZS50YXJnZXQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGtleUNvZGUgPT09IDM3IHx8IGtleUNvZGUgPT09IDM4KSB7XG4gICAgICAgIC8vIGxlZnRcbiAgICAgICAgaWYgKGN1cnJlbnRJbmRleCA9PT0gMCkge1xuICAgICAgICAgIC8vIGZpcnN0XG4gICAgICAgICAgbmV4dEluZGV4ID0gdGFiTGlzdC5sZW5ndGggLSAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5leHRJbmRleCA9IGN1cnJlbnRJbmRleCAtIDE7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHJpZ2h0XG4gICAgICAgIGlmIChjdXJyZW50SW5kZXggPCB0YWJMaXN0Lmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAvLyBub3QgbGFzdFxuICAgICAgICAgIG5leHRJbmRleCA9IGN1cnJlbnRJbmRleCArIDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV4dEluZGV4ID0gMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGFiTGlzdFtuZXh0SW5kZXhdLmZvY3VzKCk7IC8vIOaUueWPmOeEpueCueWFg+e0oFxuICAgICAgdGFiTGlzdFtuZXh0SW5kZXhdLmNsaWNrKCk7IC8vIOmAieS4reS4i+S4gOS4qnRhYlxuICAgICAgdGhpcy5zZXRGb2N1cygpO1xuICAgIH0sXG4gICAgc2V0Rm9jdXM6IGZ1bmN0aW9uIHNldEZvY3VzKCkge1xuICAgICAgaWYgKHRoaXMuZm9jdXNhYmxlKSB7XG4gICAgICAgIHRoaXMuaXNGb2N1cyA9IHRydWU7XG4gICAgICB9XG4gICAgfSxcbiAgICByZW1vdmVGb2N1czogZnVuY3Rpb24gcmVtb3ZlRm9jdXMoKSB7XG4gICAgICB0aGlzLmlzRm9jdXMgPSBmYWxzZTtcbiAgICB9LFxuICAgIHZpc2liaWxpdHlDaGFuZ2VIYW5kbGVyOiBmdW5jdGlvbiB2aXNpYmlsaXR5Q2hhbmdlSGFuZGxlcigpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIHZhciB2aXNpYmlsaXR5ID0gZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlO1xuICAgICAgaWYgKHZpc2liaWxpdHkgPT09ICdoaWRkZW4nKSB7XG4gICAgICAgIHRoaXMuZm9jdXNhYmxlID0gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKHZpc2liaWxpdHkgPT09ICd2aXNpYmxlJykge1xuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfdGhpcy5mb2N1c2FibGUgPSB0cnVlO1xuICAgICAgICB9LCA1MCk7XG4gICAgICB9XG4gICAgfSxcbiAgICB3aW5kb3dCbHVySGFuZGxlcjogZnVuY3Rpb24gd2luZG93Qmx1ckhhbmRsZXIoKSB7XG4gICAgICB0aGlzLmZvY3VzYWJsZSA9IGZhbHNlO1xuICAgIH0sXG4gICAgd2luZG93Rm9jdXNIYW5kbGVyOiBmdW5jdGlvbiB3aW5kb3dGb2N1c0hhbmRsZXIoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzMi5mb2N1c2FibGUgPSB0cnVlO1xuICAgICAgfSwgNTApO1xuICAgIH1cbiAgfSxcblxuICB1cGRhdGVkOiBmdW5jdGlvbiB1cGRhdGVkKCkge1xuICAgIHRoaXMudXBkYXRlKCk7XG4gIH0sXG4gIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKGgpIHtcbiAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgIHZhciB0eXBlID0gdGhpcy50eXBlLFxuICAgICAgICBwYW5lcyA9IHRoaXMucGFuZXMsXG4gICAgICAgIGVkaXRhYmxlID0gdGhpcy5lZGl0YWJsZSxcbiAgICAgICAgc3RyZXRjaCA9IHRoaXMuc3RyZXRjaCxcbiAgICAgICAgb25UYWJDbGljayA9IHRoaXMub25UYWJDbGljayxcbiAgICAgICAgb25UYWJSZW1vdmUgPSB0aGlzLm9uVGFiUmVtb3ZlLFxuICAgICAgICBuYXZTdHlsZSA9IHRoaXMubmF2U3R5bGUsXG4gICAgICAgIHNjcm9sbGFibGUgPSB0aGlzLnNjcm9sbGFibGUsXG4gICAgICAgIHNjcm9sbE5leHQgPSB0aGlzLnNjcm9sbE5leHQsXG4gICAgICAgIHNjcm9sbFByZXYgPSB0aGlzLnNjcm9sbFByZXYsXG4gICAgICAgIGNoYW5nZVRhYiA9IHRoaXMuY2hhbmdlVGFiLFxuICAgICAgICBzZXRGb2N1cyA9IHRoaXMuc2V0Rm9jdXMsXG4gICAgICAgIHJlbW92ZUZvY3VzID0gdGhpcy5yZW1vdmVGb2N1cztcblxuICAgIHZhciBzY3JvbGxCdG4gPSBzY3JvbGxhYmxlID8gW2goXG4gICAgICAnc3BhbicsXG4gICAgICB7ICdjbGFzcyc6IFsnZWwtdGFic19fbmF2LXByZXYnLCBzY3JvbGxhYmxlLnByZXYgPyAnJyA6ICdpcy1kaXNhYmxlZCddLCBvbjoge1xuICAgICAgICAgICdjbGljayc6IHNjcm9sbFByZXZcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFtoKCdpJywgeyAnY2xhc3MnOiAnZWwtaWNvbi1hcnJvdy1sZWZ0JyB9KV1cbiAgICApLCBoKFxuICAgICAgJ3NwYW4nLFxuICAgICAgeyAnY2xhc3MnOiBbJ2VsLXRhYnNfX25hdi1uZXh0Jywgc2Nyb2xsYWJsZS5uZXh0ID8gJycgOiAnaXMtZGlzYWJsZWQnXSwgb246IHtcbiAgICAgICAgICAnY2xpY2snOiBzY3JvbGxOZXh0XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBbaCgnaScsIHsgJ2NsYXNzJzogJ2VsLWljb24tYXJyb3ctcmlnaHQnIH0pXVxuICAgICldIDogbnVsbDtcblxuICAgIHZhciB0YWJzID0gdGhpcy5fbChwYW5lcywgZnVuY3Rpb24gKHBhbmUsIGluZGV4KSB7XG4gICAgICB2YXIgX3JlZjtcblxuICAgICAgdmFyIHRhYk5hbWUgPSBwYW5lLm5hbWUgfHwgcGFuZS5pbmRleCB8fCBpbmRleDtcbiAgICAgIHZhciBjbG9zYWJsZSA9IHBhbmUuaXNDbG9zYWJsZSB8fCBlZGl0YWJsZTtcblxuICAgICAgcGFuZS5pbmRleCA9ICcnICsgaW5kZXg7XG5cbiAgICAgIHZhciBidG5DbG9zZSA9IGNsb3NhYmxlID8gaCgnc3BhbicsIHsgJ2NsYXNzJzogJ2VsLWljb24tY2xvc2UnLCBvbjoge1xuICAgICAgICAgICdjbGljayc6IGZ1bmN0aW9uIGNsaWNrKGV2KSB7XG4gICAgICAgICAgICBvblRhYlJlbW92ZShwYW5lLCBldik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KSA6IG51bGw7XG5cbiAgICAgIHZhciB0YWJMYWJlbENvbnRlbnQgPSBwYW5lLiRzbG90cy5sYWJlbCB8fCBwYW5lLmxhYmVsO1xuICAgICAgdmFyIHRhYmluZGV4ID0gcGFuZS5hY3RpdmUgPyAwIDogLTE7XG4gICAgICByZXR1cm4gaChcbiAgICAgICAgJ2RpdicsXG4gICAgICAgIHtcbiAgICAgICAgICAnY2xhc3MnOiAoX3JlZiA9IHtcbiAgICAgICAgICAgICdlbC10YWJzX19pdGVtJzogdHJ1ZVxuICAgICAgICAgIH0sIF9yZWZbJ2lzLScgKyBfdGhpczMucm9vdFRhYnMudGFiUG9zaXRpb25dID0gdHJ1ZSwgX3JlZlsnaXMtYWN0aXZlJ10gPSBwYW5lLmFjdGl2ZSwgX3JlZlsnaXMtZGlzYWJsZWQnXSA9IHBhbmUuZGlzYWJsZWQsIF9yZWZbJ2lzLWNsb3NhYmxlJ10gPSBjbG9zYWJsZSwgX3JlZlsnaXMtZm9jdXMnXSA9IF90aGlzMy5pc0ZvY3VzLCBfcmVmKSxcbiAgICAgICAgICBhdHRyczogeyBpZDogJ3RhYi0nICsgdGFiTmFtZSxcblxuICAgICAgICAgICAgJ2FyaWEtY29udHJvbHMnOiAncGFuZS0nICsgdGFiTmFtZSxcbiAgICAgICAgICAgIHJvbGU6ICd0YWInLFxuICAgICAgICAgICAgJ2FyaWEtc2VsZWN0ZWQnOiBwYW5lLmFjdGl2ZSxcblxuICAgICAgICAgICAgdGFiaW5kZXg6IHRhYmluZGV4XG4gICAgICAgICAgfSxcbiAgICAgICAgICBrZXk6ICd0YWItJyArIHRhYk5hbWUsIHJlZjogJ3RhYnMnLCByZWZJbkZvcjogdHJ1ZSxcbiAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgJ2ZvY3VzJzogZnVuY3Rpb24gZm9jdXMoKSB7XG4gICAgICAgICAgICAgIHNldEZvY3VzKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ2JsdXInOiBmdW5jdGlvbiBibHVyKCkge1xuICAgICAgICAgICAgICByZW1vdmVGb2N1cygpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdjbGljayc6IGZ1bmN0aW9uIGNsaWNrKGV2KSB7XG4gICAgICAgICAgICAgIHJlbW92ZUZvY3VzKCk7b25UYWJDbGljayhwYW5lLCB0YWJOYW1lLCBldik7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ2tleWRvd24nOiBmdW5jdGlvbiBrZXlkb3duKGV2KSB7XG4gICAgICAgICAgICAgIGlmIChjbG9zYWJsZSAmJiAoZXYua2V5Q29kZSA9PT0gNDYgfHwgZXYua2V5Q29kZSA9PT0gOCkpIHtcbiAgICAgICAgICAgICAgICBvblRhYlJlbW92ZShwYW5lLCBldik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFt0YWJMYWJlbENvbnRlbnQsIGJ0bkNsb3NlXVxuICAgICAgKTtcbiAgICB9KTtcbiAgICByZXR1cm4gaChcbiAgICAgICdkaXYnLFxuICAgICAgeyAnY2xhc3MnOiBbJ2VsLXRhYnNfX25hdi13cmFwJywgc2Nyb2xsYWJsZSA/ICdpcy1zY3JvbGxhYmxlJyA6ICcnLCAnaXMtJyArIHRoaXMucm9vdFRhYnMudGFiUG9zaXRpb25dIH0sXG4gICAgICBbc2Nyb2xsQnRuLCBoKFxuICAgICAgICAnZGl2JyxcbiAgICAgICAgeyAnY2xhc3MnOiBbJ2VsLXRhYnNfX25hdi1zY3JvbGwnXSwgcmVmOiAnbmF2U2Nyb2xsJyB9LFxuICAgICAgICBbaChcbiAgICAgICAgICAnZGl2JyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICAnY2xhc3MnOiBbJ2VsLXRhYnNfX25hdicsICdpcy0nICsgdGhpcy5yb290VGFicy50YWJQb3NpdGlvbiwgc3RyZXRjaCAmJiBbJ3RvcCcsICdib3R0b20nXS5pbmRleE9mKHRoaXMucm9vdFRhYnMudGFiUG9zaXRpb24pICE9PSAtMSA/ICdpcy1zdHJldGNoJyA6ICcnXSxcbiAgICAgICAgICAgIHJlZjogJ25hdicsXG4gICAgICAgICAgICBzdHlsZTogbmF2U3R5bGUsXG4gICAgICAgICAgICBhdHRyczogeyByb2xlOiAndGFibGlzdCdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAna2V5ZG93bic6IGNoYW5nZVRhYlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgWyF0eXBlID8gaCgndGFiLWJhcicsIHtcbiAgICAgICAgICAgIGF0dHJzOiB7IHRhYnM6IHBhbmVzIH1cbiAgICAgICAgICB9KSA6IG51bGwsIHRhYnNdXG4gICAgICAgICldXG4gICAgICApXVxuICAgICk7XG4gIH0sXG4gIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7XG4gICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cbiAgICBPYmplY3QocmVzaXplX2V2ZW50X1tcImFkZFJlc2l6ZUxpc3RlbmVyXCJdKSh0aGlzLiRlbCwgdGhpcy51cGRhdGUpO1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCB0aGlzLnZpc2liaWxpdHlDaGFuZ2VIYW5kbGVyKTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsIHRoaXMud2luZG93Qmx1ckhhbmRsZXIpO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycsIHRoaXMud2luZG93Rm9jdXNIYW5kbGVyKTtcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzNC5zY3JvbGxUb0FjdGl2ZVRhYigpO1xuICAgIH0sIDApO1xuICB9LFxuICBiZWZvcmVEZXN0cm95OiBmdW5jdGlvbiBiZWZvcmVEZXN0cm95KCkge1xuICAgIGlmICh0aGlzLiRlbCAmJiB0aGlzLnVwZGF0ZSkgT2JqZWN0KHJlc2l6ZV9ldmVudF9bXCJyZW1vdmVSZXNpemVMaXN0ZW5lclwiXSkodGhpcy4kZWwsIHRoaXMudXBkYXRlKTtcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd2aXNpYmlsaXR5Y2hhbmdlJywgdGhpcy52aXNpYmlsaXR5Q2hhbmdlSGFuZGxlcik7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2JsdXInLCB0aGlzLndpbmRvd0JsdXJIYW5kbGVyKTtcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignZm9jdXMnLCB0aGlzLndpbmRvd0ZvY3VzSGFuZGxlcik7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy90YWJzL3NyYy90YWItbmF2LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfdGFiX25hdnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh0YWJfbmF2dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3RhYnMvc3JjL3RhYi1uYXYudnVlXG52YXIgdGFiX25hdl9yZW5kZXIsIHRhYl9uYXZfc3RhdGljUmVuZGVyRm5zXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIHRhYl9uYXZfY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBzcmNfdGFiX25hdnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgdGFiX25hdl9yZW5kZXIsXG4gIHRhYl9uYXZfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciB0YWJfbmF2X2FwaTsgfVxudGFiX25hdl9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL3RhYnMvc3JjL3RhYi1uYXYudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHRhYl9uYXYgPSAodGFiX25hdl9jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy90YWJzL3NyYy90YWJzLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcblxuXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHRhYnN2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBuYW1lOiAnRWxUYWJzJyxcblxuICBjb21wb25lbnRzOiB7XG4gICAgVGFiTmF2OiB0YWJfbmF2XG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICB0eXBlOiBTdHJpbmcsXG4gICAgYWN0aXZlTmFtZTogU3RyaW5nLFxuICAgIGNsb3NhYmxlOiBCb29sZWFuLFxuICAgIGFkZGFibGU6IEJvb2xlYW4sXG4gICAgdmFsdWU6IHt9LFxuICAgIGVkaXRhYmxlOiBCb29sZWFuLFxuICAgIHRhYlBvc2l0aW9uOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAndG9wJ1xuICAgIH0sXG4gICAgYmVmb3JlTGVhdmU6IEZ1bmN0aW9uLFxuICAgIHN0cmV0Y2g6IEJvb2xlYW5cbiAgfSxcblxuICBwcm92aWRlOiBmdW5jdGlvbiBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICByb290VGFiczogdGhpc1xuICAgIH07XG4gIH0sXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGN1cnJlbnROYW1lOiB0aGlzLnZhbHVlIHx8IHRoaXMuYWN0aXZlTmFtZSxcbiAgICAgIHBhbmVzOiBbXVxuICAgIH07XG4gIH0sXG5cblxuICB3YXRjaDoge1xuICAgIGFjdGl2ZU5hbWU6IGZ1bmN0aW9uIGFjdGl2ZU5hbWUodmFsdWUpIHtcbiAgICAgIHRoaXMuc2V0Q3VycmVudE5hbWUodmFsdWUpO1xuICAgIH0sXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHZhbHVlKF92YWx1ZSkge1xuICAgICAgdGhpcy5zZXRDdXJyZW50TmFtZShfdmFsdWUpO1xuICAgIH0sXG4gICAgY3VycmVudE5hbWU6IGZ1bmN0aW9uIGN1cnJlbnROYW1lKHZhbHVlKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICBpZiAodGhpcy4kcmVmcy5uYXYpIHtcbiAgICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF90aGlzLiRyZWZzLm5hdi4kbmV4dFRpY2soZnVuY3Rpb24gKF8pIHtcbiAgICAgICAgICAgIF90aGlzLiRyZWZzLm5hdi5zY3JvbGxUb0FjdGl2ZVRhYigpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGNhbGNQYW5lSW5zdGFuY2VzOiBmdW5jdGlvbiBjYWxjUGFuZUluc3RhbmNlcygpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB2YXIgaXNGb3JjZVVwZGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogZmFsc2U7XG5cbiAgICAgIGlmICh0aGlzLiRzbG90cy5kZWZhdWx0KSB7XG4gICAgICAgIHZhciBwYW5lU2xvdHMgPSB0aGlzLiRzbG90cy5kZWZhdWx0LmZpbHRlcihmdW5jdGlvbiAodm5vZGUpIHtcbiAgICAgICAgICByZXR1cm4gdm5vZGUudGFnICYmIHZub2RlLmNvbXBvbmVudE9wdGlvbnMgJiYgdm5vZGUuY29tcG9uZW50T3B0aW9ucy5DdG9yLm9wdGlvbnMubmFtZSA9PT0gJ0VsVGFiUGFuZSc7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyB1cGRhdGUgaW5kZWVkXG4gICAgICAgIHZhciBwYW5lcyA9IHBhbmVTbG90cy5tYXAoZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgICAgICB2YXIgY29tcG9uZW50SW5zdGFuY2UgPSBfcmVmLmNvbXBvbmVudEluc3RhbmNlO1xuICAgICAgICAgIHJldHVybiBjb21wb25lbnRJbnN0YW5jZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBwYW5lc0NoYW5nZWQgPSAhKHBhbmVzLmxlbmd0aCA9PT0gdGhpcy5wYW5lcy5sZW5ndGggJiYgcGFuZXMuZXZlcnkoZnVuY3Rpb24gKHBhbmUsIGluZGV4KSB7XG4gICAgICAgICAgcmV0dXJuIHBhbmUgPT09IF90aGlzMi5wYW5lc1tpbmRleF07XG4gICAgICAgIH0pKTtcbiAgICAgICAgaWYgKGlzRm9yY2VVcGRhdGUgfHwgcGFuZXNDaGFuZ2VkKSB7XG4gICAgICAgICAgdGhpcy5wYW5lcyA9IHBhbmVzO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRoaXMucGFuZXMubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgIHRoaXMucGFuZXMgPSBbXTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGhhbmRsZVRhYkNsaWNrOiBmdW5jdGlvbiBoYW5kbGVUYWJDbGljayh0YWIsIHRhYk5hbWUsIGV2ZW50KSB7XG4gICAgICBpZiAodGFiLmRpc2FibGVkKSByZXR1cm47XG4gICAgICB0aGlzLnNldEN1cnJlbnROYW1lKHRhYk5hbWUpO1xuICAgICAgdGhpcy4kZW1pdCgndGFiLWNsaWNrJywgdGFiLCBldmVudCk7XG4gICAgfSxcbiAgICBoYW5kbGVUYWJSZW1vdmU6IGZ1bmN0aW9uIGhhbmRsZVRhYlJlbW92ZShwYW5lLCBldikge1xuICAgICAgaWYgKHBhbmUuZGlzYWJsZWQpIHJldHVybjtcbiAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgdGhpcy4kZW1pdCgnZWRpdCcsIHBhbmUubmFtZSwgJ3JlbW92ZScpO1xuICAgICAgdGhpcy4kZW1pdCgndGFiLXJlbW92ZScsIHBhbmUubmFtZSk7XG4gICAgfSxcbiAgICBoYW5kbGVUYWJBZGQ6IGZ1bmN0aW9uIGhhbmRsZVRhYkFkZCgpIHtcbiAgICAgIHRoaXMuJGVtaXQoJ2VkaXQnLCBudWxsLCAnYWRkJyk7XG4gICAgICB0aGlzLiRlbWl0KCd0YWItYWRkJyk7XG4gICAgfSxcbiAgICBzZXRDdXJyZW50TmFtZTogZnVuY3Rpb24gc2V0Q3VycmVudE5hbWUodmFsdWUpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgICB2YXIgY2hhbmdlQ3VycmVudE5hbWUgPSBmdW5jdGlvbiBjaGFuZ2VDdXJyZW50TmFtZSgpIHtcbiAgICAgICAgX3RoaXMzLmN1cnJlbnROYW1lID0gdmFsdWU7XG4gICAgICAgIF90aGlzMy4kZW1pdCgnaW5wdXQnLCB2YWx1ZSk7XG4gICAgICB9O1xuICAgICAgaWYgKHRoaXMuY3VycmVudE5hbWUgIT09IHZhbHVlICYmIHRoaXMuYmVmb3JlTGVhdmUpIHtcbiAgICAgICAgdmFyIGJlZm9yZSA9IHRoaXMuYmVmb3JlTGVhdmUodmFsdWUsIHRoaXMuY3VycmVudE5hbWUpO1xuICAgICAgICBpZiAoYmVmb3JlICYmIGJlZm9yZS50aGVuKSB7XG4gICAgICAgICAgYmVmb3JlLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY2hhbmdlQ3VycmVudE5hbWUoKTtcbiAgICAgICAgICAgIF90aGlzMy4kcmVmcy5uYXYgJiYgX3RoaXMzLiRyZWZzLm5hdi5yZW1vdmVGb2N1cygpO1xuICAgICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9FbGVtZUZFL2VsZW1lbnQvcHVsbC8xNDgxNlxuICAgICAgICAgICAgLy8gaWdub3JlIHByb21pc2UgcmVqZWN0aW9uIGluIGBiZWZvcmUtbGVhdmVgIGhvb2tcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChiZWZvcmUgIT09IGZhbHNlKSB7XG4gICAgICAgICAgY2hhbmdlQ3VycmVudE5hbWUoKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2hhbmdlQ3VycmVudE5hbWUoKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIoaCkge1xuICAgIHZhciBfcmVmMjtcblxuICAgIHZhciB0eXBlID0gdGhpcy50eXBlLFxuICAgICAgICBoYW5kbGVUYWJDbGljayA9IHRoaXMuaGFuZGxlVGFiQ2xpY2ssXG4gICAgICAgIGhhbmRsZVRhYlJlbW92ZSA9IHRoaXMuaGFuZGxlVGFiUmVtb3ZlLFxuICAgICAgICBoYW5kbGVUYWJBZGQgPSB0aGlzLmhhbmRsZVRhYkFkZCxcbiAgICAgICAgY3VycmVudE5hbWUgPSB0aGlzLmN1cnJlbnROYW1lLFxuICAgICAgICBwYW5lcyA9IHRoaXMucGFuZXMsXG4gICAgICAgIGVkaXRhYmxlID0gdGhpcy5lZGl0YWJsZSxcbiAgICAgICAgYWRkYWJsZSA9IHRoaXMuYWRkYWJsZSxcbiAgICAgICAgdGFiUG9zaXRpb24gPSB0aGlzLnRhYlBvc2l0aW9uLFxuICAgICAgICBzdHJldGNoID0gdGhpcy5zdHJldGNoO1xuXG5cbiAgICB2YXIgbmV3QnV0dG9uID0gZWRpdGFibGUgfHwgYWRkYWJsZSA/IGgoXG4gICAgICAnc3BhbicsXG4gICAgICB7XG4gICAgICAgICdjbGFzcyc6ICdlbC10YWJzX19uZXctdGFiJyxcbiAgICAgICAgb246IHtcbiAgICAgICAgICAnY2xpY2snOiBoYW5kbGVUYWJBZGQsXG4gICAgICAgICAgJ2tleWRvd24nOiBmdW5jdGlvbiBrZXlkb3duKGV2KSB7XG4gICAgICAgICAgICBpZiAoZXYua2V5Q29kZSA9PT0gMTMpIHtcbiAgICAgICAgICAgICAgaGFuZGxlVGFiQWRkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIHRhYmluZGV4OiAnMCdcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFtoKCdpJywgeyAnY2xhc3MnOiAnZWwtaWNvbi1wbHVzJyB9KV1cbiAgICApIDogbnVsbDtcblxuICAgIHZhciBuYXZEYXRhID0ge1xuICAgICAgcHJvcHM6IHtcbiAgICAgICAgY3VycmVudE5hbWU6IGN1cnJlbnROYW1lLFxuICAgICAgICBvblRhYkNsaWNrOiBoYW5kbGVUYWJDbGljayxcbiAgICAgICAgb25UYWJSZW1vdmU6IGhhbmRsZVRhYlJlbW92ZSxcbiAgICAgICAgZWRpdGFibGU6IGVkaXRhYmxlLFxuICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICBwYW5lczogcGFuZXMsXG4gICAgICAgIHN0cmV0Y2g6IHN0cmV0Y2hcbiAgICAgIH0sXG4gICAgICByZWY6ICduYXYnXG4gICAgfTtcbiAgICB2YXIgaGVhZGVyID0gaChcbiAgICAgICdkaXYnLFxuICAgICAgeyAnY2xhc3MnOiBbJ2VsLXRhYnNfX2hlYWRlcicsICdpcy0nICsgdGFiUG9zaXRpb25dIH0sXG4gICAgICBbbmV3QnV0dG9uLCBoKCd0YWItbmF2JywgbmF2RGF0YSldXG4gICAgKTtcbiAgICB2YXIgcGFuZWxzID0gaChcbiAgICAgICdkaXYnLFxuICAgICAgeyAnY2xhc3MnOiAnZWwtdGFic19fY29udGVudCcgfSxcbiAgICAgIFt0aGlzLiRzbG90cy5kZWZhdWx0XVxuICAgICk7XG5cbiAgICByZXR1cm4gaChcbiAgICAgICdkaXYnLFxuICAgICAgeyAnY2xhc3MnOiAoX3JlZjIgPSB7XG4gICAgICAgICAgJ2VsLXRhYnMnOiB0cnVlLFxuICAgICAgICAgICdlbC10YWJzLS1jYXJkJzogdHlwZSA9PT0gJ2NhcmQnXG4gICAgICAgIH0sIF9yZWYyWydlbC10YWJzLS0nICsgdGFiUG9zaXRpb25dID0gdHJ1ZSwgX3JlZjJbJ2VsLXRhYnMtLWJvcmRlci1jYXJkJ10gPSB0eXBlID09PSAnYm9yZGVyLWNhcmQnLCBfcmVmMikgfSxcbiAgICAgIFt0YWJQb3NpdGlvbiAhPT0gJ2JvdHRvbScgPyBbaGVhZGVyLCBwYW5lbHNdIDogW3BhbmVscywgaGVhZGVyXV1cbiAgICApO1xuICB9LFxuICBjcmVhdGVkOiBmdW5jdGlvbiBjcmVhdGVkKCkge1xuICAgIGlmICghdGhpcy5jdXJyZW50TmFtZSkge1xuICAgICAgdGhpcy5zZXRDdXJyZW50TmFtZSgnMCcpO1xuICAgIH1cblxuICAgIHRoaXMuJG9uKCd0YWItbmF2LXVwZGF0ZScsIHRoaXMuY2FsY1BhbmVJbnN0YW5jZXMuYmluZChudWxsLCB0cnVlKSk7XG4gIH0sXG4gIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7XG4gICAgdGhpcy5jYWxjUGFuZUluc3RhbmNlcygpO1xuICB9LFxuICB1cGRhdGVkOiBmdW5jdGlvbiB1cGRhdGVkKCkge1xuICAgIHRoaXMuY2FsY1BhbmVJbnN0YW5jZXMoKTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3RhYnMvc3JjL3RhYnMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY190YWJzdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHRhYnN2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdGFicy9zcmMvdGFicy52dWVcbnZhciB0YWJzX3JlbmRlciwgdGFic19zdGF0aWNSZW5kZXJGbnNcblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgdGFic19jb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIHNyY190YWJzdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICB0YWJzX3JlbmRlcixcbiAgdGFic19zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIHRhYnNfYXBpOyB9XG50YWJzX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvdGFicy9zcmMvdGFicy52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgdGFicyA9ICh0YWJzX2NvbXBvbmVudC5leHBvcnRzKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdGFicy9pbmRleC5qc1xuXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG50YWJzLmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG4gIFZ1ZS5jb21wb25lbnQodGFicy5uYW1lLCB0YWJzKTtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhY2thZ2VzX3RhYnMgPSAodGFicyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3RhYnMvc3JjL3RhYi1wYW5lLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD05MTQ1YTA3MCZcbnZhciB0YWJfcGFuZXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzkxNDVhMDcwX3JlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiAhX3ZtLmxhenkgfHwgX3ZtLmxvYWRlZCB8fCBfdm0uYWN0aXZlXG4gICAgPyBfYyhcbiAgICAgICAgXCJkaXZcIixcbiAgICAgICAge1xuICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgIHZhbHVlOiBfdm0uYWN0aXZlLFxuICAgICAgICAgICAgICBleHByZXNzaW9uOiBcImFjdGl2ZVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXSxcbiAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC10YWItcGFuZVwiLFxuICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICByb2xlOiBcInRhYnBhbmVsXCIsXG4gICAgICAgICAgICBcImFyaWEtaGlkZGVuXCI6ICFfdm0uYWN0aXZlLFxuICAgICAgICAgICAgaWQ6IFwicGFuZS1cIiArIF92bS5wYW5lTmFtZSxcbiAgICAgICAgICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IFwidGFiLVwiICsgX3ZtLnBhbmVOYW1lXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBbX3ZtLl90KFwiZGVmYXVsdFwiKV0sXG4gICAgICAgIDJcbiAgICAgIClcbiAgICA6IF92bS5fZSgpXG59XG52YXIgdGFiX3BhbmV2dWVfdHlwZV90ZW1wbGF0ZV9pZF85MTQ1YTA3MF9zdGF0aWNSZW5kZXJGbnMgPSBbXVxudGFiX3BhbmV2dWVfdHlwZV90ZW1wbGF0ZV9pZF85MTQ1YTA3MF9yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3RhYnMvc3JjL3RhYi1wYW5lLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD05MTQ1YTA3MCZcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvdGFicy9zcmMvdGFiLXBhbmUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgdGFiX3BhbmV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBuYW1lOiAnRWxUYWJQYW5lJyxcblxuICBjb21wb25lbnROYW1lOiAnRWxUYWJQYW5lJyxcblxuICBwcm9wczoge1xuICAgIGxhYmVsOiBTdHJpbmcsXG4gICAgbGFiZWxDb250ZW50OiBGdW5jdGlvbixcbiAgICBuYW1lOiBTdHJpbmcsXG4gICAgY2xvc2FibGU6IEJvb2xlYW4sXG4gICAgZGlzYWJsZWQ6IEJvb2xlYW4sXG4gICAgbGF6eTogQm9vbGVhblxuICB9LFxuXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGluZGV4OiBudWxsLFxuICAgICAgbG9hZGVkOiBmYWxzZVxuICAgIH07XG4gIH0sXG5cblxuICBjb21wdXRlZDoge1xuICAgIGlzQ2xvc2FibGU6IGZ1bmN0aW9uIGlzQ2xvc2FibGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jbG9zYWJsZSB8fCB0aGlzLiRwYXJlbnQuY2xvc2FibGU7XG4gICAgfSxcbiAgICBhY3RpdmU6IGZ1bmN0aW9uIGFjdGl2ZSgpIHtcbiAgICAgIHZhciBhY3RpdmUgPSB0aGlzLiRwYXJlbnQuY3VycmVudE5hbWUgPT09ICh0aGlzLm5hbWUgfHwgdGhpcy5pbmRleCk7XG4gICAgICBpZiAoYWN0aXZlKSB7XG4gICAgICAgIHRoaXMubG9hZGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY3RpdmU7XG4gICAgfSxcbiAgICBwYW5lTmFtZTogZnVuY3Rpb24gcGFuZU5hbWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5uYW1lIHx8IHRoaXMuaW5kZXg7XG4gICAgfVxuICB9LFxuXG4gIHVwZGF0ZWQ6IGZ1bmN0aW9uIHVwZGF0ZWQoKSB7XG4gICAgdGhpcy4kcGFyZW50LiRlbWl0KCd0YWItbmF2LXVwZGF0ZScpO1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdGFicy9zcmMvdGFiLXBhbmUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY190YWJfcGFuZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh0YWJfcGFuZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy90YWJzL3NyYy90YWItcGFuZS52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciB0YWJfcGFuZV9jb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIHNyY190YWJfcGFuZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgdGFiX3BhbmV2dWVfdHlwZV90ZW1wbGF0ZV9pZF85MTQ1YTA3MF9yZW5kZXIsXG4gIHRhYl9wYW5ldnVlX3R5cGVfdGVtcGxhdGVfaWRfOTE0NWEwNzBfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciB0YWJfcGFuZV9hcGk7IH1cbnRhYl9wYW5lX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvdGFicy9zcmMvdGFiLXBhbmUudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHRhYl9wYW5lID0gKHRhYl9wYW5lX2NvbXBvbmVudC5leHBvcnRzKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdGFiLXBhbmUvaW5kZXguanNcblxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xudGFiX3BhbmUuaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcbiAgVnVlLmNvbXBvbmVudCh0YWJfcGFuZS5uYW1lLCB0YWJfcGFuZSk7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc190YWJfcGFuZSA9ICh0YWJfcGFuZSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy90YWcvc3JjL3RhZy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHRhZ3Z1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG5hbWU6ICdFbFRhZycsXG4gIHByb3BzOiB7XG4gICAgdGV4dDogU3RyaW5nLFxuICAgIGNsb3NhYmxlOiBCb29sZWFuLFxuICAgIHR5cGU6IFN0cmluZyxcbiAgICBoaXQ6IEJvb2xlYW4sXG4gICAgZGlzYWJsZVRyYW5zaXRpb25zOiBCb29sZWFuLFxuICAgIGNvbG9yOiBTdHJpbmcsXG4gICAgc2l6ZTogU3RyaW5nLFxuICAgIGVmZmVjdDoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2xpZ2h0JyxcbiAgICAgIHZhbGlkYXRvcjogZnVuY3Rpb24gdmFsaWRhdG9yKHZhbCkge1xuICAgICAgICByZXR1cm4gWydkYXJrJywgJ2xpZ2h0JywgJ3BsYWluJ10uaW5kZXhPZih2YWwpICE9PSAtMTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICBoYW5kbGVDbG9zZTogZnVuY3Rpb24gaGFuZGxlQ2xvc2UoZXZlbnQpIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgdGhpcy4kZW1pdCgnY2xvc2UnLCBldmVudCk7XG4gICAgfSxcbiAgICBoYW5kbGVDbGljazogZnVuY3Rpb24gaGFuZGxlQ2xpY2soZXZlbnQpIHtcbiAgICAgIHRoaXMuJGVtaXQoJ2NsaWNrJywgZXZlbnQpO1xuICAgIH1cbiAgfSxcbiAgY29tcHV0ZWQ6IHtcbiAgICB0YWdTaXplOiBmdW5jdGlvbiB0YWdTaXplKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2l6ZSB8fCAodGhpcy4kRUxFTUVOVCB8fCB7fSkuc2l6ZTtcbiAgICB9XG4gIH0sXG4gIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKGgpIHtcbiAgICB2YXIgdHlwZSA9IHRoaXMudHlwZSxcbiAgICAgICAgdGFnU2l6ZSA9IHRoaXMudGFnU2l6ZSxcbiAgICAgICAgaGl0ID0gdGhpcy5oaXQsXG4gICAgICAgIGVmZmVjdCA9IHRoaXMuZWZmZWN0O1xuXG4gICAgdmFyIGNsYXNzZXMgPSBbJ2VsLXRhZycsIHR5cGUgPyAnZWwtdGFnLS0nICsgdHlwZSA6ICcnLCB0YWdTaXplID8gJ2VsLXRhZy0tJyArIHRhZ1NpemUgOiAnJywgZWZmZWN0ID8gJ2VsLXRhZy0tJyArIGVmZmVjdCA6ICcnLCBoaXQgJiYgJ2lzLWhpdCddO1xuICAgIHZhciB0YWdFbCA9IGgoXG4gICAgICAnc3BhbicsXG4gICAgICB7XG4gICAgICAgICdjbGFzcyc6IGNsYXNzZXMsXG4gICAgICAgIHN0eWxlOiB7IGJhY2tncm91bmRDb2xvcjogdGhpcy5jb2xvciB9LFxuICAgICAgICBvbjoge1xuICAgICAgICAgICdjbGljayc6IHRoaXMuaGFuZGxlQ2xpY2tcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFt0aGlzLiRzbG90cy5kZWZhdWx0LCB0aGlzLmNsb3NhYmxlICYmIGgoJ2knLCB7ICdjbGFzcyc6ICdlbC10YWdfX2Nsb3NlIGVsLWljb24tY2xvc2UnLCBvbjoge1xuICAgICAgICAgICdjbGljayc6IHRoaXMuaGFuZGxlQ2xvc2VcbiAgICAgICAgfVxuICAgICAgfSldXG4gICAgKTtcblxuICAgIHJldHVybiB0aGlzLmRpc2FibGVUcmFuc2l0aW9ucyA/IHRhZ0VsIDogaChcbiAgICAgICd0cmFuc2l0aW9uJyxcbiAgICAgIHtcbiAgICAgICAgYXR0cnM6IHsgbmFtZTogJ2VsLXpvb20taW4tY2VudGVyJyB9XG4gICAgICB9LFxuICAgICAgW3RhZ0VsXVxuICAgICk7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy90YWcvc3JjL3RhZy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX3RhZ3Z1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh0YWd2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdGFnL3NyYy90YWcudnVlXG52YXIgdGFnX3JlbmRlciwgdGFnX3N0YXRpY1JlbmRlckZuc1xuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciB0YWdfY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBzcmNfdGFndnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICB0YWdfcmVuZGVyLFxuICB0YWdfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciB0YWdfYXBpOyB9XG50YWdfY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy90YWcvc3JjL3RhZy52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX3RhZyA9ICh0YWdfY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy90YWcvaW5kZXguanNcblxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuc3JjX3RhZy5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuICBWdWUuY29tcG9uZW50KHNyY190YWcubmFtZSwgc3JjX3RhZyk7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc190YWcgPSAoc3JjX3RhZyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3RyZWUvc3JjL3RyZWUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTU0NzU3NWE2JlxudmFyIHRyZWV2dWVfdHlwZV90ZW1wbGF0ZV9pZF81NDc1NzVhNl9yZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICB7XG4gICAgICBzdGF0aWNDbGFzczogXCJlbC10cmVlXCIsXG4gICAgICBjbGFzczoge1xuICAgICAgICBcImVsLXRyZWUtLWhpZ2hsaWdodC1jdXJyZW50XCI6IF92bS5oaWdobGlnaHRDdXJyZW50LFxuICAgICAgICBcImlzLWRyYWdnaW5nXCI6ICEhX3ZtLmRyYWdTdGF0ZS5kcmFnZ2luZ05vZGUsXG4gICAgICAgIFwiaXMtZHJvcC1ub3QtYWxsb3dcIjogIV92bS5kcmFnU3RhdGUuYWxsb3dEcm9wLFxuICAgICAgICBcImlzLWRyb3AtaW5uZXJcIjogX3ZtLmRyYWdTdGF0ZS5kcm9wVHlwZSA9PT0gXCJpbm5lclwiXG4gICAgICB9LFxuICAgICAgYXR0cnM6IHsgcm9sZTogXCJ0cmVlXCIgfVxuICAgIH0sXG4gICAgW1xuICAgICAgX3ZtLl9sKF92bS5yb290LmNoaWxkTm9kZXMsIGZ1bmN0aW9uKGNoaWxkKSB7XG4gICAgICAgIHJldHVybiBfYyhcImVsLXRyZWUtbm9kZVwiLCB7XG4gICAgICAgICAga2V5OiBfdm0uZ2V0Tm9kZUtleShjaGlsZCksXG4gICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgIG5vZGU6IGNoaWxkLFxuICAgICAgICAgICAgcHJvcHM6IF92bS5wcm9wcyxcbiAgICAgICAgICAgIFwicmVuZGVyLWFmdGVyLWV4cGFuZFwiOiBfdm0ucmVuZGVyQWZ0ZXJFeHBhbmQsXG4gICAgICAgICAgICBcInNob3ctY2hlY2tib3hcIjogX3ZtLnNob3dDaGVja2JveCxcbiAgICAgICAgICAgIFwicmVuZGVyLWNvbnRlbnRcIjogX3ZtLnJlbmRlckNvbnRlbnRcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uOiB7IFwibm9kZS1leHBhbmRcIjogX3ZtLmhhbmRsZU5vZGVFeHBhbmQgfVxuICAgICAgICB9KVxuICAgICAgfSksXG4gICAgICBfdm0uaXNFbXB0eVxuICAgICAgICA/IF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiZWwtdHJlZV9fZW1wdHktYmxvY2tcIiB9LCBbXG4gICAgICAgICAgICBfYyhcInNwYW5cIiwgeyBzdGF0aWNDbGFzczogXCJlbC10cmVlX19lbXB0eS10ZXh0XCIgfSwgW1xuICAgICAgICAgICAgICBfdm0uX3YoX3ZtLl9zKF92bS5lbXB0eVRleHQpKVxuICAgICAgICAgICAgXSlcbiAgICAgICAgICBdKVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgX2MoXCJkaXZcIiwge1xuICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgdmFsdWU6IF92bS5kcmFnU3RhdGUuc2hvd0Ryb3BJbmRpY2F0b3IsXG4gICAgICAgICAgICBleHByZXNzaW9uOiBcImRyYWdTdGF0ZS5zaG93RHJvcEluZGljYXRvclwiXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICByZWY6IFwiZHJvcEluZGljYXRvclwiLFxuICAgICAgICBzdGF0aWNDbGFzczogXCJlbC10cmVlX19kcm9wLWluZGljYXRvclwiXG4gICAgICB9KVxuICAgIF0sXG4gICAgMlxuICApXG59XG52YXIgdHJlZXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzU0NzU3NWE2X3N0YXRpY1JlbmRlckZucyA9IFtdXG50cmVldnVlX3R5cGVfdGVtcGxhdGVfaWRfNTQ3NTc1YTZfcmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy90cmVlL3NyYy90cmVlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01NDc1NzVhNiZcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy90cmVlL3NyYy9tb2RlbC91dGlsLmpzXG52YXIgTk9ERV9LRVkgPSAnJHRyZWVOb2RlSWQnO1xuXG52YXIgbWFya05vZGVEYXRhID0gZnVuY3Rpb24gbWFya05vZGVEYXRhKG5vZGUsIGRhdGEpIHtcbiAgaWYgKCFkYXRhIHx8IGRhdGFbTk9ERV9LRVldKSByZXR1cm47XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkYXRhLCBOT0RFX0tFWSwge1xuICAgIHZhbHVlOiBub2RlLmlkLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pO1xufTtcblxudmFyIHV0aWxfZ2V0Tm9kZUtleSA9IGZ1bmN0aW9uIGdldE5vZGVLZXkoa2V5LCBkYXRhKSB7XG4gIGlmICgha2V5KSByZXR1cm4gZGF0YVtOT0RFX0tFWV07XG4gIHJldHVybiBkYXRhW2tleV07XG59O1xuXG52YXIgZmluZE5lYXJlc3RDb21wb25lbnQgPSBmdW5jdGlvbiBmaW5kTmVhcmVzdENvbXBvbmVudChlbGVtZW50LCBjb21wb25lbnROYW1lKSB7XG4gIHZhciB0YXJnZXQgPSBlbGVtZW50O1xuICB3aGlsZSAodGFyZ2V0ICYmIHRhcmdldC50YWdOYW1lICE9PSAnQk9EWScpIHtcbiAgICBpZiAodGFyZ2V0Ll9fdnVlX18gJiYgdGFyZ2V0Ll9fdnVlX18uJG9wdGlvbnMubmFtZSA9PT0gY29tcG9uZW50TmFtZSkge1xuICAgICAgcmV0dXJuIHRhcmdldC5fX3Z1ZV9fO1xuICAgIH1cbiAgICB0YXJnZXQgPSB0YXJnZXQucGFyZW50Tm9kZTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3RyZWUvc3JjL21vZGVsL25vZGUuanNcbnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KCk7XG5cbmZ1bmN0aW9uIG5vZGVfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5cblxuXG5cbnZhciBnZXRDaGlsZFN0YXRlID0gZnVuY3Rpb24gZ2V0Q2hpbGRTdGF0ZShub2RlKSB7XG4gIHZhciBhbGwgPSB0cnVlO1xuICB2YXIgbm9uZSA9IHRydWU7XG4gIHZhciBhbGxXaXRob3V0RGlzYWJsZSA9IHRydWU7XG4gIGZvciAodmFyIGkgPSAwLCBqID0gbm9kZS5sZW5ndGg7IGkgPCBqOyBpKyspIHtcbiAgICB2YXIgbiA9IG5vZGVbaV07XG4gICAgaWYgKG4uY2hlY2tlZCAhPT0gdHJ1ZSB8fCBuLmluZGV0ZXJtaW5hdGUpIHtcbiAgICAgIGFsbCA9IGZhbHNlO1xuICAgICAgaWYgKCFuLmRpc2FibGVkKSB7XG4gICAgICAgIGFsbFdpdGhvdXREaXNhYmxlID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChuLmNoZWNrZWQgIT09IGZhbHNlIHx8IG4uaW5kZXRlcm1pbmF0ZSkge1xuICAgICAgbm9uZSA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7IGFsbDogYWxsLCBub25lOiBub25lLCBhbGxXaXRob3V0RGlzYWJsZTogYWxsV2l0aG91dERpc2FibGUsIGhhbGY6ICFhbGwgJiYgIW5vbmUgfTtcbn07XG5cbnZhciByZUluaXRDaGVja2VkID0gZnVuY3Rpb24gcmVJbml0Q2hlY2tlZChub2RlKSB7XG4gIGlmIChub2RlLmNoaWxkTm9kZXMubGVuZ3RoID09PSAwIHx8IG5vZGUubG9hZGluZykgcmV0dXJuO1xuXG4gIHZhciBfZ2V0Q2hpbGRTdGF0ZSA9IGdldENoaWxkU3RhdGUobm9kZS5jaGlsZE5vZGVzKSxcbiAgICAgIGFsbCA9IF9nZXRDaGlsZFN0YXRlLmFsbCxcbiAgICAgIG5vbmUgPSBfZ2V0Q2hpbGRTdGF0ZS5ub25lLFxuICAgICAgaGFsZiA9IF9nZXRDaGlsZFN0YXRlLmhhbGY7XG5cbiAgaWYgKGFsbCkge1xuICAgIG5vZGUuY2hlY2tlZCA9IHRydWU7XG4gICAgbm9kZS5pbmRldGVybWluYXRlID0gZmFsc2U7XG4gIH0gZWxzZSBpZiAoaGFsZikge1xuICAgIG5vZGUuY2hlY2tlZCA9IGZhbHNlO1xuICAgIG5vZGUuaW5kZXRlcm1pbmF0ZSA9IHRydWU7XG4gIH0gZWxzZSBpZiAobm9uZSkge1xuICAgIG5vZGUuY2hlY2tlZCA9IGZhbHNlO1xuICAgIG5vZGUuaW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xuICB9XG5cbiAgdmFyIHBhcmVudCA9IG5vZGUucGFyZW50O1xuICBpZiAoIXBhcmVudCB8fCBwYXJlbnQubGV2ZWwgPT09IDApIHJldHVybjtcblxuICBpZiAoIW5vZGUuc3RvcmUuY2hlY2tTdHJpY3RseSkge1xuICAgIHJlSW5pdENoZWNrZWQocGFyZW50KTtcbiAgfVxufTtcblxudmFyIGdldFByb3BlcnR5RnJvbURhdGEgPSBmdW5jdGlvbiBnZXRQcm9wZXJ0eUZyb21EYXRhKG5vZGUsIHByb3ApIHtcbiAgdmFyIHByb3BzID0gbm9kZS5zdG9yZS5wcm9wcztcbiAgdmFyIGRhdGEgPSBub2RlLmRhdGEgfHwge307XG4gIHZhciBjb25maWcgPSBwcm9wc1twcm9wXTtcblxuICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBjb25maWcoZGF0YSwgbm9kZSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZGF0YVtjb25maWddO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBjb25maWcgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgdmFyIGRhdGFQcm9wID0gZGF0YVtwcm9wXTtcbiAgICByZXR1cm4gZGF0YVByb3AgPT09IHVuZGVmaW5lZCA/ICcnIDogZGF0YVByb3A7XG4gIH1cbn07XG5cbnZhciBub2RlSWRTZWVkID0gMDtcblxudmFyIG5vZGVfTm9kZSA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gTm9kZShvcHRpb25zKSB7XG4gICAgbm9kZV9jbGFzc0NhbGxDaGVjayh0aGlzLCBOb2RlKTtcblxuICAgIHRoaXMuaWQgPSBub2RlSWRTZWVkKys7XG4gICAgdGhpcy50ZXh0ID0gbnVsbDtcbiAgICB0aGlzLmNoZWNrZWQgPSBmYWxzZTtcbiAgICB0aGlzLmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICB0aGlzLmRhdGEgPSBudWxsO1xuICAgIHRoaXMuZXhwYW5kZWQgPSBmYWxzZTtcbiAgICB0aGlzLnBhcmVudCA9IG51bGw7XG4gICAgdGhpcy52aXNpYmxlID0gdHJ1ZTtcbiAgICB0aGlzLmlzQ3VycmVudCA9IGZhbHNlO1xuXG4gICAgZm9yICh2YXIgbmFtZSBpbiBvcHRpb25zKSB7XG4gICAgICBpZiAob3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgICB0aGlzW25hbWVdID0gb3B0aW9uc1tuYW1lXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBpbnRlcm5hbFxuICAgIHRoaXMubGV2ZWwgPSAwO1xuICAgIHRoaXMubG9hZGVkID0gZmFsc2U7XG4gICAgdGhpcy5jaGlsZE5vZGVzID0gW107XG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5wYXJlbnQpIHtcbiAgICAgIHRoaXMubGV2ZWwgPSB0aGlzLnBhcmVudC5sZXZlbCArIDE7XG4gICAgfVxuXG4gICAgdmFyIHN0b3JlID0gdGhpcy5zdG9yZTtcbiAgICBpZiAoIXN0b3JlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1tOb2RlXXN0b3JlIGlzIHJlcXVpcmVkIScpO1xuICAgIH1cbiAgICBzdG9yZS5yZWdpc3Rlck5vZGUodGhpcyk7XG5cbiAgICB2YXIgcHJvcHMgPSBzdG9yZS5wcm9wcztcbiAgICBpZiAocHJvcHMgJiYgdHlwZW9mIHByb3BzLmlzTGVhZiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHZhciBpc0xlYWYgPSBnZXRQcm9wZXJ0eUZyb21EYXRhKHRoaXMsICdpc0xlYWYnKTtcbiAgICAgIGlmICh0eXBlb2YgaXNMZWFmID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgdGhpcy5pc0xlYWZCeVVzZXIgPSBpc0xlYWY7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN0b3JlLmxhenkgIT09IHRydWUgJiYgdGhpcy5kYXRhKSB7XG4gICAgICB0aGlzLnNldERhdGEodGhpcy5kYXRhKTtcblxuICAgICAgaWYgKHN0b3JlLmRlZmF1bHRFeHBhbmRBbGwpIHtcbiAgICAgICAgdGhpcy5leHBhbmRlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLmxldmVsID4gMCAmJiBzdG9yZS5sYXp5ICYmIHN0b3JlLmRlZmF1bHRFeHBhbmRBbGwpIHtcbiAgICAgIHRoaXMuZXhwYW5kKCk7XG4gICAgfVxuICAgIGlmICghQXJyYXkuaXNBcnJheSh0aGlzLmRhdGEpKSB7XG4gICAgICBtYXJrTm9kZURhdGEodGhpcywgdGhpcy5kYXRhKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmRhdGEpIHJldHVybjtcbiAgICB2YXIgZGVmYXVsdEV4cGFuZGVkS2V5cyA9IHN0b3JlLmRlZmF1bHRFeHBhbmRlZEtleXM7XG4gICAgdmFyIGtleSA9IHN0b3JlLmtleTtcbiAgICBpZiAoa2V5ICYmIGRlZmF1bHRFeHBhbmRlZEtleXMgJiYgZGVmYXVsdEV4cGFuZGVkS2V5cy5pbmRleE9mKHRoaXMua2V5KSAhPT0gLTEpIHtcbiAgICAgIHRoaXMuZXhwYW5kKG51bGwsIHN0b3JlLmF1dG9FeHBhbmRQYXJlbnQpO1xuICAgIH1cblxuICAgIGlmIChrZXkgJiYgc3RvcmUuY3VycmVudE5vZGVLZXkgIT09IHVuZGVmaW5lZCAmJiB0aGlzLmtleSA9PT0gc3RvcmUuY3VycmVudE5vZGVLZXkpIHtcbiAgICAgIHN0b3JlLmN1cnJlbnROb2RlID0gdGhpcztcbiAgICAgIHN0b3JlLmN1cnJlbnROb2RlLmlzQ3VycmVudCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHN0b3JlLmxhenkpIHtcbiAgICAgIHN0b3JlLl9pbml0RGVmYXVsdENoZWNrZWROb2RlKHRoaXMpO1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlTGVhZlN0YXRlKCk7XG4gIH1cblxuICBOb2RlLnByb3RvdHlwZS5zZXREYXRhID0gZnVuY3Rpb24gc2V0RGF0YShkYXRhKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICBtYXJrTm9kZURhdGEodGhpcywgZGF0YSk7XG4gICAgfVxuXG4gICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICB0aGlzLmNoaWxkTm9kZXMgPSBbXTtcblxuICAgIHZhciBjaGlsZHJlbiA9IHZvaWQgMDtcbiAgICBpZiAodGhpcy5sZXZlbCA9PT0gMCAmJiB0aGlzLmRhdGEgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgY2hpbGRyZW4gPSB0aGlzLmRhdGE7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNoaWxkcmVuID0gZ2V0UHJvcGVydHlGcm9tRGF0YSh0aGlzLCAnY2hpbGRyZW4nKSB8fCBbXTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7IGkrKykge1xuICAgICAgdGhpcy5pbnNlcnRDaGlsZCh7IGRhdGE6IGNoaWxkcmVuW2ldIH0pO1xuICAgIH1cbiAgfTtcblxuICBOb2RlLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uIGNvbnRhaW5zKHRhcmdldCkge1xuICAgIHZhciBkZWVwID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB0cnVlO1xuXG4gICAgdmFyIHdhbGsgPSBmdW5jdGlvbiB3YWxrKHBhcmVudCkge1xuICAgICAgdmFyIGNoaWxkcmVuID0gcGFyZW50LmNoaWxkTm9kZXMgfHwgW107XG4gICAgICB2YXIgcmVzdWx0ID0gZmFsc2U7XG4gICAgICBmb3IgKHZhciBpID0gMCwgaiA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7IGkrKykge1xuICAgICAgICB2YXIgY2hpbGQgPSBjaGlsZHJlbltpXTtcbiAgICAgICAgaWYgKGNoaWxkID09PSB0YXJnZXQgfHwgZGVlcCAmJiB3YWxrKGNoaWxkKSkge1xuICAgICAgICAgIHJlc3VsdCA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgIHJldHVybiB3YWxrKHRoaXMpO1xuICB9O1xuXG4gIE5vZGUucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uIHJlbW92ZSgpIHtcbiAgICB2YXIgcGFyZW50ID0gdGhpcy5wYXJlbnQ7XG4gICAgaWYgKHBhcmVudCkge1xuICAgICAgcGFyZW50LnJlbW92ZUNoaWxkKHRoaXMpO1xuICAgIH1cbiAgfTtcblxuICBOb2RlLnByb3RvdHlwZS5pbnNlcnRDaGlsZCA9IGZ1bmN0aW9uIGluc2VydENoaWxkKGNoaWxkLCBpbmRleCwgYmF0Y2gpIHtcbiAgICBpZiAoIWNoaWxkKSB0aHJvdyBuZXcgRXJyb3IoJ2luc2VydENoaWxkIGVycm9yOiBjaGlsZCBpcyByZXF1aXJlZC4nKTtcblxuICAgIGlmICghKGNoaWxkIGluc3RhbmNlb2YgTm9kZSkpIHtcbiAgICAgIGlmICghYmF0Y2gpIHtcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gdGhpcy5nZXRDaGlsZHJlbih0cnVlKSB8fCBbXTtcbiAgICAgICAgaWYgKGNoaWxkcmVuLmluZGV4T2YoY2hpbGQuZGF0YSkgPT09IC0xKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBpbmRleCA9PT0gJ3VuZGVmaW5lZCcgfHwgaW5kZXggPCAwKSB7XG4gICAgICAgICAgICBjaGlsZHJlbi5wdXNoKGNoaWxkLmRhdGEpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDAsIGNoaWxkLmRhdGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbWVyZ2VfZGVmYXVsdCgpKGNoaWxkLCB7XG4gICAgICAgIHBhcmVudDogdGhpcyxcbiAgICAgICAgc3RvcmU6IHRoaXMuc3RvcmVcbiAgICAgIH0pO1xuICAgICAgY2hpbGQgPSBuZXcgTm9kZShjaGlsZCk7XG4gICAgfVxuXG4gICAgY2hpbGQubGV2ZWwgPSB0aGlzLmxldmVsICsgMTtcblxuICAgIGlmICh0eXBlb2YgaW5kZXggPT09ICd1bmRlZmluZWQnIHx8IGluZGV4IDwgMCkge1xuICAgICAgdGhpcy5jaGlsZE5vZGVzLnB1c2goY2hpbGQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNoaWxkTm9kZXMuc3BsaWNlKGluZGV4LCAwLCBjaGlsZCk7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVMZWFmU3RhdGUoKTtcbiAgfTtcblxuICBOb2RlLnByb3RvdHlwZS5pbnNlcnRCZWZvcmUgPSBmdW5jdGlvbiBpbnNlcnRCZWZvcmUoY2hpbGQsIHJlZikge1xuICAgIHZhciBpbmRleCA9IHZvaWQgMDtcbiAgICBpZiAocmVmKSB7XG4gICAgICBpbmRleCA9IHRoaXMuY2hpbGROb2Rlcy5pbmRleE9mKHJlZik7XG4gICAgfVxuICAgIHRoaXMuaW5zZXJ0Q2hpbGQoY2hpbGQsIGluZGV4KTtcbiAgfTtcblxuICBOb2RlLnByb3RvdHlwZS5pbnNlcnRBZnRlciA9IGZ1bmN0aW9uIGluc2VydEFmdGVyKGNoaWxkLCByZWYpIHtcbiAgICB2YXIgaW5kZXggPSB2b2lkIDA7XG4gICAgaWYgKHJlZikge1xuICAgICAgaW5kZXggPSB0aGlzLmNoaWxkTm9kZXMuaW5kZXhPZihyZWYpO1xuICAgICAgaWYgKGluZGV4ICE9PSAtMSkgaW5kZXggKz0gMTtcbiAgICB9XG4gICAgdGhpcy5pbnNlcnRDaGlsZChjaGlsZCwgaW5kZXgpO1xuICB9O1xuXG4gIE5vZGUucHJvdG90eXBlLnJlbW92ZUNoaWxkID0gZnVuY3Rpb24gcmVtb3ZlQ2hpbGQoY2hpbGQpIHtcbiAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLmdldENoaWxkcmVuKCkgfHwgW107XG4gICAgdmFyIGRhdGFJbmRleCA9IGNoaWxkcmVuLmluZGV4T2YoY2hpbGQuZGF0YSk7XG4gICAgaWYgKGRhdGFJbmRleCA+IC0xKSB7XG4gICAgICBjaGlsZHJlbi5zcGxpY2UoZGF0YUluZGV4LCAxKTtcbiAgICB9XG5cbiAgICB2YXIgaW5kZXggPSB0aGlzLmNoaWxkTm9kZXMuaW5kZXhPZihjaGlsZCk7XG5cbiAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgdGhpcy5zdG9yZSAmJiB0aGlzLnN0b3JlLmRlcmVnaXN0ZXJOb2RlKGNoaWxkKTtcbiAgICAgIGNoaWxkLnBhcmVudCA9IG51bGw7XG4gICAgICB0aGlzLmNoaWxkTm9kZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZUxlYWZTdGF0ZSgpO1xuICB9O1xuXG4gIE5vZGUucHJvdG90eXBlLnJlbW92ZUNoaWxkQnlEYXRhID0gZnVuY3Rpb24gcmVtb3ZlQ2hpbGRCeURhdGEoZGF0YSkge1xuICAgIHZhciB0YXJnZXROb2RlID0gbnVsbDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5jaGlsZE5vZGVzW2ldLmRhdGEgPT09IGRhdGEpIHtcbiAgICAgICAgdGFyZ2V0Tm9kZSA9IHRoaXMuY2hpbGROb2Rlc1tpXTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRhcmdldE5vZGUpIHtcbiAgICAgIHRoaXMucmVtb3ZlQ2hpbGQodGFyZ2V0Tm9kZSk7XG4gICAgfVxuICB9O1xuXG4gIE5vZGUucHJvdG90eXBlLmV4cGFuZCA9IGZ1bmN0aW9uIGV4cGFuZChjYWxsYmFjaywgZXhwYW5kUGFyZW50KSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHZhciBkb25lID0gZnVuY3Rpb24gZG9uZSgpIHtcbiAgICAgIGlmIChleHBhbmRQYXJlbnQpIHtcbiAgICAgICAgdmFyIHBhcmVudCA9IF90aGlzLnBhcmVudDtcbiAgICAgICAgd2hpbGUgKHBhcmVudC5sZXZlbCA+IDApIHtcbiAgICAgICAgICBwYXJlbnQuZXhwYW5kZWQgPSB0cnVlO1xuICAgICAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIF90aGlzLmV4cGFuZGVkID0gdHJ1ZTtcbiAgICAgIGlmIChjYWxsYmFjaykgY2FsbGJhY2soKTtcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuc2hvdWxkTG9hZERhdGEoKSkge1xuICAgICAgdGhpcy5sb2FkRGF0YShmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICBpZiAoZGF0YSBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICAgICAgaWYgKF90aGlzLmNoZWNrZWQpIHtcbiAgICAgICAgICAgIF90aGlzLnNldENoZWNrZWQodHJ1ZSwgdHJ1ZSk7XG4gICAgICAgICAgfSBlbHNlIGlmICghX3RoaXMuc3RvcmUuY2hlY2tTdHJpY3RseSkge1xuICAgICAgICAgICAgcmVJbml0Q2hlY2tlZChfdGhpcyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRvbmUoKTtcbiAgICB9XG4gIH07XG5cbiAgTm9kZS5wcm90b3R5cGUuZG9DcmVhdGVDaGlsZHJlbiA9IGZ1bmN0aW9uIGRvQ3JlYXRlQ2hpbGRyZW4oYXJyYXkpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIHZhciBkZWZhdWx0UHJvcHMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuXG4gICAgYXJyYXkuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgX3RoaXMyLmluc2VydENoaWxkKG1lcmdlX2RlZmF1bHQoKSh7IGRhdGE6IGl0ZW0gfSwgZGVmYXVsdFByb3BzKSwgdW5kZWZpbmVkLCB0cnVlKTtcbiAgICB9KTtcbiAgfTtcblxuICBOb2RlLnByb3RvdHlwZS5jb2xsYXBzZSA9IGZ1bmN0aW9uIGNvbGxhcHNlKCkge1xuICAgIHRoaXMuZXhwYW5kZWQgPSBmYWxzZTtcbiAgfTtcblxuICBOb2RlLnByb3RvdHlwZS5zaG91bGRMb2FkRGF0YSA9IGZ1bmN0aW9uIHNob3VsZExvYWREYXRhKCkge1xuICAgIHJldHVybiB0aGlzLnN0b3JlLmxhenkgPT09IHRydWUgJiYgdGhpcy5zdG9yZS5sb2FkICYmICF0aGlzLmxvYWRlZDtcbiAgfTtcblxuICBOb2RlLnByb3RvdHlwZS51cGRhdGVMZWFmU3RhdGUgPSBmdW5jdGlvbiB1cGRhdGVMZWFmU3RhdGUoKSB7XG4gICAgaWYgKHRoaXMuc3RvcmUubGF6eSA9PT0gdHJ1ZSAmJiB0aGlzLmxvYWRlZCAhPT0gdHJ1ZSAmJiB0eXBlb2YgdGhpcy5pc0xlYWZCeVVzZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aGlzLmlzTGVhZiA9IHRoaXMuaXNMZWFmQnlVc2VyO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgY2hpbGROb2RlcyA9IHRoaXMuY2hpbGROb2RlcztcbiAgICBpZiAoIXRoaXMuc3RvcmUubGF6eSB8fCB0aGlzLnN0b3JlLmxhenkgPT09IHRydWUgJiYgdGhpcy5sb2FkZWQgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuaXNMZWFmID0gIWNoaWxkTm9kZXMgfHwgY2hpbGROb2Rlcy5sZW5ndGggPT09IDA7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuaXNMZWFmID0gZmFsc2U7XG4gIH07XG5cbiAgTm9kZS5wcm90b3R5cGUuc2V0Q2hlY2tlZCA9IGZ1bmN0aW9uIHNldENoZWNrZWQodmFsdWUsIGRlZXAsIHJlY3Vyc2lvbiwgcGFzc1ZhbHVlKSB7XG4gICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICB0aGlzLmluZGV0ZXJtaW5hdGUgPSB2YWx1ZSA9PT0gJ2hhbGYnO1xuICAgIHRoaXMuY2hlY2tlZCA9IHZhbHVlID09PSB0cnVlO1xuXG4gICAgaWYgKHRoaXMuc3RvcmUuY2hlY2tTdHJpY3RseSkgcmV0dXJuO1xuXG4gICAgaWYgKCEodGhpcy5zaG91bGRMb2FkRGF0YSgpICYmICF0aGlzLnN0b3JlLmNoZWNrRGVzY2VuZGFudHMpKSB7XG4gICAgICB2YXIgX2dldENoaWxkU3RhdGUyID0gZ2V0Q2hpbGRTdGF0ZSh0aGlzLmNoaWxkTm9kZXMpLFxuICAgICAgICAgIGFsbCA9IF9nZXRDaGlsZFN0YXRlMi5hbGwsXG4gICAgICAgICAgYWxsV2l0aG91dERpc2FibGUgPSBfZ2V0Q2hpbGRTdGF0ZTIuYWxsV2l0aG91dERpc2FibGU7XG5cbiAgICAgIGlmICghdGhpcy5pc0xlYWYgJiYgIWFsbCAmJiBhbGxXaXRob3V0RGlzYWJsZSkge1xuICAgICAgICB0aGlzLmNoZWNrZWQgPSBmYWxzZTtcbiAgICAgICAgdmFsdWUgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgdmFyIGhhbmRsZURlc2NlbmRhbnRzID0gZnVuY3Rpb24gaGFuZGxlRGVzY2VuZGFudHMoKSB7XG4gICAgICAgIGlmIChkZWVwKSB7XG4gICAgICAgICAgdmFyIGNoaWxkTm9kZXMgPSBfdGhpczMuY2hpbGROb2RlcztcbiAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaiA9IGNoaWxkTm9kZXMubGVuZ3RoOyBpIDwgajsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgY2hpbGQgPSBjaGlsZE5vZGVzW2ldO1xuICAgICAgICAgICAgcGFzc1ZhbHVlID0gcGFzc1ZhbHVlIHx8IHZhbHVlICE9PSBmYWxzZTtcbiAgICAgICAgICAgIHZhciBpc0NoZWNrID0gY2hpbGQuZGlzYWJsZWQgPyBjaGlsZC5jaGVja2VkIDogcGFzc1ZhbHVlO1xuICAgICAgICAgICAgY2hpbGQuc2V0Q2hlY2tlZChpc0NoZWNrLCBkZWVwLCB0cnVlLCBwYXNzVmFsdWUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBfZ2V0Q2hpbGRTdGF0ZTMgPSBnZXRDaGlsZFN0YXRlKGNoaWxkTm9kZXMpLFxuICAgICAgICAgICAgICBoYWxmID0gX2dldENoaWxkU3RhdGUzLmhhbGYsXG4gICAgICAgICAgICAgIF9hbGwgPSBfZ2V0Q2hpbGRTdGF0ZTMuYWxsO1xuXG4gICAgICAgICAgaWYgKCFfYWxsKSB7XG4gICAgICAgICAgICBfdGhpczMuY2hlY2tlZCA9IF9hbGw7XG4gICAgICAgICAgICBfdGhpczMuaW5kZXRlcm1pbmF0ZSA9IGhhbGY7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBpZiAodGhpcy5zaG91bGRMb2FkRGF0YSgpKSB7XG4gICAgICAgIC8vIE9ubHkgd29yayBvbiBsYXp5IGxvYWQgZGF0YS5cbiAgICAgICAgdGhpcy5sb2FkRGF0YShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaGFuZGxlRGVzY2VuZGFudHMoKTtcbiAgICAgICAgICByZUluaXRDaGVja2VkKF90aGlzMyk7XG4gICAgICAgIH0sIHtcbiAgICAgICAgICBjaGVja2VkOiB2YWx1ZSAhPT0gZmFsc2VcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhhbmRsZURlc2NlbmRhbnRzKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHBhcmVudCA9IHRoaXMucGFyZW50O1xuICAgIGlmICghcGFyZW50IHx8IHBhcmVudC5sZXZlbCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgaWYgKCFyZWN1cnNpb24pIHtcbiAgICAgIHJlSW5pdENoZWNrZWQocGFyZW50KTtcbiAgICB9XG4gIH07XG5cbiAgTm9kZS5wcm90b3R5cGUuZ2V0Q2hpbGRyZW4gPSBmdW5jdGlvbiBnZXRDaGlsZHJlbigpIHtcbiAgICB2YXIgZm9yY2VJbml0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBmYWxzZTtcbiAgICAvLyB0aGlzIGlzIGRhdGFcbiAgICBpZiAodGhpcy5sZXZlbCA9PT0gMCkgcmV0dXJuIHRoaXMuZGF0YTtcbiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YTtcbiAgICBpZiAoIWRhdGEpIHJldHVybiBudWxsO1xuXG4gICAgdmFyIHByb3BzID0gdGhpcy5zdG9yZS5wcm9wcztcbiAgICB2YXIgY2hpbGRyZW4gPSAnY2hpbGRyZW4nO1xuICAgIGlmIChwcm9wcykge1xuICAgICAgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbiB8fCAnY2hpbGRyZW4nO1xuICAgIH1cblxuICAgIGlmIChkYXRhW2NoaWxkcmVuXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBkYXRhW2NoaWxkcmVuXSA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGZvcmNlSW5pdCAmJiAhZGF0YVtjaGlsZHJlbl0pIHtcbiAgICAgIGRhdGFbY2hpbGRyZW5dID0gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGFbY2hpbGRyZW5dO1xuICB9O1xuXG4gIE5vZGUucHJvdG90eXBlLnVwZGF0ZUNoaWxkcmVuID0gZnVuY3Rpb24gdXBkYXRlQ2hpbGRyZW4oKSB7XG4gICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cbiAgICB2YXIgbmV3RGF0YSA9IHRoaXMuZ2V0Q2hpbGRyZW4oKSB8fCBbXTtcbiAgICB2YXIgb2xkRGF0YSA9IHRoaXMuY2hpbGROb2Rlcy5tYXAoZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgIHJldHVybiBub2RlLmRhdGE7XG4gICAgfSk7XG5cbiAgICB2YXIgbmV3RGF0YU1hcCA9IHt9O1xuICAgIHZhciBuZXdOb2RlcyA9IFtdO1xuXG4gICAgbmV3RGF0YS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtLCBpbmRleCkge1xuICAgICAgdmFyIGtleSA9IGl0ZW1bTk9ERV9LRVldO1xuICAgICAgdmFyIGlzTm9kZUV4aXN0cyA9ICEha2V5ICYmIE9iamVjdCh1dGlsX1tcImFycmF5RmluZEluZGV4XCJdKShvbGREYXRhLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICByZXR1cm4gZGF0YVtOT0RFX0tFWV0gPT09IGtleTtcbiAgICAgIH0pID49IDA7XG4gICAgICBpZiAoaXNOb2RlRXhpc3RzKSB7XG4gICAgICAgIG5ld0RhdGFNYXBba2V5XSA9IHsgaW5kZXg6IGluZGV4LCBkYXRhOiBpdGVtIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdOb2Rlcy5wdXNoKHsgaW5kZXg6IGluZGV4LCBkYXRhOiBpdGVtIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKCF0aGlzLnN0b3JlLmxhenkpIHtcbiAgICAgIG9sZERhdGEuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICBpZiAoIW5ld0RhdGFNYXBbaXRlbVtOT0RFX0tFWV1dKSBfdGhpczQucmVtb3ZlQ2hpbGRCeURhdGEoaXRlbSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBuZXdOb2Rlcy5mb3JFYWNoKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICB2YXIgaW5kZXggPSBfcmVmLmluZGV4LFxuICAgICAgICAgIGRhdGEgPSBfcmVmLmRhdGE7XG5cbiAgICAgIF90aGlzNC5pbnNlcnRDaGlsZCh7IGRhdGE6IGRhdGEgfSwgaW5kZXgpO1xuICAgIH0pO1xuXG4gICAgdGhpcy51cGRhdGVMZWFmU3RhdGUoKTtcbiAgfTtcblxuICBOb2RlLnByb3RvdHlwZS5sb2FkRGF0YSA9IGZ1bmN0aW9uIGxvYWREYXRhKGNhbGxiYWNrKSB7XG4gICAgdmFyIF90aGlzNSA9IHRoaXM7XG5cbiAgICB2YXIgZGVmYXVsdFByb3BzID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcblxuICAgIGlmICh0aGlzLnN0b3JlLmxhenkgPT09IHRydWUgJiYgdGhpcy5zdG9yZS5sb2FkICYmICF0aGlzLmxvYWRlZCAmJiAoIXRoaXMubG9hZGluZyB8fCBPYmplY3Qua2V5cyhkZWZhdWx0UHJvcHMpLmxlbmd0aCkpIHtcbiAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG5cbiAgICAgIHZhciByZXNvbHZlID0gZnVuY3Rpb24gcmVzb2x2ZShjaGlsZHJlbikge1xuICAgICAgICBfdGhpczUuY2hpbGROb2RlcyA9IFtdO1xuXG4gICAgICAgIF90aGlzNS5kb0NyZWF0ZUNoaWxkcmVuKGNoaWxkcmVuLCBkZWZhdWx0UHJvcHMpO1xuICAgICAgICBfdGhpczUubG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgX3RoaXM1LmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgX3RoaXM1LnVwZGF0ZUxlYWZTdGF0ZSgpO1xuICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICBjYWxsYmFjay5jYWxsKF90aGlzNSwgY2hpbGRyZW4pO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICB0aGlzLnN0b3JlLmxvYWQodGhpcywgcmVzb2x2ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjay5jYWxsKHRoaXMpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBfY3JlYXRlQ2xhc3MoTm9kZSwgW3tcbiAgICBrZXk6ICdsYWJlbCcsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICByZXR1cm4gZ2V0UHJvcGVydHlGcm9tRGF0YSh0aGlzLCAnbGFiZWwnKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdrZXknLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgdmFyIG5vZGVLZXkgPSB0aGlzLnN0b3JlLmtleTtcbiAgICAgIGlmICh0aGlzLmRhdGEpIHJldHVybiB0aGlzLmRhdGFbbm9kZUtleV07XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdkaXNhYmxlZCcsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICByZXR1cm4gZ2V0UHJvcGVydHlGcm9tRGF0YSh0aGlzLCAnZGlzYWJsZWQnKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICduZXh0U2libGluZycsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICB2YXIgcGFyZW50ID0gdGhpcy5wYXJlbnQ7XG4gICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgIHZhciBpbmRleCA9IHBhcmVudC5jaGlsZE5vZGVzLmluZGV4T2YodGhpcyk7XG4gICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgcmV0dXJuIHBhcmVudC5jaGlsZE5vZGVzW2luZGV4ICsgMV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ3ByZXZpb3VzU2libGluZycsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICB2YXIgcGFyZW50ID0gdGhpcy5wYXJlbnQ7XG4gICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgIHZhciBpbmRleCA9IHBhcmVudC5jaGlsZE5vZGVzLmluZGV4T2YodGhpcyk7XG4gICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgcmV0dXJuIGluZGV4ID4gMCA/IHBhcmVudC5jaGlsZE5vZGVzW2luZGV4IC0gMV0gOiBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gTm9kZTtcbn0oKTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgbW9kZWxfbm9kZSA9IChub2RlX05vZGUpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy90cmVlL3NyYy9tb2RlbC90cmVlLXN0b3JlLmpzXG52YXIgdHJlZV9zdG9yZV90eXBlb2YgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIiA/IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH0gOiBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9O1xuXG5mdW5jdGlvbiB0cmVlX3N0b3JlX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuXG5cblxudmFyIHRyZWVfc3RvcmVfVHJlZVN0b3JlID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBUcmVlU3RvcmUob3B0aW9ucykge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB0cmVlX3N0b3JlX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFRyZWVTdG9yZSk7XG5cbiAgICB0aGlzLmN1cnJlbnROb2RlID0gbnVsbDtcbiAgICB0aGlzLmN1cnJlbnROb2RlS2V5ID0gbnVsbDtcblxuICAgIGZvciAodmFyIG9wdGlvbiBpbiBvcHRpb25zKSB7XG4gICAgICBpZiAob3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShvcHRpb24pKSB7XG4gICAgICAgIHRoaXNbb3B0aW9uXSA9IG9wdGlvbnNbb3B0aW9uXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLm5vZGVzTWFwID0ge307XG5cbiAgICB0aGlzLnJvb3QgPSBuZXcgbW9kZWxfbm9kZSh7XG4gICAgICBkYXRhOiB0aGlzLmRhdGEsXG4gICAgICBzdG9yZTogdGhpc1xuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMubGF6eSAmJiB0aGlzLmxvYWQpIHtcbiAgICAgIHZhciBsb2FkRm4gPSB0aGlzLmxvYWQ7XG4gICAgICBsb2FkRm4odGhpcy5yb290LCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICBfdGhpcy5yb290LmRvQ3JlYXRlQ2hpbGRyZW4oZGF0YSk7XG4gICAgICAgIF90aGlzLl9pbml0RGVmYXVsdENoZWNrZWROb2RlcygpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2luaXREZWZhdWx0Q2hlY2tlZE5vZGVzKCk7XG4gICAgfVxuICB9XG5cbiAgVHJlZVN0b3JlLnByb3RvdHlwZS5maWx0ZXIgPSBmdW5jdGlvbiBmaWx0ZXIodmFsdWUpIHtcbiAgICB2YXIgZmlsdGVyTm9kZU1ldGhvZCA9IHRoaXMuZmlsdGVyTm9kZU1ldGhvZDtcbiAgICB2YXIgbGF6eSA9IHRoaXMubGF6eTtcbiAgICB2YXIgdHJhdmVyc2UgPSBmdW5jdGlvbiB0cmF2ZXJzZShub2RlKSB7XG4gICAgICB2YXIgY2hpbGROb2RlcyA9IG5vZGUucm9vdCA/IG5vZGUucm9vdC5jaGlsZE5vZGVzIDogbm9kZS5jaGlsZE5vZGVzO1xuXG4gICAgICBjaGlsZE5vZGVzLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgIGNoaWxkLnZpc2libGUgPSBmaWx0ZXJOb2RlTWV0aG9kLmNhbGwoY2hpbGQsIHZhbHVlLCBjaGlsZC5kYXRhLCBjaGlsZCk7XG5cbiAgICAgICAgdHJhdmVyc2UoY2hpbGQpO1xuICAgICAgfSk7XG5cbiAgICAgIGlmICghbm9kZS52aXNpYmxlICYmIGNoaWxkTm9kZXMubGVuZ3RoKSB7XG4gICAgICAgIHZhciBhbGxIaWRkZW4gPSB0cnVlO1xuICAgICAgICBhbGxIaWRkZW4gPSAhY2hpbGROb2Rlcy5zb21lKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgICAgIHJldHVybiBjaGlsZC52aXNpYmxlO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAobm9kZS5yb290KSB7XG4gICAgICAgICAgbm9kZS5yb290LnZpc2libGUgPSBhbGxIaWRkZW4gPT09IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5vZGUudmlzaWJsZSA9IGFsbEhpZGRlbiA9PT0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghdmFsdWUpIHJldHVybjtcblxuICAgICAgaWYgKG5vZGUudmlzaWJsZSAmJiAhbm9kZS5pc0xlYWYgJiYgIWxhenkpIG5vZGUuZXhwYW5kKCk7XG4gICAgfTtcblxuICAgIHRyYXZlcnNlKHRoaXMpO1xuICB9O1xuXG4gIFRyZWVTdG9yZS5wcm90b3R5cGUuc2V0RGF0YSA9IGZ1bmN0aW9uIHNldERhdGEobmV3VmFsKSB7XG4gICAgdmFyIGluc3RhbmNlQ2hhbmdlZCA9IG5ld1ZhbCAhPT0gdGhpcy5yb290LmRhdGE7XG4gICAgaWYgKGluc3RhbmNlQ2hhbmdlZCkge1xuICAgICAgdGhpcy5yb290LnNldERhdGEobmV3VmFsKTtcbiAgICAgIHRoaXMuX2luaXREZWZhdWx0Q2hlY2tlZE5vZGVzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucm9vdC51cGRhdGVDaGlsZHJlbigpO1xuICAgIH1cbiAgfTtcblxuICBUcmVlU3RvcmUucHJvdG90eXBlLmdldE5vZGUgPSBmdW5jdGlvbiBnZXROb2RlKGRhdGEpIHtcbiAgICBpZiAoZGF0YSBpbnN0YW5jZW9mIG1vZGVsX25vZGUpIHJldHVybiBkYXRhO1xuICAgIHZhciBrZXkgPSAodHlwZW9mIGRhdGEgPT09ICd1bmRlZmluZWQnID8gJ3VuZGVmaW5lZCcgOiB0cmVlX3N0b3JlX3R5cGVvZihkYXRhKSkgIT09ICdvYmplY3QnID8gZGF0YSA6IHV0aWxfZ2V0Tm9kZUtleSh0aGlzLmtleSwgZGF0YSk7XG4gICAgcmV0dXJuIHRoaXMubm9kZXNNYXBba2V5XSB8fCBudWxsO1xuICB9O1xuXG4gIFRyZWVTdG9yZS5wcm90b3R5cGUuaW5zZXJ0QmVmb3JlID0gZnVuY3Rpb24gaW5zZXJ0QmVmb3JlKGRhdGEsIHJlZkRhdGEpIHtcbiAgICB2YXIgcmVmTm9kZSA9IHRoaXMuZ2V0Tm9kZShyZWZEYXRhKTtcbiAgICByZWZOb2RlLnBhcmVudC5pbnNlcnRCZWZvcmUoeyBkYXRhOiBkYXRhIH0sIHJlZk5vZGUpO1xuICB9O1xuXG4gIFRyZWVTdG9yZS5wcm90b3R5cGUuaW5zZXJ0QWZ0ZXIgPSBmdW5jdGlvbiBpbnNlcnRBZnRlcihkYXRhLCByZWZEYXRhKSB7XG4gICAgdmFyIHJlZk5vZGUgPSB0aGlzLmdldE5vZGUocmVmRGF0YSk7XG4gICAgcmVmTm9kZS5wYXJlbnQuaW5zZXJ0QWZ0ZXIoeyBkYXRhOiBkYXRhIH0sIHJlZk5vZGUpO1xuICB9O1xuXG4gIFRyZWVTdG9yZS5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gcmVtb3ZlKGRhdGEpIHtcbiAgICB2YXIgbm9kZSA9IHRoaXMuZ2V0Tm9kZShkYXRhKTtcblxuICAgIGlmIChub2RlICYmIG5vZGUucGFyZW50KSB7XG4gICAgICBpZiAobm9kZSA9PT0gdGhpcy5jdXJyZW50Tm9kZSkge1xuICAgICAgICB0aGlzLmN1cnJlbnROb2RlID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIG5vZGUucGFyZW50LnJlbW92ZUNoaWxkKG5vZGUpO1xuICAgIH1cbiAgfTtcblxuICBUcmVlU3RvcmUucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uIGFwcGVuZChkYXRhLCBwYXJlbnREYXRhKSB7XG4gICAgdmFyIHBhcmVudE5vZGUgPSBwYXJlbnREYXRhID8gdGhpcy5nZXROb2RlKHBhcmVudERhdGEpIDogdGhpcy5yb290O1xuXG4gICAgaWYgKHBhcmVudE5vZGUpIHtcbiAgICAgIHBhcmVudE5vZGUuaW5zZXJ0Q2hpbGQoeyBkYXRhOiBkYXRhIH0pO1xuICAgIH1cbiAgfTtcblxuICBUcmVlU3RvcmUucHJvdG90eXBlLl9pbml0RGVmYXVsdENoZWNrZWROb2RlcyA9IGZ1bmN0aW9uIF9pbml0RGVmYXVsdENoZWNrZWROb2RlcygpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIHZhciBkZWZhdWx0Q2hlY2tlZEtleXMgPSB0aGlzLmRlZmF1bHRDaGVja2VkS2V5cyB8fCBbXTtcbiAgICB2YXIgbm9kZXNNYXAgPSB0aGlzLm5vZGVzTWFwO1xuXG4gICAgZGVmYXVsdENoZWNrZWRLZXlzLmZvckVhY2goZnVuY3Rpb24gKGNoZWNrZWRLZXkpIHtcbiAgICAgIHZhciBub2RlID0gbm9kZXNNYXBbY2hlY2tlZEtleV07XG5cbiAgICAgIGlmIChub2RlKSB7XG4gICAgICAgIG5vZGUuc2V0Q2hlY2tlZCh0cnVlLCAhX3RoaXMyLmNoZWNrU3RyaWN0bHkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIFRyZWVTdG9yZS5wcm90b3R5cGUuX2luaXREZWZhdWx0Q2hlY2tlZE5vZGUgPSBmdW5jdGlvbiBfaW5pdERlZmF1bHRDaGVja2VkTm9kZShub2RlKSB7XG4gICAgdmFyIGRlZmF1bHRDaGVja2VkS2V5cyA9IHRoaXMuZGVmYXVsdENoZWNrZWRLZXlzIHx8IFtdO1xuXG4gICAgaWYgKGRlZmF1bHRDaGVja2VkS2V5cy5pbmRleE9mKG5vZGUua2V5KSAhPT0gLTEpIHtcbiAgICAgIG5vZGUuc2V0Q2hlY2tlZCh0cnVlLCAhdGhpcy5jaGVja1N0cmljdGx5KTtcbiAgICB9XG4gIH07XG5cbiAgVHJlZVN0b3JlLnByb3RvdHlwZS5zZXREZWZhdWx0Q2hlY2tlZEtleSA9IGZ1bmN0aW9uIHNldERlZmF1bHRDaGVja2VkS2V5KG5ld1ZhbCkge1xuICAgIGlmIChuZXdWYWwgIT09IHRoaXMuZGVmYXVsdENoZWNrZWRLZXlzKSB7XG4gICAgICB0aGlzLmRlZmF1bHRDaGVja2VkS2V5cyA9IG5ld1ZhbDtcbiAgICAgIHRoaXMuX2luaXREZWZhdWx0Q2hlY2tlZE5vZGVzKCk7XG4gICAgfVxuICB9O1xuXG4gIFRyZWVTdG9yZS5wcm90b3R5cGUucmVnaXN0ZXJOb2RlID0gZnVuY3Rpb24gcmVnaXN0ZXJOb2RlKG5vZGUpIHtcbiAgICB2YXIga2V5ID0gdGhpcy5rZXk7XG4gICAgaWYgKCFrZXkgfHwgIW5vZGUgfHwgIW5vZGUuZGF0YSkgcmV0dXJuO1xuXG4gICAgdmFyIG5vZGVLZXkgPSBub2RlLmtleTtcbiAgICBpZiAobm9kZUtleSAhPT0gdW5kZWZpbmVkKSB0aGlzLm5vZGVzTWFwW25vZGUua2V5XSA9IG5vZGU7XG4gIH07XG5cbiAgVHJlZVN0b3JlLnByb3RvdHlwZS5kZXJlZ2lzdGVyTm9kZSA9IGZ1bmN0aW9uIGRlcmVnaXN0ZXJOb2RlKG5vZGUpIHtcbiAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgIHZhciBrZXkgPSB0aGlzLmtleTtcbiAgICBpZiAoIWtleSB8fCAhbm9kZSB8fCAhbm9kZS5kYXRhKSByZXR1cm47XG5cbiAgICBub2RlLmNoaWxkTm9kZXMuZm9yRWFjaChmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgIF90aGlzMy5kZXJlZ2lzdGVyTm9kZShjaGlsZCk7XG4gICAgfSk7XG5cbiAgICBkZWxldGUgdGhpcy5ub2Rlc01hcFtub2RlLmtleV07XG4gIH07XG5cbiAgVHJlZVN0b3JlLnByb3RvdHlwZS5nZXRDaGVja2VkTm9kZXMgPSBmdW5jdGlvbiBnZXRDaGVja2VkTm9kZXMoKSB7XG4gICAgdmFyIGxlYWZPbmx5ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBmYWxzZTtcbiAgICB2YXIgaW5jbHVkZUhhbGZDaGVja2VkID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmYWxzZTtcblxuICAgIHZhciBjaGVja2VkTm9kZXMgPSBbXTtcbiAgICB2YXIgdHJhdmVyc2UgPSBmdW5jdGlvbiB0cmF2ZXJzZShub2RlKSB7XG4gICAgICB2YXIgY2hpbGROb2RlcyA9IG5vZGUucm9vdCA/IG5vZGUucm9vdC5jaGlsZE5vZGVzIDogbm9kZS5jaGlsZE5vZGVzO1xuXG4gICAgICBjaGlsZE5vZGVzLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgIGlmICgoY2hpbGQuY2hlY2tlZCB8fCBpbmNsdWRlSGFsZkNoZWNrZWQgJiYgY2hpbGQuaW5kZXRlcm1pbmF0ZSkgJiYgKCFsZWFmT25seSB8fCBsZWFmT25seSAmJiBjaGlsZC5pc0xlYWYpKSB7XG4gICAgICAgICAgY2hlY2tlZE5vZGVzLnB1c2goY2hpbGQuZGF0YSk7XG4gICAgICAgIH1cblxuICAgICAgICB0cmF2ZXJzZShjaGlsZCk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgdHJhdmVyc2UodGhpcyk7XG5cbiAgICByZXR1cm4gY2hlY2tlZE5vZGVzO1xuICB9O1xuXG4gIFRyZWVTdG9yZS5wcm90b3R5cGUuZ2V0Q2hlY2tlZEtleXMgPSBmdW5jdGlvbiBnZXRDaGVja2VkS2V5cygpIHtcbiAgICB2YXIgX3RoaXM0ID0gdGhpcztcblxuICAgIHZhciBsZWFmT25seSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogZmFsc2U7XG5cbiAgICByZXR1cm4gdGhpcy5nZXRDaGVja2VkTm9kZXMobGVhZk9ubHkpLm1hcChmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgcmV0dXJuIChkYXRhIHx8IHt9KVtfdGhpczQua2V5XTtcbiAgICB9KTtcbiAgfTtcblxuICBUcmVlU3RvcmUucHJvdG90eXBlLmdldEhhbGZDaGVja2VkTm9kZXMgPSBmdW5jdGlvbiBnZXRIYWxmQ2hlY2tlZE5vZGVzKCkge1xuICAgIHZhciBub2RlcyA9IFtdO1xuICAgIHZhciB0cmF2ZXJzZSA9IGZ1bmN0aW9uIHRyYXZlcnNlKG5vZGUpIHtcbiAgICAgIHZhciBjaGlsZE5vZGVzID0gbm9kZS5yb290ID8gbm9kZS5yb290LmNoaWxkTm9kZXMgOiBub2RlLmNoaWxkTm9kZXM7XG5cbiAgICAgIGNoaWxkTm9kZXMuZm9yRWFjaChmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgICAgaWYgKGNoaWxkLmluZGV0ZXJtaW5hdGUpIHtcbiAgICAgICAgICBub2Rlcy5wdXNoKGNoaWxkLmRhdGEpO1xuICAgICAgICB9XG5cbiAgICAgICAgdHJhdmVyc2UoY2hpbGQpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHRyYXZlcnNlKHRoaXMpO1xuXG4gICAgcmV0dXJuIG5vZGVzO1xuICB9O1xuXG4gIFRyZWVTdG9yZS5wcm90b3R5cGUuZ2V0SGFsZkNoZWNrZWRLZXlzID0gZnVuY3Rpb24gZ2V0SGFsZkNoZWNrZWRLZXlzKCkge1xuICAgIHZhciBfdGhpczUgPSB0aGlzO1xuXG4gICAgcmV0dXJuIHRoaXMuZ2V0SGFsZkNoZWNrZWROb2RlcygpLm1hcChmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgcmV0dXJuIChkYXRhIHx8IHt9KVtfdGhpczUua2V5XTtcbiAgICB9KTtcbiAgfTtcblxuICBUcmVlU3RvcmUucHJvdG90eXBlLl9nZXRBbGxOb2RlcyA9IGZ1bmN0aW9uIF9nZXRBbGxOb2RlcygpIHtcbiAgICB2YXIgYWxsTm9kZXMgPSBbXTtcbiAgICB2YXIgbm9kZXNNYXAgPSB0aGlzLm5vZGVzTWFwO1xuICAgIGZvciAodmFyIG5vZGVLZXkgaW4gbm9kZXNNYXApIHtcbiAgICAgIGlmIChub2Rlc01hcC5oYXNPd25Qcm9wZXJ0eShub2RlS2V5KSkge1xuICAgICAgICBhbGxOb2Rlcy5wdXNoKG5vZGVzTWFwW25vZGVLZXldKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYWxsTm9kZXM7XG4gIH07XG5cbiAgVHJlZVN0b3JlLnByb3RvdHlwZS51cGRhdGVDaGlsZHJlbiA9IGZ1bmN0aW9uIHVwZGF0ZUNoaWxkcmVuKGtleSwgZGF0YSkge1xuICAgIHZhciBub2RlID0gdGhpcy5ub2Rlc01hcFtrZXldO1xuICAgIGlmICghbm9kZSkgcmV0dXJuO1xuICAgIHZhciBjaGlsZE5vZGVzID0gbm9kZS5jaGlsZE5vZGVzO1xuICAgIGZvciAodmFyIGkgPSBjaGlsZE5vZGVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB2YXIgY2hpbGQgPSBjaGlsZE5vZGVzW2ldO1xuICAgICAgdGhpcy5yZW1vdmUoY2hpbGQuZGF0YSk7XG4gICAgfVxuICAgIGZvciAodmFyIF9pID0gMCwgaiA9IGRhdGEubGVuZ3RoOyBfaSA8IGo7IF9pKyspIHtcbiAgICAgIHZhciBfY2hpbGQgPSBkYXRhW19pXTtcbiAgICAgIHRoaXMuYXBwZW5kKF9jaGlsZCwgbm9kZS5kYXRhKTtcbiAgICB9XG4gIH07XG5cbiAgVHJlZVN0b3JlLnByb3RvdHlwZS5fc2V0Q2hlY2tlZEtleXMgPSBmdW5jdGlvbiBfc2V0Q2hlY2tlZEtleXMoa2V5KSB7XG4gICAgdmFyIGxlYWZPbmx5ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmYWxzZTtcbiAgICB2YXIgY2hlY2tlZEtleXMgPSBhcmd1bWVudHNbMl07XG5cbiAgICB2YXIgYWxsTm9kZXMgPSB0aGlzLl9nZXRBbGxOb2RlcygpLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIHJldHVybiBiLmxldmVsIC0gYS5sZXZlbDtcbiAgICB9KTtcbiAgICB2YXIgY2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoY2hlY2tlZEtleXMpO1xuICAgIGFsbE5vZGVzLmZvckVhY2goZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgIHJldHVybiBub2RlLnNldENoZWNrZWQoZmFsc2UsIGZhbHNlKTtcbiAgICB9KTtcbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IGFsbE5vZGVzLmxlbmd0aDsgaSA8IGo7IGkrKykge1xuICAgICAgdmFyIG5vZGUgPSBhbGxOb2Rlc1tpXTtcbiAgICAgIHZhciBub2RlS2V5ID0gbm9kZS5kYXRhW2tleV0udG9TdHJpbmcoKTtcbiAgICAgIHZhciBjaGVja2VkID0ga2V5cy5pbmRleE9mKG5vZGVLZXkpID4gLTE7XG4gICAgICBpZiAoIWNoZWNrZWQpIHtcbiAgICAgICAgaWYgKG5vZGUuY2hlY2tlZCAmJiAhY2FjaGVbbm9kZUtleV0pIHtcbiAgICAgICAgICBub2RlLnNldENoZWNrZWQoZmFsc2UsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIHBhcmVudCA9IG5vZGUucGFyZW50O1xuICAgICAgd2hpbGUgKHBhcmVudCAmJiBwYXJlbnQubGV2ZWwgPiAwKSB7XG4gICAgICAgIGNhY2hlW3BhcmVudC5kYXRhW2tleV1dID0gdHJ1ZTtcbiAgICAgICAgcGFyZW50ID0gcGFyZW50LnBhcmVudDtcbiAgICAgIH1cblxuICAgICAgaWYgKG5vZGUuaXNMZWFmIHx8IHRoaXMuY2hlY2tTdHJpY3RseSkge1xuICAgICAgICBub2RlLnNldENoZWNrZWQodHJ1ZSwgZmFsc2UpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIG5vZGUuc2V0Q2hlY2tlZCh0cnVlLCB0cnVlKTtcblxuICAgICAgaWYgKGxlYWZPbmx5KSB7XG4gICAgICAgIChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgbm9kZS5zZXRDaGVja2VkKGZhbHNlLCBmYWxzZSk7XG4gICAgICAgICAgdmFyIHRyYXZlcnNlID0gZnVuY3Rpb24gdHJhdmVyc2Uobm9kZSkge1xuICAgICAgICAgICAgdmFyIGNoaWxkTm9kZXMgPSBub2RlLmNoaWxkTm9kZXM7XG4gICAgICAgICAgICBjaGlsZE5vZGVzLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgICAgICAgIGlmICghY2hpbGQuaXNMZWFmKSB7XG4gICAgICAgICAgICAgICAgY2hpbGQuc2V0Q2hlY2tlZChmYWxzZSwgZmFsc2UpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRyYXZlcnNlKGNoaWxkKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH07XG4gICAgICAgICAgdHJhdmVyc2Uobm9kZSk7XG4gICAgICAgIH0pKCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIFRyZWVTdG9yZS5wcm90b3R5cGUuc2V0Q2hlY2tlZE5vZGVzID0gZnVuY3Rpb24gc2V0Q2hlY2tlZE5vZGVzKGFycmF5KSB7XG4gICAgdmFyIGxlYWZPbmx5ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmYWxzZTtcblxuICAgIHZhciBrZXkgPSB0aGlzLmtleTtcbiAgICB2YXIgY2hlY2tlZEtleXMgPSB7fTtcbiAgICBhcnJheS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICBjaGVja2VkS2V5c1soaXRlbSB8fCB7fSlba2V5XV0gPSB0cnVlO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fc2V0Q2hlY2tlZEtleXMoa2V5LCBsZWFmT25seSwgY2hlY2tlZEtleXMpO1xuICB9O1xuXG4gIFRyZWVTdG9yZS5wcm90b3R5cGUuc2V0Q2hlY2tlZEtleXMgPSBmdW5jdGlvbiBzZXRDaGVja2VkS2V5cyhrZXlzKSB7XG4gICAgdmFyIGxlYWZPbmx5ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmYWxzZTtcblxuICAgIHRoaXMuZGVmYXVsdENoZWNrZWRLZXlzID0ga2V5cztcbiAgICB2YXIga2V5ID0gdGhpcy5rZXk7XG4gICAgdmFyIGNoZWNrZWRLZXlzID0ge307XG4gICAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIGNoZWNrZWRLZXlzW2tleV0gPSB0cnVlO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fc2V0Q2hlY2tlZEtleXMoa2V5LCBsZWFmT25seSwgY2hlY2tlZEtleXMpO1xuICB9O1xuXG4gIFRyZWVTdG9yZS5wcm90b3R5cGUuc2V0RGVmYXVsdEV4cGFuZGVkS2V5cyA9IGZ1bmN0aW9uIHNldERlZmF1bHRFeHBhbmRlZEtleXMoa2V5cykge1xuICAgIHZhciBfdGhpczYgPSB0aGlzO1xuXG4gICAga2V5cyA9IGtleXMgfHwgW107XG4gICAgdGhpcy5kZWZhdWx0RXhwYW5kZWRLZXlzID0ga2V5cztcblxuICAgIGtleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICB2YXIgbm9kZSA9IF90aGlzNi5nZXROb2RlKGtleSk7XG4gICAgICBpZiAobm9kZSkgbm9kZS5leHBhbmQobnVsbCwgX3RoaXM2LmF1dG9FeHBhbmRQYXJlbnQpO1xuICAgIH0pO1xuICB9O1xuXG4gIFRyZWVTdG9yZS5wcm90b3R5cGUuc2V0Q2hlY2tlZCA9IGZ1bmN0aW9uIHNldENoZWNrZWQoZGF0YSwgY2hlY2tlZCwgZGVlcCkge1xuICAgIHZhciBub2RlID0gdGhpcy5nZXROb2RlKGRhdGEpO1xuXG4gICAgaWYgKG5vZGUpIHtcbiAgICAgIG5vZGUuc2V0Q2hlY2tlZCghIWNoZWNrZWQsIGRlZXApO1xuICAgIH1cbiAgfTtcblxuICBUcmVlU3RvcmUucHJvdG90eXBlLmdldEN1cnJlbnROb2RlID0gZnVuY3Rpb24gZ2V0Q3VycmVudE5vZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudE5vZGU7XG4gIH07XG5cbiAgVHJlZVN0b3JlLnByb3RvdHlwZS5zZXRDdXJyZW50Tm9kZSA9IGZ1bmN0aW9uIHNldEN1cnJlbnROb2RlKGN1cnJlbnROb2RlKSB7XG4gICAgdmFyIHByZXZDdXJyZW50Tm9kZSA9IHRoaXMuY3VycmVudE5vZGU7XG4gICAgaWYgKHByZXZDdXJyZW50Tm9kZSkge1xuICAgICAgcHJldkN1cnJlbnROb2RlLmlzQ3VycmVudCA9IGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLmN1cnJlbnROb2RlID0gY3VycmVudE5vZGU7XG4gICAgdGhpcy5jdXJyZW50Tm9kZS5pc0N1cnJlbnQgPSB0cnVlO1xuICB9O1xuXG4gIFRyZWVTdG9yZS5wcm90b3R5cGUuc2V0VXNlckN1cnJlbnROb2RlID0gZnVuY3Rpb24gc2V0VXNlckN1cnJlbnROb2RlKG5vZGUpIHtcbiAgICB2YXIga2V5ID0gbm9kZVt0aGlzLmtleV07XG4gICAgdmFyIGN1cnJOb2RlID0gdGhpcy5ub2Rlc01hcFtrZXldO1xuICAgIHRoaXMuc2V0Q3VycmVudE5vZGUoY3Vyck5vZGUpO1xuICB9O1xuXG4gIFRyZWVTdG9yZS5wcm90b3R5cGUuc2V0Q3VycmVudE5vZGVLZXkgPSBmdW5jdGlvbiBzZXRDdXJyZW50Tm9kZUtleShrZXkpIHtcbiAgICBpZiAoa2V5ID09PSBudWxsIHx8IGtleSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmN1cnJlbnROb2RlICYmICh0aGlzLmN1cnJlbnROb2RlLmlzQ3VycmVudCA9IGZhbHNlKTtcbiAgICAgIHRoaXMuY3VycmVudE5vZGUgPSBudWxsO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgbm9kZSA9IHRoaXMuZ2V0Tm9kZShrZXkpO1xuICAgIGlmIChub2RlKSB7XG4gICAgICB0aGlzLnNldEN1cnJlbnROb2RlKG5vZGUpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gVHJlZVN0b3JlO1xufSgpO1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciB0cmVlX3N0b3JlID0gKHRyZWVfc3RvcmVfVHJlZVN0b3JlKTtcbjtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvdHJlZS9zcmMvdHJlZS1ub2RlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zYmEzZWYwZSZcbnZhciB0cmVlX25vZGV2dWVfdHlwZV90ZW1wbGF0ZV9pZF8zYmEzZWYwZV9yZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHRoaXMkMSA9IHRoaXNcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICB7XG4gICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgIHZhbHVlOiBfdm0ubm9kZS52aXNpYmxlLFxuICAgICAgICAgIGV4cHJlc3Npb246IFwibm9kZS52aXNpYmxlXCJcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIHJlZjogXCJub2RlXCIsXG4gICAgICBzdGF0aWNDbGFzczogXCJlbC10cmVlLW5vZGVcIixcbiAgICAgIGNsYXNzOiB7XG4gICAgICAgIFwiaXMtZXhwYW5kZWRcIjogX3ZtLmV4cGFuZGVkLFxuICAgICAgICBcImlzLWN1cnJlbnRcIjogX3ZtLm5vZGUuaXNDdXJyZW50LFxuICAgICAgICBcImlzLWhpZGRlblwiOiAhX3ZtLm5vZGUudmlzaWJsZSxcbiAgICAgICAgXCJpcy1mb2N1c2FibGVcIjogIV92bS5ub2RlLmRpc2FibGVkLFxuICAgICAgICBcImlzLWNoZWNrZWRcIjogIV92bS5ub2RlLmRpc2FibGVkICYmIF92bS5ub2RlLmNoZWNrZWRcbiAgICAgIH0sXG4gICAgICBhdHRyczoge1xuICAgICAgICByb2xlOiBcInRyZWVpdGVtXCIsXG4gICAgICAgIHRhYmluZGV4OiBcIi0xXCIsXG4gICAgICAgIFwiYXJpYS1leHBhbmRlZFwiOiBfdm0uZXhwYW5kZWQsXG4gICAgICAgIFwiYXJpYS1kaXNhYmxlZFwiOiBfdm0ubm9kZS5kaXNhYmxlZCxcbiAgICAgICAgXCJhcmlhLWNoZWNrZWRcIjogX3ZtLm5vZGUuY2hlY2tlZCxcbiAgICAgICAgZHJhZ2dhYmxlOiBfdm0udHJlZS5kcmFnZ2FibGVcbiAgICAgIH0sXG4gICAgICBvbjoge1xuICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgcmV0dXJuIF92bS5oYW5kbGVDbGljaygkZXZlbnQpXG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRleHRtZW51OiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcyQxLmhhbmRsZUNvbnRleHRNZW51KCRldmVudClcbiAgICAgICAgfSxcbiAgICAgICAgZHJhZ3N0YXJ0OiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICByZXR1cm4gX3ZtLmhhbmRsZURyYWdTdGFydCgkZXZlbnQpXG4gICAgICAgIH0sXG4gICAgICAgIGRyYWdvdmVyOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICByZXR1cm4gX3ZtLmhhbmRsZURyYWdPdmVyKCRldmVudClcbiAgICAgICAgfSxcbiAgICAgICAgZHJhZ2VuZDogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgcmV0dXJuIF92bS5oYW5kbGVEcmFnRW5kKCRldmVudClcbiAgICAgICAgfSxcbiAgICAgICAgZHJvcDogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgcmV0dXJuIF92bS5oYW5kbGVEcm9wKCRldmVudClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgW1xuICAgICAgX2MoXG4gICAgICAgIFwiZGl2XCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC10cmVlLW5vZGVfX2NvbnRlbnRcIixcbiAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgXCJwYWRkaW5nLWxlZnRcIjogKF92bS5ub2RlLmxldmVsIC0gMSkgKiBfdm0udHJlZS5pbmRlbnQgKyBcInB4XCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFtcbiAgICAgICAgICBfYyhcInNwYW5cIiwge1xuICAgICAgICAgICAgY2xhc3M6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIFwiaXMtbGVhZlwiOiBfdm0ubm9kZS5pc0xlYWYsXG4gICAgICAgICAgICAgICAgZXhwYW5kZWQ6ICFfdm0ubm9kZS5pc0xlYWYgJiYgX3ZtLmV4cGFuZGVkXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFwiZWwtdHJlZS1ub2RlX19leHBhbmQtaWNvblwiLFxuICAgICAgICAgICAgICBfdm0udHJlZS5pY29uQ2xhc3MgPyBfdm0udHJlZS5pY29uQ2xhc3MgOiBcImVsLWljb24tY2FyZXQtcmlnaHRcIlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLmhhbmRsZUV4cGFuZEljb25DbGljaygkZXZlbnQpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSxcbiAgICAgICAgICBfdm0uc2hvd0NoZWNrYm94XG4gICAgICAgICAgICA/IF9jKFwiZWwtY2hlY2tib3hcIiwge1xuICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICBpbmRldGVybWluYXRlOiBfdm0ubm9kZS5pbmRldGVybWluYXRlLFxuICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6ICEhX3ZtLm5vZGUuZGlzYWJsZWRcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG9uOiB7IGNoYW5nZTogX3ZtLmhhbmRsZUNoZWNrQ2hhbmdlIH0sXG4gICAgICAgICAgICAgICAgbmF0aXZlT246IHtcbiAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBtb2RlbDoge1xuICAgICAgICAgICAgICAgICAgdmFsdWU6IF92bS5ub2RlLmNoZWNrZWQsXG4gICAgICAgICAgICAgICAgICBjYWxsYmFjazogZnVuY3Rpb24oJCR2KSB7XG4gICAgICAgICAgICAgICAgICAgIF92bS4kc2V0KF92bS5ub2RlLCBcImNoZWNrZWRcIiwgJCR2KVxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwibm9kZS5jaGVja2VkXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgIF92bS5ub2RlLmxvYWRpbmdcbiAgICAgICAgICAgID8gX2MoXCJzcGFuXCIsIHtcbiAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC10cmVlLW5vZGVfX2xvYWRpbmctaWNvbiBlbC1pY29uLWxvYWRpbmdcIlxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICBfYyhcIm5vZGUtY29udGVudFwiLCB7IGF0dHJzOiB7IG5vZGU6IF92bS5ub2RlIH0gfSlcbiAgICAgICAgXSxcbiAgICAgICAgMVxuICAgICAgKSxcbiAgICAgIF9jKFwiZWwtY29sbGFwc2UtdHJhbnNpdGlvblwiLCBbXG4gICAgICAgICFfdm0ucmVuZGVyQWZ0ZXJFeHBhbmQgfHwgX3ZtLmNoaWxkTm9kZVJlbmRlcmVkXG4gICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0uZXhwYW5kZWQsXG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwiZXhwYW5kZWRcIlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtdHJlZS1ub2RlX19jaGlsZHJlblwiLFxuICAgICAgICAgICAgICAgIGF0dHJzOiB7IHJvbGU6IFwiZ3JvdXBcIiwgXCJhcmlhLWV4cGFuZGVkXCI6IF92bS5leHBhbmRlZCB9XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIF92bS5fbChfdm0ubm9kZS5jaGlsZE5vZGVzLCBmdW5jdGlvbihjaGlsZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfYyhcImVsLXRyZWUtbm9kZVwiLCB7XG4gICAgICAgICAgICAgICAgICBrZXk6IF92bS5nZXROb2RlS2V5KGNoaWxkKSxcbiAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgIFwicmVuZGVyLWNvbnRlbnRcIjogX3ZtLnJlbmRlckNvbnRlbnQsXG4gICAgICAgICAgICAgICAgICAgIFwicmVuZGVyLWFmdGVyLWV4cGFuZFwiOiBfdm0ucmVuZGVyQWZ0ZXJFeHBhbmQsXG4gICAgICAgICAgICAgICAgICAgIFwic2hvdy1jaGVja2JveFwiOiBfdm0uc2hvd0NoZWNrYm94LFxuICAgICAgICAgICAgICAgICAgICBub2RlOiBjaGlsZFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIG9uOiB7IFwibm9kZS1leHBhbmRcIjogX3ZtLmhhbmRsZUNoaWxkTm9kZUV4cGFuZCB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICBdKVxuICAgIF0sXG4gICAgMVxuICApXG59XG52YXIgdHJlZV9ub2RldnVlX3R5cGVfdGVtcGxhdGVfaWRfM2JhM2VmMGVfc3RhdGljUmVuZGVyRm5zID0gW11cbnRyZWVfbm9kZXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzNiYTNlZjBlX3JlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdHJlZS9zcmMvdHJlZS1ub2RlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zYmEzZWYwZSZcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvdHJlZS9zcmMvdHJlZS1ub2RlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cblxuXG5cblxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciB0cmVlX25vZGV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBuYW1lOiAnRWxUcmVlTm9kZScsXG5cbiAgY29tcG9uZW50TmFtZTogJ0VsVHJlZU5vZGUnLFxuXG4gIG1peGluczogW2VtaXR0ZXJfZGVmYXVsdC5hXSxcblxuICBwcm9wczoge1xuICAgIG5vZGU6IHtcbiAgICAgIGRlZmF1bHQ6IGZ1bmN0aW9uIF9kZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9XG4gICAgfSxcbiAgICBwcm9wczoge30sXG4gICAgcmVuZGVyQ29udGVudDogRnVuY3Rpb24sXG4gICAgcmVuZGVyQWZ0ZXJFeHBhbmQ6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSxcbiAgICBzaG93Q2hlY2tib3g6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wb25lbnRzOiB7XG4gICAgRWxDb2xsYXBzZVRyYW5zaXRpb246IGNvbGxhcHNlX3RyYW5zaXRpb25fZGVmYXVsdC5hLFxuICAgIEVsQ2hlY2tib3g6IGNoZWNrYm94X2RlZmF1bHQuYSxcbiAgICBOb2RlQ29udGVudDoge1xuICAgICAgcHJvcHM6IHtcbiAgICAgICAgbm9kZToge1xuICAgICAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcihoKSB7XG4gICAgICAgIHZhciBwYXJlbnQgPSB0aGlzLiRwYXJlbnQ7XG4gICAgICAgIHZhciB0cmVlID0gcGFyZW50LnRyZWU7XG4gICAgICAgIHZhciBub2RlID0gdGhpcy5ub2RlO1xuICAgICAgICB2YXIgZGF0YSA9IG5vZGUuZGF0YSxcbiAgICAgICAgICAgIHN0b3JlID0gbm9kZS5zdG9yZTtcblxuICAgICAgICByZXR1cm4gcGFyZW50LnJlbmRlckNvbnRlbnQgPyBwYXJlbnQucmVuZGVyQ29udGVudC5jYWxsKHBhcmVudC5fcmVuZGVyUHJveHksIGgsIHsgX3NlbGY6IHRyZWUuJHZub2RlLmNvbnRleHQsIG5vZGU6IG5vZGUsIGRhdGE6IGRhdGEsIHN0b3JlOiBzdG9yZSB9KSA6IHRyZWUuJHNjb3BlZFNsb3RzLmRlZmF1bHQgPyB0cmVlLiRzY29wZWRTbG90cy5kZWZhdWx0KHsgbm9kZTogbm9kZSwgZGF0YTogZGF0YSB9KSA6IGgoXG4gICAgICAgICAgJ3NwYW4nLFxuICAgICAgICAgIHsgJ2NsYXNzJzogJ2VsLXRyZWUtbm9kZV9fbGFiZWwnIH0sXG4gICAgICAgICAgW25vZGUubGFiZWxdXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRyZWU6IG51bGwsXG4gICAgICBleHBhbmRlZDogZmFsc2UsXG4gICAgICBjaGlsZE5vZGVSZW5kZXJlZDogZmFsc2UsXG4gICAgICBvbGRDaGVja2VkOiBudWxsLFxuICAgICAgb2xkSW5kZXRlcm1pbmF0ZTogbnVsbFxuICAgIH07XG4gIH0sXG5cblxuICB3YXRjaDoge1xuICAgICdub2RlLmluZGV0ZXJtaW5hdGUnOiBmdW5jdGlvbiBub2RlSW5kZXRlcm1pbmF0ZSh2YWwpIHtcbiAgICAgIHRoaXMuaGFuZGxlU2VsZWN0Q2hhbmdlKHRoaXMubm9kZS5jaGVja2VkLCB2YWwpO1xuICAgIH0sXG4gICAgJ25vZGUuY2hlY2tlZCc6IGZ1bmN0aW9uIG5vZGVDaGVja2VkKHZhbCkge1xuICAgICAgdGhpcy5oYW5kbGVTZWxlY3RDaGFuZ2UodmFsLCB0aGlzLm5vZGUuaW5kZXRlcm1pbmF0ZSk7XG4gICAgfSxcbiAgICAnbm9kZS5leHBhbmRlZCc6IGZ1bmN0aW9uIG5vZGVFeHBhbmRlZCh2YWwpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzLmV4cGFuZGVkID0gdmFsO1xuICAgICAgfSk7XG4gICAgICBpZiAodmFsKSB7XG4gICAgICAgIHRoaXMuY2hpbGROb2RlUmVuZGVyZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0Tm9kZUtleTogZnVuY3Rpb24gZ2V0Tm9kZUtleShub2RlKSB7XG4gICAgICByZXR1cm4gdXRpbF9nZXROb2RlS2V5KHRoaXMudHJlZS5ub2RlS2V5LCBub2RlLmRhdGEpO1xuICAgIH0sXG4gICAgaGFuZGxlU2VsZWN0Q2hhbmdlOiBmdW5jdGlvbiBoYW5kbGVTZWxlY3RDaGFuZ2UoY2hlY2tlZCwgaW5kZXRlcm1pbmF0ZSkge1xuICAgICAgaWYgKHRoaXMub2xkQ2hlY2tlZCAhPT0gY2hlY2tlZCAmJiB0aGlzLm9sZEluZGV0ZXJtaW5hdGUgIT09IGluZGV0ZXJtaW5hdGUpIHtcbiAgICAgICAgdGhpcy50cmVlLiRlbWl0KCdjaGVjay1jaGFuZ2UnLCB0aGlzLm5vZGUuZGF0YSwgY2hlY2tlZCwgaW5kZXRlcm1pbmF0ZSk7XG4gICAgICB9XG4gICAgICB0aGlzLm9sZENoZWNrZWQgPSBjaGVja2VkO1xuICAgICAgdGhpcy5pbmRldGVybWluYXRlID0gaW5kZXRlcm1pbmF0ZTtcbiAgICB9LFxuICAgIGhhbmRsZUNsaWNrOiBmdW5jdGlvbiBoYW5kbGVDbGljaygpIHtcbiAgICAgIHZhciBzdG9yZSA9IHRoaXMudHJlZS5zdG9yZTtcbiAgICAgIHN0b3JlLnNldEN1cnJlbnROb2RlKHRoaXMubm9kZSk7XG4gICAgICB0aGlzLnRyZWUuJGVtaXQoJ2N1cnJlbnQtY2hhbmdlJywgc3RvcmUuY3VycmVudE5vZGUgPyBzdG9yZS5jdXJyZW50Tm9kZS5kYXRhIDogbnVsbCwgc3RvcmUuY3VycmVudE5vZGUpO1xuICAgICAgdGhpcy50cmVlLmN1cnJlbnROb2RlID0gdGhpcztcbiAgICAgIGlmICh0aGlzLnRyZWUuZXhwYW5kT25DbGlja05vZGUpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVFeHBhbmRJY29uQ2xpY2soKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnRyZWUuY2hlY2tPbkNsaWNrTm9kZSAmJiAhdGhpcy5ub2RlLmRpc2FibGVkKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlQ2hlY2tDaGFuZ2UobnVsbCwge1xuICAgICAgICAgIHRhcmdldDogeyBjaGVja2VkOiAhdGhpcy5ub2RlLmNoZWNrZWQgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMudHJlZS4kZW1pdCgnbm9kZS1jbGljaycsIHRoaXMubm9kZS5kYXRhLCB0aGlzLm5vZGUsIHRoaXMpO1xuICAgIH0sXG4gICAgaGFuZGxlQ29udGV4dE1lbnU6IGZ1bmN0aW9uIGhhbmRsZUNvbnRleHRNZW51KGV2ZW50KSB7XG4gICAgICBpZiAodGhpcy50cmVlLl9ldmVudHNbJ25vZGUtY29udGV4dG1lbnUnXSAmJiB0aGlzLnRyZWUuX2V2ZW50c1snbm9kZS1jb250ZXh0bWVudSddLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9XG4gICAgICB0aGlzLnRyZWUuJGVtaXQoJ25vZGUtY29udGV4dG1lbnUnLCBldmVudCwgdGhpcy5ub2RlLmRhdGEsIHRoaXMubm9kZSwgdGhpcyk7XG4gICAgfSxcbiAgICBoYW5kbGVFeHBhbmRJY29uQ2xpY2s6IGZ1bmN0aW9uIGhhbmRsZUV4cGFuZEljb25DbGljaygpIHtcbiAgICAgIGlmICh0aGlzLm5vZGUuaXNMZWFmKSByZXR1cm47XG4gICAgICBpZiAodGhpcy5leHBhbmRlZCkge1xuICAgICAgICB0aGlzLnRyZWUuJGVtaXQoJ25vZGUtY29sbGFwc2UnLCB0aGlzLm5vZGUuZGF0YSwgdGhpcy5ub2RlLCB0aGlzKTtcbiAgICAgICAgdGhpcy5ub2RlLmNvbGxhcHNlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm5vZGUuZXhwYW5kKCk7XG4gICAgICAgIHRoaXMuJGVtaXQoJ25vZGUtZXhwYW5kJywgdGhpcy5ub2RlLmRhdGEsIHRoaXMubm9kZSwgdGhpcyk7XG4gICAgICB9XG4gICAgfSxcbiAgICBoYW5kbGVDaGVja0NoYW5nZTogZnVuY3Rpb24gaGFuZGxlQ2hlY2tDaGFuZ2UodmFsdWUsIGV2KSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgdGhpcy5ub2RlLnNldENoZWNrZWQoZXYudGFyZ2V0LmNoZWNrZWQsICF0aGlzLnRyZWUuY2hlY2tTdHJpY3RseSk7XG4gICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBzdG9yZSA9IF90aGlzMi50cmVlLnN0b3JlO1xuICAgICAgICBfdGhpczIudHJlZS4kZW1pdCgnY2hlY2snLCBfdGhpczIubm9kZS5kYXRhLCB7XG4gICAgICAgICAgY2hlY2tlZE5vZGVzOiBzdG9yZS5nZXRDaGVja2VkTm9kZXMoKSxcbiAgICAgICAgICBjaGVja2VkS2V5czogc3RvcmUuZ2V0Q2hlY2tlZEtleXMoKSxcbiAgICAgICAgICBoYWxmQ2hlY2tlZE5vZGVzOiBzdG9yZS5nZXRIYWxmQ2hlY2tlZE5vZGVzKCksXG4gICAgICAgICAgaGFsZkNoZWNrZWRLZXlzOiBzdG9yZS5nZXRIYWxmQ2hlY2tlZEtleXMoKVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgaGFuZGxlQ2hpbGROb2RlRXhwYW5kOiBmdW5jdGlvbiBoYW5kbGVDaGlsZE5vZGVFeHBhbmQobm9kZURhdGEsIG5vZGUsIGluc3RhbmNlKSB7XG4gICAgICB0aGlzLmJyb2FkY2FzdCgnRWxUcmVlTm9kZScsICd0cmVlLW5vZGUtZXhwYW5kJywgbm9kZSk7XG4gICAgICB0aGlzLnRyZWUuJGVtaXQoJ25vZGUtZXhwYW5kJywgbm9kZURhdGEsIG5vZGUsIGluc3RhbmNlKTtcbiAgICB9LFxuICAgIGhhbmRsZURyYWdTdGFydDogZnVuY3Rpb24gaGFuZGxlRHJhZ1N0YXJ0KGV2ZW50KSB7XG4gICAgICBpZiAoIXRoaXMudHJlZS5kcmFnZ2FibGUpIHJldHVybjtcbiAgICAgIHRoaXMudHJlZS4kZW1pdCgndHJlZS1ub2RlLWRyYWctc3RhcnQnLCBldmVudCwgdGhpcyk7XG4gICAgfSxcbiAgICBoYW5kbGVEcmFnT3ZlcjogZnVuY3Rpb24gaGFuZGxlRHJhZ092ZXIoZXZlbnQpIHtcbiAgICAgIGlmICghdGhpcy50cmVlLmRyYWdnYWJsZSkgcmV0dXJuO1xuICAgICAgdGhpcy50cmVlLiRlbWl0KCd0cmVlLW5vZGUtZHJhZy1vdmVyJywgZXZlbnQsIHRoaXMpO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9LFxuICAgIGhhbmRsZURyb3A6IGZ1bmN0aW9uIGhhbmRsZURyb3AoZXZlbnQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfSxcbiAgICBoYW5kbGVEcmFnRW5kOiBmdW5jdGlvbiBoYW5kbGVEcmFnRW5kKGV2ZW50KSB7XG4gICAgICBpZiAoIXRoaXMudHJlZS5kcmFnZ2FibGUpIHJldHVybjtcbiAgICAgIHRoaXMudHJlZS4kZW1pdCgndHJlZS1ub2RlLWRyYWctZW5kJywgZXZlbnQsIHRoaXMpO1xuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkOiBmdW5jdGlvbiBjcmVhdGVkKCkge1xuICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgdmFyIHBhcmVudCA9IHRoaXMuJHBhcmVudDtcblxuICAgIGlmIChwYXJlbnQuaXNUcmVlKSB7XG4gICAgICB0aGlzLnRyZWUgPSBwYXJlbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudHJlZSA9IHBhcmVudC50cmVlO1xuICAgIH1cblxuICAgIHZhciB0cmVlID0gdGhpcy50cmVlO1xuICAgIGlmICghdHJlZSkge1xuICAgICAgY29uc29sZS53YXJuKCdDYW4gbm90IGZpbmQgbm9kZVxcJ3MgdHJlZS4nKTtcbiAgICB9XG5cbiAgICB2YXIgcHJvcHMgPSB0cmVlLnByb3BzIHx8IHt9O1xuICAgIHZhciBjaGlsZHJlbktleSA9IHByb3BzWydjaGlsZHJlbiddIHx8ICdjaGlsZHJlbic7XG5cbiAgICB0aGlzLiR3YXRjaCgnbm9kZS5kYXRhLicgKyBjaGlsZHJlbktleSwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMzLm5vZGUudXBkYXRlQ2hpbGRyZW4oKTtcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLm5vZGUuZXhwYW5kZWQpIHtcbiAgICAgIHRoaXMuZXhwYW5kZWQgPSB0cnVlO1xuICAgICAgdGhpcy5jaGlsZE5vZGVSZW5kZXJlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudHJlZS5hY2NvcmRpb24pIHtcbiAgICAgIHRoaXMuJG9uKCd0cmVlLW5vZGUtZXhwYW5kJywgZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgaWYgKF90aGlzMy5ub2RlICE9PSBub2RlKSB7XG4gICAgICAgICAgX3RoaXMzLm5vZGUuY29sbGFwc2UoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdHJlZS9zcmMvdHJlZS1ub2RlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfdHJlZV9ub2RldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHRyZWVfbm9kZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy90cmVlL3NyYy90cmVlLW5vZGUudnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgdHJlZV9ub2RlX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgc3JjX3RyZWVfbm9kZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgdHJlZV9ub2RldnVlX3R5cGVfdGVtcGxhdGVfaWRfM2JhM2VmMGVfcmVuZGVyLFxuICB0cmVlX25vZGV2dWVfdHlwZV90ZW1wbGF0ZV9pZF8zYmEzZWYwZV9zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIHRyZWVfbm9kZV9hcGk7IH1cbnRyZWVfbm9kZV9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL3RyZWUvc3JjL3RyZWUtbm9kZS52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgdHJlZV9ub2RlID0gKHRyZWVfbm9kZV9jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy90cmVlL3NyYy90cmVlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5cblxuXG5cblxuXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHRyZWV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBuYW1lOiAnRWxUcmVlJyxcblxuICBtaXhpbnM6IFtlbWl0dGVyX2RlZmF1bHQuYV0sXG5cbiAgY29tcG9uZW50czoge1xuICAgIEVsVHJlZU5vZGU6IHRyZWVfbm9kZVxuICB9LFxuXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0b3JlOiBudWxsLFxuICAgICAgcm9vdDogbnVsbCxcbiAgICAgIGN1cnJlbnROb2RlOiBudWxsLFxuICAgICAgdHJlZUl0ZW1zOiBudWxsLFxuICAgICAgY2hlY2tib3hJdGVtczogW10sXG4gICAgICBkcmFnU3RhdGU6IHtcbiAgICAgICAgc2hvd0Ryb3BJbmRpY2F0b3I6IGZhbHNlLFxuICAgICAgICBkcmFnZ2luZ05vZGU6IG51bGwsXG4gICAgICAgIGRyb3BOb2RlOiBudWxsLFxuICAgICAgICBhbGxvd0Ryb3A6IHRydWVcbiAgICAgIH1cbiAgICB9O1xuICB9LFxuXG5cbiAgcHJvcHM6IHtcbiAgICBkYXRhOiB7XG4gICAgICB0eXBlOiBBcnJheVxuICAgIH0sXG4gICAgZW1wdHlUZXh0OiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdChsaWJfbG9jYWxlX1tcInRcIl0pKCdlbC50cmVlLmVtcHR5VGV4dCcpO1xuICAgICAgfVxuICAgIH0sXG4gICAgcmVuZGVyQWZ0ZXJFeHBhbmQ6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSxcbiAgICBub2RlS2V5OiBTdHJpbmcsXG4gICAgY2hlY2tTdHJpY3RseTogQm9vbGVhbixcbiAgICBkZWZhdWx0RXhwYW5kQWxsOiBCb29sZWFuLFxuICAgIGV4cGFuZE9uQ2xpY2tOb2RlOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0sXG4gICAgY2hlY2tPbkNsaWNrTm9kZTogQm9vbGVhbixcbiAgICBjaGVja0Rlc2NlbmRhbnRzOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9LFxuICAgIGF1dG9FeHBhbmRQYXJlbnQ6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSxcbiAgICBkZWZhdWx0Q2hlY2tlZEtleXM6IEFycmF5LFxuICAgIGRlZmF1bHRFeHBhbmRlZEtleXM6IEFycmF5LFxuICAgIGN1cnJlbnROb2RlS2V5OiBbU3RyaW5nLCBOdW1iZXJdLFxuICAgIHJlbmRlckNvbnRlbnQ6IEZ1bmN0aW9uLFxuICAgIHNob3dDaGVja2JveDoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSxcbiAgICBkcmFnZ2FibGU6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0sXG4gICAgYWxsb3dEcmFnOiBGdW5jdGlvbixcbiAgICBhbGxvd0Ryb3A6IEZ1bmN0aW9uLFxuICAgIHByb3BzOiB7XG4gICAgICBkZWZhdWx0OiBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjaGlsZHJlbjogJ2NoaWxkcmVuJyxcbiAgICAgICAgICBsYWJlbDogJ2xhYmVsJyxcbiAgICAgICAgICBkaXNhYmxlZDogJ2Rpc2FibGVkJ1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0sXG4gICAgbGF6eToge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSxcbiAgICBoaWdobGlnaHRDdXJyZW50OiBCb29sZWFuLFxuICAgIGxvYWQ6IEZ1bmN0aW9uLFxuICAgIGZpbHRlck5vZGVNZXRob2Q6IEZ1bmN0aW9uLFxuICAgIGFjY29yZGlvbjogQm9vbGVhbixcbiAgICBpbmRlbnQ6IHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGRlZmF1bHQ6IDE4XG4gICAgfSxcbiAgICBpY29uQ2xhc3M6IFN0cmluZ1xuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgY2hpbGRyZW46IHtcbiAgICAgIHNldDogZnVuY3Rpb24gc2V0KHZhbHVlKSB7XG4gICAgICAgIHRoaXMuZGF0YSA9IHZhbHVlO1xuICAgICAgfSxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICB0cmVlSXRlbUFycmF5OiBmdW5jdGlvbiB0cmVlSXRlbUFycmF5KCkge1xuICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMudHJlZUl0ZW1zKTtcbiAgICB9LFxuICAgIGlzRW1wdHk6IGZ1bmN0aW9uIGlzRW1wdHkoKSB7XG4gICAgICB2YXIgY2hpbGROb2RlcyA9IHRoaXMucm9vdC5jaGlsZE5vZGVzO1xuXG4gICAgICByZXR1cm4gIWNoaWxkTm9kZXMgfHwgY2hpbGROb2Rlcy5sZW5ndGggPT09IDAgfHwgY2hpbGROb2Rlcy5ldmVyeShmdW5jdGlvbiAoX3JlZikge1xuICAgICAgICB2YXIgdmlzaWJsZSA9IF9yZWYudmlzaWJsZTtcbiAgICAgICAgcmV0dXJuICF2aXNpYmxlO1xuICAgICAgfSk7XG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgZGVmYXVsdENoZWNrZWRLZXlzOiBmdW5jdGlvbiBkZWZhdWx0Q2hlY2tlZEtleXMobmV3VmFsKSB7XG4gICAgICB0aGlzLnN0b3JlLnNldERlZmF1bHRDaGVja2VkS2V5KG5ld1ZhbCk7XG4gICAgfSxcbiAgICBkZWZhdWx0RXhwYW5kZWRLZXlzOiBmdW5jdGlvbiBkZWZhdWx0RXhwYW5kZWRLZXlzKG5ld1ZhbCkge1xuICAgICAgdGhpcy5zdG9yZS5kZWZhdWx0RXhwYW5kZWRLZXlzID0gbmV3VmFsO1xuICAgICAgdGhpcy5zdG9yZS5zZXREZWZhdWx0RXhwYW5kZWRLZXlzKG5ld1ZhbCk7XG4gICAgfSxcbiAgICBkYXRhOiBmdW5jdGlvbiBkYXRhKG5ld1ZhbCkge1xuICAgICAgdGhpcy5zdG9yZS5zZXREYXRhKG5ld1ZhbCk7XG4gICAgfSxcbiAgICBjaGVja2JveEl0ZW1zOiBmdW5jdGlvbiBjaGVja2JveEl0ZW1zKHZhbCkge1xuICAgICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbCh2YWwsIGZ1bmN0aW9uIChjaGVja2JveCkge1xuICAgICAgICBjaGVja2JveC5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgLTEpO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBjaGVja1N0cmljdGx5OiBmdW5jdGlvbiBjaGVja1N0cmljdGx5KG5ld1ZhbCkge1xuICAgICAgdGhpcy5zdG9yZS5jaGVja1N0cmljdGx5ID0gbmV3VmFsO1xuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIodmFsdWUpIHtcbiAgICAgIGlmICghdGhpcy5maWx0ZXJOb2RlTWV0aG9kKSB0aHJvdyBuZXcgRXJyb3IoJ1tUcmVlXSBmaWx0ZXJOb2RlTWV0aG9kIGlzIHJlcXVpcmVkIHdoZW4gZmlsdGVyJyk7XG4gICAgICB0aGlzLnN0b3JlLmZpbHRlcih2YWx1ZSk7XG4gICAgfSxcbiAgICBnZXROb2RlS2V5OiBmdW5jdGlvbiBnZXROb2RlS2V5KG5vZGUpIHtcbiAgICAgIHJldHVybiB1dGlsX2dldE5vZGVLZXkodGhpcy5ub2RlS2V5LCBub2RlLmRhdGEpO1xuICAgIH0sXG4gICAgZ2V0Tm9kZVBhdGg6IGZ1bmN0aW9uIGdldE5vZGVQYXRoKGRhdGEpIHtcbiAgICAgIGlmICghdGhpcy5ub2RlS2V5KSB0aHJvdyBuZXcgRXJyb3IoJ1tUcmVlXSBub2RlS2V5IGlzIHJlcXVpcmVkIGluIGdldE5vZGVQYXRoJyk7XG4gICAgICB2YXIgbm9kZSA9IHRoaXMuc3RvcmUuZ2V0Tm9kZShkYXRhKTtcbiAgICAgIGlmICghbm9kZSkgcmV0dXJuIFtdO1xuICAgICAgdmFyIHBhdGggPSBbbm9kZS5kYXRhXTtcbiAgICAgIHZhciBwYXJlbnQgPSBub2RlLnBhcmVudDtcbiAgICAgIHdoaWxlIChwYXJlbnQgJiYgcGFyZW50ICE9PSB0aGlzLnJvb3QpIHtcbiAgICAgICAgcGF0aC5wdXNoKHBhcmVudC5kYXRhKTtcbiAgICAgICAgcGFyZW50ID0gcGFyZW50LnBhcmVudDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwYXRoLnJldmVyc2UoKTtcbiAgICB9LFxuICAgIGdldENoZWNrZWROb2RlczogZnVuY3Rpb24gZ2V0Q2hlY2tlZE5vZGVzKGxlYWZPbmx5LCBpbmNsdWRlSGFsZkNoZWNrZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0b3JlLmdldENoZWNrZWROb2RlcyhsZWFmT25seSwgaW5jbHVkZUhhbGZDaGVja2VkKTtcbiAgICB9LFxuICAgIGdldENoZWNrZWRLZXlzOiBmdW5jdGlvbiBnZXRDaGVja2VkS2V5cyhsZWFmT25seSkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RvcmUuZ2V0Q2hlY2tlZEtleXMobGVhZk9ubHkpO1xuICAgIH0sXG4gICAgZ2V0Q3VycmVudE5vZGU6IGZ1bmN0aW9uIGdldEN1cnJlbnROb2RlKCkge1xuICAgICAgdmFyIGN1cnJlbnROb2RlID0gdGhpcy5zdG9yZS5nZXRDdXJyZW50Tm9kZSgpO1xuICAgICAgcmV0dXJuIGN1cnJlbnROb2RlID8gY3VycmVudE5vZGUuZGF0YSA6IG51bGw7XG4gICAgfSxcbiAgICBnZXRDdXJyZW50S2V5OiBmdW5jdGlvbiBnZXRDdXJyZW50S2V5KCkge1xuICAgICAgaWYgKCF0aGlzLm5vZGVLZXkpIHRocm93IG5ldyBFcnJvcignW1RyZWVdIG5vZGVLZXkgaXMgcmVxdWlyZWQgaW4gZ2V0Q3VycmVudEtleScpO1xuICAgICAgdmFyIGN1cnJlbnROb2RlID0gdGhpcy5nZXRDdXJyZW50Tm9kZSgpO1xuICAgICAgcmV0dXJuIGN1cnJlbnROb2RlID8gY3VycmVudE5vZGVbdGhpcy5ub2RlS2V5XSA6IG51bGw7XG4gICAgfSxcbiAgICBzZXRDaGVja2VkTm9kZXM6IGZ1bmN0aW9uIHNldENoZWNrZWROb2Rlcyhub2RlcywgbGVhZk9ubHkpIHtcbiAgICAgIGlmICghdGhpcy5ub2RlS2V5KSB0aHJvdyBuZXcgRXJyb3IoJ1tUcmVlXSBub2RlS2V5IGlzIHJlcXVpcmVkIGluIHNldENoZWNrZWROb2RlcycpO1xuICAgICAgdGhpcy5zdG9yZS5zZXRDaGVja2VkTm9kZXMobm9kZXMsIGxlYWZPbmx5KTtcbiAgICB9LFxuICAgIHNldENoZWNrZWRLZXlzOiBmdW5jdGlvbiBzZXRDaGVja2VkS2V5cyhrZXlzLCBsZWFmT25seSkge1xuICAgICAgaWYgKCF0aGlzLm5vZGVLZXkpIHRocm93IG5ldyBFcnJvcignW1RyZWVdIG5vZGVLZXkgaXMgcmVxdWlyZWQgaW4gc2V0Q2hlY2tlZEtleXMnKTtcbiAgICAgIHRoaXMuc3RvcmUuc2V0Q2hlY2tlZEtleXMoa2V5cywgbGVhZk9ubHkpO1xuICAgIH0sXG4gICAgc2V0Q2hlY2tlZDogZnVuY3Rpb24gc2V0Q2hlY2tlZChkYXRhLCBjaGVja2VkLCBkZWVwKSB7XG4gICAgICB0aGlzLnN0b3JlLnNldENoZWNrZWQoZGF0YSwgY2hlY2tlZCwgZGVlcCk7XG4gICAgfSxcbiAgICBnZXRIYWxmQ2hlY2tlZE5vZGVzOiBmdW5jdGlvbiBnZXRIYWxmQ2hlY2tlZE5vZGVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RvcmUuZ2V0SGFsZkNoZWNrZWROb2RlcygpO1xuICAgIH0sXG4gICAgZ2V0SGFsZkNoZWNrZWRLZXlzOiBmdW5jdGlvbiBnZXRIYWxmQ2hlY2tlZEtleXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zdG9yZS5nZXRIYWxmQ2hlY2tlZEtleXMoKTtcbiAgICB9LFxuICAgIHNldEN1cnJlbnROb2RlOiBmdW5jdGlvbiBzZXRDdXJyZW50Tm9kZShub2RlKSB7XG4gICAgICBpZiAoIXRoaXMubm9kZUtleSkgdGhyb3cgbmV3IEVycm9yKCdbVHJlZV0gbm9kZUtleSBpcyByZXF1aXJlZCBpbiBzZXRDdXJyZW50Tm9kZScpO1xuICAgICAgdGhpcy5zdG9yZS5zZXRVc2VyQ3VycmVudE5vZGUobm9kZSk7XG4gICAgfSxcbiAgICBzZXRDdXJyZW50S2V5OiBmdW5jdGlvbiBzZXRDdXJyZW50S2V5KGtleSkge1xuICAgICAgaWYgKCF0aGlzLm5vZGVLZXkpIHRocm93IG5ldyBFcnJvcignW1RyZWVdIG5vZGVLZXkgaXMgcmVxdWlyZWQgaW4gc2V0Q3VycmVudEtleScpO1xuICAgICAgdGhpcy5zdG9yZS5zZXRDdXJyZW50Tm9kZUtleShrZXkpO1xuICAgIH0sXG4gICAgZ2V0Tm9kZTogZnVuY3Rpb24gZ2V0Tm9kZShkYXRhKSB7XG4gICAgICByZXR1cm4gdGhpcy5zdG9yZS5nZXROb2RlKGRhdGEpO1xuICAgIH0sXG4gICAgcmVtb3ZlOiBmdW5jdGlvbiByZW1vdmUoZGF0YSkge1xuICAgICAgdGhpcy5zdG9yZS5yZW1vdmUoZGF0YSk7XG4gICAgfSxcbiAgICBhcHBlbmQ6IGZ1bmN0aW9uIGFwcGVuZChkYXRhLCBwYXJlbnROb2RlKSB7XG4gICAgICB0aGlzLnN0b3JlLmFwcGVuZChkYXRhLCBwYXJlbnROb2RlKTtcbiAgICB9LFxuICAgIGluc2VydEJlZm9yZTogZnVuY3Rpb24gaW5zZXJ0QmVmb3JlKGRhdGEsIHJlZk5vZGUpIHtcbiAgICAgIHRoaXMuc3RvcmUuaW5zZXJ0QmVmb3JlKGRhdGEsIHJlZk5vZGUpO1xuICAgIH0sXG4gICAgaW5zZXJ0QWZ0ZXI6IGZ1bmN0aW9uIGluc2VydEFmdGVyKGRhdGEsIHJlZk5vZGUpIHtcbiAgICAgIHRoaXMuc3RvcmUuaW5zZXJ0QWZ0ZXIoZGF0YSwgcmVmTm9kZSk7XG4gICAgfSxcbiAgICBoYW5kbGVOb2RlRXhwYW5kOiBmdW5jdGlvbiBoYW5kbGVOb2RlRXhwYW5kKG5vZGVEYXRhLCBub2RlLCBpbnN0YW5jZSkge1xuICAgICAgdGhpcy5icm9hZGNhc3QoJ0VsVHJlZU5vZGUnLCAndHJlZS1ub2RlLWV4cGFuZCcsIG5vZGUpO1xuICAgICAgdGhpcy4kZW1pdCgnbm9kZS1leHBhbmQnLCBub2RlRGF0YSwgbm9kZSwgaW5zdGFuY2UpO1xuICAgIH0sXG4gICAgdXBkYXRlS2V5Q2hpbGRyZW46IGZ1bmN0aW9uIHVwZGF0ZUtleUNoaWxkcmVuKGtleSwgZGF0YSkge1xuICAgICAgaWYgKCF0aGlzLm5vZGVLZXkpIHRocm93IG5ldyBFcnJvcignW1RyZWVdIG5vZGVLZXkgaXMgcmVxdWlyZWQgaW4gdXBkYXRlS2V5Q2hpbGQnKTtcbiAgICAgIHRoaXMuc3RvcmUudXBkYXRlQ2hpbGRyZW4oa2V5LCBkYXRhKTtcbiAgICB9LFxuICAgIGluaXRUYWJJbmRleDogZnVuY3Rpb24gaW5pdFRhYkluZGV4KCkge1xuICAgICAgdGhpcy50cmVlSXRlbXMgPSB0aGlzLiRlbC5xdWVyeVNlbGVjdG9yQWxsKCcuaXMtZm9jdXNhYmxlW3JvbGU9dHJlZWl0ZW1dJyk7XG4gICAgICB0aGlzLmNoZWNrYm94SXRlbXMgPSB0aGlzLiRlbC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dFt0eXBlPWNoZWNrYm94XScpO1xuICAgICAgdmFyIGNoZWNrZWRJdGVtID0gdGhpcy4kZWwucXVlcnlTZWxlY3RvckFsbCgnLmlzLWNoZWNrZWRbcm9sZT10cmVlaXRlbV0nKTtcbiAgICAgIGlmIChjaGVja2VkSXRlbS5sZW5ndGgpIHtcbiAgICAgICAgY2hlY2tlZEl0ZW1bMF0uc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsIDApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLnRyZWVJdGVtc1swXSAmJiB0aGlzLnRyZWVJdGVtc1swXS5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgMCk7XG4gICAgfSxcbiAgICBoYW5kbGVLZXlkb3duOiBmdW5jdGlvbiBoYW5kbGVLZXlkb3duKGV2KSB7XG4gICAgICB2YXIgY3VycmVudEl0ZW0gPSBldi50YXJnZXQ7XG4gICAgICBpZiAoY3VycmVudEl0ZW0uY2xhc3NOYW1lLmluZGV4T2YoJ2VsLXRyZWUtbm9kZScpID09PSAtMSkgcmV0dXJuO1xuICAgICAgdmFyIGtleUNvZGUgPSBldi5rZXlDb2RlO1xuICAgICAgdGhpcy50cmVlSXRlbXMgPSB0aGlzLiRlbC5xdWVyeVNlbGVjdG9yQWxsKCcuaXMtZm9jdXNhYmxlW3JvbGU9dHJlZWl0ZW1dJyk7XG4gICAgICB2YXIgY3VycmVudEluZGV4ID0gdGhpcy50cmVlSXRlbUFycmF5LmluZGV4T2YoY3VycmVudEl0ZW0pO1xuICAgICAgdmFyIG5leHRJbmRleCA9IHZvaWQgMDtcbiAgICAgIGlmIChbMzgsIDQwXS5pbmRleE9mKGtleUNvZGUpID4gLTEpIHtcbiAgICAgICAgLy8gdXDjgIFkb3duXG4gICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGlmIChrZXlDb2RlID09PSAzOCkge1xuICAgICAgICAgIC8vIHVwXG4gICAgICAgICAgbmV4dEluZGV4ID0gY3VycmVudEluZGV4ICE9PSAwID8gY3VycmVudEluZGV4IC0gMSA6IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV4dEluZGV4ID0gY3VycmVudEluZGV4IDwgdGhpcy50cmVlSXRlbUFycmF5Lmxlbmd0aCAtIDEgPyBjdXJyZW50SW5kZXggKyAxIDogMDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRyZWVJdGVtQXJyYXlbbmV4dEluZGV4XS5mb2N1cygpOyAvLyDpgInkuK1cbiAgICAgIH1cbiAgICAgIGlmIChbMzcsIDM5XS5pbmRleE9mKGtleUNvZGUpID4gLTEpIHtcbiAgICAgICAgLy8gbGVmdOOAgXJpZ2h0IOWxleW8gFxuICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBjdXJyZW50SXRlbS5jbGljaygpOyAvLyDpgInkuK1cbiAgICAgIH1cbiAgICAgIHZhciBoYXNJbnB1dCA9IGN1cnJlbnRJdGVtLnF1ZXJ5U2VsZWN0b3IoJ1t0eXBlPVwiY2hlY2tib3hcIl0nKTtcbiAgICAgIGlmIChbMTMsIDMyXS5pbmRleE9mKGtleUNvZGUpID4gLTEgJiYgaGFzSW5wdXQpIHtcbiAgICAgICAgLy8gc3BhY2UgZW50ZXLpgInkuK1jaGVja2JveFxuICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBoYXNJbnB1dC5jbGljaygpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkOiBmdW5jdGlvbiBjcmVhdGVkKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB0aGlzLmlzVHJlZSA9IHRydWU7XG5cbiAgICB0aGlzLnN0b3JlID0gbmV3IHRyZWVfc3RvcmUoe1xuICAgICAga2V5OiB0aGlzLm5vZGVLZXksXG4gICAgICBkYXRhOiB0aGlzLmRhdGEsXG4gICAgICBsYXp5OiB0aGlzLmxhenksXG4gICAgICBwcm9wczogdGhpcy5wcm9wcyxcbiAgICAgIGxvYWQ6IHRoaXMubG9hZCxcbiAgICAgIGN1cnJlbnROb2RlS2V5OiB0aGlzLmN1cnJlbnROb2RlS2V5LFxuICAgICAgY2hlY2tTdHJpY3RseTogdGhpcy5jaGVja1N0cmljdGx5LFxuICAgICAgY2hlY2tEZXNjZW5kYW50czogdGhpcy5jaGVja0Rlc2NlbmRhbnRzLFxuICAgICAgZGVmYXVsdENoZWNrZWRLZXlzOiB0aGlzLmRlZmF1bHRDaGVja2VkS2V5cyxcbiAgICAgIGRlZmF1bHRFeHBhbmRlZEtleXM6IHRoaXMuZGVmYXVsdEV4cGFuZGVkS2V5cyxcbiAgICAgIGF1dG9FeHBhbmRQYXJlbnQ6IHRoaXMuYXV0b0V4cGFuZFBhcmVudCxcbiAgICAgIGRlZmF1bHRFeHBhbmRBbGw6IHRoaXMuZGVmYXVsdEV4cGFuZEFsbCxcbiAgICAgIGZpbHRlck5vZGVNZXRob2Q6IHRoaXMuZmlsdGVyTm9kZU1ldGhvZFxuICAgIH0pO1xuXG4gICAgdGhpcy5yb290ID0gdGhpcy5zdG9yZS5yb290O1xuXG4gICAgdmFyIGRyYWdTdGF0ZSA9IHRoaXMuZHJhZ1N0YXRlO1xuICAgIHRoaXMuJG9uKCd0cmVlLW5vZGUtZHJhZy1zdGFydCcsIGZ1bmN0aW9uIChldmVudCwgdHJlZU5vZGUpIHtcbiAgICAgIGlmICh0eXBlb2YgX3RoaXMuYWxsb3dEcmFnID09PSAnZnVuY3Rpb24nICYmICFfdGhpcy5hbGxvd0RyYWcodHJlZU5vZGUubm9kZSkpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgZXZlbnQuZGF0YVRyYW5zZmVyLmVmZmVjdEFsbG93ZWQgPSAnbW92ZSc7XG5cbiAgICAgIC8vIHdyYXAgaW4gdHJ5IGNhdGNoIHRvIGFkZHJlc3MgSUUncyBlcnJvciB3aGVuIGZpcnN0IHBhcmFtIGlzICd0ZXh0L3BsYWluJ1xuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gc2V0RGF0YSBpcyByZXF1aXJlZCBmb3IgZHJhZ2dhYmxlIHRvIHdvcmsgaW4gRmlyZUZveFxuICAgICAgICAvLyB0aGUgY29udGVudCBoYXMgdG8gYmUgJycgc28gZHJhZ2dpbmcgYSBub2RlIG91dCBvZiB0aGUgdHJlZSB3b24ndCBvcGVuIGEgbmV3IHRhYiBpbiBGaXJlRm94XG4gICAgICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5zZXREYXRhKCd0ZXh0L3BsYWluJywgJycpO1xuICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgIGRyYWdTdGF0ZS5kcmFnZ2luZ05vZGUgPSB0cmVlTm9kZTtcbiAgICAgIF90aGlzLiRlbWl0KCdub2RlLWRyYWctc3RhcnQnLCB0cmVlTm9kZS5ub2RlLCBldmVudCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLiRvbigndHJlZS1ub2RlLWRyYWctb3ZlcicsIGZ1bmN0aW9uIChldmVudCwgdHJlZU5vZGUpIHtcbiAgICAgIHZhciBkcm9wTm9kZSA9IGZpbmROZWFyZXN0Q29tcG9uZW50KGV2ZW50LnRhcmdldCwgJ0VsVHJlZU5vZGUnKTtcbiAgICAgIHZhciBvbGREcm9wTm9kZSA9IGRyYWdTdGF0ZS5kcm9wTm9kZTtcbiAgICAgIGlmIChvbGREcm9wTm9kZSAmJiBvbGREcm9wTm9kZSAhPT0gZHJvcE5vZGUpIHtcbiAgICAgICAgT2JqZWN0KGRvbV9bXCJyZW1vdmVDbGFzc1wiXSkob2xkRHJvcE5vZGUuJGVsLCAnaXMtZHJvcC1pbm5lcicpO1xuICAgICAgfVxuICAgICAgdmFyIGRyYWdnaW5nTm9kZSA9IGRyYWdTdGF0ZS5kcmFnZ2luZ05vZGU7XG4gICAgICBpZiAoIWRyYWdnaW5nTm9kZSB8fCAhZHJvcE5vZGUpIHJldHVybjtcblxuICAgICAgdmFyIGRyb3BQcmV2ID0gdHJ1ZTtcbiAgICAgIHZhciBkcm9wSW5uZXIgPSB0cnVlO1xuICAgICAgdmFyIGRyb3BOZXh0ID0gdHJ1ZTtcbiAgICAgIHZhciB1c2VyQWxsb3dEcm9wSW5uZXIgPSB0cnVlO1xuICAgICAgaWYgKHR5cGVvZiBfdGhpcy5hbGxvd0Ryb3AgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZHJvcFByZXYgPSBfdGhpcy5hbGxvd0Ryb3AoZHJhZ2dpbmdOb2RlLm5vZGUsIGRyb3BOb2RlLm5vZGUsICdwcmV2Jyk7XG4gICAgICAgIHVzZXJBbGxvd0Ryb3BJbm5lciA9IGRyb3BJbm5lciA9IF90aGlzLmFsbG93RHJvcChkcmFnZ2luZ05vZGUubm9kZSwgZHJvcE5vZGUubm9kZSwgJ2lubmVyJyk7XG4gICAgICAgIGRyb3BOZXh0ID0gX3RoaXMuYWxsb3dEcm9wKGRyYWdnaW5nTm9kZS5ub2RlLCBkcm9wTm9kZS5ub2RlLCAnbmV4dCcpO1xuICAgICAgfVxuICAgICAgZXZlbnQuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QgPSBkcm9wSW5uZXIgPyAnbW92ZScgOiAnbm9uZSc7XG4gICAgICBpZiAoKGRyb3BQcmV2IHx8IGRyb3BJbm5lciB8fCBkcm9wTmV4dCkgJiYgb2xkRHJvcE5vZGUgIT09IGRyb3BOb2RlKSB7XG4gICAgICAgIGlmIChvbGREcm9wTm9kZSkge1xuICAgICAgICAgIF90aGlzLiRlbWl0KCdub2RlLWRyYWctbGVhdmUnLCBkcmFnZ2luZ05vZGUubm9kZSwgb2xkRHJvcE5vZGUubm9kZSwgZXZlbnQpO1xuICAgICAgICB9XG4gICAgICAgIF90aGlzLiRlbWl0KCdub2RlLWRyYWctZW50ZXInLCBkcmFnZ2luZ05vZGUubm9kZSwgZHJvcE5vZGUubm9kZSwgZXZlbnQpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZHJvcFByZXYgfHwgZHJvcElubmVyIHx8IGRyb3BOZXh0KSB7XG4gICAgICAgIGRyYWdTdGF0ZS5kcm9wTm9kZSA9IGRyb3BOb2RlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZHJvcE5vZGUubm9kZS5uZXh0U2libGluZyA9PT0gZHJhZ2dpbmdOb2RlLm5vZGUpIHtcbiAgICAgICAgZHJvcE5leHQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChkcm9wTm9kZS5ub2RlLnByZXZpb3VzU2libGluZyA9PT0gZHJhZ2dpbmdOb2RlLm5vZGUpIHtcbiAgICAgICAgZHJvcFByZXYgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChkcm9wTm9kZS5ub2RlLmNvbnRhaW5zKGRyYWdnaW5nTm9kZS5ub2RlLCBmYWxzZSkpIHtcbiAgICAgICAgZHJvcElubmVyID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoZHJhZ2dpbmdOb2RlLm5vZGUgPT09IGRyb3BOb2RlLm5vZGUgfHwgZHJhZ2dpbmdOb2RlLm5vZGUuY29udGFpbnMoZHJvcE5vZGUubm9kZSkpIHtcbiAgICAgICAgZHJvcFByZXYgPSBmYWxzZTtcbiAgICAgICAgZHJvcElubmVyID0gZmFsc2U7XG4gICAgICAgIGRyb3BOZXh0ID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHZhciB0YXJnZXRQb3NpdGlvbiA9IGRyb3BOb2RlLiRlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIHZhciB0cmVlUG9zaXRpb24gPSBfdGhpcy4kZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgIHZhciBkcm9wVHlwZSA9IHZvaWQgMDtcbiAgICAgIHZhciBwcmV2UGVyY2VudCA9IGRyb3BQcmV2ID8gZHJvcElubmVyID8gMC4yNSA6IGRyb3BOZXh0ID8gMC40NSA6IDEgOiAtMTtcbiAgICAgIHZhciBuZXh0UGVyY2VudCA9IGRyb3BOZXh0ID8gZHJvcElubmVyID8gMC43NSA6IGRyb3BQcmV2ID8gMC41NSA6IDAgOiAxO1xuXG4gICAgICB2YXIgaW5kaWNhdG9yVG9wID0gLTk5OTk7XG4gICAgICB2YXIgZGlzdGFuY2UgPSBldmVudC5jbGllbnRZIC0gdGFyZ2V0UG9zaXRpb24udG9wO1xuICAgICAgaWYgKGRpc3RhbmNlIDwgdGFyZ2V0UG9zaXRpb24uaGVpZ2h0ICogcHJldlBlcmNlbnQpIHtcbiAgICAgICAgZHJvcFR5cGUgPSAnYmVmb3JlJztcbiAgICAgIH0gZWxzZSBpZiAoZGlzdGFuY2UgPiB0YXJnZXRQb3NpdGlvbi5oZWlnaHQgKiBuZXh0UGVyY2VudCkge1xuICAgICAgICBkcm9wVHlwZSA9ICdhZnRlcic7XG4gICAgICB9IGVsc2UgaWYgKGRyb3BJbm5lcikge1xuICAgICAgICBkcm9wVHlwZSA9ICdpbm5lcic7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkcm9wVHlwZSA9ICdub25lJztcbiAgICAgIH1cblxuICAgICAgdmFyIGljb25Qb3NpdGlvbiA9IGRyb3BOb2RlLiRlbC5xdWVyeVNlbGVjdG9yKCcuZWwtdHJlZS1ub2RlX19leHBhbmQtaWNvbicpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgdmFyIGRyb3BJbmRpY2F0b3IgPSBfdGhpcy4kcmVmcy5kcm9wSW5kaWNhdG9yO1xuICAgICAgaWYgKGRyb3BUeXBlID09PSAnYmVmb3JlJykge1xuICAgICAgICBpbmRpY2F0b3JUb3AgPSBpY29uUG9zaXRpb24udG9wIC0gdHJlZVBvc2l0aW9uLnRvcDtcbiAgICAgIH0gZWxzZSBpZiAoZHJvcFR5cGUgPT09ICdhZnRlcicpIHtcbiAgICAgICAgaW5kaWNhdG9yVG9wID0gaWNvblBvc2l0aW9uLmJvdHRvbSAtIHRyZWVQb3NpdGlvbi50b3A7XG4gICAgICB9XG4gICAgICBkcm9wSW5kaWNhdG9yLnN0eWxlLnRvcCA9IGluZGljYXRvclRvcCArICdweCc7XG4gICAgICBkcm9wSW5kaWNhdG9yLnN0eWxlLmxlZnQgPSBpY29uUG9zaXRpb24ucmlnaHQgLSB0cmVlUG9zaXRpb24ubGVmdCArICdweCc7XG5cbiAgICAgIGlmIChkcm9wVHlwZSA9PT0gJ2lubmVyJykge1xuICAgICAgICBPYmplY3QoZG9tX1tcImFkZENsYXNzXCJdKShkcm9wTm9kZS4kZWwsICdpcy1kcm9wLWlubmVyJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBPYmplY3QoZG9tX1tcInJlbW92ZUNsYXNzXCJdKShkcm9wTm9kZS4kZWwsICdpcy1kcm9wLWlubmVyJyk7XG4gICAgICB9XG5cbiAgICAgIGRyYWdTdGF0ZS5zaG93RHJvcEluZGljYXRvciA9IGRyb3BUeXBlID09PSAnYmVmb3JlJyB8fCBkcm9wVHlwZSA9PT0gJ2FmdGVyJztcbiAgICAgIGRyYWdTdGF0ZS5hbGxvd0Ryb3AgPSBkcmFnU3RhdGUuc2hvd0Ryb3BJbmRpY2F0b3IgfHwgdXNlckFsbG93RHJvcElubmVyO1xuICAgICAgZHJhZ1N0YXRlLmRyb3BUeXBlID0gZHJvcFR5cGU7XG4gICAgICBfdGhpcy4kZW1pdCgnbm9kZS1kcmFnLW92ZXInLCBkcmFnZ2luZ05vZGUubm9kZSwgZHJvcE5vZGUubm9kZSwgZXZlbnQpO1xuICAgIH0pO1xuXG4gICAgdGhpcy4kb24oJ3RyZWUtbm9kZS1kcmFnLWVuZCcsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgdmFyIGRyYWdnaW5nTm9kZSA9IGRyYWdTdGF0ZS5kcmFnZ2luZ05vZGUsXG4gICAgICAgICAgZHJvcFR5cGUgPSBkcmFnU3RhdGUuZHJvcFR5cGUsXG4gICAgICAgICAgZHJvcE5vZGUgPSBkcmFnU3RhdGUuZHJvcE5vZGU7XG5cbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9ICdtb3ZlJztcblxuICAgICAgaWYgKGRyYWdnaW5nTm9kZSAmJiBkcm9wTm9kZSkge1xuICAgICAgICB2YXIgZHJhZ2dpbmdOb2RlQ29weSA9IHsgZGF0YTogZHJhZ2dpbmdOb2RlLm5vZGUuZGF0YSB9O1xuICAgICAgICBpZiAoZHJvcFR5cGUgIT09ICdub25lJykge1xuICAgICAgICAgIGRyYWdnaW5nTm9kZS5ub2RlLnJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkcm9wVHlwZSA9PT0gJ2JlZm9yZScpIHtcbiAgICAgICAgICBkcm9wTm9kZS5ub2RlLnBhcmVudC5pbnNlcnRCZWZvcmUoZHJhZ2dpbmdOb2RlQ29weSwgZHJvcE5vZGUubm9kZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZHJvcFR5cGUgPT09ICdhZnRlcicpIHtcbiAgICAgICAgICBkcm9wTm9kZS5ub2RlLnBhcmVudC5pbnNlcnRBZnRlcihkcmFnZ2luZ05vZGVDb3B5LCBkcm9wTm9kZS5ub2RlKTtcbiAgICAgICAgfSBlbHNlIGlmIChkcm9wVHlwZSA9PT0gJ2lubmVyJykge1xuICAgICAgICAgIGRyb3BOb2RlLm5vZGUuaW5zZXJ0Q2hpbGQoZHJhZ2dpbmdOb2RlQ29weSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRyb3BUeXBlICE9PSAnbm9uZScpIHtcbiAgICAgICAgICBfdGhpcy5zdG9yZS5yZWdpc3Rlck5vZGUoZHJhZ2dpbmdOb2RlQ29weSk7XG4gICAgICAgIH1cblxuICAgICAgICBPYmplY3QoZG9tX1tcInJlbW92ZUNsYXNzXCJdKShkcm9wTm9kZS4kZWwsICdpcy1kcm9wLWlubmVyJyk7XG5cbiAgICAgICAgX3RoaXMuJGVtaXQoJ25vZGUtZHJhZy1lbmQnLCBkcmFnZ2luZ05vZGUubm9kZSwgZHJvcE5vZGUubm9kZSwgZHJvcFR5cGUsIGV2ZW50KTtcbiAgICAgICAgaWYgKGRyb3BUeXBlICE9PSAnbm9uZScpIHtcbiAgICAgICAgICBfdGhpcy4kZW1pdCgnbm9kZS1kcm9wJywgZHJhZ2dpbmdOb2RlLm5vZGUsIGRyb3BOb2RlLm5vZGUsIGRyb3BUeXBlLCBldmVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChkcmFnZ2luZ05vZGUgJiYgIWRyb3BOb2RlKSB7XG4gICAgICAgIF90aGlzLiRlbWl0KCdub2RlLWRyYWctZW5kJywgZHJhZ2dpbmdOb2RlLm5vZGUsIG51bGwsIGRyb3BUeXBlLCBldmVudCk7XG4gICAgICB9XG5cbiAgICAgIGRyYWdTdGF0ZS5zaG93RHJvcEluZGljYXRvciA9IGZhbHNlO1xuICAgICAgZHJhZ1N0YXRlLmRyYWdnaW5nTm9kZSA9IG51bGw7XG4gICAgICBkcmFnU3RhdGUuZHJvcE5vZGUgPSBudWxsO1xuICAgICAgZHJhZ1N0YXRlLmFsbG93RHJvcCA9IHRydWU7XG4gICAgfSk7XG4gIH0sXG4gIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7XG4gICAgdGhpcy5pbml0VGFiSW5kZXgoKTtcbiAgICB0aGlzLiRlbC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5oYW5kbGVLZXlkb3duKTtcbiAgfSxcbiAgdXBkYXRlZDogZnVuY3Rpb24gdXBkYXRlZCgpIHtcbiAgICB0aGlzLnRyZWVJdGVtcyA9IHRoaXMuJGVsLnF1ZXJ5U2VsZWN0b3JBbGwoJ1tyb2xlPXRyZWVpdGVtXScpO1xuICAgIHRoaXMuY2hlY2tib3hJdGVtcyA9IHRoaXMuJGVsLnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0W3R5cGU9Y2hlY2tib3hdJyk7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy90cmVlL3NyYy90cmVlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfdHJlZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh0cmVldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3RyZWUvc3JjL3RyZWUudnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgdHJlZV9jb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIHNyY190cmVldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICB0cmVldnVlX3R5cGVfdGVtcGxhdGVfaWRfNTQ3NTc1YTZfcmVuZGVyLFxuICB0cmVldnVlX3R5cGVfdGVtcGxhdGVfaWRfNTQ3NTc1YTZfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciB0cmVlX2FwaTsgfVxudHJlZV9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL3RyZWUvc3JjL3RyZWUudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY190cmVlID0gKHRyZWVfY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy90cmVlL2luZGV4LmpzXG5cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbnNyY190cmVlLmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG4gIFZ1ZS5jb21wb25lbnQoc3JjX3RyZWUubmFtZSwgc3JjX3RyZWUpO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcGFja2FnZXNfdHJlZSA9IChzcmNfdHJlZSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2FsZXJ0L3NyYy9tYWluLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02ZTUzMzQxYiZcbnZhciBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfNmU1MzM0MWJfcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFwidHJhbnNpdGlvblwiLCB7IGF0dHJzOiB7IG5hbWU6IFwiZWwtYWxlcnQtZmFkZVwiIH0gfSwgW1xuICAgIF9jKFxuICAgICAgXCJkaXZcIixcbiAgICAgIHtcbiAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgIHZhbHVlOiBfdm0udmlzaWJsZSxcbiAgICAgICAgICAgIGV4cHJlc3Npb246IFwidmlzaWJsZVwiXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1hbGVydFwiLFxuICAgICAgICBjbGFzczogW1xuICAgICAgICAgIF92bS50eXBlQ2xhc3MsXG4gICAgICAgICAgX3ZtLmNlbnRlciA/IFwiaXMtY2VudGVyXCIgOiBcIlwiLFxuICAgICAgICAgIFwiaXMtXCIgKyBfdm0uZWZmZWN0XG4gICAgICAgIF0sXG4gICAgICAgIGF0dHJzOiB7IHJvbGU6IFwiYWxlcnRcIiB9XG4gICAgICB9LFxuICAgICAgW1xuICAgICAgICBfdm0uc2hvd0ljb25cbiAgICAgICAgICA/IF9jKFwiaVwiLCB7XG4gICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWFsZXJ0X19pY29uXCIsXG4gICAgICAgICAgICAgIGNsYXNzOiBbX3ZtLmljb25DbGFzcywgX3ZtLmlzQmlnSWNvbl1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJlbC1hbGVydF9fY29udGVudFwiIH0sIFtcbiAgICAgICAgICBfdm0udGl0bGUgfHwgX3ZtLiRzbG90cy50aXRsZVxuICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiBcImVsLWFsZXJ0X190aXRsZVwiLCBjbGFzczogW192bS5pc0JvbGRUaXRsZV0gfSxcbiAgICAgICAgICAgICAgICBbX3ZtLl90KFwidGl0bGVcIiwgW192bS5fdihfdm0uX3MoX3ZtLnRpdGxlKSldKV0sXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgIF92bS4kc2xvdHMuZGVmYXVsdCAmJiAhX3ZtLmRlc2NyaXB0aW9uXG4gICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgIFwicFwiLFxuICAgICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwiZWwtYWxlcnRfX2Rlc2NyaXB0aW9uXCIgfSxcbiAgICAgICAgICAgICAgICBbX3ZtLl90KFwiZGVmYXVsdFwiKV0sXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgIF92bS5kZXNjcmlwdGlvbiAmJiAhX3ZtLiRzbG90cy5kZWZhdWx0XG4gICAgICAgICAgICA/IF9jKFwicFwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLWFsZXJ0X19kZXNjcmlwdGlvblwiIH0sIFtcbiAgICAgICAgICAgICAgICBfdm0uX3YoX3ZtLl9zKF92bS5kZXNjcmlwdGlvbikpXG4gICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJpXCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLmNsb3NhYmxlLFxuICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJjbG9zYWJsZVwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1hbGVydF9fY2xvc2VidG5cIixcbiAgICAgICAgICAgICAgY2xhc3M6IHtcbiAgICAgICAgICAgICAgICBcImlzLWN1c3RvbWVkXCI6IF92bS5jbG9zZVRleHQgIT09IFwiXCIsXG4gICAgICAgICAgICAgICAgXCJlbC1pY29uLWNsb3NlXCI6IF92bS5jbG9zZVRleHQgPT09IFwiXCJcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICBfdm0uY2xvc2UoKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtfdm0uX3YoX3ZtLl9zKF92bS5jbG9zZVRleHQpKV1cbiAgICAgICAgICApXG4gICAgICAgIF0pXG4gICAgICBdXG4gICAgKVxuICBdKVxufVxudmFyIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF82ZTUzMzQxYl9zdGF0aWNSZW5kZXJGbnMgPSBbXVxubWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzZlNTMzNDFiX3JlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvYWxlcnQvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTZlNTMzNDFiJlxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9hbGVydC9zcmMvbWFpbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbnZhciBUWVBFX0NMQVNTRVNfTUFQID0ge1xuICAnc3VjY2Vzcyc6ICdlbC1pY29uLXN1Y2Nlc3MnLFxuICAnd2FybmluZyc6ICdlbC1pY29uLXdhcm5pbmcnLFxuICAnZXJyb3InOiAnZWwtaWNvbi1lcnJvcidcbn07XG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBhbGVydF9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG5hbWU6ICdFbEFsZXJ0JyxcblxuICBwcm9wczoge1xuICAgIHRpdGxlOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnJ1xuICAgIH0sXG4gICAgZGVzY3JpcHRpb246IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICcnXG4gICAgfSxcbiAgICB0eXBlOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnaW5mbydcbiAgICB9LFxuICAgIGNsb3NhYmxlOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0sXG4gICAgY2xvc2VUZXh0OiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnJ1xuICAgIH0sXG4gICAgc2hvd0ljb246IEJvb2xlYW4sXG4gICAgY2VudGVyOiBCb29sZWFuLFxuICAgIGVmZmVjdDoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2xpZ2h0JyxcbiAgICAgIHZhbGlkYXRvcjogZnVuY3Rpb24gdmFsaWRhdG9yKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBbJ2xpZ2h0JywgJ2RhcmsnXS5pbmRleE9mKHZhbHVlKSAhPT0gLTE7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZpc2libGU6IHRydWVcbiAgICB9O1xuICB9LFxuXG5cbiAgbWV0aG9kczoge1xuICAgIGNsb3NlOiBmdW5jdGlvbiBjbG9zZSgpIHtcbiAgICAgIHRoaXMudmlzaWJsZSA9IGZhbHNlO1xuICAgICAgdGhpcy4kZW1pdCgnY2xvc2UnKTtcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB0eXBlQ2xhc3M6IGZ1bmN0aW9uIHR5cGVDbGFzcygpIHtcbiAgICAgIHJldHVybiAnZWwtYWxlcnQtLScgKyB0aGlzLnR5cGU7XG4gICAgfSxcbiAgICBpY29uQ2xhc3M6IGZ1bmN0aW9uIGljb25DbGFzcygpIHtcbiAgICAgIHJldHVybiBUWVBFX0NMQVNTRVNfTUFQW3RoaXMudHlwZV0gfHwgJ2VsLWljb24taW5mbyc7XG4gICAgfSxcbiAgICBpc0JpZ0ljb246IGZ1bmN0aW9uIGlzQmlnSWNvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmRlc2NyaXB0aW9uIHx8IHRoaXMuJHNsb3RzLmRlZmF1bHQgPyAnaXMtYmlnJyA6ICcnO1xuICAgIH0sXG4gICAgaXNCb2xkVGl0bGU6IGZ1bmN0aW9uIGlzQm9sZFRpdGxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGVzY3JpcHRpb24gfHwgdGhpcy4kc2xvdHMuZGVmYXVsdCA/ICdpcy1ib2xkJyA6ICcnO1xuICAgIH1cbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2FsZXJ0L3NyYy9tYWluLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc19hbGVydF9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChhbGVydF9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9hbGVydC9zcmMvbWFpbi52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBhbGVydF9zcmNfbWFpbl9jb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIHBhY2thZ2VzX2FsZXJ0X3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfNmU1MzM0MWJfcmVuZGVyLFxuICBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfNmU1MzM0MWJfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBhbGVydF9zcmNfbWFpbl9hcGk7IH1cbmFsZXJ0X3NyY19tYWluX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvYWxlcnQvc3JjL21haW4udnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGFsZXJ0X3NyY19tYWluID0gKGFsZXJ0X3NyY19tYWluX2NvbXBvbmVudC5leHBvcnRzKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvYWxlcnQvaW5kZXguanNcblxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuYWxlcnRfc3JjX21haW4uaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcbiAgVnVlLmNvbXBvbmVudChhbGVydF9zcmNfbWFpbi5uYW1lLCBhbGVydF9zcmNfbWFpbik7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc19hbGVydCA9IChhbGVydF9zcmNfbWFpbik7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL25vdGlmaWNhdGlvbi9zcmMvbWFpbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NDNkYmMzZDgmXG52YXIgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzQzZGJjM2Q4X3JlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcInRyYW5zaXRpb25cIiwgeyBhdHRyczogeyBuYW1lOiBcImVsLW5vdGlmaWNhdGlvbi1mYWRlXCIgfSB9LCBbXG4gICAgX2MoXG4gICAgICBcImRpdlwiLFxuICAgICAge1xuICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgdmFsdWU6IF92bS52aXNpYmxlLFxuICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJ2aXNpYmxlXCJcbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIGNsYXNzOiBbXCJlbC1ub3RpZmljYXRpb25cIiwgX3ZtLmN1c3RvbUNsYXNzLCBfdm0uaG9yaXpvbnRhbENsYXNzXSxcbiAgICAgICAgc3R5bGU6IF92bS5wb3NpdGlvblN0eWxlLFxuICAgICAgICBhdHRyczogeyByb2xlOiBcImFsZXJ0XCIgfSxcbiAgICAgICAgb246IHtcbiAgICAgICAgICBtb3VzZWVudGVyOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgIF92bS5jbGVhclRpbWVyKClcbiAgICAgICAgICB9LFxuICAgICAgICAgIG1vdXNlbGVhdmU6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgX3ZtLnN0YXJ0VGltZXIoKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgY2xpY2s6IF92bS5jbGlja1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgW1xuICAgICAgICBfdm0udHlwZSB8fCBfdm0uaWNvbkNsYXNzXG4gICAgICAgICAgPyBfYyhcImlcIiwge1xuICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1ub3RpZmljYXRpb25fX2ljb25cIixcbiAgICAgICAgICAgICAgY2xhc3M6IFtfdm0udHlwZUNsYXNzLCBfdm0uaWNvbkNsYXNzXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICBfYyhcbiAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLW5vdGlmaWNhdGlvbl9fZ3JvdXBcIixcbiAgICAgICAgICAgIGNsYXNzOiB7IFwiaXMtd2l0aC1pY29uXCI6IF92bS50eXBlQ2xhc3MgfHwgX3ZtLmljb25DbGFzcyB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBbXG4gICAgICAgICAgICBfYyhcImgyXCIsIHtcbiAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtbm90aWZpY2F0aW9uX190aXRsZVwiLFxuICAgICAgICAgICAgICBkb21Qcm9wczogeyB0ZXh0Q29udGVudDogX3ZtLl9zKF92bS50aXRsZSkgfVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0ubWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJtZXNzYWdlXCJcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLW5vdGlmaWNhdGlvbl9fY29udGVudFwiXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBfdm0uX3QoXCJkZWZhdWx0XCIsIFtcbiAgICAgICAgICAgICAgICAgICFfdm0uZGFuZ2Vyb3VzbHlVc2VIVE1MU3RyaW5nXG4gICAgICAgICAgICAgICAgICAgID8gX2MoXCJwXCIsIFtfdm0uX3YoX3ZtLl9zKF92bS5tZXNzYWdlKSldKVxuICAgICAgICAgICAgICAgICAgICA6IF9jKFwicFwiLCB7IGRvbVByb3BzOiB7IGlubmVySFRNTDogX3ZtLl9zKF92bS5tZXNzYWdlKSB9IH0pXG4gICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIF92bS5zaG93Q2xvc2VcbiAgICAgICAgICAgICAgPyBfYyhcImRpdlwiLCB7XG4gICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1ub3RpZmljYXRpb25fX2Nsb3NlQnRuIGVsLWljb24tY2xvc2VcIixcbiAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLmNsb3NlKCRldmVudClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgICBdXG4gICAgICAgIClcbiAgICAgIF1cbiAgICApXG4gIF0pXG59XG52YXIgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzQzZGJjM2Q4X3N0YXRpY1JlbmRlckZucyA9IFtdXG5tYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfNDNkYmMzZDhfcmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9ub3RpZmljYXRpb24vc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTQzZGJjM2Q4JlxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9ub3RpZmljYXRpb24vc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG52YXIgbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX3R5cGVNYXAgPSB7XG4gIHN1Y2Nlc3M6ICdzdWNjZXNzJyxcbiAgaW5mbzogJ2luZm8nLFxuICB3YXJuaW5nOiAnd2FybmluZycsXG4gIGVycm9yOiAnZXJyb3InXG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBub3RpZmljYXRpb25fc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICAgIHRpdGxlOiAnJyxcbiAgICAgIG1lc3NhZ2U6ICcnLFxuICAgICAgZHVyYXRpb246IDQ1MDAsXG4gICAgICB0eXBlOiAnJyxcbiAgICAgIHNob3dDbG9zZTogdHJ1ZSxcbiAgICAgIGN1c3RvbUNsYXNzOiAnJyxcbiAgICAgIGljb25DbGFzczogJycsXG4gICAgICBvbkNsb3NlOiBudWxsLFxuICAgICAgb25DbGljazogbnVsbCxcbiAgICAgIGNsb3NlZDogZmFsc2UsXG4gICAgICB2ZXJ0aWNhbE9mZnNldDogMCxcbiAgICAgIHRpbWVyOiBudWxsLFxuICAgICAgZGFuZ2Vyb3VzbHlVc2VIVE1MU3RyaW5nOiBmYWxzZSxcbiAgICAgIHBvc2l0aW9uOiAndG9wLXJpZ2h0J1xuICAgIH07XG4gIH0sXG5cblxuICBjb21wdXRlZDoge1xuICAgIHR5cGVDbGFzczogZnVuY3Rpb24gdHlwZUNsYXNzKCkge1xuICAgICAgcmV0dXJuIHRoaXMudHlwZSAmJiBtYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfdHlwZU1hcFt0aGlzLnR5cGVdID8gJ2VsLWljb24tJyArIG1haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc190eXBlTWFwW3RoaXMudHlwZV0gOiAnJztcbiAgICB9LFxuICAgIGhvcml6b250YWxDbGFzczogZnVuY3Rpb24gaG9yaXpvbnRhbENsYXNzKCkge1xuICAgICAgcmV0dXJuIHRoaXMucG9zaXRpb24uaW5kZXhPZigncmlnaHQnKSA+IC0xID8gJ3JpZ2h0JyA6ICdsZWZ0JztcbiAgICB9LFxuICAgIHZlcnRpY2FsUHJvcGVydHk6IGZ1bmN0aW9uIHZlcnRpY2FsUHJvcGVydHkoKSB7XG4gICAgICByZXR1cm4gKC9edG9wLS8udGVzdCh0aGlzLnBvc2l0aW9uKSA/ICd0b3AnIDogJ2JvdHRvbSdcbiAgICAgICk7XG4gICAgfSxcbiAgICBwb3NpdGlvblN0eWxlOiBmdW5jdGlvbiBwb3NpdGlvblN0eWxlKCkge1xuICAgICAgdmFyIF9yZWY7XG5cbiAgICAgIHJldHVybiBfcmVmID0ge30sIF9yZWZbdGhpcy52ZXJ0aWNhbFByb3BlcnR5XSA9IHRoaXMudmVydGljYWxPZmZzZXQgKyAncHgnLCBfcmVmO1xuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIGNsb3NlZDogZnVuY3Rpb24gY2xvc2VkKG5ld1ZhbCkge1xuICAgICAgaWYgKG5ld1ZhbCkge1xuICAgICAgICB0aGlzLnZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy4kZWwuYWRkRXZlbnRMaXN0ZW5lcigndHJhbnNpdGlvbmVuZCcsIHRoaXMuZGVzdHJveUVsZW1lbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZGVzdHJveUVsZW1lbnQ6IGZ1bmN0aW9uIGRlc3Ryb3lFbGVtZW50KCkge1xuICAgICAgdGhpcy4kZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigndHJhbnNpdGlvbmVuZCcsIHRoaXMuZGVzdHJveUVsZW1lbnQpO1xuICAgICAgdGhpcy4kZGVzdHJveSh0cnVlKTtcbiAgICAgIHRoaXMuJGVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy4kZWwpO1xuICAgIH0sXG4gICAgY2xpY2s6IGZ1bmN0aW9uIGNsaWNrKCkge1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLm9uQ2xpY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5vbkNsaWNrKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBjbG9zZTogZnVuY3Rpb24gY2xvc2UoKSB7XG4gICAgICB0aGlzLmNsb3NlZCA9IHRydWU7XG4gICAgICBpZiAodHlwZW9mIHRoaXMub25DbG9zZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLm9uQ2xvc2UoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGNsZWFyVGltZXI6IGZ1bmN0aW9uIGNsZWFyVGltZXIoKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lcik7XG4gICAgfSxcbiAgICBzdGFydFRpbWVyOiBmdW5jdGlvbiBzdGFydFRpbWVyKCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgaWYgKHRoaXMuZHVyYXRpb24gPiAwKSB7XG4gICAgICAgIHRoaXMudGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAoIV90aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgX3RoaXMuY2xvc2UoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIHRoaXMuZHVyYXRpb24pO1xuICAgICAgfVxuICAgIH0sXG4gICAga2V5ZG93bjogZnVuY3Rpb24ga2V5ZG93bihlKSB7XG4gICAgICBpZiAoZS5rZXlDb2RlID09PSA0NiB8fCBlLmtleUNvZGUgPT09IDgpIHtcbiAgICAgICAgdGhpcy5jbGVhclRpbWVyKCk7IC8vIGRldGVsZSDlj5bmtojlgJLorqHml7ZcbiAgICAgIH0gZWxzZSBpZiAoZS5rZXlDb2RlID09PSAyNykge1xuICAgICAgICAvLyBlc2PlhbPpl63mtojmga9cbiAgICAgICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zdGFydFRpbWVyKCk7IC8vIOaBouWkjeWAkuiuoeaXtlxuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCgpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIGlmICh0aGlzLmR1cmF0aW9uID4gMCkge1xuICAgICAgdGhpcy50aW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIV90aGlzMi5jbG9zZWQpIHtcbiAgICAgICAgICBfdGhpczIuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgICAgfSwgdGhpcy5kdXJhdGlvbik7XG4gICAgfVxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLmtleWRvd24pO1xuICB9LFxuICBiZWZvcmVEZXN0cm95OiBmdW5jdGlvbiBiZWZvcmVEZXN0cm95KCkge1xuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLmtleWRvd24pO1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvbm90aWZpY2F0aW9uL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc19ub3RpZmljYXRpb25fc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAobm90aWZpY2F0aW9uX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL25vdGlmaWNhdGlvbi9zcmMvbWFpbi52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBub3RpZmljYXRpb25fc3JjX21haW5fY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBwYWNrYWdlc19ub3RpZmljYXRpb25fc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF80M2RiYzNkOF9yZW5kZXIsXG4gIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF80M2RiYzNkOF9zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIG5vdGlmaWNhdGlvbl9zcmNfbWFpbl9hcGk7IH1cbm5vdGlmaWNhdGlvbl9zcmNfbWFpbl9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL25vdGlmaWNhdGlvbi9zcmMvbWFpbi52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgbm90aWZpY2F0aW9uX3NyY19tYWluID0gKG5vdGlmaWNhdGlvbl9zcmNfbWFpbl9jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL25vdGlmaWNhdGlvbi9zcmMvbWFpbi5qc1xuXG5cblxuXG5cbnZhciBOb3RpZmljYXRpb25Db25zdHJ1Y3RvciA9IGV4dGVybmFsX3Z1ZV9kZWZhdWx0LmEuZXh0ZW5kKG5vdGlmaWNhdGlvbl9zcmNfbWFpbik7XG5cbnZhciBzcmNfbWFpbl9pbnN0YW5jZSA9IHZvaWQgMDtcbnZhciBpbnN0YW5jZXMgPSBbXTtcbnZhciBzZWVkID0gMTtcblxudmFyIG1haW5fTm90aWZpY2F0aW9uID0gZnVuY3Rpb24gTm90aWZpY2F0aW9uKG9wdGlvbnMpIHtcbiAgaWYgKGV4dGVybmFsX3Z1ZV9kZWZhdWx0LmEucHJvdG90eXBlLiRpc1NlcnZlcikgcmV0dXJuO1xuICBvcHRpb25zID0gbWVyZ2VfZGVmYXVsdCgpKHt9LCBvcHRpb25zKTtcbiAgdmFyIHVzZXJPbkNsb3NlID0gb3B0aW9ucy5vbkNsb3NlO1xuICB2YXIgaWQgPSAnbm90aWZpY2F0aW9uXycgKyBzZWVkKys7XG4gIHZhciBwb3NpdGlvbiA9IG9wdGlvbnMucG9zaXRpb24gfHwgJ3RvcC1yaWdodCc7XG5cbiAgb3B0aW9ucy5vbkNsb3NlID0gZnVuY3Rpb24gKCkge1xuICAgIE5vdGlmaWNhdGlvbi5jbG9zZShpZCwgdXNlck9uQ2xvc2UpO1xuICB9O1xuXG4gIHNyY19tYWluX2luc3RhbmNlID0gbmV3IE5vdGlmaWNhdGlvbkNvbnN0cnVjdG9yKHtcbiAgICBkYXRhOiBvcHRpb25zXG4gIH0pO1xuXG4gIGlmIChPYmplY3QodmRvbV9bXCJpc1ZOb2RlXCJdKShvcHRpb25zLm1lc3NhZ2UpKSB7XG4gICAgc3JjX21haW5faW5zdGFuY2UuJHNsb3RzLmRlZmF1bHQgPSBbb3B0aW9ucy5tZXNzYWdlXTtcbiAgICBvcHRpb25zLm1lc3NhZ2UgPSAnUkVQTEFDRURfQllfVk5PREUnO1xuICB9XG4gIHNyY19tYWluX2luc3RhbmNlLmlkID0gaWQ7XG4gIHNyY19tYWluX2luc3RhbmNlLiRtb3VudCgpO1xuICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNyY19tYWluX2luc3RhbmNlLiRlbCk7XG4gIHNyY19tYWluX2luc3RhbmNlLnZpc2libGUgPSB0cnVlO1xuICBzcmNfbWFpbl9pbnN0YW5jZS5kb20gPSBzcmNfbWFpbl9pbnN0YW5jZS4kZWw7XG4gIHNyY19tYWluX2luc3RhbmNlLmRvbS5zdHlsZS56SW5kZXggPSBwb3B1cF9bXCJQb3B1cE1hbmFnZXJcIl0ubmV4dFpJbmRleCgpO1xuXG4gIHZhciB2ZXJ0aWNhbE9mZnNldCA9IG9wdGlvbnMub2Zmc2V0IHx8IDA7XG4gIGluc3RhbmNlcy5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICByZXR1cm4gaXRlbS5wb3NpdGlvbiA9PT0gcG9zaXRpb247XG4gIH0pLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICB2ZXJ0aWNhbE9mZnNldCArPSBpdGVtLiRlbC5vZmZzZXRIZWlnaHQgKyAxNjtcbiAgfSk7XG4gIHZlcnRpY2FsT2Zmc2V0ICs9IDE2O1xuICBzcmNfbWFpbl9pbnN0YW5jZS52ZXJ0aWNhbE9mZnNldCA9IHZlcnRpY2FsT2Zmc2V0O1xuICBpbnN0YW5jZXMucHVzaChzcmNfbWFpbl9pbnN0YW5jZSk7XG4gIHJldHVybiBzcmNfbWFpbl9pbnN0YW5jZTtcbn07XG5cblsnc3VjY2VzcycsICd3YXJuaW5nJywgJ2luZm8nLCAnZXJyb3InXS5mb3JFYWNoKGZ1bmN0aW9uICh0eXBlKSB7XG4gIG1haW5fTm90aWZpY2F0aW9uW3R5cGVdID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdzdHJpbmcnIHx8IE9iamVjdCh2ZG9tX1tcImlzVk5vZGVcIl0pKG9wdGlvbnMpKSB7XG4gICAgICBvcHRpb25zID0ge1xuICAgICAgICBtZXNzYWdlOiBvcHRpb25zXG4gICAgICB9O1xuICAgIH1cbiAgICBvcHRpb25zLnR5cGUgPSB0eXBlO1xuICAgIHJldHVybiBtYWluX05vdGlmaWNhdGlvbihvcHRpb25zKTtcbiAgfTtcbn0pO1xuXG5tYWluX05vdGlmaWNhdGlvbi5jbG9zZSA9IGZ1bmN0aW9uIChpZCwgdXNlck9uQ2xvc2UpIHtcbiAgdmFyIGluZGV4ID0gLTE7XG4gIHZhciBsZW4gPSBpbnN0YW5jZXMubGVuZ3RoO1xuICB2YXIgaW5zdGFuY2UgPSBpbnN0YW5jZXMuZmlsdGVyKGZ1bmN0aW9uIChpbnN0YW5jZSwgaSkge1xuICAgIGlmIChpbnN0YW5jZS5pZCA9PT0gaWQpIHtcbiAgICAgIGluZGV4ID0gaTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0pWzBdO1xuICBpZiAoIWluc3RhbmNlKSByZXR1cm47XG5cbiAgaWYgKHR5cGVvZiB1c2VyT25DbG9zZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHVzZXJPbkNsb3NlKGluc3RhbmNlKTtcbiAgfVxuICBpbnN0YW5jZXMuc3BsaWNlKGluZGV4LCAxKTtcblxuICBpZiAobGVuIDw9IDEpIHJldHVybjtcbiAgdmFyIHBvc2l0aW9uID0gaW5zdGFuY2UucG9zaXRpb247XG4gIHZhciByZW1vdmVkSGVpZ2h0ID0gaW5zdGFuY2UuZG9tLm9mZnNldEhlaWdodDtcbiAgZm9yICh2YXIgaSA9IGluZGV4OyBpIDwgbGVuIC0gMTsgaSsrKSB7XG4gICAgaWYgKGluc3RhbmNlc1tpXS5wb3NpdGlvbiA9PT0gcG9zaXRpb24pIHtcbiAgICAgIGluc3RhbmNlc1tpXS5kb20uc3R5bGVbaW5zdGFuY2UudmVydGljYWxQcm9wZXJ0eV0gPSBwYXJzZUludChpbnN0YW5jZXNbaV0uZG9tLnN0eWxlW2luc3RhbmNlLnZlcnRpY2FsUHJvcGVydHldLCAxMCkgLSByZW1vdmVkSGVpZ2h0IC0gMTYgKyAncHgnO1xuICAgIH1cbiAgfVxufTtcblxubWFpbl9Ob3RpZmljYXRpb24uY2xvc2VBbGwgPSBmdW5jdGlvbiAoKSB7XG4gIGZvciAodmFyIGkgPSBpbnN0YW5jZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBpbnN0YW5jZXNbaV0uY2xvc2UoKTtcbiAgfVxufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcGFja2FnZXNfbm90aWZpY2F0aW9uX3NyY19tYWluID0gKG1haW5fTm90aWZpY2F0aW9uKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvbm90aWZpY2F0aW9uL2luZGV4LmpzXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIG5vdGlmaWNhdGlvbiA9IChwYWNrYWdlc19ub3RpZmljYXRpb25fc3JjX21haW4pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9zbGlkZXIvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTMyNzA4NjQ0JlxudmFyIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF8zMjcwODY0NF9yZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICB7XG4gICAgICBzdGF0aWNDbGFzczogXCJlbC1zbGlkZXJcIixcbiAgICAgIGNsYXNzOiB7XG4gICAgICAgIFwiaXMtdmVydGljYWxcIjogX3ZtLnZlcnRpY2FsLFxuICAgICAgICBcImVsLXNsaWRlci0td2l0aC1pbnB1dFwiOiBfdm0uc2hvd0lucHV0XG4gICAgICB9LFxuICAgICAgYXR0cnM6IHtcbiAgICAgICAgcm9sZTogXCJzbGlkZXJcIixcbiAgICAgICAgXCJhcmlhLXZhbHVlbWluXCI6IF92bS5taW4sXG4gICAgICAgIFwiYXJpYS12YWx1ZW1heFwiOiBfdm0ubWF4LFxuICAgICAgICBcImFyaWEtb3JpZW50YXRpb25cIjogX3ZtLnZlcnRpY2FsID8gXCJ2ZXJ0aWNhbFwiIDogXCJob3Jpem9udGFsXCIsXG4gICAgICAgIFwiYXJpYS1kaXNhYmxlZFwiOiBfdm0uc2xpZGVyRGlzYWJsZWRcbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIF92bS5zaG93SW5wdXQgJiYgIV92bS5yYW5nZVxuICAgICAgICA/IF9jKFwiZWwtaW5wdXQtbnVtYmVyXCIsIHtcbiAgICAgICAgICAgIHJlZjogXCJpbnB1dFwiLFxuICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtc2xpZGVyX19pbnB1dFwiLFxuICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgc3RlcDogX3ZtLnN0ZXAsXG4gICAgICAgICAgICAgIGRpc2FibGVkOiBfdm0uc2xpZGVyRGlzYWJsZWQsXG4gICAgICAgICAgICAgIGNvbnRyb2xzOiBfdm0uc2hvd0lucHV0Q29udHJvbHMsXG4gICAgICAgICAgICAgIG1pbjogX3ZtLm1pbixcbiAgICAgICAgICAgICAgbWF4OiBfdm0ubWF4LFxuICAgICAgICAgICAgICBkZWJvdW5jZTogX3ZtLmRlYm91bmNlLFxuICAgICAgICAgICAgICBzaXplOiBfdm0uaW5wdXRTaXplXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb246IHsgY2hhbmdlOiBfdm0uZW1pdENoYW5nZSB9LFxuICAgICAgICAgICAgbW9kZWw6IHtcbiAgICAgICAgICAgICAgdmFsdWU6IF92bS5maXJzdFZhbHVlLFxuICAgICAgICAgICAgICBjYWxsYmFjazogZnVuY3Rpb24oJCR2KSB7XG4gICAgICAgICAgICAgICAgX3ZtLmZpcnN0VmFsdWUgPSAkJHZcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJmaXJzdFZhbHVlXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgX2MoXG4gICAgICAgIFwiZGl2XCIsXG4gICAgICAgIHtcbiAgICAgICAgICByZWY6IFwic2xpZGVyXCIsXG4gICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtc2xpZGVyX19ydW53YXlcIixcbiAgICAgICAgICBjbGFzczogeyBcInNob3ctaW5wdXRcIjogX3ZtLnNob3dJbnB1dCwgZGlzYWJsZWQ6IF92bS5zbGlkZXJEaXNhYmxlZCB9LFxuICAgICAgICAgIHN0eWxlOiBfdm0ucnVud2F5U3R5bGUsXG4gICAgICAgICAgb246IHsgY2xpY2s6IF92bS5vblNsaWRlckNsaWNrIH1cbiAgICAgICAgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiZWwtc2xpZGVyX19iYXJcIiwgc3R5bGU6IF92bS5iYXJTdHlsZSB9KSxcbiAgICAgICAgICBfYyhcInNsaWRlci1idXR0b25cIiwge1xuICAgICAgICAgICAgcmVmOiBcImJ1dHRvbjFcIixcbiAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgIHZlcnRpY2FsOiBfdm0udmVydGljYWwsXG4gICAgICAgICAgICAgIFwidG9vbHRpcC1jbGFzc1wiOiBfdm0udG9vbHRpcENsYXNzXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbW9kZWw6IHtcbiAgICAgICAgICAgICAgdmFsdWU6IF92bS5maXJzdFZhbHVlLFxuICAgICAgICAgICAgICBjYWxsYmFjazogZnVuY3Rpb24oJCR2KSB7XG4gICAgICAgICAgICAgICAgX3ZtLmZpcnN0VmFsdWUgPSAkJHZcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJmaXJzdFZhbHVlXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSxcbiAgICAgICAgICBfdm0ucmFuZ2VcbiAgICAgICAgICAgID8gX2MoXCJzbGlkZXItYnV0dG9uXCIsIHtcbiAgICAgICAgICAgICAgICByZWY6IFwiYnV0dG9uMlwiLFxuICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICB2ZXJ0aWNhbDogX3ZtLnZlcnRpY2FsLFxuICAgICAgICAgICAgICAgICAgXCJ0b29sdGlwLWNsYXNzXCI6IF92bS50b29sdGlwQ2xhc3NcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG1vZGVsOiB7XG4gICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLnNlY29uZFZhbHVlLFxuICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IGZ1bmN0aW9uKCQkdikge1xuICAgICAgICAgICAgICAgICAgICBfdm0uc2Vjb25kVmFsdWUgPSAkJHZcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcInNlY29uZFZhbHVlXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgIF92bS5fbChfdm0uc3RvcHMsIGZ1bmN0aW9uKGl0ZW0sIGtleSkge1xuICAgICAgICAgICAgcmV0dXJuIF92bS5zaG93U3RvcHNcbiAgICAgICAgICAgICAgPyBfYyhcImRpdlwiLCB7XG4gICAgICAgICAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXNsaWRlcl9fc3RvcFwiLFxuICAgICAgICAgICAgICAgICAgc3R5bGU6IF92bS5nZXRTdG9wU3R5bGUoaXRlbSlcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgICAgfSksXG4gICAgICAgICAgX3ZtLm1hcmtMaXN0Lmxlbmd0aCA+IDBcbiAgICAgICAgICAgID8gW1xuICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgIF92bS5fbChfdm0ubWFya0xpc3QsIGZ1bmN0aW9uKGl0ZW0sIGtleSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2MoXCJkaXZcIiwge1xuICAgICAgICAgICAgICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXNsaWRlcl9fc3RvcCBlbC1zbGlkZXJfX21hcmtzLXN0b3BcIixcbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZTogX3ZtLmdldFN0b3BTdHlsZShpdGVtLnBvc2l0aW9uKVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiBcImVsLXNsaWRlcl9fbWFya3NcIiB9LFxuICAgICAgICAgICAgICAgICAgX3ZtLl9sKF92bS5tYXJrTGlzdCwgZnVuY3Rpb24oaXRlbSwga2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfYyhcInNsaWRlci1tYXJrZXJcIiwge1xuICAgICAgICAgICAgICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgICAgICAgICAgICAgIHN0eWxlOiBfdm0uZ2V0U3RvcFN0eWxlKGl0ZW0ucG9zaXRpb24pLFxuICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IG1hcms6IGl0ZW0ubWFyayB9XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgXSxcbiAgICAgICAgMlxuICAgICAgKVxuICAgIF0sXG4gICAgMVxuICApXG59XG52YXIgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzMyNzA4NjQ0X3N0YXRpY1JlbmRlckZucyA9IFtdXG5tYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfMzI3MDg2NDRfcmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9zbGlkZXIvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTMyNzA4NjQ0JlxuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiZWxlbWVudC11aS9saWIvaW5wdXQtbnVtYmVyXCJcbnZhciBpbnB1dF9udW1iZXJfID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0Mik7XG52YXIgaW5wdXRfbnVtYmVyX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGlucHV0X251bWJlcl8pO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3NsaWRlci9zcmMvYnV0dG9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1lNzJkMmFkMiZcbnZhciBidXR0b252dWVfdHlwZV90ZW1wbGF0ZV9pZF9lNzJkMmFkMl9yZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICB7XG4gICAgICByZWY6IFwiYnV0dG9uXCIsXG4gICAgICBzdGF0aWNDbGFzczogXCJlbC1zbGlkZXJfX2J1dHRvbi13cmFwcGVyXCIsXG4gICAgICBjbGFzczogeyBob3ZlcjogX3ZtLmhvdmVyaW5nLCBkcmFnZ2luZzogX3ZtLmRyYWdnaW5nIH0sXG4gICAgICBzdHlsZTogX3ZtLndyYXBwZXJTdHlsZSxcbiAgICAgIGF0dHJzOiB7IHRhYmluZGV4OiBcIjBcIiB9LFxuICAgICAgb246IHtcbiAgICAgICAgbW91c2VlbnRlcjogX3ZtLmhhbmRsZU1vdXNlRW50ZXIsXG4gICAgICAgIG1vdXNlbGVhdmU6IF92bS5oYW5kbGVNb3VzZUxlYXZlLFxuICAgICAgICBtb3VzZWRvd246IF92bS5vbkJ1dHRvbkRvd24sXG4gICAgICAgIHRvdWNoc3RhcnQ6IF92bS5vbkJ1dHRvbkRvd24sXG4gICAgICAgIGZvY3VzOiBfdm0uaGFuZGxlTW91c2VFbnRlcixcbiAgICAgICAgYmx1cjogX3ZtLmhhbmRsZU1vdXNlTGVhdmUsXG4gICAgICAgIGtleWRvd246IFtcbiAgICAgICAgICBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgIShcImJ1dHRvblwiIGluICRldmVudCkgJiZcbiAgICAgICAgICAgICAgX3ZtLl9rKCRldmVudC5rZXlDb2RlLCBcImxlZnRcIiwgMzcsICRldmVudC5rZXksIFtcbiAgICAgICAgICAgICAgICBcIkxlZnRcIixcbiAgICAgICAgICAgICAgICBcIkFycm93TGVmdFwiXG4gICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChcImJ1dHRvblwiIGluICRldmVudCAmJiAkZXZlbnQuYnV0dG9uICE9PSAwKSB7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gX3ZtLm9uTGVmdEtleURvd24oJGV2ZW50KVxuICAgICAgICAgIH0sXG4gICAgICAgICAgZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICEoXCJidXR0b25cIiBpbiAkZXZlbnQpICYmXG4gICAgICAgICAgICAgIF92bS5faygkZXZlbnQua2V5Q29kZSwgXCJyaWdodFwiLCAzOSwgJGV2ZW50LmtleSwgW1xuICAgICAgICAgICAgICAgIFwiUmlnaHRcIixcbiAgICAgICAgICAgICAgICBcIkFycm93UmlnaHRcIlxuICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXCJidXR0b25cIiBpbiAkZXZlbnQgJiYgJGV2ZW50LmJ1dHRvbiAhPT0gMikge1xuICAgICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIF92bS5vblJpZ2h0S2V5RG93bigkZXZlbnQpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgIShcImJ1dHRvblwiIGluICRldmVudCkgJiZcbiAgICAgICAgICAgICAgX3ZtLl9rKCRldmVudC5rZXlDb2RlLCBcImRvd25cIiwgNDAsICRldmVudC5rZXksIFtcbiAgICAgICAgICAgICAgICBcIkRvd25cIixcbiAgICAgICAgICAgICAgICBcIkFycm93RG93blwiXG4gICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICByZXR1cm4gX3ZtLm9uTGVmdEtleURvd24oJGV2ZW50KVxuICAgICAgICAgIH0sXG4gICAgICAgICAgZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICEoXCJidXR0b25cIiBpbiAkZXZlbnQpICYmXG4gICAgICAgICAgICAgIF92bS5faygkZXZlbnQua2V5Q29kZSwgXCJ1cFwiLCAzOCwgJGV2ZW50LmtleSwgW1wiVXBcIiwgXCJBcnJvd1VwXCJdKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgcmV0dXJuIF92bS5vblJpZ2h0S2V5RG93bigkZXZlbnQpXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICBfYyhcbiAgICAgICAgXCJlbC10b29sdGlwXCIsXG4gICAgICAgIHtcbiAgICAgICAgICByZWY6IFwidG9vbHRpcFwiLFxuICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICBwbGFjZW1lbnQ6IFwidG9wXCIsXG4gICAgICAgICAgICBcInBvcHBlci1jbGFzc1wiOiBfdm0udG9vbHRpcENsYXNzLFxuICAgICAgICAgICAgZGlzYWJsZWQ6ICFfdm0uc2hvd1Rvb2x0aXBcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFtcbiAgICAgICAgICBfYyhcInNwYW5cIiwgeyBhdHRyczogeyBzbG90OiBcImNvbnRlbnRcIiB9LCBzbG90OiBcImNvbnRlbnRcIiB9LCBbXG4gICAgICAgICAgICBfdm0uX3YoX3ZtLl9zKF92bS5mb3JtYXRWYWx1ZSkpXG4gICAgICAgICAgXSksXG4gICAgICAgICAgX2MoXCJkaXZcIiwge1xuICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtc2xpZGVyX19idXR0b25cIixcbiAgICAgICAgICAgIGNsYXNzOiB7IGhvdmVyOiBfdm0uaG92ZXJpbmcsIGRyYWdnaW5nOiBfdm0uZHJhZ2dpbmcgfVxuICAgICAgICAgIH0pXG4gICAgICAgIF1cbiAgICAgIClcbiAgICBdLFxuICAgIDFcbiAgKVxufVxudmFyIGJ1dHRvbnZ1ZV90eXBlX3RlbXBsYXRlX2lkX2U3MmQyYWQyX3N0YXRpY1JlbmRlckZucyA9IFtdXG5idXR0b252dWVfdHlwZV90ZW1wbGF0ZV9pZF9lNzJkMmFkMl9yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3NsaWRlci9zcmMvYnV0dG9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1lNzJkMmFkMiZcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvc2xpZGVyL3NyYy9idXR0b24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cblxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzbGlkZXJfc3JjX2J1dHRvbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG5hbWU6ICdFbFNsaWRlckJ1dHRvbicsXG5cbiAgY29tcG9uZW50czoge1xuICAgIEVsVG9vbHRpcDogdG9vbHRpcF9kZWZhdWx0LmFcbiAgfSxcblxuICBwcm9wczoge1xuICAgIHZhbHVlOiB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBkZWZhdWx0OiAwXG4gICAgfSxcbiAgICB2ZXJ0aWNhbDoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSxcbiAgICB0b29sdGlwQ2xhc3M6IFN0cmluZ1xuICB9LFxuXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGhvdmVyaW5nOiBmYWxzZSxcbiAgICAgIGRyYWdnaW5nOiBmYWxzZSxcbiAgICAgIGlzQ2xpY2s6IGZhbHNlLFxuICAgICAgc3RhcnRYOiAwLFxuICAgICAgY3VycmVudFg6IDAsXG4gICAgICBzdGFydFk6IDAsXG4gICAgICBjdXJyZW50WTogMCxcbiAgICAgIHN0YXJ0UG9zaXRpb246IDAsXG4gICAgICBuZXdQb3NpdGlvbjogbnVsbCxcbiAgICAgIG9sZFZhbHVlOiB0aGlzLnZhbHVlXG4gICAgfTtcbiAgfSxcblxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZGlzYWJsZWQ6IGZ1bmN0aW9uIGRpc2FibGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHBhcmVudC5zbGlkZXJEaXNhYmxlZDtcbiAgICB9LFxuICAgIG1heDogZnVuY3Rpb24gbWF4KCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHBhcmVudC5tYXg7XG4gICAgfSxcbiAgICBtaW46IGZ1bmN0aW9uIG1pbigpIHtcbiAgICAgIHJldHVybiB0aGlzLiRwYXJlbnQubWluO1xuICAgIH0sXG4gICAgc3RlcDogZnVuY3Rpb24gc3RlcCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRwYXJlbnQuc3RlcDtcbiAgICB9LFxuICAgIHNob3dUb29sdGlwOiBmdW5jdGlvbiBzaG93VG9vbHRpcCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRwYXJlbnQuc2hvd1Rvb2x0aXA7XG4gICAgfSxcbiAgICBwcmVjaXNpb246IGZ1bmN0aW9uIHByZWNpc2lvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLiRwYXJlbnQucHJlY2lzaW9uO1xuICAgIH0sXG4gICAgY3VycmVudFBvc2l0aW9uOiBmdW5jdGlvbiBjdXJyZW50UG9zaXRpb24oKSB7XG4gICAgICByZXR1cm4gKHRoaXMudmFsdWUgLSB0aGlzLm1pbikgLyAodGhpcy5tYXggLSB0aGlzLm1pbikgKiAxMDAgKyAnJSc7XG4gICAgfSxcbiAgICBlbmFibGVGb3JtYXQ6IGZ1bmN0aW9uIGVuYWJsZUZvcm1hdCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRwYXJlbnQuZm9ybWF0VG9vbHRpcCBpbnN0YW5jZW9mIEZ1bmN0aW9uO1xuICAgIH0sXG4gICAgZm9ybWF0VmFsdWU6IGZ1bmN0aW9uIGZvcm1hdFZhbHVlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZW5hYmxlRm9ybWF0ICYmIHRoaXMuJHBhcmVudC5mb3JtYXRUb29sdGlwKHRoaXMudmFsdWUpIHx8IHRoaXMudmFsdWU7XG4gICAgfSxcbiAgICB3cmFwcGVyU3R5bGU6IGZ1bmN0aW9uIHdyYXBwZXJTdHlsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnZlcnRpY2FsID8geyBib3R0b206IHRoaXMuY3VycmVudFBvc2l0aW9uIH0gOiB7IGxlZnQ6IHRoaXMuY3VycmVudFBvc2l0aW9uIH07XG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgZHJhZ2dpbmc6IGZ1bmN0aW9uIGRyYWdnaW5nKHZhbCkge1xuICAgICAgdGhpcy4kcGFyZW50LmRyYWdnaW5nID0gdmFsO1xuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZGlzcGxheVRvb2x0aXA6IGZ1bmN0aW9uIGRpc3BsYXlUb29sdGlwKCkge1xuICAgICAgdGhpcy4kcmVmcy50b29sdGlwICYmICh0aGlzLiRyZWZzLnRvb2x0aXAuc2hvd1BvcHBlciA9IHRydWUpO1xuICAgIH0sXG4gICAgaGlkZVRvb2x0aXA6IGZ1bmN0aW9uIGhpZGVUb29sdGlwKCkge1xuICAgICAgdGhpcy4kcmVmcy50b29sdGlwICYmICh0aGlzLiRyZWZzLnRvb2x0aXAuc2hvd1BvcHBlciA9IGZhbHNlKTtcbiAgICB9LFxuICAgIGhhbmRsZU1vdXNlRW50ZXI6IGZ1bmN0aW9uIGhhbmRsZU1vdXNlRW50ZXIoKSB7XG4gICAgICB0aGlzLmhvdmVyaW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMuZGlzcGxheVRvb2x0aXAoKTtcbiAgICB9LFxuICAgIGhhbmRsZU1vdXNlTGVhdmU6IGZ1bmN0aW9uIGhhbmRsZU1vdXNlTGVhdmUoKSB7XG4gICAgICB0aGlzLmhvdmVyaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLmhpZGVUb29sdGlwKCk7XG4gICAgfSxcbiAgICBvbkJ1dHRvbkRvd246IGZ1bmN0aW9uIG9uQnV0dG9uRG93bihldmVudCkge1xuICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHJldHVybjtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLm9uRHJhZ1N0YXJ0KGV2ZW50KTtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLm9uRHJhZ2dpbmcpO1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIHRoaXMub25EcmFnZ2luZyk7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRoaXMub25EcmFnRW5kKTtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsIHRoaXMub25EcmFnRW5kKTtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdjb250ZXh0bWVudScsIHRoaXMub25EcmFnRW5kKTtcbiAgICB9LFxuICAgIG9uTGVmdEtleURvd246IGZ1bmN0aW9uIG9uTGVmdEtleURvd24oKSB7XG4gICAgICBpZiAodGhpcy5kaXNhYmxlZCkgcmV0dXJuO1xuICAgICAgdGhpcy5uZXdQb3NpdGlvbiA9IHBhcnNlRmxvYXQodGhpcy5jdXJyZW50UG9zaXRpb24pIC0gdGhpcy5zdGVwIC8gKHRoaXMubWF4IC0gdGhpcy5taW4pICogMTAwO1xuICAgICAgdGhpcy5zZXRQb3NpdGlvbih0aGlzLm5ld1Bvc2l0aW9uKTtcbiAgICAgIHRoaXMuJHBhcmVudC5lbWl0Q2hhbmdlKCk7XG4gICAgfSxcbiAgICBvblJpZ2h0S2V5RG93bjogZnVuY3Rpb24gb25SaWdodEtleURvd24oKSB7XG4gICAgICBpZiAodGhpcy5kaXNhYmxlZCkgcmV0dXJuO1xuICAgICAgdGhpcy5uZXdQb3NpdGlvbiA9IHBhcnNlRmxvYXQodGhpcy5jdXJyZW50UG9zaXRpb24pICsgdGhpcy5zdGVwIC8gKHRoaXMubWF4IC0gdGhpcy5taW4pICogMTAwO1xuICAgICAgdGhpcy5zZXRQb3NpdGlvbih0aGlzLm5ld1Bvc2l0aW9uKTtcbiAgICAgIHRoaXMuJHBhcmVudC5lbWl0Q2hhbmdlKCk7XG4gICAgfSxcbiAgICBvbkRyYWdTdGFydDogZnVuY3Rpb24gb25EcmFnU3RhcnQoZXZlbnQpIHtcbiAgICAgIHRoaXMuZHJhZ2dpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5pc0NsaWNrID0gdHJ1ZTtcbiAgICAgIGlmIChldmVudC50eXBlID09PSAndG91Y2hzdGFydCcpIHtcbiAgICAgICAgZXZlbnQuY2xpZW50WSA9IGV2ZW50LnRvdWNoZXNbMF0uY2xpZW50WTtcbiAgICAgICAgZXZlbnQuY2xpZW50WCA9IGV2ZW50LnRvdWNoZXNbMF0uY2xpZW50WDtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnZlcnRpY2FsKSB7XG4gICAgICAgIHRoaXMuc3RhcnRZID0gZXZlbnQuY2xpZW50WTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3RhcnRYID0gZXZlbnQuY2xpZW50WDtcbiAgICAgIH1cbiAgICAgIHRoaXMuc3RhcnRQb3NpdGlvbiA9IHBhcnNlRmxvYXQodGhpcy5jdXJyZW50UG9zaXRpb24pO1xuICAgICAgdGhpcy5uZXdQb3NpdGlvbiA9IHRoaXMuc3RhcnRQb3NpdGlvbjtcbiAgICB9LFxuICAgIG9uRHJhZ2dpbmc6IGZ1bmN0aW9uIG9uRHJhZ2dpbmcoZXZlbnQpIHtcbiAgICAgIGlmICh0aGlzLmRyYWdnaW5nKSB7XG4gICAgICAgIHRoaXMuaXNDbGljayA9IGZhbHNlO1xuICAgICAgICB0aGlzLmRpc3BsYXlUb29sdGlwKCk7XG4gICAgICAgIHRoaXMuJHBhcmVudC5yZXNldFNpemUoKTtcbiAgICAgICAgdmFyIGRpZmYgPSAwO1xuICAgICAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ3RvdWNobW92ZScpIHtcbiAgICAgICAgICBldmVudC5jbGllbnRZID0gZXZlbnQudG91Y2hlc1swXS5jbGllbnRZO1xuICAgICAgICAgIGV2ZW50LmNsaWVudFggPSBldmVudC50b3VjaGVzWzBdLmNsaWVudFg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMudmVydGljYWwpIHtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRZID0gZXZlbnQuY2xpZW50WTtcbiAgICAgICAgICBkaWZmID0gKHRoaXMuc3RhcnRZIC0gdGhpcy5jdXJyZW50WSkgLyB0aGlzLiRwYXJlbnQuc2xpZGVyU2l6ZSAqIDEwMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRYID0gZXZlbnQuY2xpZW50WDtcbiAgICAgICAgICBkaWZmID0gKHRoaXMuY3VycmVudFggLSB0aGlzLnN0YXJ0WCkgLyB0aGlzLiRwYXJlbnQuc2xpZGVyU2l6ZSAqIDEwMDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm5ld1Bvc2l0aW9uID0gdGhpcy5zdGFydFBvc2l0aW9uICsgZGlmZjtcbiAgICAgICAgdGhpcy5zZXRQb3NpdGlvbih0aGlzLm5ld1Bvc2l0aW9uKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIG9uRHJhZ0VuZDogZnVuY3Rpb24gb25EcmFnRW5kKCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgaWYgKHRoaXMuZHJhZ2dpbmcpIHtcbiAgICAgICAgLypcbiAgICAgICAgICog6Ziy5q2i5ZyoIG1vdXNldXAg5ZCO56uL5Y2z6Kem5Y+RIGNsaWNr77yM5a+86Ie05ruR5Z2X5pyJ5Yeg546H5Lqn55Sf5LiA5bCP5q615L2N56e7XG4gICAgICAgICAqIOS4jeS9v+eUqCBwcmV2ZW50RGVmYXVsdCDmmK/lm6DkuLogbW91c2V1cCDlkowgY2xpY2sg5rKh5pyJ5rOo5YaM5Zyo5ZCM5LiA5LiqIERPTSDkuIpcbiAgICAgICAgICovXG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF90aGlzLmRyYWdnaW5nID0gZmFsc2U7XG4gICAgICAgICAgX3RoaXMuaGlkZVRvb2x0aXAoKTtcbiAgICAgICAgICBpZiAoIV90aGlzLmlzQ2xpY2spIHtcbiAgICAgICAgICAgIF90aGlzLnNldFBvc2l0aW9uKF90aGlzLm5ld1Bvc2l0aW9uKTtcbiAgICAgICAgICAgIF90aGlzLiRwYXJlbnQuZW1pdENoYW5nZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgMCk7XG4gICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLm9uRHJhZ2dpbmcpO1xuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgdGhpcy5vbkRyYWdnaW5nKTtcbiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLm9uRHJhZ0VuZCk7XG4gICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsIHRoaXMub25EcmFnRW5kKTtcbiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NvbnRleHRtZW51JywgdGhpcy5vbkRyYWdFbmQpO1xuICAgICAgfVxuICAgIH0sXG4gICAgc2V0UG9zaXRpb246IGZ1bmN0aW9uIHNldFBvc2l0aW9uKG5ld1Bvc2l0aW9uKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgaWYgKG5ld1Bvc2l0aW9uID09PSBudWxsIHx8IGlzTmFOKG5ld1Bvc2l0aW9uKSkgcmV0dXJuO1xuICAgICAgaWYgKG5ld1Bvc2l0aW9uIDwgMCkge1xuICAgICAgICBuZXdQb3NpdGlvbiA9IDA7XG4gICAgICB9IGVsc2UgaWYgKG5ld1Bvc2l0aW9uID4gMTAwKSB7XG4gICAgICAgIG5ld1Bvc2l0aW9uID0gMTAwO1xuICAgICAgfVxuICAgICAgdmFyIGxlbmd0aFBlclN0ZXAgPSAxMDAgLyAoKHRoaXMubWF4IC0gdGhpcy5taW4pIC8gdGhpcy5zdGVwKTtcbiAgICAgIHZhciBzdGVwcyA9IE1hdGgucm91bmQobmV3UG9zaXRpb24gLyBsZW5ndGhQZXJTdGVwKTtcbiAgICAgIHZhciB2YWx1ZSA9IHN0ZXBzICogbGVuZ3RoUGVyU3RlcCAqICh0aGlzLm1heCAtIHRoaXMubWluKSAqIDAuMDEgKyB0aGlzLm1pbjtcbiAgICAgIHZhbHVlID0gcGFyc2VGbG9hdCh2YWx1ZS50b0ZpeGVkKHRoaXMucHJlY2lzaW9uKSk7XG4gICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIHZhbHVlKTtcbiAgICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMyLmRpc3BsYXlUb29sdGlwKCk7XG4gICAgICAgIF90aGlzMi4kcmVmcy50b29sdGlwICYmIF90aGlzMi4kcmVmcy50b29sdGlwLnVwZGF0ZVBvcHBlcigpO1xuICAgICAgfSk7XG4gICAgICBpZiAoIXRoaXMuZHJhZ2dpbmcgJiYgdGhpcy52YWx1ZSAhPT0gdGhpcy5vbGRWYWx1ZSkge1xuICAgICAgICB0aGlzLm9sZFZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9zbGlkZXIvc3JjL2J1dHRvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcGFja2FnZXNfc2xpZGVyX3NyY19idXR0b252dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoc2xpZGVyX3NyY19idXR0b252dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvc2xpZGVyL3NyYy9idXR0b24udnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgc3JjX2J1dHRvbl9jb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIHBhY2thZ2VzX3NsaWRlcl9zcmNfYnV0dG9udnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICBidXR0b252dWVfdHlwZV90ZW1wbGF0ZV9pZF9lNzJkMmFkMl9yZW5kZXIsXG4gIGJ1dHRvbnZ1ZV90eXBlX3RlbXBsYXRlX2lkX2U3MmQyYWQyX3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgc3JjX2J1dHRvbl9hcGk7IH1cbnNyY19idXR0b25fY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy9zbGlkZXIvc3JjL2J1dHRvbi52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc2xpZGVyX3NyY19idXR0b24gPSAoc3JjX2J1dHRvbl9jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3NsaWRlci9zcmMvbWFya2VyLmpzXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBtYXJrZXIgPSAoe1xuICBuYW1lOiAnRWxNYXJrZXInLFxuXG4gIHByb3BzOiB7XG4gICAgbWFyazoge1xuICAgICAgdHlwZTogW1N0cmluZywgT2JqZWN0XVxuICAgIH1cbiAgfSxcbiAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgdmFyIGggPSBhcmd1bWVudHNbMF07XG5cbiAgICB2YXIgbGFiZWwgPSB0eXBlb2YgdGhpcy5tYXJrID09PSAnc3RyaW5nJyA/IHRoaXMubWFyayA6IHRoaXMubWFyay5sYWJlbDtcblxuICAgIHJldHVybiBoKFxuICAgICAgJ2RpdicsXG4gICAgICB7ICdjbGFzcyc6ICdlbC1zbGlkZXJfX21hcmtzLXRleHQnLCBzdHlsZTogdGhpcy5tYXJrLnN0eWxlIHx8IHt9IH0sXG4gICAgICBbbGFiZWxdXG4gICAgKTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9zbGlkZXIvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5cblxuXG5cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc2xpZGVyX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbmFtZTogJ0VsU2xpZGVyJyxcblxuICBtaXhpbnM6IFtlbWl0dGVyX2RlZmF1bHQuYV0sXG5cbiAgaW5qZWN0OiB7XG4gICAgZWxGb3JtOiB7XG4gICAgICBkZWZhdWx0OiAnJ1xuICAgIH1cbiAgfSxcblxuICBwcm9wczoge1xuICAgIG1pbjoge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZGVmYXVsdDogMFxuICAgIH0sXG4gICAgbWF4OiB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBkZWZhdWx0OiAxMDBcbiAgICB9LFxuICAgIHN0ZXA6IHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGRlZmF1bHQ6IDFcbiAgICB9LFxuICAgIHZhbHVlOiB7XG4gICAgICB0eXBlOiBbTnVtYmVyLCBBcnJheV0sXG4gICAgICBkZWZhdWx0OiAwXG4gICAgfSxcbiAgICBzaG93SW5wdXQ6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0sXG4gICAgc2hvd0lucHV0Q29udHJvbHM6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSxcbiAgICBpbnB1dFNpemU6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdzbWFsbCdcbiAgICB9LFxuICAgIHNob3dTdG9wczoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSxcbiAgICBzaG93VG9vbHRpcDoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9LFxuICAgIGZvcm1hdFRvb2x0aXA6IEZ1bmN0aW9uLFxuICAgIGRpc2FibGVkOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9LFxuICAgIHJhbmdlOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9LFxuICAgIHZlcnRpY2FsOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9LFxuICAgIGhlaWdodDoge1xuICAgICAgdHlwZTogU3RyaW5nXG4gICAgfSxcbiAgICBkZWJvdW5jZToge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZGVmYXVsdDogMzAwXG4gICAgfSxcbiAgICBsYWJlbDoge1xuICAgICAgdHlwZTogU3RyaW5nXG4gICAgfSxcbiAgICB0b29sdGlwQ2xhc3M6IFN0cmluZyxcbiAgICBtYXJrczogT2JqZWN0XG4gIH0sXG5cbiAgY29tcG9uZW50czoge1xuICAgIEVsSW5wdXROdW1iZXI6IGlucHV0X251bWJlcl9kZWZhdWx0LmEsXG4gICAgU2xpZGVyQnV0dG9uOiBzbGlkZXJfc3JjX2J1dHRvbixcbiAgICBTbGlkZXJNYXJrZXI6IG1hcmtlclxuICB9LFxuXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZpcnN0VmFsdWU6IG51bGwsXG4gICAgICBzZWNvbmRWYWx1ZTogbnVsbCxcbiAgICAgIG9sZFZhbHVlOiBudWxsLFxuICAgICAgZHJhZ2dpbmc6IGZhbHNlLFxuICAgICAgc2xpZGVyU2l6ZTogMVxuICAgIH07XG4gIH0sXG5cblxuICB3YXRjaDoge1xuICAgIHZhbHVlOiBmdW5jdGlvbiB2YWx1ZSh2YWwsIG9sZFZhbCkge1xuICAgICAgaWYgKHRoaXMuZHJhZ2dpbmcgfHwgQXJyYXkuaXNBcnJheSh2YWwpICYmIEFycmF5LmlzQXJyYXkob2xkVmFsKSAmJiB2YWwuZXZlcnkoZnVuY3Rpb24gKGl0ZW0sIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBpdGVtID09PSBvbGRWYWxbaW5kZXhdO1xuICAgICAgfSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRWYWx1ZXMoKTtcbiAgICB9LFxuICAgIGRyYWdnaW5nOiBmdW5jdGlvbiBkcmFnZ2luZyh2YWwpIHtcbiAgICAgIGlmICghdmFsKSB7XG4gICAgICAgIHRoaXMuc2V0VmFsdWVzKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBmaXJzdFZhbHVlOiBmdW5jdGlvbiBmaXJzdFZhbHVlKHZhbCkge1xuICAgICAgaWYgKHRoaXMucmFuZ2UpIHtcbiAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCBbdGhpcy5taW5WYWx1ZSwgdGhpcy5tYXhWYWx1ZV0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCB2YWwpO1xuICAgICAgfVxuICAgIH0sXG4gICAgc2Vjb25kVmFsdWU6IGZ1bmN0aW9uIHNlY29uZFZhbHVlKCkge1xuICAgICAgaWYgKHRoaXMucmFuZ2UpIHtcbiAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCBbdGhpcy5taW5WYWx1ZSwgdGhpcy5tYXhWYWx1ZV0pO1xuICAgICAgfVxuICAgIH0sXG4gICAgbWluOiBmdW5jdGlvbiBtaW4oKSB7XG4gICAgICB0aGlzLnNldFZhbHVlcygpO1xuICAgIH0sXG4gICAgbWF4OiBmdW5jdGlvbiBtYXgoKSB7XG4gICAgICB0aGlzLnNldFZhbHVlcygpO1xuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgdmFsdWVDaGFuZ2VkOiBmdW5jdGlvbiB2YWx1ZUNoYW5nZWQoKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICBpZiAodGhpcy5yYW5nZSkge1xuICAgICAgICByZXR1cm4gIVt0aGlzLm1pblZhbHVlLCB0aGlzLm1heFZhbHVlXS5ldmVyeShmdW5jdGlvbiAoaXRlbSwgaW5kZXgpIHtcbiAgICAgICAgICByZXR1cm4gaXRlbSA9PT0gX3RoaXMub2xkVmFsdWVbaW5kZXhdO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlICE9PSB0aGlzLm9sZFZhbHVlO1xuICAgICAgfVxuICAgIH0sXG4gICAgc2V0VmFsdWVzOiBmdW5jdGlvbiBzZXRWYWx1ZXMoKSB7XG4gICAgICBpZiAodGhpcy5taW4gPiB0aGlzLm1heCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdbRWxlbWVudCBFcnJvcl1bU2xpZGVyXW1pbiBzaG91bGQgbm90IGJlIGdyZWF0ZXIgdGhhbiBtYXguJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHZhciB2YWwgPSB0aGlzLnZhbHVlO1xuICAgICAgaWYgKHRoaXMucmFuZ2UgJiYgQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICAgIGlmICh2YWxbMV0gPCB0aGlzLm1pbikge1xuICAgICAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgW3RoaXMubWluLCB0aGlzLm1pbl0pO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbFswXSA+IHRoaXMubWF4KSB7XG4gICAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCBbdGhpcy5tYXgsIHRoaXMubWF4XSk7XG4gICAgICAgIH0gZWxzZSBpZiAodmFsWzBdIDwgdGhpcy5taW4pIHtcbiAgICAgICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIFt0aGlzLm1pbiwgdmFsWzFdXSk7XG4gICAgICAgIH0gZWxzZSBpZiAodmFsWzFdID4gdGhpcy5tYXgpIHtcbiAgICAgICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIFt2YWxbMF0sIHRoaXMubWF4XSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5maXJzdFZhbHVlID0gdmFsWzBdO1xuICAgICAgICAgIHRoaXMuc2Vjb25kVmFsdWUgPSB2YWxbMV07XG4gICAgICAgICAgaWYgKHRoaXMudmFsdWVDaGFuZ2VkKCkpIHtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2goJ0VsRm9ybUl0ZW0nLCAnZWwuZm9ybS5jaGFuZ2UnLCBbdGhpcy5taW5WYWx1ZSwgdGhpcy5tYXhWYWx1ZV0pO1xuICAgICAgICAgICAgdGhpcy5vbGRWYWx1ZSA9IHZhbC5zbGljZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghdGhpcy5yYW5nZSAmJiB0eXBlb2YgdmFsID09PSAnbnVtYmVyJyAmJiAhaXNOYU4odmFsKSkge1xuICAgICAgICBpZiAodmFsIDwgdGhpcy5taW4pIHtcbiAgICAgICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIHRoaXMubWluKTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWwgPiB0aGlzLm1heCkge1xuICAgICAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgdGhpcy5tYXgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZmlyc3RWYWx1ZSA9IHZhbDtcbiAgICAgICAgICBpZiAodGhpcy52YWx1ZUNoYW5nZWQoKSkge1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaCgnRWxGb3JtSXRlbScsICdlbC5mb3JtLmNoYW5nZScsIHZhbCk7XG4gICAgICAgICAgICB0aGlzLm9sZFZhbHVlID0gdmFsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgc2V0UG9zaXRpb246IGZ1bmN0aW9uIHNldFBvc2l0aW9uKHBlcmNlbnQpIHtcbiAgICAgIHZhciB0YXJnZXRWYWx1ZSA9IHRoaXMubWluICsgcGVyY2VudCAqICh0aGlzLm1heCAtIHRoaXMubWluKSAvIDEwMDtcbiAgICAgIGlmICghdGhpcy5yYW5nZSkge1xuICAgICAgICB0aGlzLiRyZWZzLmJ1dHRvbjEuc2V0UG9zaXRpb24ocGVyY2VudCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHZhciBidXR0b24gPSB2b2lkIDA7XG4gICAgICBpZiAoTWF0aC5hYnModGhpcy5taW5WYWx1ZSAtIHRhcmdldFZhbHVlKSA8IE1hdGguYWJzKHRoaXMubWF4VmFsdWUgLSB0YXJnZXRWYWx1ZSkpIHtcbiAgICAgICAgYnV0dG9uID0gdGhpcy5maXJzdFZhbHVlIDwgdGhpcy5zZWNvbmRWYWx1ZSA/ICdidXR0b24xJyA6ICdidXR0b24yJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJ1dHRvbiA9IHRoaXMuZmlyc3RWYWx1ZSA+IHRoaXMuc2Vjb25kVmFsdWUgPyAnYnV0dG9uMScgOiAnYnV0dG9uMic7XG4gICAgICB9XG4gICAgICB0aGlzLiRyZWZzW2J1dHRvbl0uc2V0UG9zaXRpb24ocGVyY2VudCk7XG4gICAgfSxcbiAgICBvblNsaWRlckNsaWNrOiBmdW5jdGlvbiBvblNsaWRlckNsaWNrKGV2ZW50KSB7XG4gICAgICBpZiAodGhpcy5zbGlkZXJEaXNhYmxlZCB8fCB0aGlzLmRyYWdnaW5nKSByZXR1cm47XG4gICAgICB0aGlzLnJlc2V0U2l6ZSgpO1xuICAgICAgaWYgKHRoaXMudmVydGljYWwpIHtcbiAgICAgICAgdmFyIHNsaWRlck9mZnNldEJvdHRvbSA9IHRoaXMuJHJlZnMuc2xpZGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbTtcbiAgICAgICAgdGhpcy5zZXRQb3NpdGlvbigoc2xpZGVyT2Zmc2V0Qm90dG9tIC0gZXZlbnQuY2xpZW50WSkgLyB0aGlzLnNsaWRlclNpemUgKiAxMDApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHNsaWRlck9mZnNldExlZnQgPSB0aGlzLiRyZWZzLnNsaWRlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0O1xuICAgICAgICB0aGlzLnNldFBvc2l0aW9uKChldmVudC5jbGllbnRYIC0gc2xpZGVyT2Zmc2V0TGVmdCkgLyB0aGlzLnNsaWRlclNpemUgKiAxMDApO1xuICAgICAgfVxuICAgICAgdGhpcy5lbWl0Q2hhbmdlKCk7XG4gICAgfSxcbiAgICByZXNldFNpemU6IGZ1bmN0aW9uIHJlc2V0U2l6ZSgpIHtcbiAgICAgIGlmICh0aGlzLiRyZWZzLnNsaWRlcikge1xuICAgICAgICB0aGlzLnNsaWRlclNpemUgPSB0aGlzLiRyZWZzLnNsaWRlclsnY2xpZW50JyArICh0aGlzLnZlcnRpY2FsID8gJ0hlaWdodCcgOiAnV2lkdGgnKV07XG4gICAgICB9XG4gICAgfSxcbiAgICBlbWl0Q2hhbmdlOiBmdW5jdGlvbiBlbWl0Q2hhbmdlKCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMyLiRlbWl0KCdjaGFuZ2UnLCBfdGhpczIucmFuZ2UgPyBbX3RoaXMyLm1pblZhbHVlLCBfdGhpczIubWF4VmFsdWVdIDogX3RoaXMyLnZhbHVlKTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgZ2V0U3RvcFN0eWxlOiBmdW5jdGlvbiBnZXRTdG9wU3R5bGUocG9zaXRpb24pIHtcbiAgICAgIHJldHVybiB0aGlzLnZlcnRpY2FsID8geyAnYm90dG9tJzogcG9zaXRpb24gKyAnJScgfSA6IHsgJ2xlZnQnOiBwb3NpdGlvbiArICclJyB9O1xuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHN0b3BzOiBmdW5jdGlvbiBzdG9wcygpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgICBpZiAoIXRoaXMuc2hvd1N0b3BzIHx8IHRoaXMubWluID4gdGhpcy5tYXgpIHJldHVybiBbXTtcbiAgICAgIGlmICh0aGlzLnN0ZXAgPT09IDApIHtcbiAgICAgICAgIGZhbHNlICYmIGZhbHNlO1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICB2YXIgc3RvcENvdW50ID0gKHRoaXMubWF4IC0gdGhpcy5taW4pIC8gdGhpcy5zdGVwO1xuICAgICAgdmFyIHN0ZXBXaWR0aCA9IDEwMCAqIHRoaXMuc3RlcCAvICh0aGlzLm1heCAtIHRoaXMubWluKTtcbiAgICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgc3RvcENvdW50OyBpKyspIHtcbiAgICAgICAgcmVzdWx0LnB1c2goaSAqIHN0ZXBXaWR0aCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5yYW5nZSkge1xuICAgICAgICByZXR1cm4gcmVzdWx0LmZpbHRlcihmdW5jdGlvbiAoc3RlcCkge1xuICAgICAgICAgIHJldHVybiBzdGVwIDwgMTAwICogKF90aGlzMy5taW5WYWx1ZSAtIF90aGlzMy5taW4pIC8gKF90aGlzMy5tYXggLSBfdGhpczMubWluKSB8fCBzdGVwID4gMTAwICogKF90aGlzMy5tYXhWYWx1ZSAtIF90aGlzMy5taW4pIC8gKF90aGlzMy5tYXggLSBfdGhpczMubWluKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcmVzdWx0LmZpbHRlcihmdW5jdGlvbiAoc3RlcCkge1xuICAgICAgICAgIHJldHVybiBzdGVwID4gMTAwICogKF90aGlzMy5maXJzdFZhbHVlIC0gX3RoaXMzLm1pbikgLyAoX3RoaXMzLm1heCAtIF90aGlzMy5taW4pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIG1hcmtMaXN0OiBmdW5jdGlvbiBtYXJrTGlzdCgpIHtcbiAgICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgICBpZiAoIXRoaXMubWFya3MpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuXG4gICAgICB2YXIgbWFya3NLZXlzID0gT2JqZWN0LmtleXModGhpcy5tYXJrcyk7XG4gICAgICByZXR1cm4gbWFya3NLZXlzLm1hcChwYXJzZUZsb2F0KS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgIHJldHVybiBhIC0gYjtcbiAgICAgIH0pLmZpbHRlcihmdW5jdGlvbiAocG9pbnQpIHtcbiAgICAgICAgcmV0dXJuIHBvaW50IDw9IF90aGlzNC5tYXggJiYgcG9pbnQgPj0gX3RoaXM0Lm1pbjtcbiAgICAgIH0pLm1hcChmdW5jdGlvbiAocG9pbnQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwb2ludDogcG9pbnQsXG4gICAgICAgICAgcG9zaXRpb246IChwb2ludCAtIF90aGlzNC5taW4pICogMTAwIC8gKF90aGlzNC5tYXggLSBfdGhpczQubWluKSxcbiAgICAgICAgICBtYXJrOiBfdGhpczQubWFya3NbcG9pbnRdXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9LFxuICAgIG1pblZhbHVlOiBmdW5jdGlvbiBtaW5WYWx1ZSgpIHtcbiAgICAgIHJldHVybiBNYXRoLm1pbih0aGlzLmZpcnN0VmFsdWUsIHRoaXMuc2Vjb25kVmFsdWUpO1xuICAgIH0sXG4gICAgbWF4VmFsdWU6IGZ1bmN0aW9uIG1heFZhbHVlKCkge1xuICAgICAgcmV0dXJuIE1hdGgubWF4KHRoaXMuZmlyc3RWYWx1ZSwgdGhpcy5zZWNvbmRWYWx1ZSk7XG4gICAgfSxcbiAgICBiYXJTaXplOiBmdW5jdGlvbiBiYXJTaXplKCkge1xuICAgICAgcmV0dXJuIHRoaXMucmFuZ2UgPyAxMDAgKiAodGhpcy5tYXhWYWx1ZSAtIHRoaXMubWluVmFsdWUpIC8gKHRoaXMubWF4IC0gdGhpcy5taW4pICsgJyUnIDogMTAwICogKHRoaXMuZmlyc3RWYWx1ZSAtIHRoaXMubWluKSAvICh0aGlzLm1heCAtIHRoaXMubWluKSArICclJztcbiAgICB9LFxuICAgIGJhclN0YXJ0OiBmdW5jdGlvbiBiYXJTdGFydCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJhbmdlID8gMTAwICogKHRoaXMubWluVmFsdWUgLSB0aGlzLm1pbikgLyAodGhpcy5tYXggLSB0aGlzLm1pbikgKyAnJScgOiAnMCUnO1xuICAgIH0sXG4gICAgcHJlY2lzaW9uOiBmdW5jdGlvbiBwcmVjaXNpb24oKSB7XG4gICAgICB2YXIgcHJlY2lzaW9ucyA9IFt0aGlzLm1pbiwgdGhpcy5tYXgsIHRoaXMuc3RlcF0ubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIHZhciBkZWNpbWFsID0gKCcnICsgaXRlbSkuc3BsaXQoJy4nKVsxXTtcbiAgICAgICAgcmV0dXJuIGRlY2ltYWwgPyBkZWNpbWFsLmxlbmd0aCA6IDA7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBNYXRoLm1heC5hcHBseShudWxsLCBwcmVjaXNpb25zKTtcbiAgICB9LFxuICAgIHJ1bndheVN0eWxlOiBmdW5jdGlvbiBydW53YXlTdHlsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnZlcnRpY2FsID8geyBoZWlnaHQ6IHRoaXMuaGVpZ2h0IH0gOiB7fTtcbiAgICB9LFxuICAgIGJhclN0eWxlOiBmdW5jdGlvbiBiYXJTdHlsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnZlcnRpY2FsID8ge1xuICAgICAgICBoZWlnaHQ6IHRoaXMuYmFyU2l6ZSxcbiAgICAgICAgYm90dG9tOiB0aGlzLmJhclN0YXJ0XG4gICAgICB9IDoge1xuICAgICAgICB3aWR0aDogdGhpcy5iYXJTaXplLFxuICAgICAgICBsZWZ0OiB0aGlzLmJhclN0YXJ0XG4gICAgICB9O1xuICAgIH0sXG4gICAgc2xpZGVyRGlzYWJsZWQ6IGZ1bmN0aW9uIHNsaWRlckRpc2FibGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQgfHwgKHRoaXMuZWxGb3JtIHx8IHt9KS5kaXNhYmxlZDtcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCgpIHtcbiAgICB2YXIgdmFsdWV0ZXh0ID0gdm9pZCAwO1xuICAgIGlmICh0aGlzLnJhbmdlKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSkge1xuICAgICAgICB0aGlzLmZpcnN0VmFsdWUgPSBNYXRoLm1heCh0aGlzLm1pbiwgdGhpcy52YWx1ZVswXSk7XG4gICAgICAgIHRoaXMuc2Vjb25kVmFsdWUgPSBNYXRoLm1pbih0aGlzLm1heCwgdGhpcy52YWx1ZVsxXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmZpcnN0VmFsdWUgPSB0aGlzLm1pbjtcbiAgICAgICAgdGhpcy5zZWNvbmRWYWx1ZSA9IHRoaXMubWF4O1xuICAgICAgfVxuICAgICAgdGhpcy5vbGRWYWx1ZSA9IFt0aGlzLmZpcnN0VmFsdWUsIHRoaXMuc2Vjb25kVmFsdWVdO1xuICAgICAgdmFsdWV0ZXh0ID0gdGhpcy5maXJzdFZhbHVlICsgJy0nICsgdGhpcy5zZWNvbmRWYWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLnZhbHVlICE9PSAnbnVtYmVyJyB8fCBpc05hTih0aGlzLnZhbHVlKSkge1xuICAgICAgICB0aGlzLmZpcnN0VmFsdWUgPSB0aGlzLm1pbjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZmlyc3RWYWx1ZSA9IE1hdGgubWluKHRoaXMubWF4LCBNYXRoLm1heCh0aGlzLm1pbiwgdGhpcy52YWx1ZSkpO1xuICAgICAgfVxuICAgICAgdGhpcy5vbGRWYWx1ZSA9IHRoaXMuZmlyc3RWYWx1ZTtcbiAgICAgIHZhbHVldGV4dCA9IHRoaXMuZmlyc3RWYWx1ZTtcbiAgICB9XG4gICAgdGhpcy4kZWwuc2V0QXR0cmlidXRlKCdhcmlhLXZhbHVldGV4dCcsIHZhbHVldGV4dCk7XG5cbiAgICAvLyBsYWJlbCBzY3JlZW4gcmVhZGVyXG4gICAgdGhpcy4kZWwuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgdGhpcy5sYWJlbCA/IHRoaXMubGFiZWwgOiAnc2xpZGVyIGJldHdlZW4gJyArIHRoaXMubWluICsgJyBhbmQgJyArIHRoaXMubWF4KTtcblxuICAgIHRoaXMucmVzZXRTaXplKCk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMucmVzZXRTaXplKTtcbiAgfSxcbiAgYmVmb3JlRGVzdHJveTogZnVuY3Rpb24gYmVmb3JlRGVzdHJveSgpIHtcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5yZXNldFNpemUpO1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvc2xpZGVyL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc19zbGlkZXJfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoc2xpZGVyX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3NsaWRlci9zcmMvbWFpbi52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBzbGlkZXJfc3JjX21haW5fY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBwYWNrYWdlc19zbGlkZXJfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF8zMjcwODY0NF9yZW5kZXIsXG4gIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF8zMjcwODY0NF9zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIHNsaWRlcl9zcmNfbWFpbl9hcGk7IH1cbnNsaWRlcl9zcmNfbWFpbl9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL3NsaWRlci9zcmMvbWFpbi52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc2xpZGVyX3NyY19tYWluID0gKHNsaWRlcl9zcmNfbWFpbl9jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3NsaWRlci9pbmRleC5qc1xuXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5zbGlkZXJfc3JjX21haW4uaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcbiAgVnVlLmNvbXBvbmVudChzbGlkZXJfc3JjX21haW4ubmFtZSwgc2xpZGVyX3NyY19tYWluKTtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNsaWRlciA9IChzbGlkZXJfc3JjX21haW4pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9sb2FkaW5nL3NyYy9sb2FkaW5nLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1lZWUwYTdhYyZcbnZhciBsb2FkaW5ndnVlX3R5cGVfdGVtcGxhdGVfaWRfZWVlMGE3YWNfcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwidHJhbnNpdGlvblwiLFxuICAgIHtcbiAgICAgIGF0dHJzOiB7IG5hbWU6IFwiZWwtbG9hZGluZy1mYWRlXCIgfSxcbiAgICAgIG9uOiB7IFwiYWZ0ZXItbGVhdmVcIjogX3ZtLmhhbmRsZUFmdGVyTGVhdmUgfVxuICAgIH0sXG4gICAgW1xuICAgICAgX2MoXG4gICAgICAgIFwiZGl2XCIsXG4gICAgICAgIHtcbiAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgICB2YWx1ZTogX3ZtLnZpc2libGUsXG4gICAgICAgICAgICAgIGV4cHJlc3Npb246IFwidmlzaWJsZVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXSxcbiAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1sb2FkaW5nLW1hc2tcIixcbiAgICAgICAgICBjbGFzczogW192bS5jdXN0b21DbGFzcywgeyBcImlzLWZ1bGxzY3JlZW5cIjogX3ZtLmZ1bGxzY3JlZW4gfV0sXG4gICAgICAgICAgc3R5bGU6IHsgYmFja2dyb3VuZENvbG9yOiBfdm0uYmFja2dyb3VuZCB8fCBcIlwiIH1cbiAgICAgICAgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiZWwtbG9hZGluZy1zcGlubmVyXCIgfSwgW1xuICAgICAgICAgICAgIV92bS5zcGlubmVyXG4gICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICBcInN2Z1wiLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJjaXJjdWxhclwiLFxuICAgICAgICAgICAgICAgICAgICBhdHRyczogeyB2aWV3Qm94OiBcIjI1IDI1IDUwIDUwXCIgfVxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgX2MoXCJjaXJjbGVcIiwge1xuICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcInBhdGhcIixcbiAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBjeDogXCI1MFwiLCBjeTogXCI1MFwiLCByOiBcIjIwXCIsIGZpbGw6IFwibm9uZVwiIH1cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIDogX2MoXCJpXCIsIHsgY2xhc3M6IF92bS5zcGlubmVyIH0pLFxuICAgICAgICAgICAgX3ZtLnRleHRcbiAgICAgICAgICAgICAgPyBfYyhcInBcIiwgeyBzdGF0aWNDbGFzczogXCJlbC1sb2FkaW5nLXRleHRcIiB9LCBbXG4gICAgICAgICAgICAgICAgICBfdm0uX3YoX3ZtLl9zKF92bS50ZXh0KSlcbiAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgICAgXSlcbiAgICAgICAgXVxuICAgICAgKVxuICAgIF1cbiAgKVxufVxudmFyIGxvYWRpbmd2dWVfdHlwZV90ZW1wbGF0ZV9pZF9lZWUwYTdhY19zdGF0aWNSZW5kZXJGbnMgPSBbXVxubG9hZGluZ3Z1ZV90eXBlX3RlbXBsYXRlX2lkX2VlZTBhN2FjX3JlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvbG9hZGluZy9zcmMvbG9hZGluZy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZWVlMGE3YWMmXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2xvYWRpbmcvc3JjL2xvYWRpbmcudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBsb2FkaW5ndnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdGV4dDogbnVsbCxcbiAgICAgIHNwaW5uZXI6IG51bGwsXG4gICAgICBiYWNrZ3JvdW5kOiBudWxsLFxuICAgICAgZnVsbHNjcmVlbjogdHJ1ZSxcbiAgICAgIHZpc2libGU6IGZhbHNlLFxuICAgICAgY3VzdG9tQ2xhc3M6ICcnXG4gICAgfTtcbiAgfSxcblxuXG4gIG1ldGhvZHM6IHtcbiAgICBoYW5kbGVBZnRlckxlYXZlOiBmdW5jdGlvbiBoYW5kbGVBZnRlckxlYXZlKCkge1xuICAgICAgdGhpcy4kZW1pdCgnYWZ0ZXItbGVhdmUnKTtcbiAgICB9LFxuICAgIHNldFRleHQ6IGZ1bmN0aW9uIHNldFRleHQodGV4dCkge1xuICAgICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICB9XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9sb2FkaW5nL3NyYy9sb2FkaW5nLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfbG9hZGluZ3Z1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChsb2FkaW5ndnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2xvYWRpbmcvc3JjL2xvYWRpbmcudnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgbG9hZGluZ19jb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIHNyY19sb2FkaW5ndnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICBsb2FkaW5ndnVlX3R5cGVfdGVtcGxhdGVfaWRfZWVlMGE3YWNfcmVuZGVyLFxuICBsb2FkaW5ndnVlX3R5cGVfdGVtcGxhdGVfaWRfZWVlMGE3YWNfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBsb2FkaW5nX2FwaTsgfVxubG9hZGluZ19jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL2xvYWRpbmcvc3JjL2xvYWRpbmcudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGxvYWRpbmcgPSAobG9hZGluZ19jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiZWxlbWVudC11aS9saWIvdXRpbHMvYWZ0ZXItbGVhdmVcIlxudmFyIGFmdGVyX2xlYXZlXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzMpO1xudmFyIGFmdGVyX2xlYXZlX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGFmdGVyX2xlYXZlXyk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvbG9hZGluZy9zcmMvZGlyZWN0aXZlLmpzXG5cblxuXG5cblxudmFyIE1hc2sgPSBleHRlcm5hbF92dWVfZGVmYXVsdC5hLmV4dGVuZChsb2FkaW5nKTtcblxudmFyIGxvYWRpbmdEaXJlY3RpdmUgPSB7fTtcbmxvYWRpbmdEaXJlY3RpdmUuaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcbiAgaWYgKFZ1ZS5wcm90b3R5cGUuJGlzU2VydmVyKSByZXR1cm47XG4gIHZhciB0b2dnbGVMb2FkaW5nID0gZnVuY3Rpb24gdG9nZ2xlTG9hZGluZyhlbCwgYmluZGluZykge1xuICAgIGlmIChiaW5kaW5nLnZhbHVlKSB7XG4gICAgICBWdWUubmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoYmluZGluZy5tb2RpZmllcnMuZnVsbHNjcmVlbikge1xuICAgICAgICAgIGVsLm9yaWdpbmFsUG9zaXRpb24gPSBPYmplY3QoZG9tX1tcImdldFN0eWxlXCJdKShkb2N1bWVudC5ib2R5LCAncG9zaXRpb24nKTtcbiAgICAgICAgICBlbC5vcmlnaW5hbE92ZXJmbG93ID0gT2JqZWN0KGRvbV9bXCJnZXRTdHlsZVwiXSkoZG9jdW1lbnQuYm9keSwgJ292ZXJmbG93Jyk7XG4gICAgICAgICAgZWwubWFza1N0eWxlLnpJbmRleCA9IHBvcHVwX1tcIlBvcHVwTWFuYWdlclwiXS5uZXh0WkluZGV4KCk7XG5cbiAgICAgICAgICBPYmplY3QoZG9tX1tcImFkZENsYXNzXCJdKShlbC5tYXNrLCAnaXMtZnVsbHNjcmVlbicpO1xuICAgICAgICAgIGluc2VydERvbShkb2N1bWVudC5ib2R5LCBlbCwgYmluZGluZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgT2JqZWN0KGRvbV9bXCJyZW1vdmVDbGFzc1wiXSkoZWwubWFzaywgJ2lzLWZ1bGxzY3JlZW4nKTtcblxuICAgICAgICAgIGlmIChiaW5kaW5nLm1vZGlmaWVycy5ib2R5KSB7XG4gICAgICAgICAgICBlbC5vcmlnaW5hbFBvc2l0aW9uID0gT2JqZWN0KGRvbV9bXCJnZXRTdHlsZVwiXSkoZG9jdW1lbnQuYm9keSwgJ3Bvc2l0aW9uJyk7XG5cbiAgICAgICAgICAgIFsndG9wJywgJ2xlZnQnXS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wZXJ0eSkge1xuICAgICAgICAgICAgICB2YXIgc2Nyb2xsID0gcHJvcGVydHkgPT09ICd0b3AnID8gJ3Njcm9sbFRvcCcgOiAnc2Nyb2xsTGVmdCc7XG4gICAgICAgICAgICAgIGVsLm1hc2tTdHlsZVtwcm9wZXJ0eV0gPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVtwcm9wZXJ0eV0gKyBkb2N1bWVudC5ib2R5W3Njcm9sbF0gKyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbc2Nyb2xsXSAtIHBhcnNlSW50KE9iamVjdChkb21fW1wiZ2V0U3R5bGVcIl0pKGRvY3VtZW50LmJvZHksICdtYXJnaW4tJyArIHByb3BlcnR5KSwgMTApICsgJ3B4JztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgWydoZWlnaHQnLCAnd2lkdGgnXS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wZXJ0eSkge1xuICAgICAgICAgICAgICBlbC5tYXNrU3R5bGVbcHJvcGVydHldID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClbcHJvcGVydHldICsgJ3B4JztcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpbnNlcnREb20oZG9jdW1lbnQuYm9keSwgZWwsIGJpbmRpbmcpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlbC5vcmlnaW5hbFBvc2l0aW9uID0gT2JqZWN0KGRvbV9bXCJnZXRTdHlsZVwiXSkoZWwsICdwb3NpdGlvbicpO1xuICAgICAgICAgICAgaW5zZXJ0RG9tKGVsLCBlbCwgYmluZGluZyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgYWZ0ZXJfbGVhdmVfZGVmYXVsdCgpKGVsLmluc3RhbmNlLCBmdW5jdGlvbiAoXykge1xuICAgICAgICBpZiAoIWVsLmluc3RhbmNlLmhpZGluZykgcmV0dXJuO1xuICAgICAgICBlbC5kb21WaXNpYmxlID0gZmFsc2U7XG4gICAgICAgIHZhciB0YXJnZXQgPSBiaW5kaW5nLm1vZGlmaWVycy5mdWxsc2NyZWVuIHx8IGJpbmRpbmcubW9kaWZpZXJzLmJvZHkgPyBkb2N1bWVudC5ib2R5IDogZWw7XG4gICAgICAgIE9iamVjdChkb21fW1wicmVtb3ZlQ2xhc3NcIl0pKHRhcmdldCwgJ2VsLWxvYWRpbmctcGFyZW50LS1yZWxhdGl2ZScpO1xuICAgICAgICBPYmplY3QoZG9tX1tcInJlbW92ZUNsYXNzXCJdKSh0YXJnZXQsICdlbC1sb2FkaW5nLXBhcmVudC0taGlkZGVuJyk7XG4gICAgICAgIGVsLmluc3RhbmNlLmhpZGluZyA9IGZhbHNlO1xuICAgICAgfSwgMzAwLCB0cnVlKTtcbiAgICAgIGVsLmluc3RhbmNlLnZpc2libGUgPSBmYWxzZTtcbiAgICAgIGVsLmluc3RhbmNlLmhpZGluZyA9IHRydWU7XG4gICAgfVxuICB9O1xuICB2YXIgaW5zZXJ0RG9tID0gZnVuY3Rpb24gaW5zZXJ0RG9tKHBhcmVudCwgZWwsIGJpbmRpbmcpIHtcbiAgICBpZiAoIWVsLmRvbVZpc2libGUgJiYgT2JqZWN0KGRvbV9bXCJnZXRTdHlsZVwiXSkoZWwsICdkaXNwbGF5JykgIT09ICdub25lJyAmJiBPYmplY3QoZG9tX1tcImdldFN0eWxlXCJdKShlbCwgJ3Zpc2liaWxpdHknKSAhPT0gJ2hpZGRlbicpIHtcbiAgICAgIE9iamVjdC5rZXlzKGVsLm1hc2tTdHlsZSkuZm9yRWFjaChmdW5jdGlvbiAocHJvcGVydHkpIHtcbiAgICAgICAgZWwubWFzay5zdHlsZVtwcm9wZXJ0eV0gPSBlbC5tYXNrU3R5bGVbcHJvcGVydHldO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChlbC5vcmlnaW5hbFBvc2l0aW9uICE9PSAnYWJzb2x1dGUnICYmIGVsLm9yaWdpbmFsUG9zaXRpb24gIT09ICdmaXhlZCcgJiYgZWwub3JpZ2luYWxQb3NpdGlvbiAhPT0gJ3N0aWNreScpIHtcbiAgICAgICAgT2JqZWN0KGRvbV9bXCJhZGRDbGFzc1wiXSkocGFyZW50LCAnZWwtbG9hZGluZy1wYXJlbnQtLXJlbGF0aXZlJyk7XG4gICAgICB9XG4gICAgICBpZiAoYmluZGluZy5tb2RpZmllcnMuZnVsbHNjcmVlbiAmJiBiaW5kaW5nLm1vZGlmaWVycy5sb2NrKSB7XG4gICAgICAgIE9iamVjdChkb21fW1wiYWRkQ2xhc3NcIl0pKHBhcmVudCwgJ2VsLWxvYWRpbmctcGFyZW50LS1oaWRkZW4nKTtcbiAgICAgIH1cbiAgICAgIGVsLmRvbVZpc2libGUgPSB0cnVlO1xuXG4gICAgICBwYXJlbnQuYXBwZW5kQ2hpbGQoZWwubWFzayk7XG4gICAgICBWdWUubmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoZWwuaW5zdGFuY2UuaGlkaW5nKSB7XG4gICAgICAgICAgZWwuaW5zdGFuY2UuJGVtaXQoJ2FmdGVyLWxlYXZlJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZWwuaW5zdGFuY2UudmlzaWJsZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgZWwuZG9tSW5zZXJ0ZWQgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoZWwuZG9tVmlzaWJsZSAmJiBlbC5pbnN0YW5jZS5oaWRpbmcgPT09IHRydWUpIHtcbiAgICAgIGVsLmluc3RhbmNlLnZpc2libGUgPSB0cnVlO1xuICAgICAgZWwuaW5zdGFuY2UuaGlkaW5nID0gZmFsc2U7XG4gICAgfVxuICB9O1xuXG4gIFZ1ZS5kaXJlY3RpdmUoJ2xvYWRpbmcnLCB7XG4gICAgYmluZDogZnVuY3Rpb24gYmluZChlbCwgYmluZGluZywgdm5vZGUpIHtcbiAgICAgIHZhciB0ZXh0RXhyID0gZWwuZ2V0QXR0cmlidXRlKCdlbGVtZW50LWxvYWRpbmctdGV4dCcpO1xuICAgICAgdmFyIHNwaW5uZXJFeHIgPSBlbC5nZXRBdHRyaWJ1dGUoJ2VsZW1lbnQtbG9hZGluZy1zcGlubmVyJyk7XG4gICAgICB2YXIgYmFja2dyb3VuZEV4ciA9IGVsLmdldEF0dHJpYnV0ZSgnZWxlbWVudC1sb2FkaW5nLWJhY2tncm91bmQnKTtcbiAgICAgIHZhciBjdXN0b21DbGFzc0V4ciA9IGVsLmdldEF0dHJpYnV0ZSgnZWxlbWVudC1sb2FkaW5nLWN1c3RvbS1jbGFzcycpO1xuICAgICAgdmFyIHZtID0gdm5vZGUuY29udGV4dDtcbiAgICAgIHZhciBtYXNrID0gbmV3IE1hc2soe1xuICAgICAgICBlbDogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JyksXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICB0ZXh0OiB2bSAmJiB2bVt0ZXh0RXhyXSB8fCB0ZXh0RXhyLFxuICAgICAgICAgIHNwaW5uZXI6IHZtICYmIHZtW3NwaW5uZXJFeHJdIHx8IHNwaW5uZXJFeHIsXG4gICAgICAgICAgYmFja2dyb3VuZDogdm0gJiYgdm1bYmFja2dyb3VuZEV4cl0gfHwgYmFja2dyb3VuZEV4cixcbiAgICAgICAgICBjdXN0b21DbGFzczogdm0gJiYgdm1bY3VzdG9tQ2xhc3NFeHJdIHx8IGN1c3RvbUNsYXNzRXhyLFxuICAgICAgICAgIGZ1bGxzY3JlZW46ICEhYmluZGluZy5tb2RpZmllcnMuZnVsbHNjcmVlblxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGVsLmluc3RhbmNlID0gbWFzaztcbiAgICAgIGVsLm1hc2sgPSBtYXNrLiRlbDtcbiAgICAgIGVsLm1hc2tTdHlsZSA9IHt9O1xuXG4gICAgICBiaW5kaW5nLnZhbHVlICYmIHRvZ2dsZUxvYWRpbmcoZWwsIGJpbmRpbmcpO1xuICAgIH0sXG5cbiAgICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZShlbCwgYmluZGluZykge1xuICAgICAgZWwuaW5zdGFuY2Uuc2V0VGV4dChlbC5nZXRBdHRyaWJ1dGUoJ2VsZW1lbnQtbG9hZGluZy10ZXh0JykpO1xuICAgICAgaWYgKGJpbmRpbmcub2xkVmFsdWUgIT09IGJpbmRpbmcudmFsdWUpIHtcbiAgICAgICAgdG9nZ2xlTG9hZGluZyhlbCwgYmluZGluZyk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIHVuYmluZDogZnVuY3Rpb24gdW5iaW5kKGVsLCBiaW5kaW5nKSB7XG4gICAgICBpZiAoZWwuZG9tSW5zZXJ0ZWQpIHtcbiAgICAgICAgZWwubWFzayAmJiBlbC5tYXNrLnBhcmVudE5vZGUgJiYgZWwubWFzay5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsLm1hc2spO1xuICAgICAgICB0b2dnbGVMb2FkaW5nKGVsLCB7IHZhbHVlOiBmYWxzZSwgbW9kaWZpZXJzOiBiaW5kaW5nLm1vZGlmaWVycyB9KTtcbiAgICAgIH1cbiAgICAgIGVsLmluc3RhbmNlICYmIGVsLmluc3RhbmNlLiRkZXN0cm95KCk7XG4gICAgfVxuICB9KTtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY19kaXJlY3RpdmUgPSAobG9hZGluZ0RpcmVjdGl2ZSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2xvYWRpbmcvc3JjL2luZGV4LmpzXG5cblxuXG5cblxuXG5cbnZhciBMb2FkaW5nQ29uc3RydWN0b3IgPSBleHRlcm5hbF92dWVfZGVmYXVsdC5hLmV4dGVuZChsb2FkaW5nKTtcblxudmFyIHNyY19kZWZhdWx0cyA9IHtcbiAgdGV4dDogbnVsbCxcbiAgZnVsbHNjcmVlbjogdHJ1ZSxcbiAgYm9keTogZmFsc2UsXG4gIGxvY2s6IGZhbHNlLFxuICBjdXN0b21DbGFzczogJydcbn07XG5cbnZhciBmdWxsc2NyZWVuTG9hZGluZyA9IHZvaWQgMDtcblxuTG9hZGluZ0NvbnN0cnVjdG9yLnByb3RvdHlwZS5vcmlnaW5hbFBvc2l0aW9uID0gJyc7XG5Mb2FkaW5nQ29uc3RydWN0b3IucHJvdG90eXBlLm9yaWdpbmFsT3ZlcmZsb3cgPSAnJztcblxuTG9hZGluZ0NvbnN0cnVjdG9yLnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF90aGlzID0gdGhpcztcblxuICBpZiAodGhpcy5mdWxsc2NyZWVuKSB7XG4gICAgZnVsbHNjcmVlbkxvYWRpbmcgPSB1bmRlZmluZWQ7XG4gIH1cbiAgYWZ0ZXJfbGVhdmVfZGVmYXVsdCgpKHRoaXMsIGZ1bmN0aW9uIChfKSB7XG4gICAgdmFyIHRhcmdldCA9IF90aGlzLmZ1bGxzY3JlZW4gfHwgX3RoaXMuYm9keSA/IGRvY3VtZW50LmJvZHkgOiBfdGhpcy50YXJnZXQ7XG4gICAgT2JqZWN0KGRvbV9bXCJyZW1vdmVDbGFzc1wiXSkodGFyZ2V0LCAnZWwtbG9hZGluZy1wYXJlbnQtLXJlbGF0aXZlJyk7XG4gICAgT2JqZWN0KGRvbV9bXCJyZW1vdmVDbGFzc1wiXSkodGFyZ2V0LCAnZWwtbG9hZGluZy1wYXJlbnQtLWhpZGRlbicpO1xuICAgIGlmIChfdGhpcy4kZWwgJiYgX3RoaXMuJGVsLnBhcmVudE5vZGUpIHtcbiAgICAgIF90aGlzLiRlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKF90aGlzLiRlbCk7XG4gICAgfVxuICAgIF90aGlzLiRkZXN0cm95KCk7XG4gIH0sIDMwMCk7XG4gIHRoaXMudmlzaWJsZSA9IGZhbHNlO1xufTtcblxudmFyIHNyY19hZGRTdHlsZSA9IGZ1bmN0aW9uIGFkZFN0eWxlKG9wdGlvbnMsIHBhcmVudCwgaW5zdGFuY2UpIHtcbiAgdmFyIG1hc2tTdHlsZSA9IHt9O1xuICBpZiAob3B0aW9ucy5mdWxsc2NyZWVuKSB7XG4gICAgaW5zdGFuY2Uub3JpZ2luYWxQb3NpdGlvbiA9IE9iamVjdChkb21fW1wiZ2V0U3R5bGVcIl0pKGRvY3VtZW50LmJvZHksICdwb3NpdGlvbicpO1xuICAgIGluc3RhbmNlLm9yaWdpbmFsT3ZlcmZsb3cgPSBPYmplY3QoZG9tX1tcImdldFN0eWxlXCJdKShkb2N1bWVudC5ib2R5LCAnb3ZlcmZsb3cnKTtcbiAgICBtYXNrU3R5bGUuekluZGV4ID0gcG9wdXBfW1wiUG9wdXBNYW5hZ2VyXCJdLm5leHRaSW5kZXgoKTtcbiAgfSBlbHNlIGlmIChvcHRpb25zLmJvZHkpIHtcbiAgICBpbnN0YW5jZS5vcmlnaW5hbFBvc2l0aW9uID0gT2JqZWN0KGRvbV9bXCJnZXRTdHlsZVwiXSkoZG9jdW1lbnQuYm9keSwgJ3Bvc2l0aW9uJyk7XG4gICAgWyd0b3AnLCAnbGVmdCddLmZvckVhY2goZnVuY3Rpb24gKHByb3BlcnR5KSB7XG4gICAgICB2YXIgc2Nyb2xsID0gcHJvcGVydHkgPT09ICd0b3AnID8gJ3Njcm9sbFRvcCcgOiAnc2Nyb2xsTGVmdCc7XG4gICAgICBtYXNrU3R5bGVbcHJvcGVydHldID0gb3B0aW9ucy50YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClbcHJvcGVydHldICsgZG9jdW1lbnQuYm9keVtzY3JvbGxdICsgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50W3Njcm9sbF0gKyAncHgnO1xuICAgIH0pO1xuICAgIFsnaGVpZ2h0JywgJ3dpZHRoJ10uZm9yRWFjaChmdW5jdGlvbiAocHJvcGVydHkpIHtcbiAgICAgIG1hc2tTdHlsZVtwcm9wZXJ0eV0gPSBvcHRpb25zLnRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVtwcm9wZXJ0eV0gKyAncHgnO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGluc3RhbmNlLm9yaWdpbmFsUG9zaXRpb24gPSBPYmplY3QoZG9tX1tcImdldFN0eWxlXCJdKShwYXJlbnQsICdwb3NpdGlvbicpO1xuICB9XG4gIE9iamVjdC5rZXlzKG1hc2tTdHlsZSkuZm9yRWFjaChmdW5jdGlvbiAocHJvcGVydHkpIHtcbiAgICBpbnN0YW5jZS4kZWwuc3R5bGVbcHJvcGVydHldID0gbWFza1N0eWxlW3Byb3BlcnR5XTtcbiAgfSk7XG59O1xuXG52YXIgc3JjX0xvYWRpbmcgPSBmdW5jdGlvbiBMb2FkaW5nKCkge1xuICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG5cbiAgaWYgKGV4dGVybmFsX3Z1ZV9kZWZhdWx0LmEucHJvdG90eXBlLiRpc1NlcnZlcikgcmV0dXJuO1xuICBvcHRpb25zID0gbWVyZ2VfZGVmYXVsdCgpKHt9LCBzcmNfZGVmYXVsdHMsIG9wdGlvbnMpO1xuICBpZiAodHlwZW9mIG9wdGlvbnMudGFyZ2V0ID09PSAnc3RyaW5nJykge1xuICAgIG9wdGlvbnMudGFyZ2V0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihvcHRpb25zLnRhcmdldCk7XG4gIH1cbiAgb3B0aW9ucy50YXJnZXQgPSBvcHRpb25zLnRhcmdldCB8fCBkb2N1bWVudC5ib2R5O1xuICBpZiAob3B0aW9ucy50YXJnZXQgIT09IGRvY3VtZW50LmJvZHkpIHtcbiAgICBvcHRpb25zLmZ1bGxzY3JlZW4gPSBmYWxzZTtcbiAgfSBlbHNlIHtcbiAgICBvcHRpb25zLmJvZHkgPSB0cnVlO1xuICB9XG4gIGlmIChvcHRpb25zLmZ1bGxzY3JlZW4gJiYgZnVsbHNjcmVlbkxvYWRpbmcpIHtcbiAgICByZXR1cm4gZnVsbHNjcmVlbkxvYWRpbmc7XG4gIH1cblxuICB2YXIgcGFyZW50ID0gb3B0aW9ucy5ib2R5ID8gZG9jdW1lbnQuYm9keSA6IG9wdGlvbnMudGFyZ2V0O1xuICB2YXIgaW5zdGFuY2UgPSBuZXcgTG9hZGluZ0NvbnN0cnVjdG9yKHtcbiAgICBlbDogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JyksXG4gICAgZGF0YTogb3B0aW9uc1xuICB9KTtcblxuICBzcmNfYWRkU3R5bGUob3B0aW9ucywgcGFyZW50LCBpbnN0YW5jZSk7XG4gIGlmIChpbnN0YW5jZS5vcmlnaW5hbFBvc2l0aW9uICE9PSAnYWJzb2x1dGUnICYmIGluc3RhbmNlLm9yaWdpbmFsUG9zaXRpb24gIT09ICdmaXhlZCcgJiYgaW5zdGFuY2Uub3JpZ2luYWxQb3NpdGlvbiAhPT0gJ3N0aWNreScpIHtcbiAgICBPYmplY3QoZG9tX1tcImFkZENsYXNzXCJdKShwYXJlbnQsICdlbC1sb2FkaW5nLXBhcmVudC0tcmVsYXRpdmUnKTtcbiAgfVxuICBpZiAob3B0aW9ucy5mdWxsc2NyZWVuICYmIG9wdGlvbnMubG9jaykge1xuICAgIE9iamVjdChkb21fW1wiYWRkQ2xhc3NcIl0pKHBhcmVudCwgJ2VsLWxvYWRpbmctcGFyZW50LS1oaWRkZW4nKTtcbiAgfVxuICBwYXJlbnQuYXBwZW5kQ2hpbGQoaW5zdGFuY2UuJGVsKTtcbiAgZXh0ZXJuYWxfdnVlX2RlZmF1bHQuYS5uZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgaW5zdGFuY2UudmlzaWJsZSA9IHRydWU7XG4gIH0pO1xuICBpZiAob3B0aW9ucy5mdWxsc2NyZWVuKSB7XG4gICAgZnVsbHNjcmVlbkxvYWRpbmcgPSBpbnN0YW5jZTtcbiAgfVxuICByZXR1cm4gaW5zdGFuY2U7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmMgPSAoc3JjX0xvYWRpbmcpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9sb2FkaW5nL2luZGV4LmpzXG5cblxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc19sb2FkaW5nID0gKHtcbiAgaW5zdGFsbDogZnVuY3Rpb24gaW5zdGFsbChWdWUpIHtcbiAgICBWdWUudXNlKHNyY19kaXJlY3RpdmUpO1xuICAgIFZ1ZS5wcm90b3R5cGUuJGxvYWRpbmcgPSBzcmM7XG4gIH0sXG5cbiAgZGlyZWN0aXZlOiBzcmNfZGlyZWN0aXZlLFxuICBzZXJ2aWNlOiBzcmNcbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9pY29uL3NyYy9pY29uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1jYjNmZTdmNCZcbnZhciBpY29udnVlX3R5cGVfdGVtcGxhdGVfaWRfY2IzZmU3ZjRfcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFwiaVwiLCB7IGNsYXNzOiBcImVsLWljb24tXCIgKyBfdm0ubmFtZSB9KVxufVxudmFyIGljb252dWVfdHlwZV90ZW1wbGF0ZV9pZF9jYjNmZTdmNF9zdGF0aWNSZW5kZXJGbnMgPSBbXVxuaWNvbnZ1ZV90eXBlX3RlbXBsYXRlX2lkX2NiM2ZlN2Y0X3JlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvaWNvbi9zcmMvaWNvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9Y2IzZmU3ZjQmXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2ljb24vc3JjL2ljb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgaWNvbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG5hbWU6ICdFbEljb24nLFxuXG4gIHByb3BzOiB7XG4gICAgbmFtZTogU3RyaW5nXG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9pY29uL3NyYy9pY29uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfaWNvbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChpY29udnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2ljb24vc3JjL2ljb24udnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgaWNvbl9jb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIHNyY19pY29udnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICBpY29udnVlX3R5cGVfdGVtcGxhdGVfaWRfY2IzZmU3ZjRfcmVuZGVyLFxuICBpY29udnVlX3R5cGVfdGVtcGxhdGVfaWRfY2IzZmU3ZjRfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBpY29uX2FwaTsgfVxuaWNvbl9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL2ljb24vc3JjL2ljb24udnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGljb24gPSAoaWNvbl9jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2ljb24vaW5kZXguanNcblxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuaWNvbi5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuICBWdWUuY29tcG9uZW50KGljb24ubmFtZSwgaWNvbik7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc19pY29uID0gKGljb24pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9yb3cvc3JjL3Jvdy5qc1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX3JvdyA9ICh7XG4gIG5hbWU6ICdFbFJvdycsXG5cbiAgY29tcG9uZW50TmFtZTogJ0VsUm93JyxcblxuICBwcm9wczoge1xuICAgIHRhZzoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2RpdidcbiAgICB9LFxuICAgIGd1dHRlcjogTnVtYmVyLFxuICAgIHR5cGU6IFN0cmluZyxcbiAgICBqdXN0aWZ5OiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnc3RhcnQnXG4gICAgfSxcbiAgICBhbGlnbjogU3RyaW5nXG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzdHlsZTogZnVuY3Rpb24gc3R5bGUoKSB7XG4gICAgICB2YXIgcmV0ID0ge307XG5cbiAgICAgIGlmICh0aGlzLmd1dHRlcikge1xuICAgICAgICByZXQubWFyZ2luTGVmdCA9ICctJyArIHRoaXMuZ3V0dGVyIC8gMiArICdweCc7XG4gICAgICAgIHJldC5tYXJnaW5SaWdodCA9IHJldC5tYXJnaW5MZWZ0O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmV0O1xuICAgIH1cbiAgfSxcblxuICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcihoKSB7XG4gICAgcmV0dXJuIGgodGhpcy50YWcsIHtcbiAgICAgIGNsYXNzOiBbJ2VsLXJvdycsIHRoaXMuanVzdGlmeSAhPT0gJ3N0YXJ0JyA/ICdpcy1qdXN0aWZ5LScgKyB0aGlzLmp1c3RpZnkgOiAnJywgdGhpcy5hbGlnbiA/ICdpcy1hbGlnbi0nICsgdGhpcy5hbGlnbiA6ICcnLCB7ICdlbC1yb3ctLWZsZXgnOiB0aGlzLnR5cGUgPT09ICdmbGV4JyB9XSxcbiAgICAgIHN0eWxlOiB0aGlzLnN0eWxlXG4gICAgfSwgdGhpcy4kc2xvdHMuZGVmYXVsdCk7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9yb3cvaW5kZXguanNcblxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuc3JjX3Jvdy5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuICBWdWUuY29tcG9uZW50KHNyY19yb3cubmFtZSwgc3JjX3Jvdyk7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc19yb3cgPSAoc3JjX3Jvdyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2NvbC9zcmMvY29sLmpzXG52YXIgY29sX3R5cGVvZiA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiID8gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfSA6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGNvbCA9ICh7XG4gIG5hbWU6ICdFbENvbCcsXG5cbiAgcHJvcHM6IHtcbiAgICBzcGFuOiB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBkZWZhdWx0OiAyNFxuICAgIH0sXG4gICAgdGFnOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnZGl2J1xuICAgIH0sXG4gICAgb2Zmc2V0OiBOdW1iZXIsXG4gICAgcHVsbDogTnVtYmVyLFxuICAgIHB1c2g6IE51bWJlcixcbiAgICB4czogW051bWJlciwgT2JqZWN0XSxcbiAgICBzbTogW051bWJlciwgT2JqZWN0XSxcbiAgICBtZDogW051bWJlciwgT2JqZWN0XSxcbiAgICBsZzogW051bWJlciwgT2JqZWN0XSxcbiAgICB4bDogW051bWJlciwgT2JqZWN0XVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZ3V0dGVyOiBmdW5jdGlvbiBndXR0ZXIoKSB7XG4gICAgICB2YXIgcGFyZW50ID0gdGhpcy4kcGFyZW50O1xuICAgICAgd2hpbGUgKHBhcmVudCAmJiBwYXJlbnQuJG9wdGlvbnMuY29tcG9uZW50TmFtZSAhPT0gJ0VsUm93Jykge1xuICAgICAgICBwYXJlbnQgPSBwYXJlbnQuJHBhcmVudDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwYXJlbnQgPyBwYXJlbnQuZ3V0dGVyIDogMDtcbiAgICB9XG4gIH0sXG4gIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKGgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdmFyIGNsYXNzTGlzdCA9IFtdO1xuICAgIHZhciBzdHlsZSA9IHt9O1xuXG4gICAgaWYgKHRoaXMuZ3V0dGVyKSB7XG4gICAgICBzdHlsZS5wYWRkaW5nTGVmdCA9IHRoaXMuZ3V0dGVyIC8gMiArICdweCc7XG4gICAgICBzdHlsZS5wYWRkaW5nUmlnaHQgPSBzdHlsZS5wYWRkaW5nTGVmdDtcbiAgICB9XG5cbiAgICBbJ3NwYW4nLCAnb2Zmc2V0JywgJ3B1bGwnLCAncHVzaCddLmZvckVhY2goZnVuY3Rpb24gKHByb3ApIHtcbiAgICAgIGlmIChfdGhpc1twcm9wXSB8fCBfdGhpc1twcm9wXSA9PT0gMCkge1xuICAgICAgICBjbGFzc0xpc3QucHVzaChwcm9wICE9PSAnc3BhbicgPyAnZWwtY29sLScgKyBwcm9wICsgJy0nICsgX3RoaXNbcHJvcF0gOiAnZWwtY29sLScgKyBfdGhpc1twcm9wXSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBbJ3hzJywgJ3NtJywgJ21kJywgJ2xnJywgJ3hsJ10uZm9yRWFjaChmdW5jdGlvbiAoc2l6ZSkge1xuICAgICAgaWYgKHR5cGVvZiBfdGhpc1tzaXplXSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgY2xhc3NMaXN0LnB1c2goJ2VsLWNvbC0nICsgc2l6ZSArICctJyArIF90aGlzW3NpemVdKTtcbiAgICAgIH0gZWxzZSBpZiAoY29sX3R5cGVvZihfdGhpc1tzaXplXSkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIHZhciBwcm9wcyA9IF90aGlzW3NpemVdO1xuICAgICAgICBPYmplY3Qua2V5cyhwcm9wcykuZm9yRWFjaChmdW5jdGlvbiAocHJvcCkge1xuICAgICAgICAgIGNsYXNzTGlzdC5wdXNoKHByb3AgIT09ICdzcGFuJyA/ICdlbC1jb2wtJyArIHNpemUgKyAnLScgKyBwcm9wICsgJy0nICsgcHJvcHNbcHJvcF0gOiAnZWwtY29sLScgKyBzaXplICsgJy0nICsgcHJvcHNbcHJvcF0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBoKHRoaXMudGFnLCB7XG4gICAgICBjbGFzczogWydlbC1jb2wnLCBjbGFzc0xpc3RdLFxuICAgICAgc3R5bGU6IHN0eWxlXG4gICAgfSwgdGhpcy4kc2xvdHMuZGVmYXVsdCk7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jb2wvaW5kZXguanNcblxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuY29sLmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG4gIFZ1ZS5jb21wb25lbnQoY29sLm5hbWUsIGNvbCk7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc19jb2wgPSAoY29sKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvdXBsb2FkL3NyYy91cGxvYWQtbGlzdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MTczZmVkZjUmXG52YXIgdXBsb2FkX2xpc3R2dWVfdHlwZV90ZW1wbGF0ZV9pZF8xNzNmZWRmNV9yZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJ0cmFuc2l0aW9uLWdyb3VwXCIsXG4gICAge1xuICAgICAgY2xhc3M6IFtcbiAgICAgICAgXCJlbC11cGxvYWQtbGlzdFwiLFxuICAgICAgICBcImVsLXVwbG9hZC1saXN0LS1cIiArIF92bS5saXN0VHlwZSxcbiAgICAgICAgeyBcImlzLWRpc2FibGVkXCI6IF92bS5kaXNhYmxlZCB9XG4gICAgICBdLFxuICAgICAgYXR0cnM6IHsgdGFnOiBcInVsXCIsIG5hbWU6IFwiZWwtbGlzdFwiIH1cbiAgICB9LFxuICAgIF92bS5fbChfdm0uZmlsZXMsIGZ1bmN0aW9uKGZpbGUpIHtcbiAgICAgIHJldHVybiBfYyhcbiAgICAgICAgXCJsaVwiLFxuICAgICAgICB7XG4gICAgICAgICAga2V5OiBmaWxlLnVpZCxcbiAgICAgICAgICBjbGFzczogW1xuICAgICAgICAgICAgXCJlbC11cGxvYWQtbGlzdF9faXRlbVwiLFxuICAgICAgICAgICAgXCJpcy1cIiArIGZpbGUuc3RhdHVzLFxuICAgICAgICAgICAgX3ZtLmZvY3VzaW5nID8gXCJmb2N1c2luZ1wiIDogXCJcIlxuICAgICAgICAgIF0sXG4gICAgICAgICAgYXR0cnM6IHsgdGFiaW5kZXg6IFwiMFwiIH0sXG4gICAgICAgICAgb246IHtcbiAgICAgICAgICAgIGtleWRvd246IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgIShcImJ1dHRvblwiIGluICRldmVudCkgJiZcbiAgICAgICAgICAgICAgICBfdm0uX2soJGV2ZW50LmtleUNvZGUsIFwiZGVsZXRlXCIsIFs4LCA0Nl0sICRldmVudC5rZXksIFtcbiAgICAgICAgICAgICAgICAgIFwiQmFja3NwYWNlXCIsXG4gICAgICAgICAgICAgICAgICBcIkRlbGV0ZVwiLFxuICAgICAgICAgICAgICAgICAgXCJEZWxcIlxuICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgIV92bS5kaXNhYmxlZCAmJiBfdm0uJGVtaXQoXCJyZW1vdmVcIiwgZmlsZSlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmb2N1czogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgIF92bS5mb2N1c2luZyA9IHRydWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBibHVyOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgX3ZtLmZvY3VzaW5nID0gZmFsc2VcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgIF92bS5mb2N1c2luZyA9IGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBbXG4gICAgICAgICAgX3ZtLl90KFxuICAgICAgICAgICAgXCJkZWZhdWx0XCIsXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIGZpbGUuc3RhdHVzICE9PSBcInVwbG9hZGluZ1wiICYmXG4gICAgICAgICAgICAgIFtcInBpY3R1cmUtY2FyZFwiLCBcInBpY3R1cmVcIl0uaW5kZXhPZihfdm0ubGlzdFR5cGUpID4gLTFcbiAgICAgICAgICAgICAgICA/IF9jKFwiaW1nXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtdXBsb2FkLWxpc3RfX2l0ZW0tdGh1bWJuYWlsXCIsXG4gICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHNyYzogZmlsZS51cmwsIGFsdDogXCJcIiB9XG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgIFwiYVwiLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXVwbG9hZC1saXN0X19pdGVtLW5hbWVcIixcbiAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBfdm0uaGFuZGxlQ2xpY2soZmlsZSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgX2MoXCJpXCIsIHsgc3RhdGljQ2xhc3M6IFwiZWwtaWNvbi1kb2N1bWVudFwiIH0pLFxuICAgICAgICAgICAgICAgICAgX3ZtLl92KF92bS5fcyhmaWxlLm5hbWUpICsgXCJcXG4gICAgICBcIilcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgIFwibGFiZWxcIixcbiAgICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiBcImVsLXVwbG9hZC1saXN0X19pdGVtLXN0YXR1cy1sYWJlbFwiIH0sXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgX2MoXCJpXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICBcImVsLWljb24tdXBsb2FkLXN1Y2Nlc3NcIjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICBcImVsLWljb24tY2lyY2xlLWNoZWNrXCI6IF92bS5saXN0VHlwZSA9PT0gXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgXCJlbC1pY29uLWNoZWNrXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICBbXCJwaWN0dXJlLWNhcmRcIiwgXCJwaWN0dXJlXCJdLmluZGV4T2YoX3ZtLmxpc3RUeXBlKSA+IC0xXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAhX3ZtLmRpc2FibGVkXG4gICAgICAgICAgICAgICAgPyBfYyhcImlcIiwge1xuICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1pY29uLWNsb3NlXCIsXG4gICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLiRlbWl0KFwicmVtb3ZlXCIsIGZpbGUpXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgICFfdm0uZGlzYWJsZWRcbiAgICAgICAgICAgICAgICA/IF9jKFwiaVwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLWljb24tY2xvc2UtdGlwXCIgfSwgW1xuICAgICAgICAgICAgICAgICAgICBfdm0uX3YoX3ZtLl9zKF92bS50KFwiZWwudXBsb2FkLmRlbGV0ZVRpcFwiKSkpXG4gICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgIGZpbGUuc3RhdHVzID09PSBcInVwbG9hZGluZ1wiXG4gICAgICAgICAgICAgICAgPyBfYyhcImVsLXByb2dyZXNzXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBfdm0ubGlzdFR5cGUgPT09IFwicGljdHVyZS1jYXJkXCIgPyBcImNpcmNsZVwiIDogXCJsaW5lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgXCJzdHJva2Utd2lkdGhcIjogX3ZtLmxpc3RUeXBlID09PSBcInBpY3R1cmUtY2FyZFwiID8gNiA6IDIsXG4gICAgICAgICAgICAgICAgICAgICAgcGVyY2VudGFnZTogX3ZtLnBhcnNlUGVyY2VudGFnZShmaWxlLnBlcmNlbnRhZ2UpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgX3ZtLmxpc3RUeXBlID09PSBcInBpY3R1cmUtY2FyZFwiXG4gICAgICAgICAgICAgICAgPyBfYyhcInNwYW5cIiwgeyBzdGF0aWNDbGFzczogXCJlbC11cGxvYWQtbGlzdF9faXRlbS1hY3Rpb25zXCIgfSwgW1xuICAgICAgICAgICAgICAgICAgICBfdm0uaGFuZGxlUHJldmlldyAmJiBfdm0ubGlzdFR5cGUgPT09IFwicGljdHVyZS1jYXJkXCJcbiAgICAgICAgICAgICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXVwbG9hZC1saXN0X19pdGVtLXByZXZpZXdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uaGFuZGxlUHJldmlldyhmaWxlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW19jKFwiaVwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLWljb24tem9vbS1pblwiIH0pXVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgICAgICAgICFfdm0uZGlzYWJsZWRcbiAgICAgICAgICAgICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXVwbG9hZC1saXN0X19pdGVtLWRlbGV0ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS4kZW1pdChcInJlbW92ZVwiLCBmaWxlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW19jKFwiaVwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLWljb24tZGVsZXRlXCIgfSldXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgeyBmaWxlOiBmaWxlIH1cbiAgICAgICAgICApXG4gICAgICAgIF0sXG4gICAgICAgIDJcbiAgICAgIClcbiAgICB9KSxcbiAgICAwXG4gIClcbn1cbnZhciB1cGxvYWRfbGlzdHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzE3M2ZlZGY1X3N0YXRpY1JlbmRlckZucyA9IFtdXG51cGxvYWRfbGlzdHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzE3M2ZlZGY1X3JlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdXBsb2FkL3NyYy91cGxvYWQtbGlzdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MTczZmVkZjUmXG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJlbGVtZW50LXVpL2xpYi9wcm9ncmVzc1wiXG52YXIgcHJvZ3Jlc3NfID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNCk7XG52YXIgcHJvZ3Jlc3NfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4ocHJvZ3Jlc3NfKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvdXBsb2FkL3NyYy91cGxvYWQtbGlzdC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5cblxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciB1cGxvYWRfbGlzdHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG5cbiAgbmFtZTogJ0VsVXBsb2FkTGlzdCcsXG5cbiAgbWl4aW5zOiBbbG9jYWxlX2RlZmF1bHQuYV0sXG5cbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZm9jdXNpbmc6IGZhbHNlXG4gICAgfTtcbiAgfSxcblxuICBjb21wb25lbnRzOiB7IEVsUHJvZ3Jlc3M6IHByb2dyZXNzX2RlZmF1bHQuYSB9LFxuXG4gIHByb3BzOiB7XG4gICAgZmlsZXM6IHtcbiAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgZGVmYXVsdDogZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGRpc2FibGVkOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9LFxuICAgIGhhbmRsZVByZXZpZXc6IEZ1bmN0aW9uLFxuICAgIGxpc3RUeXBlOiBTdHJpbmdcbiAgfSxcbiAgbWV0aG9kczoge1xuICAgIHBhcnNlUGVyY2VudGFnZTogZnVuY3Rpb24gcGFyc2VQZXJjZW50YWdlKHZhbCkge1xuICAgICAgcmV0dXJuIHBhcnNlSW50KHZhbCwgMTApO1xuICAgIH0sXG4gICAgaGFuZGxlQ2xpY2s6IGZ1bmN0aW9uIGhhbmRsZUNsaWNrKGZpbGUpIHtcbiAgICAgIHRoaXMuaGFuZGxlUHJldmlldyAmJiB0aGlzLmhhbmRsZVByZXZpZXcoZmlsZSk7XG4gICAgfVxuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdXBsb2FkL3NyYy91cGxvYWQtbGlzdC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX3VwbG9hZF9saXN0dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHVwbG9hZF9saXN0dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3VwbG9hZC9zcmMvdXBsb2FkLWxpc3QudnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgdXBsb2FkX2xpc3RfY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBzcmNfdXBsb2FkX2xpc3R2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIHVwbG9hZF9saXN0dnVlX3R5cGVfdGVtcGxhdGVfaWRfMTczZmVkZjVfcmVuZGVyLFxuICB1cGxvYWRfbGlzdHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzE3M2ZlZGY1X3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgdXBsb2FkX2xpc3RfYXBpOyB9XG51cGxvYWRfbGlzdF9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL3VwbG9hZC9zcmMvdXBsb2FkLWxpc3QudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHVwbG9hZF9saXN0ID0gKHVwbG9hZF9saXN0X2NvbXBvbmVudC5leHBvcnRzKTtcbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJiYWJlbC1oZWxwZXItdnVlLWpzeC1tZXJnZS1wcm9wc1wiXG52YXIgZXh0ZXJuYWxfYmFiZWxfaGVscGVyX3Z1ZV9qc3hfbWVyZ2VfcHJvcHNfID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNCk7XG52YXIgZXh0ZXJuYWxfYmFiZWxfaGVscGVyX3Z1ZV9qc3hfbWVyZ2VfcHJvcHNfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oZXh0ZXJuYWxfYmFiZWxfaGVscGVyX3Z1ZV9qc3hfbWVyZ2VfcHJvcHNfKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy91cGxvYWQvc3JjL2FqYXguanNcbmZ1bmN0aW9uIGdldEVycm9yKGFjdGlvbiwgb3B0aW9uLCB4aHIpIHtcbiAgdmFyIG1zZyA9IHZvaWQgMDtcbiAgaWYgKHhoci5yZXNwb25zZSkge1xuICAgIG1zZyA9ICcnICsgKHhoci5yZXNwb25zZS5lcnJvciB8fCB4aHIucmVzcG9uc2UpO1xuICB9IGVsc2UgaWYgKHhoci5yZXNwb25zZVRleHQpIHtcbiAgICBtc2cgPSAnJyArIHhoci5yZXNwb25zZVRleHQ7XG4gIH0gZWxzZSB7XG4gICAgbXNnID0gJ2ZhaWwgdG8gcG9zdCAnICsgYWN0aW9uICsgJyAnICsgeGhyLnN0YXR1cztcbiAgfVxuXG4gIHZhciBlcnIgPSBuZXcgRXJyb3IobXNnKTtcbiAgZXJyLnN0YXR1cyA9IHhoci5zdGF0dXM7XG4gIGVyci5tZXRob2QgPSAncG9zdCc7XG4gIGVyci51cmwgPSBhY3Rpb247XG4gIHJldHVybiBlcnI7XG59XG5cbmZ1bmN0aW9uIGdldEJvZHkoeGhyKSB7XG4gIHZhciB0ZXh0ID0geGhyLnJlc3BvbnNlVGV4dCB8fCB4aHIucmVzcG9uc2U7XG4gIGlmICghdGV4dCkge1xuICAgIHJldHVybiB0ZXh0O1xuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZSh0ZXh0KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB0ZXh0O1xuICB9XG59XG5cbmZ1bmN0aW9uIHVwbG9hZChvcHRpb24pIHtcbiAgaWYgKHR5cGVvZiBYTUxIdHRwUmVxdWVzdCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gIHZhciBhY3Rpb24gPSBvcHRpb24uYWN0aW9uO1xuXG4gIGlmICh4aHIudXBsb2FkKSB7XG4gICAgeGhyLnVwbG9hZC5vbnByb2dyZXNzID0gZnVuY3Rpb24gcHJvZ3Jlc3MoZSkge1xuICAgICAgaWYgKGUudG90YWwgPiAwKSB7XG4gICAgICAgIGUucGVyY2VudCA9IGUubG9hZGVkIC8gZS50b3RhbCAqIDEwMDtcbiAgICAgIH1cbiAgICAgIG9wdGlvbi5vblByb2dyZXNzKGUpO1xuICAgIH07XG4gIH1cblxuICB2YXIgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcblxuICBpZiAob3B0aW9uLmRhdGEpIHtcbiAgICBPYmplY3Qua2V5cyhvcHRpb24uZGF0YSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICBmb3JtRGF0YS5hcHBlbmQoa2V5LCBvcHRpb24uZGF0YVtrZXldKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZvcm1EYXRhLmFwcGVuZChvcHRpb24uZmlsZW5hbWUsIG9wdGlvbi5maWxlLCBvcHRpb24uZmlsZS5uYW1lKTtcblxuICB4aHIub25lcnJvciA9IGZ1bmN0aW9uIGVycm9yKGUpIHtcbiAgICBvcHRpb24ub25FcnJvcihlKTtcbiAgfTtcblxuICB4aHIub25sb2FkID0gZnVuY3Rpb24gb25sb2FkKCkge1xuICAgIGlmICh4aHIuc3RhdHVzIDwgMjAwIHx8IHhoci5zdGF0dXMgPj0gMzAwKSB7XG4gICAgICByZXR1cm4gb3B0aW9uLm9uRXJyb3IoZ2V0RXJyb3IoYWN0aW9uLCBvcHRpb24sIHhocikpO1xuICAgIH1cblxuICAgIG9wdGlvbi5vblN1Y2Nlc3MoZ2V0Qm9keSh4aHIpKTtcbiAgfTtcblxuICB4aHIub3BlbigncG9zdCcsIGFjdGlvbiwgdHJ1ZSk7XG5cbiAgaWYgKG9wdGlvbi53aXRoQ3JlZGVudGlhbHMgJiYgJ3dpdGhDcmVkZW50aWFscycgaW4geGhyKSB7XG4gICAgeGhyLndpdGhDcmVkZW50aWFscyA9IHRydWU7XG4gIH1cblxuICB2YXIgaGVhZGVycyA9IG9wdGlvbi5oZWFkZXJzIHx8IHt9O1xuXG4gIGZvciAodmFyIGl0ZW0gaW4gaGVhZGVycykge1xuICAgIGlmIChoZWFkZXJzLmhhc093blByb3BlcnR5KGl0ZW0pICYmIGhlYWRlcnNbaXRlbV0gIT09IG51bGwpIHtcbiAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKGl0ZW0sIGhlYWRlcnNbaXRlbV0pO1xuICAgIH1cbiAgfVxuICB4aHIuc2VuZChmb3JtRGF0YSk7XG4gIHJldHVybiB4aHI7XG59XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3VwbG9hZC9zcmMvdXBsb2FkLWRyYWdnZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTdlYmJmMjE5JlxudmFyIHVwbG9hZF9kcmFnZ2VydnVlX3R5cGVfdGVtcGxhdGVfaWRfN2ViYmYyMTlfcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAge1xuICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtdXBsb2FkLWRyYWdnZXJcIixcbiAgICAgIGNsYXNzOiB7XG4gICAgICAgIFwiaXMtZHJhZ292ZXJcIjogX3ZtLmRyYWdvdmVyXG4gICAgICB9LFxuICAgICAgb246IHtcbiAgICAgICAgZHJvcDogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICByZXR1cm4gX3ZtLm9uRHJvcCgkZXZlbnQpXG4gICAgICAgIH0sXG4gICAgICAgIGRyYWdvdmVyOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgIHJldHVybiBfdm0ub25EcmFnb3ZlcigkZXZlbnQpXG4gICAgICAgIH0sXG4gICAgICAgIGRyYWdsZWF2ZTogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICBfdm0uZHJhZ292ZXIgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBbX3ZtLl90KFwiZGVmYXVsdFwiKV0sXG4gICAgMlxuICApXG59XG52YXIgdXBsb2FkX2RyYWdnZXJ2dWVfdHlwZV90ZW1wbGF0ZV9pZF83ZWJiZjIxOV9zdGF0aWNSZW5kZXJGbnMgPSBbXVxudXBsb2FkX2RyYWdnZXJ2dWVfdHlwZV90ZW1wbGF0ZV9pZF83ZWJiZjIxOV9yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3VwbG9hZC9zcmMvdXBsb2FkLWRyYWdnZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTdlYmJmMjE5JlxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy91cGxvYWQvc3JjL3VwbG9hZC1kcmFnZ2VyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHVwbG9hZF9kcmFnZ2VydnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbmFtZTogJ0VsVXBsb2FkRHJhZycsXG4gIHByb3BzOiB7XG4gICAgZGlzYWJsZWQ6IEJvb2xlYW5cbiAgfSxcbiAgaW5qZWN0OiB7XG4gICAgdXBsb2FkZXI6IHtcbiAgICAgIGRlZmF1bHQ6ICcnXG4gICAgfVxuICB9LFxuICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBkcmFnb3ZlcjogZmFsc2VcbiAgICB9O1xuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvbkRyYWdvdmVyOiBmdW5jdGlvbiBvbkRyYWdvdmVyKCkge1xuICAgICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgIHRoaXMuZHJhZ292ZXIgPSB0cnVlO1xuICAgICAgfVxuICAgIH0sXG4gICAgb25Ecm9wOiBmdW5jdGlvbiBvbkRyb3AoZSkge1xuICAgICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgIXRoaXMudXBsb2FkZXIpIHJldHVybjtcbiAgICAgIHZhciBhY2NlcHQgPSB0aGlzLnVwbG9hZGVyLmFjY2VwdDtcbiAgICAgIHRoaXMuZHJhZ292ZXIgPSBmYWxzZTtcbiAgICAgIGlmICghYWNjZXB0KSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ2ZpbGUnLCBlLmRhdGFUcmFuc2Zlci5maWxlcyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuJGVtaXQoJ2ZpbGUnLCBbXS5zbGljZS5jYWxsKGUuZGF0YVRyYW5zZmVyLmZpbGVzKS5maWx0ZXIoZnVuY3Rpb24gKGZpbGUpIHtcbiAgICAgICAgdmFyIHR5cGUgPSBmaWxlLnR5cGUsXG4gICAgICAgICAgICBuYW1lID0gZmlsZS5uYW1lO1xuXG4gICAgICAgIHZhciBleHRlbnNpb24gPSBuYW1lLmluZGV4T2YoJy4nKSA+IC0xID8gJy4nICsgbmFtZS5zcGxpdCgnLicpLnBvcCgpIDogJyc7XG4gICAgICAgIHZhciBiYXNlVHlwZSA9IHR5cGUucmVwbGFjZSgvXFwvLiokLywgJycpO1xuICAgICAgICByZXR1cm4gYWNjZXB0LnNwbGl0KCcsJykubWFwKGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgICAgICAgcmV0dXJuIHR5cGUudHJpbSgpO1xuICAgICAgICB9KS5maWx0ZXIoZnVuY3Rpb24gKHR5cGUpIHtcbiAgICAgICAgICByZXR1cm4gdHlwZTtcbiAgICAgICAgfSkuc29tZShmdW5jdGlvbiAoYWNjZXB0ZWRUeXBlKSB7XG4gICAgICAgICAgaWYgKC9cXC4uKyQvLnRlc3QoYWNjZXB0ZWRUeXBlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGV4dGVuc2lvbiA9PT0gYWNjZXB0ZWRUeXBlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoL1xcL1xcKiQvLnRlc3QoYWNjZXB0ZWRUeXBlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGJhc2VUeXBlID09PSBhY2NlcHRlZFR5cGUucmVwbGFjZSgvXFwvXFwqJC8sICcnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKC9eW15cXC9dK1xcL1teXFwvXSskLy50ZXN0KGFjY2VwdGVkVHlwZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0eXBlID09PSBhY2NlcHRlZFR5cGU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgICB9KSk7XG4gICAgfVxuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdXBsb2FkL3NyYy91cGxvYWQtZHJhZ2dlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX3VwbG9hZF9kcmFnZ2VydnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHVwbG9hZF9kcmFnZ2VydnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3VwbG9hZC9zcmMvdXBsb2FkLWRyYWdnZXIudnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgdXBsb2FkX2RyYWdnZXJfY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBzcmNfdXBsb2FkX2RyYWdnZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIHVwbG9hZF9kcmFnZ2VydnVlX3R5cGVfdGVtcGxhdGVfaWRfN2ViYmYyMTlfcmVuZGVyLFxuICB1cGxvYWRfZHJhZ2dlcnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzdlYmJmMjE5X3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgdXBsb2FkX2RyYWdnZXJfYXBpOyB9XG51cGxvYWRfZHJhZ2dlcl9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL3VwbG9hZC9zcmMvdXBsb2FkLWRyYWdnZXIudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHVwbG9hZF9kcmFnZ2VyID0gKHVwbG9hZF9kcmFnZ2VyX2NvbXBvbmVudC5leHBvcnRzKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3VwbG9hZC9zcmMvdXBsb2FkLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcblxuXG5cblxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciB1cGxvYWR2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBpbmplY3Q6IFsndXBsb2FkZXInXSxcbiAgY29tcG9uZW50czoge1xuICAgIFVwbG9hZERyYWdnZXI6IHVwbG9hZF9kcmFnZ2VyXG4gIH0sXG4gIHByb3BzOiB7XG4gICAgdHlwZTogU3RyaW5nLFxuICAgIGFjdGlvbjoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIG5hbWU6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdmaWxlJ1xuICAgIH0sXG4gICAgZGF0YTogT2JqZWN0LFxuICAgIGhlYWRlcnM6IE9iamVjdCxcbiAgICB3aXRoQ3JlZGVudGlhbHM6IEJvb2xlYW4sXG4gICAgbXVsdGlwbGU6IEJvb2xlYW4sXG4gICAgYWNjZXB0OiBTdHJpbmcsXG4gICAgb25TdGFydDogRnVuY3Rpb24sXG4gICAgb25Qcm9ncmVzczogRnVuY3Rpb24sXG4gICAgb25TdWNjZXNzOiBGdW5jdGlvbixcbiAgICBvbkVycm9yOiBGdW5jdGlvbixcbiAgICBiZWZvcmVVcGxvYWQ6IEZ1bmN0aW9uLFxuICAgIGRyYWc6IEJvb2xlYW4sXG4gICAgb25QcmV2aWV3OiB7XG4gICAgICB0eXBlOiBGdW5jdGlvbixcbiAgICAgIGRlZmF1bHQ6IGZ1bmN0aW9uIF9kZWZhdWx0KCkge31cbiAgICB9LFxuICAgIG9uUmVtb3ZlOiB7XG4gICAgICB0eXBlOiBGdW5jdGlvbixcbiAgICAgIGRlZmF1bHQ6IGZ1bmN0aW9uIF9kZWZhdWx0KCkge31cbiAgICB9LFxuICAgIGZpbGVMaXN0OiBBcnJheSxcbiAgICBhdXRvVXBsb2FkOiBCb29sZWFuLFxuICAgIGxpc3RUeXBlOiBTdHJpbmcsXG4gICAgaHR0cFJlcXVlc3Q6IHtcbiAgICAgIHR5cGU6IEZ1bmN0aW9uLFxuICAgICAgZGVmYXVsdDogdXBsb2FkXG4gICAgfSxcbiAgICBkaXNhYmxlZDogQm9vbGVhbixcbiAgICBsaW1pdDogTnVtYmVyLFxuICAgIG9uRXhjZWVkOiBGdW5jdGlvblxuICB9LFxuXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1vdXNlb3ZlcjogZmFsc2UsXG4gICAgICByZXFzOiB7fVxuICAgIH07XG4gIH0sXG5cblxuICBtZXRob2RzOiB7XG4gICAgaXNJbWFnZTogZnVuY3Rpb24gaXNJbWFnZShzdHIpIHtcbiAgICAgIHJldHVybiBzdHIuaW5kZXhPZignaW1hZ2UnKSAhPT0gLTE7XG4gICAgfSxcbiAgICBoYW5kbGVDaGFuZ2U6IGZ1bmN0aW9uIGhhbmRsZUNoYW5nZShldikge1xuICAgICAgdmFyIGZpbGVzID0gZXYudGFyZ2V0LmZpbGVzO1xuXG4gICAgICBpZiAoIWZpbGVzKSByZXR1cm47XG4gICAgICB0aGlzLnVwbG9hZEZpbGVzKGZpbGVzKTtcbiAgICB9LFxuICAgIHVwbG9hZEZpbGVzOiBmdW5jdGlvbiB1cGxvYWRGaWxlcyhmaWxlcykge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgaWYgKHRoaXMubGltaXQgJiYgdGhpcy5maWxlTGlzdC5sZW5ndGggKyBmaWxlcy5sZW5ndGggPiB0aGlzLmxpbWl0KSB7XG4gICAgICAgIHRoaXMub25FeGNlZWQgJiYgdGhpcy5vbkV4Y2VlZChmaWxlcywgdGhpcy5maWxlTGlzdCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIHBvc3RGaWxlcyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZpbGVzKTtcbiAgICAgIGlmICghdGhpcy5tdWx0aXBsZSkge1xuICAgICAgICBwb3N0RmlsZXMgPSBwb3N0RmlsZXMuc2xpY2UoMCwgMSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChwb3N0RmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcG9zdEZpbGVzLmZvckVhY2goZnVuY3Rpb24gKHJhd0ZpbGUpIHtcbiAgICAgICAgX3RoaXMub25TdGFydChyYXdGaWxlKTtcbiAgICAgICAgaWYgKF90aGlzLmF1dG9VcGxvYWQpIF90aGlzLnVwbG9hZChyYXdGaWxlKTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgdXBsb2FkOiBmdW5jdGlvbiB1cGxvYWQocmF3RmlsZSkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHRoaXMuJHJlZnMuaW5wdXQudmFsdWUgPSBudWxsO1xuXG4gICAgICBpZiAoIXRoaXMuYmVmb3JlVXBsb2FkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBvc3QocmF3RmlsZSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBiZWZvcmUgPSB0aGlzLmJlZm9yZVVwbG9hZChyYXdGaWxlKTtcbiAgICAgIGlmIChiZWZvcmUgJiYgYmVmb3JlLnRoZW4pIHtcbiAgICAgICAgYmVmb3JlLnRoZW4oZnVuY3Rpb24gKHByb2Nlc3NlZEZpbGUpIHtcbiAgICAgICAgICB2YXIgZmlsZVR5cGUgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocHJvY2Vzc2VkRmlsZSk7XG5cbiAgICAgICAgICBpZiAoZmlsZVR5cGUgPT09ICdbb2JqZWN0IEZpbGVdJyB8fCBmaWxlVHlwZSA9PT0gJ1tvYmplY3QgQmxvYl0nKSB7XG4gICAgICAgICAgICBpZiAoZmlsZVR5cGUgPT09ICdbb2JqZWN0IEJsb2JdJykge1xuICAgICAgICAgICAgICBwcm9jZXNzZWRGaWxlID0gbmV3IEZpbGUoW3Byb2Nlc3NlZEZpbGVdLCByYXdGaWxlLm5hbWUsIHtcbiAgICAgICAgICAgICAgICB0eXBlOiByYXdGaWxlLnR5cGVcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHJhd0ZpbGUpIHtcbiAgICAgICAgICAgICAgaWYgKHJhd0ZpbGUuaGFzT3duUHJvcGVydHkocCkpIHtcbiAgICAgICAgICAgICAgICBwcm9jZXNzZWRGaWxlW3BdID0gcmF3RmlsZVtwXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX3RoaXMyLnBvc3QocHJvY2Vzc2VkRmlsZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIF90aGlzMi5wb3N0KHJhd0ZpbGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF90aGlzMi5vblJlbW92ZShudWxsLCByYXdGaWxlKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKGJlZm9yZSAhPT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5wb3N0KHJhd0ZpbGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vblJlbW92ZShudWxsLCByYXdGaWxlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGFib3J0OiBmdW5jdGlvbiBhYm9ydChmaWxlKSB7XG4gICAgICB2YXIgcmVxcyA9IHRoaXMucmVxcztcblxuICAgICAgaWYgKGZpbGUpIHtcbiAgICAgICAgdmFyIHVpZCA9IGZpbGU7XG4gICAgICAgIGlmIChmaWxlLnVpZCkgdWlkID0gZmlsZS51aWQ7XG4gICAgICAgIGlmIChyZXFzW3VpZF0pIHtcbiAgICAgICAgICByZXFzW3VpZF0uYWJvcnQoKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgT2JqZWN0LmtleXMocmVxcykuZm9yRWFjaChmdW5jdGlvbiAodWlkKSB7XG4gICAgICAgICAgaWYgKHJlcXNbdWlkXSkgcmVxc1t1aWRdLmFib3J0KCk7XG4gICAgICAgICAgZGVsZXRlIHJlcXNbdWlkXTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBwb3N0OiBmdW5jdGlvbiBwb3N0KHJhd0ZpbGUpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgICB2YXIgdWlkID0gcmF3RmlsZS51aWQ7XG5cbiAgICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXG4gICAgICAgIHdpdGhDcmVkZW50aWFsczogdGhpcy53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgIGZpbGU6IHJhd0ZpbGUsXG4gICAgICAgIGRhdGE6IHRoaXMuZGF0YSxcbiAgICAgICAgZmlsZW5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgYWN0aW9uOiB0aGlzLmFjdGlvbixcbiAgICAgICAgb25Qcm9ncmVzczogZnVuY3Rpb24gb25Qcm9ncmVzcyhlKSB7XG4gICAgICAgICAgX3RoaXMzLm9uUHJvZ3Jlc3MoZSwgcmF3RmlsZSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uU3VjY2VzczogZnVuY3Rpb24gb25TdWNjZXNzKHJlcykge1xuICAgICAgICAgIF90aGlzMy5vblN1Y2Nlc3MocmVzLCByYXdGaWxlKTtcbiAgICAgICAgICBkZWxldGUgX3RoaXMzLnJlcXNbdWlkXTtcbiAgICAgICAgfSxcbiAgICAgICAgb25FcnJvcjogZnVuY3Rpb24gb25FcnJvcihlcnIpIHtcbiAgICAgICAgICBfdGhpczMub25FcnJvcihlcnIsIHJhd0ZpbGUpO1xuICAgICAgICAgIGRlbGV0ZSBfdGhpczMucmVxc1t1aWRdO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgdmFyIHJlcSA9IHRoaXMuaHR0cFJlcXVlc3Qob3B0aW9ucyk7XG4gICAgICB0aGlzLnJlcXNbdWlkXSA9IHJlcTtcbiAgICAgIGlmIChyZXEgJiYgcmVxLnRoZW4pIHtcbiAgICAgICAgcmVxLnRoZW4ob3B0aW9ucy5vblN1Y2Nlc3MsIG9wdGlvbnMub25FcnJvcik7XG4gICAgICB9XG4gICAgfSxcbiAgICBoYW5kbGVDbGljazogZnVuY3Rpb24gaGFuZGxlQ2xpY2soKSB7XG4gICAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgdGhpcy4kcmVmcy5pbnB1dC52YWx1ZSA9IG51bGw7XG4gICAgICAgIHRoaXMuJHJlZnMuaW5wdXQuY2xpY2soKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGhhbmRsZUtleWRvd246IGZ1bmN0aW9uIGhhbmRsZUtleWRvd24oZSkge1xuICAgICAgaWYgKGUudGFyZ2V0ICE9PSBlLmN1cnJlbnRUYXJnZXQpIHJldHVybjtcbiAgICAgIGlmIChlLmtleUNvZGUgPT09IDEzIHx8IGUua2V5Q29kZSA9PT0gMzIpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVDbGljaygpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcihoKSB7XG4gICAgdmFyIGhhbmRsZUNsaWNrID0gdGhpcy5oYW5kbGVDbGljayxcbiAgICAgICAgZHJhZyA9IHRoaXMuZHJhZyxcbiAgICAgICAgbmFtZSA9IHRoaXMubmFtZSxcbiAgICAgICAgaGFuZGxlQ2hhbmdlID0gdGhpcy5oYW5kbGVDaGFuZ2UsXG4gICAgICAgIG11bHRpcGxlID0gdGhpcy5tdWx0aXBsZSxcbiAgICAgICAgYWNjZXB0ID0gdGhpcy5hY2NlcHQsXG4gICAgICAgIGxpc3RUeXBlID0gdGhpcy5saXN0VHlwZSxcbiAgICAgICAgdXBsb2FkRmlsZXMgPSB0aGlzLnVwbG9hZEZpbGVzLFxuICAgICAgICBkaXNhYmxlZCA9IHRoaXMuZGlzYWJsZWQsXG4gICAgICAgIGhhbmRsZUtleWRvd24gPSB0aGlzLmhhbmRsZUtleWRvd247XG5cbiAgICB2YXIgZGF0YSA9IHtcbiAgICAgIGNsYXNzOiB7XG4gICAgICAgICdlbC11cGxvYWQnOiB0cnVlXG4gICAgICB9LFxuICAgICAgb246IHtcbiAgICAgICAgY2xpY2s6IGhhbmRsZUNsaWNrLFxuICAgICAgICBrZXlkb3duOiBoYW5kbGVLZXlkb3duXG4gICAgICB9XG4gICAgfTtcbiAgICBkYXRhLmNsYXNzWydlbC11cGxvYWQtLScgKyBsaXN0VHlwZV0gPSB0cnVlO1xuICAgIHJldHVybiBoKFxuICAgICAgJ2RpdicsXG4gICAgICBleHRlcm5hbF9iYWJlbF9oZWxwZXJfdnVlX2pzeF9tZXJnZV9wcm9wc19kZWZhdWx0KCkoW2RhdGEsIHtcbiAgICAgICAgYXR0cnM6IHsgdGFiaW5kZXg6ICcwJyB9XG4gICAgICB9XSksXG4gICAgICBbZHJhZyA/IGgoXG4gICAgICAgICd1cGxvYWQtZHJhZ2dlcicsXG4gICAgICAgIHtcbiAgICAgICAgICBhdHRyczogeyBkaXNhYmxlZDogZGlzYWJsZWQgfSxcbiAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgJ2ZpbGUnOiB1cGxvYWRGaWxlc1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgW3RoaXMuJHNsb3RzLmRlZmF1bHRdXG4gICAgICApIDogdGhpcy4kc2xvdHMuZGVmYXVsdCwgaCgnaW5wdXQnLCB7ICdjbGFzcyc6ICdlbC11cGxvYWRfX2lucHV0JywgYXR0cnM6IHsgdHlwZTogJ2ZpbGUnLCBuYW1lOiBuYW1lLCBtdWx0aXBsZTogbXVsdGlwbGUsIGFjY2VwdDogYWNjZXB0IH0sXG4gICAgICAgIHJlZjogJ2lucHV0Jywgb246IHtcbiAgICAgICAgICAnY2hhbmdlJzogaGFuZGxlQ2hhbmdlXG4gICAgICAgIH1cbiAgICAgIH0pXVxuICAgICk7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy91cGxvYWQvc3JjL3VwbG9hZC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX3VwbG9hZHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh1cGxvYWR2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdXBsb2FkL3NyYy91cGxvYWQudnVlXG52YXIgdXBsb2FkX3JlbmRlciwgdXBsb2FkX3N0YXRpY1JlbmRlckZuc1xuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciB1cGxvYWRfY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBzcmNfdXBsb2FkdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICB1cGxvYWRfcmVuZGVyLFxuICB1cGxvYWRfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciB1cGxvYWRfYXBpOyB9XG51cGxvYWRfY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy91cGxvYWQvc3JjL3VwbG9hZC52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX3VwbG9hZCA9ICh1cGxvYWRfY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvdXBsb2FkL3NyYy9pbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG5cblxuXG5cblxuXG5mdW5jdGlvbiBzcmN2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19ub29wKCkge31cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbmFtZTogJ0VsVXBsb2FkJyxcblxuICBtaXhpbnM6IFttaWdyYXRpbmdfZGVmYXVsdC5hXSxcblxuICBjb21wb25lbnRzOiB7XG4gICAgRWxQcm9ncmVzczogcHJvZ3Jlc3NfZGVmYXVsdC5hLFxuICAgIFVwbG9hZExpc3Q6IHVwbG9hZF9saXN0LFxuICAgIFVwbG9hZDogc3JjX3VwbG9hZFxuICB9LFxuXG4gIHByb3ZpZGU6IGZ1bmN0aW9uIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHVwbG9hZGVyOiB0aGlzXG4gICAgfTtcbiAgfSxcblxuXG4gIGluamVjdDoge1xuICAgIGVsRm9ybToge1xuICAgICAgZGVmYXVsdDogJydcbiAgICB9XG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBhY3Rpb246IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICBoZWFkZXJzOiB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICBkZWZhdWx0OiBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfVxuICAgIH0sXG4gICAgZGF0YTogT2JqZWN0LFxuICAgIG11bHRpcGxlOiBCb29sZWFuLFxuICAgIG5hbWU6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdmaWxlJ1xuICAgIH0sXG4gICAgZHJhZzogQm9vbGVhbixcbiAgICBkcmFnZ2VyOiBCb29sZWFuLFxuICAgIHdpdGhDcmVkZW50aWFsczogQm9vbGVhbixcbiAgICBzaG93RmlsZUxpc3Q6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSxcbiAgICBhY2NlcHQ6IFN0cmluZyxcbiAgICB0eXBlOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnc2VsZWN0J1xuICAgIH0sXG4gICAgYmVmb3JlVXBsb2FkOiBGdW5jdGlvbixcbiAgICBiZWZvcmVSZW1vdmU6IEZ1bmN0aW9uLFxuICAgIG9uUmVtb3ZlOiB7XG4gICAgICB0eXBlOiBGdW5jdGlvbixcbiAgICAgIGRlZmF1bHQ6IHNyY3Z1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX25vb3BcbiAgICB9LFxuICAgIG9uQ2hhbmdlOiB7XG4gICAgICB0eXBlOiBGdW5jdGlvbixcbiAgICAgIGRlZmF1bHQ6IHNyY3Z1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX25vb3BcbiAgICB9LFxuICAgIG9uUHJldmlldzoge1xuICAgICAgdHlwZTogRnVuY3Rpb25cbiAgICB9LFxuICAgIG9uU3VjY2Vzczoge1xuICAgICAgdHlwZTogRnVuY3Rpb24sXG4gICAgICBkZWZhdWx0OiBzcmN2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19ub29wXG4gICAgfSxcbiAgICBvblByb2dyZXNzOiB7XG4gICAgICB0eXBlOiBGdW5jdGlvbixcbiAgICAgIGRlZmF1bHQ6IHNyY3Z1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX25vb3BcbiAgICB9LFxuICAgIG9uRXJyb3I6IHtcbiAgICAgIHR5cGU6IEZ1bmN0aW9uLFxuICAgICAgZGVmYXVsdDogc3JjdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfbm9vcFxuICAgIH0sXG4gICAgZmlsZUxpc3Q6IHtcbiAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgZGVmYXVsdDogZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGF1dG9VcGxvYWQ6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSxcbiAgICBsaXN0VHlwZToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ3RleHQnIC8vIHRleHQscGljdHVyZSxwaWN0dXJlLWNhcmRcbiAgICB9LFxuICAgIGh0dHBSZXF1ZXN0OiBGdW5jdGlvbixcbiAgICBkaXNhYmxlZDogQm9vbGVhbixcbiAgICBsaW1pdDogTnVtYmVyLFxuICAgIG9uRXhjZWVkOiB7XG4gICAgICB0eXBlOiBGdW5jdGlvbixcbiAgICAgIGRlZmF1bHQ6IHNyY3Z1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX25vb3BcbiAgICB9XG4gIH0sXG5cbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdXBsb2FkRmlsZXM6IFtdLFxuICAgICAgZHJhZ092ZXI6IGZhbHNlLFxuICAgICAgZHJhZ2luZzogZmFsc2UsXG4gICAgICB0ZW1wSW5kZXg6IDFcbiAgICB9O1xuICB9LFxuXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB1cGxvYWREaXNhYmxlZDogZnVuY3Rpb24gdXBsb2FkRGlzYWJsZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5kaXNhYmxlZCB8fCAodGhpcy5lbEZvcm0gfHwge30pLmRpc2FibGVkO1xuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIGxpc3RUeXBlOiBmdW5jdGlvbiBsaXN0VHlwZSh0eXBlKSB7XG4gICAgICBpZiAodHlwZSA9PT0gJ3BpY3R1cmUtY2FyZCcgfHwgdHlwZSA9PT0gJ3BpY3R1cmUnKSB7XG4gICAgICAgIHRoaXMudXBsb2FkRmlsZXMgPSB0aGlzLnVwbG9hZEZpbGVzLm1hcChmdW5jdGlvbiAoZmlsZSkge1xuICAgICAgICAgIGlmICghZmlsZS51cmwgJiYgZmlsZS5yYXcpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGZpbGUudXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChmaWxlLnJhdyk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignW0VsZW1lbnQgRXJyb3JdW1VwbG9hZF0nLCBlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmlsZTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGZpbGVMaXN0OiB7XG4gICAgICBpbW1lZGlhdGU6IHRydWUsXG4gICAgICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKGZpbGVMaXN0KSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgICAgdGhpcy51cGxvYWRGaWxlcyA9IGZpbGVMaXN0Lm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgIGl0ZW0udWlkID0gaXRlbS51aWQgfHwgRGF0ZS5ub3coKSArIF90aGlzLnRlbXBJbmRleCsrO1xuICAgICAgICAgIGl0ZW0uc3RhdHVzID0gaXRlbS5zdGF0dXMgfHwgJ3N1Y2Nlc3MnO1xuICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGhhbmRsZVN0YXJ0OiBmdW5jdGlvbiBoYW5kbGVTdGFydChyYXdGaWxlKSB7XG4gICAgICByYXdGaWxlLnVpZCA9IERhdGUubm93KCkgKyB0aGlzLnRlbXBJbmRleCsrO1xuICAgICAgdmFyIGZpbGUgPSB7XG4gICAgICAgIHN0YXR1czogJ3JlYWR5JyxcbiAgICAgICAgbmFtZTogcmF3RmlsZS5uYW1lLFxuICAgICAgICBzaXplOiByYXdGaWxlLnNpemUsXG4gICAgICAgIHBlcmNlbnRhZ2U6IDAsXG4gICAgICAgIHVpZDogcmF3RmlsZS51aWQsXG4gICAgICAgIHJhdzogcmF3RmlsZVxuICAgICAgfTtcblxuICAgICAgaWYgKHRoaXMubGlzdFR5cGUgPT09ICdwaWN0dXJlLWNhcmQnIHx8IHRoaXMubGlzdFR5cGUgPT09ICdwaWN0dXJlJykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGZpbGUudXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChyYXdGaWxlKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignW0VsZW1lbnQgRXJyb3JdW1VwbG9hZF0nLCBlcnIpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLnVwbG9hZEZpbGVzLnB1c2goZmlsZSk7XG4gICAgICB0aGlzLm9uQ2hhbmdlKGZpbGUsIHRoaXMudXBsb2FkRmlsZXMpO1xuICAgIH0sXG4gICAgaGFuZGxlUHJvZ3Jlc3M6IGZ1bmN0aW9uIGhhbmRsZVByb2dyZXNzKGV2LCByYXdGaWxlKSB7XG4gICAgICB2YXIgZmlsZSA9IHRoaXMuZ2V0RmlsZShyYXdGaWxlKTtcbiAgICAgIHRoaXMub25Qcm9ncmVzcyhldiwgZmlsZSwgdGhpcy51cGxvYWRGaWxlcyk7XG4gICAgICBmaWxlLnN0YXR1cyA9ICd1cGxvYWRpbmcnO1xuICAgICAgZmlsZS5wZXJjZW50YWdlID0gZXYucGVyY2VudCB8fCAwO1xuICAgIH0sXG4gICAgaGFuZGxlU3VjY2VzczogZnVuY3Rpb24gaGFuZGxlU3VjY2VzcyhyZXMsIHJhd0ZpbGUpIHtcbiAgICAgIHZhciBmaWxlID0gdGhpcy5nZXRGaWxlKHJhd0ZpbGUpO1xuXG4gICAgICBpZiAoZmlsZSkge1xuICAgICAgICBmaWxlLnN0YXR1cyA9ICdzdWNjZXNzJztcbiAgICAgICAgZmlsZS5yZXNwb25zZSA9IHJlcztcblxuICAgICAgICB0aGlzLm9uU3VjY2VzcyhyZXMsIGZpbGUsIHRoaXMudXBsb2FkRmlsZXMpO1xuICAgICAgICB0aGlzLm9uQ2hhbmdlKGZpbGUsIHRoaXMudXBsb2FkRmlsZXMpO1xuICAgICAgfVxuICAgIH0sXG4gICAgaGFuZGxlRXJyb3I6IGZ1bmN0aW9uIGhhbmRsZUVycm9yKGVyciwgcmF3RmlsZSkge1xuICAgICAgdmFyIGZpbGUgPSB0aGlzLmdldEZpbGUocmF3RmlsZSk7XG4gICAgICB2YXIgZmlsZUxpc3QgPSB0aGlzLnVwbG9hZEZpbGVzO1xuXG4gICAgICBmaWxlLnN0YXR1cyA9ICdmYWlsJztcblxuICAgICAgZmlsZUxpc3Quc3BsaWNlKGZpbGVMaXN0LmluZGV4T2YoZmlsZSksIDEpO1xuXG4gICAgICB0aGlzLm9uRXJyb3IoZXJyLCBmaWxlLCB0aGlzLnVwbG9hZEZpbGVzKTtcbiAgICAgIHRoaXMub25DaGFuZ2UoZmlsZSwgdGhpcy51cGxvYWRGaWxlcyk7XG4gICAgfSxcbiAgICBoYW5kbGVSZW1vdmU6IGZ1bmN0aW9uIGhhbmRsZVJlbW92ZShmaWxlLCByYXcpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICBpZiAocmF3KSB7XG4gICAgICAgIGZpbGUgPSB0aGlzLmdldEZpbGUocmF3KTtcbiAgICAgIH1cbiAgICAgIHZhciBkb1JlbW92ZSA9IGZ1bmN0aW9uIGRvUmVtb3ZlKCkge1xuICAgICAgICBfdGhpczIuYWJvcnQoZmlsZSk7XG4gICAgICAgIHZhciBmaWxlTGlzdCA9IF90aGlzMi51cGxvYWRGaWxlcztcbiAgICAgICAgZmlsZUxpc3Quc3BsaWNlKGZpbGVMaXN0LmluZGV4T2YoZmlsZSksIDEpO1xuICAgICAgICBfdGhpczIub25SZW1vdmUoZmlsZSwgZmlsZUxpc3QpO1xuICAgICAgfTtcblxuICAgICAgaWYgKCF0aGlzLmJlZm9yZVJlbW92ZSkge1xuICAgICAgICBkb1JlbW92ZSgpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5iZWZvcmVSZW1vdmUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdmFyIGJlZm9yZSA9IHRoaXMuYmVmb3JlUmVtb3ZlKGZpbGUsIHRoaXMudXBsb2FkRmlsZXMpO1xuICAgICAgICBpZiAoYmVmb3JlICYmIGJlZm9yZS50aGVuKSB7XG4gICAgICAgICAgYmVmb3JlLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZG9SZW1vdmUoKTtcbiAgICAgICAgICB9LCBzcmN2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19ub29wKTtcbiAgICAgICAgfSBlbHNlIGlmIChiZWZvcmUgIT09IGZhbHNlKSB7XG4gICAgICAgICAgZG9SZW1vdmUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgZ2V0RmlsZTogZnVuY3Rpb24gZ2V0RmlsZShyYXdGaWxlKSB7XG4gICAgICB2YXIgZmlsZUxpc3QgPSB0aGlzLnVwbG9hZEZpbGVzO1xuICAgICAgdmFyIHRhcmdldCA9IHZvaWQgMDtcbiAgICAgIGZpbGVMaXN0LmV2ZXJ5KGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIHRhcmdldCA9IHJhd0ZpbGUudWlkID09PSBpdGVtLnVpZCA/IGl0ZW0gOiBudWxsO1xuICAgICAgICByZXR1cm4gIXRhcmdldDtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9LFxuICAgIGFib3J0OiBmdW5jdGlvbiBhYm9ydChmaWxlKSB7XG4gICAgICB0aGlzLiRyZWZzWyd1cGxvYWQtaW5uZXInXS5hYm9ydChmaWxlKTtcbiAgICB9LFxuICAgIGNsZWFyRmlsZXM6IGZ1bmN0aW9uIGNsZWFyRmlsZXMoKSB7XG4gICAgICB0aGlzLnVwbG9hZEZpbGVzID0gW107XG4gICAgfSxcbiAgICBzdWJtaXQ6IGZ1bmN0aW9uIHN1Ym1pdCgpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgICB0aGlzLnVwbG9hZEZpbGVzLmZpbHRlcihmdW5jdGlvbiAoZmlsZSkge1xuICAgICAgICByZXR1cm4gZmlsZS5zdGF0dXMgPT09ICdyZWFkeSc7XG4gICAgICB9KS5mb3JFYWNoKGZ1bmN0aW9uIChmaWxlKSB7XG4gICAgICAgIF90aGlzMy4kcmVmc1sndXBsb2FkLWlubmVyJ10udXBsb2FkKGZpbGUucmF3KTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgZ2V0TWlncmF0aW5nQ29uZmlnOiBmdW5jdGlvbiBnZXRNaWdyYXRpbmdDb25maWcoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwcm9wczoge1xuICAgICAgICAgICdkZWZhdWx0LWZpbGUtbGlzdCc6ICdkZWZhdWx0LWZpbGUtbGlzdCBpcyByZW5hbWVkIHRvIGZpbGUtbGlzdC4nLFxuICAgICAgICAgICdzaG93LXVwbG9hZC1saXN0JzogJ3Nob3ctdXBsb2FkLWxpc3QgaXMgcmVuYW1lZCB0byBzaG93LWZpbGUtbGlzdC4nLFxuICAgICAgICAgICd0aHVtYm5haWwtbW9kZSc6ICd0aHVtYm5haWwtbW9kZSBoYXMgYmVlbiBkZXByZWNhdGVkLCB5b3UgY2FuIGltcGxlbWVudCB0aGUgc2FtZSBlZmZlY3QgYWNjb3JkaW5nIHRvIHRoaXMgY2FzZTogaHR0cDovL2VsZW1lbnQuZWxlbWUuaW8vIy96aC1DTi9jb21wb25lbnQvdXBsb2FkI3lvbmctaHUtdG91LXhpYW5nLXNoYW5nLWNodWFuJ1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfSxcblxuICBiZWZvcmVEZXN0cm95OiBmdW5jdGlvbiBiZWZvcmVEZXN0cm95KCkge1xuICAgIHRoaXMudXBsb2FkRmlsZXMuZm9yRWFjaChmdW5jdGlvbiAoZmlsZSkge1xuICAgICAgaWYgKGZpbGUudXJsICYmIGZpbGUudXJsLmluZGV4T2YoJ2Jsb2I6JykgPT09IDApIHtcbiAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTChmaWxlLnVybCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0sXG4gIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKGgpIHtcbiAgICB2YXIgX3RoaXM0ID0gdGhpcztcblxuICAgIHZhciB1cGxvYWRMaXN0ID0gdm9pZCAwO1xuXG4gICAgaWYgKHRoaXMuc2hvd0ZpbGVMaXN0KSB7XG4gICAgICB1cGxvYWRMaXN0ID0gaChcbiAgICAgICAgdXBsb2FkX2xpc3QsXG4gICAgICAgIHtcbiAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgZGlzYWJsZWQ6IHRoaXMudXBsb2FkRGlzYWJsZWQsXG4gICAgICAgICAgICBsaXN0VHlwZTogdGhpcy5saXN0VHlwZSxcbiAgICAgICAgICAgIGZpbGVzOiB0aGlzLnVwbG9hZEZpbGVzLFxuXG4gICAgICAgICAgICBoYW5kbGVQcmV2aWV3OiB0aGlzLm9uUHJldmlldyB9LFxuICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAncmVtb3ZlJzogdGhpcy5oYW5kbGVSZW1vdmVcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFtmdW5jdGlvbiAocHJvcHMpIHtcbiAgICAgICAgICBpZiAoX3RoaXM0LiRzY29wZWRTbG90cy5maWxlKSB7XG4gICAgICAgICAgICByZXR1cm4gX3RoaXM0LiRzY29wZWRTbG90cy5maWxlKHtcbiAgICAgICAgICAgICAgZmlsZTogcHJvcHMuZmlsZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XVxuICAgICAgKTtcbiAgICB9XG5cbiAgICB2YXIgdXBsb2FkRGF0YSA9IHtcbiAgICAgIHByb3BzOiB7XG4gICAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgICAgZHJhZzogdGhpcy5kcmFnLFxuICAgICAgICBhY3Rpb246IHRoaXMuYWN0aW9uLFxuICAgICAgICBtdWx0aXBsZTogdGhpcy5tdWx0aXBsZSxcbiAgICAgICAgJ2JlZm9yZS11cGxvYWQnOiB0aGlzLmJlZm9yZVVwbG9hZCxcbiAgICAgICAgJ3dpdGgtY3JlZGVudGlhbHMnOiB0aGlzLndpdGhDcmVkZW50aWFscyxcbiAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxuICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgIGRhdGE6IHRoaXMuZGF0YSxcbiAgICAgICAgYWNjZXB0OiB0aGlzLmFjY2VwdCxcbiAgICAgICAgZmlsZUxpc3Q6IHRoaXMudXBsb2FkRmlsZXMsXG4gICAgICAgIGF1dG9VcGxvYWQ6IHRoaXMuYXV0b1VwbG9hZCxcbiAgICAgICAgbGlzdFR5cGU6IHRoaXMubGlzdFR5cGUsXG4gICAgICAgIGRpc2FibGVkOiB0aGlzLnVwbG9hZERpc2FibGVkLFxuICAgICAgICBsaW1pdDogdGhpcy5saW1pdCxcbiAgICAgICAgJ29uLWV4Y2VlZCc6IHRoaXMub25FeGNlZWQsXG4gICAgICAgICdvbi1zdGFydCc6IHRoaXMuaGFuZGxlU3RhcnQsXG4gICAgICAgICdvbi1wcm9ncmVzcyc6IHRoaXMuaGFuZGxlUHJvZ3Jlc3MsXG4gICAgICAgICdvbi1zdWNjZXNzJzogdGhpcy5oYW5kbGVTdWNjZXNzLFxuICAgICAgICAnb24tZXJyb3InOiB0aGlzLmhhbmRsZUVycm9yLFxuICAgICAgICAnb24tcHJldmlldyc6IHRoaXMub25QcmV2aWV3LFxuICAgICAgICAnb24tcmVtb3ZlJzogdGhpcy5oYW5kbGVSZW1vdmUsXG4gICAgICAgICdodHRwLXJlcXVlc3QnOiB0aGlzLmh0dHBSZXF1ZXN0XG4gICAgICB9LFxuICAgICAgcmVmOiAndXBsb2FkLWlubmVyJ1xuICAgIH07XG5cbiAgICB2YXIgdHJpZ2dlciA9IHRoaXMuJHNsb3RzLnRyaWdnZXIgfHwgdGhpcy4kc2xvdHMuZGVmYXVsdDtcbiAgICB2YXIgdXBsb2FkQ29tcG9uZW50ID0gaChcbiAgICAgICd1cGxvYWQnLFxuICAgICAgdXBsb2FkRGF0YSxcbiAgICAgIFt0cmlnZ2VyXVxuICAgICk7XG5cbiAgICByZXR1cm4gaCgnZGl2JywgW3RoaXMubGlzdFR5cGUgPT09ICdwaWN0dXJlLWNhcmQnID8gdXBsb2FkTGlzdCA6ICcnLCB0aGlzLiRzbG90cy50cmlnZ2VyID8gW3VwbG9hZENvbXBvbmVudCwgdGhpcy4kc2xvdHMuZGVmYXVsdF0gOiB1cGxvYWRDb21wb25lbnQsIHRoaXMuJHNsb3RzLnRpcCwgdGhpcy5saXN0VHlwZSAhPT0gJ3BpY3R1cmUtY2FyZCcgPyB1cGxvYWRMaXN0IDogJyddKTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3VwbG9hZC9zcmMvaW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHVwbG9hZF9zcmN2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoc3JjdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3VwbG9hZC9zcmMvaW5kZXgudnVlXG52YXIgc3JjX3JlbmRlciwgc3JjX3N0YXRpY1JlbmRlckZuc1xuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciB1cGxvYWRfc3JjX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgdXBsb2FkX3NyY3Z1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgc3JjX3JlbmRlcixcbiAgc3JjX3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgc3JjX2FwaTsgfVxudXBsb2FkX3NyY19jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL3VwbG9hZC9zcmMvaW5kZXgudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHVwbG9hZF9zcmMgPSAodXBsb2FkX3NyY19jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3VwbG9hZC9pbmRleC5qc1xuXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG51cGxvYWRfc3JjLmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG4gIFZ1ZS5jb21wb25lbnQodXBsb2FkX3NyYy5uYW1lLCB1cGxvYWRfc3JjKTtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhY2thZ2VzX3VwbG9hZCA9ICh1cGxvYWRfc3JjKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvcHJvZ3Jlc3Mvc3JjL3Byb2dyZXNzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yMjllZTQwNiZcbnZhciBwcm9ncmVzc3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzIyOWVlNDA2X3JlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHtcbiAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXByb2dyZXNzXCIsXG4gICAgICBjbGFzczogW1xuICAgICAgICBcImVsLXByb2dyZXNzLS1cIiArIF92bS50eXBlLFxuICAgICAgICBfdm0uc3RhdHVzID8gXCJpcy1cIiArIF92bS5zdGF0dXMgOiBcIlwiLFxuICAgICAgICB7XG4gICAgICAgICAgXCJlbC1wcm9ncmVzcy0td2l0aG91dC10ZXh0XCI6ICFfdm0uc2hvd1RleHQsXG4gICAgICAgICAgXCJlbC1wcm9ncmVzcy0tdGV4dC1pbnNpZGVcIjogX3ZtLnRleHRJbnNpZGVcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIGF0dHJzOiB7XG4gICAgICAgIHJvbGU6IFwicHJvZ3Jlc3NiYXJcIixcbiAgICAgICAgXCJhcmlhLXZhbHVlbm93XCI6IF92bS5wZXJjZW50YWdlLFxuICAgICAgICBcImFyaWEtdmFsdWVtaW5cIjogXCIwXCIsXG4gICAgICAgIFwiYXJpYS12YWx1ZW1heFwiOiBcIjEwMFwiXG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICBfdm0udHlwZSA9PT0gXCJsaW5lXCJcbiAgICAgICAgPyBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLXByb2dyZXNzLWJhclwiIH0sIFtcbiAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtcHJvZ3Jlc3MtYmFyX19vdXRlclwiLFxuICAgICAgICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICAgICAgICBoZWlnaHQ6IF92bS5zdHJva2VXaWR0aCArIFwicHhcIixcbiAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogX3ZtLmRlZmluZUJhY2tDb2xvclxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtcHJvZ3Jlc3MtYmFyX19pbm5lclwiLFxuICAgICAgICAgICAgICAgICAgICBzdHlsZTogX3ZtLmJhclN0eWxlXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICBfdm0uc2hvd1RleHQgJiYgX3ZtLnRleHRJbnNpZGVcbiAgICAgICAgICAgICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtcHJvZ3Jlc3MtYmFyX19pbm5lclRleHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZTogeyBjb2xvcjogX3ZtLnRleHRDb2xvciB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtfdm0uX3YoX3ZtLl9zKF92bS5jb250ZW50KSldXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgKVxuICAgICAgICAgIF0pXG4gICAgICAgIDogX2MoXG4gICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1wcm9ncmVzcy1jaXJjbGVcIixcbiAgICAgICAgICAgICAgc3R5bGU6IHsgaGVpZ2h0OiBfdm0ud2lkdGggKyBcInB4XCIsIHdpZHRoOiBfdm0ud2lkdGggKyBcInB4XCIgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX2MoXCJzdmdcIiwgeyBhdHRyczogeyB2aWV3Qm94OiBcIjAgMCAxMDAgMTAwXCIgfSB9LCBbXG4gICAgICAgICAgICAgICAgX2MoXCJwYXRoXCIsIHtcbiAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXByb2dyZXNzLWNpcmNsZV9fdHJhY2tcIixcbiAgICAgICAgICAgICAgICAgIHN0eWxlOiBfdm0udHJhaWxQYXRoU3R5bGUsXG4gICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICBkOiBfdm0udHJhY2tQYXRoLFxuICAgICAgICAgICAgICAgICAgICBzdHJva2U6IF92bS5kZWZpbmVCYWNrQ29sb3IsXG4gICAgICAgICAgICAgICAgICAgIFwic3Ryb2tlLXdpZHRoXCI6IF92bS5yZWxhdGl2ZVN0cm9rZVdpZHRoLFxuICAgICAgICAgICAgICAgICAgICBmaWxsOiBcIm5vbmVcIlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIF9jKFwicGF0aFwiLCB7XG4gICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1wcm9ncmVzcy1jaXJjbGVfX3BhdGhcIixcbiAgICAgICAgICAgICAgICAgIHN0eWxlOiBfdm0uY2lyY2xlUGF0aFN0eWxlLFxuICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgZDogX3ZtLnRyYWNrUGF0aCxcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBfdm0uc3Ryb2tlLFxuICAgICAgICAgICAgICAgICAgICBmaWxsOiBcIm5vbmVcIixcbiAgICAgICAgICAgICAgICAgICAgXCJzdHJva2UtbGluZWNhcFwiOiBfdm0uc3Ryb2tlTGluZWNhcCxcbiAgICAgICAgICAgICAgICAgICAgXCJzdHJva2Utd2lkdGhcIjogX3ZtLnBlcmNlbnRhZ2UgPyBfdm0ucmVsYXRpdmVTdHJva2VXaWR0aCA6IDBcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgXVxuICAgICAgICAgICksXG4gICAgICBfdm0uc2hvd1RleHQgJiYgIV92bS50ZXh0SW5zaWRlXG4gICAgICAgID8gX2MoXG4gICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1wcm9ncmVzc19fdGV4dFwiLFxuICAgICAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgICAgIGZvbnRTaXplOiBfdm0ucHJvZ3Jlc3NUZXh0U2l6ZSArIFwicHhcIixcbiAgICAgICAgICAgICAgICBjb2xvcjogX3ZtLnRleHRDb2xvclxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAhX3ZtLnN0YXR1c1xuICAgICAgICAgICAgICAgID8gW192bS5fdihfdm0uX3MoX3ZtLmNvbnRlbnQpKV1cbiAgICAgICAgICAgICAgICA6IF9jKFwiaVwiLCB7IGNsYXNzOiBfdm0uaWNvbkNsYXNzIH0pXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgMlxuICAgICAgICAgIClcbiAgICAgICAgOiBfdm0uX2UoKVxuICAgIF1cbiAgKVxufVxudmFyIHByb2dyZXNzdnVlX3R5cGVfdGVtcGxhdGVfaWRfMjI5ZWU0MDZfc3RhdGljUmVuZGVyRm5zID0gW11cbnByb2dyZXNzdnVlX3R5cGVfdGVtcGxhdGVfaWRfMjI5ZWU0MDZfcmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9wcm9ncmVzcy9zcmMvcHJvZ3Jlc3MudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTIyOWVlNDA2JlxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9wcm9ncmVzcy9zcmMvcHJvZ3Jlc3MudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcHJvZ3Jlc3N2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBuYW1lOiAnRWxQcm9ncmVzcycsXG4gIHByb3BzOiB7XG4gICAgdHlwZToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2xpbmUnLFxuICAgICAgdmFsaWRhdG9yOiBmdW5jdGlvbiB2YWxpZGF0b3IodmFsKSB7XG4gICAgICAgIHJldHVybiBbJ2xpbmUnLCAnY2lyY2xlJywgJ2Rhc2hib2FyZCddLmluZGV4T2YodmFsKSA+IC0xO1xuICAgICAgfVxuICAgIH0sXG4gICAgcGVyY2VudGFnZToge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZGVmYXVsdDogMCxcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgdmFsaWRhdG9yOiBmdW5jdGlvbiB2YWxpZGF0b3IodmFsKSB7XG4gICAgICAgIHJldHVybiB2YWwgPj0gMCAmJiB2YWwgPD0gMTAwO1xuICAgICAgfVxuICAgIH0sXG4gICAgc3RhdHVzOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICB2YWxpZGF0b3I6IGZ1bmN0aW9uIHZhbGlkYXRvcih2YWwpIHtcbiAgICAgICAgcmV0dXJuIFsnc3VjY2VzcycsICdleGNlcHRpb24nLCAnd2FybmluZyddLmluZGV4T2YodmFsKSA+IC0xO1xuICAgICAgfVxuICAgIH0sXG4gICAgc3Ryb2tlV2lkdGg6IHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGRlZmF1bHQ6IDZcbiAgICB9LFxuICAgIHN0cm9rZUxpbmVjYXA6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdyb3VuZCdcbiAgICB9LFxuICAgIHRleHRJbnNpZGU6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0sXG4gICAgd2lkdGg6IHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGRlZmF1bHQ6IDEyNlxuICAgIH0sXG4gICAgc2hvd1RleHQ6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSxcbiAgICBjb2xvcjoge1xuICAgICAgdHlwZTogW1N0cmluZywgQXJyYXksIEZ1bmN0aW9uXSxcbiAgICAgIGRlZmF1bHQ6ICcnXG4gICAgfSxcbiAgICBkZWZpbmVCYWNrQ29sb3I6IHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIEFycmF5LCBGdW5jdGlvbl0sXG4gICAgICBkZWZhdWx0OiAnI2ViZWVmNSdcbiAgICB9LFxuICAgIHRleHRDb2xvcjoge1xuICAgICAgdHlwZTogW1N0cmluZywgQXJyYXksIEZ1bmN0aW9uXSxcbiAgICAgIGRlZmF1bHQ6ICcjNjA2MjY2J1xuICAgIH0sXG4gICAgZm9ybWF0OiBGdW5jdGlvblxuICB9LFxuICBjb21wdXRlZDoge1xuICAgIGJhclN0eWxlOiBmdW5jdGlvbiBiYXJTdHlsZSgpIHtcbiAgICAgIHZhciBzdHlsZSA9IHt9O1xuICAgICAgc3R5bGUud2lkdGggPSB0aGlzLnBlcmNlbnRhZ2UgKyAnJSc7XG4gICAgICBzdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSB0aGlzLmdldEN1cnJlbnRDb2xvcih0aGlzLnBlcmNlbnRhZ2UpO1xuICAgICAgcmV0dXJuIHN0eWxlO1xuICAgIH0sXG4gICAgcmVsYXRpdmVTdHJva2VXaWR0aDogZnVuY3Rpb24gcmVsYXRpdmVTdHJva2VXaWR0aCgpIHtcbiAgICAgIHJldHVybiAodGhpcy5zdHJva2VXaWR0aCAvIHRoaXMud2lkdGggKiAxMDApLnRvRml4ZWQoMSk7XG4gICAgfSxcbiAgICByYWRpdXM6IGZ1bmN0aW9uIHJhZGl1cygpIHtcbiAgICAgIGlmICh0aGlzLnR5cGUgPT09ICdjaXJjbGUnIHx8IHRoaXMudHlwZSA9PT0gJ2Rhc2hib2FyZCcpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KDUwIC0gcGFyc2VGbG9hdCh0aGlzLnJlbGF0aXZlU3Ryb2tlV2lkdGgpIC8gMiwgMTApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG4gICAgfSxcbiAgICB0cmFja1BhdGg6IGZ1bmN0aW9uIHRyYWNrUGF0aCgpIHtcbiAgICAgIHZhciByYWRpdXMgPSB0aGlzLnJhZGl1cztcbiAgICAgIHZhciBpc0Rhc2hib2FyZCA9IHRoaXMudHlwZSA9PT0gJ2Rhc2hib2FyZCc7XG4gICAgICByZXR1cm4gJ1xcbiAgICAgICAgTSA1MCA1MFxcbiAgICAgICAgbSAwICcgKyAoaXNEYXNoYm9hcmQgPyAnJyA6ICctJykgKyByYWRpdXMgKyAnXFxuICAgICAgICBhICcgKyByYWRpdXMgKyAnICcgKyByYWRpdXMgKyAnIDAgMSAxIDAgJyArIChpc0Rhc2hib2FyZCA/ICctJyA6ICcnKSArIHJhZGl1cyAqIDIgKyAnXFxuICAgICAgICBhICcgKyByYWRpdXMgKyAnICcgKyByYWRpdXMgKyAnIDAgMSAxIDAgJyArIChpc0Rhc2hib2FyZCA/ICcnIDogJy0nKSArIHJhZGl1cyAqIDIgKyAnXFxuICAgICAgICAnO1xuICAgIH0sXG4gICAgcGVyaW1ldGVyOiBmdW5jdGlvbiBwZXJpbWV0ZXIoKSB7XG4gICAgICByZXR1cm4gMiAqIE1hdGguUEkgKiB0aGlzLnJhZGl1cztcbiAgICB9LFxuICAgIHJhdGU6IGZ1bmN0aW9uIHJhdGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy50eXBlID09PSAnZGFzaGJvYXJkJyA/IDAuNzUgOiAxO1xuICAgIH0sXG4gICAgc3Ryb2tlRGFzaG9mZnNldDogZnVuY3Rpb24gc3Ryb2tlRGFzaG9mZnNldCgpIHtcbiAgICAgIHZhciBvZmZzZXQgPSAtMSAqIHRoaXMucGVyaW1ldGVyICogKDEgLSB0aGlzLnJhdGUpIC8gMjtcbiAgICAgIHJldHVybiBvZmZzZXQgKyAncHgnO1xuICAgIH0sXG4gICAgdHJhaWxQYXRoU3R5bGU6IGZ1bmN0aW9uIHRyYWlsUGF0aFN0eWxlKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3Ryb2tlRGFzaGFycmF5OiB0aGlzLnBlcmltZXRlciAqIHRoaXMucmF0ZSArICdweCwgJyArIHRoaXMucGVyaW1ldGVyICsgJ3B4JyxcbiAgICAgICAgc3Ryb2tlRGFzaG9mZnNldDogdGhpcy5zdHJva2VEYXNob2Zmc2V0XG4gICAgICB9O1xuICAgIH0sXG4gICAgY2lyY2xlUGF0aFN0eWxlOiBmdW5jdGlvbiBjaXJjbGVQYXRoU3R5bGUoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdHJva2VEYXNoYXJyYXk6IHRoaXMucGVyaW1ldGVyICogdGhpcy5yYXRlICogKHRoaXMucGVyY2VudGFnZSAvIDEwMCkgKyAncHgsICcgKyB0aGlzLnBlcmltZXRlciArICdweCcsXG4gICAgICAgIHN0cm9rZURhc2hvZmZzZXQ6IHRoaXMuc3Ryb2tlRGFzaG9mZnNldCxcbiAgICAgICAgdHJhbnNpdGlvbjogJ3N0cm9rZS1kYXNoYXJyYXkgMC42cyBlYXNlIDBzLCBzdHJva2UgMC42cyBlYXNlJ1xuICAgICAgfTtcbiAgICB9LFxuICAgIHN0cm9rZTogZnVuY3Rpb24gc3Ryb2tlKCkge1xuICAgICAgdmFyIHJldCA9IHZvaWQgMDtcbiAgICAgIGlmICh0aGlzLmNvbG9yKSB7XG4gICAgICAgIHJldCA9IHRoaXMuZ2V0Q3VycmVudENvbG9yKHRoaXMucGVyY2VudGFnZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzd2l0Y2ggKHRoaXMuc3RhdHVzKSB7XG4gICAgICAgICAgY2FzZSAnc3VjY2Vzcyc6XG4gICAgICAgICAgICByZXQgPSAnIzEzY2U2Nic7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdleGNlcHRpb24nOlxuICAgICAgICAgICAgcmV0ID0gJyNmZjQ5NDknO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnd2FybmluZyc6XG4gICAgICAgICAgICByZXQgPSAnI2U2YTIzYyc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0ID0gJyMyMGEwZmYnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmV0O1xuICAgIH0sXG4gICAgaWNvbkNsYXNzOiBmdW5jdGlvbiBpY29uQ2xhc3MoKSB7XG4gICAgICBpZiAodGhpcy5zdGF0dXMgPT09ICd3YXJuaW5nJykge1xuICAgICAgICByZXR1cm4gJ2VsLWljb24td2FybmluZyc7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy50eXBlID09PSAnbGluZScpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdHVzID09PSAnc3VjY2VzcycgPyAnZWwtaWNvbi1jaXJjbGUtY2hlY2snIDogJ2VsLWljb24tY2lyY2xlLWNsb3NlJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXR1cyA9PT0gJ3N1Y2Nlc3MnID8gJ2VsLWljb24tY2hlY2snIDogJ2VsLWljb24tY2xvc2UnO1xuICAgICAgfVxuICAgIH0sXG4gICAgcHJvZ3Jlc3NUZXh0U2l6ZTogZnVuY3Rpb24gcHJvZ3Jlc3NUZXh0U2l6ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnR5cGUgPT09ICdsaW5lJyA/IDEyICsgdGhpcy5zdHJva2VXaWR0aCAqIDAuNCA6IHRoaXMud2lkdGggKiAwLjExMTExMSArIDI7XG4gICAgfSxcbiAgICBjb250ZW50OiBmdW5jdGlvbiBjb250ZW50KCkge1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLmZvcm1hdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXQodGhpcy5wZXJjZW50YWdlKSB8fCAnJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBlcmNlbnRhZ2UgKyAnJSc7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBtZXRob2RzOiB7XG4gICAgZ2V0Q3VycmVudENvbG9yOiBmdW5jdGlvbiBnZXRDdXJyZW50Q29sb3IocGVyY2VudGFnZSkge1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbG9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbG9yKHBlcmNlbnRhZ2UpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5jb2xvciA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sb3I7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRMZXZlbENvbG9yKHBlcmNlbnRhZ2UpO1xuICAgICAgfVxuICAgIH0sXG4gICAgZ2V0TGV2ZWxDb2xvcjogZnVuY3Rpb24gZ2V0TGV2ZWxDb2xvcihwZXJjZW50YWdlKSB7XG4gICAgICB2YXIgY29sb3JBcnJheSA9IHRoaXMuZ2V0Q29sb3JBcnJheSgpLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgcmV0dXJuIGEucGVyY2VudGFnZSAtIGIucGVyY2VudGFnZTtcbiAgICAgIH0pO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbG9yQXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGNvbG9yQXJyYXlbaV0ucGVyY2VudGFnZSA+IHBlcmNlbnRhZ2UpIHtcbiAgICAgICAgICByZXR1cm4gY29sb3JBcnJheVtpXS5jb2xvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbG9yQXJyYXlbY29sb3JBcnJheS5sZW5ndGggLSAxXS5jb2xvcjtcbiAgICB9LFxuICAgIGdldENvbG9yQXJyYXk6IGZ1bmN0aW9uIGdldENvbG9yQXJyYXkoKSB7XG4gICAgICB2YXIgY29sb3IgPSB0aGlzLmNvbG9yO1xuICAgICAgdmFyIHNwYW4gPSAxMDAgLyBjb2xvci5sZW5ndGg7XG4gICAgICByZXR1cm4gY29sb3IubWFwKGZ1bmN0aW9uIChzZXJpZXNDb2xvciwgaW5kZXgpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZXJpZXNDb2xvciA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29sb3I6IHNlcmllc0NvbG9yLFxuICAgICAgICAgICAgcGVyY2VudGFnZTogKGluZGV4ICsgMSkgKiBzcGFuXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2VyaWVzQ29sb3I7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9wcm9ncmVzcy9zcmMvcHJvZ3Jlc3MudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY19wcm9ncmVzc3Z1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChwcm9ncmVzc3Z1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9wcm9ncmVzcy9zcmMvcHJvZ3Jlc3MudnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgcHJvZ3Jlc3NfY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBzcmNfcHJvZ3Jlc3N2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIHByb2dyZXNzdnVlX3R5cGVfdGVtcGxhdGVfaWRfMjI5ZWU0MDZfcmVuZGVyLFxuICBwcm9ncmVzc3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzIyOWVlNDA2X3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgcHJvZ3Jlc3NfYXBpOyB9XG5wcm9ncmVzc19jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL3Byb2dyZXNzL3NyYy9wcm9ncmVzcy52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcHJvZ3Jlc3MgPSAocHJvZ3Jlc3NfY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9wcm9ncmVzcy9pbmRleC5qc1xuXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5wcm9ncmVzcy5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuICBWdWUuY29tcG9uZW50KHByb2dyZXNzLm5hbWUsIHByb2dyZXNzKTtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhY2thZ2VzX3Byb2dyZXNzID0gKHByb2dyZXNzKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvc3Bpbm5lci9zcmMvc3Bpbm5lci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9Njk3Yjg1MzgmXG52YXIgc3Bpbm5lcnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzY5N2I4NTM4X3JlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcInNwYW5cIiwgeyBzdGF0aWNDbGFzczogXCJlbC1zcGlubmVyXCIgfSwgW1xuICAgIF9jKFxuICAgICAgXCJzdmdcIixcbiAgICAgIHtcbiAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtc3Bpbm5lci1pbm5lclwiLFxuICAgICAgICBzdHlsZTogeyB3aWR0aDogX3ZtLnJhZGl1cyAvIDIgKyBcInB4XCIsIGhlaWdodDogX3ZtLnJhZGl1cyAvIDIgKyBcInB4XCIgfSxcbiAgICAgICAgYXR0cnM6IHsgdmlld0JveDogXCIwIDAgNTAgNTBcIiB9XG4gICAgICB9LFxuICAgICAgW1xuICAgICAgICBfYyhcImNpcmNsZVwiLCB7XG4gICAgICAgICAgc3RhdGljQ2xhc3M6IFwicGF0aFwiLFxuICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICBjeDogXCIyNVwiLFxuICAgICAgICAgICAgY3k6IFwiMjVcIixcbiAgICAgICAgICAgIHI6IFwiMjBcIixcbiAgICAgICAgICAgIGZpbGw6IFwibm9uZVwiLFxuICAgICAgICAgICAgc3Ryb2tlOiBfdm0uc3Ryb2tlQ29sb3IsXG4gICAgICAgICAgICBcInN0cm9rZS13aWR0aFwiOiBfdm0uc3Ryb2tlV2lkdGhcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICBdXG4gICAgKVxuICBdKVxufVxudmFyIHNwaW5uZXJ2dWVfdHlwZV90ZW1wbGF0ZV9pZF82OTdiODUzOF9zdGF0aWNSZW5kZXJGbnMgPSBbXVxuc3Bpbm5lcnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzY5N2I4NTM4X3JlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvc3Bpbm5lci9zcmMvc3Bpbm5lci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9Njk3Yjg1MzgmXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3NwaW5uZXIvc3JjL3NwaW5uZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3Bpbm5lcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG5hbWU6ICdFbFNwaW5uZXInLFxuICBwcm9wczoge1xuICAgIHR5cGU6IFN0cmluZyxcbiAgICByYWRpdXM6IHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGRlZmF1bHQ6IDEwMFxuICAgIH0sXG4gICAgc3Ryb2tlV2lkdGg6IHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGRlZmF1bHQ6IDVcbiAgICB9LFxuICAgIHN0cm9rZUNvbG9yOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnI2VmZWZlZidcbiAgICB9XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9zcGlubmVyL3NyYy9zcGlubmVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfc3Bpbm5lcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChzcGlubmVydnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3NwaW5uZXIvc3JjL3NwaW5uZXIudnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgc3Bpbm5lcl9jb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIHNyY19zcGlubmVydnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICBzcGlubmVydnVlX3R5cGVfdGVtcGxhdGVfaWRfNjk3Yjg1MzhfcmVuZGVyLFxuICBzcGlubmVydnVlX3R5cGVfdGVtcGxhdGVfaWRfNjk3Yjg1Mzhfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBzcGlubmVyX2FwaTsgfVxuc3Bpbm5lcl9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL3NwaW5uZXIvc3JjL3NwaW5uZXIudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNwaW5uZXIgPSAoc3Bpbm5lcl9jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3NwaW5uZXIvaW5kZXguanNcblxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuc3Bpbm5lci5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuICBWdWUuY29tcG9uZW50KHNwaW5uZXIubmFtZSwgc3Bpbm5lcik7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc19zcGlubmVyID0gKHNwaW5uZXIpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9tZXNzYWdlL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00NTViOWY2MCZcbnZhciBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfNDU1YjlmNjBfcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwidHJhbnNpdGlvblwiLFxuICAgIHtcbiAgICAgIGF0dHJzOiB7IG5hbWU6IFwiZWwtbWVzc2FnZS1mYWRlXCIgfSxcbiAgICAgIG9uOiB7IFwiYWZ0ZXItbGVhdmVcIjogX3ZtLmhhbmRsZUFmdGVyTGVhdmUgfVxuICAgIH0sXG4gICAgW1xuICAgICAgX2MoXG4gICAgICAgIFwiZGl2XCIsXG4gICAgICAgIHtcbiAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgICB2YWx1ZTogX3ZtLnZpc2libGUsXG4gICAgICAgICAgICAgIGV4cHJlc3Npb246IFwidmlzaWJsZVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXSxcbiAgICAgICAgICBjbGFzczogW1xuICAgICAgICAgICAgXCJlbC1tZXNzYWdlXCIsXG4gICAgICAgICAgICBfdm0udHlwZSAmJiAhX3ZtLmljb25DbGFzcyA/IFwiZWwtbWVzc2FnZS0tXCIgKyBfdm0udHlwZSA6IFwiXCIsXG4gICAgICAgICAgICBfdm0uY2VudGVyID8gXCJpcy1jZW50ZXJcIiA6IFwiXCIsXG4gICAgICAgICAgICBfdm0uc2hvd0Nsb3NlID8gXCJpcy1jbG9zYWJsZVwiIDogXCJcIixcbiAgICAgICAgICAgIF92bS5jdXN0b21DbGFzc1xuICAgICAgICAgIF0sXG4gICAgICAgICAgc3R5bGU6IF92bS5wb3NpdGlvblN0eWxlLFxuICAgICAgICAgIGF0dHJzOiB7IHJvbGU6IFwiYWxlcnRcIiB9LFxuICAgICAgICAgIG9uOiB7IG1vdXNlZW50ZXI6IF92bS5jbGVhclRpbWVyLCBtb3VzZWxlYXZlOiBfdm0uc3RhcnRUaW1lciB9XG4gICAgICAgIH0sXG4gICAgICAgIFtcbiAgICAgICAgICBfdm0uaWNvbkNsYXNzXG4gICAgICAgICAgICA/IF9jKFwiaVwiLCB7IGNsYXNzOiBfdm0uaWNvbkNsYXNzIH0pXG4gICAgICAgICAgICA6IF9jKFwiaVwiLCB7IGNsYXNzOiBfdm0udHlwZUNsYXNzIH0pLFxuICAgICAgICAgIF92bS5fdChcImRlZmF1bHRcIiwgW1xuICAgICAgICAgICAgIV92bS5kYW5nZXJvdXNseVVzZUhUTUxTdHJpbmdcbiAgICAgICAgICAgICAgPyBfYyhcInBcIiwgeyBzdGF0aWNDbGFzczogXCJlbC1tZXNzYWdlX19jb250ZW50XCIgfSwgW1xuICAgICAgICAgICAgICAgICAgX3ZtLl92KF92bS5fcyhfdm0ubWVzc2FnZSkpXG4gICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgOiBfYyhcInBcIiwge1xuICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtbWVzc2FnZV9fY29udGVudFwiLFxuICAgICAgICAgICAgICAgICAgZG9tUHJvcHM6IHsgaW5uZXJIVE1MOiBfdm0uX3MoX3ZtLm1lc3NhZ2UpIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgIF0pLFxuICAgICAgICAgIF92bS5zaG93Q2xvc2VcbiAgICAgICAgICAgID8gX2MoXCJpXCIsIHtcbiAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1tZXNzYWdlX19jbG9zZUJ0biBlbC1pY29uLWNsb3NlXCIsXG4gICAgICAgICAgICAgICAgb246IHsgY2xpY2s6IF92bS5jbG9zZSB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgIF0sXG4gICAgICAgIDJcbiAgICAgIClcbiAgICBdXG4gIClcbn1cbnZhciBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfNDU1YjlmNjBfc3RhdGljUmVuZGVyRm5zID0gW11cbm1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF80NTViOWY2MF9yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL21lc3NhZ2Uvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTQ1NWI5ZjYwJlxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9tZXNzYWdlL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG52YXIgc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc190eXBlTWFwID0ge1xuICBzdWNjZXNzOiAnc3VjY2VzcycsXG4gIGluZm86ICdpbmZvJyxcbiAgd2FybmluZzogJ3dhcm5pbmcnLFxuICBlcnJvcjogJ2Vycm9yJ1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgbWVzc2FnZV9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZpc2libGU6IGZhbHNlLFxuICAgICAgbWVzc2FnZTogJycsXG4gICAgICBkdXJhdGlvbjogMzAwMCxcbiAgICAgIHR5cGU6ICdpbmZvJyxcbiAgICAgIGljb25DbGFzczogJycsXG4gICAgICBjdXN0b21DbGFzczogJycsXG4gICAgICBvbkNsb3NlOiBudWxsLFxuICAgICAgc2hvd0Nsb3NlOiBmYWxzZSxcbiAgICAgIGNsb3NlZDogZmFsc2UsXG4gICAgICB2ZXJ0aWNhbE9mZnNldDogMjAsXG4gICAgICB0aW1lcjogbnVsbCxcbiAgICAgIGRhbmdlcm91c2x5VXNlSFRNTFN0cmluZzogZmFsc2UsXG4gICAgICBjZW50ZXI6IGZhbHNlXG4gICAgfTtcbiAgfSxcblxuXG4gIGNvbXB1dGVkOiB7XG4gICAgdHlwZUNsYXNzOiBmdW5jdGlvbiB0eXBlQ2xhc3MoKSB7XG4gICAgICByZXR1cm4gdGhpcy50eXBlICYmICF0aGlzLmljb25DbGFzcyA/ICdlbC1tZXNzYWdlX19pY29uIGVsLWljb24tJyArIHNyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfdHlwZU1hcFt0aGlzLnR5cGVdIDogJyc7XG4gICAgfSxcbiAgICBwb3NpdGlvblN0eWxlOiBmdW5jdGlvbiBwb3NpdGlvblN0eWxlKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ3RvcCc6IHRoaXMudmVydGljYWxPZmZzZXQgKyAncHgnXG4gICAgICB9O1xuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIGNsb3NlZDogZnVuY3Rpb24gY2xvc2VkKG5ld1ZhbCkge1xuICAgICAgaWYgKG5ld1ZhbCkge1xuICAgICAgICB0aGlzLnZpc2libGUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGhhbmRsZUFmdGVyTGVhdmU6IGZ1bmN0aW9uIGhhbmRsZUFmdGVyTGVhdmUoKSB7XG4gICAgICB0aGlzLiRkZXN0cm95KHRydWUpO1xuICAgICAgdGhpcy4kZWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLiRlbCk7XG4gICAgfSxcbiAgICBjbG9zZTogZnVuY3Rpb24gY2xvc2UoKSB7XG4gICAgICB0aGlzLmNsb3NlZCA9IHRydWU7XG4gICAgICBpZiAodHlwZW9mIHRoaXMub25DbG9zZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLm9uQ2xvc2UodGhpcyk7XG4gICAgICB9XG4gICAgfSxcbiAgICBjbGVhclRpbWVyOiBmdW5jdGlvbiBjbGVhclRpbWVyKCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZXIpO1xuICAgIH0sXG4gICAgc3RhcnRUaW1lcjogZnVuY3Rpb24gc3RhcnRUaW1lcigpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIGlmICh0aGlzLmR1cmF0aW9uID4gMCkge1xuICAgICAgICB0aGlzLnRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKCFfdGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIF90aGlzLmNsb3NlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LCB0aGlzLmR1cmF0aW9uKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGtleWRvd246IGZ1bmN0aW9uIGtleWRvd24oZSkge1xuICAgICAgaWYgKGUua2V5Q29kZSA9PT0gMjcpIHtcbiAgICAgICAgLy8gZXNj5YWz6Zet5raI5oGvXG4gICAgICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7XG4gICAgdGhpcy5zdGFydFRpbWVyKCk7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMua2V5ZG93bik7XG4gIH0sXG4gIGJlZm9yZURlc3Ryb3k6IGZ1bmN0aW9uIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMua2V5ZG93bik7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9tZXNzYWdlL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc19tZXNzYWdlX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKG1lc3NhZ2Vfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvbWVzc2FnZS9zcmMvbWFpbi52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBtZXNzYWdlX3NyY19tYWluX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgcGFja2FnZXNfbWVzc2FnZV9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzQ1NWI5ZjYwX3JlbmRlcixcbiAgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzQ1NWI5ZjYwX3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgbWVzc2FnZV9zcmNfbWFpbl9hcGk7IH1cbm1lc3NhZ2Vfc3JjX21haW5fY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy9tZXNzYWdlL3NyYy9tYWluLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBtZXNzYWdlX3NyY19tYWluID0gKG1lc3NhZ2Vfc3JjX21haW5fY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcImVsZW1lbnQtdWkvbGliL3V0aWxzL3R5cGVzXCJcbnZhciB0eXBlc18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2KTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9tZXNzYWdlL3NyYy9tYWluLmpzXG52YXIgbWFpbl9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcblxuXG5cblxuXG5cbnZhciBNZXNzYWdlQ29uc3RydWN0b3IgPSBleHRlcm5hbF92dWVfZGVmYXVsdC5hLmV4dGVuZChtZXNzYWdlX3NyY19tYWluKTtcblxudmFyIG1lc3NhZ2Vfc3JjX21haW5faW5zdGFuY2UgPSB2b2lkIDA7XG52YXIgbWFpbl9pbnN0YW5jZXMgPSBbXTtcbnZhciBtYWluX3NlZWQgPSAxO1xuXG52YXIgbWFpbl9NZXNzYWdlID0gZnVuY3Rpb24gTWVzc2FnZShvcHRpb25zKSB7XG4gIGlmIChleHRlcm5hbF92dWVfZGVmYXVsdC5hLnByb3RvdHlwZS4kaXNTZXJ2ZXIpIHJldHVybjtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ3N0cmluZycpIHtcbiAgICBvcHRpb25zID0ge1xuICAgICAgbWVzc2FnZTogb3B0aW9uc1xuICAgIH07XG4gIH1cbiAgdmFyIHVzZXJPbkNsb3NlID0gb3B0aW9ucy5vbkNsb3NlO1xuICB2YXIgaWQgPSAnbWVzc2FnZV8nICsgbWFpbl9zZWVkKys7XG5cbiAgb3B0aW9ucy5vbkNsb3NlID0gZnVuY3Rpb24gKCkge1xuICAgIE1lc3NhZ2UuY2xvc2UoaWQsIHVzZXJPbkNsb3NlKTtcbiAgfTtcbiAgbWVzc2FnZV9zcmNfbWFpbl9pbnN0YW5jZSA9IG5ldyBNZXNzYWdlQ29uc3RydWN0b3Ioe1xuICAgIGRhdGE6IG9wdGlvbnNcbiAgfSk7XG4gIG1lc3NhZ2Vfc3JjX21haW5faW5zdGFuY2UuaWQgPSBpZDtcbiAgaWYgKE9iamVjdCh2ZG9tX1tcImlzVk5vZGVcIl0pKG1lc3NhZ2Vfc3JjX21haW5faW5zdGFuY2UubWVzc2FnZSkpIHtcbiAgICBtZXNzYWdlX3NyY19tYWluX2luc3RhbmNlLiRzbG90cy5kZWZhdWx0ID0gW21lc3NhZ2Vfc3JjX21haW5faW5zdGFuY2UubWVzc2FnZV07XG4gICAgbWVzc2FnZV9zcmNfbWFpbl9pbnN0YW5jZS5tZXNzYWdlID0gbnVsbDtcbiAgfVxuICBtZXNzYWdlX3NyY19tYWluX2luc3RhbmNlLiRtb3VudCgpO1xuICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG1lc3NhZ2Vfc3JjX21haW5faW5zdGFuY2UuJGVsKTtcbiAgdmFyIHZlcnRpY2FsT2Zmc2V0ID0gb3B0aW9ucy5vZmZzZXQgfHwgMjA7XG4gIG1haW5faW5zdGFuY2VzLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICB2ZXJ0aWNhbE9mZnNldCArPSBpdGVtLiRlbC5vZmZzZXRIZWlnaHQgKyAxNjtcbiAgfSk7XG4gIG1lc3NhZ2Vfc3JjX21haW5faW5zdGFuY2UudmVydGljYWxPZmZzZXQgPSB2ZXJ0aWNhbE9mZnNldDtcbiAgbWVzc2FnZV9zcmNfbWFpbl9pbnN0YW5jZS52aXNpYmxlID0gdHJ1ZTtcbiAgbWVzc2FnZV9zcmNfbWFpbl9pbnN0YW5jZS4kZWwuc3R5bGUuekluZGV4ID0gcG9wdXBfW1wiUG9wdXBNYW5hZ2VyXCJdLm5leHRaSW5kZXgoKTtcbiAgbWFpbl9pbnN0YW5jZXMucHVzaChtZXNzYWdlX3NyY19tYWluX2luc3RhbmNlKTtcbiAgcmV0dXJuIG1lc3NhZ2Vfc3JjX21haW5faW5zdGFuY2U7XG59O1xuXG5bJ3N1Y2Nlc3MnLCAnd2FybmluZycsICdpbmZvJywgJ2Vycm9yJ10uZm9yRWFjaChmdW5jdGlvbiAodHlwZSkge1xuICBtYWluX01lc3NhZ2VbdHlwZV0gPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIGlmIChPYmplY3QodHlwZXNfW1wiaXNPYmplY3RcIl0pKG9wdGlvbnMpICYmICFPYmplY3QodmRvbV9bXCJpc1ZOb2RlXCJdKShvcHRpb25zKSkge1xuICAgICAgcmV0dXJuIG1haW5fTWVzc2FnZShtYWluX2V4dGVuZHMoe30sIG9wdGlvbnMsIHtcbiAgICAgICAgdHlwZTogdHlwZVxuICAgICAgfSkpO1xuICAgIH1cbiAgICByZXR1cm4gbWFpbl9NZXNzYWdlKHtcbiAgICAgIHR5cGU6IHR5cGUsXG4gICAgICBtZXNzYWdlOiBvcHRpb25zXG4gICAgfSk7XG4gIH07XG59KTtcblxubWFpbl9NZXNzYWdlLmNsb3NlID0gZnVuY3Rpb24gKGlkLCB1c2VyT25DbG9zZSkge1xuICB2YXIgbGVuID0gbWFpbl9pbnN0YW5jZXMubGVuZ3RoO1xuICB2YXIgaW5kZXggPSAtMTtcbiAgdmFyIHJlbW92ZWRIZWlnaHQgPSB2b2lkIDA7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICBpZiAoaWQgPT09IG1haW5faW5zdGFuY2VzW2ldLmlkKSB7XG4gICAgICByZW1vdmVkSGVpZ2h0ID0gbWFpbl9pbnN0YW5jZXNbaV0uJGVsLm9mZnNldEhlaWdodDtcbiAgICAgIGluZGV4ID0gaTtcbiAgICAgIGlmICh0eXBlb2YgdXNlck9uQ2xvc2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdXNlck9uQ2xvc2UobWFpbl9pbnN0YW5jZXNbaV0pO1xuICAgICAgfVxuICAgICAgbWFpbl9pbnN0YW5jZXMuc3BsaWNlKGksIDEpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIGlmIChsZW4gPD0gMSB8fCBpbmRleCA9PT0gLTEgfHwgaW5kZXggPiBtYWluX2luc3RhbmNlcy5sZW5ndGggLSAxKSByZXR1cm47XG4gIGZvciAodmFyIF9pID0gaW5kZXg7IF9pIDwgbGVuIC0gMTsgX2krKykge1xuICAgIHZhciBkb20gPSBtYWluX2luc3RhbmNlc1tfaV0uJGVsO1xuICAgIGRvbS5zdHlsZVsndG9wJ10gPSBwYXJzZUludChkb20uc3R5bGVbJ3RvcCddLCAxMCkgLSByZW1vdmVkSGVpZ2h0IC0gMTYgKyAncHgnO1xuICB9XG59O1xuXG5tYWluX01lc3NhZ2UuY2xvc2VBbGwgPSBmdW5jdGlvbiAoKSB7XG4gIGZvciAodmFyIGkgPSBtYWluX2luc3RhbmNlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIG1haW5faW5zdGFuY2VzW2ldLmNsb3NlKCk7XG4gIH1cbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhY2thZ2VzX21lc3NhZ2Vfc3JjX21haW4gPSAobWFpbl9NZXNzYWdlKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvbWVzc2FnZS9pbmRleC5qc1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc19tZXNzYWdlID0gKHBhY2thZ2VzX21lc3NhZ2Vfc3JjX21haW4pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9iYWRnZS9zcmMvbWFpbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9N2NjYjY1OTgmXG52YXIgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzdjY2I2NTk4X3JlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHsgc3RhdGljQ2xhc3M6IFwiZWwtYmFkZ2VcIiB9LFxuICAgIFtcbiAgICAgIF92bS5fdChcImRlZmF1bHRcIiksXG4gICAgICBfYyhcInRyYW5zaXRpb25cIiwgeyBhdHRyczogeyBuYW1lOiBcImVsLXpvb20taW4tY2VudGVyXCIgfSB9LCBbXG4gICAgICAgIF9jKFwic3VwXCIsIHtcbiAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgICB2YWx1ZTpcbiAgICAgICAgICAgICAgICAhX3ZtLmhpZGRlbiAmJiAoX3ZtLmNvbnRlbnQgfHwgX3ZtLmNvbnRlbnQgPT09IDAgfHwgX3ZtLmlzRG90KSxcbiAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCIhaGlkZGVuICYmIChjb250ZW50IHx8IGNvbnRlbnQgPT09IDAgfHwgaXNEb3QpXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdLFxuICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWJhZGdlX19jb250ZW50XCIsXG4gICAgICAgICAgY2xhc3M6IFtcbiAgICAgICAgICAgIF92bS50eXBlID8gXCJlbC1iYWRnZV9fY29udGVudC0tXCIgKyBfdm0udHlwZSA6IG51bGwsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFwiaXMtZml4ZWRcIjogX3ZtLiRzbG90cy5kZWZhdWx0LFxuICAgICAgICAgICAgICBcImlzLWRvdFwiOiBfdm0uaXNEb3RcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdLFxuICAgICAgICAgIGRvbVByb3BzOiB7IHRleHRDb250ZW50OiBfdm0uX3MoX3ZtLmNvbnRlbnQpIH1cbiAgICAgICAgfSlcbiAgICAgIF0pXG4gICAgXSxcbiAgICAyXG4gIClcbn1cbnZhciBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfN2NjYjY1OThfc3RhdGljUmVuZGVyRm5zID0gW11cbm1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF83Y2NiNjU5OF9yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2JhZGdlL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03Y2NiNjU5OCZcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvYmFkZ2Uvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGJhZGdlX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbmFtZTogJ0VsQmFkZ2UnLFxuXG4gIHByb3BzOiB7XG4gICAgdmFsdWU6IFtTdHJpbmcsIE51bWJlcl0sXG4gICAgbWF4OiBOdW1iZXIsXG4gICAgaXNEb3Q6IEJvb2xlYW4sXG4gICAgaGlkZGVuOiBCb29sZWFuLFxuICAgIHR5cGU6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIHZhbGlkYXRvcjogZnVuY3Rpb24gdmFsaWRhdG9yKHZhbCkge1xuICAgICAgICByZXR1cm4gWydwcmltYXJ5JywgJ3N1Y2Nlc3MnLCAnd2FybmluZycsICdpbmZvJywgJ2RhbmdlciddLmluZGV4T2YodmFsKSA+IC0xO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNvbnRlbnQ6IGZ1bmN0aW9uIGNvbnRlbnQoKSB7XG4gICAgICBpZiAodGhpcy5pc0RvdCkgcmV0dXJuO1xuXG4gICAgICB2YXIgdmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgICAgdmFyIG1heCA9IHRoaXMubWF4O1xuXG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgbWF4ID09PSAnbnVtYmVyJykge1xuICAgICAgICByZXR1cm4gbWF4IDwgdmFsdWUgPyBtYXggKyAnKycgOiB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2JhZGdlL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc19iYWRnZV9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChiYWRnZV9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9iYWRnZS9zcmMvbWFpbi52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBiYWRnZV9zcmNfbWFpbl9jb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIHBhY2thZ2VzX2JhZGdlX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfN2NjYjY1OThfcmVuZGVyLFxuICBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfN2NjYjY1OThfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBiYWRnZV9zcmNfbWFpbl9hcGk7IH1cbmJhZGdlX3NyY19tYWluX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvYmFkZ2Uvc3JjL21haW4udnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGJhZGdlX3NyY19tYWluID0gKGJhZGdlX3NyY19tYWluX2NvbXBvbmVudC5leHBvcnRzKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvYmFkZ2UvaW5kZXguanNcblxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuYmFkZ2Vfc3JjX21haW4uaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcbiAgVnVlLmNvbXBvbmVudChiYWRnZV9zcmNfbWFpbi5uYW1lLCBiYWRnZV9zcmNfbWFpbik7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBiYWRnZSA9IChiYWRnZV9zcmNfbWFpbik7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2NhcmQvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTU5YTRhNDBmJlxudmFyIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF81OWE0YTQwZl9yZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICB7XG4gICAgICBzdGF0aWNDbGFzczogXCJlbC1jYXJkXCIsXG4gICAgICBjbGFzczogX3ZtLnNoYWRvdyA/IFwiaXMtXCIgKyBfdm0uc2hhZG93ICsgXCItc2hhZG93XCIgOiBcImlzLWFsd2F5cy1zaGFkb3dcIlxuICAgIH0sXG4gICAgW1xuICAgICAgX3ZtLiRzbG90cy5oZWFkZXIgfHwgX3ZtLmhlYWRlclxuICAgICAgICA/IF9jKFxuICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwiZWwtY2FyZF9faGVhZGVyXCIgfSxcbiAgICAgICAgICAgIFtfdm0uX3QoXCJoZWFkZXJcIiwgW192bS5fdihfdm0uX3MoX3ZtLmhlYWRlcikpXSldLFxuICAgICAgICAgICAgMlxuICAgICAgICAgIClcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgIF9jKFxuICAgICAgICBcImRpdlwiLFxuICAgICAgICB7IHN0YXRpY0NsYXNzOiBcImVsLWNhcmRfX2JvZHlcIiwgc3R5bGU6IF92bS5ib2R5U3R5bGUgfSxcbiAgICAgICAgW192bS5fdChcImRlZmF1bHRcIildLFxuICAgICAgICAyXG4gICAgICApXG4gICAgXVxuICApXG59XG52YXIgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzU5YTRhNDBmX3N0YXRpY1JlbmRlckZucyA9IFtdXG5tYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfNTlhNGE0MGZfcmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jYXJkL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01OWE0YTQwZiZcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvY2FyZC9zcmMvbWFpbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgY2FyZF9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG5hbWU6ICdFbENhcmQnLFxuICBwcm9wczoge1xuICAgIGhlYWRlcjoge30sXG4gICAgYm9keVN0eWxlOiB7fSxcbiAgICBzaGFkb3c6IHtcbiAgICAgIHR5cGU6IFN0cmluZ1xuICAgIH1cbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2NhcmQvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhY2thZ2VzX2NhcmRfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoY2FyZF9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jYXJkL3NyYy9tYWluLnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGNhcmRfc3JjX21haW5fY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBwYWNrYWdlc19jYXJkX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfNTlhNGE0MGZfcmVuZGVyLFxuICBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfNTlhNGE0MGZfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBjYXJkX3NyY19tYWluX2FwaTsgfVxuY2FyZF9zcmNfbWFpbl9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL2NhcmQvc3JjL21haW4udnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGNhcmRfc3JjX21haW4gPSAoY2FyZF9zcmNfbWFpbl9jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2NhcmQvaW5kZXguanNcblxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuY2FyZF9zcmNfbWFpbi5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuICBWdWUuY29tcG9uZW50KGNhcmRfc3JjX21haW4ubmFtZSwgY2FyZF9zcmNfbWFpbik7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBjYXJkID0gKGNhcmRfc3JjX21haW4pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9yYXRlL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1hZGE1Nzc4MiZcbnZhciBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfYWRhNTc3ODJfcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAge1xuICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtcmF0ZVwiLFxuICAgICAgYXR0cnM6IHtcbiAgICAgICAgcm9sZTogXCJzbGlkZXJcIixcbiAgICAgICAgXCJhcmlhLXZhbHVlbm93XCI6IF92bS5jdXJyZW50VmFsdWUsXG4gICAgICAgIFwiYXJpYS12YWx1ZXRleHRcIjogX3ZtLnRleHQsXG4gICAgICAgIFwiYXJpYS12YWx1ZW1pblwiOiBcIjBcIixcbiAgICAgICAgXCJhcmlhLXZhbHVlbWF4XCI6IF92bS5tYXgsXG4gICAgICAgIHRhYmluZGV4OiBcIjBcIlxuICAgICAgfSxcbiAgICAgIG9uOiB7IGtleWRvd246IF92bS5oYW5kbGVLZXkgfVxuICAgIH0sXG4gICAgW1xuICAgICAgX3ZtLl9sKF92bS5tYXgsIGZ1bmN0aW9uKGl0ZW0sIGtleSkge1xuICAgICAgICByZXR1cm4gX2MoXG4gICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1yYXRlX19pdGVtXCIsXG4gICAgICAgICAgICBzdHlsZTogeyBjdXJzb3I6IF92bS5yYXRlRGlzYWJsZWQgPyBcImF1dG9cIiA6IFwicG9pbnRlclwiIH0sXG4gICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICBtb3VzZW1vdmU6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgIF92bS5zZXRDdXJyZW50VmFsdWUoaXRlbSwgJGV2ZW50KVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBtb3VzZWxlYXZlOiBfdm0ucmVzZXRDdXJyZW50VmFsdWUsXG4gICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICBfdm0uc2VsZWN0VmFsdWUoaXRlbSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgW1xuICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgIFwiaVwiLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtcmF0ZV9faWNvblwiLFxuICAgICAgICAgICAgICAgIGNsYXNzOiBbXG4gICAgICAgICAgICAgICAgICBfdm0uY2xhc3Nlc1tpdGVtIC0gMV0sXG4gICAgICAgICAgICAgICAgICB7IGhvdmVyOiBfdm0uaG92ZXJJbmRleCA9PT0gaXRlbSB9XG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBzdHlsZTogX3ZtLmdldEljb25TdHlsZShpdGVtKVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgX3ZtLnNob3dEZWNpbWFsSWNvbihpdGVtKVxuICAgICAgICAgICAgICAgICAgPyBfYyhcImlcIiwge1xuICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXJhdGVfX2RlY2ltYWxcIixcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLmRlY2ltYWxJY29uQ2xhc3MsXG4gICAgICAgICAgICAgICAgICAgICAgc3R5bGU6IF92bS5kZWNpbWFsU3R5bGVcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgKVxuICAgICAgICAgIF1cbiAgICAgICAgKVxuICAgICAgfSksXG4gICAgICBfdm0uc2hvd1RleHQgfHwgX3ZtLnNob3dTY29yZVxuICAgICAgICA/IF9jKFxuICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiBcImVsLXJhdGVfX3RleHRcIiwgc3R5bGU6IHsgY29sb3I6IF92bS50ZXh0Q29sb3IgfSB9LFxuICAgICAgICAgICAgW192bS5fdihfdm0uX3MoX3ZtLnRleHQpKV1cbiAgICAgICAgICApXG4gICAgICAgIDogX3ZtLl9lKClcbiAgICBdLFxuICAgIDJcbiAgKVxufVxudmFyIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF9hZGE1Nzc4Ml9zdGF0aWNSZW5kZXJGbnMgPSBbXVxubWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkX2FkYTU3NzgyX3JlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvcmF0ZS9zcmMvbWFpbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9YWRhNTc3ODImXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3JhdGUvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuXG5cblxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciByYXRlX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbmFtZTogJ0VsUmF0ZScsXG5cbiAgbWl4aW5zOiBbbWlncmF0aW5nX2RlZmF1bHQuYV0sXG5cbiAgaW5qZWN0OiB7XG4gICAgZWxGb3JtOiB7XG4gICAgICBkZWZhdWx0OiAnJ1xuICAgIH1cbiAgfSxcblxuICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBwb2ludGVyQXRMZWZ0SGFsZjogdHJ1ZSxcbiAgICAgIGN1cnJlbnRWYWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgIGhvdmVySW5kZXg6IC0xXG4gICAgfTtcbiAgfSxcblxuXG4gIHByb3BzOiB7XG4gICAgdmFsdWU6IHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGRlZmF1bHQ6IDBcbiAgICB9LFxuICAgIGxvd1RocmVzaG9sZDoge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZGVmYXVsdDogMlxuICAgIH0sXG4gICAgaGlnaFRocmVzaG9sZDoge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZGVmYXVsdDogNFxuICAgIH0sXG4gICAgbWF4OiB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBkZWZhdWx0OiA1XG4gICAgfSxcbiAgICBjb2xvcnM6IHtcbiAgICAgIHR5cGU6IFtBcnJheSwgT2JqZWN0XSxcbiAgICAgIGRlZmF1bHQ6IGZ1bmN0aW9uIF9kZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gWycjRjdCQTJBJywgJyNGN0JBMkEnLCAnI0Y3QkEyQSddO1xuICAgICAgfVxuICAgIH0sXG4gICAgdm9pZENvbG9yOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnI0M2RDFERSdcbiAgICB9LFxuICAgIGRpc2FibGVkVm9pZENvbG9yOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnI0VGRjJGNydcbiAgICB9LFxuICAgIGljb25DbGFzc2VzOiB7XG4gICAgICB0eXBlOiBbQXJyYXksIE9iamVjdF0sXG4gICAgICBkZWZhdWx0OiBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIFsnZWwtaWNvbi1zdGFyLW9uJywgJ2VsLWljb24tc3Rhci1vbicsICdlbC1pY29uLXN0YXItb24nXTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHZvaWRJY29uQ2xhc3M6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdlbC1pY29uLXN0YXItb2ZmJ1xuICAgIH0sXG4gICAgZGlzYWJsZWRWb2lkSWNvbkNsYXNzOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnZWwtaWNvbi1zdGFyLW9uJ1xuICAgIH0sXG4gICAgZGlzYWJsZWQ6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0sXG4gICAgYWxsb3dIYWxmOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9LFxuICAgIHNob3dUZXh0OiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9LFxuICAgIHNob3dTY29yZToge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSxcbiAgICB0ZXh0Q29sb3I6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICcjMWYyZDNkJ1xuICAgIH0sXG4gICAgdGV4dHM6IHtcbiAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgZGVmYXVsdDogZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiBbJ+aegeW3ricsICflpLHmnJsnLCAn5LiA6IisJywgJ+a7oeaEjycsICfmg4rllpwnXTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHNjb3JlVGVtcGxhdGU6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICd7dmFsdWV9J1xuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHRleHQ6IGZ1bmN0aW9uIHRleHQoKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gJyc7XG4gICAgICBpZiAodGhpcy5zaG93U2NvcmUpIHtcbiAgICAgICAgcmVzdWx0ID0gdGhpcy5zY29yZVRlbXBsYXRlLnJlcGxhY2UoL1xce1xccyp2YWx1ZVxccypcXH0vLCB0aGlzLnJhdGVEaXNhYmxlZCA/IHRoaXMudmFsdWUgOiB0aGlzLmN1cnJlbnRWYWx1ZSk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuc2hvd1RleHQpIHtcbiAgICAgICAgcmVzdWx0ID0gdGhpcy50ZXh0c1tNYXRoLmNlaWwodGhpcy5jdXJyZW50VmFsdWUpIC0gMV07XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG4gICAgZGVjaW1hbFN0eWxlOiBmdW5jdGlvbiBkZWNpbWFsU3R5bGUoKSB7XG4gICAgICB2YXIgd2lkdGggPSAnJztcbiAgICAgIGlmICh0aGlzLnJhdGVEaXNhYmxlZCkge1xuICAgICAgICB3aWR0aCA9IHRoaXMudmFsdWVEZWNpbWFsICsgJyUnO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmFsbG93SGFsZikge1xuICAgICAgICB3aWR0aCA9ICc1MCUnO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29sb3I6IHRoaXMuYWN0aXZlQ29sb3IsXG4gICAgICAgIHdpZHRoOiB3aWR0aFxuICAgICAgfTtcbiAgICB9LFxuICAgIHZhbHVlRGVjaW1hbDogZnVuY3Rpb24gdmFsdWVEZWNpbWFsKCkge1xuICAgICAgcmV0dXJuIHRoaXMudmFsdWUgKiAxMDAgLSBNYXRoLmZsb29yKHRoaXMudmFsdWUpICogMTAwO1xuICAgIH0sXG4gICAgY2xhc3NNYXA6IGZ1bmN0aW9uIGNsYXNzTWFwKCkge1xuICAgICAgdmFyIF9yZWY7XG5cbiAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHRoaXMuaWNvbkNsYXNzZXMpID8gKF9yZWYgPSB7fSwgX3JlZlt0aGlzLmxvd1RocmVzaG9sZF0gPSB0aGlzLmljb25DbGFzc2VzWzBdLCBfcmVmW3RoaXMuaGlnaFRocmVzaG9sZF0gPSB7IHZhbHVlOiB0aGlzLmljb25DbGFzc2VzWzFdLCBleGNsdWRlZDogdHJ1ZSB9LCBfcmVmW3RoaXMubWF4XSA9IHRoaXMuaWNvbkNsYXNzZXNbMl0sIF9yZWYpIDogdGhpcy5pY29uQ2xhc3NlcztcbiAgICB9LFxuICAgIGRlY2ltYWxJY29uQ2xhc3M6IGZ1bmN0aW9uIGRlY2ltYWxJY29uQ2xhc3MoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRWYWx1ZUZyb21NYXAodGhpcy52YWx1ZSwgdGhpcy5jbGFzc01hcCk7XG4gICAgfSxcbiAgICB2b2lkQ2xhc3M6IGZ1bmN0aW9uIHZvaWRDbGFzcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnJhdGVEaXNhYmxlZCA/IHRoaXMuZGlzYWJsZWRWb2lkSWNvbkNsYXNzIDogdGhpcy52b2lkSWNvbkNsYXNzO1xuICAgIH0sXG4gICAgYWN0aXZlQ2xhc3M6IGZ1bmN0aW9uIGFjdGl2ZUNsYXNzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0VmFsdWVGcm9tTWFwKHRoaXMuY3VycmVudFZhbHVlLCB0aGlzLmNsYXNzTWFwKTtcbiAgICB9LFxuICAgIGNvbG9yTWFwOiBmdW5jdGlvbiBjb2xvck1hcCgpIHtcbiAgICAgIHZhciBfcmVmMjtcblxuICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodGhpcy5jb2xvcnMpID8gKF9yZWYyID0ge30sIF9yZWYyW3RoaXMubG93VGhyZXNob2xkXSA9IHRoaXMuY29sb3JzWzBdLCBfcmVmMlt0aGlzLmhpZ2hUaHJlc2hvbGRdID0geyB2YWx1ZTogdGhpcy5jb2xvcnNbMV0sIGV4Y2x1ZGVkOiB0cnVlIH0sIF9yZWYyW3RoaXMubWF4XSA9IHRoaXMuY29sb3JzWzJdLCBfcmVmMikgOiB0aGlzLmNvbG9ycztcbiAgICB9LFxuICAgIGFjdGl2ZUNvbG9yOiBmdW5jdGlvbiBhY3RpdmVDb2xvcigpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFZhbHVlRnJvbU1hcCh0aGlzLmN1cnJlbnRWYWx1ZSwgdGhpcy5jb2xvck1hcCk7XG4gICAgfSxcbiAgICBjbGFzc2VzOiBmdW5jdGlvbiBjbGFzc2VzKCkge1xuICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgICAgdmFyIGkgPSAwO1xuICAgICAgdmFyIHRocmVzaG9sZCA9IHRoaXMuY3VycmVudFZhbHVlO1xuICAgICAgaWYgKHRoaXMuYWxsb3dIYWxmICYmIHRoaXMuY3VycmVudFZhbHVlICE9PSBNYXRoLmZsb29yKHRoaXMuY3VycmVudFZhbHVlKSkge1xuICAgICAgICB0aHJlc2hvbGQtLTtcbiAgICAgIH1cbiAgICAgIGZvciAoOyBpIDwgdGhyZXNob2xkOyBpKyspIHtcbiAgICAgICAgcmVzdWx0LnB1c2godGhpcy5hY3RpdmVDbGFzcyk7XG4gICAgICB9XG4gICAgICBmb3IgKDsgaSA8IHRoaXMubWF4OyBpKyspIHtcbiAgICAgICAgcmVzdWx0LnB1c2godGhpcy52b2lkQ2xhc3MpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuICAgIHJhdGVEaXNhYmxlZDogZnVuY3Rpb24gcmF0ZURpc2FibGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQgfHwgKHRoaXMuZWxGb3JtIHx8IHt9KS5kaXNhYmxlZDtcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICB2YWx1ZTogZnVuY3Rpb24gdmFsdWUodmFsKSB7XG4gICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IHZhbDtcbiAgICAgIHRoaXMucG9pbnRlckF0TGVmdEhhbGYgPSB0aGlzLnZhbHVlICE9PSBNYXRoLmZsb29yKHRoaXMudmFsdWUpO1xuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0TWlncmF0aW5nQ29uZmlnOiBmdW5jdGlvbiBnZXRNaWdyYXRpbmdDb25maWcoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwcm9wczoge1xuICAgICAgICAgICd0ZXh0LXRlbXBsYXRlJzogJ3RleHQtdGVtcGxhdGUgaXMgcmVuYW1lZCB0byBzY29yZS10ZW1wbGF0ZS4nXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSxcbiAgICBnZXRWYWx1ZUZyb21NYXA6IGZ1bmN0aW9uIGdldFZhbHVlRnJvbU1hcCh2YWx1ZSwgbWFwKSB7XG4gICAgICB2YXIgbWF0Y2hlZEtleXMgPSBPYmplY3Qua2V5cyhtYXApLmZpbHRlcihmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHZhciB2YWwgPSBtYXBba2V5XTtcbiAgICAgICAgdmFyIGV4Y2x1ZGVkID0gT2JqZWN0KHR5cGVzX1tcImlzT2JqZWN0XCJdKSh2YWwpID8gdmFsLmV4Y2x1ZGVkIDogZmFsc2U7XG4gICAgICAgIHJldHVybiBleGNsdWRlZCA/IHZhbHVlIDwga2V5IDogdmFsdWUgPD0ga2V5O1xuICAgICAgfSkuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICByZXR1cm4gYSAtIGI7XG4gICAgICB9KTtcbiAgICAgIHZhciBtYXRjaGVkVmFsdWUgPSBtYXBbbWF0Y2hlZEtleXNbMF1dO1xuICAgICAgcmV0dXJuIE9iamVjdCh0eXBlc19bXCJpc09iamVjdFwiXSkobWF0Y2hlZFZhbHVlKSA/IG1hdGNoZWRWYWx1ZS52YWx1ZSA6IG1hdGNoZWRWYWx1ZSB8fCAnJztcbiAgICB9LFxuICAgIHNob3dEZWNpbWFsSWNvbjogZnVuY3Rpb24gc2hvd0RlY2ltYWxJY29uKGl0ZW0pIHtcbiAgICAgIHZhciBzaG93V2hlbkRpc2FibGVkID0gdGhpcy5yYXRlRGlzYWJsZWQgJiYgdGhpcy52YWx1ZURlY2ltYWwgPiAwICYmIGl0ZW0gLSAxIDwgdGhpcy52YWx1ZSAmJiBpdGVtID4gdGhpcy52YWx1ZTtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICB2YXIgc2hvd1doZW5BbGxvd0hhbGYgPSB0aGlzLmFsbG93SGFsZiAmJiB0aGlzLnBvaW50ZXJBdExlZnRIYWxmICYmIGl0ZW0gLSAwLjUgPD0gdGhpcy5jdXJyZW50VmFsdWUgJiYgaXRlbSA+IHRoaXMuY3VycmVudFZhbHVlO1xuICAgICAgcmV0dXJuIHNob3dXaGVuRGlzYWJsZWQgfHwgc2hvd1doZW5BbGxvd0hhbGY7XG4gICAgfSxcbiAgICBnZXRJY29uU3R5bGU6IGZ1bmN0aW9uIGdldEljb25TdHlsZShpdGVtKSB7XG4gICAgICB2YXIgdm9pZENvbG9yID0gdGhpcy5yYXRlRGlzYWJsZWQgPyB0aGlzLmRpc2FibGVkVm9pZENvbG9yIDogdGhpcy52b2lkQ29sb3I7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb2xvcjogaXRlbSA8PSB0aGlzLmN1cnJlbnRWYWx1ZSA/IHRoaXMuYWN0aXZlQ29sb3IgOiB2b2lkQ29sb3JcbiAgICAgIH07XG4gICAgfSxcbiAgICBzZWxlY3RWYWx1ZTogZnVuY3Rpb24gc2VsZWN0VmFsdWUodmFsdWUpIHtcbiAgICAgIGlmICh0aGlzLnJhdGVEaXNhYmxlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5hbGxvd0hhbGYgJiYgdGhpcy5wb2ludGVyQXRMZWZ0SGFsZikge1xuICAgICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIHRoaXMuY3VycmVudFZhbHVlKTtcbiAgICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgdGhpcy5jdXJyZW50VmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCB2YWx1ZSk7XG4gICAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGhhbmRsZUtleTogZnVuY3Rpb24gaGFuZGxlS2V5KGUpIHtcbiAgICAgIGlmICh0aGlzLnJhdGVEaXNhYmxlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB2YXIgY3VycmVudFZhbHVlID0gdGhpcy5jdXJyZW50VmFsdWU7XG4gICAgICB2YXIga2V5Q29kZSA9IGUua2V5Q29kZTtcbiAgICAgIGlmIChrZXlDb2RlID09PSAzOCB8fCBrZXlDb2RlID09PSAzOSkge1xuICAgICAgICAvLyBsZWZ0IC8gZG93blxuICAgICAgICBpZiAodGhpcy5hbGxvd0hhbGYpIHtcbiAgICAgICAgICBjdXJyZW50VmFsdWUgKz0gMC41O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGN1cnJlbnRWYWx1ZSArPSAxO1xuICAgICAgICB9XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH0gZWxzZSBpZiAoa2V5Q29kZSA9PT0gMzcgfHwga2V5Q29kZSA9PT0gNDApIHtcbiAgICAgICAgaWYgKHRoaXMuYWxsb3dIYWxmKSB7XG4gICAgICAgICAgY3VycmVudFZhbHVlIC09IDAuNTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjdXJyZW50VmFsdWUgLT0gMTtcbiAgICAgICAgfVxuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9XG4gICAgICBjdXJyZW50VmFsdWUgPSBjdXJyZW50VmFsdWUgPCAwID8gMCA6IGN1cnJlbnRWYWx1ZTtcbiAgICAgIGN1cnJlbnRWYWx1ZSA9IGN1cnJlbnRWYWx1ZSA+IHRoaXMubWF4ID8gdGhpcy5tYXggOiBjdXJyZW50VmFsdWU7XG5cbiAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgY3VycmVudFZhbHVlKTtcbiAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIGN1cnJlbnRWYWx1ZSk7XG4gICAgfSxcbiAgICBzZXRDdXJyZW50VmFsdWU6IGZ1bmN0aW9uIHNldEN1cnJlbnRWYWx1ZSh2YWx1ZSwgZXZlbnQpIHtcbiAgICAgIGlmICh0aGlzLnJhdGVEaXNhYmxlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmICh0aGlzLmFsbG93SGFsZikge1xuICAgICAgICB2YXIgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuICAgICAgICBpZiAoT2JqZWN0KGRvbV9bXCJoYXNDbGFzc1wiXSkodGFyZ2V0LCAnZWwtcmF0ZV9faXRlbScpKSB7XG4gICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LnF1ZXJ5U2VsZWN0b3IoJy5lbC1yYXRlX19pY29uJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKE9iamVjdChkb21fW1wiaGFzQ2xhc3NcIl0pKHRhcmdldCwgJ2VsLXJhdGVfX2RlY2ltYWwnKSkge1xuICAgICAgICAgIHRhcmdldCA9IHRhcmdldC5wYXJlbnROb2RlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucG9pbnRlckF0TGVmdEhhbGYgPSBldmVudC5vZmZzZXRYICogMiA8PSB0YXJnZXQuY2xpZW50V2lkdGg7XG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gdGhpcy5wb2ludGVyQXRMZWZ0SGFsZiA/IHZhbHVlIC0gMC41IDogdmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IHZhbHVlO1xuICAgICAgfVxuICAgICAgdGhpcy5ob3ZlckluZGV4ID0gdmFsdWU7XG4gICAgfSxcbiAgICByZXNldEN1cnJlbnRWYWx1ZTogZnVuY3Rpb24gcmVzZXRDdXJyZW50VmFsdWUoKSB7XG4gICAgICBpZiAodGhpcy5yYXRlRGlzYWJsZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuYWxsb3dIYWxmKSB7XG4gICAgICAgIHRoaXMucG9pbnRlckF0TGVmdEhhbGYgPSB0aGlzLnZhbHVlICE9PSBNYXRoLmZsb29yKHRoaXMudmFsdWUpO1xuICAgICAgfVxuICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgICAgdGhpcy5ob3ZlckluZGV4ID0gLTE7XG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQ6IGZ1bmN0aW9uIGNyZWF0ZWQoKSB7XG4gICAgaWYgKCF0aGlzLnZhbHVlKSB7XG4gICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIDApO1xuICAgIH1cbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3JhdGUvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhY2thZ2VzX3JhdGVfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAocmF0ZV9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9yYXRlL3NyYy9tYWluLnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIHJhdGVfc3JjX21haW5fY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBwYWNrYWdlc19yYXRlX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfYWRhNTc3ODJfcmVuZGVyLFxuICBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfYWRhNTc3ODJfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciByYXRlX3NyY19tYWluX2FwaTsgfVxucmF0ZV9zcmNfbWFpbl9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL3JhdGUvc3JjL21haW4udnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHJhdGVfc3JjX21haW4gPSAocmF0ZV9zcmNfbWFpbl9jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3JhdGUvaW5kZXguanNcblxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xucmF0ZV9zcmNfbWFpbi5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuICBWdWUuY29tcG9uZW50KHJhdGVfc3JjX21haW4ubmFtZSwgcmF0ZV9zcmNfbWFpbik7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc19yYXRlID0gKHJhdGVfc3JjX21haW4pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9zdGVwcy9zcmMvc3RlcHMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTNjNmI2ZGMwJlxudmFyIHN0ZXBzdnVlX3R5cGVfdGVtcGxhdGVfaWRfM2M2YjZkYzBfcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAge1xuICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtc3RlcHNcIixcbiAgICAgIGNsYXNzOiBbXG4gICAgICAgICFfdm0uc2ltcGxlICYmIFwiZWwtc3RlcHMtLVwiICsgX3ZtLmRpcmVjdGlvbixcbiAgICAgICAgX3ZtLnNpbXBsZSAmJiBcImVsLXN0ZXBzLS1zaW1wbGVcIlxuICAgICAgXVxuICAgIH0sXG4gICAgW192bS5fdChcImRlZmF1bHRcIildLFxuICAgIDJcbiAgKVxufVxudmFyIHN0ZXBzdnVlX3R5cGVfdGVtcGxhdGVfaWRfM2M2YjZkYzBfc3RhdGljUmVuZGVyRm5zID0gW11cbnN0ZXBzdnVlX3R5cGVfdGVtcGxhdGVfaWRfM2M2YjZkYzBfcmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9zdGVwcy9zcmMvc3RlcHMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTNjNmI2ZGMwJlxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9zdGVwcy9zcmMvc3RlcHMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cblxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzdGVwc3Z1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG5hbWU6ICdFbFN0ZXBzJyxcblxuICBtaXhpbnM6IFttaWdyYXRpbmdfZGVmYXVsdC5hXSxcblxuICBwcm9wczoge1xuICAgIHNwYWNlOiBbTnVtYmVyLCBTdHJpbmddLFxuICAgIGFjdGl2ZTogTnVtYmVyLFxuICAgIGRpcmVjdGlvbjoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2hvcml6b250YWwnXG4gICAgfSxcbiAgICBhbGlnbkNlbnRlcjogQm9vbGVhbixcbiAgICBzaW1wbGU6IEJvb2xlYW4sXG4gICAgZmluaXNoU3RhdHVzOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnZmluaXNoJ1xuICAgIH0sXG4gICAgcHJvY2Vzc1N0YXR1czoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ3Byb2Nlc3MnXG4gICAgfVxuICB9LFxuXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0ZXBzOiBbXSxcbiAgICAgIHN0ZXBPZmZzZXQ6IDBcbiAgICB9O1xuICB9LFxuXG5cbiAgbWV0aG9kczoge1xuICAgIGdldE1pZ3JhdGluZ0NvbmZpZzogZnVuY3Rpb24gZ2V0TWlncmF0aW5nQ29uZmlnKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAnY2VudGVyJzogJ2NlbnRlciBpcyByZW1vdmVkLidcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBhY3RpdmU6IGZ1bmN0aW9uIGFjdGl2ZShuZXdWYWwsIG9sZFZhbCkge1xuICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgbmV3VmFsLCBvbGRWYWwpO1xuICAgIH0sXG4gICAgc3RlcHM6IGZ1bmN0aW9uIHN0ZXBzKF9zdGVwcykge1xuICAgICAgX3N0ZXBzLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkLCBpbmRleCkge1xuICAgICAgICBjaGlsZC5pbmRleCA9IGluZGV4O1xuICAgICAgfSk7XG4gICAgfVxuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvc3RlcHMvc3JjL3N0ZXBzLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfc3RlcHN2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoc3RlcHN2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvc3RlcHMvc3JjL3N0ZXBzLnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIHN0ZXBzX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgc3JjX3N0ZXBzdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICBzdGVwc3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzNjNmI2ZGMwX3JlbmRlcixcbiAgc3RlcHN2dWVfdHlwZV90ZW1wbGF0ZV9pZF8zYzZiNmRjMF9zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIHN0ZXBzX2FwaTsgfVxuc3RlcHNfY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy9zdGVwcy9zcmMvc3RlcHMudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHN0ZXBzID0gKHN0ZXBzX2NvbXBvbmVudC5leHBvcnRzKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvc3RlcHMvaW5kZXguanNcblxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuc3RlcHMuaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcbiAgVnVlLmNvbXBvbmVudChzdGVwcy5uYW1lLCBzdGVwcyk7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc19zdGVwcyA9IChzdGVwcyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3N0ZXBzL3NyYy9zdGVwLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1mNDE0YTg3YSZcbnZhciBzdGVwdnVlX3R5cGVfdGVtcGxhdGVfaWRfZjQxNGE4N2FfcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAge1xuICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtc3RlcFwiLFxuICAgICAgY2xhc3M6IFtcbiAgICAgICAgIV92bS5pc1NpbXBsZSAmJiBcImlzLVwiICsgX3ZtLiRwYXJlbnQuZGlyZWN0aW9uLFxuICAgICAgICBfdm0uaXNTaW1wbGUgJiYgXCJpcy1zaW1wbGVcIixcbiAgICAgICAgX3ZtLmlzTGFzdCAmJiAhX3ZtLnNwYWNlICYmICFfdm0uaXNDZW50ZXIgJiYgXCJpcy1mbGV4XCIsXG4gICAgICAgIF92bS5pc0NlbnRlciAmJiAhX3ZtLmlzVmVydGljYWwgJiYgIV92bS5pc1NpbXBsZSAmJiBcImlzLWNlbnRlclwiXG4gICAgICBdLFxuICAgICAgc3R5bGU6IF92bS5zdHlsZVxuICAgIH0sXG4gICAgW1xuICAgICAgX2MoXG4gICAgICAgIFwiZGl2XCIsXG4gICAgICAgIHsgc3RhdGljQ2xhc3M6IFwiZWwtc3RlcF9faGVhZFwiLCBjbGFzczogXCJpcy1cIiArIF92bS5jdXJyZW50U3RhdHVzIH0sXG4gICAgICAgIFtcbiAgICAgICAgICBfYyhcbiAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXN0ZXBfX2xpbmVcIixcbiAgICAgICAgICAgICAgc3R5bGU6IF92bS5pc0xhc3RcbiAgICAgICAgICAgICAgICA/IFwiXCJcbiAgICAgICAgICAgICAgICA6IHsgbWFyZ2luUmlnaHQ6IF92bS4kcGFyZW50LnN0ZXBPZmZzZXQgKyBcInB4XCIgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX2MoXCJpXCIsIHtcbiAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1zdGVwX19saW5lLWlubmVyXCIsXG4gICAgICAgICAgICAgICAgc3R5bGU6IF92bS5saW5lU3R5bGVcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICApLFxuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtc3RlcF9faWNvblwiLFxuICAgICAgICAgICAgICBjbGFzczogXCJpcy1cIiArIChfdm0uaWNvbiA/IFwiaWNvblwiIDogXCJ0ZXh0XCIpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfdm0uY3VycmVudFN0YXR1cyAhPT0gXCJzdWNjZXNzXCIgJiYgX3ZtLmN1cnJlbnRTdGF0dXMgIT09IFwiZXJyb3JcIlxuICAgICAgICAgICAgICAgID8gX3ZtLl90KFwiaWNvblwiLCBbXG4gICAgICAgICAgICAgICAgICAgIF92bS5pY29uXG4gICAgICAgICAgICAgICAgICAgICAgPyBfYyhcImlcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1zdGVwX19pY29uLWlubmVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBbX3ZtLmljb25dXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgICAgICAgICFfdm0uaWNvbiAmJiAhX3ZtLmlzU2ltcGxlXG4gICAgICAgICAgICAgICAgICAgICAgPyBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLXN0ZXBfX2ljb24taW5uZXJcIiB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihfdm0uX3MoX3ZtLmluZGV4ICsgMSkpXG4gICAgICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgOiBfYyhcImlcIiwge1xuICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1zdGVwX19pY29uLWlubmVyIGlzLXN0YXR1c1wiLFxuICAgICAgICAgICAgICAgICAgICBjbGFzczogW1xuICAgICAgICAgICAgICAgICAgICAgIFwiZWwtaWNvbi1cIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAoX3ZtLmN1cnJlbnRTdGF0dXMgPT09IFwic3VjY2Vzc1wiID8gXCJjaGVja1wiIDogXCJjbG9zZVwiKVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIDJcbiAgICAgICAgICApXG4gICAgICAgIF1cbiAgICAgICksXG4gICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLXN0ZXBfX21haW5cIiB9LCBbXG4gICAgICAgIF9jKFxuICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgcmVmOiBcInRpdGxlXCIsXG4gICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1zdGVwX190aXRsZVwiLFxuICAgICAgICAgICAgY2xhc3M6IFtcImlzLVwiICsgX3ZtLmN1cnJlbnRTdGF0dXNdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBbX3ZtLl90KFwidGl0bGVcIiwgW192bS5fdihfdm0uX3MoX3ZtLnRpdGxlKSldKV0sXG4gICAgICAgICAgMlxuICAgICAgICApLFxuICAgICAgICBfdm0uaXNTaW1wbGVcbiAgICAgICAgICA/IF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiZWwtc3RlcF9fYXJyb3dcIiB9KVxuICAgICAgICAgIDogX2MoXG4gICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1zdGVwX19kZXNjcmlwdGlvblwiLFxuICAgICAgICAgICAgICAgIGNsYXNzOiBbXCJpcy1cIiArIF92bS5jdXJyZW50U3RhdHVzXVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBbX3ZtLl90KFwiZGVzY3JpcHRpb25cIiwgW192bS5fdihfdm0uX3MoX3ZtLmRlc2NyaXB0aW9uKSldKV0sXG4gICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIClcbiAgICAgIF0pXG4gICAgXVxuICApXG59XG52YXIgc3RlcHZ1ZV90eXBlX3RlbXBsYXRlX2lkX2Y0MTRhODdhX3N0YXRpY1JlbmRlckZucyA9IFtdXG5zdGVwdnVlX3R5cGVfdGVtcGxhdGVfaWRfZjQxNGE4N2FfcmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9zdGVwcy9zcmMvc3RlcC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZjQxNGE4N2EmXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3N0ZXBzL3NyYy9zdGVwLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHN0ZXB2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBuYW1lOiAnRWxTdGVwJyxcblxuICBwcm9wczoge1xuICAgIHRpdGxlOiBTdHJpbmcsXG4gICAgaWNvbjogU3RyaW5nLFxuICAgIGRlc2NyaXB0aW9uOiBTdHJpbmcsXG4gICAgc3RhdHVzOiBTdHJpbmdcbiAgfSxcblxuICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpbmRleDogLTEsXG4gICAgICBsaW5lU3R5bGU6IHt9LFxuICAgICAgaW50ZXJuYWxTdGF0dXM6ICcnXG4gICAgfTtcbiAgfSxcbiAgYmVmb3JlQ3JlYXRlOiBmdW5jdGlvbiBiZWZvcmVDcmVhdGUoKSB7XG4gICAgdGhpcy4kcGFyZW50LnN0ZXBzLnB1c2godGhpcyk7XG4gIH0sXG4gIGJlZm9yZURlc3Ryb3k6IGZ1bmN0aW9uIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgdmFyIHN0ZXBzID0gdGhpcy4kcGFyZW50LnN0ZXBzO1xuICAgIHZhciBpbmRleCA9IHN0ZXBzLmluZGV4T2YodGhpcyk7XG4gICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgIHN0ZXBzLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICB9LFxuXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjdXJyZW50U3RhdHVzOiBmdW5jdGlvbiBjdXJyZW50U3RhdHVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RhdHVzIHx8IHRoaXMuaW50ZXJuYWxTdGF0dXM7XG4gICAgfSxcbiAgICBwcmV2U3RhdHVzOiBmdW5jdGlvbiBwcmV2U3RhdHVzKCkge1xuICAgICAgdmFyIHByZXZTdGVwID0gdGhpcy4kcGFyZW50LnN0ZXBzW3RoaXMuaW5kZXggLSAxXTtcbiAgICAgIHJldHVybiBwcmV2U3RlcCA/IHByZXZTdGVwLmN1cnJlbnRTdGF0dXMgOiAnd2FpdCc7XG4gICAgfSxcbiAgICBpc0NlbnRlcjogZnVuY3Rpb24gaXNDZW50ZXIoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcGFyZW50LmFsaWduQ2VudGVyO1xuICAgIH0sXG4gICAgaXNWZXJ0aWNhbDogZnVuY3Rpb24gaXNWZXJ0aWNhbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRwYXJlbnQuZGlyZWN0aW9uID09PSAndmVydGljYWwnO1xuICAgIH0sXG4gICAgaXNTaW1wbGU6IGZ1bmN0aW9uIGlzU2ltcGxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHBhcmVudC5zaW1wbGU7XG4gICAgfSxcbiAgICBpc0xhc3Q6IGZ1bmN0aW9uIGlzTGFzdCgpIHtcbiAgICAgIHZhciBwYXJlbnQgPSB0aGlzLiRwYXJlbnQ7XG4gICAgICByZXR1cm4gcGFyZW50LnN0ZXBzW3BhcmVudC5zdGVwcy5sZW5ndGggLSAxXSA9PT0gdGhpcztcbiAgICB9LFxuICAgIHN0ZXBzQ291bnQ6IGZ1bmN0aW9uIHN0ZXBzQ291bnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcGFyZW50LnN0ZXBzLmxlbmd0aDtcbiAgICB9LFxuICAgIHNwYWNlOiBmdW5jdGlvbiBzcGFjZSgpIHtcbiAgICAgIHZhciBpc1NpbXBsZSA9IHRoaXMuaXNTaW1wbGUsXG4gICAgICAgICAgc3BhY2UgPSB0aGlzLiRwYXJlbnQuc3BhY2U7XG5cbiAgICAgIHJldHVybiBpc1NpbXBsZSA/ICcnIDogc3BhY2U7XG4gICAgfSxcblxuICAgIHN0eWxlOiBmdW5jdGlvbiBzdHlsZSgpIHtcbiAgICAgIHZhciBzdHlsZSA9IHt9O1xuICAgICAgdmFyIHBhcmVudCA9IHRoaXMuJHBhcmVudDtcbiAgICAgIHZhciBsZW4gPSBwYXJlbnQuc3RlcHMubGVuZ3RoO1xuXG4gICAgICB2YXIgc3BhY2UgPSB0eXBlb2YgdGhpcy5zcGFjZSA9PT0gJ251bWJlcicgPyB0aGlzLnNwYWNlICsgJ3B4JyA6IHRoaXMuc3BhY2UgPyB0aGlzLnNwYWNlIDogMTAwIC8gKGxlbiAtICh0aGlzLmlzQ2VudGVyID8gMCA6IDEpKSArICclJztcbiAgICAgIHN0eWxlLmZsZXhCYXNpcyA9IHNwYWNlO1xuICAgICAgaWYgKHRoaXMuaXNWZXJ0aWNhbCkgcmV0dXJuIHN0eWxlO1xuICAgICAgaWYgKHRoaXMuaXNMYXN0KSB7XG4gICAgICAgIHN0eWxlLm1heFdpZHRoID0gMTAwIC8gdGhpcy5zdGVwc0NvdW50ICsgJyUnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3R5bGUubWFyZ2luUmlnaHQgPSAtdGhpcy4kcGFyZW50LnN0ZXBPZmZzZXQgKyAncHgnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3R5bGU7XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICB1cGRhdGVTdGF0dXM6IGZ1bmN0aW9uIHVwZGF0ZVN0YXR1cyh2YWwpIHtcbiAgICAgIHZhciBwcmV2Q2hpbGQgPSB0aGlzLiRwYXJlbnQuJGNoaWxkcmVuW3RoaXMuaW5kZXggLSAxXTtcblxuICAgICAgaWYgKHZhbCA+IHRoaXMuaW5kZXgpIHtcbiAgICAgICAgdGhpcy5pbnRlcm5hbFN0YXR1cyA9IHRoaXMuJHBhcmVudC5maW5pc2hTdGF0dXM7XG4gICAgICB9IGVsc2UgaWYgKHZhbCA9PT0gdGhpcy5pbmRleCAmJiB0aGlzLnByZXZTdGF0dXMgIT09ICdlcnJvcicpIHtcbiAgICAgICAgdGhpcy5pbnRlcm5hbFN0YXR1cyA9IHRoaXMuJHBhcmVudC5wcm9jZXNzU3RhdHVzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5pbnRlcm5hbFN0YXR1cyA9ICd3YWl0JztcbiAgICAgIH1cblxuICAgICAgaWYgKHByZXZDaGlsZCkgcHJldkNoaWxkLmNhbGNQcm9ncmVzcyh0aGlzLmludGVybmFsU3RhdHVzKTtcbiAgICB9LFxuICAgIGNhbGNQcm9ncmVzczogZnVuY3Rpb24gY2FsY1Byb2dyZXNzKHN0YXR1cykge1xuICAgICAgdmFyIHN0ZXAgPSAxMDA7XG4gICAgICB2YXIgc3R5bGUgPSB7fTtcblxuICAgICAgc3R5bGUudHJhbnNpdGlvbkRlbGF5ID0gMTUwICogdGhpcy5pbmRleCArICdtcyc7XG4gICAgICBpZiAoc3RhdHVzID09PSB0aGlzLiRwYXJlbnQucHJvY2Vzc1N0YXR1cykge1xuICAgICAgICBzdGVwID0gdGhpcy5jdXJyZW50U3RhdHVzICE9PSAnZXJyb3InID8gMCA6IDA7XG4gICAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PT0gJ3dhaXQnKSB7XG4gICAgICAgIHN0ZXAgPSAwO1xuICAgICAgICBzdHlsZS50cmFuc2l0aW9uRGVsYXkgPSAtMTUwICogdGhpcy5pbmRleCArICdtcyc7XG4gICAgICB9XG5cbiAgICAgIHN0eWxlLmJvcmRlcldpZHRoID0gc3RlcCAmJiAhdGhpcy5pc1NpbXBsZSA/ICcxcHgnIDogMDtcbiAgICAgIHRoaXMuJHBhcmVudC5kaXJlY3Rpb24gPT09ICd2ZXJ0aWNhbCcgPyBzdHlsZS5oZWlnaHQgPSBzdGVwICsgJyUnIDogc3R5bGUud2lkdGggPSBzdGVwICsgJyUnO1xuXG4gICAgICB0aGlzLmxpbmVTdHlsZSA9IHN0eWxlO1xuICAgIH1cbiAgfSxcblxuICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB2YXIgdW53YXRjaCA9IHRoaXMuJHdhdGNoKCdpbmRleCcsIGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgIF90aGlzLiR3YXRjaCgnJHBhcmVudC5hY3RpdmUnLCBfdGhpcy51cGRhdGVTdGF0dXMsIHsgaW1tZWRpYXRlOiB0cnVlIH0pO1xuICAgICAgX3RoaXMuJHdhdGNoKCckcGFyZW50LnByb2Nlc3NTdGF0dXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhY3RpdmVJbmRleCA9IF90aGlzLiRwYXJlbnQuYWN0aXZlO1xuICAgICAgICBfdGhpcy51cGRhdGVTdGF0dXMoYWN0aXZlSW5kZXgpO1xuICAgICAgfSwgeyBpbW1lZGlhdGU6IHRydWUgfSk7XG4gICAgICB1bndhdGNoKCk7XG4gICAgfSk7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9zdGVwcy9zcmMvc3RlcC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX3N0ZXB2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoc3RlcHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9zdGVwcy9zcmMvc3RlcC52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBzdGVwX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgc3JjX3N0ZXB2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIHN0ZXB2dWVfdHlwZV90ZW1wbGF0ZV9pZF9mNDE0YTg3YV9yZW5kZXIsXG4gIHN0ZXB2dWVfdHlwZV90ZW1wbGF0ZV9pZF9mNDE0YTg3YV9zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIHN0ZXBfYXBpOyB9XG5zdGVwX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvc3RlcHMvc3JjL3N0ZXAudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHN0ZXAgPSAoc3RlcF9jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3N0ZXAvaW5kZXguanNcblxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuc3RlcC5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuICBWdWUuY29tcG9uZW50KHN0ZXAubmFtZSwgc3RlcCk7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc19zdGVwID0gKHN0ZXApO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9jYXJvdXNlbC9zcmMvbWFpbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NWQ1ZDE0ODImXG52YXIgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzVkNWQxNDgyX3JlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHtcbiAgICAgIGNsYXNzOiBfdm0uY2Fyb3VzZWxDbGFzc2VzLFxuICAgICAgb246IHtcbiAgICAgICAgbW91c2VlbnRlcjogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgcmV0dXJuIF92bS5oYW5kbGVNb3VzZUVudGVyKCRldmVudClcbiAgICAgICAgfSxcbiAgICAgICAgbW91c2VsZWF2ZTogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgcmV0dXJuIF92bS5oYW5kbGVNb3VzZUxlYXZlKCRldmVudClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgW1xuICAgICAgX2MoXG4gICAgICAgIFwiZGl2XCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1jYXJvdXNlbF9fY29udGFpbmVyXCIsXG4gICAgICAgICAgc3R5bGU6IHsgaGVpZ2h0OiBfdm0uaGVpZ2h0IH1cbiAgICAgICAgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF92bS5hcnJvd0Rpc3BsYXlcbiAgICAgICAgICAgID8gX2MoXCJ0cmFuc2l0aW9uXCIsIHsgYXR0cnM6IHsgbmFtZTogXCJjYXJvdXNlbC1hcnJvdy1sZWZ0XCIgfSB9LCBbXG4gICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIChfdm0uYXJyb3cgPT09IFwiYWx3YXlzXCIgfHwgX3ZtLmhvdmVyKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoX3ZtLmxvb3AgfHwgX3ZtLmFjdGl2ZUluZGV4ID4gMCksXG4gICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOlxuICAgICAgICAgICAgICAgICAgICAgICAgICBcIihhcnJvdyA9PT0gJ2Fsd2F5cycgfHwgaG92ZXIpICYmIChsb29wIHx8IGFjdGl2ZUluZGV4ID4gMClcIlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtY2Fyb3VzZWxfX2Fycm93IGVsLWNhcm91c2VsX19hcnJvdy0tbGVmdFwiLFxuICAgICAgICAgICAgICAgICAgICBhdHRyczogeyB0eXBlOiBcImJ1dHRvblwiIH0sXG4gICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgbW91c2VlbnRlcjogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfdm0uaGFuZGxlQnV0dG9uRW50ZXIoXCJsZWZ0XCIpXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICBtb3VzZWxlYXZlOiBfdm0uaGFuZGxlQnV0dG9uTGVhdmUsXG4gICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICAgICAgICAgICAgICBfdm0udGhyb3R0bGVkQXJyb3dDbGljayhfdm0uYWN0aXZlSW5kZXggLSAxKVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIFtfYyhcImlcIiwgeyBzdGF0aWNDbGFzczogXCJlbC1pY29uLWFycm93LWxlZnRcIiB9KV1cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgIF92bS5hcnJvd0Rpc3BsYXlcbiAgICAgICAgICAgID8gX2MoXCJ0cmFuc2l0aW9uXCIsIHsgYXR0cnM6IHsgbmFtZTogXCJjYXJvdXNlbC1hcnJvdy1yaWdodFwiIH0gfSwgW1xuICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgXCJidXR0b25cIixcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoX3ZtLmFycm93ID09PSBcImFsd2F5c1wiIHx8IF92bS5ob3ZlcikgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKF92bS5sb29wIHx8IF92bS5hY3RpdmVJbmRleCA8IF92bS5pdGVtcy5sZW5ndGggLSAxKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246XG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiKGFycm93ID09PSAnYWx3YXlzJyB8fCBob3ZlcikgJiYgKGxvb3AgfHwgYWN0aXZlSW5kZXggPCBpdGVtcy5sZW5ndGggLSAxKVwiXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1jYXJvdXNlbF9fYXJyb3cgZWwtY2Fyb3VzZWxfX2Fycm93LS1yaWdodFwiLFxuICAgICAgICAgICAgICAgICAgICBhdHRyczogeyB0eXBlOiBcImJ1dHRvblwiIH0sXG4gICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgbW91c2VlbnRlcjogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfdm0uaGFuZGxlQnV0dG9uRW50ZXIoXCJyaWdodFwiKVxuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgbW91c2VsZWF2ZTogX3ZtLmhhbmRsZUJ1dHRvbkxlYXZlLFxuICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLnRocm90dGxlZEFycm93Q2xpY2soX3ZtLmFjdGl2ZUluZGV4ICsgMSlcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBbX2MoXCJpXCIsIHsgc3RhdGljQ2xhc3M6IFwiZWwtaWNvbi1hcnJvdy1yaWdodFwiIH0pXVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgX3ZtLl90KFwiZGVmYXVsdFwiKVxuICAgICAgICBdLFxuICAgICAgICAyXG4gICAgICApLFxuICAgICAgX3ZtLmluZGljYXRvclBvc2l0aW9uICE9PSBcIm5vbmVcIlxuICAgICAgICA/IF9jKFxuICAgICAgICAgICAgXCJ1bFwiLFxuICAgICAgICAgICAgeyBjbGFzczogX3ZtLmluZGljYXRvcnNDbGFzc2VzIH0sXG4gICAgICAgICAgICBfdm0uX2woX3ZtLml0ZW1zLCBmdW5jdGlvbihpdGVtLCBpbmRleCkge1xuICAgICAgICAgICAgICByZXR1cm4gX2MoXG4gICAgICAgICAgICAgICAgXCJsaVwiLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGtleTogaW5kZXgsXG4gICAgICAgICAgICAgICAgICBjbGFzczogW1xuICAgICAgICAgICAgICAgICAgICBcImVsLWNhcm91c2VsX19pbmRpY2F0b3JcIixcbiAgICAgICAgICAgICAgICAgICAgXCJlbC1jYXJvdXNlbF9faW5kaWNhdG9yLS1cIiArIF92bS5kaXJlY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgIHsgXCJpcy1hY3RpdmVcIjogaW5kZXggPT09IF92bS5hY3RpdmVJbmRleCB9XG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgbW91c2VlbnRlcjogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgX3ZtLnRocm90dGxlZEluZGljYXRvckhvdmVyKGluZGV4KVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICAgICAgICAgICAgX3ZtLmhhbmRsZUluZGljYXRvckNsaWNrKGluZGV4KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBfYyhcImJ1dHRvblwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLWNhcm91c2VsX19idXR0b25cIiB9LCBbXG4gICAgICAgICAgICAgICAgICAgIF92bS5oYXNMYWJlbFxuICAgICAgICAgICAgICAgICAgICAgID8gX2MoXCJzcGFuXCIsIFtfdm0uX3YoX3ZtLl9zKGl0ZW0ubGFiZWwpKV0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgMFxuICAgICAgICAgIClcbiAgICAgICAgOiBfdm0uX2UoKVxuICAgIF1cbiAgKVxufVxudmFyIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF81ZDVkMTQ4Ml9zdGF0aWNSZW5kZXJGbnMgPSBbXVxubWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzVkNWQxNDgyX3JlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY2Fyb3VzZWwvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTVkNWQxNDgyJlxuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwidGhyb3R0bGUtZGVib3VuY2UvdGhyb3R0bGVcIlxudmFyIHRocm90dGxlXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjUpO1xudmFyIHRocm90dGxlX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHRocm90dGxlXyk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2Nhcm91c2VsL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5cblxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBjYXJvdXNlbF9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG5hbWU6ICdFbENhcm91c2VsJyxcblxuICBwcm9wczoge1xuICAgIGluaXRpYWxJbmRleDoge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZGVmYXVsdDogMFxuICAgIH0sXG4gICAgaGVpZ2h0OiBTdHJpbmcsXG4gICAgdHJpZ2dlcjoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2hvdmVyJ1xuICAgIH0sXG4gICAgYXV0b3BsYXk6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSxcbiAgICBpbnRlcnZhbDoge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZGVmYXVsdDogMzAwMFxuICAgIH0sXG4gICAgaW5kaWNhdG9yUG9zaXRpb246IFN0cmluZyxcbiAgICBpbmRpY2F0b3I6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSxcbiAgICBhcnJvdzoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2hvdmVyJ1xuICAgIH0sXG4gICAgdHlwZTogU3RyaW5nLFxuICAgIGxvb3A6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSxcbiAgICBkaXJlY3Rpb246IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdob3Jpem9udGFsJyxcbiAgICAgIHZhbGlkYXRvcjogZnVuY3Rpb24gdmFsaWRhdG9yKHZhbCkge1xuICAgICAgICByZXR1cm4gWydob3Jpem9udGFsJywgJ3ZlcnRpY2FsJ10uaW5kZXhPZih2YWwpICE9PSAtMTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXRlbXM6IFtdLFxuICAgICAgYWN0aXZlSW5kZXg6IC0xLFxuICAgICAgY29udGFpbmVyV2lkdGg6IDAsXG4gICAgICB0aW1lcjogbnVsbCxcbiAgICAgIGhvdmVyOiBmYWxzZVxuICAgIH07XG4gIH0sXG5cblxuICBjb21wdXRlZDoge1xuICAgIGFycm93RGlzcGxheTogZnVuY3Rpb24gYXJyb3dEaXNwbGF5KCkge1xuICAgICAgcmV0dXJuIHRoaXMuYXJyb3cgIT09ICduZXZlcicgJiYgdGhpcy5kaXJlY3Rpb24gIT09ICd2ZXJ0aWNhbCc7XG4gICAgfSxcbiAgICBoYXNMYWJlbDogZnVuY3Rpb24gaGFzTGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pdGVtcy5zb21lKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIHJldHVybiBpdGVtLmxhYmVsLnRvU3RyaW5nKCkubGVuZ3RoID4gMDtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgY2Fyb3VzZWxDbGFzc2VzOiBmdW5jdGlvbiBjYXJvdXNlbENsYXNzZXMoKSB7XG4gICAgICB2YXIgY2xhc3NlcyA9IFsnZWwtY2Fyb3VzZWwnLCAnZWwtY2Fyb3VzZWwtLScgKyB0aGlzLmRpcmVjdGlvbl07XG4gICAgICBpZiAodGhpcy50eXBlID09PSAnY2FyZCcpIHtcbiAgICAgICAgY2xhc3Nlcy5wdXNoKCdlbC1jYXJvdXNlbC0tY2FyZCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNsYXNzZXM7XG4gICAgfSxcbiAgICBpbmRpY2F0b3JzQ2xhc3NlczogZnVuY3Rpb24gaW5kaWNhdG9yc0NsYXNzZXMoKSB7XG4gICAgICB2YXIgY2xhc3NlcyA9IFsnZWwtY2Fyb3VzZWxfX2luZGljYXRvcnMnLCAnZWwtY2Fyb3VzZWxfX2luZGljYXRvcnMtLScgKyB0aGlzLmRpcmVjdGlvbl07XG4gICAgICBpZiAodGhpcy5oYXNMYWJlbCkge1xuICAgICAgICBjbGFzc2VzLnB1c2goJ2VsLWNhcm91c2VsX19pbmRpY2F0b3JzLS1sYWJlbHMnKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmluZGljYXRvclBvc2l0aW9uID09PSAnb3V0c2lkZScgfHwgdGhpcy50eXBlID09PSAnY2FyZCcpIHtcbiAgICAgICAgY2xhc3Nlcy5wdXNoKCdlbC1jYXJvdXNlbF9faW5kaWNhdG9ycy0tb3V0c2lkZScpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNsYXNzZXM7XG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgaXRlbXM6IGZ1bmN0aW9uIGl0ZW1zKHZhbCkge1xuICAgICAgaWYgKHZhbC5sZW5ndGggPiAwKSB0aGlzLnNldEFjdGl2ZUl0ZW0odGhpcy5pbml0aWFsSW5kZXgpO1xuICAgIH0sXG4gICAgYWN0aXZlSW5kZXg6IGZ1bmN0aW9uIGFjdGl2ZUluZGV4KHZhbCwgb2xkVmFsKSB7XG4gICAgICB0aGlzLnJlc2V0SXRlbVBvc2l0aW9uKG9sZFZhbCk7XG4gICAgICBpZiAob2xkVmFsID4gLTEpIHtcbiAgICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgdmFsLCBvbGRWYWwpO1xuICAgICAgfVxuICAgIH0sXG4gICAgYXV0b3BsYXk6IGZ1bmN0aW9uIGF1dG9wbGF5KHZhbCkge1xuICAgICAgdmFsID8gdGhpcy5zdGFydFRpbWVyKCkgOiB0aGlzLnBhdXNlVGltZXIoKTtcbiAgICB9LFxuICAgIGxvb3A6IGZ1bmN0aW9uIGxvb3AoKSB7XG4gICAgICB0aGlzLnNldEFjdGl2ZUl0ZW0odGhpcy5hY3RpdmVJbmRleCk7XG4gICAgfSxcbiAgICBpbnRlcnZhbDogZnVuY3Rpb24gaW50ZXJ2YWwoKSB7XG4gICAgICB0aGlzLnBhdXNlVGltZXIoKTtcbiAgICAgIHRoaXMuc3RhcnRUaW1lcigpO1xuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgaGFuZGxlTW91c2VFbnRlcjogZnVuY3Rpb24gaGFuZGxlTW91c2VFbnRlcigpIHtcbiAgICAgIHRoaXMuaG92ZXIgPSB0cnVlO1xuICAgICAgdGhpcy5wYXVzZVRpbWVyKCk7XG4gICAgfSxcbiAgICBoYW5kbGVNb3VzZUxlYXZlOiBmdW5jdGlvbiBoYW5kbGVNb3VzZUxlYXZlKCkge1xuICAgICAgdGhpcy5ob3ZlciA9IGZhbHNlO1xuICAgICAgdGhpcy5zdGFydFRpbWVyKCk7XG4gICAgfSxcbiAgICBpdGVtSW5TdGFnZTogZnVuY3Rpb24gaXRlbUluU3RhZ2UoaXRlbSwgaW5kZXgpIHtcbiAgICAgIHZhciBsZW5ndGggPSB0aGlzLml0ZW1zLmxlbmd0aDtcbiAgICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoIC0gMSAmJiBpdGVtLmluU3RhZ2UgJiYgdGhpcy5pdGVtc1swXS5hY3RpdmUgfHwgaXRlbS5pblN0YWdlICYmIHRoaXMuaXRlbXNbaW5kZXggKyAxXSAmJiB0aGlzLml0ZW1zW2luZGV4ICsgMV0uYWN0aXZlKSB7XG4gICAgICAgIHJldHVybiAnbGVmdCc7XG4gICAgICB9IGVsc2UgaWYgKGluZGV4ID09PSAwICYmIGl0ZW0uaW5TdGFnZSAmJiB0aGlzLml0ZW1zW2xlbmd0aCAtIDFdLmFjdGl2ZSB8fCBpdGVtLmluU3RhZ2UgJiYgdGhpcy5pdGVtc1tpbmRleCAtIDFdICYmIHRoaXMuaXRlbXNbaW5kZXggLSAxXS5hY3RpdmUpIHtcbiAgICAgICAgcmV0dXJuICdyaWdodCc7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcbiAgICBoYW5kbGVCdXR0b25FbnRlcjogZnVuY3Rpb24gaGFuZGxlQnV0dG9uRW50ZXIoYXJyb3cpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIGlmICh0aGlzLmRpcmVjdGlvbiA9PT0gJ3ZlcnRpY2FsJykgcmV0dXJuO1xuICAgICAgdGhpcy5pdGVtcy5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtLCBpbmRleCkge1xuICAgICAgICBpZiAoYXJyb3cgPT09IF90aGlzLml0ZW1JblN0YWdlKGl0ZW0sIGluZGV4KSkge1xuICAgICAgICAgIGl0ZW0uaG92ZXIgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGhhbmRsZUJ1dHRvbkxlYXZlOiBmdW5jdGlvbiBoYW5kbGVCdXR0b25MZWF2ZSgpIHtcbiAgICAgIGlmICh0aGlzLmRpcmVjdGlvbiA9PT0gJ3ZlcnRpY2FsJykgcmV0dXJuO1xuICAgICAgdGhpcy5pdGVtcy5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIGl0ZW0uaG92ZXIgPSBmYWxzZTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgdXBkYXRlSXRlbXM6IGZ1bmN0aW9uIHVwZGF0ZUl0ZW1zKCkge1xuICAgICAgdGhpcy5pdGVtcyA9IHRoaXMuJGNoaWxkcmVuLmZpbHRlcihmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgICAgcmV0dXJuIGNoaWxkLiRvcHRpb25zLm5hbWUgPT09ICdFbENhcm91c2VsSXRlbSc7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIHJlc2V0SXRlbVBvc2l0aW9uOiBmdW5jdGlvbiByZXNldEl0ZW1Qb3NpdGlvbihvbGRJbmRleCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHRoaXMuaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSwgaW5kZXgpIHtcbiAgICAgICAgaXRlbS50cmFuc2xhdGVJdGVtKGluZGV4LCBfdGhpczIuYWN0aXZlSW5kZXgsIG9sZEluZGV4KTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgcGxheVNsaWRlczogZnVuY3Rpb24gcGxheVNsaWRlcygpIHtcbiAgICAgIGlmICh0aGlzLmFjdGl2ZUluZGV4IDwgdGhpcy5pdGVtcy5sZW5ndGggLSAxKSB7XG4gICAgICAgIHRoaXMuYWN0aXZlSW5kZXgrKztcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5sb29wKSB7XG4gICAgICAgIHRoaXMuYWN0aXZlSW5kZXggPSAwO1xuICAgICAgfVxuICAgIH0sXG4gICAgcGF1c2VUaW1lcjogZnVuY3Rpb24gcGF1c2VUaW1lcigpIHtcbiAgICAgIGlmICh0aGlzLnRpbWVyKSB7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy50aW1lcik7XG4gICAgICAgIHRoaXMudGltZXIgPSBudWxsO1xuICAgICAgfVxuICAgIH0sXG4gICAgc3RhcnRUaW1lcjogZnVuY3Rpb24gc3RhcnRUaW1lcigpIHtcbiAgICAgIGlmICh0aGlzLmludGVydmFsIDw9IDAgfHwgIXRoaXMuYXV0b3BsYXkgfHwgdGhpcy50aW1lcikgcmV0dXJuO1xuICAgICAgdGhpcy50aW1lciA9IHNldEludGVydmFsKHRoaXMucGxheVNsaWRlcywgdGhpcy5pbnRlcnZhbCk7XG4gICAgfSxcbiAgICByZXNldFRpbWVyOiBmdW5jdGlvbiByZXNldFRpbWVyKCkge1xuICAgICAgdGhpcy5wYXVzZVRpbWVyKCk7XG4gICAgICB0aGlzLnN0YXJ0VGltZXIoKTtcbiAgICB9LFxuICAgIHNldEFjdGl2ZUl0ZW06IGZ1bmN0aW9uIHNldEFjdGl2ZUl0ZW0oaW5kZXgpIHtcbiAgICAgIGlmICh0eXBlb2YgaW5kZXggPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHZhciBmaWx0ZXJlZEl0ZW1zID0gdGhpcy5pdGVtcy5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICByZXR1cm4gaXRlbS5uYW1lID09PSBpbmRleDtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChmaWx0ZXJlZEl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBpbmRleCA9IHRoaXMuaXRlbXMuaW5kZXhPZihmaWx0ZXJlZEl0ZW1zWzBdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaW5kZXggPSBOdW1iZXIoaW5kZXgpO1xuICAgICAgaWYgKGlzTmFOKGluZGV4KSB8fCBpbmRleCAhPT0gTWF0aC5mbG9vcihpbmRleCkpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdbRWxlbWVudCBXYXJuXVtDYXJvdXNlbF1pbmRleCBtdXN0IGJlIGFuIGludGVnZXIuJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHZhciBsZW5ndGggPSB0aGlzLml0ZW1zLmxlbmd0aDtcbiAgICAgIHZhciBvbGRJbmRleCA9IHRoaXMuYWN0aXZlSW5kZXg7XG4gICAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICAgIHRoaXMuYWN0aXZlSW5kZXggPSB0aGlzLmxvb3AgPyBsZW5ndGggLSAxIDogMDtcbiAgICAgIH0gZWxzZSBpZiAoaW5kZXggPj0gbGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuYWN0aXZlSW5kZXggPSB0aGlzLmxvb3AgPyAwIDogbGVuZ3RoIC0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYWN0aXZlSW5kZXggPSBpbmRleDtcbiAgICAgIH1cbiAgICAgIGlmIChvbGRJbmRleCA9PT0gdGhpcy5hY3RpdmVJbmRleCkge1xuICAgICAgICB0aGlzLnJlc2V0SXRlbVBvc2l0aW9uKG9sZEluZGV4KTtcbiAgICAgIH1cbiAgICAgIHRoaXMucmVzZXRUaW1lcigpO1xuICAgIH0sXG4gICAgcHJldjogZnVuY3Rpb24gcHJldigpIHtcbiAgICAgIHRoaXMuc2V0QWN0aXZlSXRlbSh0aGlzLmFjdGl2ZUluZGV4IC0gMSk7XG4gICAgfSxcbiAgICBuZXh0OiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgdGhpcy5zZXRBY3RpdmVJdGVtKHRoaXMuYWN0aXZlSW5kZXggKyAxKTtcbiAgICB9LFxuICAgIGhhbmRsZUluZGljYXRvckNsaWNrOiBmdW5jdGlvbiBoYW5kbGVJbmRpY2F0b3JDbGljayhpbmRleCkge1xuICAgICAgdGhpcy5hY3RpdmVJbmRleCA9IGluZGV4O1xuICAgIH0sXG4gICAgaGFuZGxlSW5kaWNhdG9ySG92ZXI6IGZ1bmN0aW9uIGhhbmRsZUluZGljYXRvckhvdmVyKGluZGV4KSB7XG4gICAgICBpZiAodGhpcy50cmlnZ2VyID09PSAnaG92ZXInICYmIGluZGV4ICE9PSB0aGlzLmFjdGl2ZUluZGV4KSB7XG4gICAgICAgIHRoaXMuYWN0aXZlSW5kZXggPSBpbmRleDtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZDogZnVuY3Rpb24gY3JlYXRlZCgpIHtcbiAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgIHRoaXMudGhyb3R0bGVkQXJyb3dDbGljayA9IHRocm90dGxlX2RlZmF1bHQoKSgzMDAsIHRydWUsIGZ1bmN0aW9uIChpbmRleCkge1xuICAgICAgX3RoaXMzLnNldEFjdGl2ZUl0ZW0oaW5kZXgpO1xuICAgIH0pO1xuICAgIHRoaXMudGhyb3R0bGVkSW5kaWNhdG9ySG92ZXIgPSB0aHJvdHRsZV9kZWZhdWx0KCkoMzAwLCBmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgIF90aGlzMy5oYW5kbGVJbmRpY2F0b3JIb3ZlcihpbmRleCk7XG4gICAgfSk7XG4gIH0sXG4gIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7XG4gICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cbiAgICB0aGlzLnVwZGF0ZUl0ZW1zKCk7XG4gICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgT2JqZWN0KHJlc2l6ZV9ldmVudF9bXCJhZGRSZXNpemVMaXN0ZW5lclwiXSkoX3RoaXM0LiRlbCwgX3RoaXM0LnJlc2V0SXRlbVBvc2l0aW9uKTtcbiAgICAgIGlmIChfdGhpczQuaW5pdGlhbEluZGV4IDwgX3RoaXM0Lml0ZW1zLmxlbmd0aCAmJiBfdGhpczQuaW5pdGlhbEluZGV4ID49IDApIHtcbiAgICAgICAgX3RoaXM0LmFjdGl2ZUluZGV4ID0gX3RoaXM0LmluaXRpYWxJbmRleDtcbiAgICAgIH1cbiAgICAgIF90aGlzNC5zdGFydFRpbWVyKCk7XG4gICAgfSk7XG4gIH0sXG4gIGJlZm9yZURlc3Ryb3k6IGZ1bmN0aW9uIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuJGVsKSBPYmplY3QocmVzaXplX2V2ZW50X1tcInJlbW92ZVJlc2l6ZUxpc3RlbmVyXCJdKSh0aGlzLiRlbCwgdGhpcy5yZXNldEl0ZW1Qb3NpdGlvbik7XG4gICAgdGhpcy5wYXVzZVRpbWVyKCk7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jYXJvdXNlbC9zcmMvbWFpbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcGFja2FnZXNfY2Fyb3VzZWxfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoY2Fyb3VzZWxfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY2Fyb3VzZWwvc3JjL21haW4udnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgY2Fyb3VzZWxfc3JjX21haW5fY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBwYWNrYWdlc19jYXJvdXNlbF9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzVkNWQxNDgyX3JlbmRlcixcbiAgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzVkNWQxNDgyX3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgY2Fyb3VzZWxfc3JjX21haW5fYXBpOyB9XG5jYXJvdXNlbF9zcmNfbWFpbl9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL2Nhcm91c2VsL3NyYy9tYWluLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBjYXJvdXNlbF9zcmNfbWFpbiA9IChjYXJvdXNlbF9zcmNfbWFpbl9jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2Nhcm91c2VsL2luZGV4LmpzXG5cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmNhcm91c2VsX3NyY19tYWluLmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG4gIFZ1ZS5jb21wb25lbnQoY2Fyb3VzZWxfc3JjX21haW4ubmFtZSwgY2Fyb3VzZWxfc3JjX21haW4pO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgY2Fyb3VzZWwgPSAoY2Fyb3VzZWxfc3JjX21haW4pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9zY3JvbGxiYXIvc3JjL3V0aWwuanNcbnZhciBCQVJfTUFQID0ge1xuICB2ZXJ0aWNhbDoge1xuICAgIG9mZnNldDogJ29mZnNldEhlaWdodCcsXG4gICAgc2Nyb2xsOiAnc2Nyb2xsVG9wJyxcbiAgICBzY3JvbGxTaXplOiAnc2Nyb2xsSGVpZ2h0JyxcbiAgICBzaXplOiAnaGVpZ2h0JyxcbiAgICBrZXk6ICd2ZXJ0aWNhbCcsXG4gICAgYXhpczogJ1knLFxuICAgIGNsaWVudDogJ2NsaWVudFknLFxuICAgIGRpcmVjdGlvbjogJ3RvcCdcbiAgfSxcbiAgaG9yaXpvbnRhbDoge1xuICAgIG9mZnNldDogJ29mZnNldFdpZHRoJyxcbiAgICBzY3JvbGw6ICdzY3JvbGxMZWZ0JyxcbiAgICBzY3JvbGxTaXplOiAnc2Nyb2xsV2lkdGgnLFxuICAgIHNpemU6ICd3aWR0aCcsXG4gICAga2V5OiAnaG9yaXpvbnRhbCcsXG4gICAgYXhpczogJ1gnLFxuICAgIGNsaWVudDogJ2NsaWVudFgnLFxuICAgIGRpcmVjdGlvbjogJ2xlZnQnXG4gIH1cbn07XG5cbmZ1bmN0aW9uIHJlbmRlclRodW1iU3R5bGUoX3JlZikge1xuICB2YXIgbW92ZSA9IF9yZWYubW92ZSxcbiAgICAgIHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBiYXIgPSBfcmVmLmJhcjtcblxuICB2YXIgc3R5bGUgPSB7fTtcbiAgdmFyIHRyYW5zbGF0ZSA9ICd0cmFuc2xhdGUnICsgYmFyLmF4aXMgKyAnKCcgKyBtb3ZlICsgJyUpJztcblxuICBzdHlsZVtiYXIuc2l6ZV0gPSBzaXplO1xuICBzdHlsZS50cmFuc2Zvcm0gPSB0cmFuc2xhdGU7XG4gIHN0eWxlLm1zVHJhbnNmb3JtID0gdHJhbnNsYXRlO1xuICBzdHlsZS53ZWJraXRUcmFuc2Zvcm0gPSB0cmFuc2xhdGU7XG5cbiAgcmV0dXJuIHN0eWxlO1xufTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvc2Nyb2xsYmFyL3NyYy9iYXIuanNcblxuXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfYmFyID0gKHtcbiAgbmFtZTogJ0JhcicsXG5cbiAgcHJvcHM6IHtcbiAgICB2ZXJ0aWNhbDogQm9vbGVhbixcbiAgICBzaXplOiBTdHJpbmcsXG4gICAgbW92ZTogTnVtYmVyXG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBiYXI6IGZ1bmN0aW9uIGJhcigpIHtcbiAgICAgIHJldHVybiBCQVJfTUFQW3RoaXMudmVydGljYWwgPyAndmVydGljYWwnIDogJ2hvcml6b250YWwnXTtcbiAgICB9LFxuICAgIHdyYXA6IGZ1bmN0aW9uIHdyYXAoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcGFyZW50LndyYXA7XG4gICAgfVxuICB9LFxuXG4gIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKGgpIHtcbiAgICB2YXIgc2l6ZSA9IHRoaXMuc2l6ZSxcbiAgICAgICAgbW92ZSA9IHRoaXMubW92ZSxcbiAgICAgICAgYmFyID0gdGhpcy5iYXI7XG5cblxuICAgIHJldHVybiBoKFxuICAgICAgJ2RpdicsXG4gICAgICB7XG4gICAgICAgICdjbGFzcyc6IFsnZWwtc2Nyb2xsYmFyX19iYXInLCAnaXMtJyArIGJhci5rZXldLFxuICAgICAgICBvbjoge1xuICAgICAgICAgICdtb3VzZWRvd24nOiB0aGlzLmNsaWNrVHJhY2tIYW5kbGVyXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBbaCgnZGl2Jywge1xuICAgICAgICByZWY6ICd0aHVtYicsXG4gICAgICAgICdjbGFzcyc6ICdlbC1zY3JvbGxiYXJfX3RodW1iJyxcbiAgICAgICAgb246IHtcbiAgICAgICAgICAnbW91c2Vkb3duJzogdGhpcy5jbGlja1RodW1iSGFuZGxlclxuICAgICAgICB9LFxuXG4gICAgICAgIHN0eWxlOiByZW5kZXJUaHVtYlN0eWxlKHsgc2l6ZTogc2l6ZSwgbW92ZTogbW92ZSwgYmFyOiBiYXIgfSkgfSldXG4gICAgKTtcbiAgfSxcblxuXG4gIG1ldGhvZHM6IHtcbiAgICBjbGlja1RodW1iSGFuZGxlcjogZnVuY3Rpb24gY2xpY2tUaHVtYkhhbmRsZXIoZSkge1xuICAgICAgLy8gcHJldmVudCBjbGljayBldmVudCBvZiByaWdodCBidXR0b25cbiAgICAgIGlmIChlLmN0cmxLZXkgfHwgZS5idXR0b24gPT09IDIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5zdGFydERyYWcoZSk7XG4gICAgICB0aGlzW3RoaXMuYmFyLmF4aXNdID0gZS5jdXJyZW50VGFyZ2V0W3RoaXMuYmFyLm9mZnNldF0gLSAoZVt0aGlzLmJhci5jbGllbnRdIC0gZS5jdXJyZW50VGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW3RoaXMuYmFyLmRpcmVjdGlvbl0pO1xuICAgIH0sXG4gICAgY2xpY2tUcmFja0hhbmRsZXI6IGZ1bmN0aW9uIGNsaWNrVHJhY2tIYW5kbGVyKGUpIHtcbiAgICAgIHZhciBvZmZzZXQgPSBNYXRoLmFicyhlLnRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVt0aGlzLmJhci5kaXJlY3Rpb25dIC0gZVt0aGlzLmJhci5jbGllbnRdKTtcbiAgICAgIHZhciB0aHVtYkhhbGYgPSB0aGlzLiRyZWZzLnRodW1iW3RoaXMuYmFyLm9mZnNldF0gLyAyO1xuICAgICAgdmFyIHRodW1iUG9zaXRpb25QZXJjZW50YWdlID0gKG9mZnNldCAtIHRodW1iSGFsZikgKiAxMDAgLyB0aGlzLiRlbFt0aGlzLmJhci5vZmZzZXRdO1xuXG4gICAgICB0aGlzLndyYXBbdGhpcy5iYXIuc2Nyb2xsXSA9IHRodW1iUG9zaXRpb25QZXJjZW50YWdlICogdGhpcy53cmFwW3RoaXMuYmFyLnNjcm9sbFNpemVdIC8gMTAwO1xuICAgIH0sXG4gICAgc3RhcnREcmFnOiBmdW5jdGlvbiBzdGFydERyYWcoZSkge1xuICAgICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICAgIHRoaXMuY3Vyc29yRG93biA9IHRydWU7XG5cbiAgICAgIE9iamVjdChkb21fW1wib25cIl0pKGRvY3VtZW50LCAnbW91c2Vtb3ZlJywgdGhpcy5tb3VzZU1vdmVEb2N1bWVudEhhbmRsZXIpO1xuICAgICAgT2JqZWN0KGRvbV9bXCJvblwiXSkoZG9jdW1lbnQsICdtb3VzZXVwJywgdGhpcy5tb3VzZVVwRG9jdW1lbnRIYW5kbGVyKTtcbiAgICAgIGRvY3VtZW50Lm9uc2VsZWN0c3RhcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH07XG4gICAgfSxcbiAgICBtb3VzZU1vdmVEb2N1bWVudEhhbmRsZXI6IGZ1bmN0aW9uIG1vdXNlTW92ZURvY3VtZW50SGFuZGxlcihlKSB7XG4gICAgICBpZiAodGhpcy5jdXJzb3JEb3duID09PSBmYWxzZSkgcmV0dXJuO1xuICAgICAgdmFyIHByZXZQYWdlID0gdGhpc1t0aGlzLmJhci5heGlzXTtcblxuICAgICAgaWYgKCFwcmV2UGFnZSkgcmV0dXJuO1xuXG4gICAgICB2YXIgb2Zmc2V0ID0gKHRoaXMuJGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW3RoaXMuYmFyLmRpcmVjdGlvbl0gLSBlW3RoaXMuYmFyLmNsaWVudF0pICogLTE7XG4gICAgICB2YXIgdGh1bWJDbGlja1Bvc2l0aW9uID0gdGhpcy4kcmVmcy50aHVtYlt0aGlzLmJhci5vZmZzZXRdIC0gcHJldlBhZ2U7XG4gICAgICB2YXIgdGh1bWJQb3NpdGlvblBlcmNlbnRhZ2UgPSAob2Zmc2V0IC0gdGh1bWJDbGlja1Bvc2l0aW9uKSAqIDEwMCAvIHRoaXMuJGVsW3RoaXMuYmFyLm9mZnNldF07XG5cbiAgICAgIHRoaXMud3JhcFt0aGlzLmJhci5zY3JvbGxdID0gdGh1bWJQb3NpdGlvblBlcmNlbnRhZ2UgKiB0aGlzLndyYXBbdGhpcy5iYXIuc2Nyb2xsU2l6ZV0gLyAxMDA7XG4gICAgfSxcbiAgICBtb3VzZVVwRG9jdW1lbnRIYW5kbGVyOiBmdW5jdGlvbiBtb3VzZVVwRG9jdW1lbnRIYW5kbGVyKGUpIHtcbiAgICAgIHRoaXMuY3Vyc29yRG93biA9IGZhbHNlO1xuICAgICAgdGhpc1t0aGlzLmJhci5heGlzXSA9IDA7XG4gICAgICBPYmplY3QoZG9tX1tcIm9mZlwiXSkoZG9jdW1lbnQsICdtb3VzZW1vdmUnLCB0aGlzLm1vdXNlTW92ZURvY3VtZW50SGFuZGxlcik7XG4gICAgICBkb2N1bWVudC5vbnNlbGVjdHN0YXJ0ID0gbnVsbDtcbiAgICB9XG4gIH0sXG5cbiAgZGVzdHJveWVkOiBmdW5jdGlvbiBkZXN0cm95ZWQoKSB7XG4gICAgT2JqZWN0KGRvbV9bXCJvZmZcIl0pKGRvY3VtZW50LCAnbW91c2V1cCcsIHRoaXMubW91c2VVcERvY3VtZW50SGFuZGxlcik7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9zY3JvbGxiYXIvc3JjL21haW4uanNcbi8vIHJlZmVyZW5jZSBodHRwczovL2dpdGh1Yi5jb20vbm9lbGRlbGdhZG8vZ2VtaW5pLXNjcm9sbGJhci9ibG9iL21hc3Rlci9pbmRleC5qc1xuXG5cblxuXG5cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNjcm9sbGJhcl9zcmNfbWFpbiA9ICh7XG4gIG5hbWU6ICdFbFNjcm9sbGJhcicsXG5cbiAgY29tcG9uZW50czogeyBCYXI6IHNyY19iYXIgfSxcblxuICBwcm9wczoge1xuICAgIG5hdGl2ZTogQm9vbGVhbixcbiAgICB3cmFwU3R5bGU6IHt9LFxuICAgIHdyYXBDbGFzczoge30sXG4gICAgdmlld0NsYXNzOiB7fSxcbiAgICB2aWV3U3R5bGU6IHt9LFxuICAgIG5vcmVzaXplOiBCb29sZWFuLCAvLyDlpoLmnpwgY29udGFpbmVyIOWwuuWvuOS4jeS8muWPkeeUn+WPmOWMlu+8jOacgOWlveiuvue9ruWug+WPr+S7peS8mOWMluaAp+iDvVxuICAgIHRhZzoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2RpdidcbiAgICB9XG4gIH0sXG5cbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2l6ZVdpZHRoOiAnMCcsXG4gICAgICBzaXplSGVpZ2h0OiAnMCcsXG4gICAgICBtb3ZlWDogMCxcbiAgICAgIG1vdmVZOiAwXG4gICAgfTtcbiAgfSxcblxuXG4gIGNvbXB1dGVkOiB7XG4gICAgd3JhcDogZnVuY3Rpb24gd3JhcCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyZWZzLndyYXA7XG4gICAgfVxuICB9LFxuXG4gIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKGgpIHtcbiAgICB2YXIgZ3V0dGVyID0gc2Nyb2xsYmFyX3dpZHRoX2RlZmF1bHQoKSgpO1xuICAgIHZhciBzdHlsZSA9IHRoaXMud3JhcFN0eWxlO1xuXG4gICAgaWYgKGd1dHRlcikge1xuICAgICAgdmFyIGd1dHRlcldpdGggPSAnLScgKyBndXR0ZXIgKyAncHgnO1xuICAgICAgdmFyIGd1dHRlclN0eWxlID0gJ21hcmdpbi1ib3R0b206ICcgKyBndXR0ZXJXaXRoICsgJzsgbWFyZ2luLXJpZ2h0OiAnICsgZ3V0dGVyV2l0aCArICc7JztcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy53cmFwU3R5bGUpKSB7XG4gICAgICAgIHN0eWxlID0gT2JqZWN0KHV0aWxfW1widG9PYmplY3RcIl0pKHRoaXMud3JhcFN0eWxlKTtcbiAgICAgICAgc3R5bGUubWFyZ2luUmlnaHQgPSBzdHlsZS5tYXJnaW5Cb3R0b20gPSBndXR0ZXJXaXRoO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy53cmFwU3R5bGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHN0eWxlICs9IGd1dHRlclN0eWxlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3R5bGUgPSBndXR0ZXJTdHlsZTtcbiAgICAgIH1cbiAgICB9XG4gICAgdmFyIHZpZXcgPSBoKHRoaXMudGFnLCB7XG4gICAgICBjbGFzczogWydlbC1zY3JvbGxiYXJfX3ZpZXcnLCB0aGlzLnZpZXdDbGFzc10sXG4gICAgICBzdHlsZTogdGhpcy52aWV3U3R5bGUsXG4gICAgICByZWY6ICdyZXNpemUnXG4gICAgfSwgdGhpcy4kc2xvdHMuZGVmYXVsdCk7XG4gICAgdmFyIHdyYXAgPSBoKFxuICAgICAgJ2RpdicsXG4gICAgICB7XG4gICAgICAgIHJlZjogJ3dyYXAnLFxuICAgICAgICBzdHlsZTogc3R5bGUsXG4gICAgICAgIG9uOiB7XG4gICAgICAgICAgJ3Njcm9sbCc6IHRoaXMuaGFuZGxlU2Nyb2xsXG4gICAgICAgIH0sXG5cbiAgICAgICAgJ2NsYXNzJzogW3RoaXMud3JhcENsYXNzLCAnZWwtc2Nyb2xsYmFyX193cmFwJywgZ3V0dGVyID8gJycgOiAnZWwtc2Nyb2xsYmFyX193cmFwLS1oaWRkZW4tZGVmYXVsdCddIH0sXG4gICAgICBbW3ZpZXddXVxuICAgICk7XG4gICAgdmFyIG5vZGVzID0gdm9pZCAwO1xuXG4gICAgaWYgKCF0aGlzLm5hdGl2ZSkge1xuICAgICAgbm9kZXMgPSBbd3JhcCwgaChzcmNfYmFyLCB7XG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgbW92ZTogdGhpcy5tb3ZlWCxcbiAgICAgICAgICBzaXplOiB0aGlzLnNpemVXaWR0aCB9XG4gICAgICB9KSwgaChzcmNfYmFyLCB7XG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgdmVydGljYWw6IHRydWUsXG4gICAgICAgICAgbW92ZTogdGhpcy5tb3ZlWSxcbiAgICAgICAgICBzaXplOiB0aGlzLnNpemVIZWlnaHQgfVxuICAgICAgfSldO1xuICAgIH0gZWxzZSB7XG4gICAgICBub2RlcyA9IFtoKFxuICAgICAgICAnZGl2JyxcbiAgICAgICAge1xuICAgICAgICAgIHJlZjogJ3dyYXAnLFxuICAgICAgICAgICdjbGFzcyc6IFt0aGlzLndyYXBDbGFzcywgJ2VsLXNjcm9sbGJhcl9fd3JhcCddLFxuICAgICAgICAgIHN0eWxlOiBzdHlsZSB9LFxuICAgICAgICBbW3ZpZXddXVxuICAgICAgKV07XG4gICAgfVxuICAgIHJldHVybiBoKCdkaXYnLCB7IGNsYXNzOiAnZWwtc2Nyb2xsYmFyJyB9LCBub2Rlcyk7XG4gIH0sXG5cblxuICBtZXRob2RzOiB7XG4gICAgaGFuZGxlU2Nyb2xsOiBmdW5jdGlvbiBoYW5kbGVTY3JvbGwoKSB7XG4gICAgICB2YXIgd3JhcCA9IHRoaXMud3JhcDtcblxuICAgICAgdGhpcy5tb3ZlWSA9IHdyYXAuc2Nyb2xsVG9wICogMTAwIC8gd3JhcC5jbGllbnRIZWlnaHQ7XG4gICAgICB0aGlzLm1vdmVYID0gd3JhcC5zY3JvbGxMZWZ0ICogMTAwIC8gd3JhcC5jbGllbnRXaWR0aDtcbiAgICB9LFxuICAgIHVwZGF0ZTogZnVuY3Rpb24gdXBkYXRlKCkge1xuICAgICAgdmFyIGhlaWdodFBlcmNlbnRhZ2UgPSB2b2lkIDAsXG4gICAgICAgICAgd2lkdGhQZXJjZW50YWdlID0gdm9pZCAwO1xuICAgICAgdmFyIHdyYXAgPSB0aGlzLndyYXA7XG4gICAgICBpZiAoIXdyYXApIHJldHVybjtcblxuICAgICAgaGVpZ2h0UGVyY2VudGFnZSA9IHdyYXAuY2xpZW50SGVpZ2h0ICogMTAwIC8gd3JhcC5zY3JvbGxIZWlnaHQ7XG4gICAgICB3aWR0aFBlcmNlbnRhZ2UgPSB3cmFwLmNsaWVudFdpZHRoICogMTAwIC8gd3JhcC5zY3JvbGxXaWR0aDtcblxuICAgICAgdGhpcy5zaXplSGVpZ2h0ID0gaGVpZ2h0UGVyY2VudGFnZSA8IDEwMCA/IGhlaWdodFBlcmNlbnRhZ2UgKyAnJScgOiAnJztcbiAgICAgIHRoaXMuc2l6ZVdpZHRoID0gd2lkdGhQZXJjZW50YWdlIDwgMTAwID8gd2lkdGhQZXJjZW50YWdlICsgJyUnIDogJyc7XG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7XG4gICAgaWYgKHRoaXMubmF0aXZlKSByZXR1cm47XG4gICAgdGhpcy4kbmV4dFRpY2sodGhpcy51cGRhdGUpO1xuICAgICF0aGlzLm5vcmVzaXplICYmIE9iamVjdChyZXNpemVfZXZlbnRfW1wiYWRkUmVzaXplTGlzdGVuZXJcIl0pKHRoaXMuJHJlZnMucmVzaXplLCB0aGlzLnVwZGF0ZSk7XG4gIH0sXG4gIGJlZm9yZURlc3Ryb3k6IGZ1bmN0aW9uIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMubmF0aXZlKSByZXR1cm47XG4gICAgIXRoaXMubm9yZXNpemUgJiYgT2JqZWN0KHJlc2l6ZV9ldmVudF9bXCJyZW1vdmVSZXNpemVMaXN0ZW5lclwiXSkodGhpcy4kcmVmcy5yZXNpemUsIHRoaXMudXBkYXRlKTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3Njcm9sbGJhci9pbmRleC5qc1xuXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5zY3JvbGxiYXJfc3JjX21haW4uaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcbiAgVnVlLmNvbXBvbmVudChzY3JvbGxiYXJfc3JjX21haW4ubmFtZSwgc2Nyb2xsYmFyX3NyY19tYWluKTtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNjcm9sbGJhciA9IChzY3JvbGxiYXJfc3JjX21haW4pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9jYXJvdXNlbC9zcmMvaXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MTgwMWFlMTkmXG52YXIgaXRlbXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzE4MDFhZTE5X3JlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHtcbiAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgdmFsdWU6IF92bS5yZWFkeSxcbiAgICAgICAgICBleHByZXNzaW9uOiBcInJlYWR5XCJcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWNhcm91c2VsX19pdGVtXCIsXG4gICAgICBjbGFzczoge1xuICAgICAgICBcImlzLWFjdGl2ZVwiOiBfdm0uYWN0aXZlLFxuICAgICAgICBcImVsLWNhcm91c2VsX19pdGVtLS1jYXJkXCI6IF92bS4kcGFyZW50LnR5cGUgPT09IFwiY2FyZFwiLFxuICAgICAgICBcImlzLWluLXN0YWdlXCI6IF92bS5pblN0YWdlLFxuICAgICAgICBcImlzLWhvdmVyXCI6IF92bS5ob3ZlcixcbiAgICAgICAgXCJpcy1hbmltYXRpbmdcIjogX3ZtLmFuaW1hdGluZ1xuICAgICAgfSxcbiAgICAgIHN0eWxlOiBfdm0uaXRlbVN0eWxlLFxuICAgICAgb246IHsgY2xpY2s6IF92bS5oYW5kbGVJdGVtQ2xpY2sgfVxuICAgIH0sXG4gICAgW1xuICAgICAgX3ZtLiRwYXJlbnQudHlwZSA9PT0gXCJjYXJkXCJcbiAgICAgICAgPyBfYyhcImRpdlwiLCB7XG4gICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiAhX3ZtLmFjdGl2ZSxcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcIiFhY3RpdmVcIlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtY2Fyb3VzZWxfX21hc2tcIlxuICAgICAgICAgIH0pXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfdm0uX3QoXCJkZWZhdWx0XCIpXG4gICAgXSxcbiAgICAyXG4gIClcbn1cbnZhciBpdGVtdnVlX3R5cGVfdGVtcGxhdGVfaWRfMTgwMWFlMTlfc3RhdGljUmVuZGVyRm5zID0gW11cbml0ZW12dWVfdHlwZV90ZW1wbGF0ZV9pZF8xODAxYWUxOV9yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2Nhcm91c2VsL3NyYy9pdGVtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xODAxYWUxOSZcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvY2Fyb3VzZWwvc3JjL2l0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuXG52YXIgQ0FSRF9TQ0FMRSA9IDAuODM7XG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBpdGVtdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbmFtZTogJ0VsQ2Fyb3VzZWxJdGVtJyxcblxuICBwcm9wczoge1xuICAgIG5hbWU6IFN0cmluZyxcbiAgICBsYWJlbDoge1xuICAgICAgdHlwZTogW1N0cmluZywgTnVtYmVyXSxcbiAgICAgIGRlZmF1bHQ6ICcnXG4gICAgfVxuICB9LFxuXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGhvdmVyOiBmYWxzZSxcbiAgICAgIHRyYW5zbGF0ZTogMCxcbiAgICAgIHNjYWxlOiAxLFxuICAgICAgYWN0aXZlOiBmYWxzZSxcbiAgICAgIHJlYWR5OiBmYWxzZSxcbiAgICAgIGluU3RhZ2U6IGZhbHNlLFxuICAgICAgYW5pbWF0aW5nOiBmYWxzZVxuICAgIH07XG4gIH0sXG5cblxuICBtZXRob2RzOiB7XG4gICAgcHJvY2Vzc0luZGV4OiBmdW5jdGlvbiBwcm9jZXNzSW5kZXgoaW5kZXgsIGFjdGl2ZUluZGV4LCBsZW5ndGgpIHtcbiAgICAgIGlmIChhY3RpdmVJbmRleCA9PT0gMCAmJiBpbmRleCA9PT0gbGVuZ3RoIC0gMSkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9IGVsc2UgaWYgKGFjdGl2ZUluZGV4ID09PSBsZW5ndGggLSAxICYmIGluZGV4ID09PSAwKSB7XG4gICAgICAgIHJldHVybiBsZW5ndGg7XG4gICAgICB9IGVsc2UgaWYgKGluZGV4IDwgYWN0aXZlSW5kZXggLSAxICYmIGFjdGl2ZUluZGV4IC0gaW5kZXggPj0gbGVuZ3RoIC8gMikge1xuICAgICAgICByZXR1cm4gbGVuZ3RoICsgMTtcbiAgICAgIH0gZWxzZSBpZiAoaW5kZXggPiBhY3RpdmVJbmRleCArIDEgJiYgaW5kZXggLSBhY3RpdmVJbmRleCA+PSBsZW5ndGggLyAyKSB7XG4gICAgICAgIHJldHVybiAtMjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpbmRleDtcbiAgICB9LFxuICAgIGNhbGNDYXJkVHJhbnNsYXRlOiBmdW5jdGlvbiBjYWxjQ2FyZFRyYW5zbGF0ZShpbmRleCwgYWN0aXZlSW5kZXgpIHtcbiAgICAgIHZhciBwYXJlbnRXaWR0aCA9IHRoaXMuJHBhcmVudC4kZWwub2Zmc2V0V2lkdGg7XG4gICAgICBpZiAodGhpcy5pblN0YWdlKSB7XG4gICAgICAgIHJldHVybiBwYXJlbnRXaWR0aCAqICgoMiAtIENBUkRfU0NBTEUpICogKGluZGV4IC0gYWN0aXZlSW5kZXgpICsgMSkgLyA0O1xuICAgICAgfSBlbHNlIGlmIChpbmRleCA8IGFjdGl2ZUluZGV4KSB7XG4gICAgICAgIHJldHVybiAtKDEgKyBDQVJEX1NDQUxFKSAqIHBhcmVudFdpZHRoIC8gNDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAoMyArIENBUkRfU0NBTEUpICogcGFyZW50V2lkdGggLyA0O1xuICAgICAgfVxuICAgIH0sXG4gICAgY2FsY1RyYW5zbGF0ZTogZnVuY3Rpb24gY2FsY1RyYW5zbGF0ZShpbmRleCwgYWN0aXZlSW5kZXgsIGlzVmVydGljYWwpIHtcbiAgICAgIHZhciBkaXN0YW5jZSA9IHRoaXMuJHBhcmVudC4kZWxbaXNWZXJ0aWNhbCA/ICdvZmZzZXRIZWlnaHQnIDogJ29mZnNldFdpZHRoJ107XG4gICAgICByZXR1cm4gZGlzdGFuY2UgKiAoaW5kZXggLSBhY3RpdmVJbmRleCk7XG4gICAgfSxcbiAgICB0cmFuc2xhdGVJdGVtOiBmdW5jdGlvbiB0cmFuc2xhdGVJdGVtKGluZGV4LCBhY3RpdmVJbmRleCwgb2xkSW5kZXgpIHtcbiAgICAgIHZhciBwYXJlbnRUeXBlID0gdGhpcy4kcGFyZW50LnR5cGU7XG4gICAgICB2YXIgcGFyZW50RGlyZWN0aW9uID0gdGhpcy5wYXJlbnREaXJlY3Rpb247XG4gICAgICB2YXIgbGVuZ3RoID0gdGhpcy4kcGFyZW50Lml0ZW1zLmxlbmd0aDtcbiAgICAgIGlmIChwYXJlbnRUeXBlICE9PSAnY2FyZCcgJiYgb2xkSW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmFuaW1hdGluZyA9IGluZGV4ID09PSBhY3RpdmVJbmRleCB8fCBpbmRleCA9PT0gb2xkSW5kZXg7XG4gICAgICB9XG4gICAgICBpZiAoaW5kZXggIT09IGFjdGl2ZUluZGV4ICYmIGxlbmd0aCA+IDIgJiYgdGhpcy4kcGFyZW50Lmxvb3ApIHtcbiAgICAgICAgaW5kZXggPSB0aGlzLnByb2Nlc3NJbmRleChpbmRleCwgYWN0aXZlSW5kZXgsIGxlbmd0aCk7XG4gICAgICB9XG4gICAgICBpZiAocGFyZW50VHlwZSA9PT0gJ2NhcmQnKSB7XG4gICAgICAgIGlmIChwYXJlbnREaXJlY3Rpb24gPT09ICd2ZXJ0aWNhbCcpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ1tFbGVtZW50IFdhcm5dW0Nhcm91c2VsXXZlcnRpY2FsIGRpcmVjdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGluIGNhcmQgbW9kZScpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW5TdGFnZSA9IE1hdGgucm91bmQoTWF0aC5hYnMoaW5kZXggLSBhY3RpdmVJbmRleCkpIDw9IDE7XG4gICAgICAgIHRoaXMuYWN0aXZlID0gaW5kZXggPT09IGFjdGl2ZUluZGV4O1xuICAgICAgICB0aGlzLnRyYW5zbGF0ZSA9IHRoaXMuY2FsY0NhcmRUcmFuc2xhdGUoaW5kZXgsIGFjdGl2ZUluZGV4KTtcbiAgICAgICAgdGhpcy5zY2FsZSA9IHRoaXMuYWN0aXZlID8gMSA6IENBUkRfU0NBTEU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmFjdGl2ZSA9IGluZGV4ID09PSBhY3RpdmVJbmRleDtcbiAgICAgICAgdmFyIGlzVmVydGljYWwgPSBwYXJlbnREaXJlY3Rpb24gPT09ICd2ZXJ0aWNhbCc7XG4gICAgICAgIHRoaXMudHJhbnNsYXRlID0gdGhpcy5jYWxjVHJhbnNsYXRlKGluZGV4LCBhY3RpdmVJbmRleCwgaXNWZXJ0aWNhbCk7XG4gICAgICAgIHRoaXMuc2NhbGUgPSAxO1xuICAgICAgfVxuICAgICAgdGhpcy5yZWFkeSA9IHRydWU7XG4gICAgfSxcbiAgICBoYW5kbGVJdGVtQ2xpY2s6IGZ1bmN0aW9uIGhhbmRsZUl0ZW1DbGljaygpIHtcbiAgICAgIHZhciBwYXJlbnQgPSB0aGlzLiRwYXJlbnQ7XG4gICAgICBpZiAocGFyZW50ICYmIHBhcmVudC50eXBlID09PSAnY2FyZCcpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gcGFyZW50Lml0ZW1zLmluZGV4T2YodGhpcyk7XG4gICAgICAgIHBhcmVudC5zZXRBY3RpdmVJdGVtKGluZGV4KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBwYXJlbnREaXJlY3Rpb246IGZ1bmN0aW9uIHBhcmVudERpcmVjdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLiRwYXJlbnQuZGlyZWN0aW9uO1xuICAgIH0sXG4gICAgaXRlbVN0eWxlOiBmdW5jdGlvbiBpdGVtU3R5bGUoKSB7XG4gICAgICB2YXIgdHJhbnNsYXRlVHlwZSA9IHRoaXMucGFyZW50RGlyZWN0aW9uID09PSAndmVydGljYWwnID8gJ3RyYW5zbGF0ZVknIDogJ3RyYW5zbGF0ZVgnO1xuICAgICAgdmFyIHZhbHVlID0gdHJhbnNsYXRlVHlwZSArICcoJyArIHRoaXMudHJhbnNsYXRlICsgJ3B4KSBzY2FsZSgnICsgdGhpcy5zY2FsZSArICcpJztcbiAgICAgIHZhciBzdHlsZSA9IHtcbiAgICAgICAgdHJhbnNmb3JtOiB2YWx1ZVxuICAgICAgfTtcbiAgICAgIHJldHVybiBPYmplY3QodXRpbF9bXCJhdXRvcHJlZml4ZXJcIl0pKHN0eWxlKTtcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZDogZnVuY3Rpb24gY3JlYXRlZCgpIHtcbiAgICB0aGlzLiRwYXJlbnQgJiYgdGhpcy4kcGFyZW50LnVwZGF0ZUl0ZW1zKCk7XG4gIH0sXG4gIGRlc3Ryb3llZDogZnVuY3Rpb24gZGVzdHJveWVkKCkge1xuICAgIHRoaXMuJHBhcmVudCAmJiB0aGlzLiRwYXJlbnQudXBkYXRlSXRlbXMoKTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2Nhcm91c2VsL3NyYy9pdGVtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfaXRlbXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChpdGVtdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2Nhcm91c2VsL3NyYy9pdGVtLnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGl0ZW1fY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBzcmNfaXRlbXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgaXRlbXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzE4MDFhZTE5X3JlbmRlcixcbiAgaXRlbXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzE4MDFhZTE5X3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgaXRlbV9hcGk7IH1cbml0ZW1fY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy9jYXJvdXNlbC9zcmMvaXRlbS52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX2l0ZW0gPSAoaXRlbV9jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2Nhcm91c2VsLWl0ZW0vaW5kZXguanNcblxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuc3JjX2l0ZW0uaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcbiAgVnVlLmNvbXBvbmVudChzcmNfaXRlbS5uYW1lLCBzcmNfaXRlbSk7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBjYXJvdXNlbF9pdGVtID0gKHNyY19pdGVtKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvY29sbGFwc2Uvc3JjL2NvbGxhcHNlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00NjFkNTdmNCZcbnZhciBjb2xsYXBzZXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzQ2MWQ1N2Y0X3JlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHtcbiAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWNvbGxhcHNlXCIsXG4gICAgICBhdHRyczogeyByb2xlOiBcInRhYmxpc3RcIiwgXCJhcmlhLW11bHRpc2VsZWN0YWJsZVwiOiBcInRydWVcIiB9XG4gICAgfSxcbiAgICBbX3ZtLl90KFwiZGVmYXVsdFwiKV0sXG4gICAgMlxuICApXG59XG52YXIgY29sbGFwc2V2dWVfdHlwZV90ZW1wbGF0ZV9pZF80NjFkNTdmNF9zdGF0aWNSZW5kZXJGbnMgPSBbXVxuY29sbGFwc2V2dWVfdHlwZV90ZW1wbGF0ZV9pZF80NjFkNTdmNF9yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2NvbGxhcHNlL3NyYy9jb2xsYXBzZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NDYxZDU3ZjQmXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2NvbGxhcHNlL3NyYy9jb2xsYXBzZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgY29sbGFwc2V2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBuYW1lOiAnRWxDb2xsYXBzZScsXG5cbiAgY29tcG9uZW50TmFtZTogJ0VsQ29sbGFwc2UnLFxuXG4gIHByb3BzOiB7XG4gICAgYWNjb3JkaW9uOiBCb29sZWFuLFxuICAgIHZhbHVlOiB7XG4gICAgICB0eXBlOiBbQXJyYXksIFN0cmluZywgTnVtYmVyXSxcbiAgICAgIGRlZmF1bHQ6IGZ1bmN0aW9uIF9kZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFjdGl2ZU5hbWVzOiBbXS5jb25jYXQodGhpcy52YWx1ZSlcbiAgICB9O1xuICB9LFxuICBwcm92aWRlOiBmdW5jdGlvbiBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjb2xsYXBzZTogdGhpc1xuICAgIH07XG4gIH0sXG5cblxuICB3YXRjaDoge1xuICAgIHZhbHVlOiBmdW5jdGlvbiB2YWx1ZShfdmFsdWUpIHtcbiAgICAgIHRoaXMuYWN0aXZlTmFtZXMgPSBbXS5jb25jYXQoX3ZhbHVlKTtcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHNldEFjdGl2ZU5hbWVzOiBmdW5jdGlvbiBzZXRBY3RpdmVOYW1lcyhhY3RpdmVOYW1lcykge1xuICAgICAgYWN0aXZlTmFtZXMgPSBbXS5jb25jYXQoYWN0aXZlTmFtZXMpO1xuICAgICAgdmFyIHZhbHVlID0gdGhpcy5hY2NvcmRpb24gPyBhY3RpdmVOYW1lc1swXSA6IGFjdGl2ZU5hbWVzO1xuICAgICAgdGhpcy5hY3RpdmVOYW1lcyA9IGFjdGl2ZU5hbWVzO1xuICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCB2YWx1ZSk7XG4gICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCB2YWx1ZSk7XG4gICAgfSxcbiAgICBoYW5kbGVJdGVtQ2xpY2s6IGZ1bmN0aW9uIGhhbmRsZUl0ZW1DbGljayhpdGVtKSB7XG4gICAgICBpZiAodGhpcy5hY2NvcmRpb24pIHtcbiAgICAgICAgdGhpcy5zZXRBY3RpdmVOYW1lcygodGhpcy5hY3RpdmVOYW1lc1swXSB8fCB0aGlzLmFjdGl2ZU5hbWVzWzBdID09PSAwKSAmJiB0aGlzLmFjdGl2ZU5hbWVzWzBdID09PSBpdGVtLm5hbWUgPyAnJyA6IGl0ZW0ubmFtZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgYWN0aXZlTmFtZXMgPSB0aGlzLmFjdGl2ZU5hbWVzLnNsaWNlKDApO1xuICAgICAgICB2YXIgaW5kZXggPSBhY3RpdmVOYW1lcy5pbmRleE9mKGl0ZW0ubmFtZSk7XG5cbiAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICBhY3RpdmVOYW1lcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFjdGl2ZU5hbWVzLnB1c2goaXRlbS5uYW1lKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldEFjdGl2ZU5hbWVzKGFjdGl2ZU5hbWVzKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZDogZnVuY3Rpb24gY3JlYXRlZCgpIHtcbiAgICB0aGlzLiRvbignaXRlbS1jbGljaycsIHRoaXMuaGFuZGxlSXRlbUNsaWNrKTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2NvbGxhcHNlL3NyYy9jb2xsYXBzZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX2NvbGxhcHNldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKGNvbGxhcHNldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2NvbGxhcHNlL3NyYy9jb2xsYXBzZS52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBjb2xsYXBzZV9jb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIHNyY19jb2xsYXBzZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgY29sbGFwc2V2dWVfdHlwZV90ZW1wbGF0ZV9pZF80NjFkNTdmNF9yZW5kZXIsXG4gIGNvbGxhcHNldnVlX3R5cGVfdGVtcGxhdGVfaWRfNDYxZDU3ZjRfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBjb2xsYXBzZV9hcGk7IH1cbmNvbGxhcHNlX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvY29sbGFwc2Uvc3JjL2NvbGxhcHNlLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBjb2xsYXBzZSA9IChjb2xsYXBzZV9jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2NvbGxhcHNlL2luZGV4LmpzXG5cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmNvbGxhcHNlLmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG4gIFZ1ZS5jb21wb25lbnQoY29sbGFwc2UubmFtZSwgY29sbGFwc2UpO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcGFja2FnZXNfY29sbGFwc2UgPSAoY29sbGFwc2UpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9jb2xsYXBzZS9zcmMvY29sbGFwc2UtaXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MmQwNWZhYWMmXG52YXIgY29sbGFwc2VfaXRlbXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzJkMDVmYWFjX3JlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHtcbiAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWNvbGxhcHNlLWl0ZW1cIixcbiAgICAgIGNsYXNzOiB7IFwiaXMtYWN0aXZlXCI6IF92bS5pc0FjdGl2ZSwgXCJpcy1kaXNhYmxlZFwiOiBfdm0uZGlzYWJsZWQgfVxuICAgIH0sXG4gICAgW1xuICAgICAgX2MoXG4gICAgICAgIFwiZGl2XCIsXG4gICAgICAgIHtcbiAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgcm9sZTogXCJ0YWJcIixcbiAgICAgICAgICAgIFwiYXJpYS1leHBhbmRlZFwiOiBfdm0uaXNBY3RpdmUsXG4gICAgICAgICAgICBcImFyaWEtY29udHJvbHNcIjogXCJlbC1jb2xsYXBzZS1jb250ZW50LVwiICsgX3ZtLmlkLFxuICAgICAgICAgICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6IFwiZWwtY29sbGFwc2UtY29udGVudC1cIiArIF92bS5pZFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtY29sbGFwc2UtaXRlbV9faGVhZGVyXCIsXG4gICAgICAgICAgICAgIGNsYXNzOiB7XG4gICAgICAgICAgICAgICAgZm9jdXNpbmc6IF92bS5mb2N1c2luZyxcbiAgICAgICAgICAgICAgICBcImlzLWFjdGl2ZVwiOiBfdm0uaXNBY3RpdmVcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICByb2xlOiBcImJ1dHRvblwiLFxuICAgICAgICAgICAgICAgIGlkOiBcImVsLWNvbGxhcHNlLWhlYWQtXCIgKyBfdm0uaWQsXG4gICAgICAgICAgICAgICAgdGFiaW5kZXg6IF92bS5kaXNhYmxlZCA/IHVuZGVmaW5lZCA6IDBcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICBjbGljazogX3ZtLmhhbmRsZUhlYWRlckNsaWNrLFxuICAgICAgICAgICAgICAgIGtleXVwOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgIShcImJ1dHRvblwiIGluICRldmVudCkgJiZcbiAgICAgICAgICAgICAgICAgICAgX3ZtLl9rKCRldmVudC5rZXlDb2RlLCBcInNwYWNlXCIsIDMyLCAkZXZlbnQua2V5LCBbXG4gICAgICAgICAgICAgICAgICAgICAgXCIgXCIsXG4gICAgICAgICAgICAgICAgICAgICAgXCJTcGFjZWJhclwiXG4gICAgICAgICAgICAgICAgICAgIF0pICYmXG4gICAgICAgICAgICAgICAgICAgIF92bS5faygkZXZlbnQua2V5Q29kZSwgXCJlbnRlclwiLCAxMywgJGV2ZW50LmtleSwgXCJFbnRlclwiKVxuICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0uaGFuZGxlRW50ZXJDbGljaygkZXZlbnQpXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBmb2N1czogX3ZtLmhhbmRsZUZvY3VzLFxuICAgICAgICAgICAgICAgIGJsdXI6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgX3ZtLmZvY3VzaW5nID0gZmFsc2VcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF92bS5fdChcInRpdGxlXCIsIFtfdm0uX3YoX3ZtLl9zKF92bS50aXRsZSkpXSksXG4gICAgICAgICAgICAgIF9jKFwiaVwiLCB7XG4gICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtY29sbGFwc2UtaXRlbV9fYXJyb3cgZWwtaWNvbi1hcnJvdy1yaWdodFwiLFxuICAgICAgICAgICAgICAgIGNsYXNzOiB7IFwiaXMtYWN0aXZlXCI6IF92bS5pc0FjdGl2ZSB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgMlxuICAgICAgICAgIClcbiAgICAgICAgXVxuICAgICAgKSxcbiAgICAgIF9jKFwiZWwtY29sbGFwc2UtdHJhbnNpdGlvblwiLCBbXG4gICAgICAgIF9jKFxuICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLmlzQWN0aXZlLFxuICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwiaXNBY3RpdmVcIlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtY29sbGFwc2UtaXRlbV9fd3JhcFwiLFxuICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgcm9sZTogXCJ0YWJwYW5lbFwiLFxuICAgICAgICAgICAgICBcImFyaWEtaGlkZGVuXCI6ICFfdm0uaXNBY3RpdmUsXG4gICAgICAgICAgICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IFwiZWwtY29sbGFwc2UtaGVhZC1cIiArIF92bS5pZCxcbiAgICAgICAgICAgICAgaWQ6IFwiZWwtY29sbGFwc2UtY29udGVudC1cIiArIF92bS5pZFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgW1xuICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwiZWwtY29sbGFwc2UtaXRlbV9fY29udGVudFwiIH0sXG4gICAgICAgICAgICAgIFtfdm0uX3QoXCJkZWZhdWx0XCIpXSxcbiAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgKVxuICAgICAgICAgIF1cbiAgICAgICAgKVxuICAgICAgXSlcbiAgICBdLFxuICAgIDFcbiAgKVxufVxudmFyIGNvbGxhcHNlX2l0ZW12dWVfdHlwZV90ZW1wbGF0ZV9pZF8yZDA1ZmFhY19zdGF0aWNSZW5kZXJGbnMgPSBbXVxuY29sbGFwc2VfaXRlbXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzJkMDVmYWFjX3JlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY29sbGFwc2Uvc3JjL2NvbGxhcHNlLWl0ZW0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTJkMDVmYWFjJlxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9jb2xsYXBzZS9zcmMvY29sbGFwc2UtaXRlbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5cblxuXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGNvbGxhcHNlX2l0ZW12dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBuYW1lOiAnRWxDb2xsYXBzZUl0ZW0nLFxuXG4gIGNvbXBvbmVudE5hbWU6ICdFbENvbGxhcHNlSXRlbScsXG5cbiAgbWl4aW5zOiBbZW1pdHRlcl9kZWZhdWx0LmFdLFxuXG4gIGNvbXBvbmVudHM6IHsgRWxDb2xsYXBzZVRyYW5zaXRpb246IGNvbGxhcHNlX3RyYW5zaXRpb25fZGVmYXVsdC5hIH0sXG5cbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29udGVudFdyYXBTdHlsZToge1xuICAgICAgICBoZWlnaHQ6ICdhdXRvJyxcbiAgICAgICAgZGlzcGxheTogJ2Jsb2NrJ1xuICAgICAgfSxcbiAgICAgIGNvbnRlbnRIZWlnaHQ6IDAsXG4gICAgICBmb2N1c2luZzogZmFsc2UsXG4gICAgICBpc0NsaWNrOiBmYWxzZSxcbiAgICAgIGlkOiBPYmplY3QodXRpbF9bXCJnZW5lcmF0ZUlkXCJdKSgpXG4gICAgfTtcbiAgfSxcblxuXG4gIGluamVjdDogWydjb2xsYXBzZSddLFxuXG4gIHByb3BzOiB7XG4gICAgdGl0bGU6IFN0cmluZyxcbiAgICBuYW1lOiB7XG4gICAgICB0eXBlOiBbU3RyaW5nLCBOdW1iZXJdLFxuICAgICAgZGVmYXVsdDogZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl91aWQ7XG4gICAgICB9XG4gICAgfSxcbiAgICBkaXNhYmxlZDogQm9vbGVhblxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgaXNBY3RpdmU6IGZ1bmN0aW9uIGlzQWN0aXZlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29sbGFwc2UuYWN0aXZlTmFtZXMuaW5kZXhPZih0aGlzLm5hbWUpID4gLTE7XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBoYW5kbGVGb2N1czogZnVuY3Rpb24gaGFuZGxlRm9jdXMoKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFfdGhpcy5pc0NsaWNrKSB7XG4gICAgICAgICAgX3RoaXMuZm9jdXNpbmcgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIF90aGlzLmlzQ2xpY2sgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSwgNTApO1xuICAgIH0sXG4gICAgaGFuZGxlSGVhZGVyQ2xpY2s6IGZ1bmN0aW9uIGhhbmRsZUhlYWRlckNsaWNrKCkge1xuICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHJldHVybjtcbiAgICAgIHRoaXMuZGlzcGF0Y2goJ0VsQ29sbGFwc2UnLCAnaXRlbS1jbGljaycsIHRoaXMpO1xuICAgICAgdGhpcy5mb2N1c2luZyA9IGZhbHNlO1xuICAgICAgdGhpcy5pc0NsaWNrID0gdHJ1ZTtcbiAgICB9LFxuICAgIGhhbmRsZUVudGVyQ2xpY2s6IGZ1bmN0aW9uIGhhbmRsZUVudGVyQ2xpY2soKSB7XG4gICAgICB0aGlzLmRpc3BhdGNoKCdFbENvbGxhcHNlJywgJ2l0ZW0tY2xpY2snLCB0aGlzKTtcbiAgICB9XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jb2xsYXBzZS9zcmMvY29sbGFwc2UtaXRlbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX2NvbGxhcHNlX2l0ZW12dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoY29sbGFwc2VfaXRlbXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jb2xsYXBzZS9zcmMvY29sbGFwc2UtaXRlbS52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBjb2xsYXBzZV9pdGVtX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgc3JjX2NvbGxhcHNlX2l0ZW12dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIGNvbGxhcHNlX2l0ZW12dWVfdHlwZV90ZW1wbGF0ZV9pZF8yZDA1ZmFhY19yZW5kZXIsXG4gIGNvbGxhcHNlX2l0ZW12dWVfdHlwZV90ZW1wbGF0ZV9pZF8yZDA1ZmFhY19zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGNvbGxhcHNlX2l0ZW1fYXBpOyB9XG5jb2xsYXBzZV9pdGVtX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvY29sbGFwc2Uvc3JjL2NvbGxhcHNlLWl0ZW0udnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGNvbGxhcHNlX2l0ZW0gPSAoY29sbGFwc2VfaXRlbV9jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2NvbGxhcHNlLWl0ZW0vaW5kZXguanNcblxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuY29sbGFwc2VfaXRlbS5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuICBWdWUuY29tcG9uZW50KGNvbGxhcHNlX2l0ZW0ubmFtZSwgY29sbGFwc2VfaXRlbSk7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc19jb2xsYXBzZV9pdGVtID0gKGNvbGxhcHNlX2l0ZW0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9jYXNjYWRlci9zcmMvY2FzY2FkZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTAzMjUzN2E2JlxudmFyIGNhc2NhZGVydnVlX3R5cGVfdGVtcGxhdGVfaWRfMDMyNTM3YTZfcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAge1xuICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJjbGlja291dHNpZGVcIixcbiAgICAgICAgICByYXdOYW1lOiBcInYtY2xpY2tvdXRzaWRlXCIsXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIF92bS50b2dnbGVEcm9wRG93blZpc2libGUoZmFsc2UpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBleHByZXNzaW9uOiBcIigpID0+IHRvZ2dsZURyb3BEb3duVmlzaWJsZShmYWxzZSlcIlxuICAgICAgICB9XG4gICAgICBdLFxuICAgICAgcmVmOiBcInJlZmVyZW5jZVwiLFxuICAgICAgY2xhc3M6IFtcbiAgICAgICAgXCJlbC1jYXNjYWRlclwiLFxuICAgICAgICBfdm0ucmVhbFNpemUgJiYgXCJlbC1jYXNjYWRlci0tXCIgKyBfdm0ucmVhbFNpemUsXG4gICAgICAgIHsgXCJpcy1kaXNhYmxlZFwiOiBfdm0uaXNEaXNhYmxlZCB9XG4gICAgICBdLFxuICAgICAgb246IHtcbiAgICAgICAgbW91c2VlbnRlcjogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgX3ZtLmlucHV0SG92ZXIgPSB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIG1vdXNlbGVhdmU6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgIF92bS5pbnB1dEhvdmVyID0gZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiBfdm0udG9nZ2xlRHJvcERvd25WaXNpYmxlKF92bS5yZWFkb25seSA/IHVuZGVmaW5lZCA6IHRydWUpXG4gICAgICAgIH0sXG4gICAgICAgIGtleWRvd246IF92bS5oYW5kbGVLZXlEb3duXG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICBfYyhcbiAgICAgICAgXCJlbC1pbnB1dFwiLFxuICAgICAgICB7XG4gICAgICAgICAgcmVmOiBcImlucHV0XCIsXG4gICAgICAgICAgY2xhc3M6IHsgXCJpcy1mb2N1c1wiOiBfdm0uZHJvcERvd25WaXNpYmxlIH0sXG4gICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgIHNpemU6IF92bS5yZWFsU2l6ZSxcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBfdm0ucGxhY2Vob2xkZXIsXG4gICAgICAgICAgICByZWFkb25seTogX3ZtLnJlYWRvbmx5LFxuICAgICAgICAgICAgZGlzYWJsZWQ6IF92bS5pc0Rpc2FibGVkLFxuICAgICAgICAgICAgXCJ2YWxpZGF0ZS1ldmVudFwiOiBmYWxzZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgb246IHtcbiAgICAgICAgICAgIGZvY3VzOiBfdm0uaGFuZGxlRm9jdXMsXG4gICAgICAgICAgICBibHVyOiBfdm0uaGFuZGxlQmx1cixcbiAgICAgICAgICAgIGlucHV0OiBfdm0uaGFuZGxlSW5wdXRcbiAgICAgICAgICB9LFxuICAgICAgICAgIG1vZGVsOiB7XG4gICAgICAgICAgICB2YWx1ZTogX3ZtLm11bHRpcGxlID8gX3ZtLnByZXNlbnRUZXh0IDogX3ZtLmlucHV0VmFsdWUsXG4gICAgICAgICAgICBjYWxsYmFjazogZnVuY3Rpb24oJCR2KSB7XG4gICAgICAgICAgICAgIF92bS5tdWx0aXBsZSA/IF92bS5wcmVzZW50VGV4dCA6IChfdm0uaW5wdXRWYWx1ZSA9ICQkdilcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBleHByZXNzaW9uOiBcIm11bHRpcGxlID8gcHJlc2VudFRleHQgOiBpbnB1dFZhbHVlXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFtcbiAgICAgICAgICBfYyhcInRlbXBsYXRlXCIsIHsgc2xvdDogXCJzdWZmaXhcIiB9LCBbXG4gICAgICAgICAgICBfdm0uY2xlYXJCdG5WaXNpYmxlXG4gICAgICAgICAgICAgID8gX2MoXCJpXCIsIHtcbiAgICAgICAgICAgICAgICAgIGtleTogXCJjbGVhclwiLFxuICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtaW5wdXRfX2ljb24gZWwtaWNvbi1jaXJjbGUtY2xvc2VcIixcbiAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLmhhbmRsZUNsZWFyKCRldmVudClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIDogX2MoXCJpXCIsIHtcbiAgICAgICAgICAgICAgICAgIGtleTogXCJhcnJvdy1kb3duXCIsXG4gICAgICAgICAgICAgICAgICBjbGFzczogW1xuICAgICAgICAgICAgICAgICAgICBcImVsLWlucHV0X19pY29uXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiZWwtaWNvbi1hcnJvdy1kb3duXCIsXG4gICAgICAgICAgICAgICAgICAgIF92bS5kcm9wRG93blZpc2libGUgJiYgXCJpcy1yZXZlcnNlXCJcbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICAgICAgICAgICAgX3ZtLnRvZ2dsZURyb3BEb3duVmlzaWJsZSgpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgIF0pXG4gICAgICAgIF0sXG4gICAgICAgIDJcbiAgICAgICksXG4gICAgICBfdm0ubXVsdGlwbGVcbiAgICAgICAgPyBfYyhcbiAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiBcImVsLWNhc2NhZGVyX190YWdzXCIgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX3ZtLl9sKF92bS5wcmVzZW50VGFncywgZnVuY3Rpb24odGFnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9jKFxuICAgICAgICAgICAgICAgICAgXCJlbC10YWdcIixcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAga2V5OiB0YWcua2V5LFxuICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiaW5mb1wiLFxuICAgICAgICAgICAgICAgICAgICAgIHNpemU6IF92bS50YWdTaXplLFxuICAgICAgICAgICAgICAgICAgICAgIGhpdDogdGFnLmhpdFN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgIGNsb3NhYmxlOiB0YWcuY2xvc2FibGUsXG4gICAgICAgICAgICAgICAgICAgICAgXCJkaXNhYmxlLXRyYW5zaXRpb25zXCI6IFwiXCJcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICBjbG9zZTogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfdm0uZGVsZXRlVGFnKHRhZylcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBbX2MoXCJzcGFuXCIsIFtfdm0uX3YoX3ZtLl9zKHRhZy50ZXh0KSldKV1cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBfdm0uZmlsdGVyYWJsZSAmJiAhX3ZtLmlzRGlzYWJsZWRcbiAgICAgICAgICAgICAgICA/IF9jKFwiaW5wdXRcIiwge1xuICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJtb2RlbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LW1vZGVsLnRyaW1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0uaW5wdXRWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwiaW5wdXRWYWx1ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZpZXJzOiB7IHRyaW06IHRydWUgfVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtY2FzY2FkZXJfX3NlYXJjaC1pbnB1dFwiLFxuICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBfdm0ucHJlc2VudFRhZ3MubGVuZ3RoID8gXCJcIiA6IF92bS5wbGFjZWhvbGRlclxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBkb21Qcm9wczogeyB2YWx1ZTogX3ZtLmlucHV0VmFsdWUgfSxcbiAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICBpbnB1dDogW1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkZXZlbnQudGFyZ2V0LmNvbXBvc2luZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5pbnB1dFZhbHVlID0gJGV2ZW50LnRhcmdldC52YWx1ZS50cmltKClcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0uaGFuZGxlSW5wdXQoX3ZtLmlucHV0VmFsdWUsIGUpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS50b2dnbGVEcm9wRG93blZpc2libGUodHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIGtleWRvd246IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAhKFwiYnV0dG9uXCIgaW4gJGV2ZW50KSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX2soXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50LmtleUNvZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkZWxldGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbOCwgNDZdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudC5rZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW1wiQmFja3NwYWNlXCIsIFwiRGVsZXRlXCIsIFwiRGVsXCJdXG4gICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS5oYW5kbGVEZWxldGUoJGV2ZW50KVxuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgYmx1cjogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfdm0uJGZvcmNlVXBkYXRlKClcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIDJcbiAgICAgICAgICApXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfYyhcbiAgICAgICAgXCJ0cmFuc2l0aW9uXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBhdHRyczogeyBuYW1lOiBcImVsLXpvb20taW4tdG9wXCIgfSxcbiAgICAgICAgICBvbjogeyBcImFmdGVyLWxlYXZlXCI6IF92bS5oYW5kbGVEcm9wZG93bkxlYXZlIH1cbiAgICAgICAgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0uZHJvcERvd25WaXNpYmxlLFxuICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJkcm9wRG93blZpc2libGVcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgcmVmOiBcInBvcHBlclwiLFxuICAgICAgICAgICAgICBjbGFzczogW1wiZWwtcG9wcGVyXCIsIFwiZWwtY2FzY2FkZXJfX2Ryb3Bkb3duXCIsIF92bS5wb3BwZXJDbGFzc11cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF9jKFwiZWwtY2FzY2FkZXItcGFuZWxcIiwge1xuICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiAhX3ZtLmZpbHRlcmluZyxcbiAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCIhZmlsdGVyaW5nXCJcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHJlZjogXCJwYW5lbFwiLFxuICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICBvcHRpb25zOiBfdm0ub3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgIHByb3BzOiBfdm0uY29uZmlnLFxuICAgICAgICAgICAgICAgICAgYm9yZGVyOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgIFwicmVuZGVyLWxhYmVsXCI6IF92bS4kc2NvcGVkU2xvdHMuZGVmYXVsdFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgIFwiZXhwYW5kLWNoYW5nZVwiOiBfdm0uaGFuZGxlRXhwYW5kQ2hhbmdlLFxuICAgICAgICAgICAgICAgICAgY2xvc2U6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICBfdm0udG9nZ2xlRHJvcERvd25WaXNpYmxlKGZhbHNlKVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbW9kZWw6IHtcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0uY2hlY2tlZFZhbHVlLFxuICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IGZ1bmN0aW9uKCQkdikge1xuICAgICAgICAgICAgICAgICAgICBfdm0uY2hlY2tlZFZhbHVlID0gJCR2XG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJjaGVja2VkVmFsdWVcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIF92bS5maWx0ZXJhYmxlXG4gICAgICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICAgICAgXCJlbC1zY3JvbGxiYXJcIixcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0uZmlsdGVyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcImZpbHRlcmluZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICByZWY6IFwic3VnZ2VzdGlvblBhbmVsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtY2FzY2FkZXJfX3N1Z2dlc3Rpb24tcGFuZWxcIixcbiAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFnOiBcInVsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcInZpZXctY2xhc3NcIjogXCJlbC1jYXNjYWRlcl9fc3VnZ2VzdGlvbi1saXN0XCJcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZU9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXlkb3duOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS5oYW5kbGVTdWdnZXN0aW9uS2V5RG93bigkZXZlbnQpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgX3ZtLnN1Z2dlc3Rpb25zLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgICAgPyBfdm0uX2woX3ZtLnN1Z2dlc3Rpb25zLCBmdW5jdGlvbihpdGVtLCBpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibGlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBpdGVtLnVpZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImVsLWNhc2NhZGVyX19zdWdnZXN0aW9uLWl0ZW1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmNoZWNrZWQgJiYgXCJpcy1jaGVja2VkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgdGFiaW5kZXg6IC0xIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLmhhbmRsZVN1Z2dlc3Rpb25DbGljayhpbmRleClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFwic3BhblwiLCBbX3ZtLl92KF92bS5fcyhpdGVtLnRleHQpKV0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmNoZWNrZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IF9jKFwiaVwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLWljb24tY2hlY2tcIiB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICA6IF92bS5fdChcImVtcHR5XCIsIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibGlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwiZWwtY2FzY2FkZXJfX2VtcHR5LXRleHRcIiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW192bS5fdihfdm0uX3MoX3ZtLnQoXCJlbC5jYXNjYWRlci5ub01hdGNoXCIpKSldXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIDFcbiAgICAgICAgICApXG4gICAgICAgIF1cbiAgICAgIClcbiAgICBdLFxuICAgIDFcbiAgKVxufVxudmFyIGNhc2NhZGVydnVlX3R5cGVfdGVtcGxhdGVfaWRfMDMyNTM3YTZfc3RhdGljUmVuZGVyRm5zID0gW11cbmNhc2NhZGVydnVlX3R5cGVfdGVtcGxhdGVfaWRfMDMyNTM3YTZfcmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jYXNjYWRlci9zcmMvY2FzY2FkZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTAzMjUzN2E2JlxuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiZWxlbWVudC11aS9saWIvY2FzY2FkZXItcGFuZWxcIlxudmFyIGNhc2NhZGVyX3BhbmVsXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDMpO1xudmFyIGNhc2NhZGVyX3BhbmVsX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGNhc2NhZGVyX3BhbmVsXyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJlbGVtZW50LXVpL2xpYi91dGlscy9hcmlhLXV0aWxzXCJcbnZhciBhcmlhX3V0aWxzXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzUpO1xudmFyIGFyaWFfdXRpbHNfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oYXJpYV91dGlsc18pO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9jYXNjYWRlci9zcmMvY2FzY2FkZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG52YXIgS2V5Q29kZSA9IGFyaWFfdXRpbHNfZGVmYXVsdC5hLmtleXM7XG5cbnZhciBNaWdyYXRpbmdQcm9wcyA9IHtcbiAgZXhwYW5kVHJpZ2dlcjoge1xuICAgIG5ld1Byb3A6ICdleHBhbmRUcmlnZ2VyJyxcbiAgICB0eXBlOiBTdHJpbmdcbiAgfSxcbiAgY2hhbmdlT25TZWxlY3Q6IHtcbiAgICBuZXdQcm9wOiAnY2hlY2tTdHJpY3RseScsXG4gICAgdHlwZTogQm9vbGVhblxuICB9LFxuICBob3ZlclRocmVzaG9sZDoge1xuICAgIG5ld1Byb3A6ICdob3ZlclRocmVzaG9sZCcsXG4gICAgdHlwZTogTnVtYmVyXG4gIH1cbn07XG5cbnZhciBQb3BwZXJNaXhpbiA9IHtcbiAgcHJvcHM6IHtcbiAgICBwbGFjZW1lbnQ6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdib3R0b20tc3RhcnQnXG4gICAgfSxcbiAgICBhcHBlbmRUb0JvZHk6IHZ1ZV9wb3BwZXJfZGVmYXVsdC5hLnByb3BzLmFwcGVuZFRvQm9keSxcbiAgICB2aXNpYmxlQXJyb3c6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSxcbiAgICBhcnJvd09mZnNldDogdnVlX3BvcHBlcl9kZWZhdWx0LmEucHJvcHMuYXJyb3dPZmZzZXQsXG4gICAgb2Zmc2V0OiB2dWVfcG9wcGVyX2RlZmF1bHQuYS5wcm9wcy5vZmZzZXQsXG4gICAgYm91bmRhcmllc1BhZGRpbmc6IHZ1ZV9wb3BwZXJfZGVmYXVsdC5hLnByb3BzLmJvdW5kYXJpZXNQYWRkaW5nLFxuICAgIHBvcHBlck9wdGlvbnM6IHZ1ZV9wb3BwZXJfZGVmYXVsdC5hLnByb3BzLnBvcHBlck9wdGlvbnMsXG4gICAgdHJhbnNmb3JtT3JpZ2luOiB2dWVfcG9wcGVyX2RlZmF1bHQuYS5wcm9wcy50cmFuc2Zvcm1PcmlnaW5cbiAgfSxcbiAgbWV0aG9kczogdnVlX3BvcHBlcl9kZWZhdWx0LmEubWV0aG9kcyxcbiAgZGF0YTogdnVlX3BvcHBlcl9kZWZhdWx0LmEuZGF0YSxcbiAgYmVmb3JlRGVzdHJveTogdnVlX3BvcHBlcl9kZWZhdWx0LmEuYmVmb3JlRGVzdHJveVxufTtcblxudmFyIElucHV0U2l6ZU1hcCA9IHtcbiAgbWVkaXVtOiAzNixcbiAgc21hbGw6IDMyLFxuICBtaW5pOiAyOFxufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgY2FzY2FkZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBuYW1lOiAnRWxDYXNjYWRlcicsXG5cbiAgZGlyZWN0aXZlczogeyBDbGlja291dHNpZGU6IGNsaWNrb3V0c2lkZV9kZWZhdWx0LmEgfSxcblxuICBtaXhpbnM6IFtQb3BwZXJNaXhpbiwgZW1pdHRlcl9kZWZhdWx0LmEsIGxvY2FsZV9kZWZhdWx0LmEsIG1pZ3JhdGluZ19kZWZhdWx0LmFdLFxuXG4gIGluamVjdDoge1xuICAgIGVsRm9ybToge1xuICAgICAgZGVmYXVsdDogJydcbiAgICB9LFxuICAgIGVsRm9ybUl0ZW06IHtcbiAgICAgIGRlZmF1bHQ6ICcnXG4gICAgfVxuICB9LFxuXG4gIGNvbXBvbmVudHM6IHtcbiAgICBFbElucHV0OiBpbnB1dF9kZWZhdWx0LmEsXG4gICAgRWxUYWc6IHRhZ19kZWZhdWx0LmEsXG4gICAgRWxTY3JvbGxiYXI6IHNjcm9sbGJhcl9kZWZhdWx0LmEsXG4gICAgRWxDYXNjYWRlclBhbmVsOiBjYXNjYWRlcl9wYW5lbF9kZWZhdWx0LmFcbiAgfSxcblxuICBwcm9wczoge1xuICAgIHZhbHVlOiB7fSxcbiAgICBvcHRpb25zOiBBcnJheSxcbiAgICBwcm9wczogT2JqZWN0LFxuICAgIHNpemU6IFN0cmluZyxcbiAgICBwbGFjZWhvbGRlcjoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QobGliX2xvY2FsZV9bXCJ0XCJdKSgnZWwuY2FzY2FkZXIucGxhY2Vob2xkZXInKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGRpc2FibGVkOiBCb29sZWFuLFxuICAgIGNsZWFyYWJsZTogQm9vbGVhbixcbiAgICBmaWx0ZXJhYmxlOiBCb29sZWFuLFxuICAgIGZpbHRlck1ldGhvZDogRnVuY3Rpb24sXG4gICAgc2VwYXJhdG9yOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnIC8gJ1xuICAgIH0sXG4gICAgc2hvd0FsbExldmVsczoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9LFxuICAgIGNvbGxhcHNlVGFnczogQm9vbGVhbixcbiAgICBkZWJvdW5jZToge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZGVmYXVsdDogMzAwXG4gICAgfSxcbiAgICBiZWZvcmVGaWx0ZXI6IHtcbiAgICAgIHR5cGU6IEZ1bmN0aW9uLFxuICAgICAgZGVmYXVsdDogZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7fTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHBvcHBlckNsYXNzOiBTdHJpbmdcbiAgfSxcblxuICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBkcm9wRG93blZpc2libGU6IGZhbHNlLFxuICAgICAgY2hlY2tlZFZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgaW5wdXRIb3ZlcjogZmFsc2UsXG4gICAgICBpbnB1dFZhbHVlOiBudWxsLFxuICAgICAgcHJlc2VudFRleHQ6IG51bGwsXG4gICAgICBwcmVzZW50VGFnczogW10sXG4gICAgICBjaGVja2VkTm9kZXM6IFtdLFxuICAgICAgZmlsdGVyaW5nOiBmYWxzZSxcbiAgICAgIHN1Z2dlc3Rpb25zOiBbXSxcbiAgICAgIGlucHV0SW5pdGlhbEhlaWdodDogMCxcbiAgICAgIHByZXNzRGVsZXRlQ291bnQ6IDBcbiAgICB9O1xuICB9LFxuXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICByZWFsU2l6ZTogZnVuY3Rpb24gcmVhbFNpemUoKSB7XG4gICAgICB2YXIgX2VsRm9ybUl0ZW1TaXplID0gKHRoaXMuZWxGb3JtSXRlbSB8fCB7fSkuZWxGb3JtSXRlbVNpemU7XG4gICAgICByZXR1cm4gdGhpcy5zaXplIHx8IF9lbEZvcm1JdGVtU2l6ZSB8fCAodGhpcy4kRUxFTUVOVCB8fCB7fSkuc2l6ZTtcbiAgICB9LFxuICAgIHRhZ1NpemU6IGZ1bmN0aW9uIHRhZ1NpemUoKSB7XG4gICAgICByZXR1cm4gWydzbWFsbCcsICdtaW5pJ10uaW5kZXhPZih0aGlzLnJlYWxTaXplKSA+IC0xID8gJ21pbmknIDogJ3NtYWxsJztcbiAgICB9LFxuICAgIGlzRGlzYWJsZWQ6IGZ1bmN0aW9uIGlzRGlzYWJsZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5kaXNhYmxlZCB8fCAodGhpcy5lbEZvcm0gfHwge30pLmRpc2FibGVkO1xuICAgIH0sXG4gICAgY29uZmlnOiBmdW5jdGlvbiBjb25maWcoKSB7XG4gICAgICB2YXIgY29uZmlnID0gdGhpcy5wcm9wcyB8fCB7fTtcbiAgICAgIHZhciAkYXR0cnMgPSB0aGlzLiRhdHRycztcblxuXG4gICAgICBPYmplY3Qua2V5cyhNaWdyYXRpbmdQcm9wcykuZm9yRWFjaChmdW5jdGlvbiAob2xkUHJvcCkge1xuICAgICAgICB2YXIgX01pZ3JhdGluZ1Byb3BzJG9sZFByID0gTWlncmF0aW5nUHJvcHNbb2xkUHJvcF0sXG4gICAgICAgICAgICBuZXdQcm9wID0gX01pZ3JhdGluZ1Byb3BzJG9sZFByLm5ld1Byb3AsXG4gICAgICAgICAgICB0eXBlID0gX01pZ3JhdGluZ1Byb3BzJG9sZFByLnR5cGU7XG5cbiAgICAgICAgdmFyIG9sZFZhbHVlID0gJGF0dHJzW29sZFByb3BdIHx8ICRhdHRyc1tPYmplY3QodXRpbF9bXCJrZWJhYkNhc2VcIl0pKG9sZFByb3ApXTtcbiAgICAgICAgaWYgKE9iamVjdChzaGFyZWRfW1wiaXNEZWZcIl0pKG9sZFByb3ApICYmICFPYmplY3Qoc2hhcmVkX1tcImlzRGVmXCJdKShjb25maWdbbmV3UHJvcF0pKSB7XG4gICAgICAgICAgaWYgKHR5cGUgPT09IEJvb2xlYW4gJiYgb2xkVmFsdWUgPT09ICcnKSB7XG4gICAgICAgICAgICBvbGRWYWx1ZSA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbmZpZ1tuZXdQcm9wXSA9IG9sZFZhbHVlO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGNvbmZpZztcbiAgICB9LFxuICAgIG11bHRpcGxlOiBmdW5jdGlvbiBtdWx0aXBsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbmZpZy5tdWx0aXBsZTtcbiAgICB9LFxuICAgIGxlYWZPbmx5OiBmdW5jdGlvbiBsZWFmT25seSgpIHtcbiAgICAgIHJldHVybiAhdGhpcy5jb25maWcuY2hlY2tTdHJpY3RseTtcbiAgICB9LFxuICAgIHJlYWRvbmx5OiBmdW5jdGlvbiByZWFkb25seSgpIHtcbiAgICAgIHJldHVybiAhdGhpcy5maWx0ZXJhYmxlIHx8IHRoaXMubXVsdGlwbGU7XG4gICAgfSxcbiAgICBjbGVhckJ0blZpc2libGU6IGZ1bmN0aW9uIGNsZWFyQnRuVmlzaWJsZSgpIHtcbiAgICAgIGlmICghdGhpcy5jbGVhcmFibGUgfHwgdGhpcy5pc0Rpc2FibGVkIHx8IHRoaXMuZmlsdGVyaW5nIHx8ICF0aGlzLmlucHV0SG92ZXIpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5tdWx0aXBsZSA/ICEhdGhpcy5jaGVja2VkTm9kZXMuZmlsdGVyKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgIHJldHVybiAhbm9kZS5pc0Rpc2FibGVkO1xuICAgICAgfSkubGVuZ3RoIDogISF0aGlzLnByZXNlbnRUZXh0O1xuICAgIH0sXG4gICAgcGFuZWw6IGZ1bmN0aW9uIHBhbmVsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHJlZnMucGFuZWw7XG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgZGlzYWJsZWQ6IGZ1bmN0aW9uIGRpc2FibGVkKCkge1xuICAgICAgdGhpcy5jb21wdXRlUHJlc2VudENvbnRlbnQoKTtcbiAgICB9LFxuICAgIHZhbHVlOiBmdW5jdGlvbiB2YWx1ZSh2YWwpIHtcbiAgICAgIGlmICghT2JqZWN0KHV0aWxfW1wiaXNFcXVhbFwiXSkodmFsLCB0aGlzLmNoZWNrZWRWYWx1ZSkpIHtcbiAgICAgICAgdGhpcy5jaGVja2VkVmFsdWUgPSB2YWw7XG4gICAgICAgIHRoaXMuY29tcHV0ZVByZXNlbnRDb250ZW50KCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBjaGVja2VkVmFsdWU6IGZ1bmN0aW9uIGNoZWNrZWRWYWx1ZSh2YWwpIHtcbiAgICAgIHZhciB2YWx1ZSA9IHRoaXMudmFsdWUsXG4gICAgICAgICAgZHJvcERvd25WaXNpYmxlID0gdGhpcy5kcm9wRG93blZpc2libGU7XG4gICAgICB2YXIgX2NvbmZpZyA9IHRoaXMuY29uZmlnLFxuICAgICAgICAgIGNoZWNrU3RyaWN0bHkgPSBfY29uZmlnLmNoZWNrU3RyaWN0bHksXG4gICAgICAgICAgbXVsdGlwbGUgPSBfY29uZmlnLm11bHRpcGxlO1xuXG5cbiAgICAgIGlmICghT2JqZWN0KHV0aWxfW1wiaXNFcXVhbFwiXSkodmFsLCB2YWx1ZSkgfHwgT2JqZWN0KHR5cGVzX1tcImlzVW5kZWZpbmVkXCJdKSh2YWx1ZSkpIHtcbiAgICAgICAgdGhpcy5jb21wdXRlUHJlc2VudENvbnRlbnQoKTtcbiAgICAgICAgLy8gaGlkZSBkcm9wZG93biB3aGVuIHNpbmdsZSBtb2RlXG4gICAgICAgIGlmICghbXVsdGlwbGUgJiYgIWNoZWNrU3RyaWN0bHkgJiYgZHJvcERvd25WaXNpYmxlKSB7XG4gICAgICAgICAgdGhpcy50b2dnbGVEcm9wRG93blZpc2libGUoZmFsc2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCB2YWwpO1xuICAgICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCB2YWwpO1xuICAgICAgICB0aGlzLmRpc3BhdGNoKCdFbEZvcm1JdGVtJywgJ2VsLmZvcm0uY2hhbmdlJywgW3ZhbF0pO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBvcHRpb25zOiB7XG4gICAgICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKCkge1xuICAgICAgICB0aGlzLiRuZXh0VGljayh0aGlzLmNvbXB1dGVQcmVzZW50Q29udGVudCk7XG4gICAgICB9LFxuICAgICAgZGVlcDogdHJ1ZVxuICAgIH0sXG4gICAgcHJlc2VudFRleHQ6IGZ1bmN0aW9uIHByZXNlbnRUZXh0KHZhbCkge1xuICAgICAgdGhpcy5pbnB1dFZhbHVlID0gdmFsO1xuICAgIH0sXG4gICAgcHJlc2VudFRhZ3M6IGZ1bmN0aW9uIHByZXNlbnRUYWdzKHZhbCwgb2xkVmFsKSB7XG4gICAgICBpZiAodGhpcy5tdWx0aXBsZSAmJiAodmFsLmxlbmd0aCB8fCBvbGRWYWwubGVuZ3RoKSkge1xuICAgICAgICB0aGlzLiRuZXh0VGljayh0aGlzLnVwZGF0ZVN0eWxlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGZpbHRlcmluZzogZnVuY3Rpb24gZmlsdGVyaW5nKHZhbCkge1xuICAgICAgdGhpcy4kbmV4dFRpY2sodGhpcy51cGRhdGVQb3BwZXIpO1xuICAgIH1cbiAgfSxcblxuICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB2YXIgaW5wdXQgPSB0aGlzLiRyZWZzLmlucHV0O1xuXG4gICAgaWYgKGlucHV0ICYmIGlucHV0LiRlbCkge1xuICAgICAgdGhpcy5pbnB1dEluaXRpYWxIZWlnaHQgPSBpbnB1dC4kZWwub2Zmc2V0SGVpZ2h0IHx8IElucHV0U2l6ZU1hcFt0aGlzLnJlYWxTaXplXSB8fCA0MDtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuaXNFbXB0eVZhbHVlKHRoaXMudmFsdWUpKSB7XG4gICAgICB0aGlzLmNvbXB1dGVQcmVzZW50Q29udGVudCgpO1xuICAgIH1cblxuICAgIHRoaXMuZmlsdGVySGFuZGxlciA9IGRlYm91bmNlX2RlZmF1bHQoKSh0aGlzLmRlYm91bmNlLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgaW5wdXRWYWx1ZSA9IF90aGlzLmlucHV0VmFsdWU7XG5cblxuICAgICAgaWYgKCFpbnB1dFZhbHVlKSB7XG4gICAgICAgIF90aGlzLmZpbHRlcmluZyA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBiZWZvcmUgPSBfdGhpcy5iZWZvcmVGaWx0ZXIoaW5wdXRWYWx1ZSk7XG4gICAgICBpZiAoYmVmb3JlICYmIGJlZm9yZS50aGVuKSB7XG4gICAgICAgIGJlZm9yZS50aGVuKF90aGlzLmdldFN1Z2dlc3Rpb25zKTtcbiAgICAgIH0gZWxzZSBpZiAoYmVmb3JlICE9PSBmYWxzZSkge1xuICAgICAgICBfdGhpcy5nZXRTdWdnZXN0aW9ucygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgX3RoaXMuZmlsdGVyaW5nID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBPYmplY3QocmVzaXplX2V2ZW50X1tcImFkZFJlc2l6ZUxpc3RlbmVyXCJdKSh0aGlzLiRlbCwgdGhpcy51cGRhdGVTdHlsZSk7XG4gIH0sXG4gIGJlZm9yZURlc3Ryb3k6IGZ1bmN0aW9uIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgT2JqZWN0KHJlc2l6ZV9ldmVudF9bXCJyZW1vdmVSZXNpemVMaXN0ZW5lclwiXSkodGhpcy4kZWwsIHRoaXMudXBkYXRlU3R5bGUpO1xuICB9LFxuXG5cbiAgbWV0aG9kczoge1xuICAgIGdldE1pZ3JhdGluZ0NvbmZpZzogZnVuY3Rpb24gZ2V0TWlncmF0aW5nQ29uZmlnKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAnZXhwYW5kLXRyaWdnZXInOiAnZXhwYW5kLXRyaWdnZXIgaXMgcmVtb3ZlZCwgdXNlIGBwcm9wcy5leHBhbmRUcmlnZ2VyYCBpbnN0ZWFkLicsXG4gICAgICAgICAgJ2NoYW5nZS1vbi1zZWxlY3QnOiAnY2hhbmdlLW9uLXNlbGVjdCBpcyByZW1vdmVkLCB1c2UgYHByb3BzLmNoZWNrU3RyaWN0bHlgIGluc3RlYWQuJyxcbiAgICAgICAgICAnaG92ZXItdGhyZXNob2xkJzogJ2hvdmVyLXRocmVzaG9sZCBpcyByZW1vdmVkLCB1c2UgYHByb3BzLmhvdmVyVGhyZXNob2xkYCBpbnN0ZWFkJ1xuICAgICAgICB9LFxuICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAnYWN0aXZlLWl0ZW0tY2hhbmdlJzogJ2FjdGl2ZS1pdGVtLWNoYW5nZSBpcyByZW5hbWVkIHRvIGV4cGFuZC1jaGFuZ2UnXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSxcbiAgICB0b2dnbGVEcm9wRG93blZpc2libGU6IGZ1bmN0aW9uIHRvZ2dsZURyb3BEb3duVmlzaWJsZSh2aXNpYmxlKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgaWYgKHRoaXMuaXNEaXNhYmxlZCkgcmV0dXJuO1xuXG4gICAgICB2YXIgZHJvcERvd25WaXNpYmxlID0gdGhpcy5kcm9wRG93blZpc2libGU7XG4gICAgICB2YXIgaW5wdXQgPSB0aGlzLiRyZWZzLmlucHV0O1xuXG4gICAgICB2aXNpYmxlID0gT2JqZWN0KHNoYXJlZF9bXCJpc0RlZlwiXSkodmlzaWJsZSkgPyB2aXNpYmxlIDogIWRyb3BEb3duVmlzaWJsZTtcbiAgICAgIGlmICh2aXNpYmxlICE9PSBkcm9wRG93blZpc2libGUpIHtcbiAgICAgICAgdGhpcy5kcm9wRG93blZpc2libGUgPSB2aXNpYmxlO1xuICAgICAgICBpZiAodmlzaWJsZSkge1xuICAgICAgICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzMi51cGRhdGVQb3BwZXIoKTtcbiAgICAgICAgICAgIF90aGlzMi5wYW5lbC5zY3JvbGxJbnRvVmlldygpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlucHV0LiRyZWZzLmlucHV0LnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsIHZpc2libGUpO1xuICAgICAgICB0aGlzLiRlbWl0KCd2aXNpYmxlLWNoYW5nZScsIHZpc2libGUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgaGFuZGxlRHJvcGRvd25MZWF2ZTogZnVuY3Rpb24gaGFuZGxlRHJvcGRvd25MZWF2ZSgpIHtcbiAgICAgIHRoaXMuZmlsdGVyaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLmlucHV0VmFsdWUgPSB0aGlzLnByZXNlbnRUZXh0O1xuICAgICAgdGhpcy5kb0Rlc3Ryb3koKTtcbiAgICB9LFxuICAgIGhhbmRsZUtleURvd246IGZ1bmN0aW9uIGhhbmRsZUtleURvd24oZXZlbnQpIHtcbiAgICAgIHN3aXRjaCAoZXZlbnQua2V5Q29kZSkge1xuICAgICAgICBjYXNlIEtleUNvZGUuZW50ZXI6XG4gICAgICAgICAgdGhpcy50b2dnbGVEcm9wRG93blZpc2libGUoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBLZXlDb2RlLmRvd246XG4gICAgICAgICAgdGhpcy50b2dnbGVEcm9wRG93blZpc2libGUodHJ1ZSk7XG4gICAgICAgICAgdGhpcy5mb2N1c0ZpcnN0Tm9kZSgpO1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgS2V5Q29kZS5lc2M6XG4gICAgICAgIGNhc2UgS2V5Q29kZS50YWI6XG4gICAgICAgICAgdGhpcy50b2dnbGVEcm9wRG93blZpc2libGUoZmFsc2UpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0sXG4gICAgaGFuZGxlRm9jdXM6IGZ1bmN0aW9uIGhhbmRsZUZvY3VzKGUpIHtcbiAgICAgIHRoaXMuJGVtaXQoJ2ZvY3VzJywgZSk7XG4gICAgfSxcbiAgICBoYW5kbGVCbHVyOiBmdW5jdGlvbiBoYW5kbGVCbHVyKGUpIHtcbiAgICAgIHRoaXMuJGVtaXQoJ2JsdXInLCBlKTtcbiAgICB9LFxuICAgIGhhbmRsZUlucHV0OiBmdW5jdGlvbiBoYW5kbGVJbnB1dCh2YWwsIGV2ZW50KSB7XG4gICAgICAhdGhpcy5kcm9wRG93blZpc2libGUgJiYgdGhpcy50b2dnbGVEcm9wRG93blZpc2libGUodHJ1ZSk7XG5cbiAgICAgIGlmIChldmVudCAmJiBldmVudC5pc0NvbXBvc2luZykgcmV0dXJuO1xuICAgICAgaWYgKHZhbCkge1xuICAgICAgICB0aGlzLmZpbHRlckhhbmRsZXIoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZmlsdGVyaW5nID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSxcbiAgICBoYW5kbGVDbGVhcjogZnVuY3Rpb24gaGFuZGxlQ2xlYXIoKSB7XG4gICAgICB0aGlzLnByZXNlbnRUZXh0ID0gJyc7XG4gICAgICB0aGlzLnBhbmVsLmNsZWFyQ2hlY2tlZE5vZGVzKCk7XG4gICAgfSxcbiAgICBoYW5kbGVFeHBhbmRDaGFuZ2U6IGZ1bmN0aW9uIGhhbmRsZUV4cGFuZENoYW5nZSh2YWx1ZSkge1xuICAgICAgdGhpcy4kbmV4dFRpY2sodGhpcy51cGRhdGVQb3BwZXIuYmluZCh0aGlzKSk7XG4gICAgICB0aGlzLiRlbWl0KCdleHBhbmQtY2hhbmdlJywgdmFsdWUpO1xuICAgICAgdGhpcy4kZW1pdCgnYWN0aXZlLWl0ZW0tY2hhbmdlJywgdmFsdWUpOyAvLyBEZXByZWNhdGVkXG4gICAgfSxcbiAgICBmb2N1c0ZpcnN0Tm9kZTogZnVuY3Rpb24gZm9jdXNGaXJzdE5vZGUoKSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZmlsdGVyaW5nID0gX3RoaXMzLmZpbHRlcmluZztcbiAgICAgICAgdmFyIF8kcmVmcyA9IF90aGlzMy4kcmVmcyxcbiAgICAgICAgICAgIHBvcHBlciA9IF8kcmVmcy5wb3BwZXIsXG4gICAgICAgICAgICBzdWdnZXN0aW9uUGFuZWwgPSBfJHJlZnMuc3VnZ2VzdGlvblBhbmVsO1xuXG4gICAgICAgIHZhciBmaXJzdE5vZGUgPSBudWxsO1xuXG4gICAgICAgIGlmIChmaWx0ZXJpbmcgJiYgc3VnZ2VzdGlvblBhbmVsKSB7XG4gICAgICAgICAgZmlyc3ROb2RlID0gc3VnZ2VzdGlvblBhbmVsLiRlbC5xdWVyeVNlbGVjdG9yKCcuZWwtY2FzY2FkZXJfX3N1Z2dlc3Rpb24taXRlbScpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBmaXJzdE1lbnUgPSBwb3BwZXIucXVlcnlTZWxlY3RvcignLmVsLWNhc2NhZGVyLW1lbnUnKTtcbiAgICAgICAgICBmaXJzdE5vZGUgPSBmaXJzdE1lbnUucXVlcnlTZWxlY3RvcignLmVsLWNhc2NhZGVyLW5vZGVbdGFiaW5kZXg9XCItMVwiXScpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpcnN0Tm9kZSkge1xuICAgICAgICAgIGZpcnN0Tm9kZS5mb2N1cygpO1xuICAgICAgICAgICFmaWx0ZXJpbmcgJiYgZmlyc3ROb2RlLmNsaWNrKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sXG4gICAgY29tcHV0ZVByZXNlbnRDb250ZW50OiBmdW5jdGlvbiBjb21wdXRlUHJlc2VudENvbnRlbnQoKSB7XG4gICAgICB2YXIgX3RoaXM0ID0gdGhpcztcblxuICAgICAgLy8gbmV4dFRpY2sgaXMgcmVxdWlyZWQsIGJlY2F1c2UgY2hlY2tlZCBub2RlcyBtYXkgbm90IGNoYW5nZSByaWdodCBub3dcbiAgICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKF90aGlzNC5jb25maWcubXVsdGlwbGUpIHtcbiAgICAgICAgICBfdGhpczQuY29tcHV0ZVByZXNlbnRUYWdzKCk7XG4gICAgICAgICAgX3RoaXM0LnByZXNlbnRUZXh0ID0gX3RoaXM0LnByZXNlbnRUYWdzLmxlbmd0aCA/ICcgJyA6IG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgX3RoaXM0LmNvbXB1dGVQcmVzZW50VGV4dCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGlzRW1wdHlWYWx1ZTogZnVuY3Rpb24gaXNFbXB0eVZhbHVlKHZhbCkge1xuICAgICAgdmFyIG11bHRpcGxlID0gdGhpcy5tdWx0aXBsZTtcbiAgICAgIHZhciBlbWl0UGF0aCA9IHRoaXMucGFuZWwuY29uZmlnLmVtaXRQYXRoO1xuXG4gICAgICBpZiAobXVsdGlwbGUgfHwgZW1pdFBhdGgpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdCh1dGlsX1tcImlzRW1wdHlcIl0pKHZhbCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcbiAgICBjb21wdXRlUHJlc2VudFRleHQ6IGZ1bmN0aW9uIGNvbXB1dGVQcmVzZW50VGV4dCgpIHtcbiAgICAgIHZhciBjaGVja2VkVmFsdWUgPSB0aGlzLmNoZWNrZWRWYWx1ZSxcbiAgICAgICAgICBjb25maWcgPSB0aGlzLmNvbmZpZztcblxuICAgICAgaWYgKCF0aGlzLmlzRW1wdHlWYWx1ZShjaGVja2VkVmFsdWUpKSB7XG4gICAgICAgIHZhciBub2RlID0gdGhpcy5wYW5lbC5nZXROb2RlQnlWYWx1ZShjaGVja2VkVmFsdWUpO1xuICAgICAgICBpZiAobm9kZSAmJiAoY29uZmlnLmNoZWNrU3RyaWN0bHkgfHwgbm9kZS5pc0xlYWYpKSB7XG4gICAgICAgICAgdGhpcy5wcmVzZW50VGV4dCA9IG5vZGUuZ2V0VGV4dCh0aGlzLnNob3dBbGxMZXZlbHMsIHRoaXMuc2VwYXJhdG9yKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMucHJlc2VudFRleHQgPSBudWxsO1xuICAgIH0sXG4gICAgY29tcHV0ZVByZXNlbnRUYWdzOiBmdW5jdGlvbiBjb21wdXRlUHJlc2VudFRhZ3MoKSB7XG4gICAgICB2YXIgaXNEaXNhYmxlZCA9IHRoaXMuaXNEaXNhYmxlZCxcbiAgICAgICAgICBsZWFmT25seSA9IHRoaXMubGVhZk9ubHksXG4gICAgICAgICAgc2hvd0FsbExldmVscyA9IHRoaXMuc2hvd0FsbExldmVscyxcbiAgICAgICAgICBzZXBhcmF0b3IgPSB0aGlzLnNlcGFyYXRvcixcbiAgICAgICAgICBjb2xsYXBzZVRhZ3MgPSB0aGlzLmNvbGxhcHNlVGFncztcblxuICAgICAgdmFyIGNoZWNrZWROb2RlcyA9IHRoaXMuZ2V0Q2hlY2tlZE5vZGVzKGxlYWZPbmx5KTtcbiAgICAgIHZhciB0YWdzID0gW107XG5cbiAgICAgIHZhciBnZW5UYWcgPSBmdW5jdGlvbiBnZW5UYWcobm9kZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5vZGU6IG5vZGUsXG4gICAgICAgICAga2V5OiBub2RlLnVpZCxcbiAgICAgICAgICB0ZXh0OiBub2RlLmdldFRleHQoc2hvd0FsbExldmVscywgc2VwYXJhdG9yKSxcbiAgICAgICAgICBoaXRTdGF0ZTogZmFsc2UsXG4gICAgICAgICAgY2xvc2FibGU6ICFpc0Rpc2FibGVkICYmICFub2RlLmlzRGlzYWJsZWRcbiAgICAgICAgfTtcbiAgICAgIH07XG5cbiAgICAgIGlmIChjaGVja2VkTm9kZXMubGVuZ3RoKSB7XG4gICAgICAgIHZhciBmaXJzdCA9IGNoZWNrZWROb2Rlc1swXSxcbiAgICAgICAgICAgIHJlc3QgPSBjaGVja2VkTm9kZXMuc2xpY2UoMSk7XG5cbiAgICAgICAgdmFyIHJlc3RDb3VudCA9IHJlc3QubGVuZ3RoO1xuICAgICAgICB0YWdzLnB1c2goZ2VuVGFnKGZpcnN0KSk7XG5cbiAgICAgICAgaWYgKHJlc3RDb3VudCkge1xuICAgICAgICAgIGlmIChjb2xsYXBzZVRhZ3MpIHtcbiAgICAgICAgICAgIHRhZ3MucHVzaCh7XG4gICAgICAgICAgICAgIGtleTogLTEsXG4gICAgICAgICAgICAgIHRleHQ6ICcrICcgKyByZXN0Q291bnQsXG4gICAgICAgICAgICAgIGNsb3NhYmxlOiBmYWxzZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc3QuZm9yRWFjaChmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICAgICAgICByZXR1cm4gdGFncy5wdXNoKGdlblRhZyhub2RlKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5jaGVja2VkTm9kZXMgPSBjaGVja2VkTm9kZXM7XG4gICAgICB0aGlzLnByZXNlbnRUYWdzID0gdGFncztcbiAgICB9LFxuICAgIGdldFN1Z2dlc3Rpb25zOiBmdW5jdGlvbiBnZXRTdWdnZXN0aW9ucygpIHtcbiAgICAgIHZhciBfdGhpczUgPSB0aGlzO1xuXG4gICAgICB2YXIgZmlsdGVyTWV0aG9kID0gdGhpcy5maWx0ZXJNZXRob2Q7XG5cblxuICAgICAgaWYgKCFPYmplY3QodHlwZXNfW1wiaXNGdW5jdGlvblwiXSkoZmlsdGVyTWV0aG9kKSkge1xuICAgICAgICBmaWx0ZXJNZXRob2QgPSBmdW5jdGlvbiBmaWx0ZXJNZXRob2Qobm9kZSwga2V5d29yZCkge1xuICAgICAgICAgIHJldHVybiBub2RlLnRleHQuaW5jbHVkZXMoa2V5d29yZCk7XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHZhciBzdWdnZXN0aW9ucyA9IHRoaXMucGFuZWwuZ2V0RmxhdHRlZE5vZGVzKHRoaXMubGVhZk9ubHkpLmZpbHRlcihmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICBpZiAobm9kZS5pc0Rpc2FibGVkKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIG5vZGUudGV4dCA9IG5vZGUuZ2V0VGV4dChfdGhpczUuc2hvd0FsbExldmVscywgX3RoaXM1LnNlcGFyYXRvcikgfHwgJyc7XG4gICAgICAgIHJldHVybiBmaWx0ZXJNZXRob2Qobm9kZSwgX3RoaXM1LmlucHV0VmFsdWUpO1xuICAgICAgfSk7XG5cbiAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgIHRoaXMucHJlc2VudFRhZ3MuZm9yRWFjaChmdW5jdGlvbiAodGFnKSB7XG4gICAgICAgICAgdGFnLmhpdFN0YXRlID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3VnZ2VzdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICAgIG5vZGUuY2hlY2tlZCA9IE9iamVjdCh1dGlsX1tcImlzRXF1YWxcIl0pKF90aGlzNS5jaGVja2VkVmFsdWUsIG5vZGUuZ2V0VmFsdWVCeU9wdGlvbigpKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZmlsdGVyaW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMuc3VnZ2VzdGlvbnMgPSBzdWdnZXN0aW9ucztcbiAgICAgIHRoaXMuJG5leHRUaWNrKHRoaXMudXBkYXRlUG9wcGVyKTtcbiAgICB9LFxuICAgIGhhbmRsZVN1Z2dlc3Rpb25LZXlEb3duOiBmdW5jdGlvbiBoYW5kbGVTdWdnZXN0aW9uS2V5RG93bihldmVudCkge1xuICAgICAgdmFyIGtleUNvZGUgPSBldmVudC5rZXlDb2RlLFxuICAgICAgICAgIHRhcmdldCA9IGV2ZW50LnRhcmdldDtcblxuICAgICAgc3dpdGNoIChrZXlDb2RlKSB7XG4gICAgICAgIGNhc2UgS2V5Q29kZS5lbnRlcjpcbiAgICAgICAgICB0YXJnZXQuY2xpY2soKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBLZXlDb2RlLnVwOlxuICAgICAgICAgIHZhciBwcmV2ID0gdGFyZ2V0LnByZXZpb3VzRWxlbWVudFNpYmxpbmc7XG4gICAgICAgICAgcHJldiAmJiBwcmV2LmZvY3VzKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgS2V5Q29kZS5kb3duOlxuICAgICAgICAgIHZhciBuZXh0ID0gdGFyZ2V0Lm5leHRFbGVtZW50U2libGluZztcbiAgICAgICAgICBuZXh0ICYmIG5leHQuZm9jdXMoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBLZXlDb2RlLmVzYzpcbiAgICAgICAgY2FzZSBLZXlDb2RlLnRhYjpcbiAgICAgICAgICB0aGlzLnRvZ2dsZURyb3BEb3duVmlzaWJsZShmYWxzZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSxcbiAgICBoYW5kbGVEZWxldGU6IGZ1bmN0aW9uIGhhbmRsZURlbGV0ZSgpIHtcbiAgICAgIHZhciBpbnB1dFZhbHVlID0gdGhpcy5pbnB1dFZhbHVlLFxuICAgICAgICAgIHByZXNzRGVsZXRlQ291bnQgPSB0aGlzLnByZXNzRGVsZXRlQ291bnQsXG4gICAgICAgICAgcHJlc2VudFRhZ3MgPSB0aGlzLnByZXNlbnRUYWdzO1xuXG4gICAgICB2YXIgbGFzdEluZGV4ID0gcHJlc2VudFRhZ3MubGVuZ3RoIC0gMTtcbiAgICAgIHZhciBsYXN0VGFnID0gcHJlc2VudFRhZ3NbbGFzdEluZGV4XTtcbiAgICAgIHRoaXMucHJlc3NEZWxldGVDb3VudCA9IGlucHV0VmFsdWUgPyAwIDogcHJlc3NEZWxldGVDb3VudCArIDE7XG5cbiAgICAgIGlmICghbGFzdFRhZykgcmV0dXJuO1xuXG4gICAgICBpZiAodGhpcy5wcmVzc0RlbGV0ZUNvdW50KSB7XG4gICAgICAgIGlmIChsYXN0VGFnLmhpdFN0YXRlKSB7XG4gICAgICAgICAgdGhpcy5kZWxldGVUYWcobGFzdFRhZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGFzdFRhZy5oaXRTdGF0ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGhhbmRsZVN1Z2dlc3Rpb25DbGljazogZnVuY3Rpb24gaGFuZGxlU3VnZ2VzdGlvbkNsaWNrKGluZGV4KSB7XG4gICAgICB2YXIgbXVsdGlwbGUgPSB0aGlzLm11bHRpcGxlO1xuXG4gICAgICB2YXIgdGFyZ2V0Tm9kZSA9IHRoaXMuc3VnZ2VzdGlvbnNbaW5kZXhdO1xuXG4gICAgICBpZiAobXVsdGlwbGUpIHtcbiAgICAgICAgdmFyIGNoZWNrZWQgPSB0YXJnZXROb2RlLmNoZWNrZWQ7XG5cbiAgICAgICAgdGFyZ2V0Tm9kZS5kb0NoZWNrKCFjaGVja2VkKTtcbiAgICAgICAgdGhpcy5wYW5lbC5jYWxjdWxhdGVNdWx0aUNoZWNrZWRWYWx1ZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jaGVja2VkVmFsdWUgPSB0YXJnZXROb2RlLmdldFZhbHVlQnlPcHRpb24oKTtcbiAgICAgICAgdGhpcy50b2dnbGVEcm9wRG93blZpc2libGUoZmFsc2UpO1xuICAgICAgfVxuICAgIH0sXG4gICAgZGVsZXRlVGFnOiBmdW5jdGlvbiBkZWxldGVUYWcodGFnKSB7XG4gICAgICB2YXIgY2hlY2tlZFZhbHVlID0gdGhpcy5jaGVja2VkVmFsdWU7XG5cbiAgICAgIHZhciBjdXJyZW50ID0gdGFnLm5vZGUuZ2V0VmFsdWVCeU9wdGlvbigpO1xuICAgICAgdmFyIHZhbCA9IGNoZWNrZWRWYWx1ZS5maW5kKGZ1bmN0aW9uIChuKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QodXRpbF9bXCJpc0VxdWFsXCJdKShuLCBjdXJyZW50KTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5jaGVja2VkVmFsdWUgPSBjaGVja2VkVmFsdWUuZmlsdGVyKGZ1bmN0aW9uIChuKSB7XG4gICAgICAgIHJldHVybiAhT2JqZWN0KHV0aWxfW1wiaXNFcXVhbFwiXSkobiwgY3VycmVudCk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuJGVtaXQoJ3JlbW92ZS10YWcnLCB2YWwpO1xuICAgIH0sXG4gICAgdXBkYXRlU3R5bGU6IGZ1bmN0aW9uIHVwZGF0ZVN0eWxlKCkge1xuICAgICAgdmFyICRlbCA9IHRoaXMuJGVsLFxuICAgICAgICAgIGlucHV0SW5pdGlhbEhlaWdodCA9IHRoaXMuaW5wdXRJbml0aWFsSGVpZ2h0O1xuXG4gICAgICBpZiAodGhpcy4kaXNTZXJ2ZXIgfHwgISRlbCkgcmV0dXJuO1xuXG4gICAgICB2YXIgc3VnZ2VzdGlvblBhbmVsID0gdGhpcy4kcmVmcy5zdWdnZXN0aW9uUGFuZWw7XG5cbiAgICAgIHZhciBpbnB1dElubmVyID0gJGVsLnF1ZXJ5U2VsZWN0b3IoJy5lbC1pbnB1dF9faW5uZXInKTtcblxuICAgICAgaWYgKCFpbnB1dElubmVyKSByZXR1cm47XG5cbiAgICAgIHZhciB0YWdzID0gJGVsLnF1ZXJ5U2VsZWN0b3IoJy5lbC1jYXNjYWRlcl9fdGFncycpO1xuICAgICAgdmFyIHN1Z2dlc3Rpb25QYW5lbEVsID0gbnVsbDtcblxuICAgICAgaWYgKHN1Z2dlc3Rpb25QYW5lbCAmJiAoc3VnZ2VzdGlvblBhbmVsRWwgPSBzdWdnZXN0aW9uUGFuZWwuJGVsKSkge1xuICAgICAgICB2YXIgc3VnZ2VzdGlvbkxpc3QgPSBzdWdnZXN0aW9uUGFuZWxFbC5xdWVyeVNlbGVjdG9yKCcuZWwtY2FzY2FkZXJfX3N1Z2dlc3Rpb24tbGlzdCcpO1xuICAgICAgICBzdWdnZXN0aW9uTGlzdC5zdHlsZS5taW5XaWR0aCA9IGlucHV0SW5uZXIub2Zmc2V0V2lkdGggKyAncHgnO1xuICAgICAgfVxuXG4gICAgICBpZiAodGFncykge1xuICAgICAgICB2YXIgb2Zmc2V0SGVpZ2h0ID0gTWF0aC5yb3VuZCh0YWdzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCk7XG4gICAgICAgIHZhciBoZWlnaHQgPSBNYXRoLm1heChvZmZzZXRIZWlnaHQgKyA2LCBpbnB1dEluaXRpYWxIZWlnaHQpICsgJ3B4JztcbiAgICAgICAgaW5wdXRJbm5lci5zdHlsZS5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICAgIGlmICh0aGlzLmRyb3BEb3duVmlzaWJsZSkge1xuICAgICAgICAgIHRoaXMudXBkYXRlUG9wcGVyKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG5cbiAgICAvKipcbiAgICAgKiBwdWJsaWMgbWV0aG9kc1xuICAgICovXG4gICAgZ2V0Q2hlY2tlZE5vZGVzOiBmdW5jdGlvbiBnZXRDaGVja2VkTm9kZXMobGVhZk9ubHkpIHtcbiAgICAgIHJldHVybiB0aGlzLnBhbmVsLmdldENoZWNrZWROb2RlcyhsZWFmT25seSk7XG4gICAgfVxuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY2FzY2FkZXIvc3JjL2Nhc2NhZGVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfY2FzY2FkZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoY2FzY2FkZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY2FzY2FkZXIvc3JjL2Nhc2NhZGVyLnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGNhc2NhZGVyX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgc3JjX2Nhc2NhZGVydnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICBjYXNjYWRlcnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzAzMjUzN2E2X3JlbmRlcixcbiAgY2FzY2FkZXJ2dWVfdHlwZV90ZW1wbGF0ZV9pZF8wMzI1MzdhNl9zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGNhc2NhZGVyX2FwaTsgfVxuY2FzY2FkZXJfY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy9jYXNjYWRlci9zcmMvY2FzY2FkZXIudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGNhc2NhZGVyID0gKGNhc2NhZGVyX2NvbXBvbmVudC5leHBvcnRzKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY2FzY2FkZXIvaW5kZXguanNcblxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuY2FzY2FkZXIuaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcbiAgVnVlLmNvbXBvbmVudChjYXNjYWRlci5uYW1lLCBjYXNjYWRlcik7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc19jYXNjYWRlciA9IChjYXNjYWRlcik7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2NvbG9yLXBpY2tlci9zcmMvbWFpbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NTVjOGFkZTcmXG52YXIgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzU1YzhhZGU3X3JlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHtcbiAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiY2xpY2tvdXRzaWRlXCIsXG4gICAgICAgICAgcmF3TmFtZTogXCJ2LWNsaWNrb3V0c2lkZVwiLFxuICAgICAgICAgIHZhbHVlOiBfdm0uaGlkZSxcbiAgICAgICAgICBleHByZXNzaW9uOiBcImhpZGVcIlxuICAgICAgICB9XG4gICAgICBdLFxuICAgICAgY2xhc3M6IFtcbiAgICAgICAgXCJlbC1jb2xvci1waWNrZXJcIixcbiAgICAgICAgX3ZtLmNvbG9yRGlzYWJsZWQgPyBcImlzLWRpc2FibGVkXCIgOiBcIlwiLFxuICAgICAgICBfdm0uY29sb3JTaXplID8gXCJlbC1jb2xvci1waWNrZXItLVwiICsgX3ZtLmNvbG9yU2l6ZSA6IFwiXCJcbiAgICAgIF1cbiAgICB9LFxuICAgIFtcbiAgICAgIF92bS5jb2xvckRpc2FibGVkXG4gICAgICAgID8gX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJlbC1jb2xvci1waWNrZXJfX21hc2tcIiB9KVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgX2MoXG4gICAgICAgIFwiZGl2XCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1jb2xvci1waWNrZXJfX3RyaWdnZXJcIixcbiAgICAgICAgICBvbjogeyBjbGljazogX3ZtLmhhbmRsZVRyaWdnZXIgfVxuICAgICAgICB9LFxuICAgICAgICBbXG4gICAgICAgICAgX2MoXG4gICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtY29sb3ItcGlja2VyX19jb2xvclwiLFxuICAgICAgICAgICAgICBjbGFzczogeyBcImlzLWFscGhhXCI6IF92bS5zaG93QWxwaGEgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX2MoXCJzcGFuXCIsIHtcbiAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1jb2xvci1waWNrZXJfX2NvbG9yLWlubmVyXCIsXG4gICAgICAgICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogX3ZtLmRpc3BsYXllZENvbG9yXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgIV92bS52YWx1ZSAmJiAhX3ZtLnNob3dQYW5lbENvbG9yXG4gICAgICAgICAgICAgICAgPyBfYyhcInNwYW5cIiwge1xuICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1jb2xvci1waWNrZXJfX2VtcHR5IGVsLWljb24tY2xvc2VcIlxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgICAgICBdXG4gICAgICAgICAgKSxcbiAgICAgICAgICBfYyhcInNwYW5cIiwge1xuICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLnZhbHVlIHx8IF92bS5zaG93UGFuZWxDb2xvcixcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcInZhbHVlIHx8IHNob3dQYW5lbENvbG9yXCJcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWNvbG9yLXBpY2tlcl9faWNvbiBlbC1pY29uLWFycm93LWRvd25cIlxuICAgICAgICAgIH0pXG4gICAgICAgIF1cbiAgICAgICksXG4gICAgICBfYyhcInBpY2tlci1kcm9wZG93blwiLCB7XG4gICAgICAgIHJlZjogXCJkcm9wZG93blwiLFxuICAgICAgICBjbGFzczogW1wiZWwtY29sb3ItcGlja2VyX19wYW5lbFwiLCBfdm0ucG9wcGVyQ2xhc3MgfHwgXCJcIl0sXG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgY29sb3I6IF92bS5jb2xvcixcbiAgICAgICAgICBcInNob3ctYWxwaGFcIjogX3ZtLnNob3dBbHBoYSxcbiAgICAgICAgICBwcmVkZWZpbmU6IF92bS5wcmVkZWZpbmVcbiAgICAgICAgfSxcbiAgICAgICAgb246IHsgcGljazogX3ZtLmNvbmZpcm1WYWx1ZSwgY2xlYXI6IF92bS5jbGVhclZhbHVlIH0sXG4gICAgICAgIG1vZGVsOiB7XG4gICAgICAgICAgdmFsdWU6IF92bS5zaG93UGlja2VyLFxuICAgICAgICAgIGNhbGxiYWNrOiBmdW5jdGlvbigkJHYpIHtcbiAgICAgICAgICAgIF92bS5zaG93UGlja2VyID0gJCR2XG4gICAgICAgICAgfSxcbiAgICAgICAgICBleHByZXNzaW9uOiBcInNob3dQaWNrZXJcIlxuICAgICAgICB9XG4gICAgICB9KVxuICAgIF0sXG4gICAgMVxuICApXG59XG52YXIgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzU1YzhhZGU3X3N0YXRpY1JlbmRlckZucyA9IFtdXG5tYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfNTVjOGFkZTdfcmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jb2xvci1waWNrZXIvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTU1YzhhZGU3JlxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2NvbG9yLXBpY2tlci9zcmMvY29sb3IuanNcbnZhciBjb2xvcl90eXBlb2YgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIiA/IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH0gOiBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9O1xuXG5mdW5jdGlvbiBjb2xvcl9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbnZhciBoc3YyaHNsID0gZnVuY3Rpb24gaHN2MmhzbChodWUsIHNhdCwgdmFsKSB7XG4gIHJldHVybiBbaHVlLCBzYXQgKiB2YWwgLyAoKGh1ZSA9ICgyIC0gc2F0KSAqIHZhbCkgPCAxID8gaHVlIDogMiAtIGh1ZSkgfHwgMCwgaHVlIC8gMl07XG59O1xuXG4vLyBOZWVkIHRvIGhhbmRsZSAxLjAgYXMgMTAwJSwgc2luY2Ugb25jZSBpdCBpcyBhIG51bWJlciwgdGhlcmUgaXMgbm8gZGlmZmVyZW5jZSBiZXR3ZWVuIGl0IGFuZCAxXG4vLyA8aHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy83NDIyMDcyL2phdmFzY3JpcHQtaG93LXRvLWRldGVjdC1udW1iZXItYXMtYS1kZWNpbWFsLWluY2x1ZGluZy0xLTA+XG52YXIgaXNPbmVQb2ludFplcm8gPSBmdW5jdGlvbiBpc09uZVBvaW50WmVybyhuKSB7XG4gIHJldHVybiB0eXBlb2YgbiA9PT0gJ3N0cmluZycgJiYgbi5pbmRleE9mKCcuJykgIT09IC0xICYmIHBhcnNlRmxvYXQobikgPT09IDE7XG59O1xuXG52YXIgaXNQZXJjZW50YWdlID0gZnVuY3Rpb24gaXNQZXJjZW50YWdlKG4pIHtcbiAgcmV0dXJuIHR5cGVvZiBuID09PSAnc3RyaW5nJyAmJiBuLmluZGV4T2YoJyUnKSAhPT0gLTE7XG59O1xuXG4vLyBUYWtlIGlucHV0IGZyb20gWzAsIG5dIGFuZCByZXR1cm4gaXQgYXMgWzAsIDFdXG52YXIgYm91bmQwMSA9IGZ1bmN0aW9uIGJvdW5kMDEodmFsdWUsIG1heCkge1xuICBpZiAoaXNPbmVQb2ludFplcm8odmFsdWUpKSB2YWx1ZSA9ICcxMDAlJztcblxuICB2YXIgcHJvY2Vzc1BlcmNlbnQgPSBpc1BlcmNlbnRhZ2UodmFsdWUpO1xuICB2YWx1ZSA9IE1hdGgubWluKG1heCwgTWF0aC5tYXgoMCwgcGFyc2VGbG9hdCh2YWx1ZSkpKTtcblxuICAvLyBBdXRvbWF0aWNhbGx5IGNvbnZlcnQgcGVyY2VudGFnZSBpbnRvIG51bWJlclxuICBpZiAocHJvY2Vzc1BlcmNlbnQpIHtcbiAgICB2YWx1ZSA9IHBhcnNlSW50KHZhbHVlICogbWF4LCAxMCkgLyAxMDA7XG4gIH1cblxuICAvLyBIYW5kbGUgZmxvYXRpbmcgcG9pbnQgcm91bmRpbmcgZXJyb3JzXG4gIGlmIChNYXRoLmFicyh2YWx1ZSAtIG1heCkgPCAwLjAwMDAwMSkge1xuICAgIHJldHVybiAxO1xuICB9XG5cbiAgLy8gQ29udmVydCBpbnRvIFswLCAxXSByYW5nZSBpZiBpdCBpc24ndCBhbHJlYWR5XG4gIHJldHVybiB2YWx1ZSAlIG1heCAvIHBhcnNlRmxvYXQobWF4KTtcbn07XG5cbnZhciBJTlRfSEVYX01BUCA9IHsgMTA6ICdBJywgMTE6ICdCJywgMTI6ICdDJywgMTM6ICdEJywgMTQ6ICdFJywgMTU6ICdGJyB9O1xuXG52YXIgdG9IZXggPSBmdW5jdGlvbiB0b0hleChfcmVmKSB7XG4gIHZhciByID0gX3JlZi5yLFxuICAgICAgZyA9IF9yZWYuZyxcbiAgICAgIGIgPSBfcmVmLmI7XG5cbiAgdmFyIGhleE9uZSA9IGZ1bmN0aW9uIGhleE9uZSh2YWx1ZSkge1xuICAgIHZhbHVlID0gTWF0aC5taW4oTWF0aC5yb3VuZCh2YWx1ZSksIDI1NSk7XG4gICAgdmFyIGhpZ2ggPSBNYXRoLmZsb29yKHZhbHVlIC8gMTYpO1xuICAgIHZhciBsb3cgPSB2YWx1ZSAlIDE2O1xuICAgIHJldHVybiAnJyArIChJTlRfSEVYX01BUFtoaWdoXSB8fCBoaWdoKSArIChJTlRfSEVYX01BUFtsb3ddIHx8IGxvdyk7XG4gIH07XG5cbiAgaWYgKGlzTmFOKHIpIHx8IGlzTmFOKGcpIHx8IGlzTmFOKGIpKSByZXR1cm4gJyc7XG5cbiAgcmV0dXJuICcjJyArIGhleE9uZShyKSArIGhleE9uZShnKSArIGhleE9uZShiKTtcbn07XG5cbnZhciBIRVhfSU5UX01BUCA9IHsgQTogMTAsIEI6IDExLCBDOiAxMiwgRDogMTMsIEU6IDE0LCBGOiAxNSB9O1xuXG52YXIgcGFyc2VIZXhDaGFubmVsID0gZnVuY3Rpb24gcGFyc2VIZXhDaGFubmVsKGhleCkge1xuICBpZiAoaGV4Lmxlbmd0aCA9PT0gMikge1xuICAgIHJldHVybiAoSEVYX0lOVF9NQVBbaGV4WzBdLnRvVXBwZXJDYXNlKCldIHx8ICtoZXhbMF0pICogMTYgKyAoSEVYX0lOVF9NQVBbaGV4WzFdLnRvVXBwZXJDYXNlKCldIHx8ICtoZXhbMV0pO1xuICB9XG5cbiAgcmV0dXJuIEhFWF9JTlRfTUFQW2hleFsxXS50b1VwcGVyQ2FzZSgpXSB8fCAraGV4WzFdO1xufTtcblxudmFyIGhzbDJoc3YgPSBmdW5jdGlvbiBoc2wyaHN2KGh1ZSwgc2F0LCBsaWdodCkge1xuICBzYXQgPSBzYXQgLyAxMDA7XG4gIGxpZ2h0ID0gbGlnaHQgLyAxMDA7XG4gIHZhciBzbWluID0gc2F0O1xuICB2YXIgbG1pbiA9IE1hdGgubWF4KGxpZ2h0LCAwLjAxKTtcbiAgdmFyIHN2ID0gdm9pZCAwO1xuICB2YXIgdiA9IHZvaWQgMDtcblxuICBsaWdodCAqPSAyO1xuICBzYXQgKj0gbGlnaHQgPD0gMSA/IGxpZ2h0IDogMiAtIGxpZ2h0O1xuICBzbWluICo9IGxtaW4gPD0gMSA/IGxtaW4gOiAyIC0gbG1pbjtcbiAgdiA9IChsaWdodCArIHNhdCkgLyAyO1xuICBzdiA9IGxpZ2h0ID09PSAwID8gMiAqIHNtaW4gLyAobG1pbiArIHNtaW4pIDogMiAqIHNhdCAvIChsaWdodCArIHNhdCk7XG5cbiAgcmV0dXJuIHtcbiAgICBoOiBodWUsXG4gICAgczogc3YgKiAxMDAsXG4gICAgdjogdiAqIDEwMFxuICB9O1xufTtcblxuLy8gYHJnYlRvSHN2YFxuLy8gQ29udmVydHMgYW4gUkdCIGNvbG9yIHZhbHVlIHRvIEhTVlxuLy8gKkFzc3VtZXM6KiByLCBnLCBhbmQgYiBhcmUgY29udGFpbmVkIGluIHRoZSBzZXQgWzAsIDI1NV0gb3IgWzAsIDFdXG4vLyAqUmV0dXJuczoqIHsgaCwgcywgdiB9IGluIFswLDFdXG52YXIgcmdiMmhzdiA9IGZ1bmN0aW9uIHJnYjJoc3YociwgZywgYikge1xuICByID0gYm91bmQwMShyLCAyNTUpO1xuICBnID0gYm91bmQwMShnLCAyNTUpO1xuICBiID0gYm91bmQwMShiLCAyNTUpO1xuXG4gIHZhciBtYXggPSBNYXRoLm1heChyLCBnLCBiKTtcbiAgdmFyIG1pbiA9IE1hdGgubWluKHIsIGcsIGIpO1xuICB2YXIgaCA9IHZvaWQgMCxcbiAgICAgIHMgPSB2b2lkIDA7XG4gIHZhciB2ID0gbWF4O1xuXG4gIHZhciBkID0gbWF4IC0gbWluO1xuICBzID0gbWF4ID09PSAwID8gMCA6IGQgLyBtYXg7XG5cbiAgaWYgKG1heCA9PT0gbWluKSB7XG4gICAgaCA9IDA7IC8vIGFjaHJvbWF0aWNcbiAgfSBlbHNlIHtcbiAgICBzd2l0Y2ggKG1heCkge1xuICAgICAgY2FzZSByOlxuICAgICAgICBoID0gKGcgLSBiKSAvIGQgKyAoZyA8IGIgPyA2IDogMCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBnOlxuICAgICAgICBoID0gKGIgLSByKSAvIGQgKyAyO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgYjpcbiAgICAgICAgaCA9IChyIC0gZykgLyBkICsgNDtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGggLz0gNjtcbiAgfVxuXG4gIHJldHVybiB7IGg6IGggKiAzNjAsIHM6IHMgKiAxMDAsIHY6IHYgKiAxMDAgfTtcbn07XG5cbi8vIGBoc3ZUb1JnYmBcbi8vIENvbnZlcnRzIGFuIEhTViBjb2xvciB2YWx1ZSB0byBSR0IuXG4vLyAqQXNzdW1lczoqIGggaXMgY29udGFpbmVkIGluIFswLCAxXSBvciBbMCwgMzYwXSBhbmQgcyBhbmQgdiBhcmUgY29udGFpbmVkIGluIFswLCAxXSBvciBbMCwgMTAwXVxuLy8gKlJldHVybnM6KiB7IHIsIGcsIGIgfSBpbiB0aGUgc2V0IFswLCAyNTVdXG52YXIgaHN2MnJnYiA9IGZ1bmN0aW9uIGhzdjJyZ2IoaCwgcywgdikge1xuICBoID0gYm91bmQwMShoLCAzNjApICogNjtcbiAgcyA9IGJvdW5kMDEocywgMTAwKTtcbiAgdiA9IGJvdW5kMDEodiwgMTAwKTtcblxuICB2YXIgaSA9IE1hdGguZmxvb3IoaCk7XG4gIHZhciBmID0gaCAtIGk7XG4gIHZhciBwID0gdiAqICgxIC0gcyk7XG4gIHZhciBxID0gdiAqICgxIC0gZiAqIHMpO1xuICB2YXIgdCA9IHYgKiAoMSAtICgxIC0gZikgKiBzKTtcbiAgdmFyIG1vZCA9IGkgJSA2O1xuICB2YXIgciA9IFt2LCBxLCBwLCBwLCB0LCB2XVttb2RdO1xuICB2YXIgZyA9IFt0LCB2LCB2LCBxLCBwLCBwXVttb2RdO1xuICB2YXIgYiA9IFtwLCBwLCB0LCB2LCB2LCBxXVttb2RdO1xuXG4gIHJldHVybiB7XG4gICAgcjogTWF0aC5yb3VuZChyICogMjU1KSxcbiAgICBnOiBNYXRoLnJvdW5kKGcgKiAyNTUpLFxuICAgIGI6IE1hdGgucm91bmQoYiAqIDI1NSlcbiAgfTtcbn07XG5cbnZhciBDb2xvciA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gQ29sb3Iob3B0aW9ucykge1xuICAgIGNvbG9yX2NsYXNzQ2FsbENoZWNrKHRoaXMsIENvbG9yKTtcblxuICAgIHRoaXMuX2h1ZSA9IDA7XG4gICAgdGhpcy5fc2F0dXJhdGlvbiA9IDEwMDtcbiAgICB0aGlzLl92YWx1ZSA9IDEwMDtcbiAgICB0aGlzLl9hbHBoYSA9IDEwMDtcblxuICAgIHRoaXMuZW5hYmxlQWxwaGEgPSBmYWxzZTtcbiAgICB0aGlzLmZvcm1hdCA9ICdoZXgnO1xuICAgIHRoaXMudmFsdWUgPSAnJztcblxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgZm9yICh2YXIgb3B0aW9uIGluIG9wdGlvbnMpIHtcbiAgICAgIGlmIChvcHRpb25zLmhhc093blByb3BlcnR5KG9wdGlvbikpIHtcbiAgICAgICAgdGhpc1tvcHRpb25dID0gb3B0aW9uc1tvcHRpb25dO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuZG9PbkNoYW5nZSgpO1xuICB9XG5cbiAgQ29sb3IucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIHNldChwcm9wLCB2YWx1ZSkge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxICYmICh0eXBlb2YgcHJvcCA9PT0gJ3VuZGVmaW5lZCcgPyAndW5kZWZpbmVkJyA6IGNvbG9yX3R5cGVvZihwcm9wKSkgPT09ICdvYmplY3QnKSB7XG4gICAgICBmb3IgKHZhciBwIGluIHByb3ApIHtcbiAgICAgICAgaWYgKHByb3AuaGFzT3duUHJvcGVydHkocCkpIHtcbiAgICAgICAgICB0aGlzLnNldChwLCBwcm9wW3BdKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpc1snXycgKyBwcm9wXSA9IHZhbHVlO1xuICAgIHRoaXMuZG9PbkNoYW5nZSgpO1xuICB9O1xuXG4gIENvbG9yLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiBnZXQocHJvcCkge1xuICAgIHJldHVybiB0aGlzWydfJyArIHByb3BdO1xuICB9O1xuXG4gIENvbG9yLnByb3RvdHlwZS50b1JnYiA9IGZ1bmN0aW9uIHRvUmdiKCkge1xuICAgIHJldHVybiBoc3YycmdiKHRoaXMuX2h1ZSwgdGhpcy5fc2F0dXJhdGlvbiwgdGhpcy5fdmFsdWUpO1xuICB9O1xuXG4gIENvbG9yLnByb3RvdHlwZS5mcm9tU3RyaW5nID0gZnVuY3Rpb24gZnJvbVN0cmluZyh2YWx1ZSkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICB0aGlzLl9odWUgPSAwO1xuICAgICAgdGhpcy5fc2F0dXJhdGlvbiA9IDEwMDtcbiAgICAgIHRoaXMuX3ZhbHVlID0gMTAwO1xuXG4gICAgICB0aGlzLmRvT25DaGFuZ2UoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgZnJvbUhTViA9IGZ1bmN0aW9uIGZyb21IU1YoaCwgcywgdikge1xuICAgICAgX3RoaXMuX2h1ZSA9IE1hdGgubWF4KDAsIE1hdGgubWluKDM2MCwgaCkpO1xuICAgICAgX3RoaXMuX3NhdHVyYXRpb24gPSBNYXRoLm1heCgwLCBNYXRoLm1pbigxMDAsIHMpKTtcbiAgICAgIF90aGlzLl92YWx1ZSA9IE1hdGgubWF4KDAsIE1hdGgubWluKDEwMCwgdikpO1xuXG4gICAgICBfdGhpcy5kb09uQ2hhbmdlKCk7XG4gICAgfTtcblxuICAgIGlmICh2YWx1ZS5pbmRleE9mKCdoc2wnKSAhPT0gLTEpIHtcbiAgICAgIHZhciBwYXJ0cyA9IHZhbHVlLnJlcGxhY2UoL2hzbGF8aHNsfFxcKHxcXCkvZ20sICcnKS5zcGxpdCgvXFxzfCwvZykuZmlsdGVyKGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgcmV0dXJuIHZhbCAhPT0gJyc7XG4gICAgICB9KS5tYXAoZnVuY3Rpb24gKHZhbCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGluZGV4ID4gMiA/IHBhcnNlRmxvYXQodmFsKSA6IHBhcnNlSW50KHZhbCwgMTApO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChwYXJ0cy5sZW5ndGggPT09IDQpIHtcbiAgICAgICAgdGhpcy5fYWxwaGEgPSBNYXRoLmZsb29yKHBhcnNlRmxvYXQocGFydHNbM10pICogMTAwKTtcbiAgICAgIH0gZWxzZSBpZiAocGFydHMubGVuZ3RoID09PSAzKSB7XG4gICAgICAgIHRoaXMuX2FscGhhID0gMTAwO1xuICAgICAgfVxuICAgICAgaWYgKHBhcnRzLmxlbmd0aCA+PSAzKSB7XG4gICAgICAgIHZhciBfaHNsMmhzdiA9IGhzbDJoc3YocGFydHNbMF0sIHBhcnRzWzFdLCBwYXJ0c1syXSksXG4gICAgICAgICAgICBoID0gX2hzbDJoc3YuaCxcbiAgICAgICAgICAgIHMgPSBfaHNsMmhzdi5zLFxuICAgICAgICAgICAgdiA9IF9oc2wyaHN2LnY7XG5cbiAgICAgICAgZnJvbUhTVihoLCBzLCB2KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHZhbHVlLmluZGV4T2YoJ2hzdicpICE9PSAtMSkge1xuICAgICAgdmFyIF9wYXJ0cyA9IHZhbHVlLnJlcGxhY2UoL2hzdmF8aHN2fFxcKHxcXCkvZ20sICcnKS5zcGxpdCgvXFxzfCwvZykuZmlsdGVyKGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgcmV0dXJuIHZhbCAhPT0gJyc7XG4gICAgICB9KS5tYXAoZnVuY3Rpb24gKHZhbCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGluZGV4ID4gMiA/IHBhcnNlRmxvYXQodmFsKSA6IHBhcnNlSW50KHZhbCwgMTApO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChfcGFydHMubGVuZ3RoID09PSA0KSB7XG4gICAgICAgIHRoaXMuX2FscGhhID0gTWF0aC5mbG9vcihwYXJzZUZsb2F0KF9wYXJ0c1szXSkgKiAxMDApO1xuICAgICAgfSBlbHNlIGlmIChfcGFydHMubGVuZ3RoID09PSAzKSB7XG4gICAgICAgIHRoaXMuX2FscGhhID0gMTAwO1xuICAgICAgfVxuICAgICAgaWYgKF9wYXJ0cy5sZW5ndGggPj0gMykge1xuICAgICAgICBmcm9tSFNWKF9wYXJ0c1swXSwgX3BhcnRzWzFdLCBfcGFydHNbMl0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodmFsdWUuaW5kZXhPZigncmdiJykgIT09IC0xKSB7XG4gICAgICB2YXIgX3BhcnRzMiA9IHZhbHVlLnJlcGxhY2UoL3JnYmF8cmdifFxcKHxcXCkvZ20sICcnKS5zcGxpdCgvXFxzfCwvZykuZmlsdGVyKGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgcmV0dXJuIHZhbCAhPT0gJyc7XG4gICAgICB9KS5tYXAoZnVuY3Rpb24gKHZhbCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGluZGV4ID4gMiA/IHBhcnNlRmxvYXQodmFsKSA6IHBhcnNlSW50KHZhbCwgMTApO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChfcGFydHMyLmxlbmd0aCA9PT0gNCkge1xuICAgICAgICB0aGlzLl9hbHBoYSA9IE1hdGguZmxvb3IocGFyc2VGbG9hdChfcGFydHMyWzNdKSAqIDEwMCk7XG4gICAgICB9IGVsc2UgaWYgKF9wYXJ0czIubGVuZ3RoID09PSAzKSB7XG4gICAgICAgIHRoaXMuX2FscGhhID0gMTAwO1xuICAgICAgfVxuICAgICAgaWYgKF9wYXJ0czIubGVuZ3RoID49IDMpIHtcbiAgICAgICAgdmFyIF9yZ2IyaHN2ID0gcmdiMmhzdihfcGFydHMyWzBdLCBfcGFydHMyWzFdLCBfcGFydHMyWzJdKSxcbiAgICAgICAgICAgIF9oID0gX3JnYjJoc3YuaCxcbiAgICAgICAgICAgIF9zID0gX3JnYjJoc3YucyxcbiAgICAgICAgICAgIF92ID0gX3JnYjJoc3YudjtcblxuICAgICAgICBmcm9tSFNWKF9oLCBfcywgX3YpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodmFsdWUuaW5kZXhPZignIycpICE9PSAtMSkge1xuICAgICAgdmFyIGhleCA9IHZhbHVlLnJlcGxhY2UoJyMnLCAnJykudHJpbSgpO1xuICAgICAgaWYgKCEvXig/OlswLTlhLWZBLUZdezN9KXsxLDJ9fFswLTlhLWZBLUZdezh9JC8udGVzdChoZXgpKSByZXR1cm47XG4gICAgICB2YXIgciA9IHZvaWQgMCxcbiAgICAgICAgICBnID0gdm9pZCAwLFxuICAgICAgICAgIGIgPSB2b2lkIDA7XG5cbiAgICAgIGlmIChoZXgubGVuZ3RoID09PSAzKSB7XG4gICAgICAgIHIgPSBwYXJzZUhleENoYW5uZWwoaGV4WzBdICsgaGV4WzBdKTtcbiAgICAgICAgZyA9IHBhcnNlSGV4Q2hhbm5lbChoZXhbMV0gKyBoZXhbMV0pO1xuICAgICAgICBiID0gcGFyc2VIZXhDaGFubmVsKGhleFsyXSArIGhleFsyXSk7XG4gICAgICB9IGVsc2UgaWYgKGhleC5sZW5ndGggPT09IDYgfHwgaGV4Lmxlbmd0aCA9PT0gOCkge1xuICAgICAgICByID0gcGFyc2VIZXhDaGFubmVsKGhleC5zdWJzdHJpbmcoMCwgMikpO1xuICAgICAgICBnID0gcGFyc2VIZXhDaGFubmVsKGhleC5zdWJzdHJpbmcoMiwgNCkpO1xuICAgICAgICBiID0gcGFyc2VIZXhDaGFubmVsKGhleC5zdWJzdHJpbmcoNCwgNikpO1xuICAgICAgfVxuXG4gICAgICBpZiAoaGV4Lmxlbmd0aCA9PT0gOCkge1xuICAgICAgICB0aGlzLl9hbHBoYSA9IE1hdGguZmxvb3IocGFyc2VIZXhDaGFubmVsKGhleC5zdWJzdHJpbmcoNikpIC8gMjU1ICogMTAwKTtcbiAgICAgIH0gZWxzZSBpZiAoaGV4Lmxlbmd0aCA9PT0gMyB8fCBoZXgubGVuZ3RoID09PSA2KSB7XG4gICAgICAgIHRoaXMuX2FscGhhID0gMTAwO1xuICAgICAgfVxuXG4gICAgICB2YXIgX3JnYjJoc3YyID0gcmdiMmhzdihyLCBnLCBiKSxcbiAgICAgICAgICBfaDIgPSBfcmdiMmhzdjIuaCxcbiAgICAgICAgICBfczIgPSBfcmdiMmhzdjIucyxcbiAgICAgICAgICBfdjIgPSBfcmdiMmhzdjIudjtcblxuICAgICAgZnJvbUhTVihfaDIsIF9zMiwgX3YyKTtcbiAgICB9XG4gIH07XG5cbiAgQ29sb3IucHJvdG90eXBlLmNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlKGNvbG9yKSB7XG4gICAgcmV0dXJuIE1hdGguYWJzKGNvbG9yLl9odWUgLSB0aGlzLl9odWUpIDwgMiAmJiBNYXRoLmFicyhjb2xvci5fc2F0dXJhdGlvbiAtIHRoaXMuX3NhdHVyYXRpb24pIDwgMSAmJiBNYXRoLmFicyhjb2xvci5fdmFsdWUgLSB0aGlzLl92YWx1ZSkgPCAxICYmIE1hdGguYWJzKGNvbG9yLl9hbHBoYSAtIHRoaXMuX2FscGhhKSA8IDE7XG4gIH07XG5cbiAgQ29sb3IucHJvdG90eXBlLmRvT25DaGFuZ2UgPSBmdW5jdGlvbiBkb09uQ2hhbmdlKCkge1xuICAgIHZhciBfaHVlID0gdGhpcy5faHVlLFxuICAgICAgICBfc2F0dXJhdGlvbiA9IHRoaXMuX3NhdHVyYXRpb24sXG4gICAgICAgIF92YWx1ZSA9IHRoaXMuX3ZhbHVlLFxuICAgICAgICBfYWxwaGEgPSB0aGlzLl9hbHBoYSxcbiAgICAgICAgZm9ybWF0ID0gdGhpcy5mb3JtYXQ7XG5cblxuICAgIGlmICh0aGlzLmVuYWJsZUFscGhhKSB7XG4gICAgICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgICAgICBjYXNlICdoc2wnOlxuICAgICAgICAgIHZhciBoc2wgPSBoc3YyaHNsKF9odWUsIF9zYXR1cmF0aW9uIC8gMTAwLCBfdmFsdWUgLyAxMDApO1xuICAgICAgICAgIHRoaXMudmFsdWUgPSAnaHNsYSgnICsgX2h1ZSArICcsICcgKyBNYXRoLnJvdW5kKGhzbFsxXSAqIDEwMCkgKyAnJSwgJyArIE1hdGgucm91bmQoaHNsWzJdICogMTAwKSArICclLCAnICsgX2FscGhhIC8gMTAwICsgJyknO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdoc3YnOlxuICAgICAgICAgIHRoaXMudmFsdWUgPSAnaHN2YSgnICsgX2h1ZSArICcsICcgKyBNYXRoLnJvdW5kKF9zYXR1cmF0aW9uKSArICclLCAnICsgTWF0aC5yb3VuZChfdmFsdWUpICsgJyUsICcgKyBfYWxwaGEgLyAxMDAgKyAnKSc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdmFyIF9oc3YycmdiID0gaHN2MnJnYihfaHVlLCBfc2F0dXJhdGlvbiwgX3ZhbHVlKSxcbiAgICAgICAgICAgICAgciA9IF9oc3YycmdiLnIsXG4gICAgICAgICAgICAgIGcgPSBfaHN2MnJnYi5nLFxuICAgICAgICAgICAgICBiID0gX2hzdjJyZ2IuYjtcblxuICAgICAgICAgIHRoaXMudmFsdWUgPSAncmdiYSgnICsgciArICcsICcgKyBnICsgJywgJyArIGIgKyAnLCAnICsgX2FscGhhIC8gMTAwICsgJyknO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgICAgICBjYXNlICdoc2wnOlxuICAgICAgICAgIHZhciBfaHNsID0gaHN2MmhzbChfaHVlLCBfc2F0dXJhdGlvbiAvIDEwMCwgX3ZhbHVlIC8gMTAwKTtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gJ2hzbCgnICsgX2h1ZSArICcsICcgKyBNYXRoLnJvdW5kKF9oc2xbMV0gKiAxMDApICsgJyUsICcgKyBNYXRoLnJvdW5kKF9oc2xbMl0gKiAxMDApICsgJyUpJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnaHN2JzpcbiAgICAgICAgICB0aGlzLnZhbHVlID0gJ2hzdignICsgX2h1ZSArICcsICcgKyBNYXRoLnJvdW5kKF9zYXR1cmF0aW9uKSArICclLCAnICsgTWF0aC5yb3VuZChfdmFsdWUpICsgJyUpJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncmdiJzpcbiAgICAgICAgICB2YXIgX2hzdjJyZ2IyID0gaHN2MnJnYihfaHVlLCBfc2F0dXJhdGlvbiwgX3ZhbHVlKSxcbiAgICAgICAgICAgICAgX3IgPSBfaHN2MnJnYjIucixcbiAgICAgICAgICAgICAgX2cgPSBfaHN2MnJnYjIuZyxcbiAgICAgICAgICAgICAgX2IgPSBfaHN2MnJnYjIuYjtcblxuICAgICAgICAgIHRoaXMudmFsdWUgPSAncmdiKCcgKyBfciArICcsICcgKyBfZyArICcsICcgKyBfYiArICcpJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aGlzLnZhbHVlID0gdG9IZXgoaHN2MnJnYihfaHVlLCBfc2F0dXJhdGlvbiwgX3ZhbHVlKSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBDb2xvcjtcbn0oKTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX2NvbG9yID0gKENvbG9yKTtcbjtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvY29sb3ItcGlja2VyL3NyYy9jb21wb25lbnRzL3BpY2tlci1kcm9wZG93bi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MDY2MDE2MjUmXG52YXIgcGlja2VyX2Ryb3Bkb3dudnVlX3R5cGVfdGVtcGxhdGVfaWRfMDY2MDE2MjVfcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwidHJhbnNpdGlvblwiLFxuICAgIHsgYXR0cnM6IHsgbmFtZTogXCJlbC16b29tLWluLXRvcFwiIH0sIG9uOiB7IFwiYWZ0ZXItbGVhdmVcIjogX3ZtLmRvRGVzdHJveSB9IH0sXG4gICAgW1xuICAgICAgX2MoXG4gICAgICAgIFwiZGl2XCIsXG4gICAgICAgIHtcbiAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgICB2YWx1ZTogX3ZtLnNob3dQb3BwZXIsXG4gICAgICAgICAgICAgIGV4cHJlc3Npb246IFwic2hvd1BvcHBlclwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXSxcbiAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1jb2xvci1kcm9wZG93blwiXG4gICAgICAgIH0sXG4gICAgICAgIFtcbiAgICAgICAgICBfYyhcbiAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiBcImVsLWNvbG9yLWRyb3Bkb3duX19tYWluLXdyYXBwZXJcIiB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfYyhcImh1ZS1zbGlkZXJcIiwge1xuICAgICAgICAgICAgICAgIHJlZjogXCJodWVcIixcbiAgICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogeyBmbG9hdDogXCJyaWdodFwiIH0sXG4gICAgICAgICAgICAgICAgYXR0cnM6IHsgY29sb3I6IF92bS5jb2xvciwgdmVydGljYWw6IFwiXCIgfVxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgX2MoXCJzdi1wYW5lbFwiLCB7IHJlZjogXCJzbFwiLCBhdHRyczogeyBjb2xvcjogX3ZtLmNvbG9yIH0gfSlcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAxXG4gICAgICAgICAgKSxcbiAgICAgICAgICBfdm0uc2hvd0FscGhhXG4gICAgICAgICAgICA/IF9jKFwiYWxwaGEtc2xpZGVyXCIsIHsgcmVmOiBcImFscGhhXCIsIGF0dHJzOiB7IGNvbG9yOiBfdm0uY29sb3IgfSB9KVxuICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICBfdm0ucHJlZGVmaW5lXG4gICAgICAgICAgICA/IF9jKFwicHJlZGVmaW5lXCIsIHtcbiAgICAgICAgICAgICAgICBhdHRyczogeyBjb2xvcjogX3ZtLmNvbG9yLCBjb2xvcnM6IF92bS5wcmVkZWZpbmUgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICBfYyhcbiAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiBcImVsLWNvbG9yLWRyb3Bkb3duX19idG5zXCIgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJlbC1jb2xvci1kcm9wZG93bl9fdmFsdWVcIiB9LFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgIF9jKFwiZWwtaW5wdXRcIiwge1xuICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBcInZhbGlkYXRlLWV2ZW50XCI6IGZhbHNlLCBzaXplOiBcIm1pbmlcIiB9LFxuICAgICAgICAgICAgICAgICAgICBvbjogeyBibHVyOiBfdm0uaGFuZGxlQ29uZmlybSB9LFxuICAgICAgICAgICAgICAgICAgICBuYXRpdmVPbjoge1xuICAgICAgICAgICAgICAgICAgICAgIGtleXVwOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIShcImJ1dHRvblwiIGluICRldmVudCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl9rKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudC5rZXlDb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZW50ZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnQua2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiRW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0uaGFuZGxlQ29uZmlybSgkZXZlbnQpXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBtb2RlbDoge1xuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0uY3VzdG9tSW5wdXQsXG4gICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IGZ1bmN0aW9uKCQkdikge1xuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLmN1c3RvbUlucHV0ID0gJCR2XG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcImN1c3RvbUlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgXCJlbC1idXR0b25cIixcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1jb2xvci1kcm9wZG93bl9fbGluay1idG5cIixcbiAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHNpemU6IFwibWluaVwiLCB0eXBlOiBcInRleHRcIiB9LFxuICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgIF92bS4kZW1pdChcImNsZWFyXCIpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgIF92bS5fdihcbiAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICBfdm0uX3MoX3ZtLnQoXCJlbC5jb2xvcnBpY2tlci5jbGVhclwiKSkgK1xuICAgICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgIFwiZWwtYnV0dG9uXCIsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtY29sb3ItZHJvcGRvd25fX2J0blwiLFxuICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgcGxhaW46IFwiXCIsIHNpemU6IFwibWluaVwiIH0sXG4gICAgICAgICAgICAgICAgICBvbjogeyBjbGljazogX3ZtLmNvbmZpcm1WYWx1ZSB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgX3ZtLl9zKF92bS50KFwiZWwuY29sb3JwaWNrZXIuY29uZmlybVwiKSkgK1xuICAgICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAxXG4gICAgICAgICAgKVxuICAgICAgICBdLFxuICAgICAgICAxXG4gICAgICApXG4gICAgXVxuICApXG59XG52YXIgcGlja2VyX2Ryb3Bkb3dudnVlX3R5cGVfdGVtcGxhdGVfaWRfMDY2MDE2MjVfc3RhdGljUmVuZGVyRm5zID0gW11cbnBpY2tlcl9kcm9wZG93bnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzA2NjAxNjI1X3JlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY29sb3ItcGlja2VyL3NyYy9jb21wb25lbnRzL3BpY2tlci1kcm9wZG93bi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MDY2MDE2MjUmXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvY29sb3ItcGlja2VyL3NyYy9jb21wb25lbnRzL3N2LXBhbmVsLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1kODU4MzU5NiZcbnZhciBzdl9wYW5lbHZ1ZV90eXBlX3RlbXBsYXRlX2lkX2Q4NTgzNTk2X3JlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHtcbiAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWNvbG9yLXN2cGFuZWxcIixcbiAgICAgIHN0eWxlOiB7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogX3ZtLmJhY2tncm91bmRcbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiZWwtY29sb3Itc3ZwYW5lbF9fd2hpdGVcIiB9KSxcbiAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiZWwtY29sb3Itc3ZwYW5lbF9fYmxhY2tcIiB9KSxcbiAgICAgIF9jKFxuICAgICAgICBcImRpdlwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtY29sb3Itc3ZwYW5lbF9fY3Vyc29yXCIsXG4gICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgIHRvcDogX3ZtLmN1cnNvclRvcCArIFwicHhcIixcbiAgICAgICAgICAgIGxlZnQ6IF92bS5jdXJzb3JMZWZ0ICsgXCJweFwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBbX2MoXCJkaXZcIildXG4gICAgICApXG4gICAgXVxuICApXG59XG52YXIgc3ZfcGFuZWx2dWVfdHlwZV90ZW1wbGF0ZV9pZF9kODU4MzU5Nl9zdGF0aWNSZW5kZXJGbnMgPSBbXVxuc3ZfcGFuZWx2dWVfdHlwZV90ZW1wbGF0ZV9pZF9kODU4MzU5Nl9yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2NvbG9yLXBpY2tlci9zcmMvY29tcG9uZW50cy9zdi1wYW5lbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZDg1ODM1OTYmXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY29sb3ItcGlja2VyL3NyYy9kcmFnZ2FibGUuanNcblxudmFyIGlzRHJhZ2dpbmcgPSBmYWxzZTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgZHJhZ2dhYmxlID0gKGZ1bmN0aW9uIChlbGVtZW50LCBvcHRpb25zKSB7XG4gIGlmIChleHRlcm5hbF92dWVfZGVmYXVsdC5hLnByb3RvdHlwZS4kaXNTZXJ2ZXIpIHJldHVybjtcbiAgdmFyIG1vdmVGbiA9IGZ1bmN0aW9uIG1vdmVGbihldmVudCkge1xuICAgIGlmIChvcHRpb25zLmRyYWcpIHtcbiAgICAgIG9wdGlvbnMuZHJhZyhldmVudCk7XG4gICAgfVxuICB9O1xuICB2YXIgdXBGbiA9IGZ1bmN0aW9uIHVwRm4oZXZlbnQpIHtcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBtb3ZlRm4pO1xuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB1cEZuKTtcbiAgICBkb2N1bWVudC5vbnNlbGVjdHN0YXJ0ID0gbnVsbDtcbiAgICBkb2N1bWVudC5vbmRyYWdzdGFydCA9IG51bGw7XG5cbiAgICBpc0RyYWdnaW5nID0gZmFsc2U7XG5cbiAgICBpZiAob3B0aW9ucy5lbmQpIHtcbiAgICAgIG9wdGlvbnMuZW5kKGV2ZW50KTtcbiAgICB9XG4gIH07XG4gIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgaWYgKGlzRHJhZ2dpbmcpIHJldHVybjtcbiAgICBkb2N1bWVudC5vbnNlbGVjdHN0YXJ0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gICAgZG9jdW1lbnQub25kcmFnc3RhcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcblxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIG1vdmVGbik7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHVwRm4pO1xuICAgIGlzRHJhZ2dpbmcgPSB0cnVlO1xuXG4gICAgaWYgKG9wdGlvbnMuc3RhcnQpIHtcbiAgICAgIG9wdGlvbnMuc3RhcnQoZXZlbnQpO1xuICAgIH1cbiAgfSk7XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2NvbG9yLXBpY2tlci9zcmMvY29tcG9uZW50cy9zdi1wYW5lbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHN2X3BhbmVsdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbmFtZTogJ2VsLXNsLXBhbmVsJyxcblxuICBwcm9wczoge1xuICAgIGNvbG9yOiB7XG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNvbG9yVmFsdWU6IGZ1bmN0aW9uIGNvbG9yVmFsdWUoKSB7XG4gICAgICB2YXIgaHVlID0gdGhpcy5jb2xvci5nZXQoJ2h1ZScpO1xuICAgICAgdmFyIHZhbHVlID0gdGhpcy5jb2xvci5nZXQoJ3ZhbHVlJyk7XG4gICAgICByZXR1cm4geyBodWU6IGh1ZSwgdmFsdWU6IHZhbHVlIH07XG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgY29sb3JWYWx1ZTogZnVuY3Rpb24gY29sb3JWYWx1ZSgpIHtcbiAgICAgIHRoaXMudXBkYXRlKCk7XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZSgpIHtcbiAgICAgIHZhciBzYXR1cmF0aW9uID0gdGhpcy5jb2xvci5nZXQoJ3NhdHVyYXRpb24nKTtcbiAgICAgIHZhciB2YWx1ZSA9IHRoaXMuY29sb3IuZ2V0KCd2YWx1ZScpO1xuXG4gICAgICB2YXIgZWwgPSB0aGlzLiRlbDtcbiAgICAgIHZhciB3aWR0aCA9IGVsLmNsaWVudFdpZHRoLFxuICAgICAgICAgIGhlaWdodCA9IGVsLmNsaWVudEhlaWdodDtcblxuXG4gICAgICB0aGlzLmN1cnNvckxlZnQgPSBzYXR1cmF0aW9uICogd2lkdGggLyAxMDA7XG4gICAgICB0aGlzLmN1cnNvclRvcCA9ICgxMDAgLSB2YWx1ZSkgKiBoZWlnaHQgLyAxMDA7XG5cbiAgICAgIHRoaXMuYmFja2dyb3VuZCA9ICdoc2woJyArIHRoaXMuY29sb3IuZ2V0KCdodWUnKSArICcsIDEwMCUsIDUwJSknO1xuICAgIH0sXG4gICAgaGFuZGxlRHJhZzogZnVuY3Rpb24gaGFuZGxlRHJhZyhldmVudCkge1xuICAgICAgdmFyIGVsID0gdGhpcy4kZWw7XG4gICAgICB2YXIgcmVjdCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICB2YXIgbGVmdCA9IGV2ZW50LmNsaWVudFggLSByZWN0LmxlZnQ7XG4gICAgICB2YXIgdG9wID0gZXZlbnQuY2xpZW50WSAtIHJlY3QudG9wO1xuICAgICAgbGVmdCA9IE1hdGgubWF4KDAsIGxlZnQpO1xuICAgICAgbGVmdCA9IE1hdGgubWluKGxlZnQsIHJlY3Qud2lkdGgpO1xuXG4gICAgICB0b3AgPSBNYXRoLm1heCgwLCB0b3ApO1xuICAgICAgdG9wID0gTWF0aC5taW4odG9wLCByZWN0LmhlaWdodCk7XG5cbiAgICAgIHRoaXMuY3Vyc29yTGVmdCA9IGxlZnQ7XG4gICAgICB0aGlzLmN1cnNvclRvcCA9IHRvcDtcbiAgICAgIHRoaXMuY29sb3Iuc2V0KHtcbiAgICAgICAgc2F0dXJhdGlvbjogbGVmdCAvIHJlY3Qud2lkdGggKiAxMDAsXG4gICAgICAgIHZhbHVlOiAxMDAgLSB0b3AgLyByZWN0LmhlaWdodCAqIDEwMFxuICAgICAgfSk7XG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIGRyYWdnYWJsZSh0aGlzLiRlbCwge1xuICAgICAgZHJhZzogZnVuY3Rpb24gZHJhZyhldmVudCkge1xuICAgICAgICBfdGhpcy5oYW5kbGVEcmFnKGV2ZW50KTtcbiAgICAgIH0sXG4gICAgICBlbmQ6IGZ1bmN0aW9uIGVuZChldmVudCkge1xuICAgICAgICBfdGhpcy5oYW5kbGVEcmFnKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMudXBkYXRlKCk7XG4gIH0sXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGN1cnNvclRvcDogMCxcbiAgICAgIGN1cnNvckxlZnQ6IDAsXG4gICAgICBiYWNrZ3JvdW5kOiAnaHNsKDAsIDEwMCUsIDUwJSknXG4gICAgfTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2NvbG9yLXBpY2tlci9zcmMvY29tcG9uZW50cy9zdi1wYW5lbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgY29tcG9uZW50c19zdl9wYW5lbHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChzdl9wYW5lbHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jb2xvci1waWNrZXIvc3JjL2NvbXBvbmVudHMvc3YtcGFuZWwudnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgc3ZfcGFuZWxfY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBjb21wb25lbnRzX3N2X3BhbmVsdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICBzdl9wYW5lbHZ1ZV90eXBlX3RlbXBsYXRlX2lkX2Q4NTgzNTk2X3JlbmRlcixcbiAgc3ZfcGFuZWx2dWVfdHlwZV90ZW1wbGF0ZV9pZF9kODU4MzU5Nl9zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIHN2X3BhbmVsX2FwaTsgfVxuc3ZfcGFuZWxfY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy9jb2xvci1waWNrZXIvc3JjL2NvbXBvbmVudHMvc3YtcGFuZWwudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHN2X3BhbmVsID0gKHN2X3BhbmVsX2NvbXBvbmVudC5leHBvcnRzKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvY29sb3ItcGlja2VyL3NyYy9jb21wb25lbnRzL2h1ZS1zbGlkZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTVjZGM0M2IxJlxudmFyIGh1ZV9zbGlkZXJ2dWVfdHlwZV90ZW1wbGF0ZV9pZF81Y2RjNDNiMV9yZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICB7XG4gICAgICBzdGF0aWNDbGFzczogXCJlbC1jb2xvci1odWUtc2xpZGVyXCIsXG4gICAgICBjbGFzczogeyBcImlzLXZlcnRpY2FsXCI6IF92bS52ZXJ0aWNhbCB9XG4gICAgfSxcbiAgICBbXG4gICAgICBfYyhcImRpdlwiLCB7XG4gICAgICAgIHJlZjogXCJiYXJcIixcbiAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtY29sb3ItaHVlLXNsaWRlcl9fYmFyXCIsXG4gICAgICAgIG9uOiB7IGNsaWNrOiBfdm0uaGFuZGxlQ2xpY2sgfVxuICAgICAgfSksXG4gICAgICBfYyhcImRpdlwiLCB7XG4gICAgICAgIHJlZjogXCJ0aHVtYlwiLFxuICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1jb2xvci1odWUtc2xpZGVyX190aHVtYlwiLFxuICAgICAgICBzdHlsZToge1xuICAgICAgICAgIGxlZnQ6IF92bS50aHVtYkxlZnQgKyBcInB4XCIsXG4gICAgICAgICAgdG9wOiBfdm0udGh1bWJUb3AgKyBcInB4XCJcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICBdXG4gIClcbn1cbnZhciBodWVfc2xpZGVydnVlX3R5cGVfdGVtcGxhdGVfaWRfNWNkYzQzYjFfc3RhdGljUmVuZGVyRm5zID0gW11cbmh1ZV9zbGlkZXJ2dWVfdHlwZV90ZW1wbGF0ZV9pZF81Y2RjNDNiMV9yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2NvbG9yLXBpY2tlci9zcmMvY29tcG9uZW50cy9odWUtc2xpZGVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01Y2RjNDNiMSZcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvY29sb3ItcGlja2VyL3NyYy9jb21wb25lbnRzL2h1ZS1zbGlkZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGh1ZV9zbGlkZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBuYW1lOiAnZWwtY29sb3ItaHVlLXNsaWRlcicsXG5cbiAgcHJvcHM6IHtcbiAgICBjb2xvcjoge1xuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuXG4gICAgdmVydGljYWw6IEJvb2xlYW5cbiAgfSxcblxuICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICB0aHVtYkxlZnQ6IDAsXG4gICAgICB0aHVtYlRvcDogMFxuICAgIH07XG4gIH0sXG5cblxuICBjb21wdXRlZDoge1xuICAgIGh1ZVZhbHVlOiBmdW5jdGlvbiBodWVWYWx1ZSgpIHtcbiAgICAgIHZhciBodWUgPSB0aGlzLmNvbG9yLmdldCgnaHVlJyk7XG4gICAgICByZXR1cm4gaHVlO1xuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIGh1ZVZhbHVlOiBmdW5jdGlvbiBodWVWYWx1ZSgpIHtcbiAgICAgIHRoaXMudXBkYXRlKCk7XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBoYW5kbGVDbGljazogZnVuY3Rpb24gaGFuZGxlQ2xpY2soZXZlbnQpIHtcbiAgICAgIHZhciB0aHVtYiA9IHRoaXMuJHJlZnMudGh1bWI7XG4gICAgICB2YXIgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuXG4gICAgICBpZiAodGFyZ2V0ICE9PSB0aHVtYikge1xuICAgICAgICB0aGlzLmhhbmRsZURyYWcoZXZlbnQpO1xuICAgICAgfVxuICAgIH0sXG4gICAgaGFuZGxlRHJhZzogZnVuY3Rpb24gaGFuZGxlRHJhZyhldmVudCkge1xuICAgICAgdmFyIHJlY3QgPSB0aGlzLiRlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIHZhciB0aHVtYiA9IHRoaXMuJHJlZnMudGh1bWI7XG5cbiAgICAgIHZhciBodWUgPSB2b2lkIDA7XG5cbiAgICAgIGlmICghdGhpcy52ZXJ0aWNhbCkge1xuICAgICAgICB2YXIgbGVmdCA9IGV2ZW50LmNsaWVudFggLSByZWN0LmxlZnQ7XG4gICAgICAgIGxlZnQgPSBNYXRoLm1pbihsZWZ0LCByZWN0LndpZHRoIC0gdGh1bWIub2Zmc2V0V2lkdGggLyAyKTtcbiAgICAgICAgbGVmdCA9IE1hdGgubWF4KHRodW1iLm9mZnNldFdpZHRoIC8gMiwgbGVmdCk7XG5cbiAgICAgICAgaHVlID0gTWF0aC5yb3VuZCgobGVmdCAtIHRodW1iLm9mZnNldFdpZHRoIC8gMikgLyAocmVjdC53aWR0aCAtIHRodW1iLm9mZnNldFdpZHRoKSAqIDM2MCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgdG9wID0gZXZlbnQuY2xpZW50WSAtIHJlY3QudG9wO1xuICAgICAgICB0b3AgPSBNYXRoLm1pbih0b3AsIHJlY3QuaGVpZ2h0IC0gdGh1bWIub2Zmc2V0SGVpZ2h0IC8gMik7XG4gICAgICAgIHRvcCA9IE1hdGgubWF4KHRodW1iLm9mZnNldEhlaWdodCAvIDIsIHRvcCk7XG5cbiAgICAgICAgaHVlID0gTWF0aC5yb3VuZCgodG9wIC0gdGh1bWIub2Zmc2V0SGVpZ2h0IC8gMikgLyAocmVjdC5oZWlnaHQgLSB0aHVtYi5vZmZzZXRIZWlnaHQpICogMzYwKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5jb2xvci5zZXQoJ2h1ZScsIGh1ZSk7XG4gICAgfSxcbiAgICBnZXRUaHVtYkxlZnQ6IGZ1bmN0aW9uIGdldFRodW1iTGVmdCgpIHtcbiAgICAgIGlmICh0aGlzLnZlcnRpY2FsKSByZXR1cm4gMDtcbiAgICAgIHZhciBlbCA9IHRoaXMuJGVsO1xuICAgICAgdmFyIGh1ZSA9IHRoaXMuY29sb3IuZ2V0KCdodWUnKTtcblxuICAgICAgaWYgKCFlbCkgcmV0dXJuIDA7XG4gICAgICB2YXIgdGh1bWIgPSB0aGlzLiRyZWZzLnRodW1iO1xuICAgICAgcmV0dXJuIE1hdGgucm91bmQoaHVlICogKGVsLm9mZnNldFdpZHRoIC0gdGh1bWIub2Zmc2V0V2lkdGggLyAyKSAvIDM2MCk7XG4gICAgfSxcbiAgICBnZXRUaHVtYlRvcDogZnVuY3Rpb24gZ2V0VGh1bWJUb3AoKSB7XG4gICAgICBpZiAoIXRoaXMudmVydGljYWwpIHJldHVybiAwO1xuICAgICAgdmFyIGVsID0gdGhpcy4kZWw7XG4gICAgICB2YXIgaHVlID0gdGhpcy5jb2xvci5nZXQoJ2h1ZScpO1xuXG4gICAgICBpZiAoIWVsKSByZXR1cm4gMDtcbiAgICAgIHZhciB0aHVtYiA9IHRoaXMuJHJlZnMudGh1bWI7XG4gICAgICByZXR1cm4gTWF0aC5yb3VuZChodWUgKiAoZWwub2Zmc2V0SGVpZ2h0IC0gdGh1bWIub2Zmc2V0SGVpZ2h0IC8gMikgLyAzNjApO1xuICAgIH0sXG4gICAgdXBkYXRlOiBmdW5jdGlvbiB1cGRhdGUoKSB7XG4gICAgICB0aGlzLnRodW1iTGVmdCA9IHRoaXMuZ2V0VGh1bWJMZWZ0KCk7XG4gICAgICB0aGlzLnRodW1iVG9wID0gdGhpcy5nZXRUaHVtYlRvcCgpO1xuICAgIH1cbiAgfSxcblxuICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB2YXIgXyRyZWZzID0gdGhpcy4kcmVmcyxcbiAgICAgICAgYmFyID0gXyRyZWZzLmJhcixcbiAgICAgICAgdGh1bWIgPSBfJHJlZnMudGh1bWI7XG5cblxuICAgIHZhciBkcmFnQ29uZmlnID0ge1xuICAgICAgZHJhZzogZnVuY3Rpb24gZHJhZyhldmVudCkge1xuICAgICAgICBfdGhpcy5oYW5kbGVEcmFnKGV2ZW50KTtcbiAgICAgIH0sXG4gICAgICBlbmQ6IGZ1bmN0aW9uIGVuZChldmVudCkge1xuICAgICAgICBfdGhpcy5oYW5kbGVEcmFnKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZHJhZ2dhYmxlKGJhciwgZHJhZ0NvbmZpZyk7XG4gICAgZHJhZ2dhYmxlKHRodW1iLCBkcmFnQ29uZmlnKTtcbiAgICB0aGlzLnVwZGF0ZSgpO1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY29sb3ItcGlja2VyL3NyYy9jb21wb25lbnRzL2h1ZS1zbGlkZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGNvbXBvbmVudHNfaHVlX3NsaWRlcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChodWVfc2xpZGVydnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2NvbG9yLXBpY2tlci9zcmMvY29tcG9uZW50cy9odWUtc2xpZGVyLnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGh1ZV9zbGlkZXJfY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBjb21wb25lbnRzX2h1ZV9zbGlkZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIGh1ZV9zbGlkZXJ2dWVfdHlwZV90ZW1wbGF0ZV9pZF81Y2RjNDNiMV9yZW5kZXIsXG4gIGh1ZV9zbGlkZXJ2dWVfdHlwZV90ZW1wbGF0ZV9pZF81Y2RjNDNiMV9zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGh1ZV9zbGlkZXJfYXBpOyB9XG5odWVfc2xpZGVyX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvY29sb3ItcGlja2VyL3NyYy9jb21wb25lbnRzL2h1ZS1zbGlkZXIudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGh1ZV9zbGlkZXIgPSAoaHVlX3NsaWRlcl9jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2NvbG9yLXBpY2tlci9zcmMvY29tcG9uZW50cy9hbHBoYS1zbGlkZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTA2OGM2NmNiJlxudmFyIGFscGhhX3NsaWRlcnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzA2OGM2NmNiX3JlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHtcbiAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWNvbG9yLWFscGhhLXNsaWRlclwiLFxuICAgICAgY2xhc3M6IHsgXCJpcy12ZXJ0aWNhbFwiOiBfdm0udmVydGljYWwgfVxuICAgIH0sXG4gICAgW1xuICAgICAgX2MoXCJkaXZcIiwge1xuICAgICAgICByZWY6IFwiYmFyXCIsXG4gICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWNvbG9yLWFscGhhLXNsaWRlcl9fYmFyXCIsXG4gICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgYmFja2dyb3VuZDogX3ZtLmJhY2tncm91bmRcbiAgICAgICAgfSxcbiAgICAgICAgb246IHsgY2xpY2s6IF92bS5oYW5kbGVDbGljayB9XG4gICAgICB9KSxcbiAgICAgIF9jKFwiZGl2XCIsIHtcbiAgICAgICAgcmVmOiBcInRodW1iXCIsXG4gICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWNvbG9yLWFscGhhLXNsaWRlcl9fdGh1bWJcIixcbiAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICBsZWZ0OiBfdm0udGh1bWJMZWZ0ICsgXCJweFwiLFxuICAgICAgICAgIHRvcDogX3ZtLnRodW1iVG9wICsgXCJweFwiXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgXVxuICApXG59XG52YXIgYWxwaGFfc2xpZGVydnVlX3R5cGVfdGVtcGxhdGVfaWRfMDY4YzY2Y2Jfc3RhdGljUmVuZGVyRm5zID0gW11cbmFscGhhX3NsaWRlcnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzA2OGM2NmNiX3JlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY29sb3ItcGlja2VyL3NyYy9jb21wb25lbnRzL2FscGhhLXNsaWRlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MDY4YzY2Y2ImXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2NvbG9yLXBpY2tlci9zcmMvY29tcG9uZW50cy9hbHBoYS1zbGlkZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGFscGhhX3NsaWRlcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG5hbWU6ICdlbC1jb2xvci1hbHBoYS1zbGlkZXInLFxuXG4gIHByb3BzOiB7XG4gICAgY29sb3I6IHtcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICB2ZXJ0aWNhbDogQm9vbGVhblxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgJ2NvbG9yLl9hbHBoYSc6IGZ1bmN0aW9uIGNvbG9yX2FscGhhKCkge1xuICAgICAgdGhpcy51cGRhdGUoKTtcbiAgICB9LFxuICAgICdjb2xvci52YWx1ZSc6IGZ1bmN0aW9uIGNvbG9yVmFsdWUoKSB7XG4gICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgaGFuZGxlQ2xpY2s6IGZ1bmN0aW9uIGhhbmRsZUNsaWNrKGV2ZW50KSB7XG4gICAgICB2YXIgdGh1bWIgPSB0aGlzLiRyZWZzLnRodW1iO1xuICAgICAgdmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldDtcblxuICAgICAgaWYgKHRhcmdldCAhPT0gdGh1bWIpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVEcmFnKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGhhbmRsZURyYWc6IGZ1bmN0aW9uIGhhbmRsZURyYWcoZXZlbnQpIHtcbiAgICAgIHZhciByZWN0ID0gdGhpcy4kZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICB2YXIgdGh1bWIgPSB0aGlzLiRyZWZzLnRodW1iO1xuXG5cbiAgICAgIGlmICghdGhpcy52ZXJ0aWNhbCkge1xuICAgICAgICB2YXIgbGVmdCA9IGV2ZW50LmNsaWVudFggLSByZWN0LmxlZnQ7XG4gICAgICAgIGxlZnQgPSBNYXRoLm1heCh0aHVtYi5vZmZzZXRXaWR0aCAvIDIsIGxlZnQpO1xuICAgICAgICBsZWZ0ID0gTWF0aC5taW4obGVmdCwgcmVjdC53aWR0aCAtIHRodW1iLm9mZnNldFdpZHRoIC8gMik7XG5cbiAgICAgICAgdGhpcy5jb2xvci5zZXQoJ2FscGhhJywgTWF0aC5yb3VuZCgobGVmdCAtIHRodW1iLm9mZnNldFdpZHRoIC8gMikgLyAocmVjdC53aWR0aCAtIHRodW1iLm9mZnNldFdpZHRoKSAqIDEwMCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHRvcCA9IGV2ZW50LmNsaWVudFkgLSByZWN0LnRvcDtcbiAgICAgICAgdG9wID0gTWF0aC5tYXgodGh1bWIub2Zmc2V0SGVpZ2h0IC8gMiwgdG9wKTtcbiAgICAgICAgdG9wID0gTWF0aC5taW4odG9wLCByZWN0LmhlaWdodCAtIHRodW1iLm9mZnNldEhlaWdodCAvIDIpO1xuXG4gICAgICAgIHRoaXMuY29sb3Iuc2V0KCdhbHBoYScsIE1hdGgucm91bmQoKHRvcCAtIHRodW1iLm9mZnNldEhlaWdodCAvIDIpIC8gKHJlY3QuaGVpZ2h0IC0gdGh1bWIub2Zmc2V0SGVpZ2h0KSAqIDEwMCkpO1xuICAgICAgfVxuICAgIH0sXG4gICAgZ2V0VGh1bWJMZWZ0OiBmdW5jdGlvbiBnZXRUaHVtYkxlZnQoKSB7XG4gICAgICBpZiAodGhpcy52ZXJ0aWNhbCkgcmV0dXJuIDA7XG4gICAgICB2YXIgZWwgPSB0aGlzLiRlbDtcbiAgICAgIHZhciBhbHBoYSA9IHRoaXMuY29sb3IuX2FscGhhO1xuXG4gICAgICBpZiAoIWVsKSByZXR1cm4gMDtcbiAgICAgIHZhciB0aHVtYiA9IHRoaXMuJHJlZnMudGh1bWI7XG4gICAgICByZXR1cm4gTWF0aC5yb3VuZChhbHBoYSAqIChlbC5vZmZzZXRXaWR0aCAtIHRodW1iLm9mZnNldFdpZHRoIC8gMikgLyAxMDApO1xuICAgIH0sXG4gICAgZ2V0VGh1bWJUb3A6IGZ1bmN0aW9uIGdldFRodW1iVG9wKCkge1xuICAgICAgaWYgKCF0aGlzLnZlcnRpY2FsKSByZXR1cm4gMDtcbiAgICAgIHZhciBlbCA9IHRoaXMuJGVsO1xuICAgICAgdmFyIGFscGhhID0gdGhpcy5jb2xvci5fYWxwaGE7XG5cbiAgICAgIGlmICghZWwpIHJldHVybiAwO1xuICAgICAgdmFyIHRodW1iID0gdGhpcy4kcmVmcy50aHVtYjtcbiAgICAgIHJldHVybiBNYXRoLnJvdW5kKGFscGhhICogKGVsLm9mZnNldEhlaWdodCAtIHRodW1iLm9mZnNldEhlaWdodCAvIDIpIC8gMTAwKTtcbiAgICB9LFxuICAgIGdldEJhY2tncm91bmQ6IGZ1bmN0aW9uIGdldEJhY2tncm91bmQoKSB7XG4gICAgICBpZiAodGhpcy5jb2xvciAmJiB0aGlzLmNvbG9yLnZhbHVlKSB7XG4gICAgICAgIHZhciBfY29sb3IkdG9SZ2IgPSB0aGlzLmNvbG9yLnRvUmdiKCksXG4gICAgICAgICAgICByID0gX2NvbG9yJHRvUmdiLnIsXG4gICAgICAgICAgICBnID0gX2NvbG9yJHRvUmdiLmcsXG4gICAgICAgICAgICBiID0gX2NvbG9yJHRvUmdiLmI7XG5cbiAgICAgICAgcmV0dXJuICdsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoJyArIHIgKyAnLCAnICsgZyArICcsICcgKyBiICsgJywgMCkgMCUsIHJnYmEoJyArIHIgKyAnLCAnICsgZyArICcsICcgKyBiICsgJywgMSkgMTAwJSknO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSxcbiAgICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZSgpIHtcbiAgICAgIHRoaXMudGh1bWJMZWZ0ID0gdGhpcy5nZXRUaHVtYkxlZnQoKTtcbiAgICAgIHRoaXMudGh1bWJUb3AgPSB0aGlzLmdldFRodW1iVG9wKCk7XG4gICAgICB0aGlzLmJhY2tncm91bmQgPSB0aGlzLmdldEJhY2tncm91bmQoKTtcbiAgICB9XG4gIH0sXG5cbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdGh1bWJMZWZ0OiAwLFxuICAgICAgdGh1bWJUb3A6IDAsXG4gICAgICBiYWNrZ3JvdW5kOiBudWxsXG4gICAgfTtcbiAgfSxcbiAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdmFyIF8kcmVmcyA9IHRoaXMuJHJlZnMsXG4gICAgICAgIGJhciA9IF8kcmVmcy5iYXIsXG4gICAgICAgIHRodW1iID0gXyRyZWZzLnRodW1iO1xuXG5cbiAgICB2YXIgZHJhZ0NvbmZpZyA9IHtcbiAgICAgIGRyYWc6IGZ1bmN0aW9uIGRyYWcoZXZlbnQpIHtcbiAgICAgICAgX3RoaXMuaGFuZGxlRHJhZyhldmVudCk7XG4gICAgICB9LFxuICAgICAgZW5kOiBmdW5jdGlvbiBlbmQoZXZlbnQpIHtcbiAgICAgICAgX3RoaXMuaGFuZGxlRHJhZyhldmVudCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGRyYWdnYWJsZShiYXIsIGRyYWdDb25maWcpO1xuICAgIGRyYWdnYWJsZSh0aHVtYiwgZHJhZ0NvbmZpZyk7XG4gICAgdGhpcy51cGRhdGUoKTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2NvbG9yLXBpY2tlci9zcmMvY29tcG9uZW50cy9hbHBoYS1zbGlkZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGNvbXBvbmVudHNfYWxwaGFfc2xpZGVydnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKGFscGhhX3NsaWRlcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jb2xvci1waWNrZXIvc3JjL2NvbXBvbmVudHMvYWxwaGEtc2xpZGVyLnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGFscGhhX3NsaWRlcl9jb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIGNvbXBvbmVudHNfYWxwaGFfc2xpZGVydnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICBhbHBoYV9zbGlkZXJ2dWVfdHlwZV90ZW1wbGF0ZV9pZF8wNjhjNjZjYl9yZW5kZXIsXG4gIGFscGhhX3NsaWRlcnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzA2OGM2NmNiX3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgYWxwaGFfc2xpZGVyX2FwaTsgfVxuYWxwaGFfc2xpZGVyX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvY29sb3ItcGlja2VyL3NyYy9jb21wb25lbnRzL2FscGhhLXNsaWRlci52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgYWxwaGFfc2xpZGVyID0gKGFscGhhX3NsaWRlcl9jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2NvbG9yLXBpY2tlci9zcmMvY29tcG9uZW50cy9wcmVkZWZpbmUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTA2ZTAzMDkzJlxudmFyIHByZWRlZmluZXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzA2ZTAzMDkzX3JlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLWNvbG9yLXByZWRlZmluZVwiIH0sIFtcbiAgICBfYyhcbiAgICAgIFwiZGl2XCIsXG4gICAgICB7IHN0YXRpY0NsYXNzOiBcImVsLWNvbG9yLXByZWRlZmluZV9fY29sb3JzXCIgfSxcbiAgICAgIF92bS5fbChfdm0ucmdiYUNvbG9ycywgZnVuY3Rpb24oaXRlbSwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIF9jKFxuICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAga2V5OiBfdm0uY29sb3JzW2luZGV4XSxcbiAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWNvbG9yLXByZWRlZmluZV9fY29sb3Itc2VsZWN0b3JcIixcbiAgICAgICAgICAgIGNsYXNzOiB7IHNlbGVjdGVkOiBpdGVtLnNlbGVjdGVkLCBcImlzLWFscGhhXCI6IGl0ZW0uX2FscGhhIDwgMTAwIH0sXG4gICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgX3ZtLmhhbmRsZVNlbGVjdChpbmRleClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgW19jKFwiZGl2XCIsIHsgc3R5bGU6IHsgXCJiYWNrZ3JvdW5kLWNvbG9yXCI6IGl0ZW0udmFsdWUgfSB9KV1cbiAgICAgICAgKVxuICAgICAgfSksXG4gICAgICAwXG4gICAgKVxuICBdKVxufVxudmFyIHByZWRlZmluZXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzA2ZTAzMDkzX3N0YXRpY1JlbmRlckZucyA9IFtdXG5wcmVkZWZpbmV2dWVfdHlwZV90ZW1wbGF0ZV9pZF8wNmUwMzA5M19yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2NvbG9yLXBpY2tlci9zcmMvY29tcG9uZW50cy9wcmVkZWZpbmUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTA2ZTAzMDkzJlxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9jb2xvci1waWNrZXIvc3JjL2NvbXBvbmVudHMvcHJlZGVmaW5lLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHByZWRlZmluZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIHByb3BzOiB7XG4gICAgY29sb3JzOiB7IHR5cGU6IEFycmF5LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGNvbG9yOiB7IHJlcXVpcmVkOiB0cnVlIH1cbiAgfSxcbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcmdiYUNvbG9yczogdGhpcy5wYXJzZUNvbG9ycyh0aGlzLmNvbG9ycywgdGhpcy5jb2xvcilcbiAgICB9O1xuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBoYW5kbGVTZWxlY3Q6IGZ1bmN0aW9uIGhhbmRsZVNlbGVjdChpbmRleCkge1xuICAgICAgdGhpcy5jb2xvci5mcm9tU3RyaW5nKHRoaXMuY29sb3JzW2luZGV4XSk7XG4gICAgfSxcbiAgICBwYXJzZUNvbG9yczogZnVuY3Rpb24gcGFyc2VDb2xvcnMoY29sb3JzLCBjb2xvcikge1xuICAgICAgcmV0dXJuIGNvbG9ycy5tYXAoZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBjID0gbmV3IHNyY19jb2xvcigpO1xuICAgICAgICBjLmVuYWJsZUFscGhhID0gdHJ1ZTtcbiAgICAgICAgYy5mb3JtYXQgPSAncmdiYSc7XG4gICAgICAgIGMuZnJvbVN0cmluZyh2YWx1ZSk7XG4gICAgICAgIGMuc2VsZWN0ZWQgPSBjLnZhbHVlID09PSBjb2xvci52YWx1ZTtcbiAgICAgICAgcmV0dXJuIGM7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIHdhdGNoOiB7XG4gICAgJyRwYXJlbnQuY3VycmVudENvbG9yJzogZnVuY3Rpb24gJHBhcmVudEN1cnJlbnRDb2xvcih2YWwpIHtcbiAgICAgIHZhciBjb2xvciA9IG5ldyBzcmNfY29sb3IoKTtcbiAgICAgIGNvbG9yLmZyb21TdHJpbmcodmFsKTtcblxuICAgICAgdGhpcy5yZ2JhQ29sb3JzLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgaXRlbS5zZWxlY3RlZCA9IGNvbG9yLmNvbXBhcmUoaXRlbSk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGNvbG9yczogZnVuY3Rpb24gY29sb3JzKG5ld1ZhbCkge1xuICAgICAgdGhpcy5yZ2JhQ29sb3JzID0gdGhpcy5wYXJzZUNvbG9ycyhuZXdWYWwsIHRoaXMuY29sb3IpO1xuICAgIH0sXG4gICAgY29sb3I6IGZ1bmN0aW9uIGNvbG9yKG5ld1ZhbCkge1xuICAgICAgdGhpcy5yZ2JhQ29sb3JzID0gdGhpcy5wYXJzZUNvbG9ycyh0aGlzLmNvbG9ycywgbmV3VmFsKTtcbiAgICB9XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jb2xvci1waWNrZXIvc3JjL2NvbXBvbmVudHMvcHJlZGVmaW5lLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBjb21wb25lbnRzX3ByZWRlZmluZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChwcmVkZWZpbmV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY29sb3ItcGlja2VyL3NyYy9jb21wb25lbnRzL3ByZWRlZmluZS52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBwcmVkZWZpbmVfY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBjb21wb25lbnRzX3ByZWRlZmluZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgcHJlZGVmaW5ldnVlX3R5cGVfdGVtcGxhdGVfaWRfMDZlMDMwOTNfcmVuZGVyLFxuICBwcmVkZWZpbmV2dWVfdHlwZV90ZW1wbGF0ZV9pZF8wNmUwMzA5M19zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIHByZWRlZmluZV9hcGk7IH1cbnByZWRlZmluZV9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL2NvbG9yLXBpY2tlci9zcmMvY29tcG9uZW50cy9wcmVkZWZpbmUudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHByZWRlZmluZSA9IChwcmVkZWZpbmVfY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvY29sb3ItcGlja2VyL3NyYy9jb21wb25lbnRzL3BpY2tlci1kcm9wZG93bi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5cblxuXG5cblxuXG5cblxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwaWNrZXJfZHJvcGRvd252dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBuYW1lOiAnZWwtY29sb3ItcGlja2VyLWRyb3Bkb3duJyxcblxuICBtaXhpbnM6IFt2dWVfcG9wcGVyX2RlZmF1bHQuYSwgbG9jYWxlX2RlZmF1bHQuYV0sXG5cbiAgY29tcG9uZW50czoge1xuICAgIFN2UGFuZWw6IHN2X3BhbmVsLFxuICAgIEh1ZVNsaWRlcjogaHVlX3NsaWRlcixcbiAgICBBbHBoYVNsaWRlcjogYWxwaGFfc2xpZGVyLFxuICAgIEVsSW5wdXQ6IGlucHV0X2RlZmF1bHQuYSxcbiAgICBFbEJ1dHRvbjogYnV0dG9uX2RlZmF1bHQuYSxcbiAgICBQcmVkZWZpbmU6IHByZWRlZmluZVxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgY29sb3I6IHtcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICBzaG93QWxwaGE6IEJvb2xlYW4sXG4gICAgcHJlZGVmaW5lOiBBcnJheVxuICB9LFxuXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGN1c3RvbUlucHV0OiAnJ1xuICAgIH07XG4gIH0sXG5cblxuICBjb21wdXRlZDoge1xuICAgIGN1cnJlbnRDb2xvcjogZnVuY3Rpb24gY3VycmVudENvbG9yKCkge1xuICAgICAgdmFyIHBhcmVudCA9IHRoaXMuJHBhcmVudDtcbiAgICAgIHJldHVybiAhcGFyZW50LnZhbHVlICYmICFwYXJlbnQuc2hvd1BhbmVsQ29sb3IgPyAnJyA6IHBhcmVudC5jb2xvci52YWx1ZTtcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGNvbmZpcm1WYWx1ZTogZnVuY3Rpb24gY29uZmlybVZhbHVlKCkge1xuICAgICAgdGhpcy4kZW1pdCgncGljaycpO1xuICAgIH0sXG4gICAgaGFuZGxlQ29uZmlybTogZnVuY3Rpb24gaGFuZGxlQ29uZmlybSgpIHtcbiAgICAgIHRoaXMuY29sb3IuZnJvbVN0cmluZyh0aGlzLmN1c3RvbUlucHV0KTtcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCgpIHtcbiAgICB0aGlzLiRwYXJlbnQucG9wcGVyRWxtID0gdGhpcy5wb3BwZXJFbG0gPSB0aGlzLiRlbDtcbiAgICB0aGlzLnJlZmVyZW5jZUVsbSA9IHRoaXMuJHBhcmVudC4kZWw7XG4gIH0sXG5cblxuICB3YXRjaDoge1xuICAgIHNob3dQb3BwZXI6IGZ1bmN0aW9uIHNob3dQb3BwZXIodmFsKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICBpZiAodmFsID09PSB0cnVlKSB7XG4gICAgICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB2YXIgXyRyZWZzID0gX3RoaXMuJHJlZnMsXG4gICAgICAgICAgICAgIHNsID0gXyRyZWZzLnNsLFxuICAgICAgICAgICAgICBodWUgPSBfJHJlZnMuaHVlLFxuICAgICAgICAgICAgICBhbHBoYSA9IF8kcmVmcy5hbHBoYTtcblxuICAgICAgICAgIHNsICYmIHNsLnVwZGF0ZSgpO1xuICAgICAgICAgIGh1ZSAmJiBodWUudXBkYXRlKCk7XG4gICAgICAgICAgYWxwaGEgJiYgYWxwaGEudXBkYXRlKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG5cblxuICAgIGN1cnJlbnRDb2xvcjoge1xuICAgICAgaW1tZWRpYXRlOiB0cnVlLFxuICAgICAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcih2YWwpIHtcbiAgICAgICAgdGhpcy5jdXN0b21JbnB1dCA9IHZhbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jb2xvci1waWNrZXIvc3JjL2NvbXBvbmVudHMvcGlja2VyLWRyb3Bkb3duLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBjb21wb25lbnRzX3BpY2tlcl9kcm9wZG93bnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChwaWNrZXJfZHJvcGRvd252dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY29sb3ItcGlja2VyL3NyYy9jb21wb25lbnRzL3BpY2tlci1kcm9wZG93bi52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBwaWNrZXJfZHJvcGRvd25fY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBjb21wb25lbnRzX3BpY2tlcl9kcm9wZG93bnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgcGlja2VyX2Ryb3Bkb3dudnVlX3R5cGVfdGVtcGxhdGVfaWRfMDY2MDE2MjVfcmVuZGVyLFxuICBwaWNrZXJfZHJvcGRvd252dWVfdHlwZV90ZW1wbGF0ZV9pZF8wNjYwMTYyNV9zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIHBpY2tlcl9kcm9wZG93bl9hcGk7IH1cbnBpY2tlcl9kcm9wZG93bl9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL2NvbG9yLXBpY2tlci9zcmMvY29tcG9uZW50cy9waWNrZXItZHJvcGRvd24udnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBpY2tlcl9kcm9wZG93biA9IChwaWNrZXJfZHJvcGRvd25fY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvY29sb3ItcGlja2VyL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5cblxuXG5cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgY29sb3JfcGlja2VyX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbmFtZTogJ0VsQ29sb3JQaWNrZXInLFxuXG4gIG1peGluczogW2VtaXR0ZXJfZGVmYXVsdC5hXSxcblxuICBwcm9wczoge1xuICAgIHZhbHVlOiBTdHJpbmcsXG4gICAgc2hvd0FscGhhOiBCb29sZWFuLFxuICAgIGNvbG9yRm9ybWF0OiBTdHJpbmcsXG4gICAgZGlzYWJsZWQ6IEJvb2xlYW4sXG4gICAgc2l6ZTogU3RyaW5nLFxuICAgIHBvcHBlckNsYXNzOiBTdHJpbmcsXG4gICAgcHJlZGVmaW5lOiBBcnJheVxuICB9LFxuXG4gIGluamVjdDoge1xuICAgIGVsRm9ybToge1xuICAgICAgZGVmYXVsdDogJydcbiAgICB9LFxuICAgIGVsRm9ybUl0ZW06IHtcbiAgICAgIGRlZmF1bHQ6ICcnXG4gICAgfVxuICB9LFxuXG4gIGRpcmVjdGl2ZXM6IHsgQ2xpY2tvdXRzaWRlOiBjbGlja291dHNpZGVfZGVmYXVsdC5hIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBkaXNwbGF5ZWRDb2xvcjogZnVuY3Rpb24gZGlzcGxheWVkQ29sb3IoKSB7XG4gICAgICBpZiAoIXRoaXMudmFsdWUgJiYgIXRoaXMuc2hvd1BhbmVsQ29sb3IpIHtcbiAgICAgICAgcmV0dXJuICd0cmFuc3BhcmVudCc7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmRpc3BsYXllZFJnYih0aGlzLmNvbG9yLCB0aGlzLnNob3dBbHBoYSk7XG4gICAgfSxcbiAgICBfZWxGb3JtSXRlbVNpemU6IGZ1bmN0aW9uIF9lbEZvcm1JdGVtU2l6ZSgpIHtcbiAgICAgIHJldHVybiAodGhpcy5lbEZvcm1JdGVtIHx8IHt9KS5lbEZvcm1JdGVtU2l6ZTtcbiAgICB9LFxuICAgIGNvbG9yU2l6ZTogZnVuY3Rpb24gY29sb3JTaXplKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2l6ZSB8fCB0aGlzLl9lbEZvcm1JdGVtU2l6ZSB8fCAodGhpcy4kRUxFTUVOVCB8fCB7fSkuc2l6ZTtcbiAgICB9LFxuICAgIGNvbG9yRGlzYWJsZWQ6IGZ1bmN0aW9uIGNvbG9yRGlzYWJsZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5kaXNhYmxlZCB8fCAodGhpcy5lbEZvcm0gfHwge30pLmRpc2FibGVkO1xuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHZhbHVlOiBmdW5jdGlvbiB2YWx1ZSh2YWwpIHtcbiAgICAgIGlmICghdmFsKSB7XG4gICAgICAgIHRoaXMuc2hvd1BhbmVsQ29sb3IgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAodmFsICYmIHZhbCAhPT0gdGhpcy5jb2xvci52YWx1ZSkge1xuICAgICAgICB0aGlzLmNvbG9yLmZyb21TdHJpbmcodmFsKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY29sb3I6IHtcbiAgICAgIGRlZXA6IHRydWUsXG4gICAgICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKCkge1xuICAgICAgICB0aGlzLnNob3dQYW5lbENvbG9yID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGRpc3BsYXllZENvbG9yOiBmdW5jdGlvbiBkaXNwbGF5ZWRDb2xvcih2YWwpIHtcbiAgICAgIGlmICghdGhpcy5zaG93UGlja2VyKSByZXR1cm47XG4gICAgICB2YXIgY3VycmVudFZhbHVlQ29sb3IgPSBuZXcgc3JjX2NvbG9yKHtcbiAgICAgICAgZW5hYmxlQWxwaGE6IHRoaXMuc2hvd0FscGhhLFxuICAgICAgICBmb3JtYXQ6IHRoaXMuY29sb3JGb3JtYXRcbiAgICAgIH0pO1xuICAgICAgY3VycmVudFZhbHVlQ29sb3IuZnJvbVN0cmluZyh0aGlzLnZhbHVlKTtcblxuICAgICAgdmFyIGN1cnJlbnRWYWx1ZUNvbG9yUmdiID0gdGhpcy5kaXNwbGF5ZWRSZ2IoY3VycmVudFZhbHVlQ29sb3IsIHRoaXMuc2hvd0FscGhhKTtcbiAgICAgIGlmICh2YWwgIT09IGN1cnJlbnRWYWx1ZUNvbG9yUmdiKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ2FjdGl2ZS1jaGFuZ2UnLCB2YWwpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgaGFuZGxlVHJpZ2dlcjogZnVuY3Rpb24gaGFuZGxlVHJpZ2dlcigpIHtcbiAgICAgIGlmICh0aGlzLmNvbG9yRGlzYWJsZWQpIHJldHVybjtcbiAgICAgIHRoaXMuc2hvd1BpY2tlciA9ICF0aGlzLnNob3dQaWNrZXI7XG4gICAgfSxcbiAgICBjb25maXJtVmFsdWU6IGZ1bmN0aW9uIGNvbmZpcm1WYWx1ZSgpIHtcbiAgICAgIHZhciB2YWx1ZSA9IHRoaXMuY29sb3IudmFsdWU7XG4gICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIHZhbHVlKTtcbiAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIHZhbHVlKTtcbiAgICAgIHRoaXMuZGlzcGF0Y2goJ0VsRm9ybUl0ZW0nLCAnZWwuZm9ybS5jaGFuZ2UnLCB2YWx1ZSk7XG4gICAgICB0aGlzLnNob3dQaWNrZXIgPSBmYWxzZTtcbiAgICB9LFxuICAgIGNsZWFyVmFsdWU6IGZ1bmN0aW9uIGNsZWFyVmFsdWUoKSB7XG4gICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIG51bGwpO1xuICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgbnVsbCk7XG4gICAgICBpZiAodGhpcy52YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLmRpc3BhdGNoKCdFbEZvcm1JdGVtJywgJ2VsLmZvcm0uY2hhbmdlJywgbnVsbCk7XG4gICAgICB9XG4gICAgICB0aGlzLnNob3dQYW5lbENvbG9yID0gZmFsc2U7XG4gICAgICB0aGlzLnNob3dQaWNrZXIgPSBmYWxzZTtcbiAgICAgIHRoaXMucmVzZXRDb2xvcigpO1xuICAgIH0sXG4gICAgaGlkZTogZnVuY3Rpb24gaGlkZSgpIHtcbiAgICAgIHRoaXMuc2hvd1BpY2tlciA9IGZhbHNlO1xuICAgICAgdGhpcy5yZXNldENvbG9yKCk7XG4gICAgfSxcbiAgICByZXNldENvbG9yOiBmdW5jdGlvbiByZXNldENvbG9yKCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKF8pIHtcbiAgICAgICAgaWYgKF90aGlzLnZhbHVlKSB7XG4gICAgICAgICAgX3RoaXMuY29sb3IuZnJvbVN0cmluZyhfdGhpcy52YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgX3RoaXMuc2hvd1BhbmVsQ29sb3IgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSxcbiAgICBkaXNwbGF5ZWRSZ2I6IGZ1bmN0aW9uIGRpc3BsYXllZFJnYihjb2xvciwgc2hvd0FscGhhKSB7XG4gICAgICBpZiAoIShjb2xvciBpbnN0YW5jZW9mIHNyY19jb2xvcikpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoJ2NvbG9yIHNob3VsZCBiZSBpbnN0YW5jZSBvZiBDb2xvciBDbGFzcycpO1xuICAgICAgfVxuXG4gICAgICB2YXIgX2NvbG9yJHRvUmdiID0gY29sb3IudG9SZ2IoKSxcbiAgICAgICAgICByID0gX2NvbG9yJHRvUmdiLnIsXG4gICAgICAgICAgZyA9IF9jb2xvciR0b1JnYi5nLFxuICAgICAgICAgIGIgPSBfY29sb3IkdG9SZ2IuYjtcblxuICAgICAgcmV0dXJuIHNob3dBbHBoYSA/ICdyZ2JhKCcgKyByICsgJywgJyArIGcgKyAnLCAnICsgYiArICcsICcgKyBjb2xvci5nZXQoJ2FscGhhJykgLyAxMDAgKyAnKScgOiAncmdiKCcgKyByICsgJywgJyArIGcgKyAnLCAnICsgYiArICcpJztcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCgpIHtcbiAgICB2YXIgdmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5jb2xvci5mcm9tU3RyaW5nKHZhbHVlKTtcbiAgICB9XG4gICAgdGhpcy5wb3BwZXJFbG0gPSB0aGlzLiRyZWZzLmRyb3Bkb3duLiRlbDtcbiAgfSxcbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICB2YXIgY29sb3IgPSBuZXcgc3JjX2NvbG9yKHtcbiAgICAgIGVuYWJsZUFscGhhOiB0aGlzLnNob3dBbHBoYSxcbiAgICAgIGZvcm1hdDogdGhpcy5jb2xvckZvcm1hdFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbG9yOiBjb2xvcixcbiAgICAgIHNob3dQaWNrZXI6IGZhbHNlLFxuICAgICAgc2hvd1BhbmVsQ29sb3I6IGZhbHNlXG4gICAgfTtcbiAgfSxcblxuXG4gIGNvbXBvbmVudHM6IHtcbiAgICBQaWNrZXJEcm9wZG93bjogcGlja2VyX2Ryb3Bkb3duXG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jb2xvci1waWNrZXIvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhY2thZ2VzX2NvbG9yX3BpY2tlcl9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChjb2xvcl9waWNrZXJfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY29sb3ItcGlja2VyL3NyYy9tYWluLnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGNvbG9yX3BpY2tlcl9zcmNfbWFpbl9jb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIHBhY2thZ2VzX2NvbG9yX3BpY2tlcl9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzU1YzhhZGU3X3JlbmRlcixcbiAgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzU1YzhhZGU3X3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgY29sb3JfcGlja2VyX3NyY19tYWluX2FwaTsgfVxuY29sb3JfcGlja2VyX3NyY19tYWluX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvY29sb3ItcGlja2VyL3NyYy9tYWluLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBjb2xvcl9waWNrZXJfc3JjX21haW4gPSAoY29sb3JfcGlja2VyX3NyY19tYWluX2NvbXBvbmVudC5leHBvcnRzKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY29sb3ItcGlja2VyL2luZGV4LmpzXG5cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmNvbG9yX3BpY2tlcl9zcmNfbWFpbi5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuICBWdWUuY29tcG9uZW50KGNvbG9yX3BpY2tlcl9zcmNfbWFpbi5uYW1lLCBjb2xvcl9waWNrZXJfc3JjX21haW4pO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgY29sb3JfcGlja2VyID0gKGNvbG9yX3BpY2tlcl9zcmNfbWFpbik7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3RyYW5zZmVyL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01YzY1NGRkOCZcbnZhciBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfNWM2NTRkZDhfcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAgeyBzdGF0aWNDbGFzczogXCJlbC10cmFuc2ZlclwiIH0sXG4gICAgW1xuICAgICAgX2MoXG4gICAgICAgIFwidHJhbnNmZXItcGFuZWxcIixcbiAgICAgICAgX3ZtLl9iKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHJlZjogXCJsZWZ0UGFuZWxcIixcbiAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgIGRhdGE6IF92bS5zb3VyY2VEYXRhLFxuICAgICAgICAgICAgICB0aXRsZTogX3ZtLnRpdGxlc1swXSB8fCBfdm0udChcImVsLnRyYW5zZmVyLnRpdGxlcy4wXCIpLFxuICAgICAgICAgICAgICBcImRlZmF1bHQtY2hlY2tlZFwiOiBfdm0ubGVmdERlZmF1bHRDaGVja2VkLFxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcjpcbiAgICAgICAgICAgICAgICBfdm0uZmlsdGVyUGxhY2Vob2xkZXIgfHwgX3ZtLnQoXCJlbC50cmFuc2Zlci5maWx0ZXJQbGFjZWhvbGRlclwiKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uOiB7IFwiY2hlY2tlZC1jaGFuZ2VcIjogX3ZtLm9uU291cmNlQ2hlY2tlZENoYW5nZSB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInRyYW5zZmVyLXBhbmVsXCIsXG4gICAgICAgICAgX3ZtLiRwcm9wcyxcbiAgICAgICAgICBmYWxzZVxuICAgICAgICApLFxuICAgICAgICBbX3ZtLl90KFwibGVmdC1mb290ZXJcIildLFxuICAgICAgICAyXG4gICAgICApLFxuICAgICAgX2MoXG4gICAgICAgIFwiZGl2XCIsXG4gICAgICAgIHsgc3RhdGljQ2xhc3M6IFwiZWwtdHJhbnNmZXJfX2J1dHRvbnNcIiB9LFxuICAgICAgICBbXG4gICAgICAgICAgX2MoXG4gICAgICAgICAgICBcImVsLWJ1dHRvblwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjbGFzczogW1xuICAgICAgICAgICAgICAgIFwiZWwtdHJhbnNmZXJfX2J1dHRvblwiLFxuICAgICAgICAgICAgICAgIF92bS5oYXNCdXR0b25UZXh0cyA/IFwiaXMtd2l0aC10ZXh0c1wiIDogXCJcIlxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwicHJpbWFyeVwiLFxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiBfdm0ucmlnaHRDaGVja2VkLmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBuYXRpdmVPbjoge1xuICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0uYWRkVG9MZWZ0KCRldmVudClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF9jKFwiaVwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLWljb24tYXJyb3ctbGVmdFwiIH0pLFxuICAgICAgICAgICAgICBfdm0uYnV0dG9uVGV4dHNbMF0gIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgID8gX2MoXCJzcGFuXCIsIFtfdm0uX3YoX3ZtLl9zKF92bS5idXR0b25UZXh0c1swXSkpXSlcbiAgICAgICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgICAgICBdXG4gICAgICAgICAgKSxcbiAgICAgICAgICBfYyhcbiAgICAgICAgICAgIFwiZWwtYnV0dG9uXCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNsYXNzOiBbXG4gICAgICAgICAgICAgICAgXCJlbC10cmFuc2Zlcl9fYnV0dG9uXCIsXG4gICAgICAgICAgICAgICAgX3ZtLmhhc0J1dHRvblRleHRzID8gXCJpcy13aXRoLXRleHRzXCIgOiBcIlwiXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJwcmltYXJ5XCIsXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ6IF92bS5sZWZ0Q2hlY2tlZC5sZW5ndGggPT09IDBcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgbmF0aXZlT246IHtcbiAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLmFkZFRvUmlnaHQoJGV2ZW50KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX3ZtLmJ1dHRvblRleHRzWzFdICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICA/IF9jKFwic3BhblwiLCBbX3ZtLl92KF92bS5fcyhfdm0uYnV0dG9uVGV4dHNbMV0pKV0pXG4gICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgX2MoXCJpXCIsIHsgc3RhdGljQ2xhc3M6IFwiZWwtaWNvbi1hcnJvdy1yaWdodFwiIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgKVxuICAgICAgICBdLFxuICAgICAgICAxXG4gICAgICApLFxuICAgICAgX2MoXG4gICAgICAgIFwidHJhbnNmZXItcGFuZWxcIixcbiAgICAgICAgX3ZtLl9iKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHJlZjogXCJyaWdodFBhbmVsXCIsXG4gICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICBkYXRhOiBfdm0udGFyZ2V0RGF0YSxcbiAgICAgICAgICAgICAgdGl0bGU6IF92bS50aXRsZXNbMV0gfHwgX3ZtLnQoXCJlbC50cmFuc2Zlci50aXRsZXMuMVwiKSxcbiAgICAgICAgICAgICAgXCJkZWZhdWx0LWNoZWNrZWRcIjogX3ZtLnJpZ2h0RGVmYXVsdENoZWNrZWQsXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyOlxuICAgICAgICAgICAgICAgIF92bS5maWx0ZXJQbGFjZWhvbGRlciB8fCBfdm0udChcImVsLnRyYW5zZmVyLmZpbHRlclBsYWNlaG9sZGVyXCIpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb246IHsgXCJjaGVja2VkLWNoYW5nZVwiOiBfdm0ub25UYXJnZXRDaGVja2VkQ2hhbmdlIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHJhbnNmZXItcGFuZWxcIixcbiAgICAgICAgICBfdm0uJHByb3BzLFxuICAgICAgICAgIGZhbHNlXG4gICAgICAgICksXG4gICAgICAgIFtfdm0uX3QoXCJyaWdodC1mb290ZXJcIildLFxuICAgICAgICAyXG4gICAgICApXG4gICAgXSxcbiAgICAxXG4gIClcbn1cbnZhciBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfNWM2NTRkZDhfc3RhdGljUmVuZGVyRm5zID0gW11cbm1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF81YzY1NGRkOF9yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3RyYW5zZmVyL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01YzY1NGRkOCZcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy90cmFuc2Zlci9zcmMvdHJhbnNmZXItcGFuZWwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTJkZGFiOGJkJlxudmFyIHRyYW5zZmVyX3BhbmVsdnVlX3R5cGVfdGVtcGxhdGVfaWRfMmRkYWI4YmRfcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiZWwtdHJhbnNmZXItcGFuZWxcIiB9LCBbXG4gICAgX2MoXG4gICAgICBcInBcIixcbiAgICAgIHsgc3RhdGljQ2xhc3M6IFwiZWwtdHJhbnNmZXItcGFuZWxfX2hlYWRlclwiIH0sXG4gICAgICBbXG4gICAgICAgIF9jKFxuICAgICAgICAgIFwiZWwtY2hlY2tib3hcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhdHRyczogeyBpbmRldGVybWluYXRlOiBfdm0uaXNJbmRldGVybWluYXRlIH0sXG4gICAgICAgICAgICBvbjogeyBjaGFuZ2U6IF92bS5oYW5kbGVBbGxDaGVja2VkQ2hhbmdlIH0sXG4gICAgICAgICAgICBtb2RlbDoge1xuICAgICAgICAgICAgICB2YWx1ZTogX3ZtLmFsbENoZWNrZWQsXG4gICAgICAgICAgICAgIGNhbGxiYWNrOiBmdW5jdGlvbigkJHYpIHtcbiAgICAgICAgICAgICAgICBfdm0uYWxsQ2hlY2tlZCA9ICQkdlxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBleHByZXNzaW9uOiBcImFsbENoZWNrZWRcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgW1xuICAgICAgICAgICAgX3ZtLl92KFwiXFxuICAgICAgXCIgKyBfdm0uX3MoX3ZtLnRpdGxlKSArIFwiXFxuICAgICAgXCIpLFxuICAgICAgICAgICAgX2MoXCJzcGFuXCIsIFtfdm0uX3YoX3ZtLl9zKF92bS5jaGVja2VkU3VtbWFyeSkpXSlcbiAgICAgICAgICBdXG4gICAgICAgIClcbiAgICAgIF0sXG4gICAgICAxXG4gICAgKSxcbiAgICBfYyhcbiAgICAgIFwiZGl2XCIsXG4gICAgICB7XG4gICAgICAgIGNsYXNzOiBbXG4gICAgICAgICAgXCJlbC10cmFuc2Zlci1wYW5lbF9fYm9keVwiLFxuICAgICAgICAgIF92bS5oYXNGb290ZXIgPyBcImlzLXdpdGgtZm9vdGVyXCIgOiBcIlwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBbXG4gICAgICAgIF92bS5maWx0ZXJhYmxlXG4gICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgXCJlbC1pbnB1dFwiLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtdHJhbnNmZXItcGFuZWxfX2ZpbHRlclwiLFxuICAgICAgICAgICAgICAgIGF0dHJzOiB7IHNpemU6IFwic21hbGxcIiwgcGxhY2Vob2xkZXI6IF92bS5wbGFjZWhvbGRlciB9LFxuICAgICAgICAgICAgICAgIG5hdGl2ZU9uOiB7XG4gICAgICAgICAgICAgICAgICBtb3VzZWVudGVyOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgX3ZtLmlucHV0SG92ZXIgPSB0cnVlXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgbW91c2VsZWF2ZTogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIF92bS5pbnB1dEhvdmVyID0gZmFsc2VcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG1vZGVsOiB7XG4gICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLnF1ZXJ5LFxuICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IGZ1bmN0aW9uKCQkdikge1xuICAgICAgICAgICAgICAgICAgICBfdm0ucXVlcnkgPSAkJHZcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcInF1ZXJ5XCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBfYyhcImlcIiwge1xuICAgICAgICAgICAgICAgICAgY2xhc3M6IFtcImVsLWlucHV0X19pY29uXCIsIFwiZWwtaWNvbi1cIiArIF92bS5pbnB1dEljb25dLFxuICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgc2xvdDogXCJwcmVmaXhcIiB9LFxuICAgICAgICAgICAgICAgICAgb246IHsgY2xpY2s6IF92bS5jbGVhclF1ZXJ5IH0sXG4gICAgICAgICAgICAgICAgICBzbG90OiBcInByZWZpeFwiXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgIF9jKFxuICAgICAgICAgIFwiZWwtY2hlY2tib3gtZ3JvdXBcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiAhX3ZtLmhhc05vTWF0Y2ggJiYgX3ZtLmRhdGEubGVuZ3RoID4gMCxcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcIiFoYXNOb01hdGNoICYmIGRhdGEubGVuZ3RoID4gMFwiXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC10cmFuc2Zlci1wYW5lbF9fbGlzdFwiLFxuICAgICAgICAgICAgY2xhc3M6IHsgXCJpcy1maWx0ZXJhYmxlXCI6IF92bS5maWx0ZXJhYmxlIH0sXG4gICAgICAgICAgICBtb2RlbDoge1xuICAgICAgICAgICAgICB2YWx1ZTogX3ZtLmNoZWNrZWQsXG4gICAgICAgICAgICAgIGNhbGxiYWNrOiBmdW5jdGlvbigkJHYpIHtcbiAgICAgICAgICAgICAgICBfdm0uY2hlY2tlZCA9ICQkdlxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBleHByZXNzaW9uOiBcImNoZWNrZWRcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgX3ZtLl9sKF92bS5maWx0ZXJlZERhdGEsIGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICAgICAgICAgIHJldHVybiBfYyhcbiAgICAgICAgICAgICAgXCJlbC1jaGVja2JveFwiLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAga2V5OiBpdGVtW192bS5rZXlQcm9wXSxcbiAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC10cmFuc2Zlci1wYW5lbF9faXRlbVwiLFxuICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICBsYWJlbDogaXRlbVtfdm0ua2V5UHJvcF0sXG4gICAgICAgICAgICAgICAgICBkaXNhYmxlZDogaXRlbVtfdm0uZGlzYWJsZWRQcm9wXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgW19jKFwib3B0aW9uLWNvbnRlbnRcIiwgeyBhdHRyczogeyBvcHRpb246IGl0ZW0gfSB9KV0sXG4gICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9KSxcbiAgICAgICAgICAxXG4gICAgICAgICksXG4gICAgICAgIF9jKFxuICAgICAgICAgIFwicFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IF92bS5oYXNOb01hdGNoLFxuICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwiaGFzTm9NYXRjaFwiXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC10cmFuc2Zlci1wYW5lbF9fZW1wdHlcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgW192bS5fdihfdm0uX3MoX3ZtLnQoXCJlbC50cmFuc2Zlci5ub01hdGNoXCIpKSldXG4gICAgICAgICksXG4gICAgICAgIF9jKFxuICAgICAgICAgIFwicFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IF92bS5kYXRhLmxlbmd0aCA9PT0gMCAmJiAhX3ZtLmhhc05vTWF0Y2gsXG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJkYXRhLmxlbmd0aCA9PT0gMCAmJiAhaGFzTm9NYXRjaFwiXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC10cmFuc2Zlci1wYW5lbF9fZW1wdHlcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgW192bS5fdihfdm0uX3MoX3ZtLnQoXCJlbC50cmFuc2Zlci5ub0RhdGFcIikpKV1cbiAgICAgICAgKVxuICAgICAgXSxcbiAgICAgIDFcbiAgICApLFxuICAgIF92bS5oYXNGb290ZXJcbiAgICAgID8gX2MoXG4gICAgICAgICAgXCJwXCIsXG4gICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJlbC10cmFuc2Zlci1wYW5lbF9fZm9vdGVyXCIgfSxcbiAgICAgICAgICBbX3ZtLl90KFwiZGVmYXVsdFwiKV0sXG4gICAgICAgICAgMlxuICAgICAgICApXG4gICAgICA6IF92bS5fZSgpXG4gIF0pXG59XG52YXIgdHJhbnNmZXJfcGFuZWx2dWVfdHlwZV90ZW1wbGF0ZV9pZF8yZGRhYjhiZF9zdGF0aWNSZW5kZXJGbnMgPSBbXVxudHJhbnNmZXJfcGFuZWx2dWVfdHlwZV90ZW1wbGF0ZV9pZF8yZGRhYjhiZF9yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3RyYW5zZmVyL3NyYy90cmFuc2Zlci1wYW5lbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MmRkYWI4YmQmXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3RyYW5zZmVyL3NyYy90cmFuc2Zlci1wYW5lbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuXG5cblxuXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHRyYW5zZmVyX3BhbmVsdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbWl4aW5zOiBbbG9jYWxlX2RlZmF1bHQuYV0sXG5cbiAgbmFtZTogJ0VsVHJhbnNmZXJQYW5lbCcsXG5cbiAgY29tcG9uZW50TmFtZTogJ0VsVHJhbnNmZXJQYW5lbCcsXG5cbiAgY29tcG9uZW50czoge1xuICAgIEVsQ2hlY2tib3hHcm91cDogY2hlY2tib3hfZ3JvdXBfZGVmYXVsdC5hLFxuICAgIEVsQ2hlY2tib3g6IGNoZWNrYm94X2RlZmF1bHQuYSxcbiAgICBFbElucHV0OiBpbnB1dF9kZWZhdWx0LmEsXG4gICAgT3B0aW9uQ29udGVudDoge1xuICAgICAgcHJvcHM6IHtcbiAgICAgICAgb3B0aW9uOiBPYmplY3RcbiAgICAgIH0sXG4gICAgICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcihoKSB7XG4gICAgICAgIHZhciBnZXRQYXJlbnQgPSBmdW5jdGlvbiBnZXRQYXJlbnQodm0pIHtcbiAgICAgICAgICBpZiAodm0uJG9wdGlvbnMuY29tcG9uZW50TmFtZSA9PT0gJ0VsVHJhbnNmZXJQYW5lbCcpIHtcbiAgICAgICAgICAgIHJldHVybiB2bTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHZtLiRwYXJlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXRQYXJlbnQodm0uJHBhcmVudCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB2bTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHZhciBwYW5lbCA9IGdldFBhcmVudCh0aGlzKTtcbiAgICAgICAgdmFyIHRyYW5zZmVyID0gcGFuZWwuJHBhcmVudCB8fCBwYW5lbDtcbiAgICAgICAgcmV0dXJuIHBhbmVsLnJlbmRlckNvbnRlbnQgPyBwYW5lbC5yZW5kZXJDb250ZW50KGgsIHRoaXMub3B0aW9uKSA6IHRyYW5zZmVyLiRzY29wZWRTbG90cy5kZWZhdWx0ID8gdHJhbnNmZXIuJHNjb3BlZFNsb3RzLmRlZmF1bHQoeyBvcHRpb246IHRoaXMub3B0aW9uIH0pIDogaCgnc3BhbicsIFt0aGlzLm9wdGlvbltwYW5lbC5sYWJlbFByb3BdIHx8IHRoaXMub3B0aW9uW3BhbmVsLmtleVByb3BdXSk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgZGF0YToge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICBkZWZhdWx0OiBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgIH0sXG4gICAgcmVuZGVyQ29udGVudDogRnVuY3Rpb24sXG4gICAgcGxhY2Vob2xkZXI6IFN0cmluZyxcbiAgICB0aXRsZTogU3RyaW5nLFxuICAgIGZpbHRlcmFibGU6IEJvb2xlYW4sXG4gICAgZm9ybWF0OiBPYmplY3QsXG4gICAgZmlsdGVyTWV0aG9kOiBGdW5jdGlvbixcbiAgICBkZWZhdWx0Q2hlY2tlZDogQXJyYXksXG4gICAgcHJvcHM6IE9iamVjdFxuICB9LFxuXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNoZWNrZWQ6IFtdLFxuICAgICAgYWxsQ2hlY2tlZDogZmFsc2UsXG4gICAgICBxdWVyeTogJycsXG4gICAgICBpbnB1dEhvdmVyOiBmYWxzZSxcbiAgICAgIGNoZWNrQ2hhbmdlQnlVc2VyOiB0cnVlXG4gICAgfTtcbiAgfSxcblxuXG4gIHdhdGNoOiB7XG4gICAgY2hlY2tlZDogZnVuY3Rpb24gY2hlY2tlZCh2YWwsIG9sZFZhbCkge1xuICAgICAgdGhpcy51cGRhdGVBbGxDaGVja2VkKCk7XG4gICAgICBpZiAodGhpcy5jaGVja0NoYW5nZUJ5VXNlcikge1xuICAgICAgICB2YXIgbW92ZWRLZXlzID0gdmFsLmNvbmNhdChvbGRWYWwpLmZpbHRlcihmdW5jdGlvbiAodikge1xuICAgICAgICAgIHJldHVybiB2YWwuaW5kZXhPZih2KSA9PT0gLTEgfHwgb2xkVmFsLmluZGV4T2YodikgPT09IC0xO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy4kZW1pdCgnY2hlY2tlZC1jaGFuZ2UnLCB2YWwsIG1vdmVkS2V5cyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLiRlbWl0KCdjaGVja2VkLWNoYW5nZScsIHZhbCk7XG4gICAgICAgIHRoaXMuY2hlY2tDaGFuZ2VCeVVzZXIgPSB0cnVlO1xuICAgICAgfVxuICAgIH0sXG4gICAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIHZhciBjaGVja2VkID0gW107XG4gICAgICB2YXIgZmlsdGVyZWREYXRhS2V5cyA9IHRoaXMuZmlsdGVyZWREYXRhLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICByZXR1cm4gaXRlbVtfdGhpcy5rZXlQcm9wXTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5jaGVja2VkLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgaWYgKGZpbHRlcmVkRGF0YUtleXMuaW5kZXhPZihpdGVtKSA+IC0xKSB7XG4gICAgICAgICAgY2hlY2tlZC5wdXNoKGl0ZW0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuY2hlY2tDaGFuZ2VCeVVzZXIgPSBmYWxzZTtcbiAgICAgIHRoaXMuY2hlY2tlZCA9IGNoZWNrZWQ7XG4gICAgfSxcbiAgICBjaGVja2FibGVEYXRhOiBmdW5jdGlvbiBjaGVja2FibGVEYXRhKCkge1xuICAgICAgdGhpcy51cGRhdGVBbGxDaGVja2VkKCk7XG4gICAgfSxcblxuXG4gICAgZGVmYXVsdENoZWNrZWQ6IHtcbiAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcbiAgICAgIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIodmFsLCBvbGRWYWwpIHtcbiAgICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgICAgaWYgKG9sZFZhbCAmJiB2YWwubGVuZ3RoID09PSBvbGRWYWwubGVuZ3RoICYmIHZhbC5ldmVyeShmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgIHJldHVybiBvbGRWYWwuaW5kZXhPZihpdGVtKSA+IC0xO1xuICAgICAgICB9KSkgcmV0dXJuO1xuICAgICAgICB2YXIgY2hlY2tlZCA9IFtdO1xuICAgICAgICB2YXIgY2hlY2thYmxlRGF0YUtleXMgPSB0aGlzLmNoZWNrYWJsZURhdGEubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgcmV0dXJuIGl0ZW1bX3RoaXMyLmtleVByb3BdO1xuICAgICAgICB9KTtcbiAgICAgICAgdmFsLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICBpZiAoY2hlY2thYmxlRGF0YUtleXMuaW5kZXhPZihpdGVtKSA+IC0xKSB7XG4gICAgICAgICAgICBjaGVja2VkLnB1c2goaXRlbSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jaGVja0NoYW5nZUJ5VXNlciA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNoZWNrZWQgPSBjaGVja2VkO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGZpbHRlcmVkRGF0YTogZnVuY3Rpb24gZmlsdGVyZWREYXRhKCkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgIHJldHVybiB0aGlzLmRhdGEuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIGlmICh0eXBlb2YgX3RoaXMzLmZpbHRlck1ldGhvZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHJldHVybiBfdGhpczMuZmlsdGVyTWV0aG9kKF90aGlzMy5xdWVyeSwgaXRlbSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIGxhYmVsID0gaXRlbVtfdGhpczMubGFiZWxQcm9wXSB8fCBpdGVtW190aGlzMy5rZXlQcm9wXS50b1N0cmluZygpO1xuICAgICAgICAgIHJldHVybiBsYWJlbC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoX3RoaXMzLnF1ZXJ5LnRvTG93ZXJDYXNlKCkpID4gLTE7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sXG4gICAgY2hlY2thYmxlRGF0YTogZnVuY3Rpb24gY2hlY2thYmxlRGF0YSgpIHtcbiAgICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgICByZXR1cm4gdGhpcy5maWx0ZXJlZERhdGEuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIHJldHVybiAhaXRlbVtfdGhpczQuZGlzYWJsZWRQcm9wXTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgY2hlY2tlZFN1bW1hcnk6IGZ1bmN0aW9uIGNoZWNrZWRTdW1tYXJ5KCkge1xuICAgICAgdmFyIGNoZWNrZWRMZW5ndGggPSB0aGlzLmNoZWNrZWQubGVuZ3RoO1xuICAgICAgdmFyIGRhdGFMZW5ndGggPSB0aGlzLmRhdGEubGVuZ3RoO1xuICAgICAgdmFyIF9mb3JtYXQgPSB0aGlzLmZvcm1hdCxcbiAgICAgICAgICBub0NoZWNrZWQgPSBfZm9ybWF0Lm5vQ2hlY2tlZCxcbiAgICAgICAgICBoYXNDaGVja2VkID0gX2Zvcm1hdC5oYXNDaGVja2VkO1xuXG4gICAgICBpZiAobm9DaGVja2VkICYmIGhhc0NoZWNrZWQpIHtcbiAgICAgICAgcmV0dXJuIGNoZWNrZWRMZW5ndGggPiAwID8gaGFzQ2hlY2tlZC5yZXBsYWNlKC9cXCR7Y2hlY2tlZH0vZywgY2hlY2tlZExlbmd0aCkucmVwbGFjZSgvXFwke3RvdGFsfS9nLCBkYXRhTGVuZ3RoKSA6IG5vQ2hlY2tlZC5yZXBsYWNlKC9cXCR7dG90YWx9L2csIGRhdGFMZW5ndGgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGNoZWNrZWRMZW5ndGggKyAnLycgKyBkYXRhTGVuZ3RoO1xuICAgICAgfVxuICAgIH0sXG4gICAgaXNJbmRldGVybWluYXRlOiBmdW5jdGlvbiBpc0luZGV0ZXJtaW5hdGUoKSB7XG4gICAgICB2YXIgY2hlY2tlZExlbmd0aCA9IHRoaXMuY2hlY2tlZC5sZW5ndGg7XG4gICAgICByZXR1cm4gY2hlY2tlZExlbmd0aCA+IDAgJiYgY2hlY2tlZExlbmd0aCA8IHRoaXMuY2hlY2thYmxlRGF0YS5sZW5ndGg7XG4gICAgfSxcbiAgICBoYXNOb01hdGNoOiBmdW5jdGlvbiBoYXNOb01hdGNoKCkge1xuICAgICAgcmV0dXJuIHRoaXMucXVlcnkubGVuZ3RoID4gMCAmJiB0aGlzLmZpbHRlcmVkRGF0YS5sZW5ndGggPT09IDA7XG4gICAgfSxcbiAgICBpbnB1dEljb246IGZ1bmN0aW9uIGlucHV0SWNvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLnF1ZXJ5Lmxlbmd0aCA+IDAgJiYgdGhpcy5pbnB1dEhvdmVyID8gJ2NpcmNsZS1jbG9zZScgOiAnc2VhcmNoJztcbiAgICB9LFxuICAgIGxhYmVsUHJvcDogZnVuY3Rpb24gbGFiZWxQcm9wKCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvcHMubGFiZWwgfHwgJ2xhYmVsJztcbiAgICB9LFxuICAgIGtleVByb3A6IGZ1bmN0aW9uIGtleVByb3AoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9wcy5rZXkgfHwgJ2tleSc7XG4gICAgfSxcbiAgICBkaXNhYmxlZFByb3A6IGZ1bmN0aW9uIGRpc2FibGVkUHJvcCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BzLmRpc2FibGVkIHx8ICdkaXNhYmxlZCc7XG4gICAgfSxcbiAgICBoYXNGb290ZXI6IGZ1bmN0aW9uIGhhc0Zvb3RlcigpIHtcbiAgICAgIHJldHVybiAhIXRoaXMuJHNsb3RzLmRlZmF1bHQ7XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICB1cGRhdGVBbGxDaGVja2VkOiBmdW5jdGlvbiB1cGRhdGVBbGxDaGVja2VkKCkge1xuICAgICAgdmFyIF90aGlzNSA9IHRoaXM7XG5cbiAgICAgIHZhciBjaGVja2FibGVEYXRhS2V5cyA9IHRoaXMuY2hlY2thYmxlRGF0YS5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGl0ZW1bX3RoaXM1LmtleVByb3BdO1xuICAgICAgfSk7XG4gICAgICB0aGlzLmFsbENoZWNrZWQgPSBjaGVja2FibGVEYXRhS2V5cy5sZW5ndGggPiAwICYmIGNoZWNrYWJsZURhdGFLZXlzLmV2ZXJ5KGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIHJldHVybiBfdGhpczUuY2hlY2tlZC5pbmRleE9mKGl0ZW0pID4gLTE7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGhhbmRsZUFsbENoZWNrZWRDaGFuZ2U6IGZ1bmN0aW9uIGhhbmRsZUFsbENoZWNrZWRDaGFuZ2UodmFsdWUpIHtcbiAgICAgIHZhciBfdGhpczYgPSB0aGlzO1xuXG4gICAgICB0aGlzLmNoZWNrZWQgPSB2YWx1ZSA/IHRoaXMuY2hlY2thYmxlRGF0YS5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGl0ZW1bX3RoaXM2LmtleVByb3BdO1xuICAgICAgfSkgOiBbXTtcbiAgICB9LFxuICAgIGNsZWFyUXVlcnk6IGZ1bmN0aW9uIGNsZWFyUXVlcnkoKSB7XG4gICAgICBpZiAodGhpcy5pbnB1dEljb24gPT09ICdjaXJjbGUtY2xvc2UnKSB7XG4gICAgICAgIHRoaXMucXVlcnkgPSAnJztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy90cmFuc2Zlci9zcmMvdHJhbnNmZXItcGFuZWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY190cmFuc2Zlcl9wYW5lbHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh0cmFuc2Zlcl9wYW5lbHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy90cmFuc2Zlci9zcmMvdHJhbnNmZXItcGFuZWwudnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgdHJhbnNmZXJfcGFuZWxfY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBzcmNfdHJhbnNmZXJfcGFuZWx2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIHRyYW5zZmVyX3BhbmVsdnVlX3R5cGVfdGVtcGxhdGVfaWRfMmRkYWI4YmRfcmVuZGVyLFxuICB0cmFuc2Zlcl9wYW5lbHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzJkZGFiOGJkX3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgdHJhbnNmZXJfcGFuZWxfYXBpOyB9XG50cmFuc2Zlcl9wYW5lbF9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL3RyYW5zZmVyL3NyYy90cmFuc2Zlci1wYW5lbC52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgdHJhbnNmZXJfcGFuZWwgPSAodHJhbnNmZXJfcGFuZWxfY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvdHJhbnNmZXIvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuXG5cblxuXG5cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgdHJhbnNmZXJfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBuYW1lOiAnRWxUcmFuc2ZlcicsXG5cbiAgbWl4aW5zOiBbZW1pdHRlcl9kZWZhdWx0LmEsIGxvY2FsZV9kZWZhdWx0LmEsIG1pZ3JhdGluZ19kZWZhdWx0LmFdLFxuXG4gIGNvbXBvbmVudHM6IHtcbiAgICBUcmFuc2ZlclBhbmVsOiB0cmFuc2Zlcl9wYW5lbCxcbiAgICBFbEJ1dHRvbjogYnV0dG9uX2RlZmF1bHQuYVxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgZGF0YToge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICBkZWZhdWx0OiBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgIH0sXG4gICAgdGl0bGVzOiB7XG4gICAgICB0eXBlOiBBcnJheSxcbiAgICAgIGRlZmF1bHQ6IGZ1bmN0aW9uIF9kZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgfSxcbiAgICBidXR0b25UZXh0czoge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICBkZWZhdWx0OiBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgIH0sXG4gICAgZmlsdGVyUGxhY2Vob2xkZXI6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICcnXG4gICAgfSxcbiAgICBmaWx0ZXJNZXRob2Q6IEZ1bmN0aW9uLFxuICAgIGxlZnREZWZhdWx0Q2hlY2tlZDoge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICBkZWZhdWx0OiBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgIH0sXG4gICAgcmlnaHREZWZhdWx0Q2hlY2tlZDoge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICBkZWZhdWx0OiBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgIH0sXG4gICAgcmVuZGVyQ29udGVudDogRnVuY3Rpb24sXG4gICAgdmFsdWU6IHtcbiAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgZGVmYXVsdDogZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGZvcm1hdDoge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgZGVmYXVsdDogZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGZpbHRlcmFibGU6IEJvb2xlYW4sXG4gICAgcHJvcHM6IHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIGRlZmF1bHQ6IGZ1bmN0aW9uIF9kZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGxhYmVsOiAnbGFiZWwnLFxuICAgICAgICAgIGtleTogJ2tleScsXG4gICAgICAgICAgZGlzYWJsZWQ6ICdkaXNhYmxlZCdcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHRhcmdldE9yZGVyOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnb3JpZ2luYWwnXG4gICAgfVxuICB9LFxuXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxlZnRDaGVja2VkOiBbXSxcbiAgICAgIHJpZ2h0Q2hlY2tlZDogW11cbiAgICB9O1xuICB9LFxuXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBkYXRhT2JqOiBmdW5jdGlvbiBkYXRhT2JqKCkge1xuICAgICAgdmFyIGtleSA9IHRoaXMucHJvcHMua2V5O1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YS5yZWR1Y2UoZnVuY3Rpb24gKG8sIGN1cikge1xuICAgICAgICByZXR1cm4gKG9bY3VyW2tleV1dID0gY3VyKSAmJiBvO1xuICAgICAgfSwge30pO1xuICAgIH0sXG4gICAgc291cmNlRGF0YTogZnVuY3Rpb24gc291cmNlRGF0YSgpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIHJldHVybiB0aGlzLmRhdGEuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIHJldHVybiBfdGhpcy52YWx1ZS5pbmRleE9mKGl0ZW1bX3RoaXMucHJvcHMua2V5XSkgPT09IC0xO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICB0YXJnZXREYXRhOiBmdW5jdGlvbiB0YXJnZXREYXRhKCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIGlmICh0aGlzLnRhcmdldE9yZGVyID09PSAnb3JpZ2luYWwnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgcmV0dXJuIF90aGlzMi52YWx1ZS5pbmRleE9mKGl0ZW1bX3RoaXMyLnByb3BzLmtleV0pID4gLTE7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUucmVkdWNlKGZ1bmN0aW9uIChhcnIsIGN1cikge1xuICAgICAgICAgIHZhciB2YWwgPSBfdGhpczIuZGF0YU9ialtjdXJdO1xuICAgICAgICAgIGlmICh2YWwpIHtcbiAgICAgICAgICAgIGFyci5wdXNoKHZhbCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBhcnI7XG4gICAgICAgIH0sIFtdKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGhhc0J1dHRvblRleHRzOiBmdW5jdGlvbiBoYXNCdXR0b25UZXh0cygpIHtcbiAgICAgIHJldHVybiB0aGlzLmJ1dHRvblRleHRzLmxlbmd0aCA9PT0gMjtcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICB2YWx1ZTogZnVuY3Rpb24gdmFsdWUodmFsKSB7XG4gICAgICB0aGlzLmRpc3BhdGNoKCdFbEZvcm1JdGVtJywgJ2VsLmZvcm0uY2hhbmdlJywgdmFsKTtcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldE1pZ3JhdGluZ0NvbmZpZzogZnVuY3Rpb24gZ2V0TWlncmF0aW5nQ29uZmlnKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAnZm9vdGVyLWZvcm1hdCc6ICdmb290ZXItZm9ybWF0IGlzIHJlbmFtZWQgdG8gZm9ybWF0LidcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9LFxuICAgIG9uU291cmNlQ2hlY2tlZENoYW5nZTogZnVuY3Rpb24gb25Tb3VyY2VDaGVja2VkQ2hhbmdlKHZhbCwgbW92ZWRLZXlzKSB7XG4gICAgICB0aGlzLmxlZnRDaGVja2VkID0gdmFsO1xuICAgICAgaWYgKG1vdmVkS2V5cyA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG4gICAgICB0aGlzLiRlbWl0KCdsZWZ0LWNoZWNrLWNoYW5nZScsIHZhbCwgbW92ZWRLZXlzKTtcbiAgICB9LFxuICAgIG9uVGFyZ2V0Q2hlY2tlZENoYW5nZTogZnVuY3Rpb24gb25UYXJnZXRDaGVja2VkQ2hhbmdlKHZhbCwgbW92ZWRLZXlzKSB7XG4gICAgICB0aGlzLnJpZ2h0Q2hlY2tlZCA9IHZhbDtcbiAgICAgIGlmIChtb3ZlZEtleXMgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuICAgICAgdGhpcy4kZW1pdCgncmlnaHQtY2hlY2stY2hhbmdlJywgdmFsLCBtb3ZlZEtleXMpO1xuICAgIH0sXG4gICAgYWRkVG9MZWZ0OiBmdW5jdGlvbiBhZGRUb0xlZnQoKSB7XG4gICAgICB2YXIgY3VycmVudFZhbHVlID0gdGhpcy52YWx1ZS5zbGljZSgpO1xuICAgICAgdGhpcy5yaWdodENoZWNrZWQuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICB2YXIgaW5kZXggPSBjdXJyZW50VmFsdWUuaW5kZXhPZihpdGVtKTtcbiAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICBjdXJyZW50VmFsdWUuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIGN1cnJlbnRWYWx1ZSk7XG4gICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCBjdXJyZW50VmFsdWUsICdsZWZ0JywgdGhpcy5yaWdodENoZWNrZWQpO1xuICAgIH0sXG4gICAgYWRkVG9SaWdodDogZnVuY3Rpb24gYWRkVG9SaWdodCgpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgICB2YXIgY3VycmVudFZhbHVlID0gdGhpcy52YWx1ZS5zbGljZSgpO1xuICAgICAgdmFyIGl0ZW1zVG9CZU1vdmVkID0gW107XG4gICAgICB2YXIga2V5ID0gdGhpcy5wcm9wcy5rZXk7XG4gICAgICB0aGlzLmRhdGEuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICB2YXIgaXRlbUtleSA9IGl0ZW1ba2V5XTtcbiAgICAgICAgaWYgKF90aGlzMy5sZWZ0Q2hlY2tlZC5pbmRleE9mKGl0ZW1LZXkpID4gLTEgJiYgX3RoaXMzLnZhbHVlLmluZGV4T2YoaXRlbUtleSkgPT09IC0xKSB7XG4gICAgICAgICAgaXRlbXNUb0JlTW92ZWQucHVzaChpdGVtS2V5KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBjdXJyZW50VmFsdWUgPSB0aGlzLnRhcmdldE9yZGVyID09PSAndW5zaGlmdCcgPyBpdGVtc1RvQmVNb3ZlZC5jb25jYXQoY3VycmVudFZhbHVlKSA6IGN1cnJlbnRWYWx1ZS5jb25jYXQoaXRlbXNUb0JlTW92ZWQpO1xuICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCBjdXJyZW50VmFsdWUpO1xuICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgY3VycmVudFZhbHVlLCAncmlnaHQnLCB0aGlzLmxlZnRDaGVja2VkKTtcbiAgICB9LFxuICAgIGNsZWFyUXVlcnk6IGZ1bmN0aW9uIGNsZWFyUXVlcnkod2hpY2gpIHtcbiAgICAgIGlmICh3aGljaCA9PT0gJ2xlZnQnKSB7XG4gICAgICAgIHRoaXMuJHJlZnMubGVmdFBhbmVsLnF1ZXJ5ID0gJyc7XG4gICAgICB9IGVsc2UgaWYgKHdoaWNoID09PSAncmlnaHQnKSB7XG4gICAgICAgIHRoaXMuJHJlZnMucmlnaHRQYW5lbC5xdWVyeSA9ICcnO1xuICAgICAgfVxuICAgIH1cbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3RyYW5zZmVyL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc190cmFuc2Zlcl9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh0cmFuc2Zlcl9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy90cmFuc2Zlci9zcmMvbWFpbi52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciB0cmFuc2Zlcl9zcmNfbWFpbl9jb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIHBhY2thZ2VzX3RyYW5zZmVyX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfNWM2NTRkZDhfcmVuZGVyLFxuICBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfNWM2NTRkZDhfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciB0cmFuc2Zlcl9zcmNfbWFpbl9hcGk7IH1cbnRyYW5zZmVyX3NyY19tYWluX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvdHJhbnNmZXIvc3JjL21haW4udnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHRyYW5zZmVyX3NyY19tYWluID0gKHRyYW5zZmVyX3NyY19tYWluX2NvbXBvbmVudC5leHBvcnRzKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdHJhbnNmZXIvaW5kZXguanNcblxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xudHJhbnNmZXJfc3JjX21haW4uaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcbiAgVnVlLmNvbXBvbmVudCh0cmFuc2Zlcl9zcmNfbWFpbi5uYW1lLCB0cmFuc2Zlcl9zcmNfbWFpbik7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciB0cmFuc2ZlciA9ICh0cmFuc2Zlcl9zcmNfbWFpbik7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2NvbnRhaW5lci9zcmMvbWFpbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NWJmMTgxZDQmXG52YXIgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzViZjE4MWQ0X3JlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcInNlY3Rpb25cIixcbiAgICB7IHN0YXRpY0NsYXNzOiBcImVsLWNvbnRhaW5lclwiLCBjbGFzczogeyBcImlzLXZlcnRpY2FsXCI6IF92bS5pc1ZlcnRpY2FsIH0gfSxcbiAgICBbX3ZtLl90KFwiZGVmYXVsdFwiKV0sXG4gICAgMlxuICApXG59XG52YXIgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzViZjE4MWQ0X3N0YXRpY1JlbmRlckZucyA9IFtdXG5tYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfNWJmMTgxZDRfcmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jb250YWluZXIvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTViZjE4MWQ0JlxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9jb250YWluZXIvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBjb250YWluZXJfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBuYW1lOiAnRWxDb250YWluZXInLFxuXG4gIGNvbXBvbmVudE5hbWU6ICdFbENvbnRhaW5lcicsXG5cbiAgcHJvcHM6IHtcbiAgICBkaXJlY3Rpb246IFN0cmluZ1xuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgaXNWZXJ0aWNhbDogZnVuY3Rpb24gaXNWZXJ0aWNhbCgpIHtcbiAgICAgIGlmICh0aGlzLmRpcmVjdGlvbiA9PT0gJ3ZlcnRpY2FsJykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5kaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy4kc2xvdHMgJiYgdGhpcy4kc2xvdHMuZGVmYXVsdCA/IHRoaXMuJHNsb3RzLmRlZmF1bHQuc29tZShmdW5jdGlvbiAodm5vZGUpIHtcbiAgICAgICAgdmFyIHRhZyA9IHZub2RlLmNvbXBvbmVudE9wdGlvbnMgJiYgdm5vZGUuY29tcG9uZW50T3B0aW9ucy50YWc7XG4gICAgICAgIHJldHVybiB0YWcgPT09ICdlbC1oZWFkZXInIHx8IHRhZyA9PT0gJ2VsLWZvb3Rlcic7XG4gICAgICB9KSA6IGZhbHNlO1xuICAgIH1cbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2NvbnRhaW5lci9zcmMvbWFpbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcGFja2FnZXNfY29udGFpbmVyX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKGNvbnRhaW5lcl9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jb250YWluZXIvc3JjL21haW4udnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgY29udGFpbmVyX3NyY19tYWluX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgcGFja2FnZXNfY29udGFpbmVyX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfNWJmMTgxZDRfcmVuZGVyLFxuICBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfNWJmMTgxZDRfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBjb250YWluZXJfc3JjX21haW5fYXBpOyB9XG5jb250YWluZXJfc3JjX21haW5fY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy9jb250YWluZXIvc3JjL21haW4udnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGNvbnRhaW5lcl9zcmNfbWFpbiA9IChjb250YWluZXJfc3JjX21haW5fY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jb250YWluZXIvaW5kZXguanNcblxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuY29udGFpbmVyX3NyY19tYWluLmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG4gIFZ1ZS5jb21wb25lbnQoY29udGFpbmVyX3NyY19tYWluLm5hbWUsIGNvbnRhaW5lcl9zcmNfbWFpbik7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc19jb250YWluZXIgPSAoY29udGFpbmVyX3NyY19tYWluKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvaGVhZGVyL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yYjI5NmFiMiZcbnZhciBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfMmIyOTZhYjJfcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiaGVhZGVyXCIsXG4gICAgeyBzdGF0aWNDbGFzczogXCJlbC1oZWFkZXJcIiwgc3R5bGU6IHsgaGVpZ2h0OiBfdm0uaGVpZ2h0IH0gfSxcbiAgICBbX3ZtLl90KFwiZGVmYXVsdFwiKV0sXG4gICAgMlxuICApXG59XG52YXIgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzJiMjk2YWIyX3N0YXRpY1JlbmRlckZucyA9IFtdXG5tYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfMmIyOTZhYjJfcmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9oZWFkZXIvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTJiMjk2YWIyJlxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9oZWFkZXIvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBoZWFkZXJfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBuYW1lOiAnRWxIZWFkZXInLFxuXG4gIGNvbXBvbmVudE5hbWU6ICdFbEhlYWRlcicsXG5cbiAgcHJvcHM6IHtcbiAgICBoZWlnaHQ6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICc2MHB4J1xuICAgIH1cbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2hlYWRlci9zcmMvbWFpbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcGFja2FnZXNfaGVhZGVyX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKGhlYWRlcl9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9oZWFkZXIvc3JjL21haW4udnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgaGVhZGVyX3NyY19tYWluX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgcGFja2FnZXNfaGVhZGVyX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfMmIyOTZhYjJfcmVuZGVyLFxuICBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfMmIyOTZhYjJfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBoZWFkZXJfc3JjX21haW5fYXBpOyB9XG5oZWFkZXJfc3JjX21haW5fY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy9oZWFkZXIvc3JjL21haW4udnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGhlYWRlcl9zcmNfbWFpbiA9IChoZWFkZXJfc3JjX21haW5fY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9oZWFkZXIvaW5kZXguanNcblxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuaGVhZGVyX3NyY19tYWluLmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG4gIFZ1ZS5jb21wb25lbnQoaGVhZGVyX3NyY19tYWluLm5hbWUsIGhlYWRlcl9zcmNfbWFpbik7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBoZWFkZXIgPSAoaGVhZGVyX3NyY19tYWluKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvYXNpZGUvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTAzNDExZGJmJlxudmFyIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF8wMzQxMWRiZl9yZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJhc2lkZVwiLFxuICAgIHsgc3RhdGljQ2xhc3M6IFwiZWwtYXNpZGVcIiwgc3R5bGU6IHsgd2lkdGg6IF92bS53aWR0aCB9IH0sXG4gICAgW192bS5fdChcImRlZmF1bHRcIildLFxuICAgIDJcbiAgKVxufVxudmFyIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF8wMzQxMWRiZl9zdGF0aWNSZW5kZXJGbnMgPSBbXVxubWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzAzNDExZGJmX3JlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvYXNpZGUvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTAzNDExZGJmJlxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9hc2lkZS9zcmMvbWFpbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGFzaWRlX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbmFtZTogJ0VsQXNpZGUnLFxuXG4gIGNvbXBvbmVudE5hbWU6ICdFbEFzaWRlJyxcblxuICBwcm9wczoge1xuICAgIHdpZHRoOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnMzAwcHgnXG4gICAgfVxuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvYXNpZGUvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhY2thZ2VzX2FzaWRlX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKGFzaWRlX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2FzaWRlL3NyYy9tYWluLnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGFzaWRlX3NyY19tYWluX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgcGFja2FnZXNfYXNpZGVfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF8wMzQxMWRiZl9yZW5kZXIsXG4gIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF8wMzQxMWRiZl9zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGFzaWRlX3NyY19tYWluX2FwaTsgfVxuYXNpZGVfc3JjX21haW5fY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy9hc2lkZS9zcmMvbWFpbi52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgYXNpZGVfc3JjX21haW4gPSAoYXNpZGVfc3JjX21haW5fY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9hc2lkZS9pbmRleC5qc1xuXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5hc2lkZV9zcmNfbWFpbi5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuICBWdWUuY29tcG9uZW50KGFzaWRlX3NyY19tYWluLm5hbWUsIGFzaWRlX3NyY19tYWluKTtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGFzaWRlID0gKGFzaWRlX3NyY19tYWluKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvbWFpbi9zcmMvbWFpbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MmEzYTc0MDYmXG52YXIgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzJhM2E3NDA2X3JlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcIm1haW5cIiwgeyBzdGF0aWNDbGFzczogXCJlbC1tYWluXCIgfSwgW192bS5fdChcImRlZmF1bHRcIildLCAyKVxufVxudmFyIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF8yYTNhNzQwNl9zdGF0aWNSZW5kZXJGbnMgPSBbXVxubWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzJhM2E3NDA2X3JlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvbWFpbi9zcmMvbWFpbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MmEzYTc0MDYmXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL21haW4vc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBtYWluX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbmFtZTogJ0VsTWFpbicsXG4gIGNvbXBvbmVudE5hbWU6ICdFbE1haW4nXG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvbWFpbi9zcmMvbWFpbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcGFja2FnZXNfbWFpbl9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChtYWluX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL21haW4vc3JjL21haW4udnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgbWFpbl9zcmNfbWFpbl9jb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIHBhY2thZ2VzX21haW5fc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF8yYTNhNzQwNl9yZW5kZXIsXG4gIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF8yYTNhNzQwNl9zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIG1haW5fc3JjX21haW5fYXBpOyB9XG5tYWluX3NyY19tYWluX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvbWFpbi9zcmMvbWFpbi52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgbWFpbl9zcmNfbWFpbiA9IChtYWluX3NyY19tYWluX2NvbXBvbmVudC5leHBvcnRzKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvbWFpbi9pbmRleC5qc1xuXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5tYWluX3NyY19tYWluLmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG4gIFZ1ZS5jb21wb25lbnQobWFpbl9zcmNfbWFpbi5uYW1lLCBtYWluX3NyY19tYWluKTtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhY2thZ2VzX21haW4gPSAobWFpbl9zcmNfbWFpbik7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2Zvb3Rlci9zcmMvbWFpbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ODAyMTAzMzgmXG52YXIgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzgwMjEwMzM4X3JlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImZvb3RlclwiLFxuICAgIHsgc3RhdGljQ2xhc3M6IFwiZWwtZm9vdGVyXCIsIHN0eWxlOiB7IGhlaWdodDogX3ZtLmhlaWdodCB9IH0sXG4gICAgW192bS5fdChcImRlZmF1bHRcIildLFxuICAgIDJcbiAgKVxufVxudmFyIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF84MDIxMDMzOF9zdGF0aWNSZW5kZXJGbnMgPSBbXVxubWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzgwMjEwMzM4X3JlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZm9vdGVyL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD04MDIxMDMzOCZcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvZm9vdGVyL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgZm9vdGVyX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbmFtZTogJ0VsRm9vdGVyJyxcblxuICBjb21wb25lbnROYW1lOiAnRWxGb290ZXInLFxuXG4gIHByb3BzOiB7XG4gICAgaGVpZ2h0OiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnNjBweCdcbiAgICB9XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9mb290ZXIvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhY2thZ2VzX2Zvb3Rlcl9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChmb290ZXJfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZm9vdGVyL3NyYy9tYWluLnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGZvb3Rlcl9zcmNfbWFpbl9jb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIHBhY2thZ2VzX2Zvb3Rlcl9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzgwMjEwMzM4X3JlbmRlcixcbiAgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzgwMjEwMzM4X3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgZm9vdGVyX3NyY19tYWluX2FwaTsgfVxuZm9vdGVyX3NyY19tYWluX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvZm9vdGVyL3NyYy9tYWluLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBmb290ZXJfc3JjX21haW4gPSAoZm9vdGVyX3NyY19tYWluX2NvbXBvbmVudC5leHBvcnRzKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZm9vdGVyL2luZGV4LmpzXG5cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmZvb3Rlcl9zcmNfbWFpbi5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuICBWdWUuY29tcG9uZW50KGZvb3Rlcl9zcmNfbWFpbi5uYW1lLCBmb290ZXJfc3JjX21haW4pO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgZm9vdGVyID0gKGZvb3Rlcl9zcmNfbWFpbik7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy90aW1lbGluZS9zcmMvbWFpbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHRpbWVsaW5lX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbmFtZTogJ0VsVGltZWxpbmUnLFxuXG4gIHByb3BzOiB7XG4gICAgcmV2ZXJzZToge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIHByb3ZpZGU6IGZ1bmN0aW9uIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRpbWVsaW5lOiB0aGlzXG4gICAgfTtcbiAgfSxcbiAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgdmFyIGggPSBhcmd1bWVudHNbMF07XG5cbiAgICB2YXIgcmV2ZXJzZSA9IHRoaXMucmV2ZXJzZTtcbiAgICB2YXIgY2xhc3NlcyA9IHtcbiAgICAgICdlbC10aW1lbGluZSc6IHRydWUsXG4gICAgICAnaXMtcmV2ZXJzZSc6IHJldmVyc2VcbiAgICB9O1xuICAgIHZhciBzbG90cyA9IHRoaXMuJHNsb3RzLmRlZmF1bHQgfHwgW107XG4gICAgaWYgKHJldmVyc2UpIHtcbiAgICAgIHNsb3RzID0gc2xvdHMucmV2ZXJzZSgpO1xuICAgIH1cbiAgICByZXR1cm4gaChcbiAgICAgICd1bCcsXG4gICAgICB7ICdjbGFzcyc6IGNsYXNzZXMgfSxcbiAgICAgIFtzbG90c11cbiAgICApO1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdGltZWxpbmUvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhY2thZ2VzX3RpbWVsaW5lX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHRpbWVsaW5lX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3RpbWVsaW5lL3NyYy9tYWluLnZ1ZVxudmFyIG1haW5fcmVuZGVyLCBtYWluX3N0YXRpY1JlbmRlckZuc1xuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciB0aW1lbGluZV9zcmNfbWFpbl9jb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIHBhY2thZ2VzX3RpbWVsaW5lX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICBtYWluX3JlbmRlcixcbiAgbWFpbl9zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIHRpbWVsaW5lX3NyY19tYWluX2FwaTsgfVxudGltZWxpbmVfc3JjX21haW5fY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy90aW1lbGluZS9zcmMvbWFpbi52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgdGltZWxpbmVfc3JjX21haW4gPSAodGltZWxpbmVfc3JjX21haW5fY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy90aW1lbGluZS9pbmRleC5qc1xuXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG50aW1lbGluZV9zcmNfbWFpbi5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuICBWdWUuY29tcG9uZW50KHRpbWVsaW5lX3NyY19tYWluLm5hbWUsIHRpbWVsaW5lX3NyY19tYWluKTtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHRpbWVsaW5lID0gKHRpbWVsaW5lX3NyY19tYWluKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvdGltZWxpbmUvc3JjL2l0ZW0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTYxYTY5ZTUwJlxudmFyIGl0ZW12dWVfdHlwZV90ZW1wbGF0ZV9pZF82MWE2OWU1MF9yZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJsaVwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLXRpbWVsaW5lLWl0ZW1cIiB9LCBbXG4gICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJlbC10aW1lbGluZS1pdGVtX190YWlsXCIgfSksXG4gICAgIV92bS4kc2xvdHMuZG90XG4gICAgICA/IF9jKFxuICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtdGltZWxpbmUtaXRlbV9fbm9kZVwiLFxuICAgICAgICAgICAgY2xhc3M6IFtcbiAgICAgICAgICAgICAgXCJlbC10aW1lbGluZS1pdGVtX19ub2RlLS1cIiArIChfdm0uc2l6ZSB8fCBcIlwiKSxcbiAgICAgICAgICAgICAgXCJlbC10aW1lbGluZS1pdGVtX19ub2RlLS1cIiArIChfdm0udHlwZSB8fCBcIlwiKVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogX3ZtLmNvbG9yXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBbXG4gICAgICAgICAgICBfdm0uaWNvblxuICAgICAgICAgICAgICA/IF9jKFwiaVwiLCB7XG4gICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC10aW1lbGluZS1pdGVtX19pY29uXCIsXG4gICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLmljb25cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgICAgXVxuICAgICAgICApXG4gICAgICA6IF92bS5fZSgpLFxuICAgIF92bS4kc2xvdHMuZG90XG4gICAgICA/IF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiZWwtdGltZWxpbmUtaXRlbV9fZG90XCIgfSwgW192bS5fdChcImRvdFwiKV0sIDIpXG4gICAgICA6IF92bS5fZSgpLFxuICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiZWwtdGltZWxpbmUtaXRlbV9fd3JhcHBlclwiIH0sIFtcbiAgICAgICFfdm0uaGlkZVRpbWVzdGFtcCAmJiBfdm0ucGxhY2VtZW50ID09PSBcInRvcFwiXG4gICAgICAgID8gX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJlbC10aW1lbGluZS1pdGVtX190aW1lc3RhbXAgaXMtdG9wXCIgfSwgW1xuICAgICAgICAgICAgX3ZtLl92KFwiXFxuICAgICAgXCIgKyBfdm0uX3MoX3ZtLnRpbWVzdGFtcCkgKyBcIlxcbiAgICBcIilcbiAgICAgICAgICBdKVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgX2MoXG4gICAgICAgIFwiZGl2XCIsXG4gICAgICAgIHsgc3RhdGljQ2xhc3M6IFwiZWwtdGltZWxpbmUtaXRlbV9fY29udGVudFwiIH0sXG4gICAgICAgIFtfdm0uX3QoXCJkZWZhdWx0XCIpXSxcbiAgICAgICAgMlxuICAgICAgKSxcbiAgICAgICFfdm0uaGlkZVRpbWVzdGFtcCAmJiBfdm0ucGxhY2VtZW50ID09PSBcImJvdHRvbVwiXG4gICAgICAgID8gX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJlbC10aW1lbGluZS1pdGVtX190aW1lc3RhbXAgaXMtYm90dG9tXCIgfSwgW1xuICAgICAgICAgICAgX3ZtLl92KFwiXFxuICAgICAgXCIgKyBfdm0uX3MoX3ZtLnRpbWVzdGFtcCkgKyBcIlxcbiAgICBcIilcbiAgICAgICAgICBdKVxuICAgICAgICA6IF92bS5fZSgpXG4gICAgXSlcbiAgXSlcbn1cbnZhciBpdGVtdnVlX3R5cGVfdGVtcGxhdGVfaWRfNjFhNjllNTBfc3RhdGljUmVuZGVyRm5zID0gW11cbml0ZW12dWVfdHlwZV90ZW1wbGF0ZV9pZF82MWE2OWU1MF9yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3RpbWVsaW5lL3NyYy9pdGVtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02MWE2OWU1MCZcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvdGltZWxpbmUvc3JjL2l0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHRpbWVsaW5lX3NyY19pdGVtdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbmFtZTogJ0VsVGltZWxpbmVJdGVtJyxcblxuICBpbmplY3Q6IFsndGltZWxpbmUnXSxcblxuICBwcm9wczoge1xuICAgIHRpbWVzdGFtcDogU3RyaW5nLFxuXG4gICAgaGlkZVRpbWVzdGFtcDoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSxcblxuICAgIHBsYWNlbWVudDoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2JvdHRvbSdcbiAgICB9LFxuXG4gICAgdHlwZTogU3RyaW5nLFxuXG4gICAgY29sb3I6IFN0cmluZyxcblxuICAgIHNpemU6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdub3JtYWwnXG4gICAgfSxcblxuICAgIGljb246IFN0cmluZ1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdGltZWxpbmUvc3JjL2l0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhY2thZ2VzX3RpbWVsaW5lX3NyY19pdGVtdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHRpbWVsaW5lX3NyY19pdGVtdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3RpbWVsaW5lL3NyYy9pdGVtLnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIHNyY19pdGVtX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgcGFja2FnZXNfdGltZWxpbmVfc3JjX2l0ZW12dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIGl0ZW12dWVfdHlwZV90ZW1wbGF0ZV9pZF82MWE2OWU1MF9yZW5kZXIsXG4gIGl0ZW12dWVfdHlwZV90ZW1wbGF0ZV9pZF82MWE2OWU1MF9zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIHNyY19pdGVtX2FwaTsgfVxuc3JjX2l0ZW1fY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy90aW1lbGluZS9zcmMvaXRlbS52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgdGltZWxpbmVfc3JjX2l0ZW0gPSAoc3JjX2l0ZW1fY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy90aW1lbGluZS1pdGVtL2luZGV4LmpzXG5cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbnRpbWVsaW5lX3NyY19pdGVtLmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG4gIFZ1ZS5jb21wb25lbnQodGltZWxpbmVfc3JjX2l0ZW0ubmFtZSwgdGltZWxpbmVfc3JjX2l0ZW0pO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgdGltZWxpbmVfaXRlbSA9ICh0aW1lbGluZV9zcmNfaXRlbSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2xpbmsvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTAxY2YzYjY1JlxudmFyIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF8wMWNmM2I2NV9yZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJhXCIsXG4gICAgX3ZtLl9iKFxuICAgICAge1xuICAgICAgICBjbGFzczogW1xuICAgICAgICAgIFwiZWwtbGlua1wiLFxuICAgICAgICAgIF92bS50eXBlID8gXCJlbC1saW5rLS1cIiArIF92bS50eXBlIDogXCJcIixcbiAgICAgICAgICBfdm0uZGlzYWJsZWQgJiYgXCJpcy1kaXNhYmxlZFwiLFxuICAgICAgICAgIF92bS51bmRlcmxpbmUgJiYgIV92bS5kaXNhYmxlZCAmJiBcImlzLXVuZGVybGluZVwiXG4gICAgICAgIF0sXG4gICAgICAgIGF0dHJzOiB7IGhyZWY6IF92bS5kaXNhYmxlZCA/IG51bGwgOiBfdm0uaHJlZiB9LFxuICAgICAgICBvbjogeyBjbGljazogX3ZtLmhhbmRsZUNsaWNrIH1cbiAgICAgIH0sXG4gICAgICBcImFcIixcbiAgICAgIF92bS4kYXR0cnMsXG4gICAgICBmYWxzZVxuICAgICksXG4gICAgW1xuICAgICAgX3ZtLmljb24gPyBfYyhcImlcIiwgeyBjbGFzczogX3ZtLmljb24gfSkgOiBfdm0uX2UoKSxcbiAgICAgIF92bS4kc2xvdHMuZGVmYXVsdFxuICAgICAgICA/IF9jKFwic3BhblwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLWxpbmstLWlubmVyXCIgfSwgW192bS5fdChcImRlZmF1bHRcIildLCAyKVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgX3ZtLiRzbG90cy5pY29uID8gW192bS4kc2xvdHMuaWNvbiA/IF92bS5fdChcImljb25cIikgOiBfdm0uX2UoKV0gOiBfdm0uX2UoKVxuICAgIF0sXG4gICAgMlxuICApXG59XG52YXIgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzAxY2YzYjY1X3N0YXRpY1JlbmRlckZucyA9IFtdXG5tYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfMDFjZjNiNjVfcmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9saW5rL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wMWNmM2I2NSZcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvbGluay9zcmMvbWFpbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBsaW5rX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbmFtZTogJ0VsTGluaycsXG5cbiAgcHJvcHM6IHtcbiAgICB0eXBlOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnZGVmYXVsdCdcbiAgICB9LFxuICAgIHVuZGVybGluZToge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9LFxuICAgIGRpc2FibGVkOiBCb29sZWFuLFxuICAgIGhyZWY6IFN0cmluZyxcbiAgICBpY29uOiBTdHJpbmdcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgaGFuZGxlQ2xpY2s6IGZ1bmN0aW9uIGhhbmRsZUNsaWNrKGV2ZW50KSB7XG4gICAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmhyZWYpIHtcbiAgICAgICAgICB0aGlzLiRlbWl0KCdjbGljaycsIGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2xpbmsvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhY2thZ2VzX2xpbmtfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAobGlua19zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9saW5rL3NyYy9tYWluLnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGxpbmtfc3JjX21haW5fY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBwYWNrYWdlc19saW5rX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfMDFjZjNiNjVfcmVuZGVyLFxuICBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfMDFjZjNiNjVfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBsaW5rX3NyY19tYWluX2FwaTsgfVxubGlua19zcmNfbWFpbl9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL2xpbmsvc3JjL21haW4udnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGxpbmtfc3JjX21haW4gPSAobGlua19zcmNfbWFpbl9jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2xpbmsvaW5kZXguanNcblxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xubGlua19zcmNfbWFpbi5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuICBWdWUuY29tcG9uZW50KGxpbmtfc3JjX21haW4ubmFtZSwgbGlua19zcmNfbWFpbik7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc19saW5rID0gKGxpbmtfc3JjX21haW4pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9kaXZpZGVyL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03ZmEwMmE3ZSZmdW5jdGlvbmFsPXRydWUmXG52YXIgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzdmYTAyYTdlX2Z1bmN0aW9uYWxfdHJ1ZV9yZW5kZXIgPSBmdW5jdGlvbihfaCwgX3ZtKSB7XG4gIHZhciBfYyA9IF92bS5fY1xuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICBfdm0uX2coXG4gICAgICBfdm0uX2IoXG4gICAgICAgIHtcbiAgICAgICAgICBjbGFzczogW1xuICAgICAgICAgICAgX3ZtLmRhdGEuc3RhdGljQ2xhc3MsXG4gICAgICAgICAgICBcImVsLWRpdmlkZXJcIixcbiAgICAgICAgICAgIFwiZWwtZGl2aWRlci0tXCIgKyBfdm0ucHJvcHMuZGlyZWN0aW9uXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBcImRpdlwiLFxuICAgICAgICBfdm0uZGF0YS5hdHRycyxcbiAgICAgICAgZmFsc2VcbiAgICAgICksXG4gICAgICBfdm0ubGlzdGVuZXJzXG4gICAgKSxcbiAgICBbXG4gICAgICBfdm0uc2xvdHMoKS5kZWZhdWx0ICYmIF92bS5wcm9wcy5kaXJlY3Rpb24gIT09IFwidmVydGljYWxcIlxuICAgICAgICA/IF9jKFxuICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgIHsgY2xhc3M6IFtcImVsLWRpdmlkZXJfX3RleHRcIiwgXCJpcy1cIiArIF92bS5wcm9wcy5jb250ZW50UG9zaXRpb25dIH0sXG4gICAgICAgICAgICBbX3ZtLl90KFwiZGVmYXVsdFwiKV0sXG4gICAgICAgICAgICAyXG4gICAgICAgICAgKVxuICAgICAgICA6IF92bS5fZSgpXG4gICAgXVxuICApXG59XG52YXIgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzdmYTAyYTdlX2Z1bmN0aW9uYWxfdHJ1ZV9zdGF0aWNSZW5kZXJGbnMgPSBbXVxubWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzdmYTAyYTdlX2Z1bmN0aW9uYWxfdHJ1ZV9yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2RpdmlkZXIvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTdmYTAyYTdlJmZ1bmN0aW9uYWw9dHJ1ZSZcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvZGl2aWRlci9zcmMvbWFpbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGRpdmlkZXJfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBuYW1lOiAnRWxEaXZpZGVyJyxcbiAgcHJvcHM6IHtcbiAgICBkaXJlY3Rpb246IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdob3Jpem9udGFsJyxcbiAgICAgIHZhbGlkYXRvcjogZnVuY3Rpb24gdmFsaWRhdG9yKHZhbCkge1xuICAgICAgICByZXR1cm4gWydob3Jpem9udGFsJywgJ3ZlcnRpY2FsJ10uaW5kZXhPZih2YWwpICE9PSAtMTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGNvbnRlbnRQb3NpdGlvbjoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2NlbnRlcicsXG4gICAgICB2YWxpZGF0b3I6IGZ1bmN0aW9uIHZhbGlkYXRvcih2YWwpIHtcbiAgICAgICAgcmV0dXJuIFsnbGVmdCcsICdjZW50ZXInLCAncmlnaHQnXS5pbmRleE9mKHZhbCkgIT09IC0xO1xuICAgICAgfVxuICAgIH1cbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2RpdmlkZXIvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhY2thZ2VzX2RpdmlkZXJfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoZGl2aWRlcl9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9kaXZpZGVyL3NyYy9tYWluLnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGRpdmlkZXJfc3JjX21haW5fY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBwYWNrYWdlc19kaXZpZGVyX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfN2ZhMDJhN2VfZnVuY3Rpb25hbF90cnVlX3JlbmRlcixcbiAgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzdmYTAyYTdlX2Z1bmN0aW9uYWxfdHJ1ZV9zdGF0aWNSZW5kZXJGbnMsXG4gIHRydWUsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgZGl2aWRlcl9zcmNfbWFpbl9hcGk7IH1cbmRpdmlkZXJfc3JjX21haW5fY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy9kaXZpZGVyL3NyYy9tYWluLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBkaXZpZGVyX3NyY19tYWluID0gKGRpdmlkZXJfc3JjX21haW5fY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9kaXZpZGVyL2luZGV4LmpzXG5cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmRpdmlkZXJfc3JjX21haW4uaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcbiAgVnVlLmNvbXBvbmVudChkaXZpZGVyX3NyY19tYWluLm5hbWUsIGRpdmlkZXJfc3JjX21haW4pO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgZGl2aWRlciA9IChkaXZpZGVyX3NyY19tYWluKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvaW1hZ2Uvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTQ0ZDg0YTdjJlxudmFyIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF80NGQ4NGE3Y19yZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICB7IHN0YXRpY0NsYXNzOiBcImVsLWltYWdlXCIgfSxcbiAgICBbXG4gICAgICBfdm0ubG9hZGluZ1xuICAgICAgICA/IF92bS5fdChcInBsYWNlaG9sZGVyXCIsIFtcbiAgICAgICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiZWwtaW1hZ2VfX3BsYWNlaG9sZGVyXCIgfSlcbiAgICAgICAgICBdKVxuICAgICAgICA6IF92bS5lcnJvclxuICAgICAgICA/IF92bS5fdChcImVycm9yXCIsIFtcbiAgICAgICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiZWwtaW1hZ2VfX2Vycm9yXCIgfSwgW1xuICAgICAgICAgICAgICBfdm0uX3YoX3ZtLl9zKF92bS50KFwiZWwuaW1hZ2UuZXJyb3JcIikpKVxuICAgICAgICAgICAgXSlcbiAgICAgICAgICBdKVxuICAgICAgICA6IF9jKFxuICAgICAgICAgICAgXCJpbWdcIixcbiAgICAgICAgICAgIF92bS5fZyhcbiAgICAgICAgICAgICAgX3ZtLl9iKFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWltYWdlX19pbm5lclwiLFxuICAgICAgICAgICAgICAgICAgY2xhc3M6IHtcbiAgICAgICAgICAgICAgICAgICAgXCJlbC1pbWFnZV9faW5uZXItLWNlbnRlclwiOiBfdm0uYWxpZ25DZW50ZXIsXG4gICAgICAgICAgICAgICAgICAgIFwiZWwtaW1hZ2VfX3ByZXZpZXdcIjogX3ZtLnByZXZpZXdcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBzdHlsZTogX3ZtLmltYWdlU3R5bGUsXG4gICAgICAgICAgICAgICAgICBhdHRyczogeyBzcmM6IF92bS5zcmMgfSxcbiAgICAgICAgICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0uY2xpY2tIYW5kbGVyIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwiaW1nXCIsXG4gICAgICAgICAgICAgICAgX3ZtLiRhdHRycyxcbiAgICAgICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBfdm0uJGxpc3RlbmVyc1xuICAgICAgICAgICAgKVxuICAgICAgICAgICksXG4gICAgICBfdm0ucHJldmlld1xuICAgICAgICA/IFtcbiAgICAgICAgICAgIF92bS5zaG93Vmlld2VyXG4gICAgICAgICAgICAgID8gX2MoXCJpbWFnZS12aWV3ZXJcIiwge1xuICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgXCJ6LWluZGV4XCI6IF92bS56SW5kZXgsXG4gICAgICAgICAgICAgICAgICAgIFwiaW5pdGlhbC1pbmRleFwiOiBfdm0uaW1hZ2VJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgXCJvbi1jbG9zZVwiOiBfdm0uY2xvc2VWaWV3ZXIsXG4gICAgICAgICAgICAgICAgICAgIFwidXJsLWxpc3RcIjogX3ZtLnByZXZpZXdTcmNMaXN0XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICAgIF1cbiAgICAgICAgOiBfdm0uX2UoKVxuICAgIF0sXG4gICAgMlxuICApXG59XG52YXIgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzQ0ZDg0YTdjX3N0YXRpY1JlbmRlckZucyA9IFtdXG5tYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfNDRkODRhN2NfcmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9pbWFnZS9zcmMvbWFpbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NDRkODRhN2MmXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvaW1hZ2Uvc3JjL2ltYWdlLXZpZXdlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NWU3M2IzMDcmXG52YXIgaW1hZ2Vfdmlld2VydnVlX3R5cGVfdGVtcGxhdGVfaWRfNWU3M2IzMDdfcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFwidHJhbnNpdGlvblwiLCB7IGF0dHJzOiB7IG5hbWU6IFwidmlld2VyLWZhZGVcIiB9IH0sIFtcbiAgICBfYyhcbiAgICAgIFwiZGl2XCIsXG4gICAgICB7XG4gICAgICAgIHJlZjogXCJlbC1pbWFnZS12aWV3ZXJfX3dyYXBwZXJcIixcbiAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtaW1hZ2Utdmlld2VyX193cmFwcGVyXCIsXG4gICAgICAgIHN0eWxlOiB7IFwiei1pbmRleFwiOiBfdm0udmlld2VyWkluZGV4IH0sXG4gICAgICAgIGF0dHJzOiB7IHRhYmluZGV4OiBcIi0xXCIgfVxuICAgICAgfSxcbiAgICAgIFtcbiAgICAgICAgX2MoXCJkaXZcIiwge1xuICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWltYWdlLXZpZXdlcl9fbWFza1wiLFxuICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgIGlmICgkZXZlbnQudGFyZ2V0ICE9PSAkZXZlbnQuY3VycmVudFRhcmdldCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIF92bS5oYW5kbGVNYXNrQ2xpY2soJGV2ZW50KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIF9jKFxuICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWltYWdlLXZpZXdlcl9fYnRuIGVsLWltYWdlLXZpZXdlcl9fY2xvc2VcIixcbiAgICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0uaGlkZSB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBbX2MoXCJpXCIsIHsgc3RhdGljQ2xhc3M6IFwiZWwtaWNvbi1jbG9zZVwiIH0pXVxuICAgICAgICApLFxuICAgICAgICAhX3ZtLmlzU2luZ2xlXG4gICAgICAgICAgPyBbXG4gICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWltYWdlLXZpZXdlcl9fYnRuIGVsLWltYWdlLXZpZXdlcl9fcHJldlwiLFxuICAgICAgICAgICAgICAgICAgY2xhc3M6IHsgXCJpcy1kaXNhYmxlZFwiOiAhX3ZtLmluZmluaXRlICYmIF92bS5pc0ZpcnN0IH0sXG4gICAgICAgICAgICAgICAgICBvbjogeyBjbGljazogX3ZtLnByZXYgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW19jKFwiaVwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLWljb24tYXJyb3ctbGVmdFwiIH0pXVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1pbWFnZS12aWV3ZXJfX2J0biBlbC1pbWFnZS12aWV3ZXJfX25leHRcIixcbiAgICAgICAgICAgICAgICAgIGNsYXNzOiB7IFwiaXMtZGlzYWJsZWRcIjogIV92bS5pbmZpbml0ZSAmJiBfdm0uaXNMYXN0IH0sXG4gICAgICAgICAgICAgICAgICBvbjogeyBjbGljazogX3ZtLm5leHQgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW19jKFwiaVwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLWljb24tYXJyb3ctcmlnaHRcIiB9KV1cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgXVxuICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgIF9jKFxuICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJlbC1pbWFnZS12aWV3ZXJfX2J0biBlbC1pbWFnZS12aWV3ZXJfX2FjdGlvbnNcIiB9LFxuICAgICAgICAgIFtcbiAgICAgICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiZWwtaW1hZ2Utdmlld2VyX19hY3Rpb25zX19pbm5lclwiIH0sIFtcbiAgICAgICAgICAgICAgX2MoXCJpXCIsIHtcbiAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1pY29uLXpvb20tb3V0XCIsXG4gICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgX3ZtLmhhbmRsZUFjdGlvbnMoXCJ6b29tT3V0XCIpXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgX2MoXCJpXCIsIHtcbiAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1pY29uLXpvb20taW5cIixcbiAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICBfdm0uaGFuZGxlQWN0aW9ucyhcInpvb21JblwiKVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIF9jKFwiaVwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLWltYWdlLXZpZXdlcl9fYWN0aW9uc19fZGl2aWRlclwiIH0pLFxuICAgICAgICAgICAgICBfYyhcImlcIiwgeyBjbGFzczogX3ZtLm1vZGUuaWNvbiwgb246IHsgY2xpY2s6IF92bS50b2dnbGVNb2RlIH0gfSksXG4gICAgICAgICAgICAgIF9jKFwiaVwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLWltYWdlLXZpZXdlcl9fYWN0aW9uc19fZGl2aWRlclwiIH0pLFxuICAgICAgICAgICAgICBfYyhcImlcIiwge1xuICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWljb24tcmVmcmVzaC1sZWZ0XCIsXG4gICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgX3ZtLmhhbmRsZUFjdGlvbnMoXCJhbnRpY2xvY2VsaXNlXCIpXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgX2MoXCJpXCIsIHtcbiAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1pY29uLXJlZnJlc2gtcmlnaHRcIixcbiAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICBfdm0uaGFuZGxlQWN0aW9ucyhcImNsb2NlbGlzZVwiKVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF0pXG4gICAgICAgICAgXVxuICAgICAgICApLFxuICAgICAgICBfYyhcbiAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwiZWwtaW1hZ2Utdmlld2VyX19jYW52YXNcIiB9LFxuICAgICAgICAgIF92bS5fbChfdm0udXJsTGlzdCwgZnVuY3Rpb24odXJsLCBpKSB7XG4gICAgICAgICAgICByZXR1cm4gaSA9PT0gX3ZtLmluZGV4XG4gICAgICAgICAgICAgID8gX2MoXCJpbWdcIiwge1xuICAgICAgICAgICAgICAgICAga2V5OiB1cmwsXG4gICAgICAgICAgICAgICAgICByZWY6IFwiaW1nXCIsXG4gICAgICAgICAgICAgICAgICByZWZJbkZvcjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWltYWdlLXZpZXdlcl9faW1nXCIsXG4gICAgICAgICAgICAgICAgICBzdHlsZTogX3ZtLmltZ1N0eWxlLFxuICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgc3JjOiBfdm0uY3VycmVudEltZyB9LFxuICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgbG9hZDogX3ZtLmhhbmRsZUltZ0xvYWQsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBfdm0uaGFuZGxlSW1nRXJyb3IsXG4gICAgICAgICAgICAgICAgICAgIG1vdXNlZG93bjogX3ZtLmhhbmRsZU1vdXNlRG93blxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgICB9KSxcbiAgICAgICAgICAwXG4gICAgICAgIClcbiAgICAgIF0sXG4gICAgICAyXG4gICAgKVxuICBdKVxufVxudmFyIGltYWdlX3ZpZXdlcnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzVlNzNiMzA3X3N0YXRpY1JlbmRlckZucyA9IFtdXG5pbWFnZV92aWV3ZXJ2dWVfdHlwZV90ZW1wbGF0ZV9pZF81ZTczYjMwN19yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2ltYWdlL3NyYy9pbWFnZS12aWV3ZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTVlNzNiMzA3JlxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9pbWFnZS9zcmMvaW1hZ2Utdmlld2VyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbnZhciBpbWFnZV92aWV3ZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcblxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cblxuXG5cblxudmFyIE1vZGUgPSB7XG4gIENPTlRBSU46IHtcbiAgICBuYW1lOiAnY29udGFpbicsXG4gICAgaWNvbjogJ2VsLWljb24tZnVsbC1zY3JlZW4nXG4gIH0sXG4gIE9SSUdJTkFMOiB7XG4gICAgbmFtZTogJ29yaWdpbmFsJyxcbiAgICBpY29uOiAnZWwtaWNvbi1jLXNjYWxlLXRvLW9yaWdpbmFsJ1xuICB9XG59O1xuXG52YXIgbW91c2V3aGVlbEV2ZW50TmFtZSA9IE9iamVjdCh1dGlsX1tcImlzRmlyZWZveFwiXSkoKSA/ICdET01Nb3VzZVNjcm9sbCcgOiAnbW91c2V3aGVlbCc7XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGltYWdlX3ZpZXdlcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG5hbWU6ICdlbEltYWdlVmlld2VyJyxcblxuICBwcm9wczoge1xuICAgIHVybExpc3Q6IHtcbiAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgZGVmYXVsdDogZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHpJbmRleDoge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZGVmYXVsdDogMjAwMFxuICAgIH0sXG4gICAgb25Td2l0Y2g6IHtcbiAgICAgIHR5cGU6IEZ1bmN0aW9uLFxuICAgICAgZGVmYXVsdDogZnVuY3Rpb24gX2RlZmF1bHQoKSB7fVxuICAgIH0sXG4gICAgb25DbG9zZToge1xuICAgICAgdHlwZTogRnVuY3Rpb24sXG4gICAgICBkZWZhdWx0OiBmdW5jdGlvbiBfZGVmYXVsdCgpIHt9XG4gICAgfSxcbiAgICBpbml0aWFsSW5kZXg6IHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGRlZmF1bHQ6IDBcbiAgICB9LFxuICAgIGFwcGVuZFRvQm9keToge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9LFxuICAgIG1hc2tDbG9zYWJsZToge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9XG4gIH0sXG5cbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaW5kZXg6IHRoaXMuaW5pdGlhbEluZGV4LFxuICAgICAgaXNTaG93OiBmYWxzZSxcbiAgICAgIGluZmluaXRlOiB0cnVlLFxuICAgICAgbG9hZGluZzogZmFsc2UsXG4gICAgICBtb2RlOiBNb2RlLkNPTlRBSU4sXG4gICAgICB0cmFuc2Zvcm06IHtcbiAgICAgICAgc2NhbGU6IDEsXG4gICAgICAgIGRlZzogMCxcbiAgICAgICAgb2Zmc2V0WDogMCxcbiAgICAgICAgb2Zmc2V0WTogMCxcbiAgICAgICAgZW5hYmxlVHJhbnNpdGlvbjogZmFsc2VcbiAgICAgIH1cbiAgICB9O1xuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgaXNTaW5nbGU6IGZ1bmN0aW9uIGlzU2luZ2xlKCkge1xuICAgICAgcmV0dXJuIHRoaXMudXJsTGlzdC5sZW5ndGggPD0gMTtcbiAgICB9LFxuICAgIGlzRmlyc3Q6IGZ1bmN0aW9uIGlzRmlyc3QoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbmRleCA9PT0gMDtcbiAgICB9LFxuICAgIGlzTGFzdDogZnVuY3Rpb24gaXNMYXN0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuaW5kZXggPT09IHRoaXMudXJsTGlzdC5sZW5ndGggLSAxO1xuICAgIH0sXG4gICAgY3VycmVudEltZzogZnVuY3Rpb24gY3VycmVudEltZygpIHtcbiAgICAgIHJldHVybiB0aGlzLnVybExpc3RbdGhpcy5pbmRleF07XG4gICAgfSxcbiAgICBpbWdTdHlsZTogZnVuY3Rpb24gaW1nU3R5bGUoKSB7XG4gICAgICB2YXIgX3RyYW5zZm9ybSA9IHRoaXMudHJhbnNmb3JtLFxuICAgICAgICAgIHNjYWxlID0gX3RyYW5zZm9ybS5zY2FsZSxcbiAgICAgICAgICBkZWcgPSBfdHJhbnNmb3JtLmRlZyxcbiAgICAgICAgICBvZmZzZXRYID0gX3RyYW5zZm9ybS5vZmZzZXRYLFxuICAgICAgICAgIG9mZnNldFkgPSBfdHJhbnNmb3JtLm9mZnNldFksXG4gICAgICAgICAgZW5hYmxlVHJhbnNpdGlvbiA9IF90cmFuc2Zvcm0uZW5hYmxlVHJhbnNpdGlvbjtcblxuICAgICAgdmFyIHN0eWxlID0ge1xuICAgICAgICB0cmFuc2Zvcm06ICdzY2FsZSgnICsgc2NhbGUgKyAnKSByb3RhdGUoJyArIGRlZyArICdkZWcpJyxcbiAgICAgICAgdHJhbnNpdGlvbjogZW5hYmxlVHJhbnNpdGlvbiA/ICd0cmFuc2Zvcm0gLjNzJyA6ICcnLFxuICAgICAgICAnbWFyZ2luLWxlZnQnOiBvZmZzZXRYICsgJ3B4JyxcbiAgICAgICAgJ21hcmdpbi10b3AnOiBvZmZzZXRZICsgJ3B4J1xuICAgICAgfTtcbiAgICAgIGlmICh0aGlzLm1vZGUgPT09IE1vZGUuQ09OVEFJTikge1xuICAgICAgICBzdHlsZS5tYXhXaWR0aCA9IHN0eWxlLm1heEhlaWdodCA9ICcxMDAlJztcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdHlsZTtcbiAgICB9LFxuICAgIHZpZXdlclpJbmRleDogZnVuY3Rpb24gdmlld2VyWkluZGV4KCkge1xuICAgICAgdmFyIG5leHRaSW5kZXggPSBwb3B1cF9bXCJQb3B1cE1hbmFnZXJcIl0ubmV4dFpJbmRleCgpO1xuICAgICAgcmV0dXJuIHRoaXMuekluZGV4ID4gbmV4dFpJbmRleCA/IHRoaXMuekluZGV4IDogbmV4dFpJbmRleDtcbiAgICB9XG4gIH0sXG4gIHdhdGNoOiB7XG4gICAgaW5kZXg6IHtcbiAgICAgIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIodmFsKSB7XG4gICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgICAgdGhpcy5vblN3aXRjaCh2YWwpO1xuICAgICAgfVxuICAgIH0sXG4gICAgY3VycmVudEltZzogZnVuY3Rpb24gY3VycmVudEltZyh2YWwpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uIChfKSB7XG4gICAgICAgIHZhciAkaW1nID0gX3RoaXMuJHJlZnMuaW1nWzBdO1xuICAgICAgICBpZiAoISRpbWcuY29tcGxldGUpIHtcbiAgICAgICAgICBfdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9LFxuICBtZXRob2RzOiB7XG4gICAgaGlkZTogZnVuY3Rpb24gaGlkZSgpIHtcbiAgICAgIHRoaXMuZGV2aWNlU3VwcG9ydFVuaW5zdGFsbCgpO1xuICAgICAgdGhpcy5vbkNsb3NlKCk7XG4gICAgfSxcbiAgICBkZXZpY2VTdXBwb3J0SW5zdGFsbDogZnVuY3Rpb24gZGV2aWNlU3VwcG9ydEluc3RhbGwoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgdGhpcy5fa2V5RG93bkhhbmRsZXIgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB2YXIga2V5Q29kZSA9IGUua2V5Q29kZTtcbiAgICAgICAgc3dpdGNoIChrZXlDb2RlKSB7XG4gICAgICAgICAgLy8gRVNDXG4gICAgICAgICAgY2FzZSAyNzpcbiAgICAgICAgICAgIF90aGlzMi5oaWRlKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAvLyBTUEFDRVxuICAgICAgICAgIGNhc2UgMzI6XG4gICAgICAgICAgICBfdGhpczIudG9nZ2xlTW9kZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgLy8gTEVGVF9BUlJPV1xuICAgICAgICAgIGNhc2UgMzc6XG4gICAgICAgICAgICBfdGhpczIucHJldigpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgLy8gVVBfQVJST1dcbiAgICAgICAgICBjYXNlIDM4OlxuICAgICAgICAgICAgX3RoaXMyLmhhbmRsZUFjdGlvbnMoJ3pvb21JbicpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgLy8gUklHSFRfQVJST1dcbiAgICAgICAgICBjYXNlIDM5OlxuICAgICAgICAgICAgX3RoaXMyLm5leHQoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIC8vIERPV05fQVJST1dcbiAgICAgICAgICBjYXNlIDQwOlxuICAgICAgICAgICAgX3RoaXMyLmhhbmRsZUFjdGlvbnMoJ3pvb21PdXQnKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgdGhpcy5fbW91c2VXaGVlbEhhbmRsZXIgPSBPYmplY3QodXRpbF9bXCJyYWZUaHJvdHRsZVwiXSkoZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgdmFyIGRlbHRhID0gZS53aGVlbERlbHRhID8gZS53aGVlbERlbHRhIDogLWUuZGV0YWlsO1xuICAgICAgICBpZiAoZGVsdGEgPiAwKSB7XG4gICAgICAgICAgX3RoaXMyLmhhbmRsZUFjdGlvbnMoJ3pvb21JbicsIHtcbiAgICAgICAgICAgIHpvb21SYXRlOiAwLjAxNSxcbiAgICAgICAgICAgIGVuYWJsZVRyYW5zaXRpb246IGZhbHNlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgX3RoaXMyLmhhbmRsZUFjdGlvbnMoJ3pvb21PdXQnLCB7XG4gICAgICAgICAgICB6b29tUmF0ZTogMC4wMTUsXG4gICAgICAgICAgICBlbmFibGVUcmFuc2l0aW9uOiBmYWxzZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIE9iamVjdChkb21fW1wib25cIl0pKGRvY3VtZW50LCAna2V5ZG93bicsIHRoaXMuX2tleURvd25IYW5kbGVyKTtcbiAgICAgIE9iamVjdChkb21fW1wib25cIl0pKGRvY3VtZW50LCBtb3VzZXdoZWVsRXZlbnROYW1lLCB0aGlzLl9tb3VzZVdoZWVsSGFuZGxlcik7XG4gICAgfSxcbiAgICBkZXZpY2VTdXBwb3J0VW5pbnN0YWxsOiBmdW5jdGlvbiBkZXZpY2VTdXBwb3J0VW5pbnN0YWxsKCkge1xuICAgICAgT2JqZWN0KGRvbV9bXCJvZmZcIl0pKGRvY3VtZW50LCAna2V5ZG93bicsIHRoaXMuX2tleURvd25IYW5kbGVyKTtcbiAgICAgIE9iamVjdChkb21fW1wib2ZmXCJdKShkb2N1bWVudCwgbW91c2V3aGVlbEV2ZW50TmFtZSwgdGhpcy5fbW91c2VXaGVlbEhhbmRsZXIpO1xuICAgICAgdGhpcy5fa2V5RG93bkhhbmRsZXIgPSBudWxsO1xuICAgICAgdGhpcy5fbW91c2VXaGVlbEhhbmRsZXIgPSBudWxsO1xuICAgIH0sXG4gICAgaGFuZGxlSW1nTG9hZDogZnVuY3Rpb24gaGFuZGxlSW1nTG9hZChlKSB7XG4gICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICB9LFxuICAgIGhhbmRsZUltZ0Vycm9yOiBmdW5jdGlvbiBoYW5kbGVJbWdFcnJvcihlKSB7XG4gICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIGUudGFyZ2V0LmFsdCA9ICfliqDovb3lpLHotKUnO1xuICAgIH0sXG4gICAgaGFuZGxlTW91c2VEb3duOiBmdW5jdGlvbiBoYW5kbGVNb3VzZURvd24oZSkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgIGlmICh0aGlzLmxvYWRpbmcgfHwgZS5idXR0b24gIT09IDApIHJldHVybjtcblxuICAgICAgdmFyIF90cmFuc2Zvcm0yID0gdGhpcy50cmFuc2Zvcm0sXG4gICAgICAgICAgb2Zmc2V0WCA9IF90cmFuc2Zvcm0yLm9mZnNldFgsXG4gICAgICAgICAgb2Zmc2V0WSA9IF90cmFuc2Zvcm0yLm9mZnNldFk7XG5cbiAgICAgIHZhciBzdGFydFggPSBlLnBhZ2VYO1xuICAgICAgdmFyIHN0YXJ0WSA9IGUucGFnZVk7XG4gICAgICB0aGlzLl9kcmFnSGFuZGxlciA9IE9iamVjdCh1dGlsX1tcInJhZlRocm90dGxlXCJdKShmdW5jdGlvbiAoZXYpIHtcbiAgICAgICAgX3RoaXMzLnRyYW5zZm9ybS5vZmZzZXRYID0gb2Zmc2V0WCArIGV2LnBhZ2VYIC0gc3RhcnRYO1xuICAgICAgICBfdGhpczMudHJhbnNmb3JtLm9mZnNldFkgPSBvZmZzZXRZICsgZXYucGFnZVkgLSBzdGFydFk7XG4gICAgICB9KTtcbiAgICAgIE9iamVjdChkb21fW1wib25cIl0pKGRvY3VtZW50LCAnbW91c2Vtb3ZlJywgdGhpcy5fZHJhZ0hhbmRsZXIpO1xuICAgICAgT2JqZWN0KGRvbV9bXCJvblwiXSkoZG9jdW1lbnQsICdtb3VzZXVwJywgZnVuY3Rpb24gKGV2KSB7XG4gICAgICAgIE9iamVjdChkb21fW1wib2ZmXCJdKShkb2N1bWVudCwgJ21vdXNlbW92ZScsIF90aGlzMy5fZHJhZ0hhbmRsZXIpO1xuICAgICAgfSk7XG5cbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB9LFxuICAgIGhhbmRsZU1hc2tDbGljazogZnVuY3Rpb24gaGFuZGxlTWFza0NsaWNrKCkge1xuICAgICAgaWYgKHRoaXMubWFza0Nsb3NhYmxlKSB7XG4gICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgcmVzZXQ6IGZ1bmN0aW9uIHJlc2V0KCkge1xuICAgICAgdGhpcy50cmFuc2Zvcm0gPSB7XG4gICAgICAgIHNjYWxlOiAxLFxuICAgICAgICBkZWc6IDAsXG4gICAgICAgIG9mZnNldFg6IDAsXG4gICAgICAgIG9mZnNldFk6IDAsXG4gICAgICAgIGVuYWJsZVRyYW5zaXRpb246IGZhbHNlXG4gICAgICB9O1xuICAgIH0sXG4gICAgdG9nZ2xlTW9kZTogZnVuY3Rpb24gdG9nZ2xlTW9kZSgpIHtcbiAgICAgIGlmICh0aGlzLmxvYWRpbmcpIHJldHVybjtcblxuICAgICAgdmFyIG1vZGVOYW1lcyA9IE9iamVjdC5rZXlzKE1vZGUpO1xuICAgICAgdmFyIG1vZGVWYWx1ZXMgPSBPYmplY3QudmFsdWVzKE1vZGUpO1xuICAgICAgdmFyIGluZGV4ID0gbW9kZVZhbHVlcy5pbmRleE9mKHRoaXMubW9kZSk7XG4gICAgICB2YXIgbmV4dEluZGV4ID0gKGluZGV4ICsgMSkgJSBtb2RlTmFtZXMubGVuZ3RoO1xuICAgICAgdGhpcy5tb2RlID0gTW9kZVttb2RlTmFtZXNbbmV4dEluZGV4XV07XG4gICAgICB0aGlzLnJlc2V0KCk7XG4gICAgfSxcbiAgICBwcmV2OiBmdW5jdGlvbiBwcmV2KCkge1xuICAgICAgaWYgKHRoaXMuaXNGaXJzdCAmJiAhdGhpcy5pbmZpbml0ZSkgcmV0dXJuO1xuICAgICAgdmFyIGxlbiA9IHRoaXMudXJsTGlzdC5sZW5ndGg7XG4gICAgICB0aGlzLmluZGV4ID0gKHRoaXMuaW5kZXggLSAxICsgbGVuKSAlIGxlbjtcbiAgICB9LFxuICAgIG5leHQ6IGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICBpZiAodGhpcy5pc0xhc3QgJiYgIXRoaXMuaW5maW5pdGUpIHJldHVybjtcbiAgICAgIHZhciBsZW4gPSB0aGlzLnVybExpc3QubGVuZ3RoO1xuICAgICAgdGhpcy5pbmRleCA9ICh0aGlzLmluZGV4ICsgMSkgJSBsZW47XG4gICAgfSxcbiAgICBoYW5kbGVBY3Rpb25zOiBmdW5jdGlvbiBoYW5kbGVBY3Rpb25zKGFjdGlvbikge1xuICAgICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuXG4gICAgICBpZiAodGhpcy5sb2FkaW5nKSByZXR1cm47XG5cbiAgICAgIHZhciBfem9vbVJhdGUkcm90YXRlRGVnJGUgPSBpbWFnZV92aWV3ZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19leHRlbmRzKHtcbiAgICAgICAgem9vbVJhdGU6IDAuMixcbiAgICAgICAgcm90YXRlRGVnOiA5MCxcbiAgICAgICAgZW5hYmxlVHJhbnNpdGlvbjogdHJ1ZVxuICAgICAgfSwgb3B0aW9ucyksXG4gICAgICAgICAgem9vbVJhdGUgPSBfem9vbVJhdGUkcm90YXRlRGVnJGUuem9vbVJhdGUsXG4gICAgICAgICAgcm90YXRlRGVnID0gX3pvb21SYXRlJHJvdGF0ZURlZyRlLnJvdGF0ZURlZyxcbiAgICAgICAgICBlbmFibGVUcmFuc2l0aW9uID0gX3pvb21SYXRlJHJvdGF0ZURlZyRlLmVuYWJsZVRyYW5zaXRpb247XG5cbiAgICAgIHZhciB0cmFuc2Zvcm0gPSB0aGlzLnRyYW5zZm9ybTtcblxuICAgICAgc3dpdGNoIChhY3Rpb24pIHtcbiAgICAgICAgY2FzZSAnem9vbU91dCc6XG4gICAgICAgICAgaWYgKHRyYW5zZm9ybS5zY2FsZSA+IDAuMikge1xuICAgICAgICAgICAgdHJhbnNmb3JtLnNjYWxlID0gcGFyc2VGbG9hdCgodHJhbnNmb3JtLnNjYWxlIC0gem9vbVJhdGUpLnRvRml4ZWQoMykpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnem9vbUluJzpcbiAgICAgICAgICB0cmFuc2Zvcm0uc2NhbGUgPSBwYXJzZUZsb2F0KCh0cmFuc2Zvcm0uc2NhbGUgKyB6b29tUmF0ZSkudG9GaXhlZCgzKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2Nsb2NlbGlzZSc6XG4gICAgICAgICAgdHJhbnNmb3JtLmRlZyArPSByb3RhdGVEZWc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2FudGljbG9jZWxpc2UnOlxuICAgICAgICAgIHRyYW5zZm9ybS5kZWcgLT0gcm90YXRlRGVnO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgdHJhbnNmb3JtLmVuYWJsZVRyYW5zaXRpb24gPSBlbmFibGVUcmFuc2l0aW9uO1xuICAgIH1cbiAgfSxcbiAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCgpIHtcbiAgICB0aGlzLmRldmljZVN1cHBvcnRJbnN0YWxsKCk7XG4gICAgaWYgKHRoaXMuYXBwZW5kVG9Cb2R5KSB7XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuJGVsKTtcbiAgICB9XG4gICAgLy8gYWRkIHRhYmluZGV4IHRoZW4gd3JhcHBlciBjYW4gYmUgZm9jdXNhYmxlIHZpYSBKYXZhc2NyaXB0XG4gICAgLy8gZm9jdXMgd3JhcHBlciBzbyBhcnJvdyBrZXkgY2FuJ3QgY2F1c2UgaW5uZXIgc2Nyb2xsIGJlaGF2aW9yIHVuZGVybmVhdGhcbiAgICB0aGlzLiRyZWZzWydlbC1pbWFnZS12aWV3ZXJfX3dyYXBwZXInXS5mb2N1cygpO1xuICB9LFxuICBkZXN0cm95ZWQ6IGZ1bmN0aW9uIGRlc3Ryb3llZCgpIHtcbiAgICAvLyBpZiBhcHBlbmRUb0JvZHkgaXMgdHJ1ZSwgcmVtb3ZlIERPTSBub2RlIGFmdGVyIGRlc3Ryb3lcbiAgICBpZiAodGhpcy5hcHBlbmRUb0JvZHkgJiYgdGhpcy4kZWwgJiYgdGhpcy4kZWwucGFyZW50Tm9kZSkge1xuICAgICAgdGhpcy4kZWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLiRlbCk7XG4gICAgfVxuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvaW1hZ2Uvc3JjL2ltYWdlLXZpZXdlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX2ltYWdlX3ZpZXdlcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChpbWFnZV92aWV3ZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvaW1hZ2Uvc3JjL2ltYWdlLXZpZXdlci52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBpbWFnZV92aWV3ZXJfY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBzcmNfaW1hZ2Vfdmlld2VydnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICBpbWFnZV92aWV3ZXJ2dWVfdHlwZV90ZW1wbGF0ZV9pZF81ZTczYjMwN19yZW5kZXIsXG4gIGltYWdlX3ZpZXdlcnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzVlNzNiMzA3X3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgaW1hZ2Vfdmlld2VyX2FwaTsgfVxuaW1hZ2Vfdmlld2VyX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvaW1hZ2Uvc3JjL2ltYWdlLXZpZXdlci52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgaW1hZ2Vfdmlld2VyID0gKGltYWdlX3ZpZXdlcl9jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9pbWFnZS9zcmMvbWFpbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuXG5cblxuXG5cblxudmFyIGlzU3VwcG9ydE9iamVjdEZpdCA9IGZ1bmN0aW9uIGlzU3VwcG9ydE9iamVjdEZpdCgpIHtcbiAgcmV0dXJuIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5vYmplY3RGaXQgIT09IHVuZGVmaW5lZDtcbn07XG5cbnZhciBPYmplY3RGaXQgPSB7XG4gIE5PTkU6ICdub25lJyxcbiAgQ09OVEFJTjogJ2NvbnRhaW4nLFxuICBDT1ZFUjogJ2NvdmVyJyxcbiAgRklMTDogJ2ZpbGwnLFxuICBTQ0FMRV9ET1dOOiAnc2NhbGUtZG93bidcbn07XG5cbnZhciBwcmV2T3ZlcmZsb3cgPSAnJztcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgaW1hZ2Vfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBuYW1lOiAnRWxJbWFnZScsXG5cbiAgbWl4aW5zOiBbbG9jYWxlX2RlZmF1bHQuYV0sXG4gIGluaGVyaXRBdHRyczogZmFsc2UsXG5cbiAgY29tcG9uZW50czoge1xuICAgIEltYWdlVmlld2VyOiBpbWFnZV92aWV3ZXJcbiAgfSxcblxuICBwcm9wczoge1xuICAgIHNyYzogU3RyaW5nLFxuICAgIGZpdDogU3RyaW5nLFxuICAgIGxhenk6IEJvb2xlYW4sXG4gICAgc2Nyb2xsQ29udGFpbmVyOiB7fSxcbiAgICBwcmV2aWV3U3JjTGlzdDoge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICBkZWZhdWx0OiBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgIH0sXG4gICAgekluZGV4OiB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBkZWZhdWx0OiAyMDAwXG4gICAgfSxcbiAgICBpbml0aWFsSW5kZXg6IE51bWJlclxuICB9LFxuXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxvYWRpbmc6IHRydWUsXG4gICAgICBlcnJvcjogZmFsc2UsXG4gICAgICBzaG93OiAhdGhpcy5sYXp5LFxuICAgICAgaW1hZ2VXaWR0aDogMCxcbiAgICAgIGltYWdlSGVpZ2h0OiAwLFxuICAgICAgc2hvd1ZpZXdlcjogZmFsc2VcbiAgICB9O1xuICB9LFxuXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBpbWFnZVN0eWxlOiBmdW5jdGlvbiBpbWFnZVN0eWxlKCkge1xuICAgICAgdmFyIGZpdCA9IHRoaXMuZml0O1xuXG4gICAgICBpZiAoIXRoaXMuJGlzU2VydmVyICYmIGZpdCkge1xuICAgICAgICByZXR1cm4gaXNTdXBwb3J0T2JqZWN0Rml0KCkgPyB7ICdvYmplY3QtZml0JzogZml0IH0gOiB0aGlzLmdldEltYWdlU3R5bGUoZml0KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7fTtcbiAgICB9LFxuICAgIGFsaWduQ2VudGVyOiBmdW5jdGlvbiBhbGlnbkNlbnRlcigpIHtcbiAgICAgIHJldHVybiAhdGhpcy4kaXNTZXJ2ZXIgJiYgIWlzU3VwcG9ydE9iamVjdEZpdCgpICYmIHRoaXMuZml0ICE9PSBPYmplY3RGaXQuRklMTDtcbiAgICB9LFxuICAgIHByZXZpZXc6IGZ1bmN0aW9uIHByZXZpZXcoKSB7XG4gICAgICB2YXIgcHJldmlld1NyY0xpc3QgPSB0aGlzLnByZXZpZXdTcmNMaXN0O1xuXG4gICAgICByZXR1cm4gQXJyYXkuaXNBcnJheShwcmV2aWV3U3JjTGlzdCkgJiYgcHJldmlld1NyY0xpc3QubGVuZ3RoID4gMDtcbiAgICB9LFxuICAgIGltYWdlSW5kZXg6IGZ1bmN0aW9uIGltYWdlSW5kZXgoKSB7XG4gICAgICB2YXIgcHJldmlld0luZGV4ID0gMDtcbiAgICAgIHZhciBpbml0aWFsSW5kZXggPSB0aGlzLmluaXRpYWxJbmRleDtcbiAgICAgIGlmIChpbml0aWFsSW5kZXggPj0gMCkge1xuICAgICAgICBwcmV2aWV3SW5kZXggPSBpbml0aWFsSW5kZXg7XG4gICAgICAgIHJldHVybiBwcmV2aWV3SW5kZXg7XG4gICAgICB9XG4gICAgICB2YXIgc3JjSW5kZXggPSB0aGlzLnByZXZpZXdTcmNMaXN0LmluZGV4T2YodGhpcy5zcmMpO1xuICAgICAgaWYgKHNyY0luZGV4ID49IDApIHtcbiAgICAgICAgcHJldmlld0luZGV4ID0gc3JjSW5kZXg7XG4gICAgICAgIHJldHVybiBwcmV2aWV3SW5kZXg7XG4gICAgICB9XG4gICAgICByZXR1cm4gcHJldmlld0luZGV4O1xuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHNyYzogZnVuY3Rpb24gc3JjKHZhbCkge1xuICAgICAgdGhpcy5zaG93ICYmIHRoaXMubG9hZEltYWdlKCk7XG4gICAgfSxcbiAgICBzaG93OiBmdW5jdGlvbiBzaG93KHZhbCkge1xuICAgICAgdmFsICYmIHRoaXMubG9hZEltYWdlKCk7XG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7XG4gICAgaWYgKHRoaXMubGF6eSkge1xuICAgICAgdGhpcy5hZGRMYXp5TG9hZExpc3RlbmVyKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubG9hZEltYWdlKCk7XG4gICAgfVxuICB9LFxuICBiZWZvcmVEZXN0cm95OiBmdW5jdGlvbiBiZWZvcmVEZXN0cm95KCkge1xuICAgIHRoaXMubGF6eSAmJiB0aGlzLnJlbW92ZUxhenlMb2FkTGlzdGVuZXIoKTtcbiAgfSxcblxuXG4gIG1ldGhvZHM6IHtcbiAgICBsb2FkSW1hZ2U6IGZ1bmN0aW9uIGxvYWRJbWFnZSgpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIGlmICh0aGlzLiRpc1NlcnZlcikgcmV0dXJuO1xuXG4gICAgICAvLyByZXNldCBzdGF0dXNcbiAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICB0aGlzLmVycm9yID0gZmFsc2U7XG5cbiAgICAgIHZhciBpbWcgPSBuZXcgSW1hZ2UoKTtcbiAgICAgIGltZy5vbmxvYWQgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICByZXR1cm4gX3RoaXMuaGFuZGxlTG9hZChlLCBpbWcpO1xuICAgICAgfTtcbiAgICAgIGltZy5vbmVycm9yID0gdGhpcy5oYW5kbGVFcnJvci5iaW5kKHRoaXMpO1xuXG4gICAgICAvLyBiaW5kIGh0bWwgYXR0cnNcbiAgICAgIC8vIHNvIGl0IGNhbiBiZWhhdmUgY29uc2lzdGVudGx5XG4gICAgICBPYmplY3Qua2V5cyh0aGlzLiRhdHRycykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IF90aGlzLiRhdHRyc1trZXldO1xuICAgICAgICBpbWcuc2V0QXR0cmlidXRlKGtleSwgdmFsdWUpO1xuICAgICAgfSk7XG4gICAgICBpbWcuc3JjID0gdGhpcy5zcmM7XG4gICAgfSxcbiAgICBoYW5kbGVMb2FkOiBmdW5jdGlvbiBoYW5kbGVMb2FkKGUsIGltZykge1xuICAgICAgdGhpcy5pbWFnZVdpZHRoID0gaW1nLndpZHRoO1xuICAgICAgdGhpcy5pbWFnZUhlaWdodCA9IGltZy5oZWlnaHQ7XG4gICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuZXJyb3IgPSBmYWxzZTtcbiAgICB9LFxuICAgIGhhbmRsZUVycm9yOiBmdW5jdGlvbiBoYW5kbGVFcnJvcihlKSB7XG4gICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuZXJyb3IgPSB0cnVlO1xuICAgICAgdGhpcy4kZW1pdCgnZXJyb3InLCBlKTtcbiAgICB9LFxuICAgIGhhbmRsZUxhenlMb2FkOiBmdW5jdGlvbiBoYW5kbGVMYXp5TG9hZCgpIHtcbiAgICAgIGlmIChPYmplY3QoZG9tX1tcImlzSW5Db250YWluZXJcIl0pKHRoaXMuJGVsLCB0aGlzLl9zY3JvbGxDb250YWluZXIpKSB7XG4gICAgICAgIHRoaXMuc2hvdyA9IHRydWU7XG4gICAgICAgIHRoaXMucmVtb3ZlTGF6eUxvYWRMaXN0ZW5lcigpO1xuICAgICAgfVxuICAgIH0sXG4gICAgYWRkTGF6eUxvYWRMaXN0ZW5lcjogZnVuY3Rpb24gYWRkTGF6eUxvYWRMaXN0ZW5lcigpIHtcbiAgICAgIGlmICh0aGlzLiRpc1NlcnZlcikgcmV0dXJuO1xuXG4gICAgICB2YXIgc2Nyb2xsQ29udGFpbmVyID0gdGhpcy5zY3JvbGxDb250YWluZXI7XG5cbiAgICAgIHZhciBfc2Nyb2xsQ29udGFpbmVyID0gbnVsbDtcblxuICAgICAgaWYgKE9iamVjdCh0eXBlc19bXCJpc0h0bWxFbGVtZW50XCJdKShzY3JvbGxDb250YWluZXIpKSB7XG4gICAgICAgIF9zY3JvbGxDb250YWluZXIgPSBzY3JvbGxDb250YWluZXI7XG4gICAgICB9IGVsc2UgaWYgKE9iamVjdCh0eXBlc19bXCJpc1N0cmluZ1wiXSkoc2Nyb2xsQ29udGFpbmVyKSkge1xuICAgICAgICBfc2Nyb2xsQ29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzY3JvbGxDb250YWluZXIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgX3Njcm9sbENvbnRhaW5lciA9IE9iamVjdChkb21fW1wiZ2V0U2Nyb2xsQ29udGFpbmVyXCJdKSh0aGlzLiRlbCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChfc2Nyb2xsQ29udGFpbmVyKSB7XG4gICAgICAgIHRoaXMuX3Njcm9sbENvbnRhaW5lciA9IF9zY3JvbGxDb250YWluZXI7XG4gICAgICAgIHRoaXMuX2xhenlMb2FkSGFuZGxlciA9IHRocm90dGxlX2RlZmF1bHQoKSgyMDAsIHRoaXMuaGFuZGxlTGF6eUxvYWQpO1xuICAgICAgICBPYmplY3QoZG9tX1tcIm9uXCJdKShfc2Nyb2xsQ29udGFpbmVyLCAnc2Nyb2xsJywgdGhpcy5fbGF6eUxvYWRIYW5kbGVyKTtcbiAgICAgICAgdGhpcy5oYW5kbGVMYXp5TG9hZCgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgcmVtb3ZlTGF6eUxvYWRMaXN0ZW5lcjogZnVuY3Rpb24gcmVtb3ZlTGF6eUxvYWRMaXN0ZW5lcigpIHtcbiAgICAgIHZhciBfc2Nyb2xsQ29udGFpbmVyID0gdGhpcy5fc2Nyb2xsQ29udGFpbmVyLFxuICAgICAgICAgIF9sYXp5TG9hZEhhbmRsZXIgPSB0aGlzLl9sYXp5TG9hZEhhbmRsZXI7XG5cblxuICAgICAgaWYgKHRoaXMuJGlzU2VydmVyIHx8ICFfc2Nyb2xsQ29udGFpbmVyIHx8ICFfbGF6eUxvYWRIYW5kbGVyKSByZXR1cm47XG5cbiAgICAgIE9iamVjdChkb21fW1wib2ZmXCJdKShfc2Nyb2xsQ29udGFpbmVyLCAnc2Nyb2xsJywgX2xhenlMb2FkSGFuZGxlcik7XG4gICAgICB0aGlzLl9zY3JvbGxDb250YWluZXIgPSBudWxsO1xuICAgICAgdGhpcy5fbGF6eUxvYWRIYW5kbGVyID0gbnVsbDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogc2ltdWxhdGUgb2JqZWN0LWZpdCBiZWhhdmlvciB0byBjb21wYXRpYmxlIHdpdGggSUUxMSBhbmQgb3RoZXIgYnJvd3NlcnMgd2hpY2ggbm90IHN1cHBvcnQgb2JqZWN0LWZpdFxuICAgICAqL1xuICAgIGdldEltYWdlU3R5bGU6IGZ1bmN0aW9uIGdldEltYWdlU3R5bGUoZml0KSB7XG4gICAgICB2YXIgaW1hZ2VXaWR0aCA9IHRoaXMuaW1hZ2VXaWR0aCxcbiAgICAgICAgICBpbWFnZUhlaWdodCA9IHRoaXMuaW1hZ2VIZWlnaHQ7XG4gICAgICB2YXIgXyRlbCA9IHRoaXMuJGVsLFxuICAgICAgICAgIGNvbnRhaW5lcldpZHRoID0gXyRlbC5jbGllbnRXaWR0aCxcbiAgICAgICAgICBjb250YWluZXJIZWlnaHQgPSBfJGVsLmNsaWVudEhlaWdodDtcblxuXG4gICAgICBpZiAoIWltYWdlV2lkdGggfHwgIWltYWdlSGVpZ2h0IHx8ICFjb250YWluZXJXaWR0aCB8fCAhY29udGFpbmVySGVpZ2h0KSByZXR1cm4ge307XG5cbiAgICAgIHZhciBpbWFnZUFzcGVjdFJhdGlvID0gaW1hZ2VXaWR0aCAvIGltYWdlSGVpZ2h0O1xuICAgICAgdmFyIGNvbnRhaW5lckFzcGVjdFJhdGlvID0gY29udGFpbmVyV2lkdGggLyBjb250YWluZXJIZWlnaHQ7XG5cbiAgICAgIGlmIChmaXQgPT09IE9iamVjdEZpdC5TQ0FMRV9ET1dOKSB7XG4gICAgICAgIHZhciBpc1NtYWxsZXIgPSBpbWFnZVdpZHRoIDwgY29udGFpbmVyV2lkdGggJiYgaW1hZ2VIZWlnaHQgPCBjb250YWluZXJIZWlnaHQ7XG4gICAgICAgIGZpdCA9IGlzU21hbGxlciA/IE9iamVjdEZpdC5OT05FIDogT2JqZWN0Rml0LkNPTlRBSU47XG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAoZml0KSB7XG4gICAgICAgIGNhc2UgT2JqZWN0Rml0Lk5PTkU6XG4gICAgICAgICAgcmV0dXJuIHsgd2lkdGg6ICdhdXRvJywgaGVpZ2h0OiAnYXV0bycgfTtcbiAgICAgICAgY2FzZSBPYmplY3RGaXQuQ09OVEFJTjpcbiAgICAgICAgICByZXR1cm4gaW1hZ2VBc3BlY3RSYXRpbyA8IGNvbnRhaW5lckFzcGVjdFJhdGlvID8geyB3aWR0aDogJ2F1dG8nIH0gOiB7IGhlaWdodDogJ2F1dG8nIH07XG4gICAgICAgIGNhc2UgT2JqZWN0Rml0LkNPVkVSOlxuICAgICAgICAgIHJldHVybiBpbWFnZUFzcGVjdFJhdGlvIDwgY29udGFpbmVyQXNwZWN0UmF0aW8gPyB7IGhlaWdodDogJ2F1dG8nIH0gOiB7IHdpZHRoOiAnYXV0bycgfTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4ge307XG4gICAgICB9XG4gICAgfSxcbiAgICBjbGlja0hhbmRsZXI6IGZ1bmN0aW9uIGNsaWNrSGFuZGxlcigpIHtcbiAgICAgIC8vIGRvbid0IHNob3cgdmlld2VyIHdoZW4gcHJldmlldyBpcyBmYWxzZVxuICAgICAgaWYgKCF0aGlzLnByZXZpZXcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gcHJldmVudCBib2R5IHNjcm9sbFxuICAgICAgcHJldk92ZXJmbG93ID0gZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdztcbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJztcbiAgICAgIHRoaXMuc2hvd1ZpZXdlciA9IHRydWU7XG4gICAgfSxcbiAgICBjbG9zZVZpZXdlcjogZnVuY3Rpb24gY2xvc2VWaWV3ZXIoKSB7XG4gICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gcHJldk92ZXJmbG93O1xuICAgICAgdGhpcy5zaG93Vmlld2VyID0gZmFsc2U7XG4gICAgfVxuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvaW1hZ2Uvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhY2thZ2VzX2ltYWdlX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKGltYWdlX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2ltYWdlL3NyYy9tYWluLnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGltYWdlX3NyY19tYWluX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgcGFja2FnZXNfaW1hZ2Vfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF80NGQ4NGE3Y19yZW5kZXIsXG4gIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF80NGQ4NGE3Y19zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGltYWdlX3NyY19tYWluX2FwaTsgfVxuaW1hZ2Vfc3JjX21haW5fY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy9pbWFnZS9zcmMvbWFpbi52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgaW1hZ2Vfc3JjX21haW4gPSAoaW1hZ2Vfc3JjX21haW5fY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9pbWFnZS9pbmRleC5qc1xuXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5pbWFnZV9zcmNfbWFpbi5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuICBWdWUuY29tcG9uZW50KGltYWdlX3NyY19tYWluLm5hbWUsIGltYWdlX3NyY19tYWluKTtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhY2thZ2VzX2ltYWdlID0gKGltYWdlX3NyY19tYWluKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvY2FsZW5kYXIvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTZkOTc1NmJlJlxudmFyIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF82ZDk3NTZiZV9yZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJlbC1jYWxlbmRhclwiIH0sIFtcbiAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLWNhbGVuZGFyX19oZWFkZXJcIiB9LCBbXG4gICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLWNhbGVuZGFyX190aXRsZVwiIH0sIFtcbiAgICAgICAgX3ZtLl92KFwiXFxuICAgICAgXCIgKyBfdm0uX3MoX3ZtLmkxOG5EYXRlKSArIFwiXFxuICAgIFwiKVxuICAgICAgXSksXG4gICAgICBfdm0udmFsaWRhdGVkUmFuZ2UubGVuZ3RoID09PSAwXG4gICAgICAgID8gX2MoXG4gICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJlbC1jYWxlbmRhcl9fYnV0dG9uLWdyb3VwXCIgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgXCJlbC1idXR0b24tZ3JvdXBcIixcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgXCJlbC1idXR0b25cIixcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHR5cGU6IFwicGxhaW5cIiwgc2l6ZTogXCJtaW5pXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uc2VsZWN0RGF0ZShcInByZXYtbW9udGhcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgICBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fcyhfdm0udChcImVsLmRhdGVwaWNrZXIucHJldk1vbnRoXCIpKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICBcImVsLWJ1dHRvblwiLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgdHlwZTogXCJwbGFpblwiLCBzaXplOiBcIm1pbmlcIiB9LFxuICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5zZWxlY3REYXRlKFwidG9kYXlcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgICBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fcyhfdm0udChcImVsLmRhdGVwaWNrZXIudG9kYXlcIikpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgIFwiZWwtYnV0dG9uXCIsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyB0eXBlOiBcInBsYWluXCIsIHNpemU6IFwibWluaVwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLnNlbGVjdERhdGUoXCJuZXh0LW1vbnRoXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgICAgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3MoX3ZtLnQoXCJlbC5kYXRlcGlja2VyLm5leHRNb250aFwiKSkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIDFcbiAgICAgICAgICApXG4gICAgICAgIDogX3ZtLl9lKClcbiAgICBdKSxcbiAgICBfdm0udmFsaWRhdGVkUmFuZ2UubGVuZ3RoID09PSAwXG4gICAgICA/IF9jKFxuICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgeyBrZXk6IFwibm8tcmFuZ2VcIiwgc3RhdGljQ2xhc3M6IFwiZWwtY2FsZW5kYXJfX2JvZHlcIiB9LFxuICAgICAgICAgIFtcbiAgICAgICAgICAgIF9jKFwiZGF0ZS10YWJsZVwiLCB7XG4gICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgZGF0ZTogX3ZtLmRhdGUsXG4gICAgICAgICAgICAgICAgXCJzZWxlY3RlZC1kYXlcIjogX3ZtLnJlYWxTZWxlY3RlZERheSxcbiAgICAgICAgICAgICAgICBcImZpcnN0LWRheS1vZi13ZWVrXCI6IF92bS5yZWFsRmlyc3REYXlPZldlZWtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgb246IHsgcGljazogX3ZtLnBpY2tEYXkgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICBdLFxuICAgICAgICAgIDFcbiAgICAgICAgKVxuICAgICAgOiBfYyhcbiAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgIHsga2V5OiBcImhhcy1yYW5nZVwiLCBzdGF0aWNDbGFzczogXCJlbC1jYWxlbmRhcl9fYm9keVwiIH0sXG4gICAgICAgICAgX3ZtLl9sKF92bS52YWxpZGF0ZWRSYW5nZSwgZnVuY3Rpb24ocmFuZ2UsIGluZGV4KSB7XG4gICAgICAgICAgICByZXR1cm4gX2MoXCJkYXRlLXRhYmxlXCIsIHtcbiAgICAgICAgICAgICAga2V5OiBpbmRleCxcbiAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICBkYXRlOiByYW5nZVswXSxcbiAgICAgICAgICAgICAgICBcInNlbGVjdGVkLWRheVwiOiBfdm0ucmVhbFNlbGVjdGVkRGF5LFxuICAgICAgICAgICAgICAgIHJhbmdlOiByYW5nZSxcbiAgICAgICAgICAgICAgICBcImhpZGUtaGVhZGVyXCI6IGluZGV4ICE9PSAwLFxuICAgICAgICAgICAgICAgIFwiZmlyc3QtZGF5LW9mLXdlZWtcIjogX3ZtLnJlYWxGaXJzdERheU9mV2Vla1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBvbjogeyBwaWNrOiBfdm0ucGlja0RheSB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIDFcbiAgICAgICAgKVxuICBdKVxufVxudmFyIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF82ZDk3NTZiZV9zdGF0aWNSZW5kZXJGbnMgPSBbXVxubWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzZkOTc1NmJlX3JlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY2FsZW5kYXIvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTZkOTc1NmJlJlxuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiZWxlbWVudC11aS9saWIvdXRpbHMvZGF0ZVwiXG52YXIgZGF0ZV8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwKTtcbnZhciBkYXRlX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGRhdGVfKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvY2FsZW5kYXIvc3JjL2RhdGUtdGFibGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuXG5cblxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfZGF0ZV90YWJsZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIHByb3BzOiB7XG4gICAgc2VsZWN0ZWREYXk6IFN0cmluZywgLy8gZm9ybWF0ZWQgZGF0ZSB5eXl5LU1NLWRkXG4gICAgcmFuZ2U6IHtcbiAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgdmFsaWRhdG9yOiBmdW5jdGlvbiB2YWxpZGF0b3IodmFsKSB7XG4gICAgICAgIGlmICghKHZhbCAmJiB2YWwubGVuZ3RoKSkgcmV0dXJuIHRydWU7XG4gICAgICAgIHZhciBzdGFydCA9IHZhbFswXSxcbiAgICAgICAgICAgIGVuZCA9IHZhbFsxXTtcblxuICAgICAgICByZXR1cm4gT2JqZWN0KGRhdGVfdXRpbF9bXCJ2YWxpZGF0ZVJhbmdlSW5PbmVNb250aFwiXSkoc3RhcnQsIGVuZCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBkYXRlOiBEYXRlLFxuICAgIGhpZGVIZWFkZXI6IEJvb2xlYW4sXG4gICAgZmlyc3REYXlPZldlZWs6IE51bWJlclxuICB9LFxuXG4gIGluamVjdDogWydlbENhbGVuZGFyJ10sXG5cbiAgbWV0aG9kczoge1xuICAgIHRvTmVzdGVkQXJyOiBmdW5jdGlvbiB0b05lc3RlZEFycihkYXlzKSB7XG4gICAgICByZXR1cm4gT2JqZWN0KGRhdGVfdXRpbF9bXCJyYW5nZVwiXSkoZGF5cy5sZW5ndGggLyA3KS5tYXAoZnVuY3Rpb24gKF8sIGluZGV4KSB7XG4gICAgICAgIHZhciBzdGFydCA9IGluZGV4ICogNztcbiAgICAgICAgcmV0dXJuIGRheXMuc2xpY2Uoc3RhcnQsIHN0YXJ0ICsgNyk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGdldEZvcm1hdGVEYXRlOiBmdW5jdGlvbiBnZXRGb3JtYXRlRGF0ZShkYXksIHR5cGUpIHtcbiAgICAgIGlmICghZGF5IHx8IFsncHJldicsICdjdXJyZW50JywgJ25leHQnXS5pbmRleE9mKHR5cGUpID09PSAtMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgZGF5IG9yIHR5cGUnKTtcbiAgICAgIH1cbiAgICAgIHZhciBwcmVmaXggPSB0aGlzLmN1ck1vbnRoRGF0ZVByZWZpeDtcbiAgICAgIGlmICh0eXBlID09PSAncHJldicpIHtcbiAgICAgICAgcHJlZml4ID0gdGhpcy5wcmV2TW9udGhEYXRlUHJlZml4O1xuICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnbmV4dCcpIHtcbiAgICAgICAgcHJlZml4ID0gdGhpcy5uZXh0TW9udGhEYXRlUHJlZml4O1xuICAgICAgfVxuICAgICAgZGF5ID0gKCcwMCcgKyBkYXkpLnNsaWNlKC0yKTtcbiAgICAgIHJldHVybiBwcmVmaXggKyAnLScgKyBkYXk7XG4gICAgfSxcbiAgICBnZXRDZWxsQ2xhc3M6IGZ1bmN0aW9uIGdldENlbGxDbGFzcyhfcmVmKSB7XG4gICAgICB2YXIgdGV4dCA9IF9yZWYudGV4dCxcbiAgICAgICAgICB0eXBlID0gX3JlZi50eXBlO1xuXG4gICAgICB2YXIgY2xhc3NlcyA9IFt0eXBlXTtcbiAgICAgIGlmICh0eXBlID09PSAnY3VycmVudCcpIHtcbiAgICAgICAgdmFyIGRhdGUgPSB0aGlzLmdldEZvcm1hdGVEYXRlKHRleHQsIHR5cGUpO1xuICAgICAgICBpZiAoZGF0ZSA9PT0gdGhpcy5zZWxlY3RlZERheSkge1xuICAgICAgICAgIGNsYXNzZXMucHVzaCgnaXMtc2VsZWN0ZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF0ZSA9PT0gdGhpcy5mb3JtYXRlZFRvZGF5KSB7XG4gICAgICAgICAgY2xhc3Nlcy5wdXNoKCdpcy10b2RheScpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gY2xhc3NlcztcbiAgICB9LFxuICAgIHBpY2tEYXk6IGZ1bmN0aW9uIHBpY2tEYXkoX3JlZjIpIHtcbiAgICAgIHZhciB0ZXh0ID0gX3JlZjIudGV4dCxcbiAgICAgICAgICB0eXBlID0gX3JlZjIudHlwZTtcblxuICAgICAgdmFyIGRhdGUgPSB0aGlzLmdldEZvcm1hdGVEYXRlKHRleHQsIHR5cGUpO1xuICAgICAgdGhpcy4kZW1pdCgncGljaycsIGRhdGUpO1xuICAgIH0sXG4gICAgY2VsbFJlbmRlclByb3h5OiBmdW5jdGlvbiBjZWxsUmVuZGVyUHJveHkoX3JlZjMpIHtcbiAgICAgIHZhciB0ZXh0ID0gX3JlZjMudGV4dCxcbiAgICAgICAgICB0eXBlID0gX3JlZjMudHlwZTtcbiAgICAgIHZhciBoID0gdGhpcy4kY3JlYXRlRWxlbWVudDtcblxuICAgICAgdmFyIHJlbmRlciA9IHRoaXMuZWxDYWxlbmRhci4kc2NvcGVkU2xvdHMuZGF0ZUNlbGw7XG4gICAgICBpZiAoIXJlbmRlcikgcmV0dXJuIGgoJ3NwYW4nLCBbdGV4dF0pO1xuXG4gICAgICB2YXIgZGF5ID0gdGhpcy5nZXRGb3JtYXRlRGF0ZSh0ZXh0LCB0eXBlKTtcbiAgICAgIHZhciBkYXRlID0gbmV3IERhdGUoZGF5KTtcbiAgICAgIHZhciBkYXRhID0ge1xuICAgICAgICBpc1NlbGVjdGVkOiB0aGlzLnNlbGVjdGVkRGF5ID09PSBkYXksXG4gICAgICAgIHR5cGU6IHR5cGUgKyAnLW1vbnRoJyxcbiAgICAgICAgZGF5OiBkYXlcbiAgICAgIH07XG4gICAgICByZXR1cm4gcmVuZGVyKHsgZGF0ZTogZGF0ZSwgZGF0YTogZGF0YSB9KTtcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBXRUVLX0RBWVM6IGZ1bmN0aW9uIFdFRUtfREFZUygpIHtcbiAgICAgIHJldHVybiBPYmplY3QoZGF0ZV91dGlsX1tcImdldEkxOG5TZXR0aW5nc1wiXSkoKS5kYXlOYW1lcztcbiAgICB9LFxuICAgIHByZXZNb250aERhdGVQcmVmaXg6IGZ1bmN0aW9uIHByZXZNb250aERhdGVQcmVmaXgoKSB7XG4gICAgICB2YXIgdGVtcCA9IG5ldyBEYXRlKHRoaXMuZGF0ZS5nZXRUaW1lKCkpO1xuICAgICAgdGVtcC5zZXREYXRlKDApO1xuICAgICAgcmV0dXJuIGRhdGVfZGVmYXVsdC5hLmZvcm1hdCh0ZW1wLCAneXl5eS1NTScpO1xuICAgIH0sXG4gICAgY3VyTW9udGhEYXRlUHJlZml4OiBmdW5jdGlvbiBjdXJNb250aERhdGVQcmVmaXgoKSB7XG4gICAgICByZXR1cm4gZGF0ZV9kZWZhdWx0LmEuZm9ybWF0KHRoaXMuZGF0ZSwgJ3l5eXktTU0nKTtcbiAgICB9LFxuICAgIG5leHRNb250aERhdGVQcmVmaXg6IGZ1bmN0aW9uIG5leHRNb250aERhdGVQcmVmaXgoKSB7XG4gICAgICB2YXIgdGVtcCA9IG5ldyBEYXRlKHRoaXMuZGF0ZS5nZXRGdWxsWWVhcigpLCB0aGlzLmRhdGUuZ2V0TW9udGgoKSArIDEsIDEpO1xuICAgICAgcmV0dXJuIGRhdGVfZGVmYXVsdC5hLmZvcm1hdCh0ZW1wLCAneXl5eS1NTScpO1xuICAgIH0sXG4gICAgZm9ybWF0ZWRUb2RheTogZnVuY3Rpb24gZm9ybWF0ZWRUb2RheSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmVsQ2FsZW5kYXIuZm9ybWF0ZWRUb2RheTtcbiAgICB9LFxuICAgIGlzSW5SYW5nZTogZnVuY3Rpb24gaXNJblJhbmdlKCkge1xuICAgICAgcmV0dXJuIHRoaXMucmFuZ2UgJiYgdGhpcy5yYW5nZS5sZW5ndGg7XG4gICAgfSxcbiAgICByb3dzOiBmdW5jdGlvbiByb3dzKCkge1xuICAgICAgdmFyIGRheXMgPSBbXTtcbiAgICAgIC8vIGlmIHJhbmdlIGV4aXN0cywgc2hvdWxkIHJlbmRlciBkYXlzIGluIHJhbmdlLlxuICAgICAgaWYgKHRoaXMuaXNJblJhbmdlKSB7XG4gICAgICAgIHZhciBfcmFuZ2UgPSB0aGlzLnJhbmdlLFxuICAgICAgICAgICAgc3RhcnQgPSBfcmFuZ2VbMF0sXG4gICAgICAgICAgICBlbmQgPSBfcmFuZ2VbMV07XG5cbiAgICAgICAgdmFyIGN1cnJlbnRNb250aFJhbmdlID0gT2JqZWN0KGRhdGVfdXRpbF9bXCJyYW5nZVwiXSkoZW5kLmdldERhdGUoKSAtIHN0YXJ0LmdldERhdGUoKSArIDEpLm1hcChmdW5jdGlvbiAoXywgaW5kZXgpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdGV4dDogc3RhcnQuZ2V0RGF0ZSgpICsgaW5kZXgsXG4gICAgICAgICAgICB0eXBlOiAnY3VycmVudCdcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgICAgdmFyIHJlbWFpbmluZyA9IGN1cnJlbnRNb250aFJhbmdlLmxlbmd0aCAlIDc7XG4gICAgICAgIHJlbWFpbmluZyA9IHJlbWFpbmluZyA9PT0gMCA/IDAgOiA3IC0gcmVtYWluaW5nO1xuICAgICAgICB2YXIgbmV4dE1vbnRoUmFuZ2UgPSBPYmplY3QoZGF0ZV91dGlsX1tcInJhbmdlXCJdKShyZW1haW5pbmcpLm1hcChmdW5jdGlvbiAoXywgaW5kZXgpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdGV4dDogaW5kZXggKyAxLFxuICAgICAgICAgICAgdHlwZTogJ25leHQnXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICAgIGRheXMgPSBjdXJyZW50TW9udGhSYW5nZS5jb25jYXQobmV4dE1vbnRoUmFuZ2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGRhdGUgPSB0aGlzLmRhdGU7XG4gICAgICAgIHZhciBmaXJzdERheSA9IE9iamVjdChkYXRlX3V0aWxfW1wiZ2V0Rmlyc3REYXlPZk1vbnRoXCJdKShkYXRlKTtcbiAgICAgICAgZmlyc3REYXkgPSBmaXJzdERheSA9PT0gMCA/IDcgOiBmaXJzdERheTtcbiAgICAgICAgdmFyIGZpcnN0RGF5T2ZXZWVrID0gdHlwZW9mIHRoaXMuZmlyc3REYXlPZldlZWsgPT09ICdudW1iZXInID8gdGhpcy5maXJzdERheU9mV2VlayA6IDE7XG4gICAgICAgIHZhciBvZmZzZXQgPSAoNyArIGZpcnN0RGF5IC0gZmlyc3REYXlPZldlZWspICUgNztcbiAgICAgICAgdmFyIHByZXZNb250aERheXMgPSBPYmplY3QoZGF0ZV91dGlsX1tcImdldFByZXZNb250aExhc3REYXlzXCJdKShkYXRlLCBvZmZzZXQpLm1hcChmdW5jdGlvbiAoZGF5KSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRleHQ6IGRheSxcbiAgICAgICAgICAgIHR5cGU6ICdwcmV2J1xuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgY3VycmVudE1vbnRoRGF5cyA9IE9iamVjdChkYXRlX3V0aWxfW1wiZ2V0TW9udGhEYXlzXCJdKShkYXRlKS5tYXAoZnVuY3Rpb24gKGRheSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0ZXh0OiBkYXksXG4gICAgICAgICAgICB0eXBlOiAnY3VycmVudCdcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgICAgZGF5cyA9IFtdLmNvbmNhdChwcmV2TW9udGhEYXlzLCBjdXJyZW50TW9udGhEYXlzKTtcbiAgICAgICAgdmFyIG5leHRNb250aERheXMgPSBPYmplY3QoZGF0ZV91dGlsX1tcInJhbmdlXCJdKSg0MiAtIGRheXMubGVuZ3RoKS5tYXAoZnVuY3Rpb24gKF8sIGluZGV4KSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRleHQ6IGluZGV4ICsgMSxcbiAgICAgICAgICAgIHR5cGU6ICduZXh0J1xuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgICBkYXlzID0gZGF5cy5jb25jYXQobmV4dE1vbnRoRGF5cyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy50b05lc3RlZEFycihkYXlzKTtcbiAgICB9LFxuICAgIHdlZWtEYXlzOiBmdW5jdGlvbiB3ZWVrRGF5cygpIHtcbiAgICAgIHZhciBzdGFydCA9IHRoaXMuZmlyc3REYXlPZldlZWs7XG4gICAgICB2YXIgV0VFS19EQVlTID0gdGhpcy5XRUVLX0RBWVM7XG5cblxuICAgICAgaWYgKHR5cGVvZiBzdGFydCAhPT0gJ251bWJlcicgfHwgc3RhcnQgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIFdFRUtfREFZUy5zbGljZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFdFRUtfREFZUy5zbGljZShzdGFydCkuY29uY2F0KFdFRUtfREFZUy5zbGljZSgwLCBzdGFydCkpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdmFyIGggPSBhcmd1bWVudHNbMF07XG5cbiAgICB2YXIgdGhlYWQgPSB0aGlzLmhpZGVIZWFkZXIgPyBudWxsIDogaCgndGhlYWQnLCBbdGhpcy53ZWVrRGF5cy5tYXAoZnVuY3Rpb24gKGRheSkge1xuICAgICAgcmV0dXJuIGgoXG4gICAgICAgICd0aCcsXG4gICAgICAgIHsga2V5OiBkYXkgfSxcbiAgICAgICAgW2RheV1cbiAgICAgICk7XG4gICAgfSldKTtcbiAgICByZXR1cm4gaChcbiAgICAgICd0YWJsZScsXG4gICAgICB7XG4gICAgICAgICdjbGFzcyc6IHtcbiAgICAgICAgICAnZWwtY2FsZW5kYXItdGFibGUnOiB0cnVlLFxuICAgICAgICAgICdpcy1yYW5nZSc6IHRoaXMuaXNJblJhbmdlXG4gICAgICAgIH0sXG4gICAgICAgIGF0dHJzOiB7IGNlbGxzcGFjaW5nOiAnMCcsXG4gICAgICAgICAgY2VsbHBhZGRpbmc6ICcwJyB9XG4gICAgICB9LFxuICAgICAgW3RoZWFkLCBoKCd0Ym9keScsIFt0aGlzLnJvd3MubWFwKGZ1bmN0aW9uIChyb3csIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBoKFxuICAgICAgICAgICd0cicsXG4gICAgICAgICAge1xuICAgICAgICAgICAgJ2NsYXNzJzoge1xuICAgICAgICAgICAgICAnZWwtY2FsZW5kYXItdGFibGVfX3Jvdyc6IHRydWUsXG4gICAgICAgICAgICAgICdlbC1jYWxlbmRhci10YWJsZV9fcm93LS1oaWRlLWJvcmRlcic6IGluZGV4ID09PSAwICYmIF90aGlzLmhpZGVIZWFkZXJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBrZXk6IGluZGV4IH0sXG4gICAgICAgICAgW3Jvdy5tYXAoZnVuY3Rpb24gKGNlbGwsIGtleSkge1xuICAgICAgICAgICAgcmV0dXJuIGgoXG4gICAgICAgICAgICAgICd0ZCcsXG4gICAgICAgICAgICAgIHsga2V5OiBrZXksXG4gICAgICAgICAgICAgICAgJ2NsYXNzJzogX3RoaXMuZ2V0Q2VsbENsYXNzKGNlbGwpLFxuICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAnY2xpY2snOiBfdGhpcy5waWNrRGF5LmJpbmQoX3RoaXMsIGNlbGwpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBbaChcbiAgICAgICAgICAgICAgICAnZGl2JyxcbiAgICAgICAgICAgICAgICB7ICdjbGFzcyc6ICdlbC1jYWxlbmRhci1kYXknIH0sXG4gICAgICAgICAgICAgICAgW190aGlzLmNlbGxSZW5kZXJQcm94eShjZWxsKV1cbiAgICAgICAgICAgICAgKV1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSldXG4gICAgICAgICk7XG4gICAgICB9KV0pXVxuICAgICk7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jYWxlbmRhci9zcmMvZGF0ZS10YWJsZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgY2FsZW5kYXJfc3JjX2RhdGVfdGFibGV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoc3JjX2RhdGVfdGFibGV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY2FsZW5kYXIvc3JjL2RhdGUtdGFibGUudnVlXG52YXIgZGF0ZV90YWJsZV9yZW5kZXIsIGRhdGVfdGFibGVfc3RhdGljUmVuZGVyRm5zXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIHNyY19kYXRlX3RhYmxlX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgY2FsZW5kYXJfc3JjX2RhdGVfdGFibGV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIGRhdGVfdGFibGVfcmVuZGVyLFxuICBkYXRlX3RhYmxlX3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgc3JjX2RhdGVfdGFibGVfYXBpOyB9XG5zcmNfZGF0ZV90YWJsZV9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL2NhbGVuZGFyL3NyYy9kYXRlLXRhYmxlLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfZGF0ZV90YWJsZSA9IChzcmNfZGF0ZV90YWJsZV9jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9jYWxlbmRhci9zcmMvbWFpbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5cblxuXG5cblxuXG5cbnZhciB2YWxpZFR5cGVzID0gWydwcmV2LW1vbnRoJywgJ3RvZGF5JywgJ25leHQtbW9udGgnXTtcbnZhciB3ZWVrRGF5cyA9IFsnU3VuZGF5JywgJ01vbmRheScsICdUdWVzZGF5JywgJ1dlZG5lc2RheScsICdUaHVyc2RheScsICdGcmlkYXknLCAnU2F0dXJkYXknXTtcbnZhciBvbmVEYXkgPSA4NjQwMDAwMDtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgY2FsZW5kYXJfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBuYW1lOiAnRWxDYWxlbmRhcicsXG5cbiAgbWl4aW5zOiBbbG9jYWxlX2RlZmF1bHQuYV0sXG5cbiAgY29tcG9uZW50czoge1xuICAgIERhdGVUYWJsZTogc3JjX2RhdGVfdGFibGUsXG4gICAgRWxCdXR0b246IGJ1dHRvbl9kZWZhdWx0LmEsXG4gICAgRWxCdXR0b25Hcm91cDogYnV0dG9uX2dyb3VwX2RlZmF1bHQuYVxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgdmFsdWU6IFtEYXRlLCBTdHJpbmcsIE51bWJlcl0sXG4gICAgcmFuZ2U6IHtcbiAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgdmFsaWRhdG9yOiBmdW5jdGlvbiB2YWxpZGF0b3IocmFuZ2UpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmFuZ2UpKSB7XG4gICAgICAgICAgcmV0dXJuIHJhbmdlLmxlbmd0aCA9PT0gMiAmJiByYW5nZS5ldmVyeShmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBpdGVtID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgaXRlbSA9PT0gJ251bWJlcicgfHwgaXRlbSBpbnN0YW5jZW9mIERhdGU7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGZpcnN0RGF5T2ZXZWVrOiB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBkZWZhdWx0OiAxXG4gICAgfVxuICB9LFxuXG4gIHByb3ZpZGU6IGZ1bmN0aW9uIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVsQ2FsZW5kYXI6IHRoaXNcbiAgICB9O1xuICB9LFxuXG5cbiAgbWV0aG9kczoge1xuICAgIHBpY2tEYXk6IGZ1bmN0aW9uIHBpY2tEYXkoZGF5KSB7XG4gICAgICB0aGlzLnJlYWxTZWxlY3RlZERheSA9IGRheTtcbiAgICB9LFxuICAgIHNlbGVjdERhdGU6IGZ1bmN0aW9uIHNlbGVjdERhdGUodHlwZSkge1xuICAgICAgaWYgKHZhbGlkVHlwZXMuaW5kZXhPZih0eXBlKSA9PT0gLTEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHR5cGUgJyArIHR5cGUpO1xuICAgICAgfVxuICAgICAgdmFyIGRheSA9ICcnO1xuICAgICAgaWYgKHR5cGUgPT09ICdwcmV2LW1vbnRoJykge1xuICAgICAgICBkYXkgPSB0aGlzLnByZXZNb250aERhdGVQcmVmaXggKyAnLTAxJztcbiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ25leHQtbW9udGgnKSB7XG4gICAgICAgIGRheSA9IHRoaXMubmV4dE1vbnRoRGF0ZVByZWZpeCArICctMDEnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGF5ID0gdGhpcy5mb3JtYXRlZFRvZGF5O1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF5ID09PSB0aGlzLmZvcm1hdGVkRGF0ZSkgcmV0dXJuO1xuICAgICAgdGhpcy5waWNrRGF5KGRheSk7XG4gICAgfSxcbiAgICB0b0RhdGU6IGZ1bmN0aW9uIHRvRGF0ZSh2YWwpIHtcbiAgICAgIGlmICghdmFsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCB2YWwnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWwgaW5zdGFuY2VvZiBEYXRlID8gdmFsIDogbmV3IERhdGUodmFsKTtcbiAgICB9LFxuICAgIHJhbmdlVmFsaWRhdG9yOiBmdW5jdGlvbiByYW5nZVZhbGlkYXRvcihkYXRlLCBpc1N0YXJ0KSB7XG4gICAgICB2YXIgZmlyc3REYXlPZldlZWsgPSB0aGlzLnJlYWxGaXJzdERheU9mV2VlaztcbiAgICAgIHZhciBleHBlY3RlZCA9IGlzU3RhcnQgPyBmaXJzdERheU9mV2VlayA6IGZpcnN0RGF5T2ZXZWVrID09PSAwID8gNiA6IGZpcnN0RGF5T2ZXZWVrIC0gMTtcbiAgICAgIHZhciBtZXNzYWdlID0gKGlzU3RhcnQgPyAnc3RhcnQnIDogJ2VuZCcpICsgJyBvZiByYW5nZSBzaG91bGQgYmUgJyArIHdlZWtEYXlzW2V4cGVjdGVkXSArICcuJztcbiAgICAgIGlmIChkYXRlLmdldERheSgpICE9PSBleHBlY3RlZCkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1tFbGVtZW50Q2FsZW5kYXJdJywgbWVzc2FnZSwgJ0ludmFsaWQgcmFuZ2Ugd2lsbCBiZSBpZ25vcmVkLicpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBwcmV2TW9udGhEYXRlUHJlZml4OiBmdW5jdGlvbiBwcmV2TW9udGhEYXRlUHJlZml4KCkge1xuICAgICAgdmFyIHRlbXAgPSBuZXcgRGF0ZSh0aGlzLmRhdGUuZ2V0VGltZSgpKTtcbiAgICAgIHRlbXAuc2V0RGF0ZSgwKTtcbiAgICAgIHJldHVybiBkYXRlX2RlZmF1bHQuYS5mb3JtYXQodGVtcCwgJ3l5eXktTU0nKTtcbiAgICB9LFxuICAgIGN1ck1vbnRoRGF0ZVByZWZpeDogZnVuY3Rpb24gY3VyTW9udGhEYXRlUHJlZml4KCkge1xuICAgICAgcmV0dXJuIGRhdGVfZGVmYXVsdC5hLmZvcm1hdCh0aGlzLmRhdGUsICd5eXl5LU1NJyk7XG4gICAgfSxcbiAgICBuZXh0TW9udGhEYXRlUHJlZml4OiBmdW5jdGlvbiBuZXh0TW9udGhEYXRlUHJlZml4KCkge1xuICAgICAgdmFyIHRlbXAgPSBuZXcgRGF0ZSh0aGlzLmRhdGUuZ2V0RnVsbFllYXIoKSwgdGhpcy5kYXRlLmdldE1vbnRoKCkgKyAxLCAxKTtcbiAgICAgIHJldHVybiBkYXRlX2RlZmF1bHQuYS5mb3JtYXQodGVtcCwgJ3l5eXktTU0nKTtcbiAgICB9LFxuICAgIGZvcm1hdGVkRGF0ZTogZnVuY3Rpb24gZm9ybWF0ZWREYXRlKCkge1xuICAgICAgcmV0dXJuIGRhdGVfZGVmYXVsdC5hLmZvcm1hdCh0aGlzLmRhdGUsICd5eXl5LU1NLWRkJyk7XG4gICAgfSxcbiAgICBpMThuRGF0ZTogZnVuY3Rpb24gaTE4bkRhdGUoKSB7XG4gICAgICB2YXIgeWVhciA9IHRoaXMuZGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgdmFyIG1vbnRoID0gdGhpcy5kYXRlLmdldE1vbnRoKCkgKyAxO1xuICAgICAgcmV0dXJuIHllYXIgKyAnICcgKyB0aGlzLnQoJ2VsLmRhdGVwaWNrZXIueWVhcicpICsgJyAnICsgdGhpcy50KCdlbC5kYXRlcGlja2VyLm1vbnRoJyArIG1vbnRoKTtcbiAgICB9LFxuICAgIGZvcm1hdGVkVG9kYXk6IGZ1bmN0aW9uIGZvcm1hdGVkVG9kYXkoKSB7XG4gICAgICByZXR1cm4gZGF0ZV9kZWZhdWx0LmEuZm9ybWF0KHRoaXMubm93LCAneXl5eS1NTS1kZCcpO1xuICAgIH0sXG5cblxuICAgIHJlYWxTZWxlY3RlZERheToge1xuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIGlmICghdGhpcy52YWx1ZSkgcmV0dXJuIHRoaXMuc2VsZWN0ZWREYXk7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1hdGVkRGF0ZTtcbiAgICAgIH0sXG4gICAgICBzZXQ6IGZ1bmN0aW9uIHNldCh2YWwpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZERheSA9IHZhbDtcbiAgICAgICAgdmFyIGRhdGUgPSBuZXcgRGF0ZSh2YWwpO1xuICAgICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIGRhdGUpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBkYXRlOiBmdW5jdGlvbiBkYXRlKCkge1xuICAgICAgaWYgKCF0aGlzLnZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLnJlYWxTZWxlY3RlZERheSkge1xuICAgICAgICAgIHZhciBkID0gdGhpcy5zZWxlY3RlZERheS5zcGxpdCgnLScpO1xuICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShkWzBdLCBkWzFdIC0gMSwgZFsyXSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy52YWxpZGF0ZWRSYW5nZS5sZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZWRSYW5nZVswXVswXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5ub3c7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy50b0RhdGUodGhpcy52YWx1ZSk7XG4gICAgICB9XG4gICAgfSxcblxuXG4gICAgLy8gaWYgcmFuZ2UgaXMgdmFsaWQsIHdlIGdldCBhIHR3by1kaWdpdCBhcnJheVxuICAgIHZhbGlkYXRlZFJhbmdlOiBmdW5jdGlvbiB2YWxpZGF0ZWRSYW5nZSgpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIHZhciByYW5nZSA9IHRoaXMucmFuZ2U7XG4gICAgICBpZiAoIXJhbmdlKSByZXR1cm4gW107XG4gICAgICByYW5nZSA9IHJhbmdlLnJlZHVjZShmdW5jdGlvbiAocHJldiwgdmFsLCBpbmRleCkge1xuICAgICAgICB2YXIgZGF0ZSA9IF90aGlzLnRvRGF0ZSh2YWwpO1xuICAgICAgICBpZiAoX3RoaXMucmFuZ2VWYWxpZGF0b3IoZGF0ZSwgaW5kZXggPT09IDApKSB7XG4gICAgICAgICAgcHJldiA9IHByZXYuY29uY2F0KGRhdGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcmV2O1xuICAgICAgfSwgW10pO1xuICAgICAgaWYgKHJhbmdlLmxlbmd0aCA9PT0gMikge1xuICAgICAgICB2YXIgX3JhbmdlID0gcmFuZ2UsXG4gICAgICAgICAgICBzdGFydCA9IF9yYW5nZVswXSxcbiAgICAgICAgICAgIGVuZCA9IF9yYW5nZVsxXTtcblxuICAgICAgICBpZiAoc3RhcnQgPiBlbmQpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ1tFbGVtZW50Q2FsZW5kYXJdZW5kIHRpbWUgc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiBzdGFydCB0aW1lJyk7XG4gICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIC8vIHN0YXJ0IHRpbWUgYW5kIGVuZCB0aW1lIGluIG9uZSBtb250aFxuICAgICAgICBpZiAoT2JqZWN0KGRhdGVfdXRpbF9bXCJ2YWxpZGF0ZVJhbmdlSW5PbmVNb250aFwiXSkoc3RhcnQsIGVuZCkpIHtcbiAgICAgICAgICByZXR1cm4gW1tzdGFydCwgZW5kXV07XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGRhdGEgPSBbXTtcbiAgICAgICAgdmFyIHN0YXJ0RGF5ID0gbmV3IERhdGUoc3RhcnQuZ2V0RnVsbFllYXIoKSwgc3RhcnQuZ2V0TW9udGgoKSArIDEsIDEpO1xuICAgICAgICB2YXIgbGFzdERheSA9IHRoaXMudG9EYXRlKHN0YXJ0RGF5LmdldFRpbWUoKSAtIG9uZURheSk7XG4gICAgICAgIGlmICghT2JqZWN0KGRhdGVfdXRpbF9bXCJ2YWxpZGF0ZVJhbmdlSW5PbmVNb250aFwiXSkoc3RhcnREYXksIGVuZCkpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ1tFbGVtZW50Q2FsZW5kYXJdc3RhcnQgdGltZSBhbmQgZW5kIHRpbWUgaW50ZXJ2YWwgbXVzdCBub3QgZXhjZWVkIHR3byBtb250aHMnKTtcbiAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgLy8g56ys5LiA5Liq5pyI55qE5pe26Ze06IyD5Zu0XG4gICAgICAgIGRhdGEucHVzaChbc3RhcnQsIGxhc3REYXldKTtcbiAgICAgICAgLy8g5LiL5LiA5pyI55qE5pe26Ze06IyD5Zu077yM6ZyA6KaB6K6h566X5LiA5LiL6K+l5pyI55qE56ys5LiA5Liq5ZGo6LW35aeL5pelXG4gICAgICAgIHZhciBmaXJzdERheU9mV2VlayA9IHRoaXMucmVhbEZpcnN0RGF5T2ZXZWVrO1xuICAgICAgICB2YXIgbmV4dE1vbnRGaXJzdERheSA9IHN0YXJ0RGF5LmdldERheSgpO1xuICAgICAgICB2YXIgaW50ZXJ2YWwgPSAwO1xuICAgICAgICBpZiAobmV4dE1vbnRGaXJzdERheSAhPT0gZmlyc3REYXlPZldlZWspIHtcbiAgICAgICAgICBpZiAoZmlyc3REYXlPZldlZWsgPT09IDApIHtcbiAgICAgICAgICAgIGludGVydmFsID0gNyAtIG5leHRNb250Rmlyc3REYXk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGludGVydmFsID0gZmlyc3REYXlPZldlZWsgLSBuZXh0TW9udEZpcnN0RGF5O1xuICAgICAgICAgICAgaW50ZXJ2YWwgPSBpbnRlcnZhbCA+IDAgPyBpbnRlcnZhbCA6IDcgKyBpbnRlcnZhbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc3RhcnREYXkgPSB0aGlzLnRvRGF0ZShzdGFydERheS5nZXRUaW1lKCkgKyBpbnRlcnZhbCAqIG9uZURheSk7XG4gICAgICAgIGlmIChzdGFydERheS5nZXREYXRlKCkgPCBlbmQuZ2V0RGF0ZSgpKSB7XG4gICAgICAgICAgZGF0YS5wdXNoKFtzdGFydERheSwgZW5kXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICB9XG4gICAgICByZXR1cm4gW107XG4gICAgfSxcbiAgICByZWFsRmlyc3REYXlPZldlZWs6IGZ1bmN0aW9uIHJlYWxGaXJzdERheU9mV2VlaygpIHtcbiAgICAgIGlmICh0aGlzLmZpcnN0RGF5T2ZXZWVrIDwgMSB8fCB0aGlzLmZpcnN0RGF5T2ZXZWVrID4gNikge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBNYXRoLmZsb29yKHRoaXMuZmlyc3REYXlPZldlZWspO1xuICAgIH1cbiAgfSxcblxuICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzZWxlY3RlZERheTogJycsXG4gICAgICBub3c6IG5ldyBEYXRlKClcbiAgICB9O1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY2FsZW5kYXIvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhY2thZ2VzX2NhbGVuZGFyX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKGNhbGVuZGFyX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2NhbGVuZGFyL3NyYy9tYWluLnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGNhbGVuZGFyX3NyY19tYWluX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgcGFja2FnZXNfY2FsZW5kYXJfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF82ZDk3NTZiZV9yZW5kZXIsXG4gIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF82ZDk3NTZiZV9zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGNhbGVuZGFyX3NyY19tYWluX2FwaTsgfVxuY2FsZW5kYXJfc3JjX21haW5fY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy9jYWxlbmRhci9zcmMvbWFpbi52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgY2FsZW5kYXJfc3JjX21haW4gPSAoY2FsZW5kYXJfc3JjX21haW5fY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jYWxlbmRhci9pbmRleC5qc1xuXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5jYWxlbmRhcl9zcmNfbWFpbi5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuICBWdWUuY29tcG9uZW50KGNhbGVuZGFyX3NyY19tYWluLm5hbWUsIGNhbGVuZGFyX3NyY19tYWluKTtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGNhbGVuZGFyID0gKGNhbGVuZGFyX3NyY19tYWluKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvYmFja3RvcC9zcmMvbWFpbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MjU3ZGQ0YTkmXG52YXIgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzI1N2RkNGE5X3JlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcInRyYW5zaXRpb25cIiwgeyBhdHRyczogeyBuYW1lOiBcImVsLWZhZGUtaW5cIiB9IH0sIFtcbiAgICBfdm0udmlzaWJsZVxuICAgICAgPyBfYyhcbiAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWJhY2t0b3BcIixcbiAgICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICAgIHJpZ2h0OiBfdm0uc3R5bGVSaWdodCxcbiAgICAgICAgICAgICAgYm90dG9tOiBfdm0uc3R5bGVCb3R0b21cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICAgICAgcmV0dXJuIF92bS5oYW5kbGVDbGljaygkZXZlbnQpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFtcbiAgICAgICAgICAgIF92bS5fdChcImRlZmF1bHRcIiwgW19jKFwiZWwtaWNvblwiLCB7IGF0dHJzOiB7IG5hbWU6IFwiY2FyZXQtdG9wXCIgfSB9KV0pXG4gICAgICAgICAgXSxcbiAgICAgICAgICAyXG4gICAgICAgIClcbiAgICAgIDogX3ZtLl9lKClcbiAgXSlcbn1cbnZhciBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfMjU3ZGQ0YTlfc3RhdGljUmVuZGVyRm5zID0gW11cbm1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF8yNTdkZDRhOV9yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2JhY2t0b3Avc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTI1N2RkNGE5JlxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9iYWNrdG9wL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5cblxudmFyIGN1YmljID0gZnVuY3Rpb24gY3ViaWModmFsdWUpIHtcbiAgcmV0dXJuIE1hdGgucG93KHZhbHVlLCAzKTtcbn07XG52YXIgZWFzZUluT3V0Q3ViaWMgPSBmdW5jdGlvbiBlYXNlSW5PdXRDdWJpYyh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPCAwLjUgPyBjdWJpYyh2YWx1ZSAqIDIpIC8gMiA6IDEgLSBjdWJpYygoMSAtIHZhbHVlKSAqIDIpIC8gMjtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGJhY2t0b3Bfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBuYW1lOiAnRWxCYWNrdG9wJyxcblxuICBwcm9wczoge1xuICAgIHZpc2liaWxpdHlIZWlnaHQ6IHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGRlZmF1bHQ6IDIwMFxuICAgIH0sXG4gICAgdGFyZ2V0OiBbU3RyaW5nXSxcbiAgICByaWdodDoge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZGVmYXVsdDogNDBcbiAgICB9LFxuICAgIGJvdHRvbToge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZGVmYXVsdDogNDBcbiAgICB9XG4gIH0sXG5cbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZWw6IG51bGwsXG4gICAgICBjb250YWluZXI6IG51bGwsXG4gICAgICB2aXNpYmxlOiBmYWxzZVxuICAgIH07XG4gIH0sXG5cblxuICBjb21wdXRlZDoge1xuICAgIHN0eWxlQm90dG9tOiBmdW5jdGlvbiBzdHlsZUJvdHRvbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmJvdHRvbSArICdweCc7XG4gICAgfSxcbiAgICBzdHlsZVJpZ2h0OiBmdW5jdGlvbiBzdHlsZVJpZ2h0KCkge1xuICAgICAgcmV0dXJuIHRoaXMucmlnaHQgKyAncHgnO1xuICAgIH1cbiAgfSxcblxuICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge1xuICAgIHRoaXMuaW5pdCgpO1xuICAgIHRoaXMudGhyb3R0bGVkU2Nyb2xsSGFuZGxlciA9IHRocm90dGxlX2RlZmF1bHQoKSgzMDAsIHRoaXMub25TY3JvbGwpO1xuICAgIHRoaXMuY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMudGhyb3R0bGVkU2Nyb2xsSGFuZGxlcik7XG4gIH0sXG5cblxuICBtZXRob2RzOiB7XG4gICAgaW5pdDogZnVuY3Rpb24gaW5pdCgpIHtcbiAgICAgIHRoaXMuY29udGFpbmVyID0gZG9jdW1lbnQ7XG4gICAgICB0aGlzLmVsID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgICAgaWYgKHRoaXMudGFyZ2V0KSB7XG4gICAgICAgIHRoaXMuZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRoaXMudGFyZ2V0KTtcbiAgICAgICAgaWYgKCF0aGlzLmVsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd0YXJnZXQgaXMgbm90IGV4aXN0ZWQ6ICcgKyB0aGlzLnRhcmdldCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb250YWluZXIgPSB0aGlzLmVsO1xuICAgICAgfVxuICAgIH0sXG4gICAgb25TY3JvbGw6IGZ1bmN0aW9uIG9uU2Nyb2xsKCkge1xuICAgICAgdmFyIHNjcm9sbFRvcCA9IHRoaXMuZWwuc2Nyb2xsVG9wO1xuICAgICAgdGhpcy52aXNpYmxlID0gc2Nyb2xsVG9wID49IHRoaXMudmlzaWJpbGl0eUhlaWdodDtcbiAgICB9LFxuICAgIGhhbmRsZUNsaWNrOiBmdW5jdGlvbiBoYW5kbGVDbGljayhlKSB7XG4gICAgICB0aGlzLnNjcm9sbFRvVG9wKCk7XG4gICAgICB0aGlzLiRlbWl0KCdjbGljaycsIGUpO1xuICAgIH0sXG4gICAgc2Nyb2xsVG9Ub3A6IGZ1bmN0aW9uIHNjcm9sbFRvVG9wKCkge1xuICAgICAgdmFyIGVsID0gdGhpcy5lbDtcbiAgICAgIHZhciBiZWdpblRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgdmFyIGJlZ2luVmFsdWUgPSBlbC5zY3JvbGxUb3A7XG4gICAgICB2YXIgckFGID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSB8fCBmdW5jdGlvbiAoZnVuYykge1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW5jLCAxNik7XG4gICAgICB9O1xuICAgICAgdmFyIGZyYW1lRnVuYyA9IGZ1bmN0aW9uIGZyYW1lRnVuYygpIHtcbiAgICAgICAgdmFyIHByb2dyZXNzID0gKERhdGUubm93KCkgLSBiZWdpblRpbWUpIC8gNTAwO1xuICAgICAgICBpZiAocHJvZ3Jlc3MgPCAxKSB7XG4gICAgICAgICAgZWwuc2Nyb2xsVG9wID0gYmVnaW5WYWx1ZSAqICgxIC0gZWFzZUluT3V0Q3ViaWMocHJvZ3Jlc3MpKTtcbiAgICAgICAgICByQUYoZnJhbWVGdW5jKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlbC5zY3JvbGxUb3AgPSAwO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgckFGKGZyYW1lRnVuYyk7XG4gICAgfVxuICB9LFxuXG4gIGJlZm9yZURlc3Ryb3k6IGZ1bmN0aW9uIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgdGhpcy5jb250YWluZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy50aHJvdHRsZWRTY3JvbGxIYW5kbGVyKTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2JhY2t0b3Avc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhY2thZ2VzX2JhY2t0b3Bfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoYmFja3RvcF9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9iYWNrdG9wL3NyYy9tYWluLnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGJhY2t0b3Bfc3JjX21haW5fY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBwYWNrYWdlc19iYWNrdG9wX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfMjU3ZGQ0YTlfcmVuZGVyLFxuICBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfMjU3ZGQ0YTlfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBiYWNrdG9wX3NyY19tYWluX2FwaTsgfVxuYmFja3RvcF9zcmNfbWFpbl9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL2JhY2t0b3Avc3JjL21haW4udnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGJhY2t0b3Bfc3JjX21haW4gPSAoYmFja3RvcF9zcmNfbWFpbl9jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2JhY2t0b3AvaW5kZXguanNcblxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuYmFja3RvcF9zcmNfbWFpbi5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuICBWdWUuY29tcG9uZW50KGJhY2t0b3Bfc3JjX21haW4ubmFtZSwgYmFja3RvcF9zcmNfbWFpbik7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBiYWNrdG9wID0gKGJhY2t0b3Bfc3JjX21haW4pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9pbmZpbml0ZS1zY3JvbGwvc3JjL21haW4uanNcblxuXG5cblxudmFyIGdldFN0eWxlQ29tcHV0ZWRQcm9wZXJ0eSA9IGZ1bmN0aW9uIGdldFN0eWxlQ29tcHV0ZWRQcm9wZXJ0eShlbGVtZW50LCBwcm9wZXJ0eSkge1xuICBpZiAoZWxlbWVudCA9PT0gd2luZG93KSB7XG4gICAgZWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgfVxuXG4gIGlmIChlbGVtZW50Lm5vZGVUeXBlICE9PSAxKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIC8vIE5PVEU6IDEgRE9NIGFjY2VzcyBoZXJlXG4gIHZhciBjc3MgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50LCBudWxsKTtcbiAgcmV0dXJuIHByb3BlcnR5ID8gY3NzW3Byb3BlcnR5XSA6IGNzcztcbn07XG5cbnZhciBlbnRyaWVzID0gZnVuY3Rpb24gZW50cmllcyhvYmopIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaiB8fCB7fSkubWFwKGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gW2tleSwgb2JqW2tleV1dO1xuICB9KTtcbn07XG5cbnZhciBnZXRQb3NpdGlvblNpemUgPSBmdW5jdGlvbiBnZXRQb3NpdGlvblNpemUoZWwsIHByb3ApIHtcbiAgcmV0dXJuIGVsID09PSB3aW5kb3cgfHwgZWwgPT09IGRvY3VtZW50ID8gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50W3Byb3BdIDogZWxbcHJvcF07XG59O1xuXG52YXIgZ2V0T2Zmc2V0SGVpZ2h0ID0gZnVuY3Rpb24gZ2V0T2Zmc2V0SGVpZ2h0KGVsKSB7XG4gIHJldHVybiBnZXRQb3NpdGlvblNpemUoZWwsICdvZmZzZXRIZWlnaHQnKTtcbn07XG5cbnZhciBnZXRDbGllbnRIZWlnaHQgPSBmdW5jdGlvbiBnZXRDbGllbnRIZWlnaHQoZWwpIHtcbiAgcmV0dXJuIGdldFBvc2l0aW9uU2l6ZShlbCwgJ2NsaWVudEhlaWdodCcpO1xufTtcblxudmFyIHNjb3BlID0gJ0VsSW5maW5pdGVTY3JvbGwnO1xudmFyIGF0dHJpYnV0ZXMgPSB7XG4gIGRlbGF5OiB7XG4gICAgdHlwZTogTnVtYmVyLFxuICAgIGRlZmF1bHQ6IDIwMFxuICB9LFxuICBkaXN0YW5jZToge1xuICAgIHR5cGU6IE51bWJlcixcbiAgICBkZWZhdWx0OiAwXG4gIH0sXG4gIGRpc2FibGVkOiB7XG4gICAgdHlwZTogQm9vbGVhbixcbiAgICBkZWZhdWx0OiBmYWxzZVxuICB9LFxuICBpbW1lZGlhdGU6IHtcbiAgICB0eXBlOiBCb29sZWFuLFxuICAgIGRlZmF1bHQ6IHRydWVcbiAgfVxufTtcblxudmFyIG1haW5fZ2V0U2Nyb2xsT3B0aW9ucyA9IGZ1bmN0aW9uIGdldFNjcm9sbE9wdGlvbnMoZWwsIHZtKSB7XG4gIGlmICghT2JqZWN0KHR5cGVzX1tcImlzSHRtbEVsZW1lbnRcIl0pKGVsKSkgcmV0dXJuIHt9O1xuXG4gIHJldHVybiBlbnRyaWVzKGF0dHJpYnV0ZXMpLnJlZHVjZShmdW5jdGlvbiAobWFwLCBfcmVmKSB7XG4gICAgdmFyIGtleSA9IF9yZWZbMF0sXG4gICAgICAgIG9wdGlvbiA9IF9yZWZbMV07XG4gICAgdmFyIHR5cGUgPSBvcHRpb24udHlwZSxcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gb3B0aW9uLmRlZmF1bHQ7XG5cbiAgICB2YXIgdmFsdWUgPSBlbC5nZXRBdHRyaWJ1dGUoJ2luZmluaXRlLXNjcm9sbC0nICsga2V5KTtcbiAgICB2YWx1ZSA9IE9iamVjdCh0eXBlc19bXCJpc1VuZGVmaW5lZFwiXSkodm1bdmFsdWVdKSA/IHZhbHVlIDogdm1bdmFsdWVdO1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBOdW1iZXI6XG4gICAgICAgIHZhbHVlID0gTnVtYmVyKHZhbHVlKTtcbiAgICAgICAgdmFsdWUgPSBOdW1iZXIuaXNOYU4odmFsdWUpID8gZGVmYXVsdFZhbHVlIDogdmFsdWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBCb29sZWFuOlxuICAgICAgICB2YWx1ZSA9IE9iamVjdCh0eXBlc19bXCJpc0RlZmluZWRcIl0pKHZhbHVlKSA/IHZhbHVlID09PSAnZmFsc2UnID8gZmFsc2UgOiBCb29sZWFuKHZhbHVlKSA6IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB2YWx1ZSA9IHR5cGUodmFsdWUpO1xuICAgIH1cbiAgICBtYXBba2V5XSA9IHZhbHVlO1xuICAgIHJldHVybiBtYXA7XG4gIH0sIHt9KTtcbn07XG5cbnZhciBnZXRFbGVtZW50VG9wID0gZnVuY3Rpb24gZ2V0RWxlbWVudFRvcChlbCkge1xuICByZXR1cm4gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO1xufTtcblxudmFyIG1haW5faGFuZGxlU2Nyb2xsID0gZnVuY3Rpb24gaGFuZGxlU2Nyb2xsKGNiKSB7XG4gIHZhciBfc2NvcGUgPSB0aGlzW3Njb3BlXSxcbiAgICAgIGVsID0gX3Njb3BlLmVsLFxuICAgICAgdm0gPSBfc2NvcGUudm0sXG4gICAgICBjb250YWluZXIgPSBfc2NvcGUuY29udGFpbmVyLFxuICAgICAgb2JzZXJ2ZXIgPSBfc2NvcGUub2JzZXJ2ZXI7XG5cbiAgdmFyIF9nZXRTY3JvbGxPcHRpb25zID0gbWFpbl9nZXRTY3JvbGxPcHRpb25zKGVsLCB2bSksXG4gICAgICBkaXN0YW5jZSA9IF9nZXRTY3JvbGxPcHRpb25zLmRpc3RhbmNlLFxuICAgICAgZGlzYWJsZWQgPSBfZ2V0U2Nyb2xsT3B0aW9ucy5kaXNhYmxlZDtcblxuICBpZiAoZGlzYWJsZWQpIHJldHVybjtcblxuICB2YXIgY29udGFpbmVySW5mbyA9IGNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgaWYgKCFjb250YWluZXJJbmZvLndpZHRoICYmICFjb250YWluZXJJbmZvLmhlaWdodCkgcmV0dXJuO1xuXG4gIHZhciBzaG91bGRUcmlnZ2VyID0gZmFsc2U7XG5cbiAgaWYgKGNvbnRhaW5lciA9PT0gZWwpIHtcbiAgICAvLyBiZSBhd2FyZSBvZiBkaWZmZXJlbmNlIGJldHdlZW4gY2xpZW50SGVpZ2h0ICYgb2Zmc2V0SGVpZ2h0ICYgd2luZG93LmdldENvbXB1dGVkU3R5bGUoKS5oZWlnaHRcbiAgICB2YXIgc2Nyb2xsQm90dG9tID0gY29udGFpbmVyLnNjcm9sbFRvcCArIGdldENsaWVudEhlaWdodChjb250YWluZXIpO1xuICAgIHNob3VsZFRyaWdnZXIgPSBjb250YWluZXIuc2Nyb2xsSGVpZ2h0IC0gc2Nyb2xsQm90dG9tIDw9IGRpc3RhbmNlO1xuICB9IGVsc2Uge1xuICAgIHZhciBoZWlnaHRCZWxvd1RvcCA9IGdldE9mZnNldEhlaWdodChlbCkgKyBnZXRFbGVtZW50VG9wKGVsKSAtIGdldEVsZW1lbnRUb3AoY29udGFpbmVyKTtcbiAgICB2YXIgb2Zmc2V0SGVpZ2h0ID0gZ2V0T2Zmc2V0SGVpZ2h0KGNvbnRhaW5lcik7XG4gICAgdmFyIGJvcmRlckJvdHRvbSA9IE51bWJlci5wYXJzZUZsb2F0KGdldFN0eWxlQ29tcHV0ZWRQcm9wZXJ0eShjb250YWluZXIsICdib3JkZXJCb3R0b21XaWR0aCcpKTtcbiAgICBzaG91bGRUcmlnZ2VyID0gaGVpZ2h0QmVsb3dUb3AgLSBvZmZzZXRIZWlnaHQgKyBib3JkZXJCb3R0b20gPD0gZGlzdGFuY2U7XG4gIH1cblxuICBpZiAoc2hvdWxkVHJpZ2dlciAmJiBPYmplY3QodHlwZXNfW1wiaXNGdW5jdGlvblwiXSkoY2IpKSB7XG4gICAgY2IuY2FsbCh2bSk7XG4gIH0gZWxzZSBpZiAob2JzZXJ2ZXIpIHtcbiAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgdGhpc1tzY29wZV0ub2JzZXJ2ZXIgPSBudWxsO1xuICB9XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBpbmZpbml0ZV9zY3JvbGxfc3JjX21haW4gPSAoe1xuICBuYW1lOiAnSW5maW5pdGVTY3JvbGwnLFxuICBpbnNlcnRlZDogZnVuY3Rpb24gaW5zZXJ0ZWQoZWwsIGJpbmRpbmcsIHZub2RlKSB7XG4gICAgdmFyIGNiID0gYmluZGluZy52YWx1ZTtcblxuICAgIHZhciB2bSA9IHZub2RlLmNvbnRleHQ7XG4gICAgLy8gb25seSBpbmNsdWRlIHZlcnRpY2FsIHNjcm9sbFxuICAgIHZhciBjb250YWluZXIgPSBPYmplY3QoZG9tX1tcImdldFNjcm9sbENvbnRhaW5lclwiXSkoZWwsIHRydWUpO1xuXG4gICAgdmFyIF9nZXRTY3JvbGxPcHRpb25zMiA9IG1haW5fZ2V0U2Nyb2xsT3B0aW9ucyhlbCwgdm0pLFxuICAgICAgICBkZWxheSA9IF9nZXRTY3JvbGxPcHRpb25zMi5kZWxheSxcbiAgICAgICAgaW1tZWRpYXRlID0gX2dldFNjcm9sbE9wdGlvbnMyLmltbWVkaWF0ZTtcblxuICAgIHZhciBvblNjcm9sbCA9IGRlYm91bmNlX2RlZmF1bHQoKShkZWxheSwgbWFpbl9oYW5kbGVTY3JvbGwuYmluZChlbCwgY2IpKTtcblxuICAgIGVsW3Njb3BlXSA9IHsgZWw6IGVsLCB2bTogdm0sIGNvbnRhaW5lcjogY29udGFpbmVyLCBvblNjcm9sbDogb25TY3JvbGwgfTtcblxuICAgIGlmIChjb250YWluZXIpIHtcbiAgICAgIGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBvblNjcm9sbCk7XG5cbiAgICAgIGlmIChpbW1lZGlhdGUpIHtcbiAgICAgICAgdmFyIG9ic2VydmVyID0gZWxbc2NvcGVdLm9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIob25TY3JvbGwpO1xuICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGNvbnRhaW5lciwgeyBjaGlsZExpc3Q6IHRydWUsIHN1YnRyZWU6IHRydWUgfSk7XG4gICAgICAgIG9uU2Nyb2xsKCk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICB1bmJpbmQ6IGZ1bmN0aW9uIHVuYmluZChlbCkge1xuICAgIHZhciBfZWwkc2NvcGUgPSBlbFtzY29wZV0sXG4gICAgICAgIGNvbnRhaW5lciA9IF9lbCRzY29wZS5jb250YWluZXIsXG4gICAgICAgIG9uU2Nyb2xsID0gX2VsJHNjb3BlLm9uU2Nyb2xsO1xuXG4gICAgaWYgKGNvbnRhaW5lcikge1xuICAgICAgY29udGFpbmVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIG9uU2Nyb2xsKTtcbiAgICB9XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9pbmZpbml0ZS1zY3JvbGwvaW5kZXguanNcblxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuaW5maW5pdGVfc2Nyb2xsX3NyY19tYWluLmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG4gIFZ1ZS5kaXJlY3RpdmUoaW5maW5pdGVfc2Nyb2xsX3NyY19tYWluLm5hbWUsIGluZmluaXRlX3Njcm9sbF9zcmNfbWFpbik7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBpbmZpbml0ZV9zY3JvbGwgPSAoaW5maW5pdGVfc2Nyb2xsX3NyY19tYWluKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvcGFnZS1oZWFkZXIvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTUwNzA5NTRjJlxudmFyIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF81MDcwOTU0Y19yZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJlbC1wYWdlLWhlYWRlclwiIH0sIFtcbiAgICBfYyhcbiAgICAgIFwiZGl2XCIsXG4gICAgICB7XG4gICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXBhZ2UtaGVhZGVyX19sZWZ0XCIsXG4gICAgICAgIG9uOiB7XG4gICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgX3ZtLiRlbWl0KFwiYmFja1wiKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFtcbiAgICAgICAgX2MoXCJpXCIsIHsgc3RhdGljQ2xhc3M6IFwiZWwtaWNvbi1iYWNrXCIgfSksXG4gICAgICAgIF9jKFxuICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJlbC1wYWdlLWhlYWRlcl9fdGl0bGVcIiB9LFxuICAgICAgICAgIFtfdm0uX3QoXCJ0aXRsZVwiLCBbX3ZtLl92KF92bS5fcyhfdm0udGl0bGUpKV0pXSxcbiAgICAgICAgICAyXG4gICAgICAgIClcbiAgICAgIF1cbiAgICApLFxuICAgIF9jKFxuICAgICAgXCJkaXZcIixcbiAgICAgIHsgc3RhdGljQ2xhc3M6IFwiZWwtcGFnZS1oZWFkZXJfX2NvbnRlbnRcIiB9LFxuICAgICAgW192bS5fdChcImNvbnRlbnRcIiwgW192bS5fdihfdm0uX3MoX3ZtLmNvbnRlbnQpKV0pXSxcbiAgICAgIDJcbiAgICApXG4gIF0pXG59XG52YXIgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzUwNzA5NTRjX3N0YXRpY1JlbmRlckZucyA9IFtdXG5tYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfNTA3MDk1NGNfcmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9wYWdlLWhlYWRlci9zcmMvbWFpbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NTA3MDk1NGMmXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3BhZ2UtaGVhZGVyL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhZ2VfaGVhZGVyX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbmFtZTogJ0VsUGFnZUhlYWRlcicsXG5cbiAgcHJvcHM6IHtcbiAgICB0aXRsZToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QobGliX2xvY2FsZV9bXCJ0XCJdKSgnZWwucGFnZUhlYWRlci50aXRsZScpO1xuICAgICAgfVxuICAgIH0sXG4gICAgY29udGVudDogU3RyaW5nXG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9wYWdlLWhlYWRlci9zcmMvbWFpbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcGFja2FnZXNfcGFnZV9oZWFkZXJfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAocGFnZV9oZWFkZXJfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvcGFnZS1oZWFkZXIvc3JjL21haW4udnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgcGFnZV9oZWFkZXJfc3JjX21haW5fY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBwYWNrYWdlc19wYWdlX2hlYWRlcl9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzUwNzA5NTRjX3JlbmRlcixcbiAgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzUwNzA5NTRjX3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgcGFnZV9oZWFkZXJfc3JjX21haW5fYXBpOyB9XG5wYWdlX2hlYWRlcl9zcmNfbWFpbl9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL3BhZ2UtaGVhZGVyL3NyYy9tYWluLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWdlX2hlYWRlcl9zcmNfbWFpbiA9IChwYWdlX2hlYWRlcl9zcmNfbWFpbl9jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3BhZ2UtaGVhZGVyL2luZGV4LmpzXG5cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbnBhZ2VfaGVhZGVyX3NyY19tYWluLmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG4gIFZ1ZS5jb21wb25lbnQocGFnZV9oZWFkZXJfc3JjX21haW4ubmFtZSwgcGFnZV9oZWFkZXJfc3JjX21haW4pO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcGFnZV9oZWFkZXIgPSAocGFnZV9oZWFkZXJfc3JjX21haW4pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9jYXNjYWRlci1wYW5lbC9zcmMvY2FzY2FkZXItcGFuZWwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTM0OTMyMzQ2JlxudmFyIGNhc2NhZGVyX3BhbmVsdnVlX3R5cGVfdGVtcGxhdGVfaWRfMzQ5MzIzNDZfcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAge1xuICAgICAgY2xhc3M6IFtcImVsLWNhc2NhZGVyLXBhbmVsXCIsIF92bS5ib3JkZXIgJiYgXCJpcy1ib3JkZXJlZFwiXSxcbiAgICAgIG9uOiB7IGtleWRvd246IF92bS5oYW5kbGVLZXlEb3duIH1cbiAgICB9LFxuICAgIF92bS5fbChfdm0ubWVudXMsIGZ1bmN0aW9uKG1lbnUsIGluZGV4KSB7XG4gICAgICByZXR1cm4gX2MoXCJjYXNjYWRlci1tZW51XCIsIHtcbiAgICAgICAga2V5OiBpbmRleCxcbiAgICAgICAgcmVmOiBcIm1lbnVcIixcbiAgICAgICAgcmVmSW5Gb3I6IHRydWUsXG4gICAgICAgIGF0dHJzOiB7IGluZGV4OiBpbmRleCwgbm9kZXM6IG1lbnUgfVxuICAgICAgfSlcbiAgICB9KSxcbiAgICAxXG4gIClcbn1cbnZhciBjYXNjYWRlcl9wYW5lbHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzM0OTMyMzQ2X3N0YXRpY1JlbmRlckZucyA9IFtdXG5jYXNjYWRlcl9wYW5lbHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzM0OTMyMzQ2X3JlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY2FzY2FkZXItcGFuZWwvc3JjL2Nhc2NhZGVyLXBhbmVsLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zNDkzMjM0NiZcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcImVsZW1lbnQtdWkvbGliL3JhZGlvXCJcbnZhciByYWRpb18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ0KTtcbnZhciByYWRpb19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihyYWRpb18pO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9jYXNjYWRlci1wYW5lbC9zcmMvY2FzY2FkZXItbm9kZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG5cblxuXG5cblxuXG52YXIgc3RvcFByb3BhZ2F0aW9uID0gZnVuY3Rpb24gc3RvcFByb3BhZ2F0aW9uKGUpIHtcbiAgcmV0dXJuIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBjYXNjYWRlcl9ub2RldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgaW5qZWN0OiBbJ3BhbmVsJ10sXG5cbiAgY29tcG9uZW50czoge1xuICAgIEVsQ2hlY2tib3g6IGNoZWNrYm94X2RlZmF1bHQuYSxcbiAgICBFbFJhZGlvOiByYWRpb19kZWZhdWx0LmFcbiAgfSxcblxuICBwcm9wczoge1xuICAgIG5vZGU6IHtcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICBub2RlSWQ6IFN0cmluZ1xuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgY29uZmlnOiBmdW5jdGlvbiBjb25maWcoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wYW5lbC5jb25maWc7XG4gICAgfSxcbiAgICBpc0xlYWY6IGZ1bmN0aW9uIGlzTGVhZigpIHtcbiAgICAgIHJldHVybiB0aGlzLm5vZGUuaXNMZWFmO1xuICAgIH0sXG4gICAgaXNEaXNhYmxlZDogZnVuY3Rpb24gaXNEaXNhYmxlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLm5vZGUuaXNEaXNhYmxlZDtcbiAgICB9LFxuICAgIGNoZWNrZWRWYWx1ZTogZnVuY3Rpb24gY2hlY2tlZFZhbHVlKCkge1xuICAgICAgcmV0dXJuIHRoaXMucGFuZWwuY2hlY2tlZFZhbHVlO1xuICAgIH0sXG4gICAgaXNDaGVja2VkOiBmdW5jdGlvbiBpc0NoZWNrZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5ub2RlLmlzU2FtZU5vZGUodGhpcy5jaGVja2VkVmFsdWUpO1xuICAgIH0sXG4gICAgaW5BY3RpdmVQYXRoOiBmdW5jdGlvbiBpbkFjdGl2ZVBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc0luUGF0aCh0aGlzLnBhbmVsLmFjdGl2ZVBhdGgpO1xuICAgIH0sXG4gICAgaW5DaGVja2VkUGF0aDogZnVuY3Rpb24gaW5DaGVja2VkUGF0aCgpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIGlmICghdGhpcy5jb25maWcuY2hlY2tTdHJpY3RseSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICByZXR1cm4gdGhpcy5wYW5lbC5jaGVja2VkTm9kZVBhdGhzLnNvbWUoZnVuY3Rpb24gKGNoZWNrZWRQYXRoKSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5pc0luUGF0aChjaGVja2VkUGF0aCk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIHZhbHVlOiBmdW5jdGlvbiB2YWx1ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm5vZGUuZ2V0VmFsdWVCeU9wdGlvbigpO1xuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgaGFuZGxlRXhwYW5kOiBmdW5jdGlvbiBoYW5kbGVFeHBhbmQoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgdmFyIHBhbmVsID0gdGhpcy5wYW5lbCxcbiAgICAgICAgICBub2RlID0gdGhpcy5ub2RlLFxuICAgICAgICAgIGlzRGlzYWJsZWQgPSB0aGlzLmlzRGlzYWJsZWQsXG4gICAgICAgICAgY29uZmlnID0gdGhpcy5jb25maWc7XG4gICAgICB2YXIgbXVsdGlwbGUgPSBjb25maWcubXVsdGlwbGUsXG4gICAgICAgICAgY2hlY2tTdHJpY3RseSA9IGNvbmZpZy5jaGVja1N0cmljdGx5O1xuXG5cbiAgICAgIGlmICghY2hlY2tTdHJpY3RseSAmJiBpc0Rpc2FibGVkIHx8IG5vZGUubG9hZGluZykgcmV0dXJuO1xuXG4gICAgICBpZiAoY29uZmlnLmxhenkgJiYgIW5vZGUubG9hZGVkKSB7XG4gICAgICAgIHBhbmVsLmxhenlMb2FkKG5vZGUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAvLyBkbyBub3QgdXNlIGNhY2hlZCBsZWFmIHZhbHVlIGhlcmUsIGludm9rZSB0aGlzLmlzTGVhZiB0byBnZXQgbmV3IHZhbHVlLlxuICAgICAgICAgIHZhciBpc0xlYWYgPSBfdGhpczIuaXNMZWFmO1xuXG5cbiAgICAgICAgICBpZiAoIWlzTGVhZikgX3RoaXMyLmhhbmRsZUV4cGFuZCgpO1xuICAgICAgICAgIGlmIChtdWx0aXBsZSkge1xuICAgICAgICAgICAgLy8gaWYgbGVhZiBzeW5jIGNoZWNrZWQgc3RhdGUsIGVsc2UgY2xlYXIgY2hlY2tlZCBzdGF0ZVxuICAgICAgICAgICAgdmFyIGNoZWNrZWQgPSBpc0xlYWYgPyBub2RlLmNoZWNrZWQgOiBmYWxzZTtcbiAgICAgICAgICAgIF90aGlzMi5oYW5kbGVNdWx0aUNoZWNrQ2hhbmdlKGNoZWNrZWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYW5lbC5oYW5kbGVFeHBhbmQobm9kZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBoYW5kbGVDaGVja0NoYW5nZTogZnVuY3Rpb24gaGFuZGxlQ2hlY2tDaGFuZ2UoKSB7XG4gICAgICB2YXIgcGFuZWwgPSB0aGlzLnBhbmVsLFxuICAgICAgICAgIHZhbHVlID0gdGhpcy52YWx1ZSxcbiAgICAgICAgICBub2RlID0gdGhpcy5ub2RlO1xuXG4gICAgICBwYW5lbC5oYW5kbGVDaGVja0NoYW5nZSh2YWx1ZSk7XG4gICAgICBwYW5lbC5oYW5kbGVFeHBhbmQobm9kZSk7XG4gICAgfSxcbiAgICBoYW5kbGVNdWx0aUNoZWNrQ2hhbmdlOiBmdW5jdGlvbiBoYW5kbGVNdWx0aUNoZWNrQ2hhbmdlKGNoZWNrZWQpIHtcbiAgICAgIHRoaXMubm9kZS5kb0NoZWNrKGNoZWNrZWQpO1xuICAgICAgdGhpcy5wYW5lbC5jYWxjdWxhdGVNdWx0aUNoZWNrZWRWYWx1ZSgpO1xuICAgIH0sXG4gICAgaXNJblBhdGg6IGZ1bmN0aW9uIGlzSW5QYXRoKHBhdGhOb2Rlcykge1xuICAgICAgdmFyIG5vZGUgPSB0aGlzLm5vZGU7XG5cbiAgICAgIHZhciBzZWxlY3RlZFBhdGhOb2RlID0gcGF0aE5vZGVzW25vZGUubGV2ZWwgLSAxXSB8fCB7fTtcbiAgICAgIHJldHVybiBzZWxlY3RlZFBhdGhOb2RlLnVpZCA9PT0gbm9kZS51aWQ7XG4gICAgfSxcbiAgICByZW5kZXJQcmVmaXg6IGZ1bmN0aW9uIHJlbmRlclByZWZpeChoKSB7XG4gICAgICB2YXIgaXNMZWFmID0gdGhpcy5pc0xlYWYsXG4gICAgICAgICAgaXNDaGVja2VkID0gdGhpcy5pc0NoZWNrZWQsXG4gICAgICAgICAgY29uZmlnID0gdGhpcy5jb25maWc7XG4gICAgICB2YXIgY2hlY2tTdHJpY3RseSA9IGNvbmZpZy5jaGVja1N0cmljdGx5LFxuICAgICAgICAgIG11bHRpcGxlID0gY29uZmlnLm11bHRpcGxlO1xuXG5cbiAgICAgIGlmIChtdWx0aXBsZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJDaGVja2JveChoKTtcbiAgICAgIH0gZWxzZSBpZiAoY2hlY2tTdHJpY3RseSkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJSYWRpbyhoKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNMZWFmICYmIGlzQ2hlY2tlZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJDaGVja0ljb24oaCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0sXG4gICAgcmVuZGVyUG9zdGZpeDogZnVuY3Rpb24gcmVuZGVyUG9zdGZpeChoKSB7XG4gICAgICB2YXIgbm9kZSA9IHRoaXMubm9kZSxcbiAgICAgICAgICBpc0xlYWYgPSB0aGlzLmlzTGVhZjtcblxuXG4gICAgICBpZiAobm9kZS5sb2FkaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbmRlckxvYWRpbmdJY29uKGgpO1xuICAgICAgfSBlbHNlIGlmICghaXNMZWFmKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbmRlckV4cGFuZEljb24oaCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0sXG4gICAgcmVuZGVyQ2hlY2tib3g6IGZ1bmN0aW9uIHJlbmRlckNoZWNrYm94KGgpIHtcbiAgICAgIHZhciBub2RlID0gdGhpcy5ub2RlLFxuICAgICAgICAgIGNvbmZpZyA9IHRoaXMuY29uZmlnLFxuICAgICAgICAgIGlzRGlzYWJsZWQgPSB0aGlzLmlzRGlzYWJsZWQ7XG5cbiAgICAgIHZhciBldmVudHMgPSB7XG4gICAgICAgIG9uOiB7IGNoYW5nZTogdGhpcy5oYW5kbGVNdWx0aUNoZWNrQ2hhbmdlIH0sXG4gICAgICAgIG5hdGl2ZU9uOiB7fVxuICAgICAgfTtcblxuICAgICAgaWYgKGNvbmZpZy5jaGVja1N0cmljdGx5KSB7XG4gICAgICAgIC8vIHdoZW4gZXZlcnkgbm9kZSBpcyBzZWxlY3RhYmxlLCBjbGljayBldmVudCBzaG91bGQgbm90IHRyaWdnZXIgZXhwYW5kIGV2ZW50LlxuICAgICAgICBldmVudHMubmF0aXZlT24uY2xpY2sgPSBzdG9wUHJvcGFnYXRpb247XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBoKCdlbC1jaGVja2JveCcsIGV4dGVybmFsX2JhYmVsX2hlbHBlcl92dWVfanN4X21lcmdlX3Byb3BzX2RlZmF1bHQoKShbe1xuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIHZhbHVlOiBub2RlLmNoZWNrZWQsXG4gICAgICAgICAgaW5kZXRlcm1pbmF0ZTogbm9kZS5pbmRldGVybWluYXRlLFxuICAgICAgICAgIGRpc2FibGVkOiBpc0Rpc2FibGVkXG4gICAgICAgIH1cbiAgICAgIH0sIGV2ZW50c10pKTtcbiAgICB9LFxuICAgIHJlbmRlclJhZGlvOiBmdW5jdGlvbiByZW5kZXJSYWRpbyhoKSB7XG4gICAgICB2YXIgY2hlY2tlZFZhbHVlID0gdGhpcy5jaGVja2VkVmFsdWUsXG4gICAgICAgICAgdmFsdWUgPSB0aGlzLnZhbHVlLFxuICAgICAgICAgIGlzRGlzYWJsZWQgPSB0aGlzLmlzRGlzYWJsZWQ7XG5cbiAgICAgIC8vIHRvIGtlZXAgc2FtZSByZWZlcmVuY2UgaWYgdmFsdWUgY2F1c2UgcmFkaW8ncyBjaGVja2VkIHN0YXRlIGlzIGNhbGN1bGF0ZWQgYnkgcmVmZXJlbmNlIGNvbXBhcmlzaW9uO1xuXG4gICAgICBpZiAoT2JqZWN0KHV0aWxfW1wiaXNFcXVhbFwiXSkodmFsdWUsIGNoZWNrZWRWYWx1ZSkpIHtcbiAgICAgICAgdmFsdWUgPSBjaGVja2VkVmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBoKFxuICAgICAgICAnZWwtcmFkaW8nLFxuICAgICAgICB7XG4gICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgIHZhbHVlOiBjaGVja2VkVmFsdWUsXG4gICAgICAgICAgICBsYWJlbDogdmFsdWUsXG4gICAgICAgICAgICBkaXNhYmxlZDogaXNEaXNhYmxlZFxuICAgICAgICAgIH0sXG4gICAgICAgICAgb246IHtcbiAgICAgICAgICAgICdjaGFuZ2UnOiB0aGlzLmhhbmRsZUNoZWNrQ2hhbmdlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBuYXRpdmVPbjoge1xuICAgICAgICAgICAgJ2NsaWNrJzogc3RvcFByb3BhZ2F0aW9uXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBbaCgnc3BhbicpXVxuICAgICAgKTtcbiAgICB9LFxuICAgIHJlbmRlckNoZWNrSWNvbjogZnVuY3Rpb24gcmVuZGVyQ2hlY2tJY29uKGgpIHtcbiAgICAgIHJldHVybiBoKCdpJywgeyAnY2xhc3MnOiAnZWwtaWNvbi1jaGVjayBlbC1jYXNjYWRlci1ub2RlX19wcmVmaXgnIH0pO1xuICAgIH0sXG4gICAgcmVuZGVyTG9hZGluZ0ljb246IGZ1bmN0aW9uIHJlbmRlckxvYWRpbmdJY29uKGgpIHtcbiAgICAgIHJldHVybiBoKCdpJywgeyAnY2xhc3MnOiAnZWwtaWNvbi1sb2FkaW5nIGVsLWNhc2NhZGVyLW5vZGVfX3Bvc3RmaXgnIH0pO1xuICAgIH0sXG4gICAgcmVuZGVyRXhwYW5kSWNvbjogZnVuY3Rpb24gcmVuZGVyRXhwYW5kSWNvbihoKSB7XG4gICAgICByZXR1cm4gaCgnaScsIHsgJ2NsYXNzJzogJ2VsLWljb24tYXJyb3ctcmlnaHQgZWwtY2FzY2FkZXItbm9kZV9fcG9zdGZpeCcgfSk7XG4gICAgfSxcbiAgICByZW5kZXJDb250ZW50OiBmdW5jdGlvbiByZW5kZXJDb250ZW50KGgpIHtcbiAgICAgIHZhciBwYW5lbCA9IHRoaXMucGFuZWwsXG4gICAgICAgICAgbm9kZSA9IHRoaXMubm9kZTtcblxuICAgICAgdmFyIHJlbmRlciA9IHBhbmVsLnJlbmRlckxhYmVsRm47XG4gICAgICB2YXIgdm5vZGUgPSByZW5kZXIgPyByZW5kZXIoeyBub2RlOiBub2RlLCBkYXRhOiBub2RlLmRhdGEgfSkgOiBudWxsO1xuXG4gICAgICByZXR1cm4gaChcbiAgICAgICAgJ3NwYW4nLFxuICAgICAgICB7ICdjbGFzcyc6ICdlbC1jYXNjYWRlci1ub2RlX19sYWJlbCcgfSxcbiAgICAgICAgW3Zub2RlIHx8IG5vZGUubGFiZWxdXG4gICAgICApO1xuICAgIH1cbiAgfSxcblxuICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcihoKSB7XG4gICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICB2YXIgaW5BY3RpdmVQYXRoID0gdGhpcy5pbkFjdGl2ZVBhdGgsXG4gICAgICAgIGluQ2hlY2tlZFBhdGggPSB0aGlzLmluQ2hlY2tlZFBhdGgsXG4gICAgICAgIGlzQ2hlY2tlZCA9IHRoaXMuaXNDaGVja2VkLFxuICAgICAgICBpc0xlYWYgPSB0aGlzLmlzTGVhZixcbiAgICAgICAgaXNEaXNhYmxlZCA9IHRoaXMuaXNEaXNhYmxlZCxcbiAgICAgICAgY29uZmlnID0gdGhpcy5jb25maWcsXG4gICAgICAgIG5vZGVJZCA9IHRoaXMubm9kZUlkO1xuICAgIHZhciBleHBhbmRUcmlnZ2VyID0gY29uZmlnLmV4cGFuZFRyaWdnZXIsXG4gICAgICAgIGNoZWNrU3RyaWN0bHkgPSBjb25maWcuY2hlY2tTdHJpY3RseSxcbiAgICAgICAgbXVsdGlwbGUgPSBjb25maWcubXVsdGlwbGU7XG5cbiAgICB2YXIgZGlzYWJsZWQgPSAhY2hlY2tTdHJpY3RseSAmJiBpc0Rpc2FibGVkO1xuICAgIHZhciBldmVudHMgPSB7IG9uOiB7fSB9O1xuXG4gICAgaWYgKGV4cGFuZFRyaWdnZXIgPT09ICdjbGljaycpIHtcbiAgICAgIGV2ZW50cy5vbi5jbGljayA9IHRoaXMuaGFuZGxlRXhwYW5kO1xuICAgIH0gZWxzZSB7XG4gICAgICBldmVudHMub24ubW91c2VlbnRlciA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIF90aGlzMy5oYW5kbGVFeHBhbmQoKTtcbiAgICAgICAgX3RoaXMzLiRlbWl0KCdleHBhbmQnLCBlKTtcbiAgICAgIH07XG4gICAgICBldmVudHMub24uZm9jdXMgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICBfdGhpczMuaGFuZGxlRXhwYW5kKCk7XG4gICAgICAgIF90aGlzMy4kZW1pdCgnZXhwYW5kJywgZSk7XG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAoaXNMZWFmICYmICFpc0Rpc2FibGVkICYmICFjaGVja1N0cmljdGx5ICYmICFtdWx0aXBsZSkge1xuICAgICAgZXZlbnRzLm9uLmNsaWNrID0gdGhpcy5oYW5kbGVDaGVja0NoYW5nZTtcbiAgICB9XG5cbiAgICByZXR1cm4gaChcbiAgICAgICdsaScsXG4gICAgICBleHRlcm5hbF9iYWJlbF9oZWxwZXJfdnVlX2pzeF9tZXJnZV9wcm9wc19kZWZhdWx0KCkoW3tcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICByb2xlOiAnbWVudWl0ZW0nLFxuICAgICAgICAgIGlkOiBub2RlSWQsXG4gICAgICAgICAgJ2FyaWEtZXhwYW5kZWQnOiBpbkFjdGl2ZVBhdGgsXG4gICAgICAgICAgdGFiaW5kZXg6IGRpc2FibGVkID8gbnVsbCA6IC0xXG4gICAgICAgIH0sXG4gICAgICAgICdjbGFzcyc6IHtcbiAgICAgICAgICAnZWwtY2FzY2FkZXItbm9kZSc6IHRydWUsXG4gICAgICAgICAgJ2lzLXNlbGVjdGFibGUnOiBjaGVja1N0cmljdGx5LFxuICAgICAgICAgICdpbi1hY3RpdmUtcGF0aCc6IGluQWN0aXZlUGF0aCxcbiAgICAgICAgICAnaW4tY2hlY2tlZC1wYXRoJzogaW5DaGVja2VkUGF0aCxcbiAgICAgICAgICAnaXMtYWN0aXZlJzogaXNDaGVja2VkLFxuICAgICAgICAgICdpcy1kaXNhYmxlZCc6IGRpc2FibGVkXG4gICAgICAgIH1cbiAgICAgIH0sIGV2ZW50c10pLFxuICAgICAgW3RoaXMucmVuZGVyUHJlZml4KGgpLCB0aGlzLnJlbmRlckNvbnRlbnQoaCksIHRoaXMucmVuZGVyUG9zdGZpeChoKV1cbiAgICApO1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY2FzY2FkZXItcGFuZWwvc3JjL2Nhc2NhZGVyLW5vZGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY19jYXNjYWRlcl9ub2RldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKGNhc2NhZGVyX25vZGV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY2FzY2FkZXItcGFuZWwvc3JjL2Nhc2NhZGVyLW5vZGUudnVlXG52YXIgY2FzY2FkZXJfbm9kZV9yZW5kZXIsIGNhc2NhZGVyX25vZGVfc3RhdGljUmVuZGVyRm5zXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGNhc2NhZGVyX25vZGVfY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBzcmNfY2FzY2FkZXJfbm9kZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgY2FzY2FkZXJfbm9kZV9yZW5kZXIsXG4gIGNhc2NhZGVyX25vZGVfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBjYXNjYWRlcl9ub2RlX2FwaTsgfVxuY2FzY2FkZXJfbm9kZV9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL2Nhc2NhZGVyLXBhbmVsL3NyYy9jYXNjYWRlci1ub2RlLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBjYXNjYWRlcl9ub2RlID0gKGNhc2NhZGVyX25vZGVfY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvY2FzY2FkZXItcGFuZWwvc3JjL2Nhc2NhZGVyLW1lbnUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuXG5cblxuXG5cblxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBjYXNjYWRlcl9tZW51dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbmFtZTogJ0VsQ2FzY2FkZXJNZW51JyxcblxuICBtaXhpbnM6IFtsb2NhbGVfZGVmYXVsdC5hXSxcblxuICBpbmplY3Q6IFsncGFuZWwnXSxcblxuICBjb21wb25lbnRzOiB7XG4gICAgRWxTY3JvbGxiYXI6IHNjcm9sbGJhcl9kZWZhdWx0LmEsXG4gICAgQ2FzY2FkZXJOb2RlOiBjYXNjYWRlcl9ub2RlXG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBub2Rlczoge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAgaW5kZXg6IE51bWJlclxuICB9LFxuXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFjdGl2ZU5vZGU6IG51bGwsXG4gICAgICBob3ZlclRpbWVyOiBudWxsLFxuICAgICAgaWQ6IE9iamVjdCh1dGlsX1tcImdlbmVyYXRlSWRcIl0pKClcbiAgICB9O1xuICB9LFxuXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBpc0VtcHR5OiBmdW5jdGlvbiBpc0VtcHR5KCkge1xuICAgICAgcmV0dXJuICF0aGlzLm5vZGVzLmxlbmd0aDtcbiAgICB9LFxuICAgIG1lbnVJZDogZnVuY3Rpb24gbWVudUlkKCkge1xuICAgICAgcmV0dXJuICdjYXNjYWRlci1tZW51LScgKyB0aGlzLmlkICsgJy0nICsgdGhpcy5pbmRleDtcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGhhbmRsZUV4cGFuZDogZnVuY3Rpb24gaGFuZGxlRXhwYW5kKGUpIHtcbiAgICAgIHRoaXMuYWN0aXZlTm9kZSA9IGUudGFyZ2V0O1xuICAgIH0sXG4gICAgaGFuZGxlTW91c2VNb3ZlOiBmdW5jdGlvbiBoYW5kbGVNb3VzZU1vdmUoZSkge1xuICAgICAgdmFyIGFjdGl2ZU5vZGUgPSB0aGlzLmFjdGl2ZU5vZGUsXG4gICAgICAgICAgaG92ZXJUaW1lciA9IHRoaXMuaG92ZXJUaW1lcjtcbiAgICAgIHZhciBob3ZlclpvbmUgPSB0aGlzLiRyZWZzLmhvdmVyWm9uZTtcblxuXG4gICAgICBpZiAoIWFjdGl2ZU5vZGUgfHwgIWhvdmVyWm9uZSkgcmV0dXJuO1xuXG4gICAgICBpZiAoYWN0aXZlTm9kZS5jb250YWlucyhlLnRhcmdldCkpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KGhvdmVyVGltZXIpO1xuXG4gICAgICAgIHZhciBfJGVsJGdldEJvdW5kaW5nQ2xpZW4gPSB0aGlzLiRlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxcbiAgICAgICAgICAgIGxlZnQgPSBfJGVsJGdldEJvdW5kaW5nQ2xpZW4ubGVmdDtcblxuICAgICAgICB2YXIgc3RhcnRYID0gZS5jbGllbnRYIC0gbGVmdDtcbiAgICAgICAgdmFyIF8kZWwgPSB0aGlzLiRlbCxcbiAgICAgICAgICAgIG9mZnNldFdpZHRoID0gXyRlbC5vZmZzZXRXaWR0aCxcbiAgICAgICAgICAgIG9mZnNldEhlaWdodCA9IF8kZWwub2Zmc2V0SGVpZ2h0O1xuXG4gICAgICAgIHZhciB0b3AgPSBhY3RpdmVOb2RlLm9mZnNldFRvcDtcbiAgICAgICAgdmFyIGJvdHRvbSA9IHRvcCArIGFjdGl2ZU5vZGUub2Zmc2V0SGVpZ2h0O1xuXG4gICAgICAgIGhvdmVyWm9uZS5pbm5lckhUTUwgPSAnXFxuICAgICAgICAgIDxwYXRoIHN0eWxlPVwicG9pbnRlci1ldmVudHM6IGF1dG87XCIgZmlsbD1cInRyYW5zcGFyZW50XCIgZD1cIk0nICsgc3RhcnRYICsgJyAnICsgdG9wICsgJyBMJyArIG9mZnNldFdpZHRoICsgJyAwIFYnICsgdG9wICsgJyBaXCIgLz5cXG4gICAgICAgICAgPHBhdGggc3R5bGU9XCJwb2ludGVyLWV2ZW50czogYXV0bztcIiBmaWxsPVwidHJhbnNwYXJlbnRcIiBkPVwiTScgKyBzdGFydFggKyAnICcgKyBib3R0b20gKyAnIEwnICsgb2Zmc2V0V2lkdGggKyAnICcgKyBvZmZzZXRIZWlnaHQgKyAnIFYnICsgYm90dG9tICsgJyBaXCIgLz5cXG4gICAgICAgICc7XG4gICAgICB9IGVsc2UgaWYgKCFob3ZlclRpbWVyKSB7XG4gICAgICAgIHRoaXMuaG92ZXJUaW1lciA9IHNldFRpbWVvdXQodGhpcy5jbGVhckhvdmVyWm9uZSwgdGhpcy5wYW5lbC5jb25maWcuaG92ZXJUaHJlc2hvbGQpO1xuICAgICAgfVxuICAgIH0sXG4gICAgY2xlYXJIb3ZlclpvbmU6IGZ1bmN0aW9uIGNsZWFySG92ZXJab25lKCkge1xuICAgICAgdmFyIGhvdmVyWm9uZSA9IHRoaXMuJHJlZnMuaG92ZXJab25lO1xuXG4gICAgICBpZiAoIWhvdmVyWm9uZSkgcmV0dXJuO1xuICAgICAgaG92ZXJab25lLmlubmVySFRNTCA9ICcnO1xuICAgIH0sXG4gICAgcmVuZGVyRW1wdHlUZXh0OiBmdW5jdGlvbiByZW5kZXJFbXB0eVRleHQoaCkge1xuICAgICAgcmV0dXJuIGgoXG4gICAgICAgICdkaXYnLFxuICAgICAgICB7ICdjbGFzcyc6ICdlbC1jYXNjYWRlci1tZW51X19lbXB0eS10ZXh0JyB9LFxuICAgICAgICBbdGhpcy50KCdlbC5jYXNjYWRlci5ub0RhdGEnKV1cbiAgICAgICk7XG4gICAgfSxcbiAgICByZW5kZXJOb2RlTGlzdDogZnVuY3Rpb24gcmVuZGVyTm9kZUxpc3QoaCkge1xuICAgICAgdmFyIG1lbnVJZCA9IHRoaXMubWVudUlkO1xuICAgICAgdmFyIGlzSG92ZXJNZW51ID0gdGhpcy5wYW5lbC5pc0hvdmVyTWVudTtcblxuICAgICAgdmFyIGV2ZW50cyA9IHsgb246IHt9IH07XG5cbiAgICAgIGlmIChpc0hvdmVyTWVudSkge1xuICAgICAgICBldmVudHMub24uZXhwYW5kID0gdGhpcy5oYW5kbGVFeHBhbmQ7XG4gICAgICB9XG5cbiAgICAgIHZhciBub2RlcyA9IHRoaXMubm9kZXMubWFwKGZ1bmN0aW9uIChub2RlLCBpbmRleCkge1xuICAgICAgICB2YXIgaGFzQ2hpbGRyZW4gPSBub2RlLmhhc0NoaWxkcmVuO1xuXG4gICAgICAgIHJldHVybiBoKCdjYXNjYWRlci1ub2RlJywgZXh0ZXJuYWxfYmFiZWxfaGVscGVyX3Z1ZV9qc3hfbWVyZ2VfcHJvcHNfZGVmYXVsdCgpKFt7XG4gICAgICAgICAga2V5OiBub2RlLnVpZCxcbiAgICAgICAgICBhdHRyczogeyBub2RlOiBub2RlLFxuICAgICAgICAgICAgJ25vZGUtaWQnOiBtZW51SWQgKyAnLScgKyBpbmRleCxcbiAgICAgICAgICAgICdhcmlhLWhhc3BvcHVwJzogaGFzQ2hpbGRyZW4sXG4gICAgICAgICAgICAnYXJpYS1vd25zJzogaGFzQ2hpbGRyZW4gPyBtZW51SWQgOiBudWxsXG4gICAgICAgICAgfVxuICAgICAgICB9LCBldmVudHNdKSk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIFtdLmNvbmNhdChub2RlcywgW2lzSG92ZXJNZW51ID8gaCgnc3ZnJywgeyByZWY6ICdob3ZlclpvbmUnLCAnY2xhc3MnOiAnZWwtY2FzY2FkZXItbWVudV9faG92ZXItem9uZScgfSkgOiBudWxsXSk7XG4gICAgfVxuICB9LFxuXG4gIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKGgpIHtcbiAgICB2YXIgaXNFbXB0eSA9IHRoaXMuaXNFbXB0eSxcbiAgICAgICAgbWVudUlkID0gdGhpcy5tZW51SWQ7XG5cbiAgICB2YXIgZXZlbnRzID0geyBuYXRpdmVPbjoge30gfTtcblxuICAgIC8vIG9wdGltaXplIGhvdmVyIHRvIGV4cGFuZCBleHBlcmllbmNlICgjODAxMClcbiAgICBpZiAodGhpcy5wYW5lbC5pc0hvdmVyTWVudSkge1xuICAgICAgZXZlbnRzLm5hdGl2ZU9uLm1vdXNlbW92ZSA9IHRoaXMuaGFuZGxlTW91c2VNb3ZlO1xuICAgICAgLy8gZXZlbnRzLm5hdGl2ZU9uLm1vdXNlbGVhdmUgPSB0aGlzLmNsZWFySG92ZXJab25lO1xuICAgIH1cblxuICAgIHJldHVybiBoKFxuICAgICAgJ2VsLXNjcm9sbGJhcicsXG4gICAgICBleHRlcm5hbF9iYWJlbF9oZWxwZXJfdnVlX2pzeF9tZXJnZV9wcm9wc19kZWZhdWx0KCkoW3tcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICB0YWc6ICd1bCcsXG4gICAgICAgICAgcm9sZTogJ21lbnUnLFxuICAgICAgICAgIGlkOiBtZW51SWQsXG5cbiAgICAgICAgICAnd3JhcC1jbGFzcyc6ICdlbC1jYXNjYWRlci1tZW51X193cmFwJyxcbiAgICAgICAgICAndmlldy1jbGFzcyc6IHtcbiAgICAgICAgICAgICdlbC1jYXNjYWRlci1tZW51X19saXN0JzogdHJ1ZSxcbiAgICAgICAgICAgICdpcy1lbXB0eSc6IGlzRW1wdHlcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgICdjbGFzcyc6ICdlbC1jYXNjYWRlci1tZW51JyB9LCBldmVudHNdKSxcbiAgICAgIFtpc0VtcHR5ID8gdGhpcy5yZW5kZXJFbXB0eVRleHQoaCkgOiB0aGlzLnJlbmRlck5vZGVMaXN0KGgpXVxuICAgICk7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jYXNjYWRlci1wYW5lbC9zcmMvY2FzY2FkZXItbWVudS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX2Nhc2NhZGVyX21lbnV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoY2FzY2FkZXJfbWVudXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jYXNjYWRlci1wYW5lbC9zcmMvY2FzY2FkZXItbWVudS52dWVcbnZhciBjYXNjYWRlcl9tZW51X3JlbmRlciwgY2FzY2FkZXJfbWVudV9zdGF0aWNSZW5kZXJGbnNcblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgY2FzY2FkZXJfbWVudV9jb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIHNyY19jYXNjYWRlcl9tZW51dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICBjYXNjYWRlcl9tZW51X3JlbmRlcixcbiAgY2FzY2FkZXJfbWVudV9zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGNhc2NhZGVyX21lbnVfYXBpOyB9XG5jYXNjYWRlcl9tZW51X2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvY2FzY2FkZXItcGFuZWwvc3JjL2Nhc2NhZGVyLW1lbnUudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGNhc2NhZGVyX21lbnUgPSAoY2FzY2FkZXJfbWVudV9jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2Nhc2NhZGVyLXBhbmVsL3NyYy9ub2RlLmpzXG52YXIgbm9kZV9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcblxuZnVuY3Rpb24gc3JjX25vZGVfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5cblxuXG52YXIgdWlkID0gMDtcblxudmFyIHNyY19ub2RlX05vZGUgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIE5vZGUoZGF0YSwgY29uZmlnLCBwYXJlbnROb2RlKSB7XG4gICAgc3JjX25vZGVfY2xhc3NDYWxsQ2hlY2sodGhpcywgTm9kZSk7XG5cbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xuICAgIHRoaXMucGFyZW50ID0gcGFyZW50Tm9kZSB8fCBudWxsO1xuICAgIHRoaXMubGV2ZWwgPSAhdGhpcy5wYXJlbnQgPyAxIDogdGhpcy5wYXJlbnQubGV2ZWwgKyAxO1xuICAgIHRoaXMudWlkID0gdWlkKys7XG5cbiAgICB0aGlzLmluaXRTdGF0ZSgpO1xuICAgIHRoaXMuaW5pdENoaWxkcmVuKCk7XG4gIH1cblxuICBOb2RlLnByb3RvdHlwZS5pbml0U3RhdGUgPSBmdW5jdGlvbiBpbml0U3RhdGUoKSB7XG4gICAgdmFyIF9jb25maWcgPSB0aGlzLmNvbmZpZyxcbiAgICAgICAgdmFsdWVLZXkgPSBfY29uZmlnLnZhbHVlLFxuICAgICAgICBsYWJlbEtleSA9IF9jb25maWcubGFiZWw7XG5cblxuICAgIHRoaXMudmFsdWUgPSB0aGlzLmRhdGFbdmFsdWVLZXldO1xuICAgIHRoaXMubGFiZWwgPSB0aGlzLmRhdGFbbGFiZWxLZXldO1xuICAgIHRoaXMucGF0aE5vZGVzID0gdGhpcy5jYWxjdWxhdGVQYXRoTm9kZXMoKTtcbiAgICB0aGlzLnBhdGggPSB0aGlzLnBhdGhOb2Rlcy5tYXAoZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgIHJldHVybiBub2RlLnZhbHVlO1xuICAgIH0pO1xuICAgIHRoaXMucGF0aExhYmVscyA9IHRoaXMucGF0aE5vZGVzLm1hcChmdW5jdGlvbiAobm9kZSkge1xuICAgICAgcmV0dXJuIG5vZGUubGFiZWw7XG4gICAgfSk7XG5cbiAgICAvLyBsYXp5IGxvYWRcbiAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmxvYWRlZCA9IGZhbHNlO1xuICB9O1xuXG4gIE5vZGUucHJvdG90eXBlLmluaXRDaGlsZHJlbiA9IGZ1bmN0aW9uIGluaXRDaGlsZHJlbigpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdmFyIGNvbmZpZyA9IHRoaXMuY29uZmlnO1xuXG4gICAgdmFyIGNoaWxkcmVuS2V5ID0gY29uZmlnLmNoaWxkcmVuO1xuICAgIHZhciBjaGlsZHJlbkRhdGEgPSB0aGlzLmRhdGFbY2hpbGRyZW5LZXldO1xuICAgIHRoaXMuaGFzQ2hpbGRyZW4gPSBBcnJheS5pc0FycmF5KGNoaWxkcmVuRGF0YSk7XG4gICAgdGhpcy5jaGlsZHJlbiA9IChjaGlsZHJlbkRhdGEgfHwgW10pLm1hcChmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgIHJldHVybiBuZXcgTm9kZShjaGlsZCwgY29uZmlnLCBfdGhpcyk7XG4gICAgfSk7XG4gIH07XG5cbiAgTm9kZS5wcm90b3R5cGUuY2FsY3VsYXRlUGF0aE5vZGVzID0gZnVuY3Rpb24gY2FsY3VsYXRlUGF0aE5vZGVzKCkge1xuICAgIHZhciBub2RlcyA9IFt0aGlzXTtcbiAgICB2YXIgcGFyZW50ID0gdGhpcy5wYXJlbnQ7XG5cbiAgICB3aGlsZSAocGFyZW50KSB7XG4gICAgICBub2Rlcy51bnNoaWZ0KHBhcmVudCk7XG4gICAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50O1xuICAgIH1cblxuICAgIHJldHVybiBub2RlcztcbiAgfTtcblxuICBOb2RlLnByb3RvdHlwZS5nZXRQYXRoID0gZnVuY3Rpb24gZ2V0UGF0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5wYXRoO1xuICB9O1xuXG4gIE5vZGUucHJvdG90eXBlLmdldFZhbHVlID0gZnVuY3Rpb24gZ2V0VmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gIH07XG5cbiAgTm9kZS5wcm90b3R5cGUuZ2V0VmFsdWVCeU9wdGlvbiA9IGZ1bmN0aW9uIGdldFZhbHVlQnlPcHRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmVtaXRQYXRoID8gdGhpcy5nZXRQYXRoKCkgOiB0aGlzLmdldFZhbHVlKCk7XG4gIH07XG5cbiAgTm9kZS5wcm90b3R5cGUuZ2V0VGV4dCA9IGZ1bmN0aW9uIGdldFRleHQoYWxsTGV2ZWxzLCBzZXBhcmF0b3IpIHtcbiAgICByZXR1cm4gYWxsTGV2ZWxzID8gdGhpcy5wYXRoTGFiZWxzLmpvaW4oc2VwYXJhdG9yKSA6IHRoaXMubGFiZWw7XG4gIH07XG5cbiAgTm9kZS5wcm90b3R5cGUuaXNTYW1lTm9kZSA9IGZ1bmN0aW9uIGlzU2FtZU5vZGUoY2hlY2tlZFZhbHVlKSB7XG4gICAgdmFyIHZhbHVlID0gdGhpcy5nZXRWYWx1ZUJ5T3B0aW9uKCk7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLm11bHRpcGxlICYmIEFycmF5LmlzQXJyYXkoY2hlY2tlZFZhbHVlKSA/IGNoZWNrZWRWYWx1ZS5zb21lKGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgIHJldHVybiBPYmplY3QodXRpbF9bXCJpc0VxdWFsXCJdKSh2YWwsIHZhbHVlKTtcbiAgICB9KSA6IE9iamVjdCh1dGlsX1tcImlzRXF1YWxcIl0pKGNoZWNrZWRWYWx1ZSwgdmFsdWUpO1xuICB9O1xuXG4gIE5vZGUucHJvdG90eXBlLmJyb2FkY2FzdCA9IGZ1bmN0aW9uIGJyb2FkY2FzdChldmVudCkge1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgdmFyIGhhbmRsZXJOYW1lID0gJ29uUGFyZW50JyArIE9iamVjdCh1dGlsX1tcImNhcGl0YWxpemVcIl0pKGV2ZW50KTtcblxuICAgIHRoaXMuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgIGlmIChjaGlsZCkge1xuICAgICAgICAvLyBib3R0b20gdXBcbiAgICAgICAgY2hpbGQuYnJvYWRjYXN0LmFwcGx5KGNoaWxkLCBbZXZlbnRdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgIGNoaWxkW2hhbmRsZXJOYW1lXSAmJiBjaGlsZFtoYW5kbGVyTmFtZV0uYXBwbHkoY2hpbGQsIGFyZ3MpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIE5vZGUucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiBlbWl0KGV2ZW50KSB7XG4gICAgdmFyIHBhcmVudCA9IHRoaXMucGFyZW50O1xuXG4gICAgdmFyIGhhbmRsZXJOYW1lID0gJ29uQ2hpbGQnICsgT2JqZWN0KHV0aWxfW1wiY2FwaXRhbGl6ZVwiXSkoZXZlbnQpO1xuICAgIGlmIChwYXJlbnQpIHtcbiAgICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4yID4gMSA/IF9sZW4yIC0gMSA6IDApLCBfa2V5MiA9IDE7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgICAgYXJnc1tfa2V5MiAtIDFdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICAgIH1cblxuICAgICAgcGFyZW50W2hhbmRsZXJOYW1lXSAmJiBwYXJlbnRbaGFuZGxlck5hbWVdLmFwcGx5KHBhcmVudCwgYXJncyk7XG4gICAgICBwYXJlbnQuZW1pdC5hcHBseShwYXJlbnQsIFtldmVudF0uY29uY2F0KGFyZ3MpKTtcbiAgICB9XG4gIH07XG5cbiAgTm9kZS5wcm90b3R5cGUub25QYXJlbnRDaGVjayA9IGZ1bmN0aW9uIG9uUGFyZW50Q2hlY2soY2hlY2tlZCkge1xuICAgIGlmICghdGhpcy5pc0Rpc2FibGVkKSB7XG4gICAgICB0aGlzLnNldENoZWNrU3RhdGUoY2hlY2tlZCk7XG4gICAgfVxuICB9O1xuXG4gIE5vZGUucHJvdG90eXBlLm9uQ2hpbGRDaGVjayA9IGZ1bmN0aW9uIG9uQ2hpbGRDaGVjaygpIHtcbiAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuO1xuXG4gICAgdmFyIHZhbGlkQ2hpbGRyZW4gPSBjaGlsZHJlbi5maWx0ZXIoZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICByZXR1cm4gIWNoaWxkLmlzRGlzYWJsZWQ7XG4gICAgfSk7XG4gICAgdmFyIGNoZWNrZWQgPSB2YWxpZENoaWxkcmVuLmxlbmd0aCA/IHZhbGlkQ2hpbGRyZW4uZXZlcnkoZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICByZXR1cm4gY2hpbGQuY2hlY2tlZDtcbiAgICB9KSA6IGZhbHNlO1xuXG4gICAgdGhpcy5zZXRDaGVja1N0YXRlKGNoZWNrZWQpO1xuICB9O1xuXG4gIE5vZGUucHJvdG90eXBlLnNldENoZWNrU3RhdGUgPSBmdW5jdGlvbiBzZXRDaGVja1N0YXRlKGNoZWNrZWQpIHtcbiAgICB2YXIgdG90YWxOdW0gPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDtcbiAgICB2YXIgY2hlY2tlZE51bSA9IHRoaXMuY2hpbGRyZW4ucmVkdWNlKGZ1bmN0aW9uIChjLCBwKSB7XG4gICAgICB2YXIgbnVtID0gcC5jaGVja2VkID8gMSA6IHAuaW5kZXRlcm1pbmF0ZSA/IDAuNSA6IDA7XG4gICAgICByZXR1cm4gYyArIG51bTtcbiAgICB9LCAwKTtcblxuICAgIHRoaXMuY2hlY2tlZCA9IGNoZWNrZWQ7XG4gICAgdGhpcy5pbmRldGVybWluYXRlID0gY2hlY2tlZE51bSAhPT0gdG90YWxOdW0gJiYgY2hlY2tlZE51bSA+IDA7XG4gIH07XG5cbiAgTm9kZS5wcm90b3R5cGUuc3luY0NoZWNrU3RhdGUgPSBmdW5jdGlvbiBzeW5jQ2hlY2tTdGF0ZShjaGVja2VkVmFsdWUpIHtcbiAgICB2YXIgdmFsdWUgPSB0aGlzLmdldFZhbHVlQnlPcHRpb24oKTtcbiAgICB2YXIgY2hlY2tlZCA9IHRoaXMuaXNTYW1lTm9kZShjaGVja2VkVmFsdWUsIHZhbHVlKTtcblxuICAgIHRoaXMuZG9DaGVjayhjaGVja2VkKTtcbiAgfTtcblxuICBOb2RlLnByb3RvdHlwZS5kb0NoZWNrID0gZnVuY3Rpb24gZG9DaGVjayhjaGVja2VkKSB7XG4gICAgaWYgKHRoaXMuY2hlY2tlZCAhPT0gY2hlY2tlZCkge1xuICAgICAgaWYgKHRoaXMuY29uZmlnLmNoZWNrU3RyaWN0bHkpIHtcbiAgICAgICAgdGhpcy5jaGVja2VkID0gY2hlY2tlZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGJvdHRvbSB1cCB0byB1bmlmeSB0aGUgY2FsY3VsYXRpb24gb2YgdGhlIGluZGV0ZXJtaW5hdGUgc3RhdGVcbiAgICAgICAgdGhpcy5icm9hZGNhc3QoJ2NoZWNrJywgY2hlY2tlZCk7XG4gICAgICAgIHRoaXMuc2V0Q2hlY2tTdGF0ZShjaGVja2VkKTtcbiAgICAgICAgdGhpcy5lbWl0KCdjaGVjaycpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBub2RlX2NyZWF0ZUNsYXNzKE5vZGUsIFt7XG4gICAga2V5OiAnaXNEaXNhYmxlZCcsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSxcbiAgICAgICAgICBwYXJlbnQgPSB0aGlzLnBhcmVudCxcbiAgICAgICAgICBjb25maWcgPSB0aGlzLmNvbmZpZztcblxuICAgICAgdmFyIGRpc2FibGVkS2V5ID0gY29uZmlnLmRpc2FibGVkO1xuICAgICAgdmFyIGNoZWNrU3RyaWN0bHkgPSBjb25maWcuY2hlY2tTdHJpY3RseTtcblxuICAgICAgcmV0dXJuIGRhdGFbZGlzYWJsZWRLZXldIHx8ICFjaGVja1N0cmljdGx5ICYmIHBhcmVudCAmJiBwYXJlbnQuaXNEaXNhYmxlZDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdpc0xlYWYnLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEsXG4gICAgICAgICAgbG9hZGVkID0gdGhpcy5sb2FkZWQsXG4gICAgICAgICAgaGFzQ2hpbGRyZW4gPSB0aGlzLmhhc0NoaWxkcmVuLFxuICAgICAgICAgIGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbjtcbiAgICAgIHZhciBfY29uZmlnMiA9IHRoaXMuY29uZmlnLFxuICAgICAgICAgIGxhenkgPSBfY29uZmlnMi5sYXp5LFxuICAgICAgICAgIGxlYWZLZXkgPSBfY29uZmlnMi5sZWFmO1xuXG4gICAgICBpZiAobGF6eSkge1xuICAgICAgICB2YXIgaXNMZWFmID0gT2JqZWN0KHNoYXJlZF9bXCJpc0RlZlwiXSkoZGF0YVtsZWFmS2V5XSkgPyBkYXRhW2xlYWZLZXldIDogbG9hZGVkID8gIWNoaWxkcmVuLmxlbmd0aCA6IGZhbHNlO1xuICAgICAgICB0aGlzLmhhc0NoaWxkcmVuID0gIWlzTGVhZjtcbiAgICAgICAgcmV0dXJuIGlzTGVhZjtcbiAgICAgIH1cbiAgICAgIHJldHVybiAhaGFzQ2hpbGRyZW47XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIE5vZGU7XG59KCk7XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY19ub2RlID0gKHNyY19ub2RlX05vZGUpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jYXNjYWRlci1wYW5lbC9zcmMvc3RvcmUuanNcbmZ1bmN0aW9uIHN0b3JlX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuXG5cblxudmFyIGZsYXROb2RlcyA9IGZ1bmN0aW9uIGZsYXROb2RlcyhkYXRhLCBsZWFmT25seSkge1xuICByZXR1cm4gZGF0YS5yZWR1Y2UoZnVuY3Rpb24gKHJlcywgbm9kZSkge1xuICAgIGlmIChub2RlLmlzTGVhZikge1xuICAgICAgcmVzLnB1c2gobm9kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICFsZWFmT25seSAmJiByZXMucHVzaChub2RlKTtcbiAgICAgIHJlcyA9IHJlcy5jb25jYXQoZmxhdE5vZGVzKG5vZGUuY2hpbGRyZW4sIGxlYWZPbmx5KSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH0sIFtdKTtcbn07XG5cbnZhciBzdG9yZV9TdG9yZSA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gU3RvcmUoZGF0YSwgY29uZmlnKSB7XG4gICAgc3RvcmVfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3RvcmUpO1xuXG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gICAgdGhpcy5pbml0Tm9kZXMoZGF0YSk7XG4gIH1cblxuICBTdG9yZS5wcm90b3R5cGUuaW5pdE5vZGVzID0gZnVuY3Rpb24gaW5pdE5vZGVzKGRhdGEpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgZGF0YSA9IE9iamVjdCh1dGlsX1tcImNvZXJjZVRydXRoeVZhbHVlVG9BcnJheVwiXSkoZGF0YSk7XG4gICAgdGhpcy5ub2RlcyA9IGRhdGEubWFwKGZ1bmN0aW9uIChub2RlRGF0YSkge1xuICAgICAgcmV0dXJuIG5ldyBzcmNfbm9kZShub2RlRGF0YSwgX3RoaXMuY29uZmlnKTtcbiAgICB9KTtcbiAgICB0aGlzLmZsYXR0ZWROb2RlcyA9IHRoaXMuZ2V0RmxhdHRlZE5vZGVzKGZhbHNlLCBmYWxzZSk7XG4gICAgdGhpcy5sZWFmTm9kZXMgPSB0aGlzLmdldEZsYXR0ZWROb2Rlcyh0cnVlLCBmYWxzZSk7XG4gIH07XG5cbiAgU3RvcmUucHJvdG90eXBlLmFwcGVuZE5vZGUgPSBmdW5jdGlvbiBhcHBlbmROb2RlKG5vZGVEYXRhLCBwYXJlbnROb2RlKSB7XG4gICAgdmFyIG5vZGUgPSBuZXcgc3JjX25vZGUobm9kZURhdGEsIHRoaXMuY29uZmlnLCBwYXJlbnROb2RlKTtcbiAgICB2YXIgY2hpbGRyZW4gPSBwYXJlbnROb2RlID8gcGFyZW50Tm9kZS5jaGlsZHJlbiA6IHRoaXMubm9kZXM7XG5cbiAgICBjaGlsZHJlbi5wdXNoKG5vZGUpO1xuICB9O1xuXG4gIFN0b3JlLnByb3RvdHlwZS5hcHBlbmROb2RlcyA9IGZ1bmN0aW9uIGFwcGVuZE5vZGVzKG5vZGVEYXRhTGlzdCwgcGFyZW50Tm9kZSkge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgbm9kZURhdGFMaXN0ID0gT2JqZWN0KHV0aWxfW1wiY29lcmNlVHJ1dGh5VmFsdWVUb0FycmF5XCJdKShub2RlRGF0YUxpc3QpO1xuICAgIG5vZGVEYXRhTGlzdC5mb3JFYWNoKGZ1bmN0aW9uIChub2RlRGF0YSkge1xuICAgICAgcmV0dXJuIF90aGlzMi5hcHBlbmROb2RlKG5vZGVEYXRhLCBwYXJlbnROb2RlKTtcbiAgICB9KTtcbiAgfTtcblxuICBTdG9yZS5wcm90b3R5cGUuZ2V0Tm9kZXMgPSBmdW5jdGlvbiBnZXROb2RlcygpIHtcbiAgICByZXR1cm4gdGhpcy5ub2RlcztcbiAgfTtcblxuICBTdG9yZS5wcm90b3R5cGUuZ2V0RmxhdHRlZE5vZGVzID0gZnVuY3Rpb24gZ2V0RmxhdHRlZE5vZGVzKGxlYWZPbmx5KSB7XG4gICAgdmFyIGNhY2hlZCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogdHJ1ZTtcblxuICAgIHZhciBjYWNoZWROb2RlcyA9IGxlYWZPbmx5ID8gdGhpcy5sZWFmTm9kZXMgOiB0aGlzLmZsYXR0ZWROb2RlcztcbiAgICByZXR1cm4gY2FjaGVkID8gY2FjaGVkTm9kZXMgOiBmbGF0Tm9kZXModGhpcy5ub2RlcywgbGVhZk9ubHkpO1xuICB9O1xuXG4gIFN0b3JlLnByb3RvdHlwZS5nZXROb2RlQnlWYWx1ZSA9IGZ1bmN0aW9uIGdldE5vZGVCeVZhbHVlKHZhbHVlKSB7XG4gICAgdmFyIG5vZGVzID0gdGhpcy5nZXRGbGF0dGVkTm9kZXMoZmFsc2UsICF0aGlzLmNvbmZpZy5sYXp5KS5maWx0ZXIoZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgIHJldHVybiBPYmplY3QodXRpbF9bXCJ2YWx1ZUVxdWFsc1wiXSkobm9kZS5wYXRoLCB2YWx1ZSkgfHwgbm9kZS52YWx1ZSA9PT0gdmFsdWU7XG4gICAgfSk7XG4gICAgcmV0dXJuIG5vZGVzICYmIG5vZGVzLmxlbmd0aCA/IG5vZGVzWzBdIDogbnVsbDtcbiAgfTtcblxuICByZXR1cm4gU3RvcmU7XG59KCk7XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGNhc2NhZGVyX3BhbmVsX3NyY19zdG9yZSA9IChzdG9yZV9TdG9yZSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9jYXNjYWRlci1wYW5lbC9zcmMvY2FzY2FkZXItcGFuZWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxudmFyIGNhc2NhZGVyX3BhbmVsdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cblxuXG5cblxuXG5cblxudmFyIGNhc2NhZGVyX3BhbmVsdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfS2V5Q29kZSA9IGFyaWFfdXRpbHNfZGVmYXVsdC5hLmtleXM7XG5cbnZhciBEZWZhdWx0UHJvcHMgPSB7XG4gIGV4cGFuZFRyaWdnZXI6ICdjbGljaycsIC8vIG9yIGhvdmVyXG4gIG11bHRpcGxlOiBmYWxzZSxcbiAgY2hlY2tTdHJpY3RseTogZmFsc2UsIC8vIHdoZXRoZXIgYWxsIG5vZGVzIGNhbiBiZSBzZWxlY3RlZFxuICBlbWl0UGF0aDogdHJ1ZSwgLy8gd2V0aGVyIHRvIGVtaXQgYW4gYXJyYXkgb2YgYWxsIGxldmVscyB2YWx1ZSBpbiB3aGljaCBub2RlIGlzIGxvY2F0ZWRcbiAgbGF6eTogZmFsc2UsXG4gIGxhenlMb2FkOiB1dGlsX1tcIm5vb3BcIl0sXG4gIHZhbHVlOiAndmFsdWUnLFxuICBsYWJlbDogJ2xhYmVsJyxcbiAgY2hpbGRyZW46ICdjaGlsZHJlbicsXG4gIGxlYWY6ICdsZWFmJyxcbiAgZGlzYWJsZWQ6ICdkaXNhYmxlZCcsXG4gIGhvdmVyVGhyZXNob2xkOiA1MDBcbn07XG5cbnZhciBjYXNjYWRlcl9wYW5lbHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX2lzTGVhZiA9IGZ1bmN0aW9uIGlzTGVhZihlbCkge1xuICByZXR1cm4gIWVsLmdldEF0dHJpYnV0ZSgnYXJpYS1vd25zJyk7XG59O1xuXG52YXIgZ2V0U2libGluZyA9IGZ1bmN0aW9uIGdldFNpYmxpbmcoZWwsIGRpc3RhbmNlKSB7XG4gIHZhciBwYXJlbnROb2RlID0gZWwucGFyZW50Tm9kZTtcblxuICBpZiAocGFyZW50Tm9kZSkge1xuICAgIHZhciBzaWJsaW5ncyA9IHBhcmVudE5vZGUucXVlcnlTZWxlY3RvckFsbCgnLmVsLWNhc2NhZGVyLW5vZGVbdGFiaW5kZXg9XCItMVwiXScpO1xuICAgIHZhciBpbmRleCA9IEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoc2libGluZ3MsIGVsKTtcbiAgICByZXR1cm4gc2libGluZ3NbaW5kZXggKyBkaXN0YW5jZV0gfHwgbnVsbDtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5cbnZhciBnZXRNZW51SW5kZXggPSBmdW5jdGlvbiBnZXRNZW51SW5kZXgoZWwsIGRpc3RhbmNlKSB7XG4gIGlmICghZWwpIHJldHVybjtcbiAgdmFyIHBpZWNlcyA9IGVsLmlkLnNwbGl0KCctJyk7XG4gIHJldHVybiBOdW1iZXIocGllY2VzW3BpZWNlcy5sZW5ndGggLSAyXSk7XG59O1xuXG52YXIgZm9jdXNOb2RlID0gZnVuY3Rpb24gZm9jdXNOb2RlKGVsKSB7XG4gIGlmICghZWwpIHJldHVybjtcbiAgZWwuZm9jdXMoKTtcbiAgIWNhc2NhZGVyX3BhbmVsdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfaXNMZWFmKGVsKSAmJiBlbC5jbGljaygpO1xufTtcblxudmFyIGNoZWNrTm9kZSA9IGZ1bmN0aW9uIGNoZWNrTm9kZShlbCkge1xuICBpZiAoIWVsKSByZXR1cm47XG5cbiAgdmFyIGlucHV0ID0gZWwucXVlcnlTZWxlY3RvcignaW5wdXQnKTtcbiAgaWYgKGlucHV0KSB7XG4gICAgaW5wdXQuY2xpY2soKTtcbiAgfSBlbHNlIGlmIChjYXNjYWRlcl9wYW5lbHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX2lzTGVhZihlbCkpIHtcbiAgICBlbC5jbGljaygpO1xuICB9XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBjYXNjYWRlcl9wYW5lbHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG5hbWU6ICdFbENhc2NhZGVyUGFuZWwnLFxuXG4gIGNvbXBvbmVudHM6IHtcbiAgICBDYXNjYWRlck1lbnU6IGNhc2NhZGVyX21lbnVcbiAgfSxcblxuICBwcm9wczoge1xuICAgIHZhbHVlOiB7fSxcbiAgICBvcHRpb25zOiBBcnJheSxcbiAgICBwcm9wczogT2JqZWN0LFxuICAgIGJvcmRlcjoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9LFxuICAgIHJlbmRlckxhYmVsOiBGdW5jdGlvblxuICB9LFxuXG4gIHByb3ZpZGU6IGZ1bmN0aW9uIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhbmVsOiB0aGlzXG4gICAgfTtcbiAgfSxcbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY2hlY2tlZFZhbHVlOiBudWxsLFxuICAgICAgY2hlY2tlZE5vZGVQYXRoczogW10sXG4gICAgICBzdG9yZTogW10sXG4gICAgICBtZW51czogW10sXG4gICAgICBhY3RpdmVQYXRoOiBbXSxcbiAgICAgIGxvYWRDb3VudDogMFxuICAgIH07XG4gIH0sXG5cblxuICBjb21wdXRlZDoge1xuICAgIGNvbmZpZzogZnVuY3Rpb24gY29uZmlnKCkge1xuICAgICAgcmV0dXJuIG1lcmdlX2RlZmF1bHQoKShjYXNjYWRlcl9wYW5lbHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX2V4dGVuZHMoe30sIERlZmF1bHRQcm9wcyksIHRoaXMucHJvcHMgfHwge30pO1xuICAgIH0sXG4gICAgbXVsdGlwbGU6IGZ1bmN0aW9uIG11bHRpcGxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29uZmlnLm11bHRpcGxlO1xuICAgIH0sXG4gICAgY2hlY2tTdHJpY3RseTogZnVuY3Rpb24gY2hlY2tTdHJpY3RseSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbmZpZy5jaGVja1N0cmljdGx5O1xuICAgIH0sXG4gICAgbGVhZk9ubHk6IGZ1bmN0aW9uIGxlYWZPbmx5KCkge1xuICAgICAgcmV0dXJuICF0aGlzLmNoZWNrU3RyaWN0bHk7XG4gICAgfSxcbiAgICBpc0hvdmVyTWVudTogZnVuY3Rpb24gaXNIb3Zlck1lbnUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb25maWcuZXhwYW5kVHJpZ2dlciA9PT0gJ2hvdmVyJztcbiAgICB9LFxuICAgIHJlbmRlckxhYmVsRm46IGZ1bmN0aW9uIHJlbmRlckxhYmVsRm4oKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJMYWJlbCB8fCB0aGlzLiRzY29wZWRTbG90cy5kZWZhdWx0O1xuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHZhbHVlOiBmdW5jdGlvbiB2YWx1ZSgpIHtcbiAgICAgIHRoaXMuc3luY0NoZWNrZWRWYWx1ZSgpO1xuICAgICAgdGhpcy5jaGVja1N0cmljdGx5ICYmIHRoaXMuY2FsY3VsYXRlQ2hlY2tlZE5vZGVQYXRocygpO1xuICAgIH0sXG5cbiAgICBvcHRpb25zOiB7XG4gICAgICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKCkge1xuICAgICAgICB0aGlzLmluaXRTdG9yZSgpO1xuICAgICAgfSxcbiAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcbiAgICAgIGRlZXA6IHRydWVcbiAgICB9LFxuICAgIGNoZWNrZWRWYWx1ZTogZnVuY3Rpb24gY2hlY2tlZFZhbHVlKHZhbCkge1xuICAgICAgaWYgKCFPYmplY3QodXRpbF9bXCJpc0VxdWFsXCJdKSh2YWwsIHRoaXMudmFsdWUpKSB7XG4gICAgICAgIHRoaXMuY2hlY2tTdHJpY3RseSAmJiB0aGlzLmNhbGN1bGF0ZUNoZWNrZWROb2RlUGF0aHMoKTtcbiAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCB2YWwpO1xuICAgICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCB2YWwpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge1xuICAgIGlmICghdGhpcy5pc0VtcHR5VmFsdWUodGhpcy52YWx1ZSkpIHtcbiAgICAgIHRoaXMuc3luY0NoZWNrZWRWYWx1ZSgpO1xuICAgIH1cbiAgfSxcblxuXG4gIG1ldGhvZHM6IHtcbiAgICBpbml0U3RvcmU6IGZ1bmN0aW9uIGluaXRTdG9yZSgpIHtcbiAgICAgIHZhciBjb25maWcgPSB0aGlzLmNvbmZpZyxcbiAgICAgICAgICBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuXG4gICAgICBpZiAoY29uZmlnLmxhenkgJiYgT2JqZWN0KHV0aWxfW1wiaXNFbXB0eVwiXSkob3B0aW9ucykpIHtcbiAgICAgICAgdGhpcy5sYXp5TG9hZCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zdG9yZSA9IG5ldyBjYXNjYWRlcl9wYW5lbF9zcmNfc3RvcmUob3B0aW9ucywgY29uZmlnKTtcbiAgICAgICAgdGhpcy5tZW51cyA9IFt0aGlzLnN0b3JlLmdldE5vZGVzKCldO1xuICAgICAgICB0aGlzLnN5bmNNZW51U3RhdGUoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHN5bmNDaGVja2VkVmFsdWU6IGZ1bmN0aW9uIHN5bmNDaGVja2VkVmFsdWUoKSB7XG4gICAgICB2YXIgdmFsdWUgPSB0aGlzLnZhbHVlLFxuICAgICAgICAgIGNoZWNrZWRWYWx1ZSA9IHRoaXMuY2hlY2tlZFZhbHVlO1xuXG4gICAgICBpZiAoIU9iamVjdCh1dGlsX1tcImlzRXF1YWxcIl0pKHZhbHVlLCBjaGVja2VkVmFsdWUpKSB7XG4gICAgICAgIHRoaXMuYWN0aXZlUGF0aCA9IFtdO1xuICAgICAgICB0aGlzLmNoZWNrZWRWYWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLnN5bmNNZW51U3RhdGUoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHN5bmNNZW51U3RhdGU6IGZ1bmN0aW9uIHN5bmNNZW51U3RhdGUoKSB7XG4gICAgICB2YXIgbXVsdGlwbGUgPSB0aGlzLm11bHRpcGxlLFxuICAgICAgICAgIGNoZWNrU3RyaWN0bHkgPSB0aGlzLmNoZWNrU3RyaWN0bHk7XG5cbiAgICAgIHRoaXMuc3luY0FjdGl2ZVBhdGgoKTtcbiAgICAgIG11bHRpcGxlICYmIHRoaXMuc3luY011bHRpQ2hlY2tTdGF0ZSgpO1xuICAgICAgY2hlY2tTdHJpY3RseSAmJiB0aGlzLmNhbGN1bGF0ZUNoZWNrZWROb2RlUGF0aHMoKTtcbiAgICAgIHRoaXMuJG5leHRUaWNrKHRoaXMuc2Nyb2xsSW50b1ZpZXcpO1xuICAgIH0sXG4gICAgc3luY011bHRpQ2hlY2tTdGF0ZTogZnVuY3Rpb24gc3luY011bHRpQ2hlY2tTdGF0ZSgpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIHZhciBub2RlcyA9IHRoaXMuZ2V0RmxhdHRlZE5vZGVzKHRoaXMubGVhZk9ubHkpO1xuXG4gICAgICBub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgIG5vZGUuc3luY0NoZWNrU3RhdGUoX3RoaXMuY2hlY2tlZFZhbHVlKTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgaXNFbXB0eVZhbHVlOiBmdW5jdGlvbiBpc0VtcHR5VmFsdWUodmFsKSB7XG4gICAgICB2YXIgbXVsdGlwbGUgPSB0aGlzLm11bHRpcGxlLFxuICAgICAgICAgIGNvbmZpZyA9IHRoaXMuY29uZmlnO1xuICAgICAgdmFyIGVtaXRQYXRoID0gY29uZmlnLmVtaXRQYXRoO1xuXG4gICAgICBpZiAobXVsdGlwbGUgfHwgZW1pdFBhdGgpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdCh1dGlsX1tcImlzRW1wdHlcIl0pKHZhbCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcbiAgICBzeW5jQWN0aXZlUGF0aDogZnVuY3Rpb24gc3luY0FjdGl2ZVBhdGgoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgdmFyIHN0b3JlID0gdGhpcy5zdG9yZSxcbiAgICAgICAgICBtdWx0aXBsZSA9IHRoaXMubXVsdGlwbGUsXG4gICAgICAgICAgYWN0aXZlUGF0aCA9IHRoaXMuYWN0aXZlUGF0aCxcbiAgICAgICAgICBjaGVja2VkVmFsdWUgPSB0aGlzLmNoZWNrZWRWYWx1ZTtcblxuXG4gICAgICBpZiAoIU9iamVjdCh1dGlsX1tcImlzRW1wdHlcIl0pKGFjdGl2ZVBhdGgpKSB7XG4gICAgICAgIHZhciBub2RlcyA9IGFjdGl2ZVBhdGgubWFwKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgICAgcmV0dXJuIF90aGlzMi5nZXROb2RlQnlWYWx1ZShub2RlLmdldFZhbHVlKCkpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5leHBhbmROb2Rlcyhub2Rlcyk7XG4gICAgICB9IGVsc2UgaWYgKCF0aGlzLmlzRW1wdHlWYWx1ZShjaGVja2VkVmFsdWUpKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IG11bHRpcGxlID8gY2hlY2tlZFZhbHVlWzBdIDogY2hlY2tlZFZhbHVlO1xuICAgICAgICB2YXIgY2hlY2tlZE5vZGUgPSB0aGlzLmdldE5vZGVCeVZhbHVlKHZhbHVlKSB8fCB7fTtcbiAgICAgICAgdmFyIF9ub2RlcyA9IChjaGVja2VkTm9kZS5wYXRoTm9kZXMgfHwgW10pLnNsaWNlKDAsIC0xKTtcbiAgICAgICAgdGhpcy5leHBhbmROb2Rlcyhfbm9kZXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5hY3RpdmVQYXRoID0gW107XG4gICAgICAgIHRoaXMubWVudXMgPSBbc3RvcmUuZ2V0Tm9kZXMoKV07XG4gICAgICB9XG4gICAgfSxcbiAgICBleHBhbmROb2RlczogZnVuY3Rpb24gZXhwYW5kTm9kZXMobm9kZXMpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgICBub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgIHJldHVybiBfdGhpczMuaGFuZGxlRXhwYW5kKG5vZGUsIHRydWUgLyogc2lsZW50ICovKTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgY2FsY3VsYXRlQ2hlY2tlZE5vZGVQYXRoczogZnVuY3Rpb24gY2FsY3VsYXRlQ2hlY2tlZE5vZGVQYXRocygpIHtcbiAgICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgICB2YXIgY2hlY2tlZFZhbHVlID0gdGhpcy5jaGVja2VkVmFsdWUsXG4gICAgICAgICAgbXVsdGlwbGUgPSB0aGlzLm11bHRpcGxlO1xuXG4gICAgICB2YXIgY2hlY2tlZFZhbHVlcyA9IG11bHRpcGxlID8gT2JqZWN0KHV0aWxfW1wiY29lcmNlVHJ1dGh5VmFsdWVUb0FycmF5XCJdKShjaGVja2VkVmFsdWUpIDogW2NoZWNrZWRWYWx1ZV07XG4gICAgICB0aGlzLmNoZWNrZWROb2RlUGF0aHMgPSBjaGVja2VkVmFsdWVzLm1hcChmdW5jdGlvbiAodikge1xuICAgICAgICB2YXIgY2hlY2tlZE5vZGUgPSBfdGhpczQuZ2V0Tm9kZUJ5VmFsdWUodik7XG4gICAgICAgIHJldHVybiBjaGVja2VkTm9kZSA/IGNoZWNrZWROb2RlLnBhdGhOb2RlcyA6IFtdO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBoYW5kbGVLZXlEb3duOiBmdW5jdGlvbiBoYW5kbGVLZXlEb3duKGUpIHtcbiAgICAgIHZhciB0YXJnZXQgPSBlLnRhcmdldCxcbiAgICAgICAgICBrZXlDb2RlID0gZS5rZXlDb2RlO1xuXG5cbiAgICAgIHN3aXRjaCAoa2V5Q29kZSkge1xuICAgICAgICBjYXNlIGNhc2NhZGVyX3BhbmVsdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfS2V5Q29kZS51cDpcbiAgICAgICAgICB2YXIgcHJldiA9IGdldFNpYmxpbmcodGFyZ2V0LCAtMSk7XG4gICAgICAgICAgZm9jdXNOb2RlKHByZXYpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIGNhc2NhZGVyX3BhbmVsdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfS2V5Q29kZS5kb3duOlxuICAgICAgICAgIHZhciBuZXh0ID0gZ2V0U2libGluZyh0YXJnZXQsIDEpO1xuICAgICAgICAgIGZvY3VzTm9kZShuZXh0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBjYXNjYWRlcl9wYW5lbHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX0tleUNvZGUubGVmdDpcbiAgICAgICAgICB2YXIgcHJlTWVudSA9IHRoaXMuJHJlZnMubWVudVtnZXRNZW51SW5kZXgodGFyZ2V0KSAtIDFdO1xuICAgICAgICAgIGlmIChwcmVNZW51KSB7XG4gICAgICAgICAgICB2YXIgZXhwYW5kZWROb2RlID0gcHJlTWVudS4kZWwucXVlcnlTZWxlY3RvcignLmVsLWNhc2NhZGVyLW5vZGVbYXJpYS1leHBhbmRlZD1cInRydWVcIl0nKTtcbiAgICAgICAgICAgIGZvY3VzTm9kZShleHBhbmRlZE5vZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBjYXNjYWRlcl9wYW5lbHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX0tleUNvZGUucmlnaHQ6XG4gICAgICAgICAgdmFyIG5leHRNZW51ID0gdGhpcy4kcmVmcy5tZW51W2dldE1lbnVJbmRleCh0YXJnZXQpICsgMV07XG4gICAgICAgICAgaWYgKG5leHRNZW51KSB7XG4gICAgICAgICAgICB2YXIgZmlyc3ROb2RlID0gbmV4dE1lbnUuJGVsLnF1ZXJ5U2VsZWN0b3IoJy5lbC1jYXNjYWRlci1ub2RlW3RhYmluZGV4PVwiLTFcIl0nKTtcbiAgICAgICAgICAgIGZvY3VzTm9kZShmaXJzdE5vZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBjYXNjYWRlcl9wYW5lbHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX0tleUNvZGUuZW50ZXI6XG4gICAgICAgICAgY2hlY2tOb2RlKHRhcmdldCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgY2FzY2FkZXJfcGFuZWx2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19LZXlDb2RlLmVzYzpcbiAgICAgICAgY2FzZSBjYXNjYWRlcl9wYW5lbHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX0tleUNvZGUudGFiOlxuICAgICAgICAgIHRoaXMuJGVtaXQoJ2Nsb3NlJyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0sXG4gICAgaGFuZGxlRXhwYW5kOiBmdW5jdGlvbiBoYW5kbGVFeHBhbmQobm9kZSwgc2lsZW50KSB7XG4gICAgICB2YXIgYWN0aXZlUGF0aCA9IHRoaXMuYWN0aXZlUGF0aDtcbiAgICAgIHZhciBsZXZlbCA9IG5vZGUubGV2ZWw7XG5cbiAgICAgIHZhciBwYXRoID0gYWN0aXZlUGF0aC5zbGljZSgwLCBsZXZlbCAtIDEpO1xuICAgICAgdmFyIG1lbnVzID0gdGhpcy5tZW51cy5zbGljZSgwLCBsZXZlbCk7XG5cbiAgICAgIGlmICghbm9kZS5pc0xlYWYpIHtcbiAgICAgICAgcGF0aC5wdXNoKG5vZGUpO1xuICAgICAgICBtZW51cy5wdXNoKG5vZGUuY2hpbGRyZW4pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmFjdGl2ZVBhdGggPSBwYXRoO1xuICAgICAgdGhpcy5tZW51cyA9IG1lbnVzO1xuXG4gICAgICBpZiAoIXNpbGVudCkge1xuICAgICAgICB2YXIgcGF0aFZhbHVlcyA9IHBhdGgubWFwKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgICAgcmV0dXJuIG5vZGUuZ2V0VmFsdWUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBhY3RpdmVQYXRoVmFsdWVzID0gYWN0aXZlUGF0aC5tYXAoZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgICByZXR1cm4gbm9kZS5nZXRWYWx1ZSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFPYmplY3QodXRpbF9bXCJ2YWx1ZUVxdWFsc1wiXSkocGF0aFZhbHVlcywgYWN0aXZlUGF0aFZhbHVlcykpIHtcbiAgICAgICAgICB0aGlzLiRlbWl0KCdhY3RpdmUtaXRlbS1jaGFuZ2UnLCBwYXRoVmFsdWVzKTsgLy8gRGVwcmVjYXRlZFxuICAgICAgICAgIHRoaXMuJGVtaXQoJ2V4cGFuZC1jaGFuZ2UnLCBwYXRoVmFsdWVzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgaGFuZGxlQ2hlY2tDaGFuZ2U6IGZ1bmN0aW9uIGhhbmRsZUNoZWNrQ2hhbmdlKHZhbHVlKSB7XG4gICAgICB0aGlzLmNoZWNrZWRWYWx1ZSA9IHZhbHVlO1xuICAgIH0sXG4gICAgbGF6eUxvYWQ6IGZ1bmN0aW9uIGxhenlMb2FkKG5vZGUsIG9uRnVsbGZpbGVkKSB7XG4gICAgICB2YXIgX3RoaXM1ID0gdGhpcztcblxuICAgICAgdmFyIGNvbmZpZyA9IHRoaXMuY29uZmlnO1xuXG4gICAgICBpZiAoIW5vZGUpIHtcbiAgICAgICAgbm9kZSA9IG5vZGUgfHwgeyByb290OiB0cnVlLCBsZXZlbDogMCB9O1xuICAgICAgICB0aGlzLnN0b3JlID0gbmV3IGNhc2NhZGVyX3BhbmVsX3NyY19zdG9yZShbXSwgY29uZmlnKTtcbiAgICAgICAgdGhpcy5tZW51cyA9IFt0aGlzLnN0b3JlLmdldE5vZGVzKCldO1xuICAgICAgfVxuICAgICAgbm9kZS5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgIHZhciByZXNvbHZlID0gZnVuY3Rpb24gcmVzb2x2ZShkYXRhTGlzdCkge1xuICAgICAgICB2YXIgcGFyZW50ID0gbm9kZS5yb290ID8gbnVsbCA6IG5vZGU7XG4gICAgICAgIGRhdGFMaXN0ICYmIGRhdGFMaXN0Lmxlbmd0aCAmJiBfdGhpczUuc3RvcmUuYXBwZW5kTm9kZXMoZGF0YUxpc3QsIHBhcmVudCk7XG4gICAgICAgIG5vZGUubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICBub2RlLmxvYWRlZCA9IHRydWU7XG5cbiAgICAgICAgLy8gZGlzcG9zZSBkZWZhdWx0IHZhbHVlIG9uIGxhenkgbG9hZCBtb2RlXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KF90aGlzNS5jaGVja2VkVmFsdWUpKSB7XG4gICAgICAgICAgdmFyIG5vZGVWYWx1ZSA9IF90aGlzNS5jaGVja2VkVmFsdWVbX3RoaXM1LmxvYWRDb3VudCsrXTtcbiAgICAgICAgICB2YXIgdmFsdWVLZXkgPSBfdGhpczUuY29uZmlnLnZhbHVlO1xuICAgICAgICAgIHZhciBsZWFmS2V5ID0gX3RoaXM1LmNvbmZpZy5sZWFmO1xuXG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YUxpc3QpICYmIGRhdGFMaXN0LmZpbHRlcihmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW1bdmFsdWVLZXldID09PSBub2RlVmFsdWU7XG4gICAgICAgICAgfSkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdmFyIGNoZWNrZWROb2RlID0gX3RoaXM1LnN0b3JlLmdldE5vZGVCeVZhbHVlKG5vZGVWYWx1ZSk7XG5cbiAgICAgICAgICAgIGlmICghY2hlY2tlZE5vZGUuZGF0YVtsZWFmS2V5XSkge1xuICAgICAgICAgICAgICBfdGhpczUubGF6eUxvYWQoY2hlY2tlZE5vZGUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBfdGhpczUuaGFuZGxlRXhwYW5kKGNoZWNrZWROb2RlKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChfdGhpczUubG9hZENvdW50ID09PSBfdGhpczUuY2hlY2tlZFZhbHVlLmxlbmd0aCkge1xuICAgICAgICAgICAgICBfdGhpczUuJHBhcmVudC5jb21wdXRlUHJlc2VudFRleHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBvbkZ1bGxmaWxlZCAmJiBvbkZ1bGxmaWxlZChkYXRhTGlzdCk7XG4gICAgICB9O1xuICAgICAgY29uZmlnLmxhenlMb2FkKG5vZGUsIHJlc29sdmUpO1xuICAgIH0sXG5cblxuICAgIC8qKlxuICAgICAqIHB1YmxpYyBtZXRob2RzXG4gICAgKi9cbiAgICBjYWxjdWxhdGVNdWx0aUNoZWNrZWRWYWx1ZTogZnVuY3Rpb24gY2FsY3VsYXRlTXVsdGlDaGVja2VkVmFsdWUoKSB7XG4gICAgICB0aGlzLmNoZWNrZWRWYWx1ZSA9IHRoaXMuZ2V0Q2hlY2tlZE5vZGVzKHRoaXMubGVhZk9ubHkpLm1hcChmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICByZXR1cm4gbm9kZS5nZXRWYWx1ZUJ5T3B0aW9uKCk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIHNjcm9sbEludG9WaWV3OiBmdW5jdGlvbiBzY3JvbGxJbnRvVmlldygpIHtcbiAgICAgIGlmICh0aGlzLiRpc1NlcnZlcikgcmV0dXJuO1xuXG4gICAgICB2YXIgbWVudXMgPSB0aGlzLiRyZWZzLm1lbnUgfHwgW107XG4gICAgICBtZW51cy5mb3JFYWNoKGZ1bmN0aW9uIChtZW51KSB7XG4gICAgICAgIHZhciBtZW51RWxlbWVudCA9IG1lbnUuJGVsO1xuICAgICAgICBpZiAobWVudUVsZW1lbnQpIHtcbiAgICAgICAgICB2YXIgY29udGFpbmVyID0gbWVudUVsZW1lbnQucXVlcnlTZWxlY3RvcignLmVsLXNjcm9sbGJhcl9fd3JhcCcpO1xuICAgICAgICAgIHZhciBhY3RpdmVOb2RlID0gbWVudUVsZW1lbnQucXVlcnlTZWxlY3RvcignLmVsLWNhc2NhZGVyLW5vZGUuaXMtYWN0aXZlJykgfHwgbWVudUVsZW1lbnQucXVlcnlTZWxlY3RvcignLmVsLWNhc2NhZGVyLW5vZGUuaW4tYWN0aXZlLXBhdGgnKTtcbiAgICAgICAgICBzY3JvbGxfaW50b192aWV3X2RlZmF1bHQoKShjb250YWluZXIsIGFjdGl2ZU5vZGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGdldE5vZGVCeVZhbHVlOiBmdW5jdGlvbiBnZXROb2RlQnlWYWx1ZSh2YWwpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0b3JlLmdldE5vZGVCeVZhbHVlKHZhbCk7XG4gICAgfSxcbiAgICBnZXRGbGF0dGVkTm9kZXM6IGZ1bmN0aW9uIGdldEZsYXR0ZWROb2RlcyhsZWFmT25seSkge1xuICAgICAgdmFyIGNhY2hlZCA9ICF0aGlzLmNvbmZpZy5sYXp5O1xuICAgICAgcmV0dXJuIHRoaXMuc3RvcmUuZ2V0RmxhdHRlZE5vZGVzKGxlYWZPbmx5LCBjYWNoZWQpO1xuICAgIH0sXG4gICAgZ2V0Q2hlY2tlZE5vZGVzOiBmdW5jdGlvbiBnZXRDaGVja2VkTm9kZXMobGVhZk9ubHkpIHtcbiAgICAgIHZhciBjaGVja2VkVmFsdWUgPSB0aGlzLmNoZWNrZWRWYWx1ZSxcbiAgICAgICAgICBtdWx0aXBsZSA9IHRoaXMubXVsdGlwbGU7XG5cbiAgICAgIGlmIChtdWx0aXBsZSkge1xuICAgICAgICB2YXIgbm9kZXMgPSB0aGlzLmdldEZsYXR0ZWROb2RlcyhsZWFmT25seSk7XG4gICAgICAgIHJldHVybiBub2Rlcy5maWx0ZXIoZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgICByZXR1cm4gbm9kZS5jaGVja2VkO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzRW1wdHlWYWx1ZShjaGVja2VkVmFsdWUpID8gW10gOiBbdGhpcy5nZXROb2RlQnlWYWx1ZShjaGVja2VkVmFsdWUpXTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGNsZWFyQ2hlY2tlZE5vZGVzOiBmdW5jdGlvbiBjbGVhckNoZWNrZWROb2RlcygpIHtcbiAgICAgIHZhciBjb25maWcgPSB0aGlzLmNvbmZpZyxcbiAgICAgICAgICBsZWFmT25seSA9IHRoaXMubGVhZk9ubHk7XG4gICAgICB2YXIgbXVsdGlwbGUgPSBjb25maWcubXVsdGlwbGUsXG4gICAgICAgICAgZW1pdFBhdGggPSBjb25maWcuZW1pdFBhdGg7XG5cbiAgICAgIGlmIChtdWx0aXBsZSkge1xuICAgICAgICB0aGlzLmdldENoZWNrZWROb2RlcyhsZWFmT25seSkuZmlsdGVyKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgICAgcmV0dXJuICFub2RlLmlzRGlzYWJsZWQ7XG4gICAgICAgIH0pLmZvckVhY2goZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgICByZXR1cm4gbm9kZS5kb0NoZWNrKGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY2FsY3VsYXRlTXVsdGlDaGVja2VkVmFsdWUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY2hlY2tlZFZhbHVlID0gZW1pdFBhdGggPyBbXSA6IG51bGw7XG4gICAgICB9XG4gICAgfVxuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY2FzY2FkZXItcGFuZWwvc3JjL2Nhc2NhZGVyLXBhbmVsLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfY2FzY2FkZXJfcGFuZWx2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoY2FzY2FkZXJfcGFuZWx2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY2FzY2FkZXItcGFuZWwvc3JjL2Nhc2NhZGVyLXBhbmVsLnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGNhc2NhZGVyX3BhbmVsX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgc3JjX2Nhc2NhZGVyX3BhbmVsdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICBjYXNjYWRlcl9wYW5lbHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzM0OTMyMzQ2X3JlbmRlcixcbiAgY2FzY2FkZXJfcGFuZWx2dWVfdHlwZV90ZW1wbGF0ZV9pZF8zNDkzMjM0Nl9zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGNhc2NhZGVyX3BhbmVsX2FwaTsgfVxuY2FzY2FkZXJfcGFuZWxfY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy9jYXNjYWRlci1wYW5lbC9zcmMvY2FzY2FkZXItcGFuZWwudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGNhc2NhZGVyX3BhbmVsID0gKGNhc2NhZGVyX3BhbmVsX2NvbXBvbmVudC5leHBvcnRzKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY2FzY2FkZXItcGFuZWwvaW5kZXguanNcblxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuY2FzY2FkZXJfcGFuZWwuaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcbiAgVnVlLmNvbXBvbmVudChjYXNjYWRlcl9wYW5lbC5uYW1lLCBjYXNjYWRlcl9wYW5lbCk7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc19jYXNjYWRlcl9wYW5lbCA9IChjYXNjYWRlcl9wYW5lbCk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9hdmF0YXIvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBhdmF0YXJfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBuYW1lOiAnRWxBdmF0YXInLFxuXG4gIHByb3BzOiB7XG4gICAgc2l6ZToge1xuICAgICAgdHlwZTogW051bWJlciwgU3RyaW5nXSxcbiAgICAgIHZhbGlkYXRvcjogZnVuY3Rpb24gdmFsaWRhdG9yKHZhbCkge1xuICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICByZXR1cm4gWydsYXJnZScsICdtZWRpdW0nLCAnc21hbGwnXS5pbmNsdWRlcyh2YWwpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsID09PSAnbnVtYmVyJztcbiAgICAgIH1cbiAgICB9LFxuICAgIHNoYXBlOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnY2lyY2xlJyxcbiAgICAgIHZhbGlkYXRvcjogZnVuY3Rpb24gdmFsaWRhdG9yKHZhbCkge1xuICAgICAgICByZXR1cm4gWydjaXJjbGUnLCAnc3F1YXJlJ10uaW5jbHVkZXModmFsKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGljb246IFN0cmluZyxcbiAgICBzcmM6IFN0cmluZyxcbiAgICBhbHQ6IFN0cmluZyxcbiAgICBzcmNTZXQ6IFN0cmluZyxcbiAgICBlcnJvcjogRnVuY3Rpb24sXG4gICAgZml0OiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnY292ZXInXG4gICAgfVxuICB9LFxuXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzSW1hZ2VFeGlzdDogdHJ1ZVxuICAgIH07XG4gIH0sXG5cblxuICBjb21wdXRlZDoge1xuICAgIGF2YXRhckNsYXNzOiBmdW5jdGlvbiBhdmF0YXJDbGFzcygpIHtcbiAgICAgIHZhciBzaXplID0gdGhpcy5zaXplLFxuICAgICAgICAgIGljb24gPSB0aGlzLmljb24sXG4gICAgICAgICAgc2hhcGUgPSB0aGlzLnNoYXBlO1xuXG4gICAgICB2YXIgY2xhc3NMaXN0ID0gWydlbC1hdmF0YXInXTtcblxuICAgICAgaWYgKHNpemUgJiYgdHlwZW9mIHNpemUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNsYXNzTGlzdC5wdXNoKCdlbC1hdmF0YXItLScgKyBzaXplKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGljb24pIHtcbiAgICAgICAgY2xhc3NMaXN0LnB1c2goJ2VsLWF2YXRhci0taWNvbicpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2hhcGUpIHtcbiAgICAgICAgY2xhc3NMaXN0LnB1c2goJ2VsLWF2YXRhci0tJyArIHNoYXBlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNsYXNzTGlzdC5qb2luKCcgJyk7XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBoYW5kbGVFcnJvcjogZnVuY3Rpb24gaGFuZGxlRXJyb3IoKSB7XG4gICAgICB2YXIgZXJyb3IgPSB0aGlzLmVycm9yO1xuXG4gICAgICB2YXIgZXJyb3JGbGFnID0gZXJyb3IgPyBlcnJvcigpIDogdW5kZWZpbmVkO1xuICAgICAgaWYgKGVycm9yRmxhZyAhPT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5pc0ltYWdlRXhpc3QgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHJlbmRlckF2YXRhcjogZnVuY3Rpb24gcmVuZGVyQXZhdGFyKCkge1xuICAgICAgdmFyIGggPSB0aGlzLiRjcmVhdGVFbGVtZW50O1xuICAgICAgdmFyIGljb24gPSB0aGlzLmljb24sXG4gICAgICAgICAgc3JjID0gdGhpcy5zcmMsXG4gICAgICAgICAgYWx0ID0gdGhpcy5hbHQsXG4gICAgICAgICAgaXNJbWFnZUV4aXN0ID0gdGhpcy5pc0ltYWdlRXhpc3QsXG4gICAgICAgICAgc3JjU2V0ID0gdGhpcy5zcmNTZXQsXG4gICAgICAgICAgZml0ID0gdGhpcy5maXQ7XG5cblxuICAgICAgaWYgKGlzSW1hZ2VFeGlzdCAmJiBzcmMpIHtcbiAgICAgICAgcmV0dXJuIGgoJ2ltZycsIHtcbiAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgc3JjOiBzcmMsXG5cbiAgICAgICAgICAgIGFsdDogYWx0LFxuICAgICAgICAgICAgc3JjU2V0OiBzcmNTZXRcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAnZXJyb3InOiB0aGlzLmhhbmRsZUVycm9yXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzdHlsZTogeyAnb2JqZWN0LWZpdCc6IGZpdCB9IH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoaWNvbikge1xuICAgICAgICByZXR1cm4gaCgnaScsIHsgJ2NsYXNzJzogaWNvbiB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuJHNsb3RzLmRlZmF1bHQ7XG4gICAgfVxuICB9LFxuXG4gIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHZhciBoID0gYXJndW1lbnRzWzBdO1xuICAgIHZhciBhdmF0YXJDbGFzcyA9IHRoaXMuYXZhdGFyQ2xhc3MsXG4gICAgICAgIHNpemUgPSB0aGlzLnNpemU7XG5cblxuICAgIHZhciBzaXplU3R5bGUgPSB0eXBlb2Ygc2l6ZSA9PT0gJ251bWJlcicgPyB7XG4gICAgICBoZWlnaHQ6IHNpemUgKyAncHgnLFxuICAgICAgd2lkdGg6IHNpemUgKyAncHgnLFxuICAgICAgbGluZUhlaWdodDogc2l6ZSArICdweCdcbiAgICB9IDoge307XG5cbiAgICByZXR1cm4gaChcbiAgICAgICdzcGFuJyxcbiAgICAgIHsgJ2NsYXNzJzogYXZhdGFyQ2xhc3MsIHN0eWxlOiBzaXplU3R5bGUgfSxcbiAgICAgIFt0aGlzLnJlbmRlckF2YXRhcigpXVxuICAgICk7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9hdmF0YXIvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhY2thZ2VzX2F2YXRhcl9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChhdmF0YXJfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvYXZhdGFyL3NyYy9tYWluLnZ1ZVxudmFyIHNyY19tYWluX3JlbmRlciwgc3JjX21haW5fc3RhdGljUmVuZGVyRm5zXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGF2YXRhcl9zcmNfbWFpbl9jb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIHBhY2thZ2VzX2F2YXRhcl9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgc3JjX21haW5fcmVuZGVyLFxuICBzcmNfbWFpbl9zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGF2YXRhcl9zcmNfbWFpbl9hcGk7IH1cbmF2YXRhcl9zcmNfbWFpbl9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL2F2YXRhci9zcmMvbWFpbi52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgYXZhdGFyX3NyY19tYWluID0gKGF2YXRhcl9zcmNfbWFpbl9jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2F2YXRhci9pbmRleC5qc1xuXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5hdmF0YXJfc3JjX21haW4uaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcbiAgVnVlLmNvbXBvbmVudChhdmF0YXJfc3JjX21haW4ubmFtZSwgYXZhdGFyX3NyY19tYWluKTtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGF2YXRhciA9IChhdmF0YXJfc3JjX21haW4pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9kcmF3ZXIvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWE0ODg1MjY0JlxudmFyIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF9hNDg4NTI2NF9yZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJ0cmFuc2l0aW9uXCIsXG4gICAge1xuICAgICAgYXR0cnM6IHsgbmFtZTogXCJlbC1kcmF3ZXItZmFkZVwiIH0sXG4gICAgICBvbjogeyBcImFmdGVyLWVudGVyXCI6IF92bS5hZnRlckVudGVyLCBcImFmdGVyLWxlYXZlXCI6IF92bS5hZnRlckxlYXZlIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIF9jKFxuICAgICAgICBcImRpdlwiLFxuICAgICAgICB7XG4gICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgICAgdmFsdWU6IF92bS52aXNpYmxlLFxuICAgICAgICAgICAgICBleHByZXNzaW9uOiBcInZpc2libGVcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIF0sXG4gICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtZHJhd2VyX193cmFwcGVyXCIsXG4gICAgICAgICAgYXR0cnM6IHsgdGFiaW5kZXg6IFwiLTFcIiB9XG4gICAgICAgIH0sXG4gICAgICAgIFtcbiAgICAgICAgICBfYyhcbiAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWRyYXdlcl9fY29udGFpbmVyXCIsXG4gICAgICAgICAgICAgIGNsYXNzOiBfdm0udmlzaWJsZSAmJiBcImVsLWRyYXdlcl9fb3BlblwiLFxuICAgICAgICAgICAgICBhdHRyczogeyByb2xlOiBcImRvY3VtZW50XCIsIHRhYmluZGV4OiBcIi0xXCIgfSxcbiAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICBpZiAoJGV2ZW50LnRhcmdldCAhPT0gJGV2ZW50LmN1cnJlbnRUYXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0uaGFuZGxlV3JhcHBlckNsaWNrKCRldmVudClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgcmVmOiBcImRyYXdlclwiLFxuICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtZHJhd2VyXCIsXG4gICAgICAgICAgICAgICAgICBjbGFzczogW192bS5kaXJlY3Rpb24sIF92bS5jdXN0b21DbGFzc10sXG4gICAgICAgICAgICAgICAgICBzdHlsZTogX3ZtLmlzSG9yaXpvbnRhbFxuICAgICAgICAgICAgICAgICAgICA/IFwid2lkdGg6IFwiICsgX3ZtLmRyYXdlclNpemVcbiAgICAgICAgICAgICAgICAgICAgOiBcImhlaWdodDogXCIgKyBfdm0uZHJhd2VyU2l6ZSxcbiAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgIFwiYXJpYS1tb2RhbFwiOiBcInRydWVcIixcbiAgICAgICAgICAgICAgICAgICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogXCJlbC1kcmF3ZXJfX3RpdGxlXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBfdm0udGl0bGUsXG4gICAgICAgICAgICAgICAgICAgIHJvbGU6IFwiZGlhbG9nXCIsXG4gICAgICAgICAgICAgICAgICAgIHRhYmluZGV4OiBcIi0xXCJcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgIF92bS53aXRoSGVhZGVyXG4gICAgICAgICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICBcImhlYWRlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1kcmF3ZXJfX2hlYWRlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBpZDogXCJlbC1kcmF3ZXJfX3RpdGxlXCIgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl90KFwidGl0bGVcIiwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGF0dHJzOiB7IHJvbGU6IFwiaGVhZGluZ1wiLCB0aXRsZTogX3ZtLnRpdGxlIH0gfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtfdm0uX3YoX3ZtLl9zKF92bS50aXRsZSkpXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5zaG93Q2xvc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtZHJhd2VyX19jbG9zZS1idG5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY2xvc2UgXCIgKyAoX3ZtLnRpdGxlIHx8IFwiZHJhd2VyXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsgY2xpY2s6IF92bS5jbG9zZURyYXdlciB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcImlcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZWwtZGlhbG9nX19jbG9zZSBlbC1pY29uIGVsLWljb24tY2xvc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgICAgIF92bS5yZW5kZXJlZFxuICAgICAgICAgICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJzZWN0aW9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiBcImVsLWRyYXdlcl9fYm9keVwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBbX3ZtLl90KFwiZGVmYXVsdFwiKV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICBdXG4gICAgICAgICAgKVxuICAgICAgICBdXG4gICAgICApXG4gICAgXVxuICApXG59XG52YXIgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkX2E0ODg1MjY0X3N0YXRpY1JlbmRlckZucyA9IFtdXG5tYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfYTQ4ODUyNjRfcmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9kcmF3ZXIvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWE0ODg1MjY0JlxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9kcmF3ZXIvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5cblxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBkcmF3ZXJfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBuYW1lOiAnRWxEcmF3ZXInLFxuICBtaXhpbnM6IFtwb3B1cF9kZWZhdWx0LmEsIGVtaXR0ZXJfZGVmYXVsdC5hXSxcbiAgcHJvcHM6IHtcbiAgICBhcHBlbmRUb0JvZHk6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0sXG4gICAgYmVmb3JlQ2xvc2U6IHtcbiAgICAgIHR5cGU6IEZ1bmN0aW9uXG4gICAgfSxcbiAgICBjdXN0b21DbGFzczoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJydcbiAgICB9LFxuICAgIGNsb3NlT25QcmVzc0VzY2FwZToge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9LFxuICAgIGRlc3Ryb3lPbkNsb3NlOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9LFxuICAgIG1vZGFsOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0sXG4gICAgZGlyZWN0aW9uOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAncnRsJyxcbiAgICAgIHZhbGlkYXRvcjogZnVuY3Rpb24gdmFsaWRhdG9yKHZhbCkge1xuICAgICAgICByZXR1cm4gWydsdHInLCAncnRsJywgJ3R0YicsICdidHQnXS5pbmRleE9mKHZhbCkgIT09IC0xO1xuICAgICAgfVxuICAgIH0sXG4gICAgbW9kYWxBcHBlbmRUb0JvZHk6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSxcbiAgICBzaG93Q2xvc2U6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSxcbiAgICBzaXplOiB7XG4gICAgICB0eXBlOiBbTnVtYmVyLCBTdHJpbmddLFxuICAgICAgZGVmYXVsdDogJzMwJSdcbiAgICB9LFxuICAgIHRpdGxlOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnJ1xuICAgIH0sXG4gICAgdmlzaWJsZToge1xuICAgICAgdHlwZTogQm9vbGVhblxuICAgIH0sXG4gICAgd3JhcHBlckNsb3NhYmxlOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0sXG4gICAgd2l0aEhlYWRlcjoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9XG4gIH0sXG4gIGNvbXB1dGVkOiB7XG4gICAgaXNIb3Jpem9udGFsOiBmdW5jdGlvbiBpc0hvcml6b250YWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5kaXJlY3Rpb24gPT09ICdydGwnIHx8IHRoaXMuZGlyZWN0aW9uID09PSAnbHRyJztcbiAgICB9LFxuICAgIGRyYXdlclNpemU6IGZ1bmN0aW9uIGRyYXdlclNpemUoKSB7XG4gICAgICByZXR1cm4gdHlwZW9mIHRoaXMuc2l6ZSA9PT0gJ251bWJlcicgPyB0aGlzLnNpemUgKyAncHgnIDogdGhpcy5zaXplO1xuICAgIH1cbiAgfSxcbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY2xvc2VkOiBmYWxzZSxcbiAgICAgIHByZXZBY3RpdmVFbGVtZW50OiBudWxsXG4gICAgfTtcbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHZpc2libGU6IGZ1bmN0aW9uIHZpc2libGUodmFsKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICBpZiAodmFsKSB7XG4gICAgICAgIHRoaXMuY2xvc2VkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuJGVtaXQoJ29wZW4nKTtcbiAgICAgICAgaWYgKHRoaXMuYXBwZW5kVG9Cb2R5KSB7XG4gICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLiRlbCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcmV2QWN0aXZlRWxlbWVudCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoIXRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgdGhpcy4kZW1pdCgnY2xvc2UnKTtcbiAgICAgICAgICBpZiAodGhpcy5kZXN0cm95T25DbG9zZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlZCA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKF90aGlzLnByZXZBY3RpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICBfdGhpcy5wcmV2QWN0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBtZXRob2RzOiB7XG4gICAgYWZ0ZXJFbnRlcjogZnVuY3Rpb24gYWZ0ZXJFbnRlcigpIHtcbiAgICAgIHRoaXMuJGVtaXQoJ29wZW5lZCcpO1xuICAgIH0sXG4gICAgYWZ0ZXJMZWF2ZTogZnVuY3Rpb24gYWZ0ZXJMZWF2ZSgpIHtcbiAgICAgIHRoaXMuJGVtaXQoJ2Nsb3NlZCcpO1xuICAgIH0sXG4gICAgaGlkZTogZnVuY3Rpb24gaGlkZShjYW5jZWwpIHtcbiAgICAgIGlmIChjYW5jZWwgIT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTp2aXNpYmxlJywgZmFsc2UpO1xuICAgICAgICB0aGlzLiRlbWl0KCdjbG9zZScpO1xuICAgICAgICBpZiAodGhpcy5kZXN0cm95T25DbG9zZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHRoaXMucmVuZGVyZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNsb3NlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfSxcbiAgICBoYW5kbGVXcmFwcGVyQ2xpY2s6IGZ1bmN0aW9uIGhhbmRsZVdyYXBwZXJDbGljaygpIHtcbiAgICAgIGlmICh0aGlzLndyYXBwZXJDbG9zYWJsZSkge1xuICAgICAgICB0aGlzLmNsb3NlRHJhd2VyKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBjbG9zZURyYXdlcjogZnVuY3Rpb24gY2xvc2VEcmF3ZXIoKSB7XG4gICAgICBpZiAodHlwZW9mIHRoaXMuYmVmb3JlQ2xvc2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5iZWZvcmVDbG9zZSh0aGlzLmhpZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBoYW5kbGVDbG9zZTogZnVuY3Rpb24gaGFuZGxlQ2xvc2UoKSB7XG4gICAgICAvLyBUaGlzIG1ldGhvZCBoZXJlIHdpbGwgYmUgY2FsbGVkIGJ5IFBvcHVwTWFuZ2VyLCB3aGVuIHRoZSBgY2xvc2VPblByZXNzRXNjYXBlYCB3YXMgc2V0IHRvIHRydWVcbiAgICAgIC8vIHByZXNzaW5nIGBFU0NgIHdpbGwgY2FsbCB0aGlzIG1ldGhvZCwgYW5kIGFsc28gY2xvc2UgdGhlIGRyYXdlci5cbiAgICAgIC8vIFRoaXMgbWV0aG9kIGFsc28gY2FsbHMgYGJlZm9yZUNsb3NlYCBpZiB0aGVyZSB3YXMgb25lLlxuICAgICAgdGhpcy5jbG9zZURyYXdlcigpO1xuICAgIH1cbiAgfSxcbiAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCgpIHtcbiAgICBpZiAodGhpcy52aXNpYmxlKSB7XG4gICAgICB0aGlzLnJlbmRlcmVkID0gdHJ1ZTtcbiAgICAgIHRoaXMub3BlbigpO1xuICAgICAgaWYgKHRoaXMuYXBwZW5kVG9Cb2R5KSB7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy4kZWwpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgZGVzdHJveWVkOiBmdW5jdGlvbiBkZXN0cm95ZWQoKSB7XG4gICAgLy8gaWYgYXBwZW5kVG9Cb2R5IGlzIHRydWUsIHJlbW92ZSBET00gbm9kZSBhZnRlciBkZXN0cm95XG4gICAgaWYgKHRoaXMuYXBwZW5kVG9Cb2R5ICYmIHRoaXMuJGVsICYmIHRoaXMuJGVsLnBhcmVudE5vZGUpIHtcbiAgICAgIHRoaXMuJGVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy4kZWwpO1xuICAgIH1cbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2RyYXdlci9zcmMvbWFpbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcGFja2FnZXNfZHJhd2VyX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKGRyYXdlcl9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9kcmF3ZXIvc3JjL21haW4udnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgZHJhd2VyX3NyY19tYWluX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgcGFja2FnZXNfZHJhd2VyX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfYTQ4ODUyNjRfcmVuZGVyLFxuICBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfYTQ4ODUyNjRfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBkcmF3ZXJfc3JjX21haW5fYXBpOyB9XG5kcmF3ZXJfc3JjX21haW5fY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy9kcmF3ZXIvc3JjL21haW4udnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGRyYXdlcl9zcmNfbWFpbiA9IChkcmF3ZXJfc3JjX21haW5fY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9kcmF3ZXIvaW5kZXguanNcblxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuZHJhd2VyX3NyY19tYWluLmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG4gIFZ1ZS5jb21wb25lbnQoZHJhd2VyX3NyY19tYWluLm5hbWUsIGRyYXdlcl9zcmNfbWFpbik7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBkcmF3ZXIgPSAoZHJhd2VyX3NyY19tYWluKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvc3RhdGlzdGljL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03NjMzOWFhNyZcbnZhciBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfNzYzMzlhYTdfcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiZWwtc3RhdGlzdGljXCIgfSwgW1xuICAgIF92bS50aXRsZSB8fCBfdm0uJHNsb3RzLnRpdGxlXG4gICAgICA/IF9jKFxuICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJoZWFkXCIgfSxcbiAgICAgICAgICBbXG4gICAgICAgICAgICBfdm0uX3QoXCJ0aXRsZVwiLCBbXG4gICAgICAgICAgICAgIF9jKFwic3BhblwiLCB7IHN0YXRpY0NsYXNzOiBcInRpdGxlXCIgfSwgW1xuICAgICAgICAgICAgICAgIF92bS5fdihcIlxcbiAgICAgICAgXCIgKyBfdm0uX3MoX3ZtLnRpdGxlKSArIFwiXFxuICAgICAgXCIpXG4gICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICBdKVxuICAgICAgICAgIF0sXG4gICAgICAgICAgMlxuICAgICAgICApXG4gICAgICA6IF92bS5fZSgpLFxuICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiY29uXCIgfSwgW1xuICAgICAgX3ZtLnByZWZpeCB8fCBfdm0uJHNsb3RzLnByZWZpeFxuICAgICAgICA/IF9jKFxuICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiBcInByZWZpeFwiIH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF92bS5fdChcInByZWZpeFwiLCBbXG4gICAgICAgICAgICAgICAgX3ZtLl92KFwiXFxuICAgICAgICBcIiArIF92bS5fcyhfdm0ucHJlZml4KSArIFwiXFxuICAgICAgXCIpXG4gICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgMlxuICAgICAgICAgIClcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgIF9jKFxuICAgICAgICBcInNwYW5cIixcbiAgICAgICAgeyBzdGF0aWNDbGFzczogXCJudW1iZXJcIiwgc3R5bGU6IF92bS52YWx1ZVN0eWxlIH0sXG4gICAgICAgIFtfdm0uX3QoXCJmb3JtYXR0ZXJcIiwgW192bS5fdihcIiBcIiArIF92bS5fcyhfdm0uZGlzcG9zZVZhbHVlKSldKV0sXG4gICAgICAgIDJcbiAgICAgICksXG4gICAgICBfdm0uc3VmZml4IHx8IF92bS4kc2xvdHMuc3VmZml4XG4gICAgICAgID8gX2MoXG4gICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwic3VmZml4XCIgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX3ZtLl90KFwic3VmZml4XCIsIFtcbiAgICAgICAgICAgICAgICBfdm0uX3YoXCJcXG4gICAgICAgIFwiICsgX3ZtLl9zKF92bS5zdWZmaXgpICsgXCJcXG4gICAgICBcIilcbiAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAyXG4gICAgICAgICAgKVxuICAgICAgICA6IF92bS5fZSgpXG4gICAgXSlcbiAgXSlcbn1cbnZhciBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfNzYzMzlhYTdfc3RhdGljUmVuZGVyRm5zID0gW11cbm1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF83NjMzOWFhN19yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3N0YXRpc3RpYy9zcmMvbWFpbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NzYzMzlhYTcmXG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJlbGVtZW50LXVpL2xpYi91dGlscy9sb2Rhc2hcIlxudmFyIGxvZGFzaF8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI4KTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvc3RhdGlzdGljL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzdGF0aXN0aWNfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBuYW1lOiAnRWxTdGF0aXN0aWMnLFxuICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBkaXNwb3NlVmFsdWU6ICcnLFxuICAgICAgdGltZVRhc2s6IG51bGwsXG4gICAgICBSRUZSRVNIX0lOVEVSVkFMOiAxMDAwIC8gMzBcbiAgICB9O1xuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgZGVjaW1hbFNlcGFyYXRvcjoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJy4nXG4gICAgfSxcbiAgICBncm91cFNlcGFyYXRvcjoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJydcbiAgICB9LFxuICAgIHByZWNpc2lvbjoge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0sXG4gICAgdmFsdWU6IHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIE51bWJlciwgRGF0ZV0sXG4gICAgICBkZWZhdWx0OiAnJ1xuICAgIH0sXG4gICAgcHJlZml4OiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnJ1xuICAgIH0sXG4gICAgc3VmZml4OiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnJ1xuICAgIH0sXG4gICAgdGl0bGU6IHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIE51bWJlcl0sXG4gICAgICBkZWZhdWx0OiAnJ1xuICAgIH0sXG4gICAgdGltZUluZGljZXM6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0sXG4gICAgdmFsdWVTdHlsZToge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgZGVmYXVsdDogZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGZvcm1hdDoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ0hIOm1tOnNzOlNTUydcbiAgICB9LFxuICAgIHJhdGU6IHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGRlZmF1bHQ6IDEwMDBcbiAgICB9XG4gIH0sXG4gIGNyZWF0ZWQ6IGZ1bmN0aW9uIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5icmFuY2goKTtcbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHZhbHVlOiBmdW5jdGlvbiB2YWx1ZSgpIHtcbiAgICAgIHRoaXMuYnJhbmNoKCk7XG4gICAgfSxcbiAgICBncm91cFNlcGFyYXRvcjogZnVuY3Rpb24gZ3JvdXBTZXBhcmF0b3IoKSB7XG4gICAgICB0aGlzLmRpc3Bvc2UoKTtcbiAgICB9LFxuICAgIG11bHJpcGxlOiBmdW5jdGlvbiBtdWxyaXBsZSgpIHtcbiAgICAgIHRoaXMuZGlzcG9zZSgpO1xuICAgIH1cbiAgfSxcbiAgbWV0aG9kczoge1xuICAgIGJyYW5jaDogZnVuY3Rpb24gYnJhbmNoKCkge1xuICAgICAgdmFyIHRpbWVJbmRpY2VzID0gdGhpcy50aW1lSW5kaWNlcyxcbiAgICAgICAgICBjb3VudERvd24gPSB0aGlzLmNvdW50RG93bixcbiAgICAgICAgICBkaXNwb3NlID0gdGhpcy5kaXNwb3NlO1xuXG4gICAgICBpZiAodGltZUluZGljZXMpIHtcbiAgICAgICAgY291bnREb3duKHRoaXMudmFsdWUudmFsdWVPZigpIHx8IHRoaXMudmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGlzcG9zZSgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgbWFnbmlmaWNhdGlvbjogZnVuY3Rpb24gbWFnbmlmaWNhdGlvbihudW0pIHtcbiAgICAgIHZhciBtdWxyaXBsZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogMTAwMDtcbiAgICAgIHZhciBncm91cFNlcGFyYXRvciA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogJywnO1xuXG4gICAgICAvLyBtYWduaWZpY2F0aW9uIGZhY3RvclxuICAgICAgdmFyIGxldmVsID0gU3RyaW5nKG11bHJpcGxlKS5sZW5ndGg7XG4gICAgICByZXR1cm4gbnVtLnJlcGxhY2UobmV3IFJlZ0V4cCgnKFxcXFxkKSg/PShcXFxcZHsnICsgKGxldmVsIC0gMSkgKyAnfSkrJCknLCAnZycpLCAnJDEnICsgZ3JvdXBTZXBhcmF0b3IpO1xuICAgIH0sXG4gICAgZGlzcG9zZTogZnVuY3Rpb24gZGlzcG9zZSgpIHtcbiAgICAgIHZhciB2YWx1ZSA9IHRoaXMudmFsdWUsXG4gICAgICAgICAgcmF0ZSA9IHRoaXMucmF0ZSxcbiAgICAgICAgICBncm91cFNlcGFyYXRvciA9IHRoaXMuZ3JvdXBTZXBhcmF0b3I7XG5cbiAgICAgIGlmICghT2JqZWN0KGxvZGFzaF9bXCJpc051bWJlclwiXSkodmFsdWUpKSByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAodGhpcy5wcmVjaXNpb24pIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS50b0ZpeGVkKHRoaXMucHJlY2lzaW9uKTtcbiAgICAgIH1cblxuICAgICAgdmFyIF9TdHJpbmckc3BsaXQgPSBTdHJpbmcodmFsdWUpLnNwbGl0KCcuJyksXG4gICAgICAgICAgaW50ZWdlciA9IF9TdHJpbmckc3BsaXRbMF0sXG4gICAgICAgICAgZGVjaW1hbCA9IF9TdHJpbmckc3BsaXRbMV07XG4gICAgICAvLyAxMDAwIG11bHRpcGx5aW5nIHBvd2VyXG5cblxuICAgICAgaWYgKGdyb3VwU2VwYXJhdG9yKSB7XG4gICAgICAgIGludGVnZXIgPSB0aGlzLm1hZ25pZmljYXRpb24oaW50ZWdlciwgcmF0ZSwgZ3JvdXBTZXBhcmF0b3IpO1xuICAgICAgfVxuICAgICAgdmFyIHJlc3VsdCA9ICcnICsgaW50ZWdlciArIChkZWNpbWFsID8gdGhpcy5kZWNpbWFsU2VwYXJhdG9yICsgZGVjaW1hbCA6ICcnKTtcbiAgICAgIHRoaXMuZGlzcG9zZVZhbHVlID0gcmVzdWx0O1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuICAgIGRpZmZEYXRlOiBmdW5jdGlvbiBkaWZmRGF0ZShtaW51ZW5kLCBzdWJ0cmFoZW5kKSB7XG4gICAgICByZXR1cm4gTWF0aC5tYXgobWludWVuZCAtIHN1YnRyYWhlbmQsIDApO1xuICAgIH0sXG4gICAgc3VzcGVuZDogZnVuY3Rpb24gc3VzcGVuZChpc1N0b3ApIHtcbiAgICAgIGlmIChpc1N0b3ApIHtcbiAgICAgICAgaWYgKHRoaXMudGltZVRhc2spIHtcbiAgICAgICAgICBjbGVhckludGVydmFsKHRoaXMudGltZVRhc2spO1xuICAgICAgICAgIHRoaXMudGltZVRhc2sgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmJyYW5jaCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuZGlzcG9zZVZhbHVlO1xuICAgIH0sXG5cbiAgICBmb3JtYXRUaW1lU3RyOiBmdW5jdGlvbiBmb3JtYXRUaW1lU3RyKHRpbWUpIHtcbiAgICAgIHZhciBmb3JtYXQgPSB0aGlzLmZvcm1hdDtcblxuICAgICAgdmFyIGVzY2FwZVJlZ2V4ID0gL1xcW1teXFxdXSpdL2c7XG4gICAgICB2YXIga2VlcExpc3QgPSAoZm9ybWF0Lm1hdGNoKGVzY2FwZVJlZ2V4KSB8fCBbXSkubWFwKGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgICAgcmV0dXJuIHN0ci5zbGljZSgxLCAtMSk7XG4gICAgICB9KTtcbiAgICAgIHZhciB0aW1lVW5pdHMgPSBbWydZJywgMTAwMCAqIDYwICogNjAgKiAyNCAqIDM2NV0sIC8vIHllYXJzXG4gICAgICBbJ00nLCAxMDAwICogNjAgKiA2MCAqIDI0ICogMzBdLCAvLyBtb250aHNcbiAgICAgIFsnRCcsIDEwMDAgKiA2MCAqIDYwICogMjRdLCAvLyBkYXlzXG4gICAgICBbJ0gnLCAxMDAwICogNjAgKiA2MF0sIC8vIGhvdXJzXG4gICAgICBbJ20nLCAxMDAwICogNjBdLCAvLyBtaW51dGVzXG4gICAgICBbJ3MnLCAxMDAwXSwgLy8gc2Vjb25kc1xuICAgICAgWydTJywgMV0gLy8gbWlsbGlvbiBzZWNvbmRzXG4gICAgICBdO1xuICAgICAgdmFyIGZvcm1hdFRleHQgPSBPYmplY3QobG9kYXNoX1tcInJlZHVjZVwiXSkodGltZVVuaXRzLCBmdW5jdGlvbiAoY29uLCBpdGVtKSB7XG4gICAgICAgIHZhciBuYW1lID0gaXRlbVswXTtcbiAgICAgICAgcmV0dXJuIGNvbi5yZXBsYWNlKG5ldyBSZWdFeHAobmFtZSArICcrJywgJ2cnKSwgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgdmFyIHN1bSA9IE9iamVjdChsb2Rhc2hfW1wiY2hhaW5cIl0pKHRpbWUpLmRpdmlkZShpdGVtWzFdKS5mbG9vcigwKS52YWx1ZSgpO1xuICAgICAgICAgIHRpbWUgLT0gT2JqZWN0KGxvZGFzaF9bXCJtdWx0aXBseVwiXSkoc3VtLCBpdGVtWzFdKTtcbiAgICAgICAgICByZXR1cm4gT2JqZWN0KGxvZGFzaF9bXCJwYWRTdGFydFwiXSkoU3RyaW5nKHN1bSksIFN0cmluZyhtYXRjaCkubGVuZ3RoLCAwKTtcbiAgICAgICAgfSk7XG4gICAgICB9LCBmb3JtYXQpO1xuICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgIHJldHVybiBmb3JtYXRUZXh0LnJlcGxhY2UoZXNjYXBlUmVnZXgsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG1hdGNoID0ga2VlcExpc3RbaW5kZXhdO1xuICAgICAgICBpbmRleCArPSAxO1xuICAgICAgICByZXR1cm4gbWF0Y2g7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIHN0b3BUaW1lOiBmdW5jdGlvbiBzdG9wVGltZSh0aW1lKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gdHJ1ZTsgLy8gc3RvcFxuICAgICAgaWYgKHRpbWUpIHtcbiAgICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgdGltZSk7XG4gICAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zdXNwZW5kKHRydWUpO1xuICAgICAgICB0aGlzLiRlbWl0KCdmaW5pc2gnLCB0cnVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcbiAgICBjb3VudERvd246IGZ1bmN0aW9uIGNvdW50RG93bih0aW1lVmxhdWUpIHtcbiAgICAgIHZhciBSRUZSRVNIX0lOVEVSVkFMID0gdGhpcy5SRUZSRVNIX0lOVEVSVkFMLFxuICAgICAgICAgIHRpbWVUYXNrID0gdGhpcy50aW1lVGFzayxcbiAgICAgICAgICBkaWZmRGF0ZSA9IHRoaXMuZGlmZkRhdGUsXG4gICAgICAgICAgZm9ybWF0VGltZVN0ciA9IHRoaXMuZm9ybWF0VGltZVN0cixcbiAgICAgICAgICBzdG9wVGltZSA9IHRoaXMuc3RvcFRpbWUsXG4gICAgICAgICAgc3VzcGVuZCA9IHRoaXMuc3VzcGVuZDtcblxuICAgICAgaWYgKHRpbWVUYXNrKSByZXR1cm47XG4gICAgICB2YXIgdGhhbiA9IHRoaXM7XG4gICAgICB0aGlzLnRpbWVUYXNrID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZGlmZlRpZW0gPSBkaWZmRGF0ZSh0aW1lVmxhdWUsIERhdGUubm93KCkpO1xuICAgICAgICB0aGFuLmRpc3Bvc2VWYWx1ZSA9IGZvcm1hdFRpbWVTdHIoZGlmZlRpZW0pO1xuICAgICAgICBzdG9wVGltZShkaWZmVGllbSk7XG4gICAgICB9LCBSRUZSRVNIX0lOVEVSVkFMKTtcbiAgICAgIHRoaXMuJG9uY2UoJ2hvb2s6YmVmb3JlRGVzdHJveScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc3VzcGVuZCh0cnVlKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3N0YXRpc3RpYy9zcmMvbWFpbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcGFja2FnZXNfc3RhdGlzdGljX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHN0YXRpc3RpY19zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9zdGF0aXN0aWMvc3JjL21haW4udnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgc3RhdGlzdGljX3NyY19tYWluX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgcGFja2FnZXNfc3RhdGlzdGljX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfNzYzMzlhYTdfcmVuZGVyLFxuICBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfNzYzMzlhYTdfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBzdGF0aXN0aWNfc3JjX21haW5fYXBpOyB9XG5zdGF0aXN0aWNfc3JjX21haW5fY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy9zdGF0aXN0aWMvc3JjL21haW4udnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHN0YXRpc3RpY19zcmNfbWFpbiA9IChzdGF0aXN0aWNfc3JjX21haW5fY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9zdGF0aXN0aWMvaW5kZXguanNcblxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuc3RhdGlzdGljX3NyY19tYWluLmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG4gIFZ1ZS5jb21wb25lbnQoc3RhdGlzdGljX3NyY19tYWluLm5hbWUsIHN0YXRpc3RpY19zcmNfbWFpbik7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzdGF0aXN0aWMgPSAoc3RhdGlzdGljX3NyY19tYWluKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvcG9wY29uZmlybS9zcmMvbWFpbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MDQ4ZGU3MzAmXG52YXIgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzA0OGRlNzMwX3JlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImVsLXBvcG92ZXJcIixcbiAgICBfdm0uX2IoXG4gICAgICB7XG4gICAgICAgIGF0dHJzOiB7IHRyaWdnZXI6IFwiY2xpY2tcIiB9LFxuICAgICAgICBtb2RlbDoge1xuICAgICAgICAgIHZhbHVlOiBfdm0udmlzaWJsZSxcbiAgICAgICAgICBjYWxsYmFjazogZnVuY3Rpb24oJCR2KSB7XG4gICAgICAgICAgICBfdm0udmlzaWJsZSA9ICQkdlxuICAgICAgICAgIH0sXG4gICAgICAgICAgZXhwcmVzc2lvbjogXCJ2aXNpYmxlXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwiZWwtcG9wb3ZlclwiLFxuICAgICAgX3ZtLiRhdHRycyxcbiAgICAgIGZhbHNlXG4gICAgKSxcbiAgICBbXG4gICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLXBvcGNvbmZpcm1cIiB9LCBbXG4gICAgICAgIF9jKFwicFwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLXBvcGNvbmZpcm1fX21haW5cIiB9LCBbXG4gICAgICAgICAgIV92bS5oaWRlSWNvblxuICAgICAgICAgICAgPyBfYyhcImlcIiwge1xuICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXBvcGNvbmZpcm1fX2ljb25cIixcbiAgICAgICAgICAgICAgICBjbGFzczogX3ZtLmljb24sXG4gICAgICAgICAgICAgICAgc3R5bGU6IHsgY29sb3I6IF92bS5pY29uQ29sb3IgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICBfdm0uX3YoXCJcXG4gICAgICBcIiArIF92bS5fcyhfdm0udGl0bGUpICsgXCJcXG4gICAgXCIpXG4gICAgICAgIF0pLFxuICAgICAgICBfYyhcbiAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwiZWwtcG9wY29uZmlybV9fYWN0aW9uXCIgfSxcbiAgICAgICAgICBbXG4gICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgXCJlbC1idXR0b25cIixcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGF0dHJzOiB7IHNpemU6IFwibWluaVwiLCB0eXBlOiBfdm0uY2FuY2VsQnV0dG9uVHlwZSB9LFxuICAgICAgICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0uY2FuY2VsIH1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIF92bS5fdihcbiAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICBcIiArXG4gICAgICAgICAgICAgICAgICAgIF92bS5fcyhfdm0uZGlzcGxheUNhbmNlbEJ1dHRvblRleHQpICtcbiAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICBcIlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICBcImVsLWJ1dHRvblwiLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYXR0cnM6IHsgc2l6ZTogXCJtaW5pXCIsIHR5cGU6IF92bS5jb25maXJtQnV0dG9uVHlwZSB9LFxuICAgICAgICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0uY29uZmlybSB9XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgXCIgK1xuICAgICAgICAgICAgICAgICAgICBfdm0uX3MoX3ZtLmRpc3BsYXlDb25maXJtQnV0dG9uVGV4dCkgK1xuICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgIFwiXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICApXG4gICAgICAgICAgXSxcbiAgICAgICAgICAxXG4gICAgICAgIClcbiAgICAgIF0pLFxuICAgICAgX3ZtLl90KFwicmVmZXJlbmNlXCIsIG51bGwsIHsgc2xvdDogXCJyZWZlcmVuY2VcIiB9KVxuICAgIF0sXG4gICAgMlxuICApXG59XG52YXIgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzA0OGRlNzMwX3N0YXRpY1JlbmRlckZucyA9IFtdXG5tYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfMDQ4ZGU3MzBfcmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9wb3Bjb25maXJtL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wNDhkZTczMCZcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcImVsZW1lbnQtdWkvbGliL3BvcG92ZXJcIlxudmFyIHBvcG92ZXJfID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0NSk7XG52YXIgcG9wb3Zlcl9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihwb3BvdmVyXyk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3BvcGNvbmZpcm0vc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuXG5cblxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwb3Bjb25maXJtX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbmFtZTogJ0VsUG9wY29uZmlybScsXG4gIHByb3BzOiB7XG4gICAgdGl0bGU6IHtcbiAgICAgIHR5cGU6IFN0cmluZ1xuICAgIH0sXG4gICAgY29uZmlybUJ1dHRvblRleHQ6IHtcbiAgICAgIHR5cGU6IFN0cmluZ1xuICAgIH0sXG4gICAgY2FuY2VsQnV0dG9uVGV4dDoge1xuICAgICAgdHlwZTogU3RyaW5nXG4gICAgfSxcbiAgICBjb25maXJtQnV0dG9uVHlwZToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ3ByaW1hcnknXG4gICAgfSxcbiAgICBjYW5jZWxCdXR0b25UeXBlOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAndGV4dCdcbiAgICB9LFxuICAgIGljb246IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdlbC1pY29uLXF1ZXN0aW9uJ1xuICAgIH0sXG4gICAgaWNvbkNvbG9yOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnI2Y5MCdcbiAgICB9LFxuICAgIGhpZGVJY29uOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9XG4gIH0sXG4gIGNvbXBvbmVudHM6IHtcbiAgICBFbFBvcG92ZXI6IHBvcG92ZXJfZGVmYXVsdC5hLFxuICAgIEVsQnV0dG9uOiBidXR0b25fZGVmYXVsdC5hXG4gIH0sXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZpc2libGU6IGZhbHNlXG4gICAgfTtcbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGRpc3BsYXlDb25maXJtQnV0dG9uVGV4dDogZnVuY3Rpb24gZGlzcGxheUNvbmZpcm1CdXR0b25UZXh0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29uZmlybUJ1dHRvblRleHQgfHwgT2JqZWN0KGxpYl9sb2NhbGVfW1widFwiXSkoJ2VsLnBvcGNvbmZpcm0uY29uZmlybUJ1dHRvblRleHQnKTtcbiAgICB9LFxuICAgIGRpc3BsYXlDYW5jZWxCdXR0b25UZXh0OiBmdW5jdGlvbiBkaXNwbGF5Q2FuY2VsQnV0dG9uVGV4dCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNhbmNlbEJ1dHRvblRleHQgfHwgT2JqZWN0KGxpYl9sb2NhbGVfW1widFwiXSkoJ2VsLnBvcGNvbmZpcm0uY2FuY2VsQnV0dG9uVGV4dCcpO1xuICAgIH1cbiAgfSxcbiAgbWV0aG9kczoge1xuICAgIGNvbmZpcm06IGZ1bmN0aW9uIGNvbmZpcm0oKSB7XG4gICAgICB0aGlzLnZpc2libGUgPSBmYWxzZTtcbiAgICAgIHRoaXMuJGVtaXQoJ2NvbmZpcm0nKTtcbiAgICB9LFxuICAgIGNhbmNlbDogZnVuY3Rpb24gY2FuY2VsKCkge1xuICAgICAgdGhpcy52aXNpYmxlID0gZmFsc2U7XG4gICAgICB0aGlzLiRlbWl0KCdjYW5jZWwnKTtcbiAgICB9XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9wb3Bjb25maXJtL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc19wb3Bjb25maXJtX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHBvcGNvbmZpcm1fc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvcG9wY29uZmlybS9zcmMvbWFpbi52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBwb3Bjb25maXJtX3NyY19tYWluX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgcGFja2FnZXNfcG9wY29uZmlybV9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzA0OGRlNzMwX3JlbmRlcixcbiAgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzA0OGRlNzMwX3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgcG9wY29uZmlybV9zcmNfbWFpbl9hcGk7IH1cbnBvcGNvbmZpcm1fc3JjX21haW5fY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy9wb3Bjb25maXJtL3NyYy9tYWluLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwb3Bjb25maXJtX3NyY19tYWluID0gKHBvcGNvbmZpcm1fc3JjX21haW5fY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9wb3Bjb25maXJtL2luZGV4LmpzXG5cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbnBvcGNvbmZpcm1fc3JjX21haW4uaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcbiAgVnVlLmNvbXBvbmVudChwb3Bjb25maXJtX3NyY19tYWluLm5hbWUsIHBvcGNvbmZpcm1fc3JjX21haW4pO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcG9wY29uZmlybSA9IChwb3Bjb25maXJtX3NyY19tYWluKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvc2tlbGV0b24vc3JjL2luZGV4LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03ZjY1OTI2OSZcbnZhciBzcmN2dWVfdHlwZV90ZW1wbGF0ZV9pZF83ZjY1OTI2OV9yZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICBbXG4gICAgICBfdm0udWlMb2FkaW5nXG4gICAgICAgID8gW1xuICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgIF92bS5fYihcbiAgICAgICAgICAgICAgICB7IGNsYXNzOiBbXCJlbC1za2VsZXRvblwiLCBfdm0uYW5pbWF0ZWQgPyBcImlzLWFuaW1hdGVkXCIgOiBcIlwiXSB9LFxuICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgX3ZtLiRhdHRycyxcbiAgICAgICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgX3ZtLl9sKF92bS5jb3VudCwgZnVuY3Rpb24oaSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAgX3ZtLmxvYWRpbmdcbiAgICAgICAgICAgICAgICAgICAgICA/IF92bS5fdChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0ZW1wbGF0ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX2woX3ZtLnJvd3MsIGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2MoXCJlbC1za2VsZXRvbi1pdGVtXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogaSArIFwiLVwiICsgaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZWwtc2tlbGV0b25fX3BhcmFncmFwaFwiOiBpdGVtICE9PSAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImlzLWZpcnN0XCI6IGl0ZW0gPT09IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaXMtbGFzdFwiOiBpdGVtID09PSBfdm0ucm93cyAmJiBfdm0ucm93cyA+IDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyB2YXJpYW50OiBcInBcIiB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgKVxuICAgICAgICAgIF1cbiAgICAgICAgOiBbX3ZtLl90KFwiZGVmYXVsdFwiLCBudWxsLCBudWxsLCBfdm0uJGF0dHJzKV1cbiAgICBdLFxuICAgIDJcbiAgKVxufVxudmFyIHNyY3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzdmNjU5MjY5X3N0YXRpY1JlbmRlckZucyA9IFtdXG5zcmN2dWVfdHlwZV90ZW1wbGF0ZV9pZF83ZjY1OTI2OV9yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3NrZWxldG9uL3NyYy9pbmRleC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9N2Y2NTkyNjkmXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3NrZWxldG9uL3NyYy9pbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBza2VsZXRvbl9zcmN2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBuYW1lOiAnRWxTa2VsZXRvbicsXG4gIHByb3BzOiB7XG4gICAgYW5pbWF0ZWQ6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0sXG4gICAgY291bnQ6IHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGRlZmF1bHQ6IDFcbiAgICB9LFxuICAgIHJvd3M6IHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGRlZmF1bHQ6IDRcbiAgICB9LFxuICAgIGxvYWRpbmc6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSxcbiAgICB0aHJvdHRsZToge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZGVmYXVsdDogMFxuICAgIH1cbiAgfSxcbiAgd2F0Y2g6IHtcbiAgICBsb2FkaW5nOiB7XG4gICAgICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKGxvYWRpbmcpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgICBpZiAodGhpcy50aHJvdHRsZSA8PSAwKSB7XG4gICAgICAgICAgdGhpcy51aUxvYWRpbmcgPSBsb2FkaW5nO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG9hZGluZykge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXRIYW5kbGUpO1xuICAgICAgICAgIHRoaXMudGltZW91dEhhbmRsZSA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMudWlMb2FkaW5nID0gX3RoaXMubG9hZGluZztcbiAgICAgICAgICB9LCB0aGlzLnRocm90dGxlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnVpTG9hZGluZyA9IGxvYWRpbmc7XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIGltbWVkaWF0ZTogdHJ1ZVxuICAgIH1cbiAgfSxcbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdWlMb2FkaW5nOiB0aGlzLnRocm90dGxlIDw9IDAgPyB0aGlzLmxvYWRpbmcgOiBmYWxzZVxuICAgIH07XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9za2VsZXRvbi9zcmMvaW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhY2thZ2VzX3NrZWxldG9uX3NyY3Z1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChza2VsZXRvbl9zcmN2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvc2tlbGV0b24vc3JjL2luZGV4LnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIHNrZWxldG9uX3NyY19jb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIHBhY2thZ2VzX3NrZWxldG9uX3NyY3Z1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgc3JjdnVlX3R5cGVfdGVtcGxhdGVfaWRfN2Y2NTkyNjlfcmVuZGVyLFxuICBzcmN2dWVfdHlwZV90ZW1wbGF0ZV9pZF83ZjY1OTI2OV9zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIHNrZWxldG9uX3NyY19hcGk7IH1cbnNrZWxldG9uX3NyY19jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL3NrZWxldG9uL3NyYy9pbmRleC52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc2tlbGV0b25fc3JjID0gKHNrZWxldG9uX3NyY19jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3NrZWxldG9uL2luZGV4LmpzXG5cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbnNrZWxldG9uX3NyYy5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuICBWdWUuY29tcG9uZW50KHNrZWxldG9uX3NyYy5uYW1lLCBza2VsZXRvbl9zcmMpO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc2tlbGV0b24gPSAoc2tlbGV0b25fc3JjKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvc2tlbGV0b24vc3JjL2l0ZW0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTRiYzg4MDRjJlxudmFyIGl0ZW12dWVfdHlwZV90ZW1wbGF0ZV9pZF80YmM4ODA0Y19yZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICB7IGNsYXNzOiBbXCJlbC1za2VsZXRvbl9faXRlbVwiLCBcImVsLXNrZWxldG9uX19cIiArIF92bS52YXJpYW50XSB9LFxuICAgIFtfdm0udmFyaWFudCA9PT0gXCJpbWFnZVwiID8gX2MoXCJpbWctcGxhY2Vob2xkZXJcIikgOiBfdm0uX2UoKV0sXG4gICAgMVxuICApXG59XG52YXIgaXRlbXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzRiYzg4MDRjX3N0YXRpY1JlbmRlckZucyA9IFtdXG5pdGVtdnVlX3R5cGVfdGVtcGxhdGVfaWRfNGJjODgwNGNfcmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9za2VsZXRvbi9zcmMvaXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NGJjODgwNGMmXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvc2tlbGV0b24vc3JjL2ltZy1wbGFjZWhvbGRlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MWIyY2I1YzAmXG52YXIgaW1nX3BsYWNlaG9sZGVydnVlX3R5cGVfdGVtcGxhdGVfaWRfMWIyY2I1YzBfcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwic3ZnXCIsXG4gICAge1xuICAgICAgYXR0cnM6IHsgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgfVxuICAgIH0sXG4gICAgW1xuICAgICAgX2MoXCJwYXRoXCIsIHtcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICBkOlxuICAgICAgICAgICAgXCJNNjQgODk2VjEyOGg4OTZ2NzY4SDY0eiBtNjQtMTI4bDE5Mi0xOTIgMTE2LjM1MiAxMTYuMzUyTDY0MCA0NDhsMjU2IDMwNy4yVjE5MkgxMjh2NTc2eiBtMjI0LTQ4MGE5NiA5NiAwIDEgMS0wLjA2NCAxOTIuMDY0QTk2IDk2IDAgMCAxIDM1MiAyODh6XCJcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICBdXG4gIClcbn1cbnZhciBpbWdfcGxhY2Vob2xkZXJ2dWVfdHlwZV90ZW1wbGF0ZV9pZF8xYjJjYjVjMF9zdGF0aWNSZW5kZXJGbnMgPSBbXVxuaW1nX3BsYWNlaG9sZGVydnVlX3R5cGVfdGVtcGxhdGVfaWRfMWIyY2I1YzBfcmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9za2VsZXRvbi9zcmMvaW1nLXBsYWNlaG9sZGVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xYjJjYjVjMCZcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvc2tlbGV0b24vc3JjL2ltZy1wbGFjZWhvbGRlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgaW1nX3BsYWNlaG9sZGVydnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbmFtZTogJ0ltZ1BsYWNlaG9sZGVyJ1xufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3NrZWxldG9uL3NyYy9pbWctcGxhY2Vob2xkZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY19pbWdfcGxhY2Vob2xkZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoaW1nX3BsYWNlaG9sZGVydnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3NrZWxldG9uL3NyYy9pbWctcGxhY2Vob2xkZXIudnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgaW1nX3BsYWNlaG9sZGVyX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgc3JjX2ltZ19wbGFjZWhvbGRlcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgaW1nX3BsYWNlaG9sZGVydnVlX3R5cGVfdGVtcGxhdGVfaWRfMWIyY2I1YzBfcmVuZGVyLFxuICBpbWdfcGxhY2Vob2xkZXJ2dWVfdHlwZV90ZW1wbGF0ZV9pZF8xYjJjYjVjMF9zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGltZ19wbGFjZWhvbGRlcl9hcGk7IH1cbmltZ19wbGFjZWhvbGRlcl9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL3NrZWxldG9uL3NyYy9pbWctcGxhY2Vob2xkZXIudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGltZ19wbGFjZWhvbGRlciA9IChpbWdfcGxhY2Vob2xkZXJfY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvc2tlbGV0b24vc3JjL2l0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxudmFyIF9jb21wb25lbnRzO1xuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cblxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBza2VsZXRvbl9zcmNfaXRlbXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG5hbWU6ICdFbFNrZWxldG9uSXRlbScsXG4gIHByb3BzOiB7XG4gICAgdmFyaWFudDoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ3RleHQnXG4gICAgfVxuICB9LFxuICBjb21wb25lbnRzOiAoX2NvbXBvbmVudHMgPSB7fSwgX2NvbXBvbmVudHNbaW1nX3BsYWNlaG9sZGVyLm5hbWVdID0gaW1nX3BsYWNlaG9sZGVyLCBfY29tcG9uZW50cylcbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9za2VsZXRvbi9zcmMvaXRlbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcGFja2FnZXNfc2tlbGV0b25fc3JjX2l0ZW12dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoc2tlbGV0b25fc3JjX2l0ZW12dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvc2tlbGV0b24vc3JjL2l0ZW0udnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgc2tlbGV0b25fc3JjX2l0ZW1fY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBwYWNrYWdlc19za2VsZXRvbl9zcmNfaXRlbXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgaXRlbXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzRiYzg4MDRjX3JlbmRlcixcbiAgaXRlbXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzRiYzg4MDRjX3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgc2tlbGV0b25fc3JjX2l0ZW1fYXBpOyB9XG5za2VsZXRvbl9zcmNfaXRlbV9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL3NrZWxldG9uL3NyYy9pdGVtLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBza2VsZXRvbl9zcmNfaXRlbSA9IChza2VsZXRvbl9zcmNfaXRlbV9jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3NrZWxldG9uLWl0ZW0vaW5kZXguanNcblxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuc2tlbGV0b25fc3JjX2l0ZW0uaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcbiAgVnVlLmNvbXBvbmVudChza2VsZXRvbl9zcmNfaXRlbS5uYW1lLCBza2VsZXRvbl9zcmNfaXRlbSk7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBza2VsZXRvbl9pdGVtID0gKHNrZWxldG9uX3NyY19pdGVtKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvZW1wdHkvc3JjL2luZGV4LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zNDdjZWQ5MSZcbnZhciBzcmN2dWVfdHlwZV90ZW1wbGF0ZV9pZF8zNDdjZWQ5MV9yZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJlbC1lbXB0eVwiIH0sIFtcbiAgICBfYyhcbiAgICAgIFwiZGl2XCIsXG4gICAgICB7IHN0YXRpY0NsYXNzOiBcImVsLWVtcHR5X19pbWFnZVwiLCBzdHlsZTogX3ZtLmltYWdlU3R5bGUgfSxcbiAgICAgIFtcbiAgICAgICAgX3ZtLmltYWdlXG4gICAgICAgICAgPyBfYyhcImltZ1wiLCB7XG4gICAgICAgICAgICAgIGF0dHJzOiB7IHNyYzogX3ZtLmltYWdlLCBvbmRyYWdzdGFydDogXCJyZXR1cm4gZmFsc2VcIiB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIDogX3ZtLl90KFwiaW1hZ2VcIiwgW19jKFwiaW1nLWVtcHR5XCIpXSlcbiAgICAgIF0sXG4gICAgICAyXG4gICAgKSxcbiAgICBfYyhcbiAgICAgIFwiZGl2XCIsXG4gICAgICB7IHN0YXRpY0NsYXNzOiBcImVsLWVtcHR5X19kZXNjcmlwdGlvblwiIH0sXG4gICAgICBbXG4gICAgICAgIF92bS4kc2xvdHMuZGVzY3JpcHRpb25cbiAgICAgICAgICA/IF92bS5fdChcImRlc2NyaXB0aW9uXCIpXG4gICAgICAgICAgOiBfYyhcInBcIiwgW192bS5fdihfdm0uX3MoX3ZtLmVtcHR5RGVzY3JpcHRpb24pKV0pXG4gICAgICBdLFxuICAgICAgMlxuICAgICksXG4gICAgX3ZtLiRzbG90cy5kZWZhdWx0XG4gICAgICA/IF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiZWwtZW1wdHlfX2JvdHRvbVwiIH0sIFtfdm0uX3QoXCJkZWZhdWx0XCIpXSwgMilcbiAgICAgIDogX3ZtLl9lKClcbiAgXSlcbn1cbnZhciBzcmN2dWVfdHlwZV90ZW1wbGF0ZV9pZF8zNDdjZWQ5MV9zdGF0aWNSZW5kZXJGbnMgPSBbXVxuc3JjdnVlX3R5cGVfdGVtcGxhdGVfaWRfMzQ3Y2VkOTFfcmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9lbXB0eS9zcmMvaW5kZXgudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTM0N2NlZDkxJlxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2VtcHR5L3NyYy9pbWctZW1wdHkudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTQyOTE4YjgyJlxudmFyIGltZ19lbXB0eXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzQyOTE4YjgyX3JlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcInN2Z1wiLFxuICAgIHtcbiAgICAgIGF0dHJzOiB7XG4gICAgICAgIHZpZXdCb3g6IFwiMCAwIDc5IDg2XCIsXG4gICAgICAgIHZlcnNpb246IFwiMS4xXCIsXG4gICAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICAgIFwieG1sbnM6eGxpbmtcIjogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCJcbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIF9jKFxuICAgICAgICBcImRlZnNcIixcbiAgICAgICAgW1xuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgIGlkOiBcImxpbmVhckdyYWRpZW50LTEtXCIgKyBfdm0uaWQsXG4gICAgICAgICAgICAgICAgeDE6IFwiMzguODUwMzA4NiVcIixcbiAgICAgICAgICAgICAgICB5MTogXCIwJVwiLFxuICAgICAgICAgICAgICAgIHgyOiBcIjYxLjE0OTY5MTQlXCIsXG4gICAgICAgICAgICAgICAgeTI6IFwiMTAwJVwiXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF9jKFwic3RvcFwiLCB7IGF0dHJzOiB7IFwic3RvcC1jb2xvclwiOiBcIiNGQ0ZDRkRcIiwgb2Zmc2V0OiBcIjAlXCIgfSB9KSxcbiAgICAgICAgICAgICAgX2MoXCJzdG9wXCIsIHsgYXR0cnM6IHsgXCJzdG9wLWNvbG9yXCI6IFwiI0VFRUZGM1wiLCBvZmZzZXQ6IFwiMTAwJVwiIH0gfSlcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAxXG4gICAgICAgICAgKSxcbiAgICAgICAgICBfYyhcbiAgICAgICAgICAgIFwibGluZWFyR3JhZGllbnRcIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICBpZDogXCJsaW5lYXJHcmFkaWVudC0yLVwiICsgX3ZtLmlkLFxuICAgICAgICAgICAgICAgIHgxOiBcIjAlXCIsXG4gICAgICAgICAgICAgICAgeTE6IFwiOS41JVwiLFxuICAgICAgICAgICAgICAgIHgyOiBcIjEwMCVcIixcbiAgICAgICAgICAgICAgICB5MjogXCI5MC41JVwiXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF9jKFwic3RvcFwiLCB7IGF0dHJzOiB7IFwic3RvcC1jb2xvclwiOiBcIiNGQ0ZDRkRcIiwgb2Zmc2V0OiBcIjAlXCIgfSB9KSxcbiAgICAgICAgICAgICAgX2MoXCJzdG9wXCIsIHsgYXR0cnM6IHsgXCJzdG9wLWNvbG9yXCI6IFwiI0U5RUJFRlwiLCBvZmZzZXQ6IFwiMTAwJVwiIH0gfSlcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAxXG4gICAgICAgICAgKSxcbiAgICAgICAgICBfYyhcInJlY3RcIiwge1xuICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgaWQ6IFwicGF0aC0zLVwiICsgX3ZtLmlkLFxuICAgICAgICAgICAgICB4OiBcIjBcIixcbiAgICAgICAgICAgICAgeTogXCIwXCIsXG4gICAgICAgICAgICAgIHdpZHRoOiBcIjE3XCIsXG4gICAgICAgICAgICAgIGhlaWdodDogXCIzNlwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgXSxcbiAgICAgICAgMVxuICAgICAgKSxcbiAgICAgIF9jKFxuICAgICAgICBcImdcIixcbiAgICAgICAge1xuICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICBpZDogXCJJbGx1c3RyYXRpb25zXCIsXG4gICAgICAgICAgICBzdHJva2U6IFwibm9uZVwiLFxuICAgICAgICAgICAgXCJzdHJva2Utd2lkdGhcIjogXCIxXCIsXG4gICAgICAgICAgICBmaWxsOiBcIm5vbmVcIixcbiAgICAgICAgICAgIFwiZmlsbC1ydWxlXCI6IFwiZXZlbm9kZFwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBbXG4gICAgICAgICAgX2MoXG4gICAgICAgICAgICBcImdcIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICBpZDogXCJCLXR5cGVcIixcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKC0xMjY4LjAwMDAwMCwgLTUzNS4wMDAwMDApXCJcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgXCJnXCIsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IFwiR3JvdXAtMlwiLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDEyNjguMDAwMDAwLCA1MzUuMDAwMDAwKVwiXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBfYyhcInBhdGhcIiwge1xuICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgIGlkOiBcIk92YWwtQ29weS0yXCIsXG4gICAgICAgICAgICAgICAgICAgICAgZDpcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiTTM5LjUsODYgQzYxLjMxNTI0NzYsODYgNzksODMuOTEwNjYyMiA3OSw4MS4zMzMzMzMzIEM3OSw3OC43NTYwMDQ1IDU3LjMxNTI0NzYsNzggMzUuNSw3OCBDMTMuNjg0NzUyNCw3OCAwLDc4Ljc1NjAwNDUgMCw4MS4zMzMzMzMzIEMwLDgzLjkxMDY2MjIgMTcuNjg0NzUyNCw4NiAzOS41LDg2IFpcIixcbiAgICAgICAgICAgICAgICAgICAgICBmaWxsOiBcIiNGN0Y4RkNcIlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgIF9jKFwicG9seWdvblwiLCB7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgaWQ6IFwiUmVjdGFuZ2xlLUNvcHktMTRcIixcbiAgICAgICAgICAgICAgICAgICAgICBmaWxsOiBcIiNFNUU3RTlcIixcbiAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06XG4gICAgICAgICAgICAgICAgICAgICAgICBcInRyYW5zbGF0ZSgyNy41MDAwMDAsIDUxLjUwMDAwMCkgc2NhbGUoMSwgLTEpIHRyYW5zbGF0ZSgtMjcuNTAwMDAwLCAtNTEuNTAwMDAwKSBcIixcbiAgICAgICAgICAgICAgICAgICAgICBwb2ludHM6IFwiMTMgNTggNTMgNTggNDIgNDUgMiA0NVwiXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgIFwiZ1wiLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcIkdyb3VwLUNvcHlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0cmFuc2xhdGUoMzQuNTAwMDAwLCAzMS41MDAwMDApIHNjYWxlKC0xLCAxKSByb3RhdGUoLTI1LjAwMDAwMCkgdHJhbnNsYXRlKC0zNC41MDAwMDAsIC0zMS41MDAwMDApIHRyYW5zbGF0ZSg3LjAwMDAwMCwgMTAuMDAwMDAwKVwiXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgX2MoXCJwb2x5Z29uXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcIlJlY3RhbmdsZS1Db3B5LTEwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6IFwiI0U1RTdFOVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0cmFuc2xhdGUoMTEuNTAwMDAwLCA1LjAwMDAwMCkgc2NhbGUoMSwgLTEpIHRyYW5zbGF0ZSgtMTEuNTAwMDAwLCAtNS4wMDAwMDApIFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHM6IFwiMi44NDA3ODMxNmUtMTQgMyAxOCAzIDIzIDcgNSA3XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICBfYyhcInBvbHlnb25cIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IFwiUmVjdGFuZ2xlLUNvcHktMTFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDogXCIjRURFRUYyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50czpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIi0zLjY5MTQ5MTU2ZS0xNSA3IDM4IDcgMzggNDMgLTMuNjkxNDkxNTZlLTE1IDQzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICBfYyhcInJlY3RcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IFwiUmVjdGFuZ2xlLUNvcHktMTJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDogXCJ1cmwoI2xpbmVhckdyYWRpZW50LTEtXCIgKyBfdm0uaWQgKyBcIilcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidHJhbnNsYXRlKDQ2LjUwMDAwMCwgMjUuMDAwMDAwKSBzY2FsZSgtMSwgMSkgdHJhbnNsYXRlKC00Ni41MDAwMDAsIC0yNS4wMDAwMDApIFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB4OiBcIjM4XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHk6IFwiN1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogXCIxN1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IFwiMzZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgIF9jKFwicG9seWdvblwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogXCJSZWN0YW5nbGUtQ29weS0xM1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsOiBcIiNGOEY5RkJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidHJhbnNsYXRlKDM5LjUwMDAwMCwgMy41MDAwMDApIHNjYWxlKC0xLCAxKSB0cmFuc2xhdGUoLTM5LjUwMDAwMCwgLTMuNTAwMDAwKSBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiMjQgNyA0MSA3IDU1IC0zLjYzODA2MjA3ZS0xMiAzOCAtMy42MzgwNjIwN2UtMTJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBfYyhcInJlY3RcIiwge1xuICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgIGlkOiBcIlJlY3RhbmdsZS1Db3B5LTE1XCIsXG4gICAgICAgICAgICAgICAgICAgICAgZmlsbDogXCJ1cmwoI2xpbmVhckdyYWRpZW50LTItXCIgKyBfdm0uaWQgKyBcIilcIixcbiAgICAgICAgICAgICAgICAgICAgICB4OiBcIjEzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgeTogXCI0NVwiLFxuICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBcIjQwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBcIjM2XCJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgXCJnXCIsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IFwiUmVjdGFuZ2xlLUNvcHktMTdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoNTMuMDAwMDAwLCA0NS4wMDAwMDApXCJcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibWFza1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBhdHRyczogeyBpZDogXCJtYXNrLTQtXCIgKyBfdm0uaWQsIGZpbGw6IFwid2hpdGVcIiB9IH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFwidXNlXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBcInhsaW5rOmhyZWZcIjogXCIjcGF0aC0zLVwiICsgX3ZtLmlkIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgIF9jKFwidXNlXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcIk1hc2tcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDogXCIjRTBFM0U5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInRyYW5zbGF0ZSg4LjUwMDAwMCwgMTguMDAwMDAwKSBzY2FsZSgtMSwgMSkgdHJhbnNsYXRlKC04LjUwMDAwMCwgLTE4LjAwMDAwMCkgXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwieGxpbms6aHJlZlwiOiBcIiNwYXRoLTMtXCIgKyBfdm0uaWRcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICBfYyhcInBvbHlnb25cIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IFwiUmVjdGFuZ2xlLUNvcHlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDogXCIjRDVEN0RFXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hc2s6IFwidXJsKCNtYXNrLTQtXCIgKyBfdm0uaWQgKyBcIilcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidHJhbnNsYXRlKDEyLjAwMDAwMCwgOS4wMDAwMDApIHNjYWxlKC0xLCAxKSB0cmFuc2xhdGUoLTEyLjAwMDAwMCwgLTkuMDAwMDAwKSBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzOiBcIjcgMCAyNCAwIDIwIDE4IC0xLjcwNTMwMjU3ZS0xMyAxNlwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIF9jKFwicG9seWdvblwiLCB7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgaWQ6IFwiUmVjdGFuZ2xlLUNvcHktMThcIixcbiAgICAgICAgICAgICAgICAgICAgICBmaWxsOiBcIiNGOEY5RkJcIixcbiAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06XG4gICAgICAgICAgICAgICAgICAgICAgICBcInRyYW5zbGF0ZSg2Ni4wMDAwMDAsIDUxLjUwMDAwMCkgc2NhbGUoLTEsIDEpIHRyYW5zbGF0ZSgtNjYuMDAwMDAwLCAtNTEuNTAwMDAwKSBcIixcbiAgICAgICAgICAgICAgICAgICAgICBwb2ludHM6IFwiNjIgNDUgNzkgNDUgNzAgNTggNTMgNThcIlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgXVxuICAgICAgICAgIClcbiAgICAgICAgXVxuICAgICAgKVxuICAgIF1cbiAgKVxufVxudmFyIGltZ19lbXB0eXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzQyOTE4YjgyX3N0YXRpY1JlbmRlckZucyA9IFtdXG5pbWdfZW1wdHl2dWVfdHlwZV90ZW1wbGF0ZV9pZF80MjkxOGI4Ml9yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2VtcHR5L3NyYy9pbWctZW1wdHkudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTQyOTE4YjgyJlxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9lbXB0eS9zcmMvaW1nLWVtcHR5LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbnZhciBpbWdfZW1wdHl2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19pZCA9IDA7XG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBpbWdfZW1wdHl2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBuYW1lOiAnSW1nRW1wdHknLFxuICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpZDogKytpbWdfZW1wdHl2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19pZFxuICAgIH07XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9lbXB0eS9zcmMvaW1nLWVtcHR5LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfaW1nX2VtcHR5dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKGltZ19lbXB0eXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9lbXB0eS9zcmMvaW1nLWVtcHR5LnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGltZ19lbXB0eV9jb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIHNyY19pbWdfZW1wdHl2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIGltZ19lbXB0eXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzQyOTE4YjgyX3JlbmRlcixcbiAgaW1nX2VtcHR5dnVlX3R5cGVfdGVtcGxhdGVfaWRfNDI5MThiODJfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBpbWdfZW1wdHlfYXBpOyB9XG5pbWdfZW1wdHlfY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy9lbXB0eS9zcmMvaW1nLWVtcHR5LnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBpbWdfZW1wdHkgPSAoaW1nX2VtcHR5X2NvbXBvbmVudC5leHBvcnRzKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2VtcHR5L3NyYy9pbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG52YXIgc3JjdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfY29tcG9uZW50cztcblxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5cblxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBlbXB0eV9zcmN2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBuYW1lOiAnRWxFbXB0eScsXG4gIGNvbXBvbmVudHM6IChzcmN2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19jb21wb25lbnRzID0ge30sIHNyY3Z1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX2NvbXBvbmVudHNbaW1nX2VtcHR5Lm5hbWVdID0gaW1nX2VtcHR5LCBzcmN2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19jb21wb25lbnRzKSxcbiAgcHJvcHM6IHtcbiAgICBpbWFnZToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJydcbiAgICB9LFxuICAgIGltYWdlU2l6ZTogTnVtYmVyLFxuICAgIGRlc2NyaXB0aW9uOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnJ1xuICAgIH1cbiAgfSxcbiAgY29tcHV0ZWQ6IHtcbiAgICBlbXB0eURlc2NyaXB0aW9uOiBmdW5jdGlvbiBlbXB0eURlc2NyaXB0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGVzY3JpcHRpb24gfHwgT2JqZWN0KGxpYl9sb2NhbGVfW1widFwiXSkoJ2VsLmVtcHR5LmRlc2NyaXB0aW9uJyk7XG4gICAgfSxcbiAgICBpbWFnZVN0eWxlOiBmdW5jdGlvbiBpbWFnZVN0eWxlKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgd2lkdGg6IHRoaXMuaW1hZ2VTaXplID8gdGhpcy5pbWFnZVNpemUgKyAncHgnIDogJydcbiAgICAgIH07XG4gICAgfVxuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZW1wdHkvc3JjL2luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc19lbXB0eV9zcmN2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoZW1wdHlfc3JjdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2VtcHR5L3NyYy9pbmRleC52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBlbXB0eV9zcmNfY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBwYWNrYWdlc19lbXB0eV9zcmN2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIHNyY3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzM0N2NlZDkxX3JlbmRlcixcbiAgc3JjdnVlX3R5cGVfdGVtcGxhdGVfaWRfMzQ3Y2VkOTFfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBlbXB0eV9zcmNfYXBpOyB9XG5lbXB0eV9zcmNfY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy9lbXB0eS9zcmMvaW5kZXgudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGVtcHR5X3NyYyA9IChlbXB0eV9zcmNfY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9lbXB0eS9pbmRleC5qc1xuXG5cbmVtcHR5X3NyYy5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuICBWdWUuY29tcG9uZW50KGVtcHR5X3NyYy5uYW1lLCBlbXB0eV9zcmMpO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgZW1wdHkgPSAoZW1wdHlfc3JjKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZGVzY3JpcHRpb25zL3NyYy9kZXNjcmlwdGlvbnMtcm93LmpzXG52YXIgZGVzY3JpcHRpb25zX3Jvd19leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgZGVzY3JpcHRpb25zX3JvdyA9ICh7XG4gIG5hbWU6ICdFbERlc2NyaXB0aW9uc1JvdycsXG4gIHByb3BzOiB7XG4gICAgcm93OiB7XG4gICAgICB0eXBlOiBBcnJheVxuICAgIH1cbiAgfSxcbiAgaW5qZWN0OiBbJ2VsRGVzY3JpcHRpb25zJ10sXG4gIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKGgpIHtcbiAgICB2YXIgZWxEZXNjcmlwdGlvbnMgPSB0aGlzLmVsRGVzY3JpcHRpb25zO1xuXG4gICAgdmFyIHJvdyA9ICh0aGlzLnJvdyB8fCBbXSkubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICByZXR1cm4gZGVzY3JpcHRpb25zX3Jvd19leHRlbmRzKHt9LCBpdGVtLCB7XG4gICAgICAgIGxhYmVsOiBpdGVtLnNsb3RzLmxhYmVsIHx8IGl0ZW0ucHJvcHMubGFiZWxcbiAgICAgIH0sIFsnbGFiZWxDbGFzc05hbWUnLCAnY29udGVudENsYXNzTmFtZScsICdsYWJlbFN0eWxlJywgJ2NvbnRlbnRTdHlsZSddLnJlZHVjZShmdW5jdGlvbiAocmVzLCBrZXkpIHtcbiAgICAgICAgcmVzW2tleV0gPSBpdGVtLnByb3BzW2tleV0gfHwgZWxEZXNjcmlwdGlvbnNba2V5XTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0sIHt9KSk7XG4gICAgfSk7XG4gICAgaWYgKGVsRGVzY3JpcHRpb25zLmRpcmVjdGlvbiA9PT0gJ3ZlcnRpY2FsJykge1xuICAgICAgcmV0dXJuIGgoJ3Rib2R5JywgW2goXG4gICAgICAgICd0cicsXG4gICAgICAgIHsgJ2NsYXNzJzogJ2VsLWRlc2NyaXB0aW9ucy1yb3cnIH0sXG4gICAgICAgIFtyb3cubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgdmFyIF9yZWY7XG5cbiAgICAgICAgICByZXR1cm4gaChcbiAgICAgICAgICAgICd0aCcsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICdjbGFzcyc6IChfcmVmID0ge1xuICAgICAgICAgICAgICAgICdlbC1kZXNjcmlwdGlvbnMtaXRlbV9fY2VsbCc6IHRydWUsXG4gICAgICAgICAgICAgICAgJ2VsLWRlc2NyaXB0aW9ucy1pdGVtX19sYWJlbCc6IHRydWUsXG4gICAgICAgICAgICAgICAgJ2hhcy1jb2xvbic6IGVsRGVzY3JpcHRpb25zLmJvcmRlciA/IGZhbHNlIDogZWxEZXNjcmlwdGlvbnMuY29sb24sXG4gICAgICAgICAgICAgICAgJ2lzLWJvcmRlcmVkLWxhYmVsJzogZWxEZXNjcmlwdGlvbnMuYm9yZGVyXG4gICAgICAgICAgICAgIH0sIF9yZWZbaXRlbS5sYWJlbENsYXNzTmFtZV0gPSB0cnVlLCBfcmVmKSxcbiAgICAgICAgICAgICAgc3R5bGU6IGl0ZW0ubGFiZWxTdHlsZSxcbiAgICAgICAgICAgICAgYXR0cnM6IHsgY29sU3BhbjogaXRlbS5wcm9wcy5zcGFuXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbaXRlbS5sYWJlbF1cbiAgICAgICAgICApO1xuICAgICAgICB9KV1cbiAgICAgICksIGgoXG4gICAgICAgICd0cicsXG4gICAgICAgIHsgJ2NsYXNzJzogJ2VsLWRlc2NyaXB0aW9ucy1yb3cnIH0sXG4gICAgICAgIFtyb3cubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgcmV0dXJuIGgoXG4gICAgICAgICAgICAndGQnLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAnY2xhc3MnOiBbJ2VsLWRlc2NyaXB0aW9ucy1pdGVtX19jZWxsJywgJ2VsLWRlc2NyaXB0aW9ucy1pdGVtX19jb250ZW50JywgaXRlbS5jb250ZW50Q2xhc3NOYW1lXSxcbiAgICAgICAgICAgICAgc3R5bGU6IGl0ZW0uY29udGVudFN0eWxlLFxuICAgICAgICAgICAgICBhdHRyczogeyBjb2xTcGFuOiBpdGVtLnByb3BzLnNwYW5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtpdGVtLnNsb3RzLmRlZmF1bHRdXG4gICAgICAgICAgKTtcbiAgICAgICAgfSldXG4gICAgICApXSk7XG4gICAgfVxuICAgIGlmIChlbERlc2NyaXB0aW9ucy5ib3JkZXIpIHtcbiAgICAgIHJldHVybiBoKCd0Ym9keScsIFtoKFxuICAgICAgICAndHInLFxuICAgICAgICB7ICdjbGFzcyc6ICdlbC1kZXNjcmlwdGlvbnMtcm93JyB9LFxuICAgICAgICBbcm93Lm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgIHZhciBfcmVmMjtcblxuICAgICAgICAgIHJldHVybiBbaChcbiAgICAgICAgICAgICd0aCcsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICdjbGFzcyc6IChfcmVmMiA9IHtcbiAgICAgICAgICAgICAgICAnZWwtZGVzY3JpcHRpb25zLWl0ZW1fX2NlbGwnOiB0cnVlLFxuICAgICAgICAgICAgICAgICdlbC1kZXNjcmlwdGlvbnMtaXRlbV9fbGFiZWwnOiB0cnVlLFxuICAgICAgICAgICAgICAgICdpcy1ib3JkZXJlZC1sYWJlbCc6IGVsRGVzY3JpcHRpb25zLmJvcmRlclxuICAgICAgICAgICAgICB9LCBfcmVmMltpdGVtLmxhYmVsQ2xhc3NOYW1lXSA9IHRydWUsIF9yZWYyKSxcbiAgICAgICAgICAgICAgc3R5bGU6IGl0ZW0ubGFiZWxTdHlsZSxcbiAgICAgICAgICAgICAgYXR0cnM6IHsgY29sU3BhbjogJzEnXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbaXRlbS5sYWJlbF1cbiAgICAgICAgICApLCBoKFxuICAgICAgICAgICAgJ3RkJyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgJ2NsYXNzJzogWydlbC1kZXNjcmlwdGlvbnMtaXRlbV9fY2VsbCcsICdlbC1kZXNjcmlwdGlvbnMtaXRlbV9fY29udGVudCcsIGl0ZW0uY29udGVudENsYXNzTmFtZV0sXG4gICAgICAgICAgICAgIHN0eWxlOiBpdGVtLmNvbnRlbnRTdHlsZSxcbiAgICAgICAgICAgICAgYXR0cnM6IHsgY29sU3BhbjogaXRlbS5wcm9wcy5zcGFuICogMiAtIDFcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtpdGVtLnNsb3RzLmRlZmF1bHRdXG4gICAgICAgICAgKV07XG4gICAgICAgIH0pXVxuICAgICAgKV0pO1xuICAgIH1cbiAgICByZXR1cm4gaCgndGJvZHknLCBbaChcbiAgICAgICd0cicsXG4gICAgICB7ICdjbGFzcyc6ICdlbC1kZXNjcmlwdGlvbnMtcm93JyB9LFxuICAgICAgW3Jvdy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgdmFyIF9yZWYzO1xuXG4gICAgICAgIHJldHVybiBoKFxuICAgICAgICAgICd0ZCcsXG4gICAgICAgICAgeyAnY2xhc3MnOiAnZWwtZGVzY3JpcHRpb25zLWl0ZW0gZWwtZGVzY3JpcHRpb25zLWl0ZW1fX2NlbGwnLCBhdHRyczogeyBjb2xTcGFuOiBpdGVtLnByb3BzLnNwYW4gfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgW2goXG4gICAgICAgICAgICAnZGl2JyxcbiAgICAgICAgICAgIHsgJ2NsYXNzJzogJ2VsLWRlc2NyaXB0aW9ucy1pdGVtX19jb250YWluZXInIH0sXG4gICAgICAgICAgICBbaChcbiAgICAgICAgICAgICAgJ3NwYW4nLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgJ2NsYXNzJzogKF9yZWYzID0ge1xuICAgICAgICAgICAgICAgICAgJ2VsLWRlc2NyaXB0aW9ucy1pdGVtX19sYWJlbCc6IHRydWUsXG4gICAgICAgICAgICAgICAgICAnaGFzLWNvbG9uJzogZWxEZXNjcmlwdGlvbnMuY29sb25cbiAgICAgICAgICAgICAgICB9LCBfcmVmM1tpdGVtLmxhYmVsQ2xhc3NOYW1lXSA9IHRydWUsIF9yZWYzKSxcbiAgICAgICAgICAgICAgICBzdHlsZTogaXRlbS5sYWJlbFN0eWxlXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFtpdGVtLmxhYmVsXVxuICAgICAgICAgICAgKSwgaChcbiAgICAgICAgICAgICAgJ3NwYW4nLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgJ2NsYXNzJzogWydlbC1kZXNjcmlwdGlvbnMtaXRlbV9fY29udGVudCcsIGl0ZW0uY29udGVudENsYXNzTmFtZV0sXG4gICAgICAgICAgICAgICAgc3R5bGU6IGl0ZW0uY29udGVudFN0eWxlXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFtpdGVtLnNsb3RzLmRlZmF1bHRdXG4gICAgICAgICAgICApXVxuICAgICAgICAgICldXG4gICAgICAgICk7XG4gICAgICB9KV1cbiAgICApXSk7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9kZXNjcmlwdGlvbnMvc3JjL2luZGV4LmpzXG52YXIgc3JjX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xuXG52YXIgc3JjX2NvbXBvbmVudHM7XG5cblxuXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGRlc2NyaXB0aW9uc19zcmMgPSAoe1xuICBuYW1lOiAnRWxEZXNjcmlwdGlvbnMnLFxuICBjb21wb25lbnRzOiAoc3JjX2NvbXBvbmVudHMgPSB7fSwgc3JjX2NvbXBvbmVudHNbZGVzY3JpcHRpb25zX3Jvdy5uYW1lXSA9IGRlc2NyaXB0aW9uc19yb3csIHNyY19jb21wb25lbnRzKSxcbiAgcHJvcHM6IHtcbiAgICBib3JkZXI6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0sXG4gICAgY29sdW1uOiB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBkZWZhdWx0OiAzXG4gICAgfSxcbiAgICBkaXJlY3Rpb246IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdob3Jpem9udGFsJ1xuICAgIH0sXG4gICAgc2l6ZToge1xuICAgICAgdHlwZTogU3RyaW5nXG4gICAgICAvLyB2YWxpZGF0b3I6IGlzVmFsaWRDb21wb25lbnRTaXplLFxuICAgIH0sXG4gICAgdGl0bGU6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICcnXG4gICAgfSxcbiAgICBleHRyYToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJydcbiAgICB9LFxuICAgIGxhYmVsU3R5bGU6IHtcbiAgICAgIHR5cGU6IE9iamVjdFxuICAgIH0sXG4gICAgY29udGVudFN0eWxlOiB7XG4gICAgICB0eXBlOiBPYmplY3RcbiAgICB9LFxuICAgIGxhYmVsQ2xhc3NOYW1lOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnJ1xuICAgIH0sXG4gICAgY29udGVudENsYXNzTmFtZToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJydcbiAgICB9LFxuICAgIGNvbG9uOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH1cbiAgfSxcbiAgY29tcHV0ZWQ6IHtcbiAgICBkZXNjcmlwdGlvbnNTaXplOiBmdW5jdGlvbiBkZXNjcmlwdGlvbnNTaXplKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2l6ZSB8fCAodGhpcy4kRUxFTUVOVCB8fCB7fSkuc2l6ZTtcbiAgICB9XG4gIH0sXG4gIHByb3ZpZGU6IGZ1bmN0aW9uIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVsRGVzY3JpcHRpb25zOiB0aGlzXG4gICAgfTtcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0T3B0aW9uUHJvcHM6IGZ1bmN0aW9uIGdldE9wdGlvblByb3BzKHZub2RlKSB7XG4gICAgICBpZiAodm5vZGUuY29tcG9uZW50T3B0aW9ucykge1xuICAgICAgICB2YXIgY29tcG9uZW50T3B0aW9ucyA9IHZub2RlLmNvbXBvbmVudE9wdGlvbnM7XG4gICAgICAgIHZhciBfY29tcG9uZW50T3B0aW9ucyRwcm8gPSBjb21wb25lbnRPcHRpb25zLnByb3BzRGF0YSxcbiAgICAgICAgICAgIHByb3BzRGF0YSA9IF9jb21wb25lbnRPcHRpb25zJHBybyA9PT0gdW5kZWZpbmVkID8ge30gOiBfY29tcG9uZW50T3B0aW9ucyRwcm8sXG4gICAgICAgICAgICBfY29tcG9uZW50T3B0aW9ucyRDdG8gPSBjb21wb25lbnRPcHRpb25zLkN0b3IsXG4gICAgICAgICAgICBDdG9yID0gX2NvbXBvbmVudE9wdGlvbnMkQ3RvID09PSB1bmRlZmluZWQgPyB7fSA6IF9jb21wb25lbnRPcHRpb25zJEN0bztcblxuICAgICAgICB2YXIgcHJvcHMgPSAoQ3Rvci5vcHRpb25zIHx8IHt9KS5wcm9wcyB8fCB7fTtcbiAgICAgICAgdmFyIHJlcyA9IHt9O1xuICAgICAgICBmb3IgKHZhciBrIGluIHByb3BzKSB7XG4gICAgICAgICAgdmFyIHYgPSBwcm9wc1trXTtcbiAgICAgICAgICB2YXIgZGVmYXVsdFZhbHVlID0gdi5kZWZhdWx0O1xuICAgICAgICAgIGlmIChkZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmVzW2tdID0gT2JqZWN0KHR5cGVzX1tcImlzRnVuY3Rpb25cIl0pKGRlZmF1bHRWYWx1ZSkgPyBkZWZhdWx0VmFsdWUuY2FsbCh2bm9kZSkgOiBkZWZhdWx0VmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzcmNfZXh0ZW5kcyh7fSwgcmVzLCBwcm9wc0RhdGEpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHt9O1xuICAgIH0sXG4gICAgZ2V0U2xvdHM6IGZ1bmN0aW9uIGdldFNsb3RzKHZub2RlKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICB2YXIgY29tcG9uZW50T3B0aW9ucyA9IHZub2RlLmNvbXBvbmVudE9wdGlvbnMgfHwge307XG4gICAgICB2YXIgY2hpbGRyZW4gPSB2bm9kZS5jaGlsZHJlbiB8fCBjb21wb25lbnRPcHRpb25zLmNoaWxkcmVuIHx8IFtdO1xuICAgICAgdmFyIHNsb3RzID0ge307XG4gICAgICBjaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgICBpZiAoIV90aGlzLmlzRW1wdHlFbGVtZW50KGNoaWxkKSkge1xuICAgICAgICAgIHZhciBuYW1lID0gY2hpbGQuZGF0YSAmJiBjaGlsZC5kYXRhLnNsb3QgfHwgJ2RlZmF1bHQnO1xuICAgICAgICAgIHNsb3RzW25hbWVdID0gc2xvdHNbbmFtZV0gfHwgW107XG4gICAgICAgICAgaWYgKGNoaWxkLnRhZyA9PT0gJ3RlbXBsYXRlJykge1xuICAgICAgICAgICAgc2xvdHNbbmFtZV0ucHVzaChjaGlsZC5jaGlsZHJlbik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNsb3RzW25hbWVdLnB1c2goY2hpbGQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gc3JjX2V4dGVuZHMoe30sIHNsb3RzKTtcbiAgICB9LFxuICAgIGlzRW1wdHlFbGVtZW50OiBmdW5jdGlvbiBpc0VtcHR5RWxlbWVudChjKSB7XG4gICAgICByZXR1cm4gIShjLnRhZyB8fCBjLnRleHQgJiYgYy50ZXh0LnRyaW0oKSAhPT0gJycpO1xuICAgIH0sXG4gICAgZmlsbGVkTm9kZTogZnVuY3Rpb24gZmlsbGVkTm9kZShub2RlLCBzcGFuLCBjb3VudCkge1xuICAgICAgdmFyIGlzTGFzdCA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDogZmFsc2U7XG5cbiAgICAgIGlmICghbm9kZS5wcm9wcykge1xuICAgICAgICBub2RlLnByb3BzID0ge307XG4gICAgICB9XG4gICAgICBpZiAoc3BhbiA+IGNvdW50KSB7XG4gICAgICAgIG5vZGUucHJvcHMuc3BhbiA9IGNvdW50O1xuICAgICAgfVxuICAgICAgaWYgKGlzTGFzdCkge1xuICAgICAgICAvLyBzZXQgdGhlIG1heCBzcGFuLCBjYXVzZSBvZiB0aGUgbGFzdCB0ZFxuICAgICAgICBub2RlLnByb3BzLnNwYW4gPSBjb3VudDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBub2RlO1xuICAgIH0sXG4gICAgZ2V0Um93czogZnVuY3Rpb24gZ2V0Um93cygpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB2YXIgY2hpbGRyZW4gPSAodGhpcy4kc2xvdHMuZGVmYXVsdCB8fCBbXSkuZmlsdGVyKGZ1bmN0aW9uICh2bm9kZSkge1xuICAgICAgICByZXR1cm4gdm5vZGUudGFnICYmIHZub2RlLmNvbXBvbmVudE9wdGlvbnMgJiYgdm5vZGUuY29tcG9uZW50T3B0aW9ucy5DdG9yLm9wdGlvbnMubmFtZSA9PT0gJ0VsRGVzY3JpcHRpb25zSXRlbSc7XG4gICAgICB9KTtcbiAgICAgIHZhciBub2RlcyA9IGNoaWxkcmVuLm1hcChmdW5jdGlvbiAodm5vZGUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwcm9wczogX3RoaXMyLmdldE9wdGlvblByb3BzKHZub2RlKSxcbiAgICAgICAgICBzbG90czogX3RoaXMyLmdldFNsb3RzKHZub2RlKSxcbiAgICAgICAgICB2bm9kZTogdm5vZGVcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgICAgdmFyIHJvd3MgPSBbXTtcbiAgICAgIHZhciB0ZW1wID0gW107XG4gICAgICB2YXIgY291bnQgPSB0aGlzLmNvbHVtbjtcblxuICAgICAgbm9kZXMuZm9yRWFjaChmdW5jdGlvbiAobm9kZSwgaW5kZXgpIHtcbiAgICAgICAgdmFyIHNwYW4gPSBub2RlLnByb3BzLnNwYW4gfHwgMTtcblxuICAgICAgICBpZiAoaW5kZXggPT09IGNoaWxkcmVuLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICB0ZW1wLnB1c2goX3RoaXMyLmZpbGxlZE5vZGUobm9kZSwgc3BhbiwgY291bnQsIHRydWUpKTtcbiAgICAgICAgICByb3dzLnB1c2godGVtcCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNwYW4gPCBjb3VudCkge1xuICAgICAgICAgIGNvdW50IC09IHNwYW47XG4gICAgICAgICAgdGVtcC5wdXNoKG5vZGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRlbXAucHVzaChfdGhpczIuZmlsbGVkTm9kZShub2RlLCBzcGFuLCBjb3VudCkpO1xuICAgICAgICAgIHJvd3MucHVzaCh0ZW1wKTtcbiAgICAgICAgICBjb3VudCA9IF90aGlzMi5jb2x1bW47XG4gICAgICAgICAgdGVtcCA9IFtdO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHJvd3M7XG4gICAgfVxuICB9LFxuICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICB2YXIgaCA9IGFyZ3VtZW50c1swXTtcbiAgICB2YXIgdGl0bGUgPSB0aGlzLnRpdGxlLFxuICAgICAgICBleHRyYSA9IHRoaXMuZXh0cmEsXG4gICAgICAgIGJvcmRlciA9IHRoaXMuYm9yZGVyLFxuICAgICAgICBkZXNjcmlwdGlvbnNTaXplID0gdGhpcy5kZXNjcmlwdGlvbnNTaXplLFxuICAgICAgICAkc2xvdHMgPSB0aGlzLiRzbG90cztcblxuICAgIHZhciByb3dzID0gdGhpcy5nZXRSb3dzKCk7XG5cbiAgICByZXR1cm4gaChcbiAgICAgICdkaXYnLFxuICAgICAgeyAnY2xhc3MnOiAnZWwtZGVzY3JpcHRpb25zJyB9LFxuICAgICAgW3RpdGxlIHx8IGV4dHJhIHx8ICRzbG90cy50aXRsZSB8fCAkc2xvdHMuZXh0cmEgPyBoKFxuICAgICAgICAnZGl2JyxcbiAgICAgICAgeyAnY2xhc3MnOiAnZWwtZGVzY3JpcHRpb25zX19oZWFkZXInIH0sXG4gICAgICAgIFtoKFxuICAgICAgICAgICdkaXYnLFxuICAgICAgICAgIHsgJ2NsYXNzJzogJ2VsLWRlc2NyaXB0aW9uc19fdGl0bGUnIH0sXG4gICAgICAgICAgWyRzbG90cy50aXRsZSA/ICRzbG90cy50aXRsZSA6IHRpdGxlXVxuICAgICAgICApLCBoKFxuICAgICAgICAgICdkaXYnLFxuICAgICAgICAgIHsgJ2NsYXNzJzogJ2VsLWRlc2NyaXB0aW9uc19fZXh0cmEnIH0sXG4gICAgICAgICAgWyRzbG90cy5leHRyYSA/ICRzbG90cy5leHRyYSA6IGV4dHJhXVxuICAgICAgICApXVxuICAgICAgKSA6IG51bGwsIGgoXG4gICAgICAgICdkaXYnLFxuICAgICAgICB7ICdjbGFzcyc6ICdlbC1kZXNjcmlwdGlvbnNfX2JvZHknIH0sXG4gICAgICAgIFtoKFxuICAgICAgICAgICd0YWJsZScsXG4gICAgICAgICAgeyAnY2xhc3MnOiBbJ2VsLWRlc2NyaXB0aW9uc19fdGFibGUnLCB7ICdpcy1ib3JkZXJlZCc6IGJvcmRlciB9LCBkZXNjcmlwdGlvbnNTaXplID8gJ2VsLWRlc2NyaXB0aW9ucy0tJyArIGRlc2NyaXB0aW9uc1NpemUgOiAnJ10gfSxcbiAgICAgICAgICBbcm93cy5tYXAoZnVuY3Rpb24gKHJvdykge1xuICAgICAgICAgICAgcmV0dXJuIGgoZGVzY3JpcHRpb25zX3Jvdywge1xuICAgICAgICAgICAgICBhdHRyczogeyByb3c6IHJvdyB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KV1cbiAgICAgICAgKV1cbiAgICAgICldXG4gICAgKTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2Rlc2NyaXB0aW9ucy9pbmRleC5qc1xuXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5kZXNjcmlwdGlvbnNfc3JjLmluc3RhbGwgPSBmdW5jdGlvbiBpbnN0YWxsKFZ1ZSkge1xuICBWdWUuY29tcG9uZW50KGRlc2NyaXB0aW9uc19zcmMubmFtZSwgZGVzY3JpcHRpb25zX3NyYyk7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBkZXNjcmlwdGlvbnMgPSAoZGVzY3JpcHRpb25zX3NyYyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2Rlc2NyaXB0aW9ucy9zcmMvZGVzY3JpcHRpb25zLWl0ZW0uanNcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGRlc2NyaXB0aW9uc19pdGVtID0gKHtcbiAgbmFtZTogJ0VsRGVzY3JpcHRpb25zSXRlbScsXG4gIHByb3BzOiB7XG4gICAgbGFiZWw6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICcnXG4gICAgfSxcbiAgICBzcGFuOiB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBkZWZhdWx0OiAxXG4gICAgfSxcbiAgICBjb250ZW50Q2xhc3NOYW1lOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnJ1xuICAgIH0sXG4gICAgY29udGVudFN0eWxlOiB7XG4gICAgICB0eXBlOiBPYmplY3RcbiAgICB9LFxuICAgIGxhYmVsQ2xhc3NOYW1lOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnJ1xuICAgIH0sXG4gICAgbGFiZWxTdHlsZToge1xuICAgICAgdHlwZTogT2JqZWN0XG4gICAgfVxuICB9LFxuICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2Rlc2NyaXB0aW9ucy1pdGVtL2luZGV4LmpzXG5cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmRlc2NyaXB0aW9uc19pdGVtLmluc3RhbGwgPSBmdW5jdGlvbiBpbnN0YWxsKFZ1ZSkge1xuICBWdWUuY29tcG9uZW50KGRlc2NyaXB0aW9uc19pdGVtLm5hbWUsIGRlc2NyaXB0aW9uc19pdGVtKTtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhY2thZ2VzX2Rlc2NyaXB0aW9uc19pdGVtID0gKGRlc2NyaXB0aW9uc19pdGVtKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvcmVzdWx0L3NyYy9pbmRleC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MzQwOGIxMzkmXG52YXIgc3JjdnVlX3R5cGVfdGVtcGxhdGVfaWRfMzQwOGIxMzlfcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiZWwtcmVzdWx0XCIgfSwgW1xuICAgIF9jKFxuICAgICAgXCJkaXZcIixcbiAgICAgIHsgc3RhdGljQ2xhc3M6IFwiZWwtcmVzdWx0X19pY29uXCIgfSxcbiAgICAgIFtcbiAgICAgICAgX3ZtLl90KFwiaWNvblwiLCBbXG4gICAgICAgICAgX2MoX3ZtLmljb25FbGVtZW50LCB7IHRhZzogXCJjb21wb25lbnRcIiwgY2xhc3M6IF92bS5pY29uRWxlbWVudCB9KVxuICAgICAgICBdKVxuICAgICAgXSxcbiAgICAgIDJcbiAgICApLFxuICAgIF92bS50aXRsZSB8fCBfdm0uJHNsb3RzLnRpdGxlXG4gICAgICA/IF9jKFxuICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJlbC1yZXN1bHRfX3RpdGxlXCIgfSxcbiAgICAgICAgICBbX3ZtLl90KFwidGl0bGVcIiwgW19jKFwicFwiLCBbX3ZtLl92KF92bS5fcyhfdm0udGl0bGUpKV0pXSldLFxuICAgICAgICAgIDJcbiAgICAgICAgKVxuICAgICAgOiBfdm0uX2UoKSxcbiAgICBfdm0uc3ViVGl0bGUgfHwgX3ZtLiRzbG90cy5zdWJUaXRsZVxuICAgICAgPyBfYyhcbiAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwiZWwtcmVzdWx0X19zdWJ0aXRsZVwiIH0sXG4gICAgICAgICAgW192bS5fdChcInN1YlRpdGxlXCIsIFtfYyhcInBcIiwgW192bS5fdihfdm0uX3MoX3ZtLnN1YlRpdGxlKSldKV0pXSxcbiAgICAgICAgICAyXG4gICAgICAgIClcbiAgICAgIDogX3ZtLl9lKCksXG4gICAgX3ZtLiRzbG90cy5leHRyYVxuICAgICAgPyBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLXJlc3VsdF9fZXh0cmFcIiB9LCBbX3ZtLl90KFwiZXh0cmFcIildLCAyKVxuICAgICAgOiBfdm0uX2UoKVxuICBdKVxufVxudmFyIHNyY3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzM0MDhiMTM5X3N0YXRpY1JlbmRlckZucyA9IFtdXG5zcmN2dWVfdHlwZV90ZW1wbGF0ZV9pZF8zNDA4YjEzOV9yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3Jlc3VsdC9zcmMvaW5kZXgudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTM0MDhiMTM5JlxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3Jlc3VsdC9zcmMvaWNvbi1zdWNjZXNzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xODExOTQxOCZcbnZhciBpY29uX3N1Y2Nlc3N2dWVfdHlwZV90ZW1wbGF0ZV9pZF8xODExOTQxOF9yZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJzdmdcIixcbiAgICB7IGF0dHJzOiB7IHZpZXdCb3g6IFwiMCAwIDQ4IDQ4XCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgfSB9LFxuICAgIFtcbiAgICAgIF9jKFwicGF0aFwiLCB7XG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgZDpcbiAgICAgICAgICAgIFwiTTI0LDQgQzM1LjA0NTY5NSw0IDQ0LDEyLjk1NDMwNSA0NCwyNCBDNDQsMzUuMDQ1Njk1IDM1LjA0NTY5NSw0NCAyNCw0NCBDMTIuOTU0MzA1LDQ0IDQsMzUuMDQ1Njk1IDQsMjQgQzQsMTIuOTU0MzA1IDEyLjk1NDMwNSw0IDI0LDQgWiBNMzQuNTU0ODA5OCwxNi40NDg1NzExIEMzMy45NjEyMjI4LDE1Ljg1MDQ3NjMgMzIuOTk4ODI4MiwxNS44NTA0NzYzIDMyLjQwNTI0MTIsMTYuNDQ4NTcxMSBMMzIuNDA1MjQxMiwxNi40NDg1NzExIEwyMS40MTM3NTcsMjcuNTgwNTgxMSBMMjEuNDEzNzU3LDI3LjU4MDU4MTEgTDIxLjQwMzQ2NDIsMjcuNTkwODU1IEMyMS4wMDk3NTQyLDI3Ljk3ODE2NzQgMjAuMzc2NjEwNSwyNy45NzI5ODExIDE5Ljk4OTI5ODEsMjcuNTc5MjcxMSBMMTkuOTg5Mjk4MSwyNy41NzkyNzExIEwxNS41OTQ3NTg4LDIzLjExMjE0MjggQzE1LjAwMTE3MTgsMjIuNTE0MDQ4IDE0LjAzODc3NzIsMjIuNTE0MDQ4IDEzLjQ0NTE5MDIsMjMuMTEyMTQyOCBDMTIuODUxNjAzMywyMy43MTAyMzc2IDEyLjg1MTYwMzMsMjQuNjc5OTQwOSAxMy40NDUxOTAyLDI1LjI3ODAzNTcgTDEzLjQ0NTE5MDIsMjUuMjc4MDM1NyBMMTkuNjI2MDc4NiwzMS41NTE0Mjg5IEMyMC4yMTk2NjU2LDMyLjE0OTUyMzcgMjEuMTgyMDYwMiwzMi4xNDk1MjM3IDIxLjc3NTY0NzIsMzEuNTUxNDI4OSBMMjEuNzc1NjQ3MiwzMS41NTE0Mjg5IEwzNC41NTQ4MDk4LDE4LjYxNDQ2NCBDMzUuMTQ4Mzk2NywxOC4wMTYzNjkyIDM1LjE0ODM5NjcsMTcuMDQ2NjY1OSAzNC41NTQ4MDk4LDE2LjQ0ODU3MTEgWlwiXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgXVxuICApXG59XG52YXIgaWNvbl9zdWNjZXNzdnVlX3R5cGVfdGVtcGxhdGVfaWRfMTgxMTk0MThfc3RhdGljUmVuZGVyRm5zID0gW11cbmljb25fc3VjY2Vzc3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzE4MTE5NDE4X3JlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvcmVzdWx0L3NyYy9pY29uLXN1Y2Nlc3MudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTE4MTE5NDE4JlxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9yZXN1bHQvc3JjL2ljb24tc3VjY2Vzcy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgaWNvbl9zdWNjZXNzdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbmFtZTogJ0ljb25TdWNjZXNzJ1xufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3Jlc3VsdC9zcmMvaWNvbi1zdWNjZXNzLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfaWNvbl9zdWNjZXNzdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKGljb25fc3VjY2Vzc3Z1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9yZXN1bHQvc3JjL2ljb24tc3VjY2Vzcy52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBpY29uX3N1Y2Nlc3NfY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBzcmNfaWNvbl9zdWNjZXNzdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICBpY29uX3N1Y2Nlc3N2dWVfdHlwZV90ZW1wbGF0ZV9pZF8xODExOTQxOF9yZW5kZXIsXG4gIGljb25fc3VjY2Vzc3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzE4MTE5NDE4X3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgaWNvbl9zdWNjZXNzX2FwaTsgfVxuaWNvbl9zdWNjZXNzX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvcmVzdWx0L3NyYy9pY29uLXN1Y2Nlc3MudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGljb25fc3VjY2VzcyA9IChpY29uX3N1Y2Nlc3NfY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9yZXN1bHQvc3JjL2ljb24tZXJyb3IudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTIxMTk5MjQ2JlxudmFyIGljb25fZXJyb3J2dWVfdHlwZV90ZW1wbGF0ZV9pZF8yMTE5OTI0Nl9yZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJzdmdcIixcbiAgICB7IGF0dHJzOiB7IHZpZXdCb3g6IFwiMCAwIDQ4IDQ4XCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgfSB9LFxuICAgIFtcbiAgICAgIF9jKFwicGF0aFwiLCB7XG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgZDpcbiAgICAgICAgICAgIFwiTTI0LDQgQzM1LjA0NTY5NSw0IDQ0LDEyLjk1NDMwNSA0NCwyNCBDNDQsMzUuMDQ1Njk1IDM1LjA0NTY5NSw0NCAyNCw0NCBDMTIuOTU0MzA1LDQ0IDQsMzUuMDQ1Njk1IDQsMjQgQzQsMTIuOTU0MzA1IDEyLjk1NDMwNSw0IDI0LDQgWiBNMzIuNTc4MTgsMTUuNDIxODIgQzMyLjAxNTc1MzQsMTQuODU5MzkzMyAzMS4xMDM4Nzk3LDE0Ljg1OTM5MzMgMzAuNTQxNDUzLDE1LjQyMTgyIEwzMC41NDE0NTMsMTUuNDIxODIgTDI0LjAwMDY3ODksMjEuOTYyNTk0MSBMMTcuNDU4NTQ3LDE1LjQyMTgyIEMxNi44OTYxMjAzLDE0Ljg1OTM5MzMgMTUuOTg0MjQ2NiwxNC44NTkzOTMzIDE1LjQyMTgyLDE1LjQyMTgyIEMxNC44NTkzOTMzLDE1Ljk4NDI0NjYgMTQuODU5MzkzMywxNi44OTYxMjAzIDE1LjQyMTgyLDE3LjQ1ODU0NyBMMTUuNDIxODIsMTcuNDU4NTQ3IEwyMS45NjM5NTE5LDIzLjk5OTMyMTEgTDE1LjQyMTgyLDMwLjU0MTQ1MyBDMTQuODU5MzkzMywzMS4xMDM4Nzk3IDE0Ljg1OTM5MzMsMzIuMDE1NzUzNCAxNS40MjE4MiwzMi41NzgxOCBDMTUuOTg0MjQ2NiwzMy4xNDA2MDY3IDE2Ljg5NjEyMDMsMzMuMTQwNjA2NyAxNy40NTg1NDcsMzIuNTc4MTggTDE3LjQ1ODU0NywzMi41NzgxOCBMMjQuMDAwNjc4OSwyNi4wMzYwNDgxIEwzMC41NDE0NTMsMzIuNTc4MTggQzMxLjEwMzg3OTcsMzMuMTQwNjA2NyAzMi4wMTU3NTM0LDMzLjE0MDYwNjcgMzIuNTc4MTgsMzIuNTc4MTggQzMzLjE0MDYwNjcsMzIuMDE1NzUzNCAzMy4xNDA2MDY3LDMxLjEwMzg3OTcgMzIuNTc4MTgsMzAuNTQxNDUzIEwzMi41NzgxOCwzMC41NDE0NTMgTDI2LjAzNzQwNTksMjMuOTk5MzIxMSBMMzIuNTc4MTgsMTcuNDU4NTQ3IEMzMy4xNDA2MDY3LDE2Ljg5NjEyMDMgMzMuMTQwNjA2NywxNS45ODQyNDY2IDMyLjU3ODE4LDE1LjQyMTgyIFpcIlxuICAgICAgICB9XG4gICAgICB9KVxuICAgIF1cbiAgKVxufVxudmFyIGljb25fZXJyb3J2dWVfdHlwZV90ZW1wbGF0ZV9pZF8yMTE5OTI0Nl9zdGF0aWNSZW5kZXJGbnMgPSBbXVxuaWNvbl9lcnJvcnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzIxMTk5MjQ2X3JlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvcmVzdWx0L3NyYy9pY29uLWVycm9yLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yMTE5OTI0NiZcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvcmVzdWx0L3NyYy9pY29uLWVycm9yLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBpY29uX2Vycm9ydnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbmFtZTogJ0ljb25FcnJvcidcbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9yZXN1bHQvc3JjL2ljb24tZXJyb3IudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY19pY29uX2Vycm9ydnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKGljb25fZXJyb3J2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvcmVzdWx0L3NyYy9pY29uLWVycm9yLnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGljb25fZXJyb3JfY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBzcmNfaWNvbl9lcnJvcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgaWNvbl9lcnJvcnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzIxMTk5MjQ2X3JlbmRlcixcbiAgaWNvbl9lcnJvcnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzIxMTk5MjQ2X3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgaWNvbl9lcnJvcl9hcGk7IH1cbmljb25fZXJyb3JfY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy9yZXN1bHQvc3JjL2ljb24tZXJyb3IudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGljb25fZXJyb3IgPSAoaWNvbl9lcnJvcl9jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3Jlc3VsdC9zcmMvaWNvbi13YXJuaW5nLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00NmZlOGYzMSZcbnZhciBpY29uX3dhcm5pbmd2dWVfdHlwZV90ZW1wbGF0ZV9pZF80NmZlOGYzMV9yZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJzdmdcIixcbiAgICB7IGF0dHJzOiB7IHZpZXdCb3g6IFwiMCAwIDQ4IDQ4XCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgfSB9LFxuICAgIFtcbiAgICAgIF9jKFwicGF0aFwiLCB7XG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgZDpcbiAgICAgICAgICAgIFwiTTI0LDQgQzM1LjA0NTY5NSw0IDQ0LDEyLjk1NDMwNSA0NCwyNCBDNDQsMzUuMDQ1Njk1IDM1LjA0NTY5NSw0NCAyNCw0NCBDMTIuOTU0MzA1LDQ0IDQsMzUuMDQ1Njk1IDQsMjQgQzQsMTIuOTU0MzA1IDEyLjk1NDMwNSw0IDI0LDQgWiBNMjQsMzEgQzIyLjg5NTQzMDUsMzEgMjIsMzEuODk1NDMwNSAyMiwzMyBDMjIsMzQuMTA0NTY5NSAyMi44OTU0MzA1LDM1IDI0LDM1IEMyNS4xMDQ1Njk1LDM1IDI2LDM0LjEwNDU2OTUgMjYsMzMgQzI2LDMxLjg5NTQzMDUgMjUuMTA0NTY5NSwzMSAyNCwzMSBaIE0yNCwxNCBDMjMuMTcxNTcyOSwxNCAyMi41LDE0LjY3MTU3MjkgMjIuNSwxNS41IEwyMi41LDE1LjUgTDIyLjUsMjcuNSBDMjIuNSwyOC4zMjg0MjcxIDIzLjE3MTU3MjksMjkgMjQsMjkgQzI0LjgyODQyNzEsMjkgMjUuNSwyOC4zMjg0MjcxIDI1LjUsMjcuNSBMMjUuNSwyNy41IEwyNS41LDE1LjUgQzI1LjUsMTQuNjcxNTcyOSAyNC44Mjg0MjcxLDE0IDI0LDE0IFpcIlxuICAgICAgICB9XG4gICAgICB9KVxuICAgIF1cbiAgKVxufVxudmFyIGljb25fd2FybmluZ3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzQ2ZmU4ZjMxX3N0YXRpY1JlbmRlckZucyA9IFtdXG5pY29uX3dhcm5pbmd2dWVfdHlwZV90ZW1wbGF0ZV9pZF80NmZlOGYzMV9yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3Jlc3VsdC9zcmMvaWNvbi13YXJuaW5nLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00NmZlOGYzMSZcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3Jlc3VsdC9zcmMvaWNvbi13YXJuaW5nLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcblxuXG5cblxuXG5cblxuXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGljb25fd2FybmluZ3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzXyA9ICh7XG4gIG5hbWU6ICdJY29uV2FybmluZydcbn0pO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3Jlc3VsdC9zcmMvaWNvbi13YXJuaW5nLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfaWNvbl93YXJuaW5ndnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfID0gKGljb25fd2FybmluZ3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9yZXN1bHQvc3JjL2ljb24td2FybmluZy52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBpY29uX3dhcm5pbmdfY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBzcmNfaWNvbl93YXJuaW5ndnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfLFxuICBpY29uX3dhcm5pbmd2dWVfdHlwZV90ZW1wbGF0ZV9pZF80NmZlOGYzMV9yZW5kZXIsXG4gIGljb25fd2FybmluZ3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzQ2ZmU4ZjMxX3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgaWNvbl93YXJuaW5nX2FwaTsgfVxuaWNvbl93YXJuaW5nX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvcmVzdWx0L3NyYy9pY29uLXdhcm5pbmcudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGljb25fd2FybmluZyA9IChpY29uX3dhcm5pbmdfY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9yZXN1bHQvc3JjL2ljb24taW5mby52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MTllM2RlNjkmXG52YXIgaWNvbl9pbmZvdnVlX3R5cGVfdGVtcGxhdGVfaWRfMTllM2RlNjlfcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwic3ZnXCIsXG4gICAgeyBhdHRyczogeyB2aWV3Qm94OiBcIjAgMCA0OCA0OFwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIH0gfSxcbiAgICBbXG4gICAgICBfYyhcInBhdGhcIiwge1xuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIGQ6XG4gICAgICAgICAgICBcIk0yNCw0IEMzNS4wNDU2OTUsNCA0NCwxMi45NTQzMDUgNDQsMjQgQzQ0LDM1LjA0NTY5NSAzNS4wNDU2OTUsNDQgMjQsNDQgQzEyLjk1NDMwNSw0NCA0LDM1LjA0NTY5NSA0LDI0IEM0LDEyLjk1NDMwNSAxMi45NTQzMDUsNCAyNCw0IFogTTI0LDE5IEwyMSwxOSBDMjAuMTcxNTcyOSwxOSAxOS41LDE5LjY3MTU3MjkgMTkuNSwyMC41IEMxOS41LDIxLjMyODQyNzEgMjAuMTcxNTcyOSwyMiAyMSwyMiBMMjEsMjIgTDIyLjUsMjIgTDIyLjUsMzEgTDIxLDMxIEMyMC4xNzE1NzI5LDMxIDE5LjUsMzEuNjcxNTcyOSAxOS41LDMyLjUgQzE5LjUsMzMuMzI4NDI3MSAyMC4xNzE1NzI5LDM0IDIxLDM0IEwyMSwzNCBMMjcsMzQgQzI3LjgyODQyNzEsMzQgMjguNSwzMy4zMjg0MjcxIDI4LjUsMzIuNSBDMjguNSwzMS42NzE1NzI5IDI3LjgyODQyNzEsMzEgMjcsMzEgTDI3LDMxIEwyNS41LDMxIEwyNS41LDIwLjUgQzI1LjUsMTkuNjcxNTcyOSAyNC44Mjg0MjcxLDE5IDI0LDE5IEwyNCwxOSBaIE0yNCwxMyBDMjIuODk1NDMwNSwxMyAyMiwxMy44OTU0MzA1IDIyLDE1IEMyMiwxNi4xMDQ1Njk1IDIyLjg5NTQzMDUsMTcgMjQsMTcgQzI1LjEwNDU2OTUsMTcgMjYsMTYuMTA0NTY5NSAyNiwxNSBDMjYsMTMuODk1NDMwNSAyNS4xMDQ1Njk1LDEzIDI0LDEzIFpcIlxuICAgICAgICB9XG4gICAgICB9KVxuICAgIF1cbiAgKVxufVxudmFyIGljb25faW5mb3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzE5ZTNkZTY5X3N0YXRpY1JlbmRlckZucyA9IFtdXG5pY29uX2luZm92dWVfdHlwZV90ZW1wbGF0ZV9pZF8xOWUzZGU2OV9yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3Jlc3VsdC9zcmMvaWNvbi1pbmZvLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xOWUzZGU2OSZcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3Jlc3VsdC9zcmMvaWNvbi1pbmZvLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcblxuXG5cblxuXG5cblxuXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGljb25faW5mb3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzXyA9ICh7XG4gIG5hbWU6ICdJY29uSW5mbydcbn0pO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3Jlc3VsdC9zcmMvaWNvbi1pbmZvLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfaWNvbl9pbmZvdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfID0gKGljb25faW5mb3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9yZXN1bHQvc3JjL2ljb24taW5mby52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBpY29uX2luZm9fY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBzcmNfaWNvbl9pbmZvdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfLFxuICBpY29uX2luZm92dWVfdHlwZV90ZW1wbGF0ZV9pZF8xOWUzZGU2OV9yZW5kZXIsXG4gIGljb25faW5mb3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzE5ZTNkZTY5X3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgaWNvbl9pbmZvX2FwaTsgfVxuaWNvbl9pbmZvX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvcmVzdWx0L3NyYy9pY29uLWluZm8udnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGljb25faW5mbyA9IChpY29uX2luZm9fY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvcmVzdWx0L3NyYy9pbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG52YXIgcmVzdWx0X3NyY3Z1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX2NvbXBvbmVudHM7XG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cblxuXG5cblxuXG52YXIgSWNvbk1hcCA9IHtcbiAgc3VjY2VzczogJ2ljb24tc3VjY2VzcycsXG4gIHdhcm5pbmc6ICdpY29uLXdhcm5pbmcnLFxuICBlcnJvcjogJ2ljb24tZXJyb3InLFxuICBpbmZvOiAnaWNvbi1pbmZvJ1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcmVzdWx0X3NyY3Z1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG5hbWU6ICdFbFJlc3VsdCcsXG4gIGNvbXBvbmVudHM6IChyZXN1bHRfc3JjdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfY29tcG9uZW50cyA9IHt9LCByZXN1bHRfc3JjdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfY29tcG9uZW50c1tpY29uX3N1Y2Nlc3MubmFtZV0gPSBpY29uX3N1Y2Nlc3MsIHJlc3VsdF9zcmN2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19jb21wb25lbnRzW2ljb25fZXJyb3IubmFtZV0gPSBpY29uX2Vycm9yLCByZXN1bHRfc3JjdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfY29tcG9uZW50c1tpY29uX3dhcm5pbmcubmFtZV0gPSBpY29uX3dhcm5pbmcsIHJlc3VsdF9zcmN2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19jb21wb25lbnRzW2ljb25faW5mby5uYW1lXSA9IGljb25faW5mbywgcmVzdWx0X3NyY3Z1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX2NvbXBvbmVudHMpLFxuICBwcm9wczoge1xuICAgIHRpdGxlOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnJ1xuICAgIH0sXG4gICAgc3ViVGl0bGU6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICcnXG4gICAgfSxcbiAgICBpY29uOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnaW5mbydcbiAgICB9XG4gIH0sXG4gIGNvbXB1dGVkOiB7XG4gICAgaWNvbkVsZW1lbnQ6IGZ1bmN0aW9uIGljb25FbGVtZW50KCkge1xuICAgICAgdmFyIGljb24gPSB0aGlzLmljb247XG4gICAgICByZXR1cm4gaWNvbiAmJiBJY29uTWFwW2ljb25dID8gSWNvbk1hcFtpY29uXSA6ICdpY29uLWluZm8nO1xuICAgIH1cbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3Jlc3VsdC9zcmMvaW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhY2thZ2VzX3Jlc3VsdF9zcmN2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAocmVzdWx0X3NyY3Z1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9yZXN1bHQvc3JjL2luZGV4LnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIHJlc3VsdF9zcmNfY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBwYWNrYWdlc19yZXN1bHRfc3JjdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICBzcmN2dWVfdHlwZV90ZW1wbGF0ZV9pZF8zNDA4YjEzOV9yZW5kZXIsXG4gIHNyY3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzM0MDhiMTM5X3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgcmVzdWx0X3NyY19hcGk7IH1cbnJlc3VsdF9zcmNfY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy9yZXN1bHQvc3JjL2luZGV4LnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciByZXN1bHRfc3JjID0gKHJlc3VsdF9zcmNfY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9yZXN1bHQvaW5kZXguanNcblxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xucmVzdWx0X3NyYy5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuICBWdWUuY29tcG9uZW50KHJlc3VsdF9zcmMubmFtZSwgcmVzdWx0X3NyYyk7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc19yZXN1bHQgPSAocmVzdWx0X3NyYyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9pbmRleC5qc1xuLyogQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgJy4vYnVpbGQvYmluL2J1aWxkLWVudHJ5LmpzJyAqL1xuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxudmFyIGNvbXBvbmVudHMgPSBbcGFja2FnZXNfcGFnaW5hdGlvbiwgZGlhbG9nLCBwYWNrYWdlc19hdXRvY29tcGxldGUsIHBhY2thZ2VzX2Ryb3Bkb3duLCBwYWNrYWdlc19kcm9wZG93bl9tZW51LCBwYWNrYWdlc19kcm9wZG93bl9pdGVtLCBwYWNrYWdlc19tZW51LCBwYWNrYWdlc19zdWJtZW51LCBwYWNrYWdlc19tZW51X2l0ZW0sIHBhY2thZ2VzX21lbnVfaXRlbV9ncm91cCwgcGFja2FnZXNfaW5wdXQsIHBhY2thZ2VzX2lucHV0X251bWJlciwgcGFja2FnZXNfcmFkaW8sIHBhY2thZ2VzX3JhZGlvX2dyb3VwLCBwYWNrYWdlc19yYWRpb19idXR0b24sIHBhY2thZ2VzX2NoZWNrYm94LCBwYWNrYWdlc19jaGVja2JveF9idXR0b24sIHBhY2thZ2VzX2NoZWNrYm94X2dyb3VwLCBwYWNrYWdlc19zd2l0Y2gsIHBhY2thZ2VzX3NlbGVjdCwgcGFja2FnZXNfb3B0aW9uLCBwYWNrYWdlc19vcHRpb25fZ3JvdXAsIHBhY2thZ2VzX2J1dHRvbiwgcGFja2FnZXNfYnV0dG9uX2dyb3VwLCBwYWNrYWdlc190YWJsZSwgcGFja2FnZXNfdGFibGVfY29sdW1uLCBwYWNrYWdlc19kYXRlX3BpY2tlciwgcGFja2FnZXNfdGltZV9zZWxlY3QsIHBhY2thZ2VzX3RpbWVfcGlja2VyLCBwb3BvdmVyLCBwYWNrYWdlc190b29sdGlwLCBwYWNrYWdlc19icmVhZGNydW1iLCBwYWNrYWdlc19icmVhZGNydW1iX2l0ZW0sIHBhY2thZ2VzX2Zvcm0sIHBhY2thZ2VzX2Zvcm1faXRlbSwgcGFja2FnZXNfdGFicywgcGFja2FnZXNfdGFiX3BhbmUsIHBhY2thZ2VzX3RhZywgcGFja2FnZXNfdHJlZSwgcGFja2FnZXNfYWxlcnQsIHNsaWRlciwgcGFja2FnZXNfaWNvbiwgcGFja2FnZXNfcm93LCBwYWNrYWdlc19jb2wsIHBhY2thZ2VzX3VwbG9hZCwgcGFja2FnZXNfcHJvZ3Jlc3MsIHBhY2thZ2VzX3NwaW5uZXIsIGJhZGdlLCBjYXJkLCBwYWNrYWdlc19yYXRlLCBwYWNrYWdlc19zdGVwcywgcGFja2FnZXNfc3RlcCwgY2Fyb3VzZWwsIHNjcm9sbGJhciwgY2Fyb3VzZWxfaXRlbSwgcGFja2FnZXNfY29sbGFwc2UsIHBhY2thZ2VzX2NvbGxhcHNlX2l0ZW0sIHBhY2thZ2VzX2Nhc2NhZGVyLCBjb2xvcl9waWNrZXIsIHRyYW5zZmVyLCBwYWNrYWdlc19jb250YWluZXIsIGhlYWRlciwgYXNpZGUsIHBhY2thZ2VzX21haW4sIGZvb3RlciwgdGltZWxpbmUsIHRpbWVsaW5lX2l0ZW0sIHBhY2thZ2VzX2xpbmssIGRpdmlkZXIsIHBhY2thZ2VzX2ltYWdlLCBjYWxlbmRhciwgYmFja3RvcCwgcGFnZV9oZWFkZXIsIHBhY2thZ2VzX2Nhc2NhZGVyX3BhbmVsLCBhdmF0YXIsIGRyYXdlciwgc3RhdGlzdGljLCBwb3Bjb25maXJtLCBza2VsZXRvbiwgc2tlbGV0b25faXRlbSwgZW1wdHksIGRlc2NyaXB0aW9ucywgcGFja2FnZXNfZGVzY3JpcHRpb25zX2l0ZW0sIHBhY2thZ2VzX3Jlc3VsdCwgY29sbGFwc2VfdHJhbnNpdGlvbl9kZWZhdWx0LmFdO1xuXG52YXIgc3JjX2luc3RhbGwgPSBmdW5jdGlvbiBpbnN0YWxsKFZ1ZSkge1xuICB2YXIgb3B0cyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG5cbiAgbGliX2xvY2FsZV9kZWZhdWx0LmEudXNlKG9wdHMubG9jYWxlKTtcbiAgbGliX2xvY2FsZV9kZWZhdWx0LmEuaTE4bihvcHRzLmkxOG4pO1xuXG4gIGNvbXBvbmVudHMuZm9yRWFjaChmdW5jdGlvbiAoY29tcG9uZW50KSB7XG4gICAgVnVlLmNvbXBvbmVudChjb21wb25lbnQubmFtZSwgY29tcG9uZW50KTtcbiAgfSk7XG5cbiAgVnVlLnVzZShpbmZpbml0ZV9zY3JvbGwpO1xuICBWdWUudXNlKHBhY2thZ2VzX2xvYWRpbmcuZGlyZWN0aXZlKTtcblxuICBWdWUucHJvdG90eXBlLiRFTEVNRU5UID0ge1xuICAgIHNpemU6IG9wdHMuc2l6ZSB8fCAnJyxcbiAgICB6SW5kZXg6IG9wdHMuekluZGV4IHx8IDIwMDBcbiAgfTtcblxuICBWdWUucHJvdG90eXBlLiRsb2FkaW5nID0gcGFja2FnZXNfbG9hZGluZy5zZXJ2aWNlO1xuICBWdWUucHJvdG90eXBlLiRtc2dib3ggPSBtZXNzYWdlX2JveDtcbiAgVnVlLnByb3RvdHlwZS4kYWxlcnQgPSBtZXNzYWdlX2JveC5hbGVydDtcbiAgVnVlLnByb3RvdHlwZS4kY29uZmlybSA9IG1lc3NhZ2VfYm94LmNvbmZpcm07XG4gIFZ1ZS5wcm90b3R5cGUuJHByb21wdCA9IG1lc3NhZ2VfYm94LnByb21wdDtcbiAgVnVlLnByb3RvdHlwZS4kbm90aWZ5ID0gbm90aWZpY2F0aW9uO1xuICBWdWUucHJvdG90eXBlLiRtZXNzYWdlID0gcGFja2FnZXNfbWVzc2FnZTtcbn07XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5WdWUpIHtcbiAgc3JjX2luc3RhbGwod2luZG93LlZ1ZSk7XG59XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY18wID0gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoe1xuICB2ZXJzaW9uOiAnMi4xNS4xNCcsXG4gIGxvY2FsZTogbGliX2xvY2FsZV9kZWZhdWx0LmEudXNlLFxuICBpMThuOiBsaWJfbG9jYWxlX2RlZmF1bHQuYS5pMThuLFxuICBpbnN0YWxsOiBzcmNfaW5zdGFsbCxcbiAgQ29sbGFwc2VUcmFuc2l0aW9uOiBjb2xsYXBzZV90cmFuc2l0aW9uX2RlZmF1bHQuYSxcbiAgTG9hZGluZzogcGFja2FnZXNfbG9hZGluZyxcbiAgUGFnaW5hdGlvbjogcGFja2FnZXNfcGFnaW5hdGlvbixcbiAgRGlhbG9nOiBkaWFsb2csXG4gIEF1dG9jb21wbGV0ZTogcGFja2FnZXNfYXV0b2NvbXBsZXRlLFxuICBEcm9wZG93bjogcGFja2FnZXNfZHJvcGRvd24sXG4gIERyb3Bkb3duTWVudTogcGFja2FnZXNfZHJvcGRvd25fbWVudSxcbiAgRHJvcGRvd25JdGVtOiBwYWNrYWdlc19kcm9wZG93bl9pdGVtLFxuICBNZW51OiBwYWNrYWdlc19tZW51LFxuICBTdWJtZW51OiBwYWNrYWdlc19zdWJtZW51LFxuICBNZW51SXRlbTogcGFja2FnZXNfbWVudV9pdGVtLFxuICBNZW51SXRlbUdyb3VwOiBwYWNrYWdlc19tZW51X2l0ZW1fZ3JvdXAsXG4gIElucHV0OiBwYWNrYWdlc19pbnB1dCxcbiAgSW5wdXROdW1iZXI6IHBhY2thZ2VzX2lucHV0X251bWJlcixcbiAgUmFkaW86IHBhY2thZ2VzX3JhZGlvLFxuICBSYWRpb0dyb3VwOiBwYWNrYWdlc19yYWRpb19ncm91cCxcbiAgUmFkaW9CdXR0b246IHBhY2thZ2VzX3JhZGlvX2J1dHRvbixcbiAgQ2hlY2tib3g6IHBhY2thZ2VzX2NoZWNrYm94LFxuICBDaGVja2JveEJ1dHRvbjogcGFja2FnZXNfY2hlY2tib3hfYnV0dG9uLFxuICBDaGVja2JveEdyb3VwOiBwYWNrYWdlc19jaGVja2JveF9ncm91cCxcbiAgU3dpdGNoOiBwYWNrYWdlc19zd2l0Y2gsXG4gIFNlbGVjdDogcGFja2FnZXNfc2VsZWN0LFxuICBPcHRpb246IHBhY2thZ2VzX29wdGlvbixcbiAgT3B0aW9uR3JvdXA6IHBhY2thZ2VzX29wdGlvbl9ncm91cCxcbiAgQnV0dG9uOiBwYWNrYWdlc19idXR0b24sXG4gIEJ1dHRvbkdyb3VwOiBwYWNrYWdlc19idXR0b25fZ3JvdXAsXG4gIFRhYmxlOiBwYWNrYWdlc190YWJsZSxcbiAgVGFibGVDb2x1bW46IHBhY2thZ2VzX3RhYmxlX2NvbHVtbixcbiAgRGF0ZVBpY2tlcjogcGFja2FnZXNfZGF0ZV9waWNrZXIsXG4gIFRpbWVTZWxlY3Q6IHBhY2thZ2VzX3RpbWVfc2VsZWN0LFxuICBUaW1lUGlja2VyOiBwYWNrYWdlc190aW1lX3BpY2tlcixcbiAgUG9wb3ZlcjogcG9wb3ZlcixcbiAgVG9vbHRpcDogcGFja2FnZXNfdG9vbHRpcCxcbiAgTWVzc2FnZUJveDogbWVzc2FnZV9ib3gsXG4gIEJyZWFkY3J1bWI6IHBhY2thZ2VzX2JyZWFkY3J1bWIsXG4gIEJyZWFkY3J1bWJJdGVtOiBwYWNrYWdlc19icmVhZGNydW1iX2l0ZW0sXG4gIEZvcm06IHBhY2thZ2VzX2Zvcm0sXG4gIEZvcm1JdGVtOiBwYWNrYWdlc19mb3JtX2l0ZW0sXG4gIFRhYnM6IHBhY2thZ2VzX3RhYnMsXG4gIFRhYlBhbmU6IHBhY2thZ2VzX3RhYl9wYW5lLFxuICBUYWc6IHBhY2thZ2VzX3RhZyxcbiAgVHJlZTogcGFja2FnZXNfdHJlZSxcbiAgQWxlcnQ6IHBhY2thZ2VzX2FsZXJ0LFxuICBOb3RpZmljYXRpb246IG5vdGlmaWNhdGlvbixcbiAgU2xpZGVyOiBzbGlkZXIsXG4gIEljb246IHBhY2thZ2VzX2ljb24sXG4gIFJvdzogcGFja2FnZXNfcm93LFxuICBDb2w6IHBhY2thZ2VzX2NvbCxcbiAgVXBsb2FkOiBwYWNrYWdlc191cGxvYWQsXG4gIFByb2dyZXNzOiBwYWNrYWdlc19wcm9ncmVzcyxcbiAgU3Bpbm5lcjogcGFja2FnZXNfc3Bpbm5lcixcbiAgTWVzc2FnZTogcGFja2FnZXNfbWVzc2FnZSxcbiAgQmFkZ2U6IGJhZGdlLFxuICBDYXJkOiBjYXJkLFxuICBSYXRlOiBwYWNrYWdlc19yYXRlLFxuICBTdGVwczogcGFja2FnZXNfc3RlcHMsXG4gIFN0ZXA6IHBhY2thZ2VzX3N0ZXAsXG4gIENhcm91c2VsOiBjYXJvdXNlbCxcbiAgU2Nyb2xsYmFyOiBzY3JvbGxiYXIsXG4gIENhcm91c2VsSXRlbTogY2Fyb3VzZWxfaXRlbSxcbiAgQ29sbGFwc2U6IHBhY2thZ2VzX2NvbGxhcHNlLFxuICBDb2xsYXBzZUl0ZW06IHBhY2thZ2VzX2NvbGxhcHNlX2l0ZW0sXG4gIENhc2NhZGVyOiBwYWNrYWdlc19jYXNjYWRlcixcbiAgQ29sb3JQaWNrZXI6IGNvbG9yX3BpY2tlcixcbiAgVHJhbnNmZXI6IHRyYW5zZmVyLFxuICBDb250YWluZXI6IHBhY2thZ2VzX2NvbnRhaW5lcixcbiAgSGVhZGVyOiBoZWFkZXIsXG4gIEFzaWRlOiBhc2lkZSxcbiAgTWFpbjogcGFja2FnZXNfbWFpbixcbiAgRm9vdGVyOiBmb290ZXIsXG4gIFRpbWVsaW5lOiB0aW1lbGluZSxcbiAgVGltZWxpbmVJdGVtOiB0aW1lbGluZV9pdGVtLFxuICBMaW5rOiBwYWNrYWdlc19saW5rLFxuICBEaXZpZGVyOiBkaXZpZGVyLFxuICBJbWFnZTogcGFja2FnZXNfaW1hZ2UsXG4gIENhbGVuZGFyOiBjYWxlbmRhcixcbiAgQmFja3RvcDogYmFja3RvcCxcbiAgSW5maW5pdGVTY3JvbGw6IGluZmluaXRlX3Njcm9sbCxcbiAgUGFnZUhlYWRlcjogcGFnZV9oZWFkZXIsXG4gIENhc2NhZGVyUGFuZWw6IHBhY2thZ2VzX2Nhc2NhZGVyX3BhbmVsLFxuICBBdmF0YXI6IGF2YXRhcixcbiAgRHJhd2VyOiBkcmF3ZXIsXG4gIFN0YXRpc3RpYzogc3RhdGlzdGljLFxuICBQb3Bjb25maXJtOiBwb3Bjb25maXJtLFxuICBTa2VsZXRvbjogc2tlbGV0b24sXG4gIFNrZWxldG9uSXRlbTogc2tlbGV0b25faXRlbSxcbiAgRW1wdHk6IGVtcHR5LFxuICBEZXNjcmlwdGlvbnM6IGRlc2NyaXB0aW9ucyxcbiAgRGVzY3JpcHRpb25zSXRlbTogcGFja2FnZXNfZGVzY3JpcHRpb25zX2l0ZW0sXG4gIFJlc3VsdDogcGFja2FnZXNfcmVzdWx0XG59KTtcblxuLyoqKi8gfSlcbi8qKioqKiovIF0pW1wiZGVmYXVsdFwiXTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/element-ui.common.js\n");

/***/ }),

/***/ "./node_modules/element-ui/lib/input-number.js":
/*!*****************************************************!*\
  !*** ./node_modules/element-ui/lib/input-number.js ***!
  \*****************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

eval("module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __nested_webpack_require_187__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __nested_webpack_require_187__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__nested_webpack_require_187__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__nested_webpack_require_187__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__nested_webpack_require_187__.d = function(exports, name, getter) {\n/******/ \t\tif(!__nested_webpack_require_187__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__nested_webpack_require_187__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__nested_webpack_require_187__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __nested_webpack_require_187__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__nested_webpack_require_187__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __nested_webpack_require_187__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__nested_webpack_require_187__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__nested_webpack_require_187__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__nested_webpack_require_187__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__nested_webpack_require_187__.p = \"/dist/\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __nested_webpack_require_187__(__nested_webpack_require_187__.s = 87);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_3672__) {\n\n\"use strict\";\n/* harmony export (binding) */ __nested_webpack_require_3672__.d(__nested_webpack_exports__, \"a\", function() { return normalizeComponent; });\n/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nfunction normalizeComponent (\n  scriptExports,\n  render,\n  staticRenderFns,\n  functionalTemplate,\n  injectStyles,\n  scopeId,\n  moduleIdentifier, /* server only */\n  shadowMode /* vue-cli only */\n) {\n  // Vue.extend constructor export interop\n  var options = typeof scriptExports === 'function'\n    ? scriptExports.options\n    : scriptExports\n\n  // render functions\n  if (render) {\n    options.render = render\n    options.staticRenderFns = staticRenderFns\n    options._compiled = true\n  }\n\n  // functional template\n  if (functionalTemplate) {\n    options.functional = true\n  }\n\n  // scopedId\n  if (scopeId) {\n    options._scopeId = 'data-v-' + scopeId\n  }\n\n  var hook\n  if (moduleIdentifier) { // server build\n    hook = function (context) {\n      // 2.3 injection\n      context =\n        context || // cached call\n        (this.$vnode && this.$vnode.ssrContext) || // stateful\n        (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n      // 2.2 with runInNewContext: true\n      if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n        context = __VUE_SSR_CONTEXT__\n      }\n      // inject component styles\n      if (injectStyles) {\n        injectStyles.call(this, context)\n      }\n      // register component module identifier for async chunk inferrence\n      if (context && context._registeredComponents) {\n        context._registeredComponents.add(moduleIdentifier)\n      }\n    }\n    // used by ssr in case component is cached and beforeCreate\n    // never gets called\n    options._ssrRegister = hook\n  } else if (injectStyles) {\n    hook = shadowMode\n      ? function () { injectStyles.call(this, this.$root.$options.shadowRoot) }\n      : injectStyles\n  }\n\n  if (hook) {\n    if (options.functional) {\n      // for template-only hot-reload because in that case the render fn doesn't\n      // go through the normalizer\n      options._injectStyles = hook\n      // register for functioal component in vue file\n      var originalRender = options.render\n      options.render = function renderWithStyleInjection (h, context) {\n        hook.call(context)\n        return originalRender(h, context)\n      }\n    } else {\n      // inject component registration as beforeCreate hook\n      var existing = options.beforeCreate\n      options.beforeCreate = existing\n        ? [].concat(existing, hook)\n        : [hook]\n    }\n  }\n\n  return {\n    exports: scriptExports,\n    options: options\n  }\n}\n\n\n/***/ }),\n\n/***/ 10:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/input */ \"./node_modules/element-ui/lib/input.js\");\n\n/***/ }),\n\n/***/ 2:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/dom */ \"./node_modules/element-ui/lib/utils/dom.js\");\n\n/***/ }),\n\n/***/ 22:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/mixins/focus */ \"./node_modules/element-ui/lib/mixins/focus.js\");\n\n/***/ }),\n\n/***/ 3:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/util */ \"./node_modules/element-ui/lib/utils/util.js\");\n\n/***/ }),\n\n/***/ 30:\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_7021__) {\n\n\"use strict\";\n/* harmony import */ var element_ui_src_utils_dom__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_7021__(2);\n/* harmony import */ var element_ui_src_utils_dom__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_7021__.n(element_ui_src_utils_dom__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var element_ui_src_utils_util__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_7021__(3);\n/* harmony import */ var element_ui_src_utils_util__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__nested_webpack_require_7021__.n(element_ui_src_utils_util__WEBPACK_IMPORTED_MODULE_1__);\n\n\n\n/* harmony default export */ __nested_webpack_exports__[\"a\"] = ({\n  bind: function bind(el, binding, vnode) {\n    var interval = null;\n    var startTime = void 0;\n    var maxIntervals = Object(element_ui_src_utils_util__WEBPACK_IMPORTED_MODULE_1__[\"isMac\"])() ? 100 : 200;\n    var handler = function handler() {\n      return vnode.context[binding.expression].apply();\n    };\n    var clear = function clear() {\n      if (Date.now() - startTime < maxIntervals) {\n        handler();\n      }\n      clearInterval(interval);\n      interval = null;\n    };\n\n    Object(element_ui_src_utils_dom__WEBPACK_IMPORTED_MODULE_0__[\"on\"])(el, 'mousedown', function (e) {\n      if (e.button !== 0) return;\n      startTime = Date.now();\n      Object(element_ui_src_utils_dom__WEBPACK_IMPORTED_MODULE_0__[\"once\"])(document, 'mouseup', clear);\n      clearInterval(interval);\n      interval = setInterval(handler, maxIntervals);\n    });\n  }\n});\n\n/***/ }),\n\n/***/ 87:\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_8618__) {\n\n\"use strict\";\n__nested_webpack_require_8618__.r(__nested_webpack_exports__);\n\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/input-number/src/input-number.vue?vue&type=template&id=42f8cf66&\nvar render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    {\n      class: [\n        \"el-input-number\",\n        _vm.inputNumberSize ? \"el-input-number--\" + _vm.inputNumberSize : \"\",\n        { \"is-disabled\": _vm.inputNumberDisabled },\n        { \"is-without-controls\": !_vm.controls },\n        { \"is-controls-right\": _vm.controlsAtRight }\n      ],\n      on: {\n        dragstart: function($event) {\n          $event.preventDefault()\n        }\n      }\n    },\n    [\n      _vm.controls\n        ? _c(\n            \"span\",\n            {\n              directives: [\n                {\n                  name: \"repeat-click\",\n                  rawName: \"v-repeat-click\",\n                  value: _vm.decrease,\n                  expression: \"decrease\"\n                }\n              ],\n              staticClass: \"el-input-number__decrease\",\n              class: { \"is-disabled\": _vm.minDisabled },\n              attrs: { role: \"button\" },\n              on: {\n                keydown: function($event) {\n                  if (\n                    !(\"button\" in $event) &&\n                    _vm._k($event.keyCode, \"enter\", 13, $event.key, \"Enter\")\n                  ) {\n                    return null\n                  }\n                  return _vm.decrease($event)\n                }\n              }\n            },\n            [\n              _c(\"i\", {\n                class:\n                  \"el-icon-\" + (_vm.controlsAtRight ? \"arrow-down\" : \"minus\")\n              })\n            ]\n          )\n        : _vm._e(),\n      _vm.controls\n        ? _c(\n            \"span\",\n            {\n              directives: [\n                {\n                  name: \"repeat-click\",\n                  rawName: \"v-repeat-click\",\n                  value: _vm.increase,\n                  expression: \"increase\"\n                }\n              ],\n              staticClass: \"el-input-number__increase\",\n              class: { \"is-disabled\": _vm.maxDisabled },\n              attrs: { role: \"button\" },\n              on: {\n                keydown: function($event) {\n                  if (\n                    !(\"button\" in $event) &&\n                    _vm._k($event.keyCode, \"enter\", 13, $event.key, \"Enter\")\n                  ) {\n                    return null\n                  }\n                  return _vm.increase($event)\n                }\n              }\n            },\n            [\n              _c(\"i\", {\n                class: \"el-icon-\" + (_vm.controlsAtRight ? \"arrow-up\" : \"plus\")\n              })\n            ]\n          )\n        : _vm._e(),\n      _c(\"el-input\", {\n        ref: \"input\",\n        attrs: {\n          value: _vm.displayValue,\n          placeholder: _vm.placeholder,\n          disabled: _vm.inputNumberDisabled,\n          size: _vm.inputNumberSize,\n          max: _vm.max,\n          min: _vm.min,\n          name: _vm.name,\n          label: _vm.label\n        },\n        on: {\n          blur: _vm.handleBlur,\n          focus: _vm.handleFocus,\n          input: _vm.handleInput,\n          change: _vm.handleInputChange\n        },\n        nativeOn: {\n          keydown: [\n            function($event) {\n              if (\n                !(\"button\" in $event) &&\n                _vm._k($event.keyCode, \"up\", 38, $event.key, [\"Up\", \"ArrowUp\"])\n              ) {\n                return null\n              }\n              $event.preventDefault()\n              return _vm.increase($event)\n            },\n            function($event) {\n              if (\n                !(\"button\" in $event) &&\n                _vm._k($event.keyCode, \"down\", 40, $event.key, [\n                  \"Down\",\n                  \"ArrowDown\"\n                ])\n              ) {\n                return null\n              }\n              $event.preventDefault()\n              return _vm.decrease($event)\n            }\n          ]\n        }\n      })\n    ],\n    1\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/input-number/src/input-number.vue?vue&type=template&id=42f8cf66&\n\n// EXTERNAL MODULE: external \"element-ui/lib/input\"\nvar input_ = __nested_webpack_require_8618__(10);\nvar input_default = /*#__PURE__*/__nested_webpack_require_8618__.n(input_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/mixins/focus\"\nvar focus_ = __nested_webpack_require_8618__(22);\nvar focus_default = /*#__PURE__*/__nested_webpack_require_8618__.n(focus_);\n\n// EXTERNAL MODULE: ./src/directives/repeat-click.js\nvar repeat_click = __nested_webpack_require_8618__(30);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/input-number/src/input-number.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n/* harmony default export */ var input_numbervue_type_script_lang_js_ = ({\n  name: 'ElInputNumber',\n  mixins: [focus_default()('input')],\n  inject: {\n    elForm: {\n      default: ''\n    },\n    elFormItem: {\n      default: ''\n    }\n  },\n  directives: {\n    repeatClick: repeat_click[\"a\" /* default */]\n  },\n  components: {\n    ElInput: input_default.a\n  },\n  props: {\n    step: {\n      type: Number,\n      default: 1\n    },\n    stepStrictly: {\n      type: Boolean,\n      default: false\n    },\n    max: {\n      type: Number,\n      default: Infinity\n    },\n    min: {\n      type: Number,\n      default: -Infinity\n    },\n    value: {},\n    disabled: Boolean,\n    size: String,\n    controls: {\n      type: Boolean,\n      default: true\n    },\n    controlsPosition: {\n      type: String,\n      default: ''\n    },\n    name: String,\n    label: String,\n    placeholder: String,\n    precision: {\n      type: Number,\n      validator: function validator(val) {\n        return val >= 0 && val === parseInt(val, 10);\n      }\n    }\n  },\n  data: function data() {\n    return {\n      currentValue: 0,\n      userInput: null\n    };\n  },\n\n  watch: {\n    value: {\n      immediate: true,\n      handler: function handler(value) {\n        var newVal = value === undefined ? value : Number(value);\n        if (newVal !== undefined) {\n          if (isNaN(newVal)) {\n            return;\n          }\n\n          if (this.stepStrictly) {\n            var stepPrecision = this.getPrecision(this.step);\n            var precisionFactor = Math.pow(10, stepPrecision);\n            newVal = Math.round(newVal / this.step) * precisionFactor * this.step / precisionFactor;\n          }\n\n          if (this.precision !== undefined) {\n            newVal = this.toPrecision(newVal, this.precision);\n          }\n        }\n        if (newVal >= this.max) newVal = this.max;\n        if (newVal <= this.min) newVal = this.min;\n        this.currentValue = newVal;\n        this.userInput = null;\n        this.$emit('input', newVal);\n      }\n    }\n  },\n  computed: {\n    minDisabled: function minDisabled() {\n      return this._decrease(this.value, this.step) < this.min;\n    },\n    maxDisabled: function maxDisabled() {\n      return this._increase(this.value, this.step) > this.max;\n    },\n    numPrecision: function numPrecision() {\n      var value = this.value,\n          step = this.step,\n          getPrecision = this.getPrecision,\n          precision = this.precision;\n\n      var stepPrecision = getPrecision(step);\n      if (precision !== undefined) {\n        if (stepPrecision > precision) {\n          console.warn('[Element Warn][InputNumber]precision should not be less than the decimal places of step');\n        }\n        return precision;\n      } else {\n        return Math.max(getPrecision(value), stepPrecision);\n      }\n    },\n    controlsAtRight: function controlsAtRight() {\n      return this.controls && this.controlsPosition === 'right';\n    },\n    _elFormItemSize: function _elFormItemSize() {\n      return (this.elFormItem || {}).elFormItemSize;\n    },\n    inputNumberSize: function inputNumberSize() {\n      return this.size || this._elFormItemSize || (this.$ELEMENT || {}).size;\n    },\n    inputNumberDisabled: function inputNumberDisabled() {\n      return this.disabled || !!(this.elForm || {}).disabled;\n    },\n    displayValue: function displayValue() {\n      if (this.userInput !== null) {\n        return this.userInput;\n      }\n\n      var currentValue = this.currentValue;\n\n      if (typeof currentValue === 'number') {\n        if (this.stepStrictly) {\n          var stepPrecision = this.getPrecision(this.step);\n          var precisionFactor = Math.pow(10, stepPrecision);\n          currentValue = Math.round(currentValue / this.step) * precisionFactor * this.step / precisionFactor;\n        }\n\n        if (this.precision !== undefined) {\n          currentValue = currentValue.toFixed(this.precision);\n        }\n      }\n\n      return currentValue;\n    }\n  },\n  methods: {\n    toPrecision: function toPrecision(num, precision) {\n      if (precision === undefined) precision = this.numPrecision;\n      return parseFloat(Math.round(num * Math.pow(10, precision)) / Math.pow(10, precision));\n    },\n    getPrecision: function getPrecision(value) {\n      if (value === undefined) return 0;\n      var valueString = value.toString();\n      var dotPosition = valueString.indexOf('.');\n      var precision = 0;\n      if (dotPosition !== -1) {\n        precision = valueString.length - dotPosition - 1;\n      }\n      return precision;\n    },\n    _increase: function _increase(val, step) {\n      if (typeof val !== 'number' && val !== undefined) return this.currentValue;\n\n      var precisionFactor = Math.pow(10, this.numPrecision);\n      // Solve the accuracy problem of JS decimal calculation by converting the value to integer.\n      return this.toPrecision((precisionFactor * val + precisionFactor * step) / precisionFactor);\n    },\n    _decrease: function _decrease(val, step) {\n      if (typeof val !== 'number' && val !== undefined) return this.currentValue;\n\n      var precisionFactor = Math.pow(10, this.numPrecision);\n\n      return this.toPrecision((precisionFactor * val - precisionFactor * step) / precisionFactor);\n    },\n    increase: function increase() {\n      if (this.inputNumberDisabled || this.maxDisabled) return;\n      var value = this.value || 0;\n      var newVal = this._increase(value, this.step);\n      this.setCurrentValue(newVal);\n    },\n    decrease: function decrease() {\n      if (this.inputNumberDisabled || this.minDisabled) return;\n      var value = this.value || 0;\n      var newVal = this._decrease(value, this.step);\n      this.setCurrentValue(newVal);\n    },\n    handleBlur: function handleBlur(event) {\n      this.$emit('blur', event);\n    },\n    handleFocus: function handleFocus(event) {\n      this.$emit('focus', event);\n    },\n    setCurrentValue: function setCurrentValue(newVal) {\n      var oldVal = this.currentValue;\n      if (typeof newVal === 'number' && this.precision !== undefined) {\n        newVal = this.toPrecision(newVal, this.precision);\n      }\n      if (newVal >= this.max) newVal = this.max;\n      if (newVal <= this.min) newVal = this.min;\n      if (oldVal === newVal) return;\n      this.userInput = null;\n      this.$emit('input', newVal);\n      this.$emit('change', newVal, oldVal);\n      this.currentValue = newVal;\n    },\n    handleInput: function handleInput(value) {\n      this.userInput = value;\n    },\n    handleInputChange: function handleInputChange(value) {\n      var newVal = value === '' ? undefined : Number(value);\n      if (!isNaN(newVal) || value === '') {\n        this.setCurrentValue(newVal);\n      }\n      this.userInput = null;\n    },\n    select: function select() {\n      this.$refs.input.select();\n    }\n  },\n  mounted: function mounted() {\n    var innerInput = this.$refs.input.$refs.input;\n    innerInput.setAttribute('role', 'spinbutton');\n    innerInput.setAttribute('aria-valuemax', this.max);\n    innerInput.setAttribute('aria-valuemin', this.min);\n    innerInput.setAttribute('aria-valuenow', this.currentValue);\n    innerInput.setAttribute('aria-disabled', this.inputNumberDisabled);\n  },\n  updated: function updated() {\n    if (!this.$refs || !this.$refs.input) return;\n    var innerInput = this.$refs.input.$refs.input;\n    innerInput.setAttribute('aria-valuenow', this.currentValue);\n  }\n});\n// CONCATENATED MODULE: ./packages/input-number/src/input-number.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_input_numbervue_type_script_lang_js_ = (input_numbervue_type_script_lang_js_); \n// EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js\nvar componentNormalizer = __nested_webpack_require_8618__(0);\n\n// CONCATENATED MODULE: ./packages/input-number/src/input-number.vue\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(componentNormalizer[\"a\" /* default */])(\n  src_input_numbervue_type_script_lang_js_,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"packages/input-number/src/input-number.vue\"\n/* harmony default export */ var input_number = (component.exports);\n// CONCATENATED MODULE: ./packages/input-number/index.js\n\n\n/* istanbul ignore next */\ninput_number.install = function (Vue) {\n  Vue.component(input_number.name, input_number);\n};\n\n/* harmony default export */ var packages_input_number = __nested_webpack_exports__[\"default\"] = (input_number);\n\n/***/ })\n\n/******/ });//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvaW5wdXQtbnVtYmVyLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsOEJBQThCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLDhCQUFtQjtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBFQUEwRSw4QkFBbUI7QUFDN0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLDhCQUFtQjtBQUM3QjtBQUNBO0FBQ0EsVUFBVSw4QkFBbUI7QUFDN0I7QUFDQTtBQUNBLFVBQVUsOEJBQW1CO0FBQzdCLGVBQWUsOEJBQW1CO0FBQ2xDLG1EQUFtRCwrQkFBK0I7QUFDbEY7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLDhCQUFtQjtBQUM3QjtBQUNBLGlFQUFpRSxpQkFBaUI7QUFDbEY7QUFDQSwwREFBMEQsYUFBYTtBQUN2RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsOEJBQW1CO0FBQzdCLGdDQUFnQyw4QkFBbUI7QUFDbkQ7QUFDQTtBQUNBO0FBQ0EsV0FBVyw4QkFBbUI7QUFDOUIsa0RBQWtELGdDQUFnQztBQUNsRiwwRUFBMEUsOEJBQW1CLDRCQUE0QixvQkFBb0I7QUFDN0k7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLDhCQUFtQjtBQUM3QjtBQUNBLG9DQUFvQyw0QkFBNEI7QUFDaEUsMENBQTBDO0FBQzFDLFdBQVcsOEJBQW1CO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSw4QkFBbUIsa0NBQWtDO0FBQy9EO0FBQ0E7QUFDQSxVQUFVLDhCQUFtQjtBQUM3QjtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsOEJBQW1CLENBQUMsOEJBQW1CO0FBQ3hELFVBQVU7QUFDVjtBQUNBOztBQUVBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLCtCQUFtQjs7QUFFaEU7QUFDQSwrQkFBK0IsK0JBQW1CLEdBQUcsMEJBQW1CLG9CQUFvQiw0QkFBNEI7QUFDeEg7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0Esc0JBQXNCO0FBQ3RCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQSxPQUFPOztBQUVQO0FBQ0E7O0FBRUEsaUJBQWlCLG1CQUFPLENBQUMsb0VBQXNCOztBQUUvQyxPQUFPOztBQUVQO0FBQ0E7O0FBRUEsaUJBQWlCLG1CQUFPLENBQUMsNEVBQTBCOztBQUVuRCxPQUFPOztBQUVQO0FBQ0E7O0FBRUEsaUJBQWlCLG1CQUFPLENBQUMsa0ZBQTZCOztBQUV0RCxPQUFPOztBQUVQO0FBQ0E7O0FBRUEsaUJBQWlCLG1CQUFPLENBQUMsOEVBQTJCOztBQUVwRCxPQUFPOztBQUVQO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLCtCQUFtQjs7QUFFaEU7QUFDQSxpRkFBaUYsK0JBQW1CO0FBQ3BHLHNHQUFzRywrQkFBbUI7QUFDekgsa0ZBQWtGLCtCQUFtQjtBQUNyRyx1R0FBdUcsK0JBQW1COzs7O0FBSTFILDZCQUE2QiwwQkFBbUI7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxDQUFDOztBQUVELE9BQU87O0FBRVA7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsK0JBQW1COztBQUVoRTtBQUNBLCtCQUFtQixHQUFHLDBCQUFtQjs7QUFFekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsd0NBQXdDO0FBQ2xELFVBQVUsc0NBQXNDO0FBQ2hELFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixnQ0FBZ0M7QUFDdkQsdUJBQXVCLGdCQUFnQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLGdDQUFnQztBQUN2RCx1QkFBdUIsZ0JBQWdCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0EsYUFBYSwrQkFBbUI7QUFDaEMsaUNBQWlDLCtCQUFtQjs7QUFFcEQ7QUFDQSxhQUFhLCtCQUFtQjtBQUNoQyxpQ0FBaUMsK0JBQW1COztBQUVwRDtBQUNBLG1CQUFtQiwrQkFBbUI7O0FBRXRDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7O0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLG1DQUFtQztBQUNuQyxLQUFLO0FBQ0w7QUFDQSxzRUFBc0U7QUFDdEUsS0FBSztBQUNMO0FBQ0Esa0RBQWtEO0FBQ2xELEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsK0JBQW1COztBQUU3Qzs7Ozs7O0FBTUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLEtBQUssRUFBRSxZQUFZO0FBQ3ZCO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEseURBQXlELDBCQUFtQjs7QUFFNUUsT0FBTzs7QUFFUCxVQUFVIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2VsZW1lbnQtdWkvbGliL2lucHV0LW51bWJlci5qcz83OTNmIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID1cbi8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXBcbi8qKioqKiovIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbi8qKioqKiovIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbi8qKioqKiovIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuLyoqKioqKi8gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4vKioqKioqLyBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuLyoqKioqKi8gXHRcdFx0aTogbW9kdWxlSWQsXG4vKioqKioqLyBcdFx0XHRsOiBmYWxzZSxcbi8qKioqKiovIFx0XHRcdGV4cG9ydHM6IHt9XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4vKioqKioqLyBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbi8qKioqKiovIFx0XHRtb2R1bGUubCA9IHRydWU7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4vKioqKioqLyBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuLyoqKioqKi8gXHR9XG4vKioqKioqL1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4vKioqKioqLyBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4vKioqKioqLyBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4vKioqKioqLyBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbi8qKioqKiovIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuLyoqKioqKi8gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbi8qKioqKiovIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuLyoqKioqKi8gXHRcdHJldHVybiBucztcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuLyoqKioqKi8gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuLyoqKioqKi8gXHRcdHJldHVybiBnZXR0ZXI7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCIvZGlzdC9cIjtcbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8qKioqKiovIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gODcpO1xuLyoqKioqKi8gfSlcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyAoe1xuXG4vKioqLyAwOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJhXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gbm9ybWFsaXplQ29tcG9uZW50OyB9KTtcbi8qIGdsb2JhbHMgX19WVUVfU1NSX0NPTlRFWFRfXyAqL1xuXG4vLyBJTVBPUlRBTlQ6IERvIE5PVCB1c2UgRVMyMDE1IGZlYXR1cmVzIGluIHRoaXMgZmlsZSAoZXhjZXB0IGZvciBtb2R1bGVzKS5cbi8vIFRoaXMgbW9kdWxlIGlzIGEgcnVudGltZSB1dGlsaXR5IGZvciBjbGVhbmVyIGNvbXBvbmVudCBtb2R1bGUgb3V0cHV0IGFuZCB3aWxsXG4vLyBiZSBpbmNsdWRlZCBpbiB0aGUgZmluYWwgd2VicGFjayB1c2VyIGJ1bmRsZS5cblxuZnVuY3Rpb24gbm9ybWFsaXplQ29tcG9uZW50IChcbiAgc2NyaXB0RXhwb3J0cyxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZ1bmN0aW9uYWxUZW1wbGF0ZSxcbiAgaW5qZWN0U3R5bGVzLFxuICBzY29wZUlkLFxuICBtb2R1bGVJZGVudGlmaWVyLCAvKiBzZXJ2ZXIgb25seSAqL1xuICBzaGFkb3dNb2RlIC8qIHZ1ZS1jbGkgb25seSAqL1xuKSB7XG4gIC8vIFZ1ZS5leHRlbmQgY29uc3RydWN0b3IgZXhwb3J0IGludGVyb3BcbiAgdmFyIG9wdGlvbnMgPSB0eXBlb2Ygc2NyaXB0RXhwb3J0cyA9PT0gJ2Z1bmN0aW9uJ1xuICAgID8gc2NyaXB0RXhwb3J0cy5vcHRpb25zXG4gICAgOiBzY3JpcHRFeHBvcnRzXG5cbiAgLy8gcmVuZGVyIGZ1bmN0aW9uc1xuICBpZiAocmVuZGVyKSB7XG4gICAgb3B0aW9ucy5yZW5kZXIgPSByZW5kZXJcbiAgICBvcHRpb25zLnN0YXRpY1JlbmRlckZucyA9IHN0YXRpY1JlbmRlckZuc1xuICAgIG9wdGlvbnMuX2NvbXBpbGVkID0gdHJ1ZVxuICB9XG5cbiAgLy8gZnVuY3Rpb25hbCB0ZW1wbGF0ZVxuICBpZiAoZnVuY3Rpb25hbFRlbXBsYXRlKSB7XG4gICAgb3B0aW9ucy5mdW5jdGlvbmFsID0gdHJ1ZVxuICB9XG5cbiAgLy8gc2NvcGVkSWRcbiAgaWYgKHNjb3BlSWQpIHtcbiAgICBvcHRpb25zLl9zY29wZUlkID0gJ2RhdGEtdi0nICsgc2NvcGVJZFxuICB9XG5cbiAgdmFyIGhvb2tcbiAgaWYgKG1vZHVsZUlkZW50aWZpZXIpIHsgLy8gc2VydmVyIGJ1aWxkXG4gICAgaG9vayA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgICAvLyAyLjMgaW5qZWN0aW9uXG4gICAgICBjb250ZXh0ID1cbiAgICAgICAgY29udGV4dCB8fCAvLyBjYWNoZWQgY2FsbFxuICAgICAgICAodGhpcy4kdm5vZGUgJiYgdGhpcy4kdm5vZGUuc3NyQ29udGV4dCkgfHwgLy8gc3RhdGVmdWxcbiAgICAgICAgKHRoaXMucGFyZW50ICYmIHRoaXMucGFyZW50LiR2bm9kZSAmJiB0aGlzLnBhcmVudC4kdm5vZGUuc3NyQ29udGV4dCkgLy8gZnVuY3Rpb25hbFxuICAgICAgLy8gMi4yIHdpdGggcnVuSW5OZXdDb250ZXh0OiB0cnVlXG4gICAgICBpZiAoIWNvbnRleHQgJiYgdHlwZW9mIF9fVlVFX1NTUl9DT05URVhUX18gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGNvbnRleHQgPSBfX1ZVRV9TU1JfQ09OVEVYVF9fXG4gICAgICB9XG4gICAgICAvLyBpbmplY3QgY29tcG9uZW50IHN0eWxlc1xuICAgICAgaWYgKGluamVjdFN0eWxlcykge1xuICAgICAgICBpbmplY3RTdHlsZXMuY2FsbCh0aGlzLCBjb250ZXh0KVxuICAgICAgfVxuICAgICAgLy8gcmVnaXN0ZXIgY29tcG9uZW50IG1vZHVsZSBpZGVudGlmaWVyIGZvciBhc3luYyBjaHVuayBpbmZlcnJlbmNlXG4gICAgICBpZiAoY29udGV4dCAmJiBjb250ZXh0Ll9yZWdpc3RlcmVkQ29tcG9uZW50cykge1xuICAgICAgICBjb250ZXh0Ll9yZWdpc3RlcmVkQ29tcG9uZW50cy5hZGQobW9kdWxlSWRlbnRpZmllcilcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gdXNlZCBieSBzc3IgaW4gY2FzZSBjb21wb25lbnQgaXMgY2FjaGVkIGFuZCBiZWZvcmVDcmVhdGVcbiAgICAvLyBuZXZlciBnZXRzIGNhbGxlZFxuICAgIG9wdGlvbnMuX3NzclJlZ2lzdGVyID0gaG9va1xuICB9IGVsc2UgaWYgKGluamVjdFN0eWxlcykge1xuICAgIGhvb2sgPSBzaGFkb3dNb2RlXG4gICAgICA/IGZ1bmN0aW9uICgpIHsgaW5qZWN0U3R5bGVzLmNhbGwodGhpcywgdGhpcy4kcm9vdC4kb3B0aW9ucy5zaGFkb3dSb290KSB9XG4gICAgICA6IGluamVjdFN0eWxlc1xuICB9XG5cbiAgaWYgKGhvb2spIHtcbiAgICBpZiAob3B0aW9ucy5mdW5jdGlvbmFsKSB7XG4gICAgICAvLyBmb3IgdGVtcGxhdGUtb25seSBob3QtcmVsb2FkIGJlY2F1c2UgaW4gdGhhdCBjYXNlIHRoZSByZW5kZXIgZm4gZG9lc24ndFxuICAgICAgLy8gZ28gdGhyb3VnaCB0aGUgbm9ybWFsaXplclxuICAgICAgb3B0aW9ucy5faW5qZWN0U3R5bGVzID0gaG9va1xuICAgICAgLy8gcmVnaXN0ZXIgZm9yIGZ1bmN0aW9hbCBjb21wb25lbnQgaW4gdnVlIGZpbGVcbiAgICAgIHZhciBvcmlnaW5hbFJlbmRlciA9IG9wdGlvbnMucmVuZGVyXG4gICAgICBvcHRpb25zLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcldpdGhTdHlsZUluamVjdGlvbiAoaCwgY29udGV4dCkge1xuICAgICAgICBob29rLmNhbGwoY29udGV4dClcbiAgICAgICAgcmV0dXJuIG9yaWdpbmFsUmVuZGVyKGgsIGNvbnRleHQpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGluamVjdCBjb21wb25lbnQgcmVnaXN0cmF0aW9uIGFzIGJlZm9yZUNyZWF0ZSBob29rXG4gICAgICB2YXIgZXhpc3RpbmcgPSBvcHRpb25zLmJlZm9yZUNyZWF0ZVxuICAgICAgb3B0aW9ucy5iZWZvcmVDcmVhdGUgPSBleGlzdGluZ1xuICAgICAgICA/IFtdLmNvbmNhdChleGlzdGluZywgaG9vaylcbiAgICAgICAgOiBbaG9va11cbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGV4cG9ydHM6IHNjcmlwdEV4cG9ydHMsXG4gICAgb3B0aW9uczogb3B0aW9uc1xuICB9XG59XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDEwOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi9pbnB1dFwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImVsZW1lbnQtdWkvbGliL3V0aWxzL2RvbVwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDIyOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi9taXhpbnMvZm9jdXNcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAzOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi91dGlscy91dGlsXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMzA6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIGVsZW1lbnRfdWlfc3JjX3V0aWxzX2RvbV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBlbGVtZW50X3VpX3NyY191dGlsc19kb21fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihlbGVtZW50X3VpX3NyY191dGlsc19kb21fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgZWxlbWVudF91aV9zcmNfdXRpbHNfdXRpbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBlbGVtZW50X3VpX3NyY191dGlsc191dGlsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oZWxlbWVudF91aV9zcmNfdXRpbHNfdXRpbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fKTtcblxuXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImFcIl0gPSAoe1xuICBiaW5kOiBmdW5jdGlvbiBiaW5kKGVsLCBiaW5kaW5nLCB2bm9kZSkge1xuICAgIHZhciBpbnRlcnZhbCA9IG51bGw7XG4gICAgdmFyIHN0YXJ0VGltZSA9IHZvaWQgMDtcbiAgICB2YXIgbWF4SW50ZXJ2YWxzID0gT2JqZWN0KGVsZW1lbnRfdWlfc3JjX3V0aWxzX3V0aWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcImlzTWFjXCJdKSgpID8gMTAwIDogMjAwO1xuICAgIHZhciBoYW5kbGVyID0gZnVuY3Rpb24gaGFuZGxlcigpIHtcbiAgICAgIHJldHVybiB2bm9kZS5jb250ZXh0W2JpbmRpbmcuZXhwcmVzc2lvbl0uYXBwbHkoKTtcbiAgICB9O1xuICAgIHZhciBjbGVhciA9IGZ1bmN0aW9uIGNsZWFyKCkge1xuICAgICAgaWYgKERhdGUubm93KCkgLSBzdGFydFRpbWUgPCBtYXhJbnRlcnZhbHMpIHtcbiAgICAgICAgaGFuZGxlcigpO1xuICAgICAgfVxuICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7XG4gICAgICBpbnRlcnZhbCA9IG51bGw7XG4gICAgfTtcblxuICAgIE9iamVjdChlbGVtZW50X3VpX3NyY191dGlsc19kb21fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIm9uXCJdKShlbCwgJ21vdXNlZG93bicsIGZ1bmN0aW9uIChlKSB7XG4gICAgICBpZiAoZS5idXR0b24gIT09IDApIHJldHVybjtcbiAgICAgIHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgICBPYmplY3QoZWxlbWVudF91aV9zcmNfdXRpbHNfZG9tX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJvbmNlXCJdKShkb2N1bWVudCwgJ21vdXNldXAnLCBjbGVhcik7XG4gICAgICBjbGVhckludGVydmFsKGludGVydmFsKTtcbiAgICAgIGludGVydmFsID0gc2V0SW50ZXJ2YWwoaGFuZGxlciwgbWF4SW50ZXJ2YWxzKTtcbiAgICB9KTtcbiAgfVxufSk7XG5cbi8qKiovIH0pLFxuXG4vKioqLyA4Nzpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvaW5wdXQtbnVtYmVyL3NyYy9pbnB1dC1udW1iZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTQyZjhjZjY2JlxudmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHtcbiAgICAgIGNsYXNzOiBbXG4gICAgICAgIFwiZWwtaW5wdXQtbnVtYmVyXCIsXG4gICAgICAgIF92bS5pbnB1dE51bWJlclNpemUgPyBcImVsLWlucHV0LW51bWJlci0tXCIgKyBfdm0uaW5wdXROdW1iZXJTaXplIDogXCJcIixcbiAgICAgICAgeyBcImlzLWRpc2FibGVkXCI6IF92bS5pbnB1dE51bWJlckRpc2FibGVkIH0sXG4gICAgICAgIHsgXCJpcy13aXRob3V0LWNvbnRyb2xzXCI6ICFfdm0uY29udHJvbHMgfSxcbiAgICAgICAgeyBcImlzLWNvbnRyb2xzLXJpZ2h0XCI6IF92bS5jb250cm9sc0F0UmlnaHQgfVxuICAgICAgXSxcbiAgICAgIG9uOiB7XG4gICAgICAgIGRyYWdzdGFydDogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgW1xuICAgICAgX3ZtLmNvbnRyb2xzXG4gICAgICAgID8gX2MoXG4gICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIG5hbWU6IFwicmVwZWF0LWNsaWNrXCIsXG4gICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtcmVwZWF0LWNsaWNrXCIsXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLmRlY3JlYXNlLFxuICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJkZWNyZWFzZVwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1pbnB1dC1udW1iZXJfX2RlY3JlYXNlXCIsXG4gICAgICAgICAgICAgIGNsYXNzOiB7IFwiaXMtZGlzYWJsZWRcIjogX3ZtLm1pbkRpc2FibGVkIH0sXG4gICAgICAgICAgICAgIGF0dHJzOiB7IHJvbGU6IFwiYnV0dG9uXCIgfSxcbiAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICBrZXlkb3duOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgIShcImJ1dHRvblwiIGluICRldmVudCkgJiZcbiAgICAgICAgICAgICAgICAgICAgX3ZtLl9rKCRldmVudC5rZXlDb2RlLCBcImVudGVyXCIsIDEzLCAkZXZlbnQua2V5LCBcIkVudGVyXCIpXG4gICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0uZGVjcmVhc2UoJGV2ZW50KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX2MoXCJpXCIsIHtcbiAgICAgICAgICAgICAgICBjbGFzczpcbiAgICAgICAgICAgICAgICAgIFwiZWwtaWNvbi1cIiArIChfdm0uY29udHJvbHNBdFJpZ2h0ID8gXCJhcnJvdy1kb3duXCIgOiBcIm1pbnVzXCIpXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgKVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgX3ZtLmNvbnRyb2xzXG4gICAgICAgID8gX2MoXG4gICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIG5hbWU6IFwicmVwZWF0LWNsaWNrXCIsXG4gICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtcmVwZWF0LWNsaWNrXCIsXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLmluY3JlYXNlLFxuICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJpbmNyZWFzZVwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1pbnB1dC1udW1iZXJfX2luY3JlYXNlXCIsXG4gICAgICAgICAgICAgIGNsYXNzOiB7IFwiaXMtZGlzYWJsZWRcIjogX3ZtLm1heERpc2FibGVkIH0sXG4gICAgICAgICAgICAgIGF0dHJzOiB7IHJvbGU6IFwiYnV0dG9uXCIgfSxcbiAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICBrZXlkb3duOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgIShcImJ1dHRvblwiIGluICRldmVudCkgJiZcbiAgICAgICAgICAgICAgICAgICAgX3ZtLl9rKCRldmVudC5rZXlDb2RlLCBcImVudGVyXCIsIDEzLCAkZXZlbnQua2V5LCBcIkVudGVyXCIpXG4gICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0uaW5jcmVhc2UoJGV2ZW50KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX2MoXCJpXCIsIHtcbiAgICAgICAgICAgICAgICBjbGFzczogXCJlbC1pY29uLVwiICsgKF92bS5jb250cm9sc0F0UmlnaHQgPyBcImFycm93LXVwXCIgOiBcInBsdXNcIilcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICApXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfYyhcImVsLWlucHV0XCIsIHtcbiAgICAgICAgcmVmOiBcImlucHV0XCIsXG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgdmFsdWU6IF92bS5kaXNwbGF5VmFsdWUsXG4gICAgICAgICAgcGxhY2Vob2xkZXI6IF92bS5wbGFjZWhvbGRlcixcbiAgICAgICAgICBkaXNhYmxlZDogX3ZtLmlucHV0TnVtYmVyRGlzYWJsZWQsXG4gICAgICAgICAgc2l6ZTogX3ZtLmlucHV0TnVtYmVyU2l6ZSxcbiAgICAgICAgICBtYXg6IF92bS5tYXgsXG4gICAgICAgICAgbWluOiBfdm0ubWluLFxuICAgICAgICAgIG5hbWU6IF92bS5uYW1lLFxuICAgICAgICAgIGxhYmVsOiBfdm0ubGFiZWxcbiAgICAgICAgfSxcbiAgICAgICAgb246IHtcbiAgICAgICAgICBibHVyOiBfdm0uaGFuZGxlQmx1cixcbiAgICAgICAgICBmb2N1czogX3ZtLmhhbmRsZUZvY3VzLFxuICAgICAgICAgIGlucHV0OiBfdm0uaGFuZGxlSW5wdXQsXG4gICAgICAgICAgY2hhbmdlOiBfdm0uaGFuZGxlSW5wdXRDaGFuZ2VcbiAgICAgICAgfSxcbiAgICAgICAgbmF0aXZlT246IHtcbiAgICAgICAgICBrZXlkb3duOiBbXG4gICAgICAgICAgICBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICEoXCJidXR0b25cIiBpbiAkZXZlbnQpICYmXG4gICAgICAgICAgICAgICAgX3ZtLl9rKCRldmVudC5rZXlDb2RlLCBcInVwXCIsIDM4LCAkZXZlbnQua2V5LCBbXCJVcFwiLCBcIkFycm93VXBcIl0pXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgICAgcmV0dXJuIF92bS5pbmNyZWFzZSgkZXZlbnQpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAhKFwiYnV0dG9uXCIgaW4gJGV2ZW50KSAmJlxuICAgICAgICAgICAgICAgIF92bS5faygkZXZlbnQua2V5Q29kZSwgXCJkb3duXCIsIDQwLCAkZXZlbnQua2V5LCBbXG4gICAgICAgICAgICAgICAgICBcIkRvd25cIixcbiAgICAgICAgICAgICAgICAgIFwiQXJyb3dEb3duXCJcbiAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICAgIHJldHVybiBfdm0uZGVjcmVhc2UoJGV2ZW50KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICBdLFxuICAgIDFcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2lucHV0LW51bWJlci9zcmMvaW5wdXQtbnVtYmVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00MmY4Y2Y2NiZcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcImVsZW1lbnQtdWkvbGliL2lucHV0XCJcbnZhciBpbnB1dF8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTtcbnZhciBpbnB1dF9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihpbnB1dF8pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiZWxlbWVudC11aS9saWIvbWl4aW5zL2ZvY3VzXCJcbnZhciBmb2N1c18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyKTtcbnZhciBmb2N1c19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihmb2N1c18pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IC4vc3JjL2RpcmVjdGl2ZXMvcmVwZWF0LWNsaWNrLmpzXG52YXIgcmVwZWF0X2NsaWNrID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMCk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2lucHV0LW51bWJlci9zcmMvaW5wdXQtbnVtYmVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5cblxuXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGlucHV0X251bWJlcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG5hbWU6ICdFbElucHV0TnVtYmVyJyxcbiAgbWl4aW5zOiBbZm9jdXNfZGVmYXVsdCgpKCdpbnB1dCcpXSxcbiAgaW5qZWN0OiB7XG4gICAgZWxGb3JtOiB7XG4gICAgICBkZWZhdWx0OiAnJ1xuICAgIH0sXG4gICAgZWxGb3JtSXRlbToge1xuICAgICAgZGVmYXVsdDogJydcbiAgICB9XG4gIH0sXG4gIGRpcmVjdGl2ZXM6IHtcbiAgICByZXBlYXRDbGljazogcmVwZWF0X2NsaWNrW1wiYVwiIC8qIGRlZmF1bHQgKi9dXG4gIH0sXG4gIGNvbXBvbmVudHM6IHtcbiAgICBFbElucHV0OiBpbnB1dF9kZWZhdWx0LmFcbiAgfSxcbiAgcHJvcHM6IHtcbiAgICBzdGVwOiB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBkZWZhdWx0OiAxXG4gICAgfSxcbiAgICBzdGVwU3RyaWN0bHk6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0sXG4gICAgbWF4OiB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBkZWZhdWx0OiBJbmZpbml0eVxuICAgIH0sXG4gICAgbWluOiB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBkZWZhdWx0OiAtSW5maW5pdHlcbiAgICB9LFxuICAgIHZhbHVlOiB7fSxcbiAgICBkaXNhYmxlZDogQm9vbGVhbixcbiAgICBzaXplOiBTdHJpbmcsXG4gICAgY29udHJvbHM6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSxcbiAgICBjb250cm9sc1Bvc2l0aW9uOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnJ1xuICAgIH0sXG4gICAgbmFtZTogU3RyaW5nLFxuICAgIGxhYmVsOiBTdHJpbmcsXG4gICAgcGxhY2Vob2xkZXI6IFN0cmluZyxcbiAgICBwcmVjaXNpb246IHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIHZhbGlkYXRvcjogZnVuY3Rpb24gdmFsaWRhdG9yKHZhbCkge1xuICAgICAgICByZXR1cm4gdmFsID49IDAgJiYgdmFsID09PSBwYXJzZUludCh2YWwsIDEwKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGN1cnJlbnRWYWx1ZTogMCxcbiAgICAgIHVzZXJJbnB1dDogbnVsbFxuICAgIH07XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICB2YWx1ZToge1xuICAgICAgaW1tZWRpYXRlOiB0cnVlLFxuICAgICAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcih2YWx1ZSkge1xuICAgICAgICB2YXIgbmV3VmFsID0gdmFsdWUgPT09IHVuZGVmaW5lZCA/IHZhbHVlIDogTnVtYmVyKHZhbHVlKTtcbiAgICAgICAgaWYgKG5ld1ZhbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKGlzTmFOKG5ld1ZhbCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodGhpcy5zdGVwU3RyaWN0bHkpIHtcbiAgICAgICAgICAgIHZhciBzdGVwUHJlY2lzaW9uID0gdGhpcy5nZXRQcmVjaXNpb24odGhpcy5zdGVwKTtcbiAgICAgICAgICAgIHZhciBwcmVjaXNpb25GYWN0b3IgPSBNYXRoLnBvdygxMCwgc3RlcFByZWNpc2lvbik7XG4gICAgICAgICAgICBuZXdWYWwgPSBNYXRoLnJvdW5kKG5ld1ZhbCAvIHRoaXMuc3RlcCkgKiBwcmVjaXNpb25GYWN0b3IgKiB0aGlzLnN0ZXAgLyBwcmVjaXNpb25GYWN0b3I7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHRoaXMucHJlY2lzaW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIG5ld1ZhbCA9IHRoaXMudG9QcmVjaXNpb24obmV3VmFsLCB0aGlzLnByZWNpc2lvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChuZXdWYWwgPj0gdGhpcy5tYXgpIG5ld1ZhbCA9IHRoaXMubWF4O1xuICAgICAgICBpZiAobmV3VmFsIDw9IHRoaXMubWluKSBuZXdWYWwgPSB0aGlzLm1pbjtcbiAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSBuZXdWYWw7XG4gICAgICAgIHRoaXMudXNlcklucHV0ID0gbnVsbDtcbiAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCBuZXdWYWwpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgY29tcHV0ZWQ6IHtcbiAgICBtaW5EaXNhYmxlZDogZnVuY3Rpb24gbWluRGlzYWJsZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZGVjcmVhc2UodGhpcy52YWx1ZSwgdGhpcy5zdGVwKSA8IHRoaXMubWluO1xuICAgIH0sXG4gICAgbWF4RGlzYWJsZWQ6IGZ1bmN0aW9uIG1heERpc2FibGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2luY3JlYXNlKHRoaXMudmFsdWUsIHRoaXMuc3RlcCkgPiB0aGlzLm1heDtcbiAgICB9LFxuICAgIG51bVByZWNpc2lvbjogZnVuY3Rpb24gbnVtUHJlY2lzaW9uKCkge1xuICAgICAgdmFyIHZhbHVlID0gdGhpcy52YWx1ZSxcbiAgICAgICAgICBzdGVwID0gdGhpcy5zdGVwLFxuICAgICAgICAgIGdldFByZWNpc2lvbiA9IHRoaXMuZ2V0UHJlY2lzaW9uLFxuICAgICAgICAgIHByZWNpc2lvbiA9IHRoaXMucHJlY2lzaW9uO1xuXG4gICAgICB2YXIgc3RlcFByZWNpc2lvbiA9IGdldFByZWNpc2lvbihzdGVwKTtcbiAgICAgIGlmIChwcmVjaXNpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoc3RlcFByZWNpc2lvbiA+IHByZWNpc2lvbikge1xuICAgICAgICAgIGNvbnNvbGUud2FybignW0VsZW1lbnQgV2Fybl1bSW5wdXROdW1iZXJdcHJlY2lzaW9uIHNob3VsZCBub3QgYmUgbGVzcyB0aGFuIHRoZSBkZWNpbWFsIHBsYWNlcyBvZiBzdGVwJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByZWNpc2lvbjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBNYXRoLm1heChnZXRQcmVjaXNpb24odmFsdWUpLCBzdGVwUHJlY2lzaW9uKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGNvbnRyb2xzQXRSaWdodDogZnVuY3Rpb24gY29udHJvbHNBdFJpZ2h0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29udHJvbHMgJiYgdGhpcy5jb250cm9sc1Bvc2l0aW9uID09PSAncmlnaHQnO1xuICAgIH0sXG4gICAgX2VsRm9ybUl0ZW1TaXplOiBmdW5jdGlvbiBfZWxGb3JtSXRlbVNpemUoKSB7XG4gICAgICByZXR1cm4gKHRoaXMuZWxGb3JtSXRlbSB8fCB7fSkuZWxGb3JtSXRlbVNpemU7XG4gICAgfSxcbiAgICBpbnB1dE51bWJlclNpemU6IGZ1bmN0aW9uIGlucHV0TnVtYmVyU2l6ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNpemUgfHwgdGhpcy5fZWxGb3JtSXRlbVNpemUgfHwgKHRoaXMuJEVMRU1FTlQgfHwge30pLnNpemU7XG4gICAgfSxcbiAgICBpbnB1dE51bWJlckRpc2FibGVkOiBmdW5jdGlvbiBpbnB1dE51bWJlckRpc2FibGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQgfHwgISEodGhpcy5lbEZvcm0gfHwge30pLmRpc2FibGVkO1xuICAgIH0sXG4gICAgZGlzcGxheVZhbHVlOiBmdW5jdGlvbiBkaXNwbGF5VmFsdWUoKSB7XG4gICAgICBpZiAodGhpcy51c2VySW5wdXQgIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudXNlcklucHV0O1xuICAgICAgfVxuXG4gICAgICB2YXIgY3VycmVudFZhbHVlID0gdGhpcy5jdXJyZW50VmFsdWU7XG5cbiAgICAgIGlmICh0eXBlb2YgY3VycmVudFZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgICBpZiAodGhpcy5zdGVwU3RyaWN0bHkpIHtcbiAgICAgICAgICB2YXIgc3RlcFByZWNpc2lvbiA9IHRoaXMuZ2V0UHJlY2lzaW9uKHRoaXMuc3RlcCk7XG4gICAgICAgICAgdmFyIHByZWNpc2lvbkZhY3RvciA9IE1hdGgucG93KDEwLCBzdGVwUHJlY2lzaW9uKTtcbiAgICAgICAgICBjdXJyZW50VmFsdWUgPSBNYXRoLnJvdW5kKGN1cnJlbnRWYWx1ZSAvIHRoaXMuc3RlcCkgKiBwcmVjaXNpb25GYWN0b3IgKiB0aGlzLnN0ZXAgLyBwcmVjaXNpb25GYWN0b3I7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5wcmVjaXNpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGN1cnJlbnRWYWx1ZSA9IGN1cnJlbnRWYWx1ZS50b0ZpeGVkKHRoaXMucHJlY2lzaW9uKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gY3VycmVudFZhbHVlO1xuICAgIH1cbiAgfSxcbiAgbWV0aG9kczoge1xuICAgIHRvUHJlY2lzaW9uOiBmdW5jdGlvbiB0b1ByZWNpc2lvbihudW0sIHByZWNpc2lvbikge1xuICAgICAgaWYgKHByZWNpc2lvbiA9PT0gdW5kZWZpbmVkKSBwcmVjaXNpb24gPSB0aGlzLm51bVByZWNpc2lvbjtcbiAgICAgIHJldHVybiBwYXJzZUZsb2F0KE1hdGgucm91bmQobnVtICogTWF0aC5wb3coMTAsIHByZWNpc2lvbikpIC8gTWF0aC5wb3coMTAsIHByZWNpc2lvbikpO1xuICAgIH0sXG4gICAgZ2V0UHJlY2lzaW9uOiBmdW5jdGlvbiBnZXRQcmVjaXNpb24odmFsdWUpIHtcbiAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gMDtcbiAgICAgIHZhciB2YWx1ZVN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICB2YXIgZG90UG9zaXRpb24gPSB2YWx1ZVN0cmluZy5pbmRleE9mKCcuJyk7XG4gICAgICB2YXIgcHJlY2lzaW9uID0gMDtcbiAgICAgIGlmIChkb3RQb3NpdGlvbiAhPT0gLTEpIHtcbiAgICAgICAgcHJlY2lzaW9uID0gdmFsdWVTdHJpbmcubGVuZ3RoIC0gZG90UG9zaXRpb24gLSAxO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHByZWNpc2lvbjtcbiAgICB9LFxuICAgIF9pbmNyZWFzZTogZnVuY3Rpb24gX2luY3JlYXNlKHZhbCwgc3RlcCkge1xuICAgICAgaWYgKHR5cGVvZiB2YWwgIT09ICdudW1iZXInICYmIHZhbCAhPT0gdW5kZWZpbmVkKSByZXR1cm4gdGhpcy5jdXJyZW50VmFsdWU7XG5cbiAgICAgIHZhciBwcmVjaXNpb25GYWN0b3IgPSBNYXRoLnBvdygxMCwgdGhpcy5udW1QcmVjaXNpb24pO1xuICAgICAgLy8gU29sdmUgdGhlIGFjY3VyYWN5IHByb2JsZW0gb2YgSlMgZGVjaW1hbCBjYWxjdWxhdGlvbiBieSBjb252ZXJ0aW5nIHRoZSB2YWx1ZSB0byBpbnRlZ2VyLlxuICAgICAgcmV0dXJuIHRoaXMudG9QcmVjaXNpb24oKHByZWNpc2lvbkZhY3RvciAqIHZhbCArIHByZWNpc2lvbkZhY3RvciAqIHN0ZXApIC8gcHJlY2lzaW9uRmFjdG9yKTtcbiAgICB9LFxuICAgIF9kZWNyZWFzZTogZnVuY3Rpb24gX2RlY3JlYXNlKHZhbCwgc3RlcCkge1xuICAgICAgaWYgKHR5cGVvZiB2YWwgIT09ICdudW1iZXInICYmIHZhbCAhPT0gdW5kZWZpbmVkKSByZXR1cm4gdGhpcy5jdXJyZW50VmFsdWU7XG5cbiAgICAgIHZhciBwcmVjaXNpb25GYWN0b3IgPSBNYXRoLnBvdygxMCwgdGhpcy5udW1QcmVjaXNpb24pO1xuXG4gICAgICByZXR1cm4gdGhpcy50b1ByZWNpc2lvbigocHJlY2lzaW9uRmFjdG9yICogdmFsIC0gcHJlY2lzaW9uRmFjdG9yICogc3RlcCkgLyBwcmVjaXNpb25GYWN0b3IpO1xuICAgIH0sXG4gICAgaW5jcmVhc2U6IGZ1bmN0aW9uIGluY3JlYXNlKCkge1xuICAgICAgaWYgKHRoaXMuaW5wdXROdW1iZXJEaXNhYmxlZCB8fCB0aGlzLm1heERpc2FibGVkKSByZXR1cm47XG4gICAgICB2YXIgdmFsdWUgPSB0aGlzLnZhbHVlIHx8IDA7XG4gICAgICB2YXIgbmV3VmFsID0gdGhpcy5faW5jcmVhc2UodmFsdWUsIHRoaXMuc3RlcCk7XG4gICAgICB0aGlzLnNldEN1cnJlbnRWYWx1ZShuZXdWYWwpO1xuICAgIH0sXG4gICAgZGVjcmVhc2U6IGZ1bmN0aW9uIGRlY3JlYXNlKCkge1xuICAgICAgaWYgKHRoaXMuaW5wdXROdW1iZXJEaXNhYmxlZCB8fCB0aGlzLm1pbkRpc2FibGVkKSByZXR1cm47XG4gICAgICB2YXIgdmFsdWUgPSB0aGlzLnZhbHVlIHx8IDA7XG4gICAgICB2YXIgbmV3VmFsID0gdGhpcy5fZGVjcmVhc2UodmFsdWUsIHRoaXMuc3RlcCk7XG4gICAgICB0aGlzLnNldEN1cnJlbnRWYWx1ZShuZXdWYWwpO1xuICAgIH0sXG4gICAgaGFuZGxlQmx1cjogZnVuY3Rpb24gaGFuZGxlQmx1cihldmVudCkge1xuICAgICAgdGhpcy4kZW1pdCgnYmx1cicsIGV2ZW50KTtcbiAgICB9LFxuICAgIGhhbmRsZUZvY3VzOiBmdW5jdGlvbiBoYW5kbGVGb2N1cyhldmVudCkge1xuICAgICAgdGhpcy4kZW1pdCgnZm9jdXMnLCBldmVudCk7XG4gICAgfSxcbiAgICBzZXRDdXJyZW50VmFsdWU6IGZ1bmN0aW9uIHNldEN1cnJlbnRWYWx1ZShuZXdWYWwpIHtcbiAgICAgIHZhciBvbGRWYWwgPSB0aGlzLmN1cnJlbnRWYWx1ZTtcbiAgICAgIGlmICh0eXBlb2YgbmV3VmFsID09PSAnbnVtYmVyJyAmJiB0aGlzLnByZWNpc2lvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG5ld1ZhbCA9IHRoaXMudG9QcmVjaXNpb24obmV3VmFsLCB0aGlzLnByZWNpc2lvbik7XG4gICAgICB9XG4gICAgICBpZiAobmV3VmFsID49IHRoaXMubWF4KSBuZXdWYWwgPSB0aGlzLm1heDtcbiAgICAgIGlmIChuZXdWYWwgPD0gdGhpcy5taW4pIG5ld1ZhbCA9IHRoaXMubWluO1xuICAgICAgaWYgKG9sZFZhbCA9PT0gbmV3VmFsKSByZXR1cm47XG4gICAgICB0aGlzLnVzZXJJbnB1dCA9IG51bGw7XG4gICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIG5ld1ZhbCk7XG4gICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCBuZXdWYWwsIG9sZFZhbCk7XG4gICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IG5ld1ZhbDtcbiAgICB9LFxuICAgIGhhbmRsZUlucHV0OiBmdW5jdGlvbiBoYW5kbGVJbnB1dCh2YWx1ZSkge1xuICAgICAgdGhpcy51c2VySW5wdXQgPSB2YWx1ZTtcbiAgICB9LFxuICAgIGhhbmRsZUlucHV0Q2hhbmdlOiBmdW5jdGlvbiBoYW5kbGVJbnB1dENoYW5nZSh2YWx1ZSkge1xuICAgICAgdmFyIG5ld1ZhbCA9IHZhbHVlID09PSAnJyA/IHVuZGVmaW5lZCA6IE51bWJlcih2YWx1ZSk7XG4gICAgICBpZiAoIWlzTmFOKG5ld1ZhbCkgfHwgdmFsdWUgPT09ICcnKSB7XG4gICAgICAgIHRoaXMuc2V0Q3VycmVudFZhbHVlKG5ld1ZhbCk7XG4gICAgICB9XG4gICAgICB0aGlzLnVzZXJJbnB1dCA9IG51bGw7XG4gICAgfSxcbiAgICBzZWxlY3Q6IGZ1bmN0aW9uIHNlbGVjdCgpIHtcbiAgICAgIHRoaXMuJHJlZnMuaW5wdXQuc2VsZWN0KCk7XG4gICAgfVxuICB9LFxuICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge1xuICAgIHZhciBpbm5lcklucHV0ID0gdGhpcy4kcmVmcy5pbnB1dC4kcmVmcy5pbnB1dDtcbiAgICBpbm5lcklucHV0LnNldEF0dHJpYnV0ZSgncm9sZScsICdzcGluYnV0dG9uJyk7XG4gICAgaW5uZXJJbnB1dC5zZXRBdHRyaWJ1dGUoJ2FyaWEtdmFsdWVtYXgnLCB0aGlzLm1heCk7XG4gICAgaW5uZXJJbnB1dC5zZXRBdHRyaWJ1dGUoJ2FyaWEtdmFsdWVtaW4nLCB0aGlzLm1pbik7XG4gICAgaW5uZXJJbnB1dC5zZXRBdHRyaWJ1dGUoJ2FyaWEtdmFsdWVub3cnLCB0aGlzLmN1cnJlbnRWYWx1ZSk7XG4gICAgaW5uZXJJbnB1dC5zZXRBdHRyaWJ1dGUoJ2FyaWEtZGlzYWJsZWQnLCB0aGlzLmlucHV0TnVtYmVyRGlzYWJsZWQpO1xuICB9LFxuICB1cGRhdGVkOiBmdW5jdGlvbiB1cGRhdGVkKCkge1xuICAgIGlmICghdGhpcy4kcmVmcyB8fCAhdGhpcy4kcmVmcy5pbnB1dCkgcmV0dXJuO1xuICAgIHZhciBpbm5lcklucHV0ID0gdGhpcy4kcmVmcy5pbnB1dC4kcmVmcy5pbnB1dDtcbiAgICBpbm5lcklucHV0LnNldEF0dHJpYnV0ZSgnYXJpYS12YWx1ZW5vdycsIHRoaXMuY3VycmVudFZhbHVlKTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2lucHV0LW51bWJlci9zcmMvaW5wdXQtbnVtYmVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfaW5wdXRfbnVtYmVydnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKGlucHV0X251bWJlcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gRVhURVJOQUwgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcbnZhciBjb21wb25lbnROb3JtYWxpemVyID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9pbnB1dC1udW1iZXIvc3JjL2lucHV0LW51bWJlci52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBjb21wb25lbnQgPSBPYmplY3QoY29tcG9uZW50Tm9ybWFsaXplcltcImFcIiAvKiBkZWZhdWx0ICovXSkoXG4gIHNyY19pbnB1dF9udW1iZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBhcGk7IH1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvaW5wdXQtbnVtYmVyL3NyYy9pbnB1dC1udW1iZXIudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGlucHV0X251bWJlciA9IChjb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2lucHV0LW51bWJlci9pbmRleC5qc1xuXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5pbnB1dF9udW1iZXIuaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcbiAgVnVlLmNvbXBvbmVudChpbnB1dF9udW1iZXIubmFtZSwgaW5wdXRfbnVtYmVyKTtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhY2thZ2VzX2lucHV0X251bWJlciA9IF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKGlucHV0X251bWJlcik7XG5cbi8qKiovIH0pXG5cbi8qKioqKiovIH0pOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/input-number.js\n");

/***/ }),

/***/ "./node_modules/element-ui/lib/input.js":
/*!**********************************************!*\
  !*** ./node_modules/element-ui/lib/input.js ***!
  \**********************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

eval("module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __nested_webpack_require_187__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __nested_webpack_require_187__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__nested_webpack_require_187__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__nested_webpack_require_187__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__nested_webpack_require_187__.d = function(exports, name, getter) {\n/******/ \t\tif(!__nested_webpack_require_187__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__nested_webpack_require_187__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__nested_webpack_require_187__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __nested_webpack_require_187__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__nested_webpack_require_187__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __nested_webpack_require_187__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__nested_webpack_require_187__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__nested_webpack_require_187__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__nested_webpack_require_187__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__nested_webpack_require_187__.p = \"/dist/\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __nested_webpack_require_187__(__nested_webpack_require_187__.s = 75);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_3672__) {\n\n\"use strict\";\n/* harmony export (binding) */ __nested_webpack_require_3672__.d(__nested_webpack_exports__, \"a\", function() { return normalizeComponent; });\n/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nfunction normalizeComponent (\n  scriptExports,\n  render,\n  staticRenderFns,\n  functionalTemplate,\n  injectStyles,\n  scopeId,\n  moduleIdentifier, /* server only */\n  shadowMode /* vue-cli only */\n) {\n  // Vue.extend constructor export interop\n  var options = typeof scriptExports === 'function'\n    ? scriptExports.options\n    : scriptExports\n\n  // render functions\n  if (render) {\n    options.render = render\n    options.staticRenderFns = staticRenderFns\n    options._compiled = true\n  }\n\n  // functional template\n  if (functionalTemplate) {\n    options.functional = true\n  }\n\n  // scopedId\n  if (scopeId) {\n    options._scopeId = 'data-v-' + scopeId\n  }\n\n  var hook\n  if (moduleIdentifier) { // server build\n    hook = function (context) {\n      // 2.3 injection\n      context =\n        context || // cached call\n        (this.$vnode && this.$vnode.ssrContext) || // stateful\n        (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n      // 2.2 with runInNewContext: true\n      if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n        context = __VUE_SSR_CONTEXT__\n      }\n      // inject component styles\n      if (injectStyles) {\n        injectStyles.call(this, context)\n      }\n      // register component module identifier for async chunk inferrence\n      if (context && context._registeredComponents) {\n        context._registeredComponents.add(moduleIdentifier)\n      }\n    }\n    // used by ssr in case component is cached and beforeCreate\n    // never gets called\n    options._ssrRegister = hook\n  } else if (injectStyles) {\n    hook = shadowMode\n      ? function () { injectStyles.call(this, this.$root.$options.shadowRoot) }\n      : injectStyles\n  }\n\n  if (hook) {\n    if (options.functional) {\n      // for template-only hot-reload because in that case the render fn doesn't\n      // go through the normalizer\n      options._injectStyles = hook\n      // register for functioal component in vue file\n      var originalRender = options.render\n      options.render = function renderWithStyleInjection (h, context) {\n        hook.call(context)\n        return originalRender(h, context)\n      }\n    } else {\n      // inject component registration as beforeCreate hook\n      var existing = options.beforeCreate\n      options.beforeCreate = existing\n        ? [].concat(existing, hook)\n        : [hook]\n    }\n  }\n\n  return {\n    exports: scriptExports,\n    options: options\n  }\n}\n\n\n/***/ }),\n\n/***/ 11:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/mixins/migrating */ \"./node_modules/element-ui/lib/mixins/migrating.js\");\n\n/***/ }),\n\n/***/ 21:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/shared */ \"./node_modules/element-ui/lib/utils/shared.js\");\n\n/***/ }),\n\n/***/ 4:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/mixins/emitter */ \"./node_modules/element-ui/lib/mixins/emitter.js\");\n\n/***/ }),\n\n/***/ 75:\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_6925__) {\n\n\"use strict\";\n__nested_webpack_require_6925__.r(__nested_webpack_exports__);\n\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/input/src/input.vue?vue&type=template&id=343dd774&\nvar render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    {\n      class: [\n        _vm.type === \"textarea\" ? \"el-textarea\" : \"el-input\",\n        _vm.inputSize ? \"el-input--\" + _vm.inputSize : \"\",\n        {\n          \"is-disabled\": _vm.inputDisabled,\n          \"is-exceed\": _vm.inputExceed,\n          \"el-input-group\": _vm.$slots.prepend || _vm.$slots.append,\n          \"el-input-group--append\": _vm.$slots.append,\n          \"el-input-group--prepend\": _vm.$slots.prepend,\n          \"el-input--prefix\": _vm.$slots.prefix || _vm.prefixIcon,\n          \"el-input--suffix\":\n            _vm.$slots.suffix ||\n            _vm.suffixIcon ||\n            _vm.clearable ||\n            _vm.showPassword\n        }\n      ],\n      on: {\n        mouseenter: function($event) {\n          _vm.hovering = true\n        },\n        mouseleave: function($event) {\n          _vm.hovering = false\n        }\n      }\n    },\n    [\n      _vm.type !== \"textarea\"\n        ? [\n            _vm.$slots.prepend\n              ? _c(\n                  \"div\",\n                  { staticClass: \"el-input-group__prepend\" },\n                  [_vm._t(\"prepend\")],\n                  2\n                )\n              : _vm._e(),\n            _vm.type !== \"textarea\"\n              ? _c(\n                  \"input\",\n                  _vm._b(\n                    {\n                      ref: \"input\",\n                      staticClass: \"el-input__inner\",\n                      attrs: {\n                        tabindex: _vm.tabindex,\n                        type: _vm.showPassword\n                          ? _vm.passwordVisible\n                            ? \"text\"\n                            : \"password\"\n                          : _vm.type,\n                        disabled: _vm.inputDisabled,\n                        readonly: _vm.readonly,\n                        autocomplete: _vm.autoComplete || _vm.autocomplete,\n                        \"aria-label\": _vm.label\n                      },\n                      on: {\n                        compositionstart: _vm.handleCompositionStart,\n                        compositionupdate: _vm.handleCompositionUpdate,\n                        compositionend: _vm.handleCompositionEnd,\n                        input: _vm.handleInput,\n                        focus: _vm.handleFocus,\n                        blur: _vm.handleBlur,\n                        change: _vm.handleChange\n                      }\n                    },\n                    \"input\",\n                    _vm.$attrs,\n                    false\n                  )\n                )\n              : _vm._e(),\n            _vm.$slots.prefix || _vm.prefixIcon\n              ? _c(\n                  \"span\",\n                  { staticClass: \"el-input__prefix\" },\n                  [\n                    _vm._t(\"prefix\"),\n                    _vm.prefixIcon\n                      ? _c(\"i\", {\n                          staticClass: \"el-input__icon\",\n                          class: _vm.prefixIcon\n                        })\n                      : _vm._e()\n                  ],\n                  2\n                )\n              : _vm._e(),\n            _vm.getSuffixVisible()\n              ? _c(\"span\", { staticClass: \"el-input__suffix\" }, [\n                  _c(\n                    \"span\",\n                    { staticClass: \"el-input__suffix-inner\" },\n                    [\n                      !_vm.showClear ||\n                      !_vm.showPwdVisible ||\n                      !_vm.isWordLimitVisible\n                        ? [\n                            _vm._t(\"suffix\"),\n                            _vm.suffixIcon\n                              ? _c(\"i\", {\n                                  staticClass: \"el-input__icon\",\n                                  class: _vm.suffixIcon\n                                })\n                              : _vm._e()\n                          ]\n                        : _vm._e(),\n                      _vm.showClear\n                        ? _c(\"i\", {\n                            staticClass:\n                              \"el-input__icon el-icon-circle-close el-input__clear\",\n                            on: {\n                              mousedown: function($event) {\n                                $event.preventDefault()\n                              },\n                              click: _vm.clear\n                            }\n                          })\n                        : _vm._e(),\n                      _vm.showPwdVisible\n                        ? _c(\"i\", {\n                            staticClass:\n                              \"el-input__icon el-icon-view el-input__clear\",\n                            on: { click: _vm.handlePasswordVisible }\n                          })\n                        : _vm._e(),\n                      _vm.isWordLimitVisible\n                        ? _c(\"span\", { staticClass: \"el-input__count\" }, [\n                            _c(\n                              \"span\",\n                              { staticClass: \"el-input__count-inner\" },\n                              [\n                                _vm._v(\n                                  \"\\n            \" +\n                                    _vm._s(_vm.textLength) +\n                                    \"/\" +\n                                    _vm._s(_vm.upperLimit) +\n                                    \"\\n          \"\n                                )\n                              ]\n                            )\n                          ])\n                        : _vm._e()\n                    ],\n                    2\n                  ),\n                  _vm.validateState\n                    ? _c(\"i\", {\n                        staticClass: \"el-input__icon\",\n                        class: [\"el-input__validateIcon\", _vm.validateIcon]\n                      })\n                    : _vm._e()\n                ])\n              : _vm._e(),\n            _vm.$slots.append\n              ? _c(\n                  \"div\",\n                  { staticClass: \"el-input-group__append\" },\n                  [_vm._t(\"append\")],\n                  2\n                )\n              : _vm._e()\n          ]\n        : _c(\n            \"textarea\",\n            _vm._b(\n              {\n                ref: \"textarea\",\n                staticClass: \"el-textarea__inner\",\n                style: _vm.textareaStyle,\n                attrs: {\n                  tabindex: _vm.tabindex,\n                  disabled: _vm.inputDisabled,\n                  readonly: _vm.readonly,\n                  autocomplete: _vm.autoComplete || _vm.autocomplete,\n                  \"aria-label\": _vm.label\n                },\n                on: {\n                  compositionstart: _vm.handleCompositionStart,\n                  compositionupdate: _vm.handleCompositionUpdate,\n                  compositionend: _vm.handleCompositionEnd,\n                  input: _vm.handleInput,\n                  focus: _vm.handleFocus,\n                  blur: _vm.handleBlur,\n                  change: _vm.handleChange\n                }\n              },\n              \"textarea\",\n              _vm.$attrs,\n              false\n            )\n          ),\n      _vm.isWordLimitVisible && _vm.type === \"textarea\"\n        ? _c(\"span\", { staticClass: \"el-input__count\" }, [\n            _vm._v(_vm._s(_vm.textLength) + \"/\" + _vm._s(_vm.upperLimit))\n          ])\n        : _vm._e()\n    ],\n    2\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/input/src/input.vue?vue&type=template&id=343dd774&\n\n// EXTERNAL MODULE: external \"element-ui/lib/mixins/emitter\"\nvar emitter_ = __nested_webpack_require_6925__(4);\nvar emitter_default = /*#__PURE__*/__nested_webpack_require_6925__.n(emitter_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/mixins/migrating\"\nvar migrating_ = __nested_webpack_require_6925__(11);\nvar migrating_default = /*#__PURE__*/__nested_webpack_require_6925__.n(migrating_);\n\n// CONCATENATED MODULE: ./packages/input/src/calcTextareaHeight.js\nvar hiddenTextarea = void 0;\n\nvar HIDDEN_STYLE = '\\n  height:0 !important;\\n  visibility:hidden !important;\\n  overflow:hidden !important;\\n  position:absolute !important;\\n  z-index:-1000 !important;\\n  top:0 !important;\\n  right:0 !important\\n';\n\nvar CONTEXT_STYLE = ['letter-spacing', 'line-height', 'padding-top', 'padding-bottom', 'font-family', 'font-weight', 'font-size', 'text-rendering', 'text-transform', 'width', 'text-indent', 'padding-left', 'padding-right', 'border-width', 'box-sizing'];\n\nfunction calculateNodeStyling(targetElement) {\n  var style = window.getComputedStyle(targetElement);\n\n  var boxSizing = style.getPropertyValue('box-sizing');\n\n  var paddingSize = parseFloat(style.getPropertyValue('padding-bottom')) + parseFloat(style.getPropertyValue('padding-top'));\n\n  var borderSize = parseFloat(style.getPropertyValue('border-bottom-width')) + parseFloat(style.getPropertyValue('border-top-width'));\n\n  var contextStyle = CONTEXT_STYLE.map(function (name) {\n    return name + ':' + style.getPropertyValue(name);\n  }).join(';');\n\n  return { contextStyle: contextStyle, paddingSize: paddingSize, borderSize: borderSize, boxSizing: boxSizing };\n}\n\nfunction calcTextareaHeight(targetElement) {\n  var minRows = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n  var maxRows = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n  if (!hiddenTextarea) {\n    hiddenTextarea = document.createElement('textarea');\n    document.body.appendChild(hiddenTextarea);\n  }\n\n  var _calculateNodeStyling = calculateNodeStyling(targetElement),\n      paddingSize = _calculateNodeStyling.paddingSize,\n      borderSize = _calculateNodeStyling.borderSize,\n      boxSizing = _calculateNodeStyling.boxSizing,\n      contextStyle = _calculateNodeStyling.contextStyle;\n\n  hiddenTextarea.setAttribute('style', contextStyle + ';' + HIDDEN_STYLE);\n  hiddenTextarea.value = targetElement.value || targetElement.placeholder || '';\n\n  var height = hiddenTextarea.scrollHeight;\n  var result = {};\n\n  if (boxSizing === 'border-box') {\n    height = height + borderSize;\n  } else if (boxSizing === 'content-box') {\n    height = height - paddingSize;\n  }\n\n  hiddenTextarea.value = '';\n  var singleRowHeight = hiddenTextarea.scrollHeight - paddingSize;\n\n  if (minRows !== null) {\n    var minHeight = singleRowHeight * minRows;\n    if (boxSizing === 'border-box') {\n      minHeight = minHeight + paddingSize + borderSize;\n    }\n    height = Math.max(minHeight, height);\n    result.minHeight = minHeight + 'px';\n  }\n  if (maxRows !== null) {\n    var maxHeight = singleRowHeight * maxRows;\n    if (boxSizing === 'border-box') {\n      maxHeight = maxHeight + paddingSize + borderSize;\n    }\n    height = Math.min(maxHeight, height);\n  }\n  result.height = height + 'px';\n  hiddenTextarea.parentNode && hiddenTextarea.parentNode.removeChild(hiddenTextarea);\n  hiddenTextarea = null;\n  return result;\n};\n// EXTERNAL MODULE: external \"element-ui/lib/utils/merge\"\nvar merge_ = __nested_webpack_require_6925__(9);\nvar merge_default = /*#__PURE__*/__nested_webpack_require_6925__.n(merge_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/shared\"\nvar shared_ = __nested_webpack_require_6925__(21);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/input/src/input.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n\n/* harmony default export */ var inputvue_type_script_lang_js_ = ({\n  name: 'ElInput',\n\n  componentName: 'ElInput',\n\n  mixins: [emitter_default.a, migrating_default.a],\n\n  inheritAttrs: false,\n\n  inject: {\n    elForm: {\n      default: ''\n    },\n    elFormItem: {\n      default: ''\n    }\n  },\n\n  data: function data() {\n    return {\n      textareaCalcStyle: {},\n      hovering: false,\n      focused: false,\n      isComposing: false,\n      passwordVisible: false\n    };\n  },\n\n\n  props: {\n    value: [String, Number],\n    size: String,\n    resize: String,\n    form: String,\n    disabled: Boolean,\n    readonly: Boolean,\n    type: {\n      type: String,\n      default: 'text'\n    },\n    autosize: {\n      type: [Boolean, Object],\n      default: false\n    },\n    autocomplete: {\n      type: String,\n      default: 'off'\n    },\n    /** @Deprecated in next major version */\n    autoComplete: {\n      type: String,\n      validator: function validator(val) {\n          false && 0;\n        return true;\n      }\n    },\n    validateEvent: {\n      type: Boolean,\n      default: true\n    },\n    suffixIcon: String,\n    prefixIcon: String,\n    label: String,\n    clearable: {\n      type: Boolean,\n      default: false\n    },\n    showPassword: {\n      type: Boolean,\n      default: false\n    },\n    showWordLimit: {\n      type: Boolean,\n      default: false\n    },\n    tabindex: String\n  },\n\n  computed: {\n    _elFormItemSize: function _elFormItemSize() {\n      return (this.elFormItem || {}).elFormItemSize;\n    },\n    validateState: function validateState() {\n      return this.elFormItem ? this.elFormItem.validateState : '';\n    },\n    needStatusIcon: function needStatusIcon() {\n      return this.elForm ? this.elForm.statusIcon : false;\n    },\n    validateIcon: function validateIcon() {\n      return {\n        validating: 'el-icon-loading',\n        success: 'el-icon-circle-check',\n        error: 'el-icon-circle-close'\n      }[this.validateState];\n    },\n    textareaStyle: function textareaStyle() {\n      return merge_default()({}, this.textareaCalcStyle, { resize: this.resize });\n    },\n    inputSize: function inputSize() {\n      return this.size || this._elFormItemSize || (this.$ELEMENT || {}).size;\n    },\n    inputDisabled: function inputDisabled() {\n      return this.disabled || (this.elForm || {}).disabled;\n    },\n    nativeInputValue: function nativeInputValue() {\n      return this.value === null || this.value === undefined ? '' : String(this.value);\n    },\n    showClear: function showClear() {\n      return this.clearable && !this.inputDisabled && !this.readonly && this.nativeInputValue && (this.focused || this.hovering);\n    },\n    showPwdVisible: function showPwdVisible() {\n      return this.showPassword && !this.inputDisabled && !this.readonly && (!!this.nativeInputValue || this.focused);\n    },\n    isWordLimitVisible: function isWordLimitVisible() {\n      return this.showWordLimit && this.$attrs.maxlength && (this.type === 'text' || this.type === 'textarea') && !this.inputDisabled && !this.readonly && !this.showPassword;\n    },\n    upperLimit: function upperLimit() {\n      return this.$attrs.maxlength;\n    },\n    textLength: function textLength() {\n      if (typeof this.value === 'number') {\n        return String(this.value).length;\n      }\n\n      return (this.value || '').length;\n    },\n    inputExceed: function inputExceed() {\n      // show exceed style if length of initial value greater then maxlength\n      return this.isWordLimitVisible && this.textLength > this.upperLimit;\n    }\n  },\n\n  watch: {\n    value: function value(val) {\n      this.$nextTick(this.resizeTextarea);\n      if (this.validateEvent) {\n        this.dispatch('ElFormItem', 'el.form.change', [val]);\n      }\n    },\n\n    // native input value is set explicitly\n    // do not use v-model / :value in template\n    // see: https://github.com/ElemeFE/element/issues/14521\n    nativeInputValue: function nativeInputValue() {\n      this.setNativeInputValue();\n    },\n\n    // when change between <input> and <textarea>,\n    // update DOM dependent value and styles\n    // https://github.com/ElemeFE/element/issues/14857\n    type: function type() {\n      var _this = this;\n\n      this.$nextTick(function () {\n        _this.setNativeInputValue();\n        _this.resizeTextarea();\n        _this.updateIconOffset();\n      });\n    }\n  },\n\n  methods: {\n    focus: function focus() {\n      this.getInput().focus();\n    },\n    blur: function blur() {\n      this.getInput().blur();\n    },\n    getMigratingConfig: function getMigratingConfig() {\n      return {\n        props: {\n          'icon': 'icon is removed, use suffix-icon / prefix-icon instead.',\n          'on-icon-click': 'on-icon-click is removed.'\n        },\n        events: {\n          'click': 'click is removed.'\n        }\n      };\n    },\n    handleBlur: function handleBlur(event) {\n      this.focused = false;\n      this.$emit('blur', event);\n      if (this.validateEvent) {\n        this.dispatch('ElFormItem', 'el.form.blur', [this.value]);\n      }\n    },\n    select: function select() {\n      this.getInput().select();\n    },\n    resizeTextarea: function resizeTextarea() {\n      if (this.$isServer) return;\n      var autosize = this.autosize,\n          type = this.type;\n\n      if (type !== 'textarea') return;\n      if (!autosize) {\n        this.textareaCalcStyle = {\n          minHeight: calcTextareaHeight(this.$refs.textarea).minHeight\n        };\n        return;\n      }\n      var minRows = autosize.minRows;\n      var maxRows = autosize.maxRows;\n\n      this.textareaCalcStyle = calcTextareaHeight(this.$refs.textarea, minRows, maxRows);\n    },\n    setNativeInputValue: function setNativeInputValue() {\n      var input = this.getInput();\n      if (!input) return;\n      if (input.value === this.nativeInputValue) return;\n      input.value = this.nativeInputValue;\n    },\n    handleFocus: function handleFocus(event) {\n      this.focused = true;\n      this.$emit('focus', event);\n    },\n    handleCompositionStart: function handleCompositionStart(event) {\n      this.$emit('compositionstart', event);\n      this.isComposing = true;\n    },\n    handleCompositionUpdate: function handleCompositionUpdate(event) {\n      this.$emit('compositionupdate', event);\n      var text = event.target.value;\n      var lastCharacter = text[text.length - 1] || '';\n      this.isComposing = !Object(shared_[\"isKorean\"])(lastCharacter);\n    },\n    handleCompositionEnd: function handleCompositionEnd(event) {\n      this.$emit('compositionend', event);\n      if (this.isComposing) {\n        this.isComposing = false;\n        this.handleInput(event);\n      }\n    },\n    handleInput: function handleInput(event) {\n      // should not emit input during composition\n      // see: https://github.com/ElemeFE/element/issues/10516\n      if (this.isComposing) return;\n\n      // hack for https://github.com/ElemeFE/element/issues/8548\n      // should remove the following line when we don't support IE\n      if (event.target.value === this.nativeInputValue) return;\n\n      this.$emit('input', event.target.value);\n\n      // ensure native input value is controlled\n      // see: https://github.com/ElemeFE/element/issues/12850\n      this.$nextTick(this.setNativeInputValue);\n    },\n    handleChange: function handleChange(event) {\n      this.$emit('change', event.target.value);\n    },\n    calcIconOffset: function calcIconOffset(place) {\n      var elList = [].slice.call(this.$el.querySelectorAll('.el-input__' + place) || []);\n      if (!elList.length) return;\n      var el = null;\n      for (var i = 0; i < elList.length; i++) {\n        if (elList[i].parentNode === this.$el) {\n          el = elList[i];\n          break;\n        }\n      }\n      if (!el) return;\n      var pendantMap = {\n        suffix: 'append',\n        prefix: 'prepend'\n      };\n\n      var pendant = pendantMap[place];\n      if (this.$slots[pendant]) {\n        el.style.transform = 'translateX(' + (place === 'suffix' ? '-' : '') + this.$el.querySelector('.el-input-group__' + pendant).offsetWidth + 'px)';\n      } else {\n        el.removeAttribute('style');\n      }\n    },\n    updateIconOffset: function updateIconOffset() {\n      this.calcIconOffset('prefix');\n      this.calcIconOffset('suffix');\n    },\n    clear: function clear() {\n      this.$emit('input', '');\n      this.$emit('change', '');\n      this.$emit('clear');\n    },\n    handlePasswordVisible: function handlePasswordVisible() {\n      var _this2 = this;\n\n      this.passwordVisible = !this.passwordVisible;\n      this.$nextTick(function () {\n        _this2.focus();\n      });\n    },\n    getInput: function getInput() {\n      return this.$refs.input || this.$refs.textarea;\n    },\n    getSuffixVisible: function getSuffixVisible() {\n      return this.$slots.suffix || this.suffixIcon || this.showClear || this.showPassword || this.isWordLimitVisible || this.validateState && this.needStatusIcon;\n    }\n  },\n\n  created: function created() {\n    this.$on('inputSelect', this.select);\n  },\n  mounted: function mounted() {\n    this.setNativeInputValue();\n    this.resizeTextarea();\n    this.updateIconOffset();\n  },\n  updated: function updated() {\n    this.$nextTick(this.updateIconOffset);\n  }\n});\n// CONCATENATED MODULE: ./packages/input/src/input.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_inputvue_type_script_lang_js_ = (inputvue_type_script_lang_js_); \n// EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js\nvar componentNormalizer = __nested_webpack_require_6925__(0);\n\n// CONCATENATED MODULE: ./packages/input/src/input.vue\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(componentNormalizer[\"a\" /* default */])(\n  src_inputvue_type_script_lang_js_,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"packages/input/src/input.vue\"\n/* harmony default export */ var input = (component.exports);\n// CONCATENATED MODULE: ./packages/input/index.js\n\n\n/* istanbul ignore next */\ninput.install = function (Vue) {\n  Vue.component(input.name, input);\n};\n\n/* harmony default export */ var packages_input = __nested_webpack_exports__[\"default\"] = (input);\n\n/***/ }),\n\n/***/ 9:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/merge */ \"./node_modules/element-ui/lib/utils/merge.js\");\n\n/***/ })\n\n/******/ });//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvaW5wdXQuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSw4QkFBOEI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsOEJBQW1CO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEVBQTBFLDhCQUFtQjtBQUM3RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsOEJBQW1CO0FBQzdCO0FBQ0E7QUFDQSxVQUFVLDhCQUFtQjtBQUM3QjtBQUNBO0FBQ0EsVUFBVSw4QkFBbUI7QUFDN0IsZUFBZSw4QkFBbUI7QUFDbEMsbURBQW1ELCtCQUErQjtBQUNsRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsOEJBQW1CO0FBQzdCO0FBQ0EsaUVBQWlFLGlCQUFpQjtBQUNsRjtBQUNBLDBEQUEwRCxhQUFhO0FBQ3ZFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSw4QkFBbUI7QUFDN0IsZ0NBQWdDLDhCQUFtQjtBQUNuRDtBQUNBO0FBQ0E7QUFDQSxXQUFXLDhCQUFtQjtBQUM5QixrREFBa0QsZ0NBQWdDO0FBQ2xGLDBFQUEwRSw4QkFBbUIsNEJBQTRCLG9CQUFvQjtBQUM3STtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsOEJBQW1CO0FBQzdCO0FBQ0Esb0NBQW9DLDRCQUE0QjtBQUNoRSwwQ0FBMEM7QUFDMUMsV0FBVyw4QkFBbUI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLDhCQUFtQixrQ0FBa0M7QUFDL0Q7QUFDQTtBQUNBLFVBQVUsOEJBQW1CO0FBQzdCO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQiw4QkFBbUIsQ0FBQyw4QkFBbUI7QUFDeEQsVUFBVTtBQUNWO0FBQ0E7O0FBRUE7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsK0JBQW1COztBQUVo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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7OztBQVFBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsTUFBSyxJQUFJLENBQUs7QUFDdkI7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxtQ0FBbUM7QUFDbkMsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLCtCQUErQiw0QkFBNEIscUJBQXFCO0FBQ2hGLEtBQUs7QUFDTDtBQUNBLHNFQUFzRTtBQUN0RSxLQUFLO0FBQ0w7QUFDQSxnREFBZ0Q7QUFDaEQsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLG1CQUFtQjtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsK0JBQW1COztBQUU3Qzs7Ozs7O0FBTUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLEtBQUssRUFBRSxZQUFZO0FBQ3ZCO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsa0RBQWtELDBCQUFtQjs7QUFFckUsT0FBTzs7QUFFUDtBQUNBOztBQUVBLGlCQUFpQixtQkFBTyxDQUFDLGdGQUE0Qjs7QUFFckQsT0FBTzs7QUFFUCxVQUFVIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2VsZW1lbnQtdWkvbGliL2lucHV0LmpzPzNkZGEiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPVxuLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcFxuLyoqKioqKi8gXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuLyoqKioqKi8gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuLyoqKioqKi8gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4vKioqKioqLyBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbi8qKioqKiovIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4vKioqKioqLyBcdFx0XHRpOiBtb2R1bGVJZCxcbi8qKioqKiovIFx0XHRcdGw6IGZhbHNlLFxuLyoqKioqKi8gXHRcdFx0ZXhwb3J0czoge31cbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbi8qKioqKiovIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuLyoqKioqKi8gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbi8qKioqKiovIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4vKioqKioqLyBcdH1cbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbi8qKioqKiovIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbi8qKioqKiovIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbi8qKioqKiovIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4vKioqKioqLyBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4vKioqKioqLyBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuLyoqKioqKi8gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4vKioqKioqLyBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuLyoqKioqKi8gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4vKioqKioqLyBcdFx0cmV0dXJuIG5zO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4vKioqKioqLyBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4vKioqKioqLyBcdFx0cmV0dXJuIGdldHRlcjtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIi9kaXN0L1wiO1xuLyoqKioqKi9cbi8qKioqKiovXG4vKioqKioqLyBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLyoqKioqKi8gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSA3NSk7XG4vKioqKioqLyB9KVxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKioqKiovICh7XG5cbi8qKiovIDA6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImFcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBub3JtYWxpemVDb21wb25lbnQ7IH0pO1xuLyogZ2xvYmFscyBfX1ZVRV9TU1JfQ09OVEVYVF9fICovXG5cbi8vIElNUE9SVEFOVDogRG8gTk9UIHVzZSBFUzIwMTUgZmVhdHVyZXMgaW4gdGhpcyBmaWxlIChleGNlcHQgZm9yIG1vZHVsZXMpLlxuLy8gVGhpcyBtb2R1bGUgaXMgYSBydW50aW1lIHV0aWxpdHkgZm9yIGNsZWFuZXIgY29tcG9uZW50IG1vZHVsZSBvdXRwdXQgYW5kIHdpbGxcbi8vIGJlIGluY2x1ZGVkIGluIHRoZSBmaW5hbCB3ZWJwYWNrIHVzZXIgYnVuZGxlLlxuXG5mdW5jdGlvbiBub3JtYWxpemVDb21wb25lbnQgKFxuICBzY3JpcHRFeHBvcnRzLFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZnVuY3Rpb25hbFRlbXBsYXRlLFxuICBpbmplY3RTdHlsZXMsXG4gIHNjb3BlSWQsXG4gIG1vZHVsZUlkZW50aWZpZXIsIC8qIHNlcnZlciBvbmx5ICovXG4gIHNoYWRvd01vZGUgLyogdnVlLWNsaSBvbmx5ICovXG4pIHtcbiAgLy8gVnVlLmV4dGVuZCBjb25zdHJ1Y3RvciBleHBvcnQgaW50ZXJvcFxuICB2YXIgb3B0aW9ucyA9IHR5cGVvZiBzY3JpcHRFeHBvcnRzID09PSAnZnVuY3Rpb24nXG4gICAgPyBzY3JpcHRFeHBvcnRzLm9wdGlvbnNcbiAgICA6IHNjcmlwdEV4cG9ydHNcblxuICAvLyByZW5kZXIgZnVuY3Rpb25zXG4gIGlmIChyZW5kZXIpIHtcbiAgICBvcHRpb25zLnJlbmRlciA9IHJlbmRlclxuICAgIG9wdGlvbnMuc3RhdGljUmVuZGVyRm5zID0gc3RhdGljUmVuZGVyRm5zXG4gICAgb3B0aW9ucy5fY29tcGlsZWQgPSB0cnVlXG4gIH1cblxuICAvLyBmdW5jdGlvbmFsIHRlbXBsYXRlXG4gIGlmIChmdW5jdGlvbmFsVGVtcGxhdGUpIHtcbiAgICBvcHRpb25zLmZ1bmN0aW9uYWwgPSB0cnVlXG4gIH1cblxuICAvLyBzY29wZWRJZFxuICBpZiAoc2NvcGVJZCkge1xuICAgIG9wdGlvbnMuX3Njb3BlSWQgPSAnZGF0YS12LScgKyBzY29wZUlkXG4gIH1cblxuICB2YXIgaG9va1xuICBpZiAobW9kdWxlSWRlbnRpZmllcikgeyAvLyBzZXJ2ZXIgYnVpbGRcbiAgICBob29rID0gZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICAgIC8vIDIuMyBpbmplY3Rpb25cbiAgICAgIGNvbnRleHQgPVxuICAgICAgICBjb250ZXh0IHx8IC8vIGNhY2hlZCBjYWxsXG4gICAgICAgICh0aGlzLiR2bm9kZSAmJiB0aGlzLiR2bm9kZS5zc3JDb250ZXh0KSB8fCAvLyBzdGF0ZWZ1bFxuICAgICAgICAodGhpcy5wYXJlbnQgJiYgdGhpcy5wYXJlbnQuJHZub2RlICYmIHRoaXMucGFyZW50LiR2bm9kZS5zc3JDb250ZXh0KSAvLyBmdW5jdGlvbmFsXG4gICAgICAvLyAyLjIgd2l0aCBydW5Jbk5ld0NvbnRleHQ6IHRydWVcbiAgICAgIGlmICghY29udGV4dCAmJiB0eXBlb2YgX19WVUVfU1NSX0NPTlRFWFRfXyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgY29udGV4dCA9IF9fVlVFX1NTUl9DT05URVhUX19cbiAgICAgIH1cbiAgICAgIC8vIGluamVjdCBjb21wb25lbnQgc3R5bGVzXG4gICAgICBpZiAoaW5qZWN0U3R5bGVzKSB7XG4gICAgICAgIGluamVjdFN0eWxlcy5jYWxsKHRoaXMsIGNvbnRleHQpXG4gICAgICB9XG4gICAgICAvLyByZWdpc3RlciBjb21wb25lbnQgbW9kdWxlIGlkZW50aWZpZXIgZm9yIGFzeW5jIGNodW5rIGluZmVycmVuY2VcbiAgICAgIGlmIChjb250ZXh0ICYmIGNvbnRleHQuX3JlZ2lzdGVyZWRDb21wb25lbnRzKSB7XG4gICAgICAgIGNvbnRleHQuX3JlZ2lzdGVyZWRDb21wb25lbnRzLmFkZChtb2R1bGVJZGVudGlmaWVyKVxuICAgICAgfVxuICAgIH1cbiAgICAvLyB1c2VkIGJ5IHNzciBpbiBjYXNlIGNvbXBvbmVudCBpcyBjYWNoZWQgYW5kIGJlZm9yZUNyZWF0ZVxuICAgIC8vIG5ldmVyIGdldHMgY2FsbGVkXG4gICAgb3B0aW9ucy5fc3NyUmVnaXN0ZXIgPSBob29rXG4gIH0gZWxzZSBpZiAoaW5qZWN0U3R5bGVzKSB7XG4gICAgaG9vayA9IHNoYWRvd01vZGVcbiAgICAgID8gZnVuY3Rpb24gKCkgeyBpbmplY3RTdHlsZXMuY2FsbCh0aGlzLCB0aGlzLiRyb290LiRvcHRpb25zLnNoYWRvd1Jvb3QpIH1cbiAgICAgIDogaW5qZWN0U3R5bGVzXG4gIH1cblxuICBpZiAoaG9vaykge1xuICAgIGlmIChvcHRpb25zLmZ1bmN0aW9uYWwpIHtcbiAgICAgIC8vIGZvciB0ZW1wbGF0ZS1vbmx5IGhvdC1yZWxvYWQgYmVjYXVzZSBpbiB0aGF0IGNhc2UgdGhlIHJlbmRlciBmbiBkb2Vzbid0XG4gICAgICAvLyBnbyB0aHJvdWdoIHRoZSBub3JtYWxpemVyXG4gICAgICBvcHRpb25zLl9pbmplY3RTdHlsZXMgPSBob29rXG4gICAgICAvLyByZWdpc3RlciBmb3IgZnVuY3Rpb2FsIGNvbXBvbmVudCBpbiB2dWUgZmlsZVxuICAgICAgdmFyIG9yaWdpbmFsUmVuZGVyID0gb3B0aW9ucy5yZW5kZXJcbiAgICAgIG9wdGlvbnMucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyV2l0aFN0eWxlSW5qZWN0aW9uIChoLCBjb250ZXh0KSB7XG4gICAgICAgIGhvb2suY2FsbChjb250ZXh0KVxuICAgICAgICByZXR1cm4gb3JpZ2luYWxSZW5kZXIoaCwgY29udGV4dClcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaW5qZWN0IGNvbXBvbmVudCByZWdpc3RyYXRpb24gYXMgYmVmb3JlQ3JlYXRlIGhvb2tcbiAgICAgIHZhciBleGlzdGluZyA9IG9wdGlvbnMuYmVmb3JlQ3JlYXRlXG4gICAgICBvcHRpb25zLmJlZm9yZUNyZWF0ZSA9IGV4aXN0aW5nXG4gICAgICAgID8gW10uY29uY2F0KGV4aXN0aW5nLCBob29rKVxuICAgICAgICA6IFtob29rXVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZXhwb3J0czogc2NyaXB0RXhwb3J0cyxcbiAgICBvcHRpb25zOiBvcHRpb25zXG4gIH1cbn1cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gMTE6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImVsZW1lbnQtdWkvbGliL21peGlucy9taWdyYXRpbmdcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAyMTpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlbWVudC11aS9saWIvdXRpbHMvc2hhcmVkXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gNDpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlbWVudC11aS9saWIvbWl4aW5zL2VtaXR0ZXJcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyA3NTpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvaW5wdXQvc3JjL2lucHV0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zNDNkZDc3NCZcbnZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICB7XG4gICAgICBjbGFzczogW1xuICAgICAgICBfdm0udHlwZSA9PT0gXCJ0ZXh0YXJlYVwiID8gXCJlbC10ZXh0YXJlYVwiIDogXCJlbC1pbnB1dFwiLFxuICAgICAgICBfdm0uaW5wdXRTaXplID8gXCJlbC1pbnB1dC0tXCIgKyBfdm0uaW5wdXRTaXplIDogXCJcIixcbiAgICAgICAge1xuICAgICAgICAgIFwiaXMtZGlzYWJsZWRcIjogX3ZtLmlucHV0RGlzYWJsZWQsXG4gICAgICAgICAgXCJpcy1leGNlZWRcIjogX3ZtLmlucHV0RXhjZWVkLFxuICAgICAgICAgIFwiZWwtaW5wdXQtZ3JvdXBcIjogX3ZtLiRzbG90cy5wcmVwZW5kIHx8IF92bS4kc2xvdHMuYXBwZW5kLFxuICAgICAgICAgIFwiZWwtaW5wdXQtZ3JvdXAtLWFwcGVuZFwiOiBfdm0uJHNsb3RzLmFwcGVuZCxcbiAgICAgICAgICBcImVsLWlucHV0LWdyb3VwLS1wcmVwZW5kXCI6IF92bS4kc2xvdHMucHJlcGVuZCxcbiAgICAgICAgICBcImVsLWlucHV0LS1wcmVmaXhcIjogX3ZtLiRzbG90cy5wcmVmaXggfHwgX3ZtLnByZWZpeEljb24sXG4gICAgICAgICAgXCJlbC1pbnB1dC0tc3VmZml4XCI6XG4gICAgICAgICAgICBfdm0uJHNsb3RzLnN1ZmZpeCB8fFxuICAgICAgICAgICAgX3ZtLnN1ZmZpeEljb24gfHxcbiAgICAgICAgICAgIF92bS5jbGVhcmFibGUgfHxcbiAgICAgICAgICAgIF92bS5zaG93UGFzc3dvcmRcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIG9uOiB7XG4gICAgICAgIG1vdXNlZW50ZXI6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgIF92bS5ob3ZlcmluZyA9IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgbW91c2VsZWF2ZTogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgX3ZtLmhvdmVyaW5nID0gZmFsc2VcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgW1xuICAgICAgX3ZtLnR5cGUgIT09IFwidGV4dGFyZWFcIlxuICAgICAgICA/IFtcbiAgICAgICAgICAgIF92bS4kc2xvdHMucHJlcGVuZFxuICAgICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwiZWwtaW5wdXQtZ3JvdXBfX3ByZXBlbmRcIiB9LFxuICAgICAgICAgICAgICAgICAgW192bS5fdChcInByZXBlbmRcIildLFxuICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgIF92bS50eXBlICE9PSBcInRleHRhcmVhXCJcbiAgICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICAgIFwiaW5wdXRcIixcbiAgICAgICAgICAgICAgICAgIF92bS5fYihcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIHJlZjogXCJpbnB1dFwiLFxuICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWlucHV0X19pbm5lclwiLFxuICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleDogX3ZtLnRhYmluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogX3ZtLnNob3dQYXNzd29yZFxuICAgICAgICAgICAgICAgICAgICAgICAgICA/IF92bS5wYXNzd29yZFZpc2libGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcInBhc3N3b3JkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfdm0udHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBfdm0uaW5wdXREaXNhYmxlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRvbmx5OiBfdm0ucmVhZG9ubHksXG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU6IF92bS5hdXRvQ29tcGxldGUgfHwgX3ZtLmF1dG9jb21wbGV0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBfdm0ubGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGlvbnN0YXJ0OiBfdm0uaGFuZGxlQ29tcG9zaXRpb25TdGFydCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvc2l0aW9udXBkYXRlOiBfdm0uaGFuZGxlQ29tcG9zaXRpb25VcGRhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGlvbmVuZDogX3ZtLmhhbmRsZUNvbXBvc2l0aW9uRW5kLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQ6IF92bS5oYW5kbGVJbnB1dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzOiBfdm0uaGFuZGxlRm9jdXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBibHVyOiBfdm0uaGFuZGxlQmx1cixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZTogX3ZtLmhhbmRsZUNoYW5nZVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgXCJpbnB1dFwiLFxuICAgICAgICAgICAgICAgICAgICBfdm0uJGF0dHJzLFxuICAgICAgICAgICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgIF92bS4kc2xvdHMucHJlZml4IHx8IF92bS5wcmVmaXhJY29uXG4gICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwiZWwtaW5wdXRfX3ByZWZpeFwiIH0sXG4gICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIF92bS5fdChcInByZWZpeFwiKSxcbiAgICAgICAgICAgICAgICAgICAgX3ZtLnByZWZpeEljb25cbiAgICAgICAgICAgICAgICAgICAgICA/IF9jKFwiaVwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWlucHV0X19pY29uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0ucHJlZml4SWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgIF92bS5nZXRTdWZmaXhWaXNpYmxlKClcbiAgICAgICAgICAgICAgPyBfYyhcInNwYW5cIiwgeyBzdGF0aWNDbGFzczogXCJlbC1pbnB1dF9fc3VmZml4XCIgfSwgW1xuICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiBcImVsLWlucHV0X19zdWZmaXgtaW5uZXJcIiB9LFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgIV92bS5zaG93Q2xlYXIgfHxcbiAgICAgICAgICAgICAgICAgICAgICAhX3ZtLnNob3dQd2RWaXNpYmxlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgIV92bS5pc1dvcmRMaW1pdFZpc2libGVcbiAgICAgICAgICAgICAgICAgICAgICAgID8gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdChcInN1ZmZpeFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uc3VmZml4SWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBfYyhcImlcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWlucHV0X19pY29uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IF92bS5zdWZmaXhJY29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgICAgICAgICAgX3ZtLnNob3dDbGVhclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBfYyhcImlcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlbC1pbnB1dF9faWNvbiBlbC1pY29uLWNpcmNsZS1jbG9zZSBlbC1pbnB1dF9fY2xlYXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW91c2Vkb3duOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogX3ZtLmNsZWFyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgICAgICAgICBfdm0uc2hvd1B3ZFZpc2libGVcbiAgICAgICAgICAgICAgICAgICAgICAgID8gX2MoXCJpXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZWwtaW5wdXRfX2ljb24gZWwtaWNvbi12aWV3IGVsLWlucHV0X19jbGVhclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0uaGFuZGxlUGFzc3dvcmRWaXNpYmxlIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgICAgICAgICAgX3ZtLmlzV29yZExpbWl0VmlzaWJsZVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBfYyhcInNwYW5cIiwgeyBzdGF0aWNDbGFzczogXCJlbC1pbnB1dF9fY291bnRcIiB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwiZWwtaW5wdXRfX2NvdW50LWlubmVyXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICAgICAgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl9zKF92bS50ZXh0TGVuZ3RoKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIi9cIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3MoX3ZtLnVwcGVyTGltaXQpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBfdm0udmFsaWRhdGVTdGF0ZVxuICAgICAgICAgICAgICAgICAgICA/IF9jKFwiaVwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1pbnB1dF9faWNvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IFtcImVsLWlucHV0X192YWxpZGF0ZUljb25cIiwgX3ZtLnZhbGlkYXRlSWNvbl1cbiAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgIF92bS4kc2xvdHMuYXBwZW5kXG4gICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJlbC1pbnB1dC1ncm91cF9fYXBwZW5kXCIgfSxcbiAgICAgICAgICAgICAgICAgIFtfdm0uX3QoXCJhcHBlbmRcIildLFxuICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICAgIF1cbiAgICAgICAgOiBfYyhcbiAgICAgICAgICAgIFwidGV4dGFyZWFcIixcbiAgICAgICAgICAgIF92bS5fYihcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJlZjogXCJ0ZXh0YXJlYVwiLFxuICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXRleHRhcmVhX19pbm5lclwiLFxuICAgICAgICAgICAgICAgIHN0eWxlOiBfdm0udGV4dGFyZWFTdHlsZSxcbiAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgdGFiaW5kZXg6IF92bS50YWJpbmRleCxcbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBfdm0uaW5wdXREaXNhYmxlZCxcbiAgICAgICAgICAgICAgICAgIHJlYWRvbmx5OiBfdm0ucmVhZG9ubHksXG4gICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU6IF92bS5hdXRvQ29tcGxldGUgfHwgX3ZtLmF1dG9jb21wbGV0ZSxcbiAgICAgICAgICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBfdm0ubGFiZWxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICBjb21wb3NpdGlvbnN0YXJ0OiBfdm0uaGFuZGxlQ29tcG9zaXRpb25TdGFydCxcbiAgICAgICAgICAgICAgICAgIGNvbXBvc2l0aW9udXBkYXRlOiBfdm0uaGFuZGxlQ29tcG9zaXRpb25VcGRhdGUsXG4gICAgICAgICAgICAgICAgICBjb21wb3NpdGlvbmVuZDogX3ZtLmhhbmRsZUNvbXBvc2l0aW9uRW5kLFxuICAgICAgICAgICAgICAgICAgaW5wdXQ6IF92bS5oYW5kbGVJbnB1dCxcbiAgICAgICAgICAgICAgICAgIGZvY3VzOiBfdm0uaGFuZGxlRm9jdXMsXG4gICAgICAgICAgICAgICAgICBibHVyOiBfdm0uaGFuZGxlQmx1cixcbiAgICAgICAgICAgICAgICAgIGNoYW5nZTogX3ZtLmhhbmRsZUNoYW5nZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXCJ0ZXh0YXJlYVwiLFxuICAgICAgICAgICAgICBfdm0uJGF0dHJzLFxuICAgICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICAgKVxuICAgICAgICAgICksXG4gICAgICBfdm0uaXNXb3JkTGltaXRWaXNpYmxlICYmIF92bS50eXBlID09PSBcInRleHRhcmVhXCJcbiAgICAgICAgPyBfYyhcInNwYW5cIiwgeyBzdGF0aWNDbGFzczogXCJlbC1pbnB1dF9fY291bnRcIiB9LCBbXG4gICAgICAgICAgICBfdm0uX3YoX3ZtLl9zKF92bS50ZXh0TGVuZ3RoKSArIFwiL1wiICsgX3ZtLl9zKF92bS51cHBlckxpbWl0KSlcbiAgICAgICAgICBdKVxuICAgICAgICA6IF92bS5fZSgpXG4gICAgXSxcbiAgICAyXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9pbnB1dC9zcmMvaW5wdXQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTM0M2RkNzc0JlxuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiZWxlbWVudC11aS9saWIvbWl4aW5zL2VtaXR0ZXJcIlxudmFyIGVtaXR0ZXJfID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcbnZhciBlbWl0dGVyX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGVtaXR0ZXJfKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcImVsZW1lbnQtdWkvbGliL21peGlucy9taWdyYXRpbmdcIlxudmFyIG1pZ3JhdGluZ18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKTtcbnZhciBtaWdyYXRpbmdfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4obWlncmF0aW5nXyk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvaW5wdXQvc3JjL2NhbGNUZXh0YXJlYUhlaWdodC5qc1xudmFyIGhpZGRlblRleHRhcmVhID0gdm9pZCAwO1xuXG52YXIgSElEREVOX1NUWUxFID0gJ1xcbiAgaGVpZ2h0OjAgIWltcG9ydGFudDtcXG4gIHZpc2liaWxpdHk6aGlkZGVuICFpbXBvcnRhbnQ7XFxuICBvdmVyZmxvdzpoaWRkZW4gIWltcG9ydGFudDtcXG4gIHBvc2l0aW9uOmFic29sdXRlICFpbXBvcnRhbnQ7XFxuICB6LWluZGV4Oi0xMDAwICFpbXBvcnRhbnQ7XFxuICB0b3A6MCAhaW1wb3J0YW50O1xcbiAgcmlnaHQ6MCAhaW1wb3J0YW50XFxuJztcblxudmFyIENPTlRFWFRfU1RZTEUgPSBbJ2xldHRlci1zcGFjaW5nJywgJ2xpbmUtaGVpZ2h0JywgJ3BhZGRpbmctdG9wJywgJ3BhZGRpbmctYm90dG9tJywgJ2ZvbnQtZmFtaWx5JywgJ2ZvbnQtd2VpZ2h0JywgJ2ZvbnQtc2l6ZScsICd0ZXh0LXJlbmRlcmluZycsICd0ZXh0LXRyYW5zZm9ybScsICd3aWR0aCcsICd0ZXh0LWluZGVudCcsICdwYWRkaW5nLWxlZnQnLCAncGFkZGluZy1yaWdodCcsICdib3JkZXItd2lkdGgnLCAnYm94LXNpemluZyddO1xuXG5mdW5jdGlvbiBjYWxjdWxhdGVOb2RlU3R5bGluZyh0YXJnZXRFbGVtZW50KSB7XG4gIHZhciBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRhcmdldEVsZW1lbnQpO1xuXG4gIHZhciBib3hTaXppbmcgPSBzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCdib3gtc2l6aW5nJyk7XG5cbiAgdmFyIHBhZGRpbmdTaXplID0gcGFyc2VGbG9hdChzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCdwYWRkaW5nLWJvdHRvbScpKSArIHBhcnNlRmxvYXQoc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgncGFkZGluZy10b3AnKSk7XG5cbiAgdmFyIGJvcmRlclNpemUgPSBwYXJzZUZsb2F0KHN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ2JvcmRlci1ib3R0b20td2lkdGgnKSkgKyBwYXJzZUZsb2F0KHN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ2JvcmRlci10b3Atd2lkdGgnKSk7XG5cbiAgdmFyIGNvbnRleHRTdHlsZSA9IENPTlRFWFRfU1RZTEUubWFwKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgcmV0dXJuIG5hbWUgKyAnOicgKyBzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKG5hbWUpO1xuICB9KS5qb2luKCc7Jyk7XG5cbiAgcmV0dXJuIHsgY29udGV4dFN0eWxlOiBjb250ZXh0U3R5bGUsIHBhZGRpbmdTaXplOiBwYWRkaW5nU2l6ZSwgYm9yZGVyU2l6ZTogYm9yZGVyU2l6ZSwgYm94U2l6aW5nOiBib3hTaXppbmcgfTtcbn1cblxuZnVuY3Rpb24gY2FsY1RleHRhcmVhSGVpZ2h0KHRhcmdldEVsZW1lbnQpIHtcbiAgdmFyIG1pblJvd3MgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IDE7XG4gIHZhciBtYXhSb3dzID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBudWxsO1xuXG4gIGlmICghaGlkZGVuVGV4dGFyZWEpIHtcbiAgICBoaWRkZW5UZXh0YXJlYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RleHRhcmVhJyk7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChoaWRkZW5UZXh0YXJlYSk7XG4gIH1cblxuICB2YXIgX2NhbGN1bGF0ZU5vZGVTdHlsaW5nID0gY2FsY3VsYXRlTm9kZVN0eWxpbmcodGFyZ2V0RWxlbWVudCksXG4gICAgICBwYWRkaW5nU2l6ZSA9IF9jYWxjdWxhdGVOb2RlU3R5bGluZy5wYWRkaW5nU2l6ZSxcbiAgICAgIGJvcmRlclNpemUgPSBfY2FsY3VsYXRlTm9kZVN0eWxpbmcuYm9yZGVyU2l6ZSxcbiAgICAgIGJveFNpemluZyA9IF9jYWxjdWxhdGVOb2RlU3R5bGluZy5ib3hTaXppbmcsXG4gICAgICBjb250ZXh0U3R5bGUgPSBfY2FsY3VsYXRlTm9kZVN0eWxpbmcuY29udGV4dFN0eWxlO1xuXG4gIGhpZGRlblRleHRhcmVhLnNldEF0dHJpYnV0ZSgnc3R5bGUnLCBjb250ZXh0U3R5bGUgKyAnOycgKyBISURERU5fU1RZTEUpO1xuICBoaWRkZW5UZXh0YXJlYS52YWx1ZSA9IHRhcmdldEVsZW1lbnQudmFsdWUgfHwgdGFyZ2V0RWxlbWVudC5wbGFjZWhvbGRlciB8fCAnJztcblxuICB2YXIgaGVpZ2h0ID0gaGlkZGVuVGV4dGFyZWEuc2Nyb2xsSGVpZ2h0O1xuICB2YXIgcmVzdWx0ID0ge307XG5cbiAgaWYgKGJveFNpemluZyA9PT0gJ2JvcmRlci1ib3gnKSB7XG4gICAgaGVpZ2h0ID0gaGVpZ2h0ICsgYm9yZGVyU2l6ZTtcbiAgfSBlbHNlIGlmIChib3hTaXppbmcgPT09ICdjb250ZW50LWJveCcpIHtcbiAgICBoZWlnaHQgPSBoZWlnaHQgLSBwYWRkaW5nU2l6ZTtcbiAgfVxuXG4gIGhpZGRlblRleHRhcmVhLnZhbHVlID0gJyc7XG4gIHZhciBzaW5nbGVSb3dIZWlnaHQgPSBoaWRkZW5UZXh0YXJlYS5zY3JvbGxIZWlnaHQgLSBwYWRkaW5nU2l6ZTtcblxuICBpZiAobWluUm93cyAhPT0gbnVsbCkge1xuICAgIHZhciBtaW5IZWlnaHQgPSBzaW5nbGVSb3dIZWlnaHQgKiBtaW5Sb3dzO1xuICAgIGlmIChib3hTaXppbmcgPT09ICdib3JkZXItYm94Jykge1xuICAgICAgbWluSGVpZ2h0ID0gbWluSGVpZ2h0ICsgcGFkZGluZ1NpemUgKyBib3JkZXJTaXplO1xuICAgIH1cbiAgICBoZWlnaHQgPSBNYXRoLm1heChtaW5IZWlnaHQsIGhlaWdodCk7XG4gICAgcmVzdWx0Lm1pbkhlaWdodCA9IG1pbkhlaWdodCArICdweCc7XG4gIH1cbiAgaWYgKG1heFJvd3MgIT09IG51bGwpIHtcbiAgICB2YXIgbWF4SGVpZ2h0ID0gc2luZ2xlUm93SGVpZ2h0ICogbWF4Um93cztcbiAgICBpZiAoYm94U2l6aW5nID09PSAnYm9yZGVyLWJveCcpIHtcbiAgICAgIG1heEhlaWdodCA9IG1heEhlaWdodCArIHBhZGRpbmdTaXplICsgYm9yZGVyU2l6ZTtcbiAgICB9XG4gICAgaGVpZ2h0ID0gTWF0aC5taW4obWF4SGVpZ2h0LCBoZWlnaHQpO1xuICB9XG4gIHJlc3VsdC5oZWlnaHQgPSBoZWlnaHQgKyAncHgnO1xuICBoaWRkZW5UZXh0YXJlYS5wYXJlbnROb2RlICYmIGhpZGRlblRleHRhcmVhLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoaGlkZGVuVGV4dGFyZWEpO1xuICBoaWRkZW5UZXh0YXJlYSA9IG51bGw7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcImVsZW1lbnQtdWkvbGliL3V0aWxzL21lcmdlXCJcbnZhciBtZXJnZV8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpO1xudmFyIG1lcmdlX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKG1lcmdlXyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJlbGVtZW50LXVpL2xpYi91dGlscy9zaGFyZWRcIlxudmFyIHNoYXJlZF8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvaW5wdXQvc3JjL2lucHV0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cblxuXG5cblxuXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGlucHV0dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbmFtZTogJ0VsSW5wdXQnLFxuXG4gIGNvbXBvbmVudE5hbWU6ICdFbElucHV0JyxcblxuICBtaXhpbnM6IFtlbWl0dGVyX2RlZmF1bHQuYSwgbWlncmF0aW5nX2RlZmF1bHQuYV0sXG5cbiAgaW5oZXJpdEF0dHJzOiBmYWxzZSxcblxuICBpbmplY3Q6IHtcbiAgICBlbEZvcm06IHtcbiAgICAgIGRlZmF1bHQ6ICcnXG4gICAgfSxcbiAgICBlbEZvcm1JdGVtOiB7XG4gICAgICBkZWZhdWx0OiAnJ1xuICAgIH1cbiAgfSxcblxuICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICB0ZXh0YXJlYUNhbGNTdHlsZToge30sXG4gICAgICBob3ZlcmluZzogZmFsc2UsXG4gICAgICBmb2N1c2VkOiBmYWxzZSxcbiAgICAgIGlzQ29tcG9zaW5nOiBmYWxzZSxcbiAgICAgIHBhc3N3b3JkVmlzaWJsZTogZmFsc2VcbiAgICB9O1xuICB9LFxuXG5cbiAgcHJvcHM6IHtcbiAgICB2YWx1ZTogW1N0cmluZywgTnVtYmVyXSxcbiAgICBzaXplOiBTdHJpbmcsXG4gICAgcmVzaXplOiBTdHJpbmcsXG4gICAgZm9ybTogU3RyaW5nLFxuICAgIGRpc2FibGVkOiBCb29sZWFuLFxuICAgIHJlYWRvbmx5OiBCb29sZWFuLFxuICAgIHR5cGU6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICd0ZXh0J1xuICAgIH0sXG4gICAgYXV0b3NpemU6IHtcbiAgICAgIHR5cGU6IFtCb29sZWFuLCBPYmplY3RdLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9LFxuICAgIGF1dG9jb21wbGV0ZToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ29mZidcbiAgICB9LFxuICAgIC8qKiBARGVwcmVjYXRlZCBpbiBuZXh0IG1ham9yIHZlcnNpb24gKi9cbiAgICBhdXRvQ29tcGxldGU6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIHZhbGlkYXRvcjogZnVuY3Rpb24gdmFsaWRhdG9yKHZhbCkge1xuICAgICAgICAgZmFsc2UgJiYgZmFsc2U7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0sXG4gICAgdmFsaWRhdGVFdmVudDoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9LFxuICAgIHN1ZmZpeEljb246IFN0cmluZyxcbiAgICBwcmVmaXhJY29uOiBTdHJpbmcsXG4gICAgbGFiZWw6IFN0cmluZyxcbiAgICBjbGVhcmFibGU6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0sXG4gICAgc2hvd1Bhc3N3b3JkOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9LFxuICAgIHNob3dXb3JkTGltaXQ6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0sXG4gICAgdGFiaW5kZXg6IFN0cmluZ1xuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgX2VsRm9ybUl0ZW1TaXplOiBmdW5jdGlvbiBfZWxGb3JtSXRlbVNpemUoKSB7XG4gICAgICByZXR1cm4gKHRoaXMuZWxGb3JtSXRlbSB8fCB7fSkuZWxGb3JtSXRlbVNpemU7XG4gICAgfSxcbiAgICB2YWxpZGF0ZVN0YXRlOiBmdW5jdGlvbiB2YWxpZGF0ZVN0YXRlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZWxGb3JtSXRlbSA/IHRoaXMuZWxGb3JtSXRlbS52YWxpZGF0ZVN0YXRlIDogJyc7XG4gICAgfSxcbiAgICBuZWVkU3RhdHVzSWNvbjogZnVuY3Rpb24gbmVlZFN0YXR1c0ljb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbEZvcm0gPyB0aGlzLmVsRm9ybS5zdGF0dXNJY29uIDogZmFsc2U7XG4gICAgfSxcbiAgICB2YWxpZGF0ZUljb246IGZ1bmN0aW9uIHZhbGlkYXRlSWNvbigpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbGlkYXRpbmc6ICdlbC1pY29uLWxvYWRpbmcnLFxuICAgICAgICBzdWNjZXNzOiAnZWwtaWNvbi1jaXJjbGUtY2hlY2snLFxuICAgICAgICBlcnJvcjogJ2VsLWljb24tY2lyY2xlLWNsb3NlJ1xuICAgICAgfVt0aGlzLnZhbGlkYXRlU3RhdGVdO1xuICAgIH0sXG4gICAgdGV4dGFyZWFTdHlsZTogZnVuY3Rpb24gdGV4dGFyZWFTdHlsZSgpIHtcbiAgICAgIHJldHVybiBtZXJnZV9kZWZhdWx0KCkoe30sIHRoaXMudGV4dGFyZWFDYWxjU3R5bGUsIHsgcmVzaXplOiB0aGlzLnJlc2l6ZSB9KTtcbiAgICB9LFxuICAgIGlucHV0U2l6ZTogZnVuY3Rpb24gaW5wdXRTaXplKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2l6ZSB8fCB0aGlzLl9lbEZvcm1JdGVtU2l6ZSB8fCAodGhpcy4kRUxFTUVOVCB8fCB7fSkuc2l6ZTtcbiAgICB9LFxuICAgIGlucHV0RGlzYWJsZWQ6IGZ1bmN0aW9uIGlucHV0RGlzYWJsZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5kaXNhYmxlZCB8fCAodGhpcy5lbEZvcm0gfHwge30pLmRpc2FibGVkO1xuICAgIH0sXG4gICAgbmF0aXZlSW5wdXRWYWx1ZTogZnVuY3Rpb24gbmF0aXZlSW5wdXRWYWx1ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnZhbHVlID09PSBudWxsIHx8IHRoaXMudmFsdWUgPT09IHVuZGVmaW5lZCA/ICcnIDogU3RyaW5nKHRoaXMudmFsdWUpO1xuICAgIH0sXG4gICAgc2hvd0NsZWFyOiBmdW5jdGlvbiBzaG93Q2xlYXIoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jbGVhcmFibGUgJiYgIXRoaXMuaW5wdXREaXNhYmxlZCAmJiAhdGhpcy5yZWFkb25seSAmJiB0aGlzLm5hdGl2ZUlucHV0VmFsdWUgJiYgKHRoaXMuZm9jdXNlZCB8fCB0aGlzLmhvdmVyaW5nKTtcbiAgICB9LFxuICAgIHNob3dQd2RWaXNpYmxlOiBmdW5jdGlvbiBzaG93UHdkVmlzaWJsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNob3dQYXNzd29yZCAmJiAhdGhpcy5pbnB1dERpc2FibGVkICYmICF0aGlzLnJlYWRvbmx5ICYmICghIXRoaXMubmF0aXZlSW5wdXRWYWx1ZSB8fCB0aGlzLmZvY3VzZWQpO1xuICAgIH0sXG4gICAgaXNXb3JkTGltaXRWaXNpYmxlOiBmdW5jdGlvbiBpc1dvcmRMaW1pdFZpc2libGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zaG93V29yZExpbWl0ICYmIHRoaXMuJGF0dHJzLm1heGxlbmd0aCAmJiAodGhpcy50eXBlID09PSAndGV4dCcgfHwgdGhpcy50eXBlID09PSAndGV4dGFyZWEnKSAmJiAhdGhpcy5pbnB1dERpc2FibGVkICYmICF0aGlzLnJlYWRvbmx5ICYmICF0aGlzLnNob3dQYXNzd29yZDtcbiAgICB9LFxuICAgIHVwcGVyTGltaXQ6IGZ1bmN0aW9uIHVwcGVyTGltaXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kYXR0cnMubWF4bGVuZ3RoO1xuICAgIH0sXG4gICAgdGV4dExlbmd0aDogZnVuY3Rpb24gdGV4dExlbmd0aCgpIHtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy52YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgcmV0dXJuIFN0cmluZyh0aGlzLnZhbHVlKS5sZW5ndGg7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAodGhpcy52YWx1ZSB8fCAnJykubGVuZ3RoO1xuICAgIH0sXG4gICAgaW5wdXRFeGNlZWQ6IGZ1bmN0aW9uIGlucHV0RXhjZWVkKCkge1xuICAgICAgLy8gc2hvdyBleGNlZWQgc3R5bGUgaWYgbGVuZ3RoIG9mIGluaXRpYWwgdmFsdWUgZ3JlYXRlciB0aGVuIG1heGxlbmd0aFxuICAgICAgcmV0dXJuIHRoaXMuaXNXb3JkTGltaXRWaXNpYmxlICYmIHRoaXMudGV4dExlbmd0aCA+IHRoaXMudXBwZXJMaW1pdDtcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICB2YWx1ZTogZnVuY3Rpb24gdmFsdWUodmFsKSB7XG4gICAgICB0aGlzLiRuZXh0VGljayh0aGlzLnJlc2l6ZVRleHRhcmVhKTtcbiAgICAgIGlmICh0aGlzLnZhbGlkYXRlRXZlbnQpIHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaCgnRWxGb3JtSXRlbScsICdlbC5mb3JtLmNoYW5nZScsIFt2YWxdKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gbmF0aXZlIGlucHV0IHZhbHVlIGlzIHNldCBleHBsaWNpdGx5XG4gICAgLy8gZG8gbm90IHVzZSB2LW1vZGVsIC8gOnZhbHVlIGluIHRlbXBsYXRlXG4gICAgLy8gc2VlOiBodHRwczovL2dpdGh1Yi5jb20vRWxlbWVGRS9lbGVtZW50L2lzc3Vlcy8xNDUyMVxuICAgIG5hdGl2ZUlucHV0VmFsdWU6IGZ1bmN0aW9uIG5hdGl2ZUlucHV0VmFsdWUoKSB7XG4gICAgICB0aGlzLnNldE5hdGl2ZUlucHV0VmFsdWUoKTtcbiAgICB9LFxuXG4gICAgLy8gd2hlbiBjaGFuZ2UgYmV0d2VlbiA8aW5wdXQ+IGFuZCA8dGV4dGFyZWE+LFxuICAgIC8vIHVwZGF0ZSBET00gZGVwZW5kZW50IHZhbHVlIGFuZCBzdHlsZXNcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vRWxlbWVGRS9lbGVtZW50L2lzc3Vlcy8xNDg1N1xuICAgIHR5cGU6IGZ1bmN0aW9uIHR5cGUoKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzLnNldE5hdGl2ZUlucHV0VmFsdWUoKTtcbiAgICAgICAgX3RoaXMucmVzaXplVGV4dGFyZWEoKTtcbiAgICAgICAgX3RoaXMudXBkYXRlSWNvbk9mZnNldCgpO1xuICAgICAgfSk7XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBmb2N1czogZnVuY3Rpb24gZm9jdXMoKSB7XG4gICAgICB0aGlzLmdldElucHV0KCkuZm9jdXMoKTtcbiAgICB9LFxuICAgIGJsdXI6IGZ1bmN0aW9uIGJsdXIoKSB7XG4gICAgICB0aGlzLmdldElucHV0KCkuYmx1cigpO1xuICAgIH0sXG4gICAgZ2V0TWlncmF0aW5nQ29uZmlnOiBmdW5jdGlvbiBnZXRNaWdyYXRpbmdDb25maWcoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwcm9wczoge1xuICAgICAgICAgICdpY29uJzogJ2ljb24gaXMgcmVtb3ZlZCwgdXNlIHN1ZmZpeC1pY29uIC8gcHJlZml4LWljb24gaW5zdGVhZC4nLFxuICAgICAgICAgICdvbi1pY29uLWNsaWNrJzogJ29uLWljb24tY2xpY2sgaXMgcmVtb3ZlZC4nXG4gICAgICAgIH0sXG4gICAgICAgIGV2ZW50czoge1xuICAgICAgICAgICdjbGljayc6ICdjbGljayBpcyByZW1vdmVkLidcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9LFxuICAgIGhhbmRsZUJsdXI6IGZ1bmN0aW9uIGhhbmRsZUJsdXIoZXZlbnQpIHtcbiAgICAgIHRoaXMuZm9jdXNlZCA9IGZhbHNlO1xuICAgICAgdGhpcy4kZW1pdCgnYmx1cicsIGV2ZW50KTtcbiAgICAgIGlmICh0aGlzLnZhbGlkYXRlRXZlbnQpIHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaCgnRWxGb3JtSXRlbScsICdlbC5mb3JtLmJsdXInLCBbdGhpcy52YWx1ZV0pO1xuICAgICAgfVxuICAgIH0sXG4gICAgc2VsZWN0OiBmdW5jdGlvbiBzZWxlY3QoKSB7XG4gICAgICB0aGlzLmdldElucHV0KCkuc2VsZWN0KCk7XG4gICAgfSxcbiAgICByZXNpemVUZXh0YXJlYTogZnVuY3Rpb24gcmVzaXplVGV4dGFyZWEoKSB7XG4gICAgICBpZiAodGhpcy4kaXNTZXJ2ZXIpIHJldHVybjtcbiAgICAgIHZhciBhdXRvc2l6ZSA9IHRoaXMuYXV0b3NpemUsXG4gICAgICAgICAgdHlwZSA9IHRoaXMudHlwZTtcblxuICAgICAgaWYgKHR5cGUgIT09ICd0ZXh0YXJlYScpIHJldHVybjtcbiAgICAgIGlmICghYXV0b3NpemUpIHtcbiAgICAgICAgdGhpcy50ZXh0YXJlYUNhbGNTdHlsZSA9IHtcbiAgICAgICAgICBtaW5IZWlnaHQ6IGNhbGNUZXh0YXJlYUhlaWdodCh0aGlzLiRyZWZzLnRleHRhcmVhKS5taW5IZWlnaHRcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdmFyIG1pblJvd3MgPSBhdXRvc2l6ZS5taW5Sb3dzO1xuICAgICAgdmFyIG1heFJvd3MgPSBhdXRvc2l6ZS5tYXhSb3dzO1xuXG4gICAgICB0aGlzLnRleHRhcmVhQ2FsY1N0eWxlID0gY2FsY1RleHRhcmVhSGVpZ2h0KHRoaXMuJHJlZnMudGV4dGFyZWEsIG1pblJvd3MsIG1heFJvd3MpO1xuICAgIH0sXG4gICAgc2V0TmF0aXZlSW5wdXRWYWx1ZTogZnVuY3Rpb24gc2V0TmF0aXZlSW5wdXRWYWx1ZSgpIHtcbiAgICAgIHZhciBpbnB1dCA9IHRoaXMuZ2V0SW5wdXQoKTtcbiAgICAgIGlmICghaW5wdXQpIHJldHVybjtcbiAgICAgIGlmIChpbnB1dC52YWx1ZSA9PT0gdGhpcy5uYXRpdmVJbnB1dFZhbHVlKSByZXR1cm47XG4gICAgICBpbnB1dC52YWx1ZSA9IHRoaXMubmF0aXZlSW5wdXRWYWx1ZTtcbiAgICB9LFxuICAgIGhhbmRsZUZvY3VzOiBmdW5jdGlvbiBoYW5kbGVGb2N1cyhldmVudCkge1xuICAgICAgdGhpcy5mb2N1c2VkID0gdHJ1ZTtcbiAgICAgIHRoaXMuJGVtaXQoJ2ZvY3VzJywgZXZlbnQpO1xuICAgIH0sXG4gICAgaGFuZGxlQ29tcG9zaXRpb25TdGFydDogZnVuY3Rpb24gaGFuZGxlQ29tcG9zaXRpb25TdGFydChldmVudCkge1xuICAgICAgdGhpcy4kZW1pdCgnY29tcG9zaXRpb25zdGFydCcsIGV2ZW50KTtcbiAgICAgIHRoaXMuaXNDb21wb3NpbmcgPSB0cnVlO1xuICAgIH0sXG4gICAgaGFuZGxlQ29tcG9zaXRpb25VcGRhdGU6IGZ1bmN0aW9uIGhhbmRsZUNvbXBvc2l0aW9uVXBkYXRlKGV2ZW50KSB7XG4gICAgICB0aGlzLiRlbWl0KCdjb21wb3NpdGlvbnVwZGF0ZScsIGV2ZW50KTtcbiAgICAgIHZhciB0ZXh0ID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgICAgdmFyIGxhc3RDaGFyYWN0ZXIgPSB0ZXh0W3RleHQubGVuZ3RoIC0gMV0gfHwgJyc7XG4gICAgICB0aGlzLmlzQ29tcG9zaW5nID0gIU9iamVjdChzaGFyZWRfW1wiaXNLb3JlYW5cIl0pKGxhc3RDaGFyYWN0ZXIpO1xuICAgIH0sXG4gICAgaGFuZGxlQ29tcG9zaXRpb25FbmQ6IGZ1bmN0aW9uIGhhbmRsZUNvbXBvc2l0aW9uRW5kKGV2ZW50KSB7XG4gICAgICB0aGlzLiRlbWl0KCdjb21wb3NpdGlvbmVuZCcsIGV2ZW50KTtcbiAgICAgIGlmICh0aGlzLmlzQ29tcG9zaW5nKSB7XG4gICAgICAgIHRoaXMuaXNDb21wb3NpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5oYW5kbGVJbnB1dChldmVudCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBoYW5kbGVJbnB1dDogZnVuY3Rpb24gaGFuZGxlSW5wdXQoZXZlbnQpIHtcbiAgICAgIC8vIHNob3VsZCBub3QgZW1pdCBpbnB1dCBkdXJpbmcgY29tcG9zaXRpb25cbiAgICAgIC8vIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL0VsZW1lRkUvZWxlbWVudC9pc3N1ZXMvMTA1MTZcbiAgICAgIGlmICh0aGlzLmlzQ29tcG9zaW5nKSByZXR1cm47XG5cbiAgICAgIC8vIGhhY2sgZm9yIGh0dHBzOi8vZ2l0aHViLmNvbS9FbGVtZUZFL2VsZW1lbnQvaXNzdWVzLzg1NDhcbiAgICAgIC8vIHNob3VsZCByZW1vdmUgdGhlIGZvbGxvd2luZyBsaW5lIHdoZW4gd2UgZG9uJ3Qgc3VwcG9ydCBJRVxuICAgICAgaWYgKGV2ZW50LnRhcmdldC52YWx1ZSA9PT0gdGhpcy5uYXRpdmVJbnB1dFZhbHVlKSByZXR1cm47XG5cbiAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgZXZlbnQudGFyZ2V0LnZhbHVlKTtcblxuICAgICAgLy8gZW5zdXJlIG5hdGl2ZSBpbnB1dCB2YWx1ZSBpcyBjb250cm9sbGVkXG4gICAgICAvLyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9FbGVtZUZFL2VsZW1lbnQvaXNzdWVzLzEyODUwXG4gICAgICB0aGlzLiRuZXh0VGljayh0aGlzLnNldE5hdGl2ZUlucHV0VmFsdWUpO1xuICAgIH0sXG4gICAgaGFuZGxlQ2hhbmdlOiBmdW5jdGlvbiBoYW5kbGVDaGFuZ2UoZXZlbnQpIHtcbiAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gICAgfSxcbiAgICBjYWxjSWNvbk9mZnNldDogZnVuY3Rpb24gY2FsY0ljb25PZmZzZXQocGxhY2UpIHtcbiAgICAgIHZhciBlbExpc3QgPSBbXS5zbGljZS5jYWxsKHRoaXMuJGVsLnF1ZXJ5U2VsZWN0b3JBbGwoJy5lbC1pbnB1dF9fJyArIHBsYWNlKSB8fCBbXSk7XG4gICAgICBpZiAoIWVsTGlzdC5sZW5ndGgpIHJldHVybjtcbiAgICAgIHZhciBlbCA9IG51bGw7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsTGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoZWxMaXN0W2ldLnBhcmVudE5vZGUgPT09IHRoaXMuJGVsKSB7XG4gICAgICAgICAgZWwgPSBlbExpc3RbaV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghZWwpIHJldHVybjtcbiAgICAgIHZhciBwZW5kYW50TWFwID0ge1xuICAgICAgICBzdWZmaXg6ICdhcHBlbmQnLFxuICAgICAgICBwcmVmaXg6ICdwcmVwZW5kJ1xuICAgICAgfTtcblxuICAgICAgdmFyIHBlbmRhbnQgPSBwZW5kYW50TWFwW3BsYWNlXTtcbiAgICAgIGlmICh0aGlzLiRzbG90c1twZW5kYW50XSkge1xuICAgICAgICBlbC5zdHlsZS50cmFuc2Zvcm0gPSAndHJhbnNsYXRlWCgnICsgKHBsYWNlID09PSAnc3VmZml4JyA/ICctJyA6ICcnKSArIHRoaXMuJGVsLnF1ZXJ5U2VsZWN0b3IoJy5lbC1pbnB1dC1ncm91cF9fJyArIHBlbmRhbnQpLm9mZnNldFdpZHRoICsgJ3B4KSc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoJ3N0eWxlJyk7XG4gICAgICB9XG4gICAgfSxcbiAgICB1cGRhdGVJY29uT2Zmc2V0OiBmdW5jdGlvbiB1cGRhdGVJY29uT2Zmc2V0KCkge1xuICAgICAgdGhpcy5jYWxjSWNvbk9mZnNldCgncHJlZml4Jyk7XG4gICAgICB0aGlzLmNhbGNJY29uT2Zmc2V0KCdzdWZmaXgnKTtcbiAgICB9LFxuICAgIGNsZWFyOiBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgJycpO1xuICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgJycpO1xuICAgICAgdGhpcy4kZW1pdCgnY2xlYXInKTtcbiAgICB9LFxuICAgIGhhbmRsZVBhc3N3b3JkVmlzaWJsZTogZnVuY3Rpb24gaGFuZGxlUGFzc3dvcmRWaXNpYmxlKCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHRoaXMucGFzc3dvcmRWaXNpYmxlID0gIXRoaXMucGFzc3dvcmRWaXNpYmxlO1xuICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpczIuZm9jdXMoKTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgZ2V0SW5wdXQ6IGZ1bmN0aW9uIGdldElucHV0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHJlZnMuaW5wdXQgfHwgdGhpcy4kcmVmcy50ZXh0YXJlYTtcbiAgICB9LFxuICAgIGdldFN1ZmZpeFZpc2libGU6IGZ1bmN0aW9uIGdldFN1ZmZpeFZpc2libGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kc2xvdHMuc3VmZml4IHx8IHRoaXMuc3VmZml4SWNvbiB8fCB0aGlzLnNob3dDbGVhciB8fCB0aGlzLnNob3dQYXNzd29yZCB8fCB0aGlzLmlzV29yZExpbWl0VmlzaWJsZSB8fCB0aGlzLnZhbGlkYXRlU3RhdGUgJiYgdGhpcy5uZWVkU3RhdHVzSWNvbjtcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZDogZnVuY3Rpb24gY3JlYXRlZCgpIHtcbiAgICB0aGlzLiRvbignaW5wdXRTZWxlY3QnLCB0aGlzLnNlbGVjdCk7XG4gIH0sXG4gIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7XG4gICAgdGhpcy5zZXROYXRpdmVJbnB1dFZhbHVlKCk7XG4gICAgdGhpcy5yZXNpemVUZXh0YXJlYSgpO1xuICAgIHRoaXMudXBkYXRlSWNvbk9mZnNldCgpO1xuICB9LFxuICB1cGRhdGVkOiBmdW5jdGlvbiB1cGRhdGVkKCkge1xuICAgIHRoaXMuJG5leHRUaWNrKHRoaXMudXBkYXRlSWNvbk9mZnNldCk7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9pbnB1dC9zcmMvaW5wdXQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY19pbnB1dHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChpbnB1dHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gRVhURVJOQUwgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcbnZhciBjb21wb25lbnROb3JtYWxpemVyID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9pbnB1dC9zcmMvaW5wdXQudnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgY29tcG9uZW50ID0gT2JqZWN0KGNvbXBvbmVudE5vcm1hbGl6ZXJbXCJhXCIgLyogZGVmYXVsdCAqL10pKFxuICBzcmNfaW5wdXR2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBhcGk7IH1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvaW5wdXQvc3JjL2lucHV0LnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBpbnB1dCA9IChjb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2lucHV0L2luZGV4LmpzXG5cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmlucHV0Lmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG4gIFZ1ZS5jb21wb25lbnQoaW5wdXQubmFtZSwgaW5wdXQpO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcGFja2FnZXNfaW5wdXQgPSBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChpbnB1dCk7XG5cbi8qKiovIH0pLFxuXG4vKioqLyA5OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi91dGlscy9tZXJnZVwiKTtcblxuLyoqKi8gfSlcblxuLyoqKioqKi8gfSk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/input.js\n");

/***/ }),

/***/ "./node_modules/element-ui/lib/locale/format.js":
/*!******************************************************!*\
  !*** ./node_modules/element-ui/lib/locale/format.js ***!
  \******************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";
eval("\n\nexports.__esModule = true;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nexports[\"default\"] = function (Vue) {\n\n  /**\n   * template\n   *\n   * @param {String} string\n   * @param {Array} ...args\n   * @return {String}\n   */\n\n  function template(string) {\n    for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      args[_key - 1] = arguments[_key];\n    }\n\n    if (args.length === 1 && _typeof(args[0]) === 'object') {\n      args = args[0];\n    }\n\n    if (!args || !args.hasOwnProperty) {\n      args = {};\n    }\n\n    return string.replace(RE_NARGS, function (match, prefix, i, index) {\n      var result = void 0;\n\n      if (string[index - 1] === '{' && string[index + match.length] === '}') {\n        return i;\n      } else {\n        result = (0, _util.hasOwn)(args, i) ? args[i] : null;\n        if (result === null || result === undefined) {\n          return '';\n        }\n\n        return result;\n      }\n    });\n  }\n\n  return template;\n};\n\nvar _util = __webpack_require__(/*! element-ui/lib/utils/util */ \"./node_modules/element-ui/lib/utils/util.js\");\n\nvar RE_NARGS = /(%|)\\{([0-9a-zA-Z_]+)\\}/g;\n/**\n *  String format template\n *  - Inspired:\n *    https://github.com/Matt-Esch/string-template/index.js\n *///# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvbG9jYWxlL2Zvcm1hdC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0I7O0FBRWxCLHFHQUFxRyxxQkFBcUIsbUJBQW1COztBQUU3SSxrQkFBZTs7QUFFZjtBQUNBO0FBQ0E7QUFDQSxhQUFhLFFBQVE7QUFDckIsYUFBYSxPQUFPO0FBQ3BCLGNBQWM7QUFDZDs7QUFFQTtBQUNBLHVGQUF1RixhQUFhO0FBQ3BHO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGtDQUFrQyx3Q0FBd0M7QUFDMUU7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBOztBQUVBLFlBQVksbUJBQU8sQ0FBQyw4RUFBMkI7O0FBRS9DLHNCQUFzQixpQkFBaUI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9lbGVtZW50LXVpL2xpYi9sb2NhbGUvZm9ybWF0LmpzPzVhOTIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG52YXIgX3R5cGVvZiA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiID8gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfSA6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07XG5cbmV4cG9ydHMuZGVmYXVsdCA9IGZ1bmN0aW9uIChWdWUpIHtcblxuICAvKipcbiAgICogdGVtcGxhdGVcbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IHN0cmluZ1xuICAgKiBAcGFyYW0ge0FycmF5fSAuLi5hcmdzXG4gICAqIEByZXR1cm4ge1N0cmluZ31cbiAgICovXG5cbiAgZnVuY3Rpb24gdGVtcGxhdGUoc3RyaW5nKSB7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBpZiAoYXJncy5sZW5ndGggPT09IDEgJiYgX3R5cGVvZihhcmdzWzBdKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgIH1cblxuICAgIGlmICghYXJncyB8fCAhYXJncy5oYXNPd25Qcm9wZXJ0eSkge1xuICAgICAgYXJncyA9IHt9O1xuICAgIH1cblxuICAgIHJldHVybiBzdHJpbmcucmVwbGFjZShSRV9OQVJHUywgZnVuY3Rpb24gKG1hdGNoLCBwcmVmaXgsIGksIGluZGV4KSB7XG4gICAgICB2YXIgcmVzdWx0ID0gdm9pZCAwO1xuXG4gICAgICBpZiAoc3RyaW5nW2luZGV4IC0gMV0gPT09ICd7JyAmJiBzdHJpbmdbaW5kZXggKyBtYXRjaC5sZW5ndGhdID09PSAnfScpIHtcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHQgPSAoMCwgX3V0aWwuaGFzT3duKShhcmdzLCBpKSA/IGFyZ3NbaV0gOiBudWxsO1xuICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHJlc3VsdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiB0ZW1wbGF0ZTtcbn07XG5cbnZhciBfdXRpbCA9IHJlcXVpcmUoJ2VsZW1lbnQtdWkvbGliL3V0aWxzL3V0aWwnKTtcblxudmFyIFJFX05BUkdTID0gLyglfClcXHsoWzAtOWEtekEtWl9dKylcXH0vZztcbi8qKlxuICogIFN0cmluZyBmb3JtYXQgdGVtcGxhdGVcbiAqICAtIEluc3BpcmVkOlxuICogICAgaHR0cHM6Ly9naXRodWIuY29tL01hdHQtRXNjaC9zdHJpbmctdGVtcGxhdGUvaW5kZXguanNcbiAqLyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/locale/format.js\n");

/***/ }),

/***/ "./node_modules/element-ui/lib/locale/index.js":
/*!*****************************************************!*\
  !*** ./node_modules/element-ui/lib/locale/index.js ***!
  \*****************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";
eval("\n\nexports.__esModule = true;\nexports.i18n = exports.use = exports.t = undefined;\n\nvar _zhCN = __webpack_require__(/*! element-ui/lib/locale/lang/zh-CN */ \"./node_modules/element-ui/lib/locale/lang/zh-CN.js\");\n\nvar _zhCN2 = _interopRequireDefault(_zhCN);\n\nvar _vue = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.esm.js\");\n\nvar _vue2 = _interopRequireDefault(_vue);\n\nvar _deepmerge = __webpack_require__(/*! deepmerge */ \"./node_modules/element-ui/node_modules/deepmerge/dist/cjs.js\");\n\nvar _deepmerge2 = _interopRequireDefault(_deepmerge);\n\nvar _format = __webpack_require__(/*! ./format */ \"./node_modules/element-ui/lib/locale/format.js\");\n\nvar _format2 = _interopRequireDefault(_format);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar format = (0, _format2.default)(_vue2.default);\nvar lang = _zhCN2.default;\nvar merged = false;\nvar i18nHandler = function i18nHandler() {\n  var vuei18n = Object.getPrototypeOf(this || _vue2.default).$t;\n  if (typeof vuei18n === 'function' && !!_vue2.default.locale) {\n    if (!merged) {\n      merged = true;\n      _vue2.default.locale(_vue2.default.config.lang, (0, _deepmerge2.default)(lang, _vue2.default.locale(_vue2.default.config.lang) || {}, { clone: true }));\n    }\n    return vuei18n.apply(this, arguments);\n  }\n};\n\nvar t = exports.t = function t(path, options) {\n  var value = i18nHandler.apply(this, arguments);\n  if (value !== null && value !== undefined) return value;\n\n  var array = path.split('.');\n  var current = lang;\n\n  for (var i = 0, j = array.length; i < j; i++) {\n    var property = array[i];\n    value = current[property];\n    if (i === j - 1) return format(value, options);\n    if (!value) return '';\n    current = value;\n  }\n  return '';\n};\n\nvar use = exports.use = function use(l) {\n  lang = l || lang;\n};\n\nvar i18n = exports.i18n = function i18n(fn) {\n  i18nHandler = fn || i18nHandler;\n};\n\nexports[\"default\"] = { use: use, t: t, i18n: i18n };//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvbG9jYWxlL2luZGV4LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLGtCQUFrQjtBQUNsQixZQUFZLEdBQUcsV0FBVyxHQUFHLFNBQVM7O0FBRXRDLFlBQVksbUJBQU8sQ0FBQyw0RkFBa0M7O0FBRXREOztBQUVBLFdBQVcsbUJBQU8sQ0FBQywrQ0FBSzs7QUFFeEI7O0FBRUEsaUJBQWlCLG1CQUFPLENBQUMsK0VBQVc7O0FBRXBDOztBQUVBLGNBQWMsbUJBQU8sQ0FBQyxnRUFBVTs7QUFFaEM7O0FBRUEsdUNBQXVDLHVDQUF1Qzs7QUFFOUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBJQUEwSSxJQUFJLGFBQWE7QUFDM0o7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsUUFBUSxTQUFTO0FBQ2pCO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxvQ0FBb0MsT0FBTztBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFVBQVUsV0FBVztBQUNyQjtBQUNBOztBQUVBLFdBQVcsWUFBWTtBQUN2QjtBQUNBOztBQUVBLGtCQUFlLEtBQUsiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvbG9jYWxlL2luZGV4LmpzPzcxOGIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5pMThuID0gZXhwb3J0cy51c2UgPSBleHBvcnRzLnQgPSB1bmRlZmluZWQ7XG5cbnZhciBfemhDTiA9IHJlcXVpcmUoJ2VsZW1lbnQtdWkvbGliL2xvY2FsZS9sYW5nL3poLUNOJyk7XG5cbnZhciBfemhDTjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF96aENOKTtcblxudmFyIF92dWUgPSByZXF1aXJlKCd2dWUnKTtcblxudmFyIF92dWUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfdnVlKTtcblxudmFyIF9kZWVwbWVyZ2UgPSByZXF1aXJlKCdkZWVwbWVyZ2UnKTtcblxudmFyIF9kZWVwbWVyZ2UyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZGVlcG1lcmdlKTtcblxudmFyIF9mb3JtYXQgPSByZXF1aXJlKCcuL2Zvcm1hdCcpO1xuXG52YXIgX2Zvcm1hdDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9mb3JtYXQpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG52YXIgZm9ybWF0ID0gKDAsIF9mb3JtYXQyLmRlZmF1bHQpKF92dWUyLmRlZmF1bHQpO1xudmFyIGxhbmcgPSBfemhDTjIuZGVmYXVsdDtcbnZhciBtZXJnZWQgPSBmYWxzZTtcbnZhciBpMThuSGFuZGxlciA9IGZ1bmN0aW9uIGkxOG5IYW5kbGVyKCkge1xuICB2YXIgdnVlaTE4biA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzIHx8IF92dWUyLmRlZmF1bHQpLiR0O1xuICBpZiAodHlwZW9mIHZ1ZWkxOG4gPT09ICdmdW5jdGlvbicgJiYgISFfdnVlMi5kZWZhdWx0LmxvY2FsZSkge1xuICAgIGlmICghbWVyZ2VkKSB7XG4gICAgICBtZXJnZWQgPSB0cnVlO1xuICAgICAgX3Z1ZTIuZGVmYXVsdC5sb2NhbGUoX3Z1ZTIuZGVmYXVsdC5jb25maWcubGFuZywgKDAsIF9kZWVwbWVyZ2UyLmRlZmF1bHQpKGxhbmcsIF92dWUyLmRlZmF1bHQubG9jYWxlKF92dWUyLmRlZmF1bHQuY29uZmlnLmxhbmcpIHx8IHt9LCB7IGNsb25lOiB0cnVlIH0pKTtcbiAgICB9XG4gICAgcmV0dXJuIHZ1ZWkxOG4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxufTtcblxudmFyIHQgPSBleHBvcnRzLnQgPSBmdW5jdGlvbiB0KHBhdGgsIG9wdGlvbnMpIHtcbiAgdmFyIHZhbHVlID0gaTE4bkhhbmRsZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgaWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHJldHVybiB2YWx1ZTtcblxuICB2YXIgYXJyYXkgPSBwYXRoLnNwbGl0KCcuJyk7XG4gIHZhciBjdXJyZW50ID0gbGFuZztcblxuICBmb3IgKHZhciBpID0gMCwgaiA9IGFycmF5Lmxlbmd0aDsgaSA8IGo7IGkrKykge1xuICAgIHZhciBwcm9wZXJ0eSA9IGFycmF5W2ldO1xuICAgIHZhbHVlID0gY3VycmVudFtwcm9wZXJ0eV07XG4gICAgaWYgKGkgPT09IGogLSAxKSByZXR1cm4gZm9ybWF0KHZhbHVlLCBvcHRpb25zKTtcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gJyc7XG4gICAgY3VycmVudCA9IHZhbHVlO1xuICB9XG4gIHJldHVybiAnJztcbn07XG5cbnZhciB1c2UgPSBleHBvcnRzLnVzZSA9IGZ1bmN0aW9uIHVzZShsKSB7XG4gIGxhbmcgPSBsIHx8IGxhbmc7XG59O1xuXG52YXIgaTE4biA9IGV4cG9ydHMuaTE4biA9IGZ1bmN0aW9uIGkxOG4oZm4pIHtcbiAgaTE4bkhhbmRsZXIgPSBmbiB8fCBpMThuSGFuZGxlcjtcbn07XG5cbmV4cG9ydHMuZGVmYXVsdCA9IHsgdXNlOiB1c2UsIHQ6IHQsIGkxOG46IGkxOG4gfTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/locale/index.js\n");

/***/ }),

/***/ "./node_modules/element-ui/lib/locale/lang/es.js":
/*!*******************************************************!*\
  !*** ./node_modules/element-ui/lib/locale/lang/es.js ***!
  \*******************************************************/
/***/ ((__unused_webpack_module, exports) => {

"use strict";
eval("\n\nexports.__esModule = true;\nexports[\"default\"] = {\n  el: {\n    colorpicker: {\n      confirm: 'Confirmar',\n      clear: 'Limpiar'\n    },\n    datepicker: {\n      now: 'Ahora',\n      today: 'Hoy',\n      cancel: 'Cancelar',\n      clear: 'Limpiar',\n      confirm: 'Confirmar',\n      selectDate: 'Seleccionar fecha',\n      selectTime: 'Seleccionar hora',\n      startDate: 'Fecha Incial',\n      startTime: 'Hora Inicial',\n      endDate: 'Fecha Final',\n      endTime: 'Hora Final',\n      prevYear: 'Año Anterior',\n      nextYear: 'Próximo Año',\n      prevMonth: 'Mes Anterior',\n      nextMonth: 'Próximo Mes',\n      year: '',\n      month1: 'enero',\n      month2: 'febrero',\n      month3: 'marzo',\n      month4: 'abril',\n      month5: 'mayo',\n      month6: 'junio',\n      month7: 'julio',\n      month8: 'agosto',\n      month9: 'septiembre',\n      month10: 'octubre',\n      month11: 'noviembre',\n      month12: 'diciembre',\n      // week: 'semana',\n      weeks: {\n        sun: 'dom',\n        mon: 'lun',\n        tue: 'mar',\n        wed: 'mié',\n        thu: 'jue',\n        fri: 'vie',\n        sat: 'sáb'\n      },\n      months: {\n        jan: 'ene',\n        feb: 'feb',\n        mar: 'mar',\n        apr: 'abr',\n        may: 'may',\n        jun: 'jun',\n        jul: 'jul',\n        aug: 'ago',\n        sep: 'sep',\n        oct: 'oct',\n        nov: 'nov',\n        dec: 'dic'\n      }\n    },\n    select: {\n      loading: 'Cargando',\n      noMatch: 'No hay datos que coincidan',\n      noData: 'Sin datos',\n      placeholder: 'Seleccionar'\n    },\n    cascader: {\n      noMatch: 'No hay datos que coincidan',\n      loading: 'Cargando',\n      placeholder: 'Seleccionar',\n      noData: 'Sin datos'\n    },\n    pagination: {\n      goto: 'Ir a',\n      pagesize: '/página',\n      total: 'Total {total}',\n      pageClassifier: ''\n    },\n    messagebox: {\n      confirm: 'Aceptar',\n      cancel: 'Cancelar',\n      error: 'Entrada inválida'\n    },\n    upload: {\n      deleteTip: 'Pulse Eliminar para retirar',\n      delete: 'Eliminar',\n      preview: 'Vista Previa',\n      continue: 'Continuar'\n    },\n    table: {\n      emptyText: 'Sin Datos',\n      confirmFilter: 'Confirmar',\n      resetFilter: 'Reiniciar',\n      clearFilter: 'Limpiar',\n      sumText: 'Suma'\n    },\n    tree: {\n      emptyText: 'Sin Datos'\n    },\n    transfer: {\n      noMatch: 'No hay datos que coincidan',\n      noData: 'Sin datos',\n      titles: ['Lista 1', 'Lista 2'],\n      filterPlaceholder: 'Ingresar palabra clave',\n      noCheckedFormat: '{total} artículos',\n      hasCheckedFormat: '{checked}/{total} revisados'\n    },\n    image: {\n      error: 'HA FALLADO'\n    },\n    pageHeader: {\n      title: 'Volver'\n    },\n    popconfirm: {\n      confirmButtonText: 'Si',\n      cancelButtonText: 'No'\n    },\n    empty: {\n      description: 'Sin Datos'\n    }\n  }\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvbG9jYWxlL2xhbmcvZXMuanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsa0JBQWtCO0FBQ2xCLGtCQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsTUFBTTtBQUMzQjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsT0FBTztBQUNoQywwQkFBMEIsUUFBUSxFQUFFLE9BQU87QUFDM0MsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9lbGVtZW50LXVpL2xpYi9sb2NhbGUvbGFuZy9lcy5qcz9iZjY2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuZGVmYXVsdCA9IHtcbiAgZWw6IHtcbiAgICBjb2xvcnBpY2tlcjoge1xuICAgICAgY29uZmlybTogJ0NvbmZpcm1hcicsXG4gICAgICBjbGVhcjogJ0xpbXBpYXInXG4gICAgfSxcbiAgICBkYXRlcGlja2VyOiB7XG4gICAgICBub3c6ICdBaG9yYScsXG4gICAgICB0b2RheTogJ0hveScsXG4gICAgICBjYW5jZWw6ICdDYW5jZWxhcicsXG4gICAgICBjbGVhcjogJ0xpbXBpYXInLFxuICAgICAgY29uZmlybTogJ0NvbmZpcm1hcicsXG4gICAgICBzZWxlY3REYXRlOiAnU2VsZWNjaW9uYXIgZmVjaGEnLFxuICAgICAgc2VsZWN0VGltZTogJ1NlbGVjY2lvbmFyIGhvcmEnLFxuICAgICAgc3RhcnREYXRlOiAnRmVjaGEgSW5jaWFsJyxcbiAgICAgIHN0YXJ0VGltZTogJ0hvcmEgSW5pY2lhbCcsXG4gICAgICBlbmREYXRlOiAnRmVjaGEgRmluYWwnLFxuICAgICAgZW5kVGltZTogJ0hvcmEgRmluYWwnLFxuICAgICAgcHJldlllYXI6ICdBw7FvIEFudGVyaW9yJyxcbiAgICAgIG5leHRZZWFyOiAnUHLDs3hpbW8gQcOxbycsXG4gICAgICBwcmV2TW9udGg6ICdNZXMgQW50ZXJpb3InLFxuICAgICAgbmV4dE1vbnRoOiAnUHLDs3hpbW8gTWVzJyxcbiAgICAgIHllYXI6ICcnLFxuICAgICAgbW9udGgxOiAnZW5lcm8nLFxuICAgICAgbW9udGgyOiAnZmVicmVybycsXG4gICAgICBtb250aDM6ICdtYXJ6bycsXG4gICAgICBtb250aDQ6ICdhYnJpbCcsXG4gICAgICBtb250aDU6ICdtYXlvJyxcbiAgICAgIG1vbnRoNjogJ2p1bmlvJyxcbiAgICAgIG1vbnRoNzogJ2p1bGlvJyxcbiAgICAgIG1vbnRoODogJ2Fnb3N0bycsXG4gICAgICBtb250aDk6ICdzZXB0aWVtYnJlJyxcbiAgICAgIG1vbnRoMTA6ICdvY3R1YnJlJyxcbiAgICAgIG1vbnRoMTE6ICdub3ZpZW1icmUnLFxuICAgICAgbW9udGgxMjogJ2RpY2llbWJyZScsXG4gICAgICAvLyB3ZWVrOiAnc2VtYW5hJyxcbiAgICAgIHdlZWtzOiB7XG4gICAgICAgIHN1bjogJ2RvbScsXG4gICAgICAgIG1vbjogJ2x1bicsXG4gICAgICAgIHR1ZTogJ21hcicsXG4gICAgICAgIHdlZDogJ21pw6knLFxuICAgICAgICB0aHU6ICdqdWUnLFxuICAgICAgICBmcmk6ICd2aWUnLFxuICAgICAgICBzYXQ6ICdzw6FiJ1xuICAgICAgfSxcbiAgICAgIG1vbnRoczoge1xuICAgICAgICBqYW46ICdlbmUnLFxuICAgICAgICBmZWI6ICdmZWInLFxuICAgICAgICBtYXI6ICdtYXInLFxuICAgICAgICBhcHI6ICdhYnInLFxuICAgICAgICBtYXk6ICdtYXknLFxuICAgICAgICBqdW46ICdqdW4nLFxuICAgICAgICBqdWw6ICdqdWwnLFxuICAgICAgICBhdWc6ICdhZ28nLFxuICAgICAgICBzZXA6ICdzZXAnLFxuICAgICAgICBvY3Q6ICdvY3QnLFxuICAgICAgICBub3Y6ICdub3YnLFxuICAgICAgICBkZWM6ICdkaWMnXG4gICAgICB9XG4gICAgfSxcbiAgICBzZWxlY3Q6IHtcbiAgICAgIGxvYWRpbmc6ICdDYXJnYW5kbycsXG4gICAgICBub01hdGNoOiAnTm8gaGF5IGRhdG9zIHF1ZSBjb2luY2lkYW4nLFxuICAgICAgbm9EYXRhOiAnU2luIGRhdG9zJyxcbiAgICAgIHBsYWNlaG9sZGVyOiAnU2VsZWNjaW9uYXInXG4gICAgfSxcbiAgICBjYXNjYWRlcjoge1xuICAgICAgbm9NYXRjaDogJ05vIGhheSBkYXRvcyBxdWUgY29pbmNpZGFuJyxcbiAgICAgIGxvYWRpbmc6ICdDYXJnYW5kbycsXG4gICAgICBwbGFjZWhvbGRlcjogJ1NlbGVjY2lvbmFyJyxcbiAgICAgIG5vRGF0YTogJ1NpbiBkYXRvcydcbiAgICB9LFxuICAgIHBhZ2luYXRpb246IHtcbiAgICAgIGdvdG86ICdJciBhJyxcbiAgICAgIHBhZ2VzaXplOiAnL3DDoWdpbmEnLFxuICAgICAgdG90YWw6ICdUb3RhbCB7dG90YWx9JyxcbiAgICAgIHBhZ2VDbGFzc2lmaWVyOiAnJ1xuICAgIH0sXG4gICAgbWVzc2FnZWJveDoge1xuICAgICAgY29uZmlybTogJ0FjZXB0YXInLFxuICAgICAgY2FuY2VsOiAnQ2FuY2VsYXInLFxuICAgICAgZXJyb3I6ICdFbnRyYWRhIGludsOhbGlkYSdcbiAgICB9LFxuICAgIHVwbG9hZDoge1xuICAgICAgZGVsZXRlVGlwOiAnUHVsc2UgRWxpbWluYXIgcGFyYSByZXRpcmFyJyxcbiAgICAgIGRlbGV0ZTogJ0VsaW1pbmFyJyxcbiAgICAgIHByZXZpZXc6ICdWaXN0YSBQcmV2aWEnLFxuICAgICAgY29udGludWU6ICdDb250aW51YXInXG4gICAgfSxcbiAgICB0YWJsZToge1xuICAgICAgZW1wdHlUZXh0OiAnU2luIERhdG9zJyxcbiAgICAgIGNvbmZpcm1GaWx0ZXI6ICdDb25maXJtYXInLFxuICAgICAgcmVzZXRGaWx0ZXI6ICdSZWluaWNpYXInLFxuICAgICAgY2xlYXJGaWx0ZXI6ICdMaW1waWFyJyxcbiAgICAgIHN1bVRleHQ6ICdTdW1hJ1xuICAgIH0sXG4gICAgdHJlZToge1xuICAgICAgZW1wdHlUZXh0OiAnU2luIERhdG9zJ1xuICAgIH0sXG4gICAgdHJhbnNmZXI6IHtcbiAgICAgIG5vTWF0Y2g6ICdObyBoYXkgZGF0b3MgcXVlIGNvaW5jaWRhbicsXG4gICAgICBub0RhdGE6ICdTaW4gZGF0b3MnLFxuICAgICAgdGl0bGVzOiBbJ0xpc3RhIDEnLCAnTGlzdGEgMiddLFxuICAgICAgZmlsdGVyUGxhY2Vob2xkZXI6ICdJbmdyZXNhciBwYWxhYnJhIGNsYXZlJyxcbiAgICAgIG5vQ2hlY2tlZEZvcm1hdDogJ3t0b3RhbH0gYXJ0w61jdWxvcycsXG4gICAgICBoYXNDaGVja2VkRm9ybWF0OiAne2NoZWNrZWR9L3t0b3RhbH0gcmV2aXNhZG9zJ1xuICAgIH0sXG4gICAgaW1hZ2U6IHtcbiAgICAgIGVycm9yOiAnSEEgRkFMTEFETydcbiAgICB9LFxuICAgIHBhZ2VIZWFkZXI6IHtcbiAgICAgIHRpdGxlOiAnVm9sdmVyJ1xuICAgIH0sXG4gICAgcG9wY29uZmlybToge1xuICAgICAgY29uZmlybUJ1dHRvblRleHQ6ICdTaScsXG4gICAgICBjYW5jZWxCdXR0b25UZXh0OiAnTm8nXG4gICAgfSxcbiAgICBlbXB0eToge1xuICAgICAgZGVzY3JpcHRpb246ICdTaW4gRGF0b3MnXG4gICAgfVxuICB9XG59OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/locale/lang/es.js\n");

/***/ }),

/***/ "./node_modules/element-ui/lib/locale/lang/zh-CN.js":
/*!**********************************************************!*\
  !*** ./node_modules/element-ui/lib/locale/lang/zh-CN.js ***!
  \**********************************************************/
/***/ ((__unused_webpack_module, exports) => {

"use strict";
eval("\n\nexports.__esModule = true;\nexports[\"default\"] = {\n  el: {\n    colorpicker: {\n      confirm: '确定',\n      clear: '清空'\n    },\n    datepicker: {\n      now: '此刻',\n      today: '今天',\n      cancel: '取消',\n      clear: '清空',\n      confirm: '确定',\n      selectDate: '选择日期',\n      selectTime: '选择时间',\n      startDate: '开始日期',\n      startTime: '开始时间',\n      endDate: '结束日期',\n      endTime: '结束时间',\n      prevYear: '前一年',\n      nextYear: '后一年',\n      prevMonth: '上个月',\n      nextMonth: '下个月',\n      year: '年',\n      month1: '1 月',\n      month2: '2 月',\n      month3: '3 月',\n      month4: '4 月',\n      month5: '5 月',\n      month6: '6 月',\n      month7: '7 月',\n      month8: '8 月',\n      month9: '9 月',\n      month10: '10 月',\n      month11: '11 月',\n      month12: '12 月',\n      // week: '周次',\n      weeks: {\n        sun: '日',\n        mon: '一',\n        tue: '二',\n        wed: '三',\n        thu: '四',\n        fri: '五',\n        sat: '六'\n      },\n      months: {\n        jan: '一月',\n        feb: '二月',\n        mar: '三月',\n        apr: '四月',\n        may: '五月',\n        jun: '六月',\n        jul: '七月',\n        aug: '八月',\n        sep: '九月',\n        oct: '十月',\n        nov: '十一月',\n        dec: '十二月'\n      }\n    },\n    select: {\n      loading: '加载中',\n      noMatch: '无匹配数据',\n      noData: '无数据',\n      placeholder: '请选择'\n    },\n    cascader: {\n      noMatch: '无匹配数据',\n      loading: '加载中',\n      placeholder: '请选择',\n      noData: '暂无数据'\n    },\n    pagination: {\n      goto: '前往',\n      pagesize: '条/页',\n      total: '共 {total} 条',\n      pageClassifier: '页'\n    },\n    messagebox: {\n      title: '提示',\n      confirm: '确定',\n      cancel: '取消',\n      error: '输入的数据不合法!'\n    },\n    upload: {\n      deleteTip: '按 delete 键可删除',\n      delete: '删除',\n      preview: '查看图片',\n      continue: '继续上传'\n    },\n    table: {\n      emptyText: '暂无数据',\n      confirmFilter: '筛选',\n      resetFilter: '重置',\n      clearFilter: '全部',\n      sumText: '合计'\n    },\n    tree: {\n      emptyText: '暂无数据'\n    },\n    transfer: {\n      noMatch: '无匹配数据',\n      noData: '无数据',\n      titles: ['列表 1', '列表 2'],\n      filterPlaceholder: '请输入搜索内容',\n      noCheckedFormat: '共 {total} 项',\n      hasCheckedFormat: '已选 {checked}/{total} 项'\n    },\n    image: {\n      error: '加载失败'\n    },\n    pageHeader: {\n      title: '返回'\n    },\n    popconfirm: {\n      confirmButtonText: '确定',\n      cancelButtonText: '取消'\n    },\n    empty: {\n      description: '暂无数据'\n    }\n  }\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvbG9jYWxlL2xhbmcvemgtQ04uanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsa0JBQWtCO0FBQ2xCLGtCQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsT0FBTztBQUN4QjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQixPQUFPO0FBQ2xDLDZCQUE2QixRQUFRLEVBQUUsT0FBTztBQUM5QyxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2VsZW1lbnQtdWkvbGliL2xvY2FsZS9sYW5nL3poLUNOLmpzPzg4ZjIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5kZWZhdWx0ID0ge1xuICBlbDoge1xuICAgIGNvbG9ycGlja2VyOiB7XG4gICAgICBjb25maXJtOiAn56Gu5a6aJyxcbiAgICAgIGNsZWFyOiAn5riF56m6J1xuICAgIH0sXG4gICAgZGF0ZXBpY2tlcjoge1xuICAgICAgbm93OiAn5q2k5Yi7JyxcbiAgICAgIHRvZGF5OiAn5LuK5aSpJyxcbiAgICAgIGNhbmNlbDogJ+WPlua2iCcsXG4gICAgICBjbGVhcjogJ+a4heepuicsXG4gICAgICBjb25maXJtOiAn56Gu5a6aJyxcbiAgICAgIHNlbGVjdERhdGU6ICfpgInmi6nml6XmnJ8nLFxuICAgICAgc2VsZWN0VGltZTogJ+mAieaLqeaXtumXtCcsXG4gICAgICBzdGFydERhdGU6ICflvIDlp4vml6XmnJ8nLFxuICAgICAgc3RhcnRUaW1lOiAn5byA5aeL5pe26Ze0JyxcbiAgICAgIGVuZERhdGU6ICfnu5PmnZ/ml6XmnJ8nLFxuICAgICAgZW5kVGltZTogJ+e7k+adn+aXtumXtCcsXG4gICAgICBwcmV2WWVhcjogJ+WJjeS4gOW5tCcsXG4gICAgICBuZXh0WWVhcjogJ+WQjuS4gOW5tCcsXG4gICAgICBwcmV2TW9udGg6ICfkuIrkuKrmnIgnLFxuICAgICAgbmV4dE1vbnRoOiAn5LiL5Liq5pyIJyxcbiAgICAgIHllYXI6ICflubQnLFxuICAgICAgbW9udGgxOiAnMSDmnIgnLFxuICAgICAgbW9udGgyOiAnMiDmnIgnLFxuICAgICAgbW9udGgzOiAnMyDmnIgnLFxuICAgICAgbW9udGg0OiAnNCDmnIgnLFxuICAgICAgbW9udGg1OiAnNSDmnIgnLFxuICAgICAgbW9udGg2OiAnNiDmnIgnLFxuICAgICAgbW9udGg3OiAnNyDmnIgnLFxuICAgICAgbW9udGg4OiAnOCDmnIgnLFxuICAgICAgbW9udGg5OiAnOSDmnIgnLFxuICAgICAgbW9udGgxMDogJzEwIOaciCcsXG4gICAgICBtb250aDExOiAnMTEg5pyIJyxcbiAgICAgIG1vbnRoMTI6ICcxMiDmnIgnLFxuICAgICAgLy8gd2VlazogJ+WRqOasoScsXG4gICAgICB3ZWVrczoge1xuICAgICAgICBzdW46ICfml6UnLFxuICAgICAgICBtb246ICfkuIAnLFxuICAgICAgICB0dWU6ICfkuownLFxuICAgICAgICB3ZWQ6ICfkuIknLFxuICAgICAgICB0aHU6ICflm5snLFxuICAgICAgICBmcmk6ICfkupQnLFxuICAgICAgICBzYXQ6ICflha0nXG4gICAgICB9LFxuICAgICAgbW9udGhzOiB7XG4gICAgICAgIGphbjogJ+S4gOaciCcsXG4gICAgICAgIGZlYjogJ+S6jOaciCcsXG4gICAgICAgIG1hcjogJ+S4ieaciCcsXG4gICAgICAgIGFwcjogJ+Wbm+aciCcsXG4gICAgICAgIG1heTogJ+S6lOaciCcsXG4gICAgICAgIGp1bjogJ+WFreaciCcsXG4gICAgICAgIGp1bDogJ+S4g+aciCcsXG4gICAgICAgIGF1ZzogJ+WFq+aciCcsXG4gICAgICAgIHNlcDogJ+S5neaciCcsXG4gICAgICAgIG9jdDogJ+WNgeaciCcsXG4gICAgICAgIG5vdjogJ+WNgeS4gOaciCcsXG4gICAgICAgIGRlYzogJ+WNgeS6jOaciCdcbiAgICAgIH1cbiAgICB9LFxuICAgIHNlbGVjdDoge1xuICAgICAgbG9hZGluZzogJ+WKoOi9veS4rScsXG4gICAgICBub01hdGNoOiAn5peg5Yy56YWN5pWw5o2uJyxcbiAgICAgIG5vRGF0YTogJ+aXoOaVsOaNricsXG4gICAgICBwbGFjZWhvbGRlcjogJ+ivt+mAieaLqSdcbiAgICB9LFxuICAgIGNhc2NhZGVyOiB7XG4gICAgICBub01hdGNoOiAn5peg5Yy56YWN5pWw5o2uJyxcbiAgICAgIGxvYWRpbmc6ICfliqDovb3kuK0nLFxuICAgICAgcGxhY2Vob2xkZXI6ICfor7fpgInmi6knLFxuICAgICAgbm9EYXRhOiAn5pqC5peg5pWw5o2uJ1xuICAgIH0sXG4gICAgcGFnaW5hdGlvbjoge1xuICAgICAgZ290bzogJ+WJjeW+gCcsXG4gICAgICBwYWdlc2l6ZTogJ+adoS/pobUnLFxuICAgICAgdG90YWw6ICflhbEge3RvdGFsfSDmnaEnLFxuICAgICAgcGFnZUNsYXNzaWZpZXI6ICfpobUnXG4gICAgfSxcbiAgICBtZXNzYWdlYm94OiB7XG4gICAgICB0aXRsZTogJ+aPkOekuicsXG4gICAgICBjb25maXJtOiAn56Gu5a6aJyxcbiAgICAgIGNhbmNlbDogJ+WPlua2iCcsXG4gICAgICBlcnJvcjogJ+i+k+WFpeeahOaVsOaNruS4jeWQiOazlSEnXG4gICAgfSxcbiAgICB1cGxvYWQ6IHtcbiAgICAgIGRlbGV0ZVRpcDogJ+aMiSBkZWxldGUg6ZSu5Y+v5Yig6ZmkJyxcbiAgICAgIGRlbGV0ZTogJ+WIoOmZpCcsXG4gICAgICBwcmV2aWV3OiAn5p+l55yL5Zu+54mHJyxcbiAgICAgIGNvbnRpbnVlOiAn57un57ut5LiK5LygJ1xuICAgIH0sXG4gICAgdGFibGU6IHtcbiAgICAgIGVtcHR5VGV4dDogJ+aaguaXoOaVsOaNricsXG4gICAgICBjb25maXJtRmlsdGVyOiAn562b6YCJJyxcbiAgICAgIHJlc2V0RmlsdGVyOiAn6YeN572uJyxcbiAgICAgIGNsZWFyRmlsdGVyOiAn5YWo6YOoJyxcbiAgICAgIHN1bVRleHQ6ICflkIjorqEnXG4gICAgfSxcbiAgICB0cmVlOiB7XG4gICAgICBlbXB0eVRleHQ6ICfmmoLml6DmlbDmja4nXG4gICAgfSxcbiAgICB0cmFuc2Zlcjoge1xuICAgICAgbm9NYXRjaDogJ+aXoOWMuemFjeaVsOaNricsXG4gICAgICBub0RhdGE6ICfml6DmlbDmja4nLFxuICAgICAgdGl0bGVzOiBbJ+WIl+ihqCAxJywgJ+WIl+ihqCAyJ10sXG4gICAgICBmaWx0ZXJQbGFjZWhvbGRlcjogJ+ivt+i+k+WFpeaQnOe0ouWGheWuuScsXG4gICAgICBub0NoZWNrZWRGb3JtYXQ6ICflhbEge3RvdGFsfSDpobknLFxuICAgICAgaGFzQ2hlY2tlZEZvcm1hdDogJ+W3sumAiSB7Y2hlY2tlZH0ve3RvdGFsfSDpobknXG4gICAgfSxcbiAgICBpbWFnZToge1xuICAgICAgZXJyb3I6ICfliqDovb3lpLHotKUnXG4gICAgfSxcbiAgICBwYWdlSGVhZGVyOiB7XG4gICAgICB0aXRsZTogJ+i/lOWbnidcbiAgICB9LFxuICAgIHBvcGNvbmZpcm06IHtcbiAgICAgIGNvbmZpcm1CdXR0b25UZXh0OiAn56Gu5a6aJyxcbiAgICAgIGNhbmNlbEJ1dHRvblRleHQ6ICflj5bmtognXG4gICAgfSxcbiAgICBlbXB0eToge1xuICAgICAgZGVzY3JpcHRpb246ICfmmoLml6DmlbDmja4nXG4gICAgfVxuICB9XG59OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/locale/lang/zh-CN.js\n");

/***/ }),

/***/ "./node_modules/element-ui/lib/mixins/emitter.js":
/*!*******************************************************!*\
  !*** ./node_modules/element-ui/lib/mixins/emitter.js ***!
  \*******************************************************/
/***/ ((__unused_webpack_module, exports) => {

"use strict";
eval("\n\nexports.__esModule = true;\nfunction _broadcast(componentName, eventName, params) {\n  this.$children.forEach(function (child) {\n    var name = child.$options.componentName;\n\n    if (name === componentName) {\n      child.$emit.apply(child, [eventName].concat(params));\n    } else {\n      _broadcast.apply(child, [componentName, eventName].concat([params]));\n    }\n  });\n}\nexports[\"default\"] = {\n  methods: {\n    dispatch: function dispatch(componentName, eventName, params) {\n      var parent = this.$parent || this.$root;\n      var name = parent.$options.componentName;\n\n      while (parent && (!name || name !== componentName)) {\n        parent = parent.$parent;\n\n        if (parent) {\n          name = parent.$options.componentName;\n        }\n      }\n      if (parent) {\n        parent.$emit.apply(parent, [eventName].concat(params));\n      }\n    },\n    broadcast: function broadcast(componentName, eventName, params) {\n      _broadcast.call(this, componentName, eventName, params);\n    }\n  }\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvbWl4aW5zL2VtaXR0ZXIuanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxrQkFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9lbGVtZW50LXVpL2xpYi9taXhpbnMvZW1pdHRlci5qcz9iMTgyIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZnVuY3Rpb24gX2Jyb2FkY2FzdChjb21wb25lbnROYW1lLCBldmVudE5hbWUsIHBhcmFtcykge1xuICB0aGlzLiRjaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgIHZhciBuYW1lID0gY2hpbGQuJG9wdGlvbnMuY29tcG9uZW50TmFtZTtcblxuICAgIGlmIChuYW1lID09PSBjb21wb25lbnROYW1lKSB7XG4gICAgICBjaGlsZC4kZW1pdC5hcHBseShjaGlsZCwgW2V2ZW50TmFtZV0uY29uY2F0KHBhcmFtcykpO1xuICAgIH0gZWxzZSB7XG4gICAgICBfYnJvYWRjYXN0LmFwcGx5KGNoaWxkLCBbY29tcG9uZW50TmFtZSwgZXZlbnROYW1lXS5jb25jYXQoW3BhcmFtc10pKTtcbiAgICB9XG4gIH0pO1xufVxuZXhwb3J0cy5kZWZhdWx0ID0ge1xuICBtZXRob2RzOiB7XG4gICAgZGlzcGF0Y2g6IGZ1bmN0aW9uIGRpc3BhdGNoKGNvbXBvbmVudE5hbWUsIGV2ZW50TmFtZSwgcGFyYW1zKSB7XG4gICAgICB2YXIgcGFyZW50ID0gdGhpcy4kcGFyZW50IHx8IHRoaXMuJHJvb3Q7XG4gICAgICB2YXIgbmFtZSA9IHBhcmVudC4kb3B0aW9ucy5jb21wb25lbnROYW1lO1xuXG4gICAgICB3aGlsZSAocGFyZW50ICYmICghbmFtZSB8fCBuYW1lICE9PSBjb21wb25lbnROYW1lKSkge1xuICAgICAgICBwYXJlbnQgPSBwYXJlbnQuJHBhcmVudDtcblxuICAgICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgICAgbmFtZSA9IHBhcmVudC4kb3B0aW9ucy5jb21wb25lbnROYW1lO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgIHBhcmVudC4kZW1pdC5hcHBseShwYXJlbnQsIFtldmVudE5hbWVdLmNvbmNhdChwYXJhbXMpKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGJyb2FkY2FzdDogZnVuY3Rpb24gYnJvYWRjYXN0KGNvbXBvbmVudE5hbWUsIGV2ZW50TmFtZSwgcGFyYW1zKSB7XG4gICAgICBfYnJvYWRjYXN0LmNhbGwodGhpcywgY29tcG9uZW50TmFtZSwgZXZlbnROYW1lLCBwYXJhbXMpO1xuICAgIH1cbiAgfVxufTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/mixins/emitter.js\n");

/***/ }),

/***/ "./node_modules/element-ui/lib/mixins/focus.js":
/*!*****************************************************!*\
  !*** ./node_modules/element-ui/lib/mixins/focus.js ***!
  \*****************************************************/
/***/ ((__unused_webpack_module, exports) => {

"use strict";
eval("\n\nexports.__esModule = true;\n\nexports[\"default\"] = function (ref) {\n  return {\n    methods: {\n      focus: function focus() {\n        this.$refs[ref].focus();\n      }\n    }\n  };\n};\n\n;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvbWl4aW5zL2ZvY3VzLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLGtCQUFrQjs7QUFFbEIsa0JBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2VsZW1lbnQtdWkvbGliL21peGlucy9mb2N1cy5qcz9kNTY0Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG5leHBvcnRzLmRlZmF1bHQgPSBmdW5jdGlvbiAocmVmKSB7XG4gIHJldHVybiB7XG4gICAgbWV0aG9kczoge1xuICAgICAgZm9jdXM6IGZ1bmN0aW9uIGZvY3VzKCkge1xuICAgICAgICB0aGlzLiRyZWZzW3JlZl0uZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59O1xuXG47Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/mixins/focus.js\n");

/***/ }),

/***/ "./node_modules/element-ui/lib/mixins/locale.js":
/*!******************************************************!*\
  !*** ./node_modules/element-ui/lib/mixins/locale.js ***!
  \******************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";
eval("\n\nexports.__esModule = true;\n\nvar _locale = __webpack_require__(/*! element-ui/lib/locale */ \"./node_modules/element-ui/lib/locale/index.js\");\n\nexports[\"default\"] = {\n  methods: {\n    t: function t() {\n      for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n\n      return _locale.t.apply(this, args);\n    }\n  }\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvbWl4aW5zL2xvY2FsZS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0I7O0FBRWxCLGNBQWMsbUJBQU8sQ0FBQyw0RUFBdUI7O0FBRTdDLGtCQUFlO0FBQ2Y7QUFDQTtBQUNBLHNFQUFzRSxhQUFhO0FBQ25GO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvbWl4aW5zL2xvY2FsZS5qcz8xODE3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxudmFyIF9sb2NhbGUgPSByZXF1aXJlKCdlbGVtZW50LXVpL2xpYi9sb2NhbGUnKTtcblxuZXhwb3J0cy5kZWZhdWx0ID0ge1xuICBtZXRob2RzOiB7XG4gICAgdDogZnVuY3Rpb24gdCgpIHtcbiAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfbG9jYWxlLnQuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfVxuICB9XG59OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/mixins/locale.js\n");

/***/ }),

/***/ "./node_modules/element-ui/lib/mixins/migrating.js":
/*!*********************************************************!*\
  !*** ./node_modules/element-ui/lib/mixins/migrating.js ***!
  \*********************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";
eval("\n\nexports.__esModule = true;\n\nvar _util = __webpack_require__(/*! element-ui/lib/utils/util */ \"./node_modules/element-ui/lib/utils/util.js\");\n\n/**\n * Show migrating guide in browser console.\n *\n * Usage:\n * import Migrating from 'element-ui/src/mixins/migrating';\n *\n * mixins: [Migrating]\n *\n * add getMigratingConfig method for your component.\n *  getMigratingConfig() {\n *    return {\n *      props: {\n *        'allow-no-selection': 'allow-no-selection is removed.',\n *        'selection-mode': 'selection-mode is removed.'\n *      },\n *      events: {\n *        selectionchange: 'selectionchange is renamed to selection-change.'\n *      }\n *    };\n *  },\n */\nexports[\"default\"] = {\n  mounted: function mounted() {\n    if (false) {}\n    if (!this.$vnode) return;\n\n    var _getMigratingConfig = this.getMigratingConfig(),\n        _getMigratingConfig$p = _getMigratingConfig.props,\n        props = _getMigratingConfig$p === undefined ? {} : _getMigratingConfig$p,\n        _getMigratingConfig$e = _getMigratingConfig.events,\n        events = _getMigratingConfig$e === undefined ? {} : _getMigratingConfig$e;\n\n    var _$vnode = this.$vnode,\n        data = _$vnode.data,\n        componentOptions = _$vnode.componentOptions;\n\n    var definedProps = data.attrs || {};\n    var definedEvents = componentOptions.listeners || {};\n\n    for (var propName in definedProps) {\n      propName = (0, _util.kebabCase)(propName); // compatible with camel case\n      if (props[propName]) {\n        console.warn('[Element Migrating][' + this.$options.name + '][Attribute]: ' + props[propName]);\n      }\n    }\n\n    for (var eventName in definedEvents) {\n      eventName = (0, _util.kebabCase)(eventName); // compatible with camel case\n      if (events[eventName]) {\n        console.warn('[Element Migrating][' + this.$options.name + '][Event]: ' + events[eventName]);\n      }\n    }\n  },\n\n  methods: {\n    getMigratingConfig: function getMigratingConfig() {\n      return {\n        props: {},\n        events: {}\n      };\n    }\n  }\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvbWl4aW5zL21pZ3JhdGluZy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0I7O0FBRWxCLFlBQVksbUJBQU8sQ0FBQyw4RUFBMkI7O0FBRS9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxrQkFBZTtBQUNmO0FBQ0EsUUFBUSxLQUFxQyxFQUFFLEVBQU87QUFDdEQ7O0FBRUE7QUFDQTtBQUNBLHlEQUF5RDtBQUN6RDtBQUNBLDBEQUEwRDs7QUFFMUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxpREFBaUQ7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxtREFBbUQ7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2VsZW1lbnQtdWkvbGliL21peGlucy9taWdyYXRpbmcuanM/NGJmYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbnZhciBfdXRpbCA9IHJlcXVpcmUoJ2VsZW1lbnQtdWkvbGliL3V0aWxzL3V0aWwnKTtcblxuLyoqXG4gKiBTaG93IG1pZ3JhdGluZyBndWlkZSBpbiBicm93c2VyIGNvbnNvbGUuXG4gKlxuICogVXNhZ2U6XG4gKiBpbXBvcnQgTWlncmF0aW5nIGZyb20gJ2VsZW1lbnQtdWkvc3JjL21peGlucy9taWdyYXRpbmcnO1xuICpcbiAqIG1peGluczogW01pZ3JhdGluZ11cbiAqXG4gKiBhZGQgZ2V0TWlncmF0aW5nQ29uZmlnIG1ldGhvZCBmb3IgeW91ciBjb21wb25lbnQuXG4gKiAgZ2V0TWlncmF0aW5nQ29uZmlnKCkge1xuICogICAgcmV0dXJuIHtcbiAqICAgICAgcHJvcHM6IHtcbiAqICAgICAgICAnYWxsb3ctbm8tc2VsZWN0aW9uJzogJ2FsbG93LW5vLXNlbGVjdGlvbiBpcyByZW1vdmVkLicsXG4gKiAgICAgICAgJ3NlbGVjdGlvbi1tb2RlJzogJ3NlbGVjdGlvbi1tb2RlIGlzIHJlbW92ZWQuJ1xuICogICAgICB9LFxuICogICAgICBldmVudHM6IHtcbiAqICAgICAgICBzZWxlY3Rpb25jaGFuZ2U6ICdzZWxlY3Rpb25jaGFuZ2UgaXMgcmVuYW1lZCB0byBzZWxlY3Rpb24tY2hhbmdlLidcbiAqICAgICAgfVxuICogICAgfTtcbiAqICB9LFxuICovXG5leHBvcnRzLmRlZmF1bHQgPSB7XG4gIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHJldHVybjtcbiAgICBpZiAoIXRoaXMuJHZub2RlKSByZXR1cm47XG5cbiAgICB2YXIgX2dldE1pZ3JhdGluZ0NvbmZpZyA9IHRoaXMuZ2V0TWlncmF0aW5nQ29uZmlnKCksXG4gICAgICAgIF9nZXRNaWdyYXRpbmdDb25maWckcCA9IF9nZXRNaWdyYXRpbmdDb25maWcucHJvcHMsXG4gICAgICAgIHByb3BzID0gX2dldE1pZ3JhdGluZ0NvbmZpZyRwID09PSB1bmRlZmluZWQgPyB7fSA6IF9nZXRNaWdyYXRpbmdDb25maWckcCxcbiAgICAgICAgX2dldE1pZ3JhdGluZ0NvbmZpZyRlID0gX2dldE1pZ3JhdGluZ0NvbmZpZy5ldmVudHMsXG4gICAgICAgIGV2ZW50cyA9IF9nZXRNaWdyYXRpbmdDb25maWckZSA9PT0gdW5kZWZpbmVkID8ge30gOiBfZ2V0TWlncmF0aW5nQ29uZmlnJGU7XG5cbiAgICB2YXIgXyR2bm9kZSA9IHRoaXMuJHZub2RlLFxuICAgICAgICBkYXRhID0gXyR2bm9kZS5kYXRhLFxuICAgICAgICBjb21wb25lbnRPcHRpb25zID0gXyR2bm9kZS5jb21wb25lbnRPcHRpb25zO1xuXG4gICAgdmFyIGRlZmluZWRQcm9wcyA9IGRhdGEuYXR0cnMgfHwge307XG4gICAgdmFyIGRlZmluZWRFdmVudHMgPSBjb21wb25lbnRPcHRpb25zLmxpc3RlbmVycyB8fCB7fTtcblxuICAgIGZvciAodmFyIHByb3BOYW1lIGluIGRlZmluZWRQcm9wcykge1xuICAgICAgcHJvcE5hbWUgPSAoMCwgX3V0aWwua2ViYWJDYXNlKShwcm9wTmFtZSk7IC8vIGNvbXBhdGlibGUgd2l0aCBjYW1lbCBjYXNlXG4gICAgICBpZiAocHJvcHNbcHJvcE5hbWVdKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignW0VsZW1lbnQgTWlncmF0aW5nXVsnICsgdGhpcy4kb3B0aW9ucy5uYW1lICsgJ11bQXR0cmlidXRlXTogJyArIHByb3BzW3Byb3BOYW1lXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yICh2YXIgZXZlbnROYW1lIGluIGRlZmluZWRFdmVudHMpIHtcbiAgICAgIGV2ZW50TmFtZSA9ICgwLCBfdXRpbC5rZWJhYkNhc2UpKGV2ZW50TmFtZSk7IC8vIGNvbXBhdGlibGUgd2l0aCBjYW1lbCBjYXNlXG4gICAgICBpZiAoZXZlbnRzW2V2ZW50TmFtZV0pIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdbRWxlbWVudCBNaWdyYXRpbmddWycgKyB0aGlzLiRvcHRpb25zLm5hbWUgKyAnXVtFdmVudF06ICcgKyBldmVudHNbZXZlbnROYW1lXSk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRNaWdyYXRpbmdDb25maWc6IGZ1bmN0aW9uIGdldE1pZ3JhdGluZ0NvbmZpZygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHByb3BzOiB7fSxcbiAgICAgICAgZXZlbnRzOiB7fVxuICAgICAgfTtcbiAgICB9XG4gIH1cbn07Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/mixins/migrating.js\n");

/***/ }),

/***/ "./node_modules/element-ui/lib/option.js":
/*!***********************************************!*\
  !*** ./node_modules/element-ui/lib/option.js ***!
  \***********************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

eval("module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __nested_webpack_require_187__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __nested_webpack_require_187__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__nested_webpack_require_187__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__nested_webpack_require_187__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__nested_webpack_require_187__.d = function(exports, name, getter) {\n/******/ \t\tif(!__nested_webpack_require_187__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__nested_webpack_require_187__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__nested_webpack_require_187__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __nested_webpack_require_187__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__nested_webpack_require_187__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __nested_webpack_require_187__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__nested_webpack_require_187__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__nested_webpack_require_187__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__nested_webpack_require_187__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__nested_webpack_require_187__.p = \"/dist/\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __nested_webpack_require_187__(__nested_webpack_require_187__.s = 54);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_3672__) {\n\n\"use strict\";\n/* harmony export (binding) */ __nested_webpack_require_3672__.d(__nested_webpack_exports__, \"a\", function() { return normalizeComponent; });\n/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nfunction normalizeComponent (\n  scriptExports,\n  render,\n  staticRenderFns,\n  functionalTemplate,\n  injectStyles,\n  scopeId,\n  moduleIdentifier, /* server only */\n  shadowMode /* vue-cli only */\n) {\n  // Vue.extend constructor export interop\n  var options = typeof scriptExports === 'function'\n    ? scriptExports.options\n    : scriptExports\n\n  // render functions\n  if (render) {\n    options.render = render\n    options.staticRenderFns = staticRenderFns\n    options._compiled = true\n  }\n\n  // functional template\n  if (functionalTemplate) {\n    options.functional = true\n  }\n\n  // scopedId\n  if (scopeId) {\n    options._scopeId = 'data-v-' + scopeId\n  }\n\n  var hook\n  if (moduleIdentifier) { // server build\n    hook = function (context) {\n      // 2.3 injection\n      context =\n        context || // cached call\n        (this.$vnode && this.$vnode.ssrContext) || // stateful\n        (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n      // 2.2 with runInNewContext: true\n      if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n        context = __VUE_SSR_CONTEXT__\n      }\n      // inject component styles\n      if (injectStyles) {\n        injectStyles.call(this, context)\n      }\n      // register component module identifier for async chunk inferrence\n      if (context && context._registeredComponents) {\n        context._registeredComponents.add(moduleIdentifier)\n      }\n    }\n    // used by ssr in case component is cached and beforeCreate\n    // never gets called\n    options._ssrRegister = hook\n  } else if (injectStyles) {\n    hook = shadowMode\n      ? function () { injectStyles.call(this, this.$root.$options.shadowRoot) }\n      : injectStyles\n  }\n\n  if (hook) {\n    if (options.functional) {\n      // for template-only hot-reload because in that case the render fn doesn't\n      // go through the normalizer\n      options._injectStyles = hook\n      // register for functioal component in vue file\n      var originalRender = options.render\n      options.render = function renderWithStyleInjection (h, context) {\n        hook.call(context)\n        return originalRender(h, context)\n      }\n    } else {\n      // inject component registration as beforeCreate hook\n      var existing = options.beforeCreate\n      options.beforeCreate = existing\n        ? [].concat(existing, hook)\n        : [hook]\n    }\n  }\n\n  return {\n    exports: scriptExports,\n    options: options\n  }\n}\n\n\n/***/ }),\n\n/***/ 3:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/util */ \"./node_modules/element-ui/lib/utils/util.js\");\n\n/***/ }),\n\n/***/ 33:\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_6687__) {\n\n\"use strict\";\n\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/select/src/option.vue?vue&type=template&id=7a44c642&\nvar render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"li\",\n    {\n      directives: [\n        {\n          name: \"show\",\n          rawName: \"v-show\",\n          value: _vm.visible,\n          expression: \"visible\"\n        }\n      ],\n      staticClass: \"el-select-dropdown__item\",\n      class: {\n        selected: _vm.itemSelected,\n        \"is-disabled\": _vm.disabled || _vm.groupDisabled || _vm.limitReached,\n        hover: _vm.hover\n      },\n      on: {\n        mouseenter: _vm.hoverItem,\n        click: function($event) {\n          $event.stopPropagation()\n          return _vm.selectOptionClick($event)\n        }\n      }\n    },\n    [_vm._t(\"default\", [_c(\"span\", [_vm._v(_vm._s(_vm.currentLabel))])])],\n    2\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/select/src/option.vue?vue&type=template&id=7a44c642&\n\n// EXTERNAL MODULE: external \"element-ui/lib/mixins/emitter\"\nvar emitter_ = __nested_webpack_require_6687__(4);\nvar emitter_default = /*#__PURE__*/__nested_webpack_require_6687__.n(emitter_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/util\"\nvar util_ = __nested_webpack_require_6687__(3);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/select/src/option.vue?vue&type=script&lang=js&\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n/* harmony default export */ var optionvue_type_script_lang_js_ = ({\n  mixins: [emitter_default.a],\n\n  name: 'ElOption',\n\n  componentName: 'ElOption',\n\n  inject: ['select'],\n\n  props: {\n    value: {\n      required: true\n    },\n    label: [String, Number],\n    created: Boolean,\n    disabled: {\n      type: Boolean,\n      default: false\n    }\n  },\n\n  data: function data() {\n    return {\n      index: -1,\n      groupDisabled: false,\n      visible: true,\n      hitState: false,\n      hover: false\n    };\n  },\n\n\n  computed: {\n    isObject: function isObject() {\n      return Object.prototype.toString.call(this.value).toLowerCase() === '[object object]';\n    },\n    currentLabel: function currentLabel() {\n      return this.label || (this.isObject ? '' : this.value);\n    },\n    currentValue: function currentValue() {\n      return this.value || this.label || '';\n    },\n    itemSelected: function itemSelected() {\n      if (!this.select.multiple) {\n        return this.isEqual(this.value, this.select.value);\n      } else {\n        return this.contains(this.select.value, this.value);\n      }\n    },\n    limitReached: function limitReached() {\n      if (this.select.multiple) {\n        return !this.itemSelected && (this.select.value || []).length >= this.select.multipleLimit && this.select.multipleLimit > 0;\n      } else {\n        return false;\n      }\n    }\n  },\n\n  watch: {\n    currentLabel: function currentLabel() {\n      if (!this.created && !this.select.remote) this.dispatch('ElSelect', 'setSelected');\n    },\n    value: function value(val, oldVal) {\n      var _select = this.select,\n          remote = _select.remote,\n          valueKey = _select.valueKey;\n\n      if (!this.created && !remote) {\n        if (valueKey && (typeof val === 'undefined' ? 'undefined' : _typeof(val)) === 'object' && (typeof oldVal === 'undefined' ? 'undefined' : _typeof(oldVal)) === 'object' && val[valueKey] === oldVal[valueKey]) {\n          return;\n        }\n        this.dispatch('ElSelect', 'setSelected');\n      }\n    }\n  },\n\n  methods: {\n    isEqual: function isEqual(a, b) {\n      if (!this.isObject) {\n        return a === b;\n      } else {\n        var valueKey = this.select.valueKey;\n        return Object(util_[\"getValueByPath\"])(a, valueKey) === Object(util_[\"getValueByPath\"])(b, valueKey);\n      }\n    },\n    contains: function contains() {\n      var arr = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n      var target = arguments[1];\n\n      if (!this.isObject) {\n        return arr && arr.indexOf(target) > -1;\n      } else {\n        var valueKey = this.select.valueKey;\n        return arr && arr.some(function (item) {\n          return Object(util_[\"getValueByPath\"])(item, valueKey) === Object(util_[\"getValueByPath\"])(target, valueKey);\n        });\n      }\n    },\n    handleGroupDisabled: function handleGroupDisabled(val) {\n      this.groupDisabled = val;\n    },\n    hoverItem: function hoverItem() {\n      if (!this.disabled && !this.groupDisabled) {\n        this.select.hoverIndex = this.select.options.indexOf(this);\n      }\n    },\n    selectOptionClick: function selectOptionClick() {\n      if (this.disabled !== true && this.groupDisabled !== true) {\n        this.dispatch('ElSelect', 'handleOptionClick', [this, true]);\n      }\n    },\n    queryChange: function queryChange(query) {\n      this.visible = new RegExp(Object(util_[\"escapeRegexpString\"])(query), 'i').test(this.currentLabel) || this.created;\n      if (!this.visible) {\n        this.select.filteredOptionsCount--;\n      }\n    }\n  },\n\n  created: function created() {\n    this.select.options.push(this);\n    this.select.cachedOptions.push(this);\n    this.select.optionsCount++;\n    this.select.filteredOptionsCount++;\n\n    this.$on('queryChange', this.queryChange);\n    this.$on('handleGroupDisabled', this.handleGroupDisabled);\n  },\n  beforeDestroy: function beforeDestroy() {\n    var _select2 = this.select,\n        selected = _select2.selected,\n        multiple = _select2.multiple;\n\n    var selectedOptions = multiple ? selected : [selected];\n    var index = this.select.cachedOptions.indexOf(this);\n    var selectedIndex = selectedOptions.indexOf(this);\n\n    // if option is not selected, remove it from cache\n    if (index > -1 && selectedIndex < 0) {\n      this.select.cachedOptions.splice(index, 1);\n    }\n    this.select.onOptionDestroy(this.select.options.indexOf(this));\n  }\n});\n// CONCATENATED MODULE: ./packages/select/src/option.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_optionvue_type_script_lang_js_ = (optionvue_type_script_lang_js_); \n// EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js\nvar componentNormalizer = __nested_webpack_require_6687__(0);\n\n// CONCATENATED MODULE: ./packages/select/src/option.vue\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(componentNormalizer[\"a\" /* default */])(\n  src_optionvue_type_script_lang_js_,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"packages/select/src/option.vue\"\n/* harmony default export */ var src_option = __nested_webpack_exports__[\"a\"] = (component.exports);\n\n/***/ }),\n\n/***/ 4:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/mixins/emitter */ \"./node_modules/element-ui/lib/mixins/emitter.js\");\n\n/***/ }),\n\n/***/ 54:\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_13963__) {\n\n\"use strict\";\n__nested_webpack_require_13963__.r(__nested_webpack_exports__);\n/* harmony import */ var _select_src_option__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_13963__(33);\n\n\n/* istanbul ignore next */\n_select_src_option__WEBPACK_IMPORTED_MODULE_0__[/* default */ \"a\"].install = function (Vue) {\n  Vue.component(_select_src_option__WEBPACK_IMPORTED_MODULE_0__[/* default */ \"a\"].name, _select_src_option__WEBPACK_IMPORTED_MODULE_0__[/* default */ \"a\"]);\n};\n\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (_select_src_option__WEBPACK_IMPORTED_MODULE_0__[/* default */ \"a\"]);\n\n/***/ })\n\n/******/ });//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvb3B0aW9uLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsOEJBQThCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLDhCQUFtQjtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBFQUEwRSw4QkFBbUI7QUFDN0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLDhCQUFtQjtBQUM3QjtBQUNBO0FBQ0EsVUFBVSw4QkFBbUI7QUFDN0I7QUFDQTtBQUNBLFVBQVUsOEJBQW1CO0FBQzdCLGVBQWUsOEJBQW1CO0FBQ2xDLG1EQUFtRCwrQkFBK0I7QUFDbEY7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLDhCQUFtQjtBQUM3QjtBQUNBLGlFQUFpRSxpQkFBaUI7QUFDbEY7QUFDQSwwREFBMEQsYUFBYTtBQUN2RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsOEJBQW1CO0FBQzdCLGdDQUFnQyw4QkFBbUI7QUFDbkQ7QUFDQTtBQUNBO0FBQ0EsV0FBVyw4QkFBbUI7QUFDOUIsa0RBQWtELGdDQUFnQztBQUNsRiwwRUFBMEUsOEJBQW1CLDRCQUE0QixvQkFBb0I7QUFDN0k7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLDhCQUFtQjtBQUM3QjtBQUNBLG9DQUFvQyw0QkFBNEI7QUFDaEUsMENBQTBDO0FBQzFDLFdBQVcsOEJBQW1CO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSw4QkFBbUIsa0NBQWtDO0FBQy9EO0FBQ0E7QUFDQSxVQUFVLDhCQUFtQjtBQUM3QjtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsOEJBQW1CLENBQUMsOEJBQW1CO0FBQ3hELFVBQVU7QUFDVjtBQUNBOztBQUVBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLCtCQUFtQjs7QUFFaEU7QUFDQSwrQkFBK0IsK0JBQW1CLEdBQUcsMEJBQW1CLG9CQUFvQiw0QkFBNEI7QUFDeEg7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0Esc0JBQXNCO0FBQ3RCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQSxPQUFPOztBQUVQO0FBQ0E7O0FBRUEsaUJBQWlCLG1CQUFPLENBQUMsOEVBQTJCOztBQUVwRCxPQUFPOztBQUVQO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLCtCQUFtQjs7QUFFaEU7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQSxlQUFlLCtCQUFtQjtBQUNsQyxtQ0FBbUMsK0JBQW1COztBQUV0RDtBQUNBLFlBQVksK0JBQW1COztBQUUvQjtBQUNBLHFHQUFxRyxxQkFBcUIsbUJBQW1COztBQUU3STtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQUtBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsK0JBQW1COztBQUU3Qzs7Ozs7O0FBTUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLEtBQUssRUFBRSxZQUFZO0FBQ3ZCO0FBQ0EsOENBQThDLDBCQUFtQjs7QUFFakUsT0FBTzs7QUFFUDtBQUNBOztBQUVBLGlCQUFpQixtQkFBTyxDQUFDLHNGQUErQjs7QUFFeEQsT0FBTzs7QUFFUDtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxnQ0FBbUI7O0FBRWhFO0FBQ0EsZ0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLDJFQUEyRSxnQ0FBbUI7OztBQUc5RjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw2QkFBNkIsMEJBQW1COztBQUVoRCxPQUFPOztBQUVQLFVBQVUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvb3B0aW9uLmpzPzAxOGMiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPVxuLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcFxuLyoqKioqKi8gXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuLyoqKioqKi8gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuLyoqKioqKi8gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4vKioqKioqLyBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbi8qKioqKiovIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4vKioqKioqLyBcdFx0XHRpOiBtb2R1bGVJZCxcbi8qKioqKiovIFx0XHRcdGw6IGZhbHNlLFxuLyoqKioqKi8gXHRcdFx0ZXhwb3J0czoge31cbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbi8qKioqKiovIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuLyoqKioqKi8gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbi8qKioqKiovIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4vKioqKioqLyBcdH1cbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbi8qKioqKiovIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbi8qKioqKiovIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbi8qKioqKiovIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4vKioqKioqLyBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4vKioqKioqLyBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuLyoqKioqKi8gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4vKioqKioqLyBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuLyoqKioqKi8gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4vKioqKioqLyBcdFx0cmV0dXJuIG5zO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4vKioqKioqLyBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4vKioqKioqLyBcdFx0cmV0dXJuIGdldHRlcjtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIi9kaXN0L1wiO1xuLyoqKioqKi9cbi8qKioqKiovXG4vKioqKioqLyBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLyoqKioqKi8gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSA1NCk7XG4vKioqKioqLyB9KVxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKioqKiovICh7XG5cbi8qKiovIDA6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImFcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBub3JtYWxpemVDb21wb25lbnQ7IH0pO1xuLyogZ2xvYmFscyBfX1ZVRV9TU1JfQ09OVEVYVF9fICovXG5cbi8vIElNUE9SVEFOVDogRG8gTk9UIHVzZSBFUzIwMTUgZmVhdHVyZXMgaW4gdGhpcyBmaWxlIChleGNlcHQgZm9yIG1vZHVsZXMpLlxuLy8gVGhpcyBtb2R1bGUgaXMgYSBydW50aW1lIHV0aWxpdHkgZm9yIGNsZWFuZXIgY29tcG9uZW50IG1vZHVsZSBvdXRwdXQgYW5kIHdpbGxcbi8vIGJlIGluY2x1ZGVkIGluIHRoZSBmaW5hbCB3ZWJwYWNrIHVzZXIgYnVuZGxlLlxuXG5mdW5jdGlvbiBub3JtYWxpemVDb21wb25lbnQgKFxuICBzY3JpcHRFeHBvcnRzLFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZnVuY3Rpb25hbFRlbXBsYXRlLFxuICBpbmplY3RTdHlsZXMsXG4gIHNjb3BlSWQsXG4gIG1vZHVsZUlkZW50aWZpZXIsIC8qIHNlcnZlciBvbmx5ICovXG4gIHNoYWRvd01vZGUgLyogdnVlLWNsaSBvbmx5ICovXG4pIHtcbiAgLy8gVnVlLmV4dGVuZCBjb25zdHJ1Y3RvciBleHBvcnQgaW50ZXJvcFxuICB2YXIgb3B0aW9ucyA9IHR5cGVvZiBzY3JpcHRFeHBvcnRzID09PSAnZnVuY3Rpb24nXG4gICAgPyBzY3JpcHRFeHBvcnRzLm9wdGlvbnNcbiAgICA6IHNjcmlwdEV4cG9ydHNcblxuICAvLyByZW5kZXIgZnVuY3Rpb25zXG4gIGlmIChyZW5kZXIpIHtcbiAgICBvcHRpb25zLnJlbmRlciA9IHJlbmRlclxuICAgIG9wdGlvbnMuc3RhdGljUmVuZGVyRm5zID0gc3RhdGljUmVuZGVyRm5zXG4gICAgb3B0aW9ucy5fY29tcGlsZWQgPSB0cnVlXG4gIH1cblxuICAvLyBmdW5jdGlvbmFsIHRlbXBsYXRlXG4gIGlmIChmdW5jdGlvbmFsVGVtcGxhdGUpIHtcbiAgICBvcHRpb25zLmZ1bmN0aW9uYWwgPSB0cnVlXG4gIH1cblxuICAvLyBzY29wZWRJZFxuICBpZiAoc2NvcGVJZCkge1xuICAgIG9wdGlvbnMuX3Njb3BlSWQgPSAnZGF0YS12LScgKyBzY29wZUlkXG4gIH1cblxuICB2YXIgaG9va1xuICBpZiAobW9kdWxlSWRlbnRpZmllcikgeyAvLyBzZXJ2ZXIgYnVpbGRcbiAgICBob29rID0gZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICAgIC8vIDIuMyBpbmplY3Rpb25cbiAgICAgIGNvbnRleHQgPVxuICAgICAgICBjb250ZXh0IHx8IC8vIGNhY2hlZCBjYWxsXG4gICAgICAgICh0aGlzLiR2bm9kZSAmJiB0aGlzLiR2bm9kZS5zc3JDb250ZXh0KSB8fCAvLyBzdGF0ZWZ1bFxuICAgICAgICAodGhpcy5wYXJlbnQgJiYgdGhpcy5wYXJlbnQuJHZub2RlICYmIHRoaXMucGFyZW50LiR2bm9kZS5zc3JDb250ZXh0KSAvLyBmdW5jdGlvbmFsXG4gICAgICAvLyAyLjIgd2l0aCBydW5Jbk5ld0NvbnRleHQ6IHRydWVcbiAgICAgIGlmICghY29udGV4dCAmJiB0eXBlb2YgX19WVUVfU1NSX0NPTlRFWFRfXyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgY29udGV4dCA9IF9fVlVFX1NTUl9DT05URVhUX19cbiAgICAgIH1cbiAgICAgIC8vIGluamVjdCBjb21wb25lbnQgc3R5bGVzXG4gICAgICBpZiAoaW5qZWN0U3R5bGVzKSB7XG4gICAgICAgIGluamVjdFN0eWxlcy5jYWxsKHRoaXMsIGNvbnRleHQpXG4gICAgICB9XG4gICAgICAvLyByZWdpc3RlciBjb21wb25lbnQgbW9kdWxlIGlkZW50aWZpZXIgZm9yIGFzeW5jIGNodW5rIGluZmVycmVuY2VcbiAgICAgIGlmIChjb250ZXh0ICYmIGNvbnRleHQuX3JlZ2lzdGVyZWRDb21wb25lbnRzKSB7XG4gICAgICAgIGNvbnRleHQuX3JlZ2lzdGVyZWRDb21wb25lbnRzLmFkZChtb2R1bGVJZGVudGlmaWVyKVxuICAgICAgfVxuICAgIH1cbiAgICAvLyB1c2VkIGJ5IHNzciBpbiBjYXNlIGNvbXBvbmVudCBpcyBjYWNoZWQgYW5kIGJlZm9yZUNyZWF0ZVxuICAgIC8vIG5ldmVyIGdldHMgY2FsbGVkXG4gICAgb3B0aW9ucy5fc3NyUmVnaXN0ZXIgPSBob29rXG4gIH0gZWxzZSBpZiAoaW5qZWN0U3R5bGVzKSB7XG4gICAgaG9vayA9IHNoYWRvd01vZGVcbiAgICAgID8gZnVuY3Rpb24gKCkgeyBpbmplY3RTdHlsZXMuY2FsbCh0aGlzLCB0aGlzLiRyb290LiRvcHRpb25zLnNoYWRvd1Jvb3QpIH1cbiAgICAgIDogaW5qZWN0U3R5bGVzXG4gIH1cblxuICBpZiAoaG9vaykge1xuICAgIGlmIChvcHRpb25zLmZ1bmN0aW9uYWwpIHtcbiAgICAgIC8vIGZvciB0ZW1wbGF0ZS1vbmx5IGhvdC1yZWxvYWQgYmVjYXVzZSBpbiB0aGF0IGNhc2UgdGhlIHJlbmRlciBmbiBkb2Vzbid0XG4gICAgICAvLyBnbyB0aHJvdWdoIHRoZSBub3JtYWxpemVyXG4gICAgICBvcHRpb25zLl9pbmplY3RTdHlsZXMgPSBob29rXG4gICAgICAvLyByZWdpc3RlciBmb3IgZnVuY3Rpb2FsIGNvbXBvbmVudCBpbiB2dWUgZmlsZVxuICAgICAgdmFyIG9yaWdpbmFsUmVuZGVyID0gb3B0aW9ucy5yZW5kZXJcbiAgICAgIG9wdGlvbnMucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyV2l0aFN0eWxlSW5qZWN0aW9uIChoLCBjb250ZXh0KSB7XG4gICAgICAgIGhvb2suY2FsbChjb250ZXh0KVxuICAgICAgICByZXR1cm4gb3JpZ2luYWxSZW5kZXIoaCwgY29udGV4dClcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaW5qZWN0IGNvbXBvbmVudCByZWdpc3RyYXRpb24gYXMgYmVmb3JlQ3JlYXRlIGhvb2tcbiAgICAgIHZhciBleGlzdGluZyA9IG9wdGlvbnMuYmVmb3JlQ3JlYXRlXG4gICAgICBvcHRpb25zLmJlZm9yZUNyZWF0ZSA9IGV4aXN0aW5nXG4gICAgICAgID8gW10uY29uY2F0KGV4aXN0aW5nLCBob29rKVxuICAgICAgICA6IFtob29rXVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZXhwb3J0czogc2NyaXB0RXhwb3J0cyxcbiAgICBvcHRpb25zOiBvcHRpb25zXG4gIH1cbn1cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gMzpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlbWVudC11aS9saWIvdXRpbHMvdXRpbFwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDMzOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9zZWxlY3Qvc3JjL29wdGlvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9N2E0NGM2NDImXG52YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwibGlcIixcbiAgICB7XG4gICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgIHZhbHVlOiBfdm0udmlzaWJsZSxcbiAgICAgICAgICBleHByZXNzaW9uOiBcInZpc2libGVcIlxuICAgICAgICB9XG4gICAgICBdLFxuICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtc2VsZWN0LWRyb3Bkb3duX19pdGVtXCIsXG4gICAgICBjbGFzczoge1xuICAgICAgICBzZWxlY3RlZDogX3ZtLml0ZW1TZWxlY3RlZCxcbiAgICAgICAgXCJpcy1kaXNhYmxlZFwiOiBfdm0uZGlzYWJsZWQgfHwgX3ZtLmdyb3VwRGlzYWJsZWQgfHwgX3ZtLmxpbWl0UmVhY2hlZCxcbiAgICAgICAgaG92ZXI6IF92bS5ob3ZlclxuICAgICAgfSxcbiAgICAgIG9uOiB7XG4gICAgICAgIG1vdXNlZW50ZXI6IF92bS5ob3Zlckl0ZW0sXG4gICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICByZXR1cm4gX3ZtLnNlbGVjdE9wdGlvbkNsaWNrKCRldmVudClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgW192bS5fdChcImRlZmF1bHRcIiwgW19jKFwic3BhblwiLCBbX3ZtLl92KF92bS5fcyhfdm0uY3VycmVudExhYmVsKSldKV0pXSxcbiAgICAyXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9zZWxlY3Qvc3JjL29wdGlvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9N2E0NGM2NDImXG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJlbGVtZW50LXVpL2xpYi9taXhpbnMvZW1pdHRlclwiXG52YXIgZW1pdHRlcl8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xudmFyIGVtaXR0ZXJfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oZW1pdHRlcl8pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiZWxlbWVudC11aS9saWIvdXRpbHMvdXRpbFwiXG52YXIgdXRpbF8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9zZWxlY3Qvc3JjL29wdGlvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG52YXIgX3R5cGVvZiA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiID8gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfSA6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07XG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5cblxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBvcHRpb252dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBtaXhpbnM6IFtlbWl0dGVyX2RlZmF1bHQuYV0sXG5cbiAgbmFtZTogJ0VsT3B0aW9uJyxcblxuICBjb21wb25lbnROYW1lOiAnRWxPcHRpb24nLFxuXG4gIGluamVjdDogWydzZWxlY3QnXSxcblxuICBwcm9wczoge1xuICAgIHZhbHVlOiB7XG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAgbGFiZWw6IFtTdHJpbmcsIE51bWJlcl0sXG4gICAgY3JlYXRlZDogQm9vbGVhbixcbiAgICBkaXNhYmxlZDoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGluZGV4OiAtMSxcbiAgICAgIGdyb3VwRGlzYWJsZWQ6IGZhbHNlLFxuICAgICAgdmlzaWJsZTogdHJ1ZSxcbiAgICAgIGhpdFN0YXRlOiBmYWxzZSxcbiAgICAgIGhvdmVyOiBmYWxzZVxuICAgIH07XG4gIH0sXG5cblxuICBjb21wdXRlZDoge1xuICAgIGlzT2JqZWN0OiBmdW5jdGlvbiBpc09iamVjdCgpIHtcbiAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodGhpcy52YWx1ZSkudG9Mb3dlckNhc2UoKSA9PT0gJ1tvYmplY3Qgb2JqZWN0XSc7XG4gICAgfSxcbiAgICBjdXJyZW50TGFiZWw6IGZ1bmN0aW9uIGN1cnJlbnRMYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmxhYmVsIHx8ICh0aGlzLmlzT2JqZWN0ID8gJycgOiB0aGlzLnZhbHVlKTtcbiAgICB9LFxuICAgIGN1cnJlbnRWYWx1ZTogZnVuY3Rpb24gY3VycmVudFZhbHVlKCkge1xuICAgICAgcmV0dXJuIHRoaXMudmFsdWUgfHwgdGhpcy5sYWJlbCB8fCAnJztcbiAgICB9LFxuICAgIGl0ZW1TZWxlY3RlZDogZnVuY3Rpb24gaXRlbVNlbGVjdGVkKCkge1xuICAgICAgaWYgKCF0aGlzLnNlbGVjdC5tdWx0aXBsZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0VxdWFsKHRoaXMudmFsdWUsIHRoaXMuc2VsZWN0LnZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5zKHRoaXMuc2VsZWN0LnZhbHVlLCB0aGlzLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGxpbWl0UmVhY2hlZDogZnVuY3Rpb24gbGltaXRSZWFjaGVkKCkge1xuICAgICAgaWYgKHRoaXMuc2VsZWN0Lm11bHRpcGxlKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5pdGVtU2VsZWN0ZWQgJiYgKHRoaXMuc2VsZWN0LnZhbHVlIHx8IFtdKS5sZW5ndGggPj0gdGhpcy5zZWxlY3QubXVsdGlwbGVMaW1pdCAmJiB0aGlzLnNlbGVjdC5tdWx0aXBsZUxpbWl0ID4gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBjdXJyZW50TGFiZWw6IGZ1bmN0aW9uIGN1cnJlbnRMYWJlbCgpIHtcbiAgICAgIGlmICghdGhpcy5jcmVhdGVkICYmICF0aGlzLnNlbGVjdC5yZW1vdGUpIHRoaXMuZGlzcGF0Y2goJ0VsU2VsZWN0JywgJ3NldFNlbGVjdGVkJyk7XG4gICAgfSxcbiAgICB2YWx1ZTogZnVuY3Rpb24gdmFsdWUodmFsLCBvbGRWYWwpIHtcbiAgICAgIHZhciBfc2VsZWN0ID0gdGhpcy5zZWxlY3QsXG4gICAgICAgICAgcmVtb3RlID0gX3NlbGVjdC5yZW1vdGUsXG4gICAgICAgICAgdmFsdWVLZXkgPSBfc2VsZWN0LnZhbHVlS2V5O1xuXG4gICAgICBpZiAoIXRoaXMuY3JlYXRlZCAmJiAhcmVtb3RlKSB7XG4gICAgICAgIGlmICh2YWx1ZUtleSAmJiAodHlwZW9mIHZhbCA9PT0gJ3VuZGVmaW5lZCcgPyAndW5kZWZpbmVkJyA6IF90eXBlb2YodmFsKSkgPT09ICdvYmplY3QnICYmICh0eXBlb2Ygb2xkVmFsID09PSAndW5kZWZpbmVkJyA/ICd1bmRlZmluZWQnIDogX3R5cGVvZihvbGRWYWwpKSA9PT0gJ29iamVjdCcgJiYgdmFsW3ZhbHVlS2V5XSA9PT0gb2xkVmFsW3ZhbHVlS2V5XSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRpc3BhdGNoKCdFbFNlbGVjdCcsICdzZXRTZWxlY3RlZCcpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgaXNFcXVhbDogZnVuY3Rpb24gaXNFcXVhbChhLCBiKSB7XG4gICAgICBpZiAoIXRoaXMuaXNPYmplY3QpIHtcbiAgICAgICAgcmV0dXJuIGEgPT09IGI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgdmFsdWVLZXkgPSB0aGlzLnNlbGVjdC52YWx1ZUtleTtcbiAgICAgICAgcmV0dXJuIE9iamVjdCh1dGlsX1tcImdldFZhbHVlQnlQYXRoXCJdKShhLCB2YWx1ZUtleSkgPT09IE9iamVjdCh1dGlsX1tcImdldFZhbHVlQnlQYXRoXCJdKShiLCB2YWx1ZUtleSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBjb250YWluczogZnVuY3Rpb24gY29udGFpbnMoKSB7XG4gICAgICB2YXIgYXJyID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBbXTtcbiAgICAgIHZhciB0YXJnZXQgPSBhcmd1bWVudHNbMV07XG5cbiAgICAgIGlmICghdGhpcy5pc09iamVjdCkge1xuICAgICAgICByZXR1cm4gYXJyICYmIGFyci5pbmRleE9mKHRhcmdldCkgPiAtMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciB2YWx1ZUtleSA9IHRoaXMuc2VsZWN0LnZhbHVlS2V5O1xuICAgICAgICByZXR1cm4gYXJyICYmIGFyci5zb21lKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgcmV0dXJuIE9iamVjdCh1dGlsX1tcImdldFZhbHVlQnlQYXRoXCJdKShpdGVtLCB2YWx1ZUtleSkgPT09IE9iamVjdCh1dGlsX1tcImdldFZhbHVlQnlQYXRoXCJdKSh0YXJnZXQsIHZhbHVlS2V5KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBoYW5kbGVHcm91cERpc2FibGVkOiBmdW5jdGlvbiBoYW5kbGVHcm91cERpc2FibGVkKHZhbCkge1xuICAgICAgdGhpcy5ncm91cERpc2FibGVkID0gdmFsO1xuICAgIH0sXG4gICAgaG92ZXJJdGVtOiBmdW5jdGlvbiBob3Zlckl0ZW0oKSB7XG4gICAgICBpZiAoIXRoaXMuZGlzYWJsZWQgJiYgIXRoaXMuZ3JvdXBEaXNhYmxlZCkge1xuICAgICAgICB0aGlzLnNlbGVjdC5ob3ZlckluZGV4ID0gdGhpcy5zZWxlY3Qub3B0aW9ucy5pbmRleE9mKHRoaXMpO1xuICAgICAgfVxuICAgIH0sXG4gICAgc2VsZWN0T3B0aW9uQ2xpY2s6IGZ1bmN0aW9uIHNlbGVjdE9wdGlvbkNsaWNrKCkge1xuICAgICAgaWYgKHRoaXMuZGlzYWJsZWQgIT09IHRydWUgJiYgdGhpcy5ncm91cERpc2FibGVkICE9PSB0cnVlKSB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2goJ0VsU2VsZWN0JywgJ2hhbmRsZU9wdGlvbkNsaWNrJywgW3RoaXMsIHRydWVdKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHF1ZXJ5Q2hhbmdlOiBmdW5jdGlvbiBxdWVyeUNoYW5nZShxdWVyeSkge1xuICAgICAgdGhpcy52aXNpYmxlID0gbmV3IFJlZ0V4cChPYmplY3QodXRpbF9bXCJlc2NhcGVSZWdleHBTdHJpbmdcIl0pKHF1ZXJ5KSwgJ2knKS50ZXN0KHRoaXMuY3VycmVudExhYmVsKSB8fCB0aGlzLmNyZWF0ZWQ7XG4gICAgICBpZiAoIXRoaXMudmlzaWJsZSkge1xuICAgICAgICB0aGlzLnNlbGVjdC5maWx0ZXJlZE9wdGlvbnNDb3VudC0tO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkOiBmdW5jdGlvbiBjcmVhdGVkKCkge1xuICAgIHRoaXMuc2VsZWN0Lm9wdGlvbnMucHVzaCh0aGlzKTtcbiAgICB0aGlzLnNlbGVjdC5jYWNoZWRPcHRpb25zLnB1c2godGhpcyk7XG4gICAgdGhpcy5zZWxlY3Qub3B0aW9uc0NvdW50Kys7XG4gICAgdGhpcy5zZWxlY3QuZmlsdGVyZWRPcHRpb25zQ291bnQrKztcblxuICAgIHRoaXMuJG9uKCdxdWVyeUNoYW5nZScsIHRoaXMucXVlcnlDaGFuZ2UpO1xuICAgIHRoaXMuJG9uKCdoYW5kbGVHcm91cERpc2FibGVkJywgdGhpcy5oYW5kbGVHcm91cERpc2FibGVkKTtcbiAgfSxcbiAgYmVmb3JlRGVzdHJveTogZnVuY3Rpb24gYmVmb3JlRGVzdHJveSgpIHtcbiAgICB2YXIgX3NlbGVjdDIgPSB0aGlzLnNlbGVjdCxcbiAgICAgICAgc2VsZWN0ZWQgPSBfc2VsZWN0Mi5zZWxlY3RlZCxcbiAgICAgICAgbXVsdGlwbGUgPSBfc2VsZWN0Mi5tdWx0aXBsZTtcblxuICAgIHZhciBzZWxlY3RlZE9wdGlvbnMgPSBtdWx0aXBsZSA/IHNlbGVjdGVkIDogW3NlbGVjdGVkXTtcbiAgICB2YXIgaW5kZXggPSB0aGlzLnNlbGVjdC5jYWNoZWRPcHRpb25zLmluZGV4T2YodGhpcyk7XG4gICAgdmFyIHNlbGVjdGVkSW5kZXggPSBzZWxlY3RlZE9wdGlvbnMuaW5kZXhPZih0aGlzKTtcblxuICAgIC8vIGlmIG9wdGlvbiBpcyBub3Qgc2VsZWN0ZWQsIHJlbW92ZSBpdCBmcm9tIGNhY2hlXG4gICAgaWYgKGluZGV4ID4gLTEgJiYgc2VsZWN0ZWRJbmRleCA8IDApIHtcbiAgICAgIHRoaXMuc2VsZWN0LmNhY2hlZE9wdGlvbnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gICAgdGhpcy5zZWxlY3Qub25PcHRpb25EZXN0cm95KHRoaXMuc2VsZWN0Lm9wdGlvbnMuaW5kZXhPZih0aGlzKSk7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9zZWxlY3Qvc3JjL29wdGlvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX29wdGlvbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChvcHRpb252dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIEVYVEVSTkFMIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXG52YXIgY29tcG9uZW50Tm9ybWFsaXplciA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvc2VsZWN0L3NyYy9vcHRpb24udnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgY29tcG9uZW50ID0gT2JqZWN0KGNvbXBvbmVudE5vcm1hbGl6ZXJbXCJhXCIgLyogZGVmYXVsdCAqL10pKFxuICBzcmNfb3B0aW9udnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgYXBpOyB9XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL3NlbGVjdC9zcmMvb3B0aW9uLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfb3B0aW9uID0gX193ZWJwYWNrX2V4cG9ydHNfX1tcImFcIl0gPSAoY29tcG9uZW50LmV4cG9ydHMpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gNDpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlbWVudC11aS9saWIvbWl4aW5zL2VtaXR0ZXJcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyA1NDpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NlbGVjdF9zcmNfb3B0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMzKTtcblxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuX3NlbGVjdF9zcmNfb3B0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bLyogZGVmYXVsdCAqLyBcImFcIl0uaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcbiAgVnVlLmNvbXBvbmVudChfc2VsZWN0X3NyY19vcHRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1svKiBkZWZhdWx0ICovIFwiYVwiXS5uYW1lLCBfc2VsZWN0X3NyY19vcHRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1svKiBkZWZhdWx0ICovIFwiYVwiXSk7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKF9zZWxlY3Rfc3JjX29wdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWy8qIGRlZmF1bHQgKi8gXCJhXCJdKTtcblxuLyoqKi8gfSlcblxuLyoqKioqKi8gfSk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/option.js\n");

/***/ }),

/***/ "./node_modules/element-ui/lib/popover.js":
/*!************************************************!*\
  !*** ./node_modules/element-ui/lib/popover.js ***!
  \************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

eval("module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __nested_webpack_require_187__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __nested_webpack_require_187__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__nested_webpack_require_187__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__nested_webpack_require_187__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__nested_webpack_require_187__.d = function(exports, name, getter) {\n/******/ \t\tif(!__nested_webpack_require_187__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__nested_webpack_require_187__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__nested_webpack_require_187__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __nested_webpack_require_187__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__nested_webpack_require_187__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __nested_webpack_require_187__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__nested_webpack_require_187__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__nested_webpack_require_187__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__nested_webpack_require_187__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__nested_webpack_require_187__.p = \"/dist/\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __nested_webpack_require_187__(__nested_webpack_require_187__.s = 78);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_3672__) {\n\n\"use strict\";\n/* harmony export (binding) */ __nested_webpack_require_3672__.d(__nested_webpack_exports__, \"a\", function() { return normalizeComponent; });\n/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nfunction normalizeComponent (\n  scriptExports,\n  render,\n  staticRenderFns,\n  functionalTemplate,\n  injectStyles,\n  scopeId,\n  moduleIdentifier, /* server only */\n  shadowMode /* vue-cli only */\n) {\n  // Vue.extend constructor export interop\n  var options = typeof scriptExports === 'function'\n    ? scriptExports.options\n    : scriptExports\n\n  // render functions\n  if (render) {\n    options.render = render\n    options.staticRenderFns = staticRenderFns\n    options._compiled = true\n  }\n\n  // functional template\n  if (functionalTemplate) {\n    options.functional = true\n  }\n\n  // scopedId\n  if (scopeId) {\n    options._scopeId = 'data-v-' + scopeId\n  }\n\n  var hook\n  if (moduleIdentifier) { // server build\n    hook = function (context) {\n      // 2.3 injection\n      context =\n        context || // cached call\n        (this.$vnode && this.$vnode.ssrContext) || // stateful\n        (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n      // 2.2 with runInNewContext: true\n      if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n        context = __VUE_SSR_CONTEXT__\n      }\n      // inject component styles\n      if (injectStyles) {\n        injectStyles.call(this, context)\n      }\n      // register component module identifier for async chunk inferrence\n      if (context && context._registeredComponents) {\n        context._registeredComponents.add(moduleIdentifier)\n      }\n    }\n    // used by ssr in case component is cached and beforeCreate\n    // never gets called\n    options._ssrRegister = hook\n  } else if (injectStyles) {\n    hook = shadowMode\n      ? function () { injectStyles.call(this, this.$root.$options.shadowRoot) }\n      : injectStyles\n  }\n\n  if (hook) {\n    if (options.functional) {\n      // for template-only hot-reload because in that case the render fn doesn't\n      // go through the normalizer\n      options._injectStyles = hook\n      // register for functioal component in vue file\n      var originalRender = options.render\n      options.render = function renderWithStyleInjection (h, context) {\n        hook.call(context)\n        return originalRender(h, context)\n      }\n    } else {\n      // inject component registration as beforeCreate hook\n      var existing = options.beforeCreate\n      options.beforeCreate = existing\n        ? [].concat(existing, hook)\n        : [hook]\n    }\n  }\n\n  return {\n    exports: scriptExports,\n    options: options\n  }\n}\n\n\n/***/ }),\n\n/***/ 2:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/dom */ \"./node_modules/element-ui/lib/utils/dom.js\");\n\n/***/ }),\n\n/***/ 3:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/util */ \"./node_modules/element-ui/lib/utils/util.js\");\n\n/***/ }),\n\n/***/ 5:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/vue-popper */ \"./node_modules/element-ui/lib/utils/vue-popper.js\");\n\n/***/ }),\n\n/***/ 7:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.esm.js\");\n\n/***/ }),\n\n/***/ 78:\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_7006__) {\n\n\"use strict\";\n__nested_webpack_require_7006__.r(__nested_webpack_exports__);\n\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/popover/src/main.vue?vue&type=template&id=52060272&\nvar render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"span\",\n    [\n      _c(\n        \"transition\",\n        {\n          attrs: { name: _vm.transition },\n          on: {\n            \"after-enter\": _vm.handleAfterEnter,\n            \"after-leave\": _vm.handleAfterLeave\n          }\n        },\n        [\n          _c(\n            \"div\",\n            {\n              directives: [\n                {\n                  name: \"show\",\n                  rawName: \"v-show\",\n                  value: !_vm.disabled && _vm.showPopper,\n                  expression: \"!disabled && showPopper\"\n                }\n              ],\n              ref: \"popper\",\n              staticClass: \"el-popover el-popper\",\n              class: [_vm.popperClass, _vm.content && \"el-popover--plain\"],\n              style: { width: _vm.width + \"px\" },\n              attrs: {\n                role: \"tooltip\",\n                id: _vm.tooltipId,\n                \"aria-hidden\":\n                  _vm.disabled || !_vm.showPopper ? \"true\" : \"false\"\n              }\n            },\n            [\n              _vm.title\n                ? _c(\"div\", {\n                    staticClass: \"el-popover__title\",\n                    domProps: { textContent: _vm._s(_vm.title) }\n                  })\n                : _vm._e(),\n              _vm._t(\"default\", [_vm._v(_vm._s(_vm.content))])\n            ],\n            2\n          )\n        ]\n      ),\n      _c(\n        \"span\",\n        { ref: \"wrapper\", staticClass: \"el-popover__reference-wrapper\" },\n        [_vm._t(\"reference\")],\n        2\n      )\n    ],\n    1\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/popover/src/main.vue?vue&type=template&id=52060272&\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/vue-popper\"\nvar vue_popper_ = __nested_webpack_require_7006__(5);\nvar vue_popper_default = /*#__PURE__*/__nested_webpack_require_7006__.n(vue_popper_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/dom\"\nvar dom_ = __nested_webpack_require_7006__(2);\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/util\"\nvar util_ = __nested_webpack_require_7006__(3);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/popover/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n/* harmony default export */ var mainvue_type_script_lang_js_ = ({\n  name: 'ElPopover',\n\n  mixins: [vue_popper_default.a],\n\n  props: {\n    trigger: {\n      type: String,\n      default: 'click',\n      validator: function validator(value) {\n        return ['click', 'focus', 'hover', 'manual'].indexOf(value) > -1;\n      }\n    },\n    openDelay: {\n      type: Number,\n      default: 0\n    },\n    closeDelay: {\n      type: Number,\n      default: 200\n    },\n    title: String,\n    disabled: Boolean,\n    content: String,\n    reference: {},\n    popperClass: String,\n    width: {},\n    visibleArrow: {\n      default: true\n    },\n    arrowOffset: {\n      type: Number,\n      default: 0\n    },\n    transition: {\n      type: String,\n      default: 'fade-in-linear'\n    },\n    tabindex: {\n      type: Number,\n      default: 0\n    }\n  },\n\n  computed: {\n    tooltipId: function tooltipId() {\n      return 'el-popover-' + Object(util_[\"generateId\"])();\n    }\n  },\n  watch: {\n    showPopper: function showPopper(val) {\n      if (this.disabled) {\n        return;\n      }\n      val ? this.$emit('show') : this.$emit('hide');\n    }\n  },\n\n  mounted: function mounted() {\n    var _this = this;\n\n    var reference = this.referenceElm = this.reference || this.$refs.reference;\n    var popper = this.popper || this.$refs.popper;\n\n    if (!reference && this.$refs.wrapper.children) {\n      reference = this.referenceElm = this.$refs.wrapper.children[0];\n    }\n    // 可访问性\n    if (reference) {\n      Object(dom_[\"addClass\"])(reference, 'el-popover__reference');\n      reference.setAttribute('aria-describedby', this.tooltipId);\n      reference.setAttribute('tabindex', this.tabindex); // tab序列\n      popper.setAttribute('tabindex', 0);\n\n      if (this.trigger !== 'click') {\n        Object(dom_[\"on\"])(reference, 'focusin', function () {\n          _this.handleFocus();\n          var instance = reference.__vue__;\n          if (instance && typeof instance.focus === 'function') {\n            instance.focus();\n          }\n        });\n        Object(dom_[\"on\"])(popper, 'focusin', this.handleFocus);\n        Object(dom_[\"on\"])(reference, 'focusout', this.handleBlur);\n        Object(dom_[\"on\"])(popper, 'focusout', this.handleBlur);\n      }\n      Object(dom_[\"on\"])(reference, 'keydown', this.handleKeydown);\n      Object(dom_[\"on\"])(reference, 'click', this.handleClick);\n    }\n    if (this.trigger === 'click') {\n      Object(dom_[\"on\"])(reference, 'click', this.doToggle);\n      Object(dom_[\"on\"])(document, 'click', this.handleDocumentClick);\n    } else if (this.trigger === 'hover') {\n      Object(dom_[\"on\"])(reference, 'mouseenter', this.handleMouseEnter);\n      Object(dom_[\"on\"])(popper, 'mouseenter', this.handleMouseEnter);\n      Object(dom_[\"on\"])(reference, 'mouseleave', this.handleMouseLeave);\n      Object(dom_[\"on\"])(popper, 'mouseleave', this.handleMouseLeave);\n    } else if (this.trigger === 'focus') {\n      if (this.tabindex < 0) {\n        console.warn('[Element Warn][Popover]a negative taindex means that the element cannot be focused by tab key');\n      }\n      if (reference.querySelector('input, textarea')) {\n        Object(dom_[\"on\"])(reference, 'focusin', this.doShow);\n        Object(dom_[\"on\"])(reference, 'focusout', this.doClose);\n      } else {\n        Object(dom_[\"on\"])(reference, 'mousedown', this.doShow);\n        Object(dom_[\"on\"])(reference, 'mouseup', this.doClose);\n      }\n    }\n  },\n  beforeDestroy: function beforeDestroy() {\n    this.cleanup();\n  },\n  deactivated: function deactivated() {\n    this.cleanup();\n  },\n\n\n  methods: {\n    doToggle: function doToggle() {\n      this.showPopper = !this.showPopper;\n    },\n    doShow: function doShow() {\n      this.showPopper = true;\n    },\n    doClose: function doClose() {\n      this.showPopper = false;\n    },\n    handleFocus: function handleFocus() {\n      Object(dom_[\"addClass\"])(this.referenceElm, 'focusing');\n      if (this.trigger === 'click' || this.trigger === 'focus') this.showPopper = true;\n    },\n    handleClick: function handleClick() {\n      Object(dom_[\"removeClass\"])(this.referenceElm, 'focusing');\n    },\n    handleBlur: function handleBlur() {\n      Object(dom_[\"removeClass\"])(this.referenceElm, 'focusing');\n      if (this.trigger === 'click' || this.trigger === 'focus') this.showPopper = false;\n    },\n    handleMouseEnter: function handleMouseEnter() {\n      var _this2 = this;\n\n      clearTimeout(this._timer);\n      if (this.openDelay) {\n        this._timer = setTimeout(function () {\n          _this2.showPopper = true;\n        }, this.openDelay);\n      } else {\n        this.showPopper = true;\n      }\n    },\n    handleKeydown: function handleKeydown(ev) {\n      if (ev.keyCode === 27 && this.trigger !== 'manual') {\n        // esc\n        this.doClose();\n      }\n    },\n    handleMouseLeave: function handleMouseLeave() {\n      var _this3 = this;\n\n      clearTimeout(this._timer);\n      if (this.closeDelay) {\n        this._timer = setTimeout(function () {\n          _this3.showPopper = false;\n        }, this.closeDelay);\n      } else {\n        this.showPopper = false;\n      }\n    },\n    handleDocumentClick: function handleDocumentClick(e) {\n      var reference = this.reference || this.$refs.reference;\n      var popper = this.popper || this.$refs.popper;\n\n      if (!reference && this.$refs.wrapper.children) {\n        reference = this.referenceElm = this.$refs.wrapper.children[0];\n      }\n      if (!this.$el || !reference || this.$el.contains(e.target) || reference.contains(e.target) || !popper || popper.contains(e.target)) return;\n      this.showPopper = false;\n    },\n    handleAfterEnter: function handleAfterEnter() {\n      this.$emit('after-enter');\n    },\n    handleAfterLeave: function handleAfterLeave() {\n      this.$emit('after-leave');\n      this.doDestroy();\n    },\n    cleanup: function cleanup() {\n      if (this.openDelay || this.closeDelay) {\n        clearTimeout(this._timer);\n      }\n    }\n  },\n\n  destroyed: function destroyed() {\n    var reference = this.reference;\n\n    Object(dom_[\"off\"])(reference, 'click', this.doToggle);\n    Object(dom_[\"off\"])(reference, 'mouseup', this.doClose);\n    Object(dom_[\"off\"])(reference, 'mousedown', this.doShow);\n    Object(dom_[\"off\"])(reference, 'focusin', this.doShow);\n    Object(dom_[\"off\"])(reference, 'focusout', this.doClose);\n    Object(dom_[\"off\"])(reference, 'mousedown', this.doShow);\n    Object(dom_[\"off\"])(reference, 'mouseup', this.doClose);\n    Object(dom_[\"off\"])(reference, 'mouseleave', this.handleMouseLeave);\n    Object(dom_[\"off\"])(reference, 'mouseenter', this.handleMouseEnter);\n    Object(dom_[\"off\"])(document, 'click', this.handleDocumentClick);\n  }\n});\n// CONCATENATED MODULE: ./packages/popover/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_mainvue_type_script_lang_js_ = (mainvue_type_script_lang_js_); \n// EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js\nvar componentNormalizer = __nested_webpack_require_7006__(0);\n\n// CONCATENATED MODULE: ./packages/popover/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(componentNormalizer[\"a\" /* default */])(\n  src_mainvue_type_script_lang_js_,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"packages/popover/src/main.vue\"\n/* harmony default export */ var main = (component.exports);\n// CONCATENATED MODULE: ./packages/popover/src/directive.js\nvar getReference = function getReference(el, binding, vnode) {\n  var _ref = binding.expression ? binding.value : binding.arg;\n  var popper = vnode.context.$refs[_ref];\n  if (popper) {\n    if (Array.isArray(popper)) {\n      popper[0].$refs.reference = el;\n    } else {\n      popper.$refs.reference = el;\n    }\n  }\n};\n\n/* harmony default export */ var directive = ({\n  bind: function bind(el, binding, vnode) {\n    getReference(el, binding, vnode);\n  },\n  inserted: function inserted(el, binding, vnode) {\n    getReference(el, binding, vnode);\n  }\n});\n// EXTERNAL MODULE: external \"vue\"\nvar external_vue_ = __nested_webpack_require_7006__(7);\nvar external_vue_default = /*#__PURE__*/__nested_webpack_require_7006__.n(external_vue_);\n\n// CONCATENATED MODULE: ./packages/popover/index.js\n\n\n\n\nexternal_vue_default.a.directive('popover', directive);\n\n/* istanbul ignore next */\nmain.install = function (Vue) {\n  Vue.directive('popover', directive);\n  Vue.component(main.name, main);\n};\nmain.directive = directive;\n\n/* harmony default export */ var popover = __nested_webpack_exports__[\"default\"] = (main);\n\n/***/ })\n\n/******/ });//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvcG9wb3Zlci5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBLDhCQUE4QjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQiw4QkFBbUI7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwRUFBMEUsOEJBQW1CO0FBQzdGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSw4QkFBbUI7QUFDN0I7QUFDQTtBQUNBLFVBQVUsOEJBQW1CO0FBQzdCO0FBQ0E7QUFDQSxVQUFVLDhCQUFtQjtBQUM3QixlQUFlLDhCQUFtQjtBQUNsQyxtREFBbUQsK0JBQStCO0FBQ2xGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSw4QkFBbUI7QUFDN0I7QUFDQSxpRUFBaUUsaUJBQWlCO0FBQ2xGO0FBQ0EsMERBQTBELGFBQWE7QUFDdkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLDhCQUFtQjtBQUM3QixnQ0FBZ0MsOEJBQW1CO0FBQ25EO0FBQ0E7QUFDQTtBQUNBLFdBQVcsOEJBQW1CO0FBQzlCLGtEQUFrRCxnQ0FBZ0M7QUFDbEYsMEVBQTBFLDhCQUFtQiw0QkFBNEIsb0JBQW9CO0FBQzdJO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSw4QkFBbUI7QUFDN0I7QUFDQSxvQ0FBb0MsNEJBQTRCO0FBQ2hFLDBDQUEwQztBQUMxQyxXQUFXLDhCQUFtQjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsOEJBQW1CLGtDQUFrQztBQUMvRDtBQUNBO0FBQ0EsVUFBVSw4QkFBbUI7QUFDN0I7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLDhCQUFtQixDQUFDLDhCQUFtQjtBQUN4RCxVQUFVO0FBQ1Y7QUFDQTs7QUFFQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSwrQkFBbUI7O0FB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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5REFBeUQ7QUFDekQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsUUFBUTtBQUNSO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULFFBQVE7QUFDUjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsK0JBQW1COztBQUU3Qzs7Ozs7O0FBTUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLEtBQUssRUFBRSxZQUFZO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0Esb0JBQW9CLCtCQUFtQjtBQUN2Qyx3Q0FBd0MsK0JBQW1COztBQUUzRDs7Ozs7QUFLQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsMkNBQTJDLDBCQUFtQjs7QUFFOUQsT0FBTzs7QUFFUCxVQUFVIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2VsZW1lbnQtdWkvbGliL3BvcG92ZXIuanM/YzVmZCJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9XG4vKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwXG4vKioqKioqLyBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4vKioqKioqLyBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4vKioqKioqLyBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbi8qKioqKiovIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuLyoqKioqKi8gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbi8qKioqKiovIFx0XHRcdGk6IG1vZHVsZUlkLFxuLyoqKioqKi8gXHRcdFx0bDogZmFsc2UsXG4vKioqKioqLyBcdFx0XHRleHBvcnRzOiB7fVxuLyoqKioqKi8gXHRcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuLyoqKioqKi8gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4vKioqKioqLyBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuLyoqKioqKi8gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbi8qKioqKiovIFx0fVxuLyoqKioqKi9cbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuLyoqKioqKi8gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbi8qKioqKiovIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuLyoqKioqKi8gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3Rcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4vKioqKioqLyBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuLyoqKioqKi8gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3Rcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4vKioqKioqLyBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbi8qKioqKiovIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4vKioqKioqLyBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbi8qKioqKiovIFx0XHRyZXR1cm4gbnM7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbi8qKioqKiovIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbi8qKioqKiovIFx0XHRyZXR1cm4gZ2V0dGVyO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiL2Rpc3QvXCI7XG4vKioqKioqL1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vKioqKioqLyBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDc4KTtcbi8qKioqKiovIH0pXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gKHtcblxuLyoqKi8gMDpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiYVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIG5vcm1hbGl6ZUNvbXBvbmVudDsgfSk7XG4vKiBnbG9iYWxzIF9fVlVFX1NTUl9DT05URVhUX18gKi9cblxuLy8gSU1QT1JUQU5UOiBEbyBOT1QgdXNlIEVTMjAxNSBmZWF0dXJlcyBpbiB0aGlzIGZpbGUgKGV4Y2VwdCBmb3IgbW9kdWxlcykuXG4vLyBUaGlzIG1vZHVsZSBpcyBhIHJ1bnRpbWUgdXRpbGl0eSBmb3IgY2xlYW5lciBjb21wb25lbnQgbW9kdWxlIG91dHB1dCBhbmQgd2lsbFxuLy8gYmUgaW5jbHVkZWQgaW4gdGhlIGZpbmFsIHdlYnBhY2sgdXNlciBidW5kbGUuXG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUNvbXBvbmVudCAoXG4gIHNjcmlwdEV4cG9ydHMsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmdW5jdGlvbmFsVGVtcGxhdGUsXG4gIGluamVjdFN0eWxlcyxcbiAgc2NvcGVJZCxcbiAgbW9kdWxlSWRlbnRpZmllciwgLyogc2VydmVyIG9ubHkgKi9cbiAgc2hhZG93TW9kZSAvKiB2dWUtY2xpIG9ubHkgKi9cbikge1xuICAvLyBWdWUuZXh0ZW5kIGNvbnN0cnVjdG9yIGV4cG9ydCBpbnRlcm9wXG4gIHZhciBvcHRpb25zID0gdHlwZW9mIHNjcmlwdEV4cG9ydHMgPT09ICdmdW5jdGlvbidcbiAgICA/IHNjcmlwdEV4cG9ydHMub3B0aW9uc1xuICAgIDogc2NyaXB0RXhwb3J0c1xuXG4gIC8vIHJlbmRlciBmdW5jdGlvbnNcbiAgaWYgKHJlbmRlcikge1xuICAgIG9wdGlvbnMucmVuZGVyID0gcmVuZGVyXG4gICAgb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnMgPSBzdGF0aWNSZW5kZXJGbnNcbiAgICBvcHRpb25zLl9jb21waWxlZCA9IHRydWVcbiAgfVxuXG4gIC8vIGZ1bmN0aW9uYWwgdGVtcGxhdGVcbiAgaWYgKGZ1bmN0aW9uYWxUZW1wbGF0ZSkge1xuICAgIG9wdGlvbnMuZnVuY3Rpb25hbCA9IHRydWVcbiAgfVxuXG4gIC8vIHNjb3BlZElkXG4gIGlmIChzY29wZUlkKSB7XG4gICAgb3B0aW9ucy5fc2NvcGVJZCA9ICdkYXRhLXYtJyArIHNjb3BlSWRcbiAgfVxuXG4gIHZhciBob29rXG4gIGlmIChtb2R1bGVJZGVudGlmaWVyKSB7IC8vIHNlcnZlciBidWlsZFxuICAgIGhvb2sgPSBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgLy8gMi4zIGluamVjdGlvblxuICAgICAgY29udGV4dCA9XG4gICAgICAgIGNvbnRleHQgfHwgLy8gY2FjaGVkIGNhbGxcbiAgICAgICAgKHRoaXMuJHZub2RlICYmIHRoaXMuJHZub2RlLnNzckNvbnRleHQpIHx8IC8vIHN0YXRlZnVsXG4gICAgICAgICh0aGlzLnBhcmVudCAmJiB0aGlzLnBhcmVudC4kdm5vZGUgJiYgdGhpcy5wYXJlbnQuJHZub2RlLnNzckNvbnRleHQpIC8vIGZ1bmN0aW9uYWxcbiAgICAgIC8vIDIuMiB3aXRoIHJ1bkluTmV3Q29udGV4dDogdHJ1ZVxuICAgICAgaWYgKCFjb250ZXh0ICYmIHR5cGVvZiBfX1ZVRV9TU1JfQ09OVEVYVF9fICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBjb250ZXh0ID0gX19WVUVfU1NSX0NPTlRFWFRfX1xuICAgICAgfVxuICAgICAgLy8gaW5qZWN0IGNvbXBvbmVudCBzdHlsZXNcbiAgICAgIGlmIChpbmplY3RTdHlsZXMpIHtcbiAgICAgICAgaW5qZWN0U3R5bGVzLmNhbGwodGhpcywgY29udGV4dClcbiAgICAgIH1cbiAgICAgIC8vIHJlZ2lzdGVyIGNvbXBvbmVudCBtb2R1bGUgaWRlbnRpZmllciBmb3IgYXN5bmMgY2h1bmsgaW5mZXJyZW5jZVxuICAgICAgaWYgKGNvbnRleHQgJiYgY29udGV4dC5fcmVnaXN0ZXJlZENvbXBvbmVudHMpIHtcbiAgICAgICAgY29udGV4dC5fcmVnaXN0ZXJlZENvbXBvbmVudHMuYWRkKG1vZHVsZUlkZW50aWZpZXIpXG4gICAgICB9XG4gICAgfVxuICAgIC8vIHVzZWQgYnkgc3NyIGluIGNhc2UgY29tcG9uZW50IGlzIGNhY2hlZCBhbmQgYmVmb3JlQ3JlYXRlXG4gICAgLy8gbmV2ZXIgZ2V0cyBjYWxsZWRcbiAgICBvcHRpb25zLl9zc3JSZWdpc3RlciA9IGhvb2tcbiAgfSBlbHNlIGlmIChpbmplY3RTdHlsZXMpIHtcbiAgICBob29rID0gc2hhZG93TW9kZVxuICAgICAgPyBmdW5jdGlvbiAoKSB7IGluamVjdFN0eWxlcy5jYWxsKHRoaXMsIHRoaXMuJHJvb3QuJG9wdGlvbnMuc2hhZG93Um9vdCkgfVxuICAgICAgOiBpbmplY3RTdHlsZXNcbiAgfVxuXG4gIGlmIChob29rKSB7XG4gICAgaWYgKG9wdGlvbnMuZnVuY3Rpb25hbCkge1xuICAgICAgLy8gZm9yIHRlbXBsYXRlLW9ubHkgaG90LXJlbG9hZCBiZWNhdXNlIGluIHRoYXQgY2FzZSB0aGUgcmVuZGVyIGZuIGRvZXNuJ3RcbiAgICAgIC8vIGdvIHRocm91Z2ggdGhlIG5vcm1hbGl6ZXJcbiAgICAgIG9wdGlvbnMuX2luamVjdFN0eWxlcyA9IGhvb2tcbiAgICAgIC8vIHJlZ2lzdGVyIGZvciBmdW5jdGlvYWwgY29tcG9uZW50IGluIHZ1ZSBmaWxlXG4gICAgICB2YXIgb3JpZ2luYWxSZW5kZXIgPSBvcHRpb25zLnJlbmRlclxuICAgICAgb3B0aW9ucy5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXJXaXRoU3R5bGVJbmplY3Rpb24gKGgsIGNvbnRleHQpIHtcbiAgICAgICAgaG9vay5jYWxsKGNvbnRleHQpXG4gICAgICAgIHJldHVybiBvcmlnaW5hbFJlbmRlcihoLCBjb250ZXh0KVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpbmplY3QgY29tcG9uZW50IHJlZ2lzdHJhdGlvbiBhcyBiZWZvcmVDcmVhdGUgaG9va1xuICAgICAgdmFyIGV4aXN0aW5nID0gb3B0aW9ucy5iZWZvcmVDcmVhdGVcbiAgICAgIG9wdGlvbnMuYmVmb3JlQ3JlYXRlID0gZXhpc3RpbmdcbiAgICAgICAgPyBbXS5jb25jYXQoZXhpc3RpbmcsIGhvb2spXG4gICAgICAgIDogW2hvb2tdXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBleHBvcnRzOiBzY3JpcHRFeHBvcnRzLFxuICAgIG9wdGlvbnM6IG9wdGlvbnNcbiAgfVxufVxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyAyOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi91dGlscy9kb21cIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAzOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi91dGlscy91dGlsXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gNTpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlbWVudC11aS9saWIvdXRpbHMvdnVlLXBvcHBlclwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDc6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInZ1ZVwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDc4OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9wb3BvdmVyL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01MjA2MDI3MiZcbnZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJzcGFuXCIsXG4gICAgW1xuICAgICAgX2MoXG4gICAgICAgIFwidHJhbnNpdGlvblwiLFxuICAgICAgICB7XG4gICAgICAgICAgYXR0cnM6IHsgbmFtZTogX3ZtLnRyYW5zaXRpb24gfSxcbiAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgXCJhZnRlci1lbnRlclwiOiBfdm0uaGFuZGxlQWZ0ZXJFbnRlcixcbiAgICAgICAgICAgIFwiYWZ0ZXItbGVhdmVcIjogX3ZtLmhhbmRsZUFmdGVyTGVhdmVcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFtcbiAgICAgICAgICBfYyhcbiAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogIV92bS5kaXNhYmxlZCAmJiBfdm0uc2hvd1BvcHBlcixcbiAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwiIWRpc2FibGVkICYmIHNob3dQb3BwZXJcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgcmVmOiBcInBvcHBlclwiLFxuICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1wb3BvdmVyIGVsLXBvcHBlclwiLFxuICAgICAgICAgICAgICBjbGFzczogW192bS5wb3BwZXJDbGFzcywgX3ZtLmNvbnRlbnQgJiYgXCJlbC1wb3BvdmVyLS1wbGFpblwiXSxcbiAgICAgICAgICAgICAgc3R5bGU6IHsgd2lkdGg6IF92bS53aWR0aCArIFwicHhcIiB9LFxuICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgIHJvbGU6IFwidG9vbHRpcFwiLFxuICAgICAgICAgICAgICAgIGlkOiBfdm0udG9vbHRpcElkLFxuICAgICAgICAgICAgICAgIFwiYXJpYS1oaWRkZW5cIjpcbiAgICAgICAgICAgICAgICAgIF92bS5kaXNhYmxlZCB8fCAhX3ZtLnNob3dQb3BwZXIgPyBcInRydWVcIiA6IFwiZmFsc2VcIlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfdm0udGl0bGVcbiAgICAgICAgICAgICAgICA/IF9jKFwiZGl2XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtcG9wb3Zlcl9fdGl0bGVcIixcbiAgICAgICAgICAgICAgICAgICAgZG9tUHJvcHM6IHsgdGV4dENvbnRlbnQ6IF92bS5fcyhfdm0udGl0bGUpIH1cbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgX3ZtLl90KFwiZGVmYXVsdFwiLCBbX3ZtLl92KF92bS5fcyhfdm0uY29udGVudCkpXSlcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAyXG4gICAgICAgICAgKVxuICAgICAgICBdXG4gICAgICApLFxuICAgICAgX2MoXG4gICAgICAgIFwic3BhblwiLFxuICAgICAgICB7IHJlZjogXCJ3cmFwcGVyXCIsIHN0YXRpY0NsYXNzOiBcImVsLXBvcG92ZXJfX3JlZmVyZW5jZS13cmFwcGVyXCIgfSxcbiAgICAgICAgW192bS5fdChcInJlZmVyZW5jZVwiKV0sXG4gICAgICAgIDJcbiAgICAgIClcbiAgICBdLFxuICAgIDFcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3BvcG92ZXIvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTUyMDYwMjcyJlxuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiZWxlbWVudC11aS9saWIvdXRpbHMvdnVlLXBvcHBlclwiXG52YXIgdnVlX3BvcHBlcl8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpO1xudmFyIHZ1ZV9wb3BwZXJfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4odnVlX3BvcHBlcl8pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiZWxlbWVudC11aS9saWIvdXRpbHMvZG9tXCJcbnZhciBkb21fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcImVsZW1lbnQtdWkvbGliL3V0aWxzL3V0aWxcIlxudmFyIHV0aWxfID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvcG9wb3Zlci9zcmMvbWFpbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5cblxuXG5cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG5hbWU6ICdFbFBvcG92ZXInLFxuXG4gIG1peGluczogW3Z1ZV9wb3BwZXJfZGVmYXVsdC5hXSxcblxuICBwcm9wczoge1xuICAgIHRyaWdnZXI6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdjbGljaycsXG4gICAgICB2YWxpZGF0b3I6IGZ1bmN0aW9uIHZhbGlkYXRvcih2YWx1ZSkge1xuICAgICAgICByZXR1cm4gWydjbGljaycsICdmb2N1cycsICdob3ZlcicsICdtYW51YWwnXS5pbmRleE9mKHZhbHVlKSA+IC0xO1xuICAgICAgfVxuICAgIH0sXG4gICAgb3BlbkRlbGF5OiB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBkZWZhdWx0OiAwXG4gICAgfSxcbiAgICBjbG9zZURlbGF5OiB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBkZWZhdWx0OiAyMDBcbiAgICB9LFxuICAgIHRpdGxlOiBTdHJpbmcsXG4gICAgZGlzYWJsZWQ6IEJvb2xlYW4sXG4gICAgY29udGVudDogU3RyaW5nLFxuICAgIHJlZmVyZW5jZToge30sXG4gICAgcG9wcGVyQ2xhc3M6IFN0cmluZyxcbiAgICB3aWR0aDoge30sXG4gICAgdmlzaWJsZUFycm93OiB7XG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSxcbiAgICBhcnJvd09mZnNldDoge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZGVmYXVsdDogMFxuICAgIH0sXG4gICAgdHJhbnNpdGlvbjoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2ZhZGUtaW4tbGluZWFyJ1xuICAgIH0sXG4gICAgdGFiaW5kZXg6IHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGRlZmF1bHQ6IDBcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB0b29sdGlwSWQ6IGZ1bmN0aW9uIHRvb2x0aXBJZCgpIHtcbiAgICAgIHJldHVybiAnZWwtcG9wb3Zlci0nICsgT2JqZWN0KHV0aWxfW1wiZ2VuZXJhdGVJZFwiXSkoKTtcbiAgICB9XG4gIH0sXG4gIHdhdGNoOiB7XG4gICAgc2hvd1BvcHBlcjogZnVuY3Rpb24gc2hvd1BvcHBlcih2YWwpIHtcbiAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHZhbCA/IHRoaXMuJGVtaXQoJ3Nob3cnKSA6IHRoaXMuJGVtaXQoJ2hpZGUnKTtcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdmFyIHJlZmVyZW5jZSA9IHRoaXMucmVmZXJlbmNlRWxtID0gdGhpcy5yZWZlcmVuY2UgfHwgdGhpcy4kcmVmcy5yZWZlcmVuY2U7XG4gICAgdmFyIHBvcHBlciA9IHRoaXMucG9wcGVyIHx8IHRoaXMuJHJlZnMucG9wcGVyO1xuXG4gICAgaWYgKCFyZWZlcmVuY2UgJiYgdGhpcy4kcmVmcy53cmFwcGVyLmNoaWxkcmVuKSB7XG4gICAgICByZWZlcmVuY2UgPSB0aGlzLnJlZmVyZW5jZUVsbSA9IHRoaXMuJHJlZnMud3JhcHBlci5jaGlsZHJlblswXTtcbiAgICB9XG4gICAgLy8g5Y+v6K6/6Zeu5oCnXG4gICAgaWYgKHJlZmVyZW5jZSkge1xuICAgICAgT2JqZWN0KGRvbV9bXCJhZGRDbGFzc1wiXSkocmVmZXJlbmNlLCAnZWwtcG9wb3Zlcl9fcmVmZXJlbmNlJyk7XG4gICAgICByZWZlcmVuY2Uuc2V0QXR0cmlidXRlKCdhcmlhLWRlc2NyaWJlZGJ5JywgdGhpcy50b29sdGlwSWQpO1xuICAgICAgcmVmZXJlbmNlLnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCB0aGlzLnRhYmluZGV4KTsgLy8gdGFi5bqP5YiXXG4gICAgICBwb3BwZXIuc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsIDApO1xuXG4gICAgICBpZiAodGhpcy50cmlnZ2VyICE9PSAnY2xpY2snKSB7XG4gICAgICAgIE9iamVjdChkb21fW1wib25cIl0pKHJlZmVyZW5jZSwgJ2ZvY3VzaW4nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgX3RoaXMuaGFuZGxlRm9jdXMoKTtcbiAgICAgICAgICB2YXIgaW5zdGFuY2UgPSByZWZlcmVuY2UuX192dWVfXztcbiAgICAgICAgICBpZiAoaW5zdGFuY2UgJiYgdHlwZW9mIGluc3RhbmNlLmZvY3VzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBpbnN0YW5jZS5mb2N1cygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdChkb21fW1wib25cIl0pKHBvcHBlciwgJ2ZvY3VzaW4nLCB0aGlzLmhhbmRsZUZvY3VzKTtcbiAgICAgICAgT2JqZWN0KGRvbV9bXCJvblwiXSkocmVmZXJlbmNlLCAnZm9jdXNvdXQnLCB0aGlzLmhhbmRsZUJsdXIpO1xuICAgICAgICBPYmplY3QoZG9tX1tcIm9uXCJdKShwb3BwZXIsICdmb2N1c291dCcsIHRoaXMuaGFuZGxlQmx1cik7XG4gICAgICB9XG4gICAgICBPYmplY3QoZG9tX1tcIm9uXCJdKShyZWZlcmVuY2UsICdrZXlkb3duJywgdGhpcy5oYW5kbGVLZXlkb3duKTtcbiAgICAgIE9iamVjdChkb21fW1wib25cIl0pKHJlZmVyZW5jZSwgJ2NsaWNrJywgdGhpcy5oYW5kbGVDbGljayk7XG4gICAgfVxuICAgIGlmICh0aGlzLnRyaWdnZXIgPT09ICdjbGljaycpIHtcbiAgICAgIE9iamVjdChkb21fW1wib25cIl0pKHJlZmVyZW5jZSwgJ2NsaWNrJywgdGhpcy5kb1RvZ2dsZSk7XG4gICAgICBPYmplY3QoZG9tX1tcIm9uXCJdKShkb2N1bWVudCwgJ2NsaWNrJywgdGhpcy5oYW5kbGVEb2N1bWVudENsaWNrKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMudHJpZ2dlciA9PT0gJ2hvdmVyJykge1xuICAgICAgT2JqZWN0KGRvbV9bXCJvblwiXSkocmVmZXJlbmNlLCAnbW91c2VlbnRlcicsIHRoaXMuaGFuZGxlTW91c2VFbnRlcik7XG4gICAgICBPYmplY3QoZG9tX1tcIm9uXCJdKShwb3BwZXIsICdtb3VzZWVudGVyJywgdGhpcy5oYW5kbGVNb3VzZUVudGVyKTtcbiAgICAgIE9iamVjdChkb21fW1wib25cIl0pKHJlZmVyZW5jZSwgJ21vdXNlbGVhdmUnLCB0aGlzLmhhbmRsZU1vdXNlTGVhdmUpO1xuICAgICAgT2JqZWN0KGRvbV9bXCJvblwiXSkocG9wcGVyLCAnbW91c2VsZWF2ZScsIHRoaXMuaGFuZGxlTW91c2VMZWF2ZSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnRyaWdnZXIgPT09ICdmb2N1cycpIHtcbiAgICAgIGlmICh0aGlzLnRhYmluZGV4IDwgMCkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1tFbGVtZW50IFdhcm5dW1BvcG92ZXJdYSBuZWdhdGl2ZSB0YWluZGV4IG1lYW5zIHRoYXQgdGhlIGVsZW1lbnQgY2Fubm90IGJlIGZvY3VzZWQgYnkgdGFiIGtleScpO1xuICAgICAgfVxuICAgICAgaWYgKHJlZmVyZW5jZS5xdWVyeVNlbGVjdG9yKCdpbnB1dCwgdGV4dGFyZWEnKSkge1xuICAgICAgICBPYmplY3QoZG9tX1tcIm9uXCJdKShyZWZlcmVuY2UsICdmb2N1c2luJywgdGhpcy5kb1Nob3cpO1xuICAgICAgICBPYmplY3QoZG9tX1tcIm9uXCJdKShyZWZlcmVuY2UsICdmb2N1c291dCcsIHRoaXMuZG9DbG9zZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBPYmplY3QoZG9tX1tcIm9uXCJdKShyZWZlcmVuY2UsICdtb3VzZWRvd24nLCB0aGlzLmRvU2hvdyk7XG4gICAgICAgIE9iamVjdChkb21fW1wib25cIl0pKHJlZmVyZW5jZSwgJ21vdXNldXAnLCB0aGlzLmRvQ2xvc2UpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgYmVmb3JlRGVzdHJveTogZnVuY3Rpb24gYmVmb3JlRGVzdHJveSgpIHtcbiAgICB0aGlzLmNsZWFudXAoKTtcbiAgfSxcbiAgZGVhY3RpdmF0ZWQ6IGZ1bmN0aW9uIGRlYWN0aXZhdGVkKCkge1xuICAgIHRoaXMuY2xlYW51cCgpO1xuICB9LFxuXG5cbiAgbWV0aG9kczoge1xuICAgIGRvVG9nZ2xlOiBmdW5jdGlvbiBkb1RvZ2dsZSgpIHtcbiAgICAgIHRoaXMuc2hvd1BvcHBlciA9ICF0aGlzLnNob3dQb3BwZXI7XG4gICAgfSxcbiAgICBkb1Nob3c6IGZ1bmN0aW9uIGRvU2hvdygpIHtcbiAgICAgIHRoaXMuc2hvd1BvcHBlciA9IHRydWU7XG4gICAgfSxcbiAgICBkb0Nsb3NlOiBmdW5jdGlvbiBkb0Nsb3NlKCkge1xuICAgICAgdGhpcy5zaG93UG9wcGVyID0gZmFsc2U7XG4gICAgfSxcbiAgICBoYW5kbGVGb2N1czogZnVuY3Rpb24gaGFuZGxlRm9jdXMoKSB7XG4gICAgICBPYmplY3QoZG9tX1tcImFkZENsYXNzXCJdKSh0aGlzLnJlZmVyZW5jZUVsbSwgJ2ZvY3VzaW5nJyk7XG4gICAgICBpZiAodGhpcy50cmlnZ2VyID09PSAnY2xpY2snIHx8IHRoaXMudHJpZ2dlciA9PT0gJ2ZvY3VzJykgdGhpcy5zaG93UG9wcGVyID0gdHJ1ZTtcbiAgICB9LFxuICAgIGhhbmRsZUNsaWNrOiBmdW5jdGlvbiBoYW5kbGVDbGljaygpIHtcbiAgICAgIE9iamVjdChkb21fW1wicmVtb3ZlQ2xhc3NcIl0pKHRoaXMucmVmZXJlbmNlRWxtLCAnZm9jdXNpbmcnKTtcbiAgICB9LFxuICAgIGhhbmRsZUJsdXI6IGZ1bmN0aW9uIGhhbmRsZUJsdXIoKSB7XG4gICAgICBPYmplY3QoZG9tX1tcInJlbW92ZUNsYXNzXCJdKSh0aGlzLnJlZmVyZW5jZUVsbSwgJ2ZvY3VzaW5nJyk7XG4gICAgICBpZiAodGhpcy50cmlnZ2VyID09PSAnY2xpY2snIHx8IHRoaXMudHJpZ2dlciA9PT0gJ2ZvY3VzJykgdGhpcy5zaG93UG9wcGVyID0gZmFsc2U7XG4gICAgfSxcbiAgICBoYW5kbGVNb3VzZUVudGVyOiBmdW5jdGlvbiBoYW5kbGVNb3VzZUVudGVyKCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lcik7XG4gICAgICBpZiAodGhpcy5vcGVuRGVsYXkpIHtcbiAgICAgICAgdGhpcy5fdGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfdGhpczIuc2hvd1BvcHBlciA9IHRydWU7XG4gICAgICAgIH0sIHRoaXMub3BlbkRlbGF5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2hvd1BvcHBlciA9IHRydWU7XG4gICAgICB9XG4gICAgfSxcbiAgICBoYW5kbGVLZXlkb3duOiBmdW5jdGlvbiBoYW5kbGVLZXlkb3duKGV2KSB7XG4gICAgICBpZiAoZXYua2V5Q29kZSA9PT0gMjcgJiYgdGhpcy50cmlnZ2VyICE9PSAnbWFudWFsJykge1xuICAgICAgICAvLyBlc2NcbiAgICAgICAgdGhpcy5kb0Nsb3NlKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBoYW5kbGVNb3VzZUxlYXZlOiBmdW5jdGlvbiBoYW5kbGVNb3VzZUxlYXZlKCkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lcik7XG4gICAgICBpZiAodGhpcy5jbG9zZURlbGF5KSB7XG4gICAgICAgIHRoaXMuX3RpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgX3RoaXMzLnNob3dQb3BwZXIgPSBmYWxzZTtcbiAgICAgICAgfSwgdGhpcy5jbG9zZURlbGF5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2hvd1BvcHBlciA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0sXG4gICAgaGFuZGxlRG9jdW1lbnRDbGljazogZnVuY3Rpb24gaGFuZGxlRG9jdW1lbnRDbGljayhlKSB7XG4gICAgICB2YXIgcmVmZXJlbmNlID0gdGhpcy5yZWZlcmVuY2UgfHwgdGhpcy4kcmVmcy5yZWZlcmVuY2U7XG4gICAgICB2YXIgcG9wcGVyID0gdGhpcy5wb3BwZXIgfHwgdGhpcy4kcmVmcy5wb3BwZXI7XG5cbiAgICAgIGlmICghcmVmZXJlbmNlICYmIHRoaXMuJHJlZnMud3JhcHBlci5jaGlsZHJlbikge1xuICAgICAgICByZWZlcmVuY2UgPSB0aGlzLnJlZmVyZW5jZUVsbSA9IHRoaXMuJHJlZnMud3JhcHBlci5jaGlsZHJlblswXTtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy4kZWwgfHwgIXJlZmVyZW5jZSB8fCB0aGlzLiRlbC5jb250YWlucyhlLnRhcmdldCkgfHwgcmVmZXJlbmNlLmNvbnRhaW5zKGUudGFyZ2V0KSB8fCAhcG9wcGVyIHx8IHBvcHBlci5jb250YWlucyhlLnRhcmdldCkpIHJldHVybjtcbiAgICAgIHRoaXMuc2hvd1BvcHBlciA9IGZhbHNlO1xuICAgIH0sXG4gICAgaGFuZGxlQWZ0ZXJFbnRlcjogZnVuY3Rpb24gaGFuZGxlQWZ0ZXJFbnRlcigpIHtcbiAgICAgIHRoaXMuJGVtaXQoJ2FmdGVyLWVudGVyJyk7XG4gICAgfSxcbiAgICBoYW5kbGVBZnRlckxlYXZlOiBmdW5jdGlvbiBoYW5kbGVBZnRlckxlYXZlKCkge1xuICAgICAgdGhpcy4kZW1pdCgnYWZ0ZXItbGVhdmUnKTtcbiAgICAgIHRoaXMuZG9EZXN0cm95KCk7XG4gICAgfSxcbiAgICBjbGVhbnVwOiBmdW5jdGlvbiBjbGVhbnVwKCkge1xuICAgICAgaWYgKHRoaXMub3BlbkRlbGF5IHx8IHRoaXMuY2xvc2VEZWxheSkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZXIpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBkZXN0cm95ZWQ6IGZ1bmN0aW9uIGRlc3Ryb3llZCgpIHtcbiAgICB2YXIgcmVmZXJlbmNlID0gdGhpcy5yZWZlcmVuY2U7XG5cbiAgICBPYmplY3QoZG9tX1tcIm9mZlwiXSkocmVmZXJlbmNlLCAnY2xpY2snLCB0aGlzLmRvVG9nZ2xlKTtcbiAgICBPYmplY3QoZG9tX1tcIm9mZlwiXSkocmVmZXJlbmNlLCAnbW91c2V1cCcsIHRoaXMuZG9DbG9zZSk7XG4gICAgT2JqZWN0KGRvbV9bXCJvZmZcIl0pKHJlZmVyZW5jZSwgJ21vdXNlZG93bicsIHRoaXMuZG9TaG93KTtcbiAgICBPYmplY3QoZG9tX1tcIm9mZlwiXSkocmVmZXJlbmNlLCAnZm9jdXNpbicsIHRoaXMuZG9TaG93KTtcbiAgICBPYmplY3QoZG9tX1tcIm9mZlwiXSkocmVmZXJlbmNlLCAnZm9jdXNvdXQnLCB0aGlzLmRvQ2xvc2UpO1xuICAgIE9iamVjdChkb21fW1wib2ZmXCJdKShyZWZlcmVuY2UsICdtb3VzZWRvd24nLCB0aGlzLmRvU2hvdyk7XG4gICAgT2JqZWN0KGRvbV9bXCJvZmZcIl0pKHJlZmVyZW5jZSwgJ21vdXNldXAnLCB0aGlzLmRvQ2xvc2UpO1xuICAgIE9iamVjdChkb21fW1wib2ZmXCJdKShyZWZlcmVuY2UsICdtb3VzZWxlYXZlJywgdGhpcy5oYW5kbGVNb3VzZUxlYXZlKTtcbiAgICBPYmplY3QoZG9tX1tcIm9mZlwiXSkocmVmZXJlbmNlLCAnbW91c2VlbnRlcicsIHRoaXMuaGFuZGxlTW91c2VFbnRlcik7XG4gICAgT2JqZWN0KGRvbV9bXCJvZmZcIl0pKGRvY3VtZW50LCAnY2xpY2snLCB0aGlzLmhhbmRsZURvY3VtZW50Q2xpY2spO1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvcG9wb3Zlci9zcmMvbWFpbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAobWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gRVhURVJOQUwgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcbnZhciBjb21wb25lbnROb3JtYWxpemVyID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9wb3BvdmVyL3NyYy9tYWluLnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGNvbXBvbmVudCA9IE9iamVjdChjb21wb25lbnROb3JtYWxpemVyW1wiYVwiIC8qIGRlZmF1bHQgKi9dKShcbiAgc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBhcGk7IH1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvcG9wb3Zlci9zcmMvbWFpbi52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgbWFpbiA9IChjb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3BvcG92ZXIvc3JjL2RpcmVjdGl2ZS5qc1xudmFyIGdldFJlZmVyZW5jZSA9IGZ1bmN0aW9uIGdldFJlZmVyZW5jZShlbCwgYmluZGluZywgdm5vZGUpIHtcbiAgdmFyIF9yZWYgPSBiaW5kaW5nLmV4cHJlc3Npb24gPyBiaW5kaW5nLnZhbHVlIDogYmluZGluZy5hcmc7XG4gIHZhciBwb3BwZXIgPSB2bm9kZS5jb250ZXh0LiRyZWZzW19yZWZdO1xuICBpZiAocG9wcGVyKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocG9wcGVyKSkge1xuICAgICAgcG9wcGVyWzBdLiRyZWZzLnJlZmVyZW5jZSA9IGVsO1xuICAgIH0gZWxzZSB7XG4gICAgICBwb3BwZXIuJHJlZnMucmVmZXJlbmNlID0gZWw7XG4gICAgfVxuICB9XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBkaXJlY3RpdmUgPSAoe1xuICBiaW5kOiBmdW5jdGlvbiBiaW5kKGVsLCBiaW5kaW5nLCB2bm9kZSkge1xuICAgIGdldFJlZmVyZW5jZShlbCwgYmluZGluZywgdm5vZGUpO1xuICB9LFxuICBpbnNlcnRlZDogZnVuY3Rpb24gaW5zZXJ0ZWQoZWwsIGJpbmRpbmcsIHZub2RlKSB7XG4gICAgZ2V0UmVmZXJlbmNlKGVsLCBiaW5kaW5nLCB2bm9kZSk7XG4gIH1cbn0pO1xuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcInZ1ZVwiXG52YXIgZXh0ZXJuYWxfdnVlXyA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XG52YXIgZXh0ZXJuYWxfdnVlX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGV4dGVybmFsX3Z1ZV8pO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3BvcG92ZXIvaW5kZXguanNcblxuXG5cblxuZXh0ZXJuYWxfdnVlX2RlZmF1bHQuYS5kaXJlY3RpdmUoJ3BvcG92ZXInLCBkaXJlY3RpdmUpO1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xubWFpbi5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuICBWdWUuZGlyZWN0aXZlKCdwb3BvdmVyJywgZGlyZWN0aXZlKTtcbiAgVnVlLmNvbXBvbmVudChtYWluLm5hbWUsIG1haW4pO1xufTtcbm1haW4uZGlyZWN0aXZlID0gZGlyZWN0aXZlO1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwb3BvdmVyID0gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAobWFpbik7XG5cbi8qKiovIH0pXG5cbi8qKioqKiovIH0pOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/popover.js\n");

/***/ }),

/***/ "./node_modules/element-ui/lib/progress.js":
/*!*************************************************!*\
  !*** ./node_modules/element-ui/lib/progress.js ***!
  \*************************************************/
/***/ ((module) => {

eval("module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __nested_webpack_require_187__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __nested_webpack_require_187__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__nested_webpack_require_187__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__nested_webpack_require_187__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__nested_webpack_require_187__.d = function(exports, name, getter) {\n/******/ \t\tif(!__nested_webpack_require_187__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__nested_webpack_require_187__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__nested_webpack_require_187__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __nested_webpack_require_187__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__nested_webpack_require_187__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __nested_webpack_require_187__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__nested_webpack_require_187__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__nested_webpack_require_187__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__nested_webpack_require_187__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__nested_webpack_require_187__.p = \"/dist/\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __nested_webpack_require_187__(__nested_webpack_require_187__.s = 104);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_3673__) {\n\n\"use strict\";\n/* harmony export (binding) */ __nested_webpack_require_3673__.d(__nested_webpack_exports__, \"a\", function() { return normalizeComponent; });\n/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nfunction normalizeComponent (\n  scriptExports,\n  render,\n  staticRenderFns,\n  functionalTemplate,\n  injectStyles,\n  scopeId,\n  moduleIdentifier, /* server only */\n  shadowMode /* vue-cli only */\n) {\n  // Vue.extend constructor export interop\n  var options = typeof scriptExports === 'function'\n    ? scriptExports.options\n    : scriptExports\n\n  // render functions\n  if (render) {\n    options.render = render\n    options.staticRenderFns = staticRenderFns\n    options._compiled = true\n  }\n\n  // functional template\n  if (functionalTemplate) {\n    options.functional = true\n  }\n\n  // scopedId\n  if (scopeId) {\n    options._scopeId = 'data-v-' + scopeId\n  }\n\n  var hook\n  if (moduleIdentifier) { // server build\n    hook = function (context) {\n      // 2.3 injection\n      context =\n        context || // cached call\n        (this.$vnode && this.$vnode.ssrContext) || // stateful\n        (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n      // 2.2 with runInNewContext: true\n      if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n        context = __VUE_SSR_CONTEXT__\n      }\n      // inject component styles\n      if (injectStyles) {\n        injectStyles.call(this, context)\n      }\n      // register component module identifier for async chunk inferrence\n      if (context && context._registeredComponents) {\n        context._registeredComponents.add(moduleIdentifier)\n      }\n    }\n    // used by ssr in case component is cached and beforeCreate\n    // never gets called\n    options._ssrRegister = hook\n  } else if (injectStyles) {\n    hook = shadowMode\n      ? function () { injectStyles.call(this, this.$root.$options.shadowRoot) }\n      : injectStyles\n  }\n\n  if (hook) {\n    if (options.functional) {\n      // for template-only hot-reload because in that case the render fn doesn't\n      // go through the normalizer\n      options._injectStyles = hook\n      // register for functioal component in vue file\n      var originalRender = options.render\n      options.render = function renderWithStyleInjection (h, context) {\n        hook.call(context)\n        return originalRender(h, context)\n      }\n    } else {\n      // inject component registration as beforeCreate hook\n      var existing = options.beforeCreate\n      options.beforeCreate = existing\n        ? [].concat(existing, hook)\n        : [hook]\n    }\n  }\n\n  return {\n    exports: scriptExports,\n    options: options\n  }\n}\n\n\n/***/ }),\n\n/***/ 104:\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_6577__) {\n\n\"use strict\";\n__nested_webpack_require_6577__.r(__nested_webpack_exports__);\n\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/progress/src/progress.vue?vue&type=template&id=229ee406&\nvar render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    {\n      staticClass: \"el-progress\",\n      class: [\n        \"el-progress--\" + _vm.type,\n        _vm.status ? \"is-\" + _vm.status : \"\",\n        {\n          \"el-progress--without-text\": !_vm.showText,\n          \"el-progress--text-inside\": _vm.textInside\n        }\n      ],\n      attrs: {\n        role: \"progressbar\",\n        \"aria-valuenow\": _vm.percentage,\n        \"aria-valuemin\": \"0\",\n        \"aria-valuemax\": \"100\"\n      }\n    },\n    [\n      _vm.type === \"line\"\n        ? _c(\"div\", { staticClass: \"el-progress-bar\" }, [\n            _c(\n              \"div\",\n              {\n                staticClass: \"el-progress-bar__outer\",\n                style: {\n                  height: _vm.strokeWidth + \"px\",\n                  backgroundColor: _vm.defineBackColor\n                }\n              },\n              [\n                _c(\n                  \"div\",\n                  {\n                    staticClass: \"el-progress-bar__inner\",\n                    style: _vm.barStyle\n                  },\n                  [\n                    _vm.showText && _vm.textInside\n                      ? _c(\n                          \"div\",\n                          {\n                            staticClass: \"el-progress-bar__innerText\",\n                            style: { color: _vm.textColor }\n                          },\n                          [_vm._v(_vm._s(_vm.content))]\n                        )\n                      : _vm._e()\n                  ]\n                )\n              ]\n            )\n          ])\n        : _c(\n            \"div\",\n            {\n              staticClass: \"el-progress-circle\",\n              style: { height: _vm.width + \"px\", width: _vm.width + \"px\" }\n            },\n            [\n              _c(\"svg\", { attrs: { viewBox: \"0 0 100 100\" } }, [\n                _c(\"path\", {\n                  staticClass: \"el-progress-circle__track\",\n                  style: _vm.trailPathStyle,\n                  attrs: {\n                    d: _vm.trackPath,\n                    stroke: _vm.defineBackColor,\n                    \"stroke-width\": _vm.relativeStrokeWidth,\n                    fill: \"none\"\n                  }\n                }),\n                _c(\"path\", {\n                  staticClass: \"el-progress-circle__path\",\n                  style: _vm.circlePathStyle,\n                  attrs: {\n                    d: _vm.trackPath,\n                    stroke: _vm.stroke,\n                    fill: \"none\",\n                    \"stroke-linecap\": _vm.strokeLinecap,\n                    \"stroke-width\": _vm.percentage ? _vm.relativeStrokeWidth : 0\n                  }\n                })\n              ])\n            ]\n          ),\n      _vm.showText && !_vm.textInside\n        ? _c(\n            \"div\",\n            {\n              staticClass: \"el-progress__text\",\n              style: {\n                fontSize: _vm.progressTextSize + \"px\",\n                color: _vm.textColor\n              }\n            },\n            [\n              !_vm.status\n                ? [_vm._v(_vm._s(_vm.content))]\n                : _c(\"i\", { class: _vm.iconClass })\n            ],\n            2\n          )\n        : _vm._e()\n    ]\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/progress/src/progress.vue?vue&type=template&id=229ee406&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/progress/src/progress.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ var progressvue_type_script_lang_js_ = ({\n  name: 'ElProgress',\n  props: {\n    type: {\n      type: String,\n      default: 'line',\n      validator: function validator(val) {\n        return ['line', 'circle', 'dashboard'].indexOf(val) > -1;\n      }\n    },\n    percentage: {\n      type: Number,\n      default: 0,\n      required: true,\n      validator: function validator(val) {\n        return val >= 0 && val <= 100;\n      }\n    },\n    status: {\n      type: String,\n      validator: function validator(val) {\n        return ['success', 'exception', 'warning'].indexOf(val) > -1;\n      }\n    },\n    strokeWidth: {\n      type: Number,\n      default: 6\n    },\n    strokeLinecap: {\n      type: String,\n      default: 'round'\n    },\n    textInside: {\n      type: Boolean,\n      default: false\n    },\n    width: {\n      type: Number,\n      default: 126\n    },\n    showText: {\n      type: Boolean,\n      default: true\n    },\n    color: {\n      type: [String, Array, Function],\n      default: ''\n    },\n    defineBackColor: {\n      type: [String, Array, Function],\n      default: '#ebeef5'\n    },\n    textColor: {\n      type: [String, Array, Function],\n      default: '#606266'\n    },\n    format: Function\n  },\n  computed: {\n    barStyle: function barStyle() {\n      var style = {};\n      style.width = this.percentage + '%';\n      style.backgroundColor = this.getCurrentColor(this.percentage);\n      return style;\n    },\n    relativeStrokeWidth: function relativeStrokeWidth() {\n      return (this.strokeWidth / this.width * 100).toFixed(1);\n    },\n    radius: function radius() {\n      if (this.type === 'circle' || this.type === 'dashboard') {\n        return parseInt(50 - parseFloat(this.relativeStrokeWidth) / 2, 10);\n      } else {\n        return 0;\n      }\n    },\n    trackPath: function trackPath() {\n      var radius = this.radius;\n      var isDashboard = this.type === 'dashboard';\n      return '\\n        M 50 50\\n        m 0 ' + (isDashboard ? '' : '-') + radius + '\\n        a ' + radius + ' ' + radius + ' 0 1 1 0 ' + (isDashboard ? '-' : '') + radius * 2 + '\\n        a ' + radius + ' ' + radius + ' 0 1 1 0 ' + (isDashboard ? '' : '-') + radius * 2 + '\\n        ';\n    },\n    perimeter: function perimeter() {\n      return 2 * Math.PI * this.radius;\n    },\n    rate: function rate() {\n      return this.type === 'dashboard' ? 0.75 : 1;\n    },\n    strokeDashoffset: function strokeDashoffset() {\n      var offset = -1 * this.perimeter * (1 - this.rate) / 2;\n      return offset + 'px';\n    },\n    trailPathStyle: function trailPathStyle() {\n      return {\n        strokeDasharray: this.perimeter * this.rate + 'px, ' + this.perimeter + 'px',\n        strokeDashoffset: this.strokeDashoffset\n      };\n    },\n    circlePathStyle: function circlePathStyle() {\n      return {\n        strokeDasharray: this.perimeter * this.rate * (this.percentage / 100) + 'px, ' + this.perimeter + 'px',\n        strokeDashoffset: this.strokeDashoffset,\n        transition: 'stroke-dasharray 0.6s ease 0s, stroke 0.6s ease'\n      };\n    },\n    stroke: function stroke() {\n      var ret = void 0;\n      if (this.color) {\n        ret = this.getCurrentColor(this.percentage);\n      } else {\n        switch (this.status) {\n          case 'success':\n            ret = '#13ce66';\n            break;\n          case 'exception':\n            ret = '#ff4949';\n            break;\n          case 'warning':\n            ret = '#e6a23c';\n            break;\n          default:\n            ret = '#20a0ff';\n        }\n      }\n      return ret;\n    },\n    iconClass: function iconClass() {\n      if (this.status === 'warning') {\n        return 'el-icon-warning';\n      }\n      if (this.type === 'line') {\n        return this.status === 'success' ? 'el-icon-circle-check' : 'el-icon-circle-close';\n      } else {\n        return this.status === 'success' ? 'el-icon-check' : 'el-icon-close';\n      }\n    },\n    progressTextSize: function progressTextSize() {\n      return this.type === 'line' ? 12 + this.strokeWidth * 0.4 : this.width * 0.111111 + 2;\n    },\n    content: function content() {\n      if (typeof this.format === 'function') {\n        return this.format(this.percentage) || '';\n      } else {\n        return this.percentage + '%';\n      }\n    }\n  },\n  methods: {\n    getCurrentColor: function getCurrentColor(percentage) {\n      if (typeof this.color === 'function') {\n        return this.color(percentage);\n      } else if (typeof this.color === 'string') {\n        return this.color;\n      } else {\n        return this.getLevelColor(percentage);\n      }\n    },\n    getLevelColor: function getLevelColor(percentage) {\n      var colorArray = this.getColorArray().sort(function (a, b) {\n        return a.percentage - b.percentage;\n      });\n\n      for (var i = 0; i < colorArray.length; i++) {\n        if (colorArray[i].percentage > percentage) {\n          return colorArray[i].color;\n        }\n      }\n      return colorArray[colorArray.length - 1].color;\n    },\n    getColorArray: function getColorArray() {\n      var color = this.color;\n      var span = 100 / color.length;\n      return color.map(function (seriesColor, index) {\n        if (typeof seriesColor === 'string') {\n          return {\n            color: seriesColor,\n            percentage: (index + 1) * span\n          };\n        }\n        return seriesColor;\n      });\n    }\n  }\n});\n// CONCATENATED MODULE: ./packages/progress/src/progress.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_progressvue_type_script_lang_js_ = (progressvue_type_script_lang_js_); \n// EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js\nvar componentNormalizer = __nested_webpack_require_6577__(0);\n\n// CONCATENATED MODULE: ./packages/progress/src/progress.vue\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(componentNormalizer[\"a\" /* default */])(\n  src_progressvue_type_script_lang_js_,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"packages/progress/src/progress.vue\"\n/* harmony default export */ var progress = (component.exports);\n// CONCATENATED MODULE: ./packages/progress/index.js\n\n\n/* istanbul ignore next */\nprogress.install = function (Vue) {\n  Vue.component(progress.name, progress);\n};\n\n/* harmony default export */ var packages_progress = __nested_webpack_exports__[\"default\"] = (progress);\n\n/***/ })\n\n/******/ });//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvcHJvZ3Jlc3MuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSw4QkFBOEI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsOEJBQW1CO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEVBQTBFLDhCQUFtQjtBQUM3RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsOEJBQW1CO0FBQzdCO0FBQ0E7QUFDQSxVQUFVLDhCQUFtQjtBQUM3QjtBQUNBO0FBQ0EsVUFBVSw4QkFBbUI7QUFDN0IsZUFBZSw4QkFBbUI7QUFDbEMsbURBQW1ELCtCQUErQjtBQUNsRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsOEJBQW1CO0FBQzdCO0FBQ0EsaUVBQWlFLGlCQUFpQjtBQUNsRjtBQUNBLDBEQUEwRCxhQUFhO0FBQ3ZFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSw4QkFBbUI7QUFDN0IsZ0NBQWdDLDhCQUFtQjtBQUNuRDtBQUNBO0FBQ0E7QUFDQSxXQUFXLDhCQUFtQjtBQUM5QixrREFBa0QsZ0NBQWdDO0FBQ2xGLDBFQUEwRSw4QkFBbUIsNEJBQTRCLG9CQUFvQjtBQUM3STtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsOEJBQW1CO0FBQzdCO0FBQ0Esb0NBQW9DLDRCQUE0QjtBQUNoRSwwQ0FBMEM7QUFDMUMsV0FBVyw4QkFBbUI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLDhCQUFtQixrQ0FBa0M7QUFDL0Q7QUFDQTtBQUNBLFVBQVUsOEJBQW1CO0FBQzdCO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQiw4QkFBbUIsQ0FBQyw4QkFBbUI7QUFDeEQsVUFBVTtBQUNWO0FBQ0E7O0FBRUE7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsK0JBQW1COztB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QUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLE9BQU87O0FBRVAsc0JBQXNCLHVCQUF1QjtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsK0JBQW1COztBQUU3Qzs7Ozs7O0FBTUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLEtBQUssRUFBRSxZQUFZO0FBQ3ZCO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEscURBQXFELDBCQUFtQjs7QUFFeEUsT0FBTzs7QUFFUCxVQUFVIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2VsZW1lbnQtdWkvbGliL3Byb2dyZXNzLmpzPzI0OWIiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPVxuLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcFxuLyoqKioqKi8gXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuLyoqKioqKi8gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuLyoqKioqKi8gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4vKioqKioqLyBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbi8qKioqKiovIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4vKioqKioqLyBcdFx0XHRpOiBtb2R1bGVJZCxcbi8qKioqKiovIFx0XHRcdGw6IGZhbHNlLFxuLyoqKioqKi8gXHRcdFx0ZXhwb3J0czoge31cbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbi8qKioqKiovIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuLyoqKioqKi8gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbi8qKioqKiovIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4vKioqKioqLyBcdH1cbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbi8qKioqKiovIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbi8qKioqKiovIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbi8qKioqKiovIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4vKioqKioqLyBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4vKioqKioqLyBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuLyoqKioqKi8gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4vKioqKioqLyBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuLyoqKioqKi8gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4vKioqKioqLyBcdFx0cmV0dXJuIG5zO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4vKioqKioqLyBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4vKioqKioqLyBcdFx0cmV0dXJuIGdldHRlcjtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIi9kaXN0L1wiO1xuLyoqKioqKi9cbi8qKioqKiovXG4vKioqKioqLyBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLyoqKioqKi8gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAxMDQpO1xuLyoqKioqKi8gfSlcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyAoe1xuXG4vKioqLyAwOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJhXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gbm9ybWFsaXplQ29tcG9uZW50OyB9KTtcbi8qIGdsb2JhbHMgX19WVUVfU1NSX0NPTlRFWFRfXyAqL1xuXG4vLyBJTVBPUlRBTlQ6IERvIE5PVCB1c2UgRVMyMDE1IGZlYXR1cmVzIGluIHRoaXMgZmlsZSAoZXhjZXB0IGZvciBtb2R1bGVzKS5cbi8vIFRoaXMgbW9kdWxlIGlzIGEgcnVudGltZSB1dGlsaXR5IGZvciBjbGVhbmVyIGNvbXBvbmVudCBtb2R1bGUgb3V0cHV0IGFuZCB3aWxsXG4vLyBiZSBpbmNsdWRlZCBpbiB0aGUgZmluYWwgd2VicGFjayB1c2VyIGJ1bmRsZS5cblxuZnVuY3Rpb24gbm9ybWFsaXplQ29tcG9uZW50IChcbiAgc2NyaXB0RXhwb3J0cyxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZ1bmN0aW9uYWxUZW1wbGF0ZSxcbiAgaW5qZWN0U3R5bGVzLFxuICBzY29wZUlkLFxuICBtb2R1bGVJZGVudGlmaWVyLCAvKiBzZXJ2ZXIgb25seSAqL1xuICBzaGFkb3dNb2RlIC8qIHZ1ZS1jbGkgb25seSAqL1xuKSB7XG4gIC8vIFZ1ZS5leHRlbmQgY29uc3RydWN0b3IgZXhwb3J0IGludGVyb3BcbiAgdmFyIG9wdGlvbnMgPSB0eXBlb2Ygc2NyaXB0RXhwb3J0cyA9PT0gJ2Z1bmN0aW9uJ1xuICAgID8gc2NyaXB0RXhwb3J0cy5vcHRpb25zXG4gICAgOiBzY3JpcHRFeHBvcnRzXG5cbiAgLy8gcmVuZGVyIGZ1bmN0aW9uc1xuICBpZiAocmVuZGVyKSB7XG4gICAgb3B0aW9ucy5yZW5kZXIgPSByZW5kZXJcbiAgICBvcHRpb25zLnN0YXRpY1JlbmRlckZucyA9IHN0YXRpY1JlbmRlckZuc1xuICAgIG9wdGlvbnMuX2NvbXBpbGVkID0gdHJ1ZVxuICB9XG5cbiAgLy8gZnVuY3Rpb25hbCB0ZW1wbGF0ZVxuICBpZiAoZnVuY3Rpb25hbFRlbXBsYXRlKSB7XG4gICAgb3B0aW9ucy5mdW5jdGlvbmFsID0gdHJ1ZVxuICB9XG5cbiAgLy8gc2NvcGVkSWRcbiAgaWYgKHNjb3BlSWQpIHtcbiAgICBvcHRpb25zLl9zY29wZUlkID0gJ2RhdGEtdi0nICsgc2NvcGVJZFxuICB9XG5cbiAgdmFyIGhvb2tcbiAgaWYgKG1vZHVsZUlkZW50aWZpZXIpIHsgLy8gc2VydmVyIGJ1aWxkXG4gICAgaG9vayA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgICAvLyAyLjMgaW5qZWN0aW9uXG4gICAgICBjb250ZXh0ID1cbiAgICAgICAgY29udGV4dCB8fCAvLyBjYWNoZWQgY2FsbFxuICAgICAgICAodGhpcy4kdm5vZGUgJiYgdGhpcy4kdm5vZGUuc3NyQ29udGV4dCkgfHwgLy8gc3RhdGVmdWxcbiAgICAgICAgKHRoaXMucGFyZW50ICYmIHRoaXMucGFyZW50LiR2bm9kZSAmJiB0aGlzLnBhcmVudC4kdm5vZGUuc3NyQ29udGV4dCkgLy8gZnVuY3Rpb25hbFxuICAgICAgLy8gMi4yIHdpdGggcnVuSW5OZXdDb250ZXh0OiB0cnVlXG4gICAgICBpZiAoIWNvbnRleHQgJiYgdHlwZW9mIF9fVlVFX1NTUl9DT05URVhUX18gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGNvbnRleHQgPSBfX1ZVRV9TU1JfQ09OVEVYVF9fXG4gICAgICB9XG4gICAgICAvLyBpbmplY3QgY29tcG9uZW50IHN0eWxlc1xuICAgICAgaWYgKGluamVjdFN0eWxlcykge1xuICAgICAgICBpbmplY3RTdHlsZXMuY2FsbCh0aGlzLCBjb250ZXh0KVxuICAgICAgfVxuICAgICAgLy8gcmVnaXN0ZXIgY29tcG9uZW50IG1vZHVsZSBpZGVudGlmaWVyIGZvciBhc3luYyBjaHVuayBpbmZlcnJlbmNlXG4gICAgICBpZiAoY29udGV4dCAmJiBjb250ZXh0Ll9yZWdpc3RlcmVkQ29tcG9uZW50cykge1xuICAgICAgICBjb250ZXh0Ll9yZWdpc3RlcmVkQ29tcG9uZW50cy5hZGQobW9kdWxlSWRlbnRpZmllcilcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gdXNlZCBieSBzc3IgaW4gY2FzZSBjb21wb25lbnQgaXMgY2FjaGVkIGFuZCBiZWZvcmVDcmVhdGVcbiAgICAvLyBuZXZlciBnZXRzIGNhbGxlZFxuICAgIG9wdGlvbnMuX3NzclJlZ2lzdGVyID0gaG9va1xuICB9IGVsc2UgaWYgKGluamVjdFN0eWxlcykge1xuICAgIGhvb2sgPSBzaGFkb3dNb2RlXG4gICAgICA/IGZ1bmN0aW9uICgpIHsgaW5qZWN0U3R5bGVzLmNhbGwodGhpcywgdGhpcy4kcm9vdC4kb3B0aW9ucy5zaGFkb3dSb290KSB9XG4gICAgICA6IGluamVjdFN0eWxlc1xuICB9XG5cbiAgaWYgKGhvb2spIHtcbiAgICBpZiAob3B0aW9ucy5mdW5jdGlvbmFsKSB7XG4gICAgICAvLyBmb3IgdGVtcGxhdGUtb25seSBob3QtcmVsb2FkIGJlY2F1c2UgaW4gdGhhdCBjYXNlIHRoZSByZW5kZXIgZm4gZG9lc24ndFxuICAgICAgLy8gZ28gdGhyb3VnaCB0aGUgbm9ybWFsaXplclxuICAgICAgb3B0aW9ucy5faW5qZWN0U3R5bGVzID0gaG9va1xuICAgICAgLy8gcmVnaXN0ZXIgZm9yIGZ1bmN0aW9hbCBjb21wb25lbnQgaW4gdnVlIGZpbGVcbiAgICAgIHZhciBvcmlnaW5hbFJlbmRlciA9IG9wdGlvbnMucmVuZGVyXG4gICAgICBvcHRpb25zLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcldpdGhTdHlsZUluamVjdGlvbiAoaCwgY29udGV4dCkge1xuICAgICAgICBob29rLmNhbGwoY29udGV4dClcbiAgICAgICAgcmV0dXJuIG9yaWdpbmFsUmVuZGVyKGgsIGNvbnRleHQpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGluamVjdCBjb21wb25lbnQgcmVnaXN0cmF0aW9uIGFzIGJlZm9yZUNyZWF0ZSBob29rXG4gICAgICB2YXIgZXhpc3RpbmcgPSBvcHRpb25zLmJlZm9yZUNyZWF0ZVxuICAgICAgb3B0aW9ucy5iZWZvcmVDcmVhdGUgPSBleGlzdGluZ1xuICAgICAgICA/IFtdLmNvbmNhdChleGlzdGluZywgaG9vaylcbiAgICAgICAgOiBbaG9va11cbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGV4cG9ydHM6IHNjcmlwdEV4cG9ydHMsXG4gICAgb3B0aW9uczogb3B0aW9uc1xuICB9XG59XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDEwNDpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvcHJvZ3Jlc3Mvc3JjL3Byb2dyZXNzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yMjllZTQwNiZcbnZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICB7XG4gICAgICBzdGF0aWNDbGFzczogXCJlbC1wcm9ncmVzc1wiLFxuICAgICAgY2xhc3M6IFtcbiAgICAgICAgXCJlbC1wcm9ncmVzcy0tXCIgKyBfdm0udHlwZSxcbiAgICAgICAgX3ZtLnN0YXR1cyA/IFwiaXMtXCIgKyBfdm0uc3RhdHVzIDogXCJcIixcbiAgICAgICAge1xuICAgICAgICAgIFwiZWwtcHJvZ3Jlc3MtLXdpdGhvdXQtdGV4dFwiOiAhX3ZtLnNob3dUZXh0LFxuICAgICAgICAgIFwiZWwtcHJvZ3Jlc3MtLXRleHQtaW5zaWRlXCI6IF92bS50ZXh0SW5zaWRlXG4gICAgICAgIH1cbiAgICAgIF0sXG4gICAgICBhdHRyczoge1xuICAgICAgICByb2xlOiBcInByb2dyZXNzYmFyXCIsXG4gICAgICAgIFwiYXJpYS12YWx1ZW5vd1wiOiBfdm0ucGVyY2VudGFnZSxcbiAgICAgICAgXCJhcmlhLXZhbHVlbWluXCI6IFwiMFwiLFxuICAgICAgICBcImFyaWEtdmFsdWVtYXhcIjogXCIxMDBcIlxuICAgICAgfVxuICAgIH0sXG4gICAgW1xuICAgICAgX3ZtLnR5cGUgPT09IFwibGluZVwiXG4gICAgICAgID8gX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJlbC1wcm9ncmVzcy1iYXJcIiB9LCBbXG4gICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXByb2dyZXNzLWJhcl9fb3V0ZXJcIixcbiAgICAgICAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBfdm0uc3Ryb2tlV2lkdGggKyBcInB4XCIsXG4gICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IF92bS5kZWZpbmVCYWNrQ29sb3JcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXByb2dyZXNzLWJhcl9faW5uZXJcIixcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU6IF92bS5iYXJTdHlsZVxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgX3ZtLnNob3dUZXh0ICYmIF92bS50ZXh0SW5zaWRlXG4gICAgICAgICAgICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXByb2dyZXNzLWJhcl9faW5uZXJUZXh0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU6IHsgY29sb3I6IF92bS50ZXh0Q29sb3IgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBbX3ZtLl92KF92bS5fcyhfdm0uY29udGVudCkpXVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIClcbiAgICAgICAgICBdKVxuICAgICAgICA6IF9jKFxuICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtcHJvZ3Jlc3MtY2lyY2xlXCIsXG4gICAgICAgICAgICAgIHN0eWxlOiB7IGhlaWdodDogX3ZtLndpZHRoICsgXCJweFwiLCB3aWR0aDogX3ZtLndpZHRoICsgXCJweFwiIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF9jKFwic3ZnXCIsIHsgYXR0cnM6IHsgdmlld0JveDogXCIwIDAgMTAwIDEwMFwiIH0gfSwgW1xuICAgICAgICAgICAgICAgIF9jKFwicGF0aFwiLCB7XG4gICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1wcm9ncmVzcy1jaXJjbGVfX3RyYWNrXCIsXG4gICAgICAgICAgICAgICAgICBzdHlsZTogX3ZtLnRyYWlsUGF0aFN0eWxlLFxuICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgZDogX3ZtLnRyYWNrUGF0aCxcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBfdm0uZGVmaW5lQmFja0NvbG9yLFxuICAgICAgICAgICAgICAgICAgICBcInN0cm9rZS13aWR0aFwiOiBfdm0ucmVsYXRpdmVTdHJva2VXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgZmlsbDogXCJub25lXCJcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBfYyhcInBhdGhcIiwge1xuICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtcHJvZ3Jlc3MtY2lyY2xlX19wYXRoXCIsXG4gICAgICAgICAgICAgICAgICBzdHlsZTogX3ZtLmNpcmNsZVBhdGhTdHlsZSxcbiAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgIGQ6IF92bS50cmFja1BhdGgsXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZTogX3ZtLnN0cm9rZSxcbiAgICAgICAgICAgICAgICAgICAgZmlsbDogXCJub25lXCIsXG4gICAgICAgICAgICAgICAgICAgIFwic3Ryb2tlLWxpbmVjYXBcIjogX3ZtLnN0cm9rZUxpbmVjYXAsXG4gICAgICAgICAgICAgICAgICAgIFwic3Ryb2tlLXdpZHRoXCI6IF92bS5wZXJjZW50YWdlID8gX3ZtLnJlbGF0aXZlU3Ryb2tlV2lkdGggOiAwXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICApLFxuICAgICAgX3ZtLnNob3dUZXh0ICYmICFfdm0udGV4dEluc2lkZVxuICAgICAgICA/IF9jKFxuICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtcHJvZ3Jlc3NfX3RleHRcIixcbiAgICAgICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgICAgICBmb250U2l6ZTogX3ZtLnByb2dyZXNzVGV4dFNpemUgKyBcInB4XCIsXG4gICAgICAgICAgICAgICAgY29sb3I6IF92bS50ZXh0Q29sb3JcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgIV92bS5zdGF0dXNcbiAgICAgICAgICAgICAgICA/IFtfdm0uX3YoX3ZtLl9zKF92bS5jb250ZW50KSldXG4gICAgICAgICAgICAgICAgOiBfYyhcImlcIiwgeyBjbGFzczogX3ZtLmljb25DbGFzcyB9KVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIDJcbiAgICAgICAgICApXG4gICAgICAgIDogX3ZtLl9lKClcbiAgICBdXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9wcm9ncmVzcy9zcmMvcHJvZ3Jlc3MudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTIyOWVlNDA2JlxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9wcm9ncmVzcy9zcmMvcHJvZ3Jlc3MudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcHJvZ3Jlc3N2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBuYW1lOiAnRWxQcm9ncmVzcycsXG4gIHByb3BzOiB7XG4gICAgdHlwZToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2xpbmUnLFxuICAgICAgdmFsaWRhdG9yOiBmdW5jdGlvbiB2YWxpZGF0b3IodmFsKSB7XG4gICAgICAgIHJldHVybiBbJ2xpbmUnLCAnY2lyY2xlJywgJ2Rhc2hib2FyZCddLmluZGV4T2YodmFsKSA+IC0xO1xuICAgICAgfVxuICAgIH0sXG4gICAgcGVyY2VudGFnZToge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZGVmYXVsdDogMCxcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgdmFsaWRhdG9yOiBmdW5jdGlvbiB2YWxpZGF0b3IodmFsKSB7XG4gICAgICAgIHJldHVybiB2YWwgPj0gMCAmJiB2YWwgPD0gMTAwO1xuICAgICAgfVxuICAgIH0sXG4gICAgc3RhdHVzOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICB2YWxpZGF0b3I6IGZ1bmN0aW9uIHZhbGlkYXRvcih2YWwpIHtcbiAgICAgICAgcmV0dXJuIFsnc3VjY2VzcycsICdleGNlcHRpb24nLCAnd2FybmluZyddLmluZGV4T2YodmFsKSA+IC0xO1xuICAgICAgfVxuICAgIH0sXG4gICAgc3Ryb2tlV2lkdGg6IHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGRlZmF1bHQ6IDZcbiAgICB9LFxuICAgIHN0cm9rZUxpbmVjYXA6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdyb3VuZCdcbiAgICB9LFxuICAgIHRleHRJbnNpZGU6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0sXG4gICAgd2lkdGg6IHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGRlZmF1bHQ6IDEyNlxuICAgIH0sXG4gICAgc2hvd1RleHQ6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSxcbiAgICBjb2xvcjoge1xuICAgICAgdHlwZTogW1N0cmluZywgQXJyYXksIEZ1bmN0aW9uXSxcbiAgICAgIGRlZmF1bHQ6ICcnXG4gICAgfSxcbiAgICBkZWZpbmVCYWNrQ29sb3I6IHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIEFycmF5LCBGdW5jdGlvbl0sXG4gICAgICBkZWZhdWx0OiAnI2ViZWVmNSdcbiAgICB9LFxuICAgIHRleHRDb2xvcjoge1xuICAgICAgdHlwZTogW1N0cmluZywgQXJyYXksIEZ1bmN0aW9uXSxcbiAgICAgIGRlZmF1bHQ6ICcjNjA2MjY2J1xuICAgIH0sXG4gICAgZm9ybWF0OiBGdW5jdGlvblxuICB9LFxuICBjb21wdXRlZDoge1xuICAgIGJhclN0eWxlOiBmdW5jdGlvbiBiYXJTdHlsZSgpIHtcbiAgICAgIHZhciBzdHlsZSA9IHt9O1xuICAgICAgc3R5bGUud2lkdGggPSB0aGlzLnBlcmNlbnRhZ2UgKyAnJSc7XG4gICAgICBzdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSB0aGlzLmdldEN1cnJlbnRDb2xvcih0aGlzLnBlcmNlbnRhZ2UpO1xuICAgICAgcmV0dXJuIHN0eWxlO1xuICAgIH0sXG4gICAgcmVsYXRpdmVTdHJva2VXaWR0aDogZnVuY3Rpb24gcmVsYXRpdmVTdHJva2VXaWR0aCgpIHtcbiAgICAgIHJldHVybiAodGhpcy5zdHJva2VXaWR0aCAvIHRoaXMud2lkdGggKiAxMDApLnRvRml4ZWQoMSk7XG4gICAgfSxcbiAgICByYWRpdXM6IGZ1bmN0aW9uIHJhZGl1cygpIHtcbiAgICAgIGlmICh0aGlzLnR5cGUgPT09ICdjaXJjbGUnIHx8IHRoaXMudHlwZSA9PT0gJ2Rhc2hib2FyZCcpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KDUwIC0gcGFyc2VGbG9hdCh0aGlzLnJlbGF0aXZlU3Ryb2tlV2lkdGgpIC8gMiwgMTApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG4gICAgfSxcbiAgICB0cmFja1BhdGg6IGZ1bmN0aW9uIHRyYWNrUGF0aCgpIHtcbiAgICAgIHZhciByYWRpdXMgPSB0aGlzLnJhZGl1cztcbiAgICAgIHZhciBpc0Rhc2hib2FyZCA9IHRoaXMudHlwZSA9PT0gJ2Rhc2hib2FyZCc7XG4gICAgICByZXR1cm4gJ1xcbiAgICAgICAgTSA1MCA1MFxcbiAgICAgICAgbSAwICcgKyAoaXNEYXNoYm9hcmQgPyAnJyA6ICctJykgKyByYWRpdXMgKyAnXFxuICAgICAgICBhICcgKyByYWRpdXMgKyAnICcgKyByYWRpdXMgKyAnIDAgMSAxIDAgJyArIChpc0Rhc2hib2FyZCA/ICctJyA6ICcnKSArIHJhZGl1cyAqIDIgKyAnXFxuICAgICAgICBhICcgKyByYWRpdXMgKyAnICcgKyByYWRpdXMgKyAnIDAgMSAxIDAgJyArIChpc0Rhc2hib2FyZCA/ICcnIDogJy0nKSArIHJhZGl1cyAqIDIgKyAnXFxuICAgICAgICAnO1xuICAgIH0sXG4gICAgcGVyaW1ldGVyOiBmdW5jdGlvbiBwZXJpbWV0ZXIoKSB7XG4gICAgICByZXR1cm4gMiAqIE1hdGguUEkgKiB0aGlzLnJhZGl1cztcbiAgICB9LFxuICAgIHJhdGU6IGZ1bmN0aW9uIHJhdGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy50eXBlID09PSAnZGFzaGJvYXJkJyA/IDAuNzUgOiAxO1xuICAgIH0sXG4gICAgc3Ryb2tlRGFzaG9mZnNldDogZnVuY3Rpb24gc3Ryb2tlRGFzaG9mZnNldCgpIHtcbiAgICAgIHZhciBvZmZzZXQgPSAtMSAqIHRoaXMucGVyaW1ldGVyICogKDEgLSB0aGlzLnJhdGUpIC8gMjtcbiAgICAgIHJldHVybiBvZmZzZXQgKyAncHgnO1xuICAgIH0sXG4gICAgdHJhaWxQYXRoU3R5bGU6IGZ1bmN0aW9uIHRyYWlsUGF0aFN0eWxlKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3Ryb2tlRGFzaGFycmF5OiB0aGlzLnBlcmltZXRlciAqIHRoaXMucmF0ZSArICdweCwgJyArIHRoaXMucGVyaW1ldGVyICsgJ3B4JyxcbiAgICAgICAgc3Ryb2tlRGFzaG9mZnNldDogdGhpcy5zdHJva2VEYXNob2Zmc2V0XG4gICAgICB9O1xuICAgIH0sXG4gICAgY2lyY2xlUGF0aFN0eWxlOiBmdW5jdGlvbiBjaXJjbGVQYXRoU3R5bGUoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdHJva2VEYXNoYXJyYXk6IHRoaXMucGVyaW1ldGVyICogdGhpcy5yYXRlICogKHRoaXMucGVyY2VudGFnZSAvIDEwMCkgKyAncHgsICcgKyB0aGlzLnBlcmltZXRlciArICdweCcsXG4gICAgICAgIHN0cm9rZURhc2hvZmZzZXQ6IHRoaXMuc3Ryb2tlRGFzaG9mZnNldCxcbiAgICAgICAgdHJhbnNpdGlvbjogJ3N0cm9rZS1kYXNoYXJyYXkgMC42cyBlYXNlIDBzLCBzdHJva2UgMC42cyBlYXNlJ1xuICAgICAgfTtcbiAgICB9LFxuICAgIHN0cm9rZTogZnVuY3Rpb24gc3Ryb2tlKCkge1xuICAgICAgdmFyIHJldCA9IHZvaWQgMDtcbiAgICAgIGlmICh0aGlzLmNvbG9yKSB7XG4gICAgICAgIHJldCA9IHRoaXMuZ2V0Q3VycmVudENvbG9yKHRoaXMucGVyY2VudGFnZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzd2l0Y2ggKHRoaXMuc3RhdHVzKSB7XG4gICAgICAgICAgY2FzZSAnc3VjY2Vzcyc6XG4gICAgICAgICAgICByZXQgPSAnIzEzY2U2Nic7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdleGNlcHRpb24nOlxuICAgICAgICAgICAgcmV0ID0gJyNmZjQ5NDknO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnd2FybmluZyc6XG4gICAgICAgICAgICByZXQgPSAnI2U2YTIzYyc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0ID0gJyMyMGEwZmYnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmV0O1xuICAgIH0sXG4gICAgaWNvbkNsYXNzOiBmdW5jdGlvbiBpY29uQ2xhc3MoKSB7XG4gICAgICBpZiAodGhpcy5zdGF0dXMgPT09ICd3YXJuaW5nJykge1xuICAgICAgICByZXR1cm4gJ2VsLWljb24td2FybmluZyc7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy50eXBlID09PSAnbGluZScpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdHVzID09PSAnc3VjY2VzcycgPyAnZWwtaWNvbi1jaXJjbGUtY2hlY2snIDogJ2VsLWljb24tY2lyY2xlLWNsb3NlJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXR1cyA9PT0gJ3N1Y2Nlc3MnID8gJ2VsLWljb24tY2hlY2snIDogJ2VsLWljb24tY2xvc2UnO1xuICAgICAgfVxuICAgIH0sXG4gICAgcHJvZ3Jlc3NUZXh0U2l6ZTogZnVuY3Rpb24gcHJvZ3Jlc3NUZXh0U2l6ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnR5cGUgPT09ICdsaW5lJyA/IDEyICsgdGhpcy5zdHJva2VXaWR0aCAqIDAuNCA6IHRoaXMud2lkdGggKiAwLjExMTExMSArIDI7XG4gICAgfSxcbiAgICBjb250ZW50OiBmdW5jdGlvbiBjb250ZW50KCkge1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLmZvcm1hdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXQodGhpcy5wZXJjZW50YWdlKSB8fCAnJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBlcmNlbnRhZ2UgKyAnJSc7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBtZXRob2RzOiB7XG4gICAgZ2V0Q3VycmVudENvbG9yOiBmdW5jdGlvbiBnZXRDdXJyZW50Q29sb3IocGVyY2VudGFnZSkge1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbG9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbG9yKHBlcmNlbnRhZ2UpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5jb2xvciA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sb3I7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRMZXZlbENvbG9yKHBlcmNlbnRhZ2UpO1xuICAgICAgfVxuICAgIH0sXG4gICAgZ2V0TGV2ZWxDb2xvcjogZnVuY3Rpb24gZ2V0TGV2ZWxDb2xvcihwZXJjZW50YWdlKSB7XG4gICAgICB2YXIgY29sb3JBcnJheSA9IHRoaXMuZ2V0Q29sb3JBcnJheSgpLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgcmV0dXJuIGEucGVyY2VudGFnZSAtIGIucGVyY2VudGFnZTtcbiAgICAgIH0pO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbG9yQXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGNvbG9yQXJyYXlbaV0ucGVyY2VudGFnZSA+IHBlcmNlbnRhZ2UpIHtcbiAgICAgICAgICByZXR1cm4gY29sb3JBcnJheVtpXS5jb2xvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbG9yQXJyYXlbY29sb3JBcnJheS5sZW5ndGggLSAxXS5jb2xvcjtcbiAgICB9LFxuICAgIGdldENvbG9yQXJyYXk6IGZ1bmN0aW9uIGdldENvbG9yQXJyYXkoKSB7XG4gICAgICB2YXIgY29sb3IgPSB0aGlzLmNvbG9yO1xuICAgICAgdmFyIHNwYW4gPSAxMDAgLyBjb2xvci5sZW5ndGg7XG4gICAgICByZXR1cm4gY29sb3IubWFwKGZ1bmN0aW9uIChzZXJpZXNDb2xvciwgaW5kZXgpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZXJpZXNDb2xvciA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29sb3I6IHNlcmllc0NvbG9yLFxuICAgICAgICAgICAgcGVyY2VudGFnZTogKGluZGV4ICsgMSkgKiBzcGFuXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2VyaWVzQ29sb3I7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9wcm9ncmVzcy9zcmMvcHJvZ3Jlc3MudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY19wcm9ncmVzc3Z1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChwcm9ncmVzc3Z1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gRVhURVJOQUwgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcbnZhciBjb21wb25lbnROb3JtYWxpemVyID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9wcm9ncmVzcy9zcmMvcHJvZ3Jlc3MudnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgY29tcG9uZW50ID0gT2JqZWN0KGNvbXBvbmVudE5vcm1hbGl6ZXJbXCJhXCIgLyogZGVmYXVsdCAqL10pKFxuICBzcmNfcHJvZ3Jlc3N2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBhcGk7IH1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvcHJvZ3Jlc3Mvc3JjL3Byb2dyZXNzLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwcm9ncmVzcyA9IChjb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3Byb2dyZXNzL2luZGV4LmpzXG5cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbnByb2dyZXNzLmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG4gIFZ1ZS5jb21wb25lbnQocHJvZ3Jlc3MubmFtZSwgcHJvZ3Jlc3MpO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcGFja2FnZXNfcHJvZ3Jlc3MgPSBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChwcm9ncmVzcyk7XG5cbi8qKiovIH0pXG5cbi8qKioqKiovIH0pOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/progress.js\n");

/***/ }),

/***/ "./node_modules/element-ui/lib/radio.js":
/*!**********************************************!*\
  !*** ./node_modules/element-ui/lib/radio.js ***!
  \**********************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

eval("module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __nested_webpack_require_187__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __nested_webpack_require_187__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__nested_webpack_require_187__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__nested_webpack_require_187__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__nested_webpack_require_187__.d = function(exports, name, getter) {\n/******/ \t\tif(!__nested_webpack_require_187__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__nested_webpack_require_187__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__nested_webpack_require_187__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __nested_webpack_require_187__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__nested_webpack_require_187__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __nested_webpack_require_187__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__nested_webpack_require_187__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__nested_webpack_require_187__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__nested_webpack_require_187__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__nested_webpack_require_187__.p = \"/dist/\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __nested_webpack_require_187__(__nested_webpack_require_187__.s = 88);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_3672__) {\n\n\"use strict\";\n/* harmony export (binding) */ __nested_webpack_require_3672__.d(__nested_webpack_exports__, \"a\", function() { return normalizeComponent; });\n/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nfunction normalizeComponent (\n  scriptExports,\n  render,\n  staticRenderFns,\n  functionalTemplate,\n  injectStyles,\n  scopeId,\n  moduleIdentifier, /* server only */\n  shadowMode /* vue-cli only */\n) {\n  // Vue.extend constructor export interop\n  var options = typeof scriptExports === 'function'\n    ? scriptExports.options\n    : scriptExports\n\n  // render functions\n  if (render) {\n    options.render = render\n    options.staticRenderFns = staticRenderFns\n    options._compiled = true\n  }\n\n  // functional template\n  if (functionalTemplate) {\n    options.functional = true\n  }\n\n  // scopedId\n  if (scopeId) {\n    options._scopeId = 'data-v-' + scopeId\n  }\n\n  var hook\n  if (moduleIdentifier) { // server build\n    hook = function (context) {\n      // 2.3 injection\n      context =\n        context || // cached call\n        (this.$vnode && this.$vnode.ssrContext) || // stateful\n        (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n      // 2.2 with runInNewContext: true\n      if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n        context = __VUE_SSR_CONTEXT__\n      }\n      // inject component styles\n      if (injectStyles) {\n        injectStyles.call(this, context)\n      }\n      // register component module identifier for async chunk inferrence\n      if (context && context._registeredComponents) {\n        context._registeredComponents.add(moduleIdentifier)\n      }\n    }\n    // used by ssr in case component is cached and beforeCreate\n    // never gets called\n    options._ssrRegister = hook\n  } else if (injectStyles) {\n    hook = shadowMode\n      ? function () { injectStyles.call(this, this.$root.$options.shadowRoot) }\n      : injectStyles\n  }\n\n  if (hook) {\n    if (options.functional) {\n      // for template-only hot-reload because in that case the render fn doesn't\n      // go through the normalizer\n      options._injectStyles = hook\n      // register for functioal component in vue file\n      var originalRender = options.render\n      options.render = function renderWithStyleInjection (h, context) {\n        hook.call(context)\n        return originalRender(h, context)\n      }\n    } else {\n      // inject component registration as beforeCreate hook\n      var existing = options.beforeCreate\n      options.beforeCreate = existing\n        ? [].concat(existing, hook)\n        : [hook]\n    }\n  }\n\n  return {\n    exports: scriptExports,\n    options: options\n  }\n}\n\n\n/***/ }),\n\n/***/ 4:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/mixins/emitter */ \"./node_modules/element-ui/lib/mixins/emitter.js\");\n\n/***/ }),\n\n/***/ 88:\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_6691__) {\n\n\"use strict\";\n__nested_webpack_require_6691__.r(__nested_webpack_exports__);\n\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/radio/src/radio.vue?vue&type=template&id=69cd6268&\nvar render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"label\",\n    {\n      staticClass: \"el-radio\",\n      class: [\n        _vm.border && _vm.radioSize ? \"el-radio--\" + _vm.radioSize : \"\",\n        { \"is-disabled\": _vm.isDisabled },\n        { \"is-focus\": _vm.focus },\n        { \"is-bordered\": _vm.border },\n        { \"is-checked\": _vm.model === _vm.label }\n      ],\n      attrs: {\n        role: \"radio\",\n        \"aria-checked\": _vm.model === _vm.label,\n        \"aria-disabled\": _vm.isDisabled,\n        tabindex: _vm.tabIndex\n      },\n      on: {\n        keydown: function($event) {\n          if (\n            !(\"button\" in $event) &&\n            _vm._k($event.keyCode, \"space\", 32, $event.key, [\" \", \"Spacebar\"])\n          ) {\n            return null\n          }\n          $event.stopPropagation()\n          $event.preventDefault()\n          _vm.model = _vm.isDisabled ? _vm.model : _vm.label\n        }\n      }\n    },\n    [\n      _c(\n        \"span\",\n        {\n          staticClass: \"el-radio__input\",\n          class: {\n            \"is-disabled\": _vm.isDisabled,\n            \"is-checked\": _vm.model === _vm.label\n          }\n        },\n        [\n          _c(\"span\", { staticClass: \"el-radio__inner\" }),\n          _c(\"input\", {\n            directives: [\n              {\n                name: \"model\",\n                rawName: \"v-model\",\n                value: _vm.model,\n                expression: \"model\"\n              }\n            ],\n            ref: \"radio\",\n            staticClass: \"el-radio__original\",\n            attrs: {\n              type: \"radio\",\n              \"aria-hidden\": \"true\",\n              name: _vm.name,\n              disabled: _vm.isDisabled,\n              tabindex: \"-1\",\n              autocomplete: \"off\"\n            },\n            domProps: {\n              value: _vm.label,\n              checked: _vm._q(_vm.model, _vm.label)\n            },\n            on: {\n              focus: function($event) {\n                _vm.focus = true\n              },\n              blur: function($event) {\n                _vm.focus = false\n              },\n              change: [\n                function($event) {\n                  _vm.model = _vm.label\n                },\n                _vm.handleChange\n              ]\n            }\n          })\n        ]\n      ),\n      _c(\n        \"span\",\n        {\n          staticClass: \"el-radio__label\",\n          on: {\n            keydown: function($event) {\n              $event.stopPropagation()\n            }\n          }\n        },\n        [\n          _vm._t(\"default\"),\n          !_vm.$slots.default ? [_vm._v(_vm._s(_vm.label))] : _vm._e()\n        ],\n        2\n      )\n    ]\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/radio/src/radio.vue?vue&type=template&id=69cd6268&\n\n// EXTERNAL MODULE: external \"element-ui/lib/mixins/emitter\"\nvar emitter_ = __nested_webpack_require_6691__(4);\nvar emitter_default = /*#__PURE__*/__nested_webpack_require_6691__.n(emitter_);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/radio/src/radio.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n/* harmony default export */ var radiovue_type_script_lang_js_ = ({\n  name: 'ElRadio',\n\n  mixins: [emitter_default.a],\n\n  inject: {\n    elForm: {\n      default: ''\n    },\n\n    elFormItem: {\n      default: ''\n    }\n  },\n\n  componentName: 'ElRadio',\n\n  props: {\n    value: {},\n    label: {},\n    disabled: Boolean,\n    name: String,\n    border: Boolean,\n    size: String\n  },\n\n  data: function data() {\n    return {\n      focus: false\n    };\n  },\n\n  computed: {\n    isGroup: function isGroup() {\n      var parent = this.$parent;\n      while (parent) {\n        if (parent.$options.componentName !== 'ElRadioGroup') {\n          parent = parent.$parent;\n        } else {\n          this._radioGroup = parent;\n          return true;\n        }\n      }\n      return false;\n    },\n\n    model: {\n      get: function get() {\n        return this.isGroup ? this._radioGroup.value : this.value;\n      },\n      set: function set(val) {\n        if (this.isGroup) {\n          this.dispatch('ElRadioGroup', 'input', [val]);\n        } else {\n          this.$emit('input', val);\n        }\n        this.$refs.radio && (this.$refs.radio.checked = this.model === this.label);\n      }\n    },\n    _elFormItemSize: function _elFormItemSize() {\n      return (this.elFormItem || {}).elFormItemSize;\n    },\n    radioSize: function radioSize() {\n      var temRadioSize = this.size || this._elFormItemSize || (this.$ELEMENT || {}).size;\n      return this.isGroup ? this._radioGroup.radioGroupSize || temRadioSize : temRadioSize;\n    },\n    isDisabled: function isDisabled() {\n      return this.isGroup ? this._radioGroup.disabled || this.disabled || (this.elForm || {}).disabled : this.disabled || (this.elForm || {}).disabled;\n    },\n    tabIndex: function tabIndex() {\n      return this.isDisabled || this.isGroup && this.model !== this.label ? -1 : 0;\n    }\n  },\n\n  methods: {\n    handleChange: function handleChange() {\n      var _this = this;\n\n      this.$nextTick(function () {\n        _this.$emit('change', _this.model);\n        _this.isGroup && _this.dispatch('ElRadioGroup', 'handleChange', _this.model);\n      });\n    }\n  }\n});\n// CONCATENATED MODULE: ./packages/radio/src/radio.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_radiovue_type_script_lang_js_ = (radiovue_type_script_lang_js_); \n// EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js\nvar componentNormalizer = __nested_webpack_require_6691__(0);\n\n// CONCATENATED MODULE: ./packages/radio/src/radio.vue\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(componentNormalizer[\"a\" /* default */])(\n  src_radiovue_type_script_lang_js_,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"packages/radio/src/radio.vue\"\n/* harmony default export */ var src_radio = (component.exports);\n// CONCATENATED MODULE: ./packages/radio/index.js\n\n\n/* istanbul ignore next */\nsrc_radio.install = function (Vue) {\n  Vue.component(src_radio.name, src_radio);\n};\n\n/* harmony default export */ var packages_radio = __nested_webpack_exports__[\"default\"] = (src_radio);\n\n/***/ })\n\n/******/ });//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvcmFkaW8uanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSw4QkFBOEI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsOEJBQW1CO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEVBQTBFLDhCQUFtQjtBQUM3RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsOEJBQW1CO0FBQzdCO0FBQ0E7QUFDQSxVQUFVLDhCQUFtQjtBQUM3QjtBQUNBO0FBQ0EsVUFBVSw4QkFBbUI7QUFDN0IsZUFBZSw4QkFBbUI7QUFDbEMsbURBQW1ELCtCQUErQjtBQUNsRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsOEJBQW1CO0FBQzdCO0FBQ0EsaUVBQWlFLGlCQUFpQjtBQUNsRjtBQUNBLDBEQUEwRCxhQUFhO0FBQ3ZFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSw4QkFBbUI7QUFDN0IsZ0NBQWdDLDhCQUFtQjtBQUNuRDtBQUNBO0FBQ0E7QUFDQSxXQUFXLDhCQUFtQjtBQUM5QixrREFBa0QsZ0NBQWdDO0FBQ2xGLDBFQUEwRSw4QkFBbUIsNEJBQTRCLG9CQUFvQjtBQUM3STtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsOEJBQW1CO0FBQzdCO0FBQ0Esb0NBQW9DLDRCQUE0QjtBQUNoRSwwQ0FBMEM7QUFDMUMsV0FBVyw4QkFBbUI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLDhCQUFtQixrQ0FBa0M7QUFDL0Q7QUFDQTtBQUNBLFVBQVUsOEJBQW1CO0FBQzdCO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQiw4QkFBbUIsQ0FBQyw4QkFBbUI7QUFDeEQsVUFBVTtBQUNWO0FBQ0E7O0FBRUE7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsK0JBQW1COztBQUVo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QTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxtQ0FBbUM7QUFDbkMsS0FBSztBQUNMO0FBQ0Esa0ZBQWtGO0FBQ2xGO0FBQ0EsS0FBSztBQUNMO0FBQ0EsNEZBQTRGLGdEQUFnRDtBQUM1SSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLCtCQUFtQjs7QUFFN0M7Ozs7OztBQU1BOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSSxLQUFLLEVBQUUsWUFBWTtBQUN2QjtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtEQUFrRCwwQkFBbUI7O0FBRXJFLE9BQU87O0FBRVAsVUFBVSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9lbGVtZW50LXVpL2xpYi9yYWRpby5qcz80NWVhIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID1cbi8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXBcbi8qKioqKiovIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbi8qKioqKiovIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbi8qKioqKiovIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuLyoqKioqKi8gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4vKioqKioqLyBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuLyoqKioqKi8gXHRcdFx0aTogbW9kdWxlSWQsXG4vKioqKioqLyBcdFx0XHRsOiBmYWxzZSxcbi8qKioqKiovIFx0XHRcdGV4cG9ydHM6IHt9XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4vKioqKioqLyBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbi8qKioqKiovIFx0XHRtb2R1bGUubCA9IHRydWU7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4vKioqKioqLyBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuLyoqKioqKi8gXHR9XG4vKioqKioqL1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4vKioqKioqLyBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4vKioqKioqLyBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4vKioqKioqLyBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbi8qKioqKiovIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuLyoqKioqKi8gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbi8qKioqKiovIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuLyoqKioqKi8gXHRcdHJldHVybiBucztcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuLyoqKioqKi8gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuLyoqKioqKi8gXHRcdHJldHVybiBnZXR0ZXI7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCIvZGlzdC9cIjtcbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8qKioqKiovIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gODgpO1xuLyoqKioqKi8gfSlcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyAoe1xuXG4vKioqLyAwOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJhXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gbm9ybWFsaXplQ29tcG9uZW50OyB9KTtcbi8qIGdsb2JhbHMgX19WVUVfU1NSX0NPTlRFWFRfXyAqL1xuXG4vLyBJTVBPUlRBTlQ6IERvIE5PVCB1c2UgRVMyMDE1IGZlYXR1cmVzIGluIHRoaXMgZmlsZSAoZXhjZXB0IGZvciBtb2R1bGVzKS5cbi8vIFRoaXMgbW9kdWxlIGlzIGEgcnVudGltZSB1dGlsaXR5IGZvciBjbGVhbmVyIGNvbXBvbmVudCBtb2R1bGUgb3V0cHV0IGFuZCB3aWxsXG4vLyBiZSBpbmNsdWRlZCBpbiB0aGUgZmluYWwgd2VicGFjayB1c2VyIGJ1bmRsZS5cblxuZnVuY3Rpb24gbm9ybWFsaXplQ29tcG9uZW50IChcbiAgc2NyaXB0RXhwb3J0cyxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZ1bmN0aW9uYWxUZW1wbGF0ZSxcbiAgaW5qZWN0U3R5bGVzLFxuICBzY29wZUlkLFxuICBtb2R1bGVJZGVudGlmaWVyLCAvKiBzZXJ2ZXIgb25seSAqL1xuICBzaGFkb3dNb2RlIC8qIHZ1ZS1jbGkgb25seSAqL1xuKSB7XG4gIC8vIFZ1ZS5leHRlbmQgY29uc3RydWN0b3IgZXhwb3J0IGludGVyb3BcbiAgdmFyIG9wdGlvbnMgPSB0eXBlb2Ygc2NyaXB0RXhwb3J0cyA9PT0gJ2Z1bmN0aW9uJ1xuICAgID8gc2NyaXB0RXhwb3J0cy5vcHRpb25zXG4gICAgOiBzY3JpcHRFeHBvcnRzXG5cbiAgLy8gcmVuZGVyIGZ1bmN0aW9uc1xuICBpZiAocmVuZGVyKSB7XG4gICAgb3B0aW9ucy5yZW5kZXIgPSByZW5kZXJcbiAgICBvcHRpb25zLnN0YXRpY1JlbmRlckZucyA9IHN0YXRpY1JlbmRlckZuc1xuICAgIG9wdGlvbnMuX2NvbXBpbGVkID0gdHJ1ZVxuICB9XG5cbiAgLy8gZnVuY3Rpb25hbCB0ZW1wbGF0ZVxuICBpZiAoZnVuY3Rpb25hbFRlbXBsYXRlKSB7XG4gICAgb3B0aW9ucy5mdW5jdGlvbmFsID0gdHJ1ZVxuICB9XG5cbiAgLy8gc2NvcGVkSWRcbiAgaWYgKHNjb3BlSWQpIHtcbiAgICBvcHRpb25zLl9zY29wZUlkID0gJ2RhdGEtdi0nICsgc2NvcGVJZFxuICB9XG5cbiAgdmFyIGhvb2tcbiAgaWYgKG1vZHVsZUlkZW50aWZpZXIpIHsgLy8gc2VydmVyIGJ1aWxkXG4gICAgaG9vayA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgICAvLyAyLjMgaW5qZWN0aW9uXG4gICAgICBjb250ZXh0ID1cbiAgICAgICAgY29udGV4dCB8fCAvLyBjYWNoZWQgY2FsbFxuICAgICAgICAodGhpcy4kdm5vZGUgJiYgdGhpcy4kdm5vZGUuc3NyQ29udGV4dCkgfHwgLy8gc3RhdGVmdWxcbiAgICAgICAgKHRoaXMucGFyZW50ICYmIHRoaXMucGFyZW50LiR2bm9kZSAmJiB0aGlzLnBhcmVudC4kdm5vZGUuc3NyQ29udGV4dCkgLy8gZnVuY3Rpb25hbFxuICAgICAgLy8gMi4yIHdpdGggcnVuSW5OZXdDb250ZXh0OiB0cnVlXG4gICAgICBpZiAoIWNvbnRleHQgJiYgdHlwZW9mIF9fVlVFX1NTUl9DT05URVhUX18gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGNvbnRleHQgPSBfX1ZVRV9TU1JfQ09OVEVYVF9fXG4gICAgICB9XG4gICAgICAvLyBpbmplY3QgY29tcG9uZW50IHN0eWxlc1xuICAgICAgaWYgKGluamVjdFN0eWxlcykge1xuICAgICAgICBpbmplY3RTdHlsZXMuY2FsbCh0aGlzLCBjb250ZXh0KVxuICAgICAgfVxuICAgICAgLy8gcmVnaXN0ZXIgY29tcG9uZW50IG1vZHVsZSBpZGVudGlmaWVyIGZvciBhc3luYyBjaHVuayBpbmZlcnJlbmNlXG4gICAgICBpZiAoY29udGV4dCAmJiBjb250ZXh0Ll9yZWdpc3RlcmVkQ29tcG9uZW50cykge1xuICAgICAgICBjb250ZXh0Ll9yZWdpc3RlcmVkQ29tcG9uZW50cy5hZGQobW9kdWxlSWRlbnRpZmllcilcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gdXNlZCBieSBzc3IgaW4gY2FzZSBjb21wb25lbnQgaXMgY2FjaGVkIGFuZCBiZWZvcmVDcmVhdGVcbiAgICAvLyBuZXZlciBnZXRzIGNhbGxlZFxuICAgIG9wdGlvbnMuX3NzclJlZ2lzdGVyID0gaG9va1xuICB9IGVsc2UgaWYgKGluamVjdFN0eWxlcykge1xuICAgIGhvb2sgPSBzaGFkb3dNb2RlXG4gICAgICA/IGZ1bmN0aW9uICgpIHsgaW5qZWN0U3R5bGVzLmNhbGwodGhpcywgdGhpcy4kcm9vdC4kb3B0aW9ucy5zaGFkb3dSb290KSB9XG4gICAgICA6IGluamVjdFN0eWxlc1xuICB9XG5cbiAgaWYgKGhvb2spIHtcbiAgICBpZiAob3B0aW9ucy5mdW5jdGlvbmFsKSB7XG4gICAgICAvLyBmb3IgdGVtcGxhdGUtb25seSBob3QtcmVsb2FkIGJlY2F1c2UgaW4gdGhhdCBjYXNlIHRoZSByZW5kZXIgZm4gZG9lc24ndFxuICAgICAgLy8gZ28gdGhyb3VnaCB0aGUgbm9ybWFsaXplclxuICAgICAgb3B0aW9ucy5faW5qZWN0U3R5bGVzID0gaG9va1xuICAgICAgLy8gcmVnaXN0ZXIgZm9yIGZ1bmN0aW9hbCBjb21wb25lbnQgaW4gdnVlIGZpbGVcbiAgICAgIHZhciBvcmlnaW5hbFJlbmRlciA9IG9wdGlvbnMucmVuZGVyXG4gICAgICBvcHRpb25zLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcldpdGhTdHlsZUluamVjdGlvbiAoaCwgY29udGV4dCkge1xuICAgICAgICBob29rLmNhbGwoY29udGV4dClcbiAgICAgICAgcmV0dXJuIG9yaWdpbmFsUmVuZGVyKGgsIGNvbnRleHQpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGluamVjdCBjb21wb25lbnQgcmVnaXN0cmF0aW9uIGFzIGJlZm9yZUNyZWF0ZSBob29rXG4gICAgICB2YXIgZXhpc3RpbmcgPSBvcHRpb25zLmJlZm9yZUNyZWF0ZVxuICAgICAgb3B0aW9ucy5iZWZvcmVDcmVhdGUgPSBleGlzdGluZ1xuICAgICAgICA/IFtdLmNvbmNhdChleGlzdGluZywgaG9vaylcbiAgICAgICAgOiBbaG9va11cbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGV4cG9ydHM6IHNjcmlwdEV4cG9ydHMsXG4gICAgb3B0aW9uczogb3B0aW9uc1xuICB9XG59XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDQ6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImVsZW1lbnQtdWkvbGliL21peGlucy9lbWl0dGVyXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gODg6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3JhZGlvL3NyYy9yYWRpby52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NjljZDYyNjgmXG52YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwibGFiZWxcIixcbiAgICB7XG4gICAgICBzdGF0aWNDbGFzczogXCJlbC1yYWRpb1wiLFxuICAgICAgY2xhc3M6IFtcbiAgICAgICAgX3ZtLmJvcmRlciAmJiBfdm0ucmFkaW9TaXplID8gXCJlbC1yYWRpby0tXCIgKyBfdm0ucmFkaW9TaXplIDogXCJcIixcbiAgICAgICAgeyBcImlzLWRpc2FibGVkXCI6IF92bS5pc0Rpc2FibGVkIH0sXG4gICAgICAgIHsgXCJpcy1mb2N1c1wiOiBfdm0uZm9jdXMgfSxcbiAgICAgICAgeyBcImlzLWJvcmRlcmVkXCI6IF92bS5ib3JkZXIgfSxcbiAgICAgICAgeyBcImlzLWNoZWNrZWRcIjogX3ZtLm1vZGVsID09PSBfdm0ubGFiZWwgfVxuICAgICAgXSxcbiAgICAgIGF0dHJzOiB7XG4gICAgICAgIHJvbGU6IFwicmFkaW9cIixcbiAgICAgICAgXCJhcmlhLWNoZWNrZWRcIjogX3ZtLm1vZGVsID09PSBfdm0ubGFiZWwsXG4gICAgICAgIFwiYXJpYS1kaXNhYmxlZFwiOiBfdm0uaXNEaXNhYmxlZCxcbiAgICAgICAgdGFiaW5kZXg6IF92bS50YWJJbmRleFxuICAgICAgfSxcbiAgICAgIG9uOiB7XG4gICAgICAgIGtleWRvd246IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICEoXCJidXR0b25cIiBpbiAkZXZlbnQpICYmXG4gICAgICAgICAgICBfdm0uX2soJGV2ZW50LmtleUNvZGUsIFwic3BhY2VcIiwgMzIsICRldmVudC5rZXksIFtcIiBcIiwgXCJTcGFjZWJhclwiXSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgfVxuICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgX3ZtLm1vZGVsID0gX3ZtLmlzRGlzYWJsZWQgPyBfdm0ubW9kZWwgOiBfdm0ubGFiZWxcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgW1xuICAgICAgX2MoXG4gICAgICAgIFwic3BhblwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtcmFkaW9fX2lucHV0XCIsXG4gICAgICAgICAgY2xhc3M6IHtcbiAgICAgICAgICAgIFwiaXMtZGlzYWJsZWRcIjogX3ZtLmlzRGlzYWJsZWQsXG4gICAgICAgICAgICBcImlzLWNoZWNrZWRcIjogX3ZtLm1vZGVsID09PSBfdm0ubGFiZWxcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFtcbiAgICAgICAgICBfYyhcInNwYW5cIiwgeyBzdGF0aWNDbGFzczogXCJlbC1yYWRpb19faW5uZXJcIiB9KSxcbiAgICAgICAgICBfYyhcImlucHV0XCIsIHtcbiAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6IFwibW9kZWxcIixcbiAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtbW9kZWxcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLm1vZGVsLFxuICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwibW9kZWxcIlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgcmVmOiBcInJhZGlvXCIsXG4gICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1yYWRpb19fb3JpZ2luYWxcIixcbiAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgIHR5cGU6IFwicmFkaW9cIixcbiAgICAgICAgICAgICAgXCJhcmlhLWhpZGRlblwiOiBcInRydWVcIixcbiAgICAgICAgICAgICAgbmFtZTogX3ZtLm5hbWUsXG4gICAgICAgICAgICAgIGRpc2FibGVkOiBfdm0uaXNEaXNhYmxlZCxcbiAgICAgICAgICAgICAgdGFiaW5kZXg6IFwiLTFcIixcbiAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlOiBcIm9mZlwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZG9tUHJvcHM6IHtcbiAgICAgICAgICAgICAgdmFsdWU6IF92bS5sYWJlbCxcbiAgICAgICAgICAgICAgY2hlY2tlZDogX3ZtLl9xKF92bS5tb2RlbCwgX3ZtLmxhYmVsKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgIGZvY3VzOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICBfdm0uZm9jdXMgPSB0cnVlXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGJsdXI6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgIF92bS5mb2N1cyA9IGZhbHNlXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGNoYW5nZTogW1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgX3ZtLm1vZGVsID0gX3ZtLmxhYmVsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBfdm0uaGFuZGxlQ2hhbmdlXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICBdXG4gICAgICApLFxuICAgICAgX2MoXG4gICAgICAgIFwic3BhblwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtcmFkaW9fX2xhYmVsXCIsXG4gICAgICAgICAgb246IHtcbiAgICAgICAgICAgIGtleWRvd246IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFtcbiAgICAgICAgICBfdm0uX3QoXCJkZWZhdWx0XCIpLFxuICAgICAgICAgICFfdm0uJHNsb3RzLmRlZmF1bHQgPyBbX3ZtLl92KF92bS5fcyhfdm0ubGFiZWwpKV0gOiBfdm0uX2UoKVxuICAgICAgICBdLFxuICAgICAgICAyXG4gICAgICApXG4gICAgXVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvcmFkaW8vc3JjL3JhZGlvLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02OWNkNjI2OCZcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcImVsZW1lbnQtdWkvbGliL21peGlucy9lbWl0dGVyXCJcbnZhciBlbWl0dGVyXyA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XG52YXIgZW1pdHRlcl9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihlbWl0dGVyXyk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3JhZGlvL3NyYy9yYWRpby52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cblxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciByYWRpb3Z1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG5hbWU6ICdFbFJhZGlvJyxcblxuICBtaXhpbnM6IFtlbWl0dGVyX2RlZmF1bHQuYV0sXG5cbiAgaW5qZWN0OiB7XG4gICAgZWxGb3JtOiB7XG4gICAgICBkZWZhdWx0OiAnJ1xuICAgIH0sXG5cbiAgICBlbEZvcm1JdGVtOiB7XG4gICAgICBkZWZhdWx0OiAnJ1xuICAgIH1cbiAgfSxcblxuICBjb21wb25lbnROYW1lOiAnRWxSYWRpbycsXG5cbiAgcHJvcHM6IHtcbiAgICB2YWx1ZToge30sXG4gICAgbGFiZWw6IHt9LFxuICAgIGRpc2FibGVkOiBCb29sZWFuLFxuICAgIG5hbWU6IFN0cmluZyxcbiAgICBib3JkZXI6IEJvb2xlYW4sXG4gICAgc2l6ZTogU3RyaW5nXG4gIH0sXG5cbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZm9jdXM6IGZhbHNlXG4gICAgfTtcbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGlzR3JvdXA6IGZ1bmN0aW9uIGlzR3JvdXAoKSB7XG4gICAgICB2YXIgcGFyZW50ID0gdGhpcy4kcGFyZW50O1xuICAgICAgd2hpbGUgKHBhcmVudCkge1xuICAgICAgICBpZiAocGFyZW50LiRvcHRpb25zLmNvbXBvbmVudE5hbWUgIT09ICdFbFJhZGlvR3JvdXAnKSB7XG4gICAgICAgICAgcGFyZW50ID0gcGFyZW50LiRwYXJlbnQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5fcmFkaW9Hcm91cCA9IHBhcmVudDtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG5cbiAgICBtb2RlbDoge1xuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzR3JvdXAgPyB0aGlzLl9yYWRpb0dyb3VwLnZhbHVlIDogdGhpcy52YWx1ZTtcbiAgICAgIH0sXG4gICAgICBzZXQ6IGZ1bmN0aW9uIHNldCh2YWwpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNHcm91cCkge1xuICAgICAgICAgIHRoaXMuZGlzcGF0Y2goJ0VsUmFkaW9Hcm91cCcsICdpbnB1dCcsIFt2YWxdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIHZhbCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4kcmVmcy5yYWRpbyAmJiAodGhpcy4kcmVmcy5yYWRpby5jaGVja2VkID0gdGhpcy5tb2RlbCA9PT0gdGhpcy5sYWJlbCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBfZWxGb3JtSXRlbVNpemU6IGZ1bmN0aW9uIF9lbEZvcm1JdGVtU2l6ZSgpIHtcbiAgICAgIHJldHVybiAodGhpcy5lbEZvcm1JdGVtIHx8IHt9KS5lbEZvcm1JdGVtU2l6ZTtcbiAgICB9LFxuICAgIHJhZGlvU2l6ZTogZnVuY3Rpb24gcmFkaW9TaXplKCkge1xuICAgICAgdmFyIHRlbVJhZGlvU2l6ZSA9IHRoaXMuc2l6ZSB8fCB0aGlzLl9lbEZvcm1JdGVtU2l6ZSB8fCAodGhpcy4kRUxFTUVOVCB8fCB7fSkuc2l6ZTtcbiAgICAgIHJldHVybiB0aGlzLmlzR3JvdXAgPyB0aGlzLl9yYWRpb0dyb3VwLnJhZGlvR3JvdXBTaXplIHx8IHRlbVJhZGlvU2l6ZSA6IHRlbVJhZGlvU2l6ZTtcbiAgICB9LFxuICAgIGlzRGlzYWJsZWQ6IGZ1bmN0aW9uIGlzRGlzYWJsZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc0dyb3VwID8gdGhpcy5fcmFkaW9Hcm91cC5kaXNhYmxlZCB8fCB0aGlzLmRpc2FibGVkIHx8ICh0aGlzLmVsRm9ybSB8fCB7fSkuZGlzYWJsZWQgOiB0aGlzLmRpc2FibGVkIHx8ICh0aGlzLmVsRm9ybSB8fCB7fSkuZGlzYWJsZWQ7XG4gICAgfSxcbiAgICB0YWJJbmRleDogZnVuY3Rpb24gdGFiSW5kZXgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc0Rpc2FibGVkIHx8IHRoaXMuaXNHcm91cCAmJiB0aGlzLm1vZGVsICE9PSB0aGlzLmxhYmVsID8gLTEgOiAwO1xuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgaGFuZGxlQ2hhbmdlOiBmdW5jdGlvbiBoYW5kbGVDaGFuZ2UoKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzLiRlbWl0KCdjaGFuZ2UnLCBfdGhpcy5tb2RlbCk7XG4gICAgICAgIF90aGlzLmlzR3JvdXAgJiYgX3RoaXMuZGlzcGF0Y2goJ0VsUmFkaW9Hcm91cCcsICdoYW5kbGVDaGFuZ2UnLCBfdGhpcy5tb2RlbCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9yYWRpby9zcmMvcmFkaW8udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY19yYWRpb3Z1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChyYWRpb3Z1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gRVhURVJOQUwgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcbnZhciBjb21wb25lbnROb3JtYWxpemVyID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9yYWRpby9zcmMvcmFkaW8udnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgY29tcG9uZW50ID0gT2JqZWN0KGNvbXBvbmVudE5vcm1hbGl6ZXJbXCJhXCIgLyogZGVmYXVsdCAqL10pKFxuICBzcmNfcmFkaW92dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBhcGk7IH1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvcmFkaW8vc3JjL3JhZGlvLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfcmFkaW8gPSAoY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9yYWRpby9pbmRleC5qc1xuXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5zcmNfcmFkaW8uaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcbiAgVnVlLmNvbXBvbmVudChzcmNfcmFkaW8ubmFtZSwgc3JjX3JhZGlvKTtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhY2thZ2VzX3JhZGlvID0gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoc3JjX3JhZGlvKTtcblxuLyoqKi8gfSlcblxuLyoqKioqKi8gfSk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/radio.js\n");

/***/ }),

/***/ "./node_modules/element-ui/lib/scrollbar.js":
/*!**************************************************!*\
  !*** ./node_modules/element-ui/lib/scrollbar.js ***!
  \**************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

eval("module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __nested_webpack_require_187__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __nested_webpack_require_187__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__nested_webpack_require_187__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__nested_webpack_require_187__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__nested_webpack_require_187__.d = function(exports, name, getter) {\n/******/ \t\tif(!__nested_webpack_require_187__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__nested_webpack_require_187__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__nested_webpack_require_187__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __nested_webpack_require_187__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__nested_webpack_require_187__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __nested_webpack_require_187__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__nested_webpack_require_187__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__nested_webpack_require_187__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__nested_webpack_require_187__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__nested_webpack_require_187__.p = \"/dist/\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __nested_webpack_require_187__(__nested_webpack_require_187__.s = 133);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 133:\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_3675__) {\n\n\"use strict\";\n__nested_webpack_require_3675__.r(__nested_webpack_exports__);\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/resize-event\"\nvar resize_event_ = __nested_webpack_require_3675__(16);\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/scrollbar-width\"\nvar scrollbar_width_ = __nested_webpack_require_3675__(39);\nvar scrollbar_width_default = /*#__PURE__*/__nested_webpack_require_3675__.n(scrollbar_width_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/util\"\nvar util_ = __nested_webpack_require_3675__(3);\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/dom\"\nvar dom_ = __nested_webpack_require_3675__(2);\n\n// CONCATENATED MODULE: ./packages/scrollbar/src/util.js\nvar BAR_MAP = {\n  vertical: {\n    offset: 'offsetHeight',\n    scroll: 'scrollTop',\n    scrollSize: 'scrollHeight',\n    size: 'height',\n    key: 'vertical',\n    axis: 'Y',\n    client: 'clientY',\n    direction: 'top'\n  },\n  horizontal: {\n    offset: 'offsetWidth',\n    scroll: 'scrollLeft',\n    scrollSize: 'scrollWidth',\n    size: 'width',\n    key: 'horizontal',\n    axis: 'X',\n    client: 'clientX',\n    direction: 'left'\n  }\n};\n\nfunction renderThumbStyle(_ref) {\n  var move = _ref.move,\n      size = _ref.size,\n      bar = _ref.bar;\n\n  var style = {};\n  var translate = 'translate' + bar.axis + '(' + move + '%)';\n\n  style[bar.size] = size;\n  style.transform = translate;\n  style.msTransform = translate;\n  style.webkitTransform = translate;\n\n  return style;\n};\n// CONCATENATED MODULE: ./packages/scrollbar/src/bar.js\n\n\n\n/* istanbul ignore next */\n/* harmony default export */ var src_bar = ({\n  name: 'Bar',\n\n  props: {\n    vertical: Boolean,\n    size: String,\n    move: Number\n  },\n\n  computed: {\n    bar: function bar() {\n      return BAR_MAP[this.vertical ? 'vertical' : 'horizontal'];\n    },\n    wrap: function wrap() {\n      return this.$parent.wrap;\n    }\n  },\n\n  render: function render(h) {\n    var size = this.size,\n        move = this.move,\n        bar = this.bar;\n\n\n    return h(\n      'div',\n      {\n        'class': ['el-scrollbar__bar', 'is-' + bar.key],\n        on: {\n          'mousedown': this.clickTrackHandler\n        }\n      },\n      [h('div', {\n        ref: 'thumb',\n        'class': 'el-scrollbar__thumb',\n        on: {\n          'mousedown': this.clickThumbHandler\n        },\n\n        style: renderThumbStyle({ size: size, move: move, bar: bar }) })]\n    );\n  },\n\n\n  methods: {\n    clickThumbHandler: function clickThumbHandler(e) {\n      // prevent click event of right button\n      if (e.ctrlKey || e.button === 2) {\n        return;\n      }\n      this.startDrag(e);\n      this[this.bar.axis] = e.currentTarget[this.bar.offset] - (e[this.bar.client] - e.currentTarget.getBoundingClientRect()[this.bar.direction]);\n    },\n    clickTrackHandler: function clickTrackHandler(e) {\n      var offset = Math.abs(e.target.getBoundingClientRect()[this.bar.direction] - e[this.bar.client]);\n      var thumbHalf = this.$refs.thumb[this.bar.offset] / 2;\n      var thumbPositionPercentage = (offset - thumbHalf) * 100 / this.$el[this.bar.offset];\n\n      this.wrap[this.bar.scroll] = thumbPositionPercentage * this.wrap[this.bar.scrollSize] / 100;\n    },\n    startDrag: function startDrag(e) {\n      e.stopImmediatePropagation();\n      this.cursorDown = true;\n\n      Object(dom_[\"on\"])(document, 'mousemove', this.mouseMoveDocumentHandler);\n      Object(dom_[\"on\"])(document, 'mouseup', this.mouseUpDocumentHandler);\n      document.onselectstart = function () {\n        return false;\n      };\n    },\n    mouseMoveDocumentHandler: function mouseMoveDocumentHandler(e) {\n      if (this.cursorDown === false) return;\n      var prevPage = this[this.bar.axis];\n\n      if (!prevPage) return;\n\n      var offset = (this.$el.getBoundingClientRect()[this.bar.direction] - e[this.bar.client]) * -1;\n      var thumbClickPosition = this.$refs.thumb[this.bar.offset] - prevPage;\n      var thumbPositionPercentage = (offset - thumbClickPosition) * 100 / this.$el[this.bar.offset];\n\n      this.wrap[this.bar.scroll] = thumbPositionPercentage * this.wrap[this.bar.scrollSize] / 100;\n    },\n    mouseUpDocumentHandler: function mouseUpDocumentHandler(e) {\n      this.cursorDown = false;\n      this[this.bar.axis] = 0;\n      Object(dom_[\"off\"])(document, 'mousemove', this.mouseMoveDocumentHandler);\n      document.onselectstart = null;\n    }\n  },\n\n  destroyed: function destroyed() {\n    Object(dom_[\"off\"])(document, 'mouseup', this.mouseUpDocumentHandler);\n  }\n});\n// CONCATENATED MODULE: ./packages/scrollbar/src/main.js\n// reference https://github.com/noeldelgado/gemini-scrollbar/blob/master/index.js\n\n\n\n\n\n\n/* istanbul ignore next */\n/* harmony default export */ var main = ({\n  name: 'ElScrollbar',\n\n  components: { Bar: src_bar },\n\n  props: {\n    native: Boolean,\n    wrapStyle: {},\n    wrapClass: {},\n    viewClass: {},\n    viewStyle: {},\n    noresize: Boolean, // 如果 container 尺寸不会发生变化,最好设置它可以优化性能\n    tag: {\n      type: String,\n      default: 'div'\n    }\n  },\n\n  data: function data() {\n    return {\n      sizeWidth: '0',\n      sizeHeight: '0',\n      moveX: 0,\n      moveY: 0\n    };\n  },\n\n\n  computed: {\n    wrap: function wrap() {\n      return this.$refs.wrap;\n    }\n  },\n\n  render: function render(h) {\n    var gutter = scrollbar_width_default()();\n    var style = this.wrapStyle;\n\n    if (gutter) {\n      var gutterWith = '-' + gutter + 'px';\n      var gutterStyle = 'margin-bottom: ' + gutterWith + '; margin-right: ' + gutterWith + ';';\n\n      if (Array.isArray(this.wrapStyle)) {\n        style = Object(util_[\"toObject\"])(this.wrapStyle);\n        style.marginRight = style.marginBottom = gutterWith;\n      } else if (typeof this.wrapStyle === 'string') {\n        style += gutterStyle;\n      } else {\n        style = gutterStyle;\n      }\n    }\n    var view = h(this.tag, {\n      class: ['el-scrollbar__view', this.viewClass],\n      style: this.viewStyle,\n      ref: 'resize'\n    }, this.$slots.default);\n    var wrap = h(\n      'div',\n      {\n        ref: 'wrap',\n        style: style,\n        on: {\n          'scroll': this.handleScroll\n        },\n\n        'class': [this.wrapClass, 'el-scrollbar__wrap', gutter ? '' : 'el-scrollbar__wrap--hidden-default'] },\n      [[view]]\n    );\n    var nodes = void 0;\n\n    if (!this.native) {\n      nodes = [wrap, h(src_bar, {\n        attrs: {\n          move: this.moveX,\n          size: this.sizeWidth }\n      }), h(src_bar, {\n        attrs: {\n          vertical: true,\n          move: this.moveY,\n          size: this.sizeHeight }\n      })];\n    } else {\n      nodes = [h(\n        'div',\n        {\n          ref: 'wrap',\n          'class': [this.wrapClass, 'el-scrollbar__wrap'],\n          style: style },\n        [[view]]\n      )];\n    }\n    return h('div', { class: 'el-scrollbar' }, nodes);\n  },\n\n\n  methods: {\n    handleScroll: function handleScroll() {\n      var wrap = this.wrap;\n\n      this.moveY = wrap.scrollTop * 100 / wrap.clientHeight;\n      this.moveX = wrap.scrollLeft * 100 / wrap.clientWidth;\n    },\n    update: function update() {\n      var heightPercentage = void 0,\n          widthPercentage = void 0;\n      var wrap = this.wrap;\n      if (!wrap) return;\n\n      heightPercentage = wrap.clientHeight * 100 / wrap.scrollHeight;\n      widthPercentage = wrap.clientWidth * 100 / wrap.scrollWidth;\n\n      this.sizeHeight = heightPercentage < 100 ? heightPercentage + '%' : '';\n      this.sizeWidth = widthPercentage < 100 ? widthPercentage + '%' : '';\n    }\n  },\n\n  mounted: function mounted() {\n    if (this.native) return;\n    this.$nextTick(this.update);\n    !this.noresize && Object(resize_event_[\"addResizeListener\"])(this.$refs.resize, this.update);\n  },\n  beforeDestroy: function beforeDestroy() {\n    if (this.native) return;\n    !this.noresize && Object(resize_event_[\"removeResizeListener\"])(this.$refs.resize, this.update);\n  }\n});\n// CONCATENATED MODULE: ./packages/scrollbar/index.js\n\n\n/* istanbul ignore next */\nmain.install = function (Vue) {\n  Vue.component(main.name, main);\n};\n\n/* harmony default export */ var scrollbar = __nested_webpack_exports__[\"default\"] = (main);\n\n/***/ }),\n\n/***/ 16:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/resize-event */ \"./node_modules/element-ui/lib/utils/resize-event.js\");\n\n/***/ }),\n\n/***/ 2:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/dom */ \"./node_modules/element-ui/lib/utils/dom.js\");\n\n/***/ }),\n\n/***/ 3:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/util */ \"./node_modules/element-ui/lib/utils/util.js\");\n\n/***/ }),\n\n/***/ 39:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/scrollbar-width */ \"./node_modules/element-ui/lib/utils/scrollbar-width.js\");\n\n/***/ })\n\n/******/ });//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvc2Nyb2xsYmFyLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsOEJBQThCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLDhCQUFtQjtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBFQUEwRSw4QkFBbUI7QUFDN0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLDhCQUFtQjtBQUM3QjtBQUNBO0FBQ0EsVUFBVSw4QkFBbUI7QUFDN0I7QUFDQTtBQUNBLFVBQVUsOEJBQW1CO0FBQzdCLGVBQWUsOEJBQW1CO0FBQ2xDLG1EQUFtRCwrQkFBK0I7QUFDbEY7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLDhCQUFtQjtBQUM3QjtBQUNBLGlFQUFpRSxpQkFBaUI7QUFDbEY7QUFDQSwwREFBMEQsYUFBYTtBQUN2RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsOEJBQW1CO0FBQzdCLGdDQUFnQyw4QkFBbUI7QUFDbkQ7QUFDQTtBQUNBO0FBQ0EsV0FBVyw4QkFBbUI7QUFDOUIsa0RBQWtELGdDQUFnQztBQUNsRiwwRUFBMEUsOEJBQW1CLDRCQUE0QixvQkFBb0I7QUFDN0k7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLDhCQUFtQjtBQUM3QjtBQUNBLG9DQUFvQyw0QkFBNEI7QUFDaEUsMENBQTBDO0FBQzFDLFdBQVcsOEJBQW1CO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSw4QkFBbUIsa0NBQWtDO0FBQy9EO0FBQ0E7QUFDQSxVQUFVLDhCQUFtQjtBQUM3QjtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsOEJBQW1CLENBQUMsOEJBQW1CO0FBQ3hELFVBQVU7QUFDVjtBQUNBOztBQUVBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLCtCQUFtQjs7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QUEyQjs7QUFFcEQsT0FBTzs7QUFFUDtBQUNBOztBQUVBLGlCQUFpQixtQkFBTyxDQUFDLG9HQUFzQzs7QUFFL0QsT0FBTzs7QUFFUCxVQUFVIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2VsZW1lbnQtdWkvbGliL3Njcm9sbGJhci5qcz8yOWVmIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID1cbi8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXBcbi8qKioqKiovIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbi8qKioqKiovIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbi8qKioqKiovIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuLyoqKioqKi8gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4vKioqKioqLyBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuLyoqKioqKi8gXHRcdFx0aTogbW9kdWxlSWQsXG4vKioqKioqLyBcdFx0XHRsOiBmYWxzZSxcbi8qKioqKiovIFx0XHRcdGV4cG9ydHM6IHt9XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4vKioqKioqLyBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbi8qKioqKiovIFx0XHRtb2R1bGUubCA9IHRydWU7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4vKioqKioqLyBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuLyoqKioqKi8gXHR9XG4vKioqKioqL1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4vKioqKioqLyBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4vKioqKioqLyBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4vKioqKioqLyBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbi8qKioqKiovIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuLyoqKioqKi8gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbi8qKioqKiovIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuLyoqKioqKi8gXHRcdHJldHVybiBucztcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuLyoqKioqKi8gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuLyoqKioqKi8gXHRcdHJldHVybiBnZXR0ZXI7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCIvZGlzdC9cIjtcbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8qKioqKiovIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMTMzKTtcbi8qKioqKiovIH0pXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gKHtcblxuLyoqKi8gMTMzOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcImVsZW1lbnQtdWkvbGliL3V0aWxzL3Jlc2l6ZS1ldmVudFwiXG52YXIgcmVzaXplX2V2ZW50XyA9IF9fd2VicGFja19yZXF1aXJlX18oMTYpO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiZWxlbWVudC11aS9saWIvdXRpbHMvc2Nyb2xsYmFyLXdpZHRoXCJcbnZhciBzY3JvbGxiYXJfd2lkdGhfID0gX193ZWJwYWNrX3JlcXVpcmVfXygzOSk7XG52YXIgc2Nyb2xsYmFyX3dpZHRoX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHNjcm9sbGJhcl93aWR0aF8pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiZWxlbWVudC11aS9saWIvdXRpbHMvdXRpbFwiXG52YXIgdXRpbF8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiZWxlbWVudC11aS9saWIvdXRpbHMvZG9tXCJcbnZhciBkb21fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9zY3JvbGxiYXIvc3JjL3V0aWwuanNcbnZhciBCQVJfTUFQID0ge1xuICB2ZXJ0aWNhbDoge1xuICAgIG9mZnNldDogJ29mZnNldEhlaWdodCcsXG4gICAgc2Nyb2xsOiAnc2Nyb2xsVG9wJyxcbiAgICBzY3JvbGxTaXplOiAnc2Nyb2xsSGVpZ2h0JyxcbiAgICBzaXplOiAnaGVpZ2h0JyxcbiAgICBrZXk6ICd2ZXJ0aWNhbCcsXG4gICAgYXhpczogJ1knLFxuICAgIGNsaWVudDogJ2NsaWVudFknLFxuICAgIGRpcmVjdGlvbjogJ3RvcCdcbiAgfSxcbiAgaG9yaXpvbnRhbDoge1xuICAgIG9mZnNldDogJ29mZnNldFdpZHRoJyxcbiAgICBzY3JvbGw6ICdzY3JvbGxMZWZ0JyxcbiAgICBzY3JvbGxTaXplOiAnc2Nyb2xsV2lkdGgnLFxuICAgIHNpemU6ICd3aWR0aCcsXG4gICAga2V5OiAnaG9yaXpvbnRhbCcsXG4gICAgYXhpczogJ1gnLFxuICAgIGNsaWVudDogJ2NsaWVudFgnLFxuICAgIGRpcmVjdGlvbjogJ2xlZnQnXG4gIH1cbn07XG5cbmZ1bmN0aW9uIHJlbmRlclRodW1iU3R5bGUoX3JlZikge1xuICB2YXIgbW92ZSA9IF9yZWYubW92ZSxcbiAgICAgIHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBiYXIgPSBfcmVmLmJhcjtcblxuICB2YXIgc3R5bGUgPSB7fTtcbiAgdmFyIHRyYW5zbGF0ZSA9ICd0cmFuc2xhdGUnICsgYmFyLmF4aXMgKyAnKCcgKyBtb3ZlICsgJyUpJztcblxuICBzdHlsZVtiYXIuc2l6ZV0gPSBzaXplO1xuICBzdHlsZS50cmFuc2Zvcm0gPSB0cmFuc2xhdGU7XG4gIHN0eWxlLm1zVHJhbnNmb3JtID0gdHJhbnNsYXRlO1xuICBzdHlsZS53ZWJraXRUcmFuc2Zvcm0gPSB0cmFuc2xhdGU7XG5cbiAgcmV0dXJuIHN0eWxlO1xufTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvc2Nyb2xsYmFyL3NyYy9iYXIuanNcblxuXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfYmFyID0gKHtcbiAgbmFtZTogJ0JhcicsXG5cbiAgcHJvcHM6IHtcbiAgICB2ZXJ0aWNhbDogQm9vbGVhbixcbiAgICBzaXplOiBTdHJpbmcsXG4gICAgbW92ZTogTnVtYmVyXG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBiYXI6IGZ1bmN0aW9uIGJhcigpIHtcbiAgICAgIHJldHVybiBCQVJfTUFQW3RoaXMudmVydGljYWwgPyAndmVydGljYWwnIDogJ2hvcml6b250YWwnXTtcbiAgICB9LFxuICAgIHdyYXA6IGZ1bmN0aW9uIHdyYXAoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcGFyZW50LndyYXA7XG4gICAgfVxuICB9LFxuXG4gIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKGgpIHtcbiAgICB2YXIgc2l6ZSA9IHRoaXMuc2l6ZSxcbiAgICAgICAgbW92ZSA9IHRoaXMubW92ZSxcbiAgICAgICAgYmFyID0gdGhpcy5iYXI7XG5cblxuICAgIHJldHVybiBoKFxuICAgICAgJ2RpdicsXG4gICAgICB7XG4gICAgICAgICdjbGFzcyc6IFsnZWwtc2Nyb2xsYmFyX19iYXInLCAnaXMtJyArIGJhci5rZXldLFxuICAgICAgICBvbjoge1xuICAgICAgICAgICdtb3VzZWRvd24nOiB0aGlzLmNsaWNrVHJhY2tIYW5kbGVyXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBbaCgnZGl2Jywge1xuICAgICAgICByZWY6ICd0aHVtYicsXG4gICAgICAgICdjbGFzcyc6ICdlbC1zY3JvbGxiYXJfX3RodW1iJyxcbiAgICAgICAgb246IHtcbiAgICAgICAgICAnbW91c2Vkb3duJzogdGhpcy5jbGlja1RodW1iSGFuZGxlclxuICAgICAgICB9LFxuXG4gICAgICAgIHN0eWxlOiByZW5kZXJUaHVtYlN0eWxlKHsgc2l6ZTogc2l6ZSwgbW92ZTogbW92ZSwgYmFyOiBiYXIgfSkgfSldXG4gICAgKTtcbiAgfSxcblxuXG4gIG1ldGhvZHM6IHtcbiAgICBjbGlja1RodW1iSGFuZGxlcjogZnVuY3Rpb24gY2xpY2tUaHVtYkhhbmRsZXIoZSkge1xuICAgICAgLy8gcHJldmVudCBjbGljayBldmVudCBvZiByaWdodCBidXR0b25cbiAgICAgIGlmIChlLmN0cmxLZXkgfHwgZS5idXR0b24gPT09IDIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5zdGFydERyYWcoZSk7XG4gICAgICB0aGlzW3RoaXMuYmFyLmF4aXNdID0gZS5jdXJyZW50VGFyZ2V0W3RoaXMuYmFyLm9mZnNldF0gLSAoZVt0aGlzLmJhci5jbGllbnRdIC0gZS5jdXJyZW50VGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW3RoaXMuYmFyLmRpcmVjdGlvbl0pO1xuICAgIH0sXG4gICAgY2xpY2tUcmFja0hhbmRsZXI6IGZ1bmN0aW9uIGNsaWNrVHJhY2tIYW5kbGVyKGUpIHtcbiAgICAgIHZhciBvZmZzZXQgPSBNYXRoLmFicyhlLnRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVt0aGlzLmJhci5kaXJlY3Rpb25dIC0gZVt0aGlzLmJhci5jbGllbnRdKTtcbiAgICAgIHZhciB0aHVtYkhhbGYgPSB0aGlzLiRyZWZzLnRodW1iW3RoaXMuYmFyLm9mZnNldF0gLyAyO1xuICAgICAgdmFyIHRodW1iUG9zaXRpb25QZXJjZW50YWdlID0gKG9mZnNldCAtIHRodW1iSGFsZikgKiAxMDAgLyB0aGlzLiRlbFt0aGlzLmJhci5vZmZzZXRdO1xuXG4gICAgICB0aGlzLndyYXBbdGhpcy5iYXIuc2Nyb2xsXSA9IHRodW1iUG9zaXRpb25QZXJjZW50YWdlICogdGhpcy53cmFwW3RoaXMuYmFyLnNjcm9sbFNpemVdIC8gMTAwO1xuICAgIH0sXG4gICAgc3RhcnREcmFnOiBmdW5jdGlvbiBzdGFydERyYWcoZSkge1xuICAgICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICAgIHRoaXMuY3Vyc29yRG93biA9IHRydWU7XG5cbiAgICAgIE9iamVjdChkb21fW1wib25cIl0pKGRvY3VtZW50LCAnbW91c2Vtb3ZlJywgdGhpcy5tb3VzZU1vdmVEb2N1bWVudEhhbmRsZXIpO1xuICAgICAgT2JqZWN0KGRvbV9bXCJvblwiXSkoZG9jdW1lbnQsICdtb3VzZXVwJywgdGhpcy5tb3VzZVVwRG9jdW1lbnRIYW5kbGVyKTtcbiAgICAgIGRvY3VtZW50Lm9uc2VsZWN0c3RhcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH07XG4gICAgfSxcbiAgICBtb3VzZU1vdmVEb2N1bWVudEhhbmRsZXI6IGZ1bmN0aW9uIG1vdXNlTW92ZURvY3VtZW50SGFuZGxlcihlKSB7XG4gICAgICBpZiAodGhpcy5jdXJzb3JEb3duID09PSBmYWxzZSkgcmV0dXJuO1xuICAgICAgdmFyIHByZXZQYWdlID0gdGhpc1t0aGlzLmJhci5heGlzXTtcblxuICAgICAgaWYgKCFwcmV2UGFnZSkgcmV0dXJuO1xuXG4gICAgICB2YXIgb2Zmc2V0ID0gKHRoaXMuJGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW3RoaXMuYmFyLmRpcmVjdGlvbl0gLSBlW3RoaXMuYmFyLmNsaWVudF0pICogLTE7XG4gICAgICB2YXIgdGh1bWJDbGlja1Bvc2l0aW9uID0gdGhpcy4kcmVmcy50aHVtYlt0aGlzLmJhci5vZmZzZXRdIC0gcHJldlBhZ2U7XG4gICAgICB2YXIgdGh1bWJQb3NpdGlvblBlcmNlbnRhZ2UgPSAob2Zmc2V0IC0gdGh1bWJDbGlja1Bvc2l0aW9uKSAqIDEwMCAvIHRoaXMuJGVsW3RoaXMuYmFyLm9mZnNldF07XG5cbiAgICAgIHRoaXMud3JhcFt0aGlzLmJhci5zY3JvbGxdID0gdGh1bWJQb3NpdGlvblBlcmNlbnRhZ2UgKiB0aGlzLndyYXBbdGhpcy5iYXIuc2Nyb2xsU2l6ZV0gLyAxMDA7XG4gICAgfSxcbiAgICBtb3VzZVVwRG9jdW1lbnRIYW5kbGVyOiBmdW5jdGlvbiBtb3VzZVVwRG9jdW1lbnRIYW5kbGVyKGUpIHtcbiAgICAgIHRoaXMuY3Vyc29yRG93biA9IGZhbHNlO1xuICAgICAgdGhpc1t0aGlzLmJhci5heGlzXSA9IDA7XG4gICAgICBPYmplY3QoZG9tX1tcIm9mZlwiXSkoZG9jdW1lbnQsICdtb3VzZW1vdmUnLCB0aGlzLm1vdXNlTW92ZURvY3VtZW50SGFuZGxlcik7XG4gICAgICBkb2N1bWVudC5vbnNlbGVjdHN0YXJ0ID0gbnVsbDtcbiAgICB9XG4gIH0sXG5cbiAgZGVzdHJveWVkOiBmdW5jdGlvbiBkZXN0cm95ZWQoKSB7XG4gICAgT2JqZWN0KGRvbV9bXCJvZmZcIl0pKGRvY3VtZW50LCAnbW91c2V1cCcsIHRoaXMubW91c2VVcERvY3VtZW50SGFuZGxlcik7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9zY3JvbGxiYXIvc3JjL21haW4uanNcbi8vIHJlZmVyZW5jZSBodHRwczovL2dpdGh1Yi5jb20vbm9lbGRlbGdhZG8vZ2VtaW5pLXNjcm9sbGJhci9ibG9iL21hc3Rlci9pbmRleC5qc1xuXG5cblxuXG5cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIG1haW4gPSAoe1xuICBuYW1lOiAnRWxTY3JvbGxiYXInLFxuXG4gIGNvbXBvbmVudHM6IHsgQmFyOiBzcmNfYmFyIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBuYXRpdmU6IEJvb2xlYW4sXG4gICAgd3JhcFN0eWxlOiB7fSxcbiAgICB3cmFwQ2xhc3M6IHt9LFxuICAgIHZpZXdDbGFzczoge30sXG4gICAgdmlld1N0eWxlOiB7fSxcbiAgICBub3Jlc2l6ZTogQm9vbGVhbiwgLy8g5aaC5p6cIGNvbnRhaW5lciDlsLrlr7jkuI3kvJrlj5HnlJ/lj5jljJbvvIzmnIDlpb3orr7nva7lroPlj6/ku6XkvJjljJbmgKfog71cbiAgICB0YWc6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdkaXYnXG4gICAgfVxuICB9LFxuXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNpemVXaWR0aDogJzAnLFxuICAgICAgc2l6ZUhlaWdodDogJzAnLFxuICAgICAgbW92ZVg6IDAsXG4gICAgICBtb3ZlWTogMFxuICAgIH07XG4gIH0sXG5cblxuICBjb21wdXRlZDoge1xuICAgIHdyYXA6IGZ1bmN0aW9uIHdyYXAoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcmVmcy53cmFwO1xuICAgIH1cbiAgfSxcblxuICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcihoKSB7XG4gICAgdmFyIGd1dHRlciA9IHNjcm9sbGJhcl93aWR0aF9kZWZhdWx0KCkoKTtcbiAgICB2YXIgc3R5bGUgPSB0aGlzLndyYXBTdHlsZTtcblxuICAgIGlmIChndXR0ZXIpIHtcbiAgICAgIHZhciBndXR0ZXJXaXRoID0gJy0nICsgZ3V0dGVyICsgJ3B4JztcbiAgICAgIHZhciBndXR0ZXJTdHlsZSA9ICdtYXJnaW4tYm90dG9tOiAnICsgZ3V0dGVyV2l0aCArICc7IG1hcmdpbi1yaWdodDogJyArIGd1dHRlcldpdGggKyAnOyc7XG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMud3JhcFN0eWxlKSkge1xuICAgICAgICBzdHlsZSA9IE9iamVjdCh1dGlsX1tcInRvT2JqZWN0XCJdKSh0aGlzLndyYXBTdHlsZSk7XG4gICAgICAgIHN0eWxlLm1hcmdpblJpZ2h0ID0gc3R5bGUubWFyZ2luQm90dG9tID0gZ3V0dGVyV2l0aDtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMud3JhcFN0eWxlID09PSAnc3RyaW5nJykge1xuICAgICAgICBzdHlsZSArPSBndXR0ZXJTdHlsZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0eWxlID0gZ3V0dGVyU3R5bGU7XG4gICAgICB9XG4gICAgfVxuICAgIHZhciB2aWV3ID0gaCh0aGlzLnRhZywge1xuICAgICAgY2xhc3M6IFsnZWwtc2Nyb2xsYmFyX192aWV3JywgdGhpcy52aWV3Q2xhc3NdLFxuICAgICAgc3R5bGU6IHRoaXMudmlld1N0eWxlLFxuICAgICAgcmVmOiAncmVzaXplJ1xuICAgIH0sIHRoaXMuJHNsb3RzLmRlZmF1bHQpO1xuICAgIHZhciB3cmFwID0gaChcbiAgICAgICdkaXYnLFxuICAgICAge1xuICAgICAgICByZWY6ICd3cmFwJyxcbiAgICAgICAgc3R5bGU6IHN0eWxlLFxuICAgICAgICBvbjoge1xuICAgICAgICAgICdzY3JvbGwnOiB0aGlzLmhhbmRsZVNjcm9sbFxuICAgICAgICB9LFxuXG4gICAgICAgICdjbGFzcyc6IFt0aGlzLndyYXBDbGFzcywgJ2VsLXNjcm9sbGJhcl9fd3JhcCcsIGd1dHRlciA/ICcnIDogJ2VsLXNjcm9sbGJhcl9fd3JhcC0taGlkZGVuLWRlZmF1bHQnXSB9LFxuICAgICAgW1t2aWV3XV1cbiAgICApO1xuICAgIHZhciBub2RlcyA9IHZvaWQgMDtcblxuICAgIGlmICghdGhpcy5uYXRpdmUpIHtcbiAgICAgIG5vZGVzID0gW3dyYXAsIGgoc3JjX2Jhciwge1xuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIG1vdmU6IHRoaXMubW92ZVgsXG4gICAgICAgICAgc2l6ZTogdGhpcy5zaXplV2lkdGggfVxuICAgICAgfSksIGgoc3JjX2Jhciwge1xuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIHZlcnRpY2FsOiB0cnVlLFxuICAgICAgICAgIG1vdmU6IHRoaXMubW92ZVksXG4gICAgICAgICAgc2l6ZTogdGhpcy5zaXplSGVpZ2h0IH1cbiAgICAgIH0pXTtcbiAgICB9IGVsc2Uge1xuICAgICAgbm9kZXMgPSBbaChcbiAgICAgICAgJ2RpdicsXG4gICAgICAgIHtcbiAgICAgICAgICByZWY6ICd3cmFwJyxcbiAgICAgICAgICAnY2xhc3MnOiBbdGhpcy53cmFwQ2xhc3MsICdlbC1zY3JvbGxiYXJfX3dyYXAnXSxcbiAgICAgICAgICBzdHlsZTogc3R5bGUgfSxcbiAgICAgICAgW1t2aWV3XV1cbiAgICAgICldO1xuICAgIH1cbiAgICByZXR1cm4gaCgnZGl2JywgeyBjbGFzczogJ2VsLXNjcm9sbGJhcicgfSwgbm9kZXMpO1xuICB9LFxuXG5cbiAgbWV0aG9kczoge1xuICAgIGhhbmRsZVNjcm9sbDogZnVuY3Rpb24gaGFuZGxlU2Nyb2xsKCkge1xuICAgICAgdmFyIHdyYXAgPSB0aGlzLndyYXA7XG5cbiAgICAgIHRoaXMubW92ZVkgPSB3cmFwLnNjcm9sbFRvcCAqIDEwMCAvIHdyYXAuY2xpZW50SGVpZ2h0O1xuICAgICAgdGhpcy5tb3ZlWCA9IHdyYXAuc2Nyb2xsTGVmdCAqIDEwMCAvIHdyYXAuY2xpZW50V2lkdGg7XG4gICAgfSxcbiAgICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZSgpIHtcbiAgICAgIHZhciBoZWlnaHRQZXJjZW50YWdlID0gdm9pZCAwLFxuICAgICAgICAgIHdpZHRoUGVyY2VudGFnZSA9IHZvaWQgMDtcbiAgICAgIHZhciB3cmFwID0gdGhpcy53cmFwO1xuICAgICAgaWYgKCF3cmFwKSByZXR1cm47XG5cbiAgICAgIGhlaWdodFBlcmNlbnRhZ2UgPSB3cmFwLmNsaWVudEhlaWdodCAqIDEwMCAvIHdyYXAuc2Nyb2xsSGVpZ2h0O1xuICAgICAgd2lkdGhQZXJjZW50YWdlID0gd3JhcC5jbGllbnRXaWR0aCAqIDEwMCAvIHdyYXAuc2Nyb2xsV2lkdGg7XG5cbiAgICAgIHRoaXMuc2l6ZUhlaWdodCA9IGhlaWdodFBlcmNlbnRhZ2UgPCAxMDAgPyBoZWlnaHRQZXJjZW50YWdlICsgJyUnIDogJyc7XG4gICAgICB0aGlzLnNpemVXaWR0aCA9IHdpZHRoUGVyY2VudGFnZSA8IDEwMCA/IHdpZHRoUGVyY2VudGFnZSArICclJyA6ICcnO1xuICAgIH1cbiAgfSxcblxuICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge1xuICAgIGlmICh0aGlzLm5hdGl2ZSkgcmV0dXJuO1xuICAgIHRoaXMuJG5leHRUaWNrKHRoaXMudXBkYXRlKTtcbiAgICAhdGhpcy5ub3Jlc2l6ZSAmJiBPYmplY3QocmVzaXplX2V2ZW50X1tcImFkZFJlc2l6ZUxpc3RlbmVyXCJdKSh0aGlzLiRyZWZzLnJlc2l6ZSwgdGhpcy51cGRhdGUpO1xuICB9LFxuICBiZWZvcmVEZXN0cm95OiBmdW5jdGlvbiBiZWZvcmVEZXN0cm95KCkge1xuICAgIGlmICh0aGlzLm5hdGl2ZSkgcmV0dXJuO1xuICAgICF0aGlzLm5vcmVzaXplICYmIE9iamVjdChyZXNpemVfZXZlbnRfW1wicmVtb3ZlUmVzaXplTGlzdGVuZXJcIl0pKHRoaXMuJHJlZnMucmVzaXplLCB0aGlzLnVwZGF0ZSk7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9zY3JvbGxiYXIvaW5kZXguanNcblxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xubWFpbi5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuICBWdWUuY29tcG9uZW50KG1haW4ubmFtZSwgbWFpbik7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzY3JvbGxiYXIgPSBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChtYWluKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDE2OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi91dGlscy9yZXNpemUtZXZlbnRcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAyOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi91dGlscy9kb21cIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAzOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi91dGlscy91dGlsXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMzk6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImVsZW1lbnQtdWkvbGliL3V0aWxzL3Njcm9sbGJhci13aWR0aFwiKTtcblxuLyoqKi8gfSlcblxuLyoqKioqKi8gfSk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/scrollbar.js\n");

/***/ }),

/***/ "./node_modules/element-ui/lib/select.js":
/*!***********************************************!*\
  !*** ./node_modules/element-ui/lib/select.js ***!
  \***********************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

eval("module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __nested_webpack_require_187__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __nested_webpack_require_187__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__nested_webpack_require_187__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__nested_webpack_require_187__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__nested_webpack_require_187__.d = function(exports, name, getter) {\n/******/ \t\tif(!__nested_webpack_require_187__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__nested_webpack_require_187__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__nested_webpack_require_187__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __nested_webpack_require_187__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__nested_webpack_require_187__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __nested_webpack_require_187__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__nested_webpack_require_187__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__nested_webpack_require_187__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__nested_webpack_require_187__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__nested_webpack_require_187__.p = \"/dist/\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __nested_webpack_require_187__(__nested_webpack_require_187__.s = 62);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_3672__) {\n\n\"use strict\";\n/* harmony export (binding) */ __nested_webpack_require_3672__.d(__nested_webpack_exports__, \"a\", function() { return normalizeComponent; });\n/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nfunction normalizeComponent (\n  scriptExports,\n  render,\n  staticRenderFns,\n  functionalTemplate,\n  injectStyles,\n  scopeId,\n  moduleIdentifier, /* server only */\n  shadowMode /* vue-cli only */\n) {\n  // Vue.extend constructor export interop\n  var options = typeof scriptExports === 'function'\n    ? scriptExports.options\n    : scriptExports\n\n  // render functions\n  if (render) {\n    options.render = render\n    options.staticRenderFns = staticRenderFns\n    options._compiled = true\n  }\n\n  // functional template\n  if (functionalTemplate) {\n    options.functional = true\n  }\n\n  // scopedId\n  if (scopeId) {\n    options._scopeId = 'data-v-' + scopeId\n  }\n\n  var hook\n  if (moduleIdentifier) { // server build\n    hook = function (context) {\n      // 2.3 injection\n      context =\n        context || // cached call\n        (this.$vnode && this.$vnode.ssrContext) || // stateful\n        (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n      // 2.2 with runInNewContext: true\n      if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n        context = __VUE_SSR_CONTEXT__\n      }\n      // inject component styles\n      if (injectStyles) {\n        injectStyles.call(this, context)\n      }\n      // register component module identifier for async chunk inferrence\n      if (context && context._registeredComponents) {\n        context._registeredComponents.add(moduleIdentifier)\n      }\n    }\n    // used by ssr in case component is cached and beforeCreate\n    // never gets called\n    options._ssrRegister = hook\n  } else if (injectStyles) {\n    hook = shadowMode\n      ? function () { injectStyles.call(this, this.$root.$options.shadowRoot) }\n      : injectStyles\n  }\n\n  if (hook) {\n    if (options.functional) {\n      // for template-only hot-reload because in that case the render fn doesn't\n      // go through the normalizer\n      options._injectStyles = hook\n      // register for functioal component in vue file\n      var originalRender = options.render\n      options.render = function renderWithStyleInjection (h, context) {\n        hook.call(context)\n        return originalRender(h, context)\n      }\n    } else {\n      // inject component registration as beforeCreate hook\n      var existing = options.beforeCreate\n      options.beforeCreate = existing\n        ? [].concat(existing, hook)\n        : [hook]\n    }\n  }\n\n  return {\n    exports: scriptExports,\n    options: options\n  }\n}\n\n\n/***/ }),\n\n/***/ 10:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/input */ \"./node_modules/element-ui/lib/input.js\");\n\n/***/ }),\n\n/***/ 12:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/clickoutside */ \"./node_modules/element-ui/lib/utils/clickoutside.js\");\n\n/***/ }),\n\n/***/ 15:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/scrollbar */ \"./node_modules/element-ui/lib/scrollbar.js\");\n\n/***/ }),\n\n/***/ 16:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/resize-event */ \"./node_modules/element-ui/lib/utils/resize-event.js\");\n\n/***/ }),\n\n/***/ 19:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! throttle-debounce/debounce */ \"./node_modules/throttle-debounce/debounce.js\");\n\n/***/ }),\n\n/***/ 21:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/shared */ \"./node_modules/element-ui/lib/utils/shared.js\");\n\n/***/ }),\n\n/***/ 22:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/mixins/focus */ \"./node_modules/element-ui/lib/mixins/focus.js\");\n\n/***/ }),\n\n/***/ 3:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/util */ \"./node_modules/element-ui/lib/utils/util.js\");\n\n/***/ }),\n\n/***/ 31:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/scroll-into-view */ \"./node_modules/element-ui/lib/utils/scroll-into-view.js\");\n\n/***/ }),\n\n/***/ 33:\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_7618__) {\n\n\"use strict\";\n\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/select/src/option.vue?vue&type=template&id=7a44c642&\nvar render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"li\",\n    {\n      directives: [\n        {\n          name: \"show\",\n          rawName: \"v-show\",\n          value: _vm.visible,\n          expression: \"visible\"\n        }\n      ],\n      staticClass: \"el-select-dropdown__item\",\n      class: {\n        selected: _vm.itemSelected,\n        \"is-disabled\": _vm.disabled || _vm.groupDisabled || _vm.limitReached,\n        hover: _vm.hover\n      },\n      on: {\n        mouseenter: _vm.hoverItem,\n        click: function($event) {\n          $event.stopPropagation()\n          return _vm.selectOptionClick($event)\n        }\n      }\n    },\n    [_vm._t(\"default\", [_c(\"span\", [_vm._v(_vm._s(_vm.currentLabel))])])],\n    2\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/select/src/option.vue?vue&type=template&id=7a44c642&\n\n// EXTERNAL MODULE: external \"element-ui/lib/mixins/emitter\"\nvar emitter_ = __nested_webpack_require_7618__(4);\nvar emitter_default = /*#__PURE__*/__nested_webpack_require_7618__.n(emitter_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/util\"\nvar util_ = __nested_webpack_require_7618__(3);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/select/src/option.vue?vue&type=script&lang=js&\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n/* harmony default export */ var optionvue_type_script_lang_js_ = ({\n  mixins: [emitter_default.a],\n\n  name: 'ElOption',\n\n  componentName: 'ElOption',\n\n  inject: ['select'],\n\n  props: {\n    value: {\n      required: true\n    },\n    label: [String, Number],\n    created: Boolean,\n    disabled: {\n      type: Boolean,\n      default: false\n    }\n  },\n\n  data: function data() {\n    return {\n      index: -1,\n      groupDisabled: false,\n      visible: true,\n      hitState: false,\n      hover: false\n    };\n  },\n\n\n  computed: {\n    isObject: function isObject() {\n      return Object.prototype.toString.call(this.value).toLowerCase() === '[object object]';\n    },\n    currentLabel: function currentLabel() {\n      return this.label || (this.isObject ? '' : this.value);\n    },\n    currentValue: function currentValue() {\n      return this.value || this.label || '';\n    },\n    itemSelected: function itemSelected() {\n      if (!this.select.multiple) {\n        return this.isEqual(this.value, this.select.value);\n      } else {\n        return this.contains(this.select.value, this.value);\n      }\n    },\n    limitReached: function limitReached() {\n      if (this.select.multiple) {\n        return !this.itemSelected && (this.select.value || []).length >= this.select.multipleLimit && this.select.multipleLimit > 0;\n      } else {\n        return false;\n      }\n    }\n  },\n\n  watch: {\n    currentLabel: function currentLabel() {\n      if (!this.created && !this.select.remote) this.dispatch('ElSelect', 'setSelected');\n    },\n    value: function value(val, oldVal) {\n      var _select = this.select,\n          remote = _select.remote,\n          valueKey = _select.valueKey;\n\n      if (!this.created && !remote) {\n        if (valueKey && (typeof val === 'undefined' ? 'undefined' : _typeof(val)) === 'object' && (typeof oldVal === 'undefined' ? 'undefined' : _typeof(oldVal)) === 'object' && val[valueKey] === oldVal[valueKey]) {\n          return;\n        }\n        this.dispatch('ElSelect', 'setSelected');\n      }\n    }\n  },\n\n  methods: {\n    isEqual: function isEqual(a, b) {\n      if (!this.isObject) {\n        return a === b;\n      } else {\n        var valueKey = this.select.valueKey;\n        return Object(util_[\"getValueByPath\"])(a, valueKey) === Object(util_[\"getValueByPath\"])(b, valueKey);\n      }\n    },\n    contains: function contains() {\n      var arr = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n      var target = arguments[1];\n\n      if (!this.isObject) {\n        return arr && arr.indexOf(target) > -1;\n      } else {\n        var valueKey = this.select.valueKey;\n        return arr && arr.some(function (item) {\n          return Object(util_[\"getValueByPath\"])(item, valueKey) === Object(util_[\"getValueByPath\"])(target, valueKey);\n        });\n      }\n    },\n    handleGroupDisabled: function handleGroupDisabled(val) {\n      this.groupDisabled = val;\n    },\n    hoverItem: function hoverItem() {\n      if (!this.disabled && !this.groupDisabled) {\n        this.select.hoverIndex = this.select.options.indexOf(this);\n      }\n    },\n    selectOptionClick: function selectOptionClick() {\n      if (this.disabled !== true && this.groupDisabled !== true) {\n        this.dispatch('ElSelect', 'handleOptionClick', [this, true]);\n      }\n    },\n    queryChange: function queryChange(query) {\n      this.visible = new RegExp(Object(util_[\"escapeRegexpString\"])(query), 'i').test(this.currentLabel) || this.created;\n      if (!this.visible) {\n        this.select.filteredOptionsCount--;\n      }\n    }\n  },\n\n  created: function created() {\n    this.select.options.push(this);\n    this.select.cachedOptions.push(this);\n    this.select.optionsCount++;\n    this.select.filteredOptionsCount++;\n\n    this.$on('queryChange', this.queryChange);\n    this.$on('handleGroupDisabled', this.handleGroupDisabled);\n  },\n  beforeDestroy: function beforeDestroy() {\n    var _select2 = this.select,\n        selected = _select2.selected,\n        multiple = _select2.multiple;\n\n    var selectedOptions = multiple ? selected : [selected];\n    var index = this.select.cachedOptions.indexOf(this);\n    var selectedIndex = selectedOptions.indexOf(this);\n\n    // if option is not selected, remove it from cache\n    if (index > -1 && selectedIndex < 0) {\n      this.select.cachedOptions.splice(index, 1);\n    }\n    this.select.onOptionDestroy(this.select.options.indexOf(this));\n  }\n});\n// CONCATENATED MODULE: ./packages/select/src/option.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_optionvue_type_script_lang_js_ = (optionvue_type_script_lang_js_); \n// EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js\nvar componentNormalizer = __nested_webpack_require_7618__(0);\n\n// CONCATENATED MODULE: ./packages/select/src/option.vue\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(componentNormalizer[\"a\" /* default */])(\n  src_optionvue_type_script_lang_js_,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"packages/select/src/option.vue\"\n/* harmony default export */ var src_option = __nested_webpack_exports__[\"a\"] = (component.exports);\n\n/***/ }),\n\n/***/ 38:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/tag */ \"./node_modules/element-ui/lib/tag.js\");\n\n/***/ }),\n\n/***/ 4:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/mixins/emitter */ \"./node_modules/element-ui/lib/mixins/emitter.js\");\n\n/***/ }),\n\n/***/ 5:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/vue-popper */ \"./node_modules/element-ui/lib/utils/vue-popper.js\");\n\n/***/ }),\n\n/***/ 6:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/mixins/locale */ \"./node_modules/element-ui/lib/mixins/locale.js\");\n\n/***/ }),\n\n/***/ 62:\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_15233__) {\n\n\"use strict\";\n__nested_webpack_require_15233__.r(__nested_webpack_exports__);\n\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/select/src/select.vue?vue&type=template&id=0e4aade6&\nvar render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    {\n      directives: [\n        {\n          name: \"clickoutside\",\n          rawName: \"v-clickoutside\",\n          value: _vm.handleClose,\n          expression: \"handleClose\"\n        }\n      ],\n      staticClass: \"el-select\",\n      class: [_vm.selectSize ? \"el-select--\" + _vm.selectSize : \"\"],\n      on: {\n        click: function($event) {\n          $event.stopPropagation()\n          return _vm.toggleMenu($event)\n        }\n      }\n    },\n    [\n      _vm.multiple\n        ? _c(\n            \"div\",\n            {\n              ref: \"tags\",\n              staticClass: \"el-select__tags\",\n              style: { \"max-width\": _vm.inputWidth - 32 + \"px\", width: \"100%\" }\n            },\n            [\n              _vm.collapseTags && _vm.selected.length\n                ? _c(\n                    \"span\",\n                    [\n                      _c(\n                        \"el-tag\",\n                        {\n                          attrs: {\n                            closable: !_vm.selectDisabled,\n                            size: _vm.collapseTagSize,\n                            hit: _vm.selected[0].hitState,\n                            type: \"info\",\n                            \"disable-transitions\": \"\"\n                          },\n                          on: {\n                            close: function($event) {\n                              _vm.deleteTag($event, _vm.selected[0])\n                            }\n                          }\n                        },\n                        [\n                          _c(\"span\", { staticClass: \"el-select__tags-text\" }, [\n                            _vm._v(_vm._s(_vm.selected[0].currentLabel))\n                          ])\n                        ]\n                      ),\n                      _vm.selected.length > 1\n                        ? _c(\n                            \"el-tag\",\n                            {\n                              attrs: {\n                                closable: false,\n                                size: _vm.collapseTagSize,\n                                type: \"info\",\n                                \"disable-transitions\": \"\"\n                              }\n                            },\n                            [\n                              _c(\n                                \"span\",\n                                { staticClass: \"el-select__tags-text\" },\n                                [_vm._v(\"+ \" + _vm._s(_vm.selected.length - 1))]\n                              )\n                            ]\n                          )\n                        : _vm._e()\n                    ],\n                    1\n                  )\n                : _vm._e(),\n              !_vm.collapseTags\n                ? _c(\n                    \"transition-group\",\n                    { on: { \"after-leave\": _vm.resetInputHeight } },\n                    _vm._l(_vm.selected, function(item) {\n                      return _c(\n                        \"el-tag\",\n                        {\n                          key: _vm.getValueKey(item),\n                          attrs: {\n                            closable: !_vm.selectDisabled,\n                            size: _vm.collapseTagSize,\n                            hit: item.hitState,\n                            type: \"info\",\n                            \"disable-transitions\": \"\"\n                          },\n                          on: {\n                            close: function($event) {\n                              _vm.deleteTag($event, item)\n                            }\n                          }\n                        },\n                        [\n                          _c(\"span\", { staticClass: \"el-select__tags-text\" }, [\n                            _vm._v(_vm._s(item.currentLabel))\n                          ])\n                        ]\n                      )\n                    }),\n                    1\n                  )\n                : _vm._e(),\n              _vm.filterable\n                ? _c(\"input\", {\n                    directives: [\n                      {\n                        name: \"model\",\n                        rawName: \"v-model\",\n                        value: _vm.query,\n                        expression: \"query\"\n                      }\n                    ],\n                    ref: \"input\",\n                    staticClass: \"el-select__input\",\n                    class: [_vm.selectSize ? \"is-\" + _vm.selectSize : \"\"],\n                    style: {\n                      \"flex-grow\": \"1\",\n                      width: _vm.inputLength / (_vm.inputWidth - 32) + \"%\",\n                      \"max-width\": _vm.inputWidth - 42 + \"px\"\n                    },\n                    attrs: {\n                      type: \"text\",\n                      disabled: _vm.selectDisabled,\n                      autocomplete: _vm.autoComplete || _vm.autocomplete\n                    },\n                    domProps: { value: _vm.query },\n                    on: {\n                      focus: _vm.handleFocus,\n                      blur: function($event) {\n                        _vm.softFocus = false\n                      },\n                      keyup: _vm.managePlaceholder,\n                      keydown: [\n                        _vm.resetInputState,\n                        function($event) {\n                          if (\n                            !(\"button\" in $event) &&\n                            _vm._k($event.keyCode, \"down\", 40, $event.key, [\n                              \"Down\",\n                              \"ArrowDown\"\n                            ])\n                          ) {\n                            return null\n                          }\n                          $event.preventDefault()\n                          _vm.handleNavigate(\"next\")\n                        },\n                        function($event) {\n                          if (\n                            !(\"button\" in $event) &&\n                            _vm._k($event.keyCode, \"up\", 38, $event.key, [\n                              \"Up\",\n                              \"ArrowUp\"\n                            ])\n                          ) {\n                            return null\n                          }\n                          $event.preventDefault()\n                          _vm.handleNavigate(\"prev\")\n                        },\n                        function($event) {\n                          if (\n                            !(\"button\" in $event) &&\n                            _vm._k(\n                              $event.keyCode,\n                              \"enter\",\n                              13,\n                              $event.key,\n                              \"Enter\"\n                            )\n                          ) {\n                            return null\n                          }\n                          $event.preventDefault()\n                          return _vm.selectOption($event)\n                        },\n                        function($event) {\n                          if (\n                            !(\"button\" in $event) &&\n                            _vm._k($event.keyCode, \"esc\", 27, $event.key, [\n                              \"Esc\",\n                              \"Escape\"\n                            ])\n                          ) {\n                            return null\n                          }\n                          $event.stopPropagation()\n                          $event.preventDefault()\n                          _vm.visible = false\n                        },\n                        function($event) {\n                          if (\n                            !(\"button\" in $event) &&\n                            _vm._k(\n                              $event.keyCode,\n                              \"delete\",\n                              [8, 46],\n                              $event.key,\n                              [\"Backspace\", \"Delete\", \"Del\"]\n                            )\n                          ) {\n                            return null\n                          }\n                          return _vm.deletePrevTag($event)\n                        },\n                        function($event) {\n                          if (\n                            !(\"button\" in $event) &&\n                            _vm._k($event.keyCode, \"tab\", 9, $event.key, \"Tab\")\n                          ) {\n                            return null\n                          }\n                          _vm.visible = false\n                        }\n                      ],\n                      compositionstart: _vm.handleComposition,\n                      compositionupdate: _vm.handleComposition,\n                      compositionend: _vm.handleComposition,\n                      input: [\n                        function($event) {\n                          if ($event.target.composing) {\n                            return\n                          }\n                          _vm.query = $event.target.value\n                        },\n                        _vm.debouncedQueryChange\n                      ]\n                    }\n                  })\n                : _vm._e()\n            ],\n            1\n          )\n        : _vm._e(),\n      _c(\n        \"el-input\",\n        {\n          ref: \"reference\",\n          class: { \"is-focus\": _vm.visible },\n          attrs: {\n            type: \"text\",\n            placeholder: _vm.currentPlaceholder,\n            name: _vm.name,\n            id: _vm.id,\n            autocomplete: _vm.autoComplete || _vm.autocomplete,\n            size: _vm.selectSize,\n            disabled: _vm.selectDisabled,\n            readonly: _vm.readonly,\n            \"validate-event\": false,\n            tabindex: _vm.multiple && _vm.filterable ? \"-1\" : null\n          },\n          on: {\n            focus: _vm.handleFocus,\n            blur: _vm.handleBlur,\n            input: _vm.debouncedOnInputChange,\n            compositionstart: _vm.handleComposition,\n            compositionupdate: _vm.handleComposition,\n            compositionend: _vm.handleComposition\n          },\n          nativeOn: {\n            keydown: [\n              function($event) {\n                if (\n                  !(\"button\" in $event) &&\n                  _vm._k($event.keyCode, \"down\", 40, $event.key, [\n                    \"Down\",\n                    \"ArrowDown\"\n                  ])\n                ) {\n                  return null\n                }\n                $event.stopPropagation()\n                $event.preventDefault()\n                _vm.handleNavigate(\"next\")\n              },\n              function($event) {\n                if (\n                  !(\"button\" in $event) &&\n                  _vm._k($event.keyCode, \"up\", 38, $event.key, [\n                    \"Up\",\n                    \"ArrowUp\"\n                  ])\n                ) {\n                  return null\n                }\n                $event.stopPropagation()\n                $event.preventDefault()\n                _vm.handleNavigate(\"prev\")\n              },\n              function($event) {\n                if (\n                  !(\"button\" in $event) &&\n                  _vm._k($event.keyCode, \"enter\", 13, $event.key, \"Enter\")\n                ) {\n                  return null\n                }\n                $event.preventDefault()\n                return _vm.selectOption($event)\n              },\n              function($event) {\n                if (\n                  !(\"button\" in $event) &&\n                  _vm._k($event.keyCode, \"esc\", 27, $event.key, [\n                    \"Esc\",\n                    \"Escape\"\n                  ])\n                ) {\n                  return null\n                }\n                $event.stopPropagation()\n                $event.preventDefault()\n                _vm.visible = false\n              },\n              function($event) {\n                if (\n                  !(\"button\" in $event) &&\n                  _vm._k($event.keyCode, \"tab\", 9, $event.key, \"Tab\")\n                ) {\n                  return null\n                }\n                _vm.visible = false\n              }\n            ],\n            mouseenter: function($event) {\n              _vm.inputHovering = true\n            },\n            mouseleave: function($event) {\n              _vm.inputHovering = false\n            }\n          },\n          model: {\n            value: _vm.selectedLabel,\n            callback: function($$v) {\n              _vm.selectedLabel = $$v\n            },\n            expression: \"selectedLabel\"\n          }\n        },\n        [\n          _vm.$slots.prefix\n            ? _c(\"template\", { slot: \"prefix\" }, [_vm._t(\"prefix\")], 2)\n            : _vm._e(),\n          _c(\"template\", { slot: \"suffix\" }, [\n            _c(\"i\", {\n              directives: [\n                {\n                  name: \"show\",\n                  rawName: \"v-show\",\n                  value: !_vm.showClose,\n                  expression: \"!showClose\"\n                }\n              ],\n              class: [\n                \"el-select__caret\",\n                \"el-input__icon\",\n                \"el-icon-\" + _vm.iconClass\n              ]\n            }),\n            _vm.showClose\n              ? _c(\"i\", {\n                  staticClass:\n                    \"el-select__caret el-input__icon el-icon-circle-close\",\n                  on: { click: _vm.handleClearClick }\n                })\n              : _vm._e()\n          ])\n        ],\n        2\n      ),\n      _c(\n        \"transition\",\n        {\n          attrs: { name: \"el-zoom-in-top\" },\n          on: {\n            \"before-enter\": _vm.handleMenuEnter,\n            \"after-leave\": _vm.doDestroy\n          }\n        },\n        [\n          _c(\n            \"el-select-menu\",\n            {\n              directives: [\n                {\n                  name: \"show\",\n                  rawName: \"v-show\",\n                  value: _vm.visible && _vm.emptyText !== false,\n                  expression: \"visible && emptyText !== false\"\n                }\n              ],\n              ref: \"popper\",\n              attrs: { \"append-to-body\": _vm.popperAppendToBody }\n            },\n            [\n              _c(\n                \"el-scrollbar\",\n                {\n                  directives: [\n                    {\n                      name: \"show\",\n                      rawName: \"v-show\",\n                      value: _vm.options.length > 0 && !_vm.loading,\n                      expression: \"options.length > 0 && !loading\"\n                    }\n                  ],\n                  ref: \"scrollbar\",\n                  class: {\n                    \"is-empty\":\n                      !_vm.allowCreate &&\n                      _vm.query &&\n                      _vm.filteredOptionsCount === 0\n                  },\n                  attrs: {\n                    tag: \"ul\",\n                    \"wrap-class\": \"el-select-dropdown__wrap\",\n                    \"view-class\": \"el-select-dropdown__list\"\n                  }\n                },\n                [\n                  _vm.showNewOption\n                    ? _c(\"el-option\", {\n                        attrs: { value: _vm.query, created: \"\" }\n                      })\n                    : _vm._e(),\n                  _vm._t(\"default\")\n                ],\n                2\n              ),\n              _vm.emptyText &&\n              (!_vm.allowCreate ||\n                _vm.loading ||\n                (_vm.allowCreate && _vm.options.length === 0))\n                ? [\n                    _vm.$slots.empty\n                      ? _vm._t(\"empty\")\n                      : _c(\"p\", { staticClass: \"el-select-dropdown__empty\" }, [\n                          _vm._v(\n                            \"\\n          \" +\n                              _vm._s(_vm.emptyText) +\n                              \"\\n        \"\n                          )\n                        ])\n                  ]\n                : _vm._e()\n            ],\n            2\n          )\n        ],\n        1\n      )\n    ],\n    1\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/select/src/select.vue?vue&type=template&id=0e4aade6&\n\n// EXTERNAL MODULE: external \"element-ui/lib/mixins/emitter\"\nvar emitter_ = __nested_webpack_require_15233__(4);\nvar emitter_default = /*#__PURE__*/__nested_webpack_require_15233__.n(emitter_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/mixins/focus\"\nvar focus_ = __nested_webpack_require_15233__(22);\nvar focus_default = /*#__PURE__*/__nested_webpack_require_15233__.n(focus_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/mixins/locale\"\nvar locale_ = __nested_webpack_require_15233__(6);\nvar locale_default = /*#__PURE__*/__nested_webpack_require_15233__.n(locale_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/input\"\nvar input_ = __nested_webpack_require_15233__(10);\nvar input_default = /*#__PURE__*/__nested_webpack_require_15233__.n(input_);\n\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/select/src/select-dropdown.vue?vue&type=template&id=06828748&\nvar select_dropdownvue_type_template_id_06828748_render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    {\n      staticClass: \"el-select-dropdown el-popper\",\n      class: [{ \"is-multiple\": _vm.$parent.multiple }, _vm.popperClass],\n      style: { minWidth: _vm.minWidth }\n    },\n    [_vm._t(\"default\")],\n    2\n  )\n}\nvar select_dropdownvue_type_template_id_06828748_staticRenderFns = []\nselect_dropdownvue_type_template_id_06828748_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/select/src/select-dropdown.vue?vue&type=template&id=06828748&\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/vue-popper\"\nvar vue_popper_ = __nested_webpack_require_15233__(5);\nvar vue_popper_default = /*#__PURE__*/__nested_webpack_require_15233__.n(vue_popper_);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/select/src/select-dropdown.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n/* harmony default export */ var select_dropdownvue_type_script_lang_js_ = ({\n  name: 'ElSelectDropdown',\n\n  componentName: 'ElSelectDropdown',\n\n  mixins: [vue_popper_default.a],\n\n  props: {\n    placement: {\n      default: 'bottom-start'\n    },\n\n    boundariesPadding: {\n      default: 0\n    },\n\n    popperOptions: {\n      default: function _default() {\n        return {\n          gpuAcceleration: false\n        };\n      }\n    },\n\n    visibleArrow: {\n      default: true\n    },\n\n    appendToBody: {\n      type: Boolean,\n      default: true\n    }\n  },\n\n  data: function data() {\n    return {\n      minWidth: ''\n    };\n  },\n\n\n  computed: {\n    popperClass: function popperClass() {\n      return this.$parent.popperClass;\n    }\n  },\n\n  watch: {\n    '$parent.inputWidth': function $parentInputWidth() {\n      this.minWidth = this.$parent.$el.getBoundingClientRect().width + 'px';\n    }\n  },\n\n  mounted: function mounted() {\n    var _this = this;\n\n    this.referenceElm = this.$parent.$refs.reference.$el;\n    this.$parent.popperElm = this.popperElm = this.$el;\n    this.$on('updatePopper', function () {\n      if (_this.$parent.visible) _this.updatePopper();\n    });\n    this.$on('destroyPopper', this.destroyPopper);\n  }\n});\n// CONCATENATED MODULE: ./packages/select/src/select-dropdown.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_select_dropdownvue_type_script_lang_js_ = (select_dropdownvue_type_script_lang_js_); \n// EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js\nvar componentNormalizer = __nested_webpack_require_15233__(0);\n\n// CONCATENATED MODULE: ./packages/select/src/select-dropdown.vue\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(componentNormalizer[\"a\" /* default */])(\n  src_select_dropdownvue_type_script_lang_js_,\n  select_dropdownvue_type_template_id_06828748_render,\n  select_dropdownvue_type_template_id_06828748_staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"packages/select/src/select-dropdown.vue\"\n/* harmony default export */ var select_dropdown = (component.exports);\n// EXTERNAL MODULE: ./packages/select/src/option.vue + 4 modules\nvar src_option = __nested_webpack_require_15233__(33);\n\n// EXTERNAL MODULE: external \"element-ui/lib/tag\"\nvar tag_ = __nested_webpack_require_15233__(38);\nvar tag_default = /*#__PURE__*/__nested_webpack_require_15233__.n(tag_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/scrollbar\"\nvar scrollbar_ = __nested_webpack_require_15233__(15);\nvar scrollbar_default = /*#__PURE__*/__nested_webpack_require_15233__.n(scrollbar_);\n\n// EXTERNAL MODULE: external \"throttle-debounce/debounce\"\nvar debounce_ = __nested_webpack_require_15233__(19);\nvar debounce_default = /*#__PURE__*/__nested_webpack_require_15233__.n(debounce_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/clickoutside\"\nvar clickoutside_ = __nested_webpack_require_15233__(12);\nvar clickoutside_default = /*#__PURE__*/__nested_webpack_require_15233__.n(clickoutside_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/resize-event\"\nvar resize_event_ = __nested_webpack_require_15233__(16);\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/scroll-into-view\"\nvar scroll_into_view_ = __nested_webpack_require_15233__(31);\nvar scroll_into_view_default = /*#__PURE__*/__nested_webpack_require_15233__.n(scroll_into_view_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/util\"\nvar util_ = __nested_webpack_require_15233__(3);\n\n// CONCATENATED MODULE: ./packages/select/src/navigation-mixin.js\n/* harmony default export */ var navigation_mixin = ({\n  data: function data() {\n    return {\n      hoverOption: -1\n    };\n  },\n\n\n  computed: {\n    optionsAllDisabled: function optionsAllDisabled() {\n      return this.options.filter(function (option) {\n        return option.visible;\n      }).every(function (option) {\n        return option.disabled;\n      });\n    }\n  },\n\n  watch: {\n    hoverIndex: function hoverIndex(val) {\n      var _this = this;\n\n      if (typeof val === 'number' && val > -1) {\n        this.hoverOption = this.options[val] || {};\n      }\n      this.options.forEach(function (option) {\n        option.hover = _this.hoverOption === option;\n      });\n    }\n  },\n\n  methods: {\n    navigateOptions: function navigateOptions(direction) {\n      var _this2 = this;\n\n      if (!this.visible) {\n        this.visible = true;\n        return;\n      }\n      if (this.options.length === 0 || this.filteredOptionsCount === 0) return;\n      if (!this.optionsAllDisabled) {\n        if (direction === 'next') {\n          this.hoverIndex++;\n          if (this.hoverIndex === this.options.length) {\n            this.hoverIndex = 0;\n          }\n        } else if (direction === 'prev') {\n          this.hoverIndex--;\n          if (this.hoverIndex < 0) {\n            this.hoverIndex = this.options.length - 1;\n          }\n        }\n        var option = this.options[this.hoverIndex];\n        if (option.disabled === true || option.groupDisabled === true || !option.visible) {\n          this.navigateOptions(direction);\n        }\n        this.$nextTick(function () {\n          return _this2.scrollToOption(_this2.hoverOption);\n        });\n      }\n    }\n  }\n});\n// EXTERNAL MODULE: external \"element-ui/lib/utils/shared\"\nvar shared_ = __nested_webpack_require_15233__(21);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/select/src/select.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/* harmony default export */ var selectvue_type_script_lang_js_ = ({\n  mixins: [emitter_default.a, locale_default.a, focus_default()('reference'), navigation_mixin],\n\n  name: 'ElSelect',\n\n  componentName: 'ElSelect',\n\n  inject: {\n    elForm: {\n      default: ''\n    },\n\n    elFormItem: {\n      default: ''\n    }\n  },\n\n  provide: function provide() {\n    return {\n      'select': this\n    };\n  },\n\n\n  computed: {\n    _elFormItemSize: function _elFormItemSize() {\n      return (this.elFormItem || {}).elFormItemSize;\n    },\n    readonly: function readonly() {\n      return !this.filterable || this.multiple || !Object(util_[\"isIE\"])() && !Object(util_[\"isEdge\"])() && !this.visible;\n    },\n    showClose: function showClose() {\n      var hasValue = this.multiple ? Array.isArray(this.value) && this.value.length > 0 : this.value !== undefined && this.value !== null && this.value !== '';\n      var criteria = this.clearable && !this.selectDisabled && this.inputHovering && hasValue;\n      return criteria;\n    },\n    iconClass: function iconClass() {\n      return this.remote && this.filterable ? '' : this.visible ? 'arrow-up is-reverse' : 'arrow-up';\n    },\n    debounce: function debounce() {\n      return this.remote ? 300 : 0;\n    },\n    emptyText: function emptyText() {\n      if (this.loading) {\n        return this.loadingText || this.t('el.select.loading');\n      } else {\n        if (this.remote && this.query === '' && this.options.length === 0) return false;\n        if (this.filterable && this.query && this.options.length > 0 && this.filteredOptionsCount === 0) {\n          return this.noMatchText || this.t('el.select.noMatch');\n        }\n        if (this.options.length === 0) {\n          return this.noDataText || this.t('el.select.noData');\n        }\n      }\n      return null;\n    },\n    showNewOption: function showNewOption() {\n      var _this = this;\n\n      var hasExistingOption = this.options.filter(function (option) {\n        return !option.created;\n      }).some(function (option) {\n        return option.currentLabel === _this.query;\n      });\n      return this.filterable && this.allowCreate && this.query !== '' && !hasExistingOption;\n    },\n    selectSize: function selectSize() {\n      return this.size || this._elFormItemSize || (this.$ELEMENT || {}).size;\n    },\n    selectDisabled: function selectDisabled() {\n      return this.disabled || (this.elForm || {}).disabled;\n    },\n    collapseTagSize: function collapseTagSize() {\n      return ['small', 'mini'].indexOf(this.selectSize) > -1 ? 'mini' : 'small';\n    },\n    propPlaceholder: function propPlaceholder() {\n      return typeof this.placeholder !== 'undefined' ? this.placeholder : this.t('el.select.placeholder');\n    }\n  },\n\n  components: {\n    ElInput: input_default.a,\n    ElSelectMenu: select_dropdown,\n    ElOption: src_option[\"a\" /* default */],\n    ElTag: tag_default.a,\n    ElScrollbar: scrollbar_default.a\n  },\n\n  directives: { Clickoutside: clickoutside_default.a },\n\n  props: {\n    name: String,\n    id: String,\n    value: {\n      required: true\n    },\n    autocomplete: {\n      type: String,\n      default: 'off'\n    },\n    /** @Deprecated in next major version */\n    autoComplete: {\n      type: String,\n      validator: function validator(val) {\n          false && 0;\n        return true;\n      }\n    },\n    automaticDropdown: Boolean,\n    size: String,\n    disabled: Boolean,\n    clearable: Boolean,\n    filterable: Boolean,\n    allowCreate: Boolean,\n    loading: Boolean,\n    popperClass: String,\n    remote: Boolean,\n    loadingText: String,\n    noMatchText: String,\n    noDataText: String,\n    remoteMethod: Function,\n    filterMethod: Function,\n    multiple: Boolean,\n    multipleLimit: {\n      type: Number,\n      default: 0\n    },\n    placeholder: {\n      type: String,\n      required: false\n    },\n    defaultFirstOption: Boolean,\n    reserveKeyword: Boolean,\n    valueKey: {\n      type: String,\n      default: 'value'\n    },\n    collapseTags: Boolean,\n    popperAppendToBody: {\n      type: Boolean,\n      default: true\n    }\n  },\n\n  data: function data() {\n    return {\n      options: [],\n      cachedOptions: [],\n      createdLabel: null,\n      createdSelected: false,\n      selected: this.multiple ? [] : {},\n      inputLength: 20,\n      inputWidth: 0,\n      initialInputHeight: 0,\n      cachedPlaceHolder: '',\n      optionsCount: 0,\n      filteredOptionsCount: 0,\n      visible: false,\n      softFocus: false,\n      selectedLabel: '',\n      hoverIndex: -1,\n      query: '',\n      previousQuery: null,\n      inputHovering: false,\n      currentPlaceholder: '',\n      menuVisibleOnFocus: false,\n      isOnComposition: false,\n      isSilentBlur: false\n    };\n  },\n\n\n  watch: {\n    selectDisabled: function selectDisabled() {\n      var _this2 = this;\n\n      this.$nextTick(function () {\n        _this2.resetInputHeight();\n      });\n    },\n    propPlaceholder: function propPlaceholder(val) {\n      this.cachedPlaceHolder = this.currentPlaceholder = val;\n    },\n    value: function value(val, oldVal) {\n      if (this.multiple) {\n        this.resetInputHeight();\n        if (val && val.length > 0 || this.$refs.input && this.query !== '') {\n          this.currentPlaceholder = '';\n        } else {\n          this.currentPlaceholder = this.cachedPlaceHolder;\n        }\n        if (this.filterable && !this.reserveKeyword) {\n          this.query = '';\n          this.handleQueryChange(this.query);\n        }\n      }\n      this.setSelected();\n      if (this.filterable && !this.multiple) {\n        this.inputLength = 20;\n      }\n      if (!Object(util_[\"valueEquals\"])(val, oldVal)) {\n        this.dispatch('ElFormItem', 'el.form.change', val);\n      }\n    },\n    visible: function visible(val) {\n      var _this3 = this;\n\n      if (!val) {\n        this.broadcast('ElSelectDropdown', 'destroyPopper');\n        if (this.$refs.input) {\n          this.$refs.input.blur();\n        }\n        this.query = '';\n        this.previousQuery = null;\n        this.selectedLabel = '';\n        this.inputLength = 20;\n        this.menuVisibleOnFocus = false;\n        this.resetHoverIndex();\n        this.$nextTick(function () {\n          if (_this3.$refs.input && _this3.$refs.input.value === '' && _this3.selected.length === 0) {\n            _this3.currentPlaceholder = _this3.cachedPlaceHolder;\n          }\n        });\n        if (!this.multiple) {\n          if (this.selected) {\n            if (this.filterable && this.allowCreate && this.createdSelected && this.createdLabel) {\n              this.selectedLabel = this.createdLabel;\n            } else {\n              this.selectedLabel = this.selected.currentLabel;\n            }\n            if (this.filterable) this.query = this.selectedLabel;\n          }\n\n          if (this.filterable) {\n            this.currentPlaceholder = this.cachedPlaceHolder;\n          }\n        }\n      } else {\n        this.broadcast('ElSelectDropdown', 'updatePopper');\n        if (this.filterable) {\n          this.query = this.remote ? '' : this.selectedLabel;\n          this.handleQueryChange(this.query);\n          if (this.multiple) {\n            this.$refs.input.focus();\n          } else {\n            if (!this.remote) {\n              this.broadcast('ElOption', 'queryChange', '');\n              this.broadcast('ElOptionGroup', 'queryChange');\n            }\n\n            if (this.selectedLabel) {\n              this.currentPlaceholder = this.selectedLabel;\n              this.selectedLabel = '';\n            }\n          }\n        }\n      }\n      this.$emit('visible-change', val);\n    },\n    options: function options() {\n      var _this4 = this;\n\n      if (this.$isServer) return;\n      this.$nextTick(function () {\n        _this4.broadcast('ElSelectDropdown', 'updatePopper');\n      });\n      if (this.multiple) {\n        this.resetInputHeight();\n      }\n      var inputs = this.$el.querySelectorAll('input');\n      if ([].indexOf.call(inputs, document.activeElement) === -1) {\n        this.setSelected();\n      }\n      if (this.defaultFirstOption && (this.filterable || this.remote) && this.filteredOptionsCount) {\n        this.checkDefaultFirstOption();\n      }\n    }\n  },\n\n  methods: {\n    handleNavigate: function handleNavigate(direction) {\n      if (this.isOnComposition) return;\n\n      this.navigateOptions(direction);\n    },\n    handleComposition: function handleComposition(event) {\n      var _this5 = this;\n\n      var text = event.target.value;\n      if (event.type === 'compositionend') {\n        this.isOnComposition = false;\n        this.$nextTick(function (_) {\n          return _this5.handleQueryChange(text);\n        });\n      } else {\n        var lastCharacter = text[text.length - 1] || '';\n        this.isOnComposition = !Object(shared_[\"isKorean\"])(lastCharacter);\n      }\n    },\n    handleQueryChange: function handleQueryChange(val) {\n      var _this6 = this;\n\n      if (this.previousQuery === val || this.isOnComposition) return;\n      if (this.previousQuery === null && (typeof this.filterMethod === 'function' || typeof this.remoteMethod === 'function')) {\n        this.previousQuery = val;\n        return;\n      }\n      this.previousQuery = val;\n      this.$nextTick(function () {\n        if (_this6.visible) _this6.broadcast('ElSelectDropdown', 'updatePopper');\n      });\n      this.hoverIndex = -1;\n      if (this.multiple && this.filterable) {\n        this.$nextTick(function () {\n          var length = _this6.$refs.input.value.length * 15 + 20;\n          _this6.inputLength = _this6.collapseTags ? Math.min(50, length) : length;\n          _this6.managePlaceholder();\n          _this6.resetInputHeight();\n        });\n      }\n      if (this.remote && typeof this.remoteMethod === 'function') {\n        this.hoverIndex = -1;\n        this.remoteMethod(val);\n      } else if (typeof this.filterMethod === 'function') {\n        this.filterMethod(val);\n        this.broadcast('ElOptionGroup', 'queryChange');\n      } else {\n        this.filteredOptionsCount = this.optionsCount;\n        this.broadcast('ElOption', 'queryChange', val);\n        this.broadcast('ElOptionGroup', 'queryChange');\n      }\n      if (this.defaultFirstOption && (this.filterable || this.remote) && this.filteredOptionsCount) {\n        this.checkDefaultFirstOption();\n      }\n    },\n    scrollToOption: function scrollToOption(option) {\n      var target = Array.isArray(option) && option[0] ? option[0].$el : option.$el;\n      if (this.$refs.popper && target) {\n        var menu = this.$refs.popper.$el.querySelector('.el-select-dropdown__wrap');\n        scroll_into_view_default()(menu, target);\n      }\n      this.$refs.scrollbar && this.$refs.scrollbar.handleScroll();\n    },\n    handleMenuEnter: function handleMenuEnter() {\n      var _this7 = this;\n\n      this.$nextTick(function () {\n        return _this7.scrollToOption(_this7.selected);\n      });\n    },\n    emitChange: function emitChange(val) {\n      if (!Object(util_[\"valueEquals\"])(this.value, val)) {\n        this.$emit('change', val);\n      }\n    },\n    getOption: function getOption(value) {\n      var option = void 0;\n      var isObject = Object.prototype.toString.call(value).toLowerCase() === '[object object]';\n      var isNull = Object.prototype.toString.call(value).toLowerCase() === '[object null]';\n      var isUndefined = Object.prototype.toString.call(value).toLowerCase() === '[object undefined]';\n\n      for (var i = this.cachedOptions.length - 1; i >= 0; i--) {\n        var cachedOption = this.cachedOptions[i];\n        var isEqual = isObject ? Object(util_[\"getValueByPath\"])(cachedOption.value, this.valueKey) === Object(util_[\"getValueByPath\"])(value, this.valueKey) : cachedOption.value === value;\n        if (isEqual) {\n          option = cachedOption;\n          break;\n        }\n      }\n      if (option) return option;\n      var label = !isObject && !isNull && !isUndefined ? String(value) : '';\n      var newOption = {\n        value: value,\n        currentLabel: label\n      };\n      if (this.multiple) {\n        newOption.hitState = false;\n      }\n      return newOption;\n    },\n    setSelected: function setSelected() {\n      var _this8 = this;\n\n      if (!this.multiple) {\n        var option = this.getOption(this.value);\n        if (option.created) {\n          this.createdLabel = option.currentLabel;\n          this.createdSelected = true;\n        } else {\n          this.createdSelected = false;\n        }\n        this.selectedLabel = option.currentLabel;\n        this.selected = option;\n        if (this.filterable) this.query = this.selectedLabel;\n        return;\n      }\n      var result = [];\n      if (Array.isArray(this.value)) {\n        this.value.forEach(function (value) {\n          result.push(_this8.getOption(value));\n        });\n      }\n      this.selected = result;\n      this.$nextTick(function () {\n        _this8.resetInputHeight();\n      });\n    },\n    handleFocus: function handleFocus(event) {\n      if (!this.softFocus) {\n        if (this.automaticDropdown || this.filterable) {\n          if (this.filterable && !this.visible) {\n            this.menuVisibleOnFocus = true;\n          }\n          this.visible = true;\n        }\n        this.$emit('focus', event);\n      } else {\n        this.softFocus = false;\n      }\n    },\n    blur: function blur() {\n      this.visible = false;\n      this.$refs.reference.blur();\n    },\n    handleBlur: function handleBlur(event) {\n      var _this9 = this;\n\n      setTimeout(function () {\n        if (_this9.isSilentBlur) {\n          _this9.isSilentBlur = false;\n        } else {\n          _this9.$emit('blur', event);\n        }\n      }, 50);\n      this.softFocus = false;\n    },\n    handleClearClick: function handleClearClick(event) {\n      this.deleteSelected(event);\n    },\n    doDestroy: function doDestroy() {\n      this.$refs.popper && this.$refs.popper.doDestroy();\n    },\n    handleClose: function handleClose() {\n      this.visible = false;\n    },\n    toggleLastOptionHitState: function toggleLastOptionHitState(hit) {\n      if (!Array.isArray(this.selected)) return;\n      var option = this.selected[this.selected.length - 1];\n      if (!option) return;\n\n      if (hit === true || hit === false) {\n        option.hitState = hit;\n        return hit;\n      }\n\n      option.hitState = !option.hitState;\n      return option.hitState;\n    },\n    deletePrevTag: function deletePrevTag(e) {\n      if (e.target.value.length <= 0 && !this.toggleLastOptionHitState()) {\n        var value = this.value.slice();\n        value.pop();\n        this.$emit('input', value);\n        this.emitChange(value);\n      }\n    },\n    managePlaceholder: function managePlaceholder() {\n      if (this.currentPlaceholder !== '') {\n        this.currentPlaceholder = this.$refs.input.value ? '' : this.cachedPlaceHolder;\n      }\n    },\n    resetInputState: function resetInputState(e) {\n      if (e.keyCode !== 8) this.toggleLastOptionHitState(false);\n      this.inputLength = this.$refs.input.value.length * 15 + 20;\n      this.resetInputHeight();\n    },\n    resetInputHeight: function resetInputHeight() {\n      var _this10 = this;\n\n      if (this.collapseTags && !this.filterable) return;\n      this.$nextTick(function () {\n        if (!_this10.$refs.reference) return;\n        var inputChildNodes = _this10.$refs.reference.$el.childNodes;\n        var input = [].filter.call(inputChildNodes, function (item) {\n          return item.tagName === 'INPUT';\n        })[0];\n        var tags = _this10.$refs.tags;\n        var tagsHeight = tags ? Math.round(tags.getBoundingClientRect().height) : 0;\n        var sizeInMap = _this10.initialInputHeight || 40;\n        input.style.height = _this10.selected.length === 0 ? sizeInMap + 'px' : Math.max(tags ? tagsHeight + (tagsHeight > sizeInMap ? 6 : 0) : 0, sizeInMap) + 'px';\n        if (_this10.visible && _this10.emptyText !== false) {\n          _this10.broadcast('ElSelectDropdown', 'updatePopper');\n        }\n      });\n    },\n    resetHoverIndex: function resetHoverIndex() {\n      var _this11 = this;\n\n      setTimeout(function () {\n        if (!_this11.multiple) {\n          _this11.hoverIndex = _this11.options.indexOf(_this11.selected);\n        } else {\n          if (_this11.selected.length > 0) {\n            _this11.hoverIndex = Math.min.apply(null, _this11.selected.map(function (item) {\n              return _this11.options.indexOf(item);\n            }));\n          } else {\n            _this11.hoverIndex = -1;\n          }\n        }\n      }, 300);\n    },\n    handleOptionSelect: function handleOptionSelect(option, byClick) {\n      var _this12 = this;\n\n      if (this.multiple) {\n        var value = (this.value || []).slice();\n        var optionIndex = this.getValueIndex(value, option.value);\n        if (optionIndex > -1) {\n          value.splice(optionIndex, 1);\n        } else if (this.multipleLimit <= 0 || value.length < this.multipleLimit) {\n          value.push(option.value);\n        }\n        this.$emit('input', value);\n        this.emitChange(value);\n        if (option.created) {\n          this.query = '';\n          this.handleQueryChange('');\n          this.inputLength = 20;\n        }\n        if (this.filterable) this.$refs.input.focus();\n      } else {\n        this.$emit('input', option.value);\n        this.emitChange(option.value);\n        this.visible = false;\n      }\n      this.isSilentBlur = byClick;\n      this.setSoftFocus();\n      if (this.visible) return;\n      this.$nextTick(function () {\n        _this12.scrollToOption(option);\n      });\n    },\n    setSoftFocus: function setSoftFocus() {\n      this.softFocus = true;\n      var input = this.$refs.input || this.$refs.reference;\n      if (input) {\n        input.focus();\n      }\n    },\n    getValueIndex: function getValueIndex() {\n      var arr = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n      var value = arguments[1];\n\n      var isObject = Object.prototype.toString.call(value).toLowerCase() === '[object object]';\n      if (!isObject) {\n        return arr.indexOf(value);\n      } else {\n        var valueKey = this.valueKey;\n        var index = -1;\n        arr.some(function (item, i) {\n          if (Object(util_[\"getValueByPath\"])(item, valueKey) === Object(util_[\"getValueByPath\"])(value, valueKey)) {\n            index = i;\n            return true;\n          }\n          return false;\n        });\n        return index;\n      }\n    },\n    toggleMenu: function toggleMenu() {\n      if (!this.selectDisabled) {\n        if (this.menuVisibleOnFocus) {\n          this.menuVisibleOnFocus = false;\n        } else {\n          this.visible = !this.visible;\n        }\n        if (this.visible) {\n          (this.$refs.input || this.$refs.reference).focus();\n        }\n      }\n    },\n    selectOption: function selectOption() {\n      if (!this.visible) {\n        this.toggleMenu();\n      } else {\n        if (this.options[this.hoverIndex]) {\n          this.handleOptionSelect(this.options[this.hoverIndex]);\n        }\n      }\n    },\n    deleteSelected: function deleteSelected(event) {\n      event.stopPropagation();\n      var value = this.multiple ? [] : '';\n      this.$emit('input', value);\n      this.emitChange(value);\n      this.visible = false;\n      this.$emit('clear');\n    },\n    deleteTag: function deleteTag(event, tag) {\n      var index = this.selected.indexOf(tag);\n      if (index > -1 && !this.selectDisabled) {\n        var value = this.value.slice();\n        value.splice(index, 1);\n        this.$emit('input', value);\n        this.emitChange(value);\n        this.$emit('remove-tag', tag.value);\n      }\n      event.stopPropagation();\n    },\n    onInputChange: function onInputChange() {\n      if (this.filterable && this.query !== this.selectedLabel) {\n        this.query = this.selectedLabel;\n        this.handleQueryChange(this.query);\n      }\n    },\n    onOptionDestroy: function onOptionDestroy(index) {\n      if (index > -1) {\n        this.optionsCount--;\n        this.filteredOptionsCount--;\n        this.options.splice(index, 1);\n      }\n    },\n    resetInputWidth: function resetInputWidth() {\n      this.inputWidth = this.$refs.reference.$el.getBoundingClientRect().width;\n    },\n    handleResize: function handleResize() {\n      this.resetInputWidth();\n      if (this.multiple) this.resetInputHeight();\n    },\n    checkDefaultFirstOption: function checkDefaultFirstOption() {\n      this.hoverIndex = -1;\n      // highlight the created option\n      var hasCreated = false;\n      for (var i = this.options.length - 1; i >= 0; i--) {\n        if (this.options[i].created) {\n          hasCreated = true;\n          this.hoverIndex = i;\n          break;\n        }\n      }\n      if (hasCreated) return;\n      for (var _i = 0; _i !== this.options.length; ++_i) {\n        var option = this.options[_i];\n        if (this.query) {\n          // highlight first options that passes the filter\n          if (!option.disabled && !option.groupDisabled && option.visible) {\n            this.hoverIndex = _i;\n            break;\n          }\n        } else {\n          // highlight currently selected option\n          if (option.itemSelected) {\n            this.hoverIndex = _i;\n            break;\n          }\n        }\n      }\n    },\n    getValueKey: function getValueKey(item) {\n      if (Object.prototype.toString.call(item.value).toLowerCase() !== '[object object]') {\n        return item.value;\n      } else {\n        return Object(util_[\"getValueByPath\"])(item.value, this.valueKey);\n      }\n    }\n  },\n\n  created: function created() {\n    var _this13 = this;\n\n    this.cachedPlaceHolder = this.currentPlaceholder = this.propPlaceholder;\n    if (this.multiple && !Array.isArray(this.value)) {\n      this.$emit('input', []);\n    }\n    if (!this.multiple && Array.isArray(this.value)) {\n      this.$emit('input', '');\n    }\n\n    this.debouncedOnInputChange = debounce_default()(this.debounce, function () {\n      _this13.onInputChange();\n    });\n\n    this.debouncedQueryChange = debounce_default()(this.debounce, function (e) {\n      _this13.handleQueryChange(e.target.value);\n    });\n\n    this.$on('handleOptionClick', this.handleOptionSelect);\n    this.$on('setSelected', this.setSelected);\n  },\n  mounted: function mounted() {\n    var _this14 = this;\n\n    if (this.multiple && Array.isArray(this.value) && this.value.length > 0) {\n      this.currentPlaceholder = '';\n    }\n    Object(resize_event_[\"addResizeListener\"])(this.$el, this.handleResize);\n\n    var reference = this.$refs.reference;\n    if (reference && reference.$el) {\n      var sizeMap = {\n        medium: 36,\n        small: 32,\n        mini: 28\n      };\n      var input = reference.$el.querySelector('input');\n      this.initialInputHeight = input.getBoundingClientRect().height || sizeMap[this.selectSize];\n    }\n    if (this.remote && this.multiple) {\n      this.resetInputHeight();\n    }\n    this.$nextTick(function () {\n      if (reference && reference.$el) {\n        _this14.inputWidth = reference.$el.getBoundingClientRect().width;\n      }\n    });\n    this.setSelected();\n  },\n  beforeDestroy: function beforeDestroy() {\n    if (this.$el && this.handleResize) Object(resize_event_[\"removeResizeListener\"])(this.$el, this.handleResize);\n  }\n});\n// CONCATENATED MODULE: ./packages/select/src/select.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_selectvue_type_script_lang_js_ = (selectvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/select/src/select.vue\n\n\n\n\n\n/* normalize component */\n\nvar select_component = Object(componentNormalizer[\"a\" /* default */])(\n  src_selectvue_type_script_lang_js_,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var select_api; }\nselect_component.options.__file = \"packages/select/src/select.vue\"\n/* harmony default export */ var src_select = (select_component.exports);\n// CONCATENATED MODULE: ./packages/select/index.js\n\n\n/* istanbul ignore next */\nsrc_select.install = function (Vue) {\n  Vue.component(src_select.name, src_select);\n};\n\n/* harmony default export */ var packages_select = __nested_webpack_exports__[\"default\"] = (src_select);\n\n/***/ })\n\n/******/ });//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvc2VsZWN0LmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsOEJBQThCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLDhCQUFtQjtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBFQUEwRSw4QkFBbUI7QUFDN0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLDhCQUFtQjtBQUM3QjtBQUNBO0FBQ0EsVUFBVSw4QkFBbUI7QUFDN0I7QUFDQTtBQUNBLFVBQVUsOEJBQW1CO0FBQzdCLGVBQWUsOEJBQW1CO0FBQ2xDLG1EQUFtRCwrQkFBK0I7QUFDbEY7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLDhCQUFtQjtBQUM3QjtBQUNBLGlFQUFpRSxpQkFBaUI7QUFDbEY7QUFDQSwwREFBMEQsYUFBYTtBQUN2RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsOEJBQW1CO0FBQzdCLGdDQUFnQyw4QkFBbUI7QUFDbkQ7QUFDQTtBQUNBO0FBQ0EsV0FBVyw4QkFBbUI7QUFDOUIsa0RBQWtELGdDQUFnQztBQUNsRiwwRUFBMEUsOEJBQW1CLDRCQUE0QixvQkFBb0I7QUFDN0k7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLDhCQUFtQjtBQUM3QjtBQUNBLG9DQUFvQyw0QkFBNEI7QUFDaEUsMENBQTBDO0FBQzFDLFdBQVcsOEJBQW1CO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSw4QkFBbUIsa0NBQWtDO0FBQy9EO0FBQ0E7QUFDQSxVQUFVLDhCQUFtQjtBQUM3QjtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsOEJBQW1CLENBQUMsOEJBQW1CO0FBQ3hELFVBQVU7QUFDVjtBQUNBOztBQUVBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLCtCQUFtQjs7QUFF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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIseUJBQXlCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWtCQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQSxtQ0FBbUM7QUFDbkMsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsT0FBTztBQUNQO0FBQ0EsS0FBSztBQUNMO0FBQ0Esc0VBQXNFO0FBQ3RFLEtBQUs7QUFDTDtBQUNBLGdEQUFnRDtBQUNoRCxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUgsZ0JBQWdCLHNDQUFzQzs7QUFFdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLE1BQUssSUFBSSxDQUFLO0FBQ3ZCO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QztBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxrREFBa0QsUUFBUTtBQUMxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsUUFBUTtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1Qiw0QkFBNEI7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBOzs7Ozs7QUFNQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksS0FBSyxFQUFFLG1CQUFtQjtBQUM5QjtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG1EQUFtRCwwQkFBbUI7O0FBRXRFLE9BQU87O0FBRVAsVUFBVSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9lbGVtZW50LXVpL2xpYi9zZWxlY3QuanM/NDc2NiJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9XG4vKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwXG4vKioqKioqLyBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4vKioqKioqLyBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4vKioqKioqLyBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbi8qKioqKiovIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuLyoqKioqKi8gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbi8qKioqKiovIFx0XHRcdGk6IG1vZHVsZUlkLFxuLyoqKioqKi8gXHRcdFx0bDogZmFsc2UsXG4vKioqKioqLyBcdFx0XHRleHBvcnRzOiB7fVxuLyoqKioqKi8gXHRcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuLyoqKioqKi8gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4vKioqKioqLyBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuLyoqKioqKi8gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbi8qKioqKiovIFx0fVxuLyoqKioqKi9cbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuLyoqKioqKi8gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbi8qKioqKiovIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuLyoqKioqKi8gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3Rcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4vKioqKioqLyBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuLyoqKioqKi8gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3Rcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4vKioqKioqLyBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbi8qKioqKiovIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4vKioqKioqLyBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbi8qKioqKiovIFx0XHRyZXR1cm4gbnM7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbi8qKioqKiovIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbi8qKioqKiovIFx0XHRyZXR1cm4gZ2V0dGVyO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiL2Rpc3QvXCI7XG4vKioqKioqL1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vKioqKioqLyBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDYyKTtcbi8qKioqKiovIH0pXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gKHtcblxuLyoqKi8gMDpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiYVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIG5vcm1hbGl6ZUNvbXBvbmVudDsgfSk7XG4vKiBnbG9iYWxzIF9fVlVFX1NTUl9DT05URVhUX18gKi9cblxuLy8gSU1QT1JUQU5UOiBEbyBOT1QgdXNlIEVTMjAxNSBmZWF0dXJlcyBpbiB0aGlzIGZpbGUgKGV4Y2VwdCBmb3IgbW9kdWxlcykuXG4vLyBUaGlzIG1vZHVsZSBpcyBhIHJ1bnRpbWUgdXRpbGl0eSBmb3IgY2xlYW5lciBjb21wb25lbnQgbW9kdWxlIG91dHB1dCBhbmQgd2lsbFxuLy8gYmUgaW5jbHVkZWQgaW4gdGhlIGZpbmFsIHdlYnBhY2sgdXNlciBidW5kbGUuXG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUNvbXBvbmVudCAoXG4gIHNjcmlwdEV4cG9ydHMsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmdW5jdGlvbmFsVGVtcGxhdGUsXG4gIGluamVjdFN0eWxlcyxcbiAgc2NvcGVJZCxcbiAgbW9kdWxlSWRlbnRpZmllciwgLyogc2VydmVyIG9ubHkgKi9cbiAgc2hhZG93TW9kZSAvKiB2dWUtY2xpIG9ubHkgKi9cbikge1xuICAvLyBWdWUuZXh0ZW5kIGNvbnN0cnVjdG9yIGV4cG9ydCBpbnRlcm9wXG4gIHZhciBvcHRpb25zID0gdHlwZW9mIHNjcmlwdEV4cG9ydHMgPT09ICdmdW5jdGlvbidcbiAgICA/IHNjcmlwdEV4cG9ydHMub3B0aW9uc1xuICAgIDogc2NyaXB0RXhwb3J0c1xuXG4gIC8vIHJlbmRlciBmdW5jdGlvbnNcbiAgaWYgKHJlbmRlcikge1xuICAgIG9wdGlvbnMucmVuZGVyID0gcmVuZGVyXG4gICAgb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnMgPSBzdGF0aWNSZW5kZXJGbnNcbiAgICBvcHRpb25zLl9jb21waWxlZCA9IHRydWVcbiAgfVxuXG4gIC8vIGZ1bmN0aW9uYWwgdGVtcGxhdGVcbiAgaWYgKGZ1bmN0aW9uYWxUZW1wbGF0ZSkge1xuICAgIG9wdGlvbnMuZnVuY3Rpb25hbCA9IHRydWVcbiAgfVxuXG4gIC8vIHNjb3BlZElkXG4gIGlmIChzY29wZUlkKSB7XG4gICAgb3B0aW9ucy5fc2NvcGVJZCA9ICdkYXRhLXYtJyArIHNjb3BlSWRcbiAgfVxuXG4gIHZhciBob29rXG4gIGlmIChtb2R1bGVJZGVudGlmaWVyKSB7IC8vIHNlcnZlciBidWlsZFxuICAgIGhvb2sgPSBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgLy8gMi4zIGluamVjdGlvblxuICAgICAgY29udGV4dCA9XG4gICAgICAgIGNvbnRleHQgfHwgLy8gY2FjaGVkIGNhbGxcbiAgICAgICAgKHRoaXMuJHZub2RlICYmIHRoaXMuJHZub2RlLnNzckNvbnRleHQpIHx8IC8vIHN0YXRlZnVsXG4gICAgICAgICh0aGlzLnBhcmVudCAmJiB0aGlzLnBhcmVudC4kdm5vZGUgJiYgdGhpcy5wYXJlbnQuJHZub2RlLnNzckNvbnRleHQpIC8vIGZ1bmN0aW9uYWxcbiAgICAgIC8vIDIuMiB3aXRoIHJ1bkluTmV3Q29udGV4dDogdHJ1ZVxuICAgICAgaWYgKCFjb250ZXh0ICYmIHR5cGVvZiBfX1ZVRV9TU1JfQ09OVEVYVF9fICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBjb250ZXh0ID0gX19WVUVfU1NSX0NPTlRFWFRfX1xuICAgICAgfVxuICAgICAgLy8gaW5qZWN0IGNvbXBvbmVudCBzdHlsZXNcbiAgICAgIGlmIChpbmplY3RTdHlsZXMpIHtcbiAgICAgICAgaW5qZWN0U3R5bGVzLmNhbGwodGhpcywgY29udGV4dClcbiAgICAgIH1cbiAgICAgIC8vIHJlZ2lzdGVyIGNvbXBvbmVudCBtb2R1bGUgaWRlbnRpZmllciBmb3IgYXN5bmMgY2h1bmsgaW5mZXJyZW5jZVxuICAgICAgaWYgKGNvbnRleHQgJiYgY29udGV4dC5fcmVnaXN0ZXJlZENvbXBvbmVudHMpIHtcbiAgICAgICAgY29udGV4dC5fcmVnaXN0ZXJlZENvbXBvbmVudHMuYWRkKG1vZHVsZUlkZW50aWZpZXIpXG4gICAgICB9XG4gICAgfVxuICAgIC8vIHVzZWQgYnkgc3NyIGluIGNhc2UgY29tcG9uZW50IGlzIGNhY2hlZCBhbmQgYmVmb3JlQ3JlYXRlXG4gICAgLy8gbmV2ZXIgZ2V0cyBjYWxsZWRcbiAgICBvcHRpb25zLl9zc3JSZWdpc3RlciA9IGhvb2tcbiAgfSBlbHNlIGlmIChpbmplY3RTdHlsZXMpIHtcbiAgICBob29rID0gc2hhZG93TW9kZVxuICAgICAgPyBmdW5jdGlvbiAoKSB7IGluamVjdFN0eWxlcy5jYWxsKHRoaXMsIHRoaXMuJHJvb3QuJG9wdGlvbnMuc2hhZG93Um9vdCkgfVxuICAgICAgOiBpbmplY3RTdHlsZXNcbiAgfVxuXG4gIGlmIChob29rKSB7XG4gICAgaWYgKG9wdGlvbnMuZnVuY3Rpb25hbCkge1xuICAgICAgLy8gZm9yIHRlbXBsYXRlLW9ubHkgaG90LXJlbG9hZCBiZWNhdXNlIGluIHRoYXQgY2FzZSB0aGUgcmVuZGVyIGZuIGRvZXNuJ3RcbiAgICAgIC8vIGdvIHRocm91Z2ggdGhlIG5vcm1hbGl6ZXJcbiAgICAgIG9wdGlvbnMuX2luamVjdFN0eWxlcyA9IGhvb2tcbiAgICAgIC8vIHJlZ2lzdGVyIGZvciBmdW5jdGlvYWwgY29tcG9uZW50IGluIHZ1ZSBmaWxlXG4gICAgICB2YXIgb3JpZ2luYWxSZW5kZXIgPSBvcHRpb25zLnJlbmRlclxuICAgICAgb3B0aW9ucy5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXJXaXRoU3R5bGVJbmplY3Rpb24gKGgsIGNvbnRleHQpIHtcbiAgICAgICAgaG9vay5jYWxsKGNvbnRleHQpXG4gICAgICAgIHJldHVybiBvcmlnaW5hbFJlbmRlcihoLCBjb250ZXh0KVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpbmplY3QgY29tcG9uZW50IHJlZ2lzdHJhdGlvbiBhcyBiZWZvcmVDcmVhdGUgaG9va1xuICAgICAgdmFyIGV4aXN0aW5nID0gb3B0aW9ucy5iZWZvcmVDcmVhdGVcbiAgICAgIG9wdGlvbnMuYmVmb3JlQ3JlYXRlID0gZXhpc3RpbmdcbiAgICAgICAgPyBbXS5jb25jYXQoZXhpc3RpbmcsIGhvb2spXG4gICAgICAgIDogW2hvb2tdXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBleHBvcnRzOiBzY3JpcHRFeHBvcnRzLFxuICAgIG9wdGlvbnM6IG9wdGlvbnNcbiAgfVxufVxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyAxMDpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlbWVudC11aS9saWIvaW5wdXRcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAxMjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlbWVudC11aS9saWIvdXRpbHMvY2xpY2tvdXRzaWRlXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMTU6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImVsZW1lbnQtdWkvbGliL3Njcm9sbGJhclwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDE2OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi91dGlscy9yZXNpemUtZXZlbnRcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAxOTpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwidGhyb3R0bGUtZGVib3VuY2UvZGVib3VuY2VcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAyMTpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlbWVudC11aS9saWIvdXRpbHMvc2hhcmVkXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMjI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImVsZW1lbnQtdWkvbGliL21peGlucy9mb2N1c1wiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDM6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImVsZW1lbnQtdWkvbGliL3V0aWxzL3V0aWxcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAzMTpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlbWVudC11aS9saWIvdXRpbHMvc2Nyb2xsLWludG8tdmlld1wiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDMzOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9zZWxlY3Qvc3JjL29wdGlvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9N2E0NGM2NDImXG52YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwibGlcIixcbiAgICB7XG4gICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgIHZhbHVlOiBfdm0udmlzaWJsZSxcbiAgICAgICAgICBleHByZXNzaW9uOiBcInZpc2libGVcIlxuICAgICAgICB9XG4gICAgICBdLFxuICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtc2VsZWN0LWRyb3Bkb3duX19pdGVtXCIsXG4gICAgICBjbGFzczoge1xuICAgICAgICBzZWxlY3RlZDogX3ZtLml0ZW1TZWxlY3RlZCxcbiAgICAgICAgXCJpcy1kaXNhYmxlZFwiOiBfdm0uZGlzYWJsZWQgfHwgX3ZtLmdyb3VwRGlzYWJsZWQgfHwgX3ZtLmxpbWl0UmVhY2hlZCxcbiAgICAgICAgaG92ZXI6IF92bS5ob3ZlclxuICAgICAgfSxcbiAgICAgIG9uOiB7XG4gICAgICAgIG1vdXNlZW50ZXI6IF92bS5ob3Zlckl0ZW0sXG4gICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICByZXR1cm4gX3ZtLnNlbGVjdE9wdGlvbkNsaWNrKCRldmVudClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgW192bS5fdChcImRlZmF1bHRcIiwgW19jKFwic3BhblwiLCBbX3ZtLl92KF92bS5fcyhfdm0uY3VycmVudExhYmVsKSldKV0pXSxcbiAgICAyXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9zZWxlY3Qvc3JjL29wdGlvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9N2E0NGM2NDImXG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJlbGVtZW50LXVpL2xpYi9taXhpbnMvZW1pdHRlclwiXG52YXIgZW1pdHRlcl8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xudmFyIGVtaXR0ZXJfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oZW1pdHRlcl8pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiZWxlbWVudC11aS9saWIvdXRpbHMvdXRpbFwiXG52YXIgdXRpbF8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9zZWxlY3Qvc3JjL29wdGlvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG52YXIgX3R5cGVvZiA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiID8gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfSA6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07XG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5cblxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBvcHRpb252dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBtaXhpbnM6IFtlbWl0dGVyX2RlZmF1bHQuYV0sXG5cbiAgbmFtZTogJ0VsT3B0aW9uJyxcblxuICBjb21wb25lbnROYW1lOiAnRWxPcHRpb24nLFxuXG4gIGluamVjdDogWydzZWxlY3QnXSxcblxuICBwcm9wczoge1xuICAgIHZhbHVlOiB7XG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAgbGFiZWw6IFtTdHJpbmcsIE51bWJlcl0sXG4gICAgY3JlYXRlZDogQm9vbGVhbixcbiAgICBkaXNhYmxlZDoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGluZGV4OiAtMSxcbiAgICAgIGdyb3VwRGlzYWJsZWQ6IGZhbHNlLFxuICAgICAgdmlzaWJsZTogdHJ1ZSxcbiAgICAgIGhpdFN0YXRlOiBmYWxzZSxcbiAgICAgIGhvdmVyOiBmYWxzZVxuICAgIH07XG4gIH0sXG5cblxuICBjb21wdXRlZDoge1xuICAgIGlzT2JqZWN0OiBmdW5jdGlvbiBpc09iamVjdCgpIHtcbiAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodGhpcy52YWx1ZSkudG9Mb3dlckNhc2UoKSA9PT0gJ1tvYmplY3Qgb2JqZWN0XSc7XG4gICAgfSxcbiAgICBjdXJyZW50TGFiZWw6IGZ1bmN0aW9uIGN1cnJlbnRMYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmxhYmVsIHx8ICh0aGlzLmlzT2JqZWN0ID8gJycgOiB0aGlzLnZhbHVlKTtcbiAgICB9LFxuICAgIGN1cnJlbnRWYWx1ZTogZnVuY3Rpb24gY3VycmVudFZhbHVlKCkge1xuICAgICAgcmV0dXJuIHRoaXMudmFsdWUgfHwgdGhpcy5sYWJlbCB8fCAnJztcbiAgICB9LFxuICAgIGl0ZW1TZWxlY3RlZDogZnVuY3Rpb24gaXRlbVNlbGVjdGVkKCkge1xuICAgICAgaWYgKCF0aGlzLnNlbGVjdC5tdWx0aXBsZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0VxdWFsKHRoaXMudmFsdWUsIHRoaXMuc2VsZWN0LnZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5zKHRoaXMuc2VsZWN0LnZhbHVlLCB0aGlzLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGxpbWl0UmVhY2hlZDogZnVuY3Rpb24gbGltaXRSZWFjaGVkKCkge1xuICAgICAgaWYgKHRoaXMuc2VsZWN0Lm11bHRpcGxlKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5pdGVtU2VsZWN0ZWQgJiYgKHRoaXMuc2VsZWN0LnZhbHVlIHx8IFtdKS5sZW5ndGggPj0gdGhpcy5zZWxlY3QubXVsdGlwbGVMaW1pdCAmJiB0aGlzLnNlbGVjdC5tdWx0aXBsZUxpbWl0ID4gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBjdXJyZW50TGFiZWw6IGZ1bmN0aW9uIGN1cnJlbnRMYWJlbCgpIHtcbiAgICAgIGlmICghdGhpcy5jcmVhdGVkICYmICF0aGlzLnNlbGVjdC5yZW1vdGUpIHRoaXMuZGlzcGF0Y2goJ0VsU2VsZWN0JywgJ3NldFNlbGVjdGVkJyk7XG4gICAgfSxcbiAgICB2YWx1ZTogZnVuY3Rpb24gdmFsdWUodmFsLCBvbGRWYWwpIHtcbiAgICAgIHZhciBfc2VsZWN0ID0gdGhpcy5zZWxlY3QsXG4gICAgICAgICAgcmVtb3RlID0gX3NlbGVjdC5yZW1vdGUsXG4gICAgICAgICAgdmFsdWVLZXkgPSBfc2VsZWN0LnZhbHVlS2V5O1xuXG4gICAgICBpZiAoIXRoaXMuY3JlYXRlZCAmJiAhcmVtb3RlKSB7XG4gICAgICAgIGlmICh2YWx1ZUtleSAmJiAodHlwZW9mIHZhbCA9PT0gJ3VuZGVmaW5lZCcgPyAndW5kZWZpbmVkJyA6IF90eXBlb2YodmFsKSkgPT09ICdvYmplY3QnICYmICh0eXBlb2Ygb2xkVmFsID09PSAndW5kZWZpbmVkJyA/ICd1bmRlZmluZWQnIDogX3R5cGVvZihvbGRWYWwpKSA9PT0gJ29iamVjdCcgJiYgdmFsW3ZhbHVlS2V5XSA9PT0gb2xkVmFsW3ZhbHVlS2V5XSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRpc3BhdGNoKCdFbFNlbGVjdCcsICdzZXRTZWxlY3RlZCcpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgaXNFcXVhbDogZnVuY3Rpb24gaXNFcXVhbChhLCBiKSB7XG4gICAgICBpZiAoIXRoaXMuaXNPYmplY3QpIHtcbiAgICAgICAgcmV0dXJuIGEgPT09IGI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgdmFsdWVLZXkgPSB0aGlzLnNlbGVjdC52YWx1ZUtleTtcbiAgICAgICAgcmV0dXJuIE9iamVjdCh1dGlsX1tcImdldFZhbHVlQnlQYXRoXCJdKShhLCB2YWx1ZUtleSkgPT09IE9iamVjdCh1dGlsX1tcImdldFZhbHVlQnlQYXRoXCJdKShiLCB2YWx1ZUtleSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBjb250YWluczogZnVuY3Rpb24gY29udGFpbnMoKSB7XG4gICAgICB2YXIgYXJyID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBbXTtcbiAgICAgIHZhciB0YXJnZXQgPSBhcmd1bWVudHNbMV07XG5cbiAgICAgIGlmICghdGhpcy5pc09iamVjdCkge1xuICAgICAgICByZXR1cm4gYXJyICYmIGFyci5pbmRleE9mKHRhcmdldCkgPiAtMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciB2YWx1ZUtleSA9IHRoaXMuc2VsZWN0LnZhbHVlS2V5O1xuICAgICAgICByZXR1cm4gYXJyICYmIGFyci5zb21lKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgcmV0dXJuIE9iamVjdCh1dGlsX1tcImdldFZhbHVlQnlQYXRoXCJdKShpdGVtLCB2YWx1ZUtleSkgPT09IE9iamVjdCh1dGlsX1tcImdldFZhbHVlQnlQYXRoXCJdKSh0YXJnZXQsIHZhbHVlS2V5KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBoYW5kbGVHcm91cERpc2FibGVkOiBmdW5jdGlvbiBoYW5kbGVHcm91cERpc2FibGVkKHZhbCkge1xuICAgICAgdGhpcy5ncm91cERpc2FibGVkID0gdmFsO1xuICAgIH0sXG4gICAgaG92ZXJJdGVtOiBmdW5jdGlvbiBob3Zlckl0ZW0oKSB7XG4gICAgICBpZiAoIXRoaXMuZGlzYWJsZWQgJiYgIXRoaXMuZ3JvdXBEaXNhYmxlZCkge1xuICAgICAgICB0aGlzLnNlbGVjdC5ob3ZlckluZGV4ID0gdGhpcy5zZWxlY3Qub3B0aW9ucy5pbmRleE9mKHRoaXMpO1xuICAgICAgfVxuICAgIH0sXG4gICAgc2VsZWN0T3B0aW9uQ2xpY2s6IGZ1bmN0aW9uIHNlbGVjdE9wdGlvbkNsaWNrKCkge1xuICAgICAgaWYgKHRoaXMuZGlzYWJsZWQgIT09IHRydWUgJiYgdGhpcy5ncm91cERpc2FibGVkICE9PSB0cnVlKSB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2goJ0VsU2VsZWN0JywgJ2hhbmRsZU9wdGlvbkNsaWNrJywgW3RoaXMsIHRydWVdKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHF1ZXJ5Q2hhbmdlOiBmdW5jdGlvbiBxdWVyeUNoYW5nZShxdWVyeSkge1xuICAgICAgdGhpcy52aXNpYmxlID0gbmV3IFJlZ0V4cChPYmplY3QodXRpbF9bXCJlc2NhcGVSZWdleHBTdHJpbmdcIl0pKHF1ZXJ5KSwgJ2knKS50ZXN0KHRoaXMuY3VycmVudExhYmVsKSB8fCB0aGlzLmNyZWF0ZWQ7XG4gICAgICBpZiAoIXRoaXMudmlzaWJsZSkge1xuICAgICAgICB0aGlzLnNlbGVjdC5maWx0ZXJlZE9wdGlvbnNDb3VudC0tO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkOiBmdW5jdGlvbiBjcmVhdGVkKCkge1xuICAgIHRoaXMuc2VsZWN0Lm9wdGlvbnMucHVzaCh0aGlzKTtcbiAgICB0aGlzLnNlbGVjdC5jYWNoZWRPcHRpb25zLnB1c2godGhpcyk7XG4gICAgdGhpcy5zZWxlY3Qub3B0aW9uc0NvdW50Kys7XG4gICAgdGhpcy5zZWxlY3QuZmlsdGVyZWRPcHRpb25zQ291bnQrKztcblxuICAgIHRoaXMuJG9uKCdxdWVyeUNoYW5nZScsIHRoaXMucXVlcnlDaGFuZ2UpO1xuICAgIHRoaXMuJG9uKCdoYW5kbGVHcm91cERpc2FibGVkJywgdGhpcy5oYW5kbGVHcm91cERpc2FibGVkKTtcbiAgfSxcbiAgYmVmb3JlRGVzdHJveTogZnVuY3Rpb24gYmVmb3JlRGVzdHJveSgpIHtcbiAgICB2YXIgX3NlbGVjdDIgPSB0aGlzLnNlbGVjdCxcbiAgICAgICAgc2VsZWN0ZWQgPSBfc2VsZWN0Mi5zZWxlY3RlZCxcbiAgICAgICAgbXVsdGlwbGUgPSBfc2VsZWN0Mi5tdWx0aXBsZTtcblxuICAgIHZhciBzZWxlY3RlZE9wdGlvbnMgPSBtdWx0aXBsZSA/IHNlbGVjdGVkIDogW3NlbGVjdGVkXTtcbiAgICB2YXIgaW5kZXggPSB0aGlzLnNlbGVjdC5jYWNoZWRPcHRpb25zLmluZGV4T2YodGhpcyk7XG4gICAgdmFyIHNlbGVjdGVkSW5kZXggPSBzZWxlY3RlZE9wdGlvbnMuaW5kZXhPZih0aGlzKTtcblxuICAgIC8vIGlmIG9wdGlvbiBpcyBub3Qgc2VsZWN0ZWQsIHJlbW92ZSBpdCBmcm9tIGNhY2hlXG4gICAgaWYgKGluZGV4ID4gLTEgJiYgc2VsZWN0ZWRJbmRleCA8IDApIHtcbiAgICAgIHRoaXMuc2VsZWN0LmNhY2hlZE9wdGlvbnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gICAgdGhpcy5zZWxlY3Qub25PcHRpb25EZXN0cm95KHRoaXMuc2VsZWN0Lm9wdGlvbnMuaW5kZXhPZih0aGlzKSk7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9zZWxlY3Qvc3JjL29wdGlvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX29wdGlvbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChvcHRpb252dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIEVYVEVSTkFMIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXG52YXIgY29tcG9uZW50Tm9ybWFsaXplciA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvc2VsZWN0L3NyYy9vcHRpb24udnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgY29tcG9uZW50ID0gT2JqZWN0KGNvbXBvbmVudE5vcm1hbGl6ZXJbXCJhXCIgLyogZGVmYXVsdCAqL10pKFxuICBzcmNfb3B0aW9udnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgYXBpOyB9XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL3NlbGVjdC9zcmMvb3B0aW9uLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfb3B0aW9uID0gX193ZWJwYWNrX2V4cG9ydHNfX1tcImFcIl0gPSAoY29tcG9uZW50LmV4cG9ydHMpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMzg6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImVsZW1lbnQtdWkvbGliL3RhZ1wiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDQ6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImVsZW1lbnQtdWkvbGliL21peGlucy9lbWl0dGVyXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gNTpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlbWVudC11aS9saWIvdXRpbHMvdnVlLXBvcHBlclwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDY6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImVsZW1lbnQtdWkvbGliL21peGlucy9sb2NhbGVcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyA2Mjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvc2VsZWN0L3NyYy9zZWxlY3QudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTBlNGFhZGU2JlxudmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHtcbiAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiY2xpY2tvdXRzaWRlXCIsXG4gICAgICAgICAgcmF3TmFtZTogXCJ2LWNsaWNrb3V0c2lkZVwiLFxuICAgICAgICAgIHZhbHVlOiBfdm0uaGFuZGxlQ2xvc2UsXG4gICAgICAgICAgZXhwcmVzc2lvbjogXCJoYW5kbGVDbG9zZVwiXG4gICAgICAgIH1cbiAgICAgIF0sXG4gICAgICBzdGF0aWNDbGFzczogXCJlbC1zZWxlY3RcIixcbiAgICAgIGNsYXNzOiBbX3ZtLnNlbGVjdFNpemUgPyBcImVsLXNlbGVjdC0tXCIgKyBfdm0uc2VsZWN0U2l6ZSA6IFwiXCJdLFxuICAgICAgb246IHtcbiAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgIHJldHVybiBfdm0udG9nZ2xlTWVudSgkZXZlbnQpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIF92bS5tdWx0aXBsZVxuICAgICAgICA/IF9jKFxuICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgcmVmOiBcInRhZ3NcIixcbiAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtc2VsZWN0X190YWdzXCIsXG4gICAgICAgICAgICAgIHN0eWxlOiB7IFwibWF4LXdpZHRoXCI6IF92bS5pbnB1dFdpZHRoIC0gMzIgKyBcInB4XCIsIHdpZHRoOiBcIjEwMCVcIiB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfdm0uY29sbGFwc2VUYWdzICYmIF92bS5zZWxlY3RlZC5sZW5ndGhcbiAgICAgICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJlbC10YWdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zYWJsZTogIV92bS5zZWxlY3REaXNhYmxlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplOiBfdm0uY29sbGFwc2VUYWdTaXplLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpdDogX3ZtLnNlbGVjdGVkWzBdLmhpdFN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiaW5mb1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGlzYWJsZS10cmFuc2l0aW9uc1wiOiBcIlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2U6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLmRlbGV0ZVRhZygkZXZlbnQsIF92bS5zZWxlY3RlZFswXSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFwic3BhblwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLXNlbGVjdF9fdGFncy10ZXh0XCIgfSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihfdm0uX3MoX3ZtLnNlbGVjdGVkWzBdLmN1cnJlbnRMYWJlbCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICBfdm0uc2VsZWN0ZWQubGVuZ3RoID4gMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImVsLXRhZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZTogX3ZtLmNvbGxhcHNlVGFnU2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJpbmZvXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGlzYWJsZS10cmFuc2l0aW9uc1wiOiBcIlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwiZWwtc2VsZWN0X190YWdzLXRleHRcIiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbX3ZtLl92KFwiKyBcIiArIF92bS5fcyhfdm0uc2VsZWN0ZWQubGVuZ3RoIC0gMSkpXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgIV92bS5jb2xsYXBzZVRhZ3NcbiAgICAgICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgICAgICBcInRyYW5zaXRpb24tZ3JvdXBcIixcbiAgICAgICAgICAgICAgICAgICAgeyBvbjogeyBcImFmdGVyLWxlYXZlXCI6IF92bS5yZXNldElucHV0SGVpZ2h0IH0gfSxcbiAgICAgICAgICAgICAgICAgICAgX3ZtLl9sKF92bS5zZWxlY3RlZCwgZnVuY3Rpb24oaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZWwtdGFnXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogX3ZtLmdldFZhbHVlS2V5KGl0ZW0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NhYmxlOiAhX3ZtLnNlbGVjdERpc2FibGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU6IF92bS5jb2xsYXBzZVRhZ1NpemUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGl0OiBpdGVtLmhpdFN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiaW5mb1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGlzYWJsZS10cmFuc2l0aW9uc1wiOiBcIlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2U6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLmRlbGV0ZVRhZygkZXZlbnQsIGl0ZW0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcInNwYW5cIiwgeyBzdGF0aWNDbGFzczogXCJlbC1zZWxlY3RfX3RhZ3MtdGV4dFwiIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoX3ZtLl9zKGl0ZW0uY3VycmVudExhYmVsKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgX3ZtLmZpbHRlcmFibGVcbiAgICAgICAgICAgICAgICA/IF9jKFwiaW5wdXRcIiwge1xuICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJtb2RlbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LW1vZGVsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLnF1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJxdWVyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICByZWY6IFwiaW5wdXRcIixcbiAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtc2VsZWN0X19pbnB1dFwiLFxuICAgICAgICAgICAgICAgICAgICBjbGFzczogW192bS5zZWxlY3RTaXplID8gXCJpcy1cIiArIF92bS5zZWxlY3RTaXplIDogXCJcIl0sXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgXCJmbGV4LWdyb3dcIjogXCIxXCIsXG4gICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IF92bS5pbnB1dExlbmd0aCAvIChfdm0uaW5wdXRXaWR0aCAtIDMyKSArIFwiJVwiLFxuICAgICAgICAgICAgICAgICAgICAgIFwibWF4LXdpZHRoXCI6IF92bS5pbnB1dFdpZHRoIC0gNDIgKyBcInB4XCJcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogX3ZtLnNlbGVjdERpc2FibGVkLFxuICAgICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZTogX3ZtLmF1dG9Db21wbGV0ZSB8fCBfdm0uYXV0b2NvbXBsZXRlXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGRvbVByb3BzOiB7IHZhbHVlOiBfdm0ucXVlcnkgfSxcbiAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICBmb2N1czogX3ZtLmhhbmRsZUZvY3VzLFxuICAgICAgICAgICAgICAgICAgICAgIGJsdXI6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLnNvZnRGb2N1cyA9IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICBrZXl1cDogX3ZtLm1hbmFnZVBsYWNlaG9sZGVyLFxuICAgICAgICAgICAgICAgICAgICAgIGtleWRvd246IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS5yZXNldElucHV0U3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICEoXCJidXR0b25cIiBpbiAkZXZlbnQpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl9rKCRldmVudC5rZXlDb2RlLCBcImRvd25cIiwgNDAsICRldmVudC5rZXksIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiRG93blwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJBcnJvd0Rvd25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLmhhbmRsZU5hdmlnYXRlKFwibmV4dFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIShcImJ1dHRvblwiIGluICRldmVudCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX2soJGV2ZW50LmtleUNvZGUsIFwidXBcIiwgMzgsICRldmVudC5rZXksIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiVXBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiQXJyb3dVcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uaGFuZGxlTmF2aWdhdGUoXCJwcmV2XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhKFwiYnV0dG9uXCIgaW4gJGV2ZW50KSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fayhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudC5rZXlDb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlbnRlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnQua2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJFbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0uc2VsZWN0T3B0aW9uKCRldmVudClcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICEoXCJidXR0b25cIiBpbiAkZXZlbnQpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl9rKCRldmVudC5rZXlDb2RlLCBcImVzY1wiLCAyNywgJGV2ZW50LmtleSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJFc2NcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiRXNjYXBlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0udmlzaWJsZSA9IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhKFwiYnV0dG9uXCIgaW4gJGV2ZW50KSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fayhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudC5rZXlDb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkZWxldGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFs4LCA0Nl0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnQua2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1wiQmFja3NwYWNlXCIsIFwiRGVsZXRlXCIsIFwiRGVsXCJdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0uZGVsZXRlUHJldlRhZygkZXZlbnQpXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhKFwiYnV0dG9uXCIgaW4gJGV2ZW50KSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5faygkZXZlbnQua2V5Q29kZSwgXCJ0YWJcIiwgOSwgJGV2ZW50LmtleSwgXCJUYWJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0udmlzaWJsZSA9IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGlvbnN0YXJ0OiBfdm0uaGFuZGxlQ29tcG9zaXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgY29tcG9zaXRpb251cGRhdGU6IF92bS5oYW5kbGVDb21wb3NpdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGlvbmVuZDogX3ZtLmhhbmRsZUNvbXBvc2l0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgIGlucHV0OiBbXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRldmVudC50YXJnZXQuY29tcG9zaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLnF1ZXJ5ID0gJGV2ZW50LnRhcmdldC52YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS5kZWJvdW5jZWRRdWVyeUNoYW5nZVxuICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgMVxuICAgICAgICAgIClcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgIF9jKFxuICAgICAgICBcImVsLWlucHV0XCIsXG4gICAgICAgIHtcbiAgICAgICAgICByZWY6IFwicmVmZXJlbmNlXCIsXG4gICAgICAgICAgY2xhc3M6IHsgXCJpcy1mb2N1c1wiOiBfdm0udmlzaWJsZSB9LFxuICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBfdm0uY3VycmVudFBsYWNlaG9sZGVyLFxuICAgICAgICAgICAgbmFtZTogX3ZtLm5hbWUsXG4gICAgICAgICAgICBpZDogX3ZtLmlkLFxuICAgICAgICAgICAgYXV0b2NvbXBsZXRlOiBfdm0uYXV0b0NvbXBsZXRlIHx8IF92bS5hdXRvY29tcGxldGUsXG4gICAgICAgICAgICBzaXplOiBfdm0uc2VsZWN0U2l6ZSxcbiAgICAgICAgICAgIGRpc2FibGVkOiBfdm0uc2VsZWN0RGlzYWJsZWQsXG4gICAgICAgICAgICByZWFkb25seTogX3ZtLnJlYWRvbmx5LFxuICAgICAgICAgICAgXCJ2YWxpZGF0ZS1ldmVudFwiOiBmYWxzZSxcbiAgICAgICAgICAgIHRhYmluZGV4OiBfdm0ubXVsdGlwbGUgJiYgX3ZtLmZpbHRlcmFibGUgPyBcIi0xXCIgOiBudWxsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgZm9jdXM6IF92bS5oYW5kbGVGb2N1cyxcbiAgICAgICAgICAgIGJsdXI6IF92bS5oYW5kbGVCbHVyLFxuICAgICAgICAgICAgaW5wdXQ6IF92bS5kZWJvdW5jZWRPbklucHV0Q2hhbmdlLFxuICAgICAgICAgICAgY29tcG9zaXRpb25zdGFydDogX3ZtLmhhbmRsZUNvbXBvc2l0aW9uLFxuICAgICAgICAgICAgY29tcG9zaXRpb251cGRhdGU6IF92bS5oYW5kbGVDb21wb3NpdGlvbixcbiAgICAgICAgICAgIGNvbXBvc2l0aW9uZW5kOiBfdm0uaGFuZGxlQ29tcG9zaXRpb25cbiAgICAgICAgICB9LFxuICAgICAgICAgIG5hdGl2ZU9uOiB7XG4gICAgICAgICAgICBrZXlkb3duOiBbXG4gICAgICAgICAgICAgIGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICEoXCJidXR0b25cIiBpbiAkZXZlbnQpICYmXG4gICAgICAgICAgICAgICAgICBfdm0uX2soJGV2ZW50LmtleUNvZGUsIFwiZG93blwiLCA0MCwgJGV2ZW50LmtleSwgW1xuICAgICAgICAgICAgICAgICAgICBcIkRvd25cIixcbiAgICAgICAgICAgICAgICAgICAgXCJBcnJvd0Rvd25cIlxuICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICAgICAgX3ZtLmhhbmRsZU5hdmlnYXRlKFwibmV4dFwiKVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAhKFwiYnV0dG9uXCIgaW4gJGV2ZW50KSAmJlxuICAgICAgICAgICAgICAgICAgX3ZtLl9rKCRldmVudC5rZXlDb2RlLCBcInVwXCIsIDM4LCAkZXZlbnQua2V5LCBbXG4gICAgICAgICAgICAgICAgICAgIFwiVXBcIixcbiAgICAgICAgICAgICAgICAgICAgXCJBcnJvd1VwXCJcbiAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgICAgIF92bS5oYW5kbGVOYXZpZ2F0ZShcInByZXZcIilcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgIShcImJ1dHRvblwiIGluICRldmVudCkgJiZcbiAgICAgICAgICAgICAgICAgIF92bS5faygkZXZlbnQua2V5Q29kZSwgXCJlbnRlclwiLCAxMywgJGV2ZW50LmtleSwgXCJFbnRlclwiKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLnNlbGVjdE9wdGlvbigkZXZlbnQpXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICEoXCJidXR0b25cIiBpbiAkZXZlbnQpICYmXG4gICAgICAgICAgICAgICAgICBfdm0uX2soJGV2ZW50LmtleUNvZGUsIFwiZXNjXCIsIDI3LCAkZXZlbnQua2V5LCBbXG4gICAgICAgICAgICAgICAgICAgIFwiRXNjXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiRXNjYXBlXCJcbiAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgICAgIF92bS52aXNpYmxlID0gZmFsc2VcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgIShcImJ1dHRvblwiIGluICRldmVudCkgJiZcbiAgICAgICAgICAgICAgICAgIF92bS5faygkZXZlbnQua2V5Q29kZSwgXCJ0YWJcIiwgOSwgJGV2ZW50LmtleSwgXCJUYWJcIilcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF92bS52aXNpYmxlID0gZmFsc2VcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIG1vdXNlZW50ZXI6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICBfdm0uaW5wdXRIb3ZlcmluZyA9IHRydWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtb3VzZWxlYXZlOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgX3ZtLmlucHV0SG92ZXJpbmcgPSBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgbW9kZWw6IHtcbiAgICAgICAgICAgIHZhbHVlOiBfdm0uc2VsZWN0ZWRMYWJlbCxcbiAgICAgICAgICAgIGNhbGxiYWNrOiBmdW5jdGlvbigkJHYpIHtcbiAgICAgICAgICAgICAgX3ZtLnNlbGVjdGVkTGFiZWwgPSAkJHZcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBleHByZXNzaW9uOiBcInNlbGVjdGVkTGFiZWxcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF92bS4kc2xvdHMucHJlZml4XG4gICAgICAgICAgICA/IF9jKFwidGVtcGxhdGVcIiwgeyBzbG90OiBcInByZWZpeFwiIH0sIFtfdm0uX3QoXCJwcmVmaXhcIildLCAyKVxuICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICBfYyhcInRlbXBsYXRlXCIsIHsgc2xvdDogXCJzdWZmaXhcIiB9LCBbXG4gICAgICAgICAgICBfYyhcImlcIiwge1xuICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgICAgICAgdmFsdWU6ICFfdm0uc2hvd0Nsb3NlLFxuICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCIhc2hvd0Nsb3NlXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIGNsYXNzOiBbXG4gICAgICAgICAgICAgICAgXCJlbC1zZWxlY3RfX2NhcmV0XCIsXG4gICAgICAgICAgICAgICAgXCJlbC1pbnB1dF9faWNvblwiLFxuICAgICAgICAgICAgICAgIFwiZWwtaWNvbi1cIiArIF92bS5pY29uQ2xhc3NcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBfdm0uc2hvd0Nsb3NlXG4gICAgICAgICAgICAgID8gX2MoXCJpXCIsIHtcbiAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOlxuICAgICAgICAgICAgICAgICAgICBcImVsLXNlbGVjdF9fY2FyZXQgZWwtaW5wdXRfX2ljb24gZWwtaWNvbi1jaXJjbGUtY2xvc2VcIixcbiAgICAgICAgICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0uaGFuZGxlQ2xlYXJDbGljayB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICAgIF0pXG4gICAgICAgIF0sXG4gICAgICAgIDJcbiAgICAgICksXG4gICAgICBfYyhcbiAgICAgICAgXCJ0cmFuc2l0aW9uXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBhdHRyczogeyBuYW1lOiBcImVsLXpvb20taW4tdG9wXCIgfSxcbiAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgXCJiZWZvcmUtZW50ZXJcIjogX3ZtLmhhbmRsZU1lbnVFbnRlcixcbiAgICAgICAgICAgIFwiYWZ0ZXItbGVhdmVcIjogX3ZtLmRvRGVzdHJveVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJlbC1zZWxlY3QtbWVudVwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgICAgICAgdmFsdWU6IF92bS52aXNpYmxlICYmIF92bS5lbXB0eVRleHQgIT09IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJ2aXNpYmxlICYmIGVtcHR5VGV4dCAhPT0gZmFsc2VcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgcmVmOiBcInBvcHBlclwiLFxuICAgICAgICAgICAgICBhdHRyczogeyBcImFwcGVuZC10by1ib2R5XCI6IF92bS5wb3BwZXJBcHBlbmRUb0JvZHkgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgXCJlbC1zY3JvbGxiYXJcIixcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0ub3B0aW9ucy5sZW5ndGggPiAwICYmICFfdm0ubG9hZGluZyxcbiAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcIm9wdGlvbnMubGVuZ3RoID4gMCAmJiAhbG9hZGluZ1wiXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICByZWY6IFwic2Nyb2xsYmFyXCIsXG4gICAgICAgICAgICAgICAgICBjbGFzczoge1xuICAgICAgICAgICAgICAgICAgICBcImlzLWVtcHR5XCI6XG4gICAgICAgICAgICAgICAgICAgICAgIV92bS5hbGxvd0NyZWF0ZSAmJlxuICAgICAgICAgICAgICAgICAgICAgIF92bS5xdWVyeSAmJlxuICAgICAgICAgICAgICAgICAgICAgIF92bS5maWx0ZXJlZE9wdGlvbnNDb3VudCA9PT0gMFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgIHRhZzogXCJ1bFwiLFxuICAgICAgICAgICAgICAgICAgICBcIndyYXAtY2xhc3NcIjogXCJlbC1zZWxlY3QtZHJvcGRvd25fX3dyYXBcIixcbiAgICAgICAgICAgICAgICAgICAgXCJ2aWV3LWNsYXNzXCI6IFwiZWwtc2VsZWN0LWRyb3Bkb3duX19saXN0XCJcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgIF92bS5zaG93TmV3T3B0aW9uXG4gICAgICAgICAgICAgICAgICAgID8gX2MoXCJlbC1vcHRpb25cIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgdmFsdWU6IF92bS5xdWVyeSwgY3JlYXRlZDogXCJcIiB9XG4gICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgICAgIF92bS5fdChcImRlZmF1bHRcIilcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgX3ZtLmVtcHR5VGV4dCAmJlxuICAgICAgICAgICAgICAoIV92bS5hbGxvd0NyZWF0ZSB8fFxuICAgICAgICAgICAgICAgIF92bS5sb2FkaW5nIHx8XG4gICAgICAgICAgICAgICAgKF92bS5hbGxvd0NyZWF0ZSAmJiBfdm0ub3B0aW9ucy5sZW5ndGggPT09IDApKVxuICAgICAgICAgICAgICAgID8gW1xuICAgICAgICAgICAgICAgICAgICBfdm0uJHNsb3RzLmVtcHR5XG4gICAgICAgICAgICAgICAgICAgICAgPyBfdm0uX3QoXCJlbXB0eVwiKVxuICAgICAgICAgICAgICAgICAgICAgIDogX2MoXCJwXCIsIHsgc3RhdGljQ2xhc3M6IFwiZWwtc2VsZWN0LWRyb3Bkb3duX19lbXB0eVwiIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICAgIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fcyhfdm0uZW1wdHlUZXh0KSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgMlxuICAgICAgICAgIClcbiAgICAgICAgXSxcbiAgICAgICAgMVxuICAgICAgKVxuICAgIF0sXG4gICAgMVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvc2VsZWN0L3NyYy9zZWxlY3QudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTBlNGFhZGU2JlxuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiZWxlbWVudC11aS9saWIvbWl4aW5zL2VtaXR0ZXJcIlxudmFyIGVtaXR0ZXJfID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcbnZhciBlbWl0dGVyX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGVtaXR0ZXJfKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcImVsZW1lbnQtdWkvbGliL21peGlucy9mb2N1c1wiXG52YXIgZm9jdXNfID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMik7XG52YXIgZm9jdXNfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oZm9jdXNfKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcImVsZW1lbnQtdWkvbGliL21peGlucy9sb2NhbGVcIlxudmFyIGxvY2FsZV8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpO1xudmFyIGxvY2FsZV9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihsb2NhbGVfKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcImVsZW1lbnQtdWkvbGliL2lucHV0XCJcbnZhciBpbnB1dF8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTtcbnZhciBpbnB1dF9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihpbnB1dF8pO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3NlbGVjdC9zcmMvc2VsZWN0LWRyb3Bkb3duLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wNjgyODc0OCZcbnZhciBzZWxlY3RfZHJvcGRvd252dWVfdHlwZV90ZW1wbGF0ZV9pZF8wNjgyODc0OF9yZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICB7XG4gICAgICBzdGF0aWNDbGFzczogXCJlbC1zZWxlY3QtZHJvcGRvd24gZWwtcG9wcGVyXCIsXG4gICAgICBjbGFzczogW3sgXCJpcy1tdWx0aXBsZVwiOiBfdm0uJHBhcmVudC5tdWx0aXBsZSB9LCBfdm0ucG9wcGVyQ2xhc3NdLFxuICAgICAgc3R5bGU6IHsgbWluV2lkdGg6IF92bS5taW5XaWR0aCB9XG4gICAgfSxcbiAgICBbX3ZtLl90KFwiZGVmYXVsdFwiKV0sXG4gICAgMlxuICApXG59XG52YXIgc2VsZWN0X2Ryb3Bkb3dudnVlX3R5cGVfdGVtcGxhdGVfaWRfMDY4Mjg3NDhfc3RhdGljUmVuZGVyRm5zID0gW11cbnNlbGVjdF9kcm9wZG93bnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzA2ODI4NzQ4X3JlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvc2VsZWN0L3NyYy9zZWxlY3QtZHJvcGRvd24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTA2ODI4NzQ4JlxuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiZWxlbWVudC11aS9saWIvdXRpbHMvdnVlLXBvcHBlclwiXG52YXIgdnVlX3BvcHBlcl8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpO1xudmFyIHZ1ZV9wb3BwZXJfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4odnVlX3BvcHBlcl8pO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9zZWxlY3Qvc3JjL3NlbGVjdC1kcm9wZG93bi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cblxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzZWxlY3RfZHJvcGRvd252dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBuYW1lOiAnRWxTZWxlY3REcm9wZG93bicsXG5cbiAgY29tcG9uZW50TmFtZTogJ0VsU2VsZWN0RHJvcGRvd24nLFxuXG4gIG1peGluczogW3Z1ZV9wb3BwZXJfZGVmYXVsdC5hXSxcblxuICBwcm9wczoge1xuICAgIHBsYWNlbWVudDoge1xuICAgICAgZGVmYXVsdDogJ2JvdHRvbS1zdGFydCdcbiAgICB9LFxuXG4gICAgYm91bmRhcmllc1BhZGRpbmc6IHtcbiAgICAgIGRlZmF1bHQ6IDBcbiAgICB9LFxuXG4gICAgcG9wcGVyT3B0aW9uczoge1xuICAgICAgZGVmYXVsdDogZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZ3B1QWNjZWxlcmF0aW9uOiBmYWxzZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0sXG5cbiAgICB2aXNpYmxlQXJyb3c6IHtcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9LFxuXG4gICAgYXBwZW5kVG9Cb2R5OiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH1cbiAgfSxcblxuICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBtaW5XaWR0aDogJydcbiAgICB9O1xuICB9LFxuXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBwb3BwZXJDbGFzczogZnVuY3Rpb24gcG9wcGVyQ2xhc3MoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcGFyZW50LnBvcHBlckNsYXNzO1xuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgICckcGFyZW50LmlucHV0V2lkdGgnOiBmdW5jdGlvbiAkcGFyZW50SW5wdXRXaWR0aCgpIHtcbiAgICAgIHRoaXMubWluV2lkdGggPSB0aGlzLiRwYXJlbnQuJGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoICsgJ3B4JztcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdGhpcy5yZWZlcmVuY2VFbG0gPSB0aGlzLiRwYXJlbnQuJHJlZnMucmVmZXJlbmNlLiRlbDtcbiAgICB0aGlzLiRwYXJlbnQucG9wcGVyRWxtID0gdGhpcy5wb3BwZXJFbG0gPSB0aGlzLiRlbDtcbiAgICB0aGlzLiRvbigndXBkYXRlUG9wcGVyJywgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKF90aGlzLiRwYXJlbnQudmlzaWJsZSkgX3RoaXMudXBkYXRlUG9wcGVyKCk7XG4gICAgfSk7XG4gICAgdGhpcy4kb24oJ2Rlc3Ryb3lQb3BwZXInLCB0aGlzLmRlc3Ryb3lQb3BwZXIpO1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvc2VsZWN0L3NyYy9zZWxlY3QtZHJvcGRvd24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY19zZWxlY3RfZHJvcGRvd252dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoc2VsZWN0X2Ryb3Bkb3dudnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBFWFRFUk5BTCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1xudmFyIGNvbXBvbmVudE5vcm1hbGl6ZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3NlbGVjdC9zcmMvc2VsZWN0LWRyb3Bkb3duLnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGNvbXBvbmVudCA9IE9iamVjdChjb21wb25lbnROb3JtYWxpemVyW1wiYVwiIC8qIGRlZmF1bHQgKi9dKShcbiAgc3JjX3NlbGVjdF9kcm9wZG93bnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgc2VsZWN0X2Ryb3Bkb3dudnVlX3R5cGVfdGVtcGxhdGVfaWRfMDY4Mjg3NDhfcmVuZGVyLFxuICBzZWxlY3RfZHJvcGRvd252dWVfdHlwZV90ZW1wbGF0ZV9pZF8wNjgyODc0OF9zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGFwaTsgfVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy9zZWxlY3Qvc3JjL3NlbGVjdC1kcm9wZG93bi52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc2VsZWN0X2Ryb3Bkb3duID0gKGNvbXBvbmVudC5leHBvcnRzKTtcbi8vIEVYVEVSTkFMIE1PRFVMRTogLi9wYWNrYWdlcy9zZWxlY3Qvc3JjL29wdGlvbi52dWUgKyA0IG1vZHVsZXNcbnZhciBzcmNfb3B0aW9uID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJlbGVtZW50LXVpL2xpYi90YWdcIlxudmFyIHRhZ18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM4KTtcbnZhciB0YWdfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4odGFnXyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJlbGVtZW50LXVpL2xpYi9zY3JvbGxiYXJcIlxudmFyIHNjcm9sbGJhcl8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KTtcbnZhciBzY3JvbGxiYXJfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oc2Nyb2xsYmFyXyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJ0aHJvdHRsZS1kZWJvdW5jZS9kZWJvdW5jZVwiXG52YXIgZGVib3VuY2VfID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOSk7XG52YXIgZGVib3VuY2VfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oZGVib3VuY2VfKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcImVsZW1lbnQtdWkvbGliL3V0aWxzL2NsaWNrb3V0c2lkZVwiXG52YXIgY2xpY2tvdXRzaWRlXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTIpO1xudmFyIGNsaWNrb3V0c2lkZV9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihjbGlja291dHNpZGVfKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcImVsZW1lbnQtdWkvbGliL3V0aWxzL3Jlc2l6ZS1ldmVudFwiXG52YXIgcmVzaXplX2V2ZW50XyA9IF9fd2VicGFja19yZXF1aXJlX18oMTYpO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiZWxlbWVudC11aS9saWIvdXRpbHMvc2Nyb2xsLWludG8tdmlld1wiXG52YXIgc2Nyb2xsX2ludG9fdmlld18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMxKTtcbnZhciBzY3JvbGxfaW50b192aWV3X2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHNjcm9sbF9pbnRvX3ZpZXdfKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcImVsZW1lbnQtdWkvbGliL3V0aWxzL3V0aWxcIlxudmFyIHV0aWxfID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9zZWxlY3Qvc3JjL25hdmlnYXRpb24tbWl4aW4uanNcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIG5hdmlnYXRpb25fbWl4aW4gPSAoe1xuICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBob3Zlck9wdGlvbjogLTFcbiAgICB9O1xuICB9LFxuXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBvcHRpb25zQWxsRGlzYWJsZWQ6IGZ1bmN0aW9uIG9wdGlvbnNBbGxEaXNhYmxlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMuZmlsdGVyKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbi52aXNpYmxlO1xuICAgICAgfSkuZXZlcnkoZnVuY3Rpb24gKG9wdGlvbikge1xuICAgICAgICByZXR1cm4gb3B0aW9uLmRpc2FibGVkO1xuICAgICAgfSk7XG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgaG92ZXJJbmRleDogZnVuY3Rpb24gaG92ZXJJbmRleCh2YWwpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJyAmJiB2YWwgPiAtMSkge1xuICAgICAgICB0aGlzLmhvdmVyT3B0aW9uID0gdGhpcy5vcHRpb25zW3ZhbF0gfHwge307XG4gICAgICB9XG4gICAgICB0aGlzLm9wdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICAgIG9wdGlvbi5ob3ZlciA9IF90aGlzLmhvdmVyT3B0aW9uID09PSBvcHRpb247XG4gICAgICB9KTtcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG5hdmlnYXRlT3B0aW9uczogZnVuY3Rpb24gbmF2aWdhdGVPcHRpb25zKGRpcmVjdGlvbikge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIGlmICghdGhpcy52aXNpYmxlKSB7XG4gICAgICAgIHRoaXMudmlzaWJsZSA9IHRydWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMubGVuZ3RoID09PSAwIHx8IHRoaXMuZmlsdGVyZWRPcHRpb25zQ291bnQgPT09IDApIHJldHVybjtcbiAgICAgIGlmICghdGhpcy5vcHRpb25zQWxsRGlzYWJsZWQpIHtcbiAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gJ25leHQnKSB7XG4gICAgICAgICAgdGhpcy5ob3ZlckluZGV4Kys7XG4gICAgICAgICAgaWYgKHRoaXMuaG92ZXJJbmRleCA9PT0gdGhpcy5vcHRpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5ob3ZlckluZGV4ID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSAncHJldicpIHtcbiAgICAgICAgICB0aGlzLmhvdmVySW5kZXgtLTtcbiAgICAgICAgICBpZiAodGhpcy5ob3ZlckluZGV4IDwgMCkge1xuICAgICAgICAgICAgdGhpcy5ob3ZlckluZGV4ID0gdGhpcy5vcHRpb25zLmxlbmd0aCAtIDE7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHZhciBvcHRpb24gPSB0aGlzLm9wdGlvbnNbdGhpcy5ob3ZlckluZGV4XTtcbiAgICAgICAgaWYgKG9wdGlvbi5kaXNhYmxlZCA9PT0gdHJ1ZSB8fCBvcHRpb24uZ3JvdXBEaXNhYmxlZCA9PT0gdHJ1ZSB8fCAhb3B0aW9uLnZpc2libGUpIHtcbiAgICAgICAgICB0aGlzLm5hdmlnYXRlT3B0aW9ucyhkaXJlY3Rpb24pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXMyLnNjcm9sbFRvT3B0aW9uKF90aGlzMi5ob3Zlck9wdGlvbik7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufSk7XG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiZWxlbWVudC11aS9saWIvdXRpbHMvc2hhcmVkXCJcbnZhciBzaGFyZWRfID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMSk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3NlbGVjdC9zcmMvc2VsZWN0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNlbGVjdHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG1peGluczogW2VtaXR0ZXJfZGVmYXVsdC5hLCBsb2NhbGVfZGVmYXVsdC5hLCBmb2N1c19kZWZhdWx0KCkoJ3JlZmVyZW5jZScpLCBuYXZpZ2F0aW9uX21peGluXSxcblxuICBuYW1lOiAnRWxTZWxlY3QnLFxuXG4gIGNvbXBvbmVudE5hbWU6ICdFbFNlbGVjdCcsXG5cbiAgaW5qZWN0OiB7XG4gICAgZWxGb3JtOiB7XG4gICAgICBkZWZhdWx0OiAnJ1xuICAgIH0sXG5cbiAgICBlbEZvcm1JdGVtOiB7XG4gICAgICBkZWZhdWx0OiAnJ1xuICAgIH1cbiAgfSxcblxuICBwcm92aWRlOiBmdW5jdGlvbiBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAnc2VsZWN0JzogdGhpc1xuICAgIH07XG4gIH0sXG5cblxuICBjb21wdXRlZDoge1xuICAgIF9lbEZvcm1JdGVtU2l6ZTogZnVuY3Rpb24gX2VsRm9ybUl0ZW1TaXplKCkge1xuICAgICAgcmV0dXJuICh0aGlzLmVsRm9ybUl0ZW0gfHwge30pLmVsRm9ybUl0ZW1TaXplO1xuICAgIH0sXG4gICAgcmVhZG9ubHk6IGZ1bmN0aW9uIHJlYWRvbmx5KCkge1xuICAgICAgcmV0dXJuICF0aGlzLmZpbHRlcmFibGUgfHwgdGhpcy5tdWx0aXBsZSB8fCAhT2JqZWN0KHV0aWxfW1wiaXNJRVwiXSkoKSAmJiAhT2JqZWN0KHV0aWxfW1wiaXNFZGdlXCJdKSgpICYmICF0aGlzLnZpc2libGU7XG4gICAgfSxcbiAgICBzaG93Q2xvc2U6IGZ1bmN0aW9uIHNob3dDbG9zZSgpIHtcbiAgICAgIHZhciBoYXNWYWx1ZSA9IHRoaXMubXVsdGlwbGUgPyBBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpICYmIHRoaXMudmFsdWUubGVuZ3RoID4gMCA6IHRoaXMudmFsdWUgIT09IHVuZGVmaW5lZCAmJiB0aGlzLnZhbHVlICE9PSBudWxsICYmIHRoaXMudmFsdWUgIT09ICcnO1xuICAgICAgdmFyIGNyaXRlcmlhID0gdGhpcy5jbGVhcmFibGUgJiYgIXRoaXMuc2VsZWN0RGlzYWJsZWQgJiYgdGhpcy5pbnB1dEhvdmVyaW5nICYmIGhhc1ZhbHVlO1xuICAgICAgcmV0dXJuIGNyaXRlcmlhO1xuICAgIH0sXG4gICAgaWNvbkNsYXNzOiBmdW5jdGlvbiBpY29uQ2xhc3MoKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZW1vdGUgJiYgdGhpcy5maWx0ZXJhYmxlID8gJycgOiB0aGlzLnZpc2libGUgPyAnYXJyb3ctdXAgaXMtcmV2ZXJzZScgOiAnYXJyb3ctdXAnO1xuICAgIH0sXG4gICAgZGVib3VuY2U6IGZ1bmN0aW9uIGRlYm91bmNlKCkge1xuICAgICAgcmV0dXJuIHRoaXMucmVtb3RlID8gMzAwIDogMDtcbiAgICB9LFxuICAgIGVtcHR5VGV4dDogZnVuY3Rpb24gZW1wdHlUZXh0KCkge1xuICAgICAgaWYgKHRoaXMubG9hZGluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2FkaW5nVGV4dCB8fCB0aGlzLnQoJ2VsLnNlbGVjdC5sb2FkaW5nJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGhpcy5yZW1vdGUgJiYgdGhpcy5xdWVyeSA9PT0gJycgJiYgdGhpcy5vcHRpb25zLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5maWx0ZXJhYmxlICYmIHRoaXMucXVlcnkgJiYgdGhpcy5vcHRpb25zLmxlbmd0aCA+IDAgJiYgdGhpcy5maWx0ZXJlZE9wdGlvbnNDb3VudCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLm5vTWF0Y2hUZXh0IHx8IHRoaXMudCgnZWwuc2VsZWN0Lm5vTWF0Y2gnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLm5vRGF0YVRleHQgfHwgdGhpcy50KCdlbC5zZWxlY3Qubm9EYXRhJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0sXG4gICAgc2hvd05ld09wdGlvbjogZnVuY3Rpb24gc2hvd05ld09wdGlvbigpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIHZhciBoYXNFeGlzdGluZ09wdGlvbiA9IHRoaXMub3B0aW9ucy5maWx0ZXIoZnVuY3Rpb24gKG9wdGlvbikge1xuICAgICAgICByZXR1cm4gIW9wdGlvbi5jcmVhdGVkO1xuICAgICAgfSkuc29tZShmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICAgIHJldHVybiBvcHRpb24uY3VycmVudExhYmVsID09PSBfdGhpcy5xdWVyeTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyYWJsZSAmJiB0aGlzLmFsbG93Q3JlYXRlICYmIHRoaXMucXVlcnkgIT09ICcnICYmICFoYXNFeGlzdGluZ09wdGlvbjtcbiAgICB9LFxuICAgIHNlbGVjdFNpemU6IGZ1bmN0aW9uIHNlbGVjdFNpemUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zaXplIHx8IHRoaXMuX2VsRm9ybUl0ZW1TaXplIHx8ICh0aGlzLiRFTEVNRU5UIHx8IHt9KS5zaXplO1xuICAgIH0sXG4gICAgc2VsZWN0RGlzYWJsZWQ6IGZ1bmN0aW9uIHNlbGVjdERpc2FibGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQgfHwgKHRoaXMuZWxGb3JtIHx8IHt9KS5kaXNhYmxlZDtcbiAgICB9LFxuICAgIGNvbGxhcHNlVGFnU2l6ZTogZnVuY3Rpb24gY29sbGFwc2VUYWdTaXplKCkge1xuICAgICAgcmV0dXJuIFsnc21hbGwnLCAnbWluaSddLmluZGV4T2YodGhpcy5zZWxlY3RTaXplKSA+IC0xID8gJ21pbmknIDogJ3NtYWxsJztcbiAgICB9LFxuICAgIHByb3BQbGFjZWhvbGRlcjogZnVuY3Rpb24gcHJvcFBsYWNlaG9sZGVyKCkge1xuICAgICAgcmV0dXJuIHR5cGVvZiB0aGlzLnBsYWNlaG9sZGVyICE9PSAndW5kZWZpbmVkJyA/IHRoaXMucGxhY2Vob2xkZXIgOiB0aGlzLnQoJ2VsLnNlbGVjdC5wbGFjZWhvbGRlcicpO1xuICAgIH1cbiAgfSxcblxuICBjb21wb25lbnRzOiB7XG4gICAgRWxJbnB1dDogaW5wdXRfZGVmYXVsdC5hLFxuICAgIEVsU2VsZWN0TWVudTogc2VsZWN0X2Ryb3Bkb3duLFxuICAgIEVsT3B0aW9uOiBzcmNfb3B0aW9uW1wiYVwiIC8qIGRlZmF1bHQgKi9dLFxuICAgIEVsVGFnOiB0YWdfZGVmYXVsdC5hLFxuICAgIEVsU2Nyb2xsYmFyOiBzY3JvbGxiYXJfZGVmYXVsdC5hXG4gIH0sXG5cbiAgZGlyZWN0aXZlczogeyBDbGlja291dHNpZGU6IGNsaWNrb3V0c2lkZV9kZWZhdWx0LmEgfSxcblxuICBwcm9wczoge1xuICAgIG5hbWU6IFN0cmluZyxcbiAgICBpZDogU3RyaW5nLFxuICAgIHZhbHVlOiB7XG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAgYXV0b2NvbXBsZXRlOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnb2ZmJ1xuICAgIH0sXG4gICAgLyoqIEBEZXByZWNhdGVkIGluIG5leHQgbWFqb3IgdmVyc2lvbiAqL1xuICAgIGF1dG9Db21wbGV0ZToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgdmFsaWRhdG9yOiBmdW5jdGlvbiB2YWxpZGF0b3IodmFsKSB7XG4gICAgICAgICBmYWxzZSAmJiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSxcbiAgICBhdXRvbWF0aWNEcm9wZG93bjogQm9vbGVhbixcbiAgICBzaXplOiBTdHJpbmcsXG4gICAgZGlzYWJsZWQ6IEJvb2xlYW4sXG4gICAgY2xlYXJhYmxlOiBCb29sZWFuLFxuICAgIGZpbHRlcmFibGU6IEJvb2xlYW4sXG4gICAgYWxsb3dDcmVhdGU6IEJvb2xlYW4sXG4gICAgbG9hZGluZzogQm9vbGVhbixcbiAgICBwb3BwZXJDbGFzczogU3RyaW5nLFxuICAgIHJlbW90ZTogQm9vbGVhbixcbiAgICBsb2FkaW5nVGV4dDogU3RyaW5nLFxuICAgIG5vTWF0Y2hUZXh0OiBTdHJpbmcsXG4gICAgbm9EYXRhVGV4dDogU3RyaW5nLFxuICAgIHJlbW90ZU1ldGhvZDogRnVuY3Rpb24sXG4gICAgZmlsdGVyTWV0aG9kOiBGdW5jdGlvbixcbiAgICBtdWx0aXBsZTogQm9vbGVhbixcbiAgICBtdWx0aXBsZUxpbWl0OiB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBkZWZhdWx0OiAwXG4gICAgfSxcbiAgICBwbGFjZWhvbGRlcjoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfSxcbiAgICBkZWZhdWx0Rmlyc3RPcHRpb246IEJvb2xlYW4sXG4gICAgcmVzZXJ2ZUtleXdvcmQ6IEJvb2xlYW4sXG4gICAgdmFsdWVLZXk6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICd2YWx1ZSdcbiAgICB9LFxuICAgIGNvbGxhcHNlVGFnczogQm9vbGVhbixcbiAgICBwb3BwZXJBcHBlbmRUb0JvZHk6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfVxuICB9LFxuXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9wdGlvbnM6IFtdLFxuICAgICAgY2FjaGVkT3B0aW9uczogW10sXG4gICAgICBjcmVhdGVkTGFiZWw6IG51bGwsXG4gICAgICBjcmVhdGVkU2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgc2VsZWN0ZWQ6IHRoaXMubXVsdGlwbGUgPyBbXSA6IHt9LFxuICAgICAgaW5wdXRMZW5ndGg6IDIwLFxuICAgICAgaW5wdXRXaWR0aDogMCxcbiAgICAgIGluaXRpYWxJbnB1dEhlaWdodDogMCxcbiAgICAgIGNhY2hlZFBsYWNlSG9sZGVyOiAnJyxcbiAgICAgIG9wdGlvbnNDb3VudDogMCxcbiAgICAgIGZpbHRlcmVkT3B0aW9uc0NvdW50OiAwLFxuICAgICAgdmlzaWJsZTogZmFsc2UsXG4gICAgICBzb2Z0Rm9jdXM6IGZhbHNlLFxuICAgICAgc2VsZWN0ZWRMYWJlbDogJycsXG4gICAgICBob3ZlckluZGV4OiAtMSxcbiAgICAgIHF1ZXJ5OiAnJyxcbiAgICAgIHByZXZpb3VzUXVlcnk6IG51bGwsXG4gICAgICBpbnB1dEhvdmVyaW5nOiBmYWxzZSxcbiAgICAgIGN1cnJlbnRQbGFjZWhvbGRlcjogJycsXG4gICAgICBtZW51VmlzaWJsZU9uRm9jdXM6IGZhbHNlLFxuICAgICAgaXNPbkNvbXBvc2l0aW9uOiBmYWxzZSxcbiAgICAgIGlzU2lsZW50Qmx1cjogZmFsc2VcbiAgICB9O1xuICB9LFxuXG5cbiAgd2F0Y2g6IHtcbiAgICBzZWxlY3REaXNhYmxlZDogZnVuY3Rpb24gc2VsZWN0RGlzYWJsZWQoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpczIucmVzZXRJbnB1dEhlaWdodCgpO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBwcm9wUGxhY2Vob2xkZXI6IGZ1bmN0aW9uIHByb3BQbGFjZWhvbGRlcih2YWwpIHtcbiAgICAgIHRoaXMuY2FjaGVkUGxhY2VIb2xkZXIgPSB0aGlzLmN1cnJlbnRQbGFjZWhvbGRlciA9IHZhbDtcbiAgICB9LFxuICAgIHZhbHVlOiBmdW5jdGlvbiB2YWx1ZSh2YWwsIG9sZFZhbCkge1xuICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgdGhpcy5yZXNldElucHV0SGVpZ2h0KCk7XG4gICAgICAgIGlmICh2YWwgJiYgdmFsLmxlbmd0aCA+IDAgfHwgdGhpcy4kcmVmcy5pbnB1dCAmJiB0aGlzLnF1ZXJ5ICE9PSAnJykge1xuICAgICAgICAgIHRoaXMuY3VycmVudFBsYWNlaG9sZGVyID0gJyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50UGxhY2Vob2xkZXIgPSB0aGlzLmNhY2hlZFBsYWNlSG9sZGVyO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmZpbHRlcmFibGUgJiYgIXRoaXMucmVzZXJ2ZUtleXdvcmQpIHtcbiAgICAgICAgICB0aGlzLnF1ZXJ5ID0gJyc7XG4gICAgICAgICAgdGhpcy5oYW5kbGVRdWVyeUNoYW5nZSh0aGlzLnF1ZXJ5KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5zZXRTZWxlY3RlZCgpO1xuICAgICAgaWYgKHRoaXMuZmlsdGVyYWJsZSAmJiAhdGhpcy5tdWx0aXBsZSkge1xuICAgICAgICB0aGlzLmlucHV0TGVuZ3RoID0gMjA7XG4gICAgICB9XG4gICAgICBpZiAoIU9iamVjdCh1dGlsX1tcInZhbHVlRXF1YWxzXCJdKSh2YWwsIG9sZFZhbCkpIHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaCgnRWxGb3JtSXRlbScsICdlbC5mb3JtLmNoYW5nZScsIHZhbCk7XG4gICAgICB9XG4gICAgfSxcbiAgICB2aXNpYmxlOiBmdW5jdGlvbiB2aXNpYmxlKHZhbCkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgIGlmICghdmFsKSB7XG4gICAgICAgIHRoaXMuYnJvYWRjYXN0KCdFbFNlbGVjdERyb3Bkb3duJywgJ2Rlc3Ryb3lQb3BwZXInKTtcbiAgICAgICAgaWYgKHRoaXMuJHJlZnMuaW5wdXQpIHtcbiAgICAgICAgICB0aGlzLiRyZWZzLmlucHV0LmJsdXIoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnF1ZXJ5ID0gJyc7XG4gICAgICAgIHRoaXMucHJldmlvdXNRdWVyeSA9IG51bGw7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRMYWJlbCA9ICcnO1xuICAgICAgICB0aGlzLmlucHV0TGVuZ3RoID0gMjA7XG4gICAgICAgIHRoaXMubWVudVZpc2libGVPbkZvY3VzID0gZmFsc2U7XG4gICAgICAgIHRoaXMucmVzZXRIb3ZlckluZGV4KCk7XG4gICAgICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAoX3RoaXMzLiRyZWZzLmlucHV0ICYmIF90aGlzMy4kcmVmcy5pbnB1dC52YWx1ZSA9PT0gJycgJiYgX3RoaXMzLnNlbGVjdGVkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgX3RoaXMzLmN1cnJlbnRQbGFjZWhvbGRlciA9IF90aGlzMy5jYWNoZWRQbGFjZUhvbGRlcjtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIXRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZmlsdGVyYWJsZSAmJiB0aGlzLmFsbG93Q3JlYXRlICYmIHRoaXMuY3JlYXRlZFNlbGVjdGVkICYmIHRoaXMuY3JlYXRlZExhYmVsKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRMYWJlbCA9IHRoaXMuY3JlYXRlZExhYmVsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZExhYmVsID0gdGhpcy5zZWxlY3RlZC5jdXJyZW50TGFiZWw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5maWx0ZXJhYmxlKSB0aGlzLnF1ZXJ5ID0gdGhpcy5zZWxlY3RlZExhYmVsO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0aGlzLmZpbHRlcmFibGUpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBsYWNlaG9sZGVyID0gdGhpcy5jYWNoZWRQbGFjZUhvbGRlcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYnJvYWRjYXN0KCdFbFNlbGVjdERyb3Bkb3duJywgJ3VwZGF0ZVBvcHBlcicpO1xuICAgICAgICBpZiAodGhpcy5maWx0ZXJhYmxlKSB7XG4gICAgICAgICAgdGhpcy5xdWVyeSA9IHRoaXMucmVtb3RlID8gJycgOiB0aGlzLnNlbGVjdGVkTGFiZWw7XG4gICAgICAgICAgdGhpcy5oYW5kbGVRdWVyeUNoYW5nZSh0aGlzLnF1ZXJ5KTtcbiAgICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICAgICAgdGhpcy4kcmVmcy5pbnB1dC5mb2N1cygpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMucmVtb3RlKSB7XG4gICAgICAgICAgICAgIHRoaXMuYnJvYWRjYXN0KCdFbE9wdGlvbicsICdxdWVyeUNoYW5nZScsICcnKTtcbiAgICAgICAgICAgICAgdGhpcy5icm9hZGNhc3QoJ0VsT3B0aW9uR3JvdXAnLCAncXVlcnlDaGFuZ2UnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRMYWJlbCkge1xuICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRQbGFjZWhvbGRlciA9IHRoaXMuc2VsZWN0ZWRMYWJlbDtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZExhYmVsID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLiRlbWl0KCd2aXNpYmxlLWNoYW5nZScsIHZhbCk7XG4gICAgfSxcbiAgICBvcHRpb25zOiBmdW5jdGlvbiBvcHRpb25zKCkge1xuICAgICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cbiAgICAgIGlmICh0aGlzLiRpc1NlcnZlcikgcmV0dXJuO1xuICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpczQuYnJvYWRjYXN0KCdFbFNlbGVjdERyb3Bkb3duJywgJ3VwZGF0ZVBvcHBlcicpO1xuICAgICAgfSk7XG4gICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICB0aGlzLnJlc2V0SW5wdXRIZWlnaHQoKTtcbiAgICAgIH1cbiAgICAgIHZhciBpbnB1dHMgPSB0aGlzLiRlbC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dCcpO1xuICAgICAgaWYgKFtdLmluZGV4T2YuY2FsbChpbnB1dHMsIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpID09PSAtMSkge1xuICAgICAgICB0aGlzLnNldFNlbGVjdGVkKCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5kZWZhdWx0Rmlyc3RPcHRpb24gJiYgKHRoaXMuZmlsdGVyYWJsZSB8fCB0aGlzLnJlbW90ZSkgJiYgdGhpcy5maWx0ZXJlZE9wdGlvbnNDb3VudCkge1xuICAgICAgICB0aGlzLmNoZWNrRGVmYXVsdEZpcnN0T3B0aW9uKCk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBoYW5kbGVOYXZpZ2F0ZTogZnVuY3Rpb24gaGFuZGxlTmF2aWdhdGUoZGlyZWN0aW9uKSB7XG4gICAgICBpZiAodGhpcy5pc09uQ29tcG9zaXRpb24pIHJldHVybjtcblxuICAgICAgdGhpcy5uYXZpZ2F0ZU9wdGlvbnMoZGlyZWN0aW9uKTtcbiAgICB9LFxuICAgIGhhbmRsZUNvbXBvc2l0aW9uOiBmdW5jdGlvbiBoYW5kbGVDb21wb3NpdGlvbihldmVudCkge1xuICAgICAgdmFyIF90aGlzNSA9IHRoaXM7XG5cbiAgICAgIHZhciB0ZXh0ID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgICAgaWYgKGV2ZW50LnR5cGUgPT09ICdjb21wb3NpdGlvbmVuZCcpIHtcbiAgICAgICAgdGhpcy5pc09uQ29tcG9zaXRpb24gPSBmYWxzZTtcbiAgICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKF8pIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXM1LmhhbmRsZVF1ZXJ5Q2hhbmdlKHRleHQpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBsYXN0Q2hhcmFjdGVyID0gdGV4dFt0ZXh0Lmxlbmd0aCAtIDFdIHx8ICcnO1xuICAgICAgICB0aGlzLmlzT25Db21wb3NpdGlvbiA9ICFPYmplY3Qoc2hhcmVkX1tcImlzS29yZWFuXCJdKShsYXN0Q2hhcmFjdGVyKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGhhbmRsZVF1ZXJ5Q2hhbmdlOiBmdW5jdGlvbiBoYW5kbGVRdWVyeUNoYW5nZSh2YWwpIHtcbiAgICAgIHZhciBfdGhpczYgPSB0aGlzO1xuXG4gICAgICBpZiAodGhpcy5wcmV2aW91c1F1ZXJ5ID09PSB2YWwgfHwgdGhpcy5pc09uQ29tcG9zaXRpb24pIHJldHVybjtcbiAgICAgIGlmICh0aGlzLnByZXZpb3VzUXVlcnkgPT09IG51bGwgJiYgKHR5cGVvZiB0aGlzLmZpbHRlck1ldGhvZCA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgdGhpcy5yZW1vdGVNZXRob2QgPT09ICdmdW5jdGlvbicpKSB7XG4gICAgICAgIHRoaXMucHJldmlvdXNRdWVyeSA9IHZhbDtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5wcmV2aW91c1F1ZXJ5ID0gdmFsO1xuICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoX3RoaXM2LnZpc2libGUpIF90aGlzNi5icm9hZGNhc3QoJ0VsU2VsZWN0RHJvcGRvd24nLCAndXBkYXRlUG9wcGVyJyk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuaG92ZXJJbmRleCA9IC0xO1xuICAgICAgaWYgKHRoaXMubXVsdGlwbGUgJiYgdGhpcy5maWx0ZXJhYmxlKSB7XG4gICAgICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB2YXIgbGVuZ3RoID0gX3RoaXM2LiRyZWZzLmlucHV0LnZhbHVlLmxlbmd0aCAqIDE1ICsgMjA7XG4gICAgICAgICAgX3RoaXM2LmlucHV0TGVuZ3RoID0gX3RoaXM2LmNvbGxhcHNlVGFncyA/IE1hdGgubWluKDUwLCBsZW5ndGgpIDogbGVuZ3RoO1xuICAgICAgICAgIF90aGlzNi5tYW5hZ2VQbGFjZWhvbGRlcigpO1xuICAgICAgICAgIF90aGlzNi5yZXNldElucHV0SGVpZ2h0KCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMucmVtb3RlICYmIHR5cGVvZiB0aGlzLnJlbW90ZU1ldGhvZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLmhvdmVySW5kZXggPSAtMTtcbiAgICAgICAgdGhpcy5yZW1vdGVNZXRob2QodmFsKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMuZmlsdGVyTWV0aG9kID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyTWV0aG9kKHZhbCk7XG4gICAgICAgIHRoaXMuYnJvYWRjYXN0KCdFbE9wdGlvbkdyb3VwJywgJ3F1ZXJ5Q2hhbmdlJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmZpbHRlcmVkT3B0aW9uc0NvdW50ID0gdGhpcy5vcHRpb25zQ291bnQ7XG4gICAgICAgIHRoaXMuYnJvYWRjYXN0KCdFbE9wdGlvbicsICdxdWVyeUNoYW5nZScsIHZhbCk7XG4gICAgICAgIHRoaXMuYnJvYWRjYXN0KCdFbE9wdGlvbkdyb3VwJywgJ3F1ZXJ5Q2hhbmdlJyk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5kZWZhdWx0Rmlyc3RPcHRpb24gJiYgKHRoaXMuZmlsdGVyYWJsZSB8fCB0aGlzLnJlbW90ZSkgJiYgdGhpcy5maWx0ZXJlZE9wdGlvbnNDb3VudCkge1xuICAgICAgICB0aGlzLmNoZWNrRGVmYXVsdEZpcnN0T3B0aW9uKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBzY3JvbGxUb09wdGlvbjogZnVuY3Rpb24gc2Nyb2xsVG9PcHRpb24ob3B0aW9uKSB7XG4gICAgICB2YXIgdGFyZ2V0ID0gQXJyYXkuaXNBcnJheShvcHRpb24pICYmIG9wdGlvblswXSA/IG9wdGlvblswXS4kZWwgOiBvcHRpb24uJGVsO1xuICAgICAgaWYgKHRoaXMuJHJlZnMucG9wcGVyICYmIHRhcmdldCkge1xuICAgICAgICB2YXIgbWVudSA9IHRoaXMuJHJlZnMucG9wcGVyLiRlbC5xdWVyeVNlbGVjdG9yKCcuZWwtc2VsZWN0LWRyb3Bkb3duX193cmFwJyk7XG4gICAgICAgIHNjcm9sbF9pbnRvX3ZpZXdfZGVmYXVsdCgpKG1lbnUsIHRhcmdldCk7XG4gICAgICB9XG4gICAgICB0aGlzLiRyZWZzLnNjcm9sbGJhciAmJiB0aGlzLiRyZWZzLnNjcm9sbGJhci5oYW5kbGVTY3JvbGwoKTtcbiAgICB9LFxuICAgIGhhbmRsZU1lbnVFbnRlcjogZnVuY3Rpb24gaGFuZGxlTWVudUVudGVyKCkge1xuICAgICAgdmFyIF90aGlzNyA9IHRoaXM7XG5cbiAgICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzNy5zY3JvbGxUb09wdGlvbihfdGhpczcuc2VsZWN0ZWQpO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBlbWl0Q2hhbmdlOiBmdW5jdGlvbiBlbWl0Q2hhbmdlKHZhbCkge1xuICAgICAgaWYgKCFPYmplY3QodXRpbF9bXCJ2YWx1ZUVxdWFsc1wiXSkodGhpcy52YWx1ZSwgdmFsKSkge1xuICAgICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCB2YWwpO1xuICAgICAgfVxuICAgIH0sXG4gICAgZ2V0T3B0aW9uOiBmdW5jdGlvbiBnZXRPcHRpb24odmFsdWUpIHtcbiAgICAgIHZhciBvcHRpb24gPSB2b2lkIDA7XG4gICAgICB2YXIgaXNPYmplY3QgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpLnRvTG93ZXJDYXNlKCkgPT09ICdbb2JqZWN0IG9iamVjdF0nO1xuICAgICAgdmFyIGlzTnVsbCA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkudG9Mb3dlckNhc2UoKSA9PT0gJ1tvYmplY3QgbnVsbF0nO1xuICAgICAgdmFyIGlzVW5kZWZpbmVkID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKS50b0xvd2VyQ2FzZSgpID09PSAnW29iamVjdCB1bmRlZmluZWRdJztcblxuICAgICAgZm9yICh2YXIgaSA9IHRoaXMuY2FjaGVkT3B0aW9ucy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICB2YXIgY2FjaGVkT3B0aW9uID0gdGhpcy5jYWNoZWRPcHRpb25zW2ldO1xuICAgICAgICB2YXIgaXNFcXVhbCA9IGlzT2JqZWN0ID8gT2JqZWN0KHV0aWxfW1wiZ2V0VmFsdWVCeVBhdGhcIl0pKGNhY2hlZE9wdGlvbi52YWx1ZSwgdGhpcy52YWx1ZUtleSkgPT09IE9iamVjdCh1dGlsX1tcImdldFZhbHVlQnlQYXRoXCJdKSh2YWx1ZSwgdGhpcy52YWx1ZUtleSkgOiBjYWNoZWRPcHRpb24udmFsdWUgPT09IHZhbHVlO1xuICAgICAgICBpZiAoaXNFcXVhbCkge1xuICAgICAgICAgIG9wdGlvbiA9IGNhY2hlZE9wdGlvbjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbikgcmV0dXJuIG9wdGlvbjtcbiAgICAgIHZhciBsYWJlbCA9ICFpc09iamVjdCAmJiAhaXNOdWxsICYmICFpc1VuZGVmaW5lZCA/IFN0cmluZyh2YWx1ZSkgOiAnJztcbiAgICAgIHZhciBuZXdPcHRpb24gPSB7XG4gICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgY3VycmVudExhYmVsOiBsYWJlbFxuICAgICAgfTtcbiAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgIG5ld09wdGlvbi5oaXRTdGF0ZSA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ld09wdGlvbjtcbiAgICB9LFxuICAgIHNldFNlbGVjdGVkOiBmdW5jdGlvbiBzZXRTZWxlY3RlZCgpIHtcbiAgICAgIHZhciBfdGhpczggPSB0aGlzO1xuXG4gICAgICBpZiAoIXRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgdmFyIG9wdGlvbiA9IHRoaXMuZ2V0T3B0aW9uKHRoaXMudmFsdWUpO1xuICAgICAgICBpZiAob3B0aW9uLmNyZWF0ZWQpIHtcbiAgICAgICAgICB0aGlzLmNyZWF0ZWRMYWJlbCA9IG9wdGlvbi5jdXJyZW50TGFiZWw7XG4gICAgICAgICAgdGhpcy5jcmVhdGVkU2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY3JlYXRlZFNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3RlZExhYmVsID0gb3B0aW9uLmN1cnJlbnRMYWJlbDtcbiAgICAgICAgdGhpcy5zZWxlY3RlZCA9IG9wdGlvbjtcbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyYWJsZSkgdGhpcy5xdWVyeSA9IHRoaXMuc2VsZWN0ZWRMYWJlbDtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkpIHtcbiAgICAgICAgdGhpcy52YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKF90aGlzOC5nZXRPcHRpb24odmFsdWUpKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLnNlbGVjdGVkID0gcmVzdWx0O1xuICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpczgucmVzZXRJbnB1dEhlaWdodCgpO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBoYW5kbGVGb2N1czogZnVuY3Rpb24gaGFuZGxlRm9jdXMoZXZlbnQpIHtcbiAgICAgIGlmICghdGhpcy5zb2Z0Rm9jdXMpIHtcbiAgICAgICAgaWYgKHRoaXMuYXV0b21hdGljRHJvcGRvd24gfHwgdGhpcy5maWx0ZXJhYmxlKSB7XG4gICAgICAgICAgaWYgKHRoaXMuZmlsdGVyYWJsZSAmJiAhdGhpcy52aXNpYmxlKSB7XG4gICAgICAgICAgICB0aGlzLm1lbnVWaXNpYmxlT25Gb2N1cyA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMudmlzaWJsZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4kZW1pdCgnZm9jdXMnLCBldmVudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNvZnRGb2N1cyA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0sXG4gICAgYmx1cjogZnVuY3Rpb24gYmx1cigpIHtcbiAgICAgIHRoaXMudmlzaWJsZSA9IGZhbHNlO1xuICAgICAgdGhpcy4kcmVmcy5yZWZlcmVuY2UuYmx1cigpO1xuICAgIH0sXG4gICAgaGFuZGxlQmx1cjogZnVuY3Rpb24gaGFuZGxlQmx1cihldmVudCkge1xuICAgICAgdmFyIF90aGlzOSA9IHRoaXM7XG5cbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoX3RoaXM5LmlzU2lsZW50Qmx1cikge1xuICAgICAgICAgIF90aGlzOS5pc1NpbGVudEJsdXIgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBfdGhpczkuJGVtaXQoJ2JsdXInLCBldmVudCk7XG4gICAgICAgIH1cbiAgICAgIH0sIDUwKTtcbiAgICAgIHRoaXMuc29mdEZvY3VzID0gZmFsc2U7XG4gICAgfSxcbiAgICBoYW5kbGVDbGVhckNsaWNrOiBmdW5jdGlvbiBoYW5kbGVDbGVhckNsaWNrKGV2ZW50KSB7XG4gICAgICB0aGlzLmRlbGV0ZVNlbGVjdGVkKGV2ZW50KTtcbiAgICB9LFxuICAgIGRvRGVzdHJveTogZnVuY3Rpb24gZG9EZXN0cm95KCkge1xuICAgICAgdGhpcy4kcmVmcy5wb3BwZXIgJiYgdGhpcy4kcmVmcy5wb3BwZXIuZG9EZXN0cm95KCk7XG4gICAgfSxcbiAgICBoYW5kbGVDbG9zZTogZnVuY3Rpb24gaGFuZGxlQ2xvc2UoKSB7XG4gICAgICB0aGlzLnZpc2libGUgPSBmYWxzZTtcbiAgICB9LFxuICAgIHRvZ2dsZUxhc3RPcHRpb25IaXRTdGF0ZTogZnVuY3Rpb24gdG9nZ2xlTGFzdE9wdGlvbkhpdFN0YXRlKGhpdCkge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHRoaXMuc2VsZWN0ZWQpKSByZXR1cm47XG4gICAgICB2YXIgb3B0aW9uID0gdGhpcy5zZWxlY3RlZFt0aGlzLnNlbGVjdGVkLmxlbmd0aCAtIDFdO1xuICAgICAgaWYgKCFvcHRpb24pIHJldHVybjtcblxuICAgICAgaWYgKGhpdCA9PT0gdHJ1ZSB8fCBoaXQgPT09IGZhbHNlKSB7XG4gICAgICAgIG9wdGlvbi5oaXRTdGF0ZSA9IGhpdDtcbiAgICAgICAgcmV0dXJuIGhpdDtcbiAgICAgIH1cblxuICAgICAgb3B0aW9uLmhpdFN0YXRlID0gIW9wdGlvbi5oaXRTdGF0ZTtcbiAgICAgIHJldHVybiBvcHRpb24uaGl0U3RhdGU7XG4gICAgfSxcbiAgICBkZWxldGVQcmV2VGFnOiBmdW5jdGlvbiBkZWxldGVQcmV2VGFnKGUpIHtcbiAgICAgIGlmIChlLnRhcmdldC52YWx1ZS5sZW5ndGggPD0gMCAmJiAhdGhpcy50b2dnbGVMYXN0T3B0aW9uSGl0U3RhdGUoKSkge1xuICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLnZhbHVlLnNsaWNlKCk7XG4gICAgICAgIHZhbHVlLnBvcCgpO1xuICAgICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIHZhbHVlKTtcbiAgICAgICAgdGhpcy5lbWl0Q2hhbmdlKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIG1hbmFnZVBsYWNlaG9sZGVyOiBmdW5jdGlvbiBtYW5hZ2VQbGFjZWhvbGRlcigpIHtcbiAgICAgIGlmICh0aGlzLmN1cnJlbnRQbGFjZWhvbGRlciAhPT0gJycpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50UGxhY2Vob2xkZXIgPSB0aGlzLiRyZWZzLmlucHV0LnZhbHVlID8gJycgOiB0aGlzLmNhY2hlZFBsYWNlSG9sZGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgcmVzZXRJbnB1dFN0YXRlOiBmdW5jdGlvbiByZXNldElucHV0U3RhdGUoZSkge1xuICAgICAgaWYgKGUua2V5Q29kZSAhPT0gOCkgdGhpcy50b2dnbGVMYXN0T3B0aW9uSGl0U3RhdGUoZmFsc2UpO1xuICAgICAgdGhpcy5pbnB1dExlbmd0aCA9IHRoaXMuJHJlZnMuaW5wdXQudmFsdWUubGVuZ3RoICogMTUgKyAyMDtcbiAgICAgIHRoaXMucmVzZXRJbnB1dEhlaWdodCgpO1xuICAgIH0sXG4gICAgcmVzZXRJbnB1dEhlaWdodDogZnVuY3Rpb24gcmVzZXRJbnB1dEhlaWdodCgpIHtcbiAgICAgIHZhciBfdGhpczEwID0gdGhpcztcblxuICAgICAgaWYgKHRoaXMuY29sbGFwc2VUYWdzICYmICF0aGlzLmZpbHRlcmFibGUpIHJldHVybjtcbiAgICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFfdGhpczEwLiRyZWZzLnJlZmVyZW5jZSkgcmV0dXJuO1xuICAgICAgICB2YXIgaW5wdXRDaGlsZE5vZGVzID0gX3RoaXMxMC4kcmVmcy5yZWZlcmVuY2UuJGVsLmNoaWxkTm9kZXM7XG4gICAgICAgIHZhciBpbnB1dCA9IFtdLmZpbHRlci5jYWxsKGlucHV0Q2hpbGROb2RlcywgZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICByZXR1cm4gaXRlbS50YWdOYW1lID09PSAnSU5QVVQnO1xuICAgICAgICB9KVswXTtcbiAgICAgICAgdmFyIHRhZ3MgPSBfdGhpczEwLiRyZWZzLnRhZ3M7XG4gICAgICAgIHZhciB0YWdzSGVpZ2h0ID0gdGFncyA/IE1hdGgucm91bmQodGFncy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQpIDogMDtcbiAgICAgICAgdmFyIHNpemVJbk1hcCA9IF90aGlzMTAuaW5pdGlhbElucHV0SGVpZ2h0IHx8IDQwO1xuICAgICAgICBpbnB1dC5zdHlsZS5oZWlnaHQgPSBfdGhpczEwLnNlbGVjdGVkLmxlbmd0aCA9PT0gMCA/IHNpemVJbk1hcCArICdweCcgOiBNYXRoLm1heCh0YWdzID8gdGFnc0hlaWdodCArICh0YWdzSGVpZ2h0ID4gc2l6ZUluTWFwID8gNiA6IDApIDogMCwgc2l6ZUluTWFwKSArICdweCc7XG4gICAgICAgIGlmIChfdGhpczEwLnZpc2libGUgJiYgX3RoaXMxMC5lbXB0eVRleHQgIT09IGZhbHNlKSB7XG4gICAgICAgICAgX3RoaXMxMC5icm9hZGNhc3QoJ0VsU2VsZWN0RHJvcGRvd24nLCAndXBkYXRlUG9wcGVyJyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sXG4gICAgcmVzZXRIb3ZlckluZGV4OiBmdW5jdGlvbiByZXNldEhvdmVySW5kZXgoKSB7XG4gICAgICB2YXIgX3RoaXMxMSA9IHRoaXM7XG5cbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIV90aGlzMTEubXVsdGlwbGUpIHtcbiAgICAgICAgICBfdGhpczExLmhvdmVySW5kZXggPSBfdGhpczExLm9wdGlvbnMuaW5kZXhPZihfdGhpczExLnNlbGVjdGVkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoX3RoaXMxMS5zZWxlY3RlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBfdGhpczExLmhvdmVySW5kZXggPSBNYXRoLm1pbi5hcHBseShudWxsLCBfdGhpczExLnNlbGVjdGVkLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgICAgICByZXR1cm4gX3RoaXMxMS5vcHRpb25zLmluZGV4T2YoaXRlbSk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIF90aGlzMTEuaG92ZXJJbmRleCA9IC0xO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSwgMzAwKTtcbiAgICB9LFxuICAgIGhhbmRsZU9wdGlvblNlbGVjdDogZnVuY3Rpb24gaGFuZGxlT3B0aW9uU2VsZWN0KG9wdGlvbiwgYnlDbGljaykge1xuICAgICAgdmFyIF90aGlzMTIgPSB0aGlzO1xuXG4gICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICB2YXIgdmFsdWUgPSAodGhpcy52YWx1ZSB8fCBbXSkuc2xpY2UoKTtcbiAgICAgICAgdmFyIG9wdGlvbkluZGV4ID0gdGhpcy5nZXRWYWx1ZUluZGV4KHZhbHVlLCBvcHRpb24udmFsdWUpO1xuICAgICAgICBpZiAob3B0aW9uSW5kZXggPiAtMSkge1xuICAgICAgICAgIHZhbHVlLnNwbGljZShvcHRpb25JbmRleCwgMSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5tdWx0aXBsZUxpbWl0IDw9IDAgfHwgdmFsdWUubGVuZ3RoIDwgdGhpcy5tdWx0aXBsZUxpbWl0KSB7XG4gICAgICAgICAgdmFsdWUucHVzaChvcHRpb24udmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgdmFsdWUpO1xuICAgICAgICB0aGlzLmVtaXRDaGFuZ2UodmFsdWUpO1xuICAgICAgICBpZiAob3B0aW9uLmNyZWF0ZWQpIHtcbiAgICAgICAgICB0aGlzLnF1ZXJ5ID0gJyc7XG4gICAgICAgICAgdGhpcy5oYW5kbGVRdWVyeUNoYW5nZSgnJyk7XG4gICAgICAgICAgdGhpcy5pbnB1dExlbmd0aCA9IDIwO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmZpbHRlcmFibGUpIHRoaXMuJHJlZnMuaW5wdXQuZm9jdXMoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ2lucHV0Jywgb3B0aW9uLnZhbHVlKTtcbiAgICAgICAgdGhpcy5lbWl0Q2hhbmdlKG9wdGlvbi52YWx1ZSk7XG4gICAgICAgIHRoaXMudmlzaWJsZSA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgdGhpcy5pc1NpbGVudEJsdXIgPSBieUNsaWNrO1xuICAgICAgdGhpcy5zZXRTb2Z0Rm9jdXMoKTtcbiAgICAgIGlmICh0aGlzLnZpc2libGUpIHJldHVybjtcbiAgICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMxMi5zY3JvbGxUb09wdGlvbihvcHRpb24pO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBzZXRTb2Z0Rm9jdXM6IGZ1bmN0aW9uIHNldFNvZnRGb2N1cygpIHtcbiAgICAgIHRoaXMuc29mdEZvY3VzID0gdHJ1ZTtcbiAgICAgIHZhciBpbnB1dCA9IHRoaXMuJHJlZnMuaW5wdXQgfHwgdGhpcy4kcmVmcy5yZWZlcmVuY2U7XG4gICAgICBpZiAoaW5wdXQpIHtcbiAgICAgICAgaW5wdXQuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGdldFZhbHVlSW5kZXg6IGZ1bmN0aW9uIGdldFZhbHVlSW5kZXgoKSB7XG4gICAgICB2YXIgYXJyID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBbXTtcbiAgICAgIHZhciB2YWx1ZSA9IGFyZ3VtZW50c1sxXTtcblxuICAgICAgdmFyIGlzT2JqZWN0ID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKS50b0xvd2VyQ2FzZSgpID09PSAnW29iamVjdCBvYmplY3RdJztcbiAgICAgIGlmICghaXNPYmplY3QpIHtcbiAgICAgICAgcmV0dXJuIGFyci5pbmRleE9mKHZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciB2YWx1ZUtleSA9IHRoaXMudmFsdWVLZXk7XG4gICAgICAgIHZhciBpbmRleCA9IC0xO1xuICAgICAgICBhcnIuc29tZShmdW5jdGlvbiAoaXRlbSwgaSkge1xuICAgICAgICAgIGlmIChPYmplY3QodXRpbF9bXCJnZXRWYWx1ZUJ5UGF0aFwiXSkoaXRlbSwgdmFsdWVLZXkpID09PSBPYmplY3QodXRpbF9bXCJnZXRWYWx1ZUJ5UGF0aFwiXSkodmFsdWUsIHZhbHVlS2V5KSkge1xuICAgICAgICAgICAgaW5kZXggPSBpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBpbmRleDtcbiAgICAgIH1cbiAgICB9LFxuICAgIHRvZ2dsZU1lbnU6IGZ1bmN0aW9uIHRvZ2dsZU1lbnUoKSB7XG4gICAgICBpZiAoIXRoaXMuc2VsZWN0RGlzYWJsZWQpIHtcbiAgICAgICAgaWYgKHRoaXMubWVudVZpc2libGVPbkZvY3VzKSB7XG4gICAgICAgICAgdGhpcy5tZW51VmlzaWJsZU9uRm9jdXMgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnZpc2libGUgPSAhdGhpcy52aXNpYmxlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnZpc2libGUpIHtcbiAgICAgICAgICAodGhpcy4kcmVmcy5pbnB1dCB8fCB0aGlzLiRyZWZzLnJlZmVyZW5jZSkuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgc2VsZWN0T3B0aW9uOiBmdW5jdGlvbiBzZWxlY3RPcHRpb24oKSB7XG4gICAgICBpZiAoIXRoaXMudmlzaWJsZSkge1xuICAgICAgICB0aGlzLnRvZ2dsZU1lbnUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnNbdGhpcy5ob3ZlckluZGV4XSkge1xuICAgICAgICAgIHRoaXMuaGFuZGxlT3B0aW9uU2VsZWN0KHRoaXMub3B0aW9uc1t0aGlzLmhvdmVySW5kZXhdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgZGVsZXRlU2VsZWN0ZWQ6IGZ1bmN0aW9uIGRlbGV0ZVNlbGVjdGVkKGV2ZW50KSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHZhciB2YWx1ZSA9IHRoaXMubXVsdGlwbGUgPyBbXSA6ICcnO1xuICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCB2YWx1ZSk7XG4gICAgICB0aGlzLmVtaXRDaGFuZ2UodmFsdWUpO1xuICAgICAgdGhpcy52aXNpYmxlID0gZmFsc2U7XG4gICAgICB0aGlzLiRlbWl0KCdjbGVhcicpO1xuICAgIH0sXG4gICAgZGVsZXRlVGFnOiBmdW5jdGlvbiBkZWxldGVUYWcoZXZlbnQsIHRhZykge1xuICAgICAgdmFyIGluZGV4ID0gdGhpcy5zZWxlY3RlZC5pbmRleE9mKHRhZyk7XG4gICAgICBpZiAoaW5kZXggPiAtMSAmJiAhdGhpcy5zZWxlY3REaXNhYmxlZCkge1xuICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLnZhbHVlLnNsaWNlKCk7XG4gICAgICAgIHZhbHVlLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgdmFsdWUpO1xuICAgICAgICB0aGlzLmVtaXRDaGFuZ2UodmFsdWUpO1xuICAgICAgICB0aGlzLiRlbWl0KCdyZW1vdmUtdGFnJywgdGFnLnZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH0sXG4gICAgb25JbnB1dENoYW5nZTogZnVuY3Rpb24gb25JbnB1dENoYW5nZSgpIHtcbiAgICAgIGlmICh0aGlzLmZpbHRlcmFibGUgJiYgdGhpcy5xdWVyeSAhPT0gdGhpcy5zZWxlY3RlZExhYmVsKSB7XG4gICAgICAgIHRoaXMucXVlcnkgPSB0aGlzLnNlbGVjdGVkTGFiZWw7XG4gICAgICAgIHRoaXMuaGFuZGxlUXVlcnlDaGFuZ2UodGhpcy5xdWVyeSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBvbk9wdGlvbkRlc3Ryb3k6IGZ1bmN0aW9uIG9uT3B0aW9uRGVzdHJveShpbmRleCkge1xuICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zQ291bnQtLTtcbiAgICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnNDb3VudC0tO1xuICAgICAgICB0aGlzLm9wdGlvbnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHJlc2V0SW5wdXRXaWR0aDogZnVuY3Rpb24gcmVzZXRJbnB1dFdpZHRoKCkge1xuICAgICAgdGhpcy5pbnB1dFdpZHRoID0gdGhpcy4kcmVmcy5yZWZlcmVuY2UuJGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgIH0sXG4gICAgaGFuZGxlUmVzaXplOiBmdW5jdGlvbiBoYW5kbGVSZXNpemUoKSB7XG4gICAgICB0aGlzLnJlc2V0SW5wdXRXaWR0aCgpO1xuICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHRoaXMucmVzZXRJbnB1dEhlaWdodCgpO1xuICAgIH0sXG4gICAgY2hlY2tEZWZhdWx0Rmlyc3RPcHRpb246IGZ1bmN0aW9uIGNoZWNrRGVmYXVsdEZpcnN0T3B0aW9uKCkge1xuICAgICAgdGhpcy5ob3ZlckluZGV4ID0gLTE7XG4gICAgICAvLyBoaWdobGlnaHQgdGhlIGNyZWF0ZWQgb3B0aW9uXG4gICAgICB2YXIgaGFzQ3JlYXRlZCA9IGZhbHNlO1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMub3B0aW9ucy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zW2ldLmNyZWF0ZWQpIHtcbiAgICAgICAgICBoYXNDcmVhdGVkID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmhvdmVySW5kZXggPSBpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaGFzQ3JlYXRlZCkgcmV0dXJuO1xuICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSAhPT0gdGhpcy5vcHRpb25zLmxlbmd0aDsgKytfaSkge1xuICAgICAgICB2YXIgb3B0aW9uID0gdGhpcy5vcHRpb25zW19pXTtcbiAgICAgICAgaWYgKHRoaXMucXVlcnkpIHtcbiAgICAgICAgICAvLyBoaWdobGlnaHQgZmlyc3Qgb3B0aW9ucyB0aGF0IHBhc3NlcyB0aGUgZmlsdGVyXG4gICAgICAgICAgaWYgKCFvcHRpb24uZGlzYWJsZWQgJiYgIW9wdGlvbi5ncm91cERpc2FibGVkICYmIG9wdGlvbi52aXNpYmxlKSB7XG4gICAgICAgICAgICB0aGlzLmhvdmVySW5kZXggPSBfaTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBoaWdobGlnaHQgY3VycmVudGx5IHNlbGVjdGVkIG9wdGlvblxuICAgICAgICAgIGlmIChvcHRpb24uaXRlbVNlbGVjdGVkKSB7XG4gICAgICAgICAgICB0aGlzLmhvdmVySW5kZXggPSBfaTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgZ2V0VmFsdWVLZXk6IGZ1bmN0aW9uIGdldFZhbHVlS2V5KGl0ZW0pIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaXRlbS52YWx1ZSkudG9Mb3dlckNhc2UoKSAhPT0gJ1tvYmplY3Qgb2JqZWN0XScpIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0udmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gT2JqZWN0KHV0aWxfW1wiZ2V0VmFsdWVCeVBhdGhcIl0pKGl0ZW0udmFsdWUsIHRoaXMudmFsdWVLZXkpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkOiBmdW5jdGlvbiBjcmVhdGVkKCkge1xuICAgIHZhciBfdGhpczEzID0gdGhpcztcblxuICAgIHRoaXMuY2FjaGVkUGxhY2VIb2xkZXIgPSB0aGlzLmN1cnJlbnRQbGFjZWhvbGRlciA9IHRoaXMucHJvcFBsYWNlaG9sZGVyO1xuICAgIGlmICh0aGlzLm11bHRpcGxlICYmICFBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpKSB7XG4gICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIFtdKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLm11bHRpcGxlICYmIEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkpIHtcbiAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgJycpO1xuICAgIH1cblxuICAgIHRoaXMuZGVib3VuY2VkT25JbnB1dENoYW5nZSA9IGRlYm91bmNlX2RlZmF1bHQoKSh0aGlzLmRlYm91bmNlLCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczEzLm9uSW5wdXRDaGFuZ2UoKTtcbiAgICB9KTtcblxuICAgIHRoaXMuZGVib3VuY2VkUXVlcnlDaGFuZ2UgPSBkZWJvdW5jZV9kZWZhdWx0KCkodGhpcy5kZWJvdW5jZSwgZnVuY3Rpb24gKGUpIHtcbiAgICAgIF90aGlzMTMuaGFuZGxlUXVlcnlDaGFuZ2UoZS50YXJnZXQudmFsdWUpO1xuICAgIH0pO1xuXG4gICAgdGhpcy4kb24oJ2hhbmRsZU9wdGlvbkNsaWNrJywgdGhpcy5oYW5kbGVPcHRpb25TZWxlY3QpO1xuICAgIHRoaXMuJG9uKCdzZXRTZWxlY3RlZCcsIHRoaXMuc2V0U2VsZWN0ZWQpO1xuICB9LFxuICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge1xuICAgIHZhciBfdGhpczE0ID0gdGhpcztcblxuICAgIGlmICh0aGlzLm11bHRpcGxlICYmIEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkgJiYgdGhpcy52YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmN1cnJlbnRQbGFjZWhvbGRlciA9ICcnO1xuICAgIH1cbiAgICBPYmplY3QocmVzaXplX2V2ZW50X1tcImFkZFJlc2l6ZUxpc3RlbmVyXCJdKSh0aGlzLiRlbCwgdGhpcy5oYW5kbGVSZXNpemUpO1xuXG4gICAgdmFyIHJlZmVyZW5jZSA9IHRoaXMuJHJlZnMucmVmZXJlbmNlO1xuICAgIGlmIChyZWZlcmVuY2UgJiYgcmVmZXJlbmNlLiRlbCkge1xuICAgICAgdmFyIHNpemVNYXAgPSB7XG4gICAgICAgIG1lZGl1bTogMzYsXG4gICAgICAgIHNtYWxsOiAzMixcbiAgICAgICAgbWluaTogMjhcbiAgICAgIH07XG4gICAgICB2YXIgaW5wdXQgPSByZWZlcmVuY2UuJGVsLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0Jyk7XG4gICAgICB0aGlzLmluaXRpYWxJbnB1dEhlaWdodCA9IGlucHV0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCB8fCBzaXplTWFwW3RoaXMuc2VsZWN0U2l6ZV07XG4gICAgfVxuICAgIGlmICh0aGlzLnJlbW90ZSAmJiB0aGlzLm11bHRpcGxlKSB7XG4gICAgICB0aGlzLnJlc2V0SW5wdXRIZWlnaHQoKTtcbiAgICB9XG4gICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKHJlZmVyZW5jZSAmJiByZWZlcmVuY2UuJGVsKSB7XG4gICAgICAgIF90aGlzMTQuaW5wdXRXaWR0aCA9IHJlZmVyZW5jZS4kZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5zZXRTZWxlY3RlZCgpO1xuICB9LFxuICBiZWZvcmVEZXN0cm95OiBmdW5jdGlvbiBiZWZvcmVEZXN0cm95KCkge1xuICAgIGlmICh0aGlzLiRlbCAmJiB0aGlzLmhhbmRsZVJlc2l6ZSkgT2JqZWN0KHJlc2l6ZV9ldmVudF9bXCJyZW1vdmVSZXNpemVMaXN0ZW5lclwiXSkodGhpcy4kZWwsIHRoaXMuaGFuZGxlUmVzaXplKTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3NlbGVjdC9zcmMvc2VsZWN0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfc2VsZWN0dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHNlbGVjdHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9zZWxlY3Qvc3JjL3NlbGVjdC52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBzZWxlY3RfY29tcG9uZW50ID0gT2JqZWN0KGNvbXBvbmVudE5vcm1hbGl6ZXJbXCJhXCIgLyogZGVmYXVsdCAqL10pKFxuICBzcmNfc2VsZWN0dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgc2VsZWN0X2FwaTsgfVxuc2VsZWN0X2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvc2VsZWN0L3NyYy9zZWxlY3QudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY19zZWxlY3QgPSAoc2VsZWN0X2NvbXBvbmVudC5leHBvcnRzKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvc2VsZWN0L2luZGV4LmpzXG5cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbnNyY19zZWxlY3QuaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcbiAgVnVlLmNvbXBvbmVudChzcmNfc2VsZWN0Lm5hbWUsIHNyY19zZWxlY3QpO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcGFja2FnZXNfc2VsZWN0ID0gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoc3JjX3NlbGVjdCk7XG5cbi8qKiovIH0pXG5cbi8qKioqKiovIH0pOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/select.js\n");

/***/ }),

/***/ "./node_modules/element-ui/lib/tag.js":
/*!********************************************!*\
  !*** ./node_modules/element-ui/lib/tag.js ***!
  \********************************************/
/***/ ((module) => {

eval("module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __nested_webpack_require_187__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __nested_webpack_require_187__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__nested_webpack_require_187__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__nested_webpack_require_187__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__nested_webpack_require_187__.d = function(exports, name, getter) {\n/******/ \t\tif(!__nested_webpack_require_187__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__nested_webpack_require_187__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__nested_webpack_require_187__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __nested_webpack_require_187__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__nested_webpack_require_187__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __nested_webpack_require_187__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__nested_webpack_require_187__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__nested_webpack_require_187__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__nested_webpack_require_187__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__nested_webpack_require_187__.p = \"/dist/\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __nested_webpack_require_187__(__nested_webpack_require_187__.s = 132);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_3673__) {\n\n\"use strict\";\n/* harmony export (binding) */ __nested_webpack_require_3673__.d(__nested_webpack_exports__, \"a\", function() { return normalizeComponent; });\n/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nfunction normalizeComponent (\n  scriptExports,\n  render,\n  staticRenderFns,\n  functionalTemplate,\n  injectStyles,\n  scopeId,\n  moduleIdentifier, /* server only */\n  shadowMode /* vue-cli only */\n) {\n  // Vue.extend constructor export interop\n  var options = typeof scriptExports === 'function'\n    ? scriptExports.options\n    : scriptExports\n\n  // render functions\n  if (render) {\n    options.render = render\n    options.staticRenderFns = staticRenderFns\n    options._compiled = true\n  }\n\n  // functional template\n  if (functionalTemplate) {\n    options.functional = true\n  }\n\n  // scopedId\n  if (scopeId) {\n    options._scopeId = 'data-v-' + scopeId\n  }\n\n  var hook\n  if (moduleIdentifier) { // server build\n    hook = function (context) {\n      // 2.3 injection\n      context =\n        context || // cached call\n        (this.$vnode && this.$vnode.ssrContext) || // stateful\n        (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n      // 2.2 with runInNewContext: true\n      if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n        context = __VUE_SSR_CONTEXT__\n      }\n      // inject component styles\n      if (injectStyles) {\n        injectStyles.call(this, context)\n      }\n      // register component module identifier for async chunk inferrence\n      if (context && context._registeredComponents) {\n        context._registeredComponents.add(moduleIdentifier)\n      }\n    }\n    // used by ssr in case component is cached and beforeCreate\n    // never gets called\n    options._ssrRegister = hook\n  } else if (injectStyles) {\n    hook = shadowMode\n      ? function () { injectStyles.call(this, this.$root.$options.shadowRoot) }\n      : injectStyles\n  }\n\n  if (hook) {\n    if (options.functional) {\n      // for template-only hot-reload because in that case the render fn doesn't\n      // go through the normalizer\n      options._injectStyles = hook\n      // register for functioal component in vue file\n      var originalRender = options.render\n      options.render = function renderWithStyleInjection (h, context) {\n        hook.call(context)\n        return originalRender(h, context)\n      }\n    } else {\n      // inject component registration as beforeCreate hook\n      var existing = options.beforeCreate\n      options.beforeCreate = existing\n        ? [].concat(existing, hook)\n        : [hook]\n    }\n  }\n\n  return {\n    exports: scriptExports,\n    options: options\n  }\n}\n\n\n/***/ }),\n\n/***/ 132:\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_6577__) {\n\n\"use strict\";\n__nested_webpack_require_6577__.r(__nested_webpack_exports__);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/tag/src/tag.vue?vue&type=script&lang=js&\n\n/* harmony default export */ var tagvue_type_script_lang_js_ = ({\n  name: 'ElTag',\n  props: {\n    text: String,\n    closable: Boolean,\n    type: String,\n    hit: Boolean,\n    disableTransitions: Boolean,\n    color: String,\n    size: String,\n    effect: {\n      type: String,\n      default: 'light',\n      validator: function validator(val) {\n        return ['dark', 'light', 'plain'].indexOf(val) !== -1;\n      }\n    }\n  },\n  methods: {\n    handleClose: function handleClose(event) {\n      event.stopPropagation();\n      this.$emit('close', event);\n    },\n    handleClick: function handleClick(event) {\n      this.$emit('click', event);\n    }\n  },\n  computed: {\n    tagSize: function tagSize() {\n      return this.size || (this.$ELEMENT || {}).size;\n    }\n  },\n  render: function render(h) {\n    var type = this.type,\n        tagSize = this.tagSize,\n        hit = this.hit,\n        effect = this.effect;\n\n    var classes = ['el-tag', type ? 'el-tag--' + type : '', tagSize ? 'el-tag--' + tagSize : '', effect ? 'el-tag--' + effect : '', hit && 'is-hit'];\n    var tagEl = h(\n      'span',\n      {\n        'class': classes,\n        style: { backgroundColor: this.color },\n        on: {\n          'click': this.handleClick\n        }\n      },\n      [this.$slots.default, this.closable && h('i', { 'class': 'el-tag__close el-icon-close', on: {\n          'click': this.handleClose\n        }\n      })]\n    );\n\n    return this.disableTransitions ? tagEl : h(\n      'transition',\n      {\n        attrs: { name: 'el-zoom-in-center' }\n      },\n      [tagEl]\n    );\n  }\n});\n// CONCATENATED MODULE: ./packages/tag/src/tag.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_tagvue_type_script_lang_js_ = (tagvue_type_script_lang_js_); \n// EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js\nvar componentNormalizer = __nested_webpack_require_6577__(0);\n\n// CONCATENATED MODULE: ./packages/tag/src/tag.vue\nvar render, staticRenderFns\n\n\n\n\n/* normalize component */\n\nvar component = Object(componentNormalizer[\"a\" /* default */])(\n  src_tagvue_type_script_lang_js_,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"packages/tag/src/tag.vue\"\n/* harmony default export */ var tag = (component.exports);\n// CONCATENATED MODULE: ./packages/tag/index.js\n\n\n/* istanbul ignore next */\ntag.install = function (Vue) {\n  Vue.component(tag.name, tag);\n};\n\n/* harmony default export */ var packages_tag = __nested_webpack_exports__[\"default\"] = (tag);\n\n/***/ })\n\n/******/ });//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLCtCQUFtQjs7QUFFN0M7QUFDQTs7Ozs7QUFLQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksS0FBSyxFQUFFLFlBQVk7QUFDdkI7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxnREFBZ0QsMEJBQW1COztBQUVuRSxPQUFPOztBQUVQLFVBQVUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdGFnLmpzP2I2OTgiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPVxuLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcFxuLyoqKioqKi8gXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuLyoqKioqKi8gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuLyoqKioqKi8gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4vKioqKioqLyBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbi8qKioqKiovIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4vKioqKioqLyBcdFx0XHRpOiBtb2R1bGVJZCxcbi8qKioqKiovIFx0XHRcdGw6IGZhbHNlLFxuLyoqKioqKi8gXHRcdFx0ZXhwb3J0czoge31cbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbi8qKioqKiovIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuLyoqKioqKi8gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbi8qKioqKiovIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4vKioqKioqLyBcdH1cbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbi8qKioqKiovIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbi8qKioqKiovIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbi8qKioqKiovIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4vKioqKioqLyBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4vKioqKioqLyBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuLyoqKioqKi8gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4vKioqKioqLyBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuLyoqKioqKi8gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4vKioqKioqLyBcdFx0cmV0dXJuIG5zO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4vKioqKioqLyBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4vKioqKioqLyBcdFx0cmV0dXJuIGdldHRlcjtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIi9kaXN0L1wiO1xuLyoqKioqKi9cbi8qKioqKiovXG4vKioqKioqLyBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLyoqKioqKi8gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAxMzIpO1xuLyoqKioqKi8gfSlcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyAoe1xuXG4vKioqLyAwOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJhXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gbm9ybWFsaXplQ29tcG9uZW50OyB9KTtcbi8qIGdsb2JhbHMgX19WVUVfU1NSX0NPTlRFWFRfXyAqL1xuXG4vLyBJTVBPUlRBTlQ6IERvIE5PVCB1c2UgRVMyMDE1IGZlYXR1cmVzIGluIHRoaXMgZmlsZSAoZXhjZXB0IGZvciBtb2R1bGVzKS5cbi8vIFRoaXMgbW9kdWxlIGlzIGEgcnVudGltZSB1dGlsaXR5IGZvciBjbGVhbmVyIGNvbXBvbmVudCBtb2R1bGUgb3V0cHV0IGFuZCB3aWxsXG4vLyBiZSBpbmNsdWRlZCBpbiB0aGUgZmluYWwgd2VicGFjayB1c2VyIGJ1bmRsZS5cblxuZnVuY3Rpb24gbm9ybWFsaXplQ29tcG9uZW50IChcbiAgc2NyaXB0RXhwb3J0cyxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZ1bmN0aW9uYWxUZW1wbGF0ZSxcbiAgaW5qZWN0U3R5bGVzLFxuICBzY29wZUlkLFxuICBtb2R1bGVJZGVudGlmaWVyLCAvKiBzZXJ2ZXIgb25seSAqL1xuICBzaGFkb3dNb2RlIC8qIHZ1ZS1jbGkgb25seSAqL1xuKSB7XG4gIC8vIFZ1ZS5leHRlbmQgY29uc3RydWN0b3IgZXhwb3J0IGludGVyb3BcbiAgdmFyIG9wdGlvbnMgPSB0eXBlb2Ygc2NyaXB0RXhwb3J0cyA9PT0gJ2Z1bmN0aW9uJ1xuICAgID8gc2NyaXB0RXhwb3J0cy5vcHRpb25zXG4gICAgOiBzY3JpcHRFeHBvcnRzXG5cbiAgLy8gcmVuZGVyIGZ1bmN0aW9uc1xuICBpZiAocmVuZGVyKSB7XG4gICAgb3B0aW9ucy5yZW5kZXIgPSByZW5kZXJcbiAgICBvcHRpb25zLnN0YXRpY1JlbmRlckZucyA9IHN0YXRpY1JlbmRlckZuc1xuICAgIG9wdGlvbnMuX2NvbXBpbGVkID0gdHJ1ZVxuICB9XG5cbiAgLy8gZnVuY3Rpb25hbCB0ZW1wbGF0ZVxuICBpZiAoZnVuY3Rpb25hbFRlbXBsYXRlKSB7XG4gICAgb3B0aW9ucy5mdW5jdGlvbmFsID0gdHJ1ZVxuICB9XG5cbiAgLy8gc2NvcGVkSWRcbiAgaWYgKHNjb3BlSWQpIHtcbiAgICBvcHRpb25zLl9zY29wZUlkID0gJ2RhdGEtdi0nICsgc2NvcGVJZFxuICB9XG5cbiAgdmFyIGhvb2tcbiAgaWYgKG1vZHVsZUlkZW50aWZpZXIpIHsgLy8gc2VydmVyIGJ1aWxkXG4gICAgaG9vayA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgICAvLyAyLjMgaW5qZWN0aW9uXG4gICAgICBjb250ZXh0ID1cbiAgICAgICAgY29udGV4dCB8fCAvLyBjYWNoZWQgY2FsbFxuICAgICAgICAodGhpcy4kdm5vZGUgJiYgdGhpcy4kdm5vZGUuc3NyQ29udGV4dCkgfHwgLy8gc3RhdGVmdWxcbiAgICAgICAgKHRoaXMucGFyZW50ICYmIHRoaXMucGFyZW50LiR2bm9kZSAmJiB0aGlzLnBhcmVudC4kdm5vZGUuc3NyQ29udGV4dCkgLy8gZnVuY3Rpb25hbFxuICAgICAgLy8gMi4yIHdpdGggcnVuSW5OZXdDb250ZXh0OiB0cnVlXG4gICAgICBpZiAoIWNvbnRleHQgJiYgdHlwZW9mIF9fVlVFX1NTUl9DT05URVhUX18gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGNvbnRleHQgPSBfX1ZVRV9TU1JfQ09OVEVYVF9fXG4gICAgICB9XG4gICAgICAvLyBpbmplY3QgY29tcG9uZW50IHN0eWxlc1xuICAgICAgaWYgKGluamVjdFN0eWxlcykge1xuICAgICAgICBpbmplY3RTdHlsZXMuY2FsbCh0aGlzLCBjb250ZXh0KVxuICAgICAgfVxuICAgICAgLy8gcmVnaXN0ZXIgY29tcG9uZW50IG1vZHVsZSBpZGVudGlmaWVyIGZvciBhc3luYyBjaHVuayBpbmZlcnJlbmNlXG4gICAgICBpZiAoY29udGV4dCAmJiBjb250ZXh0Ll9yZWdpc3RlcmVkQ29tcG9uZW50cykge1xuICAgICAgICBjb250ZXh0Ll9yZWdpc3RlcmVkQ29tcG9uZW50cy5hZGQobW9kdWxlSWRlbnRpZmllcilcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gdXNlZCBieSBzc3IgaW4gY2FzZSBjb21wb25lbnQgaXMgY2FjaGVkIGFuZCBiZWZvcmVDcmVhdGVcbiAgICAvLyBuZXZlciBnZXRzIGNhbGxlZFxuICAgIG9wdGlvbnMuX3NzclJlZ2lzdGVyID0gaG9va1xuICB9IGVsc2UgaWYgKGluamVjdFN0eWxlcykge1xuICAgIGhvb2sgPSBzaGFkb3dNb2RlXG4gICAgICA/IGZ1bmN0aW9uICgpIHsgaW5qZWN0U3R5bGVzLmNhbGwodGhpcywgdGhpcy4kcm9vdC4kb3B0aW9ucy5zaGFkb3dSb290KSB9XG4gICAgICA6IGluamVjdFN0eWxlc1xuICB9XG5cbiAgaWYgKGhvb2spIHtcbiAgICBpZiAob3B0aW9ucy5mdW5jdGlvbmFsKSB7XG4gICAgICAvLyBmb3IgdGVtcGxhdGUtb25seSBob3QtcmVsb2FkIGJlY2F1c2UgaW4gdGhhdCBjYXNlIHRoZSByZW5kZXIgZm4gZG9lc24ndFxuICAgICAgLy8gZ28gdGhyb3VnaCB0aGUgbm9ybWFsaXplclxuICAgICAgb3B0aW9ucy5faW5qZWN0U3R5bGVzID0gaG9va1xuICAgICAgLy8gcmVnaXN0ZXIgZm9yIGZ1bmN0aW9hbCBjb21wb25lbnQgaW4gdnVlIGZpbGVcbiAgICAgIHZhciBvcmlnaW5hbFJlbmRlciA9IG9wdGlvbnMucmVuZGVyXG4gICAgICBvcHRpb25zLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcldpdGhTdHlsZUluamVjdGlvbiAoaCwgY29udGV4dCkge1xuICAgICAgICBob29rLmNhbGwoY29udGV4dClcbiAgICAgICAgcmV0dXJuIG9yaWdpbmFsUmVuZGVyKGgsIGNvbnRleHQpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGluamVjdCBjb21wb25lbnQgcmVnaXN0cmF0aW9uIGFzIGJlZm9yZUNyZWF0ZSBob29rXG4gICAgICB2YXIgZXhpc3RpbmcgPSBvcHRpb25zLmJlZm9yZUNyZWF0ZVxuICAgICAgb3B0aW9ucy5iZWZvcmVDcmVhdGUgPSBleGlzdGluZ1xuICAgICAgICA/IFtdLmNvbmNhdChleGlzdGluZywgaG9vaylcbiAgICAgICAgOiBbaG9va11cbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGV4cG9ydHM6IHNjcmlwdEV4cG9ydHMsXG4gICAgb3B0aW9uczogb3B0aW9uc1xuICB9XG59XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDEzMjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3RhZy9zcmMvdGFnLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgdGFndnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbmFtZTogJ0VsVGFnJyxcbiAgcHJvcHM6IHtcbiAgICB0ZXh0OiBTdHJpbmcsXG4gICAgY2xvc2FibGU6IEJvb2xlYW4sXG4gICAgdHlwZTogU3RyaW5nLFxuICAgIGhpdDogQm9vbGVhbixcbiAgICBkaXNhYmxlVHJhbnNpdGlvbnM6IEJvb2xlYW4sXG4gICAgY29sb3I6IFN0cmluZyxcbiAgICBzaXplOiBTdHJpbmcsXG4gICAgZWZmZWN0OiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnbGlnaHQnLFxuICAgICAgdmFsaWRhdG9yOiBmdW5jdGlvbiB2YWxpZGF0b3IodmFsKSB7XG4gICAgICAgIHJldHVybiBbJ2RhcmsnLCAnbGlnaHQnLCAncGxhaW4nXS5pbmRleE9mKHZhbCkgIT09IC0xO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgbWV0aG9kczoge1xuICAgIGhhbmRsZUNsb3NlOiBmdW5jdGlvbiBoYW5kbGVDbG9zZShldmVudCkge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB0aGlzLiRlbWl0KCdjbG9zZScsIGV2ZW50KTtcbiAgICB9LFxuICAgIGhhbmRsZUNsaWNrOiBmdW5jdGlvbiBoYW5kbGVDbGljayhldmVudCkge1xuICAgICAgdGhpcy4kZW1pdCgnY2xpY2snLCBldmVudCk7XG4gICAgfVxuICB9LFxuICBjb21wdXRlZDoge1xuICAgIHRhZ1NpemU6IGZ1bmN0aW9uIHRhZ1NpemUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zaXplIHx8ICh0aGlzLiRFTEVNRU5UIHx8IHt9KS5zaXplO1xuICAgIH1cbiAgfSxcbiAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIoaCkge1xuICAgIHZhciB0eXBlID0gdGhpcy50eXBlLFxuICAgICAgICB0YWdTaXplID0gdGhpcy50YWdTaXplLFxuICAgICAgICBoaXQgPSB0aGlzLmhpdCxcbiAgICAgICAgZWZmZWN0ID0gdGhpcy5lZmZlY3Q7XG5cbiAgICB2YXIgY2xhc3NlcyA9IFsnZWwtdGFnJywgdHlwZSA/ICdlbC10YWctLScgKyB0eXBlIDogJycsIHRhZ1NpemUgPyAnZWwtdGFnLS0nICsgdGFnU2l6ZSA6ICcnLCBlZmZlY3QgPyAnZWwtdGFnLS0nICsgZWZmZWN0IDogJycsIGhpdCAmJiAnaXMtaGl0J107XG4gICAgdmFyIHRhZ0VsID0gaChcbiAgICAgICdzcGFuJyxcbiAgICAgIHtcbiAgICAgICAgJ2NsYXNzJzogY2xhc3NlcyxcbiAgICAgICAgc3R5bGU6IHsgYmFja2dyb3VuZENvbG9yOiB0aGlzLmNvbG9yIH0sXG4gICAgICAgIG9uOiB7XG4gICAgICAgICAgJ2NsaWNrJzogdGhpcy5oYW5kbGVDbGlja1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgW3RoaXMuJHNsb3RzLmRlZmF1bHQsIHRoaXMuY2xvc2FibGUgJiYgaCgnaScsIHsgJ2NsYXNzJzogJ2VsLXRhZ19fY2xvc2UgZWwtaWNvbi1jbG9zZScsIG9uOiB7XG4gICAgICAgICAgJ2NsaWNrJzogdGhpcy5oYW5kbGVDbG9zZVxuICAgICAgICB9XG4gICAgICB9KV1cbiAgICApO1xuXG4gICAgcmV0dXJuIHRoaXMuZGlzYWJsZVRyYW5zaXRpb25zID8gdGFnRWwgOiBoKFxuICAgICAgJ3RyYW5zaXRpb24nLFxuICAgICAge1xuICAgICAgICBhdHRyczogeyBuYW1lOiAnZWwtem9vbS1pbi1jZW50ZXInIH1cbiAgICAgIH0sXG4gICAgICBbdGFnRWxdXG4gICAgKTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3RhZy9zcmMvdGFnLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfdGFndnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHRhZ3Z1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gRVhURVJOQUwgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcbnZhciBjb21wb25lbnROb3JtYWxpemVyID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy90YWcvc3JjL3RhZy52dWVcbnZhciByZW5kZXIsIHN0YXRpY1JlbmRlckZuc1xuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBjb21wb25lbnQgPSBPYmplY3QoY29tcG9uZW50Tm9ybWFsaXplcltcImFcIiAvKiBkZWZhdWx0ICovXSkoXG4gIHNyY190YWd2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBhcGk7IH1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvdGFnL3NyYy90YWcudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHRhZyA9IChjb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3RhZy9pbmRleC5qc1xuXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG50YWcuaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcbiAgVnVlLmNvbXBvbmVudCh0YWcubmFtZSwgdGFnKTtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhY2thZ2VzX3RhZyA9IF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKHRhZyk7XG5cbi8qKiovIH0pXG5cbi8qKioqKiovIH0pOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/tag.js\n");

/***/ }),

/***/ "./node_modules/element-ui/lib/tooltip.js":
/*!************************************************!*\
  !*** ./node_modules/element-ui/lib/tooltip.js ***!
  \************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

eval("module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __nested_webpack_require_187__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __nested_webpack_require_187__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__nested_webpack_require_187__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__nested_webpack_require_187__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__nested_webpack_require_187__.d = function(exports, name, getter) {\n/******/ \t\tif(!__nested_webpack_require_187__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__nested_webpack_require_187__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__nested_webpack_require_187__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __nested_webpack_require_187__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__nested_webpack_require_187__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __nested_webpack_require_187__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__nested_webpack_require_187__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__nested_webpack_require_187__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__nested_webpack_require_187__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__nested_webpack_require_187__.p = \"/dist/\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __nested_webpack_require_187__(__nested_webpack_require_187__.s = 138);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 138:\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_3675__) {\n\n\"use strict\";\n__nested_webpack_require_3675__.r(__nested_webpack_exports__);\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/vue-popper\"\nvar vue_popper_ = __nested_webpack_require_3675__(5);\nvar vue_popper_default = /*#__PURE__*/__nested_webpack_require_3675__.n(vue_popper_);\n\n// EXTERNAL MODULE: external \"throttle-debounce/debounce\"\nvar debounce_ = __nested_webpack_require_3675__(19);\nvar debounce_default = /*#__PURE__*/__nested_webpack_require_3675__.n(debounce_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/dom\"\nvar dom_ = __nested_webpack_require_3675__(2);\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/util\"\nvar util_ = __nested_webpack_require_3675__(3);\n\n// EXTERNAL MODULE: external \"vue\"\nvar external_vue_ = __nested_webpack_require_3675__(7);\nvar external_vue_default = /*#__PURE__*/__nested_webpack_require_3675__.n(external_vue_);\n\n// CONCATENATED MODULE: ./packages/tooltip/src/main.js\n\n\n\n\n\n\n/* harmony default export */ var main = ({\n  name: 'ElTooltip',\n\n  mixins: [vue_popper_default.a],\n\n  props: {\n    openDelay: {\n      type: Number,\n      default: 0\n    },\n    disabled: Boolean,\n    manual: Boolean,\n    effect: {\n      type: String,\n      default: 'dark'\n    },\n    arrowOffset: {\n      type: Number,\n      default: 0\n    },\n    popperClass: String,\n    content: String,\n    visibleArrow: {\n      default: true\n    },\n    transition: {\n      type: String,\n      default: 'el-fade-in-linear'\n    },\n    popperOptions: {\n      default: function _default() {\n        return {\n          boundariesPadding: 10,\n          gpuAcceleration: false\n        };\n      }\n    },\n    enterable: {\n      type: Boolean,\n      default: true\n    },\n    hideAfter: {\n      type: Number,\n      default: 0\n    },\n    tabindex: {\n      type: Number,\n      default: 0\n    }\n  },\n\n  data: function data() {\n    return {\n      tooltipId: 'el-tooltip-' + Object(util_[\"generateId\"])(),\n      timeoutPending: null,\n      focusing: false\n    };\n  },\n  beforeCreate: function beforeCreate() {\n    var _this = this;\n\n    if (this.$isServer) return;\n\n    this.popperVM = new external_vue_default.a({\n      data: { node: '' },\n      render: function render(h) {\n        return this.node;\n      }\n    }).$mount();\n\n    this.debounceClose = debounce_default()(200, function () {\n      return _this.handleClosePopper();\n    });\n  },\n  render: function render(h) {\n    var _this2 = this;\n\n    if (this.popperVM) {\n      this.popperVM.node = h(\n        'transition',\n        {\n          attrs: {\n            name: this.transition\n          },\n          on: {\n            'afterLeave': this.doDestroy\n          }\n        },\n        [h(\n          'div',\n          {\n            on: {\n              'mouseleave': function mouseleave() {\n                _this2.setExpectedState(false);_this2.debounceClose();\n              },\n              'mouseenter': function mouseenter() {\n                _this2.setExpectedState(true);\n              }\n            },\n\n            ref: 'popper',\n            attrs: { role: 'tooltip',\n              id: this.tooltipId,\n              'aria-hidden': this.disabled || !this.showPopper ? 'true' : 'false'\n            },\n            directives: [{\n              name: 'show',\n              value: !this.disabled && this.showPopper\n            }],\n\n            'class': ['el-tooltip__popper', 'is-' + this.effect, this.popperClass] },\n          [this.$slots.content || this.content]\n        )]\n      );\n    }\n\n    var firstElement = this.getFirstElement();\n    if (!firstElement) return null;\n\n    var data = firstElement.data = firstElement.data || {};\n    data.staticClass = this.addTooltipClass(data.staticClass);\n\n    return firstElement;\n  },\n  mounted: function mounted() {\n    var _this3 = this;\n\n    this.referenceElm = this.$el;\n    if (this.$el.nodeType === 1) {\n      this.$el.setAttribute('aria-describedby', this.tooltipId);\n      this.$el.setAttribute('tabindex', this.tabindex);\n      Object(dom_[\"on\"])(this.referenceElm, 'mouseenter', this.show);\n      Object(dom_[\"on\"])(this.referenceElm, 'mouseleave', this.hide);\n      Object(dom_[\"on\"])(this.referenceElm, 'focus', function () {\n        if (!_this3.$slots.default || !_this3.$slots.default.length) {\n          _this3.handleFocus();\n          return;\n        }\n        var instance = _this3.$slots.default[0].componentInstance;\n        if (instance && instance.focus) {\n          instance.focus();\n        } else {\n          _this3.handleFocus();\n        }\n      });\n      Object(dom_[\"on\"])(this.referenceElm, 'blur', this.handleBlur);\n      Object(dom_[\"on\"])(this.referenceElm, 'click', this.removeFocusing);\n    }\n    // fix issue https://github.com/ElemeFE/element/issues/14424\n    if (this.value && this.popperVM) {\n      this.popperVM.$nextTick(function () {\n        if (_this3.value) {\n          _this3.updatePopper();\n        }\n      });\n    }\n  },\n\n  watch: {\n    focusing: function focusing(val) {\n      if (val) {\n        Object(dom_[\"addClass\"])(this.referenceElm, 'focusing');\n      } else {\n        Object(dom_[\"removeClass\"])(this.referenceElm, 'focusing');\n      }\n    }\n  },\n  methods: {\n    show: function show() {\n      this.setExpectedState(true);\n      this.handleShowPopper();\n    },\n    hide: function hide() {\n      this.setExpectedState(false);\n      this.debounceClose();\n    },\n    handleFocus: function handleFocus() {\n      this.focusing = true;\n      this.show();\n    },\n    handleBlur: function handleBlur() {\n      this.focusing = false;\n      this.hide();\n    },\n    removeFocusing: function removeFocusing() {\n      this.focusing = false;\n    },\n    addTooltipClass: function addTooltipClass(prev) {\n      if (!prev) {\n        return 'el-tooltip';\n      } else {\n        return 'el-tooltip ' + prev.replace('el-tooltip', '');\n      }\n    },\n    handleShowPopper: function handleShowPopper() {\n      var _this4 = this;\n\n      if (!this.expectedState || this.manual) return;\n      clearTimeout(this.timeout);\n      this.timeout = setTimeout(function () {\n        _this4.showPopper = true;\n      }, this.openDelay);\n\n      if (this.hideAfter > 0) {\n        this.timeoutPending = setTimeout(function () {\n          _this4.showPopper = false;\n        }, this.hideAfter);\n      }\n    },\n    handleClosePopper: function handleClosePopper() {\n      if (this.enterable && this.expectedState || this.manual) return;\n      clearTimeout(this.timeout);\n\n      if (this.timeoutPending) {\n        clearTimeout(this.timeoutPending);\n      }\n      this.showPopper = false;\n\n      if (this.disabled) {\n        this.doDestroy();\n      }\n    },\n    setExpectedState: function setExpectedState(expectedState) {\n      if (expectedState === false) {\n        clearTimeout(this.timeoutPending);\n      }\n      this.expectedState = expectedState;\n    },\n    getFirstElement: function getFirstElement() {\n      var slots = this.$slots.default;\n      if (!Array.isArray(slots)) return null;\n      var element = null;\n      for (var index = 0; index < slots.length; index++) {\n        if (slots[index] && slots[index].tag) {\n          element = slots[index];\n          break;\n        };\n      }\n      return element;\n    }\n  },\n\n  beforeDestroy: function beforeDestroy() {\n    this.popperVM && this.popperVM.$destroy();\n  },\n  destroyed: function destroyed() {\n    var reference = this.referenceElm;\n    if (reference.nodeType === 1) {\n      Object(dom_[\"off\"])(reference, 'mouseenter', this.show);\n      Object(dom_[\"off\"])(reference, 'mouseleave', this.hide);\n      Object(dom_[\"off\"])(reference, 'focus', this.handleFocus);\n      Object(dom_[\"off\"])(reference, 'blur', this.handleBlur);\n      Object(dom_[\"off\"])(reference, 'click', this.removeFocusing);\n    }\n  }\n});\n// CONCATENATED MODULE: ./packages/tooltip/index.js\n\n\n/* istanbul ignore next */\nmain.install = function (Vue) {\n  Vue.component(main.name, main);\n};\n\n/* harmony default export */ var tooltip = __nested_webpack_exports__[\"default\"] = (main);\n\n/***/ }),\n\n/***/ 19:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! throttle-debounce/debounce */ \"./node_modules/throttle-debounce/debounce.js\");\n\n/***/ }),\n\n/***/ 2:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/dom */ \"./node_modules/element-ui/lib/utils/dom.js\");\n\n/***/ }),\n\n/***/ 3:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/util */ \"./node_modules/element-ui/lib/utils/util.js\");\n\n/***/ }),\n\n/***/ 5:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/vue-popper */ \"./node_modules/element-ui/lib/utils/vue-popper.js\");\n\n/***/ }),\n\n/***/ 7:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.esm.js\");\n\n/***/ })\n\n/******/ });//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdG9vbHRpcC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBLDhCQUE4QjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQiw4QkFBbUI7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwRUFBMEUsOEJBQW1CO0FBQzdGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSw4QkFBbUI7QUFDN0I7QUFDQTtBQUNBLFVBQVUsOEJBQW1CO0FBQzdCO0FBQ0E7QUFDQSxVQUFVLDhCQUFtQjtBQUM3QixlQUFlLDhCQUFtQjtBQUNsQyxtREFBbUQsK0JBQStCO0FBQ2xGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSw4QkFBbUI7QUFDN0I7QUFDQSxpRUFBaUUsaUJBQWlCO0FBQ2xGO0FBQ0EsMERBQTBELGFBQWE7QUFDdkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLDhCQUFtQjtBQUM3QixnQ0FBZ0MsOEJBQW1CO0FBQ25EO0FBQ0E7QUFDQTtBQUNBLFdBQVcsOEJBQW1CO0FBQzlCLGtEQUFrRCxnQ0FBZ0M7QUFDbEYsMEVBQTBFLDhCQUFtQiw0QkFBNEIsb0JBQW9CO0FBQzdJO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSw4QkFBbUI7QUFDN0I7QUFDQSxvQ0FBb0MsNEJBQTRCO0FBQ2hFLDBDQUEwQztBQUMxQyxXQUFXLDhCQUFtQjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsOEJBQW1CLGtDQUFrQztBQUMvRDtBQUNBO0FBQ0EsVUFBVSw4QkFBbUI7QUFDN0I7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLDhCQUFtQixDQUFDLDhCQUFtQjtBQUN4RCxVQUFVO0FBQ1Y7QUFDQTs7QUFFQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSwrQkFBbUI7O0FB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QUFFUDtBQUNBOztBQUVBLGlCQUFpQixtQkFBTyxDQUFDLDRFQUEwQjs7QUFFbkQsT0FBTzs7QUFFUDtBQUNBOztBQUVBLGlCQUFpQixtQkFBTyxDQUFDLDhFQUEyQjs7QUFFcEQsT0FBTzs7QUFFUDtBQUNBOztBQUVBLGlCQUFpQixtQkFBTyxDQUFDLDBGQUFpQzs7QUFFMUQsT0FBTzs7QUFFUDtBQUNBOztBQUVBLGlCQUFpQixtQkFBTyxDQUFDLCtDQUFLOztBQUU5QixPQUFPOztBQUVQLFVBQVUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdG9vbHRpcC5qcz8xOTAzIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID1cbi8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXBcbi8qKioqKiovIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbi8qKioqKiovIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbi8qKioqKiovIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuLyoqKioqKi8gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4vKioqKioqLyBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuLyoqKioqKi8gXHRcdFx0aTogbW9kdWxlSWQsXG4vKioqKioqLyBcdFx0XHRsOiBmYWxzZSxcbi8qKioqKiovIFx0XHRcdGV4cG9ydHM6IHt9XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4vKioqKioqLyBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbi8qKioqKiovIFx0XHRtb2R1bGUubCA9IHRydWU7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4vKioqKioqLyBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuLyoqKioqKi8gXHR9XG4vKioqKioqL1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4vKioqKioqLyBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4vKioqKioqLyBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4vKioqKioqLyBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbi8qKioqKiovIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuLyoqKioqKi8gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbi8qKioqKiovIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuLyoqKioqKi8gXHRcdHJldHVybiBucztcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuLyoqKioqKi8gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuLyoqKioqKi8gXHRcdHJldHVybiBnZXR0ZXI7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCIvZGlzdC9cIjtcbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8qKioqKiovIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMTM4KTtcbi8qKioqKiovIH0pXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gKHtcblxuLyoqKi8gMTM4OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcImVsZW1lbnQtdWkvbGliL3V0aWxzL3Z1ZS1wb3BwZXJcIlxudmFyIHZ1ZV9wb3BwZXJfID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTtcbnZhciB2dWVfcG9wcGVyX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHZ1ZV9wb3BwZXJfKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcInRocm90dGxlLWRlYm91bmNlL2RlYm91bmNlXCJcbnZhciBkZWJvdW5jZV8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5KTtcbnZhciBkZWJvdW5jZV9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihkZWJvdW5jZV8pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiZWxlbWVudC11aS9saWIvdXRpbHMvZG9tXCJcbnZhciBkb21fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcImVsZW1lbnQtdWkvbGliL3V0aWxzL3V0aWxcIlxudmFyIHV0aWxfID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcInZ1ZVwiXG52YXIgZXh0ZXJuYWxfdnVlXyA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XG52YXIgZXh0ZXJuYWxfdnVlX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGV4dGVybmFsX3Z1ZV8pO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3Rvb2x0aXAvc3JjL21haW4uanNcblxuXG5cblxuXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIG1haW4gPSAoe1xuICBuYW1lOiAnRWxUb29sdGlwJyxcblxuICBtaXhpbnM6IFt2dWVfcG9wcGVyX2RlZmF1bHQuYV0sXG5cbiAgcHJvcHM6IHtcbiAgICBvcGVuRGVsYXk6IHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGRlZmF1bHQ6IDBcbiAgICB9LFxuICAgIGRpc2FibGVkOiBCb29sZWFuLFxuICAgIG1hbnVhbDogQm9vbGVhbixcbiAgICBlZmZlY3Q6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdkYXJrJ1xuICAgIH0sXG4gICAgYXJyb3dPZmZzZXQ6IHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGRlZmF1bHQ6IDBcbiAgICB9LFxuICAgIHBvcHBlckNsYXNzOiBTdHJpbmcsXG4gICAgY29udGVudDogU3RyaW5nLFxuICAgIHZpc2libGVBcnJvdzoge1xuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0sXG4gICAgdHJhbnNpdGlvbjoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2VsLWZhZGUtaW4tbGluZWFyJ1xuICAgIH0sXG4gICAgcG9wcGVyT3B0aW9uczoge1xuICAgICAgZGVmYXVsdDogZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgYm91bmRhcmllc1BhZGRpbmc6IDEwLFxuICAgICAgICAgIGdwdUFjY2VsZXJhdGlvbjogZmFsc2VcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGVudGVyYWJsZToge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9LFxuICAgIGhpZGVBZnRlcjoge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZGVmYXVsdDogMFxuICAgIH0sXG4gICAgdGFiaW5kZXg6IHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGRlZmF1bHQ6IDBcbiAgICB9XG4gIH0sXG5cbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdG9vbHRpcElkOiAnZWwtdG9vbHRpcC0nICsgT2JqZWN0KHV0aWxfW1wiZ2VuZXJhdGVJZFwiXSkoKSxcbiAgICAgIHRpbWVvdXRQZW5kaW5nOiBudWxsLFxuICAgICAgZm9jdXNpbmc6IGZhbHNlXG4gICAgfTtcbiAgfSxcbiAgYmVmb3JlQ3JlYXRlOiBmdW5jdGlvbiBiZWZvcmVDcmVhdGUoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIGlmICh0aGlzLiRpc1NlcnZlcikgcmV0dXJuO1xuXG4gICAgdGhpcy5wb3BwZXJWTSA9IG5ldyBleHRlcm5hbF92dWVfZGVmYXVsdC5hKHtcbiAgICAgIGRhdGE6IHsgbm9kZTogJycgfSxcbiAgICAgIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKGgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubm9kZTtcbiAgICAgIH1cbiAgICB9KS4kbW91bnQoKTtcblxuICAgIHRoaXMuZGVib3VuY2VDbG9zZSA9IGRlYm91bmNlX2RlZmF1bHQoKSgyMDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpcy5oYW5kbGVDbG9zZVBvcHBlcigpO1xuICAgIH0pO1xuICB9LFxuICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcihoKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICBpZiAodGhpcy5wb3BwZXJWTSkge1xuICAgICAgdGhpcy5wb3BwZXJWTS5ub2RlID0gaChcbiAgICAgICAgJ3RyYW5zaXRpb24nLFxuICAgICAgICB7XG4gICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgIG5hbWU6IHRoaXMudHJhbnNpdGlvblxuICAgICAgICAgIH0sXG4gICAgICAgICAgb246IHtcbiAgICAgICAgICAgICdhZnRlckxlYXZlJzogdGhpcy5kb0Rlc3Ryb3lcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFtoKFxuICAgICAgICAgICdkaXYnLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICdtb3VzZWxlYXZlJzogZnVuY3Rpb24gbW91c2VsZWF2ZSgpIHtcbiAgICAgICAgICAgICAgICBfdGhpczIuc2V0RXhwZWN0ZWRTdGF0ZShmYWxzZSk7X3RoaXMyLmRlYm91bmNlQ2xvc2UoKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgJ21vdXNlZW50ZXInOiBmdW5jdGlvbiBtb3VzZWVudGVyKCkge1xuICAgICAgICAgICAgICAgIF90aGlzMi5zZXRFeHBlY3RlZFN0YXRlKHRydWUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICByZWY6ICdwb3BwZXInLFxuICAgICAgICAgICAgYXR0cnM6IHsgcm9sZTogJ3Rvb2x0aXAnLFxuICAgICAgICAgICAgICBpZDogdGhpcy50b29sdGlwSWQsXG4gICAgICAgICAgICAgICdhcmlhLWhpZGRlbic6IHRoaXMuZGlzYWJsZWQgfHwgIXRoaXMuc2hvd1BvcHBlciA/ICd0cnVlJyA6ICdmYWxzZSdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkaXJlY3RpdmVzOiBbe1xuICAgICAgICAgICAgICBuYW1lOiAnc2hvdycsXG4gICAgICAgICAgICAgIHZhbHVlOiAhdGhpcy5kaXNhYmxlZCAmJiB0aGlzLnNob3dQb3BwZXJcbiAgICAgICAgICAgIH1dLFxuXG4gICAgICAgICAgICAnY2xhc3MnOiBbJ2VsLXRvb2x0aXBfX3BvcHBlcicsICdpcy0nICsgdGhpcy5lZmZlY3QsIHRoaXMucG9wcGVyQ2xhc3NdIH0sXG4gICAgICAgICAgW3RoaXMuJHNsb3RzLmNvbnRlbnQgfHwgdGhpcy5jb250ZW50XVxuICAgICAgICApXVxuICAgICAgKTtcbiAgICB9XG5cbiAgICB2YXIgZmlyc3RFbGVtZW50ID0gdGhpcy5nZXRGaXJzdEVsZW1lbnQoKTtcbiAgICBpZiAoIWZpcnN0RWxlbWVudCkgcmV0dXJuIG51bGw7XG5cbiAgICB2YXIgZGF0YSA9IGZpcnN0RWxlbWVudC5kYXRhID0gZmlyc3RFbGVtZW50LmRhdGEgfHwge307XG4gICAgZGF0YS5zdGF0aWNDbGFzcyA9IHRoaXMuYWRkVG9vbHRpcENsYXNzKGRhdGEuc3RhdGljQ2xhc3MpO1xuXG4gICAgcmV0dXJuIGZpcnN0RWxlbWVudDtcbiAgfSxcbiAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCgpIHtcbiAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgIHRoaXMucmVmZXJlbmNlRWxtID0gdGhpcy4kZWw7XG4gICAgaWYgKHRoaXMuJGVsLm5vZGVUeXBlID09PSAxKSB7XG4gICAgICB0aGlzLiRlbC5zZXRBdHRyaWJ1dGUoJ2FyaWEtZGVzY3JpYmVkYnknLCB0aGlzLnRvb2x0aXBJZCk7XG4gICAgICB0aGlzLiRlbC5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgdGhpcy50YWJpbmRleCk7XG4gICAgICBPYmplY3QoZG9tX1tcIm9uXCJdKSh0aGlzLnJlZmVyZW5jZUVsbSwgJ21vdXNlZW50ZXInLCB0aGlzLnNob3cpO1xuICAgICAgT2JqZWN0KGRvbV9bXCJvblwiXSkodGhpcy5yZWZlcmVuY2VFbG0sICdtb3VzZWxlYXZlJywgdGhpcy5oaWRlKTtcbiAgICAgIE9iamVjdChkb21fW1wib25cIl0pKHRoaXMucmVmZXJlbmNlRWxtLCAnZm9jdXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghX3RoaXMzLiRzbG90cy5kZWZhdWx0IHx8ICFfdGhpczMuJHNsb3RzLmRlZmF1bHQubGVuZ3RoKSB7XG4gICAgICAgICAgX3RoaXMzLmhhbmRsZUZvY3VzKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IF90aGlzMy4kc2xvdHMuZGVmYXVsdFswXS5jb21wb25lbnRJbnN0YW5jZTtcbiAgICAgICAgaWYgKGluc3RhbmNlICYmIGluc3RhbmNlLmZvY3VzKSB7XG4gICAgICAgICAgaW5zdGFuY2UuZm9jdXMoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBfdGhpczMuaGFuZGxlRm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBPYmplY3QoZG9tX1tcIm9uXCJdKSh0aGlzLnJlZmVyZW5jZUVsbSwgJ2JsdXInLCB0aGlzLmhhbmRsZUJsdXIpO1xuICAgICAgT2JqZWN0KGRvbV9bXCJvblwiXSkodGhpcy5yZWZlcmVuY2VFbG0sICdjbGljaycsIHRoaXMucmVtb3ZlRm9jdXNpbmcpO1xuICAgIH1cbiAgICAvLyBmaXggaXNzdWUgaHR0cHM6Ly9naXRodWIuY29tL0VsZW1lRkUvZWxlbWVudC9pc3N1ZXMvMTQ0MjRcbiAgICBpZiAodGhpcy52YWx1ZSAmJiB0aGlzLnBvcHBlclZNKSB7XG4gICAgICB0aGlzLnBvcHBlclZNLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChfdGhpczMudmFsdWUpIHtcbiAgICAgICAgICBfdGhpczMudXBkYXRlUG9wcGVyKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIGZvY3VzaW5nOiBmdW5jdGlvbiBmb2N1c2luZyh2YWwpIHtcbiAgICAgIGlmICh2YWwpIHtcbiAgICAgICAgT2JqZWN0KGRvbV9bXCJhZGRDbGFzc1wiXSkodGhpcy5yZWZlcmVuY2VFbG0sICdmb2N1c2luZycpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgT2JqZWN0KGRvbV9bXCJyZW1vdmVDbGFzc1wiXSkodGhpcy5yZWZlcmVuY2VFbG0sICdmb2N1c2luZycpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgbWV0aG9kczoge1xuICAgIHNob3c6IGZ1bmN0aW9uIHNob3coKSB7XG4gICAgICB0aGlzLnNldEV4cGVjdGVkU3RhdGUodHJ1ZSk7XG4gICAgICB0aGlzLmhhbmRsZVNob3dQb3BwZXIoKTtcbiAgICB9LFxuICAgIGhpZGU6IGZ1bmN0aW9uIGhpZGUoKSB7XG4gICAgICB0aGlzLnNldEV4cGVjdGVkU3RhdGUoZmFsc2UpO1xuICAgICAgdGhpcy5kZWJvdW5jZUNsb3NlKCk7XG4gICAgfSxcbiAgICBoYW5kbGVGb2N1czogZnVuY3Rpb24gaGFuZGxlRm9jdXMoKSB7XG4gICAgICB0aGlzLmZvY3VzaW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMuc2hvdygpO1xuICAgIH0sXG4gICAgaGFuZGxlQmx1cjogZnVuY3Rpb24gaGFuZGxlQmx1cigpIHtcbiAgICAgIHRoaXMuZm9jdXNpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuaGlkZSgpO1xuICAgIH0sXG4gICAgcmVtb3ZlRm9jdXNpbmc6IGZ1bmN0aW9uIHJlbW92ZUZvY3VzaW5nKCkge1xuICAgICAgdGhpcy5mb2N1c2luZyA9IGZhbHNlO1xuICAgIH0sXG4gICAgYWRkVG9vbHRpcENsYXNzOiBmdW5jdGlvbiBhZGRUb29sdGlwQ2xhc3MocHJldikge1xuICAgICAgaWYgKCFwcmV2KSB7XG4gICAgICAgIHJldHVybiAnZWwtdG9vbHRpcCc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gJ2VsLXRvb2x0aXAgJyArIHByZXYucmVwbGFjZSgnZWwtdG9vbHRpcCcsICcnKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGhhbmRsZVNob3dQb3BwZXI6IGZ1bmN0aW9uIGhhbmRsZVNob3dQb3BwZXIoKSB7XG4gICAgICB2YXIgX3RoaXM0ID0gdGhpcztcblxuICAgICAgaWYgKCF0aGlzLmV4cGVjdGVkU3RhdGUgfHwgdGhpcy5tYW51YWwpIHJldHVybjtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpO1xuICAgICAgdGhpcy50aW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzNC5zaG93UG9wcGVyID0gdHJ1ZTtcbiAgICAgIH0sIHRoaXMub3BlbkRlbGF5KTtcblxuICAgICAgaWYgKHRoaXMuaGlkZUFmdGVyID4gMCkge1xuICAgICAgICB0aGlzLnRpbWVvdXRQZW5kaW5nID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgX3RoaXM0LnNob3dQb3BwZXIgPSBmYWxzZTtcbiAgICAgICAgfSwgdGhpcy5oaWRlQWZ0ZXIpO1xuICAgICAgfVxuICAgIH0sXG4gICAgaGFuZGxlQ2xvc2VQb3BwZXI6IGZ1bmN0aW9uIGhhbmRsZUNsb3NlUG9wcGVyKCkge1xuICAgICAgaWYgKHRoaXMuZW50ZXJhYmxlICYmIHRoaXMuZXhwZWN0ZWRTdGF0ZSB8fCB0aGlzLm1hbnVhbCkgcmV0dXJuO1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7XG5cbiAgICAgIGlmICh0aGlzLnRpbWVvdXRQZW5kaW5nKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXRQZW5kaW5nKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2hvd1BvcHBlciA9IGZhbHNlO1xuXG4gICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICB0aGlzLmRvRGVzdHJveSgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgc2V0RXhwZWN0ZWRTdGF0ZTogZnVuY3Rpb24gc2V0RXhwZWN0ZWRTdGF0ZShleHBlY3RlZFN0YXRlKSB7XG4gICAgICBpZiAoZXhwZWN0ZWRTdGF0ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dFBlbmRpbmcpO1xuICAgICAgfVxuICAgICAgdGhpcy5leHBlY3RlZFN0YXRlID0gZXhwZWN0ZWRTdGF0ZTtcbiAgICB9LFxuICAgIGdldEZpcnN0RWxlbWVudDogZnVuY3Rpb24gZ2V0Rmlyc3RFbGVtZW50KCkge1xuICAgICAgdmFyIHNsb3RzID0gdGhpcy4kc2xvdHMuZGVmYXVsdDtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShzbG90cykpIHJldHVybiBudWxsO1xuICAgICAgdmFyIGVsZW1lbnQgPSBudWxsO1xuICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHNsb3RzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICBpZiAoc2xvdHNbaW5kZXhdICYmIHNsb3RzW2luZGV4XS50YWcpIHtcbiAgICAgICAgICBlbGVtZW50ID0gc2xvdHNbaW5kZXhdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxuICB9LFxuXG4gIGJlZm9yZURlc3Ryb3k6IGZ1bmN0aW9uIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgdGhpcy5wb3BwZXJWTSAmJiB0aGlzLnBvcHBlclZNLiRkZXN0cm95KCk7XG4gIH0sXG4gIGRlc3Ryb3llZDogZnVuY3Rpb24gZGVzdHJveWVkKCkge1xuICAgIHZhciByZWZlcmVuY2UgPSB0aGlzLnJlZmVyZW5jZUVsbTtcbiAgICBpZiAocmVmZXJlbmNlLm5vZGVUeXBlID09PSAxKSB7XG4gICAgICBPYmplY3QoZG9tX1tcIm9mZlwiXSkocmVmZXJlbmNlLCAnbW91c2VlbnRlcicsIHRoaXMuc2hvdyk7XG4gICAgICBPYmplY3QoZG9tX1tcIm9mZlwiXSkocmVmZXJlbmNlLCAnbW91c2VsZWF2ZScsIHRoaXMuaGlkZSk7XG4gICAgICBPYmplY3QoZG9tX1tcIm9mZlwiXSkocmVmZXJlbmNlLCAnZm9jdXMnLCB0aGlzLmhhbmRsZUZvY3VzKTtcbiAgICAgIE9iamVjdChkb21fW1wib2ZmXCJdKShyZWZlcmVuY2UsICdibHVyJywgdGhpcy5oYW5kbGVCbHVyKTtcbiAgICAgIE9iamVjdChkb21fW1wib2ZmXCJdKShyZWZlcmVuY2UsICdjbGljaycsIHRoaXMucmVtb3ZlRm9jdXNpbmcpO1xuICAgIH1cbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3Rvb2x0aXAvaW5kZXguanNcblxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xubWFpbi5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuICBWdWUuY29tcG9uZW50KG1haW4ubmFtZSwgbWFpbik7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciB0b29sdGlwID0gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAobWFpbik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAxOTpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwidGhyb3R0bGUtZGVib3VuY2UvZGVib3VuY2VcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAyOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi91dGlscy9kb21cIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAzOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi91dGlscy91dGlsXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gNTpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlbWVudC11aS9saWIvdXRpbHMvdnVlLXBvcHBlclwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDc6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInZ1ZVwiKTtcblxuLyoqKi8gfSlcblxuLyoqKioqKi8gfSk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/tooltip.js\n");

/***/ }),

/***/ "./node_modules/element-ui/lib/transitions/collapse-transition.js":
/*!************************************************************************!*\
  !*** ./node_modules/element-ui/lib/transitions/collapse-transition.js ***!
  \************************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";
eval("\n\nexports.__esModule = true;\n\nvar _dom = __webpack_require__(/*! element-ui/lib/utils/dom */ \"./node_modules/element-ui/lib/utils/dom.js\");\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Transition = function () {\n  function Transition() {\n    _classCallCheck(this, Transition);\n  }\n\n  Transition.prototype.beforeEnter = function beforeEnter(el) {\n    (0, _dom.addClass)(el, 'collapse-transition');\n    if (!el.dataset) el.dataset = {};\n\n    el.dataset.oldPaddingTop = el.style.paddingTop;\n    el.dataset.oldPaddingBottom = el.style.paddingBottom;\n\n    el.style.height = '0';\n    el.style.paddingTop = 0;\n    el.style.paddingBottom = 0;\n  };\n\n  Transition.prototype.enter = function enter(el) {\n    el.dataset.oldOverflow = el.style.overflow;\n    if (el.scrollHeight !== 0) {\n      el.style.height = el.scrollHeight + 'px';\n      el.style.paddingTop = el.dataset.oldPaddingTop;\n      el.style.paddingBottom = el.dataset.oldPaddingBottom;\n    } else {\n      el.style.height = '';\n      el.style.paddingTop = el.dataset.oldPaddingTop;\n      el.style.paddingBottom = el.dataset.oldPaddingBottom;\n    }\n\n    el.style.overflow = 'hidden';\n  };\n\n  Transition.prototype.afterEnter = function afterEnter(el) {\n    // for safari: remove class then reset height is necessary\n    (0, _dom.removeClass)(el, 'collapse-transition');\n    el.style.height = '';\n    el.style.overflow = el.dataset.oldOverflow;\n  };\n\n  Transition.prototype.beforeLeave = function beforeLeave(el) {\n    if (!el.dataset) el.dataset = {};\n    el.dataset.oldPaddingTop = el.style.paddingTop;\n    el.dataset.oldPaddingBottom = el.style.paddingBottom;\n    el.dataset.oldOverflow = el.style.overflow;\n\n    el.style.height = el.scrollHeight + 'px';\n    el.style.overflow = 'hidden';\n  };\n\n  Transition.prototype.leave = function leave(el) {\n    if (el.scrollHeight !== 0) {\n      // for safari: add class after set height, or it will jump to zero height suddenly, weired\n      (0, _dom.addClass)(el, 'collapse-transition');\n      el.style.height = 0;\n      el.style.paddingTop = 0;\n      el.style.paddingBottom = 0;\n    }\n  };\n\n  Transition.prototype.afterLeave = function afterLeave(el) {\n    (0, _dom.removeClass)(el, 'collapse-transition');\n    el.style.height = '';\n    el.style.overflow = el.dataset.oldOverflow;\n    el.style.paddingTop = el.dataset.oldPaddingTop;\n    el.style.paddingBottom = el.dataset.oldPaddingBottom;\n  };\n\n  return Transition;\n}();\n\nexports[\"default\"] = {\n  name: 'ElCollapseTransition',\n  functional: true,\n  render: function render(h, _ref) {\n    var children = _ref.children;\n\n    var data = {\n      on: new Transition()\n    };\n\n    return h('transition', data, children);\n  }\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdHJhbnNpdGlvbnMvY29sbGFwc2UtdHJhbnNpdGlvbi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0I7O0FBRWxCLFdBQVcsbUJBQU8sQ0FBQyw0RUFBMEI7O0FBRTdDLGtEQUFrRCwwQ0FBMEM7O0FBRTVGO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVELGtCQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9lbGVtZW50LXVpL2xpYi90cmFuc2l0aW9ucy9jb2xsYXBzZS10cmFuc2l0aW9uLmpzPzg4MWYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG52YXIgX2RvbSA9IHJlcXVpcmUoJ2VsZW1lbnQtdWkvbGliL3V0aWxzL2RvbScpO1xuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG52YXIgVHJhbnNpdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gVHJhbnNpdGlvbigpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgVHJhbnNpdGlvbik7XG4gIH1cblxuICBUcmFuc2l0aW9uLnByb3RvdHlwZS5iZWZvcmVFbnRlciA9IGZ1bmN0aW9uIGJlZm9yZUVudGVyKGVsKSB7XG4gICAgKDAsIF9kb20uYWRkQ2xhc3MpKGVsLCAnY29sbGFwc2UtdHJhbnNpdGlvbicpO1xuICAgIGlmICghZWwuZGF0YXNldCkgZWwuZGF0YXNldCA9IHt9O1xuXG4gICAgZWwuZGF0YXNldC5vbGRQYWRkaW5nVG9wID0gZWwuc3R5bGUucGFkZGluZ1RvcDtcbiAgICBlbC5kYXRhc2V0Lm9sZFBhZGRpbmdCb3R0b20gPSBlbC5zdHlsZS5wYWRkaW5nQm90dG9tO1xuXG4gICAgZWwuc3R5bGUuaGVpZ2h0ID0gJzAnO1xuICAgIGVsLnN0eWxlLnBhZGRpbmdUb3AgPSAwO1xuICAgIGVsLnN0eWxlLnBhZGRpbmdCb3R0b20gPSAwO1xuICB9O1xuXG4gIFRyYW5zaXRpb24ucHJvdG90eXBlLmVudGVyID0gZnVuY3Rpb24gZW50ZXIoZWwpIHtcbiAgICBlbC5kYXRhc2V0Lm9sZE92ZXJmbG93ID0gZWwuc3R5bGUub3ZlcmZsb3c7XG4gICAgaWYgKGVsLnNjcm9sbEhlaWdodCAhPT0gMCkge1xuICAgICAgZWwuc3R5bGUuaGVpZ2h0ID0gZWwuc2Nyb2xsSGVpZ2h0ICsgJ3B4JztcbiAgICAgIGVsLnN0eWxlLnBhZGRpbmdUb3AgPSBlbC5kYXRhc2V0Lm9sZFBhZGRpbmdUb3A7XG4gICAgICBlbC5zdHlsZS5wYWRkaW5nQm90dG9tID0gZWwuZGF0YXNldC5vbGRQYWRkaW5nQm90dG9tO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbC5zdHlsZS5oZWlnaHQgPSAnJztcbiAgICAgIGVsLnN0eWxlLnBhZGRpbmdUb3AgPSBlbC5kYXRhc2V0Lm9sZFBhZGRpbmdUb3A7XG4gICAgICBlbC5zdHlsZS5wYWRkaW5nQm90dG9tID0gZWwuZGF0YXNldC5vbGRQYWRkaW5nQm90dG9tO1xuICAgIH1cblxuICAgIGVsLnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7XG4gIH07XG5cbiAgVHJhbnNpdGlvbi5wcm90b3R5cGUuYWZ0ZXJFbnRlciA9IGZ1bmN0aW9uIGFmdGVyRW50ZXIoZWwpIHtcbiAgICAvLyBmb3Igc2FmYXJpOiByZW1vdmUgY2xhc3MgdGhlbiByZXNldCBoZWlnaHQgaXMgbmVjZXNzYXJ5XG4gICAgKDAsIF9kb20ucmVtb3ZlQ2xhc3MpKGVsLCAnY29sbGFwc2UtdHJhbnNpdGlvbicpO1xuICAgIGVsLnN0eWxlLmhlaWdodCA9ICcnO1xuICAgIGVsLnN0eWxlLm92ZXJmbG93ID0gZWwuZGF0YXNldC5vbGRPdmVyZmxvdztcbiAgfTtcblxuICBUcmFuc2l0aW9uLnByb3RvdHlwZS5iZWZvcmVMZWF2ZSA9IGZ1bmN0aW9uIGJlZm9yZUxlYXZlKGVsKSB7XG4gICAgaWYgKCFlbC5kYXRhc2V0KSBlbC5kYXRhc2V0ID0ge307XG4gICAgZWwuZGF0YXNldC5vbGRQYWRkaW5nVG9wID0gZWwuc3R5bGUucGFkZGluZ1RvcDtcbiAgICBlbC5kYXRhc2V0Lm9sZFBhZGRpbmdCb3R0b20gPSBlbC5zdHlsZS5wYWRkaW5nQm90dG9tO1xuICAgIGVsLmRhdGFzZXQub2xkT3ZlcmZsb3cgPSBlbC5zdHlsZS5vdmVyZmxvdztcblxuICAgIGVsLnN0eWxlLmhlaWdodCA9IGVsLnNjcm9sbEhlaWdodCArICdweCc7XG4gICAgZWwuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJztcbiAgfTtcblxuICBUcmFuc2l0aW9uLnByb3RvdHlwZS5sZWF2ZSA9IGZ1bmN0aW9uIGxlYXZlKGVsKSB7XG4gICAgaWYgKGVsLnNjcm9sbEhlaWdodCAhPT0gMCkge1xuICAgICAgLy8gZm9yIHNhZmFyaTogYWRkIGNsYXNzIGFmdGVyIHNldCBoZWlnaHQsIG9yIGl0IHdpbGwganVtcCB0byB6ZXJvIGhlaWdodCBzdWRkZW5seSwgd2VpcmVkXG4gICAgICAoMCwgX2RvbS5hZGRDbGFzcykoZWwsICdjb2xsYXBzZS10cmFuc2l0aW9uJyk7XG4gICAgICBlbC5zdHlsZS5oZWlnaHQgPSAwO1xuICAgICAgZWwuc3R5bGUucGFkZGluZ1RvcCA9IDA7XG4gICAgICBlbC5zdHlsZS5wYWRkaW5nQm90dG9tID0gMDtcbiAgICB9XG4gIH07XG5cbiAgVHJhbnNpdGlvbi5wcm90b3R5cGUuYWZ0ZXJMZWF2ZSA9IGZ1bmN0aW9uIGFmdGVyTGVhdmUoZWwpIHtcbiAgICAoMCwgX2RvbS5yZW1vdmVDbGFzcykoZWwsICdjb2xsYXBzZS10cmFuc2l0aW9uJyk7XG4gICAgZWwuc3R5bGUuaGVpZ2h0ID0gJyc7XG4gICAgZWwuc3R5bGUub3ZlcmZsb3cgPSBlbC5kYXRhc2V0Lm9sZE92ZXJmbG93O1xuICAgIGVsLnN0eWxlLnBhZGRpbmdUb3AgPSBlbC5kYXRhc2V0Lm9sZFBhZGRpbmdUb3A7XG4gICAgZWwuc3R5bGUucGFkZGluZ0JvdHRvbSA9IGVsLmRhdGFzZXQub2xkUGFkZGluZ0JvdHRvbTtcbiAgfTtcblxuICByZXR1cm4gVHJhbnNpdGlvbjtcbn0oKTtcblxuZXhwb3J0cy5kZWZhdWx0ID0ge1xuICBuYW1lOiAnRWxDb2xsYXBzZVRyYW5zaXRpb24nLFxuICBmdW5jdGlvbmFsOiB0cnVlLFxuICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcihoLCBfcmVmKSB7XG4gICAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbjtcblxuICAgIHZhciBkYXRhID0ge1xuICAgICAgb246IG5ldyBUcmFuc2l0aW9uKClcbiAgICB9O1xuXG4gICAgcmV0dXJuIGgoJ3RyYW5zaXRpb24nLCBkYXRhLCBjaGlsZHJlbik7XG4gIH1cbn07Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/transitions/collapse-transition.js\n");

/***/ }),

/***/ "./node_modules/element-ui/lib/utils/after-leave.js":
/*!**********************************************************!*\
  !*** ./node_modules/element-ui/lib/utils/after-leave.js ***!
  \**********************************************************/
/***/ ((__unused_webpack_module, exports) => {

"use strict";
eval("\n\nexports.__esModule = true;\n\nexports[\"default\"] = function (instance, callback) {\n  var speed = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 300;\n  var once = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n  if (!instance || !callback) throw new Error('instance & callback is required');\n  var called = false;\n  var afterLeaveCallback = function afterLeaveCallback() {\n    if (called) return;\n    called = true;\n    if (callback) {\n      callback.apply(null, arguments);\n    }\n  };\n  if (once) {\n    instance.$once('after-leave', afterLeaveCallback);\n  } else {\n    instance.$on('after-leave', afterLeaveCallback);\n  }\n  setTimeout(function () {\n    afterLeaveCallback();\n  }, speed + 100);\n};\n\n; /**\n   * Bind after-leave event for vue instance. Make sure after-leave is called in any browsers.\n   *\n   * @param {Vue} instance Vue instance.\n   * @param {Function} callback callback of after-leave event\n   * @param {Number} speed the speed of transition, default value is 300ms\n   * @param {Boolean} once weather bind after-leave once. default value is false.\n   *///# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdXRpbHMvYWZ0ZXItbGVhdmUuanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsa0JBQWtCOztBQUVsQixrQkFBZTtBQUNmO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBLGFBQWEsS0FBSztBQUNsQixhQUFhLFVBQVU7QUFDdkIsYUFBYSxRQUFRO0FBQ3JCLGFBQWEsU0FBUztBQUN0QiIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9lbGVtZW50LXVpL2xpYi91dGlscy9hZnRlci1sZWF2ZS5qcz81NGExIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gZnVuY3Rpb24gKGluc3RhbmNlLCBjYWxsYmFjaykge1xuICB2YXIgc3BlZWQgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IDMwMDtcbiAgdmFyIG9uY2UgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6IGZhbHNlO1xuXG4gIGlmICghaW5zdGFuY2UgfHwgIWNhbGxiYWNrKSB0aHJvdyBuZXcgRXJyb3IoJ2luc3RhbmNlICYgY2FsbGJhY2sgaXMgcmVxdWlyZWQnKTtcbiAgdmFyIGNhbGxlZCA9IGZhbHNlO1xuICB2YXIgYWZ0ZXJMZWF2ZUNhbGxiYWNrID0gZnVuY3Rpb24gYWZ0ZXJMZWF2ZUNhbGxiYWNrKCkge1xuICAgIGlmIChjYWxsZWQpIHJldHVybjtcbiAgICBjYWxsZWQgPSB0cnVlO1xuICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICB9XG4gIH07XG4gIGlmIChvbmNlKSB7XG4gICAgaW5zdGFuY2UuJG9uY2UoJ2FmdGVyLWxlYXZlJywgYWZ0ZXJMZWF2ZUNhbGxiYWNrKTtcbiAgfSBlbHNlIHtcbiAgICBpbnN0YW5jZS4kb24oJ2FmdGVyLWxlYXZlJywgYWZ0ZXJMZWF2ZUNhbGxiYWNrKTtcbiAgfVxuICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICBhZnRlckxlYXZlQ2FsbGJhY2soKTtcbiAgfSwgc3BlZWQgKyAxMDApO1xufTtcblxuOyAvKipcbiAgICogQmluZCBhZnRlci1sZWF2ZSBldmVudCBmb3IgdnVlIGluc3RhbmNlLiBNYWtlIHN1cmUgYWZ0ZXItbGVhdmUgaXMgY2FsbGVkIGluIGFueSBicm93c2Vycy5cbiAgICpcbiAgICogQHBhcmFtIHtWdWV9IGluc3RhbmNlIFZ1ZSBpbnN0YW5jZS5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgY2FsbGJhY2sgb2YgYWZ0ZXItbGVhdmUgZXZlbnRcbiAgICogQHBhcmFtIHtOdW1iZXJ9IHNwZWVkIHRoZSBzcGVlZCBvZiB0cmFuc2l0aW9uLCBkZWZhdWx0IHZhbHVlIGlzIDMwMG1zXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gb25jZSB3ZWF0aGVyIGJpbmQgYWZ0ZXItbGVhdmUgb25jZS4gZGVmYXVsdCB2YWx1ZSBpcyBmYWxzZS5cbiAgICovIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/utils/after-leave.js\n");

/***/ }),

/***/ "./node_modules/element-ui/lib/utils/aria-dialog.js":
/*!**********************************************************!*\
  !*** ./node_modules/element-ui/lib/utils/aria-dialog.js ***!
  \**********************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";
eval("\n\nexports.__esModule = true;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _ariaUtils = __webpack_require__(/*! ./aria-utils */ \"./node_modules/element-ui/lib/utils/aria-utils.js\");\n\nvar _ariaUtils2 = _interopRequireDefault(_ariaUtils);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * @constructor\n * @desc Dialog object providing modal focus management.\n *\n * Assumptions: The element serving as the dialog container is present in the\n * DOM and hidden. The dialog container has role='dialog'.\n *\n * @param dialogId\n *          The ID of the element serving as the dialog container.\n * @param focusAfterClosed\n *          Either the DOM node or the ID of the DOM node to focus when the\n *          dialog closes.\n * @param focusFirst\n *          Optional parameter containing either the DOM node or the ID of the\n *          DOM node to focus when the dialog opens. If not specified, the\n *          first focusable element in the dialog will receive focus.\n */\nvar aria = aria || {};\nvar tabEvent;\n\naria.Dialog = function (dialog, focusAfterClosed, focusFirst) {\n  var _this = this;\n\n  this.dialogNode = dialog;\n  if (this.dialogNode === null || this.dialogNode.getAttribute('role') !== 'dialog') {\n    throw new Error('Dialog() requires a DOM element with ARIA role of dialog.');\n  }\n\n  if (typeof focusAfterClosed === 'string') {\n    this.focusAfterClosed = document.getElementById(focusAfterClosed);\n  } else if ((typeof focusAfterClosed === 'undefined' ? 'undefined' : _typeof(focusAfterClosed)) === 'object') {\n    this.focusAfterClosed = focusAfterClosed;\n  } else {\n    this.focusAfterClosed = null;\n  }\n\n  if (typeof focusFirst === 'string') {\n    this.focusFirst = document.getElementById(focusFirst);\n  } else if ((typeof focusFirst === 'undefined' ? 'undefined' : _typeof(focusFirst)) === 'object') {\n    this.focusFirst = focusFirst;\n  } else {\n    this.focusFirst = null;\n  }\n\n  if (this.focusFirst) {\n    this.focusFirst.focus();\n  } else {\n    _ariaUtils2.default.focusFirstDescendant(this.dialogNode);\n  }\n\n  this.lastFocus = document.activeElement;\n  tabEvent = function tabEvent(e) {\n    _this.trapFocus(e);\n  };\n  this.addListeners();\n};\n\naria.Dialog.prototype.addListeners = function () {\n  document.addEventListener('focus', tabEvent, true);\n};\n\naria.Dialog.prototype.removeListeners = function () {\n  document.removeEventListener('focus', tabEvent, true);\n};\n\naria.Dialog.prototype.closeDialog = function () {\n  var _this2 = this;\n\n  this.removeListeners();\n  if (this.focusAfterClosed) {\n    setTimeout(function () {\n      _this2.focusAfterClosed.focus();\n    });\n  }\n};\n\naria.Dialog.prototype.trapFocus = function (event) {\n  if (_ariaUtils2.default.IgnoreUtilFocusChanges) {\n    return;\n  }\n  if (this.dialogNode.contains(event.target)) {\n    this.lastFocus = event.target;\n  } else {\n    _ariaUtils2.default.focusFirstDescendant(this.dialogNode);\n    if (this.lastFocus === document.activeElement) {\n      _ariaUtils2.default.focusLastDescendant(this.dialogNode);\n    }\n    this.lastFocus = document.activeElement;\n  }\n};\n\nexports[\"default\"] = aria.Dialog;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdXRpbHMvYXJpYS1kaWFsb2cuanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsa0JBQWtCOztBQUVsQixxR0FBcUcscUJBQXFCLG1CQUFtQjs7QUFFN0ksaUJBQWlCLG1CQUFPLENBQUMsdUVBQWM7O0FBRXZDOztBQUVBLHVDQUF1Qyx1Q0FBdUM7O0FBRTlFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBZSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9lbGVtZW50LXVpL2xpYi91dGlscy9hcmlhLWRpYWxvZy5qcz9mNmM5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxudmFyIF90eXBlb2YgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIiA/IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH0gOiBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9O1xuXG52YXIgX2FyaWFVdGlscyA9IHJlcXVpcmUoJy4vYXJpYS11dGlscycpO1xuXG52YXIgX2FyaWFVdGlsczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9hcmlhVXRpbHMpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG4vKipcbiAqIEBjb25zdHJ1Y3RvclxuICogQGRlc2MgRGlhbG9nIG9iamVjdCBwcm92aWRpbmcgbW9kYWwgZm9jdXMgbWFuYWdlbWVudC5cbiAqXG4gKiBBc3N1bXB0aW9uczogVGhlIGVsZW1lbnQgc2VydmluZyBhcyB0aGUgZGlhbG9nIGNvbnRhaW5lciBpcyBwcmVzZW50IGluIHRoZVxuICogRE9NIGFuZCBoaWRkZW4uIFRoZSBkaWFsb2cgY29udGFpbmVyIGhhcyByb2xlPSdkaWFsb2cnLlxuICpcbiAqIEBwYXJhbSBkaWFsb2dJZFxuICogICAgICAgICAgVGhlIElEIG9mIHRoZSBlbGVtZW50IHNlcnZpbmcgYXMgdGhlIGRpYWxvZyBjb250YWluZXIuXG4gKiBAcGFyYW0gZm9jdXNBZnRlckNsb3NlZFxuICogICAgICAgICAgRWl0aGVyIHRoZSBET00gbm9kZSBvciB0aGUgSUQgb2YgdGhlIERPTSBub2RlIHRvIGZvY3VzIHdoZW4gdGhlXG4gKiAgICAgICAgICBkaWFsb2cgY2xvc2VzLlxuICogQHBhcmFtIGZvY3VzRmlyc3RcbiAqICAgICAgICAgIE9wdGlvbmFsIHBhcmFtZXRlciBjb250YWluaW5nIGVpdGhlciB0aGUgRE9NIG5vZGUgb3IgdGhlIElEIG9mIHRoZVxuICogICAgICAgICAgRE9NIG5vZGUgdG8gZm9jdXMgd2hlbiB0aGUgZGlhbG9nIG9wZW5zLiBJZiBub3Qgc3BlY2lmaWVkLCB0aGVcbiAqICAgICAgICAgIGZpcnN0IGZvY3VzYWJsZSBlbGVtZW50IGluIHRoZSBkaWFsb2cgd2lsbCByZWNlaXZlIGZvY3VzLlxuICovXG52YXIgYXJpYSA9IGFyaWEgfHwge307XG52YXIgdGFiRXZlbnQ7XG5cbmFyaWEuRGlhbG9nID0gZnVuY3Rpb24gKGRpYWxvZywgZm9jdXNBZnRlckNsb3NlZCwgZm9jdXNGaXJzdCkge1xuICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gIHRoaXMuZGlhbG9nTm9kZSA9IGRpYWxvZztcbiAgaWYgKHRoaXMuZGlhbG9nTm9kZSA9PT0gbnVsbCB8fCB0aGlzLmRpYWxvZ05vZGUuZ2V0QXR0cmlidXRlKCdyb2xlJykgIT09ICdkaWFsb2cnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdEaWFsb2coKSByZXF1aXJlcyBhIERPTSBlbGVtZW50IHdpdGggQVJJQSByb2xlIG9mIGRpYWxvZy4nKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgZm9jdXNBZnRlckNsb3NlZCA9PT0gJ3N0cmluZycpIHtcbiAgICB0aGlzLmZvY3VzQWZ0ZXJDbG9zZWQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChmb2N1c0FmdGVyQ2xvc2VkKTtcbiAgfSBlbHNlIGlmICgodHlwZW9mIGZvY3VzQWZ0ZXJDbG9zZWQgPT09ICd1bmRlZmluZWQnID8gJ3VuZGVmaW5lZCcgOiBfdHlwZW9mKGZvY3VzQWZ0ZXJDbG9zZWQpKSA9PT0gJ29iamVjdCcpIHtcbiAgICB0aGlzLmZvY3VzQWZ0ZXJDbG9zZWQgPSBmb2N1c0FmdGVyQ2xvc2VkO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuZm9jdXNBZnRlckNsb3NlZCA9IG51bGw7XG4gIH1cblxuICBpZiAodHlwZW9mIGZvY3VzRmlyc3QgPT09ICdzdHJpbmcnKSB7XG4gICAgdGhpcy5mb2N1c0ZpcnN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZm9jdXNGaXJzdCk7XG4gIH0gZWxzZSBpZiAoKHR5cGVvZiBmb2N1c0ZpcnN0ID09PSAndW5kZWZpbmVkJyA/ICd1bmRlZmluZWQnIDogX3R5cGVvZihmb2N1c0ZpcnN0KSkgPT09ICdvYmplY3QnKSB7XG4gICAgdGhpcy5mb2N1c0ZpcnN0ID0gZm9jdXNGaXJzdDtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmZvY3VzRmlyc3QgPSBudWxsO1xuICB9XG5cbiAgaWYgKHRoaXMuZm9jdXNGaXJzdCkge1xuICAgIHRoaXMuZm9jdXNGaXJzdC5mb2N1cygpO1xuICB9IGVsc2Uge1xuICAgIF9hcmlhVXRpbHMyLmRlZmF1bHQuZm9jdXNGaXJzdERlc2NlbmRhbnQodGhpcy5kaWFsb2dOb2RlKTtcbiAgfVxuXG4gIHRoaXMubGFzdEZvY3VzID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgdGFiRXZlbnQgPSBmdW5jdGlvbiB0YWJFdmVudChlKSB7XG4gICAgX3RoaXMudHJhcEZvY3VzKGUpO1xuICB9O1xuICB0aGlzLmFkZExpc3RlbmVycygpO1xufTtcblxuYXJpYS5EaWFsb2cucHJvdG90eXBlLmFkZExpc3RlbmVycyA9IGZ1bmN0aW9uICgpIHtcbiAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCB0YWJFdmVudCwgdHJ1ZSk7XG59O1xuXG5hcmlhLkRpYWxvZy5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXJzID0gZnVuY3Rpb24gKCkge1xuICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdmb2N1cycsIHRhYkV2ZW50LCB0cnVlKTtcbn07XG5cbmFyaWEuRGlhbG9nLnByb3RvdHlwZS5jbG9zZURpYWxvZyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgdGhpcy5yZW1vdmVMaXN0ZW5lcnMoKTtcbiAgaWYgKHRoaXMuZm9jdXNBZnRlckNsb3NlZCkge1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMyLmZvY3VzQWZ0ZXJDbG9zZWQuZm9jdXMoKTtcbiAgICB9KTtcbiAgfVxufTtcblxuYXJpYS5EaWFsb2cucHJvdG90eXBlLnRyYXBGb2N1cyA9IGZ1bmN0aW9uIChldmVudCkge1xuICBpZiAoX2FyaWFVdGlsczIuZGVmYXVsdC5JZ25vcmVVdGlsRm9jdXNDaGFuZ2VzKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmICh0aGlzLmRpYWxvZ05vZGUuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkge1xuICAgIHRoaXMubGFzdEZvY3VzID0gZXZlbnQudGFyZ2V0O1xuICB9IGVsc2Uge1xuICAgIF9hcmlhVXRpbHMyLmRlZmF1bHQuZm9jdXNGaXJzdERlc2NlbmRhbnQodGhpcy5kaWFsb2dOb2RlKTtcbiAgICBpZiAodGhpcy5sYXN0Rm9jdXMgPT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgIF9hcmlhVXRpbHMyLmRlZmF1bHQuZm9jdXNMYXN0RGVzY2VuZGFudCh0aGlzLmRpYWxvZ05vZGUpO1xuICAgIH1cbiAgICB0aGlzLmxhc3RGb2N1cyA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gIH1cbn07XG5cbmV4cG9ydHMuZGVmYXVsdCA9IGFyaWEuRGlhbG9nOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/utils/aria-dialog.js\n");

/***/ }),

/***/ "./node_modules/element-ui/lib/utils/aria-utils.js":
/*!*********************************************************!*\
  !*** ./node_modules/element-ui/lib/utils/aria-utils.js ***!
  \*********************************************************/
/***/ ((__unused_webpack_module, exports) => {

"use strict";
eval("\n\nexports.__esModule = true;\nvar aria = aria || {};\n\naria.Utils = aria.Utils || {};\n\n/**\n * @desc Set focus on descendant nodes until the first focusable element is\n *       found.\n * @param element\n *          DOM node for which to find the first focusable descendant.\n * @returns\n *  true if a focusable element is found and focus is set.\n */\naria.Utils.focusFirstDescendant = function (element) {\n  for (var i = 0; i < element.childNodes.length; i++) {\n    var child = element.childNodes[i];\n    if (aria.Utils.attemptFocus(child) || aria.Utils.focusFirstDescendant(child)) {\n      return true;\n    }\n  }\n  return false;\n};\n\n/**\n * @desc Find the last descendant node that is focusable.\n * @param element\n *          DOM node for which to find the last focusable descendant.\n * @returns\n *  true if a focusable element is found and focus is set.\n */\n\naria.Utils.focusLastDescendant = function (element) {\n  for (var i = element.childNodes.length - 1; i >= 0; i--) {\n    var child = element.childNodes[i];\n    if (aria.Utils.attemptFocus(child) || aria.Utils.focusLastDescendant(child)) {\n      return true;\n    }\n  }\n  return false;\n};\n\n/**\n * @desc Set Attempt to set focus on the current node.\n * @param element\n *          The node to attempt to focus on.\n * @returns\n *  true if element is focused.\n */\naria.Utils.attemptFocus = function (element) {\n  if (!aria.Utils.isFocusable(element)) {\n    return false;\n  }\n  aria.Utils.IgnoreUtilFocusChanges = true;\n  try {\n    element.focus();\n  } catch (e) {}\n  aria.Utils.IgnoreUtilFocusChanges = false;\n  return document.activeElement === element;\n};\n\naria.Utils.isFocusable = function (element) {\n  if (element.tabIndex > 0 || element.tabIndex === 0 && element.getAttribute('tabIndex') !== null) {\n    return true;\n  }\n\n  if (element.disabled) {\n    return false;\n  }\n\n  switch (element.nodeName) {\n    case 'A':\n      return !!element.href && element.rel !== 'ignore';\n    case 'INPUT':\n      return element.type !== 'hidden' && element.type !== 'file';\n    case 'BUTTON':\n    case 'SELECT':\n    case 'TEXTAREA':\n      return true;\n    default:\n      return false;\n  }\n};\n\n/**\n * 触发一个事件\n * mouseenter, mouseleave, mouseover, keyup, change, click 等\n * @param  {Element} elm\n * @param  {String} name\n * @param  {*} opts\n */\naria.Utils.triggerEvent = function (elm, name) {\n  var eventName = void 0;\n\n  if (/^mouse|click/.test(name)) {\n    eventName = 'MouseEvents';\n  } else if (/^key/.test(name)) {\n    eventName = 'KeyboardEvent';\n  } else {\n    eventName = 'HTMLEvents';\n  }\n  var evt = document.createEvent(eventName);\n\n  for (var _len = arguments.length, opts = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n    opts[_key - 2] = arguments[_key];\n  }\n\n  evt.initEvent.apply(evt, [name].concat(opts));\n  elm.dispatchEvent ? elm.dispatchEvent(evt) : elm.fireEvent('on' + name, evt);\n\n  return elm;\n};\n\naria.Utils.keys = {\n  tab: 9,\n  enter: 13,\n  space: 32,\n  left: 37,\n  up: 38,\n  right: 39,\n  down: 40,\n  esc: 27\n};\n\nexports[\"default\"] = aria.Utils;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdXRpbHMvYXJpYS11dGlscy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0I7QUFDbEI7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLCtCQUErQjtBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDhDQUE4QyxRQUFRO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLFNBQVM7QUFDckIsWUFBWSxRQUFRO0FBQ3BCLFlBQVksR0FBRztBQUNmO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQSxxRkFBcUYsYUFBYTtBQUNsRztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBZSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9lbGVtZW50LXVpL2xpYi91dGlscy9hcmlhLXV0aWxzLmpzPzM1YzciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xudmFyIGFyaWEgPSBhcmlhIHx8IHt9O1xuXG5hcmlhLlV0aWxzID0gYXJpYS5VdGlscyB8fCB7fTtcblxuLyoqXG4gKiBAZGVzYyBTZXQgZm9jdXMgb24gZGVzY2VuZGFudCBub2RlcyB1bnRpbCB0aGUgZmlyc3QgZm9jdXNhYmxlIGVsZW1lbnQgaXNcbiAqICAgICAgIGZvdW5kLlxuICogQHBhcmFtIGVsZW1lbnRcbiAqICAgICAgICAgIERPTSBub2RlIGZvciB3aGljaCB0byBmaW5kIHRoZSBmaXJzdCBmb2N1c2FibGUgZGVzY2VuZGFudC5cbiAqIEByZXR1cm5zXG4gKiAgdHJ1ZSBpZiBhIGZvY3VzYWJsZSBlbGVtZW50IGlzIGZvdW5kIGFuZCBmb2N1cyBpcyBzZXQuXG4gKi9cbmFyaWEuVXRpbHMuZm9jdXNGaXJzdERlc2NlbmRhbnQgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBjaGlsZCA9IGVsZW1lbnQuY2hpbGROb2Rlc1tpXTtcbiAgICBpZiAoYXJpYS5VdGlscy5hdHRlbXB0Rm9jdXMoY2hpbGQpIHx8IGFyaWEuVXRpbHMuZm9jdXNGaXJzdERlc2NlbmRhbnQoY2hpbGQpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBAZGVzYyBGaW5kIHRoZSBsYXN0IGRlc2NlbmRhbnQgbm9kZSB0aGF0IGlzIGZvY3VzYWJsZS5cbiAqIEBwYXJhbSBlbGVtZW50XG4gKiAgICAgICAgICBET00gbm9kZSBmb3Igd2hpY2ggdG8gZmluZCB0aGUgbGFzdCBmb2N1c2FibGUgZGVzY2VuZGFudC5cbiAqIEByZXR1cm5zXG4gKiAgdHJ1ZSBpZiBhIGZvY3VzYWJsZSBlbGVtZW50IGlzIGZvdW5kIGFuZCBmb2N1cyBpcyBzZXQuXG4gKi9cblxuYXJpYS5VdGlscy5mb2N1c0xhc3REZXNjZW5kYW50ID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgZm9yICh2YXIgaSA9IGVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIHZhciBjaGlsZCA9IGVsZW1lbnQuY2hpbGROb2Rlc1tpXTtcbiAgICBpZiAoYXJpYS5VdGlscy5hdHRlbXB0Rm9jdXMoY2hpbGQpIHx8IGFyaWEuVXRpbHMuZm9jdXNMYXN0RGVzY2VuZGFudChjaGlsZCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiAqIEBkZXNjIFNldCBBdHRlbXB0IHRvIHNldCBmb2N1cyBvbiB0aGUgY3VycmVudCBub2RlLlxuICogQHBhcmFtIGVsZW1lbnRcbiAqICAgICAgICAgIFRoZSBub2RlIHRvIGF0dGVtcHQgdG8gZm9jdXMgb24uXG4gKiBAcmV0dXJuc1xuICogIHRydWUgaWYgZWxlbWVudCBpcyBmb2N1c2VkLlxuICovXG5hcmlhLlV0aWxzLmF0dGVtcHRGb2N1cyA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gIGlmICghYXJpYS5VdGlscy5pc0ZvY3VzYWJsZShlbGVtZW50KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBhcmlhLlV0aWxzLklnbm9yZVV0aWxGb2N1c0NoYW5nZXMgPSB0cnVlO1xuICB0cnkge1xuICAgIGVsZW1lbnQuZm9jdXMoKTtcbiAgfSBjYXRjaCAoZSkge31cbiAgYXJpYS5VdGlscy5JZ25vcmVVdGlsRm9jdXNDaGFuZ2VzID0gZmFsc2U7XG4gIHJldHVybiBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBlbGVtZW50O1xufTtcblxuYXJpYS5VdGlscy5pc0ZvY3VzYWJsZSA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gIGlmIChlbGVtZW50LnRhYkluZGV4ID4gMCB8fCBlbGVtZW50LnRhYkluZGV4ID09PSAwICYmIGVsZW1lbnQuZ2V0QXR0cmlidXRlKCd0YWJJbmRleCcpICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoZWxlbWVudC5kaXNhYmxlZCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHN3aXRjaCAoZWxlbWVudC5ub2RlTmFtZSkge1xuICAgIGNhc2UgJ0EnOlxuICAgICAgcmV0dXJuICEhZWxlbWVudC5ocmVmICYmIGVsZW1lbnQucmVsICE9PSAnaWdub3JlJztcbiAgICBjYXNlICdJTlBVVCc6XG4gICAgICByZXR1cm4gZWxlbWVudC50eXBlICE9PSAnaGlkZGVuJyAmJiBlbGVtZW50LnR5cGUgIT09ICdmaWxlJztcbiAgICBjYXNlICdCVVRUT04nOlxuICAgIGNhc2UgJ1NFTEVDVCc6XG4gICAgY2FzZSAnVEVYVEFSRUEnOlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxuLyoqXG4gKiDop6blj5HkuIDkuKrkuovku7ZcbiAqIG1vdXNlZW50ZXIsIG1vdXNlbGVhdmUsIG1vdXNlb3Zlciwga2V5dXAsIGNoYW5nZSwgY2xpY2sg562JXG4gKiBAcGFyYW0gIHtFbGVtZW50fSBlbG1cbiAqIEBwYXJhbSAge1N0cmluZ30gbmFtZVxuICogQHBhcmFtICB7Kn0gb3B0c1xuICovXG5hcmlhLlV0aWxzLnRyaWdnZXJFdmVudCA9IGZ1bmN0aW9uIChlbG0sIG5hbWUpIHtcbiAgdmFyIGV2ZW50TmFtZSA9IHZvaWQgMDtcblxuICBpZiAoL15tb3VzZXxjbGljay8udGVzdChuYW1lKSkge1xuICAgIGV2ZW50TmFtZSA9ICdNb3VzZUV2ZW50cyc7XG4gIH0gZWxzZSBpZiAoL15rZXkvLnRlc3QobmFtZSkpIHtcbiAgICBldmVudE5hbWUgPSAnS2V5Ym9hcmRFdmVudCc7XG4gIH0gZWxzZSB7XG4gICAgZXZlbnROYW1lID0gJ0hUTUxFdmVudHMnO1xuICB9XG4gIHZhciBldnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudChldmVudE5hbWUpO1xuXG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBvcHRzID0gQXJyYXkoX2xlbiA+IDIgPyBfbGVuIC0gMiA6IDApLCBfa2V5ID0gMjsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIG9wdHNbX2tleSAtIDJdID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgZXZ0LmluaXRFdmVudC5hcHBseShldnQsIFtuYW1lXS5jb25jYXQob3B0cykpO1xuICBlbG0uZGlzcGF0Y2hFdmVudCA/IGVsbS5kaXNwYXRjaEV2ZW50KGV2dCkgOiBlbG0uZmlyZUV2ZW50KCdvbicgKyBuYW1lLCBldnQpO1xuXG4gIHJldHVybiBlbG07XG59O1xuXG5hcmlhLlV0aWxzLmtleXMgPSB7XG4gIHRhYjogOSxcbiAgZW50ZXI6IDEzLFxuICBzcGFjZTogMzIsXG4gIGxlZnQ6IDM3LFxuICB1cDogMzgsXG4gIHJpZ2h0OiAzOSxcbiAgZG93bjogNDAsXG4gIGVzYzogMjdcbn07XG5cbmV4cG9ydHMuZGVmYXVsdCA9IGFyaWEuVXRpbHM7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/utils/aria-utils.js\n");

/***/ }),

/***/ "./node_modules/element-ui/lib/utils/clickoutside.js":
/*!***********************************************************!*\
  !*** ./node_modules/element-ui/lib/utils/clickoutside.js ***!
  \***********************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";
eval("\n\nexports.__esModule = true;\n\nvar _vue = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.esm.js\");\n\nvar _vue2 = _interopRequireDefault(_vue);\n\nvar _dom = __webpack_require__(/*! element-ui/lib/utils/dom */ \"./node_modules/element-ui/lib/utils/dom.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar nodeList = [];\nvar ctx = '@@clickoutsideContext';\n\nvar startClick = void 0;\nvar seed = 0;\n\n!_vue2.default.prototype.$isServer && (0, _dom.on)(document, 'mousedown', function (e) {\n  return startClick = e;\n});\n\n!_vue2.default.prototype.$isServer && (0, _dom.on)(document, 'mouseup', function (e) {\n  nodeList.forEach(function (node) {\n    return node[ctx].documentHandler(e, startClick);\n  });\n});\n\nfunction createDocumentHandler(el, binding, vnode) {\n  return function () {\n    var mouseup = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    var mousedown = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    if (!vnode || !vnode.context || !mouseup.target || !mousedown.target || el.contains(mouseup.target) || el.contains(mousedown.target) || el === mouseup.target || vnode.context.popperElm && (vnode.context.popperElm.contains(mouseup.target) || vnode.context.popperElm.contains(mousedown.target))) return;\n\n    if (binding.expression && el[ctx].methodName && vnode.context[el[ctx].methodName]) {\n      vnode.context[el[ctx].methodName]();\n    } else {\n      el[ctx].bindingFn && el[ctx].bindingFn();\n    }\n  };\n}\n\n/**\n * v-clickoutside\n * @desc 点击元素外面才会触发的事件\n * @example\n * ```vue\n * <div v-element-clickoutside=\"handleClose\">\n * ```\n */\nexports[\"default\"] = {\n  bind: function bind(el, binding, vnode) {\n    nodeList.push(el);\n    var id = seed++;\n    el[ctx] = {\n      id: id,\n      documentHandler: createDocumentHandler(el, binding, vnode),\n      methodName: binding.expression,\n      bindingFn: binding.value\n    };\n  },\n  update: function update(el, binding, vnode) {\n    el[ctx].documentHandler = createDocumentHandler(el, binding, vnode);\n    el[ctx].methodName = binding.expression;\n    el[ctx].bindingFn = binding.value;\n  },\n  unbind: function unbind(el) {\n    var len = nodeList.length;\n\n    for (var i = 0; i < len; i++) {\n      if (nodeList[i][ctx].id === el[ctx].id) {\n        nodeList.splice(i, 1);\n        break;\n      }\n    }\n    delete el[ctx];\n  }\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdXRpbHMvY2xpY2tvdXRzaWRlLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLGtCQUFrQjs7QUFFbEIsV0FBVyxtQkFBTyxDQUFDLCtDQUFLOztBQUV4Qjs7QUFFQSxXQUFXLG1CQUFPLENBQUMsNEVBQTBCOztBQUU3Qyx1Q0FBdUMsdUNBQXVDOztBQUU5RTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQSxvQkFBb0IsU0FBUztBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2VsZW1lbnQtdWkvbGliL3V0aWxzL2NsaWNrb3V0c2lkZS5qcz85NGZkIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxudmFyIF92dWUgPSByZXF1aXJlKCd2dWUnKTtcblxudmFyIF92dWUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfdnVlKTtcblxudmFyIF9kb20gPSByZXF1aXJlKCdlbGVtZW50LXVpL2xpYi91dGlscy9kb20nKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxudmFyIG5vZGVMaXN0ID0gW107XG52YXIgY3R4ID0gJ0BAY2xpY2tvdXRzaWRlQ29udGV4dCc7XG5cbnZhciBzdGFydENsaWNrID0gdm9pZCAwO1xudmFyIHNlZWQgPSAwO1xuXG4hX3Z1ZTIuZGVmYXVsdC5wcm90b3R5cGUuJGlzU2VydmVyICYmICgwLCBfZG9tLm9uKShkb2N1bWVudCwgJ21vdXNlZG93bicsIGZ1bmN0aW9uIChlKSB7XG4gIHJldHVybiBzdGFydENsaWNrID0gZTtcbn0pO1xuXG4hX3Z1ZTIuZGVmYXVsdC5wcm90b3R5cGUuJGlzU2VydmVyICYmICgwLCBfZG9tLm9uKShkb2N1bWVudCwgJ21vdXNldXAnLCBmdW5jdGlvbiAoZSkge1xuICBub2RlTGlzdC5mb3JFYWNoKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgcmV0dXJuIG5vZGVbY3R4XS5kb2N1bWVudEhhbmRsZXIoZSwgc3RhcnRDbGljayk7XG4gIH0pO1xufSk7XG5cbmZ1bmN0aW9uIGNyZWF0ZURvY3VtZW50SGFuZGxlcihlbCwgYmluZGluZywgdm5vZGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbW91c2V1cCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gICAgdmFyIG1vdXNlZG93biA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG5cbiAgICBpZiAoIXZub2RlIHx8ICF2bm9kZS5jb250ZXh0IHx8ICFtb3VzZXVwLnRhcmdldCB8fCAhbW91c2Vkb3duLnRhcmdldCB8fCBlbC5jb250YWlucyhtb3VzZXVwLnRhcmdldCkgfHwgZWwuY29udGFpbnMobW91c2Vkb3duLnRhcmdldCkgfHwgZWwgPT09IG1vdXNldXAudGFyZ2V0IHx8IHZub2RlLmNvbnRleHQucG9wcGVyRWxtICYmICh2bm9kZS5jb250ZXh0LnBvcHBlckVsbS5jb250YWlucyhtb3VzZXVwLnRhcmdldCkgfHwgdm5vZGUuY29udGV4dC5wb3BwZXJFbG0uY29udGFpbnMobW91c2Vkb3duLnRhcmdldCkpKSByZXR1cm47XG5cbiAgICBpZiAoYmluZGluZy5leHByZXNzaW9uICYmIGVsW2N0eF0ubWV0aG9kTmFtZSAmJiB2bm9kZS5jb250ZXh0W2VsW2N0eF0ubWV0aG9kTmFtZV0pIHtcbiAgICAgIHZub2RlLmNvbnRleHRbZWxbY3R4XS5tZXRob2ROYW1lXSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbFtjdHhdLmJpbmRpbmdGbiAmJiBlbFtjdHhdLmJpbmRpbmdGbigpO1xuICAgIH1cbiAgfTtcbn1cblxuLyoqXG4gKiB2LWNsaWNrb3V0c2lkZVxuICogQGRlc2Mg54K55Ye75YWD57Sg5aSW6Z2i5omN5Lya6Kem5Y+R55qE5LqL5Lu2XG4gKiBAZXhhbXBsZVxuICogYGBgdnVlXG4gKiA8ZGl2IHYtZWxlbWVudC1jbGlja291dHNpZGU9XCJoYW5kbGVDbG9zZVwiPlxuICogYGBgXG4gKi9cbmV4cG9ydHMuZGVmYXVsdCA9IHtcbiAgYmluZDogZnVuY3Rpb24gYmluZChlbCwgYmluZGluZywgdm5vZGUpIHtcbiAgICBub2RlTGlzdC5wdXNoKGVsKTtcbiAgICB2YXIgaWQgPSBzZWVkKys7XG4gICAgZWxbY3R4XSA9IHtcbiAgICAgIGlkOiBpZCxcbiAgICAgIGRvY3VtZW50SGFuZGxlcjogY3JlYXRlRG9jdW1lbnRIYW5kbGVyKGVsLCBiaW5kaW5nLCB2bm9kZSksXG4gICAgICBtZXRob2ROYW1lOiBiaW5kaW5nLmV4cHJlc3Npb24sXG4gICAgICBiaW5kaW5nRm46IGJpbmRpbmcudmFsdWVcbiAgICB9O1xuICB9LFxuICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZShlbCwgYmluZGluZywgdm5vZGUpIHtcbiAgICBlbFtjdHhdLmRvY3VtZW50SGFuZGxlciA9IGNyZWF0ZURvY3VtZW50SGFuZGxlcihlbCwgYmluZGluZywgdm5vZGUpO1xuICAgIGVsW2N0eF0ubWV0aG9kTmFtZSA9IGJpbmRpbmcuZXhwcmVzc2lvbjtcbiAgICBlbFtjdHhdLmJpbmRpbmdGbiA9IGJpbmRpbmcudmFsdWU7XG4gIH0sXG4gIHVuYmluZDogZnVuY3Rpb24gdW5iaW5kKGVsKSB7XG4gICAgdmFyIGxlbiA9IG5vZGVMaXN0Lmxlbmd0aDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGlmIChub2RlTGlzdFtpXVtjdHhdLmlkID09PSBlbFtjdHhdLmlkKSB7XG4gICAgICAgIG5vZGVMaXN0LnNwbGljZShpLCAxKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGRlbGV0ZSBlbFtjdHhdO1xuICB9XG59OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/utils/clickoutside.js\n");

/***/ }),

/***/ "./node_modules/element-ui/lib/utils/date-util.js":
/*!********************************************************!*\
  !*** ./node_modules/element-ui/lib/utils/date-util.js ***!
  \********************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";
eval("\n\nexports.__esModule = true;\nexports.validateRangeInOneMonth = exports.extractTimeFormat = exports.extractDateFormat = exports.nextYear = exports.prevYear = exports.nextMonth = exports.prevMonth = exports.changeYearMonthAndClampDate = exports.timeWithinRange = exports.limitTimeRange = exports.clearMilliseconds = exports.clearTime = exports.modifyWithTimeString = exports.modifyTime = exports.modifyDate = exports.range = exports.getRangeMinutes = exports.getMonthDays = exports.getPrevMonthLastDays = exports.getRangeHours = exports.getWeekNumber = exports.getStartDateOfMonth = exports.nextDate = exports.prevDate = exports.getFirstDayOfMonth = exports.getDayCountOfYear = exports.getDayCountOfMonth = exports.parseDate = exports.formatDate = exports.isDateObject = exports.isDate = exports.toDate = exports.getI18nSettings = undefined;\n\nvar _date = __webpack_require__(/*! element-ui/lib/utils/date */ \"./node_modules/element-ui/lib/utils/date.js\");\n\nvar _date2 = _interopRequireDefault(_date);\n\nvar _locale = __webpack_require__(/*! element-ui/lib/locale */ \"./node_modules/element-ui/lib/locale/index.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar weeks = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'];\nvar months = ['jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep', 'oct', 'nov', 'dec'];\n\nvar newArray = function newArray(start, end) {\n  var result = [];\n  for (var i = start; i <= end; i++) {\n    result.push(i);\n  }\n  return result;\n};\n\nvar getI18nSettings = exports.getI18nSettings = function getI18nSettings() {\n  return {\n    dayNamesShort: weeks.map(function (week) {\n      return (0, _locale.t)('el.datepicker.weeks.' + week);\n    }),\n    dayNames: weeks.map(function (week) {\n      return (0, _locale.t)('el.datepicker.weeks.' + week);\n    }),\n    monthNamesShort: months.map(function (month) {\n      return (0, _locale.t)('el.datepicker.months.' + month);\n    }),\n    monthNames: months.map(function (month, index) {\n      return (0, _locale.t)('el.datepicker.month' + (index + 1));\n    }),\n    amPm: ['am', 'pm']\n  };\n};\n\nvar toDate = exports.toDate = function toDate(date) {\n  return isDate(date) ? new Date(date) : null;\n};\n\nvar isDate = exports.isDate = function isDate(date) {\n  if (date === null || date === undefined) return false;\n  if (isNaN(new Date(date).getTime())) return false;\n  if (Array.isArray(date)) return false; // deal with `new Date([ new Date() ]) -> new Date()`\n  return true;\n};\n\nvar isDateObject = exports.isDateObject = function isDateObject(val) {\n  return val instanceof Date;\n};\n\nvar formatDate = exports.formatDate = function formatDate(date, format) {\n  date = toDate(date);\n  if (!date) return '';\n  return _date2.default.format(date, format || 'yyyy-MM-dd', getI18nSettings());\n};\n\nvar parseDate = exports.parseDate = function parseDate(string, format) {\n  return _date2.default.parse(string, format || 'yyyy-MM-dd', getI18nSettings());\n};\n\nvar getDayCountOfMonth = exports.getDayCountOfMonth = function getDayCountOfMonth(year, month) {\n  if (isNaN(+month)) return 31;\n\n  return new Date(year, +month + 1, 0).getDate();\n};\n\nvar getDayCountOfYear = exports.getDayCountOfYear = function getDayCountOfYear(year) {\n  var isLeapYear = year % 400 === 0 || year % 100 !== 0 && year % 4 === 0;\n  return isLeapYear ? 366 : 365;\n};\n\nvar getFirstDayOfMonth = exports.getFirstDayOfMonth = function getFirstDayOfMonth(date) {\n  var temp = new Date(date.getTime());\n  temp.setDate(1);\n  return temp.getDay();\n};\n\n// see: https://stackoverflow.com/questions/3674539/incrementing-a-date-in-javascript\n// {prev, next} Date should work for Daylight Saving Time\n// Adding 24 * 60 * 60 * 1000 does not work in the above scenario\nvar prevDate = exports.prevDate = function prevDate(date) {\n  var amount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n\n  return new Date(date.getFullYear(), date.getMonth(), date.getDate() - amount);\n};\n\nvar nextDate = exports.nextDate = function nextDate(date) {\n  var amount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n\n  return new Date(date.getFullYear(), date.getMonth(), date.getDate() + amount);\n};\n\nvar getStartDateOfMonth = exports.getStartDateOfMonth = function getStartDateOfMonth(year, month) {\n  var result = new Date(year, month, 1);\n  var day = result.getDay();\n\n  if (day === 0) {\n    return prevDate(result, 7);\n  } else {\n    return prevDate(result, day);\n  }\n};\n\nvar getWeekNumber = exports.getWeekNumber = function getWeekNumber(src) {\n  if (!isDate(src)) return null;\n  var date = new Date(src.getTime());\n  date.setHours(0, 0, 0, 0);\n  // Thursday in current week decides the year.\n  date.setDate(date.getDate() + 3 - (date.getDay() + 6) % 7);\n  // January 4 is always in week 1.\n  var week1 = new Date(date.getFullYear(), 0, 4);\n  // Adjust to Thursday in week 1 and count number of weeks from date to week 1.\n  // Rounding should be fine for Daylight Saving Time. Its shift should never be more than 12 hours.\n  return 1 + Math.round(((date.getTime() - week1.getTime()) / 86400000 - 3 + (week1.getDay() + 6) % 7) / 7);\n};\n\nvar getRangeHours = exports.getRangeHours = function getRangeHours(ranges) {\n  var hours = [];\n  var disabledHours = [];\n\n  (ranges || []).forEach(function (range) {\n    var value = range.map(function (date) {\n      return date.getHours();\n    });\n\n    disabledHours = disabledHours.concat(newArray(value[0], value[1]));\n  });\n\n  if (disabledHours.length) {\n    for (var i = 0; i < 24; i++) {\n      hours[i] = disabledHours.indexOf(i) === -1;\n    }\n  } else {\n    for (var _i = 0; _i < 24; _i++) {\n      hours[_i] = false;\n    }\n  }\n\n  return hours;\n};\n\nvar getPrevMonthLastDays = exports.getPrevMonthLastDays = function getPrevMonthLastDays(date, amount) {\n  if (amount <= 0) return [];\n  var temp = new Date(date.getTime());\n  temp.setDate(0);\n  var lastDay = temp.getDate();\n  return range(amount).map(function (_, index) {\n    return lastDay - (amount - index - 1);\n  });\n};\n\nvar getMonthDays = exports.getMonthDays = function getMonthDays(date) {\n  var temp = new Date(date.getFullYear(), date.getMonth() + 1, 0);\n  var days = temp.getDate();\n  return range(days).map(function (_, index) {\n    return index + 1;\n  });\n};\n\nfunction setRangeData(arr, start, end, value) {\n  for (var i = start; i < end; i++) {\n    arr[i] = value;\n  }\n}\n\nvar getRangeMinutes = exports.getRangeMinutes = function getRangeMinutes(ranges, hour) {\n  var minutes = new Array(60);\n\n  if (ranges.length > 0) {\n    ranges.forEach(function (range) {\n      var start = range[0];\n      var end = range[1];\n      var startHour = start.getHours();\n      var startMinute = start.getMinutes();\n      var endHour = end.getHours();\n      var endMinute = end.getMinutes();\n      if (startHour === hour && endHour !== hour) {\n        setRangeData(minutes, startMinute, 60, true);\n      } else if (startHour === hour && endHour === hour) {\n        setRangeData(minutes, startMinute, endMinute + 1, true);\n      } else if (startHour !== hour && endHour === hour) {\n        setRangeData(minutes, 0, endMinute + 1, true);\n      } else if (startHour < hour && endHour > hour) {\n        setRangeData(minutes, 0, 60, true);\n      }\n    });\n  } else {\n    setRangeData(minutes, 0, 60, true);\n  }\n  return minutes;\n};\n\nvar range = exports.range = function range(n) {\n  // see https://stackoverflow.com/questions/3746725/create-a-javascript-array-containing-1-n\n  return Array.apply(null, { length: n }).map(function (_, n) {\n    return n;\n  });\n};\n\nvar modifyDate = exports.modifyDate = function modifyDate(date, y, m, d) {\n  return new Date(y, m, d, date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n};\n\nvar modifyTime = exports.modifyTime = function modifyTime(date, h, m, s) {\n  return new Date(date.getFullYear(), date.getMonth(), date.getDate(), h, m, s, date.getMilliseconds());\n};\n\nvar modifyWithTimeString = exports.modifyWithTimeString = function modifyWithTimeString(date, time) {\n  if (date == null || !time) {\n    return date;\n  }\n  time = parseDate(time, 'HH:mm:ss');\n  return modifyTime(date, time.getHours(), time.getMinutes(), time.getSeconds());\n};\n\nvar clearTime = exports.clearTime = function clearTime(date) {\n  return new Date(date.getFullYear(), date.getMonth(), date.getDate());\n};\n\nvar clearMilliseconds = exports.clearMilliseconds = function clearMilliseconds(date) {\n  return new Date(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), 0);\n};\n\nvar limitTimeRange = exports.limitTimeRange = function limitTimeRange(date, ranges) {\n  var format = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'HH:mm:ss';\n\n  // TODO: refactory a more elegant solution\n  if (ranges.length === 0) return date;\n  var normalizeDate = function normalizeDate(date) {\n    return _date2.default.parse(_date2.default.format(date, format), format);\n  };\n  var ndate = normalizeDate(date);\n  var nranges = ranges.map(function (range) {\n    return range.map(normalizeDate);\n  });\n  if (nranges.some(function (nrange) {\n    return ndate >= nrange[0] && ndate <= nrange[1];\n  })) return date;\n\n  var minDate = nranges[0][0];\n  var maxDate = nranges[0][0];\n\n  nranges.forEach(function (nrange) {\n    minDate = new Date(Math.min(nrange[0], minDate));\n    maxDate = new Date(Math.max(nrange[1], minDate));\n  });\n\n  var ret = ndate < minDate ? minDate : maxDate;\n  // preserve Year/Month/Date\n  return modifyDate(ret, date.getFullYear(), date.getMonth(), date.getDate());\n};\n\nvar timeWithinRange = exports.timeWithinRange = function timeWithinRange(date, selectableRange, format) {\n  var limitedDate = limitTimeRange(date, selectableRange, format);\n  return limitedDate.getTime() === date.getTime();\n};\n\nvar changeYearMonthAndClampDate = exports.changeYearMonthAndClampDate = function changeYearMonthAndClampDate(date, year, month) {\n  // clamp date to the number of days in `year`, `month`\n  // eg: (2010-1-31, 2010, 2) => 2010-2-28\n  var monthDate = Math.min(date.getDate(), getDayCountOfMonth(year, month));\n  return modifyDate(date, year, month, monthDate);\n};\n\nvar prevMonth = exports.prevMonth = function prevMonth(date) {\n  var year = date.getFullYear();\n  var month = date.getMonth();\n  return month === 0 ? changeYearMonthAndClampDate(date, year - 1, 11) : changeYearMonthAndClampDate(date, year, month - 1);\n};\n\nvar nextMonth = exports.nextMonth = function nextMonth(date) {\n  var year = date.getFullYear();\n  var month = date.getMonth();\n  return month === 11 ? changeYearMonthAndClampDate(date, year + 1, 0) : changeYearMonthAndClampDate(date, year, month + 1);\n};\n\nvar prevYear = exports.prevYear = function prevYear(date) {\n  var amount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n\n  var year = date.getFullYear();\n  var month = date.getMonth();\n  return changeYearMonthAndClampDate(date, year - amount, month);\n};\n\nvar nextYear = exports.nextYear = function nextYear(date) {\n  var amount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n\n  var year = date.getFullYear();\n  var month = date.getMonth();\n  return changeYearMonthAndClampDate(date, year + amount, month);\n};\n\nvar extractDateFormat = exports.extractDateFormat = function extractDateFormat(format) {\n  return format.replace(/\\W?m{1,2}|\\W?ZZ/g, '').replace(/\\W?h{1,2}|\\W?s{1,3}|\\W?a/gi, '').trim();\n};\n\nvar extractTimeFormat = exports.extractTimeFormat = function extractTimeFormat(format) {\n  return format.replace(/\\W?D{1,2}|\\W?Do|\\W?d{1,4}|\\W?M{1,4}|\\W?y{2,4}/g, '').trim();\n};\n\nvar validateRangeInOneMonth = exports.validateRangeInOneMonth = function validateRangeInOneMonth(start, end) {\n  return start.getMonth() === end.getMonth() && start.getFullYear() === end.getFullYear();\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdXRpbHMvZGF0ZS11dGlsLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLGtCQUFrQjtBQUNsQiwrQkFBK0IsR0FBRyx5QkFBeUIsR0FBRyx5QkFBeUIsR0FBRyxnQkFBZ0IsR0FBRyxnQkFBZ0IsR0FBRyxpQkFBaUIsR0FBRyxpQkFBaUIsR0FBRyxtQ0FBbUMsR0FBRyx1QkFBdUIsR0FBRyxzQkFBc0IsR0FBRyx5QkFBeUIsR0FBRyxpQkFBaUIsR0FBRyw0QkFBNEIsR0FBRyxrQkFBa0IsR0FBRyxrQkFBa0IsR0FBRyxhQUFhLEdBQUcsdUJBQXVCLEdBQUcsb0JBQW9CLEdBQUcsNEJBQTRCLEdBQUcscUJBQXFCLEdBQUcscUJBQXFCLEdBQUcsMkJBQTJCLEdBQUcsZ0JBQWdCLEdBQUcsZ0JBQWdCLEdBQUcsMEJBQTBCLEdBQUcseUJBQXlCLEdBQUcsMEJBQTBCLEdBQUcsaUJBQWlCLEdBQUcsa0JBQWtCLEdBQUcsb0JBQW9CLEdBQUcsY0FBYyxHQUFHLGNBQWMsR0FBRyx1QkFBdUI7O0FBRTd4QixZQUFZLG1CQUFPLENBQUMsOEVBQTJCOztBQUUvQzs7QUFFQSxjQUFjLG1CQUFPLENBQUMsNEVBQXVCOztBQUU3Qyx1Q0FBdUMsdUNBQXVDOztBQUU5RTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxzQkFBc0IsVUFBVTtBQUNoQztBQUNBO0FBQ0E7QUFDQTs7QUFFQSxzQkFBc0IsdUJBQXVCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUEsYUFBYSxjQUFjO0FBQzNCO0FBQ0E7O0FBRUEsYUFBYSxjQUFjO0FBQzNCO0FBQ0E7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTs7QUFFQSxtQkFBbUIsb0JBQW9CO0FBQ3ZDO0FBQ0E7O0FBRUEsaUJBQWlCLGtCQUFrQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTs7QUFFQSxnQkFBZ0IsaUJBQWlCO0FBQ2pDO0FBQ0E7O0FBRUEseUJBQXlCLDBCQUEwQjtBQUNuRDs7QUFFQTtBQUNBOztBQUVBLHdCQUF3Qix5QkFBeUI7QUFDakQ7QUFDQTtBQUNBOztBQUVBLHlCQUF5QiwwQkFBMEI7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLFlBQVk7QUFDaEI7QUFDQSxlQUFlLGdCQUFnQjtBQUMvQjs7QUFFQTtBQUNBOztBQUVBLGVBQWUsZ0JBQWdCO0FBQy9COztBQUVBO0FBQ0E7O0FBRUEsMEJBQTBCLDJCQUEyQjtBQUNyRDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBLG9CQUFvQixxQkFBcUI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxvQkFBb0IscUJBQXFCO0FBQ3pDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLEdBQUc7O0FBRUg7QUFDQSxvQkFBb0IsUUFBUTtBQUM1QjtBQUNBO0FBQ0EsSUFBSTtBQUNKLHFCQUFxQixTQUFTO0FBQzlCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLDJCQUEyQiw0QkFBNEI7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBLG1CQUFtQixvQkFBb0I7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQSxzQkFBc0IsU0FBUztBQUMvQjtBQUNBO0FBQ0E7O0FBRUEsc0JBQXNCLHVCQUF1QjtBQUM3Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBLFFBQVE7QUFDUjtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsS0FBSztBQUNMLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxZQUFZLGFBQWE7QUFDekI7QUFDQSw2QkFBNkIsV0FBVztBQUN4QztBQUNBLEdBQUc7QUFDSDs7QUFFQSxpQkFBaUIsa0JBQWtCO0FBQ25DO0FBQ0E7O0FBRUEsaUJBQWlCLGtCQUFrQjtBQUNuQztBQUNBOztBQUVBLDJCQUEyQiw0QkFBNEI7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGdCQUFnQixpQkFBaUI7QUFDakM7QUFDQTs7QUFFQSx3QkFBd0IseUJBQXlCO0FBQ2pEO0FBQ0E7O0FBRUEscUJBQXFCLHNCQUFzQjtBQUMzQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxzQkFBc0IsdUJBQXVCO0FBQzdDO0FBQ0E7QUFDQTs7QUFFQSxrQ0FBa0MsbUNBQW1DO0FBQ3JFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZ0JBQWdCLGlCQUFpQjtBQUNqQztBQUNBO0FBQ0E7QUFDQTs7QUFFQSxnQkFBZ0IsaUJBQWlCO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGVBQWUsZ0JBQWdCO0FBQy9COztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGVBQWUsZ0JBQWdCO0FBQy9COztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHdCQUF3Qix5QkFBeUI7QUFDakQsOEJBQThCLElBQUksNEJBQTRCLElBQUksTUFBTSxJQUFJO0FBQzVFOztBQUVBLHdCQUF3Qix5QkFBeUI7QUFDakQsOEJBQThCLElBQUksWUFBWSxJQUFJLE1BQU0sSUFBSSxNQUFNLElBQUk7QUFDdEU7O0FBRUEsOEJBQThCLCtCQUErQjtBQUM3RDtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2VsZW1lbnQtdWkvbGliL3V0aWxzL2RhdGUtdXRpbC5qcz9kYjYxIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMudmFsaWRhdGVSYW5nZUluT25lTW9udGggPSBleHBvcnRzLmV4dHJhY3RUaW1lRm9ybWF0ID0gZXhwb3J0cy5leHRyYWN0RGF0ZUZvcm1hdCA9IGV4cG9ydHMubmV4dFllYXIgPSBleHBvcnRzLnByZXZZZWFyID0gZXhwb3J0cy5uZXh0TW9udGggPSBleHBvcnRzLnByZXZNb250aCA9IGV4cG9ydHMuY2hhbmdlWWVhck1vbnRoQW5kQ2xhbXBEYXRlID0gZXhwb3J0cy50aW1lV2l0aGluUmFuZ2UgPSBleHBvcnRzLmxpbWl0VGltZVJhbmdlID0gZXhwb3J0cy5jbGVhck1pbGxpc2Vjb25kcyA9IGV4cG9ydHMuY2xlYXJUaW1lID0gZXhwb3J0cy5tb2RpZnlXaXRoVGltZVN0cmluZyA9IGV4cG9ydHMubW9kaWZ5VGltZSA9IGV4cG9ydHMubW9kaWZ5RGF0ZSA9IGV4cG9ydHMucmFuZ2UgPSBleHBvcnRzLmdldFJhbmdlTWludXRlcyA9IGV4cG9ydHMuZ2V0TW9udGhEYXlzID0gZXhwb3J0cy5nZXRQcmV2TW9udGhMYXN0RGF5cyA9IGV4cG9ydHMuZ2V0UmFuZ2VIb3VycyA9IGV4cG9ydHMuZ2V0V2Vla051bWJlciA9IGV4cG9ydHMuZ2V0U3RhcnREYXRlT2ZNb250aCA9IGV4cG9ydHMubmV4dERhdGUgPSBleHBvcnRzLnByZXZEYXRlID0gZXhwb3J0cy5nZXRGaXJzdERheU9mTW9udGggPSBleHBvcnRzLmdldERheUNvdW50T2ZZZWFyID0gZXhwb3J0cy5nZXREYXlDb3VudE9mTW9udGggPSBleHBvcnRzLnBhcnNlRGF0ZSA9IGV4cG9ydHMuZm9ybWF0RGF0ZSA9IGV4cG9ydHMuaXNEYXRlT2JqZWN0ID0gZXhwb3J0cy5pc0RhdGUgPSBleHBvcnRzLnRvRGF0ZSA9IGV4cG9ydHMuZ2V0STE4blNldHRpbmdzID0gdW5kZWZpbmVkO1xuXG52YXIgX2RhdGUgPSByZXF1aXJlKCdlbGVtZW50LXVpL2xpYi91dGlscy9kYXRlJyk7XG5cbnZhciBfZGF0ZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9kYXRlKTtcblxudmFyIF9sb2NhbGUgPSByZXF1aXJlKCdlbGVtZW50LXVpL2xpYi9sb2NhbGUnKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxudmFyIHdlZWtzID0gWydzdW4nLCAnbW9uJywgJ3R1ZScsICd3ZWQnLCAndGh1JywgJ2ZyaScsICdzYXQnXTtcbnZhciBtb250aHMgPSBbJ2phbicsICdmZWInLCAnbWFyJywgJ2FwcicsICdtYXknLCAnanVuJywgJ2p1bCcsICdhdWcnLCAnc2VwJywgJ29jdCcsICdub3YnLCAnZGVjJ107XG5cbnZhciBuZXdBcnJheSA9IGZ1bmN0aW9uIG5ld0FycmF5KHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPD0gZW5kOyBpKyspIHtcbiAgICByZXN1bHQucHVzaChpKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcblxudmFyIGdldEkxOG5TZXR0aW5ncyA9IGV4cG9ydHMuZ2V0STE4blNldHRpbmdzID0gZnVuY3Rpb24gZ2V0STE4blNldHRpbmdzKCkge1xuICByZXR1cm4ge1xuICAgIGRheU5hbWVzU2hvcnQ6IHdlZWtzLm1hcChmdW5jdGlvbiAod2Vlaykge1xuICAgICAgcmV0dXJuICgwLCBfbG9jYWxlLnQpKCdlbC5kYXRlcGlja2VyLndlZWtzLicgKyB3ZWVrKTtcbiAgICB9KSxcbiAgICBkYXlOYW1lczogd2Vla3MubWFwKGZ1bmN0aW9uICh3ZWVrKSB7XG4gICAgICByZXR1cm4gKDAsIF9sb2NhbGUudCkoJ2VsLmRhdGVwaWNrZXIud2Vla3MuJyArIHdlZWspO1xuICAgIH0pLFxuICAgIG1vbnRoTmFtZXNTaG9ydDogbW9udGhzLm1hcChmdW5jdGlvbiAobW9udGgpIHtcbiAgICAgIHJldHVybiAoMCwgX2xvY2FsZS50KSgnZWwuZGF0ZXBpY2tlci5tb250aHMuJyArIG1vbnRoKTtcbiAgICB9KSxcbiAgICBtb250aE5hbWVzOiBtb250aHMubWFwKGZ1bmN0aW9uIChtb250aCwgaW5kZXgpIHtcbiAgICAgIHJldHVybiAoMCwgX2xvY2FsZS50KSgnZWwuZGF0ZXBpY2tlci5tb250aCcgKyAoaW5kZXggKyAxKSk7XG4gICAgfSksXG4gICAgYW1QbTogWydhbScsICdwbSddXG4gIH07XG59O1xuXG52YXIgdG9EYXRlID0gZXhwb3J0cy50b0RhdGUgPSBmdW5jdGlvbiB0b0RhdGUoZGF0ZSkge1xuICByZXR1cm4gaXNEYXRlKGRhdGUpID8gbmV3IERhdGUoZGF0ZSkgOiBudWxsO1xufTtcblxudmFyIGlzRGF0ZSA9IGV4cG9ydHMuaXNEYXRlID0gZnVuY3Rpb24gaXNEYXRlKGRhdGUpIHtcbiAgaWYgKGRhdGUgPT09IG51bGwgfHwgZGF0ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XG4gIGlmIChpc05hTihuZXcgRGF0ZShkYXRlKS5nZXRUaW1lKCkpKSByZXR1cm4gZmFsc2U7XG4gIGlmIChBcnJheS5pc0FycmF5KGRhdGUpKSByZXR1cm4gZmFsc2U7IC8vIGRlYWwgd2l0aCBgbmV3IERhdGUoWyBuZXcgRGF0ZSgpIF0pIC0+IG5ldyBEYXRlKClgXG4gIHJldHVybiB0cnVlO1xufTtcblxudmFyIGlzRGF0ZU9iamVjdCA9IGV4cG9ydHMuaXNEYXRlT2JqZWN0ID0gZnVuY3Rpb24gaXNEYXRlT2JqZWN0KHZhbCkge1xuICByZXR1cm4gdmFsIGluc3RhbmNlb2YgRGF0ZTtcbn07XG5cbnZhciBmb3JtYXREYXRlID0gZXhwb3J0cy5mb3JtYXREYXRlID0gZnVuY3Rpb24gZm9ybWF0RGF0ZShkYXRlLCBmb3JtYXQpIHtcbiAgZGF0ZSA9IHRvRGF0ZShkYXRlKTtcbiAgaWYgKCFkYXRlKSByZXR1cm4gJyc7XG4gIHJldHVybiBfZGF0ZTIuZGVmYXVsdC5mb3JtYXQoZGF0ZSwgZm9ybWF0IHx8ICd5eXl5LU1NLWRkJywgZ2V0STE4blNldHRpbmdzKCkpO1xufTtcblxudmFyIHBhcnNlRGF0ZSA9IGV4cG9ydHMucGFyc2VEYXRlID0gZnVuY3Rpb24gcGFyc2VEYXRlKHN0cmluZywgZm9ybWF0KSB7XG4gIHJldHVybiBfZGF0ZTIuZGVmYXVsdC5wYXJzZShzdHJpbmcsIGZvcm1hdCB8fCAneXl5eS1NTS1kZCcsIGdldEkxOG5TZXR0aW5ncygpKTtcbn07XG5cbnZhciBnZXREYXlDb3VudE9mTW9udGggPSBleHBvcnRzLmdldERheUNvdW50T2ZNb250aCA9IGZ1bmN0aW9uIGdldERheUNvdW50T2ZNb250aCh5ZWFyLCBtb250aCkge1xuICBpZiAoaXNOYU4oK21vbnRoKSkgcmV0dXJuIDMxO1xuXG4gIHJldHVybiBuZXcgRGF0ZSh5ZWFyLCArbW9udGggKyAxLCAwKS5nZXREYXRlKCk7XG59O1xuXG52YXIgZ2V0RGF5Q291bnRPZlllYXIgPSBleHBvcnRzLmdldERheUNvdW50T2ZZZWFyID0gZnVuY3Rpb24gZ2V0RGF5Q291bnRPZlllYXIoeWVhcikge1xuICB2YXIgaXNMZWFwWWVhciA9IHllYXIgJSA0MDAgPT09IDAgfHwgeWVhciAlIDEwMCAhPT0gMCAmJiB5ZWFyICUgNCA9PT0gMDtcbiAgcmV0dXJuIGlzTGVhcFllYXIgPyAzNjYgOiAzNjU7XG59O1xuXG52YXIgZ2V0Rmlyc3REYXlPZk1vbnRoID0gZXhwb3J0cy5nZXRGaXJzdERheU9mTW9udGggPSBmdW5jdGlvbiBnZXRGaXJzdERheU9mTW9udGgoZGF0ZSkge1xuICB2YXIgdGVtcCA9IG5ldyBEYXRlKGRhdGUuZ2V0VGltZSgpKTtcbiAgdGVtcC5zZXREYXRlKDEpO1xuICByZXR1cm4gdGVtcC5nZXREYXkoKTtcbn07XG5cbi8vIHNlZTogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzY3NDUzOS9pbmNyZW1lbnRpbmctYS1kYXRlLWluLWphdmFzY3JpcHRcbi8vIHtwcmV2LCBuZXh0fSBEYXRlIHNob3VsZCB3b3JrIGZvciBEYXlsaWdodCBTYXZpbmcgVGltZVxuLy8gQWRkaW5nIDI0ICogNjAgKiA2MCAqIDEwMDAgZG9lcyBub3Qgd29yayBpbiB0aGUgYWJvdmUgc2NlbmFyaW9cbnZhciBwcmV2RGF0ZSA9IGV4cG9ydHMucHJldkRhdGUgPSBmdW5jdGlvbiBwcmV2RGF0ZShkYXRlKSB7XG4gIHZhciBhbW91bnQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IDE7XG5cbiAgcmV0dXJuIG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpLCBkYXRlLmdldERhdGUoKSAtIGFtb3VudCk7XG59O1xuXG52YXIgbmV4dERhdGUgPSBleHBvcnRzLm5leHREYXRlID0gZnVuY3Rpb24gbmV4dERhdGUoZGF0ZSkge1xuICB2YXIgYW1vdW50ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAxO1xuXG4gIHJldHVybiBuZXcgRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCkgKyBhbW91bnQpO1xufTtcblxudmFyIGdldFN0YXJ0RGF0ZU9mTW9udGggPSBleHBvcnRzLmdldFN0YXJ0RGF0ZU9mTW9udGggPSBmdW5jdGlvbiBnZXRTdGFydERhdGVPZk1vbnRoKHllYXIsIG1vbnRoKSB7XG4gIHZhciByZXN1bHQgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgMSk7XG4gIHZhciBkYXkgPSByZXN1bHQuZ2V0RGF5KCk7XG5cbiAgaWYgKGRheSA9PT0gMCkge1xuICAgIHJldHVybiBwcmV2RGF0ZShyZXN1bHQsIDcpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBwcmV2RGF0ZShyZXN1bHQsIGRheSk7XG4gIH1cbn07XG5cbnZhciBnZXRXZWVrTnVtYmVyID0gZXhwb3J0cy5nZXRXZWVrTnVtYmVyID0gZnVuY3Rpb24gZ2V0V2Vla051bWJlcihzcmMpIHtcbiAgaWYgKCFpc0RhdGUoc3JjKSkgcmV0dXJuIG51bGw7XG4gIHZhciBkYXRlID0gbmV3IERhdGUoc3JjLmdldFRpbWUoKSk7XG4gIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gIC8vIFRodXJzZGF5IGluIGN1cnJlbnQgd2VlayBkZWNpZGVzIHRoZSB5ZWFyLlxuICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgKyAzIC0gKGRhdGUuZ2V0RGF5KCkgKyA2KSAlIDcpO1xuICAvLyBKYW51YXJ5IDQgaXMgYWx3YXlzIGluIHdlZWsgMS5cbiAgdmFyIHdlZWsxID0gbmV3IERhdGUoZGF0ZS5nZXRGdWxsWWVhcigpLCAwLCA0KTtcbiAgLy8gQWRqdXN0IHRvIFRodXJzZGF5IGluIHdlZWsgMSBhbmQgY291bnQgbnVtYmVyIG9mIHdlZWtzIGZyb20gZGF0ZSB0byB3ZWVrIDEuXG4gIC8vIFJvdW5kaW5nIHNob3VsZCBiZSBmaW5lIGZvciBEYXlsaWdodCBTYXZpbmcgVGltZS4gSXRzIHNoaWZ0IHNob3VsZCBuZXZlciBiZSBtb3JlIHRoYW4gMTIgaG91cnMuXG4gIHJldHVybiAxICsgTWF0aC5yb3VuZCgoKGRhdGUuZ2V0VGltZSgpIC0gd2VlazEuZ2V0VGltZSgpKSAvIDg2NDAwMDAwIC0gMyArICh3ZWVrMS5nZXREYXkoKSArIDYpICUgNykgLyA3KTtcbn07XG5cbnZhciBnZXRSYW5nZUhvdXJzID0gZXhwb3J0cy5nZXRSYW5nZUhvdXJzID0gZnVuY3Rpb24gZ2V0UmFuZ2VIb3VycyhyYW5nZXMpIHtcbiAgdmFyIGhvdXJzID0gW107XG4gIHZhciBkaXNhYmxlZEhvdXJzID0gW107XG5cbiAgKHJhbmdlcyB8fCBbXSkuZm9yRWFjaChmdW5jdGlvbiAocmFuZ2UpIHtcbiAgICB2YXIgdmFsdWUgPSByYW5nZS5tYXAoZnVuY3Rpb24gKGRhdGUpIHtcbiAgICAgIHJldHVybiBkYXRlLmdldEhvdXJzKCk7XG4gICAgfSk7XG5cbiAgICBkaXNhYmxlZEhvdXJzID0gZGlzYWJsZWRIb3Vycy5jb25jYXQobmV3QXJyYXkodmFsdWVbMF0sIHZhbHVlWzFdKSk7XG4gIH0pO1xuXG4gIGlmIChkaXNhYmxlZEhvdXJzLmxlbmd0aCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMjQ7IGkrKykge1xuICAgICAgaG91cnNbaV0gPSBkaXNhYmxlZEhvdXJzLmluZGV4T2YoaSkgPT09IC0xO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgMjQ7IF9pKyspIHtcbiAgICAgIGhvdXJzW19pXSA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBob3Vycztcbn07XG5cbnZhciBnZXRQcmV2TW9udGhMYXN0RGF5cyA9IGV4cG9ydHMuZ2V0UHJldk1vbnRoTGFzdERheXMgPSBmdW5jdGlvbiBnZXRQcmV2TW9udGhMYXN0RGF5cyhkYXRlLCBhbW91bnQpIHtcbiAgaWYgKGFtb3VudCA8PSAwKSByZXR1cm4gW107XG4gIHZhciB0ZW1wID0gbmV3IERhdGUoZGF0ZS5nZXRUaW1lKCkpO1xuICB0ZW1wLnNldERhdGUoMCk7XG4gIHZhciBsYXN0RGF5ID0gdGVtcC5nZXREYXRlKCk7XG4gIHJldHVybiByYW5nZShhbW91bnQpLm1hcChmdW5jdGlvbiAoXywgaW5kZXgpIHtcbiAgICByZXR1cm4gbGFzdERheSAtIChhbW91bnQgLSBpbmRleCAtIDEpO1xuICB9KTtcbn07XG5cbnZhciBnZXRNb250aERheXMgPSBleHBvcnRzLmdldE1vbnRoRGF5cyA9IGZ1bmN0aW9uIGdldE1vbnRoRGF5cyhkYXRlKSB7XG4gIHZhciB0ZW1wID0gbmV3IERhdGUoZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCkgKyAxLCAwKTtcbiAgdmFyIGRheXMgPSB0ZW1wLmdldERhdGUoKTtcbiAgcmV0dXJuIHJhbmdlKGRheXMpLm1hcChmdW5jdGlvbiAoXywgaW5kZXgpIHtcbiAgICByZXR1cm4gaW5kZXggKyAxO1xuICB9KTtcbn07XG5cbmZ1bmN0aW9uIHNldFJhbmdlRGF0YShhcnIsIHN0YXJ0LCBlbmQsIHZhbHVlKSB7XG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7XG4gICAgYXJyW2ldID0gdmFsdWU7XG4gIH1cbn1cblxudmFyIGdldFJhbmdlTWludXRlcyA9IGV4cG9ydHMuZ2V0UmFuZ2VNaW51dGVzID0gZnVuY3Rpb24gZ2V0UmFuZ2VNaW51dGVzKHJhbmdlcywgaG91cikge1xuICB2YXIgbWludXRlcyA9IG5ldyBBcnJheSg2MCk7XG5cbiAgaWYgKHJhbmdlcy5sZW5ndGggPiAwKSB7XG4gICAgcmFuZ2VzLmZvckVhY2goZnVuY3Rpb24gKHJhbmdlKSB7XG4gICAgICB2YXIgc3RhcnQgPSByYW5nZVswXTtcbiAgICAgIHZhciBlbmQgPSByYW5nZVsxXTtcbiAgICAgIHZhciBzdGFydEhvdXIgPSBzdGFydC5nZXRIb3VycygpO1xuICAgICAgdmFyIHN0YXJ0TWludXRlID0gc3RhcnQuZ2V0TWludXRlcygpO1xuICAgICAgdmFyIGVuZEhvdXIgPSBlbmQuZ2V0SG91cnMoKTtcbiAgICAgIHZhciBlbmRNaW51dGUgPSBlbmQuZ2V0TWludXRlcygpO1xuICAgICAgaWYgKHN0YXJ0SG91ciA9PT0gaG91ciAmJiBlbmRIb3VyICE9PSBob3VyKSB7XG4gICAgICAgIHNldFJhbmdlRGF0YShtaW51dGVzLCBzdGFydE1pbnV0ZSwgNjAsIHRydWUpO1xuICAgICAgfSBlbHNlIGlmIChzdGFydEhvdXIgPT09IGhvdXIgJiYgZW5kSG91ciA9PT0gaG91cikge1xuICAgICAgICBzZXRSYW5nZURhdGEobWludXRlcywgc3RhcnRNaW51dGUsIGVuZE1pbnV0ZSArIDEsIHRydWUpO1xuICAgICAgfSBlbHNlIGlmIChzdGFydEhvdXIgIT09IGhvdXIgJiYgZW5kSG91ciA9PT0gaG91cikge1xuICAgICAgICBzZXRSYW5nZURhdGEobWludXRlcywgMCwgZW5kTWludXRlICsgMSwgdHJ1ZSk7XG4gICAgICB9IGVsc2UgaWYgKHN0YXJ0SG91ciA8IGhvdXIgJiYgZW5kSG91ciA+IGhvdXIpIHtcbiAgICAgICAgc2V0UmFuZ2VEYXRhKG1pbnV0ZXMsIDAsIDYwLCB0cnVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBzZXRSYW5nZURhdGEobWludXRlcywgMCwgNjAsIHRydWUpO1xuICB9XG4gIHJldHVybiBtaW51dGVzO1xufTtcblxudmFyIHJhbmdlID0gZXhwb3J0cy5yYW5nZSA9IGZ1bmN0aW9uIHJhbmdlKG4pIHtcbiAgLy8gc2VlIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzM3NDY3MjUvY3JlYXRlLWEtamF2YXNjcmlwdC1hcnJheS1jb250YWluaW5nLTEtblxuICByZXR1cm4gQXJyYXkuYXBwbHkobnVsbCwgeyBsZW5ndGg6IG4gfSkubWFwKGZ1bmN0aW9uIChfLCBuKSB7XG4gICAgcmV0dXJuIG47XG4gIH0pO1xufTtcblxudmFyIG1vZGlmeURhdGUgPSBleHBvcnRzLm1vZGlmeURhdGUgPSBmdW5jdGlvbiBtb2RpZnlEYXRlKGRhdGUsIHksIG0sIGQpIHtcbiAgcmV0dXJuIG5ldyBEYXRlKHksIG0sIGQsIGRhdGUuZ2V0SG91cnMoKSwgZGF0ZS5nZXRNaW51dGVzKCksIGRhdGUuZ2V0U2Vjb25kcygpLCBkYXRlLmdldE1pbGxpc2Vjb25kcygpKTtcbn07XG5cbnZhciBtb2RpZnlUaW1lID0gZXhwb3J0cy5tb2RpZnlUaW1lID0gZnVuY3Rpb24gbW9kaWZ5VGltZShkYXRlLCBoLCBtLCBzKSB7XG4gIHJldHVybiBuZXcgRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCksIGgsIG0sIHMsIGRhdGUuZ2V0TWlsbGlzZWNvbmRzKCkpO1xufTtcblxudmFyIG1vZGlmeVdpdGhUaW1lU3RyaW5nID0gZXhwb3J0cy5tb2RpZnlXaXRoVGltZVN0cmluZyA9IGZ1bmN0aW9uIG1vZGlmeVdpdGhUaW1lU3RyaW5nKGRhdGUsIHRpbWUpIHtcbiAgaWYgKGRhdGUgPT0gbnVsbCB8fCAhdGltZSkge1xuICAgIHJldHVybiBkYXRlO1xuICB9XG4gIHRpbWUgPSBwYXJzZURhdGUodGltZSwgJ0hIOm1tOnNzJyk7XG4gIHJldHVybiBtb2RpZnlUaW1lKGRhdGUsIHRpbWUuZ2V0SG91cnMoKSwgdGltZS5nZXRNaW51dGVzKCksIHRpbWUuZ2V0U2Vjb25kcygpKTtcbn07XG5cbnZhciBjbGVhclRpbWUgPSBleHBvcnRzLmNsZWFyVGltZSA9IGZ1bmN0aW9uIGNsZWFyVGltZShkYXRlKSB7XG4gIHJldHVybiBuZXcgRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCkpO1xufTtcblxudmFyIGNsZWFyTWlsbGlzZWNvbmRzID0gZXhwb3J0cy5jbGVhck1pbGxpc2Vjb25kcyA9IGZ1bmN0aW9uIGNsZWFyTWlsbGlzZWNvbmRzKGRhdGUpIHtcbiAgcmV0dXJuIG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpLCBkYXRlLmdldERhdGUoKSwgZGF0ZS5nZXRIb3VycygpLCBkYXRlLmdldE1pbnV0ZXMoKSwgZGF0ZS5nZXRTZWNvbmRzKCksIDApO1xufTtcblxudmFyIGxpbWl0VGltZVJhbmdlID0gZXhwb3J0cy5saW1pdFRpbWVSYW5nZSA9IGZ1bmN0aW9uIGxpbWl0VGltZVJhbmdlKGRhdGUsIHJhbmdlcykge1xuICB2YXIgZm9ybWF0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiAnSEg6bW06c3MnO1xuXG4gIC8vIFRPRE86IHJlZmFjdG9yeSBhIG1vcmUgZWxlZ2FudCBzb2x1dGlvblxuICBpZiAocmFuZ2VzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGRhdGU7XG4gIHZhciBub3JtYWxpemVEYXRlID0gZnVuY3Rpb24gbm9ybWFsaXplRGF0ZShkYXRlKSB7XG4gICAgcmV0dXJuIF9kYXRlMi5kZWZhdWx0LnBhcnNlKF9kYXRlMi5kZWZhdWx0LmZvcm1hdChkYXRlLCBmb3JtYXQpLCBmb3JtYXQpO1xuICB9O1xuICB2YXIgbmRhdGUgPSBub3JtYWxpemVEYXRlKGRhdGUpO1xuICB2YXIgbnJhbmdlcyA9IHJhbmdlcy5tYXAoZnVuY3Rpb24gKHJhbmdlKSB7XG4gICAgcmV0dXJuIHJhbmdlLm1hcChub3JtYWxpemVEYXRlKTtcbiAgfSk7XG4gIGlmIChucmFuZ2VzLnNvbWUoZnVuY3Rpb24gKG5yYW5nZSkge1xuICAgIHJldHVybiBuZGF0ZSA+PSBucmFuZ2VbMF0gJiYgbmRhdGUgPD0gbnJhbmdlWzFdO1xuICB9KSkgcmV0dXJuIGRhdGU7XG5cbiAgdmFyIG1pbkRhdGUgPSBucmFuZ2VzWzBdWzBdO1xuICB2YXIgbWF4RGF0ZSA9IG5yYW5nZXNbMF1bMF07XG5cbiAgbnJhbmdlcy5mb3JFYWNoKGZ1bmN0aW9uIChucmFuZ2UpIHtcbiAgICBtaW5EYXRlID0gbmV3IERhdGUoTWF0aC5taW4obnJhbmdlWzBdLCBtaW5EYXRlKSk7XG4gICAgbWF4RGF0ZSA9IG5ldyBEYXRlKE1hdGgubWF4KG5yYW5nZVsxXSwgbWluRGF0ZSkpO1xuICB9KTtcblxuICB2YXIgcmV0ID0gbmRhdGUgPCBtaW5EYXRlID8gbWluRGF0ZSA6IG1heERhdGU7XG4gIC8vIHByZXNlcnZlIFllYXIvTW9udGgvRGF0ZVxuICByZXR1cm4gbW9kaWZ5RGF0ZShyZXQsIGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpLCBkYXRlLmdldERhdGUoKSk7XG59O1xuXG52YXIgdGltZVdpdGhpblJhbmdlID0gZXhwb3J0cy50aW1lV2l0aGluUmFuZ2UgPSBmdW5jdGlvbiB0aW1lV2l0aGluUmFuZ2UoZGF0ZSwgc2VsZWN0YWJsZVJhbmdlLCBmb3JtYXQpIHtcbiAgdmFyIGxpbWl0ZWREYXRlID0gbGltaXRUaW1lUmFuZ2UoZGF0ZSwgc2VsZWN0YWJsZVJhbmdlLCBmb3JtYXQpO1xuICByZXR1cm4gbGltaXRlZERhdGUuZ2V0VGltZSgpID09PSBkYXRlLmdldFRpbWUoKTtcbn07XG5cbnZhciBjaGFuZ2VZZWFyTW9udGhBbmRDbGFtcERhdGUgPSBleHBvcnRzLmNoYW5nZVllYXJNb250aEFuZENsYW1wRGF0ZSA9IGZ1bmN0aW9uIGNoYW5nZVllYXJNb250aEFuZENsYW1wRGF0ZShkYXRlLCB5ZWFyLCBtb250aCkge1xuICAvLyBjbGFtcCBkYXRlIHRvIHRoZSBudW1iZXIgb2YgZGF5cyBpbiBgeWVhcmAsIGBtb250aGBcbiAgLy8gZWc6ICgyMDEwLTEtMzEsIDIwMTAsIDIpID0+IDIwMTAtMi0yOFxuICB2YXIgbW9udGhEYXRlID0gTWF0aC5taW4oZGF0ZS5nZXREYXRlKCksIGdldERheUNvdW50T2ZNb250aCh5ZWFyLCBtb250aCkpO1xuICByZXR1cm4gbW9kaWZ5RGF0ZShkYXRlLCB5ZWFyLCBtb250aCwgbW9udGhEYXRlKTtcbn07XG5cbnZhciBwcmV2TW9udGggPSBleHBvcnRzLnByZXZNb250aCA9IGZ1bmN0aW9uIHByZXZNb250aChkYXRlKSB7XG4gIHZhciB5ZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xuICB2YXIgbW9udGggPSBkYXRlLmdldE1vbnRoKCk7XG4gIHJldHVybiBtb250aCA9PT0gMCA/IGNoYW5nZVllYXJNb250aEFuZENsYW1wRGF0ZShkYXRlLCB5ZWFyIC0gMSwgMTEpIDogY2hhbmdlWWVhck1vbnRoQW5kQ2xhbXBEYXRlKGRhdGUsIHllYXIsIG1vbnRoIC0gMSk7XG59O1xuXG52YXIgbmV4dE1vbnRoID0gZXhwb3J0cy5uZXh0TW9udGggPSBmdW5jdGlvbiBuZXh0TW9udGgoZGF0ZSkge1xuICB2YXIgeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTtcbiAgdmFyIG1vbnRoID0gZGF0ZS5nZXRNb250aCgpO1xuICByZXR1cm4gbW9udGggPT09IDExID8gY2hhbmdlWWVhck1vbnRoQW5kQ2xhbXBEYXRlKGRhdGUsIHllYXIgKyAxLCAwKSA6IGNoYW5nZVllYXJNb250aEFuZENsYW1wRGF0ZShkYXRlLCB5ZWFyLCBtb250aCArIDEpO1xufTtcblxudmFyIHByZXZZZWFyID0gZXhwb3J0cy5wcmV2WWVhciA9IGZ1bmN0aW9uIHByZXZZZWFyKGRhdGUpIHtcbiAgdmFyIGFtb3VudCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogMTtcblxuICB2YXIgeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTtcbiAgdmFyIG1vbnRoID0gZGF0ZS5nZXRNb250aCgpO1xuICByZXR1cm4gY2hhbmdlWWVhck1vbnRoQW5kQ2xhbXBEYXRlKGRhdGUsIHllYXIgLSBhbW91bnQsIG1vbnRoKTtcbn07XG5cbnZhciBuZXh0WWVhciA9IGV4cG9ydHMubmV4dFllYXIgPSBmdW5jdGlvbiBuZXh0WWVhcihkYXRlKSB7XG4gIHZhciBhbW91bnQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IDE7XG5cbiAgdmFyIHllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7XG4gIHZhciBtb250aCA9IGRhdGUuZ2V0TW9udGgoKTtcbiAgcmV0dXJuIGNoYW5nZVllYXJNb250aEFuZENsYW1wRGF0ZShkYXRlLCB5ZWFyICsgYW1vdW50LCBtb250aCk7XG59O1xuXG52YXIgZXh0cmFjdERhdGVGb3JtYXQgPSBleHBvcnRzLmV4dHJhY3REYXRlRm9ybWF0ID0gZnVuY3Rpb24gZXh0cmFjdERhdGVGb3JtYXQoZm9ybWF0KSB7XG4gIHJldHVybiBmb3JtYXQucmVwbGFjZSgvXFxXP217MSwyfXxcXFc/WlovZywgJycpLnJlcGxhY2UoL1xcVz9oezEsMn18XFxXP3N7MSwzfXxcXFc/YS9naSwgJycpLnRyaW0oKTtcbn07XG5cbnZhciBleHRyYWN0VGltZUZvcm1hdCA9IGV4cG9ydHMuZXh0cmFjdFRpbWVGb3JtYXQgPSBmdW5jdGlvbiBleHRyYWN0VGltZUZvcm1hdChmb3JtYXQpIHtcbiAgcmV0dXJuIGZvcm1hdC5yZXBsYWNlKC9cXFc/RHsxLDJ9fFxcVz9Eb3xcXFc/ZHsxLDR9fFxcVz9NezEsNH18XFxXP3l7Miw0fS9nLCAnJykudHJpbSgpO1xufTtcblxudmFyIHZhbGlkYXRlUmFuZ2VJbk9uZU1vbnRoID0gZXhwb3J0cy52YWxpZGF0ZVJhbmdlSW5PbmVNb250aCA9IGZ1bmN0aW9uIHZhbGlkYXRlUmFuZ2VJbk9uZU1vbnRoKHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIHN0YXJ0LmdldE1vbnRoKCkgPT09IGVuZC5nZXRNb250aCgpICYmIHN0YXJ0LmdldEZ1bGxZZWFyKCkgPT09IGVuZC5nZXRGdWxsWWVhcigpO1xufTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/utils/date-util.js\n");

/***/ }),

/***/ "./node_modules/element-ui/lib/utils/date.js":
/*!***************************************************!*\
  !*** ./node_modules/element-ui/lib/utils/date.js ***!
  \***************************************************/
/***/ ((module, exports, __webpack_require__) => {

"use strict";
eval("var __WEBPACK_AMD_DEFINE_RESULT__;\n\n/* Modified from https://github.com/taylorhakes/fecha\n *\n * The MIT License (MIT)\n *\n * Copyright (c) 2015 Taylor Hakes\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n *     The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n *     THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n *     FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n *     OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n/*eslint-disable*/\n// 把 YYYY-MM-DD 改成了 yyyy-MM-dd\n(function (main) {\n  'use strict';\n\n  /**\n   * Parse or format dates\n   * @class fecha\n   */\n\n  var fecha = {};\n  var token = /d{1,4}|M{1,4}|yy(?:yy)?|S{1,3}|Do|ZZ|([HhMsDm])\\1?|[aA]|\"[^\"]*\"|'[^']*'/g;\n  var twoDigits = '\\\\d\\\\d?';\n  var threeDigits = '\\\\d{3}';\n  var fourDigits = '\\\\d{4}';\n  var word = '[^\\\\s]+';\n  var literal = /\\[([^]*?)\\]/gm;\n  var noop = function noop() {};\n\n  function regexEscape(str) {\n    return str.replace(/[|\\\\{()[^$+*?.-]/g, '\\\\$&');\n  }\n\n  function shorten(arr, sLen) {\n    var newArr = [];\n    for (var i = 0, len = arr.length; i < len; i++) {\n      newArr.push(arr[i].substr(0, sLen));\n    }\n    return newArr;\n  }\n\n  function monthUpdate(arrName) {\n    return function (d, v, i18n) {\n      var index = i18n[arrName].indexOf(v.charAt(0).toUpperCase() + v.substr(1).toLowerCase());\n      if (~index) {\n        d.month = index;\n      }\n    };\n  }\n\n  function pad(val, len) {\n    val = String(val);\n    len = len || 2;\n    while (val.length < len) {\n      val = '0' + val;\n    }\n    return val;\n  }\n\n  var dayNames = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\n  var monthNames = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];\n  var monthNamesShort = shorten(monthNames, 3);\n  var dayNamesShort = shorten(dayNames, 3);\n  fecha.i18n = {\n    dayNamesShort: dayNamesShort,\n    dayNames: dayNames,\n    monthNamesShort: monthNamesShort,\n    monthNames: monthNames,\n    amPm: ['am', 'pm'],\n    DoFn: function DoFn(D) {\n      return D + ['th', 'st', 'nd', 'rd'][D % 10 > 3 ? 0 : (D - D % 10 !== 10) * D % 10];\n    }\n  };\n\n  var formatFlags = {\n    D: function D(dateObj) {\n      return dateObj.getDay();\n    },\n    DD: function DD(dateObj) {\n      return pad(dateObj.getDay());\n    },\n    Do: function Do(dateObj, i18n) {\n      return i18n.DoFn(dateObj.getDate());\n    },\n    d: function d(dateObj) {\n      return dateObj.getDate();\n    },\n    dd: function dd(dateObj) {\n      return pad(dateObj.getDate());\n    },\n    ddd: function ddd(dateObj, i18n) {\n      return i18n.dayNamesShort[dateObj.getDay()];\n    },\n    dddd: function dddd(dateObj, i18n) {\n      return i18n.dayNames[dateObj.getDay()];\n    },\n    M: function M(dateObj) {\n      return dateObj.getMonth() + 1;\n    },\n    MM: function MM(dateObj) {\n      return pad(dateObj.getMonth() + 1);\n    },\n    MMM: function MMM(dateObj, i18n) {\n      return i18n.monthNamesShort[dateObj.getMonth()];\n    },\n    MMMM: function MMMM(dateObj, i18n) {\n      return i18n.monthNames[dateObj.getMonth()];\n    },\n    yy: function yy(dateObj) {\n      return pad(String(dateObj.getFullYear()), 4).substr(2);\n    },\n    yyyy: function yyyy(dateObj) {\n      return pad(dateObj.getFullYear(), 4);\n    },\n    h: function h(dateObj) {\n      return dateObj.getHours() % 12 || 12;\n    },\n    hh: function hh(dateObj) {\n      return pad(dateObj.getHours() % 12 || 12);\n    },\n    H: function H(dateObj) {\n      return dateObj.getHours();\n    },\n    HH: function HH(dateObj) {\n      return pad(dateObj.getHours());\n    },\n    m: function m(dateObj) {\n      return dateObj.getMinutes();\n    },\n    mm: function mm(dateObj) {\n      return pad(dateObj.getMinutes());\n    },\n    s: function s(dateObj) {\n      return dateObj.getSeconds();\n    },\n    ss: function ss(dateObj) {\n      return pad(dateObj.getSeconds());\n    },\n    S: function S(dateObj) {\n      return Math.round(dateObj.getMilliseconds() / 100);\n    },\n    SS: function SS(dateObj) {\n      return pad(Math.round(dateObj.getMilliseconds() / 10), 2);\n    },\n    SSS: function SSS(dateObj) {\n      return pad(dateObj.getMilliseconds(), 3);\n    },\n    a: function a(dateObj, i18n) {\n      return dateObj.getHours() < 12 ? i18n.amPm[0] : i18n.amPm[1];\n    },\n    A: function A(dateObj, i18n) {\n      return dateObj.getHours() < 12 ? i18n.amPm[0].toUpperCase() : i18n.amPm[1].toUpperCase();\n    },\n    ZZ: function ZZ(dateObj) {\n      var o = dateObj.getTimezoneOffset();\n      return (o > 0 ? '-' : '+') + pad(Math.floor(Math.abs(o) / 60) * 100 + Math.abs(o) % 60, 4);\n    }\n  };\n\n  var parseFlags = {\n    d: [twoDigits, function (d, v) {\n      d.day = v;\n    }],\n    Do: [twoDigits + word, function (d, v) {\n      d.day = parseInt(v, 10);\n    }],\n    M: [twoDigits, function (d, v) {\n      d.month = v - 1;\n    }],\n    yy: [twoDigits, function (d, v) {\n      var da = new Date(),\n          cent = +('' + da.getFullYear()).substr(0, 2);\n      d.year = '' + (v > 68 ? cent - 1 : cent) + v;\n    }],\n    h: [twoDigits, function (d, v) {\n      d.hour = v;\n    }],\n    m: [twoDigits, function (d, v) {\n      d.minute = v;\n    }],\n    s: [twoDigits, function (d, v) {\n      d.second = v;\n    }],\n    yyyy: [fourDigits, function (d, v) {\n      d.year = v;\n    }],\n    S: ['\\\\d', function (d, v) {\n      d.millisecond = v * 100;\n    }],\n    SS: ['\\\\d{2}', function (d, v) {\n      d.millisecond = v * 10;\n    }],\n    SSS: [threeDigits, function (d, v) {\n      d.millisecond = v;\n    }],\n    D: [twoDigits, noop],\n    ddd: [word, noop],\n    MMM: [word, monthUpdate('monthNamesShort')],\n    MMMM: [word, monthUpdate('monthNames')],\n    a: [word, function (d, v, i18n) {\n      var val = v.toLowerCase();\n      if (val === i18n.amPm[0]) {\n        d.isPm = false;\n      } else if (val === i18n.amPm[1]) {\n        d.isPm = true;\n      }\n    }],\n    ZZ: ['[^\\\\s]*?[\\\\+\\\\-]\\\\d\\\\d:?\\\\d\\\\d|[^\\\\s]*?Z', function (d, v) {\n      var parts = (v + '').match(/([+-]|\\d\\d)/gi),\n          minutes;\n\n      if (parts) {\n        minutes = +(parts[1] * 60) + parseInt(parts[2], 10);\n        d.timezoneOffset = parts[0] === '+' ? minutes : -minutes;\n      }\n    }]\n  };\n  parseFlags.dd = parseFlags.d;\n  parseFlags.dddd = parseFlags.ddd;\n  parseFlags.DD = parseFlags.D;\n  parseFlags.mm = parseFlags.m;\n  parseFlags.hh = parseFlags.H = parseFlags.HH = parseFlags.h;\n  parseFlags.MM = parseFlags.M;\n  parseFlags.ss = parseFlags.s;\n  parseFlags.A = parseFlags.a;\n\n  // Some common format strings\n  fecha.masks = {\n    default: 'ddd MMM dd yyyy HH:mm:ss',\n    shortDate: 'M/D/yy',\n    mediumDate: 'MMM d, yyyy',\n    longDate: 'MMMM d, yyyy',\n    fullDate: 'dddd, MMMM d, yyyy',\n    shortTime: 'HH:mm',\n    mediumTime: 'HH:mm:ss',\n    longTime: 'HH:mm:ss.SSS'\n  };\n\n  /***\n   * Format a date\n   * @method format\n   * @param {Date|number} dateObj\n   * @param {string} mask Format of the date, i.e. 'mm-dd-yy' or 'shortDate'\n   */\n  fecha.format = function (dateObj, mask, i18nSettings) {\n    var i18n = i18nSettings || fecha.i18n;\n\n    if (typeof dateObj === 'number') {\n      dateObj = new Date(dateObj);\n    }\n\n    if (Object.prototype.toString.call(dateObj) !== '[object Date]' || isNaN(dateObj.getTime())) {\n      throw new Error('Invalid Date in fecha.format');\n    }\n\n    mask = fecha.masks[mask] || mask || fecha.masks['default'];\n\n    var literals = [];\n\n    // Make literals inactive by replacing them with ??\n    mask = mask.replace(literal, function ($0, $1) {\n      literals.push($1);\n      return '@@@';\n    });\n    // Apply formatting rules\n    mask = mask.replace(token, function ($0) {\n      return $0 in formatFlags ? formatFlags[$0](dateObj, i18n) : $0.slice(1, $0.length - 1);\n    });\n    // Inline literal values back into the formatted value\n    return mask.replace(/@@@/g, function () {\n      return literals.shift();\n    });\n  };\n\n  /**\n   * Parse a date string into an object, changes - into /\n   * @method parse\n   * @param {string} dateStr Date string\n   * @param {string} format Date parse format\n   * @returns {Date|boolean}\n   */\n  fecha.parse = function (dateStr, format, i18nSettings) {\n    var i18n = i18nSettings || fecha.i18n;\n\n    if (typeof format !== 'string') {\n      throw new Error('Invalid format in fecha.parse');\n    }\n\n    format = fecha.masks[format] || format;\n\n    // Avoid regular expression denial of service, fail early for really long strings\n    // https://www.owasp.org/index.php/Regular_expression_Denial_of_Service_-_ReDoS\n    if (dateStr.length > 1000) {\n      return null;\n    }\n\n    var dateInfo = {};\n    var parseInfo = [];\n    var literals = [];\n    format = format.replace(literal, function ($0, $1) {\n      literals.push($1);\n      return '@@@';\n    });\n    var newFormat = regexEscape(format).replace(token, function ($0) {\n      if (parseFlags[$0]) {\n        var info = parseFlags[$0];\n        parseInfo.push(info[1]);\n        return '(' + info[0] + ')';\n      }\n\n      return $0;\n    });\n    newFormat = newFormat.replace(/@@@/g, function () {\n      return literals.shift();\n    });\n    var matches = dateStr.match(new RegExp(newFormat, 'i'));\n    if (!matches) {\n      return null;\n    }\n\n    for (var i = 1; i < matches.length; i++) {\n      parseInfo[i - 1](dateInfo, matches[i], i18n);\n    }\n\n    var today = new Date();\n    if (dateInfo.isPm === true && dateInfo.hour != null && +dateInfo.hour !== 12) {\n      dateInfo.hour = +dateInfo.hour + 12;\n    } else if (dateInfo.isPm === false && +dateInfo.hour === 12) {\n      dateInfo.hour = 0;\n    }\n\n    var date;\n    if (dateInfo.timezoneOffset != null) {\n      dateInfo.minute = +(dateInfo.minute || 0) - +dateInfo.timezoneOffset;\n      date = new Date(Date.UTC(dateInfo.year || today.getFullYear(), dateInfo.month || 0, dateInfo.day || 1, dateInfo.hour || 0, dateInfo.minute || 0, dateInfo.second || 0, dateInfo.millisecond || 0));\n    } else {\n      date = new Date(dateInfo.year || today.getFullYear(), dateInfo.month || 0, dateInfo.day || 1, dateInfo.hour || 0, dateInfo.minute || 0, dateInfo.second || 0, dateInfo.millisecond || 0);\n    }\n    return date;\n  };\n\n  /* istanbul ignore next */\n  if ( true && module.exports) {\n    module.exports = fecha;\n  } else if (true) {\n    !(__WEBPACK_AMD_DEFINE_RESULT__ = (function () {\n      return fecha;\n    }).call(exports, __webpack_require__, exports, module),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n  } else {}\n})(undefined);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdXRpbHMvZGF0ZS5qcyIsIm1hcHBpbmdzIjoiQUFBQSxrQ0FBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxpQkFBaUIsSUFBSSxHQUFHLElBQUksYUFBYSxJQUFJO0FBQzdDO0FBQ0EseUJBQXlCLEVBQUU7QUFDM0Isd0JBQXdCLEVBQUU7QUFDMUI7QUFDQTtBQUNBOztBQUVBO0FBQ0EsNkJBQTZCO0FBQzdCOztBQUVBO0FBQ0E7QUFDQSxzQ0FBc0MsU0FBUztBQUMvQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMLGNBQWMsRUFBRTtBQUNoQjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYSxhQUFhO0FBQzFCLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsUUFBUTtBQUNyQixhQUFhLFFBQVE7QUFDckIsZUFBZTtBQUNmO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsb0JBQW9CLG9CQUFvQjtBQUN4QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsTUFBTSxLQUE2QjtBQUNuQztBQUNBLElBQUksU0FBUyxJQUEwQztBQUN2RCxJQUFJLG1DQUFPO0FBQ1g7QUFDQSxLQUFLO0FBQUEsa0dBQUM7QUFDTixJQUFJLEtBQUssRUFFTjtBQUNILENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdXRpbHMvZGF0ZS5qcz9iYzA0Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyogTW9kaWZpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vdGF5bG9yaGFrZXMvZmVjaGFcbiAqXG4gKiBUaGUgTUlUIExpY2Vuc2UgKE1JVClcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUgVGF5bG9yIEhha2VzXG4gKlxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICpcbiAqICAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbiAqIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogICAgIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqICAgICBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cblxuLyplc2xpbnQtZGlzYWJsZSovXG4vLyDmioogWVlZWS1NTS1ERCDmlLnmiJDkuoYgeXl5eS1NTS1kZFxuKGZ1bmN0aW9uIChtYWluKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICAvKipcbiAgICogUGFyc2Ugb3IgZm9ybWF0IGRhdGVzXG4gICAqIEBjbGFzcyBmZWNoYVxuICAgKi9cblxuICB2YXIgZmVjaGEgPSB7fTtcbiAgdmFyIHRva2VuID0gL2R7MSw0fXxNezEsNH18eXkoPzp5eSk/fFN7MSwzfXxEb3xaWnwoW0hoTXNEbV0pXFwxP3xbYUFdfFwiW15cIl0qXCJ8J1teJ10qJy9nO1xuICB2YXIgdHdvRGlnaXRzID0gJ1xcXFxkXFxcXGQ/JztcbiAgdmFyIHRocmVlRGlnaXRzID0gJ1xcXFxkezN9JztcbiAgdmFyIGZvdXJEaWdpdHMgPSAnXFxcXGR7NH0nO1xuICB2YXIgd29yZCA9ICdbXlxcXFxzXSsnO1xuICB2YXIgbGl0ZXJhbCA9IC9cXFsoW15dKj8pXFxdL2dtO1xuICB2YXIgbm9vcCA9IGZ1bmN0aW9uIG5vb3AoKSB7fTtcblxuICBmdW5jdGlvbiByZWdleEVzY2FwZShzdHIpIHtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoL1t8XFxcXHsoKVteJCsqPy4tXS9nLCAnXFxcXCQmJyk7XG4gIH1cblxuICBmdW5jdGlvbiBzaG9ydGVuKGFyciwgc0xlbikge1xuICAgIHZhciBuZXdBcnIgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gYXJyLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBuZXdBcnIucHVzaChhcnJbaV0uc3Vic3RyKDAsIHNMZW4pKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ld0FycjtcbiAgfVxuXG4gIGZ1bmN0aW9uIG1vbnRoVXBkYXRlKGFyck5hbWUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIHYsIGkxOG4pIHtcbiAgICAgIHZhciBpbmRleCA9IGkxOG5bYXJyTmFtZV0uaW5kZXhPZih2LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdi5zdWJzdHIoMSkudG9Mb3dlckNhc2UoKSk7XG4gICAgICBpZiAofmluZGV4KSB7XG4gICAgICAgIGQubW9udGggPSBpbmRleDtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gcGFkKHZhbCwgbGVuKSB7XG4gICAgdmFsID0gU3RyaW5nKHZhbCk7XG4gICAgbGVuID0gbGVuIHx8IDI7XG4gICAgd2hpbGUgKHZhbC5sZW5ndGggPCBsZW4pIHtcbiAgICAgIHZhbCA9ICcwJyArIHZhbDtcbiAgICB9XG4gICAgcmV0dXJuIHZhbDtcbiAgfVxuXG4gIHZhciBkYXlOYW1lcyA9IFsnU3VuZGF5JywgJ01vbmRheScsICdUdWVzZGF5JywgJ1dlZG5lc2RheScsICdUaHVyc2RheScsICdGcmlkYXknLCAnU2F0dXJkYXknXTtcbiAgdmFyIG1vbnRoTmFtZXMgPSBbJ0phbnVhcnknLCAnRmVicnVhcnknLCAnTWFyY2gnLCAnQXByaWwnLCAnTWF5JywgJ0p1bmUnLCAnSnVseScsICdBdWd1c3QnLCAnU2VwdGVtYmVyJywgJ09jdG9iZXInLCAnTm92ZW1iZXInLCAnRGVjZW1iZXInXTtcbiAgdmFyIG1vbnRoTmFtZXNTaG9ydCA9IHNob3J0ZW4obW9udGhOYW1lcywgMyk7XG4gIHZhciBkYXlOYW1lc1Nob3J0ID0gc2hvcnRlbihkYXlOYW1lcywgMyk7XG4gIGZlY2hhLmkxOG4gPSB7XG4gICAgZGF5TmFtZXNTaG9ydDogZGF5TmFtZXNTaG9ydCxcbiAgICBkYXlOYW1lczogZGF5TmFtZXMsXG4gICAgbW9udGhOYW1lc1Nob3J0OiBtb250aE5hbWVzU2hvcnQsXG4gICAgbW9udGhOYW1lczogbW9udGhOYW1lcyxcbiAgICBhbVBtOiBbJ2FtJywgJ3BtJ10sXG4gICAgRG9GbjogZnVuY3Rpb24gRG9GbihEKSB7XG4gICAgICByZXR1cm4gRCArIFsndGgnLCAnc3QnLCAnbmQnLCAncmQnXVtEICUgMTAgPiAzID8gMCA6IChEIC0gRCAlIDEwICE9PSAxMCkgKiBEICUgMTBdO1xuICAgIH1cbiAgfTtcblxuICB2YXIgZm9ybWF0RmxhZ3MgPSB7XG4gICAgRDogZnVuY3Rpb24gRChkYXRlT2JqKSB7XG4gICAgICByZXR1cm4gZGF0ZU9iai5nZXREYXkoKTtcbiAgICB9LFxuICAgIEREOiBmdW5jdGlvbiBERChkYXRlT2JqKSB7XG4gICAgICByZXR1cm4gcGFkKGRhdGVPYmouZ2V0RGF5KCkpO1xuICAgIH0sXG4gICAgRG86IGZ1bmN0aW9uIERvKGRhdGVPYmosIGkxOG4pIHtcbiAgICAgIHJldHVybiBpMThuLkRvRm4oZGF0ZU9iai5nZXREYXRlKCkpO1xuICAgIH0sXG4gICAgZDogZnVuY3Rpb24gZChkYXRlT2JqKSB7XG4gICAgICByZXR1cm4gZGF0ZU9iai5nZXREYXRlKCk7XG4gICAgfSxcbiAgICBkZDogZnVuY3Rpb24gZGQoZGF0ZU9iaikge1xuICAgICAgcmV0dXJuIHBhZChkYXRlT2JqLmdldERhdGUoKSk7XG4gICAgfSxcbiAgICBkZGQ6IGZ1bmN0aW9uIGRkZChkYXRlT2JqLCBpMThuKSB7XG4gICAgICByZXR1cm4gaTE4bi5kYXlOYW1lc1Nob3J0W2RhdGVPYmouZ2V0RGF5KCldO1xuICAgIH0sXG4gICAgZGRkZDogZnVuY3Rpb24gZGRkZChkYXRlT2JqLCBpMThuKSB7XG4gICAgICByZXR1cm4gaTE4bi5kYXlOYW1lc1tkYXRlT2JqLmdldERheSgpXTtcbiAgICB9LFxuICAgIE06IGZ1bmN0aW9uIE0oZGF0ZU9iaikge1xuICAgICAgcmV0dXJuIGRhdGVPYmouZ2V0TW9udGgoKSArIDE7XG4gICAgfSxcbiAgICBNTTogZnVuY3Rpb24gTU0oZGF0ZU9iaikge1xuICAgICAgcmV0dXJuIHBhZChkYXRlT2JqLmdldE1vbnRoKCkgKyAxKTtcbiAgICB9LFxuICAgIE1NTTogZnVuY3Rpb24gTU1NKGRhdGVPYmosIGkxOG4pIHtcbiAgICAgIHJldHVybiBpMThuLm1vbnRoTmFtZXNTaG9ydFtkYXRlT2JqLmdldE1vbnRoKCldO1xuICAgIH0sXG4gICAgTU1NTTogZnVuY3Rpb24gTU1NTShkYXRlT2JqLCBpMThuKSB7XG4gICAgICByZXR1cm4gaTE4bi5tb250aE5hbWVzW2RhdGVPYmouZ2V0TW9udGgoKV07XG4gICAgfSxcbiAgICB5eTogZnVuY3Rpb24geXkoZGF0ZU9iaikge1xuICAgICAgcmV0dXJuIHBhZChTdHJpbmcoZGF0ZU9iai5nZXRGdWxsWWVhcigpKSwgNCkuc3Vic3RyKDIpO1xuICAgIH0sXG4gICAgeXl5eTogZnVuY3Rpb24geXl5eShkYXRlT2JqKSB7XG4gICAgICByZXR1cm4gcGFkKGRhdGVPYmouZ2V0RnVsbFllYXIoKSwgNCk7XG4gICAgfSxcbiAgICBoOiBmdW5jdGlvbiBoKGRhdGVPYmopIHtcbiAgICAgIHJldHVybiBkYXRlT2JqLmdldEhvdXJzKCkgJSAxMiB8fCAxMjtcbiAgICB9LFxuICAgIGhoOiBmdW5jdGlvbiBoaChkYXRlT2JqKSB7XG4gICAgICByZXR1cm4gcGFkKGRhdGVPYmouZ2V0SG91cnMoKSAlIDEyIHx8IDEyKTtcbiAgICB9LFxuICAgIEg6IGZ1bmN0aW9uIEgoZGF0ZU9iaikge1xuICAgICAgcmV0dXJuIGRhdGVPYmouZ2V0SG91cnMoKTtcbiAgICB9LFxuICAgIEhIOiBmdW5jdGlvbiBISChkYXRlT2JqKSB7XG4gICAgICByZXR1cm4gcGFkKGRhdGVPYmouZ2V0SG91cnMoKSk7XG4gICAgfSxcbiAgICBtOiBmdW5jdGlvbiBtKGRhdGVPYmopIHtcbiAgICAgIHJldHVybiBkYXRlT2JqLmdldE1pbnV0ZXMoKTtcbiAgICB9LFxuICAgIG1tOiBmdW5jdGlvbiBtbShkYXRlT2JqKSB7XG4gICAgICByZXR1cm4gcGFkKGRhdGVPYmouZ2V0TWludXRlcygpKTtcbiAgICB9LFxuICAgIHM6IGZ1bmN0aW9uIHMoZGF0ZU9iaikge1xuICAgICAgcmV0dXJuIGRhdGVPYmouZ2V0U2Vjb25kcygpO1xuICAgIH0sXG4gICAgc3M6IGZ1bmN0aW9uIHNzKGRhdGVPYmopIHtcbiAgICAgIHJldHVybiBwYWQoZGF0ZU9iai5nZXRTZWNvbmRzKCkpO1xuICAgIH0sXG4gICAgUzogZnVuY3Rpb24gUyhkYXRlT2JqKSB7XG4gICAgICByZXR1cm4gTWF0aC5yb3VuZChkYXRlT2JqLmdldE1pbGxpc2Vjb25kcygpIC8gMTAwKTtcbiAgICB9LFxuICAgIFNTOiBmdW5jdGlvbiBTUyhkYXRlT2JqKSB7XG4gICAgICByZXR1cm4gcGFkKE1hdGgucm91bmQoZGF0ZU9iai5nZXRNaWxsaXNlY29uZHMoKSAvIDEwKSwgMik7XG4gICAgfSxcbiAgICBTU1M6IGZ1bmN0aW9uIFNTUyhkYXRlT2JqKSB7XG4gICAgICByZXR1cm4gcGFkKGRhdGVPYmouZ2V0TWlsbGlzZWNvbmRzKCksIDMpO1xuICAgIH0sXG4gICAgYTogZnVuY3Rpb24gYShkYXRlT2JqLCBpMThuKSB7XG4gICAgICByZXR1cm4gZGF0ZU9iai5nZXRIb3VycygpIDwgMTIgPyBpMThuLmFtUG1bMF0gOiBpMThuLmFtUG1bMV07XG4gICAgfSxcbiAgICBBOiBmdW5jdGlvbiBBKGRhdGVPYmosIGkxOG4pIHtcbiAgICAgIHJldHVybiBkYXRlT2JqLmdldEhvdXJzKCkgPCAxMiA/IGkxOG4uYW1QbVswXS50b1VwcGVyQ2FzZSgpIDogaTE4bi5hbVBtWzFdLnRvVXBwZXJDYXNlKCk7XG4gICAgfSxcbiAgICBaWjogZnVuY3Rpb24gWlooZGF0ZU9iaikge1xuICAgICAgdmFyIG8gPSBkYXRlT2JqLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgICByZXR1cm4gKG8gPiAwID8gJy0nIDogJysnKSArIHBhZChNYXRoLmZsb29yKE1hdGguYWJzKG8pIC8gNjApICogMTAwICsgTWF0aC5hYnMobykgJSA2MCwgNCk7XG4gICAgfVxuICB9O1xuXG4gIHZhciBwYXJzZUZsYWdzID0ge1xuICAgIGQ6IFt0d29EaWdpdHMsIGZ1bmN0aW9uIChkLCB2KSB7XG4gICAgICBkLmRheSA9IHY7XG4gICAgfV0sXG4gICAgRG86IFt0d29EaWdpdHMgKyB3b3JkLCBmdW5jdGlvbiAoZCwgdikge1xuICAgICAgZC5kYXkgPSBwYXJzZUludCh2LCAxMCk7XG4gICAgfV0sXG4gICAgTTogW3R3b0RpZ2l0cywgZnVuY3Rpb24gKGQsIHYpIHtcbiAgICAgIGQubW9udGggPSB2IC0gMTtcbiAgICB9XSxcbiAgICB5eTogW3R3b0RpZ2l0cywgZnVuY3Rpb24gKGQsIHYpIHtcbiAgICAgIHZhciBkYSA9IG5ldyBEYXRlKCksXG4gICAgICAgICAgY2VudCA9ICsoJycgKyBkYS5nZXRGdWxsWWVhcigpKS5zdWJzdHIoMCwgMik7XG4gICAgICBkLnllYXIgPSAnJyArICh2ID4gNjggPyBjZW50IC0gMSA6IGNlbnQpICsgdjtcbiAgICB9XSxcbiAgICBoOiBbdHdvRGlnaXRzLCBmdW5jdGlvbiAoZCwgdikge1xuICAgICAgZC5ob3VyID0gdjtcbiAgICB9XSxcbiAgICBtOiBbdHdvRGlnaXRzLCBmdW5jdGlvbiAoZCwgdikge1xuICAgICAgZC5taW51dGUgPSB2O1xuICAgIH1dLFxuICAgIHM6IFt0d29EaWdpdHMsIGZ1bmN0aW9uIChkLCB2KSB7XG4gICAgICBkLnNlY29uZCA9IHY7XG4gICAgfV0sXG4gICAgeXl5eTogW2ZvdXJEaWdpdHMsIGZ1bmN0aW9uIChkLCB2KSB7XG4gICAgICBkLnllYXIgPSB2O1xuICAgIH1dLFxuICAgIFM6IFsnXFxcXGQnLCBmdW5jdGlvbiAoZCwgdikge1xuICAgICAgZC5taWxsaXNlY29uZCA9IHYgKiAxMDA7XG4gICAgfV0sXG4gICAgU1M6IFsnXFxcXGR7Mn0nLCBmdW5jdGlvbiAoZCwgdikge1xuICAgICAgZC5taWxsaXNlY29uZCA9IHYgKiAxMDtcbiAgICB9XSxcbiAgICBTU1M6IFt0aHJlZURpZ2l0cywgZnVuY3Rpb24gKGQsIHYpIHtcbiAgICAgIGQubWlsbGlzZWNvbmQgPSB2O1xuICAgIH1dLFxuICAgIEQ6IFt0d29EaWdpdHMsIG5vb3BdLFxuICAgIGRkZDogW3dvcmQsIG5vb3BdLFxuICAgIE1NTTogW3dvcmQsIG1vbnRoVXBkYXRlKCdtb250aE5hbWVzU2hvcnQnKV0sXG4gICAgTU1NTTogW3dvcmQsIG1vbnRoVXBkYXRlKCdtb250aE5hbWVzJyldLFxuICAgIGE6IFt3b3JkLCBmdW5jdGlvbiAoZCwgdiwgaTE4bikge1xuICAgICAgdmFyIHZhbCA9IHYudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmICh2YWwgPT09IGkxOG4uYW1QbVswXSkge1xuICAgICAgICBkLmlzUG0gPSBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAodmFsID09PSBpMThuLmFtUG1bMV0pIHtcbiAgICAgICAgZC5pc1BtID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XSxcbiAgICBaWjogWydbXlxcXFxzXSo/W1xcXFwrXFxcXC1dXFxcXGRcXFxcZDo/XFxcXGRcXFxcZHxbXlxcXFxzXSo/WicsIGZ1bmN0aW9uIChkLCB2KSB7XG4gICAgICB2YXIgcGFydHMgPSAodiArICcnKS5tYXRjaCgvKFsrLV18XFxkXFxkKS9naSksXG4gICAgICAgICAgbWludXRlcztcblxuICAgICAgaWYgKHBhcnRzKSB7XG4gICAgICAgIG1pbnV0ZXMgPSArKHBhcnRzWzFdICogNjApICsgcGFyc2VJbnQocGFydHNbMl0sIDEwKTtcbiAgICAgICAgZC50aW1lem9uZU9mZnNldCA9IHBhcnRzWzBdID09PSAnKycgPyBtaW51dGVzIDogLW1pbnV0ZXM7XG4gICAgICB9XG4gICAgfV1cbiAgfTtcbiAgcGFyc2VGbGFncy5kZCA9IHBhcnNlRmxhZ3MuZDtcbiAgcGFyc2VGbGFncy5kZGRkID0gcGFyc2VGbGFncy5kZGQ7XG4gIHBhcnNlRmxhZ3MuREQgPSBwYXJzZUZsYWdzLkQ7XG4gIHBhcnNlRmxhZ3MubW0gPSBwYXJzZUZsYWdzLm07XG4gIHBhcnNlRmxhZ3MuaGggPSBwYXJzZUZsYWdzLkggPSBwYXJzZUZsYWdzLkhIID0gcGFyc2VGbGFncy5oO1xuICBwYXJzZUZsYWdzLk1NID0gcGFyc2VGbGFncy5NO1xuICBwYXJzZUZsYWdzLnNzID0gcGFyc2VGbGFncy5zO1xuICBwYXJzZUZsYWdzLkEgPSBwYXJzZUZsYWdzLmE7XG5cbiAgLy8gU29tZSBjb21tb24gZm9ybWF0IHN0cmluZ3NcbiAgZmVjaGEubWFza3MgPSB7XG4gICAgZGVmYXVsdDogJ2RkZCBNTU0gZGQgeXl5eSBISDptbTpzcycsXG4gICAgc2hvcnREYXRlOiAnTS9EL3l5JyxcbiAgICBtZWRpdW1EYXRlOiAnTU1NIGQsIHl5eXknLFxuICAgIGxvbmdEYXRlOiAnTU1NTSBkLCB5eXl5JyxcbiAgICBmdWxsRGF0ZTogJ2RkZGQsIE1NTU0gZCwgeXl5eScsXG4gICAgc2hvcnRUaW1lOiAnSEg6bW0nLFxuICAgIG1lZGl1bVRpbWU6ICdISDptbTpzcycsXG4gICAgbG9uZ1RpbWU6ICdISDptbTpzcy5TU1MnXG4gIH07XG5cbiAgLyoqKlxuICAgKiBGb3JtYXQgYSBkYXRlXG4gICAqIEBtZXRob2QgZm9ybWF0XG4gICAqIEBwYXJhbSB7RGF0ZXxudW1iZXJ9IGRhdGVPYmpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1hc2sgRm9ybWF0IG9mIHRoZSBkYXRlLCBpLmUuICdtbS1kZC15eScgb3IgJ3Nob3J0RGF0ZSdcbiAgICovXG4gIGZlY2hhLmZvcm1hdCA9IGZ1bmN0aW9uIChkYXRlT2JqLCBtYXNrLCBpMThuU2V0dGluZ3MpIHtcbiAgICB2YXIgaTE4biA9IGkxOG5TZXR0aW5ncyB8fCBmZWNoYS5pMThuO1xuXG4gICAgaWYgKHR5cGVvZiBkYXRlT2JqID09PSAnbnVtYmVyJykge1xuICAgICAgZGF0ZU9iaiA9IG5ldyBEYXRlKGRhdGVPYmopO1xuICAgIH1cblxuICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZGF0ZU9iaikgIT09ICdbb2JqZWN0IERhdGVdJyB8fCBpc05hTihkYXRlT2JqLmdldFRpbWUoKSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBEYXRlIGluIGZlY2hhLmZvcm1hdCcpO1xuICAgIH1cblxuICAgIG1hc2sgPSBmZWNoYS5tYXNrc1ttYXNrXSB8fCBtYXNrIHx8IGZlY2hhLm1hc2tzWydkZWZhdWx0J107XG5cbiAgICB2YXIgbGl0ZXJhbHMgPSBbXTtcblxuICAgIC8vIE1ha2UgbGl0ZXJhbHMgaW5hY3RpdmUgYnkgcmVwbGFjaW5nIHRoZW0gd2l0aCA/P1xuICAgIG1hc2sgPSBtYXNrLnJlcGxhY2UobGl0ZXJhbCwgZnVuY3Rpb24gKCQwLCAkMSkge1xuICAgICAgbGl0ZXJhbHMucHVzaCgkMSk7XG4gICAgICByZXR1cm4gJ0BAQCc7XG4gICAgfSk7XG4gICAgLy8gQXBwbHkgZm9ybWF0dGluZyBydWxlc1xuICAgIG1hc2sgPSBtYXNrLnJlcGxhY2UodG9rZW4sIGZ1bmN0aW9uICgkMCkge1xuICAgICAgcmV0dXJuICQwIGluIGZvcm1hdEZsYWdzID8gZm9ybWF0RmxhZ3NbJDBdKGRhdGVPYmosIGkxOG4pIDogJDAuc2xpY2UoMSwgJDAubGVuZ3RoIC0gMSk7XG4gICAgfSk7XG4gICAgLy8gSW5saW5lIGxpdGVyYWwgdmFsdWVzIGJhY2sgaW50byB0aGUgZm9ybWF0dGVkIHZhbHVlXG4gICAgcmV0dXJuIG1hc2sucmVwbGFjZSgvQEBAL2csIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBsaXRlcmFscy5zaGlmdCgpO1xuICAgIH0pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBQYXJzZSBhIGRhdGUgc3RyaW5nIGludG8gYW4gb2JqZWN0LCBjaGFuZ2VzIC0gaW50byAvXG4gICAqIEBtZXRob2QgcGFyc2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IGRhdGVTdHIgRGF0ZSBzdHJpbmdcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZvcm1hdCBEYXRlIHBhcnNlIGZvcm1hdFxuICAgKiBAcmV0dXJucyB7RGF0ZXxib29sZWFufVxuICAgKi9cbiAgZmVjaGEucGFyc2UgPSBmdW5jdGlvbiAoZGF0ZVN0ciwgZm9ybWF0LCBpMThuU2V0dGluZ3MpIHtcbiAgICB2YXIgaTE4biA9IGkxOG5TZXR0aW5ncyB8fCBmZWNoYS5pMThuO1xuXG4gICAgaWYgKHR5cGVvZiBmb3JtYXQgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZm9ybWF0IGluIGZlY2hhLnBhcnNlJyk7XG4gICAgfVxuXG4gICAgZm9ybWF0ID0gZmVjaGEubWFza3NbZm9ybWF0XSB8fCBmb3JtYXQ7XG5cbiAgICAvLyBBdm9pZCByZWd1bGFyIGV4cHJlc3Npb24gZGVuaWFsIG9mIHNlcnZpY2UsIGZhaWwgZWFybHkgZm9yIHJlYWxseSBsb25nIHN0cmluZ3NcbiAgICAvLyBodHRwczovL3d3dy5vd2FzcC5vcmcvaW5kZXgucGhwL1JlZ3VsYXJfZXhwcmVzc2lvbl9EZW5pYWxfb2ZfU2VydmljZV8tX1JlRG9TXG4gICAgaWYgKGRhdGVTdHIubGVuZ3RoID4gMTAwMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdmFyIGRhdGVJbmZvID0ge307XG4gICAgdmFyIHBhcnNlSW5mbyA9IFtdO1xuICAgIHZhciBsaXRlcmFscyA9IFtdO1xuICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKGxpdGVyYWwsIGZ1bmN0aW9uICgkMCwgJDEpIHtcbiAgICAgIGxpdGVyYWxzLnB1c2goJDEpO1xuICAgICAgcmV0dXJuICdAQEAnO1xuICAgIH0pO1xuICAgIHZhciBuZXdGb3JtYXQgPSByZWdleEVzY2FwZShmb3JtYXQpLnJlcGxhY2UodG9rZW4sIGZ1bmN0aW9uICgkMCkge1xuICAgICAgaWYgKHBhcnNlRmxhZ3NbJDBdKSB7XG4gICAgICAgIHZhciBpbmZvID0gcGFyc2VGbGFnc1skMF07XG4gICAgICAgIHBhcnNlSW5mby5wdXNoKGluZm9bMV0pO1xuICAgICAgICByZXR1cm4gJygnICsgaW5mb1swXSArICcpJztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuICQwO1xuICAgIH0pO1xuICAgIG5ld0Zvcm1hdCA9IG5ld0Zvcm1hdC5yZXBsYWNlKC9AQEAvZywgZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGxpdGVyYWxzLnNoaWZ0KCk7XG4gICAgfSk7XG4gICAgdmFyIG1hdGNoZXMgPSBkYXRlU3RyLm1hdGNoKG5ldyBSZWdFeHAobmV3Rm9ybWF0LCAnaScpKTtcbiAgICBpZiAoIW1hdGNoZXMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgbWF0Y2hlcy5sZW5ndGg7IGkrKykge1xuICAgICAgcGFyc2VJbmZvW2kgLSAxXShkYXRlSW5mbywgbWF0Y2hlc1tpXSwgaTE4bik7XG4gICAgfVxuXG4gICAgdmFyIHRvZGF5ID0gbmV3IERhdGUoKTtcbiAgICBpZiAoZGF0ZUluZm8uaXNQbSA9PT0gdHJ1ZSAmJiBkYXRlSW5mby5ob3VyICE9IG51bGwgJiYgK2RhdGVJbmZvLmhvdXIgIT09IDEyKSB7XG4gICAgICBkYXRlSW5mby5ob3VyID0gK2RhdGVJbmZvLmhvdXIgKyAxMjtcbiAgICB9IGVsc2UgaWYgKGRhdGVJbmZvLmlzUG0gPT09IGZhbHNlICYmICtkYXRlSW5mby5ob3VyID09PSAxMikge1xuICAgICAgZGF0ZUluZm8uaG91ciA9IDA7XG4gICAgfVxuXG4gICAgdmFyIGRhdGU7XG4gICAgaWYgKGRhdGVJbmZvLnRpbWV6b25lT2Zmc2V0ICE9IG51bGwpIHtcbiAgICAgIGRhdGVJbmZvLm1pbnV0ZSA9ICsoZGF0ZUluZm8ubWludXRlIHx8IDApIC0gK2RhdGVJbmZvLnRpbWV6b25lT2Zmc2V0O1xuICAgICAgZGF0ZSA9IG5ldyBEYXRlKERhdGUuVVRDKGRhdGVJbmZvLnllYXIgfHwgdG9kYXkuZ2V0RnVsbFllYXIoKSwgZGF0ZUluZm8ubW9udGggfHwgMCwgZGF0ZUluZm8uZGF5IHx8IDEsIGRhdGVJbmZvLmhvdXIgfHwgMCwgZGF0ZUluZm8ubWludXRlIHx8IDAsIGRhdGVJbmZvLnNlY29uZCB8fCAwLCBkYXRlSW5mby5taWxsaXNlY29uZCB8fCAwKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGUgPSBuZXcgRGF0ZShkYXRlSW5mby55ZWFyIHx8IHRvZGF5LmdldEZ1bGxZZWFyKCksIGRhdGVJbmZvLm1vbnRoIHx8IDAsIGRhdGVJbmZvLmRheSB8fCAxLCBkYXRlSW5mby5ob3VyIHx8IDAsIGRhdGVJbmZvLm1pbnV0ZSB8fCAwLCBkYXRlSW5mby5zZWNvbmQgfHwgMCwgZGF0ZUluZm8ubWlsbGlzZWNvbmQgfHwgMCk7XG4gICAgfVxuICAgIHJldHVybiBkYXRlO1xuICB9O1xuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgIG1vZHVsZS5leHBvcnRzID0gZmVjaGE7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgZGVmaW5lKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBmZWNoYTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBtYWluLmZlY2hhID0gZmVjaGE7XG4gIH1cbn0pKHVuZGVmaW5lZCk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/utils/date.js\n");

/***/ }),

/***/ "./node_modules/element-ui/lib/utils/dom.js":
/*!**************************************************!*\
  !*** ./node_modules/element-ui/lib/utils/dom.js ***!
  \**************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";
eval("\n\nexports.__esModule = true;\nexports.isInContainer = exports.getScrollContainer = exports.isScroll = exports.getStyle = exports.once = exports.off = exports.on = undefined;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; /* istanbul ignore next */\n\nexports.hasClass = hasClass;\nexports.addClass = addClass;\nexports.removeClass = removeClass;\nexports.setStyle = setStyle;\n\nvar _vue = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.esm.js\");\n\nvar _vue2 = _interopRequireDefault(_vue);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar isServer = _vue2.default.prototype.$isServer;\nvar SPECIAL_CHARS_REGEXP = /([\\:\\-\\_]+(.))/g;\nvar MOZ_HACK_REGEXP = /^moz([A-Z])/;\nvar ieVersion = isServer ? 0 : Number(document.documentMode);\n\n/* istanbul ignore next */\nvar trim = function trim(string) {\n  return (string || '').replace(/^[\\s\\uFEFF]+|[\\s\\uFEFF]+$/g, '');\n};\n/* istanbul ignore next */\nvar camelCase = function camelCase(name) {\n  return name.replace(SPECIAL_CHARS_REGEXP, function (_, separator, letter, offset) {\n    return offset ? letter.toUpperCase() : letter;\n  }).replace(MOZ_HACK_REGEXP, 'Moz$1');\n};\n\n/* istanbul ignore next */\nvar on = exports.on = function () {\n  if (!isServer && document.addEventListener) {\n    return function (element, event, handler) {\n      if (element && event && handler) {\n        element.addEventListener(event, handler, false);\n      }\n    };\n  } else {\n    return function (element, event, handler) {\n      if (element && event && handler) {\n        element.attachEvent('on' + event, handler);\n      }\n    };\n  }\n}();\n\n/* istanbul ignore next */\nvar off = exports.off = function () {\n  if (!isServer && document.removeEventListener) {\n    return function (element, event, handler) {\n      if (element && event) {\n        element.removeEventListener(event, handler, false);\n      }\n    };\n  } else {\n    return function (element, event, handler) {\n      if (element && event) {\n        element.detachEvent('on' + event, handler);\n      }\n    };\n  }\n}();\n\n/* istanbul ignore next */\nvar once = exports.once = function once(el, event, fn) {\n  var listener = function listener() {\n    if (fn) {\n      fn.apply(this, arguments);\n    }\n    off(el, event, listener);\n  };\n  on(el, event, listener);\n};\n\n/* istanbul ignore next */\nfunction hasClass(el, cls) {\n  if (!el || !cls) return false;\n  if (cls.indexOf(' ') !== -1) throw new Error('className should not contain space.');\n  if (el.classList) {\n    return el.classList.contains(cls);\n  } else {\n    return (' ' + el.className + ' ').indexOf(' ' + cls + ' ') > -1;\n  }\n};\n\n/* istanbul ignore next */\nfunction addClass(el, cls) {\n  if (!el) return;\n  var curClass = el.className;\n  var classes = (cls || '').split(' ');\n\n  for (var i = 0, j = classes.length; i < j; i++) {\n    var clsName = classes[i];\n    if (!clsName) continue;\n\n    if (el.classList) {\n      el.classList.add(clsName);\n    } else if (!hasClass(el, clsName)) {\n      curClass += ' ' + clsName;\n    }\n  }\n  if (!el.classList) {\n    el.setAttribute('class', curClass);\n  }\n};\n\n/* istanbul ignore next */\nfunction removeClass(el, cls) {\n  if (!el || !cls) return;\n  var classes = cls.split(' ');\n  var curClass = ' ' + el.className + ' ';\n\n  for (var i = 0, j = classes.length; i < j; i++) {\n    var clsName = classes[i];\n    if (!clsName) continue;\n\n    if (el.classList) {\n      el.classList.remove(clsName);\n    } else if (hasClass(el, clsName)) {\n      curClass = curClass.replace(' ' + clsName + ' ', ' ');\n    }\n  }\n  if (!el.classList) {\n    el.setAttribute('class', trim(curClass));\n  }\n};\n\n/* istanbul ignore next */\nvar getStyle = exports.getStyle = ieVersion < 9 ? function (element, styleName) {\n  if (isServer) return;\n  if (!element || !styleName) return null;\n  styleName = camelCase(styleName);\n  if (styleName === 'float') {\n    styleName = 'styleFloat';\n  }\n  try {\n    switch (styleName) {\n      case 'opacity':\n        try {\n          return element.filters.item('alpha').opacity / 100;\n        } catch (e) {\n          return 1.0;\n        }\n      default:\n        return element.style[styleName] || element.currentStyle ? element.currentStyle[styleName] : null;\n    }\n  } catch (e) {\n    return element.style[styleName];\n  }\n} : function (element, styleName) {\n  if (isServer) return;\n  if (!element || !styleName) return null;\n  styleName = camelCase(styleName);\n  if (styleName === 'float') {\n    styleName = 'cssFloat';\n  }\n  try {\n    var computed = document.defaultView.getComputedStyle(element, '');\n    return element.style[styleName] || computed ? computed[styleName] : null;\n  } catch (e) {\n    return element.style[styleName];\n  }\n};\n\n/* istanbul ignore next */\nfunction setStyle(element, styleName, value) {\n  if (!element || !styleName) return;\n\n  if ((typeof styleName === 'undefined' ? 'undefined' : _typeof(styleName)) === 'object') {\n    for (var prop in styleName) {\n      if (styleName.hasOwnProperty(prop)) {\n        setStyle(element, prop, styleName[prop]);\n      }\n    }\n  } else {\n    styleName = camelCase(styleName);\n    if (styleName === 'opacity' && ieVersion < 9) {\n      element.style.filter = isNaN(value) ? '' : 'alpha(opacity=' + value * 100 + ')';\n    } else {\n      element.style[styleName] = value;\n    }\n  }\n};\n\nvar isScroll = exports.isScroll = function isScroll(el, vertical) {\n  if (isServer) return;\n\n  var determinedDirection = vertical !== null && vertical !== undefined;\n  var overflow = determinedDirection ? vertical ? getStyle(el, 'overflow-y') : getStyle(el, 'overflow-x') : getStyle(el, 'overflow');\n\n  return overflow.match(/(scroll|auto|overlay)/);\n};\n\nvar getScrollContainer = exports.getScrollContainer = function getScrollContainer(el, vertical) {\n  if (isServer) return;\n\n  var parent = el;\n  while (parent) {\n    if ([window, document, document.documentElement].includes(parent)) {\n      return window;\n    }\n    if (isScroll(parent, vertical)) {\n      return parent;\n    }\n    parent = parent.parentNode;\n  }\n\n  return parent;\n};\n\nvar isInContainer = exports.isInContainer = function isInContainer(el, container) {\n  if (isServer || !el || !container) return false;\n\n  var elRect = el.getBoundingClientRect();\n  var containerRect = void 0;\n\n  if ([window, document, document.documentElement, null, undefined].includes(container)) {\n    containerRect = {\n      top: 0,\n      right: window.innerWidth,\n      bottom: window.innerHeight,\n      left: 0\n    };\n  } else {\n    containerRect = container.getBoundingClientRect();\n  }\n\n  return elRect.top < containerRect.bottom && elRect.bottom > containerRect.top && elRect.right > containerRect.left && elRect.left < containerRect.right;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdXRpbHMvZG9tLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLGtCQUFrQjtBQUNsQixxQkFBcUIsR0FBRywwQkFBMEIsR0FBRyxnQkFBZ0IsR0FBRyxnQkFBZ0IsR0FBRyxZQUFZLEdBQUcsV0FBVyxHQUFHLFVBQVU7O0FBRWxJLHFHQUFxRyxxQkFBcUIsbUJBQW1CLGlJQUFpSTs7QUFFOVEsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixtQkFBbUI7QUFDbkIsZ0JBQWdCOztBQUVoQixXQUFXLG1CQUFPLENBQUMsK0NBQUs7O0FBRXhCOztBQUVBLHVDQUF1Qyx1Q0FBdUM7O0FBRTlFO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQSxTQUFTLFVBQVU7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQSxVQUFVLFdBQVc7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQSxXQUFXLFlBQVk7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsc0NBQXNDLE9BQU87QUFDN0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsc0NBQXNDLE9BQU87QUFDN0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZUFBZSxnQkFBZ0I7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxlQUFlLGdCQUFnQjtBQUMvQjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEseUJBQXlCLDBCQUEwQjtBQUNuRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLG9CQUFvQixxQkFBcUI7QUFDekM7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdXRpbHMvZG9tLmpzP2MzMmUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5pc0luQ29udGFpbmVyID0gZXhwb3J0cy5nZXRTY3JvbGxDb250YWluZXIgPSBleHBvcnRzLmlzU2Nyb2xsID0gZXhwb3J0cy5nZXRTdHlsZSA9IGV4cG9ydHMub25jZSA9IGV4cG9ydHMub2ZmID0gZXhwb3J0cy5vbiA9IHVuZGVmaW5lZDtcblxudmFyIF90eXBlb2YgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIiA/IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH0gOiBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXG5leHBvcnRzLmhhc0NsYXNzID0gaGFzQ2xhc3M7XG5leHBvcnRzLmFkZENsYXNzID0gYWRkQ2xhc3M7XG5leHBvcnRzLnJlbW92ZUNsYXNzID0gcmVtb3ZlQ2xhc3M7XG5leHBvcnRzLnNldFN0eWxlID0gc2V0U3R5bGU7XG5cbnZhciBfdnVlID0gcmVxdWlyZSgndnVlJyk7XG5cbnZhciBfdnVlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Z1ZSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbnZhciBpc1NlcnZlciA9IF92dWUyLmRlZmF1bHQucHJvdG90eXBlLiRpc1NlcnZlcjtcbnZhciBTUEVDSUFMX0NIQVJTX1JFR0VYUCA9IC8oW1xcOlxcLVxcX10rKC4pKS9nO1xudmFyIE1PWl9IQUNLX1JFR0VYUCA9IC9ebW96KFtBLVpdKS87XG52YXIgaWVWZXJzaW9uID0gaXNTZXJ2ZXIgPyAwIDogTnVtYmVyKGRvY3VtZW50LmRvY3VtZW50TW9kZSk7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG52YXIgdHJpbSA9IGZ1bmN0aW9uIHRyaW0oc3RyaW5nKSB7XG4gIHJldHVybiAoc3RyaW5nIHx8ICcnKS5yZXBsYWNlKC9eW1xcc1xcdUZFRkZdK3xbXFxzXFx1RkVGRl0rJC9nLCAnJyk7XG59O1xuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbnZhciBjYW1lbENhc2UgPSBmdW5jdGlvbiBjYW1lbENhc2UobmFtZSkge1xuICByZXR1cm4gbmFtZS5yZXBsYWNlKFNQRUNJQUxfQ0hBUlNfUkVHRVhQLCBmdW5jdGlvbiAoXywgc2VwYXJhdG9yLCBsZXR0ZXIsIG9mZnNldCkge1xuICAgIHJldHVybiBvZmZzZXQgPyBsZXR0ZXIudG9VcHBlckNhc2UoKSA6IGxldHRlcjtcbiAgfSkucmVwbGFjZShNT1pfSEFDS19SRUdFWFAsICdNb3okMScpO1xufTtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbnZhciBvbiA9IGV4cG9ydHMub24gPSBmdW5jdGlvbiAoKSB7XG4gIGlmICghaXNTZXJ2ZXIgJiYgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcikge1xuICAgIHJldHVybiBmdW5jdGlvbiAoZWxlbWVudCwgZXZlbnQsIGhhbmRsZXIpIHtcbiAgICAgIGlmIChlbGVtZW50ICYmIGV2ZW50ICYmIGhhbmRsZXIpIHtcbiAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBoYW5kbGVyLCBmYWxzZSk7XG4gICAgICB9XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGVsZW1lbnQsIGV2ZW50LCBoYW5kbGVyKSB7XG4gICAgICBpZiAoZWxlbWVudCAmJiBldmVudCAmJiBoYW5kbGVyKSB7XG4gICAgICAgIGVsZW1lbnQuYXR0YWNoRXZlbnQoJ29uJyArIGV2ZW50LCBoYW5kbGVyKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG59KCk7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG52YXIgb2ZmID0gZXhwb3J0cy5vZmYgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICghaXNTZXJ2ZXIgJiYgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcikge1xuICAgIHJldHVybiBmdW5jdGlvbiAoZWxlbWVudCwgZXZlbnQsIGhhbmRsZXIpIHtcbiAgICAgIGlmIChlbGVtZW50ICYmIGV2ZW50KSB7XG4gICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCwgaGFuZGxlciwgZmFsc2UpO1xuICAgICAgfVxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChlbGVtZW50LCBldmVudCwgaGFuZGxlcikge1xuICAgICAgaWYgKGVsZW1lbnQgJiYgZXZlbnQpIHtcbiAgICAgICAgZWxlbWVudC5kZXRhY2hFdmVudCgnb24nICsgZXZlbnQsIGhhbmRsZXIpO1xuICAgICAgfVxuICAgIH07XG4gIH1cbn0oKTtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbnZhciBvbmNlID0gZXhwb3J0cy5vbmNlID0gZnVuY3Rpb24gb25jZShlbCwgZXZlbnQsIGZuKSB7XG4gIHZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uIGxpc3RlbmVyKCkge1xuICAgIGlmIChmbikge1xuICAgICAgZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG4gICAgb2ZmKGVsLCBldmVudCwgbGlzdGVuZXIpO1xuICB9O1xuICBvbihlbCwgZXZlbnQsIGxpc3RlbmVyKTtcbn07XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5mdW5jdGlvbiBoYXNDbGFzcyhlbCwgY2xzKSB7XG4gIGlmICghZWwgfHwgIWNscykgcmV0dXJuIGZhbHNlO1xuICBpZiAoY2xzLmluZGV4T2YoJyAnKSAhPT0gLTEpIHRocm93IG5ldyBFcnJvcignY2xhc3NOYW1lIHNob3VsZCBub3QgY29udGFpbiBzcGFjZS4nKTtcbiAgaWYgKGVsLmNsYXNzTGlzdCkge1xuICAgIHJldHVybiBlbC5jbGFzc0xpc3QuY29udGFpbnMoY2xzKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gKCcgJyArIGVsLmNsYXNzTmFtZSArICcgJykuaW5kZXhPZignICcgKyBjbHMgKyAnICcpID4gLTE7XG4gIH1cbn07XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5mdW5jdGlvbiBhZGRDbGFzcyhlbCwgY2xzKSB7XG4gIGlmICghZWwpIHJldHVybjtcbiAgdmFyIGN1ckNsYXNzID0gZWwuY2xhc3NOYW1lO1xuICB2YXIgY2xhc3NlcyA9IChjbHMgfHwgJycpLnNwbGl0KCcgJyk7XG5cbiAgZm9yICh2YXIgaSA9IDAsIGogPSBjbGFzc2VzLmxlbmd0aDsgaSA8IGo7IGkrKykge1xuICAgIHZhciBjbHNOYW1lID0gY2xhc3Nlc1tpXTtcbiAgICBpZiAoIWNsc05hbWUpIGNvbnRpbnVlO1xuXG4gICAgaWYgKGVsLmNsYXNzTGlzdCkge1xuICAgICAgZWwuY2xhc3NMaXN0LmFkZChjbHNOYW1lKTtcbiAgICB9IGVsc2UgaWYgKCFoYXNDbGFzcyhlbCwgY2xzTmFtZSkpIHtcbiAgICAgIGN1ckNsYXNzICs9ICcgJyArIGNsc05hbWU7XG4gICAgfVxuICB9XG4gIGlmICghZWwuY2xhc3NMaXN0KSB7XG4gICAgZWwuc2V0QXR0cmlidXRlKCdjbGFzcycsIGN1ckNsYXNzKTtcbiAgfVxufTtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmZ1bmN0aW9uIHJlbW92ZUNsYXNzKGVsLCBjbHMpIHtcbiAgaWYgKCFlbCB8fCAhY2xzKSByZXR1cm47XG4gIHZhciBjbGFzc2VzID0gY2xzLnNwbGl0KCcgJyk7XG4gIHZhciBjdXJDbGFzcyA9ICcgJyArIGVsLmNsYXNzTmFtZSArICcgJztcblxuICBmb3IgKHZhciBpID0gMCwgaiA9IGNsYXNzZXMubGVuZ3RoOyBpIDwgajsgaSsrKSB7XG4gICAgdmFyIGNsc05hbWUgPSBjbGFzc2VzW2ldO1xuICAgIGlmICghY2xzTmFtZSkgY29udGludWU7XG5cbiAgICBpZiAoZWwuY2xhc3NMaXN0KSB7XG4gICAgICBlbC5jbGFzc0xpc3QucmVtb3ZlKGNsc05hbWUpO1xuICAgIH0gZWxzZSBpZiAoaGFzQ2xhc3MoZWwsIGNsc05hbWUpKSB7XG4gICAgICBjdXJDbGFzcyA9IGN1ckNsYXNzLnJlcGxhY2UoJyAnICsgY2xzTmFtZSArICcgJywgJyAnKTtcbiAgICB9XG4gIH1cbiAgaWYgKCFlbC5jbGFzc0xpc3QpIHtcbiAgICBlbC5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgdHJpbShjdXJDbGFzcykpO1xuICB9XG59O1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xudmFyIGdldFN0eWxlID0gZXhwb3J0cy5nZXRTdHlsZSA9IGllVmVyc2lvbiA8IDkgPyBmdW5jdGlvbiAoZWxlbWVudCwgc3R5bGVOYW1lKSB7XG4gIGlmIChpc1NlcnZlcikgcmV0dXJuO1xuICBpZiAoIWVsZW1lbnQgfHwgIXN0eWxlTmFtZSkgcmV0dXJuIG51bGw7XG4gIHN0eWxlTmFtZSA9IGNhbWVsQ2FzZShzdHlsZU5hbWUpO1xuICBpZiAoc3R5bGVOYW1lID09PSAnZmxvYXQnKSB7XG4gICAgc3R5bGVOYW1lID0gJ3N0eWxlRmxvYXQnO1xuICB9XG4gIHRyeSB7XG4gICAgc3dpdGNoIChzdHlsZU5hbWUpIHtcbiAgICAgIGNhc2UgJ29wYWNpdHknOlxuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBlbGVtZW50LmZpbHRlcnMuaXRlbSgnYWxwaGEnKS5vcGFjaXR5IC8gMTAwO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgcmV0dXJuIDEuMDtcbiAgICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQuc3R5bGVbc3R5bGVOYW1lXSB8fCBlbGVtZW50LmN1cnJlbnRTdHlsZSA/IGVsZW1lbnQuY3VycmVudFN0eWxlW3N0eWxlTmFtZV0gOiBudWxsO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBlbGVtZW50LnN0eWxlW3N0eWxlTmFtZV07XG4gIH1cbn0gOiBmdW5jdGlvbiAoZWxlbWVudCwgc3R5bGVOYW1lKSB7XG4gIGlmIChpc1NlcnZlcikgcmV0dXJuO1xuICBpZiAoIWVsZW1lbnQgfHwgIXN0eWxlTmFtZSkgcmV0dXJuIG51bGw7XG4gIHN0eWxlTmFtZSA9IGNhbWVsQ2FzZShzdHlsZU5hbWUpO1xuICBpZiAoc3R5bGVOYW1lID09PSAnZmxvYXQnKSB7XG4gICAgc3R5bGVOYW1lID0gJ2Nzc0Zsb2F0JztcbiAgfVxuICB0cnkge1xuICAgIHZhciBjb21wdXRlZCA9IGRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCwgJycpO1xuICAgIHJldHVybiBlbGVtZW50LnN0eWxlW3N0eWxlTmFtZV0gfHwgY29tcHV0ZWQgPyBjb21wdXRlZFtzdHlsZU5hbWVdIDogbnVsbDtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBlbGVtZW50LnN0eWxlW3N0eWxlTmFtZV07XG4gIH1cbn07XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5mdW5jdGlvbiBzZXRTdHlsZShlbGVtZW50LCBzdHlsZU5hbWUsIHZhbHVlKSB7XG4gIGlmICghZWxlbWVudCB8fCAhc3R5bGVOYW1lKSByZXR1cm47XG5cbiAgaWYgKCh0eXBlb2Ygc3R5bGVOYW1lID09PSAndW5kZWZpbmVkJyA/ICd1bmRlZmluZWQnIDogX3R5cGVvZihzdHlsZU5hbWUpKSA9PT0gJ29iamVjdCcpIHtcbiAgICBmb3IgKHZhciBwcm9wIGluIHN0eWxlTmFtZSkge1xuICAgICAgaWYgKHN0eWxlTmFtZS5oYXNPd25Qcm9wZXJ0eShwcm9wKSkge1xuICAgICAgICBzZXRTdHlsZShlbGVtZW50LCBwcm9wLCBzdHlsZU5hbWVbcHJvcF0pO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBzdHlsZU5hbWUgPSBjYW1lbENhc2Uoc3R5bGVOYW1lKTtcbiAgICBpZiAoc3R5bGVOYW1lID09PSAnb3BhY2l0eScgJiYgaWVWZXJzaW9uIDwgOSkge1xuICAgICAgZWxlbWVudC5zdHlsZS5maWx0ZXIgPSBpc05hTih2YWx1ZSkgPyAnJyA6ICdhbHBoYShvcGFjaXR5PScgKyB2YWx1ZSAqIDEwMCArICcpJztcbiAgICB9IGVsc2Uge1xuICAgICAgZWxlbWVudC5zdHlsZVtzdHlsZU5hbWVdID0gdmFsdWU7XG4gICAgfVxuICB9XG59O1xuXG52YXIgaXNTY3JvbGwgPSBleHBvcnRzLmlzU2Nyb2xsID0gZnVuY3Rpb24gaXNTY3JvbGwoZWwsIHZlcnRpY2FsKSB7XG4gIGlmIChpc1NlcnZlcikgcmV0dXJuO1xuXG4gIHZhciBkZXRlcm1pbmVkRGlyZWN0aW9uID0gdmVydGljYWwgIT09IG51bGwgJiYgdmVydGljYWwgIT09IHVuZGVmaW5lZDtcbiAgdmFyIG92ZXJmbG93ID0gZGV0ZXJtaW5lZERpcmVjdGlvbiA/IHZlcnRpY2FsID8gZ2V0U3R5bGUoZWwsICdvdmVyZmxvdy15JykgOiBnZXRTdHlsZShlbCwgJ292ZXJmbG93LXgnKSA6IGdldFN0eWxlKGVsLCAnb3ZlcmZsb3cnKTtcblxuICByZXR1cm4gb3ZlcmZsb3cubWF0Y2goLyhzY3JvbGx8YXV0b3xvdmVybGF5KS8pO1xufTtcblxudmFyIGdldFNjcm9sbENvbnRhaW5lciA9IGV4cG9ydHMuZ2V0U2Nyb2xsQ29udGFpbmVyID0gZnVuY3Rpb24gZ2V0U2Nyb2xsQ29udGFpbmVyKGVsLCB2ZXJ0aWNhbCkge1xuICBpZiAoaXNTZXJ2ZXIpIHJldHVybjtcblxuICB2YXIgcGFyZW50ID0gZWw7XG4gIHdoaWxlIChwYXJlbnQpIHtcbiAgICBpZiAoW3dpbmRvdywgZG9jdW1lbnQsIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudF0uaW5jbHVkZXMocGFyZW50KSkge1xuICAgICAgcmV0dXJuIHdpbmRvdztcbiAgICB9XG4gICAgaWYgKGlzU2Nyb2xsKHBhcmVudCwgdmVydGljYWwpKSB7XG4gICAgICByZXR1cm4gcGFyZW50O1xuICAgIH1cbiAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50Tm9kZTtcbiAgfVxuXG4gIHJldHVybiBwYXJlbnQ7XG59O1xuXG52YXIgaXNJbkNvbnRhaW5lciA9IGV4cG9ydHMuaXNJbkNvbnRhaW5lciA9IGZ1bmN0aW9uIGlzSW5Db250YWluZXIoZWwsIGNvbnRhaW5lcikge1xuICBpZiAoaXNTZXJ2ZXIgfHwgIWVsIHx8ICFjb250YWluZXIpIHJldHVybiBmYWxzZTtcblxuICB2YXIgZWxSZWN0ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIHZhciBjb250YWluZXJSZWN0ID0gdm9pZCAwO1xuXG4gIGlmIChbd2luZG93LCBkb2N1bWVudCwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBudWxsLCB1bmRlZmluZWRdLmluY2x1ZGVzKGNvbnRhaW5lcikpIHtcbiAgICBjb250YWluZXJSZWN0ID0ge1xuICAgICAgdG9wOiAwLFxuICAgICAgcmlnaHQ6IHdpbmRvdy5pbm5lcldpZHRoLFxuICAgICAgYm90dG9tOiB3aW5kb3cuaW5uZXJIZWlnaHQsXG4gICAgICBsZWZ0OiAwXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBjb250YWluZXJSZWN0ID0gY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICB9XG5cbiAgcmV0dXJuIGVsUmVjdC50b3AgPCBjb250YWluZXJSZWN0LmJvdHRvbSAmJiBlbFJlY3QuYm90dG9tID4gY29udGFpbmVyUmVjdC50b3AgJiYgZWxSZWN0LnJpZ2h0ID4gY29udGFpbmVyUmVjdC5sZWZ0ICYmIGVsUmVjdC5sZWZ0IDwgY29udGFpbmVyUmVjdC5yaWdodDtcbn07Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/utils/dom.js\n");

/***/ }),

/***/ "./node_modules/element-ui/lib/utils/lodash.js":
/*!*****************************************************!*\
  !*** ./node_modules/element-ui/lib/utils/lodash.js ***!
  \*****************************************************/
/***/ ((module, exports, __webpack_require__) => {

"use strict";
eval("/* module decorator */ module = __webpack_require__.nmd(module);\nvar __WEBPACK_AMD_DEFINE_RESULT__;var _typeof=typeof Symbol===\"function\"&&typeof Symbol.iterator===\"symbol\"?function(obj){return typeof obj;}:function(obj){return obj&&typeof Symbol===\"function\"&&obj.constructor===Symbol&&obj!==Symbol.prototype?\"symbol\":typeof obj;};/**\n * @license\n * Lodash <https://lodash.com/>\n * Copyright JS Foundation and other contributors <https://js.foundation/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n *//*eslint-disable*/(function(){/** Used as a safe reference for `undefined` in pre-ES5 environments. */var undefined;/** Used as the semantic version number. */var VERSION='4.17.10';/** Used as the size to enable large array optimizations. */var LARGE_ARRAY_SIZE=200;/** Error message constants. */var CORE_ERROR_TEXT='Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',FUNC_ERROR_TEXT='Expected a function';/** Used to stand-in for `undefined` hash values. */var HASH_UNDEFINED='__lodash_hash_undefined__';/** Used as the maximum memoize cache size. */var MAX_MEMOIZE_SIZE=500;/** Used as the internal argument placeholder. */var PLACEHOLDER='__lodash_placeholder__';/** Used to compose bitmasks for cloning. */var CLONE_DEEP_FLAG=1,CLONE_FLAT_FLAG=2,CLONE_SYMBOLS_FLAG=4;/** Used to compose bitmasks for value comparisons. */var COMPARE_PARTIAL_FLAG=1,COMPARE_UNORDERED_FLAG=2;/** Used to compose bitmasks for function metadata. */var WRAP_BIND_FLAG=1,WRAP_BIND_KEY_FLAG=2,WRAP_CURRY_BOUND_FLAG=4,WRAP_CURRY_FLAG=8,WRAP_CURRY_RIGHT_FLAG=16,WRAP_PARTIAL_FLAG=32,WRAP_PARTIAL_RIGHT_FLAG=64,WRAP_ARY_FLAG=128,WRAP_REARG_FLAG=256,WRAP_FLIP_FLAG=512;/** Used as default options for `_.truncate`. */var DEFAULT_TRUNC_LENGTH=30,DEFAULT_TRUNC_OMISSION='...';/** Used to detect hot functions by number of calls within a span of milliseconds. */var HOT_COUNT=800,HOT_SPAN=16;/** Used to indicate the type of lazy iteratees. */var LAZY_FILTER_FLAG=1,LAZY_MAP_FLAG=2,LAZY_WHILE_FLAG=3;/** Used as references for various `Number` constants. */var INFINITY=1/0,MAX_SAFE_INTEGER=9007199254740991,MAX_INTEGER=1.7976931348623157e308,NAN=0/0;/** Used as references for the maximum length and index of an array. */var MAX_ARRAY_LENGTH=4294967295,MAX_ARRAY_INDEX=MAX_ARRAY_LENGTH-1,HALF_MAX_ARRAY_LENGTH=MAX_ARRAY_LENGTH>>>1;/** Used to associate wrap methods with their bit flags. */var wrapFlags=[['ary',WRAP_ARY_FLAG],['bind',WRAP_BIND_FLAG],['bindKey',WRAP_BIND_KEY_FLAG],['curry',WRAP_CURRY_FLAG],['curryRight',WRAP_CURRY_RIGHT_FLAG],['flip',WRAP_FLIP_FLAG],['partial',WRAP_PARTIAL_FLAG],['partialRight',WRAP_PARTIAL_RIGHT_FLAG],['rearg',WRAP_REARG_FLAG]];/** `Object#toString` result references. */var argsTag='[object Arguments]',arrayTag='[object Array]',asyncTag='[object AsyncFunction]',boolTag='[object Boolean]',dateTag='[object Date]',domExcTag='[object DOMException]',errorTag='[object Error]',funcTag='[object Function]',genTag='[object GeneratorFunction]',mapTag='[object Map]',numberTag='[object Number]',nullTag='[object Null]',objectTag='[object Object]',promiseTag='[object Promise]',proxyTag='[object Proxy]',regexpTag='[object RegExp]',setTag='[object Set]',stringTag='[object String]',symbolTag='[object Symbol]',undefinedTag='[object Undefined]',weakMapTag='[object WeakMap]',weakSetTag='[object WeakSet]';var arrayBufferTag='[object ArrayBuffer]',dataViewTag='[object DataView]',float32Tag='[object Float32Array]',float64Tag='[object Float64Array]',int8Tag='[object Int8Array]',int16Tag='[object Int16Array]',int32Tag='[object Int32Array]',uint8Tag='[object Uint8Array]',uint8ClampedTag='[object Uint8ClampedArray]',uint16Tag='[object Uint16Array]',uint32Tag='[object Uint32Array]';/** Used to match empty string literals in compiled template source. */var reEmptyStringLeading=/\\b__p \\+= '';/g,reEmptyStringMiddle=/\\b(__p \\+=) '' \\+/g,reEmptyStringTrailing=/(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g;/** Used to match HTML entities and HTML characters. */var reEscapedHtml=/&(?:amp|lt|gt|quot|#39);/g,reUnescapedHtml=/[&<>\"']/g,reHasEscapedHtml=RegExp(reEscapedHtml.source),reHasUnescapedHtml=RegExp(reUnescapedHtml.source);/** Used to match template delimiters. */var reEscape=/<%-([\\s\\S]+?)%>/g,reEvaluate=/<%([\\s\\S]+?)%>/g,reInterpolate=/<%=([\\s\\S]+?)%>/g;/** Used to match property names within property paths. */var reIsDeepProp=/\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,reIsPlainProp=/^\\w*$/,rePropName=/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;/**\n     * Used to match `RegExp`\n     * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n     */var reRegExpChar=/[\\\\^$.*+?()[\\]{}|]/g,reHasRegExpChar=RegExp(reRegExpChar.source);/** Used to match leading and trailing whitespace. */var reTrim=/^\\s+|\\s+$/g,reTrimStart=/^\\s+/,reTrimEnd=/\\s+$/;/** Used to match wrap detail comments. */var reWrapComment=/\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,reWrapDetails=/\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,reSplitDetails=/,? & /;/** Used to match words composed of alphanumeric characters. */var reAsciiWord=/[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;/** Used to match backslashes in property paths. */var reEscapeChar=/\\\\(\\\\)?/g;/**\n     * Used to match\n     * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).\n     */var reEsTemplate=/\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g;/** Used to match `RegExp` flags from their coerced string values. */var reFlags=/\\w*$/;/** Used to detect bad signed hexadecimal string values. */var reIsBadHex=/^[-+]0x[0-9a-f]+$/i;/** Used to detect binary string values. */var reIsBinary=/^0b[01]+$/i;/** Used to detect host constructors (Safari). */var reIsHostCtor=/^\\[object .+?Constructor\\]$/;/** Used to detect octal string values. */var reIsOctal=/^0o[0-7]+$/i;/** Used to detect unsigned integer values. */var reIsUint=/^(?:0|[1-9]\\d*)$/;/** Used to match Latin Unicode letters (excluding mathematical operators). */var reLatin=/[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;/** Used to ensure capturing order of template delimiters. */var reNoMatch=/($^)/;/** Used to match unescaped characters in compiled string literals. */var reUnescapedString=/['\\n\\r\\u2028\\u2029\\\\]/g;/** Used to compose unicode character classes. */var rsAstralRange='\\\\ud800-\\\\udfff',rsComboMarksRange='\\\\u0300-\\\\u036f',reComboHalfMarksRange='\\\\ufe20-\\\\ufe2f',rsComboSymbolsRange='\\\\u20d0-\\\\u20ff',rsComboRange=rsComboMarksRange+reComboHalfMarksRange+rsComboSymbolsRange,rsDingbatRange='\\\\u2700-\\\\u27bf',rsLowerRange='a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',rsMathOpRange='\\\\xac\\\\xb1\\\\xd7\\\\xf7',rsNonCharRange='\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',rsPunctuationRange='\\\\u2000-\\\\u206f',rsSpaceRange=' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',rsUpperRange='A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',rsVarRange='\\\\ufe0e\\\\ufe0f',rsBreakRange=rsMathOpRange+rsNonCharRange+rsPunctuationRange+rsSpaceRange;/** Used to compose unicode capture groups. */var rsApos='[\\'\\u2019]',rsAstral='['+rsAstralRange+']',rsBreak='['+rsBreakRange+']',rsCombo='['+rsComboRange+']',rsDigits='\\\\d+',rsDingbat='['+rsDingbatRange+']',rsLower='['+rsLowerRange+']',rsMisc='[^'+rsAstralRange+rsBreakRange+rsDigits+rsDingbatRange+rsLowerRange+rsUpperRange+']',rsFitz='\\\\ud83c[\\\\udffb-\\\\udfff]',rsModifier='(?:'+rsCombo+'|'+rsFitz+')',rsNonAstral='[^'+rsAstralRange+']',rsRegional='(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',rsSurrPair='[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',rsUpper='['+rsUpperRange+']',rsZWJ='\\\\u200d';/** Used to compose unicode regexes. */var rsMiscLower='(?:'+rsLower+'|'+rsMisc+')',rsMiscUpper='(?:'+rsUpper+'|'+rsMisc+')',rsOptContrLower='(?:'+rsApos+'(?:d|ll|m|re|s|t|ve))?',rsOptContrUpper='(?:'+rsApos+'(?:D|LL|M|RE|S|T|VE))?',reOptMod=rsModifier+'?',rsOptVar='['+rsVarRange+']?',rsOptJoin='(?:'+rsZWJ+'(?:'+[rsNonAstral,rsRegional,rsSurrPair].join('|')+')'+rsOptVar+reOptMod+')*',rsOrdLower='\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',rsOrdUpper='\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',rsSeq=rsOptVar+reOptMod+rsOptJoin,rsEmoji='(?:'+[rsDingbat,rsRegional,rsSurrPair].join('|')+')'+rsSeq,rsSymbol='(?:'+[rsNonAstral+rsCombo+'?',rsCombo,rsRegional,rsSurrPair,rsAstral].join('|')+')';/** Used to match apostrophes. */var reApos=RegExp(rsApos,'g');/**\n     * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n     * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n     */var reComboMark=RegExp(rsCombo,'g');/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */var reUnicode=RegExp(rsFitz+'(?='+rsFitz+')|'+rsSymbol+rsSeq,'g');/** Used to match complex or compound words. */var reUnicodeWord=RegExp([rsUpper+'?'+rsLower+'+'+rsOptContrLower+'(?='+[rsBreak,rsUpper,'$'].join('|')+')',rsMiscUpper+'+'+rsOptContrUpper+'(?='+[rsBreak,rsUpper+rsMiscLower,'$'].join('|')+')',rsUpper+'?'+rsMiscLower+'+'+rsOptContrLower,rsUpper+'+'+rsOptContrUpper,rsOrdUpper,rsOrdLower,rsDigits,rsEmoji].join('|'),'g');/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */var reHasUnicode=RegExp('['+rsZWJ+rsAstralRange+rsComboRange+rsVarRange+']');/** Used to detect strings that need a more robust regexp to match words. */var reHasUnicodeWord=/[a-z][A-Z]|[A-Z]{2,}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;/** Used to assign default `context` object properties. */var contextProps=['Array','Buffer','DataView','Date','Error','Float32Array','Float64Array','Function','Int8Array','Int16Array','Int32Array','Map','Math','Object','Promise','RegExp','Set','String','Symbol','TypeError','Uint8Array','Uint8ClampedArray','Uint16Array','Uint32Array','WeakMap','_','clearTimeout','isFinite','parseInt','setTimeout'];/** Used to make template sourceURLs easier to identify. */var templateCounter=-1;/** Used to identify `toStringTag` values of typed arrays. */var typedArrayTags={};typedArrayTags[float32Tag]=typedArrayTags[float64Tag]=typedArrayTags[int8Tag]=typedArrayTags[int16Tag]=typedArrayTags[int32Tag]=typedArrayTags[uint8Tag]=typedArrayTags[uint8ClampedTag]=typedArrayTags[uint16Tag]=typedArrayTags[uint32Tag]=true;typedArrayTags[argsTag]=typedArrayTags[arrayTag]=typedArrayTags[arrayBufferTag]=typedArrayTags[boolTag]=typedArrayTags[dataViewTag]=typedArrayTags[dateTag]=typedArrayTags[errorTag]=typedArrayTags[funcTag]=typedArrayTags[mapTag]=typedArrayTags[numberTag]=typedArrayTags[objectTag]=typedArrayTags[regexpTag]=typedArrayTags[setTag]=typedArrayTags[stringTag]=typedArrayTags[weakMapTag]=false;/** Used to identify `toStringTag` values supported by `_.clone`. */var cloneableTags={};cloneableTags[argsTag]=cloneableTags[arrayTag]=cloneableTags[arrayBufferTag]=cloneableTags[dataViewTag]=cloneableTags[boolTag]=cloneableTags[dateTag]=cloneableTags[float32Tag]=cloneableTags[float64Tag]=cloneableTags[int8Tag]=cloneableTags[int16Tag]=cloneableTags[int32Tag]=cloneableTags[mapTag]=cloneableTags[numberTag]=cloneableTags[objectTag]=cloneableTags[regexpTag]=cloneableTags[setTag]=cloneableTags[stringTag]=cloneableTags[symbolTag]=cloneableTags[uint8Tag]=cloneableTags[uint8ClampedTag]=cloneableTags[uint16Tag]=cloneableTags[uint32Tag]=true;cloneableTags[errorTag]=cloneableTags[funcTag]=cloneableTags[weakMapTag]=false;/** Used to map Latin Unicode letters to basic Latin letters. */var deburredLetters={// Latin-1 Supplement block.\nÀ:'A',Á:'A',Â:'A',Ã:'A',Ä:'A',Å:'A',à:'a',á:'a',â:'a',ã:'a',ä:'a',å:'a',Ç:'C',ç:'c',Ð:'D',ð:'d',È:'E',É:'E',Ê:'E',Ë:'E',è:'e',é:'e',ê:'e',ë:'e',Ì:'I',Í:'I',Î:'I',Ï:'I',ì:'i',í:'i',î:'i',ï:'i',Ñ:'N',ñ:'n',Ò:'O',Ó:'O',Ô:'O',Õ:'O',Ö:'O',Ø:'O',ò:'o',ó:'o',ô:'o',õ:'o',ö:'o',ø:'o',Ù:'U',Ú:'U',Û:'U',Ü:'U',ù:'u',ú:'u',û:'u',ü:'u',Ý:'Y',ý:'y',ÿ:'y',Æ:'Ae',æ:'ae',Þ:'Th',þ:'th',ß:'ss',// Latin Extended-A block.\nĀ:'A',Ă:'A',Ą:'A',ā:'a',ă:'a',ą:'a',Ć:'C',Ĉ:'C',Ċ:'C',Č:'C',ć:'c',ĉ:'c',ċ:'c',č:'c',Ď:'D',Đ:'D',ď:'d',đ:'d',Ē:'E',Ĕ:'E',Ė:'E',Ę:'E',Ě:'E',ē:'e',ĕ:'e',ė:'e',ę:'e',ě:'e',Ĝ:'G',Ğ:'G',Ġ:'G',Ģ:'G',ĝ:'g',ğ:'g',ġ:'g',ģ:'g',Ĥ:'H',Ħ:'H',ĥ:'h',ħ:'h',Ĩ:'I',Ī:'I',Ĭ:'I',Į:'I',İ:'I',ĩ:'i',ī:'i',ĭ:'i',į:'i',ı:'i',Ĵ:'J',ĵ:'j',Ķ:'K',ķ:'k',ĸ:'k',Ĺ:'L',Ļ:'L',Ľ:'L',Ŀ:'L',Ł:'L',ĺ:'l',ļ:'l',ľ:'l',ŀ:'l',ł:'l',Ń:'N',Ņ:'N',Ň:'N',Ŋ:'N',ń:'n',ņ:'n',ň:'n',ŋ:'n',Ō:'O',Ŏ:'O',Ő:'O',ō:'o',ŏ:'o',ő:'o',Ŕ:'R',Ŗ:'R',Ř:'R',ŕ:'r',ŗ:'r',ř:'r',Ś:'S',Ŝ:'S',Ş:'S',Š:'S',ś:'s',ŝ:'s',ş:'s',š:'s',Ţ:'T',Ť:'T',Ŧ:'T',ţ:'t',ť:'t',ŧ:'t',Ũ:'U',Ū:'U',Ŭ:'U',Ů:'U',Ű:'U',Ų:'U',ũ:'u',ū:'u',ŭ:'u',ů:'u',ű:'u',ų:'u',Ŵ:'W',ŵ:'w',Ŷ:'Y',ŷ:'y',Ÿ:'Y',Ź:'Z',Ż:'Z',Ž:'Z',ź:'z',ż:'z',ž:'z',IJ:'IJ',ij:'ij',Œ:'Oe',œ:'oe',ʼn:\"'n\",ſ:'s'};/** Used to map characters to HTML entities. */var htmlEscapes={'&':'&amp;','<':'&lt;','>':'&gt;','\"':'&quot;',\"'\":'&#39;'};/** Used to map HTML entities to characters. */var htmlUnescapes={'&amp;':'&','&lt;':'<','&gt;':'>','&quot;':'\"','&#39;':\"'\"};/** Used to escape characters for inclusion in compiled string literals. */var stringEscapes={'\\\\':'\\\\',\"'\":\"'\",'\\n':'n','\\r':'r','\\u2028':'u2028','\\u2029':'u2029'};/** Built-in method references without a dependency on `root`. */var freeParseFloat=parseFloat,freeParseInt=parseInt;/** Detect free variable `global` from Node.js. */var freeGlobal=(typeof __webpack_require__.g==='undefined'?'undefined':_typeof(__webpack_require__.g))==='object'&&__webpack_require__.g&&__webpack_require__.g.Object===Object&&__webpack_require__.g;/** Detect free variable `self`. */var freeSelf=(typeof self==='undefined'?'undefined':_typeof(self))==='object'&&self&&self.Object===Object&&self;/** Used as a reference to the global object. */var root=freeGlobal||freeSelf||Function('return this')();/** Detect free variable `exports`. */var freeExports=( false?0:_typeof(exports))==='object'&&exports&&!exports.nodeType&&exports;/** Detect free variable `module`. */var freeModule=freeExports&&( false?0:_typeof(module))==='object'&&module&&!module.nodeType&&module;/** Detect the popular CommonJS extension `module.exports`. */var moduleExports=freeModule&&freeModule.exports===freeExports;/** Detect free variable `process` from Node.js. */var freeProcess=moduleExports&&freeGlobal.process;/** Used to access faster Node.js helpers. */var nodeUtil=function(){try{// Use `util.types` for Node.js 10+.\nvar types=freeModule&&freeModule.require&&freeModule.require('util').types;if(types){return types;}// Legacy `process.binding('util')` for Node.js < 10.\nreturn freeProcess&&freeProcess.binding&&freeProcess.binding('util');}catch(e){}}();/* Node.js helper references. */var nodeIsArrayBuffer=nodeUtil&&nodeUtil.isArrayBuffer,nodeIsDate=nodeUtil&&nodeUtil.isDate,nodeIsMap=nodeUtil&&nodeUtil.isMap,nodeIsRegExp=nodeUtil&&nodeUtil.isRegExp,nodeIsSet=nodeUtil&&nodeUtil.isSet,nodeIsTypedArray=nodeUtil&&nodeUtil.isTypedArray;/* --------------------------------------------------------------------------*//**\n     * A faster alternative to `Function#apply`, this function invokes `func`\n     * with the `this` binding of `thisArg` and the arguments of `args`.\n     *\n     * @private\n     * @param {Function} func The function to invoke.\n     * @param {*} thisArg The `this` binding of `func`.\n     * @param {Array} args The arguments to invoke `func` with.\n     * @returns {*} Returns the result of `func`.\n     */function apply(func,thisArg,args){switch(args.length){case 0:return func.call(thisArg);case 1:return func.call(thisArg,args[0]);case 2:return func.call(thisArg,args[0],args[1]);case 3:return func.call(thisArg,args[0],args[1],args[2]);}return func.apply(thisArg,args);}/**\n     * A specialized version of `baseAggregator` for arrays.\n     *\n     * @private\n     * @param {Array} [array] The array to iterate over.\n     * @param {Function} setter The function to set `accumulator` values.\n     * @param {Function} iteratee The iteratee to transform keys.\n     * @param {Object} accumulator The initial aggregated object.\n     * @returns {Function} Returns `accumulator`.\n     */function arrayAggregator(array,setter,iteratee,accumulator){var index=-1,length=array==null?0:array.length;while(++index<length){var value=array[index];setter(accumulator,value,iteratee(value),array);}return accumulator;}/**\n     * A specialized version of `_.forEach` for arrays without support for\n     * iteratee shorthands.\n     *\n     * @private\n     * @param {Array} [array] The array to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array} Returns `array`.\n     */function arrayEach(array,iteratee){var index=-1,length=array==null?0:array.length;while(++index<length){if(iteratee(array[index],index,array)===false){break;}}return array;}/**\n     * A specialized version of `_.forEachRight` for arrays without support for\n     * iteratee shorthands.\n     *\n     * @private\n     * @param {Array} [array] The array to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array} Returns `array`.\n     */function arrayEachRight(array,iteratee){var length=array==null?0:array.length;while(length--){if(iteratee(array[length],length,array)===false){break;}}return array;}/**\n     * A specialized version of `_.every` for arrays without support for\n     * iteratee shorthands.\n     *\n     * @private\n     * @param {Array} [array] The array to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {boolean} Returns `true` if all elements pass the predicate check,\n     *  else `false`.\n     */function arrayEvery(array,predicate){var index=-1,length=array==null?0:array.length;while(++index<length){if(!predicate(array[index],index,array)){return false;}}return true;}/**\n     * A specialized version of `_.filter` for arrays without support for\n     * iteratee shorthands.\n     *\n     * @private\n     * @param {Array} [array] The array to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     */function arrayFilter(array,predicate){var index=-1,length=array==null?0:array.length,resIndex=0,result=[];while(++index<length){var value=array[index];if(predicate(value,index,array)){result[resIndex++]=value;}}return result;}/**\n     * A specialized version of `_.includes` for arrays without support for\n     * specifying an index to search from.\n     *\n     * @private\n     * @param {Array} [array] The array to inspect.\n     * @param {*} target The value to search for.\n     * @returns {boolean} Returns `true` if `target` is found, else `false`.\n     */function arrayIncludes(array,value){var length=array==null?0:array.length;return!!length&&baseIndexOf(array,value,0)>-1;}/**\n     * This function is like `arrayIncludes` except that it accepts a comparator.\n     *\n     * @private\n     * @param {Array} [array] The array to inspect.\n     * @param {*} target The value to search for.\n     * @param {Function} comparator The comparator invoked per element.\n     * @returns {boolean} Returns `true` if `target` is found, else `false`.\n     */function arrayIncludesWith(array,value,comparator){var index=-1,length=array==null?0:array.length;while(++index<length){if(comparator(value,array[index])){return true;}}return false;}/**\n     * A specialized version of `_.map` for arrays without support for iteratee\n     * shorthands.\n     *\n     * @private\n     * @param {Array} [array] The array to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array} Returns the new mapped array.\n     */function arrayMap(array,iteratee){var index=-1,length=array==null?0:array.length,result=Array(length);while(++index<length){result[index]=iteratee(array[index],index,array);}return result;}/**\n     * Appends the elements of `values` to `array`.\n     *\n     * @private\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to append.\n     * @returns {Array} Returns `array`.\n     */function arrayPush(array,values){var index=-1,length=values.length,offset=array.length;while(++index<length){array[offset+index]=values[index];}return array;}/**\n     * A specialized version of `_.reduce` for arrays without support for\n     * iteratee shorthands.\n     *\n     * @private\n     * @param {Array} [array] The array to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @param {*} [accumulator] The initial value.\n     * @param {boolean} [initAccum] Specify using the first element of `array` as\n     *  the initial value.\n     * @returns {*} Returns the accumulated value.\n     */function arrayReduce(array,iteratee,accumulator,initAccum){var index=-1,length=array==null?0:array.length;if(initAccum&&length){accumulator=array[++index];}while(++index<length){accumulator=iteratee(accumulator,array[index],index,array);}return accumulator;}/**\n     * A specialized version of `_.reduceRight` for arrays without support for\n     * iteratee shorthands.\n     *\n     * @private\n     * @param {Array} [array] The array to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @param {*} [accumulator] The initial value.\n     * @param {boolean} [initAccum] Specify using the last element of `array` as\n     *  the initial value.\n     * @returns {*} Returns the accumulated value.\n     */function arrayReduceRight(array,iteratee,accumulator,initAccum){var length=array==null?0:array.length;if(initAccum&&length){accumulator=array[--length];}while(length--){accumulator=iteratee(accumulator,array[length],length,array);}return accumulator;}/**\n     * A specialized version of `_.some` for arrays without support for iteratee\n     * shorthands.\n     *\n     * @private\n     * @param {Array} [array] The array to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {boolean} Returns `true` if any element passes the predicate check,\n     *  else `false`.\n     */function arraySome(array,predicate){var index=-1,length=array==null?0:array.length;while(++index<length){if(predicate(array[index],index,array)){return true;}}return false;}/**\n     * Gets the size of an ASCII `string`.\n     *\n     * @private\n     * @param {string} string The string inspect.\n     * @returns {number} Returns the string size.\n     */var asciiSize=baseProperty('length');/**\n     * Converts an ASCII `string` to an array.\n     *\n     * @private\n     * @param {string} string The string to convert.\n     * @returns {Array} Returns the converted array.\n     */function asciiToArray(string){return string.split('');}/**\n     * Splits an ASCII `string` into an array of its words.\n     *\n     * @private\n     * @param {string} The string to inspect.\n     * @returns {Array} Returns the words of `string`.\n     */function asciiWords(string){return string.match(reAsciiWord)||[];}/**\n     * The base implementation of methods like `_.findKey` and `_.findLastKey`,\n     * without support for iteratee shorthands, which iterates over `collection`\n     * using `eachFunc`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to inspect.\n     * @param {Function} predicate The function invoked per iteration.\n     * @param {Function} eachFunc The function to iterate over `collection`.\n     * @returns {*} Returns the found element or its key, else `undefined`.\n     */function baseFindKey(collection,predicate,eachFunc){var result;eachFunc(collection,function(value,key,collection){if(predicate(value,key,collection)){result=key;return false;}});return result;}/**\n     * The base implementation of `_.findIndex` and `_.findLastIndex` without\n     * support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {Function} predicate The function invoked per iteration.\n     * @param {number} fromIndex The index to search from.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     */function baseFindIndex(array,predicate,fromIndex,fromRight){var length=array.length,index=fromIndex+(fromRight?1:-1);while(fromRight?index--:++index<length){if(predicate(array[index],index,array)){return index;}}return-1;}/**\n     * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} fromIndex The index to search from.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     */function baseIndexOf(array,value,fromIndex){return value===value?strictIndexOf(array,value,fromIndex):baseFindIndex(array,baseIsNaN,fromIndex);}/**\n     * This function is like `baseIndexOf` except that it accepts a comparator.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} fromIndex The index to search from.\n     * @param {Function} comparator The comparator invoked per element.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     */function baseIndexOfWith(array,value,fromIndex,comparator){var index=fromIndex-1,length=array.length;while(++index<length){if(comparator(array[index],value)){return index;}}return-1;}/**\n     * The base implementation of `_.isNaN` without support for number objects.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n     */function baseIsNaN(value){return value!==value;}/**\n     * The base implementation of `_.mean` and `_.meanBy` without support for\n     * iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {number} Returns the mean.\n     */function baseMean(array,iteratee){var length=array==null?0:array.length;return length?baseSum(array,iteratee)/length:NAN;}/**\n     * The base implementation of `_.property` without support for deep paths.\n     *\n     * @private\n     * @param {string} key The key of the property to get.\n     * @returns {Function} Returns the new accessor function.\n     */function baseProperty(key){return function(object){return object==null?undefined:object[key];};}/**\n     * The base implementation of `_.propertyOf` without support for deep paths.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Function} Returns the new accessor function.\n     */function basePropertyOf(object){return function(key){return object==null?undefined:object[key];};}/**\n     * The base implementation of `_.reduce` and `_.reduceRight`, without support\n     * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @param {*} accumulator The initial value.\n     * @param {boolean} initAccum Specify using the first or last element of\n     *  `collection` as the initial value.\n     * @param {Function} eachFunc The function to iterate over `collection`.\n     * @returns {*} Returns the accumulated value.\n     */function baseReduce(collection,iteratee,accumulator,initAccum,eachFunc){eachFunc(collection,function(value,index,collection){accumulator=initAccum?(initAccum=false,value):iteratee(accumulator,value,index,collection);});return accumulator;}/**\n     * The base implementation of `_.sortBy` which uses `comparer` to define the\n     * sort order of `array` and replaces criteria objects with their corresponding\n     * values.\n     *\n     * @private\n     * @param {Array} array The array to sort.\n     * @param {Function} comparer The function to define sort order.\n     * @returns {Array} Returns `array`.\n     */function baseSortBy(array,comparer){var length=array.length;array.sort(comparer);while(length--){array[length]=array[length].value;}return array;}/**\n     * The base implementation of `_.sum` and `_.sumBy` without support for\n     * iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {number} Returns the sum.\n     */function baseSum(array,iteratee){var result,index=-1,length=array.length;while(++index<length){var current=iteratee(array[index]);if(current!==undefined){result=result===undefined?current:result+current;}}return result;}/**\n     * The base implementation of `_.times` without support for iteratee shorthands\n     * or max array length checks.\n     *\n     * @private\n     * @param {number} n The number of times to invoke `iteratee`.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array} Returns the array of results.\n     */function baseTimes(n,iteratee){var index=-1,result=Array(n);while(++index<n){result[index]=iteratee(index);}return result;}/**\n     * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array\n     * of key-value pairs for `object` corresponding to the property names of `props`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array} props The property names to get values for.\n     * @returns {Object} Returns the key-value pairs.\n     */function baseToPairs(object,props){return arrayMap(props,function(key){return[key,object[key]];});}/**\n     * The base implementation of `_.unary` without support for storing metadata.\n     *\n     * @private\n     * @param {Function} func The function to cap arguments for.\n     * @returns {Function} Returns the new capped function.\n     */function baseUnary(func){return function(value){return func(value);};}/**\n     * The base implementation of `_.values` and `_.valuesIn` which creates an\n     * array of `object` property values corresponding to the property names\n     * of `props`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array} props The property names to get values for.\n     * @returns {Object} Returns the array of property values.\n     */function baseValues(object,props){return arrayMap(props,function(key){return object[key];});}/**\n     * Checks if a `cache` value for `key` exists.\n     *\n     * @private\n     * @param {Object} cache The cache to query.\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */function cacheHas(cache,key){return cache.has(key);}/**\n     * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol\n     * that is not found in the character symbols.\n     *\n     * @private\n     * @param {Array} strSymbols The string symbols to inspect.\n     * @param {Array} chrSymbols The character symbols to find.\n     * @returns {number} Returns the index of the first unmatched string symbol.\n     */function charsStartIndex(strSymbols,chrSymbols){var index=-1,length=strSymbols.length;while(++index<length&&baseIndexOf(chrSymbols,strSymbols[index],0)>-1){}return index;}/**\n     * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol\n     * that is not found in the character symbols.\n     *\n     * @private\n     * @param {Array} strSymbols The string symbols to inspect.\n     * @param {Array} chrSymbols The character symbols to find.\n     * @returns {number} Returns the index of the last unmatched string symbol.\n     */function charsEndIndex(strSymbols,chrSymbols){var index=strSymbols.length;while(index--&&baseIndexOf(chrSymbols,strSymbols[index],0)>-1){}return index;}/**\n     * Gets the number of `placeholder` occurrences in `array`.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {*} placeholder The placeholder to search for.\n     * @returns {number} Returns the placeholder count.\n     */function countHolders(array,placeholder){var length=array.length,result=0;while(length--){if(array[length]===placeholder){++result;}}return result;}/**\n     * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n     * letters to basic Latin letters.\n     *\n     * @private\n     * @param {string} letter The matched letter to deburr.\n     * @returns {string} Returns the deburred letter.\n     */var deburrLetter=basePropertyOf(deburredLetters);/**\n     * Used by `_.escape` to convert characters to HTML entities.\n     *\n     * @private\n     * @param {string} chr The matched character to escape.\n     * @returns {string} Returns the escaped character.\n     */var escapeHtmlChar=basePropertyOf(htmlEscapes);/**\n     * Used by `_.template` to escape characters for inclusion in compiled string literals.\n     *\n     * @private\n     * @param {string} chr The matched character to escape.\n     * @returns {string} Returns the escaped character.\n     */function escapeStringChar(chr){return'\\\\'+stringEscapes[chr];}/**\n     * Gets the value at `key` of `object`.\n     *\n     * @private\n     * @param {Object} [object] The object to query.\n     * @param {string} key The key of the property to get.\n     * @returns {*} Returns the property value.\n     */function getValue(object,key){return object==null?undefined:object[key];}/**\n     * Checks if `string` contains Unicode symbols.\n     *\n     * @private\n     * @param {string} string The string to inspect.\n     * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n     */function hasUnicode(string){return reHasUnicode.test(string);}/**\n     * Checks if `string` contains a word composed of Unicode symbols.\n     *\n     * @private\n     * @param {string} string The string to inspect.\n     * @returns {boolean} Returns `true` if a word is found, else `false`.\n     */function hasUnicodeWord(string){return reHasUnicodeWord.test(string);}/**\n     * Converts `iterator` to an array.\n     *\n     * @private\n     * @param {Object} iterator The iterator to convert.\n     * @returns {Array} Returns the converted array.\n     */function iteratorToArray(iterator){var data,result=[];while(!(data=iterator.next()).done){result.push(data.value);}return result;}/**\n     * Converts `map` to its key-value pairs.\n     *\n     * @private\n     * @param {Object} map The map to convert.\n     * @returns {Array} Returns the key-value pairs.\n     */function mapToArray(map){var index=-1,result=Array(map.size);map.forEach(function(value,key){result[++index]=[key,value];});return result;}/**\n     * Creates a unary function that invokes `func` with its argument transformed.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {Function} transform The argument transform.\n     * @returns {Function} Returns the new function.\n     */function overArg(func,transform){return function(arg){return func(transform(arg));};}/**\n     * Replaces all `placeholder` elements in `array` with an internal placeholder\n     * and returns an array of their indexes.\n     *\n     * @private\n     * @param {Array} array The array to modify.\n     * @param {*} placeholder The placeholder to replace.\n     * @returns {Array} Returns the new array of placeholder indexes.\n     */function replaceHolders(array,placeholder){var index=-1,length=array.length,resIndex=0,result=[];while(++index<length){var value=array[index];if(value===placeholder||value===PLACEHOLDER){array[index]=PLACEHOLDER;result[resIndex++]=index;}}return result;}/**\n     * Gets the value at `key`, unless `key` is \"__proto__\".\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {string} key The key of the property to get.\n     * @returns {*} Returns the property value.\n     */function safeGet(object,key){return key=='__proto__'?undefined:object[key];}/**\n     * Converts `set` to an array of its values.\n     *\n     * @private\n     * @param {Object} set The set to convert.\n     * @returns {Array} Returns the values.\n     */function setToArray(set){var index=-1,result=Array(set.size);set.forEach(function(value){result[++index]=value;});return result;}/**\n     * Converts `set` to its value-value pairs.\n     *\n     * @private\n     * @param {Object} set The set to convert.\n     * @returns {Array} Returns the value-value pairs.\n     */function setToPairs(set){var index=-1,result=Array(set.size);set.forEach(function(value){result[++index]=[value,value];});return result;}/**\n     * A specialized version of `_.indexOf` which performs strict equality\n     * comparisons of values, i.e. `===`.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} fromIndex The index to search from.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     */function strictIndexOf(array,value,fromIndex){var index=fromIndex-1,length=array.length;while(++index<length){if(array[index]===value){return index;}}return-1;}/**\n     * A specialized version of `_.lastIndexOf` which performs strict equality\n     * comparisons of values, i.e. `===`.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} fromIndex The index to search from.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     */function strictLastIndexOf(array,value,fromIndex){var index=fromIndex+1;while(index--){if(array[index]===value){return index;}}return index;}/**\n     * Gets the number of symbols in `string`.\n     *\n     * @private\n     * @param {string} string The string to inspect.\n     * @returns {number} Returns the string size.\n     */function stringSize(string){return hasUnicode(string)?unicodeSize(string):asciiSize(string);}/**\n     * Converts `string` to an array.\n     *\n     * @private\n     * @param {string} string The string to convert.\n     * @returns {Array} Returns the converted array.\n     */function stringToArray(string){return hasUnicode(string)?unicodeToArray(string):asciiToArray(string);}/**\n     * Used by `_.unescape` to convert HTML entities to characters.\n     *\n     * @private\n     * @param {string} chr The matched character to unescape.\n     * @returns {string} Returns the unescaped character.\n     */var unescapeHtmlChar=basePropertyOf(htmlUnescapes);/**\n     * Gets the size of a Unicode `string`.\n     *\n     * @private\n     * @param {string} string The string inspect.\n     * @returns {number} Returns the string size.\n     */function unicodeSize(string){var result=reUnicode.lastIndex=0;while(reUnicode.test(string)){++result;}return result;}/**\n     * Converts a Unicode `string` to an array.\n     *\n     * @private\n     * @param {string} string The string to convert.\n     * @returns {Array} Returns the converted array.\n     */function unicodeToArray(string){return string.match(reUnicode)||[];}/**\n     * Splits a Unicode `string` into an array of its words.\n     *\n     * @private\n     * @param {string} The string to inspect.\n     * @returns {Array} Returns the words of `string`.\n     */function unicodeWords(string){return string.match(reUnicodeWord)||[];}/* --------------------------------------------------------------------------*//**\n     * Create a new pristine `lodash` function using the `context` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.1.0\n     * @category Util\n     * @param {Object} [context=root] The context object.\n     * @returns {Function} Returns a new `lodash` function.\n     * @example\n     *\n     * _.mixin({ 'foo': _.constant('foo') });\n     *\n     * var lodash = _.runInContext();\n     * lodash.mixin({ 'bar': lodash.constant('bar') });\n     *\n     * _.isFunction(_.foo);\n     * // => true\n     * _.isFunction(_.bar);\n     * // => false\n     *\n     * lodash.isFunction(lodash.foo);\n     * // => false\n     * lodash.isFunction(lodash.bar);\n     * // => true\n     *\n     * // Create a suped-up `defer` in Node.js.\n     * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;\n     */var runInContext=function runInContext(context){context=context==null?root:_.defaults(root.Object(),context,_.pick(root,contextProps));/** Built-in constructor references. */var Array=context.Array,Date=context.Date,Error=context.Error,Function=context.Function,Math=context.Math,Object=context.Object,RegExp=context.RegExp,String=context.String,TypeError=context.TypeError;/** Used for built-in method references. */var arrayProto=Array.prototype,funcProto=Function.prototype,objectProto=Object.prototype;/** Used to detect overreaching core-js shims. */var coreJsData=context['__core-js_shared__'];/** Used to resolve the decompiled source of functions. */var funcToString=funcProto.toString;/** Used to check objects for own properties. */var hasOwnProperty=objectProto.hasOwnProperty;/** Used to generate unique IDs. */var idCounter=0;/** Used to detect methods masquerading as native. */var maskSrcKey=function(){var uid=/[^.]+$/.exec(coreJsData&&coreJsData.keys&&coreJsData.keys.IE_PROTO||'');return uid?'Symbol(src)_1.'+uid:'';}();/**\n       * Used to resolve the\n       * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n       * of values.\n       */var nativeObjectToString=objectProto.toString;/** Used to infer the `Object` constructor. */var objectCtorString=funcToString.call(Object);/** Used to restore the original `_` reference in `_.noConflict`. */var oldDash=root._;/** Used to detect if a method is native. */var reIsNative=RegExp('^'+funcToString.call(hasOwnProperty).replace(reRegExpChar,'\\\\$&').replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,'$1.*?')+'$');/** Built-in value references. */var Buffer=moduleExports?context.Buffer:undefined,_Symbol=context.Symbol,Uint8Array=context.Uint8Array,allocUnsafe=Buffer?Buffer.allocUnsafe:undefined,getPrototype=overArg(Object.getPrototypeOf,Object),objectCreate=Object.create,propertyIsEnumerable=objectProto.propertyIsEnumerable,splice=arrayProto.splice,spreadableSymbol=_Symbol?_Symbol.isConcatSpreadable:undefined,symIterator=_Symbol?_Symbol.iterator:undefined,symToStringTag=_Symbol?_Symbol.toStringTag:undefined;var defineProperty=function(){try{var func=getNative(Object,'defineProperty');func({},'',{});return func;}catch(e){}}();/** Mocked built-ins. */var ctxClearTimeout=context.clearTimeout!==root.clearTimeout&&context.clearTimeout,ctxNow=Date&&Date.now!==root.Date.now&&Date.now,ctxSetTimeout=context.setTimeout!==root.setTimeout&&context.setTimeout;/* Built-in method references for those with the same name as other `lodash` methods. */var nativeCeil=Math.ceil,nativeFloor=Math.floor,nativeGetSymbols=Object.getOwnPropertySymbols,nativeIsBuffer=Buffer?Buffer.isBuffer:undefined,nativeIsFinite=context.isFinite,nativeJoin=arrayProto.join,nativeKeys=overArg(Object.keys,Object),nativeMax=Math.max,nativeMin=Math.min,nativeNow=Date.now,nativeParseInt=context.parseInt,nativeRandom=Math.random,nativeReverse=arrayProto.reverse;/* Built-in method references that are verified to be native. */var DataView=getNative(context,'DataView'),Map=getNative(context,'Map'),Promise=getNative(context,'Promise'),Set=getNative(context,'Set'),WeakMap=getNative(context,'WeakMap'),nativeCreate=getNative(Object,'create');/** Used to store function metadata. */var metaMap=WeakMap&&new WeakMap();/** Used to lookup unminified function names. */var realNames={};/** Used to detect maps, sets, and weakmaps. */var dataViewCtorString=toSource(DataView),mapCtorString=toSource(Map),promiseCtorString=toSource(Promise),setCtorString=toSource(Set),weakMapCtorString=toSource(WeakMap);/** Used to convert symbols to primitives and strings. */var symbolProto=_Symbol?_Symbol.prototype:undefined,symbolValueOf=symbolProto?symbolProto.valueOf:undefined,symbolToString=symbolProto?symbolProto.toString:undefined;/* ------------------------------------------------------------------------*//**\n       * Creates a `lodash` object which wraps `value` to enable implicit method\n       * chain sequences. Methods that operate on and return arrays, collections,\n       * and functions can be chained together. Methods that retrieve a single value\n       * or may return a primitive value will automatically end the chain sequence\n       * and return the unwrapped value. Otherwise, the value must be unwrapped\n       * with `_#value`.\n       *\n       * Explicit chain sequences, which must be unwrapped with `_#value`, may be\n       * enabled using `_.chain`.\n       *\n       * The execution of chained methods is lazy, that is, it's deferred until\n       * `_#value` is implicitly or explicitly called.\n       *\n       * Lazy evaluation allows several methods to support shortcut fusion.\n       * Shortcut fusion is an optimization to merge iteratee calls; this avoids\n       * the creation of intermediate arrays and can greatly reduce the number of\n       * iteratee executions. Sections of a chain sequence qualify for shortcut\n       * fusion if the section is applied to an array and iteratees accept only\n       * one argument. The heuristic for whether a section qualifies for shortcut\n       * fusion is subject to change.\n       *\n       * Chaining is supported in custom builds as long as the `_#value` method is\n       * directly or indirectly included in the build.\n       *\n       * In addition to lodash methods, wrappers have `Array` and `String` methods.\n       *\n       * The wrapper `Array` methods are:\n       * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`\n       *\n       * The wrapper `String` methods are:\n       * `replace` and `split`\n       *\n       * The wrapper methods that support shortcut fusion are:\n       * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,\n       * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,\n       * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`\n       *\n       * The chainable wrapper methods are:\n       * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,\n       * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,\n       * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,\n       * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,\n       * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,\n       * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,\n       * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,\n       * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,\n       * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,\n       * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,\n       * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,\n       * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,\n       * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,\n       * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,\n       * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,\n       * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,\n       * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,\n       * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,\n       * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,\n       * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,\n       * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,\n       * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,\n       * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,\n       * `zipObject`, `zipObjectDeep`, and `zipWith`\n       *\n       * The wrapper methods that are **not** chainable by default are:\n       * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,\n       * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,\n       * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,\n       * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,\n       * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,\n       * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,\n       * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,\n       * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,\n       * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,\n       * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,\n       * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,\n       * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,\n       * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,\n       * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,\n       * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,\n       * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,\n       * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,\n       * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,\n       * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,\n       * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,\n       * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,\n       * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,\n       * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,\n       * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,\n       * `upperFirst`, `value`, and `words`\n       *\n       * @name _\n       * @constructor\n       * @category Seq\n       * @param {*} value The value to wrap in a `lodash` instance.\n       * @returns {Object} Returns the new `lodash` wrapper instance.\n       * @example\n       *\n       * function square(n) {\n       *   return n * n;\n       * }\n       *\n       * var wrapped = _([1, 2, 3]);\n       *\n       * // Returns an unwrapped value.\n       * wrapped.reduce(_.add);\n       * // => 6\n       *\n       * // Returns a wrapped value.\n       * var squares = wrapped.map(square);\n       *\n       * _.isArray(squares);\n       * // => false\n       *\n       * _.isArray(squares.value());\n       * // => true\n       */function lodash(value){if(isObjectLike(value)&&!isArray(value)&&!(value instanceof LazyWrapper)){if(value instanceof LodashWrapper){return value;}if(hasOwnProperty.call(value,'__wrapped__')){return wrapperClone(value);}}return new LodashWrapper(value);}/**\n         * The base implementation of `_.create` without support for assigning\n         * properties to the created object.\n         *\n         * @private\n         * @param {Object} proto The object to inherit from.\n         * @returns {Object} Returns the new object.\n         */var baseCreate=function(){function object(){}return function(proto){if(!isObject(proto)){return{};}if(objectCreate){return objectCreate(proto);}object.prototype=proto;var result=new object();object.prototype=undefined;return result;};}();/**\n       * The function whose prototype chain sequence wrappers inherit from.\n       *\n       * @private\n       */function baseLodash(){}// No operation performed.\n/**\n         * The base constructor for creating `lodash` wrapper objects.\n         *\n         * @private\n         * @param {*} value The value to wrap.\n         * @param {boolean} [chainAll] Enable explicit method chain sequences.\n         */function LodashWrapper(value,chainAll){this.__wrapped__=value;this.__actions__=[];this.__chain__=!!chainAll;this.__index__=0;this.__values__=undefined;}/**\n         * By default, the template delimiters used by lodash are like those in\n         * embedded Ruby (ERB) as well as ES2015 template strings. Change the\n         * following template settings to use alternative delimiters.\n         *\n         * @static\n         * @memberOf _\n         * @type {Object}\n         */lodash.templateSettings={/**\n             * Used to detect `data` property values to be HTML-escaped.\n             *\n             * @memberOf _.templateSettings\n             * @type {RegExp}\n             */escape:reEscape,/**\n             * Used to detect code to be evaluated.\n             *\n             * @memberOf _.templateSettings\n             * @type {RegExp}\n             */evaluate:reEvaluate,/**\n             * Used to detect `data` property values to inject.\n             *\n             * @memberOf _.templateSettings\n             * @type {RegExp}\n             */interpolate:reInterpolate,/**\n             * Used to reference the data object in the template text.\n             *\n             * @memberOf _.templateSettings\n             * @type {string}\n             */variable:'',/**\n             * Used to import variables into the compiled template.\n             *\n             * @memberOf _.templateSettings\n             * @type {Object}\n             */imports:{/**\n                 * A reference to the `lodash` function.\n                 *\n                 * @memberOf _.templateSettings.imports\n                 * @type {Function}\n                 */_:lodash}};// Ensure wrappers are instances of `baseLodash`.\nlodash.prototype=baseLodash.prototype;lodash.prototype.constructor=lodash;LodashWrapper.prototype=baseCreate(baseLodash.prototype);LodashWrapper.prototype.constructor=LodashWrapper;/* ------------------------------------------------------------------------*//**\n         * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.\n         *\n         * @private\n         * @constructor\n         * @param {*} value The value to wrap.\n         */function LazyWrapper(value){this.__wrapped__=value;this.__actions__=[];this.__dir__=1;this.__filtered__=false;this.__iteratees__=[];this.__takeCount__=MAX_ARRAY_LENGTH;this.__views__=[];}/**\n         * Creates a clone of the lazy wrapper object.\n         *\n         * @private\n         * @name clone\n         * @memberOf LazyWrapper\n         * @returns {Object} Returns the cloned `LazyWrapper` object.\n         */function lazyClone(){var result=new LazyWrapper(this.__wrapped__);result.__actions__=copyArray(this.__actions__);result.__dir__=this.__dir__;result.__filtered__=this.__filtered__;result.__iteratees__=copyArray(this.__iteratees__);result.__takeCount__=this.__takeCount__;result.__views__=copyArray(this.__views__);return result;}/**\n         * Reverses the direction of lazy iteration.\n         *\n         * @private\n         * @name reverse\n         * @memberOf LazyWrapper\n         * @returns {Object} Returns the new reversed `LazyWrapper` object.\n         */function lazyReverse(){if(this.__filtered__){var result=new LazyWrapper(this);result.__dir__=-1;result.__filtered__=true;}else{result=this.clone();result.__dir__*=-1;}return result;}/**\n         * Extracts the unwrapped value from its lazy wrapper.\n         *\n         * @private\n         * @name value\n         * @memberOf LazyWrapper\n         * @returns {*} Returns the unwrapped value.\n         */function lazyValue(){var array=this.__wrapped__.value(),dir=this.__dir__,isArr=isArray(array),isRight=dir<0,arrLength=isArr?array.length:0,view=getView(0,arrLength,this.__views__),start=view.start,end=view.end,length=end-start,index=isRight?end:start-1,iteratees=this.__iteratees__,iterLength=iteratees.length,resIndex=0,takeCount=nativeMin(length,this.__takeCount__);if(!isArr||!isRight&&arrLength==length&&takeCount==length){return baseWrapperValue(array,this.__actions__);}var result=[];outer:while(length--&&resIndex<takeCount){index+=dir;var iterIndex=-1,value=array[index];while(++iterIndex<iterLength){var data=iteratees[iterIndex],iteratee=data.iteratee,type=data.type,computed=iteratee(value);if(type==LAZY_MAP_FLAG){value=computed;}else if(!computed){if(type==LAZY_FILTER_FLAG){continue outer;}else{break outer;}}}result[resIndex++]=value;}return result;}// Ensure `LazyWrapper` is an instance of `baseLodash`.\nLazyWrapper.prototype=baseCreate(baseLodash.prototype);LazyWrapper.prototype.constructor=LazyWrapper;/* ------------------------------------------------------------------------*//**\n         * Creates a hash object.\n         *\n         * @private\n         * @constructor\n         * @param {Array} [entries] The key-value pairs to cache.\n         */function Hash(entries){var index=-1,length=entries==null?0:entries.length;this.clear();while(++index<length){var entry=entries[index];this.set(entry[0],entry[1]);}}/**\n         * Removes all key-value entries from the hash.\n         *\n         * @private\n         * @name clear\n         * @memberOf Hash\n         */function hashClear(){this.__data__=nativeCreate?nativeCreate(null):{};this.size=0;}/**\n         * Removes `key` and its value from the hash.\n         *\n         * @private\n         * @name delete\n         * @memberOf Hash\n         * @param {Object} hash The hash to modify.\n         * @param {string} key The key of the value to remove.\n         * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n         */function hashDelete(key){var result=this.has(key)&&delete this.__data__[key];this.size-=result?1:0;return result;}/**\n         * Gets the hash value for `key`.\n         *\n         * @private\n         * @name get\n         * @memberOf Hash\n         * @param {string} key The key of the value to get.\n         * @returns {*} Returns the entry value.\n         */function hashGet(key){var data=this.__data__;if(nativeCreate){var result=data[key];return result===HASH_UNDEFINED?undefined:result;}return hasOwnProperty.call(data,key)?data[key]:undefined;}/**\n         * Checks if a hash value for `key` exists.\n         *\n         * @private\n         * @name has\n         * @memberOf Hash\n         * @param {string} key The key of the entry to check.\n         * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n         */function hashHas(key){var data=this.__data__;return nativeCreate?data[key]!==undefined:hasOwnProperty.call(data,key);}/**\n         * Sets the hash `key` to `value`.\n         *\n         * @private\n         * @name set\n         * @memberOf Hash\n         * @param {string} key The key of the value to set.\n         * @param {*} value The value to set.\n         * @returns {Object} Returns the hash instance.\n         */function hashSet(key,value){var data=this.__data__;this.size+=this.has(key)?0:1;data[key]=nativeCreate&&value===undefined?HASH_UNDEFINED:value;return this;}// Add methods to `Hash`.\nHash.prototype.clear=hashClear;Hash.prototype['delete']=hashDelete;Hash.prototype.get=hashGet;Hash.prototype.has=hashHas;Hash.prototype.set=hashSet;/* ------------------------------------------------------------------------*//**\n         * Creates an list cache object.\n         *\n         * @private\n         * @constructor\n         * @param {Array} [entries] The key-value pairs to cache.\n         */function ListCache(entries){var index=-1,length=entries==null?0:entries.length;this.clear();while(++index<length){var entry=entries[index];this.set(entry[0],entry[1]);}}/**\n         * Removes all key-value entries from the list cache.\n         *\n         * @private\n         * @name clear\n         * @memberOf ListCache\n         */function listCacheClear(){this.__data__=[];this.size=0;}/**\n         * Removes `key` and its value from the list cache.\n         *\n         * @private\n         * @name delete\n         * @memberOf ListCache\n         * @param {string} key The key of the value to remove.\n         * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n         */function listCacheDelete(key){var data=this.__data__,index=assocIndexOf(data,key);if(index<0){return false;}var lastIndex=data.length-1;if(index==lastIndex){data.pop();}else{splice.call(data,index,1);}--this.size;return true;}/**\n         * Gets the list cache value for `key`.\n         *\n         * @private\n         * @name get\n         * @memberOf ListCache\n         * @param {string} key The key of the value to get.\n         * @returns {*} Returns the entry value.\n         */function listCacheGet(key){var data=this.__data__,index=assocIndexOf(data,key);return index<0?undefined:data[index][1];}/**\n         * Checks if a list cache value for `key` exists.\n         *\n         * @private\n         * @name has\n         * @memberOf ListCache\n         * @param {string} key The key of the entry to check.\n         * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n         */function listCacheHas(key){return assocIndexOf(this.__data__,key)>-1;}/**\n         * Sets the list cache `key` to `value`.\n         *\n         * @private\n         * @name set\n         * @memberOf ListCache\n         * @param {string} key The key of the value to set.\n         * @param {*} value The value to set.\n         * @returns {Object} Returns the list cache instance.\n         */function listCacheSet(key,value){var data=this.__data__,index=assocIndexOf(data,key);if(index<0){++this.size;data.push([key,value]);}else{data[index][1]=value;}return this;}// Add methods to `ListCache`.\nListCache.prototype.clear=listCacheClear;ListCache.prototype['delete']=listCacheDelete;ListCache.prototype.get=listCacheGet;ListCache.prototype.has=listCacheHas;ListCache.prototype.set=listCacheSet;/* ------------------------------------------------------------------------*//**\n         * Creates a map cache object to store key-value pairs.\n         *\n         * @private\n         * @constructor\n         * @param {Array} [entries] The key-value pairs to cache.\n         */function MapCache(entries){var index=-1,length=entries==null?0:entries.length;this.clear();while(++index<length){var entry=entries[index];this.set(entry[0],entry[1]);}}/**\n         * Removes all key-value entries from the map.\n         *\n         * @private\n         * @name clear\n         * @memberOf MapCache\n         */function mapCacheClear(){this.size=0;this.__data__={hash:new Hash(),map:new(Map||ListCache)(),string:new Hash()};}/**\n         * Removes `key` and its value from the map.\n         *\n         * @private\n         * @name delete\n         * @memberOf MapCache\n         * @param {string} key The key of the value to remove.\n         * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n         */function mapCacheDelete(key){var result=getMapData(this,key)['delete'](key);this.size-=result?1:0;return result;}/**\n         * Gets the map value for `key`.\n         *\n         * @private\n         * @name get\n         * @memberOf MapCache\n         * @param {string} key The key of the value to get.\n         * @returns {*} Returns the entry value.\n         */function mapCacheGet(key){return getMapData(this,key).get(key);}/**\n         * Checks if a map value for `key` exists.\n         *\n         * @private\n         * @name has\n         * @memberOf MapCache\n         * @param {string} key The key of the entry to check.\n         * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n         */function mapCacheHas(key){return getMapData(this,key).has(key);}/**\n         * Sets the map `key` to `value`.\n         *\n         * @private\n         * @name set\n         * @memberOf MapCache\n         * @param {string} key The key of the value to set.\n         * @param {*} value The value to set.\n         * @returns {Object} Returns the map cache instance.\n         */function mapCacheSet(key,value){var data=getMapData(this,key),size=data.size;data.set(key,value);this.size+=data.size==size?0:1;return this;}// Add methods to `MapCache`.\nMapCache.prototype.clear=mapCacheClear;MapCache.prototype['delete']=mapCacheDelete;MapCache.prototype.get=mapCacheGet;MapCache.prototype.has=mapCacheHas;MapCache.prototype.set=mapCacheSet;/* ------------------------------------------------------------------------*//**\n         *\n         * Creates an array cache object to store unique values.\n         *\n         * @private\n         * @constructor\n         * @param {Array} [values] The values to cache.\n         */function SetCache(values){var index=-1,length=values==null?0:values.length;this.__data__=new MapCache();while(++index<length){this.add(values[index]);}}/**\n         * Adds `value` to the array cache.\n         *\n         * @private\n         * @name add\n         * @memberOf SetCache\n         * @alias push\n         * @param {*} value The value to cache.\n         * @returns {Object} Returns the cache instance.\n         */function setCacheAdd(value){this.__data__.set(value,HASH_UNDEFINED);return this;}/**\n         * Checks if `value` is in the array cache.\n         *\n         * @private\n         * @name has\n         * @memberOf SetCache\n         * @param {*} value The value to search for.\n         * @returns {number} Returns `true` if `value` is found, else `false`.\n         */function setCacheHas(value){return this.__data__.has(value);}// Add methods to `SetCache`.\nSetCache.prototype.add=SetCache.prototype.push=setCacheAdd;SetCache.prototype.has=setCacheHas;/* ------------------------------------------------------------------------*//**\n         * Creates a stack cache object to store key-value pairs.\n         *\n         * @private\n         * @constructor\n         * @param {Array} [entries] The key-value pairs to cache.\n         */function Stack(entries){var data=this.__data__=new ListCache(entries);this.size=data.size;}/**\n         * Removes all key-value entries from the stack.\n         *\n         * @private\n         * @name clear\n         * @memberOf Stack\n         */function stackClear(){this.__data__=new ListCache();this.size=0;}/**\n         * Removes `key` and its value from the stack.\n         *\n         * @private\n         * @name delete\n         * @memberOf Stack\n         * @param {string} key The key of the value to remove.\n         * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n         */function stackDelete(key){var data=this.__data__,result=data['delete'](key);this.size=data.size;return result;}/**\n         * Gets the stack value for `key`.\n         *\n         * @private\n         * @name get\n         * @memberOf Stack\n         * @param {string} key The key of the value to get.\n         * @returns {*} Returns the entry value.\n         */function stackGet(key){return this.__data__.get(key);}/**\n         * Checks if a stack value for `key` exists.\n         *\n         * @private\n         * @name has\n         * @memberOf Stack\n         * @param {string} key The key of the entry to check.\n         * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n         */function stackHas(key){return this.__data__.has(key);}/**\n         * Sets the stack `key` to `value`.\n         *\n         * @private\n         * @name set\n         * @memberOf Stack\n         * @param {string} key The key of the value to set.\n         * @param {*} value The value to set.\n         * @returns {Object} Returns the stack cache instance.\n         */function stackSet(key,value){var data=this.__data__;if(data instanceof ListCache){var pairs=data.__data__;if(!Map||pairs.length<LARGE_ARRAY_SIZE-1){pairs.push([key,value]);this.size=++data.size;return this;}data=this.__data__=new MapCache(pairs);}data.set(key,value);this.size=data.size;return this;}// Add methods to `Stack`.\nStack.prototype.clear=stackClear;Stack.prototype['delete']=stackDelete;Stack.prototype.get=stackGet;Stack.prototype.has=stackHas;Stack.prototype.set=stackSet;/* ------------------------------------------------------------------------*//**\n         * Creates an array of the enumerable property names of the array-like `value`.\n         *\n         * @private\n         * @param {*} value The value to query.\n         * @param {boolean} inherited Specify returning inherited property names.\n         * @returns {Array} Returns the array of property names.\n         */function arrayLikeKeys(value,inherited){var isArr=isArray(value),isArg=!isArr&&isArguments(value),isBuff=!isArr&&!isArg&&isBuffer(value),isType=!isArr&&!isArg&&!isBuff&&isTypedArray(value),skipIndexes=isArr||isArg||isBuff||isType,result=skipIndexes?baseTimes(value.length,String):[],length=result.length;for(var key in value){if((inherited||hasOwnProperty.call(value,key))&&!(skipIndexes&&(// Safari 9 has enumerable `arguments.length` in strict mode.\nkey=='length'||// Node.js 0.10 has enumerable non-index properties on buffers.\nisBuff&&(key=='offset'||key=='parent')||// PhantomJS 2 has enumerable non-index properties on typed arrays.\nisType&&(key=='buffer'||key=='byteLength'||key=='byteOffset')||// Skip index properties.\nisIndex(key,length)))){result.push(key);}}return result;}/**\n         * A specialized version of `_.sample` for arrays.\n         *\n         * @private\n         * @param {Array} array The array to sample.\n         * @returns {*} Returns the random element.\n         */function arraySample(array){var length=array.length;return length?array[baseRandom(0,length-1)]:undefined;}/**\n         * A specialized version of `_.sampleSize` for arrays.\n         *\n         * @private\n         * @param {Array} array The array to sample.\n         * @param {number} n The number of elements to sample.\n         * @returns {Array} Returns the random elements.\n         */function arraySampleSize(array,n){return shuffleSelf(copyArray(array),baseClamp(n,0,array.length));}/**\n         * A specialized version of `_.shuffle` for arrays.\n         *\n         * @private\n         * @param {Array} array The array to shuffle.\n         * @returns {Array} Returns the new shuffled array.\n         */function arrayShuffle(array){return shuffleSelf(copyArray(array));}/**\n         * This function is like `assignValue` except that it doesn't assign\n         * `undefined` values.\n         *\n         * @private\n         * @param {Object} object The object to modify.\n         * @param {string} key The key of the property to assign.\n         * @param {*} value The value to assign.\n         */function assignMergeValue(object,key,value){if(value!==undefined&&!eq(object[key],value)||value===undefined&&!(key in object)){baseAssignValue(object,key,value);}}/**\n         * Assigns `value` to `key` of `object` if the existing value is not equivalent\n         * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n         * for equality comparisons.\n         *\n         * @private\n         * @param {Object} object The object to modify.\n         * @param {string} key The key of the property to assign.\n         * @param {*} value The value to assign.\n         */function assignValue(object,key,value){var objValue=object[key];if(!(hasOwnProperty.call(object,key)&&eq(objValue,value))||value===undefined&&!(key in object)){baseAssignValue(object,key,value);}}/**\n         * Gets the index at which the `key` is found in `array` of key-value pairs.\n         *\n         * @private\n         * @param {Array} array The array to inspect.\n         * @param {*} key The key to search for.\n         * @returns {number} Returns the index of the matched value, else `-1`.\n         */function assocIndexOf(array,key){var length=array.length;while(length--){if(eq(array[length][0],key)){return length;}}return-1;}/**\n         * Aggregates elements of `collection` on `accumulator` with keys transformed\n         * by `iteratee` and values set by `setter`.\n         *\n         * @private\n         * @param {Array|Object} collection The collection to iterate over.\n         * @param {Function} setter The function to set `accumulator` values.\n         * @param {Function} iteratee The iteratee to transform keys.\n         * @param {Object} accumulator The initial aggregated object.\n         * @returns {Function} Returns `accumulator`.\n         */function baseAggregator(collection,setter,iteratee,accumulator){baseEach(collection,function(value,key,collection){setter(accumulator,value,iteratee(value),collection);});return accumulator;}/**\n         * The base implementation of `_.assign` without support for multiple sources\n         * or `customizer` functions.\n         *\n         * @private\n         * @param {Object} object The destination object.\n         * @param {Object} source The source object.\n         * @returns {Object} Returns `object`.\n         */function baseAssign(object,source){return object&&copyObject(source,keys(source),object);}/**\n         * The base implementation of `_.assignIn` without support for multiple sources\n         * or `customizer` functions.\n         *\n         * @private\n         * @param {Object} object The destination object.\n         * @param {Object} source The source object.\n         * @returns {Object} Returns `object`.\n         */function baseAssignIn(object,source){return object&&copyObject(source,keysIn(source),object);}/**\n         * The base implementation of `assignValue` and `assignMergeValue` without\n         * value checks.\n         *\n         * @private\n         * @param {Object} object The object to modify.\n         * @param {string} key The key of the property to assign.\n         * @param {*} value The value to assign.\n         */function baseAssignValue(object,key,value){if(key=='__proto__'&&defineProperty){defineProperty(object,key,{configurable:true,enumerable:true,value:value,writable:true});}else{object[key]=value;}}/**\n         * The base implementation of `_.at` without support for individual paths.\n         *\n         * @private\n         * @param {Object} object The object to iterate over.\n         * @param {string[]} paths The property paths to pick.\n         * @returns {Array} Returns the picked elements.\n         */function baseAt(object,paths){var index=-1,length=paths.length,result=Array(length),skip=object==null;while(++index<length){result[index]=skip?undefined:get(object,paths[index]);}return result;}/**\n         * The base implementation of `_.clamp` which doesn't coerce arguments.\n         *\n         * @private\n         * @param {number} number The number to clamp.\n         * @param {number} [lower] The lower bound.\n         * @param {number} upper The upper bound.\n         * @returns {number} Returns the clamped number.\n         */function baseClamp(number,lower,upper){if(number===number){if(upper!==undefined){number=number<=upper?number:upper;}if(lower!==undefined){number=number>=lower?number:lower;}}return number;}/**\n         * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n         * traversed objects.\n         *\n         * @private\n         * @param {*} value The value to clone.\n         * @param {boolean} bitmask The bitmask flags.\n         *  1 - Deep clone\n         *  2 - Flatten inherited properties\n         *  4 - Clone symbols\n         * @param {Function} [customizer] The function to customize cloning.\n         * @param {string} [key] The key of `value`.\n         * @param {Object} [object] The parent object of `value`.\n         * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n         * @returns {*} Returns the cloned value.\n         */function baseClone(value,bitmask,customizer,key,object,stack){var result,isDeep=bitmask&CLONE_DEEP_FLAG,isFlat=bitmask&CLONE_FLAT_FLAG,isFull=bitmask&CLONE_SYMBOLS_FLAG;if(customizer){result=object?customizer(value,key,object,stack):customizer(value);}if(result!==undefined){return result;}if(!isObject(value)){return value;}var isArr=isArray(value);if(isArr){result=initCloneArray(value);if(!isDeep){return copyArray(value,result);}}else{var tag=getTag(value),isFunc=tag==funcTag||tag==genTag;if(isBuffer(value)){return cloneBuffer(value,isDeep);}if(tag==objectTag||tag==argsTag||isFunc&&!object){result=isFlat||isFunc?{}:initCloneObject(value);if(!isDeep){return isFlat?copySymbolsIn(value,baseAssignIn(result,value)):copySymbols(value,baseAssign(result,value));}}else{if(!cloneableTags[tag]){return object?value:{};}result=initCloneByTag(value,tag,isDeep);}}// Check for circular references and return its corresponding clone.\nstack||(stack=new Stack());var stacked=stack.get(value);if(stacked){return stacked;}stack.set(value,result);if(isSet(value)){value.forEach(function(subValue){result.add(baseClone(subValue,bitmask,customizer,subValue,value,stack));});return result;}if(isMap(value)){value.forEach(function(subValue,key){result.set(key,baseClone(subValue,bitmask,customizer,key,value,stack));});return result;}var keysFunc=isFull?isFlat?getAllKeysIn:getAllKeys:isFlat?keysIn:keys;var props=isArr?undefined:keysFunc(value);arrayEach(props||value,function(subValue,key){if(props){key=subValue;subValue=value[key];}// Recursively populate clone (susceptible to call stack limits).\nassignValue(result,key,baseClone(subValue,bitmask,customizer,key,value,stack));});return result;}/**\n         * The base implementation of `_.conforms` which doesn't clone `source`.\n         *\n         * @private\n         * @param {Object} source The object of property predicates to conform to.\n         * @returns {Function} Returns the new spec function.\n         */function baseConforms(source){var props=keys(source);return function(object){return baseConformsTo(object,source,props);};}/**\n         * The base implementation of `_.conformsTo` which accepts `props` to check.\n         *\n         * @private\n         * @param {Object} object The object to inspect.\n         * @param {Object} source The object of property predicates to conform to.\n         * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n         */function baseConformsTo(object,source,props){var length=props.length;if(object==null){return!length;}object=Object(object);while(length--){var key=props[length],predicate=source[key],value=object[key];if(value===undefined&&!(key in object)||!predicate(value)){return false;}}return true;}/**\n         * The base implementation of `_.delay` and `_.defer` which accepts `args`\n         * to provide to `func`.\n         *\n         * @private\n         * @param {Function} func The function to delay.\n         * @param {number} wait The number of milliseconds to delay invocation.\n         * @param {Array} args The arguments to provide to `func`.\n         * @returns {number|Object} Returns the timer id or timeout object.\n         */function baseDelay(func,wait,args){if(typeof func!=='function'){throw new TypeError(FUNC_ERROR_TEXT);}return setTimeout(function(){func.apply(undefined,args);},wait);}/**\n         * The base implementation of methods like `_.difference` without support\n         * for excluding multiple arrays or iteratee shorthands.\n         *\n         * @private\n         * @param {Array} array The array to inspect.\n         * @param {Array} values The values to exclude.\n         * @param {Function} [iteratee] The iteratee invoked per element.\n         * @param {Function} [comparator] The comparator invoked per element.\n         * @returns {Array} Returns the new array of filtered values.\n         */function baseDifference(array,values,iteratee,comparator){var index=-1,includes=arrayIncludes,isCommon=true,length=array.length,result=[],valuesLength=values.length;if(!length){return result;}if(iteratee){values=arrayMap(values,baseUnary(iteratee));}if(comparator){includes=arrayIncludesWith;isCommon=false;}else if(values.length>=LARGE_ARRAY_SIZE){includes=cacheHas;isCommon=false;values=new SetCache(values);}outer:while(++index<length){var value=array[index],computed=iteratee==null?value:iteratee(value);value=comparator||value!==0?value:0;if(isCommon&&computed===computed){var valuesIndex=valuesLength;while(valuesIndex--){if(values[valuesIndex]===computed){continue outer;}}result.push(value);}else if(!includes(values,computed,comparator)){result.push(value);}}return result;}/**\n         * The base implementation of `_.forEach` without support for iteratee shorthands.\n         *\n         * @private\n         * @param {Array|Object} collection The collection to iterate over.\n         * @param {Function} iteratee The function invoked per iteration.\n         * @returns {Array|Object} Returns `collection`.\n         */var baseEach=createBaseEach(baseForOwn);/**\n         * The base implementation of `_.forEachRight` without support for iteratee shorthands.\n         *\n         * @private\n         * @param {Array|Object} collection The collection to iterate over.\n         * @param {Function} iteratee The function invoked per iteration.\n         * @returns {Array|Object} Returns `collection`.\n         */var baseEachRight=createBaseEach(baseForOwnRight,true);/**\n         * The base implementation of `_.every` without support for iteratee shorthands.\n         *\n         * @private\n         * @param {Array|Object} collection The collection to iterate over.\n         * @param {Function} predicate The function invoked per iteration.\n         * @returns {boolean} Returns `true` if all elements pass the predicate check,\n         *  else `false`\n         */function baseEvery(collection,predicate){var result=true;baseEach(collection,function(value,index,collection){result=!!predicate(value,index,collection);return result;});return result;}/**\n         * The base implementation of methods like `_.max` and `_.min` which accepts a\n         * `comparator` to determine the extremum value.\n         *\n         * @private\n         * @param {Array} array The array to iterate over.\n         * @param {Function} iteratee The iteratee invoked per iteration.\n         * @param {Function} comparator The comparator used to compare values.\n         * @returns {*} Returns the extremum value.\n         */function baseExtremum(array,iteratee,comparator){var index=-1,length=array.length;while(++index<length){var value=array[index],current=iteratee(value);if(current!=null&&(computed===undefined?current===current&&!isSymbol(current):comparator(current,computed))){var computed=current,result=value;}}return result;}/**\n         * The base implementation of `_.fill` without an iteratee call guard.\n         *\n         * @private\n         * @param {Array} array The array to fill.\n         * @param {*} value The value to fill `array` with.\n         * @param {number} [start=0] The start position.\n         * @param {number} [end=array.length] The end position.\n         * @returns {Array} Returns `array`.\n         */function baseFill(array,value,start,end){var length=array.length;start=toInteger(start);if(start<0){start=-start>length?0:length+start;}end=end===undefined||end>length?length:toInteger(end);if(end<0){end+=length;}end=start>end?0:toLength(end);while(start<end){array[start++]=value;}return array;}/**\n         * The base implementation of `_.filter` without support for iteratee shorthands.\n         *\n         * @private\n         * @param {Array|Object} collection The collection to iterate over.\n         * @param {Function} predicate The function invoked per iteration.\n         * @returns {Array} Returns the new filtered array.\n         */function baseFilter(collection,predicate){var result=[];baseEach(collection,function(value,index,collection){if(predicate(value,index,collection)){result.push(value);}});return result;}/**\n         * The base implementation of `_.flatten` with support for restricting flattening.\n         *\n         * @private\n         * @param {Array} array The array to flatten.\n         * @param {number} depth The maximum recursion depth.\n         * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n         * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n         * @param {Array} [result=[]] The initial result value.\n         * @returns {Array} Returns the new flattened array.\n         */function baseFlatten(array,depth,predicate,isStrict,result){var index=-1,length=array.length;predicate||(predicate=isFlattenable);result||(result=[]);while(++index<length){var value=array[index];if(depth>0&&predicate(value)){if(depth>1){// Recursively flatten arrays (susceptible to call stack limits).\nbaseFlatten(value,depth-1,predicate,isStrict,result);}else{arrayPush(result,value);}}else if(!isStrict){result[result.length]=value;}}return result;}/**\n         * The base implementation of `baseForOwn` which iterates over `object`\n         * properties returned by `keysFunc` and invokes `iteratee` for each property.\n         * Iteratee functions may exit iteration early by explicitly returning `false`.\n         *\n         * @private\n         * @param {Object} object The object to iterate over.\n         * @param {Function} iteratee The function invoked per iteration.\n         * @param {Function} keysFunc The function to get the keys of `object`.\n         * @returns {Object} Returns `object`.\n         */var baseFor=createBaseFor();/**\n         * This function is like `baseFor` except that it iterates over properties\n         * in the opposite order.\n         *\n         * @private\n         * @param {Object} object The object to iterate over.\n         * @param {Function} iteratee The function invoked per iteration.\n         * @param {Function} keysFunc The function to get the keys of `object`.\n         * @returns {Object} Returns `object`.\n         */var baseForRight=createBaseFor(true);/**\n         * The base implementation of `_.forOwn` without support for iteratee shorthands.\n         *\n         * @private\n         * @param {Object} object The object to iterate over.\n         * @param {Function} iteratee The function invoked per iteration.\n         * @returns {Object} Returns `object`.\n         */function baseForOwn(object,iteratee){return object&&baseFor(object,iteratee,keys);}/**\n         * The base implementation of `_.forOwnRight` without support for iteratee shorthands.\n         *\n         * @private\n         * @param {Object} object The object to iterate over.\n         * @param {Function} iteratee The function invoked per iteration.\n         * @returns {Object} Returns `object`.\n         */function baseForOwnRight(object,iteratee){return object&&baseForRight(object,iteratee,keys);}/**\n         * The base implementation of `_.functions` which creates an array of\n         * `object` function property names filtered from `props`.\n         *\n         * @private\n         * @param {Object} object The object to inspect.\n         * @param {Array} props The property names to filter.\n         * @returns {Array} Returns the function names.\n         */function baseFunctions(object,props){return arrayFilter(props,function(key){return isFunction(object[key]);});}/**\n         * The base implementation of `_.get` without support for default values.\n         *\n         * @private\n         * @param {Object} object The object to query.\n         * @param {Array|string} path The path of the property to get.\n         * @returns {*} Returns the resolved value.\n         */function baseGet(object,path){path=castPath(path,object);var index=0,length=path.length;while(object!=null&&index<length){object=object[toKey(path[index++])];}return index&&index==length?object:undefined;}/**\n         * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n         * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n         * symbols of `object`.\n         *\n         * @private\n         * @param {Object} object The object to query.\n         * @param {Function} keysFunc The function to get the keys of `object`.\n         * @param {Function} symbolsFunc The function to get the symbols of `object`.\n         * @returns {Array} Returns the array of property names and symbols.\n         */function baseGetAllKeys(object,keysFunc,symbolsFunc){var result=keysFunc(object);return isArray(object)?result:arrayPush(result,symbolsFunc(object));}/**\n         * The base implementation of `getTag` without fallbacks for buggy environments.\n         *\n         * @private\n         * @param {*} value The value to query.\n         * @returns {string} Returns the `toStringTag`.\n         */function baseGetTag(value){if(value==null){return value===undefined?undefinedTag:nullTag;}return symToStringTag&&symToStringTag in Object(value)?getRawTag(value):objectToString(value);}/**\n         * The base implementation of `_.gt` which doesn't coerce arguments.\n         *\n         * @private\n         * @param {*} value The value to compare.\n         * @param {*} other The other value to compare.\n         * @returns {boolean} Returns `true` if `value` is greater than `other`,\n         *  else `false`.\n         */function baseGt(value,other){return value>other;}/**\n         * The base implementation of `_.has` without support for deep paths.\n         *\n         * @private\n         * @param {Object} [object] The object to query.\n         * @param {Array|string} key The key to check.\n         * @returns {boolean} Returns `true` if `key` exists, else `false`.\n         */function baseHas(object,key){return object!=null&&hasOwnProperty.call(object,key);}/**\n         * The base implementation of `_.hasIn` without support for deep paths.\n         *\n         * @private\n         * @param {Object} [object] The object to query.\n         * @param {Array|string} key The key to check.\n         * @returns {boolean} Returns `true` if `key` exists, else `false`.\n         */function baseHasIn(object,key){return object!=null&&key in Object(object);}/**\n         * The base implementation of `_.inRange` which doesn't coerce arguments.\n         *\n         * @private\n         * @param {number} number The number to check.\n         * @param {number} start The start of the range.\n         * @param {number} end The end of the range.\n         * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n         */function baseInRange(number,start,end){return number>=nativeMin(start,end)&&number<nativeMax(start,end);}/**\n         * The base implementation of methods like `_.intersection`, without support\n         * for iteratee shorthands, that accepts an array of arrays to inspect.\n         *\n         * @private\n         * @param {Array} arrays The arrays to inspect.\n         * @param {Function} [iteratee] The iteratee invoked per element.\n         * @param {Function} [comparator] The comparator invoked per element.\n         * @returns {Array} Returns the new array of shared values.\n         */function baseIntersection(arrays,iteratee,comparator){var includes=comparator?arrayIncludesWith:arrayIncludes,length=arrays[0].length,othLength=arrays.length,othIndex=othLength,caches=Array(othLength),maxLength=Infinity,result=[];while(othIndex--){var array=arrays[othIndex];if(othIndex&&iteratee){array=arrayMap(array,baseUnary(iteratee));}maxLength=nativeMin(array.length,maxLength);caches[othIndex]=!comparator&&(iteratee||length>=120&&array.length>=120)?new SetCache(othIndex&&array):undefined;}array=arrays[0];var index=-1,seen=caches[0];outer:while(++index<length&&result.length<maxLength){var value=array[index],computed=iteratee?iteratee(value):value;value=comparator||value!==0?value:0;if(!(seen?cacheHas(seen,computed):includes(result,computed,comparator))){othIndex=othLength;while(--othIndex){var cache=caches[othIndex];if(!(cache?cacheHas(cache,computed):includes(arrays[othIndex],computed,comparator))){continue outer;}}if(seen){seen.push(computed);}result.push(value);}}return result;}/**\n         * The base implementation of `_.invert` and `_.invertBy` which inverts\n         * `object` with values transformed by `iteratee` and set by `setter`.\n         *\n         * @private\n         * @param {Object} object The object to iterate over.\n         * @param {Function} setter The function to set `accumulator` values.\n         * @param {Function} iteratee The iteratee to transform values.\n         * @param {Object} accumulator The initial inverted object.\n         * @returns {Function} Returns `accumulator`.\n         */function baseInverter(object,setter,iteratee,accumulator){baseForOwn(object,function(value,key,object){setter(accumulator,iteratee(value),key,object);});return accumulator;}/**\n         * The base implementation of `_.invoke` without support for individual\n         * method arguments.\n         *\n         * @private\n         * @param {Object} object The object to query.\n         * @param {Array|string} path The path of the method to invoke.\n         * @param {Array} args The arguments to invoke the method with.\n         * @returns {*} Returns the result of the invoked method.\n         */function baseInvoke(object,path,args){path=castPath(path,object);object=parent(object,path);var func=object==null?object:object[toKey(last(path))];return func==null?undefined:apply(func,object,args);}/**\n         * The base implementation of `_.isArguments`.\n         *\n         * @private\n         * @param {*} value The value to check.\n         * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n         */function baseIsArguments(value){return isObjectLike(value)&&baseGetTag(value)==argsTag;}/**\n         * The base implementation of `_.isArrayBuffer` without Node.js optimizations.\n         *\n         * @private\n         * @param {*} value The value to check.\n         * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n         */function baseIsArrayBuffer(value){return isObjectLike(value)&&baseGetTag(value)==arrayBufferTag;}/**\n         * The base implementation of `_.isDate` without Node.js optimizations.\n         *\n         * @private\n         * @param {*} value The value to check.\n         * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n         */function baseIsDate(value){return isObjectLike(value)&&baseGetTag(value)==dateTag;}/**\n         * The base implementation of `_.isEqual` which supports partial comparisons\n         * and tracks traversed objects.\n         *\n         * @private\n         * @param {*} value The value to compare.\n         * @param {*} other The other value to compare.\n         * @param {boolean} bitmask The bitmask flags.\n         *  1 - Unordered comparison\n         *  2 - Partial comparison\n         * @param {Function} [customizer] The function to customize comparisons.\n         * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n         * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n         */function baseIsEqual(value,other,bitmask,customizer,stack){if(value===other){return true;}if(value==null||other==null||!isObjectLike(value)&&!isObjectLike(other)){return value!==value&&other!==other;}return baseIsEqualDeep(value,other,bitmask,customizer,baseIsEqual,stack);}/**\n         * A specialized version of `baseIsEqual` for arrays and objects which performs\n         * deep comparisons and tracks traversed objects enabling objects with circular\n         * references to be compared.\n         *\n         * @private\n         * @param {Object} object The object to compare.\n         * @param {Object} other The other object to compare.\n         * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n         * @param {Function} customizer The function to customize comparisons.\n         * @param {Function} equalFunc The function to determine equivalents of values.\n         * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n         * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n         */function baseIsEqualDeep(object,other,bitmask,customizer,equalFunc,stack){var objIsArr=isArray(object),othIsArr=isArray(other),objTag=objIsArr?arrayTag:getTag(object),othTag=othIsArr?arrayTag:getTag(other);objTag=objTag==argsTag?objectTag:objTag;othTag=othTag==argsTag?objectTag:othTag;var objIsObj=objTag==objectTag,othIsObj=othTag==objectTag,isSameTag=objTag==othTag;if(isSameTag&&isBuffer(object)){if(!isBuffer(other)){return false;}objIsArr=true;objIsObj=false;}if(isSameTag&&!objIsObj){stack||(stack=new Stack());return objIsArr||isTypedArray(object)?equalArrays(object,other,bitmask,customizer,equalFunc,stack):equalByTag(object,other,objTag,bitmask,customizer,equalFunc,stack);}if(!(bitmask&COMPARE_PARTIAL_FLAG)){var objIsWrapped=objIsObj&&hasOwnProperty.call(object,'__wrapped__'),othIsWrapped=othIsObj&&hasOwnProperty.call(other,'__wrapped__');if(objIsWrapped||othIsWrapped){var objUnwrapped=objIsWrapped?object.value():object,othUnwrapped=othIsWrapped?other.value():other;stack||(stack=new Stack());return equalFunc(objUnwrapped,othUnwrapped,bitmask,customizer,stack);}}if(!isSameTag){return false;}stack||(stack=new Stack());return equalObjects(object,other,bitmask,customizer,equalFunc,stack);}/**\n         * The base implementation of `_.isMap` without Node.js optimizations.\n         *\n         * @private\n         * @param {*} value The value to check.\n         * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n         */function baseIsMap(value){return isObjectLike(value)&&getTag(value)==mapTag;}/**\n         * The base implementation of `_.isMatch` without support for iteratee shorthands.\n         *\n         * @private\n         * @param {Object} object The object to inspect.\n         * @param {Object} source The object of property values to match.\n         * @param {Array} matchData The property names, values, and compare flags to match.\n         * @param {Function} [customizer] The function to customize comparisons.\n         * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n         */function baseIsMatch(object,source,matchData,customizer){var index=matchData.length,length=index,noCustomizer=!customizer;if(object==null){return!length;}object=Object(object);while(index--){var data=matchData[index];if(noCustomizer&&data[2]?data[1]!==object[data[0]]:!(data[0]in object)){return false;}}while(++index<length){data=matchData[index];var key=data[0],objValue=object[key],srcValue=data[1];if(noCustomizer&&data[2]){if(objValue===undefined&&!(key in object)){return false;}}else{var stack=new Stack();if(customizer){var result=customizer(objValue,srcValue,key,object,source,stack);}if(!(result===undefined?baseIsEqual(srcValue,objValue,COMPARE_PARTIAL_FLAG|COMPARE_UNORDERED_FLAG,customizer,stack):result)){return false;}}}return true;}/**\n         * The base implementation of `_.isNative` without bad shim checks.\n         *\n         * @private\n         * @param {*} value The value to check.\n         * @returns {boolean} Returns `true` if `value` is a native function,\n         *  else `false`.\n         */function baseIsNative(value){if(!isObject(value)||isMasked(value)){return false;}var pattern=isFunction(value)?reIsNative:reIsHostCtor;return pattern.test(toSource(value));}/**\n         * The base implementation of `_.isRegExp` without Node.js optimizations.\n         *\n         * @private\n         * @param {*} value The value to check.\n         * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n         */function baseIsRegExp(value){return isObjectLike(value)&&baseGetTag(value)==regexpTag;}/**\n         * The base implementation of `_.isSet` without Node.js optimizations.\n         *\n         * @private\n         * @param {*} value The value to check.\n         * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n         */function baseIsSet(value){return isObjectLike(value)&&getTag(value)==setTag;}/**\n         * The base implementation of `_.isTypedArray` without Node.js optimizations.\n         *\n         * @private\n         * @param {*} value The value to check.\n         * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n         */function baseIsTypedArray(value){return isObjectLike(value)&&isLength(value.length)&&!!typedArrayTags[baseGetTag(value)];}/**\n         * The base implementation of `_.iteratee`.\n         *\n         * @private\n         * @param {*} [value=_.identity] The value to convert to an iteratee.\n         * @returns {Function} Returns the iteratee.\n         */function baseIteratee(value){// Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n// See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\nif(typeof value==='function'){return value;}if(value==null){return identity;}if((typeof value==='undefined'?'undefined':_typeof(value))==='object'){return isArray(value)?baseMatchesProperty(value[0],value[1]):baseMatches(value);}return property(value);}/**\n         * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n         *\n         * @private\n         * @param {Object} object The object to query.\n         * @returns {Array} Returns the array of property names.\n         */function baseKeys(object){if(!isPrototype(object)){return nativeKeys(object);}var result=[];for(var key in Object(object)){if(hasOwnProperty.call(object,key)&&key!='constructor'){result.push(key);}}return result;}/**\n         * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n         *\n         * @private\n         * @param {Object} object The object to query.\n         * @returns {Array} Returns the array of property names.\n         */function baseKeysIn(object){if(!isObject(object)){return nativeKeysIn(object);}var isProto=isPrototype(object),result=[];for(var key in object){if(!(key=='constructor'&&(isProto||!hasOwnProperty.call(object,key)))){result.push(key);}}return result;}/**\n         * The base implementation of `_.lt` which doesn't coerce arguments.\n         *\n         * @private\n         * @param {*} value The value to compare.\n         * @param {*} other The other value to compare.\n         * @returns {boolean} Returns `true` if `value` is less than `other`,\n         *  else `false`.\n         */function baseLt(value,other){return value<other;}/**\n         * The base implementation of `_.map` without support for iteratee shorthands.\n         *\n         * @private\n         * @param {Array|Object} collection The collection to iterate over.\n         * @param {Function} iteratee The function invoked per iteration.\n         * @returns {Array} Returns the new mapped array.\n         */function baseMap(collection,iteratee){var index=-1,result=isArrayLike(collection)?Array(collection.length):[];baseEach(collection,function(value,key,collection){result[++index]=iteratee(value,key,collection);});return result;}/**\n         * The base implementation of `_.matches` which doesn't clone `source`.\n         *\n         * @private\n         * @param {Object} source The object of property values to match.\n         * @returns {Function} Returns the new spec function.\n         */function baseMatches(source){var matchData=getMatchData(source);if(matchData.length==1&&matchData[0][2]){return matchesStrictComparable(matchData[0][0],matchData[0][1]);}return function(object){return object===source||baseIsMatch(object,source,matchData);};}/**\n         * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n         *\n         * @private\n         * @param {string} path The path of the property to get.\n         * @param {*} srcValue The value to match.\n         * @returns {Function} Returns the new spec function.\n         */function baseMatchesProperty(path,srcValue){if(isKey(path)&&isStrictComparable(srcValue)){return matchesStrictComparable(toKey(path),srcValue);}return function(object){var objValue=get(object,path);return objValue===undefined&&objValue===srcValue?hasIn(object,path):baseIsEqual(srcValue,objValue,COMPARE_PARTIAL_FLAG|COMPARE_UNORDERED_FLAG);};}/**\n         * The base implementation of `_.merge` without support for multiple sources.\n         *\n         * @private\n         * @param {Object} object The destination object.\n         * @param {Object} source The source object.\n         * @param {number} srcIndex The index of `source`.\n         * @param {Function} [customizer] The function to customize merged values.\n         * @param {Object} [stack] Tracks traversed source values and their merged\n         *  counterparts.\n         */function baseMerge(object,source,srcIndex,customizer,stack){if(object===source){return;}baseFor(source,function(srcValue,key){if(isObject(srcValue)){stack||(stack=new Stack());baseMergeDeep(object,source,key,srcIndex,baseMerge,customizer,stack);}else{var newValue=customizer?customizer(safeGet(object,key),srcValue,key+'',object,source,stack):undefined;if(newValue===undefined){newValue=srcValue;}assignMergeValue(object,key,newValue);}},keysIn);}/**\n         * A specialized version of `baseMerge` for arrays and objects which performs\n         * deep merges and tracks traversed objects enabling objects with circular\n         * references to be merged.\n         *\n         * @private\n         * @param {Object} object The destination object.\n         * @param {Object} source The source object.\n         * @param {string} key The key of the value to merge.\n         * @param {number} srcIndex The index of `source`.\n         * @param {Function} mergeFunc The function to merge values.\n         * @param {Function} [customizer] The function to customize assigned values.\n         * @param {Object} [stack] Tracks traversed source values and their merged\n         *  counterparts.\n         */function baseMergeDeep(object,source,key,srcIndex,mergeFunc,customizer,stack){var objValue=safeGet(object,key),srcValue=safeGet(source,key),stacked=stack.get(srcValue);if(stacked){assignMergeValue(object,key,stacked);return;}var newValue=customizer?customizer(objValue,srcValue,key+'',object,source,stack):undefined;var isCommon=newValue===undefined;if(isCommon){var isArr=isArray(srcValue),isBuff=!isArr&&isBuffer(srcValue),isTyped=!isArr&&!isBuff&&isTypedArray(srcValue);newValue=srcValue;if(isArr||isBuff||isTyped){if(isArray(objValue)){newValue=objValue;}else if(isArrayLikeObject(objValue)){newValue=copyArray(objValue);}else if(isBuff){isCommon=false;newValue=cloneBuffer(srcValue,true);}else if(isTyped){isCommon=false;newValue=cloneTypedArray(srcValue,true);}else{newValue=[];}}else if(isPlainObject(srcValue)||isArguments(srcValue)){newValue=objValue;if(isArguments(objValue)){newValue=toPlainObject(objValue);}else if(!isObject(objValue)||srcIndex&&isFunction(objValue)){newValue=initCloneObject(srcValue);}}else{isCommon=false;}}if(isCommon){// Recursively merge objects and arrays (susceptible to call stack limits).\nstack.set(srcValue,newValue);mergeFunc(newValue,srcValue,srcIndex,customizer,stack);stack['delete'](srcValue);}assignMergeValue(object,key,newValue);}/**\n         * The base implementation of `_.nth` which doesn't coerce arguments.\n         *\n         * @private\n         * @param {Array} array The array to query.\n         * @param {number} n The index of the element to return.\n         * @returns {*} Returns the nth element of `array`.\n         */function baseNth(array,n){var length=array.length;if(!length){return;}n+=n<0?length:0;return isIndex(n,length)?array[n]:undefined;}/**\n         * The base implementation of `_.orderBy` without param guards.\n         *\n         * @private\n         * @param {Array|Object} collection The collection to iterate over.\n         * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n         * @param {string[]} orders The sort orders of `iteratees`.\n         * @returns {Array} Returns the new sorted array.\n         */function baseOrderBy(collection,iteratees,orders){var index=-1;iteratees=arrayMap(iteratees.length?iteratees:[identity],baseUnary(getIteratee()));var result=baseMap(collection,function(value,key,collection){var criteria=arrayMap(iteratees,function(iteratee){return iteratee(value);});return{criteria:criteria,index:++index,value:value};});return baseSortBy(result,function(object,other){return compareMultiple(object,other,orders);});}/**\n         * The base implementation of `_.pick` without support for individual\n         * property identifiers.\n         *\n         * @private\n         * @param {Object} object The source object.\n         * @param {string[]} paths The property paths to pick.\n         * @returns {Object} Returns the new object.\n         */function basePick(object,paths){return basePickBy(object,paths,function(value,path){return hasIn(object,path);});}/**\n         * The base implementation of  `_.pickBy` without support for iteratee shorthands.\n         *\n         * @private\n         * @param {Object} object The source object.\n         * @param {string[]} paths The property paths to pick.\n         * @param {Function} predicate The function invoked per property.\n         * @returns {Object} Returns the new object.\n         */function basePickBy(object,paths,predicate){var index=-1,length=paths.length,result={};while(++index<length){var path=paths[index],value=baseGet(object,path);if(predicate(value,path)){baseSet(result,castPath(path,object),value);}}return result;}/**\n         * A specialized version of `baseProperty` which supports deep paths.\n         *\n         * @private\n         * @param {Array|string} path The path of the property to get.\n         * @returns {Function} Returns the new accessor function.\n         */function basePropertyDeep(path){return function(object){return baseGet(object,path);};}/**\n         * The base implementation of `_.pullAllBy` without support for iteratee\n         * shorthands.\n         *\n         * @private\n         * @param {Array} array The array to modify.\n         * @param {Array} values The values to remove.\n         * @param {Function} [iteratee] The iteratee invoked per element.\n         * @param {Function} [comparator] The comparator invoked per element.\n         * @returns {Array} Returns `array`.\n         */function basePullAll(array,values,iteratee,comparator){var indexOf=comparator?baseIndexOfWith:baseIndexOf,index=-1,length=values.length,seen=array;if(array===values){values=copyArray(values);}if(iteratee){seen=arrayMap(array,baseUnary(iteratee));}while(++index<length){var fromIndex=0,value=values[index],computed=iteratee?iteratee(value):value;while((fromIndex=indexOf(seen,computed,fromIndex,comparator))>-1){if(seen!==array){splice.call(seen,fromIndex,1);}splice.call(array,fromIndex,1);}}return array;}/**\n         * The base implementation of `_.pullAt` without support for individual\n         * indexes or capturing the removed elements.\n         *\n         * @private\n         * @param {Array} array The array to modify.\n         * @param {number[]} indexes The indexes of elements to remove.\n         * @returns {Array} Returns `array`.\n         */function basePullAt(array,indexes){var length=array?indexes.length:0,lastIndex=length-1;while(length--){var index=indexes[length];if(length==lastIndex||index!==previous){var previous=index;if(isIndex(index)){splice.call(array,index,1);}else{baseUnset(array,index);}}}return array;}/**\n         * The base implementation of `_.random` without support for returning\n         * floating-point numbers.\n         *\n         * @private\n         * @param {number} lower The lower bound.\n         * @param {number} upper The upper bound.\n         * @returns {number} Returns the random number.\n         */function baseRandom(lower,upper){return lower+nativeFloor(nativeRandom()*(upper-lower+1));}/**\n         * The base implementation of `_.range` and `_.rangeRight` which doesn't\n         * coerce arguments.\n         *\n         * @private\n         * @param {number} start The start of the range.\n         * @param {number} end The end of the range.\n         * @param {number} step The value to increment or decrement by.\n         * @param {boolean} [fromRight] Specify iterating from right to left.\n         * @returns {Array} Returns the range of numbers.\n         */function baseRange(start,end,step,fromRight){var index=-1,length=nativeMax(nativeCeil((end-start)/(step||1)),0),result=Array(length);while(length--){result[fromRight?length:++index]=start;start+=step;}return result;}/**\n         * The base implementation of `_.repeat` which doesn't coerce arguments.\n         *\n         * @private\n         * @param {string} string The string to repeat.\n         * @param {number} n The number of times to repeat the string.\n         * @returns {string} Returns the repeated string.\n         */function baseRepeat(string,n){var result='';if(!string||n<1||n>MAX_SAFE_INTEGER){return result;}// Leverage the exponentiation by squaring algorithm for a faster repeat.\n// See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.\ndo{if(n%2){result+=string;}n=nativeFloor(n/2);if(n){string+=string;}}while(n);return result;}/**\n         * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n         *\n         * @private\n         * @param {Function} func The function to apply a rest parameter to.\n         * @param {number} [start=func.length-1] The start position of the rest parameter.\n         * @returns {Function} Returns the new function.\n         */function baseRest(func,start){return setToString(overRest(func,start,identity),func+'');}/**\n         * The base implementation of `_.sample`.\n         *\n         * @private\n         * @param {Array|Object} collection The collection to sample.\n         * @returns {*} Returns the random element.\n         */function baseSample(collection){return arraySample(values(collection));}/**\n         * The base implementation of `_.sampleSize` without param guards.\n         *\n         * @private\n         * @param {Array|Object} collection The collection to sample.\n         * @param {number} n The number of elements to sample.\n         * @returns {Array} Returns the random elements.\n         */function baseSampleSize(collection,n){var array=values(collection);return shuffleSelf(array,baseClamp(n,0,array.length));}/**\n         * The base implementation of `_.set`.\n         *\n         * @private\n         * @param {Object} object The object to modify.\n         * @param {Array|string} path The path of the property to set.\n         * @param {*} value The value to set.\n         * @param {Function} [customizer] The function to customize path creation.\n         * @returns {Object} Returns `object`.\n         */function baseSet(object,path,value,customizer){if(!isObject(object)){return object;}path=castPath(path,object);var index=-1,length=path.length,lastIndex=length-1,nested=object;while(nested!=null&&++index<length){var key=toKey(path[index]),newValue=value;if(index!=lastIndex){var objValue=nested[key];newValue=customizer?customizer(objValue,key,nested):undefined;if(newValue===undefined){newValue=isObject(objValue)?objValue:isIndex(path[index+1])?[]:{};}}assignValue(nested,key,newValue);nested=nested[key];}return object;}/**\n         * The base implementation of `setData` without support for hot loop shorting.\n         *\n         * @private\n         * @param {Function} func The function to associate metadata with.\n         * @param {*} data The metadata.\n         * @returns {Function} Returns `func`.\n         */var baseSetData=!metaMap?identity:function(func,data){metaMap.set(func,data);return func;};/**\n       * The base implementation of `setToString` without support for hot loop shorting.\n       *\n       * @private\n       * @param {Function} func The function to modify.\n       * @param {Function} string The `toString` result.\n       * @returns {Function} Returns `func`.\n       */var baseSetToString=!defineProperty?identity:function(func,string){return defineProperty(func,'toString',{configurable:true,enumerable:false,value:constant(string),writable:true});};/**\n       * The base implementation of `_.shuffle`.\n       *\n       * @private\n       * @param {Array|Object} collection The collection to shuffle.\n       * @returns {Array} Returns the new shuffled array.\n       */function baseShuffle(collection){return shuffleSelf(values(collection));}/**\n         * The base implementation of `_.slice` without an iteratee call guard.\n         *\n         * @private\n         * @param {Array} array The array to slice.\n         * @param {number} [start=0] The start position.\n         * @param {number} [end=array.length] The end position.\n         * @returns {Array} Returns the slice of `array`.\n         */function baseSlice(array,start,end){var index=-1,length=array.length;if(start<0){start=-start>length?0:length+start;}end=end>length?length:end;if(end<0){end+=length;}length=start>end?0:end-start>>>0;start>>>=0;var result=Array(length);while(++index<length){result[index]=array[index+start];}return result;}/**\n         * The base implementation of `_.some` without support for iteratee shorthands.\n         *\n         * @private\n         * @param {Array|Object} collection The collection to iterate over.\n         * @param {Function} predicate The function invoked per iteration.\n         * @returns {boolean} Returns `true` if any element passes the predicate check,\n         *  else `false`.\n         */function baseSome(collection,predicate){var result;baseEach(collection,function(value,index,collection){result=predicate(value,index,collection);return!result;});return!!result;}/**\n         * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which\n         * performs a binary search of `array` to determine the index at which `value`\n         * should be inserted into `array` in order to maintain its sort order.\n         *\n         * @private\n         * @param {Array} array The sorted array to inspect.\n         * @param {*} value The value to evaluate.\n         * @param {boolean} [retHighest] Specify returning the highest qualified index.\n         * @returns {number} Returns the index at which `value` should be inserted\n         *  into `array`.\n         */function baseSortedIndex(array,value,retHighest){var low=0,high=array==null?low:array.length;if(typeof value==='number'&&value===value&&high<=HALF_MAX_ARRAY_LENGTH){while(low<high){var mid=low+high>>>1,computed=array[mid];if(computed!==null&&!isSymbol(computed)&&(retHighest?computed<=value:computed<value)){low=mid+1;}else{high=mid;}}return high;}return baseSortedIndexBy(array,value,identity,retHighest);}/**\n         * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`\n         * which invokes `iteratee` for `value` and each element of `array` to compute\n         * their sort ranking. The iteratee is invoked with one argument; (value).\n         *\n         * @private\n         * @param {Array} array The sorted array to inspect.\n         * @param {*} value The value to evaluate.\n         * @param {Function} iteratee The iteratee invoked per element.\n         * @param {boolean} [retHighest] Specify returning the highest qualified index.\n         * @returns {number} Returns the index at which `value` should be inserted\n         *  into `array`.\n         */function baseSortedIndexBy(array,value,iteratee,retHighest){value=iteratee(value);var low=0,high=array==null?0:array.length,valIsNaN=value!==value,valIsNull=value===null,valIsSymbol=isSymbol(value),valIsUndefined=value===undefined;while(low<high){var mid=nativeFloor((low+high)/2),computed=iteratee(array[mid]),othIsDefined=computed!==undefined,othIsNull=computed===null,othIsReflexive=computed===computed,othIsSymbol=isSymbol(computed);if(valIsNaN){var setLow=retHighest||othIsReflexive;}else if(valIsUndefined){setLow=othIsReflexive&&(retHighest||othIsDefined);}else if(valIsNull){setLow=othIsReflexive&&othIsDefined&&(retHighest||!othIsNull);}else if(valIsSymbol){setLow=othIsReflexive&&othIsDefined&&!othIsNull&&(retHighest||!othIsSymbol);}else if(othIsNull||othIsSymbol){setLow=false;}else{setLow=retHighest?computed<=value:computed<value;}if(setLow){low=mid+1;}else{high=mid;}}return nativeMin(high,MAX_ARRAY_INDEX);}/**\n         * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without\n         * support for iteratee shorthands.\n         *\n         * @private\n         * @param {Array} array The array to inspect.\n         * @param {Function} [iteratee] The iteratee invoked per element.\n         * @returns {Array} Returns the new duplicate free array.\n         */function baseSortedUniq(array,iteratee){var index=-1,length=array.length,resIndex=0,result=[];while(++index<length){var value=array[index],computed=iteratee?iteratee(value):value;if(!index||!eq(computed,seen)){var seen=computed;result[resIndex++]=value===0?0:value;}}return result;}/**\n         * The base implementation of `_.toNumber` which doesn't ensure correct\n         * conversions of binary, hexadecimal, or octal string values.\n         *\n         * @private\n         * @param {*} value The value to process.\n         * @returns {number} Returns the number.\n         */function baseToNumber(value){if(typeof value==='number'){return value;}if(isSymbol(value)){return NAN;}return+value;}/**\n         * The base implementation of `_.toString` which doesn't convert nullish\n         * values to empty strings.\n         *\n         * @private\n         * @param {*} value The value to process.\n         * @returns {string} Returns the string.\n         */function baseToString(value){// Exit early for strings to avoid a performance hit in some environments.\nif(typeof value==='string'){return value;}if(isArray(value)){// Recursively convert values (susceptible to call stack limits).\nreturn arrayMap(value,baseToString)+'';}if(isSymbol(value)){return symbolToString?symbolToString.call(value):'';}var result=value+'';return result=='0'&&1/value==-INFINITY?'-0':result;}/**\n         * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n         *\n         * @private\n         * @param {Array} array The array to inspect.\n         * @param {Function} [iteratee] The iteratee invoked per element.\n         * @param {Function} [comparator] The comparator invoked per element.\n         * @returns {Array} Returns the new duplicate free array.\n         */function baseUniq(array,iteratee,comparator){var index=-1,includes=arrayIncludes,length=array.length,isCommon=true,result=[],seen=result;if(comparator){isCommon=false;includes=arrayIncludesWith;}else if(length>=LARGE_ARRAY_SIZE){var set=iteratee?null:createSet(array);if(set){return setToArray(set);}isCommon=false;includes=cacheHas;seen=new SetCache();}else{seen=iteratee?[]:result;}outer:while(++index<length){var value=array[index],computed=iteratee?iteratee(value):value;value=comparator||value!==0?value:0;if(isCommon&&computed===computed){var seenIndex=seen.length;while(seenIndex--){if(seen[seenIndex]===computed){continue outer;}}if(iteratee){seen.push(computed);}result.push(value);}else if(!includes(seen,computed,comparator)){if(seen!==result){seen.push(computed);}result.push(value);}}return result;}/**\n         * The base implementation of `_.unset`.\n         *\n         * @private\n         * @param {Object} object The object to modify.\n         * @param {Array|string} path The property path to unset.\n         * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n         */function baseUnset(object,path){path=castPath(path,object);object=parent(object,path);return object==null||delete object[toKey(last(path))];}/**\n         * The base implementation of `_.update`.\n         *\n         * @private\n         * @param {Object} object The object to modify.\n         * @param {Array|string} path The path of the property to update.\n         * @param {Function} updater The function to produce the updated value.\n         * @param {Function} [customizer] The function to customize path creation.\n         * @returns {Object} Returns `object`.\n         */function baseUpdate(object,path,updater,customizer){return baseSet(object,path,updater(baseGet(object,path)),customizer);}/**\n         * The base implementation of methods like `_.dropWhile` and `_.takeWhile`\n         * without support for iteratee shorthands.\n         *\n         * @private\n         * @param {Array} array The array to query.\n         * @param {Function} predicate The function invoked per iteration.\n         * @param {boolean} [isDrop] Specify dropping elements instead of taking them.\n         * @param {boolean} [fromRight] Specify iterating from right to left.\n         * @returns {Array} Returns the slice of `array`.\n         */function baseWhile(array,predicate,isDrop,fromRight){var length=array.length,index=fromRight?length:-1;while((fromRight?index--:++index<length)&&predicate(array[index],index,array)){}return isDrop?baseSlice(array,fromRight?0:index,fromRight?index+1:length):baseSlice(array,fromRight?index+1:0,fromRight?length:index);}/**\n         * The base implementation of `wrapperValue` which returns the result of\n         * performing a sequence of actions on the unwrapped `value`, where each\n         * successive action is supplied the return value of the previous.\n         *\n         * @private\n         * @param {*} value The unwrapped value.\n         * @param {Array} actions Actions to perform to resolve the unwrapped value.\n         * @returns {*} Returns the resolved value.\n         */function baseWrapperValue(value,actions){var result=value;if(result instanceof LazyWrapper){result=result.value();}return arrayReduce(actions,function(result,action){return action.func.apply(action.thisArg,arrayPush([result],action.args));},result);}/**\n         * The base implementation of methods like `_.xor`, without support for\n         * iteratee shorthands, that accepts an array of arrays to inspect.\n         *\n         * @private\n         * @param {Array} arrays The arrays to inspect.\n         * @param {Function} [iteratee] The iteratee invoked per element.\n         * @param {Function} [comparator] The comparator invoked per element.\n         * @returns {Array} Returns the new array of values.\n         */function baseXor(arrays,iteratee,comparator){var length=arrays.length;if(length<2){return length?baseUniq(arrays[0]):[];}var index=-1,result=Array(length);while(++index<length){var array=arrays[index],othIndex=-1;while(++othIndex<length){if(othIndex!=index){result[index]=baseDifference(result[index]||array,arrays[othIndex],iteratee,comparator);}}}return baseUniq(baseFlatten(result,1),iteratee,comparator);}/**\n         * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\n         *\n         * @private\n         * @param {Array} props The property identifiers.\n         * @param {Array} values The property values.\n         * @param {Function} assignFunc The function to assign values.\n         * @returns {Object} Returns the new object.\n         */function baseZipObject(props,values,assignFunc){var index=-1,length=props.length,valsLength=values.length,result={};while(++index<length){var value=index<valsLength?values[index]:undefined;assignFunc(result,props[index],value);}return result;}/**\n         * Casts `value` to an empty array if it's not an array like object.\n         *\n         * @private\n         * @param {*} value The value to inspect.\n         * @returns {Array|Object} Returns the cast array-like object.\n         */function castArrayLikeObject(value){return isArrayLikeObject(value)?value:[];}/**\n         * Casts `value` to `identity` if it's not a function.\n         *\n         * @private\n         * @param {*} value The value to inspect.\n         * @returns {Function} Returns cast function.\n         */function castFunction(value){return typeof value==='function'?value:identity;}/**\n         * Casts `value` to a path array if it's not one.\n         *\n         * @private\n         * @param {*} value The value to inspect.\n         * @param {Object} [object] The object to query keys on.\n         * @returns {Array} Returns the cast property path array.\n         */function castPath(value,object){if(isArray(value)){return value;}return isKey(value,object)?[value]:stringToPath(toString(value));}/**\n         * A `baseRest` alias which can be replaced with `identity` by module\n         * replacement plugins.\n         *\n         * @private\n         * @type {Function}\n         * @param {Function} func The function to apply a rest parameter to.\n         * @returns {Function} Returns the new function.\n         */var castRest=baseRest;/**\n         * Casts `array` to a slice if it's needed.\n         *\n         * @private\n         * @param {Array} array The array to inspect.\n         * @param {number} start The start position.\n         * @param {number} [end=array.length] The end position.\n         * @returns {Array} Returns the cast slice.\n         */function castSlice(array,start,end){var length=array.length;end=end===undefined?length:end;return!start&&end>=length?array:baseSlice(array,start,end);}/**\n         * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).\n         *\n         * @private\n         * @param {number|Object} id The timer id or timeout object of the timer to clear.\n         */var clearTimeout=ctxClearTimeout||function(id){return root.clearTimeout(id);};/**\n       * Creates a clone of  `buffer`.\n       *\n       * @private\n       * @param {Buffer} buffer The buffer to clone.\n       * @param {boolean} [isDeep] Specify a deep clone.\n       * @returns {Buffer} Returns the cloned buffer.\n       */function cloneBuffer(buffer,isDeep){if(isDeep){return buffer.slice();}var length=buffer.length,result=allocUnsafe?allocUnsafe(length):new buffer.constructor(length);buffer.copy(result);return result;}/**\n         * Creates a clone of `arrayBuffer`.\n         *\n         * @private\n         * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n         * @returns {ArrayBuffer} Returns the cloned array buffer.\n         */function cloneArrayBuffer(arrayBuffer){var result=new arrayBuffer.constructor(arrayBuffer.byteLength);new Uint8Array(result).set(new Uint8Array(arrayBuffer));return result;}/**\n         * Creates a clone of `dataView`.\n         *\n         * @private\n         * @param {Object} dataView The data view to clone.\n         * @param {boolean} [isDeep] Specify a deep clone.\n         * @returns {Object} Returns the cloned data view.\n         */function cloneDataView(dataView,isDeep){var buffer=isDeep?cloneArrayBuffer(dataView.buffer):dataView.buffer;return new dataView.constructor(buffer,dataView.byteOffset,dataView.byteLength);}/**\n         * Creates a clone of `regexp`.\n         *\n         * @private\n         * @param {Object} regexp The regexp to clone.\n         * @returns {Object} Returns the cloned regexp.\n         */function cloneRegExp(regexp){var result=new regexp.constructor(regexp.source,reFlags.exec(regexp));result.lastIndex=regexp.lastIndex;return result;}/**\n         * Creates a clone of the `symbol` object.\n         *\n         * @private\n         * @param {Object} symbol The symbol object to clone.\n         * @returns {Object} Returns the cloned symbol object.\n         */function cloneSymbol(symbol){return symbolValueOf?Object(symbolValueOf.call(symbol)):{};}/**\n         * Creates a clone of `typedArray`.\n         *\n         * @private\n         * @param {Object} typedArray The typed array to clone.\n         * @param {boolean} [isDeep] Specify a deep clone.\n         * @returns {Object} Returns the cloned typed array.\n         */function cloneTypedArray(typedArray,isDeep){var buffer=isDeep?cloneArrayBuffer(typedArray.buffer):typedArray.buffer;return new typedArray.constructor(buffer,typedArray.byteOffset,typedArray.length);}/**\n         * Compares values to sort them in ascending order.\n         *\n         * @private\n         * @param {*} value The value to compare.\n         * @param {*} other The other value to compare.\n         * @returns {number} Returns the sort order indicator for `value`.\n         */function compareAscending(value,other){if(value!==other){var valIsDefined=value!==undefined,valIsNull=value===null,valIsReflexive=value===value,valIsSymbol=isSymbol(value);var othIsDefined=other!==undefined,othIsNull=other===null,othIsReflexive=other===other,othIsSymbol=isSymbol(other);if(!othIsNull&&!othIsSymbol&&!valIsSymbol&&value>other||valIsSymbol&&othIsDefined&&othIsReflexive&&!othIsNull&&!othIsSymbol||valIsNull&&othIsDefined&&othIsReflexive||!valIsDefined&&othIsReflexive||!valIsReflexive){return 1;}if(!valIsNull&&!valIsSymbol&&!othIsSymbol&&value<other||othIsSymbol&&valIsDefined&&valIsReflexive&&!valIsNull&&!valIsSymbol||othIsNull&&valIsDefined&&valIsReflexive||!othIsDefined&&valIsReflexive||!othIsReflexive){return-1;}}return 0;}/**\n         * Used by `_.orderBy` to compare multiple properties of a value to another\n         * and stable sort them.\n         *\n         * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n         * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n         * of corresponding values.\n         *\n         * @private\n         * @param {Object} object The object to compare.\n         * @param {Object} other The other object to compare.\n         * @param {boolean[]|string[]} orders The order to sort by for each property.\n         * @returns {number} Returns the sort order indicator for `object`.\n         */function compareMultiple(object,other,orders){var index=-1,objCriteria=object.criteria,othCriteria=other.criteria,length=objCriteria.length,ordersLength=orders.length;while(++index<length){var result=compareAscending(objCriteria[index],othCriteria[index]);if(result){if(index>=ordersLength){return result;}var order=orders[index];return result*(order=='desc'?-1:1);}}// Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n// that causes it, under certain circumstances, to provide the same value for\n// `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n// for more details.\n//\n// This also ensures a stable sort in V8 and other engines.\n// See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\nreturn object.index-other.index;}/**\n         * Creates an array that is the composition of partially applied arguments,\n         * placeholders, and provided arguments into a single array of arguments.\n         *\n         * @private\n         * @param {Array} args The provided arguments.\n         * @param {Array} partials The arguments to prepend to those provided.\n         * @param {Array} holders The `partials` placeholder indexes.\n         * @params {boolean} [isCurried] Specify composing for a curried function.\n         * @returns {Array} Returns the new array of composed arguments.\n         */function composeArgs(args,partials,holders,isCurried){var argsIndex=-1,argsLength=args.length,holdersLength=holders.length,leftIndex=-1,leftLength=partials.length,rangeLength=nativeMax(argsLength-holdersLength,0),result=Array(leftLength+rangeLength),isUncurried=!isCurried;while(++leftIndex<leftLength){result[leftIndex]=partials[leftIndex];}while(++argsIndex<holdersLength){if(isUncurried||argsIndex<argsLength){result[holders[argsIndex]]=args[argsIndex];}}while(rangeLength--){result[leftIndex++]=args[argsIndex++];}return result;}/**\n         * This function is like `composeArgs` except that the arguments composition\n         * is tailored for `_.partialRight`.\n         *\n         * @private\n         * @param {Array} args The provided arguments.\n         * @param {Array} partials The arguments to append to those provided.\n         * @param {Array} holders The `partials` placeholder indexes.\n         * @params {boolean} [isCurried] Specify composing for a curried function.\n         * @returns {Array} Returns the new array of composed arguments.\n         */function composeArgsRight(args,partials,holders,isCurried){var argsIndex=-1,argsLength=args.length,holdersIndex=-1,holdersLength=holders.length,rightIndex=-1,rightLength=partials.length,rangeLength=nativeMax(argsLength-holdersLength,0),result=Array(rangeLength+rightLength),isUncurried=!isCurried;while(++argsIndex<rangeLength){result[argsIndex]=args[argsIndex];}var offset=argsIndex;while(++rightIndex<rightLength){result[offset+rightIndex]=partials[rightIndex];}while(++holdersIndex<holdersLength){if(isUncurried||argsIndex<argsLength){result[offset+holders[holdersIndex]]=args[argsIndex++];}}return result;}/**\n         * Copies the values of `source` to `array`.\n         *\n         * @private\n         * @param {Array} source The array to copy values from.\n         * @param {Array} [array=[]] The array to copy values to.\n         * @returns {Array} Returns `array`.\n         */function copyArray(source,array){var index=-1,length=source.length;array||(array=Array(length));while(++index<length){array[index]=source[index];}return array;}/**\n         * Copies properties of `source` to `object`.\n         *\n         * @private\n         * @param {Object} source The object to copy properties from.\n         * @param {Array} props The property identifiers to copy.\n         * @param {Object} [object={}] The object to copy properties to.\n         * @param {Function} [customizer] The function to customize copied values.\n         * @returns {Object} Returns `object`.\n         */function copyObject(source,props,object,customizer){var isNew=!object;object||(object={});var index=-1,length=props.length;while(++index<length){var key=props[index];var newValue=customizer?customizer(object[key],source[key],key,object,source):undefined;if(newValue===undefined){newValue=source[key];}if(isNew){baseAssignValue(object,key,newValue);}else{assignValue(object,key,newValue);}}return object;}/**\n         * Copies own symbols of `source` to `object`.\n         *\n         * @private\n         * @param {Object} source The object to copy symbols from.\n         * @param {Object} [object={}] The object to copy symbols to.\n         * @returns {Object} Returns `object`.\n         */function copySymbols(source,object){return copyObject(source,getSymbols(source),object);}/**\n         * Copies own and inherited symbols of `source` to `object`.\n         *\n         * @private\n         * @param {Object} source The object to copy symbols from.\n         * @param {Object} [object={}] The object to copy symbols to.\n         * @returns {Object} Returns `object`.\n         */function copySymbolsIn(source,object){return copyObject(source,getSymbolsIn(source),object);}/**\n         * Creates a function like `_.groupBy`.\n         *\n         * @private\n         * @param {Function} setter The function to set accumulator values.\n         * @param {Function} [initializer] The accumulator object initializer.\n         * @returns {Function} Returns the new aggregator function.\n         */function createAggregator(setter,initializer){return function(collection,iteratee){var func=isArray(collection)?arrayAggregator:baseAggregator,accumulator=initializer?initializer():{};return func(collection,setter,getIteratee(iteratee,2),accumulator);};}/**\n         * Creates a function like `_.assign`.\n         *\n         * @private\n         * @param {Function} assigner The function to assign values.\n         * @returns {Function} Returns the new assigner function.\n         */function createAssigner(assigner){return baseRest(function(object,sources){var index=-1,length=sources.length,customizer=length>1?sources[length-1]:undefined,guard=length>2?sources[2]:undefined;customizer=assigner.length>3&&typeof customizer==='function'?(length--,customizer):undefined;if(guard&&isIterateeCall(sources[0],sources[1],guard)){customizer=length<3?undefined:customizer;length=1;}object=Object(object);while(++index<length){var source=sources[index];if(source){assigner(object,source,index,customizer);}}return object;});}/**\n         * Creates a `baseEach` or `baseEachRight` function.\n         *\n         * @private\n         * @param {Function} eachFunc The function to iterate over a collection.\n         * @param {boolean} [fromRight] Specify iterating from right to left.\n         * @returns {Function} Returns the new base function.\n         */function createBaseEach(eachFunc,fromRight){return function(collection,iteratee){if(collection==null){return collection;}if(!isArrayLike(collection)){return eachFunc(collection,iteratee);}var length=collection.length,index=fromRight?length:-1,iterable=Object(collection);while(fromRight?index--:++index<length){if(iteratee(iterable[index],index,iterable)===false){break;}}return collection;};}/**\n         * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n         *\n         * @private\n         * @param {boolean} [fromRight] Specify iterating from right to left.\n         * @returns {Function} Returns the new base function.\n         */function createBaseFor(fromRight){return function(object,iteratee,keysFunc){var index=-1,iterable=Object(object),props=keysFunc(object),length=props.length;while(length--){var key=props[fromRight?length:++index];if(iteratee(iterable[key],key,iterable)===false){break;}}return object;};}/**\n         * Creates a function that wraps `func` to invoke it with the optional `this`\n         * binding of `thisArg`.\n         *\n         * @private\n         * @param {Function} func The function to wrap.\n         * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n         * @param {*} [thisArg] The `this` binding of `func`.\n         * @returns {Function} Returns the new wrapped function.\n         */function createBind(func,bitmask,thisArg){var isBind=bitmask&WRAP_BIND_FLAG,Ctor=createCtor(func);function wrapper(){var fn=this&&this!==root&&this instanceof wrapper?Ctor:func;return fn.apply(isBind?thisArg:this,arguments);}return wrapper;}/**\n         * Creates a function like `_.lowerFirst`.\n         *\n         * @private\n         * @param {string} methodName The name of the `String` case method to use.\n         * @returns {Function} Returns the new case function.\n         */function createCaseFirst(methodName){return function(string){string=toString(string);var strSymbols=hasUnicode(string)?stringToArray(string):undefined;var chr=strSymbols?strSymbols[0]:string.charAt(0);var trailing=strSymbols?castSlice(strSymbols,1).join(''):string.slice(1);return chr[methodName]()+trailing;};}/**\n         * Creates a function like `_.camelCase`.\n         *\n         * @private\n         * @param {Function} callback The function to combine each word.\n         * @returns {Function} Returns the new compounder function.\n         */function createCompounder(callback){return function(string){return arrayReduce(words(deburr(string).replace(reApos,'')),callback,'');};}/**\n         * Creates a function that produces an instance of `Ctor` regardless of\n         * whether it was invoked as part of a `new` expression or by `call` or `apply`.\n         *\n         * @private\n         * @param {Function} Ctor The constructor to wrap.\n         * @returns {Function} Returns the new wrapped function.\n         */function createCtor(Ctor){return function(){// Use a `switch` statement to work with class constructors. See\n// http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist\n// for more details.\nvar args=arguments;switch(args.length){case 0:return new Ctor();case 1:return new Ctor(args[0]);case 2:return new Ctor(args[0],args[1]);case 3:return new Ctor(args[0],args[1],args[2]);case 4:return new Ctor(args[0],args[1],args[2],args[3]);case 5:return new Ctor(args[0],args[1],args[2],args[3],args[4]);case 6:return new Ctor(args[0],args[1],args[2],args[3],args[4],args[5]);case 7:return new Ctor(args[0],args[1],args[2],args[3],args[4],args[5],args[6]);}var thisBinding=baseCreate(Ctor.prototype),result=Ctor.apply(thisBinding,args);// Mimic the constructor's `return` behavior.\n// See https://es5.github.io/#x13.2.2 for more details.\nreturn isObject(result)?result:thisBinding;};}/**\n         * Creates a function that wraps `func` to enable currying.\n         *\n         * @private\n         * @param {Function} func The function to wrap.\n         * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n         * @param {number} arity The arity of `func`.\n         * @returns {Function} Returns the new wrapped function.\n         */function createCurry(func,bitmask,arity){var Ctor=createCtor(func);function wrapper(){var length=arguments.length,args=Array(length),index=length,placeholder=getHolder(wrapper);while(index--){args[index]=arguments[index];}var holders=length<3&&args[0]!==placeholder&&args[length-1]!==placeholder?[]:replaceHolders(args,placeholder);length-=holders.length;if(length<arity){return createRecurry(func,bitmask,createHybrid,wrapper.placeholder,undefined,args,holders,undefined,undefined,arity-length);}var fn=this&&this!==root&&this instanceof wrapper?Ctor:func;return apply(fn,this,args);}return wrapper;}/**\n         * Creates a `_.find` or `_.findLast` function.\n         *\n         * @private\n         * @param {Function} findIndexFunc The function to find the collection index.\n         * @returns {Function} Returns the new find function.\n         */function createFind(findIndexFunc){return function(collection,predicate,fromIndex){var iterable=Object(collection);if(!isArrayLike(collection)){var iteratee=getIteratee(predicate,3);collection=keys(collection);predicate=function predicate(key){return iteratee(iterable[key],key,iterable);};}var index=findIndexFunc(collection,predicate,fromIndex);return index>-1?iterable[iteratee?collection[index]:index]:undefined;};}/**\n         * Creates a `_.flow` or `_.flowRight` function.\n         *\n         * @private\n         * @param {boolean} [fromRight] Specify iterating from right to left.\n         * @returns {Function} Returns the new flow function.\n         */function createFlow(fromRight){return flatRest(function(funcs){var length=funcs.length,index=length,prereq=LodashWrapper.prototype.thru;if(fromRight){funcs.reverse();}while(index--){var func=funcs[index];if(typeof func!=='function'){throw new TypeError(FUNC_ERROR_TEXT);}if(prereq&&!wrapper&&getFuncName(func)=='wrapper'){var wrapper=new LodashWrapper([],true);}}index=wrapper?index:length;while(++index<length){func=funcs[index];var funcName=getFuncName(func),data=funcName=='wrapper'?getData(func):undefined;if(data&&isLaziable(data[0])&&data[1]==(WRAP_ARY_FLAG|WRAP_CURRY_FLAG|WRAP_PARTIAL_FLAG|WRAP_REARG_FLAG)&&!data[4].length&&data[9]==1){wrapper=wrapper[getFuncName(data[0])].apply(wrapper,data[3]);}else{wrapper=func.length==1&&isLaziable(func)?wrapper[funcName]():wrapper.thru(func);}}return function(){var args=arguments,value=args[0];if(wrapper&&args.length==1&&isArray(value)){return wrapper.plant(value).value();}var index=0,result=length?funcs[index].apply(this,args):value;while(++index<length){result=funcs[index].call(this,result);}return result;};});}/**\n         * Creates a function that wraps `func` to invoke it with optional `this`\n         * binding of `thisArg`, partial application, and currying.\n         *\n         * @private\n         * @param {Function|string} func The function or method name to wrap.\n         * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n         * @param {*} [thisArg] The `this` binding of `func`.\n         * @param {Array} [partials] The arguments to prepend to those provided to\n         *  the new function.\n         * @param {Array} [holders] The `partials` placeholder indexes.\n         * @param {Array} [partialsRight] The arguments to append to those provided\n         *  to the new function.\n         * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.\n         * @param {Array} [argPos] The argument positions of the new function.\n         * @param {number} [ary] The arity cap of `func`.\n         * @param {number} [arity] The arity of `func`.\n         * @returns {Function} Returns the new wrapped function.\n         */function createHybrid(func,bitmask,thisArg,partials,holders,partialsRight,holdersRight,argPos,ary,arity){var isAry=bitmask&WRAP_ARY_FLAG,isBind=bitmask&WRAP_BIND_FLAG,isBindKey=bitmask&WRAP_BIND_KEY_FLAG,isCurried=bitmask&(WRAP_CURRY_FLAG|WRAP_CURRY_RIGHT_FLAG),isFlip=bitmask&WRAP_FLIP_FLAG,Ctor=isBindKey?undefined:createCtor(func);function wrapper(){var length=arguments.length,args=Array(length),index=length;while(index--){args[index]=arguments[index];}if(isCurried){var placeholder=getHolder(wrapper),holdersCount=countHolders(args,placeholder);}if(partials){args=composeArgs(args,partials,holders,isCurried);}if(partialsRight){args=composeArgsRight(args,partialsRight,holdersRight,isCurried);}length-=holdersCount;if(isCurried&&length<arity){var newHolders=replaceHolders(args,placeholder);return createRecurry(func,bitmask,createHybrid,wrapper.placeholder,thisArg,args,newHolders,argPos,ary,arity-length);}var thisBinding=isBind?thisArg:this,fn=isBindKey?thisBinding[func]:func;length=args.length;if(argPos){args=reorder(args,argPos);}else if(isFlip&&length>1){args.reverse();}if(isAry&&ary<length){args.length=ary;}if(this&&this!==root&&this instanceof wrapper){fn=Ctor||createCtor(fn);}return fn.apply(thisBinding,args);}return wrapper;}/**\n         * Creates a function like `_.invertBy`.\n         *\n         * @private\n         * @param {Function} setter The function to set accumulator values.\n         * @param {Function} toIteratee The function to resolve iteratees.\n         * @returns {Function} Returns the new inverter function.\n         */function createInverter(setter,toIteratee){return function(object,iteratee){return baseInverter(object,setter,toIteratee(iteratee),{});};}/**\n         * Creates a function that performs a mathematical operation on two values.\n         *\n         * @private\n         * @param {Function} operator The function to perform the operation.\n         * @param {number} [defaultValue] The value used for `undefined` arguments.\n         * @returns {Function} Returns the new mathematical operation function.\n         */function createMathOperation(operator,defaultValue){return function(value,other){var result;if(value===undefined&&other===undefined){return defaultValue;}if(value!==undefined){result=value;}if(other!==undefined){if(result===undefined){return other;}if(typeof value==='string'||typeof other==='string'){value=baseToString(value);other=baseToString(other);}else{value=baseToNumber(value);other=baseToNumber(other);}result=operator(value,other);}return result;};}/**\n         * Creates a function like `_.over`.\n         *\n         * @private\n         * @param {Function} arrayFunc The function to iterate over iteratees.\n         * @returns {Function} Returns the new over function.\n         */function createOver(arrayFunc){return flatRest(function(iteratees){iteratees=arrayMap(iteratees,baseUnary(getIteratee()));return baseRest(function(args){var thisArg=this;return arrayFunc(iteratees,function(iteratee){return apply(iteratee,thisArg,args);});});});}/**\n         * Creates the padding for `string` based on `length`. The `chars` string\n         * is truncated if the number of characters exceeds `length`.\n         *\n         * @private\n         * @param {number} length The padding length.\n         * @param {string} [chars=' '] The string used as padding.\n         * @returns {string} Returns the padding for `string`.\n         */function createPadding(length,chars){chars=chars===undefined?' ':baseToString(chars);var charsLength=chars.length;if(charsLength<2){return charsLength?baseRepeat(chars,length):chars;}var result=baseRepeat(chars,nativeCeil(length/stringSize(chars)));return hasUnicode(chars)?castSlice(stringToArray(result),0,length).join(''):result.slice(0,length);}/**\n         * Creates a function that wraps `func` to invoke it with the `this` binding\n         * of `thisArg` and `partials` prepended to the arguments it receives.\n         *\n         * @private\n         * @param {Function} func The function to wrap.\n         * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n         * @param {*} thisArg The `this` binding of `func`.\n         * @param {Array} partials The arguments to prepend to those provided to\n         *  the new function.\n         * @returns {Function} Returns the new wrapped function.\n         */function createPartial(func,bitmask,thisArg,partials){var isBind=bitmask&WRAP_BIND_FLAG,Ctor=createCtor(func);function wrapper(){var argsIndex=-1,argsLength=arguments.length,leftIndex=-1,leftLength=partials.length,args=Array(leftLength+argsLength),fn=this&&this!==root&&this instanceof wrapper?Ctor:func;while(++leftIndex<leftLength){args[leftIndex]=partials[leftIndex];}while(argsLength--){args[leftIndex++]=arguments[++argsIndex];}return apply(fn,isBind?thisArg:this,args);}return wrapper;}/**\n         * Creates a `_.range` or `_.rangeRight` function.\n         *\n         * @private\n         * @param {boolean} [fromRight] Specify iterating from right to left.\n         * @returns {Function} Returns the new range function.\n         */function createRange(fromRight){return function(start,end,step){if(step&&typeof step!=='number'&&isIterateeCall(start,end,step)){end=step=undefined;}// Ensure the sign of `-0` is preserved.\nstart=toFinite(start);if(end===undefined){end=start;start=0;}else{end=toFinite(end);}step=step===undefined?start<end?1:-1:toFinite(step);return baseRange(start,end,step,fromRight);};}/**\n         * Creates a function that performs a relational operation on two values.\n         *\n         * @private\n         * @param {Function} operator The function to perform the operation.\n         * @returns {Function} Returns the new relational operation function.\n         */function createRelationalOperation(operator){return function(value,other){if(!(typeof value==='string'&&typeof other==='string')){value=toNumber(value);other=toNumber(other);}return operator(value,other);};}/**\n         * Creates a function that wraps `func` to continue currying.\n         *\n         * @private\n         * @param {Function} func The function to wrap.\n         * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n         * @param {Function} wrapFunc The function to create the `func` wrapper.\n         * @param {*} placeholder The placeholder value.\n         * @param {*} [thisArg] The `this` binding of `func`.\n         * @param {Array} [partials] The arguments to prepend to those provided to\n         *  the new function.\n         * @param {Array} [holders] The `partials` placeholder indexes.\n         * @param {Array} [argPos] The argument positions of the new function.\n         * @param {number} [ary] The arity cap of `func`.\n         * @param {number} [arity] The arity of `func`.\n         * @returns {Function} Returns the new wrapped function.\n         */function createRecurry(func,bitmask,wrapFunc,placeholder,thisArg,partials,holders,argPos,ary,arity){var isCurry=bitmask&WRAP_CURRY_FLAG,newHolders=isCurry?holders:undefined,newHoldersRight=isCurry?undefined:holders,newPartials=isCurry?partials:undefined,newPartialsRight=isCurry?undefined:partials;bitmask|=isCurry?WRAP_PARTIAL_FLAG:WRAP_PARTIAL_RIGHT_FLAG;bitmask&=~(isCurry?WRAP_PARTIAL_RIGHT_FLAG:WRAP_PARTIAL_FLAG);if(!(bitmask&WRAP_CURRY_BOUND_FLAG)){bitmask&=~(WRAP_BIND_FLAG|WRAP_BIND_KEY_FLAG);}var newData=[func,bitmask,thisArg,newPartials,newHolders,newPartialsRight,newHoldersRight,argPos,ary,arity];var result=wrapFunc.apply(undefined,newData);if(isLaziable(func)){setData(result,newData);}result.placeholder=placeholder;return setWrapToString(result,func,bitmask);}/**\n         * Creates a function like `_.round`.\n         *\n         * @private\n         * @param {string} methodName The name of the `Math` method to use when rounding.\n         * @returns {Function} Returns the new round function.\n         */function createRound(methodName){var func=Math[methodName];return function(number,precision){number=toNumber(number);precision=precision==null?0:nativeMin(toInteger(precision),292);if(precision){// Shift with exponential notation to avoid floating-point issues.\n// See [MDN](https://mdn.io/round#Examples) for more details.\nvar pair=(toString(number)+'e').split('e'),value=func(pair[0]+'e'+(+pair[1]+precision));pair=(toString(value)+'e').split('e');return+(pair[0]+'e'+(+pair[1]-precision));}return func(number);};}/**\n         * Creates a set object of `values`.\n         *\n         * @private\n         * @param {Array} values The values to add to the set.\n         * @returns {Object} Returns the new set.\n         */var createSet=!(Set&&1/setToArray(new Set([,-0]))[1]==INFINITY)?noop:function(values){return new Set(values);};/**\n       * Creates a `_.toPairs` or `_.toPairsIn` function.\n       *\n       * @private\n       * @param {Function} keysFunc The function to get the keys of a given object.\n       * @returns {Function} Returns the new pairs function.\n       */function createToPairs(keysFunc){return function(object){var tag=getTag(object);if(tag==mapTag){return mapToArray(object);}if(tag==setTag){return setToPairs(object);}return baseToPairs(object,keysFunc(object));};}/**\n         * Creates a function that either curries or invokes `func` with optional\n         * `this` binding and partially applied arguments.\n         *\n         * @private\n         * @param {Function|string} func The function or method name to wrap.\n         * @param {number} bitmask The bitmask flags.\n         *    1 - `_.bind`\n         *    2 - `_.bindKey`\n         *    4 - `_.curry` or `_.curryRight` of a bound function\n         *    8 - `_.curry`\n         *   16 - `_.curryRight`\n         *   32 - `_.partial`\n         *   64 - `_.partialRight`\n         *  128 - `_.rearg`\n         *  256 - `_.ary`\n         *  512 - `_.flip`\n         * @param {*} [thisArg] The `this` binding of `func`.\n         * @param {Array} [partials] The arguments to be partially applied.\n         * @param {Array} [holders] The `partials` placeholder indexes.\n         * @param {Array} [argPos] The argument positions of the new function.\n         * @param {number} [ary] The arity cap of `func`.\n         * @param {number} [arity] The arity of `func`.\n         * @returns {Function} Returns the new wrapped function.\n         */function createWrap(func,bitmask,thisArg,partials,holders,argPos,ary,arity){var isBindKey=bitmask&WRAP_BIND_KEY_FLAG;if(!isBindKey&&typeof func!=='function'){throw new TypeError(FUNC_ERROR_TEXT);}var length=partials?partials.length:0;if(!length){bitmask&=~(WRAP_PARTIAL_FLAG|WRAP_PARTIAL_RIGHT_FLAG);partials=holders=undefined;}ary=ary===undefined?ary:nativeMax(toInteger(ary),0);arity=arity===undefined?arity:toInteger(arity);length-=holders?holders.length:0;if(bitmask&WRAP_PARTIAL_RIGHT_FLAG){var partialsRight=partials,holdersRight=holders;partials=holders=undefined;}var data=isBindKey?undefined:getData(func);var newData=[func,bitmask,thisArg,partials,holders,partialsRight,holdersRight,argPos,ary,arity];if(data){mergeData(newData,data);}func=newData[0];bitmask=newData[1];thisArg=newData[2];partials=newData[3];holders=newData[4];arity=newData[9]=newData[9]===undefined?isBindKey?0:func.length:nativeMax(newData[9]-length,0);if(!arity&&bitmask&(WRAP_CURRY_FLAG|WRAP_CURRY_RIGHT_FLAG)){bitmask&=~(WRAP_CURRY_FLAG|WRAP_CURRY_RIGHT_FLAG);}if(!bitmask||bitmask==WRAP_BIND_FLAG){var result=createBind(func,bitmask,thisArg);}else if(bitmask==WRAP_CURRY_FLAG||bitmask==WRAP_CURRY_RIGHT_FLAG){result=createCurry(func,bitmask,arity);}else if((bitmask==WRAP_PARTIAL_FLAG||bitmask==(WRAP_BIND_FLAG|WRAP_PARTIAL_FLAG))&&!holders.length){result=createPartial(func,bitmask,thisArg,partials);}else{result=createHybrid.apply(undefined,newData);}var setter=data?baseSetData:setData;return setWrapToString(setter(result,newData),func,bitmask);}/**\n         * Used by `_.defaults` to customize its `_.assignIn` use to assign properties\n         * of source objects to the destination object for all destination properties\n         * that resolve to `undefined`.\n         *\n         * @private\n         * @param {*} objValue The destination value.\n         * @param {*} srcValue The source value.\n         * @param {string} key The key of the property to assign.\n         * @param {Object} object The parent object of `objValue`.\n         * @returns {*} Returns the value to assign.\n         */function customDefaultsAssignIn(objValue,srcValue,key,object){if(objValue===undefined||eq(objValue,objectProto[key])&&!hasOwnProperty.call(object,key)){return srcValue;}return objValue;}/**\n         * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source\n         * objects into destination objects that are passed thru.\n         *\n         * @private\n         * @param {*} objValue The destination value.\n         * @param {*} srcValue The source value.\n         * @param {string} key The key of the property to merge.\n         * @param {Object} object The parent object of `objValue`.\n         * @param {Object} source The parent object of `srcValue`.\n         * @param {Object} [stack] Tracks traversed source values and their merged\n         *  counterparts.\n         * @returns {*} Returns the value to assign.\n         */function customDefaultsMerge(objValue,srcValue,key,object,source,stack){if(isObject(objValue)&&isObject(srcValue)){// Recursively merge objects and arrays (susceptible to call stack limits).\nstack.set(srcValue,objValue);baseMerge(objValue,srcValue,undefined,customDefaultsMerge,stack);stack['delete'](srcValue);}return objValue;}/**\n         * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n         * objects.\n         *\n         * @private\n         * @param {*} value The value to inspect.\n         * @param {string} key The key of the property to inspect.\n         * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n         */function customOmitClone(value){return isPlainObject(value)?undefined:value;}/**\n         * A specialized version of `baseIsEqualDeep` for arrays with support for\n         * partial deep comparisons.\n         *\n         * @private\n         * @param {Array} array The array to compare.\n         * @param {Array} other The other array to compare.\n         * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n         * @param {Function} customizer The function to customize comparisons.\n         * @param {Function} equalFunc The function to determine equivalents of values.\n         * @param {Object} stack Tracks traversed `array` and `other` objects.\n         * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n         */function equalArrays(array,other,bitmask,customizer,equalFunc,stack){var isPartial=bitmask&COMPARE_PARTIAL_FLAG,arrLength=array.length,othLength=other.length;if(arrLength!=othLength&&!(isPartial&&othLength>arrLength)){return false;}// Assume cyclic values are equal.\nvar stacked=stack.get(array);if(stacked&&stack.get(other)){return stacked==other;}var index=-1,result=true,seen=bitmask&COMPARE_UNORDERED_FLAG?new SetCache():undefined;stack.set(array,other);stack.set(other,array);// Ignore non-index properties.\nwhile(++index<arrLength){var arrValue=array[index],othValue=other[index];if(customizer){var compared=isPartial?customizer(othValue,arrValue,index,other,array,stack):customizer(arrValue,othValue,index,array,other,stack);}if(compared!==undefined){if(compared){continue;}result=false;break;}// Recursively compare arrays (susceptible to call stack limits).\nif(seen){if(!arraySome(other,function(othValue,othIndex){if(!cacheHas(seen,othIndex)&&(arrValue===othValue||equalFunc(arrValue,othValue,bitmask,customizer,stack))){return seen.push(othIndex);}})){result=false;break;}}else if(!(arrValue===othValue||equalFunc(arrValue,othValue,bitmask,customizer,stack))){result=false;break;}}stack['delete'](array);stack['delete'](other);return result;}/**\n         * A specialized version of `baseIsEqualDeep` for comparing objects of\n         * the same `toStringTag`.\n         *\n         * **Note:** This function only supports comparing values with tags of\n         * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n         *\n         * @private\n         * @param {Object} object The object to compare.\n         * @param {Object} other The other object to compare.\n         * @param {string} tag The `toStringTag` of the objects to compare.\n         * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n         * @param {Function} customizer The function to customize comparisons.\n         * @param {Function} equalFunc The function to determine equivalents of values.\n         * @param {Object} stack Tracks traversed `object` and `other` objects.\n         * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n         */function equalByTag(object,other,tag,bitmask,customizer,equalFunc,stack){switch(tag){case dataViewTag:if(object.byteLength!=other.byteLength||object.byteOffset!=other.byteOffset){return false;}object=object.buffer;other=other.buffer;case arrayBufferTag:if(object.byteLength!=other.byteLength||!equalFunc(new Uint8Array(object),new Uint8Array(other))){return false;}return true;case boolTag:case dateTag:case numberTag:// Coerce booleans to `1` or `0` and dates to milliseconds.\n// Invalid dates are coerced to `NaN`.\nreturn eq(+object,+other);case errorTag:return object.name==other.name&&object.message==other.message;case regexpTag:case stringTag:// Coerce regexes to strings and treat strings, primitives and objects,\n// as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n// for more details.\nreturn object==other+'';case mapTag:var convert=mapToArray;case setTag:var isPartial=bitmask&COMPARE_PARTIAL_FLAG;convert||(convert=setToArray);if(object.size!=other.size&&!isPartial){return false;}// Assume cyclic values are equal.\nvar stacked=stack.get(object);if(stacked){return stacked==other;}bitmask|=COMPARE_UNORDERED_FLAG;// Recursively compare objects (susceptible to call stack limits).\nstack.set(object,other);var result=equalArrays(convert(object),convert(other),bitmask,customizer,equalFunc,stack);stack['delete'](object);return result;case symbolTag:if(symbolValueOf){return symbolValueOf.call(object)==symbolValueOf.call(other);}}return false;}/**\n         * A specialized version of `baseIsEqualDeep` for objects with support for\n         * partial deep comparisons.\n         *\n         * @private\n         * @param {Object} object The object to compare.\n         * @param {Object} other The other object to compare.\n         * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n         * @param {Function} customizer The function to customize comparisons.\n         * @param {Function} equalFunc The function to determine equivalents of values.\n         * @param {Object} stack Tracks traversed `object` and `other` objects.\n         * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n         */function equalObjects(object,other,bitmask,customizer,equalFunc,stack){var isPartial=bitmask&COMPARE_PARTIAL_FLAG,objProps=getAllKeys(object),objLength=objProps.length,othProps=getAllKeys(other),othLength=othProps.length;if(objLength!=othLength&&!isPartial){return false;}var index=objLength;while(index--){var key=objProps[index];if(!(isPartial?key in other:hasOwnProperty.call(other,key))){return false;}}// Assume cyclic values are equal.\nvar stacked=stack.get(object);if(stacked&&stack.get(other)){return stacked==other;}var result=true;stack.set(object,other);stack.set(other,object);var skipCtor=isPartial;while(++index<objLength){key=objProps[index];var objValue=object[key],othValue=other[key];if(customizer){var compared=isPartial?customizer(othValue,objValue,key,other,object,stack):customizer(objValue,othValue,key,object,other,stack);}// Recursively compare objects (susceptible to call stack limits).\nif(!(compared===undefined?objValue===othValue||equalFunc(objValue,othValue,bitmask,customizer,stack):compared)){result=false;break;}skipCtor||(skipCtor=key=='constructor');}if(result&&!skipCtor){var objCtor=object.constructor,othCtor=other.constructor;// Non `Object` object instances with different constructors are not equal.\nif(objCtor!=othCtor&&'constructor'in object&&'constructor'in other&&!(typeof objCtor==='function'&&objCtor instanceof objCtor&&typeof othCtor==='function'&&othCtor instanceof othCtor)){result=false;}}stack['delete'](object);stack['delete'](other);return result;}/**\n         * A specialized version of `baseRest` which flattens the rest array.\n         *\n         * @private\n         * @param {Function} func The function to apply a rest parameter to.\n         * @returns {Function} Returns the new function.\n         */function flatRest(func){return setToString(overRest(func,undefined,flatten),func+'');}/**\n         * Creates an array of own enumerable property names and symbols of `object`.\n         *\n         * @private\n         * @param {Object} object The object to query.\n         * @returns {Array} Returns the array of property names and symbols.\n         */function getAllKeys(object){return baseGetAllKeys(object,keys,getSymbols);}/**\n         * Creates an array of own and inherited enumerable property names and\n         * symbols of `object`.\n         *\n         * @private\n         * @param {Object} object The object to query.\n         * @returns {Array} Returns the array of property names and symbols.\n         */function getAllKeysIn(object){return baseGetAllKeys(object,keysIn,getSymbolsIn);}/**\n         * Gets metadata for `func`.\n         *\n         * @private\n         * @param {Function} func The function to query.\n         * @returns {*} Returns the metadata for `func`.\n         */var getData=!metaMap?noop:function(func){return metaMap.get(func);};/**\n       * Gets the name of `func`.\n       *\n       * @private\n       * @param {Function} func The function to query.\n       * @returns {string} Returns the function name.\n       */function getFuncName(func){var result=func.name+'',array=realNames[result],length=hasOwnProperty.call(realNames,result)?array.length:0;while(length--){var data=array[length],otherFunc=data.func;if(otherFunc==null||otherFunc==func){return data.name;}}return result;}/**\n         * Gets the argument placeholder value for `func`.\n         *\n         * @private\n         * @param {Function} func The function to inspect.\n         * @returns {*} Returns the placeholder value.\n         */function getHolder(func){var object=hasOwnProperty.call(lodash,'placeholder')?lodash:func;return object.placeholder;}/**\n         * Gets the appropriate \"iteratee\" function. If `_.iteratee` is customized,\n         * this function returns the custom method, otherwise it returns `baseIteratee`.\n         * If arguments are provided, the chosen function is invoked with them and\n         * its result is returned.\n         *\n         * @private\n         * @param {*} [value] The value to convert to an iteratee.\n         * @param {number} [arity] The arity of the created iteratee.\n         * @returns {Function} Returns the chosen function or its result.\n         */function getIteratee(){var result=lodash.iteratee||iteratee;result=result===iteratee?baseIteratee:result;return arguments.length?result(arguments[0],arguments[1]):result;}/**\n         * Gets the data for `map`.\n         *\n         * @private\n         * @param {Object} map The map to query.\n         * @param {string} key The reference key.\n         * @returns {*} Returns the map data.\n         */function getMapData(map,key){var data=map.__data__;return isKeyable(key)?data[typeof key==='string'?'string':'hash']:data.map;}/**\n         * Gets the property names, values, and compare flags of `object`.\n         *\n         * @private\n         * @param {Object} object The object to query.\n         * @returns {Array} Returns the match data of `object`.\n         */function getMatchData(object){var result=keys(object),length=result.length;while(length--){var key=result[length],value=object[key];result[length]=[key,value,isStrictComparable(value)];}return result;}/**\n         * Gets the native function at `key` of `object`.\n         *\n         * @private\n         * @param {Object} object The object to query.\n         * @param {string} key The key of the method to get.\n         * @returns {*} Returns the function if it's native, else `undefined`.\n         */function getNative(object,key){var value=getValue(object,key);return baseIsNative(value)?value:undefined;}/**\n         * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n         *\n         * @private\n         * @param {*} value The value to query.\n         * @returns {string} Returns the raw `toStringTag`.\n         */function getRawTag(value){var isOwn=hasOwnProperty.call(value,symToStringTag),tag=value[symToStringTag];try{value[symToStringTag]=undefined;var unmasked=true;}catch(e){}var result=nativeObjectToString.call(value);if(unmasked){if(isOwn){value[symToStringTag]=tag;}else{delete value[symToStringTag];}}return result;}/**\n         * Creates an array of the own enumerable symbols of `object`.\n         *\n         * @private\n         * @param {Object} object The object to query.\n         * @returns {Array} Returns the array of symbols.\n         */var getSymbols=!nativeGetSymbols?stubArray:function(object){if(object==null){return[];}object=Object(object);return arrayFilter(nativeGetSymbols(object),function(symbol){return propertyIsEnumerable.call(object,symbol);});};/**\n       * Creates an array of the own and inherited enumerable symbols of `object`.\n       *\n       * @private\n       * @param {Object} object The object to query.\n       * @returns {Array} Returns the array of symbols.\n       */var getSymbolsIn=!nativeGetSymbols?stubArray:function(object){var result=[];while(object){arrayPush(result,getSymbols(object));object=getPrototype(object);}return result;};/**\n       * Gets the `toStringTag` of `value`.\n       *\n       * @private\n       * @param {*} value The value to query.\n       * @returns {string} Returns the `toStringTag`.\n       */var getTag=baseGetTag;// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif(DataView&&getTag(new DataView(new ArrayBuffer(1)))!=dataViewTag||Map&&getTag(new Map())!=mapTag||Promise&&getTag(Promise.resolve())!=promiseTag||Set&&getTag(new Set())!=setTag||WeakMap&&getTag(new WeakMap())!=weakMapTag){getTag=function getTag(value){var result=baseGetTag(value),Ctor=result==objectTag?value.constructor:undefined,ctorString=Ctor?toSource(Ctor):'';if(ctorString){switch(ctorString){case dataViewCtorString:return dataViewTag;case mapCtorString:return mapTag;case promiseCtorString:return promiseTag;case setCtorString:return setTag;case weakMapCtorString:return weakMapTag;}}return result;};}/**\n         * Gets the view, applying any `transforms` to the `start` and `end` positions.\n         *\n         * @private\n         * @param {number} start The start of the view.\n         * @param {number} end The end of the view.\n         * @param {Array} transforms The transformations to apply to the view.\n         * @returns {Object} Returns an object containing the `start` and `end`\n         *  positions of the view.\n         */function getView(start,end,transforms){var index=-1,length=transforms.length;while(++index<length){var data=transforms[index],size=data.size;switch(data.type){case'drop':start+=size;break;case'dropRight':end-=size;break;case'take':end=nativeMin(end,start+size);break;case'takeRight':start=nativeMax(start,end-size);break;}}return{start:start,end:end};}/**\n         * Extracts wrapper details from the `source` body comment.\n         *\n         * @private\n         * @param {string} source The source to inspect.\n         * @returns {Array} Returns the wrapper details.\n         */function getWrapDetails(source){var match=source.match(reWrapDetails);return match?match[1].split(reSplitDetails):[];}/**\n         * Checks if `path` exists on `object`.\n         *\n         * @private\n         * @param {Object} object The object to query.\n         * @param {Array|string} path The path to check.\n         * @param {Function} hasFunc The function to check properties.\n         * @returns {boolean} Returns `true` if `path` exists, else `false`.\n         */function hasPath(object,path,hasFunc){path=castPath(path,object);var index=-1,length=path.length,result=false;while(++index<length){var key=toKey(path[index]);if(!(result=object!=null&&hasFunc(object,key))){break;}object=object[key];}if(result||++index!=length){return result;}length=object==null?0:object.length;return!!length&&isLength(length)&&isIndex(key,length)&&(isArray(object)||isArguments(object));}/**\n         * Initializes an array clone.\n         *\n         * @private\n         * @param {Array} array The array to clone.\n         * @returns {Array} Returns the initialized clone.\n         */function initCloneArray(array){var length=array.length,result=new array.constructor(length);// Add properties assigned by `RegExp#exec`.\nif(length&&typeof array[0]==='string'&&hasOwnProperty.call(array,'index')){result.index=array.index;result.input=array.input;}return result;}/**\n         * Initializes an object clone.\n         *\n         * @private\n         * @param {Object} object The object to clone.\n         * @returns {Object} Returns the initialized clone.\n         */function initCloneObject(object){return typeof object.constructor==='function'&&!isPrototype(object)?baseCreate(getPrototype(object)):{};}/**\n         * Initializes an object clone based on its `toStringTag`.\n         *\n         * **Note:** This function only supports cloning values with tags of\n         * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n         *\n         * @private\n         * @param {Object} object The object to clone.\n         * @param {string} tag The `toStringTag` of the object to clone.\n         * @param {boolean} [isDeep] Specify a deep clone.\n         * @returns {Object} Returns the initialized clone.\n         */function initCloneByTag(object,tag,isDeep){var Ctor=object.constructor;switch(tag){case arrayBufferTag:return cloneArrayBuffer(object);case boolTag:case dateTag:return new Ctor(+object);case dataViewTag:return cloneDataView(object,isDeep);case float32Tag:case float64Tag:case int8Tag:case int16Tag:case int32Tag:case uint8Tag:case uint8ClampedTag:case uint16Tag:case uint32Tag:return cloneTypedArray(object,isDeep);case mapTag:return new Ctor();case numberTag:case stringTag:return new Ctor(object);case regexpTag:return cloneRegExp(object);case setTag:return new Ctor();case symbolTag:return cloneSymbol(object);}}/**\n         * Inserts wrapper `details` in a comment at the top of the `source` body.\n         *\n         * @private\n         * @param {string} source The source to modify.\n         * @returns {Array} details The details to insert.\n         * @returns {string} Returns the modified source.\n         */function insertWrapDetails(source,details){var length=details.length;if(!length){return source;}var lastIndex=length-1;details[lastIndex]=(length>1?'& ':'')+details[lastIndex];details=details.join(length>2?', ':' ');return source.replace(reWrapComment,'{\\n/* [wrapped with '+details+'] */\\n');}/**\n         * Checks if `value` is a flattenable `arguments` object or array.\n         *\n         * @private\n         * @param {*} value The value to check.\n         * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n         */function isFlattenable(value){return isArray(value)||isArguments(value)||!!(spreadableSymbol&&value&&value[spreadableSymbol]);}/**\n         * Checks if `value` is a valid array-like index.\n         *\n         * @private\n         * @param {*} value The value to check.\n         * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n         * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n         */function isIndex(value,length){var type=typeof value==='undefined'?'undefined':_typeof(value);length=length==null?MAX_SAFE_INTEGER:length;return!!length&&(type=='number'||type!='symbol'&&reIsUint.test(value))&&value>-1&&value%1==0&&value<length;}/**\n         * Checks if the given arguments are from an iteratee call.\n         *\n         * @private\n         * @param {*} value The potential iteratee value argument.\n         * @param {*} index The potential iteratee index or key argument.\n         * @param {*} object The potential iteratee object argument.\n         * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n         *  else `false`.\n         */function isIterateeCall(value,index,object){if(!isObject(object)){return false;}var type=typeof index==='undefined'?'undefined':_typeof(index);if(type=='number'?isArrayLike(object)&&isIndex(index,object.length):type=='string'&&index in object){return eq(object[index],value);}return false;}/**\n         * Checks if `value` is a property name and not a property path.\n         *\n         * @private\n         * @param {*} value The value to check.\n         * @param {Object} [object] The object to query keys on.\n         * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n         */function isKey(value,object){if(isArray(value)){return false;}var type=typeof value==='undefined'?'undefined':_typeof(value);if(type=='number'||type=='symbol'||type=='boolean'||value==null||isSymbol(value)){return true;}return reIsPlainProp.test(value)||!reIsDeepProp.test(value)||object!=null&&value in Object(object);}/**\n         * Checks if `value` is suitable for use as unique object key.\n         *\n         * @private\n         * @param {*} value The value to check.\n         * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n         */function isKeyable(value){var type=typeof value==='undefined'?'undefined':_typeof(value);return type=='string'||type=='number'||type=='symbol'||type=='boolean'?value!=='__proto__':value===null;}/**\n         * Checks if `func` has a lazy counterpart.\n         *\n         * @private\n         * @param {Function} func The function to check.\n         * @returns {boolean} Returns `true` if `func` has a lazy counterpart,\n         *  else `false`.\n         */function isLaziable(func){var funcName=getFuncName(func),other=lodash[funcName];if(typeof other!=='function'||!(funcName in LazyWrapper.prototype)){return false;}if(func===other){return true;}var data=getData(other);return!!data&&func===data[0];}/**\n         * Checks if `func` has its source masked.\n         *\n         * @private\n         * @param {Function} func The function to check.\n         * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n         */function isMasked(func){return!!maskSrcKey&&maskSrcKey in func;}/**\n         * Checks if `func` is capable of being masked.\n         *\n         * @private\n         * @param {*} value The value to check.\n         * @returns {boolean} Returns `true` if `func` is maskable, else `false`.\n         */var isMaskable=coreJsData?isFunction:stubFalse;/**\n         * Checks if `value` is likely a prototype object.\n         *\n         * @private\n         * @param {*} value The value to check.\n         * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n         */function isPrototype(value){var Ctor=value&&value.constructor,proto=typeof Ctor==='function'&&Ctor.prototype||objectProto;return value===proto;}/**\n         * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n         *\n         * @private\n         * @param {*} value The value to check.\n         * @returns {boolean} Returns `true` if `value` if suitable for strict\n         *  equality comparisons, else `false`.\n         */function isStrictComparable(value){return value===value&&!isObject(value);}/**\n         * A specialized version of `matchesProperty` for source values suitable\n         * for strict equality comparisons, i.e. `===`.\n         *\n         * @private\n         * @param {string} key The key of the property to get.\n         * @param {*} srcValue The value to match.\n         * @returns {Function} Returns the new spec function.\n         */function matchesStrictComparable(key,srcValue){return function(object){if(object==null){return false;}return object[key]===srcValue&&(srcValue!==undefined||key in Object(object));};}/**\n         * A specialized version of `_.memoize` which clears the memoized function's\n         * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n         *\n         * @private\n         * @param {Function} func The function to have its output memoized.\n         * @returns {Function} Returns the new memoized function.\n         */function memoizeCapped(func){var result=memoize(func,function(key){if(cache.size===MAX_MEMOIZE_SIZE){cache.clear();}return key;});var cache=result.cache;return result;}/**\n         * Merges the function metadata of `source` into `data`.\n         *\n         * Merging metadata reduces the number of wrappers used to invoke a function.\n         * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`\n         * may be applied regardless of execution order. Methods like `_.ary` and\n         * `_.rearg` modify function arguments, making the order in which they are\n         * executed important, preventing the merging of metadata. However, we make\n         * an exception for a safe combined case where curried functions have `_.ary`\n         * and or `_.rearg` applied.\n         *\n         * @private\n         * @param {Array} data The destination metadata.\n         * @param {Array} source The source metadata.\n         * @returns {Array} Returns `data`.\n         */function mergeData(data,source){var bitmask=data[1],srcBitmask=source[1],newBitmask=bitmask|srcBitmask,isCommon=newBitmask<(WRAP_BIND_FLAG|WRAP_BIND_KEY_FLAG|WRAP_ARY_FLAG);var isCombo=srcBitmask==WRAP_ARY_FLAG&&bitmask==WRAP_CURRY_FLAG||srcBitmask==WRAP_ARY_FLAG&&bitmask==WRAP_REARG_FLAG&&data[7].length<=source[8]||srcBitmask==(WRAP_ARY_FLAG|WRAP_REARG_FLAG)&&source[7].length<=source[8]&&bitmask==WRAP_CURRY_FLAG;// Exit early if metadata can't be merged.\nif(!(isCommon||isCombo)){return data;}// Use source `thisArg` if available.\nif(srcBitmask&WRAP_BIND_FLAG){data[2]=source[2];// Set when currying a bound function.\nnewBitmask|=bitmask&WRAP_BIND_FLAG?0:WRAP_CURRY_BOUND_FLAG;}// Compose partial arguments.\nvar value=source[3];if(value){var partials=data[3];data[3]=partials?composeArgs(partials,value,source[4]):value;data[4]=partials?replaceHolders(data[3],PLACEHOLDER):source[4];}// Compose partial right arguments.\nvalue=source[5];if(value){partials=data[5];data[5]=partials?composeArgsRight(partials,value,source[6]):value;data[6]=partials?replaceHolders(data[5],PLACEHOLDER):source[6];}// Use source `argPos` if available.\nvalue=source[7];if(value){data[7]=value;}// Use source `ary` if it's smaller.\nif(srcBitmask&WRAP_ARY_FLAG){data[8]=data[8]==null?source[8]:nativeMin(data[8],source[8]);}// Use source `arity` if one is not provided.\nif(data[9]==null){data[9]=source[9];}// Use source `func` and merge bitmasks.\ndata[0]=source[0];data[1]=newBitmask;return data;}/**\n         * This function is like\n         * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n         * except that it includes inherited enumerable properties.\n         *\n         * @private\n         * @param {Object} object The object to query.\n         * @returns {Array} Returns the array of property names.\n         */function nativeKeysIn(object){var result=[];if(object!=null){for(var key in Object(object)){result.push(key);}}return result;}/**\n         * Converts `value` to a string using `Object.prototype.toString`.\n         *\n         * @private\n         * @param {*} value The value to convert.\n         * @returns {string} Returns the converted string.\n         */function objectToString(value){return nativeObjectToString.call(value);}/**\n         * A specialized version of `baseRest` which transforms the rest array.\n         *\n         * @private\n         * @param {Function} func The function to apply a rest parameter to.\n         * @param {number} [start=func.length-1] The start position of the rest parameter.\n         * @param {Function} transform The rest array transform.\n         * @returns {Function} Returns the new function.\n         */function overRest(func,start,transform){start=nativeMax(start===undefined?func.length-1:start,0);return function(){var args=arguments,index=-1,length=nativeMax(args.length-start,0),array=Array(length);while(++index<length){array[index]=args[start+index];}index=-1;var otherArgs=Array(start+1);while(++index<start){otherArgs[index]=args[index];}otherArgs[start]=transform(array);return apply(func,this,otherArgs);};}/**\n         * Gets the parent value at `path` of `object`.\n         *\n         * @private\n         * @param {Object} object The object to query.\n         * @param {Array} path The path to get the parent value of.\n         * @returns {*} Returns the parent value.\n         */function parent(object,path){return path.length<2?object:baseGet(object,baseSlice(path,0,-1));}/**\n         * Reorder `array` according to the specified indexes where the element at\n         * the first index is assigned as the first element, the element at\n         * the second index is assigned as the second element, and so on.\n         *\n         * @private\n         * @param {Array} array The array to reorder.\n         * @param {Array} indexes The arranged array indexes.\n         * @returns {Array} Returns `array`.\n         */function reorder(array,indexes){var arrLength=array.length,length=nativeMin(indexes.length,arrLength),oldArray=copyArray(array);while(length--){var index=indexes[length];array[length]=isIndex(index,arrLength)?oldArray[index]:undefined;}return array;}/**\n         * Sets metadata for `func`.\n         *\n         * **Note:** If this function becomes hot, i.e. is invoked a lot in a short\n         * period of time, it will trip its breaker and transition to an identity\n         * function to avoid garbage collection pauses in V8. See\n         * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)\n         * for more details.\n         *\n         * @private\n         * @param {Function} func The function to associate metadata with.\n         * @param {*} data The metadata.\n         * @returns {Function} Returns `func`.\n         */var setData=shortOut(baseSetData);/**\n         * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).\n         *\n         * @private\n         * @param {Function} func The function to delay.\n         * @param {number} wait The number of milliseconds to delay invocation.\n         * @returns {number|Object} Returns the timer id or timeout object.\n         */var setTimeout=ctxSetTimeout||function(func,wait){return root.setTimeout(func,wait);};/**\n       * Sets the `toString` method of `func` to return `string`.\n       *\n       * @private\n       * @param {Function} func The function to modify.\n       * @param {Function} string The `toString` result.\n       * @returns {Function} Returns `func`.\n       */var setToString=shortOut(baseSetToString);/**\n         * Sets the `toString` method of `wrapper` to mimic the source of `reference`\n         * with wrapper details in a comment at the top of the source body.\n         *\n         * @private\n         * @param {Function} wrapper The function to modify.\n         * @param {Function} reference The reference function.\n         * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n         * @returns {Function} Returns `wrapper`.\n         */function setWrapToString(wrapper,reference,bitmask){var source=reference+'';return setToString(wrapper,insertWrapDetails(source,updateWrapDetails(getWrapDetails(source),bitmask)));}/**\n         * Creates a function that'll short out and invoke `identity` instead\n         * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n         * milliseconds.\n         *\n         * @private\n         * @param {Function} func The function to restrict.\n         * @returns {Function} Returns the new shortable function.\n         */function shortOut(func){var count=0,lastCalled=0;return function(){var stamp=nativeNow(),remaining=HOT_SPAN-(stamp-lastCalled);lastCalled=stamp;if(remaining>0){if(++count>=HOT_COUNT){return arguments[0];}}else{count=0;}return func.apply(undefined,arguments);};}/**\n         * A specialized version of `_.shuffle` which mutates and sets the size of `array`.\n         *\n         * @private\n         * @param {Array} array The array to shuffle.\n         * @param {number} [size=array.length] The size of `array`.\n         * @returns {Array} Returns `array`.\n         */function shuffleSelf(array,size){var index=-1,length=array.length,lastIndex=length-1;size=size===undefined?length:size;while(++index<size){var rand=baseRandom(index,lastIndex),value=array[rand];array[rand]=array[index];array[index]=value;}array.length=size;return array;}/**\n         * Converts `string` to a property path array.\n         *\n         * @private\n         * @param {string} string The string to convert.\n         * @returns {Array} Returns the property path array.\n         */var stringToPath=memoizeCapped(function(string){var result=[];if(string.charCodeAt(0)===46/* . */){result.push('');}string.replace(rePropName,function(match,number,quote,subString){result.push(quote?subString.replace(reEscapeChar,'$1'):number||match);});return result;});/**\n       * Converts `value` to a string key if it's not a string or symbol.\n       *\n       * @private\n       * @param {*} value The value to inspect.\n       * @returns {string|symbol} Returns the key.\n       */function toKey(value){if(typeof value==='string'||isSymbol(value)){return value;}var result=value+'';return result=='0'&&1/value==-INFINITY?'-0':result;}/**\n         * Converts `func` to its source code.\n         *\n         * @private\n         * @param {Function} func The function to convert.\n         * @returns {string} Returns the source code.\n         */function toSource(func){if(func!=null){try{return funcToString.call(func);}catch(e){}try{return func+'';}catch(e){}}return'';}/**\n         * Updates wrapper `details` based on `bitmask` flags.\n         *\n         * @private\n         * @returns {Array} details The details to modify.\n         * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n         * @returns {Array} Returns `details`.\n         */function updateWrapDetails(details,bitmask){arrayEach(wrapFlags,function(pair){var value='_.'+pair[0];if(bitmask&pair[1]&&!arrayIncludes(details,value)){details.push(value);}});return details.sort();}/**\n         * Creates a clone of `wrapper`.\n         *\n         * @private\n         * @param {Object} wrapper The wrapper to clone.\n         * @returns {Object} Returns the cloned wrapper.\n         */function wrapperClone(wrapper){if(wrapper instanceof LazyWrapper){return wrapper.clone();}var result=new LodashWrapper(wrapper.__wrapped__,wrapper.__chain__);result.__actions__=copyArray(wrapper.__actions__);result.__index__=wrapper.__index__;result.__values__=wrapper.__values__;return result;}/* ------------------------------------------------------------------------*//**\n         * Creates an array of elements split into groups the length of `size`.\n         * If `array` can't be split evenly, the final chunk will be the remaining\n         * elements.\n         *\n         * @static\n         * @memberOf _\n         * @since 3.0.0\n         * @category Array\n         * @param {Array} array The array to process.\n         * @param {number} [size=1] The length of each chunk\n         * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n         * @returns {Array} Returns the new array of chunks.\n         * @example\n         *\n         * _.chunk(['a', 'b', 'c', 'd'], 2);\n         * // => [['a', 'b'], ['c', 'd']]\n         *\n         * _.chunk(['a', 'b', 'c', 'd'], 3);\n         * // => [['a', 'b', 'c'], ['d']]\n         */function chunk(array,size,guard){if(guard?isIterateeCall(array,size,guard):size===undefined){size=1;}else{size=nativeMax(toInteger(size),0);}var length=array==null?0:array.length;if(!length||size<1){return[];}var index=0,resIndex=0,result=Array(nativeCeil(length/size));while(index<length){result[resIndex++]=baseSlice(array,index,index+=size);}return result;}/**\n         * Creates an array with all falsey values removed. The values `false`, `null`,\n         * `0`, `\"\"`, `undefined`, and `NaN` are falsey.\n         *\n         * @static\n         * @memberOf _\n         * @since 0.1.0\n         * @category Array\n         * @param {Array} array The array to compact.\n         * @returns {Array} Returns the new array of filtered values.\n         * @example\n         *\n         * _.compact([0, 1, false, 2, '', 3]);\n         * // => [1, 2, 3]\n         */function compact(array){var index=-1,length=array==null?0:array.length,resIndex=0,result=[];while(++index<length){var value=array[index];if(value){result[resIndex++]=value;}}return result;}/**\n         * Creates a new array concatenating `array` with any additional arrays\n         * and/or values.\n         *\n         * @static\n         * @memberOf _\n         * @since 4.0.0\n         * @category Array\n         * @param {Array} array The array to concatenate.\n         * @param {...*} [values] The values to concatenate.\n         * @returns {Array} Returns the new concatenated array.\n         * @example\n         *\n         * var array = [1];\n         * var other = _.concat(array, 2, [3], [[4]]);\n         *\n         * console.log(other);\n         * // => [1, 2, 3, [4]]\n         *\n         * console.log(array);\n         * // => [1]\n         */function concat(){var length=arguments.length;if(!length){return[];}var args=Array(length-1),array=arguments[0],index=length;while(index--){args[index-1]=arguments[index];}return arrayPush(isArray(array)?copyArray(array):[array],baseFlatten(args,1));}/**\n         * Creates an array of `array` values not included in the other given arrays\n         * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n         * for equality comparisons. The order and references of result values are\n         * determined by the first array.\n         *\n         * **Note:** Unlike `_.pullAll`, this method returns a new array.\n         *\n         * @static\n         * @memberOf _\n         * @since 0.1.0\n         * @category Array\n         * @param {Array} array The array to inspect.\n         * @param {...Array} [values] The values to exclude.\n         * @returns {Array} Returns the new array of filtered values.\n         * @see _.without, _.xor\n         * @example\n         *\n         * _.difference([2, 1], [2, 3]);\n         * // => [1]\n         */var difference=baseRest(function(array,values){return isArrayLikeObject(array)?baseDifference(array,baseFlatten(values,1,isArrayLikeObject,true)):[];});/**\n       * This method is like `_.difference` except that it accepts `iteratee` which\n       * is invoked for each element of `array` and `values` to generate the criterion\n       * by which they're compared. The order and references of result values are\n       * determined by the first array. The iteratee is invoked with one argument:\n       * (value).\n       *\n       * **Note:** Unlike `_.pullAllBy`, this method returns a new array.\n       *\n       * @static\n       * @memberOf _\n       * @since 4.0.0\n       * @category Array\n       * @param {Array} array The array to inspect.\n       * @param {...Array} [values] The values to exclude.\n       * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n       * @returns {Array} Returns the new array of filtered values.\n       * @example\n       *\n       * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n       * // => [1.2]\n       *\n       * // The `_.property` iteratee shorthand.\n       * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');\n       * // => [{ 'x': 2 }]\n       */var differenceBy=baseRest(function(array,values){var iteratee=last(values);if(isArrayLikeObject(iteratee)){iteratee=undefined;}return isArrayLikeObject(array)?baseDifference(array,baseFlatten(values,1,isArrayLikeObject,true),getIteratee(iteratee,2)):[];});/**\n       * This method is like `_.difference` except that it accepts `comparator`\n       * which is invoked to compare elements of `array` to `values`. The order and\n       * references of result values are determined by the first array. The comparator\n       * is invoked with two arguments: (arrVal, othVal).\n       *\n       * **Note:** Unlike `_.pullAllWith`, this method returns a new array.\n       *\n       * @static\n       * @memberOf _\n       * @since 4.0.0\n       * @category Array\n       * @param {Array} array The array to inspect.\n       * @param {...Array} [values] The values to exclude.\n       * @param {Function} [comparator] The comparator invoked per element.\n       * @returns {Array} Returns the new array of filtered values.\n       * @example\n       *\n       * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n       *\n       * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);\n       * // => [{ 'x': 2, 'y': 1 }]\n       */var differenceWith=baseRest(function(array,values){var comparator=last(values);if(isArrayLikeObject(comparator)){comparator=undefined;}return isArrayLikeObject(array)?baseDifference(array,baseFlatten(values,1,isArrayLikeObject,true),undefined,comparator):[];});/**\n       * Creates a slice of `array` with `n` elements dropped from the beginning.\n       *\n       * @static\n       * @memberOf _\n       * @since 0.5.0\n       * @category Array\n       * @param {Array} array The array to query.\n       * @param {number} [n=1] The number of elements to drop.\n       * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n       * @returns {Array} Returns the slice of `array`.\n       * @example\n       *\n       * _.drop([1, 2, 3]);\n       * // => [2, 3]\n       *\n       * _.drop([1, 2, 3], 2);\n       * // => [3]\n       *\n       * _.drop([1, 2, 3], 5);\n       * // => []\n       *\n       * _.drop([1, 2, 3], 0);\n       * // => [1, 2, 3]\n       */function drop(array,n,guard){var length=array==null?0:array.length;if(!length){return[];}n=guard||n===undefined?1:toInteger(n);return baseSlice(array,n<0?0:n,length);}/**\n         * Creates a slice of `array` with `n` elements dropped from the end.\n         *\n         * @static\n         * @memberOf _\n         * @since 3.0.0\n         * @category Array\n         * @param {Array} array The array to query.\n         * @param {number} [n=1] The number of elements to drop.\n         * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n         * @returns {Array} Returns the slice of `array`.\n         * @example\n         *\n         * _.dropRight([1, 2, 3]);\n         * // => [1, 2]\n         *\n         * _.dropRight([1, 2, 3], 2);\n         * // => [1]\n         *\n         * _.dropRight([1, 2, 3], 5);\n         * // => []\n         *\n         * _.dropRight([1, 2, 3], 0);\n         * // => [1, 2, 3]\n         */function dropRight(array,n,guard){var length=array==null?0:array.length;if(!length){return[];}n=guard||n===undefined?1:toInteger(n);n=length-n;return baseSlice(array,0,n<0?0:n);}/**\n         * Creates a slice of `array` excluding elements dropped from the end.\n         * Elements are dropped until `predicate` returns falsey. The predicate is\n         * invoked with three arguments: (value, index, array).\n         *\n         * @static\n         * @memberOf _\n         * @since 3.0.0\n         * @category Array\n         * @param {Array} array The array to query.\n         * @param {Function} [predicate=_.identity] The function invoked per iteration.\n         * @returns {Array} Returns the slice of `array`.\n         * @example\n         *\n         * var users = [\n         *   { 'user': 'barney',  'active': true },\n         *   { 'user': 'fred',    'active': false },\n         *   { 'user': 'pebbles', 'active': false }\n         * ];\n         *\n         * _.dropRightWhile(users, function(o) { return !o.active; });\n         * // => objects for ['barney']\n         *\n         * // The `_.matches` iteratee shorthand.\n         * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });\n         * // => objects for ['barney', 'fred']\n         *\n         * // The `_.matchesProperty` iteratee shorthand.\n         * _.dropRightWhile(users, ['active', false]);\n         * // => objects for ['barney']\n         *\n         * // The `_.property` iteratee shorthand.\n         * _.dropRightWhile(users, 'active');\n         * // => objects for ['barney', 'fred', 'pebbles']\n         */function dropRightWhile(array,predicate){return array&&array.length?baseWhile(array,getIteratee(predicate,3),true,true):[];}/**\n         * Creates a slice of `array` excluding elements dropped from the beginning.\n         * Elements are dropped until `predicate` returns falsey. The predicate is\n         * invoked with three arguments: (value, index, array).\n         *\n         * @static\n         * @memberOf _\n         * @since 3.0.0\n         * @category Array\n         * @param {Array} array The array to query.\n         * @param {Function} [predicate=_.identity] The function invoked per iteration.\n         * @returns {Array} Returns the slice of `array`.\n         * @example\n         *\n         * var users = [\n         *   { 'user': 'barney',  'active': false },\n         *   { 'user': 'fred',    'active': false },\n         *   { 'user': 'pebbles', 'active': true }\n         * ];\n         *\n         * _.dropWhile(users, function(o) { return !o.active; });\n         * // => objects for ['pebbles']\n         *\n         * // The `_.matches` iteratee shorthand.\n         * _.dropWhile(users, { 'user': 'barney', 'active': false });\n         * // => objects for ['fred', 'pebbles']\n         *\n         * // The `_.matchesProperty` iteratee shorthand.\n         * _.dropWhile(users, ['active', false]);\n         * // => objects for ['pebbles']\n         *\n         * // The `_.property` iteratee shorthand.\n         * _.dropWhile(users, 'active');\n         * // => objects for ['barney', 'fred', 'pebbles']\n         */function dropWhile(array,predicate){return array&&array.length?baseWhile(array,getIteratee(predicate,3),true):[];}/**\n         * Fills elements of `array` with `value` from `start` up to, but not\n         * including, `end`.\n         *\n         * **Note:** This method mutates `array`.\n         *\n         * @static\n         * @memberOf _\n         * @since 3.2.0\n         * @category Array\n         * @param {Array} array The array to fill.\n         * @param {*} value The value to fill `array` with.\n         * @param {number} [start=0] The start position.\n         * @param {number} [end=array.length] The end position.\n         * @returns {Array} Returns `array`.\n         * @example\n         *\n         * var array = [1, 2, 3];\n         *\n         * _.fill(array, 'a');\n         * console.log(array);\n         * // => ['a', 'a', 'a']\n         *\n         * _.fill(Array(3), 2);\n         * // => [2, 2, 2]\n         *\n         * _.fill([4, 6, 8, 10], '*', 1, 3);\n         * // => [4, '*', '*', 10]\n         */function fill(array,value,start,end){var length=array==null?0:array.length;if(!length){return[];}if(start&&typeof start!=='number'&&isIterateeCall(array,value,start)){start=0;end=length;}return baseFill(array,value,start,end);}/**\n         * This method is like `_.find` except that it returns the index of the first\n         * element `predicate` returns truthy for instead of the element itself.\n         *\n         * @static\n         * @memberOf _\n         * @since 1.1.0\n         * @category Array\n         * @param {Array} array The array to inspect.\n         * @param {Function} [predicate=_.identity] The function invoked per iteration.\n         * @param {number} [fromIndex=0] The index to search from.\n         * @returns {number} Returns the index of the found element, else `-1`.\n         * @example\n         *\n         * var users = [\n         *   { 'user': 'barney',  'active': false },\n         *   { 'user': 'fred',    'active': false },\n         *   { 'user': 'pebbles', 'active': true }\n         * ];\n         *\n         * _.findIndex(users, function(o) { return o.user == 'barney'; });\n         * // => 0\n         *\n         * // The `_.matches` iteratee shorthand.\n         * _.findIndex(users, { 'user': 'fred', 'active': false });\n         * // => 1\n         *\n         * // The `_.matchesProperty` iteratee shorthand.\n         * _.findIndex(users, ['active', false]);\n         * // => 0\n         *\n         * // The `_.property` iteratee shorthand.\n         * _.findIndex(users, 'active');\n         * // => 2\n         */function findIndex(array,predicate,fromIndex){var length=array==null?0:array.length;if(!length){return-1;}var index=fromIndex==null?0:toInteger(fromIndex);if(index<0){index=nativeMax(length+index,0);}return baseFindIndex(array,getIteratee(predicate,3),index);}/**\n         * This method is like `_.findIndex` except that it iterates over elements\n         * of `collection` from right to left.\n         *\n         * @static\n         * @memberOf _\n         * @since 2.0.0\n         * @category Array\n         * @param {Array} array The array to inspect.\n         * @param {Function} [predicate=_.identity] The function invoked per iteration.\n         * @param {number} [fromIndex=array.length-1] The index to search from.\n         * @returns {number} Returns the index of the found element, else `-1`.\n         * @example\n         *\n         * var users = [\n         *   { 'user': 'barney',  'active': true },\n         *   { 'user': 'fred',    'active': false },\n         *   { 'user': 'pebbles', 'active': false }\n         * ];\n         *\n         * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });\n         * // => 2\n         *\n         * // The `_.matches` iteratee shorthand.\n         * _.findLastIndex(users, { 'user': 'barney', 'active': true });\n         * // => 0\n         *\n         * // The `_.matchesProperty` iteratee shorthand.\n         * _.findLastIndex(users, ['active', false]);\n         * // => 2\n         *\n         * // The `_.property` iteratee shorthand.\n         * _.findLastIndex(users, 'active');\n         * // => 0\n         */function findLastIndex(array,predicate,fromIndex){var length=array==null?0:array.length;if(!length){return-1;}var index=length-1;if(fromIndex!==undefined){index=toInteger(fromIndex);index=fromIndex<0?nativeMax(length+index,0):nativeMin(index,length-1);}return baseFindIndex(array,getIteratee(predicate,3),index,true);}/**\n         * Flattens `array` a single level deep.\n         *\n         * @static\n         * @memberOf _\n         * @since 0.1.0\n         * @category Array\n         * @param {Array} array The array to flatten.\n         * @returns {Array} Returns the new flattened array.\n         * @example\n         *\n         * _.flatten([1, [2, [3, [4]], 5]]);\n         * // => [1, 2, [3, [4]], 5]\n         */function flatten(array){var length=array==null?0:array.length;return length?baseFlatten(array,1):[];}/**\n         * Recursively flattens `array`.\n         *\n         * @static\n         * @memberOf _\n         * @since 3.0.0\n         * @category Array\n         * @param {Array} array The array to flatten.\n         * @returns {Array} Returns the new flattened array.\n         * @example\n         *\n         * _.flattenDeep([1, [2, [3, [4]], 5]]);\n         * // => [1, 2, 3, 4, 5]\n         */function flattenDeep(array){var length=array==null?0:array.length;return length?baseFlatten(array,INFINITY):[];}/**\n         * Recursively flatten `array` up to `depth` times.\n         *\n         * @static\n         * @memberOf _\n         * @since 4.4.0\n         * @category Array\n         * @param {Array} array The array to flatten.\n         * @param {number} [depth=1] The maximum recursion depth.\n         * @returns {Array} Returns the new flattened array.\n         * @example\n         *\n         * var array = [1, [2, [3, [4]], 5]];\n         *\n         * _.flattenDepth(array, 1);\n         * // => [1, 2, [3, [4]], 5]\n         *\n         * _.flattenDepth(array, 2);\n         * // => [1, 2, 3, [4], 5]\n         */function flattenDepth(array,depth){var length=array==null?0:array.length;if(!length){return[];}depth=depth===undefined?1:toInteger(depth);return baseFlatten(array,depth);}/**\n         * The inverse of `_.toPairs`; this method returns an object composed\n         * from key-value `pairs`.\n         *\n         * @static\n         * @memberOf _\n         * @since 4.0.0\n         * @category Array\n         * @param {Array} pairs The key-value pairs.\n         * @returns {Object} Returns the new object.\n         * @example\n         *\n         * _.fromPairs([['a', 1], ['b', 2]]);\n         * // => { 'a': 1, 'b': 2 }\n         */function fromPairs(pairs){var index=-1,length=pairs==null?0:pairs.length,result={};while(++index<length){var pair=pairs[index];result[pair[0]]=pair[1];}return result;}/**\n         * Gets the first element of `array`.\n         *\n         * @static\n         * @memberOf _\n         * @since 0.1.0\n         * @alias first\n         * @category Array\n         * @param {Array} array The array to query.\n         * @returns {*} Returns the first element of `array`.\n         * @example\n         *\n         * _.head([1, 2, 3]);\n         * // => 1\n         *\n         * _.head([]);\n         * // => undefined\n         */function head(array){return array&&array.length?array[0]:undefined;}/**\n         * Gets the index at which the first occurrence of `value` is found in `array`\n         * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n         * for equality comparisons. If `fromIndex` is negative, it's used as the\n         * offset from the end of `array`.\n         *\n         * @static\n         * @memberOf _\n         * @since 0.1.0\n         * @category Array\n         * @param {Array} array The array to inspect.\n         * @param {*} value The value to search for.\n         * @param {number} [fromIndex=0] The index to search from.\n         * @returns {number} Returns the index of the matched value, else `-1`.\n         * @example\n         *\n         * _.indexOf([1, 2, 1, 2], 2);\n         * // => 1\n         *\n         * // Search from the `fromIndex`.\n         * _.indexOf([1, 2, 1, 2], 2, 2);\n         * // => 3\n         */function indexOf(array,value,fromIndex){var length=array==null?0:array.length;if(!length){return-1;}var index=fromIndex==null?0:toInteger(fromIndex);if(index<0){index=nativeMax(length+index,0);}return baseIndexOf(array,value,index);}/**\n         * Gets all but the last element of `array`.\n         *\n         * @static\n         * @memberOf _\n         * @since 0.1.0\n         * @category Array\n         * @param {Array} array The array to query.\n         * @returns {Array} Returns the slice of `array`.\n         * @example\n         *\n         * _.initial([1, 2, 3]);\n         * // => [1, 2]\n         */function initial(array){var length=array==null?0:array.length;return length?baseSlice(array,0,-1):[];}/**\n         * Creates an array of unique values that are included in all given arrays\n         * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n         * for equality comparisons. The order and references of result values are\n         * determined by the first array.\n         *\n         * @static\n         * @memberOf _\n         * @since 0.1.0\n         * @category Array\n         * @param {...Array} [arrays] The arrays to inspect.\n         * @returns {Array} Returns the new array of intersecting values.\n         * @example\n         *\n         * _.intersection([2, 1], [2, 3]);\n         * // => [2]\n         */var intersection=baseRest(function(arrays){var mapped=arrayMap(arrays,castArrayLikeObject);return mapped.length&&mapped[0]===arrays[0]?baseIntersection(mapped):[];});/**\n       * This method is like `_.intersection` except that it accepts `iteratee`\n       * which is invoked for each element of each `arrays` to generate the criterion\n       * by which they're compared. The order and references of result values are\n       * determined by the first array. The iteratee is invoked with one argument:\n       * (value).\n       *\n       * @static\n       * @memberOf _\n       * @since 4.0.0\n       * @category Array\n       * @param {...Array} [arrays] The arrays to inspect.\n       * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n       * @returns {Array} Returns the new array of intersecting values.\n       * @example\n       *\n       * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n       * // => [2.1]\n       *\n       * // The `_.property` iteratee shorthand.\n       * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n       * // => [{ 'x': 1 }]\n       */var intersectionBy=baseRest(function(arrays){var iteratee=last(arrays),mapped=arrayMap(arrays,castArrayLikeObject);if(iteratee===last(mapped)){iteratee=undefined;}else{mapped.pop();}return mapped.length&&mapped[0]===arrays[0]?baseIntersection(mapped,getIteratee(iteratee,2)):[];});/**\n       * This method is like `_.intersection` except that it accepts `comparator`\n       * which is invoked to compare elements of `arrays`. The order and references\n       * of result values are determined by the first array. The comparator is\n       * invoked with two arguments: (arrVal, othVal).\n       *\n       * @static\n       * @memberOf _\n       * @since 4.0.0\n       * @category Array\n       * @param {...Array} [arrays] The arrays to inspect.\n       * @param {Function} [comparator] The comparator invoked per element.\n       * @returns {Array} Returns the new array of intersecting values.\n       * @example\n       *\n       * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n       * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n       *\n       * _.intersectionWith(objects, others, _.isEqual);\n       * // => [{ 'x': 1, 'y': 2 }]\n       */var intersectionWith=baseRest(function(arrays){var comparator=last(arrays),mapped=arrayMap(arrays,castArrayLikeObject);comparator=typeof comparator==='function'?comparator:undefined;if(comparator){mapped.pop();}return mapped.length&&mapped[0]===arrays[0]?baseIntersection(mapped,undefined,comparator):[];});/**\n       * Converts all elements in `array` into a string separated by `separator`.\n       *\n       * @static\n       * @memberOf _\n       * @since 4.0.0\n       * @category Array\n       * @param {Array} array The array to convert.\n       * @param {string} [separator=','] The element separator.\n       * @returns {string} Returns the joined string.\n       * @example\n       *\n       * _.join(['a', 'b', 'c'], '~');\n       * // => 'a~b~c'\n       */function join(array,separator){return array==null?'':nativeJoin.call(array,separator);}/**\n         * Gets the last element of `array`.\n         *\n         * @static\n         * @memberOf _\n         * @since 0.1.0\n         * @category Array\n         * @param {Array} array The array to query.\n         * @returns {*} Returns the last element of `array`.\n         * @example\n         *\n         * _.last([1, 2, 3]);\n         * // => 3\n         */function last(array){var length=array==null?0:array.length;return length?array[length-1]:undefined;}/**\n         * This method is like `_.indexOf` except that it iterates over elements of\n         * `array` from right to left.\n         *\n         * @static\n         * @memberOf _\n         * @since 0.1.0\n         * @category Array\n         * @param {Array} array The array to inspect.\n         * @param {*} value The value to search for.\n         * @param {number} [fromIndex=array.length-1] The index to search from.\n         * @returns {number} Returns the index of the matched value, else `-1`.\n         * @example\n         *\n         * _.lastIndexOf([1, 2, 1, 2], 2);\n         * // => 3\n         *\n         * // Search from the `fromIndex`.\n         * _.lastIndexOf([1, 2, 1, 2], 2, 2);\n         * // => 1\n         */function lastIndexOf(array,value,fromIndex){var length=array==null?0:array.length;if(!length){return-1;}var index=length;if(fromIndex!==undefined){index=toInteger(fromIndex);index=index<0?nativeMax(length+index,0):nativeMin(index,length-1);}return value===value?strictLastIndexOf(array,value,index):baseFindIndex(array,baseIsNaN,index,true);}/**\n         * Gets the element at index `n` of `array`. If `n` is negative, the nth\n         * element from the end is returned.\n         *\n         * @static\n         * @memberOf _\n         * @since 4.11.0\n         * @category Array\n         * @param {Array} array The array to query.\n         * @param {number} [n=0] The index of the element to return.\n         * @returns {*} Returns the nth element of `array`.\n         * @example\n         *\n         * var array = ['a', 'b', 'c', 'd'];\n         *\n         * _.nth(array, 1);\n         * // => 'b'\n         *\n         * _.nth(array, -2);\n         * // => 'c';\n         */function nth(array,n){return array&&array.length?baseNth(array,toInteger(n)):undefined;}/**\n         * Removes all given values from `array` using\n         * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n         * for equality comparisons.\n         *\n         * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`\n         * to remove elements from an array by predicate.\n         *\n         * @static\n         * @memberOf _\n         * @since 2.0.0\n         * @category Array\n         * @param {Array} array The array to modify.\n         * @param {...*} [values] The values to remove.\n         * @returns {Array} Returns `array`.\n         * @example\n         *\n         * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n         *\n         * _.pull(array, 'a', 'c');\n         * console.log(array);\n         * // => ['b', 'b']\n         */var pull=baseRest(pullAll);/**\n         * This method is like `_.pull` except that it accepts an array of values to remove.\n         *\n         * **Note:** Unlike `_.difference`, this method mutates `array`.\n         *\n         * @static\n         * @memberOf _\n         * @since 4.0.0\n         * @category Array\n         * @param {Array} array The array to modify.\n         * @param {Array} values The values to remove.\n         * @returns {Array} Returns `array`.\n         * @example\n         *\n         * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n         *\n         * _.pullAll(array, ['a', 'c']);\n         * console.log(array);\n         * // => ['b', 'b']\n         */function pullAll(array,values){return array&&array.length&&values&&values.length?basePullAll(array,values):array;}/**\n         * This method is like `_.pullAll` except that it accepts `iteratee` which is\n         * invoked for each element of `array` and `values` to generate the criterion\n         * by which they're compared. The iteratee is invoked with one argument: (value).\n         *\n         * **Note:** Unlike `_.differenceBy`, this method mutates `array`.\n         *\n         * @static\n         * @memberOf _\n         * @since 4.0.0\n         * @category Array\n         * @param {Array} array The array to modify.\n         * @param {Array} values The values to remove.\n         * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n         * @returns {Array} Returns `array`.\n         * @example\n         *\n         * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];\n         *\n         * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');\n         * console.log(array);\n         * // => [{ 'x': 2 }]\n         */function pullAllBy(array,values,iteratee){return array&&array.length&&values&&values.length?basePullAll(array,values,getIteratee(iteratee,2)):array;}/**\n         * This method is like `_.pullAll` except that it accepts `comparator` which\n         * is invoked to compare elements of `array` to `values`. The comparator is\n         * invoked with two arguments: (arrVal, othVal).\n         *\n         * **Note:** Unlike `_.differenceWith`, this method mutates `array`.\n         *\n         * @static\n         * @memberOf _\n         * @since 4.6.0\n         * @category Array\n         * @param {Array} array The array to modify.\n         * @param {Array} values The values to remove.\n         * @param {Function} [comparator] The comparator invoked per element.\n         * @returns {Array} Returns `array`.\n         * @example\n         *\n         * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];\n         *\n         * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);\n         * console.log(array);\n         * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]\n         */function pullAllWith(array,values,comparator){return array&&array.length&&values&&values.length?basePullAll(array,values,undefined,comparator):array;}/**\n         * Removes elements from `array` corresponding to `indexes` and returns an\n         * array of removed elements.\n         *\n         * **Note:** Unlike `_.at`, this method mutates `array`.\n         *\n         * @static\n         * @memberOf _\n         * @since 3.0.0\n         * @category Array\n         * @param {Array} array The array to modify.\n         * @param {...(number|number[])} [indexes] The indexes of elements to remove.\n         * @returns {Array} Returns the new array of removed elements.\n         * @example\n         *\n         * var array = ['a', 'b', 'c', 'd'];\n         * var pulled = _.pullAt(array, [1, 3]);\n         *\n         * console.log(array);\n         * // => ['a', 'c']\n         *\n         * console.log(pulled);\n         * // => ['b', 'd']\n         */var pullAt=flatRest(function(array,indexes){var length=array==null?0:array.length,result=baseAt(array,indexes);basePullAt(array,arrayMap(indexes,function(index){return isIndex(index,length)?+index:index;}).sort(compareAscending));return result;});/**\n       * Removes all elements from `array` that `predicate` returns truthy for\n       * and returns an array of the removed elements. The predicate is invoked\n       * with three arguments: (value, index, array).\n       *\n       * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`\n       * to pull elements from an array by value.\n       *\n       * @static\n       * @memberOf _\n       * @since 2.0.0\n       * @category Array\n       * @param {Array} array The array to modify.\n       * @param {Function} [predicate=_.identity] The function invoked per iteration.\n       * @returns {Array} Returns the new array of removed elements.\n       * @example\n       *\n       * var array = [1, 2, 3, 4];\n       * var evens = _.remove(array, function(n) {\n       *   return n % 2 == 0;\n       * });\n       *\n       * console.log(array);\n       * // => [1, 3]\n       *\n       * console.log(evens);\n       * // => [2, 4]\n       */function remove(array,predicate){var result=[];if(!(array&&array.length)){return result;}var index=-1,indexes=[],length=array.length;predicate=getIteratee(predicate,3);while(++index<length){var value=array[index];if(predicate(value,index,array)){result.push(value);indexes.push(index);}}basePullAt(array,indexes);return result;}/**\n         * Reverses `array` so that the first element becomes the last, the second\n         * element becomes the second to last, and so on.\n         *\n         * **Note:** This method mutates `array` and is based on\n         * [`Array#reverse`](https://mdn.io/Array/reverse).\n         *\n         * @static\n         * @memberOf _\n         * @since 4.0.0\n         * @category Array\n         * @param {Array} array The array to modify.\n         * @returns {Array} Returns `array`.\n         * @example\n         *\n         * var array = [1, 2, 3];\n         *\n         * _.reverse(array);\n         * // => [3, 2, 1]\n         *\n         * console.log(array);\n         * // => [3, 2, 1]\n         */function reverse(array){return array==null?array:nativeReverse.call(array);}/**\n         * Creates a slice of `array` from `start` up to, but not including, `end`.\n         *\n         * **Note:** This method is used instead of\n         * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are\n         * returned.\n         *\n         * @static\n         * @memberOf _\n         * @since 3.0.0\n         * @category Array\n         * @param {Array} array The array to slice.\n         * @param {number} [start=0] The start position.\n         * @param {number} [end=array.length] The end position.\n         * @returns {Array} Returns the slice of `array`.\n         */function slice(array,start,end){var length=array==null?0:array.length;if(!length){return[];}if(end&&typeof end!=='number'&&isIterateeCall(array,start,end)){start=0;end=length;}else{start=start==null?0:toInteger(start);end=end===undefined?length:toInteger(end);}return baseSlice(array,start,end);}/**\n         * Uses a binary search to determine the lowest index at which `value`\n         * should be inserted into `array` in order to maintain its sort order.\n         *\n         * @static\n         * @memberOf _\n         * @since 0.1.0\n         * @category Array\n         * @param {Array} array The sorted array to inspect.\n         * @param {*} value The value to evaluate.\n         * @returns {number} Returns the index at which `value` should be inserted\n         *  into `array`.\n         * @example\n         *\n         * _.sortedIndex([30, 50], 40);\n         * // => 1\n         */function sortedIndex(array,value){return baseSortedIndex(array,value);}/**\n         * This method is like `_.sortedIndex` except that it accepts `iteratee`\n         * which is invoked for `value` and each element of `array` to compute their\n         * sort ranking. The iteratee is invoked with one argument: (value).\n         *\n         * @static\n         * @memberOf _\n         * @since 4.0.0\n         * @category Array\n         * @param {Array} array The sorted array to inspect.\n         * @param {*} value The value to evaluate.\n         * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n         * @returns {number} Returns the index at which `value` should be inserted\n         *  into `array`.\n         * @example\n         *\n         * var objects = [{ 'x': 4 }, { 'x': 5 }];\n         *\n         * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n         * // => 0\n         *\n         * // The `_.property` iteratee shorthand.\n         * _.sortedIndexBy(objects, { 'x': 4 }, 'x');\n         * // => 0\n         */function sortedIndexBy(array,value,iteratee){return baseSortedIndexBy(array,value,getIteratee(iteratee,2));}/**\n         * This method is like `_.indexOf` except that it performs a binary\n         * search on a sorted `array`.\n         *\n         * @static\n         * @memberOf _\n         * @since 4.0.0\n         * @category Array\n         * @param {Array} array The array to inspect.\n         * @param {*} value The value to search for.\n         * @returns {number} Returns the index of the matched value, else `-1`.\n         * @example\n         *\n         * _.sortedIndexOf([4, 5, 5, 5, 6], 5);\n         * // => 1\n         */function sortedIndexOf(array,value){var length=array==null?0:array.length;if(length){var index=baseSortedIndex(array,value);if(index<length&&eq(array[index],value)){return index;}}return-1;}/**\n         * This method is like `_.sortedIndex` except that it returns the highest\n         * index at which `value` should be inserted into `array` in order to\n         * maintain its sort order.\n         *\n         * @static\n         * @memberOf _\n         * @since 3.0.0\n         * @category Array\n         * @param {Array} array The sorted array to inspect.\n         * @param {*} value The value to evaluate.\n         * @returns {number} Returns the index at which `value` should be inserted\n         *  into `array`.\n         * @example\n         *\n         * _.sortedLastIndex([4, 5, 5, 5, 6], 5);\n         * // => 4\n         */function sortedLastIndex(array,value){return baseSortedIndex(array,value,true);}/**\n         * This method is like `_.sortedLastIndex` except that it accepts `iteratee`\n         * which is invoked for `value` and each element of `array` to compute their\n         * sort ranking. The iteratee is invoked with one argument: (value).\n         *\n         * @static\n         * @memberOf _\n         * @since 4.0.0\n         * @category Array\n         * @param {Array} array The sorted array to inspect.\n         * @param {*} value The value to evaluate.\n         * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n         * @returns {number} Returns the index at which `value` should be inserted\n         *  into `array`.\n         * @example\n         *\n         * var objects = [{ 'x': 4 }, { 'x': 5 }];\n         *\n         * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n         * // => 1\n         *\n         * // The `_.property` iteratee shorthand.\n         * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');\n         * // => 1\n         */function sortedLastIndexBy(array,value,iteratee){return baseSortedIndexBy(array,value,getIteratee(iteratee,2),true);}/**\n         * This method is like `_.lastIndexOf` except that it performs a binary\n         * search on a sorted `array`.\n         *\n         * @static\n         * @memberOf _\n         * @since 4.0.0\n         * @category Array\n         * @param {Array} array The array to inspect.\n         * @param {*} value The value to search for.\n         * @returns {number} Returns the index of the matched value, else `-1`.\n         * @example\n         *\n         * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);\n         * // => 3\n         */function sortedLastIndexOf(array,value){var length=array==null?0:array.length;if(length){var index=baseSortedIndex(array,value,true)-1;if(eq(array[index],value)){return index;}}return-1;}/**\n         * This method is like `_.uniq` except that it's designed and optimized\n         * for sorted arrays.\n         *\n         * @static\n         * @memberOf _\n         * @since 4.0.0\n         * @category Array\n         * @param {Array} array The array to inspect.\n         * @returns {Array} Returns the new duplicate free array.\n         * @example\n         *\n         * _.sortedUniq([1, 1, 2]);\n         * // => [1, 2]\n         */function sortedUniq(array){return array&&array.length?baseSortedUniq(array):[];}/**\n         * This method is like `_.uniqBy` except that it's designed and optimized\n         * for sorted arrays.\n         *\n         * @static\n         * @memberOf _\n         * @since 4.0.0\n         * @category Array\n         * @param {Array} array The array to inspect.\n         * @param {Function} [iteratee] The iteratee invoked per element.\n         * @returns {Array} Returns the new duplicate free array.\n         * @example\n         *\n         * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);\n         * // => [1.1, 2.3]\n         */function sortedUniqBy(array,iteratee){return array&&array.length?baseSortedUniq(array,getIteratee(iteratee,2)):[];}/**\n         * Gets all but the first element of `array`.\n         *\n         * @static\n         * @memberOf _\n         * @since 4.0.0\n         * @category Array\n         * @param {Array} array The array to query.\n         * @returns {Array} Returns the slice of `array`.\n         * @example\n         *\n         * _.tail([1, 2, 3]);\n         * // => [2, 3]\n         */function tail(array){var length=array==null?0:array.length;return length?baseSlice(array,1,length):[];}/**\n         * Creates a slice of `array` with `n` elements taken from the beginning.\n         *\n         * @static\n         * @memberOf _\n         * @since 0.1.0\n         * @category Array\n         * @param {Array} array The array to query.\n         * @param {number} [n=1] The number of elements to take.\n         * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n         * @returns {Array} Returns the slice of `array`.\n         * @example\n         *\n         * _.take([1, 2, 3]);\n         * // => [1]\n         *\n         * _.take([1, 2, 3], 2);\n         * // => [1, 2]\n         *\n         * _.take([1, 2, 3], 5);\n         * // => [1, 2, 3]\n         *\n         * _.take([1, 2, 3], 0);\n         * // => []\n         */function take(array,n,guard){if(!(array&&array.length)){return[];}n=guard||n===undefined?1:toInteger(n);return baseSlice(array,0,n<0?0:n);}/**\n         * Creates a slice of `array` with `n` elements taken from the end.\n         *\n         * @static\n         * @memberOf _\n         * @since 3.0.0\n         * @category Array\n         * @param {Array} array The array to query.\n         * @param {number} [n=1] The number of elements to take.\n         * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n         * @returns {Array} Returns the slice of `array`.\n         * @example\n         *\n         * _.takeRight([1, 2, 3]);\n         * // => [3]\n         *\n         * _.takeRight([1, 2, 3], 2);\n         * // => [2, 3]\n         *\n         * _.takeRight([1, 2, 3], 5);\n         * // => [1, 2, 3]\n         *\n         * _.takeRight([1, 2, 3], 0);\n         * // => []\n         */function takeRight(array,n,guard){var length=array==null?0:array.length;if(!length){return[];}n=guard||n===undefined?1:toInteger(n);n=length-n;return baseSlice(array,n<0?0:n,length);}/**\n         * Creates a slice of `array` with elements taken from the end. Elements are\n         * taken until `predicate` returns falsey. The predicate is invoked with\n         * three arguments: (value, index, array).\n         *\n         * @static\n         * @memberOf _\n         * @since 3.0.0\n         * @category Array\n         * @param {Array} array The array to query.\n         * @param {Function} [predicate=_.identity] The function invoked per iteration.\n         * @returns {Array} Returns the slice of `array`.\n         * @example\n         *\n         * var users = [\n         *   { 'user': 'barney',  'active': true },\n         *   { 'user': 'fred',    'active': false },\n         *   { 'user': 'pebbles', 'active': false }\n         * ];\n         *\n         * _.takeRightWhile(users, function(o) { return !o.active; });\n         * // => objects for ['fred', 'pebbles']\n         *\n         * // The `_.matches` iteratee shorthand.\n         * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });\n         * // => objects for ['pebbles']\n         *\n         * // The `_.matchesProperty` iteratee shorthand.\n         * _.takeRightWhile(users, ['active', false]);\n         * // => objects for ['fred', 'pebbles']\n         *\n         * // The `_.property` iteratee shorthand.\n         * _.takeRightWhile(users, 'active');\n         * // => []\n         */function takeRightWhile(array,predicate){return array&&array.length?baseWhile(array,getIteratee(predicate,3),false,true):[];}/**\n         * Creates a slice of `array` with elements taken from the beginning. Elements\n         * are taken until `predicate` returns falsey. The predicate is invoked with\n         * three arguments: (value, index, array).\n         *\n         * @static\n         * @memberOf _\n         * @since 3.0.0\n         * @category Array\n         * @param {Array} array The array to query.\n         * @param {Function} [predicate=_.identity] The function invoked per iteration.\n         * @returns {Array} Returns the slice of `array`.\n         * @example\n         *\n         * var users = [\n         *   { 'user': 'barney',  'active': false },\n         *   { 'user': 'fred',    'active': false },\n         *   { 'user': 'pebbles', 'active': true }\n         * ];\n         *\n         * _.takeWhile(users, function(o) { return !o.active; });\n         * // => objects for ['barney', 'fred']\n         *\n         * // The `_.matches` iteratee shorthand.\n         * _.takeWhile(users, { 'user': 'barney', 'active': false });\n         * // => objects for ['barney']\n         *\n         * // The `_.matchesProperty` iteratee shorthand.\n         * _.takeWhile(users, ['active', false]);\n         * // => objects for ['barney', 'fred']\n         *\n         * // The `_.property` iteratee shorthand.\n         * _.takeWhile(users, 'active');\n         * // => []\n         */function takeWhile(array,predicate){return array&&array.length?baseWhile(array,getIteratee(predicate,3)):[];}/**\n         * Creates an array of unique values, in order, from all given arrays using\n         * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n         * for equality comparisons.\n         *\n         * @static\n         * @memberOf _\n         * @since 0.1.0\n         * @category Array\n         * @param {...Array} [arrays] The arrays to inspect.\n         * @returns {Array} Returns the new array of combined values.\n         * @example\n         *\n         * _.union([2], [1, 2]);\n         * // => [2, 1]\n         */var union=baseRest(function(arrays){return baseUniq(baseFlatten(arrays,1,isArrayLikeObject,true));});/**\n       * This method is like `_.union` except that it accepts `iteratee` which is\n       * invoked for each element of each `arrays` to generate the criterion by\n       * which uniqueness is computed. Result values are chosen from the first\n       * array in which the value occurs. The iteratee is invoked with one argument:\n       * (value).\n       *\n       * @static\n       * @memberOf _\n       * @since 4.0.0\n       * @category Array\n       * @param {...Array} [arrays] The arrays to inspect.\n       * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n       * @returns {Array} Returns the new array of combined values.\n       * @example\n       *\n       * _.unionBy([2.1], [1.2, 2.3], Math.floor);\n       * // => [2.1, 1.2]\n       *\n       * // The `_.property` iteratee shorthand.\n       * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n       * // => [{ 'x': 1 }, { 'x': 2 }]\n       */var unionBy=baseRest(function(arrays){var iteratee=last(arrays);if(isArrayLikeObject(iteratee)){iteratee=undefined;}return baseUniq(baseFlatten(arrays,1,isArrayLikeObject,true),getIteratee(iteratee,2));});/**\n       * This method is like `_.union` except that it accepts `comparator` which\n       * is invoked to compare elements of `arrays`. Result values are chosen from\n       * the first array in which the value occurs. The comparator is invoked\n       * with two arguments: (arrVal, othVal).\n       *\n       * @static\n       * @memberOf _\n       * @since 4.0.0\n       * @category Array\n       * @param {...Array} [arrays] The arrays to inspect.\n       * @param {Function} [comparator] The comparator invoked per element.\n       * @returns {Array} Returns the new array of combined values.\n       * @example\n       *\n       * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n       * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n       *\n       * _.unionWith(objects, others, _.isEqual);\n       * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n       */var unionWith=baseRest(function(arrays){var comparator=last(arrays);comparator=typeof comparator==='function'?comparator:undefined;return baseUniq(baseFlatten(arrays,1,isArrayLikeObject,true),undefined,comparator);});/**\n       * Creates a duplicate-free version of an array, using\n       * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n       * for equality comparisons, in which only the first occurrence of each element\n       * is kept. The order of result values is determined by the order they occur\n       * in the array.\n       *\n       * @static\n       * @memberOf _\n       * @since 0.1.0\n       * @category Array\n       * @param {Array} array The array to inspect.\n       * @returns {Array} Returns the new duplicate free array.\n       * @example\n       *\n       * _.uniq([2, 1, 2]);\n       * // => [2, 1]\n       */function uniq(array){return array&&array.length?baseUniq(array):[];}/**\n         * This method is like `_.uniq` except that it accepts `iteratee` which is\n         * invoked for each element in `array` to generate the criterion by which\n         * uniqueness is computed. The order of result values is determined by the\n         * order they occur in the array. The iteratee is invoked with one argument:\n         * (value).\n         *\n         * @static\n         * @memberOf _\n         * @since 4.0.0\n         * @category Array\n         * @param {Array} array The array to inspect.\n         * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n         * @returns {Array} Returns the new duplicate free array.\n         * @example\n         *\n         * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n         * // => [2.1, 1.2]\n         *\n         * // The `_.property` iteratee shorthand.\n         * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n         * // => [{ 'x': 1 }, { 'x': 2 }]\n         */function uniqBy(array,iteratee){return array&&array.length?baseUniq(array,getIteratee(iteratee,2)):[];}/**\n         * This method is like `_.uniq` except that it accepts `comparator` which\n         * is invoked to compare elements of `array`. The order of result values is\n         * determined by the order they occur in the array.The comparator is invoked\n         * with two arguments: (arrVal, othVal).\n         *\n         * @static\n         * @memberOf _\n         * @since 4.0.0\n         * @category Array\n         * @param {Array} array The array to inspect.\n         * @param {Function} [comparator] The comparator invoked per element.\n         * @returns {Array} Returns the new duplicate free array.\n         * @example\n         *\n         * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];\n         *\n         * _.uniqWith(objects, _.isEqual);\n         * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]\n         */function uniqWith(array,comparator){comparator=typeof comparator==='function'?comparator:undefined;return array&&array.length?baseUniq(array,undefined,comparator):[];}/**\n         * This method is like `_.zip` except that it accepts an array of grouped\n         * elements and creates an array regrouping the elements to their pre-zip\n         * configuration.\n         *\n         * @static\n         * @memberOf _\n         * @since 1.2.0\n         * @category Array\n         * @param {Array} array The array of grouped elements to process.\n         * @returns {Array} Returns the new array of regrouped elements.\n         * @example\n         *\n         * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);\n         * // => [['a', 1, true], ['b', 2, false]]\n         *\n         * _.unzip(zipped);\n         * // => [['a', 'b'], [1, 2], [true, false]]\n         */function unzip(array){if(!(array&&array.length)){return[];}var length=0;array=arrayFilter(array,function(group){if(isArrayLikeObject(group)){length=nativeMax(group.length,length);return true;}});return baseTimes(length,function(index){return arrayMap(array,baseProperty(index));});}/**\n         * This method is like `_.unzip` except that it accepts `iteratee` to specify\n         * how regrouped values should be combined. The iteratee is invoked with the\n         * elements of each group: (...group).\n         *\n         * @static\n         * @memberOf _\n         * @since 3.8.0\n         * @category Array\n         * @param {Array} array The array of grouped elements to process.\n         * @param {Function} [iteratee=_.identity] The function to combine\n         *  regrouped values.\n         * @returns {Array} Returns the new array of regrouped elements.\n         * @example\n         *\n         * var zipped = _.zip([1, 2], [10, 20], [100, 200]);\n         * // => [[1, 10, 100], [2, 20, 200]]\n         *\n         * _.unzipWith(zipped, _.add);\n         * // => [3, 30, 300]\n         */function unzipWith(array,iteratee){if(!(array&&array.length)){return[];}var result=unzip(array);if(iteratee==null){return result;}return arrayMap(result,function(group){return apply(iteratee,undefined,group);});}/**\n         * Creates an array excluding all given values using\n         * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n         * for equality comparisons.\n         *\n         * **Note:** Unlike `_.pull`, this method returns a new array.\n         *\n         * @static\n         * @memberOf _\n         * @since 0.1.0\n         * @category Array\n         * @param {Array} array The array to inspect.\n         * @param {...*} [values] The values to exclude.\n         * @returns {Array} Returns the new array of filtered values.\n         * @see _.difference, _.xor\n         * @example\n         *\n         * _.without([2, 1, 2, 3], 1, 2);\n         * // => [3]\n         */var without=baseRest(function(array,values){return isArrayLikeObject(array)?baseDifference(array,values):[];});/**\n       * Creates an array of unique values that is the\n       * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)\n       * of the given arrays. The order of result values is determined by the order\n       * they occur in the arrays.\n       *\n       * @static\n       * @memberOf _\n       * @since 2.4.0\n       * @category Array\n       * @param {...Array} [arrays] The arrays to inspect.\n       * @returns {Array} Returns the new array of filtered values.\n       * @see _.difference, _.without\n       * @example\n       *\n       * _.xor([2, 1], [2, 3]);\n       * // => [1, 3]\n       */var xor=baseRest(function(arrays){return baseXor(arrayFilter(arrays,isArrayLikeObject));});/**\n       * This method is like `_.xor` except that it accepts `iteratee` which is\n       * invoked for each element of each `arrays` to generate the criterion by\n       * which by which they're compared. The order of result values is determined\n       * by the order they occur in the arrays. The iteratee is invoked with one\n       * argument: (value).\n       *\n       * @static\n       * @memberOf _\n       * @since 4.0.0\n       * @category Array\n       * @param {...Array} [arrays] The arrays to inspect.\n       * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n       * @returns {Array} Returns the new array of filtered values.\n       * @example\n       *\n       * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n       * // => [1.2, 3.4]\n       *\n       * // The `_.property` iteratee shorthand.\n       * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n       * // => [{ 'x': 2 }]\n       */var xorBy=baseRest(function(arrays){var iteratee=last(arrays);if(isArrayLikeObject(iteratee)){iteratee=undefined;}return baseXor(arrayFilter(arrays,isArrayLikeObject),getIteratee(iteratee,2));});/**\n       * This method is like `_.xor` except that it accepts `comparator` which is\n       * invoked to compare elements of `arrays`. The order of result values is\n       * determined by the order they occur in the arrays. The comparator is invoked\n       * with two arguments: (arrVal, othVal).\n       *\n       * @static\n       * @memberOf _\n       * @since 4.0.0\n       * @category Array\n       * @param {...Array} [arrays] The arrays to inspect.\n       * @param {Function} [comparator] The comparator invoked per element.\n       * @returns {Array} Returns the new array of filtered values.\n       * @example\n       *\n       * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n       * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n       *\n       * _.xorWith(objects, others, _.isEqual);\n       * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n       */var xorWith=baseRest(function(arrays){var comparator=last(arrays);comparator=typeof comparator==='function'?comparator:undefined;return baseXor(arrayFilter(arrays,isArrayLikeObject),undefined,comparator);});/**\n       * Creates an array of grouped elements, the first of which contains the\n       * first elements of the given arrays, the second of which contains the\n       * second elements of the given arrays, and so on.\n       *\n       * @static\n       * @memberOf _\n       * @since 0.1.0\n       * @category Array\n       * @param {...Array} [arrays] The arrays to process.\n       * @returns {Array} Returns the new array of grouped elements.\n       * @example\n       *\n       * _.zip(['a', 'b'], [1, 2], [true, false]);\n       * // => [['a', 1, true], ['b', 2, false]]\n       */var zip=baseRest(unzip);/**\n         * This method is like `_.fromPairs` except that it accepts two arrays,\n         * one of property identifiers and one of corresponding values.\n         *\n         * @static\n         * @memberOf _\n         * @since 0.4.0\n         * @category Array\n         * @param {Array} [props=[]] The property identifiers.\n         * @param {Array} [values=[]] The property values.\n         * @returns {Object} Returns the new object.\n         * @example\n         *\n         * _.zipObject(['a', 'b'], [1, 2]);\n         * // => { 'a': 1, 'b': 2 }\n         */function zipObject(props,values){return baseZipObject(props||[],values||[],assignValue);}/**\n         * This method is like `_.zipObject` except that it supports property paths.\n         *\n         * @static\n         * @memberOf _\n         * @since 4.1.0\n         * @category Array\n         * @param {Array} [props=[]] The property identifiers.\n         * @param {Array} [values=[]] The property values.\n         * @returns {Object} Returns the new object.\n         * @example\n         *\n         * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);\n         * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }\n         */function zipObjectDeep(props,values){return baseZipObject(props||[],values||[],baseSet);}/**\n         * This method is like `_.zip` except that it accepts `iteratee` to specify\n         * how grouped values should be combined. The iteratee is invoked with the\n         * elements of each group: (...group).\n         *\n         * @static\n         * @memberOf _\n         * @since 3.8.0\n         * @category Array\n         * @param {...Array} [arrays] The arrays to process.\n         * @param {Function} [iteratee=_.identity] The function to combine\n         *  grouped values.\n         * @returns {Array} Returns the new array of grouped elements.\n         * @example\n         *\n         * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {\n         *   return a + b + c;\n         * });\n         * // => [111, 222]\n         */var zipWith=baseRest(function(arrays){var length=arrays.length,iteratee=length>1?arrays[length-1]:undefined;iteratee=typeof iteratee==='function'?(arrays.pop(),iteratee):undefined;return unzipWith(arrays,iteratee);});/* ------------------------------------------------------------------------*//**\n       * Creates a `lodash` wrapper instance that wraps `value` with explicit method\n       * chain sequences enabled. The result of such sequences must be unwrapped\n       * with `_#value`.\n       *\n       * @static\n       * @memberOf _\n       * @since 1.3.0\n       * @category Seq\n       * @param {*} value The value to wrap.\n       * @returns {Object} Returns the new `lodash` wrapper instance.\n       * @example\n       *\n       * var users = [\n       *   { 'user': 'barney',  'age': 36 },\n       *   { 'user': 'fred',    'age': 40 },\n       *   { 'user': 'pebbles', 'age': 1 }\n       * ];\n       *\n       * var youngest = _\n       *   .chain(users)\n       *   .sortBy('age')\n       *   .map(function(o) {\n       *     return o.user + ' is ' + o.age;\n       *   })\n       *   .head()\n       *   .value();\n       * // => 'pebbles is 1'\n       */function chain(value){var result=lodash(value);result.__chain__=true;return result;}/**\n         * This method invokes `interceptor` and returns `value`. The interceptor\n         * is invoked with one argument; (value). The purpose of this method is to\n         * \"tap into\" a method chain sequence in order to modify intermediate results.\n         *\n         * @static\n         * @memberOf _\n         * @since 0.1.0\n         * @category Seq\n         * @param {*} value The value to provide to `interceptor`.\n         * @param {Function} interceptor The function to invoke.\n         * @returns {*} Returns `value`.\n         * @example\n         *\n         * _([1, 2, 3])\n         *  .tap(function(array) {\n         *    // Mutate input array.\n         *    array.pop();\n         *  })\n         *  .reverse()\n         *  .value();\n         * // => [2, 1]\n         */function tap(value,interceptor){interceptor(value);return value;}/**\n         * This method is like `_.tap` except that it returns the result of `interceptor`.\n         * The purpose of this method is to \"pass thru\" values replacing intermediate\n         * results in a method chain sequence.\n         *\n         * @static\n         * @memberOf _\n         * @since 3.0.0\n         * @category Seq\n         * @param {*} value The value to provide to `interceptor`.\n         * @param {Function} interceptor The function to invoke.\n         * @returns {*} Returns the result of `interceptor`.\n         * @example\n         *\n         * _('  abc  ')\n         *  .chain()\n         *  .trim()\n         *  .thru(function(value) {\n         *    return [value];\n         *  })\n         *  .value();\n         * // => ['abc']\n         */function thru(value,interceptor){return interceptor(value);}/**\n         * This method is the wrapper version of `_.at`.\n         *\n         * @name at\n         * @memberOf _\n         * @since 1.0.0\n         * @category Seq\n         * @param {...(string|string[])} [paths] The property paths to pick.\n         * @returns {Object} Returns the new `lodash` wrapper instance.\n         * @example\n         *\n         * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n         *\n         * _(object).at(['a[0].b.c', 'a[1]']).value();\n         * // => [3, 4]\n         */var wrapperAt=flatRest(function(paths){var length=paths.length,start=length?paths[0]:0,value=this.__wrapped__,interceptor=function interceptor(object){return baseAt(object,paths);};if(length>1||this.__actions__.length||!(value instanceof LazyWrapper)||!isIndex(start)){return this.thru(interceptor);}value=value.slice(start,+start+(length?1:0));value.__actions__.push({func:thru,args:[interceptor],thisArg:undefined});return new LodashWrapper(value,this.__chain__).thru(function(array){if(length&&!array.length){array.push(undefined);}return array;});});/**\n       * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.\n       *\n       * @name chain\n       * @memberOf _\n       * @since 0.1.0\n       * @category Seq\n       * @returns {Object} Returns the new `lodash` wrapper instance.\n       * @example\n       *\n       * var users = [\n       *   { 'user': 'barney', 'age': 36 },\n       *   { 'user': 'fred',   'age': 40 }\n       * ];\n       *\n       * // A sequence without explicit chaining.\n       * _(users).head();\n       * // => { 'user': 'barney', 'age': 36 }\n       *\n       * // A sequence with explicit chaining.\n       * _(users)\n       *   .chain()\n       *   .head()\n       *   .pick('user')\n       *   .value();\n       * // => { 'user': 'barney' }\n       */function wrapperChain(){return chain(this);}/**\n         * Executes the chain sequence and returns the wrapped result.\n         *\n         * @name commit\n         * @memberOf _\n         * @since 3.2.0\n         * @category Seq\n         * @returns {Object} Returns the new `lodash` wrapper instance.\n         * @example\n         *\n         * var array = [1, 2];\n         * var wrapped = _(array).push(3);\n         *\n         * console.log(array);\n         * // => [1, 2]\n         *\n         * wrapped = wrapped.commit();\n         * console.log(array);\n         * // => [1, 2, 3]\n         *\n         * wrapped.last();\n         * // => 3\n         *\n         * console.log(array);\n         * // => [1, 2, 3]\n         */function wrapperCommit(){return new LodashWrapper(this.value(),this.__chain__);}/**\n         * Gets the next value on a wrapped object following the\n         * [iterator protocol](https://mdn.io/iteration_protocols#iterator).\n         *\n         * @name next\n         * @memberOf _\n         * @since 4.0.0\n         * @category Seq\n         * @returns {Object} Returns the next iterator value.\n         * @example\n         *\n         * var wrapped = _([1, 2]);\n         *\n         * wrapped.next();\n         * // => { 'done': false, 'value': 1 }\n         *\n         * wrapped.next();\n         * // => { 'done': false, 'value': 2 }\n         *\n         * wrapped.next();\n         * // => { 'done': true, 'value': undefined }\n         */function wrapperNext(){if(this.__values__===undefined){this.__values__=toArray(this.value());}var done=this.__index__>=this.__values__.length,value=done?undefined:this.__values__[this.__index__++];return{done:done,value:value};}/**\n         * Enables the wrapper to be iterable.\n         *\n         * @name Symbol.iterator\n         * @memberOf _\n         * @since 4.0.0\n         * @category Seq\n         * @returns {Object} Returns the wrapper object.\n         * @example\n         *\n         * var wrapped = _([1, 2]);\n         *\n         * wrapped[Symbol.iterator]() === wrapped;\n         * // => true\n         *\n         * Array.from(wrapped);\n         * // => [1, 2]\n         */function wrapperToIterator(){return this;}/**\n         * Creates a clone of the chain sequence planting `value` as the wrapped value.\n         *\n         * @name plant\n         * @memberOf _\n         * @since 3.2.0\n         * @category Seq\n         * @param {*} value The value to plant.\n         * @returns {Object} Returns the new `lodash` wrapper instance.\n         * @example\n         *\n         * function square(n) {\n         *   return n * n;\n         * }\n         *\n         * var wrapped = _([1, 2]).map(square);\n         * var other = wrapped.plant([3, 4]);\n         *\n         * other.value();\n         * // => [9, 16]\n         *\n         * wrapped.value();\n         * // => [1, 4]\n         */function wrapperPlant(value){var result,parent=this;while(parent instanceof baseLodash){var clone=wrapperClone(parent);clone.__index__=0;clone.__values__=undefined;if(result){previous.__wrapped__=clone;}else{result=clone;}var previous=clone;parent=parent.__wrapped__;}previous.__wrapped__=value;return result;}/**\n         * This method is the wrapper version of `_.reverse`.\n         *\n         * **Note:** This method mutates the wrapped array.\n         *\n         * @name reverse\n         * @memberOf _\n         * @since 0.1.0\n         * @category Seq\n         * @returns {Object} Returns the new `lodash` wrapper instance.\n         * @example\n         *\n         * var array = [1, 2, 3];\n         *\n         * _(array).reverse().value()\n         * // => [3, 2, 1]\n         *\n         * console.log(array);\n         * // => [3, 2, 1]\n         */function wrapperReverse(){var value=this.__wrapped__;if(value instanceof LazyWrapper){var wrapped=value;if(this.__actions__.length){wrapped=new LazyWrapper(this);}wrapped=wrapped.reverse();wrapped.__actions__.push({func:thru,args:[reverse],thisArg:undefined});return new LodashWrapper(wrapped,this.__chain__);}return this.thru(reverse);}/**\n         * Executes the chain sequence to resolve the unwrapped value.\n         *\n         * @name value\n         * @memberOf _\n         * @since 0.1.0\n         * @alias toJSON, valueOf\n         * @category Seq\n         * @returns {*} Returns the resolved unwrapped value.\n         * @example\n         *\n         * _([1, 2, 3]).value();\n         * // => [1, 2, 3]\n         */function wrapperValue(){return baseWrapperValue(this.__wrapped__,this.__actions__);}/* ------------------------------------------------------------------------*//**\n         * Creates an object composed of keys generated from the results of running\n         * each element of `collection` thru `iteratee`. The corresponding value of\n         * each key is the number of times the key was returned by `iteratee`. The\n         * iteratee is invoked with one argument: (value).\n         *\n         * @static\n         * @memberOf _\n         * @since 0.5.0\n         * @category Collection\n         * @param {Array|Object} collection The collection to iterate over.\n         * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n         * @returns {Object} Returns the composed aggregate object.\n         * @example\n         *\n         * _.countBy([6.1, 4.2, 6.3], Math.floor);\n         * // => { '4': 1, '6': 2 }\n         *\n         * // The `_.property` iteratee shorthand.\n         * _.countBy(['one', 'two', 'three'], 'length');\n         * // => { '3': 2, '5': 1 }\n         */var countBy=createAggregator(function(result,value,key){if(hasOwnProperty.call(result,key)){++result[key];}else{baseAssignValue(result,key,1);}});/**\n       * Checks if `predicate` returns truthy for **all** elements of `collection`.\n       * Iteration is stopped once `predicate` returns falsey. The predicate is\n       * invoked with three arguments: (value, index|key, collection).\n       *\n       * **Note:** This method returns `true` for\n       * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because\n       * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of\n       * elements of empty collections.\n       *\n       * @static\n       * @memberOf _\n       * @since 0.1.0\n       * @category Collection\n       * @param {Array|Object} collection The collection to iterate over.\n       * @param {Function} [predicate=_.identity] The function invoked per iteration.\n       * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n       * @returns {boolean} Returns `true` if all elements pass the predicate check,\n       *  else `false`.\n       * @example\n       *\n       * _.every([true, 1, null, 'yes'], Boolean);\n       * // => false\n       *\n       * var users = [\n       *   { 'user': 'barney', 'age': 36, 'active': false },\n       *   { 'user': 'fred',   'age': 40, 'active': false }\n       * ];\n       *\n       * // The `_.matches` iteratee shorthand.\n       * _.every(users, { 'user': 'barney', 'active': false });\n       * // => false\n       *\n       * // The `_.matchesProperty` iteratee shorthand.\n       * _.every(users, ['active', false]);\n       * // => true\n       *\n       * // The `_.property` iteratee shorthand.\n       * _.every(users, 'active');\n       * // => false\n       */function every(collection,predicate,guard){var func=isArray(collection)?arrayEvery:baseEvery;if(guard&&isIterateeCall(collection,predicate,guard)){predicate=undefined;}return func(collection,getIteratee(predicate,3));}/**\n         * Iterates over elements of `collection`, returning an array of all elements\n         * `predicate` returns truthy for. The predicate is invoked with three\n         * arguments: (value, index|key, collection).\n         *\n         * **Note:** Unlike `_.remove`, this method returns a new array.\n         *\n         * @static\n         * @memberOf _\n         * @since 0.1.0\n         * @category Collection\n         * @param {Array|Object} collection The collection to iterate over.\n         * @param {Function} [predicate=_.identity] The function invoked per iteration.\n         * @returns {Array} Returns the new filtered array.\n         * @see _.reject\n         * @example\n         *\n         * var users = [\n         *   { 'user': 'barney', 'age': 36, 'active': true },\n         *   { 'user': 'fred',   'age': 40, 'active': false }\n         * ];\n         *\n         * _.filter(users, function(o) { return !o.active; });\n         * // => objects for ['fred']\n         *\n         * // The `_.matches` iteratee shorthand.\n         * _.filter(users, { 'age': 36, 'active': true });\n         * // => objects for ['barney']\n         *\n         * // The `_.matchesProperty` iteratee shorthand.\n         * _.filter(users, ['active', false]);\n         * // => objects for ['fred']\n         *\n         * // The `_.property` iteratee shorthand.\n         * _.filter(users, 'active');\n         * // => objects for ['barney']\n         */function filter(collection,predicate){var func=isArray(collection)?arrayFilter:baseFilter;return func(collection,getIteratee(predicate,3));}/**\n         * Iterates over elements of `collection`, returning the first element\n         * `predicate` returns truthy for. The predicate is invoked with three\n         * arguments: (value, index|key, collection).\n         *\n         * @static\n         * @memberOf _\n         * @since 0.1.0\n         * @category Collection\n         * @param {Array|Object} collection The collection to inspect.\n         * @param {Function} [predicate=_.identity] The function invoked per iteration.\n         * @param {number} [fromIndex=0] The index to search from.\n         * @returns {*} Returns the matched element, else `undefined`.\n         * @example\n         *\n         * var users = [\n         *   { 'user': 'barney',  'age': 36, 'active': true },\n         *   { 'user': 'fred',    'age': 40, 'active': false },\n         *   { 'user': 'pebbles', 'age': 1,  'active': true }\n         * ];\n         *\n         * _.find(users, function(o) { return o.age < 40; });\n         * // => object for 'barney'\n         *\n         * // The `_.matches` iteratee shorthand.\n         * _.find(users, { 'age': 1, 'active': true });\n         * // => object for 'pebbles'\n         *\n         * // The `_.matchesProperty` iteratee shorthand.\n         * _.find(users, ['active', false]);\n         * // => object for 'fred'\n         *\n         * // The `_.property` iteratee shorthand.\n         * _.find(users, 'active');\n         * // => object for 'barney'\n         */var find=createFind(findIndex);/**\n         * This method is like `_.find` except that it iterates over elements of\n         * `collection` from right to left.\n         *\n         * @static\n         * @memberOf _\n         * @since 2.0.0\n         * @category Collection\n         * @param {Array|Object} collection The collection to inspect.\n         * @param {Function} [predicate=_.identity] The function invoked per iteration.\n         * @param {number} [fromIndex=collection.length-1] The index to search from.\n         * @returns {*} Returns the matched element, else `undefined`.\n         * @example\n         *\n         * _.findLast([1, 2, 3, 4], function(n) {\n         *   return n % 2 == 1;\n         * });\n         * // => 3\n         */var findLast=createFind(findLastIndex);/**\n         * Creates a flattened array of values by running each element in `collection`\n         * thru `iteratee` and flattening the mapped results. The iteratee is invoked\n         * with three arguments: (value, index|key, collection).\n         *\n         * @static\n         * @memberOf _\n         * @since 4.0.0\n         * @category Collection\n         * @param {Array|Object} collection The collection to iterate over.\n         * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n         * @returns {Array} Returns the new flattened array.\n         * @example\n         *\n         * function duplicate(n) {\n         *   return [n, n];\n         * }\n         *\n         * _.flatMap([1, 2], duplicate);\n         * // => [1, 1, 2, 2]\n         */function flatMap(collection,iteratee){return baseFlatten(map(collection,iteratee),1);}/**\n         * This method is like `_.flatMap` except that it recursively flattens the\n         * mapped results.\n         *\n         * @static\n         * @memberOf _\n         * @since 4.7.0\n         * @category Collection\n         * @param {Array|Object} collection The collection to iterate over.\n         * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n         * @returns {Array} Returns the new flattened array.\n         * @example\n         *\n         * function duplicate(n) {\n         *   return [[[n, n]]];\n         * }\n         *\n         * _.flatMapDeep([1, 2], duplicate);\n         * // => [1, 1, 2, 2]\n         */function flatMapDeep(collection,iteratee){return baseFlatten(map(collection,iteratee),INFINITY);}/**\n         * This method is like `_.flatMap` except that it recursively flattens the\n         * mapped results up to `depth` times.\n         *\n         * @static\n         * @memberOf _\n         * @since 4.7.0\n         * @category Collection\n         * @param {Array|Object} collection The collection to iterate over.\n         * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n         * @param {number} [depth=1] The maximum recursion depth.\n         * @returns {Array} Returns the new flattened array.\n         * @example\n         *\n         * function duplicate(n) {\n         *   return [[[n, n]]];\n         * }\n         *\n         * _.flatMapDepth([1, 2], duplicate, 2);\n         * // => [[1, 1], [2, 2]]\n         */function flatMapDepth(collection,iteratee,depth){depth=depth===undefined?1:toInteger(depth);return baseFlatten(map(collection,iteratee),depth);}/**\n         * Iterates over elements of `collection` and invokes `iteratee` for each element.\n         * The iteratee is invoked with three arguments: (value, index|key, collection).\n         * Iteratee functions may exit iteration early by explicitly returning `false`.\n         *\n         * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n         * property are iterated like arrays. To avoid this behavior use `_.forIn`\n         * or `_.forOwn` for object iteration.\n         *\n         * @static\n         * @memberOf _\n         * @since 0.1.0\n         * @alias each\n         * @category Collection\n         * @param {Array|Object} collection The collection to iterate over.\n         * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n         * @returns {Array|Object} Returns `collection`.\n         * @see _.forEachRight\n         * @example\n         *\n         * _.forEach([1, 2], function(value) {\n         *   console.log(value);\n         * });\n         * // => Logs `1` then `2`.\n         *\n         * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n         *   console.log(key);\n         * });\n         * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n         */function forEach(collection,iteratee){var func=isArray(collection)?arrayEach:baseEach;return func(collection,getIteratee(iteratee,3));}/**\n         * This method is like `_.forEach` except that it iterates over elements of\n         * `collection` from right to left.\n         *\n         * @static\n         * @memberOf _\n         * @since 2.0.0\n         * @alias eachRight\n         * @category Collection\n         * @param {Array|Object} collection The collection to iterate over.\n         * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n         * @returns {Array|Object} Returns `collection`.\n         * @see _.forEach\n         * @example\n         *\n         * _.forEachRight([1, 2], function(value) {\n         *   console.log(value);\n         * });\n         * // => Logs `2` then `1`.\n         */function forEachRight(collection,iteratee){var func=isArray(collection)?arrayEachRight:baseEachRight;return func(collection,getIteratee(iteratee,3));}/**\n         * Creates an object composed of keys generated from the results of running\n         * each element of `collection` thru `iteratee`. The order of grouped values\n         * is determined by the order they occur in `collection`. The corresponding\n         * value of each key is an array of elements responsible for generating the\n         * key. The iteratee is invoked with one argument: (value).\n         *\n         * @static\n         * @memberOf _\n         * @since 0.1.0\n         * @category Collection\n         * @param {Array|Object} collection The collection to iterate over.\n         * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n         * @returns {Object} Returns the composed aggregate object.\n         * @example\n         *\n         * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n         * // => { '4': [4.2], '6': [6.1, 6.3] }\n         *\n         * // The `_.property` iteratee shorthand.\n         * _.groupBy(['one', 'two', 'three'], 'length');\n         * // => { '3': ['one', 'two'], '5': ['three'] }\n         */var groupBy=createAggregator(function(result,value,key){if(hasOwnProperty.call(result,key)){result[key].push(value);}else{baseAssignValue(result,key,[value]);}});/**\n       * Checks if `value` is in `collection`. If `collection` is a string, it's\n       * checked for a substring of `value`, otherwise\n       * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n       * is used for equality comparisons. If `fromIndex` is negative, it's used as\n       * the offset from the end of `collection`.\n       *\n       * @static\n       * @memberOf _\n       * @since 0.1.0\n       * @category Collection\n       * @param {Array|Object|string} collection The collection to inspect.\n       * @param {*} value The value to search for.\n       * @param {number} [fromIndex=0] The index to search from.\n       * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n       * @returns {boolean} Returns `true` if `value` is found, else `false`.\n       * @example\n       *\n       * _.includes([1, 2, 3], 1);\n       * // => true\n       *\n       * _.includes([1, 2, 3], 1, 2);\n       * // => false\n       *\n       * _.includes({ 'a': 1, 'b': 2 }, 1);\n       * // => true\n       *\n       * _.includes('abcd', 'bc');\n       * // => true\n       */function includes(collection,value,fromIndex,guard){collection=isArrayLike(collection)?collection:values(collection);fromIndex=fromIndex&&!guard?toInteger(fromIndex):0;var length=collection.length;if(fromIndex<0){fromIndex=nativeMax(length+fromIndex,0);}return isString(collection)?fromIndex<=length&&collection.indexOf(value,fromIndex)>-1:!!length&&baseIndexOf(collection,value,fromIndex)>-1;}/**\n         * Invokes the method at `path` of each element in `collection`, returning\n         * an array of the results of each invoked method. Any additional arguments\n         * are provided to each invoked method. If `path` is a function, it's invoked\n         * for, and `this` bound to, each element in `collection`.\n         *\n         * @static\n         * @memberOf _\n         * @since 4.0.0\n         * @category Collection\n         * @param {Array|Object} collection The collection to iterate over.\n         * @param {Array|Function|string} path The path of the method to invoke or\n         *  the function invoked per iteration.\n         * @param {...*} [args] The arguments to invoke each method with.\n         * @returns {Array} Returns the array of results.\n         * @example\n         *\n         * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');\n         * // => [[1, 5, 7], [1, 2, 3]]\n         *\n         * _.invokeMap([123, 456], String.prototype.split, '');\n         * // => [['1', '2', '3'], ['4', '5', '6']]\n         */var invokeMap=baseRest(function(collection,path,args){var index=-1,isFunc=typeof path==='function',result=isArrayLike(collection)?Array(collection.length):[];baseEach(collection,function(value){result[++index]=isFunc?apply(path,value,args):baseInvoke(value,path,args);});return result;});/**\n       * Creates an object composed of keys generated from the results of running\n       * each element of `collection` thru `iteratee`. The corresponding value of\n       * each key is the last element responsible for generating the key. The\n       * iteratee is invoked with one argument: (value).\n       *\n       * @static\n       * @memberOf _\n       * @since 4.0.0\n       * @category Collection\n       * @param {Array|Object} collection The collection to iterate over.\n       * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n       * @returns {Object} Returns the composed aggregate object.\n       * @example\n       *\n       * var array = [\n       *   { 'dir': 'left', 'code': 97 },\n       *   { 'dir': 'right', 'code': 100 }\n       * ];\n       *\n       * _.keyBy(array, function(o) {\n       *   return String.fromCharCode(o.code);\n       * });\n       * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n       *\n       * _.keyBy(array, 'dir');\n       * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\n       */var keyBy=createAggregator(function(result,value,key){baseAssignValue(result,key,value);});/**\n       * Creates an array of values by running each element in `collection` thru\n       * `iteratee`. The iteratee is invoked with three arguments:\n       * (value, index|key, collection).\n       *\n       * Many lodash methods are guarded to work as iteratees for methods like\n       * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n       *\n       * The guarded methods are:\n       * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n       * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n       * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n       * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n       *\n       * @static\n       * @memberOf _\n       * @since 0.1.0\n       * @category Collection\n       * @param {Array|Object} collection The collection to iterate over.\n       * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n       * @returns {Array} Returns the new mapped array.\n       * @example\n       *\n       * function square(n) {\n       *   return n * n;\n       * }\n       *\n       * _.map([4, 8], square);\n       * // => [16, 64]\n       *\n       * _.map({ 'a': 4, 'b': 8 }, square);\n       * // => [16, 64] (iteration order is not guaranteed)\n       *\n       * var users = [\n       *   { 'user': 'barney' },\n       *   { 'user': 'fred' }\n       * ];\n       *\n       * // The `_.property` iteratee shorthand.\n       * _.map(users, 'user');\n       * // => ['barney', 'fred']\n       */function map(collection,iteratee){var func=isArray(collection)?arrayMap:baseMap;return func(collection,getIteratee(iteratee,3));}/**\n         * This method is like `_.sortBy` except that it allows specifying the sort\n         * orders of the iteratees to sort by. If `orders` is unspecified, all values\n         * are sorted in ascending order. Otherwise, specify an order of \"desc\" for\n         * descending or \"asc\" for ascending sort order of corresponding values.\n         *\n         * @static\n         * @memberOf _\n         * @since 4.0.0\n         * @category Collection\n         * @param {Array|Object} collection The collection to iterate over.\n         * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]\n         *  The iteratees to sort by.\n         * @param {string[]} [orders] The sort orders of `iteratees`.\n         * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n         * @returns {Array} Returns the new sorted array.\n         * @example\n         *\n         * var users = [\n         *   { 'user': 'fred',   'age': 48 },\n         *   { 'user': 'barney', 'age': 34 },\n         *   { 'user': 'fred',   'age': 40 },\n         *   { 'user': 'barney', 'age': 36 }\n         * ];\n         *\n         * // Sort by `user` in ascending order and by `age` in descending order.\n         * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);\n         * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n         */function orderBy(collection,iteratees,orders,guard){if(collection==null){return[];}if(!isArray(iteratees)){iteratees=iteratees==null?[]:[iteratees];}orders=guard?undefined:orders;if(!isArray(orders)){orders=orders==null?[]:[orders];}return baseOrderBy(collection,iteratees,orders);}/**\n         * Creates an array of elements split into two groups, the first of which\n         * contains elements `predicate` returns truthy for, the second of which\n         * contains elements `predicate` returns falsey for. The predicate is\n         * invoked with one argument: (value).\n         *\n         * @static\n         * @memberOf _\n         * @since 3.0.0\n         * @category Collection\n         * @param {Array|Object} collection The collection to iterate over.\n         * @param {Function} [predicate=_.identity] The function invoked per iteration.\n         * @returns {Array} Returns the array of grouped elements.\n         * @example\n         *\n         * var users = [\n         *   { 'user': 'barney',  'age': 36, 'active': false },\n         *   { 'user': 'fred',    'age': 40, 'active': true },\n         *   { 'user': 'pebbles', 'age': 1,  'active': false }\n         * ];\n         *\n         * _.partition(users, function(o) { return o.active; });\n         * // => objects for [['fred'], ['barney', 'pebbles']]\n         *\n         * // The `_.matches` iteratee shorthand.\n         * _.partition(users, { 'age': 1, 'active': false });\n         * // => objects for [['pebbles'], ['barney', 'fred']]\n         *\n         * // The `_.matchesProperty` iteratee shorthand.\n         * _.partition(users, ['active', false]);\n         * // => objects for [['barney', 'pebbles'], ['fred']]\n         *\n         * // The `_.property` iteratee shorthand.\n         * _.partition(users, 'active');\n         * // => objects for [['fred'], ['barney', 'pebbles']]\n         */var partition=createAggregator(function(result,value,key){result[key?0:1].push(value);},function(){return[[],[]];});/**\n       * Reduces `collection` to a value which is the accumulated result of running\n       * each element in `collection` thru `iteratee`, where each successive\n       * invocation is supplied the return value of the previous. If `accumulator`\n       * is not given, the first element of `collection` is used as the initial\n       * value. The iteratee is invoked with four arguments:\n       * (accumulator, value, index|key, collection).\n       *\n       * Many lodash methods are guarded to work as iteratees for methods like\n       * `_.reduce`, `_.reduceRight`, and `_.transform`.\n       *\n       * The guarded methods are:\n       * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n       * and `sortBy`\n       *\n       * @static\n       * @memberOf _\n       * @since 0.1.0\n       * @category Collection\n       * @param {Array|Object} collection The collection to iterate over.\n       * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n       * @param {*} [accumulator] The initial value.\n       * @returns {*} Returns the accumulated value.\n       * @see _.reduceRight\n       * @example\n       *\n       * _.reduce([1, 2], function(sum, n) {\n       *   return sum + n;\n       * }, 0);\n       * // => 3\n       *\n       * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n       *   (result[value] || (result[value] = [])).push(key);\n       *   return result;\n       * }, {});\n       * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n       */function reduce(collection,iteratee,accumulator){var func=isArray(collection)?arrayReduce:baseReduce,initAccum=arguments.length<3;return func(collection,getIteratee(iteratee,4),accumulator,initAccum,baseEach);}/**\n         * This method is like `_.reduce` except that it iterates over elements of\n         * `collection` from right to left.\n         *\n         * @static\n         * @memberOf _\n         * @since 0.1.0\n         * @category Collection\n         * @param {Array|Object} collection The collection to iterate over.\n         * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n         * @param {*} [accumulator] The initial value.\n         * @returns {*} Returns the accumulated value.\n         * @see _.reduce\n         * @example\n         *\n         * var array = [[0, 1], [2, 3], [4, 5]];\n         *\n         * _.reduceRight(array, function(flattened, other) {\n         *   return flattened.concat(other);\n         * }, []);\n         * // => [4, 5, 2, 3, 0, 1]\n         */function reduceRight(collection,iteratee,accumulator){var func=isArray(collection)?arrayReduceRight:baseReduce,initAccum=arguments.length<3;return func(collection,getIteratee(iteratee,4),accumulator,initAccum,baseEachRight);}/**\n         * The opposite of `_.filter`; this method returns the elements of `collection`\n         * that `predicate` does **not** return truthy for.\n         *\n         * @static\n         * @memberOf _\n         * @since 0.1.0\n         * @category Collection\n         * @param {Array|Object} collection The collection to iterate over.\n         * @param {Function} [predicate=_.identity] The function invoked per iteration.\n         * @returns {Array} Returns the new filtered array.\n         * @see _.filter\n         * @example\n         *\n         * var users = [\n         *   { 'user': 'barney', 'age': 36, 'active': false },\n         *   { 'user': 'fred',   'age': 40, 'active': true }\n         * ];\n         *\n         * _.reject(users, function(o) { return !o.active; });\n         * // => objects for ['fred']\n         *\n         * // The `_.matches` iteratee shorthand.\n         * _.reject(users, { 'age': 40, 'active': true });\n         * // => objects for ['barney']\n         *\n         * // The `_.matchesProperty` iteratee shorthand.\n         * _.reject(users, ['active', false]);\n         * // => objects for ['fred']\n         *\n         * // The `_.property` iteratee shorthand.\n         * _.reject(users, 'active');\n         * // => objects for ['barney']\n         */function reject(collection,predicate){var func=isArray(collection)?arrayFilter:baseFilter;return func(collection,negate(getIteratee(predicate,3)));}/**\n         * Gets a random element from `collection`.\n         *\n         * @static\n         * @memberOf _\n         * @since 2.0.0\n         * @category Collection\n         * @param {Array|Object} collection The collection to sample.\n         * @returns {*} Returns the random element.\n         * @example\n         *\n         * _.sample([1, 2, 3, 4]);\n         * // => 2\n         */function sample(collection){var func=isArray(collection)?arraySample:baseSample;return func(collection);}/**\n         * Gets `n` random elements at unique keys from `collection` up to the\n         * size of `collection`.\n         *\n         * @static\n         * @memberOf _\n         * @since 4.0.0\n         * @category Collection\n         * @param {Array|Object} collection The collection to sample.\n         * @param {number} [n=1] The number of elements to sample.\n         * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n         * @returns {Array} Returns the random elements.\n         * @example\n         *\n         * _.sampleSize([1, 2, 3], 2);\n         * // => [3, 1]\n         *\n         * _.sampleSize([1, 2, 3], 4);\n         * // => [2, 3, 1]\n         */function sampleSize(collection,n,guard){if(guard?isIterateeCall(collection,n,guard):n===undefined){n=1;}else{n=toInteger(n);}var func=isArray(collection)?arraySampleSize:baseSampleSize;return func(collection,n);}/**\n         * Creates an array of shuffled values, using a version of the\n         * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).\n         *\n         * @static\n         * @memberOf _\n         * @since 0.1.0\n         * @category Collection\n         * @param {Array|Object} collection The collection to shuffle.\n         * @returns {Array} Returns the new shuffled array.\n         * @example\n         *\n         * _.shuffle([1, 2, 3, 4]);\n         * // => [4, 1, 3, 2]\n         */function shuffle(collection){var func=isArray(collection)?arrayShuffle:baseShuffle;return func(collection);}/**\n         * Gets the size of `collection` by returning its length for array-like\n         * values or the number of own enumerable string keyed properties for objects.\n         *\n         * @static\n         * @memberOf _\n         * @since 0.1.0\n         * @category Collection\n         * @param {Array|Object|string} collection The collection to inspect.\n         * @returns {number} Returns the collection size.\n         * @example\n         *\n         * _.size([1, 2, 3]);\n         * // => 3\n         *\n         * _.size({ 'a': 1, 'b': 2 });\n         * // => 2\n         *\n         * _.size('pebbles');\n         * // => 7\n         */function size(collection){if(collection==null){return 0;}if(isArrayLike(collection)){return isString(collection)?stringSize(collection):collection.length;}var tag=getTag(collection);if(tag==mapTag||tag==setTag){return collection.size;}return baseKeys(collection).length;}/**\n         * Checks if `predicate` returns truthy for **any** element of `collection`.\n         * Iteration is stopped once `predicate` returns truthy. The predicate is\n         * invoked with three arguments: (value, index|key, collection).\n         *\n         * @static\n         * @memberOf _\n         * @since 0.1.0\n         * @category Collection\n         * @param {Array|Object} collection The collection to iterate over.\n         * @param {Function} [predicate=_.identity] The function invoked per iteration.\n         * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n         * @returns {boolean} Returns `true` if any element passes the predicate check,\n         *  else `false`.\n         * @example\n         *\n         * _.some([null, 0, 'yes', false], Boolean);\n         * // => true\n         *\n         * var users = [\n         *   { 'user': 'barney', 'active': true },\n         *   { 'user': 'fred',   'active': false }\n         * ];\n         *\n         * // The `_.matches` iteratee shorthand.\n         * _.some(users, { 'user': 'barney', 'active': false });\n         * // => false\n         *\n         * // The `_.matchesProperty` iteratee shorthand.\n         * _.some(users, ['active', false]);\n         * // => true\n         *\n         * // The `_.property` iteratee shorthand.\n         * _.some(users, 'active');\n         * // => true\n         */function some(collection,predicate,guard){var func=isArray(collection)?arraySome:baseSome;if(guard&&isIterateeCall(collection,predicate,guard)){predicate=undefined;}return func(collection,getIteratee(predicate,3));}/**\n         * Creates an array of elements, sorted in ascending order by the results of\n         * running each element in a collection thru each iteratee. This method\n         * performs a stable sort, that is, it preserves the original sort order of\n         * equal elements. The iteratees are invoked with one argument: (value).\n         *\n         * @static\n         * @memberOf _\n         * @since 0.1.0\n         * @category Collection\n         * @param {Array|Object} collection The collection to iterate over.\n         * @param {...(Function|Function[])} [iteratees=[_.identity]]\n         *  The iteratees to sort by.\n         * @returns {Array} Returns the new sorted array.\n         * @example\n         *\n         * var users = [\n         *   { 'user': 'fred',   'age': 48 },\n         *   { 'user': 'barney', 'age': 36 },\n         *   { 'user': 'fred',   'age': 40 },\n         *   { 'user': 'barney', 'age': 34 }\n         * ];\n         *\n         * _.sortBy(users, [function(o) { return o.user; }]);\n         * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n         *\n         * _.sortBy(users, ['user', 'age']);\n         * // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]]\n         */var sortBy=baseRest(function(collection,iteratees){if(collection==null){return[];}var length=iteratees.length;if(length>1&&isIterateeCall(collection,iteratees[0],iteratees[1])){iteratees=[];}else if(length>2&&isIterateeCall(iteratees[0],iteratees[1],iteratees[2])){iteratees=[iteratees[0]];}return baseOrderBy(collection,baseFlatten(iteratees,1),[]);});/* ------------------------------------------------------------------------*//**\n       * Gets the timestamp of the number of milliseconds that have elapsed since\n       * the Unix epoch (1 January 1970 00:00:00 UTC).\n       *\n       * @static\n       * @memberOf _\n       * @since 2.4.0\n       * @category Date\n       * @returns {number} Returns the timestamp.\n       * @example\n       *\n       * _.defer(function(stamp) {\n       *   console.log(_.now() - stamp);\n       * }, _.now());\n       * // => Logs the number of milliseconds it took for the deferred invocation.\n       */var now=ctxNow||function(){return root.Date.now();};/* ------------------------------------------------------------------------*//**\n       * The opposite of `_.before`; this method creates a function that invokes\n       * `func` once it's called `n` or more times.\n       *\n       * @static\n       * @memberOf _\n       * @since 0.1.0\n       * @category Function\n       * @param {number} n The number of calls before `func` is invoked.\n       * @param {Function} func The function to restrict.\n       * @returns {Function} Returns the new restricted function.\n       * @example\n       *\n       * var saves = ['profile', 'settings'];\n       *\n       * var done = _.after(saves.length, function() {\n       *   console.log('done saving!');\n       * });\n       *\n       * _.forEach(saves, function(type) {\n       *   asyncSave({ 'type': type, 'complete': done });\n       * });\n       * // => Logs 'done saving!' after the two async saves have completed.\n       */function after(n,func){if(typeof func!=='function'){throw new TypeError(FUNC_ERROR_TEXT);}n=toInteger(n);return function(){if(--n<1){return func.apply(this,arguments);}};}/**\n         * Creates a function that invokes `func`, with up to `n` arguments,\n         * ignoring any additional arguments.\n         *\n         * @static\n         * @memberOf _\n         * @since 3.0.0\n         * @category Function\n         * @param {Function} func The function to cap arguments for.\n         * @param {number} [n=func.length] The arity cap.\n         * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n         * @returns {Function} Returns the new capped function.\n         * @example\n         *\n         * _.map(['6', '8', '10'], _.ary(parseInt, 1));\n         * // => [6, 8, 10]\n         */function ary(func,n,guard){n=guard?undefined:n;n=func&&n==null?func.length:n;return createWrap(func,WRAP_ARY_FLAG,undefined,undefined,undefined,undefined,n);}/**\n         * Creates a function that invokes `func`, with the `this` binding and arguments\n         * of the created function, while it's called less than `n` times. Subsequent\n         * calls to the created function return the result of the last `func` invocation.\n         *\n         * @static\n         * @memberOf _\n         * @since 3.0.0\n         * @category Function\n         * @param {number} n The number of calls at which `func` is no longer invoked.\n         * @param {Function} func The function to restrict.\n         * @returns {Function} Returns the new restricted function.\n         * @example\n         *\n         * jQuery(element).on('click', _.before(5, addContactToList));\n         * // => Allows adding up to 4 contacts to the list.\n         */function before(n,func){var result;if(typeof func!=='function'){throw new TypeError(FUNC_ERROR_TEXT);}n=toInteger(n);return function(){if(--n>0){result=func.apply(this,arguments);}if(n<=1){func=undefined;}return result;};}/**\n         * Creates a function that invokes `func` with the `this` binding of `thisArg`\n         * and `partials` prepended to the arguments it receives.\n         *\n         * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,\n         * may be used as a placeholder for partially applied arguments.\n         *\n         * **Note:** Unlike native `Function#bind`, this method doesn't set the \"length\"\n         * property of bound functions.\n         *\n         * @static\n         * @memberOf _\n         * @since 0.1.0\n         * @category Function\n         * @param {Function} func The function to bind.\n         * @param {*} thisArg The `this` binding of `func`.\n         * @param {...*} [partials] The arguments to be partially applied.\n         * @returns {Function} Returns the new bound function.\n         * @example\n         *\n         * function greet(greeting, punctuation) {\n         *   return greeting + ' ' + this.user + punctuation;\n         * }\n         *\n         * var object = { 'user': 'fred' };\n         *\n         * var bound = _.bind(greet, object, 'hi');\n         * bound('!');\n         * // => 'hi fred!'\n         *\n         * // Bound with placeholders.\n         * var bound = _.bind(greet, object, _, '!');\n         * bound('hi');\n         * // => 'hi fred!'\n         */var bind=baseRest(function(func,thisArg,partials){var bitmask=WRAP_BIND_FLAG;if(partials.length){var holders=replaceHolders(partials,getHolder(bind));bitmask|=WRAP_PARTIAL_FLAG;}return createWrap(func,bitmask,thisArg,partials,holders);});/**\n       * Creates a function that invokes the method at `object[key]` with `partials`\n       * prepended to the arguments it receives.\n       *\n       * This method differs from `_.bind` by allowing bound functions to reference\n       * methods that may be redefined or don't yet exist. See\n       * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)\n       * for more details.\n       *\n       * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic\n       * builds, may be used as a placeholder for partially applied arguments.\n       *\n       * @static\n       * @memberOf _\n       * @since 0.10.0\n       * @category Function\n       * @param {Object} object The object to invoke the method on.\n       * @param {string} key The key of the method.\n       * @param {...*} [partials] The arguments to be partially applied.\n       * @returns {Function} Returns the new bound function.\n       * @example\n       *\n       * var object = {\n       *   'user': 'fred',\n       *   'greet': function(greeting, punctuation) {\n       *     return greeting + ' ' + this.user + punctuation;\n       *   }\n       * };\n       *\n       * var bound = _.bindKey(object, 'greet', 'hi');\n       * bound('!');\n       * // => 'hi fred!'\n       *\n       * object.greet = function(greeting, punctuation) {\n       *   return greeting + 'ya ' + this.user + punctuation;\n       * };\n       *\n       * bound('!');\n       * // => 'hiya fred!'\n       *\n       * // Bound with placeholders.\n       * var bound = _.bindKey(object, 'greet', _, '!');\n       * bound('hi');\n       * // => 'hiya fred!'\n       */var bindKey=baseRest(function(object,key,partials){var bitmask=WRAP_BIND_FLAG|WRAP_BIND_KEY_FLAG;if(partials.length){var holders=replaceHolders(partials,getHolder(bindKey));bitmask|=WRAP_PARTIAL_FLAG;}return createWrap(key,bitmask,object,partials,holders);});/**\n       * Creates a function that accepts arguments of `func` and either invokes\n       * `func` returning its result, if at least `arity` number of arguments have\n       * been provided, or returns a function that accepts the remaining `func`\n       * arguments, and so on. The arity of `func` may be specified if `func.length`\n       * is not sufficient.\n       *\n       * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,\n       * may be used as a placeholder for provided arguments.\n       *\n       * **Note:** This method doesn't set the \"length\" property of curried functions.\n       *\n       * @static\n       * @memberOf _\n       * @since 2.0.0\n       * @category Function\n       * @param {Function} func The function to curry.\n       * @param {number} [arity=func.length] The arity of `func`.\n       * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n       * @returns {Function} Returns the new curried function.\n       * @example\n       *\n       * var abc = function(a, b, c) {\n       *   return [a, b, c];\n       * };\n       *\n       * var curried = _.curry(abc);\n       *\n       * curried(1)(2)(3);\n       * // => [1, 2, 3]\n       *\n       * curried(1, 2)(3);\n       * // => [1, 2, 3]\n       *\n       * curried(1, 2, 3);\n       * // => [1, 2, 3]\n       *\n       * // Curried with placeholders.\n       * curried(1)(_, 3)(2);\n       * // => [1, 2, 3]\n       */function curry(func,arity,guard){arity=guard?undefined:arity;var result=createWrap(func,WRAP_CURRY_FLAG,undefined,undefined,undefined,undefined,undefined,arity);result.placeholder=curry.placeholder;return result;}/**\n         * This method is like `_.curry` except that arguments are applied to `func`\n         * in the manner of `_.partialRight` instead of `_.partial`.\n         *\n         * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic\n         * builds, may be used as a placeholder for provided arguments.\n         *\n         * **Note:** This method doesn't set the \"length\" property of curried functions.\n         *\n         * @static\n         * @memberOf _\n         * @since 3.0.0\n         * @category Function\n         * @param {Function} func The function to curry.\n         * @param {number} [arity=func.length] The arity of `func`.\n         * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n         * @returns {Function} Returns the new curried function.\n         * @example\n         *\n         * var abc = function(a, b, c) {\n         *   return [a, b, c];\n         * };\n         *\n         * var curried = _.curryRight(abc);\n         *\n         * curried(3)(2)(1);\n         * // => [1, 2, 3]\n         *\n         * curried(2, 3)(1);\n         * // => [1, 2, 3]\n         *\n         * curried(1, 2, 3);\n         * // => [1, 2, 3]\n         *\n         * // Curried with placeholders.\n         * curried(3)(1, _)(2);\n         * // => [1, 2, 3]\n         */function curryRight(func,arity,guard){arity=guard?undefined:arity;var result=createWrap(func,WRAP_CURRY_RIGHT_FLAG,undefined,undefined,undefined,undefined,undefined,arity);result.placeholder=curryRight.placeholder;return result;}/**\n         * Creates a debounced function that delays invoking `func` until after `wait`\n         * milliseconds have elapsed since the last time the debounced function was\n         * invoked. The debounced function comes with a `cancel` method to cancel\n         * delayed `func` invocations and a `flush` method to immediately invoke them.\n         * Provide `options` to indicate whether `func` should be invoked on the\n         * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n         * with the last arguments provided to the debounced function. Subsequent\n         * calls to the debounced function return the result of the last `func`\n         * invocation.\n         *\n         * **Note:** If `leading` and `trailing` options are `true`, `func` is\n         * invoked on the trailing edge of the timeout only if the debounced function\n         * is invoked more than once during the `wait` timeout.\n         *\n         * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n         * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n         *\n         * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n         * for details over the differences between `_.debounce` and `_.throttle`.\n         *\n         * @static\n         * @memberOf _\n         * @since 0.1.0\n         * @category Function\n         * @param {Function} func The function to debounce.\n         * @param {number} [wait=0] The number of milliseconds to delay.\n         * @param {Object} [options={}] The options object.\n         * @param {boolean} [options.leading=false]\n         *  Specify invoking on the leading edge of the timeout.\n         * @param {number} [options.maxWait]\n         *  The maximum time `func` is allowed to be delayed before it's invoked.\n         * @param {boolean} [options.trailing=true]\n         *  Specify invoking on the trailing edge of the timeout.\n         * @returns {Function} Returns the new debounced function.\n         * @example\n         *\n         * // Avoid costly calculations while the window size is in flux.\n         * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n         *\n         * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n         * jQuery(element).on('click', _.debounce(sendMail, 300, {\n         *   'leading': true,\n         *   'trailing': false\n         * }));\n         *\n         * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n         * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n         * var source = new EventSource('/stream');\n         * jQuery(source).on('message', debounced);\n         *\n         * // Cancel the trailing debounced invocation.\n         * jQuery(window).on('popstate', debounced.cancel);\n         */function debounce(func,wait,options){var lastArgs,lastThis,maxWait,result,timerId,lastCallTime,lastInvokeTime=0,leading=false,maxing=false,trailing=true;if(typeof func!=='function'){throw new TypeError(FUNC_ERROR_TEXT);}wait=toNumber(wait)||0;if(isObject(options)){leading=!!options.leading;maxing='maxWait'in options;maxWait=maxing?nativeMax(toNumber(options.maxWait)||0,wait):maxWait;trailing='trailing'in options?!!options.trailing:trailing;}function invokeFunc(time){var args=lastArgs,thisArg=lastThis;lastArgs=lastThis=undefined;lastInvokeTime=time;result=func.apply(thisArg,args);return result;}function leadingEdge(time){// Reset any `maxWait` timer.\nlastInvokeTime=time;// Start the timer for the trailing edge.\ntimerId=setTimeout(timerExpired,wait);// Invoke the leading edge.\nreturn leading?invokeFunc(time):result;}function remainingWait(time){var timeSinceLastCall=time-lastCallTime,timeSinceLastInvoke=time-lastInvokeTime,timeWaiting=wait-timeSinceLastCall;return maxing?nativeMin(timeWaiting,maxWait-timeSinceLastInvoke):timeWaiting;}function shouldInvoke(time){var timeSinceLastCall=time-lastCallTime,timeSinceLastInvoke=time-lastInvokeTime;// Either this is the first call, activity has stopped and we're at the\n// trailing edge, the system time has gone backwards and we're treating\n// it as the trailing edge, or we've hit the `maxWait` limit.\nreturn lastCallTime===undefined||timeSinceLastCall>=wait||timeSinceLastCall<0||maxing&&timeSinceLastInvoke>=maxWait;}function timerExpired(){var time=now();if(shouldInvoke(time)){return trailingEdge(time);}// Restart the timer.\ntimerId=setTimeout(timerExpired,remainingWait(time));}function trailingEdge(time){timerId=undefined;// Only invoke if we have `lastArgs` which means `func` has been\n// debounced at least once.\nif(trailing&&lastArgs){return invokeFunc(time);}lastArgs=lastThis=undefined;return result;}function cancel(){if(timerId!==undefined){clearTimeout(timerId);}lastInvokeTime=0;lastArgs=lastCallTime=lastThis=timerId=undefined;}function flush(){return timerId===undefined?result:trailingEdge(now());}function debounced(){var time=now(),isInvoking=shouldInvoke(time);lastArgs=arguments;lastThis=this;lastCallTime=time;if(isInvoking){if(timerId===undefined){return leadingEdge(lastCallTime);}if(maxing){// Handle invocations in a tight loop.\ntimerId=setTimeout(timerExpired,wait);return invokeFunc(lastCallTime);}}if(timerId===undefined){timerId=setTimeout(timerExpired,wait);}return result;}debounced.cancel=cancel;debounced.flush=flush;return debounced;}/**\n         * Defers invoking the `func` until the current call stack has cleared. Any\n         * additional arguments are provided to `func` when it's invoked.\n         *\n         * @static\n         * @memberOf _\n         * @since 0.1.0\n         * @category Function\n         * @param {Function} func The function to defer.\n         * @param {...*} [args] The arguments to invoke `func` with.\n         * @returns {number} Returns the timer id.\n         * @example\n         *\n         * _.defer(function(text) {\n         *   console.log(text);\n         * }, 'deferred');\n         * // => Logs 'deferred' after one millisecond.\n         */var defer=baseRest(function(func,args){return baseDelay(func,1,args);});/**\n       * Invokes `func` after `wait` milliseconds. Any additional arguments are\n       * provided to `func` when it's invoked.\n       *\n       * @static\n       * @memberOf _\n       * @since 0.1.0\n       * @category Function\n       * @param {Function} func The function to delay.\n       * @param {number} wait The number of milliseconds to delay invocation.\n       * @param {...*} [args] The arguments to invoke `func` with.\n       * @returns {number} Returns the timer id.\n       * @example\n       *\n       * _.delay(function(text) {\n       *   console.log(text);\n       * }, 1000, 'later');\n       * // => Logs 'later' after one second.\n       */var delay=baseRest(function(func,wait,args){return baseDelay(func,toNumber(wait)||0,args);});/**\n       * Creates a function that invokes `func` with arguments reversed.\n       *\n       * @static\n       * @memberOf _\n       * @since 4.0.0\n       * @category Function\n       * @param {Function} func The function to flip arguments for.\n       * @returns {Function} Returns the new flipped function.\n       * @example\n       *\n       * var flipped = _.flip(function() {\n       *   return _.toArray(arguments);\n       * });\n       *\n       * flipped('a', 'b', 'c', 'd');\n       * // => ['d', 'c', 'b', 'a']\n       */function flip(func){return createWrap(func,WRAP_FLIP_FLAG);}/**\n         * Creates a function that memoizes the result of `func`. If `resolver` is\n         * provided, it determines the cache key for storing the result based on the\n         * arguments provided to the memoized function. By default, the first argument\n         * provided to the memoized function is used as the map cache key. The `func`\n         * is invoked with the `this` binding of the memoized function.\n         *\n         * **Note:** The cache is exposed as the `cache` property on the memoized\n         * function. Its creation may be customized by replacing the `_.memoize.Cache`\n         * constructor with one whose instances implement the\n         * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n         * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n         *\n         * @static\n         * @memberOf _\n         * @since 0.1.0\n         * @category Function\n         * @param {Function} func The function to have its output memoized.\n         * @param {Function} [resolver] The function to resolve the cache key.\n         * @returns {Function} Returns the new memoized function.\n         * @example\n         *\n         * var object = { 'a': 1, 'b': 2 };\n         * var other = { 'c': 3, 'd': 4 };\n         *\n         * var values = _.memoize(_.values);\n         * values(object);\n         * // => [1, 2]\n         *\n         * values(other);\n         * // => [3, 4]\n         *\n         * object.a = 2;\n         * values(object);\n         * // => [1, 2]\n         *\n         * // Modify the result cache.\n         * values.cache.set(object, ['a', 'b']);\n         * values(object);\n         * // => ['a', 'b']\n         *\n         * // Replace `_.memoize.Cache`.\n         * _.memoize.Cache = WeakMap;\n         */function memoize(func,resolver){if(typeof func!=='function'||resolver!=null&&typeof resolver!=='function'){throw new TypeError(FUNC_ERROR_TEXT);}var memoized=function memoized(){var args=arguments,key=resolver?resolver.apply(this,args):args[0],cache=memoized.cache;if(cache.has(key)){return cache.get(key);}var result=func.apply(this,args);memoized.cache=cache.set(key,result)||cache;return result;};memoized.cache=new(memoize.Cache||MapCache)();return memoized;}// Expose `MapCache`.\nmemoize.Cache=MapCache;/**\n         * Creates a function that negates the result of the predicate `func`. The\n         * `func` predicate is invoked with the `this` binding and arguments of the\n         * created function.\n         *\n         * @static\n         * @memberOf _\n         * @since 3.0.0\n         * @category Function\n         * @param {Function} predicate The predicate to negate.\n         * @returns {Function} Returns the new negated function.\n         * @example\n         *\n         * function isEven(n) {\n         *   return n % 2 == 0;\n         * }\n         *\n         * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n         * // => [1, 3, 5]\n         */function negate(predicate){if(typeof predicate!=='function'){throw new TypeError(FUNC_ERROR_TEXT);}return function(){var args=arguments;switch(args.length){case 0:return!predicate.call(this);case 1:return!predicate.call(this,args[0]);case 2:return!predicate.call(this,args[0],args[1]);case 3:return!predicate.call(this,args[0],args[1],args[2]);}return!predicate.apply(this,args);};}/**\n         * Creates a function that is restricted to invoking `func` once. Repeat calls\n         * to the function return the value of the first invocation. The `func` is\n         * invoked with the `this` binding and arguments of the created function.\n         *\n         * @static\n         * @memberOf _\n         * @since 0.1.0\n         * @category Function\n         * @param {Function} func The function to restrict.\n         * @returns {Function} Returns the new restricted function.\n         * @example\n         *\n         * var initialize = _.once(createApplication);\n         * initialize();\n         * initialize();\n         * // => `createApplication` is invoked once\n         */function once(func){return before(2,func);}/**\n         * Creates a function that invokes `func` with its arguments transformed.\n         *\n         * @static\n         * @since 4.0.0\n         * @memberOf _\n         * @category Function\n         * @param {Function} func The function to wrap.\n         * @param {...(Function|Function[])} [transforms=[_.identity]]\n         *  The argument transforms.\n         * @returns {Function} Returns the new function.\n         * @example\n         *\n         * function doubled(n) {\n         *   return n * 2;\n         * }\n         *\n         * function square(n) {\n         *   return n * n;\n         * }\n         *\n         * var func = _.overArgs(function(x, y) {\n         *   return [x, y];\n         * }, [square, doubled]);\n         *\n         * func(9, 3);\n         * // => [81, 6]\n         *\n         * func(10, 5);\n         * // => [100, 10]\n         */var overArgs=castRest(function(func,transforms){transforms=transforms.length==1&&isArray(transforms[0])?arrayMap(transforms[0],baseUnary(getIteratee())):arrayMap(baseFlatten(transforms,1),baseUnary(getIteratee()));var funcsLength=transforms.length;return baseRest(function(args){var index=-1,length=nativeMin(args.length,funcsLength);while(++index<length){args[index]=transforms[index].call(this,args[index]);}return apply(func,this,args);});});/**\n       * Creates a function that invokes `func` with `partials` prepended to the\n       * arguments it receives. This method is like `_.bind` except it does **not**\n       * alter the `this` binding.\n       *\n       * The `_.partial.placeholder` value, which defaults to `_` in monolithic\n       * builds, may be used as a placeholder for partially applied arguments.\n       *\n       * **Note:** This method doesn't set the \"length\" property of partially\n       * applied functions.\n       *\n       * @static\n       * @memberOf _\n       * @since 0.2.0\n       * @category Function\n       * @param {Function} func The function to partially apply arguments to.\n       * @param {...*} [partials] The arguments to be partially applied.\n       * @returns {Function} Returns the new partially applied function.\n       * @example\n       *\n       * function greet(greeting, name) {\n       *   return greeting + ' ' + name;\n       * }\n       *\n       * var sayHelloTo = _.partial(greet, 'hello');\n       * sayHelloTo('fred');\n       * // => 'hello fred'\n       *\n       * // Partially applied with placeholders.\n       * var greetFred = _.partial(greet, _, 'fred');\n       * greetFred('hi');\n       * // => 'hi fred'\n       */var partial=baseRest(function(func,partials){var holders=replaceHolders(partials,getHolder(partial));return createWrap(func,WRAP_PARTIAL_FLAG,undefined,partials,holders);});/**\n       * This method is like `_.partial` except that partially applied arguments\n       * are appended to the arguments it receives.\n       *\n       * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic\n       * builds, may be used as a placeholder for partially applied arguments.\n       *\n       * **Note:** This method doesn't set the \"length\" property of partially\n       * applied functions.\n       *\n       * @static\n       * @memberOf _\n       * @since 1.0.0\n       * @category Function\n       * @param {Function} func The function to partially apply arguments to.\n       * @param {...*} [partials] The arguments to be partially applied.\n       * @returns {Function} Returns the new partially applied function.\n       * @example\n       *\n       * function greet(greeting, name) {\n       *   return greeting + ' ' + name;\n       * }\n       *\n       * var greetFred = _.partialRight(greet, 'fred');\n       * greetFred('hi');\n       * // => 'hi fred'\n       *\n       * // Partially applied with placeholders.\n       * var sayHelloTo = _.partialRight(greet, 'hello', _);\n       * sayHelloTo('fred');\n       * // => 'hello fred'\n       */var partialRight=baseRest(function(func,partials){var holders=replaceHolders(partials,getHolder(partialRight));return createWrap(func,WRAP_PARTIAL_RIGHT_FLAG,undefined,partials,holders);});/**\n       * Creates a function that invokes `func` with arguments arranged according\n       * to the specified `indexes` where the argument value at the first index is\n       * provided as the first argument, the argument value at the second index is\n       * provided as the second argument, and so on.\n       *\n       * @static\n       * @memberOf _\n       * @since 3.0.0\n       * @category Function\n       * @param {Function} func The function to rearrange arguments for.\n       * @param {...(number|number[])} indexes The arranged argument indexes.\n       * @returns {Function} Returns the new function.\n       * @example\n       *\n       * var rearged = _.rearg(function(a, b, c) {\n       *   return [a, b, c];\n       * }, [2, 0, 1]);\n       *\n       * rearged('b', 'c', 'a')\n       * // => ['a', 'b', 'c']\n       */var rearg=flatRest(function(func,indexes){return createWrap(func,WRAP_REARG_FLAG,undefined,undefined,undefined,indexes);});/**\n       * Creates a function that invokes `func` with the `this` binding of the\n       * created function and arguments from `start` and beyond provided as\n       * an array.\n       *\n       * **Note:** This method is based on the\n       * [rest parameter](https://mdn.io/rest_parameters).\n       *\n       * @static\n       * @memberOf _\n       * @since 4.0.0\n       * @category Function\n       * @param {Function} func The function to apply a rest parameter to.\n       * @param {number} [start=func.length-1] The start position of the rest parameter.\n       * @returns {Function} Returns the new function.\n       * @example\n       *\n       * var say = _.rest(function(what, names) {\n       *   return what + ' ' + _.initial(names).join(', ') +\n       *     (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n       * });\n       *\n       * say('hello', 'fred', 'barney', 'pebbles');\n       * // => 'hello fred, barney, & pebbles'\n       */function rest(func,start){if(typeof func!=='function'){throw new TypeError(FUNC_ERROR_TEXT);}start=start===undefined?start:toInteger(start);return baseRest(func,start);}/**\n         * Creates a function that invokes `func` with the `this` binding of the\n         * create function and an array of arguments much like\n         * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).\n         *\n         * **Note:** This method is based on the\n         * [spread operator](https://mdn.io/spread_operator).\n         *\n         * @static\n         * @memberOf _\n         * @since 3.2.0\n         * @category Function\n         * @param {Function} func The function to spread arguments over.\n         * @param {number} [start=0] The start position of the spread.\n         * @returns {Function} Returns the new function.\n         * @example\n         *\n         * var say = _.spread(function(who, what) {\n         *   return who + ' says ' + what;\n         * });\n         *\n         * say(['fred', 'hello']);\n         * // => 'fred says hello'\n         *\n         * var numbers = Promise.all([\n         *   Promise.resolve(40),\n         *   Promise.resolve(36)\n         * ]);\n         *\n         * numbers.then(_.spread(function(x, y) {\n         *   return x + y;\n         * }));\n         * // => a Promise of 76\n         */function spread(func,start){if(typeof func!=='function'){throw new TypeError(FUNC_ERROR_TEXT);}start=start==null?0:nativeMax(toInteger(start),0);return baseRest(function(args){var array=args[start],otherArgs=castSlice(args,0,start);if(array){arrayPush(otherArgs,array);}return apply(func,this,otherArgs);});}/**\n         * Creates a throttled function that only invokes `func` at most once per\n         * every `wait` milliseconds. The throttled function comes with a `cancel`\n         * method to cancel delayed `func` invocations and a `flush` method to\n         * immediately invoke them. Provide `options` to indicate whether `func`\n         * should be invoked on the leading and/or trailing edge of the `wait`\n         * timeout. The `func` is invoked with the last arguments provided to the\n         * throttled function. Subsequent calls to the throttled function return the\n         * result of the last `func` invocation.\n         *\n         * **Note:** If `leading` and `trailing` options are `true`, `func` is\n         * invoked on the trailing edge of the timeout only if the throttled function\n         * is invoked more than once during the `wait` timeout.\n         *\n         * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n         * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n         *\n         * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n         * for details over the differences between `_.throttle` and `_.debounce`.\n         *\n         * @static\n         * @memberOf _\n         * @since 0.1.0\n         * @category Function\n         * @param {Function} func The function to throttle.\n         * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n         * @param {Object} [options={}] The options object.\n         * @param {boolean} [options.leading=true]\n         *  Specify invoking on the leading edge of the timeout.\n         * @param {boolean} [options.trailing=true]\n         *  Specify invoking on the trailing edge of the timeout.\n         * @returns {Function} Returns the new throttled function.\n         * @example\n         *\n         * // Avoid excessively updating the position while scrolling.\n         * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n         *\n         * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n         * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n         * jQuery(element).on('click', throttled);\n         *\n         * // Cancel the trailing throttled invocation.\n         * jQuery(window).on('popstate', throttled.cancel);\n         */function throttle(func,wait,options){var leading=true,trailing=true;if(typeof func!=='function'){throw new TypeError(FUNC_ERROR_TEXT);}if(isObject(options)){leading='leading'in options?!!options.leading:leading;trailing='trailing'in options?!!options.trailing:trailing;}return debounce(func,wait,{leading:leading,maxWait:wait,trailing:trailing});}/**\n         * Creates a function that accepts up to one argument, ignoring any\n         * additional arguments.\n         *\n         * @static\n         * @memberOf _\n         * @since 4.0.0\n         * @category Function\n         * @param {Function} func The function to cap arguments for.\n         * @returns {Function} Returns the new capped function.\n         * @example\n         *\n         * _.map(['6', '8', '10'], _.unary(parseInt));\n         * // => [6, 8, 10]\n         */function unary(func){return ary(func,1);}/**\n         * Creates a function that provides `value` to `wrapper` as its first\n         * argument. Any additional arguments provided to the function are appended\n         * to those provided to the `wrapper`. The wrapper is invoked with the `this`\n         * binding of the created function.\n         *\n         * @static\n         * @memberOf _\n         * @since 0.1.0\n         * @category Function\n         * @param {*} value The value to wrap.\n         * @param {Function} [wrapper=identity] The wrapper function.\n         * @returns {Function} Returns the new function.\n         * @example\n         *\n         * var p = _.wrap(_.escape, function(func, text) {\n         *   return '<p>' + func(text) + '</p>';\n         * });\n         *\n         * p('fred, barney, & pebbles');\n         * // => '<p>fred, barney, &amp; pebbles</p>'\n         */function wrap(value,wrapper){return partial(castFunction(wrapper),value);}/* ------------------------------------------------------------------------*//**\n         * Casts `value` as an array if it's not one.\n         *\n         * @static\n         * @memberOf _\n         * @since 4.4.0\n         * @category Lang\n         * @param {*} value The value to inspect.\n         * @returns {Array} Returns the cast array.\n         * @example\n         *\n         * _.castArray(1);\n         * // => [1]\n         *\n         * _.castArray({ 'a': 1 });\n         * // => [{ 'a': 1 }]\n         *\n         * _.castArray('abc');\n         * // => ['abc']\n         *\n         * _.castArray(null);\n         * // => [null]\n         *\n         * _.castArray(undefined);\n         * // => [undefined]\n         *\n         * _.castArray();\n         * // => []\n         *\n         * var array = [1, 2, 3];\n         * console.log(_.castArray(array) === array);\n         * // => true\n         */function castArray(){if(!arguments.length){return[];}var value=arguments[0];return isArray(value)?value:[value];}/**\n         * Creates a shallow clone of `value`.\n         *\n         * **Note:** This method is loosely based on the\n         * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n         * and supports cloning arrays, array buffers, booleans, date objects, maps,\n         * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n         * arrays. The own enumerable properties of `arguments` objects are cloned\n         * as plain objects. An empty object is returned for uncloneable values such\n         * as error objects, functions, DOM nodes, and WeakMaps.\n         *\n         * @static\n         * @memberOf _\n         * @since 0.1.0\n         * @category Lang\n         * @param {*} value The value to clone.\n         * @returns {*} Returns the cloned value.\n         * @see _.cloneDeep\n         * @example\n         *\n         * var objects = [{ 'a': 1 }, { 'b': 2 }];\n         *\n         * var shallow = _.clone(objects);\n         * console.log(shallow[0] === objects[0]);\n         * // => true\n         */function clone(value){return baseClone(value,CLONE_SYMBOLS_FLAG);}/**\n         * This method is like `_.clone` except that it accepts `customizer` which\n         * is invoked to produce the cloned value. If `customizer` returns `undefined`,\n         * cloning is handled by the method instead. The `customizer` is invoked with\n         * up to four arguments; (value [, index|key, object, stack]).\n         *\n         * @static\n         * @memberOf _\n         * @since 4.0.0\n         * @category Lang\n         * @param {*} value The value to clone.\n         * @param {Function} [customizer] The function to customize cloning.\n         * @returns {*} Returns the cloned value.\n         * @see _.cloneDeepWith\n         * @example\n         *\n         * function customizer(value) {\n         *   if (_.isElement(value)) {\n         *     return value.cloneNode(false);\n         *   }\n         * }\n         *\n         * var el = _.cloneWith(document.body, customizer);\n         *\n         * console.log(el === document.body);\n         * // => false\n         * console.log(el.nodeName);\n         * // => 'BODY'\n         * console.log(el.childNodes.length);\n         * // => 0\n         */function cloneWith(value,customizer){customizer=typeof customizer==='function'?customizer:undefined;return baseClone(value,CLONE_SYMBOLS_FLAG,customizer);}/**\n         * This method is like `_.clone` except that it recursively clones `value`.\n         *\n         * @static\n         * @memberOf _\n         * @since 1.0.0\n         * @category Lang\n         * @param {*} value The value to recursively clone.\n         * @returns {*} Returns the deep cloned value.\n         * @see _.clone\n         * @example\n         *\n         * var objects = [{ 'a': 1 }, { 'b': 2 }];\n         *\n         * var deep = _.cloneDeep(objects);\n         * console.log(deep[0] === objects[0]);\n         * // => false\n         */function cloneDeep(value){return baseClone(value,CLONE_DEEP_FLAG|CLONE_SYMBOLS_FLAG);}/**\n         * This method is like `_.cloneWith` except that it recursively clones `value`.\n         *\n         * @static\n         * @memberOf _\n         * @since 4.0.0\n         * @category Lang\n         * @param {*} value The value to recursively clone.\n         * @param {Function} [customizer] The function to customize cloning.\n         * @returns {*} Returns the deep cloned value.\n         * @see _.cloneWith\n         * @example\n         *\n         * function customizer(value) {\n         *   if (_.isElement(value)) {\n         *     return value.cloneNode(true);\n         *   }\n         * }\n         *\n         * var el = _.cloneDeepWith(document.body, customizer);\n         *\n         * console.log(el === document.body);\n         * // => false\n         * console.log(el.nodeName);\n         * // => 'BODY'\n         * console.log(el.childNodes.length);\n         * // => 20\n         */function cloneDeepWith(value,customizer){customizer=typeof customizer==='function'?customizer:undefined;return baseClone(value,CLONE_DEEP_FLAG|CLONE_SYMBOLS_FLAG,customizer);}/**\n         * Checks if `object` conforms to `source` by invoking the predicate\n         * properties of `source` with the corresponding property values of `object`.\n         *\n         * **Note:** This method is equivalent to `_.conforms` when `source` is\n         * partially applied.\n         *\n         * @static\n         * @memberOf _\n         * @since 4.14.0\n         * @category Lang\n         * @param {Object} object The object to inspect.\n         * @param {Object} source The object of property predicates to conform to.\n         * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n         * @example\n         *\n         * var object = { 'a': 1, 'b': 2 };\n         *\n         * _.conformsTo(object, { 'b': function(n) { return n > 1; } });\n         * // => true\n         *\n         * _.conformsTo(object, { 'b': function(n) { return n > 2; } });\n         * // => false\n         */function conformsTo(object,source){return source==null||baseConformsTo(object,source,keys(source));}/**\n         * Performs a\n         * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n         * comparison between two values to determine if they are equivalent.\n         *\n         * @static\n         * @memberOf _\n         * @since 4.0.0\n         * @category Lang\n         * @param {*} value The value to compare.\n         * @param {*} other The other value to compare.\n         * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n         * @example\n         *\n         * var object = { 'a': 1 };\n         * var other = { 'a': 1 };\n         *\n         * _.eq(object, object);\n         * // => true\n         *\n         * _.eq(object, other);\n         * // => false\n         *\n         * _.eq('a', 'a');\n         * // => true\n         *\n         * _.eq('a', Object('a'));\n         * // => false\n         *\n         * _.eq(NaN, NaN);\n         * // => true\n         */function eq(value,other){return value===other||value!==value&&other!==other;}/**\n         * Checks if `value` is greater than `other`.\n         *\n         * @static\n         * @memberOf _\n         * @since 3.9.0\n         * @category Lang\n         * @param {*} value The value to compare.\n         * @param {*} other The other value to compare.\n         * @returns {boolean} Returns `true` if `value` is greater than `other`,\n         *  else `false`.\n         * @see _.lt\n         * @example\n         *\n         * _.gt(3, 1);\n         * // => true\n         *\n         * _.gt(3, 3);\n         * // => false\n         *\n         * _.gt(1, 3);\n         * // => false\n         */var gt=createRelationalOperation(baseGt);/**\n         * Checks if `value` is greater than or equal to `other`.\n         *\n         * @static\n         * @memberOf _\n         * @since 3.9.0\n         * @category Lang\n         * @param {*} value The value to compare.\n         * @param {*} other The other value to compare.\n         * @returns {boolean} Returns `true` if `value` is greater than or equal to\n         *  `other`, else `false`.\n         * @see _.lte\n         * @example\n         *\n         * _.gte(3, 1);\n         * // => true\n         *\n         * _.gte(3, 3);\n         * // => true\n         *\n         * _.gte(1, 3);\n         * // => false\n         */var gte=createRelationalOperation(function(value,other){return value>=other;});/**\n       * Checks if `value` is likely an `arguments` object.\n       *\n       * @static\n       * @memberOf _\n       * @since 0.1.0\n       * @category Lang\n       * @param {*} value The value to check.\n       * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n       *  else `false`.\n       * @example\n       *\n       * _.isArguments(function() { return arguments; }());\n       * // => true\n       *\n       * _.isArguments([1, 2, 3]);\n       * // => false\n       */var isArguments=baseIsArguments(function(){return arguments;}())?baseIsArguments:function(value){return isObjectLike(value)&&hasOwnProperty.call(value,'callee')&&!propertyIsEnumerable.call(value,'callee');};/**\n       * Checks if `value` is classified as an `Array` object.\n       *\n       * @static\n       * @memberOf _\n       * @since 0.1.0\n       * @category Lang\n       * @param {*} value The value to check.\n       * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n       * @example\n       *\n       * _.isArray([1, 2, 3]);\n       * // => true\n       *\n       * _.isArray(document.body.children);\n       * // => false\n       *\n       * _.isArray('abc');\n       * // => false\n       *\n       * _.isArray(_.noop);\n       * // => false\n       */var isArray=Array.isArray;/**\n         * Checks if `value` is classified as an `ArrayBuffer` object.\n         *\n         * @static\n         * @memberOf _\n         * @since 4.3.0\n         * @category Lang\n         * @param {*} value The value to check.\n         * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n         * @example\n         *\n         * _.isArrayBuffer(new ArrayBuffer(2));\n         * // => true\n         *\n         * _.isArrayBuffer(new Array(2));\n         * // => false\n         */var isArrayBuffer=nodeIsArrayBuffer?baseUnary(nodeIsArrayBuffer):baseIsArrayBuffer;/**\n       * Checks if `value` is array-like. A value is considered array-like if it's\n       * not a function and has a `value.length` that's an integer greater than or\n       * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n       *\n       * @static\n       * @memberOf _\n       * @since 4.0.0\n       * @category Lang\n       * @param {*} value The value to check.\n       * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n       * @example\n       *\n       * _.isArrayLike([1, 2, 3]);\n       * // => true\n       *\n       * _.isArrayLike(document.body.children);\n       * // => true\n       *\n       * _.isArrayLike('abc');\n       * // => true\n       *\n       * _.isArrayLike(_.noop);\n       * // => false\n       */function isArrayLike(value){return value!=null&&isLength(value.length)&&!isFunction(value);}/**\n         * This method is like `_.isArrayLike` except that it also checks if `value`\n         * is an object.\n         *\n         * @static\n         * @memberOf _\n         * @since 4.0.0\n         * @category Lang\n         * @param {*} value The value to check.\n         * @returns {boolean} Returns `true` if `value` is an array-like object,\n         *  else `false`.\n         * @example\n         *\n         * _.isArrayLikeObject([1, 2, 3]);\n         * // => true\n         *\n         * _.isArrayLikeObject(document.body.children);\n         * // => true\n         *\n         * _.isArrayLikeObject('abc');\n         * // => false\n         *\n         * _.isArrayLikeObject(_.noop);\n         * // => false\n         */function isArrayLikeObject(value){return isObjectLike(value)&&isArrayLike(value);}/**\n         * Checks if `value` is classified as a boolean primitive or object.\n         *\n         * @static\n         * @memberOf _\n         * @since 0.1.0\n         * @category Lang\n         * @param {*} value The value to check.\n         * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.\n         * @example\n         *\n         * _.isBoolean(false);\n         * // => true\n         *\n         * _.isBoolean(null);\n         * // => false\n         */function isBoolean(value){return value===true||value===false||isObjectLike(value)&&baseGetTag(value)==boolTag;}/**\n         * Checks if `value` is a buffer.\n         *\n         * @static\n         * @memberOf _\n         * @since 4.3.0\n         * @category Lang\n         * @param {*} value The value to check.\n         * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n         * @example\n         *\n         * _.isBuffer(new Buffer(2));\n         * // => true\n         *\n         * _.isBuffer(new Uint8Array(2));\n         * // => false\n         */var isBuffer=nativeIsBuffer||stubFalse;/**\n         * Checks if `value` is classified as a `Date` object.\n         *\n         * @static\n         * @memberOf _\n         * @since 0.1.0\n         * @category Lang\n         * @param {*} value The value to check.\n         * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n         * @example\n         *\n         * _.isDate(new Date);\n         * // => true\n         *\n         * _.isDate('Mon April 23 2012');\n         * // => false\n         */var isDate=nodeIsDate?baseUnary(nodeIsDate):baseIsDate;/**\n         * Checks if `value` is likely a DOM element.\n         *\n         * @static\n         * @memberOf _\n         * @since 0.1.0\n         * @category Lang\n         * @param {*} value The value to check.\n         * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.\n         * @example\n         *\n         * _.isElement(document.body);\n         * // => true\n         *\n         * _.isElement('<body>');\n         * // => false\n         */function isElement(value){return isObjectLike(value)&&value.nodeType===1&&!isPlainObject(value);}/**\n         * Checks if `value` is an empty object, collection, map, or set.\n         *\n         * Objects are considered empty if they have no own enumerable string keyed\n         * properties.\n         *\n         * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n         * jQuery-like collections are considered empty if they have a `length` of `0`.\n         * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n         *\n         * @static\n         * @memberOf _\n         * @since 0.1.0\n         * @category Lang\n         * @param {*} value The value to check.\n         * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n         * @example\n         *\n         * _.isEmpty(null);\n         * // => true\n         *\n         * _.isEmpty(true);\n         * // => true\n         *\n         * _.isEmpty(1);\n         * // => true\n         *\n         * _.isEmpty([1, 2, 3]);\n         * // => false\n         *\n         * _.isEmpty({ 'a': 1 });\n         * // => false\n         */function isEmpty(value){if(value==null){return true;}if(isArrayLike(value)&&(isArray(value)||typeof value==='string'||typeof value.splice==='function'||isBuffer(value)||isTypedArray(value)||isArguments(value))){return!value.length;}var tag=getTag(value);if(tag==mapTag||tag==setTag){return!value.size;}if(isPrototype(value)){return!baseKeys(value).length;}for(var key in value){if(hasOwnProperty.call(value,key)){return false;}}return true;}/**\n         * Performs a deep comparison between two values to determine if they are\n         * equivalent.\n         *\n         * **Note:** This method supports comparing arrays, array buffers, booleans,\n         * date objects, error objects, maps, numbers, `Object` objects, regexes,\n         * sets, strings, symbols, and typed arrays. `Object` objects are compared\n         * by their own, not inherited, enumerable properties. Functions and DOM\n         * nodes are compared by strict equality, i.e. `===`.\n         *\n         * @static\n         * @memberOf _\n         * @since 0.1.0\n         * @category Lang\n         * @param {*} value The value to compare.\n         * @param {*} other The other value to compare.\n         * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n         * @example\n         *\n         * var object = { 'a': 1 };\n         * var other = { 'a': 1 };\n         *\n         * _.isEqual(object, other);\n         * // => true\n         *\n         * object === other;\n         * // => false\n         */function isEqual(value,other){return baseIsEqual(value,other);}/**\n         * This method is like `_.isEqual` except that it accepts `customizer` which\n         * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n         * are handled by the method instead. The `customizer` is invoked with up to\n         * six arguments: (objValue, othValue [, index|key, object, other, stack]).\n         *\n         * @static\n         * @memberOf _\n         * @since 4.0.0\n         * @category Lang\n         * @param {*} value The value to compare.\n         * @param {*} other The other value to compare.\n         * @param {Function} [customizer] The function to customize comparisons.\n         * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n         * @example\n         *\n         * function isGreeting(value) {\n         *   return /^h(?:i|ello)$/.test(value);\n         * }\n         *\n         * function customizer(objValue, othValue) {\n         *   if (isGreeting(objValue) && isGreeting(othValue)) {\n         *     return true;\n         *   }\n         * }\n         *\n         * var array = ['hello', 'goodbye'];\n         * var other = ['hi', 'goodbye'];\n         *\n         * _.isEqualWith(array, other, customizer);\n         * // => true\n         */function isEqualWith(value,other,customizer){customizer=typeof customizer==='function'?customizer:undefined;var result=customizer?customizer(value,other):undefined;return result===undefined?baseIsEqual(value,other,undefined,customizer):!!result;}/**\n         * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,\n         * `SyntaxError`, `TypeError`, or `URIError` object.\n         *\n         * @static\n         * @memberOf _\n         * @since 3.0.0\n         * @category Lang\n         * @param {*} value The value to check.\n         * @returns {boolean} Returns `true` if `value` is an error object, else `false`.\n         * @example\n         *\n         * _.isError(new Error);\n         * // => true\n         *\n         * _.isError(Error);\n         * // => false\n         */function isError(value){if(!isObjectLike(value)){return false;}var tag=baseGetTag(value);return tag==errorTag||tag==domExcTag||typeof value.message==='string'&&typeof value.name==='string'&&!isPlainObject(value);}/**\n         * Checks if `value` is a finite primitive number.\n         *\n         * **Note:** This method is based on\n         * [`Number.isFinite`](https://mdn.io/Number/isFinite).\n         *\n         * @static\n         * @memberOf _\n         * @since 0.1.0\n         * @category Lang\n         * @param {*} value The value to check.\n         * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.\n         * @example\n         *\n         * _.isFinite(3);\n         * // => true\n         *\n         * _.isFinite(Number.MIN_VALUE);\n         * // => true\n         *\n         * _.isFinite(Infinity);\n         * // => false\n         *\n         * _.isFinite('3');\n         * // => false\n         */function isFinite(value){return typeof value==='number'&&nativeIsFinite(value);}/**\n         * Checks if `value` is classified as a `Function` object.\n         *\n         * @static\n         * @memberOf _\n         * @since 0.1.0\n         * @category Lang\n         * @param {*} value The value to check.\n         * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n         * @example\n         *\n         * _.isFunction(_);\n         * // => true\n         *\n         * _.isFunction(/abc/);\n         * // => false\n         */function isFunction(value){if(!isObject(value)){return false;}// The use of `Object#toString` avoids issues with the `typeof` operator\n// in Safari 9 which returns 'object' for typed arrays and other constructors.\nvar tag=baseGetTag(value);return tag==funcTag||tag==genTag||tag==asyncTag||tag==proxyTag;}/**\n         * Checks if `value` is an integer.\n         *\n         * **Note:** This method is based on\n         * [`Number.isInteger`](https://mdn.io/Number/isInteger).\n         *\n         * @static\n         * @memberOf _\n         * @since 4.0.0\n         * @category Lang\n         * @param {*} value The value to check.\n         * @returns {boolean} Returns `true` if `value` is an integer, else `false`.\n         * @example\n         *\n         * _.isInteger(3);\n         * // => true\n         *\n         * _.isInteger(Number.MIN_VALUE);\n         * // => false\n         *\n         * _.isInteger(Infinity);\n         * // => false\n         *\n         * _.isInteger('3');\n         * // => false\n         */function isInteger(value){return typeof value==='number'&&value==toInteger(value);}/**\n         * Checks if `value` is a valid array-like length.\n         *\n         * **Note:** This method is loosely based on\n         * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n         *\n         * @static\n         * @memberOf _\n         * @since 4.0.0\n         * @category Lang\n         * @param {*} value The value to check.\n         * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n         * @example\n         *\n         * _.isLength(3);\n         * // => true\n         *\n         * _.isLength(Number.MIN_VALUE);\n         * // => false\n         *\n         * _.isLength(Infinity);\n         * // => false\n         *\n         * _.isLength('3');\n         * // => false\n         */function isLength(value){return typeof value==='number'&&value>-1&&value%1==0&&value<=MAX_SAFE_INTEGER;}/**\n         * Checks if `value` is the\n         * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n         * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n         *\n         * @static\n         * @memberOf _\n         * @since 0.1.0\n         * @category Lang\n         * @param {*} value The value to check.\n         * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n         * @example\n         *\n         * _.isObject({});\n         * // => true\n         *\n         * _.isObject([1, 2, 3]);\n         * // => true\n         *\n         * _.isObject(_.noop);\n         * // => true\n         *\n         * _.isObject(null);\n         * // => false\n         */function isObject(value){var type=typeof value==='undefined'?'undefined':_typeof(value);return value!=null&&(type=='object'||type=='function');}/**\n         * Checks if `value` is object-like. A value is object-like if it's not `null`\n         * and has a `typeof` result of \"object\".\n         *\n         * @static\n         * @memberOf _\n         * @since 4.0.0\n         * @category Lang\n         * @param {*} value The value to check.\n         * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n         * @example\n         *\n         * _.isObjectLike({});\n         * // => true\n         *\n         * _.isObjectLike([1, 2, 3]);\n         * // => true\n         *\n         * _.isObjectLike(_.noop);\n         * // => false\n         *\n         * _.isObjectLike(null);\n         * // => false\n         */function isObjectLike(value){return value!=null&&(typeof value==='undefined'?'undefined':_typeof(value))==='object';}/**\n         * Checks if `value` is classified as a `Map` object.\n         *\n         * @static\n         * @memberOf _\n         * @since 4.3.0\n         * @category Lang\n         * @param {*} value The value to check.\n         * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n         * @example\n         *\n         * _.isMap(new Map);\n         * // => true\n         *\n         * _.isMap(new WeakMap);\n         * // => false\n         */var isMap=nodeIsMap?baseUnary(nodeIsMap):baseIsMap;/**\n         * Performs a partial deep comparison between `object` and `source` to\n         * determine if `object` contains equivalent property values.\n         *\n         * **Note:** This method is equivalent to `_.matches` when `source` is\n         * partially applied.\n         *\n         * Partial comparisons will match empty array and empty object `source`\n         * values against any array or object value, respectively. See `_.isEqual`\n         * for a list of supported value comparisons.\n         *\n         * @static\n         * @memberOf _\n         * @since 3.0.0\n         * @category Lang\n         * @param {Object} object The object to inspect.\n         * @param {Object} source The object of property values to match.\n         * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n         * @example\n         *\n         * var object = { 'a': 1, 'b': 2 };\n         *\n         * _.isMatch(object, { 'b': 2 });\n         * // => true\n         *\n         * _.isMatch(object, { 'b': 1 });\n         * // => false\n         */function isMatch(object,source){return object===source||baseIsMatch(object,source,getMatchData(source));}/**\n         * This method is like `_.isMatch` except that it accepts `customizer` which\n         * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n         * are handled by the method instead. The `customizer` is invoked with five\n         * arguments: (objValue, srcValue, index|key, object, source).\n         *\n         * @static\n         * @memberOf _\n         * @since 4.0.0\n         * @category Lang\n         * @param {Object} object The object to inspect.\n         * @param {Object} source The object of property values to match.\n         * @param {Function} [customizer] The function to customize comparisons.\n         * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n         * @example\n         *\n         * function isGreeting(value) {\n         *   return /^h(?:i|ello)$/.test(value);\n         * }\n         *\n         * function customizer(objValue, srcValue) {\n         *   if (isGreeting(objValue) && isGreeting(srcValue)) {\n         *     return true;\n         *   }\n         * }\n         *\n         * var object = { 'greeting': 'hello' };\n         * var source = { 'greeting': 'hi' };\n         *\n         * _.isMatchWith(object, source, customizer);\n         * // => true\n         */function isMatchWith(object,source,customizer){customizer=typeof customizer==='function'?customizer:undefined;return baseIsMatch(object,source,getMatchData(source),customizer);}/**\n         * Checks if `value` is `NaN`.\n         *\n         * **Note:** This method is based on\n         * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as\n         * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for\n         * `undefined` and other non-number values.\n         *\n         * @static\n         * @memberOf _\n         * @since 0.1.0\n         * @category Lang\n         * @param {*} value The value to check.\n         * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n         * @example\n         *\n         * _.isNaN(NaN);\n         * // => true\n         *\n         * _.isNaN(new Number(NaN));\n         * // => true\n         *\n         * isNaN(undefined);\n         * // => true\n         *\n         * _.isNaN(undefined);\n         * // => false\n         */function isNaN(value){// An `NaN` primitive is the only value that is not equal to itself.\n// Perform the `toStringTag` check first to avoid errors with some\n// ActiveX objects in IE.\nreturn isNumber(value)&&value!=+value;}/**\n         * Checks if `value` is a pristine native function.\n         *\n         * **Note:** This method can't reliably detect native functions in the presence\n         * of the core-js package because core-js circumvents this kind of detection.\n         * Despite multiple requests, the core-js maintainer has made it clear: any\n         * attempt to fix the detection will be obstructed. As a result, we're left\n         * with little choice but to throw an error. Unfortunately, this also affects\n         * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),\n         * which rely on core-js.\n         *\n         * @static\n         * @memberOf _\n         * @since 3.0.0\n         * @category Lang\n         * @param {*} value The value to check.\n         * @returns {boolean} Returns `true` if `value` is a native function,\n         *  else `false`.\n         * @example\n         *\n         * _.isNative(Array.prototype.push);\n         * // => true\n         *\n         * _.isNative(_);\n         * // => false\n         */function isNative(value){if(isMaskable(value)){throw new Error(CORE_ERROR_TEXT);}return baseIsNative(value);}/**\n         * Checks if `value` is `null`.\n         *\n         * @static\n         * @memberOf _\n         * @since 0.1.0\n         * @category Lang\n         * @param {*} value The value to check.\n         * @returns {boolean} Returns `true` if `value` is `null`, else `false`.\n         * @example\n         *\n         * _.isNull(null);\n         * // => true\n         *\n         * _.isNull(void 0);\n         * // => false\n         */function isNull(value){return value===null;}/**\n         * Checks if `value` is `null` or `undefined`.\n         *\n         * @static\n         * @memberOf _\n         * @since 4.0.0\n         * @category Lang\n         * @param {*} value The value to check.\n         * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\n         * @example\n         *\n         * _.isNil(null);\n         * // => true\n         *\n         * _.isNil(void 0);\n         * // => true\n         *\n         * _.isNil(NaN);\n         * // => false\n         */function isNil(value){return value==null;}/**\n         * Checks if `value` is classified as a `Number` primitive or object.\n         *\n         * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n         * classified as numbers, use the `_.isFinite` method.\n         *\n         * @static\n         * @memberOf _\n         * @since 0.1.0\n         * @category Lang\n         * @param {*} value The value to check.\n         * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n         * @example\n         *\n         * _.isNumber(3);\n         * // => true\n         *\n         * _.isNumber(Number.MIN_VALUE);\n         * // => true\n         *\n         * _.isNumber(Infinity);\n         * // => true\n         *\n         * _.isNumber('3');\n         * // => false\n         */function isNumber(value){return typeof value==='number'||isObjectLike(value)&&baseGetTag(value)==numberTag;}/**\n         * Checks if `value` is a plain object, that is, an object created by the\n         * `Object` constructor or one with a `[[Prototype]]` of `null`.\n         *\n         * @static\n         * @memberOf _\n         * @since 0.8.0\n         * @category Lang\n         * @param {*} value The value to check.\n         * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n         * @example\n         *\n         * function Foo() {\n         *   this.a = 1;\n         * }\n         *\n         * _.isPlainObject(new Foo);\n         * // => false\n         *\n         * _.isPlainObject([1, 2, 3]);\n         * // => false\n         *\n         * _.isPlainObject({ 'x': 0, 'y': 0 });\n         * // => true\n         *\n         * _.isPlainObject(Object.create(null));\n         * // => true\n         */function isPlainObject(value){if(!isObjectLike(value)||baseGetTag(value)!=objectTag){return false;}var proto=getPrototype(value);if(proto===null){return true;}var Ctor=hasOwnProperty.call(proto,'constructor')&&proto.constructor;return typeof Ctor==='function'&&Ctor instanceof Ctor&&funcToString.call(Ctor)==objectCtorString;}/**\n         * Checks if `value` is classified as a `RegExp` object.\n         *\n         * @static\n         * @memberOf _\n         * @since 0.1.0\n         * @category Lang\n         * @param {*} value The value to check.\n         * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n         * @example\n         *\n         * _.isRegExp(/abc/);\n         * // => true\n         *\n         * _.isRegExp('/abc/');\n         * // => false\n         */var isRegExp=nodeIsRegExp?baseUnary(nodeIsRegExp):baseIsRegExp;/**\n         * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754\n         * double precision number which isn't the result of a rounded unsafe integer.\n         *\n         * **Note:** This method is based on\n         * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).\n         *\n         * @static\n         * @memberOf _\n         * @since 4.0.0\n         * @category Lang\n         * @param {*} value The value to check.\n         * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`.\n         * @example\n         *\n         * _.isSafeInteger(3);\n         * // => true\n         *\n         * _.isSafeInteger(Number.MIN_VALUE);\n         * // => false\n         *\n         * _.isSafeInteger(Infinity);\n         * // => false\n         *\n         * _.isSafeInteger('3');\n         * // => false\n         */function isSafeInteger(value){return isInteger(value)&&value>=-MAX_SAFE_INTEGER&&value<=MAX_SAFE_INTEGER;}/**\n         * Checks if `value` is classified as a `Set` object.\n         *\n         * @static\n         * @memberOf _\n         * @since 4.3.0\n         * @category Lang\n         * @param {*} value The value to check.\n         * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n         * @example\n         *\n         * _.isSet(new Set);\n         * // => true\n         *\n         * _.isSet(new WeakSet);\n         * // => false\n         */var isSet=nodeIsSet?baseUnary(nodeIsSet):baseIsSet;/**\n         * Checks if `value` is classified as a `String` primitive or object.\n         *\n         * @static\n         * @since 0.1.0\n         * @memberOf _\n         * @category Lang\n         * @param {*} value The value to check.\n         * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n         * @example\n         *\n         * _.isString('abc');\n         * // => true\n         *\n         * _.isString(1);\n         * // => false\n         */function isString(value){return typeof value==='string'||!isArray(value)&&isObjectLike(value)&&baseGetTag(value)==stringTag;}/**\n         * Checks if `value` is classified as a `Symbol` primitive or object.\n         *\n         * @static\n         * @memberOf _\n         * @since 4.0.0\n         * @category Lang\n         * @param {*} value The value to check.\n         * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n         * @example\n         *\n         * _.isSymbol(Symbol.iterator);\n         * // => true\n         *\n         * _.isSymbol('abc');\n         * // => false\n         */function isSymbol(value){return(typeof value==='undefined'?'undefined':_typeof(value))==='symbol'||isObjectLike(value)&&baseGetTag(value)==symbolTag;}/**\n         * Checks if `value` is classified as a typed array.\n         *\n         * @static\n         * @memberOf _\n         * @since 3.0.0\n         * @category Lang\n         * @param {*} value The value to check.\n         * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n         * @example\n         *\n         * _.isTypedArray(new Uint8Array);\n         * // => true\n         *\n         * _.isTypedArray([]);\n         * // => false\n         */var isTypedArray=nodeIsTypedArray?baseUnary(nodeIsTypedArray):baseIsTypedArray;/**\n       * Checks if `value` is `undefined`.\n       *\n       * @static\n       * @since 0.1.0\n       * @memberOf _\n       * @category Lang\n       * @param {*} value The value to check.\n       * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n       * @example\n       *\n       * _.isUndefined(void 0);\n       * // => true\n       *\n       * _.isUndefined(null);\n       * // => false\n       */function isUndefined(value){return value===undefined;}/**\n         * Checks if `value` is classified as a `WeakMap` object.\n         *\n         * @static\n         * @memberOf _\n         * @since 4.3.0\n         * @category Lang\n         * @param {*} value The value to check.\n         * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.\n         * @example\n         *\n         * _.isWeakMap(new WeakMap);\n         * // => true\n         *\n         * _.isWeakMap(new Map);\n         * // => false\n         */function isWeakMap(value){return isObjectLike(value)&&getTag(value)==weakMapTag;}/**\n         * Checks if `value` is classified as a `WeakSet` object.\n         *\n         * @static\n         * @memberOf _\n         * @since 4.3.0\n         * @category Lang\n         * @param {*} value The value to check.\n         * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.\n         * @example\n         *\n         * _.isWeakSet(new WeakSet);\n         * // => true\n         *\n         * _.isWeakSet(new Set);\n         * // => false\n         */function isWeakSet(value){return isObjectLike(value)&&baseGetTag(value)==weakSetTag;}/**\n         * Checks if `value` is less than `other`.\n         *\n         * @static\n         * @memberOf _\n         * @since 3.9.0\n         * @category Lang\n         * @param {*} value The value to compare.\n         * @param {*} other The other value to compare.\n         * @returns {boolean} Returns `true` if `value` is less than `other`,\n         *  else `false`.\n         * @see _.gt\n         * @example\n         *\n         * _.lt(1, 3);\n         * // => true\n         *\n         * _.lt(3, 3);\n         * // => false\n         *\n         * _.lt(3, 1);\n         * // => false\n         */var lt=createRelationalOperation(baseLt);/**\n         * Checks if `value` is less than or equal to `other`.\n         *\n         * @static\n         * @memberOf _\n         * @since 3.9.0\n         * @category Lang\n         * @param {*} value The value to compare.\n         * @param {*} other The other value to compare.\n         * @returns {boolean} Returns `true` if `value` is less than or equal to\n         *  `other`, else `false`.\n         * @see _.gte\n         * @example\n         *\n         * _.lte(1, 3);\n         * // => true\n         *\n         * _.lte(3, 3);\n         * // => true\n         *\n         * _.lte(3, 1);\n         * // => false\n         */var lte=createRelationalOperation(function(value,other){return value<=other;});/**\n       * Converts `value` to an array.\n       *\n       * @static\n       * @since 0.1.0\n       * @memberOf _\n       * @category Lang\n       * @param {*} value The value to convert.\n       * @returns {Array} Returns the converted array.\n       * @example\n       *\n       * _.toArray({ 'a': 1, 'b': 2 });\n       * // => [1, 2]\n       *\n       * _.toArray('abc');\n       * // => ['a', 'b', 'c']\n       *\n       * _.toArray(1);\n       * // => []\n       *\n       * _.toArray(null);\n       * // => []\n       */function toArray(value){if(!value){return[];}if(isArrayLike(value)){return isString(value)?stringToArray(value):copyArray(value);}if(symIterator&&value[symIterator]){return iteratorToArray(value[symIterator]());}var tag=getTag(value),func=tag==mapTag?mapToArray:tag==setTag?setToArray:values;return func(value);}/**\n         * Converts `value` to a finite number.\n         *\n         * @static\n         * @memberOf _\n         * @since 4.12.0\n         * @category Lang\n         * @param {*} value The value to convert.\n         * @returns {number} Returns the converted number.\n         * @example\n         *\n         * _.toFinite(3.2);\n         * // => 3.2\n         *\n         * _.toFinite(Number.MIN_VALUE);\n         * // => 5e-324\n         *\n         * _.toFinite(Infinity);\n         * // => 1.7976931348623157e+308\n         *\n         * _.toFinite('3.2');\n         * // => 3.2\n         */function toFinite(value){if(!value){return value===0?value:0;}value=toNumber(value);if(value===INFINITY||value===-INFINITY){var sign=value<0?-1:1;return sign*MAX_INTEGER;}return value===value?value:0;}/**\n         * Converts `value` to an integer.\n         *\n         * **Note:** This method is loosely based on\n         * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n         *\n         * @static\n         * @memberOf _\n         * @since 4.0.0\n         * @category Lang\n         * @param {*} value The value to convert.\n         * @returns {number} Returns the converted integer.\n         * @example\n         *\n         * _.toInteger(3.2);\n         * // => 3\n         *\n         * _.toInteger(Number.MIN_VALUE);\n         * // => 0\n         *\n         * _.toInteger(Infinity);\n         * // => 1.7976931348623157e+308\n         *\n         * _.toInteger('3.2');\n         * // => 3\n         */function toInteger(value){var result=toFinite(value),remainder=result%1;return result===result?remainder?result-remainder:result:0;}/**\n         * Converts `value` to an integer suitable for use as the length of an\n         * array-like object.\n         *\n         * **Note:** This method is based on\n         * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n         *\n         * @static\n         * @memberOf _\n         * @since 4.0.0\n         * @category Lang\n         * @param {*} value The value to convert.\n         * @returns {number} Returns the converted integer.\n         * @example\n         *\n         * _.toLength(3.2);\n         * // => 3\n         *\n         * _.toLength(Number.MIN_VALUE);\n         * // => 0\n         *\n         * _.toLength(Infinity);\n         * // => 4294967295\n         *\n         * _.toLength('3.2');\n         * // => 3\n         */function toLength(value){return value?baseClamp(toInteger(value),0,MAX_ARRAY_LENGTH):0;}/**\n         * Converts `value` to a number.\n         *\n         * @static\n         * @memberOf _\n         * @since 4.0.0\n         * @category Lang\n         * @param {*} value The value to process.\n         * @returns {number} Returns the number.\n         * @example\n         *\n         * _.toNumber(3.2);\n         * // => 3.2\n         *\n         * _.toNumber(Number.MIN_VALUE);\n         * // => 5e-324\n         *\n         * _.toNumber(Infinity);\n         * // => Infinity\n         *\n         * _.toNumber('3.2');\n         * // => 3.2\n         */function toNumber(value){if(typeof value==='number'){return value;}if(isSymbol(value)){return NAN;}if(isObject(value)){var other=typeof value.valueOf==='function'?value.valueOf():value;value=isObject(other)?other+'':other;}if(typeof value!=='string'){return value===0?value:+value;}value=value.replace(reTrim,'');var isBinary=reIsBinary.test(value);return isBinary||reIsOctal.test(value)?freeParseInt(value.slice(2),isBinary?2:8):reIsBadHex.test(value)?NAN:+value;}/**\n         * Converts `value` to a plain object flattening inherited enumerable string\n         * keyed properties of `value` to own properties of the plain object.\n         *\n         * @static\n         * @memberOf _\n         * @since 3.0.0\n         * @category Lang\n         * @param {*} value The value to convert.\n         * @returns {Object} Returns the converted plain object.\n         * @example\n         *\n         * function Foo() {\n         *   this.b = 2;\n         * }\n         *\n         * Foo.prototype.c = 3;\n         *\n         * _.assign({ 'a': 1 }, new Foo);\n         * // => { 'a': 1, 'b': 2 }\n         *\n         * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n         * // => { 'a': 1, 'b': 2, 'c': 3 }\n         */function toPlainObject(value){return copyObject(value,keysIn(value));}/**\n         * Converts `value` to a safe integer. A safe integer can be compared and\n         * represented correctly.\n         *\n         * @static\n         * @memberOf _\n         * @since 4.0.0\n         * @category Lang\n         * @param {*} value The value to convert.\n         * @returns {number} Returns the converted integer.\n         * @example\n         *\n         * _.toSafeInteger(3.2);\n         * // => 3\n         *\n         * _.toSafeInteger(Number.MIN_VALUE);\n         * // => 0\n         *\n         * _.toSafeInteger(Infinity);\n         * // => 9007199254740991\n         *\n         * _.toSafeInteger('3.2');\n         * // => 3\n         */function toSafeInteger(value){return value?baseClamp(toInteger(value),-MAX_SAFE_INTEGER,MAX_SAFE_INTEGER):value===0?value:0;}/**\n         * Converts `value` to a string. An empty string is returned for `null`\n         * and `undefined` values. The sign of `-0` is preserved.\n         *\n         * @static\n         * @memberOf _\n         * @since 4.0.0\n         * @category Lang\n         * @param {*} value The value to convert.\n         * @returns {string} Returns the converted string.\n         * @example\n         *\n         * _.toString(null);\n         * // => ''\n         *\n         * _.toString(-0);\n         * // => '-0'\n         *\n         * _.toString([1, 2, 3]);\n         * // => '1,2,3'\n         */function toString(value){return value==null?'':baseToString(value);}/* ------------------------------------------------------------------------*//**\n         * Assigns own enumerable string keyed properties of source objects to the\n         * destination object. Source objects are applied from left to right.\n         * Subsequent sources overwrite property assignments of previous sources.\n         *\n         * **Note:** This method mutates `object` and is loosely based on\n         * [`Object.assign`](https://mdn.io/Object/assign).\n         *\n         * @static\n         * @memberOf _\n         * @since 0.10.0\n         * @category Object\n         * @param {Object} object The destination object.\n         * @param {...Object} [sources] The source objects.\n         * @returns {Object} Returns `object`.\n         * @see _.assignIn\n         * @example\n         *\n         * function Foo() {\n         *   this.a = 1;\n         * }\n         *\n         * function Bar() {\n         *   this.c = 3;\n         * }\n         *\n         * Foo.prototype.b = 2;\n         * Bar.prototype.d = 4;\n         *\n         * _.assign({ 'a': 0 }, new Foo, new Bar);\n         * // => { 'a': 1, 'c': 3 }\n         */var assign=createAssigner(function(object,source){if(isPrototype(source)||isArrayLike(source)){copyObject(source,keys(source),object);return;}for(var key in source){if(hasOwnProperty.call(source,key)){assignValue(object,key,source[key]);}}});/**\n       * This method is like `_.assign` except that it iterates over own and\n       * inherited source properties.\n       *\n       * **Note:** This method mutates `object`.\n       *\n       * @static\n       * @memberOf _\n       * @since 4.0.0\n       * @alias extend\n       * @category Object\n       * @param {Object} object The destination object.\n       * @param {...Object} [sources] The source objects.\n       * @returns {Object} Returns `object`.\n       * @see _.assign\n       * @example\n       *\n       * function Foo() {\n       *   this.a = 1;\n       * }\n       *\n       * function Bar() {\n       *   this.c = 3;\n       * }\n       *\n       * Foo.prototype.b = 2;\n       * Bar.prototype.d = 4;\n       *\n       * _.assignIn({ 'a': 0 }, new Foo, new Bar);\n       * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }\n       */var assignIn=createAssigner(function(object,source){copyObject(source,keysIn(source),object);});/**\n       * This method is like `_.assignIn` except that it accepts `customizer`\n       * which is invoked to produce the assigned values. If `customizer` returns\n       * `undefined`, assignment is handled by the method instead. The `customizer`\n       * is invoked with five arguments: (objValue, srcValue, key, object, source).\n       *\n       * **Note:** This method mutates `object`.\n       *\n       * @static\n       * @memberOf _\n       * @since 4.0.0\n       * @alias extendWith\n       * @category Object\n       * @param {Object} object The destination object.\n       * @param {...Object} sources The source objects.\n       * @param {Function} [customizer] The function to customize assigned values.\n       * @returns {Object} Returns `object`.\n       * @see _.assignWith\n       * @example\n       *\n       * function customizer(objValue, srcValue) {\n       *   return _.isUndefined(objValue) ? srcValue : objValue;\n       * }\n       *\n       * var defaults = _.partialRight(_.assignInWith, customizer);\n       *\n       * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n       * // => { 'a': 1, 'b': 2 }\n       */var assignInWith=createAssigner(function(object,source,srcIndex,customizer){copyObject(source,keysIn(source),object,customizer);});/**\n       * This method is like `_.assign` except that it accepts `customizer`\n       * which is invoked to produce the assigned values. If `customizer` returns\n       * `undefined`, assignment is handled by the method instead. The `customizer`\n       * is invoked with five arguments: (objValue, srcValue, key, object, source).\n       *\n       * **Note:** This method mutates `object`.\n       *\n       * @static\n       * @memberOf _\n       * @since 4.0.0\n       * @category Object\n       * @param {Object} object The destination object.\n       * @param {...Object} sources The source objects.\n       * @param {Function} [customizer] The function to customize assigned values.\n       * @returns {Object} Returns `object`.\n       * @see _.assignInWith\n       * @example\n       *\n       * function customizer(objValue, srcValue) {\n       *   return _.isUndefined(objValue) ? srcValue : objValue;\n       * }\n       *\n       * var defaults = _.partialRight(_.assignWith, customizer);\n       *\n       * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n       * // => { 'a': 1, 'b': 2 }\n       */var assignWith=createAssigner(function(object,source,srcIndex,customizer){copyObject(source,keys(source),object,customizer);});/**\n       * Creates an array of values corresponding to `paths` of `object`.\n       *\n       * @static\n       * @memberOf _\n       * @since 1.0.0\n       * @category Object\n       * @param {Object} object The object to iterate over.\n       * @param {...(string|string[])} [paths] The property paths to pick.\n       * @returns {Array} Returns the picked values.\n       * @example\n       *\n       * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n       *\n       * _.at(object, ['a[0].b.c', 'a[1]']);\n       * // => [3, 4]\n       */var at=flatRest(baseAt);/**\n         * Creates an object that inherits from the `prototype` object. If a\n         * `properties` object is given, its own enumerable string keyed properties\n         * are assigned to the created object.\n         *\n         * @static\n         * @memberOf _\n         * @since 2.3.0\n         * @category Object\n         * @param {Object} prototype The object to inherit from.\n         * @param {Object} [properties] The properties to assign to the object.\n         * @returns {Object} Returns the new object.\n         * @example\n         *\n         * function Shape() {\n         *   this.x = 0;\n         *   this.y = 0;\n         * }\n         *\n         * function Circle() {\n         *   Shape.call(this);\n         * }\n         *\n         * Circle.prototype = _.create(Shape.prototype, {\n         *   'constructor': Circle\n         * });\n         *\n         * var circle = new Circle;\n         * circle instanceof Circle;\n         * // => true\n         *\n         * circle instanceof Shape;\n         * // => true\n         */function create(prototype,properties){var result=baseCreate(prototype);return properties==null?result:baseAssign(result,properties);}/**\n         * Assigns own and inherited enumerable string keyed properties of source\n         * objects to the destination object for all destination properties that\n         * resolve to `undefined`. Source objects are applied from left to right.\n         * Once a property is set, additional values of the same property are ignored.\n         *\n         * **Note:** This method mutates `object`.\n         *\n         * @static\n         * @since 0.1.0\n         * @memberOf _\n         * @category Object\n         * @param {Object} object The destination object.\n         * @param {...Object} [sources] The source objects.\n         * @returns {Object} Returns `object`.\n         * @see _.defaultsDeep\n         * @example\n         *\n         * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n         * // => { 'a': 1, 'b': 2 }\n         */var defaults=baseRest(function(object,sources){object=Object(object);var index=-1;var length=sources.length;var guard=length>2?sources[2]:undefined;if(guard&&isIterateeCall(sources[0],sources[1],guard)){length=1;}while(++index<length){var source=sources[index];var props=keysIn(source);var propsIndex=-1;var propsLength=props.length;while(++propsIndex<propsLength){var key=props[propsIndex];var value=object[key];if(value===undefined||eq(value,objectProto[key])&&!hasOwnProperty.call(object,key)){object[key]=source[key];}}}return object;});/**\n       * This method is like `_.defaults` except that it recursively assigns\n       * default properties.\n       *\n       * **Note:** This method mutates `object`.\n       *\n       * @static\n       * @memberOf _\n       * @since 3.10.0\n       * @category Object\n       * @param {Object} object The destination object.\n       * @param {...Object} [sources] The source objects.\n       * @returns {Object} Returns `object`.\n       * @see _.defaults\n       * @example\n       *\n       * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });\n       * // => { 'a': { 'b': 2, 'c': 3 } }\n       */var defaultsDeep=baseRest(function(args){args.push(undefined,customDefaultsMerge);return apply(mergeWith,undefined,args);});/**\n       * This method is like `_.find` except that it returns the key of the first\n       * element `predicate` returns truthy for instead of the element itself.\n       *\n       * @static\n       * @memberOf _\n       * @since 1.1.0\n       * @category Object\n       * @param {Object} object The object to inspect.\n       * @param {Function} [predicate=_.identity] The function invoked per iteration.\n       * @returns {string|undefined} Returns the key of the matched element,\n       *  else `undefined`.\n       * @example\n       *\n       * var users = {\n       *   'barney':  { 'age': 36, 'active': true },\n       *   'fred':    { 'age': 40, 'active': false },\n       *   'pebbles': { 'age': 1,  'active': true }\n       * };\n       *\n       * _.findKey(users, function(o) { return o.age < 40; });\n       * // => 'barney' (iteration order is not guaranteed)\n       *\n       * // The `_.matches` iteratee shorthand.\n       * _.findKey(users, { 'age': 1, 'active': true });\n       * // => 'pebbles'\n       *\n       * // The `_.matchesProperty` iteratee shorthand.\n       * _.findKey(users, ['active', false]);\n       * // => 'fred'\n       *\n       * // The `_.property` iteratee shorthand.\n       * _.findKey(users, 'active');\n       * // => 'barney'\n       */function findKey(object,predicate){return baseFindKey(object,getIteratee(predicate,3),baseForOwn);}/**\n         * This method is like `_.findKey` except that it iterates over elements of\n         * a collection in the opposite order.\n         *\n         * @static\n         * @memberOf _\n         * @since 2.0.0\n         * @category Object\n         * @param {Object} object The object to inspect.\n         * @param {Function} [predicate=_.identity] The function invoked per iteration.\n         * @returns {string|undefined} Returns the key of the matched element,\n         *  else `undefined`.\n         * @example\n         *\n         * var users = {\n         *   'barney':  { 'age': 36, 'active': true },\n         *   'fred':    { 'age': 40, 'active': false },\n         *   'pebbles': { 'age': 1,  'active': true }\n         * };\n         *\n         * _.findLastKey(users, function(o) { return o.age < 40; });\n         * // => returns 'pebbles' assuming `_.findKey` returns 'barney'\n         *\n         * // The `_.matches` iteratee shorthand.\n         * _.findLastKey(users, { 'age': 36, 'active': true });\n         * // => 'barney'\n         *\n         * // The `_.matchesProperty` iteratee shorthand.\n         * _.findLastKey(users, ['active', false]);\n         * // => 'fred'\n         *\n         * // The `_.property` iteratee shorthand.\n         * _.findLastKey(users, 'active');\n         * // => 'pebbles'\n         */function findLastKey(object,predicate){return baseFindKey(object,getIteratee(predicate,3),baseForOwnRight);}/**\n         * Iterates over own and inherited enumerable string keyed properties of an\n         * object and invokes `iteratee` for each property. The iteratee is invoked\n         * with three arguments: (value, key, object). Iteratee functions may exit\n         * iteration early by explicitly returning `false`.\n         *\n         * @static\n         * @memberOf _\n         * @since 0.3.0\n         * @category Object\n         * @param {Object} object The object to iterate over.\n         * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n         * @returns {Object} Returns `object`.\n         * @see _.forInRight\n         * @example\n         *\n         * function Foo() {\n         *   this.a = 1;\n         *   this.b = 2;\n         * }\n         *\n         * Foo.prototype.c = 3;\n         *\n         * _.forIn(new Foo, function(value, key) {\n         *   console.log(key);\n         * });\n         * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n         */function forIn(object,iteratee){return object==null?object:baseFor(object,getIteratee(iteratee,3),keysIn);}/**\n         * This method is like `_.forIn` except that it iterates over properties of\n         * `object` in the opposite order.\n         *\n         * @static\n         * @memberOf _\n         * @since 2.0.0\n         * @category Object\n         * @param {Object} object The object to iterate over.\n         * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n         * @returns {Object} Returns `object`.\n         * @see _.forIn\n         * @example\n         *\n         * function Foo() {\n         *   this.a = 1;\n         *   this.b = 2;\n         * }\n         *\n         * Foo.prototype.c = 3;\n         *\n         * _.forInRight(new Foo, function(value, key) {\n         *   console.log(key);\n         * });\n         * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.\n         */function forInRight(object,iteratee){return object==null?object:baseForRight(object,getIteratee(iteratee,3),keysIn);}/**\n         * Iterates over own enumerable string keyed properties of an object and\n         * invokes `iteratee` for each property. The iteratee is invoked with three\n         * arguments: (value, key, object). Iteratee functions may exit iteration\n         * early by explicitly returning `false`.\n         *\n         * @static\n         * @memberOf _\n         * @since 0.3.0\n         * @category Object\n         * @param {Object} object The object to iterate over.\n         * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n         * @returns {Object} Returns `object`.\n         * @see _.forOwnRight\n         * @example\n         *\n         * function Foo() {\n         *   this.a = 1;\n         *   this.b = 2;\n         * }\n         *\n         * Foo.prototype.c = 3;\n         *\n         * _.forOwn(new Foo, function(value, key) {\n         *   console.log(key);\n         * });\n         * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n         */function forOwn(object,iteratee){return object&&baseForOwn(object,getIteratee(iteratee,3));}/**\n         * This method is like `_.forOwn` except that it iterates over properties of\n         * `object` in the opposite order.\n         *\n         * @static\n         * @memberOf _\n         * @since 2.0.0\n         * @category Object\n         * @param {Object} object The object to iterate over.\n         * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n         * @returns {Object} Returns `object`.\n         * @see _.forOwn\n         * @example\n         *\n         * function Foo() {\n         *   this.a = 1;\n         *   this.b = 2;\n         * }\n         *\n         * Foo.prototype.c = 3;\n         *\n         * _.forOwnRight(new Foo, function(value, key) {\n         *   console.log(key);\n         * });\n         * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.\n         */function forOwnRight(object,iteratee){return object&&baseForOwnRight(object,getIteratee(iteratee,3));}/**\n         * Creates an array of function property names from own enumerable properties\n         * of `object`.\n         *\n         * @static\n         * @since 0.1.0\n         * @memberOf _\n         * @category Object\n         * @param {Object} object The object to inspect.\n         * @returns {Array} Returns the function names.\n         * @see _.functionsIn\n         * @example\n         *\n         * function Foo() {\n         *   this.a = _.constant('a');\n         *   this.b = _.constant('b');\n         * }\n         *\n         * Foo.prototype.c = _.constant('c');\n         *\n         * _.functions(new Foo);\n         * // => ['a', 'b']\n         */function functions(object){return object==null?[]:baseFunctions(object,keys(object));}/**\n         * Creates an array of function property names from own and inherited\n         * enumerable properties of `object`.\n         *\n         * @static\n         * @memberOf _\n         * @since 4.0.0\n         * @category Object\n         * @param {Object} object The object to inspect.\n         * @returns {Array} Returns the function names.\n         * @see _.functions\n         * @example\n         *\n         * function Foo() {\n         *   this.a = _.constant('a');\n         *   this.b = _.constant('b');\n         * }\n         *\n         * Foo.prototype.c = _.constant('c');\n         *\n         * _.functionsIn(new Foo);\n         * // => ['a', 'b', 'c']\n         */function functionsIn(object){return object==null?[]:baseFunctions(object,keysIn(object));}/**\n         * Gets the value at `path` of `object`. If the resolved value is\n         * `undefined`, the `defaultValue` is returned in its place.\n         *\n         * @static\n         * @memberOf _\n         * @since 3.7.0\n         * @category Object\n         * @param {Object} object The object to query.\n         * @param {Array|string} path The path of the property to get.\n         * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n         * @returns {*} Returns the resolved value.\n         * @example\n         *\n         * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n         *\n         * _.get(object, 'a[0].b.c');\n         * // => 3\n         *\n         * _.get(object, ['a', '0', 'b', 'c']);\n         * // => 3\n         *\n         * _.get(object, 'a.b.c', 'default');\n         * // => 'default'\n         */function get(object,path,defaultValue){var result=object==null?undefined:baseGet(object,path);return result===undefined?defaultValue:result;}/**\n         * Checks if `path` is a direct property of `object`.\n         *\n         * @static\n         * @since 0.1.0\n         * @memberOf _\n         * @category Object\n         * @param {Object} object The object to query.\n         * @param {Array|string} path The path to check.\n         * @returns {boolean} Returns `true` if `path` exists, else `false`.\n         * @example\n         *\n         * var object = { 'a': { 'b': 2 } };\n         * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n         *\n         * _.has(object, 'a');\n         * // => true\n         *\n         * _.has(object, 'a.b');\n         * // => true\n         *\n         * _.has(object, ['a', 'b']);\n         * // => true\n         *\n         * _.has(other, 'a');\n         * // => false\n         */function has(object,path){return object!=null&&hasPath(object,path,baseHas);}/**\n         * Checks if `path` is a direct or inherited property of `object`.\n         *\n         * @static\n         * @memberOf _\n         * @since 4.0.0\n         * @category Object\n         * @param {Object} object The object to query.\n         * @param {Array|string} path The path to check.\n         * @returns {boolean} Returns `true` if `path` exists, else `false`.\n         * @example\n         *\n         * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n         *\n         * _.hasIn(object, 'a');\n         * // => true\n         *\n         * _.hasIn(object, 'a.b');\n         * // => true\n         *\n         * _.hasIn(object, ['a', 'b']);\n         * // => true\n         *\n         * _.hasIn(object, 'b');\n         * // => false\n         */function hasIn(object,path){return object!=null&&hasPath(object,path,baseHasIn);}/**\n         * Creates an object composed of the inverted keys and values of `object`.\n         * If `object` contains duplicate values, subsequent values overwrite\n         * property assignments of previous values.\n         *\n         * @static\n         * @memberOf _\n         * @since 0.7.0\n         * @category Object\n         * @param {Object} object The object to invert.\n         * @returns {Object} Returns the new inverted object.\n         * @example\n         *\n         * var object = { 'a': 1, 'b': 2, 'c': 1 };\n         *\n         * _.invert(object);\n         * // => { '1': 'c', '2': 'b' }\n         */var invert=createInverter(function(result,value,key){if(value!=null&&typeof value.toString!=='function'){value=nativeObjectToString.call(value);}result[value]=key;},constant(identity));/**\n       * This method is like `_.invert` except that the inverted object is generated\n       * from the results of running each element of `object` thru `iteratee`. The\n       * corresponding inverted value of each inverted key is an array of keys\n       * responsible for generating the inverted value. The iteratee is invoked\n       * with one argument: (value).\n       *\n       * @static\n       * @memberOf _\n       * @since 4.1.0\n       * @category Object\n       * @param {Object} object The object to invert.\n       * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n       * @returns {Object} Returns the new inverted object.\n       * @example\n       *\n       * var object = { 'a': 1, 'b': 2, 'c': 1 };\n       *\n       * _.invertBy(object);\n       * // => { '1': ['a', 'c'], '2': ['b'] }\n       *\n       * _.invertBy(object, function(value) {\n       *   return 'group' + value;\n       * });\n       * // => { 'group1': ['a', 'c'], 'group2': ['b'] }\n       */var invertBy=createInverter(function(result,value,key){if(value!=null&&typeof value.toString!=='function'){value=nativeObjectToString.call(value);}if(hasOwnProperty.call(result,value)){result[value].push(key);}else{result[value]=[key];}},getIteratee);/**\n       * Invokes the method at `path` of `object`.\n       *\n       * @static\n       * @memberOf _\n       * @since 4.0.0\n       * @category Object\n       * @param {Object} object The object to query.\n       * @param {Array|string} path The path of the method to invoke.\n       * @param {...*} [args] The arguments to invoke the method with.\n       * @returns {*} Returns the result of the invoked method.\n       * @example\n       *\n       * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };\n       *\n       * _.invoke(object, 'a[0].b.c.slice', 1, 3);\n       * // => [2, 3]\n       */var invoke=baseRest(baseInvoke);/**\n         * Creates an array of the own enumerable property names of `object`.\n         *\n         * **Note:** Non-object values are coerced to objects. See the\n         * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n         * for more details.\n         *\n         * @static\n         * @since 0.1.0\n         * @memberOf _\n         * @category Object\n         * @param {Object} object The object to query.\n         * @returns {Array} Returns the array of property names.\n         * @example\n         *\n         * function Foo() {\n         *   this.a = 1;\n         *   this.b = 2;\n         * }\n         *\n         * Foo.prototype.c = 3;\n         *\n         * _.keys(new Foo);\n         * // => ['a', 'b'] (iteration order is not guaranteed)\n         *\n         * _.keys('hi');\n         * // => ['0', '1']\n         */function keys(object){return isArrayLike(object)?arrayLikeKeys(object):baseKeys(object);}/**\n         * Creates an array of the own and inherited enumerable property names of `object`.\n         *\n         * **Note:** Non-object values are coerced to objects.\n         *\n         * @static\n         * @memberOf _\n         * @since 3.0.0\n         * @category Object\n         * @param {Object} object The object to query.\n         * @returns {Array} Returns the array of property names.\n         * @example\n         *\n         * function Foo() {\n         *   this.a = 1;\n         *   this.b = 2;\n         * }\n         *\n         * Foo.prototype.c = 3;\n         *\n         * _.keysIn(new Foo);\n         * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n         */function keysIn(object){return isArrayLike(object)?arrayLikeKeys(object,true):baseKeysIn(object);}/**\n         * The opposite of `_.mapValues`; this method creates an object with the\n         * same values as `object` and keys generated by running each own enumerable\n         * string keyed property of `object` thru `iteratee`. The iteratee is invoked\n         * with three arguments: (value, key, object).\n         *\n         * @static\n         * @memberOf _\n         * @since 3.8.0\n         * @category Object\n         * @param {Object} object The object to iterate over.\n         * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n         * @returns {Object} Returns the new mapped object.\n         * @see _.mapValues\n         * @example\n         *\n         * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {\n         *   return key + value;\n         * });\n         * // => { 'a1': 1, 'b2': 2 }\n         */function mapKeys(object,iteratee){var result={};iteratee=getIteratee(iteratee,3);baseForOwn(object,function(value,key,object){baseAssignValue(result,iteratee(value,key,object),value);});return result;}/**\n         * Creates an object with the same keys as `object` and values generated\n         * by running each own enumerable string keyed property of `object` thru\n         * `iteratee`. The iteratee is invoked with three arguments:\n         * (value, key, object).\n         *\n         * @static\n         * @memberOf _\n         * @since 2.4.0\n         * @category Object\n         * @param {Object} object The object to iterate over.\n         * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n         * @returns {Object} Returns the new mapped object.\n         * @see _.mapKeys\n         * @example\n         *\n         * var users = {\n         *   'fred':    { 'user': 'fred',    'age': 40 },\n         *   'pebbles': { 'user': 'pebbles', 'age': 1 }\n         * };\n         *\n         * _.mapValues(users, function(o) { return o.age; });\n         * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n         *\n         * // The `_.property` iteratee shorthand.\n         * _.mapValues(users, 'age');\n         * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n         */function mapValues(object,iteratee){var result={};iteratee=getIteratee(iteratee,3);baseForOwn(object,function(value,key,object){baseAssignValue(result,key,iteratee(value,key,object));});return result;}/**\n         * This method is like `_.assign` except that it recursively merges own and\n         * inherited enumerable string keyed properties of source objects into the\n         * destination object. Source properties that resolve to `undefined` are\n         * skipped if a destination value exists. Array and plain object properties\n         * are merged recursively. Other objects and value types are overridden by\n         * assignment. Source objects are applied from left to right. Subsequent\n         * sources overwrite property assignments of previous sources.\n         *\n         * **Note:** This method mutates `object`.\n         *\n         * @static\n         * @memberOf _\n         * @since 0.5.0\n         * @category Object\n         * @param {Object} object The destination object.\n         * @param {...Object} [sources] The source objects.\n         * @returns {Object} Returns `object`.\n         * @example\n         *\n         * var object = {\n         *   'a': [{ 'b': 2 }, { 'd': 4 }]\n         * };\n         *\n         * var other = {\n         *   'a': [{ 'c': 3 }, { 'e': 5 }]\n         * };\n         *\n         * _.merge(object, other);\n         * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n         */var merge=createAssigner(function(object,source,srcIndex){baseMerge(object,source,srcIndex);});/**\n       * This method is like `_.merge` except that it accepts `customizer` which\n       * is invoked to produce the merged values of the destination and source\n       * properties. If `customizer` returns `undefined`, merging is handled by the\n       * method instead. The `customizer` is invoked with six arguments:\n       * (objValue, srcValue, key, object, source, stack).\n       *\n       * **Note:** This method mutates `object`.\n       *\n       * @static\n       * @memberOf _\n       * @since 4.0.0\n       * @category Object\n       * @param {Object} object The destination object.\n       * @param {...Object} sources The source objects.\n       * @param {Function} customizer The function to customize assigned values.\n       * @returns {Object} Returns `object`.\n       * @example\n       *\n       * function customizer(objValue, srcValue) {\n       *   if (_.isArray(objValue)) {\n       *     return objValue.concat(srcValue);\n       *   }\n       * }\n       *\n       * var object = { 'a': [1], 'b': [2] };\n       * var other = { 'a': [3], 'b': [4] };\n       *\n       * _.mergeWith(object, other, customizer);\n       * // => { 'a': [1, 3], 'b': [2, 4] }\n       */var mergeWith=createAssigner(function(object,source,srcIndex,customizer){baseMerge(object,source,srcIndex,customizer);});/**\n       * The opposite of `_.pick`; this method creates an object composed of the\n       * own and inherited enumerable property paths of `object` that are not omitted.\n       *\n       * **Note:** This method is considerably slower than `_.pick`.\n       *\n       * @static\n       * @since 0.1.0\n       * @memberOf _\n       * @category Object\n       * @param {Object} object The source object.\n       * @param {...(string|string[])} [paths] The property paths to omit.\n       * @returns {Object} Returns the new object.\n       * @example\n       *\n       * var object = { 'a': 1, 'b': '2', 'c': 3 };\n       *\n       * _.omit(object, ['a', 'c']);\n       * // => { 'b': '2' }\n       */var omit=flatRest(function(object,paths){var result={};if(object==null){return result;}var isDeep=false;paths=arrayMap(paths,function(path){path=castPath(path,object);isDeep||(isDeep=path.length>1);return path;});copyObject(object,getAllKeysIn(object),result);if(isDeep){result=baseClone(result,CLONE_DEEP_FLAG|CLONE_FLAT_FLAG|CLONE_SYMBOLS_FLAG,customOmitClone);}var length=paths.length;while(length--){baseUnset(result,paths[length]);}return result;});/**\n       * The opposite of `_.pickBy`; this method creates an object composed of\n       * the own and inherited enumerable string keyed properties of `object` that\n       * `predicate` doesn't return truthy for. The predicate is invoked with two\n       * arguments: (value, key).\n       *\n       * @static\n       * @memberOf _\n       * @since 4.0.0\n       * @category Object\n       * @param {Object} object The source object.\n       * @param {Function} [predicate=_.identity] The function invoked per property.\n       * @returns {Object} Returns the new object.\n       * @example\n       *\n       * var object = { 'a': 1, 'b': '2', 'c': 3 };\n       *\n       * _.omitBy(object, _.isNumber);\n       * // => { 'b': '2' }\n       */function omitBy(object,predicate){return pickBy(object,negate(getIteratee(predicate)));}/**\n         * Creates an object composed of the picked `object` properties.\n         *\n         * @static\n         * @since 0.1.0\n         * @memberOf _\n         * @category Object\n         * @param {Object} object The source object.\n         * @param {...(string|string[])} [paths] The property paths to pick.\n         * @returns {Object} Returns the new object.\n         * @example\n         *\n         * var object = { 'a': 1, 'b': '2', 'c': 3 };\n         *\n         * _.pick(object, ['a', 'c']);\n         * // => { 'a': 1, 'c': 3 }\n         */var pick=flatRest(function(object,paths){return object==null?{}:basePick(object,paths);});/**\n       * Creates an object composed of the `object` properties `predicate` returns\n       * truthy for. The predicate is invoked with two arguments: (value, key).\n       *\n       * @static\n       * @memberOf _\n       * @since 4.0.0\n       * @category Object\n       * @param {Object} object The source object.\n       * @param {Function} [predicate=_.identity] The function invoked per property.\n       * @returns {Object} Returns the new object.\n       * @example\n       *\n       * var object = { 'a': 1, 'b': '2', 'c': 3 };\n       *\n       * _.pickBy(object, _.isNumber);\n       * // => { 'a': 1, 'c': 3 }\n       */function pickBy(object,predicate){if(object==null){return{};}var props=arrayMap(getAllKeysIn(object),function(prop){return[prop];});predicate=getIteratee(predicate);return basePickBy(object,props,function(value,path){return predicate(value,path[0]);});}/**\n         * This method is like `_.get` except that if the resolved value is a\n         * function it's invoked with the `this` binding of its parent object and\n         * its result is returned.\n         *\n         * @static\n         * @since 0.1.0\n         * @memberOf _\n         * @category Object\n         * @param {Object} object The object to query.\n         * @param {Array|string} path The path of the property to resolve.\n         * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n         * @returns {*} Returns the resolved value.\n         * @example\n         *\n         * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };\n         *\n         * _.result(object, 'a[0].b.c1');\n         * // => 3\n         *\n         * _.result(object, 'a[0].b.c2');\n         * // => 4\n         *\n         * _.result(object, 'a[0].b.c3', 'default');\n         * // => 'default'\n         *\n         * _.result(object, 'a[0].b.c3', _.constant('default'));\n         * // => 'default'\n         */function result(object,path,defaultValue){path=castPath(path,object);var index=-1,length=path.length;// Ensure the loop is entered when path is empty.\nif(!length){length=1;object=undefined;}while(++index<length){var value=object==null?undefined:object[toKey(path[index])];if(value===undefined){index=length;value=defaultValue;}object=isFunction(value)?value.call(object):value;}return object;}/**\n         * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n         * it's created. Arrays are created for missing index properties while objects\n         * are created for all other missing properties. Use `_.setWith` to customize\n         * `path` creation.\n         *\n         * **Note:** This method mutates `object`.\n         *\n         * @static\n         * @memberOf _\n         * @since 3.7.0\n         * @category Object\n         * @param {Object} object The object to modify.\n         * @param {Array|string} path The path of the property to set.\n         * @param {*} value The value to set.\n         * @returns {Object} Returns `object`.\n         * @example\n         *\n         * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n         *\n         * _.set(object, 'a[0].b.c', 4);\n         * console.log(object.a[0].b.c);\n         * // => 4\n         *\n         * _.set(object, ['x', '0', 'y', 'z'], 5);\n         * console.log(object.x[0].y.z);\n         * // => 5\n         */function set(object,path,value){return object==null?object:baseSet(object,path,value);}/**\n         * This method is like `_.set` except that it accepts `customizer` which is\n         * invoked to produce the objects of `path`.  If `customizer` returns `undefined`\n         * path creation is handled by the method instead. The `customizer` is invoked\n         * with three arguments: (nsValue, key, nsObject).\n         *\n         * **Note:** This method mutates `object`.\n         *\n         * @static\n         * @memberOf _\n         * @since 4.0.0\n         * @category Object\n         * @param {Object} object The object to modify.\n         * @param {Array|string} path The path of the property to set.\n         * @param {*} value The value to set.\n         * @param {Function} [customizer] The function to customize assigned values.\n         * @returns {Object} Returns `object`.\n         * @example\n         *\n         * var object = {};\n         *\n         * _.setWith(object, '[0][1]', 'a', Object);\n         * // => { '0': { '1': 'a' } }\n         */function setWith(object,path,value,customizer){customizer=typeof customizer==='function'?customizer:undefined;return object==null?object:baseSet(object,path,value,customizer);}/**\n         * Creates an array of own enumerable string keyed-value pairs for `object`\n         * which can be consumed by `_.fromPairs`. If `object` is a map or set, its\n         * entries are returned.\n         *\n         * @static\n         * @memberOf _\n         * @since 4.0.0\n         * @alias entries\n         * @category Object\n         * @param {Object} object The object to query.\n         * @returns {Array} Returns the key-value pairs.\n         * @example\n         *\n         * function Foo() {\n         *   this.a = 1;\n         *   this.b = 2;\n         * }\n         *\n         * Foo.prototype.c = 3;\n         *\n         * _.toPairs(new Foo);\n         * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)\n         */var toPairs=createToPairs(keys);/**\n         * Creates an array of own and inherited enumerable string keyed-value pairs\n         * for `object` which can be consumed by `_.fromPairs`. If `object` is a map\n         * or set, its entries are returned.\n         *\n         * @static\n         * @memberOf _\n         * @since 4.0.0\n         * @alias entriesIn\n         * @category Object\n         * @param {Object} object The object to query.\n         * @returns {Array} Returns the key-value pairs.\n         * @example\n         *\n         * function Foo() {\n         *   this.a = 1;\n         *   this.b = 2;\n         * }\n         *\n         * Foo.prototype.c = 3;\n         *\n         * _.toPairsIn(new Foo);\n         * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)\n         */var toPairsIn=createToPairs(keysIn);/**\n         * An alternative to `_.reduce`; this method transforms `object` to a new\n         * `accumulator` object which is the result of running each of its own\n         * enumerable string keyed properties thru `iteratee`, with each invocation\n         * potentially mutating the `accumulator` object. If `accumulator` is not\n         * provided, a new object with the same `[[Prototype]]` will be used. The\n         * iteratee is invoked with four arguments: (accumulator, value, key, object).\n         * Iteratee functions may exit iteration early by explicitly returning `false`.\n         *\n         * @static\n         * @memberOf _\n         * @since 1.3.0\n         * @category Object\n         * @param {Object} object The object to iterate over.\n         * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n         * @param {*} [accumulator] The custom accumulator value.\n         * @returns {*} Returns the accumulated value.\n         * @example\n         *\n         * _.transform([2, 3, 4], function(result, n) {\n         *   result.push(n *= n);\n         *   return n % 2 == 0;\n         * }, []);\n         * // => [4, 9]\n         *\n         * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n         *   (result[value] || (result[value] = [])).push(key);\n         * }, {});\n         * // => { '1': ['a', 'c'], '2': ['b'] }\n         */function transform(object,iteratee,accumulator){var isArr=isArray(object),isArrLike=isArr||isBuffer(object)||isTypedArray(object);iteratee=getIteratee(iteratee,4);if(accumulator==null){var Ctor=object&&object.constructor;if(isArrLike){accumulator=isArr?new Ctor():[];}else if(isObject(object)){accumulator=isFunction(Ctor)?baseCreate(getPrototype(object)):{};}else{accumulator={};}}(isArrLike?arrayEach:baseForOwn)(object,function(value,index,object){return iteratee(accumulator,value,index,object);});return accumulator;}/**\n         * Removes the property at `path` of `object`.\n         *\n         * **Note:** This method mutates `object`.\n         *\n         * @static\n         * @memberOf _\n         * @since 4.0.0\n         * @category Object\n         * @param {Object} object The object to modify.\n         * @param {Array|string} path The path of the property to unset.\n         * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n         * @example\n         *\n         * var object = { 'a': [{ 'b': { 'c': 7 } }] };\n         * _.unset(object, 'a[0].b.c');\n         * // => true\n         *\n         * console.log(object);\n         * // => { 'a': [{ 'b': {} }] };\n         *\n         * _.unset(object, ['a', '0', 'b', 'c']);\n         * // => true\n         *\n         * console.log(object);\n         * // => { 'a': [{ 'b': {} }] };\n         */function unset(object,path){return object==null?true:baseUnset(object,path);}/**\n         * This method is like `_.set` except that accepts `updater` to produce the\n         * value to set. Use `_.updateWith` to customize `path` creation. The `updater`\n         * is invoked with one argument: (value).\n         *\n         * **Note:** This method mutates `object`.\n         *\n         * @static\n         * @memberOf _\n         * @since 4.6.0\n         * @category Object\n         * @param {Object} object The object to modify.\n         * @param {Array|string} path The path of the property to set.\n         * @param {Function} updater The function to produce the updated value.\n         * @returns {Object} Returns `object`.\n         * @example\n         *\n         * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n         *\n         * _.update(object, 'a[0].b.c', function(n) { return n * n; });\n         * console.log(object.a[0].b.c);\n         * // => 9\n         *\n         * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });\n         * console.log(object.x[0].y.z);\n         * // => 0\n         */function update(object,path,updater){return object==null?object:baseUpdate(object,path,castFunction(updater));}/**\n         * This method is like `_.update` except that it accepts `customizer` which is\n         * invoked to produce the objects of `path`.  If `customizer` returns `undefined`\n         * path creation is handled by the method instead. The `customizer` is invoked\n         * with three arguments: (nsValue, key, nsObject).\n         *\n         * **Note:** This method mutates `object`.\n         *\n         * @static\n         * @memberOf _\n         * @since 4.6.0\n         * @category Object\n         * @param {Object} object The object to modify.\n         * @param {Array|string} path The path of the property to set.\n         * @param {Function} updater The function to produce the updated value.\n         * @param {Function} [customizer] The function to customize assigned values.\n         * @returns {Object} Returns `object`.\n         * @example\n         *\n         * var object = {};\n         *\n         * _.updateWith(object, '[0][1]', _.constant('a'), Object);\n         * // => { '0': { '1': 'a' } }\n         */function updateWith(object,path,updater,customizer){customizer=typeof customizer==='function'?customizer:undefined;return object==null?object:baseUpdate(object,path,castFunction(updater),customizer);}/**\n         * Creates an array of the own enumerable string keyed property values of `object`.\n         *\n         * **Note:** Non-object values are coerced to objects.\n         *\n         * @static\n         * @since 0.1.0\n         * @memberOf _\n         * @category Object\n         * @param {Object} object The object to query.\n         * @returns {Array} Returns the array of property values.\n         * @example\n         *\n         * function Foo() {\n         *   this.a = 1;\n         *   this.b = 2;\n         * }\n         *\n         * Foo.prototype.c = 3;\n         *\n         * _.values(new Foo);\n         * // => [1, 2] (iteration order is not guaranteed)\n         *\n         * _.values('hi');\n         * // => ['h', 'i']\n         */function values(object){return object==null?[]:baseValues(object,keys(object));}/**\n         * Creates an array of the own and inherited enumerable string keyed property\n         * values of `object`.\n         *\n         * **Note:** Non-object values are coerced to objects.\n         *\n         * @static\n         * @memberOf _\n         * @since 3.0.0\n         * @category Object\n         * @param {Object} object The object to query.\n         * @returns {Array} Returns the array of property values.\n         * @example\n         *\n         * function Foo() {\n         *   this.a = 1;\n         *   this.b = 2;\n         * }\n         *\n         * Foo.prototype.c = 3;\n         *\n         * _.valuesIn(new Foo);\n         * // => [1, 2, 3] (iteration order is not guaranteed)\n         */function valuesIn(object){return object==null?[]:baseValues(object,keysIn(object));}/* ------------------------------------------------------------------------*//**\n         * Clamps `number` within the inclusive `lower` and `upper` bounds.\n         *\n         * @static\n         * @memberOf _\n         * @since 4.0.0\n         * @category Number\n         * @param {number} number The number to clamp.\n         * @param {number} [lower] The lower bound.\n         * @param {number} upper The upper bound.\n         * @returns {number} Returns the clamped number.\n         * @example\n         *\n         * _.clamp(-10, -5, 5);\n         * // => -5\n         *\n         * _.clamp(10, -5, 5);\n         * // => 5\n         */function clamp(number,lower,upper){if(upper===undefined){upper=lower;lower=undefined;}if(upper!==undefined){upper=toNumber(upper);upper=upper===upper?upper:0;}if(lower!==undefined){lower=toNumber(lower);lower=lower===lower?lower:0;}return baseClamp(toNumber(number),lower,upper);}/**\n         * Checks if `n` is between `start` and up to, but not including, `end`. If\n         * `end` is not specified, it's set to `start` with `start` then set to `0`.\n         * If `start` is greater than `end` the params are swapped to support\n         * negative ranges.\n         *\n         * @static\n         * @memberOf _\n         * @since 3.3.0\n         * @category Number\n         * @param {number} number The number to check.\n         * @param {number} [start=0] The start of the range.\n         * @param {number} end The end of the range.\n         * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n         * @see _.range, _.rangeRight\n         * @example\n         *\n         * _.inRange(3, 2, 4);\n         * // => true\n         *\n         * _.inRange(4, 8);\n         * // => true\n         *\n         * _.inRange(4, 2);\n         * // => false\n         *\n         * _.inRange(2, 2);\n         * // => false\n         *\n         * _.inRange(1.2, 2);\n         * // => true\n         *\n         * _.inRange(5.2, 4);\n         * // => false\n         *\n         * _.inRange(-3, -2, -6);\n         * // => true\n         */function inRange(number,start,end){start=toFinite(start);if(end===undefined){end=start;start=0;}else{end=toFinite(end);}number=toNumber(number);return baseInRange(number,start,end);}/**\n         * Produces a random number between the inclusive `lower` and `upper` bounds.\n         * If only one argument is provided a number between `0` and the given number\n         * is returned. If `floating` is `true`, or either `lower` or `upper` are\n         * floats, a floating-point number is returned instead of an integer.\n         *\n         * **Note:** JavaScript follows the IEEE-754 standard for resolving\n         * floating-point values which can produce unexpected results.\n         *\n         * @static\n         * @memberOf _\n         * @since 0.7.0\n         * @category Number\n         * @param {number} [lower=0] The lower bound.\n         * @param {number} [upper=1] The upper bound.\n         * @param {boolean} [floating] Specify returning a floating-point number.\n         * @returns {number} Returns the random number.\n         * @example\n         *\n         * _.random(0, 5);\n         * // => an integer between 0 and 5\n         *\n         * _.random(5);\n         * // => also an integer between 0 and 5\n         *\n         * _.random(5, true);\n         * // => a floating-point number between 0 and 5\n         *\n         * _.random(1.2, 5.2);\n         * // => a floating-point number between 1.2 and 5.2\n         */function random(lower,upper,floating){if(floating&&typeof floating!=='boolean'&&isIterateeCall(lower,upper,floating)){upper=floating=undefined;}if(floating===undefined){if(typeof upper==='boolean'){floating=upper;upper=undefined;}else if(typeof lower==='boolean'){floating=lower;lower=undefined;}}if(lower===undefined&&upper===undefined){lower=0;upper=1;}else{lower=toFinite(lower);if(upper===undefined){upper=lower;lower=0;}else{upper=toFinite(upper);}}if(lower>upper){var temp=lower;lower=upper;upper=temp;}if(floating||lower%1||upper%1){var rand=nativeRandom();return nativeMin(lower+rand*(upper-lower+freeParseFloat('1e-'+((rand+'').length-1))),upper);}return baseRandom(lower,upper);}/* ------------------------------------------------------------------------*//**\n         * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n         *\n         * @static\n         * @memberOf _\n         * @since 3.0.0\n         * @category String\n         * @param {string} [string=''] The string to convert.\n         * @returns {string} Returns the camel cased string.\n         * @example\n         *\n         * _.camelCase('Foo Bar');\n         * // => 'fooBar'\n         *\n         * _.camelCase('--foo-bar--');\n         * // => 'fooBar'\n         *\n         * _.camelCase('__FOO_BAR__');\n         * // => 'fooBar'\n         */var camelCase=createCompounder(function(result,word,index){word=word.toLowerCase();return result+(index?capitalize(word):word);});/**\n       * Converts the first character of `string` to upper case and the remaining\n       * to lower case.\n       *\n       * @static\n       * @memberOf _\n       * @since 3.0.0\n       * @category String\n       * @param {string} [string=''] The string to capitalize.\n       * @returns {string} Returns the capitalized string.\n       * @example\n       *\n       * _.capitalize('FRED');\n       * // => 'Fred'\n       */function capitalize(string){return upperFirst(toString(string).toLowerCase());}/**\n         * Deburrs `string` by converting\n         * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n         * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n         * letters to basic Latin letters and removing\n         * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n         *\n         * @static\n         * @memberOf _\n         * @since 3.0.0\n         * @category String\n         * @param {string} [string=''] The string to deburr.\n         * @returns {string} Returns the deburred string.\n         * @example\n         *\n         * _.deburr('déjà vu');\n         * // => 'deja vu'\n         */function deburr(string){string=toString(string);return string&&string.replace(reLatin,deburrLetter).replace(reComboMark,'');}/**\n         * Checks if `string` ends with the given target string.\n         *\n         * @static\n         * @memberOf _\n         * @since 3.0.0\n         * @category String\n         * @param {string} [string=''] The string to inspect.\n         * @param {string} [target] The string to search for.\n         * @param {number} [position=string.length] The position to search up to.\n         * @returns {boolean} Returns `true` if `string` ends with `target`,\n         *  else `false`.\n         * @example\n         *\n         * _.endsWith('abc', 'c');\n         * // => true\n         *\n         * _.endsWith('abc', 'b');\n         * // => false\n         *\n         * _.endsWith('abc', 'b', 2);\n         * // => true\n         */function endsWith(string,target,position){string=toString(string);target=baseToString(target);var length=string.length;position=position===undefined?length:baseClamp(toInteger(position),0,length);var end=position;position-=target.length;return position>=0&&string.slice(position,end)==target;}/**\n         * Converts the characters \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n         * corresponding HTML entities.\n         *\n         * **Note:** No other characters are escaped. To escape additional\n         * characters use a third-party library like [_he_](https://mths.be/he).\n         *\n         * Though the \">\" character is escaped for symmetry, characters like\n         * \">\" and \"/\" don't need escaping in HTML and have no special meaning\n         * unless they're part of a tag or unquoted attribute value. See\n         * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\n         * (under \"semi-related fun fact\") for more details.\n         *\n         * When working with HTML you should always\n         * [quote attribute values](http://wonko.com/post/html-escaping) to reduce\n         * XSS vectors.\n         *\n         * @static\n         * @since 0.1.0\n         * @memberOf _\n         * @category String\n         * @param {string} [string=''] The string to escape.\n         * @returns {string} Returns the escaped string.\n         * @example\n         *\n         * _.escape('fred, barney, & pebbles');\n         * // => 'fred, barney, &amp; pebbles'\n         */function escape(string){string=toString(string);return string&&reHasUnescapedHtml.test(string)?string.replace(reUnescapedHtml,escapeHtmlChar):string;}/**\n         * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n         * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n         *\n         * @static\n         * @memberOf _\n         * @since 3.0.0\n         * @category String\n         * @param {string} [string=''] The string to escape.\n         * @returns {string} Returns the escaped string.\n         * @example\n         *\n         * _.escapeRegExp('[lodash](https://lodash.com/)');\n         * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n         */function escapeRegExp(string){string=toString(string);return string&&reHasRegExpChar.test(string)?string.replace(reRegExpChar,'\\\\$&'):string;}/**\n         * Converts `string` to\n         * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).\n         *\n         * @static\n         * @memberOf _\n         * @since 3.0.0\n         * @category String\n         * @param {string} [string=''] The string to convert.\n         * @returns {string} Returns the kebab cased string.\n         * @example\n         *\n         * _.kebabCase('Foo Bar');\n         * // => 'foo-bar'\n         *\n         * _.kebabCase('fooBar');\n         * // => 'foo-bar'\n         *\n         * _.kebabCase('__FOO_BAR__');\n         * // => 'foo-bar'\n         */var kebabCase=createCompounder(function(result,word,index){return result+(index?'-':'')+word.toLowerCase();});/**\n       * Converts `string`, as space separated words, to lower case.\n       *\n       * @static\n       * @memberOf _\n       * @since 4.0.0\n       * @category String\n       * @param {string} [string=''] The string to convert.\n       * @returns {string} Returns the lower cased string.\n       * @example\n       *\n       * _.lowerCase('--Foo-Bar--');\n       * // => 'foo bar'\n       *\n       * _.lowerCase('fooBar');\n       * // => 'foo bar'\n       *\n       * _.lowerCase('__FOO_BAR__');\n       * // => 'foo bar'\n       */var lowerCase=createCompounder(function(result,word,index){return result+(index?' ':'')+word.toLowerCase();});/**\n       * Converts the first character of `string` to lower case.\n       *\n       * @static\n       * @memberOf _\n       * @since 4.0.0\n       * @category String\n       * @param {string} [string=''] The string to convert.\n       * @returns {string} Returns the converted string.\n       * @example\n       *\n       * _.lowerFirst('Fred');\n       * // => 'fred'\n       *\n       * _.lowerFirst('FRED');\n       * // => 'fRED'\n       */var lowerFirst=createCaseFirst('toLowerCase');/**\n         * Pads `string` on the left and right sides if it's shorter than `length`.\n         * Padding characters are truncated if they can't be evenly divided by `length`.\n         *\n         * @static\n         * @memberOf _\n         * @since 3.0.0\n         * @category String\n         * @param {string} [string=''] The string to pad.\n         * @param {number} [length=0] The padding length.\n         * @param {string} [chars=' '] The string used as padding.\n         * @returns {string} Returns the padded string.\n         * @example\n         *\n         * _.pad('abc', 8);\n         * // => '  abc   '\n         *\n         * _.pad('abc', 8, '_-');\n         * // => '_-abc_-_'\n         *\n         * _.pad('abc', 3);\n         * // => 'abc'\n         */function pad(string,length,chars){string=toString(string);length=toInteger(length);var strLength=length?stringSize(string):0;if(!length||strLength>=length){return string;}var mid=(length-strLength)/2;return createPadding(nativeFloor(mid),chars)+string+createPadding(nativeCeil(mid),chars);}/**\n         * Pads `string` on the right side if it's shorter than `length`. Padding\n         * characters are truncated if they exceed `length`.\n         *\n         * @static\n         * @memberOf _\n         * @since 4.0.0\n         * @category String\n         * @param {string} [string=''] The string to pad.\n         * @param {number} [length=0] The padding length.\n         * @param {string} [chars=' '] The string used as padding.\n         * @returns {string} Returns the padded string.\n         * @example\n         *\n         * _.padEnd('abc', 6);\n         * // => 'abc   '\n         *\n         * _.padEnd('abc', 6, '_-');\n         * // => 'abc_-_'\n         *\n         * _.padEnd('abc', 3);\n         * // => 'abc'\n         */function padEnd(string,length,chars){string=toString(string);length=toInteger(length);var strLength=length?stringSize(string):0;return length&&strLength<length?string+createPadding(length-strLength,chars):string;}/**\n         * Pads `string` on the left side if it's shorter than `length`. Padding\n         * characters are truncated if they exceed `length`.\n         *\n         * @static\n         * @memberOf _\n         * @since 4.0.0\n         * @category String\n         * @param {string} [string=''] The string to pad.\n         * @param {number} [length=0] The padding length.\n         * @param {string} [chars=' '] The string used as padding.\n         * @returns {string} Returns the padded string.\n         * @example\n         *\n         * _.padStart('abc', 6);\n         * // => '   abc'\n         *\n         * _.padStart('abc', 6, '_-');\n         * // => '_-_abc'\n         *\n         * _.padStart('abc', 3);\n         * // => 'abc'\n         */function padStart(string,length,chars){string=toString(string);length=toInteger(length);var strLength=length?stringSize(string):0;return length&&strLength<length?createPadding(length-strLength,chars)+string:string;}/**\n         * Converts `string` to an integer of the specified radix. If `radix` is\n         * `undefined` or `0`, a `radix` of `10` is used unless `value` is a\n         * hexadecimal, in which case a `radix` of `16` is used.\n         *\n         * **Note:** This method aligns with the\n         * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.\n         *\n         * @static\n         * @memberOf _\n         * @since 1.1.0\n         * @category String\n         * @param {string} string The string to convert.\n         * @param {number} [radix=10] The radix to interpret `value` by.\n         * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n         * @returns {number} Returns the converted integer.\n         * @example\n         *\n         * _.parseInt('08');\n         * // => 8\n         *\n         * _.map(['6', '08', '10'], _.parseInt);\n         * // => [6, 8, 10]\n         */function parseInt(string,radix,guard){if(guard||radix==null){radix=0;}else if(radix){radix=+radix;}return nativeParseInt(toString(string).replace(reTrimStart,''),radix||0);}/**\n         * Repeats the given string `n` times.\n         *\n         * @static\n         * @memberOf _\n         * @since 3.0.0\n         * @category String\n         * @param {string} [string=''] The string to repeat.\n         * @param {number} [n=1] The number of times to repeat the string.\n         * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n         * @returns {string} Returns the repeated string.\n         * @example\n         *\n         * _.repeat('*', 3);\n         * // => '***'\n         *\n         * _.repeat('abc', 2);\n         * // => 'abcabc'\n         *\n         * _.repeat('abc', 0);\n         * // => ''\n         */function repeat(string,n,guard){if(guard?isIterateeCall(string,n,guard):n===undefined){n=1;}else{n=toInteger(n);}return baseRepeat(toString(string),n);}/**\n         * Replaces matches for `pattern` in `string` with `replacement`.\n         *\n         * **Note:** This method is based on\n         * [`String#replace`](https://mdn.io/String/replace).\n         *\n         * @static\n         * @memberOf _\n         * @since 4.0.0\n         * @category String\n         * @param {string} [string=''] The string to modify.\n         * @param {RegExp|string} pattern The pattern to replace.\n         * @param {Function|string} replacement The match replacement.\n         * @returns {string} Returns the modified string.\n         * @example\n         *\n         * _.replace('Hi Fred', 'Fred', 'Barney');\n         * // => 'Hi Barney'\n         */function replace(){var args=arguments,string=toString(args[0]);return args.length<3?string:string.replace(args[1],args[2]);}/**\n         * Converts `string` to\n         * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n         *\n         * @static\n         * @memberOf _\n         * @since 3.0.0\n         * @category String\n         * @param {string} [string=''] The string to convert.\n         * @returns {string} Returns the snake cased string.\n         * @example\n         *\n         * _.snakeCase('Foo Bar');\n         * // => 'foo_bar'\n         *\n         * _.snakeCase('fooBar');\n         * // => 'foo_bar'\n         *\n         * _.snakeCase('--FOO-BAR--');\n         * // => 'foo_bar'\n         */var snakeCase=createCompounder(function(result,word,index){return result+(index?'_':'')+word.toLowerCase();});/**\n       * Splits `string` by `separator`.\n       *\n       * **Note:** This method is based on\n       * [`String#split`](https://mdn.io/String/split).\n       *\n       * @static\n       * @memberOf _\n       * @since 4.0.0\n       * @category String\n       * @param {string} [string=''] The string to split.\n       * @param {RegExp|string} separator The separator pattern to split by.\n       * @param {number} [limit] The length to truncate results to.\n       * @returns {Array} Returns the string segments.\n       * @example\n       *\n       * _.split('a-b-c', '-', 2);\n       * // => ['a', 'b']\n       */function split(string,separator,limit){if(limit&&typeof limit!=='number'&&isIterateeCall(string,separator,limit)){separator=limit=undefined;}limit=limit===undefined?MAX_ARRAY_LENGTH:limit>>>0;if(!limit){return[];}string=toString(string);if(string&&(typeof separator==='string'||separator!=null&&!isRegExp(separator))){separator=baseToString(separator);if(!separator&&hasUnicode(string)){return castSlice(stringToArray(string),0,limit);}}return string.split(separator,limit);}/**\n         * Converts `string` to\n         * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).\n         *\n         * @static\n         * @memberOf _\n         * @since 3.1.0\n         * @category String\n         * @param {string} [string=''] The string to convert.\n         * @returns {string} Returns the start cased string.\n         * @example\n         *\n         * _.startCase('--foo-bar--');\n         * // => 'Foo Bar'\n         *\n         * _.startCase('fooBar');\n         * // => 'Foo Bar'\n         *\n         * _.startCase('__FOO_BAR__');\n         * // => 'FOO BAR'\n         */var startCase=createCompounder(function(result,word,index){return result+(index?' ':'')+upperFirst(word);});/**\n       * Checks if `string` starts with the given target string.\n       *\n       * @static\n       * @memberOf _\n       * @since 3.0.0\n       * @category String\n       * @param {string} [string=''] The string to inspect.\n       * @param {string} [target] The string to search for.\n       * @param {number} [position=0] The position to search from.\n       * @returns {boolean} Returns `true` if `string` starts with `target`,\n       *  else `false`.\n       * @example\n       *\n       * _.startsWith('abc', 'a');\n       * // => true\n       *\n       * _.startsWith('abc', 'b');\n       * // => false\n       *\n       * _.startsWith('abc', 'b', 1);\n       * // => true\n       */function startsWith(string,target,position){string=toString(string);position=position==null?0:baseClamp(toInteger(position),0,string.length);target=baseToString(target);return string.slice(position,position+target.length)==target;}/**\n         * Creates a compiled template function that can interpolate data properties\n         * in \"interpolate\" delimiters, HTML-escape interpolated data properties in\n         * \"escape\" delimiters, and execute JavaScript in \"evaluate\" delimiters. Data\n         * properties may be accessed as free variables in the template. If a setting\n         * object is given, it takes precedence over `_.templateSettings` values.\n         *\n         * **Note:** In the development build `_.template` utilizes\n         * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)\n         * for easier debugging.\n         *\n         * For more information on precompiling templates see\n         * [lodash's custom builds documentation](https://lodash.com/custom-builds).\n         *\n         * For more information on Chrome extension sandboxes see\n         * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).\n         *\n         * @static\n         * @since 0.1.0\n         * @memberOf _\n         * @category String\n         * @param {string} [string=''] The template string.\n         * @param {Object} [options={}] The options object.\n         * @param {RegExp} [options.escape=_.templateSettings.escape]\n         *  The HTML \"escape\" delimiter.\n         * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]\n         *  The \"evaluate\" delimiter.\n         * @param {Object} [options.imports=_.templateSettings.imports]\n         *  An object to import into the template as free variables.\n         * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]\n         *  The \"interpolate\" delimiter.\n         * @param {string} [options.sourceURL='lodash.templateSources[n]']\n         *  The sourceURL of the compiled template.\n         * @param {string} [options.variable='obj']\n         *  The data object variable name.\n         * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n         * @returns {Function} Returns the compiled template function.\n         * @example\n         *\n         * // Use the \"interpolate\" delimiter to create a compiled template.\n         * var compiled = _.template('hello <%= user %>!');\n         * compiled({ 'user': 'fred' });\n         * // => 'hello fred!'\n         *\n         * // Use the HTML \"escape\" delimiter to escape data property values.\n         * var compiled = _.template('<b><%- value %></b>');\n         * compiled({ 'value': '<script>' });\n         * // => '<b>&lt;script&gt;</b>'\n         *\n         * // Use the \"evaluate\" delimiter to execute JavaScript and generate HTML.\n         * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');\n         * compiled({ 'users': ['fred', 'barney'] });\n         * // => '<li>fred</li><li>barney</li>'\n         *\n         * // Use the internal `print` function in \"evaluate\" delimiters.\n         * var compiled = _.template('<% print(\"hello \" + user); %>!');\n         * compiled({ 'user': 'barney' });\n         * // => 'hello barney!'\n         *\n         * // Use the ES template literal delimiter as an \"interpolate\" delimiter.\n         * // Disable support by replacing the \"interpolate\" delimiter.\n         * var compiled = _.template('hello ${ user }!');\n         * compiled({ 'user': 'pebbles' });\n         * // => 'hello pebbles!'\n         *\n         * // Use backslashes to treat delimiters as plain text.\n         * var compiled = _.template('<%= \"\\\\<%- value %\\\\>\" %>');\n         * compiled({ 'value': 'ignored' });\n         * // => '<%- value %>'\n         *\n         * // Use the `imports` option to import `jQuery` as `jq`.\n         * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';\n         * var compiled = _.template(text, { 'imports': { 'jq': jQuery } });\n         * compiled({ 'users': ['fred', 'barney'] });\n         * // => '<li>fred</li><li>barney</li>'\n         *\n         * // Use the `sourceURL` option to specify a custom sourceURL for the template.\n         * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });\n         * compiled(data);\n         * // => Find the source of \"greeting.jst\" under the Sources tab or Resources panel of the web inspector.\n         *\n         * // Use the `variable` option to ensure a with-statement isn't used in the compiled template.\n         * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });\n         * compiled.source;\n         * // => function(data) {\n         * //   var __t, __p = '';\n         * //   __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!';\n         * //   return __p;\n         * // }\n         *\n         * // Use custom template delimiters.\n         * _.templateSettings.interpolate = /{{([\\s\\S]+?)}}/g;\n         * var compiled = _.template('hello {{ user }}!');\n         * compiled({ 'user': 'mustache' });\n         * // => 'hello mustache!'\n         *\n         * // Use the `source` property to inline compiled templates for meaningful\n         * // line numbers in error messages and stack traces.\n         * fs.writeFileSync(path.join(process.cwd(), 'jst.js'), '\\\n         *   var JST = {\\\n         *     \"main\": ' + _.template(mainText).source + '\\\n         *   };\\\n         * ');\n         */function template(string,options,guard){// Based on John Resig's `tmpl` implementation\n// (http://ejohn.org/blog/javascript-micro-templating/)\n// and Laura Doktorova's doT.js (https://github.com/olado/doT).\nvar settings=lodash.templateSettings;if(guard&&isIterateeCall(string,options,guard)){options=undefined;}string=toString(string);options=assignInWith({},options,settings,customDefaultsAssignIn);var imports=assignInWith({},options.imports,settings.imports,customDefaultsAssignIn),importsKeys=keys(imports),importsValues=baseValues(imports,importsKeys);var isEscaping,isEvaluating,index=0,interpolate=options.interpolate||reNoMatch,source=\"__p += '\";// Compile the regexp to match each delimiter.\nvar reDelimiters=RegExp((options.escape||reNoMatch).source+'|'+interpolate.source+'|'+(interpolate===reInterpolate?reEsTemplate:reNoMatch).source+'|'+(options.evaluate||reNoMatch).source+'|$','g');// Use a sourceURL for easier debugging.\nvar sourceURL='//# sourceURL='+('sourceURL'in options?options.sourceURL:'lodash.templateSources['+ ++templateCounter+']')+'\\n';string.replace(reDelimiters,function(match,escapeValue,interpolateValue,esTemplateValue,evaluateValue,offset){interpolateValue||(interpolateValue=esTemplateValue);// Escape characters that can't be included in string literals.\nsource+=string.slice(index,offset).replace(reUnescapedString,escapeStringChar);// Replace delimiters with snippets.\nif(escapeValue){isEscaping=true;source+=\"' +\\n__e(\"+escapeValue+\") +\\n'\";}if(evaluateValue){isEvaluating=true;source+=\"';\\n\"+evaluateValue+\";\\n__p += '\";}if(interpolateValue){source+=\"' +\\n((__t = (\"+interpolateValue+\")) == null ? '' : __t) +\\n'\";}index=offset+match.length;// The JS engine embedded in Adobe products needs `match` returned in\n// order to produce the correct `offset` value.\nreturn match;});source+=\"';\\n\";// If `variable` is not specified wrap a with-statement around the generated\n// code to add the data object to the top of the scope chain.\nvar variable=options.variable;if(!variable){source='with (obj) {\\n'+source+'\\n}\\n';}// Cleanup code by stripping empty strings.\nsource=(isEvaluating?source.replace(reEmptyStringLeading,''):source).replace(reEmptyStringMiddle,'$1').replace(reEmptyStringTrailing,'$1;');// Frame code as the function body.\nsource='function('+(variable||'obj')+') {\\n'+(variable?'':'obj || (obj = {});\\n')+\"var __t, __p = ''\"+(isEscaping?', __e = _.escape':'')+(isEvaluating?', __j = Array.prototype.join;\\n'+\"function print() { __p += __j.call(arguments, '') }\\n\":';\\n')+source+'return __p\\n}';var result=attempt(function(){return Function(importsKeys,sourceURL+'return '+source).apply(undefined,importsValues);});// Provide the compiled function's source by its `toString` method or\n// the `source` property as a convenience for inlining compiled templates.\nresult.source=source;if(isError(result)){throw result;}return result;}/**\n         * Converts `string`, as a whole, to lower case just like\n         * [String#toLowerCase](https://mdn.io/toLowerCase).\n         *\n         * @static\n         * @memberOf _\n         * @since 4.0.0\n         * @category String\n         * @param {string} [string=''] The string to convert.\n         * @returns {string} Returns the lower cased string.\n         * @example\n         *\n         * _.toLower('--Foo-Bar--');\n         * // => '--foo-bar--'\n         *\n         * _.toLower('fooBar');\n         * // => 'foobar'\n         *\n         * _.toLower('__FOO_BAR__');\n         * // => '__foo_bar__'\n         */function toLower(value){return toString(value).toLowerCase();}/**\n         * Converts `string`, as a whole, to upper case just like\n         * [String#toUpperCase](https://mdn.io/toUpperCase).\n         *\n         * @static\n         * @memberOf _\n         * @since 4.0.0\n         * @category String\n         * @param {string} [string=''] The string to convert.\n         * @returns {string} Returns the upper cased string.\n         * @example\n         *\n         * _.toUpper('--foo-bar--');\n         * // => '--FOO-BAR--'\n         *\n         * _.toUpper('fooBar');\n         * // => 'FOOBAR'\n         *\n         * _.toUpper('__foo_bar__');\n         * // => '__FOO_BAR__'\n         */function toUpper(value){return toString(value).toUpperCase();}/**\n         * Removes leading and trailing whitespace or specified characters from `string`.\n         *\n         * @static\n         * @memberOf _\n         * @since 3.0.0\n         * @category String\n         * @param {string} [string=''] The string to trim.\n         * @param {string} [chars=whitespace] The characters to trim.\n         * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n         * @returns {string} Returns the trimmed string.\n         * @example\n         *\n         * _.trim('  abc  ');\n         * // => 'abc'\n         *\n         * _.trim('-_-abc-_-', '_-');\n         * // => 'abc'\n         *\n         * _.map(['  foo  ', '  bar  '], _.trim);\n         * // => ['foo', 'bar']\n         */function trim(string,chars,guard){string=toString(string);if(string&&(guard||chars===undefined)){return string.replace(reTrim,'');}if(!string||!(chars=baseToString(chars))){return string;}var strSymbols=stringToArray(string),chrSymbols=stringToArray(chars),start=charsStartIndex(strSymbols,chrSymbols),end=charsEndIndex(strSymbols,chrSymbols)+1;return castSlice(strSymbols,start,end).join('');}/**\n         * Removes trailing whitespace or specified characters from `string`.\n         *\n         * @static\n         * @memberOf _\n         * @since 4.0.0\n         * @category String\n         * @param {string} [string=''] The string to trim.\n         * @param {string} [chars=whitespace] The characters to trim.\n         * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n         * @returns {string} Returns the trimmed string.\n         * @example\n         *\n         * _.trimEnd('  abc  ');\n         * // => '  abc'\n         *\n         * _.trimEnd('-_-abc-_-', '_-');\n         * // => '-_-abc'\n         */function trimEnd(string,chars,guard){string=toString(string);if(string&&(guard||chars===undefined)){return string.replace(reTrimEnd,'');}if(!string||!(chars=baseToString(chars))){return string;}var strSymbols=stringToArray(string),end=charsEndIndex(strSymbols,stringToArray(chars))+1;return castSlice(strSymbols,0,end).join('');}/**\n         * Removes leading whitespace or specified characters from `string`.\n         *\n         * @static\n         * @memberOf _\n         * @since 4.0.0\n         * @category String\n         * @param {string} [string=''] The string to trim.\n         * @param {string} [chars=whitespace] The characters to trim.\n         * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n         * @returns {string} Returns the trimmed string.\n         * @example\n         *\n         * _.trimStart('  abc  ');\n         * // => 'abc  '\n         *\n         * _.trimStart('-_-abc-_-', '_-');\n         * // => 'abc-_-'\n         */function trimStart(string,chars,guard){string=toString(string);if(string&&(guard||chars===undefined)){return string.replace(reTrimStart,'');}if(!string||!(chars=baseToString(chars))){return string;}var strSymbols=stringToArray(string),start=charsStartIndex(strSymbols,stringToArray(chars));return castSlice(strSymbols,start).join('');}/**\n         * Truncates `string` if it's longer than the given maximum string length.\n         * The last characters of the truncated string are replaced with the omission\n         * string which defaults to \"...\".\n         *\n         * @static\n         * @memberOf _\n         * @since 4.0.0\n         * @category String\n         * @param {string} [string=''] The string to truncate.\n         * @param {Object} [options={}] The options object.\n         * @param {number} [options.length=30] The maximum string length.\n         * @param {string} [options.omission='...'] The string to indicate text is omitted.\n         * @param {RegExp|string} [options.separator] The separator pattern to truncate to.\n         * @returns {string} Returns the truncated string.\n         * @example\n         *\n         * _.truncate('hi-diddly-ho there, neighborino');\n         * // => 'hi-diddly-ho there, neighbo...'\n         *\n         * _.truncate('hi-diddly-ho there, neighborino', {\n         *   'length': 24,\n         *   'separator': ' '\n         * });\n         * // => 'hi-diddly-ho there,...'\n         *\n         * _.truncate('hi-diddly-ho there, neighborino', {\n         *   'length': 24,\n         *   'separator': /,? +/\n         * });\n         * // => 'hi-diddly-ho there...'\n         *\n         * _.truncate('hi-diddly-ho there, neighborino', {\n         *   'omission': ' [...]'\n         * });\n         * // => 'hi-diddly-ho there, neig [...]'\n         */function truncate(string,options){var length=DEFAULT_TRUNC_LENGTH,omission=DEFAULT_TRUNC_OMISSION;if(isObject(options)){var separator='separator'in options?options.separator:separator;length='length'in options?toInteger(options.length):length;omission='omission'in options?baseToString(options.omission):omission;}string=toString(string);var strLength=string.length;if(hasUnicode(string)){var strSymbols=stringToArray(string);strLength=strSymbols.length;}if(length>=strLength){return string;}var end=length-stringSize(omission);if(end<1){return omission;}var result=strSymbols?castSlice(strSymbols,0,end).join(''):string.slice(0,end);if(separator===undefined){return result+omission;}if(strSymbols){end+=result.length-end;}if(isRegExp(separator)){if(string.slice(end).search(separator)){var match,substring=result;if(!separator.global){separator=RegExp(separator.source,toString(reFlags.exec(separator))+'g');}separator.lastIndex=0;while(match=separator.exec(substring)){var newEnd=match.index;}result=result.slice(0,newEnd===undefined?end:newEnd);}}else if(string.indexOf(baseToString(separator),end)!=end){var index=result.lastIndexOf(separator);if(index>-1){result=result.slice(0,index);}}return result+omission;}/**\n         * The inverse of `_.escape`; this method converts the HTML entities\n         * `&amp;`, `&lt;`, `&gt;`, `&quot;`, and `&#39;` in `string` to\n         * their corresponding characters.\n         *\n         * **Note:** No other HTML entities are unescaped. To unescape additional\n         * HTML entities use a third-party library like [_he_](https://mths.be/he).\n         *\n         * @static\n         * @memberOf _\n         * @since 0.6.0\n         * @category String\n         * @param {string} [string=''] The string to unescape.\n         * @returns {string} Returns the unescaped string.\n         * @example\n         *\n         * _.unescape('fred, barney, &amp; pebbles');\n         * // => 'fred, barney, & pebbles'\n         */function unescape(string){string=toString(string);return string&&reHasEscapedHtml.test(string)?string.replace(reEscapedHtml,unescapeHtmlChar):string;}/**\n         * Converts `string`, as space separated words, to upper case.\n         *\n         * @static\n         * @memberOf _\n         * @since 4.0.0\n         * @category String\n         * @param {string} [string=''] The string to convert.\n         * @returns {string} Returns the upper cased string.\n         * @example\n         *\n         * _.upperCase('--foo-bar');\n         * // => 'FOO BAR'\n         *\n         * _.upperCase('fooBar');\n         * // => 'FOO BAR'\n         *\n         * _.upperCase('__foo_bar__');\n         * // => 'FOO BAR'\n         */var upperCase=createCompounder(function(result,word,index){return result+(index?' ':'')+word.toUpperCase();});/**\n       * Converts the first character of `string` to upper case.\n       *\n       * @static\n       * @memberOf _\n       * @since 4.0.0\n       * @category String\n       * @param {string} [string=''] The string to convert.\n       * @returns {string} Returns the converted string.\n       * @example\n       *\n       * _.upperFirst('fred');\n       * // => 'Fred'\n       *\n       * _.upperFirst('FRED');\n       * // => 'FRED'\n       */var upperFirst=createCaseFirst('toUpperCase');/**\n         * Splits `string` into an array of its words.\n         *\n         * @static\n         * @memberOf _\n         * @since 3.0.0\n         * @category String\n         * @param {string} [string=''] The string to inspect.\n         * @param {RegExp|string} [pattern] The pattern to match words.\n         * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n         * @returns {Array} Returns the words of `string`.\n         * @example\n         *\n         * _.words('fred, barney, & pebbles');\n         * // => ['fred', 'barney', 'pebbles']\n         *\n         * _.words('fred, barney, & pebbles', /[^, ]+/g);\n         * // => ['fred', 'barney', '&', 'pebbles']\n         */function words(string,pattern,guard){string=toString(string);pattern=guard?undefined:pattern;if(pattern===undefined){return hasUnicodeWord(string)?unicodeWords(string):asciiWords(string);}return string.match(pattern)||[];}/* ------------------------------------------------------------------------*//**\n         * Attempts to invoke `func`, returning either the result or the caught error\n         * object. Any additional arguments are provided to `func` when it's invoked.\n         *\n         * @static\n         * @memberOf _\n         * @since 3.0.0\n         * @category Util\n         * @param {Function} func The function to attempt.\n         * @param {...*} [args] The arguments to invoke `func` with.\n         * @returns {*} Returns the `func` result or error object.\n         * @example\n         *\n         * // Avoid throwing errors for invalid selectors.\n         * var elements = _.attempt(function(selector) {\n         *   return document.querySelectorAll(selector);\n         * }, '>_>');\n         *\n         * if (_.isError(elements)) {\n         *   elements = [];\n         * }\n         */var attempt=baseRest(function(func,args){try{return apply(func,undefined,args);}catch(e){return isError(e)?e:new Error(e);}});/**\n       * Binds methods of an object to the object itself, overwriting the existing\n       * method.\n       *\n       * **Note:** This method doesn't set the \"length\" property of bound functions.\n       *\n       * @static\n       * @since 0.1.0\n       * @memberOf _\n       * @category Util\n       * @param {Object} object The object to bind and assign the bound methods to.\n       * @param {...(string|string[])} methodNames The object method names to bind.\n       * @returns {Object} Returns `object`.\n       * @example\n       *\n       * var view = {\n       *   'label': 'docs',\n       *   'click': function() {\n       *     console.log('clicked ' + this.label);\n       *   }\n       * };\n       *\n       * _.bindAll(view, ['click']);\n       * jQuery(element).on('click', view.click);\n       * // => Logs 'clicked docs' when clicked.\n       */var bindAll=flatRest(function(object,methodNames){arrayEach(methodNames,function(key){key=toKey(key);baseAssignValue(object,key,bind(object[key],object));});return object;});/**\n       * Creates a function that iterates over `pairs` and invokes the corresponding\n       * function of the first predicate to return truthy. The predicate-function\n       * pairs are invoked with the `this` binding and arguments of the created\n       * function.\n       *\n       * @static\n       * @memberOf _\n       * @since 4.0.0\n       * @category Util\n       * @param {Array} pairs The predicate-function pairs.\n       * @returns {Function} Returns the new composite function.\n       * @example\n       *\n       * var func = _.cond([\n       *   [_.matches({ 'a': 1 }),           _.constant('matches A')],\n       *   [_.conforms({ 'b': _.isNumber }), _.constant('matches B')],\n       *   [_.stubTrue,                      _.constant('no match')]\n       * ]);\n       *\n       * func({ 'a': 1, 'b': 2 });\n       * // => 'matches A'\n       *\n       * func({ 'a': 0, 'b': 1 });\n       * // => 'matches B'\n       *\n       * func({ 'a': '1', 'b': '2' });\n       * // => 'no match'\n       */function cond(pairs){var length=pairs==null?0:pairs.length,toIteratee=getIteratee();pairs=!length?[]:arrayMap(pairs,function(pair){if(typeof pair[1]!=='function'){throw new TypeError(FUNC_ERROR_TEXT);}return[toIteratee(pair[0]),pair[1]];});return baseRest(function(args){var index=-1;while(++index<length){var pair=pairs[index];if(apply(pair[0],this,args)){return apply(pair[1],this,args);}}});}/**\n         * Creates a function that invokes the predicate properties of `source` with\n         * the corresponding property values of a given object, returning `true` if\n         * all predicates return truthy, else `false`.\n         *\n         * **Note:** The created function is equivalent to `_.conformsTo` with\n         * `source` partially applied.\n         *\n         * @static\n         * @memberOf _\n         * @since 4.0.0\n         * @category Util\n         * @param {Object} source The object of property predicates to conform to.\n         * @returns {Function} Returns the new spec function.\n         * @example\n         *\n         * var objects = [\n         *   { 'a': 2, 'b': 1 },\n         *   { 'a': 1, 'b': 2 }\n         * ];\n         *\n         * _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } }));\n         * // => [{ 'a': 1, 'b': 2 }]\n         */function conforms(source){return baseConforms(baseClone(source,CLONE_DEEP_FLAG));}/**\n         * Creates a function that returns `value`.\n         *\n         * @static\n         * @memberOf _\n         * @since 2.4.0\n         * @category Util\n         * @param {*} value The value to return from the new function.\n         * @returns {Function} Returns the new constant function.\n         * @example\n         *\n         * var objects = _.times(2, _.constant({ 'a': 1 }));\n         *\n         * console.log(objects);\n         * // => [{ 'a': 1 }, { 'a': 1 }]\n         *\n         * console.log(objects[0] === objects[1]);\n         * // => true\n         */function constant(value){return function(){return value;};}/**\n         * Checks `value` to determine whether a default value should be returned in\n         * its place. The `defaultValue` is returned if `value` is `NaN`, `null`,\n         * or `undefined`.\n         *\n         * @static\n         * @memberOf _\n         * @since 4.14.0\n         * @category Util\n         * @param {*} value The value to check.\n         * @param {*} defaultValue The default value.\n         * @returns {*} Returns the resolved value.\n         * @example\n         *\n         * _.defaultTo(1, 10);\n         * // => 1\n         *\n         * _.defaultTo(undefined, 10);\n         * // => 10\n         */function defaultTo(value,defaultValue){return value==null||value!==value?defaultValue:value;}/**\n         * Creates a function that returns the result of invoking the given functions\n         * with the `this` binding of the created function, where each successive\n         * invocation is supplied the return value of the previous.\n         *\n         * @static\n         * @memberOf _\n         * @since 3.0.0\n         * @category Util\n         * @param {...(Function|Function[])} [funcs] The functions to invoke.\n         * @returns {Function} Returns the new composite function.\n         * @see _.flowRight\n         * @example\n         *\n         * function square(n) {\n         *   return n * n;\n         * }\n         *\n         * var addSquare = _.flow([_.add, square]);\n         * addSquare(1, 2);\n         * // => 9\n         */var flow=createFlow();/**\n         * This method is like `_.flow` except that it creates a function that\n         * invokes the given functions from right to left.\n         *\n         * @static\n         * @since 3.0.0\n         * @memberOf _\n         * @category Util\n         * @param {...(Function|Function[])} [funcs] The functions to invoke.\n         * @returns {Function} Returns the new composite function.\n         * @see _.flow\n         * @example\n         *\n         * function square(n) {\n         *   return n * n;\n         * }\n         *\n         * var addSquare = _.flowRight([square, _.add]);\n         * addSquare(1, 2);\n         * // => 9\n         */var flowRight=createFlow(true);/**\n         * This method returns the first argument it receives.\n         *\n         * @static\n         * @since 0.1.0\n         * @memberOf _\n         * @category Util\n         * @param {*} value Any value.\n         * @returns {*} Returns `value`.\n         * @example\n         *\n         * var object = { 'a': 1 };\n         *\n         * console.log(_.identity(object) === object);\n         * // => true\n         */function identity(value){return value;}/**\n         * Creates a function that invokes `func` with the arguments of the created\n         * function. If `func` is a property name, the created function returns the\n         * property value for a given element. If `func` is an array or object, the\n         * created function returns `true` for elements that contain the equivalent\n         * source properties, otherwise it returns `false`.\n         *\n         * @static\n         * @since 4.0.0\n         * @memberOf _\n         * @category Util\n         * @param {*} [func=_.identity] The value to convert to a callback.\n         * @returns {Function} Returns the callback.\n         * @example\n         *\n         * var users = [\n         *   { 'user': 'barney', 'age': 36, 'active': true },\n         *   { 'user': 'fred',   'age': 40, 'active': false }\n         * ];\n         *\n         * // The `_.matches` iteratee shorthand.\n         * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true }));\n         * // => [{ 'user': 'barney', 'age': 36, 'active': true }]\n         *\n         * // The `_.matchesProperty` iteratee shorthand.\n         * _.filter(users, _.iteratee(['user', 'fred']));\n         * // => [{ 'user': 'fred', 'age': 40 }]\n         *\n         * // The `_.property` iteratee shorthand.\n         * _.map(users, _.iteratee('user'));\n         * // => ['barney', 'fred']\n         *\n         * // Create custom iteratee shorthands.\n         * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) {\n         *   return !_.isRegExp(func) ? iteratee(func) : function(string) {\n         *     return func.test(string);\n         *   };\n         * });\n         *\n         * _.filter(['abc', 'def'], /ef/);\n         * // => ['def']\n         */function iteratee(func){return baseIteratee(typeof func==='function'?func:baseClone(func,CLONE_DEEP_FLAG));}/**\n         * Creates a function that performs a partial deep comparison between a given\n         * object and `source`, returning `true` if the given object has equivalent\n         * property values, else `false`.\n         *\n         * **Note:** The created function is equivalent to `_.isMatch` with `source`\n         * partially applied.\n         *\n         * Partial comparisons will match empty array and empty object `source`\n         * values against any array or object value, respectively. See `_.isEqual`\n         * for a list of supported value comparisons.\n         *\n         * @static\n         * @memberOf _\n         * @since 3.0.0\n         * @category Util\n         * @param {Object} source The object of property values to match.\n         * @returns {Function} Returns the new spec function.\n         * @example\n         *\n         * var objects = [\n         *   { 'a': 1, 'b': 2, 'c': 3 },\n         *   { 'a': 4, 'b': 5, 'c': 6 }\n         * ];\n         *\n         * _.filter(objects, _.matches({ 'a': 4, 'c': 6 }));\n         * // => [{ 'a': 4, 'b': 5, 'c': 6 }]\n         */function matches(source){return baseMatches(baseClone(source,CLONE_DEEP_FLAG));}/**\n         * Creates a function that performs a partial deep comparison between the\n         * value at `path` of a given object to `srcValue`, returning `true` if the\n         * object value is equivalent, else `false`.\n         *\n         * **Note:** Partial comparisons will match empty array and empty object\n         * `srcValue` values against any array or object value, respectively. See\n         * `_.isEqual` for a list of supported value comparisons.\n         *\n         * @static\n         * @memberOf _\n         * @since 3.2.0\n         * @category Util\n         * @param {Array|string} path The path of the property to get.\n         * @param {*} srcValue The value to match.\n         * @returns {Function} Returns the new spec function.\n         * @example\n         *\n         * var objects = [\n         *   { 'a': 1, 'b': 2, 'c': 3 },\n         *   { 'a': 4, 'b': 5, 'c': 6 }\n         * ];\n         *\n         * _.find(objects, _.matchesProperty('a', 4));\n         * // => { 'a': 4, 'b': 5, 'c': 6 }\n         */function matchesProperty(path,srcValue){return baseMatchesProperty(path,baseClone(srcValue,CLONE_DEEP_FLAG));}/**\n         * Creates a function that invokes the method at `path` of a given object.\n         * Any additional arguments are provided to the invoked method.\n         *\n         * @static\n         * @memberOf _\n         * @since 3.7.0\n         * @category Util\n         * @param {Array|string} path The path of the method to invoke.\n         * @param {...*} [args] The arguments to invoke the method with.\n         * @returns {Function} Returns the new invoker function.\n         * @example\n         *\n         * var objects = [\n         *   { 'a': { 'b': _.constant(2) } },\n         *   { 'a': { 'b': _.constant(1) } }\n         * ];\n         *\n         * _.map(objects, _.method('a.b'));\n         * // => [2, 1]\n         *\n         * _.map(objects, _.method(['a', 'b']));\n         * // => [2, 1]\n         */var method=baseRest(function(path,args){return function(object){return baseInvoke(object,path,args);};});/**\n       * The opposite of `_.method`; this method creates a function that invokes\n       * the method at a given path of `object`. Any additional arguments are\n       * provided to the invoked method.\n       *\n       * @static\n       * @memberOf _\n       * @since 3.7.0\n       * @category Util\n       * @param {Object} object The object to query.\n       * @param {...*} [args] The arguments to invoke the method with.\n       * @returns {Function} Returns the new invoker function.\n       * @example\n       *\n       * var array = _.times(3, _.constant),\n       *     object = { 'a': array, 'b': array, 'c': array };\n       *\n       * _.map(['a[2]', 'c[0]'], _.methodOf(object));\n       * // => [2, 0]\n       *\n       * _.map([['a', '2'], ['c', '0']], _.methodOf(object));\n       * // => [2, 0]\n       */var methodOf=baseRest(function(object,args){return function(path){return baseInvoke(object,path,args);};});/**\n       * Adds all own enumerable string keyed function properties of a source\n       * object to the destination object. If `object` is a function, then methods\n       * are added to its prototype as well.\n       *\n       * **Note:** Use `_.runInContext` to create a pristine `lodash` function to\n       * avoid conflicts caused by modifying the original.\n       *\n       * @static\n       * @since 0.1.0\n       * @memberOf _\n       * @category Util\n       * @param {Function|Object} [object=lodash] The destination object.\n       * @param {Object} source The object of functions to add.\n       * @param {Object} [options={}] The options object.\n       * @param {boolean} [options.chain=true] Specify whether mixins are chainable.\n       * @returns {Function|Object} Returns `object`.\n       * @example\n       *\n       * function vowels(string) {\n       *   return _.filter(string, function(v) {\n       *     return /[aeiou]/i.test(v);\n       *   });\n       * }\n       *\n       * _.mixin({ 'vowels': vowels });\n       * _.vowels('fred');\n       * // => ['e']\n       *\n       * _('fred').vowels().value();\n       * // => ['e']\n       *\n       * _.mixin({ 'vowels': vowels }, { 'chain': false });\n       * _('fred').vowels();\n       * // => ['e']\n       */function mixin(object,source,options){var props=keys(source),methodNames=baseFunctions(source,props);if(options==null&&!(isObject(source)&&(methodNames.length||!props.length))){options=source;source=object;object=this;methodNames=baseFunctions(source,keys(source));}var chain=!(isObject(options)&&'chain'in options)||!!options.chain,isFunc=isFunction(object);arrayEach(methodNames,function(methodName){var func=source[methodName];object[methodName]=func;if(isFunc){object.prototype[methodName]=function(){var chainAll=this.__chain__;if(chain||chainAll){var result=object(this.__wrapped__),actions=result.__actions__=copyArray(this.__actions__);actions.push({func:func,args:arguments,thisArg:object});result.__chain__=chainAll;return result;}return func.apply(object,arrayPush([this.value()],arguments));};}});return object;}/**\n         * Reverts the `_` variable to its previous value and returns a reference to\n         * the `lodash` function.\n         *\n         * @static\n         * @since 0.1.0\n         * @memberOf _\n         * @category Util\n         * @returns {Function} Returns the `lodash` function.\n         * @example\n         *\n         * var lodash = _.noConflict();\n         */function noConflict(){if(root._===this){root._=oldDash;}return this;}/**\n         * This method returns `undefined`.\n         *\n         * @static\n         * @memberOf _\n         * @since 2.3.0\n         * @category Util\n         * @example\n         *\n         * _.times(2, _.noop);\n         * // => [undefined, undefined]\n         */function noop(){}// No operation performed.\n/**\n         * Creates a function that gets the argument at index `n`. If `n` is negative,\n         * the nth argument from the end is returned.\n         *\n         * @static\n         * @memberOf _\n         * @since 4.0.0\n         * @category Util\n         * @param {number} [n=0] The index of the argument to return.\n         * @returns {Function} Returns the new pass-thru function.\n         * @example\n         *\n         * var func = _.nthArg(1);\n         * func('a', 'b', 'c', 'd');\n         * // => 'b'\n         *\n         * var func = _.nthArg(-2);\n         * func('a', 'b', 'c', 'd');\n         * // => 'c'\n         */function nthArg(n){n=toInteger(n);return baseRest(function(args){return baseNth(args,n);});}/**\n         * Creates a function that invokes `iteratees` with the arguments it receives\n         * and returns their results.\n         *\n         * @static\n         * @memberOf _\n         * @since 4.0.0\n         * @category Util\n         * @param {...(Function|Function[])} [iteratees=[_.identity]]\n         *  The iteratees to invoke.\n         * @returns {Function} Returns the new function.\n         * @example\n         *\n         * var func = _.over([Math.max, Math.min]);\n         *\n         * func(1, 2, 3, 4);\n         * // => [4, 1]\n         */var over=createOver(arrayMap);/**\n         * Creates a function that checks if **all** of the `predicates` return\n         * truthy when invoked with the arguments it receives.\n         *\n         * @static\n         * @memberOf _\n         * @since 4.0.0\n         * @category Util\n         * @param {...(Function|Function[])} [predicates=[_.identity]]\n         *  The predicates to check.\n         * @returns {Function} Returns the new function.\n         * @example\n         *\n         * var func = _.overEvery([Boolean, isFinite]);\n         *\n         * func('1');\n         * // => true\n         *\n         * func(null);\n         * // => false\n         *\n         * func(NaN);\n         * // => false\n         */var overEvery=createOver(arrayEvery);/**\n         * Creates a function that checks if **any** of the `predicates` return\n         * truthy when invoked with the arguments it receives.\n         *\n         * @static\n         * @memberOf _\n         * @since 4.0.0\n         * @category Util\n         * @param {...(Function|Function[])} [predicates=[_.identity]]\n         *  The predicates to check.\n         * @returns {Function} Returns the new function.\n         * @example\n         *\n         * var func = _.overSome([Boolean, isFinite]);\n         *\n         * func('1');\n         * // => true\n         *\n         * func(null);\n         * // => true\n         *\n         * func(NaN);\n         * // => false\n         */var overSome=createOver(arraySome);/**\n         * Creates a function that returns the value at `path` of a given object.\n         *\n         * @static\n         * @memberOf _\n         * @since 2.4.0\n         * @category Util\n         * @param {Array|string} path The path of the property to get.\n         * @returns {Function} Returns the new accessor function.\n         * @example\n         *\n         * var objects = [\n         *   { 'a': { 'b': 2 } },\n         *   { 'a': { 'b': 1 } }\n         * ];\n         *\n         * _.map(objects, _.property('a.b'));\n         * // => [2, 1]\n         *\n         * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n         * // => [1, 2]\n         */function property(path){return isKey(path)?baseProperty(toKey(path)):basePropertyDeep(path);}/**\n         * The opposite of `_.property`; this method creates a function that returns\n         * the value at a given path of `object`.\n         *\n         * @static\n         * @memberOf _\n         * @since 3.0.0\n         * @category Util\n         * @param {Object} object The object to query.\n         * @returns {Function} Returns the new accessor function.\n         * @example\n         *\n         * var array = [0, 1, 2],\n         *     object = { 'a': array, 'b': array, 'c': array };\n         *\n         * _.map(['a[2]', 'c[0]'], _.propertyOf(object));\n         * // => [2, 0]\n         *\n         * _.map([['a', '2'], ['c', '0']], _.propertyOf(object));\n         * // => [2, 0]\n         */function propertyOf(object){return function(path){return object==null?undefined:baseGet(object,path);};}/**\n         * Creates an array of numbers (positive and/or negative) progressing from\n         * `start` up to, but not including, `end`. A step of `-1` is used if a negative\n         * `start` is specified without an `end` or `step`. If `end` is not specified,\n         * it's set to `start` with `start` then set to `0`.\n         *\n         * **Note:** JavaScript follows the IEEE-754 standard for resolving\n         * floating-point values which can produce unexpected results.\n         *\n         * @static\n         * @since 0.1.0\n         * @memberOf _\n         * @category Util\n         * @param {number} [start=0] The start of the range.\n         * @param {number} end The end of the range.\n         * @param {number} [step=1] The value to increment or decrement by.\n         * @returns {Array} Returns the range of numbers.\n         * @see _.inRange, _.rangeRight\n         * @example\n         *\n         * _.range(4);\n         * // => [0, 1, 2, 3]\n         *\n         * _.range(-4);\n         * // => [0, -1, -2, -3]\n         *\n         * _.range(1, 5);\n         * // => [1, 2, 3, 4]\n         *\n         * _.range(0, 20, 5);\n         * // => [0, 5, 10, 15]\n         *\n         * _.range(0, -4, -1);\n         * // => [0, -1, -2, -3]\n         *\n         * _.range(1, 4, 0);\n         * // => [1, 1, 1]\n         *\n         * _.range(0);\n         * // => []\n         */var range=createRange();/**\n         * This method is like `_.range` except that it populates values in\n         * descending order.\n         *\n         * @static\n         * @memberOf _\n         * @since 4.0.0\n         * @category Util\n         * @param {number} [start=0] The start of the range.\n         * @param {number} end The end of the range.\n         * @param {number} [step=1] The value to increment or decrement by.\n         * @returns {Array} Returns the range of numbers.\n         * @see _.inRange, _.range\n         * @example\n         *\n         * _.rangeRight(4);\n         * // => [3, 2, 1, 0]\n         *\n         * _.rangeRight(-4);\n         * // => [-3, -2, -1, 0]\n         *\n         * _.rangeRight(1, 5);\n         * // => [4, 3, 2, 1]\n         *\n         * _.rangeRight(0, 20, 5);\n         * // => [15, 10, 5, 0]\n         *\n         * _.rangeRight(0, -4, -1);\n         * // => [-3, -2, -1, 0]\n         *\n         * _.rangeRight(1, 4, 0);\n         * // => [1, 1, 1]\n         *\n         * _.rangeRight(0);\n         * // => []\n         */var rangeRight=createRange(true);/**\n         * This method returns a new empty array.\n         *\n         * @static\n         * @memberOf _\n         * @since 4.13.0\n         * @category Util\n         * @returns {Array} Returns the new empty array.\n         * @example\n         *\n         * var arrays = _.times(2, _.stubArray);\n         *\n         * console.log(arrays);\n         * // => [[], []]\n         *\n         * console.log(arrays[0] === arrays[1]);\n         * // => false\n         */function stubArray(){return[];}/**\n         * This method returns `false`.\n         *\n         * @static\n         * @memberOf _\n         * @since 4.13.0\n         * @category Util\n         * @returns {boolean} Returns `false`.\n         * @example\n         *\n         * _.times(2, _.stubFalse);\n         * // => [false, false]\n         */function stubFalse(){return false;}/**\n         * This method returns a new empty object.\n         *\n         * @static\n         * @memberOf _\n         * @since 4.13.0\n         * @category Util\n         * @returns {Object} Returns the new empty object.\n         * @example\n         *\n         * var objects = _.times(2, _.stubObject);\n         *\n         * console.log(objects);\n         * // => [{}, {}]\n         *\n         * console.log(objects[0] === objects[1]);\n         * // => false\n         */function stubObject(){return{};}/**\n         * This method returns an empty string.\n         *\n         * @static\n         * @memberOf _\n         * @since 4.13.0\n         * @category Util\n         * @returns {string} Returns the empty string.\n         * @example\n         *\n         * _.times(2, _.stubString);\n         * // => ['', '']\n         */function stubString(){return'';}/**\n         * This method returns `true`.\n         *\n         * @static\n         * @memberOf _\n         * @since 4.13.0\n         * @category Util\n         * @returns {boolean} Returns `true`.\n         * @example\n         *\n         * _.times(2, _.stubTrue);\n         * // => [true, true]\n         */function stubTrue(){return true;}/**\n         * Invokes the iteratee `n` times, returning an array of the results of\n         * each invocation. The iteratee is invoked with one argument; (index).\n         *\n         * @static\n         * @since 0.1.0\n         * @memberOf _\n         * @category Util\n         * @param {number} n The number of times to invoke `iteratee`.\n         * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n         * @returns {Array} Returns the array of results.\n         * @example\n         *\n         * _.times(3, String);\n         * // => ['0', '1', '2']\n         *\n         *  _.times(4, _.constant(0));\n         * // => [0, 0, 0, 0]\n         */function times(n,iteratee){n=toInteger(n);if(n<1||n>MAX_SAFE_INTEGER){return[];}var index=MAX_ARRAY_LENGTH,length=nativeMin(n,MAX_ARRAY_LENGTH);iteratee=getIteratee(iteratee);n-=MAX_ARRAY_LENGTH;var result=baseTimes(length,iteratee);while(++index<n){iteratee(index);}return result;}/**\n         * Converts `value` to a property path array.\n         *\n         * @static\n         * @memberOf _\n         * @since 4.0.0\n         * @category Util\n         * @param {*} value The value to convert.\n         * @returns {Array} Returns the new property path array.\n         * @example\n         *\n         * _.toPath('a.b.c');\n         * // => ['a', 'b', 'c']\n         *\n         * _.toPath('a[0].b.c');\n         * // => ['a', '0', 'b', 'c']\n         */function toPath(value){if(isArray(value)){return arrayMap(value,toKey);}return isSymbol(value)?[value]:copyArray(stringToPath(toString(value)));}/**\n         * Generates a unique ID. If `prefix` is given, the ID is appended to it.\n         *\n         * @static\n         * @since 0.1.0\n         * @memberOf _\n         * @category Util\n         * @param {string} [prefix=''] The value to prefix the ID with.\n         * @returns {string} Returns the unique ID.\n         * @example\n         *\n         * _.uniqueId('contact_');\n         * // => 'contact_104'\n         *\n         * _.uniqueId();\n         * // => '105'\n         */function uniqueId(prefix){var id=++idCounter;return toString(prefix)+id;}/* ------------------------------------------------------------------------*//**\n         * Adds two numbers.\n         *\n         * @static\n         * @memberOf _\n         * @since 3.4.0\n         * @category Math\n         * @param {number} augend The first number in an addition.\n         * @param {number} addend The second number in an addition.\n         * @returns {number} Returns the total.\n         * @example\n         *\n         * _.add(6, 4);\n         * // => 10\n         */var add=createMathOperation(function(augend,addend){return augend+addend;},0);/**\n       * Computes `number` rounded up to `precision`.\n       *\n       * @static\n       * @memberOf _\n       * @since 3.10.0\n       * @category Math\n       * @param {number} number The number to round up.\n       * @param {number} [precision=0] The precision to round up to.\n       * @returns {number} Returns the rounded up number.\n       * @example\n       *\n       * _.ceil(4.006);\n       * // => 5\n       *\n       * _.ceil(6.004, 2);\n       * // => 6.01\n       *\n       * _.ceil(6040, -2);\n       * // => 6100\n       */var ceil=createRound('ceil');/**\n         * Divide two numbers.\n         *\n         * @static\n         * @memberOf _\n         * @since 4.7.0\n         * @category Math\n         * @param {number} dividend The first number in a division.\n         * @param {number} divisor The second number in a division.\n         * @returns {number} Returns the quotient.\n         * @example\n         *\n         * _.divide(6, 4);\n         * // => 1.5\n         */var divide=createMathOperation(function(dividend,divisor){return dividend/divisor;},1);/**\n       * Computes `number` rounded down to `precision`.\n       *\n       * @static\n       * @memberOf _\n       * @since 3.10.0\n       * @category Math\n       * @param {number} number The number to round down.\n       * @param {number} [precision=0] The precision to round down to.\n       * @returns {number} Returns the rounded down number.\n       * @example\n       *\n       * _.floor(4.006);\n       * // => 4\n       *\n       * _.floor(0.046, 2);\n       * // => 0.04\n       *\n       * _.floor(4060, -2);\n       * // => 4000\n       */var floor=createRound('floor');/**\n         * Computes the maximum value of `array`. If `array` is empty or falsey,\n         * `undefined` is returned.\n         *\n         * @static\n         * @since 0.1.0\n         * @memberOf _\n         * @category Math\n         * @param {Array} array The array to iterate over.\n         * @returns {*} Returns the maximum value.\n         * @example\n         *\n         * _.max([4, 2, 8, 6]);\n         * // => 8\n         *\n         * _.max([]);\n         * // => undefined\n         */function max(array){return array&&array.length?baseExtremum(array,identity,baseGt):undefined;}/**\n         * This method is like `_.max` except that it accepts `iteratee` which is\n         * invoked for each element in `array` to generate the criterion by which\n         * the value is ranked. The iteratee is invoked with one argument: (value).\n         *\n         * @static\n         * @memberOf _\n         * @since 4.0.0\n         * @category Math\n         * @param {Array} array The array to iterate over.\n         * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n         * @returns {*} Returns the maximum value.\n         * @example\n         *\n         * var objects = [{ 'n': 1 }, { 'n': 2 }];\n         *\n         * _.maxBy(objects, function(o) { return o.n; });\n         * // => { 'n': 2 }\n         *\n         * // The `_.property` iteratee shorthand.\n         * _.maxBy(objects, 'n');\n         * // => { 'n': 2 }\n         */function maxBy(array,iteratee){return array&&array.length?baseExtremum(array,getIteratee(iteratee,2),baseGt):undefined;}/**\n         * Computes the mean of the values in `array`.\n         *\n         * @static\n         * @memberOf _\n         * @since 4.0.0\n         * @category Math\n         * @param {Array} array The array to iterate over.\n         * @returns {number} Returns the mean.\n         * @example\n         *\n         * _.mean([4, 2, 8, 6]);\n         * // => 5\n         */function mean(array){return baseMean(array,identity);}/**\n         * This method is like `_.mean` except that it accepts `iteratee` which is\n         * invoked for each element in `array` to generate the value to be averaged.\n         * The iteratee is invoked with one argument: (value).\n         *\n         * @static\n         * @memberOf _\n         * @since 4.7.0\n         * @category Math\n         * @param {Array} array The array to iterate over.\n         * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n         * @returns {number} Returns the mean.\n         * @example\n         *\n         * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n         *\n         * _.meanBy(objects, function(o) { return o.n; });\n         * // => 5\n         *\n         * // The `_.property` iteratee shorthand.\n         * _.meanBy(objects, 'n');\n         * // => 5\n         */function meanBy(array,iteratee){return baseMean(array,getIteratee(iteratee,2));}/**\n         * Computes the minimum value of `array`. If `array` is empty or falsey,\n         * `undefined` is returned.\n         *\n         * @static\n         * @since 0.1.0\n         * @memberOf _\n         * @category Math\n         * @param {Array} array The array to iterate over.\n         * @returns {*} Returns the minimum value.\n         * @example\n         *\n         * _.min([4, 2, 8, 6]);\n         * // => 2\n         *\n         * _.min([]);\n         * // => undefined\n         */function min(array){return array&&array.length?baseExtremum(array,identity,baseLt):undefined;}/**\n         * This method is like `_.min` except that it accepts `iteratee` which is\n         * invoked for each element in `array` to generate the criterion by which\n         * the value is ranked. The iteratee is invoked with one argument: (value).\n         *\n         * @static\n         * @memberOf _\n         * @since 4.0.0\n         * @category Math\n         * @param {Array} array The array to iterate over.\n         * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n         * @returns {*} Returns the minimum value.\n         * @example\n         *\n         * var objects = [{ 'n': 1 }, { 'n': 2 }];\n         *\n         * _.minBy(objects, function(o) { return o.n; });\n         * // => { 'n': 1 }\n         *\n         * // The `_.property` iteratee shorthand.\n         * _.minBy(objects, 'n');\n         * // => { 'n': 1 }\n         */function minBy(array,iteratee){return array&&array.length?baseExtremum(array,getIteratee(iteratee,2),baseLt):undefined;}/**\n         * Multiply two numbers.\n         *\n         * @static\n         * @memberOf _\n         * @since 4.7.0\n         * @category Math\n         * @param {number} multiplier The first number in a multiplication.\n         * @param {number} multiplicand The second number in a multiplication.\n         * @returns {number} Returns the product.\n         * @example\n         *\n         * _.multiply(6, 4);\n         * // => 24\n         */var multiply=createMathOperation(function(multiplier,multiplicand){return multiplier*multiplicand;},1);/**\n       * Computes `number` rounded to `precision`.\n       *\n       * @static\n       * @memberOf _\n       * @since 3.10.0\n       * @category Math\n       * @param {number} number The number to round.\n       * @param {number} [precision=0] The precision to round to.\n       * @returns {number} Returns the rounded number.\n       * @example\n       *\n       * _.round(4.006);\n       * // => 4\n       *\n       * _.round(4.006, 2);\n       * // => 4.01\n       *\n       * _.round(4060, -2);\n       * // => 4100\n       */var round=createRound('round');/**\n         * Subtract two numbers.\n         *\n         * @static\n         * @memberOf _\n         * @since 4.0.0\n         * @category Math\n         * @param {number} minuend The first number in a subtraction.\n         * @param {number} subtrahend The second number in a subtraction.\n         * @returns {number} Returns the difference.\n         * @example\n         *\n         * _.subtract(6, 4);\n         * // => 2\n         */var subtract=createMathOperation(function(minuend,subtrahend){return minuend-subtrahend;},0);/**\n       * Computes the sum of the values in `array`.\n       *\n       * @static\n       * @memberOf _\n       * @since 3.4.0\n       * @category Math\n       * @param {Array} array The array to iterate over.\n       * @returns {number} Returns the sum.\n       * @example\n       *\n       * _.sum([4, 2, 8, 6]);\n       * // => 20\n       */function sum(array){return array&&array.length?baseSum(array,identity):0;}/**\n         * This method is like `_.sum` except that it accepts `iteratee` which is\n         * invoked for each element in `array` to generate the value to be summed.\n         * The iteratee is invoked with one argument: (value).\n         *\n         * @static\n         * @memberOf _\n         * @since 4.0.0\n         * @category Math\n         * @param {Array} array The array to iterate over.\n         * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n         * @returns {number} Returns the sum.\n         * @example\n         *\n         * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n         *\n         * _.sumBy(objects, function(o) { return o.n; });\n         * // => 20\n         *\n         * // The `_.property` iteratee shorthand.\n         * _.sumBy(objects, 'n');\n         * // => 20\n         */function sumBy(array,iteratee){return array&&array.length?baseSum(array,getIteratee(iteratee,2)):0;}/* ------------------------------------------------------------------------*/// Add methods that return wrapped values in chain sequences.\nlodash.after=after;lodash.ary=ary;lodash.assign=assign;lodash.assignIn=assignIn;lodash.assignInWith=assignInWith;lodash.assignWith=assignWith;lodash.at=at;lodash.before=before;lodash.bind=bind;lodash.bindAll=bindAll;lodash.bindKey=bindKey;lodash.castArray=castArray;lodash.chain=chain;lodash.chunk=chunk;lodash.compact=compact;lodash.concat=concat;lodash.cond=cond;lodash.conforms=conforms;lodash.constant=constant;lodash.countBy=countBy;lodash.create=create;lodash.curry=curry;lodash.curryRight=curryRight;lodash.debounce=debounce;lodash.defaults=defaults;lodash.defaultsDeep=defaultsDeep;lodash.defer=defer;lodash.delay=delay;lodash.difference=difference;lodash.differenceBy=differenceBy;lodash.differenceWith=differenceWith;lodash.drop=drop;lodash.dropRight=dropRight;lodash.dropRightWhile=dropRightWhile;lodash.dropWhile=dropWhile;lodash.fill=fill;lodash.filter=filter;lodash.flatMap=flatMap;lodash.flatMapDeep=flatMapDeep;lodash.flatMapDepth=flatMapDepth;lodash.flatten=flatten;lodash.flattenDeep=flattenDeep;lodash.flattenDepth=flattenDepth;lodash.flip=flip;lodash.flow=flow;lodash.flowRight=flowRight;lodash.fromPairs=fromPairs;lodash.functions=functions;lodash.functionsIn=functionsIn;lodash.groupBy=groupBy;lodash.initial=initial;lodash.intersection=intersection;lodash.intersectionBy=intersectionBy;lodash.intersectionWith=intersectionWith;lodash.invert=invert;lodash.invertBy=invertBy;lodash.invokeMap=invokeMap;lodash.iteratee=iteratee;lodash.keyBy=keyBy;lodash.keys=keys;lodash.keysIn=keysIn;lodash.map=map;lodash.mapKeys=mapKeys;lodash.mapValues=mapValues;lodash.matches=matches;lodash.matchesProperty=matchesProperty;lodash.memoize=memoize;lodash.merge=merge;lodash.mergeWith=mergeWith;lodash.method=method;lodash.methodOf=methodOf;lodash.mixin=mixin;lodash.negate=negate;lodash.nthArg=nthArg;lodash.omit=omit;lodash.omitBy=omitBy;lodash.once=once;lodash.orderBy=orderBy;lodash.over=over;lodash.overArgs=overArgs;lodash.overEvery=overEvery;lodash.overSome=overSome;lodash.partial=partial;lodash.partialRight=partialRight;lodash.partition=partition;lodash.pick=pick;lodash.pickBy=pickBy;lodash.property=property;lodash.propertyOf=propertyOf;lodash.pull=pull;lodash.pullAll=pullAll;lodash.pullAllBy=pullAllBy;lodash.pullAllWith=pullAllWith;lodash.pullAt=pullAt;lodash.range=range;lodash.rangeRight=rangeRight;lodash.rearg=rearg;lodash.reject=reject;lodash.remove=remove;lodash.rest=rest;lodash.reverse=reverse;lodash.sampleSize=sampleSize;lodash.set=set;lodash.setWith=setWith;lodash.shuffle=shuffle;lodash.slice=slice;lodash.sortBy=sortBy;lodash.sortedUniq=sortedUniq;lodash.sortedUniqBy=sortedUniqBy;lodash.split=split;lodash.spread=spread;lodash.tail=tail;lodash.take=take;lodash.takeRight=takeRight;lodash.takeRightWhile=takeRightWhile;lodash.takeWhile=takeWhile;lodash.tap=tap;lodash.throttle=throttle;lodash.thru=thru;lodash.toArray=toArray;lodash.toPairs=toPairs;lodash.toPairsIn=toPairsIn;lodash.toPath=toPath;lodash.toPlainObject=toPlainObject;lodash.transform=transform;lodash.unary=unary;lodash.union=union;lodash.unionBy=unionBy;lodash.unionWith=unionWith;lodash.uniq=uniq;lodash.uniqBy=uniqBy;lodash.uniqWith=uniqWith;lodash.unset=unset;lodash.unzip=unzip;lodash.unzipWith=unzipWith;lodash.update=update;lodash.updateWith=updateWith;lodash.values=values;lodash.valuesIn=valuesIn;lodash.without=without;lodash.words=words;lodash.wrap=wrap;lodash.xor=xor;lodash.xorBy=xorBy;lodash.xorWith=xorWith;lodash.zip=zip;lodash.zipObject=zipObject;lodash.zipObjectDeep=zipObjectDeep;lodash.zipWith=zipWith;// Add aliases.\nlodash.entries=toPairs;lodash.entriesIn=toPairsIn;lodash.extend=assignIn;lodash.extendWith=assignInWith;// Add methods to `lodash.prototype`.\nmixin(lodash,lodash);/* ------------------------------------------------------------------------*/// Add methods that return unwrapped values in chain sequences.\nlodash.add=add;lodash.attempt=attempt;lodash.camelCase=camelCase;lodash.capitalize=capitalize;lodash.ceil=ceil;lodash.clamp=clamp;lodash.clone=clone;lodash.cloneDeep=cloneDeep;lodash.cloneDeepWith=cloneDeepWith;lodash.cloneWith=cloneWith;lodash.conformsTo=conformsTo;lodash.deburr=deburr;lodash.defaultTo=defaultTo;lodash.divide=divide;lodash.endsWith=endsWith;lodash.eq=eq;lodash.escape=escape;lodash.escapeRegExp=escapeRegExp;lodash.every=every;lodash.find=find;lodash.findIndex=findIndex;lodash.findKey=findKey;lodash.findLast=findLast;lodash.findLastIndex=findLastIndex;lodash.findLastKey=findLastKey;lodash.floor=floor;lodash.forEach=forEach;lodash.forEachRight=forEachRight;lodash.forIn=forIn;lodash.forInRight=forInRight;lodash.forOwn=forOwn;lodash.forOwnRight=forOwnRight;lodash.get=get;lodash.gt=gt;lodash.gte=gte;lodash.has=has;lodash.hasIn=hasIn;lodash.head=head;lodash.identity=identity;lodash.includes=includes;lodash.indexOf=indexOf;lodash.inRange=inRange;lodash.invoke=invoke;lodash.isArguments=isArguments;lodash.isArray=isArray;lodash.isArrayBuffer=isArrayBuffer;lodash.isArrayLike=isArrayLike;lodash.isArrayLikeObject=isArrayLikeObject;lodash.isBoolean=isBoolean;lodash.isBuffer=isBuffer;lodash.isDate=isDate;lodash.isElement=isElement;lodash.isEmpty=isEmpty;lodash.isEqual=isEqual;lodash.isEqualWith=isEqualWith;lodash.isError=isError;lodash.isFinite=isFinite;lodash.isFunction=isFunction;lodash.isInteger=isInteger;lodash.isLength=isLength;lodash.isMap=isMap;lodash.isMatch=isMatch;lodash.isMatchWith=isMatchWith;lodash.isNaN=isNaN;lodash.isNative=isNative;lodash.isNil=isNil;lodash.isNull=isNull;lodash.isNumber=isNumber;lodash.isObject=isObject;lodash.isObjectLike=isObjectLike;lodash.isPlainObject=isPlainObject;lodash.isRegExp=isRegExp;lodash.isSafeInteger=isSafeInteger;lodash.isSet=isSet;lodash.isString=isString;lodash.isSymbol=isSymbol;lodash.isTypedArray=isTypedArray;lodash.isUndefined=isUndefined;lodash.isWeakMap=isWeakMap;lodash.isWeakSet=isWeakSet;lodash.join=join;lodash.kebabCase=kebabCase;lodash.last=last;lodash.lastIndexOf=lastIndexOf;lodash.lowerCase=lowerCase;lodash.lowerFirst=lowerFirst;lodash.lt=lt;lodash.lte=lte;lodash.max=max;lodash.maxBy=maxBy;lodash.mean=mean;lodash.meanBy=meanBy;lodash.min=min;lodash.minBy=minBy;lodash.stubArray=stubArray;lodash.stubFalse=stubFalse;lodash.stubObject=stubObject;lodash.stubString=stubString;lodash.stubTrue=stubTrue;lodash.multiply=multiply;lodash.nth=nth;lodash.noConflict=noConflict;lodash.noop=noop;lodash.now=now;lodash.pad=pad;lodash.padEnd=padEnd;lodash.padStart=padStart;lodash.parseInt=parseInt;lodash.random=random;lodash.reduce=reduce;lodash.reduceRight=reduceRight;lodash.repeat=repeat;lodash.replace=replace;lodash.result=result;lodash.round=round;lodash.runInContext=runInContext;lodash.sample=sample;lodash.size=size;lodash.snakeCase=snakeCase;lodash.some=some;lodash.sortedIndex=sortedIndex;lodash.sortedIndexBy=sortedIndexBy;lodash.sortedIndexOf=sortedIndexOf;lodash.sortedLastIndex=sortedLastIndex;lodash.sortedLastIndexBy=sortedLastIndexBy;lodash.sortedLastIndexOf=sortedLastIndexOf;lodash.startCase=startCase;lodash.startsWith=startsWith;lodash.subtract=subtract;lodash.sum=sum;lodash.sumBy=sumBy;lodash.template=template;lodash.times=times;lodash.toFinite=toFinite;lodash.toInteger=toInteger;lodash.toLength=toLength;lodash.toLower=toLower;lodash.toNumber=toNumber;lodash.toSafeInteger=toSafeInteger;lodash.toString=toString;lodash.toUpper=toUpper;lodash.trim=trim;lodash.trimEnd=trimEnd;lodash.trimStart=trimStart;lodash.truncate=truncate;lodash.unescape=unescape;lodash.uniqueId=uniqueId;lodash.upperCase=upperCase;lodash.upperFirst=upperFirst;// Add aliases.\nlodash.each=forEach;lodash.eachRight=forEachRight;lodash.first=head;mixin(lodash,function(){var source={};baseForOwn(lodash,function(func,methodName){if(!hasOwnProperty.call(lodash.prototype,methodName)){source[methodName]=func;}});return source;}(),{chain:false});/* ------------------------------------------------------------------------*//**\n         * The semantic version number.\n         *\n         * @static\n         * @memberOf _\n         * @type {string}\n         */lodash.VERSION=VERSION;// Assign default placeholders.\narrayEach(['bind','bindKey','curry','curryRight','partial','partialRight'],function(methodName){lodash[methodName].placeholder=lodash;});// Add `LazyWrapper` methods for `_.drop` and `_.take` variants.\narrayEach(['drop','take'],function(methodName,index){LazyWrapper.prototype[methodName]=function(n){n=n===undefined?1:nativeMax(toInteger(n),0);var result=this.__filtered__&&!index?new LazyWrapper(this):this.clone();if(result.__filtered__){result.__takeCount__=nativeMin(n,result.__takeCount__);}else{result.__views__.push({size:nativeMin(n,MAX_ARRAY_LENGTH),type:methodName+(result.__dir__<0?'Right':'')});}return result;};LazyWrapper.prototype[methodName+'Right']=function(n){return this.reverse()[methodName](n).reverse();};});// Add `LazyWrapper` methods that accept an `iteratee` value.\narrayEach(['filter','map','takeWhile'],function(methodName,index){var type=index+1,isFilter=type==LAZY_FILTER_FLAG||type==LAZY_WHILE_FLAG;LazyWrapper.prototype[methodName]=function(iteratee){var result=this.clone();result.__iteratees__.push({iteratee:getIteratee(iteratee,3),type:type});result.__filtered__=result.__filtered__||isFilter;return result;};});// Add `LazyWrapper` methods for `_.head` and `_.last`.\narrayEach(['head','last'],function(methodName,index){var takeName='take'+(index?'Right':'');LazyWrapper.prototype[methodName]=function(){return this[takeName](1).value()[0];};});// Add `LazyWrapper` methods for `_.initial` and `_.tail`.\narrayEach(['initial','tail'],function(methodName,index){var dropName='drop'+(index?'':'Right');LazyWrapper.prototype[methodName]=function(){return this.__filtered__?new LazyWrapper(this):this[dropName](1);};});LazyWrapper.prototype.compact=function(){return this.filter(identity);};LazyWrapper.prototype.find=function(predicate){return this.filter(predicate).head();};LazyWrapper.prototype.findLast=function(predicate){return this.reverse().find(predicate);};LazyWrapper.prototype.invokeMap=baseRest(function(path,args){if(typeof path==='function'){return new LazyWrapper(this);}return this.map(function(value){return baseInvoke(value,path,args);});});LazyWrapper.prototype.reject=function(predicate){return this.filter(negate(getIteratee(predicate)));};LazyWrapper.prototype.slice=function(start,end){start=toInteger(start);var result=this;if(result.__filtered__&&(start>0||end<0)){return new LazyWrapper(result);}if(start<0){result=result.takeRight(-start);}else if(start){result=result.drop(start);}if(end!==undefined){end=toInteger(end);result=end<0?result.dropRight(-end):result.take(end-start);}return result;};LazyWrapper.prototype.takeRightWhile=function(predicate){return this.reverse().takeWhile(predicate).reverse();};LazyWrapper.prototype.toArray=function(){return this.take(MAX_ARRAY_LENGTH);};// Add `LazyWrapper` methods to `lodash.prototype`.\nbaseForOwn(LazyWrapper.prototype,function(func,methodName){var checkIteratee=/^(?:filter|find|map|reject)|While$/.test(methodName),isTaker=/^(?:head|last)$/.test(methodName),lodashFunc=lodash[isTaker?'take'+(methodName=='last'?'Right':''):methodName],retUnwrapped=isTaker||/^find/.test(methodName);if(!lodashFunc){return;}lodash.prototype[methodName]=function(){var value=this.__wrapped__,args=isTaker?[1]:arguments,isLazy=value instanceof LazyWrapper,iteratee=args[0],useLazy=isLazy||isArray(value);var interceptor=function interceptor(value){var result=lodashFunc.apply(lodash,arrayPush([value],args));return isTaker&&chainAll?result[0]:result;};if(useLazy&&checkIteratee&&typeof iteratee==='function'&&iteratee.length!=1){// Avoid lazy use if the iteratee has a \"length\" value other than `1`.\nisLazy=useLazy=false;}var chainAll=this.__chain__,isHybrid=!!this.__actions__.length,isUnwrapped=retUnwrapped&&!chainAll,onlyLazy=isLazy&&!isHybrid;if(!retUnwrapped&&useLazy){value=onlyLazy?value:new LazyWrapper(this);var result=func.apply(value,args);result.__actions__.push({func:thru,args:[interceptor],thisArg:undefined});return new LodashWrapper(result,chainAll);}if(isUnwrapped&&onlyLazy){return func.apply(this,args);}result=this.thru(interceptor);return isUnwrapped?isTaker?result.value()[0]:result.value():result;};});// Add `Array` methods to `lodash.prototype`.\narrayEach(['pop','push','shift','sort','splice','unshift'],function(methodName){var func=arrayProto[methodName],chainName=/^(?:push|sort|unshift)$/.test(methodName)?'tap':'thru',retUnwrapped=/^(?:pop|shift)$/.test(methodName);lodash.prototype[methodName]=function(){var args=arguments;if(retUnwrapped&&!this.__chain__){var value=this.value();return func.apply(isArray(value)?value:[],args);}return this[chainName](function(value){return func.apply(isArray(value)?value:[],args);});};});// Map minified method names to their real names.\nbaseForOwn(LazyWrapper.prototype,function(func,methodName){var lodashFunc=lodash[methodName];if(lodashFunc){var key=lodashFunc.name+'',names=realNames[key]||(realNames[key]=[]);names.push({name:methodName,func:lodashFunc});}});realNames[createHybrid(undefined,WRAP_BIND_KEY_FLAG).name]=[{name:'wrapper',func:undefined}];// Add methods to `LazyWrapper`.\nLazyWrapper.prototype.clone=lazyClone;LazyWrapper.prototype.reverse=lazyReverse;LazyWrapper.prototype.value=lazyValue;// Add chain sequence methods to the `lodash` wrapper.\nlodash.prototype.at=wrapperAt;lodash.prototype.chain=wrapperChain;lodash.prototype.commit=wrapperCommit;lodash.prototype.next=wrapperNext;lodash.prototype.plant=wrapperPlant;lodash.prototype.reverse=wrapperReverse;lodash.prototype.toJSON=lodash.prototype.valueOf=lodash.prototype.value=wrapperValue;// Add lazy aliases.\nlodash.prototype.first=lodash.prototype.head;if(symIterator){lodash.prototype[symIterator]=wrapperToIterator;}return lodash;};/* --------------------------------------------------------------------------*/// Export lodash.\nvar _=runInContext();// Some AMD build optimizers, like r.js, check for condition patterns like:\nif( true&&_typeof(__webpack_require__.amdO)==='object'&&__webpack_require__.amdO){// Expose Lodash on the global object to prevent errors when Lodash is\n// loaded by a script tag in the presence of an AMD loader.\n// See http://requirejs.org/docs/errors.html#mismatch for more details.\n// Use `_.noConflict` to remove Lodash from the global object.\nroot._=_;// Define as an anonymous module so, through path mapping, it can be\n// referenced as the \"underscore\" module.\n!(__WEBPACK_AMD_DEFINE_RESULT__ = (function(){return _;}).call(exports, __webpack_require__, exports, module),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));}// Check for `exports` after `define` in case a build optimizer adds it.\nelse if(freeModule){// Export for Node.js.\n(freeModule.exports=_)._=_;// Export for CommonJS support.\nfreeExports._=_;}else{// Export to the global object.\nroot._=_;}}).call(undefined);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdXRpbHMvbG9kYXNoLmpzIiwibWFwcGluZ3MiOiI7QUFBQSxrQ0FBYSx3RkFBd0YsbUJBQW1CLGVBQWUsK0dBQStHO0FBQ3RQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQyxzRkFBc0YsaUVBQWlFLHFGQUFxRiwySkFBMkosbUdBQW1HLHVFQUF1RSwwRkFBMEYseUdBQXlHLDBHQUEwRyw0UUFBNFEseUdBQXlHLG1IQUFtSCw0R0FBNEcsdUpBQXVKLHFMQUFxTCxnVkFBZ1YsNnBCQUE2cEIseVhBQXlYLDhHQUE4RywrRkFBK0YsR0FBRyxrR0FBa0csOEhBQThILHVJQUF1SSxrUUFBa1E7QUFDOTdIO0FBQ0E7QUFDQSx5Q0FBeUMsaURBQWlELGlIQUFpSCwrREFBK0QsMERBQTBELHdEQUF3RCwySEFBMkgsK0VBQStFO0FBQ3RrQjtBQUNBO0FBQ0EsNkJBQTZCLE1BQU0sYUFBYSxPQUFPLEdBQUcsd0ZBQXdGLCtGQUErRix1RUFBdUUsZ0dBQWdHLHNFQUFzRSw4RUFBOEUsd0lBQXdJLGtGQUFrRixxSEFBcUgsNnhCQUE2eEIsZ2VBQWdlLEVBQUUsK0ZBQStGLG1zQkFBbXNCLCtEQUErRDtBQUMzOUY7QUFDQTtBQUNBLDJDQUEyQywySkFBMkosZ1hBQWdYLG1PQUFtTyxtSEFBbUgsR0FBRyxpREFBaUQsaVpBQWlaLGtGQUFrRixtRkFBbUYsa1BBQWtQLG9ZQUFvWSx5RkFBeUYsd2lCQUF3aUIsK0VBQStFLHFGQUFxRjtBQUNqNUY7QUFDQSxzd0JBQXN3QixnRUFBZ0UsVUFBVSxXQUFXLFdBQVcsYUFBYSxZQUFZLEdBQUcsa0VBQWtFLE1BQU0sV0FBVyxXQUFXLGFBQWEsWUFBWSxPQUFPLDhGQUE4Rix1RUFBdUUscUhBQXFILHlFQUF5RSxxQkFBTSxtQ0FBbUMscUJBQU0sZUFBZSxxQkFBTSxFQUFFLHFCQUFNLGtCQUFrQixxQkFBTSxDQUFDLG1KQUFtSix5R0FBeUcsdURBQXVELE1BQTRCLENB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QUFnRixrSkFBa0osd0NBQXdDLG1CQUFtQixrQ0FBa0MsdUJBQXVCLGlEQUFpRCx1Q0FBdUMsaURBQWlELEtBQUssRUFBRTtBQUN0ZSwyREFBMkQsa0NBQWtDLGVBQWUscUVBQXFFLFlBQVksZ0NBQWdDLElBQUksRUFBRSw2REFBNkQsOEJBQThCLEVBQUU7QUFDaFUsc0NBQXNDLDBDQUEwQyxzQ0FBc0M7QUFDdEgsOEJBQThCLG9DQUFvQyxzQ0FBc0Msa0NBQWtDLG9DQUFvQyx3Q0FBd0MscUZBQXFGO0FBQzNTLDZDQUE2QyxnQkFBZ0IsaURBQWlELGdCQUFnQjtBQUM5SCxxQkFBcUI7QUFDckIsR0FBRyxLQUEwQixVQUFVLHdCQUFVLGNBQWMsd0JBQVUsRUFBRTtBQUMzRTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxtQ0FBTyxXQUFXLFVBQVU7QUFBQSxrR0FBQyxFQUFFO0FBQy9CLG9CQUFvQjtBQUNwQiwyQkFBMkI7QUFDM0IsaUJBQWlCLEtBQUs7QUFDdEIsV0FBVyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9lbGVtZW50LXVpL2xpYi91dGlscy9sb2Rhc2guanM/ZmYzYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7dmFyIF90eXBlb2Y9dHlwZW9mIFN5bWJvbD09PVwiZnVuY3Rpb25cIiYmdHlwZW9mIFN5bWJvbC5pdGVyYXRvcj09PVwic3ltYm9sXCI/ZnVuY3Rpb24ob2JqKXtyZXR1cm4gdHlwZW9mIG9iajt9OmZ1bmN0aW9uKG9iail7cmV0dXJuIG9iaiYmdHlwZW9mIFN5bWJvbD09PVwiZnVuY3Rpb25cIiYmb2JqLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZvYmohPT1TeW1ib2wucHJvdG90eXBlP1wic3ltYm9sXCI6dHlwZW9mIG9iajt9Oy8qKlxuICogQGxpY2Vuc2VcbiAqIExvZGFzaCA8aHR0cHM6Ly9sb2Rhc2guY29tLz5cbiAqIENvcHlyaWdodCBKUyBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnMgPGh0dHBzOi8vanMuZm91bmRhdGlvbi8+XG4gKiBSZWxlYXNlZCB1bmRlciBNSVQgbGljZW5zZSA8aHR0cHM6Ly9sb2Rhc2guY29tL2xpY2Vuc2U+XG4gKiBCYXNlZCBvbiBVbmRlcnNjb3JlLmpzIDEuOC4zIDxodHRwOi8vdW5kZXJzY29yZWpzLm9yZy9MSUNFTlNFPlxuICogQ29weXJpZ2h0IEplcmVteSBBc2hrZW5hcywgRG9jdW1lbnRDbG91ZCBhbmQgSW52ZXN0aWdhdGl2ZSBSZXBvcnRlcnMgJiBFZGl0b3JzXG4gKi8vKmVzbGludC1kaXNhYmxlKi8oZnVuY3Rpb24oKXsvKiogVXNlZCBhcyBhIHNhZmUgcmVmZXJlbmNlIGZvciBgdW5kZWZpbmVkYCBpbiBwcmUtRVM1IGVudmlyb25tZW50cy4gKi92YXIgdW5kZWZpbmVkOy8qKiBVc2VkIGFzIHRoZSBzZW1hbnRpYyB2ZXJzaW9uIG51bWJlci4gKi92YXIgVkVSU0lPTj0nNC4xNy4xMCc7LyoqIFVzZWQgYXMgdGhlIHNpemUgdG8gZW5hYmxlIGxhcmdlIGFycmF5IG9wdGltaXphdGlvbnMuICovdmFyIExBUkdFX0FSUkFZX1NJWkU9MjAwOy8qKiBFcnJvciBtZXNzYWdlIGNvbnN0YW50cy4gKi92YXIgQ09SRV9FUlJPUl9URVhUPSdVbnN1cHBvcnRlZCBjb3JlLWpzIHVzZS4gVHJ5IGh0dHBzOi8vbnBtcy5pby9zZWFyY2g/cT1wb255ZmlsbC4nLEZVTkNfRVJST1JfVEVYVD0nRXhwZWN0ZWQgYSBmdW5jdGlvbic7LyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL3ZhciBIQVNIX1VOREVGSU5FRD0nX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7LyoqIFVzZWQgYXMgdGhlIG1heGltdW0gbWVtb2l6ZSBjYWNoZSBzaXplLiAqL3ZhciBNQVhfTUVNT0laRV9TSVpFPTUwMDsvKiogVXNlZCBhcyB0aGUgaW50ZXJuYWwgYXJndW1lbnQgcGxhY2Vob2xkZXIuICovdmFyIFBMQUNFSE9MREVSPSdfX2xvZGFzaF9wbGFjZWhvbGRlcl9fJzsvKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBjbG9uaW5nLiAqL3ZhciBDTE9ORV9ERUVQX0ZMQUc9MSxDTE9ORV9GTEFUX0ZMQUc9MixDTE9ORV9TWU1CT0xTX0ZMQUc9NDsvKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi92YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUc9MSxDT01QQVJFX1VOT1JERVJFRF9GTEFHPTI7LyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgZnVuY3Rpb24gbWV0YWRhdGEuICovdmFyIFdSQVBfQklORF9GTEFHPTEsV1JBUF9CSU5EX0tFWV9GTEFHPTIsV1JBUF9DVVJSWV9CT1VORF9GTEFHPTQsV1JBUF9DVVJSWV9GTEFHPTgsV1JBUF9DVVJSWV9SSUdIVF9GTEFHPTE2LFdSQVBfUEFSVElBTF9GTEFHPTMyLFdSQVBfUEFSVElBTF9SSUdIVF9GTEFHPTY0LFdSQVBfQVJZX0ZMQUc9MTI4LFdSQVBfUkVBUkdfRkxBRz0yNTYsV1JBUF9GTElQX0ZMQUc9NTEyOy8qKiBVc2VkIGFzIGRlZmF1bHQgb3B0aW9ucyBmb3IgYF8udHJ1bmNhdGVgLiAqL3ZhciBERUZBVUxUX1RSVU5DX0xFTkdUSD0zMCxERUZBVUxUX1RSVU5DX09NSVNTSU9OPScuLi4nOy8qKiBVc2VkIHRvIGRldGVjdCBob3QgZnVuY3Rpb25zIGJ5IG51bWJlciBvZiBjYWxscyB3aXRoaW4gYSBzcGFuIG9mIG1pbGxpc2Vjb25kcy4gKi92YXIgSE9UX0NPVU5UPTgwMCxIT1RfU1BBTj0xNjsvKiogVXNlZCB0byBpbmRpY2F0ZSB0aGUgdHlwZSBvZiBsYXp5IGl0ZXJhdGVlcy4gKi92YXIgTEFaWV9GSUxURVJfRkxBRz0xLExBWllfTUFQX0ZMQUc9MixMQVpZX1dISUxFX0ZMQUc9MzsvKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi92YXIgSU5GSU5JVFk9MS8wLE1BWF9TQUZFX0lOVEVHRVI9OTAwNzE5OTI1NDc0MDk5MSxNQVhfSU5URUdFUj0xLjc5NzY5MzEzNDg2MjMxNTdlMzA4LE5BTj0wLzA7LyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdGhlIG1heGltdW0gbGVuZ3RoIGFuZCBpbmRleCBvZiBhbiBhcnJheS4gKi92YXIgTUFYX0FSUkFZX0xFTkdUSD00Mjk0OTY3Mjk1LE1BWF9BUlJBWV9JTkRFWD1NQVhfQVJSQVlfTEVOR1RILTEsSEFMRl9NQVhfQVJSQVlfTEVOR1RIPU1BWF9BUlJBWV9MRU5HVEg+Pj4xOy8qKiBVc2VkIHRvIGFzc29jaWF0ZSB3cmFwIG1ldGhvZHMgd2l0aCB0aGVpciBiaXQgZmxhZ3MuICovdmFyIHdyYXBGbGFncz1bWydhcnknLFdSQVBfQVJZX0ZMQUddLFsnYmluZCcsV1JBUF9CSU5EX0ZMQUddLFsnYmluZEtleScsV1JBUF9CSU5EX0tFWV9GTEFHXSxbJ2N1cnJ5JyxXUkFQX0NVUlJZX0ZMQUddLFsnY3VycnlSaWdodCcsV1JBUF9DVVJSWV9SSUdIVF9GTEFHXSxbJ2ZsaXAnLFdSQVBfRkxJUF9GTEFHXSxbJ3BhcnRpYWwnLFdSQVBfUEFSVElBTF9GTEFHXSxbJ3BhcnRpYWxSaWdodCcsV1JBUF9QQVJUSUFMX1JJR0hUX0ZMQUddLFsncmVhcmcnLFdSQVBfUkVBUkdfRkxBR11dOy8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi92YXIgYXJnc1RhZz0nW29iamVjdCBBcmd1bWVudHNdJyxhcnJheVRhZz0nW29iamVjdCBBcnJheV0nLGFzeW5jVGFnPSdbb2JqZWN0IEFzeW5jRnVuY3Rpb25dJyxib29sVGFnPSdbb2JqZWN0IEJvb2xlYW5dJyxkYXRlVGFnPSdbb2JqZWN0IERhdGVdJyxkb21FeGNUYWc9J1tvYmplY3QgRE9NRXhjZXB0aW9uXScsZXJyb3JUYWc9J1tvYmplY3QgRXJyb3JdJyxmdW5jVGFnPSdbb2JqZWN0IEZ1bmN0aW9uXScsZ2VuVGFnPSdbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXScsbWFwVGFnPSdbb2JqZWN0IE1hcF0nLG51bWJlclRhZz0nW29iamVjdCBOdW1iZXJdJyxudWxsVGFnPSdbb2JqZWN0IE51bGxdJyxvYmplY3RUYWc9J1tvYmplY3QgT2JqZWN0XScscHJvbWlzZVRhZz0nW29iamVjdCBQcm9taXNlXScscHJveHlUYWc9J1tvYmplY3QgUHJveHldJyxyZWdleHBUYWc9J1tvYmplY3QgUmVnRXhwXScsc2V0VGFnPSdbb2JqZWN0IFNldF0nLHN0cmluZ1RhZz0nW29iamVjdCBTdHJpbmddJyxzeW1ib2xUYWc9J1tvYmplY3QgU3ltYm9sXScsdW5kZWZpbmVkVGFnPSdbb2JqZWN0IFVuZGVmaW5lZF0nLHdlYWtNYXBUYWc9J1tvYmplY3QgV2Vha01hcF0nLHdlYWtTZXRUYWc9J1tvYmplY3QgV2Vha1NldF0nO3ZhciBhcnJheUJ1ZmZlclRhZz0nW29iamVjdCBBcnJheUJ1ZmZlcl0nLGRhdGFWaWV3VGFnPSdbb2JqZWN0IERhdGFWaWV3XScsZmxvYXQzMlRhZz0nW29iamVjdCBGbG9hdDMyQXJyYXldJyxmbG9hdDY0VGFnPSdbb2JqZWN0IEZsb2F0NjRBcnJheV0nLGludDhUYWc9J1tvYmplY3QgSW50OEFycmF5XScsaW50MTZUYWc9J1tvYmplY3QgSW50MTZBcnJheV0nLGludDMyVGFnPSdbb2JqZWN0IEludDMyQXJyYXldJyx1aW50OFRhZz0nW29iamVjdCBVaW50OEFycmF5XScsdWludDhDbGFtcGVkVGFnPSdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsdWludDE2VGFnPSdbb2JqZWN0IFVpbnQxNkFycmF5XScsdWludDMyVGFnPSdbb2JqZWN0IFVpbnQzMkFycmF5XSc7LyoqIFVzZWQgdG8gbWF0Y2ggZW1wdHkgc3RyaW5nIGxpdGVyYWxzIGluIGNvbXBpbGVkIHRlbXBsYXRlIHNvdXJjZS4gKi92YXIgcmVFbXB0eVN0cmluZ0xlYWRpbmc9L1xcYl9fcCBcXCs9ICcnOy9nLHJlRW1wdHlTdHJpbmdNaWRkbGU9L1xcYihfX3AgXFwrPSkgJycgXFwrL2cscmVFbXB0eVN0cmluZ1RyYWlsaW5nPS8oX19lXFwoLio/XFwpfFxcYl9fdFxcKSkgXFwrXFxuJyc7L2c7LyoqIFVzZWQgdG8gbWF0Y2ggSFRNTCBlbnRpdGllcyBhbmQgSFRNTCBjaGFyYWN0ZXJzLiAqL3ZhciByZUVzY2FwZWRIdG1sPS8mKD86YW1wfGx0fGd0fHF1b3R8IzM5KTsvZyxyZVVuZXNjYXBlZEh0bWw9L1smPD5cIiddL2cscmVIYXNFc2NhcGVkSHRtbD1SZWdFeHAocmVFc2NhcGVkSHRtbC5zb3VyY2UpLHJlSGFzVW5lc2NhcGVkSHRtbD1SZWdFeHAocmVVbmVzY2FwZWRIdG1sLnNvdXJjZSk7LyoqIFVzZWQgdG8gbWF0Y2ggdGVtcGxhdGUgZGVsaW1pdGVycy4gKi92YXIgcmVFc2NhcGU9LzwlLShbXFxzXFxTXSs/KSU+L2cscmVFdmFsdWF0ZT0vPCUoW1xcc1xcU10rPyklPi9nLHJlSW50ZXJwb2xhdGU9LzwlPShbXFxzXFxTXSs/KSU+L2c7LyoqIFVzZWQgdG8gbWF0Y2ggcHJvcGVydHkgbmFtZXMgd2l0aGluIHByb3BlcnR5IHBhdGhzLiAqL3ZhciByZUlzRGVlcFByb3A9L1xcLnxcXFsoPzpbXltcXF1dKnwoW1wiJ10pKD86KD8hXFwxKVteXFxcXF18XFxcXC4pKj9cXDEpXFxdLyxyZUlzUGxhaW5Qcm9wPS9eXFx3KiQvLHJlUHJvcE5hbWU9L1teLltcXF1dK3xcXFsoPzooLT9cXGQrKD86XFwuXFxkKyk/KXwoW1wiJ10pKCg/Oig/IVxcMilbXlxcXFxdfFxcXFwuKSo/KVxcMilcXF18KD89KD86XFwufFxcW1xcXSkoPzpcXC58XFxbXFxdfCQpKS9nOy8qKlxuICAgICAqIFVzZWQgdG8gbWF0Y2ggYFJlZ0V4cGBcbiAgICAgKiBbc3ludGF4IGNoYXJhY3RlcnNdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXBhdHRlcm5zKS5cbiAgICAgKi92YXIgcmVSZWdFeHBDaGFyPS9bXFxcXF4kLiorPygpW1xcXXt9fF0vZyxyZUhhc1JlZ0V4cENoYXI9UmVnRXhwKHJlUmVnRXhwQ2hhci5zb3VyY2UpOy8qKiBVc2VkIHRvIG1hdGNoIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2UuICovdmFyIHJlVHJpbT0vXlxccyt8XFxzKyQvZyxyZVRyaW1TdGFydD0vXlxccysvLHJlVHJpbUVuZD0vXFxzKyQvOy8qKiBVc2VkIHRvIG1hdGNoIHdyYXAgZGV0YWlsIGNvbW1lbnRzLiAqL3ZhciByZVdyYXBDb21tZW50PS9cXHsoPzpcXG5cXC9cXCogXFxbd3JhcHBlZCB3aXRoIC4rXFxdIFxcKlxcLyk/XFxuPy8scmVXcmFwRGV0YWlscz0vXFx7XFxuXFwvXFwqIFxcW3dyYXBwZWQgd2l0aCAoLispXFxdIFxcKi8scmVTcGxpdERldGFpbHM9Lyw/ICYgLzsvKiogVXNlZCB0byBtYXRjaCB3b3JkcyBjb21wb3NlZCBvZiBhbHBoYW51bWVyaWMgY2hhcmFjdGVycy4gKi92YXIgcmVBc2NpaVdvcmQ9L1teXFx4MDAtXFx4MmZcXHgzYS1cXHg0MFxceDViLVxceDYwXFx4N2ItXFx4N2ZdKy9nOy8qKiBVc2VkIHRvIG1hdGNoIGJhY2tzbGFzaGVzIGluIHByb3BlcnR5IHBhdGhzLiAqL3ZhciByZUVzY2FwZUNoYXI9L1xcXFwoXFxcXCk/L2c7LyoqXG4gICAgICogVXNlZCB0byBtYXRjaFxuICAgICAqIFtFUyB0ZW1wbGF0ZSBkZWxpbWl0ZXJzXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy10ZW1wbGF0ZS1saXRlcmFsLWxleGljYWwtY29tcG9uZW50cykuXG4gICAgICovdmFyIHJlRXNUZW1wbGF0ZT0vXFwkXFx7KFteXFxcXH1dKig/OlxcXFwuW15cXFxcfV0qKSopXFx9L2c7LyoqIFVzZWQgdG8gbWF0Y2ggYFJlZ0V4cGAgZmxhZ3MgZnJvbSB0aGVpciBjb2VyY2VkIHN0cmluZyB2YWx1ZXMuICovdmFyIHJlRmxhZ3M9L1xcdyokLzsvKiogVXNlZCB0byBkZXRlY3QgYmFkIHNpZ25lZCBoZXhhZGVjaW1hbCBzdHJpbmcgdmFsdWVzLiAqL3ZhciByZUlzQmFkSGV4PS9eWy0rXTB4WzAtOWEtZl0rJC9pOy8qKiBVc2VkIHRvIGRldGVjdCBiaW5hcnkgc3RyaW5nIHZhbHVlcy4gKi92YXIgcmVJc0JpbmFyeT0vXjBiWzAxXSskL2k7LyoqIFVzZWQgdG8gZGV0ZWN0IGhvc3QgY29uc3RydWN0b3JzIChTYWZhcmkpLiAqL3ZhciByZUlzSG9zdEN0b3I9L15cXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXF0kLzsvKiogVXNlZCB0byBkZXRlY3Qgb2N0YWwgc3RyaW5nIHZhbHVlcy4gKi92YXIgcmVJc09jdGFsPS9eMG9bMC03XSskL2k7LyoqIFVzZWQgdG8gZGV0ZWN0IHVuc2lnbmVkIGludGVnZXIgdmFsdWVzLiAqL3ZhciByZUlzVWludD0vXig/OjB8WzEtOV1cXGQqKSQvOy8qKiBVc2VkIHRvIG1hdGNoIExhdGluIFVuaWNvZGUgbGV0dGVycyAoZXhjbHVkaW5nIG1hdGhlbWF0aWNhbCBvcGVyYXRvcnMpLiAqL3ZhciByZUxhdGluPS9bXFx4YzAtXFx4ZDZcXHhkOC1cXHhmNlxceGY4LVxceGZmXFx1MDEwMC1cXHUwMTdmXS9nOy8qKiBVc2VkIHRvIGVuc3VyZSBjYXB0dXJpbmcgb3JkZXIgb2YgdGVtcGxhdGUgZGVsaW1pdGVycy4gKi92YXIgcmVOb01hdGNoPS8oJF4pLzsvKiogVXNlZCB0byBtYXRjaCB1bmVzY2FwZWQgY2hhcmFjdGVycyBpbiBjb21waWxlZCBzdHJpbmcgbGl0ZXJhbHMuICovdmFyIHJlVW5lc2NhcGVkU3RyaW5nPS9bJ1xcblxcclxcdTIwMjhcXHUyMDI5XFxcXF0vZzsvKiogVXNlZCB0byBjb21wb3NlIHVuaWNvZGUgY2hhcmFjdGVyIGNsYXNzZXMuICovdmFyIHJzQXN0cmFsUmFuZ2U9J1xcXFx1ZDgwMC1cXFxcdWRmZmYnLHJzQ29tYm9NYXJrc1JhbmdlPSdcXFxcdTAzMDAtXFxcXHUwMzZmJyxyZUNvbWJvSGFsZk1hcmtzUmFuZ2U9J1xcXFx1ZmUyMC1cXFxcdWZlMmYnLHJzQ29tYm9TeW1ib2xzUmFuZ2U9J1xcXFx1MjBkMC1cXFxcdTIwZmYnLHJzQ29tYm9SYW5nZT1yc0NvbWJvTWFya3NSYW5nZStyZUNvbWJvSGFsZk1hcmtzUmFuZ2UrcnNDb21ib1N5bWJvbHNSYW5nZSxyc0RpbmdiYXRSYW5nZT0nXFxcXHUyNzAwLVxcXFx1MjdiZicscnNMb3dlclJhbmdlPSdhLXpcXFxceGRmLVxcXFx4ZjZcXFxceGY4LVxcXFx4ZmYnLHJzTWF0aE9wUmFuZ2U9J1xcXFx4YWNcXFxceGIxXFxcXHhkN1xcXFx4ZjcnLHJzTm9uQ2hhclJhbmdlPSdcXFxceDAwLVxcXFx4MmZcXFxceDNhLVxcXFx4NDBcXFxceDViLVxcXFx4NjBcXFxceDdiLVxcXFx4YmYnLHJzUHVuY3R1YXRpb25SYW5nZT0nXFxcXHUyMDAwLVxcXFx1MjA2ZicscnNTcGFjZVJhbmdlPScgXFxcXHRcXFxceDBiXFxcXGZcXFxceGEwXFxcXHVmZWZmXFxcXG5cXFxcclxcXFx1MjAyOFxcXFx1MjAyOVxcXFx1MTY4MFxcXFx1MTgwZVxcXFx1MjAwMFxcXFx1MjAwMVxcXFx1MjAwMlxcXFx1MjAwM1xcXFx1MjAwNFxcXFx1MjAwNVxcXFx1MjAwNlxcXFx1MjAwN1xcXFx1MjAwOFxcXFx1MjAwOVxcXFx1MjAwYVxcXFx1MjAyZlxcXFx1MjA1ZlxcXFx1MzAwMCcscnNVcHBlclJhbmdlPSdBLVpcXFxceGMwLVxcXFx4ZDZcXFxceGQ4LVxcXFx4ZGUnLHJzVmFyUmFuZ2U9J1xcXFx1ZmUwZVxcXFx1ZmUwZicscnNCcmVha1JhbmdlPXJzTWF0aE9wUmFuZ2UrcnNOb25DaGFyUmFuZ2UrcnNQdW5jdHVhdGlvblJhbmdlK3JzU3BhY2VSYW5nZTsvKiogVXNlZCB0byBjb21wb3NlIHVuaWNvZGUgY2FwdHVyZSBncm91cHMuICovdmFyIHJzQXBvcz0nW1xcJ1xcdTIwMTldJyxyc0FzdHJhbD0nWycrcnNBc3RyYWxSYW5nZSsnXScscnNCcmVhaz0nWycrcnNCcmVha1JhbmdlKyddJyxyc0NvbWJvPSdbJytyc0NvbWJvUmFuZ2UrJ10nLHJzRGlnaXRzPSdcXFxcZCsnLHJzRGluZ2JhdD0nWycrcnNEaW5nYmF0UmFuZ2UrJ10nLHJzTG93ZXI9J1snK3JzTG93ZXJSYW5nZSsnXScscnNNaXNjPSdbXicrcnNBc3RyYWxSYW5nZStyc0JyZWFrUmFuZ2UrcnNEaWdpdHMrcnNEaW5nYmF0UmFuZ2UrcnNMb3dlclJhbmdlK3JzVXBwZXJSYW5nZSsnXScscnNGaXR6PSdcXFxcdWQ4M2NbXFxcXHVkZmZiLVxcXFx1ZGZmZl0nLHJzTW9kaWZpZXI9Jyg/OicrcnNDb21ibysnfCcrcnNGaXR6KycpJyxyc05vbkFzdHJhbD0nW14nK3JzQXN0cmFsUmFuZ2UrJ10nLHJzUmVnaW9uYWw9Jyg/OlxcXFx1ZDgzY1tcXFxcdWRkZTYtXFxcXHVkZGZmXSl7Mn0nLHJzU3VyclBhaXI9J1tcXFxcdWQ4MDAtXFxcXHVkYmZmXVtcXFxcdWRjMDAtXFxcXHVkZmZmXScscnNVcHBlcj0nWycrcnNVcHBlclJhbmdlKyddJyxyc1pXSj0nXFxcXHUyMDBkJzsvKiogVXNlZCB0byBjb21wb3NlIHVuaWNvZGUgcmVnZXhlcy4gKi92YXIgcnNNaXNjTG93ZXI9Jyg/OicrcnNMb3dlcisnfCcrcnNNaXNjKycpJyxyc01pc2NVcHBlcj0nKD86Jytyc1VwcGVyKyd8Jytyc01pc2MrJyknLHJzT3B0Q29udHJMb3dlcj0nKD86Jytyc0Fwb3MrJyg/OmR8bGx8bXxyZXxzfHR8dmUpKT8nLHJzT3B0Q29udHJVcHBlcj0nKD86Jytyc0Fwb3MrJyg/OkR8TEx8TXxSRXxTfFR8VkUpKT8nLHJlT3B0TW9kPXJzTW9kaWZpZXIrJz8nLHJzT3B0VmFyPSdbJytyc1ZhclJhbmdlKyddPycscnNPcHRKb2luPScoPzonK3JzWldKKycoPzonK1tyc05vbkFzdHJhbCxyc1JlZ2lvbmFsLHJzU3VyclBhaXJdLmpvaW4oJ3wnKSsnKScrcnNPcHRWYXIrcmVPcHRNb2QrJykqJyxyc09yZExvd2VyPSdcXFxcZCooPzoxc3R8Mm5kfDNyZHwoPyFbMTIzXSlcXFxcZHRoKSg/PVxcXFxifFtBLVpfXSknLHJzT3JkVXBwZXI9J1xcXFxkKig/OjFTVHwyTkR8M1JEfCg/IVsxMjNdKVxcXFxkVEgpKD89XFxcXGJ8W2Etel9dKScscnNTZXE9cnNPcHRWYXIrcmVPcHRNb2QrcnNPcHRKb2luLHJzRW1vamk9Jyg/OicrW3JzRGluZ2JhdCxyc1JlZ2lvbmFsLHJzU3VyclBhaXJdLmpvaW4oJ3wnKSsnKScrcnNTZXEscnNTeW1ib2w9Jyg/OicrW3JzTm9uQXN0cmFsK3JzQ29tYm8rJz8nLHJzQ29tYm8scnNSZWdpb25hbCxyc1N1cnJQYWlyLHJzQXN0cmFsXS5qb2luKCd8JykrJyknOy8qKiBVc2VkIHRvIG1hdGNoIGFwb3N0cm9waGVzLiAqL3ZhciByZUFwb3M9UmVnRXhwKHJzQXBvcywnZycpOy8qKlxuICAgICAqIFVzZWQgdG8gbWF0Y2ggW2NvbWJpbmluZyBkaWFjcml0aWNhbCBtYXJrc10oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ29tYmluaW5nX0RpYWNyaXRpY2FsX01hcmtzKSBhbmRcbiAgICAgKiBbY29tYmluaW5nIGRpYWNyaXRpY2FsIG1hcmtzIGZvciBzeW1ib2xzXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Db21iaW5pbmdfRGlhY3JpdGljYWxfTWFya3NfZm9yX1N5bWJvbHMpLlxuICAgICAqL3ZhciByZUNvbWJvTWFyaz1SZWdFeHAocnNDb21ibywnZycpOy8qKiBVc2VkIHRvIG1hdGNoIFtzdHJpbmcgc3ltYm9sc10oaHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtdW5pY29kZSkuICovdmFyIHJlVW5pY29kZT1SZWdFeHAocnNGaXR6KycoPz0nK3JzRml0eisnKXwnK3JzU3ltYm9sK3JzU2VxLCdnJyk7LyoqIFVzZWQgdG8gbWF0Y2ggY29tcGxleCBvciBjb21wb3VuZCB3b3Jkcy4gKi92YXIgcmVVbmljb2RlV29yZD1SZWdFeHAoW3JzVXBwZXIrJz8nK3JzTG93ZXIrJysnK3JzT3B0Q29udHJMb3dlcisnKD89JytbcnNCcmVhayxyc1VwcGVyLCckJ10uam9pbignfCcpKycpJyxyc01pc2NVcHBlcisnKycrcnNPcHRDb250clVwcGVyKycoPz0nK1tyc0JyZWFrLHJzVXBwZXIrcnNNaXNjTG93ZXIsJyQnXS5qb2luKCd8JykrJyknLHJzVXBwZXIrJz8nK3JzTWlzY0xvd2VyKycrJytyc09wdENvbnRyTG93ZXIscnNVcHBlcisnKycrcnNPcHRDb250clVwcGVyLHJzT3JkVXBwZXIscnNPcmRMb3dlcixyc0RpZ2l0cyxyc0Vtb2ppXS5qb2luKCd8JyksJ2cnKTsvKiogVXNlZCB0byBkZXRlY3Qgc3RyaW5ncyB3aXRoIFt6ZXJvLXdpZHRoIGpvaW5lcnMgb3IgY29kZSBwb2ludHMgZnJvbSB0aGUgYXN0cmFsIHBsYW5lc10oaHR0cDovL2Vldi5lZS9ibG9nLzIwMTUvMDkvMTIvZGFyay1jb3JuZXJzLW9mLXVuaWNvZGUvKS4gKi92YXIgcmVIYXNVbmljb2RlPVJlZ0V4cCgnWycrcnNaV0orcnNBc3RyYWxSYW5nZStyc0NvbWJvUmFuZ2UrcnNWYXJSYW5nZSsnXScpOy8qKiBVc2VkIHRvIGRldGVjdCBzdHJpbmdzIHRoYXQgbmVlZCBhIG1vcmUgcm9idXN0IHJlZ2V4cCB0byBtYXRjaCB3b3Jkcy4gKi92YXIgcmVIYXNVbmljb2RlV29yZD0vW2Etel1bQS1aXXxbQS1aXXsyLH1bYS16XXxbMC05XVthLXpBLVpdfFthLXpBLVpdWzAtOV18W15hLXpBLVowLTkgXS87LyoqIFVzZWQgdG8gYXNzaWduIGRlZmF1bHQgYGNvbnRleHRgIG9iamVjdCBwcm9wZXJ0aWVzLiAqL3ZhciBjb250ZXh0UHJvcHM9WydBcnJheScsJ0J1ZmZlcicsJ0RhdGFWaWV3JywnRGF0ZScsJ0Vycm9yJywnRmxvYXQzMkFycmF5JywnRmxvYXQ2NEFycmF5JywnRnVuY3Rpb24nLCdJbnQ4QXJyYXknLCdJbnQxNkFycmF5JywnSW50MzJBcnJheScsJ01hcCcsJ01hdGgnLCdPYmplY3QnLCdQcm9taXNlJywnUmVnRXhwJywnU2V0JywnU3RyaW5nJywnU3ltYm9sJywnVHlwZUVycm9yJywnVWludDhBcnJheScsJ1VpbnQ4Q2xhbXBlZEFycmF5JywnVWludDE2QXJyYXknLCdVaW50MzJBcnJheScsJ1dlYWtNYXAnLCdfJywnY2xlYXJUaW1lb3V0JywnaXNGaW5pdGUnLCdwYXJzZUludCcsJ3NldFRpbWVvdXQnXTsvKiogVXNlZCB0byBtYWtlIHRlbXBsYXRlIHNvdXJjZVVSTHMgZWFzaWVyIHRvIGlkZW50aWZ5LiAqL3ZhciB0ZW1wbGF0ZUNvdW50ZXI9LTE7LyoqIFVzZWQgdG8gaWRlbnRpZnkgYHRvU3RyaW5nVGFnYCB2YWx1ZXMgb2YgdHlwZWQgYXJyYXlzLiAqL3ZhciB0eXBlZEFycmF5VGFncz17fTt0eXBlZEFycmF5VGFnc1tmbG9hdDMyVGFnXT10eXBlZEFycmF5VGFnc1tmbG9hdDY0VGFnXT10eXBlZEFycmF5VGFnc1tpbnQ4VGFnXT10eXBlZEFycmF5VGFnc1tpbnQxNlRhZ109dHlwZWRBcnJheVRhZ3NbaW50MzJUYWddPXR5cGVkQXJyYXlUYWdzW3VpbnQ4VGFnXT10eXBlZEFycmF5VGFnc1t1aW50OENsYW1wZWRUYWddPXR5cGVkQXJyYXlUYWdzW3VpbnQxNlRhZ109dHlwZWRBcnJheVRhZ3NbdWludDMyVGFnXT10cnVlO3R5cGVkQXJyYXlUYWdzW2FyZ3NUYWddPXR5cGVkQXJyYXlUYWdzW2FycmF5VGFnXT10eXBlZEFycmF5VGFnc1thcnJheUJ1ZmZlclRhZ109dHlwZWRBcnJheVRhZ3NbYm9vbFRhZ109dHlwZWRBcnJheVRhZ3NbZGF0YVZpZXdUYWddPXR5cGVkQXJyYXlUYWdzW2RhdGVUYWddPXR5cGVkQXJyYXlUYWdzW2Vycm9yVGFnXT10eXBlZEFycmF5VGFnc1tmdW5jVGFnXT10eXBlZEFycmF5VGFnc1ttYXBUYWddPXR5cGVkQXJyYXlUYWdzW251bWJlclRhZ109dHlwZWRBcnJheVRhZ3Nbb2JqZWN0VGFnXT10eXBlZEFycmF5VGFnc1tyZWdleHBUYWddPXR5cGVkQXJyYXlUYWdzW3NldFRhZ109dHlwZWRBcnJheVRhZ3Nbc3RyaW5nVGFnXT10eXBlZEFycmF5VGFnc1t3ZWFrTWFwVGFnXT1mYWxzZTsvKiogVXNlZCB0byBpZGVudGlmeSBgdG9TdHJpbmdUYWdgIHZhbHVlcyBzdXBwb3J0ZWQgYnkgYF8uY2xvbmVgLiAqL3ZhciBjbG9uZWFibGVUYWdzPXt9O2Nsb25lYWJsZVRhZ3NbYXJnc1RhZ109Y2xvbmVhYmxlVGFnc1thcnJheVRhZ109Y2xvbmVhYmxlVGFnc1thcnJheUJ1ZmZlclRhZ109Y2xvbmVhYmxlVGFnc1tkYXRhVmlld1RhZ109Y2xvbmVhYmxlVGFnc1tib29sVGFnXT1jbG9uZWFibGVUYWdzW2RhdGVUYWddPWNsb25lYWJsZVRhZ3NbZmxvYXQzMlRhZ109Y2xvbmVhYmxlVGFnc1tmbG9hdDY0VGFnXT1jbG9uZWFibGVUYWdzW2ludDhUYWddPWNsb25lYWJsZVRhZ3NbaW50MTZUYWddPWNsb25lYWJsZVRhZ3NbaW50MzJUYWddPWNsb25lYWJsZVRhZ3NbbWFwVGFnXT1jbG9uZWFibGVUYWdzW251bWJlclRhZ109Y2xvbmVhYmxlVGFnc1tvYmplY3RUYWddPWNsb25lYWJsZVRhZ3NbcmVnZXhwVGFnXT1jbG9uZWFibGVUYWdzW3NldFRhZ109Y2xvbmVhYmxlVGFnc1tzdHJpbmdUYWddPWNsb25lYWJsZVRhZ3Nbc3ltYm9sVGFnXT1jbG9uZWFibGVUYWdzW3VpbnQ4VGFnXT1jbG9uZWFibGVUYWdzW3VpbnQ4Q2xhbXBlZFRhZ109Y2xvbmVhYmxlVGFnc1t1aW50MTZUYWddPWNsb25lYWJsZVRhZ3NbdWludDMyVGFnXT10cnVlO2Nsb25lYWJsZVRhZ3NbZXJyb3JUYWddPWNsb25lYWJsZVRhZ3NbZnVuY1RhZ109Y2xvbmVhYmxlVGFnc1t3ZWFrTWFwVGFnXT1mYWxzZTsvKiogVXNlZCB0byBtYXAgTGF0aW4gVW5pY29kZSBsZXR0ZXJzIHRvIGJhc2ljIExhdGluIGxldHRlcnMuICovdmFyIGRlYnVycmVkTGV0dGVycz17Ly8gTGF0aW4tMSBTdXBwbGVtZW50IGJsb2NrLlxuw4A6J0EnLMOBOidBJyzDgjonQScsw4M6J0EnLMOEOidBJyzDhTonQScsw6A6J2EnLMOhOidhJyzDojonYScsw6M6J2EnLMOkOidhJyzDpTonYScsw4c6J0MnLMOnOidjJyzDkDonRCcsw7A6J2QnLMOIOidFJyzDiTonRScsw4o6J0UnLMOLOidFJyzDqDonZScsw6k6J2UnLMOqOidlJyzDqzonZScsw4w6J0knLMONOidJJyzDjjonSScsw486J0knLMOsOidpJyzDrTonaScsw646J2knLMOvOidpJyzDkTonTicsw7E6J24nLMOSOidPJyzDkzonTycsw5Q6J08nLMOVOidPJyzDljonTycsw5g6J08nLMOyOidvJyzDszonbycsw7Q6J28nLMO1OidvJyzDtjonbycsw7g6J28nLMOZOidVJyzDmjonVScsw5s6J1UnLMOcOidVJyzDuTondScsw7o6J3UnLMO7Oid1JyzDvDondScsw506J1knLMO9Oid5JyzDvzoneScsw4Y6J0FlJyzDpjonYWUnLMOeOidUaCcsw746J3RoJyzDnzonc3MnLC8vIExhdGluIEV4dGVuZGVkLUEgYmxvY2suXG7EgDonQScsxII6J0EnLMSEOidBJyzEgTonYScsxIM6J2EnLMSFOidhJyzEhjonQycsxIg6J0MnLMSKOidDJyzEjDonQycsxIc6J2MnLMSJOidjJyzEizonYycsxI06J2MnLMSOOidEJyzEkDonRCcsxI86J2QnLMSROidkJyzEkjonRScsxJQ6J0UnLMSWOidFJyzEmDonRScsxJo6J0UnLMSTOidlJyzElTonZScsxJc6J2UnLMSZOidlJyzEmzonZScsxJw6J0cnLMSeOidHJyzEoDonRycsxKI6J0cnLMSdOidnJyzEnzonZycsxKE6J2cnLMSjOidnJyzEpDonSCcsxKY6J0gnLMSlOidoJyzEpzonaCcsxKg6J0knLMSqOidJJyzErDonSScsxK46J0knLMSwOidJJyzEqTonaScsxKs6J2knLMStOidpJyzErzonaScsxLE6J2knLMS0OidKJyzEtTonaicsxLY6J0snLMS3OidrJyzEuDonaycsxLk6J0wnLMS7OidMJyzEvTonTCcsxL86J0wnLMWBOidMJyzEujonbCcsxLw6J2wnLMS+OidsJyzFgDonbCcsxYI6J2wnLMWDOidOJyzFhTonTicsxYc6J04nLMWKOidOJyzFhDonbicsxYY6J24nLMWIOiduJyzFizonbicsxYw6J08nLMWOOidPJyzFkDonTycsxY06J28nLMWPOidvJyzFkTonbycsxZQ6J1InLMWWOidSJyzFmDonUicsxZU6J3InLMWXOidyJyzFmToncicsxZo6J1MnLMWcOidTJyzFnjonUycsxaA6J1MnLMWbOidzJyzFnToncycsxZ86J3MnLMWhOidzJyzFojonVCcsxaQ6J1QnLMWmOidUJyzFozondCcsxaU6J3QnLMWnOid0JyzFqDonVScsxao6J1UnLMWsOidVJyzFrjonVScsxbA6J1UnLMWyOidVJyzFqTondScsxas6J3UnLMWtOid1JyzFrzondScsxbE6J3UnLMWzOid1JyzFtDonVycsxbU6J3cnLMW2OidZJyzFtzoneScsxbg6J1knLMW5OidaJyzFuzonWicsxb06J1onLMW6Oid6JyzFvDoneicsxb46J3onLMSyOidJSicsxLM6J2lqJyzFkjonT2UnLMWTOidvZScsxYk6XCInblwiLMW/OidzJ307LyoqIFVzZWQgdG8gbWFwIGNoYXJhY3RlcnMgdG8gSFRNTCBlbnRpdGllcy4gKi92YXIgaHRtbEVzY2FwZXM9eycmJzonJmFtcDsnLCc8JzonJmx0OycsJz4nOicmZ3Q7JywnXCInOicmcXVvdDsnLFwiJ1wiOicmIzM5Oyd9Oy8qKiBVc2VkIHRvIG1hcCBIVE1MIGVudGl0aWVzIHRvIGNoYXJhY3RlcnMuICovdmFyIGh0bWxVbmVzY2FwZXM9eycmYW1wOyc6JyYnLCcmbHQ7JzonPCcsJyZndDsnOic+JywnJnF1b3Q7JzonXCInLCcmIzM5Oyc6XCInXCJ9Oy8qKiBVc2VkIHRvIGVzY2FwZSBjaGFyYWN0ZXJzIGZvciBpbmNsdXNpb24gaW4gY29tcGlsZWQgc3RyaW5nIGxpdGVyYWxzLiAqL3ZhciBzdHJpbmdFc2NhcGVzPXsnXFxcXCc6J1xcXFwnLFwiJ1wiOlwiJ1wiLCdcXG4nOiduJywnXFxyJzoncicsJ1xcdTIwMjgnOid1MjAyOCcsJ1xcdTIwMjknOid1MjAyOSd9Oy8qKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB3aXRob3V0IGEgZGVwZW5kZW5jeSBvbiBgcm9vdGAuICovdmFyIGZyZWVQYXJzZUZsb2F0PXBhcnNlRmxvYXQsZnJlZVBhcnNlSW50PXBhcnNlSW50Oy8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZ2xvYmFsYCBmcm9tIE5vZGUuanMuICovdmFyIGZyZWVHbG9iYWw9KHR5cGVvZiBnbG9iYWw9PT0ndW5kZWZpbmVkJz8ndW5kZWZpbmVkJzpfdHlwZW9mKGdsb2JhbCkpPT09J29iamVjdCcmJmdsb2JhbCYmZ2xvYmFsLk9iamVjdD09PU9iamVjdCYmZ2xvYmFsOy8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgc2VsZmAuICovdmFyIGZyZWVTZWxmPSh0eXBlb2Ygc2VsZj09PSd1bmRlZmluZWQnPyd1bmRlZmluZWQnOl90eXBlb2Yoc2VsZikpPT09J29iamVjdCcmJnNlbGYmJnNlbGYuT2JqZWN0PT09T2JqZWN0JiZzZWxmOy8qKiBVc2VkIGFzIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWwgb2JqZWN0LiAqL3ZhciByb290PWZyZWVHbG9iYWx8fGZyZWVTZWxmfHxGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpOy8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovdmFyIGZyZWVFeHBvcnRzPSh0eXBlb2YgZXhwb3J0cz09PSd1bmRlZmluZWQnPyd1bmRlZmluZWQnOl90eXBlb2YoZXhwb3J0cykpPT09J29iamVjdCcmJmV4cG9ydHMmJiFleHBvcnRzLm5vZGVUeXBlJiZleHBvcnRzOy8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi92YXIgZnJlZU1vZHVsZT1mcmVlRXhwb3J0cyYmKHR5cGVvZiBtb2R1bGU9PT0ndW5kZWZpbmVkJz8ndW5kZWZpbmVkJzpfdHlwZW9mKG1vZHVsZSkpPT09J29iamVjdCcmJm1vZHVsZSYmIW1vZHVsZS5ub2RlVHlwZSYmbW9kdWxlOy8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovdmFyIG1vZHVsZUV4cG9ydHM9ZnJlZU1vZHVsZSYmZnJlZU1vZHVsZS5leHBvcnRzPT09ZnJlZUV4cG9ydHM7LyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBwcm9jZXNzYCBmcm9tIE5vZGUuanMuICovdmFyIGZyZWVQcm9jZXNzPW1vZHVsZUV4cG9ydHMmJmZyZWVHbG9iYWwucHJvY2VzczsvKiogVXNlZCB0byBhY2Nlc3MgZmFzdGVyIE5vZGUuanMgaGVscGVycy4gKi92YXIgbm9kZVV0aWw9ZnVuY3Rpb24oKXt0cnl7Ly8gVXNlIGB1dGlsLnR5cGVzYCBmb3IgTm9kZS5qcyAxMCsuXG52YXIgdHlwZXM9ZnJlZU1vZHVsZSYmZnJlZU1vZHVsZS5yZXF1aXJlJiZmcmVlTW9kdWxlLnJlcXVpcmUoJ3V0aWwnKS50eXBlcztpZih0eXBlcyl7cmV0dXJuIHR5cGVzO30vLyBMZWdhY3kgYHByb2Nlc3MuYmluZGluZygndXRpbCcpYCBmb3IgTm9kZS5qcyA8IDEwLlxucmV0dXJuIGZyZWVQcm9jZXNzJiZmcmVlUHJvY2Vzcy5iaW5kaW5nJiZmcmVlUHJvY2Vzcy5iaW5kaW5nKCd1dGlsJyk7fWNhdGNoKGUpe319KCk7LyogTm9kZS5qcyBoZWxwZXIgcmVmZXJlbmNlcy4gKi92YXIgbm9kZUlzQXJyYXlCdWZmZXI9bm9kZVV0aWwmJm5vZGVVdGlsLmlzQXJyYXlCdWZmZXIsbm9kZUlzRGF0ZT1ub2RlVXRpbCYmbm9kZVV0aWwuaXNEYXRlLG5vZGVJc01hcD1ub2RlVXRpbCYmbm9kZVV0aWwuaXNNYXAsbm9kZUlzUmVnRXhwPW5vZGVVdGlsJiZub2RlVXRpbC5pc1JlZ0V4cCxub2RlSXNTZXQ9bm9kZVV0aWwmJm5vZGVVdGlsLmlzU2V0LG5vZGVJc1R5cGVkQXJyYXk9bm9kZVV0aWwmJm5vZGVVdGlsLmlzVHlwZWRBcnJheTsvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovLyoqXG4gICAgICogQSBmYXN0ZXIgYWx0ZXJuYXRpdmUgdG8gYEZ1bmN0aW9uI2FwcGx5YCwgdGhpcyBmdW5jdGlvbiBpbnZva2VzIGBmdW5jYFxuICAgICAqIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIGB0aGlzQXJnYCBhbmQgdGhlIGFyZ3VtZW50cyBvZiBgYXJnc2AuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGludm9rZS5cbiAgICAgKiBAcGFyYW0geyp9IHRoaXNBcmcgVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcmdzIFRoZSBhcmd1bWVudHMgdG8gaW52b2tlIGBmdW5jYCB3aXRoLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXN1bHQgb2YgYGZ1bmNgLlxuICAgICAqL2Z1bmN0aW9uIGFwcGx5KGZ1bmMsdGhpc0FyZyxhcmdzKXtzd2l0Y2goYXJncy5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcpO2Nhc2UgMTpyZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsYXJnc1swXSk7Y2FzZSAyOnJldHVybiBmdW5jLmNhbGwodGhpc0FyZyxhcmdzWzBdLGFyZ3NbMV0pO2Nhc2UgMzpyZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsYXJnc1swXSxhcmdzWzFdLGFyZ3NbMl0pO31yZXR1cm4gZnVuYy5hcHBseSh0aGlzQXJnLGFyZ3MpO30vKipcbiAgICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VBZ2dyZWdhdG9yYCBmb3IgYXJyYXlzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gc2V0dGVyIFRoZSBmdW5jdGlvbiB0byBzZXQgYGFjY3VtdWxhdG9yYCB2YWx1ZXMuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGl0ZXJhdGVlIHRvIHRyYW5zZm9ybSBrZXlzLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBhY2N1bXVsYXRvciBUaGUgaW5pdGlhbCBhZ2dyZWdhdGVkIG9iamVjdC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGFjY3VtdWxhdG9yYC5cbiAgICAgKi9mdW5jdGlvbiBhcnJheUFnZ3JlZ2F0b3IoYXJyYXksc2V0dGVyLGl0ZXJhdGVlLGFjY3VtdWxhdG9yKXt2YXIgaW5kZXg9LTEsbGVuZ3RoPWFycmF5PT1udWxsPzA6YXJyYXkubGVuZ3RoO3doaWxlKCsraW5kZXg8bGVuZ3RoKXt2YXIgdmFsdWU9YXJyYXlbaW5kZXhdO3NldHRlcihhY2N1bXVsYXRvcix2YWx1ZSxpdGVyYXRlZSh2YWx1ZSksYXJyYXkpO31yZXR1cm4gYWNjdW11bGF0b3I7fS8qKlxuICAgICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5mb3JFYWNoYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAgICAgKiBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAgICAgKi9mdW5jdGlvbiBhcnJheUVhY2goYXJyYXksaXRlcmF0ZWUpe3ZhciBpbmRleD0tMSxsZW5ndGg9YXJyYXk9PW51bGw/MDphcnJheS5sZW5ndGg7d2hpbGUoKytpbmRleDxsZW5ndGgpe2lmKGl0ZXJhdGVlKGFycmF5W2luZGV4XSxpbmRleCxhcnJheSk9PT1mYWxzZSl7YnJlYWs7fX1yZXR1cm4gYXJyYXk7fS8qKlxuICAgICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5mb3JFYWNoUmlnaHRgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvclxuICAgICAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICAgICAqL2Z1bmN0aW9uIGFycmF5RWFjaFJpZ2h0KGFycmF5LGl0ZXJhdGVlKXt2YXIgbGVuZ3RoPWFycmF5PT1udWxsPzA6YXJyYXkubGVuZ3RoO3doaWxlKGxlbmd0aC0tKXtpZihpdGVyYXRlZShhcnJheVtsZW5ndGhdLGxlbmd0aCxhcnJheSk9PT1mYWxzZSl7YnJlYWs7fX1yZXR1cm4gYXJyYXk7fS8qKlxuICAgICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5ldmVyeWAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yXG4gICAgICogaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbGwgZWxlbWVudHMgcGFzcyB0aGUgcHJlZGljYXRlIGNoZWNrLFxuICAgICAqICBlbHNlIGBmYWxzZWAuXG4gICAgICovZnVuY3Rpb24gYXJyYXlFdmVyeShhcnJheSxwcmVkaWNhdGUpe3ZhciBpbmRleD0tMSxsZW5ndGg9YXJyYXk9PW51bGw/MDphcnJheS5sZW5ndGg7d2hpbGUoKytpbmRleDxsZW5ndGgpe2lmKCFwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLGluZGV4LGFycmF5KSl7cmV0dXJuIGZhbHNlO319cmV0dXJuIHRydWU7fS8qKlxuICAgICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5maWx0ZXJgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvclxuICAgICAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmaWx0ZXJlZCBhcnJheS5cbiAgICAgKi9mdW5jdGlvbiBhcnJheUZpbHRlcihhcnJheSxwcmVkaWNhdGUpe3ZhciBpbmRleD0tMSxsZW5ndGg9YXJyYXk9PW51bGw/MDphcnJheS5sZW5ndGgscmVzSW5kZXg9MCxyZXN1bHQ9W107d2hpbGUoKytpbmRleDxsZW5ndGgpe3ZhciB2YWx1ZT1hcnJheVtpbmRleF07aWYocHJlZGljYXRlKHZhbHVlLGluZGV4LGFycmF5KSl7cmVzdWx0W3Jlc0luZGV4KytdPXZhbHVlO319cmV0dXJuIHJlc3VsdDt9LyoqXG4gICAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLmluY2x1ZGVzYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAgICAgKiBzcGVjaWZ5aW5nIGFuIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7Kn0gdGFyZ2V0IFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdGFyZ2V0YCBpcyBmb3VuZCwgZWxzZSBgZmFsc2VgLlxuICAgICAqL2Z1bmN0aW9uIGFycmF5SW5jbHVkZXMoYXJyYXksdmFsdWUpe3ZhciBsZW5ndGg9YXJyYXk9PW51bGw/MDphcnJheS5sZW5ndGg7cmV0dXJuISFsZW5ndGgmJmJhc2VJbmRleE9mKGFycmF5LHZhbHVlLDApPi0xO30vKipcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2UgYGFycmF5SW5jbHVkZXNgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYSBjb21wYXJhdG9yLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7Kn0gdGFyZ2V0IFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNvbXBhcmF0b3IgVGhlIGNvbXBhcmF0b3IgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHRhcmdldGAgaXMgZm91bmQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9mdW5jdGlvbiBhcnJheUluY2x1ZGVzV2l0aChhcnJheSx2YWx1ZSxjb21wYXJhdG9yKXt2YXIgaW5kZXg9LTEsbGVuZ3RoPWFycmF5PT1udWxsPzA6YXJyYXkubGVuZ3RoO3doaWxlKCsraW5kZXg8bGVuZ3RoKXtpZihjb21wYXJhdG9yKHZhbHVlLGFycmF5W2luZGV4XSkpe3JldHVybiB0cnVlO319cmV0dXJuIGZhbHNlO30vKipcbiAgICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ubWFwYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWVcbiAgICAgKiBzaG9ydGhhbmRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBtYXBwZWQgYXJyYXkuXG4gICAgICovZnVuY3Rpb24gYXJyYXlNYXAoYXJyYXksaXRlcmF0ZWUpe3ZhciBpbmRleD0tMSxsZW5ndGg9YXJyYXk9PW51bGw/MDphcnJheS5sZW5ndGgscmVzdWx0PUFycmF5KGxlbmd0aCk7d2hpbGUoKytpbmRleDxsZW5ndGgpe3Jlc3VsdFtpbmRleF09aXRlcmF0ZWUoYXJyYXlbaW5kZXhdLGluZGV4LGFycmF5KTt9cmV0dXJuIHJlc3VsdDt9LyoqXG4gICAgICogQXBwZW5kcyB0aGUgZWxlbWVudHMgb2YgYHZhbHVlc2AgdG8gYGFycmF5YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgVGhlIHZhbHVlcyB0byBhcHBlbmQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gICAgICovZnVuY3Rpb24gYXJyYXlQdXNoKGFycmF5LHZhbHVlcyl7dmFyIGluZGV4PS0xLGxlbmd0aD12YWx1ZXMubGVuZ3RoLG9mZnNldD1hcnJheS5sZW5ndGg7d2hpbGUoKytpbmRleDxsZW5ndGgpe2FycmF5W29mZnNldCtpbmRleF09dmFsdWVzW2luZGV4XTt9cmV0dXJuIGFycmF5O30vKipcbiAgICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ucmVkdWNlYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAgICAgKiBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0geyp9IFthY2N1bXVsYXRvcl0gVGhlIGluaXRpYWwgdmFsdWUuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbaW5pdEFjY3VtXSBTcGVjaWZ5IHVzaW5nIHRoZSBmaXJzdCBlbGVtZW50IG9mIGBhcnJheWAgYXNcbiAgICAgKiAgdGhlIGluaXRpYWwgdmFsdWUuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGFjY3VtdWxhdGVkIHZhbHVlLlxuICAgICAqL2Z1bmN0aW9uIGFycmF5UmVkdWNlKGFycmF5LGl0ZXJhdGVlLGFjY3VtdWxhdG9yLGluaXRBY2N1bSl7dmFyIGluZGV4PS0xLGxlbmd0aD1hcnJheT09bnVsbD8wOmFycmF5Lmxlbmd0aDtpZihpbml0QWNjdW0mJmxlbmd0aCl7YWNjdW11bGF0b3I9YXJyYXlbKytpbmRleF07fXdoaWxlKCsraW5kZXg8bGVuZ3RoKXthY2N1bXVsYXRvcj1pdGVyYXRlZShhY2N1bXVsYXRvcixhcnJheVtpbmRleF0saW5kZXgsYXJyYXkpO31yZXR1cm4gYWNjdW11bGF0b3I7fS8qKlxuICAgICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5yZWR1Y2VSaWdodGAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yXG4gICAgICogaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHsqfSBbYWNjdW11bGF0b3JdIFRoZSBpbml0aWFsIHZhbHVlLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2luaXRBY2N1bV0gU3BlY2lmeSB1c2luZyB0aGUgbGFzdCBlbGVtZW50IG9mIGBhcnJheWAgYXNcbiAgICAgKiAgdGhlIGluaXRpYWwgdmFsdWUuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGFjY3VtdWxhdGVkIHZhbHVlLlxuICAgICAqL2Z1bmN0aW9uIGFycmF5UmVkdWNlUmlnaHQoYXJyYXksaXRlcmF0ZWUsYWNjdW11bGF0b3IsaW5pdEFjY3VtKXt2YXIgbGVuZ3RoPWFycmF5PT1udWxsPzA6YXJyYXkubGVuZ3RoO2lmKGluaXRBY2N1bSYmbGVuZ3RoKXthY2N1bXVsYXRvcj1hcnJheVstLWxlbmd0aF07fXdoaWxlKGxlbmd0aC0tKXthY2N1bXVsYXRvcj1pdGVyYXRlZShhY2N1bXVsYXRvcixhcnJheVtsZW5ndGhdLGxlbmd0aCxhcnJheSk7fXJldHVybiBhY2N1bXVsYXRvcjt9LyoqXG4gICAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLnNvbWVgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZVxuICAgICAqIHNob3J0aGFuZHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW55IGVsZW1lbnQgcGFzc2VzIHRoZSBwcmVkaWNhdGUgY2hlY2ssXG4gICAgICogIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9mdW5jdGlvbiBhcnJheVNvbWUoYXJyYXkscHJlZGljYXRlKXt2YXIgaW5kZXg9LTEsbGVuZ3RoPWFycmF5PT1udWxsPzA6YXJyYXkubGVuZ3RoO3doaWxlKCsraW5kZXg8bGVuZ3RoKXtpZihwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLGluZGV4LGFycmF5KSl7cmV0dXJuIHRydWU7fX1yZXR1cm4gZmFsc2U7fS8qKlxuICAgICAqIEdldHMgdGhlIHNpemUgb2YgYW4gQVNDSUkgYHN0cmluZ2AuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyBpbnNwZWN0LlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHN0cmluZyBzaXplLlxuICAgICAqL3ZhciBhc2NpaVNpemU9YmFzZVByb3BlcnR5KCdsZW5ndGgnKTsvKipcbiAgICAgKiBDb252ZXJ0cyBhbiBBU0NJSSBgc3RyaW5nYCB0byBhbiBhcnJheS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgYXJyYXkuXG4gICAgICovZnVuY3Rpb24gYXNjaWlUb0FycmF5KHN0cmluZyl7cmV0dXJuIHN0cmluZy5zcGxpdCgnJyk7fS8qKlxuICAgICAqIFNwbGl0cyBhbiBBU0NJSSBgc3RyaW5nYCBpbnRvIGFuIGFycmF5IG9mIGl0cyB3b3Jkcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFRoZSBzdHJpbmcgdG8gaW5zcGVjdC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHdvcmRzIG9mIGBzdHJpbmdgLlxuICAgICAqL2Z1bmN0aW9uIGFzY2lpV29yZHMoc3RyaW5nKXtyZXR1cm4gc3RyaW5nLm1hdGNoKHJlQXNjaWlXb3JkKXx8W107fS8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIG1ldGhvZHMgbGlrZSBgXy5maW5kS2V5YCBhbmQgYF8uZmluZExhc3RLZXlgLFxuICAgICAqIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcywgd2hpY2ggaXRlcmF0ZXMgb3ZlciBgY29sbGVjdGlvbmBcbiAgICAgKiB1c2luZyBgZWFjaEZ1bmNgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGVhY2hGdW5jIFRoZSBmdW5jdGlvbiB0byBpdGVyYXRlIG92ZXIgYGNvbGxlY3Rpb25gLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBmb3VuZCBlbGVtZW50IG9yIGl0cyBrZXksIGVsc2UgYHVuZGVmaW5lZGAuXG4gICAgICovZnVuY3Rpb24gYmFzZUZpbmRLZXkoY29sbGVjdGlvbixwcmVkaWNhdGUsZWFjaEZ1bmMpe3ZhciByZXN1bHQ7ZWFjaEZ1bmMoY29sbGVjdGlvbixmdW5jdGlvbih2YWx1ZSxrZXksY29sbGVjdGlvbil7aWYocHJlZGljYXRlKHZhbHVlLGtleSxjb2xsZWN0aW9uKSl7cmVzdWx0PWtleTtyZXR1cm4gZmFsc2U7fX0pO3JldHVybiByZXN1bHQ7fS8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZpbmRJbmRleGAgYW5kIGBfLmZpbmRMYXN0SW5kZXhgIHdpdGhvdXRcbiAgICAgKiBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZnJvbUluZGV4IFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtmcm9tUmlnaHRdIFNwZWNpZnkgaXRlcmF0aW5nIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICAgICAqL2Z1bmN0aW9uIGJhc2VGaW5kSW5kZXgoYXJyYXkscHJlZGljYXRlLGZyb21JbmRleCxmcm9tUmlnaHQpe3ZhciBsZW5ndGg9YXJyYXkubGVuZ3RoLGluZGV4PWZyb21JbmRleCsoZnJvbVJpZ2h0PzE6LTEpO3doaWxlKGZyb21SaWdodD9pbmRleC0tOisraW5kZXg8bGVuZ3RoKXtpZihwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLGluZGV4LGFycmF5KSl7cmV0dXJuIGluZGV4O319cmV0dXJuLTE7fS8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmluZGV4T2ZgIHdpdGhvdXQgYGZyb21JbmRleGAgYm91bmRzIGNoZWNrcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZnJvbUluZGV4IFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICAgICAqL2Z1bmN0aW9uIGJhc2VJbmRleE9mKGFycmF5LHZhbHVlLGZyb21JbmRleCl7cmV0dXJuIHZhbHVlPT09dmFsdWU/c3RyaWN0SW5kZXhPZihhcnJheSx2YWx1ZSxmcm9tSW5kZXgpOmJhc2VGaW5kSW5kZXgoYXJyYXksYmFzZUlzTmFOLGZyb21JbmRleCk7fS8qKlxuICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgbGlrZSBgYmFzZUluZGV4T2ZgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYSBjb21wYXJhdG9yLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tSW5kZXggVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNvbXBhcmF0b3IgVGhlIGNvbXBhcmF0b3IgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICAgICAqL2Z1bmN0aW9uIGJhc2VJbmRleE9mV2l0aChhcnJheSx2YWx1ZSxmcm9tSW5kZXgsY29tcGFyYXRvcil7dmFyIGluZGV4PWZyb21JbmRleC0xLGxlbmd0aD1hcnJheS5sZW5ndGg7d2hpbGUoKytpbmRleDxsZW5ndGgpe2lmKGNvbXBhcmF0b3IoYXJyYXlbaW5kZXhdLHZhbHVlKSl7cmV0dXJuIGluZGV4O319cmV0dXJuLTE7fS8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTmFOYCB3aXRob3V0IHN1cHBvcnQgZm9yIG51bWJlciBvYmplY3RzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBgTmFOYCwgZWxzZSBgZmFsc2VgLlxuICAgICAqL2Z1bmN0aW9uIGJhc2VJc05hTih2YWx1ZSl7cmV0dXJuIHZhbHVlIT09dmFsdWU7fS8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLm1lYW5gIGFuZCBgXy5tZWFuQnlgIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAgICAgKiBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgbWVhbi5cbiAgICAgKi9mdW5jdGlvbiBiYXNlTWVhbihhcnJheSxpdGVyYXRlZSl7dmFyIGxlbmd0aD1hcnJheT09bnVsbD8wOmFycmF5Lmxlbmd0aDtyZXR1cm4gbGVuZ3RoP2Jhc2VTdW0oYXJyYXksaXRlcmF0ZWUpL2xlbmd0aDpOQU47fS8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnByb3BlcnR5YCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZXAgcGF0aHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFjY2Vzc29yIGZ1bmN0aW9uLlxuICAgICAqL2Z1bmN0aW9uIGJhc2VQcm9wZXJ0eShrZXkpe3JldHVybiBmdW5jdGlvbihvYmplY3Qpe3JldHVybiBvYmplY3Q9PW51bGw/dW5kZWZpbmVkOm9iamVjdFtrZXldO307fS8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnByb3BlcnR5T2ZgIHdpdGhvdXQgc3VwcG9ydCBmb3IgZGVlcCBwYXRocy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFjY2Vzc29yIGZ1bmN0aW9uLlxuICAgICAqL2Z1bmN0aW9uIGJhc2VQcm9wZXJ0eU9mKG9iamVjdCl7cmV0dXJuIGZ1bmN0aW9uKGtleSl7cmV0dXJuIG9iamVjdD09bnVsbD91bmRlZmluZWQ6b2JqZWN0W2tleV07fTt9LyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ucmVkdWNlYCBhbmQgYF8ucmVkdWNlUmlnaHRgLCB3aXRob3V0IHN1cHBvcnRcbiAgICAgKiBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcywgd2hpY2ggaXRlcmF0ZXMgb3ZlciBgY29sbGVjdGlvbmAgdXNpbmcgYGVhY2hGdW5jYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHsqfSBhY2N1bXVsYXRvciBUaGUgaW5pdGlhbCB2YWx1ZS5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGluaXRBY2N1bSBTcGVjaWZ5IHVzaW5nIHRoZSBmaXJzdCBvciBsYXN0IGVsZW1lbnQgb2ZcbiAgICAgKiAgYGNvbGxlY3Rpb25gIGFzIHRoZSBpbml0aWFsIHZhbHVlLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGVhY2hGdW5jIFRoZSBmdW5jdGlvbiB0byBpdGVyYXRlIG92ZXIgYGNvbGxlY3Rpb25gLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBhY2N1bXVsYXRlZCB2YWx1ZS5cbiAgICAgKi9mdW5jdGlvbiBiYXNlUmVkdWNlKGNvbGxlY3Rpb24saXRlcmF0ZWUsYWNjdW11bGF0b3IsaW5pdEFjY3VtLGVhY2hGdW5jKXtlYWNoRnVuYyhjb2xsZWN0aW9uLGZ1bmN0aW9uKHZhbHVlLGluZGV4LGNvbGxlY3Rpb24pe2FjY3VtdWxhdG9yPWluaXRBY2N1bT8oaW5pdEFjY3VtPWZhbHNlLHZhbHVlKTppdGVyYXRlZShhY2N1bXVsYXRvcix2YWx1ZSxpbmRleCxjb2xsZWN0aW9uKTt9KTtyZXR1cm4gYWNjdW11bGF0b3I7fS8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnNvcnRCeWAgd2hpY2ggdXNlcyBgY29tcGFyZXJgIHRvIGRlZmluZSB0aGVcbiAgICAgKiBzb3J0IG9yZGVyIG9mIGBhcnJheWAgYW5kIHJlcGxhY2VzIGNyaXRlcmlhIG9iamVjdHMgd2l0aCB0aGVpciBjb3JyZXNwb25kaW5nXG4gICAgICogdmFsdWVzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gc29ydC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjb21wYXJlciBUaGUgZnVuY3Rpb24gdG8gZGVmaW5lIHNvcnQgb3JkZXIuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gICAgICovZnVuY3Rpb24gYmFzZVNvcnRCeShhcnJheSxjb21wYXJlcil7dmFyIGxlbmd0aD1hcnJheS5sZW5ndGg7YXJyYXkuc29ydChjb21wYXJlcik7d2hpbGUobGVuZ3RoLS0pe2FycmF5W2xlbmd0aF09YXJyYXlbbGVuZ3RoXS52YWx1ZTt9cmV0dXJuIGFycmF5O30vKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5zdW1gIGFuZCBgXy5zdW1CeWAgd2l0aG91dCBzdXBwb3J0IGZvclxuICAgICAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBzdW0uXG4gICAgICovZnVuY3Rpb24gYmFzZVN1bShhcnJheSxpdGVyYXRlZSl7dmFyIHJlc3VsdCxpbmRleD0tMSxsZW5ndGg9YXJyYXkubGVuZ3RoO3doaWxlKCsraW5kZXg8bGVuZ3RoKXt2YXIgY3VycmVudD1pdGVyYXRlZShhcnJheVtpbmRleF0pO2lmKGN1cnJlbnQhPT11bmRlZmluZWQpe3Jlc3VsdD1yZXN1bHQ9PT11bmRlZmluZWQ/Y3VycmVudDpyZXN1bHQrY3VycmVudDt9fXJldHVybiByZXN1bHQ7fS8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnRpbWVzYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHNcbiAgICAgKiBvciBtYXggYXJyYXkgbGVuZ3RoIGNoZWNrcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciBvZiB0aW1lcyB0byBpbnZva2UgYGl0ZXJhdGVlYC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcmVzdWx0cy5cbiAgICAgKi9mdW5jdGlvbiBiYXNlVGltZXMobixpdGVyYXRlZSl7dmFyIGluZGV4PS0xLHJlc3VsdD1BcnJheShuKTt3aGlsZSgrK2luZGV4PG4pe3Jlc3VsdFtpbmRleF09aXRlcmF0ZWUoaW5kZXgpO31yZXR1cm4gcmVzdWx0O30vKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50b1BhaXJzYCBhbmQgYF8udG9QYWlyc0luYCB3aGljaCBjcmVhdGVzIGFuIGFycmF5XG4gICAgICogb2Yga2V5LXZhbHVlIHBhaXJzIGZvciBgb2JqZWN0YCBjb3JyZXNwb25kaW5nIHRvIHRoZSBwcm9wZXJ0eSBuYW1lcyBvZiBgcHJvcHNgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtBcnJheX0gcHJvcHMgVGhlIHByb3BlcnR5IG5hbWVzIHRvIGdldCB2YWx1ZXMgZm9yLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGtleS12YWx1ZSBwYWlycy5cbiAgICAgKi9mdW5jdGlvbiBiYXNlVG9QYWlycyhvYmplY3QscHJvcHMpe3JldHVybiBhcnJheU1hcChwcm9wcyxmdW5jdGlvbihrZXkpe3JldHVybltrZXksb2JqZWN0W2tleV1dO30pO30vKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy51bmFyeWAgd2l0aG91dCBzdXBwb3J0IGZvciBzdG9yaW5nIG1ldGFkYXRhLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjYXAgYXJndW1lbnRzIGZvci5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjYXBwZWQgZnVuY3Rpb24uXG4gICAgICovZnVuY3Rpb24gYmFzZVVuYXJ5KGZ1bmMpe3JldHVybiBmdW5jdGlvbih2YWx1ZSl7cmV0dXJuIGZ1bmModmFsdWUpO307fS8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnZhbHVlc2AgYW5kIGBfLnZhbHVlc0luYCB3aGljaCBjcmVhdGVzIGFuXG4gICAgICogYXJyYXkgb2YgYG9iamVjdGAgcHJvcGVydHkgdmFsdWVzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHByb3BlcnR5IG5hbWVzXG4gICAgICogb2YgYHByb3BzYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IHByb3BzIFRoZSBwcm9wZXJ0eSBuYW1lcyB0byBnZXQgdmFsdWVzIGZvci5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSB2YWx1ZXMuXG4gICAgICovZnVuY3Rpb24gYmFzZVZhbHVlcyhvYmplY3QscHJvcHMpe3JldHVybiBhcnJheU1hcChwcm9wcyxmdW5jdGlvbihrZXkpe3JldHVybiBvYmplY3Rba2V5XTt9KTt9LyoqXG4gICAgICogQ2hlY2tzIGlmIGEgYGNhY2hlYCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gY2FjaGUgVGhlIGNhY2hlIHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9mdW5jdGlvbiBjYWNoZUhhcyhjYWNoZSxrZXkpe3JldHVybiBjYWNoZS5oYXMoa2V5KTt9LyoqXG4gICAgICogVXNlZCBieSBgXy50cmltYCBhbmQgYF8udHJpbVN0YXJ0YCB0byBnZXQgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBzdHJpbmcgc3ltYm9sXG4gICAgICogdGhhdCBpcyBub3QgZm91bmQgaW4gdGhlIGNoYXJhY3RlciBzeW1ib2xzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBzdHJTeW1ib2xzIFRoZSBzdHJpbmcgc3ltYm9scyB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGNoclN5bWJvbHMgVGhlIGNoYXJhY3RlciBzeW1ib2xzIHRvIGZpbmQuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IHVubWF0Y2hlZCBzdHJpbmcgc3ltYm9sLlxuICAgICAqL2Z1bmN0aW9uIGNoYXJzU3RhcnRJbmRleChzdHJTeW1ib2xzLGNoclN5bWJvbHMpe3ZhciBpbmRleD0tMSxsZW5ndGg9c3RyU3ltYm9scy5sZW5ndGg7d2hpbGUoKytpbmRleDxsZW5ndGgmJmJhc2VJbmRleE9mKGNoclN5bWJvbHMsc3RyU3ltYm9sc1tpbmRleF0sMCk+LTEpe31yZXR1cm4gaW5kZXg7fS8qKlxuICAgICAqIFVzZWQgYnkgYF8udHJpbWAgYW5kIGBfLnRyaW1FbmRgIHRvIGdldCB0aGUgaW5kZXggb2YgdGhlIGxhc3Qgc3RyaW5nIHN5bWJvbFxuICAgICAqIHRoYXQgaXMgbm90IGZvdW5kIGluIHRoZSBjaGFyYWN0ZXIgc3ltYm9scy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gc3RyU3ltYm9scyBUaGUgc3RyaW5nIHN5bWJvbHMgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBjaHJTeW1ib2xzIFRoZSBjaGFyYWN0ZXIgc3ltYm9scyB0byBmaW5kLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBsYXN0IHVubWF0Y2hlZCBzdHJpbmcgc3ltYm9sLlxuICAgICAqL2Z1bmN0aW9uIGNoYXJzRW5kSW5kZXgoc3RyU3ltYm9scyxjaHJTeW1ib2xzKXt2YXIgaW5kZXg9c3RyU3ltYm9scy5sZW5ndGg7d2hpbGUoaW5kZXgtLSYmYmFzZUluZGV4T2YoY2hyU3ltYm9scyxzdHJTeW1ib2xzW2luZGV4XSwwKT4tMSl7fXJldHVybiBpbmRleDt9LyoqXG4gICAgICogR2V0cyB0aGUgbnVtYmVyIG9mIGBwbGFjZWhvbGRlcmAgb2NjdXJyZW5jZXMgaW4gYGFycmF5YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHsqfSBwbGFjZWhvbGRlciBUaGUgcGxhY2Vob2xkZXIgdG8gc2VhcmNoIGZvci5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBwbGFjZWhvbGRlciBjb3VudC5cbiAgICAgKi9mdW5jdGlvbiBjb3VudEhvbGRlcnMoYXJyYXkscGxhY2Vob2xkZXIpe3ZhciBsZW5ndGg9YXJyYXkubGVuZ3RoLHJlc3VsdD0wO3doaWxlKGxlbmd0aC0tKXtpZihhcnJheVtsZW5ndGhdPT09cGxhY2Vob2xkZXIpeysrcmVzdWx0O319cmV0dXJuIHJlc3VsdDt9LyoqXG4gICAgICogVXNlZCBieSBgXy5kZWJ1cnJgIHRvIGNvbnZlcnQgTGF0aW4tMSBTdXBwbGVtZW50IGFuZCBMYXRpbiBFeHRlbmRlZC1BXG4gICAgICogbGV0dGVycyB0byBiYXNpYyBMYXRpbiBsZXR0ZXJzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbGV0dGVyIFRoZSBtYXRjaGVkIGxldHRlciB0byBkZWJ1cnIuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgZGVidXJyZWQgbGV0dGVyLlxuICAgICAqL3ZhciBkZWJ1cnJMZXR0ZXI9YmFzZVByb3BlcnR5T2YoZGVidXJyZWRMZXR0ZXJzKTsvKipcbiAgICAgKiBVc2VkIGJ5IGBfLmVzY2FwZWAgdG8gY29udmVydCBjaGFyYWN0ZXJzIHRvIEhUTUwgZW50aXRpZXMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjaHIgVGhlIG1hdGNoZWQgY2hhcmFjdGVyIHRvIGVzY2FwZS5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBlc2NhcGVkIGNoYXJhY3Rlci5cbiAgICAgKi92YXIgZXNjYXBlSHRtbENoYXI9YmFzZVByb3BlcnR5T2YoaHRtbEVzY2FwZXMpOy8qKlxuICAgICAqIFVzZWQgYnkgYF8udGVtcGxhdGVgIHRvIGVzY2FwZSBjaGFyYWN0ZXJzIGZvciBpbmNsdXNpb24gaW4gY29tcGlsZWQgc3RyaW5nIGxpdGVyYWxzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gY2hyIFRoZSBtYXRjaGVkIGNoYXJhY3RlciB0byBlc2NhcGUuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgZXNjYXBlZCBjaGFyYWN0ZXIuXG4gICAgICovZnVuY3Rpb24gZXNjYXBlU3RyaW5nQ2hhcihjaHIpe3JldHVybidcXFxcJytzdHJpbmdFc2NhcGVzW2Nocl07fS8qKlxuICAgICAqIEdldHMgdGhlIHZhbHVlIGF0IGBrZXlgIG9mIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUuXG4gICAgICovZnVuY3Rpb24gZ2V0VmFsdWUob2JqZWN0LGtleSl7cmV0dXJuIG9iamVjdD09bnVsbD91bmRlZmluZWQ6b2JqZWN0W2tleV07fS8qKlxuICAgICAqIENoZWNrcyBpZiBgc3RyaW5nYCBjb250YWlucyBVbmljb2RlIHN5bWJvbHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBpbnNwZWN0LlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhIHN5bWJvbCBpcyBmb3VuZCwgZWxzZSBgZmFsc2VgLlxuICAgICAqL2Z1bmN0aW9uIGhhc1VuaWNvZGUoc3RyaW5nKXtyZXR1cm4gcmVIYXNVbmljb2RlLnRlc3Qoc3RyaW5nKTt9LyoqXG4gICAgICogQ2hlY2tzIGlmIGBzdHJpbmdgIGNvbnRhaW5zIGEgd29yZCBjb21wb3NlZCBvZiBVbmljb2RlIHN5bWJvbHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBpbnNwZWN0LlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhIHdvcmQgaXMgZm91bmQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9mdW5jdGlvbiBoYXNVbmljb2RlV29yZChzdHJpbmcpe3JldHVybiByZUhhc1VuaWNvZGVXb3JkLnRlc3Qoc3RyaW5nKTt9LyoqXG4gICAgICogQ29udmVydHMgYGl0ZXJhdG9yYCB0byBhbiBhcnJheS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGl0ZXJhdG9yIFRoZSBpdGVyYXRvciB0byBjb252ZXJ0LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY29udmVydGVkIGFycmF5LlxuICAgICAqL2Z1bmN0aW9uIGl0ZXJhdG9yVG9BcnJheShpdGVyYXRvcil7dmFyIGRhdGEscmVzdWx0PVtdO3doaWxlKCEoZGF0YT1pdGVyYXRvci5uZXh0KCkpLmRvbmUpe3Jlc3VsdC5wdXNoKGRhdGEudmFsdWUpO31yZXR1cm4gcmVzdWx0O30vKipcbiAgICAgKiBDb252ZXJ0cyBgbWFwYCB0byBpdHMga2V5LXZhbHVlIHBhaXJzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gbWFwIFRoZSBtYXAgdG8gY29udmVydC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGtleS12YWx1ZSBwYWlycy5cbiAgICAgKi9mdW5jdGlvbiBtYXBUb0FycmF5KG1hcCl7dmFyIGluZGV4PS0xLHJlc3VsdD1BcnJheShtYXAuc2l6ZSk7bWFwLmZvckVhY2goZnVuY3Rpb24odmFsdWUsa2V5KXtyZXN1bHRbKytpbmRleF09W2tleSx2YWx1ZV07fSk7cmV0dXJuIHJlc3VsdDt9LyoqXG4gICAgICogQ3JlYXRlcyBhIHVuYXJ5IGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2Agd2l0aCBpdHMgYXJndW1lbnQgdHJhbnNmb3JtZWQuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdyYXAuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNmb3JtIFRoZSBhcmd1bWVudCB0cmFuc2Zvcm0uXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICovZnVuY3Rpb24gb3ZlckFyZyhmdW5jLHRyYW5zZm9ybSl7cmV0dXJuIGZ1bmN0aW9uKGFyZyl7cmV0dXJuIGZ1bmModHJhbnNmb3JtKGFyZykpO307fS8qKlxuICAgICAqIFJlcGxhY2VzIGFsbCBgcGxhY2Vob2xkZXJgIGVsZW1lbnRzIGluIGBhcnJheWAgd2l0aCBhbiBpbnRlcm5hbCBwbGFjZWhvbGRlclxuICAgICAqIGFuZCByZXR1cm5zIGFuIGFycmF5IG9mIHRoZWlyIGluZGV4ZXMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBtb2RpZnkuXG4gICAgICogQHBhcmFtIHsqfSBwbGFjZWhvbGRlciBUaGUgcGxhY2Vob2xkZXIgdG8gcmVwbGFjZS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBwbGFjZWhvbGRlciBpbmRleGVzLlxuICAgICAqL2Z1bmN0aW9uIHJlcGxhY2VIb2xkZXJzKGFycmF5LHBsYWNlaG9sZGVyKXt2YXIgaW5kZXg9LTEsbGVuZ3RoPWFycmF5Lmxlbmd0aCxyZXNJbmRleD0wLHJlc3VsdD1bXTt3aGlsZSgrK2luZGV4PGxlbmd0aCl7dmFyIHZhbHVlPWFycmF5W2luZGV4XTtpZih2YWx1ZT09PXBsYWNlaG9sZGVyfHx2YWx1ZT09PVBMQUNFSE9MREVSKXthcnJheVtpbmRleF09UExBQ0VIT0xERVI7cmVzdWx0W3Jlc0luZGV4KytdPWluZGV4O319cmV0dXJuIHJlc3VsdDt9LyoqXG4gICAgICogR2V0cyB0aGUgdmFsdWUgYXQgYGtleWAsIHVubGVzcyBga2V5YCBpcyBcIl9fcHJvdG9fX1wiLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHByb3BlcnR5IHZhbHVlLlxuICAgICAqL2Z1bmN0aW9uIHNhZmVHZXQob2JqZWN0LGtleSl7cmV0dXJuIGtleT09J19fcHJvdG9fXyc/dW5kZWZpbmVkOm9iamVjdFtrZXldO30vKipcbiAgICAgKiBDb252ZXJ0cyBgc2V0YCB0byBhbiBhcnJheSBvZiBpdHMgdmFsdWVzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc2V0IFRoZSBzZXQgdG8gY29udmVydC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHZhbHVlcy5cbiAgICAgKi9mdW5jdGlvbiBzZXRUb0FycmF5KHNldCl7dmFyIGluZGV4PS0xLHJlc3VsdD1BcnJheShzZXQuc2l6ZSk7c2V0LmZvckVhY2goZnVuY3Rpb24odmFsdWUpe3Jlc3VsdFsrK2luZGV4XT12YWx1ZTt9KTtyZXR1cm4gcmVzdWx0O30vKipcbiAgICAgKiBDb252ZXJ0cyBgc2V0YCB0byBpdHMgdmFsdWUtdmFsdWUgcGFpcnMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzZXQgVGhlIHNldCB0byBjb252ZXJ0LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgdmFsdWUtdmFsdWUgcGFpcnMuXG4gICAgICovZnVuY3Rpb24gc2V0VG9QYWlycyhzZXQpe3ZhciBpbmRleD0tMSxyZXN1bHQ9QXJyYXkoc2V0LnNpemUpO3NldC5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlKXtyZXN1bHRbKytpbmRleF09W3ZhbHVlLHZhbHVlXTt9KTtyZXR1cm4gcmVzdWx0O30vKipcbiAgICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uaW5kZXhPZmAgd2hpY2ggcGVyZm9ybXMgc3RyaWN0IGVxdWFsaXR5XG4gICAgICogY29tcGFyaXNvbnMgb2YgdmFsdWVzLCBpLmUuIGA9PT1gLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tSW5kZXggVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gICAgICovZnVuY3Rpb24gc3RyaWN0SW5kZXhPZihhcnJheSx2YWx1ZSxmcm9tSW5kZXgpe3ZhciBpbmRleD1mcm9tSW5kZXgtMSxsZW5ndGg9YXJyYXkubGVuZ3RoO3doaWxlKCsraW5kZXg8bGVuZ3RoKXtpZihhcnJheVtpbmRleF09PT12YWx1ZSl7cmV0dXJuIGluZGV4O319cmV0dXJuLTE7fS8qKlxuICAgICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5sYXN0SW5kZXhPZmAgd2hpY2ggcGVyZm9ybXMgc3RyaWN0IGVxdWFsaXR5XG4gICAgICogY29tcGFyaXNvbnMgb2YgdmFsdWVzLCBpLmUuIGA9PT1gLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tSW5kZXggVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gICAgICovZnVuY3Rpb24gc3RyaWN0TGFzdEluZGV4T2YoYXJyYXksdmFsdWUsZnJvbUluZGV4KXt2YXIgaW5kZXg9ZnJvbUluZGV4KzE7d2hpbGUoaW5kZXgtLSl7aWYoYXJyYXlbaW5kZXhdPT09dmFsdWUpe3JldHVybiBpbmRleDt9fXJldHVybiBpbmRleDt9LyoqXG4gICAgICogR2V0cyB0aGUgbnVtYmVyIG9mIHN5bWJvbHMgaW4gYHN0cmluZ2AuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBpbnNwZWN0LlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHN0cmluZyBzaXplLlxuICAgICAqL2Z1bmN0aW9uIHN0cmluZ1NpemUoc3RyaW5nKXtyZXR1cm4gaGFzVW5pY29kZShzdHJpbmcpP3VuaWNvZGVTaXplKHN0cmluZyk6YXNjaWlTaXplKHN0cmluZyk7fS8qKlxuICAgICAqIENvbnZlcnRzIGBzdHJpbmdgIHRvIGFuIGFycmF5LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBhcnJheS5cbiAgICAgKi9mdW5jdGlvbiBzdHJpbmdUb0FycmF5KHN0cmluZyl7cmV0dXJuIGhhc1VuaWNvZGUoc3RyaW5nKT91bmljb2RlVG9BcnJheShzdHJpbmcpOmFzY2lpVG9BcnJheShzdHJpbmcpO30vKipcbiAgICAgKiBVc2VkIGJ5IGBfLnVuZXNjYXBlYCB0byBjb252ZXJ0IEhUTUwgZW50aXRpZXMgdG8gY2hhcmFjdGVycy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGNociBUaGUgbWF0Y2hlZCBjaGFyYWN0ZXIgdG8gdW5lc2NhcGUuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgdW5lc2NhcGVkIGNoYXJhY3Rlci5cbiAgICAgKi92YXIgdW5lc2NhcGVIdG1sQ2hhcj1iYXNlUHJvcGVydHlPZihodG1sVW5lc2NhcGVzKTsvKipcbiAgICAgKiBHZXRzIHRoZSBzaXplIG9mIGEgVW5pY29kZSBgc3RyaW5nYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIGluc3BlY3QuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgc3RyaW5nIHNpemUuXG4gICAgICovZnVuY3Rpb24gdW5pY29kZVNpemUoc3RyaW5nKXt2YXIgcmVzdWx0PXJlVW5pY29kZS5sYXN0SW5kZXg9MDt3aGlsZShyZVVuaWNvZGUudGVzdChzdHJpbmcpKXsrK3Jlc3VsdDt9cmV0dXJuIHJlc3VsdDt9LyoqXG4gICAgICogQ29udmVydHMgYSBVbmljb2RlIGBzdHJpbmdgIHRvIGFuIGFycmF5LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBhcnJheS5cbiAgICAgKi9mdW5jdGlvbiB1bmljb2RlVG9BcnJheShzdHJpbmcpe3JldHVybiBzdHJpbmcubWF0Y2gocmVVbmljb2RlKXx8W107fS8qKlxuICAgICAqIFNwbGl0cyBhIFVuaWNvZGUgYHN0cmluZ2AgaW50byBhbiBhcnJheSBvZiBpdHMgd29yZHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBUaGUgc3RyaW5nIHRvIGluc3BlY3QuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSB3b3JkcyBvZiBgc3RyaW5nYC5cbiAgICAgKi9mdW5jdGlvbiB1bmljb2RlV29yZHMoc3RyaW5nKXtyZXR1cm4gc3RyaW5nLm1hdGNoKHJlVW5pY29kZVdvcmQpfHxbXTt9LyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLy8qKlxuICAgICAqIENyZWF0ZSBhIG5ldyBwcmlzdGluZSBgbG9kYXNoYCBmdW5jdGlvbiB1c2luZyB0aGUgYGNvbnRleHRgIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAxLjEuMFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtjb250ZXh0PXJvb3RdIFRoZSBjb250ZXh0IG9iamVjdC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYSBuZXcgYGxvZGFzaGAgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ubWl4aW4oeyAnZm9vJzogXy5jb25zdGFudCgnZm9vJykgfSk7XG4gICAgICpcbiAgICAgKiB2YXIgbG9kYXNoID0gXy5ydW5JbkNvbnRleHQoKTtcbiAgICAgKiBsb2Rhc2gubWl4aW4oeyAnYmFyJzogbG9kYXNoLmNvbnN0YW50KCdiYXInKSB9KTtcbiAgICAgKlxuICAgICAqIF8uaXNGdW5jdGlvbihfLmZvbyk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqIF8uaXNGdW5jdGlvbihfLmJhcik7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIGxvZGFzaC5pc0Z1bmN0aW9uKGxvZGFzaC5mb28pO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICogbG9kYXNoLmlzRnVuY3Rpb24obG9kYXNoLmJhcik7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogLy8gQ3JlYXRlIGEgc3VwZWQtdXAgYGRlZmVyYCBpbiBOb2RlLmpzLlxuICAgICAqIHZhciBkZWZlciA9IF8ucnVuSW5Db250ZXh0KHsgJ3NldFRpbWVvdXQnOiBzZXRJbW1lZGlhdGUgfSkuZGVmZXI7XG4gICAgICovdmFyIHJ1bkluQ29udGV4dD1mdW5jdGlvbiBydW5JbkNvbnRleHQoY29udGV4dCl7Y29udGV4dD1jb250ZXh0PT1udWxsP3Jvb3Q6Xy5kZWZhdWx0cyhyb290Lk9iamVjdCgpLGNvbnRleHQsXy5waWNrKHJvb3QsY29udGV4dFByb3BzKSk7LyoqIEJ1aWx0LWluIGNvbnN0cnVjdG9yIHJlZmVyZW5jZXMuICovdmFyIEFycmF5PWNvbnRleHQuQXJyYXksRGF0ZT1jb250ZXh0LkRhdGUsRXJyb3I9Y29udGV4dC5FcnJvcixGdW5jdGlvbj1jb250ZXh0LkZ1bmN0aW9uLE1hdGg9Y29udGV4dC5NYXRoLE9iamVjdD1jb250ZXh0Lk9iamVjdCxSZWdFeHA9Y29udGV4dC5SZWdFeHAsU3RyaW5nPWNvbnRleHQuU3RyaW5nLFR5cGVFcnJvcj1jb250ZXh0LlR5cGVFcnJvcjsvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovdmFyIGFycmF5UHJvdG89QXJyYXkucHJvdG90eXBlLGZ1bmNQcm90bz1GdW5jdGlvbi5wcm90b3R5cGUsb2JqZWN0UHJvdG89T2JqZWN0LnByb3RvdHlwZTsvKiogVXNlZCB0byBkZXRlY3Qgb3ZlcnJlYWNoaW5nIGNvcmUtanMgc2hpbXMuICovdmFyIGNvcmVKc0RhdGE9Y29udGV4dFsnX19jb3JlLWpzX3NoYXJlZF9fJ107LyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL3ZhciBmdW5jVG9TdHJpbmc9ZnVuY1Byb3RvLnRvU3RyaW5nOy8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL3ZhciBoYXNPd25Qcm9wZXJ0eT1vYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTsvKiogVXNlZCB0byBnZW5lcmF0ZSB1bmlxdWUgSURzLiAqL3ZhciBpZENvdW50ZXI9MDsvKiogVXNlZCB0byBkZXRlY3QgbWV0aG9kcyBtYXNxdWVyYWRpbmcgYXMgbmF0aXZlLiAqL3ZhciBtYXNrU3JjS2V5PWZ1bmN0aW9uKCl7dmFyIHVpZD0vW14uXSskLy5leGVjKGNvcmVKc0RhdGEmJmNvcmVKc0RhdGEua2V5cyYmY29yZUpzRGF0YS5rZXlzLklFX1BST1RPfHwnJyk7cmV0dXJuIHVpZD8nU3ltYm9sKHNyYylfMS4nK3VpZDonJzt9KCk7LyoqXG4gICAgICAgKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gICAgICAgKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAgICAgICAqIG9mIHZhbHVlcy5cbiAgICAgICAqL3ZhciBuYXRpdmVPYmplY3RUb1N0cmluZz1vYmplY3RQcm90by50b1N0cmluZzsvKiogVXNlZCB0byBpbmZlciB0aGUgYE9iamVjdGAgY29uc3RydWN0b3IuICovdmFyIG9iamVjdEN0b3JTdHJpbmc9ZnVuY1RvU3RyaW5nLmNhbGwoT2JqZWN0KTsvKiogVXNlZCB0byByZXN0b3JlIHRoZSBvcmlnaW5hbCBgX2AgcmVmZXJlbmNlIGluIGBfLm5vQ29uZmxpY3RgLiAqL3ZhciBvbGREYXNoPXJvb3QuXzsvKiogVXNlZCB0byBkZXRlY3QgaWYgYSBtZXRob2QgaXMgbmF0aXZlLiAqL3ZhciByZUlzTmF0aXZlPVJlZ0V4cCgnXicrZnVuY1RvU3RyaW5nLmNhbGwoaGFzT3duUHJvcGVydHkpLnJlcGxhY2UocmVSZWdFeHBDaGFyLCdcXFxcJCYnKS5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcXFxcKCl8IGZvciAuKz8oPz1cXFxcXFxdKS9nLCckMS4qPycpKyckJyk7LyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovdmFyIEJ1ZmZlcj1tb2R1bGVFeHBvcnRzP2NvbnRleHQuQnVmZmVyOnVuZGVmaW5lZCxfU3ltYm9sPWNvbnRleHQuU3ltYm9sLFVpbnQ4QXJyYXk9Y29udGV4dC5VaW50OEFycmF5LGFsbG9jVW5zYWZlPUJ1ZmZlcj9CdWZmZXIuYWxsb2NVbnNhZmU6dW5kZWZpbmVkLGdldFByb3RvdHlwZT1vdmVyQXJnKE9iamVjdC5nZXRQcm90b3R5cGVPZixPYmplY3QpLG9iamVjdENyZWF0ZT1PYmplY3QuY3JlYXRlLHByb3BlcnR5SXNFbnVtZXJhYmxlPW9iamVjdFByb3RvLnByb3BlcnR5SXNFbnVtZXJhYmxlLHNwbGljZT1hcnJheVByb3RvLnNwbGljZSxzcHJlYWRhYmxlU3ltYm9sPV9TeW1ib2w/X1N5bWJvbC5pc0NvbmNhdFNwcmVhZGFibGU6dW5kZWZpbmVkLHN5bUl0ZXJhdG9yPV9TeW1ib2w/X1N5bWJvbC5pdGVyYXRvcjp1bmRlZmluZWQsc3ltVG9TdHJpbmdUYWc9X1N5bWJvbD9fU3ltYm9sLnRvU3RyaW5nVGFnOnVuZGVmaW5lZDt2YXIgZGVmaW5lUHJvcGVydHk9ZnVuY3Rpb24oKXt0cnl7dmFyIGZ1bmM9Z2V0TmF0aXZlKE9iamVjdCwnZGVmaW5lUHJvcGVydHknKTtmdW5jKHt9LCcnLHt9KTtyZXR1cm4gZnVuYzt9Y2F0Y2goZSl7fX0oKTsvKiogTW9ja2VkIGJ1aWx0LWlucy4gKi92YXIgY3R4Q2xlYXJUaW1lb3V0PWNvbnRleHQuY2xlYXJUaW1lb3V0IT09cm9vdC5jbGVhclRpbWVvdXQmJmNvbnRleHQuY2xlYXJUaW1lb3V0LGN0eE5vdz1EYXRlJiZEYXRlLm5vdyE9PXJvb3QuRGF0ZS5ub3cmJkRhdGUubm93LGN0eFNldFRpbWVvdXQ9Y29udGV4dC5zZXRUaW1lb3V0IT09cm9vdC5zZXRUaW1lb3V0JiZjb250ZXh0LnNldFRpbWVvdXQ7LyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL3ZhciBuYXRpdmVDZWlsPU1hdGguY2VpbCxuYXRpdmVGbG9vcj1NYXRoLmZsb29yLG5hdGl2ZUdldFN5bWJvbHM9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyxuYXRpdmVJc0J1ZmZlcj1CdWZmZXI/QnVmZmVyLmlzQnVmZmVyOnVuZGVmaW5lZCxuYXRpdmVJc0Zpbml0ZT1jb250ZXh0LmlzRmluaXRlLG5hdGl2ZUpvaW49YXJyYXlQcm90by5qb2luLG5hdGl2ZUtleXM9b3ZlckFyZyhPYmplY3Qua2V5cyxPYmplY3QpLG5hdGl2ZU1heD1NYXRoLm1heCxuYXRpdmVNaW49TWF0aC5taW4sbmF0aXZlTm93PURhdGUubm93LG5hdGl2ZVBhcnNlSW50PWNvbnRleHQucGFyc2VJbnQsbmF0aXZlUmFuZG9tPU1hdGgucmFuZG9tLG5hdGl2ZVJldmVyc2U9YXJyYXlQcm90by5yZXZlcnNlOy8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi92YXIgRGF0YVZpZXc9Z2V0TmF0aXZlKGNvbnRleHQsJ0RhdGFWaWV3JyksTWFwPWdldE5hdGl2ZShjb250ZXh0LCdNYXAnKSxQcm9taXNlPWdldE5hdGl2ZShjb250ZXh0LCdQcm9taXNlJyksU2V0PWdldE5hdGl2ZShjb250ZXh0LCdTZXQnKSxXZWFrTWFwPWdldE5hdGl2ZShjb250ZXh0LCdXZWFrTWFwJyksbmF0aXZlQ3JlYXRlPWdldE5hdGl2ZShPYmplY3QsJ2NyZWF0ZScpOy8qKiBVc2VkIHRvIHN0b3JlIGZ1bmN0aW9uIG1ldGFkYXRhLiAqL3ZhciBtZXRhTWFwPVdlYWtNYXAmJm5ldyBXZWFrTWFwKCk7LyoqIFVzZWQgdG8gbG9va3VwIHVubWluaWZpZWQgZnVuY3Rpb24gbmFtZXMuICovdmFyIHJlYWxOYW1lcz17fTsvKiogVXNlZCB0byBkZXRlY3QgbWFwcywgc2V0cywgYW5kIHdlYWttYXBzLiAqL3ZhciBkYXRhVmlld0N0b3JTdHJpbmc9dG9Tb3VyY2UoRGF0YVZpZXcpLG1hcEN0b3JTdHJpbmc9dG9Tb3VyY2UoTWFwKSxwcm9taXNlQ3RvclN0cmluZz10b1NvdXJjZShQcm9taXNlKSxzZXRDdG9yU3RyaW5nPXRvU291cmNlKFNldCksd2Vha01hcEN0b3JTdHJpbmc9dG9Tb3VyY2UoV2Vha01hcCk7LyoqIFVzZWQgdG8gY29udmVydCBzeW1ib2xzIHRvIHByaW1pdGl2ZXMgYW5kIHN0cmluZ3MuICovdmFyIHN5bWJvbFByb3RvPV9TeW1ib2w/X1N5bWJvbC5wcm90b3R5cGU6dW5kZWZpbmVkLHN5bWJvbFZhbHVlT2Y9c3ltYm9sUHJvdG8/c3ltYm9sUHJvdG8udmFsdWVPZjp1bmRlZmluZWQsc3ltYm9sVG9TdHJpbmc9c3ltYm9sUHJvdG8/c3ltYm9sUHJvdG8udG9TdHJpbmc6dW5kZWZpbmVkOy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovLyoqXG4gICAgICAgKiBDcmVhdGVzIGEgYGxvZGFzaGAgb2JqZWN0IHdoaWNoIHdyYXBzIGB2YWx1ZWAgdG8gZW5hYmxlIGltcGxpY2l0IG1ldGhvZFxuICAgICAgICogY2hhaW4gc2VxdWVuY2VzLiBNZXRob2RzIHRoYXQgb3BlcmF0ZSBvbiBhbmQgcmV0dXJuIGFycmF5cywgY29sbGVjdGlvbnMsXG4gICAgICAgKiBhbmQgZnVuY3Rpb25zIGNhbiBiZSBjaGFpbmVkIHRvZ2V0aGVyLiBNZXRob2RzIHRoYXQgcmV0cmlldmUgYSBzaW5nbGUgdmFsdWVcbiAgICAgICAqIG9yIG1heSByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUgd2lsbCBhdXRvbWF0aWNhbGx5IGVuZCB0aGUgY2hhaW4gc2VxdWVuY2VcbiAgICAgICAqIGFuZCByZXR1cm4gdGhlIHVud3JhcHBlZCB2YWx1ZS4gT3RoZXJ3aXNlLCB0aGUgdmFsdWUgbXVzdCBiZSB1bndyYXBwZWRcbiAgICAgICAqIHdpdGggYF8jdmFsdWVgLlxuICAgICAgICpcbiAgICAgICAqIEV4cGxpY2l0IGNoYWluIHNlcXVlbmNlcywgd2hpY2ggbXVzdCBiZSB1bndyYXBwZWQgd2l0aCBgXyN2YWx1ZWAsIG1heSBiZVxuICAgICAgICogZW5hYmxlZCB1c2luZyBgXy5jaGFpbmAuXG4gICAgICAgKlxuICAgICAgICogVGhlIGV4ZWN1dGlvbiBvZiBjaGFpbmVkIG1ldGhvZHMgaXMgbGF6eSwgdGhhdCBpcywgaXQncyBkZWZlcnJlZCB1bnRpbFxuICAgICAgICogYF8jdmFsdWVgIGlzIGltcGxpY2l0bHkgb3IgZXhwbGljaXRseSBjYWxsZWQuXG4gICAgICAgKlxuICAgICAgICogTGF6eSBldmFsdWF0aW9uIGFsbG93cyBzZXZlcmFsIG1ldGhvZHMgdG8gc3VwcG9ydCBzaG9ydGN1dCBmdXNpb24uXG4gICAgICAgKiBTaG9ydGN1dCBmdXNpb24gaXMgYW4gb3B0aW1pemF0aW9uIHRvIG1lcmdlIGl0ZXJhdGVlIGNhbGxzOyB0aGlzIGF2b2lkc1xuICAgICAgICogdGhlIGNyZWF0aW9uIG9mIGludGVybWVkaWF0ZSBhcnJheXMgYW5kIGNhbiBncmVhdGx5IHJlZHVjZSB0aGUgbnVtYmVyIG9mXG4gICAgICAgKiBpdGVyYXRlZSBleGVjdXRpb25zLiBTZWN0aW9ucyBvZiBhIGNoYWluIHNlcXVlbmNlIHF1YWxpZnkgZm9yIHNob3J0Y3V0XG4gICAgICAgKiBmdXNpb24gaWYgdGhlIHNlY3Rpb24gaXMgYXBwbGllZCB0byBhbiBhcnJheSBhbmQgaXRlcmF0ZWVzIGFjY2VwdCBvbmx5XG4gICAgICAgKiBvbmUgYXJndW1lbnQuIFRoZSBoZXVyaXN0aWMgZm9yIHdoZXRoZXIgYSBzZWN0aW9uIHF1YWxpZmllcyBmb3Igc2hvcnRjdXRcbiAgICAgICAqIGZ1c2lvbiBpcyBzdWJqZWN0IHRvIGNoYW5nZS5cbiAgICAgICAqXG4gICAgICAgKiBDaGFpbmluZyBpcyBzdXBwb3J0ZWQgaW4gY3VzdG9tIGJ1aWxkcyBhcyBsb25nIGFzIHRoZSBgXyN2YWx1ZWAgbWV0aG9kIGlzXG4gICAgICAgKiBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluY2x1ZGVkIGluIHRoZSBidWlsZC5cbiAgICAgICAqXG4gICAgICAgKiBJbiBhZGRpdGlvbiB0byBsb2Rhc2ggbWV0aG9kcywgd3JhcHBlcnMgaGF2ZSBgQXJyYXlgIGFuZCBgU3RyaW5nYCBtZXRob2RzLlxuICAgICAgICpcbiAgICAgICAqIFRoZSB3cmFwcGVyIGBBcnJheWAgbWV0aG9kcyBhcmU6XG4gICAgICAgKiBgY29uY2F0YCwgYGpvaW5gLCBgcG9wYCwgYHB1c2hgLCBgc2hpZnRgLCBgc29ydGAsIGBzcGxpY2VgLCBhbmQgYHVuc2hpZnRgXG4gICAgICAgKlxuICAgICAgICogVGhlIHdyYXBwZXIgYFN0cmluZ2AgbWV0aG9kcyBhcmU6XG4gICAgICAgKiBgcmVwbGFjZWAgYW5kIGBzcGxpdGBcbiAgICAgICAqXG4gICAgICAgKiBUaGUgd3JhcHBlciBtZXRob2RzIHRoYXQgc3VwcG9ydCBzaG9ydGN1dCBmdXNpb24gYXJlOlxuICAgICAgICogYGF0YCwgYGNvbXBhY3RgLCBgZHJvcGAsIGBkcm9wUmlnaHRgLCBgZHJvcFdoaWxlYCwgYGZpbHRlcmAsIGBmaW5kYCxcbiAgICAgICAqIGBmaW5kTGFzdGAsIGBoZWFkYCwgYGluaXRpYWxgLCBgbGFzdGAsIGBtYXBgLCBgcmVqZWN0YCwgYHJldmVyc2VgLCBgc2xpY2VgLFxuICAgICAgICogYHRhaWxgLCBgdGFrZWAsIGB0YWtlUmlnaHRgLCBgdGFrZVJpZ2h0V2hpbGVgLCBgdGFrZVdoaWxlYCwgYW5kIGB0b0FycmF5YFxuICAgICAgICpcbiAgICAgICAqIFRoZSBjaGFpbmFibGUgd3JhcHBlciBtZXRob2RzIGFyZTpcbiAgICAgICAqIGBhZnRlcmAsIGBhcnlgLCBgYXNzaWduYCwgYGFzc2lnbkluYCwgYGFzc2lnbkluV2l0aGAsIGBhc3NpZ25XaXRoYCwgYGF0YCxcbiAgICAgICAqIGBiZWZvcmVgLCBgYmluZGAsIGBiaW5kQWxsYCwgYGJpbmRLZXlgLCBgY2FzdEFycmF5YCwgYGNoYWluYCwgYGNodW5rYCxcbiAgICAgICAqIGBjb21taXRgLCBgY29tcGFjdGAsIGBjb25jYXRgLCBgY29uZm9ybXNgLCBgY29uc3RhbnRgLCBgY291bnRCeWAsIGBjcmVhdGVgLFxuICAgICAgICogYGN1cnJ5YCwgYGRlYm91bmNlYCwgYGRlZmF1bHRzYCwgYGRlZmF1bHRzRGVlcGAsIGBkZWZlcmAsIGBkZWxheWAsXG4gICAgICAgKiBgZGlmZmVyZW5jZWAsIGBkaWZmZXJlbmNlQnlgLCBgZGlmZmVyZW5jZVdpdGhgLCBgZHJvcGAsIGBkcm9wUmlnaHRgLFxuICAgICAgICogYGRyb3BSaWdodFdoaWxlYCwgYGRyb3BXaGlsZWAsIGBleHRlbmRgLCBgZXh0ZW5kV2l0aGAsIGBmaWxsYCwgYGZpbHRlcmAsXG4gICAgICAgKiBgZmxhdE1hcGAsIGBmbGF0TWFwRGVlcGAsIGBmbGF0TWFwRGVwdGhgLCBgZmxhdHRlbmAsIGBmbGF0dGVuRGVlcGAsXG4gICAgICAgKiBgZmxhdHRlbkRlcHRoYCwgYGZsaXBgLCBgZmxvd2AsIGBmbG93UmlnaHRgLCBgZnJvbVBhaXJzYCwgYGZ1bmN0aW9uc2AsXG4gICAgICAgKiBgZnVuY3Rpb25zSW5gLCBgZ3JvdXBCeWAsIGBpbml0aWFsYCwgYGludGVyc2VjdGlvbmAsIGBpbnRlcnNlY3Rpb25CeWAsXG4gICAgICAgKiBgaW50ZXJzZWN0aW9uV2l0aGAsIGBpbnZlcnRgLCBgaW52ZXJ0QnlgLCBgaW52b2tlTWFwYCwgYGl0ZXJhdGVlYCwgYGtleUJ5YCxcbiAgICAgICAqIGBrZXlzYCwgYGtleXNJbmAsIGBtYXBgLCBgbWFwS2V5c2AsIGBtYXBWYWx1ZXNgLCBgbWF0Y2hlc2AsIGBtYXRjaGVzUHJvcGVydHlgLFxuICAgICAgICogYG1lbW9pemVgLCBgbWVyZ2VgLCBgbWVyZ2VXaXRoYCwgYG1ldGhvZGAsIGBtZXRob2RPZmAsIGBtaXhpbmAsIGBuZWdhdGVgLFxuICAgICAgICogYG50aEFyZ2AsIGBvbWl0YCwgYG9taXRCeWAsIGBvbmNlYCwgYG9yZGVyQnlgLCBgb3ZlcmAsIGBvdmVyQXJnc2AsXG4gICAgICAgKiBgb3ZlckV2ZXJ5YCwgYG92ZXJTb21lYCwgYHBhcnRpYWxgLCBgcGFydGlhbFJpZ2h0YCwgYHBhcnRpdGlvbmAsIGBwaWNrYCxcbiAgICAgICAqIGBwaWNrQnlgLCBgcGxhbnRgLCBgcHJvcGVydHlgLCBgcHJvcGVydHlPZmAsIGBwdWxsYCwgYHB1bGxBbGxgLCBgcHVsbEFsbEJ5YCxcbiAgICAgICAqIGBwdWxsQWxsV2l0aGAsIGBwdWxsQXRgLCBgcHVzaGAsIGByYW5nZWAsIGByYW5nZVJpZ2h0YCwgYHJlYXJnYCwgYHJlamVjdGAsXG4gICAgICAgKiBgcmVtb3ZlYCwgYHJlc3RgLCBgcmV2ZXJzZWAsIGBzYW1wbGVTaXplYCwgYHNldGAsIGBzZXRXaXRoYCwgYHNodWZmbGVgLFxuICAgICAgICogYHNsaWNlYCwgYHNvcnRgLCBgc29ydEJ5YCwgYHNwbGljZWAsIGBzcHJlYWRgLCBgdGFpbGAsIGB0YWtlYCwgYHRha2VSaWdodGAsXG4gICAgICAgKiBgdGFrZVJpZ2h0V2hpbGVgLCBgdGFrZVdoaWxlYCwgYHRhcGAsIGB0aHJvdHRsZWAsIGB0aHJ1YCwgYHRvQXJyYXlgLFxuICAgICAgICogYHRvUGFpcnNgLCBgdG9QYWlyc0luYCwgYHRvUGF0aGAsIGB0b1BsYWluT2JqZWN0YCwgYHRyYW5zZm9ybWAsIGB1bmFyeWAsXG4gICAgICAgKiBgdW5pb25gLCBgdW5pb25CeWAsIGB1bmlvbldpdGhgLCBgdW5pcWAsIGB1bmlxQnlgLCBgdW5pcVdpdGhgLCBgdW5zZXRgLFxuICAgICAgICogYHVuc2hpZnRgLCBgdW56aXBgLCBgdW56aXBXaXRoYCwgYHVwZGF0ZWAsIGB1cGRhdGVXaXRoYCwgYHZhbHVlc2AsXG4gICAgICAgKiBgdmFsdWVzSW5gLCBgd2l0aG91dGAsIGB3cmFwYCwgYHhvcmAsIGB4b3JCeWAsIGB4b3JXaXRoYCwgYHppcGAsXG4gICAgICAgKiBgemlwT2JqZWN0YCwgYHppcE9iamVjdERlZXBgLCBhbmQgYHppcFdpdGhgXG4gICAgICAgKlxuICAgICAgICogVGhlIHdyYXBwZXIgbWV0aG9kcyB0aGF0IGFyZSAqKm5vdCoqIGNoYWluYWJsZSBieSBkZWZhdWx0IGFyZTpcbiAgICAgICAqIGBhZGRgLCBgYXR0ZW1wdGAsIGBjYW1lbENhc2VgLCBgY2FwaXRhbGl6ZWAsIGBjZWlsYCwgYGNsYW1wYCwgYGNsb25lYCxcbiAgICAgICAqIGBjbG9uZURlZXBgLCBgY2xvbmVEZWVwV2l0aGAsIGBjbG9uZVdpdGhgLCBgY29uZm9ybXNUb2AsIGBkZWJ1cnJgLFxuICAgICAgICogYGRlZmF1bHRUb2AsIGBkaXZpZGVgLCBgZWFjaGAsIGBlYWNoUmlnaHRgLCBgZW5kc1dpdGhgLCBgZXFgLCBgZXNjYXBlYCxcbiAgICAgICAqIGBlc2NhcGVSZWdFeHBgLCBgZXZlcnlgLCBgZmluZGAsIGBmaW5kSW5kZXhgLCBgZmluZEtleWAsIGBmaW5kTGFzdGAsXG4gICAgICAgKiBgZmluZExhc3RJbmRleGAsIGBmaW5kTGFzdEtleWAsIGBmaXJzdGAsIGBmbG9vcmAsIGBmb3JFYWNoYCwgYGZvckVhY2hSaWdodGAsXG4gICAgICAgKiBgZm9ySW5gLCBgZm9ySW5SaWdodGAsIGBmb3JPd25gLCBgZm9yT3duUmlnaHRgLCBgZ2V0YCwgYGd0YCwgYGd0ZWAsIGBoYXNgLFxuICAgICAgICogYGhhc0luYCwgYGhlYWRgLCBgaWRlbnRpdHlgLCBgaW5jbHVkZXNgLCBgaW5kZXhPZmAsIGBpblJhbmdlYCwgYGludm9rZWAsXG4gICAgICAgKiBgaXNBcmd1bWVudHNgLCBgaXNBcnJheWAsIGBpc0FycmF5QnVmZmVyYCwgYGlzQXJyYXlMaWtlYCwgYGlzQXJyYXlMaWtlT2JqZWN0YCxcbiAgICAgICAqIGBpc0Jvb2xlYW5gLCBgaXNCdWZmZXJgLCBgaXNEYXRlYCwgYGlzRWxlbWVudGAsIGBpc0VtcHR5YCwgYGlzRXF1YWxgLFxuICAgICAgICogYGlzRXF1YWxXaXRoYCwgYGlzRXJyb3JgLCBgaXNGaW5pdGVgLCBgaXNGdW5jdGlvbmAsIGBpc0ludGVnZXJgLCBgaXNMZW5ndGhgLFxuICAgICAgICogYGlzTWFwYCwgYGlzTWF0Y2hgLCBgaXNNYXRjaFdpdGhgLCBgaXNOYU5gLCBgaXNOYXRpdmVgLCBgaXNOaWxgLCBgaXNOdWxsYCxcbiAgICAgICAqIGBpc051bWJlcmAsIGBpc09iamVjdGAsIGBpc09iamVjdExpa2VgLCBgaXNQbGFpbk9iamVjdGAsIGBpc1JlZ0V4cGAsXG4gICAgICAgKiBgaXNTYWZlSW50ZWdlcmAsIGBpc1NldGAsIGBpc1N0cmluZ2AsIGBpc1VuZGVmaW5lZGAsIGBpc1R5cGVkQXJyYXlgLFxuICAgICAgICogYGlzV2Vha01hcGAsIGBpc1dlYWtTZXRgLCBgam9pbmAsIGBrZWJhYkNhc2VgLCBgbGFzdGAsIGBsYXN0SW5kZXhPZmAsXG4gICAgICAgKiBgbG93ZXJDYXNlYCwgYGxvd2VyRmlyc3RgLCBgbHRgLCBgbHRlYCwgYG1heGAsIGBtYXhCeWAsIGBtZWFuYCwgYG1lYW5CeWAsXG4gICAgICAgKiBgbWluYCwgYG1pbkJ5YCwgYG11bHRpcGx5YCwgYG5vQ29uZmxpY3RgLCBgbm9vcGAsIGBub3dgLCBgbnRoYCwgYHBhZGAsXG4gICAgICAgKiBgcGFkRW5kYCwgYHBhZFN0YXJ0YCwgYHBhcnNlSW50YCwgYHBvcGAsIGByYW5kb21gLCBgcmVkdWNlYCwgYHJlZHVjZVJpZ2h0YCxcbiAgICAgICAqIGByZXBlYXRgLCBgcmVzdWx0YCwgYHJvdW5kYCwgYHJ1bkluQ29udGV4dGAsIGBzYW1wbGVgLCBgc2hpZnRgLCBgc2l6ZWAsXG4gICAgICAgKiBgc25ha2VDYXNlYCwgYHNvbWVgLCBgc29ydGVkSW5kZXhgLCBgc29ydGVkSW5kZXhCeWAsIGBzb3J0ZWRMYXN0SW5kZXhgLFxuICAgICAgICogYHNvcnRlZExhc3RJbmRleEJ5YCwgYHN0YXJ0Q2FzZWAsIGBzdGFydHNXaXRoYCwgYHN0dWJBcnJheWAsIGBzdHViRmFsc2VgLFxuICAgICAgICogYHN0dWJPYmplY3RgLCBgc3R1YlN0cmluZ2AsIGBzdHViVHJ1ZWAsIGBzdWJ0cmFjdGAsIGBzdW1gLCBgc3VtQnlgLFxuICAgICAgICogYHRlbXBsYXRlYCwgYHRpbWVzYCwgYHRvRmluaXRlYCwgYHRvSW50ZWdlcmAsIGB0b0pTT05gLCBgdG9MZW5ndGhgLFxuICAgICAgICogYHRvTG93ZXJgLCBgdG9OdW1iZXJgLCBgdG9TYWZlSW50ZWdlcmAsIGB0b1N0cmluZ2AsIGB0b1VwcGVyYCwgYHRyaW1gLFxuICAgICAgICogYHRyaW1FbmRgLCBgdHJpbVN0YXJ0YCwgYHRydW5jYXRlYCwgYHVuZXNjYXBlYCwgYHVuaXF1ZUlkYCwgYHVwcGVyQ2FzZWAsXG4gICAgICAgKiBgdXBwZXJGaXJzdGAsIGB2YWx1ZWAsIGFuZCBgd29yZHNgXG4gICAgICAgKlxuICAgICAgICogQG5hbWUgX1xuICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgKiBAY2F0ZWdvcnkgU2VxXG4gICAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byB3cmFwIGluIGEgYGxvZGFzaGAgaW5zdGFuY2UuXG4gICAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgYGxvZGFzaGAgd3JhcHBlciBpbnN0YW5jZS5cbiAgICAgICAqIEBleGFtcGxlXG4gICAgICAgKlxuICAgICAgICogZnVuY3Rpb24gc3F1YXJlKG4pIHtcbiAgICAgICAqICAgcmV0dXJuIG4gKiBuO1xuICAgICAgICogfVxuICAgICAgICpcbiAgICAgICAqIHZhciB3cmFwcGVkID0gXyhbMSwgMiwgM10pO1xuICAgICAgICpcbiAgICAgICAqIC8vIFJldHVybnMgYW4gdW53cmFwcGVkIHZhbHVlLlxuICAgICAgICogd3JhcHBlZC5yZWR1Y2UoXy5hZGQpO1xuICAgICAgICogLy8gPT4gNlxuICAgICAgICpcbiAgICAgICAqIC8vIFJldHVybnMgYSB3cmFwcGVkIHZhbHVlLlxuICAgICAgICogdmFyIHNxdWFyZXMgPSB3cmFwcGVkLm1hcChzcXVhcmUpO1xuICAgICAgICpcbiAgICAgICAqIF8uaXNBcnJheShzcXVhcmVzKTtcbiAgICAgICAqIC8vID0+IGZhbHNlXG4gICAgICAgKlxuICAgICAgICogXy5pc0FycmF5KHNxdWFyZXMudmFsdWUoKSk7XG4gICAgICAgKiAvLyA9PiB0cnVlXG4gICAgICAgKi9mdW5jdGlvbiBsb2Rhc2godmFsdWUpe2lmKGlzT2JqZWN0TGlrZSh2YWx1ZSkmJiFpc0FycmF5KHZhbHVlKSYmISh2YWx1ZSBpbnN0YW5jZW9mIExhenlXcmFwcGVyKSl7aWYodmFsdWUgaW5zdGFuY2VvZiBMb2Rhc2hXcmFwcGVyKXtyZXR1cm4gdmFsdWU7fWlmKGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsJ19fd3JhcHBlZF9fJykpe3JldHVybiB3cmFwcGVyQ2xvbmUodmFsdWUpO319cmV0dXJuIG5ldyBMb2Rhc2hXcmFwcGVyKHZhbHVlKTt9LyoqXG4gICAgICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmNyZWF0ZWAgd2l0aG91dCBzdXBwb3J0IGZvciBhc3NpZ25pbmdcbiAgICAgICAgICogcHJvcGVydGllcyB0byB0aGUgY3JlYXRlZCBvYmplY3QuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwcm90byBUaGUgb2JqZWN0IHRvIGluaGVyaXQgZnJvbS5cbiAgICAgICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAgICAgICAgICovdmFyIGJhc2VDcmVhdGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBvYmplY3QoKXt9cmV0dXJuIGZ1bmN0aW9uKHByb3RvKXtpZighaXNPYmplY3QocHJvdG8pKXtyZXR1cm57fTt9aWYob2JqZWN0Q3JlYXRlKXtyZXR1cm4gb2JqZWN0Q3JlYXRlKHByb3RvKTt9b2JqZWN0LnByb3RvdHlwZT1wcm90bzt2YXIgcmVzdWx0PW5ldyBvYmplY3QoKTtvYmplY3QucHJvdG90eXBlPXVuZGVmaW5lZDtyZXR1cm4gcmVzdWx0O307fSgpOy8qKlxuICAgICAgICogVGhlIGZ1bmN0aW9uIHdob3NlIHByb3RvdHlwZSBjaGFpbiBzZXF1ZW5jZSB3cmFwcGVycyBpbmhlcml0IGZyb20uXG4gICAgICAgKlxuICAgICAgICogQHByaXZhdGVcbiAgICAgICAqL2Z1bmN0aW9uIGJhc2VMb2Rhc2goKXt9Ly8gTm8gb3BlcmF0aW9uIHBlcmZvcm1lZC5cbi8qKlxuICAgICAgICAgKiBUaGUgYmFzZSBjb25zdHJ1Y3RvciBmb3IgY3JlYXRpbmcgYGxvZGFzaGAgd3JhcHBlciBvYmplY3RzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byB3cmFwLlxuICAgICAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtjaGFpbkFsbF0gRW5hYmxlIGV4cGxpY2l0IG1ldGhvZCBjaGFpbiBzZXF1ZW5jZXMuXG4gICAgICAgICAqL2Z1bmN0aW9uIExvZGFzaFdyYXBwZXIodmFsdWUsY2hhaW5BbGwpe3RoaXMuX193cmFwcGVkX189dmFsdWU7dGhpcy5fX2FjdGlvbnNfXz1bXTt0aGlzLl9fY2hhaW5fXz0hIWNoYWluQWxsO3RoaXMuX19pbmRleF9fPTA7dGhpcy5fX3ZhbHVlc19fPXVuZGVmaW5lZDt9LyoqXG4gICAgICAgICAqIEJ5IGRlZmF1bHQsIHRoZSB0ZW1wbGF0ZSBkZWxpbWl0ZXJzIHVzZWQgYnkgbG9kYXNoIGFyZSBsaWtlIHRob3NlIGluXG4gICAgICAgICAqIGVtYmVkZGVkIFJ1YnkgKEVSQikgYXMgd2VsbCBhcyBFUzIwMTUgdGVtcGxhdGUgc3RyaW5ncy4gQ2hhbmdlIHRoZVxuICAgICAgICAgKiBmb2xsb3dpbmcgdGVtcGxhdGUgc2V0dGluZ3MgdG8gdXNlIGFsdGVybmF0aXZlIGRlbGltaXRlcnMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQHR5cGUge09iamVjdH1cbiAgICAgICAgICovbG9kYXNoLnRlbXBsYXRlU2V0dGluZ3M9ey8qKlxuICAgICAgICAgICAgICogVXNlZCB0byBkZXRlY3QgYGRhdGFgIHByb3BlcnR5IHZhbHVlcyB0byBiZSBIVE1MLWVzY2FwZWQuXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICogQG1lbWJlck9mIF8udGVtcGxhdGVTZXR0aW5nc1xuICAgICAgICAgICAgICogQHR5cGUge1JlZ0V4cH1cbiAgICAgICAgICAgICAqL2VzY2FwZTpyZUVzY2FwZSwvKipcbiAgICAgICAgICAgICAqIFVzZWQgdG8gZGV0ZWN0IGNvZGUgdG8gYmUgZXZhbHVhdGVkLlxuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqIEBtZW1iZXJPZiBfLnRlbXBsYXRlU2V0dGluZ3NcbiAgICAgICAgICAgICAqIEB0eXBlIHtSZWdFeHB9XG4gICAgICAgICAgICAgKi9ldmFsdWF0ZTpyZUV2YWx1YXRlLC8qKlxuICAgICAgICAgICAgICogVXNlZCB0byBkZXRlY3QgYGRhdGFgIHByb3BlcnR5IHZhbHVlcyB0byBpbmplY3QuXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICogQG1lbWJlck9mIF8udGVtcGxhdGVTZXR0aW5nc1xuICAgICAgICAgICAgICogQHR5cGUge1JlZ0V4cH1cbiAgICAgICAgICAgICAqL2ludGVycG9sYXRlOnJlSW50ZXJwb2xhdGUsLyoqXG4gICAgICAgICAgICAgKiBVc2VkIHRvIHJlZmVyZW5jZSB0aGUgZGF0YSBvYmplY3QgaW4gdGhlIHRlbXBsYXRlIHRleHQuXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICogQG1lbWJlck9mIF8udGVtcGxhdGVTZXR0aW5nc1xuICAgICAgICAgICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgICAgICAgICAqL3ZhcmlhYmxlOicnLC8qKlxuICAgICAgICAgICAgICogVXNlZCB0byBpbXBvcnQgdmFyaWFibGVzIGludG8gdGhlIGNvbXBpbGVkIHRlbXBsYXRlLlxuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqIEBtZW1iZXJPZiBfLnRlbXBsYXRlU2V0dGluZ3NcbiAgICAgICAgICAgICAqIEB0eXBlIHtPYmplY3R9XG4gICAgICAgICAgICAgKi9pbXBvcnRzOnsvKipcbiAgICAgICAgICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgYGxvZGFzaGAgZnVuY3Rpb24uXG4gICAgICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAgICAgKiBAbWVtYmVyT2YgXy50ZW1wbGF0ZVNldHRpbmdzLmltcG9ydHNcbiAgICAgICAgICAgICAgICAgKiBAdHlwZSB7RnVuY3Rpb259XG4gICAgICAgICAgICAgICAgICovXzpsb2Rhc2h9fTsvLyBFbnN1cmUgd3JhcHBlcnMgYXJlIGluc3RhbmNlcyBvZiBgYmFzZUxvZGFzaGAuXG5sb2Rhc2gucHJvdG90eXBlPWJhc2VMb2Rhc2gucHJvdG90eXBlO2xvZGFzaC5wcm90b3R5cGUuY29uc3RydWN0b3I9bG9kYXNoO0xvZGFzaFdyYXBwZXIucHJvdG90eXBlPWJhc2VDcmVhdGUoYmFzZUxvZGFzaC5wcm90b3R5cGUpO0xvZGFzaFdyYXBwZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yPUxvZGFzaFdyYXBwZXI7LyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8vKipcbiAgICAgICAgICogQ3JlYXRlcyBhIGxhenkgd3JhcHBlciBvYmplY3Qgd2hpY2ggd3JhcHMgYHZhbHVlYCB0byBlbmFibGUgbGF6eSBldmFsdWF0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gd3JhcC5cbiAgICAgICAgICovZnVuY3Rpb24gTGF6eVdyYXBwZXIodmFsdWUpe3RoaXMuX193cmFwcGVkX189dmFsdWU7dGhpcy5fX2FjdGlvbnNfXz1bXTt0aGlzLl9fZGlyX189MTt0aGlzLl9fZmlsdGVyZWRfXz1mYWxzZTt0aGlzLl9faXRlcmF0ZWVzX189W107dGhpcy5fX3Rha2VDb3VudF9fPU1BWF9BUlJBWV9MRU5HVEg7dGhpcy5fX3ZpZXdzX189W107fS8qKlxuICAgICAgICAgKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhlIGxhenkgd3JhcHBlciBvYmplY3QuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqIEBuYW1lIGNsb25lXG4gICAgICAgICAqIEBtZW1iZXJPZiBMYXp5V3JhcHBlclxuICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjbG9uZWQgYExhenlXcmFwcGVyYCBvYmplY3QuXG4gICAgICAgICAqL2Z1bmN0aW9uIGxhenlDbG9uZSgpe3ZhciByZXN1bHQ9bmV3IExhenlXcmFwcGVyKHRoaXMuX193cmFwcGVkX18pO3Jlc3VsdC5fX2FjdGlvbnNfXz1jb3B5QXJyYXkodGhpcy5fX2FjdGlvbnNfXyk7cmVzdWx0Ll9fZGlyX189dGhpcy5fX2Rpcl9fO3Jlc3VsdC5fX2ZpbHRlcmVkX189dGhpcy5fX2ZpbHRlcmVkX187cmVzdWx0Ll9faXRlcmF0ZWVzX189Y29weUFycmF5KHRoaXMuX19pdGVyYXRlZXNfXyk7cmVzdWx0Ll9fdGFrZUNvdW50X189dGhpcy5fX3Rha2VDb3VudF9fO3Jlc3VsdC5fX3ZpZXdzX189Y29weUFycmF5KHRoaXMuX192aWV3c19fKTtyZXR1cm4gcmVzdWx0O30vKipcbiAgICAgICAgICogUmV2ZXJzZXMgdGhlIGRpcmVjdGlvbiBvZiBsYXp5IGl0ZXJhdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQG5hbWUgcmV2ZXJzZVxuICAgICAgICAgKiBAbWVtYmVyT2YgTGF6eVdyYXBwZXJcbiAgICAgICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IHJldmVyc2VkIGBMYXp5V3JhcHBlcmAgb2JqZWN0LlxuICAgICAgICAgKi9mdW5jdGlvbiBsYXp5UmV2ZXJzZSgpe2lmKHRoaXMuX19maWx0ZXJlZF9fKXt2YXIgcmVzdWx0PW5ldyBMYXp5V3JhcHBlcih0aGlzKTtyZXN1bHQuX19kaXJfXz0tMTtyZXN1bHQuX19maWx0ZXJlZF9fPXRydWU7fWVsc2V7cmVzdWx0PXRoaXMuY2xvbmUoKTtyZXN1bHQuX19kaXJfXyo9LTE7fXJldHVybiByZXN1bHQ7fS8qKlxuICAgICAgICAgKiBFeHRyYWN0cyB0aGUgdW53cmFwcGVkIHZhbHVlIGZyb20gaXRzIGxhenkgd3JhcHBlci5cbiAgICAgICAgICpcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQG5hbWUgdmFsdWVcbiAgICAgICAgICogQG1lbWJlck9mIExhenlXcmFwcGVyXG4gICAgICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSB1bndyYXBwZWQgdmFsdWUuXG4gICAgICAgICAqL2Z1bmN0aW9uIGxhenlWYWx1ZSgpe3ZhciBhcnJheT10aGlzLl9fd3JhcHBlZF9fLnZhbHVlKCksZGlyPXRoaXMuX19kaXJfXyxpc0Fycj1pc0FycmF5KGFycmF5KSxpc1JpZ2h0PWRpcjwwLGFyckxlbmd0aD1pc0Fycj9hcnJheS5sZW5ndGg6MCx2aWV3PWdldFZpZXcoMCxhcnJMZW5ndGgsdGhpcy5fX3ZpZXdzX18pLHN0YXJ0PXZpZXcuc3RhcnQsZW5kPXZpZXcuZW5kLGxlbmd0aD1lbmQtc3RhcnQsaW5kZXg9aXNSaWdodD9lbmQ6c3RhcnQtMSxpdGVyYXRlZXM9dGhpcy5fX2l0ZXJhdGVlc19fLGl0ZXJMZW5ndGg9aXRlcmF0ZWVzLmxlbmd0aCxyZXNJbmRleD0wLHRha2VDb3VudD1uYXRpdmVNaW4obGVuZ3RoLHRoaXMuX190YWtlQ291bnRfXyk7aWYoIWlzQXJyfHwhaXNSaWdodCYmYXJyTGVuZ3RoPT1sZW5ndGgmJnRha2VDb3VudD09bGVuZ3RoKXtyZXR1cm4gYmFzZVdyYXBwZXJWYWx1ZShhcnJheSx0aGlzLl9fYWN0aW9uc19fKTt9dmFyIHJlc3VsdD1bXTtvdXRlcjp3aGlsZShsZW5ndGgtLSYmcmVzSW5kZXg8dGFrZUNvdW50KXtpbmRleCs9ZGlyO3ZhciBpdGVySW5kZXg9LTEsdmFsdWU9YXJyYXlbaW5kZXhdO3doaWxlKCsraXRlckluZGV4PGl0ZXJMZW5ndGgpe3ZhciBkYXRhPWl0ZXJhdGVlc1tpdGVySW5kZXhdLGl0ZXJhdGVlPWRhdGEuaXRlcmF0ZWUsdHlwZT1kYXRhLnR5cGUsY29tcHV0ZWQ9aXRlcmF0ZWUodmFsdWUpO2lmKHR5cGU9PUxBWllfTUFQX0ZMQUcpe3ZhbHVlPWNvbXB1dGVkO31lbHNlIGlmKCFjb21wdXRlZCl7aWYodHlwZT09TEFaWV9GSUxURVJfRkxBRyl7Y29udGludWUgb3V0ZXI7fWVsc2V7YnJlYWsgb3V0ZXI7fX19cmVzdWx0W3Jlc0luZGV4KytdPXZhbHVlO31yZXR1cm4gcmVzdWx0O30vLyBFbnN1cmUgYExhenlXcmFwcGVyYCBpcyBhbiBpbnN0YW5jZSBvZiBgYmFzZUxvZGFzaGAuXG5MYXp5V3JhcHBlci5wcm90b3R5cGU9YmFzZUNyZWF0ZShiYXNlTG9kYXNoLnByb3RvdHlwZSk7TGF6eVdyYXBwZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yPUxhenlXcmFwcGVyOy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovLyoqXG4gICAgICAgICAqIENyZWF0ZXMgYSBoYXNoIG9iamVjdC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICAgICAgICAgKi9mdW5jdGlvbiBIYXNoKGVudHJpZXMpe3ZhciBpbmRleD0tMSxsZW5ndGg9ZW50cmllcz09bnVsbD8wOmVudHJpZXMubGVuZ3RoO3RoaXMuY2xlYXIoKTt3aGlsZSgrK2luZGV4PGxlbmd0aCl7dmFyIGVudHJ5PWVudHJpZXNbaW5kZXhdO3RoaXMuc2V0KGVudHJ5WzBdLGVudHJ5WzFdKTt9fS8qKlxuICAgICAgICAgKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBoYXNoLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKiBAbmFtZSBjbGVhclxuICAgICAgICAgKiBAbWVtYmVyT2YgSGFzaFxuICAgICAgICAgKi9mdW5jdGlvbiBoYXNoQ2xlYXIoKXt0aGlzLl9fZGF0YV9fPW5hdGl2ZUNyZWF0ZT9uYXRpdmVDcmVhdGUobnVsbCk6e307dGhpcy5zaXplPTA7fS8qKlxuICAgICAgICAgKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgaGFzaC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQG5hbWUgZGVsZXRlXG4gICAgICAgICAqIEBtZW1iZXJPZiBIYXNoXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBoYXNoIFRoZSBoYXNoIHRvIG1vZGlmeS5cbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gICAgICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAgICAgICAgICovZnVuY3Rpb24gaGFzaERlbGV0ZShrZXkpe3ZhciByZXN1bHQ9dGhpcy5oYXMoa2V5KSYmZGVsZXRlIHRoaXMuX19kYXRhX19ba2V5XTt0aGlzLnNpemUtPXJlc3VsdD8xOjA7cmV0dXJuIHJlc3VsdDt9LyoqXG4gICAgICAgICAqIEdldHMgdGhlIGhhc2ggdmFsdWUgZm9yIGBrZXlgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKiBAbmFtZSBnZXRcbiAgICAgICAgICogQG1lbWJlck9mIEhhc2hcbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gICAgICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAgICAgICAgICovZnVuY3Rpb24gaGFzaEdldChrZXkpe3ZhciBkYXRhPXRoaXMuX19kYXRhX187aWYobmF0aXZlQ3JlYXRlKXt2YXIgcmVzdWx0PWRhdGFba2V5XTtyZXR1cm4gcmVzdWx0PT09SEFTSF9VTkRFRklORUQ/dW5kZWZpbmVkOnJlc3VsdDt9cmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoZGF0YSxrZXkpP2RhdGFba2V5XTp1bmRlZmluZWQ7fS8qKlxuICAgICAgICAgKiBDaGVja3MgaWYgYSBoYXNoIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqIEBuYW1lIGhhc1xuICAgICAgICAgKiBAbWVtYmVyT2YgSGFzaFxuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICAgICAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICAgICAgICAgKi9mdW5jdGlvbiBoYXNoSGFzKGtleSl7dmFyIGRhdGE9dGhpcy5fX2RhdGFfXztyZXR1cm4gbmF0aXZlQ3JlYXRlP2RhdGFba2V5XSE9PXVuZGVmaW5lZDpoYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsa2V5KTt9LyoqXG4gICAgICAgICAqIFNldHMgdGhlIGhhc2ggYGtleWAgdG8gYHZhbHVlYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQG5hbWUgc2V0XG4gICAgICAgICAqIEBtZW1iZXJPZiBIYXNoXG4gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICAgICAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gICAgICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGhhc2ggaW5zdGFuY2UuXG4gICAgICAgICAqL2Z1bmN0aW9uIGhhc2hTZXQoa2V5LHZhbHVlKXt2YXIgZGF0YT10aGlzLl9fZGF0YV9fO3RoaXMuc2l6ZSs9dGhpcy5oYXMoa2V5KT8wOjE7ZGF0YVtrZXldPW5hdGl2ZUNyZWF0ZSYmdmFsdWU9PT11bmRlZmluZWQ/SEFTSF9VTkRFRklORUQ6dmFsdWU7cmV0dXJuIHRoaXM7fS8vIEFkZCBtZXRob2RzIHRvIGBIYXNoYC5cbkhhc2gucHJvdG90eXBlLmNsZWFyPWhhc2hDbGVhcjtIYXNoLnByb3RvdHlwZVsnZGVsZXRlJ109aGFzaERlbGV0ZTtIYXNoLnByb3RvdHlwZS5nZXQ9aGFzaEdldDtIYXNoLnByb3RvdHlwZS5oYXM9aGFzaEhhcztIYXNoLnByb3RvdHlwZS5zZXQ9aGFzaFNldDsvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLy8qKlxuICAgICAgICAgKiBDcmVhdGVzIGFuIGxpc3QgY2FjaGUgb2JqZWN0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgICAgICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gICAgICAgICAqL2Z1bmN0aW9uIExpc3RDYWNoZShlbnRyaWVzKXt2YXIgaW5kZXg9LTEsbGVuZ3RoPWVudHJpZXM9PW51bGw/MDplbnRyaWVzLmxlbmd0aDt0aGlzLmNsZWFyKCk7d2hpbGUoKytpbmRleDxsZW5ndGgpe3ZhciBlbnRyeT1lbnRyaWVzW2luZGV4XTt0aGlzLnNldChlbnRyeVswXSxlbnRyeVsxXSk7fX0vKipcbiAgICAgICAgICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgbGlzdCBjYWNoZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQG5hbWUgY2xlYXJcbiAgICAgICAgICogQG1lbWJlck9mIExpc3RDYWNoZVxuICAgICAgICAgKi9mdW5jdGlvbiBsaXN0Q2FjaGVDbGVhcigpe3RoaXMuX19kYXRhX189W107dGhpcy5zaXplPTA7fS8qKlxuICAgICAgICAgKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgbGlzdCBjYWNoZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQG5hbWUgZGVsZXRlXG4gICAgICAgICAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gICAgICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAgICAgICAgICovZnVuY3Rpb24gbGlzdENhY2hlRGVsZXRlKGtleSl7dmFyIGRhdGE9dGhpcy5fX2RhdGFfXyxpbmRleD1hc3NvY0luZGV4T2YoZGF0YSxrZXkpO2lmKGluZGV4PDApe3JldHVybiBmYWxzZTt9dmFyIGxhc3RJbmRleD1kYXRhLmxlbmd0aC0xO2lmKGluZGV4PT1sYXN0SW5kZXgpe2RhdGEucG9wKCk7fWVsc2V7c3BsaWNlLmNhbGwoZGF0YSxpbmRleCwxKTt9LS10aGlzLnNpemU7cmV0dXJuIHRydWU7fS8qKlxuICAgICAgICAgKiBHZXRzIHRoZSBsaXN0IGNhY2hlIHZhbHVlIGZvciBga2V5YC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQG5hbWUgZ2V0XG4gICAgICAgICAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gICAgICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAgICAgICAgICovZnVuY3Rpb24gbGlzdENhY2hlR2V0KGtleSl7dmFyIGRhdGE9dGhpcy5fX2RhdGFfXyxpbmRleD1hc3NvY0luZGV4T2YoZGF0YSxrZXkpO3JldHVybiBpbmRleDwwP3VuZGVmaW5lZDpkYXRhW2luZGV4XVsxXTt9LyoqXG4gICAgICAgICAqIENoZWNrcyBpZiBhIGxpc3QgY2FjaGUgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQG5hbWUgaGFzXG4gICAgICAgICAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAgICAgICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAgICAgICAgICovZnVuY3Rpb24gbGlzdENhY2hlSGFzKGtleSl7cmV0dXJuIGFzc29jSW5kZXhPZih0aGlzLl9fZGF0YV9fLGtleSk+LTE7fS8qKlxuICAgICAgICAgKiBTZXRzIHRoZSBsaXN0IGNhY2hlIGBrZXlgIHRvIGB2YWx1ZWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqIEBuYW1lIHNldFxuICAgICAgICAgKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICAgICAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gICAgICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGxpc3QgY2FjaGUgaW5zdGFuY2UuXG4gICAgICAgICAqL2Z1bmN0aW9uIGxpc3RDYWNoZVNldChrZXksdmFsdWUpe3ZhciBkYXRhPXRoaXMuX19kYXRhX18saW5kZXg9YXNzb2NJbmRleE9mKGRhdGEsa2V5KTtpZihpbmRleDwwKXsrK3RoaXMuc2l6ZTtkYXRhLnB1c2goW2tleSx2YWx1ZV0pO31lbHNle2RhdGFbaW5kZXhdWzFdPXZhbHVlO31yZXR1cm4gdGhpczt9Ly8gQWRkIG1ldGhvZHMgdG8gYExpc3RDYWNoZWAuXG5MaXN0Q2FjaGUucHJvdG90eXBlLmNsZWFyPWxpc3RDYWNoZUNsZWFyO0xpc3RDYWNoZS5wcm90b3R5cGVbJ2RlbGV0ZSddPWxpc3RDYWNoZURlbGV0ZTtMaXN0Q2FjaGUucHJvdG90eXBlLmdldD1saXN0Q2FjaGVHZXQ7TGlzdENhY2hlLnByb3RvdHlwZS5oYXM9bGlzdENhY2hlSGFzO0xpc3RDYWNoZS5wcm90b3R5cGUuc2V0PWxpc3RDYWNoZVNldDsvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLy8qKlxuICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIGNhY2hlIG9iamVjdCB0byBzdG9yZSBrZXktdmFsdWUgcGFpcnMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAgICAgICAgICovZnVuY3Rpb24gTWFwQ2FjaGUoZW50cmllcyl7dmFyIGluZGV4PS0xLGxlbmd0aD1lbnRyaWVzPT1udWxsPzA6ZW50cmllcy5sZW5ndGg7dGhpcy5jbGVhcigpO3doaWxlKCsraW5kZXg8bGVuZ3RoKXt2YXIgZW50cnk9ZW50cmllc1tpbmRleF07dGhpcy5zZXQoZW50cnlbMF0sZW50cnlbMV0pO319LyoqXG4gICAgICAgICAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIG1hcC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQG5hbWUgY2xlYXJcbiAgICAgICAgICogQG1lbWJlck9mIE1hcENhY2hlXG4gICAgICAgICAqL2Z1bmN0aW9uIG1hcENhY2hlQ2xlYXIoKXt0aGlzLnNpemU9MDt0aGlzLl9fZGF0YV9fPXtoYXNoOm5ldyBIYXNoKCksbWFwOm5ldyhNYXB8fExpc3RDYWNoZSkoKSxzdHJpbmc6bmV3IEhhc2goKX07fS8qKlxuICAgICAgICAgKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgbWFwLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKiBAbmFtZSBkZWxldGVcbiAgICAgICAgICogQG1lbWJlck9mIE1hcENhY2hlXG4gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICAgICAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gICAgICAgICAqL2Z1bmN0aW9uIG1hcENhY2hlRGVsZXRlKGtleSl7dmFyIHJlc3VsdD1nZXRNYXBEYXRhKHRoaXMsa2V5KVsnZGVsZXRlJ10oa2V5KTt0aGlzLnNpemUtPXJlc3VsdD8xOjA7cmV0dXJuIHJlc3VsdDt9LyoqXG4gICAgICAgICAqIEdldHMgdGhlIG1hcCB2YWx1ZSBmb3IgYGtleWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqIEBuYW1lIGdldFxuICAgICAgICAgKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gICAgICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAgICAgICAgICovZnVuY3Rpb24gbWFwQ2FjaGVHZXQoa2V5KXtyZXR1cm4gZ2V0TWFwRGF0YSh0aGlzLGtleSkuZ2V0KGtleSk7fS8qKlxuICAgICAgICAgKiBDaGVja3MgaWYgYSBtYXAgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQG5hbWUgaGFzXG4gICAgICAgICAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICAgICAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICAgICAgICAgKi9mdW5jdGlvbiBtYXBDYWNoZUhhcyhrZXkpe3JldHVybiBnZXRNYXBEYXRhKHRoaXMsa2V5KS5oYXMoa2V5KTt9LyoqXG4gICAgICAgICAqIFNldHMgdGhlIG1hcCBga2V5YCB0byBgdmFsdWVgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKiBAbmFtZSBzZXRcbiAgICAgICAgICogQG1lbWJlck9mIE1hcENhY2hlXG4gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICAgICAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gICAgICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG1hcCBjYWNoZSBpbnN0YW5jZS5cbiAgICAgICAgICovZnVuY3Rpb24gbWFwQ2FjaGVTZXQoa2V5LHZhbHVlKXt2YXIgZGF0YT1nZXRNYXBEYXRhKHRoaXMsa2V5KSxzaXplPWRhdGEuc2l6ZTtkYXRhLnNldChrZXksdmFsdWUpO3RoaXMuc2l6ZSs9ZGF0YS5zaXplPT1zaXplPzA6MTtyZXR1cm4gdGhpczt9Ly8gQWRkIG1ldGhvZHMgdG8gYE1hcENhY2hlYC5cbk1hcENhY2hlLnByb3RvdHlwZS5jbGVhcj1tYXBDYWNoZUNsZWFyO01hcENhY2hlLnByb3RvdHlwZVsnZGVsZXRlJ109bWFwQ2FjaGVEZWxldGU7TWFwQ2FjaGUucHJvdG90eXBlLmdldD1tYXBDYWNoZUdldDtNYXBDYWNoZS5wcm90b3R5cGUuaGFzPW1hcENhY2hlSGFzO01hcENhY2hlLnByb3RvdHlwZS5zZXQ9bWFwQ2FjaGVTZXQ7LyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8vKipcbiAgICAgICAgICpcbiAgICAgICAgICogQ3JlYXRlcyBhbiBhcnJheSBjYWNoZSBvYmplY3QgdG8gc3RvcmUgdW5pcXVlIHZhbHVlcy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IFt2YWx1ZXNdIFRoZSB2YWx1ZXMgdG8gY2FjaGUuXG4gICAgICAgICAqL2Z1bmN0aW9uIFNldENhY2hlKHZhbHVlcyl7dmFyIGluZGV4PS0xLGxlbmd0aD12YWx1ZXM9PW51bGw/MDp2YWx1ZXMubGVuZ3RoO3RoaXMuX19kYXRhX189bmV3IE1hcENhY2hlKCk7d2hpbGUoKytpbmRleDxsZW5ndGgpe3RoaXMuYWRkKHZhbHVlc1tpbmRleF0pO319LyoqXG4gICAgICAgICAqIEFkZHMgYHZhbHVlYCB0byB0aGUgYXJyYXkgY2FjaGUuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqIEBuYW1lIGFkZFxuICAgICAgICAgKiBAbWVtYmVyT2YgU2V0Q2FjaGVcbiAgICAgICAgICogQGFsaWFzIHB1c2hcbiAgICAgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2FjaGUuXG4gICAgICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNhY2hlIGluc3RhbmNlLlxuICAgICAgICAgKi9mdW5jdGlvbiBzZXRDYWNoZUFkZCh2YWx1ZSl7dGhpcy5fX2RhdGFfXy5zZXQodmFsdWUsSEFTSF9VTkRFRklORUQpO3JldHVybiB0aGlzO30vKipcbiAgICAgICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgaW4gdGhlIGFycmF5IGNhY2hlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKiBAbmFtZSBoYXNcbiAgICAgICAgICogQG1lbWJlck9mIFNldENhY2hlXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gICAgICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgZm91bmQsIGVsc2UgYGZhbHNlYC5cbiAgICAgICAgICovZnVuY3Rpb24gc2V0Q2FjaGVIYXModmFsdWUpe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyh2YWx1ZSk7fS8vIEFkZCBtZXRob2RzIHRvIGBTZXRDYWNoZWAuXG5TZXRDYWNoZS5wcm90b3R5cGUuYWRkPVNldENhY2hlLnByb3RvdHlwZS5wdXNoPXNldENhY2hlQWRkO1NldENhY2hlLnByb3RvdHlwZS5oYXM9c2V0Q2FjaGVIYXM7LyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8vKipcbiAgICAgICAgICogQ3JlYXRlcyBhIHN0YWNrIGNhY2hlIG9iamVjdCB0byBzdG9yZSBrZXktdmFsdWUgcGFpcnMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAgICAgICAgICovZnVuY3Rpb24gU3RhY2soZW50cmllcyl7dmFyIGRhdGE9dGhpcy5fX2RhdGFfXz1uZXcgTGlzdENhY2hlKGVudHJpZXMpO3RoaXMuc2l6ZT1kYXRhLnNpemU7fS8qKlxuICAgICAgICAgKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBzdGFjay5cbiAgICAgICAgICpcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQG5hbWUgY2xlYXJcbiAgICAgICAgICogQG1lbWJlck9mIFN0YWNrXG4gICAgICAgICAqL2Z1bmN0aW9uIHN0YWNrQ2xlYXIoKXt0aGlzLl9fZGF0YV9fPW5ldyBMaXN0Q2FjaGUoKTt0aGlzLnNpemU9MDt9LyoqXG4gICAgICAgICAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBzdGFjay5cbiAgICAgICAgICpcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQG5hbWUgZGVsZXRlXG4gICAgICAgICAqIEBtZW1iZXJPZiBTdGFja1xuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAgICAgICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICAgICAgICAgKi9mdW5jdGlvbiBzdGFja0RlbGV0ZShrZXkpe3ZhciBkYXRhPXRoaXMuX19kYXRhX18scmVzdWx0PWRhdGFbJ2RlbGV0ZSddKGtleSk7dGhpcy5zaXplPWRhdGEuc2l6ZTtyZXR1cm4gcmVzdWx0O30vKipcbiAgICAgICAgICogR2V0cyB0aGUgc3RhY2sgdmFsdWUgZm9yIGBrZXlgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKiBAbmFtZSBnZXRcbiAgICAgICAgICogQG1lbWJlck9mIFN0YWNrXG4gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICAgICAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gICAgICAgICAqL2Z1bmN0aW9uIHN0YWNrR2V0KGtleSl7cmV0dXJuIHRoaXMuX19kYXRhX18uZ2V0KGtleSk7fS8qKlxuICAgICAgICAgKiBDaGVja3MgaWYgYSBzdGFjayB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKiBAbmFtZSBoYXNcbiAgICAgICAgICogQG1lbWJlck9mIFN0YWNrXG4gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gICAgICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gICAgICAgICAqL2Z1bmN0aW9uIHN0YWNrSGFzKGtleSl7cmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKGtleSk7fS8qKlxuICAgICAgICAgKiBTZXRzIHRoZSBzdGFjayBga2V5YCB0byBgdmFsdWVgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKiBAbmFtZSBzZXRcbiAgICAgICAgICogQG1lbWJlck9mIFN0YWNrXG4gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICAgICAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gICAgICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIHN0YWNrIGNhY2hlIGluc3RhbmNlLlxuICAgICAgICAgKi9mdW5jdGlvbiBzdGFja1NldChrZXksdmFsdWUpe3ZhciBkYXRhPXRoaXMuX19kYXRhX187aWYoZGF0YSBpbnN0YW5jZW9mIExpc3RDYWNoZSl7dmFyIHBhaXJzPWRhdGEuX19kYXRhX187aWYoIU1hcHx8cGFpcnMubGVuZ3RoPExBUkdFX0FSUkFZX1NJWkUtMSl7cGFpcnMucHVzaChba2V5LHZhbHVlXSk7dGhpcy5zaXplPSsrZGF0YS5zaXplO3JldHVybiB0aGlzO31kYXRhPXRoaXMuX19kYXRhX189bmV3IE1hcENhY2hlKHBhaXJzKTt9ZGF0YS5zZXQoa2V5LHZhbHVlKTt0aGlzLnNpemU9ZGF0YS5zaXplO3JldHVybiB0aGlzO30vLyBBZGQgbWV0aG9kcyB0byBgU3RhY2tgLlxuU3RhY2sucHJvdG90eXBlLmNsZWFyPXN0YWNrQ2xlYXI7U3RhY2sucHJvdG90eXBlWydkZWxldGUnXT1zdGFja0RlbGV0ZTtTdGFjay5wcm90b3R5cGUuZ2V0PXN0YWNrR2V0O1N0YWNrLnByb3RvdHlwZS5oYXM9c3RhY2tIYXM7U3RhY2sucHJvdG90eXBlLnNldD1zdGFja1NldDsvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLy8qKlxuICAgICAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIHRoZSBhcnJheS1saWtlIGB2YWx1ZWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICAgICAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGluaGVyaXRlZCBTcGVjaWZ5IHJldHVybmluZyBpbmhlcml0ZWQgcHJvcGVydHkgbmFtZXMuXG4gICAgICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gICAgICAgICAqL2Z1bmN0aW9uIGFycmF5TGlrZUtleXModmFsdWUsaW5oZXJpdGVkKXt2YXIgaXNBcnI9aXNBcnJheSh2YWx1ZSksaXNBcmc9IWlzQXJyJiZpc0FyZ3VtZW50cyh2YWx1ZSksaXNCdWZmPSFpc0FyciYmIWlzQXJnJiZpc0J1ZmZlcih2YWx1ZSksaXNUeXBlPSFpc0FyciYmIWlzQXJnJiYhaXNCdWZmJiZpc1R5cGVkQXJyYXkodmFsdWUpLHNraXBJbmRleGVzPWlzQXJyfHxpc0FyZ3x8aXNCdWZmfHxpc1R5cGUscmVzdWx0PXNraXBJbmRleGVzP2Jhc2VUaW1lcyh2YWx1ZS5sZW5ndGgsU3RyaW5nKTpbXSxsZW5ndGg9cmVzdWx0Lmxlbmd0aDtmb3IodmFyIGtleSBpbiB2YWx1ZSl7aWYoKGluaGVyaXRlZHx8aGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSxrZXkpKSYmIShza2lwSW5kZXhlcyYmKC8vIFNhZmFyaSA5IGhhcyBlbnVtZXJhYmxlIGBhcmd1bWVudHMubGVuZ3RoYCBpbiBzdHJpY3QgbW9kZS5cbmtleT09J2xlbmd0aCd8fC8vIE5vZGUuanMgMC4xMCBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiBidWZmZXJzLlxuaXNCdWZmJiYoa2V5PT0nb2Zmc2V0J3x8a2V5PT0ncGFyZW50Jyl8fC8vIFBoYW50b21KUyAyIGhhcyBlbnVtZXJhYmxlIG5vbi1pbmRleCBwcm9wZXJ0aWVzIG9uIHR5cGVkIGFycmF5cy5cbmlzVHlwZSYmKGtleT09J2J1ZmZlcid8fGtleT09J2J5dGVMZW5ndGgnfHxrZXk9PSdieXRlT2Zmc2V0Jyl8fC8vIFNraXAgaW5kZXggcHJvcGVydGllcy5cbmlzSW5kZXgoa2V5LGxlbmd0aCkpKSl7cmVzdWx0LnB1c2goa2V5KTt9fXJldHVybiByZXN1bHQ7fS8qKlxuICAgICAgICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uc2FtcGxlYCBmb3IgYXJyYXlzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gc2FtcGxlLlxuICAgICAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmFuZG9tIGVsZW1lbnQuXG4gICAgICAgICAqL2Z1bmN0aW9uIGFycmF5U2FtcGxlKGFycmF5KXt2YXIgbGVuZ3RoPWFycmF5Lmxlbmd0aDtyZXR1cm4gbGVuZ3RoP2FycmF5W2Jhc2VSYW5kb20oMCxsZW5ndGgtMSldOnVuZGVmaW5lZDt9LyoqXG4gICAgICAgICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5zYW1wbGVTaXplYCBmb3IgYXJyYXlzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gc2FtcGxlLlxuICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRvIHNhbXBsZS5cbiAgICAgICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSByYW5kb20gZWxlbWVudHMuXG4gICAgICAgICAqL2Z1bmN0aW9uIGFycmF5U2FtcGxlU2l6ZShhcnJheSxuKXtyZXR1cm4gc2h1ZmZsZVNlbGYoY29weUFycmF5KGFycmF5KSxiYXNlQ2xhbXAobiwwLGFycmF5Lmxlbmd0aCkpO30vKipcbiAgICAgICAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLnNodWZmbGVgIGZvciBhcnJheXMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBzaHVmZmxlLlxuICAgICAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBzaHVmZmxlZCBhcnJheS5cbiAgICAgICAgICovZnVuY3Rpb24gYXJyYXlTaHVmZmxlKGFycmF5KXtyZXR1cm4gc2h1ZmZsZVNlbGYoY29weUFycmF5KGFycmF5KSk7fS8qKlxuICAgICAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2UgYGFzc2lnblZhbHVlYCBleGNlcHQgdGhhdCBpdCBkb2Vzbid0IGFzc2lnblxuICAgICAgICAgKiBgdW5kZWZpbmVkYCB2YWx1ZXMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLlxuICAgICAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBhc3NpZ24uXG4gICAgICAgICAqL2Z1bmN0aW9uIGFzc2lnbk1lcmdlVmFsdWUob2JqZWN0LGtleSx2YWx1ZSl7aWYodmFsdWUhPT11bmRlZmluZWQmJiFlcShvYmplY3Rba2V5XSx2YWx1ZSl8fHZhbHVlPT09dW5kZWZpbmVkJiYhKGtleSBpbiBvYmplY3QpKXtiYXNlQXNzaWduVmFsdWUob2JqZWN0LGtleSx2YWx1ZSk7fX0vKipcbiAgICAgICAgICogQXNzaWducyBgdmFsdWVgIHRvIGBrZXlgIG9mIGBvYmplY3RgIGlmIHRoZSBleGlzdGluZyB2YWx1ZSBpcyBub3QgZXF1aXZhbGVudFxuICAgICAgICAgKiB1c2luZyBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICAgICAgICAgKiBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLlxuICAgICAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBhc3NpZ24uXG4gICAgICAgICAqL2Z1bmN0aW9uIGFzc2lnblZhbHVlKG9iamVjdCxrZXksdmFsdWUpe3ZhciBvYmpWYWx1ZT1vYmplY3Rba2V5XTtpZighKGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LGtleSkmJmVxKG9ialZhbHVlLHZhbHVlKSl8fHZhbHVlPT09dW5kZWZpbmVkJiYhKGtleSBpbiBvYmplY3QpKXtiYXNlQXNzaWduVmFsdWUob2JqZWN0LGtleSx2YWx1ZSk7fX0vKipcbiAgICAgICAgICogR2V0cyB0aGUgaW5kZXggYXQgd2hpY2ggdGhlIGBrZXlgIGlzIGZvdW5kIGluIGBhcnJheWAgb2Yga2V5LXZhbHVlIHBhaXJzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgICAgICogQHBhcmFtIHsqfSBrZXkgVGhlIGtleSB0byBzZWFyY2ggZm9yLlxuICAgICAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICAgICAgICAgKi9mdW5jdGlvbiBhc3NvY0luZGV4T2YoYXJyYXksa2V5KXt2YXIgbGVuZ3RoPWFycmF5Lmxlbmd0aDt3aGlsZShsZW5ndGgtLSl7aWYoZXEoYXJyYXlbbGVuZ3RoXVswXSxrZXkpKXtyZXR1cm4gbGVuZ3RoO319cmV0dXJuLTE7fS8qKlxuICAgICAgICAgKiBBZ2dyZWdhdGVzIGVsZW1lbnRzIG9mIGBjb2xsZWN0aW9uYCBvbiBgYWNjdW11bGF0b3JgIHdpdGgga2V5cyB0cmFuc2Zvcm1lZFxuICAgICAgICAgKiBieSBgaXRlcmF0ZWVgIGFuZCB2YWx1ZXMgc2V0IGJ5IGBzZXR0ZXJgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHNldHRlciBUaGUgZnVuY3Rpb24gdG8gc2V0IGBhY2N1bXVsYXRvcmAgdmFsdWVzLlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgaXRlcmF0ZWUgdG8gdHJhbnNmb3JtIGtleXMuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBhY2N1bXVsYXRvciBUaGUgaW5pdGlhbCBhZ2dyZWdhdGVkIG9iamVjdC5cbiAgICAgICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBhY2N1bXVsYXRvcmAuXG4gICAgICAgICAqL2Z1bmN0aW9uIGJhc2VBZ2dyZWdhdG9yKGNvbGxlY3Rpb24sc2V0dGVyLGl0ZXJhdGVlLGFjY3VtdWxhdG9yKXtiYXNlRWFjaChjb2xsZWN0aW9uLGZ1bmN0aW9uKHZhbHVlLGtleSxjb2xsZWN0aW9uKXtzZXR0ZXIoYWNjdW11bGF0b3IsdmFsdWUsaXRlcmF0ZWUodmFsdWUpLGNvbGxlY3Rpb24pO30pO3JldHVybiBhY2N1bXVsYXRvcjt9LyoqXG4gICAgICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmFzc2lnbmAgd2l0aG91dCBzdXBwb3J0IGZvciBtdWx0aXBsZSBzb3VyY2VzXG4gICAgICAgICAqIG9yIGBjdXN0b21pemVyYCBmdW5jdGlvbnMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgc291cmNlIG9iamVjdC5cbiAgICAgICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgICAgICovZnVuY3Rpb24gYmFzZUFzc2lnbihvYmplY3Qsc291cmNlKXtyZXR1cm4gb2JqZWN0JiZjb3B5T2JqZWN0KHNvdXJjZSxrZXlzKHNvdXJjZSksb2JqZWN0KTt9LyoqXG4gICAgICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmFzc2lnbkluYCB3aXRob3V0IHN1cHBvcnQgZm9yIG11bHRpcGxlIHNvdXJjZXNcbiAgICAgICAgICogb3IgYGN1c3RvbWl6ZXJgIGZ1bmN0aW9ucy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBzb3VyY2Ugb2JqZWN0LlxuICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAgICAgKi9mdW5jdGlvbiBiYXNlQXNzaWduSW4ob2JqZWN0LHNvdXJjZSl7cmV0dXJuIG9iamVjdCYmY29weU9iamVjdChzb3VyY2Usa2V5c0luKHNvdXJjZSksb2JqZWN0KTt9LyoqXG4gICAgICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBhc3NpZ25WYWx1ZWAgYW5kIGBhc3NpZ25NZXJnZVZhbHVlYCB3aXRob3V0XG4gICAgICAgICAqIHZhbHVlIGNoZWNrcy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBhc3NpZ24uXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAgICAgICAgICovZnVuY3Rpb24gYmFzZUFzc2lnblZhbHVlKG9iamVjdCxrZXksdmFsdWUpe2lmKGtleT09J19fcHJvdG9fXycmJmRlZmluZVByb3BlcnR5KXtkZWZpbmVQcm9wZXJ0eShvYmplY3Qsa2V5LHtjb25maWd1cmFibGU6dHJ1ZSxlbnVtZXJhYmxlOnRydWUsdmFsdWU6dmFsdWUsd3JpdGFibGU6dHJ1ZX0pO31lbHNle29iamVjdFtrZXldPXZhbHVlO319LyoqXG4gICAgICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmF0YCB3aXRob3V0IHN1cHBvcnQgZm9yIGluZGl2aWR1YWwgcGF0aHMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IHBhdGhzIFRoZSBwcm9wZXJ0eSBwYXRocyB0byBwaWNrLlxuICAgICAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHBpY2tlZCBlbGVtZW50cy5cbiAgICAgICAgICovZnVuY3Rpb24gYmFzZUF0KG9iamVjdCxwYXRocyl7dmFyIGluZGV4PS0xLGxlbmd0aD1wYXRocy5sZW5ndGgscmVzdWx0PUFycmF5KGxlbmd0aCksc2tpcD1vYmplY3Q9PW51bGw7d2hpbGUoKytpbmRleDxsZW5ndGgpe3Jlc3VsdFtpbmRleF09c2tpcD91bmRlZmluZWQ6Z2V0KG9iamVjdCxwYXRoc1tpbmRleF0pO31yZXR1cm4gcmVzdWx0O30vKipcbiAgICAgICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uY2xhbXBgIHdoaWNoIGRvZXNuJ3QgY29lcmNlIGFyZ3VtZW50cy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IG51bWJlciBUaGUgbnVtYmVyIHRvIGNsYW1wLlxuICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gW2xvd2VyXSBUaGUgbG93ZXIgYm91bmQuXG4gICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSB1cHBlciBUaGUgdXBwZXIgYm91bmQuXG4gICAgICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGNsYW1wZWQgbnVtYmVyLlxuICAgICAgICAgKi9mdW5jdGlvbiBiYXNlQ2xhbXAobnVtYmVyLGxvd2VyLHVwcGVyKXtpZihudW1iZXI9PT1udW1iZXIpe2lmKHVwcGVyIT09dW5kZWZpbmVkKXtudW1iZXI9bnVtYmVyPD11cHBlcj9udW1iZXI6dXBwZXI7fWlmKGxvd2VyIT09dW5kZWZpbmVkKXtudW1iZXI9bnVtYmVyPj1sb3dlcj9udW1iZXI6bG93ZXI7fX1yZXR1cm4gbnVtYmVyO30vKipcbiAgICAgICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uY2xvbmVgIGFuZCBgXy5jbG9uZURlZXBgIHdoaWNoIHRyYWNrc1xuICAgICAgICAgKiB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2xvbmUuXG4gICAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy5cbiAgICAgICAgICogIDEgLSBEZWVwIGNsb25lXG4gICAgICAgICAqICAyIC0gRmxhdHRlbiBpbmhlcml0ZWQgcHJvcGVydGllc1xuICAgICAgICAgKiAgNCAtIENsb25lIHN5bWJvbHNcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY2xvbmluZy5cbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IFtrZXldIFRoZSBrZXkgb2YgYHZhbHVlYC5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBwYXJlbnQgb2JqZWN0IG9mIGB2YWx1ZWAuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgb2JqZWN0cyBhbmQgdGhlaXIgY2xvbmUgY291bnRlcnBhcnRzLlxuICAgICAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgY2xvbmVkIHZhbHVlLlxuICAgICAgICAgKi9mdW5jdGlvbiBiYXNlQ2xvbmUodmFsdWUsYml0bWFzayxjdXN0b21pemVyLGtleSxvYmplY3Qsc3RhY2spe3ZhciByZXN1bHQsaXNEZWVwPWJpdG1hc2smQ0xPTkVfREVFUF9GTEFHLGlzRmxhdD1iaXRtYXNrJkNMT05FX0ZMQVRfRkxBRyxpc0Z1bGw9Yml0bWFzayZDTE9ORV9TWU1CT0xTX0ZMQUc7aWYoY3VzdG9taXplcil7cmVzdWx0PW9iamVjdD9jdXN0b21pemVyKHZhbHVlLGtleSxvYmplY3Qsc3RhY2spOmN1c3RvbWl6ZXIodmFsdWUpO31pZihyZXN1bHQhPT11bmRlZmluZWQpe3JldHVybiByZXN1bHQ7fWlmKCFpc09iamVjdCh2YWx1ZSkpe3JldHVybiB2YWx1ZTt9dmFyIGlzQXJyPWlzQXJyYXkodmFsdWUpO2lmKGlzQXJyKXtyZXN1bHQ9aW5pdENsb25lQXJyYXkodmFsdWUpO2lmKCFpc0RlZXApe3JldHVybiBjb3B5QXJyYXkodmFsdWUscmVzdWx0KTt9fWVsc2V7dmFyIHRhZz1nZXRUYWcodmFsdWUpLGlzRnVuYz10YWc9PWZ1bmNUYWd8fHRhZz09Z2VuVGFnO2lmKGlzQnVmZmVyKHZhbHVlKSl7cmV0dXJuIGNsb25lQnVmZmVyKHZhbHVlLGlzRGVlcCk7fWlmKHRhZz09b2JqZWN0VGFnfHx0YWc9PWFyZ3NUYWd8fGlzRnVuYyYmIW9iamVjdCl7cmVzdWx0PWlzRmxhdHx8aXNGdW5jP3t9OmluaXRDbG9uZU9iamVjdCh2YWx1ZSk7aWYoIWlzRGVlcCl7cmV0dXJuIGlzRmxhdD9jb3B5U3ltYm9sc0luKHZhbHVlLGJhc2VBc3NpZ25JbihyZXN1bHQsdmFsdWUpKTpjb3B5U3ltYm9scyh2YWx1ZSxiYXNlQXNzaWduKHJlc3VsdCx2YWx1ZSkpO319ZWxzZXtpZighY2xvbmVhYmxlVGFnc1t0YWddKXtyZXR1cm4gb2JqZWN0P3ZhbHVlOnt9O31yZXN1bHQ9aW5pdENsb25lQnlUYWcodmFsdWUsdGFnLGlzRGVlcCk7fX0vLyBDaGVjayBmb3IgY2lyY3VsYXIgcmVmZXJlbmNlcyBhbmQgcmV0dXJuIGl0cyBjb3JyZXNwb25kaW5nIGNsb25lLlxuc3RhY2t8fChzdGFjaz1uZXcgU3RhY2soKSk7dmFyIHN0YWNrZWQ9c3RhY2suZ2V0KHZhbHVlKTtpZihzdGFja2VkKXtyZXR1cm4gc3RhY2tlZDt9c3RhY2suc2V0KHZhbHVlLHJlc3VsdCk7aWYoaXNTZXQodmFsdWUpKXt2YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uKHN1YlZhbHVlKXtyZXN1bHQuYWRkKGJhc2VDbG9uZShzdWJWYWx1ZSxiaXRtYXNrLGN1c3RvbWl6ZXIsc3ViVmFsdWUsdmFsdWUsc3RhY2spKTt9KTtyZXR1cm4gcmVzdWx0O31pZihpc01hcCh2YWx1ZSkpe3ZhbHVlLmZvckVhY2goZnVuY3Rpb24oc3ViVmFsdWUsa2V5KXtyZXN1bHQuc2V0KGtleSxiYXNlQ2xvbmUoc3ViVmFsdWUsYml0bWFzayxjdXN0b21pemVyLGtleSx2YWx1ZSxzdGFjaykpO30pO3JldHVybiByZXN1bHQ7fXZhciBrZXlzRnVuYz1pc0Z1bGw/aXNGbGF0P2dldEFsbEtleXNJbjpnZXRBbGxLZXlzOmlzRmxhdD9rZXlzSW46a2V5czt2YXIgcHJvcHM9aXNBcnI/dW5kZWZpbmVkOmtleXNGdW5jKHZhbHVlKTthcnJheUVhY2gocHJvcHN8fHZhbHVlLGZ1bmN0aW9uKHN1YlZhbHVlLGtleSl7aWYocHJvcHMpe2tleT1zdWJWYWx1ZTtzdWJWYWx1ZT12YWx1ZVtrZXldO30vLyBSZWN1cnNpdmVseSBwb3B1bGF0ZSBjbG9uZSAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuYXNzaWduVmFsdWUocmVzdWx0LGtleSxiYXNlQ2xvbmUoc3ViVmFsdWUsYml0bWFzayxjdXN0b21pemVyLGtleSx2YWx1ZSxzdGFjaykpO30pO3JldHVybiByZXN1bHQ7fS8qKlxuICAgICAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5jb25mb3Jtc2Agd2hpY2ggZG9lc24ndCBjbG9uZSBgc291cmNlYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IG9mIHByb3BlcnR5IHByZWRpY2F0ZXMgdG8gY29uZm9ybSB0by5cbiAgICAgICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc3BlYyBmdW5jdGlvbi5cbiAgICAgICAgICovZnVuY3Rpb24gYmFzZUNvbmZvcm1zKHNvdXJjZSl7dmFyIHByb3BzPWtleXMoc291cmNlKTtyZXR1cm4gZnVuY3Rpb24ob2JqZWN0KXtyZXR1cm4gYmFzZUNvbmZvcm1zVG8ob2JqZWN0LHNvdXJjZSxwcm9wcyk7fTt9LyoqXG4gICAgICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmNvbmZvcm1zVG9gIHdoaWNoIGFjY2VwdHMgYHByb3BzYCB0byBjaGVjay5cbiAgICAgICAgICpcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGluc3BlY3QuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCBvZiBwcm9wZXJ0eSBwcmVkaWNhdGVzIHRvIGNvbmZvcm0gdG8uXG4gICAgICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgb2JqZWN0YCBjb25mb3JtcywgZWxzZSBgZmFsc2VgLlxuICAgICAgICAgKi9mdW5jdGlvbiBiYXNlQ29uZm9ybXNUbyhvYmplY3Qsc291cmNlLHByb3BzKXt2YXIgbGVuZ3RoPXByb3BzLmxlbmd0aDtpZihvYmplY3Q9PW51bGwpe3JldHVybiFsZW5ndGg7fW9iamVjdD1PYmplY3Qob2JqZWN0KTt3aGlsZShsZW5ndGgtLSl7dmFyIGtleT1wcm9wc1tsZW5ndGhdLHByZWRpY2F0ZT1zb3VyY2Vba2V5XSx2YWx1ZT1vYmplY3Rba2V5XTtpZih2YWx1ZT09PXVuZGVmaW5lZCYmIShrZXkgaW4gb2JqZWN0KXx8IXByZWRpY2F0ZSh2YWx1ZSkpe3JldHVybiBmYWxzZTt9fXJldHVybiB0cnVlO30vKipcbiAgICAgICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZGVsYXlgIGFuZCBgXy5kZWZlcmAgd2hpY2ggYWNjZXB0cyBgYXJnc2BcbiAgICAgICAgICogdG8gcHJvdmlkZSB0byBgZnVuY2AuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRlbGF5LlxuICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gd2FpdCBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byBkZWxheSBpbnZvY2F0aW9uLlxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBhcmdzIFRoZSBhcmd1bWVudHMgdG8gcHJvdmlkZSB0byBgZnVuY2AuXG4gICAgICAgICAqIEByZXR1cm5zIHtudW1iZXJ8T2JqZWN0fSBSZXR1cm5zIHRoZSB0aW1lciBpZCBvciB0aW1lb3V0IG9iamVjdC5cbiAgICAgICAgICovZnVuY3Rpb24gYmFzZURlbGF5KGZ1bmMsd2FpdCxhcmdzKXtpZih0eXBlb2YgZnVuYyE9PSdmdW5jdGlvbicpe3Rocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTt9cmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtmdW5jLmFwcGx5KHVuZGVmaW5lZCxhcmdzKTt9LHdhaXQpO30vKipcbiAgICAgICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgbWV0aG9kcyBsaWtlIGBfLmRpZmZlcmVuY2VgIHdpdGhvdXQgc3VwcG9ydFxuICAgICAgICAgKiBmb3IgZXhjbHVkaW5nIG11bHRpcGxlIGFycmF5cyBvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgICAgICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gZXhjbHVkZS5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlXSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NvbXBhcmF0b3JdIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGZpbHRlcmVkIHZhbHVlcy5cbiAgICAgICAgICovZnVuY3Rpb24gYmFzZURpZmZlcmVuY2UoYXJyYXksdmFsdWVzLGl0ZXJhdGVlLGNvbXBhcmF0b3Ipe3ZhciBpbmRleD0tMSxpbmNsdWRlcz1hcnJheUluY2x1ZGVzLGlzQ29tbW9uPXRydWUsbGVuZ3RoPWFycmF5Lmxlbmd0aCxyZXN1bHQ9W10sdmFsdWVzTGVuZ3RoPXZhbHVlcy5sZW5ndGg7aWYoIWxlbmd0aCl7cmV0dXJuIHJlc3VsdDt9aWYoaXRlcmF0ZWUpe3ZhbHVlcz1hcnJheU1hcCh2YWx1ZXMsYmFzZVVuYXJ5KGl0ZXJhdGVlKSk7fWlmKGNvbXBhcmF0b3Ipe2luY2x1ZGVzPWFycmF5SW5jbHVkZXNXaXRoO2lzQ29tbW9uPWZhbHNlO31lbHNlIGlmKHZhbHVlcy5sZW5ndGg+PUxBUkdFX0FSUkFZX1NJWkUpe2luY2x1ZGVzPWNhY2hlSGFzO2lzQ29tbW9uPWZhbHNlO3ZhbHVlcz1uZXcgU2V0Q2FjaGUodmFsdWVzKTt9b3V0ZXI6d2hpbGUoKytpbmRleDxsZW5ndGgpe3ZhciB2YWx1ZT1hcnJheVtpbmRleF0sY29tcHV0ZWQ9aXRlcmF0ZWU9PW51bGw/dmFsdWU6aXRlcmF0ZWUodmFsdWUpO3ZhbHVlPWNvbXBhcmF0b3J8fHZhbHVlIT09MD92YWx1ZTowO2lmKGlzQ29tbW9uJiZjb21wdXRlZD09PWNvbXB1dGVkKXt2YXIgdmFsdWVzSW5kZXg9dmFsdWVzTGVuZ3RoO3doaWxlKHZhbHVlc0luZGV4LS0pe2lmKHZhbHVlc1t2YWx1ZXNJbmRleF09PT1jb21wdXRlZCl7Y29udGludWUgb3V0ZXI7fX1yZXN1bHQucHVzaCh2YWx1ZSk7fWVsc2UgaWYoIWluY2x1ZGVzKHZhbHVlcyxjb21wdXRlZCxjb21wYXJhdG9yKSl7cmVzdWx0LnB1c2godmFsdWUpO319cmV0dXJuIHJlc3VsdDt9LyoqXG4gICAgICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZvckVhY2hgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAgICAgKiBAcmV0dXJucyB7QXJyYXl8T2JqZWN0fSBSZXR1cm5zIGBjb2xsZWN0aW9uYC5cbiAgICAgICAgICovdmFyIGJhc2VFYWNoPWNyZWF0ZUJhc2VFYWNoKGJhc2VGb3JPd24pOy8qKlxuICAgICAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mb3JFYWNoUmlnaHRgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAgICAgKiBAcmV0dXJucyB7QXJyYXl8T2JqZWN0fSBSZXR1cm5zIGBjb2xsZWN0aW9uYC5cbiAgICAgICAgICovdmFyIGJhc2VFYWNoUmlnaHQ9Y3JlYXRlQmFzZUVhY2goYmFzZUZvck93blJpZ2h0LHRydWUpOy8qKlxuICAgICAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5ldmVyeWAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYWxsIGVsZW1lbnRzIHBhc3MgdGhlIHByZWRpY2F0ZSBjaGVjayxcbiAgICAgICAgICogIGVsc2UgYGZhbHNlYFxuICAgICAgICAgKi9mdW5jdGlvbiBiYXNlRXZlcnkoY29sbGVjdGlvbixwcmVkaWNhdGUpe3ZhciByZXN1bHQ9dHJ1ZTtiYXNlRWFjaChjb2xsZWN0aW9uLGZ1bmN0aW9uKHZhbHVlLGluZGV4LGNvbGxlY3Rpb24pe3Jlc3VsdD0hIXByZWRpY2F0ZSh2YWx1ZSxpbmRleCxjb2xsZWN0aW9uKTtyZXR1cm4gcmVzdWx0O30pO3JldHVybiByZXN1bHQ7fS8qKlxuICAgICAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBtZXRob2RzIGxpa2UgYF8ubWF4YCBhbmQgYF8ubWluYCB3aGljaCBhY2NlcHRzIGFcbiAgICAgICAgICogYGNvbXBhcmF0b3JgIHRvIGRldGVybWluZSB0aGUgZXh0cmVtdW0gdmFsdWUuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNvbXBhcmF0b3IgVGhlIGNvbXBhcmF0b3IgdXNlZCB0byBjb21wYXJlIHZhbHVlcy5cbiAgICAgICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGV4dHJlbXVtIHZhbHVlLlxuICAgICAgICAgKi9mdW5jdGlvbiBiYXNlRXh0cmVtdW0oYXJyYXksaXRlcmF0ZWUsY29tcGFyYXRvcil7dmFyIGluZGV4PS0xLGxlbmd0aD1hcnJheS5sZW5ndGg7d2hpbGUoKytpbmRleDxsZW5ndGgpe3ZhciB2YWx1ZT1hcnJheVtpbmRleF0sY3VycmVudD1pdGVyYXRlZSh2YWx1ZSk7aWYoY3VycmVudCE9bnVsbCYmKGNvbXB1dGVkPT09dW5kZWZpbmVkP2N1cnJlbnQ9PT1jdXJyZW50JiYhaXNTeW1ib2woY3VycmVudCk6Y29tcGFyYXRvcihjdXJyZW50LGNvbXB1dGVkKSkpe3ZhciBjb21wdXRlZD1jdXJyZW50LHJlc3VsdD12YWx1ZTt9fXJldHVybiByZXN1bHQ7fS8qKlxuICAgICAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5maWxsYCB3aXRob3V0IGFuIGl0ZXJhdGVlIGNhbGwgZ3VhcmQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBmaWxsLlxuICAgICAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBmaWxsIGBhcnJheWAgd2l0aC5cbiAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD0wXSBUaGUgc3RhcnQgcG9zaXRpb24uXG4gICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbZW5kPWFycmF5Lmxlbmd0aF0gVGhlIGVuZCBwb3NpdGlvbi5cbiAgICAgICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gICAgICAgICAqL2Z1bmN0aW9uIGJhc2VGaWxsKGFycmF5LHZhbHVlLHN0YXJ0LGVuZCl7dmFyIGxlbmd0aD1hcnJheS5sZW5ndGg7c3RhcnQ9dG9JbnRlZ2VyKHN0YXJ0KTtpZihzdGFydDwwKXtzdGFydD0tc3RhcnQ+bGVuZ3RoPzA6bGVuZ3RoK3N0YXJ0O31lbmQ9ZW5kPT09dW5kZWZpbmVkfHxlbmQ+bGVuZ3RoP2xlbmd0aDp0b0ludGVnZXIoZW5kKTtpZihlbmQ8MCl7ZW5kKz1sZW5ndGg7fWVuZD1zdGFydD5lbmQ/MDp0b0xlbmd0aChlbmQpO3doaWxlKHN0YXJ0PGVuZCl7YXJyYXlbc3RhcnQrK109dmFsdWU7fXJldHVybiBhcnJheTt9LyoqXG4gICAgICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZpbHRlcmAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmaWx0ZXJlZCBhcnJheS5cbiAgICAgICAgICovZnVuY3Rpb24gYmFzZUZpbHRlcihjb2xsZWN0aW9uLHByZWRpY2F0ZSl7dmFyIHJlc3VsdD1bXTtiYXNlRWFjaChjb2xsZWN0aW9uLGZ1bmN0aW9uKHZhbHVlLGluZGV4LGNvbGxlY3Rpb24pe2lmKHByZWRpY2F0ZSh2YWx1ZSxpbmRleCxjb2xsZWN0aW9uKSl7cmVzdWx0LnB1c2godmFsdWUpO319KTtyZXR1cm4gcmVzdWx0O30vKipcbiAgICAgICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZmxhdHRlbmAgd2l0aCBzdXBwb3J0IGZvciByZXN0cmljdGluZyBmbGF0dGVuaW5nLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gZmxhdHRlbi5cbiAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IGRlcHRoIFRoZSBtYXhpbXVtIHJlY3Vyc2lvbiBkZXB0aC5cbiAgICAgICAgICogQHBhcmFtIHtib29sZWFufSBbcHJlZGljYXRlPWlzRmxhdHRlbmFibGVdIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzU3RyaWN0XSBSZXN0cmljdCB0byB2YWx1ZXMgdGhhdCBwYXNzIGBwcmVkaWNhdGVgIGNoZWNrcy5cbiAgICAgICAgICogQHBhcmFtIHtBcnJheX0gW3Jlc3VsdD1bXV0gVGhlIGluaXRpYWwgcmVzdWx0IHZhbHVlLlxuICAgICAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmbGF0dGVuZWQgYXJyYXkuXG4gICAgICAgICAqL2Z1bmN0aW9uIGJhc2VGbGF0dGVuKGFycmF5LGRlcHRoLHByZWRpY2F0ZSxpc1N0cmljdCxyZXN1bHQpe3ZhciBpbmRleD0tMSxsZW5ndGg9YXJyYXkubGVuZ3RoO3ByZWRpY2F0ZXx8KHByZWRpY2F0ZT1pc0ZsYXR0ZW5hYmxlKTtyZXN1bHR8fChyZXN1bHQ9W10pO3doaWxlKCsraW5kZXg8bGVuZ3RoKXt2YXIgdmFsdWU9YXJyYXlbaW5kZXhdO2lmKGRlcHRoPjAmJnByZWRpY2F0ZSh2YWx1ZSkpe2lmKGRlcHRoPjEpey8vIFJlY3Vyc2l2ZWx5IGZsYXR0ZW4gYXJyYXlzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG5iYXNlRmxhdHRlbih2YWx1ZSxkZXB0aC0xLHByZWRpY2F0ZSxpc1N0cmljdCxyZXN1bHQpO31lbHNle2FycmF5UHVzaChyZXN1bHQsdmFsdWUpO319ZWxzZSBpZighaXNTdHJpY3Qpe3Jlc3VsdFtyZXN1bHQubGVuZ3RoXT12YWx1ZTt9fXJldHVybiByZXN1bHQ7fS8qKlxuICAgICAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgYmFzZUZvck93bmAgd2hpY2ggaXRlcmF0ZXMgb3ZlciBgb2JqZWN0YFxuICAgICAgICAgKiBwcm9wZXJ0aWVzIHJldHVybmVkIGJ5IGBrZXlzRnVuY2AgYW5kIGludm9rZXMgYGl0ZXJhdGVlYCBmb3IgZWFjaCBwcm9wZXJ0eS5cbiAgICAgICAgICogSXRlcmF0ZWUgZnVuY3Rpb25zIG1heSBleGl0IGl0ZXJhdGlvbiBlYXJseSBieSBleHBsaWNpdGx5IHJldHVybmluZyBgZmFsc2VgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBrZXlzRnVuYyBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBrZXlzIG9mIGBvYmplY3RgLlxuICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAgICAgKi92YXIgYmFzZUZvcj1jcmVhdGVCYXNlRm9yKCk7LyoqXG4gICAgICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgbGlrZSBgYmFzZUZvcmAgZXhjZXB0IHRoYXQgaXQgaXRlcmF0ZXMgb3ZlciBwcm9wZXJ0aWVzXG4gICAgICAgICAqIGluIHRoZSBvcHBvc2l0ZSBvcmRlci5cbiAgICAgICAgICpcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0ga2V5c0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUga2V5cyBvZiBgb2JqZWN0YC5cbiAgICAgICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgICAgICovdmFyIGJhc2VGb3JSaWdodD1jcmVhdGVCYXNlRm9yKHRydWUpOy8qKlxuICAgICAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mb3JPd25gIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgICAgICovZnVuY3Rpb24gYmFzZUZvck93bihvYmplY3QsaXRlcmF0ZWUpe3JldHVybiBvYmplY3QmJmJhc2VGb3Iob2JqZWN0LGl0ZXJhdGVlLGtleXMpO30vKipcbiAgICAgICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZm9yT3duUmlnaHRgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgICAgICovZnVuY3Rpb24gYmFzZUZvck93blJpZ2h0KG9iamVjdCxpdGVyYXRlZSl7cmV0dXJuIG9iamVjdCYmYmFzZUZvclJpZ2h0KG9iamVjdCxpdGVyYXRlZSxrZXlzKTt9LyoqXG4gICAgICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZ1bmN0aW9uc2Agd2hpY2ggY3JlYXRlcyBhbiBhcnJheSBvZlxuICAgICAgICAgKiBgb2JqZWN0YCBmdW5jdGlvbiBwcm9wZXJ0eSBuYW1lcyBmaWx0ZXJlZCBmcm9tIGBwcm9wc2AuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpbnNwZWN0LlxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBwcm9wcyBUaGUgcHJvcGVydHkgbmFtZXMgdG8gZmlsdGVyLlxuICAgICAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGZ1bmN0aW9uIG5hbWVzLlxuICAgICAgICAgKi9mdW5jdGlvbiBiYXNlRnVuY3Rpb25zKG9iamVjdCxwcm9wcyl7cmV0dXJuIGFycmF5RmlsdGVyKHByb3BzLGZ1bmN0aW9uKGtleSl7cmV0dXJuIGlzRnVuY3Rpb24ob2JqZWN0W2tleV0pO30pO30vKipcbiAgICAgICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZ2V0YCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZmF1bHQgdmFsdWVzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gICAgICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXNvbHZlZCB2YWx1ZS5cbiAgICAgICAgICovZnVuY3Rpb24gYmFzZUdldChvYmplY3QscGF0aCl7cGF0aD1jYXN0UGF0aChwYXRoLG9iamVjdCk7dmFyIGluZGV4PTAsbGVuZ3RoPXBhdGgubGVuZ3RoO3doaWxlKG9iamVjdCE9bnVsbCYmaW5kZXg8bGVuZ3RoKXtvYmplY3Q9b2JqZWN0W3RvS2V5KHBhdGhbaW5kZXgrK10pXTt9cmV0dXJuIGluZGV4JiZpbmRleD09bGVuZ3RoP29iamVjdDp1bmRlZmluZWQ7fS8qKlxuICAgICAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgZ2V0QWxsS2V5c2AgYW5kIGBnZXRBbGxLZXlzSW5gIHdoaWNoIHVzZXNcbiAgICAgICAgICogYGtleXNGdW5jYCBhbmQgYHN5bWJvbHNGdW5jYCB0byBnZXQgdGhlIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgYW5kXG4gICAgICAgICAqIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0ga2V5c0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUga2V5cyBvZiBgb2JqZWN0YC5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gc3ltYm9sc0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAgICAgICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scy5cbiAgICAgICAgICovZnVuY3Rpb24gYmFzZUdldEFsbEtleXMob2JqZWN0LGtleXNGdW5jLHN5bWJvbHNGdW5jKXt2YXIgcmVzdWx0PWtleXNGdW5jKG9iamVjdCk7cmV0dXJuIGlzQXJyYXkob2JqZWN0KT9yZXN1bHQ6YXJyYXlQdXNoKHJlc3VsdCxzeW1ib2xzRnVuYyhvYmplY3QpKTt9LyoqXG4gICAgICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBnZXRUYWdgIHdpdGhvdXQgZmFsbGJhY2tzIGZvciBidWdneSBlbnZpcm9ubWVudHMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBgdG9TdHJpbmdUYWdgLlxuICAgICAgICAgKi9mdW5jdGlvbiBiYXNlR2V0VGFnKHZhbHVlKXtpZih2YWx1ZT09bnVsbCl7cmV0dXJuIHZhbHVlPT09dW5kZWZpbmVkP3VuZGVmaW5lZFRhZzpudWxsVGFnO31yZXR1cm4gc3ltVG9TdHJpbmdUYWcmJnN5bVRvU3RyaW5nVGFnIGluIE9iamVjdCh2YWx1ZSk/Z2V0UmF3VGFnKHZhbHVlKTpvYmplY3RUb1N0cmluZyh2YWx1ZSk7fS8qKlxuICAgICAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5ndGAgd2hpY2ggZG9lc24ndCBjb2VyY2UgYXJndW1lbnRzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAgICAgKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBncmVhdGVyIHRoYW4gYG90aGVyYCxcbiAgICAgICAgICogIGVsc2UgYGZhbHNlYC5cbiAgICAgICAgICovZnVuY3Rpb24gYmFzZUd0KHZhbHVlLG90aGVyKXtyZXR1cm4gdmFsdWU+b3RoZXI7fS8qKlxuICAgICAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5oYXNgIHdpdGhvdXQgc3VwcG9ydCBmb3IgZGVlcCBwYXRocy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBrZXkgVGhlIGtleSB0byBjaGVjay5cbiAgICAgICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICAgICAgICAgKi9mdW5jdGlvbiBiYXNlSGFzKG9iamVjdCxrZXkpe3JldHVybiBvYmplY3QhPW51bGwmJmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LGtleSk7fS8qKlxuICAgICAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5oYXNJbmAgd2l0aG91dCBzdXBwb3J0IGZvciBkZWVwIHBhdGhzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgICAgICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IGtleSBUaGUga2V5IHRvIGNoZWNrLlxuICAgICAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gICAgICAgICAqL2Z1bmN0aW9uIGJhc2VIYXNJbihvYmplY3Qsa2V5KXtyZXR1cm4gb2JqZWN0IT1udWxsJiZrZXkgaW4gT2JqZWN0KG9iamVjdCk7fS8qKlxuICAgICAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pblJhbmdlYCB3aGljaCBkb2Vzbid0IGNvZXJjZSBhcmd1bWVudHMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBudW1iZXIgVGhlIG51bWJlciB0byBjaGVjay5cbiAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0IFRoZSBzdGFydCBvZiB0aGUgcmFuZ2UuXG4gICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBlbmQgVGhlIGVuZCBvZiB0aGUgcmFuZ2UuXG4gICAgICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgbnVtYmVyYCBpcyBpbiB0aGUgcmFuZ2UsIGVsc2UgYGZhbHNlYC5cbiAgICAgICAgICovZnVuY3Rpb24gYmFzZUluUmFuZ2UobnVtYmVyLHN0YXJ0LGVuZCl7cmV0dXJuIG51bWJlcj49bmF0aXZlTWluKHN0YXJ0LGVuZCkmJm51bWJlcjxuYXRpdmVNYXgoc3RhcnQsZW5kKTt9LyoqXG4gICAgICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIG1ldGhvZHMgbGlrZSBgXy5pbnRlcnNlY3Rpb25gLCB3aXRob3V0IHN1cHBvcnRcbiAgICAgICAgICogZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMsIHRoYXQgYWNjZXB0cyBhbiBhcnJheSBvZiBhcnJheXMgdG8gaW5zcGVjdC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXlzIFRoZSBhcnJheXMgdG8gaW5zcGVjdC5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlXSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NvbXBhcmF0b3JdIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIHNoYXJlZCB2YWx1ZXMuXG4gICAgICAgICAqL2Z1bmN0aW9uIGJhc2VJbnRlcnNlY3Rpb24oYXJyYXlzLGl0ZXJhdGVlLGNvbXBhcmF0b3Ipe3ZhciBpbmNsdWRlcz1jb21wYXJhdG9yP2FycmF5SW5jbHVkZXNXaXRoOmFycmF5SW5jbHVkZXMsbGVuZ3RoPWFycmF5c1swXS5sZW5ndGgsb3RoTGVuZ3RoPWFycmF5cy5sZW5ndGgsb3RoSW5kZXg9b3RoTGVuZ3RoLGNhY2hlcz1BcnJheShvdGhMZW5ndGgpLG1heExlbmd0aD1JbmZpbml0eSxyZXN1bHQ9W107d2hpbGUob3RoSW5kZXgtLSl7dmFyIGFycmF5PWFycmF5c1tvdGhJbmRleF07aWYob3RoSW5kZXgmJml0ZXJhdGVlKXthcnJheT1hcnJheU1hcChhcnJheSxiYXNlVW5hcnkoaXRlcmF0ZWUpKTt9bWF4TGVuZ3RoPW5hdGl2ZU1pbihhcnJheS5sZW5ndGgsbWF4TGVuZ3RoKTtjYWNoZXNbb3RoSW5kZXhdPSFjb21wYXJhdG9yJiYoaXRlcmF0ZWV8fGxlbmd0aD49MTIwJiZhcnJheS5sZW5ndGg+PTEyMCk/bmV3IFNldENhY2hlKG90aEluZGV4JiZhcnJheSk6dW5kZWZpbmVkO31hcnJheT1hcnJheXNbMF07dmFyIGluZGV4PS0xLHNlZW49Y2FjaGVzWzBdO291dGVyOndoaWxlKCsraW5kZXg8bGVuZ3RoJiZyZXN1bHQubGVuZ3RoPG1heExlbmd0aCl7dmFyIHZhbHVlPWFycmF5W2luZGV4XSxjb21wdXRlZD1pdGVyYXRlZT9pdGVyYXRlZSh2YWx1ZSk6dmFsdWU7dmFsdWU9Y29tcGFyYXRvcnx8dmFsdWUhPT0wP3ZhbHVlOjA7aWYoIShzZWVuP2NhY2hlSGFzKHNlZW4sY29tcHV0ZWQpOmluY2x1ZGVzKHJlc3VsdCxjb21wdXRlZCxjb21wYXJhdG9yKSkpe290aEluZGV4PW90aExlbmd0aDt3aGlsZSgtLW90aEluZGV4KXt2YXIgY2FjaGU9Y2FjaGVzW290aEluZGV4XTtpZighKGNhY2hlP2NhY2hlSGFzKGNhY2hlLGNvbXB1dGVkKTppbmNsdWRlcyhhcnJheXNbb3RoSW5kZXhdLGNvbXB1dGVkLGNvbXBhcmF0b3IpKSl7Y29udGludWUgb3V0ZXI7fX1pZihzZWVuKXtzZWVuLnB1c2goY29tcHV0ZWQpO31yZXN1bHQucHVzaCh2YWx1ZSk7fX1yZXR1cm4gcmVzdWx0O30vKipcbiAgICAgICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaW52ZXJ0YCBhbmQgYF8uaW52ZXJ0QnlgIHdoaWNoIGludmVydHNcbiAgICAgICAgICogYG9iamVjdGAgd2l0aCB2YWx1ZXMgdHJhbnNmb3JtZWQgYnkgYGl0ZXJhdGVlYCBhbmQgc2V0IGJ5IGBzZXR0ZXJgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBzZXR0ZXIgVGhlIGZ1bmN0aW9uIHRvIHNldCBgYWNjdW11bGF0b3JgIHZhbHVlcy5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGl0ZXJhdGVlIHRvIHRyYW5zZm9ybSB2YWx1ZXMuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBhY2N1bXVsYXRvciBUaGUgaW5pdGlhbCBpbnZlcnRlZCBvYmplY3QuXG4gICAgICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgYWNjdW11bGF0b3JgLlxuICAgICAgICAgKi9mdW5jdGlvbiBiYXNlSW52ZXJ0ZXIob2JqZWN0LHNldHRlcixpdGVyYXRlZSxhY2N1bXVsYXRvcil7YmFzZUZvck93bihvYmplY3QsZnVuY3Rpb24odmFsdWUsa2V5LG9iamVjdCl7c2V0dGVyKGFjY3VtdWxhdG9yLGl0ZXJhdGVlKHZhbHVlKSxrZXksb2JqZWN0KTt9KTtyZXR1cm4gYWNjdW11bGF0b3I7fS8qKlxuICAgICAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pbnZva2VgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaW5kaXZpZHVhbFxuICAgICAgICAgKiBtZXRob2QgYXJndW1lbnRzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBtZXRob2QgdG8gaW52b2tlLlxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBhcmdzIFRoZSBhcmd1bWVudHMgdG8gaW52b2tlIHRoZSBtZXRob2Qgd2l0aC5cbiAgICAgICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc3VsdCBvZiB0aGUgaW52b2tlZCBtZXRob2QuXG4gICAgICAgICAqL2Z1bmN0aW9uIGJhc2VJbnZva2Uob2JqZWN0LHBhdGgsYXJncyl7cGF0aD1jYXN0UGF0aChwYXRoLG9iamVjdCk7b2JqZWN0PXBhcmVudChvYmplY3QscGF0aCk7dmFyIGZ1bmM9b2JqZWN0PT1udWxsP29iamVjdDpvYmplY3RbdG9LZXkobGFzdChwYXRoKSldO3JldHVybiBmdW5jPT1udWxsP3VuZGVmaW5lZDphcHBseShmdW5jLG9iamVjdCxhcmdzKTt9LyoqXG4gICAgICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzQXJndW1lbnRzYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGBhcmd1bWVudHNgIG9iamVjdCxcbiAgICAgICAgICovZnVuY3Rpb24gYmFzZUlzQXJndW1lbnRzKHZhbHVlKXtyZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSYmYmFzZUdldFRhZyh2YWx1ZSk9PWFyZ3NUYWc7fS8qKlxuICAgICAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0FycmF5QnVmZmVyYCB3aXRob3V0IE5vZGUuanMgb3B0aW1pemF0aW9ucy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5IGJ1ZmZlciwgZWxzZSBgZmFsc2VgLlxuICAgICAgICAgKi9mdW5jdGlvbiBiYXNlSXNBcnJheUJ1ZmZlcih2YWx1ZSl7cmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkmJmJhc2VHZXRUYWcodmFsdWUpPT1hcnJheUJ1ZmZlclRhZzt9LyoqXG4gICAgICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzRGF0ZWAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGRhdGUgb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gICAgICAgICAqL2Z1bmN0aW9uIGJhc2VJc0RhdGUodmFsdWUpe3JldHVybiBpc09iamVjdExpa2UodmFsdWUpJiZiYXNlR2V0VGFnKHZhbHVlKT09ZGF0ZVRhZzt9LyoqXG4gICAgICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzRXF1YWxgIHdoaWNoIHN1cHBvcnRzIHBhcnRpYWwgY29tcGFyaXNvbnNcbiAgICAgICAgICogYW5kIHRyYWNrcyB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAgICAgICAgICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAgICAgICAgICogQHBhcmFtIHtib29sZWFufSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLlxuICAgICAgICAgKiAgMSAtIFVub3JkZXJlZCBjb21wYXJpc29uXG4gICAgICAgICAqICAyIC0gUGFydGlhbCBjb21wYXJpc29uXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gW3N0YWNrXSBUcmFja3MgdHJhdmVyc2VkIGB2YWx1ZWAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAgICAgICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAgICAgICAgICovZnVuY3Rpb24gYmFzZUlzRXF1YWwodmFsdWUsb3RoZXIsYml0bWFzayxjdXN0b21pemVyLHN0YWNrKXtpZih2YWx1ZT09PW90aGVyKXtyZXR1cm4gdHJ1ZTt9aWYodmFsdWU9PW51bGx8fG90aGVyPT1udWxsfHwhaXNPYmplY3RMaWtlKHZhbHVlKSYmIWlzT2JqZWN0TGlrZShvdGhlcikpe3JldHVybiB2YWx1ZSE9PXZhbHVlJiZvdGhlciE9PW90aGVyO31yZXR1cm4gYmFzZUlzRXF1YWxEZWVwKHZhbHVlLG90aGVyLGJpdG1hc2ssY3VzdG9taXplcixiYXNlSXNFcXVhbCxzdGFjayk7fS8qKlxuICAgICAgICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsYCBmb3IgYXJyYXlzIGFuZCBvYmplY3RzIHdoaWNoIHBlcmZvcm1zXG4gICAgICAgICAqIGRlZXAgY29tcGFyaXNvbnMgYW5kIHRyYWNrcyB0cmF2ZXJzZWQgb2JqZWN0cyBlbmFibGluZyBvYmplY3RzIHdpdGggY2lyY3VsYXJcbiAgICAgICAgICogcmVmZXJlbmNlcyB0byBiZSBjb21wYXJlZC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvdGhlciBUaGUgb3RoZXIgb2JqZWN0IHRvIGNvbXBhcmUuXG4gICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICAgICAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG9iamVjdHMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAgICAgICAgICovZnVuY3Rpb24gYmFzZUlzRXF1YWxEZWVwKG9iamVjdCxvdGhlcixiaXRtYXNrLGN1c3RvbWl6ZXIsZXF1YWxGdW5jLHN0YWNrKXt2YXIgb2JqSXNBcnI9aXNBcnJheShvYmplY3QpLG90aElzQXJyPWlzQXJyYXkob3RoZXIpLG9ialRhZz1vYmpJc0Fycj9hcnJheVRhZzpnZXRUYWcob2JqZWN0KSxvdGhUYWc9b3RoSXNBcnI/YXJyYXlUYWc6Z2V0VGFnKG90aGVyKTtvYmpUYWc9b2JqVGFnPT1hcmdzVGFnP29iamVjdFRhZzpvYmpUYWc7b3RoVGFnPW90aFRhZz09YXJnc1RhZz9vYmplY3RUYWc6b3RoVGFnO3ZhciBvYmpJc09iaj1vYmpUYWc9PW9iamVjdFRhZyxvdGhJc09iaj1vdGhUYWc9PW9iamVjdFRhZyxpc1NhbWVUYWc9b2JqVGFnPT1vdGhUYWc7aWYoaXNTYW1lVGFnJiZpc0J1ZmZlcihvYmplY3QpKXtpZighaXNCdWZmZXIob3RoZXIpKXtyZXR1cm4gZmFsc2U7fW9iaklzQXJyPXRydWU7b2JqSXNPYmo9ZmFsc2U7fWlmKGlzU2FtZVRhZyYmIW9iaklzT2JqKXtzdGFja3x8KHN0YWNrPW5ldyBTdGFjaygpKTtyZXR1cm4gb2JqSXNBcnJ8fGlzVHlwZWRBcnJheShvYmplY3QpP2VxdWFsQXJyYXlzKG9iamVjdCxvdGhlcixiaXRtYXNrLGN1c3RvbWl6ZXIsZXF1YWxGdW5jLHN0YWNrKTplcXVhbEJ5VGFnKG9iamVjdCxvdGhlcixvYmpUYWcsYml0bWFzayxjdXN0b21pemVyLGVxdWFsRnVuYyxzdGFjayk7fWlmKCEoYml0bWFzayZDT01QQVJFX1BBUlRJQUxfRkxBRykpe3ZhciBvYmpJc1dyYXBwZWQ9b2JqSXNPYmomJmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCdfX3dyYXBwZWRfXycpLG90aElzV3JhcHBlZD1vdGhJc09iaiYmaGFzT3duUHJvcGVydHkuY2FsbChvdGhlciwnX193cmFwcGVkX18nKTtpZihvYmpJc1dyYXBwZWR8fG90aElzV3JhcHBlZCl7dmFyIG9ialVud3JhcHBlZD1vYmpJc1dyYXBwZWQ/b2JqZWN0LnZhbHVlKCk6b2JqZWN0LG90aFVud3JhcHBlZD1vdGhJc1dyYXBwZWQ/b3RoZXIudmFsdWUoKTpvdGhlcjtzdGFja3x8KHN0YWNrPW5ldyBTdGFjaygpKTtyZXR1cm4gZXF1YWxGdW5jKG9ialVud3JhcHBlZCxvdGhVbndyYXBwZWQsYml0bWFzayxjdXN0b21pemVyLHN0YWNrKTt9fWlmKCFpc1NhbWVUYWcpe3JldHVybiBmYWxzZTt9c3RhY2t8fChzdGFjaz1uZXcgU3RhY2soKSk7cmV0dXJuIGVxdWFsT2JqZWN0cyhvYmplY3Qsb3RoZXIsYml0bWFzayxjdXN0b21pemVyLGVxdWFsRnVuYyxzdGFjayk7fS8qKlxuICAgICAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc01hcGAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIG1hcCwgZWxzZSBgZmFsc2VgLlxuICAgICAgICAgKi9mdW5jdGlvbiBiYXNlSXNNYXAodmFsdWUpe3JldHVybiBpc09iamVjdExpa2UodmFsdWUpJiZnZXRUYWcodmFsdWUpPT1tYXBUYWc7fS8qKlxuICAgICAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc01hdGNoYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpbnNwZWN0LlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3Qgb2YgcHJvcGVydHkgdmFsdWVzIHRvIG1hdGNoLlxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBtYXRjaERhdGEgVGhlIHByb3BlcnR5IG5hbWVzLCB2YWx1ZXMsIGFuZCBjb21wYXJlIGZsYWdzIHRvIG1hdGNoLlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAgICAgICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBvYmplY3RgIGlzIGEgbWF0Y2gsIGVsc2UgYGZhbHNlYC5cbiAgICAgICAgICovZnVuY3Rpb24gYmFzZUlzTWF0Y2gob2JqZWN0LHNvdXJjZSxtYXRjaERhdGEsY3VzdG9taXplcil7dmFyIGluZGV4PW1hdGNoRGF0YS5sZW5ndGgsbGVuZ3RoPWluZGV4LG5vQ3VzdG9taXplcj0hY3VzdG9taXplcjtpZihvYmplY3Q9PW51bGwpe3JldHVybiFsZW5ndGg7fW9iamVjdD1PYmplY3Qob2JqZWN0KTt3aGlsZShpbmRleC0tKXt2YXIgZGF0YT1tYXRjaERhdGFbaW5kZXhdO2lmKG5vQ3VzdG9taXplciYmZGF0YVsyXT9kYXRhWzFdIT09b2JqZWN0W2RhdGFbMF1dOiEoZGF0YVswXWluIG9iamVjdCkpe3JldHVybiBmYWxzZTt9fXdoaWxlKCsraW5kZXg8bGVuZ3RoKXtkYXRhPW1hdGNoRGF0YVtpbmRleF07dmFyIGtleT1kYXRhWzBdLG9ialZhbHVlPW9iamVjdFtrZXldLHNyY1ZhbHVlPWRhdGFbMV07aWYobm9DdXN0b21pemVyJiZkYXRhWzJdKXtpZihvYmpWYWx1ZT09PXVuZGVmaW5lZCYmIShrZXkgaW4gb2JqZWN0KSl7cmV0dXJuIGZhbHNlO319ZWxzZXt2YXIgc3RhY2s9bmV3IFN0YWNrKCk7aWYoY3VzdG9taXplcil7dmFyIHJlc3VsdD1jdXN0b21pemVyKG9ialZhbHVlLHNyY1ZhbHVlLGtleSxvYmplY3Qsc291cmNlLHN0YWNrKTt9aWYoIShyZXN1bHQ9PT11bmRlZmluZWQ/YmFzZUlzRXF1YWwoc3JjVmFsdWUsb2JqVmFsdWUsQ09NUEFSRV9QQVJUSUFMX0ZMQUd8Q09NUEFSRV9VTk9SREVSRURfRkxBRyxjdXN0b21pemVyLHN0YWNrKTpyZXN1bHQpKXtyZXR1cm4gZmFsc2U7fX19cmV0dXJuIHRydWU7fS8qKlxuICAgICAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc05hdGl2ZWAgd2l0aG91dCBiYWQgc2hpbSBjaGVja3MuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIG5hdGl2ZSBmdW5jdGlvbixcbiAgICAgICAgICogIGVsc2UgYGZhbHNlYC5cbiAgICAgICAgICovZnVuY3Rpb24gYmFzZUlzTmF0aXZlKHZhbHVlKXtpZighaXNPYmplY3QodmFsdWUpfHxpc01hc2tlZCh2YWx1ZSkpe3JldHVybiBmYWxzZTt9dmFyIHBhdHRlcm49aXNGdW5jdGlvbih2YWx1ZSk/cmVJc05hdGl2ZTpyZUlzSG9zdEN0b3I7cmV0dXJuIHBhdHRlcm4udGVzdCh0b1NvdXJjZSh2YWx1ZSkpO30vKipcbiAgICAgICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNSZWdFeHBgIHdpdGhvdXQgTm9kZS5qcyBvcHRpbWl6YXRpb25zLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSByZWdleHAsIGVsc2UgYGZhbHNlYC5cbiAgICAgICAgICovZnVuY3Rpb24gYmFzZUlzUmVnRXhwKHZhbHVlKXtyZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSYmYmFzZUdldFRhZyh2YWx1ZSk9PXJlZ2V4cFRhZzt9LyoqXG4gICAgICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzU2V0YCB3aXRob3V0IE5vZGUuanMgb3B0aW1pemF0aW9ucy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc2V0LCBlbHNlIGBmYWxzZWAuXG4gICAgICAgICAqL2Z1bmN0aW9uIGJhc2VJc1NldCh2YWx1ZSl7cmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkmJmdldFRhZyh2YWx1ZSk9PXNldFRhZzt9LyoqXG4gICAgICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzVHlwZWRBcnJheWAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHR5cGVkIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gICAgICAgICAqL2Z1bmN0aW9uIGJhc2VJc1R5cGVkQXJyYXkodmFsdWUpe3JldHVybiBpc09iamVjdExpa2UodmFsdWUpJiZpc0xlbmd0aCh2YWx1ZS5sZW5ndGgpJiYhIXR5cGVkQXJyYXlUYWdzW2Jhc2VHZXRUYWcodmFsdWUpXTt9LyoqXG4gICAgICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLml0ZXJhdGVlYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQHBhcmFtIHsqfSBbdmFsdWU9Xy5pZGVudGl0eV0gVGhlIHZhbHVlIHRvIGNvbnZlcnQgdG8gYW4gaXRlcmF0ZWUuXG4gICAgICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgaXRlcmF0ZWUuXG4gICAgICAgICAqL2Z1bmN0aW9uIGJhc2VJdGVyYXRlZSh2YWx1ZSl7Ly8gRG9uJ3Qgc3RvcmUgdGhlIGB0eXBlb2ZgIHJlc3VsdCBpbiBhIHZhcmlhYmxlIHRvIGF2b2lkIGEgSklUIGJ1ZyBpbiBTYWZhcmkgOS5cbi8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2MDM0IGZvciBtb3JlIGRldGFpbHMuXG5pZih0eXBlb2YgdmFsdWU9PT0nZnVuY3Rpb24nKXtyZXR1cm4gdmFsdWU7fWlmKHZhbHVlPT1udWxsKXtyZXR1cm4gaWRlbnRpdHk7fWlmKCh0eXBlb2YgdmFsdWU9PT0ndW5kZWZpbmVkJz8ndW5kZWZpbmVkJzpfdHlwZW9mKHZhbHVlKSk9PT0nb2JqZWN0Jyl7cmV0dXJuIGlzQXJyYXkodmFsdWUpP2Jhc2VNYXRjaGVzUHJvcGVydHkodmFsdWVbMF0sdmFsdWVbMV0pOmJhc2VNYXRjaGVzKHZhbHVlKTt9cmV0dXJuIHByb3BlcnR5KHZhbHVlKTt9LyoqXG4gICAgICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmtleXNgIHdoaWNoIGRvZXNuJ3QgdHJlYXQgc3BhcnNlIGFycmF5cyBhcyBkZW5zZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICAgICAgICAgKi9mdW5jdGlvbiBiYXNlS2V5cyhvYmplY3Qpe2lmKCFpc1Byb3RvdHlwZShvYmplY3QpKXtyZXR1cm4gbmF0aXZlS2V5cyhvYmplY3QpO312YXIgcmVzdWx0PVtdO2Zvcih2YXIga2V5IGluIE9iamVjdChvYmplY3QpKXtpZihoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCxrZXkpJiZrZXkhPSdjb25zdHJ1Y3Rvcicpe3Jlc3VsdC5wdXNoKGtleSk7fX1yZXR1cm4gcmVzdWx0O30vKipcbiAgICAgICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ua2V5c0luYCB3aGljaCBkb2Vzbid0IHRyZWF0IHNwYXJzZSBhcnJheXMgYXMgZGVuc2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAgICAgICAgICovZnVuY3Rpb24gYmFzZUtleXNJbihvYmplY3Qpe2lmKCFpc09iamVjdChvYmplY3QpKXtyZXR1cm4gbmF0aXZlS2V5c0luKG9iamVjdCk7fXZhciBpc1Byb3RvPWlzUHJvdG90eXBlKG9iamVjdCkscmVzdWx0PVtdO2Zvcih2YXIga2V5IGluIG9iamVjdCl7aWYoIShrZXk9PSdjb25zdHJ1Y3RvcicmJihpc1Byb3RvfHwhaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3Qsa2V5KSkpKXtyZXN1bHQucHVzaChrZXkpO319cmV0dXJuIHJlc3VsdDt9LyoqXG4gICAgICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmx0YCB3aGljaCBkb2Vzbid0IGNvZXJjZSBhcmd1bWVudHMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gICAgICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGxlc3MgdGhhbiBgb3RoZXJgLFxuICAgICAgICAgKiAgZWxzZSBgZmFsc2VgLlxuICAgICAgICAgKi9mdW5jdGlvbiBiYXNlTHQodmFsdWUsb3RoZXIpe3JldHVybiB2YWx1ZTxvdGhlcjt9LyoqXG4gICAgICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLm1hcGAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IG1hcHBlZCBhcnJheS5cbiAgICAgICAgICovZnVuY3Rpb24gYmFzZU1hcChjb2xsZWN0aW9uLGl0ZXJhdGVlKXt2YXIgaW5kZXg9LTEscmVzdWx0PWlzQXJyYXlMaWtlKGNvbGxlY3Rpb24pP0FycmF5KGNvbGxlY3Rpb24ubGVuZ3RoKTpbXTtiYXNlRWFjaChjb2xsZWN0aW9uLGZ1bmN0aW9uKHZhbHVlLGtleSxjb2xsZWN0aW9uKXtyZXN1bHRbKytpbmRleF09aXRlcmF0ZWUodmFsdWUsa2V5LGNvbGxlY3Rpb24pO30pO3JldHVybiByZXN1bHQ7fS8qKlxuICAgICAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5tYXRjaGVzYCB3aGljaCBkb2Vzbid0IGNsb25lIGBzb3VyY2VgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3Qgb2YgcHJvcGVydHkgdmFsdWVzIHRvIG1hdGNoLlxuICAgICAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzcGVjIGZ1bmN0aW9uLlxuICAgICAgICAgKi9mdW5jdGlvbiBiYXNlTWF0Y2hlcyhzb3VyY2Upe3ZhciBtYXRjaERhdGE9Z2V0TWF0Y2hEYXRhKHNvdXJjZSk7aWYobWF0Y2hEYXRhLmxlbmd0aD09MSYmbWF0Y2hEYXRhWzBdWzJdKXtyZXR1cm4gbWF0Y2hlc1N0cmljdENvbXBhcmFibGUobWF0Y2hEYXRhWzBdWzBdLG1hdGNoRGF0YVswXVsxXSk7fXJldHVybiBmdW5jdGlvbihvYmplY3Qpe3JldHVybiBvYmplY3Q9PT1zb3VyY2V8fGJhc2VJc01hdGNoKG9iamVjdCxzb3VyY2UsbWF0Y2hEYXRhKTt9O30vKipcbiAgICAgICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ubWF0Y2hlc1Byb3BlcnR5YCB3aGljaCBkb2Vzbid0IGNsb25lIGBzcmNWYWx1ZWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gc3JjVmFsdWUgVGhlIHZhbHVlIHRvIG1hdGNoLlxuICAgICAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzcGVjIGZ1bmN0aW9uLlxuICAgICAgICAgKi9mdW5jdGlvbiBiYXNlTWF0Y2hlc1Byb3BlcnR5KHBhdGgsc3JjVmFsdWUpe2lmKGlzS2V5KHBhdGgpJiZpc1N0cmljdENvbXBhcmFibGUoc3JjVmFsdWUpKXtyZXR1cm4gbWF0Y2hlc1N0cmljdENvbXBhcmFibGUodG9LZXkocGF0aCksc3JjVmFsdWUpO31yZXR1cm4gZnVuY3Rpb24ob2JqZWN0KXt2YXIgb2JqVmFsdWU9Z2V0KG9iamVjdCxwYXRoKTtyZXR1cm4gb2JqVmFsdWU9PT11bmRlZmluZWQmJm9ialZhbHVlPT09c3JjVmFsdWU/aGFzSW4ob2JqZWN0LHBhdGgpOmJhc2VJc0VxdWFsKHNyY1ZhbHVlLG9ialZhbHVlLENPTVBBUkVfUEFSVElBTF9GTEFHfENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcpO307fS8qKlxuICAgICAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5tZXJnZWAgd2l0aG91dCBzdXBwb3J0IGZvciBtdWx0aXBsZSBzb3VyY2VzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIHNvdXJjZSBvYmplY3QuXG4gICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzcmNJbmRleCBUaGUgaW5kZXggb2YgYHNvdXJjZWAuXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIG1lcmdlZCB2YWx1ZXMuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgc291cmNlIHZhbHVlcyBhbmQgdGhlaXIgbWVyZ2VkXG4gICAgICAgICAqICBjb3VudGVycGFydHMuXG4gICAgICAgICAqL2Z1bmN0aW9uIGJhc2VNZXJnZShvYmplY3Qsc291cmNlLHNyY0luZGV4LGN1c3RvbWl6ZXIsc3RhY2spe2lmKG9iamVjdD09PXNvdXJjZSl7cmV0dXJuO31iYXNlRm9yKHNvdXJjZSxmdW5jdGlvbihzcmNWYWx1ZSxrZXkpe2lmKGlzT2JqZWN0KHNyY1ZhbHVlKSl7c3RhY2t8fChzdGFjaz1uZXcgU3RhY2soKSk7YmFzZU1lcmdlRGVlcChvYmplY3Qsc291cmNlLGtleSxzcmNJbmRleCxiYXNlTWVyZ2UsY3VzdG9taXplcixzdGFjayk7fWVsc2V7dmFyIG5ld1ZhbHVlPWN1c3RvbWl6ZXI/Y3VzdG9taXplcihzYWZlR2V0KG9iamVjdCxrZXkpLHNyY1ZhbHVlLGtleSsnJyxvYmplY3Qsc291cmNlLHN0YWNrKTp1bmRlZmluZWQ7aWYobmV3VmFsdWU9PT11bmRlZmluZWQpe25ld1ZhbHVlPXNyY1ZhbHVlO31hc3NpZ25NZXJnZVZhbHVlKG9iamVjdCxrZXksbmV3VmFsdWUpO319LGtleXNJbik7fS8qKlxuICAgICAgICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VNZXJnZWAgZm9yIGFycmF5cyBhbmQgb2JqZWN0cyB3aGljaCBwZXJmb3Jtc1xuICAgICAgICAgKiBkZWVwIG1lcmdlcyBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzIGVuYWJsaW5nIG9iamVjdHMgd2l0aCBjaXJjdWxhclxuICAgICAgICAgKiByZWZlcmVuY2VzIHRvIGJlIG1lcmdlZC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBzb3VyY2Ugb2JqZWN0LlxuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIG1lcmdlLlxuICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gc3JjSW5kZXggVGhlIGluZGV4IG9mIGBzb3VyY2VgLlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBtZXJnZUZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1lcmdlIHZhbHVlcy5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgYXNzaWduZWQgdmFsdWVzLlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gW3N0YWNrXSBUcmFja3MgdHJhdmVyc2VkIHNvdXJjZSB2YWx1ZXMgYW5kIHRoZWlyIG1lcmdlZFxuICAgICAgICAgKiAgY291bnRlcnBhcnRzLlxuICAgICAgICAgKi9mdW5jdGlvbiBiYXNlTWVyZ2VEZWVwKG9iamVjdCxzb3VyY2Usa2V5LHNyY0luZGV4LG1lcmdlRnVuYyxjdXN0b21pemVyLHN0YWNrKXt2YXIgb2JqVmFsdWU9c2FmZUdldChvYmplY3Qsa2V5KSxzcmNWYWx1ZT1zYWZlR2V0KHNvdXJjZSxrZXkpLHN0YWNrZWQ9c3RhY2suZ2V0KHNyY1ZhbHVlKTtpZihzdGFja2VkKXthc3NpZ25NZXJnZVZhbHVlKG9iamVjdCxrZXksc3RhY2tlZCk7cmV0dXJuO312YXIgbmV3VmFsdWU9Y3VzdG9taXplcj9jdXN0b21pemVyKG9ialZhbHVlLHNyY1ZhbHVlLGtleSsnJyxvYmplY3Qsc291cmNlLHN0YWNrKTp1bmRlZmluZWQ7dmFyIGlzQ29tbW9uPW5ld1ZhbHVlPT09dW5kZWZpbmVkO2lmKGlzQ29tbW9uKXt2YXIgaXNBcnI9aXNBcnJheShzcmNWYWx1ZSksaXNCdWZmPSFpc0FyciYmaXNCdWZmZXIoc3JjVmFsdWUpLGlzVHlwZWQ9IWlzQXJyJiYhaXNCdWZmJiZpc1R5cGVkQXJyYXkoc3JjVmFsdWUpO25ld1ZhbHVlPXNyY1ZhbHVlO2lmKGlzQXJyfHxpc0J1ZmZ8fGlzVHlwZWQpe2lmKGlzQXJyYXkob2JqVmFsdWUpKXtuZXdWYWx1ZT1vYmpWYWx1ZTt9ZWxzZSBpZihpc0FycmF5TGlrZU9iamVjdChvYmpWYWx1ZSkpe25ld1ZhbHVlPWNvcHlBcnJheShvYmpWYWx1ZSk7fWVsc2UgaWYoaXNCdWZmKXtpc0NvbW1vbj1mYWxzZTtuZXdWYWx1ZT1jbG9uZUJ1ZmZlcihzcmNWYWx1ZSx0cnVlKTt9ZWxzZSBpZihpc1R5cGVkKXtpc0NvbW1vbj1mYWxzZTtuZXdWYWx1ZT1jbG9uZVR5cGVkQXJyYXkoc3JjVmFsdWUsdHJ1ZSk7fWVsc2V7bmV3VmFsdWU9W107fX1lbHNlIGlmKGlzUGxhaW5PYmplY3Qoc3JjVmFsdWUpfHxpc0FyZ3VtZW50cyhzcmNWYWx1ZSkpe25ld1ZhbHVlPW9ialZhbHVlO2lmKGlzQXJndW1lbnRzKG9ialZhbHVlKSl7bmV3VmFsdWU9dG9QbGFpbk9iamVjdChvYmpWYWx1ZSk7fWVsc2UgaWYoIWlzT2JqZWN0KG9ialZhbHVlKXx8c3JjSW5kZXgmJmlzRnVuY3Rpb24ob2JqVmFsdWUpKXtuZXdWYWx1ZT1pbml0Q2xvbmVPYmplY3Qoc3JjVmFsdWUpO319ZWxzZXtpc0NvbW1vbj1mYWxzZTt9fWlmKGlzQ29tbW9uKXsvLyBSZWN1cnNpdmVseSBtZXJnZSBvYmplY3RzIGFuZCBhcnJheXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbnN0YWNrLnNldChzcmNWYWx1ZSxuZXdWYWx1ZSk7bWVyZ2VGdW5jKG5ld1ZhbHVlLHNyY1ZhbHVlLHNyY0luZGV4LGN1c3RvbWl6ZXIsc3RhY2spO3N0YWNrWydkZWxldGUnXShzcmNWYWx1ZSk7fWFzc2lnbk1lcmdlVmFsdWUob2JqZWN0LGtleSxuZXdWYWx1ZSk7fS8qKlxuICAgICAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5udGhgIHdoaWNoIGRvZXNuJ3QgY29lcmNlIGFyZ3VtZW50cy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgaW5kZXggb2YgdGhlIGVsZW1lbnQgdG8gcmV0dXJuLlxuICAgICAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbnRoIGVsZW1lbnQgb2YgYGFycmF5YC5cbiAgICAgICAgICovZnVuY3Rpb24gYmFzZU50aChhcnJheSxuKXt2YXIgbGVuZ3RoPWFycmF5Lmxlbmd0aDtpZighbGVuZ3RoKXtyZXR1cm47fW4rPW48MD9sZW5ndGg6MDtyZXR1cm4gaXNJbmRleChuLGxlbmd0aCk/YXJyYXlbbl06dW5kZWZpbmVkO30vKipcbiAgICAgICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ub3JkZXJCeWAgd2l0aG91dCBwYXJhbSBndWFyZHMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbltdfE9iamVjdFtdfHN0cmluZ1tdfSBpdGVyYXRlZXMgVGhlIGl0ZXJhdGVlcyB0byBzb3J0IGJ5LlxuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBvcmRlcnMgVGhlIHNvcnQgb3JkZXJzIG9mIGBpdGVyYXRlZXNgLlxuICAgICAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBzb3J0ZWQgYXJyYXkuXG4gICAgICAgICAqL2Z1bmN0aW9uIGJhc2VPcmRlckJ5KGNvbGxlY3Rpb24saXRlcmF0ZWVzLG9yZGVycyl7dmFyIGluZGV4PS0xO2l0ZXJhdGVlcz1hcnJheU1hcChpdGVyYXRlZXMubGVuZ3RoP2l0ZXJhdGVlczpbaWRlbnRpdHldLGJhc2VVbmFyeShnZXRJdGVyYXRlZSgpKSk7dmFyIHJlc3VsdD1iYXNlTWFwKGNvbGxlY3Rpb24sZnVuY3Rpb24odmFsdWUsa2V5LGNvbGxlY3Rpb24pe3ZhciBjcml0ZXJpYT1hcnJheU1hcChpdGVyYXRlZXMsZnVuY3Rpb24oaXRlcmF0ZWUpe3JldHVybiBpdGVyYXRlZSh2YWx1ZSk7fSk7cmV0dXJue2NyaXRlcmlhOmNyaXRlcmlhLGluZGV4OisraW5kZXgsdmFsdWU6dmFsdWV9O30pO3JldHVybiBiYXNlU29ydEJ5KHJlc3VsdCxmdW5jdGlvbihvYmplY3Qsb3RoZXIpe3JldHVybiBjb21wYXJlTXVsdGlwbGUob2JqZWN0LG90aGVyLG9yZGVycyk7fSk7fS8qKlxuICAgICAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5waWNrYCB3aXRob3V0IHN1cHBvcnQgZm9yIGluZGl2aWR1YWxcbiAgICAgICAgICogcHJvcGVydHkgaWRlbnRpZmllcnMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIHNvdXJjZSBvYmplY3QuXG4gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IHBhdGhzIFRoZSBwcm9wZXJ0eSBwYXRocyB0byBwaWNrLlxuICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICAgICAgICAgKi9mdW5jdGlvbiBiYXNlUGljayhvYmplY3QscGF0aHMpe3JldHVybiBiYXNlUGlja0J5KG9iamVjdCxwYXRocyxmdW5jdGlvbih2YWx1ZSxwYXRoKXtyZXR1cm4gaGFzSW4ob2JqZWN0LHBhdGgpO30pO30vKipcbiAgICAgICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgIGBfLnBpY2tCeWAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBzb3VyY2Ugb2JqZWN0LlxuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBwYXRocyBUaGUgcHJvcGVydHkgcGF0aHMgdG8gcGljay5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBwcm9wZXJ0eS5cbiAgICAgICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAgICAgICAgICovZnVuY3Rpb24gYmFzZVBpY2tCeShvYmplY3QscGF0aHMscHJlZGljYXRlKXt2YXIgaW5kZXg9LTEsbGVuZ3RoPXBhdGhzLmxlbmd0aCxyZXN1bHQ9e307d2hpbGUoKytpbmRleDxsZW5ndGgpe3ZhciBwYXRoPXBhdGhzW2luZGV4XSx2YWx1ZT1iYXNlR2V0KG9iamVjdCxwYXRoKTtpZihwcmVkaWNhdGUodmFsdWUscGF0aCkpe2Jhc2VTZXQocmVzdWx0LGNhc3RQYXRoKHBhdGgsb2JqZWN0KSx2YWx1ZSk7fX1yZXR1cm4gcmVzdWx0O30vKipcbiAgICAgICAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlUHJvcGVydHlgIHdoaWNoIHN1cHBvcnRzIGRlZXAgcGF0aHMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gICAgICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFjY2Vzc29yIGZ1bmN0aW9uLlxuICAgICAgICAgKi9mdW5jdGlvbiBiYXNlUHJvcGVydHlEZWVwKHBhdGgpe3JldHVybiBmdW5jdGlvbihvYmplY3Qpe3JldHVybiBiYXNlR2V0KG9iamVjdCxwYXRoKTt9O30vKipcbiAgICAgICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ucHVsbEFsbEJ5YCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlXG4gICAgICAgICAqIHNob3J0aGFuZHMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBtb2RpZnkuXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgdmFsdWVzIHRvIHJlbW92ZS5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlXSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NvbXBhcmF0b3JdIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICAgICAgICAgKi9mdW5jdGlvbiBiYXNlUHVsbEFsbChhcnJheSx2YWx1ZXMsaXRlcmF0ZWUsY29tcGFyYXRvcil7dmFyIGluZGV4T2Y9Y29tcGFyYXRvcj9iYXNlSW5kZXhPZldpdGg6YmFzZUluZGV4T2YsaW5kZXg9LTEsbGVuZ3RoPXZhbHVlcy5sZW5ndGgsc2Vlbj1hcnJheTtpZihhcnJheT09PXZhbHVlcyl7dmFsdWVzPWNvcHlBcnJheSh2YWx1ZXMpO31pZihpdGVyYXRlZSl7c2Vlbj1hcnJheU1hcChhcnJheSxiYXNlVW5hcnkoaXRlcmF0ZWUpKTt9d2hpbGUoKytpbmRleDxsZW5ndGgpe3ZhciBmcm9tSW5kZXg9MCx2YWx1ZT12YWx1ZXNbaW5kZXhdLGNvbXB1dGVkPWl0ZXJhdGVlP2l0ZXJhdGVlKHZhbHVlKTp2YWx1ZTt3aGlsZSgoZnJvbUluZGV4PWluZGV4T2Yoc2Vlbixjb21wdXRlZCxmcm9tSW5kZXgsY29tcGFyYXRvcikpPi0xKXtpZihzZWVuIT09YXJyYXkpe3NwbGljZS5jYWxsKHNlZW4sZnJvbUluZGV4LDEpO31zcGxpY2UuY2FsbChhcnJheSxmcm9tSW5kZXgsMSk7fX1yZXR1cm4gYXJyYXk7fS8qKlxuICAgICAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5wdWxsQXRgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaW5kaXZpZHVhbFxuICAgICAgICAgKiBpbmRleGVzIG9yIGNhcHR1cmluZyB0aGUgcmVtb3ZlZCBlbGVtZW50cy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIG1vZGlmeS5cbiAgICAgICAgICogQHBhcmFtIHtudW1iZXJbXX0gaW5kZXhlcyBUaGUgaW5kZXhlcyBvZiBlbGVtZW50cyB0byByZW1vdmUuXG4gICAgICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICAgICAgICAgKi9mdW5jdGlvbiBiYXNlUHVsbEF0KGFycmF5LGluZGV4ZXMpe3ZhciBsZW5ndGg9YXJyYXk/aW5kZXhlcy5sZW5ndGg6MCxsYXN0SW5kZXg9bGVuZ3RoLTE7d2hpbGUobGVuZ3RoLS0pe3ZhciBpbmRleD1pbmRleGVzW2xlbmd0aF07aWYobGVuZ3RoPT1sYXN0SW5kZXh8fGluZGV4IT09cHJldmlvdXMpe3ZhciBwcmV2aW91cz1pbmRleDtpZihpc0luZGV4KGluZGV4KSl7c3BsaWNlLmNhbGwoYXJyYXksaW5kZXgsMSk7fWVsc2V7YmFzZVVuc2V0KGFycmF5LGluZGV4KTt9fX1yZXR1cm4gYXJyYXk7fS8qKlxuICAgICAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5yYW5kb21gIHdpdGhvdXQgc3VwcG9ydCBmb3IgcmV0dXJuaW5nXG4gICAgICAgICAqIGZsb2F0aW5nLXBvaW50IG51bWJlcnMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsb3dlciBUaGUgbG93ZXIgYm91bmQuXG4gICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSB1cHBlciBUaGUgdXBwZXIgYm91bmQuXG4gICAgICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHJhbmRvbSBudW1iZXIuXG4gICAgICAgICAqL2Z1bmN0aW9uIGJhc2VSYW5kb20obG93ZXIsdXBwZXIpe3JldHVybiBsb3dlcituYXRpdmVGbG9vcihuYXRpdmVSYW5kb20oKSoodXBwZXItbG93ZXIrMSkpO30vKipcbiAgICAgICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ucmFuZ2VgIGFuZCBgXy5yYW5nZVJpZ2h0YCB3aGljaCBkb2Vzbid0XG4gICAgICAgICAqIGNvZXJjZSBhcmd1bWVudHMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydCBUaGUgc3RhcnQgb2YgdGhlIHJhbmdlLlxuICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gZW5kIFRoZSBlbmQgb2YgdGhlIHJhbmdlLlxuICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gc3RlcCBUaGUgdmFsdWUgdG8gaW5jcmVtZW50IG9yIGRlY3JlbWVudCBieS5cbiAgICAgICAgICogQHBhcmFtIHtib29sZWFufSBbZnJvbVJpZ2h0XSBTcGVjaWZ5IGl0ZXJhdGluZyBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gICAgICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgcmFuZ2Ugb2YgbnVtYmVycy5cbiAgICAgICAgICovZnVuY3Rpb24gYmFzZVJhbmdlKHN0YXJ0LGVuZCxzdGVwLGZyb21SaWdodCl7dmFyIGluZGV4PS0xLGxlbmd0aD1uYXRpdmVNYXgobmF0aXZlQ2VpbCgoZW5kLXN0YXJ0KS8oc3RlcHx8MSkpLDApLHJlc3VsdD1BcnJheShsZW5ndGgpO3doaWxlKGxlbmd0aC0tKXtyZXN1bHRbZnJvbVJpZ2h0P2xlbmd0aDorK2luZGV4XT1zdGFydDtzdGFydCs9c3RlcDt9cmV0dXJuIHJlc3VsdDt9LyoqXG4gICAgICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnJlcGVhdGAgd2hpY2ggZG9lc24ndCBjb2VyY2UgYXJndW1lbnRzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gcmVwZWF0LlxuICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVyIG9mIHRpbWVzIHRvIHJlcGVhdCB0aGUgc3RyaW5nLlxuICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSByZXBlYXRlZCBzdHJpbmcuXG4gICAgICAgICAqL2Z1bmN0aW9uIGJhc2VSZXBlYXQoc3RyaW5nLG4pe3ZhciByZXN1bHQ9Jyc7aWYoIXN0cmluZ3x8bjwxfHxuPk1BWF9TQUZFX0lOVEVHRVIpe3JldHVybiByZXN1bHQ7fS8vIExldmVyYWdlIHRoZSBleHBvbmVudGlhdGlvbiBieSBzcXVhcmluZyBhbGdvcml0aG0gZm9yIGEgZmFzdGVyIHJlcGVhdC5cbi8vIFNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9FeHBvbmVudGlhdGlvbl9ieV9zcXVhcmluZyBmb3IgbW9yZSBkZXRhaWxzLlxuZG97aWYobiUyKXtyZXN1bHQrPXN0cmluZzt9bj1uYXRpdmVGbG9vcihuLzIpO2lmKG4pe3N0cmluZys9c3RyaW5nO319d2hpbGUobik7cmV0dXJuIHJlc3VsdDt9LyoqXG4gICAgICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnJlc3RgIHdoaWNoIGRvZXNuJ3QgdmFsaWRhdGUgb3IgY29lcmNlIGFyZ3VtZW50cy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cbiAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD1mdW5jLmxlbmd0aC0xXSBUaGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIHJlc3QgcGFyYW1ldGVyLlxuICAgICAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgICAgICovZnVuY3Rpb24gYmFzZVJlc3QoZnVuYyxzdGFydCl7cmV0dXJuIHNldFRvU3RyaW5nKG92ZXJSZXN0KGZ1bmMsc3RhcnQsaWRlbnRpdHkpLGZ1bmMrJycpO30vKipcbiAgICAgICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uc2FtcGxlYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gc2FtcGxlLlxuICAgICAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmFuZG9tIGVsZW1lbnQuXG4gICAgICAgICAqL2Z1bmN0aW9uIGJhc2VTYW1wbGUoY29sbGVjdGlvbil7cmV0dXJuIGFycmF5U2FtcGxlKHZhbHVlcyhjb2xsZWN0aW9uKSk7fS8qKlxuICAgICAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5zYW1wbGVTaXplYCB3aXRob3V0IHBhcmFtIGd1YXJkcy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gc2FtcGxlLlxuICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRvIHNhbXBsZS5cbiAgICAgICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSByYW5kb20gZWxlbWVudHMuXG4gICAgICAgICAqL2Z1bmN0aW9uIGJhc2VTYW1wbGVTaXplKGNvbGxlY3Rpb24sbil7dmFyIGFycmF5PXZhbHVlcyhjb2xsZWN0aW9uKTtyZXR1cm4gc2h1ZmZsZVNlbGYoYXJyYXksYmFzZUNsYW1wKG4sMCxhcnJheS5sZW5ndGgpKTt9LyoqXG4gICAgICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnNldGAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBzZXQuXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgcGF0aCBjcmVhdGlvbi5cbiAgICAgICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgICAgICovZnVuY3Rpb24gYmFzZVNldChvYmplY3QscGF0aCx2YWx1ZSxjdXN0b21pemVyKXtpZighaXNPYmplY3Qob2JqZWN0KSl7cmV0dXJuIG9iamVjdDt9cGF0aD1jYXN0UGF0aChwYXRoLG9iamVjdCk7dmFyIGluZGV4PS0xLGxlbmd0aD1wYXRoLmxlbmd0aCxsYXN0SW5kZXg9bGVuZ3RoLTEsbmVzdGVkPW9iamVjdDt3aGlsZShuZXN0ZWQhPW51bGwmJisraW5kZXg8bGVuZ3RoKXt2YXIga2V5PXRvS2V5KHBhdGhbaW5kZXhdKSxuZXdWYWx1ZT12YWx1ZTtpZihpbmRleCE9bGFzdEluZGV4KXt2YXIgb2JqVmFsdWU9bmVzdGVkW2tleV07bmV3VmFsdWU9Y3VzdG9taXplcj9jdXN0b21pemVyKG9ialZhbHVlLGtleSxuZXN0ZWQpOnVuZGVmaW5lZDtpZihuZXdWYWx1ZT09PXVuZGVmaW5lZCl7bmV3VmFsdWU9aXNPYmplY3Qob2JqVmFsdWUpP29ialZhbHVlOmlzSW5kZXgocGF0aFtpbmRleCsxXSk/W106e307fX1hc3NpZ25WYWx1ZShuZXN0ZWQsa2V5LG5ld1ZhbHVlKTtuZXN0ZWQ9bmVzdGVkW2tleV07fXJldHVybiBvYmplY3Q7fS8qKlxuICAgICAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgc2V0RGF0YWAgd2l0aG91dCBzdXBwb3J0IGZvciBob3QgbG9vcCBzaG9ydGluZy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXNzb2NpYXRlIG1ldGFkYXRhIHdpdGguXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gZGF0YSBUaGUgbWV0YWRhdGEuXG4gICAgICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXG4gICAgICAgICAqL3ZhciBiYXNlU2V0RGF0YT0hbWV0YU1hcD9pZGVudGl0eTpmdW5jdGlvbihmdW5jLGRhdGEpe21ldGFNYXAuc2V0KGZ1bmMsZGF0YSk7cmV0dXJuIGZ1bmM7fTsvKipcbiAgICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBzZXRUb1N0cmluZ2Agd2l0aG91dCBzdXBwb3J0IGZvciBob3QgbG9vcCBzaG9ydGluZy5cbiAgICAgICAqXG4gICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gbW9kaWZ5LlxuICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gc3RyaW5nIFRoZSBgdG9TdHJpbmdgIHJlc3VsdC5cbiAgICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXG4gICAgICAgKi92YXIgYmFzZVNldFRvU3RyaW5nPSFkZWZpbmVQcm9wZXJ0eT9pZGVudGl0eTpmdW5jdGlvbihmdW5jLHN0cmluZyl7cmV0dXJuIGRlZmluZVByb3BlcnR5KGZ1bmMsJ3RvU3RyaW5nJyx7Y29uZmlndXJhYmxlOnRydWUsZW51bWVyYWJsZTpmYWxzZSx2YWx1ZTpjb25zdGFudChzdHJpbmcpLHdyaXRhYmxlOnRydWV9KTt9Oy8qKlxuICAgICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uc2h1ZmZsZWAuXG4gICAgICAgKlxuICAgICAgICogQHByaXZhdGVcbiAgICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIHNodWZmbGUuXG4gICAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBzaHVmZmxlZCBhcnJheS5cbiAgICAgICAqL2Z1bmN0aW9uIGJhc2VTaHVmZmxlKGNvbGxlY3Rpb24pe3JldHVybiBzaHVmZmxlU2VsZih2YWx1ZXMoY29sbGVjdGlvbikpO30vKipcbiAgICAgICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uc2xpY2VgIHdpdGhvdXQgYW4gaXRlcmF0ZWUgY2FsbCBndWFyZC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHNsaWNlLlxuICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PTBdIFRoZSBzdGFydCBwb3NpdGlvbi5cbiAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IFtlbmQ9YXJyYXkubGVuZ3RoXSBUaGUgZW5kIHBvc2l0aW9uLlxuICAgICAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHNsaWNlIG9mIGBhcnJheWAuXG4gICAgICAgICAqL2Z1bmN0aW9uIGJhc2VTbGljZShhcnJheSxzdGFydCxlbmQpe3ZhciBpbmRleD0tMSxsZW5ndGg9YXJyYXkubGVuZ3RoO2lmKHN0YXJ0PDApe3N0YXJ0PS1zdGFydD5sZW5ndGg/MDpsZW5ndGgrc3RhcnQ7fWVuZD1lbmQ+bGVuZ3RoP2xlbmd0aDplbmQ7aWYoZW5kPDApe2VuZCs9bGVuZ3RoO31sZW5ndGg9c3RhcnQ+ZW5kPzA6ZW5kLXN0YXJ0Pj4+MDtzdGFydD4+Pj0wO3ZhciByZXN1bHQ9QXJyYXkobGVuZ3RoKTt3aGlsZSgrK2luZGV4PGxlbmd0aCl7cmVzdWx0W2luZGV4XT1hcnJheVtpbmRleCtzdGFydF07fXJldHVybiByZXN1bHQ7fS8qKlxuICAgICAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5zb21lYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbnkgZWxlbWVudCBwYXNzZXMgdGhlIHByZWRpY2F0ZSBjaGVjayxcbiAgICAgICAgICogIGVsc2UgYGZhbHNlYC5cbiAgICAgICAgICovZnVuY3Rpb24gYmFzZVNvbWUoY29sbGVjdGlvbixwcmVkaWNhdGUpe3ZhciByZXN1bHQ7YmFzZUVhY2goY29sbGVjdGlvbixmdW5jdGlvbih2YWx1ZSxpbmRleCxjb2xsZWN0aW9uKXtyZXN1bHQ9cHJlZGljYXRlKHZhbHVlLGluZGV4LGNvbGxlY3Rpb24pO3JldHVybiFyZXN1bHQ7fSk7cmV0dXJuISFyZXN1bHQ7fS8qKlxuICAgICAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5zb3J0ZWRJbmRleGAgYW5kIGBfLnNvcnRlZExhc3RJbmRleGAgd2hpY2hcbiAgICAgICAgICogcGVyZm9ybXMgYSBiaW5hcnkgc2VhcmNoIG9mIGBhcnJheWAgdG8gZGV0ZXJtaW5lIHRoZSBpbmRleCBhdCB3aGljaCBgdmFsdWVgXG4gICAgICAgICAqIHNob3VsZCBiZSBpbnNlcnRlZCBpbnRvIGBhcnJheWAgaW4gb3JkZXIgdG8gbWFpbnRhaW4gaXRzIHNvcnQgb3JkZXIuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBzb3J0ZWQgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gZXZhbHVhdGUuXG4gICAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3JldEhpZ2hlc3RdIFNwZWNpZnkgcmV0dXJuaW5nIHRoZSBoaWdoZXN0IHF1YWxpZmllZCBpbmRleC5cbiAgICAgICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggYXQgd2hpY2ggYHZhbHVlYCBzaG91bGQgYmUgaW5zZXJ0ZWRcbiAgICAgICAgICogIGludG8gYGFycmF5YC5cbiAgICAgICAgICovZnVuY3Rpb24gYmFzZVNvcnRlZEluZGV4KGFycmF5LHZhbHVlLHJldEhpZ2hlc3Qpe3ZhciBsb3c9MCxoaWdoPWFycmF5PT1udWxsP2xvdzphcnJheS5sZW5ndGg7aWYodHlwZW9mIHZhbHVlPT09J251bWJlcicmJnZhbHVlPT09dmFsdWUmJmhpZ2g8PUhBTEZfTUFYX0FSUkFZX0xFTkdUSCl7d2hpbGUobG93PGhpZ2gpe3ZhciBtaWQ9bG93K2hpZ2g+Pj4xLGNvbXB1dGVkPWFycmF5W21pZF07aWYoY29tcHV0ZWQhPT1udWxsJiYhaXNTeW1ib2woY29tcHV0ZWQpJiYocmV0SGlnaGVzdD9jb21wdXRlZDw9dmFsdWU6Y29tcHV0ZWQ8dmFsdWUpKXtsb3c9bWlkKzE7fWVsc2V7aGlnaD1taWQ7fX1yZXR1cm4gaGlnaDt9cmV0dXJuIGJhc2VTb3J0ZWRJbmRleEJ5KGFycmF5LHZhbHVlLGlkZW50aXR5LHJldEhpZ2hlc3QpO30vKipcbiAgICAgICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uc29ydGVkSW5kZXhCeWAgYW5kIGBfLnNvcnRlZExhc3RJbmRleEJ5YFxuICAgICAgICAgKiB3aGljaCBpbnZva2VzIGBpdGVyYXRlZWAgZm9yIGB2YWx1ZWAgYW5kIGVhY2ggZWxlbWVudCBvZiBgYXJyYXlgIHRvIGNvbXB1dGVcbiAgICAgICAgICogdGhlaXIgc29ydCByYW5raW5nLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDsgKHZhbHVlKS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIHNvcnRlZCBhcnJheSB0byBpbnNwZWN0LlxuICAgICAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBldmFsdWF0ZS5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3JldEhpZ2hlc3RdIFNwZWNpZnkgcmV0dXJuaW5nIHRoZSBoaWdoZXN0IHF1YWxpZmllZCBpbmRleC5cbiAgICAgICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggYXQgd2hpY2ggYHZhbHVlYCBzaG91bGQgYmUgaW5zZXJ0ZWRcbiAgICAgICAgICogIGludG8gYGFycmF5YC5cbiAgICAgICAgICovZnVuY3Rpb24gYmFzZVNvcnRlZEluZGV4QnkoYXJyYXksdmFsdWUsaXRlcmF0ZWUscmV0SGlnaGVzdCl7dmFsdWU9aXRlcmF0ZWUodmFsdWUpO3ZhciBsb3c9MCxoaWdoPWFycmF5PT1udWxsPzA6YXJyYXkubGVuZ3RoLHZhbElzTmFOPXZhbHVlIT09dmFsdWUsdmFsSXNOdWxsPXZhbHVlPT09bnVsbCx2YWxJc1N5bWJvbD1pc1N5bWJvbCh2YWx1ZSksdmFsSXNVbmRlZmluZWQ9dmFsdWU9PT11bmRlZmluZWQ7d2hpbGUobG93PGhpZ2gpe3ZhciBtaWQ9bmF0aXZlRmxvb3IoKGxvdytoaWdoKS8yKSxjb21wdXRlZD1pdGVyYXRlZShhcnJheVttaWRdKSxvdGhJc0RlZmluZWQ9Y29tcHV0ZWQhPT11bmRlZmluZWQsb3RoSXNOdWxsPWNvbXB1dGVkPT09bnVsbCxvdGhJc1JlZmxleGl2ZT1jb21wdXRlZD09PWNvbXB1dGVkLG90aElzU3ltYm9sPWlzU3ltYm9sKGNvbXB1dGVkKTtpZih2YWxJc05hTil7dmFyIHNldExvdz1yZXRIaWdoZXN0fHxvdGhJc1JlZmxleGl2ZTt9ZWxzZSBpZih2YWxJc1VuZGVmaW5lZCl7c2V0TG93PW90aElzUmVmbGV4aXZlJiYocmV0SGlnaGVzdHx8b3RoSXNEZWZpbmVkKTt9ZWxzZSBpZih2YWxJc051bGwpe3NldExvdz1vdGhJc1JlZmxleGl2ZSYmb3RoSXNEZWZpbmVkJiYocmV0SGlnaGVzdHx8IW90aElzTnVsbCk7fWVsc2UgaWYodmFsSXNTeW1ib2wpe3NldExvdz1vdGhJc1JlZmxleGl2ZSYmb3RoSXNEZWZpbmVkJiYhb3RoSXNOdWxsJiYocmV0SGlnaGVzdHx8IW90aElzU3ltYm9sKTt9ZWxzZSBpZihvdGhJc051bGx8fG90aElzU3ltYm9sKXtzZXRMb3c9ZmFsc2U7fWVsc2V7c2V0TG93PXJldEhpZ2hlc3Q/Y29tcHV0ZWQ8PXZhbHVlOmNvbXB1dGVkPHZhbHVlO31pZihzZXRMb3cpe2xvdz1taWQrMTt9ZWxzZXtoaWdoPW1pZDt9fXJldHVybiBuYXRpdmVNaW4oaGlnaCxNQVhfQVJSQVlfSU5ERVgpO30vKipcbiAgICAgICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uc29ydGVkVW5pcWAgYW5kIGBfLnNvcnRlZFVuaXFCeWAgd2l0aG91dFxuICAgICAgICAgKiBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlXSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZHVwbGljYXRlIGZyZWUgYXJyYXkuXG4gICAgICAgICAqL2Z1bmN0aW9uIGJhc2VTb3J0ZWRVbmlxKGFycmF5LGl0ZXJhdGVlKXt2YXIgaW5kZXg9LTEsbGVuZ3RoPWFycmF5Lmxlbmd0aCxyZXNJbmRleD0wLHJlc3VsdD1bXTt3aGlsZSgrK2luZGV4PGxlbmd0aCl7dmFyIHZhbHVlPWFycmF5W2luZGV4XSxjb21wdXRlZD1pdGVyYXRlZT9pdGVyYXRlZSh2YWx1ZSk6dmFsdWU7aWYoIWluZGV4fHwhZXEoY29tcHV0ZWQsc2Vlbikpe3ZhciBzZWVuPWNvbXB1dGVkO3Jlc3VsdFtyZXNJbmRleCsrXT12YWx1ZT09PTA/MDp2YWx1ZTt9fXJldHVybiByZXN1bHQ7fS8qKlxuICAgICAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50b051bWJlcmAgd2hpY2ggZG9lc24ndCBlbnN1cmUgY29ycmVjdFxuICAgICAgICAgKiBjb252ZXJzaW9ucyBvZiBiaW5hcnksIGhleGFkZWNpbWFsLCBvciBvY3RhbCBzdHJpbmcgdmFsdWVzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwcm9jZXNzLlxuICAgICAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBudW1iZXIuXG4gICAgICAgICAqL2Z1bmN0aW9uIGJhc2VUb051bWJlcih2YWx1ZSl7aWYodHlwZW9mIHZhbHVlPT09J251bWJlcicpe3JldHVybiB2YWx1ZTt9aWYoaXNTeW1ib2wodmFsdWUpKXtyZXR1cm4gTkFOO31yZXR1cm4rdmFsdWU7fS8qKlxuICAgICAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50b1N0cmluZ2Agd2hpY2ggZG9lc24ndCBjb252ZXJ0IG51bGxpc2hcbiAgICAgICAgICogdmFsdWVzIHRvIGVtcHR5IHN0cmluZ3MuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHByb2Nlc3MuXG4gICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHN0cmluZy5cbiAgICAgICAgICovZnVuY3Rpb24gYmFzZVRvU3RyaW5nKHZhbHVlKXsvLyBFeGl0IGVhcmx5IGZvciBzdHJpbmdzIHRvIGF2b2lkIGEgcGVyZm9ybWFuY2UgaGl0IGluIHNvbWUgZW52aXJvbm1lbnRzLlxuaWYodHlwZW9mIHZhbHVlPT09J3N0cmluZycpe3JldHVybiB2YWx1ZTt9aWYoaXNBcnJheSh2YWx1ZSkpey8vIFJlY3Vyc2l2ZWx5IGNvbnZlcnQgdmFsdWVzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG5yZXR1cm4gYXJyYXlNYXAodmFsdWUsYmFzZVRvU3RyaW5nKSsnJzt9aWYoaXNTeW1ib2wodmFsdWUpKXtyZXR1cm4gc3ltYm9sVG9TdHJpbmc/c3ltYm9sVG9TdHJpbmcuY2FsbCh2YWx1ZSk6Jyc7fXZhciByZXN1bHQ9dmFsdWUrJyc7cmV0dXJuIHJlc3VsdD09JzAnJiYxL3ZhbHVlPT0tSU5GSU5JVFk/Jy0wJzpyZXN1bHQ7fS8qKlxuICAgICAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy51bmlxQnlgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjb21wYXJhdG9yXSBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBkdXBsaWNhdGUgZnJlZSBhcnJheS5cbiAgICAgICAgICovZnVuY3Rpb24gYmFzZVVuaXEoYXJyYXksaXRlcmF0ZWUsY29tcGFyYXRvcil7dmFyIGluZGV4PS0xLGluY2x1ZGVzPWFycmF5SW5jbHVkZXMsbGVuZ3RoPWFycmF5Lmxlbmd0aCxpc0NvbW1vbj10cnVlLHJlc3VsdD1bXSxzZWVuPXJlc3VsdDtpZihjb21wYXJhdG9yKXtpc0NvbW1vbj1mYWxzZTtpbmNsdWRlcz1hcnJheUluY2x1ZGVzV2l0aDt9ZWxzZSBpZihsZW5ndGg+PUxBUkdFX0FSUkFZX1NJWkUpe3ZhciBzZXQ9aXRlcmF0ZWU/bnVsbDpjcmVhdGVTZXQoYXJyYXkpO2lmKHNldCl7cmV0dXJuIHNldFRvQXJyYXkoc2V0KTt9aXNDb21tb249ZmFsc2U7aW5jbHVkZXM9Y2FjaGVIYXM7c2Vlbj1uZXcgU2V0Q2FjaGUoKTt9ZWxzZXtzZWVuPWl0ZXJhdGVlP1tdOnJlc3VsdDt9b3V0ZXI6d2hpbGUoKytpbmRleDxsZW5ndGgpe3ZhciB2YWx1ZT1hcnJheVtpbmRleF0sY29tcHV0ZWQ9aXRlcmF0ZWU/aXRlcmF0ZWUodmFsdWUpOnZhbHVlO3ZhbHVlPWNvbXBhcmF0b3J8fHZhbHVlIT09MD92YWx1ZTowO2lmKGlzQ29tbW9uJiZjb21wdXRlZD09PWNvbXB1dGVkKXt2YXIgc2VlbkluZGV4PXNlZW4ubGVuZ3RoO3doaWxlKHNlZW5JbmRleC0tKXtpZihzZWVuW3NlZW5JbmRleF09PT1jb21wdXRlZCl7Y29udGludWUgb3V0ZXI7fX1pZihpdGVyYXRlZSl7c2Vlbi5wdXNoKGNvbXB1dGVkKTt9cmVzdWx0LnB1c2godmFsdWUpO31lbHNlIGlmKCFpbmNsdWRlcyhzZWVuLGNvbXB1dGVkLGNvbXBhcmF0b3IpKXtpZihzZWVuIT09cmVzdWx0KXtzZWVuLnB1c2goY29tcHV0ZWQpO31yZXN1bHQucHVzaCh2YWx1ZSk7fX1yZXR1cm4gcmVzdWx0O30vKipcbiAgICAgICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udW5zZXRgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcHJvcGVydHkgcGF0aCB0byB1bnNldC5cbiAgICAgICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBwcm9wZXJ0eSBpcyBkZWxldGVkLCBlbHNlIGBmYWxzZWAuXG4gICAgICAgICAqL2Z1bmN0aW9uIGJhc2VVbnNldChvYmplY3QscGF0aCl7cGF0aD1jYXN0UGF0aChwYXRoLG9iamVjdCk7b2JqZWN0PXBhcmVudChvYmplY3QscGF0aCk7cmV0dXJuIG9iamVjdD09bnVsbHx8ZGVsZXRlIG9iamVjdFt0b0tleShsYXN0KHBhdGgpKV07fS8qKlxuICAgICAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy51cGRhdGVgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gdXBkYXRlLlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSB1cGRhdGVyIFRoZSBmdW5jdGlvbiB0byBwcm9kdWNlIHRoZSB1cGRhdGVkIHZhbHVlLlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBwYXRoIGNyZWF0aW9uLlxuICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAgICAgKi9mdW5jdGlvbiBiYXNlVXBkYXRlKG9iamVjdCxwYXRoLHVwZGF0ZXIsY3VzdG9taXplcil7cmV0dXJuIGJhc2VTZXQob2JqZWN0LHBhdGgsdXBkYXRlcihiYXNlR2V0KG9iamVjdCxwYXRoKSksY3VzdG9taXplcik7fS8qKlxuICAgICAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBtZXRob2RzIGxpa2UgYF8uZHJvcFdoaWxlYCBhbmQgYF8udGFrZVdoaWxlYFxuICAgICAgICAgKiB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBxdWVyeS5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRHJvcF0gU3BlY2lmeSBkcm9wcGluZyBlbGVtZW50cyBpbnN0ZWFkIG9mIHRha2luZyB0aGVtLlxuICAgICAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtmcm9tUmlnaHRdIFNwZWNpZnkgaXRlcmF0aW5nIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAgICAgICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzbGljZSBvZiBgYXJyYXlgLlxuICAgICAgICAgKi9mdW5jdGlvbiBiYXNlV2hpbGUoYXJyYXkscHJlZGljYXRlLGlzRHJvcCxmcm9tUmlnaHQpe3ZhciBsZW5ndGg9YXJyYXkubGVuZ3RoLGluZGV4PWZyb21SaWdodD9sZW5ndGg6LTE7d2hpbGUoKGZyb21SaWdodD9pbmRleC0tOisraW5kZXg8bGVuZ3RoKSYmcHJlZGljYXRlKGFycmF5W2luZGV4XSxpbmRleCxhcnJheSkpe31yZXR1cm4gaXNEcm9wP2Jhc2VTbGljZShhcnJheSxmcm9tUmlnaHQ/MDppbmRleCxmcm9tUmlnaHQ/aW5kZXgrMTpsZW5ndGgpOmJhc2VTbGljZShhcnJheSxmcm9tUmlnaHQ/aW5kZXgrMTowLGZyb21SaWdodD9sZW5ndGg6aW5kZXgpO30vKipcbiAgICAgICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYHdyYXBwZXJWYWx1ZWAgd2hpY2ggcmV0dXJucyB0aGUgcmVzdWx0IG9mXG4gICAgICAgICAqIHBlcmZvcm1pbmcgYSBzZXF1ZW5jZSBvZiBhY3Rpb25zIG9uIHRoZSB1bndyYXBwZWQgYHZhbHVlYCwgd2hlcmUgZWFjaFxuICAgICAgICAgKiBzdWNjZXNzaXZlIGFjdGlvbiBpcyBzdXBwbGllZCB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBwcmV2aW91cy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdW53cmFwcGVkIHZhbHVlLlxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBhY3Rpb25zIEFjdGlvbnMgdG8gcGVyZm9ybSB0byByZXNvbHZlIHRoZSB1bndyYXBwZWQgdmFsdWUuXG4gICAgICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXNvbHZlZCB2YWx1ZS5cbiAgICAgICAgICovZnVuY3Rpb24gYmFzZVdyYXBwZXJWYWx1ZSh2YWx1ZSxhY3Rpb25zKXt2YXIgcmVzdWx0PXZhbHVlO2lmKHJlc3VsdCBpbnN0YW5jZW9mIExhenlXcmFwcGVyKXtyZXN1bHQ9cmVzdWx0LnZhbHVlKCk7fXJldHVybiBhcnJheVJlZHVjZShhY3Rpb25zLGZ1bmN0aW9uKHJlc3VsdCxhY3Rpb24pe3JldHVybiBhY3Rpb24uZnVuYy5hcHBseShhY3Rpb24udGhpc0FyZyxhcnJheVB1c2goW3Jlc3VsdF0sYWN0aW9uLmFyZ3MpKTt9LHJlc3VsdCk7fS8qKlxuICAgICAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBtZXRob2RzIGxpa2UgYF8ueG9yYCwgd2l0aG91dCBzdXBwb3J0IGZvclxuICAgICAgICAgKiBpdGVyYXRlZSBzaG9ydGhhbmRzLCB0aGF0IGFjY2VwdHMgYW4gYXJyYXkgb2YgYXJyYXlzIHRvIGluc3BlY3QuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5cyBUaGUgYXJyYXlzIHRvIGluc3BlY3QuXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjb21wYXJhdG9yXSBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiB2YWx1ZXMuXG4gICAgICAgICAqL2Z1bmN0aW9uIGJhc2VYb3IoYXJyYXlzLGl0ZXJhdGVlLGNvbXBhcmF0b3Ipe3ZhciBsZW5ndGg9YXJyYXlzLmxlbmd0aDtpZihsZW5ndGg8Mil7cmV0dXJuIGxlbmd0aD9iYXNlVW5pcShhcnJheXNbMF0pOltdO312YXIgaW5kZXg9LTEscmVzdWx0PUFycmF5KGxlbmd0aCk7d2hpbGUoKytpbmRleDxsZW5ndGgpe3ZhciBhcnJheT1hcnJheXNbaW5kZXhdLG90aEluZGV4PS0xO3doaWxlKCsrb3RoSW5kZXg8bGVuZ3RoKXtpZihvdGhJbmRleCE9aW5kZXgpe3Jlc3VsdFtpbmRleF09YmFzZURpZmZlcmVuY2UocmVzdWx0W2luZGV4XXx8YXJyYXksYXJyYXlzW290aEluZGV4XSxpdGVyYXRlZSxjb21wYXJhdG9yKTt9fX1yZXR1cm4gYmFzZVVuaXEoYmFzZUZsYXR0ZW4ocmVzdWx0LDEpLGl0ZXJhdGVlLGNvbXBhcmF0b3IpO30vKipcbiAgICAgICAgICogVGhpcyBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnppcE9iamVjdGAgd2hpY2ggYXNzaWducyB2YWx1ZXMgdXNpbmcgYGFzc2lnbkZ1bmNgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBwcm9wcyBUaGUgcHJvcGVydHkgaWRlbnRpZmllcnMuXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgcHJvcGVydHkgdmFsdWVzLlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBhc3NpZ25GdW5jIFRoZSBmdW5jdGlvbiB0byBhc3NpZ24gdmFsdWVzLlxuICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICAgICAgICAgKi9mdW5jdGlvbiBiYXNlWmlwT2JqZWN0KHByb3BzLHZhbHVlcyxhc3NpZ25GdW5jKXt2YXIgaW5kZXg9LTEsbGVuZ3RoPXByb3BzLmxlbmd0aCx2YWxzTGVuZ3RoPXZhbHVlcy5sZW5ndGgscmVzdWx0PXt9O3doaWxlKCsraW5kZXg8bGVuZ3RoKXt2YXIgdmFsdWU9aW5kZXg8dmFsc0xlbmd0aD92YWx1ZXNbaW5kZXhdOnVuZGVmaW5lZDthc3NpZ25GdW5jKHJlc3VsdCxwcm9wc1tpbmRleF0sdmFsdWUpO31yZXR1cm4gcmVzdWx0O30vKipcbiAgICAgICAgICogQ2FzdHMgYHZhbHVlYCB0byBhbiBlbXB0eSBhcnJheSBpZiBpdCdzIG5vdCBhbiBhcnJheSBsaWtlIG9iamVjdC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cbiAgICAgICAgICogQHJldHVybnMge0FycmF5fE9iamVjdH0gUmV0dXJucyB0aGUgY2FzdCBhcnJheS1saWtlIG9iamVjdC5cbiAgICAgICAgICovZnVuY3Rpb24gY2FzdEFycmF5TGlrZU9iamVjdCh2YWx1ZSl7cmV0dXJuIGlzQXJyYXlMaWtlT2JqZWN0KHZhbHVlKT92YWx1ZTpbXTt9LyoqXG4gICAgICAgICAqIENhc3RzIGB2YWx1ZWAgdG8gYGlkZW50aXR5YCBpZiBpdCdzIG5vdCBhIGZ1bmN0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBpbnNwZWN0LlxuICAgICAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgY2FzdCBmdW5jdGlvbi5cbiAgICAgICAgICovZnVuY3Rpb24gY2FzdEZ1bmN0aW9uKHZhbHVlKXtyZXR1cm4gdHlwZW9mIHZhbHVlPT09J2Z1bmN0aW9uJz92YWx1ZTppZGVudGl0eTt9LyoqXG4gICAgICAgICAqIENhc3RzIGB2YWx1ZWAgdG8gYSBwYXRoIGFycmF5IGlmIGl0J3Mgbm90IG9uZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkga2V5cyBvbi5cbiAgICAgICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBjYXN0IHByb3BlcnR5IHBhdGggYXJyYXkuXG4gICAgICAgICAqL2Z1bmN0aW9uIGNhc3RQYXRoKHZhbHVlLG9iamVjdCl7aWYoaXNBcnJheSh2YWx1ZSkpe3JldHVybiB2YWx1ZTt9cmV0dXJuIGlzS2V5KHZhbHVlLG9iamVjdCk/W3ZhbHVlXTpzdHJpbmdUb1BhdGgodG9TdHJpbmcodmFsdWUpKTt9LyoqXG4gICAgICAgICAqIEEgYGJhc2VSZXN0YCBhbGlhcyB3aGljaCBjYW4gYmUgcmVwbGFjZWQgd2l0aCBgaWRlbnRpdHlgIGJ5IG1vZHVsZVxuICAgICAgICAgKiByZXBsYWNlbWVudCBwbHVnaW5zLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKiBAdHlwZSB7RnVuY3Rpb259XG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gICAgICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICAgICAgICAgKi92YXIgY2FzdFJlc3Q9YmFzZVJlc3Q7LyoqXG4gICAgICAgICAqIENhc3RzIGBhcnJheWAgdG8gYSBzbGljZSBpZiBpdCdzIG5lZWRlZC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydCBUaGUgc3RhcnQgcG9zaXRpb24uXG4gICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbZW5kPWFycmF5Lmxlbmd0aF0gVGhlIGVuZCBwb3NpdGlvbi5cbiAgICAgICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBjYXN0IHNsaWNlLlxuICAgICAgICAgKi9mdW5jdGlvbiBjYXN0U2xpY2UoYXJyYXksc3RhcnQsZW5kKXt2YXIgbGVuZ3RoPWFycmF5Lmxlbmd0aDtlbmQ9ZW5kPT09dW5kZWZpbmVkP2xlbmd0aDplbmQ7cmV0dXJuIXN0YXJ0JiZlbmQ+PWxlbmd0aD9hcnJheTpiYXNlU2xpY2UoYXJyYXksc3RhcnQsZW5kKTt9LyoqXG4gICAgICAgICAqIEEgc2ltcGxlIHdyYXBwZXIgYXJvdW5kIHRoZSBnbG9iYWwgW2BjbGVhclRpbWVvdXRgXShodHRwczovL21kbi5pby9jbGVhclRpbWVvdXQpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKiBAcGFyYW0ge251bWJlcnxPYmplY3R9IGlkIFRoZSB0aW1lciBpZCBvciB0aW1lb3V0IG9iamVjdCBvZiB0aGUgdGltZXIgdG8gY2xlYXIuXG4gICAgICAgICAqL3ZhciBjbGVhclRpbWVvdXQ9Y3R4Q2xlYXJUaW1lb3V0fHxmdW5jdGlvbihpZCl7cmV0dXJuIHJvb3QuY2xlYXJUaW1lb3V0KGlkKTt9Oy8qKlxuICAgICAgICogQ3JlYXRlcyBhIGNsb25lIG9mICBgYnVmZmVyYC5cbiAgICAgICAqXG4gICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICogQHBhcmFtIHtCdWZmZXJ9IGJ1ZmZlciBUaGUgYnVmZmVyIHRvIGNsb25lLlxuICAgICAgICogQHBhcmFtIHtib29sZWFufSBbaXNEZWVwXSBTcGVjaWZ5IGEgZGVlcCBjbG9uZS5cbiAgICAgICAqIEByZXR1cm5zIHtCdWZmZXJ9IFJldHVybnMgdGhlIGNsb25lZCBidWZmZXIuXG4gICAgICAgKi9mdW5jdGlvbiBjbG9uZUJ1ZmZlcihidWZmZXIsaXNEZWVwKXtpZihpc0RlZXApe3JldHVybiBidWZmZXIuc2xpY2UoKTt9dmFyIGxlbmd0aD1idWZmZXIubGVuZ3RoLHJlc3VsdD1hbGxvY1Vuc2FmZT9hbGxvY1Vuc2FmZShsZW5ndGgpOm5ldyBidWZmZXIuY29uc3RydWN0b3IobGVuZ3RoKTtidWZmZXIuY29weShyZXN1bHQpO3JldHVybiByZXN1bHQ7fS8qKlxuICAgICAgICAgKiBDcmVhdGVzIGEgY2xvbmUgb2YgYGFycmF5QnVmZmVyYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQHBhcmFtIHtBcnJheUJ1ZmZlcn0gYXJyYXlCdWZmZXIgVGhlIGFycmF5IGJ1ZmZlciB0byBjbG9uZS5cbiAgICAgICAgICogQHJldHVybnMge0FycmF5QnVmZmVyfSBSZXR1cm5zIHRoZSBjbG9uZWQgYXJyYXkgYnVmZmVyLlxuICAgICAgICAgKi9mdW5jdGlvbiBjbG9uZUFycmF5QnVmZmVyKGFycmF5QnVmZmVyKXt2YXIgcmVzdWx0PW5ldyBhcnJheUJ1ZmZlci5jb25zdHJ1Y3RvcihhcnJheUJ1ZmZlci5ieXRlTGVuZ3RoKTtuZXcgVWludDhBcnJheShyZXN1bHQpLnNldChuZXcgVWludDhBcnJheShhcnJheUJ1ZmZlcikpO3JldHVybiByZXN1bHQ7fS8qKlxuICAgICAgICAgKiBDcmVhdGVzIGEgY2xvbmUgb2YgYGRhdGFWaWV3YC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGRhdGFWaWV3IFRoZSBkYXRhIHZpZXcgdG8gY2xvbmUuXG4gICAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXG4gICAgICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCBkYXRhIHZpZXcuXG4gICAgICAgICAqL2Z1bmN0aW9uIGNsb25lRGF0YVZpZXcoZGF0YVZpZXcsaXNEZWVwKXt2YXIgYnVmZmVyPWlzRGVlcD9jbG9uZUFycmF5QnVmZmVyKGRhdGFWaWV3LmJ1ZmZlcik6ZGF0YVZpZXcuYnVmZmVyO3JldHVybiBuZXcgZGF0YVZpZXcuY29uc3RydWN0b3IoYnVmZmVyLGRhdGFWaWV3LmJ5dGVPZmZzZXQsZGF0YVZpZXcuYnl0ZUxlbmd0aCk7fS8qKlxuICAgICAgICAgKiBDcmVhdGVzIGEgY2xvbmUgb2YgYHJlZ2V4cGAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSByZWdleHAgVGhlIHJlZ2V4cCB0byBjbG9uZS5cbiAgICAgICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2xvbmVkIHJlZ2V4cC5cbiAgICAgICAgICovZnVuY3Rpb24gY2xvbmVSZWdFeHAocmVnZXhwKXt2YXIgcmVzdWx0PW5ldyByZWdleHAuY29uc3RydWN0b3IocmVnZXhwLnNvdXJjZSxyZUZsYWdzLmV4ZWMocmVnZXhwKSk7cmVzdWx0Lmxhc3RJbmRleD1yZWdleHAubGFzdEluZGV4O3JldHVybiByZXN1bHQ7fS8qKlxuICAgICAgICAgKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhlIGBzeW1ib2xgIG9iamVjdC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHN5bWJvbCBUaGUgc3ltYm9sIG9iamVjdCB0byBjbG9uZS5cbiAgICAgICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2xvbmVkIHN5bWJvbCBvYmplY3QuXG4gICAgICAgICAqL2Z1bmN0aW9uIGNsb25lU3ltYm9sKHN5bWJvbCl7cmV0dXJuIHN5bWJvbFZhbHVlT2Y/T2JqZWN0KHN5bWJvbFZhbHVlT2YuY2FsbChzeW1ib2wpKTp7fTt9LyoqXG4gICAgICAgICAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgdHlwZWRBcnJheWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSB0eXBlZEFycmF5IFRoZSB0eXBlZCBhcnJheSB0byBjbG9uZS5cbiAgICAgICAgICogQHBhcmFtIHtib29sZWFufSBbaXNEZWVwXSBTcGVjaWZ5IGEgZGVlcCBjbG9uZS5cbiAgICAgICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2xvbmVkIHR5cGVkIGFycmF5LlxuICAgICAgICAgKi9mdW5jdGlvbiBjbG9uZVR5cGVkQXJyYXkodHlwZWRBcnJheSxpc0RlZXApe3ZhciBidWZmZXI9aXNEZWVwP2Nsb25lQXJyYXlCdWZmZXIodHlwZWRBcnJheS5idWZmZXIpOnR5cGVkQXJyYXkuYnVmZmVyO3JldHVybiBuZXcgdHlwZWRBcnJheS5jb25zdHJ1Y3RvcihidWZmZXIsdHlwZWRBcnJheS5ieXRlT2Zmc2V0LHR5cGVkQXJyYXkubGVuZ3RoKTt9LyoqXG4gICAgICAgICAqIENvbXBhcmVzIHZhbHVlcyB0byBzb3J0IHRoZW0gaW4gYXNjZW5kaW5nIG9yZGVyLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAgICAgKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBzb3J0IG9yZGVyIGluZGljYXRvciBmb3IgYHZhbHVlYC5cbiAgICAgICAgICovZnVuY3Rpb24gY29tcGFyZUFzY2VuZGluZyh2YWx1ZSxvdGhlcil7aWYodmFsdWUhPT1vdGhlcil7dmFyIHZhbElzRGVmaW5lZD12YWx1ZSE9PXVuZGVmaW5lZCx2YWxJc051bGw9dmFsdWU9PT1udWxsLHZhbElzUmVmbGV4aXZlPXZhbHVlPT09dmFsdWUsdmFsSXNTeW1ib2w9aXNTeW1ib2wodmFsdWUpO3ZhciBvdGhJc0RlZmluZWQ9b3RoZXIhPT11bmRlZmluZWQsb3RoSXNOdWxsPW90aGVyPT09bnVsbCxvdGhJc1JlZmxleGl2ZT1vdGhlcj09PW90aGVyLG90aElzU3ltYm9sPWlzU3ltYm9sKG90aGVyKTtpZighb3RoSXNOdWxsJiYhb3RoSXNTeW1ib2wmJiF2YWxJc1N5bWJvbCYmdmFsdWU+b3RoZXJ8fHZhbElzU3ltYm9sJiZvdGhJc0RlZmluZWQmJm90aElzUmVmbGV4aXZlJiYhb3RoSXNOdWxsJiYhb3RoSXNTeW1ib2x8fHZhbElzTnVsbCYmb3RoSXNEZWZpbmVkJiZvdGhJc1JlZmxleGl2ZXx8IXZhbElzRGVmaW5lZCYmb3RoSXNSZWZsZXhpdmV8fCF2YWxJc1JlZmxleGl2ZSl7cmV0dXJuIDE7fWlmKCF2YWxJc051bGwmJiF2YWxJc1N5bWJvbCYmIW90aElzU3ltYm9sJiZ2YWx1ZTxvdGhlcnx8b3RoSXNTeW1ib2wmJnZhbElzRGVmaW5lZCYmdmFsSXNSZWZsZXhpdmUmJiF2YWxJc051bGwmJiF2YWxJc1N5bWJvbHx8b3RoSXNOdWxsJiZ2YWxJc0RlZmluZWQmJnZhbElzUmVmbGV4aXZlfHwhb3RoSXNEZWZpbmVkJiZ2YWxJc1JlZmxleGl2ZXx8IW90aElzUmVmbGV4aXZlKXtyZXR1cm4tMTt9fXJldHVybiAwO30vKipcbiAgICAgICAgICogVXNlZCBieSBgXy5vcmRlckJ5YCB0byBjb21wYXJlIG11bHRpcGxlIHByb3BlcnRpZXMgb2YgYSB2YWx1ZSB0byBhbm90aGVyXG4gICAgICAgICAqIGFuZCBzdGFibGUgc29ydCB0aGVtLlxuICAgICAgICAgKlxuICAgICAgICAgKiBJZiBgb3JkZXJzYCBpcyB1bnNwZWNpZmllZCwgYWxsIHZhbHVlcyBhcmUgc29ydGVkIGluIGFzY2VuZGluZyBvcmRlci4gT3RoZXJ3aXNlLFxuICAgICAgICAgKiBzcGVjaWZ5IGFuIG9yZGVyIG9mIFwiZGVzY1wiIGZvciBkZXNjZW5kaW5nIG9yIFwiYXNjXCIgZm9yIGFzY2VuZGluZyBzb3J0IG9yZGVyXG4gICAgICAgICAqIG9mIGNvcnJlc3BvbmRpbmcgdmFsdWVzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY29tcGFyZS5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cbiAgICAgICAgICogQHBhcmFtIHtib29sZWFuW118c3RyaW5nW119IG9yZGVycyBUaGUgb3JkZXIgdG8gc29ydCBieSBmb3IgZWFjaCBwcm9wZXJ0eS5cbiAgICAgICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgc29ydCBvcmRlciBpbmRpY2F0b3IgZm9yIGBvYmplY3RgLlxuICAgICAgICAgKi9mdW5jdGlvbiBjb21wYXJlTXVsdGlwbGUob2JqZWN0LG90aGVyLG9yZGVycyl7dmFyIGluZGV4PS0xLG9iakNyaXRlcmlhPW9iamVjdC5jcml0ZXJpYSxvdGhDcml0ZXJpYT1vdGhlci5jcml0ZXJpYSxsZW5ndGg9b2JqQ3JpdGVyaWEubGVuZ3RoLG9yZGVyc0xlbmd0aD1vcmRlcnMubGVuZ3RoO3doaWxlKCsraW5kZXg8bGVuZ3RoKXt2YXIgcmVzdWx0PWNvbXBhcmVBc2NlbmRpbmcob2JqQ3JpdGVyaWFbaW5kZXhdLG90aENyaXRlcmlhW2luZGV4XSk7aWYocmVzdWx0KXtpZihpbmRleD49b3JkZXJzTGVuZ3RoKXtyZXR1cm4gcmVzdWx0O312YXIgb3JkZXI9b3JkZXJzW2luZGV4XTtyZXR1cm4gcmVzdWx0KihvcmRlcj09J2Rlc2MnPy0xOjEpO319Ly8gRml4ZXMgYW4gYEFycmF5I3NvcnRgIGJ1ZyBpbiB0aGUgSlMgZW5naW5lIGVtYmVkZGVkIGluIEFkb2JlIGFwcGxpY2F0aW9uc1xuLy8gdGhhdCBjYXVzZXMgaXQsIHVuZGVyIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcywgdG8gcHJvdmlkZSB0aGUgc2FtZSB2YWx1ZSBmb3Jcbi8vIGBvYmplY3RgIGFuZCBgb3RoZXJgLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2phc2hrZW5hcy91bmRlcnNjb3JlL3B1bGwvMTI0N1xuLy8gZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBUaGlzIGFsc28gZW5zdXJlcyBhIHN0YWJsZSBzb3J0IGluIFY4IGFuZCBvdGhlciBlbmdpbmVzLlxuLy8gU2VlIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTkwIGZvciBtb3JlIGRldGFpbHMuXG5yZXR1cm4gb2JqZWN0LmluZGV4LW90aGVyLmluZGV4O30vKipcbiAgICAgICAgICogQ3JlYXRlcyBhbiBhcnJheSB0aGF0IGlzIHRoZSBjb21wb3NpdGlvbiBvZiBwYXJ0aWFsbHkgYXBwbGllZCBhcmd1bWVudHMsXG4gICAgICAgICAqIHBsYWNlaG9sZGVycywgYW5kIHByb3ZpZGVkIGFyZ3VtZW50cyBpbnRvIGEgc2luZ2xlIGFycmF5IG9mIGFyZ3VtZW50cy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQHBhcmFtIHtBcnJheX0gYXJncyBUaGUgcHJvdmlkZWQgYXJndW1lbnRzLlxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBwYXJ0aWFscyBUaGUgYXJndW1lbnRzIHRvIHByZXBlbmQgdG8gdGhvc2UgcHJvdmlkZWQuXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IGhvbGRlcnMgVGhlIGBwYXJ0aWFsc2AgcGxhY2Vob2xkZXIgaW5kZXhlcy5cbiAgICAgICAgICogQHBhcmFtcyB7Ym9vbGVhbn0gW2lzQ3VycmllZF0gU3BlY2lmeSBjb21wb3NpbmcgZm9yIGEgY3VycmllZCBmdW5jdGlvbi5cbiAgICAgICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgY29tcG9zZWQgYXJndW1lbnRzLlxuICAgICAgICAgKi9mdW5jdGlvbiBjb21wb3NlQXJncyhhcmdzLHBhcnRpYWxzLGhvbGRlcnMsaXNDdXJyaWVkKXt2YXIgYXJnc0luZGV4PS0xLGFyZ3NMZW5ndGg9YXJncy5sZW5ndGgsaG9sZGVyc0xlbmd0aD1ob2xkZXJzLmxlbmd0aCxsZWZ0SW5kZXg9LTEsbGVmdExlbmd0aD1wYXJ0aWFscy5sZW5ndGgscmFuZ2VMZW5ndGg9bmF0aXZlTWF4KGFyZ3NMZW5ndGgtaG9sZGVyc0xlbmd0aCwwKSxyZXN1bHQ9QXJyYXkobGVmdExlbmd0aCtyYW5nZUxlbmd0aCksaXNVbmN1cnJpZWQ9IWlzQ3VycmllZDt3aGlsZSgrK2xlZnRJbmRleDxsZWZ0TGVuZ3RoKXtyZXN1bHRbbGVmdEluZGV4XT1wYXJ0aWFsc1tsZWZ0SW5kZXhdO313aGlsZSgrK2FyZ3NJbmRleDxob2xkZXJzTGVuZ3RoKXtpZihpc1VuY3VycmllZHx8YXJnc0luZGV4PGFyZ3NMZW5ndGgpe3Jlc3VsdFtob2xkZXJzW2FyZ3NJbmRleF1dPWFyZ3NbYXJnc0luZGV4XTt9fXdoaWxlKHJhbmdlTGVuZ3RoLS0pe3Jlc3VsdFtsZWZ0SW5kZXgrK109YXJnc1thcmdzSW5kZXgrK107fXJldHVybiByZXN1bHQ7fS8qKlxuICAgICAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2UgYGNvbXBvc2VBcmdzYCBleGNlcHQgdGhhdCB0aGUgYXJndW1lbnRzIGNvbXBvc2l0aW9uXG4gICAgICAgICAqIGlzIHRhaWxvcmVkIGZvciBgXy5wYXJ0aWFsUmlnaHRgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBhcmdzIFRoZSBwcm92aWRlZCBhcmd1bWVudHMuXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IHBhcnRpYWxzIFRoZSBhcmd1bWVudHMgdG8gYXBwZW5kIHRvIHRob3NlIHByb3ZpZGVkLlxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBob2xkZXJzIFRoZSBgcGFydGlhbHNgIHBsYWNlaG9sZGVyIGluZGV4ZXMuXG4gICAgICAgICAqIEBwYXJhbXMge2Jvb2xlYW59IFtpc0N1cnJpZWRdIFNwZWNpZnkgY29tcG9zaW5nIGZvciBhIGN1cnJpZWQgZnVuY3Rpb24uXG4gICAgICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGNvbXBvc2VkIGFyZ3VtZW50cy5cbiAgICAgICAgICovZnVuY3Rpb24gY29tcG9zZUFyZ3NSaWdodChhcmdzLHBhcnRpYWxzLGhvbGRlcnMsaXNDdXJyaWVkKXt2YXIgYXJnc0luZGV4PS0xLGFyZ3NMZW5ndGg9YXJncy5sZW5ndGgsaG9sZGVyc0luZGV4PS0xLGhvbGRlcnNMZW5ndGg9aG9sZGVycy5sZW5ndGgscmlnaHRJbmRleD0tMSxyaWdodExlbmd0aD1wYXJ0aWFscy5sZW5ndGgscmFuZ2VMZW5ndGg9bmF0aXZlTWF4KGFyZ3NMZW5ndGgtaG9sZGVyc0xlbmd0aCwwKSxyZXN1bHQ9QXJyYXkocmFuZ2VMZW5ndGgrcmlnaHRMZW5ndGgpLGlzVW5jdXJyaWVkPSFpc0N1cnJpZWQ7d2hpbGUoKythcmdzSW5kZXg8cmFuZ2VMZW5ndGgpe3Jlc3VsdFthcmdzSW5kZXhdPWFyZ3NbYXJnc0luZGV4XTt9dmFyIG9mZnNldD1hcmdzSW5kZXg7d2hpbGUoKytyaWdodEluZGV4PHJpZ2h0TGVuZ3RoKXtyZXN1bHRbb2Zmc2V0K3JpZ2h0SW5kZXhdPXBhcnRpYWxzW3JpZ2h0SW5kZXhdO313aGlsZSgrK2hvbGRlcnNJbmRleDxob2xkZXJzTGVuZ3RoKXtpZihpc1VuY3VycmllZHx8YXJnc0luZGV4PGFyZ3NMZW5ndGgpe3Jlc3VsdFtvZmZzZXQraG9sZGVyc1tob2xkZXJzSW5kZXhdXT1hcmdzW2FyZ3NJbmRleCsrXTt9fXJldHVybiByZXN1bHQ7fS8qKlxuICAgICAgICAgKiBDb3BpZXMgdGhlIHZhbHVlcyBvZiBgc291cmNlYCB0byBgYXJyYXlgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBzb3VyY2UgVGhlIGFycmF5IHRvIGNvcHkgdmFsdWVzIGZyb20uXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IFthcnJheT1bXV0gVGhlIGFycmF5IHRvIGNvcHkgdmFsdWVzIHRvLlxuICAgICAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAgICAgICAgICovZnVuY3Rpb24gY29weUFycmF5KHNvdXJjZSxhcnJheSl7dmFyIGluZGV4PS0xLGxlbmd0aD1zb3VyY2UubGVuZ3RoO2FycmF5fHwoYXJyYXk9QXJyYXkobGVuZ3RoKSk7d2hpbGUoKytpbmRleDxsZW5ndGgpe2FycmF5W2luZGV4XT1zb3VyY2VbaW5kZXhdO31yZXR1cm4gYXJyYXk7fS8qKlxuICAgICAgICAgKiBDb3BpZXMgcHJvcGVydGllcyBvZiBgc291cmNlYCB0byBgb2JqZWN0YC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tLlxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBwcm9wcyBUaGUgcHJvcGVydHkgaWRlbnRpZmllcnMgdG8gY29weS5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3Q9e31dIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIHRvLlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb3BpZWQgdmFsdWVzLlxuICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAgICAgKi9mdW5jdGlvbiBjb3B5T2JqZWN0KHNvdXJjZSxwcm9wcyxvYmplY3QsY3VzdG9taXplcil7dmFyIGlzTmV3PSFvYmplY3Q7b2JqZWN0fHwob2JqZWN0PXt9KTt2YXIgaW5kZXg9LTEsbGVuZ3RoPXByb3BzLmxlbmd0aDt3aGlsZSgrK2luZGV4PGxlbmd0aCl7dmFyIGtleT1wcm9wc1tpbmRleF07dmFyIG5ld1ZhbHVlPWN1c3RvbWl6ZXI/Y3VzdG9taXplcihvYmplY3Rba2V5XSxzb3VyY2Vba2V5XSxrZXksb2JqZWN0LHNvdXJjZSk6dW5kZWZpbmVkO2lmKG5ld1ZhbHVlPT09dW5kZWZpbmVkKXtuZXdWYWx1ZT1zb3VyY2Vba2V5XTt9aWYoaXNOZXcpe2Jhc2VBc3NpZ25WYWx1ZShvYmplY3Qsa2V5LG5ld1ZhbHVlKTt9ZWxzZXthc3NpZ25WYWx1ZShvYmplY3Qsa2V5LG5ld1ZhbHVlKTt9fXJldHVybiBvYmplY3Q7fS8qKlxuICAgICAgICAgKiBDb3BpZXMgb3duIHN5bWJvbHMgb2YgYHNvdXJjZWAgdG8gYG9iamVjdGAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCB0byBjb3B5IHN5bWJvbHMgZnJvbS5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3Q9e31dIFRoZSBvYmplY3QgdG8gY29weSBzeW1ib2xzIHRvLlxuICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAgICAgKi9mdW5jdGlvbiBjb3B5U3ltYm9scyhzb3VyY2Usb2JqZWN0KXtyZXR1cm4gY29weU9iamVjdChzb3VyY2UsZ2V0U3ltYm9scyhzb3VyY2UpLG9iamVjdCk7fS8qKlxuICAgICAgICAgKiBDb3BpZXMgb3duIGFuZCBpbmhlcml0ZWQgc3ltYm9scyBvZiBgc291cmNlYCB0byBgb2JqZWN0YC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IHRvIGNvcHkgc3ltYm9scyBmcm9tLlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gW29iamVjdD17fV0gVGhlIG9iamVjdCB0byBjb3B5IHN5bWJvbHMgdG8uXG4gICAgICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICAgICAqL2Z1bmN0aW9uIGNvcHlTeW1ib2xzSW4oc291cmNlLG9iamVjdCl7cmV0dXJuIGNvcHlPYmplY3Qoc291cmNlLGdldFN5bWJvbHNJbihzb3VyY2UpLG9iamVjdCk7fS8qKlxuICAgICAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gbGlrZSBgXy5ncm91cEJ5YC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gc2V0dGVyIFRoZSBmdW5jdGlvbiB0byBzZXQgYWNjdW11bGF0b3IgdmFsdWVzLlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaW5pdGlhbGl6ZXJdIFRoZSBhY2N1bXVsYXRvciBvYmplY3QgaW5pdGlhbGl6ZXIuXG4gICAgICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFnZ3JlZ2F0b3IgZnVuY3Rpb24uXG4gICAgICAgICAqL2Z1bmN0aW9uIGNyZWF0ZUFnZ3JlZ2F0b3Ioc2V0dGVyLGluaXRpYWxpemVyKXtyZXR1cm4gZnVuY3Rpb24oY29sbGVjdGlvbixpdGVyYXRlZSl7dmFyIGZ1bmM9aXNBcnJheShjb2xsZWN0aW9uKT9hcnJheUFnZ3JlZ2F0b3I6YmFzZUFnZ3JlZ2F0b3IsYWNjdW11bGF0b3I9aW5pdGlhbGl6ZXI/aW5pdGlhbGl6ZXIoKTp7fTtyZXR1cm4gZnVuYyhjb2xsZWN0aW9uLHNldHRlcixnZXRJdGVyYXRlZShpdGVyYXRlZSwyKSxhY2N1bXVsYXRvcik7fTt9LyoqXG4gICAgICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiBsaWtlIGBfLmFzc2lnbmAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGFzc2lnbmVyIFRoZSBmdW5jdGlvbiB0byBhc3NpZ24gdmFsdWVzLlxuICAgICAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBhc3NpZ25lciBmdW5jdGlvbi5cbiAgICAgICAgICovZnVuY3Rpb24gY3JlYXRlQXNzaWduZXIoYXNzaWduZXIpe3JldHVybiBiYXNlUmVzdChmdW5jdGlvbihvYmplY3Qsc291cmNlcyl7dmFyIGluZGV4PS0xLGxlbmd0aD1zb3VyY2VzLmxlbmd0aCxjdXN0b21pemVyPWxlbmd0aD4xP3NvdXJjZXNbbGVuZ3RoLTFdOnVuZGVmaW5lZCxndWFyZD1sZW5ndGg+Mj9zb3VyY2VzWzJdOnVuZGVmaW5lZDtjdXN0b21pemVyPWFzc2lnbmVyLmxlbmd0aD4zJiZ0eXBlb2YgY3VzdG9taXplcj09PSdmdW5jdGlvbic/KGxlbmd0aC0tLGN1c3RvbWl6ZXIpOnVuZGVmaW5lZDtpZihndWFyZCYmaXNJdGVyYXRlZUNhbGwoc291cmNlc1swXSxzb3VyY2VzWzFdLGd1YXJkKSl7Y3VzdG9taXplcj1sZW5ndGg8Mz91bmRlZmluZWQ6Y3VzdG9taXplcjtsZW5ndGg9MTt9b2JqZWN0PU9iamVjdChvYmplY3QpO3doaWxlKCsraW5kZXg8bGVuZ3RoKXt2YXIgc291cmNlPXNvdXJjZXNbaW5kZXhdO2lmKHNvdXJjZSl7YXNzaWduZXIob2JqZWN0LHNvdXJjZSxpbmRleCxjdXN0b21pemVyKTt9fXJldHVybiBvYmplY3Q7fSk7fS8qKlxuICAgICAgICAgKiBDcmVhdGVzIGEgYGJhc2VFYWNoYCBvciBgYmFzZUVhY2hSaWdodGAgZnVuY3Rpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGVhY2hGdW5jIFRoZSBmdW5jdGlvbiB0byBpdGVyYXRlIG92ZXIgYSBjb2xsZWN0aW9uLlxuICAgICAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtmcm9tUmlnaHRdIFNwZWNpZnkgaXRlcmF0aW5nIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAgICAgICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYmFzZSBmdW5jdGlvbi5cbiAgICAgICAgICovZnVuY3Rpb24gY3JlYXRlQmFzZUVhY2goZWFjaEZ1bmMsZnJvbVJpZ2h0KXtyZXR1cm4gZnVuY3Rpb24oY29sbGVjdGlvbixpdGVyYXRlZSl7aWYoY29sbGVjdGlvbj09bnVsbCl7cmV0dXJuIGNvbGxlY3Rpb247fWlmKCFpc0FycmF5TGlrZShjb2xsZWN0aW9uKSl7cmV0dXJuIGVhY2hGdW5jKGNvbGxlY3Rpb24saXRlcmF0ZWUpO312YXIgbGVuZ3RoPWNvbGxlY3Rpb24ubGVuZ3RoLGluZGV4PWZyb21SaWdodD9sZW5ndGg6LTEsaXRlcmFibGU9T2JqZWN0KGNvbGxlY3Rpb24pO3doaWxlKGZyb21SaWdodD9pbmRleC0tOisraW5kZXg8bGVuZ3RoKXtpZihpdGVyYXRlZShpdGVyYWJsZVtpbmRleF0saW5kZXgsaXRlcmFibGUpPT09ZmFsc2Upe2JyZWFrO319cmV0dXJuIGNvbGxlY3Rpb247fTt9LyoqXG4gICAgICAgICAqIENyZWF0ZXMgYSBiYXNlIGZ1bmN0aW9uIGZvciBtZXRob2RzIGxpa2UgYF8uZm9ySW5gIGFuZCBgXy5mb3JPd25gLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtmcm9tUmlnaHRdIFNwZWNpZnkgaXRlcmF0aW5nIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAgICAgICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYmFzZSBmdW5jdGlvbi5cbiAgICAgICAgICovZnVuY3Rpb24gY3JlYXRlQmFzZUZvcihmcm9tUmlnaHQpe3JldHVybiBmdW5jdGlvbihvYmplY3QsaXRlcmF0ZWUsa2V5c0Z1bmMpe3ZhciBpbmRleD0tMSxpdGVyYWJsZT1PYmplY3Qob2JqZWN0KSxwcm9wcz1rZXlzRnVuYyhvYmplY3QpLGxlbmd0aD1wcm9wcy5sZW5ndGg7d2hpbGUobGVuZ3RoLS0pe3ZhciBrZXk9cHJvcHNbZnJvbVJpZ2h0P2xlbmd0aDorK2luZGV4XTtpZihpdGVyYXRlZShpdGVyYWJsZVtrZXldLGtleSxpdGVyYWJsZSk9PT1mYWxzZSl7YnJlYWs7fX1yZXR1cm4gb2JqZWN0O307fS8qKlxuICAgICAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCB3cmFwcyBgZnVuY2AgdG8gaW52b2tlIGl0IHdpdGggdGhlIG9wdGlvbmFsIGB0aGlzYFxuICAgICAgICAgKiBiaW5kaW5nIG9mIGB0aGlzQXJnYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC5cbiAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgY3JlYXRlV3JhcGAgZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgICAgICogQHBhcmFtIHsqfSBbdGhpc0FyZ10gVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAgICAgICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgd3JhcHBlZCBmdW5jdGlvbi5cbiAgICAgICAgICovZnVuY3Rpb24gY3JlYXRlQmluZChmdW5jLGJpdG1hc2ssdGhpc0FyZyl7dmFyIGlzQmluZD1iaXRtYXNrJldSQVBfQklORF9GTEFHLEN0b3I9Y3JlYXRlQ3RvcihmdW5jKTtmdW5jdGlvbiB3cmFwcGVyKCl7dmFyIGZuPXRoaXMmJnRoaXMhPT1yb290JiZ0aGlzIGluc3RhbmNlb2Ygd3JhcHBlcj9DdG9yOmZ1bmM7cmV0dXJuIGZuLmFwcGx5KGlzQmluZD90aGlzQXJnOnRoaXMsYXJndW1lbnRzKTt9cmV0dXJuIHdyYXBwZXI7fS8qKlxuICAgICAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gbGlrZSBgXy5sb3dlckZpcnN0YC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IG1ldGhvZE5hbWUgVGhlIG5hbWUgb2YgdGhlIGBTdHJpbmdgIGNhc2UgbWV0aG9kIHRvIHVzZS5cbiAgICAgICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY2FzZSBmdW5jdGlvbi5cbiAgICAgICAgICovZnVuY3Rpb24gY3JlYXRlQ2FzZUZpcnN0KG1ldGhvZE5hbWUpe3JldHVybiBmdW5jdGlvbihzdHJpbmcpe3N0cmluZz10b1N0cmluZyhzdHJpbmcpO3ZhciBzdHJTeW1ib2xzPWhhc1VuaWNvZGUoc3RyaW5nKT9zdHJpbmdUb0FycmF5KHN0cmluZyk6dW5kZWZpbmVkO3ZhciBjaHI9c3RyU3ltYm9scz9zdHJTeW1ib2xzWzBdOnN0cmluZy5jaGFyQXQoMCk7dmFyIHRyYWlsaW5nPXN0clN5bWJvbHM/Y2FzdFNsaWNlKHN0clN5bWJvbHMsMSkuam9pbignJyk6c3RyaW5nLnNsaWNlKDEpO3JldHVybiBjaHJbbWV0aG9kTmFtZV0oKSt0cmFpbGluZzt9O30vKipcbiAgICAgICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIGxpa2UgYF8uY2FtZWxDYXNlYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRvIGNvbWJpbmUgZWFjaCB3b3JkLlxuICAgICAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjb21wb3VuZGVyIGZ1bmN0aW9uLlxuICAgICAgICAgKi9mdW5jdGlvbiBjcmVhdGVDb21wb3VuZGVyKGNhbGxiYWNrKXtyZXR1cm4gZnVuY3Rpb24oc3RyaW5nKXtyZXR1cm4gYXJyYXlSZWR1Y2Uod29yZHMoZGVidXJyKHN0cmluZykucmVwbGFjZShyZUFwb3MsJycpKSxjYWxsYmFjaywnJyk7fTt9LyoqXG4gICAgICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHByb2R1Y2VzIGFuIGluc3RhbmNlIG9mIGBDdG9yYCByZWdhcmRsZXNzIG9mXG4gICAgICAgICAqIHdoZXRoZXIgaXQgd2FzIGludm9rZWQgYXMgcGFydCBvZiBhIGBuZXdgIGV4cHJlc3Npb24gb3IgYnkgYGNhbGxgIG9yIGBhcHBseWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IEN0b3IgVGhlIGNvbnN0cnVjdG9yIHRvIHdyYXAuXG4gICAgICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHdyYXBwZWQgZnVuY3Rpb24uXG4gICAgICAgICAqL2Z1bmN0aW9uIGNyZWF0ZUN0b3IoQ3Rvcil7cmV0dXJuIGZ1bmN0aW9uKCl7Ly8gVXNlIGEgYHN3aXRjaGAgc3RhdGVtZW50IHRvIHdvcmsgd2l0aCBjbGFzcyBjb25zdHJ1Y3RvcnMuIFNlZVxuLy8gaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtZWNtYXNjcmlwdC1mdW5jdGlvbi1vYmplY3RzLWNhbGwtdGhpc2FyZ3VtZW50LWFyZ3VtZW50c2xpc3Rcbi8vIGZvciBtb3JlIGRldGFpbHMuXG52YXIgYXJncz1hcmd1bWVudHM7c3dpdGNoKGFyZ3MubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIG5ldyBDdG9yKCk7Y2FzZSAxOnJldHVybiBuZXcgQ3RvcihhcmdzWzBdKTtjYXNlIDI6cmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0sYXJnc1sxXSk7Y2FzZSAzOnJldHVybiBuZXcgQ3RvcihhcmdzWzBdLGFyZ3NbMV0sYXJnc1syXSk7Y2FzZSA0OnJldHVybiBuZXcgQ3RvcihhcmdzWzBdLGFyZ3NbMV0sYXJnc1syXSxhcmdzWzNdKTtjYXNlIDU6cmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0sYXJnc1sxXSxhcmdzWzJdLGFyZ3NbM10sYXJnc1s0XSk7Y2FzZSA2OnJldHVybiBuZXcgQ3RvcihhcmdzWzBdLGFyZ3NbMV0sYXJnc1syXSxhcmdzWzNdLGFyZ3NbNF0sYXJnc1s1XSk7Y2FzZSA3OnJldHVybiBuZXcgQ3RvcihhcmdzWzBdLGFyZ3NbMV0sYXJnc1syXSxhcmdzWzNdLGFyZ3NbNF0sYXJnc1s1XSxhcmdzWzZdKTt9dmFyIHRoaXNCaW5kaW5nPWJhc2VDcmVhdGUoQ3Rvci5wcm90b3R5cGUpLHJlc3VsdD1DdG9yLmFwcGx5KHRoaXNCaW5kaW5nLGFyZ3MpOy8vIE1pbWljIHRoZSBjb25zdHJ1Y3RvcidzIGByZXR1cm5gIGJlaGF2aW9yLlxuLy8gU2VlIGh0dHBzOi8vZXM1LmdpdGh1Yi5pby8jeDEzLjIuMiBmb3IgbW9yZSBkZXRhaWxzLlxucmV0dXJuIGlzT2JqZWN0KHJlc3VsdCk/cmVzdWx0OnRoaXNCaW5kaW5nO307fS8qKlxuICAgICAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCB3cmFwcyBgZnVuY2AgdG8gZW5hYmxlIGN1cnJ5aW5nLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBjcmVhdGVXcmFwYCBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gYXJpdHkgVGhlIGFyaXR5IG9mIGBmdW5jYC5cbiAgICAgICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgd3JhcHBlZCBmdW5jdGlvbi5cbiAgICAgICAgICovZnVuY3Rpb24gY3JlYXRlQ3VycnkoZnVuYyxiaXRtYXNrLGFyaXR5KXt2YXIgQ3Rvcj1jcmVhdGVDdG9yKGZ1bmMpO2Z1bmN0aW9uIHdyYXBwZXIoKXt2YXIgbGVuZ3RoPWFyZ3VtZW50cy5sZW5ndGgsYXJncz1BcnJheShsZW5ndGgpLGluZGV4PWxlbmd0aCxwbGFjZWhvbGRlcj1nZXRIb2xkZXIod3JhcHBlcik7d2hpbGUoaW5kZXgtLSl7YXJnc1tpbmRleF09YXJndW1lbnRzW2luZGV4XTt9dmFyIGhvbGRlcnM9bGVuZ3RoPDMmJmFyZ3NbMF0hPT1wbGFjZWhvbGRlciYmYXJnc1tsZW5ndGgtMV0hPT1wbGFjZWhvbGRlcj9bXTpyZXBsYWNlSG9sZGVycyhhcmdzLHBsYWNlaG9sZGVyKTtsZW5ndGgtPWhvbGRlcnMubGVuZ3RoO2lmKGxlbmd0aDxhcml0eSl7cmV0dXJuIGNyZWF0ZVJlY3VycnkoZnVuYyxiaXRtYXNrLGNyZWF0ZUh5YnJpZCx3cmFwcGVyLnBsYWNlaG9sZGVyLHVuZGVmaW5lZCxhcmdzLGhvbGRlcnMsdW5kZWZpbmVkLHVuZGVmaW5lZCxhcml0eS1sZW5ndGgpO312YXIgZm49dGhpcyYmdGhpcyE9PXJvb3QmJnRoaXMgaW5zdGFuY2VvZiB3cmFwcGVyP0N0b3I6ZnVuYztyZXR1cm4gYXBwbHkoZm4sdGhpcyxhcmdzKTt9cmV0dXJuIHdyYXBwZXI7fS8qKlxuICAgICAgICAgKiBDcmVhdGVzIGEgYF8uZmluZGAgb3IgYF8uZmluZExhc3RgIGZ1bmN0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmaW5kSW5kZXhGdW5jIFRoZSBmdW5jdGlvbiB0byBmaW5kIHRoZSBjb2xsZWN0aW9uIGluZGV4LlxuICAgICAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmaW5kIGZ1bmN0aW9uLlxuICAgICAgICAgKi9mdW5jdGlvbiBjcmVhdGVGaW5kKGZpbmRJbmRleEZ1bmMpe3JldHVybiBmdW5jdGlvbihjb2xsZWN0aW9uLHByZWRpY2F0ZSxmcm9tSW5kZXgpe3ZhciBpdGVyYWJsZT1PYmplY3QoY29sbGVjdGlvbik7aWYoIWlzQXJyYXlMaWtlKGNvbGxlY3Rpb24pKXt2YXIgaXRlcmF0ZWU9Z2V0SXRlcmF0ZWUocHJlZGljYXRlLDMpO2NvbGxlY3Rpb249a2V5cyhjb2xsZWN0aW9uKTtwcmVkaWNhdGU9ZnVuY3Rpb24gcHJlZGljYXRlKGtleSl7cmV0dXJuIGl0ZXJhdGVlKGl0ZXJhYmxlW2tleV0sa2V5LGl0ZXJhYmxlKTt9O312YXIgaW5kZXg9ZmluZEluZGV4RnVuYyhjb2xsZWN0aW9uLHByZWRpY2F0ZSxmcm9tSW5kZXgpO3JldHVybiBpbmRleD4tMT9pdGVyYWJsZVtpdGVyYXRlZT9jb2xsZWN0aW9uW2luZGV4XTppbmRleF06dW5kZWZpbmVkO307fS8qKlxuICAgICAgICAgKiBDcmVhdGVzIGEgYF8uZmxvd2Agb3IgYF8uZmxvd1JpZ2h0YCBmdW5jdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQHBhcmFtIHtib29sZWFufSBbZnJvbVJpZ2h0XSBTcGVjaWZ5IGl0ZXJhdGluZyBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gICAgICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZsb3cgZnVuY3Rpb24uXG4gICAgICAgICAqL2Z1bmN0aW9uIGNyZWF0ZUZsb3coZnJvbVJpZ2h0KXtyZXR1cm4gZmxhdFJlc3QoZnVuY3Rpb24oZnVuY3Mpe3ZhciBsZW5ndGg9ZnVuY3MubGVuZ3RoLGluZGV4PWxlbmd0aCxwcmVyZXE9TG9kYXNoV3JhcHBlci5wcm90b3R5cGUudGhydTtpZihmcm9tUmlnaHQpe2Z1bmNzLnJldmVyc2UoKTt9d2hpbGUoaW5kZXgtLSl7dmFyIGZ1bmM9ZnVuY3NbaW5kZXhdO2lmKHR5cGVvZiBmdW5jIT09J2Z1bmN0aW9uJyl7dGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO31pZihwcmVyZXEmJiF3cmFwcGVyJiZnZXRGdW5jTmFtZShmdW5jKT09J3dyYXBwZXInKXt2YXIgd3JhcHBlcj1uZXcgTG9kYXNoV3JhcHBlcihbXSx0cnVlKTt9fWluZGV4PXdyYXBwZXI/aW5kZXg6bGVuZ3RoO3doaWxlKCsraW5kZXg8bGVuZ3RoKXtmdW5jPWZ1bmNzW2luZGV4XTt2YXIgZnVuY05hbWU9Z2V0RnVuY05hbWUoZnVuYyksZGF0YT1mdW5jTmFtZT09J3dyYXBwZXInP2dldERhdGEoZnVuYyk6dW5kZWZpbmVkO2lmKGRhdGEmJmlzTGF6aWFibGUoZGF0YVswXSkmJmRhdGFbMV09PShXUkFQX0FSWV9GTEFHfFdSQVBfQ1VSUllfRkxBR3xXUkFQX1BBUlRJQUxfRkxBR3xXUkFQX1JFQVJHX0ZMQUcpJiYhZGF0YVs0XS5sZW5ndGgmJmRhdGFbOV09PTEpe3dyYXBwZXI9d3JhcHBlcltnZXRGdW5jTmFtZShkYXRhWzBdKV0uYXBwbHkod3JhcHBlcixkYXRhWzNdKTt9ZWxzZXt3cmFwcGVyPWZ1bmMubGVuZ3RoPT0xJiZpc0xhemlhYmxlKGZ1bmMpP3dyYXBwZXJbZnVuY05hbWVdKCk6d3JhcHBlci50aHJ1KGZ1bmMpO319cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGFyZ3M9YXJndW1lbnRzLHZhbHVlPWFyZ3NbMF07aWYod3JhcHBlciYmYXJncy5sZW5ndGg9PTEmJmlzQXJyYXkodmFsdWUpKXtyZXR1cm4gd3JhcHBlci5wbGFudCh2YWx1ZSkudmFsdWUoKTt9dmFyIGluZGV4PTAscmVzdWx0PWxlbmd0aD9mdW5jc1tpbmRleF0uYXBwbHkodGhpcyxhcmdzKTp2YWx1ZTt3aGlsZSgrK2luZGV4PGxlbmd0aCl7cmVzdWx0PWZ1bmNzW2luZGV4XS5jYWxsKHRoaXMscmVzdWx0KTt9cmV0dXJuIHJlc3VsdDt9O30pO30vKipcbiAgICAgICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgd3JhcHMgYGZ1bmNgIHRvIGludm9rZSBpdCB3aXRoIG9wdGlvbmFsIGB0aGlzYFxuICAgICAgICAgKiBiaW5kaW5nIG9mIGB0aGlzQXJnYCwgcGFydGlhbCBhcHBsaWNhdGlvbiwgYW5kIGN1cnJ5aW5nLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufHN0cmluZ30gZnVuYyBUaGUgZnVuY3Rpb24gb3IgbWV0aG9kIG5hbWUgdG8gd3JhcC5cbiAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgY3JlYXRlV3JhcGAgZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgICAgICogQHBhcmFtIHsqfSBbdGhpc0FyZ10gVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAgICAgICAgICogQHBhcmFtIHtBcnJheX0gW3BhcnRpYWxzXSBUaGUgYXJndW1lbnRzIHRvIHByZXBlbmQgdG8gdGhvc2UgcHJvdmlkZWQgdG9cbiAgICAgICAgICogIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IFtob2xkZXJzXSBUaGUgYHBhcnRpYWxzYCBwbGFjZWhvbGRlciBpbmRleGVzLlxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBbcGFydGlhbHNSaWdodF0gVGhlIGFyZ3VtZW50cyB0byBhcHBlbmQgdG8gdGhvc2UgcHJvdmlkZWRcbiAgICAgICAgICogIHRvIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IFtob2xkZXJzUmlnaHRdIFRoZSBgcGFydGlhbHNSaWdodGAgcGxhY2Vob2xkZXIgaW5kZXhlcy5cbiAgICAgICAgICogQHBhcmFtIHtBcnJheX0gW2FyZ1Bvc10gVGhlIGFyZ3VtZW50IHBvc2l0aW9ucyBvZiB0aGUgbmV3IGZ1bmN0aW9uLlxuICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gW2FyeV0gVGhlIGFyaXR5IGNhcCBvZiBgZnVuY2AuXG4gICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbYXJpdHldIFRoZSBhcml0eSBvZiBgZnVuY2AuXG4gICAgICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHdyYXBwZWQgZnVuY3Rpb24uXG4gICAgICAgICAqL2Z1bmN0aW9uIGNyZWF0ZUh5YnJpZChmdW5jLGJpdG1hc2ssdGhpc0FyZyxwYXJ0aWFscyxob2xkZXJzLHBhcnRpYWxzUmlnaHQsaG9sZGVyc1JpZ2h0LGFyZ1BvcyxhcnksYXJpdHkpe3ZhciBpc0FyeT1iaXRtYXNrJldSQVBfQVJZX0ZMQUcsaXNCaW5kPWJpdG1hc2smV1JBUF9CSU5EX0ZMQUcsaXNCaW5kS2V5PWJpdG1hc2smV1JBUF9CSU5EX0tFWV9GTEFHLGlzQ3VycmllZD1iaXRtYXNrJihXUkFQX0NVUlJZX0ZMQUd8V1JBUF9DVVJSWV9SSUdIVF9GTEFHKSxpc0ZsaXA9Yml0bWFzayZXUkFQX0ZMSVBfRkxBRyxDdG9yPWlzQmluZEtleT91bmRlZmluZWQ6Y3JlYXRlQ3RvcihmdW5jKTtmdW5jdGlvbiB3cmFwcGVyKCl7dmFyIGxlbmd0aD1hcmd1bWVudHMubGVuZ3RoLGFyZ3M9QXJyYXkobGVuZ3RoKSxpbmRleD1sZW5ndGg7d2hpbGUoaW5kZXgtLSl7YXJnc1tpbmRleF09YXJndW1lbnRzW2luZGV4XTt9aWYoaXNDdXJyaWVkKXt2YXIgcGxhY2Vob2xkZXI9Z2V0SG9sZGVyKHdyYXBwZXIpLGhvbGRlcnNDb3VudD1jb3VudEhvbGRlcnMoYXJncyxwbGFjZWhvbGRlcik7fWlmKHBhcnRpYWxzKXthcmdzPWNvbXBvc2VBcmdzKGFyZ3MscGFydGlhbHMsaG9sZGVycyxpc0N1cnJpZWQpO31pZihwYXJ0aWFsc1JpZ2h0KXthcmdzPWNvbXBvc2VBcmdzUmlnaHQoYXJncyxwYXJ0aWFsc1JpZ2h0LGhvbGRlcnNSaWdodCxpc0N1cnJpZWQpO31sZW5ndGgtPWhvbGRlcnNDb3VudDtpZihpc0N1cnJpZWQmJmxlbmd0aDxhcml0eSl7dmFyIG5ld0hvbGRlcnM9cmVwbGFjZUhvbGRlcnMoYXJncyxwbGFjZWhvbGRlcik7cmV0dXJuIGNyZWF0ZVJlY3VycnkoZnVuYyxiaXRtYXNrLGNyZWF0ZUh5YnJpZCx3cmFwcGVyLnBsYWNlaG9sZGVyLHRoaXNBcmcsYXJncyxuZXdIb2xkZXJzLGFyZ1BvcyxhcnksYXJpdHktbGVuZ3RoKTt9dmFyIHRoaXNCaW5kaW5nPWlzQmluZD90aGlzQXJnOnRoaXMsZm49aXNCaW5kS2V5P3RoaXNCaW5kaW5nW2Z1bmNdOmZ1bmM7bGVuZ3RoPWFyZ3MubGVuZ3RoO2lmKGFyZ1Bvcyl7YXJncz1yZW9yZGVyKGFyZ3MsYXJnUG9zKTt9ZWxzZSBpZihpc0ZsaXAmJmxlbmd0aD4xKXthcmdzLnJldmVyc2UoKTt9aWYoaXNBcnkmJmFyeTxsZW5ndGgpe2FyZ3MubGVuZ3RoPWFyeTt9aWYodGhpcyYmdGhpcyE9PXJvb3QmJnRoaXMgaW5zdGFuY2VvZiB3cmFwcGVyKXtmbj1DdG9yfHxjcmVhdGVDdG9yKGZuKTt9cmV0dXJuIGZuLmFwcGx5KHRoaXNCaW5kaW5nLGFyZ3MpO31yZXR1cm4gd3JhcHBlcjt9LyoqXG4gICAgICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiBsaWtlIGBfLmludmVydEJ5YC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gc2V0dGVyIFRoZSBmdW5jdGlvbiB0byBzZXQgYWNjdW11bGF0b3IgdmFsdWVzLlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSB0b0l0ZXJhdGVlIFRoZSBmdW5jdGlvbiB0byByZXNvbHZlIGl0ZXJhdGVlcy5cbiAgICAgICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgaW52ZXJ0ZXIgZnVuY3Rpb24uXG4gICAgICAgICAqL2Z1bmN0aW9uIGNyZWF0ZUludmVydGVyKHNldHRlcix0b0l0ZXJhdGVlKXtyZXR1cm4gZnVuY3Rpb24ob2JqZWN0LGl0ZXJhdGVlKXtyZXR1cm4gYmFzZUludmVydGVyKG9iamVjdCxzZXR0ZXIsdG9JdGVyYXRlZShpdGVyYXRlZSkse30pO307fS8qKlxuICAgICAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBwZXJmb3JtcyBhIG1hdGhlbWF0aWNhbCBvcGVyYXRpb24gb24gdHdvIHZhbHVlcy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gb3BlcmF0b3IgVGhlIGZ1bmN0aW9uIHRvIHBlcmZvcm0gdGhlIG9wZXJhdGlvbi5cbiAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IFtkZWZhdWx0VmFsdWVdIFRoZSB2YWx1ZSB1c2VkIGZvciBgdW5kZWZpbmVkYCBhcmd1bWVudHMuXG4gICAgICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IG1hdGhlbWF0aWNhbCBvcGVyYXRpb24gZnVuY3Rpb24uXG4gICAgICAgICAqL2Z1bmN0aW9uIGNyZWF0ZU1hdGhPcGVyYXRpb24ob3BlcmF0b3IsZGVmYXVsdFZhbHVlKXtyZXR1cm4gZnVuY3Rpb24odmFsdWUsb3RoZXIpe3ZhciByZXN1bHQ7aWYodmFsdWU9PT11bmRlZmluZWQmJm90aGVyPT09dW5kZWZpbmVkKXtyZXR1cm4gZGVmYXVsdFZhbHVlO31pZih2YWx1ZSE9PXVuZGVmaW5lZCl7cmVzdWx0PXZhbHVlO31pZihvdGhlciE9PXVuZGVmaW5lZCl7aWYocmVzdWx0PT09dW5kZWZpbmVkKXtyZXR1cm4gb3RoZXI7fWlmKHR5cGVvZiB2YWx1ZT09PSdzdHJpbmcnfHx0eXBlb2Ygb3RoZXI9PT0nc3RyaW5nJyl7dmFsdWU9YmFzZVRvU3RyaW5nKHZhbHVlKTtvdGhlcj1iYXNlVG9TdHJpbmcob3RoZXIpO31lbHNle3ZhbHVlPWJhc2VUb051bWJlcih2YWx1ZSk7b3RoZXI9YmFzZVRvTnVtYmVyKG90aGVyKTt9cmVzdWx0PW9wZXJhdG9yKHZhbHVlLG90aGVyKTt9cmV0dXJuIHJlc3VsdDt9O30vKipcbiAgICAgICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIGxpa2UgYF8ub3ZlcmAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGFycmF5RnVuYyBUaGUgZnVuY3Rpb24gdG8gaXRlcmF0ZSBvdmVyIGl0ZXJhdGVlcy5cbiAgICAgICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgb3ZlciBmdW5jdGlvbi5cbiAgICAgICAgICovZnVuY3Rpb24gY3JlYXRlT3ZlcihhcnJheUZ1bmMpe3JldHVybiBmbGF0UmVzdChmdW5jdGlvbihpdGVyYXRlZXMpe2l0ZXJhdGVlcz1hcnJheU1hcChpdGVyYXRlZXMsYmFzZVVuYXJ5KGdldEl0ZXJhdGVlKCkpKTtyZXR1cm4gYmFzZVJlc3QoZnVuY3Rpb24oYXJncyl7dmFyIHRoaXNBcmc9dGhpcztyZXR1cm4gYXJyYXlGdW5jKGl0ZXJhdGVlcyxmdW5jdGlvbihpdGVyYXRlZSl7cmV0dXJuIGFwcGx5KGl0ZXJhdGVlLHRoaXNBcmcsYXJncyk7fSk7fSk7fSk7fS8qKlxuICAgICAgICAgKiBDcmVhdGVzIHRoZSBwYWRkaW5nIGZvciBgc3RyaW5nYCBiYXNlZCBvbiBgbGVuZ3RoYC4gVGhlIGBjaGFyc2Agc3RyaW5nXG4gICAgICAgICAqIGlzIHRydW5jYXRlZCBpZiB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgZXhjZWVkcyBgbGVuZ3RoYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aCBUaGUgcGFkZGluZyBsZW5ndGguXG4gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbY2hhcnM9JyAnXSBUaGUgc3RyaW5nIHVzZWQgYXMgcGFkZGluZy5cbiAgICAgICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcGFkZGluZyBmb3IgYHN0cmluZ2AuXG4gICAgICAgICAqL2Z1bmN0aW9uIGNyZWF0ZVBhZGRpbmcobGVuZ3RoLGNoYXJzKXtjaGFycz1jaGFycz09PXVuZGVmaW5lZD8nICc6YmFzZVRvU3RyaW5nKGNoYXJzKTt2YXIgY2hhcnNMZW5ndGg9Y2hhcnMubGVuZ3RoO2lmKGNoYXJzTGVuZ3RoPDIpe3JldHVybiBjaGFyc0xlbmd0aD9iYXNlUmVwZWF0KGNoYXJzLGxlbmd0aCk6Y2hhcnM7fXZhciByZXN1bHQ9YmFzZVJlcGVhdChjaGFycyxuYXRpdmVDZWlsKGxlbmd0aC9zdHJpbmdTaXplKGNoYXJzKSkpO3JldHVybiBoYXNVbmljb2RlKGNoYXJzKT9jYXN0U2xpY2Uoc3RyaW5nVG9BcnJheShyZXN1bHQpLDAsbGVuZ3RoKS5qb2luKCcnKTpyZXN1bHQuc2xpY2UoMCxsZW5ndGgpO30vKipcbiAgICAgICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgd3JhcHMgYGZ1bmNgIHRvIGludm9rZSBpdCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZ1xuICAgICAgICAgKiBvZiBgdGhpc0FyZ2AgYW5kIGBwYXJ0aWFsc2AgcHJlcGVuZGVkIHRvIHRoZSBhcmd1bWVudHMgaXQgcmVjZWl2ZXMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdyYXAuXG4gICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGNyZWF0ZVdyYXBgIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gdGhpc0FyZyBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBwYXJ0aWFscyBUaGUgYXJndW1lbnRzIHRvIHByZXBlbmQgdG8gdGhvc2UgcHJvdmlkZWQgdG9cbiAgICAgICAgICogIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHdyYXBwZWQgZnVuY3Rpb24uXG4gICAgICAgICAqL2Z1bmN0aW9uIGNyZWF0ZVBhcnRpYWwoZnVuYyxiaXRtYXNrLHRoaXNBcmcscGFydGlhbHMpe3ZhciBpc0JpbmQ9Yml0bWFzayZXUkFQX0JJTkRfRkxBRyxDdG9yPWNyZWF0ZUN0b3IoZnVuYyk7ZnVuY3Rpb24gd3JhcHBlcigpe3ZhciBhcmdzSW5kZXg9LTEsYXJnc0xlbmd0aD1hcmd1bWVudHMubGVuZ3RoLGxlZnRJbmRleD0tMSxsZWZ0TGVuZ3RoPXBhcnRpYWxzLmxlbmd0aCxhcmdzPUFycmF5KGxlZnRMZW5ndGgrYXJnc0xlbmd0aCksZm49dGhpcyYmdGhpcyE9PXJvb3QmJnRoaXMgaW5zdGFuY2VvZiB3cmFwcGVyP0N0b3I6ZnVuYzt3aGlsZSgrK2xlZnRJbmRleDxsZWZ0TGVuZ3RoKXthcmdzW2xlZnRJbmRleF09cGFydGlhbHNbbGVmdEluZGV4XTt9d2hpbGUoYXJnc0xlbmd0aC0tKXthcmdzW2xlZnRJbmRleCsrXT1hcmd1bWVudHNbKythcmdzSW5kZXhdO31yZXR1cm4gYXBwbHkoZm4saXNCaW5kP3RoaXNBcmc6dGhpcyxhcmdzKTt9cmV0dXJuIHdyYXBwZXI7fS8qKlxuICAgICAgICAgKiBDcmVhdGVzIGEgYF8ucmFuZ2VgIG9yIGBfLnJhbmdlUmlnaHRgIGZ1bmN0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtmcm9tUmlnaHRdIFNwZWNpZnkgaXRlcmF0aW5nIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAgICAgICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgcmFuZ2UgZnVuY3Rpb24uXG4gICAgICAgICAqL2Z1bmN0aW9uIGNyZWF0ZVJhbmdlKGZyb21SaWdodCl7cmV0dXJuIGZ1bmN0aW9uKHN0YXJ0LGVuZCxzdGVwKXtpZihzdGVwJiZ0eXBlb2Ygc3RlcCE9PSdudW1iZXInJiZpc0l0ZXJhdGVlQ2FsbChzdGFydCxlbmQsc3RlcCkpe2VuZD1zdGVwPXVuZGVmaW5lZDt9Ly8gRW5zdXJlIHRoZSBzaWduIG9mIGAtMGAgaXMgcHJlc2VydmVkLlxuc3RhcnQ9dG9GaW5pdGUoc3RhcnQpO2lmKGVuZD09PXVuZGVmaW5lZCl7ZW5kPXN0YXJ0O3N0YXJ0PTA7fWVsc2V7ZW5kPXRvRmluaXRlKGVuZCk7fXN0ZXA9c3RlcD09PXVuZGVmaW5lZD9zdGFydDxlbmQ/MTotMTp0b0Zpbml0ZShzdGVwKTtyZXR1cm4gYmFzZVJhbmdlKHN0YXJ0LGVuZCxzdGVwLGZyb21SaWdodCk7fTt9LyoqXG4gICAgICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHBlcmZvcm1zIGEgcmVsYXRpb25hbCBvcGVyYXRpb24gb24gdHdvIHZhbHVlcy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gb3BlcmF0b3IgVGhlIGZ1bmN0aW9uIHRvIHBlcmZvcm0gdGhlIG9wZXJhdGlvbi5cbiAgICAgICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgcmVsYXRpb25hbCBvcGVyYXRpb24gZnVuY3Rpb24uXG4gICAgICAgICAqL2Z1bmN0aW9uIGNyZWF0ZVJlbGF0aW9uYWxPcGVyYXRpb24ob3BlcmF0b3Ipe3JldHVybiBmdW5jdGlvbih2YWx1ZSxvdGhlcil7aWYoISh0eXBlb2YgdmFsdWU9PT0nc3RyaW5nJyYmdHlwZW9mIG90aGVyPT09J3N0cmluZycpKXt2YWx1ZT10b051bWJlcih2YWx1ZSk7b3RoZXI9dG9OdW1iZXIob3RoZXIpO31yZXR1cm4gb3BlcmF0b3IodmFsdWUsb3RoZXIpO307fS8qKlxuICAgICAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCB3cmFwcyBgZnVuY2AgdG8gY29udGludWUgY3VycnlpbmcuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdyYXAuXG4gICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGNyZWF0ZVdyYXBgIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHdyYXBGdW5jIFRoZSBmdW5jdGlvbiB0byBjcmVhdGUgdGhlIGBmdW5jYCB3cmFwcGVyLlxuICAgICAgICAgKiBAcGFyYW0geyp9IHBsYWNlaG9sZGVyIFRoZSBwbGFjZWhvbGRlciB2YWx1ZS5cbiAgICAgICAgICogQHBhcmFtIHsqfSBbdGhpc0FyZ10gVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAgICAgICAgICogQHBhcmFtIHtBcnJheX0gW3BhcnRpYWxzXSBUaGUgYXJndW1lbnRzIHRvIHByZXBlbmQgdG8gdGhvc2UgcHJvdmlkZWQgdG9cbiAgICAgICAgICogIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IFtob2xkZXJzXSBUaGUgYHBhcnRpYWxzYCBwbGFjZWhvbGRlciBpbmRleGVzLlxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBbYXJnUG9zXSBUaGUgYXJndW1lbnQgcG9zaXRpb25zIG9mIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbYXJ5XSBUaGUgYXJpdHkgY2FwIG9mIGBmdW5jYC5cbiAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IFthcml0eV0gVGhlIGFyaXR5IG9mIGBmdW5jYC5cbiAgICAgICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgd3JhcHBlZCBmdW5jdGlvbi5cbiAgICAgICAgICovZnVuY3Rpb24gY3JlYXRlUmVjdXJyeShmdW5jLGJpdG1hc2ssd3JhcEZ1bmMscGxhY2Vob2xkZXIsdGhpc0FyZyxwYXJ0aWFscyxob2xkZXJzLGFyZ1BvcyxhcnksYXJpdHkpe3ZhciBpc0N1cnJ5PWJpdG1hc2smV1JBUF9DVVJSWV9GTEFHLG5ld0hvbGRlcnM9aXNDdXJyeT9ob2xkZXJzOnVuZGVmaW5lZCxuZXdIb2xkZXJzUmlnaHQ9aXNDdXJyeT91bmRlZmluZWQ6aG9sZGVycyxuZXdQYXJ0aWFscz1pc0N1cnJ5P3BhcnRpYWxzOnVuZGVmaW5lZCxuZXdQYXJ0aWFsc1JpZ2h0PWlzQ3Vycnk/dW5kZWZpbmVkOnBhcnRpYWxzO2JpdG1hc2t8PWlzQ3Vycnk/V1JBUF9QQVJUSUFMX0ZMQUc6V1JBUF9QQVJUSUFMX1JJR0hUX0ZMQUc7Yml0bWFzayY9fihpc0N1cnJ5P1dSQVBfUEFSVElBTF9SSUdIVF9GTEFHOldSQVBfUEFSVElBTF9GTEFHKTtpZighKGJpdG1hc2smV1JBUF9DVVJSWV9CT1VORF9GTEFHKSl7Yml0bWFzayY9fihXUkFQX0JJTkRfRkxBR3xXUkFQX0JJTkRfS0VZX0ZMQUcpO312YXIgbmV3RGF0YT1bZnVuYyxiaXRtYXNrLHRoaXNBcmcsbmV3UGFydGlhbHMsbmV3SG9sZGVycyxuZXdQYXJ0aWFsc1JpZ2h0LG5ld0hvbGRlcnNSaWdodCxhcmdQb3MsYXJ5LGFyaXR5XTt2YXIgcmVzdWx0PXdyYXBGdW5jLmFwcGx5KHVuZGVmaW5lZCxuZXdEYXRhKTtpZihpc0xhemlhYmxlKGZ1bmMpKXtzZXREYXRhKHJlc3VsdCxuZXdEYXRhKTt9cmVzdWx0LnBsYWNlaG9sZGVyPXBsYWNlaG9sZGVyO3JldHVybiBzZXRXcmFwVG9TdHJpbmcocmVzdWx0LGZ1bmMsYml0bWFzayk7fS8qKlxuICAgICAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gbGlrZSBgXy5yb3VuZGAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBtZXRob2ROYW1lIFRoZSBuYW1lIG9mIHRoZSBgTWF0aGAgbWV0aG9kIHRvIHVzZSB3aGVuIHJvdW5kaW5nLlxuICAgICAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyByb3VuZCBmdW5jdGlvbi5cbiAgICAgICAgICovZnVuY3Rpb24gY3JlYXRlUm91bmQobWV0aG9kTmFtZSl7dmFyIGZ1bmM9TWF0aFttZXRob2ROYW1lXTtyZXR1cm4gZnVuY3Rpb24obnVtYmVyLHByZWNpc2lvbil7bnVtYmVyPXRvTnVtYmVyKG51bWJlcik7cHJlY2lzaW9uPXByZWNpc2lvbj09bnVsbD8wOm5hdGl2ZU1pbih0b0ludGVnZXIocHJlY2lzaW9uKSwyOTIpO2lmKHByZWNpc2lvbil7Ly8gU2hpZnQgd2l0aCBleHBvbmVudGlhbCBub3RhdGlvbiB0byBhdm9pZCBmbG9hdGluZy1wb2ludCBpc3N1ZXMuXG4vLyBTZWUgW01ETl0oaHR0cHM6Ly9tZG4uaW8vcm91bmQjRXhhbXBsZXMpIGZvciBtb3JlIGRldGFpbHMuXG52YXIgcGFpcj0odG9TdHJpbmcobnVtYmVyKSsnZScpLnNwbGl0KCdlJyksdmFsdWU9ZnVuYyhwYWlyWzBdKydlJysoK3BhaXJbMV0rcHJlY2lzaW9uKSk7cGFpcj0odG9TdHJpbmcodmFsdWUpKydlJykuc3BsaXQoJ2UnKTtyZXR1cm4rKHBhaXJbMF0rJ2UnKygrcGFpclsxXS1wcmVjaXNpb24pKTt9cmV0dXJuIGZ1bmMobnVtYmVyKTt9O30vKipcbiAgICAgICAgICogQ3JlYXRlcyBhIHNldCBvYmplY3Qgb2YgYHZhbHVlc2AuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgdmFsdWVzIHRvIGFkZCB0byB0aGUgc2V0LlxuICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgc2V0LlxuICAgICAgICAgKi92YXIgY3JlYXRlU2V0PSEoU2V0JiYxL3NldFRvQXJyYXkobmV3IFNldChbLC0wXSkpWzFdPT1JTkZJTklUWSk/bm9vcDpmdW5jdGlvbih2YWx1ZXMpe3JldHVybiBuZXcgU2V0KHZhbHVlcyk7fTsvKipcbiAgICAgICAqIENyZWF0ZXMgYSBgXy50b1BhaXJzYCBvciBgXy50b1BhaXJzSW5gIGZ1bmN0aW9uLlxuICAgICAgICpcbiAgICAgICAqIEBwcml2YXRlXG4gICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBrZXlzRnVuYyBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBrZXlzIG9mIGEgZ2l2ZW4gb2JqZWN0LlxuICAgICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgcGFpcnMgZnVuY3Rpb24uXG4gICAgICAgKi9mdW5jdGlvbiBjcmVhdGVUb1BhaXJzKGtleXNGdW5jKXtyZXR1cm4gZnVuY3Rpb24ob2JqZWN0KXt2YXIgdGFnPWdldFRhZyhvYmplY3QpO2lmKHRhZz09bWFwVGFnKXtyZXR1cm4gbWFwVG9BcnJheShvYmplY3QpO31pZih0YWc9PXNldFRhZyl7cmV0dXJuIHNldFRvUGFpcnMob2JqZWN0KTt9cmV0dXJuIGJhc2VUb1BhaXJzKG9iamVjdCxrZXlzRnVuYyhvYmplY3QpKTt9O30vKipcbiAgICAgICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgZWl0aGVyIGN1cnJpZXMgb3IgaW52b2tlcyBgZnVuY2Agd2l0aCBvcHRpb25hbFxuICAgICAgICAgKiBgdGhpc2AgYmluZGluZyBhbmQgcGFydGlhbGx5IGFwcGxpZWQgYXJndW1lbnRzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufHN0cmluZ30gZnVuYyBUaGUgZnVuY3Rpb24gb3IgbWV0aG9kIG5hbWUgdG8gd3JhcC5cbiAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuXG4gICAgICAgICAqICAgIDEgLSBgXy5iaW5kYFxuICAgICAgICAgKiAgICAyIC0gYF8uYmluZEtleWBcbiAgICAgICAgICogICAgNCAtIGBfLmN1cnJ5YCBvciBgXy5jdXJyeVJpZ2h0YCBvZiBhIGJvdW5kIGZ1bmN0aW9uXG4gICAgICAgICAqICAgIDggLSBgXy5jdXJyeWBcbiAgICAgICAgICogICAxNiAtIGBfLmN1cnJ5UmlnaHRgXG4gICAgICAgICAqICAgMzIgLSBgXy5wYXJ0aWFsYFxuICAgICAgICAgKiAgIDY0IC0gYF8ucGFydGlhbFJpZ2h0YFxuICAgICAgICAgKiAgMTI4IC0gYF8ucmVhcmdgXG4gICAgICAgICAqICAyNTYgLSBgXy5hcnlgXG4gICAgICAgICAqICA1MTIgLSBgXy5mbGlwYFxuICAgICAgICAgKiBAcGFyYW0geyp9IFt0aGlzQXJnXSBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBbcGFydGlhbHNdIFRoZSBhcmd1bWVudHMgdG8gYmUgcGFydGlhbGx5IGFwcGxpZWQuXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IFtob2xkZXJzXSBUaGUgYHBhcnRpYWxzYCBwbGFjZWhvbGRlciBpbmRleGVzLlxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBbYXJnUG9zXSBUaGUgYXJndW1lbnQgcG9zaXRpb25zIG9mIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbYXJ5XSBUaGUgYXJpdHkgY2FwIG9mIGBmdW5jYC5cbiAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IFthcml0eV0gVGhlIGFyaXR5IG9mIGBmdW5jYC5cbiAgICAgICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgd3JhcHBlZCBmdW5jdGlvbi5cbiAgICAgICAgICovZnVuY3Rpb24gY3JlYXRlV3JhcChmdW5jLGJpdG1hc2ssdGhpc0FyZyxwYXJ0aWFscyxob2xkZXJzLGFyZ1BvcyxhcnksYXJpdHkpe3ZhciBpc0JpbmRLZXk9Yml0bWFzayZXUkFQX0JJTkRfS0VZX0ZMQUc7aWYoIWlzQmluZEtleSYmdHlwZW9mIGZ1bmMhPT0nZnVuY3Rpb24nKXt0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7fXZhciBsZW5ndGg9cGFydGlhbHM/cGFydGlhbHMubGVuZ3RoOjA7aWYoIWxlbmd0aCl7Yml0bWFzayY9fihXUkFQX1BBUlRJQUxfRkxBR3xXUkFQX1BBUlRJQUxfUklHSFRfRkxBRyk7cGFydGlhbHM9aG9sZGVycz11bmRlZmluZWQ7fWFyeT1hcnk9PT11bmRlZmluZWQ/YXJ5Om5hdGl2ZU1heCh0b0ludGVnZXIoYXJ5KSwwKTthcml0eT1hcml0eT09PXVuZGVmaW5lZD9hcml0eTp0b0ludGVnZXIoYXJpdHkpO2xlbmd0aC09aG9sZGVycz9ob2xkZXJzLmxlbmd0aDowO2lmKGJpdG1hc2smV1JBUF9QQVJUSUFMX1JJR0hUX0ZMQUcpe3ZhciBwYXJ0aWFsc1JpZ2h0PXBhcnRpYWxzLGhvbGRlcnNSaWdodD1ob2xkZXJzO3BhcnRpYWxzPWhvbGRlcnM9dW5kZWZpbmVkO312YXIgZGF0YT1pc0JpbmRLZXk/dW5kZWZpbmVkOmdldERhdGEoZnVuYyk7dmFyIG5ld0RhdGE9W2Z1bmMsYml0bWFzayx0aGlzQXJnLHBhcnRpYWxzLGhvbGRlcnMscGFydGlhbHNSaWdodCxob2xkZXJzUmlnaHQsYXJnUG9zLGFyeSxhcml0eV07aWYoZGF0YSl7bWVyZ2VEYXRhKG5ld0RhdGEsZGF0YSk7fWZ1bmM9bmV3RGF0YVswXTtiaXRtYXNrPW5ld0RhdGFbMV07dGhpc0FyZz1uZXdEYXRhWzJdO3BhcnRpYWxzPW5ld0RhdGFbM107aG9sZGVycz1uZXdEYXRhWzRdO2FyaXR5PW5ld0RhdGFbOV09bmV3RGF0YVs5XT09PXVuZGVmaW5lZD9pc0JpbmRLZXk/MDpmdW5jLmxlbmd0aDpuYXRpdmVNYXgobmV3RGF0YVs5XS1sZW5ndGgsMCk7aWYoIWFyaXR5JiZiaXRtYXNrJihXUkFQX0NVUlJZX0ZMQUd8V1JBUF9DVVJSWV9SSUdIVF9GTEFHKSl7Yml0bWFzayY9fihXUkFQX0NVUlJZX0ZMQUd8V1JBUF9DVVJSWV9SSUdIVF9GTEFHKTt9aWYoIWJpdG1hc2t8fGJpdG1hc2s9PVdSQVBfQklORF9GTEFHKXt2YXIgcmVzdWx0PWNyZWF0ZUJpbmQoZnVuYyxiaXRtYXNrLHRoaXNBcmcpO31lbHNlIGlmKGJpdG1hc2s9PVdSQVBfQ1VSUllfRkxBR3x8Yml0bWFzaz09V1JBUF9DVVJSWV9SSUdIVF9GTEFHKXtyZXN1bHQ9Y3JlYXRlQ3VycnkoZnVuYyxiaXRtYXNrLGFyaXR5KTt9ZWxzZSBpZigoYml0bWFzaz09V1JBUF9QQVJUSUFMX0ZMQUd8fGJpdG1hc2s9PShXUkFQX0JJTkRfRkxBR3xXUkFQX1BBUlRJQUxfRkxBRykpJiYhaG9sZGVycy5sZW5ndGgpe3Jlc3VsdD1jcmVhdGVQYXJ0aWFsKGZ1bmMsYml0bWFzayx0aGlzQXJnLHBhcnRpYWxzKTt9ZWxzZXtyZXN1bHQ9Y3JlYXRlSHlicmlkLmFwcGx5KHVuZGVmaW5lZCxuZXdEYXRhKTt9dmFyIHNldHRlcj1kYXRhP2Jhc2VTZXREYXRhOnNldERhdGE7cmV0dXJuIHNldFdyYXBUb1N0cmluZyhzZXR0ZXIocmVzdWx0LG5ld0RhdGEpLGZ1bmMsYml0bWFzayk7fS8qKlxuICAgICAgICAgKiBVc2VkIGJ5IGBfLmRlZmF1bHRzYCB0byBjdXN0b21pemUgaXRzIGBfLmFzc2lnbkluYCB1c2UgdG8gYXNzaWduIHByb3BlcnRpZXNcbiAgICAgICAgICogb2Ygc291cmNlIG9iamVjdHMgdG8gdGhlIGRlc3RpbmF0aW9uIG9iamVjdCBmb3IgYWxsIGRlc3RpbmF0aW9uIHByb3BlcnRpZXNcbiAgICAgICAgICogdGhhdCByZXNvbHZlIHRvIGB1bmRlZmluZWRgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKiBAcGFyYW0geyp9IG9ialZhbHVlIFRoZSBkZXN0aW5hdGlvbiB2YWx1ZS5cbiAgICAgICAgICogQHBhcmFtIHsqfSBzcmNWYWx1ZSBUaGUgc291cmNlIHZhbHVlLlxuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgcGFyZW50IG9iamVjdCBvZiBgb2JqVmFsdWVgLlxuICAgICAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgdmFsdWUgdG8gYXNzaWduLlxuICAgICAgICAgKi9mdW5jdGlvbiBjdXN0b21EZWZhdWx0c0Fzc2lnbkluKG9ialZhbHVlLHNyY1ZhbHVlLGtleSxvYmplY3Qpe2lmKG9ialZhbHVlPT09dW5kZWZpbmVkfHxlcShvYmpWYWx1ZSxvYmplY3RQcm90b1trZXldKSYmIWhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LGtleSkpe3JldHVybiBzcmNWYWx1ZTt9cmV0dXJuIG9ialZhbHVlO30vKipcbiAgICAgICAgICogVXNlZCBieSBgXy5kZWZhdWx0c0RlZXBgIHRvIGN1c3RvbWl6ZSBpdHMgYF8ubWVyZ2VgIHVzZSB0byBtZXJnZSBzb3VyY2VcbiAgICAgICAgICogb2JqZWN0cyBpbnRvIGRlc3RpbmF0aW9uIG9iamVjdHMgdGhhdCBhcmUgcGFzc2VkIHRocnUuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gb2JqVmFsdWUgVGhlIGRlc3RpbmF0aW9uIHZhbHVlLlxuICAgICAgICAgKiBAcGFyYW0geyp9IHNyY1ZhbHVlIFRoZSBzb3VyY2UgdmFsdWUuXG4gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gbWVyZ2UuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIHBhcmVudCBvYmplY3Qgb2YgYG9ialZhbHVlYC5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgcGFyZW50IG9iamVjdCBvZiBgc3JjVmFsdWVgLlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gW3N0YWNrXSBUcmFja3MgdHJhdmVyc2VkIHNvdXJjZSB2YWx1ZXMgYW5kIHRoZWlyIG1lcmdlZFxuICAgICAgICAgKiAgY291bnRlcnBhcnRzLlxuICAgICAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgdmFsdWUgdG8gYXNzaWduLlxuICAgICAgICAgKi9mdW5jdGlvbiBjdXN0b21EZWZhdWx0c01lcmdlKG9ialZhbHVlLHNyY1ZhbHVlLGtleSxvYmplY3Qsc291cmNlLHN0YWNrKXtpZihpc09iamVjdChvYmpWYWx1ZSkmJmlzT2JqZWN0KHNyY1ZhbHVlKSl7Ly8gUmVjdXJzaXZlbHkgbWVyZ2Ugb2JqZWN0cyBhbmQgYXJyYXlzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG5zdGFjay5zZXQoc3JjVmFsdWUsb2JqVmFsdWUpO2Jhc2VNZXJnZShvYmpWYWx1ZSxzcmNWYWx1ZSx1bmRlZmluZWQsY3VzdG9tRGVmYXVsdHNNZXJnZSxzdGFjayk7c3RhY2tbJ2RlbGV0ZSddKHNyY1ZhbHVlKTt9cmV0dXJuIG9ialZhbHVlO30vKipcbiAgICAgICAgICogVXNlZCBieSBgXy5vbWl0YCB0byBjdXN0b21pemUgaXRzIGBfLmNsb25lRGVlcGAgdXNlIHRvIG9ubHkgY2xvbmUgcGxhaW5cbiAgICAgICAgICogb2JqZWN0cy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBpbnNwZWN0LlxuICAgICAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgdW5jbG9uZWQgdmFsdWUgb3IgYHVuZGVmaW5lZGAgdG8gZGVmZXIgY2xvbmluZyB0byBgXy5jbG9uZURlZXBgLlxuICAgICAgICAgKi9mdW5jdGlvbiBjdXN0b21PbWl0Q2xvbmUodmFsdWUpe3JldHVybiBpc1BsYWluT2JqZWN0KHZhbHVlKT91bmRlZmluZWQ6dmFsdWU7fS8qKlxuICAgICAgICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsRGVlcGAgZm9yIGFycmF5cyB3aXRoIHN1cHBvcnQgZm9yXG4gICAgICAgICAqIHBhcnRpYWwgZGVlcCBjb21wYXJpc29ucy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGNvbXBhcmUuXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IG90aGVyIFRoZSBvdGhlciBhcnJheSB0byBjb21wYXJlLlxuICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBiYXNlSXNFcXVhbGAgZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzdGFjayBUcmFja3MgdHJhdmVyc2VkIGBhcnJheWAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAgICAgICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBhcnJheXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAgICAgICAgICovZnVuY3Rpb24gZXF1YWxBcnJheXMoYXJyYXksb3RoZXIsYml0bWFzayxjdXN0b21pemVyLGVxdWFsRnVuYyxzdGFjayl7dmFyIGlzUGFydGlhbD1iaXRtYXNrJkNPTVBBUkVfUEFSVElBTF9GTEFHLGFyckxlbmd0aD1hcnJheS5sZW5ndGgsb3RoTGVuZ3RoPW90aGVyLmxlbmd0aDtpZihhcnJMZW5ndGghPW90aExlbmd0aCYmIShpc1BhcnRpYWwmJm90aExlbmd0aD5hcnJMZW5ndGgpKXtyZXR1cm4gZmFsc2U7fS8vIEFzc3VtZSBjeWNsaWMgdmFsdWVzIGFyZSBlcXVhbC5cbnZhciBzdGFja2VkPXN0YWNrLmdldChhcnJheSk7aWYoc3RhY2tlZCYmc3RhY2suZ2V0KG90aGVyKSl7cmV0dXJuIHN0YWNrZWQ9PW90aGVyO312YXIgaW5kZXg9LTEscmVzdWx0PXRydWUsc2Vlbj1iaXRtYXNrJkNPTVBBUkVfVU5PUkRFUkVEX0ZMQUc/bmV3IFNldENhY2hlKCk6dW5kZWZpbmVkO3N0YWNrLnNldChhcnJheSxvdGhlcik7c3RhY2suc2V0KG90aGVyLGFycmF5KTsvLyBJZ25vcmUgbm9uLWluZGV4IHByb3BlcnRpZXMuXG53aGlsZSgrK2luZGV4PGFyckxlbmd0aCl7dmFyIGFyclZhbHVlPWFycmF5W2luZGV4XSxvdGhWYWx1ZT1vdGhlcltpbmRleF07aWYoY3VzdG9taXplcil7dmFyIGNvbXBhcmVkPWlzUGFydGlhbD9jdXN0b21pemVyKG90aFZhbHVlLGFyclZhbHVlLGluZGV4LG90aGVyLGFycmF5LHN0YWNrKTpjdXN0b21pemVyKGFyclZhbHVlLG90aFZhbHVlLGluZGV4LGFycmF5LG90aGVyLHN0YWNrKTt9aWYoY29tcGFyZWQhPT11bmRlZmluZWQpe2lmKGNvbXBhcmVkKXtjb250aW51ZTt9cmVzdWx0PWZhbHNlO2JyZWFrO30vLyBSZWN1cnNpdmVseSBjb21wYXJlIGFycmF5cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuaWYoc2Vlbil7aWYoIWFycmF5U29tZShvdGhlcixmdW5jdGlvbihvdGhWYWx1ZSxvdGhJbmRleCl7aWYoIWNhY2hlSGFzKHNlZW4sb3RoSW5kZXgpJiYoYXJyVmFsdWU9PT1vdGhWYWx1ZXx8ZXF1YWxGdW5jKGFyclZhbHVlLG90aFZhbHVlLGJpdG1hc2ssY3VzdG9taXplcixzdGFjaykpKXtyZXR1cm4gc2Vlbi5wdXNoKG90aEluZGV4KTt9fSkpe3Jlc3VsdD1mYWxzZTticmVhazt9fWVsc2UgaWYoIShhcnJWYWx1ZT09PW90aFZhbHVlfHxlcXVhbEZ1bmMoYXJyVmFsdWUsb3RoVmFsdWUsYml0bWFzayxjdXN0b21pemVyLHN0YWNrKSkpe3Jlc3VsdD1mYWxzZTticmVhazt9fXN0YWNrWydkZWxldGUnXShhcnJheSk7c3RhY2tbJ2RlbGV0ZSddKG90aGVyKTtyZXR1cm4gcmVzdWx0O30vKipcbiAgICAgICAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbERlZXBgIGZvciBjb21wYXJpbmcgb2JqZWN0cyBvZlxuICAgICAgICAgKiB0aGUgc2FtZSBgdG9TdHJpbmdUYWdgLlxuICAgICAgICAgKlxuICAgICAgICAgKiAqKk5vdGU6KiogVGhpcyBmdW5jdGlvbiBvbmx5IHN1cHBvcnRzIGNvbXBhcmluZyB2YWx1ZXMgd2l0aCB0YWdzIG9mXG4gICAgICAgICAqIGBCb29sZWFuYCwgYERhdGVgLCBgRXJyb3JgLCBgTnVtYmVyYCwgYFJlZ0V4cGAsIG9yIGBTdHJpbmdgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY29tcGFyZS5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHRhZyBUaGUgYHRvU3RyaW5nVGFnYCBvZiB0aGUgb2JqZWN0cyB0byBjb21wYXJlLlxuICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBiYXNlSXNFcXVhbGAgZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzdGFjayBUcmFja3MgdHJhdmVyc2VkIGBvYmplY3RgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gICAgICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICAgICAgICAgKi9mdW5jdGlvbiBlcXVhbEJ5VGFnKG9iamVjdCxvdGhlcix0YWcsYml0bWFzayxjdXN0b21pemVyLGVxdWFsRnVuYyxzdGFjayl7c3dpdGNoKHRhZyl7Y2FzZSBkYXRhVmlld1RhZzppZihvYmplY3QuYnl0ZUxlbmd0aCE9b3RoZXIuYnl0ZUxlbmd0aHx8b2JqZWN0LmJ5dGVPZmZzZXQhPW90aGVyLmJ5dGVPZmZzZXQpe3JldHVybiBmYWxzZTt9b2JqZWN0PW9iamVjdC5idWZmZXI7b3RoZXI9b3RoZXIuYnVmZmVyO2Nhc2UgYXJyYXlCdWZmZXJUYWc6aWYob2JqZWN0LmJ5dGVMZW5ndGghPW90aGVyLmJ5dGVMZW5ndGh8fCFlcXVhbEZ1bmMobmV3IFVpbnQ4QXJyYXkob2JqZWN0KSxuZXcgVWludDhBcnJheShvdGhlcikpKXtyZXR1cm4gZmFsc2U7fXJldHVybiB0cnVlO2Nhc2UgYm9vbFRhZzpjYXNlIGRhdGVUYWc6Y2FzZSBudW1iZXJUYWc6Ly8gQ29lcmNlIGJvb2xlYW5zIHRvIGAxYCBvciBgMGAgYW5kIGRhdGVzIHRvIG1pbGxpc2Vjb25kcy5cbi8vIEludmFsaWQgZGF0ZXMgYXJlIGNvZXJjZWQgdG8gYE5hTmAuXG5yZXR1cm4gZXEoK29iamVjdCwrb3RoZXIpO2Nhc2UgZXJyb3JUYWc6cmV0dXJuIG9iamVjdC5uYW1lPT1vdGhlci5uYW1lJiZvYmplY3QubWVzc2FnZT09b3RoZXIubWVzc2FnZTtjYXNlIHJlZ2V4cFRhZzpjYXNlIHN0cmluZ1RhZzovLyBDb2VyY2UgcmVnZXhlcyB0byBzdHJpbmdzIGFuZCB0cmVhdCBzdHJpbmdzLCBwcmltaXRpdmVzIGFuZCBvYmplY3RzLFxuLy8gYXMgZXF1YWwuIFNlZSBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcmVnZXhwLnByb3RvdHlwZS50b3N0cmluZ1xuLy8gZm9yIG1vcmUgZGV0YWlscy5cbnJldHVybiBvYmplY3Q9PW90aGVyKycnO2Nhc2UgbWFwVGFnOnZhciBjb252ZXJ0PW1hcFRvQXJyYXk7Y2FzZSBzZXRUYWc6dmFyIGlzUGFydGlhbD1iaXRtYXNrJkNPTVBBUkVfUEFSVElBTF9GTEFHO2NvbnZlcnR8fChjb252ZXJ0PXNldFRvQXJyYXkpO2lmKG9iamVjdC5zaXplIT1vdGhlci5zaXplJiYhaXNQYXJ0aWFsKXtyZXR1cm4gZmFsc2U7fS8vIEFzc3VtZSBjeWNsaWMgdmFsdWVzIGFyZSBlcXVhbC5cbnZhciBzdGFja2VkPXN0YWNrLmdldChvYmplY3QpO2lmKHN0YWNrZWQpe3JldHVybiBzdGFja2VkPT1vdGhlcjt9Yml0bWFza3w9Q09NUEFSRV9VTk9SREVSRURfRkxBRzsvLyBSZWN1cnNpdmVseSBjb21wYXJlIG9iamVjdHMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbnN0YWNrLnNldChvYmplY3Qsb3RoZXIpO3ZhciByZXN1bHQ9ZXF1YWxBcnJheXMoY29udmVydChvYmplY3QpLGNvbnZlcnQob3RoZXIpLGJpdG1hc2ssY3VzdG9taXplcixlcXVhbEZ1bmMsc3RhY2spO3N0YWNrWydkZWxldGUnXShvYmplY3QpO3JldHVybiByZXN1bHQ7Y2FzZSBzeW1ib2xUYWc6aWYoc3ltYm9sVmFsdWVPZil7cmV0dXJuIHN5bWJvbFZhbHVlT2YuY2FsbChvYmplY3QpPT1zeW1ib2xWYWx1ZU9mLmNhbGwob3RoZXIpO319cmV0dXJuIGZhbHNlO30vKipcbiAgICAgICAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbERlZXBgIGZvciBvYmplY3RzIHdpdGggc3VwcG9ydCBmb3JcbiAgICAgICAgICogcGFydGlhbCBkZWVwIGNvbXBhcmlzb25zLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY29tcGFyZS5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cbiAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gc3RhY2sgVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICAgICAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG9iamVjdHMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAgICAgICAgICovZnVuY3Rpb24gZXF1YWxPYmplY3RzKG9iamVjdCxvdGhlcixiaXRtYXNrLGN1c3RvbWl6ZXIsZXF1YWxGdW5jLHN0YWNrKXt2YXIgaXNQYXJ0aWFsPWJpdG1hc2smQ09NUEFSRV9QQVJUSUFMX0ZMQUcsb2JqUHJvcHM9Z2V0QWxsS2V5cyhvYmplY3QpLG9iakxlbmd0aD1vYmpQcm9wcy5sZW5ndGgsb3RoUHJvcHM9Z2V0QWxsS2V5cyhvdGhlciksb3RoTGVuZ3RoPW90aFByb3BzLmxlbmd0aDtpZihvYmpMZW5ndGghPW90aExlbmd0aCYmIWlzUGFydGlhbCl7cmV0dXJuIGZhbHNlO312YXIgaW5kZXg9b2JqTGVuZ3RoO3doaWxlKGluZGV4LS0pe3ZhciBrZXk9b2JqUHJvcHNbaW5kZXhdO2lmKCEoaXNQYXJ0aWFsP2tleSBpbiBvdGhlcjpoYXNPd25Qcm9wZXJ0eS5jYWxsKG90aGVyLGtleSkpKXtyZXR1cm4gZmFsc2U7fX0vLyBBc3N1bWUgY3ljbGljIHZhbHVlcyBhcmUgZXF1YWwuXG52YXIgc3RhY2tlZD1zdGFjay5nZXQob2JqZWN0KTtpZihzdGFja2VkJiZzdGFjay5nZXQob3RoZXIpKXtyZXR1cm4gc3RhY2tlZD09b3RoZXI7fXZhciByZXN1bHQ9dHJ1ZTtzdGFjay5zZXQob2JqZWN0LG90aGVyKTtzdGFjay5zZXQob3RoZXIsb2JqZWN0KTt2YXIgc2tpcEN0b3I9aXNQYXJ0aWFsO3doaWxlKCsraW5kZXg8b2JqTGVuZ3RoKXtrZXk9b2JqUHJvcHNbaW5kZXhdO3ZhciBvYmpWYWx1ZT1vYmplY3Rba2V5XSxvdGhWYWx1ZT1vdGhlcltrZXldO2lmKGN1c3RvbWl6ZXIpe3ZhciBjb21wYXJlZD1pc1BhcnRpYWw/Y3VzdG9taXplcihvdGhWYWx1ZSxvYmpWYWx1ZSxrZXksb3RoZXIsb2JqZWN0LHN0YWNrKTpjdXN0b21pemVyKG9ialZhbHVlLG90aFZhbHVlLGtleSxvYmplY3Qsb3RoZXIsc3RhY2spO30vLyBSZWN1cnNpdmVseSBjb21wYXJlIG9iamVjdHMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbmlmKCEoY29tcGFyZWQ9PT11bmRlZmluZWQ/b2JqVmFsdWU9PT1vdGhWYWx1ZXx8ZXF1YWxGdW5jKG9ialZhbHVlLG90aFZhbHVlLGJpdG1hc2ssY3VzdG9taXplcixzdGFjayk6Y29tcGFyZWQpKXtyZXN1bHQ9ZmFsc2U7YnJlYWs7fXNraXBDdG9yfHwoc2tpcEN0b3I9a2V5PT0nY29uc3RydWN0b3InKTt9aWYocmVzdWx0JiYhc2tpcEN0b3Ipe3ZhciBvYmpDdG9yPW9iamVjdC5jb25zdHJ1Y3RvcixvdGhDdG9yPW90aGVyLmNvbnN0cnVjdG9yOy8vIE5vbiBgT2JqZWN0YCBvYmplY3QgaW5zdGFuY2VzIHdpdGggZGlmZmVyZW50IGNvbnN0cnVjdG9ycyBhcmUgbm90IGVxdWFsLlxuaWYob2JqQ3RvciE9b3RoQ3RvciYmJ2NvbnN0cnVjdG9yJ2luIG9iamVjdCYmJ2NvbnN0cnVjdG9yJ2luIG90aGVyJiYhKHR5cGVvZiBvYmpDdG9yPT09J2Z1bmN0aW9uJyYmb2JqQ3RvciBpbnN0YW5jZW9mIG9iakN0b3ImJnR5cGVvZiBvdGhDdG9yPT09J2Z1bmN0aW9uJyYmb3RoQ3RvciBpbnN0YW5jZW9mIG90aEN0b3IpKXtyZXN1bHQ9ZmFsc2U7fX1zdGFja1snZGVsZXRlJ10ob2JqZWN0KTtzdGFja1snZGVsZXRlJ10ob3RoZXIpO3JldHVybiByZXN1bHQ7fS8qKlxuICAgICAgICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VSZXN0YCB3aGljaCBmbGF0dGVucyB0aGUgcmVzdCBhcnJheS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cbiAgICAgICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICAgICAqL2Z1bmN0aW9uIGZsYXRSZXN0KGZ1bmMpe3JldHVybiBzZXRUb1N0cmluZyhvdmVyUmVzdChmdW5jLHVuZGVmaW5lZCxmbGF0dGVuKSxmdW5jKycnKTt9LyoqXG4gICAgICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2Ygb3duIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgYW5kIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scy5cbiAgICAgICAgICovZnVuY3Rpb24gZ2V0QWxsS2V5cyhvYmplY3Qpe3JldHVybiBiYXNlR2V0QWxsS2V5cyhvYmplY3Qsa2V5cyxnZXRTeW1ib2xzKTt9LyoqXG4gICAgICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2Ygb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBhbmRcbiAgICAgICAgICogc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzLlxuICAgICAgICAgKi9mdW5jdGlvbiBnZXRBbGxLZXlzSW4ob2JqZWN0KXtyZXR1cm4gYmFzZUdldEFsbEtleXMob2JqZWN0LGtleXNJbixnZXRTeW1ib2xzSW4pO30vKipcbiAgICAgICAgICogR2V0cyBtZXRhZGF0YSBmb3IgYGZ1bmNgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBxdWVyeS5cbiAgICAgICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1ldGFkYXRhIGZvciBgZnVuY2AuXG4gICAgICAgICAqL3ZhciBnZXREYXRhPSFtZXRhTWFwP25vb3A6ZnVuY3Rpb24oZnVuYyl7cmV0dXJuIG1ldGFNYXAuZ2V0KGZ1bmMpO307LyoqXG4gICAgICAgKiBHZXRzIHRoZSBuYW1lIG9mIGBmdW5jYC5cbiAgICAgICAqXG4gICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcXVlcnkuXG4gICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBmdW5jdGlvbiBuYW1lLlxuICAgICAgICovZnVuY3Rpb24gZ2V0RnVuY05hbWUoZnVuYyl7dmFyIHJlc3VsdD1mdW5jLm5hbWUrJycsYXJyYXk9cmVhbE5hbWVzW3Jlc3VsdF0sbGVuZ3RoPWhhc093blByb3BlcnR5LmNhbGwocmVhbE5hbWVzLHJlc3VsdCk/YXJyYXkubGVuZ3RoOjA7d2hpbGUobGVuZ3RoLS0pe3ZhciBkYXRhPWFycmF5W2xlbmd0aF0sb3RoZXJGdW5jPWRhdGEuZnVuYztpZihvdGhlckZ1bmM9PW51bGx8fG90aGVyRnVuYz09ZnVuYyl7cmV0dXJuIGRhdGEubmFtZTt9fXJldHVybiByZXN1bHQ7fS8qKlxuICAgICAgICAgKiBHZXRzIHRoZSBhcmd1bWVudCBwbGFjZWhvbGRlciB2YWx1ZSBmb3IgYGZ1bmNgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBpbnNwZWN0LlxuICAgICAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcGxhY2Vob2xkZXIgdmFsdWUuXG4gICAgICAgICAqL2Z1bmN0aW9uIGdldEhvbGRlcihmdW5jKXt2YXIgb2JqZWN0PWhhc093blByb3BlcnR5LmNhbGwobG9kYXNoLCdwbGFjZWhvbGRlcicpP2xvZGFzaDpmdW5jO3JldHVybiBvYmplY3QucGxhY2Vob2xkZXI7fS8qKlxuICAgICAgICAgKiBHZXRzIHRoZSBhcHByb3ByaWF0ZSBcIml0ZXJhdGVlXCIgZnVuY3Rpb24uIElmIGBfLml0ZXJhdGVlYCBpcyBjdXN0b21pemVkLFxuICAgICAgICAgKiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGN1c3RvbSBtZXRob2QsIG90aGVyd2lzZSBpdCByZXR1cm5zIGBiYXNlSXRlcmF0ZWVgLlxuICAgICAgICAgKiBJZiBhcmd1bWVudHMgYXJlIHByb3ZpZGVkLCB0aGUgY2hvc2VuIGZ1bmN0aW9uIGlzIGludm9rZWQgd2l0aCB0aGVtIGFuZFxuICAgICAgICAgKiBpdHMgcmVzdWx0IGlzIHJldHVybmVkLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKiBAcGFyYW0geyp9IFt2YWx1ZV0gVGhlIHZhbHVlIHRvIGNvbnZlcnQgdG8gYW4gaXRlcmF0ZWUuXG4gICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbYXJpdHldIFRoZSBhcml0eSBvZiB0aGUgY3JlYXRlZCBpdGVyYXRlZS5cbiAgICAgICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBjaG9zZW4gZnVuY3Rpb24gb3IgaXRzIHJlc3VsdC5cbiAgICAgICAgICovZnVuY3Rpb24gZ2V0SXRlcmF0ZWUoKXt2YXIgcmVzdWx0PWxvZGFzaC5pdGVyYXRlZXx8aXRlcmF0ZWU7cmVzdWx0PXJlc3VsdD09PWl0ZXJhdGVlP2Jhc2VJdGVyYXRlZTpyZXN1bHQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/cmVzdWx0KGFyZ3VtZW50c1swXSxhcmd1bWVudHNbMV0pOnJlc3VsdDt9LyoqXG4gICAgICAgICAqIEdldHMgdGhlIGRhdGEgZm9yIGBtYXBgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gbWFwIFRoZSBtYXAgdG8gcXVlcnkuXG4gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIHJlZmVyZW5jZSBrZXkuXG4gICAgICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBtYXAgZGF0YS5cbiAgICAgICAgICovZnVuY3Rpb24gZ2V0TWFwRGF0YShtYXAsa2V5KXt2YXIgZGF0YT1tYXAuX19kYXRhX187cmV0dXJuIGlzS2V5YWJsZShrZXkpP2RhdGFbdHlwZW9mIGtleT09PSdzdHJpbmcnPydzdHJpbmcnOidoYXNoJ106ZGF0YS5tYXA7fS8qKlxuICAgICAgICAgKiBHZXRzIHRoZSBwcm9wZXJ0eSBuYW1lcywgdmFsdWVzLCBhbmQgY29tcGFyZSBmbGFncyBvZiBgb2JqZWN0YC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG1hdGNoIGRhdGEgb2YgYG9iamVjdGAuXG4gICAgICAgICAqL2Z1bmN0aW9uIGdldE1hdGNoRGF0YShvYmplY3Qpe3ZhciByZXN1bHQ9a2V5cyhvYmplY3QpLGxlbmd0aD1yZXN1bHQubGVuZ3RoO3doaWxlKGxlbmd0aC0tKXt2YXIga2V5PXJlc3VsdFtsZW5ndGhdLHZhbHVlPW9iamVjdFtrZXldO3Jlc3VsdFtsZW5ndGhdPVtrZXksdmFsdWUsaXNTdHJpY3RDb21wYXJhYmxlKHZhbHVlKV07fXJldHVybiByZXN1bHQ7fS8qKlxuICAgICAgICAgKiBHZXRzIHRoZSBuYXRpdmUgZnVuY3Rpb24gYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBtZXRob2QgdG8gZ2V0LlxuICAgICAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZnVuY3Rpb24gaWYgaXQncyBuYXRpdmUsIGVsc2UgYHVuZGVmaW5lZGAuXG4gICAgICAgICAqL2Z1bmN0aW9uIGdldE5hdGl2ZShvYmplY3Qsa2V5KXt2YXIgdmFsdWU9Z2V0VmFsdWUob2JqZWN0LGtleSk7cmV0dXJuIGJhc2VJc05hdGl2ZSh2YWx1ZSk/dmFsdWU6dW5kZWZpbmVkO30vKipcbiAgICAgICAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlR2V0VGFnYCB3aGljaCBpZ25vcmVzIGBTeW1ib2wudG9TdHJpbmdUYWdgIHZhbHVlcy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHJhdyBgdG9TdHJpbmdUYWdgLlxuICAgICAgICAgKi9mdW5jdGlvbiBnZXRSYXdUYWcodmFsdWUpe3ZhciBpc093bj1oYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLHN5bVRvU3RyaW5nVGFnKSx0YWc9dmFsdWVbc3ltVG9TdHJpbmdUYWddO3RyeXt2YWx1ZVtzeW1Ub1N0cmluZ1RhZ109dW5kZWZpbmVkO3ZhciB1bm1hc2tlZD10cnVlO31jYXRjaChlKXt9dmFyIHJlc3VsdD1uYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtpZih1bm1hc2tlZCl7aWYoaXNPd24pe3ZhbHVlW3N5bVRvU3RyaW5nVGFnXT10YWc7fWVsc2V7ZGVsZXRlIHZhbHVlW3N5bVRvU3RyaW5nVGFnXTt9fXJldHVybiByZXN1bHQ7fS8qKlxuICAgICAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gZW51bWVyYWJsZSBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2Ygc3ltYm9scy5cbiAgICAgICAgICovdmFyIGdldFN5bWJvbHM9IW5hdGl2ZUdldFN5bWJvbHM/c3R1YkFycmF5OmZ1bmN0aW9uKG9iamVjdCl7aWYob2JqZWN0PT1udWxsKXtyZXR1cm5bXTt9b2JqZWN0PU9iamVjdChvYmplY3QpO3JldHVybiBhcnJheUZpbHRlcihuYXRpdmVHZXRTeW1ib2xzKG9iamVjdCksZnVuY3Rpb24oc3ltYm9sKXtyZXR1cm4gcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChvYmplY3Qsc3ltYm9sKTt9KTt9Oy8qKlxuICAgICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICAgICAgICpcbiAgICAgICAqIEBwcml2YXRlXG4gICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHN5bWJvbHMuXG4gICAgICAgKi92YXIgZ2V0U3ltYm9sc0luPSFuYXRpdmVHZXRTeW1ib2xzP3N0dWJBcnJheTpmdW5jdGlvbihvYmplY3Qpe3ZhciByZXN1bHQ9W107d2hpbGUob2JqZWN0KXthcnJheVB1c2gocmVzdWx0LGdldFN5bWJvbHMob2JqZWN0KSk7b2JqZWN0PWdldFByb3RvdHlwZShvYmplY3QpO31yZXR1cm4gcmVzdWx0O307LyoqXG4gICAgICAgKiBHZXRzIHRoZSBgdG9TdHJpbmdUYWdgIG9mIGB2YWx1ZWAuXG4gICAgICAgKlxuICAgICAgICogQHByaXZhdGVcbiAgICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICAgICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgYHRvU3RyaW5nVGFnYC5cbiAgICAgICAqL3ZhciBnZXRUYWc9YmFzZUdldFRhZzsvLyBGYWxsYmFjayBmb3IgZGF0YSB2aWV3cywgbWFwcywgc2V0cywgYW5kIHdlYWsgbWFwcyBpbiBJRSAxMSBhbmQgcHJvbWlzZXMgaW4gTm9kZS5qcyA8IDYuXG5pZihEYXRhVmlldyYmZ2V0VGFnKG5ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZmZXIoMSkpKSE9ZGF0YVZpZXdUYWd8fE1hcCYmZ2V0VGFnKG5ldyBNYXAoKSkhPW1hcFRhZ3x8UHJvbWlzZSYmZ2V0VGFnKFByb21pc2UucmVzb2x2ZSgpKSE9cHJvbWlzZVRhZ3x8U2V0JiZnZXRUYWcobmV3IFNldCgpKSE9c2V0VGFnfHxXZWFrTWFwJiZnZXRUYWcobmV3IFdlYWtNYXAoKSkhPXdlYWtNYXBUYWcpe2dldFRhZz1mdW5jdGlvbiBnZXRUYWcodmFsdWUpe3ZhciByZXN1bHQ9YmFzZUdldFRhZyh2YWx1ZSksQ3Rvcj1yZXN1bHQ9PW9iamVjdFRhZz92YWx1ZS5jb25zdHJ1Y3Rvcjp1bmRlZmluZWQsY3RvclN0cmluZz1DdG9yP3RvU291cmNlKEN0b3IpOicnO2lmKGN0b3JTdHJpbmcpe3N3aXRjaChjdG9yU3RyaW5nKXtjYXNlIGRhdGFWaWV3Q3RvclN0cmluZzpyZXR1cm4gZGF0YVZpZXdUYWc7Y2FzZSBtYXBDdG9yU3RyaW5nOnJldHVybiBtYXBUYWc7Y2FzZSBwcm9taXNlQ3RvclN0cmluZzpyZXR1cm4gcHJvbWlzZVRhZztjYXNlIHNldEN0b3JTdHJpbmc6cmV0dXJuIHNldFRhZztjYXNlIHdlYWtNYXBDdG9yU3RyaW5nOnJldHVybiB3ZWFrTWFwVGFnO319cmV0dXJuIHJlc3VsdDt9O30vKipcbiAgICAgICAgICogR2V0cyB0aGUgdmlldywgYXBwbHlpbmcgYW55IGB0cmFuc2Zvcm1zYCB0byB0aGUgYHN0YXJ0YCBhbmQgYGVuZGAgcG9zaXRpb25zLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnQgVGhlIHN0YXJ0IG9mIHRoZSB2aWV3LlxuICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gZW5kIFRoZSBlbmQgb2YgdGhlIHZpZXcuXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IHRyYW5zZm9ybXMgVGhlIHRyYW5zZm9ybWF0aW9ucyB0byBhcHBseSB0byB0aGUgdmlldy5cbiAgICAgICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgYHN0YXJ0YCBhbmQgYGVuZGBcbiAgICAgICAgICogIHBvc2l0aW9ucyBvZiB0aGUgdmlldy5cbiAgICAgICAgICovZnVuY3Rpb24gZ2V0VmlldyhzdGFydCxlbmQsdHJhbnNmb3Jtcyl7dmFyIGluZGV4PS0xLGxlbmd0aD10cmFuc2Zvcm1zLmxlbmd0aDt3aGlsZSgrK2luZGV4PGxlbmd0aCl7dmFyIGRhdGE9dHJhbnNmb3Jtc1tpbmRleF0sc2l6ZT1kYXRhLnNpemU7c3dpdGNoKGRhdGEudHlwZSl7Y2FzZSdkcm9wJzpzdGFydCs9c2l6ZTticmVhaztjYXNlJ2Ryb3BSaWdodCc6ZW5kLT1zaXplO2JyZWFrO2Nhc2UndGFrZSc6ZW5kPW5hdGl2ZU1pbihlbmQsc3RhcnQrc2l6ZSk7YnJlYWs7Y2FzZSd0YWtlUmlnaHQnOnN0YXJ0PW5hdGl2ZU1heChzdGFydCxlbmQtc2l6ZSk7YnJlYWs7fX1yZXR1cm57c3RhcnQ6c3RhcnQsZW5kOmVuZH07fS8qKlxuICAgICAgICAgKiBFeHRyYWN0cyB3cmFwcGVyIGRldGFpbHMgZnJvbSB0aGUgYHNvdXJjZWAgYm9keSBjb21tZW50LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIFRoZSBzb3VyY2UgdG8gaW5zcGVjdC5cbiAgICAgICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSB3cmFwcGVyIGRldGFpbHMuXG4gICAgICAgICAqL2Z1bmN0aW9uIGdldFdyYXBEZXRhaWxzKHNvdXJjZSl7dmFyIG1hdGNoPXNvdXJjZS5tYXRjaChyZVdyYXBEZXRhaWxzKTtyZXR1cm4gbWF0Y2g/bWF0Y2hbMV0uc3BsaXQocmVTcGxpdERldGFpbHMpOltdO30vKipcbiAgICAgICAgICogQ2hlY2tzIGlmIGBwYXRoYCBleGlzdHMgb24gYG9iamVjdGAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgICAgICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggdG8gY2hlY2suXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGhhc0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGNoZWNrIHByb3BlcnRpZXMuXG4gICAgICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgcGF0aGAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gICAgICAgICAqL2Z1bmN0aW9uIGhhc1BhdGgob2JqZWN0LHBhdGgsaGFzRnVuYyl7cGF0aD1jYXN0UGF0aChwYXRoLG9iamVjdCk7dmFyIGluZGV4PS0xLGxlbmd0aD1wYXRoLmxlbmd0aCxyZXN1bHQ9ZmFsc2U7d2hpbGUoKytpbmRleDxsZW5ndGgpe3ZhciBrZXk9dG9LZXkocGF0aFtpbmRleF0pO2lmKCEocmVzdWx0PW9iamVjdCE9bnVsbCYmaGFzRnVuYyhvYmplY3Qsa2V5KSkpe2JyZWFrO31vYmplY3Q9b2JqZWN0W2tleV07fWlmKHJlc3VsdHx8KytpbmRleCE9bGVuZ3RoKXtyZXR1cm4gcmVzdWx0O31sZW5ndGg9b2JqZWN0PT1udWxsPzA6b2JqZWN0Lmxlbmd0aDtyZXR1cm4hIWxlbmd0aCYmaXNMZW5ndGgobGVuZ3RoKSYmaXNJbmRleChrZXksbGVuZ3RoKSYmKGlzQXJyYXkob2JqZWN0KXx8aXNBcmd1bWVudHMob2JqZWN0KSk7fS8qKlxuICAgICAgICAgKiBJbml0aWFsaXplcyBhbiBhcnJheSBjbG9uZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGNsb25lLlxuICAgICAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGluaXRpYWxpemVkIGNsb25lLlxuICAgICAgICAgKi9mdW5jdGlvbiBpbml0Q2xvbmVBcnJheShhcnJheSl7dmFyIGxlbmd0aD1hcnJheS5sZW5ndGgscmVzdWx0PW5ldyBhcnJheS5jb25zdHJ1Y3RvcihsZW5ndGgpOy8vIEFkZCBwcm9wZXJ0aWVzIGFzc2lnbmVkIGJ5IGBSZWdFeHAjZXhlY2AuXG5pZihsZW5ndGgmJnR5cGVvZiBhcnJheVswXT09PSdzdHJpbmcnJiZoYXNPd25Qcm9wZXJ0eS5jYWxsKGFycmF5LCdpbmRleCcpKXtyZXN1bHQuaW5kZXg9YXJyYXkuaW5kZXg7cmVzdWx0LmlucHV0PWFycmF5LmlucHV0O31yZXR1cm4gcmVzdWx0O30vKipcbiAgICAgICAgICogSW5pdGlhbGl6ZXMgYW4gb2JqZWN0IGNsb25lLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY2xvbmUuXG4gICAgICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGluaXRpYWxpemVkIGNsb25lLlxuICAgICAgICAgKi9mdW5jdGlvbiBpbml0Q2xvbmVPYmplY3Qob2JqZWN0KXtyZXR1cm4gdHlwZW9mIG9iamVjdC5jb25zdHJ1Y3Rvcj09PSdmdW5jdGlvbicmJiFpc1Byb3RvdHlwZShvYmplY3QpP2Jhc2VDcmVhdGUoZ2V0UHJvdG90eXBlKG9iamVjdCkpOnt9O30vKipcbiAgICAgICAgICogSW5pdGlhbGl6ZXMgYW4gb2JqZWN0IGNsb25lIGJhc2VkIG9uIGl0cyBgdG9TdHJpbmdUYWdgLlxuICAgICAgICAgKlxuICAgICAgICAgKiAqKk5vdGU6KiogVGhpcyBmdW5jdGlvbiBvbmx5IHN1cHBvcnRzIGNsb25pbmcgdmFsdWVzIHdpdGggdGFncyBvZlxuICAgICAgICAgKiBgQm9vbGVhbmAsIGBEYXRlYCwgYEVycm9yYCwgYE1hcGAsIGBOdW1iZXJgLCBgUmVnRXhwYCwgYFNldGAsIG9yIGBTdHJpbmdgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY2xvbmUuXG4gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0YWcgVGhlIGB0b1N0cmluZ1RhZ2Agb2YgdGhlIG9iamVjdCB0byBjbG9uZS5cbiAgICAgICAgICogQHBhcmFtIHtib29sZWFufSBbaXNEZWVwXSBTcGVjaWZ5IGEgZGVlcCBjbG9uZS5cbiAgICAgICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaW5pdGlhbGl6ZWQgY2xvbmUuXG4gICAgICAgICAqL2Z1bmN0aW9uIGluaXRDbG9uZUJ5VGFnKG9iamVjdCx0YWcsaXNEZWVwKXt2YXIgQ3Rvcj1vYmplY3QuY29uc3RydWN0b3I7c3dpdGNoKHRhZyl7Y2FzZSBhcnJheUJ1ZmZlclRhZzpyZXR1cm4gY2xvbmVBcnJheUJ1ZmZlcihvYmplY3QpO2Nhc2UgYm9vbFRhZzpjYXNlIGRhdGVUYWc6cmV0dXJuIG5ldyBDdG9yKCtvYmplY3QpO2Nhc2UgZGF0YVZpZXdUYWc6cmV0dXJuIGNsb25lRGF0YVZpZXcob2JqZWN0LGlzRGVlcCk7Y2FzZSBmbG9hdDMyVGFnOmNhc2UgZmxvYXQ2NFRhZzpjYXNlIGludDhUYWc6Y2FzZSBpbnQxNlRhZzpjYXNlIGludDMyVGFnOmNhc2UgdWludDhUYWc6Y2FzZSB1aW50OENsYW1wZWRUYWc6Y2FzZSB1aW50MTZUYWc6Y2FzZSB1aW50MzJUYWc6cmV0dXJuIGNsb25lVHlwZWRBcnJheShvYmplY3QsaXNEZWVwKTtjYXNlIG1hcFRhZzpyZXR1cm4gbmV3IEN0b3IoKTtjYXNlIG51bWJlclRhZzpjYXNlIHN0cmluZ1RhZzpyZXR1cm4gbmV3IEN0b3Iob2JqZWN0KTtjYXNlIHJlZ2V4cFRhZzpyZXR1cm4gY2xvbmVSZWdFeHAob2JqZWN0KTtjYXNlIHNldFRhZzpyZXR1cm4gbmV3IEN0b3IoKTtjYXNlIHN5bWJvbFRhZzpyZXR1cm4gY2xvbmVTeW1ib2wob2JqZWN0KTt9fS8qKlxuICAgICAgICAgKiBJbnNlcnRzIHdyYXBwZXIgYGRldGFpbHNgIGluIGEgY29tbWVudCBhdCB0aGUgdG9wIG9mIHRoZSBgc291cmNlYCBib2R5LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIFRoZSBzb3VyY2UgdG8gbW9kaWZ5LlxuICAgICAgICAgKiBAcmV0dXJucyB7QXJyYXl9IGRldGFpbHMgVGhlIGRldGFpbHMgdG8gaW5zZXJ0LlxuICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBtb2RpZmllZCBzb3VyY2UuXG4gICAgICAgICAqL2Z1bmN0aW9uIGluc2VydFdyYXBEZXRhaWxzKHNvdXJjZSxkZXRhaWxzKXt2YXIgbGVuZ3RoPWRldGFpbHMubGVuZ3RoO2lmKCFsZW5ndGgpe3JldHVybiBzb3VyY2U7fXZhciBsYXN0SW5kZXg9bGVuZ3RoLTE7ZGV0YWlsc1tsYXN0SW5kZXhdPShsZW5ndGg+MT8nJiAnOicnKStkZXRhaWxzW2xhc3RJbmRleF07ZGV0YWlscz1kZXRhaWxzLmpvaW4obGVuZ3RoPjI/JywgJzonICcpO3JldHVybiBzb3VyY2UucmVwbGFjZShyZVdyYXBDb21tZW50LCd7XFxuLyogW3dyYXBwZWQgd2l0aCAnK2RldGFpbHMrJ10gKi9cXG4nKTt9LyoqXG4gICAgICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgZmxhdHRlbmFibGUgYGFyZ3VtZW50c2Agb2JqZWN0IG9yIGFycmF5LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgZmxhdHRlbmFibGUsIGVsc2UgYGZhbHNlYC5cbiAgICAgICAgICovZnVuY3Rpb24gaXNGbGF0dGVuYWJsZSh2YWx1ZSl7cmV0dXJuIGlzQXJyYXkodmFsdWUpfHxpc0FyZ3VtZW50cyh2YWx1ZSl8fCEhKHNwcmVhZGFibGVTeW1ib2wmJnZhbHVlJiZ2YWx1ZVtzcHJlYWRhYmxlU3ltYm9sXSk7fS8qKlxuICAgICAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgaW5kZXguXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aD1NQVhfU0FGRV9JTlRFR0VSXSBUaGUgdXBwZXIgYm91bmRzIG9mIGEgdmFsaWQgaW5kZXguXG4gICAgICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgaW5kZXgsIGVsc2UgYGZhbHNlYC5cbiAgICAgICAgICovZnVuY3Rpb24gaXNJbmRleCh2YWx1ZSxsZW5ndGgpe3ZhciB0eXBlPXR5cGVvZiB2YWx1ZT09PSd1bmRlZmluZWQnPyd1bmRlZmluZWQnOl90eXBlb2YodmFsdWUpO2xlbmd0aD1sZW5ndGg9PW51bGw/TUFYX1NBRkVfSU5URUdFUjpsZW5ndGg7cmV0dXJuISFsZW5ndGgmJih0eXBlPT0nbnVtYmVyJ3x8dHlwZSE9J3N5bWJvbCcmJnJlSXNVaW50LnRlc3QodmFsdWUpKSYmdmFsdWU+LTEmJnZhbHVlJTE9PTAmJnZhbHVlPGxlbmd0aDt9LyoqXG4gICAgICAgICAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gYXJndW1lbnRzIGFyZSBmcm9tIGFuIGl0ZXJhdGVlIGNhbGwuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHBvdGVudGlhbCBpdGVyYXRlZSB2YWx1ZSBhcmd1bWVudC5cbiAgICAgICAgICogQHBhcmFtIHsqfSBpbmRleCBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIGluZGV4IG9yIGtleSBhcmd1bWVudC5cbiAgICAgICAgICogQHBhcmFtIHsqfSBvYmplY3QgVGhlIHBvdGVudGlhbCBpdGVyYXRlZSBvYmplY3QgYXJndW1lbnQuXG4gICAgICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgYXJndW1lbnRzIGFyZSBmcm9tIGFuIGl0ZXJhdGVlIGNhbGwsXG4gICAgICAgICAqICBlbHNlIGBmYWxzZWAuXG4gICAgICAgICAqL2Z1bmN0aW9uIGlzSXRlcmF0ZWVDYWxsKHZhbHVlLGluZGV4LG9iamVjdCl7aWYoIWlzT2JqZWN0KG9iamVjdCkpe3JldHVybiBmYWxzZTt9dmFyIHR5cGU9dHlwZW9mIGluZGV4PT09J3VuZGVmaW5lZCc/J3VuZGVmaW5lZCc6X3R5cGVvZihpbmRleCk7aWYodHlwZT09J251bWJlcic/aXNBcnJheUxpa2Uob2JqZWN0KSYmaXNJbmRleChpbmRleCxvYmplY3QubGVuZ3RoKTp0eXBlPT0nc3RyaW5nJyYmaW5kZXggaW4gb2JqZWN0KXtyZXR1cm4gZXEob2JqZWN0W2luZGV4XSx2YWx1ZSk7fXJldHVybiBmYWxzZTt9LyoqXG4gICAgICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgcHJvcGVydHkgbmFtZSBhbmQgbm90IGEgcHJvcGVydHkgcGF0aC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5IGtleXMgb24uXG4gICAgICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcHJvcGVydHkgbmFtZSwgZWxzZSBgZmFsc2VgLlxuICAgICAgICAgKi9mdW5jdGlvbiBpc0tleSh2YWx1ZSxvYmplY3Qpe2lmKGlzQXJyYXkodmFsdWUpKXtyZXR1cm4gZmFsc2U7fXZhciB0eXBlPXR5cGVvZiB2YWx1ZT09PSd1bmRlZmluZWQnPyd1bmRlZmluZWQnOl90eXBlb2YodmFsdWUpO2lmKHR5cGU9PSdudW1iZXInfHx0eXBlPT0nc3ltYm9sJ3x8dHlwZT09J2Jvb2xlYW4nfHx2YWx1ZT09bnVsbHx8aXNTeW1ib2wodmFsdWUpKXtyZXR1cm4gdHJ1ZTt9cmV0dXJuIHJlSXNQbGFpblByb3AudGVzdCh2YWx1ZSl8fCFyZUlzRGVlcFByb3AudGVzdCh2YWx1ZSl8fG9iamVjdCE9bnVsbCYmdmFsdWUgaW4gT2JqZWN0KG9iamVjdCk7fS8qKlxuICAgICAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSBmb3IgdXNlIGFzIHVuaXF1ZSBvYmplY3Qga2V5LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUsIGVsc2UgYGZhbHNlYC5cbiAgICAgICAgICovZnVuY3Rpb24gaXNLZXlhYmxlKHZhbHVlKXt2YXIgdHlwZT10eXBlb2YgdmFsdWU9PT0ndW5kZWZpbmVkJz8ndW5kZWZpbmVkJzpfdHlwZW9mKHZhbHVlKTtyZXR1cm4gdHlwZT09J3N0cmluZyd8fHR5cGU9PSdudW1iZXInfHx0eXBlPT0nc3ltYm9sJ3x8dHlwZT09J2Jvb2xlYW4nP3ZhbHVlIT09J19fcHJvdG9fXyc6dmFsdWU9PT1udWxsO30vKipcbiAgICAgICAgICogQ2hlY2tzIGlmIGBmdW5jYCBoYXMgYSBsYXp5IGNvdW50ZXJwYXJ0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjaGVjay5cbiAgICAgICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBmdW5jYCBoYXMgYSBsYXp5IGNvdW50ZXJwYXJ0LFxuICAgICAgICAgKiAgZWxzZSBgZmFsc2VgLlxuICAgICAgICAgKi9mdW5jdGlvbiBpc0xhemlhYmxlKGZ1bmMpe3ZhciBmdW5jTmFtZT1nZXRGdW5jTmFtZShmdW5jKSxvdGhlcj1sb2Rhc2hbZnVuY05hbWVdO2lmKHR5cGVvZiBvdGhlciE9PSdmdW5jdGlvbid8fCEoZnVuY05hbWUgaW4gTGF6eVdyYXBwZXIucHJvdG90eXBlKSl7cmV0dXJuIGZhbHNlO31pZihmdW5jPT09b3RoZXIpe3JldHVybiB0cnVlO312YXIgZGF0YT1nZXREYXRhKG90aGVyKTtyZXR1cm4hIWRhdGEmJmZ1bmM9PT1kYXRhWzBdO30vKipcbiAgICAgICAgICogQ2hlY2tzIGlmIGBmdW5jYCBoYXMgaXRzIHNvdXJjZSBtYXNrZWQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNoZWNrLlxuICAgICAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYGZ1bmNgIGlzIG1hc2tlZCwgZWxzZSBgZmFsc2VgLlxuICAgICAgICAgKi9mdW5jdGlvbiBpc01hc2tlZChmdW5jKXtyZXR1cm4hIW1hc2tTcmNLZXkmJm1hc2tTcmNLZXkgaW4gZnVuYzt9LyoqXG4gICAgICAgICAqIENoZWNrcyBpZiBgZnVuY2AgaXMgY2FwYWJsZSBvZiBiZWluZyBtYXNrZWQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYGZ1bmNgIGlzIG1hc2thYmxlLCBlbHNlIGBmYWxzZWAuXG4gICAgICAgICAqL3ZhciBpc01hc2thYmxlPWNvcmVKc0RhdGE/aXNGdW5jdGlvbjpzdHViRmFsc2U7LyoqXG4gICAgICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxpa2VseSBhIHByb3RvdHlwZSBvYmplY3QuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHByb3RvdHlwZSwgZWxzZSBgZmFsc2VgLlxuICAgICAgICAgKi9mdW5jdGlvbiBpc1Byb3RvdHlwZSh2YWx1ZSl7dmFyIEN0b3I9dmFsdWUmJnZhbHVlLmNvbnN0cnVjdG9yLHByb3RvPXR5cGVvZiBDdG9yPT09J2Z1bmN0aW9uJyYmQ3Rvci5wcm90b3R5cGV8fG9iamVjdFByb3RvO3JldHVybiB2YWx1ZT09PXByb3RvO30vKipcbiAgICAgICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUgZm9yIHN0cmljdCBlcXVhbGl0eSBjb21wYXJpc29ucywgaS5lLiBgPT09YC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlmIHN1aXRhYmxlIGZvciBzdHJpY3RcbiAgICAgICAgICogIGVxdWFsaXR5IGNvbXBhcmlzb25zLCBlbHNlIGBmYWxzZWAuXG4gICAgICAgICAqL2Z1bmN0aW9uIGlzU3RyaWN0Q29tcGFyYWJsZSh2YWx1ZSl7cmV0dXJuIHZhbHVlPT09dmFsdWUmJiFpc09iamVjdCh2YWx1ZSk7fS8qKlxuICAgICAgICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYG1hdGNoZXNQcm9wZXJ0eWAgZm9yIHNvdXJjZSB2YWx1ZXMgc3VpdGFibGVcbiAgICAgICAgICogZm9yIHN0cmljdCBlcXVhbGl0eSBjb21wYXJpc29ucywgaS5lLiBgPT09YC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gc3JjVmFsdWUgVGhlIHZhbHVlIHRvIG1hdGNoLlxuICAgICAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzcGVjIGZ1bmN0aW9uLlxuICAgICAgICAgKi9mdW5jdGlvbiBtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZShrZXksc3JjVmFsdWUpe3JldHVybiBmdW5jdGlvbihvYmplY3Qpe2lmKG9iamVjdD09bnVsbCl7cmV0dXJuIGZhbHNlO31yZXR1cm4gb2JqZWN0W2tleV09PT1zcmNWYWx1ZSYmKHNyY1ZhbHVlIT09dW5kZWZpbmVkfHxrZXkgaW4gT2JqZWN0KG9iamVjdCkpO307fS8qKlxuICAgICAgICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ubWVtb2l6ZWAgd2hpY2ggY2xlYXJzIHRoZSBtZW1vaXplZCBmdW5jdGlvbidzXG4gICAgICAgICAqIGNhY2hlIHdoZW4gaXQgZXhjZWVkcyBgTUFYX01FTU9JWkVfU0laRWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGhhdmUgaXRzIG91dHB1dCBtZW1vaXplZC5cbiAgICAgICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgbWVtb2l6ZWQgZnVuY3Rpb24uXG4gICAgICAgICAqL2Z1bmN0aW9uIG1lbW9pemVDYXBwZWQoZnVuYyl7dmFyIHJlc3VsdD1tZW1vaXplKGZ1bmMsZnVuY3Rpb24oa2V5KXtpZihjYWNoZS5zaXplPT09TUFYX01FTU9JWkVfU0laRSl7Y2FjaGUuY2xlYXIoKTt9cmV0dXJuIGtleTt9KTt2YXIgY2FjaGU9cmVzdWx0LmNhY2hlO3JldHVybiByZXN1bHQ7fS8qKlxuICAgICAgICAgKiBNZXJnZXMgdGhlIGZ1bmN0aW9uIG1ldGFkYXRhIG9mIGBzb3VyY2VgIGludG8gYGRhdGFgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBNZXJnaW5nIG1ldGFkYXRhIHJlZHVjZXMgdGhlIG51bWJlciBvZiB3cmFwcGVycyB1c2VkIHRvIGludm9rZSBhIGZ1bmN0aW9uLlxuICAgICAgICAgKiBUaGlzIGlzIHBvc3NpYmxlIGJlY2F1c2UgbWV0aG9kcyBsaWtlIGBfLmJpbmRgLCBgXy5jdXJyeWAsIGFuZCBgXy5wYXJ0aWFsYFxuICAgICAgICAgKiBtYXkgYmUgYXBwbGllZCByZWdhcmRsZXNzIG9mIGV4ZWN1dGlvbiBvcmRlci4gTWV0aG9kcyBsaWtlIGBfLmFyeWAgYW5kXG4gICAgICAgICAqIGBfLnJlYXJnYCBtb2RpZnkgZnVuY3Rpb24gYXJndW1lbnRzLCBtYWtpbmcgdGhlIG9yZGVyIGluIHdoaWNoIHRoZXkgYXJlXG4gICAgICAgICAqIGV4ZWN1dGVkIGltcG9ydGFudCwgcHJldmVudGluZyB0aGUgbWVyZ2luZyBvZiBtZXRhZGF0YS4gSG93ZXZlciwgd2UgbWFrZVxuICAgICAgICAgKiBhbiBleGNlcHRpb24gZm9yIGEgc2FmZSBjb21iaW5lZCBjYXNlIHdoZXJlIGN1cnJpZWQgZnVuY3Rpb25zIGhhdmUgYF8uYXJ5YFxuICAgICAgICAgKiBhbmQgb3IgYF8ucmVhcmdgIGFwcGxpZWQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IGRhdGEgVGhlIGRlc3RpbmF0aW9uIG1ldGFkYXRhLlxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBzb3VyY2UgVGhlIHNvdXJjZSBtZXRhZGF0YS5cbiAgICAgICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBkYXRhYC5cbiAgICAgICAgICovZnVuY3Rpb24gbWVyZ2VEYXRhKGRhdGEsc291cmNlKXt2YXIgYml0bWFzaz1kYXRhWzFdLHNyY0JpdG1hc2s9c291cmNlWzFdLG5ld0JpdG1hc2s9Yml0bWFza3xzcmNCaXRtYXNrLGlzQ29tbW9uPW5ld0JpdG1hc2s8KFdSQVBfQklORF9GTEFHfFdSQVBfQklORF9LRVlfRkxBR3xXUkFQX0FSWV9GTEFHKTt2YXIgaXNDb21ibz1zcmNCaXRtYXNrPT1XUkFQX0FSWV9GTEFHJiZiaXRtYXNrPT1XUkFQX0NVUlJZX0ZMQUd8fHNyY0JpdG1hc2s9PVdSQVBfQVJZX0ZMQUcmJmJpdG1hc2s9PVdSQVBfUkVBUkdfRkxBRyYmZGF0YVs3XS5sZW5ndGg8PXNvdXJjZVs4XXx8c3JjQml0bWFzaz09KFdSQVBfQVJZX0ZMQUd8V1JBUF9SRUFSR19GTEFHKSYmc291cmNlWzddLmxlbmd0aDw9c291cmNlWzhdJiZiaXRtYXNrPT1XUkFQX0NVUlJZX0ZMQUc7Ly8gRXhpdCBlYXJseSBpZiBtZXRhZGF0YSBjYW4ndCBiZSBtZXJnZWQuXG5pZighKGlzQ29tbW9ufHxpc0NvbWJvKSl7cmV0dXJuIGRhdGE7fS8vIFVzZSBzb3VyY2UgYHRoaXNBcmdgIGlmIGF2YWlsYWJsZS5cbmlmKHNyY0JpdG1hc2smV1JBUF9CSU5EX0ZMQUcpe2RhdGFbMl09c291cmNlWzJdOy8vIFNldCB3aGVuIGN1cnJ5aW5nIGEgYm91bmQgZnVuY3Rpb24uXG5uZXdCaXRtYXNrfD1iaXRtYXNrJldSQVBfQklORF9GTEFHPzA6V1JBUF9DVVJSWV9CT1VORF9GTEFHO30vLyBDb21wb3NlIHBhcnRpYWwgYXJndW1lbnRzLlxudmFyIHZhbHVlPXNvdXJjZVszXTtpZih2YWx1ZSl7dmFyIHBhcnRpYWxzPWRhdGFbM107ZGF0YVszXT1wYXJ0aWFscz9jb21wb3NlQXJncyhwYXJ0aWFscyx2YWx1ZSxzb3VyY2VbNF0pOnZhbHVlO2RhdGFbNF09cGFydGlhbHM/cmVwbGFjZUhvbGRlcnMoZGF0YVszXSxQTEFDRUhPTERFUik6c291cmNlWzRdO30vLyBDb21wb3NlIHBhcnRpYWwgcmlnaHQgYXJndW1lbnRzLlxudmFsdWU9c291cmNlWzVdO2lmKHZhbHVlKXtwYXJ0aWFscz1kYXRhWzVdO2RhdGFbNV09cGFydGlhbHM/Y29tcG9zZUFyZ3NSaWdodChwYXJ0aWFscyx2YWx1ZSxzb3VyY2VbNl0pOnZhbHVlO2RhdGFbNl09cGFydGlhbHM/cmVwbGFjZUhvbGRlcnMoZGF0YVs1XSxQTEFDRUhPTERFUik6c291cmNlWzZdO30vLyBVc2Ugc291cmNlIGBhcmdQb3NgIGlmIGF2YWlsYWJsZS5cbnZhbHVlPXNvdXJjZVs3XTtpZih2YWx1ZSl7ZGF0YVs3XT12YWx1ZTt9Ly8gVXNlIHNvdXJjZSBgYXJ5YCBpZiBpdCdzIHNtYWxsZXIuXG5pZihzcmNCaXRtYXNrJldSQVBfQVJZX0ZMQUcpe2RhdGFbOF09ZGF0YVs4XT09bnVsbD9zb3VyY2VbOF06bmF0aXZlTWluKGRhdGFbOF0sc291cmNlWzhdKTt9Ly8gVXNlIHNvdXJjZSBgYXJpdHlgIGlmIG9uZSBpcyBub3QgcHJvdmlkZWQuXG5pZihkYXRhWzldPT1udWxsKXtkYXRhWzldPXNvdXJjZVs5XTt9Ly8gVXNlIHNvdXJjZSBgZnVuY2AgYW5kIG1lcmdlIGJpdG1hc2tzLlxuZGF0YVswXT1zb3VyY2VbMF07ZGF0YVsxXT1uZXdCaXRtYXNrO3JldHVybiBkYXRhO30vKipcbiAgICAgICAgICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlXG4gICAgICAgICAqIFtgT2JqZWN0LmtleXNgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3Qua2V5cylcbiAgICAgICAgICogZXhjZXB0IHRoYXQgaXQgaW5jbHVkZXMgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydGllcy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICAgICAgICAgKi9mdW5jdGlvbiBuYXRpdmVLZXlzSW4ob2JqZWN0KXt2YXIgcmVzdWx0PVtdO2lmKG9iamVjdCE9bnVsbCl7Zm9yKHZhciBrZXkgaW4gT2JqZWN0KG9iamVjdCkpe3Jlc3VsdC5wdXNoKGtleSk7fX1yZXR1cm4gcmVzdWx0O30vKipcbiAgICAgICAgICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyB1c2luZyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBzdHJpbmcuXG4gICAgICAgICAqL2Z1bmN0aW9uIG9iamVjdFRvU3RyaW5nKHZhbHVlKXtyZXR1cm4gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7fS8qKlxuICAgICAgICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VSZXN0YCB3aGljaCB0cmFuc2Zvcm1zIHRoZSByZXN0IGFycmF5LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhcHBseSBhIHJlc3QgcGFyYW1ldGVyIHRvLlxuICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PWZ1bmMubGVuZ3RoLTFdIFRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgcmVzdCBwYXJhbWV0ZXIuXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybSBUaGUgcmVzdCBhcnJheSB0cmFuc2Zvcm0uXG4gICAgICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICAgICAgICAgKi9mdW5jdGlvbiBvdmVyUmVzdChmdW5jLHN0YXJ0LHRyYW5zZm9ybSl7c3RhcnQ9bmF0aXZlTWF4KHN0YXJ0PT09dW5kZWZpbmVkP2Z1bmMubGVuZ3RoLTE6c3RhcnQsMCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGFyZ3M9YXJndW1lbnRzLGluZGV4PS0xLGxlbmd0aD1uYXRpdmVNYXgoYXJncy5sZW5ndGgtc3RhcnQsMCksYXJyYXk9QXJyYXkobGVuZ3RoKTt3aGlsZSgrK2luZGV4PGxlbmd0aCl7YXJyYXlbaW5kZXhdPWFyZ3Nbc3RhcnQraW5kZXhdO31pbmRleD0tMTt2YXIgb3RoZXJBcmdzPUFycmF5KHN0YXJ0KzEpO3doaWxlKCsraW5kZXg8c3RhcnQpe290aGVyQXJnc1tpbmRleF09YXJnc1tpbmRleF07fW90aGVyQXJnc1tzdGFydF09dHJhbnNmb3JtKGFycmF5KTtyZXR1cm4gYXBwbHkoZnVuYyx0aGlzLG90aGVyQXJncyk7fTt9LyoqXG4gICAgICAgICAqIEdldHMgdGhlIHBhcmVudCB2YWx1ZSBhdCBgcGF0aGAgb2YgYG9iamVjdGAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgICAgICogQHBhcmFtIHtBcnJheX0gcGF0aCBUaGUgcGF0aCB0byBnZXQgdGhlIHBhcmVudCB2YWx1ZSBvZi5cbiAgICAgICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHBhcmVudCB2YWx1ZS5cbiAgICAgICAgICovZnVuY3Rpb24gcGFyZW50KG9iamVjdCxwYXRoKXtyZXR1cm4gcGF0aC5sZW5ndGg8Mj9vYmplY3Q6YmFzZUdldChvYmplY3QsYmFzZVNsaWNlKHBhdGgsMCwtMSkpO30vKipcbiAgICAgICAgICogUmVvcmRlciBgYXJyYXlgIGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWVkIGluZGV4ZXMgd2hlcmUgdGhlIGVsZW1lbnQgYXRcbiAgICAgICAgICogdGhlIGZpcnN0IGluZGV4IGlzIGFzc2lnbmVkIGFzIHRoZSBmaXJzdCBlbGVtZW50LCB0aGUgZWxlbWVudCBhdFxuICAgICAgICAgKiB0aGUgc2Vjb25kIGluZGV4IGlzIGFzc2lnbmVkIGFzIHRoZSBzZWNvbmQgZWxlbWVudCwgYW5kIHNvIG9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcmVvcmRlci5cbiAgICAgICAgICogQHBhcmFtIHtBcnJheX0gaW5kZXhlcyBUaGUgYXJyYW5nZWQgYXJyYXkgaW5kZXhlcy5cbiAgICAgICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gICAgICAgICAqL2Z1bmN0aW9uIHJlb3JkZXIoYXJyYXksaW5kZXhlcyl7dmFyIGFyckxlbmd0aD1hcnJheS5sZW5ndGgsbGVuZ3RoPW5hdGl2ZU1pbihpbmRleGVzLmxlbmd0aCxhcnJMZW5ndGgpLG9sZEFycmF5PWNvcHlBcnJheShhcnJheSk7d2hpbGUobGVuZ3RoLS0pe3ZhciBpbmRleD1pbmRleGVzW2xlbmd0aF07YXJyYXlbbGVuZ3RoXT1pc0luZGV4KGluZGV4LGFyckxlbmd0aCk/b2xkQXJyYXlbaW5kZXhdOnVuZGVmaW5lZDt9cmV0dXJuIGFycmF5O30vKipcbiAgICAgICAgICogU2V0cyBtZXRhZGF0YSBmb3IgYGZ1bmNgLlxuICAgICAgICAgKlxuICAgICAgICAgKiAqKk5vdGU6KiogSWYgdGhpcyBmdW5jdGlvbiBiZWNvbWVzIGhvdCwgaS5lLiBpcyBpbnZva2VkIGEgbG90IGluIGEgc2hvcnRcbiAgICAgICAgICogcGVyaW9kIG9mIHRpbWUsIGl0IHdpbGwgdHJpcCBpdHMgYnJlYWtlciBhbmQgdHJhbnNpdGlvbiB0byBhbiBpZGVudGl0eVxuICAgICAgICAgKiBmdW5jdGlvbiB0byBhdm9pZCBnYXJiYWdlIGNvbGxlY3Rpb24gcGF1c2VzIGluIFY4LiBTZWVcbiAgICAgICAgICogW1Y4IGlzc3VlIDIwNzBdKGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTIwNzApXG4gICAgICAgICAqIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFzc29jaWF0ZSBtZXRhZGF0YSB3aXRoLlxuICAgICAgICAgKiBAcGFyYW0geyp9IGRhdGEgVGhlIG1ldGFkYXRhLlxuICAgICAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICAgICAgICAgKi92YXIgc2V0RGF0YT1zaG9ydE91dChiYXNlU2V0RGF0YSk7LyoqXG4gICAgICAgICAqIEEgc2ltcGxlIHdyYXBwZXIgYXJvdW5kIHRoZSBnbG9iYWwgW2BzZXRUaW1lb3V0YF0oaHR0cHM6Ly9tZG4uaW8vc2V0VGltZW91dCkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRlbGF5LlxuICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gd2FpdCBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byBkZWxheSBpbnZvY2F0aW9uLlxuICAgICAgICAgKiBAcmV0dXJucyB7bnVtYmVyfE9iamVjdH0gUmV0dXJucyB0aGUgdGltZXIgaWQgb3IgdGltZW91dCBvYmplY3QuXG4gICAgICAgICAqL3ZhciBzZXRUaW1lb3V0PWN0eFNldFRpbWVvdXR8fGZ1bmN0aW9uKGZ1bmMsd2FpdCl7cmV0dXJuIHJvb3Quc2V0VGltZW91dChmdW5jLHdhaXQpO307LyoqXG4gICAgICAgKiBTZXRzIHRoZSBgdG9TdHJpbmdgIG1ldGhvZCBvZiBgZnVuY2AgdG8gcmV0dXJuIGBzdHJpbmdgLlxuICAgICAgICpcbiAgICAgICAqIEBwcml2YXRlXG4gICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBtb2RpZnkuXG4gICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdHJpbmcgVGhlIGB0b1N0cmluZ2AgcmVzdWx0LlxuICAgICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBmdW5jYC5cbiAgICAgICAqL3ZhciBzZXRUb1N0cmluZz1zaG9ydE91dChiYXNlU2V0VG9TdHJpbmcpOy8qKlxuICAgICAgICAgKiBTZXRzIHRoZSBgdG9TdHJpbmdgIG1ldGhvZCBvZiBgd3JhcHBlcmAgdG8gbWltaWMgdGhlIHNvdXJjZSBvZiBgcmVmZXJlbmNlYFxuICAgICAgICAgKiB3aXRoIHdyYXBwZXIgZGV0YWlscyBpbiBhIGNvbW1lbnQgYXQgdGhlIHRvcCBvZiB0aGUgc291cmNlIGJvZHkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHdyYXBwZXIgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gcmVmZXJlbmNlIFRoZSByZWZlcmVuY2UgZnVuY3Rpb24uXG4gICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGNyZWF0ZVdyYXBgIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgd3JhcHBlcmAuXG4gICAgICAgICAqL2Z1bmN0aW9uIHNldFdyYXBUb1N0cmluZyh3cmFwcGVyLHJlZmVyZW5jZSxiaXRtYXNrKXt2YXIgc291cmNlPXJlZmVyZW5jZSsnJztyZXR1cm4gc2V0VG9TdHJpbmcod3JhcHBlcixpbnNlcnRXcmFwRGV0YWlscyhzb3VyY2UsdXBkYXRlV3JhcERldGFpbHMoZ2V0V3JhcERldGFpbHMoc291cmNlKSxiaXRtYXNrKSkpO30vKipcbiAgICAgICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQnbGwgc2hvcnQgb3V0IGFuZCBpbnZva2UgYGlkZW50aXR5YCBpbnN0ZWFkXG4gICAgICAgICAqIG9mIGBmdW5jYCB3aGVuIGl0J3MgY2FsbGVkIGBIT1RfQ09VTlRgIG9yIG1vcmUgdGltZXMgaW4gYEhPVF9TUEFOYFxuICAgICAgICAgKiBtaWxsaXNlY29uZHMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHJlc3RyaWN0LlxuICAgICAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzaG9ydGFibGUgZnVuY3Rpb24uXG4gICAgICAgICAqL2Z1bmN0aW9uIHNob3J0T3V0KGZ1bmMpe3ZhciBjb3VudD0wLGxhc3RDYWxsZWQ9MDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgc3RhbXA9bmF0aXZlTm93KCkscmVtYWluaW5nPUhPVF9TUEFOLShzdGFtcC1sYXN0Q2FsbGVkKTtsYXN0Q2FsbGVkPXN0YW1wO2lmKHJlbWFpbmluZz4wKXtpZigrK2NvdW50Pj1IT1RfQ09VTlQpe3JldHVybiBhcmd1bWVudHNbMF07fX1lbHNle2NvdW50PTA7fXJldHVybiBmdW5jLmFwcGx5KHVuZGVmaW5lZCxhcmd1bWVudHMpO307fS8qKlxuICAgICAgICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uc2h1ZmZsZWAgd2hpY2ggbXV0YXRlcyBhbmQgc2V0cyB0aGUgc2l6ZSBvZiBgYXJyYXlgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gc2h1ZmZsZS5cbiAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IFtzaXplPWFycmF5Lmxlbmd0aF0gVGhlIHNpemUgb2YgYGFycmF5YC5cbiAgICAgICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gICAgICAgICAqL2Z1bmN0aW9uIHNodWZmbGVTZWxmKGFycmF5LHNpemUpe3ZhciBpbmRleD0tMSxsZW5ndGg9YXJyYXkubGVuZ3RoLGxhc3RJbmRleD1sZW5ndGgtMTtzaXplPXNpemU9PT11bmRlZmluZWQ/bGVuZ3RoOnNpemU7d2hpbGUoKytpbmRleDxzaXplKXt2YXIgcmFuZD1iYXNlUmFuZG9tKGluZGV4LGxhc3RJbmRleCksdmFsdWU9YXJyYXlbcmFuZF07YXJyYXlbcmFuZF09YXJyYXlbaW5kZXhdO2FycmF5W2luZGV4XT12YWx1ZTt9YXJyYXkubGVuZ3RoPXNpemU7cmV0dXJuIGFycmF5O30vKipcbiAgICAgICAgICogQ29udmVydHMgYHN0cmluZ2AgdG8gYSBwcm9wZXJ0eSBwYXRoIGFycmF5LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAgICAgICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBwcm9wZXJ0eSBwYXRoIGFycmF5LlxuICAgICAgICAgKi92YXIgc3RyaW5nVG9QYXRoPW1lbW9pemVDYXBwZWQoZnVuY3Rpb24oc3RyaW5nKXt2YXIgcmVzdWx0PVtdO2lmKHN0cmluZy5jaGFyQ29kZUF0KDApPT09NDYvKiAuICovKXtyZXN1bHQucHVzaCgnJyk7fXN0cmluZy5yZXBsYWNlKHJlUHJvcE5hbWUsZnVuY3Rpb24obWF0Y2gsbnVtYmVyLHF1b3RlLHN1YlN0cmluZyl7cmVzdWx0LnB1c2gocXVvdGU/c3ViU3RyaW5nLnJlcGxhY2UocmVFc2NhcGVDaGFyLCckMScpOm51bWJlcnx8bWF0Y2gpO30pO3JldHVybiByZXN1bHQ7fSk7LyoqXG4gICAgICAgKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIGtleSBpZiBpdCdzIG5vdCBhIHN0cmluZyBvciBzeW1ib2wuXG4gICAgICAgKlxuICAgICAgICogQHByaXZhdGVcbiAgICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfHN5bWJvbH0gUmV0dXJucyB0aGUga2V5LlxuICAgICAgICovZnVuY3Rpb24gdG9LZXkodmFsdWUpe2lmKHR5cGVvZiB2YWx1ZT09PSdzdHJpbmcnfHxpc1N5bWJvbCh2YWx1ZSkpe3JldHVybiB2YWx1ZTt9dmFyIHJlc3VsdD12YWx1ZSsnJztyZXR1cm4gcmVzdWx0PT0nMCcmJjEvdmFsdWU9PS1JTkZJTklUWT8nLTAnOnJlc3VsdDt9LyoqXG4gICAgICAgICAqIENvbnZlcnRzIGBmdW5jYCB0byBpdHMgc291cmNlIGNvZGUuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNvbnZlcnQuXG4gICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHNvdXJjZSBjb2RlLlxuICAgICAgICAgKi9mdW5jdGlvbiB0b1NvdXJjZShmdW5jKXtpZihmdW5jIT1udWxsKXt0cnl7cmV0dXJuIGZ1bmNUb1N0cmluZy5jYWxsKGZ1bmMpO31jYXRjaChlKXt9dHJ5e3JldHVybiBmdW5jKycnO31jYXRjaChlKXt9fXJldHVybicnO30vKipcbiAgICAgICAgICogVXBkYXRlcyB3cmFwcGVyIGBkZXRhaWxzYCBiYXNlZCBvbiBgYml0bWFza2AgZmxhZ3MuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqIEByZXR1cm5zIHtBcnJheX0gZGV0YWlscyBUaGUgZGV0YWlscyB0byBtb2RpZnkuXG4gICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGNyZWF0ZVdyYXBgIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgZGV0YWlsc2AuXG4gICAgICAgICAqL2Z1bmN0aW9uIHVwZGF0ZVdyYXBEZXRhaWxzKGRldGFpbHMsYml0bWFzayl7YXJyYXlFYWNoKHdyYXBGbGFncyxmdW5jdGlvbihwYWlyKXt2YXIgdmFsdWU9J18uJytwYWlyWzBdO2lmKGJpdG1hc2smcGFpclsxXSYmIWFycmF5SW5jbHVkZXMoZGV0YWlscyx2YWx1ZSkpe2RldGFpbHMucHVzaCh2YWx1ZSk7fX0pO3JldHVybiBkZXRhaWxzLnNvcnQoKTt9LyoqXG4gICAgICAgICAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgd3JhcHBlcmAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSB3cmFwcGVyIFRoZSB3cmFwcGVyIHRvIGNsb25lLlxuICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjbG9uZWQgd3JhcHBlci5cbiAgICAgICAgICovZnVuY3Rpb24gd3JhcHBlckNsb25lKHdyYXBwZXIpe2lmKHdyYXBwZXIgaW5zdGFuY2VvZiBMYXp5V3JhcHBlcil7cmV0dXJuIHdyYXBwZXIuY2xvbmUoKTt9dmFyIHJlc3VsdD1uZXcgTG9kYXNoV3JhcHBlcih3cmFwcGVyLl9fd3JhcHBlZF9fLHdyYXBwZXIuX19jaGFpbl9fKTtyZXN1bHQuX19hY3Rpb25zX189Y29weUFycmF5KHdyYXBwZXIuX19hY3Rpb25zX18pO3Jlc3VsdC5fX2luZGV4X189d3JhcHBlci5fX2luZGV4X187cmVzdWx0Ll9fdmFsdWVzX189d3JhcHBlci5fX3ZhbHVlc19fO3JldHVybiByZXN1bHQ7fS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovLyoqXG4gICAgICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgZWxlbWVudHMgc3BsaXQgaW50byBncm91cHMgdGhlIGxlbmd0aCBvZiBgc2l6ZWAuXG4gICAgICAgICAqIElmIGBhcnJheWAgY2FuJ3QgYmUgc3BsaXQgZXZlbmx5LCB0aGUgZmluYWwgY2h1bmsgd2lsbCBiZSB0aGUgcmVtYWluaW5nXG4gICAgICAgICAqIGVsZW1lbnRzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHByb2Nlc3MuXG4gICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc2l6ZT0xXSBUaGUgbGVuZ3RoIG9mIGVhY2ggY2h1bmtcbiAgICAgICAgICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ubWFwYC5cbiAgICAgICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgY2h1bmtzLlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLmNodW5rKFsnYScsICdiJywgJ2MnLCAnZCddLCAyKTtcbiAgICAgICAgICogLy8gPT4gW1snYScsICdiJ10sIFsnYycsICdkJ11dXG4gICAgICAgICAqXG4gICAgICAgICAqIF8uY2h1bmsoWydhJywgJ2InLCAnYycsICdkJ10sIDMpO1xuICAgICAgICAgKiAvLyA9PiBbWydhJywgJ2InLCAnYyddLCBbJ2QnXV1cbiAgICAgICAgICovZnVuY3Rpb24gY2h1bmsoYXJyYXksc2l6ZSxndWFyZCl7aWYoZ3VhcmQ/aXNJdGVyYXRlZUNhbGwoYXJyYXksc2l6ZSxndWFyZCk6c2l6ZT09PXVuZGVmaW5lZCl7c2l6ZT0xO31lbHNle3NpemU9bmF0aXZlTWF4KHRvSW50ZWdlcihzaXplKSwwKTt9dmFyIGxlbmd0aD1hcnJheT09bnVsbD8wOmFycmF5Lmxlbmd0aDtpZighbGVuZ3RofHxzaXplPDEpe3JldHVybltdO312YXIgaW5kZXg9MCxyZXNJbmRleD0wLHJlc3VsdD1BcnJheShuYXRpdmVDZWlsKGxlbmd0aC9zaXplKSk7d2hpbGUoaW5kZXg8bGVuZ3RoKXtyZXN1bHRbcmVzSW5kZXgrK109YmFzZVNsaWNlKGFycmF5LGluZGV4LGluZGV4Kz1zaXplKTt9cmV0dXJuIHJlc3VsdDt9LyoqXG4gICAgICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgd2l0aCBhbGwgZmFsc2V5IHZhbHVlcyByZW1vdmVkLiBUaGUgdmFsdWVzIGBmYWxzZWAsIGBudWxsYCxcbiAgICAgICAgICogYDBgLCBgXCJcImAsIGB1bmRlZmluZWRgLCBhbmQgYE5hTmAgYXJlIGZhbHNleS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBjb21wYWN0LlxuICAgICAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBmaWx0ZXJlZCB2YWx1ZXMuXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8uY29tcGFjdChbMCwgMSwgZmFsc2UsIDIsICcnLCAzXSk7XG4gICAgICAgICAqIC8vID0+IFsxLCAyLCAzXVxuICAgICAgICAgKi9mdW5jdGlvbiBjb21wYWN0KGFycmF5KXt2YXIgaW5kZXg9LTEsbGVuZ3RoPWFycmF5PT1udWxsPzA6YXJyYXkubGVuZ3RoLHJlc0luZGV4PTAscmVzdWx0PVtdO3doaWxlKCsraW5kZXg8bGVuZ3RoKXt2YXIgdmFsdWU9YXJyYXlbaW5kZXhdO2lmKHZhbHVlKXtyZXN1bHRbcmVzSW5kZXgrK109dmFsdWU7fX1yZXR1cm4gcmVzdWx0O30vKipcbiAgICAgICAgICogQ3JlYXRlcyBhIG5ldyBhcnJheSBjb25jYXRlbmF0aW5nIGBhcnJheWAgd2l0aCBhbnkgYWRkaXRpb25hbCBhcnJheXNcbiAgICAgICAgICogYW5kL29yIHZhbHVlcy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBjb25jYXRlbmF0ZS5cbiAgICAgICAgICogQHBhcmFtIHsuLi4qfSBbdmFsdWVzXSBUaGUgdmFsdWVzIHRvIGNvbmNhdGVuYXRlLlxuICAgICAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBjb25jYXRlbmF0ZWQgYXJyYXkuXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIHZhciBhcnJheSA9IFsxXTtcbiAgICAgICAgICogdmFyIG90aGVyID0gXy5jb25jYXQoYXJyYXksIDIsIFszXSwgW1s0XV0pO1xuICAgICAgICAgKlxuICAgICAgICAgKiBjb25zb2xlLmxvZyhvdGhlcik7XG4gICAgICAgICAqIC8vID0+IFsxLCAyLCAzLCBbNF1dXG4gICAgICAgICAqXG4gICAgICAgICAqIGNvbnNvbGUubG9nKGFycmF5KTtcbiAgICAgICAgICogLy8gPT4gWzFdXG4gICAgICAgICAqL2Z1bmN0aW9uIGNvbmNhdCgpe3ZhciBsZW5ndGg9YXJndW1lbnRzLmxlbmd0aDtpZighbGVuZ3RoKXtyZXR1cm5bXTt9dmFyIGFyZ3M9QXJyYXkobGVuZ3RoLTEpLGFycmF5PWFyZ3VtZW50c1swXSxpbmRleD1sZW5ndGg7d2hpbGUoaW5kZXgtLSl7YXJnc1tpbmRleC0xXT1hcmd1bWVudHNbaW5kZXhdO31yZXR1cm4gYXJyYXlQdXNoKGlzQXJyYXkoYXJyYXkpP2NvcHlBcnJheShhcnJheSk6W2FycmF5XSxiYXNlRmxhdHRlbihhcmdzLDEpKTt9LyoqXG4gICAgICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgYGFycmF5YCB2YWx1ZXMgbm90IGluY2x1ZGVkIGluIHRoZSBvdGhlciBnaXZlbiBhcnJheXNcbiAgICAgICAgICogdXNpbmcgW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAgICAgICAgICogZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zLiBUaGUgb3JkZXIgYW5kIHJlZmVyZW5jZXMgb2YgcmVzdWx0IHZhbHVlcyBhcmVcbiAgICAgICAgICogZGV0ZXJtaW5lZCBieSB0aGUgZmlyc3QgYXJyYXkuXG4gICAgICAgICAqXG4gICAgICAgICAqICoqTm90ZToqKiBVbmxpa2UgYF8ucHVsbEFsbGAsIHRoaXMgbWV0aG9kIHJldHVybnMgYSBuZXcgYXJyYXkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQHNpbmNlIDAuMS4wXG4gICAgICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgICAgICogQHBhcmFtIHsuLi5BcnJheX0gW3ZhbHVlc10gVGhlIHZhbHVlcyB0byBleGNsdWRlLlxuICAgICAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBmaWx0ZXJlZCB2YWx1ZXMuXG4gICAgICAgICAqIEBzZWUgXy53aXRob3V0LCBfLnhvclxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLmRpZmZlcmVuY2UoWzIsIDFdLCBbMiwgM10pO1xuICAgICAgICAgKiAvLyA9PiBbMV1cbiAgICAgICAgICovdmFyIGRpZmZlcmVuY2U9YmFzZVJlc3QoZnVuY3Rpb24oYXJyYXksdmFsdWVzKXtyZXR1cm4gaXNBcnJheUxpa2VPYmplY3QoYXJyYXkpP2Jhc2VEaWZmZXJlbmNlKGFycmF5LGJhc2VGbGF0dGVuKHZhbHVlcywxLGlzQXJyYXlMaWtlT2JqZWN0LHRydWUpKTpbXTt9KTsvKipcbiAgICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZGlmZmVyZW5jZWAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgaXRlcmF0ZWVgIHdoaWNoXG4gICAgICAgKiBpcyBpbnZva2VkIGZvciBlYWNoIGVsZW1lbnQgb2YgYGFycmF5YCBhbmQgYHZhbHVlc2AgdG8gZ2VuZXJhdGUgdGhlIGNyaXRlcmlvblxuICAgICAgICogYnkgd2hpY2ggdGhleSdyZSBjb21wYXJlZC4gVGhlIG9yZGVyIGFuZCByZWZlcmVuY2VzIG9mIHJlc3VsdCB2YWx1ZXMgYXJlXG4gICAgICAgKiBkZXRlcm1pbmVkIGJ5IHRoZSBmaXJzdCBhcnJheS4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCBvbmUgYXJndW1lbnQ6XG4gICAgICAgKiAodmFsdWUpLlxuICAgICAgICpcbiAgICAgICAqICoqTm90ZToqKiBVbmxpa2UgYF8ucHVsbEFsbEJ5YCwgdGhpcyBtZXRob2QgcmV0dXJucyBhIG5ldyBhcnJheS5cbiAgICAgICAqXG4gICAgICAgKiBAc3RhdGljXG4gICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICogQHNpbmNlIDQuMC4wXG4gICAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgICAgICogQHBhcmFtIHsuLi5BcnJheX0gW3ZhbHVlc10gVGhlIHZhbHVlcyB0byBleGNsdWRlLlxuICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgZmlsdGVyZWQgdmFsdWVzLlxuICAgICAgICogQGV4YW1wbGVcbiAgICAgICAqXG4gICAgICAgKiBfLmRpZmZlcmVuY2VCeShbMi4xLCAxLjJdLCBbMi4zLCAzLjRdLCBNYXRoLmZsb29yKTtcbiAgICAgICAqIC8vID0+IFsxLjJdXG4gICAgICAgKlxuICAgICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICAgKiBfLmRpZmZlcmVuY2VCeShbeyAneCc6IDIgfSwgeyAneCc6IDEgfV0sIFt7ICd4JzogMSB9XSwgJ3gnKTtcbiAgICAgICAqIC8vID0+IFt7ICd4JzogMiB9XVxuICAgICAgICovdmFyIGRpZmZlcmVuY2VCeT1iYXNlUmVzdChmdW5jdGlvbihhcnJheSx2YWx1ZXMpe3ZhciBpdGVyYXRlZT1sYXN0KHZhbHVlcyk7aWYoaXNBcnJheUxpa2VPYmplY3QoaXRlcmF0ZWUpKXtpdGVyYXRlZT11bmRlZmluZWQ7fXJldHVybiBpc0FycmF5TGlrZU9iamVjdChhcnJheSk/YmFzZURpZmZlcmVuY2UoYXJyYXksYmFzZUZsYXR0ZW4odmFsdWVzLDEsaXNBcnJheUxpa2VPYmplY3QsdHJ1ZSksZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsMikpOltdO30pOy8qKlxuICAgICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5kaWZmZXJlbmNlYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBjb21wYXJhdG9yYFxuICAgICAgICogd2hpY2ggaXMgaW52b2tlZCB0byBjb21wYXJlIGVsZW1lbnRzIG9mIGBhcnJheWAgdG8gYHZhbHVlc2AuIFRoZSBvcmRlciBhbmRcbiAgICAgICAqIHJlZmVyZW5jZXMgb2YgcmVzdWx0IHZhbHVlcyBhcmUgZGV0ZXJtaW5lZCBieSB0aGUgZmlyc3QgYXJyYXkuIFRoZSBjb21wYXJhdG9yXG4gICAgICAgKiBpcyBpbnZva2VkIHdpdGggdHdvIGFyZ3VtZW50czogKGFyclZhbCwgb3RoVmFsKS5cbiAgICAgICAqXG4gICAgICAgKiAqKk5vdGU6KiogVW5saWtlIGBfLnB1bGxBbGxXaXRoYCwgdGhpcyBtZXRob2QgcmV0dXJucyBhIG5ldyBhcnJheS5cbiAgICAgICAqXG4gICAgICAgKiBAc3RhdGljXG4gICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICogQHNpbmNlIDQuMC4wXG4gICAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgICAgICogQHBhcmFtIHsuLi5BcnJheX0gW3ZhbHVlc10gVGhlIHZhbHVlcyB0byBleGNsdWRlLlxuICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NvbXBhcmF0b3JdIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBmaWx0ZXJlZCB2YWx1ZXMuXG4gICAgICAgKiBAZXhhbXBsZVxuICAgICAgICpcbiAgICAgICAqIHZhciBvYmplY3RzID0gW3sgJ3gnOiAxLCAneSc6IDIgfSwgeyAneCc6IDIsICd5JzogMSB9XTtcbiAgICAgICAqXG4gICAgICAgKiBfLmRpZmZlcmVuY2VXaXRoKG9iamVjdHMsIFt7ICd4JzogMSwgJ3knOiAyIH1dLCBfLmlzRXF1YWwpO1xuICAgICAgICogLy8gPT4gW3sgJ3gnOiAyLCAneSc6IDEgfV1cbiAgICAgICAqL3ZhciBkaWZmZXJlbmNlV2l0aD1iYXNlUmVzdChmdW5jdGlvbihhcnJheSx2YWx1ZXMpe3ZhciBjb21wYXJhdG9yPWxhc3QodmFsdWVzKTtpZihpc0FycmF5TGlrZU9iamVjdChjb21wYXJhdG9yKSl7Y29tcGFyYXRvcj11bmRlZmluZWQ7fXJldHVybiBpc0FycmF5TGlrZU9iamVjdChhcnJheSk/YmFzZURpZmZlcmVuY2UoYXJyYXksYmFzZUZsYXR0ZW4odmFsdWVzLDEsaXNBcnJheUxpa2VPYmplY3QsdHJ1ZSksdW5kZWZpbmVkLGNvbXBhcmF0b3IpOltdO30pOy8qKlxuICAgICAgICogQ3JlYXRlcyBhIHNsaWNlIG9mIGBhcnJheWAgd2l0aCBgbmAgZWxlbWVudHMgZHJvcHBlZCBmcm9tIHRoZSBiZWdpbm5pbmcuXG4gICAgICAgKlxuICAgICAgICogQHN0YXRpY1xuICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAqIEBzaW5jZSAwLjUuMFxuICAgICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gICAgICAgKiBAcGFyYW0ge251bWJlcn0gW249MV0gVGhlIG51bWJlciBvZiBlbGVtZW50cyB0byBkcm9wLlxuICAgICAgICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ubWFwYC5cbiAgICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgc2xpY2Ugb2YgYGFycmF5YC5cbiAgICAgICAqIEBleGFtcGxlXG4gICAgICAgKlxuICAgICAgICogXy5kcm9wKFsxLCAyLCAzXSk7XG4gICAgICAgKiAvLyA9PiBbMiwgM11cbiAgICAgICAqXG4gICAgICAgKiBfLmRyb3AoWzEsIDIsIDNdLCAyKTtcbiAgICAgICAqIC8vID0+IFszXVxuICAgICAgICpcbiAgICAgICAqIF8uZHJvcChbMSwgMiwgM10sIDUpO1xuICAgICAgICogLy8gPT4gW11cbiAgICAgICAqXG4gICAgICAgKiBfLmRyb3AoWzEsIDIsIDNdLCAwKTtcbiAgICAgICAqIC8vID0+IFsxLCAyLCAzXVxuICAgICAgICovZnVuY3Rpb24gZHJvcChhcnJheSxuLGd1YXJkKXt2YXIgbGVuZ3RoPWFycmF5PT1udWxsPzA6YXJyYXkubGVuZ3RoO2lmKCFsZW5ndGgpe3JldHVybltdO31uPWd1YXJkfHxuPT09dW5kZWZpbmVkPzE6dG9JbnRlZ2VyKG4pO3JldHVybiBiYXNlU2xpY2UoYXJyYXksbjwwPzA6bixsZW5ndGgpO30vKipcbiAgICAgICAgICogQ3JlYXRlcyBhIHNsaWNlIG9mIGBhcnJheWAgd2l0aCBgbmAgZWxlbWVudHMgZHJvcHBlZCBmcm9tIHRoZSBlbmQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQHNpbmNlIDMuMC4wXG4gICAgICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbj0xXSBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRvIGRyb3AuXG4gICAgICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gICAgICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgc2xpY2Ugb2YgYGFycmF5YC5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogXy5kcm9wUmlnaHQoWzEsIDIsIDNdKTtcbiAgICAgICAgICogLy8gPT4gWzEsIDJdXG4gICAgICAgICAqXG4gICAgICAgICAqIF8uZHJvcFJpZ2h0KFsxLCAyLCAzXSwgMik7XG4gICAgICAgICAqIC8vID0+IFsxXVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLmRyb3BSaWdodChbMSwgMiwgM10sIDUpO1xuICAgICAgICAgKiAvLyA9PiBbXVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLmRyb3BSaWdodChbMSwgMiwgM10sIDApO1xuICAgICAgICAgKiAvLyA9PiBbMSwgMiwgM11cbiAgICAgICAgICovZnVuY3Rpb24gZHJvcFJpZ2h0KGFycmF5LG4sZ3VhcmQpe3ZhciBsZW5ndGg9YXJyYXk9PW51bGw/MDphcnJheS5sZW5ndGg7aWYoIWxlbmd0aCl7cmV0dXJuW107fW49Z3VhcmR8fG49PT11bmRlZmluZWQ/MTp0b0ludGVnZXIobik7bj1sZW5ndGgtbjtyZXR1cm4gYmFzZVNsaWNlKGFycmF5LDAsbjwwPzA6bik7fS8qKlxuICAgICAgICAgKiBDcmVhdGVzIGEgc2xpY2Ugb2YgYGFycmF5YCBleGNsdWRpbmcgZWxlbWVudHMgZHJvcHBlZCBmcm9tIHRoZSBlbmQuXG4gICAgICAgICAqIEVsZW1lbnRzIGFyZSBkcm9wcGVkIHVudGlsIGBwcmVkaWNhdGVgIHJldHVybnMgZmFsc2V5LiBUaGUgcHJlZGljYXRlIGlzXG4gICAgICAgICAqIGludm9rZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6ICh2YWx1ZSwgaW5kZXgsIGFycmF5KS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBxdWVyeS5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHNsaWNlIG9mIGBhcnJheWAuXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIHZhciB1c2VycyA9IFtcbiAgICAgICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScsICAnYWN0aXZlJzogdHJ1ZSB9LFxuICAgICAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgICdhY3RpdmUnOiBmYWxzZSB9LFxuICAgICAgICAgKiAgIHsgJ3VzZXInOiAncGViYmxlcycsICdhY3RpdmUnOiBmYWxzZSB9XG4gICAgICAgICAqIF07XG4gICAgICAgICAqXG4gICAgICAgICAqIF8uZHJvcFJpZ2h0V2hpbGUodXNlcnMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuICFvLmFjdGl2ZTsgfSk7XG4gICAgICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFsnYmFybmV5J11cbiAgICAgICAgICpcbiAgICAgICAgICogLy8gVGhlIGBfLm1hdGNoZXNgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgICAgICogXy5kcm9wUmlnaHRXaGlsZSh1c2VycywgeyAndXNlcic6ICdwZWJibGVzJywgJ2FjdGl2ZSc6IGZhbHNlIH0pO1xuICAgICAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ2Jhcm5leScsICdmcmVkJ11cbiAgICAgICAgICpcbiAgICAgICAgICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAgICAgKiBfLmRyb3BSaWdodFdoaWxlKHVzZXJzLCBbJ2FjdGl2ZScsIGZhbHNlXSk7XG4gICAgICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFsnYmFybmV5J11cbiAgICAgICAgICpcbiAgICAgICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICAgICAqIF8uZHJvcFJpZ2h0V2hpbGUodXNlcnMsICdhY3RpdmUnKTtcbiAgICAgICAgICogLy8gPT4gb2JqZWN0cyBmb3IgWydiYXJuZXknLCAnZnJlZCcsICdwZWJibGVzJ11cbiAgICAgICAgICovZnVuY3Rpb24gZHJvcFJpZ2h0V2hpbGUoYXJyYXkscHJlZGljYXRlKXtyZXR1cm4gYXJyYXkmJmFycmF5Lmxlbmd0aD9iYXNlV2hpbGUoYXJyYXksZ2V0SXRlcmF0ZWUocHJlZGljYXRlLDMpLHRydWUsdHJ1ZSk6W107fS8qKlxuICAgICAgICAgKiBDcmVhdGVzIGEgc2xpY2Ugb2YgYGFycmF5YCBleGNsdWRpbmcgZWxlbWVudHMgZHJvcHBlZCBmcm9tIHRoZSBiZWdpbm5pbmcuXG4gICAgICAgICAqIEVsZW1lbnRzIGFyZSBkcm9wcGVkIHVudGlsIGBwcmVkaWNhdGVgIHJldHVybnMgZmFsc2V5LiBUaGUgcHJlZGljYXRlIGlzXG4gICAgICAgICAqIGludm9rZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6ICh2YWx1ZSwgaW5kZXgsIGFycmF5KS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBxdWVyeS5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHNsaWNlIG9mIGBhcnJheWAuXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIHZhciB1c2VycyA9IFtcbiAgICAgICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScsICAnYWN0aXZlJzogZmFsc2UgfSxcbiAgICAgICAgICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICAnYWN0aXZlJzogZmFsc2UgfSxcbiAgICAgICAgICogICB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWN0aXZlJzogdHJ1ZSB9XG4gICAgICAgICAqIF07XG4gICAgICAgICAqXG4gICAgICAgICAqIF8uZHJvcFdoaWxlKHVzZXJzLCBmdW5jdGlvbihvKSB7IHJldHVybiAhby5hY3RpdmU7IH0pO1xuICAgICAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ3BlYmJsZXMnXVxuICAgICAgICAgKlxuICAgICAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc2AgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAgICAgKiBfLmRyb3BXaGlsZSh1c2VycywgeyAndXNlcic6ICdiYXJuZXknLCAnYWN0aXZlJzogZmFsc2UgfSk7XG4gICAgICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFsnZnJlZCcsICdwZWJibGVzJ11cbiAgICAgICAgICpcbiAgICAgICAgICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAgICAgKiBfLmRyb3BXaGlsZSh1c2VycywgWydhY3RpdmUnLCBmYWxzZV0pO1xuICAgICAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ3BlYmJsZXMnXVxuICAgICAgICAgKlxuICAgICAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgICAgICogXy5kcm9wV2hpbGUodXNlcnMsICdhY3RpdmUnKTtcbiAgICAgICAgICogLy8gPT4gb2JqZWN0cyBmb3IgWydiYXJuZXknLCAnZnJlZCcsICdwZWJibGVzJ11cbiAgICAgICAgICovZnVuY3Rpb24gZHJvcFdoaWxlKGFycmF5LHByZWRpY2F0ZSl7cmV0dXJuIGFycmF5JiZhcnJheS5sZW5ndGg/YmFzZVdoaWxlKGFycmF5LGdldEl0ZXJhdGVlKHByZWRpY2F0ZSwzKSx0cnVlKTpbXTt9LyoqXG4gICAgICAgICAqIEZpbGxzIGVsZW1lbnRzIG9mIGBhcnJheWAgd2l0aCBgdmFsdWVgIGZyb20gYHN0YXJ0YCB1cCB0bywgYnV0IG5vdFxuICAgICAgICAgKiBpbmNsdWRpbmcsIGBlbmRgLlxuICAgICAgICAgKlxuICAgICAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgYXJyYXlgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSAzLjIuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGZpbGwuXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGZpbGwgYGFycmF5YCB3aXRoLlxuICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PTBdIFRoZSBzdGFydCBwb3NpdGlvbi5cbiAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IFtlbmQ9YXJyYXkubGVuZ3RoXSBUaGUgZW5kIHBvc2l0aW9uLlxuICAgICAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogdmFyIGFycmF5ID0gWzEsIDIsIDNdO1xuICAgICAgICAgKlxuICAgICAgICAgKiBfLmZpbGwoYXJyYXksICdhJyk7XG4gICAgICAgICAqIGNvbnNvbGUubG9nKGFycmF5KTtcbiAgICAgICAgICogLy8gPT4gWydhJywgJ2EnLCAnYSddXG4gICAgICAgICAqXG4gICAgICAgICAqIF8uZmlsbChBcnJheSgzKSwgMik7XG4gICAgICAgICAqIC8vID0+IFsyLCAyLCAyXVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLmZpbGwoWzQsIDYsIDgsIDEwXSwgJyonLCAxLCAzKTtcbiAgICAgICAgICogLy8gPT4gWzQsICcqJywgJyonLCAxMF1cbiAgICAgICAgICovZnVuY3Rpb24gZmlsbChhcnJheSx2YWx1ZSxzdGFydCxlbmQpe3ZhciBsZW5ndGg9YXJyYXk9PW51bGw/MDphcnJheS5sZW5ndGg7aWYoIWxlbmd0aCl7cmV0dXJuW107fWlmKHN0YXJ0JiZ0eXBlb2Ygc3RhcnQhPT0nbnVtYmVyJyYmaXNJdGVyYXRlZUNhbGwoYXJyYXksdmFsdWUsc3RhcnQpKXtzdGFydD0wO2VuZD1sZW5ndGg7fXJldHVybiBiYXNlRmlsbChhcnJheSx2YWx1ZSxzdGFydCxlbmQpO30vKipcbiAgICAgICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5maW5kYCBleGNlcHQgdGhhdCBpdCByZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgZmlyc3RcbiAgICAgICAgICogZWxlbWVudCBgcHJlZGljYXRlYCByZXR1cm5zIHRydXRoeSBmb3IgaW5zdGVhZCBvZiB0aGUgZWxlbWVudCBpdHNlbGYuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQHNpbmNlIDEuMS4wXG4gICAgICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gW2Zyb21JbmRleD0wXSBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gICAgICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBmb3VuZCBlbGVtZW50LCBlbHNlIGAtMWAuXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIHZhciB1c2VycyA9IFtcbiAgICAgICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScsICAnYWN0aXZlJzogZmFsc2UgfSxcbiAgICAgICAgICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICAnYWN0aXZlJzogZmFsc2UgfSxcbiAgICAgICAgICogICB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWN0aXZlJzogdHJ1ZSB9XG4gICAgICAgICAqIF07XG4gICAgICAgICAqXG4gICAgICAgICAqIF8uZmluZEluZGV4KHVzZXJzLCBmdW5jdGlvbihvKSB7IHJldHVybiBvLnVzZXIgPT0gJ2Jhcm5leSc7IH0pO1xuICAgICAgICAgKiAvLyA9PiAwXG4gICAgICAgICAqXG4gICAgICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICAgICAqIF8uZmluZEluZGV4KHVzZXJzLCB7ICd1c2VyJzogJ2ZyZWQnLCAnYWN0aXZlJzogZmFsc2UgfSk7XG4gICAgICAgICAqIC8vID0+IDFcbiAgICAgICAgICpcbiAgICAgICAgICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAgICAgKiBfLmZpbmRJbmRleCh1c2VycywgWydhY3RpdmUnLCBmYWxzZV0pO1xuICAgICAgICAgKiAvLyA9PiAwXG4gICAgICAgICAqXG4gICAgICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAgICAgKiBfLmZpbmRJbmRleCh1c2VycywgJ2FjdGl2ZScpO1xuICAgICAgICAgKiAvLyA9PiAyXG4gICAgICAgICAqL2Z1bmN0aW9uIGZpbmRJbmRleChhcnJheSxwcmVkaWNhdGUsZnJvbUluZGV4KXt2YXIgbGVuZ3RoPWFycmF5PT1udWxsPzA6YXJyYXkubGVuZ3RoO2lmKCFsZW5ndGgpe3JldHVybi0xO312YXIgaW5kZXg9ZnJvbUluZGV4PT1udWxsPzA6dG9JbnRlZ2VyKGZyb21JbmRleCk7aWYoaW5kZXg8MCl7aW5kZXg9bmF0aXZlTWF4KGxlbmd0aCtpbmRleCwwKTt9cmV0dXJuIGJhc2VGaW5kSW5kZXgoYXJyYXksZ2V0SXRlcmF0ZWUocHJlZGljYXRlLDMpLGluZGV4KTt9LyoqXG4gICAgICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZmluZEluZGV4YCBleGNlcHQgdGhhdCBpdCBpdGVyYXRlcyBvdmVyIGVsZW1lbnRzXG4gICAgICAgICAqIG9mIGBjb2xsZWN0aW9uYCBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQHNpbmNlIDIuMC4wXG4gICAgICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gW2Zyb21JbmRleD1hcnJheS5sZW5ndGgtMV0gVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICAgICAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgZm91bmQgZWxlbWVudCwgZWxzZSBgLTFgLlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiB2YXIgdXNlcnMgPSBbXG4gICAgICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAgJ2FjdGl2ZSc6IHRydWUgfSxcbiAgICAgICAgICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICAnYWN0aXZlJzogZmFsc2UgfSxcbiAgICAgICAgICogICB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWN0aXZlJzogZmFsc2UgfVxuICAgICAgICAgKiBdO1xuICAgICAgICAgKlxuICAgICAgICAgKiBfLmZpbmRMYXN0SW5kZXgodXNlcnMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuIG8udXNlciA9PSAncGViYmxlcyc7IH0pO1xuICAgICAgICAgKiAvLyA9PiAyXG4gICAgICAgICAqXG4gICAgICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICAgICAqIF8uZmluZExhc3RJbmRleCh1c2VycywgeyAndXNlcic6ICdiYXJuZXknLCAnYWN0aXZlJzogdHJ1ZSB9KTtcbiAgICAgICAgICogLy8gPT4gMFxuICAgICAgICAgKlxuICAgICAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICAgICAqIF8uZmluZExhc3RJbmRleCh1c2VycywgWydhY3RpdmUnLCBmYWxzZV0pO1xuICAgICAgICAgKiAvLyA9PiAyXG4gICAgICAgICAqXG4gICAgICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAgICAgKiBfLmZpbmRMYXN0SW5kZXgodXNlcnMsICdhY3RpdmUnKTtcbiAgICAgICAgICogLy8gPT4gMFxuICAgICAgICAgKi9mdW5jdGlvbiBmaW5kTGFzdEluZGV4KGFycmF5LHByZWRpY2F0ZSxmcm9tSW5kZXgpe3ZhciBsZW5ndGg9YXJyYXk9PW51bGw/MDphcnJheS5sZW5ndGg7aWYoIWxlbmd0aCl7cmV0dXJuLTE7fXZhciBpbmRleD1sZW5ndGgtMTtpZihmcm9tSW5kZXghPT11bmRlZmluZWQpe2luZGV4PXRvSW50ZWdlcihmcm9tSW5kZXgpO2luZGV4PWZyb21JbmRleDwwP25hdGl2ZU1heChsZW5ndGgraW5kZXgsMCk6bmF0aXZlTWluKGluZGV4LGxlbmd0aC0xKTt9cmV0dXJuIGJhc2VGaW5kSW5kZXgoYXJyYXksZ2V0SXRlcmF0ZWUocHJlZGljYXRlLDMpLGluZGV4LHRydWUpO30vKipcbiAgICAgICAgICogRmxhdHRlbnMgYGFycmF5YCBhIHNpbmdsZSBsZXZlbCBkZWVwLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGZsYXR0ZW4uXG4gICAgICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZsYXR0ZW5lZCBhcnJheS5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogXy5mbGF0dGVuKFsxLCBbMiwgWzMsIFs0XV0sIDVdXSk7XG4gICAgICAgICAqIC8vID0+IFsxLCAyLCBbMywgWzRdXSwgNV1cbiAgICAgICAgICovZnVuY3Rpb24gZmxhdHRlbihhcnJheSl7dmFyIGxlbmd0aD1hcnJheT09bnVsbD8wOmFycmF5Lmxlbmd0aDtyZXR1cm4gbGVuZ3RoP2Jhc2VGbGF0dGVuKGFycmF5LDEpOltdO30vKipcbiAgICAgICAgICogUmVjdXJzaXZlbHkgZmxhdHRlbnMgYGFycmF5YC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBmbGF0dGVuLlxuICAgICAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmbGF0dGVuZWQgYXJyYXkuXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8uZmxhdHRlbkRlZXAoWzEsIFsyLCBbMywgWzRdXSwgNV1dKTtcbiAgICAgICAgICogLy8gPT4gWzEsIDIsIDMsIDQsIDVdXG4gICAgICAgICAqL2Z1bmN0aW9uIGZsYXR0ZW5EZWVwKGFycmF5KXt2YXIgbGVuZ3RoPWFycmF5PT1udWxsPzA6YXJyYXkubGVuZ3RoO3JldHVybiBsZW5ndGg/YmFzZUZsYXR0ZW4oYXJyYXksSU5GSU5JVFkpOltdO30vKipcbiAgICAgICAgICogUmVjdXJzaXZlbHkgZmxhdHRlbiBgYXJyYXlgIHVwIHRvIGBkZXB0aGAgdGltZXMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQHNpbmNlIDQuNC4wXG4gICAgICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gZmxhdHRlbi5cbiAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IFtkZXB0aD0xXSBUaGUgbWF4aW11bSByZWN1cnNpb24gZGVwdGguXG4gICAgICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZsYXR0ZW5lZCBhcnJheS5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogdmFyIGFycmF5ID0gWzEsIFsyLCBbMywgWzRdXSwgNV1dO1xuICAgICAgICAgKlxuICAgICAgICAgKiBfLmZsYXR0ZW5EZXB0aChhcnJheSwgMSk7XG4gICAgICAgICAqIC8vID0+IFsxLCAyLCBbMywgWzRdXSwgNV1cbiAgICAgICAgICpcbiAgICAgICAgICogXy5mbGF0dGVuRGVwdGgoYXJyYXksIDIpO1xuICAgICAgICAgKiAvLyA9PiBbMSwgMiwgMywgWzRdLCA1XVxuICAgICAgICAgKi9mdW5jdGlvbiBmbGF0dGVuRGVwdGgoYXJyYXksZGVwdGgpe3ZhciBsZW5ndGg9YXJyYXk9PW51bGw/MDphcnJheS5sZW5ndGg7aWYoIWxlbmd0aCl7cmV0dXJuW107fWRlcHRoPWRlcHRoPT09dW5kZWZpbmVkPzE6dG9JbnRlZ2VyKGRlcHRoKTtyZXR1cm4gYmFzZUZsYXR0ZW4oYXJyYXksZGVwdGgpO30vKipcbiAgICAgICAgICogVGhlIGludmVyc2Ugb2YgYF8udG9QYWlyc2A7IHRoaXMgbWV0aG9kIHJldHVybnMgYW4gb2JqZWN0IGNvbXBvc2VkXG4gICAgICAgICAqIGZyb20ga2V5LXZhbHVlIGBwYWlyc2AuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQHNpbmNlIDQuMC4wXG4gICAgICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBwYWlycyBUaGUga2V5LXZhbHVlIHBhaXJzLlxuICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLmZyb21QYWlycyhbWydhJywgMV0sIFsnYicsIDJdXSk7XG4gICAgICAgICAqIC8vID0+IHsgJ2EnOiAxLCAnYic6IDIgfVxuICAgICAgICAgKi9mdW5jdGlvbiBmcm9tUGFpcnMocGFpcnMpe3ZhciBpbmRleD0tMSxsZW5ndGg9cGFpcnM9PW51bGw/MDpwYWlycy5sZW5ndGgscmVzdWx0PXt9O3doaWxlKCsraW5kZXg8bGVuZ3RoKXt2YXIgcGFpcj1wYWlyc1tpbmRleF07cmVzdWx0W3BhaXJbMF1dPXBhaXJbMV07fXJldHVybiByZXN1bHQ7fS8qKlxuICAgICAgICAgKiBHZXRzIHRoZSBmaXJzdCBlbGVtZW50IG9mIGBhcnJheWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQHNpbmNlIDAuMS4wXG4gICAgICAgICAqIEBhbGlhcyBmaXJzdFxuICAgICAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICAgICAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZmlyc3QgZWxlbWVudCBvZiBgYXJyYXlgLlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLmhlYWQoWzEsIDIsIDNdKTtcbiAgICAgICAgICogLy8gPT4gMVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLmhlYWQoW10pO1xuICAgICAgICAgKiAvLyA9PiB1bmRlZmluZWRcbiAgICAgICAgICovZnVuY3Rpb24gaGVhZChhcnJheSl7cmV0dXJuIGFycmF5JiZhcnJheS5sZW5ndGg/YXJyYXlbMF06dW5kZWZpbmVkO30vKipcbiAgICAgICAgICogR2V0cyB0aGUgaW5kZXggYXQgd2hpY2ggdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgYHZhbHVlYCBpcyBmb3VuZCBpbiBgYXJyYXlgXG4gICAgICAgICAqIHVzaW5nIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gICAgICAgICAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy4gSWYgYGZyb21JbmRleGAgaXMgbmVnYXRpdmUsIGl0J3MgdXNlZCBhcyB0aGVcbiAgICAgICAgICogb2Zmc2V0IGZyb20gdGhlIGVuZCBvZiBgYXJyYXlgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbZnJvbUluZGV4PTBdIFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAgICAgICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogXy5pbmRleE9mKFsxLCAyLCAxLCAyXSwgMik7XG4gICAgICAgICAqIC8vID0+IDFcbiAgICAgICAgICpcbiAgICAgICAgICogLy8gU2VhcmNoIGZyb20gdGhlIGBmcm9tSW5kZXhgLlxuICAgICAgICAgKiBfLmluZGV4T2YoWzEsIDIsIDEsIDJdLCAyLCAyKTtcbiAgICAgICAgICogLy8gPT4gM1xuICAgICAgICAgKi9mdW5jdGlvbiBpbmRleE9mKGFycmF5LHZhbHVlLGZyb21JbmRleCl7dmFyIGxlbmd0aD1hcnJheT09bnVsbD8wOmFycmF5Lmxlbmd0aDtpZighbGVuZ3RoKXtyZXR1cm4tMTt9dmFyIGluZGV4PWZyb21JbmRleD09bnVsbD8wOnRvSW50ZWdlcihmcm9tSW5kZXgpO2lmKGluZGV4PDApe2luZGV4PW5hdGl2ZU1heChsZW5ndGgraW5kZXgsMCk7fXJldHVybiBiYXNlSW5kZXhPZihhcnJheSx2YWx1ZSxpbmRleCk7fS8qKlxuICAgICAgICAgKiBHZXRzIGFsbCBidXQgdGhlIGxhc3QgZWxlbWVudCBvZiBgYXJyYXlgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICAgICAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHNsaWNlIG9mIGBhcnJheWAuXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8uaW5pdGlhbChbMSwgMiwgM10pO1xuICAgICAgICAgKiAvLyA9PiBbMSwgMl1cbiAgICAgICAgICovZnVuY3Rpb24gaW5pdGlhbChhcnJheSl7dmFyIGxlbmd0aD1hcnJheT09bnVsbD8wOmFycmF5Lmxlbmd0aDtyZXR1cm4gbGVuZ3RoP2Jhc2VTbGljZShhcnJheSwwLC0xKTpbXTt9LyoqXG4gICAgICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdW5pcXVlIHZhbHVlcyB0aGF0IGFyZSBpbmNsdWRlZCBpbiBhbGwgZ2l2ZW4gYXJyYXlzXG4gICAgICAgICAqIHVzaW5nIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gICAgICAgICAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy4gVGhlIG9yZGVyIGFuZCByZWZlcmVuY2VzIG9mIHJlc3VsdCB2YWx1ZXMgYXJlXG4gICAgICAgICAqIGRldGVybWluZWQgYnkgdGhlIGZpcnN0IGFycmF5LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgICAgICogQHBhcmFtIHsuLi5BcnJheX0gW2FycmF5c10gVGhlIGFycmF5cyB0byBpbnNwZWN0LlxuICAgICAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBpbnRlcnNlY3RpbmcgdmFsdWVzLlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLmludGVyc2VjdGlvbihbMiwgMV0sIFsyLCAzXSk7XG4gICAgICAgICAqIC8vID0+IFsyXVxuICAgICAgICAgKi92YXIgaW50ZXJzZWN0aW9uPWJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5cyl7dmFyIG1hcHBlZD1hcnJheU1hcChhcnJheXMsY2FzdEFycmF5TGlrZU9iamVjdCk7cmV0dXJuIG1hcHBlZC5sZW5ndGgmJm1hcHBlZFswXT09PWFycmF5c1swXT9iYXNlSW50ZXJzZWN0aW9uKG1hcHBlZCk6W107fSk7LyoqXG4gICAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmludGVyc2VjdGlvbmAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgaXRlcmF0ZWVgXG4gICAgICAgKiB3aGljaCBpcyBpbnZva2VkIGZvciBlYWNoIGVsZW1lbnQgb2YgZWFjaCBgYXJyYXlzYCB0byBnZW5lcmF0ZSB0aGUgY3JpdGVyaW9uXG4gICAgICAgKiBieSB3aGljaCB0aGV5J3JlIGNvbXBhcmVkLiBUaGUgb3JkZXIgYW5kIHJlZmVyZW5jZXMgb2YgcmVzdWx0IHZhbHVlcyBhcmVcbiAgICAgICAqIGRldGVybWluZWQgYnkgdGhlIGZpcnN0IGFycmF5LiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDpcbiAgICAgICAqICh2YWx1ZSkuXG4gICAgICAgKlxuICAgICAgICogQHN0YXRpY1xuICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICAgKiBAcGFyYW0gey4uLkFycmF5fSBbYXJyYXlzXSBUaGUgYXJyYXlzIHRvIGluc3BlY3QuXG4gICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBpbnRlcnNlY3RpbmcgdmFsdWVzLlxuICAgICAgICogQGV4YW1wbGVcbiAgICAgICAqXG4gICAgICAgKiBfLmludGVyc2VjdGlvbkJ5KFsyLjEsIDEuMl0sIFsyLjMsIDMuNF0sIE1hdGguZmxvb3IpO1xuICAgICAgICogLy8gPT4gWzIuMV1cbiAgICAgICAqXG4gICAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgICAqIF8uaW50ZXJzZWN0aW9uQnkoW3sgJ3gnOiAxIH1dLCBbeyAneCc6IDIgfSwgeyAneCc6IDEgfV0sICd4Jyk7XG4gICAgICAgKiAvLyA9PiBbeyAneCc6IDEgfV1cbiAgICAgICAqL3ZhciBpbnRlcnNlY3Rpb25CeT1iYXNlUmVzdChmdW5jdGlvbihhcnJheXMpe3ZhciBpdGVyYXRlZT1sYXN0KGFycmF5cyksbWFwcGVkPWFycmF5TWFwKGFycmF5cyxjYXN0QXJyYXlMaWtlT2JqZWN0KTtpZihpdGVyYXRlZT09PWxhc3QobWFwcGVkKSl7aXRlcmF0ZWU9dW5kZWZpbmVkO31lbHNle21hcHBlZC5wb3AoKTt9cmV0dXJuIG1hcHBlZC5sZW5ndGgmJm1hcHBlZFswXT09PWFycmF5c1swXT9iYXNlSW50ZXJzZWN0aW9uKG1hcHBlZCxnZXRJdGVyYXRlZShpdGVyYXRlZSwyKSk6W107fSk7LyoqXG4gICAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmludGVyc2VjdGlvbmAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgY29tcGFyYXRvcmBcbiAgICAgICAqIHdoaWNoIGlzIGludm9rZWQgdG8gY29tcGFyZSBlbGVtZW50cyBvZiBgYXJyYXlzYC4gVGhlIG9yZGVyIGFuZCByZWZlcmVuY2VzXG4gICAgICAgKiBvZiByZXN1bHQgdmFsdWVzIGFyZSBkZXRlcm1pbmVkIGJ5IHRoZSBmaXJzdCBhcnJheS4gVGhlIGNvbXBhcmF0b3IgaXNcbiAgICAgICAqIGludm9rZWQgd2l0aCB0d28gYXJndW1lbnRzOiAoYXJyVmFsLCBvdGhWYWwpLlxuICAgICAgICpcbiAgICAgICAqIEBzdGF0aWNcbiAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAgICogQHBhcmFtIHsuLi5BcnJheX0gW2FycmF5c10gVGhlIGFycmF5cyB0byBpbnNwZWN0LlxuICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NvbXBhcmF0b3JdIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBpbnRlcnNlY3RpbmcgdmFsdWVzLlxuICAgICAgICogQGV4YW1wbGVcbiAgICAgICAqXG4gICAgICAgKiB2YXIgb2JqZWN0cyA9IFt7ICd4JzogMSwgJ3knOiAyIH0sIHsgJ3gnOiAyLCAneSc6IDEgfV07XG4gICAgICAgKiB2YXIgb3RoZXJzID0gW3sgJ3gnOiAxLCAneSc6IDEgfSwgeyAneCc6IDEsICd5JzogMiB9XTtcbiAgICAgICAqXG4gICAgICAgKiBfLmludGVyc2VjdGlvbldpdGgob2JqZWN0cywgb3RoZXJzLCBfLmlzRXF1YWwpO1xuICAgICAgICogLy8gPT4gW3sgJ3gnOiAxLCAneSc6IDIgfV1cbiAgICAgICAqL3ZhciBpbnRlcnNlY3Rpb25XaXRoPWJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5cyl7dmFyIGNvbXBhcmF0b3I9bGFzdChhcnJheXMpLG1hcHBlZD1hcnJheU1hcChhcnJheXMsY2FzdEFycmF5TGlrZU9iamVjdCk7Y29tcGFyYXRvcj10eXBlb2YgY29tcGFyYXRvcj09PSdmdW5jdGlvbic/Y29tcGFyYXRvcjp1bmRlZmluZWQ7aWYoY29tcGFyYXRvcil7bWFwcGVkLnBvcCgpO31yZXR1cm4gbWFwcGVkLmxlbmd0aCYmbWFwcGVkWzBdPT09YXJyYXlzWzBdP2Jhc2VJbnRlcnNlY3Rpb24obWFwcGVkLHVuZGVmaW5lZCxjb21wYXJhdG9yKTpbXTt9KTsvKipcbiAgICAgICAqIENvbnZlcnRzIGFsbCBlbGVtZW50cyBpbiBgYXJyYXlgIGludG8gYSBzdHJpbmcgc2VwYXJhdGVkIGJ5IGBzZXBhcmF0b3JgLlxuICAgICAgICpcbiAgICAgICAqIEBzdGF0aWNcbiAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGNvbnZlcnQuXG4gICAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3NlcGFyYXRvcj0nLCddIFRoZSBlbGVtZW50IHNlcGFyYXRvci5cbiAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGpvaW5lZCBzdHJpbmcuXG4gICAgICAgKiBAZXhhbXBsZVxuICAgICAgICpcbiAgICAgICAqIF8uam9pbihbJ2EnLCAnYicsICdjJ10sICd+Jyk7XG4gICAgICAgKiAvLyA9PiAnYX5ifmMnXG4gICAgICAgKi9mdW5jdGlvbiBqb2luKGFycmF5LHNlcGFyYXRvcil7cmV0dXJuIGFycmF5PT1udWxsPycnOm5hdGl2ZUpvaW4uY2FsbChhcnJheSxzZXBhcmF0b3IpO30vKipcbiAgICAgICAgICogR2V0cyB0aGUgbGFzdCBlbGVtZW50IG9mIGBhcnJheWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQHNpbmNlIDAuMS4wXG4gICAgICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gICAgICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBsYXN0IGVsZW1lbnQgb2YgYGFycmF5YC5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogXy5sYXN0KFsxLCAyLCAzXSk7XG4gICAgICAgICAqIC8vID0+IDNcbiAgICAgICAgICovZnVuY3Rpb24gbGFzdChhcnJheSl7dmFyIGxlbmd0aD1hcnJheT09bnVsbD8wOmFycmF5Lmxlbmd0aDtyZXR1cm4gbGVuZ3RoP2FycmF5W2xlbmd0aC0xXTp1bmRlZmluZWQ7fS8qKlxuICAgICAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmluZGV4T2ZgIGV4Y2VwdCB0aGF0IGl0IGl0ZXJhdGVzIG92ZXIgZWxlbWVudHMgb2ZcbiAgICAgICAgICogYGFycmF5YCBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQHNpbmNlIDAuMS4wXG4gICAgICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IFtmcm9tSW5kZXg9YXJyYXkubGVuZ3RoLTFdIFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAgICAgICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogXy5sYXN0SW5kZXhPZihbMSwgMiwgMSwgMl0sIDIpO1xuICAgICAgICAgKiAvLyA9PiAzXG4gICAgICAgICAqXG4gICAgICAgICAqIC8vIFNlYXJjaCBmcm9tIHRoZSBgZnJvbUluZGV4YC5cbiAgICAgICAgICogXy5sYXN0SW5kZXhPZihbMSwgMiwgMSwgMl0sIDIsIDIpO1xuICAgICAgICAgKiAvLyA9PiAxXG4gICAgICAgICAqL2Z1bmN0aW9uIGxhc3RJbmRleE9mKGFycmF5LHZhbHVlLGZyb21JbmRleCl7dmFyIGxlbmd0aD1hcnJheT09bnVsbD8wOmFycmF5Lmxlbmd0aDtpZighbGVuZ3RoKXtyZXR1cm4tMTt9dmFyIGluZGV4PWxlbmd0aDtpZihmcm9tSW5kZXghPT11bmRlZmluZWQpe2luZGV4PXRvSW50ZWdlcihmcm9tSW5kZXgpO2luZGV4PWluZGV4PDA/bmF0aXZlTWF4KGxlbmd0aCtpbmRleCwwKTpuYXRpdmVNaW4oaW5kZXgsbGVuZ3RoLTEpO31yZXR1cm4gdmFsdWU9PT12YWx1ZT9zdHJpY3RMYXN0SW5kZXhPZihhcnJheSx2YWx1ZSxpbmRleCk6YmFzZUZpbmRJbmRleChhcnJheSxiYXNlSXNOYU4saW5kZXgsdHJ1ZSk7fS8qKlxuICAgICAgICAgKiBHZXRzIHRoZSBlbGVtZW50IGF0IGluZGV4IGBuYCBvZiBgYXJyYXlgLiBJZiBgbmAgaXMgbmVnYXRpdmUsIHRoZSBudGhcbiAgICAgICAgICogZWxlbWVudCBmcm9tIHRoZSBlbmQgaXMgcmV0dXJuZWQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQHNpbmNlIDQuMTEuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gW249MF0gVGhlIGluZGV4IG9mIHRoZSBlbGVtZW50IHRvIHJldHVybi5cbiAgICAgICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG50aCBlbGVtZW50IG9mIGBhcnJheWAuXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIHZhciBhcnJheSA9IFsnYScsICdiJywgJ2MnLCAnZCddO1xuICAgICAgICAgKlxuICAgICAgICAgKiBfLm50aChhcnJheSwgMSk7XG4gICAgICAgICAqIC8vID0+ICdiJ1xuICAgICAgICAgKlxuICAgICAgICAgKiBfLm50aChhcnJheSwgLTIpO1xuICAgICAgICAgKiAvLyA9PiAnYyc7XG4gICAgICAgICAqL2Z1bmN0aW9uIG50aChhcnJheSxuKXtyZXR1cm4gYXJyYXkmJmFycmF5Lmxlbmd0aD9iYXNlTnRoKGFycmF5LHRvSW50ZWdlcihuKSk6dW5kZWZpbmVkO30vKipcbiAgICAgICAgICogUmVtb3ZlcyBhbGwgZ2l2ZW4gdmFsdWVzIGZyb20gYGFycmF5YCB1c2luZ1xuICAgICAgICAgKiBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICAgICAgICAgKiBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMuXG4gICAgICAgICAqXG4gICAgICAgICAqICoqTm90ZToqKiBVbmxpa2UgYF8ud2l0aG91dGAsIHRoaXMgbWV0aG9kIG11dGF0ZXMgYGFycmF5YC4gVXNlIGBfLnJlbW92ZWBcbiAgICAgICAgICogdG8gcmVtb3ZlIGVsZW1lbnRzIGZyb20gYW4gYXJyYXkgYnkgcHJlZGljYXRlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSAyLjAuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIG1vZGlmeS5cbiAgICAgICAgICogQHBhcmFtIHsuLi4qfSBbdmFsdWVzXSBUaGUgdmFsdWVzIHRvIHJlbW92ZS5cbiAgICAgICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIHZhciBhcnJheSA9IFsnYScsICdiJywgJ2MnLCAnYScsICdiJywgJ2MnXTtcbiAgICAgICAgICpcbiAgICAgICAgICogXy5wdWxsKGFycmF5LCAnYScsICdjJyk7XG4gICAgICAgICAqIGNvbnNvbGUubG9nKGFycmF5KTtcbiAgICAgICAgICogLy8gPT4gWydiJywgJ2InXVxuICAgICAgICAgKi92YXIgcHVsbD1iYXNlUmVzdChwdWxsQWxsKTsvKipcbiAgICAgICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5wdWxsYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGFuIGFycmF5IG9mIHZhbHVlcyB0byByZW1vdmUuXG4gICAgICAgICAqXG4gICAgICAgICAqICoqTm90ZToqKiBVbmxpa2UgYF8uZGlmZmVyZW5jZWAsIHRoaXMgbWV0aG9kIG11dGF0ZXMgYGFycmF5YC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBtb2RpZnkuXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgdmFsdWVzIHRvIHJlbW92ZS5cbiAgICAgICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIHZhciBhcnJheSA9IFsnYScsICdiJywgJ2MnLCAnYScsICdiJywgJ2MnXTtcbiAgICAgICAgICpcbiAgICAgICAgICogXy5wdWxsQWxsKGFycmF5LCBbJ2EnLCAnYyddKTtcbiAgICAgICAgICogY29uc29sZS5sb2coYXJyYXkpO1xuICAgICAgICAgKiAvLyA9PiBbJ2InLCAnYiddXG4gICAgICAgICAqL2Z1bmN0aW9uIHB1bGxBbGwoYXJyYXksdmFsdWVzKXtyZXR1cm4gYXJyYXkmJmFycmF5Lmxlbmd0aCYmdmFsdWVzJiZ2YWx1ZXMubGVuZ3RoP2Jhc2VQdWxsQWxsKGFycmF5LHZhbHVlcyk6YXJyYXk7fS8qKlxuICAgICAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnB1bGxBbGxgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGl0ZXJhdGVlYCB3aGljaCBpc1xuICAgICAgICAgKiBpbnZva2VkIGZvciBlYWNoIGVsZW1lbnQgb2YgYGFycmF5YCBhbmQgYHZhbHVlc2AgdG8gZ2VuZXJhdGUgdGhlIGNyaXRlcmlvblxuICAgICAgICAgKiBieSB3aGljaCB0aGV5J3JlIGNvbXBhcmVkLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDogKHZhbHVlKS5cbiAgICAgICAgICpcbiAgICAgICAgICogKipOb3RlOioqIFVubGlrZSBgXy5kaWZmZXJlbmNlQnlgLCB0aGlzIG1ldGhvZCBtdXRhdGVzIGBhcnJheWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQHNpbmNlIDQuMC4wXG4gICAgICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgVGhlIHZhbHVlcyB0byByZW1vdmUuXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIHZhciBhcnJheSA9IFt7ICd4JzogMSB9LCB7ICd4JzogMiB9LCB7ICd4JzogMyB9LCB7ICd4JzogMSB9XTtcbiAgICAgICAgICpcbiAgICAgICAgICogXy5wdWxsQWxsQnkoYXJyYXksIFt7ICd4JzogMSB9LCB7ICd4JzogMyB9XSwgJ3gnKTtcbiAgICAgICAgICogY29uc29sZS5sb2coYXJyYXkpO1xuICAgICAgICAgKiAvLyA9PiBbeyAneCc6IDIgfV1cbiAgICAgICAgICovZnVuY3Rpb24gcHVsbEFsbEJ5KGFycmF5LHZhbHVlcyxpdGVyYXRlZSl7cmV0dXJuIGFycmF5JiZhcnJheS5sZW5ndGgmJnZhbHVlcyYmdmFsdWVzLmxlbmd0aD9iYXNlUHVsbEFsbChhcnJheSx2YWx1ZXMsZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsMikpOmFycmF5O30vKipcbiAgICAgICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5wdWxsQWxsYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBjb21wYXJhdG9yYCB3aGljaFxuICAgICAgICAgKiBpcyBpbnZva2VkIHRvIGNvbXBhcmUgZWxlbWVudHMgb2YgYGFycmF5YCB0byBgdmFsdWVzYC4gVGhlIGNvbXBhcmF0b3IgaXNcbiAgICAgICAgICogaW52b2tlZCB3aXRoIHR3byBhcmd1bWVudHM6IChhcnJWYWwsIG90aFZhbCkuXG4gICAgICAgICAqXG4gICAgICAgICAqICoqTm90ZToqKiBVbmxpa2UgYF8uZGlmZmVyZW5jZVdpdGhgLCB0aGlzIG1ldGhvZCBtdXRhdGVzIGBhcnJheWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQHNpbmNlIDQuNi4wXG4gICAgICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgVGhlIHZhbHVlcyB0byByZW1vdmUuXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjb21wYXJhdG9yXSBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogdmFyIGFycmF5ID0gW3sgJ3gnOiAxLCAneSc6IDIgfSwgeyAneCc6IDMsICd5JzogNCB9LCB7ICd4JzogNSwgJ3knOiA2IH1dO1xuICAgICAgICAgKlxuICAgICAgICAgKiBfLnB1bGxBbGxXaXRoKGFycmF5LCBbeyAneCc6IDMsICd5JzogNCB9XSwgXy5pc0VxdWFsKTtcbiAgICAgICAgICogY29uc29sZS5sb2coYXJyYXkpO1xuICAgICAgICAgKiAvLyA9PiBbeyAneCc6IDEsICd5JzogMiB9LCB7ICd4JzogNSwgJ3knOiA2IH1dXG4gICAgICAgICAqL2Z1bmN0aW9uIHB1bGxBbGxXaXRoKGFycmF5LHZhbHVlcyxjb21wYXJhdG9yKXtyZXR1cm4gYXJyYXkmJmFycmF5Lmxlbmd0aCYmdmFsdWVzJiZ2YWx1ZXMubGVuZ3RoP2Jhc2VQdWxsQWxsKGFycmF5LHZhbHVlcyx1bmRlZmluZWQsY29tcGFyYXRvcik6YXJyYXk7fS8qKlxuICAgICAgICAgKiBSZW1vdmVzIGVsZW1lbnRzIGZyb20gYGFycmF5YCBjb3JyZXNwb25kaW5nIHRvIGBpbmRleGVzYCBhbmQgcmV0dXJucyBhblxuICAgICAgICAgKiBhcnJheSBvZiByZW1vdmVkIGVsZW1lbnRzLlxuICAgICAgICAgKlxuICAgICAgICAgKiAqKk5vdGU6KiogVW5saWtlIGBfLmF0YCwgdGhpcyBtZXRob2QgbXV0YXRlcyBgYXJyYXlgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIG1vZGlmeS5cbiAgICAgICAgICogQHBhcmFtIHsuLi4obnVtYmVyfG51bWJlcltdKX0gW2luZGV4ZXNdIFRoZSBpbmRleGVzIG9mIGVsZW1lbnRzIHRvIHJlbW92ZS5cbiAgICAgICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgcmVtb3ZlZCBlbGVtZW50cy5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogdmFyIGFycmF5ID0gWydhJywgJ2InLCAnYycsICdkJ107XG4gICAgICAgICAqIHZhciBwdWxsZWQgPSBfLnB1bGxBdChhcnJheSwgWzEsIDNdKTtcbiAgICAgICAgICpcbiAgICAgICAgICogY29uc29sZS5sb2coYXJyYXkpO1xuICAgICAgICAgKiAvLyA9PiBbJ2EnLCAnYyddXG4gICAgICAgICAqXG4gICAgICAgICAqIGNvbnNvbGUubG9nKHB1bGxlZCk7XG4gICAgICAgICAqIC8vID0+IFsnYicsICdkJ11cbiAgICAgICAgICovdmFyIHB1bGxBdD1mbGF0UmVzdChmdW5jdGlvbihhcnJheSxpbmRleGVzKXt2YXIgbGVuZ3RoPWFycmF5PT1udWxsPzA6YXJyYXkubGVuZ3RoLHJlc3VsdD1iYXNlQXQoYXJyYXksaW5kZXhlcyk7YmFzZVB1bGxBdChhcnJheSxhcnJheU1hcChpbmRleGVzLGZ1bmN0aW9uKGluZGV4KXtyZXR1cm4gaXNJbmRleChpbmRleCxsZW5ndGgpPytpbmRleDppbmRleDt9KS5zb3J0KGNvbXBhcmVBc2NlbmRpbmcpKTtyZXR1cm4gcmVzdWx0O30pOy8qKlxuICAgICAgICogUmVtb3ZlcyBhbGwgZWxlbWVudHMgZnJvbSBgYXJyYXlgIHRoYXQgYHByZWRpY2F0ZWAgcmV0dXJucyB0cnV0aHkgZm9yXG4gICAgICAgKiBhbmQgcmV0dXJucyBhbiBhcnJheSBvZiB0aGUgcmVtb3ZlZCBlbGVtZW50cy4gVGhlIHByZWRpY2F0ZSBpcyBpbnZva2VkXG4gICAgICAgKiB3aXRoIHRocmVlIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleCwgYXJyYXkpLlxuICAgICAgICpcbiAgICAgICAqICoqTm90ZToqKiBVbmxpa2UgYF8uZmlsdGVyYCwgdGhpcyBtZXRob2QgbXV0YXRlcyBgYXJyYXlgLiBVc2UgYF8ucHVsbGBcbiAgICAgICAqIHRvIHB1bGwgZWxlbWVudHMgZnJvbSBhbiBhcnJheSBieSB2YWx1ZS5cbiAgICAgICAqXG4gICAgICAgKiBAc3RhdGljXG4gICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICogQHNpbmNlIDIuMC4wXG4gICAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBtb2RpZnkuXG4gICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiByZW1vdmVkIGVsZW1lbnRzLlxuICAgICAgICogQGV4YW1wbGVcbiAgICAgICAqXG4gICAgICAgKiB2YXIgYXJyYXkgPSBbMSwgMiwgMywgNF07XG4gICAgICAgKiB2YXIgZXZlbnMgPSBfLnJlbW92ZShhcnJheSwgZnVuY3Rpb24obikge1xuICAgICAgICogICByZXR1cm4gbiAlIDIgPT0gMDtcbiAgICAgICAqIH0pO1xuICAgICAgICpcbiAgICAgICAqIGNvbnNvbGUubG9nKGFycmF5KTtcbiAgICAgICAqIC8vID0+IFsxLCAzXVxuICAgICAgICpcbiAgICAgICAqIGNvbnNvbGUubG9nKGV2ZW5zKTtcbiAgICAgICAqIC8vID0+IFsyLCA0XVxuICAgICAgICovZnVuY3Rpb24gcmVtb3ZlKGFycmF5LHByZWRpY2F0ZSl7dmFyIHJlc3VsdD1bXTtpZighKGFycmF5JiZhcnJheS5sZW5ndGgpKXtyZXR1cm4gcmVzdWx0O312YXIgaW5kZXg9LTEsaW5kZXhlcz1bXSxsZW5ndGg9YXJyYXkubGVuZ3RoO3ByZWRpY2F0ZT1nZXRJdGVyYXRlZShwcmVkaWNhdGUsMyk7d2hpbGUoKytpbmRleDxsZW5ndGgpe3ZhciB2YWx1ZT1hcnJheVtpbmRleF07aWYocHJlZGljYXRlKHZhbHVlLGluZGV4LGFycmF5KSl7cmVzdWx0LnB1c2godmFsdWUpO2luZGV4ZXMucHVzaChpbmRleCk7fX1iYXNlUHVsbEF0KGFycmF5LGluZGV4ZXMpO3JldHVybiByZXN1bHQ7fS8qKlxuICAgICAgICAgKiBSZXZlcnNlcyBgYXJyYXlgIHNvIHRoYXQgdGhlIGZpcnN0IGVsZW1lbnQgYmVjb21lcyB0aGUgbGFzdCwgdGhlIHNlY29uZFxuICAgICAgICAgKiBlbGVtZW50IGJlY29tZXMgdGhlIHNlY29uZCB0byBsYXN0LCBhbmQgc28gb24uXG4gICAgICAgICAqXG4gICAgICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBhcnJheWAgYW5kIGlzIGJhc2VkIG9uXG4gICAgICAgICAqIFtgQXJyYXkjcmV2ZXJzZWBdKGh0dHBzOi8vbWRuLmlvL0FycmF5L3JldmVyc2UpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIG1vZGlmeS5cbiAgICAgICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIHZhciBhcnJheSA9IFsxLCAyLCAzXTtcbiAgICAgICAgICpcbiAgICAgICAgICogXy5yZXZlcnNlKGFycmF5KTtcbiAgICAgICAgICogLy8gPT4gWzMsIDIsIDFdXG4gICAgICAgICAqXG4gICAgICAgICAqIGNvbnNvbGUubG9nKGFycmF5KTtcbiAgICAgICAgICogLy8gPT4gWzMsIDIsIDFdXG4gICAgICAgICAqL2Z1bmN0aW9uIHJldmVyc2UoYXJyYXkpe3JldHVybiBhcnJheT09bnVsbD9hcnJheTpuYXRpdmVSZXZlcnNlLmNhbGwoYXJyYXkpO30vKipcbiAgICAgICAgICogQ3JlYXRlcyBhIHNsaWNlIG9mIGBhcnJheWAgZnJvbSBgc3RhcnRgIHVwIHRvLCBidXQgbm90IGluY2x1ZGluZywgYGVuZGAuXG4gICAgICAgICAqXG4gICAgICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyB1c2VkIGluc3RlYWQgb2ZcbiAgICAgICAgICogW2BBcnJheSNzbGljZWBdKGh0dHBzOi8vbWRuLmlvL0FycmF5L3NsaWNlKSB0byBlbnN1cmUgZGVuc2UgYXJyYXlzIGFyZVxuICAgICAgICAgKiByZXR1cm5lZC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBzbGljZS5cbiAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD0wXSBUaGUgc3RhcnQgcG9zaXRpb24uXG4gICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbZW5kPWFycmF5Lmxlbmd0aF0gVGhlIGVuZCBwb3NpdGlvbi5cbiAgICAgICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzbGljZSBvZiBgYXJyYXlgLlxuICAgICAgICAgKi9mdW5jdGlvbiBzbGljZShhcnJheSxzdGFydCxlbmQpe3ZhciBsZW5ndGg9YXJyYXk9PW51bGw/MDphcnJheS5sZW5ndGg7aWYoIWxlbmd0aCl7cmV0dXJuW107fWlmKGVuZCYmdHlwZW9mIGVuZCE9PSdudW1iZXInJiZpc0l0ZXJhdGVlQ2FsbChhcnJheSxzdGFydCxlbmQpKXtzdGFydD0wO2VuZD1sZW5ndGg7fWVsc2V7c3RhcnQ9c3RhcnQ9PW51bGw/MDp0b0ludGVnZXIoc3RhcnQpO2VuZD1lbmQ9PT11bmRlZmluZWQ/bGVuZ3RoOnRvSW50ZWdlcihlbmQpO31yZXR1cm4gYmFzZVNsaWNlKGFycmF5LHN0YXJ0LGVuZCk7fS8qKlxuICAgICAgICAgKiBVc2VzIGEgYmluYXJ5IHNlYXJjaCB0byBkZXRlcm1pbmUgdGhlIGxvd2VzdCBpbmRleCBhdCB3aGljaCBgdmFsdWVgXG4gICAgICAgICAqIHNob3VsZCBiZSBpbnNlcnRlZCBpbnRvIGBhcnJheWAgaW4gb3JkZXIgdG8gbWFpbnRhaW4gaXRzIHNvcnQgb3JkZXIuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQHNpbmNlIDAuMS4wXG4gICAgICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgc29ydGVkIGFycmF5IHRvIGluc3BlY3QuXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGV2YWx1YXRlLlxuICAgICAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBhdCB3aGljaCBgdmFsdWVgIHNob3VsZCBiZSBpbnNlcnRlZFxuICAgICAgICAgKiAgaW50byBgYXJyYXlgLlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLnNvcnRlZEluZGV4KFszMCwgNTBdLCA0MCk7XG4gICAgICAgICAqIC8vID0+IDFcbiAgICAgICAgICovZnVuY3Rpb24gc29ydGVkSW5kZXgoYXJyYXksdmFsdWUpe3JldHVybiBiYXNlU29ydGVkSW5kZXgoYXJyYXksdmFsdWUpO30vKipcbiAgICAgICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5zb3J0ZWRJbmRleGAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgaXRlcmF0ZWVgXG4gICAgICAgICAqIHdoaWNoIGlzIGludm9rZWQgZm9yIGB2YWx1ZWAgYW5kIGVhY2ggZWxlbWVudCBvZiBgYXJyYXlgIHRvIGNvbXB1dGUgdGhlaXJcbiAgICAgICAgICogc29ydCByYW5raW5nLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDogKHZhbHVlKS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBzb3J0ZWQgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gZXZhbHVhdGUuXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggYXQgd2hpY2ggYHZhbHVlYCBzaG91bGQgYmUgaW5zZXJ0ZWRcbiAgICAgICAgICogIGludG8gYGFycmF5YC5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogdmFyIG9iamVjdHMgPSBbeyAneCc6IDQgfSwgeyAneCc6IDUgfV07XG4gICAgICAgICAqXG4gICAgICAgICAqIF8uc29ydGVkSW5kZXhCeShvYmplY3RzLCB7ICd4JzogNCB9LCBmdW5jdGlvbihvKSB7IHJldHVybiBvLng7IH0pO1xuICAgICAgICAgKiAvLyA9PiAwXG4gICAgICAgICAqXG4gICAgICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAgICAgKiBfLnNvcnRlZEluZGV4Qnkob2JqZWN0cywgeyAneCc6IDQgfSwgJ3gnKTtcbiAgICAgICAgICogLy8gPT4gMFxuICAgICAgICAgKi9mdW5jdGlvbiBzb3J0ZWRJbmRleEJ5KGFycmF5LHZhbHVlLGl0ZXJhdGVlKXtyZXR1cm4gYmFzZVNvcnRlZEluZGV4QnkoYXJyYXksdmFsdWUsZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsMikpO30vKipcbiAgICAgICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5pbmRleE9mYCBleGNlcHQgdGhhdCBpdCBwZXJmb3JtcyBhIGJpbmFyeVxuICAgICAgICAgKiBzZWFyY2ggb24gYSBzb3J0ZWQgYGFycmF5YC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgICAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICAgICAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLnNvcnRlZEluZGV4T2YoWzQsIDUsIDUsIDUsIDZdLCA1KTtcbiAgICAgICAgICogLy8gPT4gMVxuICAgICAgICAgKi9mdW5jdGlvbiBzb3J0ZWRJbmRleE9mKGFycmF5LHZhbHVlKXt2YXIgbGVuZ3RoPWFycmF5PT1udWxsPzA6YXJyYXkubGVuZ3RoO2lmKGxlbmd0aCl7dmFyIGluZGV4PWJhc2VTb3J0ZWRJbmRleChhcnJheSx2YWx1ZSk7aWYoaW5kZXg8bGVuZ3RoJiZlcShhcnJheVtpbmRleF0sdmFsdWUpKXtyZXR1cm4gaW5kZXg7fX1yZXR1cm4tMTt9LyoqXG4gICAgICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uc29ydGVkSW5kZXhgIGV4Y2VwdCB0aGF0IGl0IHJldHVybnMgdGhlIGhpZ2hlc3RcbiAgICAgICAgICogaW5kZXggYXQgd2hpY2ggYHZhbHVlYCBzaG91bGQgYmUgaW5zZXJ0ZWQgaW50byBgYXJyYXlgIGluIG9yZGVyIHRvXG4gICAgICAgICAqIG1haW50YWluIGl0cyBzb3J0IG9yZGVyLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIHNvcnRlZCBhcnJheSB0byBpbnNwZWN0LlxuICAgICAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBldmFsdWF0ZS5cbiAgICAgICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggYXQgd2hpY2ggYHZhbHVlYCBzaG91bGQgYmUgaW5zZXJ0ZWRcbiAgICAgICAgICogIGludG8gYGFycmF5YC5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogXy5zb3J0ZWRMYXN0SW5kZXgoWzQsIDUsIDUsIDUsIDZdLCA1KTtcbiAgICAgICAgICogLy8gPT4gNFxuICAgICAgICAgKi9mdW5jdGlvbiBzb3J0ZWRMYXN0SW5kZXgoYXJyYXksdmFsdWUpe3JldHVybiBiYXNlU29ydGVkSW5kZXgoYXJyYXksdmFsdWUsdHJ1ZSk7fS8qKlxuICAgICAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnNvcnRlZExhc3RJbmRleGAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgaXRlcmF0ZWVgXG4gICAgICAgICAqIHdoaWNoIGlzIGludm9rZWQgZm9yIGB2YWx1ZWAgYW5kIGVhY2ggZWxlbWVudCBvZiBgYXJyYXlgIHRvIGNvbXB1dGUgdGhlaXJcbiAgICAgICAgICogc29ydCByYW5raW5nLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDogKHZhbHVlKS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBzb3J0ZWQgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gZXZhbHVhdGUuXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggYXQgd2hpY2ggYHZhbHVlYCBzaG91bGQgYmUgaW5zZXJ0ZWRcbiAgICAgICAgICogIGludG8gYGFycmF5YC5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogdmFyIG9iamVjdHMgPSBbeyAneCc6IDQgfSwgeyAneCc6IDUgfV07XG4gICAgICAgICAqXG4gICAgICAgICAqIF8uc29ydGVkTGFzdEluZGV4Qnkob2JqZWN0cywgeyAneCc6IDQgfSwgZnVuY3Rpb24obykgeyByZXR1cm4gby54OyB9KTtcbiAgICAgICAgICogLy8gPT4gMVxuICAgICAgICAgKlxuICAgICAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgICAgICogXy5zb3J0ZWRMYXN0SW5kZXhCeShvYmplY3RzLCB7ICd4JzogNCB9LCAneCcpO1xuICAgICAgICAgKiAvLyA9PiAxXG4gICAgICAgICAqL2Z1bmN0aW9uIHNvcnRlZExhc3RJbmRleEJ5KGFycmF5LHZhbHVlLGl0ZXJhdGVlKXtyZXR1cm4gYmFzZVNvcnRlZEluZGV4QnkoYXJyYXksdmFsdWUsZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsMiksdHJ1ZSk7fS8qKlxuICAgICAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmxhc3RJbmRleE9mYCBleGNlcHQgdGhhdCBpdCBwZXJmb3JtcyBhIGJpbmFyeVxuICAgICAgICAgKiBzZWFyY2ggb24gYSBzb3J0ZWQgYGFycmF5YC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgICAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICAgICAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLnNvcnRlZExhc3RJbmRleE9mKFs0LCA1LCA1LCA1LCA2XSwgNSk7XG4gICAgICAgICAqIC8vID0+IDNcbiAgICAgICAgICovZnVuY3Rpb24gc29ydGVkTGFzdEluZGV4T2YoYXJyYXksdmFsdWUpe3ZhciBsZW5ndGg9YXJyYXk9PW51bGw/MDphcnJheS5sZW5ndGg7aWYobGVuZ3RoKXt2YXIgaW5kZXg9YmFzZVNvcnRlZEluZGV4KGFycmF5LHZhbHVlLHRydWUpLTE7aWYoZXEoYXJyYXlbaW5kZXhdLHZhbHVlKSl7cmV0dXJuIGluZGV4O319cmV0dXJuLTE7fS8qKlxuICAgICAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnVuaXFgIGV4Y2VwdCB0aGF0IGl0J3MgZGVzaWduZWQgYW5kIG9wdGltaXplZFxuICAgICAgICAgKiBmb3Igc29ydGVkIGFycmF5cy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgICAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBkdXBsaWNhdGUgZnJlZSBhcnJheS5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogXy5zb3J0ZWRVbmlxKFsxLCAxLCAyXSk7XG4gICAgICAgICAqIC8vID0+IFsxLCAyXVxuICAgICAgICAgKi9mdW5jdGlvbiBzb3J0ZWRVbmlxKGFycmF5KXtyZXR1cm4gYXJyYXkmJmFycmF5Lmxlbmd0aD9iYXNlU29ydGVkVW5pcShhcnJheSk6W107fS8qKlxuICAgICAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnVuaXFCeWAgZXhjZXB0IHRoYXQgaXQncyBkZXNpZ25lZCBhbmQgb3B0aW1pemVkXG4gICAgICAgICAqIGZvciBzb3J0ZWQgYXJyYXlzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGR1cGxpY2F0ZSBmcmVlIGFycmF5LlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLnNvcnRlZFVuaXFCeShbMS4xLCAxLjIsIDIuMywgMi40XSwgTWF0aC5mbG9vcik7XG4gICAgICAgICAqIC8vID0+IFsxLjEsIDIuM11cbiAgICAgICAgICovZnVuY3Rpb24gc29ydGVkVW5pcUJ5KGFycmF5LGl0ZXJhdGVlKXtyZXR1cm4gYXJyYXkmJmFycmF5Lmxlbmd0aD9iYXNlU29ydGVkVW5pcShhcnJheSxnZXRJdGVyYXRlZShpdGVyYXRlZSwyKSk6W107fS8qKlxuICAgICAgICAgKiBHZXRzIGFsbCBidXQgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYGFycmF5YC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBxdWVyeS5cbiAgICAgICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzbGljZSBvZiBgYXJyYXlgLlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLnRhaWwoWzEsIDIsIDNdKTtcbiAgICAgICAgICogLy8gPT4gWzIsIDNdXG4gICAgICAgICAqL2Z1bmN0aW9uIHRhaWwoYXJyYXkpe3ZhciBsZW5ndGg9YXJyYXk9PW51bGw/MDphcnJheS5sZW5ndGg7cmV0dXJuIGxlbmd0aD9iYXNlU2xpY2UoYXJyYXksMSxsZW5ndGgpOltdO30vKipcbiAgICAgICAgICogQ3JlYXRlcyBhIHNsaWNlIG9mIGBhcnJheWAgd2l0aCBgbmAgZWxlbWVudHMgdGFrZW4gZnJvbSB0aGUgYmVnaW5uaW5nLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gW249MV0gVGhlIG51bWJlciBvZiBlbGVtZW50cyB0byB0YWtlLlxuICAgICAgICAgKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5tYXBgLlxuICAgICAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHNsaWNlIG9mIGBhcnJheWAuXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8udGFrZShbMSwgMiwgM10pO1xuICAgICAgICAgKiAvLyA9PiBbMV1cbiAgICAgICAgICpcbiAgICAgICAgICogXy50YWtlKFsxLCAyLCAzXSwgMik7XG4gICAgICAgICAqIC8vID0+IFsxLCAyXVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLnRha2UoWzEsIDIsIDNdLCA1KTtcbiAgICAgICAgICogLy8gPT4gWzEsIDIsIDNdXG4gICAgICAgICAqXG4gICAgICAgICAqIF8udGFrZShbMSwgMiwgM10sIDApO1xuICAgICAgICAgKiAvLyA9PiBbXVxuICAgICAgICAgKi9mdW5jdGlvbiB0YWtlKGFycmF5LG4sZ3VhcmQpe2lmKCEoYXJyYXkmJmFycmF5Lmxlbmd0aCkpe3JldHVybltdO31uPWd1YXJkfHxuPT09dW5kZWZpbmVkPzE6dG9JbnRlZ2VyKG4pO3JldHVybiBiYXNlU2xpY2UoYXJyYXksMCxuPDA/MDpuKTt9LyoqXG4gICAgICAgICAqIENyZWF0ZXMgYSBzbGljZSBvZiBgYXJyYXlgIHdpdGggYG5gIGVsZW1lbnRzIHRha2VuIGZyb20gdGhlIGVuZC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBxdWVyeS5cbiAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IFtuPTFdIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgdG8gdGFrZS5cbiAgICAgICAgICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ubWFwYC5cbiAgICAgICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzbGljZSBvZiBgYXJyYXlgLlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLnRha2VSaWdodChbMSwgMiwgM10pO1xuICAgICAgICAgKiAvLyA9PiBbM11cbiAgICAgICAgICpcbiAgICAgICAgICogXy50YWtlUmlnaHQoWzEsIDIsIDNdLCAyKTtcbiAgICAgICAgICogLy8gPT4gWzIsIDNdXG4gICAgICAgICAqXG4gICAgICAgICAqIF8udGFrZVJpZ2h0KFsxLCAyLCAzXSwgNSk7XG4gICAgICAgICAqIC8vID0+IFsxLCAyLCAzXVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLnRha2VSaWdodChbMSwgMiwgM10sIDApO1xuICAgICAgICAgKiAvLyA9PiBbXVxuICAgICAgICAgKi9mdW5jdGlvbiB0YWtlUmlnaHQoYXJyYXksbixndWFyZCl7dmFyIGxlbmd0aD1hcnJheT09bnVsbD8wOmFycmF5Lmxlbmd0aDtpZighbGVuZ3RoKXtyZXR1cm5bXTt9bj1ndWFyZHx8bj09PXVuZGVmaW5lZD8xOnRvSW50ZWdlcihuKTtuPWxlbmd0aC1uO3JldHVybiBiYXNlU2xpY2UoYXJyYXksbjwwPzA6bixsZW5ndGgpO30vKipcbiAgICAgICAgICogQ3JlYXRlcyBhIHNsaWNlIG9mIGBhcnJheWAgd2l0aCBlbGVtZW50cyB0YWtlbiBmcm9tIHRoZSBlbmQuIEVsZW1lbnRzIGFyZVxuICAgICAgICAgKiB0YWtlbiB1bnRpbCBgcHJlZGljYXRlYCByZXR1cm5zIGZhbHNleS4gVGhlIHByZWRpY2F0ZSBpcyBpbnZva2VkIHdpdGhcbiAgICAgICAgICogdGhyZWUgYXJndW1lbnRzOiAodmFsdWUsIGluZGV4LCBhcnJheSkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQHNpbmNlIDMuMC4wXG4gICAgICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzbGljZSBvZiBgYXJyYXlgLlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiB2YXIgdXNlcnMgPSBbXG4gICAgICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAgJ2FjdGl2ZSc6IHRydWUgfSxcbiAgICAgICAgICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICAnYWN0aXZlJzogZmFsc2UgfSxcbiAgICAgICAgICogICB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWN0aXZlJzogZmFsc2UgfVxuICAgICAgICAgKiBdO1xuICAgICAgICAgKlxuICAgICAgICAgKiBfLnRha2VSaWdodFdoaWxlKHVzZXJzLCBmdW5jdGlvbihvKSB7IHJldHVybiAhby5hY3RpdmU7IH0pO1xuICAgICAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ2ZyZWQnLCAncGViYmxlcyddXG4gICAgICAgICAqXG4gICAgICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICAgICAqIF8udGFrZVJpZ2h0V2hpbGUodXNlcnMsIHsgJ3VzZXInOiAncGViYmxlcycsICdhY3RpdmUnOiBmYWxzZSB9KTtcbiAgICAgICAgICogLy8gPT4gb2JqZWN0cyBmb3IgWydwZWJibGVzJ11cbiAgICAgICAgICpcbiAgICAgICAgICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAgICAgKiBfLnRha2VSaWdodFdoaWxlKHVzZXJzLCBbJ2FjdGl2ZScsIGZhbHNlXSk7XG4gICAgICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFsnZnJlZCcsICdwZWJibGVzJ11cbiAgICAgICAgICpcbiAgICAgICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICAgICAqIF8udGFrZVJpZ2h0V2hpbGUodXNlcnMsICdhY3RpdmUnKTtcbiAgICAgICAgICogLy8gPT4gW11cbiAgICAgICAgICovZnVuY3Rpb24gdGFrZVJpZ2h0V2hpbGUoYXJyYXkscHJlZGljYXRlKXtyZXR1cm4gYXJyYXkmJmFycmF5Lmxlbmd0aD9iYXNlV2hpbGUoYXJyYXksZ2V0SXRlcmF0ZWUocHJlZGljYXRlLDMpLGZhbHNlLHRydWUpOltdO30vKipcbiAgICAgICAgICogQ3JlYXRlcyBhIHNsaWNlIG9mIGBhcnJheWAgd2l0aCBlbGVtZW50cyB0YWtlbiBmcm9tIHRoZSBiZWdpbm5pbmcuIEVsZW1lbnRzXG4gICAgICAgICAqIGFyZSB0YWtlbiB1bnRpbCBgcHJlZGljYXRlYCByZXR1cm5zIGZhbHNleS4gVGhlIHByZWRpY2F0ZSBpcyBpbnZva2VkIHdpdGhcbiAgICAgICAgICogdGhyZWUgYXJndW1lbnRzOiAodmFsdWUsIGluZGV4LCBhcnJheSkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQHNpbmNlIDMuMC4wXG4gICAgICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzbGljZSBvZiBgYXJyYXlgLlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiB2YXIgdXNlcnMgPSBbXG4gICAgICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAgJ2FjdGl2ZSc6IGZhbHNlIH0sXG4gICAgICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAgJ2FjdGl2ZSc6IGZhbHNlIH0sXG4gICAgICAgICAqICAgeyAndXNlcic6ICdwZWJibGVzJywgJ2FjdGl2ZSc6IHRydWUgfVxuICAgICAgICAgKiBdO1xuICAgICAgICAgKlxuICAgICAgICAgKiBfLnRha2VXaGlsZSh1c2VycywgZnVuY3Rpb24obykgeyByZXR1cm4gIW8uYWN0aXZlOyB9KTtcbiAgICAgICAgICogLy8gPT4gb2JqZWN0cyBmb3IgWydiYXJuZXknLCAnZnJlZCddXG4gICAgICAgICAqXG4gICAgICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICAgICAqIF8udGFrZVdoaWxlKHVzZXJzLCB7ICd1c2VyJzogJ2Jhcm5leScsICdhY3RpdmUnOiBmYWxzZSB9KTtcbiAgICAgICAgICogLy8gPT4gb2JqZWN0cyBmb3IgWydiYXJuZXknXVxuICAgICAgICAgKlxuICAgICAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICAgICAqIF8udGFrZVdoaWxlKHVzZXJzLCBbJ2FjdGl2ZScsIGZhbHNlXSk7XG4gICAgICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFsnYmFybmV5JywgJ2ZyZWQnXVxuICAgICAgICAgKlxuICAgICAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgICAgICogXy50YWtlV2hpbGUodXNlcnMsICdhY3RpdmUnKTtcbiAgICAgICAgICogLy8gPT4gW11cbiAgICAgICAgICovZnVuY3Rpb24gdGFrZVdoaWxlKGFycmF5LHByZWRpY2F0ZSl7cmV0dXJuIGFycmF5JiZhcnJheS5sZW5ndGg/YmFzZVdoaWxlKGFycmF5LGdldEl0ZXJhdGVlKHByZWRpY2F0ZSwzKSk6W107fS8qKlxuICAgICAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIHVuaXF1ZSB2YWx1ZXMsIGluIG9yZGVyLCBmcm9tIGFsbCBnaXZlbiBhcnJheXMgdXNpbmdcbiAgICAgICAgICogW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAgICAgICAgICogZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgICAgICogQHBhcmFtIHsuLi5BcnJheX0gW2FycmF5c10gVGhlIGFycmF5cyB0byBpbnNwZWN0LlxuICAgICAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBjb21iaW5lZCB2YWx1ZXMuXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8udW5pb24oWzJdLCBbMSwgMl0pO1xuICAgICAgICAgKiAvLyA9PiBbMiwgMV1cbiAgICAgICAgICovdmFyIHVuaW9uPWJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5cyl7cmV0dXJuIGJhc2VVbmlxKGJhc2VGbGF0dGVuKGFycmF5cywxLGlzQXJyYXlMaWtlT2JqZWN0LHRydWUpKTt9KTsvKipcbiAgICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8udW5pb25gIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGl0ZXJhdGVlYCB3aGljaCBpc1xuICAgICAgICogaW52b2tlZCBmb3IgZWFjaCBlbGVtZW50IG9mIGVhY2ggYGFycmF5c2AgdG8gZ2VuZXJhdGUgdGhlIGNyaXRlcmlvbiBieVxuICAgICAgICogd2hpY2ggdW5pcXVlbmVzcyBpcyBjb21wdXRlZC4gUmVzdWx0IHZhbHVlcyBhcmUgY2hvc2VuIGZyb20gdGhlIGZpcnN0XG4gICAgICAgKiBhcnJheSBpbiB3aGljaCB0aGUgdmFsdWUgb2NjdXJzLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDpcbiAgICAgICAqICh2YWx1ZSkuXG4gICAgICAgKlxuICAgICAgICogQHN0YXRpY1xuICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICAgKiBAcGFyYW0gey4uLkFycmF5fSBbYXJyYXlzXSBUaGUgYXJyYXlzIHRvIGluc3BlY3QuXG4gICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBjb21iaW5lZCB2YWx1ZXMuXG4gICAgICAgKiBAZXhhbXBsZVxuICAgICAgICpcbiAgICAgICAqIF8udW5pb25CeShbMi4xXSwgWzEuMiwgMi4zXSwgTWF0aC5mbG9vcik7XG4gICAgICAgKiAvLyA9PiBbMi4xLCAxLjJdXG4gICAgICAgKlxuICAgICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICAgKiBfLnVuaW9uQnkoW3sgJ3gnOiAxIH1dLCBbeyAneCc6IDIgfSwgeyAneCc6IDEgfV0sICd4Jyk7XG4gICAgICAgKiAvLyA9PiBbeyAneCc6IDEgfSwgeyAneCc6IDIgfV1cbiAgICAgICAqL3ZhciB1bmlvbkJ5PWJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5cyl7dmFyIGl0ZXJhdGVlPWxhc3QoYXJyYXlzKTtpZihpc0FycmF5TGlrZU9iamVjdChpdGVyYXRlZSkpe2l0ZXJhdGVlPXVuZGVmaW5lZDt9cmV0dXJuIGJhc2VVbmlxKGJhc2VGbGF0dGVuKGFycmF5cywxLGlzQXJyYXlMaWtlT2JqZWN0LHRydWUpLGdldEl0ZXJhdGVlKGl0ZXJhdGVlLDIpKTt9KTsvKipcbiAgICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8udW5pb25gIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGNvbXBhcmF0b3JgIHdoaWNoXG4gICAgICAgKiBpcyBpbnZva2VkIHRvIGNvbXBhcmUgZWxlbWVudHMgb2YgYGFycmF5c2AuIFJlc3VsdCB2YWx1ZXMgYXJlIGNob3NlbiBmcm9tXG4gICAgICAgKiB0aGUgZmlyc3QgYXJyYXkgaW4gd2hpY2ggdGhlIHZhbHVlIG9jY3Vycy4gVGhlIGNvbXBhcmF0b3IgaXMgaW52b2tlZFxuICAgICAgICogd2l0aCB0d28gYXJndW1lbnRzOiAoYXJyVmFsLCBvdGhWYWwpLlxuICAgICAgICpcbiAgICAgICAqIEBzdGF0aWNcbiAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAgICogQHBhcmFtIHsuLi5BcnJheX0gW2FycmF5c10gVGhlIGFycmF5cyB0byBpbnNwZWN0LlxuICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NvbXBhcmF0b3JdIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBjb21iaW5lZCB2YWx1ZXMuXG4gICAgICAgKiBAZXhhbXBsZVxuICAgICAgICpcbiAgICAgICAqIHZhciBvYmplY3RzID0gW3sgJ3gnOiAxLCAneSc6IDIgfSwgeyAneCc6IDIsICd5JzogMSB9XTtcbiAgICAgICAqIHZhciBvdGhlcnMgPSBbeyAneCc6IDEsICd5JzogMSB9LCB7ICd4JzogMSwgJ3knOiAyIH1dO1xuICAgICAgICpcbiAgICAgICAqIF8udW5pb25XaXRoKG9iamVjdHMsIG90aGVycywgXy5pc0VxdWFsKTtcbiAgICAgICAqIC8vID0+IFt7ICd4JzogMSwgJ3knOiAyIH0sIHsgJ3gnOiAyLCAneSc6IDEgfSwgeyAneCc6IDEsICd5JzogMSB9XVxuICAgICAgICovdmFyIHVuaW9uV2l0aD1iYXNlUmVzdChmdW5jdGlvbihhcnJheXMpe3ZhciBjb21wYXJhdG9yPWxhc3QoYXJyYXlzKTtjb21wYXJhdG9yPXR5cGVvZiBjb21wYXJhdG9yPT09J2Z1bmN0aW9uJz9jb21wYXJhdG9yOnVuZGVmaW5lZDtyZXR1cm4gYmFzZVVuaXEoYmFzZUZsYXR0ZW4oYXJyYXlzLDEsaXNBcnJheUxpa2VPYmplY3QsdHJ1ZSksdW5kZWZpbmVkLGNvbXBhcmF0b3IpO30pOy8qKlxuICAgICAgICogQ3JlYXRlcyBhIGR1cGxpY2F0ZS1mcmVlIHZlcnNpb24gb2YgYW4gYXJyYXksIHVzaW5nXG4gICAgICAgKiBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICAgICAgICogZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zLCBpbiB3aGljaCBvbmx5IHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIGVhY2ggZWxlbWVudFxuICAgICAgICogaXMga2VwdC4gVGhlIG9yZGVyIG9mIHJlc3VsdCB2YWx1ZXMgaXMgZGV0ZXJtaW5lZCBieSB0aGUgb3JkZXIgdGhleSBvY2N1clxuICAgICAgICogaW4gdGhlIGFycmF5LlxuICAgICAgICpcbiAgICAgICAqIEBzdGF0aWNcbiAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBkdXBsaWNhdGUgZnJlZSBhcnJheS5cbiAgICAgICAqIEBleGFtcGxlXG4gICAgICAgKlxuICAgICAgICogXy51bmlxKFsyLCAxLCAyXSk7XG4gICAgICAgKiAvLyA9PiBbMiwgMV1cbiAgICAgICAqL2Z1bmN0aW9uIHVuaXEoYXJyYXkpe3JldHVybiBhcnJheSYmYXJyYXkubGVuZ3RoP2Jhc2VVbmlxKGFycmF5KTpbXTt9LyoqXG4gICAgICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8udW5pcWAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgaXRlcmF0ZWVgIHdoaWNoIGlzXG4gICAgICAgICAqIGludm9rZWQgZm9yIGVhY2ggZWxlbWVudCBpbiBgYXJyYXlgIHRvIGdlbmVyYXRlIHRoZSBjcml0ZXJpb24gYnkgd2hpY2hcbiAgICAgICAgICogdW5pcXVlbmVzcyBpcyBjb21wdXRlZC4gVGhlIG9yZGVyIG9mIHJlc3VsdCB2YWx1ZXMgaXMgZGV0ZXJtaW5lZCBieSB0aGVcbiAgICAgICAgICogb3JkZXIgdGhleSBvY2N1ciBpbiB0aGUgYXJyYXkuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OlxuICAgICAgICAgKiAodmFsdWUpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZHVwbGljYXRlIGZyZWUgYXJyYXkuXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8udW5pcUJ5KFsyLjEsIDEuMiwgMi4zXSwgTWF0aC5mbG9vcik7XG4gICAgICAgICAqIC8vID0+IFsyLjEsIDEuMl1cbiAgICAgICAgICpcbiAgICAgICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICAgICAqIF8udW5pcUJ5KFt7ICd4JzogMSB9LCB7ICd4JzogMiB9LCB7ICd4JzogMSB9XSwgJ3gnKTtcbiAgICAgICAgICogLy8gPT4gW3sgJ3gnOiAxIH0sIHsgJ3gnOiAyIH1dXG4gICAgICAgICAqL2Z1bmN0aW9uIHVuaXFCeShhcnJheSxpdGVyYXRlZSl7cmV0dXJuIGFycmF5JiZhcnJheS5sZW5ndGg/YmFzZVVuaXEoYXJyYXksZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsMikpOltdO30vKipcbiAgICAgICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy51bmlxYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBjb21wYXJhdG9yYCB3aGljaFxuICAgICAgICAgKiBpcyBpbnZva2VkIHRvIGNvbXBhcmUgZWxlbWVudHMgb2YgYGFycmF5YC4gVGhlIG9yZGVyIG9mIHJlc3VsdCB2YWx1ZXMgaXNcbiAgICAgICAgICogZGV0ZXJtaW5lZCBieSB0aGUgb3JkZXIgdGhleSBvY2N1ciBpbiB0aGUgYXJyYXkuVGhlIGNvbXBhcmF0b3IgaXMgaW52b2tlZFxuICAgICAgICAgKiB3aXRoIHR3byBhcmd1bWVudHM6IChhcnJWYWwsIG90aFZhbCkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQHNpbmNlIDQuMC4wXG4gICAgICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NvbXBhcmF0b3JdIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGR1cGxpY2F0ZSBmcmVlIGFycmF5LlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiB2YXIgb2JqZWN0cyA9IFt7ICd4JzogMSwgJ3knOiAyIH0sIHsgJ3gnOiAyLCAneSc6IDEgfSwgeyAneCc6IDEsICd5JzogMiB9XTtcbiAgICAgICAgICpcbiAgICAgICAgICogXy51bmlxV2l0aChvYmplY3RzLCBfLmlzRXF1YWwpO1xuICAgICAgICAgKiAvLyA9PiBbeyAneCc6IDEsICd5JzogMiB9LCB7ICd4JzogMiwgJ3knOiAxIH1dXG4gICAgICAgICAqL2Z1bmN0aW9uIHVuaXFXaXRoKGFycmF5LGNvbXBhcmF0b3Ipe2NvbXBhcmF0b3I9dHlwZW9mIGNvbXBhcmF0b3I9PT0nZnVuY3Rpb24nP2NvbXBhcmF0b3I6dW5kZWZpbmVkO3JldHVybiBhcnJheSYmYXJyYXkubGVuZ3RoP2Jhc2VVbmlxKGFycmF5LHVuZGVmaW5lZCxjb21wYXJhdG9yKTpbXTt9LyoqXG4gICAgICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uemlwYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGFuIGFycmF5IG9mIGdyb3VwZWRcbiAgICAgICAgICogZWxlbWVudHMgYW5kIGNyZWF0ZXMgYW4gYXJyYXkgcmVncm91cGluZyB0aGUgZWxlbWVudHMgdG8gdGhlaXIgcHJlLXppcFxuICAgICAgICAgKiBjb25maWd1cmF0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSAxLjIuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IG9mIGdyb3VwZWQgZWxlbWVudHMgdG8gcHJvY2Vzcy5cbiAgICAgICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgcmVncm91cGVkIGVsZW1lbnRzLlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiB2YXIgemlwcGVkID0gXy56aXAoWydhJywgJ2InXSwgWzEsIDJdLCBbdHJ1ZSwgZmFsc2VdKTtcbiAgICAgICAgICogLy8gPT4gW1snYScsIDEsIHRydWVdLCBbJ2InLCAyLCBmYWxzZV1dXG4gICAgICAgICAqXG4gICAgICAgICAqIF8udW56aXAoemlwcGVkKTtcbiAgICAgICAgICogLy8gPT4gW1snYScsICdiJ10sIFsxLCAyXSwgW3RydWUsIGZhbHNlXV1cbiAgICAgICAgICovZnVuY3Rpb24gdW56aXAoYXJyYXkpe2lmKCEoYXJyYXkmJmFycmF5Lmxlbmd0aCkpe3JldHVybltdO312YXIgbGVuZ3RoPTA7YXJyYXk9YXJyYXlGaWx0ZXIoYXJyYXksZnVuY3Rpb24oZ3JvdXApe2lmKGlzQXJyYXlMaWtlT2JqZWN0KGdyb3VwKSl7bGVuZ3RoPW5hdGl2ZU1heChncm91cC5sZW5ndGgsbGVuZ3RoKTtyZXR1cm4gdHJ1ZTt9fSk7cmV0dXJuIGJhc2VUaW1lcyhsZW5ndGgsZnVuY3Rpb24oaW5kZXgpe3JldHVybiBhcnJheU1hcChhcnJheSxiYXNlUHJvcGVydHkoaW5kZXgpKTt9KTt9LyoqXG4gICAgICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8udW56aXBgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGl0ZXJhdGVlYCB0byBzcGVjaWZ5XG4gICAgICAgICAqIGhvdyByZWdyb3VwZWQgdmFsdWVzIHNob3VsZCBiZSBjb21iaW5lZC4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCB0aGVcbiAgICAgICAgICogZWxlbWVudHMgb2YgZWFjaCBncm91cDogKC4uLmdyb3VwKS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAc2luY2UgMy44LjBcbiAgICAgICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSBvZiBncm91cGVkIGVsZW1lbnRzIHRvIHByb2Nlc3MuXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gdG8gY29tYmluZVxuICAgICAgICAgKiAgcmVncm91cGVkIHZhbHVlcy5cbiAgICAgICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgcmVncm91cGVkIGVsZW1lbnRzLlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiB2YXIgemlwcGVkID0gXy56aXAoWzEsIDJdLCBbMTAsIDIwXSwgWzEwMCwgMjAwXSk7XG4gICAgICAgICAqIC8vID0+IFtbMSwgMTAsIDEwMF0sIFsyLCAyMCwgMjAwXV1cbiAgICAgICAgICpcbiAgICAgICAgICogXy51bnppcFdpdGgoemlwcGVkLCBfLmFkZCk7XG4gICAgICAgICAqIC8vID0+IFszLCAzMCwgMzAwXVxuICAgICAgICAgKi9mdW5jdGlvbiB1bnppcFdpdGgoYXJyYXksaXRlcmF0ZWUpe2lmKCEoYXJyYXkmJmFycmF5Lmxlbmd0aCkpe3JldHVybltdO312YXIgcmVzdWx0PXVuemlwKGFycmF5KTtpZihpdGVyYXRlZT09bnVsbCl7cmV0dXJuIHJlc3VsdDt9cmV0dXJuIGFycmF5TWFwKHJlc3VsdCxmdW5jdGlvbihncm91cCl7cmV0dXJuIGFwcGx5KGl0ZXJhdGVlLHVuZGVmaW5lZCxncm91cCk7fSk7fS8qKlxuICAgICAgICAgKiBDcmVhdGVzIGFuIGFycmF5IGV4Y2x1ZGluZyBhbGwgZ2l2ZW4gdmFsdWVzIHVzaW5nXG4gICAgICAgICAqIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gICAgICAgICAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy5cbiAgICAgICAgICpcbiAgICAgICAgICogKipOb3RlOioqIFVubGlrZSBgXy5wdWxsYCwgdGhpcyBtZXRob2QgcmV0dXJucyBhIG5ldyBhcnJheS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgICAgICAgKiBAcGFyYW0gey4uLip9IFt2YWx1ZXNdIFRoZSB2YWx1ZXMgdG8gZXhjbHVkZS5cbiAgICAgICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgZmlsdGVyZWQgdmFsdWVzLlxuICAgICAgICAgKiBAc2VlIF8uZGlmZmVyZW5jZSwgXy54b3JcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogXy53aXRob3V0KFsyLCAxLCAyLCAzXSwgMSwgMik7XG4gICAgICAgICAqIC8vID0+IFszXVxuICAgICAgICAgKi92YXIgd2l0aG91dD1iYXNlUmVzdChmdW5jdGlvbihhcnJheSx2YWx1ZXMpe3JldHVybiBpc0FycmF5TGlrZU9iamVjdChhcnJheSk/YmFzZURpZmZlcmVuY2UoYXJyYXksdmFsdWVzKTpbXTt9KTsvKipcbiAgICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdW5pcXVlIHZhbHVlcyB0aGF0IGlzIHRoZVxuICAgICAgICogW3N5bW1ldHJpYyBkaWZmZXJlbmNlXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TeW1tZXRyaWNfZGlmZmVyZW5jZSlcbiAgICAgICAqIG9mIHRoZSBnaXZlbiBhcnJheXMuIFRoZSBvcmRlciBvZiByZXN1bHQgdmFsdWVzIGlzIGRldGVybWluZWQgYnkgdGhlIG9yZGVyXG4gICAgICAgKiB0aGV5IG9jY3VyIGluIHRoZSBhcnJheXMuXG4gICAgICAgKlxuICAgICAgICogQHN0YXRpY1xuICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAqIEBzaW5jZSAyLjQuMFxuICAgICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICAgKiBAcGFyYW0gey4uLkFycmF5fSBbYXJyYXlzXSBUaGUgYXJyYXlzIHRvIGluc3BlY3QuXG4gICAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBmaWx0ZXJlZCB2YWx1ZXMuXG4gICAgICAgKiBAc2VlIF8uZGlmZmVyZW5jZSwgXy53aXRob3V0XG4gICAgICAgKiBAZXhhbXBsZVxuICAgICAgICpcbiAgICAgICAqIF8ueG9yKFsyLCAxXSwgWzIsIDNdKTtcbiAgICAgICAqIC8vID0+IFsxLCAzXVxuICAgICAgICovdmFyIHhvcj1iYXNlUmVzdChmdW5jdGlvbihhcnJheXMpe3JldHVybiBiYXNlWG9yKGFycmF5RmlsdGVyKGFycmF5cyxpc0FycmF5TGlrZU9iamVjdCkpO30pOy8qKlxuICAgICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy54b3JgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGl0ZXJhdGVlYCB3aGljaCBpc1xuICAgICAgICogaW52b2tlZCBmb3IgZWFjaCBlbGVtZW50IG9mIGVhY2ggYGFycmF5c2AgdG8gZ2VuZXJhdGUgdGhlIGNyaXRlcmlvbiBieVxuICAgICAgICogd2hpY2ggYnkgd2hpY2ggdGhleSdyZSBjb21wYXJlZC4gVGhlIG9yZGVyIG9mIHJlc3VsdCB2YWx1ZXMgaXMgZGV0ZXJtaW5lZFxuICAgICAgICogYnkgdGhlIG9yZGVyIHRoZXkgb2NjdXIgaW4gdGhlIGFycmF5cy4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCBvbmVcbiAgICAgICAqIGFyZ3VtZW50OiAodmFsdWUpLlxuICAgICAgICpcbiAgICAgICAqIEBzdGF0aWNcbiAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAgICogQHBhcmFtIHsuLi5BcnJheX0gW2FycmF5c10gVGhlIGFycmF5cyB0byBpbnNwZWN0LlxuICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgZmlsdGVyZWQgdmFsdWVzLlxuICAgICAgICogQGV4YW1wbGVcbiAgICAgICAqXG4gICAgICAgKiBfLnhvckJ5KFsyLjEsIDEuMl0sIFsyLjMsIDMuNF0sIE1hdGguZmxvb3IpO1xuICAgICAgICogLy8gPT4gWzEuMiwgMy40XVxuICAgICAgICpcbiAgICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAgICogXy54b3JCeShbeyAneCc6IDEgfV0sIFt7ICd4JzogMiB9LCB7ICd4JzogMSB9XSwgJ3gnKTtcbiAgICAgICAqIC8vID0+IFt7ICd4JzogMiB9XVxuICAgICAgICovdmFyIHhvckJ5PWJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5cyl7dmFyIGl0ZXJhdGVlPWxhc3QoYXJyYXlzKTtpZihpc0FycmF5TGlrZU9iamVjdChpdGVyYXRlZSkpe2l0ZXJhdGVlPXVuZGVmaW5lZDt9cmV0dXJuIGJhc2VYb3IoYXJyYXlGaWx0ZXIoYXJyYXlzLGlzQXJyYXlMaWtlT2JqZWN0KSxnZXRJdGVyYXRlZShpdGVyYXRlZSwyKSk7fSk7LyoqXG4gICAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnhvcmAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgY29tcGFyYXRvcmAgd2hpY2ggaXNcbiAgICAgICAqIGludm9rZWQgdG8gY29tcGFyZSBlbGVtZW50cyBvZiBgYXJyYXlzYC4gVGhlIG9yZGVyIG9mIHJlc3VsdCB2YWx1ZXMgaXNcbiAgICAgICAqIGRldGVybWluZWQgYnkgdGhlIG9yZGVyIHRoZXkgb2NjdXIgaW4gdGhlIGFycmF5cy4gVGhlIGNvbXBhcmF0b3IgaXMgaW52b2tlZFxuICAgICAgICogd2l0aCB0d28gYXJndW1lbnRzOiAoYXJyVmFsLCBvdGhWYWwpLlxuICAgICAgICpcbiAgICAgICAqIEBzdGF0aWNcbiAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAgICogQHBhcmFtIHsuLi5BcnJheX0gW2FycmF5c10gVGhlIGFycmF5cyB0byBpbnNwZWN0LlxuICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NvbXBhcmF0b3JdIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBmaWx0ZXJlZCB2YWx1ZXMuXG4gICAgICAgKiBAZXhhbXBsZVxuICAgICAgICpcbiAgICAgICAqIHZhciBvYmplY3RzID0gW3sgJ3gnOiAxLCAneSc6IDIgfSwgeyAneCc6IDIsICd5JzogMSB9XTtcbiAgICAgICAqIHZhciBvdGhlcnMgPSBbeyAneCc6IDEsICd5JzogMSB9LCB7ICd4JzogMSwgJ3knOiAyIH1dO1xuICAgICAgICpcbiAgICAgICAqIF8ueG9yV2l0aChvYmplY3RzLCBvdGhlcnMsIF8uaXNFcXVhbCk7XG4gICAgICAgKiAvLyA9PiBbeyAneCc6IDIsICd5JzogMSB9LCB7ICd4JzogMSwgJ3knOiAxIH1dXG4gICAgICAgKi92YXIgeG9yV2l0aD1iYXNlUmVzdChmdW5jdGlvbihhcnJheXMpe3ZhciBjb21wYXJhdG9yPWxhc3QoYXJyYXlzKTtjb21wYXJhdG9yPXR5cGVvZiBjb21wYXJhdG9yPT09J2Z1bmN0aW9uJz9jb21wYXJhdG9yOnVuZGVmaW5lZDtyZXR1cm4gYmFzZVhvcihhcnJheUZpbHRlcihhcnJheXMsaXNBcnJheUxpa2VPYmplY3QpLHVuZGVmaW5lZCxjb21wYXJhdG9yKTt9KTsvKipcbiAgICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgZ3JvdXBlZCBlbGVtZW50cywgdGhlIGZpcnN0IG9mIHdoaWNoIGNvbnRhaW5zIHRoZVxuICAgICAgICogZmlyc3QgZWxlbWVudHMgb2YgdGhlIGdpdmVuIGFycmF5cywgdGhlIHNlY29uZCBvZiB3aGljaCBjb250YWlucyB0aGVcbiAgICAgICAqIHNlY29uZCBlbGVtZW50cyBvZiB0aGUgZ2l2ZW4gYXJyYXlzLCBhbmQgc28gb24uXG4gICAgICAgKlxuICAgICAgICogQHN0YXRpY1xuICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICAgKiBAcGFyYW0gey4uLkFycmF5fSBbYXJyYXlzXSBUaGUgYXJyYXlzIHRvIHByb2Nlc3MuXG4gICAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBncm91cGVkIGVsZW1lbnRzLlxuICAgICAgICogQGV4YW1wbGVcbiAgICAgICAqXG4gICAgICAgKiBfLnppcChbJ2EnLCAnYiddLCBbMSwgMl0sIFt0cnVlLCBmYWxzZV0pO1xuICAgICAgICogLy8gPT4gW1snYScsIDEsIHRydWVdLCBbJ2InLCAyLCBmYWxzZV1dXG4gICAgICAgKi92YXIgemlwPWJhc2VSZXN0KHVuemlwKTsvKipcbiAgICAgICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5mcm9tUGFpcnNgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgdHdvIGFycmF5cyxcbiAgICAgICAgICogb25lIG9mIHByb3BlcnR5IGlkZW50aWZpZXJzIGFuZCBvbmUgb2YgY29ycmVzcG9uZGluZyB2YWx1ZXMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQHNpbmNlIDAuNC4wXG4gICAgICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBbcHJvcHM9W11dIFRoZSBwcm9wZXJ0eSBpZGVudGlmaWVycy5cbiAgICAgICAgICogQHBhcmFtIHtBcnJheX0gW3ZhbHVlcz1bXV0gVGhlIHByb3BlcnR5IHZhbHVlcy5cbiAgICAgICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogXy56aXBPYmplY3QoWydhJywgJ2InXSwgWzEsIDJdKTtcbiAgICAgICAgICogLy8gPT4geyAnYSc6IDEsICdiJzogMiB9XG4gICAgICAgICAqL2Z1bmN0aW9uIHppcE9iamVjdChwcm9wcyx2YWx1ZXMpe3JldHVybiBiYXNlWmlwT2JqZWN0KHByb3BzfHxbXSx2YWx1ZXN8fFtdLGFzc2lnblZhbHVlKTt9LyoqXG4gICAgICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uemlwT2JqZWN0YCBleGNlcHQgdGhhdCBpdCBzdXBwb3J0cyBwcm9wZXJ0eSBwYXRocy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAc2luY2UgNC4xLjBcbiAgICAgICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IFtwcm9wcz1bXV0gVGhlIHByb3BlcnR5IGlkZW50aWZpZXJzLlxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBbdmFsdWVzPVtdXSBUaGUgcHJvcGVydHkgdmFsdWVzLlxuICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLnppcE9iamVjdERlZXAoWydhLmJbMF0uYycsICdhLmJbMV0uZCddLCBbMSwgMl0pO1xuICAgICAgICAgKiAvLyA9PiB7ICdhJzogeyAnYic6IFt7ICdjJzogMSB9LCB7ICdkJzogMiB9XSB9IH1cbiAgICAgICAgICovZnVuY3Rpb24gemlwT2JqZWN0RGVlcChwcm9wcyx2YWx1ZXMpe3JldHVybiBiYXNlWmlwT2JqZWN0KHByb3BzfHxbXSx2YWx1ZXN8fFtdLGJhc2VTZXQpO30vKipcbiAgICAgICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy56aXBgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGl0ZXJhdGVlYCB0byBzcGVjaWZ5XG4gICAgICAgICAqIGhvdyBncm91cGVkIHZhbHVlcyBzaG91bGQgYmUgY29tYmluZWQuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggdGhlXG4gICAgICAgICAqIGVsZW1lbnRzIG9mIGVhY2ggZ3JvdXA6ICguLi5ncm91cCkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQHNpbmNlIDMuOC4wXG4gICAgICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAgICAgKiBAcGFyYW0gey4uLkFycmF5fSBbYXJyYXlzXSBUaGUgYXJyYXlzIHRvIHByb2Nlc3MuXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gdG8gY29tYmluZVxuICAgICAgICAgKiAgZ3JvdXBlZCB2YWx1ZXMuXG4gICAgICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGdyb3VwZWQgZWxlbWVudHMuXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8uemlwV2l0aChbMSwgMl0sIFsxMCwgMjBdLCBbMTAwLCAyMDBdLCBmdW5jdGlvbihhLCBiLCBjKSB7XG4gICAgICAgICAqICAgcmV0dXJuIGEgKyBiICsgYztcbiAgICAgICAgICogfSk7XG4gICAgICAgICAqIC8vID0+IFsxMTEsIDIyMl1cbiAgICAgICAgICovdmFyIHppcFdpdGg9YmFzZVJlc3QoZnVuY3Rpb24oYXJyYXlzKXt2YXIgbGVuZ3RoPWFycmF5cy5sZW5ndGgsaXRlcmF0ZWU9bGVuZ3RoPjE/YXJyYXlzW2xlbmd0aC0xXTp1bmRlZmluZWQ7aXRlcmF0ZWU9dHlwZW9mIGl0ZXJhdGVlPT09J2Z1bmN0aW9uJz8oYXJyYXlzLnBvcCgpLGl0ZXJhdGVlKTp1bmRlZmluZWQ7cmV0dXJuIHVuemlwV2l0aChhcnJheXMsaXRlcmF0ZWUpO30pOy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovLyoqXG4gICAgICAgKiBDcmVhdGVzIGEgYGxvZGFzaGAgd3JhcHBlciBpbnN0YW5jZSB0aGF0IHdyYXBzIGB2YWx1ZWAgd2l0aCBleHBsaWNpdCBtZXRob2RcbiAgICAgICAqIGNoYWluIHNlcXVlbmNlcyBlbmFibGVkLiBUaGUgcmVzdWx0IG9mIHN1Y2ggc2VxdWVuY2VzIG11c3QgYmUgdW53cmFwcGVkXG4gICAgICAgKiB3aXRoIGBfI3ZhbHVlYC5cbiAgICAgICAqXG4gICAgICAgKiBAc3RhdGljXG4gICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICogQHNpbmNlIDEuMy4wXG4gICAgICAgKiBAY2F0ZWdvcnkgU2VxXG4gICAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byB3cmFwLlxuICAgICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IGBsb2Rhc2hgIHdyYXBwZXIgaW5zdGFuY2UuXG4gICAgICAgKiBAZXhhbXBsZVxuICAgICAgICpcbiAgICAgICAqIHZhciB1c2VycyA9IFtcbiAgICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAgJ2FnZSc6IDM2IH0sXG4gICAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgICdhZ2UnOiA0MCB9LFxuICAgICAgICogICB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWdlJzogMSB9XG4gICAgICAgKiBdO1xuICAgICAgICpcbiAgICAgICAqIHZhciB5b3VuZ2VzdCA9IF9cbiAgICAgICAqICAgLmNoYWluKHVzZXJzKVxuICAgICAgICogICAuc29ydEJ5KCdhZ2UnKVxuICAgICAgICogICAubWFwKGZ1bmN0aW9uKG8pIHtcbiAgICAgICAqICAgICByZXR1cm4gby51c2VyICsgJyBpcyAnICsgby5hZ2U7XG4gICAgICAgKiAgIH0pXG4gICAgICAgKiAgIC5oZWFkKClcbiAgICAgICAqICAgLnZhbHVlKCk7XG4gICAgICAgKiAvLyA9PiAncGViYmxlcyBpcyAxJ1xuICAgICAgICovZnVuY3Rpb24gY2hhaW4odmFsdWUpe3ZhciByZXN1bHQ9bG9kYXNoKHZhbHVlKTtyZXN1bHQuX19jaGFpbl9fPXRydWU7cmV0dXJuIHJlc3VsdDt9LyoqXG4gICAgICAgICAqIFRoaXMgbWV0aG9kIGludm9rZXMgYGludGVyY2VwdG9yYCBhbmQgcmV0dXJucyBgdmFsdWVgLiBUaGUgaW50ZXJjZXB0b3JcbiAgICAgICAgICogaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDsgKHZhbHVlKS4gVGhlIHB1cnBvc2Ugb2YgdGhpcyBtZXRob2QgaXMgdG9cbiAgICAgICAgICogXCJ0YXAgaW50b1wiIGEgbWV0aG9kIGNoYWluIHNlcXVlbmNlIGluIG9yZGVyIHRvIG1vZGlmeSBpbnRlcm1lZGlhdGUgcmVzdWx0cy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgICAgICogQGNhdGVnb3J5IFNlcVxuICAgICAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwcm92aWRlIHRvIGBpbnRlcmNlcHRvcmAuXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGludGVyY2VwdG9yIFRoZSBmdW5jdGlvbiB0byBpbnZva2UuXG4gICAgICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIGB2YWx1ZWAuXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8oWzEsIDIsIDNdKVxuICAgICAgICAgKiAgLnRhcChmdW5jdGlvbihhcnJheSkge1xuICAgICAgICAgKiAgICAvLyBNdXRhdGUgaW5wdXQgYXJyYXkuXG4gICAgICAgICAqICAgIGFycmF5LnBvcCgpO1xuICAgICAgICAgKiAgfSlcbiAgICAgICAgICogIC5yZXZlcnNlKClcbiAgICAgICAgICogIC52YWx1ZSgpO1xuICAgICAgICAgKiAvLyA9PiBbMiwgMV1cbiAgICAgICAgICovZnVuY3Rpb24gdGFwKHZhbHVlLGludGVyY2VwdG9yKXtpbnRlcmNlcHRvcih2YWx1ZSk7cmV0dXJuIHZhbHVlO30vKipcbiAgICAgICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy50YXBgIGV4Y2VwdCB0aGF0IGl0IHJldHVybnMgdGhlIHJlc3VsdCBvZiBgaW50ZXJjZXB0b3JgLlxuICAgICAgICAgKiBUaGUgcHVycG9zZSBvZiB0aGlzIG1ldGhvZCBpcyB0byBcInBhc3MgdGhydVwiIHZhbHVlcyByZXBsYWNpbmcgaW50ZXJtZWRpYXRlXG4gICAgICAgICAqIHJlc3VsdHMgaW4gYSBtZXRob2QgY2hhaW4gc2VxdWVuY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQHNpbmNlIDMuMC4wXG4gICAgICAgICAqIEBjYXRlZ29yeSBTZXFcbiAgICAgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHJvdmlkZSB0byBgaW50ZXJjZXB0b3JgLlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpbnRlcmNlcHRvciBUaGUgZnVuY3Rpb24gdG8gaW52b2tlLlxuICAgICAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzdWx0IG9mIGBpbnRlcmNlcHRvcmAuXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8oJyAgYWJjICAnKVxuICAgICAgICAgKiAgLmNoYWluKClcbiAgICAgICAgICogIC50cmltKClcbiAgICAgICAgICogIC50aHJ1KGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAqICAgIHJldHVybiBbdmFsdWVdO1xuICAgICAgICAgKiAgfSlcbiAgICAgICAgICogIC52YWx1ZSgpO1xuICAgICAgICAgKiAvLyA9PiBbJ2FiYyddXG4gICAgICAgICAqL2Z1bmN0aW9uIHRocnUodmFsdWUsaW50ZXJjZXB0b3Ipe3JldHVybiBpbnRlcmNlcHRvcih2YWx1ZSk7fS8qKlxuICAgICAgICAgKiBUaGlzIG1ldGhvZCBpcyB0aGUgd3JhcHBlciB2ZXJzaW9uIG9mIGBfLmF0YC5cbiAgICAgICAgICpcbiAgICAgICAgICogQG5hbWUgYXRcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQHNpbmNlIDEuMC4wXG4gICAgICAgICAqIEBjYXRlZ29yeSBTZXFcbiAgICAgICAgICogQHBhcmFtIHsuLi4oc3RyaW5nfHN0cmluZ1tdKX0gW3BhdGhzXSBUaGUgcHJvcGVydHkgcGF0aHMgdG8gcGljay5cbiAgICAgICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IGBsb2Rhc2hgIHdyYXBwZXIgaW5zdGFuY2UuXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIHZhciBvYmplY3QgPSB7ICdhJzogW3sgJ2InOiB7ICdjJzogMyB9IH0sIDRdIH07XG4gICAgICAgICAqXG4gICAgICAgICAqIF8ob2JqZWN0KS5hdChbJ2FbMF0uYi5jJywgJ2FbMV0nXSkudmFsdWUoKTtcbiAgICAgICAgICogLy8gPT4gWzMsIDRdXG4gICAgICAgICAqL3ZhciB3cmFwcGVyQXQ9ZmxhdFJlc3QoZnVuY3Rpb24ocGF0aHMpe3ZhciBsZW5ndGg9cGF0aHMubGVuZ3RoLHN0YXJ0PWxlbmd0aD9wYXRoc1swXTowLHZhbHVlPXRoaXMuX193cmFwcGVkX18saW50ZXJjZXB0b3I9ZnVuY3Rpb24gaW50ZXJjZXB0b3Iob2JqZWN0KXtyZXR1cm4gYmFzZUF0KG9iamVjdCxwYXRocyk7fTtpZihsZW5ndGg+MXx8dGhpcy5fX2FjdGlvbnNfXy5sZW5ndGh8fCEodmFsdWUgaW5zdGFuY2VvZiBMYXp5V3JhcHBlcil8fCFpc0luZGV4KHN0YXJ0KSl7cmV0dXJuIHRoaXMudGhydShpbnRlcmNlcHRvcik7fXZhbHVlPXZhbHVlLnNsaWNlKHN0YXJ0LCtzdGFydCsobGVuZ3RoPzE6MCkpO3ZhbHVlLl9fYWN0aW9uc19fLnB1c2goe2Z1bmM6dGhydSxhcmdzOltpbnRlcmNlcHRvcl0sdGhpc0FyZzp1bmRlZmluZWR9KTtyZXR1cm4gbmV3IExvZGFzaFdyYXBwZXIodmFsdWUsdGhpcy5fX2NoYWluX18pLnRocnUoZnVuY3Rpb24oYXJyYXkpe2lmKGxlbmd0aCYmIWFycmF5Lmxlbmd0aCl7YXJyYXkucHVzaCh1bmRlZmluZWQpO31yZXR1cm4gYXJyYXk7fSk7fSk7LyoqXG4gICAgICAgKiBDcmVhdGVzIGEgYGxvZGFzaGAgd3JhcHBlciBpbnN0YW5jZSB3aXRoIGV4cGxpY2l0IG1ldGhvZCBjaGFpbiBzZXF1ZW5jZXMgZW5hYmxlZC5cbiAgICAgICAqXG4gICAgICAgKiBAbmFtZSBjaGFpblxuICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAgICogQGNhdGVnb3J5IFNlcVxuICAgICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IGBsb2Rhc2hgIHdyYXBwZXIgaW5zdGFuY2UuXG4gICAgICAgKiBAZXhhbXBsZVxuICAgICAgICpcbiAgICAgICAqIHZhciB1c2VycyA9IFtcbiAgICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzYgfSxcbiAgICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAnYWdlJzogNDAgfVxuICAgICAgICogXTtcbiAgICAgICAqXG4gICAgICAgKiAvLyBBIHNlcXVlbmNlIHdpdGhvdXQgZXhwbGljaXQgY2hhaW5pbmcuXG4gICAgICAgKiBfKHVzZXJzKS5oZWFkKCk7XG4gICAgICAgKiAvLyA9PiB7ICd1c2VyJzogJ2Jhcm5leScsICdhZ2UnOiAzNiB9XG4gICAgICAgKlxuICAgICAgICogLy8gQSBzZXF1ZW5jZSB3aXRoIGV4cGxpY2l0IGNoYWluaW5nLlxuICAgICAgICogXyh1c2VycylcbiAgICAgICAqICAgLmNoYWluKClcbiAgICAgICAqICAgLmhlYWQoKVxuICAgICAgICogICAucGljaygndXNlcicpXG4gICAgICAgKiAgIC52YWx1ZSgpO1xuICAgICAgICogLy8gPT4geyAndXNlcic6ICdiYXJuZXknIH1cbiAgICAgICAqL2Z1bmN0aW9uIHdyYXBwZXJDaGFpbigpe3JldHVybiBjaGFpbih0aGlzKTt9LyoqXG4gICAgICAgICAqIEV4ZWN1dGVzIHRoZSBjaGFpbiBzZXF1ZW5jZSBhbmQgcmV0dXJucyB0aGUgd3JhcHBlZCByZXN1bHQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBuYW1lIGNvbW1pdFxuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAc2luY2UgMy4yLjBcbiAgICAgICAgICogQGNhdGVnb3J5IFNlcVxuICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgYGxvZGFzaGAgd3JhcHBlciBpbnN0YW5jZS5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogdmFyIGFycmF5ID0gWzEsIDJdO1xuICAgICAgICAgKiB2YXIgd3JhcHBlZCA9IF8oYXJyYXkpLnB1c2goMyk7XG4gICAgICAgICAqXG4gICAgICAgICAqIGNvbnNvbGUubG9nKGFycmF5KTtcbiAgICAgICAgICogLy8gPT4gWzEsIDJdXG4gICAgICAgICAqXG4gICAgICAgICAqIHdyYXBwZWQgPSB3cmFwcGVkLmNvbW1pdCgpO1xuICAgICAgICAgKiBjb25zb2xlLmxvZyhhcnJheSk7XG4gICAgICAgICAqIC8vID0+IFsxLCAyLCAzXVxuICAgICAgICAgKlxuICAgICAgICAgKiB3cmFwcGVkLmxhc3QoKTtcbiAgICAgICAgICogLy8gPT4gM1xuICAgICAgICAgKlxuICAgICAgICAgKiBjb25zb2xlLmxvZyhhcnJheSk7XG4gICAgICAgICAqIC8vID0+IFsxLCAyLCAzXVxuICAgICAgICAgKi9mdW5jdGlvbiB3cmFwcGVyQ29tbWl0KCl7cmV0dXJuIG5ldyBMb2Rhc2hXcmFwcGVyKHRoaXMudmFsdWUoKSx0aGlzLl9fY2hhaW5fXyk7fS8qKlxuICAgICAgICAgKiBHZXRzIHRoZSBuZXh0IHZhbHVlIG9uIGEgd3JhcHBlZCBvYmplY3QgZm9sbG93aW5nIHRoZVxuICAgICAgICAgKiBbaXRlcmF0b3IgcHJvdG9jb2xdKGh0dHBzOi8vbWRuLmlvL2l0ZXJhdGlvbl9wcm90b2NvbHMjaXRlcmF0b3IpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbmFtZSBuZXh0XG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgU2VxXG4gICAgICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5leHQgaXRlcmF0b3IgdmFsdWUuXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIHZhciB3cmFwcGVkID0gXyhbMSwgMl0pO1xuICAgICAgICAgKlxuICAgICAgICAgKiB3cmFwcGVkLm5leHQoKTtcbiAgICAgICAgICogLy8gPT4geyAnZG9uZSc6IGZhbHNlLCAndmFsdWUnOiAxIH1cbiAgICAgICAgICpcbiAgICAgICAgICogd3JhcHBlZC5uZXh0KCk7XG4gICAgICAgICAqIC8vID0+IHsgJ2RvbmUnOiBmYWxzZSwgJ3ZhbHVlJzogMiB9XG4gICAgICAgICAqXG4gICAgICAgICAqIHdyYXBwZWQubmV4dCgpO1xuICAgICAgICAgKiAvLyA9PiB7ICdkb25lJzogdHJ1ZSwgJ3ZhbHVlJzogdW5kZWZpbmVkIH1cbiAgICAgICAgICovZnVuY3Rpb24gd3JhcHBlck5leHQoKXtpZih0aGlzLl9fdmFsdWVzX189PT11bmRlZmluZWQpe3RoaXMuX192YWx1ZXNfXz10b0FycmF5KHRoaXMudmFsdWUoKSk7fXZhciBkb25lPXRoaXMuX19pbmRleF9fPj10aGlzLl9fdmFsdWVzX18ubGVuZ3RoLHZhbHVlPWRvbmU/dW5kZWZpbmVkOnRoaXMuX192YWx1ZXNfX1t0aGlzLl9faW5kZXhfXysrXTtyZXR1cm57ZG9uZTpkb25lLHZhbHVlOnZhbHVlfTt9LyoqXG4gICAgICAgICAqIEVuYWJsZXMgdGhlIHdyYXBwZXIgdG8gYmUgaXRlcmFibGUuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBuYW1lIFN5bWJvbC5pdGVyYXRvclxuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgICAgICogQGNhdGVnb3J5IFNlcVxuICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSB3cmFwcGVyIG9iamVjdC5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogdmFyIHdyYXBwZWQgPSBfKFsxLCAyXSk7XG4gICAgICAgICAqXG4gICAgICAgICAqIHdyYXBwZWRbU3ltYm9sLml0ZXJhdG9yXSgpID09PSB3cmFwcGVkO1xuICAgICAgICAgKiAvLyA9PiB0cnVlXG4gICAgICAgICAqXG4gICAgICAgICAqIEFycmF5LmZyb20od3JhcHBlZCk7XG4gICAgICAgICAqIC8vID0+IFsxLCAyXVxuICAgICAgICAgKi9mdW5jdGlvbiB3cmFwcGVyVG9JdGVyYXRvcigpe3JldHVybiB0aGlzO30vKipcbiAgICAgICAgICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoZSBjaGFpbiBzZXF1ZW5jZSBwbGFudGluZyBgdmFsdWVgIGFzIHRoZSB3cmFwcGVkIHZhbHVlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbmFtZSBwbGFudFxuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAc2luY2UgMy4yLjBcbiAgICAgICAgICogQGNhdGVnb3J5IFNlcVxuICAgICAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwbGFudC5cbiAgICAgICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IGBsb2Rhc2hgIHdyYXBwZXIgaW5zdGFuY2UuXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIGZ1bmN0aW9uIHNxdWFyZShuKSB7XG4gICAgICAgICAqICAgcmV0dXJuIG4gKiBuO1xuICAgICAgICAgKiB9XG4gICAgICAgICAqXG4gICAgICAgICAqIHZhciB3cmFwcGVkID0gXyhbMSwgMl0pLm1hcChzcXVhcmUpO1xuICAgICAgICAgKiB2YXIgb3RoZXIgPSB3cmFwcGVkLnBsYW50KFszLCA0XSk7XG4gICAgICAgICAqXG4gICAgICAgICAqIG90aGVyLnZhbHVlKCk7XG4gICAgICAgICAqIC8vID0+IFs5LCAxNl1cbiAgICAgICAgICpcbiAgICAgICAgICogd3JhcHBlZC52YWx1ZSgpO1xuICAgICAgICAgKiAvLyA9PiBbMSwgNF1cbiAgICAgICAgICovZnVuY3Rpb24gd3JhcHBlclBsYW50KHZhbHVlKXt2YXIgcmVzdWx0LHBhcmVudD10aGlzO3doaWxlKHBhcmVudCBpbnN0YW5jZW9mIGJhc2VMb2Rhc2gpe3ZhciBjbG9uZT13cmFwcGVyQ2xvbmUocGFyZW50KTtjbG9uZS5fX2luZGV4X189MDtjbG9uZS5fX3ZhbHVlc19fPXVuZGVmaW5lZDtpZihyZXN1bHQpe3ByZXZpb3VzLl9fd3JhcHBlZF9fPWNsb25lO31lbHNle3Jlc3VsdD1jbG9uZTt9dmFyIHByZXZpb3VzPWNsb25lO3BhcmVudD1wYXJlbnQuX193cmFwcGVkX187fXByZXZpb3VzLl9fd3JhcHBlZF9fPXZhbHVlO3JldHVybiByZXN1bHQ7fS8qKlxuICAgICAgICAgKiBUaGlzIG1ldGhvZCBpcyB0aGUgd3JhcHBlciB2ZXJzaW9uIG9mIGBfLnJldmVyc2VgLlxuICAgICAgICAgKlxuICAgICAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyB0aGUgd3JhcHBlZCBhcnJheS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG5hbWUgcmV2ZXJzZVxuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgICAgICogQGNhdGVnb3J5IFNlcVxuICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgYGxvZGFzaGAgd3JhcHBlciBpbnN0YW5jZS5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogdmFyIGFycmF5ID0gWzEsIDIsIDNdO1xuICAgICAgICAgKlxuICAgICAgICAgKiBfKGFycmF5KS5yZXZlcnNlKCkudmFsdWUoKVxuICAgICAgICAgKiAvLyA9PiBbMywgMiwgMV1cbiAgICAgICAgICpcbiAgICAgICAgICogY29uc29sZS5sb2coYXJyYXkpO1xuICAgICAgICAgKiAvLyA9PiBbMywgMiwgMV1cbiAgICAgICAgICovZnVuY3Rpb24gd3JhcHBlclJldmVyc2UoKXt2YXIgdmFsdWU9dGhpcy5fX3dyYXBwZWRfXztpZih2YWx1ZSBpbnN0YW5jZW9mIExhenlXcmFwcGVyKXt2YXIgd3JhcHBlZD12YWx1ZTtpZih0aGlzLl9fYWN0aW9uc19fLmxlbmd0aCl7d3JhcHBlZD1uZXcgTGF6eVdyYXBwZXIodGhpcyk7fXdyYXBwZWQ9d3JhcHBlZC5yZXZlcnNlKCk7d3JhcHBlZC5fX2FjdGlvbnNfXy5wdXNoKHtmdW5jOnRocnUsYXJnczpbcmV2ZXJzZV0sdGhpc0FyZzp1bmRlZmluZWR9KTtyZXR1cm4gbmV3IExvZGFzaFdyYXBwZXIod3JhcHBlZCx0aGlzLl9fY2hhaW5fXyk7fXJldHVybiB0aGlzLnRocnUocmV2ZXJzZSk7fS8qKlxuICAgICAgICAgKiBFeGVjdXRlcyB0aGUgY2hhaW4gc2VxdWVuY2UgdG8gcmVzb2x2ZSB0aGUgdW53cmFwcGVkIHZhbHVlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbmFtZSB2YWx1ZVxuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgICAgICogQGFsaWFzIHRvSlNPTiwgdmFsdWVPZlxuICAgICAgICAgKiBAY2F0ZWdvcnkgU2VxXG4gICAgICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXNvbHZlZCB1bndyYXBwZWQgdmFsdWUuXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8oWzEsIDIsIDNdKS52YWx1ZSgpO1xuICAgICAgICAgKiAvLyA9PiBbMSwgMiwgM11cbiAgICAgICAgICovZnVuY3Rpb24gd3JhcHBlclZhbHVlKCl7cmV0dXJuIGJhc2VXcmFwcGVyVmFsdWUodGhpcy5fX3dyYXBwZWRfXyx0aGlzLl9fYWN0aW9uc19fKTt9LyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8vKipcbiAgICAgICAgICogQ3JlYXRlcyBhbiBvYmplY3QgY29tcG9zZWQgb2Yga2V5cyBnZW5lcmF0ZWQgZnJvbSB0aGUgcmVzdWx0cyBvZiBydW5uaW5nXG4gICAgICAgICAqIGVhY2ggZWxlbWVudCBvZiBgY29sbGVjdGlvbmAgdGhydSBgaXRlcmF0ZWVgLiBUaGUgY29ycmVzcG9uZGluZyB2YWx1ZSBvZlxuICAgICAgICAgKiBlYWNoIGtleSBpcyB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoZSBrZXkgd2FzIHJldHVybmVkIGJ5IGBpdGVyYXRlZWAuIFRoZVxuICAgICAgICAgKiBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OiAodmFsdWUpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSAwLjUuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgaXRlcmF0ZWUgdG8gdHJhbnNmb3JtIGtleXMuXG4gICAgICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNvbXBvc2VkIGFnZ3JlZ2F0ZSBvYmplY3QuXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8uY291bnRCeShbNi4xLCA0LjIsIDYuM10sIE1hdGguZmxvb3IpO1xuICAgICAgICAgKiAvLyA9PiB7ICc0JzogMSwgJzYnOiAyIH1cbiAgICAgICAgICpcbiAgICAgICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICAgICAqIF8uY291bnRCeShbJ29uZScsICd0d28nLCAndGhyZWUnXSwgJ2xlbmd0aCcpO1xuICAgICAgICAgKiAvLyA9PiB7ICczJzogMiwgJzUnOiAxIH1cbiAgICAgICAgICovdmFyIGNvdW50Qnk9Y3JlYXRlQWdncmVnYXRvcihmdW5jdGlvbihyZXN1bHQsdmFsdWUsa2V5KXtpZihoYXNPd25Qcm9wZXJ0eS5jYWxsKHJlc3VsdCxrZXkpKXsrK3Jlc3VsdFtrZXldO31lbHNle2Jhc2VBc3NpZ25WYWx1ZShyZXN1bHQsa2V5LDEpO319KTsvKipcbiAgICAgICAqIENoZWNrcyBpZiBgcHJlZGljYXRlYCByZXR1cm5zIHRydXRoeSBmb3IgKiphbGwqKiBlbGVtZW50cyBvZiBgY29sbGVjdGlvbmAuXG4gICAgICAgKiBJdGVyYXRpb24gaXMgc3RvcHBlZCBvbmNlIGBwcmVkaWNhdGVgIHJldHVybnMgZmFsc2V5LiBUaGUgcHJlZGljYXRlIGlzXG4gICAgICAgKiBpbnZva2VkIHdpdGggdGhyZWUgYXJndW1lbnRzOiAodmFsdWUsIGluZGV4fGtleSwgY29sbGVjdGlvbikuXG4gICAgICAgKlxuICAgICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIHJldHVybnMgYHRydWVgIGZvclxuICAgICAgICogW2VtcHR5IGNvbGxlY3Rpb25zXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9FbXB0eV9zZXQpIGJlY2F1c2VcbiAgICAgICAqIFtldmVyeXRoaW5nIGlzIHRydWVdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1ZhY3VvdXNfdHJ1dGgpIG9mXG4gICAgICAgKiBlbGVtZW50cyBvZiBlbXB0eSBjb2xsZWN0aW9ucy5cbiAgICAgICAqXG4gICAgICAgKiBAc3RhdGljXG4gICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICogQHNpbmNlIDAuMS4wXG4gICAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAgICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ubWFwYC5cbiAgICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbGwgZWxlbWVudHMgcGFzcyB0aGUgcHJlZGljYXRlIGNoZWNrLFxuICAgICAgICogIGVsc2UgYGZhbHNlYC5cbiAgICAgICAqIEBleGFtcGxlXG4gICAgICAgKlxuICAgICAgICogXy5ldmVyeShbdHJ1ZSwgMSwgbnVsbCwgJ3llcyddLCBCb29sZWFuKTtcbiAgICAgICAqIC8vID0+IGZhbHNlXG4gICAgICAgKlxuICAgICAgICogdmFyIHVzZXJzID0gW1xuICAgICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScsICdhZ2UnOiAzNiwgJ2FjdGl2ZSc6IGZhbHNlIH0sXG4gICAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgJ2FnZSc6IDQwLCAnYWN0aXZlJzogZmFsc2UgfVxuICAgICAgICogXTtcbiAgICAgICAqXG4gICAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc2AgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAgICogXy5ldmVyeSh1c2VycywgeyAndXNlcic6ICdiYXJuZXknLCAnYWN0aXZlJzogZmFsc2UgfSk7XG4gICAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAgICpcbiAgICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzUHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgICAqIF8uZXZlcnkodXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTtcbiAgICAgICAqIC8vID0+IHRydWVcbiAgICAgICAqXG4gICAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgICAqIF8uZXZlcnkodXNlcnMsICdhY3RpdmUnKTtcbiAgICAgICAqIC8vID0+IGZhbHNlXG4gICAgICAgKi9mdW5jdGlvbiBldmVyeShjb2xsZWN0aW9uLHByZWRpY2F0ZSxndWFyZCl7dmFyIGZ1bmM9aXNBcnJheShjb2xsZWN0aW9uKT9hcnJheUV2ZXJ5OmJhc2VFdmVyeTtpZihndWFyZCYmaXNJdGVyYXRlZUNhbGwoY29sbGVjdGlvbixwcmVkaWNhdGUsZ3VhcmQpKXtwcmVkaWNhdGU9dW5kZWZpbmVkO31yZXR1cm4gZnVuYyhjb2xsZWN0aW9uLGdldEl0ZXJhdGVlKHByZWRpY2F0ZSwzKSk7fS8qKlxuICAgICAgICAgKiBJdGVyYXRlcyBvdmVyIGVsZW1lbnRzIG9mIGBjb2xsZWN0aW9uYCwgcmV0dXJuaW5nIGFuIGFycmF5IG9mIGFsbCBlbGVtZW50c1xuICAgICAgICAgKiBgcHJlZGljYXRlYCByZXR1cm5zIHRydXRoeSBmb3IuIFRoZSBwcmVkaWNhdGUgaXMgaW52b2tlZCB3aXRoIHRocmVlXG4gICAgICAgICAqIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleHxrZXksIGNvbGxlY3Rpb24pLlxuICAgICAgICAgKlxuICAgICAgICAgKiAqKk5vdGU6KiogVW5saWtlIGBfLnJlbW92ZWAsIHRoaXMgbWV0aG9kIHJldHVybnMgYSBuZXcgYXJyYXkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQHNpbmNlIDAuMS4wXG4gICAgICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmaWx0ZXJlZCBhcnJheS5cbiAgICAgICAgICogQHNlZSBfLnJlamVjdFxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiB2YXIgdXNlcnMgPSBbXG4gICAgICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzYsICdhY3RpdmUnOiB0cnVlIH0sXG4gICAgICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAnYWdlJzogNDAsICdhY3RpdmUnOiBmYWxzZSB9XG4gICAgICAgICAqIF07XG4gICAgICAgICAqXG4gICAgICAgICAqIF8uZmlsdGVyKHVzZXJzLCBmdW5jdGlvbihvKSB7IHJldHVybiAhby5hY3RpdmU7IH0pO1xuICAgICAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ2ZyZWQnXVxuICAgICAgICAgKlxuICAgICAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc2AgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAgICAgKiBfLmZpbHRlcih1c2VycywgeyAnYWdlJzogMzYsICdhY3RpdmUnOiB0cnVlIH0pO1xuICAgICAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ2Jhcm5leSddXG4gICAgICAgICAqXG4gICAgICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzUHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgICAgICogXy5maWx0ZXIodXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTtcbiAgICAgICAgICogLy8gPT4gb2JqZWN0cyBmb3IgWydmcmVkJ11cbiAgICAgICAgICpcbiAgICAgICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICAgICAqIF8uZmlsdGVyKHVzZXJzLCAnYWN0aXZlJyk7XG4gICAgICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFsnYmFybmV5J11cbiAgICAgICAgICovZnVuY3Rpb24gZmlsdGVyKGNvbGxlY3Rpb24scHJlZGljYXRlKXt2YXIgZnVuYz1pc0FycmF5KGNvbGxlY3Rpb24pP2FycmF5RmlsdGVyOmJhc2VGaWx0ZXI7cmV0dXJuIGZ1bmMoY29sbGVjdGlvbixnZXRJdGVyYXRlZShwcmVkaWNhdGUsMykpO30vKipcbiAgICAgICAgICogSXRlcmF0ZXMgb3ZlciBlbGVtZW50cyBvZiBgY29sbGVjdGlvbmAsIHJldHVybmluZyB0aGUgZmlyc3QgZWxlbWVudFxuICAgICAgICAgKiBgcHJlZGljYXRlYCByZXR1cm5zIHRydXRoeSBmb3IuIFRoZSBwcmVkaWNhdGUgaXMgaW52b2tlZCB3aXRoIHRocmVlXG4gICAgICAgICAqIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleHxrZXksIGNvbGxlY3Rpb24pLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpbnNwZWN0LlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbZnJvbUluZGV4PTBdIFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAgICAgICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1hdGNoZWQgZWxlbWVudCwgZWxzZSBgdW5kZWZpbmVkYC5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogdmFyIHVzZXJzID0gW1xuICAgICAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgICdhZ2UnOiAzNiwgJ2FjdGl2ZSc6IHRydWUgfSxcbiAgICAgICAgICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICAnYWdlJzogNDAsICdhY3RpdmUnOiBmYWxzZSB9LFxuICAgICAgICAgKiAgIHsgJ3VzZXInOiAncGViYmxlcycsICdhZ2UnOiAxLCAgJ2FjdGl2ZSc6IHRydWUgfVxuICAgICAgICAgKiBdO1xuICAgICAgICAgKlxuICAgICAgICAgKiBfLmZpbmQodXNlcnMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuIG8uYWdlIDwgNDA7IH0pO1xuICAgICAgICAgKiAvLyA9PiBvYmplY3QgZm9yICdiYXJuZXknXG4gICAgICAgICAqXG4gICAgICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICAgICAqIF8uZmluZCh1c2VycywgeyAnYWdlJzogMSwgJ2FjdGl2ZSc6IHRydWUgfSk7XG4gICAgICAgICAqIC8vID0+IG9iamVjdCBmb3IgJ3BlYmJsZXMnXG4gICAgICAgICAqXG4gICAgICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzUHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgICAgICogXy5maW5kKHVzZXJzLCBbJ2FjdGl2ZScsIGZhbHNlXSk7XG4gICAgICAgICAqIC8vID0+IG9iamVjdCBmb3IgJ2ZyZWQnXG4gICAgICAgICAqXG4gICAgICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAgICAgKiBfLmZpbmQodXNlcnMsICdhY3RpdmUnKTtcbiAgICAgICAgICogLy8gPT4gb2JqZWN0IGZvciAnYmFybmV5J1xuICAgICAgICAgKi92YXIgZmluZD1jcmVhdGVGaW5kKGZpbmRJbmRleCk7LyoqXG4gICAgICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZmluZGAgZXhjZXB0IHRoYXQgaXQgaXRlcmF0ZXMgb3ZlciBlbGVtZW50cyBvZlxuICAgICAgICAgKiBgY29sbGVjdGlvbmAgZnJvbSByaWdodCB0byBsZWZ0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSAyLjAuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpbnNwZWN0LlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbZnJvbUluZGV4PWNvbGxlY3Rpb24ubGVuZ3RoLTFdIFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAgICAgICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1hdGNoZWQgZWxlbWVudCwgZWxzZSBgdW5kZWZpbmVkYC5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogXy5maW5kTGFzdChbMSwgMiwgMywgNF0sIGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgICogICByZXR1cm4gbiAlIDIgPT0gMTtcbiAgICAgICAgICogfSk7XG4gICAgICAgICAqIC8vID0+IDNcbiAgICAgICAgICovdmFyIGZpbmRMYXN0PWNyZWF0ZUZpbmQoZmluZExhc3RJbmRleCk7LyoqXG4gICAgICAgICAqIENyZWF0ZXMgYSBmbGF0dGVuZWQgYXJyYXkgb2YgdmFsdWVzIGJ5IHJ1bm5pbmcgZWFjaCBlbGVtZW50IGluIGBjb2xsZWN0aW9uYFxuICAgICAgICAgKiB0aHJ1IGBpdGVyYXRlZWAgYW5kIGZsYXR0ZW5pbmcgdGhlIG1hcHBlZCByZXN1bHRzLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZFxuICAgICAgICAgKiB3aXRoIHRocmVlIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleHxrZXksIGNvbGxlY3Rpb24pLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmbGF0dGVuZWQgYXJyYXkuXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIGZ1bmN0aW9uIGR1cGxpY2F0ZShuKSB7XG4gICAgICAgICAqICAgcmV0dXJuIFtuLCBuXTtcbiAgICAgICAgICogfVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLmZsYXRNYXAoWzEsIDJdLCBkdXBsaWNhdGUpO1xuICAgICAgICAgKiAvLyA9PiBbMSwgMSwgMiwgMl1cbiAgICAgICAgICovZnVuY3Rpb24gZmxhdE1hcChjb2xsZWN0aW9uLGl0ZXJhdGVlKXtyZXR1cm4gYmFzZUZsYXR0ZW4obWFwKGNvbGxlY3Rpb24saXRlcmF0ZWUpLDEpO30vKipcbiAgICAgICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5mbGF0TWFwYCBleGNlcHQgdGhhdCBpdCByZWN1cnNpdmVseSBmbGF0dGVucyB0aGVcbiAgICAgICAgICogbWFwcGVkIHJlc3VsdHMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQHNpbmNlIDQuNy4wXG4gICAgICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZsYXR0ZW5lZCBhcnJheS5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogZnVuY3Rpb24gZHVwbGljYXRlKG4pIHtcbiAgICAgICAgICogICByZXR1cm4gW1tbbiwgbl1dXTtcbiAgICAgICAgICogfVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLmZsYXRNYXBEZWVwKFsxLCAyXSwgZHVwbGljYXRlKTtcbiAgICAgICAgICogLy8gPT4gWzEsIDEsIDIsIDJdXG4gICAgICAgICAqL2Z1bmN0aW9uIGZsYXRNYXBEZWVwKGNvbGxlY3Rpb24saXRlcmF0ZWUpe3JldHVybiBiYXNlRmxhdHRlbihtYXAoY29sbGVjdGlvbixpdGVyYXRlZSksSU5GSU5JVFkpO30vKipcbiAgICAgICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5mbGF0TWFwYCBleGNlcHQgdGhhdCBpdCByZWN1cnNpdmVseSBmbGF0dGVucyB0aGVcbiAgICAgICAgICogbWFwcGVkIHJlc3VsdHMgdXAgdG8gYGRlcHRoYCB0aW1lcy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAc2luY2UgNC43LjBcbiAgICAgICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IFtkZXB0aD0xXSBUaGUgbWF4aW11bSByZWN1cnNpb24gZGVwdGguXG4gICAgICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZsYXR0ZW5lZCBhcnJheS5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogZnVuY3Rpb24gZHVwbGljYXRlKG4pIHtcbiAgICAgICAgICogICByZXR1cm4gW1tbbiwgbl1dXTtcbiAgICAgICAgICogfVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLmZsYXRNYXBEZXB0aChbMSwgMl0sIGR1cGxpY2F0ZSwgMik7XG4gICAgICAgICAqIC8vID0+IFtbMSwgMV0sIFsyLCAyXV1cbiAgICAgICAgICovZnVuY3Rpb24gZmxhdE1hcERlcHRoKGNvbGxlY3Rpb24saXRlcmF0ZWUsZGVwdGgpe2RlcHRoPWRlcHRoPT09dW5kZWZpbmVkPzE6dG9JbnRlZ2VyKGRlcHRoKTtyZXR1cm4gYmFzZUZsYXR0ZW4obWFwKGNvbGxlY3Rpb24saXRlcmF0ZWUpLGRlcHRoKTt9LyoqXG4gICAgICAgICAqIEl0ZXJhdGVzIG92ZXIgZWxlbWVudHMgb2YgYGNvbGxlY3Rpb25gIGFuZCBpbnZva2VzIGBpdGVyYXRlZWAgZm9yIGVhY2ggZWxlbWVudC5cbiAgICAgICAgICogVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6ICh2YWx1ZSwgaW5kZXh8a2V5LCBjb2xsZWN0aW9uKS5cbiAgICAgICAgICogSXRlcmF0ZWUgZnVuY3Rpb25zIG1heSBleGl0IGl0ZXJhdGlvbiBlYXJseSBieSBleHBsaWNpdGx5IHJldHVybmluZyBgZmFsc2VgLlxuICAgICAgICAgKlxuICAgICAgICAgKiAqKk5vdGU6KiogQXMgd2l0aCBvdGhlciBcIkNvbGxlY3Rpb25zXCIgbWV0aG9kcywgb2JqZWN0cyB3aXRoIGEgXCJsZW5ndGhcIlxuICAgICAgICAgKiBwcm9wZXJ0eSBhcmUgaXRlcmF0ZWQgbGlrZSBhcnJheXMuIFRvIGF2b2lkIHRoaXMgYmVoYXZpb3IgdXNlIGBfLmZvckluYFxuICAgICAgICAgKiBvciBgXy5mb3JPd25gIGZvciBvYmplY3QgaXRlcmF0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAgICAgKiBAYWxpYXMgZWFjaFxuICAgICAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAgICAgKiBAcmV0dXJucyB7QXJyYXl8T2JqZWN0fSBSZXR1cm5zIGBjb2xsZWN0aW9uYC5cbiAgICAgICAgICogQHNlZSBfLmZvckVhY2hSaWdodFxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLmZvckVhY2goWzEsIDJdLCBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgKiAgIGNvbnNvbGUubG9nKHZhbHVlKTtcbiAgICAgICAgICogfSk7XG4gICAgICAgICAqIC8vID0+IExvZ3MgYDFgIHRoZW4gYDJgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBfLmZvckVhY2goeyAnYSc6IDEsICdiJzogMiB9LCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gICAgICAgICAqICAgY29uc29sZS5sb2coa2V5KTtcbiAgICAgICAgICogfSk7XG4gICAgICAgICAqIC8vID0+IExvZ3MgJ2EnIHRoZW4gJ2InIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpLlxuICAgICAgICAgKi9mdW5jdGlvbiBmb3JFYWNoKGNvbGxlY3Rpb24saXRlcmF0ZWUpe3ZhciBmdW5jPWlzQXJyYXkoY29sbGVjdGlvbik/YXJyYXlFYWNoOmJhc2VFYWNoO3JldHVybiBmdW5jKGNvbGxlY3Rpb24sZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsMykpO30vKipcbiAgICAgICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5mb3JFYWNoYCBleGNlcHQgdGhhdCBpdCBpdGVyYXRlcyBvdmVyIGVsZW1lbnRzIG9mXG4gICAgICAgICAqIGBjb2xsZWN0aW9uYCBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQHNpbmNlIDIuMC4wXG4gICAgICAgICAqIEBhbGlhcyBlYWNoUmlnaHRcbiAgICAgICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgICAgICogQHJldHVybnMge0FycmF5fE9iamVjdH0gUmV0dXJucyBgY29sbGVjdGlvbmAuXG4gICAgICAgICAqIEBzZWUgXy5mb3JFYWNoXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8uZm9yRWFjaFJpZ2h0KFsxLCAyXSwgZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICogICBjb25zb2xlLmxvZyh2YWx1ZSk7XG4gICAgICAgICAqIH0pO1xuICAgICAgICAgKiAvLyA9PiBMb2dzIGAyYCB0aGVuIGAxYC5cbiAgICAgICAgICovZnVuY3Rpb24gZm9yRWFjaFJpZ2h0KGNvbGxlY3Rpb24saXRlcmF0ZWUpe3ZhciBmdW5jPWlzQXJyYXkoY29sbGVjdGlvbik/YXJyYXlFYWNoUmlnaHQ6YmFzZUVhY2hSaWdodDtyZXR1cm4gZnVuYyhjb2xsZWN0aW9uLGdldEl0ZXJhdGVlKGl0ZXJhdGVlLDMpKTt9LyoqXG4gICAgICAgICAqIENyZWF0ZXMgYW4gb2JqZWN0IGNvbXBvc2VkIG9mIGtleXMgZ2VuZXJhdGVkIGZyb20gdGhlIHJlc3VsdHMgb2YgcnVubmluZ1xuICAgICAgICAgKiBlYWNoIGVsZW1lbnQgb2YgYGNvbGxlY3Rpb25gIHRocnUgYGl0ZXJhdGVlYC4gVGhlIG9yZGVyIG9mIGdyb3VwZWQgdmFsdWVzXG4gICAgICAgICAqIGlzIGRldGVybWluZWQgYnkgdGhlIG9yZGVyIHRoZXkgb2NjdXIgaW4gYGNvbGxlY3Rpb25gLiBUaGUgY29ycmVzcG9uZGluZ1xuICAgICAgICAgKiB2YWx1ZSBvZiBlYWNoIGtleSBpcyBhbiBhcnJheSBvZiBlbGVtZW50cyByZXNwb25zaWJsZSBmb3IgZ2VuZXJhdGluZyB0aGVcbiAgICAgICAgICoga2V5LiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDogKHZhbHVlKS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGl0ZXJhdGVlIHRvIHRyYW5zZm9ybSBrZXlzLlxuICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjb21wb3NlZCBhZ2dyZWdhdGUgb2JqZWN0LlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLmdyb3VwQnkoWzYuMSwgNC4yLCA2LjNdLCBNYXRoLmZsb29yKTtcbiAgICAgICAgICogLy8gPT4geyAnNCc6IFs0LjJdLCAnNic6IFs2LjEsIDYuM10gfVxuICAgICAgICAgKlxuICAgICAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgICAgICogXy5ncm91cEJ5KFsnb25lJywgJ3R3bycsICd0aHJlZSddLCAnbGVuZ3RoJyk7XG4gICAgICAgICAqIC8vID0+IHsgJzMnOiBbJ29uZScsICd0d28nXSwgJzUnOiBbJ3RocmVlJ10gfVxuICAgICAgICAgKi92YXIgZ3JvdXBCeT1jcmVhdGVBZ2dyZWdhdG9yKGZ1bmN0aW9uKHJlc3VsdCx2YWx1ZSxrZXkpe2lmKGhhc093blByb3BlcnR5LmNhbGwocmVzdWx0LGtleSkpe3Jlc3VsdFtrZXldLnB1c2godmFsdWUpO31lbHNle2Jhc2VBc3NpZ25WYWx1ZShyZXN1bHQsa2V5LFt2YWx1ZV0pO319KTsvKipcbiAgICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGluIGBjb2xsZWN0aW9uYC4gSWYgYGNvbGxlY3Rpb25gIGlzIGEgc3RyaW5nLCBpdCdzXG4gICAgICAgKiBjaGVja2VkIGZvciBhIHN1YnN0cmluZyBvZiBgdmFsdWVgLCBvdGhlcndpc2VcbiAgICAgICAqIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gICAgICAgKiBpcyB1c2VkIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy4gSWYgYGZyb21JbmRleGAgaXMgbmVnYXRpdmUsIGl0J3MgdXNlZCBhc1xuICAgICAgICogdGhlIG9mZnNldCBmcm9tIHRoZSBlbmQgb2YgYGNvbGxlY3Rpb25gLlxuICAgICAgICpcbiAgICAgICAqIEBzdGF0aWNcbiAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdHxzdHJpbmd9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaW5zcGVjdC5cbiAgICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gICAgICAgKiBAcGFyYW0ge251bWJlcn0gW2Zyb21JbmRleD0wXSBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gICAgICAgKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5yZWR1Y2VgLlxuICAgICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgZm91bmQsIGVsc2UgYGZhbHNlYC5cbiAgICAgICAqIEBleGFtcGxlXG4gICAgICAgKlxuICAgICAgICogXy5pbmNsdWRlcyhbMSwgMiwgM10sIDEpO1xuICAgICAgICogLy8gPT4gdHJ1ZVxuICAgICAgICpcbiAgICAgICAqIF8uaW5jbHVkZXMoWzEsIDIsIDNdLCAxLCAyKTtcbiAgICAgICAqIC8vID0+IGZhbHNlXG4gICAgICAgKlxuICAgICAgICogXy5pbmNsdWRlcyh7ICdhJzogMSwgJ2InOiAyIH0sIDEpO1xuICAgICAgICogLy8gPT4gdHJ1ZVxuICAgICAgICpcbiAgICAgICAqIF8uaW5jbHVkZXMoJ2FiY2QnLCAnYmMnKTtcbiAgICAgICAqIC8vID0+IHRydWVcbiAgICAgICAqL2Z1bmN0aW9uIGluY2x1ZGVzKGNvbGxlY3Rpb24sdmFsdWUsZnJvbUluZGV4LGd1YXJkKXtjb2xsZWN0aW9uPWlzQXJyYXlMaWtlKGNvbGxlY3Rpb24pP2NvbGxlY3Rpb246dmFsdWVzKGNvbGxlY3Rpb24pO2Zyb21JbmRleD1mcm9tSW5kZXgmJiFndWFyZD90b0ludGVnZXIoZnJvbUluZGV4KTowO3ZhciBsZW5ndGg9Y29sbGVjdGlvbi5sZW5ndGg7aWYoZnJvbUluZGV4PDApe2Zyb21JbmRleD1uYXRpdmVNYXgobGVuZ3RoK2Zyb21JbmRleCwwKTt9cmV0dXJuIGlzU3RyaW5nKGNvbGxlY3Rpb24pP2Zyb21JbmRleDw9bGVuZ3RoJiZjb2xsZWN0aW9uLmluZGV4T2YodmFsdWUsZnJvbUluZGV4KT4tMTohIWxlbmd0aCYmYmFzZUluZGV4T2YoY29sbGVjdGlvbix2YWx1ZSxmcm9tSW5kZXgpPi0xO30vKipcbiAgICAgICAgICogSW52b2tlcyB0aGUgbWV0aG9kIGF0IGBwYXRoYCBvZiBlYWNoIGVsZW1lbnQgaW4gYGNvbGxlY3Rpb25gLCByZXR1cm5pbmdcbiAgICAgICAgICogYW4gYXJyYXkgb2YgdGhlIHJlc3VsdHMgb2YgZWFjaCBpbnZva2VkIG1ldGhvZC4gQW55IGFkZGl0aW9uYWwgYXJndW1lbnRzXG4gICAgICAgICAqIGFyZSBwcm92aWRlZCB0byBlYWNoIGludm9rZWQgbWV0aG9kLiBJZiBgcGF0aGAgaXMgYSBmdW5jdGlvbiwgaXQncyBpbnZva2VkXG4gICAgICAgICAqIGZvciwgYW5kIGB0aGlzYCBib3VuZCB0bywgZWFjaCBlbGVtZW50IGluIGBjb2xsZWN0aW9uYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fEZ1bmN0aW9ufHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgbWV0aG9kIHRvIGludm9rZSBvclxuICAgICAgICAgKiAgdGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgICAgICogQHBhcmFtIHsuLi4qfSBbYXJnc10gVGhlIGFyZ3VtZW50cyB0byBpbnZva2UgZWFjaCBtZXRob2Qgd2l0aC5cbiAgICAgICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiByZXN1bHRzLlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLmludm9rZU1hcChbWzUsIDEsIDddLCBbMywgMiwgMV1dLCAnc29ydCcpO1xuICAgICAgICAgKiAvLyA9PiBbWzEsIDUsIDddLCBbMSwgMiwgM11dXG4gICAgICAgICAqXG4gICAgICAgICAqIF8uaW52b2tlTWFwKFsxMjMsIDQ1Nl0sIFN0cmluZy5wcm90b3R5cGUuc3BsaXQsICcnKTtcbiAgICAgICAgICogLy8gPT4gW1snMScsICcyJywgJzMnXSwgWyc0JywgJzUnLCAnNiddXVxuICAgICAgICAgKi92YXIgaW52b2tlTWFwPWJhc2VSZXN0KGZ1bmN0aW9uKGNvbGxlY3Rpb24scGF0aCxhcmdzKXt2YXIgaW5kZXg9LTEsaXNGdW5jPXR5cGVvZiBwYXRoPT09J2Z1bmN0aW9uJyxyZXN1bHQ9aXNBcnJheUxpa2UoY29sbGVjdGlvbik/QXJyYXkoY29sbGVjdGlvbi5sZW5ndGgpOltdO2Jhc2VFYWNoKGNvbGxlY3Rpb24sZnVuY3Rpb24odmFsdWUpe3Jlc3VsdFsrK2luZGV4XT1pc0Z1bmM/YXBwbHkocGF0aCx2YWx1ZSxhcmdzKTpiYXNlSW52b2tlKHZhbHVlLHBhdGgsYXJncyk7fSk7cmV0dXJuIHJlc3VsdDt9KTsvKipcbiAgICAgICAqIENyZWF0ZXMgYW4gb2JqZWN0IGNvbXBvc2VkIG9mIGtleXMgZ2VuZXJhdGVkIGZyb20gdGhlIHJlc3VsdHMgb2YgcnVubmluZ1xuICAgICAgICogZWFjaCBlbGVtZW50IG9mIGBjb2xsZWN0aW9uYCB0aHJ1IGBpdGVyYXRlZWAuIFRoZSBjb3JyZXNwb25kaW5nIHZhbHVlIG9mXG4gICAgICAgKiBlYWNoIGtleSBpcyB0aGUgbGFzdCBlbGVtZW50IHJlc3BvbnNpYmxlIGZvciBnZW5lcmF0aW5nIHRoZSBrZXkuIFRoZVxuICAgICAgICogaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDogKHZhbHVlKS5cbiAgICAgICAqXG4gICAgICAgKiBAc3RhdGljXG4gICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICogQHNpbmNlIDQuMC4wXG4gICAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBpdGVyYXRlZSB0byB0cmFuc2Zvcm0ga2V5cy5cbiAgICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNvbXBvc2VkIGFnZ3JlZ2F0ZSBvYmplY3QuXG4gICAgICAgKiBAZXhhbXBsZVxuICAgICAgICpcbiAgICAgICAqIHZhciBhcnJheSA9IFtcbiAgICAgICAqICAgeyAnZGlyJzogJ2xlZnQnLCAnY29kZSc6IDk3IH0sXG4gICAgICAgKiAgIHsgJ2Rpcic6ICdyaWdodCcsICdjb2RlJzogMTAwIH1cbiAgICAgICAqIF07XG4gICAgICAgKlxuICAgICAgICogXy5rZXlCeShhcnJheSwgZnVuY3Rpb24obykge1xuICAgICAgICogICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShvLmNvZGUpO1xuICAgICAgICogfSk7XG4gICAgICAgKiAvLyA9PiB7ICdhJzogeyAnZGlyJzogJ2xlZnQnLCAnY29kZSc6IDk3IH0sICdkJzogeyAnZGlyJzogJ3JpZ2h0JywgJ2NvZGUnOiAxMDAgfSB9XG4gICAgICAgKlxuICAgICAgICogXy5rZXlCeShhcnJheSwgJ2RpcicpO1xuICAgICAgICogLy8gPT4geyAnbGVmdCc6IHsgJ2Rpcic6ICdsZWZ0JywgJ2NvZGUnOiA5NyB9LCAncmlnaHQnOiB7ICdkaXInOiAncmlnaHQnLCAnY29kZSc6IDEwMCB9IH1cbiAgICAgICAqL3ZhciBrZXlCeT1jcmVhdGVBZ2dyZWdhdG9yKGZ1bmN0aW9uKHJlc3VsdCx2YWx1ZSxrZXkpe2Jhc2VBc3NpZ25WYWx1ZShyZXN1bHQsa2V5LHZhbHVlKTt9KTsvKipcbiAgICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdmFsdWVzIGJ5IHJ1bm5pbmcgZWFjaCBlbGVtZW50IGluIGBjb2xsZWN0aW9uYCB0aHJ1XG4gICAgICAgKiBgaXRlcmF0ZWVgLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIHRocmVlIGFyZ3VtZW50czpcbiAgICAgICAqICh2YWx1ZSwgaW5kZXh8a2V5LCBjb2xsZWN0aW9uKS5cbiAgICAgICAqXG4gICAgICAgKiBNYW55IGxvZGFzaCBtZXRob2RzIGFyZSBndWFyZGVkIHRvIHdvcmsgYXMgaXRlcmF0ZWVzIGZvciBtZXRob2RzIGxpa2VcbiAgICAgICAqIGBfLmV2ZXJ5YCwgYF8uZmlsdGVyYCwgYF8ubWFwYCwgYF8ubWFwVmFsdWVzYCwgYF8ucmVqZWN0YCwgYW5kIGBfLnNvbWVgLlxuICAgICAgICpcbiAgICAgICAqIFRoZSBndWFyZGVkIG1ldGhvZHMgYXJlOlxuICAgICAgICogYGFyeWAsIGBjaHVua2AsIGBjdXJyeWAsIGBjdXJyeVJpZ2h0YCwgYGRyb3BgLCBgZHJvcFJpZ2h0YCwgYGV2ZXJ5YCxcbiAgICAgICAqIGBmaWxsYCwgYGludmVydGAsIGBwYXJzZUludGAsIGByYW5kb21gLCBgcmFuZ2VgLCBgcmFuZ2VSaWdodGAsIGByZXBlYXRgLFxuICAgICAgICogYHNhbXBsZVNpemVgLCBgc2xpY2VgLCBgc29tZWAsIGBzb3J0QnlgLCBgc3BsaXRgLCBgdGFrZWAsIGB0YWtlUmlnaHRgLFxuICAgICAgICogYHRlbXBsYXRlYCwgYHRyaW1gLCBgdHJpbUVuZGAsIGB0cmltU3RhcnRgLCBhbmQgYHdvcmRzYFxuICAgICAgICpcbiAgICAgICAqIEBzdGF0aWNcbiAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IG1hcHBlZCBhcnJheS5cbiAgICAgICAqIEBleGFtcGxlXG4gICAgICAgKlxuICAgICAgICogZnVuY3Rpb24gc3F1YXJlKG4pIHtcbiAgICAgICAqICAgcmV0dXJuIG4gKiBuO1xuICAgICAgICogfVxuICAgICAgICpcbiAgICAgICAqIF8ubWFwKFs0LCA4XSwgc3F1YXJlKTtcbiAgICAgICAqIC8vID0+IFsxNiwgNjRdXG4gICAgICAgKlxuICAgICAgICogXy5tYXAoeyAnYSc6IDQsICdiJzogOCB9LCBzcXVhcmUpO1xuICAgICAgICogLy8gPT4gWzE2LCA2NF0gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAgICAgICAqXG4gICAgICAgKiB2YXIgdXNlcnMgPSBbXG4gICAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JyB9LFxuICAgICAgICogICB7ICd1c2VyJzogJ2ZyZWQnIH1cbiAgICAgICAqIF07XG4gICAgICAgKlxuICAgICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICAgKiBfLm1hcCh1c2VycywgJ3VzZXInKTtcbiAgICAgICAqIC8vID0+IFsnYmFybmV5JywgJ2ZyZWQnXVxuICAgICAgICovZnVuY3Rpb24gbWFwKGNvbGxlY3Rpb24saXRlcmF0ZWUpe3ZhciBmdW5jPWlzQXJyYXkoY29sbGVjdGlvbik/YXJyYXlNYXA6YmFzZU1hcDtyZXR1cm4gZnVuYyhjb2xsZWN0aW9uLGdldEl0ZXJhdGVlKGl0ZXJhdGVlLDMpKTt9LyoqXG4gICAgICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uc29ydEJ5YCBleGNlcHQgdGhhdCBpdCBhbGxvd3Mgc3BlY2lmeWluZyB0aGUgc29ydFxuICAgICAgICAgKiBvcmRlcnMgb2YgdGhlIGl0ZXJhdGVlcyB0byBzb3J0IGJ5LiBJZiBgb3JkZXJzYCBpcyB1bnNwZWNpZmllZCwgYWxsIHZhbHVlc1xuICAgICAgICAgKiBhcmUgc29ydGVkIGluIGFzY2VuZGluZyBvcmRlci4gT3RoZXJ3aXNlLCBzcGVjaWZ5IGFuIG9yZGVyIG9mIFwiZGVzY1wiIGZvclxuICAgICAgICAgKiBkZXNjZW5kaW5nIG9yIFwiYXNjXCIgZm9yIGFzY2VuZGluZyBzb3J0IG9yZGVyIG9mIGNvcnJlc3BvbmRpbmcgdmFsdWVzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXlbXXxGdW5jdGlvbltdfE9iamVjdFtdfHN0cmluZ1tdfSBbaXRlcmF0ZWVzPVtfLmlkZW50aXR5XV1cbiAgICAgICAgICogIFRoZSBpdGVyYXRlZXMgdG8gc29ydCBieS5cbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmdbXX0gW29yZGVyc10gVGhlIHNvcnQgb3JkZXJzIG9mIGBpdGVyYXRlZXNgLlxuICAgICAgICAgKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5yZWR1Y2VgLlxuICAgICAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBzb3J0ZWQgYXJyYXkuXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIHZhciB1c2VycyA9IFtcbiAgICAgICAgICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICdhZ2UnOiA0OCB9LFxuICAgICAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgJ2FnZSc6IDM0IH0sXG4gICAgICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAnYWdlJzogNDAgfSxcbiAgICAgICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScsICdhZ2UnOiAzNiB9XG4gICAgICAgICAqIF07XG4gICAgICAgICAqXG4gICAgICAgICAqIC8vIFNvcnQgYnkgYHVzZXJgIGluIGFzY2VuZGluZyBvcmRlciBhbmQgYnkgYGFnZWAgaW4gZGVzY2VuZGluZyBvcmRlci5cbiAgICAgICAgICogXy5vcmRlckJ5KHVzZXJzLCBbJ3VzZXInLCAnYWdlJ10sIFsnYXNjJywgJ2Rlc2MnXSk7XG4gICAgICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFtbJ2Jhcm5leScsIDM2XSwgWydiYXJuZXknLCAzNF0sIFsnZnJlZCcsIDQ4XSwgWydmcmVkJywgNDBdXVxuICAgICAgICAgKi9mdW5jdGlvbiBvcmRlckJ5KGNvbGxlY3Rpb24saXRlcmF0ZWVzLG9yZGVycyxndWFyZCl7aWYoY29sbGVjdGlvbj09bnVsbCl7cmV0dXJuW107fWlmKCFpc0FycmF5KGl0ZXJhdGVlcykpe2l0ZXJhdGVlcz1pdGVyYXRlZXM9PW51bGw/W106W2l0ZXJhdGVlc107fW9yZGVycz1ndWFyZD91bmRlZmluZWQ6b3JkZXJzO2lmKCFpc0FycmF5KG9yZGVycykpe29yZGVycz1vcmRlcnM9PW51bGw/W106W29yZGVyc107fXJldHVybiBiYXNlT3JkZXJCeShjb2xsZWN0aW9uLGl0ZXJhdGVlcyxvcmRlcnMpO30vKipcbiAgICAgICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiBlbGVtZW50cyBzcGxpdCBpbnRvIHR3byBncm91cHMsIHRoZSBmaXJzdCBvZiB3aGljaFxuICAgICAgICAgKiBjb250YWlucyBlbGVtZW50cyBgcHJlZGljYXRlYCByZXR1cm5zIHRydXRoeSBmb3IsIHRoZSBzZWNvbmQgb2Ygd2hpY2hcbiAgICAgICAgICogY29udGFpbnMgZWxlbWVudHMgYHByZWRpY2F0ZWAgcmV0dXJucyBmYWxzZXkgZm9yLiBUaGUgcHJlZGljYXRlIGlzXG4gICAgICAgICAqIGludm9rZWQgd2l0aCBvbmUgYXJndW1lbnQ6ICh2YWx1ZSkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQHNpbmNlIDMuMC4wXG4gICAgICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIGdyb3VwZWQgZWxlbWVudHMuXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIHZhciB1c2VycyA9IFtcbiAgICAgICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScsICAnYWdlJzogMzYsICdhY3RpdmUnOiBmYWxzZSB9LFxuICAgICAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgICdhZ2UnOiA0MCwgJ2FjdGl2ZSc6IHRydWUgfSxcbiAgICAgICAgICogICB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWdlJzogMSwgICdhY3RpdmUnOiBmYWxzZSB9XG4gICAgICAgICAqIF07XG4gICAgICAgICAqXG4gICAgICAgICAqIF8ucGFydGl0aW9uKHVzZXJzLCBmdW5jdGlvbihvKSB7IHJldHVybiBvLmFjdGl2ZTsgfSk7XG4gICAgICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFtbJ2ZyZWQnXSwgWydiYXJuZXknLCAncGViYmxlcyddXVxuICAgICAgICAgKlxuICAgICAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc2AgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAgICAgKiBfLnBhcnRpdGlvbih1c2VycywgeyAnYWdlJzogMSwgJ2FjdGl2ZSc6IGZhbHNlIH0pO1xuICAgICAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbWydwZWJibGVzJ10sIFsnYmFybmV5JywgJ2ZyZWQnXV1cbiAgICAgICAgICpcbiAgICAgICAgICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAgICAgKiBfLnBhcnRpdGlvbih1c2VycywgWydhY3RpdmUnLCBmYWxzZV0pO1xuICAgICAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbWydiYXJuZXknLCAncGViYmxlcyddLCBbJ2ZyZWQnXV1cbiAgICAgICAgICpcbiAgICAgICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICAgICAqIF8ucGFydGl0aW9uKHVzZXJzLCAnYWN0aXZlJyk7XG4gICAgICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFtbJ2ZyZWQnXSwgWydiYXJuZXknLCAncGViYmxlcyddXVxuICAgICAgICAgKi92YXIgcGFydGl0aW9uPWNyZWF0ZUFnZ3JlZ2F0b3IoZnVuY3Rpb24ocmVzdWx0LHZhbHVlLGtleSl7cmVzdWx0W2tleT8wOjFdLnB1c2godmFsdWUpO30sZnVuY3Rpb24oKXtyZXR1cm5bW10sW11dO30pOy8qKlxuICAgICAgICogUmVkdWNlcyBgY29sbGVjdGlvbmAgdG8gYSB2YWx1ZSB3aGljaCBpcyB0aGUgYWNjdW11bGF0ZWQgcmVzdWx0IG9mIHJ1bm5pbmdcbiAgICAgICAqIGVhY2ggZWxlbWVudCBpbiBgY29sbGVjdGlvbmAgdGhydSBgaXRlcmF0ZWVgLCB3aGVyZSBlYWNoIHN1Y2Nlc3NpdmVcbiAgICAgICAqIGludm9jYXRpb24gaXMgc3VwcGxpZWQgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgcHJldmlvdXMuIElmIGBhY2N1bXVsYXRvcmBcbiAgICAgICAqIGlzIG5vdCBnaXZlbiwgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYGNvbGxlY3Rpb25gIGlzIHVzZWQgYXMgdGhlIGluaXRpYWxcbiAgICAgICAqIHZhbHVlLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIGZvdXIgYXJndW1lbnRzOlxuICAgICAgICogKGFjY3VtdWxhdG9yLCB2YWx1ZSwgaW5kZXh8a2V5LCBjb2xsZWN0aW9uKS5cbiAgICAgICAqXG4gICAgICAgKiBNYW55IGxvZGFzaCBtZXRob2RzIGFyZSBndWFyZGVkIHRvIHdvcmsgYXMgaXRlcmF0ZWVzIGZvciBtZXRob2RzIGxpa2VcbiAgICAgICAqIGBfLnJlZHVjZWAsIGBfLnJlZHVjZVJpZ2h0YCwgYW5kIGBfLnRyYW5zZm9ybWAuXG4gICAgICAgKlxuICAgICAgICogVGhlIGd1YXJkZWQgbWV0aG9kcyBhcmU6XG4gICAgICAgKiBgYXNzaWduYCwgYGRlZmF1bHRzYCwgYGRlZmF1bHRzRGVlcGAsIGBpbmNsdWRlc2AsIGBtZXJnZWAsIGBvcmRlckJ5YCxcbiAgICAgICAqIGFuZCBgc29ydEJ5YFxuICAgICAgICpcbiAgICAgICAqIEBzdGF0aWNcbiAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgICAqIEBwYXJhbSB7Kn0gW2FjY3VtdWxhdG9yXSBUaGUgaW5pdGlhbCB2YWx1ZS5cbiAgICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBhY2N1bXVsYXRlZCB2YWx1ZS5cbiAgICAgICAqIEBzZWUgXy5yZWR1Y2VSaWdodFxuICAgICAgICogQGV4YW1wbGVcbiAgICAgICAqXG4gICAgICAgKiBfLnJlZHVjZShbMSwgMl0sIGZ1bmN0aW9uKHN1bSwgbikge1xuICAgICAgICogICByZXR1cm4gc3VtICsgbjtcbiAgICAgICAqIH0sIDApO1xuICAgICAgICogLy8gPT4gM1xuICAgICAgICpcbiAgICAgICAqIF8ucmVkdWNlKHsgJ2EnOiAxLCAnYic6IDIsICdjJzogMSB9LCBmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHtcbiAgICAgICAqICAgKHJlc3VsdFt2YWx1ZV0gfHwgKHJlc3VsdFt2YWx1ZV0gPSBbXSkpLnB1c2goa2V5KTtcbiAgICAgICAqICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAqIH0sIHt9KTtcbiAgICAgICAqIC8vID0+IHsgJzEnOiBbJ2EnLCAnYyddLCAnMic6IFsnYiddIH0gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAgICAgICAqL2Z1bmN0aW9uIHJlZHVjZShjb2xsZWN0aW9uLGl0ZXJhdGVlLGFjY3VtdWxhdG9yKXt2YXIgZnVuYz1pc0FycmF5KGNvbGxlY3Rpb24pP2FycmF5UmVkdWNlOmJhc2VSZWR1Y2UsaW5pdEFjY3VtPWFyZ3VtZW50cy5sZW5ndGg8MztyZXR1cm4gZnVuYyhjb2xsZWN0aW9uLGdldEl0ZXJhdGVlKGl0ZXJhdGVlLDQpLGFjY3VtdWxhdG9yLGluaXRBY2N1bSxiYXNlRWFjaCk7fS8qKlxuICAgICAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnJlZHVjZWAgZXhjZXB0IHRoYXQgaXQgaXRlcmF0ZXMgb3ZlciBlbGVtZW50cyBvZlxuICAgICAgICAgKiBgY29sbGVjdGlvbmAgZnJvbSByaWdodCB0byBsZWZ0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAgICAgKiBAcGFyYW0geyp9IFthY2N1bXVsYXRvcl0gVGhlIGluaXRpYWwgdmFsdWUuXG4gICAgICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBhY2N1bXVsYXRlZCB2YWx1ZS5cbiAgICAgICAgICogQHNlZSBfLnJlZHVjZVxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiB2YXIgYXJyYXkgPSBbWzAsIDFdLCBbMiwgM10sIFs0LCA1XV07XG4gICAgICAgICAqXG4gICAgICAgICAqIF8ucmVkdWNlUmlnaHQoYXJyYXksIGZ1bmN0aW9uKGZsYXR0ZW5lZCwgb3RoZXIpIHtcbiAgICAgICAgICogICByZXR1cm4gZmxhdHRlbmVkLmNvbmNhdChvdGhlcik7XG4gICAgICAgICAqIH0sIFtdKTtcbiAgICAgICAgICogLy8gPT4gWzQsIDUsIDIsIDMsIDAsIDFdXG4gICAgICAgICAqL2Z1bmN0aW9uIHJlZHVjZVJpZ2h0KGNvbGxlY3Rpb24saXRlcmF0ZWUsYWNjdW11bGF0b3Ipe3ZhciBmdW5jPWlzQXJyYXkoY29sbGVjdGlvbik/YXJyYXlSZWR1Y2VSaWdodDpiYXNlUmVkdWNlLGluaXRBY2N1bT1hcmd1bWVudHMubGVuZ3RoPDM7cmV0dXJuIGZ1bmMoY29sbGVjdGlvbixnZXRJdGVyYXRlZShpdGVyYXRlZSw0KSxhY2N1bXVsYXRvcixpbml0QWNjdW0sYmFzZUVhY2hSaWdodCk7fS8qKlxuICAgICAgICAgKiBUaGUgb3Bwb3NpdGUgb2YgYF8uZmlsdGVyYDsgdGhpcyBtZXRob2QgcmV0dXJucyB0aGUgZWxlbWVudHMgb2YgYGNvbGxlY3Rpb25gXG4gICAgICAgICAqIHRoYXQgYHByZWRpY2F0ZWAgZG9lcyAqKm5vdCoqIHJldHVybiB0cnV0aHkgZm9yLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmlsdGVyZWQgYXJyYXkuXG4gICAgICAgICAqIEBzZWUgXy5maWx0ZXJcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogdmFyIHVzZXJzID0gW1xuICAgICAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgJ2FnZSc6IDM2LCAnYWN0aXZlJzogZmFsc2UgfSxcbiAgICAgICAgICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICdhZ2UnOiA0MCwgJ2FjdGl2ZSc6IHRydWUgfVxuICAgICAgICAgKiBdO1xuICAgICAgICAgKlxuICAgICAgICAgKiBfLnJlamVjdCh1c2VycywgZnVuY3Rpb24obykgeyByZXR1cm4gIW8uYWN0aXZlOyB9KTtcbiAgICAgICAgICogLy8gPT4gb2JqZWN0cyBmb3IgWydmcmVkJ11cbiAgICAgICAgICpcbiAgICAgICAgICogLy8gVGhlIGBfLm1hdGNoZXNgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgICAgICogXy5yZWplY3QodXNlcnMsIHsgJ2FnZSc6IDQwLCAnYWN0aXZlJzogdHJ1ZSB9KTtcbiAgICAgICAgICogLy8gPT4gb2JqZWN0cyBmb3IgWydiYXJuZXknXVxuICAgICAgICAgKlxuICAgICAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICAgICAqIF8ucmVqZWN0KHVzZXJzLCBbJ2FjdGl2ZScsIGZhbHNlXSk7XG4gICAgICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFsnZnJlZCddXG4gICAgICAgICAqXG4gICAgICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAgICAgKiBfLnJlamVjdCh1c2VycywgJ2FjdGl2ZScpO1xuICAgICAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ2Jhcm5leSddXG4gICAgICAgICAqL2Z1bmN0aW9uIHJlamVjdChjb2xsZWN0aW9uLHByZWRpY2F0ZSl7dmFyIGZ1bmM9aXNBcnJheShjb2xsZWN0aW9uKT9hcnJheUZpbHRlcjpiYXNlRmlsdGVyO3JldHVybiBmdW5jKGNvbGxlY3Rpb24sbmVnYXRlKGdldEl0ZXJhdGVlKHByZWRpY2F0ZSwzKSkpO30vKipcbiAgICAgICAgICogR2V0cyBhIHJhbmRvbSBlbGVtZW50IGZyb20gYGNvbGxlY3Rpb25gLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSAyLjAuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBzYW1wbGUuXG4gICAgICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByYW5kb20gZWxlbWVudC5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogXy5zYW1wbGUoWzEsIDIsIDMsIDRdKTtcbiAgICAgICAgICogLy8gPT4gMlxuICAgICAgICAgKi9mdW5jdGlvbiBzYW1wbGUoY29sbGVjdGlvbil7dmFyIGZ1bmM9aXNBcnJheShjb2xsZWN0aW9uKT9hcnJheVNhbXBsZTpiYXNlU2FtcGxlO3JldHVybiBmdW5jKGNvbGxlY3Rpb24pO30vKipcbiAgICAgICAgICogR2V0cyBgbmAgcmFuZG9tIGVsZW1lbnRzIGF0IHVuaXF1ZSBrZXlzIGZyb20gYGNvbGxlY3Rpb25gIHVwIHRvIHRoZVxuICAgICAgICAgKiBzaXplIG9mIGBjb2xsZWN0aW9uYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gc2FtcGxlLlxuICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gW249MV0gVGhlIG51bWJlciBvZiBlbGVtZW50cyB0byBzYW1wbGUuXG4gICAgICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gICAgICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgcmFuZG9tIGVsZW1lbnRzLlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLnNhbXBsZVNpemUoWzEsIDIsIDNdLCAyKTtcbiAgICAgICAgICogLy8gPT4gWzMsIDFdXG4gICAgICAgICAqXG4gICAgICAgICAqIF8uc2FtcGxlU2l6ZShbMSwgMiwgM10sIDQpO1xuICAgICAgICAgKiAvLyA9PiBbMiwgMywgMV1cbiAgICAgICAgICovZnVuY3Rpb24gc2FtcGxlU2l6ZShjb2xsZWN0aW9uLG4sZ3VhcmQpe2lmKGd1YXJkP2lzSXRlcmF0ZWVDYWxsKGNvbGxlY3Rpb24sbixndWFyZCk6bj09PXVuZGVmaW5lZCl7bj0xO31lbHNle249dG9JbnRlZ2VyKG4pO312YXIgZnVuYz1pc0FycmF5KGNvbGxlY3Rpb24pP2FycmF5U2FtcGxlU2l6ZTpiYXNlU2FtcGxlU2l6ZTtyZXR1cm4gZnVuYyhjb2xsZWN0aW9uLG4pO30vKipcbiAgICAgICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiBzaHVmZmxlZCB2YWx1ZXMsIHVzaW5nIGEgdmVyc2lvbiBvZiB0aGVcbiAgICAgICAgICogW0Zpc2hlci1ZYXRlcyBzaHVmZmxlXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9GaXNoZXItWWF0ZXNfc2h1ZmZsZSkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQHNpbmNlIDAuMS4wXG4gICAgICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIHNodWZmbGUuXG4gICAgICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IHNodWZmbGVkIGFycmF5LlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLnNodWZmbGUoWzEsIDIsIDMsIDRdKTtcbiAgICAgICAgICogLy8gPT4gWzQsIDEsIDMsIDJdXG4gICAgICAgICAqL2Z1bmN0aW9uIHNodWZmbGUoY29sbGVjdGlvbil7dmFyIGZ1bmM9aXNBcnJheShjb2xsZWN0aW9uKT9hcnJheVNodWZmbGU6YmFzZVNodWZmbGU7cmV0dXJuIGZ1bmMoY29sbGVjdGlvbik7fS8qKlxuICAgICAgICAgKiBHZXRzIHRoZSBzaXplIG9mIGBjb2xsZWN0aW9uYCBieSByZXR1cm5pbmcgaXRzIGxlbmd0aCBmb3IgYXJyYXktbGlrZVxuICAgICAgICAgKiB2YWx1ZXMgb3IgdGhlIG51bWJlciBvZiBvd24gZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydGllcyBmb3Igb2JqZWN0cy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R8c3RyaW5nfSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGluc3BlY3QuXG4gICAgICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGNvbGxlY3Rpb24gc2l6ZS5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogXy5zaXplKFsxLCAyLCAzXSk7XG4gICAgICAgICAqIC8vID0+IDNcbiAgICAgICAgICpcbiAgICAgICAgICogXy5zaXplKHsgJ2EnOiAxLCAnYic6IDIgfSk7XG4gICAgICAgICAqIC8vID0+IDJcbiAgICAgICAgICpcbiAgICAgICAgICogXy5zaXplKCdwZWJibGVzJyk7XG4gICAgICAgICAqIC8vID0+IDdcbiAgICAgICAgICovZnVuY3Rpb24gc2l6ZShjb2xsZWN0aW9uKXtpZihjb2xsZWN0aW9uPT1udWxsKXtyZXR1cm4gMDt9aWYoaXNBcnJheUxpa2UoY29sbGVjdGlvbikpe3JldHVybiBpc1N0cmluZyhjb2xsZWN0aW9uKT9zdHJpbmdTaXplKGNvbGxlY3Rpb24pOmNvbGxlY3Rpb24ubGVuZ3RoO312YXIgdGFnPWdldFRhZyhjb2xsZWN0aW9uKTtpZih0YWc9PW1hcFRhZ3x8dGFnPT1zZXRUYWcpe3JldHVybiBjb2xsZWN0aW9uLnNpemU7fXJldHVybiBiYXNlS2V5cyhjb2xsZWN0aW9uKS5sZW5ndGg7fS8qKlxuICAgICAgICAgKiBDaGVja3MgaWYgYHByZWRpY2F0ZWAgcmV0dXJucyB0cnV0aHkgZm9yICoqYW55KiogZWxlbWVudCBvZiBgY29sbGVjdGlvbmAuXG4gICAgICAgICAqIEl0ZXJhdGlvbiBpcyBzdG9wcGVkIG9uY2UgYHByZWRpY2F0ZWAgcmV0dXJucyB0cnV0aHkuIFRoZSBwcmVkaWNhdGUgaXNcbiAgICAgICAgICogaW52b2tlZCB3aXRoIHRocmVlIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleHxrZXksIGNvbGxlY3Rpb24pLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgICAgICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ubWFwYC5cbiAgICAgICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFueSBlbGVtZW50IHBhc3NlcyB0aGUgcHJlZGljYXRlIGNoZWNrLFxuICAgICAgICAgKiAgZWxzZSBgZmFsc2VgLlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLnNvbWUoW251bGwsIDAsICd5ZXMnLCBmYWxzZV0sIEJvb2xlYW4pO1xuICAgICAgICAgKiAvLyA9PiB0cnVlXG4gICAgICAgICAqXG4gICAgICAgICAqIHZhciB1c2VycyA9IFtcbiAgICAgICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScsICdhY3RpdmUnOiB0cnVlIH0sXG4gICAgICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAnYWN0aXZlJzogZmFsc2UgfVxuICAgICAgICAgKiBdO1xuICAgICAgICAgKlxuICAgICAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc2AgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAgICAgKiBfLnNvbWUodXNlcnMsIHsgJ3VzZXInOiAnYmFybmV5JywgJ2FjdGl2ZSc6IGZhbHNlIH0pO1xuICAgICAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAgICAgKlxuICAgICAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICAgICAqIF8uc29tZSh1c2VycywgWydhY3RpdmUnLCBmYWxzZV0pO1xuICAgICAgICAgKiAvLyA9PiB0cnVlXG4gICAgICAgICAqXG4gICAgICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAgICAgKiBfLnNvbWUodXNlcnMsICdhY3RpdmUnKTtcbiAgICAgICAgICogLy8gPT4gdHJ1ZVxuICAgICAgICAgKi9mdW5jdGlvbiBzb21lKGNvbGxlY3Rpb24scHJlZGljYXRlLGd1YXJkKXt2YXIgZnVuYz1pc0FycmF5KGNvbGxlY3Rpb24pP2FycmF5U29tZTpiYXNlU29tZTtpZihndWFyZCYmaXNJdGVyYXRlZUNhbGwoY29sbGVjdGlvbixwcmVkaWNhdGUsZ3VhcmQpKXtwcmVkaWNhdGU9dW5kZWZpbmVkO31yZXR1cm4gZnVuYyhjb2xsZWN0aW9uLGdldEl0ZXJhdGVlKHByZWRpY2F0ZSwzKSk7fS8qKlxuICAgICAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIGVsZW1lbnRzLCBzb3J0ZWQgaW4gYXNjZW5kaW5nIG9yZGVyIGJ5IHRoZSByZXN1bHRzIG9mXG4gICAgICAgICAqIHJ1bm5pbmcgZWFjaCBlbGVtZW50IGluIGEgY29sbGVjdGlvbiB0aHJ1IGVhY2ggaXRlcmF0ZWUuIFRoaXMgbWV0aG9kXG4gICAgICAgICAqIHBlcmZvcm1zIGEgc3RhYmxlIHNvcnQsIHRoYXQgaXMsIGl0IHByZXNlcnZlcyB0aGUgb3JpZ2luYWwgc29ydCBvcmRlciBvZlxuICAgICAgICAgKiBlcXVhbCBlbGVtZW50cy4gVGhlIGl0ZXJhdGVlcyBhcmUgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDogKHZhbHVlKS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAgICAgKiBAcGFyYW0gey4uLihGdW5jdGlvbnxGdW5jdGlvbltdKX0gW2l0ZXJhdGVlcz1bXy5pZGVudGl0eV1dXG4gICAgICAgICAqICBUaGUgaXRlcmF0ZWVzIHRvIHNvcnQgYnkuXG4gICAgICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IHNvcnRlZCBhcnJheS5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogdmFyIHVzZXJzID0gW1xuICAgICAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgJ2FnZSc6IDQ4IH0sXG4gICAgICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzYgfSxcbiAgICAgICAgICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICdhZ2UnOiA0MCB9LFxuICAgICAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgJ2FnZSc6IDM0IH1cbiAgICAgICAgICogXTtcbiAgICAgICAgICpcbiAgICAgICAgICogXy5zb3J0QnkodXNlcnMsIFtmdW5jdGlvbihvKSB7IHJldHVybiBvLnVzZXI7IH1dKTtcbiAgICAgICAgICogLy8gPT4gb2JqZWN0cyBmb3IgW1snYmFybmV5JywgMzZdLCBbJ2Jhcm5leScsIDM0XSwgWydmcmVkJywgNDhdLCBbJ2ZyZWQnLCA0MF1dXG4gICAgICAgICAqXG4gICAgICAgICAqIF8uc29ydEJ5KHVzZXJzLCBbJ3VzZXInLCAnYWdlJ10pO1xuICAgICAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbWydiYXJuZXknLCAzNF0sIFsnYmFybmV5JywgMzZdLCBbJ2ZyZWQnLCA0MF0sIFsnZnJlZCcsIDQ4XV1cbiAgICAgICAgICovdmFyIHNvcnRCeT1iYXNlUmVzdChmdW5jdGlvbihjb2xsZWN0aW9uLGl0ZXJhdGVlcyl7aWYoY29sbGVjdGlvbj09bnVsbCl7cmV0dXJuW107fXZhciBsZW5ndGg9aXRlcmF0ZWVzLmxlbmd0aDtpZihsZW5ndGg+MSYmaXNJdGVyYXRlZUNhbGwoY29sbGVjdGlvbixpdGVyYXRlZXNbMF0saXRlcmF0ZWVzWzFdKSl7aXRlcmF0ZWVzPVtdO31lbHNlIGlmKGxlbmd0aD4yJiZpc0l0ZXJhdGVlQ2FsbChpdGVyYXRlZXNbMF0saXRlcmF0ZWVzWzFdLGl0ZXJhdGVlc1syXSkpe2l0ZXJhdGVlcz1baXRlcmF0ZWVzWzBdXTt9cmV0dXJuIGJhc2VPcmRlckJ5KGNvbGxlY3Rpb24sYmFzZUZsYXR0ZW4oaXRlcmF0ZWVzLDEpLFtdKTt9KTsvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLy8qKlxuICAgICAgICogR2V0cyB0aGUgdGltZXN0YW1wIG9mIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRoYXQgaGF2ZSBlbGFwc2VkIHNpbmNlXG4gICAgICAgKiB0aGUgVW5peCBlcG9jaCAoMSBKYW51YXJ5IDE5NzAgMDA6MDA6MDAgVVRDKS5cbiAgICAgICAqXG4gICAgICAgKiBAc3RhdGljXG4gICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICogQHNpbmNlIDIuNC4wXG4gICAgICAgKiBAY2F0ZWdvcnkgRGF0ZVxuICAgICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgdGltZXN0YW1wLlxuICAgICAgICogQGV4YW1wbGVcbiAgICAgICAqXG4gICAgICAgKiBfLmRlZmVyKGZ1bmN0aW9uKHN0YW1wKSB7XG4gICAgICAgKiAgIGNvbnNvbGUubG9nKF8ubm93KCkgLSBzdGFtcCk7XG4gICAgICAgKiB9LCBfLm5vdygpKTtcbiAgICAgICAqIC8vID0+IExvZ3MgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgaXQgdG9vayBmb3IgdGhlIGRlZmVycmVkIGludm9jYXRpb24uXG4gICAgICAgKi92YXIgbm93PWN0eE5vd3x8ZnVuY3Rpb24oKXtyZXR1cm4gcm9vdC5EYXRlLm5vdygpO307LyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8vKipcbiAgICAgICAqIFRoZSBvcHBvc2l0ZSBvZiBgXy5iZWZvcmVgOyB0aGlzIG1ldGhvZCBjcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzXG4gICAgICAgKiBgZnVuY2Agb25jZSBpdCdzIGNhbGxlZCBgbmAgb3IgbW9yZSB0aW1lcy5cbiAgICAgICAqXG4gICAgICAgKiBAc3RhdGljXG4gICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICogQHNpbmNlIDAuMS4wXG4gICAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgY2FsbHMgYmVmb3JlIGBmdW5jYCBpcyBpbnZva2VkLlxuICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcmVzdHJpY3QuXG4gICAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyByZXN0cmljdGVkIGZ1bmN0aW9uLlxuICAgICAgICogQGV4YW1wbGVcbiAgICAgICAqXG4gICAgICAgKiB2YXIgc2F2ZXMgPSBbJ3Byb2ZpbGUnLCAnc2V0dGluZ3MnXTtcbiAgICAgICAqXG4gICAgICAgKiB2YXIgZG9uZSA9IF8uYWZ0ZXIoc2F2ZXMubGVuZ3RoLCBmdW5jdGlvbigpIHtcbiAgICAgICAqICAgY29uc29sZS5sb2coJ2RvbmUgc2F2aW5nIScpO1xuICAgICAgICogfSk7XG4gICAgICAgKlxuICAgICAgICogXy5mb3JFYWNoKHNhdmVzLCBmdW5jdGlvbih0eXBlKSB7XG4gICAgICAgKiAgIGFzeW5jU2F2ZSh7ICd0eXBlJzogdHlwZSwgJ2NvbXBsZXRlJzogZG9uZSB9KTtcbiAgICAgICAqIH0pO1xuICAgICAgICogLy8gPT4gTG9ncyAnZG9uZSBzYXZpbmchJyBhZnRlciB0aGUgdHdvIGFzeW5jIHNhdmVzIGhhdmUgY29tcGxldGVkLlxuICAgICAgICovZnVuY3Rpb24gYWZ0ZXIobixmdW5jKXtpZih0eXBlb2YgZnVuYyE9PSdmdW5jdGlvbicpe3Rocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTt9bj10b0ludGVnZXIobik7cmV0dXJuIGZ1bmN0aW9uKCl7aWYoLS1uPDEpe3JldHVybiBmdW5jLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt9fTt9LyoqXG4gICAgICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgLCB3aXRoIHVwIHRvIGBuYCBhcmd1bWVudHMsXG4gICAgICAgICAqIGlnbm9yaW5nIGFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNhcCBhcmd1bWVudHMgZm9yLlxuICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gW249ZnVuYy5sZW5ndGhdIFRoZSBhcml0eSBjYXAuXG4gICAgICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gICAgICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNhcHBlZCBmdW5jdGlvbi5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogXy5tYXAoWyc2JywgJzgnLCAnMTAnXSwgXy5hcnkocGFyc2VJbnQsIDEpKTtcbiAgICAgICAgICogLy8gPT4gWzYsIDgsIDEwXVxuICAgICAgICAgKi9mdW5jdGlvbiBhcnkoZnVuYyxuLGd1YXJkKXtuPWd1YXJkP3VuZGVmaW5lZDpuO249ZnVuYyYmbj09bnVsbD9mdW5jLmxlbmd0aDpuO3JldHVybiBjcmVhdGVXcmFwKGZ1bmMsV1JBUF9BUllfRkxBRyx1bmRlZmluZWQsdW5kZWZpbmVkLHVuZGVmaW5lZCx1bmRlZmluZWQsbik7fS8qKlxuICAgICAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCwgd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgYW5kIGFyZ3VtZW50c1xuICAgICAgICAgKiBvZiB0aGUgY3JlYXRlZCBmdW5jdGlvbiwgd2hpbGUgaXQncyBjYWxsZWQgbGVzcyB0aGFuIGBuYCB0aW1lcy4gU3Vic2VxdWVudFxuICAgICAgICAgKiBjYWxscyB0byB0aGUgY3JlYXRlZCBmdW5jdGlvbiByZXR1cm4gdGhlIHJlc3VsdCBvZiB0aGUgbGFzdCBgZnVuY2AgaW52b2NhdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgY2FsbHMgYXQgd2hpY2ggYGZ1bmNgIGlzIG5vIGxvbmdlciBpbnZva2VkLlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byByZXN0cmljdC5cbiAgICAgICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgcmVzdHJpY3RlZCBmdW5jdGlvbi5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogalF1ZXJ5KGVsZW1lbnQpLm9uKCdjbGljaycsIF8uYmVmb3JlKDUsIGFkZENvbnRhY3RUb0xpc3QpKTtcbiAgICAgICAgICogLy8gPT4gQWxsb3dzIGFkZGluZyB1cCB0byA0IGNvbnRhY3RzIHRvIHRoZSBsaXN0LlxuICAgICAgICAgKi9mdW5jdGlvbiBiZWZvcmUobixmdW5jKXt2YXIgcmVzdWx0O2lmKHR5cGVvZiBmdW5jIT09J2Z1bmN0aW9uJyl7dGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO31uPXRvSW50ZWdlcihuKTtyZXR1cm4gZnVuY3Rpb24oKXtpZigtLW4+MCl7cmVzdWx0PWZ1bmMuYXBwbHkodGhpcyxhcmd1bWVudHMpO31pZihuPD0xKXtmdW5jPXVuZGVmaW5lZDt9cmV0dXJuIHJlc3VsdDt9O30vKipcbiAgICAgICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2Agd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgb2YgYHRoaXNBcmdgXG4gICAgICAgICAqIGFuZCBgcGFydGlhbHNgIHByZXBlbmRlZCB0byB0aGUgYXJndW1lbnRzIGl0IHJlY2VpdmVzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBUaGUgYF8uYmluZC5wbGFjZWhvbGRlcmAgdmFsdWUsIHdoaWNoIGRlZmF1bHRzIHRvIGBfYCBpbiBtb25vbGl0aGljIGJ1aWxkcyxcbiAgICAgICAgICogbWF5IGJlIHVzZWQgYXMgYSBwbGFjZWhvbGRlciBmb3IgcGFydGlhbGx5IGFwcGxpZWQgYXJndW1lbnRzLlxuICAgICAgICAgKlxuICAgICAgICAgKiAqKk5vdGU6KiogVW5saWtlIG5hdGl2ZSBgRnVuY3Rpb24jYmluZGAsIHRoaXMgbWV0aG9kIGRvZXNuJ3Qgc2V0IHRoZSBcImxlbmd0aFwiXG4gICAgICAgICAqIHByb3BlcnR5IG9mIGJvdW5kIGZ1bmN0aW9ucy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGJpbmQuXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gdGhpc0FyZyBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICAgICAgICAgKiBAcGFyYW0gey4uLip9IFtwYXJ0aWFsc10gVGhlIGFyZ3VtZW50cyB0byBiZSBwYXJ0aWFsbHkgYXBwbGllZC5cbiAgICAgICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYm91bmQgZnVuY3Rpb24uXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIGZ1bmN0aW9uIGdyZWV0KGdyZWV0aW5nLCBwdW5jdHVhdGlvbikge1xuICAgICAgICAgKiAgIHJldHVybiBncmVldGluZyArICcgJyArIHRoaXMudXNlciArIHB1bmN0dWF0aW9uO1xuICAgICAgICAgKiB9XG4gICAgICAgICAqXG4gICAgICAgICAqIHZhciBvYmplY3QgPSB7ICd1c2VyJzogJ2ZyZWQnIH07XG4gICAgICAgICAqXG4gICAgICAgICAqIHZhciBib3VuZCA9IF8uYmluZChncmVldCwgb2JqZWN0LCAnaGknKTtcbiAgICAgICAgICogYm91bmQoJyEnKTtcbiAgICAgICAgICogLy8gPT4gJ2hpIGZyZWQhJ1xuICAgICAgICAgKlxuICAgICAgICAgKiAvLyBCb3VuZCB3aXRoIHBsYWNlaG9sZGVycy5cbiAgICAgICAgICogdmFyIGJvdW5kID0gXy5iaW5kKGdyZWV0LCBvYmplY3QsIF8sICchJyk7XG4gICAgICAgICAqIGJvdW5kKCdoaScpO1xuICAgICAgICAgKiAvLyA9PiAnaGkgZnJlZCEnXG4gICAgICAgICAqL3ZhciBiaW5kPWJhc2VSZXN0KGZ1bmN0aW9uKGZ1bmMsdGhpc0FyZyxwYXJ0aWFscyl7dmFyIGJpdG1hc2s9V1JBUF9CSU5EX0ZMQUc7aWYocGFydGlhbHMubGVuZ3RoKXt2YXIgaG9sZGVycz1yZXBsYWNlSG9sZGVycyhwYXJ0aWFscyxnZXRIb2xkZXIoYmluZCkpO2JpdG1hc2t8PVdSQVBfUEFSVElBTF9GTEFHO31yZXR1cm4gY3JlYXRlV3JhcChmdW5jLGJpdG1hc2ssdGhpc0FyZyxwYXJ0aWFscyxob2xkZXJzKTt9KTsvKipcbiAgICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgdGhlIG1ldGhvZCBhdCBgb2JqZWN0W2tleV1gIHdpdGggYHBhcnRpYWxzYFxuICAgICAgICogcHJlcGVuZGVkIHRvIHRoZSBhcmd1bWVudHMgaXQgcmVjZWl2ZXMuXG4gICAgICAgKlxuICAgICAgICogVGhpcyBtZXRob2QgZGlmZmVycyBmcm9tIGBfLmJpbmRgIGJ5IGFsbG93aW5nIGJvdW5kIGZ1bmN0aW9ucyB0byByZWZlcmVuY2VcbiAgICAgICAqIG1ldGhvZHMgdGhhdCBtYXkgYmUgcmVkZWZpbmVkIG9yIGRvbid0IHlldCBleGlzdC4gU2VlXG4gICAgICAgKiBbUGV0ZXIgTWljaGF1eCdzIGFydGljbGVdKGh0dHA6Ly9wZXRlci5taWNoYXV4LmNhL2FydGljbGVzL2xhenktZnVuY3Rpb24tZGVmaW5pdGlvbi1wYXR0ZXJuKVxuICAgICAgICogZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgICAqXG4gICAgICAgKiBUaGUgYF8uYmluZEtleS5wbGFjZWhvbGRlcmAgdmFsdWUsIHdoaWNoIGRlZmF1bHRzIHRvIGBfYCBpbiBtb25vbGl0aGljXG4gICAgICAgKiBidWlsZHMsIG1heSBiZSB1c2VkIGFzIGEgcGxhY2Vob2xkZXIgZm9yIHBhcnRpYWxseSBhcHBsaWVkIGFyZ3VtZW50cy5cbiAgICAgICAqXG4gICAgICAgKiBAc3RhdGljXG4gICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICogQHNpbmNlIDAuMTAuMFxuICAgICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaW52b2tlIHRoZSBtZXRob2Qgb24uXG4gICAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIG1ldGhvZC5cbiAgICAgICAqIEBwYXJhbSB7Li4uKn0gW3BhcnRpYWxzXSBUaGUgYXJndW1lbnRzIHRvIGJlIHBhcnRpYWxseSBhcHBsaWVkLlxuICAgICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYm91bmQgZnVuY3Rpb24uXG4gICAgICAgKiBAZXhhbXBsZVxuICAgICAgICpcbiAgICAgICAqIHZhciBvYmplY3QgPSB7XG4gICAgICAgKiAgICd1c2VyJzogJ2ZyZWQnLFxuICAgICAgICogICAnZ3JlZXQnOiBmdW5jdGlvbihncmVldGluZywgcHVuY3R1YXRpb24pIHtcbiAgICAgICAqICAgICByZXR1cm4gZ3JlZXRpbmcgKyAnICcgKyB0aGlzLnVzZXIgKyBwdW5jdHVhdGlvbjtcbiAgICAgICAqICAgfVxuICAgICAgICogfTtcbiAgICAgICAqXG4gICAgICAgKiB2YXIgYm91bmQgPSBfLmJpbmRLZXkob2JqZWN0LCAnZ3JlZXQnLCAnaGknKTtcbiAgICAgICAqIGJvdW5kKCchJyk7XG4gICAgICAgKiAvLyA9PiAnaGkgZnJlZCEnXG4gICAgICAgKlxuICAgICAgICogb2JqZWN0LmdyZWV0ID0gZnVuY3Rpb24oZ3JlZXRpbmcsIHB1bmN0dWF0aW9uKSB7XG4gICAgICAgKiAgIHJldHVybiBncmVldGluZyArICd5YSAnICsgdGhpcy51c2VyICsgcHVuY3R1YXRpb247XG4gICAgICAgKiB9O1xuICAgICAgICpcbiAgICAgICAqIGJvdW5kKCchJyk7XG4gICAgICAgKiAvLyA9PiAnaGl5YSBmcmVkISdcbiAgICAgICAqXG4gICAgICAgKiAvLyBCb3VuZCB3aXRoIHBsYWNlaG9sZGVycy5cbiAgICAgICAqIHZhciBib3VuZCA9IF8uYmluZEtleShvYmplY3QsICdncmVldCcsIF8sICchJyk7XG4gICAgICAgKiBib3VuZCgnaGknKTtcbiAgICAgICAqIC8vID0+ICdoaXlhIGZyZWQhJ1xuICAgICAgICovdmFyIGJpbmRLZXk9YmFzZVJlc3QoZnVuY3Rpb24ob2JqZWN0LGtleSxwYXJ0aWFscyl7dmFyIGJpdG1hc2s9V1JBUF9CSU5EX0ZMQUd8V1JBUF9CSU5EX0tFWV9GTEFHO2lmKHBhcnRpYWxzLmxlbmd0aCl7dmFyIGhvbGRlcnM9cmVwbGFjZUhvbGRlcnMocGFydGlhbHMsZ2V0SG9sZGVyKGJpbmRLZXkpKTtiaXRtYXNrfD1XUkFQX1BBUlRJQUxfRkxBRzt9cmV0dXJuIGNyZWF0ZVdyYXAoa2V5LGJpdG1hc2ssb2JqZWN0LHBhcnRpYWxzLGhvbGRlcnMpO30pOy8qKlxuICAgICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgYWNjZXB0cyBhcmd1bWVudHMgb2YgYGZ1bmNgIGFuZCBlaXRoZXIgaW52b2tlc1xuICAgICAgICogYGZ1bmNgIHJldHVybmluZyBpdHMgcmVzdWx0LCBpZiBhdCBsZWFzdCBgYXJpdHlgIG51bWJlciBvZiBhcmd1bWVudHMgaGF2ZVxuICAgICAgICogYmVlbiBwcm92aWRlZCwgb3IgcmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgYWNjZXB0cyB0aGUgcmVtYWluaW5nIGBmdW5jYFxuICAgICAgICogYXJndW1lbnRzLCBhbmQgc28gb24uIFRoZSBhcml0eSBvZiBgZnVuY2AgbWF5IGJlIHNwZWNpZmllZCBpZiBgZnVuYy5sZW5ndGhgXG4gICAgICAgKiBpcyBub3Qgc3VmZmljaWVudC5cbiAgICAgICAqXG4gICAgICAgKiBUaGUgYF8uY3VycnkucGxhY2Vob2xkZXJgIHZhbHVlLCB3aGljaCBkZWZhdWx0cyB0byBgX2AgaW4gbW9ub2xpdGhpYyBidWlsZHMsXG4gICAgICAgKiBtYXkgYmUgdXNlZCBhcyBhIHBsYWNlaG9sZGVyIGZvciBwcm92aWRlZCBhcmd1bWVudHMuXG4gICAgICAgKlxuICAgICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGRvZXNuJ3Qgc2V0IHRoZSBcImxlbmd0aFwiIHByb3BlcnR5IG9mIGN1cnJpZWQgZnVuY3Rpb25zLlxuICAgICAgICpcbiAgICAgICAqIEBzdGF0aWNcbiAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgKiBAc2luY2UgMi4wLjBcbiAgICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY3VycnkuXG4gICAgICAgKiBAcGFyYW0ge251bWJlcn0gW2FyaXR5PWZ1bmMubGVuZ3RoXSBUaGUgYXJpdHkgb2YgYGZ1bmNgLlxuICAgICAgICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ubWFwYC5cbiAgICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGN1cnJpZWQgZnVuY3Rpb24uXG4gICAgICAgKiBAZXhhbXBsZVxuICAgICAgICpcbiAgICAgICAqIHZhciBhYmMgPSBmdW5jdGlvbihhLCBiLCBjKSB7XG4gICAgICAgKiAgIHJldHVybiBbYSwgYiwgY107XG4gICAgICAgKiB9O1xuICAgICAgICpcbiAgICAgICAqIHZhciBjdXJyaWVkID0gXy5jdXJyeShhYmMpO1xuICAgICAgICpcbiAgICAgICAqIGN1cnJpZWQoMSkoMikoMyk7XG4gICAgICAgKiAvLyA9PiBbMSwgMiwgM11cbiAgICAgICAqXG4gICAgICAgKiBjdXJyaWVkKDEsIDIpKDMpO1xuICAgICAgICogLy8gPT4gWzEsIDIsIDNdXG4gICAgICAgKlxuICAgICAgICogY3VycmllZCgxLCAyLCAzKTtcbiAgICAgICAqIC8vID0+IFsxLCAyLCAzXVxuICAgICAgICpcbiAgICAgICAqIC8vIEN1cnJpZWQgd2l0aCBwbGFjZWhvbGRlcnMuXG4gICAgICAgKiBjdXJyaWVkKDEpKF8sIDMpKDIpO1xuICAgICAgICogLy8gPT4gWzEsIDIsIDNdXG4gICAgICAgKi9mdW5jdGlvbiBjdXJyeShmdW5jLGFyaXR5LGd1YXJkKXthcml0eT1ndWFyZD91bmRlZmluZWQ6YXJpdHk7dmFyIHJlc3VsdD1jcmVhdGVXcmFwKGZ1bmMsV1JBUF9DVVJSWV9GTEFHLHVuZGVmaW5lZCx1bmRlZmluZWQsdW5kZWZpbmVkLHVuZGVmaW5lZCx1bmRlZmluZWQsYXJpdHkpO3Jlc3VsdC5wbGFjZWhvbGRlcj1jdXJyeS5wbGFjZWhvbGRlcjtyZXR1cm4gcmVzdWx0O30vKipcbiAgICAgICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5jdXJyeWAgZXhjZXB0IHRoYXQgYXJndW1lbnRzIGFyZSBhcHBsaWVkIHRvIGBmdW5jYFxuICAgICAgICAgKiBpbiB0aGUgbWFubmVyIG9mIGBfLnBhcnRpYWxSaWdodGAgaW5zdGVhZCBvZiBgXy5wYXJ0aWFsYC5cbiAgICAgICAgICpcbiAgICAgICAgICogVGhlIGBfLmN1cnJ5UmlnaHQucGxhY2Vob2xkZXJgIHZhbHVlLCB3aGljaCBkZWZhdWx0cyB0byBgX2AgaW4gbW9ub2xpdGhpY1xuICAgICAgICAgKiBidWlsZHMsIG1heSBiZSB1c2VkIGFzIGEgcGxhY2Vob2xkZXIgZm9yIHByb3ZpZGVkIGFyZ3VtZW50cy5cbiAgICAgICAgICpcbiAgICAgICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGRvZXNuJ3Qgc2V0IHRoZSBcImxlbmd0aFwiIHByb3BlcnR5IG9mIGN1cnJpZWQgZnVuY3Rpb25zLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY3VycnkuXG4gICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbYXJpdHk9ZnVuYy5sZW5ndGhdIFRoZSBhcml0eSBvZiBgZnVuY2AuXG4gICAgICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gICAgICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGN1cnJpZWQgZnVuY3Rpb24uXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIHZhciBhYmMgPSBmdW5jdGlvbihhLCBiLCBjKSB7XG4gICAgICAgICAqICAgcmV0dXJuIFthLCBiLCBjXTtcbiAgICAgICAgICogfTtcbiAgICAgICAgICpcbiAgICAgICAgICogdmFyIGN1cnJpZWQgPSBfLmN1cnJ5UmlnaHQoYWJjKTtcbiAgICAgICAgICpcbiAgICAgICAgICogY3VycmllZCgzKSgyKSgxKTtcbiAgICAgICAgICogLy8gPT4gWzEsIDIsIDNdXG4gICAgICAgICAqXG4gICAgICAgICAqIGN1cnJpZWQoMiwgMykoMSk7XG4gICAgICAgICAqIC8vID0+IFsxLCAyLCAzXVxuICAgICAgICAgKlxuICAgICAgICAgKiBjdXJyaWVkKDEsIDIsIDMpO1xuICAgICAgICAgKiAvLyA9PiBbMSwgMiwgM11cbiAgICAgICAgICpcbiAgICAgICAgICogLy8gQ3VycmllZCB3aXRoIHBsYWNlaG9sZGVycy5cbiAgICAgICAgICogY3VycmllZCgzKSgxLCBfKSgyKTtcbiAgICAgICAgICogLy8gPT4gWzEsIDIsIDNdXG4gICAgICAgICAqL2Z1bmN0aW9uIGN1cnJ5UmlnaHQoZnVuYyxhcml0eSxndWFyZCl7YXJpdHk9Z3VhcmQ/dW5kZWZpbmVkOmFyaXR5O3ZhciByZXN1bHQ9Y3JlYXRlV3JhcChmdW5jLFdSQVBfQ1VSUllfUklHSFRfRkxBRyx1bmRlZmluZWQsdW5kZWZpbmVkLHVuZGVmaW5lZCx1bmRlZmluZWQsdW5kZWZpbmVkLGFyaXR5KTtyZXN1bHQucGxhY2Vob2xkZXI9Y3VycnlSaWdodC5wbGFjZWhvbGRlcjtyZXR1cm4gcmVzdWx0O30vKipcbiAgICAgICAgICogQ3JlYXRlcyBhIGRlYm91bmNlZCBmdW5jdGlvbiB0aGF0IGRlbGF5cyBpbnZva2luZyBgZnVuY2AgdW50aWwgYWZ0ZXIgYHdhaXRgXG4gICAgICAgICAqIG1pbGxpc2Vjb25kcyBoYXZlIGVsYXBzZWQgc2luY2UgdGhlIGxhc3QgdGltZSB0aGUgZGVib3VuY2VkIGZ1bmN0aW9uIHdhc1xuICAgICAgICAgKiBpbnZva2VkLiBUaGUgZGVib3VuY2VkIGZ1bmN0aW9uIGNvbWVzIHdpdGggYSBgY2FuY2VsYCBtZXRob2QgdG8gY2FuY2VsXG4gICAgICAgICAqIGRlbGF5ZWQgYGZ1bmNgIGludm9jYXRpb25zIGFuZCBhIGBmbHVzaGAgbWV0aG9kIHRvIGltbWVkaWF0ZWx5IGludm9rZSB0aGVtLlxuICAgICAgICAgKiBQcm92aWRlIGBvcHRpb25zYCB0byBpbmRpY2F0ZSB3aGV0aGVyIGBmdW5jYCBzaG91bGQgYmUgaW52b2tlZCBvbiB0aGVcbiAgICAgICAgICogbGVhZGluZyBhbmQvb3IgdHJhaWxpbmcgZWRnZSBvZiB0aGUgYHdhaXRgIHRpbWVvdXQuIFRoZSBgZnVuY2AgaXMgaW52b2tlZFxuICAgICAgICAgKiB3aXRoIHRoZSBsYXN0IGFyZ3VtZW50cyBwcm92aWRlZCB0byB0aGUgZGVib3VuY2VkIGZ1bmN0aW9uLiBTdWJzZXF1ZW50XG4gICAgICAgICAqIGNhbGxzIHRvIHRoZSBkZWJvdW5jZWQgZnVuY3Rpb24gcmV0dXJuIHRoZSByZXN1bHQgb2YgdGhlIGxhc3QgYGZ1bmNgXG4gICAgICAgICAqIGludm9jYXRpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqICoqTm90ZToqKiBJZiBgbGVhZGluZ2AgYW5kIGB0cmFpbGluZ2Agb3B0aW9ucyBhcmUgYHRydWVgLCBgZnVuY2AgaXNcbiAgICAgICAgICogaW52b2tlZCBvbiB0aGUgdHJhaWxpbmcgZWRnZSBvZiB0aGUgdGltZW91dCBvbmx5IGlmIHRoZSBkZWJvdW5jZWQgZnVuY3Rpb25cbiAgICAgICAgICogaXMgaW52b2tlZCBtb3JlIHRoYW4gb25jZSBkdXJpbmcgdGhlIGB3YWl0YCB0aW1lb3V0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBJZiBgd2FpdGAgaXMgYDBgIGFuZCBgbGVhZGluZ2AgaXMgYGZhbHNlYCwgYGZ1bmNgIGludm9jYXRpb24gaXMgZGVmZXJyZWRcbiAgICAgICAgICogdW50aWwgdG8gdGhlIG5leHQgdGljaywgc2ltaWxhciB0byBgc2V0VGltZW91dGAgd2l0aCBhIHRpbWVvdXQgb2YgYDBgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBTZWUgW0RhdmlkIENvcmJhY2hvJ3MgYXJ0aWNsZV0oaHR0cHM6Ly9jc3MtdHJpY2tzLmNvbS9kZWJvdW5jaW5nLXRocm90dGxpbmctZXhwbGFpbmVkLWV4YW1wbGVzLylcbiAgICAgICAgICogZm9yIGRldGFpbHMgb3ZlciB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBgXy5kZWJvdW5jZWAgYW5kIGBfLnRocm90dGxlYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRlYm91bmNlLlxuICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gW3dhaXQ9MF0gVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gZGVsYXkuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gVGhlIG9wdGlvbnMgb2JqZWN0LlxuICAgICAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmxlYWRpbmc9ZmFsc2VdXG4gICAgICAgICAqICBTcGVjaWZ5IGludm9raW5nIG9uIHRoZSBsZWFkaW5nIGVkZ2Ugb2YgdGhlIHRpbWVvdXQuXG4gICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5tYXhXYWl0XVxuICAgICAgICAgKiAgVGhlIG1heGltdW0gdGltZSBgZnVuY2AgaXMgYWxsb3dlZCB0byBiZSBkZWxheWVkIGJlZm9yZSBpdCdzIGludm9rZWQuXG4gICAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMudHJhaWxpbmc9dHJ1ZV1cbiAgICAgICAgICogIFNwZWNpZnkgaW52b2tpbmcgb24gdGhlIHRyYWlsaW5nIGVkZ2Ugb2YgdGhlIHRpbWVvdXQuXG4gICAgICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGRlYm91bmNlZCBmdW5jdGlvbi5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogLy8gQXZvaWQgY29zdGx5IGNhbGN1bGF0aW9ucyB3aGlsZSB0aGUgd2luZG93IHNpemUgaXMgaW4gZmx1eC5cbiAgICAgICAgICogalF1ZXJ5KHdpbmRvdykub24oJ3Jlc2l6ZScsIF8uZGVib3VuY2UoY2FsY3VsYXRlTGF5b3V0LCAxNTApKTtcbiAgICAgICAgICpcbiAgICAgICAgICogLy8gSW52b2tlIGBzZW5kTWFpbGAgd2hlbiBjbGlja2VkLCBkZWJvdW5jaW5nIHN1YnNlcXVlbnQgY2FsbHMuXG4gICAgICAgICAqIGpRdWVyeShlbGVtZW50KS5vbignY2xpY2snLCBfLmRlYm91bmNlKHNlbmRNYWlsLCAzMDAsIHtcbiAgICAgICAgICogICAnbGVhZGluZyc6IHRydWUsXG4gICAgICAgICAqICAgJ3RyYWlsaW5nJzogZmFsc2VcbiAgICAgICAgICogfSkpO1xuICAgICAgICAgKlxuICAgICAgICAgKiAvLyBFbnN1cmUgYGJhdGNoTG9nYCBpcyBpbnZva2VkIG9uY2UgYWZ0ZXIgMSBzZWNvbmQgb2YgZGVib3VuY2VkIGNhbGxzLlxuICAgICAgICAgKiB2YXIgZGVib3VuY2VkID0gXy5kZWJvdW5jZShiYXRjaExvZywgMjUwLCB7ICdtYXhXYWl0JzogMTAwMCB9KTtcbiAgICAgICAgICogdmFyIHNvdXJjZSA9IG5ldyBFdmVudFNvdXJjZSgnL3N0cmVhbScpO1xuICAgICAgICAgKiBqUXVlcnkoc291cmNlKS5vbignbWVzc2FnZScsIGRlYm91bmNlZCk7XG4gICAgICAgICAqXG4gICAgICAgICAqIC8vIENhbmNlbCB0aGUgdHJhaWxpbmcgZGVib3VuY2VkIGludm9jYXRpb24uXG4gICAgICAgICAqIGpRdWVyeSh3aW5kb3cpLm9uKCdwb3BzdGF0ZScsIGRlYm91bmNlZC5jYW5jZWwpO1xuICAgICAgICAgKi9mdW5jdGlvbiBkZWJvdW5jZShmdW5jLHdhaXQsb3B0aW9ucyl7dmFyIGxhc3RBcmdzLGxhc3RUaGlzLG1heFdhaXQscmVzdWx0LHRpbWVySWQsbGFzdENhbGxUaW1lLGxhc3RJbnZva2VUaW1lPTAsbGVhZGluZz1mYWxzZSxtYXhpbmc9ZmFsc2UsdHJhaWxpbmc9dHJ1ZTtpZih0eXBlb2YgZnVuYyE9PSdmdW5jdGlvbicpe3Rocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTt9d2FpdD10b051bWJlcih3YWl0KXx8MDtpZihpc09iamVjdChvcHRpb25zKSl7bGVhZGluZz0hIW9wdGlvbnMubGVhZGluZzttYXhpbmc9J21heFdhaXQnaW4gb3B0aW9uczttYXhXYWl0PW1heGluZz9uYXRpdmVNYXgodG9OdW1iZXIob3B0aW9ucy5tYXhXYWl0KXx8MCx3YWl0KTptYXhXYWl0O3RyYWlsaW5nPSd0cmFpbGluZydpbiBvcHRpb25zPyEhb3B0aW9ucy50cmFpbGluZzp0cmFpbGluZzt9ZnVuY3Rpb24gaW52b2tlRnVuYyh0aW1lKXt2YXIgYXJncz1sYXN0QXJncyx0aGlzQXJnPWxhc3RUaGlzO2xhc3RBcmdzPWxhc3RUaGlzPXVuZGVmaW5lZDtsYXN0SW52b2tlVGltZT10aW1lO3Jlc3VsdD1mdW5jLmFwcGx5KHRoaXNBcmcsYXJncyk7cmV0dXJuIHJlc3VsdDt9ZnVuY3Rpb24gbGVhZGluZ0VkZ2UodGltZSl7Ly8gUmVzZXQgYW55IGBtYXhXYWl0YCB0aW1lci5cbmxhc3RJbnZva2VUaW1lPXRpbWU7Ly8gU3RhcnQgdGhlIHRpbWVyIGZvciB0aGUgdHJhaWxpbmcgZWRnZS5cbnRpbWVySWQ9c2V0VGltZW91dCh0aW1lckV4cGlyZWQsd2FpdCk7Ly8gSW52b2tlIHRoZSBsZWFkaW5nIGVkZ2UuXG5yZXR1cm4gbGVhZGluZz9pbnZva2VGdW5jKHRpbWUpOnJlc3VsdDt9ZnVuY3Rpb24gcmVtYWluaW5nV2FpdCh0aW1lKXt2YXIgdGltZVNpbmNlTGFzdENhbGw9dGltZS1sYXN0Q2FsbFRpbWUsdGltZVNpbmNlTGFzdEludm9rZT10aW1lLWxhc3RJbnZva2VUaW1lLHRpbWVXYWl0aW5nPXdhaXQtdGltZVNpbmNlTGFzdENhbGw7cmV0dXJuIG1heGluZz9uYXRpdmVNaW4odGltZVdhaXRpbmcsbWF4V2FpdC10aW1lU2luY2VMYXN0SW52b2tlKTp0aW1lV2FpdGluZzt9ZnVuY3Rpb24gc2hvdWxkSW52b2tlKHRpbWUpe3ZhciB0aW1lU2luY2VMYXN0Q2FsbD10aW1lLWxhc3RDYWxsVGltZSx0aW1lU2luY2VMYXN0SW52b2tlPXRpbWUtbGFzdEludm9rZVRpbWU7Ly8gRWl0aGVyIHRoaXMgaXMgdGhlIGZpcnN0IGNhbGwsIGFjdGl2aXR5IGhhcyBzdG9wcGVkIGFuZCB3ZSdyZSBhdCB0aGVcbi8vIHRyYWlsaW5nIGVkZ2UsIHRoZSBzeXN0ZW0gdGltZSBoYXMgZ29uZSBiYWNrd2FyZHMgYW5kIHdlJ3JlIHRyZWF0aW5nXG4vLyBpdCBhcyB0aGUgdHJhaWxpbmcgZWRnZSwgb3Igd2UndmUgaGl0IHRoZSBgbWF4V2FpdGAgbGltaXQuXG5yZXR1cm4gbGFzdENhbGxUaW1lPT09dW5kZWZpbmVkfHx0aW1lU2luY2VMYXN0Q2FsbD49d2FpdHx8dGltZVNpbmNlTGFzdENhbGw8MHx8bWF4aW5nJiZ0aW1lU2luY2VMYXN0SW52b2tlPj1tYXhXYWl0O31mdW5jdGlvbiB0aW1lckV4cGlyZWQoKXt2YXIgdGltZT1ub3coKTtpZihzaG91bGRJbnZva2UodGltZSkpe3JldHVybiB0cmFpbGluZ0VkZ2UodGltZSk7fS8vIFJlc3RhcnQgdGhlIHRpbWVyLlxudGltZXJJZD1zZXRUaW1lb3V0KHRpbWVyRXhwaXJlZCxyZW1haW5pbmdXYWl0KHRpbWUpKTt9ZnVuY3Rpb24gdHJhaWxpbmdFZGdlKHRpbWUpe3RpbWVySWQ9dW5kZWZpbmVkOy8vIE9ubHkgaW52b2tlIGlmIHdlIGhhdmUgYGxhc3RBcmdzYCB3aGljaCBtZWFucyBgZnVuY2AgaGFzIGJlZW5cbi8vIGRlYm91bmNlZCBhdCBsZWFzdCBvbmNlLlxuaWYodHJhaWxpbmcmJmxhc3RBcmdzKXtyZXR1cm4gaW52b2tlRnVuYyh0aW1lKTt9bGFzdEFyZ3M9bGFzdFRoaXM9dW5kZWZpbmVkO3JldHVybiByZXN1bHQ7fWZ1bmN0aW9uIGNhbmNlbCgpe2lmKHRpbWVySWQhPT11bmRlZmluZWQpe2NsZWFyVGltZW91dCh0aW1lcklkKTt9bGFzdEludm9rZVRpbWU9MDtsYXN0QXJncz1sYXN0Q2FsbFRpbWU9bGFzdFRoaXM9dGltZXJJZD11bmRlZmluZWQ7fWZ1bmN0aW9uIGZsdXNoKCl7cmV0dXJuIHRpbWVySWQ9PT11bmRlZmluZWQ/cmVzdWx0OnRyYWlsaW5nRWRnZShub3coKSk7fWZ1bmN0aW9uIGRlYm91bmNlZCgpe3ZhciB0aW1lPW5vdygpLGlzSW52b2tpbmc9c2hvdWxkSW52b2tlKHRpbWUpO2xhc3RBcmdzPWFyZ3VtZW50cztsYXN0VGhpcz10aGlzO2xhc3RDYWxsVGltZT10aW1lO2lmKGlzSW52b2tpbmcpe2lmKHRpbWVySWQ9PT11bmRlZmluZWQpe3JldHVybiBsZWFkaW5nRWRnZShsYXN0Q2FsbFRpbWUpO31pZihtYXhpbmcpey8vIEhhbmRsZSBpbnZvY2F0aW9ucyBpbiBhIHRpZ2h0IGxvb3AuXG50aW1lcklkPXNldFRpbWVvdXQodGltZXJFeHBpcmVkLHdhaXQpO3JldHVybiBpbnZva2VGdW5jKGxhc3RDYWxsVGltZSk7fX1pZih0aW1lcklkPT09dW5kZWZpbmVkKXt0aW1lcklkPXNldFRpbWVvdXQodGltZXJFeHBpcmVkLHdhaXQpO31yZXR1cm4gcmVzdWx0O31kZWJvdW5jZWQuY2FuY2VsPWNhbmNlbDtkZWJvdW5jZWQuZmx1c2g9Zmx1c2g7cmV0dXJuIGRlYm91bmNlZDt9LyoqXG4gICAgICAgICAqIERlZmVycyBpbnZva2luZyB0aGUgYGZ1bmNgIHVudGlsIHRoZSBjdXJyZW50IGNhbGwgc3RhY2sgaGFzIGNsZWFyZWQuIEFueVxuICAgICAgICAgKiBhZGRpdGlvbmFsIGFyZ3VtZW50cyBhcmUgcHJvdmlkZWQgdG8gYGZ1bmNgIHdoZW4gaXQncyBpbnZva2VkLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gZGVmZXIuXG4gICAgICAgICAqIEBwYXJhbSB7Li4uKn0gW2FyZ3NdIFRoZSBhcmd1bWVudHMgdG8gaW52b2tlIGBmdW5jYCB3aXRoLlxuICAgICAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSB0aW1lciBpZC5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogXy5kZWZlcihmdW5jdGlvbih0ZXh0KSB7XG4gICAgICAgICAqICAgY29uc29sZS5sb2codGV4dCk7XG4gICAgICAgICAqIH0sICdkZWZlcnJlZCcpO1xuICAgICAgICAgKiAvLyA9PiBMb2dzICdkZWZlcnJlZCcgYWZ0ZXIgb25lIG1pbGxpc2Vjb25kLlxuICAgICAgICAgKi92YXIgZGVmZXI9YmFzZVJlc3QoZnVuY3Rpb24oZnVuYyxhcmdzKXtyZXR1cm4gYmFzZURlbGF5KGZ1bmMsMSxhcmdzKTt9KTsvKipcbiAgICAgICAqIEludm9rZXMgYGZ1bmNgIGFmdGVyIGB3YWl0YCBtaWxsaXNlY29uZHMuIEFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyBhcmVcbiAgICAgICAqIHByb3ZpZGVkIHRvIGBmdW5jYCB3aGVuIGl0J3MgaW52b2tlZC5cbiAgICAgICAqXG4gICAgICAgKiBAc3RhdGljXG4gICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICogQHNpbmNlIDAuMS4wXG4gICAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRlbGF5LlxuICAgICAgICogQHBhcmFtIHtudW1iZXJ9IHdhaXQgVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gZGVsYXkgaW52b2NhdGlvbi5cbiAgICAgICAqIEBwYXJhbSB7Li4uKn0gW2FyZ3NdIFRoZSBhcmd1bWVudHMgdG8gaW52b2tlIGBmdW5jYCB3aXRoLlxuICAgICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgdGltZXIgaWQuXG4gICAgICAgKiBAZXhhbXBsZVxuICAgICAgICpcbiAgICAgICAqIF8uZGVsYXkoZnVuY3Rpb24odGV4dCkge1xuICAgICAgICogICBjb25zb2xlLmxvZyh0ZXh0KTtcbiAgICAgICAqIH0sIDEwMDAsICdsYXRlcicpO1xuICAgICAgICogLy8gPT4gTG9ncyAnbGF0ZXInIGFmdGVyIG9uZSBzZWNvbmQuXG4gICAgICAgKi92YXIgZGVsYXk9YmFzZVJlc3QoZnVuY3Rpb24oZnVuYyx3YWl0LGFyZ3Mpe3JldHVybiBiYXNlRGVsYXkoZnVuYyx0b051bWJlcih3YWl0KXx8MCxhcmdzKTt9KTsvKipcbiAgICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggYXJndW1lbnRzIHJldmVyc2VkLlxuICAgICAgICpcbiAgICAgICAqIEBzdGF0aWNcbiAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gZmxpcCBhcmd1bWVudHMgZm9yLlxuICAgICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZmxpcHBlZCBmdW5jdGlvbi5cbiAgICAgICAqIEBleGFtcGxlXG4gICAgICAgKlxuICAgICAgICogdmFyIGZsaXBwZWQgPSBfLmZsaXAoZnVuY3Rpb24oKSB7XG4gICAgICAgKiAgIHJldHVybiBfLnRvQXJyYXkoYXJndW1lbnRzKTtcbiAgICAgICAqIH0pO1xuICAgICAgICpcbiAgICAgICAqIGZsaXBwZWQoJ2EnLCAnYicsICdjJywgJ2QnKTtcbiAgICAgICAqIC8vID0+IFsnZCcsICdjJywgJ2InLCAnYSddXG4gICAgICAgKi9mdW5jdGlvbiBmbGlwKGZ1bmMpe3JldHVybiBjcmVhdGVXcmFwKGZ1bmMsV1JBUF9GTElQX0ZMQUcpO30vKipcbiAgICAgICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgbWVtb2l6ZXMgdGhlIHJlc3VsdCBvZiBgZnVuY2AuIElmIGByZXNvbHZlcmAgaXNcbiAgICAgICAgICogcHJvdmlkZWQsIGl0IGRldGVybWluZXMgdGhlIGNhY2hlIGtleSBmb3Igc3RvcmluZyB0aGUgcmVzdWx0IGJhc2VkIG9uIHRoZVxuICAgICAgICAgKiBhcmd1bWVudHMgcHJvdmlkZWQgdG8gdGhlIG1lbW9pemVkIGZ1bmN0aW9uLiBCeSBkZWZhdWx0LCB0aGUgZmlyc3QgYXJndW1lbnRcbiAgICAgICAgICogcHJvdmlkZWQgdG8gdGhlIG1lbW9pemVkIGZ1bmN0aW9uIGlzIHVzZWQgYXMgdGhlIG1hcCBjYWNoZSBrZXkuIFRoZSBgZnVuY2BcbiAgICAgICAgICogaXMgaW52b2tlZCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqICoqTm90ZToqKiBUaGUgY2FjaGUgaXMgZXhwb3NlZCBhcyB0aGUgYGNhY2hlYCBwcm9wZXJ0eSBvbiB0aGUgbWVtb2l6ZWRcbiAgICAgICAgICogZnVuY3Rpb24uIEl0cyBjcmVhdGlvbiBtYXkgYmUgY3VzdG9taXplZCBieSByZXBsYWNpbmcgdGhlIGBfLm1lbW9pemUuQ2FjaGVgXG4gICAgICAgICAqIGNvbnN0cnVjdG9yIHdpdGggb25lIHdob3NlIGluc3RhbmNlcyBpbXBsZW1lbnQgdGhlXG4gICAgICAgICAqIFtgTWFwYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcHJvcGVydGllcy1vZi10aGUtbWFwLXByb3RvdHlwZS1vYmplY3QpXG4gICAgICAgICAqIG1ldGhvZCBpbnRlcmZhY2Ugb2YgYGNsZWFyYCwgYGRlbGV0ZWAsIGBnZXRgLCBgaGFzYCwgYW5kIGBzZXRgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaGF2ZSBpdHMgb3V0cHV0IG1lbW9pemVkLlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcmVzb2x2ZXJdIFRoZSBmdW5jdGlvbiB0byByZXNvbHZlIHRoZSBjYWNoZSBrZXkuXG4gICAgICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IG1lbW9pemVkIGZ1bmN0aW9uLlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEsICdiJzogMiB9O1xuICAgICAgICAgKiB2YXIgb3RoZXIgPSB7ICdjJzogMywgJ2QnOiA0IH07XG4gICAgICAgICAqXG4gICAgICAgICAqIHZhciB2YWx1ZXMgPSBfLm1lbW9pemUoXy52YWx1ZXMpO1xuICAgICAgICAgKiB2YWx1ZXMob2JqZWN0KTtcbiAgICAgICAgICogLy8gPT4gWzEsIDJdXG4gICAgICAgICAqXG4gICAgICAgICAqIHZhbHVlcyhvdGhlcik7XG4gICAgICAgICAqIC8vID0+IFszLCA0XVxuICAgICAgICAgKlxuICAgICAgICAgKiBvYmplY3QuYSA9IDI7XG4gICAgICAgICAqIHZhbHVlcyhvYmplY3QpO1xuICAgICAgICAgKiAvLyA9PiBbMSwgMl1cbiAgICAgICAgICpcbiAgICAgICAgICogLy8gTW9kaWZ5IHRoZSByZXN1bHQgY2FjaGUuXG4gICAgICAgICAqIHZhbHVlcy5jYWNoZS5zZXQob2JqZWN0LCBbJ2EnLCAnYiddKTtcbiAgICAgICAgICogdmFsdWVzKG9iamVjdCk7XG4gICAgICAgICAqIC8vID0+IFsnYScsICdiJ11cbiAgICAgICAgICpcbiAgICAgICAgICogLy8gUmVwbGFjZSBgXy5tZW1vaXplLkNhY2hlYC5cbiAgICAgICAgICogXy5tZW1vaXplLkNhY2hlID0gV2Vha01hcDtcbiAgICAgICAgICovZnVuY3Rpb24gbWVtb2l6ZShmdW5jLHJlc29sdmVyKXtpZih0eXBlb2YgZnVuYyE9PSdmdW5jdGlvbid8fHJlc29sdmVyIT1udWxsJiZ0eXBlb2YgcmVzb2x2ZXIhPT0nZnVuY3Rpb24nKXt0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7fXZhciBtZW1vaXplZD1mdW5jdGlvbiBtZW1vaXplZCgpe3ZhciBhcmdzPWFyZ3VtZW50cyxrZXk9cmVzb2x2ZXI/cmVzb2x2ZXIuYXBwbHkodGhpcyxhcmdzKTphcmdzWzBdLGNhY2hlPW1lbW9pemVkLmNhY2hlO2lmKGNhY2hlLmhhcyhrZXkpKXtyZXR1cm4gY2FjaGUuZ2V0KGtleSk7fXZhciByZXN1bHQ9ZnVuYy5hcHBseSh0aGlzLGFyZ3MpO21lbW9pemVkLmNhY2hlPWNhY2hlLnNldChrZXkscmVzdWx0KXx8Y2FjaGU7cmV0dXJuIHJlc3VsdDt9O21lbW9pemVkLmNhY2hlPW5ldyhtZW1vaXplLkNhY2hlfHxNYXBDYWNoZSkoKTtyZXR1cm4gbWVtb2l6ZWQ7fS8vIEV4cG9zZSBgTWFwQ2FjaGVgLlxubWVtb2l6ZS5DYWNoZT1NYXBDYWNoZTsvKipcbiAgICAgICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgbmVnYXRlcyB0aGUgcmVzdWx0IG9mIHRoZSBwcmVkaWNhdGUgYGZ1bmNgLiBUaGVcbiAgICAgICAgICogYGZ1bmNgIHByZWRpY2F0ZSBpcyBpbnZva2VkIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIGFuZCBhcmd1bWVudHMgb2YgdGhlXG4gICAgICAgICAqIGNyZWF0ZWQgZnVuY3Rpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQHNpbmNlIDMuMC4wXG4gICAgICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIHByZWRpY2F0ZSB0byBuZWdhdGUuXG4gICAgICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IG5lZ2F0ZWQgZnVuY3Rpb24uXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIGZ1bmN0aW9uIGlzRXZlbihuKSB7XG4gICAgICAgICAqICAgcmV0dXJuIG4gJSAyID09IDA7XG4gICAgICAgICAqIH1cbiAgICAgICAgICpcbiAgICAgICAgICogXy5maWx0ZXIoWzEsIDIsIDMsIDQsIDUsIDZdLCBfLm5lZ2F0ZShpc0V2ZW4pKTtcbiAgICAgICAgICogLy8gPT4gWzEsIDMsIDVdXG4gICAgICAgICAqL2Z1bmN0aW9uIG5lZ2F0ZShwcmVkaWNhdGUpe2lmKHR5cGVvZiBwcmVkaWNhdGUhPT0nZnVuY3Rpb24nKXt0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7fXJldHVybiBmdW5jdGlvbigpe3ZhciBhcmdzPWFyZ3VtZW50cztzd2l0Y2goYXJncy5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4hcHJlZGljYXRlLmNhbGwodGhpcyk7Y2FzZSAxOnJldHVybiFwcmVkaWNhdGUuY2FsbCh0aGlzLGFyZ3NbMF0pO2Nhc2UgMjpyZXR1cm4hcHJlZGljYXRlLmNhbGwodGhpcyxhcmdzWzBdLGFyZ3NbMV0pO2Nhc2UgMzpyZXR1cm4hcHJlZGljYXRlLmNhbGwodGhpcyxhcmdzWzBdLGFyZ3NbMV0sYXJnc1syXSk7fXJldHVybiFwcmVkaWNhdGUuYXBwbHkodGhpcyxhcmdzKTt9O30vKipcbiAgICAgICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaXMgcmVzdHJpY3RlZCB0byBpbnZva2luZyBgZnVuY2Agb25jZS4gUmVwZWF0IGNhbGxzXG4gICAgICAgICAqIHRvIHRoZSBmdW5jdGlvbiByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBpbnZvY2F0aW9uLiBUaGUgYGZ1bmNgIGlzXG4gICAgICAgICAqIGludm9rZWQgd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgYW5kIGFyZ3VtZW50cyBvZiB0aGUgY3JlYXRlZCBmdW5jdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHJlc3RyaWN0LlxuICAgICAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyByZXN0cmljdGVkIGZ1bmN0aW9uLlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiB2YXIgaW5pdGlhbGl6ZSA9IF8ub25jZShjcmVhdGVBcHBsaWNhdGlvbik7XG4gICAgICAgICAqIGluaXRpYWxpemUoKTtcbiAgICAgICAgICogaW5pdGlhbGl6ZSgpO1xuICAgICAgICAgKiAvLyA9PiBgY3JlYXRlQXBwbGljYXRpb25gIGlzIGludm9rZWQgb25jZVxuICAgICAgICAgKi9mdW5jdGlvbiBvbmNlKGZ1bmMpe3JldHVybiBiZWZvcmUoMixmdW5jKTt9LyoqXG4gICAgICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggaXRzIGFyZ3VtZW50cyB0cmFuc2Zvcm1lZC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdyYXAuXG4gICAgICAgICAqIEBwYXJhbSB7Li4uKEZ1bmN0aW9ufEZ1bmN0aW9uW10pfSBbdHJhbnNmb3Jtcz1bXy5pZGVudGl0eV1dXG4gICAgICAgICAqICBUaGUgYXJndW1lbnQgdHJhbnNmb3Jtcy5cbiAgICAgICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIGZ1bmN0aW9uIGRvdWJsZWQobikge1xuICAgICAgICAgKiAgIHJldHVybiBuICogMjtcbiAgICAgICAgICogfVxuICAgICAgICAgKlxuICAgICAgICAgKiBmdW5jdGlvbiBzcXVhcmUobikge1xuICAgICAgICAgKiAgIHJldHVybiBuICogbjtcbiAgICAgICAgICogfVxuICAgICAgICAgKlxuICAgICAgICAgKiB2YXIgZnVuYyA9IF8ub3ZlckFyZ3MoZnVuY3Rpb24oeCwgeSkge1xuICAgICAgICAgKiAgIHJldHVybiBbeCwgeV07XG4gICAgICAgICAqIH0sIFtzcXVhcmUsIGRvdWJsZWRdKTtcbiAgICAgICAgICpcbiAgICAgICAgICogZnVuYyg5LCAzKTtcbiAgICAgICAgICogLy8gPT4gWzgxLCA2XVxuICAgICAgICAgKlxuICAgICAgICAgKiBmdW5jKDEwLCA1KTtcbiAgICAgICAgICogLy8gPT4gWzEwMCwgMTBdXG4gICAgICAgICAqL3ZhciBvdmVyQXJncz1jYXN0UmVzdChmdW5jdGlvbihmdW5jLHRyYW5zZm9ybXMpe3RyYW5zZm9ybXM9dHJhbnNmb3Jtcy5sZW5ndGg9PTEmJmlzQXJyYXkodHJhbnNmb3Jtc1swXSk/YXJyYXlNYXAodHJhbnNmb3Jtc1swXSxiYXNlVW5hcnkoZ2V0SXRlcmF0ZWUoKSkpOmFycmF5TWFwKGJhc2VGbGF0dGVuKHRyYW5zZm9ybXMsMSksYmFzZVVuYXJ5KGdldEl0ZXJhdGVlKCkpKTt2YXIgZnVuY3NMZW5ndGg9dHJhbnNmb3Jtcy5sZW5ndGg7cmV0dXJuIGJhc2VSZXN0KGZ1bmN0aW9uKGFyZ3Mpe3ZhciBpbmRleD0tMSxsZW5ndGg9bmF0aXZlTWluKGFyZ3MubGVuZ3RoLGZ1bmNzTGVuZ3RoKTt3aGlsZSgrK2luZGV4PGxlbmd0aCl7YXJnc1tpbmRleF09dHJhbnNmb3Jtc1tpbmRleF0uY2FsbCh0aGlzLGFyZ3NbaW5kZXhdKTt9cmV0dXJuIGFwcGx5KGZ1bmMsdGhpcyxhcmdzKTt9KTt9KTsvKipcbiAgICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggYHBhcnRpYWxzYCBwcmVwZW5kZWQgdG8gdGhlXG4gICAgICAgKiBhcmd1bWVudHMgaXQgcmVjZWl2ZXMuIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uYmluZGAgZXhjZXB0IGl0IGRvZXMgKipub3QqKlxuICAgICAgICogYWx0ZXIgdGhlIGB0aGlzYCBiaW5kaW5nLlxuICAgICAgICpcbiAgICAgICAqIFRoZSBgXy5wYXJ0aWFsLnBsYWNlaG9sZGVyYCB2YWx1ZSwgd2hpY2ggZGVmYXVsdHMgdG8gYF9gIGluIG1vbm9saXRoaWNcbiAgICAgICAqIGJ1aWxkcywgbWF5IGJlIHVzZWQgYXMgYSBwbGFjZWhvbGRlciBmb3IgcGFydGlhbGx5IGFwcGxpZWQgYXJndW1lbnRzLlxuICAgICAgICpcbiAgICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBkb2Vzbid0IHNldCB0aGUgXCJsZW5ndGhcIiBwcm9wZXJ0eSBvZiBwYXJ0aWFsbHlcbiAgICAgICAqIGFwcGxpZWQgZnVuY3Rpb25zLlxuICAgICAgICpcbiAgICAgICAqIEBzdGF0aWNcbiAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgKiBAc2luY2UgMC4yLjBcbiAgICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcGFydGlhbGx5IGFwcGx5IGFyZ3VtZW50cyB0by5cbiAgICAgICAqIEBwYXJhbSB7Li4uKn0gW3BhcnRpYWxzXSBUaGUgYXJndW1lbnRzIHRvIGJlIHBhcnRpYWxseSBhcHBsaWVkLlxuICAgICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgcGFydGlhbGx5IGFwcGxpZWQgZnVuY3Rpb24uXG4gICAgICAgKiBAZXhhbXBsZVxuICAgICAgICpcbiAgICAgICAqIGZ1bmN0aW9uIGdyZWV0KGdyZWV0aW5nLCBuYW1lKSB7XG4gICAgICAgKiAgIHJldHVybiBncmVldGluZyArICcgJyArIG5hbWU7XG4gICAgICAgKiB9XG4gICAgICAgKlxuICAgICAgICogdmFyIHNheUhlbGxvVG8gPSBfLnBhcnRpYWwoZ3JlZXQsICdoZWxsbycpO1xuICAgICAgICogc2F5SGVsbG9UbygnZnJlZCcpO1xuICAgICAgICogLy8gPT4gJ2hlbGxvIGZyZWQnXG4gICAgICAgKlxuICAgICAgICogLy8gUGFydGlhbGx5IGFwcGxpZWQgd2l0aCBwbGFjZWhvbGRlcnMuXG4gICAgICAgKiB2YXIgZ3JlZXRGcmVkID0gXy5wYXJ0aWFsKGdyZWV0LCBfLCAnZnJlZCcpO1xuICAgICAgICogZ3JlZXRGcmVkKCdoaScpO1xuICAgICAgICogLy8gPT4gJ2hpIGZyZWQnXG4gICAgICAgKi92YXIgcGFydGlhbD1iYXNlUmVzdChmdW5jdGlvbihmdW5jLHBhcnRpYWxzKXt2YXIgaG9sZGVycz1yZXBsYWNlSG9sZGVycyhwYXJ0aWFscyxnZXRIb2xkZXIocGFydGlhbCkpO3JldHVybiBjcmVhdGVXcmFwKGZ1bmMsV1JBUF9QQVJUSUFMX0ZMQUcsdW5kZWZpbmVkLHBhcnRpYWxzLGhvbGRlcnMpO30pOy8qKlxuICAgICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5wYXJ0aWFsYCBleGNlcHQgdGhhdCBwYXJ0aWFsbHkgYXBwbGllZCBhcmd1bWVudHNcbiAgICAgICAqIGFyZSBhcHBlbmRlZCB0byB0aGUgYXJndW1lbnRzIGl0IHJlY2VpdmVzLlxuICAgICAgICpcbiAgICAgICAqIFRoZSBgXy5wYXJ0aWFsUmlnaHQucGxhY2Vob2xkZXJgIHZhbHVlLCB3aGljaCBkZWZhdWx0cyB0byBgX2AgaW4gbW9ub2xpdGhpY1xuICAgICAgICogYnVpbGRzLCBtYXkgYmUgdXNlZCBhcyBhIHBsYWNlaG9sZGVyIGZvciBwYXJ0aWFsbHkgYXBwbGllZCBhcmd1bWVudHMuXG4gICAgICAgKlxuICAgICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGRvZXNuJ3Qgc2V0IHRoZSBcImxlbmd0aFwiIHByb3BlcnR5IG9mIHBhcnRpYWxseVxuICAgICAgICogYXBwbGllZCBmdW5jdGlvbnMuXG4gICAgICAgKlxuICAgICAgICogQHN0YXRpY1xuICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAqIEBzaW5jZSAxLjAuMFxuICAgICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBwYXJ0aWFsbHkgYXBwbHkgYXJndW1lbnRzIHRvLlxuICAgICAgICogQHBhcmFtIHsuLi4qfSBbcGFydGlhbHNdIFRoZSBhcmd1bWVudHMgdG8gYmUgcGFydGlhbGx5IGFwcGxpZWQuXG4gICAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBwYXJ0aWFsbHkgYXBwbGllZCBmdW5jdGlvbi5cbiAgICAgICAqIEBleGFtcGxlXG4gICAgICAgKlxuICAgICAgICogZnVuY3Rpb24gZ3JlZXQoZ3JlZXRpbmcsIG5hbWUpIHtcbiAgICAgICAqICAgcmV0dXJuIGdyZWV0aW5nICsgJyAnICsgbmFtZTtcbiAgICAgICAqIH1cbiAgICAgICAqXG4gICAgICAgKiB2YXIgZ3JlZXRGcmVkID0gXy5wYXJ0aWFsUmlnaHQoZ3JlZXQsICdmcmVkJyk7XG4gICAgICAgKiBncmVldEZyZWQoJ2hpJyk7XG4gICAgICAgKiAvLyA9PiAnaGkgZnJlZCdcbiAgICAgICAqXG4gICAgICAgKiAvLyBQYXJ0aWFsbHkgYXBwbGllZCB3aXRoIHBsYWNlaG9sZGVycy5cbiAgICAgICAqIHZhciBzYXlIZWxsb1RvID0gXy5wYXJ0aWFsUmlnaHQoZ3JlZXQsICdoZWxsbycsIF8pO1xuICAgICAgICogc2F5SGVsbG9UbygnZnJlZCcpO1xuICAgICAgICogLy8gPT4gJ2hlbGxvIGZyZWQnXG4gICAgICAgKi92YXIgcGFydGlhbFJpZ2h0PWJhc2VSZXN0KGZ1bmN0aW9uKGZ1bmMscGFydGlhbHMpe3ZhciBob2xkZXJzPXJlcGxhY2VIb2xkZXJzKHBhcnRpYWxzLGdldEhvbGRlcihwYXJ0aWFsUmlnaHQpKTtyZXR1cm4gY3JlYXRlV3JhcChmdW5jLFdSQVBfUEFSVElBTF9SSUdIVF9GTEFHLHVuZGVmaW5lZCxwYXJ0aWFscyxob2xkZXJzKTt9KTsvKipcbiAgICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggYXJndW1lbnRzIGFycmFuZ2VkIGFjY29yZGluZ1xuICAgICAgICogdG8gdGhlIHNwZWNpZmllZCBgaW5kZXhlc2Agd2hlcmUgdGhlIGFyZ3VtZW50IHZhbHVlIGF0IHRoZSBmaXJzdCBpbmRleCBpc1xuICAgICAgICogcHJvdmlkZWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50LCB0aGUgYXJndW1lbnQgdmFsdWUgYXQgdGhlIHNlY29uZCBpbmRleCBpc1xuICAgICAgICogcHJvdmlkZWQgYXMgdGhlIHNlY29uZCBhcmd1bWVudCwgYW5kIHNvIG9uLlxuICAgICAgICpcbiAgICAgICAqIEBzdGF0aWNcbiAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcmVhcnJhbmdlIGFyZ3VtZW50cyBmb3IuXG4gICAgICAgKiBAcGFyYW0gey4uLihudW1iZXJ8bnVtYmVyW10pfSBpbmRleGVzIFRoZSBhcnJhbmdlZCBhcmd1bWVudCBpbmRleGVzLlxuICAgICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICAgKiBAZXhhbXBsZVxuICAgICAgICpcbiAgICAgICAqIHZhciByZWFyZ2VkID0gXy5yZWFyZyhmdW5jdGlvbihhLCBiLCBjKSB7XG4gICAgICAgKiAgIHJldHVybiBbYSwgYiwgY107XG4gICAgICAgKiB9LCBbMiwgMCwgMV0pO1xuICAgICAgICpcbiAgICAgICAqIHJlYXJnZWQoJ2InLCAnYycsICdhJylcbiAgICAgICAqIC8vID0+IFsnYScsICdiJywgJ2MnXVxuICAgICAgICovdmFyIHJlYXJnPWZsYXRSZXN0KGZ1bmN0aW9uKGZ1bmMsaW5kZXhlcyl7cmV0dXJuIGNyZWF0ZVdyYXAoZnVuYyxXUkFQX1JFQVJHX0ZMQUcsdW5kZWZpbmVkLHVuZGVmaW5lZCx1bmRlZmluZWQsaW5kZXhlcyk7fSk7LyoqXG4gICAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiB0aGVcbiAgICAgICAqIGNyZWF0ZWQgZnVuY3Rpb24gYW5kIGFyZ3VtZW50cyBmcm9tIGBzdGFydGAgYW5kIGJleW9uZCBwcm92aWRlZCBhc1xuICAgICAgICogYW4gYXJyYXkuXG4gICAgICAgKlxuICAgICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGJhc2VkIG9uIHRoZVxuICAgICAgICogW3Jlc3QgcGFyYW1ldGVyXShodHRwczovL21kbi5pby9yZXN0X3BhcmFtZXRlcnMpLlxuICAgICAgICpcbiAgICAgICAqIEBzdGF0aWNcbiAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cbiAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9ZnVuYy5sZW5ndGgtMV0gVGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSByZXN0IHBhcmFtZXRlci5cbiAgICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICAgICAgICogQGV4YW1wbGVcbiAgICAgICAqXG4gICAgICAgKiB2YXIgc2F5ID0gXy5yZXN0KGZ1bmN0aW9uKHdoYXQsIG5hbWVzKSB7XG4gICAgICAgKiAgIHJldHVybiB3aGF0ICsgJyAnICsgXy5pbml0aWFsKG5hbWVzKS5qb2luKCcsICcpICtcbiAgICAgICAqICAgICAoXy5zaXplKG5hbWVzKSA+IDEgPyAnLCAmICcgOiAnJykgKyBfLmxhc3QobmFtZXMpO1xuICAgICAgICogfSk7XG4gICAgICAgKlxuICAgICAgICogc2F5KCdoZWxsbycsICdmcmVkJywgJ2Jhcm5leScsICdwZWJibGVzJyk7XG4gICAgICAgKiAvLyA9PiAnaGVsbG8gZnJlZCwgYmFybmV5LCAmIHBlYmJsZXMnXG4gICAgICAgKi9mdW5jdGlvbiByZXN0KGZ1bmMsc3RhcnQpe2lmKHR5cGVvZiBmdW5jIT09J2Z1bmN0aW9uJyl7dGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO31zdGFydD1zdGFydD09PXVuZGVmaW5lZD9zdGFydDp0b0ludGVnZXIoc3RhcnQpO3JldHVybiBiYXNlUmVzdChmdW5jLHN0YXJ0KTt9LyoqXG4gICAgICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIHRoZVxuICAgICAgICAgKiBjcmVhdGUgZnVuY3Rpb24gYW5kIGFuIGFycmF5IG9mIGFyZ3VtZW50cyBtdWNoIGxpa2VcbiAgICAgICAgICogW2BGdW5jdGlvbiNhcHBseWBdKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1mdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkpLlxuICAgICAgICAgKlxuICAgICAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgYmFzZWQgb24gdGhlXG4gICAgICAgICAqIFtzcHJlYWQgb3BlcmF0b3JdKGh0dHBzOi8vbWRuLmlvL3NwcmVhZF9vcGVyYXRvcikuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQHNpbmNlIDMuMi4wXG4gICAgICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBzcHJlYWQgYXJndW1lbnRzIG92ZXIuXG4gICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9MF0gVGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSBzcHJlYWQuXG4gICAgICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiB2YXIgc2F5ID0gXy5zcHJlYWQoZnVuY3Rpb24od2hvLCB3aGF0KSB7XG4gICAgICAgICAqICAgcmV0dXJuIHdobyArICcgc2F5cyAnICsgd2hhdDtcbiAgICAgICAgICogfSk7XG4gICAgICAgICAqXG4gICAgICAgICAqIHNheShbJ2ZyZWQnLCAnaGVsbG8nXSk7XG4gICAgICAgICAqIC8vID0+ICdmcmVkIHNheXMgaGVsbG8nXG4gICAgICAgICAqXG4gICAgICAgICAqIHZhciBudW1iZXJzID0gUHJvbWlzZS5hbGwoW1xuICAgICAgICAgKiAgIFByb21pc2UucmVzb2x2ZSg0MCksXG4gICAgICAgICAqICAgUHJvbWlzZS5yZXNvbHZlKDM2KVxuICAgICAgICAgKiBdKTtcbiAgICAgICAgICpcbiAgICAgICAgICogbnVtYmVycy50aGVuKF8uc3ByZWFkKGZ1bmN0aW9uKHgsIHkpIHtcbiAgICAgICAgICogICByZXR1cm4geCArIHk7XG4gICAgICAgICAqIH0pKTtcbiAgICAgICAgICogLy8gPT4gYSBQcm9taXNlIG9mIDc2XG4gICAgICAgICAqL2Z1bmN0aW9uIHNwcmVhZChmdW5jLHN0YXJ0KXtpZih0eXBlb2YgZnVuYyE9PSdmdW5jdGlvbicpe3Rocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTt9c3RhcnQ9c3RhcnQ9PW51bGw/MDpuYXRpdmVNYXgodG9JbnRlZ2VyKHN0YXJ0KSwwKTtyZXR1cm4gYmFzZVJlc3QoZnVuY3Rpb24oYXJncyl7dmFyIGFycmF5PWFyZ3Nbc3RhcnRdLG90aGVyQXJncz1jYXN0U2xpY2UoYXJncywwLHN0YXJ0KTtpZihhcnJheSl7YXJyYXlQdXNoKG90aGVyQXJncyxhcnJheSk7fXJldHVybiBhcHBseShmdW5jLHRoaXMsb3RoZXJBcmdzKTt9KTt9LyoqXG4gICAgICAgICAqIENyZWF0ZXMgYSB0aHJvdHRsZWQgZnVuY3Rpb24gdGhhdCBvbmx5IGludm9rZXMgYGZ1bmNgIGF0IG1vc3Qgb25jZSBwZXJcbiAgICAgICAgICogZXZlcnkgYHdhaXRgIG1pbGxpc2Vjb25kcy4gVGhlIHRocm90dGxlZCBmdW5jdGlvbiBjb21lcyB3aXRoIGEgYGNhbmNlbGBcbiAgICAgICAgICogbWV0aG9kIHRvIGNhbmNlbCBkZWxheWVkIGBmdW5jYCBpbnZvY2F0aW9ucyBhbmQgYSBgZmx1c2hgIG1ldGhvZCB0b1xuICAgICAgICAgKiBpbW1lZGlhdGVseSBpbnZva2UgdGhlbS4gUHJvdmlkZSBgb3B0aW9uc2AgdG8gaW5kaWNhdGUgd2hldGhlciBgZnVuY2BcbiAgICAgICAgICogc2hvdWxkIGJlIGludm9rZWQgb24gdGhlIGxlYWRpbmcgYW5kL29yIHRyYWlsaW5nIGVkZ2Ugb2YgdGhlIGB3YWl0YFxuICAgICAgICAgKiB0aW1lb3V0LiBUaGUgYGZ1bmNgIGlzIGludm9rZWQgd2l0aCB0aGUgbGFzdCBhcmd1bWVudHMgcHJvdmlkZWQgdG8gdGhlXG4gICAgICAgICAqIHRocm90dGxlZCBmdW5jdGlvbi4gU3Vic2VxdWVudCBjYWxscyB0byB0aGUgdGhyb3R0bGVkIGZ1bmN0aW9uIHJldHVybiB0aGVcbiAgICAgICAgICogcmVzdWx0IG9mIHRoZSBsYXN0IGBmdW5jYCBpbnZvY2F0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiAqKk5vdGU6KiogSWYgYGxlYWRpbmdgIGFuZCBgdHJhaWxpbmdgIG9wdGlvbnMgYXJlIGB0cnVlYCwgYGZ1bmNgIGlzXG4gICAgICAgICAqIGludm9rZWQgb24gdGhlIHRyYWlsaW5nIGVkZ2Ugb2YgdGhlIHRpbWVvdXQgb25seSBpZiB0aGUgdGhyb3R0bGVkIGZ1bmN0aW9uXG4gICAgICAgICAqIGlzIGludm9rZWQgbW9yZSB0aGFuIG9uY2UgZHVyaW5nIHRoZSBgd2FpdGAgdGltZW91dC5cbiAgICAgICAgICpcbiAgICAgICAgICogSWYgYHdhaXRgIGlzIGAwYCBhbmQgYGxlYWRpbmdgIGlzIGBmYWxzZWAsIGBmdW5jYCBpbnZvY2F0aW9uIGlzIGRlZmVycmVkXG4gICAgICAgICAqIHVudGlsIHRvIHRoZSBuZXh0IHRpY2ssIHNpbWlsYXIgdG8gYHNldFRpbWVvdXRgIHdpdGggYSB0aW1lb3V0IG9mIGAwYC5cbiAgICAgICAgICpcbiAgICAgICAgICogU2VlIFtEYXZpZCBDb3JiYWNobydzIGFydGljbGVdKGh0dHBzOi8vY3NzLXRyaWNrcy5jb20vZGVib3VuY2luZy10aHJvdHRsaW5nLWV4cGxhaW5lZC1leGFtcGxlcy8pXG4gICAgICAgICAqIGZvciBkZXRhaWxzIG92ZXIgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gYF8udGhyb3R0bGVgIGFuZCBgXy5kZWJvdW5jZWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQHNpbmNlIDAuMS4wXG4gICAgICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB0aHJvdHRsZS5cbiAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IFt3YWl0PTBdIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHRocm90dGxlIGludm9jYXRpb25zIHRvLlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIFRoZSBvcHRpb25zIG9iamVjdC5cbiAgICAgICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5sZWFkaW5nPXRydWVdXG4gICAgICAgICAqICBTcGVjaWZ5IGludm9raW5nIG9uIHRoZSBsZWFkaW5nIGVkZ2Ugb2YgdGhlIHRpbWVvdXQuXG4gICAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMudHJhaWxpbmc9dHJ1ZV1cbiAgICAgICAgICogIFNwZWNpZnkgaW52b2tpbmcgb24gdGhlIHRyYWlsaW5nIGVkZ2Ugb2YgdGhlIHRpbWVvdXQuXG4gICAgICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHRocm90dGxlZCBmdW5jdGlvbi5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogLy8gQXZvaWQgZXhjZXNzaXZlbHkgdXBkYXRpbmcgdGhlIHBvc2l0aW9uIHdoaWxlIHNjcm9sbGluZy5cbiAgICAgICAgICogalF1ZXJ5KHdpbmRvdykub24oJ3Njcm9sbCcsIF8udGhyb3R0bGUodXBkYXRlUG9zaXRpb24sIDEwMCkpO1xuICAgICAgICAgKlxuICAgICAgICAgKiAvLyBJbnZva2UgYHJlbmV3VG9rZW5gIHdoZW4gdGhlIGNsaWNrIGV2ZW50IGlzIGZpcmVkLCBidXQgbm90IG1vcmUgdGhhbiBvbmNlIGV2ZXJ5IDUgbWludXRlcy5cbiAgICAgICAgICogdmFyIHRocm90dGxlZCA9IF8udGhyb3R0bGUocmVuZXdUb2tlbiwgMzAwMDAwLCB7ICd0cmFpbGluZyc6IGZhbHNlIH0pO1xuICAgICAgICAgKiBqUXVlcnkoZWxlbWVudCkub24oJ2NsaWNrJywgdGhyb3R0bGVkKTtcbiAgICAgICAgICpcbiAgICAgICAgICogLy8gQ2FuY2VsIHRoZSB0cmFpbGluZyB0aHJvdHRsZWQgaW52b2NhdGlvbi5cbiAgICAgICAgICogalF1ZXJ5KHdpbmRvdykub24oJ3BvcHN0YXRlJywgdGhyb3R0bGVkLmNhbmNlbCk7XG4gICAgICAgICAqL2Z1bmN0aW9uIHRocm90dGxlKGZ1bmMsd2FpdCxvcHRpb25zKXt2YXIgbGVhZGluZz10cnVlLHRyYWlsaW5nPXRydWU7aWYodHlwZW9mIGZ1bmMhPT0nZnVuY3Rpb24nKXt0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7fWlmKGlzT2JqZWN0KG9wdGlvbnMpKXtsZWFkaW5nPSdsZWFkaW5nJ2luIG9wdGlvbnM/ISFvcHRpb25zLmxlYWRpbmc6bGVhZGluZzt0cmFpbGluZz0ndHJhaWxpbmcnaW4gb3B0aW9ucz8hIW9wdGlvbnMudHJhaWxpbmc6dHJhaWxpbmc7fXJldHVybiBkZWJvdW5jZShmdW5jLHdhaXQse2xlYWRpbmc6bGVhZGluZyxtYXhXYWl0OndhaXQsdHJhaWxpbmc6dHJhaWxpbmd9KTt9LyoqXG4gICAgICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGFjY2VwdHMgdXAgdG8gb25lIGFyZ3VtZW50LCBpZ25vcmluZyBhbnlcbiAgICAgICAgICogYWRkaXRpb25hbCBhcmd1bWVudHMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQHNpbmNlIDQuMC4wXG4gICAgICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjYXAgYXJndW1lbnRzIGZvci5cbiAgICAgICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY2FwcGVkIGZ1bmN0aW9uLlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLm1hcChbJzYnLCAnOCcsICcxMCddLCBfLnVuYXJ5KHBhcnNlSW50KSk7XG4gICAgICAgICAqIC8vID0+IFs2LCA4LCAxMF1cbiAgICAgICAgICovZnVuY3Rpb24gdW5hcnkoZnVuYyl7cmV0dXJuIGFyeShmdW5jLDEpO30vKipcbiAgICAgICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcHJvdmlkZXMgYHZhbHVlYCB0byBgd3JhcHBlcmAgYXMgaXRzIGZpcnN0XG4gICAgICAgICAqIGFyZ3VtZW50LiBBbnkgYWRkaXRpb25hbCBhcmd1bWVudHMgcHJvdmlkZWQgdG8gdGhlIGZ1bmN0aW9uIGFyZSBhcHBlbmRlZFxuICAgICAgICAgKiB0byB0aG9zZSBwcm92aWRlZCB0byB0aGUgYHdyYXBwZXJgLiBUaGUgd3JhcHBlciBpcyBpbnZva2VkIHdpdGggdGhlIGB0aGlzYFxuICAgICAgICAgKiBiaW5kaW5nIG9mIHRoZSBjcmVhdGVkIGZ1bmN0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gd3JhcC5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3dyYXBwZXI9aWRlbnRpdHldIFRoZSB3cmFwcGVyIGZ1bmN0aW9uLlxuICAgICAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogdmFyIHAgPSBfLndyYXAoXy5lc2NhcGUsIGZ1bmN0aW9uKGZ1bmMsIHRleHQpIHtcbiAgICAgICAgICogICByZXR1cm4gJzxwPicgKyBmdW5jKHRleHQpICsgJzwvcD4nO1xuICAgICAgICAgKiB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogcCgnZnJlZCwgYmFybmV5LCAmIHBlYmJsZXMnKTtcbiAgICAgICAgICogLy8gPT4gJzxwPmZyZWQsIGJhcm5leSwgJmFtcDsgcGViYmxlczwvcD4nXG4gICAgICAgICAqL2Z1bmN0aW9uIHdyYXAodmFsdWUsd3JhcHBlcil7cmV0dXJuIHBhcnRpYWwoY2FzdEZ1bmN0aW9uKHdyYXBwZXIpLHZhbHVlKTt9LyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8vKipcbiAgICAgICAgICogQ2FzdHMgYHZhbHVlYCBhcyBhbiBhcnJheSBpZiBpdCdzIG5vdCBvbmUuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQHNpbmNlIDQuNC4wXG4gICAgICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gICAgICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY2FzdCBhcnJheS5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogXy5jYXN0QXJyYXkoMSk7XG4gICAgICAgICAqIC8vID0+IFsxXVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLmNhc3RBcnJheSh7ICdhJzogMSB9KTtcbiAgICAgICAgICogLy8gPT4gW3sgJ2EnOiAxIH1dXG4gICAgICAgICAqXG4gICAgICAgICAqIF8uY2FzdEFycmF5KCdhYmMnKTtcbiAgICAgICAgICogLy8gPT4gWydhYmMnXVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLmNhc3RBcnJheShudWxsKTtcbiAgICAgICAgICogLy8gPT4gW251bGxdXG4gICAgICAgICAqXG4gICAgICAgICAqIF8uY2FzdEFycmF5KHVuZGVmaW5lZCk7XG4gICAgICAgICAqIC8vID0+IFt1bmRlZmluZWRdXG4gICAgICAgICAqXG4gICAgICAgICAqIF8uY2FzdEFycmF5KCk7XG4gICAgICAgICAqIC8vID0+IFtdXG4gICAgICAgICAqXG4gICAgICAgICAqIHZhciBhcnJheSA9IFsxLCAyLCAzXTtcbiAgICAgICAgICogY29uc29sZS5sb2coXy5jYXN0QXJyYXkoYXJyYXkpID09PSBhcnJheSk7XG4gICAgICAgICAqIC8vID0+IHRydWVcbiAgICAgICAgICovZnVuY3Rpb24gY2FzdEFycmF5KCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpe3JldHVybltdO312YXIgdmFsdWU9YXJndW1lbnRzWzBdO3JldHVybiBpc0FycmF5KHZhbHVlKT92YWx1ZTpbdmFsdWVdO30vKipcbiAgICAgICAgICogQ3JlYXRlcyBhIHNoYWxsb3cgY2xvbmUgb2YgYHZhbHVlYC5cbiAgICAgICAgICpcbiAgICAgICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGxvb3NlbHkgYmFzZWQgb24gdGhlXG4gICAgICAgICAqIFtzdHJ1Y3R1cmVkIGNsb25lIGFsZ29yaXRobV0oaHR0cHM6Ly9tZG4uaW8vU3RydWN0dXJlZF9jbG9uZV9hbGdvcml0aG0pXG4gICAgICAgICAqIGFuZCBzdXBwb3J0cyBjbG9uaW5nIGFycmF5cywgYXJyYXkgYnVmZmVycywgYm9vbGVhbnMsIGRhdGUgb2JqZWN0cywgbWFwcyxcbiAgICAgICAgICogbnVtYmVycywgYE9iamVjdGAgb2JqZWN0cywgcmVnZXhlcywgc2V0cywgc3RyaW5ncywgc3ltYm9scywgYW5kIHR5cGVkXG4gICAgICAgICAqIGFycmF5cy4gVGhlIG93biBlbnVtZXJhYmxlIHByb3BlcnRpZXMgb2YgYGFyZ3VtZW50c2Agb2JqZWN0cyBhcmUgY2xvbmVkXG4gICAgICAgICAqIGFzIHBsYWluIG9iamVjdHMuIEFuIGVtcHR5IG9iamVjdCBpcyByZXR1cm5lZCBmb3IgdW5jbG9uZWFibGUgdmFsdWVzIHN1Y2hcbiAgICAgICAgICogYXMgZXJyb3Igb2JqZWN0cywgZnVuY3Rpb25zLCBET00gbm9kZXMsIGFuZCBXZWFrTWFwcy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2xvbmUuXG4gICAgICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBjbG9uZWQgdmFsdWUuXG4gICAgICAgICAqIEBzZWUgXy5jbG9uZURlZXBcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogdmFyIG9iamVjdHMgPSBbeyAnYSc6IDEgfSwgeyAnYic6IDIgfV07XG4gICAgICAgICAqXG4gICAgICAgICAqIHZhciBzaGFsbG93ID0gXy5jbG9uZShvYmplY3RzKTtcbiAgICAgICAgICogY29uc29sZS5sb2coc2hhbGxvd1swXSA9PT0gb2JqZWN0c1swXSk7XG4gICAgICAgICAqIC8vID0+IHRydWVcbiAgICAgICAgICovZnVuY3Rpb24gY2xvbmUodmFsdWUpe3JldHVybiBiYXNlQ2xvbmUodmFsdWUsQ0xPTkVfU1lNQk9MU19GTEFHKTt9LyoqXG4gICAgICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uY2xvbmVgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGN1c3RvbWl6ZXJgIHdoaWNoXG4gICAgICAgICAqIGlzIGludm9rZWQgdG8gcHJvZHVjZSB0aGUgY2xvbmVkIHZhbHVlLiBJZiBgY3VzdG9taXplcmAgcmV0dXJucyBgdW5kZWZpbmVkYCxcbiAgICAgICAgICogY2xvbmluZyBpcyBoYW5kbGVkIGJ5IHRoZSBtZXRob2QgaW5zdGVhZC4gVGhlIGBjdXN0b21pemVyYCBpcyBpbnZva2VkIHdpdGhcbiAgICAgICAgICogdXAgdG8gZm91ciBhcmd1bWVudHM7ICh2YWx1ZSBbLCBpbmRleHxrZXksIG9iamVjdCwgc3RhY2tdKS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2xvbmUuXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNsb25pbmcuXG4gICAgICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBjbG9uZWQgdmFsdWUuXG4gICAgICAgICAqIEBzZWUgXy5jbG9uZURlZXBXaXRoXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIGZ1bmN0aW9uIGN1c3RvbWl6ZXIodmFsdWUpIHtcbiAgICAgICAgICogICBpZiAoXy5pc0VsZW1lbnQodmFsdWUpKSB7XG4gICAgICAgICAqICAgICByZXR1cm4gdmFsdWUuY2xvbmVOb2RlKGZhbHNlKTtcbiAgICAgICAgICogICB9XG4gICAgICAgICAqIH1cbiAgICAgICAgICpcbiAgICAgICAgICogdmFyIGVsID0gXy5jbG9uZVdpdGgoZG9jdW1lbnQuYm9keSwgY3VzdG9taXplcik7XG4gICAgICAgICAqXG4gICAgICAgICAqIGNvbnNvbGUubG9nKGVsID09PSBkb2N1bWVudC5ib2R5KTtcbiAgICAgICAgICogLy8gPT4gZmFsc2VcbiAgICAgICAgICogY29uc29sZS5sb2coZWwubm9kZU5hbWUpO1xuICAgICAgICAgKiAvLyA9PiAnQk9EWSdcbiAgICAgICAgICogY29uc29sZS5sb2coZWwuY2hpbGROb2Rlcy5sZW5ndGgpO1xuICAgICAgICAgKiAvLyA9PiAwXG4gICAgICAgICAqL2Z1bmN0aW9uIGNsb25lV2l0aCh2YWx1ZSxjdXN0b21pemVyKXtjdXN0b21pemVyPXR5cGVvZiBjdXN0b21pemVyPT09J2Z1bmN0aW9uJz9jdXN0b21pemVyOnVuZGVmaW5lZDtyZXR1cm4gYmFzZUNsb25lKHZhbHVlLENMT05FX1NZTUJPTFNfRkxBRyxjdXN0b21pemVyKTt9LyoqXG4gICAgICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uY2xvbmVgIGV4Y2VwdCB0aGF0IGl0IHJlY3Vyc2l2ZWx5IGNsb25lcyBgdmFsdWVgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSAxLjAuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byByZWN1cnNpdmVseSBjbG9uZS5cbiAgICAgICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGRlZXAgY2xvbmVkIHZhbHVlLlxuICAgICAgICAgKiBAc2VlIF8uY2xvbmVcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogdmFyIG9iamVjdHMgPSBbeyAnYSc6IDEgfSwgeyAnYic6IDIgfV07XG4gICAgICAgICAqXG4gICAgICAgICAqIHZhciBkZWVwID0gXy5jbG9uZURlZXAob2JqZWN0cyk7XG4gICAgICAgICAqIGNvbnNvbGUubG9nKGRlZXBbMF0gPT09IG9iamVjdHNbMF0pO1xuICAgICAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAgICAgKi9mdW5jdGlvbiBjbG9uZURlZXAodmFsdWUpe3JldHVybiBiYXNlQ2xvbmUodmFsdWUsQ0xPTkVfREVFUF9GTEFHfENMT05FX1NZTUJPTFNfRkxBRyk7fS8qKlxuICAgICAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmNsb25lV2l0aGAgZXhjZXB0IHRoYXQgaXQgcmVjdXJzaXZlbHkgY2xvbmVzIGB2YWx1ZWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQHNpbmNlIDQuMC4wXG4gICAgICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHJlY3Vyc2l2ZWx5IGNsb25lLlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjbG9uaW5nLlxuICAgICAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZGVlcCBjbG9uZWQgdmFsdWUuXG4gICAgICAgICAqIEBzZWUgXy5jbG9uZVdpdGhcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogZnVuY3Rpb24gY3VzdG9taXplcih2YWx1ZSkge1xuICAgICAgICAgKiAgIGlmIChfLmlzRWxlbWVudCh2YWx1ZSkpIHtcbiAgICAgICAgICogICAgIHJldHVybiB2YWx1ZS5jbG9uZU5vZGUodHJ1ZSk7XG4gICAgICAgICAqICAgfVxuICAgICAgICAgKiB9XG4gICAgICAgICAqXG4gICAgICAgICAqIHZhciBlbCA9IF8uY2xvbmVEZWVwV2l0aChkb2N1bWVudC5ib2R5LCBjdXN0b21pemVyKTtcbiAgICAgICAgICpcbiAgICAgICAgICogY29uc29sZS5sb2coZWwgPT09IGRvY3VtZW50LmJvZHkpO1xuICAgICAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAgICAgKiBjb25zb2xlLmxvZyhlbC5ub2RlTmFtZSk7XG4gICAgICAgICAqIC8vID0+ICdCT0RZJ1xuICAgICAgICAgKiBjb25zb2xlLmxvZyhlbC5jaGlsZE5vZGVzLmxlbmd0aCk7XG4gICAgICAgICAqIC8vID0+IDIwXG4gICAgICAgICAqL2Z1bmN0aW9uIGNsb25lRGVlcFdpdGgodmFsdWUsY3VzdG9taXplcil7Y3VzdG9taXplcj10eXBlb2YgY3VzdG9taXplcj09PSdmdW5jdGlvbic/Y3VzdG9taXplcjp1bmRlZmluZWQ7cmV0dXJuIGJhc2VDbG9uZSh2YWx1ZSxDTE9ORV9ERUVQX0ZMQUd8Q0xPTkVfU1lNQk9MU19GTEFHLGN1c3RvbWl6ZXIpO30vKipcbiAgICAgICAgICogQ2hlY2tzIGlmIGBvYmplY3RgIGNvbmZvcm1zIHRvIGBzb3VyY2VgIGJ5IGludm9raW5nIHRoZSBwcmVkaWNhdGVcbiAgICAgICAgICogcHJvcGVydGllcyBvZiBgc291cmNlYCB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIHByb3BlcnR5IHZhbHVlcyBvZiBgb2JqZWN0YC5cbiAgICAgICAgICpcbiAgICAgICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGVxdWl2YWxlbnQgdG8gYF8uY29uZm9ybXNgIHdoZW4gYHNvdXJjZWAgaXNcbiAgICAgICAgICogcGFydGlhbGx5IGFwcGxpZWQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQHNpbmNlIDQuMTQuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaW5zcGVjdC5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IG9mIHByb3BlcnR5IHByZWRpY2F0ZXMgdG8gY29uZm9ybSB0by5cbiAgICAgICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBvYmplY3RgIGNvbmZvcm1zLCBlbHNlIGBmYWxzZWAuXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIHZhciBvYmplY3QgPSB7ICdhJzogMSwgJ2InOiAyIH07XG4gICAgICAgICAqXG4gICAgICAgICAqIF8uY29uZm9ybXNUbyhvYmplY3QsIHsgJ2InOiBmdW5jdGlvbihuKSB7IHJldHVybiBuID4gMTsgfSB9KTtcbiAgICAgICAgICogLy8gPT4gdHJ1ZVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLmNvbmZvcm1zVG8ob2JqZWN0LCB7ICdiJzogZnVuY3Rpb24obikgeyByZXR1cm4gbiA+IDI7IH0gfSk7XG4gICAgICAgICAqIC8vID0+IGZhbHNlXG4gICAgICAgICAqL2Z1bmN0aW9uIGNvbmZvcm1zVG8ob2JqZWN0LHNvdXJjZSl7cmV0dXJuIHNvdXJjZT09bnVsbHx8YmFzZUNvbmZvcm1zVG8ob2JqZWN0LHNvdXJjZSxrZXlzKHNvdXJjZSkpO30vKipcbiAgICAgICAgICogUGVyZm9ybXMgYVxuICAgICAgICAgKiBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICAgICAgICAgKiBjb21wYXJpc29uIGJldHdlZW4gdHdvIHZhbHVlcyB0byBkZXRlcm1pbmUgaWYgdGhleSBhcmUgZXF1aXZhbGVudC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAgICAgICAgICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAgICAgICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gICAgICAgICAqIHZhciBvdGhlciA9IHsgJ2EnOiAxIH07XG4gICAgICAgICAqXG4gICAgICAgICAqIF8uZXEob2JqZWN0LCBvYmplY3QpO1xuICAgICAgICAgKiAvLyA9PiB0cnVlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8uZXEob2JqZWN0LCBvdGhlcik7XG4gICAgICAgICAqIC8vID0+IGZhbHNlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8uZXEoJ2EnLCAnYScpO1xuICAgICAgICAgKiAvLyA9PiB0cnVlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8uZXEoJ2EnLCBPYmplY3QoJ2EnKSk7XG4gICAgICAgICAqIC8vID0+IGZhbHNlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8uZXEoTmFOLCBOYU4pO1xuICAgICAgICAgKiAvLyA9PiB0cnVlXG4gICAgICAgICAqL2Z1bmN0aW9uIGVxKHZhbHVlLG90aGVyKXtyZXR1cm4gdmFsdWU9PT1vdGhlcnx8dmFsdWUhPT12YWx1ZSYmb3RoZXIhPT1vdGhlcjt9LyoqXG4gICAgICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGdyZWF0ZXIgdGhhbiBgb3RoZXJgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSAzLjkuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAgICAgKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBncmVhdGVyIHRoYW4gYG90aGVyYCxcbiAgICAgICAgICogIGVsc2UgYGZhbHNlYC5cbiAgICAgICAgICogQHNlZSBfLmx0XG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8uZ3QoMywgMSk7XG4gICAgICAgICAqIC8vID0+IHRydWVcbiAgICAgICAgICpcbiAgICAgICAgICogXy5ndCgzLCAzKTtcbiAgICAgICAgICogLy8gPT4gZmFsc2VcbiAgICAgICAgICpcbiAgICAgICAgICogXy5ndCgxLCAzKTtcbiAgICAgICAgICogLy8gPT4gZmFsc2VcbiAgICAgICAgICovdmFyIGd0PWNyZWF0ZVJlbGF0aW9uYWxPcGVyYXRpb24oYmFzZUd0KTsvKipcbiAgICAgICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGBvdGhlcmAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQHNpbmNlIDMuOS4wXG4gICAgICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gICAgICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0b1xuICAgICAgICAgKiAgYG90aGVyYCwgZWxzZSBgZmFsc2VgLlxuICAgICAgICAgKiBAc2VlIF8ubHRlXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8uZ3RlKDMsIDEpO1xuICAgICAgICAgKiAvLyA9PiB0cnVlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8uZ3RlKDMsIDMpO1xuICAgICAgICAgKiAvLyA9PiB0cnVlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8uZ3RlKDEsIDMpO1xuICAgICAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAgICAgKi92YXIgZ3RlPWNyZWF0ZVJlbGF0aW9uYWxPcGVyYXRpb24oZnVuY3Rpb24odmFsdWUsb3RoZXIpe3JldHVybiB2YWx1ZT49b3RoZXI7fSk7LyoqXG4gICAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBsaWtlbHkgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LlxuICAgICAgICpcbiAgICAgICAqIEBzdGF0aWNcbiAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGBhcmd1bWVudHNgIG9iamVjdCxcbiAgICAgICAqICBlbHNlIGBmYWxzZWAuXG4gICAgICAgKiBAZXhhbXBsZVxuICAgICAgICpcbiAgICAgICAqIF8uaXNBcmd1bWVudHMoZnVuY3Rpb24oKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSk7XG4gICAgICAgKiAvLyA9PiB0cnVlXG4gICAgICAgKlxuICAgICAgICogXy5pc0FyZ3VtZW50cyhbMSwgMiwgM10pO1xuICAgICAgICogLy8gPT4gZmFsc2VcbiAgICAgICAqL3ZhciBpc0FyZ3VtZW50cz1iYXNlSXNBcmd1bWVudHMoZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzO30oKSk/YmFzZUlzQXJndW1lbnRzOmZ1bmN0aW9uKHZhbHVlKXtyZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSYmaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwnY2FsbGVlJykmJiFwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHZhbHVlLCdjYWxsZWUnKTt9Oy8qKlxuICAgICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhbiBgQXJyYXlgIG9iamVjdC5cbiAgICAgICAqXG4gICAgICAgKiBAc3RhdGljXG4gICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICogQHNpbmNlIDAuMS4wXG4gICAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICAgICAgICogQGV4YW1wbGVcbiAgICAgICAqXG4gICAgICAgKiBfLmlzQXJyYXkoWzEsIDIsIDNdKTtcbiAgICAgICAqIC8vID0+IHRydWVcbiAgICAgICAqXG4gICAgICAgKiBfLmlzQXJyYXkoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gICAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAgICpcbiAgICAgICAqIF8uaXNBcnJheSgnYWJjJyk7XG4gICAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAgICpcbiAgICAgICAqIF8uaXNBcnJheShfLm5vb3ApO1xuICAgICAgICogLy8gPT4gZmFsc2VcbiAgICAgICAqL3ZhciBpc0FycmF5PUFycmF5LmlzQXJyYXk7LyoqXG4gICAgICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYW4gYEFycmF5QnVmZmVyYCBvYmplY3QuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQHNpbmNlIDQuMy4wXG4gICAgICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBhcnJheSBidWZmZXIsIGVsc2UgYGZhbHNlYC5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogXy5pc0FycmF5QnVmZmVyKG5ldyBBcnJheUJ1ZmZlcigyKSk7XG4gICAgICAgICAqIC8vID0+IHRydWVcbiAgICAgICAgICpcbiAgICAgICAgICogXy5pc0FycmF5QnVmZmVyKG5ldyBBcnJheSgyKSk7XG4gICAgICAgICAqIC8vID0+IGZhbHNlXG4gICAgICAgICAqL3ZhciBpc0FycmF5QnVmZmVyPW5vZGVJc0FycmF5QnVmZmVyP2Jhc2VVbmFyeShub2RlSXNBcnJheUJ1ZmZlcik6YmFzZUlzQXJyYXlCdWZmZXI7LyoqXG4gICAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLiBBIHZhbHVlIGlzIGNvbnNpZGVyZWQgYXJyYXktbGlrZSBpZiBpdCdzXG4gICAgICAgKiBub3QgYSBmdW5jdGlvbiBhbmQgaGFzIGEgYHZhbHVlLmxlbmd0aGAgdGhhdCdzIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIG9yXG4gICAgICAgKiBlcXVhbCB0byBgMGAgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJgLlxuICAgICAgICpcbiAgICAgICAqIEBzdGF0aWNcbiAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFycmF5LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAgICAgICAqIEBleGFtcGxlXG4gICAgICAgKlxuICAgICAgICogXy5pc0FycmF5TGlrZShbMSwgMiwgM10pO1xuICAgICAgICogLy8gPT4gdHJ1ZVxuICAgICAgICpcbiAgICAgICAqIF8uaXNBcnJheUxpa2UoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gICAgICAgKiAvLyA9PiB0cnVlXG4gICAgICAgKlxuICAgICAgICogXy5pc0FycmF5TGlrZSgnYWJjJyk7XG4gICAgICAgKiAvLyA9PiB0cnVlXG4gICAgICAgKlxuICAgICAgICogXy5pc0FycmF5TGlrZShfLm5vb3ApO1xuICAgICAgICogLy8gPT4gZmFsc2VcbiAgICAgICAqL2Z1bmN0aW9uIGlzQXJyYXlMaWtlKHZhbHVlKXtyZXR1cm4gdmFsdWUhPW51bGwmJmlzTGVuZ3RoKHZhbHVlLmxlbmd0aCkmJiFpc0Z1bmN0aW9uKHZhbHVlKTt9LyoqXG4gICAgICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uaXNBcnJheUxpa2VgIGV4Y2VwdCB0aGF0IGl0IGFsc28gY2hlY2tzIGlmIGB2YWx1ZWBcbiAgICAgICAgICogaXMgYW4gb2JqZWN0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYXJyYXktbGlrZSBvYmplY3QsXG4gICAgICAgICAqICBlbHNlIGBmYWxzZWAuXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8uaXNBcnJheUxpa2VPYmplY3QoWzEsIDIsIDNdKTtcbiAgICAgICAgICogLy8gPT4gdHJ1ZVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLmlzQXJyYXlMaWtlT2JqZWN0KGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICAgICAgICAgKiAvLyA9PiB0cnVlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8uaXNBcnJheUxpa2VPYmplY3QoJ2FiYycpO1xuICAgICAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLmlzQXJyYXlMaWtlT2JqZWN0KF8ubm9vcCk7XG4gICAgICAgICAqIC8vID0+IGZhbHNlXG4gICAgICAgICAqL2Z1bmN0aW9uIGlzQXJyYXlMaWtlT2JqZWN0KHZhbHVlKXtyZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSYmaXNBcnJheUxpa2UodmFsdWUpO30vKipcbiAgICAgICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGJvb2xlYW4gcHJpbWl0aXZlIG9yIG9iamVjdC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgYm9vbGVhbiwgZWxzZSBgZmFsc2VgLlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLmlzQm9vbGVhbihmYWxzZSk7XG4gICAgICAgICAqIC8vID0+IHRydWVcbiAgICAgICAgICpcbiAgICAgICAgICogXy5pc0Jvb2xlYW4obnVsbCk7XG4gICAgICAgICAqIC8vID0+IGZhbHNlXG4gICAgICAgICAqL2Z1bmN0aW9uIGlzQm9vbGVhbih2YWx1ZSl7cmV0dXJuIHZhbHVlPT09dHJ1ZXx8dmFsdWU9PT1mYWxzZXx8aXNPYmplY3RMaWtlKHZhbHVlKSYmYmFzZUdldFRhZyh2YWx1ZSk9PWJvb2xUYWc7fS8qKlxuICAgICAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIGJ1ZmZlci5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAc2luY2UgNC4zLjBcbiAgICAgICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLCBlbHNlIGBmYWxzZWAuXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8uaXNCdWZmZXIobmV3IEJ1ZmZlcigyKSk7XG4gICAgICAgICAqIC8vID0+IHRydWVcbiAgICAgICAgICpcbiAgICAgICAgICogXy5pc0J1ZmZlcihuZXcgVWludDhBcnJheSgyKSk7XG4gICAgICAgICAqIC8vID0+IGZhbHNlXG4gICAgICAgICAqL3ZhciBpc0J1ZmZlcj1uYXRpdmVJc0J1ZmZlcnx8c3R1YkZhbHNlOy8qKlxuICAgICAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYERhdGVgIG9iamVjdC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgZGF0ZSBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogXy5pc0RhdGUobmV3IERhdGUpO1xuICAgICAgICAgKiAvLyA9PiB0cnVlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8uaXNEYXRlKCdNb24gQXByaWwgMjMgMjAxMicpO1xuICAgICAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAgICAgKi92YXIgaXNEYXRlPW5vZGVJc0RhdGU/YmFzZVVuYXJ5KG5vZGVJc0RhdGUpOmJhc2VJc0RhdGU7LyoqXG4gICAgICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxpa2VseSBhIERPTSBlbGVtZW50LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBET00gZWxlbWVudCwgZWxzZSBgZmFsc2VgLlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLmlzRWxlbWVudChkb2N1bWVudC5ib2R5KTtcbiAgICAgICAgICogLy8gPT4gdHJ1ZVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLmlzRWxlbWVudCgnPGJvZHk+Jyk7XG4gICAgICAgICAqIC8vID0+IGZhbHNlXG4gICAgICAgICAqL2Z1bmN0aW9uIGlzRWxlbWVudCh2YWx1ZSl7cmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkmJnZhbHVlLm5vZGVUeXBlPT09MSYmIWlzUGxhaW5PYmplY3QodmFsdWUpO30vKipcbiAgICAgICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYW4gZW1wdHkgb2JqZWN0LCBjb2xsZWN0aW9uLCBtYXAsIG9yIHNldC5cbiAgICAgICAgICpcbiAgICAgICAgICogT2JqZWN0cyBhcmUgY29uc2lkZXJlZCBlbXB0eSBpZiB0aGV5IGhhdmUgbm8gb3duIGVudW1lcmFibGUgc3RyaW5nIGtleWVkXG4gICAgICAgICAqIHByb3BlcnRpZXMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEFycmF5LWxpa2UgdmFsdWVzIHN1Y2ggYXMgYGFyZ3VtZW50c2Agb2JqZWN0cywgYXJyYXlzLCBidWZmZXJzLCBzdHJpbmdzLCBvclxuICAgICAgICAgKiBqUXVlcnktbGlrZSBjb2xsZWN0aW9ucyBhcmUgY29uc2lkZXJlZCBlbXB0eSBpZiB0aGV5IGhhdmUgYSBgbGVuZ3RoYCBvZiBgMGAuXG4gICAgICAgICAqIFNpbWlsYXJseSwgbWFwcyBhbmQgc2V0cyBhcmUgY29uc2lkZXJlZCBlbXB0eSBpZiB0aGV5IGhhdmUgYSBgc2l6ZWAgb2YgYDBgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgZW1wdHksIGVsc2UgYGZhbHNlYC5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogXy5pc0VtcHR5KG51bGwpO1xuICAgICAgICAgKiAvLyA9PiB0cnVlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8uaXNFbXB0eSh0cnVlKTtcbiAgICAgICAgICogLy8gPT4gdHJ1ZVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLmlzRW1wdHkoMSk7XG4gICAgICAgICAqIC8vID0+IHRydWVcbiAgICAgICAgICpcbiAgICAgICAgICogXy5pc0VtcHR5KFsxLCAyLCAzXSk7XG4gICAgICAgICAqIC8vID0+IGZhbHNlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8uaXNFbXB0eSh7ICdhJzogMSB9KTtcbiAgICAgICAgICogLy8gPT4gZmFsc2VcbiAgICAgICAgICovZnVuY3Rpb24gaXNFbXB0eSh2YWx1ZSl7aWYodmFsdWU9PW51bGwpe3JldHVybiB0cnVlO31pZihpc0FycmF5TGlrZSh2YWx1ZSkmJihpc0FycmF5KHZhbHVlKXx8dHlwZW9mIHZhbHVlPT09J3N0cmluZyd8fHR5cGVvZiB2YWx1ZS5zcGxpY2U9PT0nZnVuY3Rpb24nfHxpc0J1ZmZlcih2YWx1ZSl8fGlzVHlwZWRBcnJheSh2YWx1ZSl8fGlzQXJndW1lbnRzKHZhbHVlKSkpe3JldHVybiF2YWx1ZS5sZW5ndGg7fXZhciB0YWc9Z2V0VGFnKHZhbHVlKTtpZih0YWc9PW1hcFRhZ3x8dGFnPT1zZXRUYWcpe3JldHVybiF2YWx1ZS5zaXplO31pZihpc1Byb3RvdHlwZSh2YWx1ZSkpe3JldHVybiFiYXNlS2V5cyh2YWx1ZSkubGVuZ3RoO31mb3IodmFyIGtleSBpbiB2YWx1ZSl7aWYoaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSxrZXkpKXtyZXR1cm4gZmFsc2U7fX1yZXR1cm4gdHJ1ZTt9LyoqXG4gICAgICAgICAqIFBlcmZvcm1zIGEgZGVlcCBjb21wYXJpc29uIGJldHdlZW4gdHdvIHZhbHVlcyB0byBkZXRlcm1pbmUgaWYgdGhleSBhcmVcbiAgICAgICAgICogZXF1aXZhbGVudC5cbiAgICAgICAgICpcbiAgICAgICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIHN1cHBvcnRzIGNvbXBhcmluZyBhcnJheXMsIGFycmF5IGJ1ZmZlcnMsIGJvb2xlYW5zLFxuICAgICAgICAgKiBkYXRlIG9iamVjdHMsIGVycm9yIG9iamVjdHMsIG1hcHMsIG51bWJlcnMsIGBPYmplY3RgIG9iamVjdHMsIHJlZ2V4ZXMsXG4gICAgICAgICAqIHNldHMsIHN0cmluZ3MsIHN5bWJvbHMsIGFuZCB0eXBlZCBhcnJheXMuIGBPYmplY3RgIG9iamVjdHMgYXJlIGNvbXBhcmVkXG4gICAgICAgICAqIGJ5IHRoZWlyIG93biwgbm90IGluaGVyaXRlZCwgZW51bWVyYWJsZSBwcm9wZXJ0aWVzLiBGdW5jdGlvbnMgYW5kIERPTVxuICAgICAgICAgKiBub2RlcyBhcmUgY29tcGFyZWQgYnkgc3RyaWN0IGVxdWFsaXR5LCBpLmUuIGA9PT1gLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAgICAgKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEgfTtcbiAgICAgICAgICogdmFyIG90aGVyID0geyAnYSc6IDEgfTtcbiAgICAgICAgICpcbiAgICAgICAgICogXy5pc0VxdWFsKG9iamVjdCwgb3RoZXIpO1xuICAgICAgICAgKiAvLyA9PiB0cnVlXG4gICAgICAgICAqXG4gICAgICAgICAqIG9iamVjdCA9PT0gb3RoZXI7XG4gICAgICAgICAqIC8vID0+IGZhbHNlXG4gICAgICAgICAqL2Z1bmN0aW9uIGlzRXF1YWwodmFsdWUsb3RoZXIpe3JldHVybiBiYXNlSXNFcXVhbCh2YWx1ZSxvdGhlcik7fS8qKlxuICAgICAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmlzRXF1YWxgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGN1c3RvbWl6ZXJgIHdoaWNoXG4gICAgICAgICAqIGlzIGludm9rZWQgdG8gY29tcGFyZSB2YWx1ZXMuIElmIGBjdXN0b21pemVyYCByZXR1cm5zIGB1bmRlZmluZWRgLCBjb21wYXJpc29uc1xuICAgICAgICAgKiBhcmUgaGFuZGxlZCBieSB0aGUgbWV0aG9kIGluc3RlYWQuIFRoZSBgY3VzdG9taXplcmAgaXMgaW52b2tlZCB3aXRoIHVwIHRvXG4gICAgICAgICAqIHNpeCBhcmd1bWVudHM6IChvYmpWYWx1ZSwgb3RoVmFsdWUgWywgaW5kZXh8a2V5LCBvYmplY3QsIG90aGVyLCBzdGFja10pLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAgICAgKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAgICAgICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogZnVuY3Rpb24gaXNHcmVldGluZyh2YWx1ZSkge1xuICAgICAgICAgKiAgIHJldHVybiAvXmgoPzppfGVsbG8pJC8udGVzdCh2YWx1ZSk7XG4gICAgICAgICAqIH1cbiAgICAgICAgICpcbiAgICAgICAgICogZnVuY3Rpb24gY3VzdG9taXplcihvYmpWYWx1ZSwgb3RoVmFsdWUpIHtcbiAgICAgICAgICogICBpZiAoaXNHcmVldGluZyhvYmpWYWx1ZSkgJiYgaXNHcmVldGluZyhvdGhWYWx1ZSkpIHtcbiAgICAgICAgICogICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgKiAgIH1cbiAgICAgICAgICogfVxuICAgICAgICAgKlxuICAgICAgICAgKiB2YXIgYXJyYXkgPSBbJ2hlbGxvJywgJ2dvb2RieWUnXTtcbiAgICAgICAgICogdmFyIG90aGVyID0gWydoaScsICdnb29kYnllJ107XG4gICAgICAgICAqXG4gICAgICAgICAqIF8uaXNFcXVhbFdpdGgoYXJyYXksIG90aGVyLCBjdXN0b21pemVyKTtcbiAgICAgICAgICogLy8gPT4gdHJ1ZVxuICAgICAgICAgKi9mdW5jdGlvbiBpc0VxdWFsV2l0aCh2YWx1ZSxvdGhlcixjdXN0b21pemVyKXtjdXN0b21pemVyPXR5cGVvZiBjdXN0b21pemVyPT09J2Z1bmN0aW9uJz9jdXN0b21pemVyOnVuZGVmaW5lZDt2YXIgcmVzdWx0PWN1c3RvbWl6ZXI/Y3VzdG9taXplcih2YWx1ZSxvdGhlcik6dW5kZWZpbmVkO3JldHVybiByZXN1bHQ9PT11bmRlZmluZWQ/YmFzZUlzRXF1YWwodmFsdWUsb3RoZXIsdW5kZWZpbmVkLGN1c3RvbWl6ZXIpOiEhcmVzdWx0O30vKipcbiAgICAgICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYW4gYEVycm9yYCwgYEV2YWxFcnJvcmAsIGBSYW5nZUVycm9yYCwgYFJlZmVyZW5jZUVycm9yYCxcbiAgICAgICAgICogYFN5bnRheEVycm9yYCwgYFR5cGVFcnJvcmAsIG9yIGBVUklFcnJvcmAgb2JqZWN0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gZXJyb3Igb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8uaXNFcnJvcihuZXcgRXJyb3IpO1xuICAgICAgICAgKiAvLyA9PiB0cnVlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8uaXNFcnJvcihFcnJvcik7XG4gICAgICAgICAqIC8vID0+IGZhbHNlXG4gICAgICAgICAqL2Z1bmN0aW9uIGlzRXJyb3IodmFsdWUpe2lmKCFpc09iamVjdExpa2UodmFsdWUpKXtyZXR1cm4gZmFsc2U7fXZhciB0YWc9YmFzZUdldFRhZyh2YWx1ZSk7cmV0dXJuIHRhZz09ZXJyb3JUYWd8fHRhZz09ZG9tRXhjVGFnfHx0eXBlb2YgdmFsdWUubWVzc2FnZT09PSdzdHJpbmcnJiZ0eXBlb2YgdmFsdWUubmFtZT09PSdzdHJpbmcnJiYhaXNQbGFpbk9iamVjdCh2YWx1ZSk7fS8qKlxuICAgICAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIGZpbml0ZSBwcmltaXRpdmUgbnVtYmVyLlxuICAgICAgICAgKlxuICAgICAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgYmFzZWQgb25cbiAgICAgICAgICogW2BOdW1iZXIuaXNGaW5pdGVgXShodHRwczovL21kbi5pby9OdW1iZXIvaXNGaW5pdGUpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBmaW5pdGUgbnVtYmVyLCBlbHNlIGBmYWxzZWAuXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8uaXNGaW5pdGUoMyk7XG4gICAgICAgICAqIC8vID0+IHRydWVcbiAgICAgICAgICpcbiAgICAgICAgICogXy5pc0Zpbml0ZShOdW1iZXIuTUlOX1ZBTFVFKTtcbiAgICAgICAgICogLy8gPT4gdHJ1ZVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLmlzRmluaXRlKEluZmluaXR5KTtcbiAgICAgICAgICogLy8gPT4gZmFsc2VcbiAgICAgICAgICpcbiAgICAgICAgICogXy5pc0Zpbml0ZSgnMycpO1xuICAgICAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAgICAgKi9mdW5jdGlvbiBpc0Zpbml0ZSh2YWx1ZSl7cmV0dXJuIHR5cGVvZiB2YWx1ZT09PSdudW1iZXInJiZuYXRpdmVJc0Zpbml0ZSh2YWx1ZSk7fS8qKlxuICAgICAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYEZ1bmN0aW9uYCBvYmplY3QuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQHNpbmNlIDAuMS4wXG4gICAgICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGZ1bmN0aW9uLCBlbHNlIGBmYWxzZWAuXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8uaXNGdW5jdGlvbihfKTtcbiAgICAgICAgICogLy8gPT4gdHJ1ZVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLmlzRnVuY3Rpb24oL2FiYy8pO1xuICAgICAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAgICAgKi9mdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKXtpZighaXNPYmplY3QodmFsdWUpKXtyZXR1cm4gZmFsc2U7fS8vIFRoZSB1c2Ugb2YgYE9iamVjdCN0b1N0cmluZ2AgYXZvaWRzIGlzc3VlcyB3aXRoIHRoZSBgdHlwZW9mYCBvcGVyYXRvclxuLy8gaW4gU2FmYXJpIDkgd2hpY2ggcmV0dXJucyAnb2JqZWN0JyBmb3IgdHlwZWQgYXJyYXlzIGFuZCBvdGhlciBjb25zdHJ1Y3RvcnMuXG52YXIgdGFnPWJhc2VHZXRUYWcodmFsdWUpO3JldHVybiB0YWc9PWZ1bmNUYWd8fHRhZz09Z2VuVGFnfHx0YWc9PWFzeW5jVGFnfHx0YWc9PXByb3h5VGFnO30vKipcbiAgICAgICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYW4gaW50ZWdlci5cbiAgICAgICAgICpcbiAgICAgICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGJhc2VkIG9uXG4gICAgICAgICAqIFtgTnVtYmVyLmlzSW50ZWdlcmBdKGh0dHBzOi8vbWRuLmlvL051bWJlci9pc0ludGVnZXIpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gaW50ZWdlciwgZWxzZSBgZmFsc2VgLlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLmlzSW50ZWdlcigzKTtcbiAgICAgICAgICogLy8gPT4gdHJ1ZVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLmlzSW50ZWdlcihOdW1iZXIuTUlOX1ZBTFVFKTtcbiAgICAgICAgICogLy8gPT4gZmFsc2VcbiAgICAgICAgICpcbiAgICAgICAgICogXy5pc0ludGVnZXIoSW5maW5pdHkpO1xuICAgICAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLmlzSW50ZWdlcignMycpO1xuICAgICAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAgICAgKi9mdW5jdGlvbiBpc0ludGVnZXIodmFsdWUpe3JldHVybiB0eXBlb2YgdmFsdWU9PT0nbnVtYmVyJyYmdmFsdWU9PXRvSW50ZWdlcih2YWx1ZSk7fS8qKlxuICAgICAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgbGVuZ3RoLlxuICAgICAgICAgKlxuICAgICAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgbG9vc2VseSBiYXNlZCBvblxuICAgICAgICAgKiBbYFRvTGVuZ3RoYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtdG9sZW5ndGgpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBsZW5ndGgsIGVsc2UgYGZhbHNlYC5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogXy5pc0xlbmd0aCgzKTtcbiAgICAgICAgICogLy8gPT4gdHJ1ZVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLmlzTGVuZ3RoKE51bWJlci5NSU5fVkFMVUUpO1xuICAgICAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLmlzTGVuZ3RoKEluZmluaXR5KTtcbiAgICAgICAgICogLy8gPT4gZmFsc2VcbiAgICAgICAgICpcbiAgICAgICAgICogXy5pc0xlbmd0aCgnMycpO1xuICAgICAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAgICAgKi9mdW5jdGlvbiBpc0xlbmd0aCh2YWx1ZSl7cmV0dXJuIHR5cGVvZiB2YWx1ZT09PSdudW1iZXInJiZ2YWx1ZT4tMSYmdmFsdWUlMT09MCYmdmFsdWU8PU1BWF9TQUZFX0lOVEVHRVI7fS8qKlxuICAgICAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyB0aGVcbiAgICAgICAgICogW2xhbmd1YWdlIHR5cGVdKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1lY21hc2NyaXB0LWxhbmd1YWdlLXR5cGVzKVxuICAgICAgICAgKiBvZiBgT2JqZWN0YC4gKGUuZy4gYXJyYXlzLCBmdW5jdGlvbnMsIG9iamVjdHMsIHJlZ2V4ZXMsIGBuZXcgTnVtYmVyKDApYCwgYW5kIGBuZXcgU3RyaW5nKCcnKWApXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQHNpbmNlIDAuMS4wXG4gICAgICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogXy5pc09iamVjdCh7fSk7XG4gICAgICAgICAqIC8vID0+IHRydWVcbiAgICAgICAgICpcbiAgICAgICAgICogXy5pc09iamVjdChbMSwgMiwgM10pO1xuICAgICAgICAgKiAvLyA9PiB0cnVlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8uaXNPYmplY3QoXy5ub29wKTtcbiAgICAgICAgICogLy8gPT4gdHJ1ZVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLmlzT2JqZWN0KG51bGwpO1xuICAgICAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAgICAgKi9mdW5jdGlvbiBpc09iamVjdCh2YWx1ZSl7dmFyIHR5cGU9dHlwZW9mIHZhbHVlPT09J3VuZGVmaW5lZCc/J3VuZGVmaW5lZCc6X3R5cGVvZih2YWx1ZSk7cmV0dXJuIHZhbHVlIT1udWxsJiYodHlwZT09J29iamVjdCd8fHR5cGU9PSdmdW5jdGlvbicpO30vKipcbiAgICAgICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UuIEEgdmFsdWUgaXMgb2JqZWN0LWxpa2UgaWYgaXQncyBub3QgYG51bGxgXG4gICAgICAgICAqIGFuZCBoYXMgYSBgdHlwZW9mYCByZXN1bHQgb2YgXCJvYmplY3RcIi5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLCBlbHNlIGBmYWxzZWAuXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8uaXNPYmplY3RMaWtlKHt9KTtcbiAgICAgICAgICogLy8gPT4gdHJ1ZVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLmlzT2JqZWN0TGlrZShbMSwgMiwgM10pO1xuICAgICAgICAgKiAvLyA9PiB0cnVlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8uaXNPYmplY3RMaWtlKF8ubm9vcCk7XG4gICAgICAgICAqIC8vID0+IGZhbHNlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8uaXNPYmplY3RMaWtlKG51bGwpO1xuICAgICAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAgICAgKi9mdW5jdGlvbiBpc09iamVjdExpa2UodmFsdWUpe3JldHVybiB2YWx1ZSE9bnVsbCYmKHR5cGVvZiB2YWx1ZT09PSd1bmRlZmluZWQnPyd1bmRlZmluZWQnOl90eXBlb2YodmFsdWUpKT09PSdvYmplY3QnO30vKipcbiAgICAgICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBNYXBgIG9iamVjdC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAc2luY2UgNC4zLjBcbiAgICAgICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgbWFwLCBlbHNlIGBmYWxzZWAuXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8uaXNNYXAobmV3IE1hcCk7XG4gICAgICAgICAqIC8vID0+IHRydWVcbiAgICAgICAgICpcbiAgICAgICAgICogXy5pc01hcChuZXcgV2Vha01hcCk7XG4gICAgICAgICAqIC8vID0+IGZhbHNlXG4gICAgICAgICAqL3ZhciBpc01hcD1ub2RlSXNNYXA/YmFzZVVuYXJ5KG5vZGVJc01hcCk6YmFzZUlzTWFwOy8qKlxuICAgICAgICAgKiBQZXJmb3JtcyBhIHBhcnRpYWwgZGVlcCBjb21wYXJpc29uIGJldHdlZW4gYG9iamVjdGAgYW5kIGBzb3VyY2VgIHRvXG4gICAgICAgICAqIGRldGVybWluZSBpZiBgb2JqZWN0YCBjb250YWlucyBlcXVpdmFsZW50IHByb3BlcnR5IHZhbHVlcy5cbiAgICAgICAgICpcbiAgICAgICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGVxdWl2YWxlbnQgdG8gYF8ubWF0Y2hlc2Agd2hlbiBgc291cmNlYCBpc1xuICAgICAgICAgKiBwYXJ0aWFsbHkgYXBwbGllZC5cbiAgICAgICAgICpcbiAgICAgICAgICogUGFydGlhbCBjb21wYXJpc29ucyB3aWxsIG1hdGNoIGVtcHR5IGFycmF5IGFuZCBlbXB0eSBvYmplY3QgYHNvdXJjZWBcbiAgICAgICAgICogdmFsdWVzIGFnYWluc3QgYW55IGFycmF5IG9yIG9iamVjdCB2YWx1ZSwgcmVzcGVjdGl2ZWx5LiBTZWUgYF8uaXNFcXVhbGBcbiAgICAgICAgICogZm9yIGEgbGlzdCBvZiBzdXBwb3J0ZWQgdmFsdWUgY29tcGFyaXNvbnMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQHNpbmNlIDMuMC4wXG4gICAgICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpbnNwZWN0LlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3Qgb2YgcHJvcGVydHkgdmFsdWVzIHRvIG1hdGNoLlxuICAgICAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYG9iamVjdGAgaXMgYSBtYXRjaCwgZWxzZSBgZmFsc2VgLlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEsICdiJzogMiB9O1xuICAgICAgICAgKlxuICAgICAgICAgKiBfLmlzTWF0Y2gob2JqZWN0LCB7ICdiJzogMiB9KTtcbiAgICAgICAgICogLy8gPT4gdHJ1ZVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLmlzTWF0Y2gob2JqZWN0LCB7ICdiJzogMSB9KTtcbiAgICAgICAgICogLy8gPT4gZmFsc2VcbiAgICAgICAgICovZnVuY3Rpb24gaXNNYXRjaChvYmplY3Qsc291cmNlKXtyZXR1cm4gb2JqZWN0PT09c291cmNlfHxiYXNlSXNNYXRjaChvYmplY3Qsc291cmNlLGdldE1hdGNoRGF0YShzb3VyY2UpKTt9LyoqXG4gICAgICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uaXNNYXRjaGAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgY3VzdG9taXplcmAgd2hpY2hcbiAgICAgICAgICogaXMgaW52b2tlZCB0byBjb21wYXJlIHZhbHVlcy4gSWYgYGN1c3RvbWl6ZXJgIHJldHVybnMgYHVuZGVmaW5lZGAsIGNvbXBhcmlzb25zXG4gICAgICAgICAqIGFyZSBoYW5kbGVkIGJ5IHRoZSBtZXRob2QgaW5zdGVhZC4gVGhlIGBjdXN0b21pemVyYCBpcyBpbnZva2VkIHdpdGggZml2ZVxuICAgICAgICAgKiBhcmd1bWVudHM6IChvYmpWYWx1ZSwgc3JjVmFsdWUsIGluZGV4fGtleSwgb2JqZWN0LCBzb3VyY2UpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaW5zcGVjdC5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IG9mIHByb3BlcnR5IHZhbHVlcyB0byBtYXRjaC5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gICAgICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgb2JqZWN0YCBpcyBhIG1hdGNoLCBlbHNlIGBmYWxzZWAuXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIGZ1bmN0aW9uIGlzR3JlZXRpbmcodmFsdWUpIHtcbiAgICAgICAgICogICByZXR1cm4gL15oKD86aXxlbGxvKSQvLnRlc3QodmFsdWUpO1xuICAgICAgICAgKiB9XG4gICAgICAgICAqXG4gICAgICAgICAqIGZ1bmN0aW9uIGN1c3RvbWl6ZXIob2JqVmFsdWUsIHNyY1ZhbHVlKSB7XG4gICAgICAgICAqICAgaWYgKGlzR3JlZXRpbmcob2JqVmFsdWUpICYmIGlzR3JlZXRpbmcoc3JjVmFsdWUpKSB7XG4gICAgICAgICAqICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICogICB9XG4gICAgICAgICAqIH1cbiAgICAgICAgICpcbiAgICAgICAgICogdmFyIG9iamVjdCA9IHsgJ2dyZWV0aW5nJzogJ2hlbGxvJyB9O1xuICAgICAgICAgKiB2YXIgc291cmNlID0geyAnZ3JlZXRpbmcnOiAnaGknIH07XG4gICAgICAgICAqXG4gICAgICAgICAqIF8uaXNNYXRjaFdpdGgob2JqZWN0LCBzb3VyY2UsIGN1c3RvbWl6ZXIpO1xuICAgICAgICAgKiAvLyA9PiB0cnVlXG4gICAgICAgICAqL2Z1bmN0aW9uIGlzTWF0Y2hXaXRoKG9iamVjdCxzb3VyY2UsY3VzdG9taXplcil7Y3VzdG9taXplcj10eXBlb2YgY3VzdG9taXplcj09PSdmdW5jdGlvbic/Y3VzdG9taXplcjp1bmRlZmluZWQ7cmV0dXJuIGJhc2VJc01hdGNoKG9iamVjdCxzb3VyY2UsZ2V0TWF0Y2hEYXRhKHNvdXJjZSksY3VzdG9taXplcik7fS8qKlxuICAgICAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBgTmFOYC5cbiAgICAgICAgICpcbiAgICAgICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGJhc2VkIG9uXG4gICAgICAgICAqIFtgTnVtYmVyLmlzTmFOYF0oaHR0cHM6Ly9tZG4uaW8vTnVtYmVyL2lzTmFOKSBhbmQgaXMgbm90IHRoZSBzYW1lIGFzXG4gICAgICAgICAqIGdsb2JhbCBbYGlzTmFOYF0oaHR0cHM6Ly9tZG4uaW8vaXNOYU4pIHdoaWNoIHJldHVybnMgYHRydWVgIGZvclxuICAgICAgICAgKiBgdW5kZWZpbmVkYCBhbmQgb3RoZXIgbm9uLW51bWJlciB2YWx1ZXMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQHNpbmNlIDAuMS4wXG4gICAgICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBgTmFOYCwgZWxzZSBgZmFsc2VgLlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLmlzTmFOKE5hTik7XG4gICAgICAgICAqIC8vID0+IHRydWVcbiAgICAgICAgICpcbiAgICAgICAgICogXy5pc05hTihuZXcgTnVtYmVyKE5hTikpO1xuICAgICAgICAgKiAvLyA9PiB0cnVlXG4gICAgICAgICAqXG4gICAgICAgICAqIGlzTmFOKHVuZGVmaW5lZCk7XG4gICAgICAgICAqIC8vID0+IHRydWVcbiAgICAgICAgICpcbiAgICAgICAgICogXy5pc05hTih1bmRlZmluZWQpO1xuICAgICAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAgICAgKi9mdW5jdGlvbiBpc05hTih2YWx1ZSl7Ly8gQW4gYE5hTmAgcHJpbWl0aXZlIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi5cbi8vIFBlcmZvcm0gdGhlIGB0b1N0cmluZ1RhZ2AgY2hlY2sgZmlyc3QgdG8gYXZvaWQgZXJyb3JzIHdpdGggc29tZVxuLy8gQWN0aXZlWCBvYmplY3RzIGluIElFLlxucmV0dXJuIGlzTnVtYmVyKHZhbHVlKSYmdmFsdWUhPSt2YWx1ZTt9LyoqXG4gICAgICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgcHJpc3RpbmUgbmF0aXZlIGZ1bmN0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgY2FuJ3QgcmVsaWFibHkgZGV0ZWN0IG5hdGl2ZSBmdW5jdGlvbnMgaW4gdGhlIHByZXNlbmNlXG4gICAgICAgICAqIG9mIHRoZSBjb3JlLWpzIHBhY2thZ2UgYmVjYXVzZSBjb3JlLWpzIGNpcmN1bXZlbnRzIHRoaXMga2luZCBvZiBkZXRlY3Rpb24uXG4gICAgICAgICAqIERlc3BpdGUgbXVsdGlwbGUgcmVxdWVzdHMsIHRoZSBjb3JlLWpzIG1haW50YWluZXIgaGFzIG1hZGUgaXQgY2xlYXI6IGFueVxuICAgICAgICAgKiBhdHRlbXB0IHRvIGZpeCB0aGUgZGV0ZWN0aW9uIHdpbGwgYmUgb2JzdHJ1Y3RlZC4gQXMgYSByZXN1bHQsIHdlJ3JlIGxlZnRcbiAgICAgICAgICogd2l0aCBsaXR0bGUgY2hvaWNlIGJ1dCB0byB0aHJvdyBhbiBlcnJvci4gVW5mb3J0dW5hdGVseSwgdGhpcyBhbHNvIGFmZmVjdHNcbiAgICAgICAgICogcGFja2FnZXMsIGxpa2UgW2JhYmVsLXBvbHlmaWxsXShodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9iYWJlbC1wb2x5ZmlsbCksXG4gICAgICAgICAqIHdoaWNoIHJlbHkgb24gY29yZS1qcy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgbmF0aXZlIGZ1bmN0aW9uLFxuICAgICAgICAgKiAgZWxzZSBgZmFsc2VgLlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLmlzTmF0aXZlKEFycmF5LnByb3RvdHlwZS5wdXNoKTtcbiAgICAgICAgICogLy8gPT4gdHJ1ZVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLmlzTmF0aXZlKF8pO1xuICAgICAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAgICAgKi9mdW5jdGlvbiBpc05hdGl2ZSh2YWx1ZSl7aWYoaXNNYXNrYWJsZSh2YWx1ZSkpe3Rocm93IG5ldyBFcnJvcihDT1JFX0VSUk9SX1RFWFQpO31yZXR1cm4gYmFzZUlzTmF0aXZlKHZhbHVlKTt9LyoqXG4gICAgICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGBudWxsYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGBudWxsYCwgZWxzZSBgZmFsc2VgLlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLmlzTnVsbChudWxsKTtcbiAgICAgICAgICogLy8gPT4gdHJ1ZVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLmlzTnVsbCh2b2lkIDApO1xuICAgICAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAgICAgKi9mdW5jdGlvbiBpc051bGwodmFsdWUpe3JldHVybiB2YWx1ZT09PW51bGw7fS8qKlxuICAgICAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBgbnVsbGAgb3IgYHVuZGVmaW5lZGAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQHNpbmNlIDQuMC4wXG4gICAgICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBudWxsaXNoLCBlbHNlIGBmYWxzZWAuXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8uaXNOaWwobnVsbCk7XG4gICAgICAgICAqIC8vID0+IHRydWVcbiAgICAgICAgICpcbiAgICAgICAgICogXy5pc05pbCh2b2lkIDApO1xuICAgICAgICAgKiAvLyA9PiB0cnVlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8uaXNOaWwoTmFOKTtcbiAgICAgICAgICogLy8gPT4gZmFsc2VcbiAgICAgICAgICovZnVuY3Rpb24gaXNOaWwodmFsdWUpe3JldHVybiB2YWx1ZT09bnVsbDt9LyoqXG4gICAgICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgTnVtYmVyYCBwcmltaXRpdmUgb3Igb2JqZWN0LlxuICAgICAgICAgKlxuICAgICAgICAgKiAqKk5vdGU6KiogVG8gZXhjbHVkZSBgSW5maW5pdHlgLCBgLUluZmluaXR5YCwgYW5kIGBOYU5gLCB3aGljaCBhcmVcbiAgICAgICAgICogY2xhc3NpZmllZCBhcyBudW1iZXJzLCB1c2UgdGhlIGBfLmlzRmluaXRlYCBtZXRob2QuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQHNpbmNlIDAuMS4wXG4gICAgICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIG51bWJlciwgZWxzZSBgZmFsc2VgLlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLmlzTnVtYmVyKDMpO1xuICAgICAgICAgKiAvLyA9PiB0cnVlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8uaXNOdW1iZXIoTnVtYmVyLk1JTl9WQUxVRSk7XG4gICAgICAgICAqIC8vID0+IHRydWVcbiAgICAgICAgICpcbiAgICAgICAgICogXy5pc051bWJlcihJbmZpbml0eSk7XG4gICAgICAgICAqIC8vID0+IHRydWVcbiAgICAgICAgICpcbiAgICAgICAgICogXy5pc051bWJlcignMycpO1xuICAgICAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAgICAgKi9mdW5jdGlvbiBpc051bWJlcih2YWx1ZSl7cmV0dXJuIHR5cGVvZiB2YWx1ZT09PSdudW1iZXInfHxpc09iamVjdExpa2UodmFsdWUpJiZiYXNlR2V0VGFnKHZhbHVlKT09bnVtYmVyVGFnO30vKipcbiAgICAgICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBwbGFpbiBvYmplY3QsIHRoYXQgaXMsIGFuIG9iamVjdCBjcmVhdGVkIGJ5IHRoZVxuICAgICAgICAgKiBgT2JqZWN0YCBjb25zdHJ1Y3RvciBvciBvbmUgd2l0aCBhIGBbW1Byb3RvdHlwZV1dYCBvZiBgbnVsbGAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQHNpbmNlIDAuOC4wXG4gICAgICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHBsYWluIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiBmdW5jdGlvbiBGb28oKSB7XG4gICAgICAgICAqICAgdGhpcy5hID0gMTtcbiAgICAgICAgICogfVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLmlzUGxhaW5PYmplY3QobmV3IEZvbyk7XG4gICAgICAgICAqIC8vID0+IGZhbHNlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8uaXNQbGFpbk9iamVjdChbMSwgMiwgM10pO1xuICAgICAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLmlzUGxhaW5PYmplY3QoeyAneCc6IDAsICd5JzogMCB9KTtcbiAgICAgICAgICogLy8gPT4gdHJ1ZVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLmlzUGxhaW5PYmplY3QoT2JqZWN0LmNyZWF0ZShudWxsKSk7XG4gICAgICAgICAqIC8vID0+IHRydWVcbiAgICAgICAgICovZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZSl7aWYoIWlzT2JqZWN0TGlrZSh2YWx1ZSl8fGJhc2VHZXRUYWcodmFsdWUpIT1vYmplY3RUYWcpe3JldHVybiBmYWxzZTt9dmFyIHByb3RvPWdldFByb3RvdHlwZSh2YWx1ZSk7aWYocHJvdG89PT1udWxsKXtyZXR1cm4gdHJ1ZTt9dmFyIEN0b3I9aGFzT3duUHJvcGVydHkuY2FsbChwcm90bywnY29uc3RydWN0b3InKSYmcHJvdG8uY29uc3RydWN0b3I7cmV0dXJuIHR5cGVvZiBDdG9yPT09J2Z1bmN0aW9uJyYmQ3RvciBpbnN0YW5jZW9mIEN0b3ImJmZ1bmNUb1N0cmluZy5jYWxsKEN0b3IpPT1vYmplY3RDdG9yU3RyaW5nO30vKipcbiAgICAgICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBSZWdFeHBgIG9iamVjdC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcmVnZXhwLCBlbHNlIGBmYWxzZWAuXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8uaXNSZWdFeHAoL2FiYy8pO1xuICAgICAgICAgKiAvLyA9PiB0cnVlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8uaXNSZWdFeHAoJy9hYmMvJyk7XG4gICAgICAgICAqIC8vID0+IGZhbHNlXG4gICAgICAgICAqL3ZhciBpc1JlZ0V4cD1ub2RlSXNSZWdFeHA/YmFzZVVuYXJ5KG5vZGVJc1JlZ0V4cCk6YmFzZUlzUmVnRXhwOy8qKlxuICAgICAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHNhZmUgaW50ZWdlci4gQW4gaW50ZWdlciBpcyBzYWZlIGlmIGl0J3MgYW4gSUVFRS03NTRcbiAgICAgICAgICogZG91YmxlIHByZWNpc2lvbiBudW1iZXIgd2hpY2ggaXNuJ3QgdGhlIHJlc3VsdCBvZiBhIHJvdW5kZWQgdW5zYWZlIGludGVnZXIuXG4gICAgICAgICAqXG4gICAgICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBiYXNlZCBvblxuICAgICAgICAgKiBbYE51bWJlci5pc1NhZmVJbnRlZ2VyYF0oaHR0cHM6Ly9tZG4uaW8vTnVtYmVyL2lzU2FmZUludGVnZXIpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBzYWZlIGludGVnZXIsIGVsc2UgYGZhbHNlYC5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogXy5pc1NhZmVJbnRlZ2VyKDMpO1xuICAgICAgICAgKiAvLyA9PiB0cnVlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8uaXNTYWZlSW50ZWdlcihOdW1iZXIuTUlOX1ZBTFVFKTtcbiAgICAgICAgICogLy8gPT4gZmFsc2VcbiAgICAgICAgICpcbiAgICAgICAgICogXy5pc1NhZmVJbnRlZ2VyKEluZmluaXR5KTtcbiAgICAgICAgICogLy8gPT4gZmFsc2VcbiAgICAgICAgICpcbiAgICAgICAgICogXy5pc1NhZmVJbnRlZ2VyKCczJyk7XG4gICAgICAgICAqIC8vID0+IGZhbHNlXG4gICAgICAgICAqL2Z1bmN0aW9uIGlzU2FmZUludGVnZXIodmFsdWUpe3JldHVybiBpc0ludGVnZXIodmFsdWUpJiZ2YWx1ZT49LU1BWF9TQUZFX0lOVEVHRVImJnZhbHVlPD1NQVhfU0FGRV9JTlRFR0VSO30vKipcbiAgICAgICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBTZXRgIG9iamVjdC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAc2luY2UgNC4zLjBcbiAgICAgICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc2V0LCBlbHNlIGBmYWxzZWAuXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8uaXNTZXQobmV3IFNldCk7XG4gICAgICAgICAqIC8vID0+IHRydWVcbiAgICAgICAgICpcbiAgICAgICAgICogXy5pc1NldChuZXcgV2Vha1NldCk7XG4gICAgICAgICAqIC8vID0+IGZhbHNlXG4gICAgICAgICAqL3ZhciBpc1NldD1ub2RlSXNTZXQ/YmFzZVVuYXJ5KG5vZGVJc1NldCk6YmFzZUlzU2V0Oy8qKlxuICAgICAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFN0cmluZ2AgcHJpbWl0aXZlIG9yIG9iamVjdC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc3RyaW5nLCBlbHNlIGBmYWxzZWAuXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8uaXNTdHJpbmcoJ2FiYycpO1xuICAgICAgICAgKiAvLyA9PiB0cnVlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8uaXNTdHJpbmcoMSk7XG4gICAgICAgICAqIC8vID0+IGZhbHNlXG4gICAgICAgICAqL2Z1bmN0aW9uIGlzU3RyaW5nKHZhbHVlKXtyZXR1cm4gdHlwZW9mIHZhbHVlPT09J3N0cmluZyd8fCFpc0FycmF5KHZhbHVlKSYmaXNPYmplY3RMaWtlKHZhbHVlKSYmYmFzZUdldFRhZyh2YWx1ZSk9PXN0cmluZ1RhZzt9LyoqXG4gICAgICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgU3ltYm9sYCBwcmltaXRpdmUgb3Igb2JqZWN0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBzeW1ib2wsIGVsc2UgYGZhbHNlYC5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogXy5pc1N5bWJvbChTeW1ib2wuaXRlcmF0b3IpO1xuICAgICAgICAgKiAvLyA9PiB0cnVlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8uaXNTeW1ib2woJ2FiYycpO1xuICAgICAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAgICAgKi9mdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSl7cmV0dXJuKHR5cGVvZiB2YWx1ZT09PSd1bmRlZmluZWQnPyd1bmRlZmluZWQnOl90eXBlb2YodmFsdWUpKT09PSdzeW1ib2wnfHxpc09iamVjdExpa2UodmFsdWUpJiZiYXNlR2V0VGFnKHZhbHVlKT09c3ltYm9sVGFnO30vKipcbiAgICAgICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIHR5cGVkIGFycmF5LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB0eXBlZCBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLmlzVHlwZWRBcnJheShuZXcgVWludDhBcnJheSk7XG4gICAgICAgICAqIC8vID0+IHRydWVcbiAgICAgICAgICpcbiAgICAgICAgICogXy5pc1R5cGVkQXJyYXkoW10pO1xuICAgICAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAgICAgKi92YXIgaXNUeXBlZEFycmF5PW5vZGVJc1R5cGVkQXJyYXk/YmFzZVVuYXJ5KG5vZGVJc1R5cGVkQXJyYXkpOmJhc2VJc1R5cGVkQXJyYXk7LyoqXG4gICAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBgdW5kZWZpbmVkYC5cbiAgICAgICAqXG4gICAgICAgKiBAc3RhdGljXG4gICAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBgdW5kZWZpbmVkYCwgZWxzZSBgZmFsc2VgLlxuICAgICAgICogQGV4YW1wbGVcbiAgICAgICAqXG4gICAgICAgKiBfLmlzVW5kZWZpbmVkKHZvaWQgMCk7XG4gICAgICAgKiAvLyA9PiB0cnVlXG4gICAgICAgKlxuICAgICAgICogXy5pc1VuZGVmaW5lZChudWxsKTtcbiAgICAgICAqIC8vID0+IGZhbHNlXG4gICAgICAgKi9mdW5jdGlvbiBpc1VuZGVmaW5lZCh2YWx1ZSl7cmV0dXJuIHZhbHVlPT09dW5kZWZpbmVkO30vKipcbiAgICAgICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBXZWFrTWFwYCBvYmplY3QuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQHNpbmNlIDQuMy4wXG4gICAgICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHdlYWsgbWFwLCBlbHNlIGBmYWxzZWAuXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8uaXNXZWFrTWFwKG5ldyBXZWFrTWFwKTtcbiAgICAgICAgICogLy8gPT4gdHJ1ZVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLmlzV2Vha01hcChuZXcgTWFwKTtcbiAgICAgICAgICogLy8gPT4gZmFsc2VcbiAgICAgICAgICovZnVuY3Rpb24gaXNXZWFrTWFwKHZhbHVlKXtyZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSYmZ2V0VGFnKHZhbHVlKT09d2Vha01hcFRhZzt9LyoqXG4gICAgICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgV2Vha1NldGAgb2JqZWN0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSA0LjMuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB3ZWFrIHNldCwgZWxzZSBgZmFsc2VgLlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLmlzV2Vha1NldChuZXcgV2Vha1NldCk7XG4gICAgICAgICAqIC8vID0+IHRydWVcbiAgICAgICAgICpcbiAgICAgICAgICogXy5pc1dlYWtTZXQobmV3IFNldCk7XG4gICAgICAgICAqIC8vID0+IGZhbHNlXG4gICAgICAgICAqL2Z1bmN0aW9uIGlzV2Vha1NldCh2YWx1ZSl7cmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkmJmJhc2VHZXRUYWcodmFsdWUpPT13ZWFrU2V0VGFnO30vKipcbiAgICAgICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGVzcyB0aGFuIGBvdGhlcmAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQHNpbmNlIDMuOS4wXG4gICAgICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gICAgICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGxlc3MgdGhhbiBgb3RoZXJgLFxuICAgICAgICAgKiAgZWxzZSBgZmFsc2VgLlxuICAgICAgICAgKiBAc2VlIF8uZ3RcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogXy5sdCgxLCAzKTtcbiAgICAgICAgICogLy8gPT4gdHJ1ZVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLmx0KDMsIDMpO1xuICAgICAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLmx0KDMsIDEpO1xuICAgICAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAgICAgKi92YXIgbHQ9Y3JlYXRlUmVsYXRpb25hbE9wZXJhdGlvbihiYXNlTHQpOy8qKlxuICAgICAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYG90aGVyYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAc2luY2UgMy45LjBcbiAgICAgICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAgICAgICAgICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAgICAgICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvXG4gICAgICAgICAqICBgb3RoZXJgLCBlbHNlIGBmYWxzZWAuXG4gICAgICAgICAqIEBzZWUgXy5ndGVcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogXy5sdGUoMSwgMyk7XG4gICAgICAgICAqIC8vID0+IHRydWVcbiAgICAgICAgICpcbiAgICAgICAgICogXy5sdGUoMywgMyk7XG4gICAgICAgICAqIC8vID0+IHRydWVcbiAgICAgICAgICpcbiAgICAgICAgICogXy5sdGUoMywgMSk7XG4gICAgICAgICAqIC8vID0+IGZhbHNlXG4gICAgICAgICAqL3ZhciBsdGU9Y3JlYXRlUmVsYXRpb25hbE9wZXJhdGlvbihmdW5jdGlvbih2YWx1ZSxvdGhlcil7cmV0dXJuIHZhbHVlPD1vdGhlcjt9KTsvKipcbiAgICAgICAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYW4gYXJyYXkuXG4gICAgICAgKlxuICAgICAgICogQHN0YXRpY1xuICAgICAgICogQHNpbmNlIDAuMS4wXG4gICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gICAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBhcnJheS5cbiAgICAgICAqIEBleGFtcGxlXG4gICAgICAgKlxuICAgICAgICogXy50b0FycmF5KHsgJ2EnOiAxLCAnYic6IDIgfSk7XG4gICAgICAgKiAvLyA9PiBbMSwgMl1cbiAgICAgICAqXG4gICAgICAgKiBfLnRvQXJyYXkoJ2FiYycpO1xuICAgICAgICogLy8gPT4gWydhJywgJ2InLCAnYyddXG4gICAgICAgKlxuICAgICAgICogXy50b0FycmF5KDEpO1xuICAgICAgICogLy8gPT4gW11cbiAgICAgICAqXG4gICAgICAgKiBfLnRvQXJyYXkobnVsbCk7XG4gICAgICAgKiAvLyA9PiBbXVxuICAgICAgICovZnVuY3Rpb24gdG9BcnJheSh2YWx1ZSl7aWYoIXZhbHVlKXtyZXR1cm5bXTt9aWYoaXNBcnJheUxpa2UodmFsdWUpKXtyZXR1cm4gaXNTdHJpbmcodmFsdWUpP3N0cmluZ1RvQXJyYXkodmFsdWUpOmNvcHlBcnJheSh2YWx1ZSk7fWlmKHN5bUl0ZXJhdG9yJiZ2YWx1ZVtzeW1JdGVyYXRvcl0pe3JldHVybiBpdGVyYXRvclRvQXJyYXkodmFsdWVbc3ltSXRlcmF0b3JdKCkpO312YXIgdGFnPWdldFRhZyh2YWx1ZSksZnVuYz10YWc9PW1hcFRhZz9tYXBUb0FycmF5OnRhZz09c2V0VGFnP3NldFRvQXJyYXk6dmFsdWVzO3JldHVybiBmdW5jKHZhbHVlKTt9LyoqXG4gICAgICAgICAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBmaW5pdGUgbnVtYmVyLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSA0LjEyLjBcbiAgICAgICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAgICAgICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgY29udmVydGVkIG51bWJlci5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogXy50b0Zpbml0ZSgzLjIpO1xuICAgICAgICAgKiAvLyA9PiAzLjJcbiAgICAgICAgICpcbiAgICAgICAgICogXy50b0Zpbml0ZShOdW1iZXIuTUlOX1ZBTFVFKTtcbiAgICAgICAgICogLy8gPT4gNWUtMzI0XG4gICAgICAgICAqXG4gICAgICAgICAqIF8udG9GaW5pdGUoSW5maW5pdHkpO1xuICAgICAgICAgKiAvLyA9PiAxLjc5NzY5MzEzNDg2MjMxNTdlKzMwOFxuICAgICAgICAgKlxuICAgICAgICAgKiBfLnRvRmluaXRlKCczLjInKTtcbiAgICAgICAgICogLy8gPT4gMy4yXG4gICAgICAgICAqL2Z1bmN0aW9uIHRvRmluaXRlKHZhbHVlKXtpZighdmFsdWUpe3JldHVybiB2YWx1ZT09PTA/dmFsdWU6MDt9dmFsdWU9dG9OdW1iZXIodmFsdWUpO2lmKHZhbHVlPT09SU5GSU5JVFl8fHZhbHVlPT09LUlORklOSVRZKXt2YXIgc2lnbj12YWx1ZTwwPy0xOjE7cmV0dXJuIHNpZ24qTUFYX0lOVEVHRVI7fXJldHVybiB2YWx1ZT09PXZhbHVlP3ZhbHVlOjA7fS8qKlxuICAgICAgICAgKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGFuIGludGVnZXIuXG4gICAgICAgICAqXG4gICAgICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBsb29zZWx5IGJhc2VkIG9uXG4gICAgICAgICAqIFtgVG9JbnRlZ2VyYF0oaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXRvaW50ZWdlcikuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQHNpbmNlIDQuMC4wXG4gICAgICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gICAgICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBpbnRlZ2VyLlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLnRvSW50ZWdlcigzLjIpO1xuICAgICAgICAgKiAvLyA9PiAzXG4gICAgICAgICAqXG4gICAgICAgICAqIF8udG9JbnRlZ2VyKE51bWJlci5NSU5fVkFMVUUpO1xuICAgICAgICAgKiAvLyA9PiAwXG4gICAgICAgICAqXG4gICAgICAgICAqIF8udG9JbnRlZ2VyKEluZmluaXR5KTtcbiAgICAgICAgICogLy8gPT4gMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDhcbiAgICAgICAgICpcbiAgICAgICAgICogXy50b0ludGVnZXIoJzMuMicpO1xuICAgICAgICAgKiAvLyA9PiAzXG4gICAgICAgICAqL2Z1bmN0aW9uIHRvSW50ZWdlcih2YWx1ZSl7dmFyIHJlc3VsdD10b0Zpbml0ZSh2YWx1ZSkscmVtYWluZGVyPXJlc3VsdCUxO3JldHVybiByZXN1bHQ9PT1yZXN1bHQ/cmVtYWluZGVyP3Jlc3VsdC1yZW1haW5kZXI6cmVzdWx0OjA7fS8qKlxuICAgICAgICAgKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGFuIGludGVnZXIgc3VpdGFibGUgZm9yIHVzZSBhcyB0aGUgbGVuZ3RoIG9mIGFuXG4gICAgICAgICAqIGFycmF5LWxpa2Ugb2JqZWN0LlxuICAgICAgICAgKlxuICAgICAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgYmFzZWQgb25cbiAgICAgICAgICogW2BUb0xlbmd0aGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXRvbGVuZ3RoKS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAgICAgICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgY29udmVydGVkIGludGVnZXIuXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8udG9MZW5ndGgoMy4yKTtcbiAgICAgICAgICogLy8gPT4gM1xuICAgICAgICAgKlxuICAgICAgICAgKiBfLnRvTGVuZ3RoKE51bWJlci5NSU5fVkFMVUUpO1xuICAgICAgICAgKiAvLyA9PiAwXG4gICAgICAgICAqXG4gICAgICAgICAqIF8udG9MZW5ndGgoSW5maW5pdHkpO1xuICAgICAgICAgKiAvLyA9PiA0Mjk0OTY3Mjk1XG4gICAgICAgICAqXG4gICAgICAgICAqIF8udG9MZW5ndGgoJzMuMicpO1xuICAgICAgICAgKiAvLyA9PiAzXG4gICAgICAgICAqL2Z1bmN0aW9uIHRvTGVuZ3RoKHZhbHVlKXtyZXR1cm4gdmFsdWU/YmFzZUNsYW1wKHRvSW50ZWdlcih2YWx1ZSksMCxNQVhfQVJSQVlfTEVOR1RIKTowO30vKipcbiAgICAgICAgICogQ29udmVydHMgYHZhbHVlYCB0byBhIG51bWJlci5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHJvY2Vzcy5cbiAgICAgICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgbnVtYmVyLlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLnRvTnVtYmVyKDMuMik7XG4gICAgICAgICAqIC8vID0+IDMuMlxuICAgICAgICAgKlxuICAgICAgICAgKiBfLnRvTnVtYmVyKE51bWJlci5NSU5fVkFMVUUpO1xuICAgICAgICAgKiAvLyA9PiA1ZS0zMjRcbiAgICAgICAgICpcbiAgICAgICAgICogXy50b051bWJlcihJbmZpbml0eSk7XG4gICAgICAgICAqIC8vID0+IEluZmluaXR5XG4gICAgICAgICAqXG4gICAgICAgICAqIF8udG9OdW1iZXIoJzMuMicpO1xuICAgICAgICAgKiAvLyA9PiAzLjJcbiAgICAgICAgICovZnVuY3Rpb24gdG9OdW1iZXIodmFsdWUpe2lmKHR5cGVvZiB2YWx1ZT09PSdudW1iZXInKXtyZXR1cm4gdmFsdWU7fWlmKGlzU3ltYm9sKHZhbHVlKSl7cmV0dXJuIE5BTjt9aWYoaXNPYmplY3QodmFsdWUpKXt2YXIgb3RoZXI9dHlwZW9mIHZhbHVlLnZhbHVlT2Y9PT0nZnVuY3Rpb24nP3ZhbHVlLnZhbHVlT2YoKTp2YWx1ZTt2YWx1ZT1pc09iamVjdChvdGhlcik/b3RoZXIrJyc6b3RoZXI7fWlmKHR5cGVvZiB2YWx1ZSE9PSdzdHJpbmcnKXtyZXR1cm4gdmFsdWU9PT0wP3ZhbHVlOit2YWx1ZTt9dmFsdWU9dmFsdWUucmVwbGFjZShyZVRyaW0sJycpO3ZhciBpc0JpbmFyeT1yZUlzQmluYXJ5LnRlc3QodmFsdWUpO3JldHVybiBpc0JpbmFyeXx8cmVJc09jdGFsLnRlc3QodmFsdWUpP2ZyZWVQYXJzZUludCh2YWx1ZS5zbGljZSgyKSxpc0JpbmFyeT8yOjgpOnJlSXNCYWRIZXgudGVzdCh2YWx1ZSk/TkFOOit2YWx1ZTt9LyoqXG4gICAgICAgICAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBwbGFpbiBvYmplY3QgZmxhdHRlbmluZyBpbmhlcml0ZWQgZW51bWVyYWJsZSBzdHJpbmdcbiAgICAgICAgICoga2V5ZWQgcHJvcGVydGllcyBvZiBgdmFsdWVgIHRvIG93biBwcm9wZXJ0aWVzIG9mIHRoZSBwbGFpbiBvYmplY3QuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQHNpbmNlIDMuMC4wXG4gICAgICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gICAgICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBwbGFpbiBvYmplY3QuXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIGZ1bmN0aW9uIEZvbygpIHtcbiAgICAgICAgICogICB0aGlzLmIgPSAyO1xuICAgICAgICAgKiB9XG4gICAgICAgICAqXG4gICAgICAgICAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gICAgICAgICAqXG4gICAgICAgICAqIF8uYXNzaWduKHsgJ2EnOiAxIH0sIG5ldyBGb28pO1xuICAgICAgICAgKiAvLyA9PiB7ICdhJzogMSwgJ2InOiAyIH1cbiAgICAgICAgICpcbiAgICAgICAgICogXy5hc3NpZ24oeyAnYSc6IDEgfSwgXy50b1BsYWluT2JqZWN0KG5ldyBGb28pKTtcbiAgICAgICAgICogLy8gPT4geyAnYSc6IDEsICdiJzogMiwgJ2MnOiAzIH1cbiAgICAgICAgICovZnVuY3Rpb24gdG9QbGFpbk9iamVjdCh2YWx1ZSl7cmV0dXJuIGNvcHlPYmplY3QodmFsdWUsa2V5c0luKHZhbHVlKSk7fS8qKlxuICAgICAgICAgKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc2FmZSBpbnRlZ2VyLiBBIHNhZmUgaW50ZWdlciBjYW4gYmUgY29tcGFyZWQgYW5kXG4gICAgICAgICAqIHJlcHJlc2VudGVkIGNvcnJlY3RseS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAgICAgICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgY29udmVydGVkIGludGVnZXIuXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8udG9TYWZlSW50ZWdlcigzLjIpO1xuICAgICAgICAgKiAvLyA9PiAzXG4gICAgICAgICAqXG4gICAgICAgICAqIF8udG9TYWZlSW50ZWdlcihOdW1iZXIuTUlOX1ZBTFVFKTtcbiAgICAgICAgICogLy8gPT4gMFxuICAgICAgICAgKlxuICAgICAgICAgKiBfLnRvU2FmZUludGVnZXIoSW5maW5pdHkpO1xuICAgICAgICAgKiAvLyA9PiA5MDA3MTk5MjU0NzQwOTkxXG4gICAgICAgICAqXG4gICAgICAgICAqIF8udG9TYWZlSW50ZWdlcignMy4yJyk7XG4gICAgICAgICAqIC8vID0+IDNcbiAgICAgICAgICovZnVuY3Rpb24gdG9TYWZlSW50ZWdlcih2YWx1ZSl7cmV0dXJuIHZhbHVlP2Jhc2VDbGFtcCh0b0ludGVnZXIodmFsdWUpLC1NQVhfU0FGRV9JTlRFR0VSLE1BWF9TQUZFX0lOVEVHRVIpOnZhbHVlPT09MD92YWx1ZTowO30vKipcbiAgICAgICAgICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZy4gQW4gZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkIGZvciBgbnVsbGBcbiAgICAgICAgICogYW5kIGB1bmRlZmluZWRgIHZhbHVlcy4gVGhlIHNpZ24gb2YgYC0wYCBpcyBwcmVzZXJ2ZWQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQHNpbmNlIDQuMC4wXG4gICAgICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBzdHJpbmcuXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8udG9TdHJpbmcobnVsbCk7XG4gICAgICAgICAqIC8vID0+ICcnXG4gICAgICAgICAqXG4gICAgICAgICAqIF8udG9TdHJpbmcoLTApO1xuICAgICAgICAgKiAvLyA9PiAnLTAnXG4gICAgICAgICAqXG4gICAgICAgICAqIF8udG9TdHJpbmcoWzEsIDIsIDNdKTtcbiAgICAgICAgICogLy8gPT4gJzEsMiwzJ1xuICAgICAgICAgKi9mdW5jdGlvbiB0b1N0cmluZyh2YWx1ZSl7cmV0dXJuIHZhbHVlPT1udWxsPycnOmJhc2VUb1N0cmluZyh2YWx1ZSk7fS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovLyoqXG4gICAgICAgICAqIEFzc2lnbnMgb3duIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnRpZXMgb2Ygc291cmNlIG9iamVjdHMgdG8gdGhlXG4gICAgICAgICAqIGRlc3RpbmF0aW9uIG9iamVjdC4gU291cmNlIG9iamVjdHMgYXJlIGFwcGxpZWQgZnJvbSBsZWZ0IHRvIHJpZ2h0LlxuICAgICAgICAgKiBTdWJzZXF1ZW50IHNvdXJjZXMgb3ZlcndyaXRlIHByb3BlcnR5IGFzc2lnbm1lbnRzIG9mIHByZXZpb3VzIHNvdXJjZXMuXG4gICAgICAgICAqXG4gICAgICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBvYmplY3RgIGFuZCBpcyBsb29zZWx5IGJhc2VkIG9uXG4gICAgICAgICAqIFtgT2JqZWN0LmFzc2lnbmBdKGh0dHBzOi8vbWRuLmlvL09iamVjdC9hc3NpZ24pLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSAwLjEwLjBcbiAgICAgICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gICAgICAgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBbc291cmNlc10gVGhlIHNvdXJjZSBvYmplY3RzLlxuICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAgICAgKiBAc2VlIF8uYXNzaWduSW5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogZnVuY3Rpb24gRm9vKCkge1xuICAgICAgICAgKiAgIHRoaXMuYSA9IDE7XG4gICAgICAgICAqIH1cbiAgICAgICAgICpcbiAgICAgICAgICogZnVuY3Rpb24gQmFyKCkge1xuICAgICAgICAgKiAgIHRoaXMuYyA9IDM7XG4gICAgICAgICAqIH1cbiAgICAgICAgICpcbiAgICAgICAgICogRm9vLnByb3RvdHlwZS5iID0gMjtcbiAgICAgICAgICogQmFyLnByb3RvdHlwZS5kID0gNDtcbiAgICAgICAgICpcbiAgICAgICAgICogXy5hc3NpZ24oeyAnYSc6IDAgfSwgbmV3IEZvbywgbmV3IEJhcik7XG4gICAgICAgICAqIC8vID0+IHsgJ2EnOiAxLCAnYyc6IDMgfVxuICAgICAgICAgKi92YXIgYXNzaWduPWNyZWF0ZUFzc2lnbmVyKGZ1bmN0aW9uKG9iamVjdCxzb3VyY2Upe2lmKGlzUHJvdG90eXBlKHNvdXJjZSl8fGlzQXJyYXlMaWtlKHNvdXJjZSkpe2NvcHlPYmplY3Qoc291cmNlLGtleXMoc291cmNlKSxvYmplY3QpO3JldHVybjt9Zm9yKHZhciBrZXkgaW4gc291cmNlKXtpZihoYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSxrZXkpKXthc3NpZ25WYWx1ZShvYmplY3Qsa2V5LHNvdXJjZVtrZXldKTt9fX0pOy8qKlxuICAgICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5hc3NpZ25gIGV4Y2VwdCB0aGF0IGl0IGl0ZXJhdGVzIG92ZXIgb3duIGFuZFxuICAgICAgICogaW5oZXJpdGVkIHNvdXJjZSBwcm9wZXJ0aWVzLlxuICAgICAgICpcbiAgICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBvYmplY3RgLlxuICAgICAgICpcbiAgICAgICAqIEBzdGF0aWNcbiAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgICAqIEBhbGlhcyBleHRlbmRcbiAgICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAgICAgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBbc291cmNlc10gVGhlIHNvdXJjZSBvYmplY3RzLlxuICAgICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgICAqIEBzZWUgXy5hc3NpZ25cbiAgICAgICAqIEBleGFtcGxlXG4gICAgICAgKlxuICAgICAgICogZnVuY3Rpb24gRm9vKCkge1xuICAgICAgICogICB0aGlzLmEgPSAxO1xuICAgICAgICogfVxuICAgICAgICpcbiAgICAgICAqIGZ1bmN0aW9uIEJhcigpIHtcbiAgICAgICAqICAgdGhpcy5jID0gMztcbiAgICAgICAqIH1cbiAgICAgICAqXG4gICAgICAgKiBGb28ucHJvdG90eXBlLmIgPSAyO1xuICAgICAgICogQmFyLnByb3RvdHlwZS5kID0gNDtcbiAgICAgICAqXG4gICAgICAgKiBfLmFzc2lnbkluKHsgJ2EnOiAwIH0sIG5ldyBGb28sIG5ldyBCYXIpO1xuICAgICAgICogLy8gPT4geyAnYSc6IDEsICdiJzogMiwgJ2MnOiAzLCAnZCc6IDQgfVxuICAgICAgICovdmFyIGFzc2lnbkluPWNyZWF0ZUFzc2lnbmVyKGZ1bmN0aW9uKG9iamVjdCxzb3VyY2Upe2NvcHlPYmplY3Qoc291cmNlLGtleXNJbihzb3VyY2UpLG9iamVjdCk7fSk7LyoqXG4gICAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmFzc2lnbkluYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBjdXN0b21pemVyYFxuICAgICAgICogd2hpY2ggaXMgaW52b2tlZCB0byBwcm9kdWNlIHRoZSBhc3NpZ25lZCB2YWx1ZXMuIElmIGBjdXN0b21pemVyYCByZXR1cm5zXG4gICAgICAgKiBgdW5kZWZpbmVkYCwgYXNzaWdubWVudCBpcyBoYW5kbGVkIGJ5IHRoZSBtZXRob2QgaW5zdGVhZC4gVGhlIGBjdXN0b21pemVyYFxuICAgICAgICogaXMgaW52b2tlZCB3aXRoIGZpdmUgYXJndW1lbnRzOiAob2JqVmFsdWUsIHNyY1ZhbHVlLCBrZXksIG9iamVjdCwgc291cmNlKS5cbiAgICAgICAqXG4gICAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cbiAgICAgICAqXG4gICAgICAgKiBAc3RhdGljXG4gICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICogQHNpbmNlIDQuMC4wXG4gICAgICAgKiBAYWxpYXMgZXh0ZW5kV2l0aFxuICAgICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICAgICAgICogQHBhcmFtIHsuLi5PYmplY3R9IHNvdXJjZXMgVGhlIHNvdXJjZSBvYmplY3RzLlxuICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgYXNzaWduZWQgdmFsdWVzLlxuICAgICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgICAqIEBzZWUgXy5hc3NpZ25XaXRoXG4gICAgICAgKiBAZXhhbXBsZVxuICAgICAgICpcbiAgICAgICAqIGZ1bmN0aW9uIGN1c3RvbWl6ZXIob2JqVmFsdWUsIHNyY1ZhbHVlKSB7XG4gICAgICAgKiAgIHJldHVybiBfLmlzVW5kZWZpbmVkKG9ialZhbHVlKSA/IHNyY1ZhbHVlIDogb2JqVmFsdWU7XG4gICAgICAgKiB9XG4gICAgICAgKlxuICAgICAgICogdmFyIGRlZmF1bHRzID0gXy5wYXJ0aWFsUmlnaHQoXy5hc3NpZ25JbldpdGgsIGN1c3RvbWl6ZXIpO1xuICAgICAgICpcbiAgICAgICAqIGRlZmF1bHRzKHsgJ2EnOiAxIH0sIHsgJ2InOiAyIH0sIHsgJ2EnOiAzIH0pO1xuICAgICAgICogLy8gPT4geyAnYSc6IDEsICdiJzogMiB9XG4gICAgICAgKi92YXIgYXNzaWduSW5XaXRoPWNyZWF0ZUFzc2lnbmVyKGZ1bmN0aW9uKG9iamVjdCxzb3VyY2Usc3JjSW5kZXgsY3VzdG9taXplcil7Y29weU9iamVjdChzb3VyY2Usa2V5c0luKHNvdXJjZSksb2JqZWN0LGN1c3RvbWl6ZXIpO30pOy8qKlxuICAgICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5hc3NpZ25gIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGN1c3RvbWl6ZXJgXG4gICAgICAgKiB3aGljaCBpcyBpbnZva2VkIHRvIHByb2R1Y2UgdGhlIGFzc2lnbmVkIHZhbHVlcy4gSWYgYGN1c3RvbWl6ZXJgIHJldHVybnNcbiAgICAgICAqIGB1bmRlZmluZWRgLCBhc3NpZ25tZW50IGlzIGhhbmRsZWQgYnkgdGhlIG1ldGhvZCBpbnN0ZWFkLiBUaGUgYGN1c3RvbWl6ZXJgXG4gICAgICAgKiBpcyBpbnZva2VkIHdpdGggZml2ZSBhcmd1bWVudHM6IChvYmpWYWx1ZSwgc3JjVmFsdWUsIGtleSwgb2JqZWN0LCBzb3VyY2UpLlxuICAgICAgICpcbiAgICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBvYmplY3RgLlxuICAgICAgICpcbiAgICAgICAqIEBzdGF0aWNcbiAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAgICAgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBzb3VyY2VzIFRoZSBzb3VyY2Ugb2JqZWN0cy5cbiAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGFzc2lnbmVkIHZhbHVlcy5cbiAgICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICAgKiBAc2VlIF8uYXNzaWduSW5XaXRoXG4gICAgICAgKiBAZXhhbXBsZVxuICAgICAgICpcbiAgICAgICAqIGZ1bmN0aW9uIGN1c3RvbWl6ZXIob2JqVmFsdWUsIHNyY1ZhbHVlKSB7XG4gICAgICAgKiAgIHJldHVybiBfLmlzVW5kZWZpbmVkKG9ialZhbHVlKSA/IHNyY1ZhbHVlIDogb2JqVmFsdWU7XG4gICAgICAgKiB9XG4gICAgICAgKlxuICAgICAgICogdmFyIGRlZmF1bHRzID0gXy5wYXJ0aWFsUmlnaHQoXy5hc3NpZ25XaXRoLCBjdXN0b21pemVyKTtcbiAgICAgICAqXG4gICAgICAgKiBkZWZhdWx0cyh7ICdhJzogMSB9LCB7ICdiJzogMiB9LCB7ICdhJzogMyB9KTtcbiAgICAgICAqIC8vID0+IHsgJ2EnOiAxLCAnYic6IDIgfVxuICAgICAgICovdmFyIGFzc2lnbldpdGg9Y3JlYXRlQXNzaWduZXIoZnVuY3Rpb24ob2JqZWN0LHNvdXJjZSxzcmNJbmRleCxjdXN0b21pemVyKXtjb3B5T2JqZWN0KHNvdXJjZSxrZXlzKHNvdXJjZSksb2JqZWN0LGN1c3RvbWl6ZXIpO30pOy8qKlxuICAgICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiB2YWx1ZXMgY29ycmVzcG9uZGluZyB0byBgcGF0aHNgIG9mIGBvYmplY3RgLlxuICAgICAgICpcbiAgICAgICAqIEBzdGF0aWNcbiAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgKiBAc2luY2UgMS4wLjBcbiAgICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gICAgICAgKiBAcGFyYW0gey4uLihzdHJpbmd8c3RyaW5nW10pfSBbcGF0aHNdIFRoZSBwcm9wZXJ0eSBwYXRocyB0byBwaWNrLlxuICAgICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBwaWNrZWQgdmFsdWVzLlxuICAgICAgICogQGV4YW1wbGVcbiAgICAgICAqXG4gICAgICAgKiB2YXIgb2JqZWN0ID0geyAnYSc6IFt7ICdiJzogeyAnYyc6IDMgfSB9LCA0XSB9O1xuICAgICAgICpcbiAgICAgICAqIF8uYXQob2JqZWN0LCBbJ2FbMF0uYi5jJywgJ2FbMV0nXSk7XG4gICAgICAgKiAvLyA9PiBbMywgNF1cbiAgICAgICAqL3ZhciBhdD1mbGF0UmVzdChiYXNlQXQpOy8qKlxuICAgICAgICAgKiBDcmVhdGVzIGFuIG9iamVjdCB0aGF0IGluaGVyaXRzIGZyb20gdGhlIGBwcm90b3R5cGVgIG9iamVjdC4gSWYgYVxuICAgICAgICAgKiBgcHJvcGVydGllc2Agb2JqZWN0IGlzIGdpdmVuLCBpdHMgb3duIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnRpZXNcbiAgICAgICAgICogYXJlIGFzc2lnbmVkIHRvIHRoZSBjcmVhdGVkIG9iamVjdC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAc2luY2UgMi4zLjBcbiAgICAgICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcHJvdG90eXBlIFRoZSBvYmplY3QgdG8gaW5oZXJpdCBmcm9tLlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gW3Byb3BlcnRpZXNdIFRoZSBwcm9wZXJ0aWVzIHRvIGFzc2lnbiB0byB0aGUgb2JqZWN0LlxuICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiBmdW5jdGlvbiBTaGFwZSgpIHtcbiAgICAgICAgICogICB0aGlzLnggPSAwO1xuICAgICAgICAgKiAgIHRoaXMueSA9IDA7XG4gICAgICAgICAqIH1cbiAgICAgICAgICpcbiAgICAgICAgICogZnVuY3Rpb24gQ2lyY2xlKCkge1xuICAgICAgICAgKiAgIFNoYXBlLmNhbGwodGhpcyk7XG4gICAgICAgICAqIH1cbiAgICAgICAgICpcbiAgICAgICAgICogQ2lyY2xlLnByb3RvdHlwZSA9IF8uY3JlYXRlKFNoYXBlLnByb3RvdHlwZSwge1xuICAgICAgICAgKiAgICdjb25zdHJ1Y3Rvcic6IENpcmNsZVxuICAgICAgICAgKiB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogdmFyIGNpcmNsZSA9IG5ldyBDaXJjbGU7XG4gICAgICAgICAqIGNpcmNsZSBpbnN0YW5jZW9mIENpcmNsZTtcbiAgICAgICAgICogLy8gPT4gdHJ1ZVxuICAgICAgICAgKlxuICAgICAgICAgKiBjaXJjbGUgaW5zdGFuY2VvZiBTaGFwZTtcbiAgICAgICAgICogLy8gPT4gdHJ1ZVxuICAgICAgICAgKi9mdW5jdGlvbiBjcmVhdGUocHJvdG90eXBlLHByb3BlcnRpZXMpe3ZhciByZXN1bHQ9YmFzZUNyZWF0ZShwcm90b3R5cGUpO3JldHVybiBwcm9wZXJ0aWVzPT1udWxsP3Jlc3VsdDpiYXNlQXNzaWduKHJlc3VsdCxwcm9wZXJ0aWVzKTt9LyoqXG4gICAgICAgICAqIEFzc2lnbnMgb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydGllcyBvZiBzb3VyY2VcbiAgICAgICAgICogb2JqZWN0cyB0byB0aGUgZGVzdGluYXRpb24gb2JqZWN0IGZvciBhbGwgZGVzdGluYXRpb24gcHJvcGVydGllcyB0aGF0XG4gICAgICAgICAqIHJlc29sdmUgdG8gYHVuZGVmaW5lZGAuIFNvdXJjZSBvYmplY3RzIGFyZSBhcHBsaWVkIGZyb20gbGVmdCB0byByaWdodC5cbiAgICAgICAgICogT25jZSBhIHByb3BlcnR5IGlzIHNldCwgYWRkaXRpb25hbCB2YWx1ZXMgb2YgdGhlIHNhbWUgcHJvcGVydHkgYXJlIGlnbm9yZWQuXG4gICAgICAgICAqXG4gICAgICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBvYmplY3RgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAgICAgICAgICogQHBhcmFtIHsuLi5PYmplY3R9IFtzb3VyY2VzXSBUaGUgc291cmNlIG9iamVjdHMuXG4gICAgICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICAgICAqIEBzZWUgXy5kZWZhdWx0c0RlZXBcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogXy5kZWZhdWx0cyh7ICdhJzogMSB9LCB7ICdiJzogMiB9LCB7ICdhJzogMyB9KTtcbiAgICAgICAgICogLy8gPT4geyAnYSc6IDEsICdiJzogMiB9XG4gICAgICAgICAqL3ZhciBkZWZhdWx0cz1iYXNlUmVzdChmdW5jdGlvbihvYmplY3Qsc291cmNlcyl7b2JqZWN0PU9iamVjdChvYmplY3QpO3ZhciBpbmRleD0tMTt2YXIgbGVuZ3RoPXNvdXJjZXMubGVuZ3RoO3ZhciBndWFyZD1sZW5ndGg+Mj9zb3VyY2VzWzJdOnVuZGVmaW5lZDtpZihndWFyZCYmaXNJdGVyYXRlZUNhbGwoc291cmNlc1swXSxzb3VyY2VzWzFdLGd1YXJkKSl7bGVuZ3RoPTE7fXdoaWxlKCsraW5kZXg8bGVuZ3RoKXt2YXIgc291cmNlPXNvdXJjZXNbaW5kZXhdO3ZhciBwcm9wcz1rZXlzSW4oc291cmNlKTt2YXIgcHJvcHNJbmRleD0tMTt2YXIgcHJvcHNMZW5ndGg9cHJvcHMubGVuZ3RoO3doaWxlKCsrcHJvcHNJbmRleDxwcm9wc0xlbmd0aCl7dmFyIGtleT1wcm9wc1twcm9wc0luZGV4XTt2YXIgdmFsdWU9b2JqZWN0W2tleV07aWYodmFsdWU9PT11bmRlZmluZWR8fGVxKHZhbHVlLG9iamVjdFByb3RvW2tleV0pJiYhaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3Qsa2V5KSl7b2JqZWN0W2tleV09c291cmNlW2tleV07fX19cmV0dXJuIG9iamVjdDt9KTsvKipcbiAgICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZGVmYXVsdHNgIGV4Y2VwdCB0aGF0IGl0IHJlY3Vyc2l2ZWx5IGFzc2lnbnNcbiAgICAgICAqIGRlZmF1bHQgcHJvcGVydGllcy5cbiAgICAgICAqXG4gICAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cbiAgICAgICAqXG4gICAgICAgKiBAc3RhdGljXG4gICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICogQHNpbmNlIDMuMTAuMFxuICAgICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICAgICAgICogQHBhcmFtIHsuLi5PYmplY3R9IFtzb3VyY2VzXSBUaGUgc291cmNlIG9iamVjdHMuXG4gICAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAgICogQHNlZSBfLmRlZmF1bHRzXG4gICAgICAgKiBAZXhhbXBsZVxuICAgICAgICpcbiAgICAgICAqIF8uZGVmYXVsdHNEZWVwKHsgJ2EnOiB7ICdiJzogMiB9IH0sIHsgJ2EnOiB7ICdiJzogMSwgJ2MnOiAzIH0gfSk7XG4gICAgICAgKiAvLyA9PiB7ICdhJzogeyAnYic6IDIsICdjJzogMyB9IH1cbiAgICAgICAqL3ZhciBkZWZhdWx0c0RlZXA9YmFzZVJlc3QoZnVuY3Rpb24oYXJncyl7YXJncy5wdXNoKHVuZGVmaW5lZCxjdXN0b21EZWZhdWx0c01lcmdlKTtyZXR1cm4gYXBwbHkobWVyZ2VXaXRoLHVuZGVmaW5lZCxhcmdzKTt9KTsvKipcbiAgICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZmluZGAgZXhjZXB0IHRoYXQgaXQgcmV0dXJucyB0aGUga2V5IG9mIHRoZSBmaXJzdFxuICAgICAgICogZWxlbWVudCBgcHJlZGljYXRlYCByZXR1cm5zIHRydXRoeSBmb3IgaW5zdGVhZCBvZiB0aGUgZWxlbWVudCBpdHNlbGYuXG4gICAgICAgKlxuICAgICAgICogQHN0YXRpY1xuICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAqIEBzaW5jZSAxLjEuMFxuICAgICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGluc3BlY3QuXG4gICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfHVuZGVmaW5lZH0gUmV0dXJucyB0aGUga2V5IG9mIHRoZSBtYXRjaGVkIGVsZW1lbnQsXG4gICAgICAgKiAgZWxzZSBgdW5kZWZpbmVkYC5cbiAgICAgICAqIEBleGFtcGxlXG4gICAgICAgKlxuICAgICAgICogdmFyIHVzZXJzID0ge1xuICAgICAgICogICAnYmFybmV5JzogIHsgJ2FnZSc6IDM2LCAnYWN0aXZlJzogdHJ1ZSB9LFxuICAgICAgICogICAnZnJlZCc6ICAgIHsgJ2FnZSc6IDQwLCAnYWN0aXZlJzogZmFsc2UgfSxcbiAgICAgICAqICAgJ3BlYmJsZXMnOiB7ICdhZ2UnOiAxLCAgJ2FjdGl2ZSc6IHRydWUgfVxuICAgICAgICogfTtcbiAgICAgICAqXG4gICAgICAgKiBfLmZpbmRLZXkodXNlcnMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuIG8uYWdlIDwgNDA7IH0pO1xuICAgICAgICogLy8gPT4gJ2Jhcm5leScgKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAgICAgICAqXG4gICAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc2AgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAgICogXy5maW5kS2V5KHVzZXJzLCB7ICdhZ2UnOiAxLCAnYWN0aXZlJzogdHJ1ZSB9KTtcbiAgICAgICAqIC8vID0+ICdwZWJibGVzJ1xuICAgICAgICpcbiAgICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzUHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgICAqIF8uZmluZEtleSh1c2VycywgWydhY3RpdmUnLCBmYWxzZV0pO1xuICAgICAgICogLy8gPT4gJ2ZyZWQnXG4gICAgICAgKlxuICAgICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICAgKiBfLmZpbmRLZXkodXNlcnMsICdhY3RpdmUnKTtcbiAgICAgICAqIC8vID0+ICdiYXJuZXknXG4gICAgICAgKi9mdW5jdGlvbiBmaW5kS2V5KG9iamVjdCxwcmVkaWNhdGUpe3JldHVybiBiYXNlRmluZEtleShvYmplY3QsZ2V0SXRlcmF0ZWUocHJlZGljYXRlLDMpLGJhc2VGb3JPd24pO30vKipcbiAgICAgICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5maW5kS2V5YCBleGNlcHQgdGhhdCBpdCBpdGVyYXRlcyBvdmVyIGVsZW1lbnRzIG9mXG4gICAgICAgICAqIGEgY29sbGVjdGlvbiBpbiB0aGUgb3Bwb3NpdGUgb3JkZXIuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQHNpbmNlIDIuMC4wXG4gICAgICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGluc3BlY3QuXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgICAgICogQHJldHVybnMge3N0cmluZ3x1bmRlZmluZWR9IFJldHVybnMgdGhlIGtleSBvZiB0aGUgbWF0Y2hlZCBlbGVtZW50LFxuICAgICAgICAgKiAgZWxzZSBgdW5kZWZpbmVkYC5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogdmFyIHVzZXJzID0ge1xuICAgICAgICAgKiAgICdiYXJuZXknOiAgeyAnYWdlJzogMzYsICdhY3RpdmUnOiB0cnVlIH0sXG4gICAgICAgICAqICAgJ2ZyZWQnOiAgICB7ICdhZ2UnOiA0MCwgJ2FjdGl2ZSc6IGZhbHNlIH0sXG4gICAgICAgICAqICAgJ3BlYmJsZXMnOiB7ICdhZ2UnOiAxLCAgJ2FjdGl2ZSc6IHRydWUgfVxuICAgICAgICAgKiB9O1xuICAgICAgICAgKlxuICAgICAgICAgKiBfLmZpbmRMYXN0S2V5KHVzZXJzLCBmdW5jdGlvbihvKSB7IHJldHVybiBvLmFnZSA8IDQwOyB9KTtcbiAgICAgICAgICogLy8gPT4gcmV0dXJucyAncGViYmxlcycgYXNzdW1pbmcgYF8uZmluZEtleWAgcmV0dXJucyAnYmFybmV5J1xuICAgICAgICAgKlxuICAgICAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc2AgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAgICAgKiBfLmZpbmRMYXN0S2V5KHVzZXJzLCB7ICdhZ2UnOiAzNiwgJ2FjdGl2ZSc6IHRydWUgfSk7XG4gICAgICAgICAqIC8vID0+ICdiYXJuZXknXG4gICAgICAgICAqXG4gICAgICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzUHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgICAgICogXy5maW5kTGFzdEtleSh1c2VycywgWydhY3RpdmUnLCBmYWxzZV0pO1xuICAgICAgICAgKiAvLyA9PiAnZnJlZCdcbiAgICAgICAgICpcbiAgICAgICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICAgICAqIF8uZmluZExhc3RLZXkodXNlcnMsICdhY3RpdmUnKTtcbiAgICAgICAgICogLy8gPT4gJ3BlYmJsZXMnXG4gICAgICAgICAqL2Z1bmN0aW9uIGZpbmRMYXN0S2V5KG9iamVjdCxwcmVkaWNhdGUpe3JldHVybiBiYXNlRmluZEtleShvYmplY3QsZ2V0SXRlcmF0ZWUocHJlZGljYXRlLDMpLGJhc2VGb3JPd25SaWdodCk7fS8qKlxuICAgICAgICAgKiBJdGVyYXRlcyBvdmVyIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnRpZXMgb2YgYW5cbiAgICAgICAgICogb2JqZWN0IGFuZCBpbnZva2VzIGBpdGVyYXRlZWAgZm9yIGVhY2ggcHJvcGVydHkuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkXG4gICAgICAgICAqIHdpdGggdGhyZWUgYXJndW1lbnRzOiAodmFsdWUsIGtleSwgb2JqZWN0KS4gSXRlcmF0ZWUgZnVuY3Rpb25zIG1heSBleGl0XG4gICAgICAgICAqIGl0ZXJhdGlvbiBlYXJseSBieSBleHBsaWNpdGx5IHJldHVybmluZyBgZmFsc2VgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSAwLjMuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAgICAgKiBAc2VlIF8uZm9ySW5SaWdodFxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiBmdW5jdGlvbiBGb28oKSB7XG4gICAgICAgICAqICAgdGhpcy5hID0gMTtcbiAgICAgICAgICogICB0aGlzLmIgPSAyO1xuICAgICAgICAgKiB9XG4gICAgICAgICAqXG4gICAgICAgICAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gICAgICAgICAqXG4gICAgICAgICAqIF8uZm9ySW4obmV3IEZvbywgZnVuY3Rpb24odmFsdWUsIGtleSkge1xuICAgICAgICAgKiAgIGNvbnNvbGUubG9nKGtleSk7XG4gICAgICAgICAqIH0pO1xuICAgICAgICAgKiAvLyA9PiBMb2dzICdhJywgJ2InLCB0aGVuICdjJyAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKS5cbiAgICAgICAgICovZnVuY3Rpb24gZm9ySW4ob2JqZWN0LGl0ZXJhdGVlKXtyZXR1cm4gb2JqZWN0PT1udWxsP29iamVjdDpiYXNlRm9yKG9iamVjdCxnZXRJdGVyYXRlZShpdGVyYXRlZSwzKSxrZXlzSW4pO30vKipcbiAgICAgICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5mb3JJbmAgZXhjZXB0IHRoYXQgaXQgaXRlcmF0ZXMgb3ZlciBwcm9wZXJ0aWVzIG9mXG4gICAgICAgICAqIGBvYmplY3RgIGluIHRoZSBvcHBvc2l0ZSBvcmRlci5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAc2luY2UgMi4wLjBcbiAgICAgICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgICAgICogQHNlZSBfLmZvckluXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIGZ1bmN0aW9uIEZvbygpIHtcbiAgICAgICAgICogICB0aGlzLmEgPSAxO1xuICAgICAgICAgKiAgIHRoaXMuYiA9IDI7XG4gICAgICAgICAqIH1cbiAgICAgICAgICpcbiAgICAgICAgICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAgICAgICAgICpcbiAgICAgICAgICogXy5mb3JJblJpZ2h0KG5ldyBGb28sIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICAgICAgICogICBjb25zb2xlLmxvZyhrZXkpO1xuICAgICAgICAgKiB9KTtcbiAgICAgICAgICogLy8gPT4gTG9ncyAnYycsICdiJywgdGhlbiAnYScgYXNzdW1pbmcgYF8uZm9ySW5gIGxvZ3MgJ2EnLCAnYicsIHRoZW4gJ2MnLlxuICAgICAgICAgKi9mdW5jdGlvbiBmb3JJblJpZ2h0KG9iamVjdCxpdGVyYXRlZSl7cmV0dXJuIG9iamVjdD09bnVsbD9vYmplY3Q6YmFzZUZvclJpZ2h0KG9iamVjdCxnZXRJdGVyYXRlZShpdGVyYXRlZSwzKSxrZXlzSW4pO30vKipcbiAgICAgICAgICogSXRlcmF0ZXMgb3ZlciBvd24gZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydGllcyBvZiBhbiBvYmplY3QgYW5kXG4gICAgICAgICAqIGludm9rZXMgYGl0ZXJhdGVlYCBmb3IgZWFjaCBwcm9wZXJ0eS4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCB0aHJlZVxuICAgICAgICAgKiBhcmd1bWVudHM6ICh2YWx1ZSwga2V5LCBvYmplY3QpLiBJdGVyYXRlZSBmdW5jdGlvbnMgbWF5IGV4aXQgaXRlcmF0aW9uXG4gICAgICAgICAqIGVhcmx5IGJ5IGV4cGxpY2l0bHkgcmV0dXJuaW5nIGBmYWxzZWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQHNpbmNlIDAuMy4wXG4gICAgICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICAgICAqIEBzZWUgXy5mb3JPd25SaWdodFxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiBmdW5jdGlvbiBGb28oKSB7XG4gICAgICAgICAqICAgdGhpcy5hID0gMTtcbiAgICAgICAgICogICB0aGlzLmIgPSAyO1xuICAgICAgICAgKiB9XG4gICAgICAgICAqXG4gICAgICAgICAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gICAgICAgICAqXG4gICAgICAgICAqIF8uZm9yT3duKG5ldyBGb28sIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICAgICAgICogICBjb25zb2xlLmxvZyhrZXkpO1xuICAgICAgICAgKiB9KTtcbiAgICAgICAgICogLy8gPT4gTG9ncyAnYScgdGhlbiAnYicgKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZCkuXG4gICAgICAgICAqL2Z1bmN0aW9uIGZvck93bihvYmplY3QsaXRlcmF0ZWUpe3JldHVybiBvYmplY3QmJmJhc2VGb3JPd24ob2JqZWN0LGdldEl0ZXJhdGVlKGl0ZXJhdGVlLDMpKTt9LyoqXG4gICAgICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZm9yT3duYCBleGNlcHQgdGhhdCBpdCBpdGVyYXRlcyBvdmVyIHByb3BlcnRpZXMgb2ZcbiAgICAgICAgICogYG9iamVjdGAgaW4gdGhlIG9wcG9zaXRlIG9yZGVyLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSAyLjAuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAgICAgKiBAc2VlIF8uZm9yT3duXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIGZ1bmN0aW9uIEZvbygpIHtcbiAgICAgICAgICogICB0aGlzLmEgPSAxO1xuICAgICAgICAgKiAgIHRoaXMuYiA9IDI7XG4gICAgICAgICAqIH1cbiAgICAgICAgICpcbiAgICAgICAgICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAgICAgICAgICpcbiAgICAgICAgICogXy5mb3JPd25SaWdodChuZXcgRm9vLCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gICAgICAgICAqICAgY29uc29sZS5sb2coa2V5KTtcbiAgICAgICAgICogfSk7XG4gICAgICAgICAqIC8vID0+IExvZ3MgJ2InIHRoZW4gJ2EnIGFzc3VtaW5nIGBfLmZvck93bmAgbG9ncyAnYScgdGhlbiAnYicuXG4gICAgICAgICAqL2Z1bmN0aW9uIGZvck93blJpZ2h0KG9iamVjdCxpdGVyYXRlZSl7cmV0dXJuIG9iamVjdCYmYmFzZUZvck93blJpZ2h0KG9iamVjdCxnZXRJdGVyYXRlZShpdGVyYXRlZSwzKSk7fS8qKlxuICAgICAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIGZ1bmN0aW9uIHByb3BlcnR5IG5hbWVzIGZyb20gb3duIGVudW1lcmFibGUgcHJvcGVydGllc1xuICAgICAgICAgKiBvZiBgb2JqZWN0YC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaW5zcGVjdC5cbiAgICAgICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBmdW5jdGlvbiBuYW1lcy5cbiAgICAgICAgICogQHNlZSBfLmZ1bmN0aW9uc0luXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIGZ1bmN0aW9uIEZvbygpIHtcbiAgICAgICAgICogICB0aGlzLmEgPSBfLmNvbnN0YW50KCdhJyk7XG4gICAgICAgICAqICAgdGhpcy5iID0gXy5jb25zdGFudCgnYicpO1xuICAgICAgICAgKiB9XG4gICAgICAgICAqXG4gICAgICAgICAqIEZvby5wcm90b3R5cGUuYyA9IF8uY29uc3RhbnQoJ2MnKTtcbiAgICAgICAgICpcbiAgICAgICAgICogXy5mdW5jdGlvbnMobmV3IEZvbyk7XG4gICAgICAgICAqIC8vID0+IFsnYScsICdiJ11cbiAgICAgICAgICovZnVuY3Rpb24gZnVuY3Rpb25zKG9iamVjdCl7cmV0dXJuIG9iamVjdD09bnVsbD9bXTpiYXNlRnVuY3Rpb25zKG9iamVjdCxrZXlzKG9iamVjdCkpO30vKipcbiAgICAgICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiBmdW5jdGlvbiBwcm9wZXJ0eSBuYW1lcyBmcm9tIG93biBhbmQgaW5oZXJpdGVkXG4gICAgICAgICAqIGVudW1lcmFibGUgcHJvcGVydGllcyBvZiBgb2JqZWN0YC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaW5zcGVjdC5cbiAgICAgICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBmdW5jdGlvbiBuYW1lcy5cbiAgICAgICAgICogQHNlZSBfLmZ1bmN0aW9uc1xuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiBmdW5jdGlvbiBGb28oKSB7XG4gICAgICAgICAqICAgdGhpcy5hID0gXy5jb25zdGFudCgnYScpO1xuICAgICAgICAgKiAgIHRoaXMuYiA9IF8uY29uc3RhbnQoJ2InKTtcbiAgICAgICAgICogfVxuICAgICAgICAgKlxuICAgICAgICAgKiBGb28ucHJvdG90eXBlLmMgPSBfLmNvbnN0YW50KCdjJyk7XG4gICAgICAgICAqXG4gICAgICAgICAqIF8uZnVuY3Rpb25zSW4obmV3IEZvbyk7XG4gICAgICAgICAqIC8vID0+IFsnYScsICdiJywgJ2MnXVxuICAgICAgICAgKi9mdW5jdGlvbiBmdW5jdGlvbnNJbihvYmplY3Qpe3JldHVybiBvYmplY3Q9PW51bGw/W106YmFzZUZ1bmN0aW9ucyhvYmplY3Qsa2V5c0luKG9iamVjdCkpO30vKipcbiAgICAgICAgICogR2V0cyB0aGUgdmFsdWUgYXQgYHBhdGhgIG9mIGBvYmplY3RgLiBJZiB0aGUgcmVzb2x2ZWQgdmFsdWUgaXNcbiAgICAgICAgICogYHVuZGVmaW5lZGAsIHRoZSBgZGVmYXVsdFZhbHVlYCBpcyByZXR1cm5lZCBpbiBpdHMgcGxhY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQHNpbmNlIDMuNy4wXG4gICAgICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICAgICAgICAgKiBAcGFyYW0geyp9IFtkZWZhdWx0VmFsdWVdIFRoZSB2YWx1ZSByZXR1cm5lZCBmb3IgYHVuZGVmaW5lZGAgcmVzb2x2ZWQgdmFsdWVzLlxuICAgICAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzb2x2ZWQgdmFsdWUuXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIHZhciBvYmplY3QgPSB7ICdhJzogW3sgJ2InOiB7ICdjJzogMyB9IH1dIH07XG4gICAgICAgICAqXG4gICAgICAgICAqIF8uZ2V0KG9iamVjdCwgJ2FbMF0uYi5jJyk7XG4gICAgICAgICAqIC8vID0+IDNcbiAgICAgICAgICpcbiAgICAgICAgICogXy5nZXQob2JqZWN0LCBbJ2EnLCAnMCcsICdiJywgJ2MnXSk7XG4gICAgICAgICAqIC8vID0+IDNcbiAgICAgICAgICpcbiAgICAgICAgICogXy5nZXQob2JqZWN0LCAnYS5iLmMnLCAnZGVmYXVsdCcpO1xuICAgICAgICAgKiAvLyA9PiAnZGVmYXVsdCdcbiAgICAgICAgICovZnVuY3Rpb24gZ2V0KG9iamVjdCxwYXRoLGRlZmF1bHRWYWx1ZSl7dmFyIHJlc3VsdD1vYmplY3Q9PW51bGw/dW5kZWZpbmVkOmJhc2VHZXQob2JqZWN0LHBhdGgpO3JldHVybiByZXN1bHQ9PT11bmRlZmluZWQ/ZGVmYXVsdFZhbHVlOnJlc3VsdDt9LyoqXG4gICAgICAgICAqIENoZWNrcyBpZiBgcGF0aGAgaXMgYSBkaXJlY3QgcHJvcGVydHkgb2YgYG9iamVjdGAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICogQHNpbmNlIDAuMS4wXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCB0byBjaGVjay5cbiAgICAgICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBwYXRoYCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiB7ICdiJzogMiB9IH07XG4gICAgICAgICAqIHZhciBvdGhlciA9IF8uY3JlYXRlKHsgJ2EnOiBfLmNyZWF0ZSh7ICdiJzogMiB9KSB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogXy5oYXMob2JqZWN0LCAnYScpO1xuICAgICAgICAgKiAvLyA9PiB0cnVlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8uaGFzKG9iamVjdCwgJ2EuYicpO1xuICAgICAgICAgKiAvLyA9PiB0cnVlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8uaGFzKG9iamVjdCwgWydhJywgJ2InXSk7XG4gICAgICAgICAqIC8vID0+IHRydWVcbiAgICAgICAgICpcbiAgICAgICAgICogXy5oYXMob3RoZXIsICdhJyk7XG4gICAgICAgICAqIC8vID0+IGZhbHNlXG4gICAgICAgICAqL2Z1bmN0aW9uIGhhcyhvYmplY3QscGF0aCl7cmV0dXJuIG9iamVjdCE9bnVsbCYmaGFzUGF0aChvYmplY3QscGF0aCxiYXNlSGFzKTt9LyoqXG4gICAgICAgICAqIENoZWNrcyBpZiBgcGF0aGAgaXMgYSBkaXJlY3Qgb3IgaW5oZXJpdGVkIHByb3BlcnR5IG9mIGBvYmplY3RgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgICAgICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggdG8gY2hlY2suXG4gICAgICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgcGF0aGAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIHZhciBvYmplY3QgPSBfLmNyZWF0ZSh7ICdhJzogXy5jcmVhdGUoeyAnYic6IDIgfSkgfSk7XG4gICAgICAgICAqXG4gICAgICAgICAqIF8uaGFzSW4ob2JqZWN0LCAnYScpO1xuICAgICAgICAgKiAvLyA9PiB0cnVlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8uaGFzSW4ob2JqZWN0LCAnYS5iJyk7XG4gICAgICAgICAqIC8vID0+IHRydWVcbiAgICAgICAgICpcbiAgICAgICAgICogXy5oYXNJbihvYmplY3QsIFsnYScsICdiJ10pO1xuICAgICAgICAgKiAvLyA9PiB0cnVlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8uaGFzSW4ob2JqZWN0LCAnYicpO1xuICAgICAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAgICAgKi9mdW5jdGlvbiBoYXNJbihvYmplY3QscGF0aCl7cmV0dXJuIG9iamVjdCE9bnVsbCYmaGFzUGF0aChvYmplY3QscGF0aCxiYXNlSGFzSW4pO30vKipcbiAgICAgICAgICogQ3JlYXRlcyBhbiBvYmplY3QgY29tcG9zZWQgb2YgdGhlIGludmVydGVkIGtleXMgYW5kIHZhbHVlcyBvZiBgb2JqZWN0YC5cbiAgICAgICAgICogSWYgYG9iamVjdGAgY29udGFpbnMgZHVwbGljYXRlIHZhbHVlcywgc3Vic2VxdWVudCB2YWx1ZXMgb3ZlcndyaXRlXG4gICAgICAgICAqIHByb3BlcnR5IGFzc2lnbm1lbnRzIG9mIHByZXZpb3VzIHZhbHVlcy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAc2luY2UgMC43LjBcbiAgICAgICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaW52ZXJ0LlxuICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgaW52ZXJ0ZWQgb2JqZWN0LlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEsICdiJzogMiwgJ2MnOiAxIH07XG4gICAgICAgICAqXG4gICAgICAgICAqIF8uaW52ZXJ0KG9iamVjdCk7XG4gICAgICAgICAqIC8vID0+IHsgJzEnOiAnYycsICcyJzogJ2InIH1cbiAgICAgICAgICovdmFyIGludmVydD1jcmVhdGVJbnZlcnRlcihmdW5jdGlvbihyZXN1bHQsdmFsdWUsa2V5KXtpZih2YWx1ZSE9bnVsbCYmdHlwZW9mIHZhbHVlLnRvU3RyaW5nIT09J2Z1bmN0aW9uJyl7dmFsdWU9bmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7fXJlc3VsdFt2YWx1ZV09a2V5O30sY29uc3RhbnQoaWRlbnRpdHkpKTsvKipcbiAgICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uaW52ZXJ0YCBleGNlcHQgdGhhdCB0aGUgaW52ZXJ0ZWQgb2JqZWN0IGlzIGdlbmVyYXRlZFxuICAgICAgICogZnJvbSB0aGUgcmVzdWx0cyBvZiBydW5uaW5nIGVhY2ggZWxlbWVudCBvZiBgb2JqZWN0YCB0aHJ1IGBpdGVyYXRlZWAuIFRoZVxuICAgICAgICogY29ycmVzcG9uZGluZyBpbnZlcnRlZCB2YWx1ZSBvZiBlYWNoIGludmVydGVkIGtleSBpcyBhbiBhcnJheSBvZiBrZXlzXG4gICAgICAgKiByZXNwb25zaWJsZSBmb3IgZ2VuZXJhdGluZyB0aGUgaW52ZXJ0ZWQgdmFsdWUuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkXG4gICAgICAgKiB3aXRoIG9uZSBhcmd1bWVudDogKHZhbHVlKS5cbiAgICAgICAqXG4gICAgICAgKiBAc3RhdGljXG4gICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICogQHNpbmNlIDQuMS4wXG4gICAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaW52ZXJ0LlxuICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IGludmVydGVkIG9iamVjdC5cbiAgICAgICAqIEBleGFtcGxlXG4gICAgICAgKlxuICAgICAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxLCAnYic6IDIsICdjJzogMSB9O1xuICAgICAgICpcbiAgICAgICAqIF8uaW52ZXJ0Qnkob2JqZWN0KTtcbiAgICAgICAqIC8vID0+IHsgJzEnOiBbJ2EnLCAnYyddLCAnMic6IFsnYiddIH1cbiAgICAgICAqXG4gICAgICAgKiBfLmludmVydEJ5KG9iamVjdCwgZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAqICAgcmV0dXJuICdncm91cCcgKyB2YWx1ZTtcbiAgICAgICAqIH0pO1xuICAgICAgICogLy8gPT4geyAnZ3JvdXAxJzogWydhJywgJ2MnXSwgJ2dyb3VwMic6IFsnYiddIH1cbiAgICAgICAqL3ZhciBpbnZlcnRCeT1jcmVhdGVJbnZlcnRlcihmdW5jdGlvbihyZXN1bHQsdmFsdWUsa2V5KXtpZih2YWx1ZSE9bnVsbCYmdHlwZW9mIHZhbHVlLnRvU3RyaW5nIT09J2Z1bmN0aW9uJyl7dmFsdWU9bmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7fWlmKGhhc093blByb3BlcnR5LmNhbGwocmVzdWx0LHZhbHVlKSl7cmVzdWx0W3ZhbHVlXS5wdXNoKGtleSk7fWVsc2V7cmVzdWx0W3ZhbHVlXT1ba2V5XTt9fSxnZXRJdGVyYXRlZSk7LyoqXG4gICAgICAgKiBJbnZva2VzIHRoZSBtZXRob2QgYXQgYHBhdGhgIG9mIGBvYmplY3RgLlxuICAgICAgICpcbiAgICAgICAqIEBzdGF0aWNcbiAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBtZXRob2QgdG8gaW52b2tlLlxuICAgICAgICogQHBhcmFtIHsuLi4qfSBbYXJnc10gVGhlIGFyZ3VtZW50cyB0byBpbnZva2UgdGhlIG1ldGhvZCB3aXRoLlxuICAgICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc3VsdCBvZiB0aGUgaW52b2tlZCBtZXRob2QuXG4gICAgICAgKiBAZXhhbXBsZVxuICAgICAgICpcbiAgICAgICAqIHZhciBvYmplY3QgPSB7ICdhJzogW3sgJ2InOiB7ICdjJzogWzEsIDIsIDMsIDRdIH0gfV0gfTtcbiAgICAgICAqXG4gICAgICAgKiBfLmludm9rZShvYmplY3QsICdhWzBdLmIuYy5zbGljZScsIDEsIDMpO1xuICAgICAgICogLy8gPT4gWzIsIDNdXG4gICAgICAgKi92YXIgaW52b2tlPWJhc2VSZXN0KGJhc2VJbnZva2UpOy8qKlxuICAgICAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiBgb2JqZWN0YC5cbiAgICAgICAgICpcbiAgICAgICAgICogKipOb3RlOioqIE5vbi1vYmplY3QgdmFsdWVzIGFyZSBjb2VyY2VkIHRvIG9iamVjdHMuIFNlZSB0aGVcbiAgICAgICAgICogW0VTIHNwZWNdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5rZXlzKVxuICAgICAgICAgKiBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogZnVuY3Rpb24gRm9vKCkge1xuICAgICAgICAgKiAgIHRoaXMuYSA9IDE7XG4gICAgICAgICAqICAgdGhpcy5iID0gMjtcbiAgICAgICAgICogfVxuICAgICAgICAgKlxuICAgICAgICAgKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICAgICAgICAgKlxuICAgICAgICAgKiBfLmtleXMobmV3IEZvbyk7XG4gICAgICAgICAqIC8vID0+IFsnYScsICdiJ10gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAgICAgICAgICpcbiAgICAgICAgICogXy5rZXlzKCdoaScpO1xuICAgICAgICAgKiAvLyA9PiBbJzAnLCAnMSddXG4gICAgICAgICAqL2Z1bmN0aW9uIGtleXMob2JqZWN0KXtyZXR1cm4gaXNBcnJheUxpa2Uob2JqZWN0KT9hcnJheUxpa2VLZXlzKG9iamVjdCk6YmFzZUtleXMob2JqZWN0KTt9LyoqXG4gICAgICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgYG9iamVjdGAuXG4gICAgICAgICAqXG4gICAgICAgICAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogZnVuY3Rpb24gRm9vKCkge1xuICAgICAgICAgKiAgIHRoaXMuYSA9IDE7XG4gICAgICAgICAqICAgdGhpcy5iID0gMjtcbiAgICAgICAgICogfVxuICAgICAgICAgKlxuICAgICAgICAgKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICAgICAgICAgKlxuICAgICAgICAgKiBfLmtleXNJbihuZXcgRm9vKTtcbiAgICAgICAgICogLy8gPT4gWydhJywgJ2InLCAnYyddIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gICAgICAgICAqL2Z1bmN0aW9uIGtleXNJbihvYmplY3Qpe3JldHVybiBpc0FycmF5TGlrZShvYmplY3QpP2FycmF5TGlrZUtleXMob2JqZWN0LHRydWUpOmJhc2VLZXlzSW4ob2JqZWN0KTt9LyoqXG4gICAgICAgICAqIFRoZSBvcHBvc2l0ZSBvZiBgXy5tYXBWYWx1ZXNgOyB0aGlzIG1ldGhvZCBjcmVhdGVzIGFuIG9iamVjdCB3aXRoIHRoZVxuICAgICAgICAgKiBzYW1lIHZhbHVlcyBhcyBgb2JqZWN0YCBhbmQga2V5cyBnZW5lcmF0ZWQgYnkgcnVubmluZyBlYWNoIG93biBlbnVtZXJhYmxlXG4gICAgICAgICAqIHN0cmluZyBrZXllZCBwcm9wZXJ0eSBvZiBgb2JqZWN0YCB0aHJ1IGBpdGVyYXRlZWAuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkXG4gICAgICAgICAqIHdpdGggdGhyZWUgYXJndW1lbnRzOiAodmFsdWUsIGtleSwgb2JqZWN0KS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAc2luY2UgMy44LjBcbiAgICAgICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG1hcHBlZCBvYmplY3QuXG4gICAgICAgICAqIEBzZWUgXy5tYXBWYWx1ZXNcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogXy5tYXBLZXlzKHsgJ2EnOiAxLCAnYic6IDIgfSwgZnVuY3Rpb24odmFsdWUsIGtleSkge1xuICAgICAgICAgKiAgIHJldHVybiBrZXkgKyB2YWx1ZTtcbiAgICAgICAgICogfSk7XG4gICAgICAgICAqIC8vID0+IHsgJ2ExJzogMSwgJ2IyJzogMiB9XG4gICAgICAgICAqL2Z1bmN0aW9uIG1hcEtleXMob2JqZWN0LGl0ZXJhdGVlKXt2YXIgcmVzdWx0PXt9O2l0ZXJhdGVlPWdldEl0ZXJhdGVlKGl0ZXJhdGVlLDMpO2Jhc2VGb3JPd24ob2JqZWN0LGZ1bmN0aW9uKHZhbHVlLGtleSxvYmplY3Qpe2Jhc2VBc3NpZ25WYWx1ZShyZXN1bHQsaXRlcmF0ZWUodmFsdWUsa2V5LG9iamVjdCksdmFsdWUpO30pO3JldHVybiByZXN1bHQ7fS8qKlxuICAgICAgICAgKiBDcmVhdGVzIGFuIG9iamVjdCB3aXRoIHRoZSBzYW1lIGtleXMgYXMgYG9iamVjdGAgYW5kIHZhbHVlcyBnZW5lcmF0ZWRcbiAgICAgICAgICogYnkgcnVubmluZyBlYWNoIG93biBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0eSBvZiBgb2JqZWN0YCB0aHJ1XG4gICAgICAgICAqIGBpdGVyYXRlZWAuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggdGhyZWUgYXJndW1lbnRzOlxuICAgICAgICAgKiAodmFsdWUsIGtleSwgb2JqZWN0KS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAc2luY2UgMi40LjBcbiAgICAgICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG1hcHBlZCBvYmplY3QuXG4gICAgICAgICAqIEBzZWUgXy5tYXBLZXlzXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIHZhciB1c2VycyA9IHtcbiAgICAgICAgICogICAnZnJlZCc6ICAgIHsgJ3VzZXInOiAnZnJlZCcsICAgICdhZ2UnOiA0MCB9LFxuICAgICAgICAgKiAgICdwZWJibGVzJzogeyAndXNlcic6ICdwZWJibGVzJywgJ2FnZSc6IDEgfVxuICAgICAgICAgKiB9O1xuICAgICAgICAgKlxuICAgICAgICAgKiBfLm1hcFZhbHVlcyh1c2VycywgZnVuY3Rpb24obykgeyByZXR1cm4gby5hZ2U7IH0pO1xuICAgICAgICAgKiAvLyA9PiB7ICdmcmVkJzogNDAsICdwZWJibGVzJzogMSB9IChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gICAgICAgICAqXG4gICAgICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAgICAgKiBfLm1hcFZhbHVlcyh1c2VycywgJ2FnZScpO1xuICAgICAgICAgKiAvLyA9PiB7ICdmcmVkJzogNDAsICdwZWJibGVzJzogMSB9IChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gICAgICAgICAqL2Z1bmN0aW9uIG1hcFZhbHVlcyhvYmplY3QsaXRlcmF0ZWUpe3ZhciByZXN1bHQ9e307aXRlcmF0ZWU9Z2V0SXRlcmF0ZWUoaXRlcmF0ZWUsMyk7YmFzZUZvck93bihvYmplY3QsZnVuY3Rpb24odmFsdWUsa2V5LG9iamVjdCl7YmFzZUFzc2lnblZhbHVlKHJlc3VsdCxrZXksaXRlcmF0ZWUodmFsdWUsa2V5LG9iamVjdCkpO30pO3JldHVybiByZXN1bHQ7fS8qKlxuICAgICAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmFzc2lnbmAgZXhjZXB0IHRoYXQgaXQgcmVjdXJzaXZlbHkgbWVyZ2VzIG93biBhbmRcbiAgICAgICAgICogaW5oZXJpdGVkIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnRpZXMgb2Ygc291cmNlIG9iamVjdHMgaW50byB0aGVcbiAgICAgICAgICogZGVzdGluYXRpb24gb2JqZWN0LiBTb3VyY2UgcHJvcGVydGllcyB0aGF0IHJlc29sdmUgdG8gYHVuZGVmaW5lZGAgYXJlXG4gICAgICAgICAqIHNraXBwZWQgaWYgYSBkZXN0aW5hdGlvbiB2YWx1ZSBleGlzdHMuIEFycmF5IGFuZCBwbGFpbiBvYmplY3QgcHJvcGVydGllc1xuICAgICAgICAgKiBhcmUgbWVyZ2VkIHJlY3Vyc2l2ZWx5LiBPdGhlciBvYmplY3RzIGFuZCB2YWx1ZSB0eXBlcyBhcmUgb3ZlcnJpZGRlbiBieVxuICAgICAgICAgKiBhc3NpZ25tZW50LiBTb3VyY2Ugb2JqZWN0cyBhcmUgYXBwbGllZCBmcm9tIGxlZnQgdG8gcmlnaHQuIFN1YnNlcXVlbnRcbiAgICAgICAgICogc291cmNlcyBvdmVyd3JpdGUgcHJvcGVydHkgYXNzaWdubWVudHMgb2YgcHJldmlvdXMgc291cmNlcy5cbiAgICAgICAgICpcbiAgICAgICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYG9iamVjdGAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQHNpbmNlIDAuNS4wXG4gICAgICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICAgICAgICAgKiBAcGFyYW0gey4uLk9iamVjdH0gW3NvdXJjZXNdIFRoZSBzb3VyY2Ugb2JqZWN0cy5cbiAgICAgICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogdmFyIG9iamVjdCA9IHtcbiAgICAgICAgICogICAnYSc6IFt7ICdiJzogMiB9LCB7ICdkJzogNCB9XVxuICAgICAgICAgKiB9O1xuICAgICAgICAgKlxuICAgICAgICAgKiB2YXIgb3RoZXIgPSB7XG4gICAgICAgICAqICAgJ2EnOiBbeyAnYyc6IDMgfSwgeyAnZSc6IDUgfV1cbiAgICAgICAgICogfTtcbiAgICAgICAgICpcbiAgICAgICAgICogXy5tZXJnZShvYmplY3QsIG90aGVyKTtcbiAgICAgICAgICogLy8gPT4geyAnYSc6IFt7ICdiJzogMiwgJ2MnOiAzIH0sIHsgJ2QnOiA0LCAnZSc6IDUgfV0gfVxuICAgICAgICAgKi92YXIgbWVyZ2U9Y3JlYXRlQXNzaWduZXIoZnVuY3Rpb24ob2JqZWN0LHNvdXJjZSxzcmNJbmRleCl7YmFzZU1lcmdlKG9iamVjdCxzb3VyY2Usc3JjSW5kZXgpO30pOy8qKlxuICAgICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5tZXJnZWAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgY3VzdG9taXplcmAgd2hpY2hcbiAgICAgICAqIGlzIGludm9rZWQgdG8gcHJvZHVjZSB0aGUgbWVyZ2VkIHZhbHVlcyBvZiB0aGUgZGVzdGluYXRpb24gYW5kIHNvdXJjZVxuICAgICAgICogcHJvcGVydGllcy4gSWYgYGN1c3RvbWl6ZXJgIHJldHVybnMgYHVuZGVmaW5lZGAsIG1lcmdpbmcgaXMgaGFuZGxlZCBieSB0aGVcbiAgICAgICAqIG1ldGhvZCBpbnN0ZWFkLiBUaGUgYGN1c3RvbWl6ZXJgIGlzIGludm9rZWQgd2l0aCBzaXggYXJndW1lbnRzOlxuICAgICAgICogKG9ialZhbHVlLCBzcmNWYWx1ZSwga2V5LCBvYmplY3QsIHNvdXJjZSwgc3RhY2spLlxuICAgICAgICpcbiAgICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBvYmplY3RgLlxuICAgICAgICpcbiAgICAgICAqIEBzdGF0aWNcbiAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAgICAgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBzb3VyY2VzIFRoZSBzb3VyY2Ugb2JqZWN0cy5cbiAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBhc3NpZ25lZCB2YWx1ZXMuXG4gICAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAgICogQGV4YW1wbGVcbiAgICAgICAqXG4gICAgICAgKiBmdW5jdGlvbiBjdXN0b21pemVyKG9ialZhbHVlLCBzcmNWYWx1ZSkge1xuICAgICAgICogICBpZiAoXy5pc0FycmF5KG9ialZhbHVlKSkge1xuICAgICAgICogICAgIHJldHVybiBvYmpWYWx1ZS5jb25jYXQoc3JjVmFsdWUpO1xuICAgICAgICogICB9XG4gICAgICAgKiB9XG4gICAgICAgKlxuICAgICAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiBbMV0sICdiJzogWzJdIH07XG4gICAgICAgKiB2YXIgb3RoZXIgPSB7ICdhJzogWzNdLCAnYic6IFs0XSB9O1xuICAgICAgICpcbiAgICAgICAqIF8ubWVyZ2VXaXRoKG9iamVjdCwgb3RoZXIsIGN1c3RvbWl6ZXIpO1xuICAgICAgICogLy8gPT4geyAnYSc6IFsxLCAzXSwgJ2InOiBbMiwgNF0gfVxuICAgICAgICovdmFyIG1lcmdlV2l0aD1jcmVhdGVBc3NpZ25lcihmdW5jdGlvbihvYmplY3Qsc291cmNlLHNyY0luZGV4LGN1c3RvbWl6ZXIpe2Jhc2VNZXJnZShvYmplY3Qsc291cmNlLHNyY0luZGV4LGN1c3RvbWl6ZXIpO30pOy8qKlxuICAgICAgICogVGhlIG9wcG9zaXRlIG9mIGBfLnBpY2tgOyB0aGlzIG1ldGhvZCBjcmVhdGVzIGFuIG9iamVjdCBjb21wb3NlZCBvZiB0aGVcbiAgICAgICAqIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydHkgcGF0aHMgb2YgYG9iamVjdGAgdGhhdCBhcmUgbm90IG9taXR0ZWQuXG4gICAgICAgKlxuICAgICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGNvbnNpZGVyYWJseSBzbG93ZXIgdGhhbiBgXy5waWNrYC5cbiAgICAgICAqXG4gICAgICAgKiBAc3RhdGljXG4gICAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBzb3VyY2Ugb2JqZWN0LlxuICAgICAgICogQHBhcmFtIHsuLi4oc3RyaW5nfHN0cmluZ1tdKX0gW3BhdGhzXSBUaGUgcHJvcGVydHkgcGF0aHMgdG8gb21pdC5cbiAgICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gICAgICAgKiBAZXhhbXBsZVxuICAgICAgICpcbiAgICAgICAqIHZhciBvYmplY3QgPSB7ICdhJzogMSwgJ2InOiAnMicsICdjJzogMyB9O1xuICAgICAgICpcbiAgICAgICAqIF8ub21pdChvYmplY3QsIFsnYScsICdjJ10pO1xuICAgICAgICogLy8gPT4geyAnYic6ICcyJyB9XG4gICAgICAgKi92YXIgb21pdD1mbGF0UmVzdChmdW5jdGlvbihvYmplY3QscGF0aHMpe3ZhciByZXN1bHQ9e307aWYob2JqZWN0PT1udWxsKXtyZXR1cm4gcmVzdWx0O312YXIgaXNEZWVwPWZhbHNlO3BhdGhzPWFycmF5TWFwKHBhdGhzLGZ1bmN0aW9uKHBhdGgpe3BhdGg9Y2FzdFBhdGgocGF0aCxvYmplY3QpO2lzRGVlcHx8KGlzRGVlcD1wYXRoLmxlbmd0aD4xKTtyZXR1cm4gcGF0aDt9KTtjb3B5T2JqZWN0KG9iamVjdCxnZXRBbGxLZXlzSW4ob2JqZWN0KSxyZXN1bHQpO2lmKGlzRGVlcCl7cmVzdWx0PWJhc2VDbG9uZShyZXN1bHQsQ0xPTkVfREVFUF9GTEFHfENMT05FX0ZMQVRfRkxBR3xDTE9ORV9TWU1CT0xTX0ZMQUcsY3VzdG9tT21pdENsb25lKTt9dmFyIGxlbmd0aD1wYXRocy5sZW5ndGg7d2hpbGUobGVuZ3RoLS0pe2Jhc2VVbnNldChyZXN1bHQscGF0aHNbbGVuZ3RoXSk7fXJldHVybiByZXN1bHQ7fSk7LyoqXG4gICAgICAgKiBUaGUgb3Bwb3NpdGUgb2YgYF8ucGlja0J5YDsgdGhpcyBtZXRob2QgY3JlYXRlcyBhbiBvYmplY3QgY29tcG9zZWQgb2ZcbiAgICAgICAqIHRoZSBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0aWVzIG9mIGBvYmplY3RgIHRoYXRcbiAgICAgICAqIGBwcmVkaWNhdGVgIGRvZXNuJ3QgcmV0dXJuIHRydXRoeSBmb3IuIFRoZSBwcmVkaWNhdGUgaXMgaW52b2tlZCB3aXRoIHR3b1xuICAgICAgICogYXJndW1lbnRzOiAodmFsdWUsIGtleSkuXG4gICAgICAgKlxuICAgICAgICogQHN0YXRpY1xuICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgc291cmNlIG9iamVjdC5cbiAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIHByb3BlcnR5LlxuICAgICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAgICAgICAqIEBleGFtcGxlXG4gICAgICAgKlxuICAgICAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxLCAnYic6ICcyJywgJ2MnOiAzIH07XG4gICAgICAgKlxuICAgICAgICogXy5vbWl0Qnkob2JqZWN0LCBfLmlzTnVtYmVyKTtcbiAgICAgICAqIC8vID0+IHsgJ2InOiAnMicgfVxuICAgICAgICovZnVuY3Rpb24gb21pdEJ5KG9iamVjdCxwcmVkaWNhdGUpe3JldHVybiBwaWNrQnkob2JqZWN0LG5lZ2F0ZShnZXRJdGVyYXRlZShwcmVkaWNhdGUpKSk7fS8qKlxuICAgICAgICAgKiBDcmVhdGVzIGFuIG9iamVjdCBjb21wb3NlZCBvZiB0aGUgcGlja2VkIGBvYmplY3RgIHByb3BlcnRpZXMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICogQHNpbmNlIDAuMS4wXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgc291cmNlIG9iamVjdC5cbiAgICAgICAgICogQHBhcmFtIHsuLi4oc3RyaW5nfHN0cmluZ1tdKX0gW3BhdGhzXSBUaGUgcHJvcGVydHkgcGF0aHMgdG8gcGljay5cbiAgICAgICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxLCAnYic6ICcyJywgJ2MnOiAzIH07XG4gICAgICAgICAqXG4gICAgICAgICAqIF8ucGljayhvYmplY3QsIFsnYScsICdjJ10pO1xuICAgICAgICAgKiAvLyA9PiB7ICdhJzogMSwgJ2MnOiAzIH1cbiAgICAgICAgICovdmFyIHBpY2s9ZmxhdFJlc3QoZnVuY3Rpb24ob2JqZWN0LHBhdGhzKXtyZXR1cm4gb2JqZWN0PT1udWxsP3t9OmJhc2VQaWNrKG9iamVjdCxwYXRocyk7fSk7LyoqXG4gICAgICAgKiBDcmVhdGVzIGFuIG9iamVjdCBjb21wb3NlZCBvZiB0aGUgYG9iamVjdGAgcHJvcGVydGllcyBgcHJlZGljYXRlYCByZXR1cm5zXG4gICAgICAgKiB0cnV0aHkgZm9yLiBUaGUgcHJlZGljYXRlIGlzIGludm9rZWQgd2l0aCB0d28gYXJndW1lbnRzOiAodmFsdWUsIGtleSkuXG4gICAgICAgKlxuICAgICAgICogQHN0YXRpY1xuICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgc291cmNlIG9iamVjdC5cbiAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIHByb3BlcnR5LlxuICAgICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAgICAgICAqIEBleGFtcGxlXG4gICAgICAgKlxuICAgICAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxLCAnYic6ICcyJywgJ2MnOiAzIH07XG4gICAgICAgKlxuICAgICAgICogXy5waWNrQnkob2JqZWN0LCBfLmlzTnVtYmVyKTtcbiAgICAgICAqIC8vID0+IHsgJ2EnOiAxLCAnYyc6IDMgfVxuICAgICAgICovZnVuY3Rpb24gcGlja0J5KG9iamVjdCxwcmVkaWNhdGUpe2lmKG9iamVjdD09bnVsbCl7cmV0dXJue307fXZhciBwcm9wcz1hcnJheU1hcChnZXRBbGxLZXlzSW4ob2JqZWN0KSxmdW5jdGlvbihwcm9wKXtyZXR1cm5bcHJvcF07fSk7cHJlZGljYXRlPWdldEl0ZXJhdGVlKHByZWRpY2F0ZSk7cmV0dXJuIGJhc2VQaWNrQnkob2JqZWN0LHByb3BzLGZ1bmN0aW9uKHZhbHVlLHBhdGgpe3JldHVybiBwcmVkaWNhdGUodmFsdWUscGF0aFswXSk7fSk7fS8qKlxuICAgICAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmdldGAgZXhjZXB0IHRoYXQgaWYgdGhlIHJlc29sdmVkIHZhbHVlIGlzIGFcbiAgICAgICAgICogZnVuY3Rpb24gaXQncyBpbnZva2VkIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIGl0cyBwYXJlbnQgb2JqZWN0IGFuZFxuICAgICAgICAgKiBpdHMgcmVzdWx0IGlzIHJldHVybmVkLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgICAgICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIHJlc29sdmUuXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gW2RlZmF1bHRWYWx1ZV0gVGhlIHZhbHVlIHJldHVybmVkIGZvciBgdW5kZWZpbmVkYCByZXNvbHZlZCB2YWx1ZXMuXG4gICAgICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXNvbHZlZCB2YWx1ZS5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiBbeyAnYic6IHsgJ2MxJzogMywgJ2MyJzogXy5jb25zdGFudCg0KSB9IH1dIH07XG4gICAgICAgICAqXG4gICAgICAgICAqIF8ucmVzdWx0KG9iamVjdCwgJ2FbMF0uYi5jMScpO1xuICAgICAgICAgKiAvLyA9PiAzXG4gICAgICAgICAqXG4gICAgICAgICAqIF8ucmVzdWx0KG9iamVjdCwgJ2FbMF0uYi5jMicpO1xuICAgICAgICAgKiAvLyA9PiA0XG4gICAgICAgICAqXG4gICAgICAgICAqIF8ucmVzdWx0KG9iamVjdCwgJ2FbMF0uYi5jMycsICdkZWZhdWx0Jyk7XG4gICAgICAgICAqIC8vID0+ICdkZWZhdWx0J1xuICAgICAgICAgKlxuICAgICAgICAgKiBfLnJlc3VsdChvYmplY3QsICdhWzBdLmIuYzMnLCBfLmNvbnN0YW50KCdkZWZhdWx0JykpO1xuICAgICAgICAgKiAvLyA9PiAnZGVmYXVsdCdcbiAgICAgICAgICovZnVuY3Rpb24gcmVzdWx0KG9iamVjdCxwYXRoLGRlZmF1bHRWYWx1ZSl7cGF0aD1jYXN0UGF0aChwYXRoLG9iamVjdCk7dmFyIGluZGV4PS0xLGxlbmd0aD1wYXRoLmxlbmd0aDsvLyBFbnN1cmUgdGhlIGxvb3AgaXMgZW50ZXJlZCB3aGVuIHBhdGggaXMgZW1wdHkuXG5pZighbGVuZ3RoKXtsZW5ndGg9MTtvYmplY3Q9dW5kZWZpbmVkO313aGlsZSgrK2luZGV4PGxlbmd0aCl7dmFyIHZhbHVlPW9iamVjdD09bnVsbD91bmRlZmluZWQ6b2JqZWN0W3RvS2V5KHBhdGhbaW5kZXhdKV07aWYodmFsdWU9PT11bmRlZmluZWQpe2luZGV4PWxlbmd0aDt2YWx1ZT1kZWZhdWx0VmFsdWU7fW9iamVjdD1pc0Z1bmN0aW9uKHZhbHVlKT92YWx1ZS5jYWxsKG9iamVjdCk6dmFsdWU7fXJldHVybiBvYmplY3Q7fS8qKlxuICAgICAgICAgKiBTZXRzIHRoZSB2YWx1ZSBhdCBgcGF0aGAgb2YgYG9iamVjdGAuIElmIGEgcG9ydGlvbiBvZiBgcGF0aGAgZG9lc24ndCBleGlzdCxcbiAgICAgICAgICogaXQncyBjcmVhdGVkLiBBcnJheXMgYXJlIGNyZWF0ZWQgZm9yIG1pc3NpbmcgaW5kZXggcHJvcGVydGllcyB3aGlsZSBvYmplY3RzXG4gICAgICAgICAqIGFyZSBjcmVhdGVkIGZvciBhbGwgb3RoZXIgbWlzc2luZyBwcm9wZXJ0aWVzLiBVc2UgYF8uc2V0V2l0aGAgdG8gY3VzdG9taXplXG4gICAgICAgICAqIGBwYXRoYCBjcmVhdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYG9iamVjdGAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQHNpbmNlIDMuNy4wXG4gICAgICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAgICAgICAgICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIHNldC5cbiAgICAgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiB2YXIgb2JqZWN0ID0geyAnYSc6IFt7ICdiJzogeyAnYyc6IDMgfSB9XSB9O1xuICAgICAgICAgKlxuICAgICAgICAgKiBfLnNldChvYmplY3QsICdhWzBdLmIuYycsIDQpO1xuICAgICAgICAgKiBjb25zb2xlLmxvZyhvYmplY3QuYVswXS5iLmMpO1xuICAgICAgICAgKiAvLyA9PiA0XG4gICAgICAgICAqXG4gICAgICAgICAqIF8uc2V0KG9iamVjdCwgWyd4JywgJzAnLCAneScsICd6J10sIDUpO1xuICAgICAgICAgKiBjb25zb2xlLmxvZyhvYmplY3QueFswXS55LnopO1xuICAgICAgICAgKiAvLyA9PiA1XG4gICAgICAgICAqL2Z1bmN0aW9uIHNldChvYmplY3QscGF0aCx2YWx1ZSl7cmV0dXJuIG9iamVjdD09bnVsbD9vYmplY3Q6YmFzZVNldChvYmplY3QscGF0aCx2YWx1ZSk7fS8qKlxuICAgICAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnNldGAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgY3VzdG9taXplcmAgd2hpY2ggaXNcbiAgICAgICAgICogaW52b2tlZCB0byBwcm9kdWNlIHRoZSBvYmplY3RzIG9mIGBwYXRoYC4gIElmIGBjdXN0b21pemVyYCByZXR1cm5zIGB1bmRlZmluZWRgXG4gICAgICAgICAqIHBhdGggY3JlYXRpb24gaXMgaGFuZGxlZCBieSB0aGUgbWV0aG9kIGluc3RlYWQuIFRoZSBgY3VzdG9taXplcmAgaXMgaW52b2tlZFxuICAgICAgICAgKiB3aXRoIHRocmVlIGFyZ3VtZW50czogKG5zVmFsdWUsIGtleSwgbnNPYmplY3QpLlxuICAgICAgICAgKlxuICAgICAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gc2V0LlxuICAgICAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGFzc2lnbmVkIHZhbHVlcy5cbiAgICAgICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogdmFyIG9iamVjdCA9IHt9O1xuICAgICAgICAgKlxuICAgICAgICAgKiBfLnNldFdpdGgob2JqZWN0LCAnWzBdWzFdJywgJ2EnLCBPYmplY3QpO1xuICAgICAgICAgKiAvLyA9PiB7ICcwJzogeyAnMSc6ICdhJyB9IH1cbiAgICAgICAgICovZnVuY3Rpb24gc2V0V2l0aChvYmplY3QscGF0aCx2YWx1ZSxjdXN0b21pemVyKXtjdXN0b21pemVyPXR5cGVvZiBjdXN0b21pemVyPT09J2Z1bmN0aW9uJz9jdXN0b21pemVyOnVuZGVmaW5lZDtyZXR1cm4gb2JqZWN0PT1udWxsP29iamVjdDpiYXNlU2V0KG9iamVjdCxwYXRoLHZhbHVlLGN1c3RvbWl6ZXIpO30vKipcbiAgICAgICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiBvd24gZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQtdmFsdWUgcGFpcnMgZm9yIGBvYmplY3RgXG4gICAgICAgICAqIHdoaWNoIGNhbiBiZSBjb25zdW1lZCBieSBgXy5mcm9tUGFpcnNgLiBJZiBgb2JqZWN0YCBpcyBhIG1hcCBvciBzZXQsIGl0c1xuICAgICAgICAgKiBlbnRyaWVzIGFyZSByZXR1cm5lZC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgICAgICogQGFsaWFzIGVudHJpZXNcbiAgICAgICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUga2V5LXZhbHVlIHBhaXJzLlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiBmdW5jdGlvbiBGb28oKSB7XG4gICAgICAgICAqICAgdGhpcy5hID0gMTtcbiAgICAgICAgICogICB0aGlzLmIgPSAyO1xuICAgICAgICAgKiB9XG4gICAgICAgICAqXG4gICAgICAgICAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gICAgICAgICAqXG4gICAgICAgICAqIF8udG9QYWlycyhuZXcgRm9vKTtcbiAgICAgICAgICogLy8gPT4gW1snYScsIDFdLCBbJ2InLCAyXV0gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAgICAgICAgICovdmFyIHRvUGFpcnM9Y3JlYXRlVG9QYWlycyhrZXlzKTsvKipcbiAgICAgICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHN0cmluZyBrZXllZC12YWx1ZSBwYWlyc1xuICAgICAgICAgKiBmb3IgYG9iamVjdGAgd2hpY2ggY2FuIGJlIGNvbnN1bWVkIGJ5IGBfLmZyb21QYWlyc2AuIElmIGBvYmplY3RgIGlzIGEgbWFwXG4gICAgICAgICAqIG9yIHNldCwgaXRzIGVudHJpZXMgYXJlIHJldHVybmVkLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAgICAgKiBAYWxpYXMgZW50cmllc0luXG4gICAgICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGtleS12YWx1ZSBwYWlycy5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogZnVuY3Rpb24gRm9vKCkge1xuICAgICAgICAgKiAgIHRoaXMuYSA9IDE7XG4gICAgICAgICAqICAgdGhpcy5iID0gMjtcbiAgICAgICAgICogfVxuICAgICAgICAgKlxuICAgICAgICAgKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICAgICAgICAgKlxuICAgICAgICAgKiBfLnRvUGFpcnNJbihuZXcgRm9vKTtcbiAgICAgICAgICogLy8gPT4gW1snYScsIDFdLCBbJ2InLCAyXSwgWydjJywgM11dIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gICAgICAgICAqL3ZhciB0b1BhaXJzSW49Y3JlYXRlVG9QYWlycyhrZXlzSW4pOy8qKlxuICAgICAgICAgKiBBbiBhbHRlcm5hdGl2ZSB0byBgXy5yZWR1Y2VgOyB0aGlzIG1ldGhvZCB0cmFuc2Zvcm1zIGBvYmplY3RgIHRvIGEgbmV3XG4gICAgICAgICAqIGBhY2N1bXVsYXRvcmAgb2JqZWN0IHdoaWNoIGlzIHRoZSByZXN1bHQgb2YgcnVubmluZyBlYWNoIG9mIGl0cyBvd25cbiAgICAgICAgICogZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydGllcyB0aHJ1IGBpdGVyYXRlZWAsIHdpdGggZWFjaCBpbnZvY2F0aW9uXG4gICAgICAgICAqIHBvdGVudGlhbGx5IG11dGF0aW5nIHRoZSBgYWNjdW11bGF0b3JgIG9iamVjdC4gSWYgYGFjY3VtdWxhdG9yYCBpcyBub3RcbiAgICAgICAgICogcHJvdmlkZWQsIGEgbmV3IG9iamVjdCB3aXRoIHRoZSBzYW1lIGBbW1Byb3RvdHlwZV1dYCB3aWxsIGJlIHVzZWQuIFRoZVxuICAgICAgICAgKiBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggZm91ciBhcmd1bWVudHM6IChhY2N1bXVsYXRvciwgdmFsdWUsIGtleSwgb2JqZWN0KS5cbiAgICAgICAgICogSXRlcmF0ZWUgZnVuY3Rpb25zIG1heSBleGl0IGl0ZXJhdGlvbiBlYXJseSBieSBleHBsaWNpdGx5IHJldHVybmluZyBgZmFsc2VgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSAxLjMuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAgICAgKiBAcGFyYW0geyp9IFthY2N1bXVsYXRvcl0gVGhlIGN1c3RvbSBhY2N1bXVsYXRvciB2YWx1ZS5cbiAgICAgICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGFjY3VtdWxhdGVkIHZhbHVlLlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLnRyYW5zZm9ybShbMiwgMywgNF0sIGZ1bmN0aW9uKHJlc3VsdCwgbikge1xuICAgICAgICAgKiAgIHJlc3VsdC5wdXNoKG4gKj0gbik7XG4gICAgICAgICAqICAgcmV0dXJuIG4gJSAyID09IDA7XG4gICAgICAgICAqIH0sIFtdKTtcbiAgICAgICAgICogLy8gPT4gWzQsIDldXG4gICAgICAgICAqXG4gICAgICAgICAqIF8udHJhbnNmb3JtKHsgJ2EnOiAxLCAnYic6IDIsICdjJzogMSB9LCBmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHtcbiAgICAgICAgICogICAocmVzdWx0W3ZhbHVlXSB8fCAocmVzdWx0W3ZhbHVlXSA9IFtdKSkucHVzaChrZXkpO1xuICAgICAgICAgKiB9LCB7fSk7XG4gICAgICAgICAqIC8vID0+IHsgJzEnOiBbJ2EnLCAnYyddLCAnMic6IFsnYiddIH1cbiAgICAgICAgICovZnVuY3Rpb24gdHJhbnNmb3JtKG9iamVjdCxpdGVyYXRlZSxhY2N1bXVsYXRvcil7dmFyIGlzQXJyPWlzQXJyYXkob2JqZWN0KSxpc0Fyckxpa2U9aXNBcnJ8fGlzQnVmZmVyKG9iamVjdCl8fGlzVHlwZWRBcnJheShvYmplY3QpO2l0ZXJhdGVlPWdldEl0ZXJhdGVlKGl0ZXJhdGVlLDQpO2lmKGFjY3VtdWxhdG9yPT1udWxsKXt2YXIgQ3Rvcj1vYmplY3QmJm9iamVjdC5jb25zdHJ1Y3RvcjtpZihpc0Fyckxpa2Upe2FjY3VtdWxhdG9yPWlzQXJyP25ldyBDdG9yKCk6W107fWVsc2UgaWYoaXNPYmplY3Qob2JqZWN0KSl7YWNjdW11bGF0b3I9aXNGdW5jdGlvbihDdG9yKT9iYXNlQ3JlYXRlKGdldFByb3RvdHlwZShvYmplY3QpKTp7fTt9ZWxzZXthY2N1bXVsYXRvcj17fTt9fShpc0Fyckxpa2U/YXJyYXlFYWNoOmJhc2VGb3JPd24pKG9iamVjdCxmdW5jdGlvbih2YWx1ZSxpbmRleCxvYmplY3Qpe3JldHVybiBpdGVyYXRlZShhY2N1bXVsYXRvcix2YWx1ZSxpbmRleCxvYmplY3QpO30pO3JldHVybiBhY2N1bXVsYXRvcjt9LyoqXG4gICAgICAgICAqIFJlbW92ZXMgdGhlIHByb3BlcnR5IGF0IGBwYXRoYCBvZiBgb2JqZWN0YC5cbiAgICAgICAgICpcbiAgICAgICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYG9iamVjdGAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQHNpbmNlIDQuMC4wXG4gICAgICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAgICAgICAgICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIHVuc2V0LlxuICAgICAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHByb3BlcnR5IGlzIGRlbGV0ZWQsIGVsc2UgYGZhbHNlYC5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiBbeyAnYic6IHsgJ2MnOiA3IH0gfV0gfTtcbiAgICAgICAgICogXy51bnNldChvYmplY3QsICdhWzBdLmIuYycpO1xuICAgICAgICAgKiAvLyA9PiB0cnVlXG4gICAgICAgICAqXG4gICAgICAgICAqIGNvbnNvbGUubG9nKG9iamVjdCk7XG4gICAgICAgICAqIC8vID0+IHsgJ2EnOiBbeyAnYic6IHt9IH1dIH07XG4gICAgICAgICAqXG4gICAgICAgICAqIF8udW5zZXQob2JqZWN0LCBbJ2EnLCAnMCcsICdiJywgJ2MnXSk7XG4gICAgICAgICAqIC8vID0+IHRydWVcbiAgICAgICAgICpcbiAgICAgICAgICogY29uc29sZS5sb2cob2JqZWN0KTtcbiAgICAgICAgICogLy8gPT4geyAnYSc6IFt7ICdiJzoge30gfV0gfTtcbiAgICAgICAgICovZnVuY3Rpb24gdW5zZXQob2JqZWN0LHBhdGgpe3JldHVybiBvYmplY3Q9PW51bGw/dHJ1ZTpiYXNlVW5zZXQob2JqZWN0LHBhdGgpO30vKipcbiAgICAgICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5zZXRgIGV4Y2VwdCB0aGF0IGFjY2VwdHMgYHVwZGF0ZXJgIHRvIHByb2R1Y2UgdGhlXG4gICAgICAgICAqIHZhbHVlIHRvIHNldC4gVXNlIGBfLnVwZGF0ZVdpdGhgIHRvIGN1c3RvbWl6ZSBgcGF0aGAgY3JlYXRpb24uIFRoZSBgdXBkYXRlcmBcbiAgICAgICAgICogaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDogKHZhbHVlKS5cbiAgICAgICAgICpcbiAgICAgICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYG9iamVjdGAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQHNpbmNlIDQuNi4wXG4gICAgICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAgICAgICAgICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIHNldC5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gdXBkYXRlciBUaGUgZnVuY3Rpb24gdG8gcHJvZHVjZSB0aGUgdXBkYXRlZCB2YWx1ZS5cbiAgICAgICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiBbeyAnYic6IHsgJ2MnOiAzIH0gfV0gfTtcbiAgICAgICAgICpcbiAgICAgICAgICogXy51cGRhdGUob2JqZWN0LCAnYVswXS5iLmMnLCBmdW5jdGlvbihuKSB7IHJldHVybiBuICogbjsgfSk7XG4gICAgICAgICAqIGNvbnNvbGUubG9nKG9iamVjdC5hWzBdLmIuYyk7XG4gICAgICAgICAqIC8vID0+IDlcbiAgICAgICAgICpcbiAgICAgICAgICogXy51cGRhdGUob2JqZWN0LCAneFswXS55LnonLCBmdW5jdGlvbihuKSB7IHJldHVybiBuID8gbiArIDEgOiAwOyB9KTtcbiAgICAgICAgICogY29uc29sZS5sb2cob2JqZWN0LnhbMF0ueS56KTtcbiAgICAgICAgICogLy8gPT4gMFxuICAgICAgICAgKi9mdW5jdGlvbiB1cGRhdGUob2JqZWN0LHBhdGgsdXBkYXRlcil7cmV0dXJuIG9iamVjdD09bnVsbD9vYmplY3Q6YmFzZVVwZGF0ZShvYmplY3QscGF0aCxjYXN0RnVuY3Rpb24odXBkYXRlcikpO30vKipcbiAgICAgICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy51cGRhdGVgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGN1c3RvbWl6ZXJgIHdoaWNoIGlzXG4gICAgICAgICAqIGludm9rZWQgdG8gcHJvZHVjZSB0aGUgb2JqZWN0cyBvZiBgcGF0aGAuICBJZiBgY3VzdG9taXplcmAgcmV0dXJucyBgdW5kZWZpbmVkYFxuICAgICAgICAgKiBwYXRoIGNyZWF0aW9uIGlzIGhhbmRsZWQgYnkgdGhlIG1ldGhvZCBpbnN0ZWFkLiBUaGUgYGN1c3RvbWl6ZXJgIGlzIGludm9rZWRcbiAgICAgICAgICogd2l0aCB0aHJlZSBhcmd1bWVudHM6IChuc1ZhbHVlLCBrZXksIG5zT2JqZWN0KS5cbiAgICAgICAgICpcbiAgICAgICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYG9iamVjdGAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQHNpbmNlIDQuNi4wXG4gICAgICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAgICAgICAgICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIHNldC5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gdXBkYXRlciBUaGUgZnVuY3Rpb24gdG8gcHJvZHVjZSB0aGUgdXBkYXRlZCB2YWx1ZS5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgYXNzaWduZWQgdmFsdWVzLlxuICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiB2YXIgb2JqZWN0ID0ge307XG4gICAgICAgICAqXG4gICAgICAgICAqIF8udXBkYXRlV2l0aChvYmplY3QsICdbMF1bMV0nLCBfLmNvbnN0YW50KCdhJyksIE9iamVjdCk7XG4gICAgICAgICAqIC8vID0+IHsgJzAnOiB7ICcxJzogJ2EnIH0gfVxuICAgICAgICAgKi9mdW5jdGlvbiB1cGRhdGVXaXRoKG9iamVjdCxwYXRoLHVwZGF0ZXIsY3VzdG9taXplcil7Y3VzdG9taXplcj10eXBlb2YgY3VzdG9taXplcj09PSdmdW5jdGlvbic/Y3VzdG9taXplcjp1bmRlZmluZWQ7cmV0dXJuIG9iamVjdD09bnVsbD9vYmplY3Q6YmFzZVVwZGF0ZShvYmplY3QscGF0aCxjYXN0RnVuY3Rpb24odXBkYXRlciksY3VzdG9taXplcik7fS8qKlxuICAgICAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydHkgdmFsdWVzIG9mIGBvYmplY3RgLlxuICAgICAgICAgKlxuICAgICAgICAgKiAqKk5vdGU6KiogTm9uLW9iamVjdCB2YWx1ZXMgYXJlIGNvZXJjZWQgdG8gb2JqZWN0cy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgdmFsdWVzLlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiBmdW5jdGlvbiBGb28oKSB7XG4gICAgICAgICAqICAgdGhpcy5hID0gMTtcbiAgICAgICAgICogICB0aGlzLmIgPSAyO1xuICAgICAgICAgKiB9XG4gICAgICAgICAqXG4gICAgICAgICAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gICAgICAgICAqXG4gICAgICAgICAqIF8udmFsdWVzKG5ldyBGb28pO1xuICAgICAgICAgKiAvLyA9PiBbMSwgMl0gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAgICAgICAgICpcbiAgICAgICAgICogXy52YWx1ZXMoJ2hpJyk7XG4gICAgICAgICAqIC8vID0+IFsnaCcsICdpJ11cbiAgICAgICAgICovZnVuY3Rpb24gdmFsdWVzKG9iamVjdCl7cmV0dXJuIG9iamVjdD09bnVsbD9bXTpiYXNlVmFsdWVzKG9iamVjdCxrZXlzKG9iamVjdCkpO30vKipcbiAgICAgICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydHlcbiAgICAgICAgICogdmFsdWVzIG9mIGBvYmplY3RgLlxuICAgICAgICAgKlxuICAgICAgICAgKiAqKk5vdGU6KiogTm9uLW9iamVjdCB2YWx1ZXMgYXJlIGNvZXJjZWQgdG8gb2JqZWN0cy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgdmFsdWVzLlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiBmdW5jdGlvbiBGb28oKSB7XG4gICAgICAgICAqICAgdGhpcy5hID0gMTtcbiAgICAgICAgICogICB0aGlzLmIgPSAyO1xuICAgICAgICAgKiB9XG4gICAgICAgICAqXG4gICAgICAgICAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gICAgICAgICAqXG4gICAgICAgICAqIF8udmFsdWVzSW4obmV3IEZvbyk7XG4gICAgICAgICAqIC8vID0+IFsxLCAyLCAzXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICAgICAgICAgKi9mdW5jdGlvbiB2YWx1ZXNJbihvYmplY3Qpe3JldHVybiBvYmplY3Q9PW51bGw/W106YmFzZVZhbHVlcyhvYmplY3Qsa2V5c0luKG9iamVjdCkpO30vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLy8qKlxuICAgICAgICAgKiBDbGFtcHMgYG51bWJlcmAgd2l0aGluIHRoZSBpbmNsdXNpdmUgYGxvd2VyYCBhbmQgYHVwcGVyYCBib3VuZHMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQHNpbmNlIDQuMC4wXG4gICAgICAgICAqIEBjYXRlZ29yeSBOdW1iZXJcbiAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IG51bWJlciBUaGUgbnVtYmVyIHRvIGNsYW1wLlxuICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gW2xvd2VyXSBUaGUgbG93ZXIgYm91bmQuXG4gICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSB1cHBlciBUaGUgdXBwZXIgYm91bmQuXG4gICAgICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGNsYW1wZWQgbnVtYmVyLlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLmNsYW1wKC0xMCwgLTUsIDUpO1xuICAgICAgICAgKiAvLyA9PiAtNVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLmNsYW1wKDEwLCAtNSwgNSk7XG4gICAgICAgICAqIC8vID0+IDVcbiAgICAgICAgICovZnVuY3Rpb24gY2xhbXAobnVtYmVyLGxvd2VyLHVwcGVyKXtpZih1cHBlcj09PXVuZGVmaW5lZCl7dXBwZXI9bG93ZXI7bG93ZXI9dW5kZWZpbmVkO31pZih1cHBlciE9PXVuZGVmaW5lZCl7dXBwZXI9dG9OdW1iZXIodXBwZXIpO3VwcGVyPXVwcGVyPT09dXBwZXI/dXBwZXI6MDt9aWYobG93ZXIhPT11bmRlZmluZWQpe2xvd2VyPXRvTnVtYmVyKGxvd2VyKTtsb3dlcj1sb3dlcj09PWxvd2VyP2xvd2VyOjA7fXJldHVybiBiYXNlQ2xhbXAodG9OdW1iZXIobnVtYmVyKSxsb3dlcix1cHBlcik7fS8qKlxuICAgICAgICAgKiBDaGVja3MgaWYgYG5gIGlzIGJldHdlZW4gYHN0YXJ0YCBhbmQgdXAgdG8sIGJ1dCBub3QgaW5jbHVkaW5nLCBgZW5kYC4gSWZcbiAgICAgICAgICogYGVuZGAgaXMgbm90IHNwZWNpZmllZCwgaXQncyBzZXQgdG8gYHN0YXJ0YCB3aXRoIGBzdGFydGAgdGhlbiBzZXQgdG8gYDBgLlxuICAgICAgICAgKiBJZiBgc3RhcnRgIGlzIGdyZWF0ZXIgdGhhbiBgZW5kYCB0aGUgcGFyYW1zIGFyZSBzd2FwcGVkIHRvIHN1cHBvcnRcbiAgICAgICAgICogbmVnYXRpdmUgcmFuZ2VzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSAzLjMuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgTnVtYmVyXG4gICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBudW1iZXIgVGhlIG51bWJlciB0byBjaGVjay5cbiAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD0wXSBUaGUgc3RhcnQgb2YgdGhlIHJhbmdlLlxuICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gZW5kIFRoZSBlbmQgb2YgdGhlIHJhbmdlLlxuICAgICAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYG51bWJlcmAgaXMgaW4gdGhlIHJhbmdlLCBlbHNlIGBmYWxzZWAuXG4gICAgICAgICAqIEBzZWUgXy5yYW5nZSwgXy5yYW5nZVJpZ2h0XG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8uaW5SYW5nZSgzLCAyLCA0KTtcbiAgICAgICAgICogLy8gPT4gdHJ1ZVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLmluUmFuZ2UoNCwgOCk7XG4gICAgICAgICAqIC8vID0+IHRydWVcbiAgICAgICAgICpcbiAgICAgICAgICogXy5pblJhbmdlKDQsIDIpO1xuICAgICAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLmluUmFuZ2UoMiwgMik7XG4gICAgICAgICAqIC8vID0+IGZhbHNlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8uaW5SYW5nZSgxLjIsIDIpO1xuICAgICAgICAgKiAvLyA9PiB0cnVlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8uaW5SYW5nZSg1LjIsIDQpO1xuICAgICAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLmluUmFuZ2UoLTMsIC0yLCAtNik7XG4gICAgICAgICAqIC8vID0+IHRydWVcbiAgICAgICAgICovZnVuY3Rpb24gaW5SYW5nZShudW1iZXIsc3RhcnQsZW5kKXtzdGFydD10b0Zpbml0ZShzdGFydCk7aWYoZW5kPT09dW5kZWZpbmVkKXtlbmQ9c3RhcnQ7c3RhcnQ9MDt9ZWxzZXtlbmQ9dG9GaW5pdGUoZW5kKTt9bnVtYmVyPXRvTnVtYmVyKG51bWJlcik7cmV0dXJuIGJhc2VJblJhbmdlKG51bWJlcixzdGFydCxlbmQpO30vKipcbiAgICAgICAgICogUHJvZHVjZXMgYSByYW5kb20gbnVtYmVyIGJldHdlZW4gdGhlIGluY2x1c2l2ZSBgbG93ZXJgIGFuZCBgdXBwZXJgIGJvdW5kcy5cbiAgICAgICAgICogSWYgb25seSBvbmUgYXJndW1lbnQgaXMgcHJvdmlkZWQgYSBudW1iZXIgYmV0d2VlbiBgMGAgYW5kIHRoZSBnaXZlbiBudW1iZXJcbiAgICAgICAgICogaXMgcmV0dXJuZWQuIElmIGBmbG9hdGluZ2AgaXMgYHRydWVgLCBvciBlaXRoZXIgYGxvd2VyYCBvciBgdXBwZXJgIGFyZVxuICAgICAgICAgKiBmbG9hdHMsIGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyIGlzIHJldHVybmVkIGluc3RlYWQgb2YgYW4gaW50ZWdlci5cbiAgICAgICAgICpcbiAgICAgICAgICogKipOb3RlOioqIEphdmFTY3JpcHQgZm9sbG93cyB0aGUgSUVFRS03NTQgc3RhbmRhcmQgZm9yIHJlc29sdmluZ1xuICAgICAgICAgKiBmbG9hdGluZy1wb2ludCB2YWx1ZXMgd2hpY2ggY2FuIHByb2R1Y2UgdW5leHBlY3RlZCByZXN1bHRzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSAwLjcuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgTnVtYmVyXG4gICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbG93ZXI9MF0gVGhlIGxvd2VyIGJvdW5kLlxuICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gW3VwcGVyPTFdIFRoZSB1cHBlciBib3VuZC5cbiAgICAgICAgICogQHBhcmFtIHtib29sZWFufSBbZmxvYXRpbmddIFNwZWNpZnkgcmV0dXJuaW5nIGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyLlxuICAgICAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSByYW5kb20gbnVtYmVyLlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLnJhbmRvbSgwLCA1KTtcbiAgICAgICAgICogLy8gPT4gYW4gaW50ZWdlciBiZXR3ZWVuIDAgYW5kIDVcbiAgICAgICAgICpcbiAgICAgICAgICogXy5yYW5kb20oNSk7XG4gICAgICAgICAqIC8vID0+IGFsc28gYW4gaW50ZWdlciBiZXR3ZWVuIDAgYW5kIDVcbiAgICAgICAgICpcbiAgICAgICAgICogXy5yYW5kb20oNSwgdHJ1ZSk7XG4gICAgICAgICAqIC8vID0+IGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyIGJldHdlZW4gMCBhbmQgNVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLnJhbmRvbSgxLjIsIDUuMik7XG4gICAgICAgICAqIC8vID0+IGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyIGJldHdlZW4gMS4yIGFuZCA1LjJcbiAgICAgICAgICovZnVuY3Rpb24gcmFuZG9tKGxvd2VyLHVwcGVyLGZsb2F0aW5nKXtpZihmbG9hdGluZyYmdHlwZW9mIGZsb2F0aW5nIT09J2Jvb2xlYW4nJiZpc0l0ZXJhdGVlQ2FsbChsb3dlcix1cHBlcixmbG9hdGluZykpe3VwcGVyPWZsb2F0aW5nPXVuZGVmaW5lZDt9aWYoZmxvYXRpbmc9PT11bmRlZmluZWQpe2lmKHR5cGVvZiB1cHBlcj09PSdib29sZWFuJyl7ZmxvYXRpbmc9dXBwZXI7dXBwZXI9dW5kZWZpbmVkO31lbHNlIGlmKHR5cGVvZiBsb3dlcj09PSdib29sZWFuJyl7ZmxvYXRpbmc9bG93ZXI7bG93ZXI9dW5kZWZpbmVkO319aWYobG93ZXI9PT11bmRlZmluZWQmJnVwcGVyPT09dW5kZWZpbmVkKXtsb3dlcj0wO3VwcGVyPTE7fWVsc2V7bG93ZXI9dG9GaW5pdGUobG93ZXIpO2lmKHVwcGVyPT09dW5kZWZpbmVkKXt1cHBlcj1sb3dlcjtsb3dlcj0wO31lbHNle3VwcGVyPXRvRmluaXRlKHVwcGVyKTt9fWlmKGxvd2VyPnVwcGVyKXt2YXIgdGVtcD1sb3dlcjtsb3dlcj11cHBlcjt1cHBlcj10ZW1wO31pZihmbG9hdGluZ3x8bG93ZXIlMXx8dXBwZXIlMSl7dmFyIHJhbmQ9bmF0aXZlUmFuZG9tKCk7cmV0dXJuIG5hdGl2ZU1pbihsb3dlcityYW5kKih1cHBlci1sb3dlcitmcmVlUGFyc2VGbG9hdCgnMWUtJysoKHJhbmQrJycpLmxlbmd0aC0xKSkpLHVwcGVyKTt9cmV0dXJuIGJhc2VSYW5kb20obG93ZXIsdXBwZXIpO30vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLy8qKlxuICAgICAgICAgKiBDb252ZXJ0cyBgc3RyaW5nYCB0byBbY2FtZWwgY2FzZV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ2FtZWxDYXNlKS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjYW1lbCBjYXNlZCBzdHJpbmcuXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8uY2FtZWxDYXNlKCdGb28gQmFyJyk7XG4gICAgICAgICAqIC8vID0+ICdmb29CYXInXG4gICAgICAgICAqXG4gICAgICAgICAqIF8uY2FtZWxDYXNlKCctLWZvby1iYXItLScpO1xuICAgICAgICAgKiAvLyA9PiAnZm9vQmFyJ1xuICAgICAgICAgKlxuICAgICAgICAgKiBfLmNhbWVsQ2FzZSgnX19GT09fQkFSX18nKTtcbiAgICAgICAgICogLy8gPT4gJ2Zvb0JhcidcbiAgICAgICAgICovdmFyIGNhbWVsQ2FzZT1jcmVhdGVDb21wb3VuZGVyKGZ1bmN0aW9uKHJlc3VsdCx3b3JkLGluZGV4KXt3b3JkPXdvcmQudG9Mb3dlckNhc2UoKTtyZXR1cm4gcmVzdWx0KyhpbmRleD9jYXBpdGFsaXplKHdvcmQpOndvcmQpO30pOy8qKlxuICAgICAgICogQ29udmVydHMgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBgc3RyaW5nYCB0byB1cHBlciBjYXNlIGFuZCB0aGUgcmVtYWluaW5nXG4gICAgICAgKiB0byBsb3dlciBjYXNlLlxuICAgICAgICpcbiAgICAgICAqIEBzdGF0aWNcbiAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGNhcGl0YWxpemUuXG4gICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjYXBpdGFsaXplZCBzdHJpbmcuXG4gICAgICAgKiBAZXhhbXBsZVxuICAgICAgICpcbiAgICAgICAqIF8uY2FwaXRhbGl6ZSgnRlJFRCcpO1xuICAgICAgICogLy8gPT4gJ0ZyZWQnXG4gICAgICAgKi9mdW5jdGlvbiBjYXBpdGFsaXplKHN0cmluZyl7cmV0dXJuIHVwcGVyRmlyc3QodG9TdHJpbmcoc3RyaW5nKS50b0xvd2VyQ2FzZSgpKTt9LyoqXG4gICAgICAgICAqIERlYnVycnMgYHN0cmluZ2AgYnkgY29udmVydGluZ1xuICAgICAgICAgKiBbTGF0aW4tMSBTdXBwbGVtZW50XShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9MYXRpbi0xX1N1cHBsZW1lbnRfKFVuaWNvZGVfYmxvY2spI0NoYXJhY3Rlcl90YWJsZSlcbiAgICAgICAgICogYW5kIFtMYXRpbiBFeHRlbmRlZC1BXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9MYXRpbl9FeHRlbmRlZC1BKVxuICAgICAgICAgKiBsZXR0ZXJzIHRvIGJhc2ljIExhdGluIGxldHRlcnMgYW5kIHJlbW92aW5nXG4gICAgICAgICAqIFtjb21iaW5pbmcgZGlhY3JpdGljYWwgbWFya3NdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NvbWJpbmluZ19EaWFjcml0aWNhbF9NYXJrcykuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQHNpbmNlIDMuMC4wXG4gICAgICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gZGVidXJyLlxuICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBkZWJ1cnJlZCBzdHJpbmcuXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8uZGVidXJyKCdkw6lqw6AgdnUnKTtcbiAgICAgICAgICogLy8gPT4gJ2RlamEgdnUnXG4gICAgICAgICAqL2Z1bmN0aW9uIGRlYnVycihzdHJpbmcpe3N0cmluZz10b1N0cmluZyhzdHJpbmcpO3JldHVybiBzdHJpbmcmJnN0cmluZy5yZXBsYWNlKHJlTGF0aW4sZGVidXJyTGV0dGVyKS5yZXBsYWNlKHJlQ29tYm9NYXJrLCcnKTt9LyoqXG4gICAgICAgICAqIENoZWNrcyBpZiBgc3RyaW5nYCBlbmRzIHdpdGggdGhlIGdpdmVuIHRhcmdldCBzdHJpbmcuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQHNpbmNlIDMuMC4wXG4gICAgICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gaW5zcGVjdC5cbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IFt0YXJnZXRdIFRoZSBzdHJpbmcgdG8gc2VhcmNoIGZvci5cbiAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IFtwb3NpdGlvbj1zdHJpbmcubGVuZ3RoXSBUaGUgcG9zaXRpb24gdG8gc2VhcmNoIHVwIHRvLlxuICAgICAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHN0cmluZ2AgZW5kcyB3aXRoIGB0YXJnZXRgLFxuICAgICAgICAgKiAgZWxzZSBgZmFsc2VgLlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLmVuZHNXaXRoKCdhYmMnLCAnYycpO1xuICAgICAgICAgKiAvLyA9PiB0cnVlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8uZW5kc1dpdGgoJ2FiYycsICdiJyk7XG4gICAgICAgICAqIC8vID0+IGZhbHNlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8uZW5kc1dpdGgoJ2FiYycsICdiJywgMik7XG4gICAgICAgICAqIC8vID0+IHRydWVcbiAgICAgICAgICovZnVuY3Rpb24gZW5kc1dpdGgoc3RyaW5nLHRhcmdldCxwb3NpdGlvbil7c3RyaW5nPXRvU3RyaW5nKHN0cmluZyk7dGFyZ2V0PWJhc2VUb1N0cmluZyh0YXJnZXQpO3ZhciBsZW5ndGg9c3RyaW5nLmxlbmd0aDtwb3NpdGlvbj1wb3NpdGlvbj09PXVuZGVmaW5lZD9sZW5ndGg6YmFzZUNsYW1wKHRvSW50ZWdlcihwb3NpdGlvbiksMCxsZW5ndGgpO3ZhciBlbmQ9cG9zaXRpb247cG9zaXRpb24tPXRhcmdldC5sZW5ndGg7cmV0dXJuIHBvc2l0aW9uPj0wJiZzdHJpbmcuc2xpY2UocG9zaXRpb24sZW5kKT09dGFyZ2V0O30vKipcbiAgICAgICAgICogQ29udmVydHMgdGhlIGNoYXJhY3RlcnMgXCImXCIsIFwiPFwiLCBcIj5cIiwgJ1wiJywgYW5kIFwiJ1wiIGluIGBzdHJpbmdgIHRvIHRoZWlyXG4gICAgICAgICAqIGNvcnJlc3BvbmRpbmcgSFRNTCBlbnRpdGllcy5cbiAgICAgICAgICpcbiAgICAgICAgICogKipOb3RlOioqIE5vIG90aGVyIGNoYXJhY3RlcnMgYXJlIGVzY2FwZWQuIFRvIGVzY2FwZSBhZGRpdGlvbmFsXG4gICAgICAgICAqIGNoYXJhY3RlcnMgdXNlIGEgdGhpcmQtcGFydHkgbGlicmFyeSBsaWtlIFtfaGVfXShodHRwczovL210aHMuYmUvaGUpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBUaG91Z2ggdGhlIFwiPlwiIGNoYXJhY3RlciBpcyBlc2NhcGVkIGZvciBzeW1tZXRyeSwgY2hhcmFjdGVycyBsaWtlXG4gICAgICAgICAqIFwiPlwiIGFuZCBcIi9cIiBkb24ndCBuZWVkIGVzY2FwaW5nIGluIEhUTUwgYW5kIGhhdmUgbm8gc3BlY2lhbCBtZWFuaW5nXG4gICAgICAgICAqIHVubGVzcyB0aGV5J3JlIHBhcnQgb2YgYSB0YWcgb3IgdW5xdW90ZWQgYXR0cmlidXRlIHZhbHVlLiBTZWVcbiAgICAgICAgICogW01hdGhpYXMgQnluZW5zJ3MgYXJ0aWNsZV0oaHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2FtYmlndW91cy1hbXBlcnNhbmRzKVxuICAgICAgICAgKiAodW5kZXIgXCJzZW1pLXJlbGF0ZWQgZnVuIGZhY3RcIikgZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgICAgICpcbiAgICAgICAgICogV2hlbiB3b3JraW5nIHdpdGggSFRNTCB5b3Ugc2hvdWxkIGFsd2F5c1xuICAgICAgICAgKiBbcXVvdGUgYXR0cmlidXRlIHZhbHVlc10oaHR0cDovL3dvbmtvLmNvbS9wb3N0L2h0bWwtZXNjYXBpbmcpIHRvIHJlZHVjZVxuICAgICAgICAgKiBYU1MgdmVjdG9ycy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBlc2NhcGUuXG4gICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGVzY2FwZWQgc3RyaW5nLlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLmVzY2FwZSgnZnJlZCwgYmFybmV5LCAmIHBlYmJsZXMnKTtcbiAgICAgICAgICogLy8gPT4gJ2ZyZWQsIGJhcm5leSwgJmFtcDsgcGViYmxlcydcbiAgICAgICAgICovZnVuY3Rpb24gZXNjYXBlKHN0cmluZyl7c3RyaW5nPXRvU3RyaW5nKHN0cmluZyk7cmV0dXJuIHN0cmluZyYmcmVIYXNVbmVzY2FwZWRIdG1sLnRlc3Qoc3RyaW5nKT9zdHJpbmcucmVwbGFjZShyZVVuZXNjYXBlZEh0bWwsZXNjYXBlSHRtbENoYXIpOnN0cmluZzt9LyoqXG4gICAgICAgICAqIEVzY2FwZXMgdGhlIGBSZWdFeHBgIHNwZWNpYWwgY2hhcmFjdGVycyBcIl5cIiwgXCIkXCIsIFwiXFxcIiwgXCIuXCIsIFwiKlwiLCBcIitcIixcbiAgICAgICAgICogXCI/XCIsIFwiKFwiLCBcIilcIiwgXCJbXCIsIFwiXVwiLCBcIntcIiwgXCJ9XCIsIGFuZCBcInxcIiBpbiBgc3RyaW5nYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBlc2NhcGUuXG4gICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGVzY2FwZWQgc3RyaW5nLlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLmVzY2FwZVJlZ0V4cCgnW2xvZGFzaF0oaHR0cHM6Ly9sb2Rhc2guY29tLyknKTtcbiAgICAgICAgICogLy8gPT4gJ1xcW2xvZGFzaFxcXVxcKGh0dHBzOi8vbG9kYXNoXFwuY29tL1xcKSdcbiAgICAgICAgICovZnVuY3Rpb24gZXNjYXBlUmVnRXhwKHN0cmluZyl7c3RyaW5nPXRvU3RyaW5nKHN0cmluZyk7cmV0dXJuIHN0cmluZyYmcmVIYXNSZWdFeHBDaGFyLnRlc3Qoc3RyaW5nKT9zdHJpbmcucmVwbGFjZShyZVJlZ0V4cENoYXIsJ1xcXFwkJicpOnN0cmluZzt9LyoqXG4gICAgICAgICAqIENvbnZlcnRzIGBzdHJpbmdgIHRvXG4gICAgICAgICAqIFtrZWJhYiBjYXNlXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9MZXR0ZXJfY2FzZSNTcGVjaWFsX2Nhc2Vfc3R5bGVzKS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBrZWJhYiBjYXNlZCBzdHJpbmcuXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8ua2ViYWJDYXNlKCdGb28gQmFyJyk7XG4gICAgICAgICAqIC8vID0+ICdmb28tYmFyJ1xuICAgICAgICAgKlxuICAgICAgICAgKiBfLmtlYmFiQ2FzZSgnZm9vQmFyJyk7XG4gICAgICAgICAqIC8vID0+ICdmb28tYmFyJ1xuICAgICAgICAgKlxuICAgICAgICAgKiBfLmtlYmFiQ2FzZSgnX19GT09fQkFSX18nKTtcbiAgICAgICAgICogLy8gPT4gJ2Zvby1iYXInXG4gICAgICAgICAqL3ZhciBrZWJhYkNhc2U9Y3JlYXRlQ29tcG91bmRlcihmdW5jdGlvbihyZXN1bHQsd29yZCxpbmRleCl7cmV0dXJuIHJlc3VsdCsoaW5kZXg/Jy0nOicnKSt3b3JkLnRvTG93ZXJDYXNlKCk7fSk7LyoqXG4gICAgICAgKiBDb252ZXJ0cyBgc3RyaW5nYCwgYXMgc3BhY2Ugc2VwYXJhdGVkIHdvcmRzLCB0byBsb3dlciBjYXNlLlxuICAgICAgICpcbiAgICAgICAqIEBzdGF0aWNcbiAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBsb3dlciBjYXNlZCBzdHJpbmcuXG4gICAgICAgKiBAZXhhbXBsZVxuICAgICAgICpcbiAgICAgICAqIF8ubG93ZXJDYXNlKCctLUZvby1CYXItLScpO1xuICAgICAgICogLy8gPT4gJ2ZvbyBiYXInXG4gICAgICAgKlxuICAgICAgICogXy5sb3dlckNhc2UoJ2Zvb0JhcicpO1xuICAgICAgICogLy8gPT4gJ2ZvbyBiYXInXG4gICAgICAgKlxuICAgICAgICogXy5sb3dlckNhc2UoJ19fRk9PX0JBUl9fJyk7XG4gICAgICAgKiAvLyA9PiAnZm9vIGJhcidcbiAgICAgICAqL3ZhciBsb3dlckNhc2U9Y3JlYXRlQ29tcG91bmRlcihmdW5jdGlvbihyZXN1bHQsd29yZCxpbmRleCl7cmV0dXJuIHJlc3VsdCsoaW5kZXg/JyAnOicnKSt3b3JkLnRvTG93ZXJDYXNlKCk7fSk7LyoqXG4gICAgICAgKiBDb252ZXJ0cyB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIGBzdHJpbmdgIHRvIGxvd2VyIGNhc2UuXG4gICAgICAgKlxuICAgICAgICogQHN0YXRpY1xuICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBzdHJpbmcuXG4gICAgICAgKiBAZXhhbXBsZVxuICAgICAgICpcbiAgICAgICAqIF8ubG93ZXJGaXJzdCgnRnJlZCcpO1xuICAgICAgICogLy8gPT4gJ2ZyZWQnXG4gICAgICAgKlxuICAgICAgICogXy5sb3dlckZpcnN0KCdGUkVEJyk7XG4gICAgICAgKiAvLyA9PiAnZlJFRCdcbiAgICAgICAqL3ZhciBsb3dlckZpcnN0PWNyZWF0ZUNhc2VGaXJzdCgndG9Mb3dlckNhc2UnKTsvKipcbiAgICAgICAgICogUGFkcyBgc3RyaW5nYCBvbiB0aGUgbGVmdCBhbmQgcmlnaHQgc2lkZXMgaWYgaXQncyBzaG9ydGVyIHRoYW4gYGxlbmd0aGAuXG4gICAgICAgICAqIFBhZGRpbmcgY2hhcmFjdGVycyBhcmUgdHJ1bmNhdGVkIGlmIHRoZXkgY2FuJ3QgYmUgZXZlbmx5IGRpdmlkZWQgYnkgYGxlbmd0aGAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQHNpbmNlIDMuMC4wXG4gICAgICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gcGFkLlxuICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aD0wXSBUaGUgcGFkZGluZyBsZW5ndGguXG4gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbY2hhcnM9JyAnXSBUaGUgc3RyaW5nIHVzZWQgYXMgcGFkZGluZy5cbiAgICAgICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcGFkZGVkIHN0cmluZy5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogXy5wYWQoJ2FiYycsIDgpO1xuICAgICAgICAgKiAvLyA9PiAnICBhYmMgICAnXG4gICAgICAgICAqXG4gICAgICAgICAqIF8ucGFkKCdhYmMnLCA4LCAnXy0nKTtcbiAgICAgICAgICogLy8gPT4gJ18tYWJjXy1fJ1xuICAgICAgICAgKlxuICAgICAgICAgKiBfLnBhZCgnYWJjJywgMyk7XG4gICAgICAgICAqIC8vID0+ICdhYmMnXG4gICAgICAgICAqL2Z1bmN0aW9uIHBhZChzdHJpbmcsbGVuZ3RoLGNoYXJzKXtzdHJpbmc9dG9TdHJpbmcoc3RyaW5nKTtsZW5ndGg9dG9JbnRlZ2VyKGxlbmd0aCk7dmFyIHN0ckxlbmd0aD1sZW5ndGg/c3RyaW5nU2l6ZShzdHJpbmcpOjA7aWYoIWxlbmd0aHx8c3RyTGVuZ3RoPj1sZW5ndGgpe3JldHVybiBzdHJpbmc7fXZhciBtaWQ9KGxlbmd0aC1zdHJMZW5ndGgpLzI7cmV0dXJuIGNyZWF0ZVBhZGRpbmcobmF0aXZlRmxvb3IobWlkKSxjaGFycykrc3RyaW5nK2NyZWF0ZVBhZGRpbmcobmF0aXZlQ2VpbChtaWQpLGNoYXJzKTt9LyoqXG4gICAgICAgICAqIFBhZHMgYHN0cmluZ2Agb24gdGhlIHJpZ2h0IHNpZGUgaWYgaXQncyBzaG9ydGVyIHRoYW4gYGxlbmd0aGAuIFBhZGRpbmdcbiAgICAgICAgICogY2hhcmFjdGVycyBhcmUgdHJ1bmNhdGVkIGlmIHRoZXkgZXhjZWVkIGBsZW5ndGhgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIHBhZC5cbiAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGg9MF0gVGhlIHBhZGRpbmcgbGVuZ3RoLlxuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2NoYXJzPScgJ10gVGhlIHN0cmluZyB1c2VkIGFzIHBhZGRpbmcuXG4gICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHBhZGRlZCBzdHJpbmcuXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8ucGFkRW5kKCdhYmMnLCA2KTtcbiAgICAgICAgICogLy8gPT4gJ2FiYyAgICdcbiAgICAgICAgICpcbiAgICAgICAgICogXy5wYWRFbmQoJ2FiYycsIDYsICdfLScpO1xuICAgICAgICAgKiAvLyA9PiAnYWJjXy1fJ1xuICAgICAgICAgKlxuICAgICAgICAgKiBfLnBhZEVuZCgnYWJjJywgMyk7XG4gICAgICAgICAqIC8vID0+ICdhYmMnXG4gICAgICAgICAqL2Z1bmN0aW9uIHBhZEVuZChzdHJpbmcsbGVuZ3RoLGNoYXJzKXtzdHJpbmc9dG9TdHJpbmcoc3RyaW5nKTtsZW5ndGg9dG9JbnRlZ2VyKGxlbmd0aCk7dmFyIHN0ckxlbmd0aD1sZW5ndGg/c3RyaW5nU2l6ZShzdHJpbmcpOjA7cmV0dXJuIGxlbmd0aCYmc3RyTGVuZ3RoPGxlbmd0aD9zdHJpbmcrY3JlYXRlUGFkZGluZyhsZW5ndGgtc3RyTGVuZ3RoLGNoYXJzKTpzdHJpbmc7fS8qKlxuICAgICAgICAgKiBQYWRzIGBzdHJpbmdgIG9uIHRoZSBsZWZ0IHNpZGUgaWYgaXQncyBzaG9ydGVyIHRoYW4gYGxlbmd0aGAuIFBhZGRpbmdcbiAgICAgICAgICogY2hhcmFjdGVycyBhcmUgdHJ1bmNhdGVkIGlmIHRoZXkgZXhjZWVkIGBsZW5ndGhgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIHBhZC5cbiAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGg9MF0gVGhlIHBhZGRpbmcgbGVuZ3RoLlxuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2NoYXJzPScgJ10gVGhlIHN0cmluZyB1c2VkIGFzIHBhZGRpbmcuXG4gICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHBhZGRlZCBzdHJpbmcuXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8ucGFkU3RhcnQoJ2FiYycsIDYpO1xuICAgICAgICAgKiAvLyA9PiAnICAgYWJjJ1xuICAgICAgICAgKlxuICAgICAgICAgKiBfLnBhZFN0YXJ0KCdhYmMnLCA2LCAnXy0nKTtcbiAgICAgICAgICogLy8gPT4gJ18tX2FiYydcbiAgICAgICAgICpcbiAgICAgICAgICogXy5wYWRTdGFydCgnYWJjJywgMyk7XG4gICAgICAgICAqIC8vID0+ICdhYmMnXG4gICAgICAgICAqL2Z1bmN0aW9uIHBhZFN0YXJ0KHN0cmluZyxsZW5ndGgsY2hhcnMpe3N0cmluZz10b1N0cmluZyhzdHJpbmcpO2xlbmd0aD10b0ludGVnZXIobGVuZ3RoKTt2YXIgc3RyTGVuZ3RoPWxlbmd0aD9zdHJpbmdTaXplKHN0cmluZyk6MDtyZXR1cm4gbGVuZ3RoJiZzdHJMZW5ndGg8bGVuZ3RoP2NyZWF0ZVBhZGRpbmcobGVuZ3RoLXN0ckxlbmd0aCxjaGFycykrc3RyaW5nOnN0cmluZzt9LyoqXG4gICAgICAgICAqIENvbnZlcnRzIGBzdHJpbmdgIHRvIGFuIGludGVnZXIgb2YgdGhlIHNwZWNpZmllZCByYWRpeC4gSWYgYHJhZGl4YCBpc1xuICAgICAgICAgKiBgdW5kZWZpbmVkYCBvciBgMGAsIGEgYHJhZGl4YCBvZiBgMTBgIGlzIHVzZWQgdW5sZXNzIGB2YWx1ZWAgaXMgYVxuICAgICAgICAgKiBoZXhhZGVjaW1hbCwgaW4gd2hpY2ggY2FzZSBhIGByYWRpeGAgb2YgYDE2YCBpcyB1c2VkLlxuICAgICAgICAgKlxuICAgICAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgYWxpZ25zIHdpdGggdGhlXG4gICAgICAgICAqIFtFUzUgaW1wbGVtZW50YXRpb25dKGh0dHBzOi8vZXM1LmdpdGh1Yi5pby8jeDE1LjEuMi4yKSBvZiBgcGFyc2VJbnRgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSAxLjEuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gW3JhZGl4PTEwXSBUaGUgcmFkaXggdG8gaW50ZXJwcmV0IGB2YWx1ZWAgYnkuXG4gICAgICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gICAgICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBpbnRlZ2VyLlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLnBhcnNlSW50KCcwOCcpO1xuICAgICAgICAgKiAvLyA9PiA4XG4gICAgICAgICAqXG4gICAgICAgICAqIF8ubWFwKFsnNicsICcwOCcsICcxMCddLCBfLnBhcnNlSW50KTtcbiAgICAgICAgICogLy8gPT4gWzYsIDgsIDEwXVxuICAgICAgICAgKi9mdW5jdGlvbiBwYXJzZUludChzdHJpbmcscmFkaXgsZ3VhcmQpe2lmKGd1YXJkfHxyYWRpeD09bnVsbCl7cmFkaXg9MDt9ZWxzZSBpZihyYWRpeCl7cmFkaXg9K3JhZGl4O31yZXR1cm4gbmF0aXZlUGFyc2VJbnQodG9TdHJpbmcoc3RyaW5nKS5yZXBsYWNlKHJlVHJpbVN0YXJ0LCcnKSxyYWRpeHx8MCk7fS8qKlxuICAgICAgICAgKiBSZXBlYXRzIHRoZSBnaXZlbiBzdHJpbmcgYG5gIHRpbWVzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIHJlcGVhdC5cbiAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IFtuPTFdIFRoZSBudW1iZXIgb2YgdGltZXMgdG8gcmVwZWF0IHRoZSBzdHJpbmcuXG4gICAgICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHJlcGVhdGVkIHN0cmluZy5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogXy5yZXBlYXQoJyonLCAzKTtcbiAgICAgICAgICogLy8gPT4gJyoqKidcbiAgICAgICAgICpcbiAgICAgICAgICogXy5yZXBlYXQoJ2FiYycsIDIpO1xuICAgICAgICAgKiAvLyA9PiAnYWJjYWJjJ1xuICAgICAgICAgKlxuICAgICAgICAgKiBfLnJlcGVhdCgnYWJjJywgMCk7XG4gICAgICAgICAqIC8vID0+ICcnXG4gICAgICAgICAqL2Z1bmN0aW9uIHJlcGVhdChzdHJpbmcsbixndWFyZCl7aWYoZ3VhcmQ/aXNJdGVyYXRlZUNhbGwoc3RyaW5nLG4sZ3VhcmQpOm49PT11bmRlZmluZWQpe249MTt9ZWxzZXtuPXRvSW50ZWdlcihuKTt9cmV0dXJuIGJhc2VSZXBlYXQodG9TdHJpbmcoc3RyaW5nKSxuKTt9LyoqXG4gICAgICAgICAqIFJlcGxhY2VzIG1hdGNoZXMgZm9yIGBwYXR0ZXJuYCBpbiBgc3RyaW5nYCB3aXRoIGByZXBsYWNlbWVudGAuXG4gICAgICAgICAqXG4gICAgICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBiYXNlZCBvblxuICAgICAgICAgKiBbYFN0cmluZyNyZXBsYWNlYF0oaHR0cHM6Ly9tZG4uaW8vU3RyaW5nL3JlcGxhY2UpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIG1vZGlmeS5cbiAgICAgICAgICogQHBhcmFtIHtSZWdFeHB8c3RyaW5nfSBwYXR0ZXJuIFRoZSBwYXR0ZXJuIHRvIHJlcGxhY2UuXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb258c3RyaW5nfSByZXBsYWNlbWVudCBUaGUgbWF0Y2ggcmVwbGFjZW1lbnQuXG4gICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIG1vZGlmaWVkIHN0cmluZy5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogXy5yZXBsYWNlKCdIaSBGcmVkJywgJ0ZyZWQnLCAnQmFybmV5Jyk7XG4gICAgICAgICAqIC8vID0+ICdIaSBCYXJuZXknXG4gICAgICAgICAqL2Z1bmN0aW9uIHJlcGxhY2UoKXt2YXIgYXJncz1hcmd1bWVudHMsc3RyaW5nPXRvU3RyaW5nKGFyZ3NbMF0pO3JldHVybiBhcmdzLmxlbmd0aDwzP3N0cmluZzpzdHJpbmcucmVwbGFjZShhcmdzWzFdLGFyZ3NbMl0pO30vKipcbiAgICAgICAgICogQ29udmVydHMgYHN0cmluZ2AgdG9cbiAgICAgICAgICogW3NuYWtlIGNhc2VdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NuYWtlX2Nhc2UpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHNuYWtlIGNhc2VkIHN0cmluZy5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogXy5zbmFrZUNhc2UoJ0ZvbyBCYXInKTtcbiAgICAgICAgICogLy8gPT4gJ2Zvb19iYXInXG4gICAgICAgICAqXG4gICAgICAgICAqIF8uc25ha2VDYXNlKCdmb29CYXInKTtcbiAgICAgICAgICogLy8gPT4gJ2Zvb19iYXInXG4gICAgICAgICAqXG4gICAgICAgICAqIF8uc25ha2VDYXNlKCctLUZPTy1CQVItLScpO1xuICAgICAgICAgKiAvLyA9PiAnZm9vX2JhcidcbiAgICAgICAgICovdmFyIHNuYWtlQ2FzZT1jcmVhdGVDb21wb3VuZGVyKGZ1bmN0aW9uKHJlc3VsdCx3b3JkLGluZGV4KXtyZXR1cm4gcmVzdWx0KyhpbmRleD8nXyc6JycpK3dvcmQudG9Mb3dlckNhc2UoKTt9KTsvKipcbiAgICAgICAqIFNwbGl0cyBgc3RyaW5nYCBieSBgc2VwYXJhdG9yYC5cbiAgICAgICAqXG4gICAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgYmFzZWQgb25cbiAgICAgICAqIFtgU3RyaW5nI3NwbGl0YF0oaHR0cHM6Ly9tZG4uaW8vU3RyaW5nL3NwbGl0KS5cbiAgICAgICAqXG4gICAgICAgKiBAc3RhdGljXG4gICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICogQHNpbmNlIDQuMC4wXG4gICAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBzcGxpdC5cbiAgICAgICAqIEBwYXJhbSB7UmVnRXhwfHN0cmluZ30gc2VwYXJhdG9yIFRoZSBzZXBhcmF0b3IgcGF0dGVybiB0byBzcGxpdCBieS5cbiAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbGltaXRdIFRoZSBsZW5ndGggdG8gdHJ1bmNhdGUgcmVzdWx0cyB0by5cbiAgICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgc3RyaW5nIHNlZ21lbnRzLlxuICAgICAgICogQGV4YW1wbGVcbiAgICAgICAqXG4gICAgICAgKiBfLnNwbGl0KCdhLWItYycsICctJywgMik7XG4gICAgICAgKiAvLyA9PiBbJ2EnLCAnYiddXG4gICAgICAgKi9mdW5jdGlvbiBzcGxpdChzdHJpbmcsc2VwYXJhdG9yLGxpbWl0KXtpZihsaW1pdCYmdHlwZW9mIGxpbWl0IT09J251bWJlcicmJmlzSXRlcmF0ZWVDYWxsKHN0cmluZyxzZXBhcmF0b3IsbGltaXQpKXtzZXBhcmF0b3I9bGltaXQ9dW5kZWZpbmVkO31saW1pdD1saW1pdD09PXVuZGVmaW5lZD9NQVhfQVJSQVlfTEVOR1RIOmxpbWl0Pj4+MDtpZighbGltaXQpe3JldHVybltdO31zdHJpbmc9dG9TdHJpbmcoc3RyaW5nKTtpZihzdHJpbmcmJih0eXBlb2Ygc2VwYXJhdG9yPT09J3N0cmluZyd8fHNlcGFyYXRvciE9bnVsbCYmIWlzUmVnRXhwKHNlcGFyYXRvcikpKXtzZXBhcmF0b3I9YmFzZVRvU3RyaW5nKHNlcGFyYXRvcik7aWYoIXNlcGFyYXRvciYmaGFzVW5pY29kZShzdHJpbmcpKXtyZXR1cm4gY2FzdFNsaWNlKHN0cmluZ1RvQXJyYXkoc3RyaW5nKSwwLGxpbWl0KTt9fXJldHVybiBzdHJpbmcuc3BsaXQoc2VwYXJhdG9yLGxpbWl0KTt9LyoqXG4gICAgICAgICAqIENvbnZlcnRzIGBzdHJpbmdgIHRvXG4gICAgICAgICAqIFtzdGFydCBjYXNlXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9MZXR0ZXJfY2FzZSNTdHlsaXN0aWNfb3Jfc3BlY2lhbGlzZWRfdXNhZ2UpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSAzLjEuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHN0YXJ0IGNhc2VkIHN0cmluZy5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogXy5zdGFydENhc2UoJy0tZm9vLWJhci0tJyk7XG4gICAgICAgICAqIC8vID0+ICdGb28gQmFyJ1xuICAgICAgICAgKlxuICAgICAgICAgKiBfLnN0YXJ0Q2FzZSgnZm9vQmFyJyk7XG4gICAgICAgICAqIC8vID0+ICdGb28gQmFyJ1xuICAgICAgICAgKlxuICAgICAgICAgKiBfLnN0YXJ0Q2FzZSgnX19GT09fQkFSX18nKTtcbiAgICAgICAgICogLy8gPT4gJ0ZPTyBCQVInXG4gICAgICAgICAqL3ZhciBzdGFydENhc2U9Y3JlYXRlQ29tcG91bmRlcihmdW5jdGlvbihyZXN1bHQsd29yZCxpbmRleCl7cmV0dXJuIHJlc3VsdCsoaW5kZXg/JyAnOicnKSt1cHBlckZpcnN0KHdvcmQpO30pOy8qKlxuICAgICAgICogQ2hlY2tzIGlmIGBzdHJpbmdgIHN0YXJ0cyB3aXRoIHRoZSBnaXZlbiB0YXJnZXQgc3RyaW5nLlxuICAgICAgICpcbiAgICAgICAqIEBzdGF0aWNcbiAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGluc3BlY3QuXG4gICAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3RhcmdldF0gVGhlIHN0cmluZyB0byBzZWFyY2ggZm9yLlxuICAgICAgICogQHBhcmFtIHtudW1iZXJ9IFtwb3NpdGlvbj0wXSBUaGUgcG9zaXRpb24gdG8gc2VhcmNoIGZyb20uXG4gICAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHN0cmluZ2Agc3RhcnRzIHdpdGggYHRhcmdldGAsXG4gICAgICAgKiAgZWxzZSBgZmFsc2VgLlxuICAgICAgICogQGV4YW1wbGVcbiAgICAgICAqXG4gICAgICAgKiBfLnN0YXJ0c1dpdGgoJ2FiYycsICdhJyk7XG4gICAgICAgKiAvLyA9PiB0cnVlXG4gICAgICAgKlxuICAgICAgICogXy5zdGFydHNXaXRoKCdhYmMnLCAnYicpO1xuICAgICAgICogLy8gPT4gZmFsc2VcbiAgICAgICAqXG4gICAgICAgKiBfLnN0YXJ0c1dpdGgoJ2FiYycsICdiJywgMSk7XG4gICAgICAgKiAvLyA9PiB0cnVlXG4gICAgICAgKi9mdW5jdGlvbiBzdGFydHNXaXRoKHN0cmluZyx0YXJnZXQscG9zaXRpb24pe3N0cmluZz10b1N0cmluZyhzdHJpbmcpO3Bvc2l0aW9uPXBvc2l0aW9uPT1udWxsPzA6YmFzZUNsYW1wKHRvSW50ZWdlcihwb3NpdGlvbiksMCxzdHJpbmcubGVuZ3RoKTt0YXJnZXQ9YmFzZVRvU3RyaW5nKHRhcmdldCk7cmV0dXJuIHN0cmluZy5zbGljZShwb3NpdGlvbixwb3NpdGlvbit0YXJnZXQubGVuZ3RoKT09dGFyZ2V0O30vKipcbiAgICAgICAgICogQ3JlYXRlcyBhIGNvbXBpbGVkIHRlbXBsYXRlIGZ1bmN0aW9uIHRoYXQgY2FuIGludGVycG9sYXRlIGRhdGEgcHJvcGVydGllc1xuICAgICAgICAgKiBpbiBcImludGVycG9sYXRlXCIgZGVsaW1pdGVycywgSFRNTC1lc2NhcGUgaW50ZXJwb2xhdGVkIGRhdGEgcHJvcGVydGllcyBpblxuICAgICAgICAgKiBcImVzY2FwZVwiIGRlbGltaXRlcnMsIGFuZCBleGVjdXRlIEphdmFTY3JpcHQgaW4gXCJldmFsdWF0ZVwiIGRlbGltaXRlcnMuIERhdGFcbiAgICAgICAgICogcHJvcGVydGllcyBtYXkgYmUgYWNjZXNzZWQgYXMgZnJlZSB2YXJpYWJsZXMgaW4gdGhlIHRlbXBsYXRlLiBJZiBhIHNldHRpbmdcbiAgICAgICAgICogb2JqZWN0IGlzIGdpdmVuLCBpdCB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgYF8udGVtcGxhdGVTZXR0aW5nc2AgdmFsdWVzLlxuICAgICAgICAgKlxuICAgICAgICAgKiAqKk5vdGU6KiogSW4gdGhlIGRldmVsb3BtZW50IGJ1aWxkIGBfLnRlbXBsYXRlYCB1dGlsaXplc1xuICAgICAgICAgKiBbc291cmNlVVJMc10oaHR0cDovL3d3dy5odG1sNXJvY2tzLmNvbS9lbi90dXRvcmlhbHMvZGV2ZWxvcGVydG9vbHMvc291cmNlbWFwcy8jdG9jLXNvdXJjZXVybClcbiAgICAgICAgICogZm9yIGVhc2llciBkZWJ1Z2dpbmcuXG4gICAgICAgICAqXG4gICAgICAgICAqIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHByZWNvbXBpbGluZyB0ZW1wbGF0ZXMgc2VlXG4gICAgICAgICAqIFtsb2Rhc2gncyBjdXN0b20gYnVpbGRzIGRvY3VtZW50YXRpb25dKGh0dHBzOi8vbG9kYXNoLmNvbS9jdXN0b20tYnVpbGRzKS5cbiAgICAgICAgICpcbiAgICAgICAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gQ2hyb21lIGV4dGVuc2lvbiBzYW5kYm94ZXMgc2VlXG4gICAgICAgICAqIFtDaHJvbWUncyBleHRlbnNpb25zIGRvY3VtZW50YXRpb25dKGh0dHBzOi8vZGV2ZWxvcGVyLmNocm9tZS5jb20vZXh0ZW5zaW9ucy9zYW5kYm94aW5nRXZhbCkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICogQHNpbmNlIDAuMS4wXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSB0ZW1wbGF0ZSBzdHJpbmcuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gVGhlIG9wdGlvbnMgb2JqZWN0LlxuICAgICAgICAgKiBAcGFyYW0ge1JlZ0V4cH0gW29wdGlvbnMuZXNjYXBlPV8udGVtcGxhdGVTZXR0aW5ncy5lc2NhcGVdXG4gICAgICAgICAqICBUaGUgSFRNTCBcImVzY2FwZVwiIGRlbGltaXRlci5cbiAgICAgICAgICogQHBhcmFtIHtSZWdFeHB9IFtvcHRpb25zLmV2YWx1YXRlPV8udGVtcGxhdGVTZXR0aW5ncy5ldmFsdWF0ZV1cbiAgICAgICAgICogIFRoZSBcImV2YWx1YXRlXCIgZGVsaW1pdGVyLlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnMuaW1wb3J0cz1fLnRlbXBsYXRlU2V0dGluZ3MuaW1wb3J0c11cbiAgICAgICAgICogIEFuIG9iamVjdCB0byBpbXBvcnQgaW50byB0aGUgdGVtcGxhdGUgYXMgZnJlZSB2YXJpYWJsZXMuXG4gICAgICAgICAqIEBwYXJhbSB7UmVnRXhwfSBbb3B0aW9ucy5pbnRlcnBvbGF0ZT1fLnRlbXBsYXRlU2V0dGluZ3MuaW50ZXJwb2xhdGVdXG4gICAgICAgICAqICBUaGUgXCJpbnRlcnBvbGF0ZVwiIGRlbGltaXRlci5cbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnNvdXJjZVVSTD0nbG9kYXNoLnRlbXBsYXRlU291cmNlc1tuXSddXG4gICAgICAgICAqICBUaGUgc291cmNlVVJMIG9mIHRoZSBjb21waWxlZCB0ZW1wbGF0ZS5cbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnZhcmlhYmxlPSdvYmonXVxuICAgICAgICAgKiAgVGhlIGRhdGEgb2JqZWN0IHZhcmlhYmxlIG5hbWUuXG4gICAgICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gICAgICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgY29tcGlsZWQgdGVtcGxhdGUgZnVuY3Rpb24uXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIC8vIFVzZSB0aGUgXCJpbnRlcnBvbGF0ZVwiIGRlbGltaXRlciB0byBjcmVhdGUgYSBjb21waWxlZCB0ZW1wbGF0ZS5cbiAgICAgICAgICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnaGVsbG8gPCU9IHVzZXIgJT4hJyk7XG4gICAgICAgICAqIGNvbXBpbGVkKHsgJ3VzZXInOiAnZnJlZCcgfSk7XG4gICAgICAgICAqIC8vID0+ICdoZWxsbyBmcmVkISdcbiAgICAgICAgICpcbiAgICAgICAgICogLy8gVXNlIHRoZSBIVE1MIFwiZXNjYXBlXCIgZGVsaW1pdGVyIHRvIGVzY2FwZSBkYXRhIHByb3BlcnR5IHZhbHVlcy5cbiAgICAgICAgICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnPGI+PCUtIHZhbHVlICU+PC9iPicpO1xuICAgICAgICAgKiBjb21waWxlZCh7ICd2YWx1ZSc6ICc8c2NyaXB0PicgfSk7XG4gICAgICAgICAqIC8vID0+ICc8Yj4mbHQ7c2NyaXB0Jmd0OzwvYj4nXG4gICAgICAgICAqXG4gICAgICAgICAqIC8vIFVzZSB0aGUgXCJldmFsdWF0ZVwiIGRlbGltaXRlciB0byBleGVjdXRlIEphdmFTY3JpcHQgYW5kIGdlbmVyYXRlIEhUTUwuXG4gICAgICAgICAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJzwlIF8uZm9yRWFjaCh1c2VycywgZnVuY3Rpb24odXNlcikgeyAlPjxsaT48JS0gdXNlciAlPjwvbGk+PCUgfSk7ICU+Jyk7XG4gICAgICAgICAqIGNvbXBpbGVkKHsgJ3VzZXJzJzogWydmcmVkJywgJ2Jhcm5leSddIH0pO1xuICAgICAgICAgKiAvLyA9PiAnPGxpPmZyZWQ8L2xpPjxsaT5iYXJuZXk8L2xpPidcbiAgICAgICAgICpcbiAgICAgICAgICogLy8gVXNlIHRoZSBpbnRlcm5hbCBgcHJpbnRgIGZ1bmN0aW9uIGluIFwiZXZhbHVhdGVcIiBkZWxpbWl0ZXJzLlxuICAgICAgICAgKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCc8JSBwcmludChcImhlbGxvIFwiICsgdXNlcik7ICU+IScpO1xuICAgICAgICAgKiBjb21waWxlZCh7ICd1c2VyJzogJ2Jhcm5leScgfSk7XG4gICAgICAgICAqIC8vID0+ICdoZWxsbyBiYXJuZXkhJ1xuICAgICAgICAgKlxuICAgICAgICAgKiAvLyBVc2UgdGhlIEVTIHRlbXBsYXRlIGxpdGVyYWwgZGVsaW1pdGVyIGFzIGFuIFwiaW50ZXJwb2xhdGVcIiBkZWxpbWl0ZXIuXG4gICAgICAgICAqIC8vIERpc2FibGUgc3VwcG9ydCBieSByZXBsYWNpbmcgdGhlIFwiaW50ZXJwb2xhdGVcIiBkZWxpbWl0ZXIuXG4gICAgICAgICAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJ2hlbGxvICR7IHVzZXIgfSEnKTtcbiAgICAgICAgICogY29tcGlsZWQoeyAndXNlcic6ICdwZWJibGVzJyB9KTtcbiAgICAgICAgICogLy8gPT4gJ2hlbGxvIHBlYmJsZXMhJ1xuICAgICAgICAgKlxuICAgICAgICAgKiAvLyBVc2UgYmFja3NsYXNoZXMgdG8gdHJlYXQgZGVsaW1pdGVycyBhcyBwbGFpbiB0ZXh0LlxuICAgICAgICAgKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCc8JT0gXCJcXFxcPCUtIHZhbHVlICVcXFxcPlwiICU+Jyk7XG4gICAgICAgICAqIGNvbXBpbGVkKHsgJ3ZhbHVlJzogJ2lnbm9yZWQnIH0pO1xuICAgICAgICAgKiAvLyA9PiAnPCUtIHZhbHVlICU+J1xuICAgICAgICAgKlxuICAgICAgICAgKiAvLyBVc2UgdGhlIGBpbXBvcnRzYCBvcHRpb24gdG8gaW1wb3J0IGBqUXVlcnlgIGFzIGBqcWAuXG4gICAgICAgICAqIHZhciB0ZXh0ID0gJzwlIGpxLmVhY2godXNlcnMsIGZ1bmN0aW9uKHVzZXIpIHsgJT48bGk+PCUtIHVzZXIgJT48L2xpPjwlIH0pOyAlPic7XG4gICAgICAgICAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUodGV4dCwgeyAnaW1wb3J0cyc6IHsgJ2pxJzogalF1ZXJ5IH0gfSk7XG4gICAgICAgICAqIGNvbXBpbGVkKHsgJ3VzZXJzJzogWydmcmVkJywgJ2Jhcm5leSddIH0pO1xuICAgICAgICAgKiAvLyA9PiAnPGxpPmZyZWQ8L2xpPjxsaT5iYXJuZXk8L2xpPidcbiAgICAgICAgICpcbiAgICAgICAgICogLy8gVXNlIHRoZSBgc291cmNlVVJMYCBvcHRpb24gdG8gc3BlY2lmeSBhIGN1c3RvbSBzb3VyY2VVUkwgZm9yIHRoZSB0ZW1wbGF0ZS5cbiAgICAgICAgICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnaGVsbG8gPCU9IHVzZXIgJT4hJywgeyAnc291cmNlVVJMJzogJy9iYXNpYy9ncmVldGluZy5qc3QnIH0pO1xuICAgICAgICAgKiBjb21waWxlZChkYXRhKTtcbiAgICAgICAgICogLy8gPT4gRmluZCB0aGUgc291cmNlIG9mIFwiZ3JlZXRpbmcuanN0XCIgdW5kZXIgdGhlIFNvdXJjZXMgdGFiIG9yIFJlc291cmNlcyBwYW5lbCBvZiB0aGUgd2ViIGluc3BlY3Rvci5cbiAgICAgICAgICpcbiAgICAgICAgICogLy8gVXNlIHRoZSBgdmFyaWFibGVgIG9wdGlvbiB0byBlbnN1cmUgYSB3aXRoLXN0YXRlbWVudCBpc24ndCB1c2VkIGluIHRoZSBjb21waWxlZCB0ZW1wbGF0ZS5cbiAgICAgICAgICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnaGkgPCU9IGRhdGEudXNlciAlPiEnLCB7ICd2YXJpYWJsZSc6ICdkYXRhJyB9KTtcbiAgICAgICAgICogY29tcGlsZWQuc291cmNlO1xuICAgICAgICAgKiAvLyA9PiBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgICAqIC8vICAgdmFyIF9fdCwgX19wID0gJyc7XG4gICAgICAgICAqIC8vICAgX19wICs9ICdoaSAnICsgKChfX3QgPSAoIGRhdGEudXNlciApKSA9PSBudWxsID8gJycgOiBfX3QpICsgJyEnO1xuICAgICAgICAgKiAvLyAgIHJldHVybiBfX3A7XG4gICAgICAgICAqIC8vIH1cbiAgICAgICAgICpcbiAgICAgICAgICogLy8gVXNlIGN1c3RvbSB0ZW1wbGF0ZSBkZWxpbWl0ZXJzLlxuICAgICAgICAgKiBfLnRlbXBsYXRlU2V0dGluZ3MuaW50ZXJwb2xhdGUgPSAve3soW1xcc1xcU10rPyl9fS9nO1xuICAgICAgICAgKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCdoZWxsbyB7eyB1c2VyIH19IScpO1xuICAgICAgICAgKiBjb21waWxlZCh7ICd1c2VyJzogJ211c3RhY2hlJyB9KTtcbiAgICAgICAgICogLy8gPT4gJ2hlbGxvIG11c3RhY2hlISdcbiAgICAgICAgICpcbiAgICAgICAgICogLy8gVXNlIHRoZSBgc291cmNlYCBwcm9wZXJ0eSB0byBpbmxpbmUgY29tcGlsZWQgdGVtcGxhdGVzIGZvciBtZWFuaW5nZnVsXG4gICAgICAgICAqIC8vIGxpbmUgbnVtYmVycyBpbiBlcnJvciBtZXNzYWdlcyBhbmQgc3RhY2sgdHJhY2VzLlxuICAgICAgICAgKiBmcy53cml0ZUZpbGVTeW5jKHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCAnanN0LmpzJyksICdcXFxuICAgICAgICAgKiAgIHZhciBKU1QgPSB7XFxcbiAgICAgICAgICogICAgIFwibWFpblwiOiAnICsgXy50ZW1wbGF0ZShtYWluVGV4dCkuc291cmNlICsgJ1xcXG4gICAgICAgICAqICAgfTtcXFxuICAgICAgICAgKiAnKTtcbiAgICAgICAgICovZnVuY3Rpb24gdGVtcGxhdGUoc3RyaW5nLG9wdGlvbnMsZ3VhcmQpey8vIEJhc2VkIG9uIEpvaG4gUmVzaWcncyBgdG1wbGAgaW1wbGVtZW50YXRpb25cbi8vIChodHRwOi8vZWpvaG4ub3JnL2Jsb2cvamF2YXNjcmlwdC1taWNyby10ZW1wbGF0aW5nLylcbi8vIGFuZCBMYXVyYSBEb2t0b3JvdmEncyBkb1QuanMgKGh0dHBzOi8vZ2l0aHViLmNvbS9vbGFkby9kb1QpLlxudmFyIHNldHRpbmdzPWxvZGFzaC50ZW1wbGF0ZVNldHRpbmdzO2lmKGd1YXJkJiZpc0l0ZXJhdGVlQ2FsbChzdHJpbmcsb3B0aW9ucyxndWFyZCkpe29wdGlvbnM9dW5kZWZpbmVkO31zdHJpbmc9dG9TdHJpbmcoc3RyaW5nKTtvcHRpb25zPWFzc2lnbkluV2l0aCh7fSxvcHRpb25zLHNldHRpbmdzLGN1c3RvbURlZmF1bHRzQXNzaWduSW4pO3ZhciBpbXBvcnRzPWFzc2lnbkluV2l0aCh7fSxvcHRpb25zLmltcG9ydHMsc2V0dGluZ3MuaW1wb3J0cyxjdXN0b21EZWZhdWx0c0Fzc2lnbkluKSxpbXBvcnRzS2V5cz1rZXlzKGltcG9ydHMpLGltcG9ydHNWYWx1ZXM9YmFzZVZhbHVlcyhpbXBvcnRzLGltcG9ydHNLZXlzKTt2YXIgaXNFc2NhcGluZyxpc0V2YWx1YXRpbmcsaW5kZXg9MCxpbnRlcnBvbGF0ZT1vcHRpb25zLmludGVycG9sYXRlfHxyZU5vTWF0Y2gsc291cmNlPVwiX19wICs9ICdcIjsvLyBDb21waWxlIHRoZSByZWdleHAgdG8gbWF0Y2ggZWFjaCBkZWxpbWl0ZXIuXG52YXIgcmVEZWxpbWl0ZXJzPVJlZ0V4cCgob3B0aW9ucy5lc2NhcGV8fHJlTm9NYXRjaCkuc291cmNlKyd8JytpbnRlcnBvbGF0ZS5zb3VyY2UrJ3wnKyhpbnRlcnBvbGF0ZT09PXJlSW50ZXJwb2xhdGU/cmVFc1RlbXBsYXRlOnJlTm9NYXRjaCkuc291cmNlKyd8Jysob3B0aW9ucy5ldmFsdWF0ZXx8cmVOb01hdGNoKS5zb3VyY2UrJ3wkJywnZycpOy8vIFVzZSBhIHNvdXJjZVVSTCBmb3IgZWFzaWVyIGRlYnVnZ2luZy5cbnZhciBzb3VyY2VVUkw9Jy8vIyBzb3VyY2VVUkw9JysoJ3NvdXJjZVVSTCdpbiBvcHRpb25zP29wdGlvbnMuc291cmNlVVJMOidsb2Rhc2gudGVtcGxhdGVTb3VyY2VzWycrICsrdGVtcGxhdGVDb3VudGVyKyddJykrJ1xcbic7c3RyaW5nLnJlcGxhY2UocmVEZWxpbWl0ZXJzLGZ1bmN0aW9uKG1hdGNoLGVzY2FwZVZhbHVlLGludGVycG9sYXRlVmFsdWUsZXNUZW1wbGF0ZVZhbHVlLGV2YWx1YXRlVmFsdWUsb2Zmc2V0KXtpbnRlcnBvbGF0ZVZhbHVlfHwoaW50ZXJwb2xhdGVWYWx1ZT1lc1RlbXBsYXRlVmFsdWUpOy8vIEVzY2FwZSBjaGFyYWN0ZXJzIHRoYXQgY2FuJ3QgYmUgaW5jbHVkZWQgaW4gc3RyaW5nIGxpdGVyYWxzLlxuc291cmNlKz1zdHJpbmcuc2xpY2UoaW5kZXgsb2Zmc2V0KS5yZXBsYWNlKHJlVW5lc2NhcGVkU3RyaW5nLGVzY2FwZVN0cmluZ0NoYXIpOy8vIFJlcGxhY2UgZGVsaW1pdGVycyB3aXRoIHNuaXBwZXRzLlxuaWYoZXNjYXBlVmFsdWUpe2lzRXNjYXBpbmc9dHJ1ZTtzb3VyY2UrPVwiJyArXFxuX19lKFwiK2VzY2FwZVZhbHVlK1wiKSArXFxuJ1wiO31pZihldmFsdWF0ZVZhbHVlKXtpc0V2YWx1YXRpbmc9dHJ1ZTtzb3VyY2UrPVwiJztcXG5cIitldmFsdWF0ZVZhbHVlK1wiO1xcbl9fcCArPSAnXCI7fWlmKGludGVycG9sYXRlVmFsdWUpe3NvdXJjZSs9XCInICtcXG4oKF9fdCA9IChcIitpbnRlcnBvbGF0ZVZhbHVlK1wiKSkgPT0gbnVsbCA/ICcnIDogX190KSArXFxuJ1wiO31pbmRleD1vZmZzZXQrbWF0Y2gubGVuZ3RoOy8vIFRoZSBKUyBlbmdpbmUgZW1iZWRkZWQgaW4gQWRvYmUgcHJvZHVjdHMgbmVlZHMgYG1hdGNoYCByZXR1cm5lZCBpblxuLy8gb3JkZXIgdG8gcHJvZHVjZSB0aGUgY29ycmVjdCBgb2Zmc2V0YCB2YWx1ZS5cbnJldHVybiBtYXRjaDt9KTtzb3VyY2UrPVwiJztcXG5cIjsvLyBJZiBgdmFyaWFibGVgIGlzIG5vdCBzcGVjaWZpZWQgd3JhcCBhIHdpdGgtc3RhdGVtZW50IGFyb3VuZCB0aGUgZ2VuZXJhdGVkXG4vLyBjb2RlIHRvIGFkZCB0aGUgZGF0YSBvYmplY3QgdG8gdGhlIHRvcCBvZiB0aGUgc2NvcGUgY2hhaW4uXG52YXIgdmFyaWFibGU9b3B0aW9ucy52YXJpYWJsZTtpZighdmFyaWFibGUpe3NvdXJjZT0nd2l0aCAob2JqKSB7XFxuJytzb3VyY2UrJ1xcbn1cXG4nO30vLyBDbGVhbnVwIGNvZGUgYnkgc3RyaXBwaW5nIGVtcHR5IHN0cmluZ3MuXG5zb3VyY2U9KGlzRXZhbHVhdGluZz9zb3VyY2UucmVwbGFjZShyZUVtcHR5U3RyaW5nTGVhZGluZywnJyk6c291cmNlKS5yZXBsYWNlKHJlRW1wdHlTdHJpbmdNaWRkbGUsJyQxJykucmVwbGFjZShyZUVtcHR5U3RyaW5nVHJhaWxpbmcsJyQxOycpOy8vIEZyYW1lIGNvZGUgYXMgdGhlIGZ1bmN0aW9uIGJvZHkuXG5zb3VyY2U9J2Z1bmN0aW9uKCcrKHZhcmlhYmxlfHwnb2JqJykrJykge1xcbicrKHZhcmlhYmxlPycnOidvYmogfHwgKG9iaiA9IHt9KTtcXG4nKStcInZhciBfX3QsIF9fcCA9ICcnXCIrKGlzRXNjYXBpbmc/JywgX19lID0gXy5lc2NhcGUnOicnKSsoaXNFdmFsdWF0aW5nPycsIF9faiA9IEFycmF5LnByb3RvdHlwZS5qb2luO1xcbicrXCJmdW5jdGlvbiBwcmludCgpIHsgX19wICs9IF9fai5jYWxsKGFyZ3VtZW50cywgJycpIH1cXG5cIjonO1xcbicpK3NvdXJjZSsncmV0dXJuIF9fcFxcbn0nO3ZhciByZXN1bHQ9YXR0ZW1wdChmdW5jdGlvbigpe3JldHVybiBGdW5jdGlvbihpbXBvcnRzS2V5cyxzb3VyY2VVUkwrJ3JldHVybiAnK3NvdXJjZSkuYXBwbHkodW5kZWZpbmVkLGltcG9ydHNWYWx1ZXMpO30pOy8vIFByb3ZpZGUgdGhlIGNvbXBpbGVkIGZ1bmN0aW9uJ3Mgc291cmNlIGJ5IGl0cyBgdG9TdHJpbmdgIG1ldGhvZCBvclxuLy8gdGhlIGBzb3VyY2VgIHByb3BlcnR5IGFzIGEgY29udmVuaWVuY2UgZm9yIGlubGluaW5nIGNvbXBpbGVkIHRlbXBsYXRlcy5cbnJlc3VsdC5zb3VyY2U9c291cmNlO2lmKGlzRXJyb3IocmVzdWx0KSl7dGhyb3cgcmVzdWx0O31yZXR1cm4gcmVzdWx0O30vKipcbiAgICAgICAgICogQ29udmVydHMgYHN0cmluZ2AsIGFzIGEgd2hvbGUsIHRvIGxvd2VyIGNhc2UganVzdCBsaWtlXG4gICAgICAgICAqIFtTdHJpbmcjdG9Mb3dlckNhc2VdKGh0dHBzOi8vbWRuLmlvL3RvTG93ZXJDYXNlKS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBsb3dlciBjYXNlZCBzdHJpbmcuXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8udG9Mb3dlcignLS1Gb28tQmFyLS0nKTtcbiAgICAgICAgICogLy8gPT4gJy0tZm9vLWJhci0tJ1xuICAgICAgICAgKlxuICAgICAgICAgKiBfLnRvTG93ZXIoJ2Zvb0JhcicpO1xuICAgICAgICAgKiAvLyA9PiAnZm9vYmFyJ1xuICAgICAgICAgKlxuICAgICAgICAgKiBfLnRvTG93ZXIoJ19fRk9PX0JBUl9fJyk7XG4gICAgICAgICAqIC8vID0+ICdfX2Zvb19iYXJfXydcbiAgICAgICAgICovZnVuY3Rpb24gdG9Mb3dlcih2YWx1ZSl7cmV0dXJuIHRvU3RyaW5nKHZhbHVlKS50b0xvd2VyQ2FzZSgpO30vKipcbiAgICAgICAgICogQ29udmVydHMgYHN0cmluZ2AsIGFzIGEgd2hvbGUsIHRvIHVwcGVyIGNhc2UganVzdCBsaWtlXG4gICAgICAgICAqIFtTdHJpbmcjdG9VcHBlckNhc2VdKGh0dHBzOi8vbWRuLmlvL3RvVXBwZXJDYXNlKS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSB1cHBlciBjYXNlZCBzdHJpbmcuXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8udG9VcHBlcignLS1mb28tYmFyLS0nKTtcbiAgICAgICAgICogLy8gPT4gJy0tRk9PLUJBUi0tJ1xuICAgICAgICAgKlxuICAgICAgICAgKiBfLnRvVXBwZXIoJ2Zvb0JhcicpO1xuICAgICAgICAgKiAvLyA9PiAnRk9PQkFSJ1xuICAgICAgICAgKlxuICAgICAgICAgKiBfLnRvVXBwZXIoJ19fZm9vX2Jhcl9fJyk7XG4gICAgICAgICAqIC8vID0+ICdfX0ZPT19CQVJfXydcbiAgICAgICAgICovZnVuY3Rpb24gdG9VcHBlcih2YWx1ZSl7cmV0dXJuIHRvU3RyaW5nKHZhbHVlKS50b1VwcGVyQ2FzZSgpO30vKipcbiAgICAgICAgICogUmVtb3ZlcyBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlIG9yIHNwZWNpZmllZCBjaGFyYWN0ZXJzIGZyb20gYHN0cmluZ2AuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQHNpbmNlIDMuMC4wXG4gICAgICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gdHJpbS5cbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IFtjaGFycz13aGl0ZXNwYWNlXSBUaGUgY2hhcmFjdGVycyB0byB0cmltLlxuICAgICAgICAgKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5tYXBgLlxuICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSB0cmltbWVkIHN0cmluZy5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogXy50cmltKCcgIGFiYyAgJyk7XG4gICAgICAgICAqIC8vID0+ICdhYmMnXG4gICAgICAgICAqXG4gICAgICAgICAqIF8udHJpbSgnLV8tYWJjLV8tJywgJ18tJyk7XG4gICAgICAgICAqIC8vID0+ICdhYmMnXG4gICAgICAgICAqXG4gICAgICAgICAqIF8ubWFwKFsnICBmb28gICcsICcgIGJhciAgJ10sIF8udHJpbSk7XG4gICAgICAgICAqIC8vID0+IFsnZm9vJywgJ2JhciddXG4gICAgICAgICAqL2Z1bmN0aW9uIHRyaW0oc3RyaW5nLGNoYXJzLGd1YXJkKXtzdHJpbmc9dG9TdHJpbmcoc3RyaW5nKTtpZihzdHJpbmcmJihndWFyZHx8Y2hhcnM9PT11bmRlZmluZWQpKXtyZXR1cm4gc3RyaW5nLnJlcGxhY2UocmVUcmltLCcnKTt9aWYoIXN0cmluZ3x8IShjaGFycz1iYXNlVG9TdHJpbmcoY2hhcnMpKSl7cmV0dXJuIHN0cmluZzt9dmFyIHN0clN5bWJvbHM9c3RyaW5nVG9BcnJheShzdHJpbmcpLGNoclN5bWJvbHM9c3RyaW5nVG9BcnJheShjaGFycyksc3RhcnQ9Y2hhcnNTdGFydEluZGV4KHN0clN5bWJvbHMsY2hyU3ltYm9scyksZW5kPWNoYXJzRW5kSW5kZXgoc3RyU3ltYm9scyxjaHJTeW1ib2xzKSsxO3JldHVybiBjYXN0U2xpY2Uoc3RyU3ltYm9scyxzdGFydCxlbmQpLmpvaW4oJycpO30vKipcbiAgICAgICAgICogUmVtb3ZlcyB0cmFpbGluZyB3aGl0ZXNwYWNlIG9yIHNwZWNpZmllZCBjaGFyYWN0ZXJzIGZyb20gYHN0cmluZ2AuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQHNpbmNlIDQuMC4wXG4gICAgICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gdHJpbS5cbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IFtjaGFycz13aGl0ZXNwYWNlXSBUaGUgY2hhcmFjdGVycyB0byB0cmltLlxuICAgICAgICAgKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5tYXBgLlxuICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSB0cmltbWVkIHN0cmluZy5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogXy50cmltRW5kKCcgIGFiYyAgJyk7XG4gICAgICAgICAqIC8vID0+ICcgIGFiYydcbiAgICAgICAgICpcbiAgICAgICAgICogXy50cmltRW5kKCctXy1hYmMtXy0nLCAnXy0nKTtcbiAgICAgICAgICogLy8gPT4gJy1fLWFiYydcbiAgICAgICAgICovZnVuY3Rpb24gdHJpbUVuZChzdHJpbmcsY2hhcnMsZ3VhcmQpe3N0cmluZz10b1N0cmluZyhzdHJpbmcpO2lmKHN0cmluZyYmKGd1YXJkfHxjaGFycz09PXVuZGVmaW5lZCkpe3JldHVybiBzdHJpbmcucmVwbGFjZShyZVRyaW1FbmQsJycpO31pZighc3RyaW5nfHwhKGNoYXJzPWJhc2VUb1N0cmluZyhjaGFycykpKXtyZXR1cm4gc3RyaW5nO312YXIgc3RyU3ltYm9scz1zdHJpbmdUb0FycmF5KHN0cmluZyksZW5kPWNoYXJzRW5kSW5kZXgoc3RyU3ltYm9scyxzdHJpbmdUb0FycmF5KGNoYXJzKSkrMTtyZXR1cm4gY2FzdFNsaWNlKHN0clN5bWJvbHMsMCxlbmQpLmpvaW4oJycpO30vKipcbiAgICAgICAgICogUmVtb3ZlcyBsZWFkaW5nIHdoaXRlc3BhY2Ugb3Igc3BlY2lmaWVkIGNoYXJhY3RlcnMgZnJvbSBgc3RyaW5nYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byB0cmltLlxuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2NoYXJzPXdoaXRlc3BhY2VdIFRoZSBjaGFyYWN0ZXJzIHRvIHRyaW0uXG4gICAgICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHRyaW1tZWQgc3RyaW5nLlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLnRyaW1TdGFydCgnICBhYmMgICcpO1xuICAgICAgICAgKiAvLyA9PiAnYWJjICAnXG4gICAgICAgICAqXG4gICAgICAgICAqIF8udHJpbVN0YXJ0KCctXy1hYmMtXy0nLCAnXy0nKTtcbiAgICAgICAgICogLy8gPT4gJ2FiYy1fLSdcbiAgICAgICAgICovZnVuY3Rpb24gdHJpbVN0YXJ0KHN0cmluZyxjaGFycyxndWFyZCl7c3RyaW5nPXRvU3RyaW5nKHN0cmluZyk7aWYoc3RyaW5nJiYoZ3VhcmR8fGNoYXJzPT09dW5kZWZpbmVkKSl7cmV0dXJuIHN0cmluZy5yZXBsYWNlKHJlVHJpbVN0YXJ0LCcnKTt9aWYoIXN0cmluZ3x8IShjaGFycz1iYXNlVG9TdHJpbmcoY2hhcnMpKSl7cmV0dXJuIHN0cmluZzt9dmFyIHN0clN5bWJvbHM9c3RyaW5nVG9BcnJheShzdHJpbmcpLHN0YXJ0PWNoYXJzU3RhcnRJbmRleChzdHJTeW1ib2xzLHN0cmluZ1RvQXJyYXkoY2hhcnMpKTtyZXR1cm4gY2FzdFNsaWNlKHN0clN5bWJvbHMsc3RhcnQpLmpvaW4oJycpO30vKipcbiAgICAgICAgICogVHJ1bmNhdGVzIGBzdHJpbmdgIGlmIGl0J3MgbG9uZ2VyIHRoYW4gdGhlIGdpdmVuIG1heGltdW0gc3RyaW5nIGxlbmd0aC5cbiAgICAgICAgICogVGhlIGxhc3QgY2hhcmFjdGVycyBvZiB0aGUgdHJ1bmNhdGVkIHN0cmluZyBhcmUgcmVwbGFjZWQgd2l0aCB0aGUgb21pc3Npb25cbiAgICAgICAgICogc3RyaW5nIHdoaWNoIGRlZmF1bHRzIHRvIFwiLi4uXCIuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQHNpbmNlIDQuMC4wXG4gICAgICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gdHJ1bmNhdGUuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gVGhlIG9wdGlvbnMgb2JqZWN0LlxuICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubGVuZ3RoPTMwXSBUaGUgbWF4aW11bSBzdHJpbmcgbGVuZ3RoLlxuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMub21pc3Npb249Jy4uLiddIFRoZSBzdHJpbmcgdG8gaW5kaWNhdGUgdGV4dCBpcyBvbWl0dGVkLlxuICAgICAgICAgKiBAcGFyYW0ge1JlZ0V4cHxzdHJpbmd9IFtvcHRpb25zLnNlcGFyYXRvcl0gVGhlIHNlcGFyYXRvciBwYXR0ZXJuIHRvIHRydW5jYXRlIHRvLlxuICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSB0cnVuY2F0ZWQgc3RyaW5nLlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLnRydW5jYXRlKCdoaS1kaWRkbHktaG8gdGhlcmUsIG5laWdoYm9yaW5vJyk7XG4gICAgICAgICAqIC8vID0+ICdoaS1kaWRkbHktaG8gdGhlcmUsIG5laWdoYm8uLi4nXG4gICAgICAgICAqXG4gICAgICAgICAqIF8udHJ1bmNhdGUoJ2hpLWRpZGRseS1obyB0aGVyZSwgbmVpZ2hib3Jpbm8nLCB7XG4gICAgICAgICAqICAgJ2xlbmd0aCc6IDI0LFxuICAgICAgICAgKiAgICdzZXBhcmF0b3InOiAnICdcbiAgICAgICAgICogfSk7XG4gICAgICAgICAqIC8vID0+ICdoaS1kaWRkbHktaG8gdGhlcmUsLi4uJ1xuICAgICAgICAgKlxuICAgICAgICAgKiBfLnRydW5jYXRlKCdoaS1kaWRkbHktaG8gdGhlcmUsIG5laWdoYm9yaW5vJywge1xuICAgICAgICAgKiAgICdsZW5ndGgnOiAyNCxcbiAgICAgICAgICogICAnc2VwYXJhdG9yJzogLyw/ICsvXG4gICAgICAgICAqIH0pO1xuICAgICAgICAgKiAvLyA9PiAnaGktZGlkZGx5LWhvIHRoZXJlLi4uJ1xuICAgICAgICAgKlxuICAgICAgICAgKiBfLnRydW5jYXRlKCdoaS1kaWRkbHktaG8gdGhlcmUsIG5laWdoYm9yaW5vJywge1xuICAgICAgICAgKiAgICdvbWlzc2lvbic6ICcgWy4uLl0nXG4gICAgICAgICAqIH0pO1xuICAgICAgICAgKiAvLyA9PiAnaGktZGlkZGx5LWhvIHRoZXJlLCBuZWlnIFsuLi5dJ1xuICAgICAgICAgKi9mdW5jdGlvbiB0cnVuY2F0ZShzdHJpbmcsb3B0aW9ucyl7dmFyIGxlbmd0aD1ERUZBVUxUX1RSVU5DX0xFTkdUSCxvbWlzc2lvbj1ERUZBVUxUX1RSVU5DX09NSVNTSU9OO2lmKGlzT2JqZWN0KG9wdGlvbnMpKXt2YXIgc2VwYXJhdG9yPSdzZXBhcmF0b3InaW4gb3B0aW9ucz9vcHRpb25zLnNlcGFyYXRvcjpzZXBhcmF0b3I7bGVuZ3RoPSdsZW5ndGgnaW4gb3B0aW9ucz90b0ludGVnZXIob3B0aW9ucy5sZW5ndGgpOmxlbmd0aDtvbWlzc2lvbj0nb21pc3Npb24naW4gb3B0aW9ucz9iYXNlVG9TdHJpbmcob3B0aW9ucy5vbWlzc2lvbik6b21pc3Npb247fXN0cmluZz10b1N0cmluZyhzdHJpbmcpO3ZhciBzdHJMZW5ndGg9c3RyaW5nLmxlbmd0aDtpZihoYXNVbmljb2RlKHN0cmluZykpe3ZhciBzdHJTeW1ib2xzPXN0cmluZ1RvQXJyYXkoc3RyaW5nKTtzdHJMZW5ndGg9c3RyU3ltYm9scy5sZW5ndGg7fWlmKGxlbmd0aD49c3RyTGVuZ3RoKXtyZXR1cm4gc3RyaW5nO312YXIgZW5kPWxlbmd0aC1zdHJpbmdTaXplKG9taXNzaW9uKTtpZihlbmQ8MSl7cmV0dXJuIG9taXNzaW9uO312YXIgcmVzdWx0PXN0clN5bWJvbHM/Y2FzdFNsaWNlKHN0clN5bWJvbHMsMCxlbmQpLmpvaW4oJycpOnN0cmluZy5zbGljZSgwLGVuZCk7aWYoc2VwYXJhdG9yPT09dW5kZWZpbmVkKXtyZXR1cm4gcmVzdWx0K29taXNzaW9uO31pZihzdHJTeW1ib2xzKXtlbmQrPXJlc3VsdC5sZW5ndGgtZW5kO31pZihpc1JlZ0V4cChzZXBhcmF0b3IpKXtpZihzdHJpbmcuc2xpY2UoZW5kKS5zZWFyY2goc2VwYXJhdG9yKSl7dmFyIG1hdGNoLHN1YnN0cmluZz1yZXN1bHQ7aWYoIXNlcGFyYXRvci5nbG9iYWwpe3NlcGFyYXRvcj1SZWdFeHAoc2VwYXJhdG9yLnNvdXJjZSx0b1N0cmluZyhyZUZsYWdzLmV4ZWMoc2VwYXJhdG9yKSkrJ2cnKTt9c2VwYXJhdG9yLmxhc3RJbmRleD0wO3doaWxlKG1hdGNoPXNlcGFyYXRvci5leGVjKHN1YnN0cmluZykpe3ZhciBuZXdFbmQ9bWF0Y2guaW5kZXg7fXJlc3VsdD1yZXN1bHQuc2xpY2UoMCxuZXdFbmQ9PT11bmRlZmluZWQ/ZW5kOm5ld0VuZCk7fX1lbHNlIGlmKHN0cmluZy5pbmRleE9mKGJhc2VUb1N0cmluZyhzZXBhcmF0b3IpLGVuZCkhPWVuZCl7dmFyIGluZGV4PXJlc3VsdC5sYXN0SW5kZXhPZihzZXBhcmF0b3IpO2lmKGluZGV4Pi0xKXtyZXN1bHQ9cmVzdWx0LnNsaWNlKDAsaW5kZXgpO319cmV0dXJuIHJlc3VsdCtvbWlzc2lvbjt9LyoqXG4gICAgICAgICAqIFRoZSBpbnZlcnNlIG9mIGBfLmVzY2FwZWA7IHRoaXMgbWV0aG9kIGNvbnZlcnRzIHRoZSBIVE1MIGVudGl0aWVzXG4gICAgICAgICAqIGAmYW1wO2AsIGAmbHQ7YCwgYCZndDtgLCBgJnF1b3Q7YCwgYW5kIGAmIzM5O2AgaW4gYHN0cmluZ2AgdG9cbiAgICAgICAgICogdGhlaXIgY29ycmVzcG9uZGluZyBjaGFyYWN0ZXJzLlxuICAgICAgICAgKlxuICAgICAgICAgKiAqKk5vdGU6KiogTm8gb3RoZXIgSFRNTCBlbnRpdGllcyBhcmUgdW5lc2NhcGVkLiBUbyB1bmVzY2FwZSBhZGRpdGlvbmFsXG4gICAgICAgICAqIEhUTUwgZW50aXRpZXMgdXNlIGEgdGhpcmQtcGFydHkgbGlicmFyeSBsaWtlIFtfaGVfXShodHRwczovL210aHMuYmUvaGUpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSAwLjYuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIHVuZXNjYXBlLlxuICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSB1bmVzY2FwZWQgc3RyaW5nLlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLnVuZXNjYXBlKCdmcmVkLCBiYXJuZXksICZhbXA7IHBlYmJsZXMnKTtcbiAgICAgICAgICogLy8gPT4gJ2ZyZWQsIGJhcm5leSwgJiBwZWJibGVzJ1xuICAgICAgICAgKi9mdW5jdGlvbiB1bmVzY2FwZShzdHJpbmcpe3N0cmluZz10b1N0cmluZyhzdHJpbmcpO3JldHVybiBzdHJpbmcmJnJlSGFzRXNjYXBlZEh0bWwudGVzdChzdHJpbmcpP3N0cmluZy5yZXBsYWNlKHJlRXNjYXBlZEh0bWwsdW5lc2NhcGVIdG1sQ2hhcik6c3RyaW5nO30vKipcbiAgICAgICAgICogQ29udmVydHMgYHN0cmluZ2AsIGFzIHNwYWNlIHNlcGFyYXRlZCB3b3JkcywgdG8gdXBwZXIgY2FzZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSB1cHBlciBjYXNlZCBzdHJpbmcuXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8udXBwZXJDYXNlKCctLWZvby1iYXInKTtcbiAgICAgICAgICogLy8gPT4gJ0ZPTyBCQVInXG4gICAgICAgICAqXG4gICAgICAgICAqIF8udXBwZXJDYXNlKCdmb29CYXInKTtcbiAgICAgICAgICogLy8gPT4gJ0ZPTyBCQVInXG4gICAgICAgICAqXG4gICAgICAgICAqIF8udXBwZXJDYXNlKCdfX2Zvb19iYXJfXycpO1xuICAgICAgICAgKiAvLyA9PiAnRk9PIEJBUidcbiAgICAgICAgICovdmFyIHVwcGVyQ2FzZT1jcmVhdGVDb21wb3VuZGVyKGZ1bmN0aW9uKHJlc3VsdCx3b3JkLGluZGV4KXtyZXR1cm4gcmVzdWx0KyhpbmRleD8nICc6JycpK3dvcmQudG9VcHBlckNhc2UoKTt9KTsvKipcbiAgICAgICAqIENvbnZlcnRzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgYHN0cmluZ2AgdG8gdXBwZXIgY2FzZS5cbiAgICAgICAqXG4gICAgICAgKiBAc3RhdGljXG4gICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICogQHNpbmNlIDQuMC4wXG4gICAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICAgICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY29udmVydGVkIHN0cmluZy5cbiAgICAgICAqIEBleGFtcGxlXG4gICAgICAgKlxuICAgICAgICogXy51cHBlckZpcnN0KCdmcmVkJyk7XG4gICAgICAgKiAvLyA9PiAnRnJlZCdcbiAgICAgICAqXG4gICAgICAgKiBfLnVwcGVyRmlyc3QoJ0ZSRUQnKTtcbiAgICAgICAqIC8vID0+ICdGUkVEJ1xuICAgICAgICovdmFyIHVwcGVyRmlyc3Q9Y3JlYXRlQ2FzZUZpcnN0KCd0b1VwcGVyQ2FzZScpOy8qKlxuICAgICAgICAgKiBTcGxpdHMgYHN0cmluZ2AgaW50byBhbiBhcnJheSBvZiBpdHMgd29yZHMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQHNpbmNlIDMuMC4wXG4gICAgICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gaW5zcGVjdC5cbiAgICAgICAgICogQHBhcmFtIHtSZWdFeHB8c3RyaW5nfSBbcGF0dGVybl0gVGhlIHBhdHRlcm4gdG8gbWF0Y2ggd29yZHMuXG4gICAgICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gICAgICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgd29yZHMgb2YgYHN0cmluZ2AuXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8ud29yZHMoJ2ZyZWQsIGJhcm5leSwgJiBwZWJibGVzJyk7XG4gICAgICAgICAqIC8vID0+IFsnZnJlZCcsICdiYXJuZXknLCAncGViYmxlcyddXG4gICAgICAgICAqXG4gICAgICAgICAqIF8ud29yZHMoJ2ZyZWQsIGJhcm5leSwgJiBwZWJibGVzJywgL1teLCBdKy9nKTtcbiAgICAgICAgICogLy8gPT4gWydmcmVkJywgJ2Jhcm5leScsICcmJywgJ3BlYmJsZXMnXVxuICAgICAgICAgKi9mdW5jdGlvbiB3b3JkcyhzdHJpbmcscGF0dGVybixndWFyZCl7c3RyaW5nPXRvU3RyaW5nKHN0cmluZyk7cGF0dGVybj1ndWFyZD91bmRlZmluZWQ6cGF0dGVybjtpZihwYXR0ZXJuPT09dW5kZWZpbmVkKXtyZXR1cm4gaGFzVW5pY29kZVdvcmQoc3RyaW5nKT91bmljb2RlV29yZHMoc3RyaW5nKTphc2NpaVdvcmRzKHN0cmluZyk7fXJldHVybiBzdHJpbmcubWF0Y2gocGF0dGVybil8fFtdO30vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLy8qKlxuICAgICAgICAgKiBBdHRlbXB0cyB0byBpbnZva2UgYGZ1bmNgLCByZXR1cm5pbmcgZWl0aGVyIHRoZSByZXN1bHQgb3IgdGhlIGNhdWdodCBlcnJvclxuICAgICAgICAgKiBvYmplY3QuIEFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyBhcmUgcHJvdmlkZWQgdG8gYGZ1bmNgIHdoZW4gaXQncyBpbnZva2VkLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhdHRlbXB0LlxuICAgICAgICAgKiBAcGFyYW0gey4uLip9IFthcmdzXSBUaGUgYXJndW1lbnRzIHRvIGludm9rZSBgZnVuY2Agd2l0aC5cbiAgICAgICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGBmdW5jYCByZXN1bHQgb3IgZXJyb3Igb2JqZWN0LlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAvLyBBdm9pZCB0aHJvd2luZyBlcnJvcnMgZm9yIGludmFsaWQgc2VsZWN0b3JzLlxuICAgICAgICAgKiB2YXIgZWxlbWVudHMgPSBfLmF0dGVtcHQoZnVuY3Rpb24oc2VsZWN0b3IpIHtcbiAgICAgICAgICogICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7XG4gICAgICAgICAqIH0sICc+Xz4nKTtcbiAgICAgICAgICpcbiAgICAgICAgICogaWYgKF8uaXNFcnJvcihlbGVtZW50cykpIHtcbiAgICAgICAgICogICBlbGVtZW50cyA9IFtdO1xuICAgICAgICAgKiB9XG4gICAgICAgICAqL3ZhciBhdHRlbXB0PWJhc2VSZXN0KGZ1bmN0aW9uKGZ1bmMsYXJncyl7dHJ5e3JldHVybiBhcHBseShmdW5jLHVuZGVmaW5lZCxhcmdzKTt9Y2F0Y2goZSl7cmV0dXJuIGlzRXJyb3IoZSk/ZTpuZXcgRXJyb3IoZSk7fX0pOy8qKlxuICAgICAgICogQmluZHMgbWV0aG9kcyBvZiBhbiBvYmplY3QgdG8gdGhlIG9iamVjdCBpdHNlbGYsIG92ZXJ3cml0aW5nIHRoZSBleGlzdGluZ1xuICAgICAgICogbWV0aG9kLlxuICAgICAgICpcbiAgICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBkb2Vzbid0IHNldCB0aGUgXCJsZW5ndGhcIiBwcm9wZXJ0eSBvZiBib3VuZCBmdW5jdGlvbnMuXG4gICAgICAgKlxuICAgICAgICogQHN0YXRpY1xuICAgICAgICogQHNpbmNlIDAuMS4wXG4gICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBiaW5kIGFuZCBhc3NpZ24gdGhlIGJvdW5kIG1ldGhvZHMgdG8uXG4gICAgICAgKiBAcGFyYW0gey4uLihzdHJpbmd8c3RyaW5nW10pfSBtZXRob2ROYW1lcyBUaGUgb2JqZWN0IG1ldGhvZCBuYW1lcyB0byBiaW5kLlxuICAgICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgICAqIEBleGFtcGxlXG4gICAgICAgKlxuICAgICAgICogdmFyIHZpZXcgPSB7XG4gICAgICAgKiAgICdsYWJlbCc6ICdkb2NzJyxcbiAgICAgICAqICAgJ2NsaWNrJzogZnVuY3Rpb24oKSB7XG4gICAgICAgKiAgICAgY29uc29sZS5sb2coJ2NsaWNrZWQgJyArIHRoaXMubGFiZWwpO1xuICAgICAgICogICB9XG4gICAgICAgKiB9O1xuICAgICAgICpcbiAgICAgICAqIF8uYmluZEFsbCh2aWV3LCBbJ2NsaWNrJ10pO1xuICAgICAgICogalF1ZXJ5KGVsZW1lbnQpLm9uKCdjbGljaycsIHZpZXcuY2xpY2spO1xuICAgICAgICogLy8gPT4gTG9ncyAnY2xpY2tlZCBkb2NzJyB3aGVuIGNsaWNrZWQuXG4gICAgICAgKi92YXIgYmluZEFsbD1mbGF0UmVzdChmdW5jdGlvbihvYmplY3QsbWV0aG9kTmFtZXMpe2FycmF5RWFjaChtZXRob2ROYW1lcyxmdW5jdGlvbihrZXkpe2tleT10b0tleShrZXkpO2Jhc2VBc3NpZ25WYWx1ZShvYmplY3Qsa2V5LGJpbmQob2JqZWN0W2tleV0sb2JqZWN0KSk7fSk7cmV0dXJuIG9iamVjdDt9KTsvKipcbiAgICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGl0ZXJhdGVzIG92ZXIgYHBhaXJzYCBhbmQgaW52b2tlcyB0aGUgY29ycmVzcG9uZGluZ1xuICAgICAgICogZnVuY3Rpb24gb2YgdGhlIGZpcnN0IHByZWRpY2F0ZSB0byByZXR1cm4gdHJ1dGh5LiBUaGUgcHJlZGljYXRlLWZ1bmN0aW9uXG4gICAgICAgKiBwYWlycyBhcmUgaW52b2tlZCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBhbmQgYXJndW1lbnRzIG9mIHRoZSBjcmVhdGVkXG4gICAgICAgKiBmdW5jdGlvbi5cbiAgICAgICAqXG4gICAgICAgKiBAc3RhdGljXG4gICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICogQHNpbmNlIDQuMC4wXG4gICAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAgICogQHBhcmFtIHtBcnJheX0gcGFpcnMgVGhlIHByZWRpY2F0ZS1mdW5jdGlvbiBwYWlycy5cbiAgICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNvbXBvc2l0ZSBmdW5jdGlvbi5cbiAgICAgICAqIEBleGFtcGxlXG4gICAgICAgKlxuICAgICAgICogdmFyIGZ1bmMgPSBfLmNvbmQoW1xuICAgICAgICogICBbXy5tYXRjaGVzKHsgJ2EnOiAxIH0pLCAgICAgICAgICAgXy5jb25zdGFudCgnbWF0Y2hlcyBBJyldLFxuICAgICAgICogICBbXy5jb25mb3Jtcyh7ICdiJzogXy5pc051bWJlciB9KSwgXy5jb25zdGFudCgnbWF0Y2hlcyBCJyldLFxuICAgICAgICogICBbXy5zdHViVHJ1ZSwgICAgICAgICAgICAgICAgICAgICAgXy5jb25zdGFudCgnbm8gbWF0Y2gnKV1cbiAgICAgICAqIF0pO1xuICAgICAgICpcbiAgICAgICAqIGZ1bmMoeyAnYSc6IDEsICdiJzogMiB9KTtcbiAgICAgICAqIC8vID0+ICdtYXRjaGVzIEEnXG4gICAgICAgKlxuICAgICAgICogZnVuYyh7ICdhJzogMCwgJ2InOiAxIH0pO1xuICAgICAgICogLy8gPT4gJ21hdGNoZXMgQidcbiAgICAgICAqXG4gICAgICAgKiBmdW5jKHsgJ2EnOiAnMScsICdiJzogJzInIH0pO1xuICAgICAgICogLy8gPT4gJ25vIG1hdGNoJ1xuICAgICAgICovZnVuY3Rpb24gY29uZChwYWlycyl7dmFyIGxlbmd0aD1wYWlycz09bnVsbD8wOnBhaXJzLmxlbmd0aCx0b0l0ZXJhdGVlPWdldEl0ZXJhdGVlKCk7cGFpcnM9IWxlbmd0aD9bXTphcnJheU1hcChwYWlycyxmdW5jdGlvbihwYWlyKXtpZih0eXBlb2YgcGFpclsxXSE9PSdmdW5jdGlvbicpe3Rocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTt9cmV0dXJuW3RvSXRlcmF0ZWUocGFpclswXSkscGFpclsxXV07fSk7cmV0dXJuIGJhc2VSZXN0KGZ1bmN0aW9uKGFyZ3Mpe3ZhciBpbmRleD0tMTt3aGlsZSgrK2luZGV4PGxlbmd0aCl7dmFyIHBhaXI9cGFpcnNbaW5kZXhdO2lmKGFwcGx5KHBhaXJbMF0sdGhpcyxhcmdzKSl7cmV0dXJuIGFwcGx5KHBhaXJbMV0sdGhpcyxhcmdzKTt9fX0pO30vKipcbiAgICAgICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyB0aGUgcHJlZGljYXRlIHByb3BlcnRpZXMgb2YgYHNvdXJjZWAgd2l0aFxuICAgICAgICAgKiB0aGUgY29ycmVzcG9uZGluZyBwcm9wZXJ0eSB2YWx1ZXMgb2YgYSBnaXZlbiBvYmplY3QsIHJldHVybmluZyBgdHJ1ZWAgaWZcbiAgICAgICAgICogYWxsIHByZWRpY2F0ZXMgcmV0dXJuIHRydXRoeSwgZWxzZSBgZmFsc2VgLlxuICAgICAgICAgKlxuICAgICAgICAgKiAqKk5vdGU6KiogVGhlIGNyZWF0ZWQgZnVuY3Rpb24gaXMgZXF1aXZhbGVudCB0byBgXy5jb25mb3Jtc1RvYCB3aXRoXG4gICAgICAgICAqIGBzb3VyY2VgIHBhcnRpYWxseSBhcHBsaWVkLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3Qgb2YgcHJvcGVydHkgcHJlZGljYXRlcyB0byBjb25mb3JtIHRvLlxuICAgICAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzcGVjIGZ1bmN0aW9uLlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiB2YXIgb2JqZWN0cyA9IFtcbiAgICAgICAgICogICB7ICdhJzogMiwgJ2InOiAxIH0sXG4gICAgICAgICAqICAgeyAnYSc6IDEsICdiJzogMiB9XG4gICAgICAgICAqIF07XG4gICAgICAgICAqXG4gICAgICAgICAqIF8uZmlsdGVyKG9iamVjdHMsIF8uY29uZm9ybXMoeyAnYic6IGZ1bmN0aW9uKG4pIHsgcmV0dXJuIG4gPiAxOyB9IH0pKTtcbiAgICAgICAgICogLy8gPT4gW3sgJ2EnOiAxLCAnYic6IDIgfV1cbiAgICAgICAgICovZnVuY3Rpb24gY29uZm9ybXMoc291cmNlKXtyZXR1cm4gYmFzZUNvbmZvcm1zKGJhc2VDbG9uZShzb3VyY2UsQ0xPTkVfREVFUF9GTEFHKSk7fS8qKlxuICAgICAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGB2YWx1ZWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQHNpbmNlIDIuNC4wXG4gICAgICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHJldHVybiBmcm9tIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNvbnN0YW50IGZ1bmN0aW9uLlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiB2YXIgb2JqZWN0cyA9IF8udGltZXMoMiwgXy5jb25zdGFudCh7ICdhJzogMSB9KSk7XG4gICAgICAgICAqXG4gICAgICAgICAqIGNvbnNvbGUubG9nKG9iamVjdHMpO1xuICAgICAgICAgKiAvLyA9PiBbeyAnYSc6IDEgfSwgeyAnYSc6IDEgfV1cbiAgICAgICAgICpcbiAgICAgICAgICogY29uc29sZS5sb2cob2JqZWN0c1swXSA9PT0gb2JqZWN0c1sxXSk7XG4gICAgICAgICAqIC8vID0+IHRydWVcbiAgICAgICAgICovZnVuY3Rpb24gY29uc3RhbnQodmFsdWUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB2YWx1ZTt9O30vKipcbiAgICAgICAgICogQ2hlY2tzIGB2YWx1ZWAgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSBkZWZhdWx0IHZhbHVlIHNob3VsZCBiZSByZXR1cm5lZCBpblxuICAgICAgICAgKiBpdHMgcGxhY2UuIFRoZSBgZGVmYXVsdFZhbHVlYCBpcyByZXR1cm5lZCBpZiBgdmFsdWVgIGlzIGBOYU5gLCBgbnVsbGAsXG4gICAgICAgICAqIG9yIGB1bmRlZmluZWRgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSA0LjE0LjBcbiAgICAgICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gZGVmYXVsdFZhbHVlIFRoZSBkZWZhdWx0IHZhbHVlLlxuICAgICAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzb2x2ZWQgdmFsdWUuXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8uZGVmYXVsdFRvKDEsIDEwKTtcbiAgICAgICAgICogLy8gPT4gMVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLmRlZmF1bHRUbyh1bmRlZmluZWQsIDEwKTtcbiAgICAgICAgICogLy8gPT4gMTBcbiAgICAgICAgICovZnVuY3Rpb24gZGVmYXVsdFRvKHZhbHVlLGRlZmF1bHRWYWx1ZSl7cmV0dXJuIHZhbHVlPT1udWxsfHx2YWx1ZSE9PXZhbHVlP2RlZmF1bHRWYWx1ZTp2YWx1ZTt9LyoqXG4gICAgICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnZva2luZyB0aGUgZ2l2ZW4gZnVuY3Rpb25zXG4gICAgICAgICAqIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIHRoZSBjcmVhdGVkIGZ1bmN0aW9uLCB3aGVyZSBlYWNoIHN1Y2Nlc3NpdmVcbiAgICAgICAgICogaW52b2NhdGlvbiBpcyBzdXBwbGllZCB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBwcmV2aW91cy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgICAgICogQHBhcmFtIHsuLi4oRnVuY3Rpb258RnVuY3Rpb25bXSl9IFtmdW5jc10gVGhlIGZ1bmN0aW9ucyB0byBpbnZva2UuXG4gICAgICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNvbXBvc2l0ZSBmdW5jdGlvbi5cbiAgICAgICAgICogQHNlZSBfLmZsb3dSaWdodFxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiBmdW5jdGlvbiBzcXVhcmUobikge1xuICAgICAgICAgKiAgIHJldHVybiBuICogbjtcbiAgICAgICAgICogfVxuICAgICAgICAgKlxuICAgICAgICAgKiB2YXIgYWRkU3F1YXJlID0gXy5mbG93KFtfLmFkZCwgc3F1YXJlXSk7XG4gICAgICAgICAqIGFkZFNxdWFyZSgxLCAyKTtcbiAgICAgICAgICogLy8gPT4gOVxuICAgICAgICAgKi92YXIgZmxvdz1jcmVhdGVGbG93KCk7LyoqXG4gICAgICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZmxvd2AgZXhjZXB0IHRoYXQgaXQgY3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXRcbiAgICAgICAgICogaW52b2tlcyB0aGUgZ2l2ZW4gZnVuY3Rpb25zIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgICAgICogQHBhcmFtIHsuLi4oRnVuY3Rpb258RnVuY3Rpb25bXSl9IFtmdW5jc10gVGhlIGZ1bmN0aW9ucyB0byBpbnZva2UuXG4gICAgICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNvbXBvc2l0ZSBmdW5jdGlvbi5cbiAgICAgICAgICogQHNlZSBfLmZsb3dcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogZnVuY3Rpb24gc3F1YXJlKG4pIHtcbiAgICAgICAgICogICByZXR1cm4gbiAqIG47XG4gICAgICAgICAqIH1cbiAgICAgICAgICpcbiAgICAgICAgICogdmFyIGFkZFNxdWFyZSA9IF8uZmxvd1JpZ2h0KFtzcXVhcmUsIF8uYWRkXSk7XG4gICAgICAgICAqIGFkZFNxdWFyZSgxLCAyKTtcbiAgICAgICAgICogLy8gPT4gOVxuICAgICAgICAgKi92YXIgZmxvd1JpZ2h0PWNyZWF0ZUZsb3codHJ1ZSk7LyoqXG4gICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGZpcnN0IGFyZ3VtZW50IGl0IHJlY2VpdmVzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAgICAgKiBAcGFyYW0geyp9IHZhbHVlIEFueSB2YWx1ZS5cbiAgICAgICAgICogQHJldHVybnMgeyp9IFJldHVybnMgYHZhbHVlYC5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gICAgICAgICAqXG4gICAgICAgICAqIGNvbnNvbGUubG9nKF8uaWRlbnRpdHkob2JqZWN0KSA9PT0gb2JqZWN0KTtcbiAgICAgICAgICogLy8gPT4gdHJ1ZVxuICAgICAgICAgKi9mdW5jdGlvbiBpZGVudGl0eSh2YWx1ZSl7cmV0dXJuIHZhbHVlO30vKipcbiAgICAgICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2Agd2l0aCB0aGUgYXJndW1lbnRzIG9mIHRoZSBjcmVhdGVkXG4gICAgICAgICAqIGZ1bmN0aW9uLiBJZiBgZnVuY2AgaXMgYSBwcm9wZXJ0eSBuYW1lLCB0aGUgY3JlYXRlZCBmdW5jdGlvbiByZXR1cm5zIHRoZVxuICAgICAgICAgKiBwcm9wZXJ0eSB2YWx1ZSBmb3IgYSBnaXZlbiBlbGVtZW50LiBJZiBgZnVuY2AgaXMgYW4gYXJyYXkgb3Igb2JqZWN0LCB0aGVcbiAgICAgICAgICogY3JlYXRlZCBmdW5jdGlvbiByZXR1cm5zIGB0cnVlYCBmb3IgZWxlbWVudHMgdGhhdCBjb250YWluIHRoZSBlcXVpdmFsZW50XG4gICAgICAgICAqIHNvdXJjZSBwcm9wZXJ0aWVzLCBvdGhlcndpc2UgaXQgcmV0dXJucyBgZmFsc2VgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAgICAgKiBAcGFyYW0geyp9IFtmdW5jPV8uaWRlbnRpdHldIFRoZSB2YWx1ZSB0byBjb252ZXJ0IHRvIGEgY2FsbGJhY2suXG4gICAgICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgY2FsbGJhY2suXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIHZhciB1c2VycyA9IFtcbiAgICAgICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScsICdhZ2UnOiAzNiwgJ2FjdGl2ZSc6IHRydWUgfSxcbiAgICAgICAgICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICdhZ2UnOiA0MCwgJ2FjdGl2ZSc6IGZhbHNlIH1cbiAgICAgICAgICogXTtcbiAgICAgICAgICpcbiAgICAgICAgICogLy8gVGhlIGBfLm1hdGNoZXNgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgICAgICogXy5maWx0ZXIodXNlcnMsIF8uaXRlcmF0ZWUoeyAndXNlcic6ICdiYXJuZXknLCAnYWN0aXZlJzogdHJ1ZSB9KSk7XG4gICAgICAgICAqIC8vID0+IFt7ICd1c2VyJzogJ2Jhcm5leScsICdhZ2UnOiAzNiwgJ2FjdGl2ZSc6IHRydWUgfV1cbiAgICAgICAgICpcbiAgICAgICAgICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAgICAgKiBfLmZpbHRlcih1c2VycywgXy5pdGVyYXRlZShbJ3VzZXInLCAnZnJlZCddKSk7XG4gICAgICAgICAqIC8vID0+IFt7ICd1c2VyJzogJ2ZyZWQnLCAnYWdlJzogNDAgfV1cbiAgICAgICAgICpcbiAgICAgICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICAgICAqIF8ubWFwKHVzZXJzLCBfLml0ZXJhdGVlKCd1c2VyJykpO1xuICAgICAgICAgKiAvLyA9PiBbJ2Jhcm5leScsICdmcmVkJ11cbiAgICAgICAgICpcbiAgICAgICAgICogLy8gQ3JlYXRlIGN1c3RvbSBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgICAgICAgKiBfLml0ZXJhdGVlID0gXy53cmFwKF8uaXRlcmF0ZWUsIGZ1bmN0aW9uKGl0ZXJhdGVlLCBmdW5jKSB7XG4gICAgICAgICAqICAgcmV0dXJuICFfLmlzUmVnRXhwKGZ1bmMpID8gaXRlcmF0ZWUoZnVuYykgOiBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICAgICAgICogICAgIHJldHVybiBmdW5jLnRlc3Qoc3RyaW5nKTtcbiAgICAgICAgICogICB9O1xuICAgICAgICAgKiB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogXy5maWx0ZXIoWydhYmMnLCAnZGVmJ10sIC9lZi8pO1xuICAgICAgICAgKiAvLyA9PiBbJ2RlZiddXG4gICAgICAgICAqL2Z1bmN0aW9uIGl0ZXJhdGVlKGZ1bmMpe3JldHVybiBiYXNlSXRlcmF0ZWUodHlwZW9mIGZ1bmM9PT0nZnVuY3Rpb24nP2Z1bmM6YmFzZUNsb25lKGZ1bmMsQ0xPTkVfREVFUF9GTEFHKSk7fS8qKlxuICAgICAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBwZXJmb3JtcyBhIHBhcnRpYWwgZGVlcCBjb21wYXJpc29uIGJldHdlZW4gYSBnaXZlblxuICAgICAgICAgKiBvYmplY3QgYW5kIGBzb3VyY2VgLCByZXR1cm5pbmcgYHRydWVgIGlmIHRoZSBnaXZlbiBvYmplY3QgaGFzIGVxdWl2YWxlbnRcbiAgICAgICAgICogcHJvcGVydHkgdmFsdWVzLCBlbHNlIGBmYWxzZWAuXG4gICAgICAgICAqXG4gICAgICAgICAqICoqTm90ZToqKiBUaGUgY3JlYXRlZCBmdW5jdGlvbiBpcyBlcXVpdmFsZW50IHRvIGBfLmlzTWF0Y2hgIHdpdGggYHNvdXJjZWBcbiAgICAgICAgICogcGFydGlhbGx5IGFwcGxpZWQuXG4gICAgICAgICAqXG4gICAgICAgICAqIFBhcnRpYWwgY29tcGFyaXNvbnMgd2lsbCBtYXRjaCBlbXB0eSBhcnJheSBhbmQgZW1wdHkgb2JqZWN0IGBzb3VyY2VgXG4gICAgICAgICAqIHZhbHVlcyBhZ2FpbnN0IGFueSBhcnJheSBvciBvYmplY3QgdmFsdWUsIHJlc3BlY3RpdmVseS4gU2VlIGBfLmlzRXF1YWxgXG4gICAgICAgICAqIGZvciBhIGxpc3Qgb2Ygc3VwcG9ydGVkIHZhbHVlIGNvbXBhcmlzb25zLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3Qgb2YgcHJvcGVydHkgdmFsdWVzIHRvIG1hdGNoLlxuICAgICAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzcGVjIGZ1bmN0aW9uLlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiB2YXIgb2JqZWN0cyA9IFtcbiAgICAgICAgICogICB7ICdhJzogMSwgJ2InOiAyLCAnYyc6IDMgfSxcbiAgICAgICAgICogICB7ICdhJzogNCwgJ2InOiA1LCAnYyc6IDYgfVxuICAgICAgICAgKiBdO1xuICAgICAgICAgKlxuICAgICAgICAgKiBfLmZpbHRlcihvYmplY3RzLCBfLm1hdGNoZXMoeyAnYSc6IDQsICdjJzogNiB9KSk7XG4gICAgICAgICAqIC8vID0+IFt7ICdhJzogNCwgJ2InOiA1LCAnYyc6IDYgfV1cbiAgICAgICAgICovZnVuY3Rpb24gbWF0Y2hlcyhzb3VyY2Upe3JldHVybiBiYXNlTWF0Y2hlcyhiYXNlQ2xvbmUoc291cmNlLENMT05FX0RFRVBfRkxBRykpO30vKipcbiAgICAgICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcGVyZm9ybXMgYSBwYXJ0aWFsIGRlZXAgY29tcGFyaXNvbiBiZXR3ZWVuIHRoZVxuICAgICAgICAgKiB2YWx1ZSBhdCBgcGF0aGAgb2YgYSBnaXZlbiBvYmplY3QgdG8gYHNyY1ZhbHVlYCwgcmV0dXJuaW5nIGB0cnVlYCBpZiB0aGVcbiAgICAgICAgICogb2JqZWN0IHZhbHVlIGlzIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAgICAgICAgICpcbiAgICAgICAgICogKipOb3RlOioqIFBhcnRpYWwgY29tcGFyaXNvbnMgd2lsbCBtYXRjaCBlbXB0eSBhcnJheSBhbmQgZW1wdHkgb2JqZWN0XG4gICAgICAgICAqIGBzcmNWYWx1ZWAgdmFsdWVzIGFnYWluc3QgYW55IGFycmF5IG9yIG9iamVjdCB2YWx1ZSwgcmVzcGVjdGl2ZWx5LiBTZWVcbiAgICAgICAgICogYF8uaXNFcXVhbGAgZm9yIGEgbGlzdCBvZiBzdXBwb3J0ZWQgdmFsdWUgY29tcGFyaXNvbnMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQHNpbmNlIDMuMi4wXG4gICAgICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gc3JjVmFsdWUgVGhlIHZhbHVlIHRvIG1hdGNoLlxuICAgICAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzcGVjIGZ1bmN0aW9uLlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiB2YXIgb2JqZWN0cyA9IFtcbiAgICAgICAgICogICB7ICdhJzogMSwgJ2InOiAyLCAnYyc6IDMgfSxcbiAgICAgICAgICogICB7ICdhJzogNCwgJ2InOiA1LCAnYyc6IDYgfVxuICAgICAgICAgKiBdO1xuICAgICAgICAgKlxuICAgICAgICAgKiBfLmZpbmQob2JqZWN0cywgXy5tYXRjaGVzUHJvcGVydHkoJ2EnLCA0KSk7XG4gICAgICAgICAqIC8vID0+IHsgJ2EnOiA0LCAnYic6IDUsICdjJzogNiB9XG4gICAgICAgICAqL2Z1bmN0aW9uIG1hdGNoZXNQcm9wZXJ0eShwYXRoLHNyY1ZhbHVlKXtyZXR1cm4gYmFzZU1hdGNoZXNQcm9wZXJ0eShwYXRoLGJhc2VDbG9uZShzcmNWYWx1ZSxDTE9ORV9ERUVQX0ZMQUcpKTt9LyoqXG4gICAgICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgdGhlIG1ldGhvZCBhdCBgcGF0aGAgb2YgYSBnaXZlbiBvYmplY3QuXG4gICAgICAgICAqIEFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyBhcmUgcHJvdmlkZWQgdG8gdGhlIGludm9rZWQgbWV0aG9kLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSAzLjcuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgbWV0aG9kIHRvIGludm9rZS5cbiAgICAgICAgICogQHBhcmFtIHsuLi4qfSBbYXJnc10gVGhlIGFyZ3VtZW50cyB0byBpbnZva2UgdGhlIG1ldGhvZCB3aXRoLlxuICAgICAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBpbnZva2VyIGZ1bmN0aW9uLlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiB2YXIgb2JqZWN0cyA9IFtcbiAgICAgICAgICogICB7ICdhJzogeyAnYic6IF8uY29uc3RhbnQoMikgfSB9LFxuICAgICAgICAgKiAgIHsgJ2EnOiB7ICdiJzogXy5jb25zdGFudCgxKSB9IH1cbiAgICAgICAgICogXTtcbiAgICAgICAgICpcbiAgICAgICAgICogXy5tYXAob2JqZWN0cywgXy5tZXRob2QoJ2EuYicpKTtcbiAgICAgICAgICogLy8gPT4gWzIsIDFdXG4gICAgICAgICAqXG4gICAgICAgICAqIF8ubWFwKG9iamVjdHMsIF8ubWV0aG9kKFsnYScsICdiJ10pKTtcbiAgICAgICAgICogLy8gPT4gWzIsIDFdXG4gICAgICAgICAqL3ZhciBtZXRob2Q9YmFzZVJlc3QoZnVuY3Rpb24ocGF0aCxhcmdzKXtyZXR1cm4gZnVuY3Rpb24ob2JqZWN0KXtyZXR1cm4gYmFzZUludm9rZShvYmplY3QscGF0aCxhcmdzKTt9O30pOy8qKlxuICAgICAgICogVGhlIG9wcG9zaXRlIG9mIGBfLm1ldGhvZGA7IHRoaXMgbWV0aG9kIGNyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXNcbiAgICAgICAqIHRoZSBtZXRob2QgYXQgYSBnaXZlbiBwYXRoIG9mIGBvYmplY3RgLiBBbnkgYWRkaXRpb25hbCBhcmd1bWVudHMgYXJlXG4gICAgICAgKiBwcm92aWRlZCB0byB0aGUgaW52b2tlZCBtZXRob2QuXG4gICAgICAgKlxuICAgICAgICogQHN0YXRpY1xuICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAqIEBzaW5jZSAzLjcuMFxuICAgICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgICAqIEBwYXJhbSB7Li4uKn0gW2FyZ3NdIFRoZSBhcmd1bWVudHMgdG8gaW52b2tlIHRoZSBtZXRob2Qgd2l0aC5cbiAgICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGludm9rZXIgZnVuY3Rpb24uXG4gICAgICAgKiBAZXhhbXBsZVxuICAgICAgICpcbiAgICAgICAqIHZhciBhcnJheSA9IF8udGltZXMoMywgXy5jb25zdGFudCksXG4gICAgICAgKiAgICAgb2JqZWN0ID0geyAnYSc6IGFycmF5LCAnYic6IGFycmF5LCAnYyc6IGFycmF5IH07XG4gICAgICAgKlxuICAgICAgICogXy5tYXAoWydhWzJdJywgJ2NbMF0nXSwgXy5tZXRob2RPZihvYmplY3QpKTtcbiAgICAgICAqIC8vID0+IFsyLCAwXVxuICAgICAgICpcbiAgICAgICAqIF8ubWFwKFtbJ2EnLCAnMiddLCBbJ2MnLCAnMCddXSwgXy5tZXRob2RPZihvYmplY3QpKTtcbiAgICAgICAqIC8vID0+IFsyLCAwXVxuICAgICAgICovdmFyIG1ldGhvZE9mPWJhc2VSZXN0KGZ1bmN0aW9uKG9iamVjdCxhcmdzKXtyZXR1cm4gZnVuY3Rpb24ocGF0aCl7cmV0dXJuIGJhc2VJbnZva2Uob2JqZWN0LHBhdGgsYXJncyk7fTt9KTsvKipcbiAgICAgICAqIEFkZHMgYWxsIG93biBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBmdW5jdGlvbiBwcm9wZXJ0aWVzIG9mIGEgc291cmNlXG4gICAgICAgKiBvYmplY3QgdG8gdGhlIGRlc3RpbmF0aW9uIG9iamVjdC4gSWYgYG9iamVjdGAgaXMgYSBmdW5jdGlvbiwgdGhlbiBtZXRob2RzXG4gICAgICAgKiBhcmUgYWRkZWQgdG8gaXRzIHByb3RvdHlwZSBhcyB3ZWxsLlxuICAgICAgICpcbiAgICAgICAqICoqTm90ZToqKiBVc2UgYF8ucnVuSW5Db250ZXh0YCB0byBjcmVhdGUgYSBwcmlzdGluZSBgbG9kYXNoYCBmdW5jdGlvbiB0b1xuICAgICAgICogYXZvaWQgY29uZmxpY3RzIGNhdXNlZCBieSBtb2RpZnlpbmcgdGhlIG9yaWdpbmFsLlxuICAgICAgICpcbiAgICAgICAqIEBzdGF0aWNcbiAgICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufE9iamVjdH0gW29iamVjdD1sb2Rhc2hdIFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gICAgICAgKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3Qgb2YgZnVuY3Rpb25zIHRvIGFkZC5cbiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gVGhlIG9wdGlvbnMgb2JqZWN0LlxuICAgICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5jaGFpbj10cnVlXSBTcGVjaWZ5IHdoZXRoZXIgbWl4aW5zIGFyZSBjaGFpbmFibGUuXG4gICAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb258T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAgICogQGV4YW1wbGVcbiAgICAgICAqXG4gICAgICAgKiBmdW5jdGlvbiB2b3dlbHMoc3RyaW5nKSB7XG4gICAgICAgKiAgIHJldHVybiBfLmZpbHRlcihzdHJpbmcsIGZ1bmN0aW9uKHYpIHtcbiAgICAgICAqICAgICByZXR1cm4gL1thZWlvdV0vaS50ZXN0KHYpO1xuICAgICAgICogICB9KTtcbiAgICAgICAqIH1cbiAgICAgICAqXG4gICAgICAgKiBfLm1peGluKHsgJ3Zvd2Vscyc6IHZvd2VscyB9KTtcbiAgICAgICAqIF8udm93ZWxzKCdmcmVkJyk7XG4gICAgICAgKiAvLyA9PiBbJ2UnXVxuICAgICAgICpcbiAgICAgICAqIF8oJ2ZyZWQnKS52b3dlbHMoKS52YWx1ZSgpO1xuICAgICAgICogLy8gPT4gWydlJ11cbiAgICAgICAqXG4gICAgICAgKiBfLm1peGluKHsgJ3Zvd2Vscyc6IHZvd2VscyB9LCB7ICdjaGFpbic6IGZhbHNlIH0pO1xuICAgICAgICogXygnZnJlZCcpLnZvd2VscygpO1xuICAgICAgICogLy8gPT4gWydlJ11cbiAgICAgICAqL2Z1bmN0aW9uIG1peGluKG9iamVjdCxzb3VyY2Usb3B0aW9ucyl7dmFyIHByb3BzPWtleXMoc291cmNlKSxtZXRob2ROYW1lcz1iYXNlRnVuY3Rpb25zKHNvdXJjZSxwcm9wcyk7aWYob3B0aW9ucz09bnVsbCYmIShpc09iamVjdChzb3VyY2UpJiYobWV0aG9kTmFtZXMubGVuZ3RofHwhcHJvcHMubGVuZ3RoKSkpe29wdGlvbnM9c291cmNlO3NvdXJjZT1vYmplY3Q7b2JqZWN0PXRoaXM7bWV0aG9kTmFtZXM9YmFzZUZ1bmN0aW9ucyhzb3VyY2Usa2V5cyhzb3VyY2UpKTt9dmFyIGNoYWluPSEoaXNPYmplY3Qob3B0aW9ucykmJidjaGFpbidpbiBvcHRpb25zKXx8ISFvcHRpb25zLmNoYWluLGlzRnVuYz1pc0Z1bmN0aW9uKG9iamVjdCk7YXJyYXlFYWNoKG1ldGhvZE5hbWVzLGZ1bmN0aW9uKG1ldGhvZE5hbWUpe3ZhciBmdW5jPXNvdXJjZVttZXRob2ROYW1lXTtvYmplY3RbbWV0aG9kTmFtZV09ZnVuYztpZihpc0Z1bmMpe29iamVjdC5wcm90b3R5cGVbbWV0aG9kTmFtZV09ZnVuY3Rpb24oKXt2YXIgY2hhaW5BbGw9dGhpcy5fX2NoYWluX187aWYoY2hhaW58fGNoYWluQWxsKXt2YXIgcmVzdWx0PW9iamVjdCh0aGlzLl9fd3JhcHBlZF9fKSxhY3Rpb25zPXJlc3VsdC5fX2FjdGlvbnNfXz1jb3B5QXJyYXkodGhpcy5fX2FjdGlvbnNfXyk7YWN0aW9ucy5wdXNoKHtmdW5jOmZ1bmMsYXJnczphcmd1bWVudHMsdGhpc0FyZzpvYmplY3R9KTtyZXN1bHQuX19jaGFpbl9fPWNoYWluQWxsO3JldHVybiByZXN1bHQ7fXJldHVybiBmdW5jLmFwcGx5KG9iamVjdCxhcnJheVB1c2goW3RoaXMudmFsdWUoKV0sYXJndW1lbnRzKSk7fTt9fSk7cmV0dXJuIG9iamVjdDt9LyoqXG4gICAgICAgICAqIFJldmVydHMgdGhlIGBfYCB2YXJpYWJsZSB0byBpdHMgcHJldmlvdXMgdmFsdWUgYW5kIHJldHVybnMgYSByZWZlcmVuY2UgdG9cbiAgICAgICAgICogdGhlIGBsb2Rhc2hgIGZ1bmN0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIGBsb2Rhc2hgIGZ1bmN0aW9uLlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiB2YXIgbG9kYXNoID0gXy5ub0NvbmZsaWN0KCk7XG4gICAgICAgICAqL2Z1bmN0aW9uIG5vQ29uZmxpY3QoKXtpZihyb290Ll89PT10aGlzKXtyb290Ll89b2xkRGFzaDt9cmV0dXJuIHRoaXM7fS8qKlxuICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGB1bmRlZmluZWRgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSAyLjMuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLnRpbWVzKDIsIF8ubm9vcCk7XG4gICAgICAgICAqIC8vID0+IFt1bmRlZmluZWQsIHVuZGVmaW5lZF1cbiAgICAgICAgICovZnVuY3Rpb24gbm9vcCgpe30vLyBObyBvcGVyYXRpb24gcGVyZm9ybWVkLlxuLyoqXG4gICAgICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGdldHMgdGhlIGFyZ3VtZW50IGF0IGluZGV4IGBuYC4gSWYgYG5gIGlzIG5lZ2F0aXZlLFxuICAgICAgICAgKiB0aGUgbnRoIGFyZ3VtZW50IGZyb20gdGhlIGVuZCBpcyByZXR1cm5lZC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IFtuPTBdIFRoZSBpbmRleCBvZiB0aGUgYXJndW1lbnQgdG8gcmV0dXJuLlxuICAgICAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBwYXNzLXRocnUgZnVuY3Rpb24uXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIHZhciBmdW5jID0gXy5udGhBcmcoMSk7XG4gICAgICAgICAqIGZ1bmMoJ2EnLCAnYicsICdjJywgJ2QnKTtcbiAgICAgICAgICogLy8gPT4gJ2InXG4gICAgICAgICAqXG4gICAgICAgICAqIHZhciBmdW5jID0gXy5udGhBcmcoLTIpO1xuICAgICAgICAgKiBmdW5jKCdhJywgJ2InLCAnYycsICdkJyk7XG4gICAgICAgICAqIC8vID0+ICdjJ1xuICAgICAgICAgKi9mdW5jdGlvbiBudGhBcmcobil7bj10b0ludGVnZXIobik7cmV0dXJuIGJhc2VSZXN0KGZ1bmN0aW9uKGFyZ3Mpe3JldHVybiBiYXNlTnRoKGFyZ3Msbik7fSk7fS8qKlxuICAgICAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBpdGVyYXRlZXNgIHdpdGggdGhlIGFyZ3VtZW50cyBpdCByZWNlaXZlc1xuICAgICAgICAgKiBhbmQgcmV0dXJucyB0aGVpciByZXN1bHRzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAgICAgKiBAcGFyYW0gey4uLihGdW5jdGlvbnxGdW5jdGlvbltdKX0gW2l0ZXJhdGVlcz1bXy5pZGVudGl0eV1dXG4gICAgICAgICAqICBUaGUgaXRlcmF0ZWVzIHRvIGludm9rZS5cbiAgICAgICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIHZhciBmdW5jID0gXy5vdmVyKFtNYXRoLm1heCwgTWF0aC5taW5dKTtcbiAgICAgICAgICpcbiAgICAgICAgICogZnVuYygxLCAyLCAzLCA0KTtcbiAgICAgICAgICogLy8gPT4gWzQsIDFdXG4gICAgICAgICAqL3ZhciBvdmVyPWNyZWF0ZU92ZXIoYXJyYXlNYXApOy8qKlxuICAgICAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBjaGVja3MgaWYgKiphbGwqKiBvZiB0aGUgYHByZWRpY2F0ZXNgIHJldHVyblxuICAgICAgICAgKiB0cnV0aHkgd2hlbiBpbnZva2VkIHdpdGggdGhlIGFyZ3VtZW50cyBpdCByZWNlaXZlcy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgICAgICogQHBhcmFtIHsuLi4oRnVuY3Rpb258RnVuY3Rpb25bXSl9IFtwcmVkaWNhdGVzPVtfLmlkZW50aXR5XV1cbiAgICAgICAgICogIFRoZSBwcmVkaWNhdGVzIHRvIGNoZWNrLlxuICAgICAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogdmFyIGZ1bmMgPSBfLm92ZXJFdmVyeShbQm9vbGVhbiwgaXNGaW5pdGVdKTtcbiAgICAgICAgICpcbiAgICAgICAgICogZnVuYygnMScpO1xuICAgICAgICAgKiAvLyA9PiB0cnVlXG4gICAgICAgICAqXG4gICAgICAgICAqIGZ1bmMobnVsbCk7XG4gICAgICAgICAqIC8vID0+IGZhbHNlXG4gICAgICAgICAqXG4gICAgICAgICAqIGZ1bmMoTmFOKTtcbiAgICAgICAgICogLy8gPT4gZmFsc2VcbiAgICAgICAgICovdmFyIG92ZXJFdmVyeT1jcmVhdGVPdmVyKGFycmF5RXZlcnkpOy8qKlxuICAgICAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBjaGVja3MgaWYgKiphbnkqKiBvZiB0aGUgYHByZWRpY2F0ZXNgIHJldHVyblxuICAgICAgICAgKiB0cnV0aHkgd2hlbiBpbnZva2VkIHdpdGggdGhlIGFyZ3VtZW50cyBpdCByZWNlaXZlcy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgICAgICogQHBhcmFtIHsuLi4oRnVuY3Rpb258RnVuY3Rpb25bXSl9IFtwcmVkaWNhdGVzPVtfLmlkZW50aXR5XV1cbiAgICAgICAgICogIFRoZSBwcmVkaWNhdGVzIHRvIGNoZWNrLlxuICAgICAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogdmFyIGZ1bmMgPSBfLm92ZXJTb21lKFtCb29sZWFuLCBpc0Zpbml0ZV0pO1xuICAgICAgICAgKlxuICAgICAgICAgKiBmdW5jKCcxJyk7XG4gICAgICAgICAqIC8vID0+IHRydWVcbiAgICAgICAgICpcbiAgICAgICAgICogZnVuYyhudWxsKTtcbiAgICAgICAgICogLy8gPT4gdHJ1ZVxuICAgICAgICAgKlxuICAgICAgICAgKiBmdW5jKE5hTik7XG4gICAgICAgICAqIC8vID0+IGZhbHNlXG4gICAgICAgICAqL3ZhciBvdmVyU29tZT1jcmVhdGVPdmVyKGFycmF5U29tZSk7LyoqXG4gICAgICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIHZhbHVlIGF0IGBwYXRoYCBvZiBhIGdpdmVuIG9iamVjdC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAc2luY2UgMi40LjBcbiAgICAgICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgICAgICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAgICAgICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIHZhciBvYmplY3RzID0gW1xuICAgICAgICAgKiAgIHsgJ2EnOiB7ICdiJzogMiB9IH0sXG4gICAgICAgICAqICAgeyAnYSc6IHsgJ2InOiAxIH0gfVxuICAgICAgICAgKiBdO1xuICAgICAgICAgKlxuICAgICAgICAgKiBfLm1hcChvYmplY3RzLCBfLnByb3BlcnR5KCdhLmInKSk7XG4gICAgICAgICAqIC8vID0+IFsyLCAxXVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLm1hcChfLnNvcnRCeShvYmplY3RzLCBfLnByb3BlcnR5KFsnYScsICdiJ10pKSwgJ2EuYicpO1xuICAgICAgICAgKiAvLyA9PiBbMSwgMl1cbiAgICAgICAgICovZnVuY3Rpb24gcHJvcGVydHkocGF0aCl7cmV0dXJuIGlzS2V5KHBhdGgpP2Jhc2VQcm9wZXJ0eSh0b0tleShwYXRoKSk6YmFzZVByb3BlcnR5RGVlcChwYXRoKTt9LyoqXG4gICAgICAgICAqIFRoZSBvcHBvc2l0ZSBvZiBgXy5wcm9wZXJ0eWA7IHRoaXMgbWV0aG9kIGNyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHJldHVybnNcbiAgICAgICAgICogdGhlIHZhbHVlIGF0IGEgZ2l2ZW4gcGF0aCBvZiBgb2JqZWN0YC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBhY2Nlc3NvciBmdW5jdGlvbi5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogdmFyIGFycmF5ID0gWzAsIDEsIDJdLFxuICAgICAgICAgKiAgICAgb2JqZWN0ID0geyAnYSc6IGFycmF5LCAnYic6IGFycmF5LCAnYyc6IGFycmF5IH07XG4gICAgICAgICAqXG4gICAgICAgICAqIF8ubWFwKFsnYVsyXScsICdjWzBdJ10sIF8ucHJvcGVydHlPZihvYmplY3QpKTtcbiAgICAgICAgICogLy8gPT4gWzIsIDBdXG4gICAgICAgICAqXG4gICAgICAgICAqIF8ubWFwKFtbJ2EnLCAnMiddLCBbJ2MnLCAnMCddXSwgXy5wcm9wZXJ0eU9mKG9iamVjdCkpO1xuICAgICAgICAgKiAvLyA9PiBbMiwgMF1cbiAgICAgICAgICovZnVuY3Rpb24gcHJvcGVydHlPZihvYmplY3Qpe3JldHVybiBmdW5jdGlvbihwYXRoKXtyZXR1cm4gb2JqZWN0PT1udWxsP3VuZGVmaW5lZDpiYXNlR2V0KG9iamVjdCxwYXRoKTt9O30vKipcbiAgICAgICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiBudW1iZXJzIChwb3NpdGl2ZSBhbmQvb3IgbmVnYXRpdmUpIHByb2dyZXNzaW5nIGZyb21cbiAgICAgICAgICogYHN0YXJ0YCB1cCB0bywgYnV0IG5vdCBpbmNsdWRpbmcsIGBlbmRgLiBBIHN0ZXAgb2YgYC0xYCBpcyB1c2VkIGlmIGEgbmVnYXRpdmVcbiAgICAgICAgICogYHN0YXJ0YCBpcyBzcGVjaWZpZWQgd2l0aG91dCBhbiBgZW5kYCBvciBgc3RlcGAuIElmIGBlbmRgIGlzIG5vdCBzcGVjaWZpZWQsXG4gICAgICAgICAqIGl0J3Mgc2V0IHRvIGBzdGFydGAgd2l0aCBgc3RhcnRgIHRoZW4gc2V0IHRvIGAwYC5cbiAgICAgICAgICpcbiAgICAgICAgICogKipOb3RlOioqIEphdmFTY3JpcHQgZm9sbG93cyB0aGUgSUVFRS03NTQgc3RhbmRhcmQgZm9yIHJlc29sdmluZ1xuICAgICAgICAgKiBmbG9hdGluZy1wb2ludCB2YWx1ZXMgd2hpY2ggY2FuIHByb2R1Y2UgdW5leHBlY3RlZCByZXN1bHRzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PTBdIFRoZSBzdGFydCBvZiB0aGUgcmFuZ2UuXG4gICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBlbmQgVGhlIGVuZCBvZiB0aGUgcmFuZ2UuXG4gICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RlcD0xXSBUaGUgdmFsdWUgdG8gaW5jcmVtZW50IG9yIGRlY3JlbWVudCBieS5cbiAgICAgICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSByYW5nZSBvZiBudW1iZXJzLlxuICAgICAgICAgKiBAc2VlIF8uaW5SYW5nZSwgXy5yYW5nZVJpZ2h0XG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8ucmFuZ2UoNCk7XG4gICAgICAgICAqIC8vID0+IFswLCAxLCAyLCAzXVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLnJhbmdlKC00KTtcbiAgICAgICAgICogLy8gPT4gWzAsIC0xLCAtMiwgLTNdXG4gICAgICAgICAqXG4gICAgICAgICAqIF8ucmFuZ2UoMSwgNSk7XG4gICAgICAgICAqIC8vID0+IFsxLCAyLCAzLCA0XVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLnJhbmdlKDAsIDIwLCA1KTtcbiAgICAgICAgICogLy8gPT4gWzAsIDUsIDEwLCAxNV1cbiAgICAgICAgICpcbiAgICAgICAgICogXy5yYW5nZSgwLCAtNCwgLTEpO1xuICAgICAgICAgKiAvLyA9PiBbMCwgLTEsIC0yLCAtM11cbiAgICAgICAgICpcbiAgICAgICAgICogXy5yYW5nZSgxLCA0LCAwKTtcbiAgICAgICAgICogLy8gPT4gWzEsIDEsIDFdXG4gICAgICAgICAqXG4gICAgICAgICAqIF8ucmFuZ2UoMCk7XG4gICAgICAgICAqIC8vID0+IFtdXG4gICAgICAgICAqL3ZhciByYW5nZT1jcmVhdGVSYW5nZSgpOy8qKlxuICAgICAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnJhbmdlYCBleGNlcHQgdGhhdCBpdCBwb3B1bGF0ZXMgdmFsdWVzIGluXG4gICAgICAgICAqIGRlc2NlbmRpbmcgb3JkZXIuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQHNpbmNlIDQuMC4wXG4gICAgICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9MF0gVGhlIHN0YXJ0IG9mIHRoZSByYW5nZS5cbiAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IGVuZCBUaGUgZW5kIG9mIHRoZSByYW5nZS5cbiAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IFtzdGVwPTFdIFRoZSB2YWx1ZSB0byBpbmNyZW1lbnQgb3IgZGVjcmVtZW50IGJ5LlxuICAgICAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHJhbmdlIG9mIG51bWJlcnMuXG4gICAgICAgICAqIEBzZWUgXy5pblJhbmdlLCBfLnJhbmdlXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8ucmFuZ2VSaWdodCg0KTtcbiAgICAgICAgICogLy8gPT4gWzMsIDIsIDEsIDBdXG4gICAgICAgICAqXG4gICAgICAgICAqIF8ucmFuZ2VSaWdodCgtNCk7XG4gICAgICAgICAqIC8vID0+IFstMywgLTIsIC0xLCAwXVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLnJhbmdlUmlnaHQoMSwgNSk7XG4gICAgICAgICAqIC8vID0+IFs0LCAzLCAyLCAxXVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLnJhbmdlUmlnaHQoMCwgMjAsIDUpO1xuICAgICAgICAgKiAvLyA9PiBbMTUsIDEwLCA1LCAwXVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLnJhbmdlUmlnaHQoMCwgLTQsIC0xKTtcbiAgICAgICAgICogLy8gPT4gWy0zLCAtMiwgLTEsIDBdXG4gICAgICAgICAqXG4gICAgICAgICAqIF8ucmFuZ2VSaWdodCgxLCA0LCAwKTtcbiAgICAgICAgICogLy8gPT4gWzEsIDEsIDFdXG4gICAgICAgICAqXG4gICAgICAgICAqIF8ucmFuZ2VSaWdodCgwKTtcbiAgICAgICAgICogLy8gPT4gW11cbiAgICAgICAgICovdmFyIHJhbmdlUmlnaHQ9Y3JlYXRlUmFuZ2UodHJ1ZSk7LyoqXG4gICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBuZXcgZW1wdHkgYXJyYXkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQHNpbmNlIDQuMTMuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBlbXB0eSBhcnJheS5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogdmFyIGFycmF5cyA9IF8udGltZXMoMiwgXy5zdHViQXJyYXkpO1xuICAgICAgICAgKlxuICAgICAgICAgKiBjb25zb2xlLmxvZyhhcnJheXMpO1xuICAgICAgICAgKiAvLyA9PiBbW10sIFtdXVxuICAgICAgICAgKlxuICAgICAgICAgKiBjb25zb2xlLmxvZyhhcnJheXNbMF0gPT09IGFycmF5c1sxXSk7XG4gICAgICAgICAqIC8vID0+IGZhbHNlXG4gICAgICAgICAqL2Z1bmN0aW9uIHN0dWJBcnJheSgpe3JldHVybltdO30vKipcbiAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBgZmFsc2VgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSA0LjEzLjBcbiAgICAgICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYGZhbHNlYC5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogXy50aW1lcygyLCBfLnN0dWJGYWxzZSk7XG4gICAgICAgICAqIC8vID0+IFtmYWxzZSwgZmFsc2VdXG4gICAgICAgICAqL2Z1bmN0aW9uIHN0dWJGYWxzZSgpe3JldHVybiBmYWxzZTt9LyoqXG4gICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBuZXcgZW1wdHkgb2JqZWN0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSA0LjEzLjBcbiAgICAgICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IGVtcHR5IG9iamVjdC5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogdmFyIG9iamVjdHMgPSBfLnRpbWVzKDIsIF8uc3R1Yk9iamVjdCk7XG4gICAgICAgICAqXG4gICAgICAgICAqIGNvbnNvbGUubG9nKG9iamVjdHMpO1xuICAgICAgICAgKiAvLyA9PiBbe30sIHt9XVxuICAgICAgICAgKlxuICAgICAgICAgKiBjb25zb2xlLmxvZyhvYmplY3RzWzBdID09PSBvYmplY3RzWzFdKTtcbiAgICAgICAgICogLy8gPT4gZmFsc2VcbiAgICAgICAgICovZnVuY3Rpb24gc3R1Yk9iamVjdCgpe3JldHVybnt9O30vKipcbiAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhbiBlbXB0eSBzdHJpbmcuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQHNpbmNlIDQuMTMuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBlbXB0eSBzdHJpbmcuXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8udGltZXMoMiwgXy5zdHViU3RyaW5nKTtcbiAgICAgICAgICogLy8gPT4gWycnLCAnJ11cbiAgICAgICAgICovZnVuY3Rpb24gc3R1YlN0cmluZygpe3JldHVybicnO30vKipcbiAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBgdHJ1ZWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQHNpbmNlIDQuMTMuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAuXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8udGltZXMoMiwgXy5zdHViVHJ1ZSk7XG4gICAgICAgICAqIC8vID0+IFt0cnVlLCB0cnVlXVxuICAgICAgICAgKi9mdW5jdGlvbiBzdHViVHJ1ZSgpe3JldHVybiB0cnVlO30vKipcbiAgICAgICAgICogSW52b2tlcyB0aGUgaXRlcmF0ZWUgYG5gIHRpbWVzLCByZXR1cm5pbmcgYW4gYXJyYXkgb2YgdGhlIHJlc3VsdHMgb2ZcbiAgICAgICAgICogZWFjaCBpbnZvY2F0aW9uLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDsgKGluZGV4KS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciBvZiB0aW1lcyB0byBpbnZva2UgYGl0ZXJhdGVlYC5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcmVzdWx0cy5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogXy50aW1lcygzLCBTdHJpbmcpO1xuICAgICAgICAgKiAvLyA9PiBbJzAnLCAnMScsICcyJ11cbiAgICAgICAgICpcbiAgICAgICAgICogIF8udGltZXMoNCwgXy5jb25zdGFudCgwKSk7XG4gICAgICAgICAqIC8vID0+IFswLCAwLCAwLCAwXVxuICAgICAgICAgKi9mdW5jdGlvbiB0aW1lcyhuLGl0ZXJhdGVlKXtuPXRvSW50ZWdlcihuKTtpZihuPDF8fG4+TUFYX1NBRkVfSU5URUdFUil7cmV0dXJuW107fXZhciBpbmRleD1NQVhfQVJSQVlfTEVOR1RILGxlbmd0aD1uYXRpdmVNaW4obixNQVhfQVJSQVlfTEVOR1RIKTtpdGVyYXRlZT1nZXRJdGVyYXRlZShpdGVyYXRlZSk7bi09TUFYX0FSUkFZX0xFTkdUSDt2YXIgcmVzdWx0PWJhc2VUaW1lcyhsZW5ndGgsaXRlcmF0ZWUpO3doaWxlKCsraW5kZXg8bil7aXRlcmF0ZWUoaW5kZXgpO31yZXR1cm4gcmVzdWx0O30vKipcbiAgICAgICAgICogQ29udmVydHMgYHZhbHVlYCB0byBhIHByb3BlcnR5IHBhdGggYXJyYXkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQHNpbmNlIDQuMC4wXG4gICAgICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gICAgICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IHByb3BlcnR5IHBhdGggYXJyYXkuXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8udG9QYXRoKCdhLmIuYycpO1xuICAgICAgICAgKiAvLyA9PiBbJ2EnLCAnYicsICdjJ11cbiAgICAgICAgICpcbiAgICAgICAgICogXy50b1BhdGgoJ2FbMF0uYi5jJyk7XG4gICAgICAgICAqIC8vID0+IFsnYScsICcwJywgJ2InLCAnYyddXG4gICAgICAgICAqL2Z1bmN0aW9uIHRvUGF0aCh2YWx1ZSl7aWYoaXNBcnJheSh2YWx1ZSkpe3JldHVybiBhcnJheU1hcCh2YWx1ZSx0b0tleSk7fXJldHVybiBpc1N5bWJvbCh2YWx1ZSk/W3ZhbHVlXTpjb3B5QXJyYXkoc3RyaW5nVG9QYXRoKHRvU3RyaW5nKHZhbHVlKSkpO30vKipcbiAgICAgICAgICogR2VuZXJhdGVzIGEgdW5pcXVlIElELiBJZiBgcHJlZml4YCBpcyBnaXZlbiwgdGhlIElEIGlzIGFwcGVuZGVkIHRvIGl0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3ByZWZpeD0nJ10gVGhlIHZhbHVlIHRvIHByZWZpeCB0aGUgSUQgd2l0aC5cbiAgICAgICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgdW5pcXVlIElELlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLnVuaXF1ZUlkKCdjb250YWN0XycpO1xuICAgICAgICAgKiAvLyA9PiAnY29udGFjdF8xMDQnXG4gICAgICAgICAqXG4gICAgICAgICAqIF8udW5pcXVlSWQoKTtcbiAgICAgICAgICogLy8gPT4gJzEwNSdcbiAgICAgICAgICovZnVuY3Rpb24gdW5pcXVlSWQocHJlZml4KXt2YXIgaWQ9KytpZENvdW50ZXI7cmV0dXJuIHRvU3RyaW5nKHByZWZpeCkraWQ7fS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovLyoqXG4gICAgICAgICAqIEFkZHMgdHdvIG51bWJlcnMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQHNpbmNlIDMuNC4wXG4gICAgICAgICAqIEBjYXRlZ29yeSBNYXRoXG4gICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBhdWdlbmQgVGhlIGZpcnN0IG51bWJlciBpbiBhbiBhZGRpdGlvbi5cbiAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IGFkZGVuZCBUaGUgc2Vjb25kIG51bWJlciBpbiBhbiBhZGRpdGlvbi5cbiAgICAgICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgdG90YWwuXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8uYWRkKDYsIDQpO1xuICAgICAgICAgKiAvLyA9PiAxMFxuICAgICAgICAgKi92YXIgYWRkPWNyZWF0ZU1hdGhPcGVyYXRpb24oZnVuY3Rpb24oYXVnZW5kLGFkZGVuZCl7cmV0dXJuIGF1Z2VuZCthZGRlbmQ7fSwwKTsvKipcbiAgICAgICAqIENvbXB1dGVzIGBudW1iZXJgIHJvdW5kZWQgdXAgdG8gYHByZWNpc2lvbmAuXG4gICAgICAgKlxuICAgICAgICogQHN0YXRpY1xuICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAqIEBzaW5jZSAzLjEwLjBcbiAgICAgICAqIEBjYXRlZ29yeSBNYXRoXG4gICAgICAgKiBAcGFyYW0ge251bWJlcn0gbnVtYmVyIFRoZSBudW1iZXIgdG8gcm91bmQgdXAuXG4gICAgICAgKiBAcGFyYW0ge251bWJlcn0gW3ByZWNpc2lvbj0wXSBUaGUgcHJlY2lzaW9uIHRvIHJvdW5kIHVwIHRvLlxuICAgICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgcm91bmRlZCB1cCBudW1iZXIuXG4gICAgICAgKiBAZXhhbXBsZVxuICAgICAgICpcbiAgICAgICAqIF8uY2VpbCg0LjAwNik7XG4gICAgICAgKiAvLyA9PiA1XG4gICAgICAgKlxuICAgICAgICogXy5jZWlsKDYuMDA0LCAyKTtcbiAgICAgICAqIC8vID0+IDYuMDFcbiAgICAgICAqXG4gICAgICAgKiBfLmNlaWwoNjA0MCwgLTIpO1xuICAgICAgICogLy8gPT4gNjEwMFxuICAgICAgICovdmFyIGNlaWw9Y3JlYXRlUm91bmQoJ2NlaWwnKTsvKipcbiAgICAgICAgICogRGl2aWRlIHR3byBudW1iZXJzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSA0LjcuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgTWF0aFxuICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gZGl2aWRlbmQgVGhlIGZpcnN0IG51bWJlciBpbiBhIGRpdmlzaW9uLlxuICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gZGl2aXNvciBUaGUgc2Vjb25kIG51bWJlciBpbiBhIGRpdmlzaW9uLlxuICAgICAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBxdW90aWVudC5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogXy5kaXZpZGUoNiwgNCk7XG4gICAgICAgICAqIC8vID0+IDEuNVxuICAgICAgICAgKi92YXIgZGl2aWRlPWNyZWF0ZU1hdGhPcGVyYXRpb24oZnVuY3Rpb24oZGl2aWRlbmQsZGl2aXNvcil7cmV0dXJuIGRpdmlkZW5kL2Rpdmlzb3I7fSwxKTsvKipcbiAgICAgICAqIENvbXB1dGVzIGBudW1iZXJgIHJvdW5kZWQgZG93biB0byBgcHJlY2lzaW9uYC5cbiAgICAgICAqXG4gICAgICAgKiBAc3RhdGljXG4gICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICogQHNpbmNlIDMuMTAuMFxuICAgICAgICogQGNhdGVnb3J5IE1hdGhcbiAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBudW1iZXIgVGhlIG51bWJlciB0byByb3VuZCBkb3duLlxuICAgICAgICogQHBhcmFtIHtudW1iZXJ9IFtwcmVjaXNpb249MF0gVGhlIHByZWNpc2lvbiB0byByb3VuZCBkb3duIHRvLlxuICAgICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgcm91bmRlZCBkb3duIG51bWJlci5cbiAgICAgICAqIEBleGFtcGxlXG4gICAgICAgKlxuICAgICAgICogXy5mbG9vcig0LjAwNik7XG4gICAgICAgKiAvLyA9PiA0XG4gICAgICAgKlxuICAgICAgICogXy5mbG9vcigwLjA0NiwgMik7XG4gICAgICAgKiAvLyA9PiAwLjA0XG4gICAgICAgKlxuICAgICAgICogXy5mbG9vcig0MDYwLCAtMik7XG4gICAgICAgKiAvLyA9PiA0MDAwXG4gICAgICAgKi92YXIgZmxvb3I9Y3JlYXRlUm91bmQoJ2Zsb29yJyk7LyoqXG4gICAgICAgICAqIENvbXB1dGVzIHRoZSBtYXhpbXVtIHZhbHVlIG9mIGBhcnJheWAuIElmIGBhcnJheWAgaXMgZW1wdHkgb3IgZmFsc2V5LFxuICAgICAgICAgKiBgdW5kZWZpbmVkYCBpcyByZXR1cm5lZC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQGNhdGVnb3J5IE1hdGhcbiAgICAgICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1heGltdW0gdmFsdWUuXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8ubWF4KFs0LCAyLCA4LCA2XSk7XG4gICAgICAgICAqIC8vID0+IDhcbiAgICAgICAgICpcbiAgICAgICAgICogXy5tYXgoW10pO1xuICAgICAgICAgKiAvLyA9PiB1bmRlZmluZWRcbiAgICAgICAgICovZnVuY3Rpb24gbWF4KGFycmF5KXtyZXR1cm4gYXJyYXkmJmFycmF5Lmxlbmd0aD9iYXNlRXh0cmVtdW0oYXJyYXksaWRlbnRpdHksYmFzZUd0KTp1bmRlZmluZWQ7fS8qKlxuICAgICAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLm1heGAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgaXRlcmF0ZWVgIHdoaWNoIGlzXG4gICAgICAgICAqIGludm9rZWQgZm9yIGVhY2ggZWxlbWVudCBpbiBgYXJyYXlgIHRvIGdlbmVyYXRlIHRoZSBjcml0ZXJpb24gYnkgd2hpY2hcbiAgICAgICAgICogdGhlIHZhbHVlIGlzIHJhbmtlZC4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCBvbmUgYXJndW1lbnQ6ICh2YWx1ZSkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICogQG1lbWJlck9mIF9cbiAgICAgICAgICogQHNpbmNlIDQuMC4wXG4gICAgICAgICAqIEBjYXRlZ29yeSBNYXRoXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1heGltdW0gdmFsdWUuXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIHZhciBvYmplY3RzID0gW3sgJ24nOiAxIH0sIHsgJ24nOiAyIH1dO1xuICAgICAgICAgKlxuICAgICAgICAgKiBfLm1heEJ5KG9iamVjdHMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuIG8ubjsgfSk7XG4gICAgICAgICAqIC8vID0+IHsgJ24nOiAyIH1cbiAgICAgICAgICpcbiAgICAgICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICAgICAqIF8ubWF4Qnkob2JqZWN0cywgJ24nKTtcbiAgICAgICAgICogLy8gPT4geyAnbic6IDIgfVxuICAgICAgICAgKi9mdW5jdGlvbiBtYXhCeShhcnJheSxpdGVyYXRlZSl7cmV0dXJuIGFycmF5JiZhcnJheS5sZW5ndGg/YmFzZUV4dHJlbXVtKGFycmF5LGdldEl0ZXJhdGVlKGl0ZXJhdGVlLDIpLGJhc2VHdCk6dW5kZWZpbmVkO30vKipcbiAgICAgICAgICogQ29tcHV0ZXMgdGhlIG1lYW4gb2YgdGhlIHZhbHVlcyBpbiBgYXJyYXlgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgTWF0aFxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBtZWFuLlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLm1lYW4oWzQsIDIsIDgsIDZdKTtcbiAgICAgICAgICogLy8gPT4gNVxuICAgICAgICAgKi9mdW5jdGlvbiBtZWFuKGFycmF5KXtyZXR1cm4gYmFzZU1lYW4oYXJyYXksaWRlbnRpdHkpO30vKipcbiAgICAgICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5tZWFuYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBpdGVyYXRlZWAgd2hpY2ggaXNcbiAgICAgICAgICogaW52b2tlZCBmb3IgZWFjaCBlbGVtZW50IGluIGBhcnJheWAgdG8gZ2VuZXJhdGUgdGhlIHZhbHVlIHRvIGJlIGF2ZXJhZ2VkLlxuICAgICAgICAgKiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDogKHZhbHVlKS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAc2luY2UgNC43LjBcbiAgICAgICAgICogQGNhdGVnb3J5IE1hdGhcbiAgICAgICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBtZWFuLlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiB2YXIgb2JqZWN0cyA9IFt7ICduJzogNCB9LCB7ICduJzogMiB9LCB7ICduJzogOCB9LCB7ICduJzogNiB9XTtcbiAgICAgICAgICpcbiAgICAgICAgICogXy5tZWFuQnkob2JqZWN0cywgZnVuY3Rpb24obykgeyByZXR1cm4gby5uOyB9KTtcbiAgICAgICAgICogLy8gPT4gNVxuICAgICAgICAgKlxuICAgICAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgICAgICogXy5tZWFuQnkob2JqZWN0cywgJ24nKTtcbiAgICAgICAgICogLy8gPT4gNVxuICAgICAgICAgKi9mdW5jdGlvbiBtZWFuQnkoYXJyYXksaXRlcmF0ZWUpe3JldHVybiBiYXNlTWVhbihhcnJheSxnZXRJdGVyYXRlZShpdGVyYXRlZSwyKSk7fS8qKlxuICAgICAgICAgKiBDb21wdXRlcyB0aGUgbWluaW11bSB2YWx1ZSBvZiBgYXJyYXlgLiBJZiBgYXJyYXlgIGlzIGVtcHR5IG9yIGZhbHNleSxcbiAgICAgICAgICogYHVuZGVmaW5lZGAgaXMgcmV0dXJuZWQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICogQHNpbmNlIDAuMS4wXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBjYXRlZ29yeSBNYXRoXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gICAgICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBtaW5pbXVtIHZhbHVlLlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiBfLm1pbihbNCwgMiwgOCwgNl0pO1xuICAgICAgICAgKiAvLyA9PiAyXG4gICAgICAgICAqXG4gICAgICAgICAqIF8ubWluKFtdKTtcbiAgICAgICAgICogLy8gPT4gdW5kZWZpbmVkXG4gICAgICAgICAqL2Z1bmN0aW9uIG1pbihhcnJheSl7cmV0dXJuIGFycmF5JiZhcnJheS5sZW5ndGg/YmFzZUV4dHJlbXVtKGFycmF5LGlkZW50aXR5LGJhc2VMdCk6dW5kZWZpbmVkO30vKipcbiAgICAgICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5taW5gIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGl0ZXJhdGVlYCB3aGljaCBpc1xuICAgICAgICAgKiBpbnZva2VkIGZvciBlYWNoIGVsZW1lbnQgaW4gYGFycmF5YCB0byBnZW5lcmF0ZSB0aGUgY3JpdGVyaW9uIGJ5IHdoaWNoXG4gICAgICAgICAqIHRoZSB2YWx1ZSBpcyByYW5rZWQuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OiAodmFsdWUpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgTWF0aFxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBtaW5pbXVtIHZhbHVlLlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiB2YXIgb2JqZWN0cyA9IFt7ICduJzogMSB9LCB7ICduJzogMiB9XTtcbiAgICAgICAgICpcbiAgICAgICAgICogXy5taW5CeShvYmplY3RzLCBmdW5jdGlvbihvKSB7IHJldHVybiBvLm47IH0pO1xuICAgICAgICAgKiAvLyA9PiB7ICduJzogMSB9XG4gICAgICAgICAqXG4gICAgICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAgICAgKiBfLm1pbkJ5KG9iamVjdHMsICduJyk7XG4gICAgICAgICAqIC8vID0+IHsgJ24nOiAxIH1cbiAgICAgICAgICovZnVuY3Rpb24gbWluQnkoYXJyYXksaXRlcmF0ZWUpe3JldHVybiBhcnJheSYmYXJyYXkubGVuZ3RoP2Jhc2VFeHRyZW11bShhcnJheSxnZXRJdGVyYXRlZShpdGVyYXRlZSwyKSxiYXNlTHQpOnVuZGVmaW5lZDt9LyoqXG4gICAgICAgICAqIE11bHRpcGx5IHR3byBudW1iZXJzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSA0LjcuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgTWF0aFxuICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gbXVsdGlwbGllciBUaGUgZmlyc3QgbnVtYmVyIGluIGEgbXVsdGlwbGljYXRpb24uXG4gICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBtdWx0aXBsaWNhbmQgVGhlIHNlY29uZCBudW1iZXIgaW4gYSBtdWx0aXBsaWNhdGlvbi5cbiAgICAgICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgcHJvZHVjdC5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogXy5tdWx0aXBseSg2LCA0KTtcbiAgICAgICAgICogLy8gPT4gMjRcbiAgICAgICAgICovdmFyIG11bHRpcGx5PWNyZWF0ZU1hdGhPcGVyYXRpb24oZnVuY3Rpb24obXVsdGlwbGllcixtdWx0aXBsaWNhbmQpe3JldHVybiBtdWx0aXBsaWVyKm11bHRpcGxpY2FuZDt9LDEpOy8qKlxuICAgICAgICogQ29tcHV0ZXMgYG51bWJlcmAgcm91bmRlZCB0byBgcHJlY2lzaW9uYC5cbiAgICAgICAqXG4gICAgICAgKiBAc3RhdGljXG4gICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICogQHNpbmNlIDMuMTAuMFxuICAgICAgICogQGNhdGVnb3J5IE1hdGhcbiAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBudW1iZXIgVGhlIG51bWJlciB0byByb3VuZC5cbiAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbcHJlY2lzaW9uPTBdIFRoZSBwcmVjaXNpb24gdG8gcm91bmQgdG8uXG4gICAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSByb3VuZGVkIG51bWJlci5cbiAgICAgICAqIEBleGFtcGxlXG4gICAgICAgKlxuICAgICAgICogXy5yb3VuZCg0LjAwNik7XG4gICAgICAgKiAvLyA9PiA0XG4gICAgICAgKlxuICAgICAgICogXy5yb3VuZCg0LjAwNiwgMik7XG4gICAgICAgKiAvLyA9PiA0LjAxXG4gICAgICAgKlxuICAgICAgICogXy5yb3VuZCg0MDYwLCAtMik7XG4gICAgICAgKiAvLyA9PiA0MTAwXG4gICAgICAgKi92YXIgcm91bmQ9Y3JlYXRlUm91bmQoJ3JvdW5kJyk7LyoqXG4gICAgICAgICAqIFN1YnRyYWN0IHR3byBudW1iZXJzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgTWF0aFxuICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gbWludWVuZCBUaGUgZmlyc3QgbnVtYmVyIGluIGEgc3VidHJhY3Rpb24uXG4gICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzdWJ0cmFoZW5kIFRoZSBzZWNvbmQgbnVtYmVyIGluIGEgc3VidHJhY3Rpb24uXG4gICAgICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGRpZmZlcmVuY2UuXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIF8uc3VidHJhY3QoNiwgNCk7XG4gICAgICAgICAqIC8vID0+IDJcbiAgICAgICAgICovdmFyIHN1YnRyYWN0PWNyZWF0ZU1hdGhPcGVyYXRpb24oZnVuY3Rpb24obWludWVuZCxzdWJ0cmFoZW5kKXtyZXR1cm4gbWludWVuZC1zdWJ0cmFoZW5kO30sMCk7LyoqXG4gICAgICAgKiBDb21wdXRlcyB0aGUgc3VtIG9mIHRoZSB2YWx1ZXMgaW4gYGFycmF5YC5cbiAgICAgICAqXG4gICAgICAgKiBAc3RhdGljXG4gICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICogQHNpbmNlIDMuNC4wXG4gICAgICAgKiBAY2F0ZWdvcnkgTWF0aFxuICAgICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHN1bS5cbiAgICAgICAqIEBleGFtcGxlXG4gICAgICAgKlxuICAgICAgICogXy5zdW0oWzQsIDIsIDgsIDZdKTtcbiAgICAgICAqIC8vID0+IDIwXG4gICAgICAgKi9mdW5jdGlvbiBzdW0oYXJyYXkpe3JldHVybiBhcnJheSYmYXJyYXkubGVuZ3RoP2Jhc2VTdW0oYXJyYXksaWRlbnRpdHkpOjA7fS8qKlxuICAgICAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnN1bWAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgaXRlcmF0ZWVgIHdoaWNoIGlzXG4gICAgICAgICAqIGludm9rZWQgZm9yIGVhY2ggZWxlbWVudCBpbiBgYXJyYXlgIHRvIGdlbmVyYXRlIHRoZSB2YWx1ZSB0byBiZSBzdW1tZWQuXG4gICAgICAgICAqIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OiAodmFsdWUpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAgICAgKiBAY2F0ZWdvcnkgTWF0aFxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHN1bS5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogdmFyIG9iamVjdHMgPSBbeyAnbic6IDQgfSwgeyAnbic6IDIgfSwgeyAnbic6IDggfSwgeyAnbic6IDYgfV07XG4gICAgICAgICAqXG4gICAgICAgICAqIF8uc3VtQnkob2JqZWN0cywgZnVuY3Rpb24obykgeyByZXR1cm4gby5uOyB9KTtcbiAgICAgICAgICogLy8gPT4gMjBcbiAgICAgICAgICpcbiAgICAgICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICAgICAqIF8uc3VtQnkob2JqZWN0cywgJ24nKTtcbiAgICAgICAgICogLy8gPT4gMjBcbiAgICAgICAgICovZnVuY3Rpb24gc3VtQnkoYXJyYXksaXRlcmF0ZWUpe3JldHVybiBhcnJheSYmYXJyYXkubGVuZ3RoP2Jhc2VTdW0oYXJyYXksZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsMikpOjA7fS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovLy8gQWRkIG1ldGhvZHMgdGhhdCByZXR1cm4gd3JhcHBlZCB2YWx1ZXMgaW4gY2hhaW4gc2VxdWVuY2VzLlxubG9kYXNoLmFmdGVyPWFmdGVyO2xvZGFzaC5hcnk9YXJ5O2xvZGFzaC5hc3NpZ249YXNzaWduO2xvZGFzaC5hc3NpZ25Jbj1hc3NpZ25Jbjtsb2Rhc2guYXNzaWduSW5XaXRoPWFzc2lnbkluV2l0aDtsb2Rhc2guYXNzaWduV2l0aD1hc3NpZ25XaXRoO2xvZGFzaC5hdD1hdDtsb2Rhc2guYmVmb3JlPWJlZm9yZTtsb2Rhc2guYmluZD1iaW5kO2xvZGFzaC5iaW5kQWxsPWJpbmRBbGw7bG9kYXNoLmJpbmRLZXk9YmluZEtleTtsb2Rhc2guY2FzdEFycmF5PWNhc3RBcnJheTtsb2Rhc2guY2hhaW49Y2hhaW47bG9kYXNoLmNodW5rPWNodW5rO2xvZGFzaC5jb21wYWN0PWNvbXBhY3Q7bG9kYXNoLmNvbmNhdD1jb25jYXQ7bG9kYXNoLmNvbmQ9Y29uZDtsb2Rhc2guY29uZm9ybXM9Y29uZm9ybXM7bG9kYXNoLmNvbnN0YW50PWNvbnN0YW50O2xvZGFzaC5jb3VudEJ5PWNvdW50Qnk7bG9kYXNoLmNyZWF0ZT1jcmVhdGU7bG9kYXNoLmN1cnJ5PWN1cnJ5O2xvZGFzaC5jdXJyeVJpZ2h0PWN1cnJ5UmlnaHQ7bG9kYXNoLmRlYm91bmNlPWRlYm91bmNlO2xvZGFzaC5kZWZhdWx0cz1kZWZhdWx0cztsb2Rhc2guZGVmYXVsdHNEZWVwPWRlZmF1bHRzRGVlcDtsb2Rhc2guZGVmZXI9ZGVmZXI7bG9kYXNoLmRlbGF5PWRlbGF5O2xvZGFzaC5kaWZmZXJlbmNlPWRpZmZlcmVuY2U7bG9kYXNoLmRpZmZlcmVuY2VCeT1kaWZmZXJlbmNlQnk7bG9kYXNoLmRpZmZlcmVuY2VXaXRoPWRpZmZlcmVuY2VXaXRoO2xvZGFzaC5kcm9wPWRyb3A7bG9kYXNoLmRyb3BSaWdodD1kcm9wUmlnaHQ7bG9kYXNoLmRyb3BSaWdodFdoaWxlPWRyb3BSaWdodFdoaWxlO2xvZGFzaC5kcm9wV2hpbGU9ZHJvcFdoaWxlO2xvZGFzaC5maWxsPWZpbGw7bG9kYXNoLmZpbHRlcj1maWx0ZXI7bG9kYXNoLmZsYXRNYXA9ZmxhdE1hcDtsb2Rhc2guZmxhdE1hcERlZXA9ZmxhdE1hcERlZXA7bG9kYXNoLmZsYXRNYXBEZXB0aD1mbGF0TWFwRGVwdGg7bG9kYXNoLmZsYXR0ZW49ZmxhdHRlbjtsb2Rhc2guZmxhdHRlbkRlZXA9ZmxhdHRlbkRlZXA7bG9kYXNoLmZsYXR0ZW5EZXB0aD1mbGF0dGVuRGVwdGg7bG9kYXNoLmZsaXA9ZmxpcDtsb2Rhc2guZmxvdz1mbG93O2xvZGFzaC5mbG93UmlnaHQ9Zmxvd1JpZ2h0O2xvZGFzaC5mcm9tUGFpcnM9ZnJvbVBhaXJzO2xvZGFzaC5mdW5jdGlvbnM9ZnVuY3Rpb25zO2xvZGFzaC5mdW5jdGlvbnNJbj1mdW5jdGlvbnNJbjtsb2Rhc2guZ3JvdXBCeT1ncm91cEJ5O2xvZGFzaC5pbml0aWFsPWluaXRpYWw7bG9kYXNoLmludGVyc2VjdGlvbj1pbnRlcnNlY3Rpb247bG9kYXNoLmludGVyc2VjdGlvbkJ5PWludGVyc2VjdGlvbkJ5O2xvZGFzaC5pbnRlcnNlY3Rpb25XaXRoPWludGVyc2VjdGlvbldpdGg7bG9kYXNoLmludmVydD1pbnZlcnQ7bG9kYXNoLmludmVydEJ5PWludmVydEJ5O2xvZGFzaC5pbnZva2VNYXA9aW52b2tlTWFwO2xvZGFzaC5pdGVyYXRlZT1pdGVyYXRlZTtsb2Rhc2gua2V5Qnk9a2V5Qnk7bG9kYXNoLmtleXM9a2V5cztsb2Rhc2gua2V5c0luPWtleXNJbjtsb2Rhc2gubWFwPW1hcDtsb2Rhc2gubWFwS2V5cz1tYXBLZXlzO2xvZGFzaC5tYXBWYWx1ZXM9bWFwVmFsdWVzO2xvZGFzaC5tYXRjaGVzPW1hdGNoZXM7bG9kYXNoLm1hdGNoZXNQcm9wZXJ0eT1tYXRjaGVzUHJvcGVydHk7bG9kYXNoLm1lbW9pemU9bWVtb2l6ZTtsb2Rhc2gubWVyZ2U9bWVyZ2U7bG9kYXNoLm1lcmdlV2l0aD1tZXJnZVdpdGg7bG9kYXNoLm1ldGhvZD1tZXRob2Q7bG9kYXNoLm1ldGhvZE9mPW1ldGhvZE9mO2xvZGFzaC5taXhpbj1taXhpbjtsb2Rhc2gubmVnYXRlPW5lZ2F0ZTtsb2Rhc2gubnRoQXJnPW50aEFyZztsb2Rhc2gub21pdD1vbWl0O2xvZGFzaC5vbWl0Qnk9b21pdEJ5O2xvZGFzaC5vbmNlPW9uY2U7bG9kYXNoLm9yZGVyQnk9b3JkZXJCeTtsb2Rhc2gub3Zlcj1vdmVyO2xvZGFzaC5vdmVyQXJncz1vdmVyQXJncztsb2Rhc2gub3ZlckV2ZXJ5PW92ZXJFdmVyeTtsb2Rhc2gub3ZlclNvbWU9b3ZlclNvbWU7bG9kYXNoLnBhcnRpYWw9cGFydGlhbDtsb2Rhc2gucGFydGlhbFJpZ2h0PXBhcnRpYWxSaWdodDtsb2Rhc2gucGFydGl0aW9uPXBhcnRpdGlvbjtsb2Rhc2gucGljaz1waWNrO2xvZGFzaC5waWNrQnk9cGlja0J5O2xvZGFzaC5wcm9wZXJ0eT1wcm9wZXJ0eTtsb2Rhc2gucHJvcGVydHlPZj1wcm9wZXJ0eU9mO2xvZGFzaC5wdWxsPXB1bGw7bG9kYXNoLnB1bGxBbGw9cHVsbEFsbDtsb2Rhc2gucHVsbEFsbEJ5PXB1bGxBbGxCeTtsb2Rhc2gucHVsbEFsbFdpdGg9cHVsbEFsbFdpdGg7bG9kYXNoLnB1bGxBdD1wdWxsQXQ7bG9kYXNoLnJhbmdlPXJhbmdlO2xvZGFzaC5yYW5nZVJpZ2h0PXJhbmdlUmlnaHQ7bG9kYXNoLnJlYXJnPXJlYXJnO2xvZGFzaC5yZWplY3Q9cmVqZWN0O2xvZGFzaC5yZW1vdmU9cmVtb3ZlO2xvZGFzaC5yZXN0PXJlc3Q7bG9kYXNoLnJldmVyc2U9cmV2ZXJzZTtsb2Rhc2guc2FtcGxlU2l6ZT1zYW1wbGVTaXplO2xvZGFzaC5zZXQ9c2V0O2xvZGFzaC5zZXRXaXRoPXNldFdpdGg7bG9kYXNoLnNodWZmbGU9c2h1ZmZsZTtsb2Rhc2guc2xpY2U9c2xpY2U7bG9kYXNoLnNvcnRCeT1zb3J0Qnk7bG9kYXNoLnNvcnRlZFVuaXE9c29ydGVkVW5pcTtsb2Rhc2guc29ydGVkVW5pcUJ5PXNvcnRlZFVuaXFCeTtsb2Rhc2guc3BsaXQ9c3BsaXQ7bG9kYXNoLnNwcmVhZD1zcHJlYWQ7bG9kYXNoLnRhaWw9dGFpbDtsb2Rhc2gudGFrZT10YWtlO2xvZGFzaC50YWtlUmlnaHQ9dGFrZVJpZ2h0O2xvZGFzaC50YWtlUmlnaHRXaGlsZT10YWtlUmlnaHRXaGlsZTtsb2Rhc2gudGFrZVdoaWxlPXRha2VXaGlsZTtsb2Rhc2gudGFwPXRhcDtsb2Rhc2gudGhyb3R0bGU9dGhyb3R0bGU7bG9kYXNoLnRocnU9dGhydTtsb2Rhc2gudG9BcnJheT10b0FycmF5O2xvZGFzaC50b1BhaXJzPXRvUGFpcnM7bG9kYXNoLnRvUGFpcnNJbj10b1BhaXJzSW47bG9kYXNoLnRvUGF0aD10b1BhdGg7bG9kYXNoLnRvUGxhaW5PYmplY3Q9dG9QbGFpbk9iamVjdDtsb2Rhc2gudHJhbnNmb3JtPXRyYW5zZm9ybTtsb2Rhc2gudW5hcnk9dW5hcnk7bG9kYXNoLnVuaW9uPXVuaW9uO2xvZGFzaC51bmlvbkJ5PXVuaW9uQnk7bG9kYXNoLnVuaW9uV2l0aD11bmlvbldpdGg7bG9kYXNoLnVuaXE9dW5pcTtsb2Rhc2gudW5pcUJ5PXVuaXFCeTtsb2Rhc2gudW5pcVdpdGg9dW5pcVdpdGg7bG9kYXNoLnVuc2V0PXVuc2V0O2xvZGFzaC51bnppcD11bnppcDtsb2Rhc2gudW56aXBXaXRoPXVuemlwV2l0aDtsb2Rhc2gudXBkYXRlPXVwZGF0ZTtsb2Rhc2gudXBkYXRlV2l0aD11cGRhdGVXaXRoO2xvZGFzaC52YWx1ZXM9dmFsdWVzO2xvZGFzaC52YWx1ZXNJbj12YWx1ZXNJbjtsb2Rhc2gud2l0aG91dD13aXRob3V0O2xvZGFzaC53b3Jkcz13b3Jkcztsb2Rhc2gud3JhcD13cmFwO2xvZGFzaC54b3I9eG9yO2xvZGFzaC54b3JCeT14b3JCeTtsb2Rhc2gueG9yV2l0aD14b3JXaXRoO2xvZGFzaC56aXA9emlwO2xvZGFzaC56aXBPYmplY3Q9emlwT2JqZWN0O2xvZGFzaC56aXBPYmplY3REZWVwPXppcE9iamVjdERlZXA7bG9kYXNoLnppcFdpdGg9emlwV2l0aDsvLyBBZGQgYWxpYXNlcy5cbmxvZGFzaC5lbnRyaWVzPXRvUGFpcnM7bG9kYXNoLmVudHJpZXNJbj10b1BhaXJzSW47bG9kYXNoLmV4dGVuZD1hc3NpZ25Jbjtsb2Rhc2guZXh0ZW5kV2l0aD1hc3NpZ25JbldpdGg7Ly8gQWRkIG1ldGhvZHMgdG8gYGxvZGFzaC5wcm90b3R5cGVgLlxubWl4aW4obG9kYXNoLGxvZGFzaCk7LyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8vLyBBZGQgbWV0aG9kcyB0aGF0IHJldHVybiB1bndyYXBwZWQgdmFsdWVzIGluIGNoYWluIHNlcXVlbmNlcy5cbmxvZGFzaC5hZGQ9YWRkO2xvZGFzaC5hdHRlbXB0PWF0dGVtcHQ7bG9kYXNoLmNhbWVsQ2FzZT1jYW1lbENhc2U7bG9kYXNoLmNhcGl0YWxpemU9Y2FwaXRhbGl6ZTtsb2Rhc2guY2VpbD1jZWlsO2xvZGFzaC5jbGFtcD1jbGFtcDtsb2Rhc2guY2xvbmU9Y2xvbmU7bG9kYXNoLmNsb25lRGVlcD1jbG9uZURlZXA7bG9kYXNoLmNsb25lRGVlcFdpdGg9Y2xvbmVEZWVwV2l0aDtsb2Rhc2guY2xvbmVXaXRoPWNsb25lV2l0aDtsb2Rhc2guY29uZm9ybXNUbz1jb25mb3Jtc1RvO2xvZGFzaC5kZWJ1cnI9ZGVidXJyO2xvZGFzaC5kZWZhdWx0VG89ZGVmYXVsdFRvO2xvZGFzaC5kaXZpZGU9ZGl2aWRlO2xvZGFzaC5lbmRzV2l0aD1lbmRzV2l0aDtsb2Rhc2guZXE9ZXE7bG9kYXNoLmVzY2FwZT1lc2NhcGU7bG9kYXNoLmVzY2FwZVJlZ0V4cD1lc2NhcGVSZWdFeHA7bG9kYXNoLmV2ZXJ5PWV2ZXJ5O2xvZGFzaC5maW5kPWZpbmQ7bG9kYXNoLmZpbmRJbmRleD1maW5kSW5kZXg7bG9kYXNoLmZpbmRLZXk9ZmluZEtleTtsb2Rhc2guZmluZExhc3Q9ZmluZExhc3Q7bG9kYXNoLmZpbmRMYXN0SW5kZXg9ZmluZExhc3RJbmRleDtsb2Rhc2guZmluZExhc3RLZXk9ZmluZExhc3RLZXk7bG9kYXNoLmZsb29yPWZsb29yO2xvZGFzaC5mb3JFYWNoPWZvckVhY2g7bG9kYXNoLmZvckVhY2hSaWdodD1mb3JFYWNoUmlnaHQ7bG9kYXNoLmZvckluPWZvckluO2xvZGFzaC5mb3JJblJpZ2h0PWZvckluUmlnaHQ7bG9kYXNoLmZvck93bj1mb3JPd247bG9kYXNoLmZvck93blJpZ2h0PWZvck93blJpZ2h0O2xvZGFzaC5nZXQ9Z2V0O2xvZGFzaC5ndD1ndDtsb2Rhc2guZ3RlPWd0ZTtsb2Rhc2guaGFzPWhhcztsb2Rhc2guaGFzSW49aGFzSW47bG9kYXNoLmhlYWQ9aGVhZDtsb2Rhc2guaWRlbnRpdHk9aWRlbnRpdHk7bG9kYXNoLmluY2x1ZGVzPWluY2x1ZGVzO2xvZGFzaC5pbmRleE9mPWluZGV4T2Y7bG9kYXNoLmluUmFuZ2U9aW5SYW5nZTtsb2Rhc2guaW52b2tlPWludm9rZTtsb2Rhc2guaXNBcmd1bWVudHM9aXNBcmd1bWVudHM7bG9kYXNoLmlzQXJyYXk9aXNBcnJheTtsb2Rhc2guaXNBcnJheUJ1ZmZlcj1pc0FycmF5QnVmZmVyO2xvZGFzaC5pc0FycmF5TGlrZT1pc0FycmF5TGlrZTtsb2Rhc2guaXNBcnJheUxpa2VPYmplY3Q9aXNBcnJheUxpa2VPYmplY3Q7bG9kYXNoLmlzQm9vbGVhbj1pc0Jvb2xlYW47bG9kYXNoLmlzQnVmZmVyPWlzQnVmZmVyO2xvZGFzaC5pc0RhdGU9aXNEYXRlO2xvZGFzaC5pc0VsZW1lbnQ9aXNFbGVtZW50O2xvZGFzaC5pc0VtcHR5PWlzRW1wdHk7bG9kYXNoLmlzRXF1YWw9aXNFcXVhbDtsb2Rhc2guaXNFcXVhbFdpdGg9aXNFcXVhbFdpdGg7bG9kYXNoLmlzRXJyb3I9aXNFcnJvcjtsb2Rhc2guaXNGaW5pdGU9aXNGaW5pdGU7bG9kYXNoLmlzRnVuY3Rpb249aXNGdW5jdGlvbjtsb2Rhc2guaXNJbnRlZ2VyPWlzSW50ZWdlcjtsb2Rhc2guaXNMZW5ndGg9aXNMZW5ndGg7bG9kYXNoLmlzTWFwPWlzTWFwO2xvZGFzaC5pc01hdGNoPWlzTWF0Y2g7bG9kYXNoLmlzTWF0Y2hXaXRoPWlzTWF0Y2hXaXRoO2xvZGFzaC5pc05hTj1pc05hTjtsb2Rhc2guaXNOYXRpdmU9aXNOYXRpdmU7bG9kYXNoLmlzTmlsPWlzTmlsO2xvZGFzaC5pc051bGw9aXNOdWxsO2xvZGFzaC5pc051bWJlcj1pc051bWJlcjtsb2Rhc2guaXNPYmplY3Q9aXNPYmplY3Q7bG9kYXNoLmlzT2JqZWN0TGlrZT1pc09iamVjdExpa2U7bG9kYXNoLmlzUGxhaW5PYmplY3Q9aXNQbGFpbk9iamVjdDtsb2Rhc2guaXNSZWdFeHA9aXNSZWdFeHA7bG9kYXNoLmlzU2FmZUludGVnZXI9aXNTYWZlSW50ZWdlcjtsb2Rhc2guaXNTZXQ9aXNTZXQ7bG9kYXNoLmlzU3RyaW5nPWlzU3RyaW5nO2xvZGFzaC5pc1N5bWJvbD1pc1N5bWJvbDtsb2Rhc2guaXNUeXBlZEFycmF5PWlzVHlwZWRBcnJheTtsb2Rhc2guaXNVbmRlZmluZWQ9aXNVbmRlZmluZWQ7bG9kYXNoLmlzV2Vha01hcD1pc1dlYWtNYXA7bG9kYXNoLmlzV2Vha1NldD1pc1dlYWtTZXQ7bG9kYXNoLmpvaW49am9pbjtsb2Rhc2gua2ViYWJDYXNlPWtlYmFiQ2FzZTtsb2Rhc2gubGFzdD1sYXN0O2xvZGFzaC5sYXN0SW5kZXhPZj1sYXN0SW5kZXhPZjtsb2Rhc2gubG93ZXJDYXNlPWxvd2VyQ2FzZTtsb2Rhc2gubG93ZXJGaXJzdD1sb3dlckZpcnN0O2xvZGFzaC5sdD1sdDtsb2Rhc2gubHRlPWx0ZTtsb2Rhc2gubWF4PW1heDtsb2Rhc2gubWF4Qnk9bWF4Qnk7bG9kYXNoLm1lYW49bWVhbjtsb2Rhc2gubWVhbkJ5PW1lYW5CeTtsb2Rhc2gubWluPW1pbjtsb2Rhc2gubWluQnk9bWluQnk7bG9kYXNoLnN0dWJBcnJheT1zdHViQXJyYXk7bG9kYXNoLnN0dWJGYWxzZT1zdHViRmFsc2U7bG9kYXNoLnN0dWJPYmplY3Q9c3R1Yk9iamVjdDtsb2Rhc2guc3R1YlN0cmluZz1zdHViU3RyaW5nO2xvZGFzaC5zdHViVHJ1ZT1zdHViVHJ1ZTtsb2Rhc2gubXVsdGlwbHk9bXVsdGlwbHk7bG9kYXNoLm50aD1udGg7bG9kYXNoLm5vQ29uZmxpY3Q9bm9Db25mbGljdDtsb2Rhc2gubm9vcD1ub29wO2xvZGFzaC5ub3c9bm93O2xvZGFzaC5wYWQ9cGFkO2xvZGFzaC5wYWRFbmQ9cGFkRW5kO2xvZGFzaC5wYWRTdGFydD1wYWRTdGFydDtsb2Rhc2gucGFyc2VJbnQ9cGFyc2VJbnQ7bG9kYXNoLnJhbmRvbT1yYW5kb207bG9kYXNoLnJlZHVjZT1yZWR1Y2U7bG9kYXNoLnJlZHVjZVJpZ2h0PXJlZHVjZVJpZ2h0O2xvZGFzaC5yZXBlYXQ9cmVwZWF0O2xvZGFzaC5yZXBsYWNlPXJlcGxhY2U7bG9kYXNoLnJlc3VsdD1yZXN1bHQ7bG9kYXNoLnJvdW5kPXJvdW5kO2xvZGFzaC5ydW5JbkNvbnRleHQ9cnVuSW5Db250ZXh0O2xvZGFzaC5zYW1wbGU9c2FtcGxlO2xvZGFzaC5zaXplPXNpemU7bG9kYXNoLnNuYWtlQ2FzZT1zbmFrZUNhc2U7bG9kYXNoLnNvbWU9c29tZTtsb2Rhc2guc29ydGVkSW5kZXg9c29ydGVkSW5kZXg7bG9kYXNoLnNvcnRlZEluZGV4Qnk9c29ydGVkSW5kZXhCeTtsb2Rhc2guc29ydGVkSW5kZXhPZj1zb3J0ZWRJbmRleE9mO2xvZGFzaC5zb3J0ZWRMYXN0SW5kZXg9c29ydGVkTGFzdEluZGV4O2xvZGFzaC5zb3J0ZWRMYXN0SW5kZXhCeT1zb3J0ZWRMYXN0SW5kZXhCeTtsb2Rhc2guc29ydGVkTGFzdEluZGV4T2Y9c29ydGVkTGFzdEluZGV4T2Y7bG9kYXNoLnN0YXJ0Q2FzZT1zdGFydENhc2U7bG9kYXNoLnN0YXJ0c1dpdGg9c3RhcnRzV2l0aDtsb2Rhc2guc3VidHJhY3Q9c3VidHJhY3Q7bG9kYXNoLnN1bT1zdW07bG9kYXNoLnN1bUJ5PXN1bUJ5O2xvZGFzaC50ZW1wbGF0ZT10ZW1wbGF0ZTtsb2Rhc2gudGltZXM9dGltZXM7bG9kYXNoLnRvRmluaXRlPXRvRmluaXRlO2xvZGFzaC50b0ludGVnZXI9dG9JbnRlZ2VyO2xvZGFzaC50b0xlbmd0aD10b0xlbmd0aDtsb2Rhc2gudG9Mb3dlcj10b0xvd2VyO2xvZGFzaC50b051bWJlcj10b051bWJlcjtsb2Rhc2gudG9TYWZlSW50ZWdlcj10b1NhZmVJbnRlZ2VyO2xvZGFzaC50b1N0cmluZz10b1N0cmluZztsb2Rhc2gudG9VcHBlcj10b1VwcGVyO2xvZGFzaC50cmltPXRyaW07bG9kYXNoLnRyaW1FbmQ9dHJpbUVuZDtsb2Rhc2gudHJpbVN0YXJ0PXRyaW1TdGFydDtsb2Rhc2gudHJ1bmNhdGU9dHJ1bmNhdGU7bG9kYXNoLnVuZXNjYXBlPXVuZXNjYXBlO2xvZGFzaC51bmlxdWVJZD11bmlxdWVJZDtsb2Rhc2gudXBwZXJDYXNlPXVwcGVyQ2FzZTtsb2Rhc2gudXBwZXJGaXJzdD11cHBlckZpcnN0Oy8vIEFkZCBhbGlhc2VzLlxubG9kYXNoLmVhY2g9Zm9yRWFjaDtsb2Rhc2guZWFjaFJpZ2h0PWZvckVhY2hSaWdodDtsb2Rhc2guZmlyc3Q9aGVhZDttaXhpbihsb2Rhc2gsZnVuY3Rpb24oKXt2YXIgc291cmNlPXt9O2Jhc2VGb3JPd24obG9kYXNoLGZ1bmN0aW9uKGZ1bmMsbWV0aG9kTmFtZSl7aWYoIWhhc093blByb3BlcnR5LmNhbGwobG9kYXNoLnByb3RvdHlwZSxtZXRob2ROYW1lKSl7c291cmNlW21ldGhvZE5hbWVdPWZ1bmM7fX0pO3JldHVybiBzb3VyY2U7fSgpLHtjaGFpbjpmYWxzZX0pOy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovLyoqXG4gICAgICAgICAqIFRoZSBzZW1hbnRpYyB2ZXJzaW9uIG51bWJlci5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAgICAgKi9sb2Rhc2guVkVSU0lPTj1WRVJTSU9OOy8vIEFzc2lnbiBkZWZhdWx0IHBsYWNlaG9sZGVycy5cbmFycmF5RWFjaChbJ2JpbmQnLCdiaW5kS2V5JywnY3VycnknLCdjdXJyeVJpZ2h0JywncGFydGlhbCcsJ3BhcnRpYWxSaWdodCddLGZ1bmN0aW9uKG1ldGhvZE5hbWUpe2xvZGFzaFttZXRob2ROYW1lXS5wbGFjZWhvbGRlcj1sb2Rhc2g7fSk7Ly8gQWRkIGBMYXp5V3JhcHBlcmAgbWV0aG9kcyBmb3IgYF8uZHJvcGAgYW5kIGBfLnRha2VgIHZhcmlhbnRzLlxuYXJyYXlFYWNoKFsnZHJvcCcsJ3Rha2UnXSxmdW5jdGlvbihtZXRob2ROYW1lLGluZGV4KXtMYXp5V3JhcHBlci5wcm90b3R5cGVbbWV0aG9kTmFtZV09ZnVuY3Rpb24obil7bj1uPT09dW5kZWZpbmVkPzE6bmF0aXZlTWF4KHRvSW50ZWdlcihuKSwwKTt2YXIgcmVzdWx0PXRoaXMuX19maWx0ZXJlZF9fJiYhaW5kZXg/bmV3IExhenlXcmFwcGVyKHRoaXMpOnRoaXMuY2xvbmUoKTtpZihyZXN1bHQuX19maWx0ZXJlZF9fKXtyZXN1bHQuX190YWtlQ291bnRfXz1uYXRpdmVNaW4obixyZXN1bHQuX190YWtlQ291bnRfXyk7fWVsc2V7cmVzdWx0Ll9fdmlld3NfXy5wdXNoKHtzaXplOm5hdGl2ZU1pbihuLE1BWF9BUlJBWV9MRU5HVEgpLHR5cGU6bWV0aG9kTmFtZSsocmVzdWx0Ll9fZGlyX188MD8nUmlnaHQnOicnKX0pO31yZXR1cm4gcmVzdWx0O307TGF6eVdyYXBwZXIucHJvdG90eXBlW21ldGhvZE5hbWUrJ1JpZ2h0J109ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMucmV2ZXJzZSgpW21ldGhvZE5hbWVdKG4pLnJldmVyc2UoKTt9O30pOy8vIEFkZCBgTGF6eVdyYXBwZXJgIG1ldGhvZHMgdGhhdCBhY2NlcHQgYW4gYGl0ZXJhdGVlYCB2YWx1ZS5cbmFycmF5RWFjaChbJ2ZpbHRlcicsJ21hcCcsJ3Rha2VXaGlsZSddLGZ1bmN0aW9uKG1ldGhvZE5hbWUsaW5kZXgpe3ZhciB0eXBlPWluZGV4KzEsaXNGaWx0ZXI9dHlwZT09TEFaWV9GSUxURVJfRkxBR3x8dHlwZT09TEFaWV9XSElMRV9GTEFHO0xhenlXcmFwcGVyLnByb3RvdHlwZVttZXRob2ROYW1lXT1mdW5jdGlvbihpdGVyYXRlZSl7dmFyIHJlc3VsdD10aGlzLmNsb25lKCk7cmVzdWx0Ll9faXRlcmF0ZWVzX18ucHVzaCh7aXRlcmF0ZWU6Z2V0SXRlcmF0ZWUoaXRlcmF0ZWUsMyksdHlwZTp0eXBlfSk7cmVzdWx0Ll9fZmlsdGVyZWRfXz1yZXN1bHQuX19maWx0ZXJlZF9ffHxpc0ZpbHRlcjtyZXR1cm4gcmVzdWx0O307fSk7Ly8gQWRkIGBMYXp5V3JhcHBlcmAgbWV0aG9kcyBmb3IgYF8uaGVhZGAgYW5kIGBfLmxhc3RgLlxuYXJyYXlFYWNoKFsnaGVhZCcsJ2xhc3QnXSxmdW5jdGlvbihtZXRob2ROYW1lLGluZGV4KXt2YXIgdGFrZU5hbWU9J3Rha2UnKyhpbmRleD8nUmlnaHQnOicnKTtMYXp5V3JhcHBlci5wcm90b3R5cGVbbWV0aG9kTmFtZV09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1t0YWtlTmFtZV0oMSkudmFsdWUoKVswXTt9O30pOy8vIEFkZCBgTGF6eVdyYXBwZXJgIG1ldGhvZHMgZm9yIGBfLmluaXRpYWxgIGFuZCBgXy50YWlsYC5cbmFycmF5RWFjaChbJ2luaXRpYWwnLCd0YWlsJ10sZnVuY3Rpb24obWV0aG9kTmFtZSxpbmRleCl7dmFyIGRyb3BOYW1lPSdkcm9wJysoaW5kZXg/Jyc6J1JpZ2h0Jyk7TGF6eVdyYXBwZXIucHJvdG90eXBlW21ldGhvZE5hbWVdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19maWx0ZXJlZF9fP25ldyBMYXp5V3JhcHBlcih0aGlzKTp0aGlzW2Ryb3BOYW1lXSgxKTt9O30pO0xhenlXcmFwcGVyLnByb3RvdHlwZS5jb21wYWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlsdGVyKGlkZW50aXR5KTt9O0xhenlXcmFwcGVyLnByb3RvdHlwZS5maW5kPWZ1bmN0aW9uKHByZWRpY2F0ZSl7cmV0dXJuIHRoaXMuZmlsdGVyKHByZWRpY2F0ZSkuaGVhZCgpO307TGF6eVdyYXBwZXIucHJvdG90eXBlLmZpbmRMYXN0PWZ1bmN0aW9uKHByZWRpY2F0ZSl7cmV0dXJuIHRoaXMucmV2ZXJzZSgpLmZpbmQocHJlZGljYXRlKTt9O0xhenlXcmFwcGVyLnByb3RvdHlwZS5pbnZva2VNYXA9YmFzZVJlc3QoZnVuY3Rpb24ocGF0aCxhcmdzKXtpZih0eXBlb2YgcGF0aD09PSdmdW5jdGlvbicpe3JldHVybiBuZXcgTGF6eVdyYXBwZXIodGhpcyk7fXJldHVybiB0aGlzLm1hcChmdW5jdGlvbih2YWx1ZSl7cmV0dXJuIGJhc2VJbnZva2UodmFsdWUscGF0aCxhcmdzKTt9KTt9KTtMYXp5V3JhcHBlci5wcm90b3R5cGUucmVqZWN0PWZ1bmN0aW9uKHByZWRpY2F0ZSl7cmV0dXJuIHRoaXMuZmlsdGVyKG5lZ2F0ZShnZXRJdGVyYXRlZShwcmVkaWNhdGUpKSk7fTtMYXp5V3JhcHBlci5wcm90b3R5cGUuc2xpY2U9ZnVuY3Rpb24oc3RhcnQsZW5kKXtzdGFydD10b0ludGVnZXIoc3RhcnQpO3ZhciByZXN1bHQ9dGhpcztpZihyZXN1bHQuX19maWx0ZXJlZF9fJiYoc3RhcnQ+MHx8ZW5kPDApKXtyZXR1cm4gbmV3IExhenlXcmFwcGVyKHJlc3VsdCk7fWlmKHN0YXJ0PDApe3Jlc3VsdD1yZXN1bHQudGFrZVJpZ2h0KC1zdGFydCk7fWVsc2UgaWYoc3RhcnQpe3Jlc3VsdD1yZXN1bHQuZHJvcChzdGFydCk7fWlmKGVuZCE9PXVuZGVmaW5lZCl7ZW5kPXRvSW50ZWdlcihlbmQpO3Jlc3VsdD1lbmQ8MD9yZXN1bHQuZHJvcFJpZ2h0KC1lbmQpOnJlc3VsdC50YWtlKGVuZC1zdGFydCk7fXJldHVybiByZXN1bHQ7fTtMYXp5V3JhcHBlci5wcm90b3R5cGUudGFrZVJpZ2h0V2hpbGU9ZnVuY3Rpb24ocHJlZGljYXRlKXtyZXR1cm4gdGhpcy5yZXZlcnNlKCkudGFrZVdoaWxlKHByZWRpY2F0ZSkucmV2ZXJzZSgpO307TGF6eVdyYXBwZXIucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50YWtlKE1BWF9BUlJBWV9MRU5HVEgpO307Ly8gQWRkIGBMYXp5V3JhcHBlcmAgbWV0aG9kcyB0byBgbG9kYXNoLnByb3RvdHlwZWAuXG5iYXNlRm9yT3duKExhenlXcmFwcGVyLnByb3RvdHlwZSxmdW5jdGlvbihmdW5jLG1ldGhvZE5hbWUpe3ZhciBjaGVja0l0ZXJhdGVlPS9eKD86ZmlsdGVyfGZpbmR8bWFwfHJlamVjdCl8V2hpbGUkLy50ZXN0KG1ldGhvZE5hbWUpLGlzVGFrZXI9L14oPzpoZWFkfGxhc3QpJC8udGVzdChtZXRob2ROYW1lKSxsb2Rhc2hGdW5jPWxvZGFzaFtpc1Rha2VyPyd0YWtlJysobWV0aG9kTmFtZT09J2xhc3QnPydSaWdodCc6JycpOm1ldGhvZE5hbWVdLHJldFVud3JhcHBlZD1pc1Rha2VyfHwvXmZpbmQvLnRlc3QobWV0aG9kTmFtZSk7aWYoIWxvZGFzaEZ1bmMpe3JldHVybjt9bG9kYXNoLnByb3RvdHlwZVttZXRob2ROYW1lXT1mdW5jdGlvbigpe3ZhciB2YWx1ZT10aGlzLl9fd3JhcHBlZF9fLGFyZ3M9aXNUYWtlcj9bMV06YXJndW1lbnRzLGlzTGF6eT12YWx1ZSBpbnN0YW5jZW9mIExhenlXcmFwcGVyLGl0ZXJhdGVlPWFyZ3NbMF0sdXNlTGF6eT1pc0xhenl8fGlzQXJyYXkodmFsdWUpO3ZhciBpbnRlcmNlcHRvcj1mdW5jdGlvbiBpbnRlcmNlcHRvcih2YWx1ZSl7dmFyIHJlc3VsdD1sb2Rhc2hGdW5jLmFwcGx5KGxvZGFzaCxhcnJheVB1c2goW3ZhbHVlXSxhcmdzKSk7cmV0dXJuIGlzVGFrZXImJmNoYWluQWxsP3Jlc3VsdFswXTpyZXN1bHQ7fTtpZih1c2VMYXp5JiZjaGVja0l0ZXJhdGVlJiZ0eXBlb2YgaXRlcmF0ZWU9PT0nZnVuY3Rpb24nJiZpdGVyYXRlZS5sZW5ndGghPTEpey8vIEF2b2lkIGxhenkgdXNlIGlmIHRoZSBpdGVyYXRlZSBoYXMgYSBcImxlbmd0aFwiIHZhbHVlIG90aGVyIHRoYW4gYDFgLlxuaXNMYXp5PXVzZUxhenk9ZmFsc2U7fXZhciBjaGFpbkFsbD10aGlzLl9fY2hhaW5fXyxpc0h5YnJpZD0hIXRoaXMuX19hY3Rpb25zX18ubGVuZ3RoLGlzVW53cmFwcGVkPXJldFVud3JhcHBlZCYmIWNoYWluQWxsLG9ubHlMYXp5PWlzTGF6eSYmIWlzSHlicmlkO2lmKCFyZXRVbndyYXBwZWQmJnVzZUxhenkpe3ZhbHVlPW9ubHlMYXp5P3ZhbHVlOm5ldyBMYXp5V3JhcHBlcih0aGlzKTt2YXIgcmVzdWx0PWZ1bmMuYXBwbHkodmFsdWUsYXJncyk7cmVzdWx0Ll9fYWN0aW9uc19fLnB1c2goe2Z1bmM6dGhydSxhcmdzOltpbnRlcmNlcHRvcl0sdGhpc0FyZzp1bmRlZmluZWR9KTtyZXR1cm4gbmV3IExvZGFzaFdyYXBwZXIocmVzdWx0LGNoYWluQWxsKTt9aWYoaXNVbndyYXBwZWQmJm9ubHlMYXp5KXtyZXR1cm4gZnVuYy5hcHBseSh0aGlzLGFyZ3MpO31yZXN1bHQ9dGhpcy50aHJ1KGludGVyY2VwdG9yKTtyZXR1cm4gaXNVbndyYXBwZWQ/aXNUYWtlcj9yZXN1bHQudmFsdWUoKVswXTpyZXN1bHQudmFsdWUoKTpyZXN1bHQ7fTt9KTsvLyBBZGQgYEFycmF5YCBtZXRob2RzIHRvIGBsb2Rhc2gucHJvdG90eXBlYC5cbmFycmF5RWFjaChbJ3BvcCcsJ3B1c2gnLCdzaGlmdCcsJ3NvcnQnLCdzcGxpY2UnLCd1bnNoaWZ0J10sZnVuY3Rpb24obWV0aG9kTmFtZSl7dmFyIGZ1bmM9YXJyYXlQcm90b1ttZXRob2ROYW1lXSxjaGFpbk5hbWU9L14oPzpwdXNofHNvcnR8dW5zaGlmdCkkLy50ZXN0KG1ldGhvZE5hbWUpPyd0YXAnOid0aHJ1JyxyZXRVbndyYXBwZWQ9L14oPzpwb3B8c2hpZnQpJC8udGVzdChtZXRob2ROYW1lKTtsb2Rhc2gucHJvdG90eXBlW21ldGhvZE5hbWVdPWZ1bmN0aW9uKCl7dmFyIGFyZ3M9YXJndW1lbnRzO2lmKHJldFVud3JhcHBlZCYmIXRoaXMuX19jaGFpbl9fKXt2YXIgdmFsdWU9dGhpcy52YWx1ZSgpO3JldHVybiBmdW5jLmFwcGx5KGlzQXJyYXkodmFsdWUpP3ZhbHVlOltdLGFyZ3MpO31yZXR1cm4gdGhpc1tjaGFpbk5hbWVdKGZ1bmN0aW9uKHZhbHVlKXtyZXR1cm4gZnVuYy5hcHBseShpc0FycmF5KHZhbHVlKT92YWx1ZTpbXSxhcmdzKTt9KTt9O30pOy8vIE1hcCBtaW5pZmllZCBtZXRob2QgbmFtZXMgdG8gdGhlaXIgcmVhbCBuYW1lcy5cbmJhc2VGb3JPd24oTGF6eVdyYXBwZXIucHJvdG90eXBlLGZ1bmN0aW9uKGZ1bmMsbWV0aG9kTmFtZSl7dmFyIGxvZGFzaEZ1bmM9bG9kYXNoW21ldGhvZE5hbWVdO2lmKGxvZGFzaEZ1bmMpe3ZhciBrZXk9bG9kYXNoRnVuYy5uYW1lKycnLG5hbWVzPXJlYWxOYW1lc1trZXldfHwocmVhbE5hbWVzW2tleV09W10pO25hbWVzLnB1c2goe25hbWU6bWV0aG9kTmFtZSxmdW5jOmxvZGFzaEZ1bmN9KTt9fSk7cmVhbE5hbWVzW2NyZWF0ZUh5YnJpZCh1bmRlZmluZWQsV1JBUF9CSU5EX0tFWV9GTEFHKS5uYW1lXT1be25hbWU6J3dyYXBwZXInLGZ1bmM6dW5kZWZpbmVkfV07Ly8gQWRkIG1ldGhvZHMgdG8gYExhenlXcmFwcGVyYC5cbkxhenlXcmFwcGVyLnByb3RvdHlwZS5jbG9uZT1sYXp5Q2xvbmU7TGF6eVdyYXBwZXIucHJvdG90eXBlLnJldmVyc2U9bGF6eVJldmVyc2U7TGF6eVdyYXBwZXIucHJvdG90eXBlLnZhbHVlPWxhenlWYWx1ZTsvLyBBZGQgY2hhaW4gc2VxdWVuY2UgbWV0aG9kcyB0byB0aGUgYGxvZGFzaGAgd3JhcHBlci5cbmxvZGFzaC5wcm90b3R5cGUuYXQ9d3JhcHBlckF0O2xvZGFzaC5wcm90b3R5cGUuY2hhaW49d3JhcHBlckNoYWluO2xvZGFzaC5wcm90b3R5cGUuY29tbWl0PXdyYXBwZXJDb21taXQ7bG9kYXNoLnByb3RvdHlwZS5uZXh0PXdyYXBwZXJOZXh0O2xvZGFzaC5wcm90b3R5cGUucGxhbnQ9d3JhcHBlclBsYW50O2xvZGFzaC5wcm90b3R5cGUucmV2ZXJzZT13cmFwcGVyUmV2ZXJzZTtsb2Rhc2gucHJvdG90eXBlLnRvSlNPTj1sb2Rhc2gucHJvdG90eXBlLnZhbHVlT2Y9bG9kYXNoLnByb3RvdHlwZS52YWx1ZT13cmFwcGVyVmFsdWU7Ly8gQWRkIGxhenkgYWxpYXNlcy5cbmxvZGFzaC5wcm90b3R5cGUuZmlyc3Q9bG9kYXNoLnByb3RvdHlwZS5oZWFkO2lmKHN5bUl0ZXJhdG9yKXtsb2Rhc2gucHJvdG90eXBlW3N5bUl0ZXJhdG9yXT13cmFwcGVyVG9JdGVyYXRvcjt9cmV0dXJuIGxvZGFzaDt9Oy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8vLyBFeHBvcnQgbG9kYXNoLlxudmFyIF89cnVuSW5Db250ZXh0KCk7Ly8gU29tZSBBTUQgYnVpbGQgb3B0aW1pemVycywgbGlrZSByLmpzLCBjaGVjayBmb3IgY29uZGl0aW9uIHBhdHRlcm5zIGxpa2U6XG5pZih0eXBlb2YgZGVmaW5lPT09J2Z1bmN0aW9uJyYmX3R5cGVvZihkZWZpbmUuYW1kKT09PSdvYmplY3QnJiZkZWZpbmUuYW1kKXsvLyBFeHBvc2UgTG9kYXNoIG9uIHRoZSBnbG9iYWwgb2JqZWN0IHRvIHByZXZlbnQgZXJyb3JzIHdoZW4gTG9kYXNoIGlzXG4vLyBsb2FkZWQgYnkgYSBzY3JpcHQgdGFnIGluIHRoZSBwcmVzZW5jZSBvZiBhbiBBTUQgbG9hZGVyLlxuLy8gU2VlIGh0dHA6Ly9yZXF1aXJlanMub3JnL2RvY3MvZXJyb3JzLmh0bWwjbWlzbWF0Y2ggZm9yIG1vcmUgZGV0YWlscy5cbi8vIFVzZSBgXy5ub0NvbmZsaWN0YCB0byByZW1vdmUgTG9kYXNoIGZyb20gdGhlIGdsb2JhbCBvYmplY3QuXG5yb290Ll89XzsvLyBEZWZpbmUgYXMgYW4gYW5vbnltb3VzIG1vZHVsZSBzbywgdGhyb3VnaCBwYXRoIG1hcHBpbmcsIGl0IGNhbiBiZVxuLy8gcmVmZXJlbmNlZCBhcyB0aGUgXCJ1bmRlcnNjb3JlXCIgbW9kdWxlLlxuZGVmaW5lKGZ1bmN0aW9uKCl7cmV0dXJuIF87fSk7fS8vIENoZWNrIGZvciBgZXhwb3J0c2AgYWZ0ZXIgYGRlZmluZWAgaW4gY2FzZSBhIGJ1aWxkIG9wdGltaXplciBhZGRzIGl0LlxuZWxzZSBpZihmcmVlTW9kdWxlKXsvLyBFeHBvcnQgZm9yIE5vZGUuanMuXG4oZnJlZU1vZHVsZS5leHBvcnRzPV8pLl89XzsvLyBFeHBvcnQgZm9yIENvbW1vbkpTIHN1cHBvcnQuXG5mcmVlRXhwb3J0cy5fPV87fWVsc2V7Ly8gRXhwb3J0IHRvIHRoZSBnbG9iYWwgb2JqZWN0Llxucm9vdC5fPV87fX0pLmNhbGwodW5kZWZpbmVkKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/utils/lodash.js\n");

/***/ }),

/***/ "./node_modules/element-ui/lib/utils/merge.js":
/*!****************************************************!*\
  !*** ./node_modules/element-ui/lib/utils/merge.js ***!
  \****************************************************/
/***/ ((__unused_webpack_module, exports) => {

"use strict";
eval("\n\nexports.__esModule = true;\n\nexports[\"default\"] = function (target) {\n  for (var i = 1, j = arguments.length; i < j; i++) {\n    var source = arguments[i] || {};\n    for (var prop in source) {\n      if (source.hasOwnProperty(prop)) {\n        var value = source[prop];\n        if (value !== undefined) {\n          target[prop] = value;\n        }\n      }\n    }\n  }\n\n  return target;\n};\n\n;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdXRpbHMvbWVyZ2UuanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsa0JBQWtCOztBQUVsQixrQkFBZTtBQUNmLHdDQUF3QyxPQUFPO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdXRpbHMvbWVyZ2UuanM/OGNmYyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gZnVuY3Rpb24gKHRhcmdldCkge1xuICBmb3IgKHZhciBpID0gMSwgaiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBqOyBpKyspIHtcbiAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldIHx8IHt9O1xuICAgIGZvciAodmFyIHByb3AgaW4gc291cmNlKSB7XG4gICAgICBpZiAoc291cmNlLmhhc093blByb3BlcnR5KHByb3ApKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IHNvdXJjZVtwcm9wXTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0YXJnZXRbcHJvcF0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59O1xuXG47Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/utils/merge.js\n");

/***/ }),

/***/ "./node_modules/element-ui/lib/utils/popper.js":
/*!*****************************************************!*\
  !*** ./node_modules/element-ui/lib/utils/popper.js ***!
  \*****************************************************/
/***/ ((module, exports, __webpack_require__) => {

"use strict";
eval("var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n/**\n * @fileOverview Kickass library to create and place poppers near their reference elements.\n * @version {{version}}\n * @license\n * Copyright (c) 2016 Federico Zivolo and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n//\n// Cross module loader\n// Supported: Node, AMD, Browser globals\n//\n;(function (root, factory) {\n    if (true) {\n        // AMD. Register as an anonymous module.\n        !(__WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) :\n\t\t__WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n    } else {}\n})(undefined, function () {\n\n    'use strict';\n\n    var root = window;\n\n    // default options\n    var DEFAULTS = {\n        // placement of the popper\n        placement: 'bottom',\n\n        gpuAcceleration: true,\n\n        // shift popper from its origin by the given amount of pixels (can be negative)\n        offset: 0,\n\n        // the element which will act as boundary of the popper\n        boundariesElement: 'viewport',\n\n        // amount of pixel used to define a minimum distance between the boundaries and the popper\n        boundariesPadding: 5,\n\n        // popper will try to prevent overflow following this order,\n        // by default, then, it could overflow on the left and on top of the boundariesElement\n        preventOverflowOrder: ['left', 'right', 'top', 'bottom'],\n\n        // the behavior used by flip to change the placement of the popper\n        flipBehavior: 'flip',\n\n        arrowElement: '[x-arrow]',\n\n        arrowOffset: 0,\n\n        // list of functions used to modify the offsets before they are applied to the popper\n        modifiers: ['shift', 'offset', 'preventOverflow', 'keepTogether', 'arrow', 'flip', 'applyStyle'],\n\n        modifiersIgnored: [],\n\n        forceAbsolute: false\n    };\n\n    /**\n     * Create a new Popper.js instance\n     * @constructor Popper\n     * @param {HTMLElement} reference - The reference element used to position the popper\n     * @param {HTMLElement|Object} popper\n     *      The HTML element used as popper, or a configuration used to generate the popper.\n     * @param {String} [popper.tagName='div'] The tag name of the generated popper.\n     * @param {Array} [popper.classNames=['popper']] Array of classes to apply to the generated popper.\n     * @param {Array} [popper.attributes] Array of attributes to apply, specify `attr:value` to assign a value to it.\n     * @param {HTMLElement|String} [popper.parent=window.document.body] The parent element, given as HTMLElement or as query string.\n     * @param {String} [popper.content=''] The content of the popper, it can be text, html, or node; if it is not text, set `contentType` to `html` or `node`.\n     * @param {String} [popper.contentType='text'] If `html`, the `content` will be parsed as HTML. If `node`, it will be appended as-is.\n     * @param {String} [popper.arrowTagName='div'] Same as `popper.tagName` but for the arrow element.\n     * @param {Array} [popper.arrowClassNames='popper__arrow'] Same as `popper.classNames` but for the arrow element.\n     * @param {String} [popper.arrowAttributes=['x-arrow']] Same as `popper.attributes` but for the arrow element.\n     * @param {Object} options\n     * @param {String} [options.placement=bottom]\n     *      Placement of the popper accepted values: `top(-start, -end), right(-start, -end), bottom(-start, -right),\n     *      left(-start, -end)`\n     *\n     * @param {HTMLElement|String} [options.arrowElement='[x-arrow]']\n     *      The DOM Node used as arrow for the popper, or a CSS selector used to get the DOM node. It must be child of\n     *      its parent Popper. Popper.js will apply to the given element the style required to align the arrow with its\n     *      reference element.\n     *      By default, it will look for a child node of the popper with the `x-arrow` attribute.\n     *\n     * @param {Boolean} [options.gpuAcceleration=true]\n     *      When this property is set to true, the popper position will be applied using CSS3 translate3d, allowing the\n     *      browser to use the GPU to accelerate the rendering.\n     *      If set to false, the popper will be placed using `top` and `left` properties, not using the GPU.\n     *\n     * @param {Number} [options.offset=0]\n     *      Amount of pixels the popper will be shifted (can be negative).\n     *\n     * @param {String|Element} [options.boundariesElement='viewport']\n     *      The element which will define the boundaries of the popper position, the popper will never be placed outside\n     *      of the defined boundaries (except if `keepTogether` is enabled)\n     *\n     * @param {Number} [options.boundariesPadding=5]\n     *      Additional padding for the boundaries\n     *\n     * @param {Array} [options.preventOverflowOrder=['left', 'right', 'top', 'bottom']]\n     *      Order used when Popper.js tries to avoid overflows from the boundaries, they will be checked in order,\n     *      this means that the last ones will never overflow\n     *\n     * @param {String|Array} [options.flipBehavior='flip']\n     *      The behavior used by the `flip` modifier to change the placement of the popper when the latter is trying to\n     *      overlap its reference element. Defining `flip` as value, the placement will be flipped on\n     *      its axis (`right - left`, `top - bottom`).\n     *      You can even pass an array of placements (eg: `['right', 'left', 'top']` ) to manually specify\n     *      how alter the placement when a flip is needed. (eg. in the above example, it would first flip from right to left,\n     *      then, if even in its new placement, the popper is overlapping its reference element, it will be moved to top)\n     *\n     * @param {Array} [options.modifiers=[ 'shift', 'offset', 'preventOverflow', 'keepTogether', 'arrow', 'flip', 'applyStyle']]\n     *      List of functions used to modify the data before they are applied to the popper, add your custom functions\n     *      to this array to edit the offsets and placement.\n     *      The function should reflect the @params and @returns of preventOverflow\n     *\n     * @param {Array} [options.modifiersIgnored=[]]\n     *      Put here any built-in modifier name you want to exclude from the modifiers list\n     *      The function should reflect the @params and @returns of preventOverflow\n     *\n     * @param {Boolean} [options.removeOnDestroy=false]\n     *      Set to true if you want to automatically remove the popper when you call the `destroy` method.\n     */\n    function Popper(reference, popper, options) {\n        this._reference = reference.jquery ? reference[0] : reference;\n        this.state = {};\n\n        // if the popper variable is a configuration object, parse it to generate an HTMLElement\n        // generate a default popper if is not defined\n        var isNotDefined = typeof popper === 'undefined' || popper === null;\n        var isConfig = popper && Object.prototype.toString.call(popper) === '[object Object]';\n        if (isNotDefined || isConfig) {\n            this._popper = this.parse(isConfig ? popper : {});\n        }\n        // otherwise, use the given HTMLElement as popper\n        else {\n                this._popper = popper.jquery ? popper[0] : popper;\n            }\n\n        // with {} we create a new object with the options inside it\n        this._options = Object.assign({}, DEFAULTS, options);\n\n        // refactoring modifiers' list\n        this._options.modifiers = this._options.modifiers.map(function (modifier) {\n            // remove ignored modifiers\n            if (this._options.modifiersIgnored.indexOf(modifier) !== -1) return;\n\n            // set the x-placement attribute before everything else because it could be used to add margins to the popper\n            // margins needs to be calculated to get the correct popper offsets\n            if (modifier === 'applyStyle') {\n                this._popper.setAttribute('x-placement', this._options.placement);\n            }\n\n            // return predefined modifier identified by string or keep the custom one\n            return this.modifiers[modifier] || modifier;\n        }.bind(this));\n\n        // make sure to apply the popper position before any computation\n        this.state.position = this._getPosition(this._popper, this._reference);\n        setStyle(this._popper, { position: this.state.position, top: 0 });\n\n        // fire the first update to position the popper in the right place\n        this.update();\n\n        // setup event listeners, they will take care of update the position in specific situations\n        this._setupEventListeners();\n        return this;\n    }\n\n    //\n    // Methods\n    //\n    /**\n     * Destroy the popper\n     * @method\n     * @memberof Popper\n     */\n    Popper.prototype.destroy = function () {\n        this._popper.removeAttribute('x-placement');\n        this._popper.style.left = '';\n        this._popper.style.position = '';\n        this._popper.style.top = '';\n        this._popper.style[getSupportedPropertyName('transform')] = '';\n        this._removeEventListeners();\n\n        // remove the popper if user explicity asked for the deletion on destroy\n        if (this._options.removeOnDestroy) {\n            this._popper.remove();\n        }\n        return this;\n    };\n\n    /**\n     * Updates the position of the popper, computing the new offsets and applying the new style\n     * @method\n     * @memberof Popper\n     */\n    Popper.prototype.update = function () {\n        var data = { instance: this, styles: {} };\n\n        // store placement inside the data object, modifiers will be able to edit `placement` if needed\n        // and refer to _originalPlacement to know the original value\n        data.placement = this._options.placement;\n        data._originalPlacement = this._options.placement;\n\n        // compute the popper and reference offsets and put them inside data.offsets\n        data.offsets = this._getOffsets(this._popper, this._reference, data.placement);\n\n        // get boundaries\n        data.boundaries = this._getBoundaries(data, this._options.boundariesPadding, this._options.boundariesElement);\n\n        data = this.runModifiers(data, this._options.modifiers);\n\n        if (typeof this.state.updateCallback === 'function') {\n            this.state.updateCallback(data);\n        }\n    };\n\n    /**\n     * If a function is passed, it will be executed after the initialization of popper with as first argument the Popper instance.\n     * @method\n     * @memberof Popper\n     * @param {Function} callback\n     */\n    Popper.prototype.onCreate = function (callback) {\n        // the createCallbacks return as first argument the popper instance\n        callback(this);\n        return this;\n    };\n\n    /**\n     * If a function is passed, it will be executed after each update of popper with as first argument the set of coordinates and informations\n     * used to style popper and its arrow.\n     * NOTE: it doesn't get fired on the first call of the `Popper.update()` method inside the `Popper` constructor!\n     * @method\n     * @memberof Popper\n     * @param {Function} callback\n     */\n    Popper.prototype.onUpdate = function (callback) {\n        this.state.updateCallback = callback;\n        return this;\n    };\n\n    /**\n     * Helper used to generate poppers from a configuration file\n     * @method\n     * @memberof Popper\n     * @param config {Object} configuration\n     * @returns {HTMLElement} popper\n     */\n    Popper.prototype.parse = function (config) {\n        var defaultConfig = {\n            tagName: 'div',\n            classNames: ['popper'],\n            attributes: [],\n            parent: root.document.body,\n            content: '',\n            contentType: 'text',\n            arrowTagName: 'div',\n            arrowClassNames: ['popper__arrow'],\n            arrowAttributes: ['x-arrow']\n        };\n        config = Object.assign({}, defaultConfig, config);\n\n        var d = root.document;\n\n        var popper = d.createElement(config.tagName);\n        addClassNames(popper, config.classNames);\n        addAttributes(popper, config.attributes);\n        if (config.contentType === 'node') {\n            popper.appendChild(config.content.jquery ? config.content[0] : config.content);\n        } else if (config.contentType === 'html') {\n            popper.innerHTML = config.content;\n        } else {\n            popper.textContent = config.content;\n        }\n\n        if (config.arrowTagName) {\n            var arrow = d.createElement(config.arrowTagName);\n            addClassNames(arrow, config.arrowClassNames);\n            addAttributes(arrow, config.arrowAttributes);\n            popper.appendChild(arrow);\n        }\n\n        var parent = config.parent.jquery ? config.parent[0] : config.parent;\n\n        // if the given parent is a string, use it to match an element\n        // if more than one element is matched, the first one will be used as parent\n        // if no elements are matched, the script will throw an error\n        if (typeof parent === 'string') {\n            parent = d.querySelectorAll(config.parent);\n            if (parent.length > 1) {\n                console.warn('WARNING: the given `parent` query(' + config.parent + ') matched more than one element, the first one will be used');\n            }\n            if (parent.length === 0) {\n                throw 'ERROR: the given `parent` doesn\\'t exists!';\n            }\n            parent = parent[0];\n        }\n        // if the given parent is a DOM nodes list or an array of nodes with more than one element,\n        // the first one will be used as parent\n        if (parent.length > 1 && parent instanceof Element === false) {\n            console.warn('WARNING: you have passed as parent a list of elements, the first one will be used');\n            parent = parent[0];\n        }\n\n        // append the generated popper to its parent\n        parent.appendChild(popper);\n\n        return popper;\n\n        /**\n         * Adds class names to the given element\n         * @function\n         * @ignore\n         * @param {HTMLElement} target\n         * @param {Array} classes\n         */\n        function addClassNames(element, classNames) {\n            classNames.forEach(function (className) {\n                element.classList.add(className);\n            });\n        }\n\n        /**\n         * Adds attributes to the given element\n         * @function\n         * @ignore\n         * @param {HTMLElement} target\n         * @param {Array} attributes\n         * @example\n         * addAttributes(element, [ 'data-info:foobar' ]);\n         */\n        function addAttributes(element, attributes) {\n            attributes.forEach(function (attribute) {\n                element.setAttribute(attribute.split(':')[0], attribute.split(':')[1] || '');\n            });\n        }\n    };\n\n    /**\n     * Helper used to get the position which will be applied to the popper\n     * @method\n     * @memberof Popper\n     * @param config {HTMLElement} popper element\n     * @param reference {HTMLElement} reference element\n     * @returns {String} position\n     */\n    Popper.prototype._getPosition = function (popper, reference) {\n        var container = getOffsetParent(reference);\n\n        if (this._options.forceAbsolute) {\n            return 'absolute';\n        }\n\n        // Decide if the popper will be fixed\n        // If the reference element is inside a fixed context, the popper will be fixed as well to allow them to scroll together\n        var isParentFixed = isFixed(reference, container);\n        return isParentFixed ? 'fixed' : 'absolute';\n    };\n\n    /**\n     * Get offsets to the popper\n     * @method\n     * @memberof Popper\n     * @access private\n     * @param {Element} popper - the popper element\n     * @param {Element} reference - the reference element (the popper will be relative to this)\n     * @returns {Object} An object containing the offsets which will be applied to the popper\n     */\n    Popper.prototype._getOffsets = function (popper, reference, placement) {\n        placement = placement.split('-')[0];\n        var popperOffsets = {};\n\n        popperOffsets.position = this.state.position;\n        var isParentFixed = popperOffsets.position === 'fixed';\n\n        //\n        // Get reference element position\n        //\n        var referenceOffsets = getOffsetRectRelativeToCustomParent(reference, getOffsetParent(popper), isParentFixed);\n\n        //\n        // Get popper sizes\n        //\n        var popperRect = getOuterSizes(popper);\n\n        //\n        // Compute offsets of popper\n        //\n\n        // depending by the popper placement we have to compute its offsets slightly differently\n        if (['right', 'left'].indexOf(placement) !== -1) {\n            popperOffsets.top = referenceOffsets.top + referenceOffsets.height / 2 - popperRect.height / 2;\n            if (placement === 'left') {\n                popperOffsets.left = referenceOffsets.left - popperRect.width;\n            } else {\n                popperOffsets.left = referenceOffsets.right;\n            }\n        } else {\n            popperOffsets.left = referenceOffsets.left + referenceOffsets.width / 2 - popperRect.width / 2;\n            if (placement === 'top') {\n                popperOffsets.top = referenceOffsets.top - popperRect.height;\n            } else {\n                popperOffsets.top = referenceOffsets.bottom;\n            }\n        }\n\n        // Add width and height to our offsets object\n        popperOffsets.width = popperRect.width;\n        popperOffsets.height = popperRect.height;\n\n        return {\n            popper: popperOffsets,\n            reference: referenceOffsets\n        };\n    };\n\n    /**\n     * Setup needed event listeners used to update the popper position\n     * @method\n     * @memberof Popper\n     * @access private\n     */\n    Popper.prototype._setupEventListeners = function () {\n        // NOTE: 1 DOM access here\n        this.state.updateBound = this.update.bind(this);\n        root.addEventListener('resize', this.state.updateBound);\n        // if the boundariesElement is window we don't need to listen for the scroll event\n        if (this._options.boundariesElement !== 'window') {\n            var target = getScrollParent(this._reference);\n            // here it could be both `body` or `documentElement` thanks to Firefox, we then check both\n            if (target === root.document.body || target === root.document.documentElement) {\n                target = root;\n            }\n            target.addEventListener('scroll', this.state.updateBound);\n            this.state.scrollTarget = target;\n        }\n    };\n\n    /**\n     * Remove event listeners used to update the popper position\n     * @method\n     * @memberof Popper\n     * @access private\n     */\n    Popper.prototype._removeEventListeners = function () {\n        // NOTE: 1 DOM access here\n        root.removeEventListener('resize', this.state.updateBound);\n        if (this._options.boundariesElement !== 'window' && this.state.scrollTarget) {\n            this.state.scrollTarget.removeEventListener('scroll', this.state.updateBound);\n            this.state.scrollTarget = null;\n        }\n        this.state.updateBound = null;\n    };\n\n    /**\n     * Computed the boundaries limits and return them\n     * @method\n     * @memberof Popper\n     * @access private\n     * @param {Object} data - Object containing the property \"offsets\" generated by `_getOffsets`\n     * @param {Number} padding - Boundaries padding\n     * @param {Element} boundariesElement - Element used to define the boundaries\n     * @returns {Object} Coordinates of the boundaries\n     */\n    Popper.prototype._getBoundaries = function (data, padding, boundariesElement) {\n        // NOTE: 1 DOM access here\n        var boundaries = {};\n        var width, height;\n        if (boundariesElement === 'window') {\n            var body = root.document.body,\n                html = root.document.documentElement;\n\n            height = Math.max(body.scrollHeight, body.offsetHeight, html.clientHeight, html.scrollHeight, html.offsetHeight);\n            width = Math.max(body.scrollWidth, body.offsetWidth, html.clientWidth, html.scrollWidth, html.offsetWidth);\n\n            boundaries = {\n                top: 0,\n                right: width,\n                bottom: height,\n                left: 0\n            };\n        } else if (boundariesElement === 'viewport') {\n            var offsetParent = getOffsetParent(this._popper);\n            var scrollParent = getScrollParent(this._popper);\n            var offsetParentRect = getOffsetRect(offsetParent);\n\n            // Thanks the fucking native API, `document.body.scrollTop` & `document.documentElement.scrollTop`\n            var getScrollTopValue = function getScrollTopValue(element) {\n                return element == document.body ? Math.max(document.documentElement.scrollTop, document.body.scrollTop) : element.scrollTop;\n            };\n            var getScrollLeftValue = function getScrollLeftValue(element) {\n                return element == document.body ? Math.max(document.documentElement.scrollLeft, document.body.scrollLeft) : element.scrollLeft;\n            };\n\n            // if the popper is fixed we don't have to substract scrolling from the boundaries\n            var scrollTop = data.offsets.popper.position === 'fixed' ? 0 : getScrollTopValue(scrollParent);\n            var scrollLeft = data.offsets.popper.position === 'fixed' ? 0 : getScrollLeftValue(scrollParent);\n\n            boundaries = {\n                top: 0 - (offsetParentRect.top - scrollTop),\n                right: root.document.documentElement.clientWidth - (offsetParentRect.left - scrollLeft),\n                bottom: root.document.documentElement.clientHeight - (offsetParentRect.top - scrollTop),\n                left: 0 - (offsetParentRect.left - scrollLeft)\n            };\n        } else {\n            if (getOffsetParent(this._popper) === boundariesElement) {\n                boundaries = {\n                    top: 0,\n                    left: 0,\n                    right: boundariesElement.clientWidth,\n                    bottom: boundariesElement.clientHeight\n                };\n            } else {\n                boundaries = getOffsetRect(boundariesElement);\n            }\n        }\n        boundaries.left += padding;\n        boundaries.right -= padding;\n        boundaries.top = boundaries.top + padding;\n        boundaries.bottom = boundaries.bottom - padding;\n        return boundaries;\n    };\n\n    /**\n     * Loop trough the list of modifiers and run them in order, each of them will then edit the data object\n     * @method\n     * @memberof Popper\n     * @access public\n     * @param {Object} data\n     * @param {Array} modifiers\n     * @param {Function} ends\n     */\n    Popper.prototype.runModifiers = function (data, modifiers, ends) {\n        var modifiersToRun = modifiers.slice();\n        if (ends !== undefined) {\n            modifiersToRun = this._options.modifiers.slice(0, getArrayKeyIndex(this._options.modifiers, ends));\n        }\n\n        modifiersToRun.forEach(function (modifier) {\n            if (isFunction(modifier)) {\n                data = modifier.call(this, data);\n            }\n        }.bind(this));\n\n        return data;\n    };\n\n    /**\n     * Helper used to know if the given modifier depends from another one.\n     * @method\n     * @memberof Popper\n     * @param {String} requesting - name of requesting modifier\n     * @param {String} requested - name of requested modifier\n     * @returns {Boolean}\n     */\n    Popper.prototype.isModifierRequired = function (requesting, requested) {\n        var index = getArrayKeyIndex(this._options.modifiers, requesting);\n        return !!this._options.modifiers.slice(0, index).filter(function (modifier) {\n            return modifier === requested;\n        }).length;\n    };\n\n    //\n    // Modifiers\n    //\n\n    /**\n     * Modifiers list\n     * @namespace Popper.modifiers\n     * @memberof Popper\n     * @type {Object}\n     */\n    Popper.prototype.modifiers = {};\n\n    /**\n     * Apply the computed styles to the popper element\n     * @method\n     * @memberof Popper.modifiers\n     * @argument {Object} data - The data object generated by `update` method\n     * @returns {Object} The same data object\n     */\n    Popper.prototype.modifiers.applyStyle = function (data) {\n        // apply the final offsets to the popper\n        // NOTE: 1 DOM access here\n        var styles = {\n            position: data.offsets.popper.position\n        };\n\n        // round top and left to avoid blurry text\n        var left = Math.round(data.offsets.popper.left);\n        var top = Math.round(data.offsets.popper.top);\n\n        // if gpuAcceleration is set to true and transform is supported, we use `translate3d` to apply the position to the popper\n        // we automatically use the supported prefixed version if needed\n        var prefixedProperty;\n        if (this._options.gpuAcceleration && (prefixedProperty = getSupportedPropertyName('transform'))) {\n            styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)';\n            styles.top = 0;\n            styles.left = 0;\n        }\n        // othwerise, we use the standard `left` and `top` properties\n        else {\n                styles.left = left;\n                styles.top = top;\n            }\n\n        // any property present in `data.styles` will be applied to the popper,\n        // in this way we can make the 3rd party modifiers add custom styles to it\n        // Be aware, modifiers could override the properties defined in the previous\n        // lines of this modifier!\n        Object.assign(styles, data.styles);\n\n        setStyle(this._popper, styles);\n\n        // set an attribute which will be useful to style the tooltip (use it to properly position its arrow)\n        // NOTE: 1 DOM access here\n        this._popper.setAttribute('x-placement', data.placement);\n\n        // if the arrow modifier is required and the arrow style has been computed, apply the arrow style\n        if (this.isModifierRequired(this.modifiers.applyStyle, this.modifiers.arrow) && data.offsets.arrow) {\n            setStyle(data.arrowElement, data.offsets.arrow);\n        }\n\n        return data;\n    };\n\n    /**\n     * Modifier used to shift the popper on the start or end of its reference element side\n     * @method\n     * @memberof Popper.modifiers\n     * @argument {Object} data - The data object generated by `update` method\n     * @returns {Object} The data object, properly modified\n     */\n    Popper.prototype.modifiers.shift = function (data) {\n        var placement = data.placement;\n        var basePlacement = placement.split('-')[0];\n        var shiftVariation = placement.split('-')[1];\n\n        // if shift shiftVariation is specified, run the modifier\n        if (shiftVariation) {\n            var reference = data.offsets.reference;\n            var popper = getPopperClientRect(data.offsets.popper);\n\n            var shiftOffsets = {\n                y: {\n                    start: { top: reference.top },\n                    end: { top: reference.top + reference.height - popper.height }\n                },\n                x: {\n                    start: { left: reference.left },\n                    end: { left: reference.left + reference.width - popper.width }\n                }\n            };\n\n            var axis = ['bottom', 'top'].indexOf(basePlacement) !== -1 ? 'x' : 'y';\n\n            data.offsets.popper = Object.assign(popper, shiftOffsets[axis][shiftVariation]);\n        }\n\n        return data;\n    };\n\n    /**\n     * Modifier used to make sure the popper does not overflows from it's boundaries\n     * @method\n     * @memberof Popper.modifiers\n     * @argument {Object} data - The data object generated by `update` method\n     * @returns {Object} The data object, properly modified\n     */\n    Popper.prototype.modifiers.preventOverflow = function (data) {\n        var order = this._options.preventOverflowOrder;\n        var popper = getPopperClientRect(data.offsets.popper);\n\n        var check = {\n            left: function left() {\n                var left = popper.left;\n                if (popper.left < data.boundaries.left) {\n                    left = Math.max(popper.left, data.boundaries.left);\n                }\n                return { left: left };\n            },\n            right: function right() {\n                var left = popper.left;\n                if (popper.right > data.boundaries.right) {\n                    left = Math.min(popper.left, data.boundaries.right - popper.width);\n                }\n                return { left: left };\n            },\n            top: function top() {\n                var top = popper.top;\n                if (popper.top < data.boundaries.top) {\n                    top = Math.max(popper.top, data.boundaries.top);\n                }\n                return { top: top };\n            },\n            bottom: function bottom() {\n                var top = popper.top;\n                if (popper.bottom > data.boundaries.bottom) {\n                    top = Math.min(popper.top, data.boundaries.bottom - popper.height);\n                }\n                return { top: top };\n            }\n        };\n\n        order.forEach(function (direction) {\n            data.offsets.popper = Object.assign(popper, check[direction]());\n        });\n\n        return data;\n    };\n\n    /**\n     * Modifier used to make sure the popper is always near its reference\n     * @method\n     * @memberof Popper.modifiers\n     * @argument {Object} data - The data object generated by _update method\n     * @returns {Object} The data object, properly modified\n     */\n    Popper.prototype.modifiers.keepTogether = function (data) {\n        var popper = getPopperClientRect(data.offsets.popper);\n        var reference = data.offsets.reference;\n        var f = Math.floor;\n\n        if (popper.right < f(reference.left)) {\n            data.offsets.popper.left = f(reference.left) - popper.width;\n        }\n        if (popper.left > f(reference.right)) {\n            data.offsets.popper.left = f(reference.right);\n        }\n        if (popper.bottom < f(reference.top)) {\n            data.offsets.popper.top = f(reference.top) - popper.height;\n        }\n        if (popper.top > f(reference.bottom)) {\n            data.offsets.popper.top = f(reference.bottom);\n        }\n\n        return data;\n    };\n\n    /**\n     * Modifier used to flip the placement of the popper when the latter is starting overlapping its reference element.\n     * Requires the `preventOverflow` modifier before it in order to work.\n     * **NOTE:** This modifier will run all its previous modifiers everytime it tries to flip the popper!\n     * @method\n     * @memberof Popper.modifiers\n     * @argument {Object} data - The data object generated by _update method\n     * @returns {Object} The data object, properly modified\n     */\n    Popper.prototype.modifiers.flip = function (data) {\n        // check if preventOverflow is in the list of modifiers before the flip modifier.\n        // otherwise flip would not work as expected.\n        if (!this.isModifierRequired(this.modifiers.flip, this.modifiers.preventOverflow)) {\n            console.warn('WARNING: preventOverflow modifier is required by flip modifier in order to work, be sure to include it before flip!');\n            return data;\n        }\n\n        if (data.flipped && data.placement === data._originalPlacement) {\n            // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n            return data;\n        }\n\n        var placement = data.placement.split('-')[0];\n        var placementOpposite = getOppositePlacement(placement);\n        var variation = data.placement.split('-')[1] || '';\n\n        var flipOrder = [];\n        if (this._options.flipBehavior === 'flip') {\n            flipOrder = [placement, placementOpposite];\n        } else {\n            flipOrder = this._options.flipBehavior;\n        }\n\n        flipOrder.forEach(function (step, index) {\n            if (placement !== step || flipOrder.length === index + 1) {\n                return;\n            }\n\n            placement = data.placement.split('-')[0];\n            placementOpposite = getOppositePlacement(placement);\n\n            var popperOffsets = getPopperClientRect(data.offsets.popper);\n\n            // this boolean is used to distinguish right and bottom from top and left\n            // they need different computations to get flipped\n            var a = ['right', 'bottom'].indexOf(placement) !== -1;\n\n            // using Math.floor because the reference offsets may contain decimals we are not going to consider here\n            if (a && Math.floor(data.offsets.reference[placement]) > Math.floor(popperOffsets[placementOpposite]) || !a && Math.floor(data.offsets.reference[placement]) < Math.floor(popperOffsets[placementOpposite])) {\n                // we'll use this boolean to detect any flip loop\n                data.flipped = true;\n                data.placement = flipOrder[index + 1];\n                if (variation) {\n                    data.placement += '-' + variation;\n                }\n                data.offsets.popper = this._getOffsets(this._popper, this._reference, data.placement).popper;\n\n                data = this.runModifiers(data, this._options.modifiers, this._flip);\n            }\n        }.bind(this));\n        return data;\n    };\n\n    /**\n     * Modifier used to add an offset to the popper, useful if you more granularity positioning your popper.\n     * The offsets will shift the popper on the side of its reference element.\n     * @method\n     * @memberof Popper.modifiers\n     * @argument {Object} data - The data object generated by _update method\n     * @returns {Object} The data object, properly modified\n     */\n    Popper.prototype.modifiers.offset = function (data) {\n        var offset = this._options.offset;\n        var popper = data.offsets.popper;\n\n        if (data.placement.indexOf('left') !== -1) {\n            popper.top -= offset;\n        } else if (data.placement.indexOf('right') !== -1) {\n            popper.top += offset;\n        } else if (data.placement.indexOf('top') !== -1) {\n            popper.left -= offset;\n        } else if (data.placement.indexOf('bottom') !== -1) {\n            popper.left += offset;\n        }\n        return data;\n    };\n\n    /**\n     * Modifier used to move the arrows on the edge of the popper to make sure them are always between the popper and the reference element\n     * It will use the CSS outer size of the arrow element to know how many pixels of conjuction are needed\n     * @method\n     * @memberof Popper.modifiers\n     * @argument {Object} data - The data object generated by _update method\n     * @returns {Object} The data object, properly modified\n     */\n    Popper.prototype.modifiers.arrow = function (data) {\n        var arrow = this._options.arrowElement;\n        var arrowOffset = this._options.arrowOffset;\n\n        // if the arrowElement is a string, suppose it's a CSS selector\n        if (typeof arrow === 'string') {\n            arrow = this._popper.querySelector(arrow);\n        }\n\n        // if arrow element is not found, don't run the modifier\n        if (!arrow) {\n            return data;\n        }\n\n        // the arrow element must be child of its popper\n        if (!this._popper.contains(arrow)) {\n            console.warn('WARNING: `arrowElement` must be child of its popper element!');\n            return data;\n        }\n\n        // arrow depends on keepTogether in order to work\n        if (!this.isModifierRequired(this.modifiers.arrow, this.modifiers.keepTogether)) {\n            console.warn('WARNING: keepTogether modifier is required by arrow modifier in order to work, be sure to include it before arrow!');\n            return data;\n        }\n\n        var arrowStyle = {};\n        var placement = data.placement.split('-')[0];\n        var popper = getPopperClientRect(data.offsets.popper);\n        var reference = data.offsets.reference;\n        var isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n        var len = isVertical ? 'height' : 'width';\n        var side = isVertical ? 'top' : 'left';\n        var translate = isVertical ? 'translateY' : 'translateX';\n        var altSide = isVertical ? 'left' : 'top';\n        var opSide = isVertical ? 'bottom' : 'right';\n        var arrowSize = getOuterSizes(arrow)[len];\n\n        //\n        // extends keepTogether behavior making sure the popper and its reference have enough pixels in conjuction\n        //\n\n        // top/left side\n        if (reference[opSide] - arrowSize < popper[side]) {\n            data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowSize);\n        }\n        // bottom/right side\n        if (reference[side] + arrowSize > popper[opSide]) {\n            data.offsets.popper[side] += reference[side] + arrowSize - popper[opSide];\n        }\n\n        // compute center of the popper\n        var center = reference[side] + (arrowOffset || reference[len] / 2 - arrowSize / 2);\n\n        var sideValue = center - popper[side];\n\n        // prevent arrow from being placed not contiguously to its popper\n        sideValue = Math.max(Math.min(popper[len] - arrowSize - 8, sideValue), 8);\n        arrowStyle[side] = sideValue;\n        arrowStyle[altSide] = ''; // make sure to remove any old style from the arrow\n\n        data.offsets.arrow = arrowStyle;\n        data.arrowElement = arrow;\n\n        return data;\n    };\n\n    //\n    // Helpers\n    //\n\n    /**\n     * Get the outer sizes of the given element (offset size + margins)\n     * @function\n     * @ignore\n     * @argument {Element} element\n     * @returns {Object} object containing width and height properties\n     */\n    function getOuterSizes(element) {\n        // NOTE: 1 DOM access here\n        var _display = element.style.display,\n            _visibility = element.style.visibility;\n        element.style.display = 'block';element.style.visibility = 'hidden';\n        var calcWidthToForceRepaint = element.offsetWidth;\n\n        // original method\n        var styles = root.getComputedStyle(element);\n        var x = parseFloat(styles.marginTop) + parseFloat(styles.marginBottom);\n        var y = parseFloat(styles.marginLeft) + parseFloat(styles.marginRight);\n        var result = { width: element.offsetWidth + y, height: element.offsetHeight + x };\n\n        // reset element styles\n        element.style.display = _display;element.style.visibility = _visibility;\n        return result;\n    }\n\n    /**\n     * Get the opposite placement of the given one/\n     * @function\n     * @ignore\n     * @argument {String} placement\n     * @returns {String} flipped placement\n     */\n    function getOppositePlacement(placement) {\n        var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n        return placement.replace(/left|right|bottom|top/g, function (matched) {\n            return hash[matched];\n        });\n    }\n\n    /**\n     * Given the popper offsets, generate an output similar to getBoundingClientRect\n     * @function\n     * @ignore\n     * @argument {Object} popperOffsets\n     * @returns {Object} ClientRect like output\n     */\n    function getPopperClientRect(popperOffsets) {\n        var offsets = Object.assign({}, popperOffsets);\n        offsets.right = offsets.left + offsets.width;\n        offsets.bottom = offsets.top + offsets.height;\n        return offsets;\n    }\n\n    /**\n     * Given an array and the key to find, returns its index\n     * @function\n     * @ignore\n     * @argument {Array} arr\n     * @argument keyToFind\n     * @returns index or null\n     */\n    function getArrayKeyIndex(arr, keyToFind) {\n        var i = 0,\n            key;\n        for (key in arr) {\n            if (arr[key] === keyToFind) {\n                return i;\n            }\n            i++;\n        }\n        return null;\n    }\n\n    /**\n     * Get CSS computed property of the given element\n     * @function\n     * @ignore\n     * @argument {Eement} element\n     * @argument {String} property\n     */\n    function getStyleComputedProperty(element, property) {\n        // NOTE: 1 DOM access here\n        var css = root.getComputedStyle(element, null);\n        return css[property];\n    }\n\n    /**\n     * Returns the offset parent of the given element\n     * @function\n     * @ignore\n     * @argument {Element} element\n     * @returns {Element} offset parent\n     */\n    function getOffsetParent(element) {\n        // NOTE: 1 DOM access here\n        var offsetParent = element.offsetParent;\n        return offsetParent === root.document.body || !offsetParent ? root.document.documentElement : offsetParent;\n    }\n\n    /**\n     * Returns the scrolling parent of the given element\n     * @function\n     * @ignore\n     * @argument {Element} element\n     * @returns {Element} offset parent\n     */\n    function getScrollParent(element) {\n        var parent = element.parentNode;\n\n        if (!parent) {\n            return element;\n        }\n\n        if (parent === root.document) {\n            // Firefox puts the scrollTOp value on `documentElement` instead of `body`, we then check which of them is\n            // greater than 0 and return the proper element\n            if (root.document.body.scrollTop || root.document.body.scrollLeft) {\n                return root.document.body;\n            } else {\n                return root.document.documentElement;\n            }\n        }\n\n        // Firefox want us to check `-x` and `-y` variations as well\n        if (['scroll', 'auto'].indexOf(getStyleComputedProperty(parent, 'overflow')) !== -1 || ['scroll', 'auto'].indexOf(getStyleComputedProperty(parent, 'overflow-x')) !== -1 || ['scroll', 'auto'].indexOf(getStyleComputedProperty(parent, 'overflow-y')) !== -1) {\n            // If the detected scrollParent is body, we perform an additional check on its parentNode\n            // in this way we'll get body if the browser is Chrome-ish, or documentElement otherwise\n            // fixes issue #65\n            return parent;\n        }\n        return getScrollParent(element.parentNode);\n    }\n\n    /**\n     * Check if the given element is fixed or is inside a fixed parent\n     * @function\n     * @ignore\n     * @argument {Element} element\n     * @argument {Element} customContainer\n     * @returns {Boolean} answer to \"isFixed?\"\n     */\n    function isFixed(element) {\n        if (element === root.document.body) {\n            return false;\n        }\n        if (getStyleComputedProperty(element, 'position') === 'fixed') {\n            return true;\n        }\n        return element.parentNode ? isFixed(element.parentNode) : element;\n    }\n\n    /**\n     * Set the style to the given popper\n     * @function\n     * @ignore\n     * @argument {Element} element - Element to apply the style to\n     * @argument {Object} styles - Object with a list of properties and values which will be applied to the element\n     */\n    function setStyle(element, styles) {\n        function is_numeric(n) {\n            return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n        }\n        Object.keys(styles).forEach(function (prop) {\n            var unit = '';\n            // add unit if the value is numeric and is one of the following\n            if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && is_numeric(styles[prop])) {\n                unit = 'px';\n            }\n            element.style[prop] = styles[prop] + unit;\n        });\n    }\n\n    /**\n     * Check if the given variable is a function\n     * @function\n     * @ignore\n     * @argument {*} functionToCheck - variable to check\n     * @returns {Boolean} answer to: is a function?\n     */\n    function isFunction(functionToCheck) {\n        var getType = {};\n        return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\n    }\n\n    /**\n     * Get the position of the given element, relative to its offset parent\n     * @function\n     * @ignore\n     * @param {Element} element\n     * @return {Object} position - Coordinates of the element and its `scrollTop`\n     */\n    function getOffsetRect(element) {\n        var elementRect = {\n            width: element.offsetWidth,\n            height: element.offsetHeight,\n            left: element.offsetLeft,\n            top: element.offsetTop\n        };\n\n        elementRect.right = elementRect.left + elementRect.width;\n        elementRect.bottom = elementRect.top + elementRect.height;\n\n        // position\n        return elementRect;\n    }\n\n    /**\n     * Get bounding client rect of given element\n     * @function\n     * @ignore\n     * @param {HTMLElement} element\n     * @return {Object} client rect\n     */\n    function getBoundingClientRect(element) {\n        var rect = element.getBoundingClientRect();\n\n        // whether the IE version is lower than 11\n        var isIE = navigator.userAgent.indexOf(\"MSIE\") != -1;\n\n        // fix ie document bounding top always 0 bug\n        var rectTop = isIE && element.tagName === 'HTML' ? -element.scrollTop : rect.top;\n\n        return {\n            left: rect.left,\n            top: rectTop,\n            right: rect.right,\n            bottom: rect.bottom,\n            width: rect.right - rect.left,\n            height: rect.bottom - rectTop\n        };\n    }\n\n    /**\n     * Given an element and one of its parents, return the offset\n     * @function\n     * @ignore\n     * @param {HTMLElement} element\n     * @param {HTMLElement} parent\n     * @return {Object} rect\n     */\n    function getOffsetRectRelativeToCustomParent(element, parent, fixed) {\n        var elementRect = getBoundingClientRect(element);\n        var parentRect = getBoundingClientRect(parent);\n\n        if (fixed) {\n            var scrollParent = getScrollParent(parent);\n            parentRect.top += scrollParent.scrollTop;\n            parentRect.bottom += scrollParent.scrollTop;\n            parentRect.left += scrollParent.scrollLeft;\n            parentRect.right += scrollParent.scrollLeft;\n        }\n\n        var rect = {\n            top: elementRect.top - parentRect.top,\n            left: elementRect.left - parentRect.left,\n            bottom: elementRect.top - parentRect.top + elementRect.height,\n            right: elementRect.left - parentRect.left + elementRect.width,\n            width: elementRect.width,\n            height: elementRect.height\n        };\n        return rect;\n    }\n\n    /**\n     * Get the prefixed supported property name\n     * @function\n     * @ignore\n     * @argument {String} property (camelCase)\n     * @returns {String} prefixed property (camelCase)\n     */\n    function getSupportedPropertyName(property) {\n        var prefixes = ['', 'ms', 'webkit', 'moz', 'o'];\n\n        for (var i = 0; i < prefixes.length; i++) {\n            var toCheck = prefixes[i] ? prefixes[i] + property.charAt(0).toUpperCase() + property.slice(1) : property;\n            if (typeof root.document.body.style[toCheck] !== 'undefined') {\n                return toCheck;\n            }\n        }\n        return null;\n    }\n\n    /**\n     * The Object.assign() method is used to copy the values of all enumerable own properties from one or more source\n     * objects to a target object. It will return the target object.\n     * This polyfill doesn't support symbol properties, since ES5 doesn't have symbols anyway\n     * Source: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/assign\n     * @function\n     * @ignore\n     */\n    if (!Object.assign) {\n        Object.defineProperty(Object, 'assign', {\n            enumerable: false,\n            configurable: true,\n            writable: true,\n            value: function value(target) {\n                if (target === undefined || target === null) {\n                    throw new TypeError('Cannot convert first argument to object');\n                }\n\n                var to = Object(target);\n                for (var i = 1; i < arguments.length; i++) {\n                    var nextSource = arguments[i];\n                    if (nextSource === undefined || nextSource === null) {\n                        continue;\n                    }\n                    nextSource = Object(nextSource);\n\n                    var keysArray = Object.keys(nextSource);\n                    for (var nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex++) {\n                        var nextKey = keysArray[nextIndex];\n                        var desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n                        if (desc !== undefined && desc.enumerable) {\n                            to[nextKey] = nextSource[nextKey];\n                        }\n                    }\n                }\n                return to;\n            }\n        });\n    }\n\n    return Popper;\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdXRpbHMvcG9wcGVyLmpzIiwibWFwcGluZ3MiOiJBQUFBLGtFQUFhOztBQUViLHFHQUFxRyxxQkFBcUIsbUJBQW1COztBQUU3STtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxRQUFRLElBQTBDO0FBQ2xEO0FBQ0EsUUFBUSxvQ0FBTyxPQUFPO0FBQUE7QUFBQTtBQUFBO0FBQUEsa0dBQUM7QUFDdkIsTUFBTSxLQUFLLEVBUU47QUFDTCxDQUFDOztBQUVEOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGFBQWE7QUFDNUIsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLG9CQUFvQjtBQUNuQyxlQUFlLFFBQVEsOEVBQThFO0FBQ3JHLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBLGVBQWUsb0JBQW9CO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFNBQVM7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQTtBQUNBLGVBQWUsZ0JBQWdCO0FBQy9CO0FB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QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixRQUFRO0FBQzFCLGlCQUFpQixRQUFRO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixRQUFRO0FBQzFCLGlCQUFpQixRQUFRO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQSxVQUFVO0FBQ1Y7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixRQUFRO0FBQzFCLGlCQUFpQixRQUFRO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQzs7QUFFbEM7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixTQUFTO0FBQzNCLGlCQUFpQixRQUFRO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0M7QUFDeEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7O0FBRXZCO0FBQ0EseUNBQXlDO0FBQ3pDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsUUFBUTtBQUMxQixpQkFBaUIsUUFBUTtBQUN6QjtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsUUFBUTtBQUMxQixpQkFBaUIsUUFBUTtBQUN6QjtBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLE9BQU87QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixRQUFRO0FBQzFCLGtCQUFrQixRQUFRO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixTQUFTO0FBQzNCLGlCQUFpQixTQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixTQUFTO0FBQzNCLGlCQUFpQixTQUFTO0FBQzFCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLFNBQVM7QUFDM0Isa0JBQWtCLFNBQVM7QUFDM0IsaUJBQWlCLFNBQVM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsU0FBUztBQUMzQixrQkFBa0IsUUFBUTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsR0FBRztBQUNyQixpQkFBaUIsU0FBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxTQUFTO0FBQ3hCLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGFBQWE7QUFDNUIsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGFBQWE7QUFDNUIsZUFBZSxhQUFhO0FBQzVCLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLFFBQVE7QUFDMUIsaUJBQWlCLFFBQVE7QUFDekI7QUFDQTtBQUNBOztBQUVBLHdCQUF3QixxQkFBcUI7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGdDQUFnQyxzQkFBc0I7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG9FQUFvRSxpQkFBaUI7QUFDckY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9lbGVtZW50LXVpL2xpYi91dGlscy9wb3BwZXIuanM/MWZjNyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBfdHlwZW9mID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIgPyBmdW5jdGlvbiAob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9IDogZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTtcblxuLyoqXG4gKiBAZmlsZU92ZXJ2aWV3IEtpY2thc3MgbGlicmFyeSB0byBjcmVhdGUgYW5kIHBsYWNlIHBvcHBlcnMgbmVhciB0aGVpciByZWZlcmVuY2UgZWxlbWVudHMuXG4gKiBAdmVyc2lvbiB7e3ZlcnNpb259fVxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAoYykgMjAxNiBGZWRlcmljbyBaaXZvbG8gYW5kIGNvbnRyaWJ1dG9yc1xuICpcbiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbiAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbiAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbiAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAqXG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbiAqIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cblxuLy9cbi8vIENyb3NzIG1vZHVsZSBsb2FkZXJcbi8vIFN1cHBvcnRlZDogTm9kZSwgQU1ELCBCcm93c2VyIGdsb2JhbHNcbi8vXG47KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KSB7XG4gICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICAvLyBBTUQuIFJlZ2lzdGVyIGFzIGFuIGFub255bW91cyBtb2R1bGUuXG4gICAgICAgIGRlZmluZShmYWN0b3J5KTtcbiAgICB9IGVsc2UgaWYgKCh0eXBlb2YgbW9kdWxlID09PSAndW5kZWZpbmVkJyA/ICd1bmRlZmluZWQnIDogX3R5cGVvZihtb2R1bGUpKSA9PT0gJ29iamVjdCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICAgICAgLy8gTm9kZS4gRG9lcyBub3Qgd29yayB3aXRoIHN0cmljdCBDb21tb25KUywgYnV0XG4gICAgICAgIC8vIG9ubHkgQ29tbW9uSlMtbGlrZSBlbnZpcm9ubWVudHMgdGhhdCBzdXBwb3J0IG1vZHVsZS5leHBvcnRzLFxuICAgICAgICAvLyBsaWtlIE5vZGUuXG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEJyb3dzZXIgZ2xvYmFscyAocm9vdCBpcyB3aW5kb3cpXG4gICAgICAgIHJvb3QuUG9wcGVyID0gZmFjdG9yeSgpO1xuICAgIH1cbn0pKHVuZGVmaW5lZCwgZnVuY3Rpb24gKCkge1xuXG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgdmFyIHJvb3QgPSB3aW5kb3c7XG5cbiAgICAvLyBkZWZhdWx0IG9wdGlvbnNcbiAgICB2YXIgREVGQVVMVFMgPSB7XG4gICAgICAgIC8vIHBsYWNlbWVudCBvZiB0aGUgcG9wcGVyXG4gICAgICAgIHBsYWNlbWVudDogJ2JvdHRvbScsXG5cbiAgICAgICAgZ3B1QWNjZWxlcmF0aW9uOiB0cnVlLFxuXG4gICAgICAgIC8vIHNoaWZ0IHBvcHBlciBmcm9tIGl0cyBvcmlnaW4gYnkgdGhlIGdpdmVuIGFtb3VudCBvZiBwaXhlbHMgKGNhbiBiZSBuZWdhdGl2ZSlcbiAgICAgICAgb2Zmc2V0OiAwLFxuXG4gICAgICAgIC8vIHRoZSBlbGVtZW50IHdoaWNoIHdpbGwgYWN0IGFzIGJvdW5kYXJ5IG9mIHRoZSBwb3BwZXJcbiAgICAgICAgYm91bmRhcmllc0VsZW1lbnQ6ICd2aWV3cG9ydCcsXG5cbiAgICAgICAgLy8gYW1vdW50IG9mIHBpeGVsIHVzZWQgdG8gZGVmaW5lIGEgbWluaW11bSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBib3VuZGFyaWVzIGFuZCB0aGUgcG9wcGVyXG4gICAgICAgIGJvdW5kYXJpZXNQYWRkaW5nOiA1LFxuXG4gICAgICAgIC8vIHBvcHBlciB3aWxsIHRyeSB0byBwcmV2ZW50IG92ZXJmbG93IGZvbGxvd2luZyB0aGlzIG9yZGVyLFxuICAgICAgICAvLyBieSBkZWZhdWx0LCB0aGVuLCBpdCBjb3VsZCBvdmVyZmxvdyBvbiB0aGUgbGVmdCBhbmQgb24gdG9wIG9mIHRoZSBib3VuZGFyaWVzRWxlbWVudFxuICAgICAgICBwcmV2ZW50T3ZlcmZsb3dPcmRlcjogWydsZWZ0JywgJ3JpZ2h0JywgJ3RvcCcsICdib3R0b20nXSxcblxuICAgICAgICAvLyB0aGUgYmVoYXZpb3IgdXNlZCBieSBmbGlwIHRvIGNoYW5nZSB0aGUgcGxhY2VtZW50IG9mIHRoZSBwb3BwZXJcbiAgICAgICAgZmxpcEJlaGF2aW9yOiAnZmxpcCcsXG5cbiAgICAgICAgYXJyb3dFbGVtZW50OiAnW3gtYXJyb3ddJyxcblxuICAgICAgICBhcnJvd09mZnNldDogMCxcblxuICAgICAgICAvLyBsaXN0IG9mIGZ1bmN0aW9ucyB1c2VkIHRvIG1vZGlmeSB0aGUgb2Zmc2V0cyBiZWZvcmUgdGhleSBhcmUgYXBwbGllZCB0byB0aGUgcG9wcGVyXG4gICAgICAgIG1vZGlmaWVyczogWydzaGlmdCcsICdvZmZzZXQnLCAncHJldmVudE92ZXJmbG93JywgJ2tlZXBUb2dldGhlcicsICdhcnJvdycsICdmbGlwJywgJ2FwcGx5U3R5bGUnXSxcblxuICAgICAgICBtb2RpZmllcnNJZ25vcmVkOiBbXSxcblxuICAgICAgICBmb3JjZUFic29sdXRlOiBmYWxzZVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBuZXcgUG9wcGVyLmpzIGluc3RhbmNlXG4gICAgICogQGNvbnN0cnVjdG9yIFBvcHBlclxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHJlZmVyZW5jZSAtIFRoZSByZWZlcmVuY2UgZWxlbWVudCB1c2VkIHRvIHBvc2l0aW9uIHRoZSBwb3BwZXJcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fE9iamVjdH0gcG9wcGVyXG4gICAgICogICAgICBUaGUgSFRNTCBlbGVtZW50IHVzZWQgYXMgcG9wcGVyLCBvciBhIGNvbmZpZ3VyYXRpb24gdXNlZCB0byBnZW5lcmF0ZSB0aGUgcG9wcGVyLlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBbcG9wcGVyLnRhZ05hbWU9J2RpdiddIFRoZSB0YWcgbmFtZSBvZiB0aGUgZ2VuZXJhdGVkIHBvcHBlci5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbcG9wcGVyLmNsYXNzTmFtZXM9Wydwb3BwZXInXV0gQXJyYXkgb2YgY2xhc3NlcyB0byBhcHBseSB0byB0aGUgZ2VuZXJhdGVkIHBvcHBlci5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbcG9wcGVyLmF0dHJpYnV0ZXNdIEFycmF5IG9mIGF0dHJpYnV0ZXMgdG8gYXBwbHksIHNwZWNpZnkgYGF0dHI6dmFsdWVgIHRvIGFzc2lnbiBhIHZhbHVlIHRvIGl0LlxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR8U3RyaW5nfSBbcG9wcGVyLnBhcmVudD13aW5kb3cuZG9jdW1lbnQuYm9keV0gVGhlIHBhcmVudCBlbGVtZW50LCBnaXZlbiBhcyBIVE1MRWxlbWVudCBvciBhcyBxdWVyeSBzdHJpbmcuXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IFtwb3BwZXIuY29udGVudD0nJ10gVGhlIGNvbnRlbnQgb2YgdGhlIHBvcHBlciwgaXQgY2FuIGJlIHRleHQsIGh0bWwsIG9yIG5vZGU7IGlmIGl0IGlzIG5vdCB0ZXh0LCBzZXQgYGNvbnRlbnRUeXBlYCB0byBgaHRtbGAgb3IgYG5vZGVgLlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBbcG9wcGVyLmNvbnRlbnRUeXBlPSd0ZXh0J10gSWYgYGh0bWxgLCB0aGUgYGNvbnRlbnRgIHdpbGwgYmUgcGFyc2VkIGFzIEhUTUwuIElmIGBub2RlYCwgaXQgd2lsbCBiZSBhcHBlbmRlZCBhcy1pcy5cbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gW3BvcHBlci5hcnJvd1RhZ05hbWU9J2RpdiddIFNhbWUgYXMgYHBvcHBlci50YWdOYW1lYCBidXQgZm9yIHRoZSBhcnJvdyBlbGVtZW50LlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFtwb3BwZXIuYXJyb3dDbGFzc05hbWVzPSdwb3BwZXJfX2Fycm93J10gU2FtZSBhcyBgcG9wcGVyLmNsYXNzTmFtZXNgIGJ1dCBmb3IgdGhlIGFycm93IGVsZW1lbnQuXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IFtwb3BwZXIuYXJyb3dBdHRyaWJ1dGVzPVsneC1hcnJvdyddXSBTYW1lIGFzIGBwb3BwZXIuYXR0cmlidXRlc2AgYnV0IGZvciB0aGUgYXJyb3cgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0aW9ucy5wbGFjZW1lbnQ9Ym90dG9tXVxuICAgICAqICAgICAgUGxhY2VtZW50IG9mIHRoZSBwb3BwZXIgYWNjZXB0ZWQgdmFsdWVzOiBgdG9wKC1zdGFydCwgLWVuZCksIHJpZ2h0KC1zdGFydCwgLWVuZCksIGJvdHRvbSgtc3RhcnQsIC1yaWdodCksXG4gICAgICogICAgICBsZWZ0KC1zdGFydCwgLWVuZClgXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fFN0cmluZ30gW29wdGlvbnMuYXJyb3dFbGVtZW50PSdbeC1hcnJvd10nXVxuICAgICAqICAgICAgVGhlIERPTSBOb2RlIHVzZWQgYXMgYXJyb3cgZm9yIHRoZSBwb3BwZXIsIG9yIGEgQ1NTIHNlbGVjdG9yIHVzZWQgdG8gZ2V0IHRoZSBET00gbm9kZS4gSXQgbXVzdCBiZSBjaGlsZCBvZlxuICAgICAqICAgICAgaXRzIHBhcmVudCBQb3BwZXIuIFBvcHBlci5qcyB3aWxsIGFwcGx5IHRvIHRoZSBnaXZlbiBlbGVtZW50IHRoZSBzdHlsZSByZXF1aXJlZCB0byBhbGlnbiB0aGUgYXJyb3cgd2l0aCBpdHNcbiAgICAgKiAgICAgIHJlZmVyZW5jZSBlbGVtZW50LlxuICAgICAqICAgICAgQnkgZGVmYXVsdCwgaXQgd2lsbCBsb29rIGZvciBhIGNoaWxkIG5vZGUgb2YgdGhlIHBvcHBlciB3aXRoIHRoZSBgeC1hcnJvd2AgYXR0cmlidXRlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5ncHVBY2NlbGVyYXRpb249dHJ1ZV1cbiAgICAgKiAgICAgIFdoZW4gdGhpcyBwcm9wZXJ0eSBpcyBzZXQgdG8gdHJ1ZSwgdGhlIHBvcHBlciBwb3NpdGlvbiB3aWxsIGJlIGFwcGxpZWQgdXNpbmcgQ1NTMyB0cmFuc2xhdGUzZCwgYWxsb3dpbmcgdGhlXG4gICAgICogICAgICBicm93c2VyIHRvIHVzZSB0aGUgR1BVIHRvIGFjY2VsZXJhdGUgdGhlIHJlbmRlcmluZy5cbiAgICAgKiAgICAgIElmIHNldCB0byBmYWxzZSwgdGhlIHBvcHBlciB3aWxsIGJlIHBsYWNlZCB1c2luZyBgdG9wYCBhbmQgYGxlZnRgIHByb3BlcnRpZXMsIG5vdCB1c2luZyB0aGUgR1BVLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRpb25zLm9mZnNldD0wXVxuICAgICAqICAgICAgQW1vdW50IG9mIHBpeGVscyB0aGUgcG9wcGVyIHdpbGwgYmUgc2hpZnRlZCAoY2FuIGJlIG5lZ2F0aXZlKS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfEVsZW1lbnR9IFtvcHRpb25zLmJvdW5kYXJpZXNFbGVtZW50PSd2aWV3cG9ydCddXG4gICAgICogICAgICBUaGUgZWxlbWVudCB3aGljaCB3aWxsIGRlZmluZSB0aGUgYm91bmRhcmllcyBvZiB0aGUgcG9wcGVyIHBvc2l0aW9uLCB0aGUgcG9wcGVyIHdpbGwgbmV2ZXIgYmUgcGxhY2VkIG91dHNpZGVcbiAgICAgKiAgICAgIG9mIHRoZSBkZWZpbmVkIGJvdW5kYXJpZXMgKGV4Y2VwdCBpZiBga2VlcFRvZ2V0aGVyYCBpcyBlbmFibGVkKVxuICAgICAqXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRpb25zLmJvdW5kYXJpZXNQYWRkaW5nPTVdXG4gICAgICogICAgICBBZGRpdGlvbmFsIHBhZGRpbmcgZm9yIHRoZSBib3VuZGFyaWVzXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbb3B0aW9ucy5wcmV2ZW50T3ZlcmZsb3dPcmRlcj1bJ2xlZnQnLCAncmlnaHQnLCAndG9wJywgJ2JvdHRvbSddXVxuICAgICAqICAgICAgT3JkZXIgdXNlZCB3aGVuIFBvcHBlci5qcyB0cmllcyB0byBhdm9pZCBvdmVyZmxvd3MgZnJvbSB0aGUgYm91bmRhcmllcywgdGhleSB3aWxsIGJlIGNoZWNrZWQgaW4gb3JkZXIsXG4gICAgICogICAgICB0aGlzIG1lYW5zIHRoYXQgdGhlIGxhc3Qgb25lcyB3aWxsIG5ldmVyIG92ZXJmbG93XG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N0cmluZ3xBcnJheX0gW29wdGlvbnMuZmxpcEJlaGF2aW9yPSdmbGlwJ11cbiAgICAgKiAgICAgIFRoZSBiZWhhdmlvciB1c2VkIGJ5IHRoZSBgZmxpcGAgbW9kaWZpZXIgdG8gY2hhbmdlIHRoZSBwbGFjZW1lbnQgb2YgdGhlIHBvcHBlciB3aGVuIHRoZSBsYXR0ZXIgaXMgdHJ5aW5nIHRvXG4gICAgICogICAgICBvdmVybGFwIGl0cyByZWZlcmVuY2UgZWxlbWVudC4gRGVmaW5pbmcgYGZsaXBgIGFzIHZhbHVlLCB0aGUgcGxhY2VtZW50IHdpbGwgYmUgZmxpcHBlZCBvblxuICAgICAqICAgICAgaXRzIGF4aXMgKGByaWdodCAtIGxlZnRgLCBgdG9wIC0gYm90dG9tYCkuXG4gICAgICogICAgICBZb3UgY2FuIGV2ZW4gcGFzcyBhbiBhcnJheSBvZiBwbGFjZW1lbnRzIChlZzogYFsncmlnaHQnLCAnbGVmdCcsICd0b3AnXWAgKSB0byBtYW51YWxseSBzcGVjaWZ5XG4gICAgICogICAgICBob3cgYWx0ZXIgdGhlIHBsYWNlbWVudCB3aGVuIGEgZmxpcCBpcyBuZWVkZWQuIChlZy4gaW4gdGhlIGFib3ZlIGV4YW1wbGUsIGl0IHdvdWxkIGZpcnN0IGZsaXAgZnJvbSByaWdodCB0byBsZWZ0LFxuICAgICAqICAgICAgdGhlbiwgaWYgZXZlbiBpbiBpdHMgbmV3IHBsYWNlbWVudCwgdGhlIHBvcHBlciBpcyBvdmVybGFwcGluZyBpdHMgcmVmZXJlbmNlIGVsZW1lbnQsIGl0IHdpbGwgYmUgbW92ZWQgdG8gdG9wKVxuICAgICAqXG4gICAgICogQHBhcmFtIHtBcnJheX0gW29wdGlvbnMubW9kaWZpZXJzPVsgJ3NoaWZ0JywgJ29mZnNldCcsICdwcmV2ZW50T3ZlcmZsb3cnLCAna2VlcFRvZ2V0aGVyJywgJ2Fycm93JywgJ2ZsaXAnLCAnYXBwbHlTdHlsZSddXVxuICAgICAqICAgICAgTGlzdCBvZiBmdW5jdGlvbnMgdXNlZCB0byBtb2RpZnkgdGhlIGRhdGEgYmVmb3JlIHRoZXkgYXJlIGFwcGxpZWQgdG8gdGhlIHBvcHBlciwgYWRkIHlvdXIgY3VzdG9tIGZ1bmN0aW9uc1xuICAgICAqICAgICAgdG8gdGhpcyBhcnJheSB0byBlZGl0IHRoZSBvZmZzZXRzIGFuZCBwbGFjZW1lbnQuXG4gICAgICogICAgICBUaGUgZnVuY3Rpb24gc2hvdWxkIHJlZmxlY3QgdGhlIEBwYXJhbXMgYW5kIEByZXR1cm5zIG9mIHByZXZlbnRPdmVyZmxvd1xuICAgICAqXG4gICAgICogQHBhcmFtIHtBcnJheX0gW29wdGlvbnMubW9kaWZpZXJzSWdub3JlZD1bXV1cbiAgICAgKiAgICAgIFB1dCBoZXJlIGFueSBidWlsdC1pbiBtb2RpZmllciBuYW1lIHlvdSB3YW50IHRvIGV4Y2x1ZGUgZnJvbSB0aGUgbW9kaWZpZXJzIGxpc3RcbiAgICAgKiAgICAgIFRoZSBmdW5jdGlvbiBzaG91bGQgcmVmbGVjdCB0aGUgQHBhcmFtcyBhbmQgQHJldHVybnMgb2YgcHJldmVudE92ZXJmbG93XG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLnJlbW92ZU9uRGVzdHJveT1mYWxzZV1cbiAgICAgKiAgICAgIFNldCB0byB0cnVlIGlmIHlvdSB3YW50IHRvIGF1dG9tYXRpY2FsbHkgcmVtb3ZlIHRoZSBwb3BwZXIgd2hlbiB5b3UgY2FsbCB0aGUgYGRlc3Ryb3lgIG1ldGhvZC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBQb3BwZXIocmVmZXJlbmNlLCBwb3BwZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5fcmVmZXJlbmNlID0gcmVmZXJlbmNlLmpxdWVyeSA/IHJlZmVyZW5jZVswXSA6IHJlZmVyZW5jZTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHt9O1xuXG4gICAgICAgIC8vIGlmIHRoZSBwb3BwZXIgdmFyaWFibGUgaXMgYSBjb25maWd1cmF0aW9uIG9iamVjdCwgcGFyc2UgaXQgdG8gZ2VuZXJhdGUgYW4gSFRNTEVsZW1lbnRcbiAgICAgICAgLy8gZ2VuZXJhdGUgYSBkZWZhdWx0IHBvcHBlciBpZiBpcyBub3QgZGVmaW5lZFxuICAgICAgICB2YXIgaXNOb3REZWZpbmVkID0gdHlwZW9mIHBvcHBlciA9PT0gJ3VuZGVmaW5lZCcgfHwgcG9wcGVyID09PSBudWxsO1xuICAgICAgICB2YXIgaXNDb25maWcgPSBwb3BwZXIgJiYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHBvcHBlcikgPT09ICdbb2JqZWN0IE9iamVjdF0nO1xuICAgICAgICBpZiAoaXNOb3REZWZpbmVkIHx8IGlzQ29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLl9wb3BwZXIgPSB0aGlzLnBhcnNlKGlzQ29uZmlnID8gcG9wcGVyIDoge30pO1xuICAgICAgICB9XG4gICAgICAgIC8vIG90aGVyd2lzZSwgdXNlIHRoZSBnaXZlbiBIVE1MRWxlbWVudCBhcyBwb3BwZXJcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcG9wcGVyID0gcG9wcGVyLmpxdWVyeSA/IHBvcHBlclswXSA6IHBvcHBlcjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAvLyB3aXRoIHt9IHdlIGNyZWF0ZSBhIG5ldyBvYmplY3Qgd2l0aCB0aGUgb3B0aW9ucyBpbnNpZGUgaXRcbiAgICAgICAgdGhpcy5fb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRTLCBvcHRpb25zKTtcblxuICAgICAgICAvLyByZWZhY3RvcmluZyBtb2RpZmllcnMnIGxpc3RcbiAgICAgICAgdGhpcy5fb3B0aW9ucy5tb2RpZmllcnMgPSB0aGlzLl9vcHRpb25zLm1vZGlmaWVycy5tYXAoZnVuY3Rpb24gKG1vZGlmaWVyKSB7XG4gICAgICAgICAgICAvLyByZW1vdmUgaWdub3JlZCBtb2RpZmllcnNcbiAgICAgICAgICAgIGlmICh0aGlzLl9vcHRpb25zLm1vZGlmaWVyc0lnbm9yZWQuaW5kZXhPZihtb2RpZmllcikgIT09IC0xKSByZXR1cm47XG5cbiAgICAgICAgICAgIC8vIHNldCB0aGUgeC1wbGFjZW1lbnQgYXR0cmlidXRlIGJlZm9yZSBldmVyeXRoaW5nIGVsc2UgYmVjYXVzZSBpdCBjb3VsZCBiZSB1c2VkIHRvIGFkZCBtYXJnaW5zIHRvIHRoZSBwb3BwZXJcbiAgICAgICAgICAgIC8vIG1hcmdpbnMgbmVlZHMgdG8gYmUgY2FsY3VsYXRlZCB0byBnZXQgdGhlIGNvcnJlY3QgcG9wcGVyIG9mZnNldHNcbiAgICAgICAgICAgIGlmIChtb2RpZmllciA9PT0gJ2FwcGx5U3R5bGUnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcG9wcGVyLnNldEF0dHJpYnV0ZSgneC1wbGFjZW1lbnQnLCB0aGlzLl9vcHRpb25zLnBsYWNlbWVudCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHJldHVybiBwcmVkZWZpbmVkIG1vZGlmaWVyIGlkZW50aWZpZWQgYnkgc3RyaW5nIG9yIGtlZXAgdGhlIGN1c3RvbSBvbmVcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vZGlmaWVyc1ttb2RpZmllcl0gfHwgbW9kaWZpZXI7XG4gICAgICAgIH0uYmluZCh0aGlzKSk7XG5cbiAgICAgICAgLy8gbWFrZSBzdXJlIHRvIGFwcGx5IHRoZSBwb3BwZXIgcG9zaXRpb24gYmVmb3JlIGFueSBjb21wdXRhdGlvblxuICAgICAgICB0aGlzLnN0YXRlLnBvc2l0aW9uID0gdGhpcy5fZ2V0UG9zaXRpb24odGhpcy5fcG9wcGVyLCB0aGlzLl9yZWZlcmVuY2UpO1xuICAgICAgICBzZXRTdHlsZSh0aGlzLl9wb3BwZXIsIHsgcG9zaXRpb246IHRoaXMuc3RhdGUucG9zaXRpb24sIHRvcDogMCB9KTtcblxuICAgICAgICAvLyBmaXJlIHRoZSBmaXJzdCB1cGRhdGUgdG8gcG9zaXRpb24gdGhlIHBvcHBlciBpbiB0aGUgcmlnaHQgcGxhY2VcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcblxuICAgICAgICAvLyBzZXR1cCBldmVudCBsaXN0ZW5lcnMsIHRoZXkgd2lsbCB0YWtlIGNhcmUgb2YgdXBkYXRlIHRoZSBwb3NpdGlvbiBpbiBzcGVjaWZpYyBzaXR1YXRpb25zXG4gICAgICAgIHRoaXMuX3NldHVwRXZlbnRMaXN0ZW5lcnMoKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy9cbiAgICAvLyBNZXRob2RzXG4gICAgLy9cbiAgICAvKipcbiAgICAgKiBEZXN0cm95IHRoZSBwb3BwZXJcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQG1lbWJlcm9mIFBvcHBlclxuICAgICAqL1xuICAgIFBvcHBlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5fcG9wcGVyLnJlbW92ZUF0dHJpYnV0ZSgneC1wbGFjZW1lbnQnKTtcbiAgICAgICAgdGhpcy5fcG9wcGVyLnN0eWxlLmxlZnQgPSAnJztcbiAgICAgICAgdGhpcy5fcG9wcGVyLnN0eWxlLnBvc2l0aW9uID0gJyc7XG4gICAgICAgIHRoaXMuX3BvcHBlci5zdHlsZS50b3AgPSAnJztcbiAgICAgICAgdGhpcy5fcG9wcGVyLnN0eWxlW2dldFN1cHBvcnRlZFByb3BlcnR5TmFtZSgndHJhbnNmb3JtJyldID0gJyc7XG4gICAgICAgIHRoaXMuX3JlbW92ZUV2ZW50TGlzdGVuZXJzKCk7XG5cbiAgICAgICAgLy8gcmVtb3ZlIHRoZSBwb3BwZXIgaWYgdXNlciBleHBsaWNpdHkgYXNrZWQgZm9yIHRoZSBkZWxldGlvbiBvbiBkZXN0cm95XG4gICAgICAgIGlmICh0aGlzLl9vcHRpb25zLnJlbW92ZU9uRGVzdHJveSkge1xuICAgICAgICAgICAgdGhpcy5fcG9wcGVyLnJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGVzIHRoZSBwb3NpdGlvbiBvZiB0aGUgcG9wcGVyLCBjb21wdXRpbmcgdGhlIG5ldyBvZmZzZXRzIGFuZCBhcHBseWluZyB0aGUgbmV3IHN0eWxlXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBtZW1iZXJvZiBQb3BwZXJcbiAgICAgKi9cbiAgICBQb3BwZXIucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRhdGEgPSB7IGluc3RhbmNlOiB0aGlzLCBzdHlsZXM6IHt9IH07XG5cbiAgICAgICAgLy8gc3RvcmUgcGxhY2VtZW50IGluc2lkZSB0aGUgZGF0YSBvYmplY3QsIG1vZGlmaWVycyB3aWxsIGJlIGFibGUgdG8gZWRpdCBgcGxhY2VtZW50YCBpZiBuZWVkZWRcbiAgICAgICAgLy8gYW5kIHJlZmVyIHRvIF9vcmlnaW5hbFBsYWNlbWVudCB0byBrbm93IHRoZSBvcmlnaW5hbCB2YWx1ZVxuICAgICAgICBkYXRhLnBsYWNlbWVudCA9IHRoaXMuX29wdGlvbnMucGxhY2VtZW50O1xuICAgICAgICBkYXRhLl9vcmlnaW5hbFBsYWNlbWVudCA9IHRoaXMuX29wdGlvbnMucGxhY2VtZW50O1xuXG4gICAgICAgIC8vIGNvbXB1dGUgdGhlIHBvcHBlciBhbmQgcmVmZXJlbmNlIG9mZnNldHMgYW5kIHB1dCB0aGVtIGluc2lkZSBkYXRhLm9mZnNldHNcbiAgICAgICAgZGF0YS5vZmZzZXRzID0gdGhpcy5fZ2V0T2Zmc2V0cyh0aGlzLl9wb3BwZXIsIHRoaXMuX3JlZmVyZW5jZSwgZGF0YS5wbGFjZW1lbnQpO1xuXG4gICAgICAgIC8vIGdldCBib3VuZGFyaWVzXG4gICAgICAgIGRhdGEuYm91bmRhcmllcyA9IHRoaXMuX2dldEJvdW5kYXJpZXMoZGF0YSwgdGhpcy5fb3B0aW9ucy5ib3VuZGFyaWVzUGFkZGluZywgdGhpcy5fb3B0aW9ucy5ib3VuZGFyaWVzRWxlbWVudCk7XG5cbiAgICAgICAgZGF0YSA9IHRoaXMucnVuTW9kaWZpZXJzKGRhdGEsIHRoaXMuX29wdGlvbnMubW9kaWZpZXJzKTtcblxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc3RhdGUudXBkYXRlQ2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUudXBkYXRlQ2FsbGJhY2soZGF0YSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogSWYgYSBmdW5jdGlvbiBpcyBwYXNzZWQsIGl0IHdpbGwgYmUgZXhlY3V0ZWQgYWZ0ZXIgdGhlIGluaXRpYWxpemF0aW9uIG9mIHBvcHBlciB3aXRoIGFzIGZpcnN0IGFyZ3VtZW50IHRoZSBQb3BwZXIgaW5zdGFuY2UuXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBtZW1iZXJvZiBQb3BwZXJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICAgICAqL1xuICAgIFBvcHBlci5wcm90b3R5cGUub25DcmVhdGUgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgICAgLy8gdGhlIGNyZWF0ZUNhbGxiYWNrcyByZXR1cm4gYXMgZmlyc3QgYXJndW1lbnQgdGhlIHBvcHBlciBpbnN0YW5jZVxuICAgICAgICBjYWxsYmFjayh0aGlzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIElmIGEgZnVuY3Rpb24gaXMgcGFzc2VkLCBpdCB3aWxsIGJlIGV4ZWN1dGVkIGFmdGVyIGVhY2ggdXBkYXRlIG9mIHBvcHBlciB3aXRoIGFzIGZpcnN0IGFyZ3VtZW50IHRoZSBzZXQgb2YgY29vcmRpbmF0ZXMgYW5kIGluZm9ybWF0aW9uc1xuICAgICAqIHVzZWQgdG8gc3R5bGUgcG9wcGVyIGFuZCBpdHMgYXJyb3cuXG4gICAgICogTk9URTogaXQgZG9lc24ndCBnZXQgZmlyZWQgb24gdGhlIGZpcnN0IGNhbGwgb2YgdGhlIGBQb3BwZXIudXBkYXRlKClgIG1ldGhvZCBpbnNpZGUgdGhlIGBQb3BwZXJgIGNvbnN0cnVjdG9yIVxuICAgICAqIEBtZXRob2RcbiAgICAgKiBAbWVtYmVyb2YgUG9wcGVyXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAgICAgKi9cbiAgICBQb3BwZXIucHJvdG90eXBlLm9uVXBkYXRlID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMuc3RhdGUudXBkYXRlQ2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEhlbHBlciB1c2VkIHRvIGdlbmVyYXRlIHBvcHBlcnMgZnJvbSBhIGNvbmZpZ3VyYXRpb24gZmlsZVxuICAgICAqIEBtZXRob2RcbiAgICAgKiBAbWVtYmVyb2YgUG9wcGVyXG4gICAgICogQHBhcmFtIGNvbmZpZyB7T2JqZWN0fSBjb25maWd1cmF0aW9uXG4gICAgICogQHJldHVybnMge0hUTUxFbGVtZW50fSBwb3BwZXJcbiAgICAgKi9cbiAgICBQb3BwZXIucHJvdG90eXBlLnBhcnNlID0gZnVuY3Rpb24gKGNvbmZpZykge1xuICAgICAgICB2YXIgZGVmYXVsdENvbmZpZyA9IHtcbiAgICAgICAgICAgIHRhZ05hbWU6ICdkaXYnLFxuICAgICAgICAgICAgY2xhc3NOYW1lczogWydwb3BwZXInXSxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IFtdLFxuICAgICAgICAgICAgcGFyZW50OiByb290LmRvY3VtZW50LmJvZHksXG4gICAgICAgICAgICBjb250ZW50OiAnJyxcbiAgICAgICAgICAgIGNvbnRlbnRUeXBlOiAndGV4dCcsXG4gICAgICAgICAgICBhcnJvd1RhZ05hbWU6ICdkaXYnLFxuICAgICAgICAgICAgYXJyb3dDbGFzc05hbWVzOiBbJ3BvcHBlcl9fYXJyb3cnXSxcbiAgICAgICAgICAgIGFycm93QXR0cmlidXRlczogWyd4LWFycm93J11cbiAgICAgICAgfTtcbiAgICAgICAgY29uZmlnID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdENvbmZpZywgY29uZmlnKTtcblxuICAgICAgICB2YXIgZCA9IHJvb3QuZG9jdW1lbnQ7XG5cbiAgICAgICAgdmFyIHBvcHBlciA9IGQuY3JlYXRlRWxlbWVudChjb25maWcudGFnTmFtZSk7XG4gICAgICAgIGFkZENsYXNzTmFtZXMocG9wcGVyLCBjb25maWcuY2xhc3NOYW1lcyk7XG4gICAgICAgIGFkZEF0dHJpYnV0ZXMocG9wcGVyLCBjb25maWcuYXR0cmlidXRlcyk7XG4gICAgICAgIGlmIChjb25maWcuY29udGVudFR5cGUgPT09ICdub2RlJykge1xuICAgICAgICAgICAgcG9wcGVyLmFwcGVuZENoaWxkKGNvbmZpZy5jb250ZW50LmpxdWVyeSA/IGNvbmZpZy5jb250ZW50WzBdIDogY29uZmlnLmNvbnRlbnQpO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbmZpZy5jb250ZW50VHlwZSA9PT0gJ2h0bWwnKSB7XG4gICAgICAgICAgICBwb3BwZXIuaW5uZXJIVE1MID0gY29uZmlnLmNvbnRlbnQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwb3BwZXIudGV4dENvbnRlbnQgPSBjb25maWcuY29udGVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb25maWcuYXJyb3dUYWdOYW1lKSB7XG4gICAgICAgICAgICB2YXIgYXJyb3cgPSBkLmNyZWF0ZUVsZW1lbnQoY29uZmlnLmFycm93VGFnTmFtZSk7XG4gICAgICAgICAgICBhZGRDbGFzc05hbWVzKGFycm93LCBjb25maWcuYXJyb3dDbGFzc05hbWVzKTtcbiAgICAgICAgICAgIGFkZEF0dHJpYnV0ZXMoYXJyb3csIGNvbmZpZy5hcnJvd0F0dHJpYnV0ZXMpO1xuICAgICAgICAgICAgcG9wcGVyLmFwcGVuZENoaWxkKGFycm93KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBwYXJlbnQgPSBjb25maWcucGFyZW50LmpxdWVyeSA/IGNvbmZpZy5wYXJlbnRbMF0gOiBjb25maWcucGFyZW50O1xuXG4gICAgICAgIC8vIGlmIHRoZSBnaXZlbiBwYXJlbnQgaXMgYSBzdHJpbmcsIHVzZSBpdCB0byBtYXRjaCBhbiBlbGVtZW50XG4gICAgICAgIC8vIGlmIG1vcmUgdGhhbiBvbmUgZWxlbWVudCBpcyBtYXRjaGVkLCB0aGUgZmlyc3Qgb25lIHdpbGwgYmUgdXNlZCBhcyBwYXJlbnRcbiAgICAgICAgLy8gaWYgbm8gZWxlbWVudHMgYXJlIG1hdGNoZWQsIHRoZSBzY3JpcHQgd2lsbCB0aHJvdyBhbiBlcnJvclxuICAgICAgICBpZiAodHlwZW9mIHBhcmVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHBhcmVudCA9IGQucXVlcnlTZWxlY3RvckFsbChjb25maWcucGFyZW50KTtcbiAgICAgICAgICAgIGlmIChwYXJlbnQubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignV0FSTklORzogdGhlIGdpdmVuIGBwYXJlbnRgIHF1ZXJ5KCcgKyBjb25maWcucGFyZW50ICsgJykgbWF0Y2hlZCBtb3JlIHRoYW4gb25lIGVsZW1lbnQsIHRoZSBmaXJzdCBvbmUgd2lsbCBiZSB1c2VkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocGFyZW50Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRocm93ICdFUlJPUjogdGhlIGdpdmVuIGBwYXJlbnRgIGRvZXNuXFwndCBleGlzdHMhJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhcmVudCA9IHBhcmVudFswXTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiB0aGUgZ2l2ZW4gcGFyZW50IGlzIGEgRE9NIG5vZGVzIGxpc3Qgb3IgYW4gYXJyYXkgb2Ygbm9kZXMgd2l0aCBtb3JlIHRoYW4gb25lIGVsZW1lbnQsXG4gICAgICAgIC8vIHRoZSBmaXJzdCBvbmUgd2lsbCBiZSB1c2VkIGFzIHBhcmVudFxuICAgICAgICBpZiAocGFyZW50Lmxlbmd0aCA+IDEgJiYgcGFyZW50IGluc3RhbmNlb2YgRWxlbWVudCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignV0FSTklORzogeW91IGhhdmUgcGFzc2VkIGFzIHBhcmVudCBhIGxpc3Qgb2YgZWxlbWVudHMsIHRoZSBmaXJzdCBvbmUgd2lsbCBiZSB1c2VkJyk7XG4gICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnRbMF07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBhcHBlbmQgdGhlIGdlbmVyYXRlZCBwb3BwZXIgdG8gaXRzIHBhcmVudFxuICAgICAgICBwYXJlbnQuYXBwZW5kQ2hpbGQocG9wcGVyKTtcblxuICAgICAgICByZXR1cm4gcG9wcGVyO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBZGRzIGNsYXNzIG5hbWVzIHRvIHRoZSBnaXZlbiBlbGVtZW50XG4gICAgICAgICAqIEBmdW5jdGlvblxuICAgICAgICAgKiBAaWdub3JlXG4gICAgICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHRhcmdldFxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBjbGFzc2VzXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBhZGRDbGFzc05hbWVzKGVsZW1lbnQsIGNsYXNzTmFtZXMpIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZXMuZm9yRWFjaChmdW5jdGlvbiAoY2xhc3NOYW1lKSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBZGRzIGF0dHJpYnV0ZXMgdG8gdGhlIGdpdmVuIGVsZW1lbnRcbiAgICAgICAgICogQGZ1bmN0aW9uXG4gICAgICAgICAqIEBpZ25vcmVcbiAgICAgICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gdGFyZ2V0XG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IGF0dHJpYnV0ZXNcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICogYWRkQXR0cmlidXRlcyhlbGVtZW50LCBbICdkYXRhLWluZm86Zm9vYmFyJyBdKTtcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIGFkZEF0dHJpYnV0ZXMoZWxlbWVudCwgYXR0cmlidXRlcykge1xuICAgICAgICAgICAgYXR0cmlidXRlcy5mb3JFYWNoKGZ1bmN0aW9uIChhdHRyaWJ1dGUpIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShhdHRyaWJ1dGUuc3BsaXQoJzonKVswXSwgYXR0cmlidXRlLnNwbGl0KCc6JylbMV0gfHwgJycpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogSGVscGVyIHVzZWQgdG8gZ2V0IHRoZSBwb3NpdGlvbiB3aGljaCB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIHBvcHBlclxuICAgICAqIEBtZXRob2RcbiAgICAgKiBAbWVtYmVyb2YgUG9wcGVyXG4gICAgICogQHBhcmFtIGNvbmZpZyB7SFRNTEVsZW1lbnR9IHBvcHBlciBlbGVtZW50XG4gICAgICogQHBhcmFtIHJlZmVyZW5jZSB7SFRNTEVsZW1lbnR9IHJlZmVyZW5jZSBlbGVtZW50XG4gICAgICogQHJldHVybnMge1N0cmluZ30gcG9zaXRpb25cbiAgICAgKi9cbiAgICBQb3BwZXIucHJvdG90eXBlLl9nZXRQb3NpdGlvbiA9IGZ1bmN0aW9uIChwb3BwZXIsIHJlZmVyZW5jZSkge1xuICAgICAgICB2YXIgY29udGFpbmVyID0gZ2V0T2Zmc2V0UGFyZW50KHJlZmVyZW5jZSk7XG5cbiAgICAgICAgaWYgKHRoaXMuX29wdGlvbnMuZm9yY2VBYnNvbHV0ZSkge1xuICAgICAgICAgICAgcmV0dXJuICdhYnNvbHV0ZSc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBEZWNpZGUgaWYgdGhlIHBvcHBlciB3aWxsIGJlIGZpeGVkXG4gICAgICAgIC8vIElmIHRoZSByZWZlcmVuY2UgZWxlbWVudCBpcyBpbnNpZGUgYSBmaXhlZCBjb250ZXh0LCB0aGUgcG9wcGVyIHdpbGwgYmUgZml4ZWQgYXMgd2VsbCB0byBhbGxvdyB0aGVtIHRvIHNjcm9sbCB0b2dldGhlclxuICAgICAgICB2YXIgaXNQYXJlbnRGaXhlZCA9IGlzRml4ZWQocmVmZXJlbmNlLCBjb250YWluZXIpO1xuICAgICAgICByZXR1cm4gaXNQYXJlbnRGaXhlZCA/ICdmaXhlZCcgOiAnYWJzb2x1dGUnO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBHZXQgb2Zmc2V0cyB0byB0aGUgcG9wcGVyXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBtZW1iZXJvZiBQb3BwZXJcbiAgICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IHBvcHBlciAtIHRoZSBwb3BwZXIgZWxlbWVudFxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gcmVmZXJlbmNlIC0gdGhlIHJlZmVyZW5jZSBlbGVtZW50ICh0aGUgcG9wcGVyIHdpbGwgYmUgcmVsYXRpdmUgdG8gdGhpcylcbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgb2Zmc2V0cyB3aGljaCB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIHBvcHBlclxuICAgICAqL1xuICAgIFBvcHBlci5wcm90b3R5cGUuX2dldE9mZnNldHMgPSBmdW5jdGlvbiAocG9wcGVyLCByZWZlcmVuY2UsIHBsYWNlbWVudCkge1xuICAgICAgICBwbGFjZW1lbnQgPSBwbGFjZW1lbnQuc3BsaXQoJy0nKVswXTtcbiAgICAgICAgdmFyIHBvcHBlck9mZnNldHMgPSB7fTtcblxuICAgICAgICBwb3BwZXJPZmZzZXRzLnBvc2l0aW9uID0gdGhpcy5zdGF0ZS5wb3NpdGlvbjtcbiAgICAgICAgdmFyIGlzUGFyZW50Rml4ZWQgPSBwb3BwZXJPZmZzZXRzLnBvc2l0aW9uID09PSAnZml4ZWQnO1xuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIEdldCByZWZlcmVuY2UgZWxlbWVudCBwb3NpdGlvblxuICAgICAgICAvL1xuICAgICAgICB2YXIgcmVmZXJlbmNlT2Zmc2V0cyA9IGdldE9mZnNldFJlY3RSZWxhdGl2ZVRvQ3VzdG9tUGFyZW50KHJlZmVyZW5jZSwgZ2V0T2Zmc2V0UGFyZW50KHBvcHBlciksIGlzUGFyZW50Rml4ZWQpO1xuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIEdldCBwb3BwZXIgc2l6ZXNcbiAgICAgICAgLy9cbiAgICAgICAgdmFyIHBvcHBlclJlY3QgPSBnZXRPdXRlclNpemVzKHBvcHBlcik7XG5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gQ29tcHV0ZSBvZmZzZXRzIG9mIHBvcHBlclxuICAgICAgICAvL1xuXG4gICAgICAgIC8vIGRlcGVuZGluZyBieSB0aGUgcG9wcGVyIHBsYWNlbWVudCB3ZSBoYXZlIHRvIGNvbXB1dGUgaXRzIG9mZnNldHMgc2xpZ2h0bHkgZGlmZmVyZW50bHlcbiAgICAgICAgaWYgKFsncmlnaHQnLCAnbGVmdCddLmluZGV4T2YocGxhY2VtZW50KSAhPT0gLTEpIHtcbiAgICAgICAgICAgIHBvcHBlck9mZnNldHMudG9wID0gcmVmZXJlbmNlT2Zmc2V0cy50b3AgKyByZWZlcmVuY2VPZmZzZXRzLmhlaWdodCAvIDIgLSBwb3BwZXJSZWN0LmhlaWdodCAvIDI7XG4gICAgICAgICAgICBpZiAocGxhY2VtZW50ID09PSAnbGVmdCcpIHtcbiAgICAgICAgICAgICAgICBwb3BwZXJPZmZzZXRzLmxlZnQgPSByZWZlcmVuY2VPZmZzZXRzLmxlZnQgLSBwb3BwZXJSZWN0LndpZHRoO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwb3BwZXJPZmZzZXRzLmxlZnQgPSByZWZlcmVuY2VPZmZzZXRzLnJpZ2h0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcG9wcGVyT2Zmc2V0cy5sZWZ0ID0gcmVmZXJlbmNlT2Zmc2V0cy5sZWZ0ICsgcmVmZXJlbmNlT2Zmc2V0cy53aWR0aCAvIDIgLSBwb3BwZXJSZWN0LndpZHRoIC8gMjtcbiAgICAgICAgICAgIGlmIChwbGFjZW1lbnQgPT09ICd0b3AnKSB7XG4gICAgICAgICAgICAgICAgcG9wcGVyT2Zmc2V0cy50b3AgPSByZWZlcmVuY2VPZmZzZXRzLnRvcCAtIHBvcHBlclJlY3QuaGVpZ2h0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwb3BwZXJPZmZzZXRzLnRvcCA9IHJlZmVyZW5jZU9mZnNldHMuYm90dG9tO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gQWRkIHdpZHRoIGFuZCBoZWlnaHQgdG8gb3VyIG9mZnNldHMgb2JqZWN0XG4gICAgICAgIHBvcHBlck9mZnNldHMud2lkdGggPSBwb3BwZXJSZWN0LndpZHRoO1xuICAgICAgICBwb3BwZXJPZmZzZXRzLmhlaWdodCA9IHBvcHBlclJlY3QuaGVpZ2h0O1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwb3BwZXI6IHBvcHBlck9mZnNldHMsXG4gICAgICAgICAgICByZWZlcmVuY2U6IHJlZmVyZW5jZU9mZnNldHNcbiAgICAgICAgfTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogU2V0dXAgbmVlZGVkIGV2ZW50IGxpc3RlbmVycyB1c2VkIHRvIHVwZGF0ZSB0aGUgcG9wcGVyIHBvc2l0aW9uXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBtZW1iZXJvZiBQb3BwZXJcbiAgICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICAgKi9cbiAgICBQb3BwZXIucHJvdG90eXBlLl9zZXR1cEV2ZW50TGlzdGVuZXJzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBOT1RFOiAxIERPTSBhY2Nlc3MgaGVyZVxuICAgICAgICB0aGlzLnN0YXRlLnVwZGF0ZUJvdW5kID0gdGhpcy51cGRhdGUuYmluZCh0aGlzKTtcbiAgICAgICAgcm9vdC5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLnN0YXRlLnVwZGF0ZUJvdW5kKTtcbiAgICAgICAgLy8gaWYgdGhlIGJvdW5kYXJpZXNFbGVtZW50IGlzIHdpbmRvdyB3ZSBkb24ndCBuZWVkIHRvIGxpc3RlbiBmb3IgdGhlIHNjcm9sbCBldmVudFxuICAgICAgICBpZiAodGhpcy5fb3B0aW9ucy5ib3VuZGFyaWVzRWxlbWVudCAhPT0gJ3dpbmRvdycpIHtcbiAgICAgICAgICAgIHZhciB0YXJnZXQgPSBnZXRTY3JvbGxQYXJlbnQodGhpcy5fcmVmZXJlbmNlKTtcbiAgICAgICAgICAgIC8vIGhlcmUgaXQgY291bGQgYmUgYm90aCBgYm9keWAgb3IgYGRvY3VtZW50RWxlbWVudGAgdGhhbmtzIHRvIEZpcmVmb3gsIHdlIHRoZW4gY2hlY2sgYm90aFxuICAgICAgICAgICAgaWYgKHRhcmdldCA9PT0gcm9vdC5kb2N1bWVudC5ib2R5IHx8IHRhcmdldCA9PT0gcm9vdC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXQgPSByb290O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMuc3RhdGUudXBkYXRlQm91bmQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZS5zY3JvbGxUYXJnZXQgPSB0YXJnZXQ7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGV2ZW50IGxpc3RlbmVycyB1c2VkIHRvIHVwZGF0ZSB0aGUgcG9wcGVyIHBvc2l0aW9uXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBtZW1iZXJvZiBQb3BwZXJcbiAgICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICAgKi9cbiAgICBQb3BwZXIucHJvdG90eXBlLl9yZW1vdmVFdmVudExpc3RlbmVycyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gTk9URTogMSBET00gYWNjZXNzIGhlcmVcbiAgICAgICAgcm9vdC5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLnN0YXRlLnVwZGF0ZUJvdW5kKTtcbiAgICAgICAgaWYgKHRoaXMuX29wdGlvbnMuYm91bmRhcmllc0VsZW1lbnQgIT09ICd3aW5kb3cnICYmIHRoaXMuc3RhdGUuc2Nyb2xsVGFyZ2V0KSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlLnNjcm9sbFRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLnN0YXRlLnVwZGF0ZUJvdW5kKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUuc2Nyb2xsVGFyZ2V0ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0YXRlLnVwZGF0ZUJvdW5kID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogQ29tcHV0ZWQgdGhlIGJvdW5kYXJpZXMgbGltaXRzIGFuZCByZXR1cm4gdGhlbVxuICAgICAqIEBtZXRob2RcbiAgICAgKiBAbWVtYmVyb2YgUG9wcGVyXG4gICAgICogQGFjY2VzcyBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGRhdGEgLSBPYmplY3QgY29udGFpbmluZyB0aGUgcHJvcGVydHkgXCJvZmZzZXRzXCIgZ2VuZXJhdGVkIGJ5IGBfZ2V0T2Zmc2V0c2BcbiAgICAgKiBAcGFyYW0ge051bWJlcn0gcGFkZGluZyAtIEJvdW5kYXJpZXMgcGFkZGluZ1xuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gYm91bmRhcmllc0VsZW1lbnQgLSBFbGVtZW50IHVzZWQgdG8gZGVmaW5lIHRoZSBib3VuZGFyaWVzXG4gICAgICogQHJldHVybnMge09iamVjdH0gQ29vcmRpbmF0ZXMgb2YgdGhlIGJvdW5kYXJpZXNcbiAgICAgKi9cbiAgICBQb3BwZXIucHJvdG90eXBlLl9nZXRCb3VuZGFyaWVzID0gZnVuY3Rpb24gKGRhdGEsIHBhZGRpbmcsIGJvdW5kYXJpZXNFbGVtZW50KSB7XG4gICAgICAgIC8vIE5PVEU6IDEgRE9NIGFjY2VzcyBoZXJlXG4gICAgICAgIHZhciBib3VuZGFyaWVzID0ge307XG4gICAgICAgIHZhciB3aWR0aCwgaGVpZ2h0O1xuICAgICAgICBpZiAoYm91bmRhcmllc0VsZW1lbnQgPT09ICd3aW5kb3cnKSB7XG4gICAgICAgICAgICB2YXIgYm9keSA9IHJvb3QuZG9jdW1lbnQuYm9keSxcbiAgICAgICAgICAgICAgICBodG1sID0gcm9vdC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cbiAgICAgICAgICAgIGhlaWdodCA9IE1hdGgubWF4KGJvZHkuc2Nyb2xsSGVpZ2h0LCBib2R5Lm9mZnNldEhlaWdodCwgaHRtbC5jbGllbnRIZWlnaHQsIGh0bWwuc2Nyb2xsSGVpZ2h0LCBodG1sLm9mZnNldEhlaWdodCk7XG4gICAgICAgICAgICB3aWR0aCA9IE1hdGgubWF4KGJvZHkuc2Nyb2xsV2lkdGgsIGJvZHkub2Zmc2V0V2lkdGgsIGh0bWwuY2xpZW50V2lkdGgsIGh0bWwuc2Nyb2xsV2lkdGgsIGh0bWwub2Zmc2V0V2lkdGgpO1xuXG4gICAgICAgICAgICBib3VuZGFyaWVzID0ge1xuICAgICAgICAgICAgICAgIHRvcDogMCxcbiAgICAgICAgICAgICAgICByaWdodDogd2lkdGgsXG4gICAgICAgICAgICAgICAgYm90dG9tOiBoZWlnaHQsXG4gICAgICAgICAgICAgICAgbGVmdDogMFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmIChib3VuZGFyaWVzRWxlbWVudCA9PT0gJ3ZpZXdwb3J0Jykge1xuICAgICAgICAgICAgdmFyIG9mZnNldFBhcmVudCA9IGdldE9mZnNldFBhcmVudCh0aGlzLl9wb3BwZXIpO1xuICAgICAgICAgICAgdmFyIHNjcm9sbFBhcmVudCA9IGdldFNjcm9sbFBhcmVudCh0aGlzLl9wb3BwZXIpO1xuICAgICAgICAgICAgdmFyIG9mZnNldFBhcmVudFJlY3QgPSBnZXRPZmZzZXRSZWN0KG9mZnNldFBhcmVudCk7XG5cbiAgICAgICAgICAgIC8vIFRoYW5rcyB0aGUgZnVja2luZyBuYXRpdmUgQVBJLCBgZG9jdW1lbnQuYm9keS5zY3JvbGxUb3BgICYgYGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3BgXG4gICAgICAgICAgICB2YXIgZ2V0U2Nyb2xsVG9wVmFsdWUgPSBmdW5jdGlvbiBnZXRTY3JvbGxUb3BWYWx1ZShlbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQgPT0gZG9jdW1lbnQuYm9keSA/IE1hdGgubWF4KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AsIGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wKSA6IGVsZW1lbnQuc2Nyb2xsVG9wO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHZhciBnZXRTY3JvbGxMZWZ0VmFsdWUgPSBmdW5jdGlvbiBnZXRTY3JvbGxMZWZ0VmFsdWUoZWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50ID09IGRvY3VtZW50LmJvZHkgPyBNYXRoLm1heChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdCwgZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0KSA6IGVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIC8vIGlmIHRoZSBwb3BwZXIgaXMgZml4ZWQgd2UgZG9uJ3QgaGF2ZSB0byBzdWJzdHJhY3Qgc2Nyb2xsaW5nIGZyb20gdGhlIGJvdW5kYXJpZXNcbiAgICAgICAgICAgIHZhciBzY3JvbGxUb3AgPSBkYXRhLm9mZnNldHMucG9wcGVyLnBvc2l0aW9uID09PSAnZml4ZWQnID8gMCA6IGdldFNjcm9sbFRvcFZhbHVlKHNjcm9sbFBhcmVudCk7XG4gICAgICAgICAgICB2YXIgc2Nyb2xsTGVmdCA9IGRhdGEub2Zmc2V0cy5wb3BwZXIucG9zaXRpb24gPT09ICdmaXhlZCcgPyAwIDogZ2V0U2Nyb2xsTGVmdFZhbHVlKHNjcm9sbFBhcmVudCk7XG5cbiAgICAgICAgICAgIGJvdW5kYXJpZXMgPSB7XG4gICAgICAgICAgICAgICAgdG9wOiAwIC0gKG9mZnNldFBhcmVudFJlY3QudG9wIC0gc2Nyb2xsVG9wKSxcbiAgICAgICAgICAgICAgICByaWdodDogcm9vdC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGggLSAob2Zmc2V0UGFyZW50UmVjdC5sZWZ0IC0gc2Nyb2xsTGVmdCksXG4gICAgICAgICAgICAgICAgYm90dG9tOiByb290LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQgLSAob2Zmc2V0UGFyZW50UmVjdC50b3AgLSBzY3JvbGxUb3ApLFxuICAgICAgICAgICAgICAgIGxlZnQ6IDAgLSAob2Zmc2V0UGFyZW50UmVjdC5sZWZ0IC0gc2Nyb2xsTGVmdClcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoZ2V0T2Zmc2V0UGFyZW50KHRoaXMuX3BvcHBlcikgPT09IGJvdW5kYXJpZXNFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgYm91bmRhcmllcyA9IHtcbiAgICAgICAgICAgICAgICAgICAgdG9wOiAwLFxuICAgICAgICAgICAgICAgICAgICBsZWZ0OiAwLFxuICAgICAgICAgICAgICAgICAgICByaWdodDogYm91bmRhcmllc0VsZW1lbnQuY2xpZW50V2lkdGgsXG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTogYm91bmRhcmllc0VsZW1lbnQuY2xpZW50SGVpZ2h0XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYm91bmRhcmllcyA9IGdldE9mZnNldFJlY3QoYm91bmRhcmllc0VsZW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJvdW5kYXJpZXMubGVmdCArPSBwYWRkaW5nO1xuICAgICAgICBib3VuZGFyaWVzLnJpZ2h0IC09IHBhZGRpbmc7XG4gICAgICAgIGJvdW5kYXJpZXMudG9wID0gYm91bmRhcmllcy50b3AgKyBwYWRkaW5nO1xuICAgICAgICBib3VuZGFyaWVzLmJvdHRvbSA9IGJvdW5kYXJpZXMuYm90dG9tIC0gcGFkZGluZztcbiAgICAgICAgcmV0dXJuIGJvdW5kYXJpZXM7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIExvb3AgdHJvdWdoIHRoZSBsaXN0IG9mIG1vZGlmaWVycyBhbmQgcnVuIHRoZW0gaW4gb3JkZXIsIGVhY2ggb2YgdGhlbSB3aWxsIHRoZW4gZWRpdCB0aGUgZGF0YSBvYmplY3RcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQG1lbWJlcm9mIFBvcHBlclxuICAgICAqIEBhY2Nlc3MgcHVibGljXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGRhdGFcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBtb2RpZmllcnNcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBlbmRzXG4gICAgICovXG4gICAgUG9wcGVyLnByb3RvdHlwZS5ydW5Nb2RpZmllcnMgPSBmdW5jdGlvbiAoZGF0YSwgbW9kaWZpZXJzLCBlbmRzKSB7XG4gICAgICAgIHZhciBtb2RpZmllcnNUb1J1biA9IG1vZGlmaWVycy5zbGljZSgpO1xuICAgICAgICBpZiAoZW5kcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBtb2RpZmllcnNUb1J1biA9IHRoaXMuX29wdGlvbnMubW9kaWZpZXJzLnNsaWNlKDAsIGdldEFycmF5S2V5SW5kZXgodGhpcy5fb3B0aW9ucy5tb2RpZmllcnMsIGVuZHMpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG1vZGlmaWVyc1RvUnVuLmZvckVhY2goZnVuY3Rpb24gKG1vZGlmaWVyKSB7XG4gICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihtb2RpZmllcikpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gbW9kaWZpZXIuY2FsbCh0aGlzLCBkYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfS5iaW5kKHRoaXMpKTtcblxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogSGVscGVyIHVzZWQgdG8ga25vdyBpZiB0aGUgZ2l2ZW4gbW9kaWZpZXIgZGVwZW5kcyBmcm9tIGFub3RoZXIgb25lLlxuICAgICAqIEBtZXRob2RcbiAgICAgKiBAbWVtYmVyb2YgUG9wcGVyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHJlcXVlc3RpbmcgLSBuYW1lIG9mIHJlcXVlc3RpbmcgbW9kaWZpZXJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gcmVxdWVzdGVkIC0gbmFtZSBvZiByZXF1ZXN0ZWQgbW9kaWZpZXJcbiAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbn1cbiAgICAgKi9cbiAgICBQb3BwZXIucHJvdG90eXBlLmlzTW9kaWZpZXJSZXF1aXJlZCA9IGZ1bmN0aW9uIChyZXF1ZXN0aW5nLCByZXF1ZXN0ZWQpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gZ2V0QXJyYXlLZXlJbmRleCh0aGlzLl9vcHRpb25zLm1vZGlmaWVycywgcmVxdWVzdGluZyk7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX29wdGlvbnMubW9kaWZpZXJzLnNsaWNlKDAsIGluZGV4KS5maWx0ZXIoZnVuY3Rpb24gKG1vZGlmaWVyKSB7XG4gICAgICAgICAgICByZXR1cm4gbW9kaWZpZXIgPT09IHJlcXVlc3RlZDtcbiAgICAgICAgfSkubGVuZ3RoO1xuICAgIH07XG5cbiAgICAvL1xuICAgIC8vIE1vZGlmaWVyc1xuICAgIC8vXG5cbiAgICAvKipcbiAgICAgKiBNb2RpZmllcnMgbGlzdFxuICAgICAqIEBuYW1lc3BhY2UgUG9wcGVyLm1vZGlmaWVyc1xuICAgICAqIEBtZW1iZXJvZiBQb3BwZXJcbiAgICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgICAqL1xuICAgIFBvcHBlci5wcm90b3R5cGUubW9kaWZpZXJzID0ge307XG5cbiAgICAvKipcbiAgICAgKiBBcHBseSB0aGUgY29tcHV0ZWQgc3R5bGVzIHRvIHRoZSBwb3BwZXIgZWxlbWVudFxuICAgICAqIEBtZXRob2RcbiAgICAgKiBAbWVtYmVyb2YgUG9wcGVyLm1vZGlmaWVyc1xuICAgICAqIEBhcmd1bWVudCB7T2JqZWN0fSBkYXRhIC0gVGhlIGRhdGEgb2JqZWN0IGdlbmVyYXRlZCBieSBgdXBkYXRlYCBtZXRob2RcbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgc2FtZSBkYXRhIG9iamVjdFxuICAgICAqL1xuICAgIFBvcHBlci5wcm90b3R5cGUubW9kaWZpZXJzLmFwcGx5U3R5bGUgPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAvLyBhcHBseSB0aGUgZmluYWwgb2Zmc2V0cyB0byB0aGUgcG9wcGVyXG4gICAgICAgIC8vIE5PVEU6IDEgRE9NIGFjY2VzcyBoZXJlXG4gICAgICAgIHZhciBzdHlsZXMgPSB7XG4gICAgICAgICAgICBwb3NpdGlvbjogZGF0YS5vZmZzZXRzLnBvcHBlci5wb3NpdGlvblxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIHJvdW5kIHRvcCBhbmQgbGVmdCB0byBhdm9pZCBibHVycnkgdGV4dFxuICAgICAgICB2YXIgbGVmdCA9IE1hdGgucm91bmQoZGF0YS5vZmZzZXRzLnBvcHBlci5sZWZ0KTtcbiAgICAgICAgdmFyIHRvcCA9IE1hdGgucm91bmQoZGF0YS5vZmZzZXRzLnBvcHBlci50b3ApO1xuXG4gICAgICAgIC8vIGlmIGdwdUFjY2VsZXJhdGlvbiBpcyBzZXQgdG8gdHJ1ZSBhbmQgdHJhbnNmb3JtIGlzIHN1cHBvcnRlZCwgd2UgdXNlIGB0cmFuc2xhdGUzZGAgdG8gYXBwbHkgdGhlIHBvc2l0aW9uIHRvIHRoZSBwb3BwZXJcbiAgICAgICAgLy8gd2UgYXV0b21hdGljYWxseSB1c2UgdGhlIHN1cHBvcnRlZCBwcmVmaXhlZCB2ZXJzaW9uIGlmIG5lZWRlZFxuICAgICAgICB2YXIgcHJlZml4ZWRQcm9wZXJ0eTtcbiAgICAgICAgaWYgKHRoaXMuX29wdGlvbnMuZ3B1QWNjZWxlcmF0aW9uICYmIChwcmVmaXhlZFByb3BlcnR5ID0gZ2V0U3VwcG9ydGVkUHJvcGVydHlOYW1lKCd0cmFuc2Zvcm0nKSkpIHtcbiAgICAgICAgICAgIHN0eWxlc1twcmVmaXhlZFByb3BlcnR5XSA9ICd0cmFuc2xhdGUzZCgnICsgbGVmdCArICdweCwgJyArIHRvcCArICdweCwgMCknO1xuICAgICAgICAgICAgc3R5bGVzLnRvcCA9IDA7XG4gICAgICAgICAgICBzdHlsZXMubGVmdCA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgLy8gb3Rod2VyaXNlLCB3ZSB1c2UgdGhlIHN0YW5kYXJkIGBsZWZ0YCBhbmQgYHRvcGAgcHJvcGVydGllc1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdHlsZXMubGVmdCA9IGxlZnQ7XG4gICAgICAgICAgICAgICAgc3R5bGVzLnRvcCA9IHRvcDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAvLyBhbnkgcHJvcGVydHkgcHJlc2VudCBpbiBgZGF0YS5zdHlsZXNgIHdpbGwgYmUgYXBwbGllZCB0byB0aGUgcG9wcGVyLFxuICAgICAgICAvLyBpbiB0aGlzIHdheSB3ZSBjYW4gbWFrZSB0aGUgM3JkIHBhcnR5IG1vZGlmaWVycyBhZGQgY3VzdG9tIHN0eWxlcyB0byBpdFxuICAgICAgICAvLyBCZSBhd2FyZSwgbW9kaWZpZXJzIGNvdWxkIG92ZXJyaWRlIHRoZSBwcm9wZXJ0aWVzIGRlZmluZWQgaW4gdGhlIHByZXZpb3VzXG4gICAgICAgIC8vIGxpbmVzIG9mIHRoaXMgbW9kaWZpZXIhXG4gICAgICAgIE9iamVjdC5hc3NpZ24oc3R5bGVzLCBkYXRhLnN0eWxlcyk7XG5cbiAgICAgICAgc2V0U3R5bGUodGhpcy5fcG9wcGVyLCBzdHlsZXMpO1xuXG4gICAgICAgIC8vIHNldCBhbiBhdHRyaWJ1dGUgd2hpY2ggd2lsbCBiZSB1c2VmdWwgdG8gc3R5bGUgdGhlIHRvb2x0aXAgKHVzZSBpdCB0byBwcm9wZXJseSBwb3NpdGlvbiBpdHMgYXJyb3cpXG4gICAgICAgIC8vIE5PVEU6IDEgRE9NIGFjY2VzcyBoZXJlXG4gICAgICAgIHRoaXMuX3BvcHBlci5zZXRBdHRyaWJ1dGUoJ3gtcGxhY2VtZW50JywgZGF0YS5wbGFjZW1lbnQpO1xuXG4gICAgICAgIC8vIGlmIHRoZSBhcnJvdyBtb2RpZmllciBpcyByZXF1aXJlZCBhbmQgdGhlIGFycm93IHN0eWxlIGhhcyBiZWVuIGNvbXB1dGVkLCBhcHBseSB0aGUgYXJyb3cgc3R5bGVcbiAgICAgICAgaWYgKHRoaXMuaXNNb2RpZmllclJlcXVpcmVkKHRoaXMubW9kaWZpZXJzLmFwcGx5U3R5bGUsIHRoaXMubW9kaWZpZXJzLmFycm93KSAmJiBkYXRhLm9mZnNldHMuYXJyb3cpIHtcbiAgICAgICAgICAgIHNldFN0eWxlKGRhdGEuYXJyb3dFbGVtZW50LCBkYXRhLm9mZnNldHMuYXJyb3cpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIE1vZGlmaWVyIHVzZWQgdG8gc2hpZnQgdGhlIHBvcHBlciBvbiB0aGUgc3RhcnQgb3IgZW5kIG9mIGl0cyByZWZlcmVuY2UgZWxlbWVudCBzaWRlXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBtZW1iZXJvZiBQb3BwZXIubW9kaWZpZXJzXG4gICAgICogQGFyZ3VtZW50IHtPYmplY3R9IGRhdGEgLSBUaGUgZGF0YSBvYmplY3QgZ2VuZXJhdGVkIGJ5IGB1cGRhdGVgIG1ldGhvZFxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBkYXRhIG9iamVjdCwgcHJvcGVybHkgbW9kaWZpZWRcbiAgICAgKi9cbiAgICBQb3BwZXIucHJvdG90eXBlLm1vZGlmaWVycy5zaGlmdCA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIHZhciBwbGFjZW1lbnQgPSBkYXRhLnBsYWNlbWVudDtcbiAgICAgICAgdmFyIGJhc2VQbGFjZW1lbnQgPSBwbGFjZW1lbnQuc3BsaXQoJy0nKVswXTtcbiAgICAgICAgdmFyIHNoaWZ0VmFyaWF0aW9uID0gcGxhY2VtZW50LnNwbGl0KCctJylbMV07XG5cbiAgICAgICAgLy8gaWYgc2hpZnQgc2hpZnRWYXJpYXRpb24gaXMgc3BlY2lmaWVkLCBydW4gdGhlIG1vZGlmaWVyXG4gICAgICAgIGlmIChzaGlmdFZhcmlhdGlvbikge1xuICAgICAgICAgICAgdmFyIHJlZmVyZW5jZSA9IGRhdGEub2Zmc2V0cy5yZWZlcmVuY2U7XG4gICAgICAgICAgICB2YXIgcG9wcGVyID0gZ2V0UG9wcGVyQ2xpZW50UmVjdChkYXRhLm9mZnNldHMucG9wcGVyKTtcblxuICAgICAgICAgICAgdmFyIHNoaWZ0T2Zmc2V0cyA9IHtcbiAgICAgICAgICAgICAgICB5OiB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0OiB7IHRvcDogcmVmZXJlbmNlLnRvcCB9LFxuICAgICAgICAgICAgICAgICAgICBlbmQ6IHsgdG9wOiByZWZlcmVuY2UudG9wICsgcmVmZXJlbmNlLmhlaWdodCAtIHBvcHBlci5oZWlnaHQgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgeDoge1xuICAgICAgICAgICAgICAgICAgICBzdGFydDogeyBsZWZ0OiByZWZlcmVuY2UubGVmdCB9LFxuICAgICAgICAgICAgICAgICAgICBlbmQ6IHsgbGVmdDogcmVmZXJlbmNlLmxlZnQgKyByZWZlcmVuY2Uud2lkdGggLSBwb3BwZXIud2lkdGggfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHZhciBheGlzID0gWydib3R0b20nLCAndG9wJ10uaW5kZXhPZihiYXNlUGxhY2VtZW50KSAhPT0gLTEgPyAneCcgOiAneSc7XG5cbiAgICAgICAgICAgIGRhdGEub2Zmc2V0cy5wb3BwZXIgPSBPYmplY3QuYXNzaWduKHBvcHBlciwgc2hpZnRPZmZzZXRzW2F4aXNdW3NoaWZ0VmFyaWF0aW9uXSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogTW9kaWZpZXIgdXNlZCB0byBtYWtlIHN1cmUgdGhlIHBvcHBlciBkb2VzIG5vdCBvdmVyZmxvd3MgZnJvbSBpdCdzIGJvdW5kYXJpZXNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQG1lbWJlcm9mIFBvcHBlci5tb2RpZmllcnNcbiAgICAgKiBAYXJndW1lbnQge09iamVjdH0gZGF0YSAtIFRoZSBkYXRhIG9iamVjdCBnZW5lcmF0ZWQgYnkgYHVwZGF0ZWAgbWV0aG9kXG4gICAgICogQHJldHVybnMge09iamVjdH0gVGhlIGRhdGEgb2JqZWN0LCBwcm9wZXJseSBtb2RpZmllZFxuICAgICAqL1xuICAgIFBvcHBlci5wcm90b3R5cGUubW9kaWZpZXJzLnByZXZlbnRPdmVyZmxvdyA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIHZhciBvcmRlciA9IHRoaXMuX29wdGlvbnMucHJldmVudE92ZXJmbG93T3JkZXI7XG4gICAgICAgIHZhciBwb3BwZXIgPSBnZXRQb3BwZXJDbGllbnRSZWN0KGRhdGEub2Zmc2V0cy5wb3BwZXIpO1xuXG4gICAgICAgIHZhciBjaGVjayA9IHtcbiAgICAgICAgICAgIGxlZnQ6IGZ1bmN0aW9uIGxlZnQoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGxlZnQgPSBwb3BwZXIubGVmdDtcbiAgICAgICAgICAgICAgICBpZiAocG9wcGVyLmxlZnQgPCBkYXRhLmJvdW5kYXJpZXMubGVmdCkge1xuICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gTWF0aC5tYXgocG9wcGVyLmxlZnQsIGRhdGEuYm91bmRhcmllcy5sZWZ0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgbGVmdDogbGVmdCB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJpZ2h0OiBmdW5jdGlvbiByaWdodCgpIHtcbiAgICAgICAgICAgICAgICB2YXIgbGVmdCA9IHBvcHBlci5sZWZ0O1xuICAgICAgICAgICAgICAgIGlmIChwb3BwZXIucmlnaHQgPiBkYXRhLmJvdW5kYXJpZXMucmlnaHQpIHtcbiAgICAgICAgICAgICAgICAgICAgbGVmdCA9IE1hdGgubWluKHBvcHBlci5sZWZ0LCBkYXRhLmJvdW5kYXJpZXMucmlnaHQgLSBwb3BwZXIud2lkdGgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4geyBsZWZ0OiBsZWZ0IH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdG9wOiBmdW5jdGlvbiB0b3AoKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRvcCA9IHBvcHBlci50b3A7XG4gICAgICAgICAgICAgICAgaWYgKHBvcHBlci50b3AgPCBkYXRhLmJvdW5kYXJpZXMudG9wKSB7XG4gICAgICAgICAgICAgICAgICAgIHRvcCA9IE1hdGgubWF4KHBvcHBlci50b3AsIGRhdGEuYm91bmRhcmllcy50b3ApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4geyB0b3A6IHRvcCB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJvdHRvbTogZnVuY3Rpb24gYm90dG9tKCkge1xuICAgICAgICAgICAgICAgIHZhciB0b3AgPSBwb3BwZXIudG9wO1xuICAgICAgICAgICAgICAgIGlmIChwb3BwZXIuYm90dG9tID4gZGF0YS5ib3VuZGFyaWVzLmJvdHRvbSkge1xuICAgICAgICAgICAgICAgICAgICB0b3AgPSBNYXRoLm1pbihwb3BwZXIudG9wLCBkYXRhLmJvdW5kYXJpZXMuYm90dG9tIC0gcG9wcGVyLmhlaWdodCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB7IHRvcDogdG9wIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgb3JkZXIuZm9yRWFjaChmdW5jdGlvbiAoZGlyZWN0aW9uKSB7XG4gICAgICAgICAgICBkYXRhLm9mZnNldHMucG9wcGVyID0gT2JqZWN0LmFzc2lnbihwb3BwZXIsIGNoZWNrW2RpcmVjdGlvbl0oKSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBNb2RpZmllciB1c2VkIHRvIG1ha2Ugc3VyZSB0aGUgcG9wcGVyIGlzIGFsd2F5cyBuZWFyIGl0cyByZWZlcmVuY2VcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQG1lbWJlcm9mIFBvcHBlci5tb2RpZmllcnNcbiAgICAgKiBAYXJndW1lbnQge09iamVjdH0gZGF0YSAtIFRoZSBkYXRhIG9iamVjdCBnZW5lcmF0ZWQgYnkgX3VwZGF0ZSBtZXRob2RcbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgZGF0YSBvYmplY3QsIHByb3Blcmx5IG1vZGlmaWVkXG4gICAgICovXG4gICAgUG9wcGVyLnByb3RvdHlwZS5tb2RpZmllcnMua2VlcFRvZ2V0aGVyID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgdmFyIHBvcHBlciA9IGdldFBvcHBlckNsaWVudFJlY3QoZGF0YS5vZmZzZXRzLnBvcHBlcik7XG4gICAgICAgIHZhciByZWZlcmVuY2UgPSBkYXRhLm9mZnNldHMucmVmZXJlbmNlO1xuICAgICAgICB2YXIgZiA9IE1hdGguZmxvb3I7XG5cbiAgICAgICAgaWYgKHBvcHBlci5yaWdodCA8IGYocmVmZXJlbmNlLmxlZnQpKSB7XG4gICAgICAgICAgICBkYXRhLm9mZnNldHMucG9wcGVyLmxlZnQgPSBmKHJlZmVyZW5jZS5sZWZ0KSAtIHBvcHBlci53aWR0aDtcbiAgICAgICAgfVxuICAgICAgICBpZiAocG9wcGVyLmxlZnQgPiBmKHJlZmVyZW5jZS5yaWdodCkpIHtcbiAgICAgICAgICAgIGRhdGEub2Zmc2V0cy5wb3BwZXIubGVmdCA9IGYocmVmZXJlbmNlLnJpZ2h0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocG9wcGVyLmJvdHRvbSA8IGYocmVmZXJlbmNlLnRvcCkpIHtcbiAgICAgICAgICAgIGRhdGEub2Zmc2V0cy5wb3BwZXIudG9wID0gZihyZWZlcmVuY2UudG9wKSAtIHBvcHBlci5oZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBvcHBlci50b3AgPiBmKHJlZmVyZW5jZS5ib3R0b20pKSB7XG4gICAgICAgICAgICBkYXRhLm9mZnNldHMucG9wcGVyLnRvcCA9IGYocmVmZXJlbmNlLmJvdHRvbSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogTW9kaWZpZXIgdXNlZCB0byBmbGlwIHRoZSBwbGFjZW1lbnQgb2YgdGhlIHBvcHBlciB3aGVuIHRoZSBsYXR0ZXIgaXMgc3RhcnRpbmcgb3ZlcmxhcHBpbmcgaXRzIHJlZmVyZW5jZSBlbGVtZW50LlxuICAgICAqIFJlcXVpcmVzIHRoZSBgcHJldmVudE92ZXJmbG93YCBtb2RpZmllciBiZWZvcmUgaXQgaW4gb3JkZXIgdG8gd29yay5cbiAgICAgKiAqKk5PVEU6KiogVGhpcyBtb2RpZmllciB3aWxsIHJ1biBhbGwgaXRzIHByZXZpb3VzIG1vZGlmaWVycyBldmVyeXRpbWUgaXQgdHJpZXMgdG8gZmxpcCB0aGUgcG9wcGVyIVxuICAgICAqIEBtZXRob2RcbiAgICAgKiBAbWVtYmVyb2YgUG9wcGVyLm1vZGlmaWVyc1xuICAgICAqIEBhcmd1bWVudCB7T2JqZWN0fSBkYXRhIC0gVGhlIGRhdGEgb2JqZWN0IGdlbmVyYXRlZCBieSBfdXBkYXRlIG1ldGhvZFxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBkYXRhIG9iamVjdCwgcHJvcGVybHkgbW9kaWZpZWRcbiAgICAgKi9cbiAgICBQb3BwZXIucHJvdG90eXBlLm1vZGlmaWVycy5mbGlwID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgLy8gY2hlY2sgaWYgcHJldmVudE92ZXJmbG93IGlzIGluIHRoZSBsaXN0IG9mIG1vZGlmaWVycyBiZWZvcmUgdGhlIGZsaXAgbW9kaWZpZXIuXG4gICAgICAgIC8vIG90aGVyd2lzZSBmbGlwIHdvdWxkIG5vdCB3b3JrIGFzIGV4cGVjdGVkLlxuICAgICAgICBpZiAoIXRoaXMuaXNNb2RpZmllclJlcXVpcmVkKHRoaXMubW9kaWZpZXJzLmZsaXAsIHRoaXMubW9kaWZpZXJzLnByZXZlbnRPdmVyZmxvdykpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignV0FSTklORzogcHJldmVudE92ZXJmbG93IG1vZGlmaWVyIGlzIHJlcXVpcmVkIGJ5IGZsaXAgbW9kaWZpZXIgaW4gb3JkZXIgdG8gd29yaywgYmUgc3VyZSB0byBpbmNsdWRlIGl0IGJlZm9yZSBmbGlwIScpO1xuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGF0YS5mbGlwcGVkICYmIGRhdGEucGxhY2VtZW50ID09PSBkYXRhLl9vcmlnaW5hbFBsYWNlbWVudCkge1xuICAgICAgICAgICAgLy8gc2VlbXMgbGlrZSBmbGlwIGlzIHRyeWluZyB0byBsb29wLCBwcm9iYWJseSB0aGVyZSdzIG5vdCBlbm91Z2ggc3BhY2Ugb24gYW55IG9mIHRoZSBmbGlwcGFibGUgc2lkZXNcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHBsYWNlbWVudCA9IGRhdGEucGxhY2VtZW50LnNwbGl0KCctJylbMF07XG4gICAgICAgIHZhciBwbGFjZW1lbnRPcHBvc2l0ZSA9IGdldE9wcG9zaXRlUGxhY2VtZW50KHBsYWNlbWVudCk7XG4gICAgICAgIHZhciB2YXJpYXRpb24gPSBkYXRhLnBsYWNlbWVudC5zcGxpdCgnLScpWzFdIHx8ICcnO1xuXG4gICAgICAgIHZhciBmbGlwT3JkZXIgPSBbXTtcbiAgICAgICAgaWYgKHRoaXMuX29wdGlvbnMuZmxpcEJlaGF2aW9yID09PSAnZmxpcCcpIHtcbiAgICAgICAgICAgIGZsaXBPcmRlciA9IFtwbGFjZW1lbnQsIHBsYWNlbWVudE9wcG9zaXRlXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZsaXBPcmRlciA9IHRoaXMuX29wdGlvbnMuZmxpcEJlaGF2aW9yO1xuICAgICAgICB9XG5cbiAgICAgICAgZmxpcE9yZGVyLmZvckVhY2goZnVuY3Rpb24gKHN0ZXAsIGluZGV4KSB7XG4gICAgICAgICAgICBpZiAocGxhY2VtZW50ICE9PSBzdGVwIHx8IGZsaXBPcmRlci5sZW5ndGggPT09IGluZGV4ICsgMSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcGxhY2VtZW50ID0gZGF0YS5wbGFjZW1lbnQuc3BsaXQoJy0nKVswXTtcbiAgICAgICAgICAgIHBsYWNlbWVudE9wcG9zaXRlID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQocGxhY2VtZW50KTtcblxuICAgICAgICAgICAgdmFyIHBvcHBlck9mZnNldHMgPSBnZXRQb3BwZXJDbGllbnRSZWN0KGRhdGEub2Zmc2V0cy5wb3BwZXIpO1xuXG4gICAgICAgICAgICAvLyB0aGlzIGJvb2xlYW4gaXMgdXNlZCB0byBkaXN0aW5ndWlzaCByaWdodCBhbmQgYm90dG9tIGZyb20gdG9wIGFuZCBsZWZ0XG4gICAgICAgICAgICAvLyB0aGV5IG5lZWQgZGlmZmVyZW50IGNvbXB1dGF0aW9ucyB0byBnZXQgZmxpcHBlZFxuICAgICAgICAgICAgdmFyIGEgPSBbJ3JpZ2h0JywgJ2JvdHRvbSddLmluZGV4T2YocGxhY2VtZW50KSAhPT0gLTE7XG5cbiAgICAgICAgICAgIC8vIHVzaW5nIE1hdGguZmxvb3IgYmVjYXVzZSB0aGUgcmVmZXJlbmNlIG9mZnNldHMgbWF5IGNvbnRhaW4gZGVjaW1hbHMgd2UgYXJlIG5vdCBnb2luZyB0byBjb25zaWRlciBoZXJlXG4gICAgICAgICAgICBpZiAoYSAmJiBNYXRoLmZsb29yKGRhdGEub2Zmc2V0cy5yZWZlcmVuY2VbcGxhY2VtZW50XSkgPiBNYXRoLmZsb29yKHBvcHBlck9mZnNldHNbcGxhY2VtZW50T3Bwb3NpdGVdKSB8fCAhYSAmJiBNYXRoLmZsb29yKGRhdGEub2Zmc2V0cy5yZWZlcmVuY2VbcGxhY2VtZW50XSkgPCBNYXRoLmZsb29yKHBvcHBlck9mZnNldHNbcGxhY2VtZW50T3Bwb3NpdGVdKSkge1xuICAgICAgICAgICAgICAgIC8vIHdlJ2xsIHVzZSB0aGlzIGJvb2xlYW4gdG8gZGV0ZWN0IGFueSBmbGlwIGxvb3BcbiAgICAgICAgICAgICAgICBkYXRhLmZsaXBwZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGRhdGEucGxhY2VtZW50ID0gZmxpcE9yZGVyW2luZGV4ICsgMV07XG4gICAgICAgICAgICAgICAgaWYgKHZhcmlhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBkYXRhLnBsYWNlbWVudCArPSAnLScgKyB2YXJpYXRpb247XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRhdGEub2Zmc2V0cy5wb3BwZXIgPSB0aGlzLl9nZXRPZmZzZXRzKHRoaXMuX3BvcHBlciwgdGhpcy5fcmVmZXJlbmNlLCBkYXRhLnBsYWNlbWVudCkucG9wcGVyO1xuXG4gICAgICAgICAgICAgICAgZGF0YSA9IHRoaXMucnVuTW9kaWZpZXJzKGRhdGEsIHRoaXMuX29wdGlvbnMubW9kaWZpZXJzLCB0aGlzLl9mbGlwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIE1vZGlmaWVyIHVzZWQgdG8gYWRkIGFuIG9mZnNldCB0byB0aGUgcG9wcGVyLCB1c2VmdWwgaWYgeW91IG1vcmUgZ3JhbnVsYXJpdHkgcG9zaXRpb25pbmcgeW91ciBwb3BwZXIuXG4gICAgICogVGhlIG9mZnNldHMgd2lsbCBzaGlmdCB0aGUgcG9wcGVyIG9uIHRoZSBzaWRlIG9mIGl0cyByZWZlcmVuY2UgZWxlbWVudC5cbiAgICAgKiBAbWV0aG9kXG4gICAgICogQG1lbWJlcm9mIFBvcHBlci5tb2RpZmllcnNcbiAgICAgKiBAYXJndW1lbnQge09iamVjdH0gZGF0YSAtIFRoZSBkYXRhIG9iamVjdCBnZW5lcmF0ZWQgYnkgX3VwZGF0ZSBtZXRob2RcbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgZGF0YSBvYmplY3QsIHByb3Blcmx5IG1vZGlmaWVkXG4gICAgICovXG4gICAgUG9wcGVyLnByb3RvdHlwZS5tb2RpZmllcnMub2Zmc2V0ID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgdmFyIG9mZnNldCA9IHRoaXMuX29wdGlvbnMub2Zmc2V0O1xuICAgICAgICB2YXIgcG9wcGVyID0gZGF0YS5vZmZzZXRzLnBvcHBlcjtcblxuICAgICAgICBpZiAoZGF0YS5wbGFjZW1lbnQuaW5kZXhPZignbGVmdCcpICE9PSAtMSkge1xuICAgICAgICAgICAgcG9wcGVyLnRvcCAtPSBvZmZzZXQ7XG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YS5wbGFjZW1lbnQuaW5kZXhPZigncmlnaHQnKSAhPT0gLTEpIHtcbiAgICAgICAgICAgIHBvcHBlci50b3AgKz0gb2Zmc2V0O1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGEucGxhY2VtZW50LmluZGV4T2YoJ3RvcCcpICE9PSAtMSkge1xuICAgICAgICAgICAgcG9wcGVyLmxlZnQgLT0gb2Zmc2V0O1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGEucGxhY2VtZW50LmluZGV4T2YoJ2JvdHRvbScpICE9PSAtMSkge1xuICAgICAgICAgICAgcG9wcGVyLmxlZnQgKz0gb2Zmc2V0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBNb2RpZmllciB1c2VkIHRvIG1vdmUgdGhlIGFycm93cyBvbiB0aGUgZWRnZSBvZiB0aGUgcG9wcGVyIHRvIG1ha2Ugc3VyZSB0aGVtIGFyZSBhbHdheXMgYmV0d2VlbiB0aGUgcG9wcGVyIGFuZCB0aGUgcmVmZXJlbmNlIGVsZW1lbnRcbiAgICAgKiBJdCB3aWxsIHVzZSB0aGUgQ1NTIG91dGVyIHNpemUgb2YgdGhlIGFycm93IGVsZW1lbnQgdG8ga25vdyBob3cgbWFueSBwaXhlbHMgb2YgY29uanVjdGlvbiBhcmUgbmVlZGVkXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBtZW1iZXJvZiBQb3BwZXIubW9kaWZpZXJzXG4gICAgICogQGFyZ3VtZW50IHtPYmplY3R9IGRhdGEgLSBUaGUgZGF0YSBvYmplY3QgZ2VuZXJhdGVkIGJ5IF91cGRhdGUgbWV0aG9kXG4gICAgICogQHJldHVybnMge09iamVjdH0gVGhlIGRhdGEgb2JqZWN0LCBwcm9wZXJseSBtb2RpZmllZFxuICAgICAqL1xuICAgIFBvcHBlci5wcm90b3R5cGUubW9kaWZpZXJzLmFycm93ID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgdmFyIGFycm93ID0gdGhpcy5fb3B0aW9ucy5hcnJvd0VsZW1lbnQ7XG4gICAgICAgIHZhciBhcnJvd09mZnNldCA9IHRoaXMuX29wdGlvbnMuYXJyb3dPZmZzZXQ7XG5cbiAgICAgICAgLy8gaWYgdGhlIGFycm93RWxlbWVudCBpcyBhIHN0cmluZywgc3VwcG9zZSBpdCdzIGEgQ1NTIHNlbGVjdG9yXG4gICAgICAgIGlmICh0eXBlb2YgYXJyb3cgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBhcnJvdyA9IHRoaXMuX3BvcHBlci5xdWVyeVNlbGVjdG9yKGFycm93KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlmIGFycm93IGVsZW1lbnQgaXMgbm90IGZvdW5kLCBkb24ndCBydW4gdGhlIG1vZGlmaWVyXG4gICAgICAgIGlmICghYXJyb3cpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdGhlIGFycm93IGVsZW1lbnQgbXVzdCBiZSBjaGlsZCBvZiBpdHMgcG9wcGVyXG4gICAgICAgIGlmICghdGhpcy5fcG9wcGVyLmNvbnRhaW5zKGFycm93KSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdXQVJOSU5HOiBgYXJyb3dFbGVtZW50YCBtdXN0IGJlIGNoaWxkIG9mIGl0cyBwb3BwZXIgZWxlbWVudCEnKTtcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gYXJyb3cgZGVwZW5kcyBvbiBrZWVwVG9nZXRoZXIgaW4gb3JkZXIgdG8gd29ya1xuICAgICAgICBpZiAoIXRoaXMuaXNNb2RpZmllclJlcXVpcmVkKHRoaXMubW9kaWZpZXJzLmFycm93LCB0aGlzLm1vZGlmaWVycy5rZWVwVG9nZXRoZXIpKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1dBUk5JTkc6IGtlZXBUb2dldGhlciBtb2RpZmllciBpcyByZXF1aXJlZCBieSBhcnJvdyBtb2RpZmllciBpbiBvcmRlciB0byB3b3JrLCBiZSBzdXJlIHRvIGluY2x1ZGUgaXQgYmVmb3JlIGFycm93IScpO1xuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYXJyb3dTdHlsZSA9IHt9O1xuICAgICAgICB2YXIgcGxhY2VtZW50ID0gZGF0YS5wbGFjZW1lbnQuc3BsaXQoJy0nKVswXTtcbiAgICAgICAgdmFyIHBvcHBlciA9IGdldFBvcHBlckNsaWVudFJlY3QoZGF0YS5vZmZzZXRzLnBvcHBlcik7XG4gICAgICAgIHZhciByZWZlcmVuY2UgPSBkYXRhLm9mZnNldHMucmVmZXJlbmNlO1xuICAgICAgICB2YXIgaXNWZXJ0aWNhbCA9IFsnbGVmdCcsICdyaWdodCddLmluZGV4T2YocGxhY2VtZW50KSAhPT0gLTE7XG5cbiAgICAgICAgdmFyIGxlbiA9IGlzVmVydGljYWwgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG4gICAgICAgIHZhciBzaWRlID0gaXNWZXJ0aWNhbCA/ICd0b3AnIDogJ2xlZnQnO1xuICAgICAgICB2YXIgdHJhbnNsYXRlID0gaXNWZXJ0aWNhbCA/ICd0cmFuc2xhdGVZJyA6ICd0cmFuc2xhdGVYJztcbiAgICAgICAgdmFyIGFsdFNpZGUgPSBpc1ZlcnRpY2FsID8gJ2xlZnQnIDogJ3RvcCc7XG4gICAgICAgIHZhciBvcFNpZGUgPSBpc1ZlcnRpY2FsID8gJ2JvdHRvbScgOiAncmlnaHQnO1xuICAgICAgICB2YXIgYXJyb3dTaXplID0gZ2V0T3V0ZXJTaXplcyhhcnJvdylbbGVuXTtcblxuICAgICAgICAvL1xuICAgICAgICAvLyBleHRlbmRzIGtlZXBUb2dldGhlciBiZWhhdmlvciBtYWtpbmcgc3VyZSB0aGUgcG9wcGVyIGFuZCBpdHMgcmVmZXJlbmNlIGhhdmUgZW5vdWdoIHBpeGVscyBpbiBjb25qdWN0aW9uXG4gICAgICAgIC8vXG5cbiAgICAgICAgLy8gdG9wL2xlZnQgc2lkZVxuICAgICAgICBpZiAocmVmZXJlbmNlW29wU2lkZV0gLSBhcnJvd1NpemUgPCBwb3BwZXJbc2lkZV0pIHtcbiAgICAgICAgICAgIGRhdGEub2Zmc2V0cy5wb3BwZXJbc2lkZV0gLT0gcG9wcGVyW3NpZGVdIC0gKHJlZmVyZW5jZVtvcFNpZGVdIC0gYXJyb3dTaXplKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBib3R0b20vcmlnaHQgc2lkZVxuICAgICAgICBpZiAocmVmZXJlbmNlW3NpZGVdICsgYXJyb3dTaXplID4gcG9wcGVyW29wU2lkZV0pIHtcbiAgICAgICAgICAgIGRhdGEub2Zmc2V0cy5wb3BwZXJbc2lkZV0gKz0gcmVmZXJlbmNlW3NpZGVdICsgYXJyb3dTaXplIC0gcG9wcGVyW29wU2lkZV07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjb21wdXRlIGNlbnRlciBvZiB0aGUgcG9wcGVyXG4gICAgICAgIHZhciBjZW50ZXIgPSByZWZlcmVuY2Vbc2lkZV0gKyAoYXJyb3dPZmZzZXQgfHwgcmVmZXJlbmNlW2xlbl0gLyAyIC0gYXJyb3dTaXplIC8gMik7XG5cbiAgICAgICAgdmFyIHNpZGVWYWx1ZSA9IGNlbnRlciAtIHBvcHBlcltzaWRlXTtcblxuICAgICAgICAvLyBwcmV2ZW50IGFycm93IGZyb20gYmVpbmcgcGxhY2VkIG5vdCBjb250aWd1b3VzbHkgdG8gaXRzIHBvcHBlclxuICAgICAgICBzaWRlVmFsdWUgPSBNYXRoLm1heChNYXRoLm1pbihwb3BwZXJbbGVuXSAtIGFycm93U2l6ZSAtIDgsIHNpZGVWYWx1ZSksIDgpO1xuICAgICAgICBhcnJvd1N0eWxlW3NpZGVdID0gc2lkZVZhbHVlO1xuICAgICAgICBhcnJvd1N0eWxlW2FsdFNpZGVdID0gJyc7IC8vIG1ha2Ugc3VyZSB0byByZW1vdmUgYW55IG9sZCBzdHlsZSBmcm9tIHRoZSBhcnJvd1xuXG4gICAgICAgIGRhdGEub2Zmc2V0cy5hcnJvdyA9IGFycm93U3R5bGU7XG4gICAgICAgIGRhdGEuYXJyb3dFbGVtZW50ID0gYXJyb3c7XG5cbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfTtcblxuICAgIC8vXG4gICAgLy8gSGVscGVyc1xuICAgIC8vXG5cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIG91dGVyIHNpemVzIG9mIHRoZSBnaXZlbiBlbGVtZW50IChvZmZzZXQgc2l6ZSArIG1hcmdpbnMpXG4gICAgICogQGZ1bmN0aW9uXG4gICAgICogQGlnbm9yZVxuICAgICAqIEBhcmd1bWVudCB7RWxlbWVudH0gZWxlbWVudFxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IG9iamVjdCBjb250YWluaW5nIHdpZHRoIGFuZCBoZWlnaHQgcHJvcGVydGllc1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldE91dGVyU2l6ZXMoZWxlbWVudCkge1xuICAgICAgICAvLyBOT1RFOiAxIERPTSBhY2Nlc3MgaGVyZVxuICAgICAgICB2YXIgX2Rpc3BsYXkgPSBlbGVtZW50LnN0eWxlLmRpc3BsYXksXG4gICAgICAgICAgICBfdmlzaWJpbGl0eSA9IGVsZW1lbnQuc3R5bGUudmlzaWJpbGl0eTtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztlbGVtZW50LnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcbiAgICAgICAgdmFyIGNhbGNXaWR0aFRvRm9yY2VSZXBhaW50ID0gZWxlbWVudC5vZmZzZXRXaWR0aDtcblxuICAgICAgICAvLyBvcmlnaW5hbCBtZXRob2RcbiAgICAgICAgdmFyIHN0eWxlcyA9IHJvb3QuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbiAgICAgICAgdmFyIHggPSBwYXJzZUZsb2F0KHN0eWxlcy5tYXJnaW5Ub3ApICsgcGFyc2VGbG9hdChzdHlsZXMubWFyZ2luQm90dG9tKTtcbiAgICAgICAgdmFyIHkgPSBwYXJzZUZsb2F0KHN0eWxlcy5tYXJnaW5MZWZ0KSArIHBhcnNlRmxvYXQoc3R5bGVzLm1hcmdpblJpZ2h0KTtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHsgd2lkdGg6IGVsZW1lbnQub2Zmc2V0V2lkdGggKyB5LCBoZWlnaHQ6IGVsZW1lbnQub2Zmc2V0SGVpZ2h0ICsgeCB9O1xuXG4gICAgICAgIC8vIHJlc2V0IGVsZW1lbnQgc3R5bGVzXG4gICAgICAgIGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9IF9kaXNwbGF5O2VsZW1lbnQuc3R5bGUudmlzaWJpbGl0eSA9IF92aXNpYmlsaXR5O1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgb3Bwb3NpdGUgcGxhY2VtZW50IG9mIHRoZSBnaXZlbiBvbmUvXG4gICAgICogQGZ1bmN0aW9uXG4gICAgICogQGlnbm9yZVxuICAgICAqIEBhcmd1bWVudCB7U3RyaW5nfSBwbGFjZW1lbnRcbiAgICAgKiBAcmV0dXJucyB7U3RyaW5nfSBmbGlwcGVkIHBsYWNlbWVudFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldE9wcG9zaXRlUGxhY2VtZW50KHBsYWNlbWVudCkge1xuICAgICAgICB2YXIgaGFzaCA9IHsgbGVmdDogJ3JpZ2h0JywgcmlnaHQ6ICdsZWZ0JywgYm90dG9tOiAndG9wJywgdG9wOiAnYm90dG9tJyB9O1xuICAgICAgICByZXR1cm4gcGxhY2VtZW50LnJlcGxhY2UoL2xlZnR8cmlnaHR8Ym90dG9tfHRvcC9nLCBmdW5jdGlvbiAobWF0Y2hlZCkge1xuICAgICAgICAgICAgcmV0dXJuIGhhc2hbbWF0Y2hlZF07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdpdmVuIHRoZSBwb3BwZXIgb2Zmc2V0cywgZ2VuZXJhdGUgYW4gb3V0cHV0IHNpbWlsYXIgdG8gZ2V0Qm91bmRpbmdDbGllbnRSZWN0XG4gICAgICogQGZ1bmN0aW9uXG4gICAgICogQGlnbm9yZVxuICAgICAqIEBhcmd1bWVudCB7T2JqZWN0fSBwb3BwZXJPZmZzZXRzXG4gICAgICogQHJldHVybnMge09iamVjdH0gQ2xpZW50UmVjdCBsaWtlIG91dHB1dFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldFBvcHBlckNsaWVudFJlY3QocG9wcGVyT2Zmc2V0cykge1xuICAgICAgICB2YXIgb2Zmc2V0cyA9IE9iamVjdC5hc3NpZ24oe30sIHBvcHBlck9mZnNldHMpO1xuICAgICAgICBvZmZzZXRzLnJpZ2h0ID0gb2Zmc2V0cy5sZWZ0ICsgb2Zmc2V0cy53aWR0aDtcbiAgICAgICAgb2Zmc2V0cy5ib3R0b20gPSBvZmZzZXRzLnRvcCArIG9mZnNldHMuaGVpZ2h0O1xuICAgICAgICByZXR1cm4gb2Zmc2V0cztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHaXZlbiBhbiBhcnJheSBhbmQgdGhlIGtleSB0byBmaW5kLCByZXR1cm5zIGl0cyBpbmRleFxuICAgICAqIEBmdW5jdGlvblxuICAgICAqIEBpZ25vcmVcbiAgICAgKiBAYXJndW1lbnQge0FycmF5fSBhcnJcbiAgICAgKiBAYXJndW1lbnQga2V5VG9GaW5kXG4gICAgICogQHJldHVybnMgaW5kZXggb3IgbnVsbFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldEFycmF5S2V5SW5kZXgoYXJyLCBrZXlUb0ZpbmQpIHtcbiAgICAgICAgdmFyIGkgPSAwLFxuICAgICAgICAgICAga2V5O1xuICAgICAgICBmb3IgKGtleSBpbiBhcnIpIHtcbiAgICAgICAgICAgIGlmIChhcnJba2V5XSA9PT0ga2V5VG9GaW5kKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpKys7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IENTUyBjb21wdXRlZCBwcm9wZXJ0eSBvZiB0aGUgZ2l2ZW4gZWxlbWVudFxuICAgICAqIEBmdW5jdGlvblxuICAgICAqIEBpZ25vcmVcbiAgICAgKiBAYXJndW1lbnQge0VlbWVudH0gZWxlbWVudFxuICAgICAqIEBhcmd1bWVudCB7U3RyaW5nfSBwcm9wZXJ0eVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldFN0eWxlQ29tcHV0ZWRQcm9wZXJ0eShlbGVtZW50LCBwcm9wZXJ0eSkge1xuICAgICAgICAvLyBOT1RFOiAxIERPTSBhY2Nlc3MgaGVyZVxuICAgICAgICB2YXIgY3NzID0gcm9vdC5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQsIG51bGwpO1xuICAgICAgICByZXR1cm4gY3NzW3Byb3BlcnR5XTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBvZmZzZXQgcGFyZW50IG9mIHRoZSBnaXZlbiBlbGVtZW50XG4gICAgICogQGZ1bmN0aW9uXG4gICAgICogQGlnbm9yZVxuICAgICAqIEBhcmd1bWVudCB7RWxlbWVudH0gZWxlbWVudFxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fSBvZmZzZXQgcGFyZW50XG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnQpIHtcbiAgICAgICAgLy8gTk9URTogMSBET00gYWNjZXNzIGhlcmVcbiAgICAgICAgdmFyIG9mZnNldFBhcmVudCA9IGVsZW1lbnQub2Zmc2V0UGFyZW50O1xuICAgICAgICByZXR1cm4gb2Zmc2V0UGFyZW50ID09PSByb290LmRvY3VtZW50LmJvZHkgfHwgIW9mZnNldFBhcmVudCA/IHJvb3QuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IDogb2Zmc2V0UGFyZW50O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHNjcm9sbGluZyBwYXJlbnQgb2YgdGhlIGdpdmVuIGVsZW1lbnRcbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKiBAaWdub3JlXG4gICAgICogQGFyZ3VtZW50IHtFbGVtZW50fSBlbGVtZW50XG4gICAgICogQHJldHVybnMge0VsZW1lbnR9IG9mZnNldCBwYXJlbnRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRTY3JvbGxQYXJlbnQoZWxlbWVudCkge1xuICAgICAgICB2YXIgcGFyZW50ID0gZWxlbWVudC5wYXJlbnROb2RlO1xuXG4gICAgICAgIGlmICghcGFyZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJlbnQgPT09IHJvb3QuZG9jdW1lbnQpIHtcbiAgICAgICAgICAgIC8vIEZpcmVmb3ggcHV0cyB0aGUgc2Nyb2xsVE9wIHZhbHVlIG9uIGBkb2N1bWVudEVsZW1lbnRgIGluc3RlYWQgb2YgYGJvZHlgLCB3ZSB0aGVuIGNoZWNrIHdoaWNoIG9mIHRoZW0gaXNcbiAgICAgICAgICAgIC8vIGdyZWF0ZXIgdGhhbiAwIGFuZCByZXR1cm4gdGhlIHByb3BlciBlbGVtZW50XG4gICAgICAgICAgICBpZiAocm9vdC5kb2N1bWVudC5ib2R5LnNjcm9sbFRvcCB8fCByb290LmRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByb290LmRvY3VtZW50LmJvZHk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiByb290LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEZpcmVmb3ggd2FudCB1cyB0byBjaGVjayBgLXhgIGFuZCBgLXlgIHZhcmlhdGlvbnMgYXMgd2VsbFxuICAgICAgICBpZiAoWydzY3JvbGwnLCAnYXV0byddLmluZGV4T2YoZ2V0U3R5bGVDb21wdXRlZFByb3BlcnR5KHBhcmVudCwgJ292ZXJmbG93JykpICE9PSAtMSB8fCBbJ3Njcm9sbCcsICdhdXRvJ10uaW5kZXhPZihnZXRTdHlsZUNvbXB1dGVkUHJvcGVydHkocGFyZW50LCAnb3ZlcmZsb3cteCcpKSAhPT0gLTEgfHwgWydzY3JvbGwnLCAnYXV0byddLmluZGV4T2YoZ2V0U3R5bGVDb21wdXRlZFByb3BlcnR5KHBhcmVudCwgJ292ZXJmbG93LXknKSkgIT09IC0xKSB7XG4gICAgICAgICAgICAvLyBJZiB0aGUgZGV0ZWN0ZWQgc2Nyb2xsUGFyZW50IGlzIGJvZHksIHdlIHBlcmZvcm0gYW4gYWRkaXRpb25hbCBjaGVjayBvbiBpdHMgcGFyZW50Tm9kZVxuICAgICAgICAgICAgLy8gaW4gdGhpcyB3YXkgd2UnbGwgZ2V0IGJvZHkgaWYgdGhlIGJyb3dzZXIgaXMgQ2hyb21lLWlzaCwgb3IgZG9jdW1lbnRFbGVtZW50IG90aGVyd2lzZVxuICAgICAgICAgICAgLy8gZml4ZXMgaXNzdWUgIzY1XG4gICAgICAgICAgICByZXR1cm4gcGFyZW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBnZXRTY3JvbGxQYXJlbnQoZWxlbWVudC5wYXJlbnROb2RlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVjayBpZiB0aGUgZ2l2ZW4gZWxlbWVudCBpcyBmaXhlZCBvciBpcyBpbnNpZGUgYSBmaXhlZCBwYXJlbnRcbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKiBAaWdub3JlXG4gICAgICogQGFyZ3VtZW50IHtFbGVtZW50fSBlbGVtZW50XG4gICAgICogQGFyZ3VtZW50IHtFbGVtZW50fSBjdXN0b21Db250YWluZXJcbiAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gYW5zd2VyIHRvIFwiaXNGaXhlZD9cIlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzRml4ZWQoZWxlbWVudCkge1xuICAgICAgICBpZiAoZWxlbWVudCA9PT0gcm9vdC5kb2N1bWVudC5ib2R5KSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGdldFN0eWxlQ29tcHV0ZWRQcm9wZXJ0eShlbGVtZW50LCAncG9zaXRpb24nKSA9PT0gJ2ZpeGVkJykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVsZW1lbnQucGFyZW50Tm9kZSA/IGlzRml4ZWQoZWxlbWVudC5wYXJlbnROb2RlKSA6IGVsZW1lbnQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBzdHlsZSB0byB0aGUgZ2l2ZW4gcG9wcGVyXG4gICAgICogQGZ1bmN0aW9uXG4gICAgICogQGlnbm9yZVxuICAgICAqIEBhcmd1bWVudCB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gYXBwbHkgdGhlIHN0eWxlIHRvXG4gICAgICogQGFyZ3VtZW50IHtPYmplY3R9IHN0eWxlcyAtIE9iamVjdCB3aXRoIGEgbGlzdCBvZiBwcm9wZXJ0aWVzIGFuZCB2YWx1ZXMgd2hpY2ggd2lsbCBiZSBhcHBsaWVkIHRvIHRoZSBlbGVtZW50XG4gICAgICovXG4gICAgZnVuY3Rpb24gc2V0U3R5bGUoZWxlbWVudCwgc3R5bGVzKSB7XG4gICAgICAgIGZ1bmN0aW9uIGlzX251bWVyaWMobikge1xuICAgICAgICAgICAgcmV0dXJuIG4gIT09ICcnICYmICFpc05hTihwYXJzZUZsb2F0KG4pKSAmJiBpc0Zpbml0ZShuKTtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3Qua2V5cyhzdHlsZXMpLmZvckVhY2goZnVuY3Rpb24gKHByb3ApIHtcbiAgICAgICAgICAgIHZhciB1bml0ID0gJyc7XG4gICAgICAgICAgICAvLyBhZGQgdW5pdCBpZiB0aGUgdmFsdWUgaXMgbnVtZXJpYyBhbmQgaXMgb25lIG9mIHRoZSBmb2xsb3dpbmdcbiAgICAgICAgICAgIGlmIChbJ3dpZHRoJywgJ2hlaWdodCcsICd0b3AnLCAncmlnaHQnLCAnYm90dG9tJywgJ2xlZnQnXS5pbmRleE9mKHByb3ApICE9PSAtMSAmJiBpc19udW1lcmljKHN0eWxlc1twcm9wXSkpIHtcbiAgICAgICAgICAgICAgICB1bml0ID0gJ3B4JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsZW1lbnQuc3R5bGVbcHJvcF0gPSBzdHlsZXNbcHJvcF0gKyB1bml0O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVjayBpZiB0aGUgZ2l2ZW4gdmFyaWFibGUgaXMgYSBmdW5jdGlvblxuICAgICAqIEBmdW5jdGlvblxuICAgICAqIEBpZ25vcmVcbiAgICAgKiBAYXJndW1lbnQgeyp9IGZ1bmN0aW9uVG9DaGVjayAtIHZhcmlhYmxlIHRvIGNoZWNrXG4gICAgICogQHJldHVybnMge0Jvb2xlYW59IGFuc3dlciB0bzogaXMgYSBmdW5jdGlvbj9cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc0Z1bmN0aW9uKGZ1bmN0aW9uVG9DaGVjaykge1xuICAgICAgICB2YXIgZ2V0VHlwZSA9IHt9O1xuICAgICAgICByZXR1cm4gZnVuY3Rpb25Ub0NoZWNrICYmIGdldFR5cGUudG9TdHJpbmcuY2FsbChmdW5jdGlvblRvQ2hlY2spID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgcG9zaXRpb24gb2YgdGhlIGdpdmVuIGVsZW1lbnQsIHJlbGF0aXZlIHRvIGl0cyBvZmZzZXQgcGFyZW50XG4gICAgICogQGZ1bmN0aW9uXG4gICAgICogQGlnbm9yZVxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudFxuICAgICAqIEByZXR1cm4ge09iamVjdH0gcG9zaXRpb24gLSBDb29yZGluYXRlcyBvZiB0aGUgZWxlbWVudCBhbmQgaXRzIGBzY3JvbGxUb3BgXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0T2Zmc2V0UmVjdChlbGVtZW50KSB7XG4gICAgICAgIHZhciBlbGVtZW50UmVjdCA9IHtcbiAgICAgICAgICAgIHdpZHRoOiBlbGVtZW50Lm9mZnNldFdpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0OiBlbGVtZW50Lm9mZnNldEhlaWdodCxcbiAgICAgICAgICAgIGxlZnQ6IGVsZW1lbnQub2Zmc2V0TGVmdCxcbiAgICAgICAgICAgIHRvcDogZWxlbWVudC5vZmZzZXRUb3BcbiAgICAgICAgfTtcblxuICAgICAgICBlbGVtZW50UmVjdC5yaWdodCA9IGVsZW1lbnRSZWN0LmxlZnQgKyBlbGVtZW50UmVjdC53aWR0aDtcbiAgICAgICAgZWxlbWVudFJlY3QuYm90dG9tID0gZWxlbWVudFJlY3QudG9wICsgZWxlbWVudFJlY3QuaGVpZ2h0O1xuXG4gICAgICAgIC8vIHBvc2l0aW9uXG4gICAgICAgIHJldHVybiBlbGVtZW50UmVjdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgYm91bmRpbmcgY2xpZW50IHJlY3Qgb2YgZ2l2ZW4gZWxlbWVudFxuICAgICAqIEBmdW5jdGlvblxuICAgICAqIEBpZ25vcmVcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gICAgICogQHJldHVybiB7T2JqZWN0fSBjbGllbnQgcmVjdFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50KSB7XG4gICAgICAgIHZhciByZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgICAvLyB3aGV0aGVyIHRoZSBJRSB2ZXJzaW9uIGlzIGxvd2VyIHRoYW4gMTFcbiAgICAgICAgdmFyIGlzSUUgPSBuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoXCJNU0lFXCIpICE9IC0xO1xuXG4gICAgICAgIC8vIGZpeCBpZSBkb2N1bWVudCBib3VuZGluZyB0b3AgYWx3YXlzIDAgYnVnXG4gICAgICAgIHZhciByZWN0VG9wID0gaXNJRSAmJiBlbGVtZW50LnRhZ05hbWUgPT09ICdIVE1MJyA/IC1lbGVtZW50LnNjcm9sbFRvcCA6IHJlY3QudG9wO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBsZWZ0OiByZWN0LmxlZnQsXG4gICAgICAgICAgICB0b3A6IHJlY3RUb3AsXG4gICAgICAgICAgICByaWdodDogcmVjdC5yaWdodCxcbiAgICAgICAgICAgIGJvdHRvbTogcmVjdC5ib3R0b20sXG4gICAgICAgICAgICB3aWR0aDogcmVjdC5yaWdodCAtIHJlY3QubGVmdCxcbiAgICAgICAgICAgIGhlaWdodDogcmVjdC5ib3R0b20gLSByZWN0VG9wXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2l2ZW4gYW4gZWxlbWVudCBhbmQgb25lIG9mIGl0cyBwYXJlbnRzLCByZXR1cm4gdGhlIG9mZnNldFxuICAgICAqIEBmdW5jdGlvblxuICAgICAqIEBpZ25vcmVcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcGFyZW50XG4gICAgICogQHJldHVybiB7T2JqZWN0fSByZWN0XG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0T2Zmc2V0UmVjdFJlbGF0aXZlVG9DdXN0b21QYXJlbnQoZWxlbWVudCwgcGFyZW50LCBmaXhlZCkge1xuICAgICAgICB2YXIgZWxlbWVudFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCk7XG4gICAgICAgIHZhciBwYXJlbnRSZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KHBhcmVudCk7XG5cbiAgICAgICAgaWYgKGZpeGVkKSB7XG4gICAgICAgICAgICB2YXIgc2Nyb2xsUGFyZW50ID0gZ2V0U2Nyb2xsUGFyZW50KHBhcmVudCk7XG4gICAgICAgICAgICBwYXJlbnRSZWN0LnRvcCArPSBzY3JvbGxQYXJlbnQuc2Nyb2xsVG9wO1xuICAgICAgICAgICAgcGFyZW50UmVjdC5ib3R0b20gKz0gc2Nyb2xsUGFyZW50LnNjcm9sbFRvcDtcbiAgICAgICAgICAgIHBhcmVudFJlY3QubGVmdCArPSBzY3JvbGxQYXJlbnQuc2Nyb2xsTGVmdDtcbiAgICAgICAgICAgIHBhcmVudFJlY3QucmlnaHQgKz0gc2Nyb2xsUGFyZW50LnNjcm9sbExlZnQ7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVjdCA9IHtcbiAgICAgICAgICAgIHRvcDogZWxlbWVudFJlY3QudG9wIC0gcGFyZW50UmVjdC50b3AsXG4gICAgICAgICAgICBsZWZ0OiBlbGVtZW50UmVjdC5sZWZ0IC0gcGFyZW50UmVjdC5sZWZ0LFxuICAgICAgICAgICAgYm90dG9tOiBlbGVtZW50UmVjdC50b3AgLSBwYXJlbnRSZWN0LnRvcCArIGVsZW1lbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICAgIHJpZ2h0OiBlbGVtZW50UmVjdC5sZWZ0IC0gcGFyZW50UmVjdC5sZWZ0ICsgZWxlbWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgICB3aWR0aDogZWxlbWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ6IGVsZW1lbnRSZWN0LmhlaWdodFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcmVjdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIHByZWZpeGVkIHN1cHBvcnRlZCBwcm9wZXJ0eSBuYW1lXG4gICAgICogQGZ1bmN0aW9uXG4gICAgICogQGlnbm9yZVxuICAgICAqIEBhcmd1bWVudCB7U3RyaW5nfSBwcm9wZXJ0eSAoY2FtZWxDYXNlKVxuICAgICAqIEByZXR1cm5zIHtTdHJpbmd9IHByZWZpeGVkIHByb3BlcnR5IChjYW1lbENhc2UpXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0U3VwcG9ydGVkUHJvcGVydHlOYW1lKHByb3BlcnR5KSB7XG4gICAgICAgIHZhciBwcmVmaXhlcyA9IFsnJywgJ21zJywgJ3dlYmtpdCcsICdtb3onLCAnbyddO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJlZml4ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciB0b0NoZWNrID0gcHJlZml4ZXNbaV0gPyBwcmVmaXhlc1tpXSArIHByb3BlcnR5LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgcHJvcGVydHkuc2xpY2UoMSkgOiBwcm9wZXJ0eTtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygcm9vdC5kb2N1bWVudC5ib2R5LnN0eWxlW3RvQ2hlY2tdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0b0NoZWNrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBPYmplY3QuYXNzaWduKCkgbWV0aG9kIGlzIHVzZWQgdG8gY29weSB0aGUgdmFsdWVzIG9mIGFsbCBlbnVtZXJhYmxlIG93biBwcm9wZXJ0aWVzIGZyb20gb25lIG9yIG1vcmUgc291cmNlXG4gICAgICogb2JqZWN0cyB0byBhIHRhcmdldCBvYmplY3QuIEl0IHdpbGwgcmV0dXJuIHRoZSB0YXJnZXQgb2JqZWN0LlxuICAgICAqIFRoaXMgcG9seWZpbGwgZG9lc24ndCBzdXBwb3J0IHN5bWJvbCBwcm9wZXJ0aWVzLCBzaW5jZSBFUzUgZG9lc24ndCBoYXZlIHN5bWJvbHMgYW55d2F5XG4gICAgICogU291cmNlOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvYXNzaWduXG4gICAgICogQGZ1bmN0aW9uXG4gICAgICogQGlnbm9yZVxuICAgICAqL1xuICAgIGlmICghT2JqZWN0LmFzc2lnbikge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT2JqZWN0LCAnYXNzaWduJywge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiB2YWx1ZSh0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICBpZiAodGFyZ2V0ID09PSB1bmRlZmluZWQgfHwgdGFyZ2V0ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IGZpcnN0IGFyZ3VtZW50IHRvIG9iamVjdCcpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciB0byA9IE9iamVjdCh0YXJnZXQpO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0U291cmNlID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dFNvdXJjZSA9PT0gdW5kZWZpbmVkIHx8IG5leHRTb3VyY2UgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG5leHRTb3VyY2UgPSBPYmplY3QobmV4dFNvdXJjZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGtleXNBcnJheSA9IE9iamVjdC5rZXlzKG5leHRTb3VyY2UpO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBuZXh0SW5kZXggPSAwLCBsZW4gPSBrZXlzQXJyYXkubGVuZ3RoOyBuZXh0SW5kZXggPCBsZW47IG5leHRJbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dEtleSA9IGtleXNBcnJheVtuZXh0SW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG5leHRTb3VyY2UsIG5leHRLZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlc2MgIT09IHVuZGVmaW5lZCAmJiBkZXNjLmVudW1lcmFibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b1tuZXh0S2V5XSA9IG5leHRTb3VyY2VbbmV4dEtleV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRvO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gUG9wcGVyO1xufSk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/utils/popper.js\n");

/***/ }),

/***/ "./node_modules/element-ui/lib/utils/popup/index.js":
/*!**********************************************************!*\
  !*** ./node_modules/element-ui/lib/utils/popup/index.js ***!
  \**********************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";
eval("\n\nexports.__esModule = true;\nexports.PopupManager = undefined;\n\nvar _vue = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.esm.js\");\n\nvar _vue2 = _interopRequireDefault(_vue);\n\nvar _merge = __webpack_require__(/*! element-ui/lib/utils/merge */ \"./node_modules/element-ui/lib/utils/merge.js\");\n\nvar _merge2 = _interopRequireDefault(_merge);\n\nvar _popupManager = __webpack_require__(/*! element-ui/lib/utils/popup/popup-manager */ \"./node_modules/element-ui/lib/utils/popup/popup-manager.js\");\n\nvar _popupManager2 = _interopRequireDefault(_popupManager);\n\nvar _scrollbarWidth = __webpack_require__(/*! ../scrollbar-width */ \"./node_modules/element-ui/lib/utils/scrollbar-width.js\");\n\nvar _scrollbarWidth2 = _interopRequireDefault(_scrollbarWidth);\n\nvar _dom = __webpack_require__(/*! ../dom */ \"./node_modules/element-ui/lib/utils/dom.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar idSeed = 1;\n\nvar scrollBarWidth = void 0;\n\nexports[\"default\"] = {\n  props: {\n    visible: {\n      type: Boolean,\n      default: false\n    },\n    openDelay: {},\n    closeDelay: {},\n    zIndex: {},\n    modal: {\n      type: Boolean,\n      default: false\n    },\n    modalFade: {\n      type: Boolean,\n      default: true\n    },\n    modalClass: {},\n    modalAppendToBody: {\n      type: Boolean,\n      default: false\n    },\n    lockScroll: {\n      type: Boolean,\n      default: true\n    },\n    closeOnPressEscape: {\n      type: Boolean,\n      default: false\n    },\n    closeOnClickModal: {\n      type: Boolean,\n      default: false\n    }\n  },\n\n  beforeMount: function beforeMount() {\n    this._popupId = 'popup-' + idSeed++;\n    _popupManager2.default.register(this._popupId, this);\n  },\n  beforeDestroy: function beforeDestroy() {\n    _popupManager2.default.deregister(this._popupId);\n    _popupManager2.default.closeModal(this._popupId);\n\n    this.restoreBodyStyle();\n  },\n  data: function data() {\n    return {\n      opened: false,\n      bodyPaddingRight: null,\n      computedBodyPaddingRight: 0,\n      withoutHiddenClass: true,\n      rendered: false\n    };\n  },\n\n\n  watch: {\n    visible: function visible(val) {\n      var _this = this;\n\n      if (val) {\n        if (this._opening) return;\n        if (!this.rendered) {\n          this.rendered = true;\n          _vue2.default.nextTick(function () {\n            _this.open();\n          });\n        } else {\n          this.open();\n        }\n      } else {\n        this.close();\n      }\n    }\n  },\n\n  methods: {\n    open: function open(options) {\n      var _this2 = this;\n\n      if (!this.rendered) {\n        this.rendered = true;\n      }\n\n      var props = (0, _merge2.default)({}, this.$props || this, options);\n\n      if (this._closeTimer) {\n        clearTimeout(this._closeTimer);\n        this._closeTimer = null;\n      }\n      clearTimeout(this._openTimer);\n\n      var openDelay = Number(props.openDelay);\n      if (openDelay > 0) {\n        this._openTimer = setTimeout(function () {\n          _this2._openTimer = null;\n          _this2.doOpen(props);\n        }, openDelay);\n      } else {\n        this.doOpen(props);\n      }\n    },\n    doOpen: function doOpen(props) {\n      if (this.$isServer) return;\n      if (this.willOpen && !this.willOpen()) return;\n      if (this.opened) return;\n\n      this._opening = true;\n\n      var dom = this.$el;\n\n      var modal = props.modal;\n\n      var zIndex = props.zIndex;\n      if (zIndex) {\n        _popupManager2.default.zIndex = zIndex;\n      }\n\n      if (modal) {\n        if (this._closing) {\n          _popupManager2.default.closeModal(this._popupId);\n          this._closing = false;\n        }\n        _popupManager2.default.openModal(this._popupId, _popupManager2.default.nextZIndex(), this.modalAppendToBody ? undefined : dom, props.modalClass, props.modalFade);\n        if (props.lockScroll) {\n          this.withoutHiddenClass = !(0, _dom.hasClass)(document.body, 'el-popup-parent--hidden');\n          if (this.withoutHiddenClass) {\n            this.bodyPaddingRight = document.body.style.paddingRight;\n            this.computedBodyPaddingRight = parseInt((0, _dom.getStyle)(document.body, 'paddingRight'), 10);\n          }\n          scrollBarWidth = (0, _scrollbarWidth2.default)();\n          var bodyHasOverflow = document.documentElement.clientHeight < document.body.scrollHeight;\n          var bodyOverflowY = (0, _dom.getStyle)(document.body, 'overflowY');\n          if (scrollBarWidth > 0 && (bodyHasOverflow || bodyOverflowY === 'scroll') && this.withoutHiddenClass) {\n            document.body.style.paddingRight = this.computedBodyPaddingRight + scrollBarWidth + 'px';\n          }\n          (0, _dom.addClass)(document.body, 'el-popup-parent--hidden');\n        }\n      }\n\n      if (getComputedStyle(dom).position === 'static') {\n        dom.style.position = 'absolute';\n      }\n\n      dom.style.zIndex = _popupManager2.default.nextZIndex();\n      this.opened = true;\n\n      this.onOpen && this.onOpen();\n\n      this.doAfterOpen();\n    },\n    doAfterOpen: function doAfterOpen() {\n      this._opening = false;\n    },\n    close: function close() {\n      var _this3 = this;\n\n      if (this.willClose && !this.willClose()) return;\n\n      if (this._openTimer !== null) {\n        clearTimeout(this._openTimer);\n        this._openTimer = null;\n      }\n      clearTimeout(this._closeTimer);\n\n      var closeDelay = Number(this.closeDelay);\n\n      if (closeDelay > 0) {\n        this._closeTimer = setTimeout(function () {\n          _this3._closeTimer = null;\n          _this3.doClose();\n        }, closeDelay);\n      } else {\n        this.doClose();\n      }\n    },\n    doClose: function doClose() {\n      this._closing = true;\n\n      this.onClose && this.onClose();\n\n      if (this.lockScroll) {\n        setTimeout(this.restoreBodyStyle, 200);\n      }\n\n      this.opened = false;\n\n      this.doAfterClose();\n    },\n    doAfterClose: function doAfterClose() {\n      _popupManager2.default.closeModal(this._popupId);\n      this._closing = false;\n    },\n    restoreBodyStyle: function restoreBodyStyle() {\n      if (this.modal && this.withoutHiddenClass) {\n        document.body.style.paddingRight = this.bodyPaddingRight;\n        (0, _dom.removeClass)(document.body, 'el-popup-parent--hidden');\n      }\n      this.withoutHiddenClass = true;\n    }\n  }\n};\nexports.PopupManager = _popupManager2.default;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdXRpbHMvcG9wdXAvaW5kZXguanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsa0JBQWtCO0FBQ2xCLG9CQUFvQjs7QUFFcEIsV0FBVyxtQkFBTyxDQUFDLCtDQUFLOztBQUV4Qjs7QUFFQSxhQUFhLG1CQUFPLENBQUMsZ0ZBQTRCOztBQUVqRDs7QUFFQSxvQkFBb0IsbUJBQU8sQ0FBQyw0R0FBMEM7O0FBRXRFOztBQUVBLHNCQUFzQixtQkFBTyxDQUFDLGtGQUFvQjs7QUFFbEQ7O0FBRUEsV0FBVyxtQkFBTyxDQUFDLDBEQUFROztBQUUzQix1Q0FBdUMsdUNBQXVDOztBQUU5RTs7QUFFQTs7QUFFQSxrQkFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGlCQUFpQjtBQUNqQixrQkFBa0I7QUFDbEIsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYLFVBQVU7QUFDVjtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSx5Q0FBeUM7O0FBRXpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxRQUFRO0FBQ1I7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsUUFBUTtBQUNSO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQiIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9lbGVtZW50LXVpL2xpYi91dGlscy9wb3B1cC9pbmRleC5qcz84ZTQ2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuUG9wdXBNYW5hZ2VyID0gdW5kZWZpbmVkO1xuXG52YXIgX3Z1ZSA9IHJlcXVpcmUoJ3Z1ZScpO1xuXG52YXIgX3Z1ZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF92dWUpO1xuXG52YXIgX21lcmdlID0gcmVxdWlyZSgnZWxlbWVudC11aS9saWIvdXRpbHMvbWVyZ2UnKTtcblxudmFyIF9tZXJnZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9tZXJnZSk7XG5cbnZhciBfcG9wdXBNYW5hZ2VyID0gcmVxdWlyZSgnZWxlbWVudC11aS9saWIvdXRpbHMvcG9wdXAvcG9wdXAtbWFuYWdlcicpO1xuXG52YXIgX3BvcHVwTWFuYWdlcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9wb3B1cE1hbmFnZXIpO1xuXG52YXIgX3Njcm9sbGJhcldpZHRoID0gcmVxdWlyZSgnLi4vc2Nyb2xsYmFyLXdpZHRoJyk7XG5cbnZhciBfc2Nyb2xsYmFyV2lkdGgyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfc2Nyb2xsYmFyV2lkdGgpO1xuXG52YXIgX2RvbSA9IHJlcXVpcmUoJy4uL2RvbScpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG52YXIgaWRTZWVkID0gMTtcblxudmFyIHNjcm9sbEJhcldpZHRoID0gdm9pZCAwO1xuXG5leHBvcnRzLmRlZmF1bHQgPSB7XG4gIHByb3BzOiB7XG4gICAgdmlzaWJsZToge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSxcbiAgICBvcGVuRGVsYXk6IHt9LFxuICAgIGNsb3NlRGVsYXk6IHt9LFxuICAgIHpJbmRleDoge30sXG4gICAgbW9kYWw6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0sXG4gICAgbW9kYWxGYWRlOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0sXG4gICAgbW9kYWxDbGFzczoge30sXG4gICAgbW9kYWxBcHBlbmRUb0JvZHk6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0sXG4gICAgbG9ja1Njcm9sbDoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9LFxuICAgIGNsb3NlT25QcmVzc0VzY2FwZToge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSxcbiAgICBjbG9zZU9uQ2xpY2tNb2RhbDoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGJlZm9yZU1vdW50OiBmdW5jdGlvbiBiZWZvcmVNb3VudCgpIHtcbiAgICB0aGlzLl9wb3B1cElkID0gJ3BvcHVwLScgKyBpZFNlZWQrKztcbiAgICBfcG9wdXBNYW5hZ2VyMi5kZWZhdWx0LnJlZ2lzdGVyKHRoaXMuX3BvcHVwSWQsIHRoaXMpO1xuICB9LFxuICBiZWZvcmVEZXN0cm95OiBmdW5jdGlvbiBiZWZvcmVEZXN0cm95KCkge1xuICAgIF9wb3B1cE1hbmFnZXIyLmRlZmF1bHQuZGVyZWdpc3Rlcih0aGlzLl9wb3B1cElkKTtcbiAgICBfcG9wdXBNYW5hZ2VyMi5kZWZhdWx0LmNsb3NlTW9kYWwodGhpcy5fcG9wdXBJZCk7XG5cbiAgICB0aGlzLnJlc3RvcmVCb2R5U3R5bGUoKTtcbiAgfSxcbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb3BlbmVkOiBmYWxzZSxcbiAgICAgIGJvZHlQYWRkaW5nUmlnaHQ6IG51bGwsXG4gICAgICBjb21wdXRlZEJvZHlQYWRkaW5nUmlnaHQ6IDAsXG4gICAgICB3aXRob3V0SGlkZGVuQ2xhc3M6IHRydWUsXG4gICAgICByZW5kZXJlZDogZmFsc2VcbiAgICB9O1xuICB9LFxuXG5cbiAgd2F0Y2g6IHtcbiAgICB2aXNpYmxlOiBmdW5jdGlvbiB2aXNpYmxlKHZhbCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgaWYgKHZhbCkge1xuICAgICAgICBpZiAodGhpcy5fb3BlbmluZykgcmV0dXJuO1xuICAgICAgICBpZiAoIXRoaXMucmVuZGVyZWQpIHtcbiAgICAgICAgICB0aGlzLnJlbmRlcmVkID0gdHJ1ZTtcbiAgICAgICAgICBfdnVlMi5kZWZhdWx0Lm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLm9wZW4oKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLm9wZW4oKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb3BlbjogZnVuY3Rpb24gb3BlbihvcHRpb25zKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgaWYgKCF0aGlzLnJlbmRlcmVkKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZWQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgcHJvcHMgPSAoMCwgX21lcmdlMi5kZWZhdWx0KSh7fSwgdGhpcy4kcHJvcHMgfHwgdGhpcywgb3B0aW9ucyk7XG5cbiAgICAgIGlmICh0aGlzLl9jbG9zZVRpbWVyKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9jbG9zZVRpbWVyKTtcbiAgICAgICAgdGhpcy5fY2xvc2VUaW1lciA9IG51bGw7XG4gICAgICB9XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5fb3BlblRpbWVyKTtcblxuICAgICAgdmFyIG9wZW5EZWxheSA9IE51bWJlcihwcm9wcy5vcGVuRGVsYXkpO1xuICAgICAgaWYgKG9wZW5EZWxheSA+IDApIHtcbiAgICAgICAgdGhpcy5fb3BlblRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgX3RoaXMyLl9vcGVuVGltZXIgPSBudWxsO1xuICAgICAgICAgIF90aGlzMi5kb09wZW4ocHJvcHMpO1xuICAgICAgICB9LCBvcGVuRGVsYXkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5kb09wZW4ocHJvcHMpO1xuICAgICAgfVxuICAgIH0sXG4gICAgZG9PcGVuOiBmdW5jdGlvbiBkb09wZW4ocHJvcHMpIHtcbiAgICAgIGlmICh0aGlzLiRpc1NlcnZlcikgcmV0dXJuO1xuICAgICAgaWYgKHRoaXMud2lsbE9wZW4gJiYgIXRoaXMud2lsbE9wZW4oKSkgcmV0dXJuO1xuICAgICAgaWYgKHRoaXMub3BlbmVkKSByZXR1cm47XG5cbiAgICAgIHRoaXMuX29wZW5pbmcgPSB0cnVlO1xuXG4gICAgICB2YXIgZG9tID0gdGhpcy4kZWw7XG5cbiAgICAgIHZhciBtb2RhbCA9IHByb3BzLm1vZGFsO1xuXG4gICAgICB2YXIgekluZGV4ID0gcHJvcHMuekluZGV4O1xuICAgICAgaWYgKHpJbmRleCkge1xuICAgICAgICBfcG9wdXBNYW5hZ2VyMi5kZWZhdWx0LnpJbmRleCA9IHpJbmRleDtcbiAgICAgIH1cblxuICAgICAgaWYgKG1vZGFsKSB7XG4gICAgICAgIGlmICh0aGlzLl9jbG9zaW5nKSB7XG4gICAgICAgICAgX3BvcHVwTWFuYWdlcjIuZGVmYXVsdC5jbG9zZU1vZGFsKHRoaXMuX3BvcHVwSWQpO1xuICAgICAgICAgIHRoaXMuX2Nsb3NpbmcgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBfcG9wdXBNYW5hZ2VyMi5kZWZhdWx0Lm9wZW5Nb2RhbCh0aGlzLl9wb3B1cElkLCBfcG9wdXBNYW5hZ2VyMi5kZWZhdWx0Lm5leHRaSW5kZXgoKSwgdGhpcy5tb2RhbEFwcGVuZFRvQm9keSA/IHVuZGVmaW5lZCA6IGRvbSwgcHJvcHMubW9kYWxDbGFzcywgcHJvcHMubW9kYWxGYWRlKTtcbiAgICAgICAgaWYgKHByb3BzLmxvY2tTY3JvbGwpIHtcbiAgICAgICAgICB0aGlzLndpdGhvdXRIaWRkZW5DbGFzcyA9ICEoMCwgX2RvbS5oYXNDbGFzcykoZG9jdW1lbnQuYm9keSwgJ2VsLXBvcHVwLXBhcmVudC0taGlkZGVuJyk7XG4gICAgICAgICAgaWYgKHRoaXMud2l0aG91dEhpZGRlbkNsYXNzKSB7XG4gICAgICAgICAgICB0aGlzLmJvZHlQYWRkaW5nUmlnaHQgPSBkb2N1bWVudC5ib2R5LnN0eWxlLnBhZGRpbmdSaWdodDtcbiAgICAgICAgICAgIHRoaXMuY29tcHV0ZWRCb2R5UGFkZGluZ1JpZ2h0ID0gcGFyc2VJbnQoKDAsIF9kb20uZ2V0U3R5bGUpKGRvY3VtZW50LmJvZHksICdwYWRkaW5nUmlnaHQnKSwgMTApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzY3JvbGxCYXJXaWR0aCA9ICgwLCBfc2Nyb2xsYmFyV2lkdGgyLmRlZmF1bHQpKCk7XG4gICAgICAgICAgdmFyIGJvZHlIYXNPdmVyZmxvdyA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQgPCBkb2N1bWVudC5ib2R5LnNjcm9sbEhlaWdodDtcbiAgICAgICAgICB2YXIgYm9keU92ZXJmbG93WSA9ICgwLCBfZG9tLmdldFN0eWxlKShkb2N1bWVudC5ib2R5LCAnb3ZlcmZsb3dZJyk7XG4gICAgICAgICAgaWYgKHNjcm9sbEJhcldpZHRoID4gMCAmJiAoYm9keUhhc092ZXJmbG93IHx8IGJvZHlPdmVyZmxvd1kgPT09ICdzY3JvbGwnKSAmJiB0aGlzLndpdGhvdXRIaWRkZW5DbGFzcykge1xuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5wYWRkaW5nUmlnaHQgPSB0aGlzLmNvbXB1dGVkQm9keVBhZGRpbmdSaWdodCArIHNjcm9sbEJhcldpZHRoICsgJ3B4JztcbiAgICAgICAgICB9XG4gICAgICAgICAgKDAsIF9kb20uYWRkQ2xhc3MpKGRvY3VtZW50LmJvZHksICdlbC1wb3B1cC1wYXJlbnQtLWhpZGRlbicpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChnZXRDb21wdXRlZFN0eWxlKGRvbSkucG9zaXRpb24gPT09ICdzdGF0aWMnKSB7XG4gICAgICAgIGRvbS5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gICAgICB9XG5cbiAgICAgIGRvbS5zdHlsZS56SW5kZXggPSBfcG9wdXBNYW5hZ2VyMi5kZWZhdWx0Lm5leHRaSW5kZXgoKTtcbiAgICAgIHRoaXMub3BlbmVkID0gdHJ1ZTtcblxuICAgICAgdGhpcy5vbk9wZW4gJiYgdGhpcy5vbk9wZW4oKTtcblxuICAgICAgdGhpcy5kb0FmdGVyT3BlbigpO1xuICAgIH0sXG4gICAgZG9BZnRlck9wZW46IGZ1bmN0aW9uIGRvQWZ0ZXJPcGVuKCkge1xuICAgICAgdGhpcy5fb3BlbmluZyA9IGZhbHNlO1xuICAgIH0sXG4gICAgY2xvc2U6IGZ1bmN0aW9uIGNsb3NlKCkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgIGlmICh0aGlzLndpbGxDbG9zZSAmJiAhdGhpcy53aWxsQ2xvc2UoKSkgcmV0dXJuO1xuXG4gICAgICBpZiAodGhpcy5fb3BlblRpbWVyICE9PSBudWxsKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9vcGVuVGltZXIpO1xuICAgICAgICB0aGlzLl9vcGVuVGltZXIgPSBudWxsO1xuICAgICAgfVxuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX2Nsb3NlVGltZXIpO1xuXG4gICAgICB2YXIgY2xvc2VEZWxheSA9IE51bWJlcih0aGlzLmNsb3NlRGVsYXkpO1xuXG4gICAgICBpZiAoY2xvc2VEZWxheSA+IDApIHtcbiAgICAgICAgdGhpcy5fY2xvc2VUaW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF90aGlzMy5fY2xvc2VUaW1lciA9IG51bGw7XG4gICAgICAgICAgX3RoaXMzLmRvQ2xvc2UoKTtcbiAgICAgICAgfSwgY2xvc2VEZWxheSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRvQ2xvc2UoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGRvQ2xvc2U6IGZ1bmN0aW9uIGRvQ2xvc2UoKSB7XG4gICAgICB0aGlzLl9jbG9zaW5nID0gdHJ1ZTtcblxuICAgICAgdGhpcy5vbkNsb3NlICYmIHRoaXMub25DbG9zZSgpO1xuXG4gICAgICBpZiAodGhpcy5sb2NrU2Nyb2xsKSB7XG4gICAgICAgIHNldFRpbWVvdXQodGhpcy5yZXN0b3JlQm9keVN0eWxlLCAyMDApO1xuICAgICAgfVxuXG4gICAgICB0aGlzLm9wZW5lZCA9IGZhbHNlO1xuXG4gICAgICB0aGlzLmRvQWZ0ZXJDbG9zZSgpO1xuICAgIH0sXG4gICAgZG9BZnRlckNsb3NlOiBmdW5jdGlvbiBkb0FmdGVyQ2xvc2UoKSB7XG4gICAgICBfcG9wdXBNYW5hZ2VyMi5kZWZhdWx0LmNsb3NlTW9kYWwodGhpcy5fcG9wdXBJZCk7XG4gICAgICB0aGlzLl9jbG9zaW5nID0gZmFsc2U7XG4gICAgfSxcbiAgICByZXN0b3JlQm9keVN0eWxlOiBmdW5jdGlvbiByZXN0b3JlQm9keVN0eWxlKCkge1xuICAgICAgaWYgKHRoaXMubW9kYWwgJiYgdGhpcy53aXRob3V0SGlkZGVuQ2xhc3MpIHtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5wYWRkaW5nUmlnaHQgPSB0aGlzLmJvZHlQYWRkaW5nUmlnaHQ7XG4gICAgICAgICgwLCBfZG9tLnJlbW92ZUNsYXNzKShkb2N1bWVudC5ib2R5LCAnZWwtcG9wdXAtcGFyZW50LS1oaWRkZW4nKTtcbiAgICAgIH1cbiAgICAgIHRoaXMud2l0aG91dEhpZGRlbkNsYXNzID0gdHJ1ZTtcbiAgICB9XG4gIH1cbn07XG5leHBvcnRzLlBvcHVwTWFuYWdlciA9IF9wb3B1cE1hbmFnZXIyLmRlZmF1bHQ7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/utils/popup/index.js\n");

/***/ }),

/***/ "./node_modules/element-ui/lib/utils/popup/popup-manager.js":
/*!******************************************************************!*\
  !*** ./node_modules/element-ui/lib/utils/popup/popup-manager.js ***!
  \******************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";
eval("\n\nexports.__esModule = true;\n\nvar _vue = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.esm.js\");\n\nvar _vue2 = _interopRequireDefault(_vue);\n\nvar _dom = __webpack_require__(/*! element-ui/lib/utils/dom */ \"./node_modules/element-ui/lib/utils/dom.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar hasModal = false;\nvar hasInitZIndex = false;\nvar zIndex = void 0;\n\nvar getModal = function getModal() {\n  if (_vue2.default.prototype.$isServer) return;\n  var modalDom = PopupManager.modalDom;\n  if (modalDom) {\n    hasModal = true;\n  } else {\n    hasModal = false;\n    modalDom = document.createElement('div');\n    PopupManager.modalDom = modalDom;\n\n    modalDom.addEventListener('touchmove', function (event) {\n      event.preventDefault();\n      event.stopPropagation();\n    });\n\n    modalDom.addEventListener('click', function () {\n      PopupManager.doOnModalClick && PopupManager.doOnModalClick();\n    });\n  }\n\n  return modalDom;\n};\n\nvar instances = {};\n\nvar PopupManager = {\n  modalFade: true,\n\n  getInstance: function getInstance(id) {\n    return instances[id];\n  },\n\n  register: function register(id, instance) {\n    if (id && instance) {\n      instances[id] = instance;\n    }\n  },\n\n  deregister: function deregister(id) {\n    if (id) {\n      instances[id] = null;\n      delete instances[id];\n    }\n  },\n\n  nextZIndex: function nextZIndex() {\n    return PopupManager.zIndex++;\n  },\n\n  modalStack: [],\n\n  doOnModalClick: function doOnModalClick() {\n    var topItem = PopupManager.modalStack[PopupManager.modalStack.length - 1];\n    if (!topItem) return;\n\n    var instance = PopupManager.getInstance(topItem.id);\n    if (instance && instance.closeOnClickModal) {\n      instance.close();\n    }\n  },\n\n  openModal: function openModal(id, zIndex, dom, modalClass, modalFade) {\n    if (_vue2.default.prototype.$isServer) return;\n    if (!id || zIndex === undefined) return;\n    this.modalFade = modalFade;\n\n    var modalStack = this.modalStack;\n\n    for (var i = 0, j = modalStack.length; i < j; i++) {\n      var item = modalStack[i];\n      if (item.id === id) {\n        return;\n      }\n    }\n\n    var modalDom = getModal();\n\n    (0, _dom.addClass)(modalDom, 'v-modal');\n    if (this.modalFade && !hasModal) {\n      (0, _dom.addClass)(modalDom, 'v-modal-enter');\n    }\n    if (modalClass) {\n      var classArr = modalClass.trim().split(/\\s+/);\n      classArr.forEach(function (item) {\n        return (0, _dom.addClass)(modalDom, item);\n      });\n    }\n    setTimeout(function () {\n      (0, _dom.removeClass)(modalDom, 'v-modal-enter');\n    }, 200);\n\n    if (dom && dom.parentNode && dom.parentNode.nodeType !== 11) {\n      dom.parentNode.appendChild(modalDom);\n    } else {\n      document.body.appendChild(modalDom);\n    }\n\n    if (zIndex) {\n      modalDom.style.zIndex = zIndex;\n    }\n    modalDom.tabIndex = 0;\n    modalDom.style.display = '';\n\n    this.modalStack.push({ id: id, zIndex: zIndex, modalClass: modalClass });\n  },\n\n  closeModal: function closeModal(id) {\n    var modalStack = this.modalStack;\n    var modalDom = getModal();\n\n    if (modalStack.length > 0) {\n      var topItem = modalStack[modalStack.length - 1];\n      if (topItem.id === id) {\n        if (topItem.modalClass) {\n          var classArr = topItem.modalClass.trim().split(/\\s+/);\n          classArr.forEach(function (item) {\n            return (0, _dom.removeClass)(modalDom, item);\n          });\n        }\n\n        modalStack.pop();\n        if (modalStack.length > 0) {\n          modalDom.style.zIndex = modalStack[modalStack.length - 1].zIndex;\n        }\n      } else {\n        for (var i = modalStack.length - 1; i >= 0; i--) {\n          if (modalStack[i].id === id) {\n            modalStack.splice(i, 1);\n            break;\n          }\n        }\n      }\n    }\n\n    if (modalStack.length === 0) {\n      if (this.modalFade) {\n        (0, _dom.addClass)(modalDom, 'v-modal-leave');\n      }\n      setTimeout(function () {\n        if (modalStack.length === 0) {\n          if (modalDom.parentNode) modalDom.parentNode.removeChild(modalDom);\n          modalDom.style.display = 'none';\n          PopupManager.modalDom = undefined;\n        }\n        (0, _dom.removeClass)(modalDom, 'v-modal-leave');\n      }, 200);\n    }\n  }\n};\n\nObject.defineProperty(PopupManager, 'zIndex', {\n  configurable: true,\n  get: function get() {\n    if (!hasInitZIndex) {\n      zIndex = zIndex || (_vue2.default.prototype.$ELEMENT || {}).zIndex || 2000;\n      hasInitZIndex = true;\n    }\n    return zIndex;\n  },\n  set: function set(value) {\n    zIndex = value;\n  }\n});\n\nvar getTopPopup = function getTopPopup() {\n  if (_vue2.default.prototype.$isServer) return;\n  if (PopupManager.modalStack.length > 0) {\n    var topPopup = PopupManager.modalStack[PopupManager.modalStack.length - 1];\n    if (!topPopup) return;\n    var instance = PopupManager.getInstance(topPopup.id);\n\n    return instance;\n  }\n};\n\nif (!_vue2.default.prototype.$isServer) {\n  // handle `esc` key when the popup is shown\n  window.addEventListener('keydown', function (event) {\n    if (event.keyCode === 27) {\n      var topPopup = getTopPopup();\n\n      if (topPopup && topPopup.closeOnPressEscape) {\n        topPopup.handleClose ? topPopup.handleClose() : topPopup.handleAction ? topPopup.handleAction('cancel') : topPopup.close();\n      }\n    }\n  });\n}\n\nexports[\"default\"] = PopupManager;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdXRpbHMvcG9wdXAvcG9wdXAtbWFuYWdlci5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0I7O0FBRWxCLFdBQVcsbUJBQU8sQ0FBQywrQ0FBSzs7QUFFeEI7O0FBRUEsV0FBVyxtQkFBTyxDQUFDLDRFQUEwQjs7QUFFN0MsdUNBQXVDLHVDQUF1Qzs7QUFFOUU7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsMkNBQTJDLE9BQU87QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsMkJBQTJCLGdEQUFnRDtBQUMzRSxHQUFHOztBQUVIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUiw0Q0FBNEMsUUFBUTtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdFQUFnRTtBQUNoRTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUEsa0JBQWUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdXRpbHMvcG9wdXAvcG9wdXAtbWFuYWdlci5qcz81ODE0Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxudmFyIF92dWUgPSByZXF1aXJlKCd2dWUnKTtcblxudmFyIF92dWUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfdnVlKTtcblxudmFyIF9kb20gPSByZXF1aXJlKCdlbGVtZW50LXVpL2xpYi91dGlscy9kb20nKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxudmFyIGhhc01vZGFsID0gZmFsc2U7XG52YXIgaGFzSW5pdFpJbmRleCA9IGZhbHNlO1xudmFyIHpJbmRleCA9IHZvaWQgMDtcblxudmFyIGdldE1vZGFsID0gZnVuY3Rpb24gZ2V0TW9kYWwoKSB7XG4gIGlmIChfdnVlMi5kZWZhdWx0LnByb3RvdHlwZS4kaXNTZXJ2ZXIpIHJldHVybjtcbiAgdmFyIG1vZGFsRG9tID0gUG9wdXBNYW5hZ2VyLm1vZGFsRG9tO1xuICBpZiAobW9kYWxEb20pIHtcbiAgICBoYXNNb2RhbCA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgaGFzTW9kYWwgPSBmYWxzZTtcbiAgICBtb2RhbERvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIFBvcHVwTWFuYWdlci5tb2RhbERvbSA9IG1vZGFsRG9tO1xuXG4gICAgbW9kYWxEb20uYWRkRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfSk7XG5cbiAgICBtb2RhbERvbS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIFBvcHVwTWFuYWdlci5kb09uTW9kYWxDbGljayAmJiBQb3B1cE1hbmFnZXIuZG9Pbk1vZGFsQ2xpY2soKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBtb2RhbERvbTtcbn07XG5cbnZhciBpbnN0YW5jZXMgPSB7fTtcblxudmFyIFBvcHVwTWFuYWdlciA9IHtcbiAgbW9kYWxGYWRlOiB0cnVlLFxuXG4gIGdldEluc3RhbmNlOiBmdW5jdGlvbiBnZXRJbnN0YW5jZShpZCkge1xuICAgIHJldHVybiBpbnN0YW5jZXNbaWRdO1xuICB9LFxuXG4gIHJlZ2lzdGVyOiBmdW5jdGlvbiByZWdpc3RlcihpZCwgaW5zdGFuY2UpIHtcbiAgICBpZiAoaWQgJiYgaW5zdGFuY2UpIHtcbiAgICAgIGluc3RhbmNlc1tpZF0gPSBpbnN0YW5jZTtcbiAgICB9XG4gIH0sXG5cbiAgZGVyZWdpc3RlcjogZnVuY3Rpb24gZGVyZWdpc3RlcihpZCkge1xuICAgIGlmIChpZCkge1xuICAgICAgaW5zdGFuY2VzW2lkXSA9IG51bGw7XG4gICAgICBkZWxldGUgaW5zdGFuY2VzW2lkXTtcbiAgICB9XG4gIH0sXG5cbiAgbmV4dFpJbmRleDogZnVuY3Rpb24gbmV4dFpJbmRleCgpIHtcbiAgICByZXR1cm4gUG9wdXBNYW5hZ2VyLnpJbmRleCsrO1xuICB9LFxuXG4gIG1vZGFsU3RhY2s6IFtdLFxuXG4gIGRvT25Nb2RhbENsaWNrOiBmdW5jdGlvbiBkb09uTW9kYWxDbGljaygpIHtcbiAgICB2YXIgdG9wSXRlbSA9IFBvcHVwTWFuYWdlci5tb2RhbFN0YWNrW1BvcHVwTWFuYWdlci5tb2RhbFN0YWNrLmxlbmd0aCAtIDFdO1xuICAgIGlmICghdG9wSXRlbSkgcmV0dXJuO1xuXG4gICAgdmFyIGluc3RhbmNlID0gUG9wdXBNYW5hZ2VyLmdldEluc3RhbmNlKHRvcEl0ZW0uaWQpO1xuICAgIGlmIChpbnN0YW5jZSAmJiBpbnN0YW5jZS5jbG9zZU9uQ2xpY2tNb2RhbCkge1xuICAgICAgaW5zdGFuY2UuY2xvc2UoKTtcbiAgICB9XG4gIH0sXG5cbiAgb3Blbk1vZGFsOiBmdW5jdGlvbiBvcGVuTW9kYWwoaWQsIHpJbmRleCwgZG9tLCBtb2RhbENsYXNzLCBtb2RhbEZhZGUpIHtcbiAgICBpZiAoX3Z1ZTIuZGVmYXVsdC5wcm90b3R5cGUuJGlzU2VydmVyKSByZXR1cm47XG4gICAgaWYgKCFpZCB8fCB6SW5kZXggPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuICAgIHRoaXMubW9kYWxGYWRlID0gbW9kYWxGYWRlO1xuXG4gICAgdmFyIG1vZGFsU3RhY2sgPSB0aGlzLm1vZGFsU3RhY2s7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IG1vZGFsU3RhY2subGVuZ3RoOyBpIDwgajsgaSsrKSB7XG4gICAgICB2YXIgaXRlbSA9IG1vZGFsU3RhY2tbaV07XG4gICAgICBpZiAoaXRlbS5pZCA9PT0gaWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBtb2RhbERvbSA9IGdldE1vZGFsKCk7XG5cbiAgICAoMCwgX2RvbS5hZGRDbGFzcykobW9kYWxEb20sICd2LW1vZGFsJyk7XG4gICAgaWYgKHRoaXMubW9kYWxGYWRlICYmICFoYXNNb2RhbCkge1xuICAgICAgKDAsIF9kb20uYWRkQ2xhc3MpKG1vZGFsRG9tLCAndi1tb2RhbC1lbnRlcicpO1xuICAgIH1cbiAgICBpZiAobW9kYWxDbGFzcykge1xuICAgICAgdmFyIGNsYXNzQXJyID0gbW9kYWxDbGFzcy50cmltKCkuc3BsaXQoL1xccysvKTtcbiAgICAgIGNsYXNzQXJyLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuICgwLCBfZG9tLmFkZENsYXNzKShtb2RhbERvbSwgaXRlbSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAoMCwgX2RvbS5yZW1vdmVDbGFzcykobW9kYWxEb20sICd2LW1vZGFsLWVudGVyJyk7XG4gICAgfSwgMjAwKTtcblxuICAgIGlmIChkb20gJiYgZG9tLnBhcmVudE5vZGUgJiYgZG9tLnBhcmVudE5vZGUubm9kZVR5cGUgIT09IDExKSB7XG4gICAgICBkb20ucGFyZW50Tm9kZS5hcHBlbmRDaGlsZChtb2RhbERvbSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobW9kYWxEb20pO1xuICAgIH1cblxuICAgIGlmICh6SW5kZXgpIHtcbiAgICAgIG1vZGFsRG9tLnN0eWxlLnpJbmRleCA9IHpJbmRleDtcbiAgICB9XG4gICAgbW9kYWxEb20udGFiSW5kZXggPSAwO1xuICAgIG1vZGFsRG9tLnN0eWxlLmRpc3BsYXkgPSAnJztcblxuICAgIHRoaXMubW9kYWxTdGFjay5wdXNoKHsgaWQ6IGlkLCB6SW5kZXg6IHpJbmRleCwgbW9kYWxDbGFzczogbW9kYWxDbGFzcyB9KTtcbiAgfSxcblxuICBjbG9zZU1vZGFsOiBmdW5jdGlvbiBjbG9zZU1vZGFsKGlkKSB7XG4gICAgdmFyIG1vZGFsU3RhY2sgPSB0aGlzLm1vZGFsU3RhY2s7XG4gICAgdmFyIG1vZGFsRG9tID0gZ2V0TW9kYWwoKTtcblxuICAgIGlmIChtb2RhbFN0YWNrLmxlbmd0aCA+IDApIHtcbiAgICAgIHZhciB0b3BJdGVtID0gbW9kYWxTdGFja1ttb2RhbFN0YWNrLmxlbmd0aCAtIDFdO1xuICAgICAgaWYgKHRvcEl0ZW0uaWQgPT09IGlkKSB7XG4gICAgICAgIGlmICh0b3BJdGVtLm1vZGFsQ2xhc3MpIHtcbiAgICAgICAgICB2YXIgY2xhc3NBcnIgPSB0b3BJdGVtLm1vZGFsQ2xhc3MudHJpbSgpLnNwbGl0KC9cXHMrLyk7XG4gICAgICAgICAgY2xhc3NBcnIuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgICAgcmV0dXJuICgwLCBfZG9tLnJlbW92ZUNsYXNzKShtb2RhbERvbSwgaXRlbSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBtb2RhbFN0YWNrLnBvcCgpO1xuICAgICAgICBpZiAobW9kYWxTdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgbW9kYWxEb20uc3R5bGUuekluZGV4ID0gbW9kYWxTdGFja1ttb2RhbFN0YWNrLmxlbmd0aCAtIDFdLnpJbmRleDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IG1vZGFsU3RhY2subGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICBpZiAobW9kYWxTdGFja1tpXS5pZCA9PT0gaWQpIHtcbiAgICAgICAgICAgIG1vZGFsU3RhY2suc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG1vZGFsU3RhY2subGVuZ3RoID09PSAwKSB7XG4gICAgICBpZiAodGhpcy5tb2RhbEZhZGUpIHtcbiAgICAgICAgKDAsIF9kb20uYWRkQ2xhc3MpKG1vZGFsRG9tLCAndi1tb2RhbC1sZWF2ZScpO1xuICAgICAgfVxuICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChtb2RhbFN0YWNrLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGlmIChtb2RhbERvbS5wYXJlbnROb2RlKSBtb2RhbERvbS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG1vZGFsRG9tKTtcbiAgICAgICAgICBtb2RhbERvbS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICAgIFBvcHVwTWFuYWdlci5tb2RhbERvbSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICAoMCwgX2RvbS5yZW1vdmVDbGFzcykobW9kYWxEb20sICd2LW1vZGFsLWxlYXZlJyk7XG4gICAgICB9LCAyMDApO1xuICAgIH1cbiAgfVxufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFBvcHVwTWFuYWdlciwgJ3pJbmRleCcsIHtcbiAgY29uZmlndXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICBpZiAoIWhhc0luaXRaSW5kZXgpIHtcbiAgICAgIHpJbmRleCA9IHpJbmRleCB8fCAoX3Z1ZTIuZGVmYXVsdC5wcm90b3R5cGUuJEVMRU1FTlQgfHwge30pLnpJbmRleCB8fCAyMDAwO1xuICAgICAgaGFzSW5pdFpJbmRleCA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiB6SW5kZXg7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24gc2V0KHZhbHVlKSB7XG4gICAgekluZGV4ID0gdmFsdWU7XG4gIH1cbn0pO1xuXG52YXIgZ2V0VG9wUG9wdXAgPSBmdW5jdGlvbiBnZXRUb3BQb3B1cCgpIHtcbiAgaWYgKF92dWUyLmRlZmF1bHQucHJvdG90eXBlLiRpc1NlcnZlcikgcmV0dXJuO1xuICBpZiAoUG9wdXBNYW5hZ2VyLm1vZGFsU3RhY2subGVuZ3RoID4gMCkge1xuICAgIHZhciB0b3BQb3B1cCA9IFBvcHVwTWFuYWdlci5tb2RhbFN0YWNrW1BvcHVwTWFuYWdlci5tb2RhbFN0YWNrLmxlbmd0aCAtIDFdO1xuICAgIGlmICghdG9wUG9wdXApIHJldHVybjtcbiAgICB2YXIgaW5zdGFuY2UgPSBQb3B1cE1hbmFnZXIuZ2V0SW5zdGFuY2UodG9wUG9wdXAuaWQpO1xuXG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG59O1xuXG5pZiAoIV92dWUyLmRlZmF1bHQucHJvdG90eXBlLiRpc1NlcnZlcikge1xuICAvLyBoYW5kbGUgYGVzY2Aga2V5IHdoZW4gdGhlIHBvcHVwIGlzIHNob3duXG4gIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IDI3KSB7XG4gICAgICB2YXIgdG9wUG9wdXAgPSBnZXRUb3BQb3B1cCgpO1xuXG4gICAgICBpZiAodG9wUG9wdXAgJiYgdG9wUG9wdXAuY2xvc2VPblByZXNzRXNjYXBlKSB7XG4gICAgICAgIHRvcFBvcHVwLmhhbmRsZUNsb3NlID8gdG9wUG9wdXAuaGFuZGxlQ2xvc2UoKSA6IHRvcFBvcHVwLmhhbmRsZUFjdGlvbiA/IHRvcFBvcHVwLmhhbmRsZUFjdGlvbignY2FuY2VsJykgOiB0b3BQb3B1cC5jbG9zZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydHMuZGVmYXVsdCA9IFBvcHVwTWFuYWdlcjsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/utils/popup/popup-manager.js\n");

/***/ }),

/***/ "./node_modules/element-ui/lib/utils/resize-event.js":
/*!***********************************************************!*\
  !*** ./node_modules/element-ui/lib/utils/resize-event.js ***!
  \***********************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";
eval("\n\nexports.__esModule = true;\nexports.removeResizeListener = exports.addResizeListener = undefined;\n\nvar _resizeObserverPolyfill = __webpack_require__(/*! resize-observer-polyfill */ \"./node_modules/resize-observer-polyfill/dist/ResizeObserver.es.js\");\n\nvar _resizeObserverPolyfill2 = _interopRequireDefault(_resizeObserverPolyfill);\n\nvar _throttleDebounce = __webpack_require__(/*! throttle-debounce */ \"./node_modules/throttle-debounce/index.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar isServer = typeof window === 'undefined';\n\n/* istanbul ignore next */\nvar resizeHandler = function resizeHandler(entries) {\n  for (var _iterator = entries, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n    var _ref;\n\n    if (_isArray) {\n      if (_i >= _iterator.length) break;\n      _ref = _iterator[_i++];\n    } else {\n      _i = _iterator.next();\n      if (_i.done) break;\n      _ref = _i.value;\n    }\n\n    var entry = _ref;\n\n    var listeners = entry.target.__resizeListeners__ || [];\n    if (listeners.length) {\n      listeners.forEach(function (fn) {\n        fn();\n      });\n    }\n  }\n};\n\n/* istanbul ignore next */\nvar addResizeListener = exports.addResizeListener = function addResizeListener(element, fn) {\n  if (isServer) return;\n  if (!element.__resizeListeners__) {\n    element.__resizeListeners__ = [];\n    element.__ro__ = new _resizeObserverPolyfill2.default((0, _throttleDebounce.debounce)(16, resizeHandler));\n    element.__ro__.observe(element);\n  }\n  element.__resizeListeners__.push(fn);\n};\n\n/* istanbul ignore next */\nvar removeResizeListener = exports.removeResizeListener = function removeResizeListener(element, fn) {\n  if (!element || !element.__resizeListeners__) return;\n  element.__resizeListeners__.splice(element.__resizeListeners__.indexOf(fn), 1);\n  if (!element.__resizeListeners__.length) {\n    element.__ro__.disconnect();\n  }\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdXRpbHMvcmVzaXplLWV2ZW50LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLGtCQUFrQjtBQUNsQiw0QkFBNEIsR0FBRyx5QkFBeUI7O0FBRXhELDhCQUE4QixtQkFBTyxDQUFDLG1HQUEwQjs7QUFFaEU7O0FBRUEsd0JBQXdCLG1CQUFPLENBQUMsb0VBQW1COztBQUVuRCx1Q0FBdUMsdUNBQXVDOztBQUU5RTs7QUFFQTtBQUNBO0FBQ0EsOElBQThJO0FBQzlJOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx3QkFBd0IseUJBQXlCO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyQkFBMkIsNEJBQTRCO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9lbGVtZW50LXVpL2xpYi91dGlscy9yZXNpemUtZXZlbnQuanM/NjNkYyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLnJlbW92ZVJlc2l6ZUxpc3RlbmVyID0gZXhwb3J0cy5hZGRSZXNpemVMaXN0ZW5lciA9IHVuZGVmaW5lZDtcblxudmFyIF9yZXNpemVPYnNlcnZlclBvbHlmaWxsID0gcmVxdWlyZSgncmVzaXplLW9ic2VydmVyLXBvbHlmaWxsJyk7XG5cbnZhciBfcmVzaXplT2JzZXJ2ZXJQb2x5ZmlsbDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9yZXNpemVPYnNlcnZlclBvbHlmaWxsKTtcblxudmFyIF90aHJvdHRsZURlYm91bmNlID0gcmVxdWlyZSgndGhyb3R0bGUtZGVib3VuY2UnKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxudmFyIGlzU2VydmVyID0gdHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCc7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG52YXIgcmVzaXplSGFuZGxlciA9IGZ1bmN0aW9uIHJlc2l6ZUhhbmRsZXIoZW50cmllcykge1xuICBmb3IgKHZhciBfaXRlcmF0b3IgPSBlbnRyaWVzLCBfaXNBcnJheSA9IEFycmF5LmlzQXJyYXkoX2l0ZXJhdG9yKSwgX2kgPSAwLCBfaXRlcmF0b3IgPSBfaXNBcnJheSA/IF9pdGVyYXRvciA6IF9pdGVyYXRvcltTeW1ib2wuaXRlcmF0b3JdKCk7Oykge1xuICAgIHZhciBfcmVmO1xuXG4gICAgaWYgKF9pc0FycmF5KSB7XG4gICAgICBpZiAoX2kgPj0gX2l0ZXJhdG9yLmxlbmd0aCkgYnJlYWs7XG4gICAgICBfcmVmID0gX2l0ZXJhdG9yW19pKytdO1xuICAgIH0gZWxzZSB7XG4gICAgICBfaSA9IF9pdGVyYXRvci5uZXh0KCk7XG4gICAgICBpZiAoX2kuZG9uZSkgYnJlYWs7XG4gICAgICBfcmVmID0gX2kudmFsdWU7XG4gICAgfVxuXG4gICAgdmFyIGVudHJ5ID0gX3JlZjtcblxuICAgIHZhciBsaXN0ZW5lcnMgPSBlbnRyeS50YXJnZXQuX19yZXNpemVMaXN0ZW5lcnNfXyB8fCBbXTtcbiAgICBpZiAobGlzdGVuZXJzLmxlbmd0aCkge1xuICAgICAgbGlzdGVuZXJzLmZvckVhY2goZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIGZuKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn07XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG52YXIgYWRkUmVzaXplTGlzdGVuZXIgPSBleHBvcnRzLmFkZFJlc2l6ZUxpc3RlbmVyID0gZnVuY3Rpb24gYWRkUmVzaXplTGlzdGVuZXIoZWxlbWVudCwgZm4pIHtcbiAgaWYgKGlzU2VydmVyKSByZXR1cm47XG4gIGlmICghZWxlbWVudC5fX3Jlc2l6ZUxpc3RlbmVyc19fKSB7XG4gICAgZWxlbWVudC5fX3Jlc2l6ZUxpc3RlbmVyc19fID0gW107XG4gICAgZWxlbWVudC5fX3JvX18gPSBuZXcgX3Jlc2l6ZU9ic2VydmVyUG9seWZpbGwyLmRlZmF1bHQoKDAsIF90aHJvdHRsZURlYm91bmNlLmRlYm91bmNlKSgxNiwgcmVzaXplSGFuZGxlcikpO1xuICAgIGVsZW1lbnQuX19yb19fLm9ic2VydmUoZWxlbWVudCk7XG4gIH1cbiAgZWxlbWVudC5fX3Jlc2l6ZUxpc3RlbmVyc19fLnB1c2goZm4pO1xufTtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbnZhciByZW1vdmVSZXNpemVMaXN0ZW5lciA9IGV4cG9ydHMucmVtb3ZlUmVzaXplTGlzdGVuZXIgPSBmdW5jdGlvbiByZW1vdmVSZXNpemVMaXN0ZW5lcihlbGVtZW50LCBmbikge1xuICBpZiAoIWVsZW1lbnQgfHwgIWVsZW1lbnQuX19yZXNpemVMaXN0ZW5lcnNfXykgcmV0dXJuO1xuICBlbGVtZW50Ll9fcmVzaXplTGlzdGVuZXJzX18uc3BsaWNlKGVsZW1lbnQuX19yZXNpemVMaXN0ZW5lcnNfXy5pbmRleE9mKGZuKSwgMSk7XG4gIGlmICghZWxlbWVudC5fX3Jlc2l6ZUxpc3RlbmVyc19fLmxlbmd0aCkge1xuICAgIGVsZW1lbnQuX19yb19fLmRpc2Nvbm5lY3QoKTtcbiAgfVxufTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/utils/resize-event.js\n");

/***/ }),

/***/ "./node_modules/element-ui/lib/utils/scroll-into-view.js":
/*!***************************************************************!*\
  !*** ./node_modules/element-ui/lib/utils/scroll-into-view.js ***!
  \***************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";
eval("\n\nexports.__esModule = true;\nexports[\"default\"] = scrollIntoView;\n\nvar _vue = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.esm.js\");\n\nvar _vue2 = _interopRequireDefault(_vue);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction scrollIntoView(container, selected) {\n  if (_vue2.default.prototype.$isServer) return;\n\n  if (!selected) {\n    container.scrollTop = 0;\n    return;\n  }\n\n  var offsetParents = [];\n  var pointer = selected.offsetParent;\n  while (pointer && container !== pointer && container.contains(pointer)) {\n    offsetParents.push(pointer);\n    pointer = pointer.offsetParent;\n  }\n  var top = selected.offsetTop + offsetParents.reduce(function (prev, curr) {\n    return prev + curr.offsetTop;\n  }, 0);\n  var bottom = top + selected.offsetHeight;\n  var viewRectTop = container.scrollTop;\n  var viewRectBottom = viewRectTop + container.clientHeight;\n\n  if (top < viewRectTop) {\n    container.scrollTop = top;\n  } else if (bottom > viewRectBottom) {\n    container.scrollTop = bottom - container.clientHeight;\n  }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdXRpbHMvc2Nyb2xsLWludG8tdmlldy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0I7QUFDbEIsa0JBQWU7O0FBRWYsV0FBVyxtQkFBTyxDQUFDLCtDQUFLOztBQUV4Qjs7QUFFQSx1Q0FBdUMsdUNBQXVDOztBQUU5RTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2VsZW1lbnQtdWkvbGliL3V0aWxzL3Njcm9sbC1pbnRvLXZpZXcuanM/NmQ2NCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLmRlZmF1bHQgPSBzY3JvbGxJbnRvVmlldztcblxudmFyIF92dWUgPSByZXF1aXJlKCd2dWUnKTtcblxudmFyIF92dWUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfdnVlKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZnVuY3Rpb24gc2Nyb2xsSW50b1ZpZXcoY29udGFpbmVyLCBzZWxlY3RlZCkge1xuICBpZiAoX3Z1ZTIuZGVmYXVsdC5wcm90b3R5cGUuJGlzU2VydmVyKSByZXR1cm47XG5cbiAgaWYgKCFzZWxlY3RlZCkge1xuICAgIGNvbnRhaW5lci5zY3JvbGxUb3AgPSAwO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBvZmZzZXRQYXJlbnRzID0gW107XG4gIHZhciBwb2ludGVyID0gc2VsZWN0ZWQub2Zmc2V0UGFyZW50O1xuICB3aGlsZSAocG9pbnRlciAmJiBjb250YWluZXIgIT09IHBvaW50ZXIgJiYgY29udGFpbmVyLmNvbnRhaW5zKHBvaW50ZXIpKSB7XG4gICAgb2Zmc2V0UGFyZW50cy5wdXNoKHBvaW50ZXIpO1xuICAgIHBvaW50ZXIgPSBwb2ludGVyLm9mZnNldFBhcmVudDtcbiAgfVxuICB2YXIgdG9wID0gc2VsZWN0ZWQub2Zmc2V0VG9wICsgb2Zmc2V0UGFyZW50cy5yZWR1Y2UoZnVuY3Rpb24gKHByZXYsIGN1cnIpIHtcbiAgICByZXR1cm4gcHJldiArIGN1cnIub2Zmc2V0VG9wO1xuICB9LCAwKTtcbiAgdmFyIGJvdHRvbSA9IHRvcCArIHNlbGVjdGVkLm9mZnNldEhlaWdodDtcbiAgdmFyIHZpZXdSZWN0VG9wID0gY29udGFpbmVyLnNjcm9sbFRvcDtcbiAgdmFyIHZpZXdSZWN0Qm90dG9tID0gdmlld1JlY3RUb3AgKyBjb250YWluZXIuY2xpZW50SGVpZ2h0O1xuXG4gIGlmICh0b3AgPCB2aWV3UmVjdFRvcCkge1xuICAgIGNvbnRhaW5lci5zY3JvbGxUb3AgPSB0b3A7XG4gIH0gZWxzZSBpZiAoYm90dG9tID4gdmlld1JlY3RCb3R0b20pIHtcbiAgICBjb250YWluZXIuc2Nyb2xsVG9wID0gYm90dG9tIC0gY29udGFpbmVyLmNsaWVudEhlaWdodDtcbiAgfVxufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/utils/scroll-into-view.js\n");

/***/ }),

/***/ "./node_modules/element-ui/lib/utils/scrollbar-width.js":
/*!**************************************************************!*\
  !*** ./node_modules/element-ui/lib/utils/scrollbar-width.js ***!
  \**************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";
eval("\n\nexports.__esModule = true;\n\nexports[\"default\"] = function () {\n  if (_vue2.default.prototype.$isServer) return 0;\n  if (scrollBarWidth !== undefined) return scrollBarWidth;\n\n  var outer = document.createElement('div');\n  outer.className = 'el-scrollbar__wrap';\n  outer.style.visibility = 'hidden';\n  outer.style.width = '100px';\n  outer.style.position = 'absolute';\n  outer.style.top = '-9999px';\n  document.body.appendChild(outer);\n\n  var widthNoScroll = outer.offsetWidth;\n  outer.style.overflow = 'scroll';\n\n  var inner = document.createElement('div');\n  inner.style.width = '100%';\n  outer.appendChild(inner);\n\n  var widthWithScroll = inner.offsetWidth;\n  outer.parentNode.removeChild(outer);\n  scrollBarWidth = widthNoScroll - widthWithScroll;\n\n  return scrollBarWidth;\n};\n\nvar _vue = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.esm.js\");\n\nvar _vue2 = _interopRequireDefault(_vue);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar scrollBarWidth = void 0;\n\n;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdXRpbHMvc2Nyb2xsYmFyLXdpZHRoLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLGtCQUFrQjs7QUFFbEIsa0JBQWU7QUFDZjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLFdBQVcsbUJBQU8sQ0FBQywrQ0FBSzs7QUFFeEI7O0FBRUEsdUNBQXVDLHVDQUF1Qzs7QUFFOUU7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdXRpbHMvc2Nyb2xsYmFyLXdpZHRoLmpzPzc4MzEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG5leHBvcnRzLmRlZmF1bHQgPSBmdW5jdGlvbiAoKSB7XG4gIGlmIChfdnVlMi5kZWZhdWx0LnByb3RvdHlwZS4kaXNTZXJ2ZXIpIHJldHVybiAwO1xuICBpZiAoc2Nyb2xsQmFyV2lkdGggIT09IHVuZGVmaW5lZCkgcmV0dXJuIHNjcm9sbEJhcldpZHRoO1xuXG4gIHZhciBvdXRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICBvdXRlci5jbGFzc05hbWUgPSAnZWwtc2Nyb2xsYmFyX193cmFwJztcbiAgb3V0ZXIuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICBvdXRlci5zdHlsZS53aWR0aCA9ICcxMDBweCc7XG4gIG91dGVyLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgb3V0ZXIuc3R5bGUudG9wID0gJy05OTk5cHgnO1xuICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG91dGVyKTtcblxuICB2YXIgd2lkdGhOb1Njcm9sbCA9IG91dGVyLm9mZnNldFdpZHRoO1xuICBvdXRlci5zdHlsZS5vdmVyZmxvdyA9ICdzY3JvbGwnO1xuXG4gIHZhciBpbm5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICBpbm5lci5zdHlsZS53aWR0aCA9ICcxMDAlJztcbiAgb3V0ZXIuYXBwZW5kQ2hpbGQoaW5uZXIpO1xuXG4gIHZhciB3aWR0aFdpdGhTY3JvbGwgPSBpbm5lci5vZmZzZXRXaWR0aDtcbiAgb3V0ZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChvdXRlcik7XG4gIHNjcm9sbEJhcldpZHRoID0gd2lkdGhOb1Njcm9sbCAtIHdpZHRoV2l0aFNjcm9sbDtcblxuICByZXR1cm4gc2Nyb2xsQmFyV2lkdGg7XG59O1xuXG52YXIgX3Z1ZSA9IHJlcXVpcmUoJ3Z1ZScpO1xuXG52YXIgX3Z1ZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF92dWUpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG52YXIgc2Nyb2xsQmFyV2lkdGggPSB2b2lkIDA7XG5cbjsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/utils/scrollbar-width.js\n");

/***/ }),

/***/ "./node_modules/element-ui/lib/utils/shared.js":
/*!*****************************************************!*\
  !*** ./node_modules/element-ui/lib/utils/shared.js ***!
  \*****************************************************/
/***/ ((__unused_webpack_module, exports) => {

"use strict";
eval("\n\nexports.__esModule = true;\nexports.isDef = isDef;\nexports.isKorean = isKorean;\nfunction isDef(val) {\n  return val !== undefined && val !== null;\n}\nfunction isKorean(text) {\n  var reg = /([(\\uAC00-\\uD7AF)|(\\u3130-\\u318F)])+/gi;\n  return reg.test(text);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdXRpbHMvc2hhcmVkLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLGtCQUFrQjtBQUNsQixhQUFhO0FBQ2IsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2VsZW1lbnQtdWkvbGliL3V0aWxzL3NoYXJlZC5qcz8yMWNkIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5pc0RlZiA9IGlzRGVmO1xuZXhwb3J0cy5pc0tvcmVhbiA9IGlzS29yZWFuO1xuZnVuY3Rpb24gaXNEZWYodmFsKSB7XG4gIHJldHVybiB2YWwgIT09IHVuZGVmaW5lZCAmJiB2YWwgIT09IG51bGw7XG59XG5mdW5jdGlvbiBpc0tvcmVhbih0ZXh0KSB7XG4gIHZhciByZWcgPSAvKFsoXFx1QUMwMC1cXHVEN0FGKXwoXFx1MzEzMC1cXHUzMThGKV0pKy9naTtcbiAgcmV0dXJuIHJlZy50ZXN0KHRleHQpO1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/utils/shared.js\n");

/***/ }),

/***/ "./node_modules/element-ui/lib/utils/types.js":
/*!****************************************************!*\
  !*** ./node_modules/element-ui/lib/utils/types.js ***!
  \****************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";
eval("\n\nexports.__esModule = true;\nexports.isDefined = exports.isUndefined = exports.isFunction = undefined;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nexports.isString = isString;\nexports.isObject = isObject;\nexports.isHtmlElement = isHtmlElement;\n\nvar _vue = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.esm.js\");\n\nvar _vue2 = _interopRequireDefault(_vue);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction isString(obj) {\n  return Object.prototype.toString.call(obj) === '[object String]';\n}\n\nfunction isObject(obj) {\n  return Object.prototype.toString.call(obj) === '[object Object]';\n}\n\nfunction isHtmlElement(node) {\n  return node && node.nodeType === Node.ELEMENT_NODE;\n}\n\n/**\n *  - Inspired:\n *    https://github.com/jashkenas/underscore/blob/master/modules/isFunction.js\n */\nvar isFunction = function isFunction(functionToCheck) {\n  var getType = {};\n  return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\n};\n\nif ( true && (typeof Int8Array === 'undefined' ? 'undefined' : _typeof(Int8Array)) !== 'object' && (_vue2.default.prototype.$isServer || typeof document.childNodes !== 'function')) {\n  exports.isFunction = isFunction = function isFunction(obj) {\n    return typeof obj === 'function' || false;\n  };\n}\n\nexports.isFunction = isFunction;\nvar isUndefined = exports.isUndefined = function isUndefined(val) {\n  return val === void 0;\n};\n\nvar isDefined = exports.isDefined = function isDefined(val) {\n  return val !== undefined && val !== null;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdXRpbHMvdHlwZXMuanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsa0JBQWtCO0FBQ2xCLGlCQUFpQixHQUFHLG1CQUFtQixHQUFHLGtCQUFrQjs7QUFFNUQscUdBQXFHLHFCQUFxQixtQkFBbUI7O0FBRTdJLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIscUJBQXFCOztBQUVyQixXQUFXLG1CQUFPLENBQUMsK0NBQUs7O0FBRXhCOztBQUVBLHVDQUF1Qyx1Q0FBdUM7O0FBRTlFO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsSUFBSSxLQUF5QjtBQUM3QixFQUFFLGtCQUFrQjtBQUNwQjtBQUNBO0FBQ0E7O0FBRUEsa0JBQWtCO0FBQ2xCLGtCQUFrQixtQkFBbUI7QUFDckM7QUFDQTs7QUFFQSxnQkFBZ0IsaUJBQWlCO0FBQ2pDO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdXRpbHMvdHlwZXMuanM/OGFkMCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLmlzRGVmaW5lZCA9IGV4cG9ydHMuaXNVbmRlZmluZWQgPSBleHBvcnRzLmlzRnVuY3Rpb24gPSB1bmRlZmluZWQ7XG5cbnZhciBfdHlwZW9mID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIgPyBmdW5jdGlvbiAob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9IDogZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTtcblxuZXhwb3J0cy5pc1N0cmluZyA9IGlzU3RyaW5nO1xuZXhwb3J0cy5pc09iamVjdCA9IGlzT2JqZWN0O1xuZXhwb3J0cy5pc0h0bWxFbGVtZW50ID0gaXNIdG1sRWxlbWVudDtcblxudmFyIF92dWUgPSByZXF1aXJlKCd2dWUnKTtcblxudmFyIF92dWUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfdnVlKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZnVuY3Rpb24gaXNTdHJpbmcob2JqKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgU3RyaW5nXSc7XG59XG5cbmZ1bmN0aW9uIGlzT2JqZWN0KG9iaikge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IE9iamVjdF0nO1xufVxuXG5mdW5jdGlvbiBpc0h0bWxFbGVtZW50KG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUgJiYgbm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREU7XG59XG5cbi8qKlxuICogIC0gSW5zcGlyZWQ6XG4gKiAgICBodHRwczovL2dpdGh1Yi5jb20vamFzaGtlbmFzL3VuZGVyc2NvcmUvYmxvYi9tYXN0ZXIvbW9kdWxlcy9pc0Z1bmN0aW9uLmpzXG4gKi9cbnZhciBpc0Z1bmN0aW9uID0gZnVuY3Rpb24gaXNGdW5jdGlvbihmdW5jdGlvblRvQ2hlY2spIHtcbiAgdmFyIGdldFR5cGUgPSB7fTtcbiAgcmV0dXJuIGZ1bmN0aW9uVG9DaGVjayAmJiBnZXRUeXBlLnRvU3RyaW5nLmNhbGwoZnVuY3Rpb25Ub0NoZWNrKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcbn07XG5cbmlmICh0eXBlb2YgLy4vICE9PSAnZnVuY3Rpb24nICYmICh0eXBlb2YgSW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/ICd1bmRlZmluZWQnIDogX3R5cGVvZihJbnQ4QXJyYXkpKSAhPT0gJ29iamVjdCcgJiYgKF92dWUyLmRlZmF1bHQucHJvdG90eXBlLiRpc1NlcnZlciB8fCB0eXBlb2YgZG9jdW1lbnQuY2hpbGROb2RlcyAhPT0gJ2Z1bmN0aW9uJykpIHtcbiAgZXhwb3J0cy5pc0Z1bmN0aW9uID0gaXNGdW5jdGlvbiA9IGZ1bmN0aW9uIGlzRnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvYmogPT09ICdmdW5jdGlvbicgfHwgZmFsc2U7XG4gIH07XG59XG5cbmV4cG9ydHMuaXNGdW5jdGlvbiA9IGlzRnVuY3Rpb247XG52YXIgaXNVbmRlZmluZWQgPSBleHBvcnRzLmlzVW5kZWZpbmVkID0gZnVuY3Rpb24gaXNVbmRlZmluZWQodmFsKSB7XG4gIHJldHVybiB2YWwgPT09IHZvaWQgMDtcbn07XG5cbnZhciBpc0RlZmluZWQgPSBleHBvcnRzLmlzRGVmaW5lZCA9IGZ1bmN0aW9uIGlzRGVmaW5lZCh2YWwpIHtcbiAgcmV0dXJuIHZhbCAhPT0gdW5kZWZpbmVkICYmIHZhbCAhPT0gbnVsbDtcbn07Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/utils/types.js\n");

/***/ }),

/***/ "./node_modules/element-ui/lib/utils/util.js":
/*!***************************************************!*\
  !*** ./node_modules/element-ui/lib/utils/util.js ***!
  \***************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";
eval("\n\nexports.__esModule = true;\nexports.isMac = exports.isEmpty = exports.isEqual = exports.arrayEquals = exports.looseEqual = exports.capitalize = exports.kebabCase = exports.autoprefixer = exports.isFirefox = exports.isEdge = exports.isIE = exports.coerceTruthyValueToArray = exports.arrayFind = exports.arrayFindIndex = exports.escapeRegexpString = exports.valueEquals = exports.generateId = exports.getValueByPath = undefined;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nexports.noop = noop;\nexports.hasOwn = hasOwn;\nexports.toObject = toObject;\nexports.getPropByPath = getPropByPath;\nexports.rafThrottle = rafThrottle;\nexports.objToArray = objToArray;\n\nvar _vue = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.esm.js\");\n\nvar _vue2 = _interopRequireDefault(_vue);\n\nvar _types = __webpack_require__(/*! element-ui/lib/utils/types */ \"./node_modules/element-ui/lib/utils/types.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction noop() {};\n\nfunction hasOwn(obj, key) {\n  return hasOwnProperty.call(obj, key);\n};\n\nfunction extend(to, _from) {\n  for (var key in _from) {\n    to[key] = _from[key];\n  }\n  return to;\n};\n\nfunction toObject(arr) {\n  var res = {};\n  for (var i = 0; i < arr.length; i++) {\n    if (arr[i]) {\n      extend(res, arr[i]);\n    }\n  }\n  return res;\n};\n\nvar getValueByPath = exports.getValueByPath = function getValueByPath(object, prop) {\n  prop = prop || '';\n  var paths = prop.split('.');\n  var current = object;\n  var result = null;\n  for (var i = 0, j = paths.length; i < j; i++) {\n    var path = paths[i];\n    if (!current) break;\n\n    if (i === j - 1) {\n      result = current[path];\n      break;\n    }\n    current = current[path];\n  }\n  return result;\n};\n\nfunction getPropByPath(obj, path, strict) {\n  var tempObj = obj;\n  path = path.replace(/\\[(\\w+)\\]/g, '.$1');\n  path = path.replace(/^\\./, '');\n\n  var keyArr = path.split('.');\n  var i = 0;\n  for (var len = keyArr.length; i < len - 1; ++i) {\n    if (!tempObj && !strict) break;\n    var key = keyArr[i];\n    if (key in tempObj) {\n      tempObj = tempObj[key];\n    } else {\n      if (strict) {\n        throw new Error('please transfer a valid prop path to form item!');\n      }\n      break;\n    }\n  }\n  return {\n    o: tempObj,\n    k: keyArr[i],\n    v: tempObj ? tempObj[keyArr[i]] : null\n  };\n};\n\nvar generateId = exports.generateId = function generateId() {\n  return Math.floor(Math.random() * 10000);\n};\n\nvar valueEquals = exports.valueEquals = function valueEquals(a, b) {\n  // see: https://stackoverflow.com/questions/3115982/how-to-check-if-two-arrays-are-equal-with-javascript\n  if (a === b) return true;\n  if (!(a instanceof Array)) return false;\n  if (!(b instanceof Array)) return false;\n  if (a.length !== b.length) return false;\n  for (var i = 0; i !== a.length; ++i) {\n    if (a[i] !== b[i]) return false;\n  }\n  return true;\n};\n\nvar escapeRegexpString = exports.escapeRegexpString = function escapeRegexpString() {\n  var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n  return String(value).replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&');\n};\n\n// TODO: use native Array.find, Array.findIndex when IE support is dropped\nvar arrayFindIndex = exports.arrayFindIndex = function arrayFindIndex(arr, pred) {\n  for (var i = 0; i !== arr.length; ++i) {\n    if (pred(arr[i])) {\n      return i;\n    }\n  }\n  return -1;\n};\n\nvar arrayFind = exports.arrayFind = function arrayFind(arr, pred) {\n  var idx = arrayFindIndex(arr, pred);\n  return idx !== -1 ? arr[idx] : undefined;\n};\n\n// coerce truthy value to array\nvar coerceTruthyValueToArray = exports.coerceTruthyValueToArray = function coerceTruthyValueToArray(val) {\n  if (Array.isArray(val)) {\n    return val;\n  } else if (val) {\n    return [val];\n  } else {\n    return [];\n  }\n};\n\nvar isIE = exports.isIE = function isIE() {\n  return !_vue2.default.prototype.$isServer && !isNaN(Number(document.documentMode));\n};\n\nvar isEdge = exports.isEdge = function isEdge() {\n  return !_vue2.default.prototype.$isServer && navigator.userAgent.indexOf('Edge') > -1;\n};\n\nvar isFirefox = exports.isFirefox = function isFirefox() {\n  return !_vue2.default.prototype.$isServer && !!window.navigator.userAgent.match(/firefox/i);\n};\n\nvar autoprefixer = exports.autoprefixer = function autoprefixer(style) {\n  if ((typeof style === 'undefined' ? 'undefined' : _typeof(style)) !== 'object') return style;\n  var rules = ['transform', 'transition', 'animation'];\n  var prefixes = ['ms-', 'webkit-'];\n  rules.forEach(function (rule) {\n    var value = style[rule];\n    if (rule && value) {\n      prefixes.forEach(function (prefix) {\n        style[prefix + rule] = value;\n      });\n    }\n  });\n  return style;\n};\n\nvar kebabCase = exports.kebabCase = function kebabCase(str) {\n  var hyphenateRE = /([^-])([A-Z])/g;\n  return str.replace(hyphenateRE, '$1-$2').replace(hyphenateRE, '$1-$2').toLowerCase();\n};\n\nvar capitalize = exports.capitalize = function capitalize(str) {\n  if (!(0, _types.isString)(str)) return str;\n  return str.charAt(0).toUpperCase() + str.slice(1);\n};\n\nvar looseEqual = exports.looseEqual = function looseEqual(a, b) {\n  var isObjectA = (0, _types.isObject)(a);\n  var isObjectB = (0, _types.isObject)(b);\n  if (isObjectA && isObjectB) {\n    return JSON.stringify(a) === JSON.stringify(b);\n  } else if (!isObjectA && !isObjectB) {\n    return String(a) === String(b);\n  } else {\n    return false;\n  }\n};\n\nvar arrayEquals = exports.arrayEquals = function arrayEquals(arrayA, arrayB) {\n  arrayA = arrayA || [];\n  arrayB = arrayB || [];\n\n  if (arrayA.length !== arrayB.length) {\n    return false;\n  }\n\n  for (var i = 0; i < arrayA.length; i++) {\n    if (!looseEqual(arrayA[i], arrayB[i])) {\n      return false;\n    }\n  }\n\n  return true;\n};\n\nvar isEqual = exports.isEqual = function isEqual(value1, value2) {\n  if (Array.isArray(value1) && Array.isArray(value2)) {\n    return arrayEquals(value1, value2);\n  }\n  return looseEqual(value1, value2);\n};\n\nvar isEmpty = exports.isEmpty = function isEmpty(val) {\n  // null or undefined\n  if (val == null) return true;\n\n  if (typeof val === 'boolean') return false;\n\n  if (typeof val === 'number') return !val;\n\n  if (val instanceof Error) return val.message === '';\n\n  switch (Object.prototype.toString.call(val)) {\n    // String or Array\n    case '[object String]':\n    case '[object Array]':\n      return !val.length;\n\n    // Map or Set or File\n    case '[object File]':\n    case '[object Map]':\n    case '[object Set]':\n      {\n        return !val.size;\n      }\n    // Plain Object\n    case '[object Object]':\n      {\n        return !Object.keys(val).length;\n      }\n  }\n\n  return false;\n};\n\nfunction rafThrottle(fn) {\n  var locked = false;\n  return function () {\n    var _this = this;\n\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    if (locked) return;\n    locked = true;\n    window.requestAnimationFrame(function (_) {\n      fn.apply(_this, args);\n      locked = false;\n    });\n  };\n}\n\nfunction objToArray(obj) {\n  if (Array.isArray(obj)) {\n    return obj;\n  }\n  return isEmpty(obj) ? [] : [obj];\n}\n\nvar isMac = exports.isMac = function isMac() {\n  return !_vue2.default.prototype.$isServer && /macintosh|mac os x/i.test(navigator.userAgent);\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdXRpbHMvdXRpbC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0I7QUFDbEIsYUFBYSxHQUFHLGVBQWUsR0FBRyxlQUFlLEdBQUcsbUJBQW1CLEdBQUcsa0JBQWtCLEdBQUcsa0JBQWtCLEdBQUcsaUJBQWlCLEdBQUcsb0JBQW9CLEdBQUcsaUJBQWlCLEdBQUcsY0FBYyxHQUFHLFlBQVksR0FBRyxnQ0FBZ0MsR0FBRyxpQkFBaUIsR0FBRyxzQkFBc0IsR0FBRywwQkFBMEIsR0FBRyxtQkFBbUIsR0FBRyxrQkFBa0IsR0FBRyxzQkFBc0I7O0FBRWpZLHFHQUFxRyxxQkFBcUIsbUJBQW1COztBQUU3SSxZQUFZO0FBQ1osY0FBYztBQUNkLGdCQUFnQjtBQUNoQixxQkFBcUI7QUFDckIsbUJBQW1CO0FBQ25CLGtCQUFrQjs7QUFFbEIsV0FBVyxtQkFBTyxDQUFDLCtDQUFLOztBQUV4Qjs7QUFFQSxhQUFhLG1CQUFPLENBQUMsZ0ZBQTRCOztBQUVqRCx1Q0FBdUMsdUNBQXVDOztBQUU5RTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxrQkFBa0IsZ0JBQWdCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxxQkFBcUIsc0JBQXNCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DLE9BQU87QUFDM0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxnQ0FBZ0MsYUFBYTtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUJBQWlCLGtCQUFrQjtBQUNuQztBQUNBOztBQUVBLGtCQUFrQixtQkFBbUI7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixnQkFBZ0I7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUEseUJBQXlCLDBCQUEwQjtBQUNuRDtBQUNBLHNDQUFzQztBQUN0Qzs7QUFFQTtBQUNBLHFCQUFxQixzQkFBc0I7QUFDM0Msa0JBQWtCLGtCQUFrQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZ0JBQWdCLGlCQUFpQjtBQUNqQztBQUNBO0FBQ0E7O0FBRUE7QUFDQSwrQkFBK0IsZ0NBQWdDO0FBQy9EO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBLFdBQVcsWUFBWTtBQUN2QjtBQUNBOztBQUVBLGFBQWEsY0FBYztBQUMzQjtBQUNBOztBQUVBLGdCQUFnQixpQkFBaUI7QUFDakM7QUFDQTs7QUFFQSxtQkFBbUIsb0JBQW9CO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQSxnQkFBZ0IsaUJBQWlCO0FBQ2pDO0FBQ0E7QUFDQTs7QUFFQSxpQkFBaUIsa0JBQWtCO0FBQ25DO0FBQ0E7QUFDQTs7QUFFQSxpQkFBaUIsa0JBQWtCO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0IsbUJBQW1CO0FBQ3JDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGtCQUFrQixtQkFBbUI7QUFDckM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxjQUFjLGVBQWU7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxjQUFjLGVBQWU7QUFDN0I7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsb0VBQW9FLGFBQWE7QUFDakY7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFlBQVksYUFBYTtBQUN6QjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2VsZW1lbnQtdWkvbGliL3V0aWxzL3V0aWwuanM/NDBhNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLmlzTWFjID0gZXhwb3J0cy5pc0VtcHR5ID0gZXhwb3J0cy5pc0VxdWFsID0gZXhwb3J0cy5hcnJheUVxdWFscyA9IGV4cG9ydHMubG9vc2VFcXVhbCA9IGV4cG9ydHMuY2FwaXRhbGl6ZSA9IGV4cG9ydHMua2ViYWJDYXNlID0gZXhwb3J0cy5hdXRvcHJlZml4ZXIgPSBleHBvcnRzLmlzRmlyZWZveCA9IGV4cG9ydHMuaXNFZGdlID0gZXhwb3J0cy5pc0lFID0gZXhwb3J0cy5jb2VyY2VUcnV0aHlWYWx1ZVRvQXJyYXkgPSBleHBvcnRzLmFycmF5RmluZCA9IGV4cG9ydHMuYXJyYXlGaW5kSW5kZXggPSBleHBvcnRzLmVzY2FwZVJlZ2V4cFN0cmluZyA9IGV4cG9ydHMudmFsdWVFcXVhbHMgPSBleHBvcnRzLmdlbmVyYXRlSWQgPSBleHBvcnRzLmdldFZhbHVlQnlQYXRoID0gdW5kZWZpbmVkO1xuXG52YXIgX3R5cGVvZiA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiID8gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfSA6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07XG5cbmV4cG9ydHMubm9vcCA9IG5vb3A7XG5leHBvcnRzLmhhc093biA9IGhhc093bjtcbmV4cG9ydHMudG9PYmplY3QgPSB0b09iamVjdDtcbmV4cG9ydHMuZ2V0UHJvcEJ5UGF0aCA9IGdldFByb3BCeVBhdGg7XG5leHBvcnRzLnJhZlRocm90dGxlID0gcmFmVGhyb3R0bGU7XG5leHBvcnRzLm9ialRvQXJyYXkgPSBvYmpUb0FycmF5O1xuXG52YXIgX3Z1ZSA9IHJlcXVpcmUoJ3Z1ZScpO1xuXG52YXIgX3Z1ZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF92dWUpO1xuXG52YXIgX3R5cGVzID0gcmVxdWlyZSgnZWxlbWVudC11aS9saWIvdXRpbHMvdHlwZXMnKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9O1xuXG5mdW5jdGlvbiBoYXNPd24ob2JqLCBrZXkpIHtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpO1xufTtcblxuZnVuY3Rpb24gZXh0ZW5kKHRvLCBfZnJvbSkge1xuICBmb3IgKHZhciBrZXkgaW4gX2Zyb20pIHtcbiAgICB0b1trZXldID0gX2Zyb21ba2V5XTtcbiAgfVxuICByZXR1cm4gdG87XG59O1xuXG5mdW5jdGlvbiB0b09iamVjdChhcnIpIHtcbiAgdmFyIHJlcyA9IHt9O1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgIGlmIChhcnJbaV0pIHtcbiAgICAgIGV4dGVuZChyZXMsIGFycltpXSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXM7XG59O1xuXG52YXIgZ2V0VmFsdWVCeVBhdGggPSBleHBvcnRzLmdldFZhbHVlQnlQYXRoID0gZnVuY3Rpb24gZ2V0VmFsdWVCeVBhdGgob2JqZWN0LCBwcm9wKSB7XG4gIHByb3AgPSBwcm9wIHx8ICcnO1xuICB2YXIgcGF0aHMgPSBwcm9wLnNwbGl0KCcuJyk7XG4gIHZhciBjdXJyZW50ID0gb2JqZWN0O1xuICB2YXIgcmVzdWx0ID0gbnVsbDtcbiAgZm9yICh2YXIgaSA9IDAsIGogPSBwYXRocy5sZW5ndGg7IGkgPCBqOyBpKyspIHtcbiAgICB2YXIgcGF0aCA9IHBhdGhzW2ldO1xuICAgIGlmICghY3VycmVudCkgYnJlYWs7XG5cbiAgICBpZiAoaSA9PT0gaiAtIDEpIHtcbiAgICAgIHJlc3VsdCA9IGN1cnJlbnRbcGF0aF07XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY3VycmVudCA9IGN1cnJlbnRbcGF0aF07XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmZ1bmN0aW9uIGdldFByb3BCeVBhdGgob2JqLCBwYXRoLCBzdHJpY3QpIHtcbiAgdmFyIHRlbXBPYmogPSBvYmo7XG4gIHBhdGggPSBwYXRoLnJlcGxhY2UoL1xcWyhcXHcrKVxcXS9nLCAnLiQxJyk7XG4gIHBhdGggPSBwYXRoLnJlcGxhY2UoL15cXC4vLCAnJyk7XG5cbiAgdmFyIGtleUFyciA9IHBhdGguc3BsaXQoJy4nKTtcbiAgdmFyIGkgPSAwO1xuICBmb3IgKHZhciBsZW4gPSBrZXlBcnIubGVuZ3RoOyBpIDwgbGVuIC0gMTsgKytpKSB7XG4gICAgaWYgKCF0ZW1wT2JqICYmICFzdHJpY3QpIGJyZWFrO1xuICAgIHZhciBrZXkgPSBrZXlBcnJbaV07XG4gICAgaWYgKGtleSBpbiB0ZW1wT2JqKSB7XG4gICAgICB0ZW1wT2JqID0gdGVtcE9ialtrZXldO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoc3RyaWN0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigncGxlYXNlIHRyYW5zZmVyIGEgdmFsaWQgcHJvcCBwYXRoIHRvIGZvcm0gaXRlbSEnKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIG86IHRlbXBPYmosXG4gICAgazoga2V5QXJyW2ldLFxuICAgIHY6IHRlbXBPYmogPyB0ZW1wT2JqW2tleUFycltpXV0gOiBudWxsXG4gIH07XG59O1xuXG52YXIgZ2VuZXJhdGVJZCA9IGV4cG9ydHMuZ2VuZXJhdGVJZCA9IGZ1bmN0aW9uIGdlbmVyYXRlSWQoKSB7XG4gIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDAwMCk7XG59O1xuXG52YXIgdmFsdWVFcXVhbHMgPSBleHBvcnRzLnZhbHVlRXF1YWxzID0gZnVuY3Rpb24gdmFsdWVFcXVhbHMoYSwgYikge1xuICAvLyBzZWU6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzMxMTU5ODIvaG93LXRvLWNoZWNrLWlmLXR3by1hcnJheXMtYXJlLWVxdWFsLXdpdGgtamF2YXNjcmlwdFxuICBpZiAoYSA9PT0gYikgcmV0dXJuIHRydWU7XG4gIGlmICghKGEgaW5zdGFuY2VvZiBBcnJheSkpIHJldHVybiBmYWxzZTtcbiAgaWYgKCEoYiBpbnN0YW5jZW9mIEFycmF5KSkgcmV0dXJuIGZhbHNlO1xuICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gIGZvciAodmFyIGkgPSAwOyBpICE9PSBhLmxlbmd0aDsgKytpKSB7XG4gICAgaWYgKGFbaV0gIT09IGJbaV0pIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbnZhciBlc2NhcGVSZWdleHBTdHJpbmcgPSBleHBvcnRzLmVzY2FwZVJlZ2V4cFN0cmluZyA9IGZ1bmN0aW9uIGVzY2FwZVJlZ2V4cFN0cmluZygpIHtcbiAgdmFyIHZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiAnJztcbiAgcmV0dXJuIFN0cmluZyh2YWx1ZSkucmVwbGFjZSgvW3xcXFxce30oKVtcXF1eJCsqPy5dL2csICdcXFxcJCYnKTtcbn07XG5cbi8vIFRPRE86IHVzZSBuYXRpdmUgQXJyYXkuZmluZCwgQXJyYXkuZmluZEluZGV4IHdoZW4gSUUgc3VwcG9ydCBpcyBkcm9wcGVkXG52YXIgYXJyYXlGaW5kSW5kZXggPSBleHBvcnRzLmFycmF5RmluZEluZGV4ID0gZnVuY3Rpb24gYXJyYXlGaW5kSW5kZXgoYXJyLCBwcmVkKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpICE9PSBhcnIubGVuZ3RoOyArK2kpIHtcbiAgICBpZiAocHJlZChhcnJbaV0pKSB7XG4gICAgICByZXR1cm4gaTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufTtcblxudmFyIGFycmF5RmluZCA9IGV4cG9ydHMuYXJyYXlGaW5kID0gZnVuY3Rpb24gYXJyYXlGaW5kKGFyciwgcHJlZCkge1xuICB2YXIgaWR4ID0gYXJyYXlGaW5kSW5kZXgoYXJyLCBwcmVkKTtcbiAgcmV0dXJuIGlkeCAhPT0gLTEgPyBhcnJbaWR4XSA6IHVuZGVmaW5lZDtcbn07XG5cbi8vIGNvZXJjZSB0cnV0aHkgdmFsdWUgdG8gYXJyYXlcbnZhciBjb2VyY2VUcnV0aHlWYWx1ZVRvQXJyYXkgPSBleHBvcnRzLmNvZXJjZVRydXRoeVZhbHVlVG9BcnJheSA9IGZ1bmN0aW9uIGNvZXJjZVRydXRoeVZhbHVlVG9BcnJheSh2YWwpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgIHJldHVybiB2YWw7XG4gIH0gZWxzZSBpZiAodmFsKSB7XG4gICAgcmV0dXJuIFt2YWxdO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBbXTtcbiAgfVxufTtcblxudmFyIGlzSUUgPSBleHBvcnRzLmlzSUUgPSBmdW5jdGlvbiBpc0lFKCkge1xuICByZXR1cm4gIV92dWUyLmRlZmF1bHQucHJvdG90eXBlLiRpc1NlcnZlciAmJiAhaXNOYU4oTnVtYmVyKGRvY3VtZW50LmRvY3VtZW50TW9kZSkpO1xufTtcblxudmFyIGlzRWRnZSA9IGV4cG9ydHMuaXNFZGdlID0gZnVuY3Rpb24gaXNFZGdlKCkge1xuICByZXR1cm4gIV92dWUyLmRlZmF1bHQucHJvdG90eXBlLiRpc1NlcnZlciAmJiBuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoJ0VkZ2UnKSA+IC0xO1xufTtcblxudmFyIGlzRmlyZWZveCA9IGV4cG9ydHMuaXNGaXJlZm94ID0gZnVuY3Rpb24gaXNGaXJlZm94KCkge1xuICByZXR1cm4gIV92dWUyLmRlZmF1bHQucHJvdG90eXBlLiRpc1NlcnZlciAmJiAhIXdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9maXJlZm94L2kpO1xufTtcblxudmFyIGF1dG9wcmVmaXhlciA9IGV4cG9ydHMuYXV0b3ByZWZpeGVyID0gZnVuY3Rpb24gYXV0b3ByZWZpeGVyKHN0eWxlKSB7XG4gIGlmICgodHlwZW9mIHN0eWxlID09PSAndW5kZWZpbmVkJyA/ICd1bmRlZmluZWQnIDogX3R5cGVvZihzdHlsZSkpICE9PSAnb2JqZWN0JykgcmV0dXJuIHN0eWxlO1xuICB2YXIgcnVsZXMgPSBbJ3RyYW5zZm9ybScsICd0cmFuc2l0aW9uJywgJ2FuaW1hdGlvbiddO1xuICB2YXIgcHJlZml4ZXMgPSBbJ21zLScsICd3ZWJraXQtJ107XG4gIHJ1bGVzLmZvckVhY2goZnVuY3Rpb24gKHJ1bGUpIHtcbiAgICB2YXIgdmFsdWUgPSBzdHlsZVtydWxlXTtcbiAgICBpZiAocnVsZSAmJiB2YWx1ZSkge1xuICAgICAgcHJlZml4ZXMuZm9yRWFjaChmdW5jdGlvbiAocHJlZml4KSB7XG4gICAgICAgIHN0eWxlW3ByZWZpeCArIHJ1bGVdID0gdmFsdWU7XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gc3R5bGU7XG59O1xuXG52YXIga2ViYWJDYXNlID0gZXhwb3J0cy5rZWJhYkNhc2UgPSBmdW5jdGlvbiBrZWJhYkNhc2Uoc3RyKSB7XG4gIHZhciBoeXBoZW5hdGVSRSA9IC8oW14tXSkoW0EtWl0pL2c7XG4gIHJldHVybiBzdHIucmVwbGFjZShoeXBoZW5hdGVSRSwgJyQxLSQyJykucmVwbGFjZShoeXBoZW5hdGVSRSwgJyQxLSQyJykudG9Mb3dlckNhc2UoKTtcbn07XG5cbnZhciBjYXBpdGFsaXplID0gZXhwb3J0cy5jYXBpdGFsaXplID0gZnVuY3Rpb24gY2FwaXRhbGl6ZShzdHIpIHtcbiAgaWYgKCEoMCwgX3R5cGVzLmlzU3RyaW5nKShzdHIpKSByZXR1cm4gc3RyO1xuICByZXR1cm4gc3RyLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc3RyLnNsaWNlKDEpO1xufTtcblxudmFyIGxvb3NlRXF1YWwgPSBleHBvcnRzLmxvb3NlRXF1YWwgPSBmdW5jdGlvbiBsb29zZUVxdWFsKGEsIGIpIHtcbiAgdmFyIGlzT2JqZWN0QSA9ICgwLCBfdHlwZXMuaXNPYmplY3QpKGEpO1xuICB2YXIgaXNPYmplY3RCID0gKDAsIF90eXBlcy5pc09iamVjdCkoYik7XG4gIGlmIChpc09iamVjdEEgJiYgaXNPYmplY3RCKSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGEpID09PSBKU09OLnN0cmluZ2lmeShiKTtcbiAgfSBlbHNlIGlmICghaXNPYmplY3RBICYmICFpc09iamVjdEIpIHtcbiAgICByZXR1cm4gU3RyaW5nKGEpID09PSBTdHJpbmcoYik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuXG52YXIgYXJyYXlFcXVhbHMgPSBleHBvcnRzLmFycmF5RXF1YWxzID0gZnVuY3Rpb24gYXJyYXlFcXVhbHMoYXJyYXlBLCBhcnJheUIpIHtcbiAgYXJyYXlBID0gYXJyYXlBIHx8IFtdO1xuICBhcnJheUIgPSBhcnJheUIgfHwgW107XG5cbiAgaWYgKGFycmF5QS5sZW5ndGggIT09IGFycmF5Qi5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5QS5sZW5ndGg7IGkrKykge1xuICAgIGlmICghbG9vc2VFcXVhbChhcnJheUFbaV0sIGFycmF5QltpXSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbnZhciBpc0VxdWFsID0gZXhwb3J0cy5pc0VxdWFsID0gZnVuY3Rpb24gaXNFcXVhbCh2YWx1ZTEsIHZhbHVlMikge1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZTEpICYmIEFycmF5LmlzQXJyYXkodmFsdWUyKSkge1xuICAgIHJldHVybiBhcnJheUVxdWFscyh2YWx1ZTEsIHZhbHVlMik7XG4gIH1cbiAgcmV0dXJuIGxvb3NlRXF1YWwodmFsdWUxLCB2YWx1ZTIpO1xufTtcblxudmFyIGlzRW1wdHkgPSBleHBvcnRzLmlzRW1wdHkgPSBmdW5jdGlvbiBpc0VtcHR5KHZhbCkge1xuICAvLyBudWxsIG9yIHVuZGVmaW5lZFxuICBpZiAodmFsID09IG51bGwpIHJldHVybiB0cnVlO1xuXG4gIGlmICh0eXBlb2YgdmFsID09PSAnYm9vbGVhbicpIHJldHVybiBmYWxzZTtcblxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHJldHVybiAhdmFsO1xuXG4gIGlmICh2YWwgaW5zdGFuY2VvZiBFcnJvcikgcmV0dXJuIHZhbC5tZXNzYWdlID09PSAnJztcblxuICBzd2l0Y2ggKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWwpKSB7XG4gICAgLy8gU3RyaW5nIG9yIEFycmF5XG4gICAgY2FzZSAnW29iamVjdCBTdHJpbmddJzpcbiAgICBjYXNlICdbb2JqZWN0IEFycmF5XSc6XG4gICAgICByZXR1cm4gIXZhbC5sZW5ndGg7XG5cbiAgICAvLyBNYXAgb3IgU2V0IG9yIEZpbGVcbiAgICBjYXNlICdbb2JqZWN0IEZpbGVdJzpcbiAgICBjYXNlICdbb2JqZWN0IE1hcF0nOlxuICAgIGNhc2UgJ1tvYmplY3QgU2V0XSc6XG4gICAgICB7XG4gICAgICAgIHJldHVybiAhdmFsLnNpemU7XG4gICAgICB9XG4gICAgLy8gUGxhaW4gT2JqZWN0XG4gICAgY2FzZSAnW29iamVjdCBPYmplY3RdJzpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuICFPYmplY3Qua2V5cyh2YWwpLmxlbmd0aDtcbiAgICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn07XG5cbmZ1bmN0aW9uIHJhZlRocm90dGxlKGZuKSB7XG4gIHZhciBsb2NrZWQgPSBmYWxzZTtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgaWYgKGxvY2tlZCkgcmV0dXJuO1xuICAgIGxvY2tlZCA9IHRydWU7XG4gICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAoXykge1xuICAgICAgZm4uYXBwbHkoX3RoaXMsIGFyZ3MpO1xuICAgICAgbG9ja2VkID0gZmFsc2U7XG4gICAgfSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIG9ialRvQXJyYXkob2JqKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICByZXR1cm4gb2JqO1xuICB9XG4gIHJldHVybiBpc0VtcHR5KG9iaikgPyBbXSA6IFtvYmpdO1xufVxuXG52YXIgaXNNYWMgPSBleHBvcnRzLmlzTWFjID0gZnVuY3Rpb24gaXNNYWMoKSB7XG4gIHJldHVybiAhX3Z1ZTIuZGVmYXVsdC5wcm90b3R5cGUuJGlzU2VydmVyICYmIC9tYWNpbnRvc2h8bWFjIG9zIHgvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xufTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/utils/util.js\n");

/***/ }),

/***/ "./node_modules/element-ui/lib/utils/vdom.js":
/*!***************************************************!*\
  !*** ./node_modules/element-ui/lib/utils/vdom.js ***!
  \***************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";
eval("\n\nexports.__esModule = true;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nexports.isVNode = isVNode;\n\nvar _util = __webpack_require__(/*! element-ui/lib/utils/util */ \"./node_modules/element-ui/lib/utils/util.js\");\n\nfunction isVNode(node) {\n  return node !== null && (typeof node === 'undefined' ? 'undefined' : _typeof(node)) === 'object' && (0, _util.hasOwn)(node, 'componentOptions');\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdXRpbHMvdmRvbS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0I7O0FBRWxCLHFHQUFxRyxxQkFBcUIsbUJBQW1COztBQUU3SSxlQUFlOztBQUVmLFlBQVksbUJBQU8sQ0FBQyw4RUFBMkI7O0FBRS9DO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9lbGVtZW50LXVpL2xpYi91dGlscy92ZG9tLmpzP2NhN2YiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG52YXIgX3R5cGVvZiA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiID8gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfSA6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07XG5cbmV4cG9ydHMuaXNWTm9kZSA9IGlzVk5vZGU7XG5cbnZhciBfdXRpbCA9IHJlcXVpcmUoJ2VsZW1lbnQtdWkvbGliL3V0aWxzL3V0aWwnKTtcblxuZnVuY3Rpb24gaXNWTm9kZShub2RlKSB7XG4gIHJldHVybiBub2RlICE9PSBudWxsICYmICh0eXBlb2Ygbm9kZSA9PT0gJ3VuZGVmaW5lZCcgPyAndW5kZWZpbmVkJyA6IF90eXBlb2Yobm9kZSkpID09PSAnb2JqZWN0JyAmJiAoMCwgX3V0aWwuaGFzT3duKShub2RlLCAnY29tcG9uZW50T3B0aW9ucycpO1xufTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/utils/vdom.js\n");

/***/ }),

/***/ "./node_modules/element-ui/lib/utils/vue-popper.js":
/*!*********************************************************!*\
  !*** ./node_modules/element-ui/lib/utils/vue-popper.js ***!
  \*********************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";
eval("\n\nexports.__esModule = true;\n\nvar _vue = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.esm.js\");\n\nvar _vue2 = _interopRequireDefault(_vue);\n\nvar _popup = __webpack_require__(/*! element-ui/lib/utils/popup */ \"./node_modules/element-ui/lib/utils/popup/index.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar PopperJS = _vue2.default.prototype.$isServer ? function () {} : __webpack_require__(/*! ./popper */ \"./node_modules/element-ui/lib/utils/popper.js\");\nvar stop = function stop(e) {\n  return e.stopPropagation();\n};\n\n/**\n * @param {HTMLElement} [reference=$refs.reference] - The reference element used to position the popper.\n * @param {HTMLElement} [popper=$refs.popper] - The HTML element used as popper, or a configuration used to generate the popper.\n * @param {String} [placement=button] - Placement of the popper accepted values: top(-start, -end), right(-start, -end), bottom(-start, -end), left(-start, -end)\n * @param {Number} [offset=0] - Amount of pixels the popper will be shifted (can be negative).\n * @param {Boolean} [visible=false] Visibility of the popup element.\n * @param {Boolean} [visible-arrow=false] Visibility of the arrow, no style.\n */\nexports[\"default\"] = {\n  props: {\n    transformOrigin: {\n      type: [Boolean, String],\n      default: true\n    },\n    placement: {\n      type: String,\n      default: 'bottom'\n    },\n    boundariesPadding: {\n      type: Number,\n      default: 5\n    },\n    reference: {},\n    popper: {},\n    offset: {\n      default: 0\n    },\n    value: Boolean,\n    visibleArrow: Boolean,\n    arrowOffset: {\n      type: Number,\n      default: 35\n    },\n    appendToBody: {\n      type: Boolean,\n      default: true\n    },\n    popperOptions: {\n      type: Object,\n      default: function _default() {\n        return {\n          gpuAcceleration: false\n        };\n      }\n    }\n  },\n\n  data: function data() {\n    return {\n      showPopper: false,\n      currentPlacement: ''\n    };\n  },\n\n\n  watch: {\n    value: {\n      immediate: true,\n      handler: function handler(val) {\n        this.showPopper = val;\n        this.$emit('input', val);\n      }\n    },\n\n    showPopper: function showPopper(val) {\n      if (this.disabled) return;\n      val ? this.updatePopper() : this.destroyPopper();\n      this.$emit('input', val);\n    }\n  },\n\n  methods: {\n    createPopper: function createPopper() {\n      var _this = this;\n\n      if (this.$isServer) return;\n      this.currentPlacement = this.currentPlacement || this.placement;\n      if (!/^(top|bottom|left|right)(-start|-end)?$/g.test(this.currentPlacement)) {\n        return;\n      }\n\n      var options = this.popperOptions;\n      var popper = this.popperElm = this.popperElm || this.popper || this.$refs.popper;\n      var reference = this.referenceElm = this.referenceElm || this.reference || this.$refs.reference;\n\n      if (!reference && this.$slots.reference && this.$slots.reference[0]) {\n        reference = this.referenceElm = this.$slots.reference[0].elm;\n      }\n\n      if (!popper || !reference) return;\n      if (this.visibleArrow) this.appendArrow(popper);\n      if (this.appendToBody) document.body.appendChild(this.popperElm);\n      if (this.popperJS && this.popperJS.destroy) {\n        this.popperJS.destroy();\n      }\n\n      options.placement = this.currentPlacement;\n      options.offset = this.offset;\n      options.arrowOffset = this.arrowOffset;\n      this.popperJS = new PopperJS(reference, popper, options);\n      this.popperJS.onCreate(function (_) {\n        _this.$emit('created', _this);\n        _this.resetTransformOrigin();\n        _this.$nextTick(_this.updatePopper);\n      });\n      if (typeof options.onUpdate === 'function') {\n        this.popperJS.onUpdate(options.onUpdate);\n      }\n      this.popperJS._popper.style.zIndex = _popup.PopupManager.nextZIndex();\n      this.popperElm.addEventListener('click', stop);\n    },\n    updatePopper: function updatePopper() {\n      var popperJS = this.popperJS;\n      if (popperJS) {\n        popperJS.update();\n        if (popperJS._popper) {\n          popperJS._popper.style.zIndex = _popup.PopupManager.nextZIndex();\n        }\n      } else {\n        this.createPopper();\n      }\n    },\n    doDestroy: function doDestroy(forceDestroy) {\n      /* istanbul ignore if */\n      if (!this.popperJS || this.showPopper && !forceDestroy) return;\n      this.popperJS.destroy();\n      this.popperJS = null;\n    },\n    destroyPopper: function destroyPopper() {\n      if (this.popperJS) {\n        this.resetTransformOrigin();\n      }\n    },\n    resetTransformOrigin: function resetTransformOrigin() {\n      if (!this.transformOrigin) return;\n      var placementMap = {\n        top: 'bottom',\n        bottom: 'top',\n        left: 'right',\n        right: 'left'\n      };\n      var placement = this.popperJS._popper.getAttribute('x-placement').split('-')[0];\n      var origin = placementMap[placement];\n      this.popperJS._popper.style.transformOrigin = typeof this.transformOrigin === 'string' ? this.transformOrigin : ['top', 'bottom'].indexOf(placement) > -1 ? 'center ' + origin : origin + ' center';\n    },\n    appendArrow: function appendArrow(element) {\n      var hash = void 0;\n      if (this.appended) {\n        return;\n      }\n\n      this.appended = true;\n\n      for (var item in element.attributes) {\n        if (/^_v-/.test(element.attributes[item].name)) {\n          hash = element.attributes[item].name;\n          break;\n        }\n      }\n\n      var arrow = document.createElement('div');\n\n      if (hash) {\n        arrow.setAttribute(hash, '');\n      }\n      arrow.setAttribute('x-arrow', '');\n      arrow.className = 'popper__arrow';\n      element.appendChild(arrow);\n    }\n  },\n\n  beforeDestroy: function beforeDestroy() {\n    this.doDestroy(true);\n    if (this.popperElm && this.popperElm.parentNode === document.body) {\n      this.popperElm.removeEventListener('click', stop);\n      document.body.removeChild(this.popperElm);\n    }\n  },\n\n\n  // call destroy in keep-alive mode\n  deactivated: function deactivated() {\n    this.$options.beforeDestroy[0].call(this);\n  }\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdXRpbHMvdnVlLXBvcHBlci5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0I7O0FBRWxCLFdBQVcsbUJBQU8sQ0FBQywrQ0FBSzs7QUFFeEI7O0FBRUEsYUFBYSxtQkFBTyxDQUFDLHNGQUE0Qjs7QUFFakQsdUNBQXVDLHVDQUF1Qzs7QUFFOUUsa0VBQWtFLEVBQUUsbUJBQU8sQ0FBQywrREFBVTtBQUN0RjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXLGFBQWE7QUFDeEIsV0FBVyxhQUFhO0FBQ3hCLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxTQUFTO0FBQ3BCLFdBQVcsU0FBUztBQUNwQjtBQUNBLGtCQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxpQkFBaUI7QUFDakIsY0FBYztBQUNkO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdXRpbHMvdnVlLXBvcHBlci5qcz83NTUyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxudmFyIF92dWUgPSByZXF1aXJlKCd2dWUnKTtcblxudmFyIF92dWUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfdnVlKTtcblxudmFyIF9wb3B1cCA9IHJlcXVpcmUoJ2VsZW1lbnQtdWkvbGliL3V0aWxzL3BvcHVwJyk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbnZhciBQb3BwZXJKUyA9IF92dWUyLmRlZmF1bHQucHJvdG90eXBlLiRpc1NlcnZlciA/IGZ1bmN0aW9uICgpIHt9IDogcmVxdWlyZSgnLi9wb3BwZXInKTtcbnZhciBzdG9wID0gZnVuY3Rpb24gc3RvcChlKSB7XG4gIHJldHVybiBlLnN0b3BQcm9wYWdhdGlvbigpO1xufTtcblxuLyoqXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBbcmVmZXJlbmNlPSRyZWZzLnJlZmVyZW5jZV0gLSBUaGUgcmVmZXJlbmNlIGVsZW1lbnQgdXNlZCB0byBwb3NpdGlvbiB0aGUgcG9wcGVyLlxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gW3BvcHBlcj0kcmVmcy5wb3BwZXJdIC0gVGhlIEhUTUwgZWxlbWVudCB1c2VkIGFzIHBvcHBlciwgb3IgYSBjb25maWd1cmF0aW9uIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHBvcHBlci5cbiAqIEBwYXJhbSB7U3RyaW5nfSBbcGxhY2VtZW50PWJ1dHRvbl0gLSBQbGFjZW1lbnQgb2YgdGhlIHBvcHBlciBhY2NlcHRlZCB2YWx1ZXM6IHRvcCgtc3RhcnQsIC1lbmQpLCByaWdodCgtc3RhcnQsIC1lbmQpLCBib3R0b20oLXN0YXJ0LCAtZW5kKSwgbGVmdCgtc3RhcnQsIC1lbmQpXG4gKiBAcGFyYW0ge051bWJlcn0gW29mZnNldD0wXSAtIEFtb3VudCBvZiBwaXhlbHMgdGhlIHBvcHBlciB3aWxsIGJlIHNoaWZ0ZWQgKGNhbiBiZSBuZWdhdGl2ZSkuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFt2aXNpYmxlPWZhbHNlXSBWaXNpYmlsaXR5IG9mIHRoZSBwb3B1cCBlbGVtZW50LlxuICogQHBhcmFtIHtCb29sZWFufSBbdmlzaWJsZS1hcnJvdz1mYWxzZV0gVmlzaWJpbGl0eSBvZiB0aGUgYXJyb3csIG5vIHN0eWxlLlxuICovXG5leHBvcnRzLmRlZmF1bHQgPSB7XG4gIHByb3BzOiB7XG4gICAgdHJhbnNmb3JtT3JpZ2luOiB7XG4gICAgICB0eXBlOiBbQm9vbGVhbiwgU3RyaW5nXSxcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9LFxuICAgIHBsYWNlbWVudDoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2JvdHRvbSdcbiAgICB9LFxuICAgIGJvdW5kYXJpZXNQYWRkaW5nOiB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBkZWZhdWx0OiA1XG4gICAgfSxcbiAgICByZWZlcmVuY2U6IHt9LFxuICAgIHBvcHBlcjoge30sXG4gICAgb2Zmc2V0OiB7XG4gICAgICBkZWZhdWx0OiAwXG4gICAgfSxcbiAgICB2YWx1ZTogQm9vbGVhbixcbiAgICB2aXNpYmxlQXJyb3c6IEJvb2xlYW4sXG4gICAgYXJyb3dPZmZzZXQ6IHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGRlZmF1bHQ6IDM1XG4gICAgfSxcbiAgICBhcHBlbmRUb0JvZHk6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSxcbiAgICBwb3BwZXJPcHRpb25zOiB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICBkZWZhdWx0OiBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBncHVBY2NlbGVyYXRpb246IGZhbHNlXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNob3dQb3BwZXI6IGZhbHNlLFxuICAgICAgY3VycmVudFBsYWNlbWVudDogJydcbiAgICB9O1xuICB9LFxuXG5cbiAgd2F0Y2g6IHtcbiAgICB2YWx1ZToge1xuICAgICAgaW1tZWRpYXRlOiB0cnVlLFxuICAgICAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcih2YWwpIHtcbiAgICAgICAgdGhpcy5zaG93UG9wcGVyID0gdmFsO1xuICAgICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIHZhbCk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIHNob3dQb3BwZXI6IGZ1bmN0aW9uIHNob3dQb3BwZXIodmFsKSB7XG4gICAgICBpZiAodGhpcy5kaXNhYmxlZCkgcmV0dXJuO1xuICAgICAgdmFsID8gdGhpcy51cGRhdGVQb3BwZXIoKSA6IHRoaXMuZGVzdHJveVBvcHBlcigpO1xuICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCB2YWwpO1xuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgY3JlYXRlUG9wcGVyOiBmdW5jdGlvbiBjcmVhdGVQb3BwZXIoKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICBpZiAodGhpcy4kaXNTZXJ2ZXIpIHJldHVybjtcbiAgICAgIHRoaXMuY3VycmVudFBsYWNlbWVudCA9IHRoaXMuY3VycmVudFBsYWNlbWVudCB8fCB0aGlzLnBsYWNlbWVudDtcbiAgICAgIGlmICghL14odG9wfGJvdHRvbXxsZWZ0fHJpZ2h0KSgtc3RhcnR8LWVuZCk/JC9nLnRlc3QodGhpcy5jdXJyZW50UGxhY2VtZW50KSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBvcHRpb25zID0gdGhpcy5wb3BwZXJPcHRpb25zO1xuICAgICAgdmFyIHBvcHBlciA9IHRoaXMucG9wcGVyRWxtID0gdGhpcy5wb3BwZXJFbG0gfHwgdGhpcy5wb3BwZXIgfHwgdGhpcy4kcmVmcy5wb3BwZXI7XG4gICAgICB2YXIgcmVmZXJlbmNlID0gdGhpcy5yZWZlcmVuY2VFbG0gPSB0aGlzLnJlZmVyZW5jZUVsbSB8fCB0aGlzLnJlZmVyZW5jZSB8fCB0aGlzLiRyZWZzLnJlZmVyZW5jZTtcblxuICAgICAgaWYgKCFyZWZlcmVuY2UgJiYgdGhpcy4kc2xvdHMucmVmZXJlbmNlICYmIHRoaXMuJHNsb3RzLnJlZmVyZW5jZVswXSkge1xuICAgICAgICByZWZlcmVuY2UgPSB0aGlzLnJlZmVyZW5jZUVsbSA9IHRoaXMuJHNsb3RzLnJlZmVyZW5jZVswXS5lbG07XG4gICAgICB9XG5cbiAgICAgIGlmICghcG9wcGVyIHx8ICFyZWZlcmVuY2UpIHJldHVybjtcbiAgICAgIGlmICh0aGlzLnZpc2libGVBcnJvdykgdGhpcy5hcHBlbmRBcnJvdyhwb3BwZXIpO1xuICAgICAgaWYgKHRoaXMuYXBwZW5kVG9Cb2R5KSBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMucG9wcGVyRWxtKTtcbiAgICAgIGlmICh0aGlzLnBvcHBlckpTICYmIHRoaXMucG9wcGVySlMuZGVzdHJveSkge1xuICAgICAgICB0aGlzLnBvcHBlckpTLmRlc3Ryb3koKTtcbiAgICAgIH1cblxuICAgICAgb3B0aW9ucy5wbGFjZW1lbnQgPSB0aGlzLmN1cnJlbnRQbGFjZW1lbnQ7XG4gICAgICBvcHRpb25zLm9mZnNldCA9IHRoaXMub2Zmc2V0O1xuICAgICAgb3B0aW9ucy5hcnJvd09mZnNldCA9IHRoaXMuYXJyb3dPZmZzZXQ7XG4gICAgICB0aGlzLnBvcHBlckpTID0gbmV3IFBvcHBlckpTKHJlZmVyZW5jZSwgcG9wcGVyLCBvcHRpb25zKTtcbiAgICAgIHRoaXMucG9wcGVySlMub25DcmVhdGUoZnVuY3Rpb24gKF8pIHtcbiAgICAgICAgX3RoaXMuJGVtaXQoJ2NyZWF0ZWQnLCBfdGhpcyk7XG4gICAgICAgIF90aGlzLnJlc2V0VHJhbnNmb3JtT3JpZ2luKCk7XG4gICAgICAgIF90aGlzLiRuZXh0VGljayhfdGhpcy51cGRhdGVQb3BwZXIpO1xuICAgICAgfSk7XG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMub25VcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5wb3BwZXJKUy5vblVwZGF0ZShvcHRpb25zLm9uVXBkYXRlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucG9wcGVySlMuX3BvcHBlci5zdHlsZS56SW5kZXggPSBfcG9wdXAuUG9wdXBNYW5hZ2VyLm5leHRaSW5kZXgoKTtcbiAgICAgIHRoaXMucG9wcGVyRWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgc3RvcCk7XG4gICAgfSxcbiAgICB1cGRhdGVQb3BwZXI6IGZ1bmN0aW9uIHVwZGF0ZVBvcHBlcigpIHtcbiAgICAgIHZhciBwb3BwZXJKUyA9IHRoaXMucG9wcGVySlM7XG4gICAgICBpZiAocG9wcGVySlMpIHtcbiAgICAgICAgcG9wcGVySlMudXBkYXRlKCk7XG4gICAgICAgIGlmIChwb3BwZXJKUy5fcG9wcGVyKSB7XG4gICAgICAgICAgcG9wcGVySlMuX3BvcHBlci5zdHlsZS56SW5kZXggPSBfcG9wdXAuUG9wdXBNYW5hZ2VyLm5leHRaSW5kZXgoKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jcmVhdGVQb3BwZXIoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGRvRGVzdHJveTogZnVuY3Rpb24gZG9EZXN0cm95KGZvcmNlRGVzdHJveSkge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAoIXRoaXMucG9wcGVySlMgfHwgdGhpcy5zaG93UG9wcGVyICYmICFmb3JjZURlc3Ryb3kpIHJldHVybjtcbiAgICAgIHRoaXMucG9wcGVySlMuZGVzdHJveSgpO1xuICAgICAgdGhpcy5wb3BwZXJKUyA9IG51bGw7XG4gICAgfSxcbiAgICBkZXN0cm95UG9wcGVyOiBmdW5jdGlvbiBkZXN0cm95UG9wcGVyKCkge1xuICAgICAgaWYgKHRoaXMucG9wcGVySlMpIHtcbiAgICAgICAgdGhpcy5yZXNldFRyYW5zZm9ybU9yaWdpbigpO1xuICAgICAgfVxuICAgIH0sXG4gICAgcmVzZXRUcmFuc2Zvcm1PcmlnaW46IGZ1bmN0aW9uIHJlc2V0VHJhbnNmb3JtT3JpZ2luKCkge1xuICAgICAgaWYgKCF0aGlzLnRyYW5zZm9ybU9yaWdpbikgcmV0dXJuO1xuICAgICAgdmFyIHBsYWNlbWVudE1hcCA9IHtcbiAgICAgICAgdG9wOiAnYm90dG9tJyxcbiAgICAgICAgYm90dG9tOiAndG9wJyxcbiAgICAgICAgbGVmdDogJ3JpZ2h0JyxcbiAgICAgICAgcmlnaHQ6ICdsZWZ0J1xuICAgICAgfTtcbiAgICAgIHZhciBwbGFjZW1lbnQgPSB0aGlzLnBvcHBlckpTLl9wb3BwZXIuZ2V0QXR0cmlidXRlKCd4LXBsYWNlbWVudCcpLnNwbGl0KCctJylbMF07XG4gICAgICB2YXIgb3JpZ2luID0gcGxhY2VtZW50TWFwW3BsYWNlbWVudF07XG4gICAgICB0aGlzLnBvcHBlckpTLl9wb3BwZXIuc3R5bGUudHJhbnNmb3JtT3JpZ2luID0gdHlwZW9mIHRoaXMudHJhbnNmb3JtT3JpZ2luID09PSAnc3RyaW5nJyA/IHRoaXMudHJhbnNmb3JtT3JpZ2luIDogWyd0b3AnLCAnYm90dG9tJ10uaW5kZXhPZihwbGFjZW1lbnQpID4gLTEgPyAnY2VudGVyICcgKyBvcmlnaW4gOiBvcmlnaW4gKyAnIGNlbnRlcic7XG4gICAgfSxcbiAgICBhcHBlbmRBcnJvdzogZnVuY3Rpb24gYXBwZW5kQXJyb3coZWxlbWVudCkge1xuICAgICAgdmFyIGhhc2ggPSB2b2lkIDA7XG4gICAgICBpZiAodGhpcy5hcHBlbmRlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuYXBwZW5kZWQgPSB0cnVlO1xuXG4gICAgICBmb3IgKHZhciBpdGVtIGluIGVsZW1lbnQuYXR0cmlidXRlcykge1xuICAgICAgICBpZiAoL15fdi0vLnRlc3QoZWxlbWVudC5hdHRyaWJ1dGVzW2l0ZW1dLm5hbWUpKSB7XG4gICAgICAgICAgaGFzaCA9IGVsZW1lbnQuYXR0cmlidXRlc1tpdGVtXS5uYW1lO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBhcnJvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXG4gICAgICBpZiAoaGFzaCkge1xuICAgICAgICBhcnJvdy5zZXRBdHRyaWJ1dGUoaGFzaCwgJycpO1xuICAgICAgfVxuICAgICAgYXJyb3cuc2V0QXR0cmlidXRlKCd4LWFycm93JywgJycpO1xuICAgICAgYXJyb3cuY2xhc3NOYW1lID0gJ3BvcHBlcl9fYXJyb3cnO1xuICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZChhcnJvdyk7XG4gICAgfVxuICB9LFxuXG4gIGJlZm9yZURlc3Ryb3k6IGZ1bmN0aW9uIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgdGhpcy5kb0Rlc3Ryb3kodHJ1ZSk7XG4gICAgaWYgKHRoaXMucG9wcGVyRWxtICYmIHRoaXMucG9wcGVyRWxtLnBhcmVudE5vZGUgPT09IGRvY3VtZW50LmJvZHkpIHtcbiAgICAgIHRoaXMucG9wcGVyRWxtLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgc3RvcCk7XG4gICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRoaXMucG9wcGVyRWxtKTtcbiAgICB9XG4gIH0sXG5cblxuICAvLyBjYWxsIGRlc3Ryb3kgaW4ga2VlcC1hbGl2ZSBtb2RlXG4gIGRlYWN0aXZhdGVkOiBmdW5jdGlvbiBkZWFjdGl2YXRlZCgpIHtcbiAgICB0aGlzLiRvcHRpb25zLmJlZm9yZURlc3Ryb3lbMF0uY2FsbCh0aGlzKTtcbiAgfVxufTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/utils/vue-popper.js\n");

/***/ }),

/***/ "./node_modules/element-ui/node_modules/deepmerge/dist/cjs.js":
/*!********************************************************************!*\
  !*** ./node_modules/element-ui/node_modules/deepmerge/dist/cjs.js ***!
  \********************************************************************/
/***/ ((module) => {

"use strict";
eval("\n\nvar isMergeableObject = function isMergeableObject(value) {\n\treturn isNonNullObject(value)\n\t\t&& !isSpecial(value)\n};\n\nfunction isNonNullObject(value) {\n\treturn !!value && typeof value === 'object'\n}\n\nfunction isSpecial(value) {\n\tvar stringValue = Object.prototype.toString.call(value);\n\n\treturn stringValue === '[object RegExp]'\n\t\t|| stringValue === '[object Date]'\n\t\t|| isReactElement(value)\n}\n\n// see https://github.com/facebook/react/blob/b5ac963fb791d1298e7f396236383bc955f916c1/src/isomorphic/classic/element/ReactElement.js#L21-L25\nvar canUseSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = canUseSymbol ? Symbol.for('react.element') : 0xeac7;\n\nfunction isReactElement(value) {\n\treturn value.$$typeof === REACT_ELEMENT_TYPE\n}\n\nfunction emptyTarget(val) {\n    return Array.isArray(val) ? [] : {}\n}\n\nfunction cloneIfNecessary(value, optionsArgument) {\n    var clone = optionsArgument && optionsArgument.clone === true;\n    return (clone && isMergeableObject(value)) ? deepmerge(emptyTarget(value), value, optionsArgument) : value\n}\n\nfunction defaultArrayMerge(target, source, optionsArgument) {\n    var destination = target.slice();\n    source.forEach(function(e, i) {\n        if (typeof destination[i] === 'undefined') {\n            destination[i] = cloneIfNecessary(e, optionsArgument);\n        } else if (isMergeableObject(e)) {\n            destination[i] = deepmerge(target[i], e, optionsArgument);\n        } else if (target.indexOf(e) === -1) {\n            destination.push(cloneIfNecessary(e, optionsArgument));\n        }\n    });\n    return destination\n}\n\nfunction mergeObject(target, source, optionsArgument) {\n    var destination = {};\n    if (isMergeableObject(target)) {\n        Object.keys(target).forEach(function(key) {\n            destination[key] = cloneIfNecessary(target[key], optionsArgument);\n        });\n    }\n    Object.keys(source).forEach(function(key) {\n        if (!isMergeableObject(source[key]) || !target[key]) {\n            destination[key] = cloneIfNecessary(source[key], optionsArgument);\n        } else {\n            destination[key] = deepmerge(target[key], source[key], optionsArgument);\n        }\n    });\n    return destination\n}\n\nfunction deepmerge(target, source, optionsArgument) {\n    var sourceIsArray = Array.isArray(source);\n    var targetIsArray = Array.isArray(target);\n    var options = optionsArgument || { arrayMerge: defaultArrayMerge };\n    var sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;\n\n    if (!sourceAndTargetTypesMatch) {\n        return cloneIfNecessary(source, optionsArgument)\n    } else if (sourceIsArray) {\n        var arrayMerge = options.arrayMerge || defaultArrayMerge;\n        return arrayMerge(target, source, optionsArgument)\n    } else {\n        return mergeObject(target, source, optionsArgument)\n    }\n}\n\ndeepmerge.all = function deepmergeAll(array, optionsArgument) {\n    if (!Array.isArray(array) || array.length < 2) {\n        throw new Error('first argument should be an array with at least two elements')\n    }\n\n    // we are sure there are at least 2 values, so it is safe to have no initial value\n    return array.reduce(function(prev, next) {\n        return deepmerge(prev, next, optionsArgument)\n    })\n};\n\nvar deepmerge_1 = deepmerge;\n\nmodule.exports = deepmerge_1;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9ub2RlX21vZHVsZXMvZGVlcG1lcmdlL2Rpc3QvY2pzLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QztBQUN2Qzs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9lbGVtZW50LXVpL25vZGVfbW9kdWxlcy9kZWVwbWVyZ2UvZGlzdC9janMuanM/M2RlNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBpc01lcmdlYWJsZU9iamVjdCA9IGZ1bmN0aW9uIGlzTWVyZ2VhYmxlT2JqZWN0KHZhbHVlKSB7XG5cdHJldHVybiBpc05vbk51bGxPYmplY3QodmFsdWUpXG5cdFx0JiYgIWlzU3BlY2lhbCh2YWx1ZSlcbn07XG5cbmZ1bmN0aW9uIGlzTm9uTnVsbE9iamVjdCh2YWx1ZSkge1xuXHRyZXR1cm4gISF2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnXG59XG5cbmZ1bmN0aW9uIGlzU3BlY2lhbCh2YWx1ZSkge1xuXHR2YXIgc3RyaW5nVmFsdWUgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpO1xuXG5cdHJldHVybiBzdHJpbmdWYWx1ZSA9PT0gJ1tvYmplY3QgUmVnRXhwXSdcblx0XHR8fCBzdHJpbmdWYWx1ZSA9PT0gJ1tvYmplY3QgRGF0ZV0nXG5cdFx0fHwgaXNSZWFjdEVsZW1lbnQodmFsdWUpXG59XG5cbi8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvYmxvYi9iNWFjOTYzZmI3OTFkMTI5OGU3ZjM5NjIzNjM4M2JjOTU1ZjkxNmMxL3NyYy9pc29tb3JwaGljL2NsYXNzaWMvZWxlbWVudC9SZWFjdEVsZW1lbnQuanMjTDIxLUwyNVxudmFyIGNhblVzZVN5bWJvbCA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLmZvcjtcbnZhciBSRUFDVF9FTEVNRU5UX1RZUEUgPSBjYW5Vc2VTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5lbGVtZW50JykgOiAweGVhYzc7XG5cbmZ1bmN0aW9uIGlzUmVhY3RFbGVtZW50KHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFXG59XG5cbmZ1bmN0aW9uIGVtcHR5VGFyZ2V0KHZhbCkge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHZhbCkgPyBbXSA6IHt9XG59XG5cbmZ1bmN0aW9uIGNsb25lSWZOZWNlc3NhcnkodmFsdWUsIG9wdGlvbnNBcmd1bWVudCkge1xuICAgIHZhciBjbG9uZSA9IG9wdGlvbnNBcmd1bWVudCAmJiBvcHRpb25zQXJndW1lbnQuY2xvbmUgPT09IHRydWU7XG4gICAgcmV0dXJuIChjbG9uZSAmJiBpc01lcmdlYWJsZU9iamVjdCh2YWx1ZSkpID8gZGVlcG1lcmdlKGVtcHR5VGFyZ2V0KHZhbHVlKSwgdmFsdWUsIG9wdGlvbnNBcmd1bWVudCkgOiB2YWx1ZVxufVxuXG5mdW5jdGlvbiBkZWZhdWx0QXJyYXlNZXJnZSh0YXJnZXQsIHNvdXJjZSwgb3B0aW9uc0FyZ3VtZW50KSB7XG4gICAgdmFyIGRlc3RpbmF0aW9uID0gdGFyZ2V0LnNsaWNlKCk7XG4gICAgc291cmNlLmZvckVhY2goZnVuY3Rpb24oZSwgaSkge1xuICAgICAgICBpZiAodHlwZW9mIGRlc3RpbmF0aW9uW2ldID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgZGVzdGluYXRpb25baV0gPSBjbG9uZUlmTmVjZXNzYXJ5KGUsIG9wdGlvbnNBcmd1bWVudCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNNZXJnZWFibGVPYmplY3QoZSkpIHtcbiAgICAgICAgICAgIGRlc3RpbmF0aW9uW2ldID0gZGVlcG1lcmdlKHRhcmdldFtpXSwgZSwgb3B0aW9uc0FyZ3VtZW50KTtcbiAgICAgICAgfSBlbHNlIGlmICh0YXJnZXQuaW5kZXhPZihlKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIGRlc3RpbmF0aW9uLnB1c2goY2xvbmVJZk5lY2Vzc2FyeShlLCBvcHRpb25zQXJndW1lbnQpKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBkZXN0aW5hdGlvblxufVxuXG5mdW5jdGlvbiBtZXJnZU9iamVjdCh0YXJnZXQsIHNvdXJjZSwgb3B0aW9uc0FyZ3VtZW50KSB7XG4gICAgdmFyIGRlc3RpbmF0aW9uID0ge307XG4gICAgaWYgKGlzTWVyZ2VhYmxlT2JqZWN0KHRhcmdldCkpIHtcbiAgICAgICAgT2JqZWN0LmtleXModGFyZ2V0KS5mb3JFYWNoKGZ1bmN0aW9uKGtleSkge1xuICAgICAgICAgICAgZGVzdGluYXRpb25ba2V5XSA9IGNsb25lSWZOZWNlc3NhcnkodGFyZ2V0W2tleV0sIG9wdGlvbnNBcmd1bWVudCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBPYmplY3Qua2V5cyhzb3VyY2UpLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7XG4gICAgICAgIGlmICghaXNNZXJnZWFibGVPYmplY3Qoc291cmNlW2tleV0pIHx8ICF0YXJnZXRba2V5XSkge1xuICAgICAgICAgICAgZGVzdGluYXRpb25ba2V5XSA9IGNsb25lSWZOZWNlc3Nhcnkoc291cmNlW2tleV0sIG9wdGlvbnNBcmd1bWVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkZXN0aW5hdGlvbltrZXldID0gZGVlcG1lcmdlKHRhcmdldFtrZXldLCBzb3VyY2Vba2V5XSwgb3B0aW9uc0FyZ3VtZW50KTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBkZXN0aW5hdGlvblxufVxuXG5mdW5jdGlvbiBkZWVwbWVyZ2UodGFyZ2V0LCBzb3VyY2UsIG9wdGlvbnNBcmd1bWVudCkge1xuICAgIHZhciBzb3VyY2VJc0FycmF5ID0gQXJyYXkuaXNBcnJheShzb3VyY2UpO1xuICAgIHZhciB0YXJnZXRJc0FycmF5ID0gQXJyYXkuaXNBcnJheSh0YXJnZXQpO1xuICAgIHZhciBvcHRpb25zID0gb3B0aW9uc0FyZ3VtZW50IHx8IHsgYXJyYXlNZXJnZTogZGVmYXVsdEFycmF5TWVyZ2UgfTtcbiAgICB2YXIgc291cmNlQW5kVGFyZ2V0VHlwZXNNYXRjaCA9IHNvdXJjZUlzQXJyYXkgPT09IHRhcmdldElzQXJyYXk7XG5cbiAgICBpZiAoIXNvdXJjZUFuZFRhcmdldFR5cGVzTWF0Y2gpIHtcbiAgICAgICAgcmV0dXJuIGNsb25lSWZOZWNlc3Nhcnkoc291cmNlLCBvcHRpb25zQXJndW1lbnQpXG4gICAgfSBlbHNlIGlmIChzb3VyY2VJc0FycmF5KSB7XG4gICAgICAgIHZhciBhcnJheU1lcmdlID0gb3B0aW9ucy5hcnJheU1lcmdlIHx8IGRlZmF1bHRBcnJheU1lcmdlO1xuICAgICAgICByZXR1cm4gYXJyYXlNZXJnZSh0YXJnZXQsIHNvdXJjZSwgb3B0aW9uc0FyZ3VtZW50KVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBtZXJnZU9iamVjdCh0YXJnZXQsIHNvdXJjZSwgb3B0aW9uc0FyZ3VtZW50KVxuICAgIH1cbn1cblxuZGVlcG1lcmdlLmFsbCA9IGZ1bmN0aW9uIGRlZXBtZXJnZUFsbChhcnJheSwgb3B0aW9uc0FyZ3VtZW50KSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGFycmF5KSB8fCBhcnJheS5sZW5ndGggPCAyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZmlyc3QgYXJndW1lbnQgc2hvdWxkIGJlIGFuIGFycmF5IHdpdGggYXQgbGVhc3QgdHdvIGVsZW1lbnRzJylcbiAgICB9XG5cbiAgICAvLyB3ZSBhcmUgc3VyZSB0aGVyZSBhcmUgYXQgbGVhc3QgMiB2YWx1ZXMsIHNvIGl0IGlzIHNhZmUgdG8gaGF2ZSBubyBpbml0aWFsIHZhbHVlXG4gICAgcmV0dXJuIGFycmF5LnJlZHVjZShmdW5jdGlvbihwcmV2LCBuZXh0KSB7XG4gICAgICAgIHJldHVybiBkZWVwbWVyZ2UocHJldiwgbmV4dCwgb3B0aW9uc0FyZ3VtZW50KVxuICAgIH0pXG59O1xuXG52YXIgZGVlcG1lcmdlXzEgPSBkZWVwbWVyZ2U7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVlcG1lcmdlXzE7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/element-ui/node_modules/deepmerge/dist/cjs.js\n");

/***/ }),

/***/ "./node_modules/element-ui/lib/theme-chalk/fonts/element-icons.ttf":
/*!*************************************************************************!*\
  !*** ./node_modules/element-ui/lib/theme-chalk/fonts/element-icons.ttf ***!
  \*************************************************************************/
/***/ ((module) => {

eval("module.exports = \"/fonts/vendor/element-ui/lib/theme-chalk/element-icons.ttf?4520188144a17fb24a6af28a70dae0ce\";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdGhlbWUtY2hhbGsvZm9udHMvZWxlbWVudC1pY29ucy50dGYiLCJtYXBwaW5ncyI6IkFBQUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdGhlbWUtY2hhbGsvZm9udHMvZWxlbWVudC1pY29ucy50dGY/MGJhZSJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IFwiL2ZvbnRzL3ZlbmRvci9lbGVtZW50LXVpL2xpYi90aGVtZS1jaGFsay9lbGVtZW50LWljb25zLnR0Zj80NTIwMTg4MTQ0YTE3ZmIyNGE2YWYyOGE3MGRhZTBjZVwiOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/theme-chalk/fonts/element-icons.ttf\n");

/***/ }),

/***/ "./node_modules/element-ui/lib/theme-chalk/fonts/element-icons.woff":
/*!**************************************************************************!*\
  !*** ./node_modules/element-ui/lib/theme-chalk/fonts/element-icons.woff ***!
  \**************************************************************************/
/***/ ((module) => {

eval("module.exports = \"/fonts/vendor/element-ui/lib/theme-chalk/element-icons.woff?313f7dacf2076822059d2dca26dedfc6\";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdGhlbWUtY2hhbGsvZm9udHMvZWxlbWVudC1pY29ucy53b2ZmIiwibWFwcGluZ3MiOiJBQUFBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2VsZW1lbnQtdWkvbGliL3RoZW1lLWNoYWxrL2ZvbnRzL2VsZW1lbnQtaWNvbnMud29mZj8yN2ZmIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gXCIvZm9udHMvdmVuZG9yL2VsZW1lbnQtdWkvbGliL3RoZW1lLWNoYWxrL2VsZW1lbnQtaWNvbnMud29mZj8zMTNmN2RhY2YyMDc2ODIyMDU5ZDJkY2EyNmRlZGZjNlwiOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/theme-chalk/fonts/element-icons.woff\n");

/***/ }),

/***/ "./node_modules/lodash/lodash.js":
/*!***************************************!*\
  !*** ./node_modules/lodash/lodash.js ***!
  \***************************************/
/***/ (function(module, exports, __webpack_require__) {

eval("/* module decorator */ module = __webpack_require__.nmd(module);\nvar __WEBPACK_AMD_DEFINE_RESULT__;/**\n * @license\n * Lodash <https://lodash.com/>\n * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n;(function() {\n\n  /** Used as a safe reference for `undefined` in pre-ES5 environments. */\n  var undefined;\n\n  /** Used as the semantic version number. */\n  var VERSION = '4.17.21';\n\n  /** Used as the size to enable large array optimizations. */\n  var LARGE_ARRAY_SIZE = 200;\n\n  /** Error message constants. */\n  var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',\n      FUNC_ERROR_TEXT = 'Expected a function',\n      INVALID_TEMPL_VAR_ERROR_TEXT = 'Invalid `variable` option passed into `_.template`';\n\n  /** Used to stand-in for `undefined` hash values. */\n  var HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n  /** Used as the maximum memoize cache size. */\n  var MAX_MEMOIZE_SIZE = 500;\n\n  /** Used as the internal argument placeholder. */\n  var PLACEHOLDER = '__lodash_placeholder__';\n\n  /** Used to compose bitmasks for cloning. */\n  var CLONE_DEEP_FLAG = 1,\n      CLONE_FLAT_FLAG = 2,\n      CLONE_SYMBOLS_FLAG = 4;\n\n  /** Used to compose bitmasks for value comparisons. */\n  var COMPARE_PARTIAL_FLAG = 1,\n      COMPARE_UNORDERED_FLAG = 2;\n\n  /** Used to compose bitmasks for function metadata. */\n  var WRAP_BIND_FLAG = 1,\n      WRAP_BIND_KEY_FLAG = 2,\n      WRAP_CURRY_BOUND_FLAG = 4,\n      WRAP_CURRY_FLAG = 8,\n      WRAP_CURRY_RIGHT_FLAG = 16,\n      WRAP_PARTIAL_FLAG = 32,\n      WRAP_PARTIAL_RIGHT_FLAG = 64,\n      WRAP_ARY_FLAG = 128,\n      WRAP_REARG_FLAG = 256,\n      WRAP_FLIP_FLAG = 512;\n\n  /** Used as default options for `_.truncate`. */\n  var DEFAULT_TRUNC_LENGTH = 30,\n      DEFAULT_TRUNC_OMISSION = '...';\n\n  /** Used to detect hot functions by number of calls within a span of milliseconds. */\n  var HOT_COUNT = 800,\n      HOT_SPAN = 16;\n\n  /** Used to indicate the type of lazy iteratees. */\n  var LAZY_FILTER_FLAG = 1,\n      LAZY_MAP_FLAG = 2,\n      LAZY_WHILE_FLAG = 3;\n\n  /** Used as references for various `Number` constants. */\n  var INFINITY = 1 / 0,\n      MAX_SAFE_INTEGER = 9007199254740991,\n      MAX_INTEGER = 1.7976931348623157e+308,\n      NAN = 0 / 0;\n\n  /** Used as references for the maximum length and index of an array. */\n  var MAX_ARRAY_LENGTH = 4294967295,\n      MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,\n      HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;\n\n  /** Used to associate wrap methods with their bit flags. */\n  var wrapFlags = [\n    ['ary', WRAP_ARY_FLAG],\n    ['bind', WRAP_BIND_FLAG],\n    ['bindKey', WRAP_BIND_KEY_FLAG],\n    ['curry', WRAP_CURRY_FLAG],\n    ['curryRight', WRAP_CURRY_RIGHT_FLAG],\n    ['flip', WRAP_FLIP_FLAG],\n    ['partial', WRAP_PARTIAL_FLAG],\n    ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],\n    ['rearg', WRAP_REARG_FLAG]\n  ];\n\n  /** `Object#toString` result references. */\n  var argsTag = '[object Arguments]',\n      arrayTag = '[object Array]',\n      asyncTag = '[object AsyncFunction]',\n      boolTag = '[object Boolean]',\n      dateTag = '[object Date]',\n      domExcTag = '[object DOMException]',\n      errorTag = '[object Error]',\n      funcTag = '[object Function]',\n      genTag = '[object GeneratorFunction]',\n      mapTag = '[object Map]',\n      numberTag = '[object Number]',\n      nullTag = '[object Null]',\n      objectTag = '[object Object]',\n      promiseTag = '[object Promise]',\n      proxyTag = '[object Proxy]',\n      regexpTag = '[object RegExp]',\n      setTag = '[object Set]',\n      stringTag = '[object String]',\n      symbolTag = '[object Symbol]',\n      undefinedTag = '[object Undefined]',\n      weakMapTag = '[object WeakMap]',\n      weakSetTag = '[object WeakSet]';\n\n  var arrayBufferTag = '[object ArrayBuffer]',\n      dataViewTag = '[object DataView]',\n      float32Tag = '[object Float32Array]',\n      float64Tag = '[object Float64Array]',\n      int8Tag = '[object Int8Array]',\n      int16Tag = '[object Int16Array]',\n      int32Tag = '[object Int32Array]',\n      uint8Tag = '[object Uint8Array]',\n      uint8ClampedTag = '[object Uint8ClampedArray]',\n      uint16Tag = '[object Uint16Array]',\n      uint32Tag = '[object Uint32Array]';\n\n  /** Used to match empty string literals in compiled template source. */\n  var reEmptyStringLeading = /\\b__p \\+= '';/g,\n      reEmptyStringMiddle = /\\b(__p \\+=) '' \\+/g,\n      reEmptyStringTrailing = /(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g;\n\n  /** Used to match HTML entities and HTML characters. */\n  var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,\n      reUnescapedHtml = /[&<>\"']/g,\n      reHasEscapedHtml = RegExp(reEscapedHtml.source),\n      reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\n\n  /** Used to match template delimiters. */\n  var reEscape = /<%-([\\s\\S]+?)%>/g,\n      reEvaluate = /<%([\\s\\S]+?)%>/g,\n      reInterpolate = /<%=([\\s\\S]+?)%>/g;\n\n  /** Used to match property names within property paths. */\n  var reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n      reIsPlainProp = /^\\w*$/,\n      rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n  /**\n   * Used to match `RegExp`\n   * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n   */\n  var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g,\n      reHasRegExpChar = RegExp(reRegExpChar.source);\n\n  /** Used to match leading whitespace. */\n  var reTrimStart = /^\\s+/;\n\n  /** Used to match a single whitespace character. */\n  var reWhitespace = /\\s/;\n\n  /** Used to match wrap detail comments. */\n  var reWrapComment = /\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,\n      reWrapDetails = /\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,\n      reSplitDetails = /,? & /;\n\n  /** Used to match words composed of alphanumeric characters. */\n  var reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n  /**\n   * Used to validate the `validate` option in `_.template` variable.\n   *\n   * Forbids characters which could potentially change the meaning of the function argument definition:\n   * - \"(),\" (modification of function parameters)\n   * - \"=\" (default value)\n   * - \"[]{}\" (destructuring of function parameters)\n   * - \"/\" (beginning of a comment)\n   * - whitespace\n   */\n  var reForbiddenIdentifierChars = /[()=,{}\\[\\]\\/\\s]/;\n\n  /** Used to match backslashes in property paths. */\n  var reEscapeChar = /\\\\(\\\\)?/g;\n\n  /**\n   * Used to match\n   * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).\n   */\n  var reEsTemplate = /\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g;\n\n  /** Used to match `RegExp` flags from their coerced string values. */\n  var reFlags = /\\w*$/;\n\n  /** Used to detect bad signed hexadecimal string values. */\n  var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n  /** Used to detect binary string values. */\n  var reIsBinary = /^0b[01]+$/i;\n\n  /** Used to detect host constructors (Safari). */\n  var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n  /** Used to detect octal string values. */\n  var reIsOctal = /^0o[0-7]+$/i;\n\n  /** Used to detect unsigned integer values. */\n  var reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n  /** Used to match Latin Unicode letters (excluding mathematical operators). */\n  var reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n  /** Used to ensure capturing order of template delimiters. */\n  var reNoMatch = /($^)/;\n\n  /** Used to match unescaped characters in compiled string literals. */\n  var reUnescapedString = /['\\n\\r\\u2028\\u2029\\\\]/g;\n\n  /** Used to compose unicode character classes. */\n  var rsAstralRange = '\\\\ud800-\\\\udfff',\n      rsComboMarksRange = '\\\\u0300-\\\\u036f',\n      reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n      rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n      rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n      rsDingbatRange = '\\\\u2700-\\\\u27bf',\n      rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n      rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n      rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n      rsPunctuationRange = '\\\\u2000-\\\\u206f',\n      rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n      rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n      rsVarRange = '\\\\ufe0e\\\\ufe0f',\n      rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n  /** Used to compose unicode capture groups. */\n  var rsApos = \"['\\u2019]\",\n      rsAstral = '[' + rsAstralRange + ']',\n      rsBreak = '[' + rsBreakRange + ']',\n      rsCombo = '[' + rsComboRange + ']',\n      rsDigits = '\\\\d+',\n      rsDingbat = '[' + rsDingbatRange + ']',\n      rsLower = '[' + rsLowerRange + ']',\n      rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n      rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n      rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n      rsNonAstral = '[^' + rsAstralRange + ']',\n      rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n      rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n      rsUpper = '[' + rsUpperRange + ']',\n      rsZWJ = '\\\\u200d';\n\n  /** Used to compose unicode regexes. */\n  var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n      rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n      rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n      rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n      reOptMod = rsModifier + '?',\n      rsOptVar = '[' + rsVarRange + ']?',\n      rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n      rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n      rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n      rsSeq = rsOptVar + reOptMod + rsOptJoin,\n      rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,\n      rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n  /** Used to match apostrophes. */\n  var reApos = RegExp(rsApos, 'g');\n\n  /**\n   * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n   * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n   */\n  var reComboMark = RegExp(rsCombo, 'g');\n\n  /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\n  var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n  /** Used to match complex or compound words. */\n  var reUnicodeWord = RegExp([\n    rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n    rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\n    rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\n    rsUpper + '+' + rsOptContrUpper,\n    rsOrdUpper,\n    rsOrdLower,\n    rsDigits,\n    rsEmoji\n  ].join('|'), 'g');\n\n  /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\n  var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange  + rsComboRange + rsVarRange + ']');\n\n  /** Used to detect strings that need a more robust regexp to match words. */\n  var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n  /** Used to assign default `context` object properties. */\n  var contextProps = [\n    'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array',\n    'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object',\n    'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array',\n    'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',\n    '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'\n  ];\n\n  /** Used to make template sourceURLs easier to identify. */\n  var templateCounter = -1;\n\n  /** Used to identify `toStringTag` values of typed arrays. */\n  var typedArrayTags = {};\n  typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\n  typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\n  typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\n  typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\n  typedArrayTags[uint32Tag] = true;\n  typedArrayTags[argsTag] = typedArrayTags[arrayTag] =\n  typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\n  typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\n  typedArrayTags[errorTag] = typedArrayTags[funcTag] =\n  typedArrayTags[mapTag] = typedArrayTags[numberTag] =\n  typedArrayTags[objectTag] = typedArrayTags[regexpTag] =\n  typedArrayTags[setTag] = typedArrayTags[stringTag] =\n  typedArrayTags[weakMapTag] = false;\n\n  /** Used to identify `toStringTag` values supported by `_.clone`. */\n  var cloneableTags = {};\n  cloneableTags[argsTag] = cloneableTags[arrayTag] =\n  cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\n  cloneableTags[boolTag] = cloneableTags[dateTag] =\n  cloneableTags[float32Tag] = cloneableTags[float64Tag] =\n  cloneableTags[int8Tag] = cloneableTags[int16Tag] =\n  cloneableTags[int32Tag] = cloneableTags[mapTag] =\n  cloneableTags[numberTag] = cloneableTags[objectTag] =\n  cloneableTags[regexpTag] = cloneableTags[setTag] =\n  cloneableTags[stringTag] = cloneableTags[symbolTag] =\n  cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\n  cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\n  cloneableTags[errorTag] = cloneableTags[funcTag] =\n  cloneableTags[weakMapTag] = false;\n\n  /** Used to map Latin Unicode letters to basic Latin letters. */\n  var deburredLetters = {\n    // Latin-1 Supplement block.\n    '\\xc0': 'A',  '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n    '\\xe0': 'a',  '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n    '\\xc7': 'C',  '\\xe7': 'c',\n    '\\xd0': 'D',  '\\xf0': 'd',\n    '\\xc8': 'E',  '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n    '\\xe8': 'e',  '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n    '\\xcc': 'I',  '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n    '\\xec': 'i',  '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n    '\\xd1': 'N',  '\\xf1': 'n',\n    '\\xd2': 'O',  '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n    '\\xf2': 'o',  '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n    '\\xd9': 'U',  '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n    '\\xf9': 'u',  '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n    '\\xdd': 'Y',  '\\xfd': 'y', '\\xff': 'y',\n    '\\xc6': 'Ae', '\\xe6': 'ae',\n    '\\xde': 'Th', '\\xfe': 'th',\n    '\\xdf': 'ss',\n    // Latin Extended-A block.\n    '\\u0100': 'A',  '\\u0102': 'A', '\\u0104': 'A',\n    '\\u0101': 'a',  '\\u0103': 'a', '\\u0105': 'a',\n    '\\u0106': 'C',  '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n    '\\u0107': 'c',  '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n    '\\u010e': 'D',  '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n    '\\u0112': 'E',  '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n    '\\u0113': 'e',  '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n    '\\u011c': 'G',  '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n    '\\u011d': 'g',  '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n    '\\u0124': 'H',  '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n    '\\u0128': 'I',  '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n    '\\u0129': 'i',  '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n    '\\u0134': 'J',  '\\u0135': 'j',\n    '\\u0136': 'K',  '\\u0137': 'k', '\\u0138': 'k',\n    '\\u0139': 'L',  '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n    '\\u013a': 'l',  '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n    '\\u0143': 'N',  '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n    '\\u0144': 'n',  '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n    '\\u014c': 'O',  '\\u014e': 'O', '\\u0150': 'O',\n    '\\u014d': 'o',  '\\u014f': 'o', '\\u0151': 'o',\n    '\\u0154': 'R',  '\\u0156': 'R', '\\u0158': 'R',\n    '\\u0155': 'r',  '\\u0157': 'r', '\\u0159': 'r',\n    '\\u015a': 'S',  '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n    '\\u015b': 's',  '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n    '\\u0162': 'T',  '\\u0164': 'T', '\\u0166': 'T',\n    '\\u0163': 't',  '\\u0165': 't', '\\u0167': 't',\n    '\\u0168': 'U',  '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n    '\\u0169': 'u',  '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n    '\\u0174': 'W',  '\\u0175': 'w',\n    '\\u0176': 'Y',  '\\u0177': 'y', '\\u0178': 'Y',\n    '\\u0179': 'Z',  '\\u017b': 'Z', '\\u017d': 'Z',\n    '\\u017a': 'z',  '\\u017c': 'z', '\\u017e': 'z',\n    '\\u0132': 'IJ', '\\u0133': 'ij',\n    '\\u0152': 'Oe', '\\u0153': 'oe',\n    '\\u0149': \"'n\", '\\u017f': 's'\n  };\n\n  /** Used to map characters to HTML entities. */\n  var htmlEscapes = {\n    '&': '&amp;',\n    '<': '&lt;',\n    '>': '&gt;',\n    '\"': '&quot;',\n    \"'\": '&#39;'\n  };\n\n  /** Used to map HTML entities to characters. */\n  var htmlUnescapes = {\n    '&amp;': '&',\n    '&lt;': '<',\n    '&gt;': '>',\n    '&quot;': '\"',\n    '&#39;': \"'\"\n  };\n\n  /** Used to escape characters for inclusion in compiled string literals. */\n  var stringEscapes = {\n    '\\\\': '\\\\',\n    \"'\": \"'\",\n    '\\n': 'n',\n    '\\r': 'r',\n    '\\u2028': 'u2028',\n    '\\u2029': 'u2029'\n  };\n\n  /** Built-in method references without a dependency on `root`. */\n  var freeParseFloat = parseFloat,\n      freeParseInt = parseInt;\n\n  /** Detect free variable `global` from Node.js. */\n  var freeGlobal = typeof __webpack_require__.g == 'object' && __webpack_require__.g && __webpack_require__.g.Object === Object && __webpack_require__.g;\n\n  /** Detect free variable `self`. */\n  var freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n  /** Used as a reference to the global object. */\n  var root = freeGlobal || freeSelf || Function('return this')();\n\n  /** Detect free variable `exports`. */\n  var freeExports =  true && exports && !exports.nodeType && exports;\n\n  /** Detect free variable `module`. */\n  var freeModule = freeExports && \"object\" == 'object' && module && !module.nodeType && module;\n\n  /** Detect the popular CommonJS extension `module.exports`. */\n  var moduleExports = freeModule && freeModule.exports === freeExports;\n\n  /** Detect free variable `process` from Node.js. */\n  var freeProcess = moduleExports && freeGlobal.process;\n\n  /** Used to access faster Node.js helpers. */\n  var nodeUtil = (function() {\n    try {\n      // Use `util.types` for Node.js 10+.\n      var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n      if (types) {\n        return types;\n      }\n\n      // Legacy `process.binding('util')` for Node.js < 10.\n      return freeProcess && freeProcess.binding && freeProcess.binding('util');\n    } catch (e) {}\n  }());\n\n  /* Node.js helper references. */\n  var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,\n      nodeIsDate = nodeUtil && nodeUtil.isDate,\n      nodeIsMap = nodeUtil && nodeUtil.isMap,\n      nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,\n      nodeIsSet = nodeUtil && nodeUtil.isSet,\n      nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n  /*--------------------------------------------------------------------------*/\n\n  /**\n   * A faster alternative to `Function#apply`, this function invokes `func`\n   * with the `this` binding of `thisArg` and the arguments of `args`.\n   *\n   * @private\n   * @param {Function} func The function to invoke.\n   * @param {*} thisArg The `this` binding of `func`.\n   * @param {Array} args The arguments to invoke `func` with.\n   * @returns {*} Returns the result of `func`.\n   */\n  function apply(func, thisArg, args) {\n    switch (args.length) {\n      case 0: return func.call(thisArg);\n      case 1: return func.call(thisArg, args[0]);\n      case 2: return func.call(thisArg, args[0], args[1]);\n      case 3: return func.call(thisArg, args[0], args[1], args[2]);\n    }\n    return func.apply(thisArg, args);\n  }\n\n  /**\n   * A specialized version of `baseAggregator` for arrays.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} setter The function to set `accumulator` values.\n   * @param {Function} iteratee The iteratee to transform keys.\n   * @param {Object} accumulator The initial aggregated object.\n   * @returns {Function} Returns `accumulator`.\n   */\n  function arrayAggregator(array, setter, iteratee, accumulator) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      var value = array[index];\n      setter(accumulator, value, iteratee(value), array);\n    }\n    return accumulator;\n  }\n\n  /**\n   * A specialized version of `_.forEach` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns `array`.\n   */\n  function arrayEach(array, iteratee) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (iteratee(array[index], index, array) === false) {\n        break;\n      }\n    }\n    return array;\n  }\n\n  /**\n   * A specialized version of `_.forEachRight` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns `array`.\n   */\n  function arrayEachRight(array, iteratee) {\n    var length = array == null ? 0 : array.length;\n\n    while (length--) {\n      if (iteratee(array[length], length, array) === false) {\n        break;\n      }\n    }\n    return array;\n  }\n\n  /**\n   * A specialized version of `_.every` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} predicate The function invoked per iteration.\n   * @returns {boolean} Returns `true` if all elements pass the predicate check,\n   *  else `false`.\n   */\n  function arrayEvery(array, predicate) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (!predicate(array[index], index, array)) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  /**\n   * A specialized version of `_.filter` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} predicate The function invoked per iteration.\n   * @returns {Array} Returns the new filtered array.\n   */\n  function arrayFilter(array, predicate) {\n    var index = -1,\n        length = array == null ? 0 : array.length,\n        resIndex = 0,\n        result = [];\n\n    while (++index < length) {\n      var value = array[index];\n      if (predicate(value, index, array)) {\n        result[resIndex++] = value;\n      }\n    }\n    return result;\n  }\n\n  /**\n   * A specialized version of `_.includes` for arrays without support for\n   * specifying an index to search from.\n   *\n   * @private\n   * @param {Array} [array] The array to inspect.\n   * @param {*} target The value to search for.\n   * @returns {boolean} Returns `true` if `target` is found, else `false`.\n   */\n  function arrayIncludes(array, value) {\n    var length = array == null ? 0 : array.length;\n    return !!length && baseIndexOf(array, value, 0) > -1;\n  }\n\n  /**\n   * This function is like `arrayIncludes` except that it accepts a comparator.\n   *\n   * @private\n   * @param {Array} [array] The array to inspect.\n   * @param {*} target The value to search for.\n   * @param {Function} comparator The comparator invoked per element.\n   * @returns {boolean} Returns `true` if `target` is found, else `false`.\n   */\n  function arrayIncludesWith(array, value, comparator) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (comparator(value, array[index])) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /**\n   * A specialized version of `_.map` for arrays without support for iteratee\n   * shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns the new mapped array.\n   */\n  function arrayMap(array, iteratee) {\n    var index = -1,\n        length = array == null ? 0 : array.length,\n        result = Array(length);\n\n    while (++index < length) {\n      result[index] = iteratee(array[index], index, array);\n    }\n    return result;\n  }\n\n  /**\n   * Appends the elements of `values` to `array`.\n   *\n   * @private\n   * @param {Array} array The array to modify.\n   * @param {Array} values The values to append.\n   * @returns {Array} Returns `array`.\n   */\n  function arrayPush(array, values) {\n    var index = -1,\n        length = values.length,\n        offset = array.length;\n\n    while (++index < length) {\n      array[offset + index] = values[index];\n    }\n    return array;\n  }\n\n  /**\n   * A specialized version of `_.reduce` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @param {*} [accumulator] The initial value.\n   * @param {boolean} [initAccum] Specify using the first element of `array` as\n   *  the initial value.\n   * @returns {*} Returns the accumulated value.\n   */\n  function arrayReduce(array, iteratee, accumulator, initAccum) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    if (initAccum && length) {\n      accumulator = array[++index];\n    }\n    while (++index < length) {\n      accumulator = iteratee(accumulator, array[index], index, array);\n    }\n    return accumulator;\n  }\n\n  /**\n   * A specialized version of `_.reduceRight` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @param {*} [accumulator] The initial value.\n   * @param {boolean} [initAccum] Specify using the last element of `array` as\n   *  the initial value.\n   * @returns {*} Returns the accumulated value.\n   */\n  function arrayReduceRight(array, iteratee, accumulator, initAccum) {\n    var length = array == null ? 0 : array.length;\n    if (initAccum && length) {\n      accumulator = array[--length];\n    }\n    while (length--) {\n      accumulator = iteratee(accumulator, array[length], length, array);\n    }\n    return accumulator;\n  }\n\n  /**\n   * A specialized version of `_.some` for arrays without support for iteratee\n   * shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} predicate The function invoked per iteration.\n   * @returns {boolean} Returns `true` if any element passes the predicate check,\n   *  else `false`.\n   */\n  function arraySome(array, predicate) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (predicate(array[index], index, array)) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /**\n   * Gets the size of an ASCII `string`.\n   *\n   * @private\n   * @param {string} string The string inspect.\n   * @returns {number} Returns the string size.\n   */\n  var asciiSize = baseProperty('length');\n\n  /**\n   * Converts an ASCII `string` to an array.\n   *\n   * @private\n   * @param {string} string The string to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function asciiToArray(string) {\n    return string.split('');\n  }\n\n  /**\n   * Splits an ASCII `string` into an array of its words.\n   *\n   * @private\n   * @param {string} The string to inspect.\n   * @returns {Array} Returns the words of `string`.\n   */\n  function asciiWords(string) {\n    return string.match(reAsciiWord) || [];\n  }\n\n  /**\n   * The base implementation of methods like `_.findKey` and `_.findLastKey`,\n   * without support for iteratee shorthands, which iterates over `collection`\n   * using `eachFunc`.\n   *\n   * @private\n   * @param {Array|Object} collection The collection to inspect.\n   * @param {Function} predicate The function invoked per iteration.\n   * @param {Function} eachFunc The function to iterate over `collection`.\n   * @returns {*} Returns the found element or its key, else `undefined`.\n   */\n  function baseFindKey(collection, predicate, eachFunc) {\n    var result;\n    eachFunc(collection, function(value, key, collection) {\n      if (predicate(value, key, collection)) {\n        result = key;\n        return false;\n      }\n    });\n    return result;\n  }\n\n  /**\n   * The base implementation of `_.findIndex` and `_.findLastIndex` without\n   * support for iteratee shorthands.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {Function} predicate The function invoked per iteration.\n   * @param {number} fromIndex The index to search from.\n   * @param {boolean} [fromRight] Specify iterating from right to left.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function baseFindIndex(array, predicate, fromIndex, fromRight) {\n    var length = array.length,\n        index = fromIndex + (fromRight ? 1 : -1);\n\n    while ((fromRight ? index-- : ++index < length)) {\n      if (predicate(array[index], index, array)) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  /**\n   * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function baseIndexOf(array, value, fromIndex) {\n    return value === value\n      ? strictIndexOf(array, value, fromIndex)\n      : baseFindIndex(array, baseIsNaN, fromIndex);\n  }\n\n  /**\n   * This function is like `baseIndexOf` except that it accepts a comparator.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @param {Function} comparator The comparator invoked per element.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function baseIndexOfWith(array, value, fromIndex, comparator) {\n    var index = fromIndex - 1,\n        length = array.length;\n\n    while (++index < length) {\n      if (comparator(array[index], value)) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  /**\n   * The base implementation of `_.isNaN` without support for number objects.\n   *\n   * @private\n   * @param {*} value The value to check.\n   * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n   */\n  function baseIsNaN(value) {\n    return value !== value;\n  }\n\n  /**\n   * The base implementation of `_.mean` and `_.meanBy` without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} array The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {number} Returns the mean.\n   */\n  function baseMean(array, iteratee) {\n    var length = array == null ? 0 : array.length;\n    return length ? (baseSum(array, iteratee) / length) : NAN;\n  }\n\n  /**\n   * The base implementation of `_.property` without support for deep paths.\n   *\n   * @private\n   * @param {string} key The key of the property to get.\n   * @returns {Function} Returns the new accessor function.\n   */\n  function baseProperty(key) {\n    return function(object) {\n      return object == null ? undefined : object[key];\n    };\n  }\n\n  /**\n   * The base implementation of `_.propertyOf` without support for deep paths.\n   *\n   * @private\n   * @param {Object} object The object to query.\n   * @returns {Function} Returns the new accessor function.\n   */\n  function basePropertyOf(object) {\n    return function(key) {\n      return object == null ? undefined : object[key];\n    };\n  }\n\n  /**\n   * The base implementation of `_.reduce` and `_.reduceRight`, without support\n   * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n   *\n   * @private\n   * @param {Array|Object} collection The collection to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @param {*} accumulator The initial value.\n   * @param {boolean} initAccum Specify using the first or last element of\n   *  `collection` as the initial value.\n   * @param {Function} eachFunc The function to iterate over `collection`.\n   * @returns {*} Returns the accumulated value.\n   */\n  function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n    eachFunc(collection, function(value, index, collection) {\n      accumulator = initAccum\n        ? (initAccum = false, value)\n        : iteratee(accumulator, value, index, collection);\n    });\n    return accumulator;\n  }\n\n  /**\n   * The base implementation of `_.sortBy` which uses `comparer` to define the\n   * sort order of `array` and replaces criteria objects with their corresponding\n   * values.\n   *\n   * @private\n   * @param {Array} array The array to sort.\n   * @param {Function} comparer The function to define sort order.\n   * @returns {Array} Returns `array`.\n   */\n  function baseSortBy(array, comparer) {\n    var length = array.length;\n\n    array.sort(comparer);\n    while (length--) {\n      array[length] = array[length].value;\n    }\n    return array;\n  }\n\n  /**\n   * The base implementation of `_.sum` and `_.sumBy` without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} array The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {number} Returns the sum.\n   */\n  function baseSum(array, iteratee) {\n    var result,\n        index = -1,\n        length = array.length;\n\n    while (++index < length) {\n      var current = iteratee(array[index]);\n      if (current !== undefined) {\n        result = result === undefined ? current : (result + current);\n      }\n    }\n    return result;\n  }\n\n  /**\n   * The base implementation of `_.times` without support for iteratee shorthands\n   * or max array length checks.\n   *\n   * @private\n   * @param {number} n The number of times to invoke `iteratee`.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns the array of results.\n   */\n  function baseTimes(n, iteratee) {\n    var index = -1,\n        result = Array(n);\n\n    while (++index < n) {\n      result[index] = iteratee(index);\n    }\n    return result;\n  }\n\n  /**\n   * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array\n   * of key-value pairs for `object` corresponding to the property names of `props`.\n   *\n   * @private\n   * @param {Object} object The object to query.\n   * @param {Array} props The property names to get values for.\n   * @returns {Object} Returns the key-value pairs.\n   */\n  function baseToPairs(object, props) {\n    return arrayMap(props, function(key) {\n      return [key, object[key]];\n    });\n  }\n\n  /**\n   * The base implementation of `_.trim`.\n   *\n   * @private\n   * @param {string} string The string to trim.\n   * @returns {string} Returns the trimmed string.\n   */\n  function baseTrim(string) {\n    return string\n      ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n      : string;\n  }\n\n  /**\n   * The base implementation of `_.unary` without support for storing metadata.\n   *\n   * @private\n   * @param {Function} func The function to cap arguments for.\n   * @returns {Function} Returns the new capped function.\n   */\n  function baseUnary(func) {\n    return function(value) {\n      return func(value);\n    };\n  }\n\n  /**\n   * The base implementation of `_.values` and `_.valuesIn` which creates an\n   * array of `object` property values corresponding to the property names\n   * of `props`.\n   *\n   * @private\n   * @param {Object} object The object to query.\n   * @param {Array} props The property names to get values for.\n   * @returns {Object} Returns the array of property values.\n   */\n  function baseValues(object, props) {\n    return arrayMap(props, function(key) {\n      return object[key];\n    });\n  }\n\n  /**\n   * Checks if a `cache` value for `key` exists.\n   *\n   * @private\n   * @param {Object} cache The cache to query.\n   * @param {string} key The key of the entry to check.\n   * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n   */\n  function cacheHas(cache, key) {\n    return cache.has(key);\n  }\n\n  /**\n   * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol\n   * that is not found in the character symbols.\n   *\n   * @private\n   * @param {Array} strSymbols The string symbols to inspect.\n   * @param {Array} chrSymbols The character symbols to find.\n   * @returns {number} Returns the index of the first unmatched string symbol.\n   */\n  function charsStartIndex(strSymbols, chrSymbols) {\n    var index = -1,\n        length = strSymbols.length;\n\n    while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n    return index;\n  }\n\n  /**\n   * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol\n   * that is not found in the character symbols.\n   *\n   * @private\n   * @param {Array} strSymbols The string symbols to inspect.\n   * @param {Array} chrSymbols The character symbols to find.\n   * @returns {number} Returns the index of the last unmatched string symbol.\n   */\n  function charsEndIndex(strSymbols, chrSymbols) {\n    var index = strSymbols.length;\n\n    while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n    return index;\n  }\n\n  /**\n   * Gets the number of `placeholder` occurrences in `array`.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} placeholder The placeholder to search for.\n   * @returns {number} Returns the placeholder count.\n   */\n  function countHolders(array, placeholder) {\n    var length = array.length,\n        result = 0;\n\n    while (length--) {\n      if (array[length] === placeholder) {\n        ++result;\n      }\n    }\n    return result;\n  }\n\n  /**\n   * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n   * letters to basic Latin letters.\n   *\n   * @private\n   * @param {string} letter The matched letter to deburr.\n   * @returns {string} Returns the deburred letter.\n   */\n  var deburrLetter = basePropertyOf(deburredLetters);\n\n  /**\n   * Used by `_.escape` to convert characters to HTML entities.\n   *\n   * @private\n   * @param {string} chr The matched character to escape.\n   * @returns {string} Returns the escaped character.\n   */\n  var escapeHtmlChar = basePropertyOf(htmlEscapes);\n\n  /**\n   * Used by `_.template` to escape characters for inclusion in compiled string literals.\n   *\n   * @private\n   * @param {string} chr The matched character to escape.\n   * @returns {string} Returns the escaped character.\n   */\n  function escapeStringChar(chr) {\n    return '\\\\' + stringEscapes[chr];\n  }\n\n  /**\n   * Gets the value at `key` of `object`.\n   *\n   * @private\n   * @param {Object} [object] The object to query.\n   * @param {string} key The key of the property to get.\n   * @returns {*} Returns the property value.\n   */\n  function getValue(object, key) {\n    return object == null ? undefined : object[key];\n  }\n\n  /**\n   * Checks if `string` contains Unicode symbols.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n   */\n  function hasUnicode(string) {\n    return reHasUnicode.test(string);\n  }\n\n  /**\n   * Checks if `string` contains a word composed of Unicode symbols.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {boolean} Returns `true` if a word is found, else `false`.\n   */\n  function hasUnicodeWord(string) {\n    return reHasUnicodeWord.test(string);\n  }\n\n  /**\n   * Converts `iterator` to an array.\n   *\n   * @private\n   * @param {Object} iterator The iterator to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function iteratorToArray(iterator) {\n    var data,\n        result = [];\n\n    while (!(data = iterator.next()).done) {\n      result.push(data.value);\n    }\n    return result;\n  }\n\n  /**\n   * Converts `map` to its key-value pairs.\n   *\n   * @private\n   * @param {Object} map The map to convert.\n   * @returns {Array} Returns the key-value pairs.\n   */\n  function mapToArray(map) {\n    var index = -1,\n        result = Array(map.size);\n\n    map.forEach(function(value, key) {\n      result[++index] = [key, value];\n    });\n    return result;\n  }\n\n  /**\n   * Creates a unary function that invokes `func` with its argument transformed.\n   *\n   * @private\n   * @param {Function} func The function to wrap.\n   * @param {Function} transform The argument transform.\n   * @returns {Function} Returns the new function.\n   */\n  function overArg(func, transform) {\n    return function(arg) {\n      return func(transform(arg));\n    };\n  }\n\n  /**\n   * Replaces all `placeholder` elements in `array` with an internal placeholder\n   * and returns an array of their indexes.\n   *\n   * @private\n   * @param {Array} array The array to modify.\n   * @param {*} placeholder The placeholder to replace.\n   * @returns {Array} Returns the new array of placeholder indexes.\n   */\n  function replaceHolders(array, placeholder) {\n    var index = -1,\n        length = array.length,\n        resIndex = 0,\n        result = [];\n\n    while (++index < length) {\n      var value = array[index];\n      if (value === placeholder || value === PLACEHOLDER) {\n        array[index] = PLACEHOLDER;\n        result[resIndex++] = index;\n      }\n    }\n    return result;\n  }\n\n  /**\n   * Converts `set` to an array of its values.\n   *\n   * @private\n   * @param {Object} set The set to convert.\n   * @returns {Array} Returns the values.\n   */\n  function setToArray(set) {\n    var index = -1,\n        result = Array(set.size);\n\n    set.forEach(function(value) {\n      result[++index] = value;\n    });\n    return result;\n  }\n\n  /**\n   * Converts `set` to its value-value pairs.\n   *\n   * @private\n   * @param {Object} set The set to convert.\n   * @returns {Array} Returns the value-value pairs.\n   */\n  function setToPairs(set) {\n    var index = -1,\n        result = Array(set.size);\n\n    set.forEach(function(value) {\n      result[++index] = [value, value];\n    });\n    return result;\n  }\n\n  /**\n   * A specialized version of `_.indexOf` which performs strict equality\n   * comparisons of values, i.e. `===`.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function strictIndexOf(array, value, fromIndex) {\n    var index = fromIndex - 1,\n        length = array.length;\n\n    while (++index < length) {\n      if (array[index] === value) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  /**\n   * A specialized version of `_.lastIndexOf` which performs strict equality\n   * comparisons of values, i.e. `===`.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function strictLastIndexOf(array, value, fromIndex) {\n    var index = fromIndex + 1;\n    while (index--) {\n      if (array[index] === value) {\n        return index;\n      }\n    }\n    return index;\n  }\n\n  /**\n   * Gets the number of symbols in `string`.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {number} Returns the string size.\n   */\n  function stringSize(string) {\n    return hasUnicode(string)\n      ? unicodeSize(string)\n      : asciiSize(string);\n  }\n\n  /**\n   * Converts `string` to an array.\n   *\n   * @private\n   * @param {string} string The string to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function stringToArray(string) {\n    return hasUnicode(string)\n      ? unicodeToArray(string)\n      : asciiToArray(string);\n  }\n\n  /**\n   * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n   * character of `string`.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {number} Returns the index of the last non-whitespace character.\n   */\n  function trimmedEndIndex(string) {\n    var index = string.length;\n\n    while (index-- && reWhitespace.test(string.charAt(index))) {}\n    return index;\n  }\n\n  /**\n   * Used by `_.unescape` to convert HTML entities to characters.\n   *\n   * @private\n   * @param {string} chr The matched character to unescape.\n   * @returns {string} Returns the unescaped character.\n   */\n  var unescapeHtmlChar = basePropertyOf(htmlUnescapes);\n\n  /**\n   * Gets the size of a Unicode `string`.\n   *\n   * @private\n   * @param {string} string The string inspect.\n   * @returns {number} Returns the string size.\n   */\n  function unicodeSize(string) {\n    var result = reUnicode.lastIndex = 0;\n    while (reUnicode.test(string)) {\n      ++result;\n    }\n    return result;\n  }\n\n  /**\n   * Converts a Unicode `string` to an array.\n   *\n   * @private\n   * @param {string} string The string to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function unicodeToArray(string) {\n    return string.match(reUnicode) || [];\n  }\n\n  /**\n   * Splits a Unicode `string` into an array of its words.\n   *\n   * @private\n   * @param {string} The string to inspect.\n   * @returns {Array} Returns the words of `string`.\n   */\n  function unicodeWords(string) {\n    return string.match(reUnicodeWord) || [];\n  }\n\n  /*--------------------------------------------------------------------------*/\n\n  /**\n   * Create a new pristine `lodash` function using the `context` object.\n   *\n   * @static\n   * @memberOf _\n   * @since 1.1.0\n   * @category Util\n   * @param {Object} [context=root] The context object.\n   * @returns {Function} Returns a new `lodash` function.\n   * @example\n   *\n   * _.mixin({ 'foo': _.constant('foo') });\n   *\n   * var lodash = _.runInContext();\n   * lodash.mixin({ 'bar': lodash.constant('bar') });\n   *\n   * _.isFunction(_.foo);\n   * // => true\n   * _.isFunction(_.bar);\n   * // => false\n   *\n   * lodash.isFunction(lodash.foo);\n   * // => false\n   * lodash.isFunction(lodash.bar);\n   * // => true\n   *\n   * // Create a suped-up `defer` in Node.js.\n   * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;\n   */\n  var runInContext = (function runInContext(context) {\n    context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps));\n\n    /** Built-in constructor references. */\n    var Array = context.Array,\n        Date = context.Date,\n        Error = context.Error,\n        Function = context.Function,\n        Math = context.Math,\n        Object = context.Object,\n        RegExp = context.RegExp,\n        String = context.String,\n        TypeError = context.TypeError;\n\n    /** Used for built-in method references. */\n    var arrayProto = Array.prototype,\n        funcProto = Function.prototype,\n        objectProto = Object.prototype;\n\n    /** Used to detect overreaching core-js shims. */\n    var coreJsData = context['__core-js_shared__'];\n\n    /** Used to resolve the decompiled source of functions. */\n    var funcToString = funcProto.toString;\n\n    /** Used to check objects for own properties. */\n    var hasOwnProperty = objectProto.hasOwnProperty;\n\n    /** Used to generate unique IDs. */\n    var idCounter = 0;\n\n    /** Used to detect methods masquerading as native. */\n    var maskSrcKey = (function() {\n      var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n      return uid ? ('Symbol(src)_1.' + uid) : '';\n    }());\n\n    /**\n     * Used to resolve the\n     * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n     * of values.\n     */\n    var nativeObjectToString = objectProto.toString;\n\n    /** Used to infer the `Object` constructor. */\n    var objectCtorString = funcToString.call(Object);\n\n    /** Used to restore the original `_` reference in `_.noConflict`. */\n    var oldDash = root._;\n\n    /** Used to detect if a method is native. */\n    var reIsNative = RegExp('^' +\n      funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n      .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n    );\n\n    /** Built-in value references. */\n    var Buffer = moduleExports ? context.Buffer : undefined,\n        Symbol = context.Symbol,\n        Uint8Array = context.Uint8Array,\n        allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,\n        getPrototype = overArg(Object.getPrototypeOf, Object),\n        objectCreate = Object.create,\n        propertyIsEnumerable = objectProto.propertyIsEnumerable,\n        splice = arrayProto.splice,\n        spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,\n        symIterator = Symbol ? Symbol.iterator : undefined,\n        symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n    var defineProperty = (function() {\n      try {\n        var func = getNative(Object, 'defineProperty');\n        func({}, '', {});\n        return func;\n      } catch (e) {}\n    }());\n\n    /** Mocked built-ins. */\n    var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,\n        ctxNow = Date && Date.now !== root.Date.now && Date.now,\n        ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;\n\n    /* Built-in method references for those with the same name as other `lodash` methods. */\n    var nativeCeil = Math.ceil,\n        nativeFloor = Math.floor,\n        nativeGetSymbols = Object.getOwnPropertySymbols,\n        nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n        nativeIsFinite = context.isFinite,\n        nativeJoin = arrayProto.join,\n        nativeKeys = overArg(Object.keys, Object),\n        nativeMax = Math.max,\n        nativeMin = Math.min,\n        nativeNow = Date.now,\n        nativeParseInt = context.parseInt,\n        nativeRandom = Math.random,\n        nativeReverse = arrayProto.reverse;\n\n    /* Built-in method references that are verified to be native. */\n    var DataView = getNative(context, 'DataView'),\n        Map = getNative(context, 'Map'),\n        Promise = getNative(context, 'Promise'),\n        Set = getNative(context, 'Set'),\n        WeakMap = getNative(context, 'WeakMap'),\n        nativeCreate = getNative(Object, 'create');\n\n    /** Used to store function metadata. */\n    var metaMap = WeakMap && new WeakMap;\n\n    /** Used to lookup unminified function names. */\n    var realNames = {};\n\n    /** Used to detect maps, sets, and weakmaps. */\n    var dataViewCtorString = toSource(DataView),\n        mapCtorString = toSource(Map),\n        promiseCtorString = toSource(Promise),\n        setCtorString = toSource(Set),\n        weakMapCtorString = toSource(WeakMap);\n\n    /** Used to convert symbols to primitives and strings. */\n    var symbolProto = Symbol ? Symbol.prototype : undefined,\n        symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,\n        symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a `lodash` object which wraps `value` to enable implicit method\n     * chain sequences. Methods that operate on and return arrays, collections,\n     * and functions can be chained together. Methods that retrieve a single value\n     * or may return a primitive value will automatically end the chain sequence\n     * and return the unwrapped value. Otherwise, the value must be unwrapped\n     * with `_#value`.\n     *\n     * Explicit chain sequences, which must be unwrapped with `_#value`, may be\n     * enabled using `_.chain`.\n     *\n     * The execution of chained methods is lazy, that is, it's deferred until\n     * `_#value` is implicitly or explicitly called.\n     *\n     * Lazy evaluation allows several methods to support shortcut fusion.\n     * Shortcut fusion is an optimization to merge iteratee calls; this avoids\n     * the creation of intermediate arrays and can greatly reduce the number of\n     * iteratee executions. Sections of a chain sequence qualify for shortcut\n     * fusion if the section is applied to an array and iteratees accept only\n     * one argument. The heuristic for whether a section qualifies for shortcut\n     * fusion is subject to change.\n     *\n     * Chaining is supported in custom builds as long as the `_#value` method is\n     * directly or indirectly included in the build.\n     *\n     * In addition to lodash methods, wrappers have `Array` and `String` methods.\n     *\n     * The wrapper `Array` methods are:\n     * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`\n     *\n     * The wrapper `String` methods are:\n     * `replace` and `split`\n     *\n     * The wrapper methods that support shortcut fusion are:\n     * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,\n     * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,\n     * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`\n     *\n     * The chainable wrapper methods are:\n     * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,\n     * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,\n     * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,\n     * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,\n     * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,\n     * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,\n     * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,\n     * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,\n     * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,\n     * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,\n     * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,\n     * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,\n     * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,\n     * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,\n     * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,\n     * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,\n     * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,\n     * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,\n     * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,\n     * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,\n     * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,\n     * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,\n     * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,\n     * `zipObject`, `zipObjectDeep`, and `zipWith`\n     *\n     * The wrapper methods that are **not** chainable by default are:\n     * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,\n     * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,\n     * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,\n     * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,\n     * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,\n     * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,\n     * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,\n     * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,\n     * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,\n     * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,\n     * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,\n     * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,\n     * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,\n     * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,\n     * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,\n     * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,\n     * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,\n     * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,\n     * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,\n     * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,\n     * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,\n     * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,\n     * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,\n     * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,\n     * `upperFirst`, `value`, and `words`\n     *\n     * @name _\n     * @constructor\n     * @category Seq\n     * @param {*} value The value to wrap in a `lodash` instance.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var wrapped = _([1, 2, 3]);\n     *\n     * // Returns an unwrapped value.\n     * wrapped.reduce(_.add);\n     * // => 6\n     *\n     * // Returns a wrapped value.\n     * var squares = wrapped.map(square);\n     *\n     * _.isArray(squares);\n     * // => false\n     *\n     * _.isArray(squares.value());\n     * // => true\n     */\n    function lodash(value) {\n      if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {\n        if (value instanceof LodashWrapper) {\n          return value;\n        }\n        if (hasOwnProperty.call(value, '__wrapped__')) {\n          return wrapperClone(value);\n        }\n      }\n      return new LodashWrapper(value);\n    }\n\n    /**\n     * The base implementation of `_.create` without support for assigning\n     * properties to the created object.\n     *\n     * @private\n     * @param {Object} proto The object to inherit from.\n     * @returns {Object} Returns the new object.\n     */\n    var baseCreate = (function() {\n      function object() {}\n      return function(proto) {\n        if (!isObject(proto)) {\n          return {};\n        }\n        if (objectCreate) {\n          return objectCreate(proto);\n        }\n        object.prototype = proto;\n        var result = new object;\n        object.prototype = undefined;\n        return result;\n      };\n    }());\n\n    /**\n     * The function whose prototype chain sequence wrappers inherit from.\n     *\n     * @private\n     */\n    function baseLodash() {\n      // No operation performed.\n    }\n\n    /**\n     * The base constructor for creating `lodash` wrapper objects.\n     *\n     * @private\n     * @param {*} value The value to wrap.\n     * @param {boolean} [chainAll] Enable explicit method chain sequences.\n     */\n    function LodashWrapper(value, chainAll) {\n      this.__wrapped__ = value;\n      this.__actions__ = [];\n      this.__chain__ = !!chainAll;\n      this.__index__ = 0;\n      this.__values__ = undefined;\n    }\n\n    /**\n     * By default, the template delimiters used by lodash are like those in\n     * embedded Ruby (ERB) as well as ES2015 template strings. Change the\n     * following template settings to use alternative delimiters.\n     *\n     * @static\n     * @memberOf _\n     * @type {Object}\n     */\n    lodash.templateSettings = {\n\n      /**\n       * Used to detect `data` property values to be HTML-escaped.\n       *\n       * @memberOf _.templateSettings\n       * @type {RegExp}\n       */\n      'escape': reEscape,\n\n      /**\n       * Used to detect code to be evaluated.\n       *\n       * @memberOf _.templateSettings\n       * @type {RegExp}\n       */\n      'evaluate': reEvaluate,\n\n      /**\n       * Used to detect `data` property values to inject.\n       *\n       * @memberOf _.templateSettings\n       * @type {RegExp}\n       */\n      'interpolate': reInterpolate,\n\n      /**\n       * Used to reference the data object in the template text.\n       *\n       * @memberOf _.templateSettings\n       * @type {string}\n       */\n      'variable': '',\n\n      /**\n       * Used to import variables into the compiled template.\n       *\n       * @memberOf _.templateSettings\n       * @type {Object}\n       */\n      'imports': {\n\n        /**\n         * A reference to the `lodash` function.\n         *\n         * @memberOf _.templateSettings.imports\n         * @type {Function}\n         */\n        '_': lodash\n      }\n    };\n\n    // Ensure wrappers are instances of `baseLodash`.\n    lodash.prototype = baseLodash.prototype;\n    lodash.prototype.constructor = lodash;\n\n    LodashWrapper.prototype = baseCreate(baseLodash.prototype);\n    LodashWrapper.prototype.constructor = LodashWrapper;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.\n     *\n     * @private\n     * @constructor\n     * @param {*} value The value to wrap.\n     */\n    function LazyWrapper(value) {\n      this.__wrapped__ = value;\n      this.__actions__ = [];\n      this.__dir__ = 1;\n      this.__filtered__ = false;\n      this.__iteratees__ = [];\n      this.__takeCount__ = MAX_ARRAY_LENGTH;\n      this.__views__ = [];\n    }\n\n    /**\n     * Creates a clone of the lazy wrapper object.\n     *\n     * @private\n     * @name clone\n     * @memberOf LazyWrapper\n     * @returns {Object} Returns the cloned `LazyWrapper` object.\n     */\n    function lazyClone() {\n      var result = new LazyWrapper(this.__wrapped__);\n      result.__actions__ = copyArray(this.__actions__);\n      result.__dir__ = this.__dir__;\n      result.__filtered__ = this.__filtered__;\n      result.__iteratees__ = copyArray(this.__iteratees__);\n      result.__takeCount__ = this.__takeCount__;\n      result.__views__ = copyArray(this.__views__);\n      return result;\n    }\n\n    /**\n     * Reverses the direction of lazy iteration.\n     *\n     * @private\n     * @name reverse\n     * @memberOf LazyWrapper\n     * @returns {Object} Returns the new reversed `LazyWrapper` object.\n     */\n    function lazyReverse() {\n      if (this.__filtered__) {\n        var result = new LazyWrapper(this);\n        result.__dir__ = -1;\n        result.__filtered__ = true;\n      } else {\n        result = this.clone();\n        result.__dir__ *= -1;\n      }\n      return result;\n    }\n\n    /**\n     * Extracts the unwrapped value from its lazy wrapper.\n     *\n     * @private\n     * @name value\n     * @memberOf LazyWrapper\n     * @returns {*} Returns the unwrapped value.\n     */\n    function lazyValue() {\n      var array = this.__wrapped__.value(),\n          dir = this.__dir__,\n          isArr = isArray(array),\n          isRight = dir < 0,\n          arrLength = isArr ? array.length : 0,\n          view = getView(0, arrLength, this.__views__),\n          start = view.start,\n          end = view.end,\n          length = end - start,\n          index = isRight ? end : (start - 1),\n          iteratees = this.__iteratees__,\n          iterLength = iteratees.length,\n          resIndex = 0,\n          takeCount = nativeMin(length, this.__takeCount__);\n\n      if (!isArr || (!isRight && arrLength == length && takeCount == length)) {\n        return baseWrapperValue(array, this.__actions__);\n      }\n      var result = [];\n\n      outer:\n      while (length-- && resIndex < takeCount) {\n        index += dir;\n\n        var iterIndex = -1,\n            value = array[index];\n\n        while (++iterIndex < iterLength) {\n          var data = iteratees[iterIndex],\n              iteratee = data.iteratee,\n              type = data.type,\n              computed = iteratee(value);\n\n          if (type == LAZY_MAP_FLAG) {\n            value = computed;\n          } else if (!computed) {\n            if (type == LAZY_FILTER_FLAG) {\n              continue outer;\n            } else {\n              break outer;\n            }\n          }\n        }\n        result[resIndex++] = value;\n      }\n      return result;\n    }\n\n    // Ensure `LazyWrapper` is an instance of `baseLodash`.\n    LazyWrapper.prototype = baseCreate(baseLodash.prototype);\n    LazyWrapper.prototype.constructor = LazyWrapper;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a hash object.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function Hash(entries) {\n      var index = -1,\n          length = entries == null ? 0 : entries.length;\n\n      this.clear();\n      while (++index < length) {\n        var entry = entries[index];\n        this.set(entry[0], entry[1]);\n      }\n    }\n\n    /**\n     * Removes all key-value entries from the hash.\n     *\n     * @private\n     * @name clear\n     * @memberOf Hash\n     */\n    function hashClear() {\n      this.__data__ = nativeCreate ? nativeCreate(null) : {};\n      this.size = 0;\n    }\n\n    /**\n     * Removes `key` and its value from the hash.\n     *\n     * @private\n     * @name delete\n     * @memberOf Hash\n     * @param {Object} hash The hash to modify.\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function hashDelete(key) {\n      var result = this.has(key) && delete this.__data__[key];\n      this.size -= result ? 1 : 0;\n      return result;\n    }\n\n    /**\n     * Gets the hash value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf Hash\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function hashGet(key) {\n      var data = this.__data__;\n      if (nativeCreate) {\n        var result = data[key];\n        return result === HASH_UNDEFINED ? undefined : result;\n      }\n      return hasOwnProperty.call(data, key) ? data[key] : undefined;\n    }\n\n    /**\n     * Checks if a hash value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf Hash\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function hashHas(key) {\n      var data = this.__data__;\n      return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n    }\n\n    /**\n     * Sets the hash `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf Hash\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the hash instance.\n     */\n    function hashSet(key, value) {\n      var data = this.__data__;\n      this.size += this.has(key) ? 0 : 1;\n      data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n      return this;\n    }\n\n    // Add methods to `Hash`.\n    Hash.prototype.clear = hashClear;\n    Hash.prototype['delete'] = hashDelete;\n    Hash.prototype.get = hashGet;\n    Hash.prototype.has = hashHas;\n    Hash.prototype.set = hashSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an list cache object.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function ListCache(entries) {\n      var index = -1,\n          length = entries == null ? 0 : entries.length;\n\n      this.clear();\n      while (++index < length) {\n        var entry = entries[index];\n        this.set(entry[0], entry[1]);\n      }\n    }\n\n    /**\n     * Removes all key-value entries from the list cache.\n     *\n     * @private\n     * @name clear\n     * @memberOf ListCache\n     */\n    function listCacheClear() {\n      this.__data__ = [];\n      this.size = 0;\n    }\n\n    /**\n     * Removes `key` and its value from the list cache.\n     *\n     * @private\n     * @name delete\n     * @memberOf ListCache\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function listCacheDelete(key) {\n      var data = this.__data__,\n          index = assocIndexOf(data, key);\n\n      if (index < 0) {\n        return false;\n      }\n      var lastIndex = data.length - 1;\n      if (index == lastIndex) {\n        data.pop();\n      } else {\n        splice.call(data, index, 1);\n      }\n      --this.size;\n      return true;\n    }\n\n    /**\n     * Gets the list cache value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf ListCache\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function listCacheGet(key) {\n      var data = this.__data__,\n          index = assocIndexOf(data, key);\n\n      return index < 0 ? undefined : data[index][1];\n    }\n\n    /**\n     * Checks if a list cache value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf ListCache\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function listCacheHas(key) {\n      return assocIndexOf(this.__data__, key) > -1;\n    }\n\n    /**\n     * Sets the list cache `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf ListCache\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the list cache instance.\n     */\n    function listCacheSet(key, value) {\n      var data = this.__data__,\n          index = assocIndexOf(data, key);\n\n      if (index < 0) {\n        ++this.size;\n        data.push([key, value]);\n      } else {\n        data[index][1] = value;\n      }\n      return this;\n    }\n\n    // Add methods to `ListCache`.\n    ListCache.prototype.clear = listCacheClear;\n    ListCache.prototype['delete'] = listCacheDelete;\n    ListCache.prototype.get = listCacheGet;\n    ListCache.prototype.has = listCacheHas;\n    ListCache.prototype.set = listCacheSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a map cache object to store key-value pairs.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function MapCache(entries) {\n      var index = -1,\n          length = entries == null ? 0 : entries.length;\n\n      this.clear();\n      while (++index < length) {\n        var entry = entries[index];\n        this.set(entry[0], entry[1]);\n      }\n    }\n\n    /**\n     * Removes all key-value entries from the map.\n     *\n     * @private\n     * @name clear\n     * @memberOf MapCache\n     */\n    function mapCacheClear() {\n      this.size = 0;\n      this.__data__ = {\n        'hash': new Hash,\n        'map': new (Map || ListCache),\n        'string': new Hash\n      };\n    }\n\n    /**\n     * Removes `key` and its value from the map.\n     *\n     * @private\n     * @name delete\n     * @memberOf MapCache\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function mapCacheDelete(key) {\n      var result = getMapData(this, key)['delete'](key);\n      this.size -= result ? 1 : 0;\n      return result;\n    }\n\n    /**\n     * Gets the map value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf MapCache\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function mapCacheGet(key) {\n      return getMapData(this, key).get(key);\n    }\n\n    /**\n     * Checks if a map value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf MapCache\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function mapCacheHas(key) {\n      return getMapData(this, key).has(key);\n    }\n\n    /**\n     * Sets the map `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf MapCache\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the map cache instance.\n     */\n    function mapCacheSet(key, value) {\n      var data = getMapData(this, key),\n          size = data.size;\n\n      data.set(key, value);\n      this.size += data.size == size ? 0 : 1;\n      return this;\n    }\n\n    // Add methods to `MapCache`.\n    MapCache.prototype.clear = mapCacheClear;\n    MapCache.prototype['delete'] = mapCacheDelete;\n    MapCache.prototype.get = mapCacheGet;\n    MapCache.prototype.has = mapCacheHas;\n    MapCache.prototype.set = mapCacheSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     *\n     * Creates an array cache object to store unique values.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [values] The values to cache.\n     */\n    function SetCache(values) {\n      var index = -1,\n          length = values == null ? 0 : values.length;\n\n      this.__data__ = new MapCache;\n      while (++index < length) {\n        this.add(values[index]);\n      }\n    }\n\n    /**\n     * Adds `value` to the array cache.\n     *\n     * @private\n     * @name add\n     * @memberOf SetCache\n     * @alias push\n     * @param {*} value The value to cache.\n     * @returns {Object} Returns the cache instance.\n     */\n    function setCacheAdd(value) {\n      this.__data__.set(value, HASH_UNDEFINED);\n      return this;\n    }\n\n    /**\n     * Checks if `value` is in the array cache.\n     *\n     * @private\n     * @name has\n     * @memberOf SetCache\n     * @param {*} value The value to search for.\n     * @returns {number} Returns `true` if `value` is found, else `false`.\n     */\n    function setCacheHas(value) {\n      return this.__data__.has(value);\n    }\n\n    // Add methods to `SetCache`.\n    SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\n    SetCache.prototype.has = setCacheHas;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a stack cache object to store key-value pairs.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function Stack(entries) {\n      var data = this.__data__ = new ListCache(entries);\n      this.size = data.size;\n    }\n\n    /**\n     * Removes all key-value entries from the stack.\n     *\n     * @private\n     * @name clear\n     * @memberOf Stack\n     */\n    function stackClear() {\n      this.__data__ = new ListCache;\n      this.size = 0;\n    }\n\n    /**\n     * Removes `key` and its value from the stack.\n     *\n     * @private\n     * @name delete\n     * @memberOf Stack\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function stackDelete(key) {\n      var data = this.__data__,\n          result = data['delete'](key);\n\n      this.size = data.size;\n      return result;\n    }\n\n    /**\n     * Gets the stack value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf Stack\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function stackGet(key) {\n      return this.__data__.get(key);\n    }\n\n    /**\n     * Checks if a stack value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf Stack\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function stackHas(key) {\n      return this.__data__.has(key);\n    }\n\n    /**\n     * Sets the stack `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf Stack\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the stack cache instance.\n     */\n    function stackSet(key, value) {\n      var data = this.__data__;\n      if (data instanceof ListCache) {\n        var pairs = data.__data__;\n        if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n          pairs.push([key, value]);\n          this.size = ++data.size;\n          return this;\n        }\n        data = this.__data__ = new MapCache(pairs);\n      }\n      data.set(key, value);\n      this.size = data.size;\n      return this;\n    }\n\n    // Add methods to `Stack`.\n    Stack.prototype.clear = stackClear;\n    Stack.prototype['delete'] = stackDelete;\n    Stack.prototype.get = stackGet;\n    Stack.prototype.has = stackHas;\n    Stack.prototype.set = stackSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an array of the enumerable property names of the array-like `value`.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @param {boolean} inherited Specify returning inherited property names.\n     * @returns {Array} Returns the array of property names.\n     */\n    function arrayLikeKeys(value, inherited) {\n      var isArr = isArray(value),\n          isArg = !isArr && isArguments(value),\n          isBuff = !isArr && !isArg && isBuffer(value),\n          isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n          skipIndexes = isArr || isArg || isBuff || isType,\n          result = skipIndexes ? baseTimes(value.length, String) : [],\n          length = result.length;\n\n      for (var key in value) {\n        if ((inherited || hasOwnProperty.call(value, key)) &&\n            !(skipIndexes && (\n               // Safari 9 has enumerable `arguments.length` in strict mode.\n               key == 'length' ||\n               // Node.js 0.10 has enumerable non-index properties on buffers.\n               (isBuff && (key == 'offset' || key == 'parent')) ||\n               // PhantomJS 2 has enumerable non-index properties on typed arrays.\n               (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n               // Skip index properties.\n               isIndex(key, length)\n            ))) {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * A specialized version of `_.sample` for arrays.\n     *\n     * @private\n     * @param {Array} array The array to sample.\n     * @returns {*} Returns the random element.\n     */\n    function arraySample(array) {\n      var length = array.length;\n      return length ? array[baseRandom(0, length - 1)] : undefined;\n    }\n\n    /**\n     * A specialized version of `_.sampleSize` for arrays.\n     *\n     * @private\n     * @param {Array} array The array to sample.\n     * @param {number} n The number of elements to sample.\n     * @returns {Array} Returns the random elements.\n     */\n    function arraySampleSize(array, n) {\n      return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));\n    }\n\n    /**\n     * A specialized version of `_.shuffle` for arrays.\n     *\n     * @private\n     * @param {Array} array The array to shuffle.\n     * @returns {Array} Returns the new shuffled array.\n     */\n    function arrayShuffle(array) {\n      return shuffleSelf(copyArray(array));\n    }\n\n    /**\n     * This function is like `assignValue` except that it doesn't assign\n     * `undefined` values.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {string} key The key of the property to assign.\n     * @param {*} value The value to assign.\n     */\n    function assignMergeValue(object, key, value) {\n      if ((value !== undefined && !eq(object[key], value)) ||\n          (value === undefined && !(key in object))) {\n        baseAssignValue(object, key, value);\n      }\n    }\n\n    /**\n     * Assigns `value` to `key` of `object` if the existing value is not equivalent\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {string} key The key of the property to assign.\n     * @param {*} value The value to assign.\n     */\n    function assignValue(object, key, value) {\n      var objValue = object[key];\n      if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n          (value === undefined && !(key in object))) {\n        baseAssignValue(object, key, value);\n      }\n    }\n\n    /**\n     * Gets the index at which the `key` is found in `array` of key-value pairs.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {*} key The key to search for.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     */\n    function assocIndexOf(array, key) {\n      var length = array.length;\n      while (length--) {\n        if (eq(array[length][0], key)) {\n          return length;\n        }\n      }\n      return -1;\n    }\n\n    /**\n     * Aggregates elements of `collection` on `accumulator` with keys transformed\n     * by `iteratee` and values set by `setter`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} setter The function to set `accumulator` values.\n     * @param {Function} iteratee The iteratee to transform keys.\n     * @param {Object} accumulator The initial aggregated object.\n     * @returns {Function} Returns `accumulator`.\n     */\n    function baseAggregator(collection, setter, iteratee, accumulator) {\n      baseEach(collection, function(value, key, collection) {\n        setter(accumulator, value, iteratee(value), collection);\n      });\n      return accumulator;\n    }\n\n    /**\n     * The base implementation of `_.assign` without support for multiple sources\n     * or `customizer` functions.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @returns {Object} Returns `object`.\n     */\n    function baseAssign(object, source) {\n      return object && copyObject(source, keys(source), object);\n    }\n\n    /**\n     * The base implementation of `_.assignIn` without support for multiple sources\n     * or `customizer` functions.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @returns {Object} Returns `object`.\n     */\n    function baseAssignIn(object, source) {\n      return object && copyObject(source, keysIn(source), object);\n    }\n\n    /**\n     * The base implementation of `assignValue` and `assignMergeValue` without\n     * value checks.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {string} key The key of the property to assign.\n     * @param {*} value The value to assign.\n     */\n    function baseAssignValue(object, key, value) {\n      if (key == '__proto__' && defineProperty) {\n        defineProperty(object, key, {\n          'configurable': true,\n          'enumerable': true,\n          'value': value,\n          'writable': true\n        });\n      } else {\n        object[key] = value;\n      }\n    }\n\n    /**\n     * The base implementation of `_.at` without support for individual paths.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {string[]} paths The property paths to pick.\n     * @returns {Array} Returns the picked elements.\n     */\n    function baseAt(object, paths) {\n      var index = -1,\n          length = paths.length,\n          result = Array(length),\n          skip = object == null;\n\n      while (++index < length) {\n        result[index] = skip ? undefined : get(object, paths[index]);\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.clamp` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {number} number The number to clamp.\n     * @param {number} [lower] The lower bound.\n     * @param {number} upper The upper bound.\n     * @returns {number} Returns the clamped number.\n     */\n    function baseClamp(number, lower, upper) {\n      if (number === number) {\n        if (upper !== undefined) {\n          number = number <= upper ? number : upper;\n        }\n        if (lower !== undefined) {\n          number = number >= lower ? number : lower;\n        }\n      }\n      return number;\n    }\n\n    /**\n     * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n     * traversed objects.\n     *\n     * @private\n     * @param {*} value The value to clone.\n     * @param {boolean} bitmask The bitmask flags.\n     *  1 - Deep clone\n     *  2 - Flatten inherited properties\n     *  4 - Clone symbols\n     * @param {Function} [customizer] The function to customize cloning.\n     * @param {string} [key] The key of `value`.\n     * @param {Object} [object] The parent object of `value`.\n     * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n     * @returns {*} Returns the cloned value.\n     */\n    function baseClone(value, bitmask, customizer, key, object, stack) {\n      var result,\n          isDeep = bitmask & CLONE_DEEP_FLAG,\n          isFlat = bitmask & CLONE_FLAT_FLAG,\n          isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n      if (customizer) {\n        result = object ? customizer(value, key, object, stack) : customizer(value);\n      }\n      if (result !== undefined) {\n        return result;\n      }\n      if (!isObject(value)) {\n        return value;\n      }\n      var isArr = isArray(value);\n      if (isArr) {\n        result = initCloneArray(value);\n        if (!isDeep) {\n          return copyArray(value, result);\n        }\n      } else {\n        var tag = getTag(value),\n            isFunc = tag == funcTag || tag == genTag;\n\n        if (isBuffer(value)) {\n          return cloneBuffer(value, isDeep);\n        }\n        if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n          result = (isFlat || isFunc) ? {} : initCloneObject(value);\n          if (!isDeep) {\n            return isFlat\n              ? copySymbolsIn(value, baseAssignIn(result, value))\n              : copySymbols(value, baseAssign(result, value));\n          }\n        } else {\n          if (!cloneableTags[tag]) {\n            return object ? value : {};\n          }\n          result = initCloneByTag(value, tag, isDeep);\n        }\n      }\n      // Check for circular references and return its corresponding clone.\n      stack || (stack = new Stack);\n      var stacked = stack.get(value);\n      if (stacked) {\n        return stacked;\n      }\n      stack.set(value, result);\n\n      if (isSet(value)) {\n        value.forEach(function(subValue) {\n          result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n        });\n      } else if (isMap(value)) {\n        value.forEach(function(subValue, key) {\n          result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n        });\n      }\n\n      var keysFunc = isFull\n        ? (isFlat ? getAllKeysIn : getAllKeys)\n        : (isFlat ? keysIn : keys);\n\n      var props = isArr ? undefined : keysFunc(value);\n      arrayEach(props || value, function(subValue, key) {\n        if (props) {\n          key = subValue;\n          subValue = value[key];\n        }\n        // Recursively populate clone (susceptible to call stack limits).\n        assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.conforms` which doesn't clone `source`.\n     *\n     * @private\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {Function} Returns the new spec function.\n     */\n    function baseConforms(source) {\n      var props = keys(source);\n      return function(object) {\n        return baseConformsTo(object, source, props);\n      };\n    }\n\n    /**\n     * The base implementation of `_.conformsTo` which accepts `props` to check.\n     *\n     * @private\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n     */\n    function baseConformsTo(object, source, props) {\n      var length = props.length;\n      if (object == null) {\n        return !length;\n      }\n      object = Object(object);\n      while (length--) {\n        var key = props[length],\n            predicate = source[key],\n            value = object[key];\n\n        if ((value === undefined && !(key in object)) || !predicate(value)) {\n          return false;\n        }\n      }\n      return true;\n    }\n\n    /**\n     * The base implementation of `_.delay` and `_.defer` which accepts `args`\n     * to provide to `func`.\n     *\n     * @private\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @param {Array} args The arguments to provide to `func`.\n     * @returns {number|Object} Returns the timer id or timeout object.\n     */\n    function baseDelay(func, wait, args) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      return setTimeout(function() { func.apply(undefined, args); }, wait);\n    }\n\n    /**\n     * The base implementation of methods like `_.difference` without support\n     * for excluding multiple arrays or iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {Array} values The values to exclude.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     */\n    function baseDifference(array, values, iteratee, comparator) {\n      var index = -1,\n          includes = arrayIncludes,\n          isCommon = true,\n          length = array.length,\n          result = [],\n          valuesLength = values.length;\n\n      if (!length) {\n        return result;\n      }\n      if (iteratee) {\n        values = arrayMap(values, baseUnary(iteratee));\n      }\n      if (comparator) {\n        includes = arrayIncludesWith;\n        isCommon = false;\n      }\n      else if (values.length >= LARGE_ARRAY_SIZE) {\n        includes = cacheHas;\n        isCommon = false;\n        values = new SetCache(values);\n      }\n      outer:\n      while (++index < length) {\n        var value = array[index],\n            computed = iteratee == null ? value : iteratee(value);\n\n        value = (comparator || value !== 0) ? value : 0;\n        if (isCommon && computed === computed) {\n          var valuesIndex = valuesLength;\n          while (valuesIndex--) {\n            if (values[valuesIndex] === computed) {\n              continue outer;\n            }\n          }\n          result.push(value);\n        }\n        else if (!includes(values, computed, comparator)) {\n          result.push(value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.forEach` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     */\n    var baseEach = createBaseEach(baseForOwn);\n\n    /**\n     * The base implementation of `_.forEachRight` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     */\n    var baseEachRight = createBaseEach(baseForOwnRight, true);\n\n    /**\n     * The base implementation of `_.every` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {boolean} Returns `true` if all elements pass the predicate check,\n     *  else `false`\n     */\n    function baseEvery(collection, predicate) {\n      var result = true;\n      baseEach(collection, function(value, index, collection) {\n        result = !!predicate(value, index, collection);\n        return result;\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of methods like `_.max` and `_.min` which accepts a\n     * `comparator` to determine the extremum value.\n     *\n     * @private\n     * @param {Array} array The array to iterate over.\n     * @param {Function} iteratee The iteratee invoked per iteration.\n     * @param {Function} comparator The comparator used to compare values.\n     * @returns {*} Returns the extremum value.\n     */\n    function baseExtremum(array, iteratee, comparator) {\n      var index = -1,\n          length = array.length;\n\n      while (++index < length) {\n        var value = array[index],\n            current = iteratee(value);\n\n        if (current != null && (computed === undefined\n              ? (current === current && !isSymbol(current))\n              : comparator(current, computed)\n            )) {\n          var computed = current,\n              result = value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.fill` without an iteratee call guard.\n     *\n     * @private\n     * @param {Array} array The array to fill.\n     * @param {*} value The value to fill `array` with.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns `array`.\n     */\n    function baseFill(array, value, start, end) {\n      var length = array.length;\n\n      start = toInteger(start);\n      if (start < 0) {\n        start = -start > length ? 0 : (length + start);\n      }\n      end = (end === undefined || end > length) ? length : toInteger(end);\n      if (end < 0) {\n        end += length;\n      }\n      end = start > end ? 0 : toLength(end);\n      while (start < end) {\n        array[start++] = value;\n      }\n      return array;\n    }\n\n    /**\n     * The base implementation of `_.filter` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     */\n    function baseFilter(collection, predicate) {\n      var result = [];\n      baseEach(collection, function(value, index, collection) {\n        if (predicate(value, index, collection)) {\n          result.push(value);\n        }\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.flatten` with support for restricting flattening.\n     *\n     * @private\n     * @param {Array} array The array to flatten.\n     * @param {number} depth The maximum recursion depth.\n     * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n     * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n     * @param {Array} [result=[]] The initial result value.\n     * @returns {Array} Returns the new flattened array.\n     */\n    function baseFlatten(array, depth, predicate, isStrict, result) {\n      var index = -1,\n          length = array.length;\n\n      predicate || (predicate = isFlattenable);\n      result || (result = []);\n\n      while (++index < length) {\n        var value = array[index];\n        if (depth > 0 && predicate(value)) {\n          if (depth > 1) {\n            // Recursively flatten arrays (susceptible to call stack limits).\n            baseFlatten(value, depth - 1, predicate, isStrict, result);\n          } else {\n            arrayPush(result, value);\n          }\n        } else if (!isStrict) {\n          result[result.length] = value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `baseForOwn` which iterates over `object`\n     * properties returned by `keysFunc` and invokes `iteratee` for each property.\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @param {Function} keysFunc The function to get the keys of `object`.\n     * @returns {Object} Returns `object`.\n     */\n    var baseFor = createBaseFor();\n\n    /**\n     * This function is like `baseFor` except that it iterates over properties\n     * in the opposite order.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @param {Function} keysFunc The function to get the keys of `object`.\n     * @returns {Object} Returns `object`.\n     */\n    var baseForRight = createBaseFor(true);\n\n    /**\n     * The base implementation of `_.forOwn` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     */\n    function baseForOwn(object, iteratee) {\n      return object && baseFor(object, iteratee, keys);\n    }\n\n    /**\n     * The base implementation of `_.forOwnRight` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     */\n    function baseForOwnRight(object, iteratee) {\n      return object && baseForRight(object, iteratee, keys);\n    }\n\n    /**\n     * The base implementation of `_.functions` which creates an array of\n     * `object` function property names filtered from `props`.\n     *\n     * @private\n     * @param {Object} object The object to inspect.\n     * @param {Array} props The property names to filter.\n     * @returns {Array} Returns the function names.\n     */\n    function baseFunctions(object, props) {\n      return arrayFilter(props, function(key) {\n        return isFunction(object[key]);\n      });\n    }\n\n    /**\n     * The base implementation of `_.get` without support for default values.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the property to get.\n     * @returns {*} Returns the resolved value.\n     */\n    function baseGet(object, path) {\n      path = castPath(path, object);\n\n      var index = 0,\n          length = path.length;\n\n      while (object != null && index < length) {\n        object = object[toKey(path[index++])];\n      }\n      return (index && index == length) ? object : undefined;\n    }\n\n    /**\n     * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n     * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n     * symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Function} keysFunc The function to get the keys of `object`.\n     * @param {Function} symbolsFunc The function to get the symbols of `object`.\n     * @returns {Array} Returns the array of property names and symbols.\n     */\n    function baseGetAllKeys(object, keysFunc, symbolsFunc) {\n      var result = keysFunc(object);\n      return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n    }\n\n    /**\n     * The base implementation of `getTag` without fallbacks for buggy environments.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @returns {string} Returns the `toStringTag`.\n     */\n    function baseGetTag(value) {\n      if (value == null) {\n        return value === undefined ? undefinedTag : nullTag;\n      }\n      return (symToStringTag && symToStringTag in Object(value))\n        ? getRawTag(value)\n        : objectToString(value);\n    }\n\n    /**\n     * The base implementation of `_.gt` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is greater than `other`,\n     *  else `false`.\n     */\n    function baseGt(value, other) {\n      return value > other;\n    }\n\n    /**\n     * The base implementation of `_.has` without support for deep paths.\n     *\n     * @private\n     * @param {Object} [object] The object to query.\n     * @param {Array|string} key The key to check.\n     * @returns {boolean} Returns `true` if `key` exists, else `false`.\n     */\n    function baseHas(object, key) {\n      return object != null && hasOwnProperty.call(object, key);\n    }\n\n    /**\n     * The base implementation of `_.hasIn` without support for deep paths.\n     *\n     * @private\n     * @param {Object} [object] The object to query.\n     * @param {Array|string} key The key to check.\n     * @returns {boolean} Returns `true` if `key` exists, else `false`.\n     */\n    function baseHasIn(object, key) {\n      return object != null && key in Object(object);\n    }\n\n    /**\n     * The base implementation of `_.inRange` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {number} number The number to check.\n     * @param {number} start The start of the range.\n     * @param {number} end The end of the range.\n     * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n     */\n    function baseInRange(number, start, end) {\n      return number >= nativeMin(start, end) && number < nativeMax(start, end);\n    }\n\n    /**\n     * The base implementation of methods like `_.intersection`, without support\n     * for iteratee shorthands, that accepts an array of arrays to inspect.\n     *\n     * @private\n     * @param {Array} arrays The arrays to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of shared values.\n     */\n    function baseIntersection(arrays, iteratee, comparator) {\n      var includes = comparator ? arrayIncludesWith : arrayIncludes,\n          length = arrays[0].length,\n          othLength = arrays.length,\n          othIndex = othLength,\n          caches = Array(othLength),\n          maxLength = Infinity,\n          result = [];\n\n      while (othIndex--) {\n        var array = arrays[othIndex];\n        if (othIndex && iteratee) {\n          array = arrayMap(array, baseUnary(iteratee));\n        }\n        maxLength = nativeMin(array.length, maxLength);\n        caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))\n          ? new SetCache(othIndex && array)\n          : undefined;\n      }\n      array = arrays[0];\n\n      var index = -1,\n          seen = caches[0];\n\n      outer:\n      while (++index < length && result.length < maxLength) {\n        var value = array[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        value = (comparator || value !== 0) ? value : 0;\n        if (!(seen\n              ? cacheHas(seen, computed)\n              : includes(result, computed, comparator)\n            )) {\n          othIndex = othLength;\n          while (--othIndex) {\n            var cache = caches[othIndex];\n            if (!(cache\n                  ? cacheHas(cache, computed)\n                  : includes(arrays[othIndex], computed, comparator))\n                ) {\n              continue outer;\n            }\n          }\n          if (seen) {\n            seen.push(computed);\n          }\n          result.push(value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.invert` and `_.invertBy` which inverts\n     * `object` with values transformed by `iteratee` and set by `setter`.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} setter The function to set `accumulator` values.\n     * @param {Function} iteratee The iteratee to transform values.\n     * @param {Object} accumulator The initial inverted object.\n     * @returns {Function} Returns `accumulator`.\n     */\n    function baseInverter(object, setter, iteratee, accumulator) {\n      baseForOwn(object, function(value, key, object) {\n        setter(accumulator, iteratee(value), key, object);\n      });\n      return accumulator;\n    }\n\n    /**\n     * The base implementation of `_.invoke` without support for individual\n     * method arguments.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the method to invoke.\n     * @param {Array} args The arguments to invoke the method with.\n     * @returns {*} Returns the result of the invoked method.\n     */\n    function baseInvoke(object, path, args) {\n      path = castPath(path, object);\n      object = parent(object, path);\n      var func = object == null ? object : object[toKey(last(path))];\n      return func == null ? undefined : apply(func, object, args);\n    }\n\n    /**\n     * The base implementation of `_.isArguments`.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n     */\n    function baseIsArguments(value) {\n      return isObjectLike(value) && baseGetTag(value) == argsTag;\n    }\n\n    /**\n     * The base implementation of `_.isArrayBuffer` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n     */\n    function baseIsArrayBuffer(value) {\n      return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;\n    }\n\n    /**\n     * The base implementation of `_.isDate` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n     */\n    function baseIsDate(value) {\n      return isObjectLike(value) && baseGetTag(value) == dateTag;\n    }\n\n    /**\n     * The base implementation of `_.isEqual` which supports partial comparisons\n     * and tracks traversed objects.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @param {boolean} bitmask The bitmask flags.\n     *  1 - Unordered comparison\n     *  2 - Partial comparison\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     */\n    function baseIsEqual(value, other, bitmask, customizer, stack) {\n      if (value === other) {\n        return true;\n      }\n      if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n        return value !== value && other !== other;\n      }\n      return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n    }\n\n    /**\n     * A specialized version of `baseIsEqual` for arrays and objects which performs\n     * deep comparisons and tracks traversed objects enabling objects with circular\n     * references to be compared.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n     */\n    function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n      var objIsArr = isArray(object),\n          othIsArr = isArray(other),\n          objTag = objIsArr ? arrayTag : getTag(object),\n          othTag = othIsArr ? arrayTag : getTag(other);\n\n      objTag = objTag == argsTag ? objectTag : objTag;\n      othTag = othTag == argsTag ? objectTag : othTag;\n\n      var objIsObj = objTag == objectTag,\n          othIsObj = othTag == objectTag,\n          isSameTag = objTag == othTag;\n\n      if (isSameTag && isBuffer(object)) {\n        if (!isBuffer(other)) {\n          return false;\n        }\n        objIsArr = true;\n        objIsObj = false;\n      }\n      if (isSameTag && !objIsObj) {\n        stack || (stack = new Stack);\n        return (objIsArr || isTypedArray(object))\n          ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n          : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n      }\n      if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n        var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n            othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n        if (objIsWrapped || othIsWrapped) {\n          var objUnwrapped = objIsWrapped ? object.value() : object,\n              othUnwrapped = othIsWrapped ? other.value() : other;\n\n          stack || (stack = new Stack);\n          return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n        }\n      }\n      if (!isSameTag) {\n        return false;\n      }\n      stack || (stack = new Stack);\n      return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n    }\n\n    /**\n     * The base implementation of `_.isMap` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n     */\n    function baseIsMap(value) {\n      return isObjectLike(value) && getTag(value) == mapTag;\n    }\n\n    /**\n     * The base implementation of `_.isMatch` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property values to match.\n     * @param {Array} matchData The property names, values, and compare flags to match.\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n     */\n    function baseIsMatch(object, source, matchData, customizer) {\n      var index = matchData.length,\n          length = index,\n          noCustomizer = !customizer;\n\n      if (object == null) {\n        return !length;\n      }\n      object = Object(object);\n      while (index--) {\n        var data = matchData[index];\n        if ((noCustomizer && data[2])\n              ? data[1] !== object[data[0]]\n              : !(data[0] in object)\n            ) {\n          return false;\n        }\n      }\n      while (++index < length) {\n        data = matchData[index];\n        var key = data[0],\n            objValue = object[key],\n            srcValue = data[1];\n\n        if (noCustomizer && data[2]) {\n          if (objValue === undefined && !(key in object)) {\n            return false;\n          }\n        } else {\n          var stack = new Stack;\n          if (customizer) {\n            var result = customizer(objValue, srcValue, key, object, source, stack);\n          }\n          if (!(result === undefined\n                ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n                : result\n              )) {\n            return false;\n          }\n        }\n      }\n      return true;\n    }\n\n    /**\n     * The base implementation of `_.isNative` without bad shim checks.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a native function,\n     *  else `false`.\n     */\n    function baseIsNative(value) {\n      if (!isObject(value) || isMasked(value)) {\n        return false;\n      }\n      var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n      return pattern.test(toSource(value));\n    }\n\n    /**\n     * The base implementation of `_.isRegExp` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n     */\n    function baseIsRegExp(value) {\n      return isObjectLike(value) && baseGetTag(value) == regexpTag;\n    }\n\n    /**\n     * The base implementation of `_.isSet` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n     */\n    function baseIsSet(value) {\n      return isObjectLike(value) && getTag(value) == setTag;\n    }\n\n    /**\n     * The base implementation of `_.isTypedArray` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n     */\n    function baseIsTypedArray(value) {\n      return isObjectLike(value) &&\n        isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n    }\n\n    /**\n     * The base implementation of `_.iteratee`.\n     *\n     * @private\n     * @param {*} [value=_.identity] The value to convert to an iteratee.\n     * @returns {Function} Returns the iteratee.\n     */\n    function baseIteratee(value) {\n      // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n      // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n      if (typeof value == 'function') {\n        return value;\n      }\n      if (value == null) {\n        return identity;\n      }\n      if (typeof value == 'object') {\n        return isArray(value)\n          ? baseMatchesProperty(value[0], value[1])\n          : baseMatches(value);\n      }\n      return property(value);\n    }\n\n    /**\n     * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     */\n    function baseKeys(object) {\n      if (!isPrototype(object)) {\n        return nativeKeys(object);\n      }\n      var result = [];\n      for (var key in Object(object)) {\n        if (hasOwnProperty.call(object, key) && key != 'constructor') {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     */\n    function baseKeysIn(object) {\n      if (!isObject(object)) {\n        return nativeKeysIn(object);\n      }\n      var isProto = isPrototype(object),\n          result = [];\n\n      for (var key in object) {\n        if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.lt` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is less than `other`,\n     *  else `false`.\n     */\n    function baseLt(value, other) {\n      return value < other;\n    }\n\n    /**\n     * The base implementation of `_.map` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array} Returns the new mapped array.\n     */\n    function baseMap(collection, iteratee) {\n      var index = -1,\n          result = isArrayLike(collection) ? Array(collection.length) : [];\n\n      baseEach(collection, function(value, key, collection) {\n        result[++index] = iteratee(value, key, collection);\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.matches` which doesn't clone `source`.\n     *\n     * @private\n     * @param {Object} source The object of property values to match.\n     * @returns {Function} Returns the new spec function.\n     */\n    function baseMatches(source) {\n      var matchData = getMatchData(source);\n      if (matchData.length == 1 && matchData[0][2]) {\n        return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n      }\n      return function(object) {\n        return object === source || baseIsMatch(object, source, matchData);\n      };\n    }\n\n    /**\n     * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n     *\n     * @private\n     * @param {string} path The path of the property to get.\n     * @param {*} srcValue The value to match.\n     * @returns {Function} Returns the new spec function.\n     */\n    function baseMatchesProperty(path, srcValue) {\n      if (isKey(path) && isStrictComparable(srcValue)) {\n        return matchesStrictComparable(toKey(path), srcValue);\n      }\n      return function(object) {\n        var objValue = get(object, path);\n        return (objValue === undefined && objValue === srcValue)\n          ? hasIn(object, path)\n          : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n      };\n    }\n\n    /**\n     * The base implementation of `_.merge` without support for multiple sources.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @param {number} srcIndex The index of `source`.\n     * @param {Function} [customizer] The function to customize merged values.\n     * @param {Object} [stack] Tracks traversed source values and their merged\n     *  counterparts.\n     */\n    function baseMerge(object, source, srcIndex, customizer, stack) {\n      if (object === source) {\n        return;\n      }\n      baseFor(source, function(srcValue, key) {\n        stack || (stack = new Stack);\n        if (isObject(srcValue)) {\n          baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n        }\n        else {\n          var newValue = customizer\n            ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n            : undefined;\n\n          if (newValue === undefined) {\n            newValue = srcValue;\n          }\n          assignMergeValue(object, key, newValue);\n        }\n      }, keysIn);\n    }\n\n    /**\n     * A specialized version of `baseMerge` for arrays and objects which performs\n     * deep merges and tracks traversed objects enabling objects with circular\n     * references to be merged.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @param {string} key The key of the value to merge.\n     * @param {number} srcIndex The index of `source`.\n     * @param {Function} mergeFunc The function to merge values.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @param {Object} [stack] Tracks traversed source values and their merged\n     *  counterparts.\n     */\n    function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n      var objValue = safeGet(object, key),\n          srcValue = safeGet(source, key),\n          stacked = stack.get(srcValue);\n\n      if (stacked) {\n        assignMergeValue(object, key, stacked);\n        return;\n      }\n      var newValue = customizer\n        ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n        : undefined;\n\n      var isCommon = newValue === undefined;\n\n      if (isCommon) {\n        var isArr = isArray(srcValue),\n            isBuff = !isArr && isBuffer(srcValue),\n            isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n        newValue = srcValue;\n        if (isArr || isBuff || isTyped) {\n          if (isArray(objValue)) {\n            newValue = objValue;\n          }\n          else if (isArrayLikeObject(objValue)) {\n            newValue = copyArray(objValue);\n          }\n          else if (isBuff) {\n            isCommon = false;\n            newValue = cloneBuffer(srcValue, true);\n          }\n          else if (isTyped) {\n            isCommon = false;\n            newValue = cloneTypedArray(srcValue, true);\n          }\n          else {\n            newValue = [];\n          }\n        }\n        else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n          newValue = objValue;\n          if (isArguments(objValue)) {\n            newValue = toPlainObject(objValue);\n          }\n          else if (!isObject(objValue) || isFunction(objValue)) {\n            newValue = initCloneObject(srcValue);\n          }\n        }\n        else {\n          isCommon = false;\n        }\n      }\n      if (isCommon) {\n        // Recursively merge objects and arrays (susceptible to call stack limits).\n        stack.set(srcValue, newValue);\n        mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n        stack['delete'](srcValue);\n      }\n      assignMergeValue(object, key, newValue);\n    }\n\n    /**\n     * The base implementation of `_.nth` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {Array} array The array to query.\n     * @param {number} n The index of the element to return.\n     * @returns {*} Returns the nth element of `array`.\n     */\n    function baseNth(array, n) {\n      var length = array.length;\n      if (!length) {\n        return;\n      }\n      n += n < 0 ? length : 0;\n      return isIndex(n, length) ? array[n] : undefined;\n    }\n\n    /**\n     * The base implementation of `_.orderBy` without param guards.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n     * @param {string[]} orders The sort orders of `iteratees`.\n     * @returns {Array} Returns the new sorted array.\n     */\n    function baseOrderBy(collection, iteratees, orders) {\n      if (iteratees.length) {\n        iteratees = arrayMap(iteratees, function(iteratee) {\n          if (isArray(iteratee)) {\n            return function(value) {\n              return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);\n            }\n          }\n          return iteratee;\n        });\n      } else {\n        iteratees = [identity];\n      }\n\n      var index = -1;\n      iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n\n      var result = baseMap(collection, function(value, key, collection) {\n        var criteria = arrayMap(iteratees, function(iteratee) {\n          return iteratee(value);\n        });\n        return { 'criteria': criteria, 'index': ++index, 'value': value };\n      });\n\n      return baseSortBy(result, function(object, other) {\n        return compareMultiple(object, other, orders);\n      });\n    }\n\n    /**\n     * The base implementation of `_.pick` without support for individual\n     * property identifiers.\n     *\n     * @private\n     * @param {Object} object The source object.\n     * @param {string[]} paths The property paths to pick.\n     * @returns {Object} Returns the new object.\n     */\n    function basePick(object, paths) {\n      return basePickBy(object, paths, function(value, path) {\n        return hasIn(object, path);\n      });\n    }\n\n    /**\n     * The base implementation of  `_.pickBy` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The source object.\n     * @param {string[]} paths The property paths to pick.\n     * @param {Function} predicate The function invoked per property.\n     * @returns {Object} Returns the new object.\n     */\n    function basePickBy(object, paths, predicate) {\n      var index = -1,\n          length = paths.length,\n          result = {};\n\n      while (++index < length) {\n        var path = paths[index],\n            value = baseGet(object, path);\n\n        if (predicate(value, path)) {\n          baseSet(result, castPath(path, object), value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * A specialized version of `baseProperty` which supports deep paths.\n     *\n     * @private\n     * @param {Array|string} path The path of the property to get.\n     * @returns {Function} Returns the new accessor function.\n     */\n    function basePropertyDeep(path) {\n      return function(object) {\n        return baseGet(object, path);\n      };\n    }\n\n    /**\n     * The base implementation of `_.pullAllBy` without support for iteratee\n     * shorthands.\n     *\n     * @private\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns `array`.\n     */\n    function basePullAll(array, values, iteratee, comparator) {\n      var indexOf = comparator ? baseIndexOfWith : baseIndexOf,\n          index = -1,\n          length = values.length,\n          seen = array;\n\n      if (array === values) {\n        values = copyArray(values);\n      }\n      if (iteratee) {\n        seen = arrayMap(array, baseUnary(iteratee));\n      }\n      while (++index < length) {\n        var fromIndex = 0,\n            value = values[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {\n          if (seen !== array) {\n            splice.call(seen, fromIndex, 1);\n          }\n          splice.call(array, fromIndex, 1);\n        }\n      }\n      return array;\n    }\n\n    /**\n     * The base implementation of `_.pullAt` without support for individual\n     * indexes or capturing the removed elements.\n     *\n     * @private\n     * @param {Array} array The array to modify.\n     * @param {number[]} indexes The indexes of elements to remove.\n     * @returns {Array} Returns `array`.\n     */\n    function basePullAt(array, indexes) {\n      var length = array ? indexes.length : 0,\n          lastIndex = length - 1;\n\n      while (length--) {\n        var index = indexes[length];\n        if (length == lastIndex || index !== previous) {\n          var previous = index;\n          if (isIndex(index)) {\n            splice.call(array, index, 1);\n          } else {\n            baseUnset(array, index);\n          }\n        }\n      }\n      return array;\n    }\n\n    /**\n     * The base implementation of `_.random` without support for returning\n     * floating-point numbers.\n     *\n     * @private\n     * @param {number} lower The lower bound.\n     * @param {number} upper The upper bound.\n     * @returns {number} Returns the random number.\n     */\n    function baseRandom(lower, upper) {\n      return lower + nativeFloor(nativeRandom() * (upper - lower + 1));\n    }\n\n    /**\n     * The base implementation of `_.range` and `_.rangeRight` which doesn't\n     * coerce arguments.\n     *\n     * @private\n     * @param {number} start The start of the range.\n     * @param {number} end The end of the range.\n     * @param {number} step The value to increment or decrement by.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Array} Returns the range of numbers.\n     */\n    function baseRange(start, end, step, fromRight) {\n      var index = -1,\n          length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n          result = Array(length);\n\n      while (length--) {\n        result[fromRight ? length : ++index] = start;\n        start += step;\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.repeat` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {string} string The string to repeat.\n     * @param {number} n The number of times to repeat the string.\n     * @returns {string} Returns the repeated string.\n     */\n    function baseRepeat(string, n) {\n      var result = '';\n      if (!string || n < 1 || n > MAX_SAFE_INTEGER) {\n        return result;\n      }\n      // Leverage the exponentiation by squaring algorithm for a faster repeat.\n      // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.\n      do {\n        if (n % 2) {\n          result += string;\n        }\n        n = nativeFloor(n / 2);\n        if (n) {\n          string += string;\n        }\n      } while (n);\n\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n     *\n     * @private\n     * @param {Function} func The function to apply a rest parameter to.\n     * @param {number} [start=func.length-1] The start position of the rest parameter.\n     * @returns {Function} Returns the new function.\n     */\n    function baseRest(func, start) {\n      return setToString(overRest(func, start, identity), func + '');\n    }\n\n    /**\n     * The base implementation of `_.sample`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to sample.\n     * @returns {*} Returns the random element.\n     */\n    function baseSample(collection) {\n      return arraySample(values(collection));\n    }\n\n    /**\n     * The base implementation of `_.sampleSize` without param guards.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to sample.\n     * @param {number} n The number of elements to sample.\n     * @returns {Array} Returns the random elements.\n     */\n    function baseSampleSize(collection, n) {\n      var array = values(collection);\n      return shuffleSelf(array, baseClamp(n, 0, array.length));\n    }\n\n    /**\n     * The base implementation of `_.set`.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {*} value The value to set.\n     * @param {Function} [customizer] The function to customize path creation.\n     * @returns {Object} Returns `object`.\n     */\n    function baseSet(object, path, value, customizer) {\n      if (!isObject(object)) {\n        return object;\n      }\n      path = castPath(path, object);\n\n      var index = -1,\n          length = path.length,\n          lastIndex = length - 1,\n          nested = object;\n\n      while (nested != null && ++index < length) {\n        var key = toKey(path[index]),\n            newValue = value;\n\n        if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n          return object;\n        }\n\n        if (index != lastIndex) {\n          var objValue = nested[key];\n          newValue = customizer ? customizer(objValue, key, nested) : undefined;\n          if (newValue === undefined) {\n            newValue = isObject(objValue)\n              ? objValue\n              : (isIndex(path[index + 1]) ? [] : {});\n          }\n        }\n        assignValue(nested, key, newValue);\n        nested = nested[key];\n      }\n      return object;\n    }\n\n    /**\n     * The base implementation of `setData` without support for hot loop shorting.\n     *\n     * @private\n     * @param {Function} func The function to associate metadata with.\n     * @param {*} data The metadata.\n     * @returns {Function} Returns `func`.\n     */\n    var baseSetData = !metaMap ? identity : function(func, data) {\n      metaMap.set(func, data);\n      return func;\n    };\n\n    /**\n     * The base implementation of `setToString` without support for hot loop shorting.\n     *\n     * @private\n     * @param {Function} func The function to modify.\n     * @param {Function} string The `toString` result.\n     * @returns {Function} Returns `func`.\n     */\n    var baseSetToString = !defineProperty ? identity : function(func, string) {\n      return defineProperty(func, 'toString', {\n        'configurable': true,\n        'enumerable': false,\n        'value': constant(string),\n        'writable': true\n      });\n    };\n\n    /**\n     * The base implementation of `_.shuffle`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to shuffle.\n     * @returns {Array} Returns the new shuffled array.\n     */\n    function baseShuffle(collection) {\n      return shuffleSelf(values(collection));\n    }\n\n    /**\n     * The base implementation of `_.slice` without an iteratee call guard.\n     *\n     * @private\n     * @param {Array} array The array to slice.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns the slice of `array`.\n     */\n    function baseSlice(array, start, end) {\n      var index = -1,\n          length = array.length;\n\n      if (start < 0) {\n        start = -start > length ? 0 : (length + start);\n      }\n      end = end > length ? length : end;\n      if (end < 0) {\n        end += length;\n      }\n      length = start > end ? 0 : ((end - start) >>> 0);\n      start >>>= 0;\n\n      var result = Array(length);\n      while (++index < length) {\n        result[index] = array[index + start];\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.some` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {boolean} Returns `true` if any element passes the predicate check,\n     *  else `false`.\n     */\n    function baseSome(collection, predicate) {\n      var result;\n\n      baseEach(collection, function(value, index, collection) {\n        result = predicate(value, index, collection);\n        return !result;\n      });\n      return !!result;\n    }\n\n    /**\n     * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which\n     * performs a binary search of `array` to determine the index at which `value`\n     * should be inserted into `array` in order to maintain its sort order.\n     *\n     * @private\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {boolean} [retHighest] Specify returning the highest qualified index.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     */\n    function baseSortedIndex(array, value, retHighest) {\n      var low = 0,\n          high = array == null ? low : array.length;\n\n      if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {\n        while (low < high) {\n          var mid = (low + high) >>> 1,\n              computed = array[mid];\n\n          if (computed !== null && !isSymbol(computed) &&\n              (retHighest ? (computed <= value) : (computed < value))) {\n            low = mid + 1;\n          } else {\n            high = mid;\n          }\n        }\n        return high;\n      }\n      return baseSortedIndexBy(array, value, identity, retHighest);\n    }\n\n    /**\n     * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`\n     * which invokes `iteratee` for `value` and each element of `array` to compute\n     * their sort ranking. The iteratee is invoked with one argument; (value).\n     *\n     * @private\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function} iteratee The iteratee invoked per element.\n     * @param {boolean} [retHighest] Specify returning the highest qualified index.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     */\n    function baseSortedIndexBy(array, value, iteratee, retHighest) {\n      var low = 0,\n          high = array == null ? 0 : array.length;\n      if (high === 0) {\n        return 0;\n      }\n\n      value = iteratee(value);\n      var valIsNaN = value !== value,\n          valIsNull = value === null,\n          valIsSymbol = isSymbol(value),\n          valIsUndefined = value === undefined;\n\n      while (low < high) {\n        var mid = nativeFloor((low + high) / 2),\n            computed = iteratee(array[mid]),\n            othIsDefined = computed !== undefined,\n            othIsNull = computed === null,\n            othIsReflexive = computed === computed,\n            othIsSymbol = isSymbol(computed);\n\n        if (valIsNaN) {\n          var setLow = retHighest || othIsReflexive;\n        } else if (valIsUndefined) {\n          setLow = othIsReflexive && (retHighest || othIsDefined);\n        } else if (valIsNull) {\n          setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);\n        } else if (valIsSymbol) {\n          setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);\n        } else if (othIsNull || othIsSymbol) {\n          setLow = false;\n        } else {\n          setLow = retHighest ? (computed <= value) : (computed < value);\n        }\n        if (setLow) {\n          low = mid + 1;\n        } else {\n          high = mid;\n        }\n      }\n      return nativeMin(high, MAX_ARRAY_INDEX);\n    }\n\n    /**\n     * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without\n     * support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     */\n    function baseSortedUniq(array, iteratee) {\n      var index = -1,\n          length = array.length,\n          resIndex = 0,\n          result = [];\n\n      while (++index < length) {\n        var value = array[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        if (!index || !eq(computed, seen)) {\n          var seen = computed;\n          result[resIndex++] = value === 0 ? 0 : value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.toNumber` which doesn't ensure correct\n     * conversions of binary, hexadecimal, or octal string values.\n     *\n     * @private\n     * @param {*} value The value to process.\n     * @returns {number} Returns the number.\n     */\n    function baseToNumber(value) {\n      if (typeof value == 'number') {\n        return value;\n      }\n      if (isSymbol(value)) {\n        return NAN;\n      }\n      return +value;\n    }\n\n    /**\n     * The base implementation of `_.toString` which doesn't convert nullish\n     * values to empty strings.\n     *\n     * @private\n     * @param {*} value The value to process.\n     * @returns {string} Returns the string.\n     */\n    function baseToString(value) {\n      // Exit early for strings to avoid a performance hit in some environments.\n      if (typeof value == 'string') {\n        return value;\n      }\n      if (isArray(value)) {\n        // Recursively convert values (susceptible to call stack limits).\n        return arrayMap(value, baseToString) + '';\n      }\n      if (isSymbol(value)) {\n        return symbolToString ? symbolToString.call(value) : '';\n      }\n      var result = (value + '');\n      return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n    }\n\n    /**\n     * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     */\n    function baseUniq(array, iteratee, comparator) {\n      var index = -1,\n          includes = arrayIncludes,\n          length = array.length,\n          isCommon = true,\n          result = [],\n          seen = result;\n\n      if (comparator) {\n        isCommon = false;\n        includes = arrayIncludesWith;\n      }\n      else if (length >= LARGE_ARRAY_SIZE) {\n        var set = iteratee ? null : createSet(array);\n        if (set) {\n          return setToArray(set);\n        }\n        isCommon = false;\n        includes = cacheHas;\n        seen = new SetCache;\n      }\n      else {\n        seen = iteratee ? [] : result;\n      }\n      outer:\n      while (++index < length) {\n        var value = array[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        value = (comparator || value !== 0) ? value : 0;\n        if (isCommon && computed === computed) {\n          var seenIndex = seen.length;\n          while (seenIndex--) {\n            if (seen[seenIndex] === computed) {\n              continue outer;\n            }\n          }\n          if (iteratee) {\n            seen.push(computed);\n          }\n          result.push(value);\n        }\n        else if (!includes(seen, computed, comparator)) {\n          if (seen !== result) {\n            seen.push(computed);\n          }\n          result.push(value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.unset`.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The property path to unset.\n     * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n     */\n    function baseUnset(object, path) {\n      path = castPath(path, object);\n      object = parent(object, path);\n      return object == null || delete object[toKey(last(path))];\n    }\n\n    /**\n     * The base implementation of `_.update`.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to update.\n     * @param {Function} updater The function to produce the updated value.\n     * @param {Function} [customizer] The function to customize path creation.\n     * @returns {Object} Returns `object`.\n     */\n    function baseUpdate(object, path, updater, customizer) {\n      return baseSet(object, path, updater(baseGet(object, path)), customizer);\n    }\n\n    /**\n     * The base implementation of methods like `_.dropWhile` and `_.takeWhile`\n     * without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to query.\n     * @param {Function} predicate The function invoked per iteration.\n     * @param {boolean} [isDrop] Specify dropping elements instead of taking them.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Array} Returns the slice of `array`.\n     */\n    function baseWhile(array, predicate, isDrop, fromRight) {\n      var length = array.length,\n          index = fromRight ? length : -1;\n\n      while ((fromRight ? index-- : ++index < length) &&\n        predicate(array[index], index, array)) {}\n\n      return isDrop\n        ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))\n        : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));\n    }\n\n    /**\n     * The base implementation of `wrapperValue` which returns the result of\n     * performing a sequence of actions on the unwrapped `value`, where each\n     * successive action is supplied the return value of the previous.\n     *\n     * @private\n     * @param {*} value The unwrapped value.\n     * @param {Array} actions Actions to perform to resolve the unwrapped value.\n     * @returns {*} Returns the resolved value.\n     */\n    function baseWrapperValue(value, actions) {\n      var result = value;\n      if (result instanceof LazyWrapper) {\n        result = result.value();\n      }\n      return arrayReduce(actions, function(result, action) {\n        return action.func.apply(action.thisArg, arrayPush([result], action.args));\n      }, result);\n    }\n\n    /**\n     * The base implementation of methods like `_.xor`, without support for\n     * iteratee shorthands, that accepts an array of arrays to inspect.\n     *\n     * @private\n     * @param {Array} arrays The arrays to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of values.\n     */\n    function baseXor(arrays, iteratee, comparator) {\n      var length = arrays.length;\n      if (length < 2) {\n        return length ? baseUniq(arrays[0]) : [];\n      }\n      var index = -1,\n          result = Array(length);\n\n      while (++index < length) {\n        var array = arrays[index],\n            othIndex = -1;\n\n        while (++othIndex < length) {\n          if (othIndex != index) {\n            result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);\n          }\n        }\n      }\n      return baseUniq(baseFlatten(result, 1), iteratee, comparator);\n    }\n\n    /**\n     * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\n     *\n     * @private\n     * @param {Array} props The property identifiers.\n     * @param {Array} values The property values.\n     * @param {Function} assignFunc The function to assign values.\n     * @returns {Object} Returns the new object.\n     */\n    function baseZipObject(props, values, assignFunc) {\n      var index = -1,\n          length = props.length,\n          valsLength = values.length,\n          result = {};\n\n      while (++index < length) {\n        var value = index < valsLength ? values[index] : undefined;\n        assignFunc(result, props[index], value);\n      }\n      return result;\n    }\n\n    /**\n     * Casts `value` to an empty array if it's not an array like object.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @returns {Array|Object} Returns the cast array-like object.\n     */\n    function castArrayLikeObject(value) {\n      return isArrayLikeObject(value) ? value : [];\n    }\n\n    /**\n     * Casts `value` to `identity` if it's not a function.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @returns {Function} Returns cast function.\n     */\n    function castFunction(value) {\n      return typeof value == 'function' ? value : identity;\n    }\n\n    /**\n     * Casts `value` to a path array if it's not one.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @param {Object} [object] The object to query keys on.\n     * @returns {Array} Returns the cast property path array.\n     */\n    function castPath(value, object) {\n      if (isArray(value)) {\n        return value;\n      }\n      return isKey(value, object) ? [value] : stringToPath(toString(value));\n    }\n\n    /**\n     * A `baseRest` alias which can be replaced with `identity` by module\n     * replacement plugins.\n     *\n     * @private\n     * @type {Function}\n     * @param {Function} func The function to apply a rest parameter to.\n     * @returns {Function} Returns the new function.\n     */\n    var castRest = baseRest;\n\n    /**\n     * Casts `array` to a slice if it's needed.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {number} start The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns the cast slice.\n     */\n    function castSlice(array, start, end) {\n      var length = array.length;\n      end = end === undefined ? length : end;\n      return (!start && end >= length) ? array : baseSlice(array, start, end);\n    }\n\n    /**\n     * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).\n     *\n     * @private\n     * @param {number|Object} id The timer id or timeout object of the timer to clear.\n     */\n    var clearTimeout = ctxClearTimeout || function(id) {\n      return root.clearTimeout(id);\n    };\n\n    /**\n     * Creates a clone of  `buffer`.\n     *\n     * @private\n     * @param {Buffer} buffer The buffer to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Buffer} Returns the cloned buffer.\n     */\n    function cloneBuffer(buffer, isDeep) {\n      if (isDeep) {\n        return buffer.slice();\n      }\n      var length = buffer.length,\n          result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n      buffer.copy(result);\n      return result;\n    }\n\n    /**\n     * Creates a clone of `arrayBuffer`.\n     *\n     * @private\n     * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n     * @returns {ArrayBuffer} Returns the cloned array buffer.\n     */\n    function cloneArrayBuffer(arrayBuffer) {\n      var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n      new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n      return result;\n    }\n\n    /**\n     * Creates a clone of `dataView`.\n     *\n     * @private\n     * @param {Object} dataView The data view to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the cloned data view.\n     */\n    function cloneDataView(dataView, isDeep) {\n      var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n      return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n    }\n\n    /**\n     * Creates a clone of `regexp`.\n     *\n     * @private\n     * @param {Object} regexp The regexp to clone.\n     * @returns {Object} Returns the cloned regexp.\n     */\n    function cloneRegExp(regexp) {\n      var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n      result.lastIndex = regexp.lastIndex;\n      return result;\n    }\n\n    /**\n     * Creates a clone of the `symbol` object.\n     *\n     * @private\n     * @param {Object} symbol The symbol object to clone.\n     * @returns {Object} Returns the cloned symbol object.\n     */\n    function cloneSymbol(symbol) {\n      return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n    }\n\n    /**\n     * Creates a clone of `typedArray`.\n     *\n     * @private\n     * @param {Object} typedArray The typed array to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the cloned typed array.\n     */\n    function cloneTypedArray(typedArray, isDeep) {\n      var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n      return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n    }\n\n    /**\n     * Compares values to sort them in ascending order.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {number} Returns the sort order indicator for `value`.\n     */\n    function compareAscending(value, other) {\n      if (value !== other) {\n        var valIsDefined = value !== undefined,\n            valIsNull = value === null,\n            valIsReflexive = value === value,\n            valIsSymbol = isSymbol(value);\n\n        var othIsDefined = other !== undefined,\n            othIsNull = other === null,\n            othIsReflexive = other === other,\n            othIsSymbol = isSymbol(other);\n\n        if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n            (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n            (valIsNull && othIsDefined && othIsReflexive) ||\n            (!valIsDefined && othIsReflexive) ||\n            !valIsReflexive) {\n          return 1;\n        }\n        if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n            (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n            (othIsNull && valIsDefined && valIsReflexive) ||\n            (!othIsDefined && valIsReflexive) ||\n            !othIsReflexive) {\n          return -1;\n        }\n      }\n      return 0;\n    }\n\n    /**\n     * Used by `_.orderBy` to compare multiple properties of a value to another\n     * and stable sort them.\n     *\n     * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n     * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n     * of corresponding values.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {boolean[]|string[]} orders The order to sort by for each property.\n     * @returns {number} Returns the sort order indicator for `object`.\n     */\n    function compareMultiple(object, other, orders) {\n      var index = -1,\n          objCriteria = object.criteria,\n          othCriteria = other.criteria,\n          length = objCriteria.length,\n          ordersLength = orders.length;\n\n      while (++index < length) {\n        var result = compareAscending(objCriteria[index], othCriteria[index]);\n        if (result) {\n          if (index >= ordersLength) {\n            return result;\n          }\n          var order = orders[index];\n          return result * (order == 'desc' ? -1 : 1);\n        }\n      }\n      // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n      // that causes it, under certain circumstances, to provide the same value for\n      // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n      // for more details.\n      //\n      // This also ensures a stable sort in V8 and other engines.\n      // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n      return object.index - other.index;\n    }\n\n    /**\n     * Creates an array that is the composition of partially applied arguments,\n     * placeholders, and provided arguments into a single array of arguments.\n     *\n     * @private\n     * @param {Array} args The provided arguments.\n     * @param {Array} partials The arguments to prepend to those provided.\n     * @param {Array} holders The `partials` placeholder indexes.\n     * @params {boolean} [isCurried] Specify composing for a curried function.\n     * @returns {Array} Returns the new array of composed arguments.\n     */\n    function composeArgs(args, partials, holders, isCurried) {\n      var argsIndex = -1,\n          argsLength = args.length,\n          holdersLength = holders.length,\n          leftIndex = -1,\n          leftLength = partials.length,\n          rangeLength = nativeMax(argsLength - holdersLength, 0),\n          result = Array(leftLength + rangeLength),\n          isUncurried = !isCurried;\n\n      while (++leftIndex < leftLength) {\n        result[leftIndex] = partials[leftIndex];\n      }\n      while (++argsIndex < holdersLength) {\n        if (isUncurried || argsIndex < argsLength) {\n          result[holders[argsIndex]] = args[argsIndex];\n        }\n      }\n      while (rangeLength--) {\n        result[leftIndex++] = args[argsIndex++];\n      }\n      return result;\n    }\n\n    /**\n     * This function is like `composeArgs` except that the arguments composition\n     * is tailored for `_.partialRight`.\n     *\n     * @private\n     * @param {Array} args The provided arguments.\n     * @param {Array} partials The arguments to append to those provided.\n     * @param {Array} holders The `partials` placeholder indexes.\n     * @params {boolean} [isCurried] Specify composing for a curried function.\n     * @returns {Array} Returns the new array of composed arguments.\n     */\n    function composeArgsRight(args, partials, holders, isCurried) {\n      var argsIndex = -1,\n          argsLength = args.length,\n          holdersIndex = -1,\n          holdersLength = holders.length,\n          rightIndex = -1,\n          rightLength = partials.length,\n          rangeLength = nativeMax(argsLength - holdersLength, 0),\n          result = Array(rangeLength + rightLength),\n          isUncurried = !isCurried;\n\n      while (++argsIndex < rangeLength) {\n        result[argsIndex] = args[argsIndex];\n      }\n      var offset = argsIndex;\n      while (++rightIndex < rightLength) {\n        result[offset + rightIndex] = partials[rightIndex];\n      }\n      while (++holdersIndex < holdersLength) {\n        if (isUncurried || argsIndex < argsLength) {\n          result[offset + holders[holdersIndex]] = args[argsIndex++];\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Copies the values of `source` to `array`.\n     *\n     * @private\n     * @param {Array} source The array to copy values from.\n     * @param {Array} [array=[]] The array to copy values to.\n     * @returns {Array} Returns `array`.\n     */\n    function copyArray(source, array) {\n      var index = -1,\n          length = source.length;\n\n      array || (array = Array(length));\n      while (++index < length) {\n        array[index] = source[index];\n      }\n      return array;\n    }\n\n    /**\n     * Copies properties of `source` to `object`.\n     *\n     * @private\n     * @param {Object} source The object to copy properties from.\n     * @param {Array} props The property identifiers to copy.\n     * @param {Object} [object={}] The object to copy properties to.\n     * @param {Function} [customizer] The function to customize copied values.\n     * @returns {Object} Returns `object`.\n     */\n    function copyObject(source, props, object, customizer) {\n      var isNew = !object;\n      object || (object = {});\n\n      var index = -1,\n          length = props.length;\n\n      while (++index < length) {\n        var key = props[index];\n\n        var newValue = customizer\n          ? customizer(object[key], source[key], key, object, source)\n          : undefined;\n\n        if (newValue === undefined) {\n          newValue = source[key];\n        }\n        if (isNew) {\n          baseAssignValue(object, key, newValue);\n        } else {\n          assignValue(object, key, newValue);\n        }\n      }\n      return object;\n    }\n\n    /**\n     * Copies own symbols of `source` to `object`.\n     *\n     * @private\n     * @param {Object} source The object to copy symbols from.\n     * @param {Object} [object={}] The object to copy symbols to.\n     * @returns {Object} Returns `object`.\n     */\n    function copySymbols(source, object) {\n      return copyObject(source, getSymbols(source), object);\n    }\n\n    /**\n     * Copies own and inherited symbols of `source` to `object`.\n     *\n     * @private\n     * @param {Object} source The object to copy symbols from.\n     * @param {Object} [object={}] The object to copy symbols to.\n     * @returns {Object} Returns `object`.\n     */\n    function copySymbolsIn(source, object) {\n      return copyObject(source, getSymbolsIn(source), object);\n    }\n\n    /**\n     * Creates a function like `_.groupBy`.\n     *\n     * @private\n     * @param {Function} setter The function to set accumulator values.\n     * @param {Function} [initializer] The accumulator object initializer.\n     * @returns {Function} Returns the new aggregator function.\n     */\n    function createAggregator(setter, initializer) {\n      return function(collection, iteratee) {\n        var func = isArray(collection) ? arrayAggregator : baseAggregator,\n            accumulator = initializer ? initializer() : {};\n\n        return func(collection, setter, getIteratee(iteratee, 2), accumulator);\n      };\n    }\n\n    /**\n     * Creates a function like `_.assign`.\n     *\n     * @private\n     * @param {Function} assigner The function to assign values.\n     * @returns {Function} Returns the new assigner function.\n     */\n    function createAssigner(assigner) {\n      return baseRest(function(object, sources) {\n        var index = -1,\n            length = sources.length,\n            customizer = length > 1 ? sources[length - 1] : undefined,\n            guard = length > 2 ? sources[2] : undefined;\n\n        customizer = (assigner.length > 3 && typeof customizer == 'function')\n          ? (length--, customizer)\n          : undefined;\n\n        if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n          customizer = length < 3 ? undefined : customizer;\n          length = 1;\n        }\n        object = Object(object);\n        while (++index < length) {\n          var source = sources[index];\n          if (source) {\n            assigner(object, source, index, customizer);\n          }\n        }\n        return object;\n      });\n    }\n\n    /**\n     * Creates a `baseEach` or `baseEachRight` function.\n     *\n     * @private\n     * @param {Function} eachFunc The function to iterate over a collection.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new base function.\n     */\n    function createBaseEach(eachFunc, fromRight) {\n      return function(collection, iteratee) {\n        if (collection == null) {\n          return collection;\n        }\n        if (!isArrayLike(collection)) {\n          return eachFunc(collection, iteratee);\n        }\n        var length = collection.length,\n            index = fromRight ? length : -1,\n            iterable = Object(collection);\n\n        while ((fromRight ? index-- : ++index < length)) {\n          if (iteratee(iterable[index], index, iterable) === false) {\n            break;\n          }\n        }\n        return collection;\n      };\n    }\n\n    /**\n     * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n     *\n     * @private\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new base function.\n     */\n    function createBaseFor(fromRight) {\n      return function(object, iteratee, keysFunc) {\n        var index = -1,\n            iterable = Object(object),\n            props = keysFunc(object),\n            length = props.length;\n\n        while (length--) {\n          var key = props[fromRight ? length : ++index];\n          if (iteratee(iterable[key], key, iterable) === false) {\n            break;\n          }\n        }\n        return object;\n      };\n    }\n\n    /**\n     * Creates a function that wraps `func` to invoke it with the optional `this`\n     * binding of `thisArg`.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createBind(func, bitmask, thisArg) {\n      var isBind = bitmask & WRAP_BIND_FLAG,\n          Ctor = createCtor(func);\n\n      function wrapper() {\n        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n        return fn.apply(isBind ? thisArg : this, arguments);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a function like `_.lowerFirst`.\n     *\n     * @private\n     * @param {string} methodName The name of the `String` case method to use.\n     * @returns {Function} Returns the new case function.\n     */\n    function createCaseFirst(methodName) {\n      return function(string) {\n        string = toString(string);\n\n        var strSymbols = hasUnicode(string)\n          ? stringToArray(string)\n          : undefined;\n\n        var chr = strSymbols\n          ? strSymbols[0]\n          : string.charAt(0);\n\n        var trailing = strSymbols\n          ? castSlice(strSymbols, 1).join('')\n          : string.slice(1);\n\n        return chr[methodName]() + trailing;\n      };\n    }\n\n    /**\n     * Creates a function like `_.camelCase`.\n     *\n     * @private\n     * @param {Function} callback The function to combine each word.\n     * @returns {Function} Returns the new compounder function.\n     */\n    function createCompounder(callback) {\n      return function(string) {\n        return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n      };\n    }\n\n    /**\n     * Creates a function that produces an instance of `Ctor` regardless of\n     * whether it was invoked as part of a `new` expression or by `call` or `apply`.\n     *\n     * @private\n     * @param {Function} Ctor The constructor to wrap.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createCtor(Ctor) {\n      return function() {\n        // Use a `switch` statement to work with class constructors. See\n        // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist\n        // for more details.\n        var args = arguments;\n        switch (args.length) {\n          case 0: return new Ctor;\n          case 1: return new Ctor(args[0]);\n          case 2: return new Ctor(args[0], args[1]);\n          case 3: return new Ctor(args[0], args[1], args[2]);\n          case 4: return new Ctor(args[0], args[1], args[2], args[3]);\n          case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);\n          case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);\n          case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\n        }\n        var thisBinding = baseCreate(Ctor.prototype),\n            result = Ctor.apply(thisBinding, args);\n\n        // Mimic the constructor's `return` behavior.\n        // See https://es5.github.io/#x13.2.2 for more details.\n        return isObject(result) ? result : thisBinding;\n      };\n    }\n\n    /**\n     * Creates a function that wraps `func` to enable currying.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {number} arity The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createCurry(func, bitmask, arity) {\n      var Ctor = createCtor(func);\n\n      function wrapper() {\n        var length = arguments.length,\n            args = Array(length),\n            index = length,\n            placeholder = getHolder(wrapper);\n\n        while (index--) {\n          args[index] = arguments[index];\n        }\n        var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)\n          ? []\n          : replaceHolders(args, placeholder);\n\n        length -= holders.length;\n        if (length < arity) {\n          return createRecurry(\n            func, bitmask, createHybrid, wrapper.placeholder, undefined,\n            args, holders, undefined, undefined, arity - length);\n        }\n        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n        return apply(fn, this, args);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a `_.find` or `_.findLast` function.\n     *\n     * @private\n     * @param {Function} findIndexFunc The function to find the collection index.\n     * @returns {Function} Returns the new find function.\n     */\n    function createFind(findIndexFunc) {\n      return function(collection, predicate, fromIndex) {\n        var iterable = Object(collection);\n        if (!isArrayLike(collection)) {\n          var iteratee = getIteratee(predicate, 3);\n          collection = keys(collection);\n          predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n        }\n        var index = findIndexFunc(collection, predicate, fromIndex);\n        return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n      };\n    }\n\n    /**\n     * Creates a `_.flow` or `_.flowRight` function.\n     *\n     * @private\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new flow function.\n     */\n    function createFlow(fromRight) {\n      return flatRest(function(funcs) {\n        var length = funcs.length,\n            index = length,\n            prereq = LodashWrapper.prototype.thru;\n\n        if (fromRight) {\n          funcs.reverse();\n        }\n        while (index--) {\n          var func = funcs[index];\n          if (typeof func != 'function') {\n            throw new TypeError(FUNC_ERROR_TEXT);\n          }\n          if (prereq && !wrapper && getFuncName(func) == 'wrapper') {\n            var wrapper = new LodashWrapper([], true);\n          }\n        }\n        index = wrapper ? index : length;\n        while (++index < length) {\n          func = funcs[index];\n\n          var funcName = getFuncName(func),\n              data = funcName == 'wrapper' ? getData(func) : undefined;\n\n          if (data && isLaziable(data[0]) &&\n                data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&\n                !data[4].length && data[9] == 1\n              ) {\n            wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);\n          } else {\n            wrapper = (func.length == 1 && isLaziable(func))\n              ? wrapper[funcName]()\n              : wrapper.thru(func);\n          }\n        }\n        return function() {\n          var args = arguments,\n              value = args[0];\n\n          if (wrapper && args.length == 1 && isArray(value)) {\n            return wrapper.plant(value).value();\n          }\n          var index = 0,\n              result = length ? funcs[index].apply(this, args) : value;\n\n          while (++index < length) {\n            result = funcs[index].call(this, result);\n          }\n          return result;\n        };\n      });\n    }\n\n    /**\n     * Creates a function that wraps `func` to invoke it with optional `this`\n     * binding of `thisArg`, partial application, and currying.\n     *\n     * @private\n     * @param {Function|string} func The function or method name to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {Array} [partials] The arguments to prepend to those provided to\n     *  the new function.\n     * @param {Array} [holders] The `partials` placeholder indexes.\n     * @param {Array} [partialsRight] The arguments to append to those provided\n     *  to the new function.\n     * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.\n     * @param {Array} [argPos] The argument positions of the new function.\n     * @param {number} [ary] The arity cap of `func`.\n     * @param {number} [arity] The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {\n      var isAry = bitmask & WRAP_ARY_FLAG,\n          isBind = bitmask & WRAP_BIND_FLAG,\n          isBindKey = bitmask & WRAP_BIND_KEY_FLAG,\n          isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),\n          isFlip = bitmask & WRAP_FLIP_FLAG,\n          Ctor = isBindKey ? undefined : createCtor(func);\n\n      function wrapper() {\n        var length = arguments.length,\n            args = Array(length),\n            index = length;\n\n        while (index--) {\n          args[index] = arguments[index];\n        }\n        if (isCurried) {\n          var placeholder = getHolder(wrapper),\n              holdersCount = countHolders(args, placeholder);\n        }\n        if (partials) {\n          args = composeArgs(args, partials, holders, isCurried);\n        }\n        if (partialsRight) {\n          args = composeArgsRight(args, partialsRight, holdersRight, isCurried);\n        }\n        length -= holdersCount;\n        if (isCurried && length < arity) {\n          var newHolders = replaceHolders(args, placeholder);\n          return createRecurry(\n            func, bitmask, createHybrid, wrapper.placeholder, thisArg,\n            args, newHolders, argPos, ary, arity - length\n          );\n        }\n        var thisBinding = isBind ? thisArg : this,\n            fn = isBindKey ? thisBinding[func] : func;\n\n        length = args.length;\n        if (argPos) {\n          args = reorder(args, argPos);\n        } else if (isFlip && length > 1) {\n          args.reverse();\n        }\n        if (isAry && ary < length) {\n          args.length = ary;\n        }\n        if (this && this !== root && this instanceof wrapper) {\n          fn = Ctor || createCtor(fn);\n        }\n        return fn.apply(thisBinding, args);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a function like `_.invertBy`.\n     *\n     * @private\n     * @param {Function} setter The function to set accumulator values.\n     * @param {Function} toIteratee The function to resolve iteratees.\n     * @returns {Function} Returns the new inverter function.\n     */\n    function createInverter(setter, toIteratee) {\n      return function(object, iteratee) {\n        return baseInverter(object, setter, toIteratee(iteratee), {});\n      };\n    }\n\n    /**\n     * Creates a function that performs a mathematical operation on two values.\n     *\n     * @private\n     * @param {Function} operator The function to perform the operation.\n     * @param {number} [defaultValue] The value used for `undefined` arguments.\n     * @returns {Function} Returns the new mathematical operation function.\n     */\n    function createMathOperation(operator, defaultValue) {\n      return function(value, other) {\n        var result;\n        if (value === undefined && other === undefined) {\n          return defaultValue;\n        }\n        if (value !== undefined) {\n          result = value;\n        }\n        if (other !== undefined) {\n          if (result === undefined) {\n            return other;\n          }\n          if (typeof value == 'string' || typeof other == 'string') {\n            value = baseToString(value);\n            other = baseToString(other);\n          } else {\n            value = baseToNumber(value);\n            other = baseToNumber(other);\n          }\n          result = operator(value, other);\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Creates a function like `_.over`.\n     *\n     * @private\n     * @param {Function} arrayFunc The function to iterate over iteratees.\n     * @returns {Function} Returns the new over function.\n     */\n    function createOver(arrayFunc) {\n      return flatRest(function(iteratees) {\n        iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n        return baseRest(function(args) {\n          var thisArg = this;\n          return arrayFunc(iteratees, function(iteratee) {\n            return apply(iteratee, thisArg, args);\n          });\n        });\n      });\n    }\n\n    /**\n     * Creates the padding for `string` based on `length`. The `chars` string\n     * is truncated if the number of characters exceeds `length`.\n     *\n     * @private\n     * @param {number} length The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padding for `string`.\n     */\n    function createPadding(length, chars) {\n      chars = chars === undefined ? ' ' : baseToString(chars);\n\n      var charsLength = chars.length;\n      if (charsLength < 2) {\n        return charsLength ? baseRepeat(chars, length) : chars;\n      }\n      var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));\n      return hasUnicode(chars)\n        ? castSlice(stringToArray(result), 0, length).join('')\n        : result.slice(0, length);\n    }\n\n    /**\n     * Creates a function that wraps `func` to invoke it with the `this` binding\n     * of `thisArg` and `partials` prepended to the arguments it receives.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {*} thisArg The `this` binding of `func`.\n     * @param {Array} partials The arguments to prepend to those provided to\n     *  the new function.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createPartial(func, bitmask, thisArg, partials) {\n      var isBind = bitmask & WRAP_BIND_FLAG,\n          Ctor = createCtor(func);\n\n      function wrapper() {\n        var argsIndex = -1,\n            argsLength = arguments.length,\n            leftIndex = -1,\n            leftLength = partials.length,\n            args = Array(leftLength + argsLength),\n            fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n\n        while (++leftIndex < leftLength) {\n          args[leftIndex] = partials[leftIndex];\n        }\n        while (argsLength--) {\n          args[leftIndex++] = arguments[++argsIndex];\n        }\n        return apply(fn, isBind ? thisArg : this, args);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a `_.range` or `_.rangeRight` function.\n     *\n     * @private\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new range function.\n     */\n    function createRange(fromRight) {\n      return function(start, end, step) {\n        if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n          end = step = undefined;\n        }\n        // Ensure the sign of `-0` is preserved.\n        start = toFinite(start);\n        if (end === undefined) {\n          end = start;\n          start = 0;\n        } else {\n          end = toFinite(end);\n        }\n        step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n        return baseRange(start, end, step, fromRight);\n      };\n    }\n\n    /**\n     * Creates a function that performs a relational operation on two values.\n     *\n     * @private\n     * @param {Function} operator The function to perform the operation.\n     * @returns {Function} Returns the new relational operation function.\n     */\n    function createRelationalOperation(operator) {\n      return function(value, other) {\n        if (!(typeof value == 'string' && typeof other == 'string')) {\n          value = toNumber(value);\n          other = toNumber(other);\n        }\n        return operator(value, other);\n      };\n    }\n\n    /**\n     * Creates a function that wraps `func` to continue currying.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {Function} wrapFunc The function to create the `func` wrapper.\n     * @param {*} placeholder The placeholder value.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {Array} [partials] The arguments to prepend to those provided to\n     *  the new function.\n     * @param {Array} [holders] The `partials` placeholder indexes.\n     * @param {Array} [argPos] The argument positions of the new function.\n     * @param {number} [ary] The arity cap of `func`.\n     * @param {number} [arity] The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {\n      var isCurry = bitmask & WRAP_CURRY_FLAG,\n          newHolders = isCurry ? holders : undefined,\n          newHoldersRight = isCurry ? undefined : holders,\n          newPartials = isCurry ? partials : undefined,\n          newPartialsRight = isCurry ? undefined : partials;\n\n      bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);\n      bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);\n\n      if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {\n        bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);\n      }\n      var newData = [\n        func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,\n        newHoldersRight, argPos, ary, arity\n      ];\n\n      var result = wrapFunc.apply(undefined, newData);\n      if (isLaziable(func)) {\n        setData(result, newData);\n      }\n      result.placeholder = placeholder;\n      return setWrapToString(result, func, bitmask);\n    }\n\n    /**\n     * Creates a function like `_.round`.\n     *\n     * @private\n     * @param {string} methodName The name of the `Math` method to use when rounding.\n     * @returns {Function} Returns the new round function.\n     */\n    function createRound(methodName) {\n      var func = Math[methodName];\n      return function(number, precision) {\n        number = toNumber(number);\n        precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);\n        if (precision && nativeIsFinite(number)) {\n          // Shift with exponential notation to avoid floating-point issues.\n          // See [MDN](https://mdn.io/round#Examples) for more details.\n          var pair = (toString(number) + 'e').split('e'),\n              value = func(pair[0] + 'e' + (+pair[1] + precision));\n\n          pair = (toString(value) + 'e').split('e');\n          return +(pair[0] + 'e' + (+pair[1] - precision));\n        }\n        return func(number);\n      };\n    }\n\n    /**\n     * Creates a set object of `values`.\n     *\n     * @private\n     * @param {Array} values The values to add to the set.\n     * @returns {Object} Returns the new set.\n     */\n    var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n      return new Set(values);\n    };\n\n    /**\n     * Creates a `_.toPairs` or `_.toPairsIn` function.\n     *\n     * @private\n     * @param {Function} keysFunc The function to get the keys of a given object.\n     * @returns {Function} Returns the new pairs function.\n     */\n    function createToPairs(keysFunc) {\n      return function(object) {\n        var tag = getTag(object);\n        if (tag == mapTag) {\n          return mapToArray(object);\n        }\n        if (tag == setTag) {\n          return setToPairs(object);\n        }\n        return baseToPairs(object, keysFunc(object));\n      };\n    }\n\n    /**\n     * Creates a function that either curries or invokes `func` with optional\n     * `this` binding and partially applied arguments.\n     *\n     * @private\n     * @param {Function|string} func The function or method name to wrap.\n     * @param {number} bitmask The bitmask flags.\n     *    1 - `_.bind`\n     *    2 - `_.bindKey`\n     *    4 - `_.curry` or `_.curryRight` of a bound function\n     *    8 - `_.curry`\n     *   16 - `_.curryRight`\n     *   32 - `_.partial`\n     *   64 - `_.partialRight`\n     *  128 - `_.rearg`\n     *  256 - `_.ary`\n     *  512 - `_.flip`\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {Array} [partials] The arguments to be partially applied.\n     * @param {Array} [holders] The `partials` placeholder indexes.\n     * @param {Array} [argPos] The argument positions of the new function.\n     * @param {number} [ary] The arity cap of `func`.\n     * @param {number} [arity] The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {\n      var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;\n      if (!isBindKey && typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      var length = partials ? partials.length : 0;\n      if (!length) {\n        bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);\n        partials = holders = undefined;\n      }\n      ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);\n      arity = arity === undefined ? arity : toInteger(arity);\n      length -= holders ? holders.length : 0;\n\n      if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {\n        var partialsRight = partials,\n            holdersRight = holders;\n\n        partials = holders = undefined;\n      }\n      var data = isBindKey ? undefined : getData(func);\n\n      var newData = [\n        func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,\n        argPos, ary, arity\n      ];\n\n      if (data) {\n        mergeData(newData, data);\n      }\n      func = newData[0];\n      bitmask = newData[1];\n      thisArg = newData[2];\n      partials = newData[3];\n      holders = newData[4];\n      arity = newData[9] = newData[9] === undefined\n        ? (isBindKey ? 0 : func.length)\n        : nativeMax(newData[9] - length, 0);\n\n      if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {\n        bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);\n      }\n      if (!bitmask || bitmask == WRAP_BIND_FLAG) {\n        var result = createBind(func, bitmask, thisArg);\n      } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {\n        result = createCurry(func, bitmask, arity);\n      } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {\n        result = createPartial(func, bitmask, thisArg, partials);\n      } else {\n        result = createHybrid.apply(undefined, newData);\n      }\n      var setter = data ? baseSetData : setData;\n      return setWrapToString(setter(result, newData), func, bitmask);\n    }\n\n    /**\n     * Used by `_.defaults` to customize its `_.assignIn` use to assign properties\n     * of source objects to the destination object for all destination properties\n     * that resolve to `undefined`.\n     *\n     * @private\n     * @param {*} objValue The destination value.\n     * @param {*} srcValue The source value.\n     * @param {string} key The key of the property to assign.\n     * @param {Object} object The parent object of `objValue`.\n     * @returns {*} Returns the value to assign.\n     */\n    function customDefaultsAssignIn(objValue, srcValue, key, object) {\n      if (objValue === undefined ||\n          (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n        return srcValue;\n      }\n      return objValue;\n    }\n\n    /**\n     * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source\n     * objects into destination objects that are passed thru.\n     *\n     * @private\n     * @param {*} objValue The destination value.\n     * @param {*} srcValue The source value.\n     * @param {string} key The key of the property to merge.\n     * @param {Object} object The parent object of `objValue`.\n     * @param {Object} source The parent object of `srcValue`.\n     * @param {Object} [stack] Tracks traversed source values and their merged\n     *  counterparts.\n     * @returns {*} Returns the value to assign.\n     */\n    function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {\n      if (isObject(objValue) && isObject(srcValue)) {\n        // Recursively merge objects and arrays (susceptible to call stack limits).\n        stack.set(srcValue, objValue);\n        baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);\n        stack['delete'](srcValue);\n      }\n      return objValue;\n    }\n\n    /**\n     * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n     * objects.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @param {string} key The key of the property to inspect.\n     * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n     */\n    function customOmitClone(value) {\n      return isPlainObject(value) ? undefined : value;\n    }\n\n    /**\n     * A specialized version of `baseIsEqualDeep` for arrays with support for\n     * partial deep comparisons.\n     *\n     * @private\n     * @param {Array} array The array to compare.\n     * @param {Array} other The other array to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} stack Tracks traversed `array` and `other` objects.\n     * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n     */\n    function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n          arrLength = array.length,\n          othLength = other.length;\n\n      if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n        return false;\n      }\n      // Check that cyclic values are equal.\n      var arrStacked = stack.get(array);\n      var othStacked = stack.get(other);\n      if (arrStacked && othStacked) {\n        return arrStacked == other && othStacked == array;\n      }\n      var index = -1,\n          result = true,\n          seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n      stack.set(array, other);\n      stack.set(other, array);\n\n      // Ignore non-index properties.\n      while (++index < arrLength) {\n        var arrValue = array[index],\n            othValue = other[index];\n\n        if (customizer) {\n          var compared = isPartial\n            ? customizer(othValue, arrValue, index, other, array, stack)\n            : customizer(arrValue, othValue, index, array, other, stack);\n        }\n        if (compared !== undefined) {\n          if (compared) {\n            continue;\n          }\n          result = false;\n          break;\n        }\n        // Recursively compare arrays (susceptible to call stack limits).\n        if (seen) {\n          if (!arraySome(other, function(othValue, othIndex) {\n                if (!cacheHas(seen, othIndex) &&\n                    (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n                  return seen.push(othIndex);\n                }\n              })) {\n            result = false;\n            break;\n          }\n        } else if (!(\n              arrValue === othValue ||\n                equalFunc(arrValue, othValue, bitmask, customizer, stack)\n            )) {\n          result = false;\n          break;\n        }\n      }\n      stack['delete'](array);\n      stack['delete'](other);\n      return result;\n    }\n\n    /**\n     * A specialized version of `baseIsEqualDeep` for comparing objects of\n     * the same `toStringTag`.\n     *\n     * **Note:** This function only supports comparing values with tags of\n     * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {string} tag The `toStringTag` of the objects to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} stack Tracks traversed `object` and `other` objects.\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n     */\n    function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n      switch (tag) {\n        case dataViewTag:\n          if ((object.byteLength != other.byteLength) ||\n              (object.byteOffset != other.byteOffset)) {\n            return false;\n          }\n          object = object.buffer;\n          other = other.buffer;\n\n        case arrayBufferTag:\n          if ((object.byteLength != other.byteLength) ||\n              !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n            return false;\n          }\n          return true;\n\n        case boolTag:\n        case dateTag:\n        case numberTag:\n          // Coerce booleans to `1` or `0` and dates to milliseconds.\n          // Invalid dates are coerced to `NaN`.\n          return eq(+object, +other);\n\n        case errorTag:\n          return object.name == other.name && object.message == other.message;\n\n        case regexpTag:\n        case stringTag:\n          // Coerce regexes to strings and treat strings, primitives and objects,\n          // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n          // for more details.\n          return object == (other + '');\n\n        case mapTag:\n          var convert = mapToArray;\n\n        case setTag:\n          var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n          convert || (convert = setToArray);\n\n          if (object.size != other.size && !isPartial) {\n            return false;\n          }\n          // Assume cyclic values are equal.\n          var stacked = stack.get(object);\n          if (stacked) {\n            return stacked == other;\n          }\n          bitmask |= COMPARE_UNORDERED_FLAG;\n\n          // Recursively compare objects (susceptible to call stack limits).\n          stack.set(object, other);\n          var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n          stack['delete'](object);\n          return result;\n\n        case symbolTag:\n          if (symbolValueOf) {\n            return symbolValueOf.call(object) == symbolValueOf.call(other);\n          }\n      }\n      return false;\n    }\n\n    /**\n     * A specialized version of `baseIsEqualDeep` for objects with support for\n     * partial deep comparisons.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} stack Tracks traversed `object` and `other` objects.\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n     */\n    function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n          objProps = getAllKeys(object),\n          objLength = objProps.length,\n          othProps = getAllKeys(other),\n          othLength = othProps.length;\n\n      if (objLength != othLength && !isPartial) {\n        return false;\n      }\n      var index = objLength;\n      while (index--) {\n        var key = objProps[index];\n        if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n          return false;\n        }\n      }\n      // Check that cyclic values are equal.\n      var objStacked = stack.get(object);\n      var othStacked = stack.get(other);\n      if (objStacked && othStacked) {\n        return objStacked == other && othStacked == object;\n      }\n      var result = true;\n      stack.set(object, other);\n      stack.set(other, object);\n\n      var skipCtor = isPartial;\n      while (++index < objLength) {\n        key = objProps[index];\n        var objValue = object[key],\n            othValue = other[key];\n\n        if (customizer) {\n          var compared = isPartial\n            ? customizer(othValue, objValue, key, other, object, stack)\n            : customizer(objValue, othValue, key, object, other, stack);\n        }\n        // Recursively compare objects (susceptible to call stack limits).\n        if (!(compared === undefined\n              ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n              : compared\n            )) {\n          result = false;\n          break;\n        }\n        skipCtor || (skipCtor = key == 'constructor');\n      }\n      if (result && !skipCtor) {\n        var objCtor = object.constructor,\n            othCtor = other.constructor;\n\n        // Non `Object` object instances with different constructors are not equal.\n        if (objCtor != othCtor &&\n            ('constructor' in object && 'constructor' in other) &&\n            !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n              typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n          result = false;\n        }\n      }\n      stack['delete'](object);\n      stack['delete'](other);\n      return result;\n    }\n\n    /**\n     * A specialized version of `baseRest` which flattens the rest array.\n     *\n     * @private\n     * @param {Function} func The function to apply a rest parameter to.\n     * @returns {Function} Returns the new function.\n     */\n    function flatRest(func) {\n      return setToString(overRest(func, undefined, flatten), func + '');\n    }\n\n    /**\n     * Creates an array of own enumerable property names and symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names and symbols.\n     */\n    function getAllKeys(object) {\n      return baseGetAllKeys(object, keys, getSymbols);\n    }\n\n    /**\n     * Creates an array of own and inherited enumerable property names and\n     * symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names and symbols.\n     */\n    function getAllKeysIn(object) {\n      return baseGetAllKeys(object, keysIn, getSymbolsIn);\n    }\n\n    /**\n     * Gets metadata for `func`.\n     *\n     * @private\n     * @param {Function} func The function to query.\n     * @returns {*} Returns the metadata for `func`.\n     */\n    var getData = !metaMap ? noop : function(func) {\n      return metaMap.get(func);\n    };\n\n    /**\n     * Gets the name of `func`.\n     *\n     * @private\n     * @param {Function} func The function to query.\n     * @returns {string} Returns the function name.\n     */\n    function getFuncName(func) {\n      var result = (func.name + ''),\n          array = realNames[result],\n          length = hasOwnProperty.call(realNames, result) ? array.length : 0;\n\n      while (length--) {\n        var data = array[length],\n            otherFunc = data.func;\n        if (otherFunc == null || otherFunc == func) {\n          return data.name;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Gets the argument placeholder value for `func`.\n     *\n     * @private\n     * @param {Function} func The function to inspect.\n     * @returns {*} Returns the placeholder value.\n     */\n    function getHolder(func) {\n      var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;\n      return object.placeholder;\n    }\n\n    /**\n     * Gets the appropriate \"iteratee\" function. If `_.iteratee` is customized,\n     * this function returns the custom method, otherwise it returns `baseIteratee`.\n     * If arguments are provided, the chosen function is invoked with them and\n     * its result is returned.\n     *\n     * @private\n     * @param {*} [value] The value to convert to an iteratee.\n     * @param {number} [arity] The arity of the created iteratee.\n     * @returns {Function} Returns the chosen function or its result.\n     */\n    function getIteratee() {\n      var result = lodash.iteratee || iteratee;\n      result = result === iteratee ? baseIteratee : result;\n      return arguments.length ? result(arguments[0], arguments[1]) : result;\n    }\n\n    /**\n     * Gets the data for `map`.\n     *\n     * @private\n     * @param {Object} map The map to query.\n     * @param {string} key The reference key.\n     * @returns {*} Returns the map data.\n     */\n    function getMapData(map, key) {\n      var data = map.__data__;\n      return isKeyable(key)\n        ? data[typeof key == 'string' ? 'string' : 'hash']\n        : data.map;\n    }\n\n    /**\n     * Gets the property names, values, and compare flags of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the match data of `object`.\n     */\n    function getMatchData(object) {\n      var result = keys(object),\n          length = result.length;\n\n      while (length--) {\n        var key = result[length],\n            value = object[key];\n\n        result[length] = [key, value, isStrictComparable(value)];\n      }\n      return result;\n    }\n\n    /**\n     * Gets the native function at `key` of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {string} key The key of the method to get.\n     * @returns {*} Returns the function if it's native, else `undefined`.\n     */\n    function getNative(object, key) {\n      var value = getValue(object, key);\n      return baseIsNative(value) ? value : undefined;\n    }\n\n    /**\n     * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @returns {string} Returns the raw `toStringTag`.\n     */\n    function getRawTag(value) {\n      var isOwn = hasOwnProperty.call(value, symToStringTag),\n          tag = value[symToStringTag];\n\n      try {\n        value[symToStringTag] = undefined;\n        var unmasked = true;\n      } catch (e) {}\n\n      var result = nativeObjectToString.call(value);\n      if (unmasked) {\n        if (isOwn) {\n          value[symToStringTag] = tag;\n        } else {\n          delete value[symToStringTag];\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Creates an array of the own enumerable symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of symbols.\n     */\n    var getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n      if (object == null) {\n        return [];\n      }\n      object = Object(object);\n      return arrayFilter(nativeGetSymbols(object), function(symbol) {\n        return propertyIsEnumerable.call(object, symbol);\n      });\n    };\n\n    /**\n     * Creates an array of the own and inherited enumerable symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of symbols.\n     */\n    var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n      var result = [];\n      while (object) {\n        arrayPush(result, getSymbols(object));\n        object = getPrototype(object);\n      }\n      return result;\n    };\n\n    /**\n     * Gets the `toStringTag` of `value`.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @returns {string} Returns the `toStringTag`.\n     */\n    var getTag = baseGetTag;\n\n    // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\n    if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n        (Map && getTag(new Map) != mapTag) ||\n        (Promise && getTag(Promise.resolve()) != promiseTag) ||\n        (Set && getTag(new Set) != setTag) ||\n        (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n      getTag = function(value) {\n        var result = baseGetTag(value),\n            Ctor = result == objectTag ? value.constructor : undefined,\n            ctorString = Ctor ? toSource(Ctor) : '';\n\n        if (ctorString) {\n          switch (ctorString) {\n            case dataViewCtorString: return dataViewTag;\n            case mapCtorString: return mapTag;\n            case promiseCtorString: return promiseTag;\n            case setCtorString: return setTag;\n            case weakMapCtorString: return weakMapTag;\n          }\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Gets the view, applying any `transforms` to the `start` and `end` positions.\n     *\n     * @private\n     * @param {number} start The start of the view.\n     * @param {number} end The end of the view.\n     * @param {Array} transforms The transformations to apply to the view.\n     * @returns {Object} Returns an object containing the `start` and `end`\n     *  positions of the view.\n     */\n    function getView(start, end, transforms) {\n      var index = -1,\n          length = transforms.length;\n\n      while (++index < length) {\n        var data = transforms[index],\n            size = data.size;\n\n        switch (data.type) {\n          case 'drop':      start += size; break;\n          case 'dropRight': end -= size; break;\n          case 'take':      end = nativeMin(end, start + size); break;\n          case 'takeRight': start = nativeMax(start, end - size); break;\n        }\n      }\n      return { 'start': start, 'end': end };\n    }\n\n    /**\n     * Extracts wrapper details from the `source` body comment.\n     *\n     * @private\n     * @param {string} source The source to inspect.\n     * @returns {Array} Returns the wrapper details.\n     */\n    function getWrapDetails(source) {\n      var match = source.match(reWrapDetails);\n      return match ? match[1].split(reSplitDetails) : [];\n    }\n\n    /**\n     * Checks if `path` exists on `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path to check.\n     * @param {Function} hasFunc The function to check properties.\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\n     */\n    function hasPath(object, path, hasFunc) {\n      path = castPath(path, object);\n\n      var index = -1,\n          length = path.length,\n          result = false;\n\n      while (++index < length) {\n        var key = toKey(path[index]);\n        if (!(result = object != null && hasFunc(object, key))) {\n          break;\n        }\n        object = object[key];\n      }\n      if (result || ++index != length) {\n        return result;\n      }\n      length = object == null ? 0 : object.length;\n      return !!length && isLength(length) && isIndex(key, length) &&\n        (isArray(object) || isArguments(object));\n    }\n\n    /**\n     * Initializes an array clone.\n     *\n     * @private\n     * @param {Array} array The array to clone.\n     * @returns {Array} Returns the initialized clone.\n     */\n    function initCloneArray(array) {\n      var length = array.length,\n          result = new array.constructor(length);\n\n      // Add properties assigned by `RegExp#exec`.\n      if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n        result.index = array.index;\n        result.input = array.input;\n      }\n      return result;\n    }\n\n    /**\n     * Initializes an object clone.\n     *\n     * @private\n     * @param {Object} object The object to clone.\n     * @returns {Object} Returns the initialized clone.\n     */\n    function initCloneObject(object) {\n      return (typeof object.constructor == 'function' && !isPrototype(object))\n        ? baseCreate(getPrototype(object))\n        : {};\n    }\n\n    /**\n     * Initializes an object clone based on its `toStringTag`.\n     *\n     * **Note:** This function only supports cloning values with tags of\n     * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n     *\n     * @private\n     * @param {Object} object The object to clone.\n     * @param {string} tag The `toStringTag` of the object to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the initialized clone.\n     */\n    function initCloneByTag(object, tag, isDeep) {\n      var Ctor = object.constructor;\n      switch (tag) {\n        case arrayBufferTag:\n          return cloneArrayBuffer(object);\n\n        case boolTag:\n        case dateTag:\n          return new Ctor(+object);\n\n        case dataViewTag:\n          return cloneDataView(object, isDeep);\n\n        case float32Tag: case float64Tag:\n        case int8Tag: case int16Tag: case int32Tag:\n        case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n          return cloneTypedArray(object, isDeep);\n\n        case mapTag:\n          return new Ctor;\n\n        case numberTag:\n        case stringTag:\n          return new Ctor(object);\n\n        case regexpTag:\n          return cloneRegExp(object);\n\n        case setTag:\n          return new Ctor;\n\n        case symbolTag:\n          return cloneSymbol(object);\n      }\n    }\n\n    /**\n     * Inserts wrapper `details` in a comment at the top of the `source` body.\n     *\n     * @private\n     * @param {string} source The source to modify.\n     * @returns {Array} details The details to insert.\n     * @returns {string} Returns the modified source.\n     */\n    function insertWrapDetails(source, details) {\n      var length = details.length;\n      if (!length) {\n        return source;\n      }\n      var lastIndex = length - 1;\n      details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];\n      details = details.join(length > 2 ? ', ' : ' ');\n      return source.replace(reWrapComment, '{\\n/* [wrapped with ' + details + '] */\\n');\n    }\n\n    /**\n     * Checks if `value` is a flattenable `arguments` object or array.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n     */\n    function isFlattenable(value) {\n      return isArray(value) || isArguments(value) ||\n        !!(spreadableSymbol && value && value[spreadableSymbol]);\n    }\n\n    /**\n     * Checks if `value` is a valid array-like index.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n     * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n     */\n    function isIndex(value, length) {\n      var type = typeof value;\n      length = length == null ? MAX_SAFE_INTEGER : length;\n\n      return !!length &&\n        (type == 'number' ||\n          (type != 'symbol' && reIsUint.test(value))) &&\n            (value > -1 && value % 1 == 0 && value < length);\n    }\n\n    /**\n     * Checks if the given arguments are from an iteratee call.\n     *\n     * @private\n     * @param {*} value The potential iteratee value argument.\n     * @param {*} index The potential iteratee index or key argument.\n     * @param {*} object The potential iteratee object argument.\n     * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n     *  else `false`.\n     */\n    function isIterateeCall(value, index, object) {\n      if (!isObject(object)) {\n        return false;\n      }\n      var type = typeof index;\n      if (type == 'number'\n            ? (isArrayLike(object) && isIndex(index, object.length))\n            : (type == 'string' && index in object)\n          ) {\n        return eq(object[index], value);\n      }\n      return false;\n    }\n\n    /**\n     * Checks if `value` is a property name and not a property path.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @param {Object} [object] The object to query keys on.\n     * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n     */\n    function isKey(value, object) {\n      if (isArray(value)) {\n        return false;\n      }\n      var type = typeof value;\n      if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n          value == null || isSymbol(value)) {\n        return true;\n      }\n      return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n        (object != null && value in Object(object));\n    }\n\n    /**\n     * Checks if `value` is suitable for use as unique object key.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n     */\n    function isKeyable(value) {\n      var type = typeof value;\n      return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n        ? (value !== '__proto__')\n        : (value === null);\n    }\n\n    /**\n     * Checks if `func` has a lazy counterpart.\n     *\n     * @private\n     * @param {Function} func The function to check.\n     * @returns {boolean} Returns `true` if `func` has a lazy counterpart,\n     *  else `false`.\n     */\n    function isLaziable(func) {\n      var funcName = getFuncName(func),\n          other = lodash[funcName];\n\n      if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {\n        return false;\n      }\n      if (func === other) {\n        return true;\n      }\n      var data = getData(other);\n      return !!data && func === data[0];\n    }\n\n    /**\n     * Checks if `func` has its source masked.\n     *\n     * @private\n     * @param {Function} func The function to check.\n     * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n     */\n    function isMasked(func) {\n      return !!maskSrcKey && (maskSrcKey in func);\n    }\n\n    /**\n     * Checks if `func` is capable of being masked.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `func` is maskable, else `false`.\n     */\n    var isMaskable = coreJsData ? isFunction : stubFalse;\n\n    /**\n     * Checks if `value` is likely a prototype object.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n     */\n    function isPrototype(value) {\n      var Ctor = value && value.constructor,\n          proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n      return value === proto;\n    }\n\n    /**\n     * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` if suitable for strict\n     *  equality comparisons, else `false`.\n     */\n    function isStrictComparable(value) {\n      return value === value && !isObject(value);\n    }\n\n    /**\n     * A specialized version of `matchesProperty` for source values suitable\n     * for strict equality comparisons, i.e. `===`.\n     *\n     * @private\n     * @param {string} key The key of the property to get.\n     * @param {*} srcValue The value to match.\n     * @returns {Function} Returns the new spec function.\n     */\n    function matchesStrictComparable(key, srcValue) {\n      return function(object) {\n        if (object == null) {\n          return false;\n        }\n        return object[key] === srcValue &&\n          (srcValue !== undefined || (key in Object(object)));\n      };\n    }\n\n    /**\n     * A specialized version of `_.memoize` which clears the memoized function's\n     * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n     *\n     * @private\n     * @param {Function} func The function to have its output memoized.\n     * @returns {Function} Returns the new memoized function.\n     */\n    function memoizeCapped(func) {\n      var result = memoize(func, function(key) {\n        if (cache.size === MAX_MEMOIZE_SIZE) {\n          cache.clear();\n        }\n        return key;\n      });\n\n      var cache = result.cache;\n      return result;\n    }\n\n    /**\n     * Merges the function metadata of `source` into `data`.\n     *\n     * Merging metadata reduces the number of wrappers used to invoke a function.\n     * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`\n     * may be applied regardless of execution order. Methods like `_.ary` and\n     * `_.rearg` modify function arguments, making the order in which they are\n     * executed important, preventing the merging of metadata. However, we make\n     * an exception for a safe combined case where curried functions have `_.ary`\n     * and or `_.rearg` applied.\n     *\n     * @private\n     * @param {Array} data The destination metadata.\n     * @param {Array} source The source metadata.\n     * @returns {Array} Returns `data`.\n     */\n    function mergeData(data, source) {\n      var bitmask = data[1],\n          srcBitmask = source[1],\n          newBitmask = bitmask | srcBitmask,\n          isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);\n\n      var isCombo =\n        ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||\n        ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||\n        ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));\n\n      // Exit early if metadata can't be merged.\n      if (!(isCommon || isCombo)) {\n        return data;\n      }\n      // Use source `thisArg` if available.\n      if (srcBitmask & WRAP_BIND_FLAG) {\n        data[2] = source[2];\n        // Set when currying a bound function.\n        newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;\n      }\n      // Compose partial arguments.\n      var value = source[3];\n      if (value) {\n        var partials = data[3];\n        data[3] = partials ? composeArgs(partials, value, source[4]) : value;\n        data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];\n      }\n      // Compose partial right arguments.\n      value = source[5];\n      if (value) {\n        partials = data[5];\n        data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;\n        data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];\n      }\n      // Use source `argPos` if available.\n      value = source[7];\n      if (value) {\n        data[7] = value;\n      }\n      // Use source `ary` if it's smaller.\n      if (srcBitmask & WRAP_ARY_FLAG) {\n        data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);\n      }\n      // Use source `arity` if one is not provided.\n      if (data[9] == null) {\n        data[9] = source[9];\n      }\n      // Use source `func` and merge bitmasks.\n      data[0] = source[0];\n      data[1] = newBitmask;\n\n      return data;\n    }\n\n    /**\n     * This function is like\n     * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n     * except that it includes inherited enumerable properties.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     */\n    function nativeKeysIn(object) {\n      var result = [];\n      if (object != null) {\n        for (var key in Object(object)) {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Converts `value` to a string using `Object.prototype.toString`.\n     *\n     * @private\n     * @param {*} value The value to convert.\n     * @returns {string} Returns the converted string.\n     */\n    function objectToString(value) {\n      return nativeObjectToString.call(value);\n    }\n\n    /**\n     * A specialized version of `baseRest` which transforms the rest array.\n     *\n     * @private\n     * @param {Function} func The function to apply a rest parameter to.\n     * @param {number} [start=func.length-1] The start position of the rest parameter.\n     * @param {Function} transform The rest array transform.\n     * @returns {Function} Returns the new function.\n     */\n    function overRest(func, start, transform) {\n      start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n      return function() {\n        var args = arguments,\n            index = -1,\n            length = nativeMax(args.length - start, 0),\n            array = Array(length);\n\n        while (++index < length) {\n          array[index] = args[start + index];\n        }\n        index = -1;\n        var otherArgs = Array(start + 1);\n        while (++index < start) {\n          otherArgs[index] = args[index];\n        }\n        otherArgs[start] = transform(array);\n        return apply(func, this, otherArgs);\n      };\n    }\n\n    /**\n     * Gets the parent value at `path` of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array} path The path to get the parent value of.\n     * @returns {*} Returns the parent value.\n     */\n    function parent(object, path) {\n      return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n    }\n\n    /**\n     * Reorder `array` according to the specified indexes where the element at\n     * the first index is assigned as the first element, the element at\n     * the second index is assigned as the second element, and so on.\n     *\n     * @private\n     * @param {Array} array The array to reorder.\n     * @param {Array} indexes The arranged array indexes.\n     * @returns {Array} Returns `array`.\n     */\n    function reorder(array, indexes) {\n      var arrLength = array.length,\n          length = nativeMin(indexes.length, arrLength),\n          oldArray = copyArray(array);\n\n      while (length--) {\n        var index = indexes[length];\n        array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;\n      }\n      return array;\n    }\n\n    /**\n     * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {string} key The key of the property to get.\n     * @returns {*} Returns the property value.\n     */\n    function safeGet(object, key) {\n      if (key === 'constructor' && typeof object[key] === 'function') {\n        return;\n      }\n\n      if (key == '__proto__') {\n        return;\n      }\n\n      return object[key];\n    }\n\n    /**\n     * Sets metadata for `func`.\n     *\n     * **Note:** If this function becomes hot, i.e. is invoked a lot in a short\n     * period of time, it will trip its breaker and transition to an identity\n     * function to avoid garbage collection pauses in V8. See\n     * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)\n     * for more details.\n     *\n     * @private\n     * @param {Function} func The function to associate metadata with.\n     * @param {*} data The metadata.\n     * @returns {Function} Returns `func`.\n     */\n    var setData = shortOut(baseSetData);\n\n    /**\n     * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).\n     *\n     * @private\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @returns {number|Object} Returns the timer id or timeout object.\n     */\n    var setTimeout = ctxSetTimeout || function(func, wait) {\n      return root.setTimeout(func, wait);\n    };\n\n    /**\n     * Sets the `toString` method of `func` to return `string`.\n     *\n     * @private\n     * @param {Function} func The function to modify.\n     * @param {Function} string The `toString` result.\n     * @returns {Function} Returns `func`.\n     */\n    var setToString = shortOut(baseSetToString);\n\n    /**\n     * Sets the `toString` method of `wrapper` to mimic the source of `reference`\n     * with wrapper details in a comment at the top of the source body.\n     *\n     * @private\n     * @param {Function} wrapper The function to modify.\n     * @param {Function} reference The reference function.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @returns {Function} Returns `wrapper`.\n     */\n    function setWrapToString(wrapper, reference, bitmask) {\n      var source = (reference + '');\n      return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));\n    }\n\n    /**\n     * Creates a function that'll short out and invoke `identity` instead\n     * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n     * milliseconds.\n     *\n     * @private\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new shortable function.\n     */\n    function shortOut(func) {\n      var count = 0,\n          lastCalled = 0;\n\n      return function() {\n        var stamp = nativeNow(),\n            remaining = HOT_SPAN - (stamp - lastCalled);\n\n        lastCalled = stamp;\n        if (remaining > 0) {\n          if (++count >= HOT_COUNT) {\n            return arguments[0];\n          }\n        } else {\n          count = 0;\n        }\n        return func.apply(undefined, arguments);\n      };\n    }\n\n    /**\n     * A specialized version of `_.shuffle` which mutates and sets the size of `array`.\n     *\n     * @private\n     * @param {Array} array The array to shuffle.\n     * @param {number} [size=array.length] The size of `array`.\n     * @returns {Array} Returns `array`.\n     */\n    function shuffleSelf(array, size) {\n      var index = -1,\n          length = array.length,\n          lastIndex = length - 1;\n\n      size = size === undefined ? length : size;\n      while (++index < size) {\n        var rand = baseRandom(index, lastIndex),\n            value = array[rand];\n\n        array[rand] = array[index];\n        array[index] = value;\n      }\n      array.length = size;\n      return array;\n    }\n\n    /**\n     * Converts `string` to a property path array.\n     *\n     * @private\n     * @param {string} string The string to convert.\n     * @returns {Array} Returns the property path array.\n     */\n    var stringToPath = memoizeCapped(function(string) {\n      var result = [];\n      if (string.charCodeAt(0) === 46 /* . */) {\n        result.push('');\n      }\n      string.replace(rePropName, function(match, number, quote, subString) {\n        result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n      });\n      return result;\n    });\n\n    /**\n     * Converts `value` to a string key if it's not a string or symbol.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @returns {string|symbol} Returns the key.\n     */\n    function toKey(value) {\n      if (typeof value == 'string' || isSymbol(value)) {\n        return value;\n      }\n      var result = (value + '');\n      return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n    }\n\n    /**\n     * Converts `func` to its source code.\n     *\n     * @private\n     * @param {Function} func The function to convert.\n     * @returns {string} Returns the source code.\n     */\n    function toSource(func) {\n      if (func != null) {\n        try {\n          return funcToString.call(func);\n        } catch (e) {}\n        try {\n          return (func + '');\n        } catch (e) {}\n      }\n      return '';\n    }\n\n    /**\n     * Updates wrapper `details` based on `bitmask` flags.\n     *\n     * @private\n     * @returns {Array} details The details to modify.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @returns {Array} Returns `details`.\n     */\n    function updateWrapDetails(details, bitmask) {\n      arrayEach(wrapFlags, function(pair) {\n        var value = '_.' + pair[0];\n        if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {\n          details.push(value);\n        }\n      });\n      return details.sort();\n    }\n\n    /**\n     * Creates a clone of `wrapper`.\n     *\n     * @private\n     * @param {Object} wrapper The wrapper to clone.\n     * @returns {Object} Returns the cloned wrapper.\n     */\n    function wrapperClone(wrapper) {\n      if (wrapper instanceof LazyWrapper) {\n        return wrapper.clone();\n      }\n      var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);\n      result.__actions__ = copyArray(wrapper.__actions__);\n      result.__index__  = wrapper.__index__;\n      result.__values__ = wrapper.__values__;\n      return result;\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an array of elements split into groups the length of `size`.\n     * If `array` can't be split evenly, the final chunk will be the remaining\n     * elements.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to process.\n     * @param {number} [size=1] The length of each chunk\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the new array of chunks.\n     * @example\n     *\n     * _.chunk(['a', 'b', 'c', 'd'], 2);\n     * // => [['a', 'b'], ['c', 'd']]\n     *\n     * _.chunk(['a', 'b', 'c', 'd'], 3);\n     * // => [['a', 'b', 'c'], ['d']]\n     */\n    function chunk(array, size, guard) {\n      if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {\n        size = 1;\n      } else {\n        size = nativeMax(toInteger(size), 0);\n      }\n      var length = array == null ? 0 : array.length;\n      if (!length || size < 1) {\n        return [];\n      }\n      var index = 0,\n          resIndex = 0,\n          result = Array(nativeCeil(length / size));\n\n      while (index < length) {\n        result[resIndex++] = baseSlice(array, index, (index += size));\n      }\n      return result;\n    }\n\n    /**\n     * Creates an array with all falsey values removed. The values `false`, `null`,\n     * `0`, `\"\"`, `undefined`, and `NaN` are falsey.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to compact.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.compact([0, 1, false, 2, '', 3]);\n     * // => [1, 2, 3]\n     */\n    function compact(array) {\n      var index = -1,\n          length = array == null ? 0 : array.length,\n          resIndex = 0,\n          result = [];\n\n      while (++index < length) {\n        var value = array[index];\n        if (value) {\n          result[resIndex++] = value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Creates a new array concatenating `array` with any additional arrays\n     * and/or values.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to concatenate.\n     * @param {...*} [values] The values to concatenate.\n     * @returns {Array} Returns the new concatenated array.\n     * @example\n     *\n     * var array = [1];\n     * var other = _.concat(array, 2, [3], [[4]]);\n     *\n     * console.log(other);\n     * // => [1, 2, 3, [4]]\n     *\n     * console.log(array);\n     * // => [1]\n     */\n    function concat() {\n      var length = arguments.length;\n      if (!length) {\n        return [];\n      }\n      var args = Array(length - 1),\n          array = arguments[0],\n          index = length;\n\n      while (index--) {\n        args[index - 1] = arguments[index];\n      }\n      return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));\n    }\n\n    /**\n     * Creates an array of `array` values not included in the other given arrays\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons. The order and references of result values are\n     * determined by the first array.\n     *\n     * **Note:** Unlike `_.pullAll`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...Array} [values] The values to exclude.\n     * @returns {Array} Returns the new array of filtered values.\n     * @see _.without, _.xor\n     * @example\n     *\n     * _.difference([2, 1], [2, 3]);\n     * // => [1]\n     */\n    var difference = baseRest(function(array, values) {\n      return isArrayLikeObject(array)\n        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n        : [];\n    });\n\n    /**\n     * This method is like `_.difference` except that it accepts `iteratee` which\n     * is invoked for each element of `array` and `values` to generate the criterion\n     * by which they're compared. The order and references of result values are\n     * determined by the first array. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * **Note:** Unlike `_.pullAllBy`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...Array} [values] The values to exclude.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n     * // => [1.2]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');\n     * // => [{ 'x': 2 }]\n     */\n    var differenceBy = baseRest(function(array, values) {\n      var iteratee = last(values);\n      if (isArrayLikeObject(iteratee)) {\n        iteratee = undefined;\n      }\n      return isArrayLikeObject(array)\n        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2))\n        : [];\n    });\n\n    /**\n     * This method is like `_.difference` except that it accepts `comparator`\n     * which is invoked to compare elements of `array` to `values`. The order and\n     * references of result values are determined by the first array. The comparator\n     * is invoked with two arguments: (arrVal, othVal).\n     *\n     * **Note:** Unlike `_.pullAllWith`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...Array} [values] The values to exclude.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     *\n     * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);\n     * // => [{ 'x': 2, 'y': 1 }]\n     */\n    var differenceWith = baseRest(function(array, values) {\n      var comparator = last(values);\n      if (isArrayLikeObject(comparator)) {\n        comparator = undefined;\n      }\n      return isArrayLikeObject(array)\n        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)\n        : [];\n    });\n\n    /**\n     * Creates a slice of `array` with `n` elements dropped from the beginning.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.5.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to drop.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.drop([1, 2, 3]);\n     * // => [2, 3]\n     *\n     * _.drop([1, 2, 3], 2);\n     * // => [3]\n     *\n     * _.drop([1, 2, 3], 5);\n     * // => []\n     *\n     * _.drop([1, 2, 3], 0);\n     * // => [1, 2, 3]\n     */\n    function drop(array, n, guard) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      return baseSlice(array, n < 0 ? 0 : n, length);\n    }\n\n    /**\n     * Creates a slice of `array` with `n` elements dropped from the end.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to drop.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.dropRight([1, 2, 3]);\n     * // => [1, 2]\n     *\n     * _.dropRight([1, 2, 3], 2);\n     * // => [1]\n     *\n     * _.dropRight([1, 2, 3], 5);\n     * // => []\n     *\n     * _.dropRight([1, 2, 3], 0);\n     * // => [1, 2, 3]\n     */\n    function dropRight(array, n, guard) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      n = length - n;\n      return baseSlice(array, 0, n < 0 ? 0 : n);\n    }\n\n    /**\n     * Creates a slice of `array` excluding elements dropped from the end.\n     * Elements are dropped until `predicate` returns falsey. The predicate is\n     * invoked with three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * _.dropRightWhile(users, function(o) { return !o.active; });\n     * // => objects for ['barney']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });\n     * // => objects for ['barney', 'fred']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.dropRightWhile(users, ['active', false]);\n     * // => objects for ['barney']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.dropRightWhile(users, 'active');\n     * // => objects for ['barney', 'fred', 'pebbles']\n     */\n    function dropRightWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3), true, true)\n        : [];\n    }\n\n    /**\n     * Creates a slice of `array` excluding elements dropped from the beginning.\n     * Elements are dropped until `predicate` returns falsey. The predicate is\n     * invoked with three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * _.dropWhile(users, function(o) { return !o.active; });\n     * // => objects for ['pebbles']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.dropWhile(users, { 'user': 'barney', 'active': false });\n     * // => objects for ['fred', 'pebbles']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.dropWhile(users, ['active', false]);\n     * // => objects for ['pebbles']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.dropWhile(users, 'active');\n     * // => objects for ['barney', 'fred', 'pebbles']\n     */\n    function dropWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3), true)\n        : [];\n    }\n\n    /**\n     * Fills elements of `array` with `value` from `start` up to, but not\n     * including, `end`.\n     *\n     * **Note:** This method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.2.0\n     * @category Array\n     * @param {Array} array The array to fill.\n     * @param {*} value The value to fill `array` with.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _.fill(array, 'a');\n     * console.log(array);\n     * // => ['a', 'a', 'a']\n     *\n     * _.fill(Array(3), 2);\n     * // => [2, 2, 2]\n     *\n     * _.fill([4, 6, 8, 10], '*', 1, 3);\n     * // => [4, '*', '*', 10]\n     */\n    function fill(array, value, start, end) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {\n        start = 0;\n        end = length;\n      }\n      return baseFill(array, value, start, end);\n    }\n\n    /**\n     * This method is like `_.find` except that it returns the index of the first\n     * element `predicate` returns truthy for instead of the element itself.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {number} Returns the index of the found element, else `-1`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * _.findIndex(users, function(o) { return o.user == 'barney'; });\n     * // => 0\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findIndex(users, { 'user': 'fred', 'active': false });\n     * // => 1\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findIndex(users, ['active', false]);\n     * // => 0\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findIndex(users, 'active');\n     * // => 2\n     */\n    function findIndex(array, predicate, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = fromIndex == null ? 0 : toInteger(fromIndex);\n      if (index < 0) {\n        index = nativeMax(length + index, 0);\n      }\n      return baseFindIndex(array, getIteratee(predicate, 3), index);\n    }\n\n    /**\n     * This method is like `_.findIndex` except that it iterates over elements\n     * of `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=array.length-1] The index to search from.\n     * @returns {number} Returns the index of the found element, else `-1`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });\n     * // => 2\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findLastIndex(users, { 'user': 'barney', 'active': true });\n     * // => 0\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findLastIndex(users, ['active', false]);\n     * // => 2\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findLastIndex(users, 'active');\n     * // => 0\n     */\n    function findLastIndex(array, predicate, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = length - 1;\n      if (fromIndex !== undefined) {\n        index = toInteger(fromIndex);\n        index = fromIndex < 0\n          ? nativeMax(length + index, 0)\n          : nativeMin(index, length - 1);\n      }\n      return baseFindIndex(array, getIteratee(predicate, 3), index, true);\n    }\n\n    /**\n     * Flattens `array` a single level deep.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to flatten.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * _.flatten([1, [2, [3, [4]], 5]]);\n     * // => [1, 2, [3, [4]], 5]\n     */\n    function flatten(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseFlatten(array, 1) : [];\n    }\n\n    /**\n     * Recursively flattens `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to flatten.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * _.flattenDeep([1, [2, [3, [4]], 5]]);\n     * // => [1, 2, 3, 4, 5]\n     */\n    function flattenDeep(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseFlatten(array, INFINITY) : [];\n    }\n\n    /**\n     * Recursively flatten `array` up to `depth` times.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.4.0\n     * @category Array\n     * @param {Array} array The array to flatten.\n     * @param {number} [depth=1] The maximum recursion depth.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * var array = [1, [2, [3, [4]], 5]];\n     *\n     * _.flattenDepth(array, 1);\n     * // => [1, 2, [3, [4]], 5]\n     *\n     * _.flattenDepth(array, 2);\n     * // => [1, 2, 3, [4], 5]\n     */\n    function flattenDepth(array, depth) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      depth = depth === undefined ? 1 : toInteger(depth);\n      return baseFlatten(array, depth);\n    }\n\n    /**\n     * The inverse of `_.toPairs`; this method returns an object composed\n     * from key-value `pairs`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} pairs The key-value pairs.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * _.fromPairs([['a', 1], ['b', 2]]);\n     * // => { 'a': 1, 'b': 2 }\n     */\n    function fromPairs(pairs) {\n      var index = -1,\n          length = pairs == null ? 0 : pairs.length,\n          result = {};\n\n      while (++index < length) {\n        var pair = pairs[index];\n        result[pair[0]] = pair[1];\n      }\n      return result;\n    }\n\n    /**\n     * Gets the first element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @alias first\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {*} Returns the first element of `array`.\n     * @example\n     *\n     * _.head([1, 2, 3]);\n     * // => 1\n     *\n     * _.head([]);\n     * // => undefined\n     */\n    function head(array) {\n      return (array && array.length) ? array[0] : undefined;\n    }\n\n    /**\n     * Gets the index at which the first occurrence of `value` is found in `array`\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons. If `fromIndex` is negative, it's used as the\n     * offset from the end of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.indexOf([1, 2, 1, 2], 2);\n     * // => 1\n     *\n     * // Search from the `fromIndex`.\n     * _.indexOf([1, 2, 1, 2], 2, 2);\n     * // => 3\n     */\n    function indexOf(array, value, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = fromIndex == null ? 0 : toInteger(fromIndex);\n      if (index < 0) {\n        index = nativeMax(length + index, 0);\n      }\n      return baseIndexOf(array, value, index);\n    }\n\n    /**\n     * Gets all but the last element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.initial([1, 2, 3]);\n     * // => [1, 2]\n     */\n    function initial(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseSlice(array, 0, -1) : [];\n    }\n\n    /**\n     * Creates an array of unique values that are included in all given arrays\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons. The order and references of result values are\n     * determined by the first array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @returns {Array} Returns the new array of intersecting values.\n     * @example\n     *\n     * _.intersection([2, 1], [2, 3]);\n     * // => [2]\n     */\n    var intersection = baseRest(function(arrays) {\n      var mapped = arrayMap(arrays, castArrayLikeObject);\n      return (mapped.length && mapped[0] === arrays[0])\n        ? baseIntersection(mapped)\n        : [];\n    });\n\n    /**\n     * This method is like `_.intersection` except that it accepts `iteratee`\n     * which is invoked for each element of each `arrays` to generate the criterion\n     * by which they're compared. The order and references of result values are\n     * determined by the first array. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of intersecting values.\n     * @example\n     *\n     * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n     * // => [2.1]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }]\n     */\n    var intersectionBy = baseRest(function(arrays) {\n      var iteratee = last(arrays),\n          mapped = arrayMap(arrays, castArrayLikeObject);\n\n      if (iteratee === last(mapped)) {\n        iteratee = undefined;\n      } else {\n        mapped.pop();\n      }\n      return (mapped.length && mapped[0] === arrays[0])\n        ? baseIntersection(mapped, getIteratee(iteratee, 2))\n        : [];\n    });\n\n    /**\n     * This method is like `_.intersection` except that it accepts `comparator`\n     * which is invoked to compare elements of `arrays`. The order and references\n     * of result values are determined by the first array. The comparator is\n     * invoked with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of intersecting values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.intersectionWith(objects, others, _.isEqual);\n     * // => [{ 'x': 1, 'y': 2 }]\n     */\n    var intersectionWith = baseRest(function(arrays) {\n      var comparator = last(arrays),\n          mapped = arrayMap(arrays, castArrayLikeObject);\n\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      if (comparator) {\n        mapped.pop();\n      }\n      return (mapped.length && mapped[0] === arrays[0])\n        ? baseIntersection(mapped, undefined, comparator)\n        : [];\n    });\n\n    /**\n     * Converts all elements in `array` into a string separated by `separator`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to convert.\n     * @param {string} [separator=','] The element separator.\n     * @returns {string} Returns the joined string.\n     * @example\n     *\n     * _.join(['a', 'b', 'c'], '~');\n     * // => 'a~b~c'\n     */\n    function join(array, separator) {\n      return array == null ? '' : nativeJoin.call(array, separator);\n    }\n\n    /**\n     * Gets the last element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {*} Returns the last element of `array`.\n     * @example\n     *\n     * _.last([1, 2, 3]);\n     * // => 3\n     */\n    function last(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? array[length - 1] : undefined;\n    }\n\n    /**\n     * This method is like `_.indexOf` except that it iterates over elements of\n     * `array` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=array.length-1] The index to search from.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.lastIndexOf([1, 2, 1, 2], 2);\n     * // => 3\n     *\n     * // Search from the `fromIndex`.\n     * _.lastIndexOf([1, 2, 1, 2], 2, 2);\n     * // => 1\n     */\n    function lastIndexOf(array, value, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = length;\n      if (fromIndex !== undefined) {\n        index = toInteger(fromIndex);\n        index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);\n      }\n      return value === value\n        ? strictLastIndexOf(array, value, index)\n        : baseFindIndex(array, baseIsNaN, index, true);\n    }\n\n    /**\n     * Gets the element at index `n` of `array`. If `n` is negative, the nth\n     * element from the end is returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.11.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=0] The index of the element to return.\n     * @returns {*} Returns the nth element of `array`.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'd'];\n     *\n     * _.nth(array, 1);\n     * // => 'b'\n     *\n     * _.nth(array, -2);\n     * // => 'c';\n     */\n    function nth(array, n) {\n      return (array && array.length) ? baseNth(array, toInteger(n)) : undefined;\n    }\n\n    /**\n     * Removes all given values from `array` using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`\n     * to remove elements from an array by predicate.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {...*} [values] The values to remove.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n     *\n     * _.pull(array, 'a', 'c');\n     * console.log(array);\n     * // => ['b', 'b']\n     */\n    var pull = baseRest(pullAll);\n\n    /**\n     * This method is like `_.pull` except that it accepts an array of values to remove.\n     *\n     * **Note:** Unlike `_.difference`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n     *\n     * _.pullAll(array, ['a', 'c']);\n     * console.log(array);\n     * // => ['b', 'b']\n     */\n    function pullAll(array, values) {\n      return (array && array.length && values && values.length)\n        ? basePullAll(array, values)\n        : array;\n    }\n\n    /**\n     * This method is like `_.pullAll` except that it accepts `iteratee` which is\n     * invoked for each element of `array` and `values` to generate the criterion\n     * by which they're compared. The iteratee is invoked with one argument: (value).\n     *\n     * **Note:** Unlike `_.differenceBy`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];\n     *\n     * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');\n     * console.log(array);\n     * // => [{ 'x': 2 }]\n     */\n    function pullAllBy(array, values, iteratee) {\n      return (array && array.length && values && values.length)\n        ? basePullAll(array, values, getIteratee(iteratee, 2))\n        : array;\n    }\n\n    /**\n     * This method is like `_.pullAll` except that it accepts `comparator` which\n     * is invoked to compare elements of `array` to `values`. The comparator is\n     * invoked with two arguments: (arrVal, othVal).\n     *\n     * **Note:** Unlike `_.differenceWith`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.6.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];\n     *\n     * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);\n     * console.log(array);\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]\n     */\n    function pullAllWith(array, values, comparator) {\n      return (array && array.length && values && values.length)\n        ? basePullAll(array, values, undefined, comparator)\n        : array;\n    }\n\n    /**\n     * Removes elements from `array` corresponding to `indexes` and returns an\n     * array of removed elements.\n     *\n     * **Note:** Unlike `_.at`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {...(number|number[])} [indexes] The indexes of elements to remove.\n     * @returns {Array} Returns the new array of removed elements.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'd'];\n     * var pulled = _.pullAt(array, [1, 3]);\n     *\n     * console.log(array);\n     * // => ['a', 'c']\n     *\n     * console.log(pulled);\n     * // => ['b', 'd']\n     */\n    var pullAt = flatRest(function(array, indexes) {\n      var length = array == null ? 0 : array.length,\n          result = baseAt(array, indexes);\n\n      basePullAt(array, arrayMap(indexes, function(index) {\n        return isIndex(index, length) ? +index : index;\n      }).sort(compareAscending));\n\n      return result;\n    });\n\n    /**\n     * Removes all elements from `array` that `predicate` returns truthy for\n     * and returns an array of the removed elements. The predicate is invoked\n     * with three arguments: (value, index, array).\n     *\n     * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`\n     * to pull elements from an array by value.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new array of removed elements.\n     * @example\n     *\n     * var array = [1, 2, 3, 4];\n     * var evens = _.remove(array, function(n) {\n     *   return n % 2 == 0;\n     * });\n     *\n     * console.log(array);\n     * // => [1, 3]\n     *\n     * console.log(evens);\n     * // => [2, 4]\n     */\n    function remove(array, predicate) {\n      var result = [];\n      if (!(array && array.length)) {\n        return result;\n      }\n      var index = -1,\n          indexes = [],\n          length = array.length;\n\n      predicate = getIteratee(predicate, 3);\n      while (++index < length) {\n        var value = array[index];\n        if (predicate(value, index, array)) {\n          result.push(value);\n          indexes.push(index);\n        }\n      }\n      basePullAt(array, indexes);\n      return result;\n    }\n\n    /**\n     * Reverses `array` so that the first element becomes the last, the second\n     * element becomes the second to last, and so on.\n     *\n     * **Note:** This method mutates `array` and is based on\n     * [`Array#reverse`](https://mdn.io/Array/reverse).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _.reverse(array);\n     * // => [3, 2, 1]\n     *\n     * console.log(array);\n     * // => [3, 2, 1]\n     */\n    function reverse(array) {\n      return array == null ? array : nativeReverse.call(array);\n    }\n\n    /**\n     * Creates a slice of `array` from `start` up to, but not including, `end`.\n     *\n     * **Note:** This method is used instead of\n     * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are\n     * returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to slice.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns the slice of `array`.\n     */\n    function slice(array, start, end) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\n        start = 0;\n        end = length;\n      }\n      else {\n        start = start == null ? 0 : toInteger(start);\n        end = end === undefined ? length : toInteger(end);\n      }\n      return baseSlice(array, start, end);\n    }\n\n    /**\n     * Uses a binary search to determine the lowest index at which `value`\n     * should be inserted into `array` in order to maintain its sort order.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * _.sortedIndex([30, 50], 40);\n     * // => 1\n     */\n    function sortedIndex(array, value) {\n      return baseSortedIndex(array, value);\n    }\n\n    /**\n     * This method is like `_.sortedIndex` except that it accepts `iteratee`\n     * which is invoked for `value` and each element of `array` to compute their\n     * sort ranking. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * var objects = [{ 'x': 4 }, { 'x': 5 }];\n     *\n     * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n     * // => 0\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.sortedIndexBy(objects, { 'x': 4 }, 'x');\n     * // => 0\n     */\n    function sortedIndexBy(array, value, iteratee) {\n      return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));\n    }\n\n    /**\n     * This method is like `_.indexOf` except that it performs a binary\n     * search on a sorted `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.sortedIndexOf([4, 5, 5, 5, 6], 5);\n     * // => 1\n     */\n    function sortedIndexOf(array, value) {\n      var length = array == null ? 0 : array.length;\n      if (length) {\n        var index = baseSortedIndex(array, value);\n        if (index < length && eq(array[index], value)) {\n          return index;\n        }\n      }\n      return -1;\n    }\n\n    /**\n     * This method is like `_.sortedIndex` except that it returns the highest\n     * index at which `value` should be inserted into `array` in order to\n     * maintain its sort order.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * _.sortedLastIndex([4, 5, 5, 5, 6], 5);\n     * // => 4\n     */\n    function sortedLastIndex(array, value) {\n      return baseSortedIndex(array, value, true);\n    }\n\n    /**\n     * This method is like `_.sortedLastIndex` except that it accepts `iteratee`\n     * which is invoked for `value` and each element of `array` to compute their\n     * sort ranking. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * var objects = [{ 'x': 4 }, { 'x': 5 }];\n     *\n     * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n     * // => 1\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');\n     * // => 1\n     */\n    function sortedLastIndexBy(array, value, iteratee) {\n      return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);\n    }\n\n    /**\n     * This method is like `_.lastIndexOf` except that it performs a binary\n     * search on a sorted `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);\n     * // => 3\n     */\n    function sortedLastIndexOf(array, value) {\n      var length = array == null ? 0 : array.length;\n      if (length) {\n        var index = baseSortedIndex(array, value, true) - 1;\n        if (eq(array[index], value)) {\n          return index;\n        }\n      }\n      return -1;\n    }\n\n    /**\n     * This method is like `_.uniq` except that it's designed and optimized\n     * for sorted arrays.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.sortedUniq([1, 1, 2]);\n     * // => [1, 2]\n     */\n    function sortedUniq(array) {\n      return (array && array.length)\n        ? baseSortedUniq(array)\n        : [];\n    }\n\n    /**\n     * This method is like `_.uniqBy` except that it's designed and optimized\n     * for sorted arrays.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);\n     * // => [1.1, 2.3]\n     */\n    function sortedUniqBy(array, iteratee) {\n      return (array && array.length)\n        ? baseSortedUniq(array, getIteratee(iteratee, 2))\n        : [];\n    }\n\n    /**\n     * Gets all but the first element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.tail([1, 2, 3]);\n     * // => [2, 3]\n     */\n    function tail(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseSlice(array, 1, length) : [];\n    }\n\n    /**\n     * Creates a slice of `array` with `n` elements taken from the beginning.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to take.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.take([1, 2, 3]);\n     * // => [1]\n     *\n     * _.take([1, 2, 3], 2);\n     * // => [1, 2]\n     *\n     * _.take([1, 2, 3], 5);\n     * // => [1, 2, 3]\n     *\n     * _.take([1, 2, 3], 0);\n     * // => []\n     */\n    function take(array, n, guard) {\n      if (!(array && array.length)) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      return baseSlice(array, 0, n < 0 ? 0 : n);\n    }\n\n    /**\n     * Creates a slice of `array` with `n` elements taken from the end.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to take.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.takeRight([1, 2, 3]);\n     * // => [3]\n     *\n     * _.takeRight([1, 2, 3], 2);\n     * // => [2, 3]\n     *\n     * _.takeRight([1, 2, 3], 5);\n     * // => [1, 2, 3]\n     *\n     * _.takeRight([1, 2, 3], 0);\n     * // => []\n     */\n    function takeRight(array, n, guard) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      n = length - n;\n      return baseSlice(array, n < 0 ? 0 : n, length);\n    }\n\n    /**\n     * Creates a slice of `array` with elements taken from the end. Elements are\n     * taken until `predicate` returns falsey. The predicate is invoked with\n     * three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * _.takeRightWhile(users, function(o) { return !o.active; });\n     * // => objects for ['fred', 'pebbles']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });\n     * // => objects for ['pebbles']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.takeRightWhile(users, ['active', false]);\n     * // => objects for ['fred', 'pebbles']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.takeRightWhile(users, 'active');\n     * // => []\n     */\n    function takeRightWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3), false, true)\n        : [];\n    }\n\n    /**\n     * Creates a slice of `array` with elements taken from the beginning. Elements\n     * are taken until `predicate` returns falsey. The predicate is invoked with\n     * three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * _.takeWhile(users, function(o) { return !o.active; });\n     * // => objects for ['barney', 'fred']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.takeWhile(users, { 'user': 'barney', 'active': false });\n     * // => objects for ['barney']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.takeWhile(users, ['active', false]);\n     * // => objects for ['barney', 'fred']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.takeWhile(users, 'active');\n     * // => []\n     */\n    function takeWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3))\n        : [];\n    }\n\n    /**\n     * Creates an array of unique values, in order, from all given arrays using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @returns {Array} Returns the new array of combined values.\n     * @example\n     *\n     * _.union([2], [1, 2]);\n     * // => [2, 1]\n     */\n    var union = baseRest(function(arrays) {\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n    });\n\n    /**\n     * This method is like `_.union` except that it accepts `iteratee` which is\n     * invoked for each element of each `arrays` to generate the criterion by\n     * which uniqueness is computed. Result values are chosen from the first\n     * array in which the value occurs. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of combined values.\n     * @example\n     *\n     * _.unionBy([2.1], [1.2, 2.3], Math.floor);\n     * // => [2.1, 1.2]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }, { 'x': 2 }]\n     */\n    var unionBy = baseRest(function(arrays) {\n      var iteratee = last(arrays);\n      if (isArrayLikeObject(iteratee)) {\n        iteratee = undefined;\n      }\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));\n    });\n\n    /**\n     * This method is like `_.union` except that it accepts `comparator` which\n     * is invoked to compare elements of `arrays`. Result values are chosen from\n     * the first array in which the value occurs. The comparator is invoked\n     * with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of combined values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.unionWith(objects, others, _.isEqual);\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n     */\n    var unionWith = baseRest(function(arrays) {\n      var comparator = last(arrays);\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);\n    });\n\n    /**\n     * Creates a duplicate-free version of an array, using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons, in which only the first occurrence of each element\n     * is kept. The order of result values is determined by the order they occur\n     * in the array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.uniq([2, 1, 2]);\n     * // => [2, 1]\n     */\n    function uniq(array) {\n      return (array && array.length) ? baseUniq(array) : [];\n    }\n\n    /**\n     * This method is like `_.uniq` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the criterion by which\n     * uniqueness is computed. The order of result values is determined by the\n     * order they occur in the array. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n     * // => [2.1, 1.2]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }, { 'x': 2 }]\n     */\n    function uniqBy(array, iteratee) {\n      return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : [];\n    }\n\n    /**\n     * This method is like `_.uniq` except that it accepts `comparator` which\n     * is invoked to compare elements of `array`. The order of result values is\n     * determined by the order they occur in the array.The comparator is invoked\n     * with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.uniqWith(objects, _.isEqual);\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]\n     */\n    function uniqWith(array, comparator) {\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      return (array && array.length) ? baseUniq(array, undefined, comparator) : [];\n    }\n\n    /**\n     * This method is like `_.zip` except that it accepts an array of grouped\n     * elements and creates an array regrouping the elements to their pre-zip\n     * configuration.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.2.0\n     * @category Array\n     * @param {Array} array The array of grouped elements to process.\n     * @returns {Array} Returns the new array of regrouped elements.\n     * @example\n     *\n     * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);\n     * // => [['a', 1, true], ['b', 2, false]]\n     *\n     * _.unzip(zipped);\n     * // => [['a', 'b'], [1, 2], [true, false]]\n     */\n    function unzip(array) {\n      if (!(array && array.length)) {\n        return [];\n      }\n      var length = 0;\n      array = arrayFilter(array, function(group) {\n        if (isArrayLikeObject(group)) {\n          length = nativeMax(group.length, length);\n          return true;\n        }\n      });\n      return baseTimes(length, function(index) {\n        return arrayMap(array, baseProperty(index));\n      });\n    }\n\n    /**\n     * This method is like `_.unzip` except that it accepts `iteratee` to specify\n     * how regrouped values should be combined. The iteratee is invoked with the\n     * elements of each group: (...group).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.8.0\n     * @category Array\n     * @param {Array} array The array of grouped elements to process.\n     * @param {Function} [iteratee=_.identity] The function to combine\n     *  regrouped values.\n     * @returns {Array} Returns the new array of regrouped elements.\n     * @example\n     *\n     * var zipped = _.zip([1, 2], [10, 20], [100, 200]);\n     * // => [[1, 10, 100], [2, 20, 200]]\n     *\n     * _.unzipWith(zipped, _.add);\n     * // => [3, 30, 300]\n     */\n    function unzipWith(array, iteratee) {\n      if (!(array && array.length)) {\n        return [];\n      }\n      var result = unzip(array);\n      if (iteratee == null) {\n        return result;\n      }\n      return arrayMap(result, function(group) {\n        return apply(iteratee, undefined, group);\n      });\n    }\n\n    /**\n     * Creates an array excluding all given values using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * **Note:** Unlike `_.pull`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...*} [values] The values to exclude.\n     * @returns {Array} Returns the new array of filtered values.\n     * @see _.difference, _.xor\n     * @example\n     *\n     * _.without([2, 1, 2, 3], 1, 2);\n     * // => [3]\n     */\n    var without = baseRest(function(array, values) {\n      return isArrayLikeObject(array)\n        ? baseDifference(array, values)\n        : [];\n    });\n\n    /**\n     * Creates an array of unique values that is the\n     * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)\n     * of the given arrays. The order of result values is determined by the order\n     * they occur in the arrays.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @returns {Array} Returns the new array of filtered values.\n     * @see _.difference, _.without\n     * @example\n     *\n     * _.xor([2, 1], [2, 3]);\n     * // => [1, 3]\n     */\n    var xor = baseRest(function(arrays) {\n      return baseXor(arrayFilter(arrays, isArrayLikeObject));\n    });\n\n    /**\n     * This method is like `_.xor` except that it accepts `iteratee` which is\n     * invoked for each element of each `arrays` to generate the criterion by\n     * which by which they're compared. The order of result values is determined\n     * by the order they occur in the arrays. The iteratee is invoked with one\n     * argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n     * // => [1.2, 3.4]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 2 }]\n     */\n    var xorBy = baseRest(function(arrays) {\n      var iteratee = last(arrays);\n      if (isArrayLikeObject(iteratee)) {\n        iteratee = undefined;\n      }\n      return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));\n    });\n\n    /**\n     * This method is like `_.xor` except that it accepts `comparator` which is\n     * invoked to compare elements of `arrays`. The order of result values is\n     * determined by the order they occur in the arrays. The comparator is invoked\n     * with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.xorWith(objects, others, _.isEqual);\n     * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n     */\n    var xorWith = baseRest(function(arrays) {\n      var comparator = last(arrays);\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);\n    });\n\n    /**\n     * Creates an array of grouped elements, the first of which contains the\n     * first elements of the given arrays, the second of which contains the\n     * second elements of the given arrays, and so on.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to process.\n     * @returns {Array} Returns the new array of grouped elements.\n     * @example\n     *\n     * _.zip(['a', 'b'], [1, 2], [true, false]);\n     * // => [['a', 1, true], ['b', 2, false]]\n     */\n    var zip = baseRest(unzip);\n\n    /**\n     * This method is like `_.fromPairs` except that it accepts two arrays,\n     * one of property identifiers and one of corresponding values.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.4.0\n     * @category Array\n     * @param {Array} [props=[]] The property identifiers.\n     * @param {Array} [values=[]] The property values.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * _.zipObject(['a', 'b'], [1, 2]);\n     * // => { 'a': 1, 'b': 2 }\n     */\n    function zipObject(props, values) {\n      return baseZipObject(props || [], values || [], assignValue);\n    }\n\n    /**\n     * This method is like `_.zipObject` except that it supports property paths.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.1.0\n     * @category Array\n     * @param {Array} [props=[]] The property identifiers.\n     * @param {Array} [values=[]] The property values.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);\n     * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }\n     */\n    function zipObjectDeep(props, values) {\n      return baseZipObject(props || [], values || [], baseSet);\n    }\n\n    /**\n     * This method is like `_.zip` except that it accepts `iteratee` to specify\n     * how grouped values should be combined. The iteratee is invoked with the\n     * elements of each group: (...group).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.8.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to process.\n     * @param {Function} [iteratee=_.identity] The function to combine\n     *  grouped values.\n     * @returns {Array} Returns the new array of grouped elements.\n     * @example\n     *\n     * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {\n     *   return a + b + c;\n     * });\n     * // => [111, 222]\n     */\n    var zipWith = baseRest(function(arrays) {\n      var length = arrays.length,\n          iteratee = length > 1 ? arrays[length - 1] : undefined;\n\n      iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;\n      return unzipWith(arrays, iteratee);\n    });\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a `lodash` wrapper instance that wraps `value` with explicit method\n     * chain sequences enabled. The result of such sequences must be unwrapped\n     * with `_#value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.3.0\n     * @category Seq\n     * @param {*} value The value to wrap.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36 },\n     *   { 'user': 'fred',    'age': 40 },\n     *   { 'user': 'pebbles', 'age': 1 }\n     * ];\n     *\n     * var youngest = _\n     *   .chain(users)\n     *   .sortBy('age')\n     *   .map(function(o) {\n     *     return o.user + ' is ' + o.age;\n     *   })\n     *   .head()\n     *   .value();\n     * // => 'pebbles is 1'\n     */\n    function chain(value) {\n      var result = lodash(value);\n      result.__chain__ = true;\n      return result;\n    }\n\n    /**\n     * This method invokes `interceptor` and returns `value`. The interceptor\n     * is invoked with one argument; (value). The purpose of this method is to\n     * \"tap into\" a method chain sequence in order to modify intermediate results.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Seq\n     * @param {*} value The value to provide to `interceptor`.\n     * @param {Function} interceptor The function to invoke.\n     * @returns {*} Returns `value`.\n     * @example\n     *\n     * _([1, 2, 3])\n     *  .tap(function(array) {\n     *    // Mutate input array.\n     *    array.pop();\n     *  })\n     *  .reverse()\n     *  .value();\n     * // => [2, 1]\n     */\n    function tap(value, interceptor) {\n      interceptor(value);\n      return value;\n    }\n\n    /**\n     * This method is like `_.tap` except that it returns the result of `interceptor`.\n     * The purpose of this method is to \"pass thru\" values replacing intermediate\n     * results in a method chain sequence.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Seq\n     * @param {*} value The value to provide to `interceptor`.\n     * @param {Function} interceptor The function to invoke.\n     * @returns {*} Returns the result of `interceptor`.\n     * @example\n     *\n     * _('  abc  ')\n     *  .chain()\n     *  .trim()\n     *  .thru(function(value) {\n     *    return [value];\n     *  })\n     *  .value();\n     * // => ['abc']\n     */\n    function thru(value, interceptor) {\n      return interceptor(value);\n    }\n\n    /**\n     * This method is the wrapper version of `_.at`.\n     *\n     * @name at\n     * @memberOf _\n     * @since 1.0.0\n     * @category Seq\n     * @param {...(string|string[])} [paths] The property paths to pick.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n     *\n     * _(object).at(['a[0].b.c', 'a[1]']).value();\n     * // => [3, 4]\n     */\n    var wrapperAt = flatRest(function(paths) {\n      var length = paths.length,\n          start = length ? paths[0] : 0,\n          value = this.__wrapped__,\n          interceptor = function(object) { return baseAt(object, paths); };\n\n      if (length > 1 || this.__actions__.length ||\n          !(value instanceof LazyWrapper) || !isIndex(start)) {\n        return this.thru(interceptor);\n      }\n      value = value.slice(start, +start + (length ? 1 : 0));\n      value.__actions__.push({\n        'func': thru,\n        'args': [interceptor],\n        'thisArg': undefined\n      });\n      return new LodashWrapper(value, this.__chain__).thru(function(array) {\n        if (length && !array.length) {\n          array.push(undefined);\n        }\n        return array;\n      });\n    });\n\n    /**\n     * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.\n     *\n     * @name chain\n     * @memberOf _\n     * @since 0.1.0\n     * @category Seq\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36 },\n     *   { 'user': 'fred',   'age': 40 }\n     * ];\n     *\n     * // A sequence without explicit chaining.\n     * _(users).head();\n     * // => { 'user': 'barney', 'age': 36 }\n     *\n     * // A sequence with explicit chaining.\n     * _(users)\n     *   .chain()\n     *   .head()\n     *   .pick('user')\n     *   .value();\n     * // => { 'user': 'barney' }\n     */\n    function wrapperChain() {\n      return chain(this);\n    }\n\n    /**\n     * Executes the chain sequence and returns the wrapped result.\n     *\n     * @name commit\n     * @memberOf _\n     * @since 3.2.0\n     * @category Seq\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var array = [1, 2];\n     * var wrapped = _(array).push(3);\n     *\n     * console.log(array);\n     * // => [1, 2]\n     *\n     * wrapped = wrapped.commit();\n     * console.log(array);\n     * // => [1, 2, 3]\n     *\n     * wrapped.last();\n     * // => 3\n     *\n     * console.log(array);\n     * // => [1, 2, 3]\n     */\n    function wrapperCommit() {\n      return new LodashWrapper(this.value(), this.__chain__);\n    }\n\n    /**\n     * Gets the next value on a wrapped object following the\n     * [iterator protocol](https://mdn.io/iteration_protocols#iterator).\n     *\n     * @name next\n     * @memberOf _\n     * @since 4.0.0\n     * @category Seq\n     * @returns {Object} Returns the next iterator value.\n     * @example\n     *\n     * var wrapped = _([1, 2]);\n     *\n     * wrapped.next();\n     * // => { 'done': false, 'value': 1 }\n     *\n     * wrapped.next();\n     * // => { 'done': false, 'value': 2 }\n     *\n     * wrapped.next();\n     * // => { 'done': true, 'value': undefined }\n     */\n    function wrapperNext() {\n      if (this.__values__ === undefined) {\n        this.__values__ = toArray(this.value());\n      }\n      var done = this.__index__ >= this.__values__.length,\n          value = done ? undefined : this.__values__[this.__index__++];\n\n      return { 'done': done, 'value': value };\n    }\n\n    /**\n     * Enables the wrapper to be iterable.\n     *\n     * @name Symbol.iterator\n     * @memberOf _\n     * @since 4.0.0\n     * @category Seq\n     * @returns {Object} Returns the wrapper object.\n     * @example\n     *\n     * var wrapped = _([1, 2]);\n     *\n     * wrapped[Symbol.iterator]() === wrapped;\n     * // => true\n     *\n     * Array.from(wrapped);\n     * // => [1, 2]\n     */\n    function wrapperToIterator() {\n      return this;\n    }\n\n    /**\n     * Creates a clone of the chain sequence planting `value` as the wrapped value.\n     *\n     * @name plant\n     * @memberOf _\n     * @since 3.2.0\n     * @category Seq\n     * @param {*} value The value to plant.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var wrapped = _([1, 2]).map(square);\n     * var other = wrapped.plant([3, 4]);\n     *\n     * other.value();\n     * // => [9, 16]\n     *\n     * wrapped.value();\n     * // => [1, 4]\n     */\n    function wrapperPlant(value) {\n      var result,\n          parent = this;\n\n      while (parent instanceof baseLodash) {\n        var clone = wrapperClone(parent);\n        clone.__index__ = 0;\n        clone.__values__ = undefined;\n        if (result) {\n          previous.__wrapped__ = clone;\n        } else {\n          result = clone;\n        }\n        var previous = clone;\n        parent = parent.__wrapped__;\n      }\n      previous.__wrapped__ = value;\n      return result;\n    }\n\n    /**\n     * This method is the wrapper version of `_.reverse`.\n     *\n     * **Note:** This method mutates the wrapped array.\n     *\n     * @name reverse\n     * @memberOf _\n     * @since 0.1.0\n     * @category Seq\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _(array).reverse().value()\n     * // => [3, 2, 1]\n     *\n     * console.log(array);\n     * // => [3, 2, 1]\n     */\n    function wrapperReverse() {\n      var value = this.__wrapped__;\n      if (value instanceof LazyWrapper) {\n        var wrapped = value;\n        if (this.__actions__.length) {\n          wrapped = new LazyWrapper(this);\n        }\n        wrapped = wrapped.reverse();\n        wrapped.__actions__.push({\n          'func': thru,\n          'args': [reverse],\n          'thisArg': undefined\n        });\n        return new LodashWrapper(wrapped, this.__chain__);\n      }\n      return this.thru(reverse);\n    }\n\n    /**\n     * Executes the chain sequence to resolve the unwrapped value.\n     *\n     * @name value\n     * @memberOf _\n     * @since 0.1.0\n     * @alias toJSON, valueOf\n     * @category Seq\n     * @returns {*} Returns the resolved unwrapped value.\n     * @example\n     *\n     * _([1, 2, 3]).value();\n     * // => [1, 2, 3]\n     */\n    function wrapperValue() {\n      return baseWrapperValue(this.__wrapped__, this.__actions__);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` thru `iteratee`. The corresponding value of\n     * each key is the number of times the key was returned by `iteratee`. The\n     * iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.5.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * _.countBy([6.1, 4.2, 6.3], Math.floor);\n     * // => { '4': 1, '6': 2 }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.countBy(['one', 'two', 'three'], 'length');\n     * // => { '3': 2, '5': 1 }\n     */\n    var countBy = createAggregator(function(result, value, key) {\n      if (hasOwnProperty.call(result, key)) {\n        ++result[key];\n      } else {\n        baseAssignValue(result, key, 1);\n      }\n    });\n\n    /**\n     * Checks if `predicate` returns truthy for **all** elements of `collection`.\n     * Iteration is stopped once `predicate` returns falsey. The predicate is\n     * invoked with three arguments: (value, index|key, collection).\n     *\n     * **Note:** This method returns `true` for\n     * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because\n     * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of\n     * elements of empty collections.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {boolean} Returns `true` if all elements pass the predicate check,\n     *  else `false`.\n     * @example\n     *\n     * _.every([true, 1, null, 'yes'], Boolean);\n     * // => false\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': false },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.every(users, { 'user': 'barney', 'active': false });\n     * // => false\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.every(users, ['active', false]);\n     * // => true\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.every(users, 'active');\n     * // => false\n     */\n    function every(collection, predicate, guard) {\n      var func = isArray(collection) ? arrayEvery : baseEvery;\n      if (guard && isIterateeCall(collection, predicate, guard)) {\n        predicate = undefined;\n      }\n      return func(collection, getIteratee(predicate, 3));\n    }\n\n    /**\n     * Iterates over elements of `collection`, returning an array of all elements\n     * `predicate` returns truthy for. The predicate is invoked with three\n     * arguments: (value, index|key, collection).\n     *\n     * **Note:** Unlike `_.remove`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     * @see _.reject\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': true },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * _.filter(users, function(o) { return !o.active; });\n     * // => objects for ['fred']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.filter(users, { 'age': 36, 'active': true });\n     * // => objects for ['barney']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.filter(users, ['active', false]);\n     * // => objects for ['fred']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.filter(users, 'active');\n     * // => objects for ['barney']\n     *\n     * // Combining several predicates using `_.overEvery` or `_.overSome`.\n     * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));\n     * // => objects for ['fred', 'barney']\n     */\n    function filter(collection, predicate) {\n      var func = isArray(collection) ? arrayFilter : baseFilter;\n      return func(collection, getIteratee(predicate, 3));\n    }\n\n    /**\n     * Iterates over elements of `collection`, returning the first element\n     * `predicate` returns truthy for. The predicate is invoked with three\n     * arguments: (value, index|key, collection).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {*} Returns the matched element, else `undefined`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36, 'active': true },\n     *   { 'user': 'fred',    'age': 40, 'active': false },\n     *   { 'user': 'pebbles', 'age': 1,  'active': true }\n     * ];\n     *\n     * _.find(users, function(o) { return o.age < 40; });\n     * // => object for 'barney'\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.find(users, { 'age': 1, 'active': true });\n     * // => object for 'pebbles'\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.find(users, ['active', false]);\n     * // => object for 'fred'\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.find(users, 'active');\n     * // => object for 'barney'\n     */\n    var find = createFind(findIndex);\n\n    /**\n     * This method is like `_.find` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=collection.length-1] The index to search from.\n     * @returns {*} Returns the matched element, else `undefined`.\n     * @example\n     *\n     * _.findLast([1, 2, 3, 4], function(n) {\n     *   return n % 2 == 1;\n     * });\n     * // => 3\n     */\n    var findLast = createFind(findLastIndex);\n\n    /**\n     * Creates a flattened array of values by running each element in `collection`\n     * thru `iteratee` and flattening the mapped results. The iteratee is invoked\n     * with three arguments: (value, index|key, collection).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * function duplicate(n) {\n     *   return [n, n];\n     * }\n     *\n     * _.flatMap([1, 2], duplicate);\n     * // => [1, 1, 2, 2]\n     */\n    function flatMap(collection, iteratee) {\n      return baseFlatten(map(collection, iteratee), 1);\n    }\n\n    /**\n     * This method is like `_.flatMap` except that it recursively flattens the\n     * mapped results.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * function duplicate(n) {\n     *   return [[[n, n]]];\n     * }\n     *\n     * _.flatMapDeep([1, 2], duplicate);\n     * // => [1, 1, 2, 2]\n     */\n    function flatMapDeep(collection, iteratee) {\n      return baseFlatten(map(collection, iteratee), INFINITY);\n    }\n\n    /**\n     * This method is like `_.flatMap` except that it recursively flattens the\n     * mapped results up to `depth` times.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {number} [depth=1] The maximum recursion depth.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * function duplicate(n) {\n     *   return [[[n, n]]];\n     * }\n     *\n     * _.flatMapDepth([1, 2], duplicate, 2);\n     * // => [[1, 1], [2, 2]]\n     */\n    function flatMapDepth(collection, iteratee, depth) {\n      depth = depth === undefined ? 1 : toInteger(depth);\n      return baseFlatten(map(collection, iteratee), depth);\n    }\n\n    /**\n     * Iterates over elements of `collection` and invokes `iteratee` for each element.\n     * The iteratee is invoked with three arguments: (value, index|key, collection).\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\n     *\n     * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n     * property are iterated like arrays. To avoid this behavior use `_.forIn`\n     * or `_.forOwn` for object iteration.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @alias each\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     * @see _.forEachRight\n     * @example\n     *\n     * _.forEach([1, 2], function(value) {\n     *   console.log(value);\n     * });\n     * // => Logs `1` then `2`.\n     *\n     * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n     */\n    function forEach(collection, iteratee) {\n      var func = isArray(collection) ? arrayEach : baseEach;\n      return func(collection, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * This method is like `_.forEach` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @alias eachRight\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     * @see _.forEach\n     * @example\n     *\n     * _.forEachRight([1, 2], function(value) {\n     *   console.log(value);\n     * });\n     * // => Logs `2` then `1`.\n     */\n    function forEachRight(collection, iteratee) {\n      var func = isArray(collection) ? arrayEachRight : baseEachRight;\n      return func(collection, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` thru `iteratee`. The order of grouped values\n     * is determined by the order they occur in `collection`. The corresponding\n     * value of each key is an array of elements responsible for generating the\n     * key. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n     * // => { '4': [4.2], '6': [6.1, 6.3] }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.groupBy(['one', 'two', 'three'], 'length');\n     * // => { '3': ['one', 'two'], '5': ['three'] }\n     */\n    var groupBy = createAggregator(function(result, value, key) {\n      if (hasOwnProperty.call(result, key)) {\n        result[key].push(value);\n      } else {\n        baseAssignValue(result, key, [value]);\n      }\n    });\n\n    /**\n     * Checks if `value` is in `collection`. If `collection` is a string, it's\n     * checked for a substring of `value`, otherwise\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * is used for equality comparisons. If `fromIndex` is negative, it's used as\n     * the offset from the end of `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n     * @returns {boolean} Returns `true` if `value` is found, else `false`.\n     * @example\n     *\n     * _.includes([1, 2, 3], 1);\n     * // => true\n     *\n     * _.includes([1, 2, 3], 1, 2);\n     * // => false\n     *\n     * _.includes({ 'a': 1, 'b': 2 }, 1);\n     * // => true\n     *\n     * _.includes('abcd', 'bc');\n     * // => true\n     */\n    function includes(collection, value, fromIndex, guard) {\n      collection = isArrayLike(collection) ? collection : values(collection);\n      fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\n\n      var length = collection.length;\n      if (fromIndex < 0) {\n        fromIndex = nativeMax(length + fromIndex, 0);\n      }\n      return isString(collection)\n        ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\n        : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\n    }\n\n    /**\n     * Invokes the method at `path` of each element in `collection`, returning\n     * an array of the results of each invoked method. Any additional arguments\n     * are provided to each invoked method. If `path` is a function, it's invoked\n     * for, and `this` bound to, each element in `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Array|Function|string} path The path of the method to invoke or\n     *  the function invoked per iteration.\n     * @param {...*} [args] The arguments to invoke each method with.\n     * @returns {Array} Returns the array of results.\n     * @example\n     *\n     * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');\n     * // => [[1, 5, 7], [1, 2, 3]]\n     *\n     * _.invokeMap([123, 456], String.prototype.split, '');\n     * // => [['1', '2', '3'], ['4', '5', '6']]\n     */\n    var invokeMap = baseRest(function(collection, path, args) {\n      var index = -1,\n          isFunc = typeof path == 'function',\n          result = isArrayLike(collection) ? Array(collection.length) : [];\n\n      baseEach(collection, function(value) {\n        result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);\n      });\n      return result;\n    });\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` thru `iteratee`. The corresponding value of\n     * each key is the last element responsible for generating the key. The\n     * iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * var array = [\n     *   { 'dir': 'left', 'code': 97 },\n     *   { 'dir': 'right', 'code': 100 }\n     * ];\n     *\n     * _.keyBy(array, function(o) {\n     *   return String.fromCharCode(o.code);\n     * });\n     * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n     *\n     * _.keyBy(array, 'dir');\n     * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\n     */\n    var keyBy = createAggregator(function(result, value, key) {\n      baseAssignValue(result, key, value);\n    });\n\n    /**\n     * Creates an array of values by running each element in `collection` thru\n     * `iteratee`. The iteratee is invoked with three arguments:\n     * (value, index|key, collection).\n     *\n     * Many lodash methods are guarded to work as iteratees for methods like\n     * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n     *\n     * The guarded methods are:\n     * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n     * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n     * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n     * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new mapped array.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * _.map([4, 8], square);\n     * // => [16, 64]\n     *\n     * _.map({ 'a': 4, 'b': 8 }, square);\n     * // => [16, 64] (iteration order is not guaranteed)\n     *\n     * var users = [\n     *   { 'user': 'barney' },\n     *   { 'user': 'fred' }\n     * ];\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.map(users, 'user');\n     * // => ['barney', 'fred']\n     */\n    function map(collection, iteratee) {\n      var func = isArray(collection) ? arrayMap : baseMap;\n      return func(collection, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * This method is like `_.sortBy` except that it allows specifying the sort\n     * orders of the iteratees to sort by. If `orders` is unspecified, all values\n     * are sorted in ascending order. Otherwise, specify an order of \"desc\" for\n     * descending or \"asc\" for ascending sort order of corresponding values.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]\n     *  The iteratees to sort by.\n     * @param {string[]} [orders] The sort orders of `iteratees`.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n     * @returns {Array} Returns the new sorted array.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'fred',   'age': 48 },\n     *   { 'user': 'barney', 'age': 34 },\n     *   { 'user': 'fred',   'age': 40 },\n     *   { 'user': 'barney', 'age': 36 }\n     * ];\n     *\n     * // Sort by `user` in ascending order and by `age` in descending order.\n     * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);\n     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n     */\n    function orderBy(collection, iteratees, orders, guard) {\n      if (collection == null) {\n        return [];\n      }\n      if (!isArray(iteratees)) {\n        iteratees = iteratees == null ? [] : [iteratees];\n      }\n      orders = guard ? undefined : orders;\n      if (!isArray(orders)) {\n        orders = orders == null ? [] : [orders];\n      }\n      return baseOrderBy(collection, iteratees, orders);\n    }\n\n    /**\n     * Creates an array of elements split into two groups, the first of which\n     * contains elements `predicate` returns truthy for, the second of which\n     * contains elements `predicate` returns falsey for. The predicate is\n     * invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the array of grouped elements.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36, 'active': false },\n     *   { 'user': 'fred',    'age': 40, 'active': true },\n     *   { 'user': 'pebbles', 'age': 1,  'active': false }\n     * ];\n     *\n     * _.partition(users, function(o) { return o.active; });\n     * // => objects for [['fred'], ['barney', 'pebbles']]\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.partition(users, { 'age': 1, 'active': false });\n     * // => objects for [['pebbles'], ['barney', 'fred']]\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.partition(users, ['active', false]);\n     * // => objects for [['barney', 'pebbles'], ['fred']]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.partition(users, 'active');\n     * // => objects for [['fred'], ['barney', 'pebbles']]\n     */\n    var partition = createAggregator(function(result, value, key) {\n      result[key ? 0 : 1].push(value);\n    }, function() { return [[], []]; });\n\n    /**\n     * Reduces `collection` to a value which is the accumulated result of running\n     * each element in `collection` thru `iteratee`, where each successive\n     * invocation is supplied the return value of the previous. If `accumulator`\n     * is not given, the first element of `collection` is used as the initial\n     * value. The iteratee is invoked with four arguments:\n     * (accumulator, value, index|key, collection).\n     *\n     * Many lodash methods are guarded to work as iteratees for methods like\n     * `_.reduce`, `_.reduceRight`, and `_.transform`.\n     *\n     * The guarded methods are:\n     * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n     * and `sortBy`\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The initial value.\n     * @returns {*} Returns the accumulated value.\n     * @see _.reduceRight\n     * @example\n     *\n     * _.reduce([1, 2], function(sum, n) {\n     *   return sum + n;\n     * }, 0);\n     * // => 3\n     *\n     * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n     *   (result[value] || (result[value] = [])).push(key);\n     *   return result;\n     * }, {});\n     * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n     */\n    function reduce(collection, iteratee, accumulator) {\n      var func = isArray(collection) ? arrayReduce : baseReduce,\n          initAccum = arguments.length < 3;\n\n      return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n    }\n\n    /**\n     * This method is like `_.reduce` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The initial value.\n     * @returns {*} Returns the accumulated value.\n     * @see _.reduce\n     * @example\n     *\n     * var array = [[0, 1], [2, 3], [4, 5]];\n     *\n     * _.reduceRight(array, function(flattened, other) {\n     *   return flattened.concat(other);\n     * }, []);\n     * // => [4, 5, 2, 3, 0, 1]\n     */\n    function reduceRight(collection, iteratee, accumulator) {\n      var func = isArray(collection) ? arrayReduceRight : baseReduce,\n          initAccum = arguments.length < 3;\n\n      return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);\n    }\n\n    /**\n     * The opposite of `_.filter`; this method returns the elements of `collection`\n     * that `predicate` does **not** return truthy for.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     * @see _.filter\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': false },\n     *   { 'user': 'fred',   'age': 40, 'active': true }\n     * ];\n     *\n     * _.reject(users, function(o) { return !o.active; });\n     * // => objects for ['fred']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.reject(users, { 'age': 40, 'active': true });\n     * // => objects for ['barney']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.reject(users, ['active', false]);\n     * // => objects for ['fred']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.reject(users, 'active');\n     * // => objects for ['barney']\n     */\n    function reject(collection, predicate) {\n      var func = isArray(collection) ? arrayFilter : baseFilter;\n      return func(collection, negate(getIteratee(predicate, 3)));\n    }\n\n    /**\n     * Gets a random element from `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to sample.\n     * @returns {*} Returns the random element.\n     * @example\n     *\n     * _.sample([1, 2, 3, 4]);\n     * // => 2\n     */\n    function sample(collection) {\n      var func = isArray(collection) ? arraySample : baseSample;\n      return func(collection);\n    }\n\n    /**\n     * Gets `n` random elements at unique keys from `collection` up to the\n     * size of `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to sample.\n     * @param {number} [n=1] The number of elements to sample.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the random elements.\n     * @example\n     *\n     * _.sampleSize([1, 2, 3], 2);\n     * // => [3, 1]\n     *\n     * _.sampleSize([1, 2, 3], 4);\n     * // => [2, 3, 1]\n     */\n    function sampleSize(collection, n, guard) {\n      if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) {\n        n = 1;\n      } else {\n        n = toInteger(n);\n      }\n      var func = isArray(collection) ? arraySampleSize : baseSampleSize;\n      return func(collection, n);\n    }\n\n    /**\n     * Creates an array of shuffled values, using a version of the\n     * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to shuffle.\n     * @returns {Array} Returns the new shuffled array.\n     * @example\n     *\n     * _.shuffle([1, 2, 3, 4]);\n     * // => [4, 1, 3, 2]\n     */\n    function shuffle(collection) {\n      var func = isArray(collection) ? arrayShuffle : baseShuffle;\n      return func(collection);\n    }\n\n    /**\n     * Gets the size of `collection` by returning its length for array-like\n     * values or the number of own enumerable string keyed properties for objects.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to inspect.\n     * @returns {number} Returns the collection size.\n     * @example\n     *\n     * _.size([1, 2, 3]);\n     * // => 3\n     *\n     * _.size({ 'a': 1, 'b': 2 });\n     * // => 2\n     *\n     * _.size('pebbles');\n     * // => 7\n     */\n    function size(collection) {\n      if (collection == null) {\n        return 0;\n      }\n      if (isArrayLike(collection)) {\n        return isString(collection) ? stringSize(collection) : collection.length;\n      }\n      var tag = getTag(collection);\n      if (tag == mapTag || tag == setTag) {\n        return collection.size;\n      }\n      return baseKeys(collection).length;\n    }\n\n    /**\n     * Checks if `predicate` returns truthy for **any** element of `collection`.\n     * Iteration is stopped once `predicate` returns truthy. The predicate is\n     * invoked with three arguments: (value, index|key, collection).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {boolean} Returns `true` if any element passes the predicate check,\n     *  else `false`.\n     * @example\n     *\n     * _.some([null, 0, 'yes', false], Boolean);\n     * // => true\n     *\n     * var users = [\n     *   { 'user': 'barney', 'active': true },\n     *   { 'user': 'fred',   'active': false }\n     * ];\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.some(users, { 'user': 'barney', 'active': false });\n     * // => false\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.some(users, ['active', false]);\n     * // => true\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.some(users, 'active');\n     * // => true\n     */\n    function some(collection, predicate, guard) {\n      var func = isArray(collection) ? arraySome : baseSome;\n      if (guard && isIterateeCall(collection, predicate, guard)) {\n        predicate = undefined;\n      }\n      return func(collection, getIteratee(predicate, 3));\n    }\n\n    /**\n     * Creates an array of elements, sorted in ascending order by the results of\n     * running each element in a collection thru each iteratee. This method\n     * performs a stable sort, that is, it preserves the original sort order of\n     * equal elements. The iteratees are invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {...(Function|Function[])} [iteratees=[_.identity]]\n     *  The iteratees to sort by.\n     * @returns {Array} Returns the new sorted array.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'fred',   'age': 48 },\n     *   { 'user': 'barney', 'age': 36 },\n     *   { 'user': 'fred',   'age': 30 },\n     *   { 'user': 'barney', 'age': 34 }\n     * ];\n     *\n     * _.sortBy(users, [function(o) { return o.user; }]);\n     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]\n     *\n     * _.sortBy(users, ['user', 'age']);\n     * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]\n     */\n    var sortBy = baseRest(function(collection, iteratees) {\n      if (collection == null) {\n        return [];\n      }\n      var length = iteratees.length;\n      if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n        iteratees = [];\n      } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n        iteratees = [iteratees[0]];\n      }\n      return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n    });\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Gets the timestamp of the number of milliseconds that have elapsed since\n     * the Unix epoch (1 January 1970 00:00:00 UTC).\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Date\n     * @returns {number} Returns the timestamp.\n     * @example\n     *\n     * _.defer(function(stamp) {\n     *   console.log(_.now() - stamp);\n     * }, _.now());\n     * // => Logs the number of milliseconds it took for the deferred invocation.\n     */\n    var now = ctxNow || function() {\n      return root.Date.now();\n    };\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * The opposite of `_.before`; this method creates a function that invokes\n     * `func` once it's called `n` or more times.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {number} n The number of calls before `func` is invoked.\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * var saves = ['profile', 'settings'];\n     *\n     * var done = _.after(saves.length, function() {\n     *   console.log('done saving!');\n     * });\n     *\n     * _.forEach(saves, function(type) {\n     *   asyncSave({ 'type': type, 'complete': done });\n     * });\n     * // => Logs 'done saving!' after the two async saves have completed.\n     */\n    function after(n, func) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      n = toInteger(n);\n      return function() {\n        if (--n < 1) {\n          return func.apply(this, arguments);\n        }\n      };\n    }\n\n    /**\n     * Creates a function that invokes `func`, with up to `n` arguments,\n     * ignoring any additional arguments.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} func The function to cap arguments for.\n     * @param {number} [n=func.length] The arity cap.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the new capped function.\n     * @example\n     *\n     * _.map(['6', '8', '10'], _.ary(parseInt, 1));\n     * // => [6, 8, 10]\n     */\n    function ary(func, n, guard) {\n      n = guard ? undefined : n;\n      n = (func && n == null) ? func.length : n;\n      return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);\n    }\n\n    /**\n     * Creates a function that invokes `func`, with the `this` binding and arguments\n     * of the created function, while it's called less than `n` times. Subsequent\n     * calls to the created function return the result of the last `func` invocation.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {number} n The number of calls at which `func` is no longer invoked.\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * jQuery(element).on('click', _.before(5, addContactToList));\n     * // => Allows adding up to 4 contacts to the list.\n     */\n    function before(n, func) {\n      var result;\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      n = toInteger(n);\n      return function() {\n        if (--n > 0) {\n          result = func.apply(this, arguments);\n        }\n        if (n <= 1) {\n          func = undefined;\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Creates a function that invokes `func` with the `this` binding of `thisArg`\n     * and `partials` prepended to the arguments it receives.\n     *\n     * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,\n     * may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** Unlike native `Function#bind`, this method doesn't set the \"length\"\n     * property of bound functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to bind.\n     * @param {*} thisArg The `this` binding of `func`.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new bound function.\n     * @example\n     *\n     * function greet(greeting, punctuation) {\n     *   return greeting + ' ' + this.user + punctuation;\n     * }\n     *\n     * var object = { 'user': 'fred' };\n     *\n     * var bound = _.bind(greet, object, 'hi');\n     * bound('!');\n     * // => 'hi fred!'\n     *\n     * // Bound with placeholders.\n     * var bound = _.bind(greet, object, _, '!');\n     * bound('hi');\n     * // => 'hi fred!'\n     */\n    var bind = baseRest(function(func, thisArg, partials) {\n      var bitmask = WRAP_BIND_FLAG;\n      if (partials.length) {\n        var holders = replaceHolders(partials, getHolder(bind));\n        bitmask |= WRAP_PARTIAL_FLAG;\n      }\n      return createWrap(func, bitmask, thisArg, partials, holders);\n    });\n\n    /**\n     * Creates a function that invokes the method at `object[key]` with `partials`\n     * prepended to the arguments it receives.\n     *\n     * This method differs from `_.bind` by allowing bound functions to reference\n     * methods that may be redefined or don't yet exist. See\n     * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)\n     * for more details.\n     *\n     * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.10.0\n     * @category Function\n     * @param {Object} object The object to invoke the method on.\n     * @param {string} key The key of the method.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new bound function.\n     * @example\n     *\n     * var object = {\n     *   'user': 'fred',\n     *   'greet': function(greeting, punctuation) {\n     *     return greeting + ' ' + this.user + punctuation;\n     *   }\n     * };\n     *\n     * var bound = _.bindKey(object, 'greet', 'hi');\n     * bound('!');\n     * // => 'hi fred!'\n     *\n     * object.greet = function(greeting, punctuation) {\n     *   return greeting + 'ya ' + this.user + punctuation;\n     * };\n     *\n     * bound('!');\n     * // => 'hiya fred!'\n     *\n     * // Bound with placeholders.\n     * var bound = _.bindKey(object, 'greet', _, '!');\n     * bound('hi');\n     * // => 'hiya fred!'\n     */\n    var bindKey = baseRest(function(object, key, partials) {\n      var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;\n      if (partials.length) {\n        var holders = replaceHolders(partials, getHolder(bindKey));\n        bitmask |= WRAP_PARTIAL_FLAG;\n      }\n      return createWrap(key, bitmask, object, partials, holders);\n    });\n\n    /**\n     * Creates a function that accepts arguments of `func` and either invokes\n     * `func` returning its result, if at least `arity` number of arguments have\n     * been provided, or returns a function that accepts the remaining `func`\n     * arguments, and so on. The arity of `func` may be specified if `func.length`\n     * is not sufficient.\n     *\n     * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,\n     * may be used as a placeholder for provided arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of curried functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Function\n     * @param {Function} func The function to curry.\n     * @param {number} [arity=func.length] The arity of `func`.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the new curried function.\n     * @example\n     *\n     * var abc = function(a, b, c) {\n     *   return [a, b, c];\n     * };\n     *\n     * var curried = _.curry(abc);\n     *\n     * curried(1)(2)(3);\n     * // => [1, 2, 3]\n     *\n     * curried(1, 2)(3);\n     * // => [1, 2, 3]\n     *\n     * curried(1, 2, 3);\n     * // => [1, 2, 3]\n     *\n     * // Curried with placeholders.\n     * curried(1)(_, 3)(2);\n     * // => [1, 2, 3]\n     */\n    function curry(func, arity, guard) {\n      arity = guard ? undefined : arity;\n      var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n      result.placeholder = curry.placeholder;\n      return result;\n    }\n\n    /**\n     * This method is like `_.curry` except that arguments are applied to `func`\n     * in the manner of `_.partialRight` instead of `_.partial`.\n     *\n     * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for provided arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of curried functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} func The function to curry.\n     * @param {number} [arity=func.length] The arity of `func`.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the new curried function.\n     * @example\n     *\n     * var abc = function(a, b, c) {\n     *   return [a, b, c];\n     * };\n     *\n     * var curried = _.curryRight(abc);\n     *\n     * curried(3)(2)(1);\n     * // => [1, 2, 3]\n     *\n     * curried(2, 3)(1);\n     * // => [1, 2, 3]\n     *\n     * curried(1, 2, 3);\n     * // => [1, 2, 3]\n     *\n     * // Curried with placeholders.\n     * curried(3)(1, _)(2);\n     * // => [1, 2, 3]\n     */\n    function curryRight(func, arity, guard) {\n      arity = guard ? undefined : arity;\n      var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n      result.placeholder = curryRight.placeholder;\n      return result;\n    }\n\n    /**\n     * Creates a debounced function that delays invoking `func` until after `wait`\n     * milliseconds have elapsed since the last time the debounced function was\n     * invoked. The debounced function comes with a `cancel` method to cancel\n     * delayed `func` invocations and a `flush` method to immediately invoke them.\n     * Provide `options` to indicate whether `func` should be invoked on the\n     * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n     * with the last arguments provided to the debounced function. Subsequent\n     * calls to the debounced function return the result of the last `func`\n     * invocation.\n     *\n     * **Note:** If `leading` and `trailing` options are `true`, `func` is\n     * invoked on the trailing edge of the timeout only if the debounced function\n     * is invoked more than once during the `wait` timeout.\n     *\n     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n     * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n     *\n     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n     * for details over the differences between `_.debounce` and `_.throttle`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to debounce.\n     * @param {number} [wait=0] The number of milliseconds to delay.\n     * @param {Object} [options={}] The options object.\n     * @param {boolean} [options.leading=false]\n     *  Specify invoking on the leading edge of the timeout.\n     * @param {number} [options.maxWait]\n     *  The maximum time `func` is allowed to be delayed before it's invoked.\n     * @param {boolean} [options.trailing=true]\n     *  Specify invoking on the trailing edge of the timeout.\n     * @returns {Function} Returns the new debounced function.\n     * @example\n     *\n     * // Avoid costly calculations while the window size is in flux.\n     * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n     *\n     * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n     * jQuery(element).on('click', _.debounce(sendMail, 300, {\n     *   'leading': true,\n     *   'trailing': false\n     * }));\n     *\n     * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n     * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n     * var source = new EventSource('/stream');\n     * jQuery(source).on('message', debounced);\n     *\n     * // Cancel the trailing debounced invocation.\n     * jQuery(window).on('popstate', debounced.cancel);\n     */\n    function debounce(func, wait, options) {\n      var lastArgs,\n          lastThis,\n          maxWait,\n          result,\n          timerId,\n          lastCallTime,\n          lastInvokeTime = 0,\n          leading = false,\n          maxing = false,\n          trailing = true;\n\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      wait = toNumber(wait) || 0;\n      if (isObject(options)) {\n        leading = !!options.leading;\n        maxing = 'maxWait' in options;\n        maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n        trailing = 'trailing' in options ? !!options.trailing : trailing;\n      }\n\n      function invokeFunc(time) {\n        var args = lastArgs,\n            thisArg = lastThis;\n\n        lastArgs = lastThis = undefined;\n        lastInvokeTime = time;\n        result = func.apply(thisArg, args);\n        return result;\n      }\n\n      function leadingEdge(time) {\n        // Reset any `maxWait` timer.\n        lastInvokeTime = time;\n        // Start the timer for the trailing edge.\n        timerId = setTimeout(timerExpired, wait);\n        // Invoke the leading edge.\n        return leading ? invokeFunc(time) : result;\n      }\n\n      function remainingWait(time) {\n        var timeSinceLastCall = time - lastCallTime,\n            timeSinceLastInvoke = time - lastInvokeTime,\n            timeWaiting = wait - timeSinceLastCall;\n\n        return maxing\n          ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n          : timeWaiting;\n      }\n\n      function shouldInvoke(time) {\n        var timeSinceLastCall = time - lastCallTime,\n            timeSinceLastInvoke = time - lastInvokeTime;\n\n        // Either this is the first call, activity has stopped and we're at the\n        // trailing edge, the system time has gone backwards and we're treating\n        // it as the trailing edge, or we've hit the `maxWait` limit.\n        return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n          (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n      }\n\n      function timerExpired() {\n        var time = now();\n        if (shouldInvoke(time)) {\n          return trailingEdge(time);\n        }\n        // Restart the timer.\n        timerId = setTimeout(timerExpired, remainingWait(time));\n      }\n\n      function trailingEdge(time) {\n        timerId = undefined;\n\n        // Only invoke if we have `lastArgs` which means `func` has been\n        // debounced at least once.\n        if (trailing && lastArgs) {\n          return invokeFunc(time);\n        }\n        lastArgs = lastThis = undefined;\n        return result;\n      }\n\n      function cancel() {\n        if (timerId !== undefined) {\n          clearTimeout(timerId);\n        }\n        lastInvokeTime = 0;\n        lastArgs = lastCallTime = lastThis = timerId = undefined;\n      }\n\n      function flush() {\n        return timerId === undefined ? result : trailingEdge(now());\n      }\n\n      function debounced() {\n        var time = now(),\n            isInvoking = shouldInvoke(time);\n\n        lastArgs = arguments;\n        lastThis = this;\n        lastCallTime = time;\n\n        if (isInvoking) {\n          if (timerId === undefined) {\n            return leadingEdge(lastCallTime);\n          }\n          if (maxing) {\n            // Handle invocations in a tight loop.\n            clearTimeout(timerId);\n            timerId = setTimeout(timerExpired, wait);\n            return invokeFunc(lastCallTime);\n          }\n        }\n        if (timerId === undefined) {\n          timerId = setTimeout(timerExpired, wait);\n        }\n        return result;\n      }\n      debounced.cancel = cancel;\n      debounced.flush = flush;\n      return debounced;\n    }\n\n    /**\n     * Defers invoking the `func` until the current call stack has cleared. Any\n     * additional arguments are provided to `func` when it's invoked.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to defer.\n     * @param {...*} [args] The arguments to invoke `func` with.\n     * @returns {number} Returns the timer id.\n     * @example\n     *\n     * _.defer(function(text) {\n     *   console.log(text);\n     * }, 'deferred');\n     * // => Logs 'deferred' after one millisecond.\n     */\n    var defer = baseRest(function(func, args) {\n      return baseDelay(func, 1, args);\n    });\n\n    /**\n     * Invokes `func` after `wait` milliseconds. Any additional arguments are\n     * provided to `func` when it's invoked.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @param {...*} [args] The arguments to invoke `func` with.\n     * @returns {number} Returns the timer id.\n     * @example\n     *\n     * _.delay(function(text) {\n     *   console.log(text);\n     * }, 1000, 'later');\n     * // => Logs 'later' after one second.\n     */\n    var delay = baseRest(function(func, wait, args) {\n      return baseDelay(func, toNumber(wait) || 0, args);\n    });\n\n    /**\n     * Creates a function that invokes `func` with arguments reversed.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Function\n     * @param {Function} func The function to flip arguments for.\n     * @returns {Function} Returns the new flipped function.\n     * @example\n     *\n     * var flipped = _.flip(function() {\n     *   return _.toArray(arguments);\n     * });\n     *\n     * flipped('a', 'b', 'c', 'd');\n     * // => ['d', 'c', 'b', 'a']\n     */\n    function flip(func) {\n      return createWrap(func, WRAP_FLIP_FLAG);\n    }\n\n    /**\n     * Creates a function that memoizes the result of `func`. If `resolver` is\n     * provided, it determines the cache key for storing the result based on the\n     * arguments provided to the memoized function. By default, the first argument\n     * provided to the memoized function is used as the map cache key. The `func`\n     * is invoked with the `this` binding of the memoized function.\n     *\n     * **Note:** The cache is exposed as the `cache` property on the memoized\n     * function. Its creation may be customized by replacing the `_.memoize.Cache`\n     * constructor with one whose instances implement the\n     * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n     * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to have its output memoized.\n     * @param {Function} [resolver] The function to resolve the cache key.\n     * @returns {Function} Returns the new memoized function.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2 };\n     * var other = { 'c': 3, 'd': 4 };\n     *\n     * var values = _.memoize(_.values);\n     * values(object);\n     * // => [1, 2]\n     *\n     * values(other);\n     * // => [3, 4]\n     *\n     * object.a = 2;\n     * values(object);\n     * // => [1, 2]\n     *\n     * // Modify the result cache.\n     * values.cache.set(object, ['a', 'b']);\n     * values(object);\n     * // => ['a', 'b']\n     *\n     * // Replace `_.memoize.Cache`.\n     * _.memoize.Cache = WeakMap;\n     */\n    function memoize(func, resolver) {\n      if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      var memoized = function() {\n        var args = arguments,\n            key = resolver ? resolver.apply(this, args) : args[0],\n            cache = memoized.cache;\n\n        if (cache.has(key)) {\n          return cache.get(key);\n        }\n        var result = func.apply(this, args);\n        memoized.cache = cache.set(key, result) || cache;\n        return result;\n      };\n      memoized.cache = new (memoize.Cache || MapCache);\n      return memoized;\n    }\n\n    // Expose `MapCache`.\n    memoize.Cache = MapCache;\n\n    /**\n     * Creates a function that negates the result of the predicate `func`. The\n     * `func` predicate is invoked with the `this` binding and arguments of the\n     * created function.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} predicate The predicate to negate.\n     * @returns {Function} Returns the new negated function.\n     * @example\n     *\n     * function isEven(n) {\n     *   return n % 2 == 0;\n     * }\n     *\n     * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n     * // => [1, 3, 5]\n     */\n    function negate(predicate) {\n      if (typeof predicate != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      return function() {\n        var args = arguments;\n        switch (args.length) {\n          case 0: return !predicate.call(this);\n          case 1: return !predicate.call(this, args[0]);\n          case 2: return !predicate.call(this, args[0], args[1]);\n          case 3: return !predicate.call(this, args[0], args[1], args[2]);\n        }\n        return !predicate.apply(this, args);\n      };\n    }\n\n    /**\n     * Creates a function that is restricted to invoking `func` once. Repeat calls\n     * to the function return the value of the first invocation. The `func` is\n     * invoked with the `this` binding and arguments of the created function.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * var initialize = _.once(createApplication);\n     * initialize();\n     * initialize();\n     * // => `createApplication` is invoked once\n     */\n    function once(func) {\n      return before(2, func);\n    }\n\n    /**\n     * Creates a function that invokes `func` with its arguments transformed.\n     *\n     * @static\n     * @since 4.0.0\n     * @memberOf _\n     * @category Function\n     * @param {Function} func The function to wrap.\n     * @param {...(Function|Function[])} [transforms=[_.identity]]\n     *  The argument transforms.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * function doubled(n) {\n     *   return n * 2;\n     * }\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var func = _.overArgs(function(x, y) {\n     *   return [x, y];\n     * }, [square, doubled]);\n     *\n     * func(9, 3);\n     * // => [81, 6]\n     *\n     * func(10, 5);\n     * // => [100, 10]\n     */\n    var overArgs = castRest(function(func, transforms) {\n      transforms = (transforms.length == 1 && isArray(transforms[0]))\n        ? arrayMap(transforms[0], baseUnary(getIteratee()))\n        : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));\n\n      var funcsLength = transforms.length;\n      return baseRest(function(args) {\n        var index = -1,\n            length = nativeMin(args.length, funcsLength);\n\n        while (++index < length) {\n          args[index] = transforms[index].call(this, args[index]);\n        }\n        return apply(func, this, args);\n      });\n    });\n\n    /**\n     * Creates a function that invokes `func` with `partials` prepended to the\n     * arguments it receives. This method is like `_.bind` except it does **not**\n     * alter the `this` binding.\n     *\n     * The `_.partial.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of partially\n     * applied functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.2.0\n     * @category Function\n     * @param {Function} func The function to partially apply arguments to.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new partially applied function.\n     * @example\n     *\n     * function greet(greeting, name) {\n     *   return greeting + ' ' + name;\n     * }\n     *\n     * var sayHelloTo = _.partial(greet, 'hello');\n     * sayHelloTo('fred');\n     * // => 'hello fred'\n     *\n     * // Partially applied with placeholders.\n     * var greetFred = _.partial(greet, _, 'fred');\n     * greetFred('hi');\n     * // => 'hi fred'\n     */\n    var partial = baseRest(function(func, partials) {\n      var holders = replaceHolders(partials, getHolder(partial));\n      return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);\n    });\n\n    /**\n     * This method is like `_.partial` except that partially applied arguments\n     * are appended to the arguments it receives.\n     *\n     * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of partially\n     * applied functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.0.0\n     * @category Function\n     * @param {Function} func The function to partially apply arguments to.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new partially applied function.\n     * @example\n     *\n     * function greet(greeting, name) {\n     *   return greeting + ' ' + name;\n     * }\n     *\n     * var greetFred = _.partialRight(greet, 'fred');\n     * greetFred('hi');\n     * // => 'hi fred'\n     *\n     * // Partially applied with placeholders.\n     * var sayHelloTo = _.partialRight(greet, 'hello', _);\n     * sayHelloTo('fred');\n     * // => 'hello fred'\n     */\n    var partialRight = baseRest(function(func, partials) {\n      var holders = replaceHolders(partials, getHolder(partialRight));\n      return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);\n    });\n\n    /**\n     * Creates a function that invokes `func` with arguments arranged according\n     * to the specified `indexes` where the argument value at the first index is\n     * provided as the first argument, the argument value at the second index is\n     * provided as the second argument, and so on.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} func The function to rearrange arguments for.\n     * @param {...(number|number[])} indexes The arranged argument indexes.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var rearged = _.rearg(function(a, b, c) {\n     *   return [a, b, c];\n     * }, [2, 0, 1]);\n     *\n     * rearged('b', 'c', 'a')\n     * // => ['a', 'b', 'c']\n     */\n    var rearg = flatRest(function(func, indexes) {\n      return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);\n    });\n\n    /**\n     * Creates a function that invokes `func` with the `this` binding of the\n     * created function and arguments from `start` and beyond provided as\n     * an array.\n     *\n     * **Note:** This method is based on the\n     * [rest parameter](https://mdn.io/rest_parameters).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Function\n     * @param {Function} func The function to apply a rest parameter to.\n     * @param {number} [start=func.length-1] The start position of the rest parameter.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var say = _.rest(function(what, names) {\n     *   return what + ' ' + _.initial(names).join(', ') +\n     *     (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n     * });\n     *\n     * say('hello', 'fred', 'barney', 'pebbles');\n     * // => 'hello fred, barney, & pebbles'\n     */\n    function rest(func, start) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      start = start === undefined ? start : toInteger(start);\n      return baseRest(func, start);\n    }\n\n    /**\n     * Creates a function that invokes `func` with the `this` binding of the\n     * create function and an array of arguments much like\n     * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).\n     *\n     * **Note:** This method is based on the\n     * [spread operator](https://mdn.io/spread_operator).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.2.0\n     * @category Function\n     * @param {Function} func The function to spread arguments over.\n     * @param {number} [start=0] The start position of the spread.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var say = _.spread(function(who, what) {\n     *   return who + ' says ' + what;\n     * });\n     *\n     * say(['fred', 'hello']);\n     * // => 'fred says hello'\n     *\n     * var numbers = Promise.all([\n     *   Promise.resolve(40),\n     *   Promise.resolve(36)\n     * ]);\n     *\n     * numbers.then(_.spread(function(x, y) {\n     *   return x + y;\n     * }));\n     * // => a Promise of 76\n     */\n    function spread(func, start) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      start = start == null ? 0 : nativeMax(toInteger(start), 0);\n      return baseRest(function(args) {\n        var array = args[start],\n            otherArgs = castSlice(args, 0, start);\n\n        if (array) {\n          arrayPush(otherArgs, array);\n        }\n        return apply(func, this, otherArgs);\n      });\n    }\n\n    /**\n     * Creates a throttled function that only invokes `func` at most once per\n     * every `wait` milliseconds. The throttled function comes with a `cancel`\n     * method to cancel delayed `func` invocations and a `flush` method to\n     * immediately invoke them. Provide `options` to indicate whether `func`\n     * should be invoked on the leading and/or trailing edge of the `wait`\n     * timeout. The `func` is invoked with the last arguments provided to the\n     * throttled function. Subsequent calls to the throttled function return the\n     * result of the last `func` invocation.\n     *\n     * **Note:** If `leading` and `trailing` options are `true`, `func` is\n     * invoked on the trailing edge of the timeout only if the throttled function\n     * is invoked more than once during the `wait` timeout.\n     *\n     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n     * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n     *\n     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n     * for details over the differences between `_.throttle` and `_.debounce`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to throttle.\n     * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n     * @param {Object} [options={}] The options object.\n     * @param {boolean} [options.leading=true]\n     *  Specify invoking on the leading edge of the timeout.\n     * @param {boolean} [options.trailing=true]\n     *  Specify invoking on the trailing edge of the timeout.\n     * @returns {Function} Returns the new throttled function.\n     * @example\n     *\n     * // Avoid excessively updating the position while scrolling.\n     * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n     *\n     * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n     * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n     * jQuery(element).on('click', throttled);\n     *\n     * // Cancel the trailing throttled invocation.\n     * jQuery(window).on('popstate', throttled.cancel);\n     */\n    function throttle(func, wait, options) {\n      var leading = true,\n          trailing = true;\n\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      if (isObject(options)) {\n        leading = 'leading' in options ? !!options.leading : leading;\n        trailing = 'trailing' in options ? !!options.trailing : trailing;\n      }\n      return debounce(func, wait, {\n        'leading': leading,\n        'maxWait': wait,\n        'trailing': trailing\n      });\n    }\n\n    /**\n     * Creates a function that accepts up to one argument, ignoring any\n     * additional arguments.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Function\n     * @param {Function} func The function to cap arguments for.\n     * @returns {Function} Returns the new capped function.\n     * @example\n     *\n     * _.map(['6', '8', '10'], _.unary(parseInt));\n     * // => [6, 8, 10]\n     */\n    function unary(func) {\n      return ary(func, 1);\n    }\n\n    /**\n     * Creates a function that provides `value` to `wrapper` as its first\n     * argument. Any additional arguments provided to the function are appended\n     * to those provided to the `wrapper`. The wrapper is invoked with the `this`\n     * binding of the created function.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {*} value The value to wrap.\n     * @param {Function} [wrapper=identity] The wrapper function.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var p = _.wrap(_.escape, function(func, text) {\n     *   return '<p>' + func(text) + '</p>';\n     * });\n     *\n     * p('fred, barney, & pebbles');\n     * // => '<p>fred, barney, &amp; pebbles</p>'\n     */\n    function wrap(value, wrapper) {\n      return partial(castFunction(wrapper), value);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Casts `value` as an array if it's not one.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.4.0\n     * @category Lang\n     * @param {*} value The value to inspect.\n     * @returns {Array} Returns the cast array.\n     * @example\n     *\n     * _.castArray(1);\n     * // => [1]\n     *\n     * _.castArray({ 'a': 1 });\n     * // => [{ 'a': 1 }]\n     *\n     * _.castArray('abc');\n     * // => ['abc']\n     *\n     * _.castArray(null);\n     * // => [null]\n     *\n     * _.castArray(undefined);\n     * // => [undefined]\n     *\n     * _.castArray();\n     * // => []\n     *\n     * var array = [1, 2, 3];\n     * console.log(_.castArray(array) === array);\n     * // => true\n     */\n    function castArray() {\n      if (!arguments.length) {\n        return [];\n      }\n      var value = arguments[0];\n      return isArray(value) ? value : [value];\n    }\n\n    /**\n     * Creates a shallow clone of `value`.\n     *\n     * **Note:** This method is loosely based on the\n     * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n     * and supports cloning arrays, array buffers, booleans, date objects, maps,\n     * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n     * arrays. The own enumerable properties of `arguments` objects are cloned\n     * as plain objects. An empty object is returned for uncloneable values such\n     * as error objects, functions, DOM nodes, and WeakMaps.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to clone.\n     * @returns {*} Returns the cloned value.\n     * @see _.cloneDeep\n     * @example\n     *\n     * var objects = [{ 'a': 1 }, { 'b': 2 }];\n     *\n     * var shallow = _.clone(objects);\n     * console.log(shallow[0] === objects[0]);\n     * // => true\n     */\n    function clone(value) {\n      return baseClone(value, CLONE_SYMBOLS_FLAG);\n    }\n\n    /**\n     * This method is like `_.clone` except that it accepts `customizer` which\n     * is invoked to produce the cloned value. If `customizer` returns `undefined`,\n     * cloning is handled by the method instead. The `customizer` is invoked with\n     * up to four arguments; (value [, index|key, object, stack]).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to clone.\n     * @param {Function} [customizer] The function to customize cloning.\n     * @returns {*} Returns the cloned value.\n     * @see _.cloneDeepWith\n     * @example\n     *\n     * function customizer(value) {\n     *   if (_.isElement(value)) {\n     *     return value.cloneNode(false);\n     *   }\n     * }\n     *\n     * var el = _.cloneWith(document.body, customizer);\n     *\n     * console.log(el === document.body);\n     * // => false\n     * console.log(el.nodeName);\n     * // => 'BODY'\n     * console.log(el.childNodes.length);\n     * // => 0\n     */\n    function cloneWith(value, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);\n    }\n\n    /**\n     * This method is like `_.clone` except that it recursively clones `value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.0.0\n     * @category Lang\n     * @param {*} value The value to recursively clone.\n     * @returns {*} Returns the deep cloned value.\n     * @see _.clone\n     * @example\n     *\n     * var objects = [{ 'a': 1 }, { 'b': 2 }];\n     *\n     * var deep = _.cloneDeep(objects);\n     * console.log(deep[0] === objects[0]);\n     * // => false\n     */\n    function cloneDeep(value) {\n      return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n    }\n\n    /**\n     * This method is like `_.cloneWith` except that it recursively clones `value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to recursively clone.\n     * @param {Function} [customizer] The function to customize cloning.\n     * @returns {*} Returns the deep cloned value.\n     * @see _.cloneWith\n     * @example\n     *\n     * function customizer(value) {\n     *   if (_.isElement(value)) {\n     *     return value.cloneNode(true);\n     *   }\n     * }\n     *\n     * var el = _.cloneDeepWith(document.body, customizer);\n     *\n     * console.log(el === document.body);\n     * // => false\n     * console.log(el.nodeName);\n     * // => 'BODY'\n     * console.log(el.childNodes.length);\n     * // => 20\n     */\n    function cloneDeepWith(value, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);\n    }\n\n    /**\n     * Checks if `object` conforms to `source` by invoking the predicate\n     * properties of `source` with the corresponding property values of `object`.\n     *\n     * **Note:** This method is equivalent to `_.conforms` when `source` is\n     * partially applied.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.14.0\n     * @category Lang\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2 };\n     *\n     * _.conformsTo(object, { 'b': function(n) { return n > 1; } });\n     * // => true\n     *\n     * _.conformsTo(object, { 'b': function(n) { return n > 2; } });\n     * // => false\n     */\n    function conformsTo(object, source) {\n      return source == null || baseConformsTo(object, source, keys(source));\n    }\n\n    /**\n     * Performs a\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * comparison between two values to determine if they are equivalent.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1 };\n     * var other = { 'a': 1 };\n     *\n     * _.eq(object, object);\n     * // => true\n     *\n     * _.eq(object, other);\n     * // => false\n     *\n     * _.eq('a', 'a');\n     * // => true\n     *\n     * _.eq('a', Object('a'));\n     * // => false\n     *\n     * _.eq(NaN, NaN);\n     * // => true\n     */\n    function eq(value, other) {\n      return value === other || (value !== value && other !== other);\n    }\n\n    /**\n     * Checks if `value` is greater than `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is greater than `other`,\n     *  else `false`.\n     * @see _.lt\n     * @example\n     *\n     * _.gt(3, 1);\n     * // => true\n     *\n     * _.gt(3, 3);\n     * // => false\n     *\n     * _.gt(1, 3);\n     * // => false\n     */\n    var gt = createRelationalOperation(baseGt);\n\n    /**\n     * Checks if `value` is greater than or equal to `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is greater than or equal to\n     *  `other`, else `false`.\n     * @see _.lte\n     * @example\n     *\n     * _.gte(3, 1);\n     * // => true\n     *\n     * _.gte(3, 3);\n     * // => true\n     *\n     * _.gte(1, 3);\n     * // => false\n     */\n    var gte = createRelationalOperation(function(value, other) {\n      return value >= other;\n    });\n\n    /**\n     * Checks if `value` is likely an `arguments` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n     *  else `false`.\n     * @example\n     *\n     * _.isArguments(function() { return arguments; }());\n     * // => true\n     *\n     * _.isArguments([1, 2, 3]);\n     * // => false\n     */\n    var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n      return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n        !propertyIsEnumerable.call(value, 'callee');\n    };\n\n    /**\n     * Checks if `value` is classified as an `Array` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n     * @example\n     *\n     * _.isArray([1, 2, 3]);\n     * // => true\n     *\n     * _.isArray(document.body.children);\n     * // => false\n     *\n     * _.isArray('abc');\n     * // => false\n     *\n     * _.isArray(_.noop);\n     * // => false\n     */\n    var isArray = Array.isArray;\n\n    /**\n     * Checks if `value` is classified as an `ArrayBuffer` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n     * @example\n     *\n     * _.isArrayBuffer(new ArrayBuffer(2));\n     * // => true\n     *\n     * _.isArrayBuffer(new Array(2));\n     * // => false\n     */\n    var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;\n\n    /**\n     * Checks if `value` is array-like. A value is considered array-like if it's\n     * not a function and has a `value.length` that's an integer greater than or\n     * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n     * @example\n     *\n     * _.isArrayLike([1, 2, 3]);\n     * // => true\n     *\n     * _.isArrayLike(document.body.children);\n     * // => true\n     *\n     * _.isArrayLike('abc');\n     * // => true\n     *\n     * _.isArrayLike(_.noop);\n     * // => false\n     */\n    function isArrayLike(value) {\n      return value != null && isLength(value.length) && !isFunction(value);\n    }\n\n    /**\n     * This method is like `_.isArrayLike` except that it also checks if `value`\n     * is an object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array-like object,\n     *  else `false`.\n     * @example\n     *\n     * _.isArrayLikeObject([1, 2, 3]);\n     * // => true\n     *\n     * _.isArrayLikeObject(document.body.children);\n     * // => true\n     *\n     * _.isArrayLikeObject('abc');\n     * // => false\n     *\n     * _.isArrayLikeObject(_.noop);\n     * // => false\n     */\n    function isArrayLikeObject(value) {\n      return isObjectLike(value) && isArrayLike(value);\n    }\n\n    /**\n     * Checks if `value` is classified as a boolean primitive or object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.\n     * @example\n     *\n     * _.isBoolean(false);\n     * // => true\n     *\n     * _.isBoolean(null);\n     * // => false\n     */\n    function isBoolean(value) {\n      return value === true || value === false ||\n        (isObjectLike(value) && baseGetTag(value) == boolTag);\n    }\n\n    /**\n     * Checks if `value` is a buffer.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n     * @example\n     *\n     * _.isBuffer(new Buffer(2));\n     * // => true\n     *\n     * _.isBuffer(new Uint8Array(2));\n     * // => false\n     */\n    var isBuffer = nativeIsBuffer || stubFalse;\n\n    /**\n     * Checks if `value` is classified as a `Date` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n     * @example\n     *\n     * _.isDate(new Date);\n     * // => true\n     *\n     * _.isDate('Mon April 23 2012');\n     * // => false\n     */\n    var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;\n\n    /**\n     * Checks if `value` is likely a DOM element.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.\n     * @example\n     *\n     * _.isElement(document.body);\n     * // => true\n     *\n     * _.isElement('<body>');\n     * // => false\n     */\n    function isElement(value) {\n      return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);\n    }\n\n    /**\n     * Checks if `value` is an empty object, collection, map, or set.\n     *\n     * Objects are considered empty if they have no own enumerable string keyed\n     * properties.\n     *\n     * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n     * jQuery-like collections are considered empty if they have a `length` of `0`.\n     * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n     * @example\n     *\n     * _.isEmpty(null);\n     * // => true\n     *\n     * _.isEmpty(true);\n     * // => true\n     *\n     * _.isEmpty(1);\n     * // => true\n     *\n     * _.isEmpty([1, 2, 3]);\n     * // => false\n     *\n     * _.isEmpty({ 'a': 1 });\n     * // => false\n     */\n    function isEmpty(value) {\n      if (value == null) {\n        return true;\n      }\n      if (isArrayLike(value) &&\n          (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n            isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n        return !value.length;\n      }\n      var tag = getTag(value);\n      if (tag == mapTag || tag == setTag) {\n        return !value.size;\n      }\n      if (isPrototype(value)) {\n        return !baseKeys(value).length;\n      }\n      for (var key in value) {\n        if (hasOwnProperty.call(value, key)) {\n          return false;\n        }\n      }\n      return true;\n    }\n\n    /**\n     * Performs a deep comparison between two values to determine if they are\n     * equivalent.\n     *\n     * **Note:** This method supports comparing arrays, array buffers, booleans,\n     * date objects, error objects, maps, numbers, `Object` objects, regexes,\n     * sets, strings, symbols, and typed arrays. `Object` objects are compared\n     * by their own, not inherited, enumerable properties. Functions and DOM\n     * nodes are compared by strict equality, i.e. `===`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1 };\n     * var other = { 'a': 1 };\n     *\n     * _.isEqual(object, other);\n     * // => true\n     *\n     * object === other;\n     * // => false\n     */\n    function isEqual(value, other) {\n      return baseIsEqual(value, other);\n    }\n\n    /**\n     * This method is like `_.isEqual` except that it accepts `customizer` which\n     * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n     * are handled by the method instead. The `customizer` is invoked with up to\n     * six arguments: (objValue, othValue [, index|key, object, other, stack]).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     * @example\n     *\n     * function isGreeting(value) {\n     *   return /^h(?:i|ello)$/.test(value);\n     * }\n     *\n     * function customizer(objValue, othValue) {\n     *   if (isGreeting(objValue) && isGreeting(othValue)) {\n     *     return true;\n     *   }\n     * }\n     *\n     * var array = ['hello', 'goodbye'];\n     * var other = ['hi', 'goodbye'];\n     *\n     * _.isEqualWith(array, other, customizer);\n     * // => true\n     */\n    function isEqualWith(value, other, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      var result = customizer ? customizer(value, other) : undefined;\n      return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;\n    }\n\n    /**\n     * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,\n     * `SyntaxError`, `TypeError`, or `URIError` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an error object, else `false`.\n     * @example\n     *\n     * _.isError(new Error);\n     * // => true\n     *\n     * _.isError(Error);\n     * // => false\n     */\n    function isError(value) {\n      if (!isObjectLike(value)) {\n        return false;\n      }\n      var tag = baseGetTag(value);\n      return tag == errorTag || tag == domExcTag ||\n        (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));\n    }\n\n    /**\n     * Checks if `value` is a finite primitive number.\n     *\n     * **Note:** This method is based on\n     * [`Number.isFinite`](https://mdn.io/Number/isFinite).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.\n     * @example\n     *\n     * _.isFinite(3);\n     * // => true\n     *\n     * _.isFinite(Number.MIN_VALUE);\n     * // => true\n     *\n     * _.isFinite(Infinity);\n     * // => false\n     *\n     * _.isFinite('3');\n     * // => false\n     */\n    function isFinite(value) {\n      return typeof value == 'number' && nativeIsFinite(value);\n    }\n\n    /**\n     * Checks if `value` is classified as a `Function` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n     * @example\n     *\n     * _.isFunction(_);\n     * // => true\n     *\n     * _.isFunction(/abc/);\n     * // => false\n     */\n    function isFunction(value) {\n      if (!isObject(value)) {\n        return false;\n      }\n      // The use of `Object#toString` avoids issues with the `typeof` operator\n      // in Safari 9 which returns 'object' for typed arrays and other constructors.\n      var tag = baseGetTag(value);\n      return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n    }\n\n    /**\n     * Checks if `value` is an integer.\n     *\n     * **Note:** This method is based on\n     * [`Number.isInteger`](https://mdn.io/Number/isInteger).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an integer, else `false`.\n     * @example\n     *\n     * _.isInteger(3);\n     * // => true\n     *\n     * _.isInteger(Number.MIN_VALUE);\n     * // => false\n     *\n     * _.isInteger(Infinity);\n     * // => false\n     *\n     * _.isInteger('3');\n     * // => false\n     */\n    function isInteger(value) {\n      return typeof value == 'number' && value == toInteger(value);\n    }\n\n    /**\n     * Checks if `value` is a valid array-like length.\n     *\n     * **Note:** This method is loosely based on\n     * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n     * @example\n     *\n     * _.isLength(3);\n     * // => true\n     *\n     * _.isLength(Number.MIN_VALUE);\n     * // => false\n     *\n     * _.isLength(Infinity);\n     * // => false\n     *\n     * _.isLength('3');\n     * // => false\n     */\n    function isLength(value) {\n      return typeof value == 'number' &&\n        value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n    }\n\n    /**\n     * Checks if `value` is the\n     * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n     * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n     * @example\n     *\n     * _.isObject({});\n     * // => true\n     *\n     * _.isObject([1, 2, 3]);\n     * // => true\n     *\n     * _.isObject(_.noop);\n     * // => true\n     *\n     * _.isObject(null);\n     * // => false\n     */\n    function isObject(value) {\n      var type = typeof value;\n      return value != null && (type == 'object' || type == 'function');\n    }\n\n    /**\n     * Checks if `value` is object-like. A value is object-like if it's not `null`\n     * and has a `typeof` result of \"object\".\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n     * @example\n     *\n     * _.isObjectLike({});\n     * // => true\n     *\n     * _.isObjectLike([1, 2, 3]);\n     * // => true\n     *\n     * _.isObjectLike(_.noop);\n     * // => false\n     *\n     * _.isObjectLike(null);\n     * // => false\n     */\n    function isObjectLike(value) {\n      return value != null && typeof value == 'object';\n    }\n\n    /**\n     * Checks if `value` is classified as a `Map` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n     * @example\n     *\n     * _.isMap(new Map);\n     * // => true\n     *\n     * _.isMap(new WeakMap);\n     * // => false\n     */\n    var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\n    /**\n     * Performs a partial deep comparison between `object` and `source` to\n     * determine if `object` contains equivalent property values.\n     *\n     * **Note:** This method is equivalent to `_.matches` when `source` is\n     * partially applied.\n     *\n     * Partial comparisons will match empty array and empty object `source`\n     * values against any array or object value, respectively. See `_.isEqual`\n     * for a list of supported value comparisons.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property values to match.\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2 };\n     *\n     * _.isMatch(object, { 'b': 2 });\n     * // => true\n     *\n     * _.isMatch(object, { 'b': 1 });\n     * // => false\n     */\n    function isMatch(object, source) {\n      return object === source || baseIsMatch(object, source, getMatchData(source));\n    }\n\n    /**\n     * This method is like `_.isMatch` except that it accepts `customizer` which\n     * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n     * are handled by the method instead. The `customizer` is invoked with five\n     * arguments: (objValue, srcValue, index|key, object, source).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property values to match.\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n     * @example\n     *\n     * function isGreeting(value) {\n     *   return /^h(?:i|ello)$/.test(value);\n     * }\n     *\n     * function customizer(objValue, srcValue) {\n     *   if (isGreeting(objValue) && isGreeting(srcValue)) {\n     *     return true;\n     *   }\n     * }\n     *\n     * var object = { 'greeting': 'hello' };\n     * var source = { 'greeting': 'hi' };\n     *\n     * _.isMatchWith(object, source, customizer);\n     * // => true\n     */\n    function isMatchWith(object, source, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return baseIsMatch(object, source, getMatchData(source), customizer);\n    }\n\n    /**\n     * Checks if `value` is `NaN`.\n     *\n     * **Note:** This method is based on\n     * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as\n     * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for\n     * `undefined` and other non-number values.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n     * @example\n     *\n     * _.isNaN(NaN);\n     * // => true\n     *\n     * _.isNaN(new Number(NaN));\n     * // => true\n     *\n     * isNaN(undefined);\n     * // => true\n     *\n     * _.isNaN(undefined);\n     * // => false\n     */\n    function isNaN(value) {\n      // An `NaN` primitive is the only value that is not equal to itself.\n      // Perform the `toStringTag` check first to avoid errors with some\n      // ActiveX objects in IE.\n      return isNumber(value) && value != +value;\n    }\n\n    /**\n     * Checks if `value` is a pristine native function.\n     *\n     * **Note:** This method can't reliably detect native functions in the presence\n     * of the core-js package because core-js circumvents this kind of detection.\n     * Despite multiple requests, the core-js maintainer has made it clear: any\n     * attempt to fix the detection will be obstructed. As a result, we're left\n     * with little choice but to throw an error. Unfortunately, this also affects\n     * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),\n     * which rely on core-js.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a native function,\n     *  else `false`.\n     * @example\n     *\n     * _.isNative(Array.prototype.push);\n     * // => true\n     *\n     * _.isNative(_);\n     * // => false\n     */\n    function isNative(value) {\n      if (isMaskable(value)) {\n        throw new Error(CORE_ERROR_TEXT);\n      }\n      return baseIsNative(value);\n    }\n\n    /**\n     * Checks if `value` is `null`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is `null`, else `false`.\n     * @example\n     *\n     * _.isNull(null);\n     * // => true\n     *\n     * _.isNull(void 0);\n     * // => false\n     */\n    function isNull(value) {\n      return value === null;\n    }\n\n    /**\n     * Checks if `value` is `null` or `undefined`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\n     * @example\n     *\n     * _.isNil(null);\n     * // => true\n     *\n     * _.isNil(void 0);\n     * // => true\n     *\n     * _.isNil(NaN);\n     * // => false\n     */\n    function isNil(value) {\n      return value == null;\n    }\n\n    /**\n     * Checks if `value` is classified as a `Number` primitive or object.\n     *\n     * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n     * classified as numbers, use the `_.isFinite` method.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n     * @example\n     *\n     * _.isNumber(3);\n     * // => true\n     *\n     * _.isNumber(Number.MIN_VALUE);\n     * // => true\n     *\n     * _.isNumber(Infinity);\n     * // => true\n     *\n     * _.isNumber('3');\n     * // => false\n     */\n    function isNumber(value) {\n      return typeof value == 'number' ||\n        (isObjectLike(value) && baseGetTag(value) == numberTag);\n    }\n\n    /**\n     * Checks if `value` is a plain object, that is, an object created by the\n     * `Object` constructor or one with a `[[Prototype]]` of `null`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.8.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     * }\n     *\n     * _.isPlainObject(new Foo);\n     * // => false\n     *\n     * _.isPlainObject([1, 2, 3]);\n     * // => false\n     *\n     * _.isPlainObject({ 'x': 0, 'y': 0 });\n     * // => true\n     *\n     * _.isPlainObject(Object.create(null));\n     * // => true\n     */\n    function isPlainObject(value) {\n      if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n        return false;\n      }\n      var proto = getPrototype(value);\n      if (proto === null) {\n        return true;\n      }\n      var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n      return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n        funcToString.call(Ctor) == objectCtorString;\n    }\n\n    /**\n     * Checks if `value` is classified as a `RegExp` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n     * @example\n     *\n     * _.isRegExp(/abc/);\n     * // => true\n     *\n     * _.isRegExp('/abc/');\n     * // => false\n     */\n    var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;\n\n    /**\n     * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754\n     * double precision number which isn't the result of a rounded unsafe integer.\n     *\n     * **Note:** This method is based on\n     * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`.\n     * @example\n     *\n     * _.isSafeInteger(3);\n     * // => true\n     *\n     * _.isSafeInteger(Number.MIN_VALUE);\n     * // => false\n     *\n     * _.isSafeInteger(Infinity);\n     * // => false\n     *\n     * _.isSafeInteger('3');\n     * // => false\n     */\n    function isSafeInteger(value) {\n      return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;\n    }\n\n    /**\n     * Checks if `value` is classified as a `Set` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n     * @example\n     *\n     * _.isSet(new Set);\n     * // => true\n     *\n     * _.isSet(new WeakSet);\n     * // => false\n     */\n    var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\n    /**\n     * Checks if `value` is classified as a `String` primitive or object.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n     * @example\n     *\n     * _.isString('abc');\n     * // => true\n     *\n     * _.isString(1);\n     * // => false\n     */\n    function isString(value) {\n      return typeof value == 'string' ||\n        (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n    }\n\n    /**\n     * Checks if `value` is classified as a `Symbol` primitive or object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n     * @example\n     *\n     * _.isSymbol(Symbol.iterator);\n     * // => true\n     *\n     * _.isSymbol('abc');\n     * // => false\n     */\n    function isSymbol(value) {\n      return typeof value == 'symbol' ||\n        (isObjectLike(value) && baseGetTag(value) == symbolTag);\n    }\n\n    /**\n     * Checks if `value` is classified as a typed array.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n     * @example\n     *\n     * _.isTypedArray(new Uint8Array);\n     * // => true\n     *\n     * _.isTypedArray([]);\n     * // => false\n     */\n    var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n    /**\n     * Checks if `value` is `undefined`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n     * @example\n     *\n     * _.isUndefined(void 0);\n     * // => true\n     *\n     * _.isUndefined(null);\n     * // => false\n     */\n    function isUndefined(value) {\n      return value === undefined;\n    }\n\n    /**\n     * Checks if `value` is classified as a `WeakMap` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.\n     * @example\n     *\n     * _.isWeakMap(new WeakMap);\n     * // => true\n     *\n     * _.isWeakMap(new Map);\n     * // => false\n     */\n    function isWeakMap(value) {\n      return isObjectLike(value) && getTag(value) == weakMapTag;\n    }\n\n    /**\n     * Checks if `value` is classified as a `WeakSet` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.\n     * @example\n     *\n     * _.isWeakSet(new WeakSet);\n     * // => true\n     *\n     * _.isWeakSet(new Set);\n     * // => false\n     */\n    function isWeakSet(value) {\n      return isObjectLike(value) && baseGetTag(value) == weakSetTag;\n    }\n\n    /**\n     * Checks if `value` is less than `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is less than `other`,\n     *  else `false`.\n     * @see _.gt\n     * @example\n     *\n     * _.lt(1, 3);\n     * // => true\n     *\n     * _.lt(3, 3);\n     * // => false\n     *\n     * _.lt(3, 1);\n     * // => false\n     */\n    var lt = createRelationalOperation(baseLt);\n\n    /**\n     * Checks if `value` is less than or equal to `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is less than or equal to\n     *  `other`, else `false`.\n     * @see _.gte\n     * @example\n     *\n     * _.lte(1, 3);\n     * // => true\n     *\n     * _.lte(3, 3);\n     * // => true\n     *\n     * _.lte(3, 1);\n     * // => false\n     */\n    var lte = createRelationalOperation(function(value, other) {\n      return value <= other;\n    });\n\n    /**\n     * Converts `value` to an array.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {Array} Returns the converted array.\n     * @example\n     *\n     * _.toArray({ 'a': 1, 'b': 2 });\n     * // => [1, 2]\n     *\n     * _.toArray('abc');\n     * // => ['a', 'b', 'c']\n     *\n     * _.toArray(1);\n     * // => []\n     *\n     * _.toArray(null);\n     * // => []\n     */\n    function toArray(value) {\n      if (!value) {\n        return [];\n      }\n      if (isArrayLike(value)) {\n        return isString(value) ? stringToArray(value) : copyArray(value);\n      }\n      if (symIterator && value[symIterator]) {\n        return iteratorToArray(value[symIterator]());\n      }\n      var tag = getTag(value),\n          func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);\n\n      return func(value);\n    }\n\n    /**\n     * Converts `value` to a finite number.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.12.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted number.\n     * @example\n     *\n     * _.toFinite(3.2);\n     * // => 3.2\n     *\n     * _.toFinite(Number.MIN_VALUE);\n     * // => 5e-324\n     *\n     * _.toFinite(Infinity);\n     * // => 1.7976931348623157e+308\n     *\n     * _.toFinite('3.2');\n     * // => 3.2\n     */\n    function toFinite(value) {\n      if (!value) {\n        return value === 0 ? value : 0;\n      }\n      value = toNumber(value);\n      if (value === INFINITY || value === -INFINITY) {\n        var sign = (value < 0 ? -1 : 1);\n        return sign * MAX_INTEGER;\n      }\n      return value === value ? value : 0;\n    }\n\n    /**\n     * Converts `value` to an integer.\n     *\n     * **Note:** This method is loosely based on\n     * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.toInteger(3.2);\n     * // => 3\n     *\n     * _.toInteger(Number.MIN_VALUE);\n     * // => 0\n     *\n     * _.toInteger(Infinity);\n     * // => 1.7976931348623157e+308\n     *\n     * _.toInteger('3.2');\n     * // => 3\n     */\n    function toInteger(value) {\n      var result = toFinite(value),\n          remainder = result % 1;\n\n      return result === result ? (remainder ? result - remainder : result) : 0;\n    }\n\n    /**\n     * Converts `value` to an integer suitable for use as the length of an\n     * array-like object.\n     *\n     * **Note:** This method is based on\n     * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.toLength(3.2);\n     * // => 3\n     *\n     * _.toLength(Number.MIN_VALUE);\n     * // => 0\n     *\n     * _.toLength(Infinity);\n     * // => 4294967295\n     *\n     * _.toLength('3.2');\n     * // => 3\n     */\n    function toLength(value) {\n      return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;\n    }\n\n    /**\n     * Converts `value` to a number.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to process.\n     * @returns {number} Returns the number.\n     * @example\n     *\n     * _.toNumber(3.2);\n     * // => 3.2\n     *\n     * _.toNumber(Number.MIN_VALUE);\n     * // => 5e-324\n     *\n     * _.toNumber(Infinity);\n     * // => Infinity\n     *\n     * _.toNumber('3.2');\n     * // => 3.2\n     */\n    function toNumber(value) {\n      if (typeof value == 'number') {\n        return value;\n      }\n      if (isSymbol(value)) {\n        return NAN;\n      }\n      if (isObject(value)) {\n        var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n        value = isObject(other) ? (other + '') : other;\n      }\n      if (typeof value != 'string') {\n        return value === 0 ? value : +value;\n      }\n      value = baseTrim(value);\n      var isBinary = reIsBinary.test(value);\n      return (isBinary || reIsOctal.test(value))\n        ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n        : (reIsBadHex.test(value) ? NAN : +value);\n    }\n\n    /**\n     * Converts `value` to a plain object flattening inherited enumerable string\n     * keyed properties of `value` to own properties of the plain object.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {Object} Returns the converted plain object.\n     * @example\n     *\n     * function Foo() {\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.assign({ 'a': 1 }, new Foo);\n     * // => { 'a': 1, 'b': 2 }\n     *\n     * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n     * // => { 'a': 1, 'b': 2, 'c': 3 }\n     */\n    function toPlainObject(value) {\n      return copyObject(value, keysIn(value));\n    }\n\n    /**\n     * Converts `value` to a safe integer. A safe integer can be compared and\n     * represented correctly.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.toSafeInteger(3.2);\n     * // => 3\n     *\n     * _.toSafeInteger(Number.MIN_VALUE);\n     * // => 0\n     *\n     * _.toSafeInteger(Infinity);\n     * // => 9007199254740991\n     *\n     * _.toSafeInteger('3.2');\n     * // => 3\n     */\n    function toSafeInteger(value) {\n      return value\n        ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)\n        : (value === 0 ? value : 0);\n    }\n\n    /**\n     * Converts `value` to a string. An empty string is returned for `null`\n     * and `undefined` values. The sign of `-0` is preserved.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {string} Returns the converted string.\n     * @example\n     *\n     * _.toString(null);\n     * // => ''\n     *\n     * _.toString(-0);\n     * // => '-0'\n     *\n     * _.toString([1, 2, 3]);\n     * // => '1,2,3'\n     */\n    function toString(value) {\n      return value == null ? '' : baseToString(value);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Assigns own enumerable string keyed properties of source objects to the\n     * destination object. Source objects are applied from left to right.\n     * Subsequent sources overwrite property assignments of previous sources.\n     *\n     * **Note:** This method mutates `object` and is loosely based on\n     * [`Object.assign`](https://mdn.io/Object/assign).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.10.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.assignIn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     * }\n     *\n     * function Bar() {\n     *   this.c = 3;\n     * }\n     *\n     * Foo.prototype.b = 2;\n     * Bar.prototype.d = 4;\n     *\n     * _.assign({ 'a': 0 }, new Foo, new Bar);\n     * // => { 'a': 1, 'c': 3 }\n     */\n    var assign = createAssigner(function(object, source) {\n      if (isPrototype(source) || isArrayLike(source)) {\n        copyObject(source, keys(source), object);\n        return;\n      }\n      for (var key in source) {\n        if (hasOwnProperty.call(source, key)) {\n          assignValue(object, key, source[key]);\n        }\n      }\n    });\n\n    /**\n     * This method is like `_.assign` except that it iterates over own and\n     * inherited source properties.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias extend\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.assign\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     * }\n     *\n     * function Bar() {\n     *   this.c = 3;\n     * }\n     *\n     * Foo.prototype.b = 2;\n     * Bar.prototype.d = 4;\n     *\n     * _.assignIn({ 'a': 0 }, new Foo, new Bar);\n     * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }\n     */\n    var assignIn = createAssigner(function(object, source) {\n      copyObject(source, keysIn(source), object);\n    });\n\n    /**\n     * This method is like `_.assignIn` except that it accepts `customizer`\n     * which is invoked to produce the assigned values. If `customizer` returns\n     * `undefined`, assignment is handled by the method instead. The `customizer`\n     * is invoked with five arguments: (objValue, srcValue, key, object, source).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias extendWith\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} sources The source objects.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @see _.assignWith\n     * @example\n     *\n     * function customizer(objValue, srcValue) {\n     *   return _.isUndefined(objValue) ? srcValue : objValue;\n     * }\n     *\n     * var defaults = _.partialRight(_.assignInWith, customizer);\n     *\n     * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n     * // => { 'a': 1, 'b': 2 }\n     */\n    var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {\n      copyObject(source, keysIn(source), object, customizer);\n    });\n\n    /**\n     * This method is like `_.assign` except that it accepts `customizer`\n     * which is invoked to produce the assigned values. If `customizer` returns\n     * `undefined`, assignment is handled by the method instead. The `customizer`\n     * is invoked with five arguments: (objValue, srcValue, key, object, source).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} sources The source objects.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @see _.assignInWith\n     * @example\n     *\n     * function customizer(objValue, srcValue) {\n     *   return _.isUndefined(objValue) ? srcValue : objValue;\n     * }\n     *\n     * var defaults = _.partialRight(_.assignWith, customizer);\n     *\n     * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n     * // => { 'a': 1, 'b': 2 }\n     */\n    var assignWith = createAssigner(function(object, source, srcIndex, customizer) {\n      copyObject(source, keys(source), object, customizer);\n    });\n\n    /**\n     * Creates an array of values corresponding to `paths` of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.0.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {...(string|string[])} [paths] The property paths to pick.\n     * @returns {Array} Returns the picked values.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n     *\n     * _.at(object, ['a[0].b.c', 'a[1]']);\n     * // => [3, 4]\n     */\n    var at = flatRest(baseAt);\n\n    /**\n     * Creates an object that inherits from the `prototype` object. If a\n     * `properties` object is given, its own enumerable string keyed properties\n     * are assigned to the created object.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.3.0\n     * @category Object\n     * @param {Object} prototype The object to inherit from.\n     * @param {Object} [properties] The properties to assign to the object.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * function Shape() {\n     *   this.x = 0;\n     *   this.y = 0;\n     * }\n     *\n     * function Circle() {\n     *   Shape.call(this);\n     * }\n     *\n     * Circle.prototype = _.create(Shape.prototype, {\n     *   'constructor': Circle\n     * });\n     *\n     * var circle = new Circle;\n     * circle instanceof Circle;\n     * // => true\n     *\n     * circle instanceof Shape;\n     * // => true\n     */\n    function create(prototype, properties) {\n      var result = baseCreate(prototype);\n      return properties == null ? result : baseAssign(result, properties);\n    }\n\n    /**\n     * Assigns own and inherited enumerable string keyed properties of source\n     * objects to the destination object for all destination properties that\n     * resolve to `undefined`. Source objects are applied from left to right.\n     * Once a property is set, additional values of the same property are ignored.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.defaultsDeep\n     * @example\n     *\n     * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n     * // => { 'a': 1, 'b': 2 }\n     */\n    var defaults = baseRest(function(object, sources) {\n      object = Object(object);\n\n      var index = -1;\n      var length = sources.length;\n      var guard = length > 2 ? sources[2] : undefined;\n\n      if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n        length = 1;\n      }\n\n      while (++index < length) {\n        var source = sources[index];\n        var props = keysIn(source);\n        var propsIndex = -1;\n        var propsLength = props.length;\n\n        while (++propsIndex < propsLength) {\n          var key = props[propsIndex];\n          var value = object[key];\n\n          if (value === undefined ||\n              (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n            object[key] = source[key];\n          }\n        }\n      }\n\n      return object;\n    });\n\n    /**\n     * This method is like `_.defaults` except that it recursively assigns\n     * default properties.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.defaults\n     * @example\n     *\n     * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });\n     * // => { 'a': { 'b': 2, 'c': 3 } }\n     */\n    var defaultsDeep = baseRest(function(args) {\n      args.push(undefined, customDefaultsMerge);\n      return apply(mergeWith, undefined, args);\n    });\n\n    /**\n     * This method is like `_.find` except that it returns the key of the first\n     * element `predicate` returns truthy for instead of the element itself.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.1.0\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {string|undefined} Returns the key of the matched element,\n     *  else `undefined`.\n     * @example\n     *\n     * var users = {\n     *   'barney':  { 'age': 36, 'active': true },\n     *   'fred':    { 'age': 40, 'active': false },\n     *   'pebbles': { 'age': 1,  'active': true }\n     * };\n     *\n     * _.findKey(users, function(o) { return o.age < 40; });\n     * // => 'barney' (iteration order is not guaranteed)\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findKey(users, { 'age': 1, 'active': true });\n     * // => 'pebbles'\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findKey(users, ['active', false]);\n     * // => 'fred'\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findKey(users, 'active');\n     * // => 'barney'\n     */\n    function findKey(object, predicate) {\n      return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);\n    }\n\n    /**\n     * This method is like `_.findKey` except that it iterates over elements of\n     * a collection in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {string|undefined} Returns the key of the matched element,\n     *  else `undefined`.\n     * @example\n     *\n     * var users = {\n     *   'barney':  { 'age': 36, 'active': true },\n     *   'fred':    { 'age': 40, 'active': false },\n     *   'pebbles': { 'age': 1,  'active': true }\n     * };\n     *\n     * _.findLastKey(users, function(o) { return o.age < 40; });\n     * // => returns 'pebbles' assuming `_.findKey` returns 'barney'\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findLastKey(users, { 'age': 36, 'active': true });\n     * // => 'barney'\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findLastKey(users, ['active', false]);\n     * // => 'fred'\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findLastKey(users, 'active');\n     * // => 'pebbles'\n     */\n    function findLastKey(object, predicate) {\n      return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);\n    }\n\n    /**\n     * Iterates over own and inherited enumerable string keyed properties of an\n     * object and invokes `iteratee` for each property. The iteratee is invoked\n     * with three arguments: (value, key, object). Iteratee functions may exit\n     * iteration early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.3.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forInRight\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forIn(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n     */\n    function forIn(object, iteratee) {\n      return object == null\n        ? object\n        : baseFor(object, getIteratee(iteratee, 3), keysIn);\n    }\n\n    /**\n     * This method is like `_.forIn` except that it iterates over properties of\n     * `object` in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forIn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forInRight(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.\n     */\n    function forInRight(object, iteratee) {\n      return object == null\n        ? object\n        : baseForRight(object, getIteratee(iteratee, 3), keysIn);\n    }\n\n    /**\n     * Iterates over own enumerable string keyed properties of an object and\n     * invokes `iteratee` for each property. The iteratee is invoked with three\n     * arguments: (value, key, object). Iteratee functions may exit iteration\n     * early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.3.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forOwnRight\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forOwn(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n     */\n    function forOwn(object, iteratee) {\n      return object && baseForOwn(object, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * This method is like `_.forOwn` except that it iterates over properties of\n     * `object` in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forOwn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forOwnRight(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.\n     */\n    function forOwnRight(object, iteratee) {\n      return object && baseForOwnRight(object, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * Creates an array of function property names from own enumerable properties\n     * of `object`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @returns {Array} Returns the function names.\n     * @see _.functionsIn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = _.constant('a');\n     *   this.b = _.constant('b');\n     * }\n     *\n     * Foo.prototype.c = _.constant('c');\n     *\n     * _.functions(new Foo);\n     * // => ['a', 'b']\n     */\n    function functions(object) {\n      return object == null ? [] : baseFunctions(object, keys(object));\n    }\n\n    /**\n     * Creates an array of function property names from own and inherited\n     * enumerable properties of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @returns {Array} Returns the function names.\n     * @see _.functions\n     * @example\n     *\n     * function Foo() {\n     *   this.a = _.constant('a');\n     *   this.b = _.constant('b');\n     * }\n     *\n     * Foo.prototype.c = _.constant('c');\n     *\n     * _.functionsIn(new Foo);\n     * // => ['a', 'b', 'c']\n     */\n    function functionsIn(object) {\n      return object == null ? [] : baseFunctions(object, keysIn(object));\n    }\n\n    /**\n     * Gets the value at `path` of `object`. If the resolved value is\n     * `undefined`, the `defaultValue` is returned in its place.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the property to get.\n     * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n     *\n     * _.get(object, 'a[0].b.c');\n     * // => 3\n     *\n     * _.get(object, ['a', '0', 'b', 'c']);\n     * // => 3\n     *\n     * _.get(object, 'a.b.c', 'default');\n     * // => 'default'\n     */\n    function get(object, path, defaultValue) {\n      var result = object == null ? undefined : baseGet(object, path);\n      return result === undefined ? defaultValue : result;\n    }\n\n    /**\n     * Checks if `path` is a direct property of `object`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path to check.\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\n     * @example\n     *\n     * var object = { 'a': { 'b': 2 } };\n     * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n     *\n     * _.has(object, 'a');\n     * // => true\n     *\n     * _.has(object, 'a.b');\n     * // => true\n     *\n     * _.has(object, ['a', 'b']);\n     * // => true\n     *\n     * _.has(other, 'a');\n     * // => false\n     */\n    function has(object, path) {\n      return object != null && hasPath(object, path, baseHas);\n    }\n\n    /**\n     * Checks if `path` is a direct or inherited property of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path to check.\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\n     * @example\n     *\n     * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n     *\n     * _.hasIn(object, 'a');\n     * // => true\n     *\n     * _.hasIn(object, 'a.b');\n     * // => true\n     *\n     * _.hasIn(object, ['a', 'b']);\n     * // => true\n     *\n     * _.hasIn(object, 'b');\n     * // => false\n     */\n    function hasIn(object, path) {\n      return object != null && hasPath(object, path, baseHasIn);\n    }\n\n    /**\n     * Creates an object composed of the inverted keys and values of `object`.\n     * If `object` contains duplicate values, subsequent values overwrite\n     * property assignments of previous values.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.7.0\n     * @category Object\n     * @param {Object} object The object to invert.\n     * @returns {Object} Returns the new inverted object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2, 'c': 1 };\n     *\n     * _.invert(object);\n     * // => { '1': 'c', '2': 'b' }\n     */\n    var invert = createInverter(function(result, value, key) {\n      if (value != null &&\n          typeof value.toString != 'function') {\n        value = nativeObjectToString.call(value);\n      }\n\n      result[value] = key;\n    }, constant(identity));\n\n    /**\n     * This method is like `_.invert` except that the inverted object is generated\n     * from the results of running each element of `object` thru `iteratee`. The\n     * corresponding inverted value of each inverted key is an array of keys\n     * responsible for generating the inverted value. The iteratee is invoked\n     * with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.1.0\n     * @category Object\n     * @param {Object} object The object to invert.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Object} Returns the new inverted object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2, 'c': 1 };\n     *\n     * _.invertBy(object);\n     * // => { '1': ['a', 'c'], '2': ['b'] }\n     *\n     * _.invertBy(object, function(value) {\n     *   return 'group' + value;\n     * });\n     * // => { 'group1': ['a', 'c'], 'group2': ['b'] }\n     */\n    var invertBy = createInverter(function(result, value, key) {\n      if (value != null &&\n          typeof value.toString != 'function') {\n        value = nativeObjectToString.call(value);\n      }\n\n      if (hasOwnProperty.call(result, value)) {\n        result[value].push(key);\n      } else {\n        result[value] = [key];\n      }\n    }, getIteratee);\n\n    /**\n     * Invokes the method at `path` of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the method to invoke.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {*} Returns the result of the invoked method.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };\n     *\n     * _.invoke(object, 'a[0].b.c.slice', 1, 3);\n     * // => [2, 3]\n     */\n    var invoke = baseRest(baseInvoke);\n\n    /**\n     * Creates an array of the own enumerable property names of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects. See the\n     * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n     * for more details.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.keys(new Foo);\n     * // => ['a', 'b'] (iteration order is not guaranteed)\n     *\n     * _.keys('hi');\n     * // => ['0', '1']\n     */\n    function keys(object) {\n      return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n    }\n\n    /**\n     * Creates an array of the own and inherited enumerable property names of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.keysIn(new Foo);\n     * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n     */\n    function keysIn(object) {\n      return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n    }\n\n    /**\n     * The opposite of `_.mapValues`; this method creates an object with the\n     * same values as `object` and keys generated by running each own enumerable\n     * string keyed property of `object` thru `iteratee`. The iteratee is invoked\n     * with three arguments: (value, key, object).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.8.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns the new mapped object.\n     * @see _.mapValues\n     * @example\n     *\n     * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {\n     *   return key + value;\n     * });\n     * // => { 'a1': 1, 'b2': 2 }\n     */\n    function mapKeys(object, iteratee) {\n      var result = {};\n      iteratee = getIteratee(iteratee, 3);\n\n      baseForOwn(object, function(value, key, object) {\n        baseAssignValue(result, iteratee(value, key, object), value);\n      });\n      return result;\n    }\n\n    /**\n     * Creates an object with the same keys as `object` and values generated\n     * by running each own enumerable string keyed property of `object` thru\n     * `iteratee`. The iteratee is invoked with three arguments:\n     * (value, key, object).\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns the new mapped object.\n     * @see _.mapKeys\n     * @example\n     *\n     * var users = {\n     *   'fred':    { 'user': 'fred',    'age': 40 },\n     *   'pebbles': { 'user': 'pebbles', 'age': 1 }\n     * };\n     *\n     * _.mapValues(users, function(o) { return o.age; });\n     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.mapValues(users, 'age');\n     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n     */\n    function mapValues(object, iteratee) {\n      var result = {};\n      iteratee = getIteratee(iteratee, 3);\n\n      baseForOwn(object, function(value, key, object) {\n        baseAssignValue(result, key, iteratee(value, key, object));\n      });\n      return result;\n    }\n\n    /**\n     * This method is like `_.assign` except that it recursively merges own and\n     * inherited enumerable string keyed properties of source objects into the\n     * destination object. Source properties that resolve to `undefined` are\n     * skipped if a destination value exists. Array and plain object properties\n     * are merged recursively. Other objects and value types are overridden by\n     * assignment. Source objects are applied from left to right. Subsequent\n     * sources overwrite property assignments of previous sources.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.5.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = {\n     *   'a': [{ 'b': 2 }, { 'd': 4 }]\n     * };\n     *\n     * var other = {\n     *   'a': [{ 'c': 3 }, { 'e': 5 }]\n     * };\n     *\n     * _.merge(object, other);\n     * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n     */\n    var merge = createAssigner(function(object, source, srcIndex) {\n      baseMerge(object, source, srcIndex);\n    });\n\n    /**\n     * This method is like `_.merge` except that it accepts `customizer` which\n     * is invoked to produce the merged values of the destination and source\n     * properties. If `customizer` returns `undefined`, merging is handled by the\n     * method instead. The `customizer` is invoked with six arguments:\n     * (objValue, srcValue, key, object, source, stack).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} sources The source objects.\n     * @param {Function} customizer The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * function customizer(objValue, srcValue) {\n     *   if (_.isArray(objValue)) {\n     *     return objValue.concat(srcValue);\n     *   }\n     * }\n     *\n     * var object = { 'a': [1], 'b': [2] };\n     * var other = { 'a': [3], 'b': [4] };\n     *\n     * _.mergeWith(object, other, customizer);\n     * // => { 'a': [1, 3], 'b': [2, 4] }\n     */\n    var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {\n      baseMerge(object, source, srcIndex, customizer);\n    });\n\n    /**\n     * The opposite of `_.pick`; this method creates an object composed of the\n     * own and inherited enumerable property paths of `object` that are not omitted.\n     *\n     * **Note:** This method is considerably slower than `_.pick`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {...(string|string[])} [paths] The property paths to omit.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.omit(object, ['a', 'c']);\n     * // => { 'b': '2' }\n     */\n    var omit = flatRest(function(object, paths) {\n      var result = {};\n      if (object == null) {\n        return result;\n      }\n      var isDeep = false;\n      paths = arrayMap(paths, function(path) {\n        path = castPath(path, object);\n        isDeep || (isDeep = path.length > 1);\n        return path;\n      });\n      copyObject(object, getAllKeysIn(object), result);\n      if (isDeep) {\n        result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n      }\n      var length = paths.length;\n      while (length--) {\n        baseUnset(result, paths[length]);\n      }\n      return result;\n    });\n\n    /**\n     * The opposite of `_.pickBy`; this method creates an object composed of\n     * the own and inherited enumerable string keyed properties of `object` that\n     * `predicate` doesn't return truthy for. The predicate is invoked with two\n     * arguments: (value, key).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {Function} [predicate=_.identity] The function invoked per property.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.omitBy(object, _.isNumber);\n     * // => { 'b': '2' }\n     */\n    function omitBy(object, predicate) {\n      return pickBy(object, negate(getIteratee(predicate)));\n    }\n\n    /**\n     * Creates an object composed of the picked `object` properties.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {...(string|string[])} [paths] The property paths to pick.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.pick(object, ['a', 'c']);\n     * // => { 'a': 1, 'c': 3 }\n     */\n    var pick = flatRest(function(object, paths) {\n      return object == null ? {} : basePick(object, paths);\n    });\n\n    /**\n     * Creates an object composed of the `object` properties `predicate` returns\n     * truthy for. The predicate is invoked with two arguments: (value, key).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {Function} [predicate=_.identity] The function invoked per property.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.pickBy(object, _.isNumber);\n     * // => { 'a': 1, 'c': 3 }\n     */\n    function pickBy(object, predicate) {\n      if (object == null) {\n        return {};\n      }\n      var props = arrayMap(getAllKeysIn(object), function(prop) {\n        return [prop];\n      });\n      predicate = getIteratee(predicate);\n      return basePickBy(object, props, function(value, path) {\n        return predicate(value, path[0]);\n      });\n    }\n\n    /**\n     * This method is like `_.get` except that if the resolved value is a\n     * function it's invoked with the `this` binding of its parent object and\n     * its result is returned.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the property to resolve.\n     * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };\n     *\n     * _.result(object, 'a[0].b.c1');\n     * // => 3\n     *\n     * _.result(object, 'a[0].b.c2');\n     * // => 4\n     *\n     * _.result(object, 'a[0].b.c3', 'default');\n     * // => 'default'\n     *\n     * _.result(object, 'a[0].b.c3', _.constant('default'));\n     * // => 'default'\n     */\n    function result(object, path, defaultValue) {\n      path = castPath(path, object);\n\n      var index = -1,\n          length = path.length;\n\n      // Ensure the loop is entered when path is empty.\n      if (!length) {\n        length = 1;\n        object = undefined;\n      }\n      while (++index < length) {\n        var value = object == null ? undefined : object[toKey(path[index])];\n        if (value === undefined) {\n          index = length;\n          value = defaultValue;\n        }\n        object = isFunction(value) ? value.call(object) : value;\n      }\n      return object;\n    }\n\n    /**\n     * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n     * it's created. Arrays are created for missing index properties while objects\n     * are created for all other missing properties. Use `_.setWith` to customize\n     * `path` creation.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n     *\n     * _.set(object, 'a[0].b.c', 4);\n     * console.log(object.a[0].b.c);\n     * // => 4\n     *\n     * _.set(object, ['x', '0', 'y', 'z'], 5);\n     * console.log(object.x[0].y.z);\n     * // => 5\n     */\n    function set(object, path, value) {\n      return object == null ? object : baseSet(object, path, value);\n    }\n\n    /**\n     * This method is like `_.set` except that it accepts `customizer` which is\n     * invoked to produce the objects of `path`.  If `customizer` returns `undefined`\n     * path creation is handled by the method instead. The `customizer` is invoked\n     * with three arguments: (nsValue, key, nsObject).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {*} value The value to set.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = {};\n     *\n     * _.setWith(object, '[0][1]', 'a', Object);\n     * // => { '0': { '1': 'a' } }\n     */\n    function setWith(object, path, value, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return object == null ? object : baseSet(object, path, value, customizer);\n    }\n\n    /**\n     * Creates an array of own enumerable string keyed-value pairs for `object`\n     * which can be consumed by `_.fromPairs`. If `object` is a map or set, its\n     * entries are returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias entries\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the key-value pairs.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.toPairs(new Foo);\n     * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)\n     */\n    var toPairs = createToPairs(keys);\n\n    /**\n     * Creates an array of own and inherited enumerable string keyed-value pairs\n     * for `object` which can be consumed by `_.fromPairs`. If `object` is a map\n     * or set, its entries are returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias entriesIn\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the key-value pairs.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.toPairsIn(new Foo);\n     * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)\n     */\n    var toPairsIn = createToPairs(keysIn);\n\n    /**\n     * An alternative to `_.reduce`; this method transforms `object` to a new\n     * `accumulator` object which is the result of running each of its own\n     * enumerable string keyed properties thru `iteratee`, with each invocation\n     * potentially mutating the `accumulator` object. If `accumulator` is not\n     * provided, a new object with the same `[[Prototype]]` will be used. The\n     * iteratee is invoked with four arguments: (accumulator, value, key, object).\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.3.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The custom accumulator value.\n     * @returns {*} Returns the accumulated value.\n     * @example\n     *\n     * _.transform([2, 3, 4], function(result, n) {\n     *   result.push(n *= n);\n     *   return n % 2 == 0;\n     * }, []);\n     * // => [4, 9]\n     *\n     * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n     *   (result[value] || (result[value] = [])).push(key);\n     * }, {});\n     * // => { '1': ['a', 'c'], '2': ['b'] }\n     */\n    function transform(object, iteratee, accumulator) {\n      var isArr = isArray(object),\n          isArrLike = isArr || isBuffer(object) || isTypedArray(object);\n\n      iteratee = getIteratee(iteratee, 4);\n      if (accumulator == null) {\n        var Ctor = object && object.constructor;\n        if (isArrLike) {\n          accumulator = isArr ? new Ctor : [];\n        }\n        else if (isObject(object)) {\n          accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};\n        }\n        else {\n          accumulator = {};\n        }\n      }\n      (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {\n        return iteratee(accumulator, value, index, object);\n      });\n      return accumulator;\n    }\n\n    /**\n     * Removes the property at `path` of `object`.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to unset.\n     * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 7 } }] };\n     * _.unset(object, 'a[0].b.c');\n     * // => true\n     *\n     * console.log(object);\n     * // => { 'a': [{ 'b': {} }] };\n     *\n     * _.unset(object, ['a', '0', 'b', 'c']);\n     * // => true\n     *\n     * console.log(object);\n     * // => { 'a': [{ 'b': {} }] };\n     */\n    function unset(object, path) {\n      return object == null ? true : baseUnset(object, path);\n    }\n\n    /**\n     * This method is like `_.set` except that accepts `updater` to produce the\n     * value to set. Use `_.updateWith` to customize `path` creation. The `updater`\n     * is invoked with one argument: (value).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.6.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {Function} updater The function to produce the updated value.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n     *\n     * _.update(object, 'a[0].b.c', function(n) { return n * n; });\n     * console.log(object.a[0].b.c);\n     * // => 9\n     *\n     * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });\n     * console.log(object.x[0].y.z);\n     * // => 0\n     */\n    function update(object, path, updater) {\n      return object == null ? object : baseUpdate(object, path, castFunction(updater));\n    }\n\n    /**\n     * This method is like `_.update` except that it accepts `customizer` which is\n     * invoked to produce the objects of `path`.  If `customizer` returns `undefined`\n     * path creation is handled by the method instead. The `customizer` is invoked\n     * with three arguments: (nsValue, key, nsObject).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.6.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {Function} updater The function to produce the updated value.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = {};\n     *\n     * _.updateWith(object, '[0][1]', _.constant('a'), Object);\n     * // => { '0': { '1': 'a' } }\n     */\n    function updateWith(object, path, updater, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);\n    }\n\n    /**\n     * Creates an array of the own enumerable string keyed property values of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property values.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.values(new Foo);\n     * // => [1, 2] (iteration order is not guaranteed)\n     *\n     * _.values('hi');\n     * // => ['h', 'i']\n     */\n    function values(object) {\n      return object == null ? [] : baseValues(object, keys(object));\n    }\n\n    /**\n     * Creates an array of the own and inherited enumerable string keyed property\n     * values of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property values.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.valuesIn(new Foo);\n     * // => [1, 2, 3] (iteration order is not guaranteed)\n     */\n    function valuesIn(object) {\n      return object == null ? [] : baseValues(object, keysIn(object));\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Clamps `number` within the inclusive `lower` and `upper` bounds.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Number\n     * @param {number} number The number to clamp.\n     * @param {number} [lower] The lower bound.\n     * @param {number} upper The upper bound.\n     * @returns {number} Returns the clamped number.\n     * @example\n     *\n     * _.clamp(-10, -5, 5);\n     * // => -5\n     *\n     * _.clamp(10, -5, 5);\n     * // => 5\n     */\n    function clamp(number, lower, upper) {\n      if (upper === undefined) {\n        upper = lower;\n        lower = undefined;\n      }\n      if (upper !== undefined) {\n        upper = toNumber(upper);\n        upper = upper === upper ? upper : 0;\n      }\n      if (lower !== undefined) {\n        lower = toNumber(lower);\n        lower = lower === lower ? lower : 0;\n      }\n      return baseClamp(toNumber(number), lower, upper);\n    }\n\n    /**\n     * Checks if `n` is between `start` and up to, but not including, `end`. If\n     * `end` is not specified, it's set to `start` with `start` then set to `0`.\n     * If `start` is greater than `end` the params are swapped to support\n     * negative ranges.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.3.0\n     * @category Number\n     * @param {number} number The number to check.\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n     * @see _.range, _.rangeRight\n     * @example\n     *\n     * _.inRange(3, 2, 4);\n     * // => true\n     *\n     * _.inRange(4, 8);\n     * // => true\n     *\n     * _.inRange(4, 2);\n     * // => false\n     *\n     * _.inRange(2, 2);\n     * // => false\n     *\n     * _.inRange(1.2, 2);\n     * // => true\n     *\n     * _.inRange(5.2, 4);\n     * // => false\n     *\n     * _.inRange(-3, -2, -6);\n     * // => true\n     */\n    function inRange(number, start, end) {\n      start = toFinite(start);\n      if (end === undefined) {\n        end = start;\n        start = 0;\n      } else {\n        end = toFinite(end);\n      }\n      number = toNumber(number);\n      return baseInRange(number, start, end);\n    }\n\n    /**\n     * Produces a random number between the inclusive `lower` and `upper` bounds.\n     * If only one argument is provided a number between `0` and the given number\n     * is returned. If `floating` is `true`, or either `lower` or `upper` are\n     * floats, a floating-point number is returned instead of an integer.\n     *\n     * **Note:** JavaScript follows the IEEE-754 standard for resolving\n     * floating-point values which can produce unexpected results.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.7.0\n     * @category Number\n     * @param {number} [lower=0] The lower bound.\n     * @param {number} [upper=1] The upper bound.\n     * @param {boolean} [floating] Specify returning a floating-point number.\n     * @returns {number} Returns the random number.\n     * @example\n     *\n     * _.random(0, 5);\n     * // => an integer between 0 and 5\n     *\n     * _.random(5);\n     * // => also an integer between 0 and 5\n     *\n     * _.random(5, true);\n     * // => a floating-point number between 0 and 5\n     *\n     * _.random(1.2, 5.2);\n     * // => a floating-point number between 1.2 and 5.2\n     */\n    function random(lower, upper, floating) {\n      if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {\n        upper = floating = undefined;\n      }\n      if (floating === undefined) {\n        if (typeof upper == 'boolean') {\n          floating = upper;\n          upper = undefined;\n        }\n        else if (typeof lower == 'boolean') {\n          floating = lower;\n          lower = undefined;\n        }\n      }\n      if (lower === undefined && upper === undefined) {\n        lower = 0;\n        upper = 1;\n      }\n      else {\n        lower = toFinite(lower);\n        if (upper === undefined) {\n          upper = lower;\n          lower = 0;\n        } else {\n          upper = toFinite(upper);\n        }\n      }\n      if (lower > upper) {\n        var temp = lower;\n        lower = upper;\n        upper = temp;\n      }\n      if (floating || lower % 1 || upper % 1) {\n        var rand = nativeRandom();\n        return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);\n      }\n      return baseRandom(lower, upper);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the camel cased string.\n     * @example\n     *\n     * _.camelCase('Foo Bar');\n     * // => 'fooBar'\n     *\n     * _.camelCase('--foo-bar--');\n     * // => 'fooBar'\n     *\n     * _.camelCase('__FOO_BAR__');\n     * // => 'fooBar'\n     */\n    var camelCase = createCompounder(function(result, word, index) {\n      word = word.toLowerCase();\n      return result + (index ? capitalize(word) : word);\n    });\n\n    /**\n     * Converts the first character of `string` to upper case and the remaining\n     * to lower case.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to capitalize.\n     * @returns {string} Returns the capitalized string.\n     * @example\n     *\n     * _.capitalize('FRED');\n     * // => 'Fred'\n     */\n    function capitalize(string) {\n      return upperFirst(toString(string).toLowerCase());\n    }\n\n    /**\n     * Deburrs `string` by converting\n     * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n     * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n     * letters to basic Latin letters and removing\n     * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to deburr.\n     * @returns {string} Returns the deburred string.\n     * @example\n     *\n     * _.deburr('déjà vu');\n     * // => 'deja vu'\n     */\n    function deburr(string) {\n      string = toString(string);\n      return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n    }\n\n    /**\n     * Checks if `string` ends with the given target string.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to inspect.\n     * @param {string} [target] The string to search for.\n     * @param {number} [position=string.length] The position to search up to.\n     * @returns {boolean} Returns `true` if `string` ends with `target`,\n     *  else `false`.\n     * @example\n     *\n     * _.endsWith('abc', 'c');\n     * // => true\n     *\n     * _.endsWith('abc', 'b');\n     * // => false\n     *\n     * _.endsWith('abc', 'b', 2);\n     * // => true\n     */\n    function endsWith(string, target, position) {\n      string = toString(string);\n      target = baseToString(target);\n\n      var length = string.length;\n      position = position === undefined\n        ? length\n        : baseClamp(toInteger(position), 0, length);\n\n      var end = position;\n      position -= target.length;\n      return position >= 0 && string.slice(position, end) == target;\n    }\n\n    /**\n     * Converts the characters \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n     * corresponding HTML entities.\n     *\n     * **Note:** No other characters are escaped. To escape additional\n     * characters use a third-party library like [_he_](https://mths.be/he).\n     *\n     * Though the \">\" character is escaped for symmetry, characters like\n     * \">\" and \"/\" don't need escaping in HTML and have no special meaning\n     * unless they're part of a tag or unquoted attribute value. See\n     * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\n     * (under \"semi-related fun fact\") for more details.\n     *\n     * When working with HTML you should always\n     * [quote attribute values](http://wonko.com/post/html-escaping) to reduce\n     * XSS vectors.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category String\n     * @param {string} [string=''] The string to escape.\n     * @returns {string} Returns the escaped string.\n     * @example\n     *\n     * _.escape('fred, barney, & pebbles');\n     * // => 'fred, barney, &amp; pebbles'\n     */\n    function escape(string) {\n      string = toString(string);\n      return (string && reHasUnescapedHtml.test(string))\n        ? string.replace(reUnescapedHtml, escapeHtmlChar)\n        : string;\n    }\n\n    /**\n     * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n     * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to escape.\n     * @returns {string} Returns the escaped string.\n     * @example\n     *\n     * _.escapeRegExp('[lodash](https://lodash.com/)');\n     * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n     */\n    function escapeRegExp(string) {\n      string = toString(string);\n      return (string && reHasRegExpChar.test(string))\n        ? string.replace(reRegExpChar, '\\\\$&')\n        : string;\n    }\n\n    /**\n     * Converts `string` to\n     * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the kebab cased string.\n     * @example\n     *\n     * _.kebabCase('Foo Bar');\n     * // => 'foo-bar'\n     *\n     * _.kebabCase('fooBar');\n     * // => 'foo-bar'\n     *\n     * _.kebabCase('__FOO_BAR__');\n     * // => 'foo-bar'\n     */\n    var kebabCase = createCompounder(function(result, word, index) {\n      return result + (index ? '-' : '') + word.toLowerCase();\n    });\n\n    /**\n     * Converts `string`, as space separated words, to lower case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the lower cased string.\n     * @example\n     *\n     * _.lowerCase('--Foo-Bar--');\n     * // => 'foo bar'\n     *\n     * _.lowerCase('fooBar');\n     * // => 'foo bar'\n     *\n     * _.lowerCase('__FOO_BAR__');\n     * // => 'foo bar'\n     */\n    var lowerCase = createCompounder(function(result, word, index) {\n      return result + (index ? ' ' : '') + word.toLowerCase();\n    });\n\n    /**\n     * Converts the first character of `string` to lower case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the converted string.\n     * @example\n     *\n     * _.lowerFirst('Fred');\n     * // => 'fred'\n     *\n     * _.lowerFirst('FRED');\n     * // => 'fRED'\n     */\n    var lowerFirst = createCaseFirst('toLowerCase');\n\n    /**\n     * Pads `string` on the left and right sides if it's shorter than `length`.\n     * Padding characters are truncated if they can't be evenly divided by `length`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.pad('abc', 8);\n     * // => '  abc   '\n     *\n     * _.pad('abc', 8, '_-');\n     * // => '_-abc_-_'\n     *\n     * _.pad('abc', 3);\n     * // => 'abc'\n     */\n    function pad(string, length, chars) {\n      string = toString(string);\n      length = toInteger(length);\n\n      var strLength = length ? stringSize(string) : 0;\n      if (!length || strLength >= length) {\n        return string;\n      }\n      var mid = (length - strLength) / 2;\n      return (\n        createPadding(nativeFloor(mid), chars) +\n        string +\n        createPadding(nativeCeil(mid), chars)\n      );\n    }\n\n    /**\n     * Pads `string` on the right side if it's shorter than `length`. Padding\n     * characters are truncated if they exceed `length`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.padEnd('abc', 6);\n     * // => 'abc   '\n     *\n     * _.padEnd('abc', 6, '_-');\n     * // => 'abc_-_'\n     *\n     * _.padEnd('abc', 3);\n     * // => 'abc'\n     */\n    function padEnd(string, length, chars) {\n      string = toString(string);\n      length = toInteger(length);\n\n      var strLength = length ? stringSize(string) : 0;\n      return (length && strLength < length)\n        ? (string + createPadding(length - strLength, chars))\n        : string;\n    }\n\n    /**\n     * Pads `string` on the left side if it's shorter than `length`. Padding\n     * characters are truncated if they exceed `length`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.padStart('abc', 6);\n     * // => '   abc'\n     *\n     * _.padStart('abc', 6, '_-');\n     * // => '_-_abc'\n     *\n     * _.padStart('abc', 3);\n     * // => 'abc'\n     */\n    function padStart(string, length, chars) {\n      string = toString(string);\n      length = toInteger(length);\n\n      var strLength = length ? stringSize(string) : 0;\n      return (length && strLength < length)\n        ? (createPadding(length - strLength, chars) + string)\n        : string;\n    }\n\n    /**\n     * Converts `string` to an integer of the specified radix. If `radix` is\n     * `undefined` or `0`, a `radix` of `10` is used unless `value` is a\n     * hexadecimal, in which case a `radix` of `16` is used.\n     *\n     * **Note:** This method aligns with the\n     * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.1.0\n     * @category String\n     * @param {string} string The string to convert.\n     * @param {number} [radix=10] The radix to interpret `value` by.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.parseInt('08');\n     * // => 8\n     *\n     * _.map(['6', '08', '10'], _.parseInt);\n     * // => [6, 8, 10]\n     */\n    function parseInt(string, radix, guard) {\n      if (guard || radix == null) {\n        radix = 0;\n      } else if (radix) {\n        radix = +radix;\n      }\n      return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);\n    }\n\n    /**\n     * Repeats the given string `n` times.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to repeat.\n     * @param {number} [n=1] The number of times to repeat the string.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the repeated string.\n     * @example\n     *\n     * _.repeat('*', 3);\n     * // => '***'\n     *\n     * _.repeat('abc', 2);\n     * // => 'abcabc'\n     *\n     * _.repeat('abc', 0);\n     * // => ''\n     */\n    function repeat(string, n, guard) {\n      if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {\n        n = 1;\n      } else {\n        n = toInteger(n);\n      }\n      return baseRepeat(toString(string), n);\n    }\n\n    /**\n     * Replaces matches for `pattern` in `string` with `replacement`.\n     *\n     * **Note:** This method is based on\n     * [`String#replace`](https://mdn.io/String/replace).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to modify.\n     * @param {RegExp|string} pattern The pattern to replace.\n     * @param {Function|string} replacement The match replacement.\n     * @returns {string} Returns the modified string.\n     * @example\n     *\n     * _.replace('Hi Fred', 'Fred', 'Barney');\n     * // => 'Hi Barney'\n     */\n    function replace() {\n      var args = arguments,\n          string = toString(args[0]);\n\n      return args.length < 3 ? string : string.replace(args[1], args[2]);\n    }\n\n    /**\n     * Converts `string` to\n     * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the snake cased string.\n     * @example\n     *\n     * _.snakeCase('Foo Bar');\n     * // => 'foo_bar'\n     *\n     * _.snakeCase('fooBar');\n     * // => 'foo_bar'\n     *\n     * _.snakeCase('--FOO-BAR--');\n     * // => 'foo_bar'\n     */\n    var snakeCase = createCompounder(function(result, word, index) {\n      return result + (index ? '_' : '') + word.toLowerCase();\n    });\n\n    /**\n     * Splits `string` by `separator`.\n     *\n     * **Note:** This method is based on\n     * [`String#split`](https://mdn.io/String/split).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to split.\n     * @param {RegExp|string} separator The separator pattern to split by.\n     * @param {number} [limit] The length to truncate results to.\n     * @returns {Array} Returns the string segments.\n     * @example\n     *\n     * _.split('a-b-c', '-', 2);\n     * // => ['a', 'b']\n     */\n    function split(string, separator, limit) {\n      if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {\n        separator = limit = undefined;\n      }\n      limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;\n      if (!limit) {\n        return [];\n      }\n      string = toString(string);\n      if (string && (\n            typeof separator == 'string' ||\n            (separator != null && !isRegExp(separator))\n          )) {\n        separator = baseToString(separator);\n        if (!separator && hasUnicode(string)) {\n          return castSlice(stringToArray(string), 0, limit);\n        }\n      }\n      return string.split(separator, limit);\n    }\n\n    /**\n     * Converts `string` to\n     * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.1.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the start cased string.\n     * @example\n     *\n     * _.startCase('--foo-bar--');\n     * // => 'Foo Bar'\n     *\n     * _.startCase('fooBar');\n     * // => 'Foo Bar'\n     *\n     * _.startCase('__FOO_BAR__');\n     * // => 'FOO BAR'\n     */\n    var startCase = createCompounder(function(result, word, index) {\n      return result + (index ? ' ' : '') + upperFirst(word);\n    });\n\n    /**\n     * Checks if `string` starts with the given target string.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to inspect.\n     * @param {string} [target] The string to search for.\n     * @param {number} [position=0] The position to search from.\n     * @returns {boolean} Returns `true` if `string` starts with `target`,\n     *  else `false`.\n     * @example\n     *\n     * _.startsWith('abc', 'a');\n     * // => true\n     *\n     * _.startsWith('abc', 'b');\n     * // => false\n     *\n     * _.startsWith('abc', 'b', 1);\n     * // => true\n     */\n    function startsWith(string, target, position) {\n      string = toString(string);\n      position = position == null\n        ? 0\n        : baseClamp(toInteger(position), 0, string.length);\n\n      target = baseToString(target);\n      return string.slice(position, position + target.length) == target;\n    }\n\n    /**\n     * Creates a compiled template function that can interpolate data properties\n     * in \"interpolate\" delimiters, HTML-escape interpolated data properties in\n     * \"escape\" delimiters, and execute JavaScript in \"evaluate\" delimiters. Data\n     * properties may be accessed as free variables in the template. If a setting\n     * object is given, it takes precedence over `_.templateSettings` values.\n     *\n     * **Note:** In the development build `_.template` utilizes\n     * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)\n     * for easier debugging.\n     *\n     * For more information on precompiling templates see\n     * [lodash's custom builds documentation](https://lodash.com/custom-builds).\n     *\n     * For more information on Chrome extension sandboxes see\n     * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category String\n     * @param {string} [string=''] The template string.\n     * @param {Object} [options={}] The options object.\n     * @param {RegExp} [options.escape=_.templateSettings.escape]\n     *  The HTML \"escape\" delimiter.\n     * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]\n     *  The \"evaluate\" delimiter.\n     * @param {Object} [options.imports=_.templateSettings.imports]\n     *  An object to import into the template as free variables.\n     * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]\n     *  The \"interpolate\" delimiter.\n     * @param {string} [options.sourceURL='lodash.templateSources[n]']\n     *  The sourceURL of the compiled template.\n     * @param {string} [options.variable='obj']\n     *  The data object variable name.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the compiled template function.\n     * @example\n     *\n     * // Use the \"interpolate\" delimiter to create a compiled template.\n     * var compiled = _.template('hello <%= user %>!');\n     * compiled({ 'user': 'fred' });\n     * // => 'hello fred!'\n     *\n     * // Use the HTML \"escape\" delimiter to escape data property values.\n     * var compiled = _.template('<b><%- value %></b>');\n     * compiled({ 'value': '<script>' });\n     * // => '<b>&lt;script&gt;</b>'\n     *\n     * // Use the \"evaluate\" delimiter to execute JavaScript and generate HTML.\n     * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');\n     * compiled({ 'users': ['fred', 'barney'] });\n     * // => '<li>fred</li><li>barney</li>'\n     *\n     * // Use the internal `print` function in \"evaluate\" delimiters.\n     * var compiled = _.template('<% print(\"hello \" + user); %>!');\n     * compiled({ 'user': 'barney' });\n     * // => 'hello barney!'\n     *\n     * // Use the ES template literal delimiter as an \"interpolate\" delimiter.\n     * // Disable support by replacing the \"interpolate\" delimiter.\n     * var compiled = _.template('hello ${ user }!');\n     * compiled({ 'user': 'pebbles' });\n     * // => 'hello pebbles!'\n     *\n     * // Use backslashes to treat delimiters as plain text.\n     * var compiled = _.template('<%= \"\\\\<%- value %\\\\>\" %>');\n     * compiled({ 'value': 'ignored' });\n     * // => '<%- value %>'\n     *\n     * // Use the `imports` option to import `jQuery` as `jq`.\n     * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';\n     * var compiled = _.template(text, { 'imports': { 'jq': jQuery } });\n     * compiled({ 'users': ['fred', 'barney'] });\n     * // => '<li>fred</li><li>barney</li>'\n     *\n     * // Use the `sourceURL` option to specify a custom sourceURL for the template.\n     * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });\n     * compiled(data);\n     * // => Find the source of \"greeting.jst\" under the Sources tab or Resources panel of the web inspector.\n     *\n     * // Use the `variable` option to ensure a with-statement isn't used in the compiled template.\n     * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });\n     * compiled.source;\n     * // => function(data) {\n     * //   var __t, __p = '';\n     * //   __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!';\n     * //   return __p;\n     * // }\n     *\n     * // Use custom template delimiters.\n     * _.templateSettings.interpolate = /{{([\\s\\S]+?)}}/g;\n     * var compiled = _.template('hello {{ user }}!');\n     * compiled({ 'user': 'mustache' });\n     * // => 'hello mustache!'\n     *\n     * // Use the `source` property to inline compiled templates for meaningful\n     * // line numbers in error messages and stack traces.\n     * fs.writeFileSync(path.join(process.cwd(), 'jst.js'), '\\\n     *   var JST = {\\\n     *     \"main\": ' + _.template(mainText).source + '\\\n     *   };\\\n     * ');\n     */\n    function template(string, options, guard) {\n      // Based on John Resig's `tmpl` implementation\n      // (http://ejohn.org/blog/javascript-micro-templating/)\n      // and Laura Doktorova's doT.js (https://github.com/olado/doT).\n      var settings = lodash.templateSettings;\n\n      if (guard && isIterateeCall(string, options, guard)) {\n        options = undefined;\n      }\n      string = toString(string);\n      options = assignInWith({}, options, settings, customDefaultsAssignIn);\n\n      var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn),\n          importsKeys = keys(imports),\n          importsValues = baseValues(imports, importsKeys);\n\n      var isEscaping,\n          isEvaluating,\n          index = 0,\n          interpolate = options.interpolate || reNoMatch,\n          source = \"__p += '\";\n\n      // Compile the regexp to match each delimiter.\n      var reDelimiters = RegExp(\n        (options.escape || reNoMatch).source + '|' +\n        interpolate.source + '|' +\n        (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +\n        (options.evaluate || reNoMatch).source + '|$'\n      , 'g');\n\n      // Use a sourceURL for easier debugging.\n      // The sourceURL gets injected into the source that's eval-ed, so be careful\n      // to normalize all kinds of whitespace, so e.g. newlines (and unicode versions of it) can't sneak in\n      // and escape the comment, thus injecting code that gets evaled.\n      var sourceURL = '//# sourceURL=' +\n        (hasOwnProperty.call(options, 'sourceURL')\n          ? (options.sourceURL + '').replace(/\\s/g, ' ')\n          : ('lodash.templateSources[' + (++templateCounter) + ']')\n        ) + '\\n';\n\n      string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {\n        interpolateValue || (interpolateValue = esTemplateValue);\n\n        // Escape characters that can't be included in string literals.\n        source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);\n\n        // Replace delimiters with snippets.\n        if (escapeValue) {\n          isEscaping = true;\n          source += \"' +\\n__e(\" + escapeValue + \") +\\n'\";\n        }\n        if (evaluateValue) {\n          isEvaluating = true;\n          source += \"';\\n\" + evaluateValue + \";\\n__p += '\";\n        }\n        if (interpolateValue) {\n          source += \"' +\\n((__t = (\" + interpolateValue + \")) == null ? '' : __t) +\\n'\";\n        }\n        index = offset + match.length;\n\n        // The JS engine embedded in Adobe products needs `match` returned in\n        // order to produce the correct `offset` value.\n        return match;\n      });\n\n      source += \"';\\n\";\n\n      // If `variable` is not specified wrap a with-statement around the generated\n      // code to add the data object to the top of the scope chain.\n      var variable = hasOwnProperty.call(options, 'variable') && options.variable;\n      if (!variable) {\n        source = 'with (obj) {\\n' + source + '\\n}\\n';\n      }\n      // Throw an error if a forbidden character was found in `variable`, to prevent\n      // potential command injection attacks.\n      else if (reForbiddenIdentifierChars.test(variable)) {\n        throw new Error(INVALID_TEMPL_VAR_ERROR_TEXT);\n      }\n\n      // Cleanup code by stripping empty strings.\n      source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)\n        .replace(reEmptyStringMiddle, '$1')\n        .replace(reEmptyStringTrailing, '$1;');\n\n      // Frame code as the function body.\n      source = 'function(' + (variable || 'obj') + ') {\\n' +\n        (variable\n          ? ''\n          : 'obj || (obj = {});\\n'\n        ) +\n        \"var __t, __p = ''\" +\n        (isEscaping\n           ? ', __e = _.escape'\n           : ''\n        ) +\n        (isEvaluating\n          ? ', __j = Array.prototype.join;\\n' +\n            \"function print() { __p += __j.call(arguments, '') }\\n\"\n          : ';\\n'\n        ) +\n        source +\n        'return __p\\n}';\n\n      var result = attempt(function() {\n        return Function(importsKeys, sourceURL + 'return ' + source)\n          .apply(undefined, importsValues);\n      });\n\n      // Provide the compiled function's source by its `toString` method or\n      // the `source` property as a convenience for inlining compiled templates.\n      result.source = source;\n      if (isError(result)) {\n        throw result;\n      }\n      return result;\n    }\n\n    /**\n     * Converts `string`, as a whole, to lower case just like\n     * [String#toLowerCase](https://mdn.io/toLowerCase).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the lower cased string.\n     * @example\n     *\n     * _.toLower('--Foo-Bar--');\n     * // => '--foo-bar--'\n     *\n     * _.toLower('fooBar');\n     * // => 'foobar'\n     *\n     * _.toLower('__FOO_BAR__');\n     * // => '__foo_bar__'\n     */\n    function toLower(value) {\n      return toString(value).toLowerCase();\n    }\n\n    /**\n     * Converts `string`, as a whole, to upper case just like\n     * [String#toUpperCase](https://mdn.io/toUpperCase).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the upper cased string.\n     * @example\n     *\n     * _.toUpper('--foo-bar--');\n     * // => '--FOO-BAR--'\n     *\n     * _.toUpper('fooBar');\n     * // => 'FOOBAR'\n     *\n     * _.toUpper('__foo_bar__');\n     * // => '__FOO_BAR__'\n     */\n    function toUpper(value) {\n      return toString(value).toUpperCase();\n    }\n\n    /**\n     * Removes leading and trailing whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trim('  abc  ');\n     * // => 'abc'\n     *\n     * _.trim('-_-abc-_-', '_-');\n     * // => 'abc'\n     *\n     * _.map(['  foo  ', '  bar  '], _.trim);\n     * // => ['foo', 'bar']\n     */\n    function trim(string, chars, guard) {\n      string = toString(string);\n      if (string && (guard || chars === undefined)) {\n        return baseTrim(string);\n      }\n      if (!string || !(chars = baseToString(chars))) {\n        return string;\n      }\n      var strSymbols = stringToArray(string),\n          chrSymbols = stringToArray(chars),\n          start = charsStartIndex(strSymbols, chrSymbols),\n          end = charsEndIndex(strSymbols, chrSymbols) + 1;\n\n      return castSlice(strSymbols, start, end).join('');\n    }\n\n    /**\n     * Removes trailing whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trimEnd('  abc  ');\n     * // => '  abc'\n     *\n     * _.trimEnd('-_-abc-_-', '_-');\n     * // => '-_-abc'\n     */\n    function trimEnd(string, chars, guard) {\n      string = toString(string);\n      if (string && (guard || chars === undefined)) {\n        return string.slice(0, trimmedEndIndex(string) + 1);\n      }\n      if (!string || !(chars = baseToString(chars))) {\n        return string;\n      }\n      var strSymbols = stringToArray(string),\n          end = charsEndIndex(strSymbols, stringToArray(chars)) + 1;\n\n      return castSlice(strSymbols, 0, end).join('');\n    }\n\n    /**\n     * Removes leading whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trimStart('  abc  ');\n     * // => 'abc  '\n     *\n     * _.trimStart('-_-abc-_-', '_-');\n     * // => 'abc-_-'\n     */\n    function trimStart(string, chars, guard) {\n      string = toString(string);\n      if (string && (guard || chars === undefined)) {\n        return string.replace(reTrimStart, '');\n      }\n      if (!string || !(chars = baseToString(chars))) {\n        return string;\n      }\n      var strSymbols = stringToArray(string),\n          start = charsStartIndex(strSymbols, stringToArray(chars));\n\n      return castSlice(strSymbols, start).join('');\n    }\n\n    /**\n     * Truncates `string` if it's longer than the given maximum string length.\n     * The last characters of the truncated string are replaced with the omission\n     * string which defaults to \"...\".\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to truncate.\n     * @param {Object} [options={}] The options object.\n     * @param {number} [options.length=30] The maximum string length.\n     * @param {string} [options.omission='...'] The string to indicate text is omitted.\n     * @param {RegExp|string} [options.separator] The separator pattern to truncate to.\n     * @returns {string} Returns the truncated string.\n     * @example\n     *\n     * _.truncate('hi-diddly-ho there, neighborino');\n     * // => 'hi-diddly-ho there, neighbo...'\n     *\n     * _.truncate('hi-diddly-ho there, neighborino', {\n     *   'length': 24,\n     *   'separator': ' '\n     * });\n     * // => 'hi-diddly-ho there,...'\n     *\n     * _.truncate('hi-diddly-ho there, neighborino', {\n     *   'length': 24,\n     *   'separator': /,? +/\n     * });\n     * // => 'hi-diddly-ho there...'\n     *\n     * _.truncate('hi-diddly-ho there, neighborino', {\n     *   'omission': ' [...]'\n     * });\n     * // => 'hi-diddly-ho there, neig [...]'\n     */\n    function truncate(string, options) {\n      var length = DEFAULT_TRUNC_LENGTH,\n          omission = DEFAULT_TRUNC_OMISSION;\n\n      if (isObject(options)) {\n        var separator = 'separator' in options ? options.separator : separator;\n        length = 'length' in options ? toInteger(options.length) : length;\n        omission = 'omission' in options ? baseToString(options.omission) : omission;\n      }\n      string = toString(string);\n\n      var strLength = string.length;\n      if (hasUnicode(string)) {\n        var strSymbols = stringToArray(string);\n        strLength = strSymbols.length;\n      }\n      if (length >= strLength) {\n        return string;\n      }\n      var end = length - stringSize(omission);\n      if (end < 1) {\n        return omission;\n      }\n      var result = strSymbols\n        ? castSlice(strSymbols, 0, end).join('')\n        : string.slice(0, end);\n\n      if (separator === undefined) {\n        return result + omission;\n      }\n      if (strSymbols) {\n        end += (result.length - end);\n      }\n      if (isRegExp(separator)) {\n        if (string.slice(end).search(separator)) {\n          var match,\n              substring = result;\n\n          if (!separator.global) {\n            separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g');\n          }\n          separator.lastIndex = 0;\n          while ((match = separator.exec(substring))) {\n            var newEnd = match.index;\n          }\n          result = result.slice(0, newEnd === undefined ? end : newEnd);\n        }\n      } else if (string.indexOf(baseToString(separator), end) != end) {\n        var index = result.lastIndexOf(separator);\n        if (index > -1) {\n          result = result.slice(0, index);\n        }\n      }\n      return result + omission;\n    }\n\n    /**\n     * The inverse of `_.escape`; this method converts the HTML entities\n     * `&amp;`, `&lt;`, `&gt;`, `&quot;`, and `&#39;` in `string` to\n     * their corresponding characters.\n     *\n     * **Note:** No other HTML entities are unescaped. To unescape additional\n     * HTML entities use a third-party library like [_he_](https://mths.be/he).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.6.0\n     * @category String\n     * @param {string} [string=''] The string to unescape.\n     * @returns {string} Returns the unescaped string.\n     * @example\n     *\n     * _.unescape('fred, barney, &amp; pebbles');\n     * // => 'fred, barney, & pebbles'\n     */\n    function unescape(string) {\n      string = toString(string);\n      return (string && reHasEscapedHtml.test(string))\n        ? string.replace(reEscapedHtml, unescapeHtmlChar)\n        : string;\n    }\n\n    /**\n     * Converts `string`, as space separated words, to upper case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the upper cased string.\n     * @example\n     *\n     * _.upperCase('--foo-bar');\n     * // => 'FOO BAR'\n     *\n     * _.upperCase('fooBar');\n     * // => 'FOO BAR'\n     *\n     * _.upperCase('__foo_bar__');\n     * // => 'FOO BAR'\n     */\n    var upperCase = createCompounder(function(result, word, index) {\n      return result + (index ? ' ' : '') + word.toUpperCase();\n    });\n\n    /**\n     * Converts the first character of `string` to upper case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the converted string.\n     * @example\n     *\n     * _.upperFirst('fred');\n     * // => 'Fred'\n     *\n     * _.upperFirst('FRED');\n     * // => 'FRED'\n     */\n    var upperFirst = createCaseFirst('toUpperCase');\n\n    /**\n     * Splits `string` into an array of its words.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to inspect.\n     * @param {RegExp|string} [pattern] The pattern to match words.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the words of `string`.\n     * @example\n     *\n     * _.words('fred, barney, & pebbles');\n     * // => ['fred', 'barney', 'pebbles']\n     *\n     * _.words('fred, barney, & pebbles', /[^, ]+/g);\n     * // => ['fred', 'barney', '&', 'pebbles']\n     */\n    function words(string, pattern, guard) {\n      string = toString(string);\n      pattern = guard ? undefined : pattern;\n\n      if (pattern === undefined) {\n        return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);\n      }\n      return string.match(pattern) || [];\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Attempts to invoke `func`, returning either the result or the caught error\n     * object. Any additional arguments are provided to `func` when it's invoked.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {Function} func The function to attempt.\n     * @param {...*} [args] The arguments to invoke `func` with.\n     * @returns {*} Returns the `func` result or error object.\n     * @example\n     *\n     * // Avoid throwing errors for invalid selectors.\n     * var elements = _.attempt(function(selector) {\n     *   return document.querySelectorAll(selector);\n     * }, '>_>');\n     *\n     * if (_.isError(elements)) {\n     *   elements = [];\n     * }\n     */\n    var attempt = baseRest(function(func, args) {\n      try {\n        return apply(func, undefined, args);\n      } catch (e) {\n        return isError(e) ? e : new Error(e);\n      }\n    });\n\n    /**\n     * Binds methods of an object to the object itself, overwriting the existing\n     * method.\n     *\n     * **Note:** This method doesn't set the \"length\" property of bound functions.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {Object} object The object to bind and assign the bound methods to.\n     * @param {...(string|string[])} methodNames The object method names to bind.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var view = {\n     *   'label': 'docs',\n     *   'click': function() {\n     *     console.log('clicked ' + this.label);\n     *   }\n     * };\n     *\n     * _.bindAll(view, ['click']);\n     * jQuery(element).on('click', view.click);\n     * // => Logs 'clicked docs' when clicked.\n     */\n    var bindAll = flatRest(function(object, methodNames) {\n      arrayEach(methodNames, function(key) {\n        key = toKey(key);\n        baseAssignValue(object, key, bind(object[key], object));\n      });\n      return object;\n    });\n\n    /**\n     * Creates a function that iterates over `pairs` and invokes the corresponding\n     * function of the first predicate to return truthy. The predicate-function\n     * pairs are invoked with the `this` binding and arguments of the created\n     * function.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {Array} pairs The predicate-function pairs.\n     * @returns {Function} Returns the new composite function.\n     * @example\n     *\n     * var func = _.cond([\n     *   [_.matches({ 'a': 1 }),           _.constant('matches A')],\n     *   [_.conforms({ 'b': _.isNumber }), _.constant('matches B')],\n     *   [_.stubTrue,                      _.constant('no match')]\n     * ]);\n     *\n     * func({ 'a': 1, 'b': 2 });\n     * // => 'matches A'\n     *\n     * func({ 'a': 0, 'b': 1 });\n     * // => 'matches B'\n     *\n     * func({ 'a': '1', 'b': '2' });\n     * // => 'no match'\n     */\n    function cond(pairs) {\n      var length = pairs == null ? 0 : pairs.length,\n          toIteratee = getIteratee();\n\n      pairs = !length ? [] : arrayMap(pairs, function(pair) {\n        if (typeof pair[1] != 'function') {\n          throw new TypeError(FUNC_ERROR_TEXT);\n        }\n        return [toIteratee(pair[0]), pair[1]];\n      });\n\n      return baseRest(function(args) {\n        var index = -1;\n        while (++index < length) {\n          var pair = pairs[index];\n          if (apply(pair[0], this, args)) {\n            return apply(pair[1], this, args);\n          }\n        }\n      });\n    }\n\n    /**\n     * Creates a function that invokes the predicate properties of `source` with\n     * the corresponding property values of a given object, returning `true` if\n     * all predicates return truthy, else `false`.\n     *\n     * **Note:** The created function is equivalent to `_.conformsTo` with\n     * `source` partially applied.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {Function} Returns the new spec function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': 2, 'b': 1 },\n     *   { 'a': 1, 'b': 2 }\n     * ];\n     *\n     * _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } }));\n     * // => [{ 'a': 1, 'b': 2 }]\n     */\n    function conforms(source) {\n      return baseConforms(baseClone(source, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that returns `value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Util\n     * @param {*} value The value to return from the new function.\n     * @returns {Function} Returns the new constant function.\n     * @example\n     *\n     * var objects = _.times(2, _.constant({ 'a': 1 }));\n     *\n     * console.log(objects);\n     * // => [{ 'a': 1 }, { 'a': 1 }]\n     *\n     * console.log(objects[0] === objects[1]);\n     * // => true\n     */\n    function constant(value) {\n      return function() {\n        return value;\n      };\n    }\n\n    /**\n     * Checks `value` to determine whether a default value should be returned in\n     * its place. The `defaultValue` is returned if `value` is `NaN`, `null`,\n     * or `undefined`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.14.0\n     * @category Util\n     * @param {*} value The value to check.\n     * @param {*} defaultValue The default value.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * _.defaultTo(1, 10);\n     * // => 1\n     *\n     * _.defaultTo(undefined, 10);\n     * // => 10\n     */\n    function defaultTo(value, defaultValue) {\n      return (value == null || value !== value) ? defaultValue : value;\n    }\n\n    /**\n     * Creates a function that returns the result of invoking the given functions\n     * with the `this` binding of the created function, where each successive\n     * invocation is supplied the return value of the previous.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [funcs] The functions to invoke.\n     * @returns {Function} Returns the new composite function.\n     * @see _.flowRight\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var addSquare = _.flow([_.add, square]);\n     * addSquare(1, 2);\n     * // => 9\n     */\n    var flow = createFlow();\n\n    /**\n     * This method is like `_.flow` except that it creates a function that\n     * invokes the given functions from right to left.\n     *\n     * @static\n     * @since 3.0.0\n     * @memberOf _\n     * @category Util\n     * @param {...(Function|Function[])} [funcs] The functions to invoke.\n     * @returns {Function} Returns the new composite function.\n     * @see _.flow\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var addSquare = _.flowRight([square, _.add]);\n     * addSquare(1, 2);\n     * // => 9\n     */\n    var flowRight = createFlow(true);\n\n    /**\n     * This method returns the first argument it receives.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {*} value Any value.\n     * @returns {*} Returns `value`.\n     * @example\n     *\n     * var object = { 'a': 1 };\n     *\n     * console.log(_.identity(object) === object);\n     * // => true\n     */\n    function identity(value) {\n      return value;\n    }\n\n    /**\n     * Creates a function that invokes `func` with the arguments of the created\n     * function. If `func` is a property name, the created function returns the\n     * property value for a given element. If `func` is an array or object, the\n     * created function returns `true` for elements that contain the equivalent\n     * source properties, otherwise it returns `false`.\n     *\n     * @static\n     * @since 4.0.0\n     * @memberOf _\n     * @category Util\n     * @param {*} [func=_.identity] The value to convert to a callback.\n     * @returns {Function} Returns the callback.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': true },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true }));\n     * // => [{ 'user': 'barney', 'age': 36, 'active': true }]\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.filter(users, _.iteratee(['user', 'fred']));\n     * // => [{ 'user': 'fred', 'age': 40 }]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.map(users, _.iteratee('user'));\n     * // => ['barney', 'fred']\n     *\n     * // Create custom iteratee shorthands.\n     * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) {\n     *   return !_.isRegExp(func) ? iteratee(func) : function(string) {\n     *     return func.test(string);\n     *   };\n     * });\n     *\n     * _.filter(['abc', 'def'], /ef/);\n     * // => ['def']\n     */\n    function iteratee(func) {\n      return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that performs a partial deep comparison between a given\n     * object and `source`, returning `true` if the given object has equivalent\n     * property values, else `false`.\n     *\n     * **Note:** The created function is equivalent to `_.isMatch` with `source`\n     * partially applied.\n     *\n     * Partial comparisons will match empty array and empty object `source`\n     * values against any array or object value, respectively. See `_.isEqual`\n     * for a list of supported value comparisons.\n     *\n     * **Note:** Multiple values can be checked by combining several matchers\n     * using `_.overSome`\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {Object} source The object of property values to match.\n     * @returns {Function} Returns the new spec function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': 1, 'b': 2, 'c': 3 },\n     *   { 'a': 4, 'b': 5, 'c': 6 }\n     * ];\n     *\n     * _.filter(objects, _.matches({ 'a': 4, 'c': 6 }));\n     * // => [{ 'a': 4, 'b': 5, 'c': 6 }]\n     *\n     * // Checking for several possible values\n     * _.filter(objects, _.overSome([_.matches({ 'a': 1 }), _.matches({ 'a': 4 })]));\n     * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]\n     */\n    function matches(source) {\n      return baseMatches(baseClone(source, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that performs a partial deep comparison between the\n     * value at `path` of a given object to `srcValue`, returning `true` if the\n     * object value is equivalent, else `false`.\n     *\n     * **Note:** Partial comparisons will match empty array and empty object\n     * `srcValue` values against any array or object value, respectively. See\n     * `_.isEqual` for a list of supported value comparisons.\n     *\n     * **Note:** Multiple values can be checked by combining several matchers\n     * using `_.overSome`\n     *\n     * @static\n     * @memberOf _\n     * @since 3.2.0\n     * @category Util\n     * @param {Array|string} path The path of the property to get.\n     * @param {*} srcValue The value to match.\n     * @returns {Function} Returns the new spec function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': 1, 'b': 2, 'c': 3 },\n     *   { 'a': 4, 'b': 5, 'c': 6 }\n     * ];\n     *\n     * _.find(objects, _.matchesProperty('a', 4));\n     * // => { 'a': 4, 'b': 5, 'c': 6 }\n     *\n     * // Checking for several possible values\n     * _.filter(objects, _.overSome([_.matchesProperty('a', 1), _.matchesProperty('a', 4)]));\n     * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]\n     */\n    function matchesProperty(path, srcValue) {\n      return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that invokes the method at `path` of a given object.\n     * Any additional arguments are provided to the invoked method.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Util\n     * @param {Array|string} path The path of the method to invoke.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {Function} Returns the new invoker function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': { 'b': _.constant(2) } },\n     *   { 'a': { 'b': _.constant(1) } }\n     * ];\n     *\n     * _.map(objects, _.method('a.b'));\n     * // => [2, 1]\n     *\n     * _.map(objects, _.method(['a', 'b']));\n     * // => [2, 1]\n     */\n    var method = baseRest(function(path, args) {\n      return function(object) {\n        return baseInvoke(object, path, args);\n      };\n    });\n\n    /**\n     * The opposite of `_.method`; this method creates a function that invokes\n     * the method at a given path of `object`. Any additional arguments are\n     * provided to the invoked method.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Util\n     * @param {Object} object The object to query.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {Function} Returns the new invoker function.\n     * @example\n     *\n     * var array = _.times(3, _.constant),\n     *     object = { 'a': array, 'b': array, 'c': array };\n     *\n     * _.map(['a[2]', 'c[0]'], _.methodOf(object));\n     * // => [2, 0]\n     *\n     * _.map([['a', '2'], ['c', '0']], _.methodOf(object));\n     * // => [2, 0]\n     */\n    var methodOf = baseRest(function(object, args) {\n      return function(path) {\n        return baseInvoke(object, path, args);\n      };\n    });\n\n    /**\n     * Adds all own enumerable string keyed function properties of a source\n     * object to the destination object. If `object` is a function, then methods\n     * are added to its prototype as well.\n     *\n     * **Note:** Use `_.runInContext` to create a pristine `lodash` function to\n     * avoid conflicts caused by modifying the original.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {Function|Object} [object=lodash] The destination object.\n     * @param {Object} source The object of functions to add.\n     * @param {Object} [options={}] The options object.\n     * @param {boolean} [options.chain=true] Specify whether mixins are chainable.\n     * @returns {Function|Object} Returns `object`.\n     * @example\n     *\n     * function vowels(string) {\n     *   return _.filter(string, function(v) {\n     *     return /[aeiou]/i.test(v);\n     *   });\n     * }\n     *\n     * _.mixin({ 'vowels': vowels });\n     * _.vowels('fred');\n     * // => ['e']\n     *\n     * _('fred').vowels().value();\n     * // => ['e']\n     *\n     * _.mixin({ 'vowels': vowels }, { 'chain': false });\n     * _('fred').vowels();\n     * // => ['e']\n     */\n    function mixin(object, source, options) {\n      var props = keys(source),\n          methodNames = baseFunctions(source, props);\n\n      if (options == null &&\n          !(isObject(source) && (methodNames.length || !props.length))) {\n        options = source;\n        source = object;\n        object = this;\n        methodNames = baseFunctions(source, keys(source));\n      }\n      var chain = !(isObject(options) && 'chain' in options) || !!options.chain,\n          isFunc = isFunction(object);\n\n      arrayEach(methodNames, function(methodName) {\n        var func = source[methodName];\n        object[methodName] = func;\n        if (isFunc) {\n          object.prototype[methodName] = function() {\n            var chainAll = this.__chain__;\n            if (chain || chainAll) {\n              var result = object(this.__wrapped__),\n                  actions = result.__actions__ = copyArray(this.__actions__);\n\n              actions.push({ 'func': func, 'args': arguments, 'thisArg': object });\n              result.__chain__ = chainAll;\n              return result;\n            }\n            return func.apply(object, arrayPush([this.value()], arguments));\n          };\n        }\n      });\n\n      return object;\n    }\n\n    /**\n     * Reverts the `_` variable to its previous value and returns a reference to\n     * the `lodash` function.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @returns {Function} Returns the `lodash` function.\n     * @example\n     *\n     * var lodash = _.noConflict();\n     */\n    function noConflict() {\n      if (root._ === this) {\n        root._ = oldDash;\n      }\n      return this;\n    }\n\n    /**\n     * This method returns `undefined`.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.3.0\n     * @category Util\n     * @example\n     *\n     * _.times(2, _.noop);\n     * // => [undefined, undefined]\n     */\n    function noop() {\n      // No operation performed.\n    }\n\n    /**\n     * Creates a function that gets the argument at index `n`. If `n` is negative,\n     * the nth argument from the end is returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {number} [n=0] The index of the argument to return.\n     * @returns {Function} Returns the new pass-thru function.\n     * @example\n     *\n     * var func = _.nthArg(1);\n     * func('a', 'b', 'c', 'd');\n     * // => 'b'\n     *\n     * var func = _.nthArg(-2);\n     * func('a', 'b', 'c', 'd');\n     * // => 'c'\n     */\n    function nthArg(n) {\n      n = toInteger(n);\n      return baseRest(function(args) {\n        return baseNth(args, n);\n      });\n    }\n\n    /**\n     * Creates a function that invokes `iteratees` with the arguments it receives\n     * and returns their results.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [iteratees=[_.identity]]\n     *  The iteratees to invoke.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var func = _.over([Math.max, Math.min]);\n     *\n     * func(1, 2, 3, 4);\n     * // => [4, 1]\n     */\n    var over = createOver(arrayMap);\n\n    /**\n     * Creates a function that checks if **all** of the `predicates` return\n     * truthy when invoked with the arguments it receives.\n     *\n     * Following shorthands are possible for providing predicates.\n     * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.\n     * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [predicates=[_.identity]]\n     *  The predicates to check.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var func = _.overEvery([Boolean, isFinite]);\n     *\n     * func('1');\n     * // => true\n     *\n     * func(null);\n     * // => false\n     *\n     * func(NaN);\n     * // => false\n     */\n    var overEvery = createOver(arrayEvery);\n\n    /**\n     * Creates a function that checks if **any** of the `predicates` return\n     * truthy when invoked with the arguments it receives.\n     *\n     * Following shorthands are possible for providing predicates.\n     * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.\n     * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [predicates=[_.identity]]\n     *  The predicates to check.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var func = _.overSome([Boolean, isFinite]);\n     *\n     * func('1');\n     * // => true\n     *\n     * func(null);\n     * // => true\n     *\n     * func(NaN);\n     * // => false\n     *\n     * var matchesFunc = _.overSome([{ 'a': 1 }, { 'a': 2 }])\n     * var matchesPropertyFunc = _.overSome([['a', 1], ['a', 2]])\n     */\n    var overSome = createOver(arraySome);\n\n    /**\n     * Creates a function that returns the value at `path` of a given object.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Util\n     * @param {Array|string} path The path of the property to get.\n     * @returns {Function} Returns the new accessor function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': { 'b': 2 } },\n     *   { 'a': { 'b': 1 } }\n     * ];\n     *\n     * _.map(objects, _.property('a.b'));\n     * // => [2, 1]\n     *\n     * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n     * // => [1, 2]\n     */\n    function property(path) {\n      return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n    }\n\n    /**\n     * The opposite of `_.property`; this method creates a function that returns\n     * the value at a given path of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {Object} object The object to query.\n     * @returns {Function} Returns the new accessor function.\n     * @example\n     *\n     * var array = [0, 1, 2],\n     *     object = { 'a': array, 'b': array, 'c': array };\n     *\n     * _.map(['a[2]', 'c[0]'], _.propertyOf(object));\n     * // => [2, 0]\n     *\n     * _.map([['a', '2'], ['c', '0']], _.propertyOf(object));\n     * // => [2, 0]\n     */\n    function propertyOf(object) {\n      return function(path) {\n        return object == null ? undefined : baseGet(object, path);\n      };\n    }\n\n    /**\n     * Creates an array of numbers (positive and/or negative) progressing from\n     * `start` up to, but not including, `end`. A step of `-1` is used if a negative\n     * `start` is specified without an `end` or `step`. If `end` is not specified,\n     * it's set to `start` with `start` then set to `0`.\n     *\n     * **Note:** JavaScript follows the IEEE-754 standard for resolving\n     * floating-point values which can produce unexpected results.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @param {number} [step=1] The value to increment or decrement by.\n     * @returns {Array} Returns the range of numbers.\n     * @see _.inRange, _.rangeRight\n     * @example\n     *\n     * _.range(4);\n     * // => [0, 1, 2, 3]\n     *\n     * _.range(-4);\n     * // => [0, -1, -2, -3]\n     *\n     * _.range(1, 5);\n     * // => [1, 2, 3, 4]\n     *\n     * _.range(0, 20, 5);\n     * // => [0, 5, 10, 15]\n     *\n     * _.range(0, -4, -1);\n     * // => [0, -1, -2, -3]\n     *\n     * _.range(1, 4, 0);\n     * // => [1, 1, 1]\n     *\n     * _.range(0);\n     * // => []\n     */\n    var range = createRange();\n\n    /**\n     * This method is like `_.range` except that it populates values in\n     * descending order.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @param {number} [step=1] The value to increment or decrement by.\n     * @returns {Array} Returns the range of numbers.\n     * @see _.inRange, _.range\n     * @example\n     *\n     * _.rangeRight(4);\n     * // => [3, 2, 1, 0]\n     *\n     * _.rangeRight(-4);\n     * // => [-3, -2, -1, 0]\n     *\n     * _.rangeRight(1, 5);\n     * // => [4, 3, 2, 1]\n     *\n     * _.rangeRight(0, 20, 5);\n     * // => [15, 10, 5, 0]\n     *\n     * _.rangeRight(0, -4, -1);\n     * // => [-3, -2, -1, 0]\n     *\n     * _.rangeRight(1, 4, 0);\n     * // => [1, 1, 1]\n     *\n     * _.rangeRight(0);\n     * // => []\n     */\n    var rangeRight = createRange(true);\n\n    /**\n     * This method returns a new empty array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {Array} Returns the new empty array.\n     * @example\n     *\n     * var arrays = _.times(2, _.stubArray);\n     *\n     * console.log(arrays);\n     * // => [[], []]\n     *\n     * console.log(arrays[0] === arrays[1]);\n     * // => false\n     */\n    function stubArray() {\n      return [];\n    }\n\n    /**\n     * This method returns `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {boolean} Returns `false`.\n     * @example\n     *\n     * _.times(2, _.stubFalse);\n     * // => [false, false]\n     */\n    function stubFalse() {\n      return false;\n    }\n\n    /**\n     * This method returns a new empty object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {Object} Returns the new empty object.\n     * @example\n     *\n     * var objects = _.times(2, _.stubObject);\n     *\n     * console.log(objects);\n     * // => [{}, {}]\n     *\n     * console.log(objects[0] === objects[1]);\n     * // => false\n     */\n    function stubObject() {\n      return {};\n    }\n\n    /**\n     * This method returns an empty string.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {string} Returns the empty string.\n     * @example\n     *\n     * _.times(2, _.stubString);\n     * // => ['', '']\n     */\n    function stubString() {\n      return '';\n    }\n\n    /**\n     * This method returns `true`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {boolean} Returns `true`.\n     * @example\n     *\n     * _.times(2, _.stubTrue);\n     * // => [true, true]\n     */\n    function stubTrue() {\n      return true;\n    }\n\n    /**\n     * Invokes the iteratee `n` times, returning an array of the results of\n     * each invocation. The iteratee is invoked with one argument; (index).\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {number} n The number of times to invoke `iteratee`.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the array of results.\n     * @example\n     *\n     * _.times(3, String);\n     * // => ['0', '1', '2']\n     *\n     *  _.times(4, _.constant(0));\n     * // => [0, 0, 0, 0]\n     */\n    function times(n, iteratee) {\n      n = toInteger(n);\n      if (n < 1 || n > MAX_SAFE_INTEGER) {\n        return [];\n      }\n      var index = MAX_ARRAY_LENGTH,\n          length = nativeMin(n, MAX_ARRAY_LENGTH);\n\n      iteratee = getIteratee(iteratee);\n      n -= MAX_ARRAY_LENGTH;\n\n      var result = baseTimes(length, iteratee);\n      while (++index < n) {\n        iteratee(index);\n      }\n      return result;\n    }\n\n    /**\n     * Converts `value` to a property path array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {*} value The value to convert.\n     * @returns {Array} Returns the new property path array.\n     * @example\n     *\n     * _.toPath('a.b.c');\n     * // => ['a', 'b', 'c']\n     *\n     * _.toPath('a[0].b.c');\n     * // => ['a', '0', 'b', 'c']\n     */\n    function toPath(value) {\n      if (isArray(value)) {\n        return arrayMap(value, toKey);\n      }\n      return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value)));\n    }\n\n    /**\n     * Generates a unique ID. If `prefix` is given, the ID is appended to it.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {string} [prefix=''] The value to prefix the ID with.\n     * @returns {string} Returns the unique ID.\n     * @example\n     *\n     * _.uniqueId('contact_');\n     * // => 'contact_104'\n     *\n     * _.uniqueId();\n     * // => '105'\n     */\n    function uniqueId(prefix) {\n      var id = ++idCounter;\n      return toString(prefix) + id;\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Adds two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.4.0\n     * @category Math\n     * @param {number} augend The first number in an addition.\n     * @param {number} addend The second number in an addition.\n     * @returns {number} Returns the total.\n     * @example\n     *\n     * _.add(6, 4);\n     * // => 10\n     */\n    var add = createMathOperation(function(augend, addend) {\n      return augend + addend;\n    }, 0);\n\n    /**\n     * Computes `number` rounded up to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Math\n     * @param {number} number The number to round up.\n     * @param {number} [precision=0] The precision to round up to.\n     * @returns {number} Returns the rounded up number.\n     * @example\n     *\n     * _.ceil(4.006);\n     * // => 5\n     *\n     * _.ceil(6.004, 2);\n     * // => 6.01\n     *\n     * _.ceil(6040, -2);\n     * // => 6100\n     */\n    var ceil = createRound('ceil');\n\n    /**\n     * Divide two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Math\n     * @param {number} dividend The first number in a division.\n     * @param {number} divisor The second number in a division.\n     * @returns {number} Returns the quotient.\n     * @example\n     *\n     * _.divide(6, 4);\n     * // => 1.5\n     */\n    var divide = createMathOperation(function(dividend, divisor) {\n      return dividend / divisor;\n    }, 1);\n\n    /**\n     * Computes `number` rounded down to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Math\n     * @param {number} number The number to round down.\n     * @param {number} [precision=0] The precision to round down to.\n     * @returns {number} Returns the rounded down number.\n     * @example\n     *\n     * _.floor(4.006);\n     * // => 4\n     *\n     * _.floor(0.046, 2);\n     * // => 0.04\n     *\n     * _.floor(4060, -2);\n     * // => 4000\n     */\n    var floor = createRound('floor');\n\n    /**\n     * Computes the maximum value of `array`. If `array` is empty or falsey,\n     * `undefined` is returned.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {*} Returns the maximum value.\n     * @example\n     *\n     * _.max([4, 2, 8, 6]);\n     * // => 8\n     *\n     * _.max([]);\n     * // => undefined\n     */\n    function max(array) {\n      return (array && array.length)\n        ? baseExtremum(array, identity, baseGt)\n        : undefined;\n    }\n\n    /**\n     * This method is like `_.max` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the criterion by which\n     * the value is ranked. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {*} Returns the maximum value.\n     * @example\n     *\n     * var objects = [{ 'n': 1 }, { 'n': 2 }];\n     *\n     * _.maxBy(objects, function(o) { return o.n; });\n     * // => { 'n': 2 }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.maxBy(objects, 'n');\n     * // => { 'n': 2 }\n     */\n    function maxBy(array, iteratee) {\n      return (array && array.length)\n        ? baseExtremum(array, getIteratee(iteratee, 2), baseGt)\n        : undefined;\n    }\n\n    /**\n     * Computes the mean of the values in `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {number} Returns the mean.\n     * @example\n     *\n     * _.mean([4, 2, 8, 6]);\n     * // => 5\n     */\n    function mean(array) {\n      return baseMean(array, identity);\n    }\n\n    /**\n     * This method is like `_.mean` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the value to be averaged.\n     * The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the mean.\n     * @example\n     *\n     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n     *\n     * _.meanBy(objects, function(o) { return o.n; });\n     * // => 5\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.meanBy(objects, 'n');\n     * // => 5\n     */\n    function meanBy(array, iteratee) {\n      return baseMean(array, getIteratee(iteratee, 2));\n    }\n\n    /**\n     * Computes the minimum value of `array`. If `array` is empty or falsey,\n     * `undefined` is returned.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {*} Returns the minimum value.\n     * @example\n     *\n     * _.min([4, 2, 8, 6]);\n     * // => 2\n     *\n     * _.min([]);\n     * // => undefined\n     */\n    function min(array) {\n      return (array && array.length)\n        ? baseExtremum(array, identity, baseLt)\n        : undefined;\n    }\n\n    /**\n     * This method is like `_.min` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the criterion by which\n     * the value is ranked. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {*} Returns the minimum value.\n     * @example\n     *\n     * var objects = [{ 'n': 1 }, { 'n': 2 }];\n     *\n     * _.minBy(objects, function(o) { return o.n; });\n     * // => { 'n': 1 }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.minBy(objects, 'n');\n     * // => { 'n': 1 }\n     */\n    function minBy(array, iteratee) {\n      return (array && array.length)\n        ? baseExtremum(array, getIteratee(iteratee, 2), baseLt)\n        : undefined;\n    }\n\n    /**\n     * Multiply two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Math\n     * @param {number} multiplier The first number in a multiplication.\n     * @param {number} multiplicand The second number in a multiplication.\n     * @returns {number} Returns the product.\n     * @example\n     *\n     * _.multiply(6, 4);\n     * // => 24\n     */\n    var multiply = createMathOperation(function(multiplier, multiplicand) {\n      return multiplier * multiplicand;\n    }, 1);\n\n    /**\n     * Computes `number` rounded to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Math\n     * @param {number} number The number to round.\n     * @param {number} [precision=0] The precision to round to.\n     * @returns {number} Returns the rounded number.\n     * @example\n     *\n     * _.round(4.006);\n     * // => 4\n     *\n     * _.round(4.006, 2);\n     * // => 4.01\n     *\n     * _.round(4060, -2);\n     * // => 4100\n     */\n    var round = createRound('round');\n\n    /**\n     * Subtract two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {number} minuend The first number in a subtraction.\n     * @param {number} subtrahend The second number in a subtraction.\n     * @returns {number} Returns the difference.\n     * @example\n     *\n     * _.subtract(6, 4);\n     * // => 2\n     */\n    var subtract = createMathOperation(function(minuend, subtrahend) {\n      return minuend - subtrahend;\n    }, 0);\n\n    /**\n     * Computes the sum of the values in `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.4.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {number} Returns the sum.\n     * @example\n     *\n     * _.sum([4, 2, 8, 6]);\n     * // => 20\n     */\n    function sum(array) {\n      return (array && array.length)\n        ? baseSum(array, identity)\n        : 0;\n    }\n\n    /**\n     * This method is like `_.sum` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the value to be summed.\n     * The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the sum.\n     * @example\n     *\n     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n     *\n     * _.sumBy(objects, function(o) { return o.n; });\n     * // => 20\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.sumBy(objects, 'n');\n     * // => 20\n     */\n    function sumBy(array, iteratee) {\n      return (array && array.length)\n        ? baseSum(array, getIteratee(iteratee, 2))\n        : 0;\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    // Add methods that return wrapped values in chain sequences.\n    lodash.after = after;\n    lodash.ary = ary;\n    lodash.assign = assign;\n    lodash.assignIn = assignIn;\n    lodash.assignInWith = assignInWith;\n    lodash.assignWith = assignWith;\n    lodash.at = at;\n    lodash.before = before;\n    lodash.bind = bind;\n    lodash.bindAll = bindAll;\n    lodash.bindKey = bindKey;\n    lodash.castArray = castArray;\n    lodash.chain = chain;\n    lodash.chunk = chunk;\n    lodash.compact = compact;\n    lodash.concat = concat;\n    lodash.cond = cond;\n    lodash.conforms = conforms;\n    lodash.constant = constant;\n    lodash.countBy = countBy;\n    lodash.create = create;\n    lodash.curry = curry;\n    lodash.curryRight = curryRight;\n    lodash.debounce = debounce;\n    lodash.defaults = defaults;\n    lodash.defaultsDeep = defaultsDeep;\n    lodash.defer = defer;\n    lodash.delay = delay;\n    lodash.difference = difference;\n    lodash.differenceBy = differenceBy;\n    lodash.differenceWith = differenceWith;\n    lodash.drop = drop;\n    lodash.dropRight = dropRight;\n    lodash.dropRightWhile = dropRightWhile;\n    lodash.dropWhile = dropWhile;\n    lodash.fill = fill;\n    lodash.filter = filter;\n    lodash.flatMap = flatMap;\n    lodash.flatMapDeep = flatMapDeep;\n    lodash.flatMapDepth = flatMapDepth;\n    lodash.flatten = flatten;\n    lodash.flattenDeep = flattenDeep;\n    lodash.flattenDepth = flattenDepth;\n    lodash.flip = flip;\n    lodash.flow = flow;\n    lodash.flowRight = flowRight;\n    lodash.fromPairs = fromPairs;\n    lodash.functions = functions;\n    lodash.functionsIn = functionsIn;\n    lodash.groupBy = groupBy;\n    lodash.initial = initial;\n    lodash.intersection = intersection;\n    lodash.intersectionBy = intersectionBy;\n    lodash.intersectionWith = intersectionWith;\n    lodash.invert = invert;\n    lodash.invertBy = invertBy;\n    lodash.invokeMap = invokeMap;\n    lodash.iteratee = iteratee;\n    lodash.keyBy = keyBy;\n    lodash.keys = keys;\n    lodash.keysIn = keysIn;\n    lodash.map = map;\n    lodash.mapKeys = mapKeys;\n    lodash.mapValues = mapValues;\n    lodash.matches = matches;\n    lodash.matchesProperty = matchesProperty;\n    lodash.memoize = memoize;\n    lodash.merge = merge;\n    lodash.mergeWith = mergeWith;\n    lodash.method = method;\n    lodash.methodOf = methodOf;\n    lodash.mixin = mixin;\n    lodash.negate = negate;\n    lodash.nthArg = nthArg;\n    lodash.omit = omit;\n    lodash.omitBy = omitBy;\n    lodash.once = once;\n    lodash.orderBy = orderBy;\n    lodash.over = over;\n    lodash.overArgs = overArgs;\n    lodash.overEvery = overEvery;\n    lodash.overSome = overSome;\n    lodash.partial = partial;\n    lodash.partialRight = partialRight;\n    lodash.partition = partition;\n    lodash.pick = pick;\n    lodash.pickBy = pickBy;\n    lodash.property = property;\n    lodash.propertyOf = propertyOf;\n    lodash.pull = pull;\n    lodash.pullAll = pullAll;\n    lodash.pullAllBy = pullAllBy;\n    lodash.pullAllWith = pullAllWith;\n    lodash.pullAt = pullAt;\n    lodash.range = range;\n    lodash.rangeRight = rangeRight;\n    lodash.rearg = rearg;\n    lodash.reject = reject;\n    lodash.remove = remove;\n    lodash.rest = rest;\n    lodash.reverse = reverse;\n    lodash.sampleSize = sampleSize;\n    lodash.set = set;\n    lodash.setWith = setWith;\n    lodash.shuffle = shuffle;\n    lodash.slice = slice;\n    lodash.sortBy = sortBy;\n    lodash.sortedUniq = sortedUniq;\n    lodash.sortedUniqBy = sortedUniqBy;\n    lodash.split = split;\n    lodash.spread = spread;\n    lodash.tail = tail;\n    lodash.take = take;\n    lodash.takeRight = takeRight;\n    lodash.takeRightWhile = takeRightWhile;\n    lodash.takeWhile = takeWhile;\n    lodash.tap = tap;\n    lodash.throttle = throttle;\n    lodash.thru = thru;\n    lodash.toArray = toArray;\n    lodash.toPairs = toPairs;\n    lodash.toPairsIn = toPairsIn;\n    lodash.toPath = toPath;\n    lodash.toPlainObject = toPlainObject;\n    lodash.transform = transform;\n    lodash.unary = unary;\n    lodash.union = union;\n    lodash.unionBy = unionBy;\n    lodash.unionWith = unionWith;\n    lodash.uniq = uniq;\n    lodash.uniqBy = uniqBy;\n    lodash.uniqWith = uniqWith;\n    lodash.unset = unset;\n    lodash.unzip = unzip;\n    lodash.unzipWith = unzipWith;\n    lodash.update = update;\n    lodash.updateWith = updateWith;\n    lodash.values = values;\n    lodash.valuesIn = valuesIn;\n    lodash.without = without;\n    lodash.words = words;\n    lodash.wrap = wrap;\n    lodash.xor = xor;\n    lodash.xorBy = xorBy;\n    lodash.xorWith = xorWith;\n    lodash.zip = zip;\n    lodash.zipObject = zipObject;\n    lodash.zipObjectDeep = zipObjectDeep;\n    lodash.zipWith = zipWith;\n\n    // Add aliases.\n    lodash.entries = toPairs;\n    lodash.entriesIn = toPairsIn;\n    lodash.extend = assignIn;\n    lodash.extendWith = assignInWith;\n\n    // Add methods to `lodash.prototype`.\n    mixin(lodash, lodash);\n\n    /*------------------------------------------------------------------------*/\n\n    // Add methods that return unwrapped values in chain sequences.\n    lodash.add = add;\n    lodash.attempt = attempt;\n    lodash.camelCase = camelCase;\n    lodash.capitalize = capitalize;\n    lodash.ceil = ceil;\n    lodash.clamp = clamp;\n    lodash.clone = clone;\n    lodash.cloneDeep = cloneDeep;\n    lodash.cloneDeepWith = cloneDeepWith;\n    lodash.cloneWith = cloneWith;\n    lodash.conformsTo = conformsTo;\n    lodash.deburr = deburr;\n    lodash.defaultTo = defaultTo;\n    lodash.divide = divide;\n    lodash.endsWith = endsWith;\n    lodash.eq = eq;\n    lodash.escape = escape;\n    lodash.escapeRegExp = escapeRegExp;\n    lodash.every = every;\n    lodash.find = find;\n    lodash.findIndex = findIndex;\n    lodash.findKey = findKey;\n    lodash.findLast = findLast;\n    lodash.findLastIndex = findLastIndex;\n    lodash.findLastKey = findLastKey;\n    lodash.floor = floor;\n    lodash.forEach = forEach;\n    lodash.forEachRight = forEachRight;\n    lodash.forIn = forIn;\n    lodash.forInRight = forInRight;\n    lodash.forOwn = forOwn;\n    lodash.forOwnRight = forOwnRight;\n    lodash.get = get;\n    lodash.gt = gt;\n    lodash.gte = gte;\n    lodash.has = has;\n    lodash.hasIn = hasIn;\n    lodash.head = head;\n    lodash.identity = identity;\n    lodash.includes = includes;\n    lodash.indexOf = indexOf;\n    lodash.inRange = inRange;\n    lodash.invoke = invoke;\n    lodash.isArguments = isArguments;\n    lodash.isArray = isArray;\n    lodash.isArrayBuffer = isArrayBuffer;\n    lodash.isArrayLike = isArrayLike;\n    lodash.isArrayLikeObject = isArrayLikeObject;\n    lodash.isBoolean = isBoolean;\n    lodash.isBuffer = isBuffer;\n    lodash.isDate = isDate;\n    lodash.isElement = isElement;\n    lodash.isEmpty = isEmpty;\n    lodash.isEqual = isEqual;\n    lodash.isEqualWith = isEqualWith;\n    lodash.isError = isError;\n    lodash.isFinite = isFinite;\n    lodash.isFunction = isFunction;\n    lodash.isInteger = isInteger;\n    lodash.isLength = isLength;\n    lodash.isMap = isMap;\n    lodash.isMatch = isMatch;\n    lodash.isMatchWith = isMatchWith;\n    lodash.isNaN = isNaN;\n    lodash.isNative = isNative;\n    lodash.isNil = isNil;\n    lodash.isNull = isNull;\n    lodash.isNumber = isNumber;\n    lodash.isObject = isObject;\n    lodash.isObjectLike = isObjectLike;\n    lodash.isPlainObject = isPlainObject;\n    lodash.isRegExp = isRegExp;\n    lodash.isSafeInteger = isSafeInteger;\n    lodash.isSet = isSet;\n    lodash.isString = isString;\n    lodash.isSymbol = isSymbol;\n    lodash.isTypedArray = isTypedArray;\n    lodash.isUndefined = isUndefined;\n    lodash.isWeakMap = isWeakMap;\n    lodash.isWeakSet = isWeakSet;\n    lodash.join = join;\n    lodash.kebabCase = kebabCase;\n    lodash.last = last;\n    lodash.lastIndexOf = lastIndexOf;\n    lodash.lowerCase = lowerCase;\n    lodash.lowerFirst = lowerFirst;\n    lodash.lt = lt;\n    lodash.lte = lte;\n    lodash.max = max;\n    lodash.maxBy = maxBy;\n    lodash.mean = mean;\n    lodash.meanBy = meanBy;\n    lodash.min = min;\n    lodash.minBy = minBy;\n    lodash.stubArray = stubArray;\n    lodash.stubFalse = stubFalse;\n    lodash.stubObject = stubObject;\n    lodash.stubString = stubString;\n    lodash.stubTrue = stubTrue;\n    lodash.multiply = multiply;\n    lodash.nth = nth;\n    lodash.noConflict = noConflict;\n    lodash.noop = noop;\n    lodash.now = now;\n    lodash.pad = pad;\n    lodash.padEnd = padEnd;\n    lodash.padStart = padStart;\n    lodash.parseInt = parseInt;\n    lodash.random = random;\n    lodash.reduce = reduce;\n    lodash.reduceRight = reduceRight;\n    lodash.repeat = repeat;\n    lodash.replace = replace;\n    lodash.result = result;\n    lodash.round = round;\n    lodash.runInContext = runInContext;\n    lodash.sample = sample;\n    lodash.size = size;\n    lodash.snakeCase = snakeCase;\n    lodash.some = some;\n    lodash.sortedIndex = sortedIndex;\n    lodash.sortedIndexBy = sortedIndexBy;\n    lodash.sortedIndexOf = sortedIndexOf;\n    lodash.sortedLastIndex = sortedLastIndex;\n    lodash.sortedLastIndexBy = sortedLastIndexBy;\n    lodash.sortedLastIndexOf = sortedLastIndexOf;\n    lodash.startCase = startCase;\n    lodash.startsWith = startsWith;\n    lodash.subtract = subtract;\n    lodash.sum = sum;\n    lodash.sumBy = sumBy;\n    lodash.template = template;\n    lodash.times = times;\n    lodash.toFinite = toFinite;\n    lodash.toInteger = toInteger;\n    lodash.toLength = toLength;\n    lodash.toLower = toLower;\n    lodash.toNumber = toNumber;\n    lodash.toSafeInteger = toSafeInteger;\n    lodash.toString = toString;\n    lodash.toUpper = toUpper;\n    lodash.trim = trim;\n    lodash.trimEnd = trimEnd;\n    lodash.trimStart = trimStart;\n    lodash.truncate = truncate;\n    lodash.unescape = unescape;\n    lodash.uniqueId = uniqueId;\n    lodash.upperCase = upperCase;\n    lodash.upperFirst = upperFirst;\n\n    // Add aliases.\n    lodash.each = forEach;\n    lodash.eachRight = forEachRight;\n    lodash.first = head;\n\n    mixin(lodash, (function() {\n      var source = {};\n      baseForOwn(lodash, function(func, methodName) {\n        if (!hasOwnProperty.call(lodash.prototype, methodName)) {\n          source[methodName] = func;\n        }\n      });\n      return source;\n    }()), { 'chain': false });\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * The semantic version number.\n     *\n     * @static\n     * @memberOf _\n     * @type {string}\n     */\n    lodash.VERSION = VERSION;\n\n    // Assign default placeholders.\n    arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) {\n      lodash[methodName].placeholder = lodash;\n    });\n\n    // Add `LazyWrapper` methods for `_.drop` and `_.take` variants.\n    arrayEach(['drop', 'take'], function(methodName, index) {\n      LazyWrapper.prototype[methodName] = function(n) {\n        n = n === undefined ? 1 : nativeMax(toInteger(n), 0);\n\n        var result = (this.__filtered__ && !index)\n          ? new LazyWrapper(this)\n          : this.clone();\n\n        if (result.__filtered__) {\n          result.__takeCount__ = nativeMin(n, result.__takeCount__);\n        } else {\n          result.__views__.push({\n            'size': nativeMin(n, MAX_ARRAY_LENGTH),\n            'type': methodName + (result.__dir__ < 0 ? 'Right' : '')\n          });\n        }\n        return result;\n      };\n\n      LazyWrapper.prototype[methodName + 'Right'] = function(n) {\n        return this.reverse()[methodName](n).reverse();\n      };\n    });\n\n    // Add `LazyWrapper` methods that accept an `iteratee` value.\n    arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) {\n      var type = index + 1,\n          isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG;\n\n      LazyWrapper.prototype[methodName] = function(iteratee) {\n        var result = this.clone();\n        result.__iteratees__.push({\n          'iteratee': getIteratee(iteratee, 3),\n          'type': type\n        });\n        result.__filtered__ = result.__filtered__ || isFilter;\n        return result;\n      };\n    });\n\n    // Add `LazyWrapper` methods for `_.head` and `_.last`.\n    arrayEach(['head', 'last'], function(methodName, index) {\n      var takeName = 'take' + (index ? 'Right' : '');\n\n      LazyWrapper.prototype[methodName] = function() {\n        return this[takeName](1).value()[0];\n      };\n    });\n\n    // Add `LazyWrapper` methods for `_.initial` and `_.tail`.\n    arrayEach(['initial', 'tail'], function(methodName, index) {\n      var dropName = 'drop' + (index ? '' : 'Right');\n\n      LazyWrapper.prototype[methodName] = function() {\n        return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);\n      };\n    });\n\n    LazyWrapper.prototype.compact = function() {\n      return this.filter(identity);\n    };\n\n    LazyWrapper.prototype.find = function(predicate) {\n      return this.filter(predicate).head();\n    };\n\n    LazyWrapper.prototype.findLast = function(predicate) {\n      return this.reverse().find(predicate);\n    };\n\n    LazyWrapper.prototype.invokeMap = baseRest(function(path, args) {\n      if (typeof path == 'function') {\n        return new LazyWrapper(this);\n      }\n      return this.map(function(value) {\n        return baseInvoke(value, path, args);\n      });\n    });\n\n    LazyWrapper.prototype.reject = function(predicate) {\n      return this.filter(negate(getIteratee(predicate)));\n    };\n\n    LazyWrapper.prototype.slice = function(start, end) {\n      start = toInteger(start);\n\n      var result = this;\n      if (result.__filtered__ && (start > 0 || end < 0)) {\n        return new LazyWrapper(result);\n      }\n      if (start < 0) {\n        result = result.takeRight(-start);\n      } else if (start) {\n        result = result.drop(start);\n      }\n      if (end !== undefined) {\n        end = toInteger(end);\n        result = end < 0 ? result.dropRight(-end) : result.take(end - start);\n      }\n      return result;\n    };\n\n    LazyWrapper.prototype.takeRightWhile = function(predicate) {\n      return this.reverse().takeWhile(predicate).reverse();\n    };\n\n    LazyWrapper.prototype.toArray = function() {\n      return this.take(MAX_ARRAY_LENGTH);\n    };\n\n    // Add `LazyWrapper` methods to `lodash.prototype`.\n    baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n      var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName),\n          isTaker = /^(?:head|last)$/.test(methodName),\n          lodashFunc = lodash[isTaker ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName],\n          retUnwrapped = isTaker || /^find/.test(methodName);\n\n      if (!lodashFunc) {\n        return;\n      }\n      lodash.prototype[methodName] = function() {\n        var value = this.__wrapped__,\n            args = isTaker ? [1] : arguments,\n            isLazy = value instanceof LazyWrapper,\n            iteratee = args[0],\n            useLazy = isLazy || isArray(value);\n\n        var interceptor = function(value) {\n          var result = lodashFunc.apply(lodash, arrayPush([value], args));\n          return (isTaker && chainAll) ? result[0] : result;\n        };\n\n        if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) {\n          // Avoid lazy use if the iteratee has a \"length\" value other than `1`.\n          isLazy = useLazy = false;\n        }\n        var chainAll = this.__chain__,\n            isHybrid = !!this.__actions__.length,\n            isUnwrapped = retUnwrapped && !chainAll,\n            onlyLazy = isLazy && !isHybrid;\n\n        if (!retUnwrapped && useLazy) {\n          value = onlyLazy ? value : new LazyWrapper(this);\n          var result = func.apply(value, args);\n          result.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined });\n          return new LodashWrapper(result, chainAll);\n        }\n        if (isUnwrapped && onlyLazy) {\n          return func.apply(this, args);\n        }\n        result = this.thru(interceptor);\n        return isUnwrapped ? (isTaker ? result.value()[0] : result.value()) : result;\n      };\n    });\n\n    // Add `Array` methods to `lodash.prototype`.\n    arrayEach(['pop', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) {\n      var func = arrayProto[methodName],\n          chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',\n          retUnwrapped = /^(?:pop|shift)$/.test(methodName);\n\n      lodash.prototype[methodName] = function() {\n        var args = arguments;\n        if (retUnwrapped && !this.__chain__) {\n          var value = this.value();\n          return func.apply(isArray(value) ? value : [], args);\n        }\n        return this[chainName](function(value) {\n          return func.apply(isArray(value) ? value : [], args);\n        });\n      };\n    });\n\n    // Map minified method names to their real names.\n    baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n      var lodashFunc = lodash[methodName];\n      if (lodashFunc) {\n        var key = lodashFunc.name + '';\n        if (!hasOwnProperty.call(realNames, key)) {\n          realNames[key] = [];\n        }\n        realNames[key].push({ 'name': methodName, 'func': lodashFunc });\n      }\n    });\n\n    realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{\n      'name': 'wrapper',\n      'func': undefined\n    }];\n\n    // Add methods to `LazyWrapper`.\n    LazyWrapper.prototype.clone = lazyClone;\n    LazyWrapper.prototype.reverse = lazyReverse;\n    LazyWrapper.prototype.value = lazyValue;\n\n    // Add chain sequence methods to the `lodash` wrapper.\n    lodash.prototype.at = wrapperAt;\n    lodash.prototype.chain = wrapperChain;\n    lodash.prototype.commit = wrapperCommit;\n    lodash.prototype.next = wrapperNext;\n    lodash.prototype.plant = wrapperPlant;\n    lodash.prototype.reverse = wrapperReverse;\n    lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue;\n\n    // Add lazy aliases.\n    lodash.prototype.first = lodash.prototype.head;\n\n    if (symIterator) {\n      lodash.prototype[symIterator] = wrapperToIterator;\n    }\n    return lodash;\n  });\n\n  /*--------------------------------------------------------------------------*/\n\n  // Export lodash.\n  var _ = runInContext();\n\n  // Some AMD build optimizers, like r.js, check for condition patterns like:\n  if (true) {\n    // Expose Lodash on the global object to prevent errors when Lodash is\n    // loaded by a script tag in the presence of an AMD loader.\n    // See http://requirejs.org/docs/errors.html#mismatch for more details.\n    // Use `_.noConflict` to remove Lodash from the global object.\n    root._ = _;\n\n    // Define as an anonymous module so, through path mapping, it can be\n    // referenced as the \"underscore\" module.\n    !(__WEBPACK_AMD_DEFINE_RESULT__ = (function() {\n      return _;\n    }).call(exports, __webpack_require__, exports, module),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n  }\n  // Check for `exports` after `define` in case a build optimizer adds it.\n  else {}\n}.call(this));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbG9kYXNoL2xvZGFzaC5qcyIsIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyQ0FBMkM7QUFDM0M7QUFDQSwyREFBMkQ7O0FBRTNEO0FBQ0EsK0NBQStDO0FBQy9DO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQztBQUN0Qzs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSx5QkFBeUI7QUFDekIseUJBQXlCO0FBQ3pCOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQzs7QUFFM0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQixNQUFNLGFBQWEsT0FBTzs7QUFFcEQ7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlEQUFpRCxFQUFFO0FBQ25EO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSwyQ0FBMkMsRUFBRTs7QUFFN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxlQUFlO0FBQ2YsY0FBYztBQUNkLGNBQWM7QUFDZCxnQkFBZ0I7QUFDaEIsZUFBZTtBQUNmOztBQUVBO0FBQ0E7QUFDQSxVQUFVO0FBQ1YsU0FBUztBQUNULFNBQVM7QUFDVCxXQUFXO0FBQ1gsVUFBVTtBQUNWOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwwQkFBMEIscUJBQU0sZ0JBQWdCLHFCQUFNLElBQUkscUJBQU0sc0JBQXNCLHFCQUFNOztBQUU1RjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0IsS0FBMEI7O0FBRTlDO0FBQ0Esa0NBQWtDLFFBQWE7O0FBRS9DO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsVUFBVTtBQUN2QixhQUFhLEdBQUc7QUFDaEIsYUFBYSxPQUFPO0FBQ3BCLGVBQWUsR0FBRztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsT0FBTztBQUNwQixhQUFhLFVBQVU7QUFDdkIsYUFBYSxVQUFVO0FBQ3ZCLGFBQWEsUUFBUTtBQUNyQixlQUFlLFVBQVU7QUFDekI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLE9BQU87QUFDcEIsYUFBYSxVQUFVO0FBQ3ZCLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxPQUFPO0FBQ3BCLGFBQWEsVUFBVTtBQUN2QixlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLE9BQU87QUFDcEIsYUFBYSxVQUFVO0FBQ3ZCLGVBQWUsU0FBUztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLE9BQU87QUFDcEIsYUFBYSxVQUFVO0FBQ3ZCLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxPQUFPO0FBQ3BCLGFBQWEsR0FBRztBQUNoQixlQUFlLFNBQVM7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsT0FBTztBQUNwQixhQUFhLEdBQUc7QUFDaEIsYUFBYSxVQUFVO0FBQ3ZCLGVBQWUsU0FBUztBQUN4QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxPQUFPO0FBQ3BCLGFBQWEsVUFBVTtBQUN2QixlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxPQUFPO0FBQ3BCLGFBQWEsT0FBTztBQUNwQixlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLE9BQU87QUFDcEIsYUFBYSxVQUFVO0FBQ3ZCLGFBQWEsR0FBRztBQUNoQixhQUFhLFNBQVM7QUFDdEI7QUFDQSxlQUFlLEdBQUc7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxPQUFPO0FBQ3BCLGFBQWEsVUFBVTtBQUN2QixhQUFhLEdBQUc7QUFDaEIsYUFBYSxTQUFTO0FBQ3RCO0FBQ0EsZUFBZSxHQUFHO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsT0FBTztBQUNwQixhQUFhLFVBQVU7QUFDdkIsZUFBZSxTQUFTO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLFFBQVE7QUFDckIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLFFBQVE7QUFDckIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLGNBQWM7QUFDM0IsYUFBYSxVQUFVO0FBQ3ZCLGFBQWEsVUFBVTtBQUN2QixlQUFlLEdBQUc7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLE9BQU87QUFDcEIsYUFBYSxVQUFVO0FBQ3ZCLGFBQWEsUUFBUTtBQUNyQixhQUFhLFNBQVM7QUFDdEIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxPQUFPO0FBQ3BCLGFBQWEsR0FBRztBQUNoQixhQUFhLFFBQVE7QUFDckIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsT0FBTztBQUNwQixhQUFhLEdBQUc7QUFDaEIsYUFBYSxRQUFRO0FBQ3JCLGFBQWEsVUFBVTtBQUN2QixlQUFlLFFBQVE7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLEdBQUc7QUFDaEIsZUFBZSxTQUFTO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLE9BQU87QUFDcEIsYUFBYSxVQUFVO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCLGVBQWUsVUFBVTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLFFBQVE7QUFDckIsZUFBZSxVQUFVO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxjQUFjO0FBQzNCLGFBQWEsVUFBVTtBQUN2QixhQUFhLEdBQUc7QUFDaEIsYUFBYSxTQUFTO0FBQ3RCO0FBQ0EsYUFBYSxVQUFVO0FBQ3ZCLGVBQWUsR0FBRztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLE9BQU87QUFDcEIsYUFBYSxVQUFVO0FBQ3ZCLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLE9BQU87QUFDcEIsYUFBYSxVQUFVO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsUUFBUTtBQUNyQixhQUFhLFVBQVU7QUFDdkIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsUUFBUTtBQUNyQixhQUFhLE9BQU87QUFDcEIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCLGVBQWUsUUFBUTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLFVBQVU7QUFDdkIsZUFBZSxVQUFVO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLFFBQVE7QUFDckIsYUFBYSxPQUFPO0FBQ3BCLGVBQWUsUUFBUTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsUUFBUTtBQUNyQixhQUFhLFFBQVE7QUFDckIsZUFBZSxTQUFTO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLE9BQU87QUFDcEIsYUFBYSxPQUFPO0FBQ3BCLGVBQWUsUUFBUTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsT0FBTztBQUNwQixhQUFhLE9BQU87QUFDcEIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLE9BQU87QUFDcEIsYUFBYSxHQUFHO0FBQ2hCLGVBQWUsUUFBUTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCLGVBQWUsUUFBUTtBQUN2QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCLGVBQWUsUUFBUTtBQUN2QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCLGVBQWUsUUFBUTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsUUFBUTtBQUNyQixhQUFhLFFBQVE7QUFDckIsZUFBZSxHQUFHO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCLGVBQWUsU0FBUztBQUN4QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsUUFBUTtBQUNyQixlQUFlLFNBQVM7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLFFBQVE7QUFDckIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLFFBQVE7QUFDckIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsVUFBVTtBQUN2QixhQUFhLFVBQVU7QUFDdkIsZUFBZSxVQUFVO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxPQUFPO0FBQ3BCLGFBQWEsR0FBRztBQUNoQixlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsUUFBUTtBQUNyQixlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsT0FBTztBQUNwQixhQUFhLEdBQUc7QUFDaEIsYUFBYSxRQUFRO0FBQ3JCLGVBQWUsUUFBUTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxPQUFPO0FBQ3BCLGFBQWEsR0FBRztBQUNoQixhQUFhLFFBQVE7QUFDckIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCLGVBQWUsUUFBUTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLFFBQVE7QUFDckIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCLGVBQWUsUUFBUTtBQUN2QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCLGVBQWUsUUFBUTtBQUN2QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCLGVBQWUsUUFBUTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsUUFBUTtBQUNyQixlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLFFBQVE7QUFDckIsZUFBZSxVQUFVO0FBQ3pCO0FBQ0E7QUFDQSxlQUFlLDBCQUEwQjtBQUN6QztBQUNBO0FBQ0Esb0JBQW9CLCtCQUErQjtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsNEJBQTRCO0FBQzlEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBLFFBQVE7QUFDUixLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtRUFBbUU7QUFDbkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxHQUFHO0FBQ2xCLGlCQUFpQixRQUFRO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixpQkFBaUIsUUFBUTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEdBQUc7QUFDbEIsZUFBZSxTQUFTO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsR0FBRztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsUUFBUTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixRQUFRO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixHQUFHO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixpQkFBaUIsU0FBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGlCQUFpQixHQUFHO0FBQ3BCO0FBQ0E7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O0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxHQUFHO0FBQ2xCLGlCQUFpQixTQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxHQUFHO0FBQ2xCLGlCQUFpQixTQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxHQUFHO0FBQ2xCLGlCQUFpQixTQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEdBQUc7QUFDbEIsZUFBZSxHQUFHO0FBQ2xCLGVBQWUsU0FBUztBQUN4QjtBQUNBO0FBQ0EsZUFBZSxVQUFVO0FBQ3pCLGVBQWUsUUFBUTtBQUN2QixpQkFBaUIsU0FBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFVBQVU7QUFDekIsZUFBZSxVQUFVO0FBQ3pCLGVBQWUsUUFBUTtBQUN2QixpQkFBaUIsU0FBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxHQUFHO0FBQ2xCLGlCQUFpQixTQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFB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QUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFNBQVM7QUFDeEIsaUJBQWlCLFVBQVU7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFVBQVU7QUFDekIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsR0FBRztBQUNsQixpQkFBaUIsVUFBVTtBQUMzQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsaUJBQWlCLFVBQVU7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxVQUFVO0FBQ3pCLGlCQUFpQixVQUFVO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxVQUFVO0FBQ3pCLGlCQUFpQixVQUFVO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFVBQVU7QUFDekIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixpQkFBaUIsVUFBVTtBQUMzQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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QVE7QUFDdkIsZUFBZSxNQUFNO0FBQ3JCLGlCQUFpQixVQUFVO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxVQUFVO0FBQ3pCLGVBQWUsUUFBUTtBQUN2QixnQkFBZ0IsUUFBUTtBQUN4QixpQkFBaUIsVUFBVTtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFVBQVU7QUFDekIsZUFBZSxRQUFRO0FBQ3ZCLGdCQUFnQixRQUFRO0FBQ3hCLGlCQUFpQixVQUFVO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsVUFBVTtBQUN6QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRLFdBQVc7QUFDbEMsZUFBZSxTQUFTO0FBQ3hCO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZUFBZSxTQUFTO0FBQ3hCO0FBQ0EsaUJBQWlCLFVBQVU7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxtREFBbUQsaUJBQWlCO0FBQ3BFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsVUFBVTtBQUN6QixlQUFlLE1BQU07QUFDckIsaUJBQWlCLFFBQVE7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFVBQVU7QUFDekIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsTUFBTTtBQUNyQixpQkFBaUIsUUFBUTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFVBQVU7QUFDekIsaUJBQWlCLFVBQVU7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsVUFBVTtBQUN6QixlQUFlLFVBQVU7QUFDekIsaUJBQWlCLFVBQVU7QUFDM0I7QUFDQTtBQUNBLHNCQUFzQjtBQUN0QixxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFVBQVU7QUFDekIsaUJBQWlCLFVBQVU7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsVUFBVTtBQUN6QixpQkFBaUIsVUFBVTtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsVUFBVTtBQUN6QixlQUFlLDBCQUEwQjtBQUN6QztBQUNBLGlCQUFpQixVQUFVO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxVQUFVO0FBQ3pCLGVBQWUsTUFBTTtBQUNyQixpQkFBaUIsVUFBVTtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFVBQVU7QUFDekIsZUFBZSxNQUFNO0FBQ3JCLGlCQUFpQixVQUFVO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFD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ZSxHQUFHO0FBQ2xCLGlCQUFpQixTQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsR0FBRztBQUNsQixpQkFBaUIsU0FBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEdBQUc7QUFDbEIsaUJBQWlCLFNBQVM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxHQUFHO0FBQ2xCLGlCQUFpQixTQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsR0FBRztBQUNsQixpQkFBaUIsU0FBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEdBQUc7QUFDbEIsaUJBQWlCLFNBQVM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxHQUFHO0FBQ2xCLGlCQUFpQixTQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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Q0E7QUFDQSxlQUFlLEdBQUc7QUFDbEIsaUJBQWlCLFNBQVM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsR0FBRztBQUNsQixpQkFBaUIsU0FBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEdBQUc7QUFDbEIsaUJBQWlCLFNBQVM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxHQUFHO0FBQ2xCLGlCQUFpQixTQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsR0FBRztBQUNsQixpQkFBaUIsU0FBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEdBQUc7QUFDbEIsaUJBQWlCLFNBQVM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsR0FBRztBQUNsQixpQkFBaUIsU0FBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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Q3ZCLGVBQWUsVUFBVTtBQUN6QixpQkFBaUIsUUFBUTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixlQUFlLFVBQVU7QUFDekIsaUJBQWlCLFFBQVE7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsVUFBVTtBQUN6QixpQkFBaUIsUUFBUTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsVUFBVTtBQUN6QixpQkFBaUIsUUFBUTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGlCQUFpQixPQUFPO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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Q3ZCLGlCQUFpQixTQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxTQUFTO0FBQ3hCLGlCQUFpQixRQUFRO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsaUJBQWlCLFFBQVE7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixpQkFBaUIsUUFBUTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsaUJBQWlCLFFBQVE7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsaUJBQWlCLFNBQVM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixpQkFBaUIsUUFBUTtBQUN6QjtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0M7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGtDQUFrQyxLQUFLO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsaUJBQWlCLFFBQVE7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGlCQUFpQixRQUFRO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixpQkFBaUIsUUFBUTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsaUJBQWlCLFFBQVE7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixpQkFBaUIsUUFBUTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGlCQUFpQixRQUFRO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsaUJBQWlCLFFBQVE7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZ0JBQWdCLFFBQVE7QUFDeEIsaUJBQWlCLFFBQVE7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZ0JBQWdCLFFBQVE7QUFDeEIsaUJBQWlCLFFBQVE7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixlQUFlLGVBQWU7QUFDOUIsZUFBZSxpQkFBaUI7QUFDaEMsaUJBQWlCLFFBQVE7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsaUJBQWlCLFFBQVE7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsZUFBZTtBQUM5QixlQUFlLFFBQVE7QUFDdkIsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7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O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsS0FBSyxPQUFPLGdCQUFnQjs7QUFFNUI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0MsMkRBQTJEO0FBQy9GO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4Qix3Q0FBd0M7QUFDdEU7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsTUFBTSxJQUEwRTtBQUNoRjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJLG1DQUFPO0FBQ1g7QUFDQSxLQUFLO0FBQUEsa0dBQUM7QUFDTjtBQUNBO0FBQ0EsT0FBTyxFQVNKO0FBQ0gsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvbG9kYXNoLmpzPzkwZGMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogTG9kYXNoIDxodHRwczovL2xvZGFzaC5jb20vPlxuICogQ29weXJpZ2h0IE9wZW5KUyBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnMgPGh0dHBzOi8vb3BlbmpzZi5vcmcvPlxuICogUmVsZWFzZWQgdW5kZXIgTUlUIGxpY2Vuc2UgPGh0dHBzOi8vbG9kYXNoLmNvbS9saWNlbnNlPlxuICogQmFzZWQgb24gVW5kZXJzY29yZS5qcyAxLjguMyA8aHR0cDovL3VuZGVyc2NvcmVqcy5vcmcvTElDRU5TRT5cbiAqIENvcHlyaWdodCBKZXJlbXkgQXNoa2VuYXMsIERvY3VtZW50Q2xvdWQgYW5kIEludmVzdGlnYXRpdmUgUmVwb3J0ZXJzICYgRWRpdG9yc1xuICovXG47KGZ1bmN0aW9uKCkge1xuXG4gIC8qKiBVc2VkIGFzIGEgc2FmZSByZWZlcmVuY2UgZm9yIGB1bmRlZmluZWRgIGluIHByZS1FUzUgZW52aXJvbm1lbnRzLiAqL1xuICB2YXIgdW5kZWZpbmVkO1xuXG4gIC8qKiBVc2VkIGFzIHRoZSBzZW1hbnRpYyB2ZXJzaW9uIG51bWJlci4gKi9cbiAgdmFyIFZFUlNJT04gPSAnNC4xNy4yMSc7XG5cbiAgLyoqIFVzZWQgYXMgdGhlIHNpemUgdG8gZW5hYmxlIGxhcmdlIGFycmF5IG9wdGltaXphdGlvbnMuICovXG4gIHZhciBMQVJHRV9BUlJBWV9TSVpFID0gMjAwO1xuXG4gIC8qKiBFcnJvciBtZXNzYWdlIGNvbnN0YW50cy4gKi9cbiAgdmFyIENPUkVfRVJST1JfVEVYVCA9ICdVbnN1cHBvcnRlZCBjb3JlLWpzIHVzZS4gVHJ5IGh0dHBzOi8vbnBtcy5pby9zZWFyY2g/cT1wb255ZmlsbC4nLFxuICAgICAgRlVOQ19FUlJPUl9URVhUID0gJ0V4cGVjdGVkIGEgZnVuY3Rpb24nLFxuICAgICAgSU5WQUxJRF9URU1QTF9WQVJfRVJST1JfVEVYVCA9ICdJbnZhbGlkIGB2YXJpYWJsZWAgb3B0aW9uIHBhc3NlZCBpbnRvIGBfLnRlbXBsYXRlYCc7XG5cbiAgLyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL1xuICB2YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XG5cbiAgLyoqIFVzZWQgYXMgdGhlIG1heGltdW0gbWVtb2l6ZSBjYWNoZSBzaXplLiAqL1xuICB2YXIgTUFYX01FTU9JWkVfU0laRSA9IDUwMDtcblxuICAvKiogVXNlZCBhcyB0aGUgaW50ZXJuYWwgYXJndW1lbnQgcGxhY2Vob2xkZXIuICovXG4gIHZhciBQTEFDRUhPTERFUiA9ICdfX2xvZGFzaF9wbGFjZWhvbGRlcl9fJztcblxuICAvKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBjbG9uaW5nLiAqL1xuICB2YXIgQ0xPTkVfREVFUF9GTEFHID0gMSxcbiAgICAgIENMT05FX0ZMQVRfRkxBRyA9IDIsXG4gICAgICBDTE9ORV9TWU1CT0xTX0ZMQUcgPSA0O1xuXG4gIC8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xuICB2YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxLFxuICAgICAgQ09NUEFSRV9VTk9SREVSRURfRkxBRyA9IDI7XG5cbiAgLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgZnVuY3Rpb24gbWV0YWRhdGEuICovXG4gIHZhciBXUkFQX0JJTkRfRkxBRyA9IDEsXG4gICAgICBXUkFQX0JJTkRfS0VZX0ZMQUcgPSAyLFxuICAgICAgV1JBUF9DVVJSWV9CT1VORF9GTEFHID0gNCxcbiAgICAgIFdSQVBfQ1VSUllfRkxBRyA9IDgsXG4gICAgICBXUkFQX0NVUlJZX1JJR0hUX0ZMQUcgPSAxNixcbiAgICAgIFdSQVBfUEFSVElBTF9GTEFHID0gMzIsXG4gICAgICBXUkFQX1BBUlRJQUxfUklHSFRfRkxBRyA9IDY0LFxuICAgICAgV1JBUF9BUllfRkxBRyA9IDEyOCxcbiAgICAgIFdSQVBfUkVBUkdfRkxBRyA9IDI1NixcbiAgICAgIFdSQVBfRkxJUF9GTEFHID0gNTEyO1xuXG4gIC8qKiBVc2VkIGFzIGRlZmF1bHQgb3B0aW9ucyBmb3IgYF8udHJ1bmNhdGVgLiAqL1xuICB2YXIgREVGQVVMVF9UUlVOQ19MRU5HVEggPSAzMCxcbiAgICAgIERFRkFVTFRfVFJVTkNfT01JU1NJT04gPSAnLi4uJztcblxuICAvKiogVXNlZCB0byBkZXRlY3QgaG90IGZ1bmN0aW9ucyBieSBudW1iZXIgb2YgY2FsbHMgd2l0aGluIGEgc3BhbiBvZiBtaWxsaXNlY29uZHMuICovXG4gIHZhciBIT1RfQ09VTlQgPSA4MDAsXG4gICAgICBIT1RfU1BBTiA9IDE2O1xuXG4gIC8qKiBVc2VkIHRvIGluZGljYXRlIHRoZSB0eXBlIG9mIGxhenkgaXRlcmF0ZWVzLiAqL1xuICB2YXIgTEFaWV9GSUxURVJfRkxBRyA9IDEsXG4gICAgICBMQVpZX01BUF9GTEFHID0gMixcbiAgICAgIExBWllfV0hJTEVfRkxBRyA9IDM7XG5cbiAgLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG4gIHZhciBJTkZJTklUWSA9IDEgLyAwLFxuICAgICAgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTEsXG4gICAgICBNQVhfSU5URUdFUiA9IDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4LFxuICAgICAgTkFOID0gMCAvIDA7XG5cbiAgLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdGhlIG1heGltdW0gbGVuZ3RoIGFuZCBpbmRleCBvZiBhbiBhcnJheS4gKi9cbiAgdmFyIE1BWF9BUlJBWV9MRU5HVEggPSA0Mjk0OTY3Mjk1LFxuICAgICAgTUFYX0FSUkFZX0lOREVYID0gTUFYX0FSUkFZX0xFTkdUSCAtIDEsXG4gICAgICBIQUxGX01BWF9BUlJBWV9MRU5HVEggPSBNQVhfQVJSQVlfTEVOR1RIID4+PiAxO1xuXG4gIC8qKiBVc2VkIHRvIGFzc29jaWF0ZSB3cmFwIG1ldGhvZHMgd2l0aCB0aGVpciBiaXQgZmxhZ3MuICovXG4gIHZhciB3cmFwRmxhZ3MgPSBbXG4gICAgWydhcnknLCBXUkFQX0FSWV9GTEFHXSxcbiAgICBbJ2JpbmQnLCBXUkFQX0JJTkRfRkxBR10sXG4gICAgWydiaW5kS2V5JywgV1JBUF9CSU5EX0tFWV9GTEFHXSxcbiAgICBbJ2N1cnJ5JywgV1JBUF9DVVJSWV9GTEFHXSxcbiAgICBbJ2N1cnJ5UmlnaHQnLCBXUkFQX0NVUlJZX1JJR0hUX0ZMQUddLFxuICAgIFsnZmxpcCcsIFdSQVBfRkxJUF9GTEFHXSxcbiAgICBbJ3BhcnRpYWwnLCBXUkFQX1BBUlRJQUxfRkxBR10sXG4gICAgWydwYXJ0aWFsUmlnaHQnLCBXUkFQX1BBUlRJQUxfUklHSFRfRkxBR10sXG4gICAgWydyZWFyZycsIFdSQVBfUkVBUkdfRkxBR11cbiAgXTtcblxuICAvKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG4gIHZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXG4gICAgICBhcnJheVRhZyA9ICdbb2JqZWN0IEFycmF5XScsXG4gICAgICBhc3luY1RhZyA9ICdbb2JqZWN0IEFzeW5jRnVuY3Rpb25dJyxcbiAgICAgIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXScsXG4gICAgICBkYXRlVGFnID0gJ1tvYmplY3QgRGF0ZV0nLFxuICAgICAgZG9tRXhjVGFnID0gJ1tvYmplY3QgRE9NRXhjZXB0aW9uXScsXG4gICAgICBlcnJvclRhZyA9ICdbb2JqZWN0IEVycm9yXScsXG4gICAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICAgIGdlblRhZyA9ICdbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXScsXG4gICAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICAgIG51bWJlclRhZyA9ICdbb2JqZWN0IE51bWJlcl0nLFxuICAgICAgbnVsbFRhZyA9ICdbb2JqZWN0IE51bGxdJyxcbiAgICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nLFxuICAgICAgcHJvbWlzZVRhZyA9ICdbb2JqZWN0IFByb21pc2VdJyxcbiAgICAgIHByb3h5VGFnID0gJ1tvYmplY3QgUHJveHldJyxcbiAgICAgIHJlZ2V4cFRhZyA9ICdbb2JqZWN0IFJlZ0V4cF0nLFxuICAgICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgICBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJyxcbiAgICAgIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nLFxuICAgICAgdW5kZWZpbmVkVGFnID0gJ1tvYmplY3QgVW5kZWZpbmVkXScsXG4gICAgICB3ZWFrTWFwVGFnID0gJ1tvYmplY3QgV2Vha01hcF0nLFxuICAgICAgd2Vha1NldFRhZyA9ICdbb2JqZWN0IFdlYWtTZXRdJztcblxuICB2YXIgYXJyYXlCdWZmZXJUYWcgPSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nLFxuICAgICAgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nLFxuICAgICAgZmxvYXQzMlRhZyA9ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgICAgZmxvYXQ2NFRhZyA9ICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nLFxuICAgICAgaW50OFRhZyA9ICdbb2JqZWN0IEludDhBcnJheV0nLFxuICAgICAgaW50MTZUYWcgPSAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgICBpbnQzMlRhZyA9ICdbb2JqZWN0IEludDMyQXJyYXldJyxcbiAgICAgIHVpbnQ4VGFnID0gJ1tvYmplY3QgVWludDhBcnJheV0nLFxuICAgICAgdWludDhDbGFtcGVkVGFnID0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICAgIHVpbnQxNlRhZyA9ICdbb2JqZWN0IFVpbnQxNkFycmF5XScsXG4gICAgICB1aW50MzJUYWcgPSAnW29iamVjdCBVaW50MzJBcnJheV0nO1xuXG4gIC8qKiBVc2VkIHRvIG1hdGNoIGVtcHR5IHN0cmluZyBsaXRlcmFscyBpbiBjb21waWxlZCB0ZW1wbGF0ZSBzb3VyY2UuICovXG4gIHZhciByZUVtcHR5U3RyaW5nTGVhZGluZyA9IC9cXGJfX3AgXFwrPSAnJzsvZyxcbiAgICAgIHJlRW1wdHlTdHJpbmdNaWRkbGUgPSAvXFxiKF9fcCBcXCs9KSAnJyBcXCsvZyxcbiAgICAgIHJlRW1wdHlTdHJpbmdUcmFpbGluZyA9IC8oX19lXFwoLio/XFwpfFxcYl9fdFxcKSkgXFwrXFxuJyc7L2c7XG5cbiAgLyoqIFVzZWQgdG8gbWF0Y2ggSFRNTCBlbnRpdGllcyBhbmQgSFRNTCBjaGFyYWN0ZXJzLiAqL1xuICB2YXIgcmVFc2NhcGVkSHRtbCA9IC8mKD86YW1wfGx0fGd0fHF1b3R8IzM5KTsvZyxcbiAgICAgIHJlVW5lc2NhcGVkSHRtbCA9IC9bJjw+XCInXS9nLFxuICAgICAgcmVIYXNFc2NhcGVkSHRtbCA9IFJlZ0V4cChyZUVzY2FwZWRIdG1sLnNvdXJjZSksXG4gICAgICByZUhhc1VuZXNjYXBlZEh0bWwgPSBSZWdFeHAocmVVbmVzY2FwZWRIdG1sLnNvdXJjZSk7XG5cbiAgLyoqIFVzZWQgdG8gbWF0Y2ggdGVtcGxhdGUgZGVsaW1pdGVycy4gKi9cbiAgdmFyIHJlRXNjYXBlID0gLzwlLShbXFxzXFxTXSs/KSU+L2csXG4gICAgICByZUV2YWx1YXRlID0gLzwlKFtcXHNcXFNdKz8pJT4vZyxcbiAgICAgIHJlSW50ZXJwb2xhdGUgPSAvPCU9KFtcXHNcXFNdKz8pJT4vZztcblxuICAvKiogVXNlZCB0byBtYXRjaCBwcm9wZXJ0eSBuYW1lcyB3aXRoaW4gcHJvcGVydHkgcGF0aHMuICovXG4gIHZhciByZUlzRGVlcFByb3AgPSAvXFwufFxcWyg/OlteW1xcXV0qfChbXCInXSkoPzooPyFcXDEpW15cXFxcXXxcXFxcLikqP1xcMSlcXF0vLFxuICAgICAgcmVJc1BsYWluUHJvcCA9IC9eXFx3KiQvLFxuICAgICAgcmVQcm9wTmFtZSA9IC9bXi5bXFxdXSt8XFxbKD86KC0/XFxkKyg/OlxcLlxcZCspPyl8KFtcIiddKSgoPzooPyFcXDIpW15cXFxcXXxcXFxcLikqPylcXDIpXFxdfCg/PSg/OlxcLnxcXFtcXF0pKD86XFwufFxcW1xcXXwkKSkvZztcblxuICAvKipcbiAgICogVXNlZCB0byBtYXRjaCBgUmVnRXhwYFxuICAgKiBbc3ludGF4IGNoYXJhY3RlcnNdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXBhdHRlcm5zKS5cbiAgICovXG4gIHZhciByZVJlZ0V4cENoYXIgPSAvW1xcXFxeJC4qKz8oKVtcXF17fXxdL2csXG4gICAgICByZUhhc1JlZ0V4cENoYXIgPSBSZWdFeHAocmVSZWdFeHBDaGFyLnNvdXJjZSk7XG5cbiAgLyoqIFVzZWQgdG8gbWF0Y2ggbGVhZGluZyB3aGl0ZXNwYWNlLiAqL1xuICB2YXIgcmVUcmltU3RhcnQgPSAvXlxccysvO1xuXG4gIC8qKiBVc2VkIHRvIG1hdGNoIGEgc2luZ2xlIHdoaXRlc3BhY2UgY2hhcmFjdGVyLiAqL1xuICB2YXIgcmVXaGl0ZXNwYWNlID0gL1xccy87XG5cbiAgLyoqIFVzZWQgdG8gbWF0Y2ggd3JhcCBkZXRhaWwgY29tbWVudHMuICovXG4gIHZhciByZVdyYXBDb21tZW50ID0gL1xceyg/OlxcblxcL1xcKiBcXFt3cmFwcGVkIHdpdGggLitcXF0gXFwqXFwvKT9cXG4/LyxcbiAgICAgIHJlV3JhcERldGFpbHMgPSAvXFx7XFxuXFwvXFwqIFxcW3dyYXBwZWQgd2l0aCAoLispXFxdIFxcKi8sXG4gICAgICByZVNwbGl0RGV0YWlscyA9IC8sPyAmIC87XG5cbiAgLyoqIFVzZWQgdG8gbWF0Y2ggd29yZHMgY29tcG9zZWQgb2YgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMuICovXG4gIHZhciByZUFzY2lpV29yZCA9IC9bXlxceDAwLVxceDJmXFx4M2EtXFx4NDBcXHg1Yi1cXHg2MFxceDdiLVxceDdmXSsvZztcblxuICAvKipcbiAgICogVXNlZCB0byB2YWxpZGF0ZSB0aGUgYHZhbGlkYXRlYCBvcHRpb24gaW4gYF8udGVtcGxhdGVgIHZhcmlhYmxlLlxuICAgKlxuICAgKiBGb3JiaWRzIGNoYXJhY3RlcnMgd2hpY2ggY291bGQgcG90ZW50aWFsbHkgY2hhbmdlIHRoZSBtZWFuaW5nIG9mIHRoZSBmdW5jdGlvbiBhcmd1bWVudCBkZWZpbml0aW9uOlxuICAgKiAtIFwiKCksXCIgKG1vZGlmaWNhdGlvbiBvZiBmdW5jdGlvbiBwYXJhbWV0ZXJzKVxuICAgKiAtIFwiPVwiIChkZWZhdWx0IHZhbHVlKVxuICAgKiAtIFwiW117fVwiIChkZXN0cnVjdHVyaW5nIG9mIGZ1bmN0aW9uIHBhcmFtZXRlcnMpXG4gICAqIC0gXCIvXCIgKGJlZ2lubmluZyBvZiBhIGNvbW1lbnQpXG4gICAqIC0gd2hpdGVzcGFjZVxuICAgKi9cbiAgdmFyIHJlRm9yYmlkZGVuSWRlbnRpZmllckNoYXJzID0gL1soKT0se31cXFtcXF1cXC9cXHNdLztcblxuICAvKiogVXNlZCB0byBtYXRjaCBiYWNrc2xhc2hlcyBpbiBwcm9wZXJ0eSBwYXRocy4gKi9cbiAgdmFyIHJlRXNjYXBlQ2hhciA9IC9cXFxcKFxcXFwpPy9nO1xuXG4gIC8qKlxuICAgKiBVc2VkIHRvIG1hdGNoXG4gICAqIFtFUyB0ZW1wbGF0ZSBkZWxpbWl0ZXJzXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy10ZW1wbGF0ZS1saXRlcmFsLWxleGljYWwtY29tcG9uZW50cykuXG4gICAqL1xuICB2YXIgcmVFc1RlbXBsYXRlID0gL1xcJFxceyhbXlxcXFx9XSooPzpcXFxcLlteXFxcXH1dKikqKVxcfS9nO1xuXG4gIC8qKiBVc2VkIHRvIG1hdGNoIGBSZWdFeHBgIGZsYWdzIGZyb20gdGhlaXIgY29lcmNlZCBzdHJpbmcgdmFsdWVzLiAqL1xuICB2YXIgcmVGbGFncyA9IC9cXHcqJC87XG5cbiAgLyoqIFVzZWQgdG8gZGV0ZWN0IGJhZCBzaWduZWQgaGV4YWRlY2ltYWwgc3RyaW5nIHZhbHVlcy4gKi9cbiAgdmFyIHJlSXNCYWRIZXggPSAvXlstK10weFswLTlhLWZdKyQvaTtcblxuICAvKiogVXNlZCB0byBkZXRlY3QgYmluYXJ5IHN0cmluZyB2YWx1ZXMuICovXG4gIHZhciByZUlzQmluYXJ5ID0gL14wYlswMV0rJC9pO1xuXG4gIC8qKiBVc2VkIHRvIGRldGVjdCBob3N0IGNvbnN0cnVjdG9ycyAoU2FmYXJpKS4gKi9cbiAgdmFyIHJlSXNIb3N0Q3RvciA9IC9eXFxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXFxdJC87XG5cbiAgLyoqIFVzZWQgdG8gZGV0ZWN0IG9jdGFsIHN0cmluZyB2YWx1ZXMuICovXG4gIHZhciByZUlzT2N0YWwgPSAvXjBvWzAtN10rJC9pO1xuXG4gIC8qKiBVc2VkIHRvIGRldGVjdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlcy4gKi9cbiAgdmFyIHJlSXNVaW50ID0gL14oPzowfFsxLTldXFxkKikkLztcblxuICAvKiogVXNlZCB0byBtYXRjaCBMYXRpbiBVbmljb2RlIGxldHRlcnMgKGV4Y2x1ZGluZyBtYXRoZW1hdGljYWwgb3BlcmF0b3JzKS4gKi9cbiAgdmFyIHJlTGF0aW4gPSAvW1xceGMwLVxceGQ2XFx4ZDgtXFx4ZjZcXHhmOC1cXHhmZlxcdTAxMDAtXFx1MDE3Zl0vZztcblxuICAvKiogVXNlZCB0byBlbnN1cmUgY2FwdHVyaW5nIG9yZGVyIG9mIHRlbXBsYXRlIGRlbGltaXRlcnMuICovXG4gIHZhciByZU5vTWF0Y2ggPSAvKCReKS87XG5cbiAgLyoqIFVzZWQgdG8gbWF0Y2ggdW5lc2NhcGVkIGNoYXJhY3RlcnMgaW4gY29tcGlsZWQgc3RyaW5nIGxpdGVyYWxzLiAqL1xuICB2YXIgcmVVbmVzY2FwZWRTdHJpbmcgPSAvWydcXG5cXHJcXHUyMDI4XFx1MjAyOVxcXFxdL2c7XG5cbiAgLyoqIFVzZWQgdG8gY29tcG9zZSB1bmljb2RlIGNoYXJhY3RlciBjbGFzc2VzLiAqL1xuICB2YXIgcnNBc3RyYWxSYW5nZSA9ICdcXFxcdWQ4MDAtXFxcXHVkZmZmJyxcbiAgICAgIHJzQ29tYm9NYXJrc1JhbmdlID0gJ1xcXFx1MDMwMC1cXFxcdTAzNmYnLFxuICAgICAgcmVDb21ib0hhbGZNYXJrc1JhbmdlID0gJ1xcXFx1ZmUyMC1cXFxcdWZlMmYnLFxuICAgICAgcnNDb21ib1N5bWJvbHNSYW5nZSA9ICdcXFxcdTIwZDAtXFxcXHUyMGZmJyxcbiAgICAgIHJzQ29tYm9SYW5nZSA9IHJzQ29tYm9NYXJrc1JhbmdlICsgcmVDb21ib0hhbGZNYXJrc1JhbmdlICsgcnNDb21ib1N5bWJvbHNSYW5nZSxcbiAgICAgIHJzRGluZ2JhdFJhbmdlID0gJ1xcXFx1MjcwMC1cXFxcdTI3YmYnLFxuICAgICAgcnNMb3dlclJhbmdlID0gJ2EtelxcXFx4ZGYtXFxcXHhmNlxcXFx4ZjgtXFxcXHhmZicsXG4gICAgICByc01hdGhPcFJhbmdlID0gJ1xcXFx4YWNcXFxceGIxXFxcXHhkN1xcXFx4ZjcnLFxuICAgICAgcnNOb25DaGFyUmFuZ2UgPSAnXFxcXHgwMC1cXFxceDJmXFxcXHgzYS1cXFxceDQwXFxcXHg1Yi1cXFxceDYwXFxcXHg3Yi1cXFxceGJmJyxcbiAgICAgIHJzUHVuY3R1YXRpb25SYW5nZSA9ICdcXFxcdTIwMDAtXFxcXHUyMDZmJyxcbiAgICAgIHJzU3BhY2VSYW5nZSA9ICcgXFxcXHRcXFxceDBiXFxcXGZcXFxceGEwXFxcXHVmZWZmXFxcXG5cXFxcclxcXFx1MjAyOFxcXFx1MjAyOVxcXFx1MTY4MFxcXFx1MTgwZVxcXFx1MjAwMFxcXFx1MjAwMVxcXFx1MjAwMlxcXFx1MjAwM1xcXFx1MjAwNFxcXFx1MjAwNVxcXFx1MjAwNlxcXFx1MjAwN1xcXFx1MjAwOFxcXFx1MjAwOVxcXFx1MjAwYVxcXFx1MjAyZlxcXFx1MjA1ZlxcXFx1MzAwMCcsXG4gICAgICByc1VwcGVyUmFuZ2UgPSAnQS1aXFxcXHhjMC1cXFxceGQ2XFxcXHhkOC1cXFxceGRlJyxcbiAgICAgIHJzVmFyUmFuZ2UgPSAnXFxcXHVmZTBlXFxcXHVmZTBmJyxcbiAgICAgIHJzQnJlYWtSYW5nZSA9IHJzTWF0aE9wUmFuZ2UgKyByc05vbkNoYXJSYW5nZSArIHJzUHVuY3R1YXRpb25SYW5nZSArIHJzU3BhY2VSYW5nZTtcblxuICAvKiogVXNlZCB0byBjb21wb3NlIHVuaWNvZGUgY2FwdHVyZSBncm91cHMuICovXG4gIHZhciByc0Fwb3MgPSBcIlsnXFx1MjAxOV1cIixcbiAgICAgIHJzQXN0cmFsID0gJ1snICsgcnNBc3RyYWxSYW5nZSArICddJyxcbiAgICAgIHJzQnJlYWsgPSAnWycgKyByc0JyZWFrUmFuZ2UgKyAnXScsXG4gICAgICByc0NvbWJvID0gJ1snICsgcnNDb21ib1JhbmdlICsgJ10nLFxuICAgICAgcnNEaWdpdHMgPSAnXFxcXGQrJyxcbiAgICAgIHJzRGluZ2JhdCA9ICdbJyArIHJzRGluZ2JhdFJhbmdlICsgJ10nLFxuICAgICAgcnNMb3dlciA9ICdbJyArIHJzTG93ZXJSYW5nZSArICddJyxcbiAgICAgIHJzTWlzYyA9ICdbXicgKyByc0FzdHJhbFJhbmdlICsgcnNCcmVha1JhbmdlICsgcnNEaWdpdHMgKyByc0RpbmdiYXRSYW5nZSArIHJzTG93ZXJSYW5nZSArIHJzVXBwZXJSYW5nZSArICddJyxcbiAgICAgIHJzRml0eiA9ICdcXFxcdWQ4M2NbXFxcXHVkZmZiLVxcXFx1ZGZmZl0nLFxuICAgICAgcnNNb2RpZmllciA9ICcoPzonICsgcnNDb21ibyArICd8JyArIHJzRml0eiArICcpJyxcbiAgICAgIHJzTm9uQXN0cmFsID0gJ1teJyArIHJzQXN0cmFsUmFuZ2UgKyAnXScsXG4gICAgICByc1JlZ2lvbmFsID0gJyg/OlxcXFx1ZDgzY1tcXFxcdWRkZTYtXFxcXHVkZGZmXSl7Mn0nLFxuICAgICAgcnNTdXJyUGFpciA9ICdbXFxcXHVkODAwLVxcXFx1ZGJmZl1bXFxcXHVkYzAwLVxcXFx1ZGZmZl0nLFxuICAgICAgcnNVcHBlciA9ICdbJyArIHJzVXBwZXJSYW5nZSArICddJyxcbiAgICAgIHJzWldKID0gJ1xcXFx1MjAwZCc7XG5cbiAgLyoqIFVzZWQgdG8gY29tcG9zZSB1bmljb2RlIHJlZ2V4ZXMuICovXG4gIHZhciByc01pc2NMb3dlciA9ICcoPzonICsgcnNMb3dlciArICd8JyArIHJzTWlzYyArICcpJyxcbiAgICAgIHJzTWlzY1VwcGVyID0gJyg/OicgKyByc1VwcGVyICsgJ3wnICsgcnNNaXNjICsgJyknLFxuICAgICAgcnNPcHRDb250ckxvd2VyID0gJyg/OicgKyByc0Fwb3MgKyAnKD86ZHxsbHxtfHJlfHN8dHx2ZSkpPycsXG4gICAgICByc09wdENvbnRyVXBwZXIgPSAnKD86JyArIHJzQXBvcyArICcoPzpEfExMfE18UkV8U3xUfFZFKSk/JyxcbiAgICAgIHJlT3B0TW9kID0gcnNNb2RpZmllciArICc/JyxcbiAgICAgIHJzT3B0VmFyID0gJ1snICsgcnNWYXJSYW5nZSArICddPycsXG4gICAgICByc09wdEpvaW4gPSAnKD86JyArIHJzWldKICsgJyg/OicgKyBbcnNOb25Bc3RyYWwsIHJzUmVnaW9uYWwsIHJzU3VyclBhaXJdLmpvaW4oJ3wnKSArICcpJyArIHJzT3B0VmFyICsgcmVPcHRNb2QgKyAnKSonLFxuICAgICAgcnNPcmRMb3dlciA9ICdcXFxcZCooPzoxc3R8Mm5kfDNyZHwoPyFbMTIzXSlcXFxcZHRoKSg/PVxcXFxifFtBLVpfXSknLFxuICAgICAgcnNPcmRVcHBlciA9ICdcXFxcZCooPzoxU1R8Mk5EfDNSRHwoPyFbMTIzXSlcXFxcZFRIKSg/PVxcXFxifFthLXpfXSknLFxuICAgICAgcnNTZXEgPSByc09wdFZhciArIHJlT3B0TW9kICsgcnNPcHRKb2luLFxuICAgICAgcnNFbW9qaSA9ICcoPzonICsgW3JzRGluZ2JhdCwgcnNSZWdpb25hbCwgcnNTdXJyUGFpcl0uam9pbignfCcpICsgJyknICsgcnNTZXEsXG4gICAgICByc1N5bWJvbCA9ICcoPzonICsgW3JzTm9uQXN0cmFsICsgcnNDb21ibyArICc/JywgcnNDb21ibywgcnNSZWdpb25hbCwgcnNTdXJyUGFpciwgcnNBc3RyYWxdLmpvaW4oJ3wnKSArICcpJztcblxuICAvKiogVXNlZCB0byBtYXRjaCBhcG9zdHJvcGhlcy4gKi9cbiAgdmFyIHJlQXBvcyA9IFJlZ0V4cChyc0Fwb3MsICdnJyk7XG5cbiAgLyoqXG4gICAqIFVzZWQgdG8gbWF0Y2ggW2NvbWJpbmluZyBkaWFjcml0aWNhbCBtYXJrc10oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ29tYmluaW5nX0RpYWNyaXRpY2FsX01hcmtzKSBhbmRcbiAgICogW2NvbWJpbmluZyBkaWFjcml0aWNhbCBtYXJrcyBmb3Igc3ltYm9sc10oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ29tYmluaW5nX0RpYWNyaXRpY2FsX01hcmtzX2Zvcl9TeW1ib2xzKS5cbiAgICovXG4gIHZhciByZUNvbWJvTWFyayA9IFJlZ0V4cChyc0NvbWJvLCAnZycpO1xuXG4gIC8qKiBVc2VkIHRvIG1hdGNoIFtzdHJpbmcgc3ltYm9sc10oaHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtdW5pY29kZSkuICovXG4gIHZhciByZVVuaWNvZGUgPSBSZWdFeHAocnNGaXR6ICsgJyg/PScgKyByc0ZpdHogKyAnKXwnICsgcnNTeW1ib2wgKyByc1NlcSwgJ2cnKTtcblxuICAvKiogVXNlZCB0byBtYXRjaCBjb21wbGV4IG9yIGNvbXBvdW5kIHdvcmRzLiAqL1xuICB2YXIgcmVVbmljb2RlV29yZCA9IFJlZ0V4cChbXG4gICAgcnNVcHBlciArICc/JyArIHJzTG93ZXIgKyAnKycgKyByc09wdENvbnRyTG93ZXIgKyAnKD89JyArIFtyc0JyZWFrLCByc1VwcGVyLCAnJCddLmpvaW4oJ3wnKSArICcpJyxcbiAgICByc01pc2NVcHBlciArICcrJyArIHJzT3B0Q29udHJVcHBlciArICcoPz0nICsgW3JzQnJlYWssIHJzVXBwZXIgKyByc01pc2NMb3dlciwgJyQnXS5qb2luKCd8JykgKyAnKScsXG4gICAgcnNVcHBlciArICc/JyArIHJzTWlzY0xvd2VyICsgJysnICsgcnNPcHRDb250ckxvd2VyLFxuICAgIHJzVXBwZXIgKyAnKycgKyByc09wdENvbnRyVXBwZXIsXG4gICAgcnNPcmRVcHBlcixcbiAgICByc09yZExvd2VyLFxuICAgIHJzRGlnaXRzLFxuICAgIHJzRW1vamlcbiAgXS5qb2luKCd8JyksICdnJyk7XG5cbiAgLyoqIFVzZWQgdG8gZGV0ZWN0IHN0cmluZ3Mgd2l0aCBbemVyby13aWR0aCBqb2luZXJzIG9yIGNvZGUgcG9pbnRzIGZyb20gdGhlIGFzdHJhbCBwbGFuZXNdKGh0dHA6Ly9lZXYuZWUvYmxvZy8yMDE1LzA5LzEyL2RhcmstY29ybmVycy1vZi11bmljb2RlLykuICovXG4gIHZhciByZUhhc1VuaWNvZGUgPSBSZWdFeHAoJ1snICsgcnNaV0ogKyByc0FzdHJhbFJhbmdlICArIHJzQ29tYm9SYW5nZSArIHJzVmFyUmFuZ2UgKyAnXScpO1xuXG4gIC8qKiBVc2VkIHRvIGRldGVjdCBzdHJpbmdzIHRoYXQgbmVlZCBhIG1vcmUgcm9idXN0IHJlZ2V4cCB0byBtYXRjaCB3b3Jkcy4gKi9cbiAgdmFyIHJlSGFzVW5pY29kZVdvcmQgPSAvW2Etel1bQS1aXXxbQS1aXXsyfVthLXpdfFswLTldW2EtekEtWl18W2EtekEtWl1bMC05XXxbXmEtekEtWjAtOSBdLztcblxuICAvKiogVXNlZCB0byBhc3NpZ24gZGVmYXVsdCBgY29udGV4dGAgb2JqZWN0IHByb3BlcnRpZXMuICovXG4gIHZhciBjb250ZXh0UHJvcHMgPSBbXG4gICAgJ0FycmF5JywgJ0J1ZmZlcicsICdEYXRhVmlldycsICdEYXRlJywgJ0Vycm9yJywgJ0Zsb2F0MzJBcnJheScsICdGbG9hdDY0QXJyYXknLFxuICAgICdGdW5jdGlvbicsICdJbnQ4QXJyYXknLCAnSW50MTZBcnJheScsICdJbnQzMkFycmF5JywgJ01hcCcsICdNYXRoJywgJ09iamVjdCcsXG4gICAgJ1Byb21pc2UnLCAnUmVnRXhwJywgJ1NldCcsICdTdHJpbmcnLCAnU3ltYm9sJywgJ1R5cGVFcnJvcicsICdVaW50OEFycmF5JyxcbiAgICAnVWludDhDbGFtcGVkQXJyYXknLCAnVWludDE2QXJyYXknLCAnVWludDMyQXJyYXknLCAnV2Vha01hcCcsXG4gICAgJ18nLCAnY2xlYXJUaW1lb3V0JywgJ2lzRmluaXRlJywgJ3BhcnNlSW50JywgJ3NldFRpbWVvdXQnXG4gIF07XG5cbiAgLyoqIFVzZWQgdG8gbWFrZSB0ZW1wbGF0ZSBzb3VyY2VVUkxzIGVhc2llciB0byBpZGVudGlmeS4gKi9cbiAgdmFyIHRlbXBsYXRlQ291bnRlciA9IC0xO1xuXG4gIC8qKiBVc2VkIHRvIGlkZW50aWZ5IGB0b1N0cmluZ1RhZ2AgdmFsdWVzIG9mIHR5cGVkIGFycmF5cy4gKi9cbiAgdmFyIHR5cGVkQXJyYXlUYWdzID0ge307XG4gIHR5cGVkQXJyYXlUYWdzW2Zsb2F0MzJUYWddID0gdHlwZWRBcnJheVRhZ3NbZmxvYXQ2NFRhZ10gPVxuICB0eXBlZEFycmF5VGFnc1tpbnQ4VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2ludDE2VGFnXSA9XG4gIHR5cGVkQXJyYXlUYWdzW2ludDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQ4VGFnXSA9XG4gIHR5cGVkQXJyYXlUYWdzW3VpbnQ4Q2xhbXBlZFRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50MTZUYWddID1cbiAgdHlwZWRBcnJheVRhZ3NbdWludDMyVGFnXSA9IHRydWU7XG4gIHR5cGVkQXJyYXlUYWdzW2FyZ3NUYWddID0gdHlwZWRBcnJheVRhZ3NbYXJyYXlUYWddID1cbiAgdHlwZWRBcnJheVRhZ3NbYXJyYXlCdWZmZXJUYWddID0gdHlwZWRBcnJheVRhZ3NbYm9vbFRhZ10gPVxuICB0eXBlZEFycmF5VGFnc1tkYXRhVmlld1RhZ10gPSB0eXBlZEFycmF5VGFnc1tkYXRlVGFnXSA9XG4gIHR5cGVkQXJyYXlUYWdzW2Vycm9yVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Z1bmNUYWddID1cbiAgdHlwZWRBcnJheVRhZ3NbbWFwVGFnXSA9IHR5cGVkQXJyYXlUYWdzW251bWJlclRhZ10gPVxuICB0eXBlZEFycmF5VGFnc1tvYmplY3RUYWddID0gdHlwZWRBcnJheVRhZ3NbcmVnZXhwVGFnXSA9XG4gIHR5cGVkQXJyYXlUYWdzW3NldFRhZ10gPSB0eXBlZEFycmF5VGFnc1tzdHJpbmdUYWddID1cbiAgdHlwZWRBcnJheVRhZ3Nbd2Vha01hcFRhZ10gPSBmYWxzZTtcblxuICAvKiogVXNlZCB0byBpZGVudGlmeSBgdG9TdHJpbmdUYWdgIHZhbHVlcyBzdXBwb3J0ZWQgYnkgYF8uY2xvbmVgLiAqL1xuICB2YXIgY2xvbmVhYmxlVGFncyA9IHt9O1xuICBjbG9uZWFibGVUYWdzW2FyZ3NUYWddID0gY2xvbmVhYmxlVGFnc1thcnJheVRhZ10gPVxuICBjbG9uZWFibGVUYWdzW2FycmF5QnVmZmVyVGFnXSA9IGNsb25lYWJsZVRhZ3NbZGF0YVZpZXdUYWddID1cbiAgY2xvbmVhYmxlVGFnc1tib29sVGFnXSA9IGNsb25lYWJsZVRhZ3NbZGF0ZVRhZ10gPVxuICBjbG9uZWFibGVUYWdzW2Zsb2F0MzJUYWddID0gY2xvbmVhYmxlVGFnc1tmbG9hdDY0VGFnXSA9XG4gIGNsb25lYWJsZVRhZ3NbaW50OFRhZ10gPSBjbG9uZWFibGVUYWdzW2ludDE2VGFnXSA9XG4gIGNsb25lYWJsZVRhZ3NbaW50MzJUYWddID0gY2xvbmVhYmxlVGFnc1ttYXBUYWddID1cbiAgY2xvbmVhYmxlVGFnc1tudW1iZXJUYWddID0gY2xvbmVhYmxlVGFnc1tvYmplY3RUYWddID1cbiAgY2xvbmVhYmxlVGFnc1tyZWdleHBUYWddID0gY2xvbmVhYmxlVGFnc1tzZXRUYWddID1cbiAgY2xvbmVhYmxlVGFnc1tzdHJpbmdUYWddID0gY2xvbmVhYmxlVGFnc1tzeW1ib2xUYWddID1cbiAgY2xvbmVhYmxlVGFnc1t1aW50OFRhZ10gPSBjbG9uZWFibGVUYWdzW3VpbnQ4Q2xhbXBlZFRhZ10gPVxuICBjbG9uZWFibGVUYWdzW3VpbnQxNlRhZ10gPSBjbG9uZWFibGVUYWdzW3VpbnQzMlRhZ10gPSB0cnVlO1xuICBjbG9uZWFibGVUYWdzW2Vycm9yVGFnXSA9IGNsb25lYWJsZVRhZ3NbZnVuY1RhZ10gPVxuICBjbG9uZWFibGVUYWdzW3dlYWtNYXBUYWddID0gZmFsc2U7XG5cbiAgLyoqIFVzZWQgdG8gbWFwIExhdGluIFVuaWNvZGUgbGV0dGVycyB0byBiYXNpYyBMYXRpbiBsZXR0ZXJzLiAqL1xuICB2YXIgZGVidXJyZWRMZXR0ZXJzID0ge1xuICAgIC8vIExhdGluLTEgU3VwcGxlbWVudCBibG9jay5cbiAgICAnXFx4YzAnOiAnQScsICAnXFx4YzEnOiAnQScsICdcXHhjMic6ICdBJywgJ1xceGMzJzogJ0EnLCAnXFx4YzQnOiAnQScsICdcXHhjNSc6ICdBJyxcbiAgICAnXFx4ZTAnOiAnYScsICAnXFx4ZTEnOiAnYScsICdcXHhlMic6ICdhJywgJ1xceGUzJzogJ2EnLCAnXFx4ZTQnOiAnYScsICdcXHhlNSc6ICdhJyxcbiAgICAnXFx4YzcnOiAnQycsICAnXFx4ZTcnOiAnYycsXG4gICAgJ1xceGQwJzogJ0QnLCAgJ1xceGYwJzogJ2QnLFxuICAgICdcXHhjOCc6ICdFJywgICdcXHhjOSc6ICdFJywgJ1xceGNhJzogJ0UnLCAnXFx4Y2InOiAnRScsXG4gICAgJ1xceGU4JzogJ2UnLCAgJ1xceGU5JzogJ2UnLCAnXFx4ZWEnOiAnZScsICdcXHhlYic6ICdlJyxcbiAgICAnXFx4Y2MnOiAnSScsICAnXFx4Y2QnOiAnSScsICdcXHhjZSc6ICdJJywgJ1xceGNmJzogJ0knLFxuICAgICdcXHhlYyc6ICdpJywgICdcXHhlZCc6ICdpJywgJ1xceGVlJzogJ2knLCAnXFx4ZWYnOiAnaScsXG4gICAgJ1xceGQxJzogJ04nLCAgJ1xceGYxJzogJ24nLFxuICAgICdcXHhkMic6ICdPJywgICdcXHhkMyc6ICdPJywgJ1xceGQ0JzogJ08nLCAnXFx4ZDUnOiAnTycsICdcXHhkNic6ICdPJywgJ1xceGQ4JzogJ08nLFxuICAgICdcXHhmMic6ICdvJywgICdcXHhmMyc6ICdvJywgJ1xceGY0JzogJ28nLCAnXFx4ZjUnOiAnbycsICdcXHhmNic6ICdvJywgJ1xceGY4JzogJ28nLFxuICAgICdcXHhkOSc6ICdVJywgICdcXHhkYSc6ICdVJywgJ1xceGRiJzogJ1UnLCAnXFx4ZGMnOiAnVScsXG4gICAgJ1xceGY5JzogJ3UnLCAgJ1xceGZhJzogJ3UnLCAnXFx4ZmInOiAndScsICdcXHhmYyc6ICd1JyxcbiAgICAnXFx4ZGQnOiAnWScsICAnXFx4ZmQnOiAneScsICdcXHhmZic6ICd5JyxcbiAgICAnXFx4YzYnOiAnQWUnLCAnXFx4ZTYnOiAnYWUnLFxuICAgICdcXHhkZSc6ICdUaCcsICdcXHhmZSc6ICd0aCcsXG4gICAgJ1xceGRmJzogJ3NzJyxcbiAgICAvLyBMYXRpbiBFeHRlbmRlZC1BIGJsb2NrLlxuICAgICdcXHUwMTAwJzogJ0EnLCAgJ1xcdTAxMDInOiAnQScsICdcXHUwMTA0JzogJ0EnLFxuICAgICdcXHUwMTAxJzogJ2EnLCAgJ1xcdTAxMDMnOiAnYScsICdcXHUwMTA1JzogJ2EnLFxuICAgICdcXHUwMTA2JzogJ0MnLCAgJ1xcdTAxMDgnOiAnQycsICdcXHUwMTBhJzogJ0MnLCAnXFx1MDEwYyc6ICdDJyxcbiAgICAnXFx1MDEwNyc6ICdjJywgICdcXHUwMTA5JzogJ2MnLCAnXFx1MDEwYic6ICdjJywgJ1xcdTAxMGQnOiAnYycsXG4gICAgJ1xcdTAxMGUnOiAnRCcsICAnXFx1MDExMCc6ICdEJywgJ1xcdTAxMGYnOiAnZCcsICdcXHUwMTExJzogJ2QnLFxuICAgICdcXHUwMTEyJzogJ0UnLCAgJ1xcdTAxMTQnOiAnRScsICdcXHUwMTE2JzogJ0UnLCAnXFx1MDExOCc6ICdFJywgJ1xcdTAxMWEnOiAnRScsXG4gICAgJ1xcdTAxMTMnOiAnZScsICAnXFx1MDExNSc6ICdlJywgJ1xcdTAxMTcnOiAnZScsICdcXHUwMTE5JzogJ2UnLCAnXFx1MDExYic6ICdlJyxcbiAgICAnXFx1MDExYyc6ICdHJywgICdcXHUwMTFlJzogJ0cnLCAnXFx1MDEyMCc6ICdHJywgJ1xcdTAxMjInOiAnRycsXG4gICAgJ1xcdTAxMWQnOiAnZycsICAnXFx1MDExZic6ICdnJywgJ1xcdTAxMjEnOiAnZycsICdcXHUwMTIzJzogJ2cnLFxuICAgICdcXHUwMTI0JzogJ0gnLCAgJ1xcdTAxMjYnOiAnSCcsICdcXHUwMTI1JzogJ2gnLCAnXFx1MDEyNyc6ICdoJyxcbiAgICAnXFx1MDEyOCc6ICdJJywgICdcXHUwMTJhJzogJ0knLCAnXFx1MDEyYyc6ICdJJywgJ1xcdTAxMmUnOiAnSScsICdcXHUwMTMwJzogJ0knLFxuICAgICdcXHUwMTI5JzogJ2knLCAgJ1xcdTAxMmInOiAnaScsICdcXHUwMTJkJzogJ2knLCAnXFx1MDEyZic6ICdpJywgJ1xcdTAxMzEnOiAnaScsXG4gICAgJ1xcdTAxMzQnOiAnSicsICAnXFx1MDEzNSc6ICdqJyxcbiAgICAnXFx1MDEzNic6ICdLJywgICdcXHUwMTM3JzogJ2snLCAnXFx1MDEzOCc6ICdrJyxcbiAgICAnXFx1MDEzOSc6ICdMJywgICdcXHUwMTNiJzogJ0wnLCAnXFx1MDEzZCc6ICdMJywgJ1xcdTAxM2YnOiAnTCcsICdcXHUwMTQxJzogJ0wnLFxuICAgICdcXHUwMTNhJzogJ2wnLCAgJ1xcdTAxM2MnOiAnbCcsICdcXHUwMTNlJzogJ2wnLCAnXFx1MDE0MCc6ICdsJywgJ1xcdTAxNDInOiAnbCcsXG4gICAgJ1xcdTAxNDMnOiAnTicsICAnXFx1MDE0NSc6ICdOJywgJ1xcdTAxNDcnOiAnTicsICdcXHUwMTRhJzogJ04nLFxuICAgICdcXHUwMTQ0JzogJ24nLCAgJ1xcdTAxNDYnOiAnbicsICdcXHUwMTQ4JzogJ24nLCAnXFx1MDE0Yic6ICduJyxcbiAgICAnXFx1MDE0Yyc6ICdPJywgICdcXHUwMTRlJzogJ08nLCAnXFx1MDE1MCc6ICdPJyxcbiAgICAnXFx1MDE0ZCc6ICdvJywgICdcXHUwMTRmJzogJ28nLCAnXFx1MDE1MSc6ICdvJyxcbiAgICAnXFx1MDE1NCc6ICdSJywgICdcXHUwMTU2JzogJ1InLCAnXFx1MDE1OCc6ICdSJyxcbiAgICAnXFx1MDE1NSc6ICdyJywgICdcXHUwMTU3JzogJ3InLCAnXFx1MDE1OSc6ICdyJyxcbiAgICAnXFx1MDE1YSc6ICdTJywgICdcXHUwMTVjJzogJ1MnLCAnXFx1MDE1ZSc6ICdTJywgJ1xcdTAxNjAnOiAnUycsXG4gICAgJ1xcdTAxNWInOiAncycsICAnXFx1MDE1ZCc6ICdzJywgJ1xcdTAxNWYnOiAncycsICdcXHUwMTYxJzogJ3MnLFxuICAgICdcXHUwMTYyJzogJ1QnLCAgJ1xcdTAxNjQnOiAnVCcsICdcXHUwMTY2JzogJ1QnLFxuICAgICdcXHUwMTYzJzogJ3QnLCAgJ1xcdTAxNjUnOiAndCcsICdcXHUwMTY3JzogJ3QnLFxuICAgICdcXHUwMTY4JzogJ1UnLCAgJ1xcdTAxNmEnOiAnVScsICdcXHUwMTZjJzogJ1UnLCAnXFx1MDE2ZSc6ICdVJywgJ1xcdTAxNzAnOiAnVScsICdcXHUwMTcyJzogJ1UnLFxuICAgICdcXHUwMTY5JzogJ3UnLCAgJ1xcdTAxNmInOiAndScsICdcXHUwMTZkJzogJ3UnLCAnXFx1MDE2Zic6ICd1JywgJ1xcdTAxNzEnOiAndScsICdcXHUwMTczJzogJ3UnLFxuICAgICdcXHUwMTc0JzogJ1cnLCAgJ1xcdTAxNzUnOiAndycsXG4gICAgJ1xcdTAxNzYnOiAnWScsICAnXFx1MDE3Nyc6ICd5JywgJ1xcdTAxNzgnOiAnWScsXG4gICAgJ1xcdTAxNzknOiAnWicsICAnXFx1MDE3Yic6ICdaJywgJ1xcdTAxN2QnOiAnWicsXG4gICAgJ1xcdTAxN2EnOiAneicsICAnXFx1MDE3Yyc6ICd6JywgJ1xcdTAxN2UnOiAneicsXG4gICAgJ1xcdTAxMzInOiAnSUonLCAnXFx1MDEzMyc6ICdpaicsXG4gICAgJ1xcdTAxNTInOiAnT2UnLCAnXFx1MDE1Myc6ICdvZScsXG4gICAgJ1xcdTAxNDknOiBcIiduXCIsICdcXHUwMTdmJzogJ3MnXG4gIH07XG5cbiAgLyoqIFVzZWQgdG8gbWFwIGNoYXJhY3RlcnMgdG8gSFRNTCBlbnRpdGllcy4gKi9cbiAgdmFyIGh0bWxFc2NhcGVzID0ge1xuICAgICcmJzogJyZhbXA7JyxcbiAgICAnPCc6ICcmbHQ7JyxcbiAgICAnPic6ICcmZ3Q7JyxcbiAgICAnXCInOiAnJnF1b3Q7JyxcbiAgICBcIidcIjogJyYjMzk7J1xuICB9O1xuXG4gIC8qKiBVc2VkIHRvIG1hcCBIVE1MIGVudGl0aWVzIHRvIGNoYXJhY3RlcnMuICovXG4gIHZhciBodG1sVW5lc2NhcGVzID0ge1xuICAgICcmYW1wOyc6ICcmJyxcbiAgICAnJmx0Oyc6ICc8JyxcbiAgICAnJmd0Oyc6ICc+JyxcbiAgICAnJnF1b3Q7JzogJ1wiJyxcbiAgICAnJiMzOTsnOiBcIidcIlxuICB9O1xuXG4gIC8qKiBVc2VkIHRvIGVzY2FwZSBjaGFyYWN0ZXJzIGZvciBpbmNsdXNpb24gaW4gY29tcGlsZWQgc3RyaW5nIGxpdGVyYWxzLiAqL1xuICB2YXIgc3RyaW5nRXNjYXBlcyA9IHtcbiAgICAnXFxcXCc6ICdcXFxcJyxcbiAgICBcIidcIjogXCInXCIsXG4gICAgJ1xcbic6ICduJyxcbiAgICAnXFxyJzogJ3InLFxuICAgICdcXHUyMDI4JzogJ3UyMDI4JyxcbiAgICAnXFx1MjAyOSc6ICd1MjAyOSdcbiAgfTtcblxuICAvKiogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgd2l0aG91dCBhIGRlcGVuZGVuY3kgb24gYHJvb3RgLiAqL1xuICB2YXIgZnJlZVBhcnNlRmxvYXQgPSBwYXJzZUZsb2F0LFxuICAgICAgZnJlZVBhcnNlSW50ID0gcGFyc2VJbnQ7XG5cbiAgLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBnbG9iYWxgIGZyb20gTm9kZS5qcy4gKi9cbiAgdmFyIGZyZWVHbG9iYWwgPSB0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCAmJiBnbG9iYWwuT2JqZWN0ID09PSBPYmplY3QgJiYgZ2xvYmFsO1xuXG4gIC8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgc2VsZmAuICovXG4gIHZhciBmcmVlU2VsZiA9IHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYgJiYgc2VsZi5PYmplY3QgPT09IE9iamVjdCAmJiBzZWxmO1xuXG4gIC8qKiBVc2VkIGFzIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWwgb2JqZWN0LiAqL1xuICB2YXIgcm9vdCA9IGZyZWVHbG9iYWwgfHwgZnJlZVNlbGYgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblxuICAvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xuICB2YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbiAgLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLiAqL1xuICB2YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4gIC8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXG4gIHZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzO1xuXG4gIC8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgcHJvY2Vzc2AgZnJvbSBOb2RlLmpzLiAqL1xuICB2YXIgZnJlZVByb2Nlc3MgPSBtb2R1bGVFeHBvcnRzICYmIGZyZWVHbG9iYWwucHJvY2VzcztcblxuICAvKiogVXNlZCB0byBhY2Nlc3MgZmFzdGVyIE5vZGUuanMgaGVscGVycy4gKi9cbiAgdmFyIG5vZGVVdGlsID0gKGZ1bmN0aW9uKCkge1xuICAgIHRyeSB7XG4gICAgICAvLyBVc2UgYHV0aWwudHlwZXNgIGZvciBOb2RlLmpzIDEwKy5cbiAgICAgIHZhciB0eXBlcyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5yZXF1aXJlICYmIGZyZWVNb2R1bGUucmVxdWlyZSgndXRpbCcpLnR5cGVzO1xuXG4gICAgICBpZiAodHlwZXMpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVzO1xuICAgICAgfVxuXG4gICAgICAvLyBMZWdhY3kgYHByb2Nlc3MuYmluZGluZygndXRpbCcpYCBmb3IgTm9kZS5qcyA8IDEwLlxuICAgICAgcmV0dXJuIGZyZWVQcm9jZXNzICYmIGZyZWVQcm9jZXNzLmJpbmRpbmcgJiYgZnJlZVByb2Nlc3MuYmluZGluZygndXRpbCcpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gIH0oKSk7XG5cbiAgLyogTm9kZS5qcyBoZWxwZXIgcmVmZXJlbmNlcy4gKi9cbiAgdmFyIG5vZGVJc0FycmF5QnVmZmVyID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNBcnJheUJ1ZmZlcixcbiAgICAgIG5vZGVJc0RhdGUgPSBub2RlVXRpbCAmJiBub2RlVXRpbC5pc0RhdGUsXG4gICAgICBub2RlSXNNYXAgPSBub2RlVXRpbCAmJiBub2RlVXRpbC5pc01hcCxcbiAgICAgIG5vZGVJc1JlZ0V4cCA9IG5vZGVVdGlsICYmIG5vZGVVdGlsLmlzUmVnRXhwLFxuICAgICAgbm9kZUlzU2V0ID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNTZXQsXG4gICAgICBub2RlSXNUeXBlZEFycmF5ID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNUeXBlZEFycmF5O1xuXG4gIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gIC8qKlxuICAgKiBBIGZhc3RlciBhbHRlcm5hdGl2ZSB0byBgRnVuY3Rpb24jYXBwbHlgLCB0aGlzIGZ1bmN0aW9uIGludm9rZXMgYGZ1bmNgXG4gICAqIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIGB0aGlzQXJnYCBhbmQgdGhlIGFyZ3VtZW50cyBvZiBgYXJnc2AuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGludm9rZS5cbiAgICogQHBhcmFtIHsqfSB0aGlzQXJnIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gICAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MgVGhlIGFyZ3VtZW50cyB0byBpbnZva2UgYGZ1bmNgIHdpdGguXG4gICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXN1bHQgb2YgYGZ1bmNgLlxuICAgKi9cbiAgZnVuY3Rpb24gYXBwbHkoZnVuYywgdGhpc0FyZywgYXJncykge1xuICAgIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICAgIGNhc2UgMDogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnKTtcbiAgICAgIGNhc2UgMTogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdKTtcbiAgICAgIGNhc2UgMjogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICAgIGNhc2UgMzogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpc0FyZywgYXJncyk7XG4gIH1cblxuICAvKipcbiAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlQWdncmVnYXRvcmAgZm9yIGFycmF5cy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBzZXR0ZXIgVGhlIGZ1bmN0aW9uIHRvIHNldCBgYWNjdW11bGF0b3JgIHZhbHVlcy5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGl0ZXJhdGVlIHRvIHRyYW5zZm9ybSBrZXlzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gYWNjdW11bGF0b3IgVGhlIGluaXRpYWwgYWdncmVnYXRlZCBvYmplY3QuXG4gICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgYWNjdW11bGF0b3JgLlxuICAgKi9cbiAgZnVuY3Rpb24gYXJyYXlBZ2dyZWdhdG9yKGFycmF5LCBzZXR0ZXIsIGl0ZXJhdGVlLCBhY2N1bXVsYXRvcikge1xuICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcblxuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF07XG4gICAgICBzZXR0ZXIoYWNjdW11bGF0b3IsIHZhbHVlLCBpdGVyYXRlZSh2YWx1ZSksIGFycmF5KTtcbiAgICB9XG4gICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5mb3JFYWNoYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAgICogaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAgICovXG4gIGZ1bmN0aW9uIGFycmF5RWFjaChhcnJheSwgaXRlcmF0ZWUpIHtcbiAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG5cbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgaWYgKGl0ZXJhdGVlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSA9PT0gZmFsc2UpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhcnJheTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uZm9yRWFjaFJpZ2h0YCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAgICogaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAgICovXG4gIGZ1bmN0aW9uIGFycmF5RWFjaFJpZ2h0KGFycmF5LCBpdGVyYXRlZSkge1xuICAgIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcblxuICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgaWYgKGl0ZXJhdGVlKGFycmF5W2xlbmd0aF0sIGxlbmd0aCwgYXJyYXkpID09PSBmYWxzZSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFycmF5O1xuICB9XG5cbiAgLyoqXG4gICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5ldmVyeWAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yXG4gICAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbGwgZWxlbWVudHMgcGFzcyB0aGUgcHJlZGljYXRlIGNoZWNrLFxuICAgKiAgZWxzZSBgZmFsc2VgLlxuICAgKi9cbiAgZnVuY3Rpb24gYXJyYXlFdmVyeShhcnJheSwgcHJlZGljYXRlKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGlmICghcHJlZGljYXRlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5maWx0ZXJgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvclxuICAgKiBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmaWx0ZXJlZCBhcnJheS5cbiAgICovXG4gIGZ1bmN0aW9uIGFycmF5RmlsdGVyKGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGgsXG4gICAgICAgIHJlc0luZGV4ID0gMCxcbiAgICAgICAgcmVzdWx0ID0gW107XG5cbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xuICAgICAgaWYgKHByZWRpY2F0ZSh2YWx1ZSwgaW5kZXgsIGFycmF5KSkge1xuICAgICAgICByZXN1bHRbcmVzSW5kZXgrK10gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uaW5jbHVkZXNgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvclxuICAgKiBzcGVjaWZ5aW5nIGFuIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgKiBAcGFyYW0geyp9IHRhcmdldCBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB0YXJnZXRgIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gICAqL1xuICBmdW5jdGlvbiBhcnJheUluY2x1ZGVzKGFycmF5LCB2YWx1ZSkge1xuICAgIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgICByZXR1cm4gISFsZW5ndGggJiYgYmFzZUluZGV4T2YoYXJyYXksIHZhbHVlLCAwKSA+IC0xO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgZnVuY3Rpb24gaXMgbGlrZSBgYXJyYXlJbmNsdWRlc2AgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBhIGNvbXBhcmF0b3IuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAqIEBwYXJhbSB7Kn0gdGFyZ2V0IFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjb21wYXJhdG9yIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdGFyZ2V0YCBpcyBmb3VuZCwgZWxzZSBgZmFsc2VgLlxuICAgKi9cbiAgZnVuY3Rpb24gYXJyYXlJbmNsdWRlc1dpdGgoYXJyYXksIHZhbHVlLCBjb21wYXJhdG9yKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGlmIChjb21wYXJhdG9yKHZhbHVlLCBhcnJheVtpbmRleF0pKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLm1hcGAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlXG4gICAqIHNob3J0aGFuZHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgbWFwcGVkIGFycmF5LlxuICAgKi9cbiAgZnVuY3Rpb24gYXJyYXlNYXAoYXJyYXksIGl0ZXJhdGVlKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoLFxuICAgICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIHJlc3VsdFtpbmRleF0gPSBpdGVyYXRlZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogQXBwZW5kcyB0aGUgZWxlbWVudHMgb2YgYHZhbHVlc2AgdG8gYGFycmF5YC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIG1vZGlmeS5cbiAgICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gYXBwZW5kLlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAgICovXG4gIGZ1bmN0aW9uIGFycmF5UHVzaChhcnJheSwgdmFsdWVzKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IHZhbHVlcy5sZW5ndGgsXG4gICAgICAgIG9mZnNldCA9IGFycmF5Lmxlbmd0aDtcblxuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICBhcnJheVtvZmZzZXQgKyBpbmRleF0gPSB2YWx1ZXNbaW5kZXhdO1xuICAgIH1cbiAgICByZXR1cm4gYXJyYXk7XG4gIH1cblxuICAvKipcbiAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLnJlZHVjZWAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yXG4gICAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICogQHBhcmFtIHsqfSBbYWNjdW11bGF0b3JdIFRoZSBpbml0aWFsIHZhbHVlLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpbml0QWNjdW1dIFNwZWNpZnkgdXNpbmcgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYGFycmF5YCBhc1xuICAgKiAgdGhlIGluaXRpYWwgdmFsdWUuXG4gICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBhY2N1bXVsYXRlZCB2YWx1ZS5cbiAgICovXG4gIGZ1bmN0aW9uIGFycmF5UmVkdWNlKGFycmF5LCBpdGVyYXRlZSwgYWNjdW11bGF0b3IsIGluaXRBY2N1bSkge1xuICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcblxuICAgIGlmIChpbml0QWNjdW0gJiYgbGVuZ3RoKSB7XG4gICAgICBhY2N1bXVsYXRvciA9IGFycmF5WysraW5kZXhdO1xuICAgIH1cbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgYWNjdW11bGF0b3IgPSBpdGVyYXRlZShhY2N1bXVsYXRvciwgYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpO1xuICAgIH1cbiAgICByZXR1cm4gYWNjdW11bGF0b3I7XG4gIH1cblxuICAvKipcbiAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLnJlZHVjZVJpZ2h0YCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAgICogaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgKiBAcGFyYW0geyp9IFthY2N1bXVsYXRvcl0gVGhlIGluaXRpYWwgdmFsdWUuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2luaXRBY2N1bV0gU3BlY2lmeSB1c2luZyB0aGUgbGFzdCBlbGVtZW50IG9mIGBhcnJheWAgYXNcbiAgICogIHRoZSBpbml0aWFsIHZhbHVlLlxuICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgYWNjdW11bGF0ZWQgdmFsdWUuXG4gICAqL1xuICBmdW5jdGlvbiBhcnJheVJlZHVjZVJpZ2h0KGFycmF5LCBpdGVyYXRlZSwgYWNjdW11bGF0b3IsIGluaXRBY2N1bSkge1xuICAgIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgICBpZiAoaW5pdEFjY3VtICYmIGxlbmd0aCkge1xuICAgICAgYWNjdW11bGF0b3IgPSBhcnJheVstLWxlbmd0aF07XG4gICAgfVxuICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgYWNjdW11bGF0b3IgPSBpdGVyYXRlZShhY2N1bXVsYXRvciwgYXJyYXlbbGVuZ3RoXSwgbGVuZ3RoLCBhcnJheSk7XG4gICAgfVxuICAgIHJldHVybiBhY2N1bXVsYXRvcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uc29tZWAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlXG4gICAqIHNob3J0aGFuZHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbnkgZWxlbWVudCBwYXNzZXMgdGhlIHByZWRpY2F0ZSBjaGVjayxcbiAgICogIGVsc2UgYGZhbHNlYC5cbiAgICovXG4gIGZ1bmN0aW9uIGFycmF5U29tZShhcnJheSwgcHJlZGljYXRlKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGlmIChwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgc2l6ZSBvZiBhbiBBU0NJSSBgc3RyaW5nYC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIGluc3BlY3QuXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHN0cmluZyBzaXplLlxuICAgKi9cbiAgdmFyIGFzY2lpU2l6ZSA9IGJhc2VQcm9wZXJ0eSgnbGVuZ3RoJyk7XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIGFuIEFTQ0lJIGBzdHJpbmdgIHRvIGFuIGFycmF5LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgYXJyYXkuXG4gICAqL1xuICBmdW5jdGlvbiBhc2NpaVRvQXJyYXkoc3RyaW5nKSB7XG4gICAgcmV0dXJuIHN0cmluZy5zcGxpdCgnJyk7XG4gIH1cblxuICAvKipcbiAgICogU3BsaXRzIGFuIEFTQ0lJIGBzdHJpbmdgIGludG8gYW4gYXJyYXkgb2YgaXRzIHdvcmRzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gVGhlIHN0cmluZyB0byBpbnNwZWN0LlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHdvcmRzIG9mIGBzdHJpbmdgLlxuICAgKi9cbiAgZnVuY3Rpb24gYXNjaWlXb3JkcyhzdHJpbmcpIHtcbiAgICByZXR1cm4gc3RyaW5nLm1hdGNoKHJlQXNjaWlXb3JkKSB8fCBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBtZXRob2RzIGxpa2UgYF8uZmluZEtleWAgYW5kIGBfLmZpbmRMYXN0S2V5YCxcbiAgICogd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLCB3aGljaCBpdGVyYXRlcyBvdmVyIGBjb2xsZWN0aW9uYFxuICAgKiB1c2luZyBgZWFjaEZ1bmNgLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpbnNwZWN0LlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZWFjaEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGl0ZXJhdGUgb3ZlciBgY29sbGVjdGlvbmAuXG4gICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBmb3VuZCBlbGVtZW50IG9yIGl0cyBrZXksIGVsc2UgYHVuZGVmaW5lZGAuXG4gICAqL1xuICBmdW5jdGlvbiBiYXNlRmluZEtleShjb2xsZWN0aW9uLCBwcmVkaWNhdGUsIGVhY2hGdW5jKSB7XG4gICAgdmFyIHJlc3VsdDtcbiAgICBlYWNoRnVuYyhjb2xsZWN0aW9uLCBmdW5jdGlvbih2YWx1ZSwga2V5LCBjb2xsZWN0aW9uKSB7XG4gICAgICBpZiAocHJlZGljYXRlKHZhbHVlLCBrZXksIGNvbGxlY3Rpb24pKSB7XG4gICAgICAgIHJlc3VsdCA9IGtleTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZmluZEluZGV4YCBhbmQgYF8uZmluZExhc3RJbmRleGAgd2l0aG91dFxuICAgKiBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tSW5kZXggVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtmcm9tUmlnaHRdIFNwZWNpZnkgaXRlcmF0aW5nIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAgICovXG4gIGZ1bmN0aW9uIGJhc2VGaW5kSW5kZXgoYXJyYXksIHByZWRpY2F0ZSwgZnJvbUluZGV4LCBmcm9tUmlnaHQpIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICBpbmRleCA9IGZyb21JbmRleCArIChmcm9tUmlnaHQgPyAxIDogLTEpO1xuXG4gICAgd2hpbGUgKChmcm9tUmlnaHQgPyBpbmRleC0tIDogKytpbmRleCA8IGxlbmd0aCkpIHtcbiAgICAgIGlmIChwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICAgIHJldHVybiBpbmRleDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmluZGV4T2ZgIHdpdGhvdXQgYGZyb21JbmRleGAgYm91bmRzIGNoZWNrcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tSW5kZXggVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICAgKi9cbiAgZnVuY3Rpb24gYmFzZUluZGV4T2YoYXJyYXksIHZhbHVlLCBmcm9tSW5kZXgpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IHZhbHVlXG4gICAgICA/IHN0cmljdEluZGV4T2YoYXJyYXksIHZhbHVlLCBmcm9tSW5kZXgpXG4gICAgICA6IGJhc2VGaW5kSW5kZXgoYXJyYXksIGJhc2VJc05hTiwgZnJvbUluZGV4KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2UgYGJhc2VJbmRleE9mYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGEgY29tcGFyYXRvci5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tSW5kZXggVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjb21wYXJhdG9yIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gICAqL1xuICBmdW5jdGlvbiBiYXNlSW5kZXhPZldpdGgoYXJyYXksIHZhbHVlLCBmcm9tSW5kZXgsIGNvbXBhcmF0b3IpIHtcbiAgICB2YXIgaW5kZXggPSBmcm9tSW5kZXggLSAxLFxuICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgaWYgKGNvbXBhcmF0b3IoYXJyYXlbaW5kZXhdLCB2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gLTE7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNOYU5gIHdpdGhvdXQgc3VwcG9ydCBmb3IgbnVtYmVyIG9iamVjdHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBgTmFOYCwgZWxzZSBgZmFsc2VgLlxuICAgKi9cbiAgZnVuY3Rpb24gYmFzZUlzTmFOKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlICE9PSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5tZWFuYCBhbmQgYF8ubWVhbkJ5YCB3aXRob3V0IHN1cHBvcnQgZm9yXG4gICAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIG1lYW4uXG4gICAqL1xuICBmdW5jdGlvbiBiYXNlTWVhbihhcnJheSwgaXRlcmF0ZWUpIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gICAgcmV0dXJuIGxlbmd0aCA/IChiYXNlU3VtKGFycmF5LCBpdGVyYXRlZSkgLyBsZW5ndGgpIDogTkFOO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnByb3BlcnR5YCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZXAgcGF0aHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBhY2Nlc3NvciBmdW5jdGlvbi5cbiAgICovXG4gIGZ1bmN0aW9uIGJhc2VQcm9wZXJ0eShrZXkpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBvYmplY3Rba2V5XTtcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnByb3BlcnR5T2ZgIHdpdGhvdXQgc3VwcG9ydCBmb3IgZGVlcCBwYXRocy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBhY2Nlc3NvciBmdW5jdGlvbi5cbiAgICovXG4gIGZ1bmN0aW9uIGJhc2VQcm9wZXJ0eU9mKG9iamVjdCkge1xuICAgIHJldHVybiBmdW5jdGlvbihrZXkpIHtcbiAgICAgIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ucmVkdWNlYCBhbmQgYF8ucmVkdWNlUmlnaHRgLCB3aXRob3V0IHN1cHBvcnRcbiAgICogZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMsIHdoaWNoIGl0ZXJhdGVzIG92ZXIgYGNvbGxlY3Rpb25gIHVzaW5nIGBlYWNoRnVuY2AuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICogQHBhcmFtIHsqfSBhY2N1bXVsYXRvciBUaGUgaW5pdGlhbCB2YWx1ZS5cbiAgICogQHBhcmFtIHtib29sZWFufSBpbml0QWNjdW0gU3BlY2lmeSB1c2luZyB0aGUgZmlyc3Qgb3IgbGFzdCBlbGVtZW50IG9mXG4gICAqICBgY29sbGVjdGlvbmAgYXMgdGhlIGluaXRpYWwgdmFsdWUuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGVhY2hGdW5jIFRoZSBmdW5jdGlvbiB0byBpdGVyYXRlIG92ZXIgYGNvbGxlY3Rpb25gLlxuICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgYWNjdW11bGF0ZWQgdmFsdWUuXG4gICAqL1xuICBmdW5jdGlvbiBiYXNlUmVkdWNlKGNvbGxlY3Rpb24sIGl0ZXJhdGVlLCBhY2N1bXVsYXRvciwgaW5pdEFjY3VtLCBlYWNoRnVuYykge1xuICAgIGVhY2hGdW5jKGNvbGxlY3Rpb24sIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbikge1xuICAgICAgYWNjdW11bGF0b3IgPSBpbml0QWNjdW1cbiAgICAgICAgPyAoaW5pdEFjY3VtID0gZmFsc2UsIHZhbHVlKVxuICAgICAgICA6IGl0ZXJhdGVlKGFjY3VtdWxhdG9yLCB2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pO1xuICAgIH0pO1xuICAgIHJldHVybiBhY2N1bXVsYXRvcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5zb3J0QnlgIHdoaWNoIHVzZXMgYGNvbXBhcmVyYCB0byBkZWZpbmUgdGhlXG4gICAqIHNvcnQgb3JkZXIgb2YgYGFycmF5YCBhbmQgcmVwbGFjZXMgY3JpdGVyaWEgb2JqZWN0cyB3aXRoIHRoZWlyIGNvcnJlc3BvbmRpbmdcbiAgICogdmFsdWVzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gc29ydC5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY29tcGFyZXIgVGhlIGZ1bmN0aW9uIHRvIGRlZmluZSBzb3J0IG9yZGVyLlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAgICovXG4gIGZ1bmN0aW9uIGJhc2VTb3J0QnkoYXJyYXksIGNvbXBhcmVyKSB7XG4gICAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICAgIGFycmF5LnNvcnQoY29tcGFyZXIpO1xuICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgYXJyYXlbbGVuZ3RoXSA9IGFycmF5W2xlbmd0aF0udmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBhcnJheTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5zdW1gIGFuZCBgXy5zdW1CeWAgd2l0aG91dCBzdXBwb3J0IGZvclxuICAgKiBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBzdW0uXG4gICAqL1xuICBmdW5jdGlvbiBiYXNlU3VtKGFycmF5LCBpdGVyYXRlZSkge1xuICAgIHZhciByZXN1bHQsXG4gICAgICAgIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICB2YXIgY3VycmVudCA9IGl0ZXJhdGVlKGFycmF5W2luZGV4XSk7XG4gICAgICBpZiAoY3VycmVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdCA9PT0gdW5kZWZpbmVkID8gY3VycmVudCA6IChyZXN1bHQgKyBjdXJyZW50KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50aW1lc2Agd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzXG4gICAqIG9yIG1heCBhcnJheSBsZW5ndGggY2hlY2tzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVyIG9mIHRpbWVzIHRvIGludm9rZSBgaXRlcmF0ZWVgLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHJlc3VsdHMuXG4gICAqL1xuICBmdW5jdGlvbiBiYXNlVGltZXMobiwgaXRlcmF0ZWUpIHtcbiAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgcmVzdWx0ID0gQXJyYXkobik7XG5cbiAgICB3aGlsZSAoKytpbmRleCA8IG4pIHtcbiAgICAgIHJlc3VsdFtpbmRleF0gPSBpdGVyYXRlZShpbmRleCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udG9QYWlyc2AgYW5kIGBfLnRvUGFpcnNJbmAgd2hpY2ggY3JlYXRlcyBhbiBhcnJheVxuICAgKiBvZiBrZXktdmFsdWUgcGFpcnMgZm9yIGBvYmplY3RgIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHByb3BlcnR5IG5hbWVzIG9mIGBwcm9wc2AuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICogQHBhcmFtIHtBcnJheX0gcHJvcHMgVGhlIHByb3BlcnR5IG5hbWVzIHRvIGdldCB2YWx1ZXMgZm9yLlxuICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBrZXktdmFsdWUgcGFpcnMuXG4gICAqL1xuICBmdW5jdGlvbiBiYXNlVG9QYWlycyhvYmplY3QsIHByb3BzKSB7XG4gICAgcmV0dXJuIGFycmF5TWFwKHByb3BzLCBmdW5jdGlvbihrZXkpIHtcbiAgICAgIHJldHVybiBba2V5LCBvYmplY3Rba2V5XV07XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udHJpbWAuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byB0cmltLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSB0cmltbWVkIHN0cmluZy5cbiAgICovXG4gIGZ1bmN0aW9uIGJhc2VUcmltKHN0cmluZykge1xuICAgIHJldHVybiBzdHJpbmdcbiAgICAgID8gc3RyaW5nLnNsaWNlKDAsIHRyaW1tZWRFbmRJbmRleChzdHJpbmcpICsgMSkucmVwbGFjZShyZVRyaW1TdGFydCwgJycpXG4gICAgICA6IHN0cmluZztcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy51bmFyeWAgd2l0aG91dCBzdXBwb3J0IGZvciBzdG9yaW5nIG1ldGFkYXRhLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjYXAgYXJndW1lbnRzIGZvci5cbiAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY2FwcGVkIGZ1bmN0aW9uLlxuICAgKi9cbiAgZnVuY3Rpb24gYmFzZVVuYXJ5KGZ1bmMpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIHJldHVybiBmdW5jKHZhbHVlKTtcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnZhbHVlc2AgYW5kIGBfLnZhbHVlc0luYCB3aGljaCBjcmVhdGVzIGFuXG4gICAqIGFycmF5IG9mIGBvYmplY3RgIHByb3BlcnR5IHZhbHVlcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBwcm9wZXJ0eSBuYW1lc1xuICAgKiBvZiBgcHJvcHNgLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAqIEBwYXJhbSB7QXJyYXl9IHByb3BzIFRoZSBwcm9wZXJ0eSBuYW1lcyB0byBnZXQgdmFsdWVzIGZvci5cbiAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgdmFsdWVzLlxuICAgKi9cbiAgZnVuY3Rpb24gYmFzZVZhbHVlcyhvYmplY3QsIHByb3BzKSB7XG4gICAgcmV0dXJuIGFycmF5TWFwKHByb3BzLCBmdW5jdGlvbihrZXkpIHtcbiAgICAgIHJldHVybiBvYmplY3Rba2V5XTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYSBgY2FjaGVgIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjYWNoZSBUaGUgY2FjaGUgdG8gcXVlcnkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gICAqL1xuICBmdW5jdGlvbiBjYWNoZUhhcyhjYWNoZSwga2V5KSB7XG4gICAgcmV0dXJuIGNhY2hlLmhhcyhrZXkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVzZWQgYnkgYF8udHJpbWAgYW5kIGBfLnRyaW1TdGFydGAgdG8gZ2V0IHRoZSBpbmRleCBvZiB0aGUgZmlyc3Qgc3RyaW5nIHN5bWJvbFxuICAgKiB0aGF0IGlzIG5vdCBmb3VuZCBpbiB0aGUgY2hhcmFjdGVyIHN5bWJvbHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl9IHN0clN5bWJvbHMgVGhlIHN0cmluZyBzeW1ib2xzIHRvIGluc3BlY3QuXG4gICAqIEBwYXJhbSB7QXJyYXl9IGNoclN5bWJvbHMgVGhlIGNoYXJhY3RlciBzeW1ib2xzIHRvIGZpbmQuXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCB1bm1hdGNoZWQgc3RyaW5nIHN5bWJvbC5cbiAgICovXG4gIGZ1bmN0aW9uIGNoYXJzU3RhcnRJbmRleChzdHJTeW1ib2xzLCBjaHJTeW1ib2xzKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IHN0clN5bWJvbHMubGVuZ3RoO1xuXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGggJiYgYmFzZUluZGV4T2YoY2hyU3ltYm9scywgc3RyU3ltYm9sc1tpbmRleF0sIDApID4gLTEpIHt9XG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG5cbiAgLyoqXG4gICAqIFVzZWQgYnkgYF8udHJpbWAgYW5kIGBfLnRyaW1FbmRgIHRvIGdldCB0aGUgaW5kZXggb2YgdGhlIGxhc3Qgc3RyaW5nIHN5bWJvbFxuICAgKiB0aGF0IGlzIG5vdCBmb3VuZCBpbiB0aGUgY2hhcmFjdGVyIHN5bWJvbHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl9IHN0clN5bWJvbHMgVGhlIHN0cmluZyBzeW1ib2xzIHRvIGluc3BlY3QuXG4gICAqIEBwYXJhbSB7QXJyYXl9IGNoclN5bWJvbHMgVGhlIGNoYXJhY3RlciBzeW1ib2xzIHRvIGZpbmQuXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBsYXN0IHVubWF0Y2hlZCBzdHJpbmcgc3ltYm9sLlxuICAgKi9cbiAgZnVuY3Rpb24gY2hhcnNFbmRJbmRleChzdHJTeW1ib2xzLCBjaHJTeW1ib2xzKSB7XG4gICAgdmFyIGluZGV4ID0gc3RyU3ltYm9scy5sZW5ndGg7XG5cbiAgICB3aGlsZSAoaW5kZXgtLSAmJiBiYXNlSW5kZXhPZihjaHJTeW1ib2xzLCBzdHJTeW1ib2xzW2luZGV4XSwgMCkgPiAtMSkge31cbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgbnVtYmVyIG9mIGBwbGFjZWhvbGRlcmAgb2NjdXJyZW5jZXMgaW4gYGFycmF5YC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAqIEBwYXJhbSB7Kn0gcGxhY2Vob2xkZXIgVGhlIHBsYWNlaG9sZGVyIHRvIHNlYXJjaCBmb3IuXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHBsYWNlaG9sZGVyIGNvdW50LlxuICAgKi9cbiAgZnVuY3Rpb24gY291bnRIb2xkZXJzKGFycmF5LCBwbGFjZWhvbGRlcikge1xuICAgIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICAgIHJlc3VsdCA9IDA7XG5cbiAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgIGlmIChhcnJheVtsZW5ndGhdID09PSBwbGFjZWhvbGRlcikge1xuICAgICAgICArK3Jlc3VsdDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2VkIGJ5IGBfLmRlYnVycmAgdG8gY29udmVydCBMYXRpbi0xIFN1cHBsZW1lbnQgYW5kIExhdGluIEV4dGVuZGVkLUFcbiAgICogbGV0dGVycyB0byBiYXNpYyBMYXRpbiBsZXR0ZXJzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGV0dGVyIFRoZSBtYXRjaGVkIGxldHRlciB0byBkZWJ1cnIuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGRlYnVycmVkIGxldHRlci5cbiAgICovXG4gIHZhciBkZWJ1cnJMZXR0ZXIgPSBiYXNlUHJvcGVydHlPZihkZWJ1cnJlZExldHRlcnMpO1xuXG4gIC8qKlxuICAgKiBVc2VkIGJ5IGBfLmVzY2FwZWAgdG8gY29udmVydCBjaGFyYWN0ZXJzIHRvIEhUTUwgZW50aXRpZXMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjaHIgVGhlIG1hdGNoZWQgY2hhcmFjdGVyIHRvIGVzY2FwZS5cbiAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgZXNjYXBlZCBjaGFyYWN0ZXIuXG4gICAqL1xuICB2YXIgZXNjYXBlSHRtbENoYXIgPSBiYXNlUHJvcGVydHlPZihodG1sRXNjYXBlcyk7XG5cbiAgLyoqXG4gICAqIFVzZWQgYnkgYF8udGVtcGxhdGVgIHRvIGVzY2FwZSBjaGFyYWN0ZXJzIGZvciBpbmNsdXNpb24gaW4gY29tcGlsZWQgc3RyaW5nIGxpdGVyYWxzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2hyIFRoZSBtYXRjaGVkIGNoYXJhY3RlciB0byBlc2NhcGUuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGVzY2FwZWQgY2hhcmFjdGVyLlxuICAgKi9cbiAgZnVuY3Rpb24gZXNjYXBlU3RyaW5nQ2hhcihjaHIpIHtcbiAgICByZXR1cm4gJ1xcXFwnICsgc3RyaW5nRXNjYXBlc1tjaHJdO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHZhbHVlIGF0IGBrZXlgIG9mIGBvYmplY3RgLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBwcm9wZXJ0eSB2YWx1ZS5cbiAgICovXG4gIGZ1bmN0aW9uIGdldFZhbHVlKG9iamVjdCwga2V5KSB7XG4gICAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogb2JqZWN0W2tleV07XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGBzdHJpbmdgIGNvbnRhaW5zIFVuaWNvZGUgc3ltYm9scy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGluc3BlY3QuXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhIHN5bWJvbCBpcyBmb3VuZCwgZWxzZSBgZmFsc2VgLlxuICAgKi9cbiAgZnVuY3Rpb24gaGFzVW5pY29kZShzdHJpbmcpIHtcbiAgICByZXR1cm4gcmVIYXNVbmljb2RlLnRlc3Qoc3RyaW5nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYHN0cmluZ2AgY29udGFpbnMgYSB3b3JkIGNvbXBvc2VkIG9mIFVuaWNvZGUgc3ltYm9scy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGluc3BlY3QuXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhIHdvcmQgaXMgZm91bmQsIGVsc2UgYGZhbHNlYC5cbiAgICovXG4gIGZ1bmN0aW9uIGhhc1VuaWNvZGVXb3JkKHN0cmluZykge1xuICAgIHJldHVybiByZUhhc1VuaWNvZGVXb3JkLnRlc3Qoc3RyaW5nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBgaXRlcmF0b3JgIHRvIGFuIGFycmF5LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge09iamVjdH0gaXRlcmF0b3IgVGhlIGl0ZXJhdG9yIHRvIGNvbnZlcnQuXG4gICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY29udmVydGVkIGFycmF5LlxuICAgKi9cbiAgZnVuY3Rpb24gaXRlcmF0b3JUb0FycmF5KGl0ZXJhdG9yKSB7XG4gICAgdmFyIGRhdGEsXG4gICAgICAgIHJlc3VsdCA9IFtdO1xuXG4gICAgd2hpbGUgKCEoZGF0YSA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgICAgcmVzdWx0LnB1c2goZGF0YS52YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYG1hcGAgdG8gaXRzIGtleS12YWx1ZSBwYWlycy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtPYmplY3R9IG1hcCBUaGUgbWFwIHRvIGNvbnZlcnQuXG4gICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUga2V5LXZhbHVlIHBhaXJzLlxuICAgKi9cbiAgZnVuY3Rpb24gbWFwVG9BcnJheShtYXApIHtcbiAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgcmVzdWx0ID0gQXJyYXkobWFwLnNpemUpO1xuXG4gICAgbWFwLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIGtleSkge1xuICAgICAgcmVzdWx0WysraW5kZXhdID0gW2tleSwgdmFsdWVdO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHVuYXJ5IGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2Agd2l0aCBpdHMgYXJndW1lbnQgdHJhbnNmb3JtZWQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdyYXAuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybSBUaGUgYXJndW1lbnQgdHJhbnNmb3JtLlxuICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAgICovXG4gIGZ1bmN0aW9uIG92ZXJBcmcoZnVuYywgdHJhbnNmb3JtKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGFyZykge1xuICAgICAgcmV0dXJuIGZ1bmModHJhbnNmb3JtKGFyZykpO1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUmVwbGFjZXMgYWxsIGBwbGFjZWhvbGRlcmAgZWxlbWVudHMgaW4gYGFycmF5YCB3aXRoIGFuIGludGVybmFsIHBsYWNlaG9sZGVyXG4gICAqIGFuZCByZXR1cm5zIGFuIGFycmF5IG9mIHRoZWlyIGluZGV4ZXMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBtb2RpZnkuXG4gICAqIEBwYXJhbSB7Kn0gcGxhY2Vob2xkZXIgVGhlIHBsYWNlaG9sZGVyIHRvIHJlcGxhY2UuXG4gICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIHBsYWNlaG9sZGVyIGluZGV4ZXMuXG4gICAqL1xuICBmdW5jdGlvbiByZXBsYWNlSG9sZGVycyhhcnJheSwgcGxhY2Vob2xkZXIpIHtcbiAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICByZXNJbmRleCA9IDAsXG4gICAgICAgIHJlc3VsdCA9IFtdO1xuXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XTtcbiAgICAgIGlmICh2YWx1ZSA9PT0gcGxhY2Vob2xkZXIgfHwgdmFsdWUgPT09IFBMQUNFSE9MREVSKSB7XG4gICAgICAgIGFycmF5W2luZGV4XSA9IFBMQUNFSE9MREVSO1xuICAgICAgICByZXN1bHRbcmVzSW5kZXgrK10gPSBpbmRleDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBgc2V0YCB0byBhbiBhcnJheSBvZiBpdHMgdmFsdWVzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge09iamVjdH0gc2V0IFRoZSBzZXQgdG8gY29udmVydC5cbiAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSB2YWx1ZXMuXG4gICAqL1xuICBmdW5jdGlvbiBzZXRUb0FycmF5KHNldCkge1xuICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICByZXN1bHQgPSBBcnJheShzZXQuc2l6ZSk7XG5cbiAgICBzZXQuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgcmVzdWx0WysraW5kZXhdID0gdmFsdWU7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBgc2V0YCB0byBpdHMgdmFsdWUtdmFsdWUgcGFpcnMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBzZXQgVGhlIHNldCB0byBjb252ZXJ0LlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHZhbHVlLXZhbHVlIHBhaXJzLlxuICAgKi9cbiAgZnVuY3Rpb24gc2V0VG9QYWlycyhzZXQpIHtcbiAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgcmVzdWx0ID0gQXJyYXkoc2V0LnNpemUpO1xuXG4gICAgc2V0LmZvckVhY2goZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIHJlc3VsdFsrK2luZGV4XSA9IFt2YWx1ZSwgdmFsdWVdO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLmluZGV4T2ZgIHdoaWNoIHBlcmZvcm1zIHN0cmljdCBlcXVhbGl0eVxuICAgKiBjb21wYXJpc29ucyBvZiB2YWx1ZXMsIGkuZS4gYD09PWAuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICAgKiBAcGFyYW0ge251bWJlcn0gZnJvbUluZGV4IFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAgICovXG4gIGZ1bmN0aW9uIHN0cmljdEluZGV4T2YoYXJyYXksIHZhbHVlLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgaW5kZXggPSBmcm9tSW5kZXggLSAxLFxuICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgaWYgKGFycmF5W2luZGV4XSA9PT0gdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gLTE7XG4gIH1cblxuICAvKipcbiAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLmxhc3RJbmRleE9mYCB3aGljaCBwZXJmb3JtcyBzdHJpY3QgZXF1YWxpdHlcbiAgICogY29tcGFyaXNvbnMgb2YgdmFsdWVzLCBpLmUuIGA9PT1gLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGZyb21JbmRleCBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gICAqL1xuICBmdW5jdGlvbiBzdHJpY3RMYXN0SW5kZXhPZihhcnJheSwgdmFsdWUsIGZyb21JbmRleCkge1xuICAgIHZhciBpbmRleCA9IGZyb21JbmRleCArIDE7XG4gICAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICAgIGlmIChhcnJheVtpbmRleF0gPT09IHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBpbmRleDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIG51bWJlciBvZiBzeW1ib2xzIGluIGBzdHJpbmdgLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gaW5zcGVjdC5cbiAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgc3RyaW5nIHNpemUuXG4gICAqL1xuICBmdW5jdGlvbiBzdHJpbmdTaXplKHN0cmluZykge1xuICAgIHJldHVybiBoYXNVbmljb2RlKHN0cmluZylcbiAgICAgID8gdW5pY29kZVNpemUoc3RyaW5nKVxuICAgICAgOiBhc2NpaVNpemUoc3RyaW5nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBgc3RyaW5nYCB0byBhbiBhcnJheS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY29udmVydGVkIGFycmF5LlxuICAgKi9cbiAgZnVuY3Rpb24gc3RyaW5nVG9BcnJheShzdHJpbmcpIHtcbiAgICByZXR1cm4gaGFzVW5pY29kZShzdHJpbmcpXG4gICAgICA/IHVuaWNvZGVUb0FycmF5KHN0cmluZylcbiAgICAgIDogYXNjaWlUb0FycmF5KHN0cmluZyk7XG4gIH1cblxuICAvKipcbiAgICogVXNlZCBieSBgXy50cmltYCBhbmQgYF8udHJpbUVuZGAgdG8gZ2V0IHRoZSBpbmRleCBvZiB0aGUgbGFzdCBub24td2hpdGVzcGFjZVxuICAgKiBjaGFyYWN0ZXIgb2YgYHN0cmluZ2AuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBpbnNwZWN0LlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbGFzdCBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIuXG4gICAqL1xuICBmdW5jdGlvbiB0cmltbWVkRW5kSW5kZXgoc3RyaW5nKSB7XG4gICAgdmFyIGluZGV4ID0gc3RyaW5nLmxlbmd0aDtcblxuICAgIHdoaWxlIChpbmRleC0tICYmIHJlV2hpdGVzcGFjZS50ZXN0KHN0cmluZy5jaGFyQXQoaW5kZXgpKSkge31cbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cblxuICAvKipcbiAgICogVXNlZCBieSBgXy51bmVzY2FwZWAgdG8gY29udmVydCBIVE1MIGVudGl0aWVzIHRvIGNoYXJhY3RlcnMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjaHIgVGhlIG1hdGNoZWQgY2hhcmFjdGVyIHRvIHVuZXNjYXBlLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSB1bmVzY2FwZWQgY2hhcmFjdGVyLlxuICAgKi9cbiAgdmFyIHVuZXNjYXBlSHRtbENoYXIgPSBiYXNlUHJvcGVydHlPZihodG1sVW5lc2NhcGVzKTtcblxuICAvKipcbiAgICogR2V0cyB0aGUgc2l6ZSBvZiBhIFVuaWNvZGUgYHN0cmluZ2AuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyBpbnNwZWN0LlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBzdHJpbmcgc2l6ZS5cbiAgICovXG4gIGZ1bmN0aW9uIHVuaWNvZGVTaXplKHN0cmluZykge1xuICAgIHZhciByZXN1bHQgPSByZVVuaWNvZGUubGFzdEluZGV4ID0gMDtcbiAgICB3aGlsZSAocmVVbmljb2RlLnRlc3Qoc3RyaW5nKSkge1xuICAgICAgKytyZXN1bHQ7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYSBVbmljb2RlIGBzdHJpbmdgIHRvIGFuIGFycmF5LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgYXJyYXkuXG4gICAqL1xuICBmdW5jdGlvbiB1bmljb2RlVG9BcnJheShzdHJpbmcpIHtcbiAgICByZXR1cm4gc3RyaW5nLm1hdGNoKHJlVW5pY29kZSkgfHwgW107XG4gIH1cblxuICAvKipcbiAgICogU3BsaXRzIGEgVW5pY29kZSBgc3RyaW5nYCBpbnRvIGFuIGFycmF5IG9mIGl0cyB3b3Jkcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFRoZSBzdHJpbmcgdG8gaW5zcGVjdC5cbiAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSB3b3JkcyBvZiBgc3RyaW5nYC5cbiAgICovXG4gIGZ1bmN0aW9uIHVuaWNvZGVXb3JkcyhzdHJpbmcpIHtcbiAgICByZXR1cm4gc3RyaW5nLm1hdGNoKHJlVW5pY29kZVdvcmQpIHx8IFtdO1xuICB9XG5cbiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBwcmlzdGluZSBgbG9kYXNoYCBmdW5jdGlvbiB1c2luZyB0aGUgYGNvbnRleHRgIG9iamVjdC5cbiAgICpcbiAgICogQHN0YXRpY1xuICAgKiBAbWVtYmVyT2YgX1xuICAgKiBAc2luY2UgMS4xLjBcbiAgICogQGNhdGVnb3J5IFV0aWxcbiAgICogQHBhcmFtIHtPYmplY3R9IFtjb250ZXh0PXJvb3RdIFRoZSBjb250ZXh0IG9iamVjdC5cbiAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGEgbmV3IGBsb2Rhc2hgIGZ1bmN0aW9uLlxuICAgKiBAZXhhbXBsZVxuICAgKlxuICAgKiBfLm1peGluKHsgJ2Zvbyc6IF8uY29uc3RhbnQoJ2ZvbycpIH0pO1xuICAgKlxuICAgKiB2YXIgbG9kYXNoID0gXy5ydW5JbkNvbnRleHQoKTtcbiAgICogbG9kYXNoLm1peGluKHsgJ2Jhcic6IGxvZGFzaC5jb25zdGFudCgnYmFyJykgfSk7XG4gICAqXG4gICAqIF8uaXNGdW5jdGlvbihfLmZvbyk7XG4gICAqIC8vID0+IHRydWVcbiAgICogXy5pc0Z1bmN0aW9uKF8uYmFyKTtcbiAgICogLy8gPT4gZmFsc2VcbiAgICpcbiAgICogbG9kYXNoLmlzRnVuY3Rpb24obG9kYXNoLmZvbyk7XG4gICAqIC8vID0+IGZhbHNlXG4gICAqIGxvZGFzaC5pc0Z1bmN0aW9uKGxvZGFzaC5iYXIpO1xuICAgKiAvLyA9PiB0cnVlXG4gICAqXG4gICAqIC8vIENyZWF0ZSBhIHN1cGVkLXVwIGBkZWZlcmAgaW4gTm9kZS5qcy5cbiAgICogdmFyIGRlZmVyID0gXy5ydW5JbkNvbnRleHQoeyAnc2V0VGltZW91dCc6IHNldEltbWVkaWF0ZSB9KS5kZWZlcjtcbiAgICovXG4gIHZhciBydW5JbkNvbnRleHQgPSAoZnVuY3Rpb24gcnVuSW5Db250ZXh0KGNvbnRleHQpIHtcbiAgICBjb250ZXh0ID0gY29udGV4dCA9PSBudWxsID8gcm9vdCA6IF8uZGVmYXVsdHMocm9vdC5PYmplY3QoKSwgY29udGV4dCwgXy5waWNrKHJvb3QsIGNvbnRleHRQcm9wcykpO1xuXG4gICAgLyoqIEJ1aWx0LWluIGNvbnN0cnVjdG9yIHJlZmVyZW5jZXMuICovXG4gICAgdmFyIEFycmF5ID0gY29udGV4dC5BcnJheSxcbiAgICAgICAgRGF0ZSA9IGNvbnRleHQuRGF0ZSxcbiAgICAgICAgRXJyb3IgPSBjb250ZXh0LkVycm9yLFxuICAgICAgICBGdW5jdGlvbiA9IGNvbnRleHQuRnVuY3Rpb24sXG4gICAgICAgIE1hdGggPSBjb250ZXh0Lk1hdGgsXG4gICAgICAgIE9iamVjdCA9IGNvbnRleHQuT2JqZWN0LFxuICAgICAgICBSZWdFeHAgPSBjb250ZXh0LlJlZ0V4cCxcbiAgICAgICAgU3RyaW5nID0gY29udGV4dC5TdHJpbmcsXG4gICAgICAgIFR5cGVFcnJvciA9IGNvbnRleHQuVHlwZUVycm9yO1xuXG4gICAgLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xuICAgIHZhciBhcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlLFxuICAgICAgICBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGUsXG4gICAgICAgIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuICAgIC8qKiBVc2VkIHRvIGRldGVjdCBvdmVycmVhY2hpbmcgY29yZS1qcyBzaGltcy4gKi9cbiAgICB2YXIgY29yZUpzRGF0YSA9IGNvbnRleHRbJ19fY29yZS1qc19zaGFyZWRfXyddO1xuXG4gICAgLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xuICAgIHZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbiAgICAvKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbiAgICB2YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuICAgIC8qKiBVc2VkIHRvIGdlbmVyYXRlIHVuaXF1ZSBJRHMuICovXG4gICAgdmFyIGlkQ291bnRlciA9IDA7XG5cbiAgICAvKiogVXNlZCB0byBkZXRlY3QgbWV0aG9kcyBtYXNxdWVyYWRpbmcgYXMgbmF0aXZlLiAqL1xuICAgIHZhciBtYXNrU3JjS2V5ID0gKGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHVpZCA9IC9bXi5dKyQvLmV4ZWMoY29yZUpzRGF0YSAmJiBjb3JlSnNEYXRhLmtleXMgJiYgY29yZUpzRGF0YS5rZXlzLklFX1BST1RPIHx8ICcnKTtcbiAgICAgIHJldHVybiB1aWQgPyAoJ1N5bWJvbChzcmMpXzEuJyArIHVpZCkgOiAnJztcbiAgICB9KCkpO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCB0byByZXNvbHZlIHRoZVxuICAgICAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICAgICAqIG9mIHZhbHVlcy5cbiAgICAgKi9cbiAgICB2YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcblxuICAgIC8qKiBVc2VkIHRvIGluZmVyIHRoZSBgT2JqZWN0YCBjb25zdHJ1Y3Rvci4gKi9cbiAgICB2YXIgb2JqZWN0Q3RvclN0cmluZyA9IGZ1bmNUb1N0cmluZy5jYWxsKE9iamVjdCk7XG5cbiAgICAvKiogVXNlZCB0byByZXN0b3JlIHRoZSBvcmlnaW5hbCBgX2AgcmVmZXJlbmNlIGluIGBfLm5vQ29uZmxpY3RgLiAqL1xuICAgIHZhciBvbGREYXNoID0gcm9vdC5fO1xuXG4gICAgLyoqIFVzZWQgdG8gZGV0ZWN0IGlmIGEgbWV0aG9kIGlzIG5hdGl2ZS4gKi9cbiAgICB2YXIgcmVJc05hdGl2ZSA9IFJlZ0V4cCgnXicgK1xuICAgICAgZnVuY1RvU3RyaW5nLmNhbGwoaGFzT3duUHJvcGVydHkpLnJlcGxhY2UocmVSZWdFeHBDaGFyLCAnXFxcXCQmJylcbiAgICAgIC5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcXFxcKCl8IGZvciAuKz8oPz1cXFxcXFxdKS9nLCAnJDEuKj8nKSArICckJ1xuICAgICk7XG5cbiAgICAvKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbiAgICB2YXIgQnVmZmVyID0gbW9kdWxlRXhwb3J0cyA/IGNvbnRleHQuQnVmZmVyIDogdW5kZWZpbmVkLFxuICAgICAgICBTeW1ib2wgPSBjb250ZXh0LlN5bWJvbCxcbiAgICAgICAgVWludDhBcnJheSA9IGNvbnRleHQuVWludDhBcnJheSxcbiAgICAgICAgYWxsb2NVbnNhZmUgPSBCdWZmZXIgPyBCdWZmZXIuYWxsb2NVbnNhZmUgOiB1bmRlZmluZWQsXG4gICAgICAgIGdldFByb3RvdHlwZSA9IG92ZXJBcmcoT2JqZWN0LmdldFByb3RvdHlwZU9mLCBPYmplY3QpLFxuICAgICAgICBvYmplY3RDcmVhdGUgPSBPYmplY3QuY3JlYXRlLFxuICAgICAgICBwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IG9iamVjdFByb3RvLnByb3BlcnR5SXNFbnVtZXJhYmxlLFxuICAgICAgICBzcGxpY2UgPSBhcnJheVByb3RvLnNwbGljZSxcbiAgICAgICAgc3ByZWFkYWJsZVN5bWJvbCA9IFN5bWJvbCA/IFN5bWJvbC5pc0NvbmNhdFNwcmVhZGFibGUgOiB1bmRlZmluZWQsXG4gICAgICAgIHN5bUl0ZXJhdG9yID0gU3ltYm9sID8gU3ltYm9sLml0ZXJhdG9yIDogdW5kZWZpbmVkLFxuICAgICAgICBzeW1Ub1N0cmluZ1RhZyA9IFN5bWJvbCA/IFN5bWJvbC50b1N0cmluZ1RhZyA6IHVuZGVmaW5lZDtcblxuICAgIHZhciBkZWZpbmVQcm9wZXJ0eSA9IChmdW5jdGlvbigpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBmdW5jID0gZ2V0TmF0aXZlKE9iamVjdCwgJ2RlZmluZVByb3BlcnR5Jyk7XG4gICAgICAgIGZ1bmMoe30sICcnLCB7fSk7XG4gICAgICAgIHJldHVybiBmdW5jO1xuICAgICAgfSBjYXRjaCAoZSkge31cbiAgICB9KCkpO1xuXG4gICAgLyoqIE1vY2tlZCBidWlsdC1pbnMuICovXG4gICAgdmFyIGN0eENsZWFyVGltZW91dCA9IGNvbnRleHQuY2xlYXJUaW1lb3V0ICE9PSByb290LmNsZWFyVGltZW91dCAmJiBjb250ZXh0LmNsZWFyVGltZW91dCxcbiAgICAgICAgY3R4Tm93ID0gRGF0ZSAmJiBEYXRlLm5vdyAhPT0gcm9vdC5EYXRlLm5vdyAmJiBEYXRlLm5vdyxcbiAgICAgICAgY3R4U2V0VGltZW91dCA9IGNvbnRleHQuc2V0VGltZW91dCAhPT0gcm9vdC5zZXRUaW1lb3V0ICYmIGNvbnRleHQuc2V0VGltZW91dDtcblxuICAgIC8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbiAgICB2YXIgbmF0aXZlQ2VpbCA9IE1hdGguY2VpbCxcbiAgICAgICAgbmF0aXZlRmxvb3IgPSBNYXRoLmZsb29yLFxuICAgICAgICBuYXRpdmVHZXRTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyxcbiAgICAgICAgbmF0aXZlSXNCdWZmZXIgPSBCdWZmZXIgPyBCdWZmZXIuaXNCdWZmZXIgOiB1bmRlZmluZWQsXG4gICAgICAgIG5hdGl2ZUlzRmluaXRlID0gY29udGV4dC5pc0Zpbml0ZSxcbiAgICAgICAgbmF0aXZlSm9pbiA9IGFycmF5UHJvdG8uam9pbixcbiAgICAgICAgbmF0aXZlS2V5cyA9IG92ZXJBcmcoT2JqZWN0LmtleXMsIE9iamVjdCksXG4gICAgICAgIG5hdGl2ZU1heCA9IE1hdGgubWF4LFxuICAgICAgICBuYXRpdmVNaW4gPSBNYXRoLm1pbixcbiAgICAgICAgbmF0aXZlTm93ID0gRGF0ZS5ub3csXG4gICAgICAgIG5hdGl2ZVBhcnNlSW50ID0gY29udGV4dC5wYXJzZUludCxcbiAgICAgICAgbmF0aXZlUmFuZG9tID0gTWF0aC5yYW5kb20sXG4gICAgICAgIG5hdGl2ZVJldmVyc2UgPSBhcnJheVByb3RvLnJldmVyc2U7XG5cbiAgICAvKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG4gICAgdmFyIERhdGFWaWV3ID0gZ2V0TmF0aXZlKGNvbnRleHQsICdEYXRhVmlldycpLFxuICAgICAgICBNYXAgPSBnZXROYXRpdmUoY29udGV4dCwgJ01hcCcpLFxuICAgICAgICBQcm9taXNlID0gZ2V0TmF0aXZlKGNvbnRleHQsICdQcm9taXNlJyksXG4gICAgICAgIFNldCA9IGdldE5hdGl2ZShjb250ZXh0LCAnU2V0JyksXG4gICAgICAgIFdlYWtNYXAgPSBnZXROYXRpdmUoY29udGV4dCwgJ1dlYWtNYXAnKSxcbiAgICAgICAgbmF0aXZlQ3JlYXRlID0gZ2V0TmF0aXZlKE9iamVjdCwgJ2NyZWF0ZScpO1xuXG4gICAgLyoqIFVzZWQgdG8gc3RvcmUgZnVuY3Rpb24gbWV0YWRhdGEuICovXG4gICAgdmFyIG1ldGFNYXAgPSBXZWFrTWFwICYmIG5ldyBXZWFrTWFwO1xuXG4gICAgLyoqIFVzZWQgdG8gbG9va3VwIHVubWluaWZpZWQgZnVuY3Rpb24gbmFtZXMuICovXG4gICAgdmFyIHJlYWxOYW1lcyA9IHt9O1xuXG4gICAgLyoqIFVzZWQgdG8gZGV0ZWN0IG1hcHMsIHNldHMsIGFuZCB3ZWFrbWFwcy4gKi9cbiAgICB2YXIgZGF0YVZpZXdDdG9yU3RyaW5nID0gdG9Tb3VyY2UoRGF0YVZpZXcpLFxuICAgICAgICBtYXBDdG9yU3RyaW5nID0gdG9Tb3VyY2UoTWFwKSxcbiAgICAgICAgcHJvbWlzZUN0b3JTdHJpbmcgPSB0b1NvdXJjZShQcm9taXNlKSxcbiAgICAgICAgc2V0Q3RvclN0cmluZyA9IHRvU291cmNlKFNldCksXG4gICAgICAgIHdlYWtNYXBDdG9yU3RyaW5nID0gdG9Tb3VyY2UoV2Vha01hcCk7XG5cbiAgICAvKiogVXNlZCB0byBjb252ZXJ0IHN5bWJvbHMgdG8gcHJpbWl0aXZlcyBhbmQgc3RyaW5ncy4gKi9cbiAgICB2YXIgc3ltYm9sUHJvdG8gPSBTeW1ib2wgPyBTeW1ib2wucHJvdG90eXBlIDogdW5kZWZpbmVkLFxuICAgICAgICBzeW1ib2xWYWx1ZU9mID0gc3ltYm9sUHJvdG8gPyBzeW1ib2xQcm90by52YWx1ZU9mIDogdW5kZWZpbmVkLFxuICAgICAgICBzeW1ib2xUb1N0cmluZyA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udG9TdHJpbmcgOiB1bmRlZmluZWQ7XG5cbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgYGxvZGFzaGAgb2JqZWN0IHdoaWNoIHdyYXBzIGB2YWx1ZWAgdG8gZW5hYmxlIGltcGxpY2l0IG1ldGhvZFxuICAgICAqIGNoYWluIHNlcXVlbmNlcy4gTWV0aG9kcyB0aGF0IG9wZXJhdGUgb24gYW5kIHJldHVybiBhcnJheXMsIGNvbGxlY3Rpb25zLFxuICAgICAqIGFuZCBmdW5jdGlvbnMgY2FuIGJlIGNoYWluZWQgdG9nZXRoZXIuIE1ldGhvZHMgdGhhdCByZXRyaWV2ZSBhIHNpbmdsZSB2YWx1ZVxuICAgICAqIG9yIG1heSByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUgd2lsbCBhdXRvbWF0aWNhbGx5IGVuZCB0aGUgY2hhaW4gc2VxdWVuY2VcbiAgICAgKiBhbmQgcmV0dXJuIHRoZSB1bndyYXBwZWQgdmFsdWUuIE90aGVyd2lzZSwgdGhlIHZhbHVlIG11c3QgYmUgdW53cmFwcGVkXG4gICAgICogd2l0aCBgXyN2YWx1ZWAuXG4gICAgICpcbiAgICAgKiBFeHBsaWNpdCBjaGFpbiBzZXF1ZW5jZXMsIHdoaWNoIG11c3QgYmUgdW53cmFwcGVkIHdpdGggYF8jdmFsdWVgLCBtYXkgYmVcbiAgICAgKiBlbmFibGVkIHVzaW5nIGBfLmNoYWluYC5cbiAgICAgKlxuICAgICAqIFRoZSBleGVjdXRpb24gb2YgY2hhaW5lZCBtZXRob2RzIGlzIGxhenksIHRoYXQgaXMsIGl0J3MgZGVmZXJyZWQgdW50aWxcbiAgICAgKiBgXyN2YWx1ZWAgaXMgaW1wbGljaXRseSBvciBleHBsaWNpdGx5IGNhbGxlZC5cbiAgICAgKlxuICAgICAqIExhenkgZXZhbHVhdGlvbiBhbGxvd3Mgc2V2ZXJhbCBtZXRob2RzIHRvIHN1cHBvcnQgc2hvcnRjdXQgZnVzaW9uLlxuICAgICAqIFNob3J0Y3V0IGZ1c2lvbiBpcyBhbiBvcHRpbWl6YXRpb24gdG8gbWVyZ2UgaXRlcmF0ZWUgY2FsbHM7IHRoaXMgYXZvaWRzXG4gICAgICogdGhlIGNyZWF0aW9uIG9mIGludGVybWVkaWF0ZSBhcnJheXMgYW5kIGNhbiBncmVhdGx5IHJlZHVjZSB0aGUgbnVtYmVyIG9mXG4gICAgICogaXRlcmF0ZWUgZXhlY3V0aW9ucy4gU2VjdGlvbnMgb2YgYSBjaGFpbiBzZXF1ZW5jZSBxdWFsaWZ5IGZvciBzaG9ydGN1dFxuICAgICAqIGZ1c2lvbiBpZiB0aGUgc2VjdGlvbiBpcyBhcHBsaWVkIHRvIGFuIGFycmF5IGFuZCBpdGVyYXRlZXMgYWNjZXB0IG9ubHlcbiAgICAgKiBvbmUgYXJndW1lbnQuIFRoZSBoZXVyaXN0aWMgZm9yIHdoZXRoZXIgYSBzZWN0aW9uIHF1YWxpZmllcyBmb3Igc2hvcnRjdXRcbiAgICAgKiBmdXNpb24gaXMgc3ViamVjdCB0byBjaGFuZ2UuXG4gICAgICpcbiAgICAgKiBDaGFpbmluZyBpcyBzdXBwb3J0ZWQgaW4gY3VzdG9tIGJ1aWxkcyBhcyBsb25nIGFzIHRoZSBgXyN2YWx1ZWAgbWV0aG9kIGlzXG4gICAgICogZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmNsdWRlZCBpbiB0aGUgYnVpbGQuXG4gICAgICpcbiAgICAgKiBJbiBhZGRpdGlvbiB0byBsb2Rhc2ggbWV0aG9kcywgd3JhcHBlcnMgaGF2ZSBgQXJyYXlgIGFuZCBgU3RyaW5nYCBtZXRob2RzLlxuICAgICAqXG4gICAgICogVGhlIHdyYXBwZXIgYEFycmF5YCBtZXRob2RzIGFyZTpcbiAgICAgKiBgY29uY2F0YCwgYGpvaW5gLCBgcG9wYCwgYHB1c2hgLCBgc2hpZnRgLCBgc29ydGAsIGBzcGxpY2VgLCBhbmQgYHVuc2hpZnRgXG4gICAgICpcbiAgICAgKiBUaGUgd3JhcHBlciBgU3RyaW5nYCBtZXRob2RzIGFyZTpcbiAgICAgKiBgcmVwbGFjZWAgYW5kIGBzcGxpdGBcbiAgICAgKlxuICAgICAqIFRoZSB3cmFwcGVyIG1ldGhvZHMgdGhhdCBzdXBwb3J0IHNob3J0Y3V0IGZ1c2lvbiBhcmU6XG4gICAgICogYGF0YCwgYGNvbXBhY3RgLCBgZHJvcGAsIGBkcm9wUmlnaHRgLCBgZHJvcFdoaWxlYCwgYGZpbHRlcmAsIGBmaW5kYCxcbiAgICAgKiBgZmluZExhc3RgLCBgaGVhZGAsIGBpbml0aWFsYCwgYGxhc3RgLCBgbWFwYCwgYHJlamVjdGAsIGByZXZlcnNlYCwgYHNsaWNlYCxcbiAgICAgKiBgdGFpbGAsIGB0YWtlYCwgYHRha2VSaWdodGAsIGB0YWtlUmlnaHRXaGlsZWAsIGB0YWtlV2hpbGVgLCBhbmQgYHRvQXJyYXlgXG4gICAgICpcbiAgICAgKiBUaGUgY2hhaW5hYmxlIHdyYXBwZXIgbWV0aG9kcyBhcmU6XG4gICAgICogYGFmdGVyYCwgYGFyeWAsIGBhc3NpZ25gLCBgYXNzaWduSW5gLCBgYXNzaWduSW5XaXRoYCwgYGFzc2lnbldpdGhgLCBgYXRgLFxuICAgICAqIGBiZWZvcmVgLCBgYmluZGAsIGBiaW5kQWxsYCwgYGJpbmRLZXlgLCBgY2FzdEFycmF5YCwgYGNoYWluYCwgYGNodW5rYCxcbiAgICAgKiBgY29tbWl0YCwgYGNvbXBhY3RgLCBgY29uY2F0YCwgYGNvbmZvcm1zYCwgYGNvbnN0YW50YCwgYGNvdW50QnlgLCBgY3JlYXRlYCxcbiAgICAgKiBgY3VycnlgLCBgZGVib3VuY2VgLCBgZGVmYXVsdHNgLCBgZGVmYXVsdHNEZWVwYCwgYGRlZmVyYCwgYGRlbGF5YCxcbiAgICAgKiBgZGlmZmVyZW5jZWAsIGBkaWZmZXJlbmNlQnlgLCBgZGlmZmVyZW5jZVdpdGhgLCBgZHJvcGAsIGBkcm9wUmlnaHRgLFxuICAgICAqIGBkcm9wUmlnaHRXaGlsZWAsIGBkcm9wV2hpbGVgLCBgZXh0ZW5kYCwgYGV4dGVuZFdpdGhgLCBgZmlsbGAsIGBmaWx0ZXJgLFxuICAgICAqIGBmbGF0TWFwYCwgYGZsYXRNYXBEZWVwYCwgYGZsYXRNYXBEZXB0aGAsIGBmbGF0dGVuYCwgYGZsYXR0ZW5EZWVwYCxcbiAgICAgKiBgZmxhdHRlbkRlcHRoYCwgYGZsaXBgLCBgZmxvd2AsIGBmbG93UmlnaHRgLCBgZnJvbVBhaXJzYCwgYGZ1bmN0aW9uc2AsXG4gICAgICogYGZ1bmN0aW9uc0luYCwgYGdyb3VwQnlgLCBgaW5pdGlhbGAsIGBpbnRlcnNlY3Rpb25gLCBgaW50ZXJzZWN0aW9uQnlgLFxuICAgICAqIGBpbnRlcnNlY3Rpb25XaXRoYCwgYGludmVydGAsIGBpbnZlcnRCeWAsIGBpbnZva2VNYXBgLCBgaXRlcmF0ZWVgLCBga2V5QnlgLFxuICAgICAqIGBrZXlzYCwgYGtleXNJbmAsIGBtYXBgLCBgbWFwS2V5c2AsIGBtYXBWYWx1ZXNgLCBgbWF0Y2hlc2AsIGBtYXRjaGVzUHJvcGVydHlgLFxuICAgICAqIGBtZW1vaXplYCwgYG1lcmdlYCwgYG1lcmdlV2l0aGAsIGBtZXRob2RgLCBgbWV0aG9kT2ZgLCBgbWl4aW5gLCBgbmVnYXRlYCxcbiAgICAgKiBgbnRoQXJnYCwgYG9taXRgLCBgb21pdEJ5YCwgYG9uY2VgLCBgb3JkZXJCeWAsIGBvdmVyYCwgYG92ZXJBcmdzYCxcbiAgICAgKiBgb3ZlckV2ZXJ5YCwgYG92ZXJTb21lYCwgYHBhcnRpYWxgLCBgcGFydGlhbFJpZ2h0YCwgYHBhcnRpdGlvbmAsIGBwaWNrYCxcbiAgICAgKiBgcGlja0J5YCwgYHBsYW50YCwgYHByb3BlcnR5YCwgYHByb3BlcnR5T2ZgLCBgcHVsbGAsIGBwdWxsQWxsYCwgYHB1bGxBbGxCeWAsXG4gICAgICogYHB1bGxBbGxXaXRoYCwgYHB1bGxBdGAsIGBwdXNoYCwgYHJhbmdlYCwgYHJhbmdlUmlnaHRgLCBgcmVhcmdgLCBgcmVqZWN0YCxcbiAgICAgKiBgcmVtb3ZlYCwgYHJlc3RgLCBgcmV2ZXJzZWAsIGBzYW1wbGVTaXplYCwgYHNldGAsIGBzZXRXaXRoYCwgYHNodWZmbGVgLFxuICAgICAqIGBzbGljZWAsIGBzb3J0YCwgYHNvcnRCeWAsIGBzcGxpY2VgLCBgc3ByZWFkYCwgYHRhaWxgLCBgdGFrZWAsIGB0YWtlUmlnaHRgLFxuICAgICAqIGB0YWtlUmlnaHRXaGlsZWAsIGB0YWtlV2hpbGVgLCBgdGFwYCwgYHRocm90dGxlYCwgYHRocnVgLCBgdG9BcnJheWAsXG4gICAgICogYHRvUGFpcnNgLCBgdG9QYWlyc0luYCwgYHRvUGF0aGAsIGB0b1BsYWluT2JqZWN0YCwgYHRyYW5zZm9ybWAsIGB1bmFyeWAsXG4gICAgICogYHVuaW9uYCwgYHVuaW9uQnlgLCBgdW5pb25XaXRoYCwgYHVuaXFgLCBgdW5pcUJ5YCwgYHVuaXFXaXRoYCwgYHVuc2V0YCxcbiAgICAgKiBgdW5zaGlmdGAsIGB1bnppcGAsIGB1bnppcFdpdGhgLCBgdXBkYXRlYCwgYHVwZGF0ZVdpdGhgLCBgdmFsdWVzYCxcbiAgICAgKiBgdmFsdWVzSW5gLCBgd2l0aG91dGAsIGB3cmFwYCwgYHhvcmAsIGB4b3JCeWAsIGB4b3JXaXRoYCwgYHppcGAsXG4gICAgICogYHppcE9iamVjdGAsIGB6aXBPYmplY3REZWVwYCwgYW5kIGB6aXBXaXRoYFxuICAgICAqXG4gICAgICogVGhlIHdyYXBwZXIgbWV0aG9kcyB0aGF0IGFyZSAqKm5vdCoqIGNoYWluYWJsZSBieSBkZWZhdWx0IGFyZTpcbiAgICAgKiBgYWRkYCwgYGF0dGVtcHRgLCBgY2FtZWxDYXNlYCwgYGNhcGl0YWxpemVgLCBgY2VpbGAsIGBjbGFtcGAsIGBjbG9uZWAsXG4gICAgICogYGNsb25lRGVlcGAsIGBjbG9uZURlZXBXaXRoYCwgYGNsb25lV2l0aGAsIGBjb25mb3Jtc1RvYCwgYGRlYnVycmAsXG4gICAgICogYGRlZmF1bHRUb2AsIGBkaXZpZGVgLCBgZWFjaGAsIGBlYWNoUmlnaHRgLCBgZW5kc1dpdGhgLCBgZXFgLCBgZXNjYXBlYCxcbiAgICAgKiBgZXNjYXBlUmVnRXhwYCwgYGV2ZXJ5YCwgYGZpbmRgLCBgZmluZEluZGV4YCwgYGZpbmRLZXlgLCBgZmluZExhc3RgLFxuICAgICAqIGBmaW5kTGFzdEluZGV4YCwgYGZpbmRMYXN0S2V5YCwgYGZpcnN0YCwgYGZsb29yYCwgYGZvckVhY2hgLCBgZm9yRWFjaFJpZ2h0YCxcbiAgICAgKiBgZm9ySW5gLCBgZm9ySW5SaWdodGAsIGBmb3JPd25gLCBgZm9yT3duUmlnaHRgLCBgZ2V0YCwgYGd0YCwgYGd0ZWAsIGBoYXNgLFxuICAgICAqIGBoYXNJbmAsIGBoZWFkYCwgYGlkZW50aXR5YCwgYGluY2x1ZGVzYCwgYGluZGV4T2ZgLCBgaW5SYW5nZWAsIGBpbnZva2VgLFxuICAgICAqIGBpc0FyZ3VtZW50c2AsIGBpc0FycmF5YCwgYGlzQXJyYXlCdWZmZXJgLCBgaXNBcnJheUxpa2VgLCBgaXNBcnJheUxpa2VPYmplY3RgLFxuICAgICAqIGBpc0Jvb2xlYW5gLCBgaXNCdWZmZXJgLCBgaXNEYXRlYCwgYGlzRWxlbWVudGAsIGBpc0VtcHR5YCwgYGlzRXF1YWxgLFxuICAgICAqIGBpc0VxdWFsV2l0aGAsIGBpc0Vycm9yYCwgYGlzRmluaXRlYCwgYGlzRnVuY3Rpb25gLCBgaXNJbnRlZ2VyYCwgYGlzTGVuZ3RoYCxcbiAgICAgKiBgaXNNYXBgLCBgaXNNYXRjaGAsIGBpc01hdGNoV2l0aGAsIGBpc05hTmAsIGBpc05hdGl2ZWAsIGBpc05pbGAsIGBpc051bGxgLFxuICAgICAqIGBpc051bWJlcmAsIGBpc09iamVjdGAsIGBpc09iamVjdExpa2VgLCBgaXNQbGFpbk9iamVjdGAsIGBpc1JlZ0V4cGAsXG4gICAgICogYGlzU2FmZUludGVnZXJgLCBgaXNTZXRgLCBgaXNTdHJpbmdgLCBgaXNVbmRlZmluZWRgLCBgaXNUeXBlZEFycmF5YCxcbiAgICAgKiBgaXNXZWFrTWFwYCwgYGlzV2Vha1NldGAsIGBqb2luYCwgYGtlYmFiQ2FzZWAsIGBsYXN0YCwgYGxhc3RJbmRleE9mYCxcbiAgICAgKiBgbG93ZXJDYXNlYCwgYGxvd2VyRmlyc3RgLCBgbHRgLCBgbHRlYCwgYG1heGAsIGBtYXhCeWAsIGBtZWFuYCwgYG1lYW5CeWAsXG4gICAgICogYG1pbmAsIGBtaW5CeWAsIGBtdWx0aXBseWAsIGBub0NvbmZsaWN0YCwgYG5vb3BgLCBgbm93YCwgYG50aGAsIGBwYWRgLFxuICAgICAqIGBwYWRFbmRgLCBgcGFkU3RhcnRgLCBgcGFyc2VJbnRgLCBgcG9wYCwgYHJhbmRvbWAsIGByZWR1Y2VgLCBgcmVkdWNlUmlnaHRgLFxuICAgICAqIGByZXBlYXRgLCBgcmVzdWx0YCwgYHJvdW5kYCwgYHJ1bkluQ29udGV4dGAsIGBzYW1wbGVgLCBgc2hpZnRgLCBgc2l6ZWAsXG4gICAgICogYHNuYWtlQ2FzZWAsIGBzb21lYCwgYHNvcnRlZEluZGV4YCwgYHNvcnRlZEluZGV4QnlgLCBgc29ydGVkTGFzdEluZGV4YCxcbiAgICAgKiBgc29ydGVkTGFzdEluZGV4QnlgLCBgc3RhcnRDYXNlYCwgYHN0YXJ0c1dpdGhgLCBgc3R1YkFycmF5YCwgYHN0dWJGYWxzZWAsXG4gICAgICogYHN0dWJPYmplY3RgLCBgc3R1YlN0cmluZ2AsIGBzdHViVHJ1ZWAsIGBzdWJ0cmFjdGAsIGBzdW1gLCBgc3VtQnlgLFxuICAgICAqIGB0ZW1wbGF0ZWAsIGB0aW1lc2AsIGB0b0Zpbml0ZWAsIGB0b0ludGVnZXJgLCBgdG9KU09OYCwgYHRvTGVuZ3RoYCxcbiAgICAgKiBgdG9Mb3dlcmAsIGB0b051bWJlcmAsIGB0b1NhZmVJbnRlZ2VyYCwgYHRvU3RyaW5nYCwgYHRvVXBwZXJgLCBgdHJpbWAsXG4gICAgICogYHRyaW1FbmRgLCBgdHJpbVN0YXJ0YCwgYHRydW5jYXRlYCwgYHVuZXNjYXBlYCwgYHVuaXF1ZUlkYCwgYHVwcGVyQ2FzZWAsXG4gICAgICogYHVwcGVyRmlyc3RgLCBgdmFsdWVgLCBhbmQgYHdvcmRzYFxuICAgICAqXG4gICAgICogQG5hbWUgX1xuICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAqIEBjYXRlZ29yeSBTZXFcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byB3cmFwIGluIGEgYGxvZGFzaGAgaW5zdGFuY2UuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IGBsb2Rhc2hgIHdyYXBwZXIgaW5zdGFuY2UuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIHNxdWFyZShuKSB7XG4gICAgICogICByZXR1cm4gbiAqIG47XG4gICAgICogfVxuICAgICAqXG4gICAgICogdmFyIHdyYXBwZWQgPSBfKFsxLCAyLCAzXSk7XG4gICAgICpcbiAgICAgKiAvLyBSZXR1cm5zIGFuIHVud3JhcHBlZCB2YWx1ZS5cbiAgICAgKiB3cmFwcGVkLnJlZHVjZShfLmFkZCk7XG4gICAgICogLy8gPT4gNlxuICAgICAqXG4gICAgICogLy8gUmV0dXJucyBhIHdyYXBwZWQgdmFsdWUuXG4gICAgICogdmFyIHNxdWFyZXMgPSB3cmFwcGVkLm1hcChzcXVhcmUpO1xuICAgICAqXG4gICAgICogXy5pc0FycmF5KHNxdWFyZXMpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLmlzQXJyYXkoc3F1YXJlcy52YWx1ZSgpKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICovXG4gICAgZnVuY3Rpb24gbG9kYXNoKHZhbHVlKSB7XG4gICAgICBpZiAoaXNPYmplY3RMaWtlKHZhbHVlKSAmJiAhaXNBcnJheSh2YWx1ZSkgJiYgISh2YWx1ZSBpbnN0YW5jZW9mIExhenlXcmFwcGVyKSkge1xuICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBMb2Rhc2hXcmFwcGVyKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCAnX193cmFwcGVkX18nKSkge1xuICAgICAgICAgIHJldHVybiB3cmFwcGVyQ2xvbmUodmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IExvZGFzaFdyYXBwZXIodmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmNyZWF0ZWAgd2l0aG91dCBzdXBwb3J0IGZvciBhc3NpZ25pbmdcbiAgICAgKiBwcm9wZXJ0aWVzIHRvIHRoZSBjcmVhdGVkIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHByb3RvIFRoZSBvYmplY3QgdG8gaW5oZXJpdCBmcm9tLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gICAgICovXG4gICAgdmFyIGJhc2VDcmVhdGUgPSAoZnVuY3Rpb24oKSB7XG4gICAgICBmdW5jdGlvbiBvYmplY3QoKSB7fVxuICAgICAgcmV0dXJuIGZ1bmN0aW9uKHByb3RvKSB7XG4gICAgICAgIGlmICghaXNPYmplY3QocHJvdG8pKSB7XG4gICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChvYmplY3RDcmVhdGUpIHtcbiAgICAgICAgICByZXR1cm4gb2JqZWN0Q3JlYXRlKHByb3RvKTtcbiAgICAgICAgfVxuICAgICAgICBvYmplY3QucHJvdG90eXBlID0gcHJvdG87XG4gICAgICAgIHZhciByZXN1bHQgPSBuZXcgb2JqZWN0O1xuICAgICAgICBvYmplY3QucHJvdG90eXBlID0gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfTtcbiAgICB9KCkpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGZ1bmN0aW9uIHdob3NlIHByb3RvdHlwZSBjaGFpbiBzZXF1ZW5jZSB3cmFwcGVycyBpbmhlcml0IGZyb20uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VMb2Rhc2goKSB7XG4gICAgICAvLyBObyBvcGVyYXRpb24gcGVyZm9ybWVkLlxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGNvbnN0cnVjdG9yIGZvciBjcmVhdGluZyBgbG9kYXNoYCB3cmFwcGVyIG9iamVjdHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHdyYXAuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbY2hhaW5BbGxdIEVuYWJsZSBleHBsaWNpdCBtZXRob2QgY2hhaW4gc2VxdWVuY2VzLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIExvZGFzaFdyYXBwZXIodmFsdWUsIGNoYWluQWxsKSB7XG4gICAgICB0aGlzLl9fd3JhcHBlZF9fID0gdmFsdWU7XG4gICAgICB0aGlzLl9fYWN0aW9uc19fID0gW107XG4gICAgICB0aGlzLl9fY2hhaW5fXyA9ICEhY2hhaW5BbGw7XG4gICAgICB0aGlzLl9faW5kZXhfXyA9IDA7XG4gICAgICB0aGlzLl9fdmFsdWVzX18gPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQnkgZGVmYXVsdCwgdGhlIHRlbXBsYXRlIGRlbGltaXRlcnMgdXNlZCBieSBsb2Rhc2ggYXJlIGxpa2UgdGhvc2UgaW5cbiAgICAgKiBlbWJlZGRlZCBSdWJ5IChFUkIpIGFzIHdlbGwgYXMgRVMyMDE1IHRlbXBsYXRlIHN0cmluZ3MuIENoYW5nZSB0aGVcbiAgICAgKiBmb2xsb3dpbmcgdGVtcGxhdGUgc2V0dGluZ3MgdG8gdXNlIGFsdGVybmF0aXZlIGRlbGltaXRlcnMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgICAqL1xuICAgIGxvZGFzaC50ZW1wbGF0ZVNldHRpbmdzID0ge1xuXG4gICAgICAvKipcbiAgICAgICAqIFVzZWQgdG8gZGV0ZWN0IGBkYXRhYCBwcm9wZXJ0eSB2YWx1ZXMgdG8gYmUgSFRNTC1lc2NhcGVkLlxuICAgICAgICpcbiAgICAgICAqIEBtZW1iZXJPZiBfLnRlbXBsYXRlU2V0dGluZ3NcbiAgICAgICAqIEB0eXBlIHtSZWdFeHB9XG4gICAgICAgKi9cbiAgICAgICdlc2NhcGUnOiByZUVzY2FwZSxcblxuICAgICAgLyoqXG4gICAgICAgKiBVc2VkIHRvIGRldGVjdCBjb2RlIHRvIGJlIGV2YWx1YXRlZC5cbiAgICAgICAqXG4gICAgICAgKiBAbWVtYmVyT2YgXy50ZW1wbGF0ZVNldHRpbmdzXG4gICAgICAgKiBAdHlwZSB7UmVnRXhwfVxuICAgICAgICovXG4gICAgICAnZXZhbHVhdGUnOiByZUV2YWx1YXRlLFxuXG4gICAgICAvKipcbiAgICAgICAqIFVzZWQgdG8gZGV0ZWN0IGBkYXRhYCBwcm9wZXJ0eSB2YWx1ZXMgdG8gaW5qZWN0LlxuICAgICAgICpcbiAgICAgICAqIEBtZW1iZXJPZiBfLnRlbXBsYXRlU2V0dGluZ3NcbiAgICAgICAqIEB0eXBlIHtSZWdFeHB9XG4gICAgICAgKi9cbiAgICAgICdpbnRlcnBvbGF0ZSc6IHJlSW50ZXJwb2xhdGUsXG5cbiAgICAgIC8qKlxuICAgICAgICogVXNlZCB0byByZWZlcmVuY2UgdGhlIGRhdGEgb2JqZWN0IGluIHRoZSB0ZW1wbGF0ZSB0ZXh0LlxuICAgICAgICpcbiAgICAgICAqIEBtZW1iZXJPZiBfLnRlbXBsYXRlU2V0dGluZ3NcbiAgICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICAgKi9cbiAgICAgICd2YXJpYWJsZSc6ICcnLFxuXG4gICAgICAvKipcbiAgICAgICAqIFVzZWQgdG8gaW1wb3J0IHZhcmlhYmxlcyBpbnRvIHRoZSBjb21waWxlZCB0ZW1wbGF0ZS5cbiAgICAgICAqXG4gICAgICAgKiBAbWVtYmVyT2YgXy50ZW1wbGF0ZVNldHRpbmdzXG4gICAgICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgICAgICovXG4gICAgICAnaW1wb3J0cyc6IHtcblxuICAgICAgICAvKipcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIGBsb2Rhc2hgIGZ1bmN0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWVtYmVyT2YgXy50ZW1wbGF0ZVNldHRpbmdzLmltcG9ydHNcbiAgICAgICAgICogQHR5cGUge0Z1bmN0aW9ufVxuICAgICAgICAgKi9cbiAgICAgICAgJ18nOiBsb2Rhc2hcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gRW5zdXJlIHdyYXBwZXJzIGFyZSBpbnN0YW5jZXMgb2YgYGJhc2VMb2Rhc2hgLlxuICAgIGxvZGFzaC5wcm90b3R5cGUgPSBiYXNlTG9kYXNoLnByb3RvdHlwZTtcbiAgICBsb2Rhc2gucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gbG9kYXNoO1xuXG4gICAgTG9kYXNoV3JhcHBlci5wcm90b3R5cGUgPSBiYXNlQ3JlYXRlKGJhc2VMb2Rhc2gucHJvdG90eXBlKTtcbiAgICBMb2Rhc2hXcmFwcGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IExvZGFzaFdyYXBwZXI7XG5cbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbGF6eSB3cmFwcGVyIG9iamVjdCB3aGljaCB3cmFwcyBgdmFsdWVgIHRvIGVuYWJsZSBsYXp5IGV2YWx1YXRpb24uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHdyYXAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gTGF6eVdyYXBwZXIodmFsdWUpIHtcbiAgICAgIHRoaXMuX193cmFwcGVkX18gPSB2YWx1ZTtcbiAgICAgIHRoaXMuX19hY3Rpb25zX18gPSBbXTtcbiAgICAgIHRoaXMuX19kaXJfXyA9IDE7XG4gICAgICB0aGlzLl9fZmlsdGVyZWRfXyA9IGZhbHNlO1xuICAgICAgdGhpcy5fX2l0ZXJhdGVlc19fID0gW107XG4gICAgICB0aGlzLl9fdGFrZUNvdW50X18gPSBNQVhfQVJSQVlfTEVOR1RIO1xuICAgICAgdGhpcy5fX3ZpZXdzX18gPSBbXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhlIGxhenkgd3JhcHBlciBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIGNsb25lXG4gICAgICogQG1lbWJlck9mIExhenlXcmFwcGVyXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2xvbmVkIGBMYXp5V3JhcHBlcmAgb2JqZWN0LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGxhenlDbG9uZSgpIHtcbiAgICAgIHZhciByZXN1bHQgPSBuZXcgTGF6eVdyYXBwZXIodGhpcy5fX3dyYXBwZWRfXyk7XG4gICAgICByZXN1bHQuX19hY3Rpb25zX18gPSBjb3B5QXJyYXkodGhpcy5fX2FjdGlvbnNfXyk7XG4gICAgICByZXN1bHQuX19kaXJfXyA9IHRoaXMuX19kaXJfXztcbiAgICAgIHJlc3VsdC5fX2ZpbHRlcmVkX18gPSB0aGlzLl9fZmlsdGVyZWRfXztcbiAgICAgIHJlc3VsdC5fX2l0ZXJhdGVlc19fID0gY29weUFycmF5KHRoaXMuX19pdGVyYXRlZXNfXyk7XG4gICAgICByZXN1bHQuX190YWtlQ291bnRfXyA9IHRoaXMuX190YWtlQ291bnRfXztcbiAgICAgIHJlc3VsdC5fX3ZpZXdzX18gPSBjb3B5QXJyYXkodGhpcy5fX3ZpZXdzX18pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXZlcnNlcyB0aGUgZGlyZWN0aW9uIG9mIGxhenkgaXRlcmF0aW9uLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSByZXZlcnNlXG4gICAgICogQG1lbWJlck9mIExhenlXcmFwcGVyXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IHJldmVyc2VkIGBMYXp5V3JhcHBlcmAgb2JqZWN0LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGxhenlSZXZlcnNlKCkge1xuICAgICAgaWYgKHRoaXMuX19maWx0ZXJlZF9fKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBuZXcgTGF6eVdyYXBwZXIodGhpcyk7XG4gICAgICAgIHJlc3VsdC5fX2Rpcl9fID0gLTE7XG4gICAgICAgIHJlc3VsdC5fX2ZpbHRlcmVkX18gPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0ID0gdGhpcy5jbG9uZSgpO1xuICAgICAgICByZXN1bHQuX19kaXJfXyAqPSAtMTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXh0cmFjdHMgdGhlIHVud3JhcHBlZCB2YWx1ZSBmcm9tIGl0cyBsYXp5IHdyYXBwZXIuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIHZhbHVlXG4gICAgICogQG1lbWJlck9mIExhenlXcmFwcGVyXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHVud3JhcHBlZCB2YWx1ZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBsYXp5VmFsdWUoKSB7XG4gICAgICB2YXIgYXJyYXkgPSB0aGlzLl9fd3JhcHBlZF9fLnZhbHVlKCksXG4gICAgICAgICAgZGlyID0gdGhpcy5fX2Rpcl9fLFxuICAgICAgICAgIGlzQXJyID0gaXNBcnJheShhcnJheSksXG4gICAgICAgICAgaXNSaWdodCA9IGRpciA8IDAsXG4gICAgICAgICAgYXJyTGVuZ3RoID0gaXNBcnIgPyBhcnJheS5sZW5ndGggOiAwLFxuICAgICAgICAgIHZpZXcgPSBnZXRWaWV3KDAsIGFyckxlbmd0aCwgdGhpcy5fX3ZpZXdzX18pLFxuICAgICAgICAgIHN0YXJ0ID0gdmlldy5zdGFydCxcbiAgICAgICAgICBlbmQgPSB2aWV3LmVuZCxcbiAgICAgICAgICBsZW5ndGggPSBlbmQgLSBzdGFydCxcbiAgICAgICAgICBpbmRleCA9IGlzUmlnaHQgPyBlbmQgOiAoc3RhcnQgLSAxKSxcbiAgICAgICAgICBpdGVyYXRlZXMgPSB0aGlzLl9faXRlcmF0ZWVzX18sXG4gICAgICAgICAgaXRlckxlbmd0aCA9IGl0ZXJhdGVlcy5sZW5ndGgsXG4gICAgICAgICAgcmVzSW5kZXggPSAwLFxuICAgICAgICAgIHRha2VDb3VudCA9IG5hdGl2ZU1pbihsZW5ndGgsIHRoaXMuX190YWtlQ291bnRfXyk7XG5cbiAgICAgIGlmICghaXNBcnIgfHwgKCFpc1JpZ2h0ICYmIGFyckxlbmd0aCA9PSBsZW5ndGggJiYgdGFrZUNvdW50ID09IGxlbmd0aCkpIHtcbiAgICAgICAgcmV0dXJuIGJhc2VXcmFwcGVyVmFsdWUoYXJyYXksIHRoaXMuX19hY3Rpb25zX18pO1xuICAgICAgfVxuICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuXG4gICAgICBvdXRlcjpcbiAgICAgIHdoaWxlIChsZW5ndGgtLSAmJiByZXNJbmRleCA8IHRha2VDb3VudCkge1xuICAgICAgICBpbmRleCArPSBkaXI7XG5cbiAgICAgICAgdmFyIGl0ZXJJbmRleCA9IC0xLFxuICAgICAgICAgICAgdmFsdWUgPSBhcnJheVtpbmRleF07XG5cbiAgICAgICAgd2hpbGUgKCsraXRlckluZGV4IDwgaXRlckxlbmd0aCkge1xuICAgICAgICAgIHZhciBkYXRhID0gaXRlcmF0ZWVzW2l0ZXJJbmRleF0sXG4gICAgICAgICAgICAgIGl0ZXJhdGVlID0gZGF0YS5pdGVyYXRlZSxcbiAgICAgICAgICAgICAgdHlwZSA9IGRhdGEudHlwZSxcbiAgICAgICAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSh2YWx1ZSk7XG5cbiAgICAgICAgICBpZiAodHlwZSA9PSBMQVpZX01BUF9GTEFHKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IGNvbXB1dGVkO1xuICAgICAgICAgIH0gZWxzZSBpZiAoIWNvbXB1dGVkKSB7XG4gICAgICAgICAgICBpZiAodHlwZSA9PSBMQVpZX0ZJTFRFUl9GTEFHKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlIG91dGVyO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgYnJlYWsgb3V0ZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlc3VsdFtyZXNJbmRleCsrXSA9IHZhbHVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvLyBFbnN1cmUgYExhenlXcmFwcGVyYCBpcyBhbiBpbnN0YW5jZSBvZiBgYmFzZUxvZGFzaGAuXG4gICAgTGF6eVdyYXBwZXIucHJvdG90eXBlID0gYmFzZUNyZWF0ZShiYXNlTG9kYXNoLnByb3RvdHlwZSk7XG4gICAgTGF6eVdyYXBwZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTGF6eVdyYXBwZXI7XG5cbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgaGFzaCBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIEhhc2goZW50cmllcykge1xuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gICAgICB0aGlzLmNsZWFyKCk7XG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICAgICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBoYXNoLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBjbGVhclxuICAgICAqIEBtZW1iZXJPZiBIYXNoXG4gICAgICovXG4gICAgZnVuY3Rpb24gaGFzaENsZWFyKCkge1xuICAgICAgdGhpcy5fX2RhdGFfXyA9IG5hdGl2ZUNyZWF0ZSA/IG5hdGl2ZUNyZWF0ZShudWxsKSA6IHt9O1xuICAgICAgdGhpcy5zaXplID0gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgaGFzaC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgZGVsZXRlXG4gICAgICogQG1lbWJlck9mIEhhc2hcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gaGFzaCBUaGUgaGFzaCB0byBtb2RpZnkuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGhhc2hEZWxldGUoa2V5KSB7XG4gICAgICB2YXIgcmVzdWx0ID0gdGhpcy5oYXMoa2V5KSAmJiBkZWxldGUgdGhpcy5fX2RhdGFfX1trZXldO1xuICAgICAgdGhpcy5zaXplIC09IHJlc3VsdCA/IDEgOiAwO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBoYXNoIHZhbHVlIGZvciBga2V5YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgZ2V0XG4gICAgICogQG1lbWJlck9mIEhhc2hcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaGFzaEdldChrZXkpIHtcbiAgICAgIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgICAgIGlmIChuYXRpdmVDcmVhdGUpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IGRhdGFba2V5XTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdCA9PT0gSEFTSF9VTkRFRklORUQgPyB1bmRlZmluZWQgOiByZXN1bHQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpID8gZGF0YVtrZXldIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBhIGhhc2ggdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgaGFzXG4gICAgICogQG1lbWJlck9mIEhhc2hcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaGFzaEhhcyhrZXkpIHtcbiAgICAgIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgICAgIHJldHVybiBuYXRpdmVDcmVhdGUgPyAoZGF0YVtrZXldICE9PSB1bmRlZmluZWQpIDogaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGhhc2ggYGtleWAgdG8gYHZhbHVlYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgc2V0XG4gICAgICogQG1lbWJlck9mIEhhc2hcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaGFzaCBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBoYXNoU2V0KGtleSwgdmFsdWUpIHtcbiAgICAgIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgICAgIHRoaXMuc2l6ZSArPSB0aGlzLmhhcyhrZXkpID8gMCA6IDE7XG4gICAgICBkYXRhW2tleV0gPSAobmF0aXZlQ3JlYXRlICYmIHZhbHVlID09PSB1bmRlZmluZWQpID8gSEFTSF9VTkRFRklORUQgOiB2YWx1ZTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vIEFkZCBtZXRob2RzIHRvIGBIYXNoYC5cbiAgICBIYXNoLnByb3RvdHlwZS5jbGVhciA9IGhhc2hDbGVhcjtcbiAgICBIYXNoLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBoYXNoRGVsZXRlO1xuICAgIEhhc2gucHJvdG90eXBlLmdldCA9IGhhc2hHZXQ7XG4gICAgSGFzaC5wcm90b3R5cGUuaGFzID0gaGFzaEhhcztcbiAgICBIYXNoLnByb3RvdHlwZS5zZXQgPSBoYXNoU2V0O1xuXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBsaXN0IGNhY2hlIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQGNvbnN0cnVjdG9yXG4gICAgICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gTGlzdENhY2hlKGVudHJpZXMpIHtcbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcblxuICAgICAgdGhpcy5jbGVhcigpO1xuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgbGlzdCBjYWNoZS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgY2xlYXJcbiAgICAgKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gICAgICovXG4gICAgZnVuY3Rpb24gbGlzdENhY2hlQ2xlYXIoKSB7XG4gICAgICB0aGlzLl9fZGF0YV9fID0gW107XG4gICAgICB0aGlzLnNpemUgPSAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBsaXN0IGNhY2hlLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBkZWxldGVcbiAgICAgKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGxpc3RDYWNoZURlbGV0ZShrZXkpIHtcbiAgICAgIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gICAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHZhciBsYXN0SW5kZXggPSBkYXRhLmxlbmd0aCAtIDE7XG4gICAgICBpZiAoaW5kZXggPT0gbGFzdEluZGV4KSB7XG4gICAgICAgIGRhdGEucG9wKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzcGxpY2UuY2FsbChkYXRhLCBpbmRleCwgMSk7XG4gICAgICB9XG4gICAgICAtLXRoaXMuc2l6ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGxpc3QgY2FjaGUgdmFsdWUgZm9yIGBrZXlgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBnZXRcbiAgICAgKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGxpc3RDYWNoZUdldChrZXkpIHtcbiAgICAgIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gICAgICByZXR1cm4gaW5kZXggPCAwID8gdW5kZWZpbmVkIDogZGF0YVtpbmRleF1bMV07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGEgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBoYXNcbiAgICAgKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGxpc3RDYWNoZUhhcyhrZXkpIHtcbiAgICAgIHJldHVybiBhc3NvY0luZGV4T2YodGhpcy5fX2RhdGFfXywga2V5KSA+IC0xO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGxpc3QgY2FjaGUgYGtleWAgdG8gYHZhbHVlYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgc2V0XG4gICAgICogQG1lbWJlck9mIExpc3RDYWNoZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBsaXN0IGNhY2hlIGluc3RhbmNlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGxpc3RDYWNoZVNldChrZXksIHZhbHVlKSB7XG4gICAgICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICAgICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgICArK3RoaXMuc2l6ZTtcbiAgICAgICAgZGF0YS5wdXNoKFtrZXksIHZhbHVlXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkYXRhW2luZGV4XVsxXSA9IHZhbHVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8gQWRkIG1ldGhvZHMgdG8gYExpc3RDYWNoZWAuXG4gICAgTGlzdENhY2hlLnByb3RvdHlwZS5jbGVhciA9IGxpc3RDYWNoZUNsZWFyO1xuICAgIExpc3RDYWNoZS5wcm90b3R5cGVbJ2RlbGV0ZSddID0gbGlzdENhY2hlRGVsZXRlO1xuICAgIExpc3RDYWNoZS5wcm90b3R5cGUuZ2V0ID0gbGlzdENhY2hlR2V0O1xuICAgIExpc3RDYWNoZS5wcm90b3R5cGUuaGFzID0gbGlzdENhY2hlSGFzO1xuICAgIExpc3RDYWNoZS5wcm90b3R5cGUuc2V0ID0gbGlzdENhY2hlU2V0O1xuXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG1hcCBjYWNoZSBvYmplY3QgdG8gc3RvcmUga2V5LXZhbHVlIHBhaXJzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBNYXBDYWNoZShlbnRyaWVzKSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgICAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIG1hcC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgY2xlYXJcbiAgICAgKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtYXBDYWNoZUNsZWFyKCkge1xuICAgICAgdGhpcy5zaXplID0gMDtcbiAgICAgIHRoaXMuX19kYXRhX18gPSB7XG4gICAgICAgICdoYXNoJzogbmV3IEhhc2gsXG4gICAgICAgICdtYXAnOiBuZXcgKE1hcCB8fCBMaXN0Q2FjaGUpLFxuICAgICAgICAnc3RyaW5nJzogbmV3IEhhc2hcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIG1hcC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgZGVsZXRlXG4gICAgICogQG1lbWJlck9mIE1hcENhY2hlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1hcENhY2hlRGVsZXRlKGtleSkge1xuICAgICAgdmFyIHJlc3VsdCA9IGdldE1hcERhdGEodGhpcywga2V5KVsnZGVsZXRlJ10oa2V5KTtcbiAgICAgIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgbWFwIHZhbHVlIGZvciBga2V5YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgZ2V0XG4gICAgICogQG1lbWJlck9mIE1hcENhY2hlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1hcENhY2hlR2V0KGtleSkge1xuICAgICAgcmV0dXJuIGdldE1hcERhdGEodGhpcywga2V5KS5nZXQoa2V5KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYSBtYXAgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgaGFzXG4gICAgICogQG1lbWJlck9mIE1hcENhY2hlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1hcENhY2hlSGFzKGtleSkge1xuICAgICAgcmV0dXJuIGdldE1hcERhdGEodGhpcywga2V5KS5oYXMoa2V5KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBtYXAgYGtleWAgdG8gYHZhbHVlYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgc2V0XG4gICAgICogQG1lbWJlck9mIE1hcENhY2hlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG1hcCBjYWNoZSBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtYXBDYWNoZVNldChrZXksIHZhbHVlKSB7XG4gICAgICB2YXIgZGF0YSA9IGdldE1hcERhdGEodGhpcywga2V5KSxcbiAgICAgICAgICBzaXplID0gZGF0YS5zaXplO1xuXG4gICAgICBkYXRhLnNldChrZXksIHZhbHVlKTtcbiAgICAgIHRoaXMuc2l6ZSArPSBkYXRhLnNpemUgPT0gc2l6ZSA/IDAgOiAxO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8gQWRkIG1ldGhvZHMgdG8gYE1hcENhY2hlYC5cbiAgICBNYXBDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBtYXBDYWNoZUNsZWFyO1xuICAgIE1hcENhY2hlLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBtYXBDYWNoZURlbGV0ZTtcbiAgICBNYXBDYWNoZS5wcm90b3R5cGUuZ2V0ID0gbWFwQ2FjaGVHZXQ7XG4gICAgTWFwQ2FjaGUucHJvdG90eXBlLmhhcyA9IG1hcENhY2hlSGFzO1xuICAgIE1hcENhY2hlLnByb3RvdHlwZS5zZXQgPSBtYXBDYWNoZVNldDtcblxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBjYWNoZSBvYmplY3QgdG8gc3RvcmUgdW5pcXVlIHZhbHVlcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQGNvbnN0cnVjdG9yXG4gICAgICogQHBhcmFtIHtBcnJheX0gW3ZhbHVlc10gVGhlIHZhbHVlcyB0byBjYWNoZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBTZXRDYWNoZSh2YWx1ZXMpIHtcbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGxlbmd0aCA9IHZhbHVlcyA9PSBudWxsID8gMCA6IHZhbHVlcy5sZW5ndGg7XG5cbiAgICAgIHRoaXMuX19kYXRhX18gPSBuZXcgTWFwQ2FjaGU7XG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICB0aGlzLmFkZCh2YWx1ZXNbaW5kZXhdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGB2YWx1ZWAgdG8gdGhlIGFycmF5IGNhY2hlLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBhZGRcbiAgICAgKiBAbWVtYmVyT2YgU2V0Q2FjaGVcbiAgICAgKiBAYWxpYXMgcHVzaFxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNhY2hlLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNhY2hlIGluc3RhbmNlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNldENhY2hlQWRkKHZhbHVlKSB7XG4gICAgICB0aGlzLl9fZGF0YV9fLnNldCh2YWx1ZSwgSEFTSF9VTkRFRklORUQpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgaW4gdGhlIGFycmF5IGNhY2hlLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBoYXNcbiAgICAgKiBAbWVtYmVyT2YgU2V0Q2FjaGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgZm91bmQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzZXRDYWNoZUhhcyh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvLyBBZGQgbWV0aG9kcyB0byBgU2V0Q2FjaGVgLlxuICAgIFNldENhY2hlLnByb3RvdHlwZS5hZGQgPSBTZXRDYWNoZS5wcm90b3R5cGUucHVzaCA9IHNldENhY2hlQWRkO1xuICAgIFNldENhY2hlLnByb3RvdHlwZS5oYXMgPSBzZXRDYWNoZUhhcztcblxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBzdGFjayBjYWNoZSBvYmplY3QgdG8gc3RvcmUga2V5LXZhbHVlIHBhaXJzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBTdGFjayhlbnRyaWVzKSB7XG4gICAgICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18gPSBuZXcgTGlzdENhY2hlKGVudHJpZXMpO1xuICAgICAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIHN0YWNrLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBjbGVhclxuICAgICAqIEBtZW1iZXJPZiBTdGFja1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHN0YWNrQ2xlYXIoKSB7XG4gICAgICB0aGlzLl9fZGF0YV9fID0gbmV3IExpc3RDYWNoZTtcbiAgICAgIHRoaXMuc2l6ZSA9IDA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIHN0YWNrLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBkZWxldGVcbiAgICAgKiBAbWVtYmVyT2YgU3RhY2tcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gc3RhY2tEZWxldGUoa2V5KSB7XG4gICAgICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICAgICAgcmVzdWx0ID0gZGF0YVsnZGVsZXRlJ10oa2V5KTtcblxuICAgICAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBzdGFjayB2YWx1ZSBmb3IgYGtleWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIGdldFxuICAgICAqIEBtZW1iZXJPZiBTdGFja1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzdGFja0dldChrZXkpIHtcbiAgICAgIHJldHVybiB0aGlzLl9fZGF0YV9fLmdldChrZXkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBhIHN0YWNrIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIGhhc1xuICAgICAqIEBtZW1iZXJPZiBTdGFja1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzdGFja0hhcyhrZXkpIHtcbiAgICAgIHJldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhrZXkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0YWNrIGBrZXlgIHRvIGB2YWx1ZWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIHNldFxuICAgICAqIEBtZW1iZXJPZiBTdGFja1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBzdGFjayBjYWNoZSBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzdGFja1NldChrZXksIHZhbHVlKSB7XG4gICAgICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gICAgICBpZiAoZGF0YSBpbnN0YW5jZW9mIExpc3RDYWNoZSkge1xuICAgICAgICB2YXIgcGFpcnMgPSBkYXRhLl9fZGF0YV9fO1xuICAgICAgICBpZiAoIU1hcCB8fCAocGFpcnMubGVuZ3RoIDwgTEFSR0VfQVJSQVlfU0laRSAtIDEpKSB7XG4gICAgICAgICAgcGFpcnMucHVzaChba2V5LCB2YWx1ZV0pO1xuICAgICAgICAgIHRoaXMuc2l6ZSA9ICsrZGF0YS5zaXplO1xuICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIGRhdGEgPSB0aGlzLl9fZGF0YV9fID0gbmV3IE1hcENhY2hlKHBhaXJzKTtcbiAgICAgIH1cbiAgICAgIGRhdGEuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8gQWRkIG1ldGhvZHMgdG8gYFN0YWNrYC5cbiAgICBTdGFjay5wcm90b3R5cGUuY2xlYXIgPSBzdGFja0NsZWFyO1xuICAgIFN0YWNrLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBzdGFja0RlbGV0ZTtcbiAgICBTdGFjay5wcm90b3R5cGUuZ2V0ID0gc3RhY2tHZXQ7XG4gICAgU3RhY2sucHJvdG90eXBlLmhhcyA9IHN0YWNrSGFzO1xuICAgIFN0YWNrLnByb3RvdHlwZS5zZXQgPSBzdGFja1NldDtcblxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgdGhlIGFycmF5LWxpa2UgYHZhbHVlYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBpbmhlcml0ZWQgU3BlY2lmeSByZXR1cm5pbmcgaW5oZXJpdGVkIHByb3BlcnR5IG5hbWVzLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYXJyYXlMaWtlS2V5cyh2YWx1ZSwgaW5oZXJpdGVkKSB7XG4gICAgICB2YXIgaXNBcnIgPSBpc0FycmF5KHZhbHVlKSxcbiAgICAgICAgICBpc0FyZyA9ICFpc0FyciAmJiBpc0FyZ3VtZW50cyh2YWx1ZSksXG4gICAgICAgICAgaXNCdWZmID0gIWlzQXJyICYmICFpc0FyZyAmJiBpc0J1ZmZlcih2YWx1ZSksXG4gICAgICAgICAgaXNUeXBlID0gIWlzQXJyICYmICFpc0FyZyAmJiAhaXNCdWZmICYmIGlzVHlwZWRBcnJheSh2YWx1ZSksXG4gICAgICAgICAgc2tpcEluZGV4ZXMgPSBpc0FyciB8fCBpc0FyZyB8fCBpc0J1ZmYgfHwgaXNUeXBlLFxuICAgICAgICAgIHJlc3VsdCA9IHNraXBJbmRleGVzID8gYmFzZVRpbWVzKHZhbHVlLmxlbmd0aCwgU3RyaW5nKSA6IFtdLFxuICAgICAgICAgIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGg7XG5cbiAgICAgIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xuICAgICAgICBpZiAoKGluaGVyaXRlZCB8fCBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBrZXkpKSAmJlxuICAgICAgICAgICAgIShza2lwSW5kZXhlcyAmJiAoXG4gICAgICAgICAgICAgICAvLyBTYWZhcmkgOSBoYXMgZW51bWVyYWJsZSBgYXJndW1lbnRzLmxlbmd0aGAgaW4gc3RyaWN0IG1vZGUuXG4gICAgICAgICAgICAgICBrZXkgPT0gJ2xlbmd0aCcgfHxcbiAgICAgICAgICAgICAgIC8vIE5vZGUuanMgMC4xMCBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiBidWZmZXJzLlxuICAgICAgICAgICAgICAgKGlzQnVmZiAmJiAoa2V5ID09ICdvZmZzZXQnIHx8IGtleSA9PSAncGFyZW50JykpIHx8XG4gICAgICAgICAgICAgICAvLyBQaGFudG9tSlMgMiBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiB0eXBlZCBhcnJheXMuXG4gICAgICAgICAgICAgICAoaXNUeXBlICYmIChrZXkgPT0gJ2J1ZmZlcicgfHwga2V5ID09ICdieXRlTGVuZ3RoJyB8fCBrZXkgPT0gJ2J5dGVPZmZzZXQnKSkgfHxcbiAgICAgICAgICAgICAgIC8vIFNraXAgaW5kZXggcHJvcGVydGllcy5cbiAgICAgICAgICAgICAgIGlzSW5kZXgoa2V5LCBsZW5ndGgpXG4gICAgICAgICAgICApKSkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLnNhbXBsZWAgZm9yIGFycmF5cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHNhbXBsZS5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmFuZG9tIGVsZW1lbnQuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYXJyYXlTYW1wbGUoYXJyYXkpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG4gICAgICByZXR1cm4gbGVuZ3RoID8gYXJyYXlbYmFzZVJhbmRvbSgwLCBsZW5ndGggLSAxKV0gOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLnNhbXBsZVNpemVgIGZvciBhcnJheXMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBzYW1wbGUuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciBvZiBlbGVtZW50cyB0byBzYW1wbGUuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSByYW5kb20gZWxlbWVudHMuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYXJyYXlTYW1wbGVTaXplKGFycmF5LCBuKSB7XG4gICAgICByZXR1cm4gc2h1ZmZsZVNlbGYoY29weUFycmF5KGFycmF5KSwgYmFzZUNsYW1wKG4sIDAsIGFycmF5Lmxlbmd0aCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5zaHVmZmxlYCBmb3IgYXJyYXlzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gc2h1ZmZsZS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBzaHVmZmxlZCBhcnJheS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBhcnJheVNodWZmbGUoYXJyYXkpIHtcbiAgICAgIHJldHVybiBzaHVmZmxlU2VsZihjb3B5QXJyYXkoYXJyYXkpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2UgYGFzc2lnblZhbHVlYCBleGNlcHQgdGhhdCBpdCBkb2Vzbid0IGFzc2lnblxuICAgICAqIGB1bmRlZmluZWRgIHZhbHVlcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBhc3NpZ24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gYXNzaWduTWVyZ2VWYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgICAgIGlmICgodmFsdWUgIT09IHVuZGVmaW5lZCAmJiAhZXEob2JqZWN0W2tleV0sIHZhbHVlKSkgfHxcbiAgICAgICAgICAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiAhKGtleSBpbiBvYmplY3QpKSkge1xuICAgICAgICBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBc3NpZ25zIGB2YWx1ZWAgdG8gYGtleWAgb2YgYG9iamVjdGAgaWYgdGhlIGV4aXN0aW5nIHZhbHVlIGlzIG5vdCBlcXVpdmFsZW50XG4gICAgICogdXNpbmcgW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAgICAgKiBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBhc3NpZ24uXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYXNzaWduLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICAgICAgdmFyIG9ialZhbHVlID0gb2JqZWN0W2tleV07XG4gICAgICBpZiAoIShoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSAmJiBlcShvYmpWYWx1ZSwgdmFsdWUpKSB8fFxuICAgICAgICAgICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmICEoa2V5IGluIG9iamVjdCkpKSB7XG4gICAgICAgIGJhc2VBc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGluZGV4IGF0IHdoaWNoIHRoZSBga2V5YCBpcyBmb3VuZCBpbiBgYXJyYXlgIG9mIGtleS12YWx1ZSBwYWlycy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHsqfSBrZXkgVGhlIGtleSB0byBzZWFyY2ggZm9yLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYXNzb2NJbmRleE9mKGFycmF5LCBrZXkpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG4gICAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgICAgaWYgKGVxKGFycmF5W2xlbmd0aF1bMF0sIGtleSkpIHtcbiAgICAgICAgICByZXR1cm4gbGVuZ3RoO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWdncmVnYXRlcyBlbGVtZW50cyBvZiBgY29sbGVjdGlvbmAgb24gYGFjY3VtdWxhdG9yYCB3aXRoIGtleXMgdHJhbnNmb3JtZWRcbiAgICAgKiBieSBgaXRlcmF0ZWVgIGFuZCB2YWx1ZXMgc2V0IGJ5IGBzZXR0ZXJgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gc2V0dGVyIFRoZSBmdW5jdGlvbiB0byBzZXQgYGFjY3VtdWxhdG9yYCB2YWx1ZXMuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGl0ZXJhdGVlIHRvIHRyYW5zZm9ybSBrZXlzLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBhY2N1bXVsYXRvciBUaGUgaW5pdGlhbCBhZ2dyZWdhdGVkIG9iamVjdC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGFjY3VtdWxhdG9yYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlQWdncmVnYXRvcihjb2xsZWN0aW9uLCBzZXR0ZXIsIGl0ZXJhdGVlLCBhY2N1bXVsYXRvcikge1xuICAgICAgYmFzZUVhY2goY29sbGVjdGlvbiwgZnVuY3Rpb24odmFsdWUsIGtleSwgY29sbGVjdGlvbikge1xuICAgICAgICBzZXR0ZXIoYWNjdW11bGF0b3IsIHZhbHVlLCBpdGVyYXRlZSh2YWx1ZSksIGNvbGxlY3Rpb24pO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gYWNjdW11bGF0b3I7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uYXNzaWduYCB3aXRob3V0IHN1cHBvcnQgZm9yIG11bHRpcGxlIHNvdXJjZXNcbiAgICAgKiBvciBgY3VzdG9taXplcmAgZnVuY3Rpb25zLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgc291cmNlIG9iamVjdC5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VBc3NpZ24ob2JqZWN0LCBzb3VyY2UpIHtcbiAgICAgIHJldHVybiBvYmplY3QgJiYgY29weU9iamVjdChzb3VyY2UsIGtleXMoc291cmNlKSwgb2JqZWN0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5hc3NpZ25JbmAgd2l0aG91dCBzdXBwb3J0IGZvciBtdWx0aXBsZSBzb3VyY2VzXG4gICAgICogb3IgYGN1c3RvbWl6ZXJgIGZ1bmN0aW9ucy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIHNvdXJjZSBvYmplY3QuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlQXNzaWduSW4ob2JqZWN0LCBzb3VyY2UpIHtcbiAgICAgIHJldHVybiBvYmplY3QgJiYgY29weU9iamVjdChzb3VyY2UsIGtleXNJbihzb3VyY2UpLCBvYmplY3QpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBhc3NpZ25WYWx1ZWAgYW5kIGBhc3NpZ25NZXJnZVZhbHVlYCB3aXRob3V0XG4gICAgICogdmFsdWUgY2hlY2tzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gICAgICBpZiAoa2V5ID09ICdfX3Byb3RvX18nICYmIGRlZmluZVByb3BlcnR5KSB7XG4gICAgICAgIGRlZmluZVByb3BlcnR5KG9iamVjdCwga2V5LCB7XG4gICAgICAgICAgJ2NvbmZpZ3VyYWJsZSc6IHRydWUsXG4gICAgICAgICAgJ2VudW1lcmFibGUnOiB0cnVlLFxuICAgICAgICAgICd2YWx1ZSc6IHZhbHVlLFxuICAgICAgICAgICd3cml0YWJsZSc6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmF0YCB3aXRob3V0IHN1cHBvcnQgZm9yIGluZGl2aWR1YWwgcGF0aHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtzdHJpbmdbXX0gcGF0aHMgVGhlIHByb3BlcnR5IHBhdGhzIHRvIHBpY2suXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBwaWNrZWQgZWxlbWVudHMuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUF0KG9iamVjdCwgcGF0aHMpIHtcbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGxlbmd0aCA9IHBhdGhzLmxlbmd0aCxcbiAgICAgICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpLFxuICAgICAgICAgIHNraXAgPSBvYmplY3QgPT0gbnVsbDtcblxuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgcmVzdWx0W2luZGV4XSA9IHNraXAgPyB1bmRlZmluZWQgOiBnZXQob2JqZWN0LCBwYXRoc1tpbmRleF0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5jbGFtcGAgd2hpY2ggZG9lc24ndCBjb2VyY2UgYXJndW1lbnRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbnVtYmVyIFRoZSBudW1iZXIgdG8gY2xhbXAuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtsb3dlcl0gVGhlIGxvd2VyIGJvdW5kLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB1cHBlciBUaGUgdXBwZXIgYm91bmQuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgY2xhbXBlZCBudW1iZXIuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUNsYW1wKG51bWJlciwgbG93ZXIsIHVwcGVyKSB7XG4gICAgICBpZiAobnVtYmVyID09PSBudW1iZXIpIHtcbiAgICAgICAgaWYgKHVwcGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBudW1iZXIgPSBudW1iZXIgPD0gdXBwZXIgPyBudW1iZXIgOiB1cHBlcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG93ZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIG51bWJlciA9IG51bWJlciA+PSBsb3dlciA/IG51bWJlciA6IGxvd2VyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVtYmVyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmNsb25lYCBhbmQgYF8uY2xvbmVEZWVwYCB3aGljaCB0cmFja3NcbiAgICAgKiB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2xvbmUuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLlxuICAgICAqICAxIC0gRGVlcCBjbG9uZVxuICAgICAqICAyIC0gRmxhdHRlbiBpbmhlcml0ZWQgcHJvcGVydGllc1xuICAgICAqICA0IC0gQ2xvbmUgc3ltYm9sc1xuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNsb25pbmcuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtrZXldIFRoZSBrZXkgb2YgYHZhbHVlYC5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIHBhcmVudCBvYmplY3Qgb2YgYHZhbHVlYC5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW3N0YWNrXSBUcmFja3MgdHJhdmVyc2VkIG9iamVjdHMgYW5kIHRoZWlyIGNsb25lIGNvdW50ZXJwYXJ0cy5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgY2xvbmVkIHZhbHVlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VDbG9uZSh2YWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwga2V5LCBvYmplY3QsIHN0YWNrKSB7XG4gICAgICB2YXIgcmVzdWx0LFxuICAgICAgICAgIGlzRGVlcCA9IGJpdG1hc2sgJiBDTE9ORV9ERUVQX0ZMQUcsXG4gICAgICAgICAgaXNGbGF0ID0gYml0bWFzayAmIENMT05FX0ZMQVRfRkxBRyxcbiAgICAgICAgICBpc0Z1bGwgPSBiaXRtYXNrICYgQ0xPTkVfU1lNQk9MU19GTEFHO1xuXG4gICAgICBpZiAoY3VzdG9taXplcikge1xuICAgICAgICByZXN1bHQgPSBvYmplY3QgPyBjdXN0b21pemVyKHZhbHVlLCBrZXksIG9iamVjdCwgc3RhY2spIDogY3VzdG9taXplcih2YWx1ZSk7XG4gICAgICB9XG4gICAgICBpZiAocmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICAgIGlmICghaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIHZhciBpc0FyciA9IGlzQXJyYXkodmFsdWUpO1xuICAgICAgaWYgKGlzQXJyKSB7XG4gICAgICAgIHJlc3VsdCA9IGluaXRDbG9uZUFycmF5KHZhbHVlKTtcbiAgICAgICAgaWYgKCFpc0RlZXApIHtcbiAgICAgICAgICByZXR1cm4gY29weUFycmF5KHZhbHVlLCByZXN1bHQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgdGFnID0gZ2V0VGFnKHZhbHVlKSxcbiAgICAgICAgICAgIGlzRnVuYyA9IHRhZyA9PSBmdW5jVGFnIHx8IHRhZyA9PSBnZW5UYWc7XG5cbiAgICAgICAgaWYgKGlzQnVmZmVyKHZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiBjbG9uZUJ1ZmZlcih2YWx1ZSwgaXNEZWVwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGFnID09IG9iamVjdFRhZyB8fCB0YWcgPT0gYXJnc1RhZyB8fCAoaXNGdW5jICYmICFvYmplY3QpKSB7XG4gICAgICAgICAgcmVzdWx0ID0gKGlzRmxhdCB8fCBpc0Z1bmMpID8ge30gOiBpbml0Q2xvbmVPYmplY3QodmFsdWUpO1xuICAgICAgICAgIGlmICghaXNEZWVwKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNGbGF0XG4gICAgICAgICAgICAgID8gY29weVN5bWJvbHNJbih2YWx1ZSwgYmFzZUFzc2lnbkluKHJlc3VsdCwgdmFsdWUpKVxuICAgICAgICAgICAgICA6IGNvcHlTeW1ib2xzKHZhbHVlLCBiYXNlQXNzaWduKHJlc3VsdCwgdmFsdWUpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKCFjbG9uZWFibGVUYWdzW3RhZ10pIHtcbiAgICAgICAgICAgIHJldHVybiBvYmplY3QgPyB2YWx1ZSA6IHt9O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXN1bHQgPSBpbml0Q2xvbmVCeVRhZyh2YWx1ZSwgdGFnLCBpc0RlZXApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBDaGVjayBmb3IgY2lyY3VsYXIgcmVmZXJlbmNlcyBhbmQgcmV0dXJuIGl0cyBjb3JyZXNwb25kaW5nIGNsb25lLlxuICAgICAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgICAgIHZhciBzdGFja2VkID0gc3RhY2suZ2V0KHZhbHVlKTtcbiAgICAgIGlmIChzdGFja2VkKSB7XG4gICAgICAgIHJldHVybiBzdGFja2VkO1xuICAgICAgfVxuICAgICAgc3RhY2suc2V0KHZhbHVlLCByZXN1bHQpO1xuXG4gICAgICBpZiAoaXNTZXQodmFsdWUpKSB7XG4gICAgICAgIHZhbHVlLmZvckVhY2goZnVuY3Rpb24oc3ViVmFsdWUpIHtcbiAgICAgICAgICByZXN1bHQuYWRkKGJhc2VDbG9uZShzdWJWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwgc3ViVmFsdWUsIHZhbHVlLCBzdGFjaykpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoaXNNYXAodmFsdWUpKSB7XG4gICAgICAgIHZhbHVlLmZvckVhY2goZnVuY3Rpb24oc3ViVmFsdWUsIGtleSkge1xuICAgICAgICAgIHJlc3VsdC5zZXQoa2V5LCBiYXNlQ2xvbmUoc3ViVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGtleSwgdmFsdWUsIHN0YWNrKSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB2YXIga2V5c0Z1bmMgPSBpc0Z1bGxcbiAgICAgICAgPyAoaXNGbGF0ID8gZ2V0QWxsS2V5c0luIDogZ2V0QWxsS2V5cylcbiAgICAgICAgOiAoaXNGbGF0ID8ga2V5c0luIDoga2V5cyk7XG5cbiAgICAgIHZhciBwcm9wcyA9IGlzQXJyID8gdW5kZWZpbmVkIDoga2V5c0Z1bmModmFsdWUpO1xuICAgICAgYXJyYXlFYWNoKHByb3BzIHx8IHZhbHVlLCBmdW5jdGlvbihzdWJWYWx1ZSwga2V5KSB7XG4gICAgICAgIGlmIChwcm9wcykge1xuICAgICAgICAgIGtleSA9IHN1YlZhbHVlO1xuICAgICAgICAgIHN1YlZhbHVlID0gdmFsdWVba2V5XTtcbiAgICAgICAgfVxuICAgICAgICAvLyBSZWN1cnNpdmVseSBwb3B1bGF0ZSBjbG9uZSAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgICAgICBhc3NpZ25WYWx1ZShyZXN1bHQsIGtleSwgYmFzZUNsb25lKHN1YlZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBrZXksIHZhbHVlLCBzdGFjaykpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmNvbmZvcm1zYCB3aGljaCBkb2Vzbid0IGNsb25lIGBzb3VyY2VgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3Qgb2YgcHJvcGVydHkgcHJlZGljYXRlcyB0byBjb25mb3JtIHRvLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNwZWMgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUNvbmZvcm1zKHNvdXJjZSkge1xuICAgICAgdmFyIHByb3BzID0ga2V5cyhzb3VyY2UpO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgICAgICByZXR1cm4gYmFzZUNvbmZvcm1zVG8ob2JqZWN0LCBzb3VyY2UsIHByb3BzKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uY29uZm9ybXNUb2Agd2hpY2ggYWNjZXB0cyBgcHJvcHNgIHRvIGNoZWNrLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3Qgb2YgcHJvcGVydHkgcHJlZGljYXRlcyB0byBjb25mb3JtIHRvLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgb2JqZWN0YCBjb25mb3JtcywgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VDb25mb3Jtc1RvKG9iamVjdCwgc291cmNlLCBwcm9wcykge1xuICAgICAgdmFyIGxlbmd0aCA9IHByb3BzLmxlbmd0aDtcbiAgICAgIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gIWxlbmd0aDtcbiAgICAgIH1cbiAgICAgIG9iamVjdCA9IE9iamVjdChvYmplY3QpO1xuICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAgIHZhciBrZXkgPSBwcm9wc1tsZW5ndGhdLFxuICAgICAgICAgICAgcHJlZGljYXRlID0gc291cmNlW2tleV0sXG4gICAgICAgICAgICB2YWx1ZSA9IG9iamVjdFtrZXldO1xuXG4gICAgICAgIGlmICgodmFsdWUgPT09IHVuZGVmaW5lZCAmJiAhKGtleSBpbiBvYmplY3QpKSB8fCAhcHJlZGljYXRlKHZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZGVsYXlgIGFuZCBgXy5kZWZlcmAgd2hpY2ggYWNjZXB0cyBgYXJnc2BcbiAgICAgKiB0byBwcm92aWRlIHRvIGBmdW5jYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gZGVsYXkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHdhaXQgVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gZGVsYXkgaW52b2NhdGlvbi5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcmdzIFRoZSBhcmd1bWVudHMgdG8gcHJvdmlkZSB0byBgZnVuY2AuXG4gICAgICogQHJldHVybnMge251bWJlcnxPYmplY3R9IFJldHVybnMgdGhlIHRpbWVyIGlkIG9yIHRpbWVvdXQgb2JqZWN0LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VEZWxheShmdW5jLCB3YWl0LCBhcmdzKSB7XG4gICAgICBpZiAodHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbigpIHsgZnVuYy5hcHBseSh1bmRlZmluZWQsIGFyZ3MpOyB9LCB3YWl0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBtZXRob2RzIGxpa2UgYF8uZGlmZmVyZW5jZWAgd2l0aG91dCBzdXBwb3J0XG4gICAgICogZm9yIGV4Y2x1ZGluZyBtdWx0aXBsZSBhcnJheXMgb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gZXhjbHVkZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWVdIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjb21wYXJhdG9yXSBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGZpbHRlcmVkIHZhbHVlcy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlRGlmZmVyZW5jZShhcnJheSwgdmFsdWVzLCBpdGVyYXRlZSwgY29tcGFyYXRvcikge1xuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgaW5jbHVkZXMgPSBhcnJheUluY2x1ZGVzLFxuICAgICAgICAgIGlzQ29tbW9uID0gdHJ1ZSxcbiAgICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICAgICAgcmVzdWx0ID0gW10sXG4gICAgICAgICAgdmFsdWVzTGVuZ3RoID0gdmFsdWVzLmxlbmd0aDtcblxuICAgICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVyYXRlZSkge1xuICAgICAgICB2YWx1ZXMgPSBhcnJheU1hcCh2YWx1ZXMsIGJhc2VVbmFyeShpdGVyYXRlZSkpO1xuICAgICAgfVxuICAgICAgaWYgKGNvbXBhcmF0b3IpIHtcbiAgICAgICAgaW5jbHVkZXMgPSBhcnJheUluY2x1ZGVzV2l0aDtcbiAgICAgICAgaXNDb21tb24gPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKHZhbHVlcy5sZW5ndGggPj0gTEFSR0VfQVJSQVlfU0laRSkge1xuICAgICAgICBpbmNsdWRlcyA9IGNhY2hlSGFzO1xuICAgICAgICBpc0NvbW1vbiA9IGZhbHNlO1xuICAgICAgICB2YWx1ZXMgPSBuZXcgU2V0Q2FjaGUodmFsdWVzKTtcbiAgICAgIH1cbiAgICAgIG91dGVyOlxuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdLFxuICAgICAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSA9PSBudWxsID8gdmFsdWUgOiBpdGVyYXRlZSh2YWx1ZSk7XG5cbiAgICAgICAgdmFsdWUgPSAoY29tcGFyYXRvciB8fCB2YWx1ZSAhPT0gMCkgPyB2YWx1ZSA6IDA7XG4gICAgICAgIGlmIChpc0NvbW1vbiAmJiBjb21wdXRlZCA9PT0gY29tcHV0ZWQpIHtcbiAgICAgICAgICB2YXIgdmFsdWVzSW5kZXggPSB2YWx1ZXNMZW5ndGg7XG4gICAgICAgICAgd2hpbGUgKHZhbHVlc0luZGV4LS0pIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZXNbdmFsdWVzSW5kZXhdID09PSBjb21wdXRlZCkge1xuICAgICAgICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCFpbmNsdWRlcyh2YWx1ZXMsIGNvbXB1dGVkLCBjb21wYXJhdG9yKSkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mb3JFYWNoYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheXxPYmplY3R9IFJldHVybnMgYGNvbGxlY3Rpb25gLlxuICAgICAqL1xuICAgIHZhciBiYXNlRWFjaCA9IGNyZWF0ZUJhc2VFYWNoKGJhc2VGb3JPd24pO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZm9yRWFjaFJpZ2h0YCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheXxPYmplY3R9IFJldHVybnMgYGNvbGxlY3Rpb25gLlxuICAgICAqL1xuICAgIHZhciBiYXNlRWFjaFJpZ2h0ID0gY3JlYXRlQmFzZUVhY2goYmFzZUZvck93blJpZ2h0LCB0cnVlKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmV2ZXJ5YCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYWxsIGVsZW1lbnRzIHBhc3MgdGhlIHByZWRpY2F0ZSBjaGVjayxcbiAgICAgKiAgZWxzZSBgZmFsc2VgXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUV2ZXJ5KGNvbGxlY3Rpb24sIHByZWRpY2F0ZSkge1xuICAgICAgdmFyIHJlc3VsdCA9IHRydWU7XG4gICAgICBiYXNlRWFjaChjb2xsZWN0aW9uLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pIHtcbiAgICAgICAgcmVzdWx0ID0gISFwcmVkaWNhdGUodmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBtZXRob2RzIGxpa2UgYF8ubWF4YCBhbmQgYF8ubWluYCB3aGljaCBhY2NlcHRzIGFcbiAgICAgKiBgY29tcGFyYXRvcmAgdG8gZGV0ZXJtaW5lIHRoZSBleHRyZW11bSB2YWx1ZS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNvbXBhcmF0b3IgVGhlIGNvbXBhcmF0b3IgdXNlZCB0byBjb21wYXJlIHZhbHVlcy5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZXh0cmVtdW0gdmFsdWUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUV4dHJlbXVtKGFycmF5LCBpdGVyYXRlZSwgY29tcGFyYXRvcikge1xuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF0sXG4gICAgICAgICAgICBjdXJyZW50ID0gaXRlcmF0ZWUodmFsdWUpO1xuXG4gICAgICAgIGlmIChjdXJyZW50ICE9IG51bGwgJiYgKGNvbXB1dGVkID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgPyAoY3VycmVudCA9PT0gY3VycmVudCAmJiAhaXNTeW1ib2woY3VycmVudCkpXG4gICAgICAgICAgICAgIDogY29tcGFyYXRvcihjdXJyZW50LCBjb21wdXRlZClcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICB2YXIgY29tcHV0ZWQgPSBjdXJyZW50LFxuICAgICAgICAgICAgICByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5maWxsYCB3aXRob3V0IGFuIGl0ZXJhdGVlIGNhbGwgZ3VhcmQuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBmaWxsLlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGZpbGwgYGFycmF5YCB3aXRoLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9MF0gVGhlIHN0YXJ0IHBvc2l0aW9uLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbZW5kPWFycmF5Lmxlbmd0aF0gVGhlIGVuZCBwb3NpdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlRmlsbChhcnJheSwgdmFsdWUsIHN0YXJ0LCBlbmQpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgICAgIHN0YXJ0ID0gdG9JbnRlZ2VyKHN0YXJ0KTtcbiAgICAgIGlmIChzdGFydCA8IDApIHtcbiAgICAgICAgc3RhcnQgPSAtc3RhcnQgPiBsZW5ndGggPyAwIDogKGxlbmd0aCArIHN0YXJ0KTtcbiAgICAgIH1cbiAgICAgIGVuZCA9IChlbmQgPT09IHVuZGVmaW5lZCB8fCBlbmQgPiBsZW5ndGgpID8gbGVuZ3RoIDogdG9JbnRlZ2VyKGVuZCk7XG4gICAgICBpZiAoZW5kIDwgMCkge1xuICAgICAgICBlbmQgKz0gbGVuZ3RoO1xuICAgICAgfVxuICAgICAgZW5kID0gc3RhcnQgPiBlbmQgPyAwIDogdG9MZW5ndGgoZW5kKTtcbiAgICAgIHdoaWxlIChzdGFydCA8IGVuZCkge1xuICAgICAgICBhcnJheVtzdGFydCsrXSA9IHZhbHVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFycmF5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZpbHRlcmAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmlsdGVyZWQgYXJyYXkuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUZpbHRlcihjb2xsZWN0aW9uLCBwcmVkaWNhdGUpIHtcbiAgICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICAgIGJhc2VFYWNoKGNvbGxlY3Rpb24sIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbikge1xuICAgICAgICBpZiAocHJlZGljYXRlKHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbikpIHtcbiAgICAgICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mbGF0dGVuYCB3aXRoIHN1cHBvcnQgZm9yIHJlc3RyaWN0aW5nIGZsYXR0ZW5pbmcuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBmbGF0dGVuLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkZXB0aCBUaGUgbWF4aW11bSByZWN1cnNpb24gZGVwdGguXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbcHJlZGljYXRlPWlzRmxhdHRlbmFibGVdIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbaXNTdHJpY3RdIFJlc3RyaWN0IHRvIHZhbHVlcyB0aGF0IHBhc3MgYHByZWRpY2F0ZWAgY2hlY2tzLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFtyZXN1bHQ9W11dIFRoZSBpbml0aWFsIHJlc3VsdCB2YWx1ZS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmbGF0dGVuZWQgYXJyYXkuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUZsYXR0ZW4oYXJyYXksIGRlcHRoLCBwcmVkaWNhdGUsIGlzU3RyaWN0LCByZXN1bHQpIHtcbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICAgICAgcHJlZGljYXRlIHx8IChwcmVkaWNhdGUgPSBpc0ZsYXR0ZW5hYmxlKTtcbiAgICAgIHJlc3VsdCB8fCAocmVzdWx0ID0gW10pO1xuXG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF07XG4gICAgICAgIGlmIChkZXB0aCA+IDAgJiYgcHJlZGljYXRlKHZhbHVlKSkge1xuICAgICAgICAgIGlmIChkZXB0aCA+IDEpIHtcbiAgICAgICAgICAgIC8vIFJlY3Vyc2l2ZWx5IGZsYXR0ZW4gYXJyYXlzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgICAgICAgICBiYXNlRmxhdHRlbih2YWx1ZSwgZGVwdGggLSAxLCBwcmVkaWNhdGUsIGlzU3RyaWN0LCByZXN1bHQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhcnJheVB1c2gocmVzdWx0LCB2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKCFpc1N0cmljdCkge1xuICAgICAgICAgIHJlc3VsdFtyZXN1bHQubGVuZ3RoXSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBiYXNlRm9yT3duYCB3aGljaCBpdGVyYXRlcyBvdmVyIGBvYmplY3RgXG4gICAgICogcHJvcGVydGllcyByZXR1cm5lZCBieSBga2V5c0Z1bmNgIGFuZCBpbnZva2VzIGBpdGVyYXRlZWAgZm9yIGVhY2ggcHJvcGVydHkuXG4gICAgICogSXRlcmF0ZWUgZnVuY3Rpb25zIG1heSBleGl0IGl0ZXJhdGlvbiBlYXJseSBieSBleHBsaWNpdGx5IHJldHVybmluZyBgZmFsc2VgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0ga2V5c0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUga2V5cyBvZiBgb2JqZWN0YC5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqL1xuICAgIHZhciBiYXNlRm9yID0gY3JlYXRlQmFzZUZvcigpO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlIGBiYXNlRm9yYCBleGNlcHQgdGhhdCBpdCBpdGVyYXRlcyBvdmVyIHByb3BlcnRpZXNcbiAgICAgKiBpbiB0aGUgb3Bwb3NpdGUgb3JkZXIuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBrZXlzRnVuYyBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBrZXlzIG9mIGBvYmplY3RgLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICovXG4gICAgdmFyIGJhc2VGb3JSaWdodCA9IGNyZWF0ZUJhc2VGb3IodHJ1ZSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mb3JPd25gIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUZvck93bihvYmplY3QsIGl0ZXJhdGVlKSB7XG4gICAgICByZXR1cm4gb2JqZWN0ICYmIGJhc2VGb3Iob2JqZWN0LCBpdGVyYXRlZSwga2V5cyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZm9yT3duUmlnaHRgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUZvck93blJpZ2h0KG9iamVjdCwgaXRlcmF0ZWUpIHtcbiAgICAgIHJldHVybiBvYmplY3QgJiYgYmFzZUZvclJpZ2h0KG9iamVjdCwgaXRlcmF0ZWUsIGtleXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZ1bmN0aW9uc2Agd2hpY2ggY3JlYXRlcyBhbiBhcnJheSBvZlxuICAgICAqIGBvYmplY3RgIGZ1bmN0aW9uIHByb3BlcnR5IG5hbWVzIGZpbHRlcmVkIGZyb20gYHByb3BzYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtBcnJheX0gcHJvcHMgVGhlIHByb3BlcnR5IG5hbWVzIHRvIGZpbHRlci5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGZ1bmN0aW9uIG5hbWVzLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VGdW5jdGlvbnMob2JqZWN0LCBwcm9wcykge1xuICAgICAgcmV0dXJuIGFycmF5RmlsdGVyKHByb3BzLCBmdW5jdGlvbihrZXkpIHtcbiAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24ob2JqZWN0W2tleV0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZ2V0YCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZmF1bHQgdmFsdWVzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzb2x2ZWQgdmFsdWUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUdldChvYmplY3QsIHBhdGgpIHtcbiAgICAgIHBhdGggPSBjYXN0UGF0aChwYXRoLCBvYmplY3QpO1xuXG4gICAgICB2YXIgaW5kZXggPSAwLFxuICAgICAgICAgIGxlbmd0aCA9IHBhdGgubGVuZ3RoO1xuXG4gICAgICB3aGlsZSAob2JqZWN0ICE9IG51bGwgJiYgaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgb2JqZWN0ID0gb2JqZWN0W3RvS2V5KHBhdGhbaW5kZXgrK10pXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAoaW5kZXggJiYgaW5kZXggPT0gbGVuZ3RoKSA/IG9iamVjdCA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgZ2V0QWxsS2V5c2AgYW5kIGBnZXRBbGxLZXlzSW5gIHdoaWNoIHVzZXNcbiAgICAgKiBga2V5c0Z1bmNgIGFuZCBgc3ltYm9sc0Z1bmNgIHRvIGdldCB0aGUgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBhbmRcbiAgICAgKiBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0ga2V5c0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUga2V5cyBvZiBgb2JqZWN0YC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBzeW1ib2xzRnVuYyBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMgYW5kIHN5bWJvbHMuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUdldEFsbEtleXMob2JqZWN0LCBrZXlzRnVuYywgc3ltYm9sc0Z1bmMpIHtcbiAgICAgIHZhciByZXN1bHQgPSBrZXlzRnVuYyhvYmplY3QpO1xuICAgICAgcmV0dXJuIGlzQXJyYXkob2JqZWN0KSA/IHJlc3VsdCA6IGFycmF5UHVzaChyZXN1bHQsIHN5bWJvbHNGdW5jKG9iamVjdCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBnZXRUYWdgIHdpdGhvdXQgZmFsbGJhY2tzIGZvciBidWdneSBlbnZpcm9ubWVudHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGB0b1N0cmluZ1RhZ2AuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUdldFRhZyh2YWx1ZSkge1xuICAgICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWRUYWcgOiBudWxsVGFnO1xuICAgICAgfVxuICAgICAgcmV0dXJuIChzeW1Ub1N0cmluZ1RhZyAmJiBzeW1Ub1N0cmluZ1RhZyBpbiBPYmplY3QodmFsdWUpKVxuICAgICAgICA/IGdldFJhd1RhZyh2YWx1ZSlcbiAgICAgICAgOiBvYmplY3RUb1N0cmluZyh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZ3RgIHdoaWNoIGRvZXNuJ3QgY29lcmNlIGFyZ3VtZW50cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGdyZWF0ZXIgdGhhbiBgb3RoZXJgLFxuICAgICAqICBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUd0KHZhbHVlLCBvdGhlcikge1xuICAgICAgcmV0dXJuIHZhbHVlID4gb3RoZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaGFzYCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZXAgcGF0aHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBrZXkgVGhlIGtleSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUhhcyhvYmplY3QsIGtleSkge1xuICAgICAgcmV0dXJuIG9iamVjdCAhPSBudWxsICYmIGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmhhc0luYCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZXAgcGF0aHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBrZXkgVGhlIGtleSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUhhc0luKG9iamVjdCwga2V5KSB7XG4gICAgICByZXR1cm4gb2JqZWN0ICE9IG51bGwgJiYga2V5IGluIE9iamVjdChvYmplY3QpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmluUmFuZ2VgIHdoaWNoIGRvZXNuJ3QgY29lcmNlIGFyZ3VtZW50cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG51bWJlciBUaGUgbnVtYmVyIHRvIGNoZWNrLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydCBUaGUgc3RhcnQgb2YgdGhlIHJhbmdlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBlbmQgVGhlIGVuZCBvZiB0aGUgcmFuZ2UuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBudW1iZXJgIGlzIGluIHRoZSByYW5nZSwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VJblJhbmdlKG51bWJlciwgc3RhcnQsIGVuZCkge1xuICAgICAgcmV0dXJuIG51bWJlciA+PSBuYXRpdmVNaW4oc3RhcnQsIGVuZCkgJiYgbnVtYmVyIDwgbmF0aXZlTWF4KHN0YXJ0LCBlbmQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIG1ldGhvZHMgbGlrZSBgXy5pbnRlcnNlY3Rpb25gLCB3aXRob3V0IHN1cHBvcnRcbiAgICAgKiBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcywgdGhhdCBhY2NlcHRzIGFuIGFycmF5IG9mIGFycmF5cyB0byBpbnNwZWN0LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheXMgVGhlIGFycmF5cyB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NvbXBhcmF0b3JdIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2Ygc2hhcmVkIHZhbHVlcy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlSW50ZXJzZWN0aW9uKGFycmF5cywgaXRlcmF0ZWUsIGNvbXBhcmF0b3IpIHtcbiAgICAgIHZhciBpbmNsdWRlcyA9IGNvbXBhcmF0b3IgPyBhcnJheUluY2x1ZGVzV2l0aCA6IGFycmF5SW5jbHVkZXMsXG4gICAgICAgICAgbGVuZ3RoID0gYXJyYXlzWzBdLmxlbmd0aCxcbiAgICAgICAgICBvdGhMZW5ndGggPSBhcnJheXMubGVuZ3RoLFxuICAgICAgICAgIG90aEluZGV4ID0gb3RoTGVuZ3RoLFxuICAgICAgICAgIGNhY2hlcyA9IEFycmF5KG90aExlbmd0aCksXG4gICAgICAgICAgbWF4TGVuZ3RoID0gSW5maW5pdHksXG4gICAgICAgICAgcmVzdWx0ID0gW107XG5cbiAgICAgIHdoaWxlIChvdGhJbmRleC0tKSB7XG4gICAgICAgIHZhciBhcnJheSA9IGFycmF5c1tvdGhJbmRleF07XG4gICAgICAgIGlmIChvdGhJbmRleCAmJiBpdGVyYXRlZSkge1xuICAgICAgICAgIGFycmF5ID0gYXJyYXlNYXAoYXJyYXksIGJhc2VVbmFyeShpdGVyYXRlZSkpO1xuICAgICAgICB9XG4gICAgICAgIG1heExlbmd0aCA9IG5hdGl2ZU1pbihhcnJheS5sZW5ndGgsIG1heExlbmd0aCk7XG4gICAgICAgIGNhY2hlc1tvdGhJbmRleF0gPSAhY29tcGFyYXRvciAmJiAoaXRlcmF0ZWUgfHwgKGxlbmd0aCA+PSAxMjAgJiYgYXJyYXkubGVuZ3RoID49IDEyMCkpXG4gICAgICAgICAgPyBuZXcgU2V0Q2FjaGUob3RoSW5kZXggJiYgYXJyYXkpXG4gICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBhcnJheSA9IGFycmF5c1swXTtcblxuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgc2VlbiA9IGNhY2hlc1swXTtcblxuICAgICAgb3V0ZXI6XG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCAmJiByZXN1bHQubGVuZ3RoIDwgbWF4TGVuZ3RoKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUgPyBpdGVyYXRlZSh2YWx1ZSkgOiB2YWx1ZTtcblxuICAgICAgICB2YWx1ZSA9IChjb21wYXJhdG9yIHx8IHZhbHVlICE9PSAwKSA/IHZhbHVlIDogMDtcbiAgICAgICAgaWYgKCEoc2VlblxuICAgICAgICAgICAgICA/IGNhY2hlSGFzKHNlZW4sIGNvbXB1dGVkKVxuICAgICAgICAgICAgICA6IGluY2x1ZGVzKHJlc3VsdCwgY29tcHV0ZWQsIGNvbXBhcmF0b3IpXG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgb3RoSW5kZXggPSBvdGhMZW5ndGg7XG4gICAgICAgICAgd2hpbGUgKC0tb3RoSW5kZXgpIHtcbiAgICAgICAgICAgIHZhciBjYWNoZSA9IGNhY2hlc1tvdGhJbmRleF07XG4gICAgICAgICAgICBpZiAoIShjYWNoZVxuICAgICAgICAgICAgICAgICAgPyBjYWNoZUhhcyhjYWNoZSwgY29tcHV0ZWQpXG4gICAgICAgICAgICAgICAgICA6IGluY2x1ZGVzKGFycmF5c1tvdGhJbmRleF0sIGNvbXB1dGVkLCBjb21wYXJhdG9yKSlcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgY29udGludWUgb3V0ZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzZWVuKSB7XG4gICAgICAgICAgICBzZWVuLnB1c2goY29tcHV0ZWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaW52ZXJ0YCBhbmQgYF8uaW52ZXJ0QnlgIHdoaWNoIGludmVydHNcbiAgICAgKiBgb2JqZWN0YCB3aXRoIHZhbHVlcyB0cmFuc2Zvcm1lZCBieSBgaXRlcmF0ZWVgIGFuZCBzZXQgYnkgYHNldHRlcmAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gc2V0dGVyIFRoZSBmdW5jdGlvbiB0byBzZXQgYGFjY3VtdWxhdG9yYCB2YWx1ZXMuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGl0ZXJhdGVlIHRvIHRyYW5zZm9ybSB2YWx1ZXMuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGFjY3VtdWxhdG9yIFRoZSBpbml0aWFsIGludmVydGVkIG9iamVjdC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGFjY3VtdWxhdG9yYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlSW52ZXJ0ZXIob2JqZWN0LCBzZXR0ZXIsIGl0ZXJhdGVlLCBhY2N1bXVsYXRvcikge1xuICAgICAgYmFzZUZvck93bihvYmplY3QsIGZ1bmN0aW9uKHZhbHVlLCBrZXksIG9iamVjdCkge1xuICAgICAgICBzZXR0ZXIoYWNjdW11bGF0b3IsIGl0ZXJhdGVlKHZhbHVlKSwga2V5LCBvYmplY3QpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gYWNjdW11bGF0b3I7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaW52b2tlYCB3aXRob3V0IHN1cHBvcnQgZm9yIGluZGl2aWR1YWxcbiAgICAgKiBtZXRob2QgYXJndW1lbnRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIG1ldGhvZCB0byBpbnZva2UuXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJncyBUaGUgYXJndW1lbnRzIHRvIGludm9rZSB0aGUgbWV0aG9kIHdpdGguXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc3VsdCBvZiB0aGUgaW52b2tlZCBtZXRob2QuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUludm9rZShvYmplY3QsIHBhdGgsIGFyZ3MpIHtcbiAgICAgIHBhdGggPSBjYXN0UGF0aChwYXRoLCBvYmplY3QpO1xuICAgICAgb2JqZWN0ID0gcGFyZW50KG9iamVjdCwgcGF0aCk7XG4gICAgICB2YXIgZnVuYyA9IG9iamVjdCA9PSBudWxsID8gb2JqZWN0IDogb2JqZWN0W3RvS2V5KGxhc3QocGF0aCkpXTtcbiAgICAgIHJldHVybiBmdW5jID09IG51bGwgPyB1bmRlZmluZWQgOiBhcHBseShmdW5jLCBvYmplY3QsIGFyZ3MpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzQXJndW1lbnRzYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VJc0FyZ3VtZW50cyh2YWx1ZSkge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gYXJnc1RhZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0FycmF5QnVmZmVyYCB3aXRob3V0IE5vZGUuanMgb3B0aW1pemF0aW9ucy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYXJyYXkgYnVmZmVyLCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUlzQXJyYXlCdWZmZXIodmFsdWUpIHtcbiAgICAgIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IGFycmF5QnVmZmVyVGFnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzRGF0ZWAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgZGF0ZSBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlSXNEYXRlKHZhbHVlKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBkYXRlVGFnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzRXF1YWxgIHdoaWNoIHN1cHBvcnRzIHBhcnRpYWwgY29tcGFyaXNvbnNcbiAgICAgKiBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLlxuICAgICAqICAxIC0gVW5vcmRlcmVkIGNvbXBhcmlzb25cbiAgICAgKiAgMiAtIFBhcnRpYWwgY29tcGFyaXNvblxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgYHZhbHVlYCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUlzRXF1YWwodmFsdWUsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykge1xuICAgICAgaWYgKHZhbHVlID09PSBvdGhlcikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IG90aGVyID09IG51bGwgfHwgKCFpc09iamVjdExpa2UodmFsdWUpICYmICFpc09iamVjdExpa2Uob3RoZXIpKSkge1xuICAgICAgICByZXR1cm4gdmFsdWUgIT09IHZhbHVlICYmIG90aGVyICE9PSBvdGhlcjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBiYXNlSXNFcXVhbERlZXAodmFsdWUsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBiYXNlSXNFcXVhbCwgc3RhY2spO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxgIGZvciBhcnJheXMgYW5kIG9iamVjdHMgd2hpY2ggcGVyZm9ybXNcbiAgICAgKiBkZWVwIGNvbXBhcmlzb25zIGFuZCB0cmFja3MgdHJhdmVyc2VkIG9iamVjdHMgZW5hYmxpbmcgb2JqZWN0cyB3aXRoIGNpcmN1bGFyXG4gICAgICogcmVmZXJlbmNlcyB0byBiZSBjb21wYXJlZC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBiYXNlSXNFcXVhbGAgZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgYG9iamVjdGAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG9iamVjdHMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlSXNFcXVhbERlZXAob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICAgICAgdmFyIG9iaklzQXJyID0gaXNBcnJheShvYmplY3QpLFxuICAgICAgICAgIG90aElzQXJyID0gaXNBcnJheShvdGhlciksXG4gICAgICAgICAgb2JqVGFnID0gb2JqSXNBcnIgPyBhcnJheVRhZyA6IGdldFRhZyhvYmplY3QpLFxuICAgICAgICAgIG90aFRhZyA9IG90aElzQXJyID8gYXJyYXlUYWcgOiBnZXRUYWcob3RoZXIpO1xuXG4gICAgICBvYmpUYWcgPSBvYmpUYWcgPT0gYXJnc1RhZyA/IG9iamVjdFRhZyA6IG9ialRhZztcbiAgICAgIG90aFRhZyA9IG90aFRhZyA9PSBhcmdzVGFnID8gb2JqZWN0VGFnIDogb3RoVGFnO1xuXG4gICAgICB2YXIgb2JqSXNPYmogPSBvYmpUYWcgPT0gb2JqZWN0VGFnLFxuICAgICAgICAgIG90aElzT2JqID0gb3RoVGFnID09IG9iamVjdFRhZyxcbiAgICAgICAgICBpc1NhbWVUYWcgPSBvYmpUYWcgPT0gb3RoVGFnO1xuXG4gICAgICBpZiAoaXNTYW1lVGFnICYmIGlzQnVmZmVyKG9iamVjdCkpIHtcbiAgICAgICAgaWYgKCFpc0J1ZmZlcihvdGhlcikpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgb2JqSXNBcnIgPSB0cnVlO1xuICAgICAgICBvYmpJc09iaiA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKGlzU2FtZVRhZyAmJiAhb2JqSXNPYmopIHtcbiAgICAgICAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgICAgICAgcmV0dXJuIChvYmpJc0FyciB8fCBpc1R5cGVkQXJyYXkob2JqZWN0KSlcbiAgICAgICAgICA/IGVxdWFsQXJyYXlzKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spXG4gICAgICAgICAgOiBlcXVhbEJ5VGFnKG9iamVjdCwgb3RoZXIsIG9ialRhZywgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjayk7XG4gICAgICB9XG4gICAgICBpZiAoIShiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUcpKSB7XG4gICAgICAgIHZhciBvYmpJc1dyYXBwZWQgPSBvYmpJc09iaiAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgJ19fd3JhcHBlZF9fJyksXG4gICAgICAgICAgICBvdGhJc1dyYXBwZWQgPSBvdGhJc09iaiAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG90aGVyLCAnX193cmFwcGVkX18nKTtcblxuICAgICAgICBpZiAob2JqSXNXcmFwcGVkIHx8IG90aElzV3JhcHBlZCkge1xuICAgICAgICAgIHZhciBvYmpVbndyYXBwZWQgPSBvYmpJc1dyYXBwZWQgPyBvYmplY3QudmFsdWUoKSA6IG9iamVjdCxcbiAgICAgICAgICAgICAgb3RoVW53cmFwcGVkID0gb3RoSXNXcmFwcGVkID8gb3RoZXIudmFsdWUoKSA6IG90aGVyO1xuXG4gICAgICAgICAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgICAgICAgICByZXR1cm4gZXF1YWxGdW5jKG9ialVud3JhcHBlZCwgb3RoVW53cmFwcGVkLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjayk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghaXNTYW1lVGFnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gICAgICByZXR1cm4gZXF1YWxPYmplY3RzKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTWFwYCB3aXRob3V0IE5vZGUuanMgb3B0aW1pemF0aW9ucy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBtYXAsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlSXNNYXAodmFsdWUpIHtcbiAgICAgIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGdldFRhZyh2YWx1ZSkgPT0gbWFwVGFnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTWF0Y2hgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IG9mIHByb3BlcnR5IHZhbHVlcyB0byBtYXRjaC5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBtYXRjaERhdGEgVGhlIHByb3BlcnR5IG5hbWVzLCB2YWx1ZXMsIGFuZCBjb21wYXJlIGZsYWdzIHRvIG1hdGNoLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgb2JqZWN0YCBpcyBhIG1hdGNoLCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUlzTWF0Y2gob2JqZWN0LCBzb3VyY2UsIG1hdGNoRGF0YSwgY3VzdG9taXplcikge1xuICAgICAgdmFyIGluZGV4ID0gbWF0Y2hEYXRhLmxlbmd0aCxcbiAgICAgICAgICBsZW5ndGggPSBpbmRleCxcbiAgICAgICAgICBub0N1c3RvbWl6ZXIgPSAhY3VzdG9taXplcjtcblxuICAgICAgaWYgKG9iamVjdCA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAhbGVuZ3RoO1xuICAgICAgfVxuICAgICAgb2JqZWN0ID0gT2JqZWN0KG9iamVjdCk7XG4gICAgICB3aGlsZSAoaW5kZXgtLSkge1xuICAgICAgICB2YXIgZGF0YSA9IG1hdGNoRGF0YVtpbmRleF07XG4gICAgICAgIGlmICgobm9DdXN0b21pemVyICYmIGRhdGFbMl0pXG4gICAgICAgICAgICAgID8gZGF0YVsxXSAhPT0gb2JqZWN0W2RhdGFbMF1dXG4gICAgICAgICAgICAgIDogIShkYXRhWzBdIGluIG9iamVjdClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgZGF0YSA9IG1hdGNoRGF0YVtpbmRleF07XG4gICAgICAgIHZhciBrZXkgPSBkYXRhWzBdLFxuICAgICAgICAgICAgb2JqVmFsdWUgPSBvYmplY3Rba2V5XSxcbiAgICAgICAgICAgIHNyY1ZhbHVlID0gZGF0YVsxXTtcblxuICAgICAgICBpZiAobm9DdXN0b21pemVyICYmIGRhdGFbMl0pIHtcbiAgICAgICAgICBpZiAob2JqVmFsdWUgPT09IHVuZGVmaW5lZCAmJiAhKGtleSBpbiBvYmplY3QpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBzdGFjayA9IG5ldyBTdGFjaztcbiAgICAgICAgICBpZiAoY3VzdG9taXplcikge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGN1c3RvbWl6ZXIob2JqVmFsdWUsIHNyY1ZhbHVlLCBrZXksIG9iamVjdCwgc291cmNlLCBzdGFjayk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghKHJlc3VsdCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgPyBiYXNlSXNFcXVhbChzcmNWYWx1ZSwgb2JqVmFsdWUsIENPTVBBUkVfUEFSVElBTF9GTEFHIHwgQ09NUEFSRV9VTk9SREVSRURfRkxBRywgY3VzdG9taXplciwgc3RhY2spXG4gICAgICAgICAgICAgICAgOiByZXN1bHRcbiAgICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNOYXRpdmVgIHdpdGhvdXQgYmFkIHNoaW0gY2hlY2tzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIG5hdGl2ZSBmdW5jdGlvbixcbiAgICAgKiAgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VJc05hdGl2ZSh2YWx1ZSkge1xuICAgICAgaWYgKCFpc09iamVjdCh2YWx1ZSkgfHwgaXNNYXNrZWQodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHZhciBwYXR0ZXJuID0gaXNGdW5jdGlvbih2YWx1ZSkgPyByZUlzTmF0aXZlIDogcmVJc0hvc3RDdG9yO1xuICAgICAgcmV0dXJuIHBhdHRlcm4udGVzdCh0b1NvdXJjZSh2YWx1ZSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzUmVnRXhwYCB3aXRob3V0IE5vZGUuanMgb3B0aW1pemF0aW9ucy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSByZWdleHAsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlSXNSZWdFeHAodmFsdWUpIHtcbiAgICAgIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IHJlZ2V4cFRhZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc1NldGAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc2V0LCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUlzU2V0KHZhbHVlKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBnZXRUYWcodmFsdWUpID09IHNldFRhZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc1R5cGVkQXJyYXlgIHdpdGhvdXQgTm9kZS5qcyBvcHRpbWl6YXRpb25zLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHR5cGVkIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUlzVHlwZWRBcnJheSh2YWx1ZSkge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiZcbiAgICAgICAgaXNMZW5ndGgodmFsdWUubGVuZ3RoKSAmJiAhIXR5cGVkQXJyYXlUYWdzW2Jhc2VHZXRUYWcodmFsdWUpXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pdGVyYXRlZWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gW3ZhbHVlPV8uaWRlbnRpdHldIFRoZSB2YWx1ZSB0byBjb252ZXJ0IHRvIGFuIGl0ZXJhdGVlLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgaXRlcmF0ZWUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUl0ZXJhdGVlKHZhbHVlKSB7XG4gICAgICAvLyBEb24ndCBzdG9yZSB0aGUgYHR5cGVvZmAgcmVzdWx0IGluIGEgdmFyaWFibGUgdG8gYXZvaWQgYSBKSVQgYnVnIGluIFNhZmFyaSA5LlxuICAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTYwMzQgZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gaWRlbnRpdHk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBpc0FycmF5KHZhbHVlKVxuICAgICAgICAgID8gYmFzZU1hdGNoZXNQcm9wZXJ0eSh2YWx1ZVswXSwgdmFsdWVbMV0pXG4gICAgICAgICAgOiBiYXNlTWF0Y2hlcyh2YWx1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcHJvcGVydHkodmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmtleXNgIHdoaWNoIGRvZXNuJ3QgdHJlYXQgc3BhcnNlIGFycmF5cyBhcyBkZW5zZS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUtleXMob2JqZWN0KSB7XG4gICAgICBpZiAoIWlzUHJvdG90eXBlKG9iamVjdCkpIHtcbiAgICAgICAgcmV0dXJuIG5hdGl2ZUtleXMob2JqZWN0KTtcbiAgICAgIH1cbiAgICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICAgIGZvciAodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0KSkge1xuICAgICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiYga2V5ICE9ICdjb25zdHJ1Y3RvcicpIHtcbiAgICAgICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmtleXNJbmAgd2hpY2ggZG9lc24ndCB0cmVhdCBzcGFyc2UgYXJyYXlzIGFzIGRlbnNlLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlS2V5c0luKG9iamVjdCkge1xuICAgICAgaWYgKCFpc09iamVjdChvYmplY3QpKSB7XG4gICAgICAgIHJldHVybiBuYXRpdmVLZXlzSW4ob2JqZWN0KTtcbiAgICAgIH1cbiAgICAgIHZhciBpc1Byb3RvID0gaXNQcm90b3R5cGUob2JqZWN0KSxcbiAgICAgICAgICByZXN1bHQgPSBbXTtcblxuICAgICAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgICAgICBpZiAoIShrZXkgPT0gJ2NvbnN0cnVjdG9yJyAmJiAoaXNQcm90byB8fCAhaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkpKSkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ubHRgIHdoaWNoIGRvZXNuJ3QgY29lcmNlIGFyZ3VtZW50cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGxlc3MgdGhhbiBgb3RoZXJgLFxuICAgICAqICBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUx0KHZhbHVlLCBvdGhlcikge1xuICAgICAgcmV0dXJuIHZhbHVlIDwgb3RoZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ubWFwYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IG1hcHBlZCBhcnJheS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlTWFwKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICByZXN1bHQgPSBpc0FycmF5TGlrZShjb2xsZWN0aW9uKSA/IEFycmF5KGNvbGxlY3Rpb24ubGVuZ3RoKSA6IFtdO1xuXG4gICAgICBiYXNlRWFjaChjb2xsZWN0aW9uLCBmdW5jdGlvbih2YWx1ZSwga2V5LCBjb2xsZWN0aW9uKSB7XG4gICAgICAgIHJlc3VsdFsrK2luZGV4XSA9IGl0ZXJhdGVlKHZhbHVlLCBrZXksIGNvbGxlY3Rpb24pO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLm1hdGNoZXNgIHdoaWNoIGRvZXNuJ3QgY2xvbmUgYHNvdXJjZWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCBvZiBwcm9wZXJ0eSB2YWx1ZXMgdG8gbWF0Y2guXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc3BlYyBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlTWF0Y2hlcyhzb3VyY2UpIHtcbiAgICAgIHZhciBtYXRjaERhdGEgPSBnZXRNYXRjaERhdGEoc291cmNlKTtcbiAgICAgIGlmIChtYXRjaERhdGEubGVuZ3RoID09IDEgJiYgbWF0Y2hEYXRhWzBdWzJdKSB7XG4gICAgICAgIHJldHVybiBtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZShtYXRjaERhdGFbMF1bMF0sIG1hdGNoRGF0YVswXVsxXSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgICAgIHJldHVybiBvYmplY3QgPT09IHNvdXJjZSB8fCBiYXNlSXNNYXRjaChvYmplY3QsIHNvdXJjZSwgbWF0Y2hEYXRhKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ubWF0Y2hlc1Byb3BlcnR5YCB3aGljaCBkb2Vzbid0IGNsb25lIGBzcmNWYWx1ZWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gICAgICogQHBhcmFtIHsqfSBzcmNWYWx1ZSBUaGUgdmFsdWUgdG8gbWF0Y2guXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc3BlYyBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlTWF0Y2hlc1Byb3BlcnR5KHBhdGgsIHNyY1ZhbHVlKSB7XG4gICAgICBpZiAoaXNLZXkocGF0aCkgJiYgaXNTdHJpY3RDb21wYXJhYmxlKHNyY1ZhbHVlKSkge1xuICAgICAgICByZXR1cm4gbWF0Y2hlc1N0cmljdENvbXBhcmFibGUodG9LZXkocGF0aCksIHNyY1ZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICAgICAgdmFyIG9ialZhbHVlID0gZ2V0KG9iamVjdCwgcGF0aCk7XG4gICAgICAgIHJldHVybiAob2JqVmFsdWUgPT09IHVuZGVmaW5lZCAmJiBvYmpWYWx1ZSA9PT0gc3JjVmFsdWUpXG4gICAgICAgICAgPyBoYXNJbihvYmplY3QsIHBhdGgpXG4gICAgICAgICAgOiBiYXNlSXNFcXVhbChzcmNWYWx1ZSwgb2JqVmFsdWUsIENPTVBBUkVfUEFSVElBTF9GTEFHIHwgQ09NUEFSRV9VTk9SREVSRURfRkxBRyk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLm1lcmdlYCB3aXRob3V0IHN1cHBvcnQgZm9yIG11bHRpcGxlIHNvdXJjZXMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBzb3VyY2Ugb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzcmNJbmRleCBUaGUgaW5kZXggb2YgYHNvdXJjZWAuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgbWVyZ2VkIHZhbHVlcy5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW3N0YWNrXSBUcmFja3MgdHJhdmVyc2VkIHNvdXJjZSB2YWx1ZXMgYW5kIHRoZWlyIG1lcmdlZFxuICAgICAqICBjb3VudGVycGFydHMuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZU1lcmdlKG9iamVjdCwgc291cmNlLCBzcmNJbmRleCwgY3VzdG9taXplciwgc3RhY2spIHtcbiAgICAgIGlmIChvYmplY3QgPT09IHNvdXJjZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBiYXNlRm9yKHNvdXJjZSwgZnVuY3Rpb24oc3JjVmFsdWUsIGtleSkge1xuICAgICAgICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgU3RhY2spO1xuICAgICAgICBpZiAoaXNPYmplY3Qoc3JjVmFsdWUpKSB7XG4gICAgICAgICAgYmFzZU1lcmdlRGVlcChvYmplY3QsIHNvdXJjZSwga2V5LCBzcmNJbmRleCwgYmFzZU1lcmdlLCBjdXN0b21pemVyLCBzdGFjayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgdmFyIG5ld1ZhbHVlID0gY3VzdG9taXplclxuICAgICAgICAgICAgPyBjdXN0b21pemVyKHNhZmVHZXQob2JqZWN0LCBrZXkpLCBzcmNWYWx1ZSwgKGtleSArICcnKSwgb2JqZWN0LCBzb3VyY2UsIHN0YWNrKVxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgICBpZiAobmV3VmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbmV3VmFsdWUgPSBzcmNWYWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYXNzaWduTWVyZ2VWYWx1ZShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9LCBrZXlzSW4pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZU1lcmdlYCBmb3IgYXJyYXlzIGFuZCBvYmplY3RzIHdoaWNoIHBlcmZvcm1zXG4gICAgICogZGVlcCBtZXJnZXMgYW5kIHRyYWNrcyB0cmF2ZXJzZWQgb2JqZWN0cyBlbmFibGluZyBvYmplY3RzIHdpdGggY2lyY3VsYXJcbiAgICAgKiByZWZlcmVuY2VzIHRvIGJlIG1lcmdlZC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIHNvdXJjZSBvYmplY3QuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBtZXJnZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc3JjSW5kZXggVGhlIGluZGV4IG9mIGBzb3VyY2VgLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IG1lcmdlRnVuYyBUaGUgZnVuY3Rpb24gdG8gbWVyZ2UgdmFsdWVzLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGFzc2lnbmVkIHZhbHVlcy5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW3N0YWNrXSBUcmFja3MgdHJhdmVyc2VkIHNvdXJjZSB2YWx1ZXMgYW5kIHRoZWlyIG1lcmdlZFxuICAgICAqICBjb3VudGVycGFydHMuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZU1lcmdlRGVlcChvYmplY3QsIHNvdXJjZSwga2V5LCBzcmNJbmRleCwgbWVyZ2VGdW5jLCBjdXN0b21pemVyLCBzdGFjaykge1xuICAgICAgdmFyIG9ialZhbHVlID0gc2FmZUdldChvYmplY3QsIGtleSksXG4gICAgICAgICAgc3JjVmFsdWUgPSBzYWZlR2V0KHNvdXJjZSwga2V5KSxcbiAgICAgICAgICBzdGFja2VkID0gc3RhY2suZ2V0KHNyY1ZhbHVlKTtcblxuICAgICAgaWYgKHN0YWNrZWQpIHtcbiAgICAgICAgYXNzaWduTWVyZ2VWYWx1ZShvYmplY3QsIGtleSwgc3RhY2tlZCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHZhciBuZXdWYWx1ZSA9IGN1c3RvbWl6ZXJcbiAgICAgICAgPyBjdXN0b21pemVyKG9ialZhbHVlLCBzcmNWYWx1ZSwgKGtleSArICcnKSwgb2JqZWN0LCBzb3VyY2UsIHN0YWNrKVxuICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgICAgdmFyIGlzQ29tbW9uID0gbmV3VmFsdWUgPT09IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKGlzQ29tbW9uKSB7XG4gICAgICAgIHZhciBpc0FyciA9IGlzQXJyYXkoc3JjVmFsdWUpLFxuICAgICAgICAgICAgaXNCdWZmID0gIWlzQXJyICYmIGlzQnVmZmVyKHNyY1ZhbHVlKSxcbiAgICAgICAgICAgIGlzVHlwZWQgPSAhaXNBcnIgJiYgIWlzQnVmZiAmJiBpc1R5cGVkQXJyYXkoc3JjVmFsdWUpO1xuXG4gICAgICAgIG5ld1ZhbHVlID0gc3JjVmFsdWU7XG4gICAgICAgIGlmIChpc0FyciB8fCBpc0J1ZmYgfHwgaXNUeXBlZCkge1xuICAgICAgICAgIGlmIChpc0FycmF5KG9ialZhbHVlKSkge1xuICAgICAgICAgICAgbmV3VmFsdWUgPSBvYmpWYWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZiAoaXNBcnJheUxpa2VPYmplY3Qob2JqVmFsdWUpKSB7XG4gICAgICAgICAgICBuZXdWYWx1ZSA9IGNvcHlBcnJheShvYmpWYWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2UgaWYgKGlzQnVmZikge1xuICAgICAgICAgICAgaXNDb21tb24gPSBmYWxzZTtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gY2xvbmVCdWZmZXIoc3JjVmFsdWUsIHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGlmIChpc1R5cGVkKSB7XG4gICAgICAgICAgICBpc0NvbW1vbiA9IGZhbHNlO1xuICAgICAgICAgICAgbmV3VmFsdWUgPSBjbG9uZVR5cGVkQXJyYXkoc3JjVmFsdWUsIHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gW107XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzUGxhaW5PYmplY3Qoc3JjVmFsdWUpIHx8IGlzQXJndW1lbnRzKHNyY1ZhbHVlKSkge1xuICAgICAgICAgIG5ld1ZhbHVlID0gb2JqVmFsdWU7XG4gICAgICAgICAgaWYgKGlzQXJndW1lbnRzKG9ialZhbHVlKSkge1xuICAgICAgICAgICAgbmV3VmFsdWUgPSB0b1BsYWluT2JqZWN0KG9ialZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZiAoIWlzT2JqZWN0KG9ialZhbHVlKSB8fCBpc0Z1bmN0aW9uKG9ialZhbHVlKSkge1xuICAgICAgICAgICAgbmV3VmFsdWUgPSBpbml0Q2xvbmVPYmplY3Qoc3JjVmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpc0NvbW1vbiA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaXNDb21tb24pIHtcbiAgICAgICAgLy8gUmVjdXJzaXZlbHkgbWVyZ2Ugb2JqZWN0cyBhbmQgYXJyYXlzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgICAgIHN0YWNrLnNldChzcmNWYWx1ZSwgbmV3VmFsdWUpO1xuICAgICAgICBtZXJnZUZ1bmMobmV3VmFsdWUsIHNyY1ZhbHVlLCBzcmNJbmRleCwgY3VzdG9taXplciwgc3RhY2spO1xuICAgICAgICBzdGFja1snZGVsZXRlJ10oc3JjVmFsdWUpO1xuICAgICAgfVxuICAgICAgYXNzaWduTWVyZ2VWYWx1ZShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLm50aGAgd2hpY2ggZG9lc24ndCBjb2VyY2UgYXJndW1lbnRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIGluZGV4IG9mIHRoZSBlbGVtZW50IHRvIHJldHVybi5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbnRoIGVsZW1lbnQgb2YgYGFycmF5YC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlTnRoKGFycmF5LCBuKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICAgICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbiArPSBuIDwgMCA/IGxlbmd0aCA6IDA7XG4gICAgICByZXR1cm4gaXNJbmRleChuLCBsZW5ndGgpID8gYXJyYXlbbl0gOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ub3JkZXJCeWAgd2l0aG91dCBwYXJhbSBndWFyZHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9uW118T2JqZWN0W118c3RyaW5nW119IGl0ZXJhdGVlcyBUaGUgaXRlcmF0ZWVzIHRvIHNvcnQgYnkuXG4gICAgICogQHBhcmFtIHtzdHJpbmdbXX0gb3JkZXJzIFRoZSBzb3J0IG9yZGVycyBvZiBgaXRlcmF0ZWVzYC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBzb3J0ZWQgYXJyYXkuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZU9yZGVyQnkoY29sbGVjdGlvbiwgaXRlcmF0ZWVzLCBvcmRlcnMpIHtcbiAgICAgIGlmIChpdGVyYXRlZXMubGVuZ3RoKSB7XG4gICAgICAgIGl0ZXJhdGVlcyA9IGFycmF5TWFwKGl0ZXJhdGVlcywgZnVuY3Rpb24oaXRlcmF0ZWUpIHtcbiAgICAgICAgICBpZiAoaXNBcnJheShpdGVyYXRlZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgICByZXR1cm4gYmFzZUdldCh2YWx1ZSwgaXRlcmF0ZWUubGVuZ3RoID09PSAxID8gaXRlcmF0ZWVbMF0gOiBpdGVyYXRlZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBpdGVyYXRlZTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpdGVyYXRlZXMgPSBbaWRlbnRpdHldO1xuICAgICAgfVxuXG4gICAgICB2YXIgaW5kZXggPSAtMTtcbiAgICAgIGl0ZXJhdGVlcyA9IGFycmF5TWFwKGl0ZXJhdGVlcywgYmFzZVVuYXJ5KGdldEl0ZXJhdGVlKCkpKTtcblxuICAgICAgdmFyIHJlc3VsdCA9IGJhc2VNYXAoY29sbGVjdGlvbiwgZnVuY3Rpb24odmFsdWUsIGtleSwgY29sbGVjdGlvbikge1xuICAgICAgICB2YXIgY3JpdGVyaWEgPSBhcnJheU1hcChpdGVyYXRlZXMsIGZ1bmN0aW9uKGl0ZXJhdGVlKSB7XG4gICAgICAgICAgcmV0dXJuIGl0ZXJhdGVlKHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB7ICdjcml0ZXJpYSc6IGNyaXRlcmlhLCAnaW5kZXgnOiArK2luZGV4LCAndmFsdWUnOiB2YWx1ZSB9O1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBiYXNlU29ydEJ5KHJlc3VsdCwgZnVuY3Rpb24ob2JqZWN0LCBvdGhlcikge1xuICAgICAgICByZXR1cm4gY29tcGFyZU11bHRpcGxlKG9iamVjdCwgb3RoZXIsIG9yZGVycyk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5waWNrYCB3aXRob3V0IHN1cHBvcnQgZm9yIGluZGl2aWR1YWxcbiAgICAgKiBwcm9wZXJ0eSBpZGVudGlmaWVycy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgc291cmNlIG9iamVjdC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBwYXRocyBUaGUgcHJvcGVydHkgcGF0aHMgdG8gcGljay5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VQaWNrKG9iamVjdCwgcGF0aHMpIHtcbiAgICAgIHJldHVybiBiYXNlUGlja0J5KG9iamVjdCwgcGF0aHMsIGZ1bmN0aW9uKHZhbHVlLCBwYXRoKSB7XG4gICAgICAgIHJldHVybiBoYXNJbihvYmplY3QsIHBhdGgpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgIGBfLnBpY2tCeWAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBzb3VyY2Ugb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nW119IHBhdGhzIFRoZSBwcm9wZXJ0eSBwYXRocyB0byBwaWNrLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgcHJvcGVydHkuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlUGlja0J5KG9iamVjdCwgcGF0aHMsIHByZWRpY2F0ZSkge1xuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgbGVuZ3RoID0gcGF0aHMubGVuZ3RoLFxuICAgICAgICAgIHJlc3VsdCA9IHt9O1xuXG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICB2YXIgcGF0aCA9IHBhdGhzW2luZGV4XSxcbiAgICAgICAgICAgIHZhbHVlID0gYmFzZUdldChvYmplY3QsIHBhdGgpO1xuXG4gICAgICAgIGlmIChwcmVkaWNhdGUodmFsdWUsIHBhdGgpKSB7XG4gICAgICAgICAgYmFzZVNldChyZXN1bHQsIGNhc3RQYXRoKHBhdGgsIG9iamVjdCksIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VQcm9wZXJ0eWAgd2hpY2ggc3VwcG9ydHMgZGVlcCBwYXRocy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBhY2Nlc3NvciBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlUHJvcGVydHlEZWVwKHBhdGgpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICAgICAgcmV0dXJuIGJhc2VHZXQob2JqZWN0LCBwYXRoKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ucHVsbEFsbEJ5YCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlXG4gICAgICogc2hvcnRoYW5kcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgVGhlIHZhbHVlcyB0byByZW1vdmUuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlXSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY29tcGFyYXRvcl0gVGhlIGNvbXBhcmF0b3IgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlUHVsbEFsbChhcnJheSwgdmFsdWVzLCBpdGVyYXRlZSwgY29tcGFyYXRvcikge1xuICAgICAgdmFyIGluZGV4T2YgPSBjb21wYXJhdG9yID8gYmFzZUluZGV4T2ZXaXRoIDogYmFzZUluZGV4T2YsXG4gICAgICAgICAgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSB2YWx1ZXMubGVuZ3RoLFxuICAgICAgICAgIHNlZW4gPSBhcnJheTtcblxuICAgICAgaWYgKGFycmF5ID09PSB2YWx1ZXMpIHtcbiAgICAgICAgdmFsdWVzID0gY29weUFycmF5KHZhbHVlcyk7XG4gICAgICB9XG4gICAgICBpZiAoaXRlcmF0ZWUpIHtcbiAgICAgICAgc2VlbiA9IGFycmF5TWFwKGFycmF5LCBiYXNlVW5hcnkoaXRlcmF0ZWUpKTtcbiAgICAgIH1cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciBmcm9tSW5kZXggPSAwLFxuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZXNbaW5kZXhdLFxuICAgICAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSA/IGl0ZXJhdGVlKHZhbHVlKSA6IHZhbHVlO1xuXG4gICAgICAgIHdoaWxlICgoZnJvbUluZGV4ID0gaW5kZXhPZihzZWVuLCBjb21wdXRlZCwgZnJvbUluZGV4LCBjb21wYXJhdG9yKSkgPiAtMSkge1xuICAgICAgICAgIGlmIChzZWVuICE9PSBhcnJheSkge1xuICAgICAgICAgICAgc3BsaWNlLmNhbGwoc2VlbiwgZnJvbUluZGV4LCAxKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc3BsaWNlLmNhbGwoYXJyYXksIGZyb21JbmRleCwgMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBhcnJheTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5wdWxsQXRgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaW5kaXZpZHVhbFxuICAgICAqIGluZGV4ZXMgb3IgY2FwdHVyaW5nIHRoZSByZW1vdmVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyW119IGluZGV4ZXMgVGhlIGluZGV4ZXMgb2YgZWxlbWVudHMgdG8gcmVtb3ZlLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VQdWxsQXQoYXJyYXksIGluZGV4ZXMpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheSA/IGluZGV4ZXMubGVuZ3RoIDogMCxcbiAgICAgICAgICBsYXN0SW5kZXggPSBsZW5ndGggLSAxO1xuXG4gICAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgICAgdmFyIGluZGV4ID0gaW5kZXhlc1tsZW5ndGhdO1xuICAgICAgICBpZiAobGVuZ3RoID09IGxhc3RJbmRleCB8fCBpbmRleCAhPT0gcHJldmlvdXMpIHtcbiAgICAgICAgICB2YXIgcHJldmlvdXMgPSBpbmRleDtcbiAgICAgICAgICBpZiAoaXNJbmRleChpbmRleCkpIHtcbiAgICAgICAgICAgIHNwbGljZS5jYWxsKGFycmF5LCBpbmRleCwgMSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJhc2VVbnNldChhcnJheSwgaW5kZXgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFycmF5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnJhbmRvbWAgd2l0aG91dCBzdXBwb3J0IGZvciByZXR1cm5pbmdcbiAgICAgKiBmbG9hdGluZy1wb2ludCBudW1iZXJzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbG93ZXIgVGhlIGxvd2VyIGJvdW5kLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB1cHBlciBUaGUgdXBwZXIgYm91bmQuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgcmFuZG9tIG51bWJlci5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlUmFuZG9tKGxvd2VyLCB1cHBlcikge1xuICAgICAgcmV0dXJuIGxvd2VyICsgbmF0aXZlRmxvb3IobmF0aXZlUmFuZG9tKCkgKiAodXBwZXIgLSBsb3dlciArIDEpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5yYW5nZWAgYW5kIGBfLnJhbmdlUmlnaHRgIHdoaWNoIGRvZXNuJ3RcbiAgICAgKiBjb2VyY2UgYXJndW1lbnRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnQgVGhlIHN0YXJ0IG9mIHRoZSByYW5nZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZW5kIFRoZSBlbmQgb2YgdGhlIHJhbmdlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzdGVwIFRoZSB2YWx1ZSB0byBpbmNyZW1lbnQgb3IgZGVjcmVtZW50IGJ5LlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgcmFuZ2Ugb2YgbnVtYmVycy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlUmFuZ2Uoc3RhcnQsIGVuZCwgc3RlcCwgZnJvbVJpZ2h0KSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSBuYXRpdmVNYXgobmF0aXZlQ2VpbCgoZW5kIC0gc3RhcnQpIC8gKHN0ZXAgfHwgMSkpLCAwKSxcbiAgICAgICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgICAgcmVzdWx0W2Zyb21SaWdodCA/IGxlbmd0aCA6ICsraW5kZXhdID0gc3RhcnQ7XG4gICAgICAgIHN0YXJ0ICs9IHN0ZXA7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnJlcGVhdGAgd2hpY2ggZG9lc24ndCBjb2VyY2UgYXJndW1lbnRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gcmVwZWF0LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgdGltZXMgdG8gcmVwZWF0IHRoZSBzdHJpbmcuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcmVwZWF0ZWQgc3RyaW5nLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VSZXBlYXQoc3RyaW5nLCBuKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gJyc7XG4gICAgICBpZiAoIXN0cmluZyB8fCBuIDwgMSB8fCBuID4gTUFYX1NBRkVfSU5URUdFUikge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgLy8gTGV2ZXJhZ2UgdGhlIGV4cG9uZW50aWF0aW9uIGJ5IHNxdWFyaW5nIGFsZ29yaXRobSBmb3IgYSBmYXN0ZXIgcmVwZWF0LlxuICAgICAgLy8gU2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0V4cG9uZW50aWF0aW9uX2J5X3NxdWFyaW5nIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICBkbyB7XG4gICAgICAgIGlmIChuICUgMikge1xuICAgICAgICAgIHJlc3VsdCArPSBzdHJpbmc7XG4gICAgICAgIH1cbiAgICAgICAgbiA9IG5hdGl2ZUZsb29yKG4gLyAyKTtcbiAgICAgICAgaWYgKG4pIHtcbiAgICAgICAgICBzdHJpbmcgKz0gc3RyaW5nO1xuICAgICAgICB9XG4gICAgICB9IHdoaWxlIChuKTtcblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5yZXN0YCB3aGljaCBkb2Vzbid0IHZhbGlkYXRlIG9yIGNvZXJjZSBhcmd1bWVudHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD1mdW5jLmxlbmd0aC0xXSBUaGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIHJlc3QgcGFyYW1ldGVyLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VSZXN0KGZ1bmMsIHN0YXJ0KSB7XG4gICAgICByZXR1cm4gc2V0VG9TdHJpbmcob3ZlclJlc3QoZnVuYywgc3RhcnQsIGlkZW50aXR5KSwgZnVuYyArICcnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5zYW1wbGVgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBzYW1wbGUuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJhbmRvbSBlbGVtZW50LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VTYW1wbGUoY29sbGVjdGlvbikge1xuICAgICAgcmV0dXJuIGFycmF5U2FtcGxlKHZhbHVlcyhjb2xsZWN0aW9uKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uc2FtcGxlU2l6ZWAgd2l0aG91dCBwYXJhbSBndWFyZHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIHNhbXBsZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRvIHNhbXBsZS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHJhbmRvbSBlbGVtZW50cy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlU2FtcGxlU2l6ZShjb2xsZWN0aW9uLCBuKSB7XG4gICAgICB2YXIgYXJyYXkgPSB2YWx1ZXMoY29sbGVjdGlvbik7XG4gICAgICByZXR1cm4gc2h1ZmZsZVNlbGYoYXJyYXksIGJhc2VDbGFtcChuLCAwLCBhcnJheS5sZW5ndGgpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5zZXRgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBzZXQuXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIHBhdGggY3JlYXRpb24uXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlU2V0KG9iamVjdCwgcGF0aCwgdmFsdWUsIGN1c3RvbWl6ZXIpIHtcbiAgICAgIGlmICghaXNPYmplY3Qob2JqZWN0KSkge1xuICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgfVxuICAgICAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG5cbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGxlbmd0aCA9IHBhdGgubGVuZ3RoLFxuICAgICAgICAgIGxhc3RJbmRleCA9IGxlbmd0aCAtIDEsXG4gICAgICAgICAgbmVzdGVkID0gb2JqZWN0O1xuXG4gICAgICB3aGlsZSAobmVzdGVkICE9IG51bGwgJiYgKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICB2YXIga2V5ID0gdG9LZXkocGF0aFtpbmRleF0pLFxuICAgICAgICAgICAgbmV3VmFsdWUgPSB2YWx1ZTtcblxuICAgICAgICBpZiAoa2V5ID09PSAnX19wcm90b19fJyB8fCBrZXkgPT09ICdjb25zdHJ1Y3RvcicgfHwga2V5ID09PSAncHJvdG90eXBlJykge1xuICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW5kZXggIT0gbGFzdEluZGV4KSB7XG4gICAgICAgICAgdmFyIG9ialZhbHVlID0gbmVzdGVkW2tleV07XG4gICAgICAgICAgbmV3VmFsdWUgPSBjdXN0b21pemVyID8gY3VzdG9taXplcihvYmpWYWx1ZSwga2V5LCBuZXN0ZWQpIDogdW5kZWZpbmVkO1xuICAgICAgICAgIGlmIChuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBuZXdWYWx1ZSA9IGlzT2JqZWN0KG9ialZhbHVlKVxuICAgICAgICAgICAgICA/IG9ialZhbHVlXG4gICAgICAgICAgICAgIDogKGlzSW5kZXgocGF0aFtpbmRleCArIDFdKSA/IFtdIDoge30pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhc3NpZ25WYWx1ZShuZXN0ZWQsIGtleSwgbmV3VmFsdWUpO1xuICAgICAgICBuZXN0ZWQgPSBuZXN0ZWRba2V5XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYHNldERhdGFgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaG90IGxvb3Agc2hvcnRpbmcuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFzc29jaWF0ZSBtZXRhZGF0YSB3aXRoLlxuICAgICAqIEBwYXJhbSB7Kn0gZGF0YSBUaGUgbWV0YWRhdGEuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBmdW5jYC5cbiAgICAgKi9cbiAgICB2YXIgYmFzZVNldERhdGEgPSAhbWV0YU1hcCA/IGlkZW50aXR5IDogZnVuY3Rpb24oZnVuYywgZGF0YSkge1xuICAgICAgbWV0YU1hcC5zZXQoZnVuYywgZGF0YSk7XG4gICAgICByZXR1cm4gZnVuYztcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYHNldFRvU3RyaW5nYCB3aXRob3V0IHN1cHBvcnQgZm9yIGhvdCBsb29wIHNob3J0aW5nLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBtb2RpZnkuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gc3RyaW5nIFRoZSBgdG9TdHJpbmdgIHJlc3VsdC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICAgICAqL1xuICAgIHZhciBiYXNlU2V0VG9TdHJpbmcgPSAhZGVmaW5lUHJvcGVydHkgPyBpZGVudGl0eSA6IGZ1bmN0aW9uKGZ1bmMsIHN0cmluZykge1xuICAgICAgcmV0dXJuIGRlZmluZVByb3BlcnR5KGZ1bmMsICd0b1N0cmluZycsIHtcbiAgICAgICAgJ2NvbmZpZ3VyYWJsZSc6IHRydWUsXG4gICAgICAgICdlbnVtZXJhYmxlJzogZmFsc2UsXG4gICAgICAgICd2YWx1ZSc6IGNvbnN0YW50KHN0cmluZyksXG4gICAgICAgICd3cml0YWJsZSc6IHRydWVcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5zaHVmZmxlYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gc2h1ZmZsZS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBzaHVmZmxlZCBhcnJheS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlU2h1ZmZsZShjb2xsZWN0aW9uKSB7XG4gICAgICByZXR1cm4gc2h1ZmZsZVNlbGYodmFsdWVzKGNvbGxlY3Rpb24pKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5zbGljZWAgd2l0aG91dCBhbiBpdGVyYXRlZSBjYWxsIGd1YXJkLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gc2xpY2UuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD0wXSBUaGUgc3RhcnQgcG9zaXRpb24uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtlbmQ9YXJyYXkubGVuZ3RoXSBUaGUgZW5kIHBvc2l0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgc2xpY2Ugb2YgYGFycmF5YC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlU2xpY2UoYXJyYXksIHN0YXJ0LCBlbmQpIHtcbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICAgICAgaWYgKHN0YXJ0IDwgMCkge1xuICAgICAgICBzdGFydCA9IC1zdGFydCA+IGxlbmd0aCA/IDAgOiAobGVuZ3RoICsgc3RhcnQpO1xuICAgICAgfVxuICAgICAgZW5kID0gZW5kID4gbGVuZ3RoID8gbGVuZ3RoIDogZW5kO1xuICAgICAgaWYgKGVuZCA8IDApIHtcbiAgICAgICAgZW5kICs9IGxlbmd0aDtcbiAgICAgIH1cbiAgICAgIGxlbmd0aCA9IHN0YXJ0ID4gZW5kID8gMCA6ICgoZW5kIC0gc3RhcnQpID4+PiAwKTtcbiAgICAgIHN0YXJ0ID4+Pj0gMDtcblxuICAgICAgdmFyIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICByZXN1bHRbaW5kZXhdID0gYXJyYXlbaW5kZXggKyBzdGFydF07XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnNvbWVgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbnkgZWxlbWVudCBwYXNzZXMgdGhlIHByZWRpY2F0ZSBjaGVjayxcbiAgICAgKiAgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VTb21lKGNvbGxlY3Rpb24sIHByZWRpY2F0ZSkge1xuICAgICAgdmFyIHJlc3VsdDtcblxuICAgICAgYmFzZUVhY2goY29sbGVjdGlvbiwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKSB7XG4gICAgICAgIHJlc3VsdCA9IHByZWRpY2F0ZSh2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pO1xuICAgICAgICByZXR1cm4gIXJlc3VsdDtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuICEhcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnNvcnRlZEluZGV4YCBhbmQgYF8uc29ydGVkTGFzdEluZGV4YCB3aGljaFxuICAgICAqIHBlcmZvcm1zIGEgYmluYXJ5IHNlYXJjaCBvZiBgYXJyYXlgIHRvIGRldGVybWluZSB0aGUgaW5kZXggYXQgd2hpY2ggYHZhbHVlYFxuICAgICAqIHNob3VsZCBiZSBpbnNlcnRlZCBpbnRvIGBhcnJheWAgaW4gb3JkZXIgdG8gbWFpbnRhaW4gaXRzIHNvcnQgb3JkZXIuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBzb3J0ZWQgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBldmFsdWF0ZS5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZXRIaWdoZXN0XSBTcGVjaWZ5IHJldHVybmluZyB0aGUgaGlnaGVzdCBxdWFsaWZpZWQgaW5kZXguXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggYXQgd2hpY2ggYHZhbHVlYCBzaG91bGQgYmUgaW5zZXJ0ZWRcbiAgICAgKiAgaW50byBgYXJyYXlgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VTb3J0ZWRJbmRleChhcnJheSwgdmFsdWUsIHJldEhpZ2hlc3QpIHtcbiAgICAgIHZhciBsb3cgPSAwLFxuICAgICAgICAgIGhpZ2ggPSBhcnJheSA9PSBudWxsID8gbG93IDogYXJyYXkubGVuZ3RoO1xuXG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09ICdudW1iZXInICYmIHZhbHVlID09PSB2YWx1ZSAmJiBoaWdoIDw9IEhBTEZfTUFYX0FSUkFZX0xFTkdUSCkge1xuICAgICAgICB3aGlsZSAobG93IDwgaGlnaCkge1xuICAgICAgICAgIHZhciBtaWQgPSAobG93ICsgaGlnaCkgPj4+IDEsXG4gICAgICAgICAgICAgIGNvbXB1dGVkID0gYXJyYXlbbWlkXTtcblxuICAgICAgICAgIGlmIChjb21wdXRlZCAhPT0gbnVsbCAmJiAhaXNTeW1ib2woY29tcHV0ZWQpICYmXG4gICAgICAgICAgICAgIChyZXRIaWdoZXN0ID8gKGNvbXB1dGVkIDw9IHZhbHVlKSA6IChjb21wdXRlZCA8IHZhbHVlKSkpIHtcbiAgICAgICAgICAgIGxvdyA9IG1pZCArIDE7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGhpZ2ggPSBtaWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBoaWdoO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJhc2VTb3J0ZWRJbmRleEJ5KGFycmF5LCB2YWx1ZSwgaWRlbnRpdHksIHJldEhpZ2hlc3QpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnNvcnRlZEluZGV4QnlgIGFuZCBgXy5zb3J0ZWRMYXN0SW5kZXhCeWBcbiAgICAgKiB3aGljaCBpbnZva2VzIGBpdGVyYXRlZWAgZm9yIGB2YWx1ZWAgYW5kIGVhY2ggZWxlbWVudCBvZiBgYXJyYXlgIHRvIGNvbXB1dGVcbiAgICAgKiB0aGVpciBzb3J0IHJhbmtpbmcuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OyAodmFsdWUpLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgc29ydGVkIGFycmF5IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gZXZhbHVhdGUuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbcmV0SGlnaGVzdF0gU3BlY2lmeSByZXR1cm5pbmcgdGhlIGhpZ2hlc3QgcXVhbGlmaWVkIGluZGV4LlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IGF0IHdoaWNoIGB2YWx1ZWAgc2hvdWxkIGJlIGluc2VydGVkXG4gICAgICogIGludG8gYGFycmF5YC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlU29ydGVkSW5kZXhCeShhcnJheSwgdmFsdWUsIGl0ZXJhdGVlLCByZXRIaWdoZXN0KSB7XG4gICAgICB2YXIgbG93ID0gMCxcbiAgICAgICAgICBoaWdoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gICAgICBpZiAoaGlnaCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH1cblxuICAgICAgdmFsdWUgPSBpdGVyYXRlZSh2YWx1ZSk7XG4gICAgICB2YXIgdmFsSXNOYU4gPSB2YWx1ZSAhPT0gdmFsdWUsXG4gICAgICAgICAgdmFsSXNOdWxsID0gdmFsdWUgPT09IG51bGwsXG4gICAgICAgICAgdmFsSXNTeW1ib2wgPSBpc1N5bWJvbCh2YWx1ZSksXG4gICAgICAgICAgdmFsSXNVbmRlZmluZWQgPSB2YWx1ZSA9PT0gdW5kZWZpbmVkO1xuXG4gICAgICB3aGlsZSAobG93IDwgaGlnaCkge1xuICAgICAgICB2YXIgbWlkID0gbmF0aXZlRmxvb3IoKGxvdyArIGhpZ2gpIC8gMiksXG4gICAgICAgICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlKGFycmF5W21pZF0pLFxuICAgICAgICAgICAgb3RoSXNEZWZpbmVkID0gY29tcHV0ZWQgIT09IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIG90aElzTnVsbCA9IGNvbXB1dGVkID09PSBudWxsLFxuICAgICAgICAgICAgb3RoSXNSZWZsZXhpdmUgPSBjb21wdXRlZCA9PT0gY29tcHV0ZWQsXG4gICAgICAgICAgICBvdGhJc1N5bWJvbCA9IGlzU3ltYm9sKGNvbXB1dGVkKTtcblxuICAgICAgICBpZiAodmFsSXNOYU4pIHtcbiAgICAgICAgICB2YXIgc2V0TG93ID0gcmV0SGlnaGVzdCB8fCBvdGhJc1JlZmxleGl2ZTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWxJc1VuZGVmaW5lZCkge1xuICAgICAgICAgIHNldExvdyA9IG90aElzUmVmbGV4aXZlICYmIChyZXRIaWdoZXN0IHx8IG90aElzRGVmaW5lZCk7XG4gICAgICAgIH0gZWxzZSBpZiAodmFsSXNOdWxsKSB7XG4gICAgICAgICAgc2V0TG93ID0gb3RoSXNSZWZsZXhpdmUgJiYgb3RoSXNEZWZpbmVkICYmIChyZXRIaWdoZXN0IHx8ICFvdGhJc051bGwpO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbElzU3ltYm9sKSB7XG4gICAgICAgICAgc2V0TG93ID0gb3RoSXNSZWZsZXhpdmUgJiYgb3RoSXNEZWZpbmVkICYmICFvdGhJc051bGwgJiYgKHJldEhpZ2hlc3QgfHwgIW90aElzU3ltYm9sKTtcbiAgICAgICAgfSBlbHNlIGlmIChvdGhJc051bGwgfHwgb3RoSXNTeW1ib2wpIHtcbiAgICAgICAgICBzZXRMb3cgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZXRMb3cgPSByZXRIaWdoZXN0ID8gKGNvbXB1dGVkIDw9IHZhbHVlKSA6IChjb21wdXRlZCA8IHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2V0TG93KSB7XG4gICAgICAgICAgbG93ID0gbWlkICsgMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoaWdoID0gbWlkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbmF0aXZlTWluKGhpZ2gsIE1BWF9BUlJBWV9JTkRFWCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uc29ydGVkVW5pcWAgYW5kIGBfLnNvcnRlZFVuaXFCeWAgd2l0aG91dFxuICAgICAqIHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZHVwbGljYXRlIGZyZWUgYXJyYXkuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVNvcnRlZFVuaXEoYXJyYXksIGl0ZXJhdGVlKSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICAgICAgcmVzSW5kZXggPSAwLFxuICAgICAgICAgIHJlc3VsdCA9IFtdO1xuXG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF0sXG4gICAgICAgICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlID8gaXRlcmF0ZWUodmFsdWUpIDogdmFsdWU7XG5cbiAgICAgICAgaWYgKCFpbmRleCB8fCAhZXEoY29tcHV0ZWQsIHNlZW4pKSB7XG4gICAgICAgICAgdmFyIHNlZW4gPSBjb21wdXRlZDtcbiAgICAgICAgICByZXN1bHRbcmVzSW5kZXgrK10gPSB2YWx1ZSA9PT0gMCA/IDAgOiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50b051bWJlcmAgd2hpY2ggZG9lc24ndCBlbnN1cmUgY29ycmVjdFxuICAgICAqIGNvbnZlcnNpb25zIG9mIGJpbmFyeSwgaGV4YWRlY2ltYWwsIG9yIG9jdGFsIHN0cmluZyB2YWx1ZXMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHByb2Nlc3MuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgbnVtYmVyLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VUb051bWJlcih2YWx1ZSkge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJykge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgICBpZiAoaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBOQU47XG4gICAgICB9XG4gICAgICByZXR1cm4gK3ZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnRvU3RyaW5nYCB3aGljaCBkb2Vzbid0IGNvbnZlcnQgbnVsbGlzaFxuICAgICAqIHZhbHVlcyB0byBlbXB0eSBzdHJpbmdzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwcm9jZXNzLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHN0cmluZy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlVG9TdHJpbmcodmFsdWUpIHtcbiAgICAgIC8vIEV4aXQgZWFybHkgZm9yIHN0cmluZ3MgdG8gYXZvaWQgYSBwZXJmb3JtYW5jZSBoaXQgaW4gc29tZSBlbnZpcm9ubWVudHMuXG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAvLyBSZWN1cnNpdmVseSBjb252ZXJ0IHZhbHVlcyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgICAgICByZXR1cm4gYXJyYXlNYXAodmFsdWUsIGJhc2VUb1N0cmluZykgKyAnJztcbiAgICAgIH1cbiAgICAgIGlmIChpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHN5bWJvbFRvU3RyaW5nID8gc3ltYm9sVG9TdHJpbmcuY2FsbCh2YWx1ZSkgOiAnJztcbiAgICAgIH1cbiAgICAgIHZhciByZXN1bHQgPSAodmFsdWUgKyAnJyk7XG4gICAgICByZXR1cm4gKHJlc3VsdCA9PSAnMCcgJiYgKDEgLyB2YWx1ZSkgPT0gLUlORklOSVRZKSA/ICctMCcgOiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udW5pcUJ5YCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NvbXBhcmF0b3JdIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZHVwbGljYXRlIGZyZWUgYXJyYXkuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVVuaXEoYXJyYXksIGl0ZXJhdGVlLCBjb21wYXJhdG9yKSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBpbmNsdWRlcyA9IGFycmF5SW5jbHVkZXMsXG4gICAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICAgIGlzQ29tbW9uID0gdHJ1ZSxcbiAgICAgICAgICByZXN1bHQgPSBbXSxcbiAgICAgICAgICBzZWVuID0gcmVzdWx0O1xuXG4gICAgICBpZiAoY29tcGFyYXRvcikge1xuICAgICAgICBpc0NvbW1vbiA9IGZhbHNlO1xuICAgICAgICBpbmNsdWRlcyA9IGFycmF5SW5jbHVkZXNXaXRoO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAobGVuZ3RoID49IExBUkdFX0FSUkFZX1NJWkUpIHtcbiAgICAgICAgdmFyIHNldCA9IGl0ZXJhdGVlID8gbnVsbCA6IGNyZWF0ZVNldChhcnJheSk7XG4gICAgICAgIGlmIChzZXQpIHtcbiAgICAgICAgICByZXR1cm4gc2V0VG9BcnJheShzZXQpO1xuICAgICAgICB9XG4gICAgICAgIGlzQ29tbW9uID0gZmFsc2U7XG4gICAgICAgIGluY2x1ZGVzID0gY2FjaGVIYXM7XG4gICAgICAgIHNlZW4gPSBuZXcgU2V0Q2FjaGU7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgc2VlbiA9IGl0ZXJhdGVlID8gW10gOiByZXN1bHQ7XG4gICAgICB9XG4gICAgICBvdXRlcjpcbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUgPyBpdGVyYXRlZSh2YWx1ZSkgOiB2YWx1ZTtcblxuICAgICAgICB2YWx1ZSA9IChjb21wYXJhdG9yIHx8IHZhbHVlICE9PSAwKSA/IHZhbHVlIDogMDtcbiAgICAgICAgaWYgKGlzQ29tbW9uICYmIGNvbXB1dGVkID09PSBjb21wdXRlZCkge1xuICAgICAgICAgIHZhciBzZWVuSW5kZXggPSBzZWVuLmxlbmd0aDtcbiAgICAgICAgICB3aGlsZSAoc2VlbkluZGV4LS0pIHtcbiAgICAgICAgICAgIGlmIChzZWVuW3NlZW5JbmRleF0gPT09IGNvbXB1dGVkKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlIG91dGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXRlcmF0ZWUpIHtcbiAgICAgICAgICAgIHNlZW4ucHVzaChjb21wdXRlZCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghaW5jbHVkZXMoc2VlbiwgY29tcHV0ZWQsIGNvbXBhcmF0b3IpKSB7XG4gICAgICAgICAgaWYgKHNlZW4gIT09IHJlc3VsdCkge1xuICAgICAgICAgICAgc2Vlbi5wdXNoKGNvbXB1dGVkKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnVuc2V0YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcHJvcGVydHkgcGF0aCB0byB1bnNldC5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHByb3BlcnR5IGlzIGRlbGV0ZWQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlVW5zZXQob2JqZWN0LCBwYXRoKSB7XG4gICAgICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqZWN0KTtcbiAgICAgIG9iamVjdCA9IHBhcmVudChvYmplY3QsIHBhdGgpO1xuICAgICAgcmV0dXJuIG9iamVjdCA9PSBudWxsIHx8IGRlbGV0ZSBvYmplY3RbdG9LZXkobGFzdChwYXRoKSldO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnVwZGF0ZWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gICAgICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIHVwZGF0ZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSB1cGRhdGVyIFRoZSBmdW5jdGlvbiB0byBwcm9kdWNlIHRoZSB1cGRhdGVkIHZhbHVlLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIHBhdGggY3JlYXRpb24uXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlVXBkYXRlKG9iamVjdCwgcGF0aCwgdXBkYXRlciwgY3VzdG9taXplcikge1xuICAgICAgcmV0dXJuIGJhc2VTZXQob2JqZWN0LCBwYXRoLCB1cGRhdGVyKGJhc2VHZXQob2JqZWN0LCBwYXRoKSksIGN1c3RvbWl6ZXIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIG1ldGhvZHMgbGlrZSBgXy5kcm9wV2hpbGVgIGFuZCBgXy50YWtlV2hpbGVgXG4gICAgICogd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbaXNEcm9wXSBTcGVjaWZ5IGRyb3BwaW5nIGVsZW1lbnRzIGluc3RlYWQgb2YgdGFraW5nIHRoZW0uXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZnJvbVJpZ2h0XSBTcGVjaWZ5IGl0ZXJhdGluZyBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzbGljZSBvZiBgYXJyYXlgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VXaGlsZShhcnJheSwgcHJlZGljYXRlLCBpc0Ryb3AsIGZyb21SaWdodCkge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgICBpbmRleCA9IGZyb21SaWdodCA/IGxlbmd0aCA6IC0xO1xuXG4gICAgICB3aGlsZSAoKGZyb21SaWdodCA/IGluZGV4LS0gOiArK2luZGV4IDwgbGVuZ3RoKSAmJlxuICAgICAgICBwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSB7fVxuXG4gICAgICByZXR1cm4gaXNEcm9wXG4gICAgICAgID8gYmFzZVNsaWNlKGFycmF5LCAoZnJvbVJpZ2h0ID8gMCA6IGluZGV4KSwgKGZyb21SaWdodCA/IGluZGV4ICsgMSA6IGxlbmd0aCkpXG4gICAgICAgIDogYmFzZVNsaWNlKGFycmF5LCAoZnJvbVJpZ2h0ID8gaW5kZXggKyAxIDogMCksIChmcm9tUmlnaHQgPyBsZW5ndGggOiBpbmRleCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGB3cmFwcGVyVmFsdWVgIHdoaWNoIHJldHVybnMgdGhlIHJlc3VsdCBvZlxuICAgICAqIHBlcmZvcm1pbmcgYSBzZXF1ZW5jZSBvZiBhY3Rpb25zIG9uIHRoZSB1bndyYXBwZWQgYHZhbHVlYCwgd2hlcmUgZWFjaFxuICAgICAqIHN1Y2Nlc3NpdmUgYWN0aW9uIGlzIHN1cHBsaWVkIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIHByZXZpb3VzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB1bndyYXBwZWQgdmFsdWUuXG4gICAgICogQHBhcmFtIHtBcnJheX0gYWN0aW9ucyBBY3Rpb25zIHRvIHBlcmZvcm0gdG8gcmVzb2x2ZSB0aGUgdW53cmFwcGVkIHZhbHVlLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXNvbHZlZCB2YWx1ZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlV3JhcHBlclZhbHVlKHZhbHVlLCBhY3Rpb25zKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gdmFsdWU7XG4gICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgTGF6eVdyYXBwZXIpIHtcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnZhbHVlKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYXJyYXlSZWR1Y2UoYWN0aW9ucywgZnVuY3Rpb24ocmVzdWx0LCBhY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIGFjdGlvbi5mdW5jLmFwcGx5KGFjdGlvbi50aGlzQXJnLCBhcnJheVB1c2goW3Jlc3VsdF0sIGFjdGlvbi5hcmdzKSk7XG4gICAgICB9LCByZXN1bHQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIG1ldGhvZHMgbGlrZSBgXy54b3JgLCB3aXRob3V0IHN1cHBvcnQgZm9yXG4gICAgICogaXRlcmF0ZWUgc2hvcnRoYW5kcywgdGhhdCBhY2NlcHRzIGFuIGFycmF5IG9mIGFycmF5cyB0byBpbnNwZWN0LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheXMgVGhlIGFycmF5cyB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NvbXBhcmF0b3JdIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgdmFsdWVzLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VYb3IoYXJyYXlzLCBpdGVyYXRlZSwgY29tcGFyYXRvcikge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5cy5sZW5ndGg7XG4gICAgICBpZiAobGVuZ3RoIDwgMikge1xuICAgICAgICByZXR1cm4gbGVuZ3RoID8gYmFzZVVuaXEoYXJyYXlzWzBdKSA6IFtdO1xuICAgICAgfVxuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIGFycmF5ID0gYXJyYXlzW2luZGV4XSxcbiAgICAgICAgICAgIG90aEluZGV4ID0gLTE7XG5cbiAgICAgICAgd2hpbGUgKCsrb3RoSW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICBpZiAob3RoSW5kZXggIT0gaW5kZXgpIHtcbiAgICAgICAgICAgIHJlc3VsdFtpbmRleF0gPSBiYXNlRGlmZmVyZW5jZShyZXN1bHRbaW5kZXhdIHx8IGFycmF5LCBhcnJheXNbb3RoSW5kZXhdLCBpdGVyYXRlZSwgY29tcGFyYXRvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYmFzZVVuaXEoYmFzZUZsYXR0ZW4ocmVzdWx0LCAxKSwgaXRlcmF0ZWUsIGNvbXBhcmF0b3IpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy56aXBPYmplY3RgIHdoaWNoIGFzc2lnbnMgdmFsdWVzIHVzaW5nIGBhc3NpZ25GdW5jYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gcHJvcHMgVGhlIHByb3BlcnR5IGlkZW50aWZpZXJzLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgcHJvcGVydHkgdmFsdWVzLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGFzc2lnbkZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFzc2lnbiB2YWx1ZXMuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlWmlwT2JqZWN0KHByb3BzLCB2YWx1ZXMsIGFzc2lnbkZ1bmMpIHtcbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGxlbmd0aCA9IHByb3BzLmxlbmd0aCxcbiAgICAgICAgICB2YWxzTGVuZ3RoID0gdmFsdWVzLmxlbmd0aCxcbiAgICAgICAgICByZXN1bHQgPSB7fTtcblxuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gaW5kZXggPCB2YWxzTGVuZ3RoID8gdmFsdWVzW2luZGV4XSA6IHVuZGVmaW5lZDtcbiAgICAgICAgYXNzaWduRnVuYyhyZXN1bHQsIHByb3BzW2luZGV4XSwgdmFsdWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYXN0cyBgdmFsdWVgIHRvIGFuIGVtcHR5IGFycmF5IGlmIGl0J3Mgbm90IGFuIGFycmF5IGxpa2Ugb2JqZWN0LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBpbnNwZWN0LlxuICAgICAqIEByZXR1cm5zIHtBcnJheXxPYmplY3R9IFJldHVybnMgdGhlIGNhc3QgYXJyYXktbGlrZSBvYmplY3QuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY2FzdEFycmF5TGlrZU9iamVjdCh2YWx1ZSkge1xuICAgICAgcmV0dXJuIGlzQXJyYXlMaWtlT2JqZWN0KHZhbHVlKSA/IHZhbHVlIDogW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FzdHMgYHZhbHVlYCB0byBgaWRlbnRpdHlgIGlmIGl0J3Mgbm90IGEgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGNhc3QgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY2FzdEZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdmdW5jdGlvbicgPyB2YWx1ZSA6IGlkZW50aXR5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhc3RzIGB2YWx1ZWAgdG8gYSBwYXRoIGFycmF5IGlmIGl0J3Mgbm90IG9uZS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeSBrZXlzIG9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY2FzdCBwcm9wZXJ0eSBwYXRoIGFycmF5LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNhc3RQYXRoKHZhbHVlLCBvYmplY3QpIHtcbiAgICAgIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gaXNLZXkodmFsdWUsIG9iamVjdCkgPyBbdmFsdWVdIDogc3RyaW5nVG9QYXRoKHRvU3RyaW5nKHZhbHVlKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSBgYmFzZVJlc3RgIGFsaWFzIHdoaWNoIGNhbiBiZSByZXBsYWNlZCB3aXRoIGBpZGVudGl0eWAgYnkgbW9kdWxlXG4gICAgICogcmVwbGFjZW1lbnQgcGx1Z2lucy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHR5cGUge0Z1bmN0aW9ufVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICovXG4gICAgdmFyIGNhc3RSZXN0ID0gYmFzZVJlc3Q7XG5cbiAgICAvKipcbiAgICAgKiBDYXN0cyBgYXJyYXlgIHRvIGEgc2xpY2UgaWYgaXQncyBuZWVkZWQuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydCBUaGUgc3RhcnQgcG9zaXRpb24uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtlbmQ9YXJyYXkubGVuZ3RoXSBUaGUgZW5kIHBvc2l0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY2FzdCBzbGljZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjYXN0U2xpY2UoYXJyYXksIHN0YXJ0LCBlbmQpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG4gICAgICBlbmQgPSBlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IGVuZDtcbiAgICAgIHJldHVybiAoIXN0YXJ0ICYmIGVuZCA+PSBsZW5ndGgpID8gYXJyYXkgOiBiYXNlU2xpY2UoYXJyYXksIHN0YXJ0LCBlbmQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgc2ltcGxlIHdyYXBwZXIgYXJvdW5kIHRoZSBnbG9iYWwgW2BjbGVhclRpbWVvdXRgXShodHRwczovL21kbi5pby9jbGVhclRpbWVvdXQpLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge251bWJlcnxPYmplY3R9IGlkIFRoZSB0aW1lciBpZCBvciB0aW1lb3V0IG9iamVjdCBvZiB0aGUgdGltZXIgdG8gY2xlYXIuXG4gICAgICovXG4gICAgdmFyIGNsZWFyVGltZW91dCA9IGN0eENsZWFyVGltZW91dCB8fCBmdW5jdGlvbihpZCkge1xuICAgICAgcmV0dXJuIHJvb3QuY2xlYXJUaW1lb3V0KGlkKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGNsb25lIG9mICBgYnVmZmVyYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtCdWZmZXJ9IGJ1ZmZlciBUaGUgYnVmZmVyIHRvIGNsb25lLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXG4gICAgICogQHJldHVybnMge0J1ZmZlcn0gUmV0dXJucyB0aGUgY2xvbmVkIGJ1ZmZlci5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjbG9uZUJ1ZmZlcihidWZmZXIsIGlzRGVlcCkge1xuICAgICAgaWYgKGlzRGVlcCkge1xuICAgICAgICByZXR1cm4gYnVmZmVyLnNsaWNlKCk7XG4gICAgICB9XG4gICAgICB2YXIgbGVuZ3RoID0gYnVmZmVyLmxlbmd0aCxcbiAgICAgICAgICByZXN1bHQgPSBhbGxvY1Vuc2FmZSA/IGFsbG9jVW5zYWZlKGxlbmd0aCkgOiBuZXcgYnVmZmVyLmNvbnN0cnVjdG9yKGxlbmd0aCk7XG5cbiAgICAgIGJ1ZmZlci5jb3B5KHJlc3VsdCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgYXJyYXlCdWZmZXJgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5QnVmZmVyfSBhcnJheUJ1ZmZlciBUaGUgYXJyYXkgYnVmZmVyIHRvIGNsb25lLlxuICAgICAqIEByZXR1cm5zIHtBcnJheUJ1ZmZlcn0gUmV0dXJucyB0aGUgY2xvbmVkIGFycmF5IGJ1ZmZlci5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjbG9uZUFycmF5QnVmZmVyKGFycmF5QnVmZmVyKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gbmV3IGFycmF5QnVmZmVyLmNvbnN0cnVjdG9yKGFycmF5QnVmZmVyLmJ5dGVMZW5ndGgpO1xuICAgICAgbmV3IFVpbnQ4QXJyYXkocmVzdWx0KS5zZXQobmV3IFVpbnQ4QXJyYXkoYXJyYXlCdWZmZXIpKTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGNsb25lIG9mIGBkYXRhVmlld2AuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhVmlldyBUaGUgZGF0YSB2aWV3IHRvIGNsb25lLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2xvbmVkIGRhdGEgdmlldy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjbG9uZURhdGFWaWV3KGRhdGFWaWV3LCBpc0RlZXApIHtcbiAgICAgIHZhciBidWZmZXIgPSBpc0RlZXAgPyBjbG9uZUFycmF5QnVmZmVyKGRhdGFWaWV3LmJ1ZmZlcikgOiBkYXRhVmlldy5idWZmZXI7XG4gICAgICByZXR1cm4gbmV3IGRhdGFWaWV3LmNvbnN0cnVjdG9yKGJ1ZmZlciwgZGF0YVZpZXcuYnl0ZU9mZnNldCwgZGF0YVZpZXcuYnl0ZUxlbmd0aCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGNsb25lIG9mIGByZWdleHBgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gcmVnZXhwIFRoZSByZWdleHAgdG8gY2xvbmUuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2xvbmVkIHJlZ2V4cC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjbG9uZVJlZ0V4cChyZWdleHApIHtcbiAgICAgIHZhciByZXN1bHQgPSBuZXcgcmVnZXhwLmNvbnN0cnVjdG9yKHJlZ2V4cC5zb3VyY2UsIHJlRmxhZ3MuZXhlYyhyZWdleHApKTtcbiAgICAgIHJlc3VsdC5sYXN0SW5kZXggPSByZWdleHAubGFzdEluZGV4O1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhlIGBzeW1ib2xgIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHN5bWJvbCBUaGUgc3ltYm9sIG9iamVjdCB0byBjbG9uZS5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjbG9uZWQgc3ltYm9sIG9iamVjdC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjbG9uZVN5bWJvbChzeW1ib2wpIHtcbiAgICAgIHJldHVybiBzeW1ib2xWYWx1ZU9mID8gT2JqZWN0KHN5bWJvbFZhbHVlT2YuY2FsbChzeW1ib2wpKSA6IHt9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgdHlwZWRBcnJheWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSB0eXBlZEFycmF5IFRoZSB0eXBlZCBhcnJheSB0byBjbG9uZS5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0RlZXBdIFNwZWNpZnkgYSBkZWVwIGNsb25lLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCB0eXBlZCBhcnJheS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjbG9uZVR5cGVkQXJyYXkodHlwZWRBcnJheSwgaXNEZWVwKSB7XG4gICAgICB2YXIgYnVmZmVyID0gaXNEZWVwID8gY2xvbmVBcnJheUJ1ZmZlcih0eXBlZEFycmF5LmJ1ZmZlcikgOiB0eXBlZEFycmF5LmJ1ZmZlcjtcbiAgICAgIHJldHVybiBuZXcgdHlwZWRBcnJheS5jb25zdHJ1Y3RvcihidWZmZXIsIHR5cGVkQXJyYXkuYnl0ZU9mZnNldCwgdHlwZWRBcnJheS5sZW5ndGgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbXBhcmVzIHZhbHVlcyB0byBzb3J0IHRoZW0gaW4gYXNjZW5kaW5nIG9yZGVyLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgc29ydCBvcmRlciBpbmRpY2F0b3IgZm9yIGB2YWx1ZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY29tcGFyZUFzY2VuZGluZyh2YWx1ZSwgb3RoZXIpIHtcbiAgICAgIGlmICh2YWx1ZSAhPT0gb3RoZXIpIHtcbiAgICAgICAgdmFyIHZhbElzRGVmaW5lZCA9IHZhbHVlICE9PSB1bmRlZmluZWQsXG4gICAgICAgICAgICB2YWxJc051bGwgPSB2YWx1ZSA9PT0gbnVsbCxcbiAgICAgICAgICAgIHZhbElzUmVmbGV4aXZlID0gdmFsdWUgPT09IHZhbHVlLFxuICAgICAgICAgICAgdmFsSXNTeW1ib2wgPSBpc1N5bWJvbCh2YWx1ZSk7XG5cbiAgICAgICAgdmFyIG90aElzRGVmaW5lZCA9IG90aGVyICE9PSB1bmRlZmluZWQsXG4gICAgICAgICAgICBvdGhJc051bGwgPSBvdGhlciA9PT0gbnVsbCxcbiAgICAgICAgICAgIG90aElzUmVmbGV4aXZlID0gb3RoZXIgPT09IG90aGVyLFxuICAgICAgICAgICAgb3RoSXNTeW1ib2wgPSBpc1N5bWJvbChvdGhlcik7XG5cbiAgICAgICAgaWYgKCghb3RoSXNOdWxsICYmICFvdGhJc1N5bWJvbCAmJiAhdmFsSXNTeW1ib2wgJiYgdmFsdWUgPiBvdGhlcikgfHxcbiAgICAgICAgICAgICh2YWxJc1N5bWJvbCAmJiBvdGhJc0RlZmluZWQgJiYgb3RoSXNSZWZsZXhpdmUgJiYgIW90aElzTnVsbCAmJiAhb3RoSXNTeW1ib2wpIHx8XG4gICAgICAgICAgICAodmFsSXNOdWxsICYmIG90aElzRGVmaW5lZCAmJiBvdGhJc1JlZmxleGl2ZSkgfHxcbiAgICAgICAgICAgICghdmFsSXNEZWZpbmVkICYmIG90aElzUmVmbGV4aXZlKSB8fFxuICAgICAgICAgICAgIXZhbElzUmVmbGV4aXZlKSB7XG4gICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCghdmFsSXNOdWxsICYmICF2YWxJc1N5bWJvbCAmJiAhb3RoSXNTeW1ib2wgJiYgdmFsdWUgPCBvdGhlcikgfHxcbiAgICAgICAgICAgIChvdGhJc1N5bWJvbCAmJiB2YWxJc0RlZmluZWQgJiYgdmFsSXNSZWZsZXhpdmUgJiYgIXZhbElzTnVsbCAmJiAhdmFsSXNTeW1ib2wpIHx8XG4gICAgICAgICAgICAob3RoSXNOdWxsICYmIHZhbElzRGVmaW5lZCAmJiB2YWxJc1JlZmxleGl2ZSkgfHxcbiAgICAgICAgICAgICghb3RoSXNEZWZpbmVkICYmIHZhbElzUmVmbGV4aXZlKSB8fFxuICAgICAgICAgICAgIW90aElzUmVmbGV4aXZlKSB7XG4gICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIGJ5IGBfLm9yZGVyQnlgIHRvIGNvbXBhcmUgbXVsdGlwbGUgcHJvcGVydGllcyBvZiBhIHZhbHVlIHRvIGFub3RoZXJcbiAgICAgKiBhbmQgc3RhYmxlIHNvcnQgdGhlbS5cbiAgICAgKlxuICAgICAqIElmIGBvcmRlcnNgIGlzIHVuc3BlY2lmaWVkLCBhbGwgdmFsdWVzIGFyZSBzb3J0ZWQgaW4gYXNjZW5kaW5nIG9yZGVyLiBPdGhlcndpc2UsXG4gICAgICogc3BlY2lmeSBhbiBvcmRlciBvZiBcImRlc2NcIiBmb3IgZGVzY2VuZGluZyBvciBcImFzY1wiIGZvciBhc2NlbmRpbmcgc29ydCBvcmRlclxuICAgICAqIG9mIGNvcnJlc3BvbmRpbmcgdmFsdWVzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3RoZXIgVGhlIG90aGVyIG9iamVjdCB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbltdfHN0cmluZ1tdfSBvcmRlcnMgVGhlIG9yZGVyIHRvIHNvcnQgYnkgZm9yIGVhY2ggcHJvcGVydHkuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgc29ydCBvcmRlciBpbmRpY2F0b3IgZm9yIGBvYmplY3RgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvbXBhcmVNdWx0aXBsZShvYmplY3QsIG90aGVyLCBvcmRlcnMpIHtcbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIG9iakNyaXRlcmlhID0gb2JqZWN0LmNyaXRlcmlhLFxuICAgICAgICAgIG90aENyaXRlcmlhID0gb3RoZXIuY3JpdGVyaWEsXG4gICAgICAgICAgbGVuZ3RoID0gb2JqQ3JpdGVyaWEubGVuZ3RoLFxuICAgICAgICAgIG9yZGVyc0xlbmd0aCA9IG9yZGVycy5sZW5ndGg7XG5cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBjb21wYXJlQXNjZW5kaW5nKG9iakNyaXRlcmlhW2luZGV4XSwgb3RoQ3JpdGVyaWFbaW5kZXhdKTtcbiAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgIGlmIChpbmRleCA+PSBvcmRlcnNMZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBvcmRlciA9IG9yZGVyc1tpbmRleF07XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdCAqIChvcmRlciA9PSAnZGVzYycgPyAtMSA6IDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBGaXhlcyBhbiBgQXJyYXkjc29ydGAgYnVnIGluIHRoZSBKUyBlbmdpbmUgZW1iZWRkZWQgaW4gQWRvYmUgYXBwbGljYXRpb25zXG4gICAgICAvLyB0aGF0IGNhdXNlcyBpdCwgdW5kZXIgY2VydGFpbiBjaXJjdW1zdGFuY2VzLCB0byBwcm92aWRlIHRoZSBzYW1lIHZhbHVlIGZvclxuICAgICAgLy8gYG9iamVjdGAgYW5kIGBvdGhlcmAuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vamFzaGtlbmFzL3VuZGVyc2NvcmUvcHVsbC8xMjQ3XG4gICAgICAvLyBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAgLy9cbiAgICAgIC8vIFRoaXMgYWxzbyBlbnN1cmVzIGEgc3RhYmxlIHNvcnQgaW4gVjggYW5kIG90aGVyIGVuZ2luZXMuXG4gICAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9OTAgZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgIHJldHVybiBvYmplY3QuaW5kZXggLSBvdGhlci5pbmRleDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IHRoYXQgaXMgdGhlIGNvbXBvc2l0aW9uIG9mIHBhcnRpYWxseSBhcHBsaWVkIGFyZ3VtZW50cyxcbiAgICAgKiBwbGFjZWhvbGRlcnMsIGFuZCBwcm92aWRlZCBhcmd1bWVudHMgaW50byBhIHNpbmdsZSBhcnJheSBvZiBhcmd1bWVudHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MgVGhlIHByb3ZpZGVkIGFyZ3VtZW50cy5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBwYXJ0aWFscyBUaGUgYXJndW1lbnRzIHRvIHByZXBlbmQgdG8gdGhvc2UgcHJvdmlkZWQuXG4gICAgICogQHBhcmFtIHtBcnJheX0gaG9sZGVycyBUaGUgYHBhcnRpYWxzYCBwbGFjZWhvbGRlciBpbmRleGVzLlxuICAgICAqIEBwYXJhbXMge2Jvb2xlYW59IFtpc0N1cnJpZWRdIFNwZWNpZnkgY29tcG9zaW5nIGZvciBhIGN1cnJpZWQgZnVuY3Rpb24uXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgY29tcG9zZWQgYXJndW1lbnRzLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvbXBvc2VBcmdzKGFyZ3MsIHBhcnRpYWxzLCBob2xkZXJzLCBpc0N1cnJpZWQpIHtcbiAgICAgIHZhciBhcmdzSW5kZXggPSAtMSxcbiAgICAgICAgICBhcmdzTGVuZ3RoID0gYXJncy5sZW5ndGgsXG4gICAgICAgICAgaG9sZGVyc0xlbmd0aCA9IGhvbGRlcnMubGVuZ3RoLFxuICAgICAgICAgIGxlZnRJbmRleCA9IC0xLFxuICAgICAgICAgIGxlZnRMZW5ndGggPSBwYXJ0aWFscy5sZW5ndGgsXG4gICAgICAgICAgcmFuZ2VMZW5ndGggPSBuYXRpdmVNYXgoYXJnc0xlbmd0aCAtIGhvbGRlcnNMZW5ndGgsIDApLFxuICAgICAgICAgIHJlc3VsdCA9IEFycmF5KGxlZnRMZW5ndGggKyByYW5nZUxlbmd0aCksXG4gICAgICAgICAgaXNVbmN1cnJpZWQgPSAhaXNDdXJyaWVkO1xuXG4gICAgICB3aGlsZSAoKytsZWZ0SW5kZXggPCBsZWZ0TGVuZ3RoKSB7XG4gICAgICAgIHJlc3VsdFtsZWZ0SW5kZXhdID0gcGFydGlhbHNbbGVmdEluZGV4XTtcbiAgICAgIH1cbiAgICAgIHdoaWxlICgrK2FyZ3NJbmRleCA8IGhvbGRlcnNMZW5ndGgpIHtcbiAgICAgICAgaWYgKGlzVW5jdXJyaWVkIHx8IGFyZ3NJbmRleCA8IGFyZ3NMZW5ndGgpIHtcbiAgICAgICAgICByZXN1bHRbaG9sZGVyc1thcmdzSW5kZXhdXSA9IGFyZ3NbYXJnc0luZGV4XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgd2hpbGUgKHJhbmdlTGVuZ3RoLS0pIHtcbiAgICAgICAgcmVzdWx0W2xlZnRJbmRleCsrXSA9IGFyZ3NbYXJnc0luZGV4KytdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2UgYGNvbXBvc2VBcmdzYCBleGNlcHQgdGhhdCB0aGUgYXJndW1lbnRzIGNvbXBvc2l0aW9uXG4gICAgICogaXMgdGFpbG9yZWQgZm9yIGBfLnBhcnRpYWxSaWdodGAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MgVGhlIHByb3ZpZGVkIGFyZ3VtZW50cy5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBwYXJ0aWFscyBUaGUgYXJndW1lbnRzIHRvIGFwcGVuZCB0byB0aG9zZSBwcm92aWRlZC5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBob2xkZXJzIFRoZSBgcGFydGlhbHNgIHBsYWNlaG9sZGVyIGluZGV4ZXMuXG4gICAgICogQHBhcmFtcyB7Ym9vbGVhbn0gW2lzQ3VycmllZF0gU3BlY2lmeSBjb21wb3NpbmcgZm9yIGEgY3VycmllZCBmdW5jdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBjb21wb3NlZCBhcmd1bWVudHMuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY29tcG9zZUFyZ3NSaWdodChhcmdzLCBwYXJ0aWFscywgaG9sZGVycywgaXNDdXJyaWVkKSB7XG4gICAgICB2YXIgYXJnc0luZGV4ID0gLTEsXG4gICAgICAgICAgYXJnc0xlbmd0aCA9IGFyZ3MubGVuZ3RoLFxuICAgICAgICAgIGhvbGRlcnNJbmRleCA9IC0xLFxuICAgICAgICAgIGhvbGRlcnNMZW5ndGggPSBob2xkZXJzLmxlbmd0aCxcbiAgICAgICAgICByaWdodEluZGV4ID0gLTEsXG4gICAgICAgICAgcmlnaHRMZW5ndGggPSBwYXJ0aWFscy5sZW5ndGgsXG4gICAgICAgICAgcmFuZ2VMZW5ndGggPSBuYXRpdmVNYXgoYXJnc0xlbmd0aCAtIGhvbGRlcnNMZW5ndGgsIDApLFxuICAgICAgICAgIHJlc3VsdCA9IEFycmF5KHJhbmdlTGVuZ3RoICsgcmlnaHRMZW5ndGgpLFxuICAgICAgICAgIGlzVW5jdXJyaWVkID0gIWlzQ3VycmllZDtcblxuICAgICAgd2hpbGUgKCsrYXJnc0luZGV4IDwgcmFuZ2VMZW5ndGgpIHtcbiAgICAgICAgcmVzdWx0W2FyZ3NJbmRleF0gPSBhcmdzW2FyZ3NJbmRleF07XG4gICAgICB9XG4gICAgICB2YXIgb2Zmc2V0ID0gYXJnc0luZGV4O1xuICAgICAgd2hpbGUgKCsrcmlnaHRJbmRleCA8IHJpZ2h0TGVuZ3RoKSB7XG4gICAgICAgIHJlc3VsdFtvZmZzZXQgKyByaWdodEluZGV4XSA9IHBhcnRpYWxzW3JpZ2h0SW5kZXhdO1xuICAgICAgfVxuICAgICAgd2hpbGUgKCsraG9sZGVyc0luZGV4IDwgaG9sZGVyc0xlbmd0aCkge1xuICAgICAgICBpZiAoaXNVbmN1cnJpZWQgfHwgYXJnc0luZGV4IDwgYXJnc0xlbmd0aCkge1xuICAgICAgICAgIHJlc3VsdFtvZmZzZXQgKyBob2xkZXJzW2hvbGRlcnNJbmRleF1dID0gYXJnc1thcmdzSW5kZXgrK107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29waWVzIHRoZSB2YWx1ZXMgb2YgYHNvdXJjZWAgdG8gYGFycmF5YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gc291cmNlIFRoZSBhcnJheSB0byBjb3B5IHZhbHVlcyBmcm9tLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFthcnJheT1bXV0gVGhlIGFycmF5IHRvIGNvcHkgdmFsdWVzIHRvLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvcHlBcnJheShzb3VyY2UsIGFycmF5KSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSBzb3VyY2UubGVuZ3RoO1xuXG4gICAgICBhcnJheSB8fCAoYXJyYXkgPSBBcnJheShsZW5ndGgpKTtcbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIGFycmF5W2luZGV4XSA9IHNvdXJjZVtpbmRleF07XG4gICAgICB9XG4gICAgICByZXR1cm4gYXJyYXk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29waWVzIHByb3BlcnRpZXMgb2YgYHNvdXJjZWAgdG8gYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgZnJvbS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBwcm9wcyBUaGUgcHJvcGVydHkgaWRlbnRpZmllcnMgdG8gY29weS5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW29iamVjdD17fV0gVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgdG8uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29waWVkIHZhbHVlcy5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvcHlPYmplY3Qoc291cmNlLCBwcm9wcywgb2JqZWN0LCBjdXN0b21pemVyKSB7XG4gICAgICB2YXIgaXNOZXcgPSAhb2JqZWN0O1xuICAgICAgb2JqZWN0IHx8IChvYmplY3QgPSB7fSk7XG5cbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGxlbmd0aCA9IHByb3BzLmxlbmd0aDtcblxuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIGtleSA9IHByb3BzW2luZGV4XTtcblxuICAgICAgICB2YXIgbmV3VmFsdWUgPSBjdXN0b21pemVyXG4gICAgICAgICAgPyBjdXN0b21pemVyKG9iamVjdFtrZXldLCBzb3VyY2Vba2V5XSwga2V5LCBvYmplY3QsIHNvdXJjZSlcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAobmV3VmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIG5ld1ZhbHVlID0gc291cmNlW2tleV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzTmV3KSB7XG4gICAgICAgICAgYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXNzaWduVmFsdWUob2JqZWN0LCBrZXksIG5ld1ZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb3BpZXMgb3duIHN5bWJvbHMgb2YgYHNvdXJjZWAgdG8gYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCB0byBjb3B5IHN5bWJvbHMgZnJvbS5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW29iamVjdD17fV0gVGhlIG9iamVjdCB0byBjb3B5IHN5bWJvbHMgdG8uXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjb3B5U3ltYm9scyhzb3VyY2UsIG9iamVjdCkge1xuICAgICAgcmV0dXJuIGNvcHlPYmplY3Qoc291cmNlLCBnZXRTeW1ib2xzKHNvdXJjZSksIG9iamVjdCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29waWVzIG93biBhbmQgaW5oZXJpdGVkIHN5bWJvbHMgb2YgYHNvdXJjZWAgdG8gYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCB0byBjb3B5IHN5bWJvbHMgZnJvbS5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW29iamVjdD17fV0gVGhlIG9iamVjdCB0byBjb3B5IHN5bWJvbHMgdG8uXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjb3B5U3ltYm9sc0luKHNvdXJjZSwgb2JqZWN0KSB7XG4gICAgICByZXR1cm4gY29weU9iamVjdChzb3VyY2UsIGdldFN5bWJvbHNJbihzb3VyY2UpLCBvYmplY3QpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiBsaWtlIGBfLmdyb3VwQnlgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBzZXR0ZXIgVGhlIGZ1bmN0aW9uIHRvIHNldCBhY2N1bXVsYXRvciB2YWx1ZXMuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2luaXRpYWxpemVyXSBUaGUgYWNjdW11bGF0b3Igb2JqZWN0IGluaXRpYWxpemVyLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFnZ3JlZ2F0b3IgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlQWdncmVnYXRvcihzZXR0ZXIsIGluaXRpYWxpemVyKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24oY29sbGVjdGlvbiwgaXRlcmF0ZWUpIHtcbiAgICAgICAgdmFyIGZ1bmMgPSBpc0FycmF5KGNvbGxlY3Rpb24pID8gYXJyYXlBZ2dyZWdhdG9yIDogYmFzZUFnZ3JlZ2F0b3IsXG4gICAgICAgICAgICBhY2N1bXVsYXRvciA9IGluaXRpYWxpemVyID8gaW5pdGlhbGl6ZXIoKSA6IHt9O1xuXG4gICAgICAgIHJldHVybiBmdW5jKGNvbGxlY3Rpb24sIHNldHRlciwgZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDIpLCBhY2N1bXVsYXRvcik7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiBsaWtlIGBfLmFzc2lnbmAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGFzc2lnbmVyIFRoZSBmdW5jdGlvbiB0byBhc3NpZ24gdmFsdWVzLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFzc2lnbmVyIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZUFzc2lnbmVyKGFzc2lnbmVyKSB7XG4gICAgICByZXR1cm4gYmFzZVJlc3QoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2VzKSB7XG4gICAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgICAgbGVuZ3RoID0gc291cmNlcy5sZW5ndGgsXG4gICAgICAgICAgICBjdXN0b21pemVyID0gbGVuZ3RoID4gMSA/IHNvdXJjZXNbbGVuZ3RoIC0gMV0gOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBndWFyZCA9IGxlbmd0aCA+IDIgPyBzb3VyY2VzWzJdIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGN1c3RvbWl6ZXIgPSAoYXNzaWduZXIubGVuZ3RoID4gMyAmJiB0eXBlb2YgY3VzdG9taXplciA9PSAnZnVuY3Rpb24nKVxuICAgICAgICAgID8gKGxlbmd0aC0tLCBjdXN0b21pemVyKVxuICAgICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGlmIChndWFyZCAmJiBpc0l0ZXJhdGVlQ2FsbChzb3VyY2VzWzBdLCBzb3VyY2VzWzFdLCBndWFyZCkpIHtcbiAgICAgICAgICBjdXN0b21pemVyID0gbGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IGN1c3RvbWl6ZXI7XG4gICAgICAgICAgbGVuZ3RoID0gMTtcbiAgICAgICAgfVxuICAgICAgICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcbiAgICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICB2YXIgc291cmNlID0gc291cmNlc1tpbmRleF07XG4gICAgICAgICAgaWYgKHNvdXJjZSkge1xuICAgICAgICAgICAgYXNzaWduZXIob2JqZWN0LCBzb3VyY2UsIGluZGV4LCBjdXN0b21pemVyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBgYmFzZUVhY2hgIG9yIGBiYXNlRWFjaFJpZ2h0YCBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZWFjaEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGl0ZXJhdGUgb3ZlciBhIGNvbGxlY3Rpb24uXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZnJvbVJpZ2h0XSBTcGVjaWZ5IGl0ZXJhdGluZyBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYmFzZSBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVCYXNlRWFjaChlYWNoRnVuYywgZnJvbVJpZ2h0KSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24oY29sbGVjdGlvbiwgaXRlcmF0ZWUpIHtcbiAgICAgICAgaWYgKGNvbGxlY3Rpb24gPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBjb2xsZWN0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNBcnJheUxpa2UoY29sbGVjdGlvbikpIHtcbiAgICAgICAgICByZXR1cm4gZWFjaEZ1bmMoY29sbGVjdGlvbiwgaXRlcmF0ZWUpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBsZW5ndGggPSBjb2xsZWN0aW9uLmxlbmd0aCxcbiAgICAgICAgICAgIGluZGV4ID0gZnJvbVJpZ2h0ID8gbGVuZ3RoIDogLTEsXG4gICAgICAgICAgICBpdGVyYWJsZSA9IE9iamVjdChjb2xsZWN0aW9uKTtcblxuICAgICAgICB3aGlsZSAoKGZyb21SaWdodCA/IGluZGV4LS0gOiArK2luZGV4IDwgbGVuZ3RoKSkge1xuICAgICAgICAgIGlmIChpdGVyYXRlZShpdGVyYWJsZVtpbmRleF0sIGluZGV4LCBpdGVyYWJsZSkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb247XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBiYXNlIGZ1bmN0aW9uIGZvciBtZXRob2RzIGxpa2UgYF8uZm9ySW5gIGFuZCBgXy5mb3JPd25gLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtmcm9tUmlnaHRdIFNwZWNpZnkgaXRlcmF0aW5nIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBiYXNlIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZUJhc2VGb3IoZnJvbVJpZ2h0KSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0LCBpdGVyYXRlZSwga2V5c0Z1bmMpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgICBpdGVyYWJsZSA9IE9iamVjdChvYmplY3QpLFxuICAgICAgICAgICAgcHJvcHMgPSBrZXlzRnVuYyhvYmplY3QpLFxuICAgICAgICAgICAgbGVuZ3RoID0gcHJvcHMubGVuZ3RoO1xuXG4gICAgICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgICAgIHZhciBrZXkgPSBwcm9wc1tmcm9tUmlnaHQgPyBsZW5ndGggOiArK2luZGV4XTtcbiAgICAgICAgICBpZiAoaXRlcmF0ZWUoaXRlcmFibGVba2V5XSwga2V5LCBpdGVyYWJsZSkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgd3JhcHMgYGZ1bmNgIHRvIGludm9rZSBpdCB3aXRoIHRoZSBvcHRpb25hbCBgdGhpc2BcbiAgICAgKiBiaW5kaW5nIG9mIGB0aGlzQXJnYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBjcmVhdGVXcmFwYCBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAqIEBwYXJhbSB7Kn0gW3RoaXNBcmddIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgd3JhcHBlZCBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVCaW5kKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcpIHtcbiAgICAgIHZhciBpc0JpbmQgPSBiaXRtYXNrICYgV1JBUF9CSU5EX0ZMQUcsXG4gICAgICAgICAgQ3RvciA9IGNyZWF0ZUN0b3IoZnVuYyk7XG5cbiAgICAgIGZ1bmN0aW9uIHdyYXBwZXIoKSB7XG4gICAgICAgIHZhciBmbiA9ICh0aGlzICYmIHRoaXMgIT09IHJvb3QgJiYgdGhpcyBpbnN0YW5jZW9mIHdyYXBwZXIpID8gQ3RvciA6IGZ1bmM7XG4gICAgICAgIHJldHVybiBmbi5hcHBseShpc0JpbmQgPyB0aGlzQXJnIDogdGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB3cmFwcGVyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiBsaWtlIGBfLmxvd2VyRmlyc3RgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbWV0aG9kTmFtZSBUaGUgbmFtZSBvZiB0aGUgYFN0cmluZ2AgY2FzZSBtZXRob2QgdG8gdXNlLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNhc2UgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlQ2FzZUZpcnN0KG1ldGhvZE5hbWUpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICAgICAgc3RyaW5nID0gdG9TdHJpbmcoc3RyaW5nKTtcblxuICAgICAgICB2YXIgc3RyU3ltYm9scyA9IGhhc1VuaWNvZGUoc3RyaW5nKVxuICAgICAgICAgID8gc3RyaW5nVG9BcnJheShzdHJpbmcpXG4gICAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgdmFyIGNociA9IHN0clN5bWJvbHNcbiAgICAgICAgICA/IHN0clN5bWJvbHNbMF1cbiAgICAgICAgICA6IHN0cmluZy5jaGFyQXQoMCk7XG5cbiAgICAgICAgdmFyIHRyYWlsaW5nID0gc3RyU3ltYm9sc1xuICAgICAgICAgID8gY2FzdFNsaWNlKHN0clN5bWJvbHMsIDEpLmpvaW4oJycpXG4gICAgICAgICAgOiBzdHJpbmcuc2xpY2UoMSk7XG5cbiAgICAgICAgcmV0dXJuIGNoclttZXRob2ROYW1lXSgpICsgdHJhaWxpbmc7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiBsaWtlIGBfLmNhbWVsQ2FzZWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIFRoZSBmdW5jdGlvbiB0byBjb21iaW5lIGVhY2ggd29yZC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjb21wb3VuZGVyIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZUNvbXBvdW5kZXIoY2FsbGJhY2spIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIGFycmF5UmVkdWNlKHdvcmRzKGRlYnVycihzdHJpbmcpLnJlcGxhY2UocmVBcG9zLCAnJykpLCBjYWxsYmFjaywgJycpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBwcm9kdWNlcyBhbiBpbnN0YW5jZSBvZiBgQ3RvcmAgcmVnYXJkbGVzcyBvZlxuICAgICAqIHdoZXRoZXIgaXQgd2FzIGludm9rZWQgYXMgcGFydCBvZiBhIGBuZXdgIGV4cHJlc3Npb24gb3IgYnkgYGNhbGxgIG9yIGBhcHBseWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IEN0b3IgVGhlIGNvbnN0cnVjdG9yIHRvIHdyYXAuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgd3JhcHBlZCBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVDdG9yKEN0b3IpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgLy8gVXNlIGEgYHN3aXRjaGAgc3RhdGVtZW50IHRvIHdvcmsgd2l0aCBjbGFzcyBjb25zdHJ1Y3RvcnMuIFNlZVxuICAgICAgICAvLyBodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1lY21hc2NyaXB0LWZ1bmN0aW9uLW9iamVjdHMtY2FsbC10aGlzYXJndW1lbnQtYXJndW1lbnRzbGlzdFxuICAgICAgICAvLyBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgICAgICAgIGNhc2UgMDogcmV0dXJuIG5ldyBDdG9yO1xuICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0pO1xuICAgICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgICAgICAgIGNhc2UgMzogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgICAgICAgIGNhc2UgNDogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pO1xuICAgICAgICAgIGNhc2UgNTogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10sIGFyZ3NbNF0pO1xuICAgICAgICAgIGNhc2UgNjogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10sIGFyZ3NbNF0sIGFyZ3NbNV0pO1xuICAgICAgICAgIGNhc2UgNzogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10sIGFyZ3NbNF0sIGFyZ3NbNV0sIGFyZ3NbNl0pO1xuICAgICAgICB9XG4gICAgICAgIHZhciB0aGlzQmluZGluZyA9IGJhc2VDcmVhdGUoQ3Rvci5wcm90b3R5cGUpLFxuICAgICAgICAgICAgcmVzdWx0ID0gQ3Rvci5hcHBseSh0aGlzQmluZGluZywgYXJncyk7XG5cbiAgICAgICAgLy8gTWltaWMgdGhlIGNvbnN0cnVjdG9yJ3MgYHJldHVybmAgYmVoYXZpb3IuXG4gICAgICAgIC8vIFNlZSBodHRwczovL2VzNS5naXRodWIuaW8vI3gxMy4yLjIgZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgICAgcmV0dXJuIGlzT2JqZWN0KHJlc3VsdCkgPyByZXN1bHQgOiB0aGlzQmluZGluZztcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgd3JhcHMgYGZ1bmNgIHRvIGVuYWJsZSBjdXJyeWluZy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBjcmVhdGVXcmFwYCBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBhcml0eSBUaGUgYXJpdHkgb2YgYGZ1bmNgLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHdyYXBwZWQgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlQ3VycnkoZnVuYywgYml0bWFzaywgYXJpdHkpIHtcbiAgICAgIHZhciBDdG9yID0gY3JlYXRlQ3RvcihmdW5jKTtcblxuICAgICAgZnVuY3Rpb24gd3JhcHBlcigpIHtcbiAgICAgICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGgsXG4gICAgICAgICAgICBhcmdzID0gQXJyYXkobGVuZ3RoKSxcbiAgICAgICAgICAgIGluZGV4ID0gbGVuZ3RoLFxuICAgICAgICAgICAgcGxhY2Vob2xkZXIgPSBnZXRIb2xkZXIod3JhcHBlcik7XG5cbiAgICAgICAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICAgICAgICBhcmdzW2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleF07XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGhvbGRlcnMgPSAobGVuZ3RoIDwgMyAmJiBhcmdzWzBdICE9PSBwbGFjZWhvbGRlciAmJiBhcmdzW2xlbmd0aCAtIDFdICE9PSBwbGFjZWhvbGRlcilcbiAgICAgICAgICA/IFtdXG4gICAgICAgICAgOiByZXBsYWNlSG9sZGVycyhhcmdzLCBwbGFjZWhvbGRlcik7XG5cbiAgICAgICAgbGVuZ3RoIC09IGhvbGRlcnMubGVuZ3RoO1xuICAgICAgICBpZiAobGVuZ3RoIDwgYXJpdHkpIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlUmVjdXJyeShcbiAgICAgICAgICAgIGZ1bmMsIGJpdG1hc2ssIGNyZWF0ZUh5YnJpZCwgd3JhcHBlci5wbGFjZWhvbGRlciwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgYXJncywgaG9sZGVycywgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFyaXR5IC0gbGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZm4gPSAodGhpcyAmJiB0aGlzICE9PSByb290ICYmIHRoaXMgaW5zdGFuY2VvZiB3cmFwcGVyKSA/IEN0b3IgOiBmdW5jO1xuICAgICAgICByZXR1cm4gYXBwbHkoZm4sIHRoaXMsIGFyZ3MpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHdyYXBwZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGBfLmZpbmRgIG9yIGBfLmZpbmRMYXN0YCBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZmluZEluZGV4RnVuYyBUaGUgZnVuY3Rpb24gdG8gZmluZCB0aGUgY29sbGVjdGlvbiBpbmRleC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmaW5kIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZUZpbmQoZmluZEluZGV4RnVuYykge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKGNvbGxlY3Rpb24sIHByZWRpY2F0ZSwgZnJvbUluZGV4KSB7XG4gICAgICAgIHZhciBpdGVyYWJsZSA9IE9iamVjdChjb2xsZWN0aW9uKTtcbiAgICAgICAgaWYgKCFpc0FycmF5TGlrZShjb2xsZWN0aW9uKSkge1xuICAgICAgICAgIHZhciBpdGVyYXRlZSA9IGdldEl0ZXJhdGVlKHByZWRpY2F0ZSwgMyk7XG4gICAgICAgICAgY29sbGVjdGlvbiA9IGtleXMoY29sbGVjdGlvbik7XG4gICAgICAgICAgcHJlZGljYXRlID0gZnVuY3Rpb24oa2V5KSB7IHJldHVybiBpdGVyYXRlZShpdGVyYWJsZVtrZXldLCBrZXksIGl0ZXJhYmxlKTsgfTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgaW5kZXggPSBmaW5kSW5kZXhGdW5jKGNvbGxlY3Rpb24sIHByZWRpY2F0ZSwgZnJvbUluZGV4KTtcbiAgICAgICAgcmV0dXJuIGluZGV4ID4gLTEgPyBpdGVyYWJsZVtpdGVyYXRlZSA/IGNvbGxlY3Rpb25baW5kZXhdIDogaW5kZXhdIDogdW5kZWZpbmVkO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgYF8uZmxvd2Agb3IgYF8uZmxvd1JpZ2h0YCBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZnJvbVJpZ2h0XSBTcGVjaWZ5IGl0ZXJhdGluZyBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZmxvdyBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVGbG93KGZyb21SaWdodCkge1xuICAgICAgcmV0dXJuIGZsYXRSZXN0KGZ1bmN0aW9uKGZ1bmNzKSB7XG4gICAgICAgIHZhciBsZW5ndGggPSBmdW5jcy5sZW5ndGgsXG4gICAgICAgICAgICBpbmRleCA9IGxlbmd0aCxcbiAgICAgICAgICAgIHByZXJlcSA9IExvZGFzaFdyYXBwZXIucHJvdG90eXBlLnRocnU7XG5cbiAgICAgICAgaWYgKGZyb21SaWdodCkge1xuICAgICAgICAgIGZ1bmNzLnJldmVyc2UoKTtcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAoaW5kZXgtLSkge1xuICAgICAgICAgIHZhciBmdW5jID0gZnVuY3NbaW5kZXhdO1xuICAgICAgICAgIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChwcmVyZXEgJiYgIXdyYXBwZXIgJiYgZ2V0RnVuY05hbWUoZnVuYykgPT0gJ3dyYXBwZXInKSB7XG4gICAgICAgICAgICB2YXIgd3JhcHBlciA9IG5ldyBMb2Rhc2hXcmFwcGVyKFtdLCB0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaW5kZXggPSB3cmFwcGVyID8gaW5kZXggOiBsZW5ndGg7XG4gICAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgZnVuYyA9IGZ1bmNzW2luZGV4XTtcblxuICAgICAgICAgIHZhciBmdW5jTmFtZSA9IGdldEZ1bmNOYW1lKGZ1bmMpLFxuICAgICAgICAgICAgICBkYXRhID0gZnVuY05hbWUgPT0gJ3dyYXBwZXInID8gZ2V0RGF0YShmdW5jKSA6IHVuZGVmaW5lZDtcblxuICAgICAgICAgIGlmIChkYXRhICYmIGlzTGF6aWFibGUoZGF0YVswXSkgJiZcbiAgICAgICAgICAgICAgICBkYXRhWzFdID09IChXUkFQX0FSWV9GTEFHIHwgV1JBUF9DVVJSWV9GTEFHIHwgV1JBUF9QQVJUSUFMX0ZMQUcgfCBXUkFQX1JFQVJHX0ZMQUcpICYmXG4gICAgICAgICAgICAgICAgIWRhdGFbNF0ubGVuZ3RoICYmIGRhdGFbOV0gPT0gMVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgIHdyYXBwZXIgPSB3cmFwcGVyW2dldEZ1bmNOYW1lKGRhdGFbMF0pXS5hcHBseSh3cmFwcGVyLCBkYXRhWzNdKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgd3JhcHBlciA9IChmdW5jLmxlbmd0aCA9PSAxICYmIGlzTGF6aWFibGUoZnVuYykpXG4gICAgICAgICAgICAgID8gd3JhcHBlcltmdW5jTmFtZV0oKVxuICAgICAgICAgICAgICA6IHdyYXBwZXIudGhydShmdW5jKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzLFxuICAgICAgICAgICAgICB2YWx1ZSA9IGFyZ3NbMF07XG5cbiAgICAgICAgICBpZiAod3JhcHBlciAmJiBhcmdzLmxlbmd0aCA9PSAxICYmIGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gd3JhcHBlci5wbGFudCh2YWx1ZSkudmFsdWUoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIGluZGV4ID0gMCxcbiAgICAgICAgICAgICAgcmVzdWx0ID0gbGVuZ3RoID8gZnVuY3NbaW5kZXhdLmFwcGx5KHRoaXMsIGFyZ3MpIDogdmFsdWU7XG5cbiAgICAgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgcmVzdWx0ID0gZnVuY3NbaW5kZXhdLmNhbGwodGhpcywgcmVzdWx0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHdyYXBzIGBmdW5jYCB0byBpbnZva2UgaXQgd2l0aCBvcHRpb25hbCBgdGhpc2BcbiAgICAgKiBiaW5kaW5nIG9mIGB0aGlzQXJnYCwgcGFydGlhbCBhcHBsaWNhdGlvbiwgYW5kIGN1cnJ5aW5nLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufHN0cmluZ30gZnVuYyBUaGUgZnVuY3Rpb24gb3IgbWV0aG9kIG5hbWUgdG8gd3JhcC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBjcmVhdGVXcmFwYCBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAqIEBwYXJhbSB7Kn0gW3RoaXNBcmddIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gICAgICogQHBhcmFtIHtBcnJheX0gW3BhcnRpYWxzXSBUaGUgYXJndW1lbnRzIHRvIHByZXBlbmQgdG8gdGhvc2UgcHJvdmlkZWQgdG9cbiAgICAgKiAgdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbaG9sZGVyc10gVGhlIGBwYXJ0aWFsc2AgcGxhY2Vob2xkZXIgaW5kZXhlcy5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbcGFydGlhbHNSaWdodF0gVGhlIGFyZ3VtZW50cyB0byBhcHBlbmQgdG8gdGhvc2UgcHJvdmlkZWRcbiAgICAgKiAgdG8gdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbaG9sZGVyc1JpZ2h0XSBUaGUgYHBhcnRpYWxzUmlnaHRgIHBsYWNlaG9sZGVyIGluZGV4ZXMuXG4gICAgICogQHBhcmFtIHtBcnJheX0gW2FyZ1Bvc10gVGhlIGFyZ3VtZW50IHBvc2l0aW9ucyBvZiB0aGUgbmV3IGZ1bmN0aW9uLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbYXJ5XSBUaGUgYXJpdHkgY2FwIG9mIGBmdW5jYC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2FyaXR5XSBUaGUgYXJpdHkgb2YgYGZ1bmNgLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHdyYXBwZWQgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlSHlicmlkKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIHBhcnRpYWxzLCBob2xkZXJzLCBwYXJ0aWFsc1JpZ2h0LCBob2xkZXJzUmlnaHQsIGFyZ1BvcywgYXJ5LCBhcml0eSkge1xuICAgICAgdmFyIGlzQXJ5ID0gYml0bWFzayAmIFdSQVBfQVJZX0ZMQUcsXG4gICAgICAgICAgaXNCaW5kID0gYml0bWFzayAmIFdSQVBfQklORF9GTEFHLFxuICAgICAgICAgIGlzQmluZEtleSA9IGJpdG1hc2sgJiBXUkFQX0JJTkRfS0VZX0ZMQUcsXG4gICAgICAgICAgaXNDdXJyaWVkID0gYml0bWFzayAmIChXUkFQX0NVUlJZX0ZMQUcgfCBXUkFQX0NVUlJZX1JJR0hUX0ZMQUcpLFxuICAgICAgICAgIGlzRmxpcCA9IGJpdG1hc2sgJiBXUkFQX0ZMSVBfRkxBRyxcbiAgICAgICAgICBDdG9yID0gaXNCaW5kS2V5ID8gdW5kZWZpbmVkIDogY3JlYXRlQ3RvcihmdW5jKTtcblxuICAgICAgZnVuY3Rpb24gd3JhcHBlcigpIHtcbiAgICAgICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGgsXG4gICAgICAgICAgICBhcmdzID0gQXJyYXkobGVuZ3RoKSxcbiAgICAgICAgICAgIGluZGV4ID0gbGVuZ3RoO1xuXG4gICAgICAgIHdoaWxlIChpbmRleC0tKSB7XG4gICAgICAgICAgYXJnc1tpbmRleF0gPSBhcmd1bWVudHNbaW5kZXhdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0N1cnJpZWQpIHtcbiAgICAgICAgICB2YXIgcGxhY2Vob2xkZXIgPSBnZXRIb2xkZXIod3JhcHBlciksXG4gICAgICAgICAgICAgIGhvbGRlcnNDb3VudCA9IGNvdW50SG9sZGVycyhhcmdzLCBwbGFjZWhvbGRlcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhcnRpYWxzKSB7XG4gICAgICAgICAgYXJncyA9IGNvbXBvc2VBcmdzKGFyZ3MsIHBhcnRpYWxzLCBob2xkZXJzLCBpc0N1cnJpZWQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJ0aWFsc1JpZ2h0KSB7XG4gICAgICAgICAgYXJncyA9IGNvbXBvc2VBcmdzUmlnaHQoYXJncywgcGFydGlhbHNSaWdodCwgaG9sZGVyc1JpZ2h0LCBpc0N1cnJpZWQpO1xuICAgICAgICB9XG4gICAgICAgIGxlbmd0aCAtPSBob2xkZXJzQ291bnQ7XG4gICAgICAgIGlmIChpc0N1cnJpZWQgJiYgbGVuZ3RoIDwgYXJpdHkpIHtcbiAgICAgICAgICB2YXIgbmV3SG9sZGVycyA9IHJlcGxhY2VIb2xkZXJzKGFyZ3MsIHBsYWNlaG9sZGVyKTtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlUmVjdXJyeShcbiAgICAgICAgICAgIGZ1bmMsIGJpdG1hc2ssIGNyZWF0ZUh5YnJpZCwgd3JhcHBlci5wbGFjZWhvbGRlciwgdGhpc0FyZyxcbiAgICAgICAgICAgIGFyZ3MsIG5ld0hvbGRlcnMsIGFyZ1BvcywgYXJ5LCBhcml0eSAtIGxlbmd0aFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHRoaXNCaW5kaW5nID0gaXNCaW5kID8gdGhpc0FyZyA6IHRoaXMsXG4gICAgICAgICAgICBmbiA9IGlzQmluZEtleSA/IHRoaXNCaW5kaW5nW2Z1bmNdIDogZnVuYztcblxuICAgICAgICBsZW5ndGggPSBhcmdzLmxlbmd0aDtcbiAgICAgICAgaWYgKGFyZ1Bvcykge1xuICAgICAgICAgIGFyZ3MgPSByZW9yZGVyKGFyZ3MsIGFyZ1Bvcyk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNGbGlwICYmIGxlbmd0aCA+IDEpIHtcbiAgICAgICAgICBhcmdzLnJldmVyc2UoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNBcnkgJiYgYXJ5IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgYXJncy5sZW5ndGggPSBhcnk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMgJiYgdGhpcyAhPT0gcm9vdCAmJiB0aGlzIGluc3RhbmNlb2Ygd3JhcHBlcikge1xuICAgICAgICAgIGZuID0gQ3RvciB8fCBjcmVhdGVDdG9yKGZuKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm4uYXBwbHkodGhpc0JpbmRpbmcsIGFyZ3MpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHdyYXBwZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIGxpa2UgYF8uaW52ZXJ0QnlgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBzZXR0ZXIgVGhlIGZ1bmN0aW9uIHRvIHNldCBhY2N1bXVsYXRvciB2YWx1ZXMuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gdG9JdGVyYXRlZSBUaGUgZnVuY3Rpb24gdG8gcmVzb2x2ZSBpdGVyYXRlZXMuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgaW52ZXJ0ZXIgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlSW52ZXJ0ZXIoc2V0dGVyLCB0b0l0ZXJhdGVlKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0LCBpdGVyYXRlZSkge1xuICAgICAgICByZXR1cm4gYmFzZUludmVydGVyKG9iamVjdCwgc2V0dGVyLCB0b0l0ZXJhdGVlKGl0ZXJhdGVlKSwge30pO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBwZXJmb3JtcyBhIG1hdGhlbWF0aWNhbCBvcGVyYXRpb24gb24gdHdvIHZhbHVlcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gb3BlcmF0b3IgVGhlIGZ1bmN0aW9uIHRvIHBlcmZvcm0gdGhlIG9wZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2RlZmF1bHRWYWx1ZV0gVGhlIHZhbHVlIHVzZWQgZm9yIGB1bmRlZmluZWRgIGFyZ3VtZW50cy5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBtYXRoZW1hdGljYWwgb3BlcmF0aW9uIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZU1hdGhPcGVyYXRpb24ob3BlcmF0b3IsIGRlZmF1bHRWYWx1ZSkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlLCBvdGhlcikge1xuICAgICAgICB2YXIgcmVzdWx0O1xuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiBvdGhlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJlc3VsdCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvdGhlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gb3RoZXI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgfHwgdHlwZW9mIG90aGVyID09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IGJhc2VUb1N0cmluZyh2YWx1ZSk7XG4gICAgICAgICAgICBvdGhlciA9IGJhc2VUb1N0cmluZyhvdGhlcik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhbHVlID0gYmFzZVRvTnVtYmVyKHZhbHVlKTtcbiAgICAgICAgICAgIG90aGVyID0gYmFzZVRvTnVtYmVyKG90aGVyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzdWx0ID0gb3BlcmF0b3IodmFsdWUsIG90aGVyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gbGlrZSBgXy5vdmVyYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gYXJyYXlGdW5jIFRoZSBmdW5jdGlvbiB0byBpdGVyYXRlIG92ZXIgaXRlcmF0ZWVzLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IG92ZXIgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlT3ZlcihhcnJheUZ1bmMpIHtcbiAgICAgIHJldHVybiBmbGF0UmVzdChmdW5jdGlvbihpdGVyYXRlZXMpIHtcbiAgICAgICAgaXRlcmF0ZWVzID0gYXJyYXlNYXAoaXRlcmF0ZWVzLCBiYXNlVW5hcnkoZ2V0SXRlcmF0ZWUoKSkpO1xuICAgICAgICByZXR1cm4gYmFzZVJlc3QoZnVuY3Rpb24oYXJncykge1xuICAgICAgICAgIHZhciB0aGlzQXJnID0gdGhpcztcbiAgICAgICAgICByZXR1cm4gYXJyYXlGdW5jKGl0ZXJhdGVlcywgZnVuY3Rpb24oaXRlcmF0ZWUpIHtcbiAgICAgICAgICAgIHJldHVybiBhcHBseShpdGVyYXRlZSwgdGhpc0FyZywgYXJncyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyB0aGUgcGFkZGluZyBmb3IgYHN0cmluZ2AgYmFzZWQgb24gYGxlbmd0aGAuIFRoZSBgY2hhcnNgIHN0cmluZ1xuICAgICAqIGlzIHRydW5jYXRlZCBpZiB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgZXhjZWVkcyBgbGVuZ3RoYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aCBUaGUgcGFkZGluZyBsZW5ndGguXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtjaGFycz0nICddIFRoZSBzdHJpbmcgdXNlZCBhcyBwYWRkaW5nLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHBhZGRpbmcgZm9yIGBzdHJpbmdgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZVBhZGRpbmcobGVuZ3RoLCBjaGFycykge1xuICAgICAgY2hhcnMgPSBjaGFycyA9PT0gdW5kZWZpbmVkID8gJyAnIDogYmFzZVRvU3RyaW5nKGNoYXJzKTtcblxuICAgICAgdmFyIGNoYXJzTGVuZ3RoID0gY2hhcnMubGVuZ3RoO1xuICAgICAgaWYgKGNoYXJzTGVuZ3RoIDwgMikge1xuICAgICAgICByZXR1cm4gY2hhcnNMZW5ndGggPyBiYXNlUmVwZWF0KGNoYXJzLCBsZW5ndGgpIDogY2hhcnM7XG4gICAgICB9XG4gICAgICB2YXIgcmVzdWx0ID0gYmFzZVJlcGVhdChjaGFycywgbmF0aXZlQ2VpbChsZW5ndGggLyBzdHJpbmdTaXplKGNoYXJzKSkpO1xuICAgICAgcmV0dXJuIGhhc1VuaWNvZGUoY2hhcnMpXG4gICAgICAgID8gY2FzdFNsaWNlKHN0cmluZ1RvQXJyYXkocmVzdWx0KSwgMCwgbGVuZ3RoKS5qb2luKCcnKVxuICAgICAgICA6IHJlc3VsdC5zbGljZSgwLCBsZW5ndGgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHdyYXBzIGBmdW5jYCB0byBpbnZva2UgaXQgd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmdcbiAgICAgKiBvZiBgdGhpc0FyZ2AgYW5kIGBwYXJ0aWFsc2AgcHJlcGVuZGVkIHRvIHRoZSBhcmd1bWVudHMgaXQgcmVjZWl2ZXMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdyYXAuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgY3JlYXRlV3JhcGAgZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgKiBAcGFyYW0geyp9IHRoaXNBcmcgVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBwYXJ0aWFscyBUaGUgYXJndW1lbnRzIHRvIHByZXBlbmQgdG8gdGhvc2UgcHJvdmlkZWQgdG9cbiAgICAgKiAgdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyB3cmFwcGVkIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZVBhcnRpYWwoZnVuYywgYml0bWFzaywgdGhpc0FyZywgcGFydGlhbHMpIHtcbiAgICAgIHZhciBpc0JpbmQgPSBiaXRtYXNrICYgV1JBUF9CSU5EX0ZMQUcsXG4gICAgICAgICAgQ3RvciA9IGNyZWF0ZUN0b3IoZnVuYyk7XG5cbiAgICAgIGZ1bmN0aW9uIHdyYXBwZXIoKSB7XG4gICAgICAgIHZhciBhcmdzSW5kZXggPSAtMSxcbiAgICAgICAgICAgIGFyZ3NMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoLFxuICAgICAgICAgICAgbGVmdEluZGV4ID0gLTEsXG4gICAgICAgICAgICBsZWZ0TGVuZ3RoID0gcGFydGlhbHMubGVuZ3RoLFxuICAgICAgICAgICAgYXJncyA9IEFycmF5KGxlZnRMZW5ndGggKyBhcmdzTGVuZ3RoKSxcbiAgICAgICAgICAgIGZuID0gKHRoaXMgJiYgdGhpcyAhPT0gcm9vdCAmJiB0aGlzIGluc3RhbmNlb2Ygd3JhcHBlcikgPyBDdG9yIDogZnVuYztcblxuICAgICAgICB3aGlsZSAoKytsZWZ0SW5kZXggPCBsZWZ0TGVuZ3RoKSB7XG4gICAgICAgICAgYXJnc1tsZWZ0SW5kZXhdID0gcGFydGlhbHNbbGVmdEluZGV4XTtcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAoYXJnc0xlbmd0aC0tKSB7XG4gICAgICAgICAgYXJnc1tsZWZ0SW5kZXgrK10gPSBhcmd1bWVudHNbKythcmdzSW5kZXhdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcHBseShmbiwgaXNCaW5kID8gdGhpc0FyZyA6IHRoaXMsIGFyZ3MpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHdyYXBwZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGBfLnJhbmdlYCBvciBgXy5yYW5nZVJpZ2h0YCBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZnJvbVJpZ2h0XSBTcGVjaWZ5IGl0ZXJhdGluZyBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgcmFuZ2UgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlUmFuZ2UoZnJvbVJpZ2h0KSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24oc3RhcnQsIGVuZCwgc3RlcCkge1xuICAgICAgICBpZiAoc3RlcCAmJiB0eXBlb2Ygc3RlcCAhPSAnbnVtYmVyJyAmJiBpc0l0ZXJhdGVlQ2FsbChzdGFydCwgZW5kLCBzdGVwKSkge1xuICAgICAgICAgIGVuZCA9IHN0ZXAgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRW5zdXJlIHRoZSBzaWduIG9mIGAtMGAgaXMgcHJlc2VydmVkLlxuICAgICAgICBzdGFydCA9IHRvRmluaXRlKHN0YXJ0KTtcbiAgICAgICAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZW5kID0gc3RhcnQ7XG4gICAgICAgICAgc3RhcnQgPSAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVuZCA9IHRvRmluaXRlKGVuZCk7XG4gICAgICAgIH1cbiAgICAgICAgc3RlcCA9IHN0ZXAgPT09IHVuZGVmaW5lZCA/IChzdGFydCA8IGVuZCA/IDEgOiAtMSkgOiB0b0Zpbml0ZShzdGVwKTtcbiAgICAgICAgcmV0dXJuIGJhc2VSYW5nZShzdGFydCwgZW5kLCBzdGVwLCBmcm9tUmlnaHQpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBwZXJmb3JtcyBhIHJlbGF0aW9uYWwgb3BlcmF0aW9uIG9uIHR3byB2YWx1ZXMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IG9wZXJhdG9yIFRoZSBmdW5jdGlvbiB0byBwZXJmb3JtIHRoZSBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgcmVsYXRpb25hbCBvcGVyYXRpb24gZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlUmVsYXRpb25hbE9wZXJhdGlvbihvcGVyYXRvcikge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlLCBvdGhlcikge1xuICAgICAgICBpZiAoISh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgJiYgdHlwZW9mIG90aGVyID09ICdzdHJpbmcnKSkge1xuICAgICAgICAgIHZhbHVlID0gdG9OdW1iZXIodmFsdWUpO1xuICAgICAgICAgIG90aGVyID0gdG9OdW1iZXIob3RoZXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvcGVyYXRvcih2YWx1ZSwgb3RoZXIpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCB3cmFwcyBgZnVuY2AgdG8gY29udGludWUgY3VycnlpbmcuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdyYXAuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgY3JlYXRlV3JhcGAgZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSB3cmFwRnVuYyBUaGUgZnVuY3Rpb24gdG8gY3JlYXRlIHRoZSBgZnVuY2Agd3JhcHBlci5cbiAgICAgKiBAcGFyYW0geyp9IHBsYWNlaG9sZGVyIFRoZSBwbGFjZWhvbGRlciB2YWx1ZS5cbiAgICAgKiBAcGFyYW0geyp9IFt0aGlzQXJnXSBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFtwYXJ0aWFsc10gVGhlIGFyZ3VtZW50cyB0byBwcmVwZW5kIHRvIHRob3NlIHByb3ZpZGVkIHRvXG4gICAgICogIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICogQHBhcmFtIHtBcnJheX0gW2hvbGRlcnNdIFRoZSBgcGFydGlhbHNgIHBsYWNlaG9sZGVyIGluZGV4ZXMuXG4gICAgICogQHBhcmFtIHtBcnJheX0gW2FyZ1Bvc10gVGhlIGFyZ3VtZW50IHBvc2l0aW9ucyBvZiB0aGUgbmV3IGZ1bmN0aW9uLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbYXJ5XSBUaGUgYXJpdHkgY2FwIG9mIGBmdW5jYC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2FyaXR5XSBUaGUgYXJpdHkgb2YgYGZ1bmNgLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHdyYXBwZWQgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlUmVjdXJyeShmdW5jLCBiaXRtYXNrLCB3cmFwRnVuYywgcGxhY2Vob2xkZXIsIHRoaXNBcmcsIHBhcnRpYWxzLCBob2xkZXJzLCBhcmdQb3MsIGFyeSwgYXJpdHkpIHtcbiAgICAgIHZhciBpc0N1cnJ5ID0gYml0bWFzayAmIFdSQVBfQ1VSUllfRkxBRyxcbiAgICAgICAgICBuZXdIb2xkZXJzID0gaXNDdXJyeSA/IGhvbGRlcnMgOiB1bmRlZmluZWQsXG4gICAgICAgICAgbmV3SG9sZGVyc1JpZ2h0ID0gaXNDdXJyeSA/IHVuZGVmaW5lZCA6IGhvbGRlcnMsXG4gICAgICAgICAgbmV3UGFydGlhbHMgPSBpc0N1cnJ5ID8gcGFydGlhbHMgOiB1bmRlZmluZWQsXG4gICAgICAgICAgbmV3UGFydGlhbHNSaWdodCA9IGlzQ3VycnkgPyB1bmRlZmluZWQgOiBwYXJ0aWFscztcblxuICAgICAgYml0bWFzayB8PSAoaXNDdXJyeSA/IFdSQVBfUEFSVElBTF9GTEFHIDogV1JBUF9QQVJUSUFMX1JJR0hUX0ZMQUcpO1xuICAgICAgYml0bWFzayAmPSB+KGlzQ3VycnkgPyBXUkFQX1BBUlRJQUxfUklHSFRfRkxBRyA6IFdSQVBfUEFSVElBTF9GTEFHKTtcblxuICAgICAgaWYgKCEoYml0bWFzayAmIFdSQVBfQ1VSUllfQk9VTkRfRkxBRykpIHtcbiAgICAgICAgYml0bWFzayAmPSB+KFdSQVBfQklORF9GTEFHIHwgV1JBUF9CSU5EX0tFWV9GTEFHKTtcbiAgICAgIH1cbiAgICAgIHZhciBuZXdEYXRhID0gW1xuICAgICAgICBmdW5jLCBiaXRtYXNrLCB0aGlzQXJnLCBuZXdQYXJ0aWFscywgbmV3SG9sZGVycywgbmV3UGFydGlhbHNSaWdodCxcbiAgICAgICAgbmV3SG9sZGVyc1JpZ2h0LCBhcmdQb3MsIGFyeSwgYXJpdHlcbiAgICAgIF07XG5cbiAgICAgIHZhciByZXN1bHQgPSB3cmFwRnVuYy5hcHBseSh1bmRlZmluZWQsIG5ld0RhdGEpO1xuICAgICAgaWYgKGlzTGF6aWFibGUoZnVuYykpIHtcbiAgICAgICAgc2V0RGF0YShyZXN1bHQsIG5ld0RhdGEpO1xuICAgICAgfVxuICAgICAgcmVzdWx0LnBsYWNlaG9sZGVyID0gcGxhY2Vob2xkZXI7XG4gICAgICByZXR1cm4gc2V0V3JhcFRvU3RyaW5nKHJlc3VsdCwgZnVuYywgYml0bWFzayk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIGxpa2UgYF8ucm91bmRgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbWV0aG9kTmFtZSBUaGUgbmFtZSBvZiB0aGUgYE1hdGhgIG1ldGhvZCB0byB1c2Ugd2hlbiByb3VuZGluZy5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyByb3VuZCBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVSb3VuZChtZXRob2ROYW1lKSB7XG4gICAgICB2YXIgZnVuYyA9IE1hdGhbbWV0aG9kTmFtZV07XG4gICAgICByZXR1cm4gZnVuY3Rpb24obnVtYmVyLCBwcmVjaXNpb24pIHtcbiAgICAgICAgbnVtYmVyID0gdG9OdW1iZXIobnVtYmVyKTtcbiAgICAgICAgcHJlY2lzaW9uID0gcHJlY2lzaW9uID09IG51bGwgPyAwIDogbmF0aXZlTWluKHRvSW50ZWdlcihwcmVjaXNpb24pLCAyOTIpO1xuICAgICAgICBpZiAocHJlY2lzaW9uICYmIG5hdGl2ZUlzRmluaXRlKG51bWJlcikpIHtcbiAgICAgICAgICAvLyBTaGlmdCB3aXRoIGV4cG9uZW50aWFsIG5vdGF0aW9uIHRvIGF2b2lkIGZsb2F0aW5nLXBvaW50IGlzc3Vlcy5cbiAgICAgICAgICAvLyBTZWUgW01ETl0oaHR0cHM6Ly9tZG4uaW8vcm91bmQjRXhhbXBsZXMpIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICAgICAgdmFyIHBhaXIgPSAodG9TdHJpbmcobnVtYmVyKSArICdlJykuc3BsaXQoJ2UnKSxcbiAgICAgICAgICAgICAgdmFsdWUgPSBmdW5jKHBhaXJbMF0gKyAnZScgKyAoK3BhaXJbMV0gKyBwcmVjaXNpb24pKTtcblxuICAgICAgICAgIHBhaXIgPSAodG9TdHJpbmcodmFsdWUpICsgJ2UnKS5zcGxpdCgnZScpO1xuICAgICAgICAgIHJldHVybiArKHBhaXJbMF0gKyAnZScgKyAoK3BhaXJbMV0gLSBwcmVjaXNpb24pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZnVuYyhudW1iZXIpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgc2V0IG9iamVjdCBvZiBgdmFsdWVzYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gYWRkIHRvIHRoZSBzZXQuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IHNldC5cbiAgICAgKi9cbiAgICB2YXIgY3JlYXRlU2V0ID0gIShTZXQgJiYgKDEgLyBzZXRUb0FycmF5KG5ldyBTZXQoWywtMF0pKVsxXSkgPT0gSU5GSU5JVFkpID8gbm9vcCA6IGZ1bmN0aW9uKHZhbHVlcykge1xuICAgICAgcmV0dXJuIG5ldyBTZXQodmFsdWVzKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGBfLnRvUGFpcnNgIG9yIGBfLnRvUGFpcnNJbmAgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGtleXNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIGtleXMgb2YgYSBnaXZlbiBvYmplY3QuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgcGFpcnMgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlVG9QYWlycyhrZXlzRnVuYykge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgICAgICB2YXIgdGFnID0gZ2V0VGFnKG9iamVjdCk7XG4gICAgICAgIGlmICh0YWcgPT0gbWFwVGFnKSB7XG4gICAgICAgICAgcmV0dXJuIG1hcFRvQXJyYXkob2JqZWN0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGFnID09IHNldFRhZykge1xuICAgICAgICAgIHJldHVybiBzZXRUb1BhaXJzKG9iamVjdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGJhc2VUb1BhaXJzKG9iamVjdCwga2V5c0Z1bmMob2JqZWN0KSk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGVpdGhlciBjdXJyaWVzIG9yIGludm9rZXMgYGZ1bmNgIHdpdGggb3B0aW9uYWxcbiAgICAgKiBgdGhpc2AgYmluZGluZyBhbmQgcGFydGlhbGx5IGFwcGxpZWQgYXJndW1lbnRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufHN0cmluZ30gZnVuYyBUaGUgZnVuY3Rpb24gb3IgbWV0aG9kIG5hbWUgdG8gd3JhcC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy5cbiAgICAgKiAgICAxIC0gYF8uYmluZGBcbiAgICAgKiAgICAyIC0gYF8uYmluZEtleWBcbiAgICAgKiAgICA0IC0gYF8uY3VycnlgIG9yIGBfLmN1cnJ5UmlnaHRgIG9mIGEgYm91bmQgZnVuY3Rpb25cbiAgICAgKiAgICA4IC0gYF8uY3VycnlgXG4gICAgICogICAxNiAtIGBfLmN1cnJ5UmlnaHRgXG4gICAgICogICAzMiAtIGBfLnBhcnRpYWxgXG4gICAgICogICA2NCAtIGBfLnBhcnRpYWxSaWdodGBcbiAgICAgKiAgMTI4IC0gYF8ucmVhcmdgXG4gICAgICogIDI1NiAtIGBfLmFyeWBcbiAgICAgKiAgNTEyIC0gYF8uZmxpcGBcbiAgICAgKiBAcGFyYW0geyp9IFt0aGlzQXJnXSBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFtwYXJ0aWFsc10gVGhlIGFyZ3VtZW50cyB0byBiZSBwYXJ0aWFsbHkgYXBwbGllZC5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbaG9sZGVyc10gVGhlIGBwYXJ0aWFsc2AgcGxhY2Vob2xkZXIgaW5kZXhlcy5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbYXJnUG9zXSBUaGUgYXJndW1lbnQgcG9zaXRpb25zIG9mIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFthcnldIFRoZSBhcml0eSBjYXAgb2YgYGZ1bmNgLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbYXJpdHldIFRoZSBhcml0eSBvZiBgZnVuY2AuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgd3JhcHBlZCBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVXcmFwKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIHBhcnRpYWxzLCBob2xkZXJzLCBhcmdQb3MsIGFyeSwgYXJpdHkpIHtcbiAgICAgIHZhciBpc0JpbmRLZXkgPSBiaXRtYXNrICYgV1JBUF9CSU5EX0tFWV9GTEFHO1xuICAgICAgaWYgKCFpc0JpbmRLZXkgJiYgdHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gICAgICB9XG4gICAgICB2YXIgbGVuZ3RoID0gcGFydGlhbHMgPyBwYXJ0aWFscy5sZW5ndGggOiAwO1xuICAgICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgICAgYml0bWFzayAmPSB+KFdSQVBfUEFSVElBTF9GTEFHIHwgV1JBUF9QQVJUSUFMX1JJR0hUX0ZMQUcpO1xuICAgICAgICBwYXJ0aWFscyA9IGhvbGRlcnMgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBhcnkgPSBhcnkgPT09IHVuZGVmaW5lZCA/IGFyeSA6IG5hdGl2ZU1heCh0b0ludGVnZXIoYXJ5KSwgMCk7XG4gICAgICBhcml0eSA9IGFyaXR5ID09PSB1bmRlZmluZWQgPyBhcml0eSA6IHRvSW50ZWdlcihhcml0eSk7XG4gICAgICBsZW5ndGggLT0gaG9sZGVycyA/IGhvbGRlcnMubGVuZ3RoIDogMDtcblxuICAgICAgaWYgKGJpdG1hc2sgJiBXUkFQX1BBUlRJQUxfUklHSFRfRkxBRykge1xuICAgICAgICB2YXIgcGFydGlhbHNSaWdodCA9IHBhcnRpYWxzLFxuICAgICAgICAgICAgaG9sZGVyc1JpZ2h0ID0gaG9sZGVycztcblxuICAgICAgICBwYXJ0aWFscyA9IGhvbGRlcnMgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICB2YXIgZGF0YSA9IGlzQmluZEtleSA/IHVuZGVmaW5lZCA6IGdldERhdGEoZnVuYyk7XG5cbiAgICAgIHZhciBuZXdEYXRhID0gW1xuICAgICAgICBmdW5jLCBiaXRtYXNrLCB0aGlzQXJnLCBwYXJ0aWFscywgaG9sZGVycywgcGFydGlhbHNSaWdodCwgaG9sZGVyc1JpZ2h0LFxuICAgICAgICBhcmdQb3MsIGFyeSwgYXJpdHlcbiAgICAgIF07XG5cbiAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgIG1lcmdlRGF0YShuZXdEYXRhLCBkYXRhKTtcbiAgICAgIH1cbiAgICAgIGZ1bmMgPSBuZXdEYXRhWzBdO1xuICAgICAgYml0bWFzayA9IG5ld0RhdGFbMV07XG4gICAgICB0aGlzQXJnID0gbmV3RGF0YVsyXTtcbiAgICAgIHBhcnRpYWxzID0gbmV3RGF0YVszXTtcbiAgICAgIGhvbGRlcnMgPSBuZXdEYXRhWzRdO1xuICAgICAgYXJpdHkgPSBuZXdEYXRhWzldID0gbmV3RGF0YVs5XSA9PT0gdW5kZWZpbmVkXG4gICAgICAgID8gKGlzQmluZEtleSA/IDAgOiBmdW5jLmxlbmd0aClcbiAgICAgICAgOiBuYXRpdmVNYXgobmV3RGF0YVs5XSAtIGxlbmd0aCwgMCk7XG5cbiAgICAgIGlmICghYXJpdHkgJiYgYml0bWFzayAmIChXUkFQX0NVUlJZX0ZMQUcgfCBXUkFQX0NVUlJZX1JJR0hUX0ZMQUcpKSB7XG4gICAgICAgIGJpdG1hc2sgJj0gfihXUkFQX0NVUlJZX0ZMQUcgfCBXUkFQX0NVUlJZX1JJR0hUX0ZMQUcpO1xuICAgICAgfVxuICAgICAgaWYgKCFiaXRtYXNrIHx8IGJpdG1hc2sgPT0gV1JBUF9CSU5EX0ZMQUcpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IGNyZWF0ZUJpbmQoZnVuYywgYml0bWFzaywgdGhpc0FyZyk7XG4gICAgICB9IGVsc2UgaWYgKGJpdG1hc2sgPT0gV1JBUF9DVVJSWV9GTEFHIHx8IGJpdG1hc2sgPT0gV1JBUF9DVVJSWV9SSUdIVF9GTEFHKSB7XG4gICAgICAgIHJlc3VsdCA9IGNyZWF0ZUN1cnJ5KGZ1bmMsIGJpdG1hc2ssIGFyaXR5KTtcbiAgICAgIH0gZWxzZSBpZiAoKGJpdG1hc2sgPT0gV1JBUF9QQVJUSUFMX0ZMQUcgfHwgYml0bWFzayA9PSAoV1JBUF9CSU5EX0ZMQUcgfCBXUkFQX1BBUlRJQUxfRkxBRykpICYmICFob2xkZXJzLmxlbmd0aCkge1xuICAgICAgICByZXN1bHQgPSBjcmVhdGVQYXJ0aWFsKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIHBhcnRpYWxzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdCA9IGNyZWF0ZUh5YnJpZC5hcHBseSh1bmRlZmluZWQsIG5ld0RhdGEpO1xuICAgICAgfVxuICAgICAgdmFyIHNldHRlciA9IGRhdGEgPyBiYXNlU2V0RGF0YSA6IHNldERhdGE7XG4gICAgICByZXR1cm4gc2V0V3JhcFRvU3RyaW5nKHNldHRlcihyZXN1bHQsIG5ld0RhdGEpLCBmdW5jLCBiaXRtYXNrKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIGJ5IGBfLmRlZmF1bHRzYCB0byBjdXN0b21pemUgaXRzIGBfLmFzc2lnbkluYCB1c2UgdG8gYXNzaWduIHByb3BlcnRpZXNcbiAgICAgKiBvZiBzb3VyY2Ugb2JqZWN0cyB0byB0aGUgZGVzdGluYXRpb24gb2JqZWN0IGZvciBhbGwgZGVzdGluYXRpb24gcHJvcGVydGllc1xuICAgICAqIHRoYXQgcmVzb2x2ZSB0byBgdW5kZWZpbmVkYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSBvYmpWYWx1ZSBUaGUgZGVzdGluYXRpb24gdmFsdWUuXG4gICAgICogQHBhcmFtIHsqfSBzcmNWYWx1ZSBUaGUgc291cmNlIHZhbHVlLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIHBhcmVudCBvYmplY3Qgb2YgYG9ialZhbHVlYC5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgdmFsdWUgdG8gYXNzaWduLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGN1c3RvbURlZmF1bHRzQXNzaWduSW4ob2JqVmFsdWUsIHNyY1ZhbHVlLCBrZXksIG9iamVjdCkge1xuICAgICAgaWYgKG9ialZhbHVlID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAoZXEob2JqVmFsdWUsIG9iamVjdFByb3RvW2tleV0pICYmICFoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkpIHtcbiAgICAgICAgcmV0dXJuIHNyY1ZhbHVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9ialZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVzZWQgYnkgYF8uZGVmYXVsdHNEZWVwYCB0byBjdXN0b21pemUgaXRzIGBfLm1lcmdlYCB1c2UgdG8gbWVyZ2Ugc291cmNlXG4gICAgICogb2JqZWN0cyBpbnRvIGRlc3RpbmF0aW9uIG9iamVjdHMgdGhhdCBhcmUgcGFzc2VkIHRocnUuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gb2JqVmFsdWUgVGhlIGRlc3RpbmF0aW9uIHZhbHVlLlxuICAgICAqIEBwYXJhbSB7Kn0gc3JjVmFsdWUgVGhlIHNvdXJjZSB2YWx1ZS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIG1lcmdlLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIHBhcmVudCBvYmplY3Qgb2YgYG9ialZhbHVlYC5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBwYXJlbnQgb2JqZWN0IG9mIGBzcmNWYWx1ZWAuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBzb3VyY2UgdmFsdWVzIGFuZCB0aGVpciBtZXJnZWRcbiAgICAgKiAgY291bnRlcnBhcnRzLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSB2YWx1ZSB0byBhc3NpZ24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3VzdG9tRGVmYXVsdHNNZXJnZShvYmpWYWx1ZSwgc3JjVmFsdWUsIGtleSwgb2JqZWN0LCBzb3VyY2UsIHN0YWNrKSB7XG4gICAgICBpZiAoaXNPYmplY3Qob2JqVmFsdWUpICYmIGlzT2JqZWN0KHNyY1ZhbHVlKSkge1xuICAgICAgICAvLyBSZWN1cnNpdmVseSBtZXJnZSBvYmplY3RzIGFuZCBhcnJheXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICAgICAgc3RhY2suc2V0KHNyY1ZhbHVlLCBvYmpWYWx1ZSk7XG4gICAgICAgIGJhc2VNZXJnZShvYmpWYWx1ZSwgc3JjVmFsdWUsIHVuZGVmaW5lZCwgY3VzdG9tRGVmYXVsdHNNZXJnZSwgc3RhY2spO1xuICAgICAgICBzdGFja1snZGVsZXRlJ10oc3JjVmFsdWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9ialZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVzZWQgYnkgYF8ub21pdGAgdG8gY3VzdG9taXplIGl0cyBgXy5jbG9uZURlZXBgIHVzZSB0byBvbmx5IGNsb25lIHBsYWluXG4gICAgICogb2JqZWN0cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGluc3BlY3QuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHVuY2xvbmVkIHZhbHVlIG9yIGB1bmRlZmluZWRgIHRvIGRlZmVyIGNsb25pbmcgdG8gYF8uY2xvbmVEZWVwYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjdXN0b21PbWl0Q2xvbmUodmFsdWUpIHtcbiAgICAgIHJldHVybiBpc1BsYWluT2JqZWN0KHZhbHVlKSA/IHVuZGVmaW5lZCA6IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxEZWVwYCBmb3IgYXJyYXlzIHdpdGggc3VwcG9ydCBmb3JcbiAgICAgKiBwYXJ0aWFsIGRlZXAgY29tcGFyaXNvbnMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IG90aGVyIFRoZSBvdGhlciBhcnJheSB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHN0YWNrIFRyYWNrcyB0cmF2ZXJzZWQgYGFycmF5YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgYXJyYXlzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gZXF1YWxBcnJheXMoYXJyYXksIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gICAgICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHLFxuICAgICAgICAgIGFyckxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgICBvdGhMZW5ndGggPSBvdGhlci5sZW5ndGg7XG5cbiAgICAgIGlmIChhcnJMZW5ndGggIT0gb3RoTGVuZ3RoICYmICEoaXNQYXJ0aWFsICYmIG90aExlbmd0aCA+IGFyckxlbmd0aCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgLy8gQ2hlY2sgdGhhdCBjeWNsaWMgdmFsdWVzIGFyZSBlcXVhbC5cbiAgICAgIHZhciBhcnJTdGFja2VkID0gc3RhY2suZ2V0KGFycmF5KTtcbiAgICAgIHZhciBvdGhTdGFja2VkID0gc3RhY2suZ2V0KG90aGVyKTtcbiAgICAgIGlmIChhcnJTdGFja2VkICYmIG90aFN0YWNrZWQpIHtcbiAgICAgICAgcmV0dXJuIGFyclN0YWNrZWQgPT0gb3RoZXIgJiYgb3RoU3RhY2tlZCA9PSBhcnJheTtcbiAgICAgIH1cbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIHJlc3VsdCA9IHRydWUsXG4gICAgICAgICAgc2VlbiA9IChiaXRtYXNrICYgQ09NUEFSRV9VTk9SREVSRURfRkxBRykgPyBuZXcgU2V0Q2FjaGUgOiB1bmRlZmluZWQ7XG5cbiAgICAgIHN0YWNrLnNldChhcnJheSwgb3RoZXIpO1xuICAgICAgc3RhY2suc2V0KG90aGVyLCBhcnJheSk7XG5cbiAgICAgIC8vIElnbm9yZSBub24taW5kZXggcHJvcGVydGllcy5cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgYXJyTGVuZ3RoKSB7XG4gICAgICAgIHZhciBhcnJWYWx1ZSA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgICAgIG90aFZhbHVlID0gb3RoZXJbaW5kZXhdO1xuXG4gICAgICAgIGlmIChjdXN0b21pemVyKSB7XG4gICAgICAgICAgdmFyIGNvbXBhcmVkID0gaXNQYXJ0aWFsXG4gICAgICAgICAgICA/IGN1c3RvbWl6ZXIob3RoVmFsdWUsIGFyclZhbHVlLCBpbmRleCwgb3RoZXIsIGFycmF5LCBzdGFjaylcbiAgICAgICAgICAgIDogY3VzdG9taXplcihhcnJWYWx1ZSwgb3RoVmFsdWUsIGluZGV4LCBhcnJheSwgb3RoZXIsIHN0YWNrKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29tcGFyZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmIChjb21wYXJlZCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgYXJyYXlzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgICAgIGlmIChzZWVuKSB7XG4gICAgICAgICAgaWYgKCFhcnJheVNvbWUob3RoZXIsIGZ1bmN0aW9uKG90aFZhbHVlLCBvdGhJbmRleCkge1xuICAgICAgICAgICAgICAgIGlmICghY2FjaGVIYXMoc2Vlbiwgb3RoSW5kZXgpICYmXG4gICAgICAgICAgICAgICAgICAgIChhcnJWYWx1ZSA9PT0gb3RoVmFsdWUgfHwgZXF1YWxGdW5jKGFyclZhbHVlLCBvdGhWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spKSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlZW4ucHVzaChvdGhJbmRleCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KSkge1xuICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoIShcbiAgICAgICAgICAgICAgYXJyVmFsdWUgPT09IG90aFZhbHVlIHx8XG4gICAgICAgICAgICAgICAgZXF1YWxGdW5jKGFyclZhbHVlLCBvdGhWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spXG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHN0YWNrWydkZWxldGUnXShhcnJheSk7XG4gICAgICBzdGFja1snZGVsZXRlJ10ob3RoZXIpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsRGVlcGAgZm9yIGNvbXBhcmluZyBvYmplY3RzIG9mXG4gICAgICogdGhlIHNhbWUgYHRvU3RyaW5nVGFnYC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIGZ1bmN0aW9uIG9ubHkgc3VwcG9ydHMgY29tcGFyaW5nIHZhbHVlcyB3aXRoIHRhZ3Mgb2ZcbiAgICAgKiBgQm9vbGVhbmAsIGBEYXRlYCwgYEVycm9yYCwgYE51bWJlcmAsIGBSZWdFeHBgLCBvciBgU3RyaW5nYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGFnIFRoZSBgdG9TdHJpbmdUYWdgIG9mIHRoZSBvYmplY3RzIHRvIGNvbXBhcmUuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc3RhY2sgVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGVxdWFsQnlUYWcob2JqZWN0LCBvdGhlciwgdGFnLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gICAgICBzd2l0Y2ggKHRhZykge1xuICAgICAgICBjYXNlIGRhdGFWaWV3VGFnOlxuICAgICAgICAgIGlmICgob2JqZWN0LmJ5dGVMZW5ndGggIT0gb3RoZXIuYnl0ZUxlbmd0aCkgfHxcbiAgICAgICAgICAgICAgKG9iamVjdC5ieXRlT2Zmc2V0ICE9IG90aGVyLmJ5dGVPZmZzZXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIG9iamVjdCA9IG9iamVjdC5idWZmZXI7XG4gICAgICAgICAgb3RoZXIgPSBvdGhlci5idWZmZXI7XG5cbiAgICAgICAgY2FzZSBhcnJheUJ1ZmZlclRhZzpcbiAgICAgICAgICBpZiAoKG9iamVjdC5ieXRlTGVuZ3RoICE9IG90aGVyLmJ5dGVMZW5ndGgpIHx8XG4gICAgICAgICAgICAgICFlcXVhbEZ1bmMobmV3IFVpbnQ4QXJyYXkob2JqZWN0KSwgbmV3IFVpbnQ4QXJyYXkob3RoZXIpKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcblxuICAgICAgICBjYXNlIGJvb2xUYWc6XG4gICAgICAgIGNhc2UgZGF0ZVRhZzpcbiAgICAgICAgY2FzZSBudW1iZXJUYWc6XG4gICAgICAgICAgLy8gQ29lcmNlIGJvb2xlYW5zIHRvIGAxYCBvciBgMGAgYW5kIGRhdGVzIHRvIG1pbGxpc2Vjb25kcy5cbiAgICAgICAgICAvLyBJbnZhbGlkIGRhdGVzIGFyZSBjb2VyY2VkIHRvIGBOYU5gLlxuICAgICAgICAgIHJldHVybiBlcSgrb2JqZWN0LCArb3RoZXIpO1xuXG4gICAgICAgIGNhc2UgZXJyb3JUYWc6XG4gICAgICAgICAgcmV0dXJuIG9iamVjdC5uYW1lID09IG90aGVyLm5hbWUgJiYgb2JqZWN0Lm1lc3NhZ2UgPT0gb3RoZXIubWVzc2FnZTtcblxuICAgICAgICBjYXNlIHJlZ2V4cFRhZzpcbiAgICAgICAgY2FzZSBzdHJpbmdUYWc6XG4gICAgICAgICAgLy8gQ29lcmNlIHJlZ2V4ZXMgdG8gc3RyaW5ncyBhbmQgdHJlYXQgc3RyaW5ncywgcHJpbWl0aXZlcyBhbmQgb2JqZWN0cyxcbiAgICAgICAgICAvLyBhcyBlcXVhbC4gU2VlIGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1yZWdleHAucHJvdG90eXBlLnRvc3RyaW5nXG4gICAgICAgICAgLy8gZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgICAgICByZXR1cm4gb2JqZWN0ID09IChvdGhlciArICcnKTtcblxuICAgICAgICBjYXNlIG1hcFRhZzpcbiAgICAgICAgICB2YXIgY29udmVydCA9IG1hcFRvQXJyYXk7XG5cbiAgICAgICAgY2FzZSBzZXRUYWc6XG4gICAgICAgICAgdmFyIGlzUGFydGlhbCA9IGJpdG1hc2sgJiBDT01QQVJFX1BBUlRJQUxfRkxBRztcbiAgICAgICAgICBjb252ZXJ0IHx8IChjb252ZXJ0ID0gc2V0VG9BcnJheSk7XG5cbiAgICAgICAgICBpZiAob2JqZWN0LnNpemUgIT0gb3RoZXIuc2l6ZSAmJiAhaXNQYXJ0aWFsKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIEFzc3VtZSBjeWNsaWMgdmFsdWVzIGFyZSBlcXVhbC5cbiAgICAgICAgICB2YXIgc3RhY2tlZCA9IHN0YWNrLmdldChvYmplY3QpO1xuICAgICAgICAgIGlmIChzdGFja2VkKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RhY2tlZCA9PSBvdGhlcjtcbiAgICAgICAgICB9XG4gICAgICAgICAgYml0bWFzayB8PSBDT01QQVJFX1VOT1JERVJFRF9GTEFHO1xuXG4gICAgICAgICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBvYmplY3RzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgICAgICAgc3RhY2suc2V0KG9iamVjdCwgb3RoZXIpO1xuICAgICAgICAgIHZhciByZXN1bHQgPSBlcXVhbEFycmF5cyhjb252ZXJ0KG9iamVjdCksIGNvbnZlcnQob3RoZXIpLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKTtcbiAgICAgICAgICBzdGFja1snZGVsZXRlJ10ob2JqZWN0KTtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuXG4gICAgICAgIGNhc2Ugc3ltYm9sVGFnOlxuICAgICAgICAgIGlmIChzeW1ib2xWYWx1ZU9mKSB7XG4gICAgICAgICAgICByZXR1cm4gc3ltYm9sVmFsdWVPZi5jYWxsKG9iamVjdCkgPT0gc3ltYm9sVmFsdWVPZi5jYWxsKG90aGVyKTtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbERlZXBgIGZvciBvYmplY3RzIHdpdGggc3VwcG9ydCBmb3JcbiAgICAgKiBwYXJ0aWFsIGRlZXAgY29tcGFyaXNvbnMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvdGhlciBUaGUgb3RoZXIgb2JqZWN0IHRvIGNvbXBhcmUuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc3RhY2sgVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGVxdWFsT2JqZWN0cyhvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gICAgICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHLFxuICAgICAgICAgIG9ialByb3BzID0gZ2V0QWxsS2V5cyhvYmplY3QpLFxuICAgICAgICAgIG9iakxlbmd0aCA9IG9ialByb3BzLmxlbmd0aCxcbiAgICAgICAgICBvdGhQcm9wcyA9IGdldEFsbEtleXMob3RoZXIpLFxuICAgICAgICAgIG90aExlbmd0aCA9IG90aFByb3BzLmxlbmd0aDtcblxuICAgICAgaWYgKG9iakxlbmd0aCAhPSBvdGhMZW5ndGggJiYgIWlzUGFydGlhbCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICB2YXIgaW5kZXggPSBvYmpMZW5ndGg7XG4gICAgICB3aGlsZSAoaW5kZXgtLSkge1xuICAgICAgICB2YXIga2V5ID0gb2JqUHJvcHNbaW5kZXhdO1xuICAgICAgICBpZiAoIShpc1BhcnRpYWwgPyBrZXkgaW4gb3RoZXIgOiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG90aGVyLCBrZXkpKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gQ2hlY2sgdGhhdCBjeWNsaWMgdmFsdWVzIGFyZSBlcXVhbC5cbiAgICAgIHZhciBvYmpTdGFja2VkID0gc3RhY2suZ2V0KG9iamVjdCk7XG4gICAgICB2YXIgb3RoU3RhY2tlZCA9IHN0YWNrLmdldChvdGhlcik7XG4gICAgICBpZiAob2JqU3RhY2tlZCAmJiBvdGhTdGFja2VkKSB7XG4gICAgICAgIHJldHVybiBvYmpTdGFja2VkID09IG90aGVyICYmIG90aFN0YWNrZWQgPT0gb2JqZWN0O1xuICAgICAgfVxuICAgICAgdmFyIHJlc3VsdCA9IHRydWU7XG4gICAgICBzdGFjay5zZXQob2JqZWN0LCBvdGhlcik7XG4gICAgICBzdGFjay5zZXQob3RoZXIsIG9iamVjdCk7XG5cbiAgICAgIHZhciBza2lwQ3RvciA9IGlzUGFydGlhbDtcbiAgICAgIHdoaWxlICgrK2luZGV4IDwgb2JqTGVuZ3RoKSB7XG4gICAgICAgIGtleSA9IG9ialByb3BzW2luZGV4XTtcbiAgICAgICAgdmFyIG9ialZhbHVlID0gb2JqZWN0W2tleV0sXG4gICAgICAgICAgICBvdGhWYWx1ZSA9IG90aGVyW2tleV07XG5cbiAgICAgICAgaWYgKGN1c3RvbWl6ZXIpIHtcbiAgICAgICAgICB2YXIgY29tcGFyZWQgPSBpc1BhcnRpYWxcbiAgICAgICAgICAgID8gY3VzdG9taXplcihvdGhWYWx1ZSwgb2JqVmFsdWUsIGtleSwgb3RoZXIsIG9iamVjdCwgc3RhY2spXG4gICAgICAgICAgICA6IGN1c3RvbWl6ZXIob2JqVmFsdWUsIG90aFZhbHVlLCBrZXksIG9iamVjdCwgb3RoZXIsIHN0YWNrKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIG9iamVjdHMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICAgICAgaWYgKCEoY29tcGFyZWQgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICA/IChvYmpWYWx1ZSA9PT0gb3RoVmFsdWUgfHwgZXF1YWxGdW5jKG9ialZhbHVlLCBvdGhWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spKVxuICAgICAgICAgICAgICA6IGNvbXBhcmVkXG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgc2tpcEN0b3IgfHwgKHNraXBDdG9yID0ga2V5ID09ICdjb25zdHJ1Y3RvcicpO1xuICAgICAgfVxuICAgICAgaWYgKHJlc3VsdCAmJiAhc2tpcEN0b3IpIHtcbiAgICAgICAgdmFyIG9iakN0b3IgPSBvYmplY3QuY29uc3RydWN0b3IsXG4gICAgICAgICAgICBvdGhDdG9yID0gb3RoZXIuY29uc3RydWN0b3I7XG5cbiAgICAgICAgLy8gTm9uIGBPYmplY3RgIG9iamVjdCBpbnN0YW5jZXMgd2l0aCBkaWZmZXJlbnQgY29uc3RydWN0b3JzIGFyZSBub3QgZXF1YWwuXG4gICAgICAgIGlmIChvYmpDdG9yICE9IG90aEN0b3IgJiZcbiAgICAgICAgICAgICgnY29uc3RydWN0b3InIGluIG9iamVjdCAmJiAnY29uc3RydWN0b3InIGluIG90aGVyKSAmJlxuICAgICAgICAgICAgISh0eXBlb2Ygb2JqQ3RvciA9PSAnZnVuY3Rpb24nICYmIG9iakN0b3IgaW5zdGFuY2VvZiBvYmpDdG9yICYmXG4gICAgICAgICAgICAgIHR5cGVvZiBvdGhDdG9yID09ICdmdW5jdGlvbicgJiYgb3RoQ3RvciBpbnN0YW5jZW9mIG90aEN0b3IpKSB7XG4gICAgICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHN0YWNrWydkZWxldGUnXShvYmplY3QpO1xuICAgICAgc3RhY2tbJ2RlbGV0ZSddKG90aGVyKTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlUmVzdGAgd2hpY2ggZmxhdHRlbnMgdGhlIHJlc3QgYXJyYXkuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gZmxhdFJlc3QoZnVuYykge1xuICAgICAgcmV0dXJuIHNldFRvU3RyaW5nKG92ZXJSZXN0KGZ1bmMsIHVuZGVmaW5lZCwgZmxhdHRlbiksIGZ1bmMgKyAnJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiBvd24gZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMgYW5kIHN5bWJvbHMuXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0QWxsS2V5cyhvYmplY3QpIHtcbiAgICAgIHJldHVybiBiYXNlR2V0QWxsS2V5cyhvYmplY3QsIGtleXMsIGdldFN5bWJvbHMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2Ygb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBhbmRcbiAgICAgKiBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRBbGxLZXlzSW4ob2JqZWN0KSB7XG4gICAgICByZXR1cm4gYmFzZUdldEFsbEtleXMob2JqZWN0LCBrZXlzSW4sIGdldFN5bWJvbHNJbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBtZXRhZGF0YSBmb3IgYGZ1bmNgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbWV0YWRhdGEgZm9yIGBmdW5jYC5cbiAgICAgKi9cbiAgICB2YXIgZ2V0RGF0YSA9ICFtZXRhTWFwID8gbm9vcCA6IGZ1bmN0aW9uKGZ1bmMpIHtcbiAgICAgIHJldHVybiBtZXRhTWFwLmdldChmdW5jKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgbmFtZSBvZiBgZnVuY2AuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGZ1bmN0aW9uIG5hbWUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0RnVuY05hbWUoZnVuYykge1xuICAgICAgdmFyIHJlc3VsdCA9IChmdW5jLm5hbWUgKyAnJyksXG4gICAgICAgICAgYXJyYXkgPSByZWFsTmFtZXNbcmVzdWx0XSxcbiAgICAgICAgICBsZW5ndGggPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHJlYWxOYW1lcywgcmVzdWx0KSA/IGFycmF5Lmxlbmd0aCA6IDA7XG5cbiAgICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgICB2YXIgZGF0YSA9IGFycmF5W2xlbmd0aF0sXG4gICAgICAgICAgICBvdGhlckZ1bmMgPSBkYXRhLmZ1bmM7XG4gICAgICAgIGlmIChvdGhlckZ1bmMgPT0gbnVsbCB8fCBvdGhlckZ1bmMgPT0gZnVuYykge1xuICAgICAgICAgIHJldHVybiBkYXRhLm5hbWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgYXJndW1lbnQgcGxhY2Vob2xkZXIgdmFsdWUgZm9yIGBmdW5jYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaW5zcGVjdC5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcGxhY2Vob2xkZXIgdmFsdWUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0SG9sZGVyKGZ1bmMpIHtcbiAgICAgIHZhciBvYmplY3QgPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKGxvZGFzaCwgJ3BsYWNlaG9sZGVyJykgPyBsb2Rhc2ggOiBmdW5jO1xuICAgICAgcmV0dXJuIG9iamVjdC5wbGFjZWhvbGRlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBhcHByb3ByaWF0ZSBcIml0ZXJhdGVlXCIgZnVuY3Rpb24uIElmIGBfLml0ZXJhdGVlYCBpcyBjdXN0b21pemVkLFxuICAgICAqIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgY3VzdG9tIG1ldGhvZCwgb3RoZXJ3aXNlIGl0IHJldHVybnMgYGJhc2VJdGVyYXRlZWAuXG4gICAgICogSWYgYXJndW1lbnRzIGFyZSBwcm92aWRlZCwgdGhlIGNob3NlbiBmdW5jdGlvbiBpcyBpbnZva2VkIHdpdGggdGhlbSBhbmRcbiAgICAgKiBpdHMgcmVzdWx0IGlzIHJldHVybmVkLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IFt2YWx1ZV0gVGhlIHZhbHVlIHRvIGNvbnZlcnQgdG8gYW4gaXRlcmF0ZWUuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFthcml0eV0gVGhlIGFyaXR5IG9mIHRoZSBjcmVhdGVkIGl0ZXJhdGVlLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgY2hvc2VuIGZ1bmN0aW9uIG9yIGl0cyByZXN1bHQuXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0SXRlcmF0ZWUoKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gbG9kYXNoLml0ZXJhdGVlIHx8IGl0ZXJhdGVlO1xuICAgICAgcmVzdWx0ID0gcmVzdWx0ID09PSBpdGVyYXRlZSA/IGJhc2VJdGVyYXRlZSA6IHJlc3VsdDtcbiAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gcmVzdWx0KGFyZ3VtZW50c1swXSwgYXJndW1lbnRzWzFdKSA6IHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBkYXRhIGZvciBgbWFwYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG1hcCBUaGUgbWFwIHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIHJlZmVyZW5jZSBrZXkuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1hcCBkYXRhLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldE1hcERhdGEobWFwLCBrZXkpIHtcbiAgICAgIHZhciBkYXRhID0gbWFwLl9fZGF0YV9fO1xuICAgICAgcmV0dXJuIGlzS2V5YWJsZShrZXkpXG4gICAgICAgID8gZGF0YVt0eXBlb2Yga2V5ID09ICdzdHJpbmcnID8gJ3N0cmluZycgOiAnaGFzaCddXG4gICAgICAgIDogZGF0YS5tYXA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgcHJvcGVydHkgbmFtZXMsIHZhbHVlcywgYW5kIGNvbXBhcmUgZmxhZ3Mgb2YgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG1hdGNoIGRhdGEgb2YgYG9iamVjdGAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0TWF0Y2hEYXRhKG9iamVjdCkge1xuICAgICAgdmFyIHJlc3VsdCA9IGtleXMob2JqZWN0KSxcbiAgICAgICAgICBsZW5ndGggPSByZXN1bHQubGVuZ3RoO1xuXG4gICAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgICAgdmFyIGtleSA9IHJlc3VsdFtsZW5ndGhdLFxuICAgICAgICAgICAgdmFsdWUgPSBvYmplY3Rba2V5XTtcblxuICAgICAgICByZXN1bHRbbGVuZ3RoXSA9IFtrZXksIHZhbHVlLCBpc1N0cmljdENvbXBhcmFibGUodmFsdWUpXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgbmF0aXZlIGZ1bmN0aW9uIGF0IGBrZXlgIG9mIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBtZXRob2QgdG8gZ2V0LlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBmdW5jdGlvbiBpZiBpdCdzIG5hdGl2ZSwgZWxzZSBgdW5kZWZpbmVkYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXROYXRpdmUob2JqZWN0LCBrZXkpIHtcbiAgICAgIHZhciB2YWx1ZSA9IGdldFZhbHVlKG9iamVjdCwga2V5KTtcbiAgICAgIHJldHVybiBiYXNlSXNOYXRpdmUodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlR2V0VGFnYCB3aGljaCBpZ25vcmVzIGBTeW1ib2wudG9TdHJpbmdUYWdgIHZhbHVlcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcmF3IGB0b1N0cmluZ1RhZ2AuXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0UmF3VGFnKHZhbHVlKSB7XG4gICAgICB2YXIgaXNPd24gPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBzeW1Ub1N0cmluZ1RhZyksXG4gICAgICAgICAgdGFnID0gdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xuXG4gICAgICB0cnkge1xuICAgICAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB1bmRlZmluZWQ7XG4gICAgICAgIHZhciB1bm1hc2tlZCA9IHRydWU7XG4gICAgICB9IGNhdGNoIChlKSB7fVxuXG4gICAgICB2YXIgcmVzdWx0ID0gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG4gICAgICBpZiAodW5tYXNrZWQpIHtcbiAgICAgICAgaWYgKGlzT3duKSB7XG4gICAgICAgICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdGFnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRlbGV0ZSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGVudW1lcmFibGUgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2Ygc3ltYm9scy5cbiAgICAgKi9cbiAgICB2YXIgZ2V0U3ltYm9scyA9ICFuYXRpdmVHZXRTeW1ib2xzID8gc3R1YkFycmF5IDogZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgICBpZiAob2JqZWN0ID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgb2JqZWN0ID0gT2JqZWN0KG9iamVjdCk7XG4gICAgICByZXR1cm4gYXJyYXlGaWx0ZXIobmF0aXZlR2V0U3ltYm9scyhvYmplY3QpLCBmdW5jdGlvbihzeW1ib2wpIHtcbiAgICAgICAgcmV0dXJuIHByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwob2JqZWN0LCBzeW1ib2wpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2Ygc3ltYm9scy5cbiAgICAgKi9cbiAgICB2YXIgZ2V0U3ltYm9sc0luID0gIW5hdGl2ZUdldFN5bWJvbHMgPyBzdHViQXJyYXkgOiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICAgIHdoaWxlIChvYmplY3QpIHtcbiAgICAgICAgYXJyYXlQdXNoKHJlc3VsdCwgZ2V0U3ltYm9scyhvYmplY3QpKTtcbiAgICAgICAgb2JqZWN0ID0gZ2V0UHJvdG90eXBlKG9iamVjdCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBgdG9TdHJpbmdUYWdgIG9mIGB2YWx1ZWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGB0b1N0cmluZ1RhZ2AuXG4gICAgICovXG4gICAgdmFyIGdldFRhZyA9IGJhc2VHZXRUYWc7XG5cbiAgICAvLyBGYWxsYmFjayBmb3IgZGF0YSB2aWV3cywgbWFwcywgc2V0cywgYW5kIHdlYWsgbWFwcyBpbiBJRSAxMSBhbmQgcHJvbWlzZXMgaW4gTm9kZS5qcyA8IDYuXG4gICAgaWYgKChEYXRhVmlldyAmJiBnZXRUYWcobmV3IERhdGFWaWV3KG5ldyBBcnJheUJ1ZmZlcigxKSkpICE9IGRhdGFWaWV3VGFnKSB8fFxuICAgICAgICAoTWFwICYmIGdldFRhZyhuZXcgTWFwKSAhPSBtYXBUYWcpIHx8XG4gICAgICAgIChQcm9taXNlICYmIGdldFRhZyhQcm9taXNlLnJlc29sdmUoKSkgIT0gcHJvbWlzZVRhZykgfHxcbiAgICAgICAgKFNldCAmJiBnZXRUYWcobmV3IFNldCkgIT0gc2V0VGFnKSB8fFxuICAgICAgICAoV2Vha01hcCAmJiBnZXRUYWcobmV3IFdlYWtNYXApICE9IHdlYWtNYXBUYWcpKSB7XG4gICAgICBnZXRUYWcgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gYmFzZUdldFRhZyh2YWx1ZSksXG4gICAgICAgICAgICBDdG9yID0gcmVzdWx0ID09IG9iamVjdFRhZyA/IHZhbHVlLmNvbnN0cnVjdG9yIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgY3RvclN0cmluZyA9IEN0b3IgPyB0b1NvdXJjZShDdG9yKSA6ICcnO1xuXG4gICAgICAgIGlmIChjdG9yU3RyaW5nKSB7XG4gICAgICAgICAgc3dpdGNoIChjdG9yU3RyaW5nKSB7XG4gICAgICAgICAgICBjYXNlIGRhdGFWaWV3Q3RvclN0cmluZzogcmV0dXJuIGRhdGFWaWV3VGFnO1xuICAgICAgICAgICAgY2FzZSBtYXBDdG9yU3RyaW5nOiByZXR1cm4gbWFwVGFnO1xuICAgICAgICAgICAgY2FzZSBwcm9taXNlQ3RvclN0cmluZzogcmV0dXJuIHByb21pc2VUYWc7XG4gICAgICAgICAgICBjYXNlIHNldEN0b3JTdHJpbmc6IHJldHVybiBzZXRUYWc7XG4gICAgICAgICAgICBjYXNlIHdlYWtNYXBDdG9yU3RyaW5nOiByZXR1cm4gd2Vha01hcFRhZztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgdmlldywgYXBwbHlpbmcgYW55IGB0cmFuc2Zvcm1zYCB0byB0aGUgYHN0YXJ0YCBhbmQgYGVuZGAgcG9zaXRpb25zLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnQgVGhlIHN0YXJ0IG9mIHRoZSB2aWV3LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBlbmQgVGhlIGVuZCBvZiB0aGUgdmlldy5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSB0cmFuc2Zvcm1zIFRoZSB0cmFuc2Zvcm1hdGlvbnMgdG8gYXBwbHkgdG8gdGhlIHZpZXcuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgYHN0YXJ0YCBhbmQgYGVuZGBcbiAgICAgKiAgcG9zaXRpb25zIG9mIHRoZSB2aWV3LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldFZpZXcoc3RhcnQsIGVuZCwgdHJhbnNmb3Jtcykge1xuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgbGVuZ3RoID0gdHJhbnNmb3Jtcy5sZW5ndGg7XG5cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciBkYXRhID0gdHJhbnNmb3Jtc1tpbmRleF0sXG4gICAgICAgICAgICBzaXplID0gZGF0YS5zaXplO1xuXG4gICAgICAgIHN3aXRjaCAoZGF0YS50eXBlKSB7XG4gICAgICAgICAgY2FzZSAnZHJvcCc6ICAgICAgc3RhcnQgKz0gc2l6ZTsgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnZHJvcFJpZ2h0JzogZW5kIC09IHNpemU7IGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ3Rha2UnOiAgICAgIGVuZCA9IG5hdGl2ZU1pbihlbmQsIHN0YXJ0ICsgc2l6ZSk7IGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ3Rha2VSaWdodCc6IHN0YXJ0ID0gbmF0aXZlTWF4KHN0YXJ0LCBlbmQgLSBzaXplKTsgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB7ICdzdGFydCc6IHN0YXJ0LCAnZW5kJzogZW5kIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXh0cmFjdHMgd3JhcHBlciBkZXRhaWxzIGZyb20gdGhlIGBzb3VyY2VgIGJvZHkgY29tbWVudC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSBUaGUgc291cmNlIHRvIGluc3BlY3QuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSB3cmFwcGVyIGRldGFpbHMuXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0V3JhcERldGFpbHMoc291cmNlKSB7XG4gICAgICB2YXIgbWF0Y2ggPSBzb3VyY2UubWF0Y2gocmVXcmFwRGV0YWlscyk7XG4gICAgICByZXR1cm4gbWF0Y2ggPyBtYXRjaFsxXS5zcGxpdChyZVNwbGl0RGV0YWlscykgOiBbXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHBhdGhgIGV4aXN0cyBvbiBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIHRvIGNoZWNrLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGhhc0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGNoZWNrIHByb3BlcnRpZXMuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBwYXRoYCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBoYXNQYXRoKG9iamVjdCwgcGF0aCwgaGFzRnVuYykge1xuICAgICAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG5cbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGxlbmd0aCA9IHBhdGgubGVuZ3RoLFxuICAgICAgICAgIHJlc3VsdCA9IGZhbHNlO1xuXG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICB2YXIga2V5ID0gdG9LZXkocGF0aFtpbmRleF0pO1xuICAgICAgICBpZiAoIShyZXN1bHQgPSBvYmplY3QgIT0gbnVsbCAmJiBoYXNGdW5jKG9iamVjdCwga2V5KSkpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBvYmplY3QgPSBvYmplY3Rba2V5XTtcbiAgICAgIH1cbiAgICAgIGlmIChyZXN1bHQgfHwgKytpbmRleCAhPSBsZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICAgIGxlbmd0aCA9IG9iamVjdCA9PSBudWxsID8gMCA6IG9iamVjdC5sZW5ndGg7XG4gICAgICByZXR1cm4gISFsZW5ndGggJiYgaXNMZW5ndGgobGVuZ3RoKSAmJiBpc0luZGV4KGtleSwgbGVuZ3RoKSAmJlxuICAgICAgICAoaXNBcnJheShvYmplY3QpIHx8IGlzQXJndW1lbnRzKG9iamVjdCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluaXRpYWxpemVzIGFuIGFycmF5IGNsb25lLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gY2xvbmUuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBpbml0aWFsaXplZCBjbG9uZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpbml0Q2xvbmVBcnJheShhcnJheSkge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgICByZXN1bHQgPSBuZXcgYXJyYXkuY29uc3RydWN0b3IobGVuZ3RoKTtcblxuICAgICAgLy8gQWRkIHByb3BlcnRpZXMgYXNzaWduZWQgYnkgYFJlZ0V4cCNleGVjYC5cbiAgICAgIGlmIChsZW5ndGggJiYgdHlwZW9mIGFycmF5WzBdID09ICdzdHJpbmcnICYmIGhhc093blByb3BlcnR5LmNhbGwoYXJyYXksICdpbmRleCcpKSB7XG4gICAgICAgIHJlc3VsdC5pbmRleCA9IGFycmF5LmluZGV4O1xuICAgICAgICByZXN1bHQuaW5wdXQgPSBhcnJheS5pbnB1dDtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW5pdGlhbGl6ZXMgYW4gb2JqZWN0IGNsb25lLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY2xvbmUuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaW5pdGlhbGl6ZWQgY2xvbmUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaW5pdENsb25lT2JqZWN0KG9iamVjdCkge1xuICAgICAgcmV0dXJuICh0eXBlb2Ygb2JqZWN0LmNvbnN0cnVjdG9yID09ICdmdW5jdGlvbicgJiYgIWlzUHJvdG90eXBlKG9iamVjdCkpXG4gICAgICAgID8gYmFzZUNyZWF0ZShnZXRQcm90b3R5cGUob2JqZWN0KSlcbiAgICAgICAgOiB7fTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbml0aWFsaXplcyBhbiBvYmplY3QgY2xvbmUgYmFzZWQgb24gaXRzIGB0b1N0cmluZ1RhZ2AuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBmdW5jdGlvbiBvbmx5IHN1cHBvcnRzIGNsb25pbmcgdmFsdWVzIHdpdGggdGFncyBvZlxuICAgICAqIGBCb29sZWFuYCwgYERhdGVgLCBgRXJyb3JgLCBgTWFwYCwgYE51bWJlcmAsIGBSZWdFeHBgLCBgU2V0YCwgb3IgYFN0cmluZ2AuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjbG9uZS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGFnIFRoZSBgdG9TdHJpbmdUYWdgIG9mIHRoZSBvYmplY3QgdG8gY2xvbmUuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbaXNEZWVwXSBTcGVjaWZ5IGEgZGVlcCBjbG9uZS5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBpbml0aWFsaXplZCBjbG9uZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpbml0Q2xvbmVCeVRhZyhvYmplY3QsIHRhZywgaXNEZWVwKSB7XG4gICAgICB2YXIgQ3RvciA9IG9iamVjdC5jb25zdHJ1Y3RvcjtcbiAgICAgIHN3aXRjaCAodGFnKSB7XG4gICAgICAgIGNhc2UgYXJyYXlCdWZmZXJUYWc6XG4gICAgICAgICAgcmV0dXJuIGNsb25lQXJyYXlCdWZmZXIob2JqZWN0KTtcblxuICAgICAgICBjYXNlIGJvb2xUYWc6XG4gICAgICAgIGNhc2UgZGF0ZVRhZzpcbiAgICAgICAgICByZXR1cm4gbmV3IEN0b3IoK29iamVjdCk7XG5cbiAgICAgICAgY2FzZSBkYXRhVmlld1RhZzpcbiAgICAgICAgICByZXR1cm4gY2xvbmVEYXRhVmlldyhvYmplY3QsIGlzRGVlcCk7XG5cbiAgICAgICAgY2FzZSBmbG9hdDMyVGFnOiBjYXNlIGZsb2F0NjRUYWc6XG4gICAgICAgIGNhc2UgaW50OFRhZzogY2FzZSBpbnQxNlRhZzogY2FzZSBpbnQzMlRhZzpcbiAgICAgICAgY2FzZSB1aW50OFRhZzogY2FzZSB1aW50OENsYW1wZWRUYWc6IGNhc2UgdWludDE2VGFnOiBjYXNlIHVpbnQzMlRhZzpcbiAgICAgICAgICByZXR1cm4gY2xvbmVUeXBlZEFycmF5KG9iamVjdCwgaXNEZWVwKTtcblxuICAgICAgICBjYXNlIG1hcFRhZzpcbiAgICAgICAgICByZXR1cm4gbmV3IEN0b3I7XG5cbiAgICAgICAgY2FzZSBudW1iZXJUYWc6XG4gICAgICAgIGNhc2Ugc3RyaW5nVGFnOlxuICAgICAgICAgIHJldHVybiBuZXcgQ3RvcihvYmplY3QpO1xuXG4gICAgICAgIGNhc2UgcmVnZXhwVGFnOlxuICAgICAgICAgIHJldHVybiBjbG9uZVJlZ0V4cChvYmplY3QpO1xuXG4gICAgICAgIGNhc2Ugc2V0VGFnOlxuICAgICAgICAgIHJldHVybiBuZXcgQ3RvcjtcblxuICAgICAgICBjYXNlIHN5bWJvbFRhZzpcbiAgICAgICAgICByZXR1cm4gY2xvbmVTeW1ib2wob2JqZWN0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbnNlcnRzIHdyYXBwZXIgYGRldGFpbHNgIGluIGEgY29tbWVudCBhdCB0aGUgdG9wIG9mIHRoZSBgc291cmNlYCBib2R5LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIFRoZSBzb3VyY2UgdG8gbW9kaWZ5LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gZGV0YWlscyBUaGUgZGV0YWlscyB0byBpbnNlcnQuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgbW9kaWZpZWQgc291cmNlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGluc2VydFdyYXBEZXRhaWxzKHNvdXJjZSwgZGV0YWlscykge1xuICAgICAgdmFyIGxlbmd0aCA9IGRldGFpbHMubGVuZ3RoO1xuICAgICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZTtcbiAgICAgIH1cbiAgICAgIHZhciBsYXN0SW5kZXggPSBsZW5ndGggLSAxO1xuICAgICAgZGV0YWlsc1tsYXN0SW5kZXhdID0gKGxlbmd0aCA+IDEgPyAnJiAnIDogJycpICsgZGV0YWlsc1tsYXN0SW5kZXhdO1xuICAgICAgZGV0YWlscyA9IGRldGFpbHMuam9pbihsZW5ndGggPiAyID8gJywgJyA6ICcgJyk7XG4gICAgICByZXR1cm4gc291cmNlLnJlcGxhY2UocmVXcmFwQ29tbWVudCwgJ3tcXG4vKiBbd3JhcHBlZCB3aXRoICcgKyBkZXRhaWxzICsgJ10gKi9cXG4nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIGZsYXR0ZW5hYmxlIGBhcmd1bWVudHNgIG9iamVjdCBvciBhcnJheS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgZmxhdHRlbmFibGUsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc0ZsYXR0ZW5hYmxlKHZhbHVlKSB7XG4gICAgICByZXR1cm4gaXNBcnJheSh2YWx1ZSkgfHwgaXNBcmd1bWVudHModmFsdWUpIHx8XG4gICAgICAgICEhKHNwcmVhZGFibGVTeW1ib2wgJiYgdmFsdWUgJiYgdmFsdWVbc3ByZWFkYWJsZVN5bWJvbF0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgYXJyYXktbGlrZSBpbmRleC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGg9TUFYX1NBRkVfSU5URUdFUl0gVGhlIHVwcGVyIGJvdW5kcyBvZiBhIHZhbGlkIGluZGV4LlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgaW5kZXgsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc0luZGV4KHZhbHVlLCBsZW5ndGgpIHtcbiAgICAgIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICAgICAgbGVuZ3RoID0gbGVuZ3RoID09IG51bGwgPyBNQVhfU0FGRV9JTlRFR0VSIDogbGVuZ3RoO1xuXG4gICAgICByZXR1cm4gISFsZW5ndGggJiZcbiAgICAgICAgKHR5cGUgPT0gJ251bWJlcicgfHxcbiAgICAgICAgICAodHlwZSAhPSAnc3ltYm9sJyAmJiByZUlzVWludC50ZXN0KHZhbHVlKSkpICYmXG4gICAgICAgICAgICAodmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8IGxlbmd0aCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBhcmd1bWVudHMgYXJlIGZyb20gYW4gaXRlcmF0ZWUgY2FsbC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIHZhbHVlIGFyZ3VtZW50LlxuICAgICAqIEBwYXJhbSB7Kn0gaW5kZXggVGhlIHBvdGVudGlhbCBpdGVyYXRlZSBpbmRleCBvciBrZXkgYXJndW1lbnQuXG4gICAgICogQHBhcmFtIHsqfSBvYmplY3QgVGhlIHBvdGVudGlhbCBpdGVyYXRlZSBvYmplY3QgYXJndW1lbnQuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBhcmd1bWVudHMgYXJlIGZyb20gYW4gaXRlcmF0ZWUgY2FsbCxcbiAgICAgKiAgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzSXRlcmF0ZWVDYWxsKHZhbHVlLCBpbmRleCwgb2JqZWN0KSB7XG4gICAgICBpZiAoIWlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgdmFyIHR5cGUgPSB0eXBlb2YgaW5kZXg7XG4gICAgICBpZiAodHlwZSA9PSAnbnVtYmVyJ1xuICAgICAgICAgICAgPyAoaXNBcnJheUxpa2Uob2JqZWN0KSAmJiBpc0luZGV4KGluZGV4LCBvYmplY3QubGVuZ3RoKSlcbiAgICAgICAgICAgIDogKHR5cGUgPT0gJ3N0cmluZycgJiYgaW5kZXggaW4gb2JqZWN0KVxuICAgICAgICAgICkge1xuICAgICAgICByZXR1cm4gZXEob2JqZWN0W2luZGV4XSwgdmFsdWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgcHJvcGVydHkgbmFtZSBhbmQgbm90IGEgcHJvcGVydHkgcGF0aC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkga2V5cyBvbi5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHByb3BlcnR5IG5hbWUsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc0tleSh2YWx1ZSwgb2JqZWN0KSB7XG4gICAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gICAgICBpZiAodHlwZSA9PSAnbnVtYmVyJyB8fCB0eXBlID09ICdzeW1ib2wnIHx8IHR5cGUgPT0gJ2Jvb2xlYW4nIHx8XG4gICAgICAgICAgdmFsdWUgPT0gbnVsbCB8fCBpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVJc1BsYWluUHJvcC50ZXN0KHZhbHVlKSB8fCAhcmVJc0RlZXBQcm9wLnRlc3QodmFsdWUpIHx8XG4gICAgICAgIChvYmplY3QgIT0gbnVsbCAmJiB2YWx1ZSBpbiBPYmplY3Qob2JqZWN0KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUgZm9yIHVzZSBhcyB1bmlxdWUgb2JqZWN0IGtleS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc0tleWFibGUodmFsdWUpIHtcbiAgICAgIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICAgICAgcmV0dXJuICh0eXBlID09ICdzdHJpbmcnIHx8IHR5cGUgPT0gJ251bWJlcicgfHwgdHlwZSA9PSAnc3ltYm9sJyB8fCB0eXBlID09ICdib29sZWFuJylcbiAgICAgICAgPyAodmFsdWUgIT09ICdfX3Byb3RvX18nKVxuICAgICAgICA6ICh2YWx1ZSA9PT0gbnVsbCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGBmdW5jYCBoYXMgYSBsYXp5IGNvdW50ZXJwYXJ0LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYGZ1bmNgIGhhcyBhIGxhenkgY291bnRlcnBhcnQsXG4gICAgICogIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc0xhemlhYmxlKGZ1bmMpIHtcbiAgICAgIHZhciBmdW5jTmFtZSA9IGdldEZ1bmNOYW1lKGZ1bmMpLFxuICAgICAgICAgIG90aGVyID0gbG9kYXNoW2Z1bmNOYW1lXTtcblxuICAgICAgaWYgKHR5cGVvZiBvdGhlciAhPSAnZnVuY3Rpb24nIHx8ICEoZnVuY05hbWUgaW4gTGF6eVdyYXBwZXIucHJvdG90eXBlKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoZnVuYyA9PT0gb3RoZXIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICB2YXIgZGF0YSA9IGdldERhdGEob3RoZXIpO1xuICAgICAgcmV0dXJuICEhZGF0YSAmJiBmdW5jID09PSBkYXRhWzBdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgZnVuY2AgaGFzIGl0cyBzb3VyY2UgbWFza2VkLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYGZ1bmNgIGlzIG1hc2tlZCwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzTWFza2VkKGZ1bmMpIHtcbiAgICAgIHJldHVybiAhIW1hc2tTcmNLZXkgJiYgKG1hc2tTcmNLZXkgaW4gZnVuYyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGBmdW5jYCBpcyBjYXBhYmxlIG9mIGJlaW5nIG1hc2tlZC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBmdW5jYCBpcyBtYXNrYWJsZSwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIHZhciBpc01hc2thYmxlID0gY29yZUpzRGF0YSA/IGlzRnVuY3Rpb24gOiBzdHViRmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBsaWtlbHkgYSBwcm90b3R5cGUgb2JqZWN0LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHByb3RvdHlwZSwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzUHJvdG90eXBlKHZhbHVlKSB7XG4gICAgICB2YXIgQ3RvciA9IHZhbHVlICYmIHZhbHVlLmNvbnN0cnVjdG9yLFxuICAgICAgICAgIHByb3RvID0gKHR5cGVvZiBDdG9yID09ICdmdW5jdGlvbicgJiYgQ3Rvci5wcm90b3R5cGUpIHx8IG9iamVjdFByb3RvO1xuXG4gICAgICByZXR1cm4gdmFsdWUgPT09IHByb3RvO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlIGZvciBzdHJpY3QgZXF1YWxpdHkgY29tcGFyaXNvbnMsIGkuZS4gYD09PWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlmIHN1aXRhYmxlIGZvciBzdHJpY3RcbiAgICAgKiAgZXF1YWxpdHkgY29tcGFyaXNvbnMsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc1N0cmljdENvbXBhcmFibGUodmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZSA9PT0gdmFsdWUgJiYgIWlzT2JqZWN0KHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYG1hdGNoZXNQcm9wZXJ0eWAgZm9yIHNvdXJjZSB2YWx1ZXMgc3VpdGFibGVcbiAgICAgKiBmb3Igc3RyaWN0IGVxdWFsaXR5IGNvbXBhcmlzb25zLCBpLmUuIGA9PT1gLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAgICAgKiBAcGFyYW0geyp9IHNyY1ZhbHVlIFRoZSB2YWx1ZSB0byBtYXRjaC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzcGVjIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlKGtleSwgc3JjVmFsdWUpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICAgICAgaWYgKG9iamVjdCA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmplY3Rba2V5XSA9PT0gc3JjVmFsdWUgJiZcbiAgICAgICAgICAoc3JjVmFsdWUgIT09IHVuZGVmaW5lZCB8fCAoa2V5IGluIE9iamVjdChvYmplY3QpKSk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5tZW1vaXplYCB3aGljaCBjbGVhcnMgdGhlIG1lbW9pemVkIGZ1bmN0aW9uJ3NcbiAgICAgKiBjYWNoZSB3aGVuIGl0IGV4Y2VlZHMgYE1BWF9NRU1PSVpFX1NJWkVgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBoYXZlIGl0cyBvdXRwdXQgbWVtb2l6ZWQuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgbWVtb2l6ZWQgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gbWVtb2l6ZUNhcHBlZChmdW5jKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gbWVtb2l6ZShmdW5jLCBmdW5jdGlvbihrZXkpIHtcbiAgICAgICAgaWYgKGNhY2hlLnNpemUgPT09IE1BWF9NRU1PSVpFX1NJWkUpIHtcbiAgICAgICAgICBjYWNoZS5jbGVhcigpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBrZXk7XG4gICAgICB9KTtcblxuICAgICAgdmFyIGNhY2hlID0gcmVzdWx0LmNhY2hlO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNZXJnZXMgdGhlIGZ1bmN0aW9uIG1ldGFkYXRhIG9mIGBzb3VyY2VgIGludG8gYGRhdGFgLlxuICAgICAqXG4gICAgICogTWVyZ2luZyBtZXRhZGF0YSByZWR1Y2VzIHRoZSBudW1iZXIgb2Ygd3JhcHBlcnMgdXNlZCB0byBpbnZva2UgYSBmdW5jdGlvbi5cbiAgICAgKiBUaGlzIGlzIHBvc3NpYmxlIGJlY2F1c2UgbWV0aG9kcyBsaWtlIGBfLmJpbmRgLCBgXy5jdXJyeWAsIGFuZCBgXy5wYXJ0aWFsYFxuICAgICAqIG1heSBiZSBhcHBsaWVkIHJlZ2FyZGxlc3Mgb2YgZXhlY3V0aW9uIG9yZGVyLiBNZXRob2RzIGxpa2UgYF8uYXJ5YCBhbmRcbiAgICAgKiBgXy5yZWFyZ2AgbW9kaWZ5IGZ1bmN0aW9uIGFyZ3VtZW50cywgbWFraW5nIHRoZSBvcmRlciBpbiB3aGljaCB0aGV5IGFyZVxuICAgICAqIGV4ZWN1dGVkIGltcG9ydGFudCwgcHJldmVudGluZyB0aGUgbWVyZ2luZyBvZiBtZXRhZGF0YS4gSG93ZXZlciwgd2UgbWFrZVxuICAgICAqIGFuIGV4Y2VwdGlvbiBmb3IgYSBzYWZlIGNvbWJpbmVkIGNhc2Ugd2hlcmUgY3VycmllZCBmdW5jdGlvbnMgaGF2ZSBgXy5hcnlgXG4gICAgICogYW5kIG9yIGBfLnJlYXJnYCBhcHBsaWVkLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBkYXRhIFRoZSBkZXN0aW5hdGlvbiBtZXRhZGF0YS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBzb3VyY2UgVGhlIHNvdXJjZSBtZXRhZGF0YS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGRhdGFgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1lcmdlRGF0YShkYXRhLCBzb3VyY2UpIHtcbiAgICAgIHZhciBiaXRtYXNrID0gZGF0YVsxXSxcbiAgICAgICAgICBzcmNCaXRtYXNrID0gc291cmNlWzFdLFxuICAgICAgICAgIG5ld0JpdG1hc2sgPSBiaXRtYXNrIHwgc3JjQml0bWFzayxcbiAgICAgICAgICBpc0NvbW1vbiA9IG5ld0JpdG1hc2sgPCAoV1JBUF9CSU5EX0ZMQUcgfCBXUkFQX0JJTkRfS0VZX0ZMQUcgfCBXUkFQX0FSWV9GTEFHKTtcblxuICAgICAgdmFyIGlzQ29tYm8gPVxuICAgICAgICAoKHNyY0JpdG1hc2sgPT0gV1JBUF9BUllfRkxBRykgJiYgKGJpdG1hc2sgPT0gV1JBUF9DVVJSWV9GTEFHKSkgfHxcbiAgICAgICAgKChzcmNCaXRtYXNrID09IFdSQVBfQVJZX0ZMQUcpICYmIChiaXRtYXNrID09IFdSQVBfUkVBUkdfRkxBRykgJiYgKGRhdGFbN10ubGVuZ3RoIDw9IHNvdXJjZVs4XSkpIHx8XG4gICAgICAgICgoc3JjQml0bWFzayA9PSAoV1JBUF9BUllfRkxBRyB8IFdSQVBfUkVBUkdfRkxBRykpICYmIChzb3VyY2VbN10ubGVuZ3RoIDw9IHNvdXJjZVs4XSkgJiYgKGJpdG1hc2sgPT0gV1JBUF9DVVJSWV9GTEFHKSk7XG5cbiAgICAgIC8vIEV4aXQgZWFybHkgaWYgbWV0YWRhdGEgY2FuJ3QgYmUgbWVyZ2VkLlxuICAgICAgaWYgKCEoaXNDb21tb24gfHwgaXNDb21ibykpIHtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICB9XG4gICAgICAvLyBVc2Ugc291cmNlIGB0aGlzQXJnYCBpZiBhdmFpbGFibGUuXG4gICAgICBpZiAoc3JjQml0bWFzayAmIFdSQVBfQklORF9GTEFHKSB7XG4gICAgICAgIGRhdGFbMl0gPSBzb3VyY2VbMl07XG4gICAgICAgIC8vIFNldCB3aGVuIGN1cnJ5aW5nIGEgYm91bmQgZnVuY3Rpb24uXG4gICAgICAgIG5ld0JpdG1hc2sgfD0gYml0bWFzayAmIFdSQVBfQklORF9GTEFHID8gMCA6IFdSQVBfQ1VSUllfQk9VTkRfRkxBRztcbiAgICAgIH1cbiAgICAgIC8vIENvbXBvc2UgcGFydGlhbCBhcmd1bWVudHMuXG4gICAgICB2YXIgdmFsdWUgPSBzb3VyY2VbM107XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgdmFyIHBhcnRpYWxzID0gZGF0YVszXTtcbiAgICAgICAgZGF0YVszXSA9IHBhcnRpYWxzID8gY29tcG9zZUFyZ3MocGFydGlhbHMsIHZhbHVlLCBzb3VyY2VbNF0pIDogdmFsdWU7XG4gICAgICAgIGRhdGFbNF0gPSBwYXJ0aWFscyA/IHJlcGxhY2VIb2xkZXJzKGRhdGFbM10sIFBMQUNFSE9MREVSKSA6IHNvdXJjZVs0XTtcbiAgICAgIH1cbiAgICAgIC8vIENvbXBvc2UgcGFydGlhbCByaWdodCBhcmd1bWVudHMuXG4gICAgICB2YWx1ZSA9IHNvdXJjZVs1XTtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBwYXJ0aWFscyA9IGRhdGFbNV07XG4gICAgICAgIGRhdGFbNV0gPSBwYXJ0aWFscyA/IGNvbXBvc2VBcmdzUmlnaHQocGFydGlhbHMsIHZhbHVlLCBzb3VyY2VbNl0pIDogdmFsdWU7XG4gICAgICAgIGRhdGFbNl0gPSBwYXJ0aWFscyA/IHJlcGxhY2VIb2xkZXJzKGRhdGFbNV0sIFBMQUNFSE9MREVSKSA6IHNvdXJjZVs2XTtcbiAgICAgIH1cbiAgICAgIC8vIFVzZSBzb3VyY2UgYGFyZ1Bvc2AgaWYgYXZhaWxhYmxlLlxuICAgICAgdmFsdWUgPSBzb3VyY2VbN107XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgZGF0YVs3XSA9IHZhbHVlO1xuICAgICAgfVxuICAgICAgLy8gVXNlIHNvdXJjZSBgYXJ5YCBpZiBpdCdzIHNtYWxsZXIuXG4gICAgICBpZiAoc3JjQml0bWFzayAmIFdSQVBfQVJZX0ZMQUcpIHtcbiAgICAgICAgZGF0YVs4XSA9IGRhdGFbOF0gPT0gbnVsbCA/IHNvdXJjZVs4XSA6IG5hdGl2ZU1pbihkYXRhWzhdLCBzb3VyY2VbOF0pO1xuICAgICAgfVxuICAgICAgLy8gVXNlIHNvdXJjZSBgYXJpdHlgIGlmIG9uZSBpcyBub3QgcHJvdmlkZWQuXG4gICAgICBpZiAoZGF0YVs5XSA9PSBudWxsKSB7XG4gICAgICAgIGRhdGFbOV0gPSBzb3VyY2VbOV07XG4gICAgICB9XG4gICAgICAvLyBVc2Ugc291cmNlIGBmdW5jYCBhbmQgbWVyZ2UgYml0bWFza3MuXG4gICAgICBkYXRhWzBdID0gc291cmNlWzBdO1xuICAgICAgZGF0YVsxXSA9IG5ld0JpdG1hc2s7XG5cbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgbGlrZVxuICAgICAqIFtgT2JqZWN0LmtleXNgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3Qua2V5cylcbiAgICAgKiBleGNlcHQgdGhhdCBpdCBpbmNsdWRlcyBpbmhlcml0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0aWVzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBuYXRpdmVLZXlzSW4ob2JqZWN0KSB7XG4gICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICBpZiAob2JqZWN0ICE9IG51bGwpIHtcbiAgICAgICAgZm9yICh2YXIga2V5IGluIE9iamVjdChvYmplY3QpKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIHVzaW5nIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG9iamVjdFRvU3RyaW5nKHZhbHVlKSB7XG4gICAgICByZXR1cm4gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlUmVzdGAgd2hpY2ggdHJhbnNmb3JtcyB0aGUgcmVzdCBhcnJheS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PWZ1bmMubGVuZ3RoLTFdIFRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgcmVzdCBwYXJhbWV0ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNmb3JtIFRoZSByZXN0IGFycmF5IHRyYW5zZm9ybS5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBvdmVyUmVzdChmdW5jLCBzdGFydCwgdHJhbnNmb3JtKSB7XG4gICAgICBzdGFydCA9IG5hdGl2ZU1heChzdGFydCA9PT0gdW5kZWZpbmVkID8gKGZ1bmMubGVuZ3RoIC0gMSkgOiBzdGFydCwgMCk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzLFxuICAgICAgICAgICAgaW5kZXggPSAtMSxcbiAgICAgICAgICAgIGxlbmd0aCA9IG5hdGl2ZU1heChhcmdzLmxlbmd0aCAtIHN0YXJ0LCAwKSxcbiAgICAgICAgICAgIGFycmF5ID0gQXJyYXkobGVuZ3RoKTtcblxuICAgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgIGFycmF5W2luZGV4XSA9IGFyZ3Nbc3RhcnQgKyBpbmRleF07XG4gICAgICAgIH1cbiAgICAgICAgaW5kZXggPSAtMTtcbiAgICAgICAgdmFyIG90aGVyQXJncyA9IEFycmF5KHN0YXJ0ICsgMSk7XG4gICAgICAgIHdoaWxlICgrK2luZGV4IDwgc3RhcnQpIHtcbiAgICAgICAgICBvdGhlckFyZ3NbaW5kZXhdID0gYXJnc1tpbmRleF07XG4gICAgICAgIH1cbiAgICAgICAgb3RoZXJBcmdzW3N0YXJ0XSA9IHRyYW5zZm9ybShhcnJheSk7XG4gICAgICAgIHJldHVybiBhcHBseShmdW5jLCB0aGlzLCBvdGhlckFyZ3MpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBwYXJlbnQgdmFsdWUgYXQgYHBhdGhgIG9mIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtBcnJheX0gcGF0aCBUaGUgcGF0aCB0byBnZXQgdGhlIHBhcmVudCB2YWx1ZSBvZi5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcGFyZW50IHZhbHVlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHBhcmVudChvYmplY3QsIHBhdGgpIHtcbiAgICAgIHJldHVybiBwYXRoLmxlbmd0aCA8IDIgPyBvYmplY3QgOiBiYXNlR2V0KG9iamVjdCwgYmFzZVNsaWNlKHBhdGgsIDAsIC0xKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVvcmRlciBgYXJyYXlgIGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWVkIGluZGV4ZXMgd2hlcmUgdGhlIGVsZW1lbnQgYXRcbiAgICAgKiB0aGUgZmlyc3QgaW5kZXggaXMgYXNzaWduZWQgYXMgdGhlIGZpcnN0IGVsZW1lbnQsIHRoZSBlbGVtZW50IGF0XG4gICAgICogdGhlIHNlY29uZCBpbmRleCBpcyBhc3NpZ25lZCBhcyB0aGUgc2Vjb25kIGVsZW1lbnQsIGFuZCBzbyBvbi5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHJlb3JkZXIuXG4gICAgICogQHBhcmFtIHtBcnJheX0gaW5kZXhlcyBUaGUgYXJyYW5nZWQgYXJyYXkgaW5kZXhlcy5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiByZW9yZGVyKGFycmF5LCBpbmRleGVzKSB7XG4gICAgICB2YXIgYXJyTGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICAgIGxlbmd0aCA9IG5hdGl2ZU1pbihpbmRleGVzLmxlbmd0aCwgYXJyTGVuZ3RoKSxcbiAgICAgICAgICBvbGRBcnJheSA9IGNvcHlBcnJheShhcnJheSk7XG5cbiAgICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgICB2YXIgaW5kZXggPSBpbmRleGVzW2xlbmd0aF07XG4gICAgICAgIGFycmF5W2xlbmd0aF0gPSBpc0luZGV4KGluZGV4LCBhcnJMZW5ndGgpID8gb2xkQXJyYXlbaW5kZXhdIDogdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFycmF5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHZhbHVlIGF0IGBrZXlgLCB1bmxlc3MgYGtleWAgaXMgXCJfX3Byb3RvX19cIiBvciBcImNvbnN0cnVjdG9yXCIuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gc2FmZUdldChvYmplY3QsIGtleSkge1xuICAgICAgaWYgKGtleSA9PT0gJ2NvbnN0cnVjdG9yJyAmJiB0eXBlb2Ygb2JqZWN0W2tleV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoa2V5ID09ICdfX3Byb3RvX18nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9iamVjdFtrZXldO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgbWV0YWRhdGEgZm9yIGBmdW5jYC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBJZiB0aGlzIGZ1bmN0aW9uIGJlY29tZXMgaG90LCBpLmUuIGlzIGludm9rZWQgYSBsb3QgaW4gYSBzaG9ydFxuICAgICAqIHBlcmlvZCBvZiB0aW1lLCBpdCB3aWxsIHRyaXAgaXRzIGJyZWFrZXIgYW5kIHRyYW5zaXRpb24gdG8gYW4gaWRlbnRpdHlcbiAgICAgKiBmdW5jdGlvbiB0byBhdm9pZCBnYXJiYWdlIGNvbGxlY3Rpb24gcGF1c2VzIGluIFY4LiBTZWVcbiAgICAgKiBbVjggaXNzdWUgMjA3MF0oaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MjA3MClcbiAgICAgKiBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhc3NvY2lhdGUgbWV0YWRhdGEgd2l0aC5cbiAgICAgKiBAcGFyYW0geyp9IGRhdGEgVGhlIG1ldGFkYXRhLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXG4gICAgICovXG4gICAgdmFyIHNldERhdGEgPSBzaG9ydE91dChiYXNlU2V0RGF0YSk7XG5cbiAgICAvKipcbiAgICAgKiBBIHNpbXBsZSB3cmFwcGVyIGFyb3VuZCB0aGUgZ2xvYmFsIFtgc2V0VGltZW91dGBdKGh0dHBzOi8vbWRuLmlvL3NldFRpbWVvdXQpLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBkZWxheS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gd2FpdCBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byBkZWxheSBpbnZvY2F0aW9uLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ8T2JqZWN0fSBSZXR1cm5zIHRoZSB0aW1lciBpZCBvciB0aW1lb3V0IG9iamVjdC5cbiAgICAgKi9cbiAgICB2YXIgc2V0VGltZW91dCA9IGN0eFNldFRpbWVvdXQgfHwgZnVuY3Rpb24oZnVuYywgd2FpdCkge1xuICAgICAgcmV0dXJuIHJvb3Quc2V0VGltZW91dChmdW5jLCB3YWl0KTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgYHRvU3RyaW5nYCBtZXRob2Qgb2YgYGZ1bmNgIHRvIHJldHVybiBgc3RyaW5nYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gbW9kaWZ5LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHN0cmluZyBUaGUgYHRvU3RyaW5nYCByZXN1bHQuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBmdW5jYC5cbiAgICAgKi9cbiAgICB2YXIgc2V0VG9TdHJpbmcgPSBzaG9ydE91dChiYXNlU2V0VG9TdHJpbmcpO1xuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgYHRvU3RyaW5nYCBtZXRob2Qgb2YgYHdyYXBwZXJgIHRvIG1pbWljIHRoZSBzb3VyY2Ugb2YgYHJlZmVyZW5jZWBcbiAgICAgKiB3aXRoIHdyYXBwZXIgZGV0YWlscyBpbiBhIGNvbW1lbnQgYXQgdGhlIHRvcCBvZiB0aGUgc291cmNlIGJvZHkuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHdyYXBwZXIgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWZlcmVuY2UgVGhlIHJlZmVyZW5jZSBmdW5jdGlvbi5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBjcmVhdGVXcmFwYCBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgd3JhcHBlcmAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gc2V0V3JhcFRvU3RyaW5nKHdyYXBwZXIsIHJlZmVyZW5jZSwgYml0bWFzaykge1xuICAgICAgdmFyIHNvdXJjZSA9IChyZWZlcmVuY2UgKyAnJyk7XG4gICAgICByZXR1cm4gc2V0VG9TdHJpbmcod3JhcHBlciwgaW5zZXJ0V3JhcERldGFpbHMoc291cmNlLCB1cGRhdGVXcmFwRGV0YWlscyhnZXRXcmFwRGV0YWlscyhzb3VyY2UpLCBiaXRtYXNrKSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0J2xsIHNob3J0IG91dCBhbmQgaW52b2tlIGBpZGVudGl0eWAgaW5zdGVhZFxuICAgICAqIG9mIGBmdW5jYCB3aGVuIGl0J3MgY2FsbGVkIGBIT1RfQ09VTlRgIG9yIG1vcmUgdGltZXMgaW4gYEhPVF9TUEFOYFxuICAgICAqIG1pbGxpc2Vjb25kcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcmVzdHJpY3QuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc2hvcnRhYmxlIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNob3J0T3V0KGZ1bmMpIHtcbiAgICAgIHZhciBjb3VudCA9IDAsXG4gICAgICAgICAgbGFzdENhbGxlZCA9IDA7XG5cbiAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHN0YW1wID0gbmF0aXZlTm93KCksXG4gICAgICAgICAgICByZW1haW5pbmcgPSBIT1RfU1BBTiAtIChzdGFtcCAtIGxhc3RDYWxsZWQpO1xuXG4gICAgICAgIGxhc3RDYWxsZWQgPSBzdGFtcDtcbiAgICAgICAgaWYgKHJlbWFpbmluZyA+IDApIHtcbiAgICAgICAgICBpZiAoKytjb3VudCA+PSBIT1RfQ09VTlQpIHtcbiAgICAgICAgICAgIHJldHVybiBhcmd1bWVudHNbMF07XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvdW50ID0gMDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZnVuYy5hcHBseSh1bmRlZmluZWQsIGFyZ3VtZW50cyk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5zaHVmZmxlYCB3aGljaCBtdXRhdGVzIGFuZCBzZXRzIHRoZSBzaXplIG9mIGBhcnJheWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBzaHVmZmxlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc2l6ZT1hcnJheS5sZW5ndGhdIFRoZSBzaXplIG9mIGBhcnJheWAuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gc2h1ZmZsZVNlbGYoYXJyYXksIHNpemUpIHtcbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgICBsYXN0SW5kZXggPSBsZW5ndGggLSAxO1xuXG4gICAgICBzaXplID0gc2l6ZSA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogc2l6ZTtcbiAgICAgIHdoaWxlICgrK2luZGV4IDwgc2l6ZSkge1xuICAgICAgICB2YXIgcmFuZCA9IGJhc2VSYW5kb20oaW5kZXgsIGxhc3RJbmRleCksXG4gICAgICAgICAgICB2YWx1ZSA9IGFycmF5W3JhbmRdO1xuXG4gICAgICAgIGFycmF5W3JhbmRdID0gYXJyYXlbaW5kZXhdO1xuICAgICAgICBhcnJheVtpbmRleF0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIGFycmF5Lmxlbmd0aCA9IHNpemU7XG4gICAgICByZXR1cm4gYXJyYXk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYHN0cmluZ2AgdG8gYSBwcm9wZXJ0eSBwYXRoIGFycmF5LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHByb3BlcnR5IHBhdGggYXJyYXkuXG4gICAgICovXG4gICAgdmFyIHN0cmluZ1RvUGF0aCA9IG1lbW9pemVDYXBwZWQoZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICBpZiAoc3RyaW5nLmNoYXJDb2RlQXQoMCkgPT09IDQ2IC8qIC4gKi8pIHtcbiAgICAgICAgcmVzdWx0LnB1c2goJycpO1xuICAgICAgfVxuICAgICAgc3RyaW5nLnJlcGxhY2UocmVQcm9wTmFtZSwgZnVuY3Rpb24obWF0Y2gsIG51bWJlciwgcXVvdGUsIHN1YlN0cmluZykge1xuICAgICAgICByZXN1bHQucHVzaChxdW90ZSA/IHN1YlN0cmluZy5yZXBsYWNlKHJlRXNjYXBlQ2hhciwgJyQxJykgOiAobnVtYmVyIHx8IG1hdGNoKSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIGtleSBpZiBpdCdzIG5vdCBhIHN0cmluZyBvciBzeW1ib2wuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gICAgICogQHJldHVybnMge3N0cmluZ3xzeW1ib2x9IFJldHVybnMgdGhlIGtleS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0b0tleSh2YWx1ZSkge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJyB8fCBpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgICAgdmFyIHJlc3VsdCA9ICh2YWx1ZSArICcnKTtcbiAgICAgIHJldHVybiAocmVzdWx0ID09ICcwJyAmJiAoMSAvIHZhbHVlKSA9PSAtSU5GSU5JVFkpID8gJy0wJyA6IHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBgZnVuY2AgdG8gaXRzIHNvdXJjZSBjb2RlLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjb252ZXJ0LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHNvdXJjZSBjb2RlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRvU291cmNlKGZ1bmMpIHtcbiAgICAgIGlmIChmdW5jICE9IG51bGwpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gZnVuY1RvU3RyaW5nLmNhbGwoZnVuYyk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIChmdW5jICsgJycpO1xuICAgICAgICB9IGNhdGNoIChlKSB7fVxuICAgICAgfVxuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgd3JhcHBlciBgZGV0YWlsc2AgYmFzZWQgb24gYGJpdG1hc2tgIGZsYWdzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IGRldGFpbHMgVGhlIGRldGFpbHMgdG8gbW9kaWZ5LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGNyZWF0ZVdyYXBgIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBkZXRhaWxzYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB1cGRhdGVXcmFwRGV0YWlscyhkZXRhaWxzLCBiaXRtYXNrKSB7XG4gICAgICBhcnJheUVhY2god3JhcEZsYWdzLCBmdW5jdGlvbihwYWlyKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9ICdfLicgKyBwYWlyWzBdO1xuICAgICAgICBpZiAoKGJpdG1hc2sgJiBwYWlyWzFdKSAmJiAhYXJyYXlJbmNsdWRlcyhkZXRhaWxzLCB2YWx1ZSkpIHtcbiAgICAgICAgICBkZXRhaWxzLnB1c2godmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBkZXRhaWxzLnNvcnQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgY2xvbmUgb2YgYHdyYXBwZXJgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gd3JhcHBlciBUaGUgd3JhcHBlciB0byBjbG9uZS5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjbG9uZWQgd3JhcHBlci5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB3cmFwcGVyQ2xvbmUod3JhcHBlcikge1xuICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBMYXp5V3JhcHBlcikge1xuICAgICAgICByZXR1cm4gd3JhcHBlci5jbG9uZSgpO1xuICAgICAgfVxuICAgICAgdmFyIHJlc3VsdCA9IG5ldyBMb2Rhc2hXcmFwcGVyKHdyYXBwZXIuX193cmFwcGVkX18sIHdyYXBwZXIuX19jaGFpbl9fKTtcbiAgICAgIHJlc3VsdC5fX2FjdGlvbnNfXyA9IGNvcHlBcnJheSh3cmFwcGVyLl9fYWN0aW9uc19fKTtcbiAgICAgIHJlc3VsdC5fX2luZGV4X18gID0gd3JhcHBlci5fX2luZGV4X187XG4gICAgICByZXN1bHQuX192YWx1ZXNfXyA9IHdyYXBwZXIuX192YWx1ZXNfXztcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiBlbGVtZW50cyBzcGxpdCBpbnRvIGdyb3VwcyB0aGUgbGVuZ3RoIG9mIGBzaXplYC5cbiAgICAgKiBJZiBgYXJyYXlgIGNhbid0IGJlIHNwbGl0IGV2ZW5seSwgdGhlIGZpbmFsIGNodW5rIHdpbGwgYmUgdGhlIHJlbWFpbmluZ1xuICAgICAqIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHByb2Nlc3MuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtzaXplPTFdIFRoZSBsZW5ndGggb2YgZWFjaCBjaHVua1xuICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgY2h1bmtzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmNodW5rKFsnYScsICdiJywgJ2MnLCAnZCddLCAyKTtcbiAgICAgKiAvLyA9PiBbWydhJywgJ2InXSwgWydjJywgJ2QnXV1cbiAgICAgKlxuICAgICAqIF8uY2h1bmsoWydhJywgJ2InLCAnYycsICdkJ10sIDMpO1xuICAgICAqIC8vID0+IFtbJ2EnLCAnYicsICdjJ10sIFsnZCddXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNodW5rKGFycmF5LCBzaXplLCBndWFyZCkge1xuICAgICAgaWYgKChndWFyZCA/IGlzSXRlcmF0ZWVDYWxsKGFycmF5LCBzaXplLCBndWFyZCkgOiBzaXplID09PSB1bmRlZmluZWQpKSB7XG4gICAgICAgIHNpemUgPSAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2l6ZSA9IG5hdGl2ZU1heCh0b0ludGVnZXIoc2l6ZSksIDApO1xuICAgICAgfVxuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICAgICAgaWYgKCFsZW5ndGggfHwgc2l6ZSA8IDEpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgdmFyIGluZGV4ID0gMCxcbiAgICAgICAgICByZXNJbmRleCA9IDAsXG4gICAgICAgICAgcmVzdWx0ID0gQXJyYXkobmF0aXZlQ2VpbChsZW5ndGggLyBzaXplKSk7XG5cbiAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICByZXN1bHRbcmVzSW5kZXgrK10gPSBiYXNlU2xpY2UoYXJyYXksIGluZGV4LCAoaW5kZXggKz0gc2l6ZSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IHdpdGggYWxsIGZhbHNleSB2YWx1ZXMgcmVtb3ZlZC4gVGhlIHZhbHVlcyBgZmFsc2VgLCBgbnVsbGAsXG4gICAgICogYDBgLCBgXCJcImAsIGB1bmRlZmluZWRgLCBhbmQgYE5hTmAgYXJlIGZhbHNleS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBjb21wYWN0LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGZpbHRlcmVkIHZhbHVlcy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5jb21wYWN0KFswLCAxLCBmYWxzZSwgMiwgJycsIDNdKTtcbiAgICAgKiAvLyA9PiBbMSwgMiwgM11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjb21wYWN0KGFycmF5KSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgICByZXNJbmRleCA9IDAsXG4gICAgICAgICAgcmVzdWx0ID0gW107XG5cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XTtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgcmVzdWx0W3Jlc0luZGV4KytdID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBhcnJheSBjb25jYXRlbmF0aW5nIGBhcnJheWAgd2l0aCBhbnkgYWRkaXRpb25hbCBhcnJheXNcbiAgICAgKiBhbmQvb3IgdmFsdWVzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGNvbmNhdGVuYXRlLlxuICAgICAqIEBwYXJhbSB7Li4uKn0gW3ZhbHVlc10gVGhlIHZhbHVlcyB0byBjb25jYXRlbmF0ZS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBjb25jYXRlbmF0ZWQgYXJyYXkuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBhcnJheSA9IFsxXTtcbiAgICAgKiB2YXIgb3RoZXIgPSBfLmNvbmNhdChhcnJheSwgMiwgWzNdLCBbWzRdXSk7XG4gICAgICpcbiAgICAgKiBjb25zb2xlLmxvZyhvdGhlcik7XG4gICAgICogLy8gPT4gWzEsIDIsIDMsIFs0XV1cbiAgICAgKlxuICAgICAqIGNvbnNvbGUubG9nKGFycmF5KTtcbiAgICAgKiAvLyA9PiBbMV1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjb25jYXQoKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIHZhciBhcmdzID0gQXJyYXkobGVuZ3RoIC0gMSksXG4gICAgICAgICAgYXJyYXkgPSBhcmd1bWVudHNbMF0sXG4gICAgICAgICAgaW5kZXggPSBsZW5ndGg7XG5cbiAgICAgIHdoaWxlIChpbmRleC0tKSB7XG4gICAgICAgIGFyZ3NbaW5kZXggLSAxXSA9IGFyZ3VtZW50c1tpbmRleF07XG4gICAgICB9XG4gICAgICByZXR1cm4gYXJyYXlQdXNoKGlzQXJyYXkoYXJyYXkpID8gY29weUFycmF5KGFycmF5KSA6IFthcnJheV0sIGJhc2VGbGF0dGVuKGFyZ3MsIDEpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIGBhcnJheWAgdmFsdWVzIG5vdCBpbmNsdWRlZCBpbiB0aGUgb3RoZXIgZ2l2ZW4gYXJyYXlzXG4gICAgICogdXNpbmcgW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAgICAgKiBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMuIFRoZSBvcmRlciBhbmQgcmVmZXJlbmNlcyBvZiByZXN1bHQgdmFsdWVzIGFyZVxuICAgICAqIGRldGVybWluZWQgYnkgdGhlIGZpcnN0IGFycmF5LlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFVubGlrZSBgXy5wdWxsQWxsYCwgdGhpcyBtZXRob2QgcmV0dXJucyBhIG5ldyBhcnJheS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7Li4uQXJyYXl9IFt2YWx1ZXNdIFRoZSB2YWx1ZXMgdG8gZXhjbHVkZS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBmaWx0ZXJlZCB2YWx1ZXMuXG4gICAgICogQHNlZSBfLndpdGhvdXQsIF8ueG9yXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZGlmZmVyZW5jZShbMiwgMV0sIFsyLCAzXSk7XG4gICAgICogLy8gPT4gWzFdXG4gICAgICovXG4gICAgdmFyIGRpZmZlcmVuY2UgPSBiYXNlUmVzdChmdW5jdGlvbihhcnJheSwgdmFsdWVzKSB7XG4gICAgICByZXR1cm4gaXNBcnJheUxpa2VPYmplY3QoYXJyYXkpXG4gICAgICAgID8gYmFzZURpZmZlcmVuY2UoYXJyYXksIGJhc2VGbGF0dGVuKHZhbHVlcywgMSwgaXNBcnJheUxpa2VPYmplY3QsIHRydWUpKVxuICAgICAgICA6IFtdO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5kaWZmZXJlbmNlYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBpdGVyYXRlZWAgd2hpY2hcbiAgICAgKiBpcyBpbnZva2VkIGZvciBlYWNoIGVsZW1lbnQgb2YgYGFycmF5YCBhbmQgYHZhbHVlc2AgdG8gZ2VuZXJhdGUgdGhlIGNyaXRlcmlvblxuICAgICAqIGJ5IHdoaWNoIHRoZXkncmUgY29tcGFyZWQuIFRoZSBvcmRlciBhbmQgcmVmZXJlbmNlcyBvZiByZXN1bHQgdmFsdWVzIGFyZVxuICAgICAqIGRldGVybWluZWQgYnkgdGhlIGZpcnN0IGFycmF5LiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDpcbiAgICAgKiAodmFsdWUpLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFVubGlrZSBgXy5wdWxsQWxsQnlgLCB0aGlzIG1ldGhvZCByZXR1cm5zIGEgbmV3IGFycmF5LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHsuLi5BcnJheX0gW3ZhbHVlc10gVGhlIHZhbHVlcyB0byBleGNsdWRlLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBmaWx0ZXJlZCB2YWx1ZXMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZGlmZmVyZW5jZUJ5KFsyLjEsIDEuMl0sIFsyLjMsIDMuNF0sIE1hdGguZmxvb3IpO1xuICAgICAqIC8vID0+IFsxLjJdXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmRpZmZlcmVuY2VCeShbeyAneCc6IDIgfSwgeyAneCc6IDEgfV0sIFt7ICd4JzogMSB9XSwgJ3gnKTtcbiAgICAgKiAvLyA9PiBbeyAneCc6IDIgfV1cbiAgICAgKi9cbiAgICB2YXIgZGlmZmVyZW5jZUJ5ID0gYmFzZVJlc3QoZnVuY3Rpb24oYXJyYXksIHZhbHVlcykge1xuICAgICAgdmFyIGl0ZXJhdGVlID0gbGFzdCh2YWx1ZXMpO1xuICAgICAgaWYgKGlzQXJyYXlMaWtlT2JqZWN0KGl0ZXJhdGVlKSkge1xuICAgICAgICBpdGVyYXRlZSA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpc0FycmF5TGlrZU9iamVjdChhcnJheSlcbiAgICAgICAgPyBiYXNlRGlmZmVyZW5jZShhcnJheSwgYmFzZUZsYXR0ZW4odmFsdWVzLCAxLCBpc0FycmF5TGlrZU9iamVjdCwgdHJ1ZSksIGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCAyKSlcbiAgICAgICAgOiBbXTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZGlmZmVyZW5jZWAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgY29tcGFyYXRvcmBcbiAgICAgKiB3aGljaCBpcyBpbnZva2VkIHRvIGNvbXBhcmUgZWxlbWVudHMgb2YgYGFycmF5YCB0byBgdmFsdWVzYC4gVGhlIG9yZGVyIGFuZFxuICAgICAqIHJlZmVyZW5jZXMgb2YgcmVzdWx0IHZhbHVlcyBhcmUgZGV0ZXJtaW5lZCBieSB0aGUgZmlyc3QgYXJyYXkuIFRoZSBjb21wYXJhdG9yXG4gICAgICogaXMgaW52b2tlZCB3aXRoIHR3byBhcmd1bWVudHM6IChhcnJWYWwsIG90aFZhbCkuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVW5saWtlIGBfLnB1bGxBbGxXaXRoYCwgdGhpcyBtZXRob2QgcmV0dXJucyBhIG5ldyBhcnJheS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7Li4uQXJyYXl9IFt2YWx1ZXNdIFRoZSB2YWx1ZXMgdG8gZXhjbHVkZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY29tcGFyYXRvcl0gVGhlIGNvbXBhcmF0b3IgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBmaWx0ZXJlZCB2YWx1ZXMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3RzID0gW3sgJ3gnOiAxLCAneSc6IDIgfSwgeyAneCc6IDIsICd5JzogMSB9XTtcbiAgICAgKlxuICAgICAqIF8uZGlmZmVyZW5jZVdpdGgob2JqZWN0cywgW3sgJ3gnOiAxLCAneSc6IDIgfV0sIF8uaXNFcXVhbCk7XG4gICAgICogLy8gPT4gW3sgJ3gnOiAyLCAneSc6IDEgfV1cbiAgICAgKi9cbiAgICB2YXIgZGlmZmVyZW5jZVdpdGggPSBiYXNlUmVzdChmdW5jdGlvbihhcnJheSwgdmFsdWVzKSB7XG4gICAgICB2YXIgY29tcGFyYXRvciA9IGxhc3QodmFsdWVzKTtcbiAgICAgIGlmIChpc0FycmF5TGlrZU9iamVjdChjb21wYXJhdG9yKSkge1xuICAgICAgICBjb21wYXJhdG9yID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGlzQXJyYXlMaWtlT2JqZWN0KGFycmF5KVxuICAgICAgICA/IGJhc2VEaWZmZXJlbmNlKGFycmF5LCBiYXNlRmxhdHRlbih2YWx1ZXMsIDEsIGlzQXJyYXlMaWtlT2JqZWN0LCB0cnVlKSwgdW5kZWZpbmVkLCBjb21wYXJhdG9yKVxuICAgICAgICA6IFtdO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHNsaWNlIG9mIGBhcnJheWAgd2l0aCBgbmAgZWxlbWVudHMgZHJvcHBlZCBmcm9tIHRoZSBiZWdpbm5pbmcuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC41LjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtuPTFdIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgdG8gZHJvcC5cbiAgICAgKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5tYXBgLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgc2xpY2Ugb2YgYGFycmF5YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5kcm9wKFsxLCAyLCAzXSk7XG4gICAgICogLy8gPT4gWzIsIDNdXG4gICAgICpcbiAgICAgKiBfLmRyb3AoWzEsIDIsIDNdLCAyKTtcbiAgICAgKiAvLyA9PiBbM11cbiAgICAgKlxuICAgICAqIF8uZHJvcChbMSwgMiwgM10sIDUpO1xuICAgICAqIC8vID0+IFtdXG4gICAgICpcbiAgICAgKiBfLmRyb3AoWzEsIDIsIDNdLCAwKTtcbiAgICAgKiAvLyA9PiBbMSwgMiwgM11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBkcm9wKGFycmF5LCBuLCBndWFyZCkge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICAgICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgbiA9IChndWFyZCB8fCBuID09PSB1bmRlZmluZWQpID8gMSA6IHRvSW50ZWdlcihuKTtcbiAgICAgIHJldHVybiBiYXNlU2xpY2UoYXJyYXksIG4gPCAwID8gMCA6IG4sIGxlbmd0aCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHNsaWNlIG9mIGBhcnJheWAgd2l0aCBgbmAgZWxlbWVudHMgZHJvcHBlZCBmcm9tIHRoZSBlbmQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtuPTFdIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgdG8gZHJvcC5cbiAgICAgKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5tYXBgLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgc2xpY2Ugb2YgYGFycmF5YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5kcm9wUmlnaHQoWzEsIDIsIDNdKTtcbiAgICAgKiAvLyA9PiBbMSwgMl1cbiAgICAgKlxuICAgICAqIF8uZHJvcFJpZ2h0KFsxLCAyLCAzXSwgMik7XG4gICAgICogLy8gPT4gWzFdXG4gICAgICpcbiAgICAgKiBfLmRyb3BSaWdodChbMSwgMiwgM10sIDUpO1xuICAgICAqIC8vID0+IFtdXG4gICAgICpcbiAgICAgKiBfLmRyb3BSaWdodChbMSwgMiwgM10sIDApO1xuICAgICAqIC8vID0+IFsxLCAyLCAzXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGRyb3BSaWdodChhcnJheSwgbiwgZ3VhcmQpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIG4gPSAoZ3VhcmQgfHwgbiA9PT0gdW5kZWZpbmVkKSA/IDEgOiB0b0ludGVnZXIobik7XG4gICAgICBuID0gbGVuZ3RoIC0gbjtcbiAgICAgIHJldHVybiBiYXNlU2xpY2UoYXJyYXksIDAsIG4gPCAwID8gMCA6IG4pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBzbGljZSBvZiBgYXJyYXlgIGV4Y2x1ZGluZyBlbGVtZW50cyBkcm9wcGVkIGZyb20gdGhlIGVuZC5cbiAgICAgKiBFbGVtZW50cyBhcmUgZHJvcHBlZCB1bnRpbCBgcHJlZGljYXRlYCByZXR1cm5zIGZhbHNleS4gVGhlIHByZWRpY2F0ZSBpc1xuICAgICAqIGludm9rZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6ICh2YWx1ZSwgaW5kZXgsIGFycmF5KS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzbGljZSBvZiBgYXJyYXlgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgdXNlcnMgPSBbXG4gICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScsICAnYWN0aXZlJzogdHJ1ZSB9LFxuICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAgJ2FjdGl2ZSc6IGZhbHNlIH0sXG4gICAgICogICB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWN0aXZlJzogZmFsc2UgfVxuICAgICAqIF07XG4gICAgICpcbiAgICAgKiBfLmRyb3BSaWdodFdoaWxlKHVzZXJzLCBmdW5jdGlvbihvKSB7IHJldHVybiAhby5hY3RpdmU7IH0pO1xuICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFsnYmFybmV5J11cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5kcm9wUmlnaHRXaGlsZSh1c2VycywgeyAndXNlcic6ICdwZWJibGVzJywgJ2FjdGl2ZSc6IGZhbHNlIH0pO1xuICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFsnYmFybmV5JywgJ2ZyZWQnXVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZHJvcFJpZ2h0V2hpbGUodXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ2Jhcm5leSddXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmRyb3BSaWdodFdoaWxlKHVzZXJzLCAnYWN0aXZlJyk7XG4gICAgICogLy8gPT4gb2JqZWN0cyBmb3IgWydiYXJuZXknLCAnZnJlZCcsICdwZWJibGVzJ11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBkcm9wUmlnaHRXaGlsZShhcnJheSwgcHJlZGljYXRlKSB7XG4gICAgICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aClcbiAgICAgICAgPyBiYXNlV2hpbGUoYXJyYXksIGdldEl0ZXJhdGVlKHByZWRpY2F0ZSwgMyksIHRydWUsIHRydWUpXG4gICAgICAgIDogW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHNsaWNlIG9mIGBhcnJheWAgZXhjbHVkaW5nIGVsZW1lbnRzIGRyb3BwZWQgZnJvbSB0aGUgYmVnaW5uaW5nLlxuICAgICAqIEVsZW1lbnRzIGFyZSBkcm9wcGVkIHVudGlsIGBwcmVkaWNhdGVgIHJldHVybnMgZmFsc2V5LiBUaGUgcHJlZGljYXRlIGlzXG4gICAgICogaW52b2tlZCB3aXRoIHRocmVlIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleCwgYXJyYXkpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHNsaWNlIG9mIGBhcnJheWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciB1c2VycyA9IFtcbiAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgICdhY3RpdmUnOiBmYWxzZSB9LFxuICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAgJ2FjdGl2ZSc6IGZhbHNlIH0sXG4gICAgICogICB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWN0aXZlJzogdHJ1ZSB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIF8uZHJvcFdoaWxlKHVzZXJzLCBmdW5jdGlvbihvKSB7IHJldHVybiAhby5hY3RpdmU7IH0pO1xuICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFsncGViYmxlcyddXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc2AgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZHJvcFdoaWxlKHVzZXJzLCB7ICd1c2VyJzogJ2Jhcm5leScsICdhY3RpdmUnOiBmYWxzZSB9KTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ2ZyZWQnLCAncGViYmxlcyddXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5kcm9wV2hpbGUodXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ3BlYmJsZXMnXVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5kcm9wV2hpbGUodXNlcnMsICdhY3RpdmUnKTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ2Jhcm5leScsICdmcmVkJywgJ3BlYmJsZXMnXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGRyb3BXaGlsZShhcnJheSwgcHJlZGljYXRlKSB7XG4gICAgICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aClcbiAgICAgICAgPyBiYXNlV2hpbGUoYXJyYXksIGdldEl0ZXJhdGVlKHByZWRpY2F0ZSwgMyksIHRydWUpXG4gICAgICAgIDogW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmlsbHMgZWxlbWVudHMgb2YgYGFycmF5YCB3aXRoIGB2YWx1ZWAgZnJvbSBgc3RhcnRgIHVwIHRvLCBidXQgbm90XG4gICAgICogaW5jbHVkaW5nLCBgZW5kYC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBhcnJheWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4yLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gZmlsbC5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBmaWxsIGBhcnJheWAgd2l0aC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PTBdIFRoZSBzdGFydCBwb3NpdGlvbi5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2VuZD1hcnJheS5sZW5ndGhdIFRoZSBlbmQgcG9zaXRpb24uXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBhcnJheSA9IFsxLCAyLCAzXTtcbiAgICAgKlxuICAgICAqIF8uZmlsbChhcnJheSwgJ2EnKTtcbiAgICAgKiBjb25zb2xlLmxvZyhhcnJheSk7XG4gICAgICogLy8gPT4gWydhJywgJ2EnLCAnYSddXG4gICAgICpcbiAgICAgKiBfLmZpbGwoQXJyYXkoMyksIDIpO1xuICAgICAqIC8vID0+IFsyLCAyLCAyXVxuICAgICAqXG4gICAgICogXy5maWxsKFs0LCA2LCA4LCAxMF0sICcqJywgMSwgMyk7XG4gICAgICogLy8gPT4gWzQsICcqJywgJyonLCAxMF1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmaWxsKGFycmF5LCB2YWx1ZSwgc3RhcnQsIGVuZCkge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICAgICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgaWYgKHN0YXJ0ICYmIHR5cGVvZiBzdGFydCAhPSAnbnVtYmVyJyAmJiBpc0l0ZXJhdGVlQ2FsbChhcnJheSwgdmFsdWUsIHN0YXJ0KSkge1xuICAgICAgICBzdGFydCA9IDA7XG4gICAgICAgIGVuZCA9IGxlbmd0aDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBiYXNlRmlsbChhcnJheSwgdmFsdWUsIHN0YXJ0LCBlbmQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZmluZGAgZXhjZXB0IHRoYXQgaXQgcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0XG4gICAgICogZWxlbWVudCBgcHJlZGljYXRlYCByZXR1cm5zIHRydXRoeSBmb3IgaW5zdGVhZCBvZiB0aGUgZWxlbWVudCBpdHNlbGYuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMS4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtmcm9tSW5kZXg9MF0gVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBmb3VuZCBlbGVtZW50LCBlbHNlIGAtMWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciB1c2VycyA9IFtcbiAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgICdhY3RpdmUnOiBmYWxzZSB9LFxuICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAgJ2FjdGl2ZSc6IGZhbHNlIH0sXG4gICAgICogICB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWN0aXZlJzogdHJ1ZSB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIF8uZmluZEluZGV4KHVzZXJzLCBmdW5jdGlvbihvKSB7IHJldHVybiBvLnVzZXIgPT0gJ2Jhcm5leSc7IH0pO1xuICAgICAqIC8vID0+IDBcbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5maW5kSW5kZXgodXNlcnMsIHsgJ3VzZXInOiAnZnJlZCcsICdhY3RpdmUnOiBmYWxzZSB9KTtcbiAgICAgKiAvLyA9PiAxXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5maW5kSW5kZXgodXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTtcbiAgICAgKiAvLyA9PiAwXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmZpbmRJbmRleCh1c2VycywgJ2FjdGl2ZScpO1xuICAgICAqIC8vID0+IDJcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmaW5kSW5kZXgoYXJyYXksIHByZWRpY2F0ZSwgZnJvbUluZGV4KSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gICAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9XG4gICAgICB2YXIgaW5kZXggPSBmcm9tSW5kZXggPT0gbnVsbCA/IDAgOiB0b0ludGVnZXIoZnJvbUluZGV4KTtcbiAgICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgICAgaW5kZXggPSBuYXRpdmVNYXgobGVuZ3RoICsgaW5kZXgsIDApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJhc2VGaW5kSW5kZXgoYXJyYXksIGdldEl0ZXJhdGVlKHByZWRpY2F0ZSwgMyksIGluZGV4KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmZpbmRJbmRleGAgZXhjZXB0IHRoYXQgaXQgaXRlcmF0ZXMgb3ZlciBlbGVtZW50c1xuICAgICAqIG9mIGBjb2xsZWN0aW9uYCBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMi4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtmcm9tSW5kZXg9YXJyYXkubGVuZ3RoLTFdIFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgZm91bmQgZWxlbWVudCwgZWxzZSBgLTFgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgdXNlcnMgPSBbXG4gICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScsICAnYWN0aXZlJzogdHJ1ZSB9LFxuICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAgJ2FjdGl2ZSc6IGZhbHNlIH0sXG4gICAgICogICB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWN0aXZlJzogZmFsc2UgfVxuICAgICAqIF07XG4gICAgICpcbiAgICAgKiBfLmZpbmRMYXN0SW5kZXgodXNlcnMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuIG8udXNlciA9PSAncGViYmxlcyc7IH0pO1xuICAgICAqIC8vID0+IDJcbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5maW5kTGFzdEluZGV4KHVzZXJzLCB7ICd1c2VyJzogJ2Jhcm5leScsICdhY3RpdmUnOiB0cnVlIH0pO1xuICAgICAqIC8vID0+IDBcbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzUHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmZpbmRMYXN0SW5kZXgodXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTtcbiAgICAgKiAvLyA9PiAyXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmZpbmRMYXN0SW5kZXgodXNlcnMsICdhY3RpdmUnKTtcbiAgICAgKiAvLyA9PiAwXG4gICAgICovXG4gICAgZnVuY3Rpb24gZmluZExhc3RJbmRleChhcnJheSwgcHJlZGljYXRlLCBmcm9tSW5kZXgpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH1cbiAgICAgIHZhciBpbmRleCA9IGxlbmd0aCAtIDE7XG4gICAgICBpZiAoZnJvbUluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaW5kZXggPSB0b0ludGVnZXIoZnJvbUluZGV4KTtcbiAgICAgICAgaW5kZXggPSBmcm9tSW5kZXggPCAwXG4gICAgICAgICAgPyBuYXRpdmVNYXgobGVuZ3RoICsgaW5kZXgsIDApXG4gICAgICAgICAgOiBuYXRpdmVNaW4oaW5kZXgsIGxlbmd0aCAtIDEpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJhc2VGaW5kSW5kZXgoYXJyYXksIGdldEl0ZXJhdGVlKHByZWRpY2F0ZSwgMyksIGluZGV4LCB0cnVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGbGF0dGVucyBgYXJyYXlgIGEgc2luZ2xlIGxldmVsIGRlZXAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gZmxhdHRlbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmbGF0dGVuZWQgYXJyYXkuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZmxhdHRlbihbMSwgWzIsIFszLCBbNF1dLCA1XV0pO1xuICAgICAqIC8vID0+IFsxLCAyLCBbMywgWzRdXSwgNV1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmbGF0dGVuKGFycmF5KSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gICAgICByZXR1cm4gbGVuZ3RoID8gYmFzZUZsYXR0ZW4oYXJyYXksIDEpIDogW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVjdXJzaXZlbHkgZmxhdHRlbnMgYGFycmF5YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBmbGF0dGVuLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZsYXR0ZW5lZCBhcnJheS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5mbGF0dGVuRGVlcChbMSwgWzIsIFszLCBbNF1dLCA1XV0pO1xuICAgICAqIC8vID0+IFsxLCAyLCAzLCA0LCA1XVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZsYXR0ZW5EZWVwKGFycmF5KSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gICAgICByZXR1cm4gbGVuZ3RoID8gYmFzZUZsYXR0ZW4oYXJyYXksIElORklOSVRZKSA6IFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlY3Vyc2l2ZWx5IGZsYXR0ZW4gYGFycmF5YCB1cCB0byBgZGVwdGhgIHRpbWVzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuNC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGZsYXR0ZW4uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtkZXB0aD0xXSBUaGUgbWF4aW11bSByZWN1cnNpb24gZGVwdGguXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmxhdHRlbmVkIGFycmF5LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgYXJyYXkgPSBbMSwgWzIsIFszLCBbNF1dLCA1XV07XG4gICAgICpcbiAgICAgKiBfLmZsYXR0ZW5EZXB0aChhcnJheSwgMSk7XG4gICAgICogLy8gPT4gWzEsIDIsIFszLCBbNF1dLCA1XVxuICAgICAqXG4gICAgICogXy5mbGF0dGVuRGVwdGgoYXJyYXksIDIpO1xuICAgICAqIC8vID0+IFsxLCAyLCAzLCBbNF0sIDVdXG4gICAgICovXG4gICAgZnVuY3Rpb24gZmxhdHRlbkRlcHRoKGFycmF5LCBkZXB0aCkge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICAgICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgZGVwdGggPSBkZXB0aCA9PT0gdW5kZWZpbmVkID8gMSA6IHRvSW50ZWdlcihkZXB0aCk7XG4gICAgICByZXR1cm4gYmFzZUZsYXR0ZW4oYXJyYXksIGRlcHRoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW52ZXJzZSBvZiBgXy50b1BhaXJzYDsgdGhpcyBtZXRob2QgcmV0dXJucyBhbiBvYmplY3QgY29tcG9zZWRcbiAgICAgKiBmcm9tIGtleS12YWx1ZSBgcGFpcnNgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gcGFpcnMgVGhlIGtleS12YWx1ZSBwYWlycy5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmZyb21QYWlycyhbWydhJywgMV0sIFsnYicsIDJdXSk7XG4gICAgICogLy8gPT4geyAnYSc6IDEsICdiJzogMiB9XG4gICAgICovXG4gICAgZnVuY3Rpb24gZnJvbVBhaXJzKHBhaXJzKSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSBwYWlycyA9PSBudWxsID8gMCA6IHBhaXJzLmxlbmd0aCxcbiAgICAgICAgICByZXN1bHQgPSB7fTtcblxuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIHBhaXIgPSBwYWlyc1tpbmRleF07XG4gICAgICAgIHJlc3VsdFtwYWlyWzBdXSA9IHBhaXJbMV07XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYGFycmF5YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBhbGlhcyBmaXJzdFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZmlyc3QgZWxlbWVudCBvZiBgYXJyYXlgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmhlYWQoWzEsIDIsIDNdKTtcbiAgICAgKiAvLyA9PiAxXG4gICAgICpcbiAgICAgKiBfLmhlYWQoW10pO1xuICAgICAqIC8vID0+IHVuZGVmaW5lZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGhlYWQoYXJyYXkpIHtcbiAgICAgIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKSA/IGFycmF5WzBdIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGluZGV4IGF0IHdoaWNoIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIGB2YWx1ZWAgaXMgZm91bmQgaW4gYGFycmF5YFxuICAgICAqIHVzaW5nIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gICAgICogZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zLiBJZiBgZnJvbUluZGV4YCBpcyBuZWdhdGl2ZSwgaXQncyB1c2VkIGFzIHRoZVxuICAgICAqIG9mZnNldCBmcm9tIHRoZSBlbmQgb2YgYGFycmF5YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtmcm9tSW5kZXg9MF0gVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaW5kZXhPZihbMSwgMiwgMSwgMl0sIDIpO1xuICAgICAqIC8vID0+IDFcbiAgICAgKlxuICAgICAqIC8vIFNlYXJjaCBmcm9tIHRoZSBgZnJvbUluZGV4YC5cbiAgICAgKiBfLmluZGV4T2YoWzEsIDIsIDEsIDJdLCAyLCAyKTtcbiAgICAgKiAvLyA9PiAzXG4gICAgICovXG4gICAgZnVuY3Rpb24gaW5kZXhPZihhcnJheSwgdmFsdWUsIGZyb21JbmRleCkge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICAgICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgICAgdmFyIGluZGV4ID0gZnJvbUluZGV4ID09IG51bGwgPyAwIDogdG9JbnRlZ2VyKGZyb21JbmRleCk7XG4gICAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICAgIGluZGV4ID0gbmF0aXZlTWF4KGxlbmd0aCArIGluZGV4LCAwKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBiYXNlSW5kZXhPZihhcnJheSwgdmFsdWUsIGluZGV4KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGFsbCBidXQgdGhlIGxhc3QgZWxlbWVudCBvZiBgYXJyYXlgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgc2xpY2Ugb2YgYGFycmF5YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pbml0aWFsKFsxLCAyLCAzXSk7XG4gICAgICogLy8gPT4gWzEsIDJdXG4gICAgICovXG4gICAgZnVuY3Rpb24gaW5pdGlhbChhcnJheSkge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICAgICAgcmV0dXJuIGxlbmd0aCA/IGJhc2VTbGljZShhcnJheSwgMCwgLTEpIDogW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiB1bmlxdWUgdmFsdWVzIHRoYXQgYXJlIGluY2x1ZGVkIGluIGFsbCBnaXZlbiBhcnJheXNcbiAgICAgKiB1c2luZyBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICAgICAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy4gVGhlIG9yZGVyIGFuZCByZWZlcmVuY2VzIG9mIHJlc3VsdCB2YWx1ZXMgYXJlXG4gICAgICogZGV0ZXJtaW5lZCBieSB0aGUgZmlyc3QgYXJyYXkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0gey4uLkFycmF5fSBbYXJyYXlzXSBUaGUgYXJyYXlzIHRvIGluc3BlY3QuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgaW50ZXJzZWN0aW5nIHZhbHVlcy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pbnRlcnNlY3Rpb24oWzIsIDFdLCBbMiwgM10pO1xuICAgICAqIC8vID0+IFsyXVxuICAgICAqL1xuICAgIHZhciBpbnRlcnNlY3Rpb24gPSBiYXNlUmVzdChmdW5jdGlvbihhcnJheXMpIHtcbiAgICAgIHZhciBtYXBwZWQgPSBhcnJheU1hcChhcnJheXMsIGNhc3RBcnJheUxpa2VPYmplY3QpO1xuICAgICAgcmV0dXJuIChtYXBwZWQubGVuZ3RoICYmIG1hcHBlZFswXSA9PT0gYXJyYXlzWzBdKVxuICAgICAgICA/IGJhc2VJbnRlcnNlY3Rpb24obWFwcGVkKVxuICAgICAgICA6IFtdO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5pbnRlcnNlY3Rpb25gIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGl0ZXJhdGVlYFxuICAgICAqIHdoaWNoIGlzIGludm9rZWQgZm9yIGVhY2ggZWxlbWVudCBvZiBlYWNoIGBhcnJheXNgIHRvIGdlbmVyYXRlIHRoZSBjcml0ZXJpb25cbiAgICAgKiBieSB3aGljaCB0aGV5J3JlIGNvbXBhcmVkLiBUaGUgb3JkZXIgYW5kIHJlZmVyZW5jZXMgb2YgcmVzdWx0IHZhbHVlcyBhcmVcbiAgICAgKiBkZXRlcm1pbmVkIGJ5IHRoZSBmaXJzdCBhcnJheS4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCBvbmUgYXJndW1lbnQ6XG4gICAgICogKHZhbHVlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7Li4uQXJyYXl9IFthcnJheXNdIFRoZSBhcnJheXMgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgaW50ZXJzZWN0aW5nIHZhbHVlcy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pbnRlcnNlY3Rpb25CeShbMi4xLCAxLjJdLCBbMi4zLCAzLjRdLCBNYXRoLmZsb29yKTtcbiAgICAgKiAvLyA9PiBbMi4xXVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5pbnRlcnNlY3Rpb25CeShbeyAneCc6IDEgfV0sIFt7ICd4JzogMiB9LCB7ICd4JzogMSB9XSwgJ3gnKTtcbiAgICAgKiAvLyA9PiBbeyAneCc6IDEgfV1cbiAgICAgKi9cbiAgICB2YXIgaW50ZXJzZWN0aW9uQnkgPSBiYXNlUmVzdChmdW5jdGlvbihhcnJheXMpIHtcbiAgICAgIHZhciBpdGVyYXRlZSA9IGxhc3QoYXJyYXlzKSxcbiAgICAgICAgICBtYXBwZWQgPSBhcnJheU1hcChhcnJheXMsIGNhc3RBcnJheUxpa2VPYmplY3QpO1xuXG4gICAgICBpZiAoaXRlcmF0ZWUgPT09IGxhc3QobWFwcGVkKSkge1xuICAgICAgICBpdGVyYXRlZSA9IHVuZGVmaW5lZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1hcHBlZC5wb3AoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAobWFwcGVkLmxlbmd0aCAmJiBtYXBwZWRbMF0gPT09IGFycmF5c1swXSlcbiAgICAgICAgPyBiYXNlSW50ZXJzZWN0aW9uKG1hcHBlZCwgZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDIpKVxuICAgICAgICA6IFtdO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5pbnRlcnNlY3Rpb25gIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGNvbXBhcmF0b3JgXG4gICAgICogd2hpY2ggaXMgaW52b2tlZCB0byBjb21wYXJlIGVsZW1lbnRzIG9mIGBhcnJheXNgLiBUaGUgb3JkZXIgYW5kIHJlZmVyZW5jZXNcbiAgICAgKiBvZiByZXN1bHQgdmFsdWVzIGFyZSBkZXRlcm1pbmVkIGJ5IHRoZSBmaXJzdCBhcnJheS4gVGhlIGNvbXBhcmF0b3IgaXNcbiAgICAgKiBpbnZva2VkIHdpdGggdHdvIGFyZ3VtZW50czogKGFyclZhbCwgb3RoVmFsKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7Li4uQXJyYXl9IFthcnJheXNdIFRoZSBhcnJheXMgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY29tcGFyYXRvcl0gVGhlIGNvbXBhcmF0b3IgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBpbnRlcnNlY3RpbmcgdmFsdWVzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0cyA9IFt7ICd4JzogMSwgJ3knOiAyIH0sIHsgJ3gnOiAyLCAneSc6IDEgfV07XG4gICAgICogdmFyIG90aGVycyA9IFt7ICd4JzogMSwgJ3knOiAxIH0sIHsgJ3gnOiAxLCAneSc6IDIgfV07XG4gICAgICpcbiAgICAgKiBfLmludGVyc2VjdGlvbldpdGgob2JqZWN0cywgb3RoZXJzLCBfLmlzRXF1YWwpO1xuICAgICAqIC8vID0+IFt7ICd4JzogMSwgJ3knOiAyIH1dXG4gICAgICovXG4gICAgdmFyIGludGVyc2VjdGlvbldpdGggPSBiYXNlUmVzdChmdW5jdGlvbihhcnJheXMpIHtcbiAgICAgIHZhciBjb21wYXJhdG9yID0gbGFzdChhcnJheXMpLFxuICAgICAgICAgIG1hcHBlZCA9IGFycmF5TWFwKGFycmF5cywgY2FzdEFycmF5TGlrZU9iamVjdCk7XG5cbiAgICAgIGNvbXBhcmF0b3IgPSB0eXBlb2YgY29tcGFyYXRvciA9PSAnZnVuY3Rpb24nID8gY29tcGFyYXRvciA6IHVuZGVmaW5lZDtcbiAgICAgIGlmIChjb21wYXJhdG9yKSB7XG4gICAgICAgIG1hcHBlZC5wb3AoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAobWFwcGVkLmxlbmd0aCAmJiBtYXBwZWRbMF0gPT09IGFycmF5c1swXSlcbiAgICAgICAgPyBiYXNlSW50ZXJzZWN0aW9uKG1hcHBlZCwgdW5kZWZpbmVkLCBjb21wYXJhdG9yKVxuICAgICAgICA6IFtdO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYWxsIGVsZW1lbnRzIGluIGBhcnJheWAgaW50byBhIHN0cmluZyBzZXBhcmF0ZWQgYnkgYHNlcGFyYXRvcmAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gY29udmVydC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3NlcGFyYXRvcj0nLCddIFRoZSBlbGVtZW50IHNlcGFyYXRvci5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBqb2luZWQgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmpvaW4oWydhJywgJ2InLCAnYyddLCAnficpO1xuICAgICAqIC8vID0+ICdhfmJ+YydcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBqb2luKGFycmF5LCBzZXBhcmF0b3IpIHtcbiAgICAgIHJldHVybiBhcnJheSA9PSBudWxsID8gJycgOiBuYXRpdmVKb2luLmNhbGwoYXJyYXksIHNlcGFyYXRvcik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgbGFzdCBlbGVtZW50IG9mIGBhcnJheWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGxhc3QgZWxlbWVudCBvZiBgYXJyYXlgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmxhc3QoWzEsIDIsIDNdKTtcbiAgICAgKiAvLyA9PiAzXG4gICAgICovXG4gICAgZnVuY3Rpb24gbGFzdChhcnJheSkge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICAgICAgcmV0dXJuIGxlbmd0aCA/IGFycmF5W2xlbmd0aCAtIDFdIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uaW5kZXhPZmAgZXhjZXB0IHRoYXQgaXQgaXRlcmF0ZXMgb3ZlciBlbGVtZW50cyBvZlxuICAgICAqIGBhcnJheWAgZnJvbSByaWdodCB0byBsZWZ0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2Zyb21JbmRleD1hcnJheS5sZW5ndGgtMV0gVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ubGFzdEluZGV4T2YoWzEsIDIsIDEsIDJdLCAyKTtcbiAgICAgKiAvLyA9PiAzXG4gICAgICpcbiAgICAgKiAvLyBTZWFyY2ggZnJvbSB0aGUgYGZyb21JbmRleGAuXG4gICAgICogXy5sYXN0SW5kZXhPZihbMSwgMiwgMSwgMl0sIDIsIDIpO1xuICAgICAqIC8vID0+IDFcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBsYXN0SW5kZXhPZihhcnJheSwgdmFsdWUsIGZyb21JbmRleCkge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICAgICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgICAgdmFyIGluZGV4ID0gbGVuZ3RoO1xuICAgICAgaWYgKGZyb21JbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGluZGV4ID0gdG9JbnRlZ2VyKGZyb21JbmRleCk7XG4gICAgICAgIGluZGV4ID0gaW5kZXggPCAwID8gbmF0aXZlTWF4KGxlbmd0aCArIGluZGV4LCAwKSA6IG5hdGl2ZU1pbihpbmRleCwgbGVuZ3RoIC0gMSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWUgPT09IHZhbHVlXG4gICAgICAgID8gc3RyaWN0TGFzdEluZGV4T2YoYXJyYXksIHZhbHVlLCBpbmRleClcbiAgICAgICAgOiBiYXNlRmluZEluZGV4KGFycmF5LCBiYXNlSXNOYU4sIGluZGV4LCB0cnVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBlbGVtZW50IGF0IGluZGV4IGBuYCBvZiBgYXJyYXlgLiBJZiBgbmAgaXMgbmVnYXRpdmUsIHRoZSBudGhcbiAgICAgKiBlbGVtZW50IGZyb20gdGhlIGVuZCBpcyByZXR1cm5lZC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjExLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtuPTBdIFRoZSBpbmRleCBvZiB0aGUgZWxlbWVudCB0byByZXR1cm4uXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG50aCBlbGVtZW50IG9mIGBhcnJheWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBhcnJheSA9IFsnYScsICdiJywgJ2MnLCAnZCddO1xuICAgICAqXG4gICAgICogXy5udGgoYXJyYXksIDEpO1xuICAgICAqIC8vID0+ICdiJ1xuICAgICAqXG4gICAgICogXy5udGgoYXJyYXksIC0yKTtcbiAgICAgKiAvLyA9PiAnYyc7XG4gICAgICovXG4gICAgZnVuY3Rpb24gbnRoKGFycmF5LCBuKSB7XG4gICAgICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aCkgPyBiYXNlTnRoKGFycmF5LCB0b0ludGVnZXIobikpIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYWxsIGdpdmVuIHZhbHVlcyBmcm9tIGBhcnJheWAgdXNpbmdcbiAgICAgKiBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICAgICAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBVbmxpa2UgYF8ud2l0aG91dGAsIHRoaXMgbWV0aG9kIG11dGF0ZXMgYGFycmF5YC4gVXNlIGBfLnJlbW92ZWBcbiAgICAgKiB0byByZW1vdmUgZWxlbWVudHMgZnJvbSBhbiBhcnJheSBieSBwcmVkaWNhdGUuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMi4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxuICAgICAqIEBwYXJhbSB7Li4uKn0gW3ZhbHVlc10gVGhlIHZhbHVlcyB0byByZW1vdmUuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBhcnJheSA9IFsnYScsICdiJywgJ2MnLCAnYScsICdiJywgJ2MnXTtcbiAgICAgKlxuICAgICAqIF8ucHVsbChhcnJheSwgJ2EnLCAnYycpO1xuICAgICAqIGNvbnNvbGUubG9nKGFycmF5KTtcbiAgICAgKiAvLyA9PiBbJ2InLCAnYiddXG4gICAgICovXG4gICAgdmFyIHB1bGwgPSBiYXNlUmVzdChwdWxsQWxsKTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8ucHVsbGAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBhbiBhcnJheSBvZiB2YWx1ZXMgdG8gcmVtb3ZlLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFVubGlrZSBgXy5kaWZmZXJlbmNlYCwgdGhpcyBtZXRob2QgbXV0YXRlcyBgYXJyYXlgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgVGhlIHZhbHVlcyB0byByZW1vdmUuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBhcnJheSA9IFsnYScsICdiJywgJ2MnLCAnYScsICdiJywgJ2MnXTtcbiAgICAgKlxuICAgICAqIF8ucHVsbEFsbChhcnJheSwgWydhJywgJ2MnXSk7XG4gICAgICogY29uc29sZS5sb2coYXJyYXkpO1xuICAgICAqIC8vID0+IFsnYicsICdiJ11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBwdWxsQWxsKGFycmF5LCB2YWx1ZXMpIHtcbiAgICAgIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoICYmIHZhbHVlcyAmJiB2YWx1ZXMubGVuZ3RoKVxuICAgICAgICA/IGJhc2VQdWxsQWxsKGFycmF5LCB2YWx1ZXMpXG4gICAgICAgIDogYXJyYXk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5wdWxsQWxsYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBpdGVyYXRlZWAgd2hpY2ggaXNcbiAgICAgKiBpbnZva2VkIGZvciBlYWNoIGVsZW1lbnQgb2YgYGFycmF5YCBhbmQgYHZhbHVlc2AgdG8gZ2VuZXJhdGUgdGhlIGNyaXRlcmlvblxuICAgICAqIGJ5IHdoaWNoIHRoZXkncmUgY29tcGFyZWQuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OiAodmFsdWUpLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFVubGlrZSBgXy5kaWZmZXJlbmNlQnlgLCB0aGlzIG1ldGhvZCBtdXRhdGVzIGBhcnJheWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgdmFsdWVzIHRvIHJlbW92ZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBhcnJheSA9IFt7ICd4JzogMSB9LCB7ICd4JzogMiB9LCB7ICd4JzogMyB9LCB7ICd4JzogMSB9XTtcbiAgICAgKlxuICAgICAqIF8ucHVsbEFsbEJ5KGFycmF5LCBbeyAneCc6IDEgfSwgeyAneCc6IDMgfV0sICd4Jyk7XG4gICAgICogY29uc29sZS5sb2coYXJyYXkpO1xuICAgICAqIC8vID0+IFt7ICd4JzogMiB9XVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHB1bGxBbGxCeShhcnJheSwgdmFsdWVzLCBpdGVyYXRlZSkge1xuICAgICAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGggJiYgdmFsdWVzICYmIHZhbHVlcy5sZW5ndGgpXG4gICAgICAgID8gYmFzZVB1bGxBbGwoYXJyYXksIHZhbHVlcywgZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDIpKVxuICAgICAgICA6IGFycmF5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8ucHVsbEFsbGAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgY29tcGFyYXRvcmAgd2hpY2hcbiAgICAgKiBpcyBpbnZva2VkIHRvIGNvbXBhcmUgZWxlbWVudHMgb2YgYGFycmF5YCB0byBgdmFsdWVzYC4gVGhlIGNvbXBhcmF0b3IgaXNcbiAgICAgKiBpbnZva2VkIHdpdGggdHdvIGFyZ3VtZW50czogKGFyclZhbCwgb3RoVmFsKS5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBVbmxpa2UgYF8uZGlmZmVyZW5jZVdpdGhgLCB0aGlzIG1ldGhvZCBtdXRhdGVzIGBhcnJheWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC42LjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgdmFsdWVzIHRvIHJlbW92ZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY29tcGFyYXRvcl0gVGhlIGNvbXBhcmF0b3IgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGFycmF5ID0gW3sgJ3gnOiAxLCAneSc6IDIgfSwgeyAneCc6IDMsICd5JzogNCB9LCB7ICd4JzogNSwgJ3knOiA2IH1dO1xuICAgICAqXG4gICAgICogXy5wdWxsQWxsV2l0aChhcnJheSwgW3sgJ3gnOiAzLCAneSc6IDQgfV0sIF8uaXNFcXVhbCk7XG4gICAgICogY29uc29sZS5sb2coYXJyYXkpO1xuICAgICAqIC8vID0+IFt7ICd4JzogMSwgJ3knOiAyIH0sIHsgJ3gnOiA1LCAneSc6IDYgfV1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBwdWxsQWxsV2l0aChhcnJheSwgdmFsdWVzLCBjb21wYXJhdG9yKSB7XG4gICAgICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aCAmJiB2YWx1ZXMgJiYgdmFsdWVzLmxlbmd0aClcbiAgICAgICAgPyBiYXNlUHVsbEFsbChhcnJheSwgdmFsdWVzLCB1bmRlZmluZWQsIGNvbXBhcmF0b3IpXG4gICAgICAgIDogYXJyYXk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBlbGVtZW50cyBmcm9tIGBhcnJheWAgY29ycmVzcG9uZGluZyB0byBgaW5kZXhlc2AgYW5kIHJldHVybnMgYW5cbiAgICAgKiBhcnJheSBvZiByZW1vdmVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFVubGlrZSBgXy5hdGAsIHRoaXMgbWV0aG9kIG11dGF0ZXMgYGFycmF5YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBtb2RpZnkuXG4gICAgICogQHBhcmFtIHsuLi4obnVtYmVyfG51bWJlcltdKX0gW2luZGV4ZXNdIFRoZSBpbmRleGVzIG9mIGVsZW1lbnRzIHRvIHJlbW92ZS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiByZW1vdmVkIGVsZW1lbnRzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgYXJyYXkgPSBbJ2EnLCAnYicsICdjJywgJ2QnXTtcbiAgICAgKiB2YXIgcHVsbGVkID0gXy5wdWxsQXQoYXJyYXksIFsxLCAzXSk7XG4gICAgICpcbiAgICAgKiBjb25zb2xlLmxvZyhhcnJheSk7XG4gICAgICogLy8gPT4gWydhJywgJ2MnXVxuICAgICAqXG4gICAgICogY29uc29sZS5sb2cocHVsbGVkKTtcbiAgICAgKiAvLyA9PiBbJ2InLCAnZCddXG4gICAgICovXG4gICAgdmFyIHB1bGxBdCA9IGZsYXRSZXN0KGZ1bmN0aW9uKGFycmF5LCBpbmRleGVzKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGgsXG4gICAgICAgICAgcmVzdWx0ID0gYmFzZUF0KGFycmF5LCBpbmRleGVzKTtcblxuICAgICAgYmFzZVB1bGxBdChhcnJheSwgYXJyYXlNYXAoaW5kZXhlcywgZnVuY3Rpb24oaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGlzSW5kZXgoaW5kZXgsIGxlbmd0aCkgPyAraW5kZXggOiBpbmRleDtcbiAgICAgIH0pLnNvcnQoY29tcGFyZUFzY2VuZGluZykpO1xuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBhbGwgZWxlbWVudHMgZnJvbSBgYXJyYXlgIHRoYXQgYHByZWRpY2F0ZWAgcmV0dXJucyB0cnV0aHkgZm9yXG4gICAgICogYW5kIHJldHVybnMgYW4gYXJyYXkgb2YgdGhlIHJlbW92ZWQgZWxlbWVudHMuIFRoZSBwcmVkaWNhdGUgaXMgaW52b2tlZFxuICAgICAqIHdpdGggdGhyZWUgYXJndW1lbnRzOiAodmFsdWUsIGluZGV4LCBhcnJheSkuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVW5saWtlIGBfLmZpbHRlcmAsIHRoaXMgbWV0aG9kIG11dGF0ZXMgYGFycmF5YC4gVXNlIGBfLnB1bGxgXG4gICAgICogdG8gcHVsbCBlbGVtZW50cyBmcm9tIGFuIGFycmF5IGJ5IHZhbHVlLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDIuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgcmVtb3ZlZCBlbGVtZW50cy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGFycmF5ID0gWzEsIDIsIDMsIDRdO1xuICAgICAqIHZhciBldmVucyA9IF8ucmVtb3ZlKGFycmF5LCBmdW5jdGlvbihuKSB7XG4gICAgICogICByZXR1cm4gbiAlIDIgPT0gMDtcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIGNvbnNvbGUubG9nKGFycmF5KTtcbiAgICAgKiAvLyA9PiBbMSwgM11cbiAgICAgKlxuICAgICAqIGNvbnNvbGUubG9nKGV2ZW5zKTtcbiAgICAgKiAvLyA9PiBbMiwgNF1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiByZW1vdmUoYXJyYXksIHByZWRpY2F0ZSkge1xuICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgICAgaWYgKCEoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKSkge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgaW5kZXhlcyA9IFtdLFxuICAgICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICAgICAgcHJlZGljYXRlID0gZ2V0SXRlcmF0ZWUocHJlZGljYXRlLCAzKTtcbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XTtcbiAgICAgICAgaWYgKHByZWRpY2F0ZSh2YWx1ZSwgaW5kZXgsIGFycmF5KSkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICAgICAgICBpbmRleGVzLnB1c2goaW5kZXgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBiYXNlUHVsbEF0KGFycmF5LCBpbmRleGVzKTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV2ZXJzZXMgYGFycmF5YCBzbyB0aGF0IHRoZSBmaXJzdCBlbGVtZW50IGJlY29tZXMgdGhlIGxhc3QsIHRoZSBzZWNvbmRcbiAgICAgKiBlbGVtZW50IGJlY29tZXMgdGhlIHNlY29uZCB0byBsYXN0LCBhbmQgc28gb24uXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgYXJyYXlgIGFuZCBpcyBiYXNlZCBvblxuICAgICAqIFtgQXJyYXkjcmV2ZXJzZWBdKGh0dHBzOi8vbWRuLmlvL0FycmF5L3JldmVyc2UpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIG1vZGlmeS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGFycmF5ID0gWzEsIDIsIDNdO1xuICAgICAqXG4gICAgICogXy5yZXZlcnNlKGFycmF5KTtcbiAgICAgKiAvLyA9PiBbMywgMiwgMV1cbiAgICAgKlxuICAgICAqIGNvbnNvbGUubG9nKGFycmF5KTtcbiAgICAgKiAvLyA9PiBbMywgMiwgMV1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiByZXZlcnNlKGFycmF5KSB7XG4gICAgICByZXR1cm4gYXJyYXkgPT0gbnVsbCA/IGFycmF5IDogbmF0aXZlUmV2ZXJzZS5jYWxsKGFycmF5KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgc2xpY2Ugb2YgYGFycmF5YCBmcm9tIGBzdGFydGAgdXAgdG8sIGJ1dCBub3QgaW5jbHVkaW5nLCBgZW5kYC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyB1c2VkIGluc3RlYWQgb2ZcbiAgICAgKiBbYEFycmF5I3NsaWNlYF0oaHR0cHM6Ly9tZG4uaW8vQXJyYXkvc2xpY2UpIHRvIGVuc3VyZSBkZW5zZSBhcnJheXMgYXJlXG4gICAgICogcmV0dXJuZWQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gc2xpY2UuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD0wXSBUaGUgc3RhcnQgcG9zaXRpb24uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtlbmQ9YXJyYXkubGVuZ3RoXSBUaGUgZW5kIHBvc2l0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgc2xpY2Ugb2YgYGFycmF5YC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzbGljZShhcnJheSwgc3RhcnQsIGVuZCkge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICAgICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgaWYgKGVuZCAmJiB0eXBlb2YgZW5kICE9ICdudW1iZXInICYmIGlzSXRlcmF0ZWVDYWxsKGFycmF5LCBzdGFydCwgZW5kKSkge1xuICAgICAgICBzdGFydCA9IDA7XG4gICAgICAgIGVuZCA9IGxlbmd0aDtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBzdGFydCA9IHN0YXJ0ID09IG51bGwgPyAwIDogdG9JbnRlZ2VyKHN0YXJ0KTtcbiAgICAgICAgZW5kID0gZW5kID09PSB1bmRlZmluZWQgPyBsZW5ndGggOiB0b0ludGVnZXIoZW5kKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBiYXNlU2xpY2UoYXJyYXksIHN0YXJ0LCBlbmQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVzZXMgYSBiaW5hcnkgc2VhcmNoIHRvIGRldGVybWluZSB0aGUgbG93ZXN0IGluZGV4IGF0IHdoaWNoIGB2YWx1ZWBcbiAgICAgKiBzaG91bGQgYmUgaW5zZXJ0ZWQgaW50byBgYXJyYXlgIGluIG9yZGVyIHRvIG1haW50YWluIGl0cyBzb3J0IG9yZGVyLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIHNvcnRlZCBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGV2YWx1YXRlLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IGF0IHdoaWNoIGB2YWx1ZWAgc2hvdWxkIGJlIGluc2VydGVkXG4gICAgICogIGludG8gYGFycmF5YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5zb3J0ZWRJbmRleChbMzAsIDUwXSwgNDApO1xuICAgICAqIC8vID0+IDFcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzb3J0ZWRJbmRleChhcnJheSwgdmFsdWUpIHtcbiAgICAgIHJldHVybiBiYXNlU29ydGVkSW5kZXgoYXJyYXksIHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnNvcnRlZEluZGV4YCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBpdGVyYXRlZWBcbiAgICAgKiB3aGljaCBpcyBpbnZva2VkIGZvciBgdmFsdWVgIGFuZCBlYWNoIGVsZW1lbnQgb2YgYGFycmF5YCB0byBjb21wdXRlIHRoZWlyXG4gICAgICogc29ydCByYW5raW5nLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDogKHZhbHVlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBzb3J0ZWQgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBldmFsdWF0ZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggYXQgd2hpY2ggYHZhbHVlYCBzaG91bGQgYmUgaW5zZXJ0ZWRcbiAgICAgKiAgaW50byBgYXJyYXlgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0cyA9IFt7ICd4JzogNCB9LCB7ICd4JzogNSB9XTtcbiAgICAgKlxuICAgICAqIF8uc29ydGVkSW5kZXhCeShvYmplY3RzLCB7ICd4JzogNCB9LCBmdW5jdGlvbihvKSB7IHJldHVybiBvLng7IH0pO1xuICAgICAqIC8vID0+IDBcbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uc29ydGVkSW5kZXhCeShvYmplY3RzLCB7ICd4JzogNCB9LCAneCcpO1xuICAgICAqIC8vID0+IDBcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzb3J0ZWRJbmRleEJ5KGFycmF5LCB2YWx1ZSwgaXRlcmF0ZWUpIHtcbiAgICAgIHJldHVybiBiYXNlU29ydGVkSW5kZXhCeShhcnJheSwgdmFsdWUsIGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCAyKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5pbmRleE9mYCBleGNlcHQgdGhhdCBpdCBwZXJmb3JtcyBhIGJpbmFyeVxuICAgICAqIHNlYXJjaCBvbiBhIHNvcnRlZCBgYXJyYXlgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnNvcnRlZEluZGV4T2YoWzQsIDUsIDUsIDUsIDZdLCA1KTtcbiAgICAgKiAvLyA9PiAxXG4gICAgICovXG4gICAgZnVuY3Rpb24gc29ydGVkSW5kZXhPZihhcnJheSwgdmFsdWUpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgICAgIGlmIChsZW5ndGgpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gYmFzZVNvcnRlZEluZGV4KGFycmF5LCB2YWx1ZSk7XG4gICAgICAgIGlmIChpbmRleCA8IGxlbmd0aCAmJiBlcShhcnJheVtpbmRleF0sIHZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiBpbmRleDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uc29ydGVkSW5kZXhgIGV4Y2VwdCB0aGF0IGl0IHJldHVybnMgdGhlIGhpZ2hlc3RcbiAgICAgKiBpbmRleCBhdCB3aGljaCBgdmFsdWVgIHNob3VsZCBiZSBpbnNlcnRlZCBpbnRvIGBhcnJheWAgaW4gb3JkZXIgdG9cbiAgICAgKiBtYWludGFpbiBpdHMgc29ydCBvcmRlci5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBzb3J0ZWQgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBldmFsdWF0ZS5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBhdCB3aGljaCBgdmFsdWVgIHNob3VsZCBiZSBpbnNlcnRlZFxuICAgICAqICBpbnRvIGBhcnJheWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uc29ydGVkTGFzdEluZGV4KFs0LCA1LCA1LCA1LCA2XSwgNSk7XG4gICAgICogLy8gPT4gNFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNvcnRlZExhc3RJbmRleChhcnJheSwgdmFsdWUpIHtcbiAgICAgIHJldHVybiBiYXNlU29ydGVkSW5kZXgoYXJyYXksIHZhbHVlLCB0cnVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnNvcnRlZExhc3RJbmRleGAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgaXRlcmF0ZWVgXG4gICAgICogd2hpY2ggaXMgaW52b2tlZCBmb3IgYHZhbHVlYCBhbmQgZWFjaCBlbGVtZW50IG9mIGBhcnJheWAgdG8gY29tcHV0ZSB0aGVpclxuICAgICAqIHNvcnQgcmFua2luZy4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCBvbmUgYXJndW1lbnQ6ICh2YWx1ZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgc29ydGVkIGFycmF5IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gZXZhbHVhdGUuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IGF0IHdoaWNoIGB2YWx1ZWAgc2hvdWxkIGJlIGluc2VydGVkXG4gICAgICogIGludG8gYGFycmF5YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdHMgPSBbeyAneCc6IDQgfSwgeyAneCc6IDUgfV07XG4gICAgICpcbiAgICAgKiBfLnNvcnRlZExhc3RJbmRleEJ5KG9iamVjdHMsIHsgJ3gnOiA0IH0sIGZ1bmN0aW9uKG8pIHsgcmV0dXJuIG8ueDsgfSk7XG4gICAgICogLy8gPT4gMVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5zb3J0ZWRMYXN0SW5kZXhCeShvYmplY3RzLCB7ICd4JzogNCB9LCAneCcpO1xuICAgICAqIC8vID0+IDFcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzb3J0ZWRMYXN0SW5kZXhCeShhcnJheSwgdmFsdWUsIGl0ZXJhdGVlKSB7XG4gICAgICByZXR1cm4gYmFzZVNvcnRlZEluZGV4QnkoYXJyYXksIHZhbHVlLCBnZXRJdGVyYXRlZShpdGVyYXRlZSwgMiksIHRydWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8ubGFzdEluZGV4T2ZgIGV4Y2VwdCB0aGF0IGl0IHBlcmZvcm1zIGEgYmluYXJ5XG4gICAgICogc2VhcmNoIG9uIGEgc29ydGVkIGBhcnJheWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uc29ydGVkTGFzdEluZGV4T2YoWzQsIDUsIDUsIDUsIDZdLCA1KTtcbiAgICAgKiAvLyA9PiAzXG4gICAgICovXG4gICAgZnVuY3Rpb24gc29ydGVkTGFzdEluZGV4T2YoYXJyYXksIHZhbHVlKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gICAgICBpZiAobGVuZ3RoKSB7XG4gICAgICAgIHZhciBpbmRleCA9IGJhc2VTb3J0ZWRJbmRleChhcnJheSwgdmFsdWUsIHRydWUpIC0gMTtcbiAgICAgICAgaWYgKGVxKGFycmF5W2luZGV4XSwgdmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy51bmlxYCBleGNlcHQgdGhhdCBpdCdzIGRlc2lnbmVkIGFuZCBvcHRpbWl6ZWRcbiAgICAgKiBmb3Igc29ydGVkIGFycmF5cy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGR1cGxpY2F0ZSBmcmVlIGFycmF5LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnNvcnRlZFVuaXEoWzEsIDEsIDJdKTtcbiAgICAgKiAvLyA9PiBbMSwgMl1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzb3J0ZWRVbmlxKGFycmF5KSB7XG4gICAgICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aClcbiAgICAgICAgPyBiYXNlU29ydGVkVW5pcShhcnJheSlcbiAgICAgICAgOiBbXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnVuaXFCeWAgZXhjZXB0IHRoYXQgaXQncyBkZXNpZ25lZCBhbmQgb3B0aW1pemVkXG4gICAgICogZm9yIHNvcnRlZCBhcnJheXMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWVdIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGR1cGxpY2F0ZSBmcmVlIGFycmF5LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnNvcnRlZFVuaXFCeShbMS4xLCAxLjIsIDIuMywgMi40XSwgTWF0aC5mbG9vcik7XG4gICAgICogLy8gPT4gWzEuMSwgMi4zXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNvcnRlZFVuaXFCeShhcnJheSwgaXRlcmF0ZWUpIHtcbiAgICAgIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKVxuICAgICAgICA/IGJhc2VTb3J0ZWRVbmlxKGFycmF5LCBnZXRJdGVyYXRlZShpdGVyYXRlZSwgMikpXG4gICAgICAgIDogW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBhbGwgYnV0IHRoZSBmaXJzdCBlbGVtZW50IG9mIGBhcnJheWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzbGljZSBvZiBgYXJyYXlgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnRhaWwoWzEsIDIsIDNdKTtcbiAgICAgKiAvLyA9PiBbMiwgM11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0YWlsKGFycmF5KSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gICAgICByZXR1cm4gbGVuZ3RoID8gYmFzZVNsaWNlKGFycmF5LCAxLCBsZW5ndGgpIDogW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHNsaWNlIG9mIGBhcnJheWAgd2l0aCBgbmAgZWxlbWVudHMgdGFrZW4gZnJvbSB0aGUgYmVnaW5uaW5nLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbj0xXSBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRvIHRha2UuXG4gICAgICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ubWFwYC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHNsaWNlIG9mIGBhcnJheWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udGFrZShbMSwgMiwgM10pO1xuICAgICAqIC8vID0+IFsxXVxuICAgICAqXG4gICAgICogXy50YWtlKFsxLCAyLCAzXSwgMik7XG4gICAgICogLy8gPT4gWzEsIDJdXG4gICAgICpcbiAgICAgKiBfLnRha2UoWzEsIDIsIDNdLCA1KTtcbiAgICAgKiAvLyA9PiBbMSwgMiwgM11cbiAgICAgKlxuICAgICAqIF8udGFrZShbMSwgMiwgM10sIDApO1xuICAgICAqIC8vID0+IFtdXG4gICAgICovXG4gICAgZnVuY3Rpb24gdGFrZShhcnJheSwgbiwgZ3VhcmQpIHtcbiAgICAgIGlmICghKGFycmF5ICYmIGFycmF5Lmxlbmd0aCkpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgbiA9IChndWFyZCB8fCBuID09PSB1bmRlZmluZWQpID8gMSA6IHRvSW50ZWdlcihuKTtcbiAgICAgIHJldHVybiBiYXNlU2xpY2UoYXJyYXksIDAsIG4gPCAwID8gMCA6IG4pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBzbGljZSBvZiBgYXJyYXlgIHdpdGggYG5gIGVsZW1lbnRzIHRha2VuIGZyb20gdGhlIGVuZC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW249MV0gVGhlIG51bWJlciBvZiBlbGVtZW50cyB0byB0YWtlLlxuICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzbGljZSBvZiBgYXJyYXlgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnRha2VSaWdodChbMSwgMiwgM10pO1xuICAgICAqIC8vID0+IFszXVxuICAgICAqXG4gICAgICogXy50YWtlUmlnaHQoWzEsIDIsIDNdLCAyKTtcbiAgICAgKiAvLyA9PiBbMiwgM11cbiAgICAgKlxuICAgICAqIF8udGFrZVJpZ2h0KFsxLCAyLCAzXSwgNSk7XG4gICAgICogLy8gPT4gWzEsIDIsIDNdXG4gICAgICpcbiAgICAgKiBfLnRha2VSaWdodChbMSwgMiwgM10sIDApO1xuICAgICAqIC8vID0+IFtdXG4gICAgICovXG4gICAgZnVuY3Rpb24gdGFrZVJpZ2h0KGFycmF5LCBuLCBndWFyZCkge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICAgICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgbiA9IChndWFyZCB8fCBuID09PSB1bmRlZmluZWQpID8gMSA6IHRvSW50ZWdlcihuKTtcbiAgICAgIG4gPSBsZW5ndGggLSBuO1xuICAgICAgcmV0dXJuIGJhc2VTbGljZShhcnJheSwgbiA8IDAgPyAwIDogbiwgbGVuZ3RoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgc2xpY2Ugb2YgYGFycmF5YCB3aXRoIGVsZW1lbnRzIHRha2VuIGZyb20gdGhlIGVuZC4gRWxlbWVudHMgYXJlXG4gICAgICogdGFrZW4gdW50aWwgYHByZWRpY2F0ZWAgcmV0dXJucyBmYWxzZXkuIFRoZSBwcmVkaWNhdGUgaXMgaW52b2tlZCB3aXRoXG4gICAgICogdGhyZWUgYXJndW1lbnRzOiAodmFsdWUsIGluZGV4LCBhcnJheSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgc2xpY2Ugb2YgYGFycmF5YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0gW1xuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAgJ2FjdGl2ZSc6IHRydWUgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgICdhY3RpdmUnOiBmYWxzZSB9LFxuICAgICAqICAgeyAndXNlcic6ICdwZWJibGVzJywgJ2FjdGl2ZSc6IGZhbHNlIH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogXy50YWtlUmlnaHRXaGlsZSh1c2VycywgZnVuY3Rpb24obykgeyByZXR1cm4gIW8uYWN0aXZlOyB9KTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ2ZyZWQnLCAncGViYmxlcyddXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc2AgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8udGFrZVJpZ2h0V2hpbGUodXNlcnMsIHsgJ3VzZXInOiAncGViYmxlcycsICdhY3RpdmUnOiBmYWxzZSB9KTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ3BlYmJsZXMnXVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8udGFrZVJpZ2h0V2hpbGUodXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ2ZyZWQnLCAncGViYmxlcyddXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLnRha2VSaWdodFdoaWxlKHVzZXJzLCAnYWN0aXZlJyk7XG4gICAgICogLy8gPT4gW11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0YWtlUmlnaHRXaGlsZShhcnJheSwgcHJlZGljYXRlKSB7XG4gICAgICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aClcbiAgICAgICAgPyBiYXNlV2hpbGUoYXJyYXksIGdldEl0ZXJhdGVlKHByZWRpY2F0ZSwgMyksIGZhbHNlLCB0cnVlKVxuICAgICAgICA6IFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBzbGljZSBvZiBgYXJyYXlgIHdpdGggZWxlbWVudHMgdGFrZW4gZnJvbSB0aGUgYmVnaW5uaW5nLiBFbGVtZW50c1xuICAgICAqIGFyZSB0YWtlbiB1bnRpbCBgcHJlZGljYXRlYCByZXR1cm5zIGZhbHNleS4gVGhlIHByZWRpY2F0ZSBpcyBpbnZva2VkIHdpdGhcbiAgICAgKiB0aHJlZSBhcmd1bWVudHM6ICh2YWx1ZSwgaW5kZXgsIGFycmF5KS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzbGljZSBvZiBgYXJyYXlgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgdXNlcnMgPSBbXG4gICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScsICAnYWN0aXZlJzogZmFsc2UgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgICdhY3RpdmUnOiBmYWxzZSB9LFxuICAgICAqICAgeyAndXNlcic6ICdwZWJibGVzJywgJ2FjdGl2ZSc6IHRydWUgfVxuICAgICAqIF07XG4gICAgICpcbiAgICAgKiBfLnRha2VXaGlsZSh1c2VycywgZnVuY3Rpb24obykgeyByZXR1cm4gIW8uYWN0aXZlOyB9KTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ2Jhcm5leScsICdmcmVkJ11cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy50YWtlV2hpbGUodXNlcnMsIHsgJ3VzZXInOiAnYmFybmV5JywgJ2FjdGl2ZSc6IGZhbHNlIH0pO1xuICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFsnYmFybmV5J11cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzUHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLnRha2VXaGlsZSh1c2VycywgWydhY3RpdmUnLCBmYWxzZV0pO1xuICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFsnYmFybmV5JywgJ2ZyZWQnXVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy50YWtlV2hpbGUodXNlcnMsICdhY3RpdmUnKTtcbiAgICAgKiAvLyA9PiBbXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRha2VXaGlsZShhcnJheSwgcHJlZGljYXRlKSB7XG4gICAgICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aClcbiAgICAgICAgPyBiYXNlV2hpbGUoYXJyYXksIGdldEl0ZXJhdGVlKHByZWRpY2F0ZSwgMykpXG4gICAgICAgIDogW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiB1bmlxdWUgdmFsdWVzLCBpbiBvcmRlciwgZnJvbSBhbGwgZ2l2ZW4gYXJyYXlzIHVzaW5nXG4gICAgICogW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAgICAgKiBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0gey4uLkFycmF5fSBbYXJyYXlzXSBUaGUgYXJyYXlzIHRvIGluc3BlY3QuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgY29tYmluZWQgdmFsdWVzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnVuaW9uKFsyXSwgWzEsIDJdKTtcbiAgICAgKiAvLyA9PiBbMiwgMV1cbiAgICAgKi9cbiAgICB2YXIgdW5pb24gPSBiYXNlUmVzdChmdW5jdGlvbihhcnJheXMpIHtcbiAgICAgIHJldHVybiBiYXNlVW5pcShiYXNlRmxhdHRlbihhcnJheXMsIDEsIGlzQXJyYXlMaWtlT2JqZWN0LCB0cnVlKSk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnVuaW9uYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBpdGVyYXRlZWAgd2hpY2ggaXNcbiAgICAgKiBpbnZva2VkIGZvciBlYWNoIGVsZW1lbnQgb2YgZWFjaCBgYXJyYXlzYCB0byBnZW5lcmF0ZSB0aGUgY3JpdGVyaW9uIGJ5XG4gICAgICogd2hpY2ggdW5pcXVlbmVzcyBpcyBjb21wdXRlZC4gUmVzdWx0IHZhbHVlcyBhcmUgY2hvc2VuIGZyb20gdGhlIGZpcnN0XG4gICAgICogYXJyYXkgaW4gd2hpY2ggdGhlIHZhbHVlIG9jY3Vycy4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCBvbmUgYXJndW1lbnQ6XG4gICAgICogKHZhbHVlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7Li4uQXJyYXl9IFthcnJheXNdIFRoZSBhcnJheXMgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgY29tYmluZWQgdmFsdWVzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnVuaW9uQnkoWzIuMV0sIFsxLjIsIDIuM10sIE1hdGguZmxvb3IpO1xuICAgICAqIC8vID0+IFsyLjEsIDEuMl1cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8udW5pb25CeShbeyAneCc6IDEgfV0sIFt7ICd4JzogMiB9LCB7ICd4JzogMSB9XSwgJ3gnKTtcbiAgICAgKiAvLyA9PiBbeyAneCc6IDEgfSwgeyAneCc6IDIgfV1cbiAgICAgKi9cbiAgICB2YXIgdW5pb25CeSA9IGJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5cykge1xuICAgICAgdmFyIGl0ZXJhdGVlID0gbGFzdChhcnJheXMpO1xuICAgICAgaWYgKGlzQXJyYXlMaWtlT2JqZWN0KGl0ZXJhdGVlKSkge1xuICAgICAgICBpdGVyYXRlZSA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBiYXNlVW5pcShiYXNlRmxhdHRlbihhcnJheXMsIDEsIGlzQXJyYXlMaWtlT2JqZWN0LCB0cnVlKSwgZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDIpKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8udW5pb25gIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGNvbXBhcmF0b3JgIHdoaWNoXG4gICAgICogaXMgaW52b2tlZCB0byBjb21wYXJlIGVsZW1lbnRzIG9mIGBhcnJheXNgLiBSZXN1bHQgdmFsdWVzIGFyZSBjaG9zZW4gZnJvbVxuICAgICAqIHRoZSBmaXJzdCBhcnJheSBpbiB3aGljaCB0aGUgdmFsdWUgb2NjdXJzLiBUaGUgY29tcGFyYXRvciBpcyBpbnZva2VkXG4gICAgICogd2l0aCB0d28gYXJndW1lbnRzOiAoYXJyVmFsLCBvdGhWYWwpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHsuLi5BcnJheX0gW2FycmF5c10gVGhlIGFycmF5cyB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjb21wYXJhdG9yXSBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGNvbWJpbmVkIHZhbHVlcy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdHMgPSBbeyAneCc6IDEsICd5JzogMiB9LCB7ICd4JzogMiwgJ3knOiAxIH1dO1xuICAgICAqIHZhciBvdGhlcnMgPSBbeyAneCc6IDEsICd5JzogMSB9LCB7ICd4JzogMSwgJ3knOiAyIH1dO1xuICAgICAqXG4gICAgICogXy51bmlvbldpdGgob2JqZWN0cywgb3RoZXJzLCBfLmlzRXF1YWwpO1xuICAgICAqIC8vID0+IFt7ICd4JzogMSwgJ3knOiAyIH0sIHsgJ3gnOiAyLCAneSc6IDEgfSwgeyAneCc6IDEsICd5JzogMSB9XVxuICAgICAqL1xuICAgIHZhciB1bmlvbldpdGggPSBiYXNlUmVzdChmdW5jdGlvbihhcnJheXMpIHtcbiAgICAgIHZhciBjb21wYXJhdG9yID0gbGFzdChhcnJheXMpO1xuICAgICAgY29tcGFyYXRvciA9IHR5cGVvZiBjb21wYXJhdG9yID09ICdmdW5jdGlvbicgPyBjb21wYXJhdG9yIDogdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIGJhc2VVbmlxKGJhc2VGbGF0dGVuKGFycmF5cywgMSwgaXNBcnJheUxpa2VPYmplY3QsIHRydWUpLCB1bmRlZmluZWQsIGNvbXBhcmF0b3IpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGR1cGxpY2F0ZS1mcmVlIHZlcnNpb24gb2YgYW4gYXJyYXksIHVzaW5nXG4gICAgICogW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAgICAgKiBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMsIGluIHdoaWNoIG9ubHkgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgZWFjaCBlbGVtZW50XG4gICAgICogaXMga2VwdC4gVGhlIG9yZGVyIG9mIHJlc3VsdCB2YWx1ZXMgaXMgZGV0ZXJtaW5lZCBieSB0aGUgb3JkZXIgdGhleSBvY2N1clxuICAgICAqIGluIHRoZSBhcnJheS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGR1cGxpY2F0ZSBmcmVlIGFycmF5LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnVuaXEoWzIsIDEsIDJdKTtcbiAgICAgKiAvLyA9PiBbMiwgMV1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB1bmlxKGFycmF5KSB7XG4gICAgICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aCkgPyBiYXNlVW5pcShhcnJheSkgOiBbXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnVuaXFgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGl0ZXJhdGVlYCB3aGljaCBpc1xuICAgICAqIGludm9rZWQgZm9yIGVhY2ggZWxlbWVudCBpbiBgYXJyYXlgIHRvIGdlbmVyYXRlIHRoZSBjcml0ZXJpb24gYnkgd2hpY2hcbiAgICAgKiB1bmlxdWVuZXNzIGlzIGNvbXB1dGVkLiBUaGUgb3JkZXIgb2YgcmVzdWx0IHZhbHVlcyBpcyBkZXRlcm1pbmVkIGJ5IHRoZVxuICAgICAqIG9yZGVyIHRoZXkgb2NjdXIgaW4gdGhlIGFycmF5LiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDpcbiAgICAgKiAodmFsdWUpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGR1cGxpY2F0ZSBmcmVlIGFycmF5LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnVuaXFCeShbMi4xLCAxLjIsIDIuM10sIE1hdGguZmxvb3IpO1xuICAgICAqIC8vID0+IFsyLjEsIDEuMl1cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8udW5pcUJ5KFt7ICd4JzogMSB9LCB7ICd4JzogMiB9LCB7ICd4JzogMSB9XSwgJ3gnKTtcbiAgICAgKiAvLyA9PiBbeyAneCc6IDEgfSwgeyAneCc6IDIgfV1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB1bmlxQnkoYXJyYXksIGl0ZXJhdGVlKSB7XG4gICAgICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aCkgPyBiYXNlVW5pcShhcnJheSwgZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDIpKSA6IFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8udW5pcWAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgY29tcGFyYXRvcmAgd2hpY2hcbiAgICAgKiBpcyBpbnZva2VkIHRvIGNvbXBhcmUgZWxlbWVudHMgb2YgYGFycmF5YC4gVGhlIG9yZGVyIG9mIHJlc3VsdCB2YWx1ZXMgaXNcbiAgICAgKiBkZXRlcm1pbmVkIGJ5IHRoZSBvcmRlciB0aGV5IG9jY3VyIGluIHRoZSBhcnJheS5UaGUgY29tcGFyYXRvciBpcyBpbnZva2VkXG4gICAgICogd2l0aCB0d28gYXJndW1lbnRzOiAoYXJyVmFsLCBvdGhWYWwpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NvbXBhcmF0b3JdIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZHVwbGljYXRlIGZyZWUgYXJyYXkuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3RzID0gW3sgJ3gnOiAxLCAneSc6IDIgfSwgeyAneCc6IDIsICd5JzogMSB9LCB7ICd4JzogMSwgJ3knOiAyIH1dO1xuICAgICAqXG4gICAgICogXy51bmlxV2l0aChvYmplY3RzLCBfLmlzRXF1YWwpO1xuICAgICAqIC8vID0+IFt7ICd4JzogMSwgJ3knOiAyIH0sIHsgJ3gnOiAyLCAneSc6IDEgfV1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB1bmlxV2l0aChhcnJheSwgY29tcGFyYXRvcikge1xuICAgICAgY29tcGFyYXRvciA9IHR5cGVvZiBjb21wYXJhdG9yID09ICdmdW5jdGlvbicgPyBjb21wYXJhdG9yIDogdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGgpID8gYmFzZVVuaXEoYXJyYXksIHVuZGVmaW5lZCwgY29tcGFyYXRvcikgOiBbXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnppcGAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBhbiBhcnJheSBvZiBncm91cGVkXG4gICAgICogZWxlbWVudHMgYW5kIGNyZWF0ZXMgYW4gYXJyYXkgcmVncm91cGluZyB0aGUgZWxlbWVudHMgdG8gdGhlaXIgcHJlLXppcFxuICAgICAqIGNvbmZpZ3VyYXRpb24uXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMS4yLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgb2YgZ3JvdXBlZCBlbGVtZW50cyB0byBwcm9jZXNzLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIHJlZ3JvdXBlZCBlbGVtZW50cy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHppcHBlZCA9IF8uemlwKFsnYScsICdiJ10sIFsxLCAyXSwgW3RydWUsIGZhbHNlXSk7XG4gICAgICogLy8gPT4gW1snYScsIDEsIHRydWVdLCBbJ2InLCAyLCBmYWxzZV1dXG4gICAgICpcbiAgICAgKiBfLnVuemlwKHppcHBlZCk7XG4gICAgICogLy8gPT4gW1snYScsICdiJ10sIFsxLCAyXSwgW3RydWUsIGZhbHNlXV1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB1bnppcChhcnJheSkge1xuICAgICAgaWYgKCEoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKSkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICB2YXIgbGVuZ3RoID0gMDtcbiAgICAgIGFycmF5ID0gYXJyYXlGaWx0ZXIoYXJyYXksIGZ1bmN0aW9uKGdyb3VwKSB7XG4gICAgICAgIGlmIChpc0FycmF5TGlrZU9iamVjdChncm91cCkpIHtcbiAgICAgICAgICBsZW5ndGggPSBuYXRpdmVNYXgoZ3JvdXAubGVuZ3RoLCBsZW5ndGgpO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBiYXNlVGltZXMobGVuZ3RoLCBmdW5jdGlvbihpbmRleCkge1xuICAgICAgICByZXR1cm4gYXJyYXlNYXAoYXJyYXksIGJhc2VQcm9wZXJ0eShpbmRleCkpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy51bnppcGAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgaXRlcmF0ZWVgIHRvIHNwZWNpZnlcbiAgICAgKiBob3cgcmVncm91cGVkIHZhbHVlcyBzaG91bGQgYmUgY29tYmluZWQuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggdGhlXG4gICAgICogZWxlbWVudHMgb2YgZWFjaCBncm91cDogKC4uLmdyb3VwKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjguMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSBvZiBncm91cGVkIGVsZW1lbnRzIHRvIHByb2Nlc3MuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiB0byBjb21iaW5lXG4gICAgICogIHJlZ3JvdXBlZCB2YWx1ZXMuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgcmVncm91cGVkIGVsZW1lbnRzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgemlwcGVkID0gXy56aXAoWzEsIDJdLCBbMTAsIDIwXSwgWzEwMCwgMjAwXSk7XG4gICAgICogLy8gPT4gW1sxLCAxMCwgMTAwXSwgWzIsIDIwLCAyMDBdXVxuICAgICAqXG4gICAgICogXy51bnppcFdpdGgoemlwcGVkLCBfLmFkZCk7XG4gICAgICogLy8gPT4gWzMsIDMwLCAzMDBdXG4gICAgICovXG4gICAgZnVuY3Rpb24gdW56aXBXaXRoKGFycmF5LCBpdGVyYXRlZSkge1xuICAgICAgaWYgKCEoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKSkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICB2YXIgcmVzdWx0ID0gdW56aXAoYXJyYXkpO1xuICAgICAgaWYgKGl0ZXJhdGVlID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhcnJheU1hcChyZXN1bHQsIGZ1bmN0aW9uKGdyb3VwKSB7XG4gICAgICAgIHJldHVybiBhcHBseShpdGVyYXRlZSwgdW5kZWZpbmVkLCBncm91cCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IGV4Y2x1ZGluZyBhbGwgZ2l2ZW4gdmFsdWVzIHVzaW5nXG4gICAgICogW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAgICAgKiBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVW5saWtlIGBfLnB1bGxgLCB0aGlzIG1ldGhvZCByZXR1cm5zIGEgbmV3IGFycmF5LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHsuLi4qfSBbdmFsdWVzXSBUaGUgdmFsdWVzIHRvIGV4Y2x1ZGUuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgZmlsdGVyZWQgdmFsdWVzLlxuICAgICAqIEBzZWUgXy5kaWZmZXJlbmNlLCBfLnhvclxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLndpdGhvdXQoWzIsIDEsIDIsIDNdLCAxLCAyKTtcbiAgICAgKiAvLyA9PiBbM11cbiAgICAgKi9cbiAgICB2YXIgd2l0aG91dCA9IGJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5LCB2YWx1ZXMpIHtcbiAgICAgIHJldHVybiBpc0FycmF5TGlrZU9iamVjdChhcnJheSlcbiAgICAgICAgPyBiYXNlRGlmZmVyZW5jZShhcnJheSwgdmFsdWVzKVxuICAgICAgICA6IFtdO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiB1bmlxdWUgdmFsdWVzIHRoYXQgaXMgdGhlXG4gICAgICogW3N5bW1ldHJpYyBkaWZmZXJlbmNlXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TeW1tZXRyaWNfZGlmZmVyZW5jZSlcbiAgICAgKiBvZiB0aGUgZ2l2ZW4gYXJyYXlzLiBUaGUgb3JkZXIgb2YgcmVzdWx0IHZhbHVlcyBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBvcmRlclxuICAgICAqIHRoZXkgb2NjdXIgaW4gdGhlIGFycmF5cy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAyLjQuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7Li4uQXJyYXl9IFthcnJheXNdIFRoZSBhcnJheXMgdG8gaW5zcGVjdC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBmaWx0ZXJlZCB2YWx1ZXMuXG4gICAgICogQHNlZSBfLmRpZmZlcmVuY2UsIF8ud2l0aG91dFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnhvcihbMiwgMV0sIFsyLCAzXSk7XG4gICAgICogLy8gPT4gWzEsIDNdXG4gICAgICovXG4gICAgdmFyIHhvciA9IGJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5cykge1xuICAgICAgcmV0dXJuIGJhc2VYb3IoYXJyYXlGaWx0ZXIoYXJyYXlzLCBpc0FycmF5TGlrZU9iamVjdCkpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy54b3JgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGl0ZXJhdGVlYCB3aGljaCBpc1xuICAgICAqIGludm9rZWQgZm9yIGVhY2ggZWxlbWVudCBvZiBlYWNoIGBhcnJheXNgIHRvIGdlbmVyYXRlIHRoZSBjcml0ZXJpb24gYnlcbiAgICAgKiB3aGljaCBieSB3aGljaCB0aGV5J3JlIGNvbXBhcmVkLiBUaGUgb3JkZXIgb2YgcmVzdWx0IHZhbHVlcyBpcyBkZXRlcm1pbmVkXG4gICAgICogYnkgdGhlIG9yZGVyIHRoZXkgb2NjdXIgaW4gdGhlIGFycmF5cy4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCBvbmVcbiAgICAgKiBhcmd1bWVudDogKHZhbHVlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7Li4uQXJyYXl9IFthcnJheXNdIFRoZSBhcnJheXMgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgZmlsdGVyZWQgdmFsdWVzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnhvckJ5KFsyLjEsIDEuMl0sIFsyLjMsIDMuNF0sIE1hdGguZmxvb3IpO1xuICAgICAqIC8vID0+IFsxLjIsIDMuNF1cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8ueG9yQnkoW3sgJ3gnOiAxIH1dLCBbeyAneCc6IDIgfSwgeyAneCc6IDEgfV0sICd4Jyk7XG4gICAgICogLy8gPT4gW3sgJ3gnOiAyIH1dXG4gICAgICovXG4gICAgdmFyIHhvckJ5ID0gYmFzZVJlc3QoZnVuY3Rpb24oYXJyYXlzKSB7XG4gICAgICB2YXIgaXRlcmF0ZWUgPSBsYXN0KGFycmF5cyk7XG4gICAgICBpZiAoaXNBcnJheUxpa2VPYmplY3QoaXRlcmF0ZWUpKSB7XG4gICAgICAgIGl0ZXJhdGVlID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJhc2VYb3IoYXJyYXlGaWx0ZXIoYXJyYXlzLCBpc0FycmF5TGlrZU9iamVjdCksIGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCAyKSk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnhvcmAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgY29tcGFyYXRvcmAgd2hpY2ggaXNcbiAgICAgKiBpbnZva2VkIHRvIGNvbXBhcmUgZWxlbWVudHMgb2YgYGFycmF5c2AuIFRoZSBvcmRlciBvZiByZXN1bHQgdmFsdWVzIGlzXG4gICAgICogZGV0ZXJtaW5lZCBieSB0aGUgb3JkZXIgdGhleSBvY2N1ciBpbiB0aGUgYXJyYXlzLiBUaGUgY29tcGFyYXRvciBpcyBpbnZva2VkXG4gICAgICogd2l0aCB0d28gYXJndW1lbnRzOiAoYXJyVmFsLCBvdGhWYWwpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHsuLi5BcnJheX0gW2FycmF5c10gVGhlIGFycmF5cyB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjb21wYXJhdG9yXSBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGZpbHRlcmVkIHZhbHVlcy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdHMgPSBbeyAneCc6IDEsICd5JzogMiB9LCB7ICd4JzogMiwgJ3knOiAxIH1dO1xuICAgICAqIHZhciBvdGhlcnMgPSBbeyAneCc6IDEsICd5JzogMSB9LCB7ICd4JzogMSwgJ3knOiAyIH1dO1xuICAgICAqXG4gICAgICogXy54b3JXaXRoKG9iamVjdHMsIG90aGVycywgXy5pc0VxdWFsKTtcbiAgICAgKiAvLyA9PiBbeyAneCc6IDIsICd5JzogMSB9LCB7ICd4JzogMSwgJ3knOiAxIH1dXG4gICAgICovXG4gICAgdmFyIHhvcldpdGggPSBiYXNlUmVzdChmdW5jdGlvbihhcnJheXMpIHtcbiAgICAgIHZhciBjb21wYXJhdG9yID0gbGFzdChhcnJheXMpO1xuICAgICAgY29tcGFyYXRvciA9IHR5cGVvZiBjb21wYXJhdG9yID09ICdmdW5jdGlvbicgPyBjb21wYXJhdG9yIDogdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIGJhc2VYb3IoYXJyYXlGaWx0ZXIoYXJyYXlzLCBpc0FycmF5TGlrZU9iamVjdCksIHVuZGVmaW5lZCwgY29tcGFyYXRvcik7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIGdyb3VwZWQgZWxlbWVudHMsIHRoZSBmaXJzdCBvZiB3aGljaCBjb250YWlucyB0aGVcbiAgICAgKiBmaXJzdCBlbGVtZW50cyBvZiB0aGUgZ2l2ZW4gYXJyYXlzLCB0aGUgc2Vjb25kIG9mIHdoaWNoIGNvbnRhaW5zIHRoZVxuICAgICAqIHNlY29uZCBlbGVtZW50cyBvZiB0aGUgZ2l2ZW4gYXJyYXlzLCBhbmQgc28gb24uXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0gey4uLkFycmF5fSBbYXJyYXlzXSBUaGUgYXJyYXlzIHRvIHByb2Nlc3MuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgZ3JvdXBlZCBlbGVtZW50cy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy56aXAoWydhJywgJ2InXSwgWzEsIDJdLCBbdHJ1ZSwgZmFsc2VdKTtcbiAgICAgKiAvLyA9PiBbWydhJywgMSwgdHJ1ZV0sIFsnYicsIDIsIGZhbHNlXV1cbiAgICAgKi9cbiAgICB2YXIgemlwID0gYmFzZVJlc3QodW56aXApO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5mcm9tUGFpcnNgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgdHdvIGFycmF5cyxcbiAgICAgKiBvbmUgb2YgcHJvcGVydHkgaWRlbnRpZmllcnMgYW5kIG9uZSBvZiBjb3JyZXNwb25kaW5nIHZhbHVlcy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjQuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFtwcm9wcz1bXV0gVGhlIHByb3BlcnR5IGlkZW50aWZpZXJzLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFt2YWx1ZXM9W11dIFRoZSBwcm9wZXJ0eSB2YWx1ZXMuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy56aXBPYmplY3QoWydhJywgJ2InXSwgWzEsIDJdKTtcbiAgICAgKiAvLyA9PiB7ICdhJzogMSwgJ2InOiAyIH1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB6aXBPYmplY3QocHJvcHMsIHZhbHVlcykge1xuICAgICAgcmV0dXJuIGJhc2VaaXBPYmplY3QocHJvcHMgfHwgW10sIHZhbHVlcyB8fCBbXSwgYXNzaWduVmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uemlwT2JqZWN0YCBleGNlcHQgdGhhdCBpdCBzdXBwb3J0cyBwcm9wZXJ0eSBwYXRocy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjEuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFtwcm9wcz1bXV0gVGhlIHByb3BlcnR5IGlkZW50aWZpZXJzLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFt2YWx1ZXM9W11dIFRoZSBwcm9wZXJ0eSB2YWx1ZXMuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy56aXBPYmplY3REZWVwKFsnYS5iWzBdLmMnLCAnYS5iWzFdLmQnXSwgWzEsIDJdKTtcbiAgICAgKiAvLyA9PiB7ICdhJzogeyAnYic6IFt7ICdjJzogMSB9LCB7ICdkJzogMiB9XSB9IH1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB6aXBPYmplY3REZWVwKHByb3BzLCB2YWx1ZXMpIHtcbiAgICAgIHJldHVybiBiYXNlWmlwT2JqZWN0KHByb3BzIHx8IFtdLCB2YWx1ZXMgfHwgW10sIGJhc2VTZXQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uemlwYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBpdGVyYXRlZWAgdG8gc3BlY2lmeVxuICAgICAqIGhvdyBncm91cGVkIHZhbHVlcyBzaG91bGQgYmUgY29tYmluZWQuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggdGhlXG4gICAgICogZWxlbWVudHMgb2YgZWFjaCBncm91cDogKC4uLmdyb3VwKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjguMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7Li4uQXJyYXl9IFthcnJheXNdIFRoZSBhcnJheXMgdG8gcHJvY2Vzcy5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIHRvIGNvbWJpbmVcbiAgICAgKiAgZ3JvdXBlZCB2YWx1ZXMuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgZ3JvdXBlZCBlbGVtZW50cy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy56aXBXaXRoKFsxLCAyXSwgWzEwLCAyMF0sIFsxMDAsIDIwMF0sIGZ1bmN0aW9uKGEsIGIsIGMpIHtcbiAgICAgKiAgIHJldHVybiBhICsgYiArIGM7XG4gICAgICogfSk7XG4gICAgICogLy8gPT4gWzExMSwgMjIyXVxuICAgICAqL1xuICAgIHZhciB6aXBXaXRoID0gYmFzZVJlc3QoZnVuY3Rpb24oYXJyYXlzKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXlzLmxlbmd0aCxcbiAgICAgICAgICBpdGVyYXRlZSA9IGxlbmd0aCA+IDEgPyBhcnJheXNbbGVuZ3RoIC0gMV0gOiB1bmRlZmluZWQ7XG5cbiAgICAgIGl0ZXJhdGVlID0gdHlwZW9mIGl0ZXJhdGVlID09ICdmdW5jdGlvbicgPyAoYXJyYXlzLnBvcCgpLCBpdGVyYXRlZSkgOiB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4gdW56aXBXaXRoKGFycmF5cywgaXRlcmF0ZWUpO1xuICAgIH0pO1xuXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGBsb2Rhc2hgIHdyYXBwZXIgaW5zdGFuY2UgdGhhdCB3cmFwcyBgdmFsdWVgIHdpdGggZXhwbGljaXQgbWV0aG9kXG4gICAgICogY2hhaW4gc2VxdWVuY2VzIGVuYWJsZWQuIFRoZSByZXN1bHQgb2Ygc3VjaCBzZXF1ZW5jZXMgbXVzdCBiZSB1bndyYXBwZWRcbiAgICAgKiB3aXRoIGBfI3ZhbHVlYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAxLjMuMFxuICAgICAqIEBjYXRlZ29yeSBTZXFcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byB3cmFwLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBgbG9kYXNoYCB3cmFwcGVyIGluc3RhbmNlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgdXNlcnMgPSBbXG4gICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScsICAnYWdlJzogMzYgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgICdhZ2UnOiA0MCB9LFxuICAgICAqICAgeyAndXNlcic6ICdwZWJibGVzJywgJ2FnZSc6IDEgfVxuICAgICAqIF07XG4gICAgICpcbiAgICAgKiB2YXIgeW91bmdlc3QgPSBfXG4gICAgICogICAuY2hhaW4odXNlcnMpXG4gICAgICogICAuc29ydEJ5KCdhZ2UnKVxuICAgICAqICAgLm1hcChmdW5jdGlvbihvKSB7XG4gICAgICogICAgIHJldHVybiBvLnVzZXIgKyAnIGlzICcgKyBvLmFnZTtcbiAgICAgKiAgIH0pXG4gICAgICogICAuaGVhZCgpXG4gICAgICogICAudmFsdWUoKTtcbiAgICAgKiAvLyA9PiAncGViYmxlcyBpcyAxJ1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNoYWluKHZhbHVlKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gbG9kYXNoKHZhbHVlKTtcbiAgICAgIHJlc3VsdC5fX2NoYWluX18gPSB0cnVlO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpbnZva2VzIGBpbnRlcmNlcHRvcmAgYW5kIHJldHVybnMgYHZhbHVlYC4gVGhlIGludGVyY2VwdG9yXG4gICAgICogaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDsgKHZhbHVlKS4gVGhlIHB1cnBvc2Ugb2YgdGhpcyBtZXRob2QgaXMgdG9cbiAgICAgKiBcInRhcCBpbnRvXCIgYSBtZXRob2QgY2hhaW4gc2VxdWVuY2UgaW4gb3JkZXIgdG8gbW9kaWZ5IGludGVybWVkaWF0ZSByZXN1bHRzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IFNlcVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHByb3ZpZGUgdG8gYGludGVyY2VwdG9yYC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpbnRlcmNlcHRvciBUaGUgZnVuY3Rpb24gdG8gaW52b2tlLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIGB2YWx1ZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8oWzEsIDIsIDNdKVxuICAgICAqICAudGFwKGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgICogICAgLy8gTXV0YXRlIGlucHV0IGFycmF5LlxuICAgICAqICAgIGFycmF5LnBvcCgpO1xuICAgICAqICB9KVxuICAgICAqICAucmV2ZXJzZSgpXG4gICAgICogIC52YWx1ZSgpO1xuICAgICAqIC8vID0+IFsyLCAxXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRhcCh2YWx1ZSwgaW50ZXJjZXB0b3IpIHtcbiAgICAgIGludGVyY2VwdG9yKHZhbHVlKTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnRhcGAgZXhjZXB0IHRoYXQgaXQgcmV0dXJucyB0aGUgcmVzdWx0IG9mIGBpbnRlcmNlcHRvcmAuXG4gICAgICogVGhlIHB1cnBvc2Ugb2YgdGhpcyBtZXRob2QgaXMgdG8gXCJwYXNzIHRocnVcIiB2YWx1ZXMgcmVwbGFjaW5nIGludGVybWVkaWF0ZVxuICAgICAqIHJlc3VsdHMgaW4gYSBtZXRob2QgY2hhaW4gc2VxdWVuY2UuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgU2VxXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHJvdmlkZSB0byBgaW50ZXJjZXB0b3JgLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGludGVyY2VwdG9yIFRoZSBmdW5jdGlvbiB0byBpbnZva2UuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc3VsdCBvZiBgaW50ZXJjZXB0b3JgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfKCcgIGFiYyAgJylcbiAgICAgKiAgLmNoYWluKClcbiAgICAgKiAgLnRyaW0oKVxuICAgICAqICAudGhydShmdW5jdGlvbih2YWx1ZSkge1xuICAgICAqICAgIHJldHVybiBbdmFsdWVdO1xuICAgICAqICB9KVxuICAgICAqICAudmFsdWUoKTtcbiAgICAgKiAvLyA9PiBbJ2FiYyddXG4gICAgICovXG4gICAgZnVuY3Rpb24gdGhydSh2YWx1ZSwgaW50ZXJjZXB0b3IpIHtcbiAgICAgIHJldHVybiBpbnRlcmNlcHRvcih2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgdGhlIHdyYXBwZXIgdmVyc2lvbiBvZiBgXy5hdGAuXG4gICAgICpcbiAgICAgKiBAbmFtZSBhdFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDEuMC4wXG4gICAgICogQGNhdGVnb3J5IFNlcVxuICAgICAqIEBwYXJhbSB7Li4uKHN0cmluZ3xzdHJpbmdbXSl9IFtwYXRoc10gVGhlIHByb3BlcnR5IHBhdGhzIHRvIHBpY2suXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IGBsb2Rhc2hgIHdyYXBwZXIgaW5zdGFuY2UuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICdhJzogW3sgJ2InOiB7ICdjJzogMyB9IH0sIDRdIH07XG4gICAgICpcbiAgICAgKiBfKG9iamVjdCkuYXQoWydhWzBdLmIuYycsICdhWzFdJ10pLnZhbHVlKCk7XG4gICAgICogLy8gPT4gWzMsIDRdXG4gICAgICovXG4gICAgdmFyIHdyYXBwZXJBdCA9IGZsYXRSZXN0KGZ1bmN0aW9uKHBhdGhzKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gcGF0aHMubGVuZ3RoLFxuICAgICAgICAgIHN0YXJ0ID0gbGVuZ3RoID8gcGF0aHNbMF0gOiAwLFxuICAgICAgICAgIHZhbHVlID0gdGhpcy5fX3dyYXBwZWRfXyxcbiAgICAgICAgICBpbnRlcmNlcHRvciA9IGZ1bmN0aW9uKG9iamVjdCkgeyByZXR1cm4gYmFzZUF0KG9iamVjdCwgcGF0aHMpOyB9O1xuXG4gICAgICBpZiAobGVuZ3RoID4gMSB8fCB0aGlzLl9fYWN0aW9uc19fLmxlbmd0aCB8fFxuICAgICAgICAgICEodmFsdWUgaW5zdGFuY2VvZiBMYXp5V3JhcHBlcikgfHwgIWlzSW5kZXgoc3RhcnQpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRocnUoaW50ZXJjZXB0b3IpO1xuICAgICAgfVxuICAgICAgdmFsdWUgPSB2YWx1ZS5zbGljZShzdGFydCwgK3N0YXJ0ICsgKGxlbmd0aCA/IDEgOiAwKSk7XG4gICAgICB2YWx1ZS5fX2FjdGlvbnNfXy5wdXNoKHtcbiAgICAgICAgJ2Z1bmMnOiB0aHJ1LFxuICAgICAgICAnYXJncyc6IFtpbnRlcmNlcHRvcl0sXG4gICAgICAgICd0aGlzQXJnJzogdW5kZWZpbmVkXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBuZXcgTG9kYXNoV3JhcHBlcih2YWx1ZSwgdGhpcy5fX2NoYWluX18pLnRocnUoZnVuY3Rpb24oYXJyYXkpIHtcbiAgICAgICAgaWYgKGxlbmd0aCAmJiAhYXJyYXkubGVuZ3RoKSB7XG4gICAgICAgICAgYXJyYXkucHVzaCh1bmRlZmluZWQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcnJheTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGBsb2Rhc2hgIHdyYXBwZXIgaW5zdGFuY2Ugd2l0aCBleHBsaWNpdCBtZXRob2QgY2hhaW4gc2VxdWVuY2VzIGVuYWJsZWQuXG4gICAgICpcbiAgICAgKiBAbmFtZSBjaGFpblxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IFNlcVxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBgbG9kYXNoYCB3cmFwcGVyIGluc3RhbmNlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgdXNlcnMgPSBbXG4gICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScsICdhZ2UnOiAzNiB9LFxuICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAnYWdlJzogNDAgfVxuICAgICAqIF07XG4gICAgICpcbiAgICAgKiAvLyBBIHNlcXVlbmNlIHdpdGhvdXQgZXhwbGljaXQgY2hhaW5pbmcuXG4gICAgICogXyh1c2VycykuaGVhZCgpO1xuICAgICAqIC8vID0+IHsgJ3VzZXInOiAnYmFybmV5JywgJ2FnZSc6IDM2IH1cbiAgICAgKlxuICAgICAqIC8vIEEgc2VxdWVuY2Ugd2l0aCBleHBsaWNpdCBjaGFpbmluZy5cbiAgICAgKiBfKHVzZXJzKVxuICAgICAqICAgLmNoYWluKClcbiAgICAgKiAgIC5oZWFkKClcbiAgICAgKiAgIC5waWNrKCd1c2VyJylcbiAgICAgKiAgIC52YWx1ZSgpO1xuICAgICAqIC8vID0+IHsgJ3VzZXInOiAnYmFybmV5JyB9XG4gICAgICovXG4gICAgZnVuY3Rpb24gd3JhcHBlckNoYWluKCkge1xuICAgICAgcmV0dXJuIGNoYWluKHRoaXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEV4ZWN1dGVzIHRoZSBjaGFpbiBzZXF1ZW5jZSBhbmQgcmV0dXJucyB0aGUgd3JhcHBlZCByZXN1bHQuXG4gICAgICpcbiAgICAgKiBAbmFtZSBjb21taXRcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjIuMFxuICAgICAqIEBjYXRlZ29yeSBTZXFcbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgYGxvZGFzaGAgd3JhcHBlciBpbnN0YW5jZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGFycmF5ID0gWzEsIDJdO1xuICAgICAqIHZhciB3cmFwcGVkID0gXyhhcnJheSkucHVzaCgzKTtcbiAgICAgKlxuICAgICAqIGNvbnNvbGUubG9nKGFycmF5KTtcbiAgICAgKiAvLyA9PiBbMSwgMl1cbiAgICAgKlxuICAgICAqIHdyYXBwZWQgPSB3cmFwcGVkLmNvbW1pdCgpO1xuICAgICAqIGNvbnNvbGUubG9nKGFycmF5KTtcbiAgICAgKiAvLyA9PiBbMSwgMiwgM11cbiAgICAgKlxuICAgICAqIHdyYXBwZWQubGFzdCgpO1xuICAgICAqIC8vID0+IDNcbiAgICAgKlxuICAgICAqIGNvbnNvbGUubG9nKGFycmF5KTtcbiAgICAgKiAvLyA9PiBbMSwgMiwgM11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB3cmFwcGVyQ29tbWl0KCkge1xuICAgICAgcmV0dXJuIG5ldyBMb2Rhc2hXcmFwcGVyKHRoaXMudmFsdWUoKSwgdGhpcy5fX2NoYWluX18pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIG5leHQgdmFsdWUgb24gYSB3cmFwcGVkIG9iamVjdCBmb2xsb3dpbmcgdGhlXG4gICAgICogW2l0ZXJhdG9yIHByb3RvY29sXShodHRwczovL21kbi5pby9pdGVyYXRpb25fcHJvdG9jb2xzI2l0ZXJhdG9yKS5cbiAgICAgKlxuICAgICAqIEBuYW1lIG5leHRcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBTZXFcbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXh0IGl0ZXJhdG9yIHZhbHVlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgd3JhcHBlZCA9IF8oWzEsIDJdKTtcbiAgICAgKlxuICAgICAqIHdyYXBwZWQubmV4dCgpO1xuICAgICAqIC8vID0+IHsgJ2RvbmUnOiBmYWxzZSwgJ3ZhbHVlJzogMSB9XG4gICAgICpcbiAgICAgKiB3cmFwcGVkLm5leHQoKTtcbiAgICAgKiAvLyA9PiB7ICdkb25lJzogZmFsc2UsICd2YWx1ZSc6IDIgfVxuICAgICAqXG4gICAgICogd3JhcHBlZC5uZXh0KCk7XG4gICAgICogLy8gPT4geyAnZG9uZSc6IHRydWUsICd2YWx1ZSc6IHVuZGVmaW5lZCB9XG4gICAgICovXG4gICAgZnVuY3Rpb24gd3JhcHBlck5leHQoKSB7XG4gICAgICBpZiAodGhpcy5fX3ZhbHVlc19fID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5fX3ZhbHVlc19fID0gdG9BcnJheSh0aGlzLnZhbHVlKCkpO1xuICAgICAgfVxuICAgICAgdmFyIGRvbmUgPSB0aGlzLl9faW5kZXhfXyA+PSB0aGlzLl9fdmFsdWVzX18ubGVuZ3RoLFxuICAgICAgICAgIHZhbHVlID0gZG9uZSA/IHVuZGVmaW5lZCA6IHRoaXMuX192YWx1ZXNfX1t0aGlzLl9faW5kZXhfXysrXTtcblxuICAgICAgcmV0dXJuIHsgJ2RvbmUnOiBkb25lLCAndmFsdWUnOiB2YWx1ZSB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVuYWJsZXMgdGhlIHdyYXBwZXIgdG8gYmUgaXRlcmFibGUuXG4gICAgICpcbiAgICAgKiBAbmFtZSBTeW1ib2wuaXRlcmF0b3JcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBTZXFcbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSB3cmFwcGVyIG9iamVjdC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHdyYXBwZWQgPSBfKFsxLCAyXSk7XG4gICAgICpcbiAgICAgKiB3cmFwcGVkW1N5bWJvbC5pdGVyYXRvcl0oKSA9PT0gd3JhcHBlZDtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBBcnJheS5mcm9tKHdyYXBwZWQpO1xuICAgICAqIC8vID0+IFsxLCAyXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHdyYXBwZXJUb0l0ZXJhdG9yKCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoZSBjaGFpbiBzZXF1ZW5jZSBwbGFudGluZyBgdmFsdWVgIGFzIHRoZSB3cmFwcGVkIHZhbHVlLlxuICAgICAqXG4gICAgICogQG5hbWUgcGxhbnRcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjIuMFxuICAgICAqIEBjYXRlZ29yeSBTZXFcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwbGFudC5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgYGxvZGFzaGAgd3JhcHBlciBpbnN0YW5jZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gc3F1YXJlKG4pIHtcbiAgICAgKiAgIHJldHVybiBuICogbjtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiB2YXIgd3JhcHBlZCA9IF8oWzEsIDJdKS5tYXAoc3F1YXJlKTtcbiAgICAgKiB2YXIgb3RoZXIgPSB3cmFwcGVkLnBsYW50KFszLCA0XSk7XG4gICAgICpcbiAgICAgKiBvdGhlci52YWx1ZSgpO1xuICAgICAqIC8vID0+IFs5LCAxNl1cbiAgICAgKlxuICAgICAqIHdyYXBwZWQudmFsdWUoKTtcbiAgICAgKiAvLyA9PiBbMSwgNF1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB3cmFwcGVyUGxhbnQodmFsdWUpIHtcbiAgICAgIHZhciByZXN1bHQsXG4gICAgICAgICAgcGFyZW50ID0gdGhpcztcblxuICAgICAgd2hpbGUgKHBhcmVudCBpbnN0YW5jZW9mIGJhc2VMb2Rhc2gpIHtcbiAgICAgICAgdmFyIGNsb25lID0gd3JhcHBlckNsb25lKHBhcmVudCk7XG4gICAgICAgIGNsb25lLl9faW5kZXhfXyA9IDA7XG4gICAgICAgIGNsb25lLl9fdmFsdWVzX18gPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICBwcmV2aW91cy5fX3dyYXBwZWRfXyA9IGNsb25lO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3VsdCA9IGNsb25lO1xuICAgICAgICB9XG4gICAgICAgIHZhciBwcmV2aW91cyA9IGNsb25lO1xuICAgICAgICBwYXJlbnQgPSBwYXJlbnQuX193cmFwcGVkX187XG4gICAgICB9XG4gICAgICBwcmV2aW91cy5fX3dyYXBwZWRfXyA9IHZhbHVlO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyB0aGUgd3JhcHBlciB2ZXJzaW9uIG9mIGBfLnJldmVyc2VgLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgdGhlIHdyYXBwZWQgYXJyYXkuXG4gICAgICpcbiAgICAgKiBAbmFtZSByZXZlcnNlXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgU2VxXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IGBsb2Rhc2hgIHdyYXBwZXIgaW5zdGFuY2UuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBhcnJheSA9IFsxLCAyLCAzXTtcbiAgICAgKlxuICAgICAqIF8oYXJyYXkpLnJldmVyc2UoKS52YWx1ZSgpXG4gICAgICogLy8gPT4gWzMsIDIsIDFdXG4gICAgICpcbiAgICAgKiBjb25zb2xlLmxvZyhhcnJheSk7XG4gICAgICogLy8gPT4gWzMsIDIsIDFdXG4gICAgICovXG4gICAgZnVuY3Rpb24gd3JhcHBlclJldmVyc2UoKSB7XG4gICAgICB2YXIgdmFsdWUgPSB0aGlzLl9fd3JhcHBlZF9fO1xuICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgTGF6eVdyYXBwZXIpIHtcbiAgICAgICAgdmFyIHdyYXBwZWQgPSB2YWx1ZTtcbiAgICAgICAgaWYgKHRoaXMuX19hY3Rpb25zX18ubGVuZ3RoKSB7XG4gICAgICAgICAgd3JhcHBlZCA9IG5ldyBMYXp5V3JhcHBlcih0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICB3cmFwcGVkID0gd3JhcHBlZC5yZXZlcnNlKCk7XG4gICAgICAgIHdyYXBwZWQuX19hY3Rpb25zX18ucHVzaCh7XG4gICAgICAgICAgJ2Z1bmMnOiB0aHJ1LFxuICAgICAgICAgICdhcmdzJzogW3JldmVyc2VdLFxuICAgICAgICAgICd0aGlzQXJnJzogdW5kZWZpbmVkXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbmV3IExvZGFzaFdyYXBwZXIod3JhcHBlZCwgdGhpcy5fX2NoYWluX18pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMudGhydShyZXZlcnNlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFeGVjdXRlcyB0aGUgY2hhaW4gc2VxdWVuY2UgdG8gcmVzb2x2ZSB0aGUgdW53cmFwcGVkIHZhbHVlLlxuICAgICAqXG4gICAgICogQG5hbWUgdmFsdWVcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBhbGlhcyB0b0pTT04sIHZhbHVlT2ZcbiAgICAgKiBAY2F0ZWdvcnkgU2VxXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc29sdmVkIHVud3JhcHBlZCB2YWx1ZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXyhbMSwgMiwgM10pLnZhbHVlKCk7XG4gICAgICogLy8gPT4gWzEsIDIsIDNdXG4gICAgICovXG4gICAgZnVuY3Rpb24gd3JhcHBlclZhbHVlKCkge1xuICAgICAgcmV0dXJuIGJhc2VXcmFwcGVyVmFsdWUodGhpcy5fX3dyYXBwZWRfXywgdGhpcy5fX2FjdGlvbnNfXyk7XG4gICAgfVxuXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBvYmplY3QgY29tcG9zZWQgb2Yga2V5cyBnZW5lcmF0ZWQgZnJvbSB0aGUgcmVzdWx0cyBvZiBydW5uaW5nXG4gICAgICogZWFjaCBlbGVtZW50IG9mIGBjb2xsZWN0aW9uYCB0aHJ1IGBpdGVyYXRlZWAuIFRoZSBjb3JyZXNwb25kaW5nIHZhbHVlIG9mXG4gICAgICogZWFjaCBrZXkgaXMgdGhlIG51bWJlciBvZiB0aW1lcyB0aGUga2V5IHdhcyByZXR1cm5lZCBieSBgaXRlcmF0ZWVgLiBUaGVcbiAgICAgKiBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OiAodmFsdWUpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuNS4wXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBpdGVyYXRlZSB0byB0cmFuc2Zvcm0ga2V5cy5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjb21wb3NlZCBhZ2dyZWdhdGUgb2JqZWN0LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmNvdW50QnkoWzYuMSwgNC4yLCA2LjNdLCBNYXRoLmZsb29yKTtcbiAgICAgKiAvLyA9PiB7ICc0JzogMSwgJzYnOiAyIH1cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uY291bnRCeShbJ29uZScsICd0d28nLCAndGhyZWUnXSwgJ2xlbmd0aCcpO1xuICAgICAqIC8vID0+IHsgJzMnOiAyLCAnNSc6IDEgfVxuICAgICAqL1xuICAgIHZhciBjb3VudEJ5ID0gY3JlYXRlQWdncmVnYXRvcihmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHtcbiAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHJlc3VsdCwga2V5KSkge1xuICAgICAgICArK3Jlc3VsdFtrZXldO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYmFzZUFzc2lnblZhbHVlKHJlc3VsdCwga2V5LCAxKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgcHJlZGljYXRlYCByZXR1cm5zIHRydXRoeSBmb3IgKiphbGwqKiBlbGVtZW50cyBvZiBgY29sbGVjdGlvbmAuXG4gICAgICogSXRlcmF0aW9uIGlzIHN0b3BwZWQgb25jZSBgcHJlZGljYXRlYCByZXR1cm5zIGZhbHNleS4gVGhlIHByZWRpY2F0ZSBpc1xuICAgICAqIGludm9rZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6ICh2YWx1ZSwgaW5kZXh8a2V5LCBjb2xsZWN0aW9uKS5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCByZXR1cm5zIGB0cnVlYCBmb3JcbiAgICAgKiBbZW1wdHkgY29sbGVjdGlvbnNdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0VtcHR5X3NldCkgYmVjYXVzZVxuICAgICAqIFtldmVyeXRoaW5nIGlzIHRydWVdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1ZhY3VvdXNfdHJ1dGgpIG9mXG4gICAgICogZWxlbWVudHMgb2YgZW1wdHkgY29sbGVjdGlvbnMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ubWFwYC5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYWxsIGVsZW1lbnRzIHBhc3MgdGhlIHByZWRpY2F0ZSBjaGVjayxcbiAgICAgKiAgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmV2ZXJ5KFt0cnVlLCAxLCBudWxsLCAneWVzJ10sIEJvb2xlYW4pO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiB2YXIgdXNlcnMgPSBbXG4gICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScsICdhZ2UnOiAzNiwgJ2FjdGl2ZSc6IGZhbHNlIH0sXG4gICAgICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICdhZ2UnOiA0MCwgJ2FjdGl2ZSc6IGZhbHNlIH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmV2ZXJ5KHVzZXJzLCB7ICd1c2VyJzogJ2Jhcm5leScsICdhY3RpdmUnOiBmYWxzZSB9KTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZXZlcnkodXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmV2ZXJ5KHVzZXJzLCAnYWN0aXZlJyk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBldmVyeShjb2xsZWN0aW9uLCBwcmVkaWNhdGUsIGd1YXJkKSB7XG4gICAgICB2YXIgZnVuYyA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyBhcnJheUV2ZXJ5IDogYmFzZUV2ZXJ5O1xuICAgICAgaWYgKGd1YXJkICYmIGlzSXRlcmF0ZWVDYWxsKGNvbGxlY3Rpb24sIHByZWRpY2F0ZSwgZ3VhcmQpKSB7XG4gICAgICAgIHByZWRpY2F0ZSA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmdW5jKGNvbGxlY3Rpb24sIGdldEl0ZXJhdGVlKHByZWRpY2F0ZSwgMykpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEl0ZXJhdGVzIG92ZXIgZWxlbWVudHMgb2YgYGNvbGxlY3Rpb25gLCByZXR1cm5pbmcgYW4gYXJyYXkgb2YgYWxsIGVsZW1lbnRzXG4gICAgICogYHByZWRpY2F0ZWAgcmV0dXJucyB0cnV0aHkgZm9yLiBUaGUgcHJlZGljYXRlIGlzIGludm9rZWQgd2l0aCB0aHJlZVxuICAgICAqIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleHxrZXksIGNvbGxlY3Rpb24pLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFVubGlrZSBgXy5yZW1vdmVgLCB0aGlzIG1ldGhvZCByZXR1cm5zIGEgbmV3IGFycmF5LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZpbHRlcmVkIGFycmF5LlxuICAgICAqIEBzZWUgXy5yZWplY3RcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0gW1xuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzYsICdhY3RpdmUnOiB0cnVlIH0sXG4gICAgICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICdhZ2UnOiA0MCwgJ2FjdGl2ZSc6IGZhbHNlIH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogXy5maWx0ZXIodXNlcnMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuICFvLmFjdGl2ZTsgfSk7XG4gICAgICogLy8gPT4gb2JqZWN0cyBmb3IgWydmcmVkJ11cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5maWx0ZXIodXNlcnMsIHsgJ2FnZSc6IDM2LCAnYWN0aXZlJzogdHJ1ZSB9KTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ2Jhcm5leSddXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5maWx0ZXIodXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ2ZyZWQnXVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5maWx0ZXIodXNlcnMsICdhY3RpdmUnKTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ2Jhcm5leSddXG4gICAgICpcbiAgICAgKiAvLyBDb21iaW5pbmcgc2V2ZXJhbCBwcmVkaWNhdGVzIHVzaW5nIGBfLm92ZXJFdmVyeWAgb3IgYF8ub3ZlclNvbWVgLlxuICAgICAqIF8uZmlsdGVyKHVzZXJzLCBfLm92ZXJTb21lKFt7ICdhZ2UnOiAzNiB9LCBbJ2FnZScsIDQwXV0pKTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ2ZyZWQnLCAnYmFybmV5J11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmaWx0ZXIoY29sbGVjdGlvbiwgcHJlZGljYXRlKSB7XG4gICAgICB2YXIgZnVuYyA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyBhcnJheUZpbHRlciA6IGJhc2VGaWx0ZXI7XG4gICAgICByZXR1cm4gZnVuYyhjb2xsZWN0aW9uLCBnZXRJdGVyYXRlZShwcmVkaWNhdGUsIDMpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJdGVyYXRlcyBvdmVyIGVsZW1lbnRzIG9mIGBjb2xsZWN0aW9uYCwgcmV0dXJuaW5nIHRoZSBmaXJzdCBlbGVtZW50XG4gICAgICogYHByZWRpY2F0ZWAgcmV0dXJucyB0cnV0aHkgZm9yLiBUaGUgcHJlZGljYXRlIGlzIGludm9rZWQgd2l0aCB0aHJlZVxuICAgICAqIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleHxrZXksIGNvbGxlY3Rpb24pLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2Zyb21JbmRleD0wXSBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1hdGNoZWQgZWxlbWVudCwgZWxzZSBgdW5kZWZpbmVkYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0gW1xuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAgJ2FnZSc6IDM2LCAnYWN0aXZlJzogdHJ1ZSB9LFxuICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAgJ2FnZSc6IDQwLCAnYWN0aXZlJzogZmFsc2UgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAncGViYmxlcycsICdhZ2UnOiAxLCAgJ2FjdGl2ZSc6IHRydWUgfVxuICAgICAqIF07XG4gICAgICpcbiAgICAgKiBfLmZpbmQodXNlcnMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuIG8uYWdlIDwgNDA7IH0pO1xuICAgICAqIC8vID0+IG9iamVjdCBmb3IgJ2Jhcm5leSdcbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5maW5kKHVzZXJzLCB7ICdhZ2UnOiAxLCAnYWN0aXZlJzogdHJ1ZSB9KTtcbiAgICAgKiAvLyA9PiBvYmplY3QgZm9yICdwZWJibGVzJ1xuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZmluZCh1c2VycywgWydhY3RpdmUnLCBmYWxzZV0pO1xuICAgICAqIC8vID0+IG9iamVjdCBmb3IgJ2ZyZWQnXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmZpbmQodXNlcnMsICdhY3RpdmUnKTtcbiAgICAgKiAvLyA9PiBvYmplY3QgZm9yICdiYXJuZXknXG4gICAgICovXG4gICAgdmFyIGZpbmQgPSBjcmVhdGVGaW5kKGZpbmRJbmRleCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmZpbmRgIGV4Y2VwdCB0aGF0IGl0IGl0ZXJhdGVzIG92ZXIgZWxlbWVudHMgb2ZcbiAgICAgKiBgY29sbGVjdGlvbmAgZnJvbSByaWdodCB0byBsZWZ0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDIuMC4wXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2Zyb21JbmRleD1jb2xsZWN0aW9uLmxlbmd0aC0xXSBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1hdGNoZWQgZWxlbWVudCwgZWxzZSBgdW5kZWZpbmVkYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5maW5kTGFzdChbMSwgMiwgMywgNF0sIGZ1bmN0aW9uKG4pIHtcbiAgICAgKiAgIHJldHVybiBuICUgMiA9PSAxO1xuICAgICAqIH0pO1xuICAgICAqIC8vID0+IDNcbiAgICAgKi9cbiAgICB2YXIgZmluZExhc3QgPSBjcmVhdGVGaW5kKGZpbmRMYXN0SW5kZXgpO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZsYXR0ZW5lZCBhcnJheSBvZiB2YWx1ZXMgYnkgcnVubmluZyBlYWNoIGVsZW1lbnQgaW4gYGNvbGxlY3Rpb25gXG4gICAgICogdGhydSBgaXRlcmF0ZWVgIGFuZCBmbGF0dGVuaW5nIHRoZSBtYXBwZWQgcmVzdWx0cy4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWRcbiAgICAgKiB3aXRoIHRocmVlIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleHxrZXksIGNvbGxlY3Rpb24pLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmxhdHRlbmVkIGFycmF5LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBkdXBsaWNhdGUobikge1xuICAgICAqICAgcmV0dXJuIFtuLCBuXTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBfLmZsYXRNYXAoWzEsIDJdLCBkdXBsaWNhdGUpO1xuICAgICAqIC8vID0+IFsxLCAxLCAyLCAyXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZsYXRNYXAoY29sbGVjdGlvbiwgaXRlcmF0ZWUpIHtcbiAgICAgIHJldHVybiBiYXNlRmxhdHRlbihtYXAoY29sbGVjdGlvbiwgaXRlcmF0ZWUpLCAxKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmZsYXRNYXBgIGV4Y2VwdCB0aGF0IGl0IHJlY3Vyc2l2ZWx5IGZsYXR0ZW5zIHRoZVxuICAgICAqIG1hcHBlZCByZXN1bHRzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuNy4wXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmxhdHRlbmVkIGFycmF5LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBkdXBsaWNhdGUobikge1xuICAgICAqICAgcmV0dXJuIFtbW24sIG5dXV07XG4gICAgICogfVxuICAgICAqXG4gICAgICogXy5mbGF0TWFwRGVlcChbMSwgMl0sIGR1cGxpY2F0ZSk7XG4gICAgICogLy8gPT4gWzEsIDEsIDIsIDJdXG4gICAgICovXG4gICAgZnVuY3Rpb24gZmxhdE1hcERlZXAoY29sbGVjdGlvbiwgaXRlcmF0ZWUpIHtcbiAgICAgIHJldHVybiBiYXNlRmxhdHRlbihtYXAoY29sbGVjdGlvbiwgaXRlcmF0ZWUpLCBJTkZJTklUWSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5mbGF0TWFwYCBleGNlcHQgdGhhdCBpdCByZWN1cnNpdmVseSBmbGF0dGVucyB0aGVcbiAgICAgKiBtYXBwZWQgcmVzdWx0cyB1cCB0byBgZGVwdGhgIHRpbWVzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuNy4wXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtkZXB0aD0xXSBUaGUgbWF4aW11bSByZWN1cnNpb24gZGVwdGguXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmxhdHRlbmVkIGFycmF5LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBkdXBsaWNhdGUobikge1xuICAgICAqICAgcmV0dXJuIFtbW24sIG5dXV07XG4gICAgICogfVxuICAgICAqXG4gICAgICogXy5mbGF0TWFwRGVwdGgoWzEsIDJdLCBkdXBsaWNhdGUsIDIpO1xuICAgICAqIC8vID0+IFtbMSwgMV0sIFsyLCAyXV1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmbGF0TWFwRGVwdGgoY29sbGVjdGlvbiwgaXRlcmF0ZWUsIGRlcHRoKSB7XG4gICAgICBkZXB0aCA9IGRlcHRoID09PSB1bmRlZmluZWQgPyAxIDogdG9JbnRlZ2VyKGRlcHRoKTtcbiAgICAgIHJldHVybiBiYXNlRmxhdHRlbihtYXAoY29sbGVjdGlvbiwgaXRlcmF0ZWUpLCBkZXB0aCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSXRlcmF0ZXMgb3ZlciBlbGVtZW50cyBvZiBgY29sbGVjdGlvbmAgYW5kIGludm9rZXMgYGl0ZXJhdGVlYCBmb3IgZWFjaCBlbGVtZW50LlxuICAgICAqIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggdGhyZWUgYXJndW1lbnRzOiAodmFsdWUsIGluZGV4fGtleSwgY29sbGVjdGlvbikuXG4gICAgICogSXRlcmF0ZWUgZnVuY3Rpb25zIG1heSBleGl0IGl0ZXJhdGlvbiBlYXJseSBieSBleHBsaWNpdGx5IHJldHVybmluZyBgZmFsc2VgLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIEFzIHdpdGggb3RoZXIgXCJDb2xsZWN0aW9uc1wiIG1ldGhvZHMsIG9iamVjdHMgd2l0aCBhIFwibGVuZ3RoXCJcbiAgICAgKiBwcm9wZXJ0eSBhcmUgaXRlcmF0ZWQgbGlrZSBhcnJheXMuIFRvIGF2b2lkIHRoaXMgYmVoYXZpb3IgdXNlIGBfLmZvckluYFxuICAgICAqIG9yIGBfLmZvck93bmAgZm9yIG9iamVjdCBpdGVyYXRpb24uXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAYWxpYXMgZWFjaFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheXxPYmplY3R9IFJldHVybnMgYGNvbGxlY3Rpb25gLlxuICAgICAqIEBzZWUgXy5mb3JFYWNoUmlnaHRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5mb3JFYWNoKFsxLCAyXSwgZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKHZhbHVlKTtcbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiBMb2dzIGAxYCB0aGVuIGAyYC5cbiAgICAgKlxuICAgICAqIF8uZm9yRWFjaCh7ICdhJzogMSwgJ2InOiAyIH0sIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKGtleSk7XG4gICAgICogfSk7XG4gICAgICogLy8gPT4gTG9ncyAnYScgdGhlbiAnYicgKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZCkuXG4gICAgICovXG4gICAgZnVuY3Rpb24gZm9yRWFjaChjb2xsZWN0aW9uLCBpdGVyYXRlZSkge1xuICAgICAgdmFyIGZ1bmMgPSBpc0FycmF5KGNvbGxlY3Rpb24pID8gYXJyYXlFYWNoIDogYmFzZUVhY2g7XG4gICAgICByZXR1cm4gZnVuYyhjb2xsZWN0aW9uLCBnZXRJdGVyYXRlZShpdGVyYXRlZSwgMykpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZm9yRWFjaGAgZXhjZXB0IHRoYXQgaXQgaXRlcmF0ZXMgb3ZlciBlbGVtZW50cyBvZlxuICAgICAqIGBjb2xsZWN0aW9uYCBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMi4wLjBcbiAgICAgKiBAYWxpYXMgZWFjaFJpZ2h0XG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge0FycmF5fE9iamVjdH0gUmV0dXJucyBgY29sbGVjdGlvbmAuXG4gICAgICogQHNlZSBfLmZvckVhY2hcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5mb3JFYWNoUmlnaHQoWzEsIDJdLCBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAqICAgY29uc29sZS5sb2codmFsdWUpO1xuICAgICAqIH0pO1xuICAgICAqIC8vID0+IExvZ3MgYDJgIHRoZW4gYDFgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZvckVhY2hSaWdodChjb2xsZWN0aW9uLCBpdGVyYXRlZSkge1xuICAgICAgdmFyIGZ1bmMgPSBpc0FycmF5KGNvbGxlY3Rpb24pID8gYXJyYXlFYWNoUmlnaHQgOiBiYXNlRWFjaFJpZ2h0O1xuICAgICAgcmV0dXJuIGZ1bmMoY29sbGVjdGlvbiwgZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDMpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIG9iamVjdCBjb21wb3NlZCBvZiBrZXlzIGdlbmVyYXRlZCBmcm9tIHRoZSByZXN1bHRzIG9mIHJ1bm5pbmdcbiAgICAgKiBlYWNoIGVsZW1lbnQgb2YgYGNvbGxlY3Rpb25gIHRocnUgYGl0ZXJhdGVlYC4gVGhlIG9yZGVyIG9mIGdyb3VwZWQgdmFsdWVzXG4gICAgICogaXMgZGV0ZXJtaW5lZCBieSB0aGUgb3JkZXIgdGhleSBvY2N1ciBpbiBgY29sbGVjdGlvbmAuIFRoZSBjb3JyZXNwb25kaW5nXG4gICAgICogdmFsdWUgb2YgZWFjaCBrZXkgaXMgYW4gYXJyYXkgb2YgZWxlbWVudHMgcmVzcG9uc2libGUgZm9yIGdlbmVyYXRpbmcgdGhlXG4gICAgICoga2V5LiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDogKHZhbHVlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgaXRlcmF0ZWUgdG8gdHJhbnNmb3JtIGtleXMuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY29tcG9zZWQgYWdncmVnYXRlIG9iamVjdC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5ncm91cEJ5KFs2LjEsIDQuMiwgNi4zXSwgTWF0aC5mbG9vcik7XG4gICAgICogLy8gPT4geyAnNCc6IFs0LjJdLCAnNic6IFs2LjEsIDYuM10gfVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5ncm91cEJ5KFsnb25lJywgJ3R3bycsICd0aHJlZSddLCAnbGVuZ3RoJyk7XG4gICAgICogLy8gPT4geyAnMyc6IFsnb25lJywgJ3R3byddLCAnNSc6IFsndGhyZWUnXSB9XG4gICAgICovXG4gICAgdmFyIGdyb3VwQnkgPSBjcmVhdGVBZ2dyZWdhdG9yKGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkge1xuICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwocmVzdWx0LCBrZXkpKSB7XG4gICAgICAgIHJlc3VsdFtrZXldLnB1c2godmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYmFzZUFzc2lnblZhbHVlKHJlc3VsdCwga2V5LCBbdmFsdWVdKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGluIGBjb2xsZWN0aW9uYC4gSWYgYGNvbGxlY3Rpb25gIGlzIGEgc3RyaW5nLCBpdCdzXG4gICAgICogY2hlY2tlZCBmb3IgYSBzdWJzdHJpbmcgb2YgYHZhbHVlYCwgb3RoZXJ3aXNlXG4gICAgICogW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAgICAgKiBpcyB1c2VkIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy4gSWYgYGZyb21JbmRleGAgaXMgbmVnYXRpdmUsIGl0J3MgdXNlZCBhc1xuICAgICAqIHRoZSBvZmZzZXQgZnJvbSB0aGUgZW5kIG9mIGBjb2xsZWN0aW9uYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R8c3RyaW5nfSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2Zyb21JbmRleD0wXSBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gICAgICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ucmVkdWNlYC5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBmb3VuZCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmluY2x1ZGVzKFsxLCAyLCAzXSwgMSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pbmNsdWRlcyhbMSwgMiwgM10sIDEsIDIpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLmluY2x1ZGVzKHsgJ2EnOiAxLCAnYic6IDIgfSwgMSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pbmNsdWRlcygnYWJjZCcsICdiYycpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpbmNsdWRlcyhjb2xsZWN0aW9uLCB2YWx1ZSwgZnJvbUluZGV4LCBndWFyZCkge1xuICAgICAgY29sbGVjdGlvbiA9IGlzQXJyYXlMaWtlKGNvbGxlY3Rpb24pID8gY29sbGVjdGlvbiA6IHZhbHVlcyhjb2xsZWN0aW9uKTtcbiAgICAgIGZyb21JbmRleCA9IChmcm9tSW5kZXggJiYgIWd1YXJkKSA/IHRvSW50ZWdlcihmcm9tSW5kZXgpIDogMDtcblxuICAgICAgdmFyIGxlbmd0aCA9IGNvbGxlY3Rpb24ubGVuZ3RoO1xuICAgICAgaWYgKGZyb21JbmRleCA8IDApIHtcbiAgICAgICAgZnJvbUluZGV4ID0gbmF0aXZlTWF4KGxlbmd0aCArIGZyb21JbmRleCwgMCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gaXNTdHJpbmcoY29sbGVjdGlvbilcbiAgICAgICAgPyAoZnJvbUluZGV4IDw9IGxlbmd0aCAmJiBjb2xsZWN0aW9uLmluZGV4T2YodmFsdWUsIGZyb21JbmRleCkgPiAtMSlcbiAgICAgICAgOiAoISFsZW5ndGggJiYgYmFzZUluZGV4T2YoY29sbGVjdGlvbiwgdmFsdWUsIGZyb21JbmRleCkgPiAtMSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW52b2tlcyB0aGUgbWV0aG9kIGF0IGBwYXRoYCBvZiBlYWNoIGVsZW1lbnQgaW4gYGNvbGxlY3Rpb25gLCByZXR1cm5pbmdcbiAgICAgKiBhbiBhcnJheSBvZiB0aGUgcmVzdWx0cyBvZiBlYWNoIGludm9rZWQgbWV0aG9kLiBBbnkgYWRkaXRpb25hbCBhcmd1bWVudHNcbiAgICAgKiBhcmUgcHJvdmlkZWQgdG8gZWFjaCBpbnZva2VkIG1ldGhvZC4gSWYgYHBhdGhgIGlzIGEgZnVuY3Rpb24sIGl0J3MgaW52b2tlZFxuICAgICAqIGZvciwgYW5kIGB0aGlzYCBib3VuZCB0bywgZWFjaCBlbGVtZW50IGluIGBjb2xsZWN0aW9uYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7QXJyYXl8RnVuY3Rpb258c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBtZXRob2QgdG8gaW52b2tlIG9yXG4gICAgICogIHRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHsuLi4qfSBbYXJnc10gVGhlIGFyZ3VtZW50cyB0byBpbnZva2UgZWFjaCBtZXRob2Qgd2l0aC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHJlc3VsdHMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaW52b2tlTWFwKFtbNSwgMSwgN10sIFszLCAyLCAxXV0sICdzb3J0Jyk7XG4gICAgICogLy8gPT4gW1sxLCA1LCA3XSwgWzEsIDIsIDNdXVxuICAgICAqXG4gICAgICogXy5pbnZva2VNYXAoWzEyMywgNDU2XSwgU3RyaW5nLnByb3RvdHlwZS5zcGxpdCwgJycpO1xuICAgICAqIC8vID0+IFtbJzEnLCAnMicsICczJ10sIFsnNCcsICc1JywgJzYnXV1cbiAgICAgKi9cbiAgICB2YXIgaW52b2tlTWFwID0gYmFzZVJlc3QoZnVuY3Rpb24oY29sbGVjdGlvbiwgcGF0aCwgYXJncykge1xuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgaXNGdW5jID0gdHlwZW9mIHBhdGggPT0gJ2Z1bmN0aW9uJyxcbiAgICAgICAgICByZXN1bHQgPSBpc0FycmF5TGlrZShjb2xsZWN0aW9uKSA/IEFycmF5KGNvbGxlY3Rpb24ubGVuZ3RoKSA6IFtdO1xuXG4gICAgICBiYXNlRWFjaChjb2xsZWN0aW9uLCBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICByZXN1bHRbKytpbmRleF0gPSBpc0Z1bmMgPyBhcHBseShwYXRoLCB2YWx1ZSwgYXJncykgOiBiYXNlSW52b2tlKHZhbHVlLCBwYXRoLCBhcmdzKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gb2JqZWN0IGNvbXBvc2VkIG9mIGtleXMgZ2VuZXJhdGVkIGZyb20gdGhlIHJlc3VsdHMgb2YgcnVubmluZ1xuICAgICAqIGVhY2ggZWxlbWVudCBvZiBgY29sbGVjdGlvbmAgdGhydSBgaXRlcmF0ZWVgLiBUaGUgY29ycmVzcG9uZGluZyB2YWx1ZSBvZlxuICAgICAqIGVhY2gga2V5IGlzIHRoZSBsYXN0IGVsZW1lbnQgcmVzcG9uc2libGUgZm9yIGdlbmVyYXRpbmcgdGhlIGtleS4gVGhlXG4gICAgICogaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDogKHZhbHVlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgaXRlcmF0ZWUgdG8gdHJhbnNmb3JtIGtleXMuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY29tcG9zZWQgYWdncmVnYXRlIG9iamVjdC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGFycmF5ID0gW1xuICAgICAqICAgeyAnZGlyJzogJ2xlZnQnLCAnY29kZSc6IDk3IH0sXG4gICAgICogICB7ICdkaXInOiAncmlnaHQnLCAnY29kZSc6IDEwMCB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIF8ua2V5QnkoYXJyYXksIGZ1bmN0aW9uKG8pIHtcbiAgICAgKiAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKG8uY29kZSk7XG4gICAgICogfSk7XG4gICAgICogLy8gPT4geyAnYSc6IHsgJ2Rpcic6ICdsZWZ0JywgJ2NvZGUnOiA5NyB9LCAnZCc6IHsgJ2Rpcic6ICdyaWdodCcsICdjb2RlJzogMTAwIH0gfVxuICAgICAqXG4gICAgICogXy5rZXlCeShhcnJheSwgJ2RpcicpO1xuICAgICAqIC8vID0+IHsgJ2xlZnQnOiB7ICdkaXInOiAnbGVmdCcsICdjb2RlJzogOTcgfSwgJ3JpZ2h0JzogeyAnZGlyJzogJ3JpZ2h0JywgJ2NvZGUnOiAxMDAgfSB9XG4gICAgICovXG4gICAgdmFyIGtleUJ5ID0gY3JlYXRlQWdncmVnYXRvcihmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHtcbiAgICAgIGJhc2VBc3NpZ25WYWx1ZShyZXN1bHQsIGtleSwgdmFsdWUpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiB2YWx1ZXMgYnkgcnVubmluZyBlYWNoIGVsZW1lbnQgaW4gYGNvbGxlY3Rpb25gIHRocnVcbiAgICAgKiBgaXRlcmF0ZWVgLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIHRocmVlIGFyZ3VtZW50czpcbiAgICAgKiAodmFsdWUsIGluZGV4fGtleSwgY29sbGVjdGlvbikuXG4gICAgICpcbiAgICAgKiBNYW55IGxvZGFzaCBtZXRob2RzIGFyZSBndWFyZGVkIHRvIHdvcmsgYXMgaXRlcmF0ZWVzIGZvciBtZXRob2RzIGxpa2VcbiAgICAgKiBgXy5ldmVyeWAsIGBfLmZpbHRlcmAsIGBfLm1hcGAsIGBfLm1hcFZhbHVlc2AsIGBfLnJlamVjdGAsIGFuZCBgXy5zb21lYC5cbiAgICAgKlxuICAgICAqIFRoZSBndWFyZGVkIG1ldGhvZHMgYXJlOlxuICAgICAqIGBhcnlgLCBgY2h1bmtgLCBgY3VycnlgLCBgY3VycnlSaWdodGAsIGBkcm9wYCwgYGRyb3BSaWdodGAsIGBldmVyeWAsXG4gICAgICogYGZpbGxgLCBgaW52ZXJ0YCwgYHBhcnNlSW50YCwgYHJhbmRvbWAsIGByYW5nZWAsIGByYW5nZVJpZ2h0YCwgYHJlcGVhdGAsXG4gICAgICogYHNhbXBsZVNpemVgLCBgc2xpY2VgLCBgc29tZWAsIGBzb3J0QnlgLCBgc3BsaXRgLCBgdGFrZWAsIGB0YWtlUmlnaHRgLFxuICAgICAqIGB0ZW1wbGF0ZWAsIGB0cmltYCwgYHRyaW1FbmRgLCBgdHJpbVN0YXJ0YCwgYW5kIGB3b3Jkc2BcbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IG1hcHBlZCBhcnJheS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gc3F1YXJlKG4pIHtcbiAgICAgKiAgIHJldHVybiBuICogbjtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBfLm1hcChbNCwgOF0sIHNxdWFyZSk7XG4gICAgICogLy8gPT4gWzE2LCA2NF1cbiAgICAgKlxuICAgICAqIF8ubWFwKHsgJ2EnOiA0LCAnYic6IDggfSwgc3F1YXJlKTtcbiAgICAgKiAvLyA9PiBbMTYsIDY0XSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0gW1xuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknIH0sXG4gICAgICogICB7ICd1c2VyJzogJ2ZyZWQnIH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5tYXAodXNlcnMsICd1c2VyJyk7XG4gICAgICogLy8gPT4gWydiYXJuZXknLCAnZnJlZCddXG4gICAgICovXG4gICAgZnVuY3Rpb24gbWFwKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKSB7XG4gICAgICB2YXIgZnVuYyA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyBhcnJheU1hcCA6IGJhc2VNYXA7XG4gICAgICByZXR1cm4gZnVuYyhjb2xsZWN0aW9uLCBnZXRJdGVyYXRlZShpdGVyYXRlZSwgMykpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uc29ydEJ5YCBleGNlcHQgdGhhdCBpdCBhbGxvd3Mgc3BlY2lmeWluZyB0aGUgc29ydFxuICAgICAqIG9yZGVycyBvZiB0aGUgaXRlcmF0ZWVzIHRvIHNvcnQgYnkuIElmIGBvcmRlcnNgIGlzIHVuc3BlY2lmaWVkLCBhbGwgdmFsdWVzXG4gICAgICogYXJlIHNvcnRlZCBpbiBhc2NlbmRpbmcgb3JkZXIuIE90aGVyd2lzZSwgc3BlY2lmeSBhbiBvcmRlciBvZiBcImRlc2NcIiBmb3JcbiAgICAgKiBkZXNjZW5kaW5nIG9yIFwiYXNjXCIgZm9yIGFzY2VuZGluZyBzb3J0IG9yZGVyIG9mIGNvcnJlc3BvbmRpbmcgdmFsdWVzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtBcnJheVtdfEZ1bmN0aW9uW118T2JqZWN0W118c3RyaW5nW119IFtpdGVyYXRlZXM9W18uaWRlbnRpdHldXVxuICAgICAqICBUaGUgaXRlcmF0ZWVzIHRvIHNvcnQgYnkuXG4gICAgICogQHBhcmFtIHtzdHJpbmdbXX0gW29yZGVyc10gVGhlIHNvcnQgb3JkZXJzIG9mIGBpdGVyYXRlZXNgLlxuICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLnJlZHVjZWAuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgc29ydGVkIGFycmF5LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgdXNlcnMgPSBbXG4gICAgICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICdhZ2UnOiA0OCB9LFxuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzQgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgJ2FnZSc6IDQwIH0sXG4gICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScsICdhZ2UnOiAzNiB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIC8vIFNvcnQgYnkgYHVzZXJgIGluIGFzY2VuZGluZyBvcmRlciBhbmQgYnkgYGFnZWAgaW4gZGVzY2VuZGluZyBvcmRlci5cbiAgICAgKiBfLm9yZGVyQnkodXNlcnMsIFsndXNlcicsICdhZ2UnXSwgWydhc2MnLCAnZGVzYyddKTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbWydiYXJuZXknLCAzNl0sIFsnYmFybmV5JywgMzRdLCBbJ2ZyZWQnLCA0OF0sIFsnZnJlZCcsIDQwXV1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBvcmRlckJ5KGNvbGxlY3Rpb24sIGl0ZXJhdGVlcywgb3JkZXJzLCBndWFyZCkge1xuICAgICAgaWYgKGNvbGxlY3Rpb24gPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICBpZiAoIWlzQXJyYXkoaXRlcmF0ZWVzKSkge1xuICAgICAgICBpdGVyYXRlZXMgPSBpdGVyYXRlZXMgPT0gbnVsbCA/IFtdIDogW2l0ZXJhdGVlc107XG4gICAgICB9XG4gICAgICBvcmRlcnMgPSBndWFyZCA/IHVuZGVmaW5lZCA6IG9yZGVycztcbiAgICAgIGlmICghaXNBcnJheShvcmRlcnMpKSB7XG4gICAgICAgIG9yZGVycyA9IG9yZGVycyA9PSBudWxsID8gW10gOiBbb3JkZXJzXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBiYXNlT3JkZXJCeShjb2xsZWN0aW9uLCBpdGVyYXRlZXMsIG9yZGVycyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiBlbGVtZW50cyBzcGxpdCBpbnRvIHR3byBncm91cHMsIHRoZSBmaXJzdCBvZiB3aGljaFxuICAgICAqIGNvbnRhaW5zIGVsZW1lbnRzIGBwcmVkaWNhdGVgIHJldHVybnMgdHJ1dGh5IGZvciwgdGhlIHNlY29uZCBvZiB3aGljaFxuICAgICAqIGNvbnRhaW5zIGVsZW1lbnRzIGBwcmVkaWNhdGVgIHJldHVybnMgZmFsc2V5IGZvci4gVGhlIHByZWRpY2F0ZSBpc1xuICAgICAqIGludm9rZWQgd2l0aCBvbmUgYXJndW1lbnQ6ICh2YWx1ZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBncm91cGVkIGVsZW1lbnRzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgdXNlcnMgPSBbXG4gICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScsICAnYWdlJzogMzYsICdhY3RpdmUnOiBmYWxzZSB9LFxuICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAgJ2FnZSc6IDQwLCAnYWN0aXZlJzogdHJ1ZSB9LFxuICAgICAqICAgeyAndXNlcic6ICdwZWJibGVzJywgJ2FnZSc6IDEsICAnYWN0aXZlJzogZmFsc2UgfVxuICAgICAqIF07XG4gICAgICpcbiAgICAgKiBfLnBhcnRpdGlvbih1c2VycywgZnVuY3Rpb24obykgeyByZXR1cm4gby5hY3RpdmU7IH0pO1xuICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFtbJ2ZyZWQnXSwgWydiYXJuZXknLCAncGViYmxlcyddXVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLnBhcnRpdGlvbih1c2VycywgeyAnYWdlJzogMSwgJ2FjdGl2ZSc6IGZhbHNlIH0pO1xuICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFtbJ3BlYmJsZXMnXSwgWydiYXJuZXknLCAnZnJlZCddXVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8ucGFydGl0aW9uKHVzZXJzLCBbJ2FjdGl2ZScsIGZhbHNlXSk7XG4gICAgICogLy8gPT4gb2JqZWN0cyBmb3IgW1snYmFybmV5JywgJ3BlYmJsZXMnXSwgWydmcmVkJ11dXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLnBhcnRpdGlvbih1c2VycywgJ2FjdGl2ZScpO1xuICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFtbJ2ZyZWQnXSwgWydiYXJuZXknLCAncGViYmxlcyddXVxuICAgICAqL1xuICAgIHZhciBwYXJ0aXRpb24gPSBjcmVhdGVBZ2dyZWdhdG9yKGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkge1xuICAgICAgcmVzdWx0W2tleSA/IDAgOiAxXS5wdXNoKHZhbHVlKTtcbiAgICB9LCBmdW5jdGlvbigpIHsgcmV0dXJuIFtbXSwgW11dOyB9KTtcblxuICAgIC8qKlxuICAgICAqIFJlZHVjZXMgYGNvbGxlY3Rpb25gIHRvIGEgdmFsdWUgd2hpY2ggaXMgdGhlIGFjY3VtdWxhdGVkIHJlc3VsdCBvZiBydW5uaW5nXG4gICAgICogZWFjaCBlbGVtZW50IGluIGBjb2xsZWN0aW9uYCB0aHJ1IGBpdGVyYXRlZWAsIHdoZXJlIGVhY2ggc3VjY2Vzc2l2ZVxuICAgICAqIGludm9jYXRpb24gaXMgc3VwcGxpZWQgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgcHJldmlvdXMuIElmIGBhY2N1bXVsYXRvcmBcbiAgICAgKiBpcyBub3QgZ2l2ZW4sIHRoZSBmaXJzdCBlbGVtZW50IG9mIGBjb2xsZWN0aW9uYCBpcyB1c2VkIGFzIHRoZSBpbml0aWFsXG4gICAgICogdmFsdWUuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggZm91ciBhcmd1bWVudHM6XG4gICAgICogKGFjY3VtdWxhdG9yLCB2YWx1ZSwgaW5kZXh8a2V5LCBjb2xsZWN0aW9uKS5cbiAgICAgKlxuICAgICAqIE1hbnkgbG9kYXNoIG1ldGhvZHMgYXJlIGd1YXJkZWQgdG8gd29yayBhcyBpdGVyYXRlZXMgZm9yIG1ldGhvZHMgbGlrZVxuICAgICAqIGBfLnJlZHVjZWAsIGBfLnJlZHVjZVJpZ2h0YCwgYW5kIGBfLnRyYW5zZm9ybWAuXG4gICAgICpcbiAgICAgKiBUaGUgZ3VhcmRlZCBtZXRob2RzIGFyZTpcbiAgICAgKiBgYXNzaWduYCwgYGRlZmF1bHRzYCwgYGRlZmF1bHRzRGVlcGAsIGBpbmNsdWRlc2AsIGBtZXJnZWAsIGBvcmRlckJ5YCxcbiAgICAgKiBhbmQgYHNvcnRCeWBcbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7Kn0gW2FjY3VtdWxhdG9yXSBUaGUgaW5pdGlhbCB2YWx1ZS5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgYWNjdW11bGF0ZWQgdmFsdWUuXG4gICAgICogQHNlZSBfLnJlZHVjZVJpZ2h0XG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ucmVkdWNlKFsxLCAyXSwgZnVuY3Rpb24oc3VtLCBuKSB7XG4gICAgICogICByZXR1cm4gc3VtICsgbjtcbiAgICAgKiB9LCAwKTtcbiAgICAgKiAvLyA9PiAzXG4gICAgICpcbiAgICAgKiBfLnJlZHVjZSh7ICdhJzogMSwgJ2InOiAyLCAnYyc6IDEgfSwgZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gICAgICogICAocmVzdWx0W3ZhbHVlXSB8fCAocmVzdWx0W3ZhbHVlXSA9IFtdKSkucHVzaChrZXkpO1xuICAgICAqICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgKiB9LCB7fSk7XG4gICAgICogLy8gPT4geyAnMSc6IFsnYScsICdjJ10sICcyJzogWydiJ10gfSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJlZHVjZShjb2xsZWN0aW9uLCBpdGVyYXRlZSwgYWNjdW11bGF0b3IpIHtcbiAgICAgIHZhciBmdW5jID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IGFycmF5UmVkdWNlIDogYmFzZVJlZHVjZSxcbiAgICAgICAgICBpbml0QWNjdW0gPSBhcmd1bWVudHMubGVuZ3RoIDwgMztcblxuICAgICAgcmV0dXJuIGZ1bmMoY29sbGVjdGlvbiwgZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDQpLCBhY2N1bXVsYXRvciwgaW5pdEFjY3VtLCBiYXNlRWFjaCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5yZWR1Y2VgIGV4Y2VwdCB0aGF0IGl0IGl0ZXJhdGVzIG92ZXIgZWxlbWVudHMgb2ZcbiAgICAgKiBgY29sbGVjdGlvbmAgZnJvbSByaWdodCB0byBsZWZ0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHsqfSBbYWNjdW11bGF0b3JdIFRoZSBpbml0aWFsIHZhbHVlLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBhY2N1bXVsYXRlZCB2YWx1ZS5cbiAgICAgKiBAc2VlIF8ucmVkdWNlXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBhcnJheSA9IFtbMCwgMV0sIFsyLCAzXSwgWzQsIDVdXTtcbiAgICAgKlxuICAgICAqIF8ucmVkdWNlUmlnaHQoYXJyYXksIGZ1bmN0aW9uKGZsYXR0ZW5lZCwgb3RoZXIpIHtcbiAgICAgKiAgIHJldHVybiBmbGF0dGVuZWQuY29uY2F0KG90aGVyKTtcbiAgICAgKiB9LCBbXSk7XG4gICAgICogLy8gPT4gWzQsIDUsIDIsIDMsIDAsIDFdXG4gICAgICovXG4gICAgZnVuY3Rpb24gcmVkdWNlUmlnaHQoY29sbGVjdGlvbiwgaXRlcmF0ZWUsIGFjY3VtdWxhdG9yKSB7XG4gICAgICB2YXIgZnVuYyA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyBhcnJheVJlZHVjZVJpZ2h0IDogYmFzZVJlZHVjZSxcbiAgICAgICAgICBpbml0QWNjdW0gPSBhcmd1bWVudHMubGVuZ3RoIDwgMztcblxuICAgICAgcmV0dXJuIGZ1bmMoY29sbGVjdGlvbiwgZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDQpLCBhY2N1bXVsYXRvciwgaW5pdEFjY3VtLCBiYXNlRWFjaFJpZ2h0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3Bwb3NpdGUgb2YgYF8uZmlsdGVyYDsgdGhpcyBtZXRob2QgcmV0dXJucyB0aGUgZWxlbWVudHMgb2YgYGNvbGxlY3Rpb25gXG4gICAgICogdGhhdCBgcHJlZGljYXRlYCBkb2VzICoqbm90KiogcmV0dXJuIHRydXRoeSBmb3IuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmlsdGVyZWQgYXJyYXkuXG4gICAgICogQHNlZSBfLmZpbHRlclxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgdXNlcnMgPSBbXG4gICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScsICdhZ2UnOiAzNiwgJ2FjdGl2ZSc6IGZhbHNlIH0sXG4gICAgICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICdhZ2UnOiA0MCwgJ2FjdGl2ZSc6IHRydWUgfVxuICAgICAqIF07XG4gICAgICpcbiAgICAgKiBfLnJlamVjdCh1c2VycywgZnVuY3Rpb24obykgeyByZXR1cm4gIW8uYWN0aXZlOyB9KTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ2ZyZWQnXVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLnJlamVjdCh1c2VycywgeyAnYWdlJzogNDAsICdhY3RpdmUnOiB0cnVlIH0pO1xuICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFsnYmFybmV5J11cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzUHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLnJlamVjdCh1c2VycywgWydhY3RpdmUnLCBmYWxzZV0pO1xuICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFsnZnJlZCddXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLnJlamVjdCh1c2VycywgJ2FjdGl2ZScpO1xuICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFsnYmFybmV5J11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiByZWplY3QoY29sbGVjdGlvbiwgcHJlZGljYXRlKSB7XG4gICAgICB2YXIgZnVuYyA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyBhcnJheUZpbHRlciA6IGJhc2VGaWx0ZXI7XG4gICAgICByZXR1cm4gZnVuYyhjb2xsZWN0aW9uLCBuZWdhdGUoZ2V0SXRlcmF0ZWUocHJlZGljYXRlLCAzKSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgYSByYW5kb20gZWxlbWVudCBmcm9tIGBjb2xsZWN0aW9uYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAyLjAuMFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gc2FtcGxlLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByYW5kb20gZWxlbWVudC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5zYW1wbGUoWzEsIDIsIDMsIDRdKTtcbiAgICAgKiAvLyA9PiAyXG4gICAgICovXG4gICAgZnVuY3Rpb24gc2FtcGxlKGNvbGxlY3Rpb24pIHtcbiAgICAgIHZhciBmdW5jID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IGFycmF5U2FtcGxlIDogYmFzZVNhbXBsZTtcbiAgICAgIHJldHVybiBmdW5jKGNvbGxlY3Rpb24pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgYG5gIHJhbmRvbSBlbGVtZW50cyBhdCB1bmlxdWUga2V5cyBmcm9tIGBjb2xsZWN0aW9uYCB1cCB0byB0aGVcbiAgICAgKiBzaXplIG9mIGBjb2xsZWN0aW9uYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gc2FtcGxlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbj0xXSBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRvIHNhbXBsZS5cbiAgICAgKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5tYXBgLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgcmFuZG9tIGVsZW1lbnRzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnNhbXBsZVNpemUoWzEsIDIsIDNdLCAyKTtcbiAgICAgKiAvLyA9PiBbMywgMV1cbiAgICAgKlxuICAgICAqIF8uc2FtcGxlU2l6ZShbMSwgMiwgM10sIDQpO1xuICAgICAqIC8vID0+IFsyLCAzLCAxXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNhbXBsZVNpemUoY29sbGVjdGlvbiwgbiwgZ3VhcmQpIHtcbiAgICAgIGlmICgoZ3VhcmQgPyBpc0l0ZXJhdGVlQ2FsbChjb2xsZWN0aW9uLCBuLCBndWFyZCkgOiBuID09PSB1bmRlZmluZWQpKSB7XG4gICAgICAgIG4gPSAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbiA9IHRvSW50ZWdlcihuKTtcbiAgICAgIH1cbiAgICAgIHZhciBmdW5jID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IGFycmF5U2FtcGxlU2l6ZSA6IGJhc2VTYW1wbGVTaXplO1xuICAgICAgcmV0dXJuIGZ1bmMoY29sbGVjdGlvbiwgbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiBzaHVmZmxlZCB2YWx1ZXMsIHVzaW5nIGEgdmVyc2lvbiBvZiB0aGVcbiAgICAgKiBbRmlzaGVyLVlhdGVzIHNodWZmbGVdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Zpc2hlci1ZYXRlc19zaHVmZmxlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gc2h1ZmZsZS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBzaHVmZmxlZCBhcnJheS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5zaHVmZmxlKFsxLCAyLCAzLCA0XSk7XG4gICAgICogLy8gPT4gWzQsIDEsIDMsIDJdXG4gICAgICovXG4gICAgZnVuY3Rpb24gc2h1ZmZsZShjb2xsZWN0aW9uKSB7XG4gICAgICB2YXIgZnVuYyA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyBhcnJheVNodWZmbGUgOiBiYXNlU2h1ZmZsZTtcbiAgICAgIHJldHVybiBmdW5jKGNvbGxlY3Rpb24pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHNpemUgb2YgYGNvbGxlY3Rpb25gIGJ5IHJldHVybmluZyBpdHMgbGVuZ3RoIGZvciBhcnJheS1saWtlXG4gICAgICogdmFsdWVzIG9yIHRoZSBudW1iZXIgb2Ygb3duIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnRpZXMgZm9yIG9iamVjdHMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fHN0cmluZ30gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpbnNwZWN0LlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGNvbGxlY3Rpb24gc2l6ZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5zaXplKFsxLCAyLCAzXSk7XG4gICAgICogLy8gPT4gM1xuICAgICAqXG4gICAgICogXy5zaXplKHsgJ2EnOiAxLCAnYic6IDIgfSk7XG4gICAgICogLy8gPT4gMlxuICAgICAqXG4gICAgICogXy5zaXplKCdwZWJibGVzJyk7XG4gICAgICogLy8gPT4gN1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNpemUoY29sbGVjdGlvbikge1xuICAgICAgaWYgKGNvbGxlY3Rpb24gPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH1cbiAgICAgIGlmIChpc0FycmF5TGlrZShjb2xsZWN0aW9uKSkge1xuICAgICAgICByZXR1cm4gaXNTdHJpbmcoY29sbGVjdGlvbikgPyBzdHJpbmdTaXplKGNvbGxlY3Rpb24pIDogY29sbGVjdGlvbi5sZW5ndGg7XG4gICAgICB9XG4gICAgICB2YXIgdGFnID0gZ2V0VGFnKGNvbGxlY3Rpb24pO1xuICAgICAgaWYgKHRhZyA9PSBtYXBUYWcgfHwgdGFnID09IHNldFRhZykge1xuICAgICAgICByZXR1cm4gY29sbGVjdGlvbi5zaXplO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJhc2VLZXlzKGNvbGxlY3Rpb24pLmxlbmd0aDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHByZWRpY2F0ZWAgcmV0dXJucyB0cnV0aHkgZm9yICoqYW55KiogZWxlbWVudCBvZiBgY29sbGVjdGlvbmAuXG4gICAgICogSXRlcmF0aW9uIGlzIHN0b3BwZWQgb25jZSBgcHJlZGljYXRlYCByZXR1cm5zIHRydXRoeS4gVGhlIHByZWRpY2F0ZSBpc1xuICAgICAqIGludm9rZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6ICh2YWx1ZSwgaW5kZXh8a2V5LCBjb2xsZWN0aW9uKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5tYXBgLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbnkgZWxlbWVudCBwYXNzZXMgdGhlIHByZWRpY2F0ZSBjaGVjayxcbiAgICAgKiAgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnNvbWUoW251bGwsIDAsICd5ZXMnLCBmYWxzZV0sIEJvb2xlYW4pO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIHZhciB1c2VycyA9IFtcbiAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgJ2FjdGl2ZSc6IHRydWUgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgJ2FjdGl2ZSc6IGZhbHNlIH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLnNvbWUodXNlcnMsIHsgJ3VzZXInOiAnYmFybmV5JywgJ2FjdGl2ZSc6IGZhbHNlIH0pO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5zb21lKHVzZXJzLCBbJ2FjdGl2ZScsIGZhbHNlXSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5zb21lKHVzZXJzLCAnYWN0aXZlJyk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNvbWUoY29sbGVjdGlvbiwgcHJlZGljYXRlLCBndWFyZCkge1xuICAgICAgdmFyIGZ1bmMgPSBpc0FycmF5KGNvbGxlY3Rpb24pID8gYXJyYXlTb21lIDogYmFzZVNvbWU7XG4gICAgICBpZiAoZ3VhcmQgJiYgaXNJdGVyYXRlZUNhbGwoY29sbGVjdGlvbiwgcHJlZGljYXRlLCBndWFyZCkpIHtcbiAgICAgICAgcHJlZGljYXRlID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZ1bmMoY29sbGVjdGlvbiwgZ2V0SXRlcmF0ZWUocHJlZGljYXRlLCAzKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiBlbGVtZW50cywgc29ydGVkIGluIGFzY2VuZGluZyBvcmRlciBieSB0aGUgcmVzdWx0cyBvZlxuICAgICAqIHJ1bm5pbmcgZWFjaCBlbGVtZW50IGluIGEgY29sbGVjdGlvbiB0aHJ1IGVhY2ggaXRlcmF0ZWUuIFRoaXMgbWV0aG9kXG4gICAgICogcGVyZm9ybXMgYSBzdGFibGUgc29ydCwgdGhhdCBpcywgaXQgcHJlc2VydmVzIHRoZSBvcmlnaW5hbCBzb3J0IG9yZGVyIG9mXG4gICAgICogZXF1YWwgZWxlbWVudHMuIFRoZSBpdGVyYXRlZXMgYXJlIGludm9rZWQgd2l0aCBvbmUgYXJndW1lbnQ6ICh2YWx1ZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0gey4uLihGdW5jdGlvbnxGdW5jdGlvbltdKX0gW2l0ZXJhdGVlcz1bXy5pZGVudGl0eV1dXG4gICAgICogIFRoZSBpdGVyYXRlZXMgdG8gc29ydCBieS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBzb3J0ZWQgYXJyYXkuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciB1c2VycyA9IFtcbiAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgJ2FnZSc6IDQ4IH0sXG4gICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScsICdhZ2UnOiAzNiB9LFxuICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAnYWdlJzogMzAgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgJ2FnZSc6IDM0IH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogXy5zb3J0QnkodXNlcnMsIFtmdW5jdGlvbihvKSB7IHJldHVybiBvLnVzZXI7IH1dKTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbWydiYXJuZXknLCAzNl0sIFsnYmFybmV5JywgMzRdLCBbJ2ZyZWQnLCA0OF0sIFsnZnJlZCcsIDMwXV1cbiAgICAgKlxuICAgICAqIF8uc29ydEJ5KHVzZXJzLCBbJ3VzZXInLCAnYWdlJ10pO1xuICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFtbJ2Jhcm5leScsIDM0XSwgWydiYXJuZXknLCAzNl0sIFsnZnJlZCcsIDMwXSwgWydmcmVkJywgNDhdXVxuICAgICAqL1xuICAgIHZhciBzb3J0QnkgPSBiYXNlUmVzdChmdW5jdGlvbihjb2xsZWN0aW9uLCBpdGVyYXRlZXMpIHtcbiAgICAgIGlmIChjb2xsZWN0aW9uID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgdmFyIGxlbmd0aCA9IGl0ZXJhdGVlcy5sZW5ndGg7XG4gICAgICBpZiAobGVuZ3RoID4gMSAmJiBpc0l0ZXJhdGVlQ2FsbChjb2xsZWN0aW9uLCBpdGVyYXRlZXNbMF0sIGl0ZXJhdGVlc1sxXSkpIHtcbiAgICAgICAgaXRlcmF0ZWVzID0gW107XG4gICAgICB9IGVsc2UgaWYgKGxlbmd0aCA+IDIgJiYgaXNJdGVyYXRlZUNhbGwoaXRlcmF0ZWVzWzBdLCBpdGVyYXRlZXNbMV0sIGl0ZXJhdGVlc1syXSkpIHtcbiAgICAgICAgaXRlcmF0ZWVzID0gW2l0ZXJhdGVlc1swXV07XG4gICAgICB9XG4gICAgICByZXR1cm4gYmFzZU9yZGVyQnkoY29sbGVjdGlvbiwgYmFzZUZsYXR0ZW4oaXRlcmF0ZWVzLCAxKSwgW10pO1xuICAgIH0pO1xuXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgdGltZXN0YW1wIG9mIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRoYXQgaGF2ZSBlbGFwc2VkIHNpbmNlXG4gICAgICogdGhlIFVuaXggZXBvY2ggKDEgSmFudWFyeSAxOTcwIDAwOjAwOjAwIFVUQykuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMi40LjBcbiAgICAgKiBAY2F0ZWdvcnkgRGF0ZVxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHRpbWVzdGFtcC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5kZWZlcihmdW5jdGlvbihzdGFtcCkge1xuICAgICAqICAgY29uc29sZS5sb2coXy5ub3coKSAtIHN0YW1wKTtcbiAgICAgKiB9LCBfLm5vdygpKTtcbiAgICAgKiAvLyA9PiBMb2dzIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGl0IHRvb2sgZm9yIHRoZSBkZWZlcnJlZCBpbnZvY2F0aW9uLlxuICAgICAqL1xuICAgIHZhciBub3cgPSBjdHhOb3cgfHwgZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gcm9vdC5EYXRlLm5vdygpO1xuICAgIH07XG5cbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3Bwb3NpdGUgb2YgYF8uYmVmb3JlYDsgdGhpcyBtZXRob2QgY3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlc1xuICAgICAqIGBmdW5jYCBvbmNlIGl0J3MgY2FsbGVkIGBuYCBvciBtb3JlIHRpbWVzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciBvZiBjYWxscyBiZWZvcmUgYGZ1bmNgIGlzIGludm9rZWQuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcmVzdHJpY3QuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgcmVzdHJpY3RlZCBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHNhdmVzID0gWydwcm9maWxlJywgJ3NldHRpbmdzJ107XG4gICAgICpcbiAgICAgKiB2YXIgZG9uZSA9IF8uYWZ0ZXIoc2F2ZXMubGVuZ3RoLCBmdW5jdGlvbigpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKCdkb25lIHNhdmluZyEnKTtcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIF8uZm9yRWFjaChzYXZlcywgZnVuY3Rpb24odHlwZSkge1xuICAgICAqICAgYXN5bmNTYXZlKHsgJ3R5cGUnOiB0eXBlLCAnY29tcGxldGUnOiBkb25lIH0pO1xuICAgICAqIH0pO1xuICAgICAqIC8vID0+IExvZ3MgJ2RvbmUgc2F2aW5nIScgYWZ0ZXIgdGhlIHR3byBhc3luYyBzYXZlcyBoYXZlIGNvbXBsZXRlZC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBhZnRlcihuLCBmdW5jKSB7XG4gICAgICBpZiAodHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gICAgICB9XG4gICAgICBuID0gdG9JbnRlZ2VyKG4pO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAoLS1uIDwgMSkge1xuICAgICAgICAgIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2AsIHdpdGggdXAgdG8gYG5gIGFyZ3VtZW50cyxcbiAgICAgKiBpZ25vcmluZyBhbnkgYWRkaXRpb25hbCBhcmd1bWVudHMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjYXAgYXJndW1lbnRzIGZvci5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW249ZnVuYy5sZW5ndGhdIFRoZSBhcml0eSBjYXAuXG4gICAgICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ubWFwYC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjYXBwZWQgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ubWFwKFsnNicsICc4JywgJzEwJ10sIF8uYXJ5KHBhcnNlSW50LCAxKSk7XG4gICAgICogLy8gPT4gWzYsIDgsIDEwXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGFyeShmdW5jLCBuLCBndWFyZCkge1xuICAgICAgbiA9IGd1YXJkID8gdW5kZWZpbmVkIDogbjtcbiAgICAgIG4gPSAoZnVuYyAmJiBuID09IG51bGwpID8gZnVuYy5sZW5ndGggOiBuO1xuICAgICAgcmV0dXJuIGNyZWF0ZVdyYXAoZnVuYywgV1JBUF9BUllfRkxBRywgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBuKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCwgd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgYW5kIGFyZ3VtZW50c1xuICAgICAqIG9mIHRoZSBjcmVhdGVkIGZ1bmN0aW9uLCB3aGlsZSBpdCdzIGNhbGxlZCBsZXNzIHRoYW4gYG5gIHRpbWVzLiBTdWJzZXF1ZW50XG4gICAgICogY2FsbHMgdG8gdGhlIGNyZWF0ZWQgZnVuY3Rpb24gcmV0dXJuIHRoZSByZXN1bHQgb2YgdGhlIGxhc3QgYGZ1bmNgIGludm9jYXRpb24uXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVyIG9mIGNhbGxzIGF0IHdoaWNoIGBmdW5jYCBpcyBubyBsb25nZXIgaW52b2tlZC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byByZXN0cmljdC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyByZXN0cmljdGVkIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBqUXVlcnkoZWxlbWVudCkub24oJ2NsaWNrJywgXy5iZWZvcmUoNSwgYWRkQ29udGFjdFRvTGlzdCkpO1xuICAgICAqIC8vID0+IEFsbG93cyBhZGRpbmcgdXAgdG8gNCBjb250YWN0cyB0byB0aGUgbGlzdC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiZWZvcmUobiwgZnVuYykge1xuICAgICAgdmFyIHJlc3VsdDtcbiAgICAgIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgICAgIH1cbiAgICAgIG4gPSB0b0ludGVnZXIobik7XG4gICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICgtLW4gPiAwKSB7XG4gICAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChuIDw9IDEpIHtcbiAgICAgICAgICBmdW5jID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIGB0aGlzQXJnYFxuICAgICAqIGFuZCBgcGFydGlhbHNgIHByZXBlbmRlZCB0byB0aGUgYXJndW1lbnRzIGl0IHJlY2VpdmVzLlxuICAgICAqXG4gICAgICogVGhlIGBfLmJpbmQucGxhY2Vob2xkZXJgIHZhbHVlLCB3aGljaCBkZWZhdWx0cyB0byBgX2AgaW4gbW9ub2xpdGhpYyBidWlsZHMsXG4gICAgICogbWF5IGJlIHVzZWQgYXMgYSBwbGFjZWhvbGRlciBmb3IgcGFydGlhbGx5IGFwcGxpZWQgYXJndW1lbnRzLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFVubGlrZSBuYXRpdmUgYEZ1bmN0aW9uI2JpbmRgLCB0aGlzIG1ldGhvZCBkb2Vzbid0IHNldCB0aGUgXCJsZW5ndGhcIlxuICAgICAqIHByb3BlcnR5IG9mIGJvdW5kIGZ1bmN0aW9ucy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGJpbmQuXG4gICAgICogQHBhcmFtIHsqfSB0aGlzQXJnIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gICAgICogQHBhcmFtIHsuLi4qfSBbcGFydGlhbHNdIFRoZSBhcmd1bWVudHMgdG8gYmUgcGFydGlhbGx5IGFwcGxpZWQuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYm91bmQgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIGdyZWV0KGdyZWV0aW5nLCBwdW5jdHVhdGlvbikge1xuICAgICAqICAgcmV0dXJuIGdyZWV0aW5nICsgJyAnICsgdGhpcy51c2VyICsgcHVuY3R1YXRpb247XG4gICAgICogfVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHsgJ3VzZXInOiAnZnJlZCcgfTtcbiAgICAgKlxuICAgICAqIHZhciBib3VuZCA9IF8uYmluZChncmVldCwgb2JqZWN0LCAnaGknKTtcbiAgICAgKiBib3VuZCgnIScpO1xuICAgICAqIC8vID0+ICdoaSBmcmVkISdcbiAgICAgKlxuICAgICAqIC8vIEJvdW5kIHdpdGggcGxhY2Vob2xkZXJzLlxuICAgICAqIHZhciBib3VuZCA9IF8uYmluZChncmVldCwgb2JqZWN0LCBfLCAnIScpO1xuICAgICAqIGJvdW5kKCdoaScpO1xuICAgICAqIC8vID0+ICdoaSBmcmVkISdcbiAgICAgKi9cbiAgICB2YXIgYmluZCA9IGJhc2VSZXN0KGZ1bmN0aW9uKGZ1bmMsIHRoaXNBcmcsIHBhcnRpYWxzKSB7XG4gICAgICB2YXIgYml0bWFzayA9IFdSQVBfQklORF9GTEFHO1xuICAgICAgaWYgKHBhcnRpYWxzLmxlbmd0aCkge1xuICAgICAgICB2YXIgaG9sZGVycyA9IHJlcGxhY2VIb2xkZXJzKHBhcnRpYWxzLCBnZXRIb2xkZXIoYmluZCkpO1xuICAgICAgICBiaXRtYXNrIHw9IFdSQVBfUEFSVElBTF9GTEFHO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNyZWF0ZVdyYXAoZnVuYywgYml0bWFzaywgdGhpc0FyZywgcGFydGlhbHMsIGhvbGRlcnMpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyB0aGUgbWV0aG9kIGF0IGBvYmplY3Rba2V5XWAgd2l0aCBgcGFydGlhbHNgXG4gICAgICogcHJlcGVuZGVkIHRvIHRoZSBhcmd1bWVudHMgaXQgcmVjZWl2ZXMuXG4gICAgICpcbiAgICAgKiBUaGlzIG1ldGhvZCBkaWZmZXJzIGZyb20gYF8uYmluZGAgYnkgYWxsb3dpbmcgYm91bmQgZnVuY3Rpb25zIHRvIHJlZmVyZW5jZVxuICAgICAqIG1ldGhvZHMgdGhhdCBtYXkgYmUgcmVkZWZpbmVkIG9yIGRvbid0IHlldCBleGlzdC4gU2VlXG4gICAgICogW1BldGVyIE1pY2hhdXgncyBhcnRpY2xlXShodHRwOi8vcGV0ZXIubWljaGF1eC5jYS9hcnRpY2xlcy9sYXp5LWZ1bmN0aW9uLWRlZmluaXRpb24tcGF0dGVybilcbiAgICAgKiBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAqXG4gICAgICogVGhlIGBfLmJpbmRLZXkucGxhY2Vob2xkZXJgIHZhbHVlLCB3aGljaCBkZWZhdWx0cyB0byBgX2AgaW4gbW9ub2xpdGhpY1xuICAgICAqIGJ1aWxkcywgbWF5IGJlIHVzZWQgYXMgYSBwbGFjZWhvbGRlciBmb3IgcGFydGlhbGx5IGFwcGxpZWQgYXJndW1lbnRzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMTAuMFxuICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpbnZva2UgdGhlIG1ldGhvZCBvbi5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIG1ldGhvZC5cbiAgICAgKiBAcGFyYW0gey4uLip9IFtwYXJ0aWFsc10gVGhlIGFyZ3VtZW50cyB0byBiZSBwYXJ0aWFsbHkgYXBwbGllZC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBib3VuZCBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHtcbiAgICAgKiAgICd1c2VyJzogJ2ZyZWQnLFxuICAgICAqICAgJ2dyZWV0JzogZnVuY3Rpb24oZ3JlZXRpbmcsIHB1bmN0dWF0aW9uKSB7XG4gICAgICogICAgIHJldHVybiBncmVldGluZyArICcgJyArIHRoaXMudXNlciArIHB1bmN0dWF0aW9uO1xuICAgICAqICAgfVxuICAgICAqIH07XG4gICAgICpcbiAgICAgKiB2YXIgYm91bmQgPSBfLmJpbmRLZXkob2JqZWN0LCAnZ3JlZXQnLCAnaGknKTtcbiAgICAgKiBib3VuZCgnIScpO1xuICAgICAqIC8vID0+ICdoaSBmcmVkISdcbiAgICAgKlxuICAgICAqIG9iamVjdC5ncmVldCA9IGZ1bmN0aW9uKGdyZWV0aW5nLCBwdW5jdHVhdGlvbikge1xuICAgICAqICAgcmV0dXJuIGdyZWV0aW5nICsgJ3lhICcgKyB0aGlzLnVzZXIgKyBwdW5jdHVhdGlvbjtcbiAgICAgKiB9O1xuICAgICAqXG4gICAgICogYm91bmQoJyEnKTtcbiAgICAgKiAvLyA9PiAnaGl5YSBmcmVkISdcbiAgICAgKlxuICAgICAqIC8vIEJvdW5kIHdpdGggcGxhY2Vob2xkZXJzLlxuICAgICAqIHZhciBib3VuZCA9IF8uYmluZEtleShvYmplY3QsICdncmVldCcsIF8sICchJyk7XG4gICAgICogYm91bmQoJ2hpJyk7XG4gICAgICogLy8gPT4gJ2hpeWEgZnJlZCEnXG4gICAgICovXG4gICAgdmFyIGJpbmRLZXkgPSBiYXNlUmVzdChmdW5jdGlvbihvYmplY3QsIGtleSwgcGFydGlhbHMpIHtcbiAgICAgIHZhciBiaXRtYXNrID0gV1JBUF9CSU5EX0ZMQUcgfCBXUkFQX0JJTkRfS0VZX0ZMQUc7XG4gICAgICBpZiAocGFydGlhbHMubGVuZ3RoKSB7XG4gICAgICAgIHZhciBob2xkZXJzID0gcmVwbGFjZUhvbGRlcnMocGFydGlhbHMsIGdldEhvbGRlcihiaW5kS2V5KSk7XG4gICAgICAgIGJpdG1hc2sgfD0gV1JBUF9QQVJUSUFMX0ZMQUc7XG4gICAgICB9XG4gICAgICByZXR1cm4gY3JlYXRlV3JhcChrZXksIGJpdG1hc2ssIG9iamVjdCwgcGFydGlhbHMsIGhvbGRlcnMpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgYWNjZXB0cyBhcmd1bWVudHMgb2YgYGZ1bmNgIGFuZCBlaXRoZXIgaW52b2tlc1xuICAgICAqIGBmdW5jYCByZXR1cm5pbmcgaXRzIHJlc3VsdCwgaWYgYXQgbGVhc3QgYGFyaXR5YCBudW1iZXIgb2YgYXJndW1lbnRzIGhhdmVcbiAgICAgKiBiZWVuIHByb3ZpZGVkLCBvciByZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBhY2NlcHRzIHRoZSByZW1haW5pbmcgYGZ1bmNgXG4gICAgICogYXJndW1lbnRzLCBhbmQgc28gb24uIFRoZSBhcml0eSBvZiBgZnVuY2AgbWF5IGJlIHNwZWNpZmllZCBpZiBgZnVuYy5sZW5ndGhgXG4gICAgICogaXMgbm90IHN1ZmZpY2llbnQuXG4gICAgICpcbiAgICAgKiBUaGUgYF8uY3VycnkucGxhY2Vob2xkZXJgIHZhbHVlLCB3aGljaCBkZWZhdWx0cyB0byBgX2AgaW4gbW9ub2xpdGhpYyBidWlsZHMsXG4gICAgICogbWF5IGJlIHVzZWQgYXMgYSBwbGFjZWhvbGRlciBmb3IgcHJvdmlkZWQgYXJndW1lbnRzLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGRvZXNuJ3Qgc2V0IHRoZSBcImxlbmd0aFwiIHByb3BlcnR5IG9mIGN1cnJpZWQgZnVuY3Rpb25zLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDIuMC4wXG4gICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY3VycnkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFthcml0eT1mdW5jLmxlbmd0aF0gVGhlIGFyaXR5IG9mIGBmdW5jYC5cbiAgICAgKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5tYXBgLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGN1cnJpZWQgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBhYmMgPSBmdW5jdGlvbihhLCBiLCBjKSB7XG4gICAgICogICByZXR1cm4gW2EsIGIsIGNdO1xuICAgICAqIH07XG4gICAgICpcbiAgICAgKiB2YXIgY3VycmllZCA9IF8uY3VycnkoYWJjKTtcbiAgICAgKlxuICAgICAqIGN1cnJpZWQoMSkoMikoMyk7XG4gICAgICogLy8gPT4gWzEsIDIsIDNdXG4gICAgICpcbiAgICAgKiBjdXJyaWVkKDEsIDIpKDMpO1xuICAgICAqIC8vID0+IFsxLCAyLCAzXVxuICAgICAqXG4gICAgICogY3VycmllZCgxLCAyLCAzKTtcbiAgICAgKiAvLyA9PiBbMSwgMiwgM11cbiAgICAgKlxuICAgICAqIC8vIEN1cnJpZWQgd2l0aCBwbGFjZWhvbGRlcnMuXG4gICAgICogY3VycmllZCgxKShfLCAzKSgyKTtcbiAgICAgKiAvLyA9PiBbMSwgMiwgM11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjdXJyeShmdW5jLCBhcml0eSwgZ3VhcmQpIHtcbiAgICAgIGFyaXR5ID0gZ3VhcmQgPyB1bmRlZmluZWQgOiBhcml0eTtcbiAgICAgIHZhciByZXN1bHQgPSBjcmVhdGVXcmFwKGZ1bmMsIFdSQVBfQ1VSUllfRkxBRywgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFyaXR5KTtcbiAgICAgIHJlc3VsdC5wbGFjZWhvbGRlciA9IGN1cnJ5LnBsYWNlaG9sZGVyO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmN1cnJ5YCBleGNlcHQgdGhhdCBhcmd1bWVudHMgYXJlIGFwcGxpZWQgdG8gYGZ1bmNgXG4gICAgICogaW4gdGhlIG1hbm5lciBvZiBgXy5wYXJ0aWFsUmlnaHRgIGluc3RlYWQgb2YgYF8ucGFydGlhbGAuXG4gICAgICpcbiAgICAgKiBUaGUgYF8uY3VycnlSaWdodC5wbGFjZWhvbGRlcmAgdmFsdWUsIHdoaWNoIGRlZmF1bHRzIHRvIGBfYCBpbiBtb25vbGl0aGljXG4gICAgICogYnVpbGRzLCBtYXkgYmUgdXNlZCBhcyBhIHBsYWNlaG9sZGVyIGZvciBwcm92aWRlZCBhcmd1bWVudHMuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgZG9lc24ndCBzZXQgdGhlIFwibGVuZ3RoXCIgcHJvcGVydHkgb2YgY3VycmllZCBmdW5jdGlvbnMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjdXJyeS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2FyaXR5PWZ1bmMubGVuZ3RoXSBUaGUgYXJpdHkgb2YgYGZ1bmNgLlxuICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY3VycmllZCBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGFiYyA9IGZ1bmN0aW9uKGEsIGIsIGMpIHtcbiAgICAgKiAgIHJldHVybiBbYSwgYiwgY107XG4gICAgICogfTtcbiAgICAgKlxuICAgICAqIHZhciBjdXJyaWVkID0gXy5jdXJyeVJpZ2h0KGFiYyk7XG4gICAgICpcbiAgICAgKiBjdXJyaWVkKDMpKDIpKDEpO1xuICAgICAqIC8vID0+IFsxLCAyLCAzXVxuICAgICAqXG4gICAgICogY3VycmllZCgyLCAzKSgxKTtcbiAgICAgKiAvLyA9PiBbMSwgMiwgM11cbiAgICAgKlxuICAgICAqIGN1cnJpZWQoMSwgMiwgMyk7XG4gICAgICogLy8gPT4gWzEsIDIsIDNdXG4gICAgICpcbiAgICAgKiAvLyBDdXJyaWVkIHdpdGggcGxhY2Vob2xkZXJzLlxuICAgICAqIGN1cnJpZWQoMykoMSwgXykoMik7XG4gICAgICogLy8gPT4gWzEsIDIsIDNdXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3VycnlSaWdodChmdW5jLCBhcml0eSwgZ3VhcmQpIHtcbiAgICAgIGFyaXR5ID0gZ3VhcmQgPyB1bmRlZmluZWQgOiBhcml0eTtcbiAgICAgIHZhciByZXN1bHQgPSBjcmVhdGVXcmFwKGZ1bmMsIFdSQVBfQ1VSUllfUklHSFRfRkxBRywgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFyaXR5KTtcbiAgICAgIHJlc3VsdC5wbGFjZWhvbGRlciA9IGN1cnJ5UmlnaHQucGxhY2Vob2xkZXI7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBkZWJvdW5jZWQgZnVuY3Rpb24gdGhhdCBkZWxheXMgaW52b2tpbmcgYGZ1bmNgIHVudGlsIGFmdGVyIGB3YWl0YFxuICAgICAqIG1pbGxpc2Vjb25kcyBoYXZlIGVsYXBzZWQgc2luY2UgdGhlIGxhc3QgdGltZSB0aGUgZGVib3VuY2VkIGZ1bmN0aW9uIHdhc1xuICAgICAqIGludm9rZWQuIFRoZSBkZWJvdW5jZWQgZnVuY3Rpb24gY29tZXMgd2l0aCBhIGBjYW5jZWxgIG1ldGhvZCB0byBjYW5jZWxcbiAgICAgKiBkZWxheWVkIGBmdW5jYCBpbnZvY2F0aW9ucyBhbmQgYSBgZmx1c2hgIG1ldGhvZCB0byBpbW1lZGlhdGVseSBpbnZva2UgdGhlbS5cbiAgICAgKiBQcm92aWRlIGBvcHRpb25zYCB0byBpbmRpY2F0ZSB3aGV0aGVyIGBmdW5jYCBzaG91bGQgYmUgaW52b2tlZCBvbiB0aGVcbiAgICAgKiBsZWFkaW5nIGFuZC9vciB0cmFpbGluZyBlZGdlIG9mIHRoZSBgd2FpdGAgdGltZW91dC4gVGhlIGBmdW5jYCBpcyBpbnZva2VkXG4gICAgICogd2l0aCB0aGUgbGFzdCBhcmd1bWVudHMgcHJvdmlkZWQgdG8gdGhlIGRlYm91bmNlZCBmdW5jdGlvbi4gU3Vic2VxdWVudFxuICAgICAqIGNhbGxzIHRvIHRoZSBkZWJvdW5jZWQgZnVuY3Rpb24gcmV0dXJuIHRoZSByZXN1bHQgb2YgdGhlIGxhc3QgYGZ1bmNgXG4gICAgICogaW52b2NhdGlvbi5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBJZiBgbGVhZGluZ2AgYW5kIGB0cmFpbGluZ2Agb3B0aW9ucyBhcmUgYHRydWVgLCBgZnVuY2AgaXNcbiAgICAgKiBpbnZva2VkIG9uIHRoZSB0cmFpbGluZyBlZGdlIG9mIHRoZSB0aW1lb3V0IG9ubHkgaWYgdGhlIGRlYm91bmNlZCBmdW5jdGlvblxuICAgICAqIGlzIGludm9rZWQgbW9yZSB0aGFuIG9uY2UgZHVyaW5nIHRoZSBgd2FpdGAgdGltZW91dC5cbiAgICAgKlxuICAgICAqIElmIGB3YWl0YCBpcyBgMGAgYW5kIGBsZWFkaW5nYCBpcyBgZmFsc2VgLCBgZnVuY2AgaW52b2NhdGlvbiBpcyBkZWZlcnJlZFxuICAgICAqIHVudGlsIHRvIHRoZSBuZXh0IHRpY2ssIHNpbWlsYXIgdG8gYHNldFRpbWVvdXRgIHdpdGggYSB0aW1lb3V0IG9mIGAwYC5cbiAgICAgKlxuICAgICAqIFNlZSBbRGF2aWQgQ29yYmFjaG8ncyBhcnRpY2xlXShodHRwczovL2Nzcy10cmlja3MuY29tL2RlYm91bmNpbmctdGhyb3R0bGluZy1leHBsYWluZWQtZXhhbXBsZXMvKVxuICAgICAqIGZvciBkZXRhaWxzIG92ZXIgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gYF8uZGVib3VuY2VgIGFuZCBgXy50aHJvdHRsZWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBkZWJvdW5jZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3dhaXQ9MF0gVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gZGVsYXkuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBUaGUgb3B0aW9ucyBvYmplY3QuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5sZWFkaW5nPWZhbHNlXVxuICAgICAqICBTcGVjaWZ5IGludm9raW5nIG9uIHRoZSBsZWFkaW5nIGVkZ2Ugb2YgdGhlIHRpbWVvdXQuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLm1heFdhaXRdXG4gICAgICogIFRoZSBtYXhpbXVtIHRpbWUgYGZ1bmNgIGlzIGFsbG93ZWQgdG8gYmUgZGVsYXllZCBiZWZvcmUgaXQncyBpbnZva2VkLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMudHJhaWxpbmc9dHJ1ZV1cbiAgICAgKiAgU3BlY2lmeSBpbnZva2luZyBvbiB0aGUgdHJhaWxpbmcgZWRnZSBvZiB0aGUgdGltZW91dC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBkZWJvdW5jZWQgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIC8vIEF2b2lkIGNvc3RseSBjYWxjdWxhdGlvbnMgd2hpbGUgdGhlIHdpbmRvdyBzaXplIGlzIGluIGZsdXguXG4gICAgICogalF1ZXJ5KHdpbmRvdykub24oJ3Jlc2l6ZScsIF8uZGVib3VuY2UoY2FsY3VsYXRlTGF5b3V0LCAxNTApKTtcbiAgICAgKlxuICAgICAqIC8vIEludm9rZSBgc2VuZE1haWxgIHdoZW4gY2xpY2tlZCwgZGVib3VuY2luZyBzdWJzZXF1ZW50IGNhbGxzLlxuICAgICAqIGpRdWVyeShlbGVtZW50KS5vbignY2xpY2snLCBfLmRlYm91bmNlKHNlbmRNYWlsLCAzMDAsIHtcbiAgICAgKiAgICdsZWFkaW5nJzogdHJ1ZSxcbiAgICAgKiAgICd0cmFpbGluZyc6IGZhbHNlXG4gICAgICogfSkpO1xuICAgICAqXG4gICAgICogLy8gRW5zdXJlIGBiYXRjaExvZ2AgaXMgaW52b2tlZCBvbmNlIGFmdGVyIDEgc2Vjb25kIG9mIGRlYm91bmNlZCBjYWxscy5cbiAgICAgKiB2YXIgZGVib3VuY2VkID0gXy5kZWJvdW5jZShiYXRjaExvZywgMjUwLCB7ICdtYXhXYWl0JzogMTAwMCB9KTtcbiAgICAgKiB2YXIgc291cmNlID0gbmV3IEV2ZW50U291cmNlKCcvc3RyZWFtJyk7XG4gICAgICogalF1ZXJ5KHNvdXJjZSkub24oJ21lc3NhZ2UnLCBkZWJvdW5jZWQpO1xuICAgICAqXG4gICAgICogLy8gQ2FuY2VsIHRoZSB0cmFpbGluZyBkZWJvdW5jZWQgaW52b2NhdGlvbi5cbiAgICAgKiBqUXVlcnkod2luZG93KS5vbigncG9wc3RhdGUnLCBkZWJvdW5jZWQuY2FuY2VsKTtcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBkZWJvdW5jZShmdW5jLCB3YWl0LCBvcHRpb25zKSB7XG4gICAgICB2YXIgbGFzdEFyZ3MsXG4gICAgICAgICAgbGFzdFRoaXMsXG4gICAgICAgICAgbWF4V2FpdCxcbiAgICAgICAgICByZXN1bHQsXG4gICAgICAgICAgdGltZXJJZCxcbiAgICAgICAgICBsYXN0Q2FsbFRpbWUsXG4gICAgICAgICAgbGFzdEludm9rZVRpbWUgPSAwLFxuICAgICAgICAgIGxlYWRpbmcgPSBmYWxzZSxcbiAgICAgICAgICBtYXhpbmcgPSBmYWxzZSxcbiAgICAgICAgICB0cmFpbGluZyA9IHRydWU7XG5cbiAgICAgIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgICAgIH1cbiAgICAgIHdhaXQgPSB0b051bWJlcih3YWl0KSB8fCAwO1xuICAgICAgaWYgKGlzT2JqZWN0KG9wdGlvbnMpKSB7XG4gICAgICAgIGxlYWRpbmcgPSAhIW9wdGlvbnMubGVhZGluZztcbiAgICAgICAgbWF4aW5nID0gJ21heFdhaXQnIGluIG9wdGlvbnM7XG4gICAgICAgIG1heFdhaXQgPSBtYXhpbmcgPyBuYXRpdmVNYXgodG9OdW1iZXIob3B0aW9ucy5tYXhXYWl0KSB8fCAwLCB3YWl0KSA6IG1heFdhaXQ7XG4gICAgICAgIHRyYWlsaW5nID0gJ3RyYWlsaW5nJyBpbiBvcHRpb25zID8gISFvcHRpb25zLnRyYWlsaW5nIDogdHJhaWxpbmc7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIGludm9rZUZ1bmModGltZSkge1xuICAgICAgICB2YXIgYXJncyA9IGxhc3RBcmdzLFxuICAgICAgICAgICAgdGhpc0FyZyA9IGxhc3RUaGlzO1xuXG4gICAgICAgIGxhc3RBcmdzID0gbGFzdFRoaXMgPSB1bmRlZmluZWQ7XG4gICAgICAgIGxhc3RJbnZva2VUaW1lID0gdGltZTtcbiAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzQXJnLCBhcmdzKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gbGVhZGluZ0VkZ2UodGltZSkge1xuICAgICAgICAvLyBSZXNldCBhbnkgYG1heFdhaXRgIHRpbWVyLlxuICAgICAgICBsYXN0SW52b2tlVGltZSA9IHRpbWU7XG4gICAgICAgIC8vIFN0YXJ0IHRoZSB0aW1lciBmb3IgdGhlIHRyYWlsaW5nIGVkZ2UuXG4gICAgICAgIHRpbWVySWQgPSBzZXRUaW1lb3V0KHRpbWVyRXhwaXJlZCwgd2FpdCk7XG4gICAgICAgIC8vIEludm9rZSB0aGUgbGVhZGluZyBlZGdlLlxuICAgICAgICByZXR1cm4gbGVhZGluZyA/IGludm9rZUZ1bmModGltZSkgOiByZXN1bHQ7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHJlbWFpbmluZ1dhaXQodGltZSkge1xuICAgICAgICB2YXIgdGltZVNpbmNlTGFzdENhbGwgPSB0aW1lIC0gbGFzdENhbGxUaW1lLFxuICAgICAgICAgICAgdGltZVNpbmNlTGFzdEludm9rZSA9IHRpbWUgLSBsYXN0SW52b2tlVGltZSxcbiAgICAgICAgICAgIHRpbWVXYWl0aW5nID0gd2FpdCAtIHRpbWVTaW5jZUxhc3RDYWxsO1xuXG4gICAgICAgIHJldHVybiBtYXhpbmdcbiAgICAgICAgICA/IG5hdGl2ZU1pbih0aW1lV2FpdGluZywgbWF4V2FpdCAtIHRpbWVTaW5jZUxhc3RJbnZva2UpXG4gICAgICAgICAgOiB0aW1lV2FpdGluZztcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gc2hvdWxkSW52b2tlKHRpbWUpIHtcbiAgICAgICAgdmFyIHRpbWVTaW5jZUxhc3RDYWxsID0gdGltZSAtIGxhc3RDYWxsVGltZSxcbiAgICAgICAgICAgIHRpbWVTaW5jZUxhc3RJbnZva2UgPSB0aW1lIC0gbGFzdEludm9rZVRpbWU7XG5cbiAgICAgICAgLy8gRWl0aGVyIHRoaXMgaXMgdGhlIGZpcnN0IGNhbGwsIGFjdGl2aXR5IGhhcyBzdG9wcGVkIGFuZCB3ZSdyZSBhdCB0aGVcbiAgICAgICAgLy8gdHJhaWxpbmcgZWRnZSwgdGhlIHN5c3RlbSB0aW1lIGhhcyBnb25lIGJhY2t3YXJkcyBhbmQgd2UncmUgdHJlYXRpbmdcbiAgICAgICAgLy8gaXQgYXMgdGhlIHRyYWlsaW5nIGVkZ2UsIG9yIHdlJ3ZlIGhpdCB0aGUgYG1heFdhaXRgIGxpbWl0LlxuICAgICAgICByZXR1cm4gKGxhc3RDYWxsVGltZSA9PT0gdW5kZWZpbmVkIHx8ICh0aW1lU2luY2VMYXN0Q2FsbCA+PSB3YWl0KSB8fFxuICAgICAgICAgICh0aW1lU2luY2VMYXN0Q2FsbCA8IDApIHx8IChtYXhpbmcgJiYgdGltZVNpbmNlTGFzdEludm9rZSA+PSBtYXhXYWl0KSk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHRpbWVyRXhwaXJlZCgpIHtcbiAgICAgICAgdmFyIHRpbWUgPSBub3coKTtcbiAgICAgICAgaWYgKHNob3VsZEludm9rZSh0aW1lKSkge1xuICAgICAgICAgIHJldHVybiB0cmFpbGluZ0VkZ2UodGltZSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUmVzdGFydCB0aGUgdGltZXIuXG4gICAgICAgIHRpbWVySWQgPSBzZXRUaW1lb3V0KHRpbWVyRXhwaXJlZCwgcmVtYWluaW5nV2FpdCh0aW1lKSk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHRyYWlsaW5nRWRnZSh0aW1lKSB7XG4gICAgICAgIHRpbWVySWQgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgLy8gT25seSBpbnZva2UgaWYgd2UgaGF2ZSBgbGFzdEFyZ3NgIHdoaWNoIG1lYW5zIGBmdW5jYCBoYXMgYmVlblxuICAgICAgICAvLyBkZWJvdW5jZWQgYXQgbGVhc3Qgb25jZS5cbiAgICAgICAgaWYgKHRyYWlsaW5nICYmIGxhc3RBcmdzKSB7XG4gICAgICAgICAgcmV0dXJuIGludm9rZUZ1bmModGltZSk7XG4gICAgICAgIH1cbiAgICAgICAgbGFzdEFyZ3MgPSBsYXN0VGhpcyA9IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gY2FuY2VsKCkge1xuICAgICAgICBpZiAodGltZXJJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVySWQpO1xuICAgICAgICB9XG4gICAgICAgIGxhc3RJbnZva2VUaW1lID0gMDtcbiAgICAgICAgbGFzdEFyZ3MgPSBsYXN0Q2FsbFRpbWUgPSBsYXN0VGhpcyA9IHRpbWVySWQgPSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIGZsdXNoKCkge1xuICAgICAgICByZXR1cm4gdGltZXJJZCA9PT0gdW5kZWZpbmVkID8gcmVzdWx0IDogdHJhaWxpbmdFZGdlKG5vdygpKTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gZGVib3VuY2VkKCkge1xuICAgICAgICB2YXIgdGltZSA9IG5vdygpLFxuICAgICAgICAgICAgaXNJbnZva2luZyA9IHNob3VsZEludm9rZSh0aW1lKTtcblxuICAgICAgICBsYXN0QXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgbGFzdFRoaXMgPSB0aGlzO1xuICAgICAgICBsYXN0Q2FsbFRpbWUgPSB0aW1lO1xuXG4gICAgICAgIGlmIChpc0ludm9raW5nKSB7XG4gICAgICAgICAgaWYgKHRpbWVySWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGxlYWRpbmdFZGdlKGxhc3RDYWxsVGltZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChtYXhpbmcpIHtcbiAgICAgICAgICAgIC8vIEhhbmRsZSBpbnZvY2F0aW9ucyBpbiBhIHRpZ2h0IGxvb3AuXG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXJJZCk7XG4gICAgICAgICAgICB0aW1lcklkID0gc2V0VGltZW91dCh0aW1lckV4cGlyZWQsIHdhaXQpO1xuICAgICAgICAgICAgcmV0dXJuIGludm9rZUZ1bmMobGFzdENhbGxUaW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRpbWVySWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRpbWVySWQgPSBzZXRUaW1lb3V0KHRpbWVyRXhwaXJlZCwgd2FpdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICAgIGRlYm91bmNlZC5jYW5jZWwgPSBjYW5jZWw7XG4gICAgICBkZWJvdW5jZWQuZmx1c2ggPSBmbHVzaDtcbiAgICAgIHJldHVybiBkZWJvdW5jZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVmZXJzIGludm9raW5nIHRoZSBgZnVuY2AgdW50aWwgdGhlIGN1cnJlbnQgY2FsbCBzdGFjayBoYXMgY2xlYXJlZC4gQW55XG4gICAgICogYWRkaXRpb25hbCBhcmd1bWVudHMgYXJlIHByb3ZpZGVkIHRvIGBmdW5jYCB3aGVuIGl0J3MgaW52b2tlZC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRlZmVyLlxuICAgICAqIEBwYXJhbSB7Li4uKn0gW2FyZ3NdIFRoZSBhcmd1bWVudHMgdG8gaW52b2tlIGBmdW5jYCB3aXRoLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHRpbWVyIGlkLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmRlZmVyKGZ1bmN0aW9uKHRleHQpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKHRleHQpO1xuICAgICAqIH0sICdkZWZlcnJlZCcpO1xuICAgICAqIC8vID0+IExvZ3MgJ2RlZmVycmVkJyBhZnRlciBvbmUgbWlsbGlzZWNvbmQuXG4gICAgICovXG4gICAgdmFyIGRlZmVyID0gYmFzZVJlc3QoZnVuY3Rpb24oZnVuYywgYXJncykge1xuICAgICAgcmV0dXJuIGJhc2VEZWxheShmdW5jLCAxLCBhcmdzKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIEludm9rZXMgYGZ1bmNgIGFmdGVyIGB3YWl0YCBtaWxsaXNlY29uZHMuIEFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyBhcmVcbiAgICAgKiBwcm92aWRlZCB0byBgZnVuY2Agd2hlbiBpdCdzIGludm9rZWQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBkZWxheS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gd2FpdCBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byBkZWxheSBpbnZvY2F0aW9uLlxuICAgICAqIEBwYXJhbSB7Li4uKn0gW2FyZ3NdIFRoZSBhcmd1bWVudHMgdG8gaW52b2tlIGBmdW5jYCB3aXRoLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHRpbWVyIGlkLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmRlbGF5KGZ1bmN0aW9uKHRleHQpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKHRleHQpO1xuICAgICAqIH0sIDEwMDAsICdsYXRlcicpO1xuICAgICAqIC8vID0+IExvZ3MgJ2xhdGVyJyBhZnRlciBvbmUgc2Vjb25kLlxuICAgICAqL1xuICAgIHZhciBkZWxheSA9IGJhc2VSZXN0KGZ1bmN0aW9uKGZ1bmMsIHdhaXQsIGFyZ3MpIHtcbiAgICAgIHJldHVybiBiYXNlRGVsYXkoZnVuYywgdG9OdW1iZXIod2FpdCkgfHwgMCwgYXJncyk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIGFyZ3VtZW50cyByZXZlcnNlZC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGZsaXAgYXJndW1lbnRzIGZvci5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmbGlwcGVkIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgZmxpcHBlZCA9IF8uZmxpcChmdW5jdGlvbigpIHtcbiAgICAgKiAgIHJldHVybiBfLnRvQXJyYXkoYXJndW1lbnRzKTtcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIGZsaXBwZWQoJ2EnLCAnYicsICdjJywgJ2QnKTtcbiAgICAgKiAvLyA9PiBbJ2QnLCAnYycsICdiJywgJ2EnXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZsaXAoZnVuYykge1xuICAgICAgcmV0dXJuIGNyZWF0ZVdyYXAoZnVuYywgV1JBUF9GTElQX0ZMQUcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IG1lbW9pemVzIHRoZSByZXN1bHQgb2YgYGZ1bmNgLiBJZiBgcmVzb2x2ZXJgIGlzXG4gICAgICogcHJvdmlkZWQsIGl0IGRldGVybWluZXMgdGhlIGNhY2hlIGtleSBmb3Igc3RvcmluZyB0aGUgcmVzdWx0IGJhc2VkIG9uIHRoZVxuICAgICAqIGFyZ3VtZW50cyBwcm92aWRlZCB0byB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24uIEJ5IGRlZmF1bHQsIHRoZSBmaXJzdCBhcmd1bWVudFxuICAgICAqIHByb3ZpZGVkIHRvIHRoZSBtZW1vaXplZCBmdW5jdGlvbiBpcyB1c2VkIGFzIHRoZSBtYXAgY2FjaGUga2V5LiBUaGUgYGZ1bmNgXG4gICAgICogaXMgaW52b2tlZCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhlIGNhY2hlIGlzIGV4cG9zZWQgYXMgdGhlIGBjYWNoZWAgcHJvcGVydHkgb24gdGhlIG1lbW9pemVkXG4gICAgICogZnVuY3Rpb24uIEl0cyBjcmVhdGlvbiBtYXkgYmUgY3VzdG9taXplZCBieSByZXBsYWNpbmcgdGhlIGBfLm1lbW9pemUuQ2FjaGVgXG4gICAgICogY29uc3RydWN0b3Igd2l0aCBvbmUgd2hvc2UgaW5zdGFuY2VzIGltcGxlbWVudCB0aGVcbiAgICAgKiBbYE1hcGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXByb3BlcnRpZXMtb2YtdGhlLW1hcC1wcm90b3R5cGUtb2JqZWN0KVxuICAgICAqIG1ldGhvZCBpbnRlcmZhY2Ugb2YgYGNsZWFyYCwgYGRlbGV0ZWAsIGBnZXRgLCBgaGFzYCwgYW5kIGBzZXRgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaGF2ZSBpdHMgb3V0cHV0IG1lbW9pemVkLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtyZXNvbHZlcl0gVGhlIGZ1bmN0aW9uIHRvIHJlc29sdmUgdGhlIGNhY2hlIGtleS5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBtZW1vaXplZCBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxLCAnYic6IDIgfTtcbiAgICAgKiB2YXIgb3RoZXIgPSB7ICdjJzogMywgJ2QnOiA0IH07XG4gICAgICpcbiAgICAgKiB2YXIgdmFsdWVzID0gXy5tZW1vaXplKF8udmFsdWVzKTtcbiAgICAgKiB2YWx1ZXMob2JqZWN0KTtcbiAgICAgKiAvLyA9PiBbMSwgMl1cbiAgICAgKlxuICAgICAqIHZhbHVlcyhvdGhlcik7XG4gICAgICogLy8gPT4gWzMsIDRdXG4gICAgICpcbiAgICAgKiBvYmplY3QuYSA9IDI7XG4gICAgICogdmFsdWVzKG9iamVjdCk7XG4gICAgICogLy8gPT4gWzEsIDJdXG4gICAgICpcbiAgICAgKiAvLyBNb2RpZnkgdGhlIHJlc3VsdCBjYWNoZS5cbiAgICAgKiB2YWx1ZXMuY2FjaGUuc2V0KG9iamVjdCwgWydhJywgJ2InXSk7XG4gICAgICogdmFsdWVzKG9iamVjdCk7XG4gICAgICogLy8gPT4gWydhJywgJ2InXVxuICAgICAqXG4gICAgICogLy8gUmVwbGFjZSBgXy5tZW1vaXplLkNhY2hlYC5cbiAgICAgKiBfLm1lbW9pemUuQ2FjaGUgPSBXZWFrTWFwO1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1lbW9pemUoZnVuYywgcmVzb2x2ZXIpIHtcbiAgICAgIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nIHx8IChyZXNvbHZlciAhPSBudWxsICYmIHR5cGVvZiByZXNvbHZlciAhPSAnZnVuY3Rpb24nKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gICAgICB9XG4gICAgICB2YXIgbWVtb2l6ZWQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsXG4gICAgICAgICAgICBrZXkgPSByZXNvbHZlciA/IHJlc29sdmVyLmFwcGx5KHRoaXMsIGFyZ3MpIDogYXJnc1swXSxcbiAgICAgICAgICAgIGNhY2hlID0gbWVtb2l6ZWQuY2FjaGU7XG5cbiAgICAgICAgaWYgKGNhY2hlLmhhcyhrZXkpKSB7XG4gICAgICAgICAgcmV0dXJuIGNhY2hlLmdldChrZXkpO1xuICAgICAgICB9XG4gICAgICAgIHZhciByZXN1bHQgPSBmdW5jLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICBtZW1vaXplZC5jYWNoZSA9IGNhY2hlLnNldChrZXksIHJlc3VsdCkgfHwgY2FjaGU7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9O1xuICAgICAgbWVtb2l6ZWQuY2FjaGUgPSBuZXcgKG1lbW9pemUuQ2FjaGUgfHwgTWFwQ2FjaGUpO1xuICAgICAgcmV0dXJuIG1lbW9pemVkO1xuICAgIH1cblxuICAgIC8vIEV4cG9zZSBgTWFwQ2FjaGVgLlxuICAgIG1lbW9pemUuQ2FjaGUgPSBNYXBDYWNoZTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IG5lZ2F0ZXMgdGhlIHJlc3VsdCBvZiB0aGUgcHJlZGljYXRlIGBmdW5jYC4gVGhlXG4gICAgICogYGZ1bmNgIHByZWRpY2F0ZSBpcyBpbnZva2VkIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIGFuZCBhcmd1bWVudHMgb2YgdGhlXG4gICAgICogY3JlYXRlZCBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgcHJlZGljYXRlIHRvIG5lZ2F0ZS5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBuZWdhdGVkIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBpc0V2ZW4obikge1xuICAgICAqICAgcmV0dXJuIG4gJSAyID09IDA7XG4gICAgICogfVxuICAgICAqXG4gICAgICogXy5maWx0ZXIoWzEsIDIsIDMsIDQsIDUsIDZdLCBfLm5lZ2F0ZShpc0V2ZW4pKTtcbiAgICAgKiAvLyA9PiBbMSwgMywgNV1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBuZWdhdGUocHJlZGljYXRlKSB7XG4gICAgICBpZiAodHlwZW9mIHByZWRpY2F0ZSAhPSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICAgIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICAgICAgICBjYXNlIDA6IHJldHVybiAhcHJlZGljYXRlLmNhbGwodGhpcyk7XG4gICAgICAgICAgY2FzZSAxOiByZXR1cm4gIXByZWRpY2F0ZS5jYWxsKHRoaXMsIGFyZ3NbMF0pO1xuICAgICAgICAgIGNhc2UgMjogcmV0dXJuICFwcmVkaWNhdGUuY2FsbCh0aGlzLCBhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICAgICAgICBjYXNlIDM6IHJldHVybiAhcHJlZGljYXRlLmNhbGwodGhpcywgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICFwcmVkaWNhdGUuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGlzIHJlc3RyaWN0ZWQgdG8gaW52b2tpbmcgYGZ1bmNgIG9uY2UuIFJlcGVhdCBjYWxsc1xuICAgICAqIHRvIHRoZSBmdW5jdGlvbiByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBpbnZvY2F0aW9uLiBUaGUgYGZ1bmNgIGlzXG4gICAgICogaW52b2tlZCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBhbmQgYXJndW1lbnRzIG9mIHRoZSBjcmVhdGVkIGZ1bmN0aW9uLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcmVzdHJpY3QuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgcmVzdHJpY3RlZCBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGluaXRpYWxpemUgPSBfLm9uY2UoY3JlYXRlQXBwbGljYXRpb24pO1xuICAgICAqIGluaXRpYWxpemUoKTtcbiAgICAgKiBpbml0aWFsaXplKCk7XG4gICAgICogLy8gPT4gYGNyZWF0ZUFwcGxpY2F0aW9uYCBpcyBpbnZva2VkIG9uY2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBvbmNlKGZ1bmMpIHtcbiAgICAgIHJldHVybiBiZWZvcmUoMiwgZnVuYyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2Agd2l0aCBpdHMgYXJndW1lbnRzIHRyYW5zZm9ybWVkLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC5cbiAgICAgKiBAcGFyYW0gey4uLihGdW5jdGlvbnxGdW5jdGlvbltdKX0gW3RyYW5zZm9ybXM9W18uaWRlbnRpdHldXVxuICAgICAqICBUaGUgYXJndW1lbnQgdHJhbnNmb3Jtcy5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gZG91YmxlZChuKSB7XG4gICAgICogICByZXR1cm4gbiAqIDI7XG4gICAgICogfVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gc3F1YXJlKG4pIHtcbiAgICAgKiAgIHJldHVybiBuICogbjtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiB2YXIgZnVuYyA9IF8ub3ZlckFyZ3MoZnVuY3Rpb24oeCwgeSkge1xuICAgICAqICAgcmV0dXJuIFt4LCB5XTtcbiAgICAgKiB9LCBbc3F1YXJlLCBkb3VibGVkXSk7XG4gICAgICpcbiAgICAgKiBmdW5jKDksIDMpO1xuICAgICAqIC8vID0+IFs4MSwgNl1cbiAgICAgKlxuICAgICAqIGZ1bmMoMTAsIDUpO1xuICAgICAqIC8vID0+IFsxMDAsIDEwXVxuICAgICAqL1xuICAgIHZhciBvdmVyQXJncyA9IGNhc3RSZXN0KGZ1bmN0aW9uKGZ1bmMsIHRyYW5zZm9ybXMpIHtcbiAgICAgIHRyYW5zZm9ybXMgPSAodHJhbnNmb3Jtcy5sZW5ndGggPT0gMSAmJiBpc0FycmF5KHRyYW5zZm9ybXNbMF0pKVxuICAgICAgICA/IGFycmF5TWFwKHRyYW5zZm9ybXNbMF0sIGJhc2VVbmFyeShnZXRJdGVyYXRlZSgpKSlcbiAgICAgICAgOiBhcnJheU1hcChiYXNlRmxhdHRlbih0cmFuc2Zvcm1zLCAxKSwgYmFzZVVuYXJ5KGdldEl0ZXJhdGVlKCkpKTtcblxuICAgICAgdmFyIGZ1bmNzTGVuZ3RoID0gdHJhbnNmb3Jtcy5sZW5ndGg7XG4gICAgICByZXR1cm4gYmFzZVJlc3QoZnVuY3Rpb24oYXJncykge1xuICAgICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICAgIGxlbmd0aCA9IG5hdGl2ZU1pbihhcmdzLmxlbmd0aCwgZnVuY3NMZW5ndGgpO1xuXG4gICAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgYXJnc1tpbmRleF0gPSB0cmFuc2Zvcm1zW2luZGV4XS5jYWxsKHRoaXMsIGFyZ3NbaW5kZXhdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXBwbHkoZnVuYywgdGhpcywgYXJncyk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggYHBhcnRpYWxzYCBwcmVwZW5kZWQgdG8gdGhlXG4gICAgICogYXJndW1lbnRzIGl0IHJlY2VpdmVzLiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmJpbmRgIGV4Y2VwdCBpdCBkb2VzICoqbm90KipcbiAgICAgKiBhbHRlciB0aGUgYHRoaXNgIGJpbmRpbmcuXG4gICAgICpcbiAgICAgKiBUaGUgYF8ucGFydGlhbC5wbGFjZWhvbGRlcmAgdmFsdWUsIHdoaWNoIGRlZmF1bHRzIHRvIGBfYCBpbiBtb25vbGl0aGljXG4gICAgICogYnVpbGRzLCBtYXkgYmUgdXNlZCBhcyBhIHBsYWNlaG9sZGVyIGZvciBwYXJ0aWFsbHkgYXBwbGllZCBhcmd1bWVudHMuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgZG9lc24ndCBzZXQgdGhlIFwibGVuZ3RoXCIgcHJvcGVydHkgb2YgcGFydGlhbGx5XG4gICAgICogYXBwbGllZCBmdW5jdGlvbnMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4yLjBcbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBwYXJ0aWFsbHkgYXBwbHkgYXJndW1lbnRzIHRvLlxuICAgICAqIEBwYXJhbSB7Li4uKn0gW3BhcnRpYWxzXSBUaGUgYXJndW1lbnRzIHRvIGJlIHBhcnRpYWxseSBhcHBsaWVkLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHBhcnRpYWxseSBhcHBsaWVkIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBncmVldChncmVldGluZywgbmFtZSkge1xuICAgICAqICAgcmV0dXJuIGdyZWV0aW5nICsgJyAnICsgbmFtZTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiB2YXIgc2F5SGVsbG9UbyA9IF8ucGFydGlhbChncmVldCwgJ2hlbGxvJyk7XG4gICAgICogc2F5SGVsbG9UbygnZnJlZCcpO1xuICAgICAqIC8vID0+ICdoZWxsbyBmcmVkJ1xuICAgICAqXG4gICAgICogLy8gUGFydGlhbGx5IGFwcGxpZWQgd2l0aCBwbGFjZWhvbGRlcnMuXG4gICAgICogdmFyIGdyZWV0RnJlZCA9IF8ucGFydGlhbChncmVldCwgXywgJ2ZyZWQnKTtcbiAgICAgKiBncmVldEZyZWQoJ2hpJyk7XG4gICAgICogLy8gPT4gJ2hpIGZyZWQnXG4gICAgICovXG4gICAgdmFyIHBhcnRpYWwgPSBiYXNlUmVzdChmdW5jdGlvbihmdW5jLCBwYXJ0aWFscykge1xuICAgICAgdmFyIGhvbGRlcnMgPSByZXBsYWNlSG9sZGVycyhwYXJ0aWFscywgZ2V0SG9sZGVyKHBhcnRpYWwpKTtcbiAgICAgIHJldHVybiBjcmVhdGVXcmFwKGZ1bmMsIFdSQVBfUEFSVElBTF9GTEFHLCB1bmRlZmluZWQsIHBhcnRpYWxzLCBob2xkZXJzKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8ucGFydGlhbGAgZXhjZXB0IHRoYXQgcGFydGlhbGx5IGFwcGxpZWQgYXJndW1lbnRzXG4gICAgICogYXJlIGFwcGVuZGVkIHRvIHRoZSBhcmd1bWVudHMgaXQgcmVjZWl2ZXMuXG4gICAgICpcbiAgICAgKiBUaGUgYF8ucGFydGlhbFJpZ2h0LnBsYWNlaG9sZGVyYCB2YWx1ZSwgd2hpY2ggZGVmYXVsdHMgdG8gYF9gIGluIG1vbm9saXRoaWNcbiAgICAgKiBidWlsZHMsIG1heSBiZSB1c2VkIGFzIGEgcGxhY2Vob2xkZXIgZm9yIHBhcnRpYWxseSBhcHBsaWVkIGFyZ3VtZW50cy5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBkb2Vzbid0IHNldCB0aGUgXCJsZW5ndGhcIiBwcm9wZXJ0eSBvZiBwYXJ0aWFsbHlcbiAgICAgKiBhcHBsaWVkIGZ1bmN0aW9ucy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAxLjAuMFxuICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHBhcnRpYWxseSBhcHBseSBhcmd1bWVudHMgdG8uXG4gICAgICogQHBhcmFtIHsuLi4qfSBbcGFydGlhbHNdIFRoZSBhcmd1bWVudHMgdG8gYmUgcGFydGlhbGx5IGFwcGxpZWQuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgcGFydGlhbGx5IGFwcGxpZWQgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIGdyZWV0KGdyZWV0aW5nLCBuYW1lKSB7XG4gICAgICogICByZXR1cm4gZ3JlZXRpbmcgKyAnICcgKyBuYW1lO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIHZhciBncmVldEZyZWQgPSBfLnBhcnRpYWxSaWdodChncmVldCwgJ2ZyZWQnKTtcbiAgICAgKiBncmVldEZyZWQoJ2hpJyk7XG4gICAgICogLy8gPT4gJ2hpIGZyZWQnXG4gICAgICpcbiAgICAgKiAvLyBQYXJ0aWFsbHkgYXBwbGllZCB3aXRoIHBsYWNlaG9sZGVycy5cbiAgICAgKiB2YXIgc2F5SGVsbG9UbyA9IF8ucGFydGlhbFJpZ2h0KGdyZWV0LCAnaGVsbG8nLCBfKTtcbiAgICAgKiBzYXlIZWxsb1RvKCdmcmVkJyk7XG4gICAgICogLy8gPT4gJ2hlbGxvIGZyZWQnXG4gICAgICovXG4gICAgdmFyIHBhcnRpYWxSaWdodCA9IGJhc2VSZXN0KGZ1bmN0aW9uKGZ1bmMsIHBhcnRpYWxzKSB7XG4gICAgICB2YXIgaG9sZGVycyA9IHJlcGxhY2VIb2xkZXJzKHBhcnRpYWxzLCBnZXRIb2xkZXIocGFydGlhbFJpZ2h0KSk7XG4gICAgICByZXR1cm4gY3JlYXRlV3JhcChmdW5jLCBXUkFQX1BBUlRJQUxfUklHSFRfRkxBRywgdW5kZWZpbmVkLCBwYXJ0aWFscywgaG9sZGVycyk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIGFyZ3VtZW50cyBhcnJhbmdlZCBhY2NvcmRpbmdcbiAgICAgKiB0byB0aGUgc3BlY2lmaWVkIGBpbmRleGVzYCB3aGVyZSB0aGUgYXJndW1lbnQgdmFsdWUgYXQgdGhlIGZpcnN0IGluZGV4IGlzXG4gICAgICogcHJvdmlkZWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50LCB0aGUgYXJndW1lbnQgdmFsdWUgYXQgdGhlIHNlY29uZCBpbmRleCBpc1xuICAgICAqIHByb3ZpZGVkIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQsIGFuZCBzbyBvbi5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHJlYXJyYW5nZSBhcmd1bWVudHMgZm9yLlxuICAgICAqIEBwYXJhbSB7Li4uKG51bWJlcnxudW1iZXJbXSl9IGluZGV4ZXMgVGhlIGFycmFuZ2VkIGFyZ3VtZW50IGluZGV4ZXMuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciByZWFyZ2VkID0gXy5yZWFyZyhmdW5jdGlvbihhLCBiLCBjKSB7XG4gICAgICogICByZXR1cm4gW2EsIGIsIGNdO1xuICAgICAqIH0sIFsyLCAwLCAxXSk7XG4gICAgICpcbiAgICAgKiByZWFyZ2VkKCdiJywgJ2MnLCAnYScpXG4gICAgICogLy8gPT4gWydhJywgJ2InLCAnYyddXG4gICAgICovXG4gICAgdmFyIHJlYXJnID0gZmxhdFJlc3QoZnVuY3Rpb24oZnVuYywgaW5kZXhlcykge1xuICAgICAgcmV0dXJuIGNyZWF0ZVdyYXAoZnVuYywgV1JBUF9SRUFSR19GTEFHLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBpbmRleGVzKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIHRoZVxuICAgICAqIGNyZWF0ZWQgZnVuY3Rpb24gYW5kIGFyZ3VtZW50cyBmcm9tIGBzdGFydGAgYW5kIGJleW9uZCBwcm92aWRlZCBhc1xuICAgICAqIGFuIGFycmF5LlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGJhc2VkIG9uIHRoZVxuICAgICAqIFtyZXN0IHBhcmFtZXRlcl0oaHR0cHM6Ly9tZG4uaW8vcmVzdF9wYXJhbWV0ZXJzKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD1mdW5jLmxlbmd0aC0xXSBUaGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIHJlc3QgcGFyYW1ldGVyLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgc2F5ID0gXy5yZXN0KGZ1bmN0aW9uKHdoYXQsIG5hbWVzKSB7XG4gICAgICogICByZXR1cm4gd2hhdCArICcgJyArIF8uaW5pdGlhbChuYW1lcykuam9pbignLCAnKSArXG4gICAgICogICAgIChfLnNpemUobmFtZXMpID4gMSA/ICcsICYgJyA6ICcnKSArIF8ubGFzdChuYW1lcyk7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiBzYXkoJ2hlbGxvJywgJ2ZyZWQnLCAnYmFybmV5JywgJ3BlYmJsZXMnKTtcbiAgICAgKiAvLyA9PiAnaGVsbG8gZnJlZCwgYmFybmV5LCAmIHBlYmJsZXMnXG4gICAgICovXG4gICAgZnVuY3Rpb24gcmVzdChmdW5jLCBzdGFydCkge1xuICAgICAgaWYgKHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICAgICAgfVxuICAgICAgc3RhcnQgPSBzdGFydCA9PT0gdW5kZWZpbmVkID8gc3RhcnQgOiB0b0ludGVnZXIoc3RhcnQpO1xuICAgICAgcmV0dXJuIGJhc2VSZXN0KGZ1bmMsIHN0YXJ0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiB0aGVcbiAgICAgKiBjcmVhdGUgZnVuY3Rpb24gYW5kIGFuIGFycmF5IG9mIGFyZ3VtZW50cyBtdWNoIGxpa2VcbiAgICAgKiBbYEZ1bmN0aW9uI2FwcGx5YF0oaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLWZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseSkuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgYmFzZWQgb24gdGhlXG4gICAgICogW3NwcmVhZCBvcGVyYXRvcl0oaHR0cHM6Ly9tZG4uaW8vc3ByZWFkX29wZXJhdG9yKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjIuMFxuICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHNwcmVhZCBhcmd1bWVudHMgb3Zlci5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PTBdIFRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgc3ByZWFkLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgc2F5ID0gXy5zcHJlYWQoZnVuY3Rpb24od2hvLCB3aGF0KSB7XG4gICAgICogICByZXR1cm4gd2hvICsgJyBzYXlzICcgKyB3aGF0O1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogc2F5KFsnZnJlZCcsICdoZWxsbyddKTtcbiAgICAgKiAvLyA9PiAnZnJlZCBzYXlzIGhlbGxvJ1xuICAgICAqXG4gICAgICogdmFyIG51bWJlcnMgPSBQcm9taXNlLmFsbChbXG4gICAgICogICBQcm9taXNlLnJlc29sdmUoNDApLFxuICAgICAqICAgUHJvbWlzZS5yZXNvbHZlKDM2KVxuICAgICAqIF0pO1xuICAgICAqXG4gICAgICogbnVtYmVycy50aGVuKF8uc3ByZWFkKGZ1bmN0aW9uKHgsIHkpIHtcbiAgICAgKiAgIHJldHVybiB4ICsgeTtcbiAgICAgKiB9KSk7XG4gICAgICogLy8gPT4gYSBQcm9taXNlIG9mIDc2XG4gICAgICovXG4gICAgZnVuY3Rpb24gc3ByZWFkKGZ1bmMsIHN0YXJ0KSB7XG4gICAgICBpZiAodHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gICAgICB9XG4gICAgICBzdGFydCA9IHN0YXJ0ID09IG51bGwgPyAwIDogbmF0aXZlTWF4KHRvSW50ZWdlcihzdGFydCksIDApO1xuICAgICAgcmV0dXJuIGJhc2VSZXN0KGZ1bmN0aW9uKGFyZ3MpIHtcbiAgICAgICAgdmFyIGFycmF5ID0gYXJnc1tzdGFydF0sXG4gICAgICAgICAgICBvdGhlckFyZ3MgPSBjYXN0U2xpY2UoYXJncywgMCwgc3RhcnQpO1xuXG4gICAgICAgIGlmIChhcnJheSkge1xuICAgICAgICAgIGFycmF5UHVzaChvdGhlckFyZ3MsIGFycmF5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXBwbHkoZnVuYywgdGhpcywgb3RoZXJBcmdzKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSB0aHJvdHRsZWQgZnVuY3Rpb24gdGhhdCBvbmx5IGludm9rZXMgYGZ1bmNgIGF0IG1vc3Qgb25jZSBwZXJcbiAgICAgKiBldmVyeSBgd2FpdGAgbWlsbGlzZWNvbmRzLiBUaGUgdGhyb3R0bGVkIGZ1bmN0aW9uIGNvbWVzIHdpdGggYSBgY2FuY2VsYFxuICAgICAqIG1ldGhvZCB0byBjYW5jZWwgZGVsYXllZCBgZnVuY2AgaW52b2NhdGlvbnMgYW5kIGEgYGZsdXNoYCBtZXRob2QgdG9cbiAgICAgKiBpbW1lZGlhdGVseSBpbnZva2UgdGhlbS4gUHJvdmlkZSBgb3B0aW9uc2AgdG8gaW5kaWNhdGUgd2hldGhlciBgZnVuY2BcbiAgICAgKiBzaG91bGQgYmUgaW52b2tlZCBvbiB0aGUgbGVhZGluZyBhbmQvb3IgdHJhaWxpbmcgZWRnZSBvZiB0aGUgYHdhaXRgXG4gICAgICogdGltZW91dC4gVGhlIGBmdW5jYCBpcyBpbnZva2VkIHdpdGggdGhlIGxhc3QgYXJndW1lbnRzIHByb3ZpZGVkIHRvIHRoZVxuICAgICAqIHRocm90dGxlZCBmdW5jdGlvbi4gU3Vic2VxdWVudCBjYWxscyB0byB0aGUgdGhyb3R0bGVkIGZ1bmN0aW9uIHJldHVybiB0aGVcbiAgICAgKiByZXN1bHQgb2YgdGhlIGxhc3QgYGZ1bmNgIGludm9jYXRpb24uXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogSWYgYGxlYWRpbmdgIGFuZCBgdHJhaWxpbmdgIG9wdGlvbnMgYXJlIGB0cnVlYCwgYGZ1bmNgIGlzXG4gICAgICogaW52b2tlZCBvbiB0aGUgdHJhaWxpbmcgZWRnZSBvZiB0aGUgdGltZW91dCBvbmx5IGlmIHRoZSB0aHJvdHRsZWQgZnVuY3Rpb25cbiAgICAgKiBpcyBpbnZva2VkIG1vcmUgdGhhbiBvbmNlIGR1cmluZyB0aGUgYHdhaXRgIHRpbWVvdXQuXG4gICAgICpcbiAgICAgKiBJZiBgd2FpdGAgaXMgYDBgIGFuZCBgbGVhZGluZ2AgaXMgYGZhbHNlYCwgYGZ1bmNgIGludm9jYXRpb24gaXMgZGVmZXJyZWRcbiAgICAgKiB1bnRpbCB0byB0aGUgbmV4dCB0aWNrLCBzaW1pbGFyIHRvIGBzZXRUaW1lb3V0YCB3aXRoIGEgdGltZW91dCBvZiBgMGAuXG4gICAgICpcbiAgICAgKiBTZWUgW0RhdmlkIENvcmJhY2hvJ3MgYXJ0aWNsZV0oaHR0cHM6Ly9jc3MtdHJpY2tzLmNvbS9kZWJvdW5jaW5nLXRocm90dGxpbmctZXhwbGFpbmVkLWV4YW1wbGVzLylcbiAgICAgKiBmb3IgZGV0YWlscyBvdmVyIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIGBfLnRocm90dGxlYCBhbmQgYF8uZGVib3VuY2VgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gdGhyb3R0bGUuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt3YWl0PTBdIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHRocm90dGxlIGludm9jYXRpb25zIHRvLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gVGhlIG9wdGlvbnMgb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMubGVhZGluZz10cnVlXVxuICAgICAqICBTcGVjaWZ5IGludm9raW5nIG9uIHRoZSBsZWFkaW5nIGVkZ2Ugb2YgdGhlIHRpbWVvdXQuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy50cmFpbGluZz10cnVlXVxuICAgICAqICBTcGVjaWZ5IGludm9raW5nIG9uIHRoZSB0cmFpbGluZyBlZGdlIG9mIHRoZSB0aW1lb3V0LlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHRocm90dGxlZCBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy8gQXZvaWQgZXhjZXNzaXZlbHkgdXBkYXRpbmcgdGhlIHBvc2l0aW9uIHdoaWxlIHNjcm9sbGluZy5cbiAgICAgKiBqUXVlcnkod2luZG93KS5vbignc2Nyb2xsJywgXy50aHJvdHRsZSh1cGRhdGVQb3NpdGlvbiwgMTAwKSk7XG4gICAgICpcbiAgICAgKiAvLyBJbnZva2UgYHJlbmV3VG9rZW5gIHdoZW4gdGhlIGNsaWNrIGV2ZW50IGlzIGZpcmVkLCBidXQgbm90IG1vcmUgdGhhbiBvbmNlIGV2ZXJ5IDUgbWludXRlcy5cbiAgICAgKiB2YXIgdGhyb3R0bGVkID0gXy50aHJvdHRsZShyZW5ld1Rva2VuLCAzMDAwMDAsIHsgJ3RyYWlsaW5nJzogZmFsc2UgfSk7XG4gICAgICogalF1ZXJ5KGVsZW1lbnQpLm9uKCdjbGljaycsIHRocm90dGxlZCk7XG4gICAgICpcbiAgICAgKiAvLyBDYW5jZWwgdGhlIHRyYWlsaW5nIHRocm90dGxlZCBpbnZvY2F0aW9uLlxuICAgICAqIGpRdWVyeSh3aW5kb3cpLm9uKCdwb3BzdGF0ZScsIHRocm90dGxlZC5jYW5jZWwpO1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRocm90dGxlKGZ1bmMsIHdhaXQsIG9wdGlvbnMpIHtcbiAgICAgIHZhciBsZWFkaW5nID0gdHJ1ZSxcbiAgICAgICAgICB0cmFpbGluZyA9IHRydWU7XG5cbiAgICAgIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgICAgIH1cbiAgICAgIGlmIChpc09iamVjdChvcHRpb25zKSkge1xuICAgICAgICBsZWFkaW5nID0gJ2xlYWRpbmcnIGluIG9wdGlvbnMgPyAhIW9wdGlvbnMubGVhZGluZyA6IGxlYWRpbmc7XG4gICAgICAgIHRyYWlsaW5nID0gJ3RyYWlsaW5nJyBpbiBvcHRpb25zID8gISFvcHRpb25zLnRyYWlsaW5nIDogdHJhaWxpbmc7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGVib3VuY2UoZnVuYywgd2FpdCwge1xuICAgICAgICAnbGVhZGluZyc6IGxlYWRpbmcsXG4gICAgICAgICdtYXhXYWl0Jzogd2FpdCxcbiAgICAgICAgJ3RyYWlsaW5nJzogdHJhaWxpbmdcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGFjY2VwdHMgdXAgdG8gb25lIGFyZ3VtZW50LCBpZ25vcmluZyBhbnlcbiAgICAgKiBhZGRpdGlvbmFsIGFyZ3VtZW50cy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNhcCBhcmd1bWVudHMgZm9yLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNhcHBlZCBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5tYXAoWyc2JywgJzgnLCAnMTAnXSwgXy51bmFyeShwYXJzZUludCkpO1xuICAgICAqIC8vID0+IFs2LCA4LCAxMF1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB1bmFyeShmdW5jKSB7XG4gICAgICByZXR1cm4gYXJ5KGZ1bmMsIDEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHByb3ZpZGVzIGB2YWx1ZWAgdG8gYHdyYXBwZXJgIGFzIGl0cyBmaXJzdFxuICAgICAqIGFyZ3VtZW50LiBBbnkgYWRkaXRpb25hbCBhcmd1bWVudHMgcHJvdmlkZWQgdG8gdGhlIGZ1bmN0aW9uIGFyZSBhcHBlbmRlZFxuICAgICAqIHRvIHRob3NlIHByb3ZpZGVkIHRvIHRoZSBgd3JhcHBlcmAuIFRoZSB3cmFwcGVyIGlzIGludm9rZWQgd2l0aCB0aGUgYHRoaXNgXG4gICAgICogYmluZGluZyBvZiB0aGUgY3JlYXRlZCBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHdyYXAuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3dyYXBwZXI9aWRlbnRpdHldIFRoZSB3cmFwcGVyIGZ1bmN0aW9uLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgcCA9IF8ud3JhcChfLmVzY2FwZSwgZnVuY3Rpb24oZnVuYywgdGV4dCkge1xuICAgICAqICAgcmV0dXJuICc8cD4nICsgZnVuYyh0ZXh0KSArICc8L3A+JztcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIHAoJ2ZyZWQsIGJhcm5leSwgJiBwZWJibGVzJyk7XG4gICAgICogLy8gPT4gJzxwPmZyZWQsIGJhcm5leSwgJmFtcDsgcGViYmxlczwvcD4nXG4gICAgICovXG4gICAgZnVuY3Rpb24gd3JhcCh2YWx1ZSwgd3JhcHBlcikge1xuICAgICAgcmV0dXJuIHBhcnRpYWwoY2FzdEZ1bmN0aW9uKHdyYXBwZXIpLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLyoqXG4gICAgICogQ2FzdHMgYHZhbHVlYCBhcyBhbiBhcnJheSBpZiBpdCdzIG5vdCBvbmUuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC40LjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBjYXN0IGFycmF5LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmNhc3RBcnJheSgxKTtcbiAgICAgKiAvLyA9PiBbMV1cbiAgICAgKlxuICAgICAqIF8uY2FzdEFycmF5KHsgJ2EnOiAxIH0pO1xuICAgICAqIC8vID0+IFt7ICdhJzogMSB9XVxuICAgICAqXG4gICAgICogXy5jYXN0QXJyYXkoJ2FiYycpO1xuICAgICAqIC8vID0+IFsnYWJjJ11cbiAgICAgKlxuICAgICAqIF8uY2FzdEFycmF5KG51bGwpO1xuICAgICAqIC8vID0+IFtudWxsXVxuICAgICAqXG4gICAgICogXy5jYXN0QXJyYXkodW5kZWZpbmVkKTtcbiAgICAgKiAvLyA9PiBbdW5kZWZpbmVkXVxuICAgICAqXG4gICAgICogXy5jYXN0QXJyYXkoKTtcbiAgICAgKiAvLyA9PiBbXVxuICAgICAqXG4gICAgICogdmFyIGFycmF5ID0gWzEsIDIsIDNdO1xuICAgICAqIGNvbnNvbGUubG9nKF8uY2FzdEFycmF5KGFycmF5KSA9PT0gYXJyYXkpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjYXN0QXJyYXkoKSB7XG4gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgdmFyIHZhbHVlID0gYXJndW1lbnRzWzBdO1xuICAgICAgcmV0dXJuIGlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBzaGFsbG93IGNsb25lIG9mIGB2YWx1ZWAuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgbG9vc2VseSBiYXNlZCBvbiB0aGVcbiAgICAgKiBbc3RydWN0dXJlZCBjbG9uZSBhbGdvcml0aG1dKGh0dHBzOi8vbWRuLmlvL1N0cnVjdHVyZWRfY2xvbmVfYWxnb3JpdGhtKVxuICAgICAqIGFuZCBzdXBwb3J0cyBjbG9uaW5nIGFycmF5cywgYXJyYXkgYnVmZmVycywgYm9vbGVhbnMsIGRhdGUgb2JqZWN0cywgbWFwcyxcbiAgICAgKiBudW1iZXJzLCBgT2JqZWN0YCBvYmplY3RzLCByZWdleGVzLCBzZXRzLCBzdHJpbmdzLCBzeW1ib2xzLCBhbmQgdHlwZWRcbiAgICAgKiBhcnJheXMuIFRoZSBvd24gZW51bWVyYWJsZSBwcm9wZXJ0aWVzIG9mIGBhcmd1bWVudHNgIG9iamVjdHMgYXJlIGNsb25lZFxuICAgICAqIGFzIHBsYWluIG9iamVjdHMuIEFuIGVtcHR5IG9iamVjdCBpcyByZXR1cm5lZCBmb3IgdW5jbG9uZWFibGUgdmFsdWVzIHN1Y2hcbiAgICAgKiBhcyBlcnJvciBvYmplY3RzLCBmdW5jdGlvbnMsIERPTSBub2RlcywgYW5kIFdlYWtNYXBzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjbG9uZS5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgY2xvbmVkIHZhbHVlLlxuICAgICAqIEBzZWUgXy5jbG9uZURlZXBcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdHMgPSBbeyAnYSc6IDEgfSwgeyAnYic6IDIgfV07XG4gICAgICpcbiAgICAgKiB2YXIgc2hhbGxvdyA9IF8uY2xvbmUob2JqZWN0cyk7XG4gICAgICogY29uc29sZS5sb2coc2hhbGxvd1swXSA9PT0gb2JqZWN0c1swXSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNsb25lKHZhbHVlKSB7XG4gICAgICByZXR1cm4gYmFzZUNsb25lKHZhbHVlLCBDTE9ORV9TWU1CT0xTX0ZMQUcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uY2xvbmVgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGN1c3RvbWl6ZXJgIHdoaWNoXG4gICAgICogaXMgaW52b2tlZCB0byBwcm9kdWNlIHRoZSBjbG9uZWQgdmFsdWUuIElmIGBjdXN0b21pemVyYCByZXR1cm5zIGB1bmRlZmluZWRgLFxuICAgICAqIGNsb25pbmcgaXMgaGFuZGxlZCBieSB0aGUgbWV0aG9kIGluc3RlYWQuIFRoZSBgY3VzdG9taXplcmAgaXMgaW52b2tlZCB3aXRoXG4gICAgICogdXAgdG8gZm91ciBhcmd1bWVudHM7ICh2YWx1ZSBbLCBpbmRleHxrZXksIG9iamVjdCwgc3RhY2tdKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2xvbmUuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY2xvbmluZy5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgY2xvbmVkIHZhbHVlLlxuICAgICAqIEBzZWUgXy5jbG9uZURlZXBXaXRoXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIGN1c3RvbWl6ZXIodmFsdWUpIHtcbiAgICAgKiAgIGlmIChfLmlzRWxlbWVudCh2YWx1ZSkpIHtcbiAgICAgKiAgICAgcmV0dXJuIHZhbHVlLmNsb25lTm9kZShmYWxzZSk7XG4gICAgICogICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICogdmFyIGVsID0gXy5jbG9uZVdpdGgoZG9jdW1lbnQuYm9keSwgY3VzdG9taXplcik7XG4gICAgICpcbiAgICAgKiBjb25zb2xlLmxvZyhlbCA9PT0gZG9jdW1lbnQuYm9keSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKiBjb25zb2xlLmxvZyhlbC5ub2RlTmFtZSk7XG4gICAgICogLy8gPT4gJ0JPRFknXG4gICAgICogY29uc29sZS5sb2coZWwuY2hpbGROb2Rlcy5sZW5ndGgpO1xuICAgICAqIC8vID0+IDBcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjbG9uZVdpdGgodmFsdWUsIGN1c3RvbWl6ZXIpIHtcbiAgICAgIGN1c3RvbWl6ZXIgPSB0eXBlb2YgY3VzdG9taXplciA9PSAnZnVuY3Rpb24nID8gY3VzdG9taXplciA6IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiBiYXNlQ2xvbmUodmFsdWUsIENMT05FX1NZTUJPTFNfRkxBRywgY3VzdG9taXplcik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5jbG9uZWAgZXhjZXB0IHRoYXQgaXQgcmVjdXJzaXZlbHkgY2xvbmVzIGB2YWx1ZWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMS4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHJlY3Vyc2l2ZWx5IGNsb25lLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBkZWVwIGNsb25lZCB2YWx1ZS5cbiAgICAgKiBAc2VlIF8uY2xvbmVcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdHMgPSBbeyAnYSc6IDEgfSwgeyAnYic6IDIgfV07XG4gICAgICpcbiAgICAgKiB2YXIgZGVlcCA9IF8uY2xvbmVEZWVwKG9iamVjdHMpO1xuICAgICAqIGNvbnNvbGUubG9nKGRlZXBbMF0gPT09IG9iamVjdHNbMF0pO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gY2xvbmVEZWVwKHZhbHVlKSB7XG4gICAgICByZXR1cm4gYmFzZUNsb25lKHZhbHVlLCBDTE9ORV9ERUVQX0ZMQUcgfCBDTE9ORV9TWU1CT0xTX0ZMQUcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uY2xvbmVXaXRoYCBleGNlcHQgdGhhdCBpdCByZWN1cnNpdmVseSBjbG9uZXMgYHZhbHVlYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcmVjdXJzaXZlbHkgY2xvbmUuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY2xvbmluZy5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZGVlcCBjbG9uZWQgdmFsdWUuXG4gICAgICogQHNlZSBfLmNsb25lV2l0aFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBjdXN0b21pemVyKHZhbHVlKSB7XG4gICAgICogICBpZiAoXy5pc0VsZW1lbnQodmFsdWUpKSB7XG4gICAgICogICAgIHJldHVybiB2YWx1ZS5jbG9uZU5vZGUodHJ1ZSk7XG4gICAgICogICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICogdmFyIGVsID0gXy5jbG9uZURlZXBXaXRoKGRvY3VtZW50LmJvZHksIGN1c3RvbWl6ZXIpO1xuICAgICAqXG4gICAgICogY29uc29sZS5sb2coZWwgPT09IGRvY3VtZW50LmJvZHkpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICogY29uc29sZS5sb2coZWwubm9kZU5hbWUpO1xuICAgICAqIC8vID0+ICdCT0RZJ1xuICAgICAqIGNvbnNvbGUubG9nKGVsLmNoaWxkTm9kZXMubGVuZ3RoKTtcbiAgICAgKiAvLyA9PiAyMFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNsb25lRGVlcFdpdGgodmFsdWUsIGN1c3RvbWl6ZXIpIHtcbiAgICAgIGN1c3RvbWl6ZXIgPSB0eXBlb2YgY3VzdG9taXplciA9PSAnZnVuY3Rpb24nID8gY3VzdG9taXplciA6IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiBiYXNlQ2xvbmUodmFsdWUsIENMT05FX0RFRVBfRkxBRyB8IENMT05FX1NZTUJPTFNfRkxBRywgY3VzdG9taXplcik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGBvYmplY3RgIGNvbmZvcm1zIHRvIGBzb3VyY2VgIGJ5IGludm9raW5nIHRoZSBwcmVkaWNhdGVcbiAgICAgKiBwcm9wZXJ0aWVzIG9mIGBzb3VyY2VgIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgcHJvcGVydHkgdmFsdWVzIG9mIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGVxdWl2YWxlbnQgdG8gYF8uY29uZm9ybXNgIHdoZW4gYHNvdXJjZWAgaXNcbiAgICAgKiBwYXJ0aWFsbHkgYXBwbGllZC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjE0LjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCBvZiBwcm9wZXJ0eSBwcmVkaWNhdGVzIHRvIGNvbmZvcm0gdG8uXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBvYmplY3RgIGNvbmZvcm1zLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICdhJzogMSwgJ2InOiAyIH07XG4gICAgICpcbiAgICAgKiBfLmNvbmZvcm1zVG8ob2JqZWN0LCB7ICdiJzogZnVuY3Rpb24obikgeyByZXR1cm4gbiA+IDE7IH0gfSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5jb25mb3Jtc1RvKG9iamVjdCwgeyAnYic6IGZ1bmN0aW9uKG4pIHsgcmV0dXJuIG4gPiAyOyB9IH0pO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gY29uZm9ybXNUbyhvYmplY3QsIHNvdXJjZSkge1xuICAgICAgcmV0dXJuIHNvdXJjZSA9PSBudWxsIHx8IGJhc2VDb25mb3Jtc1RvKG9iamVjdCwgc291cmNlLCBrZXlzKHNvdXJjZSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBlcmZvcm1zIGFcbiAgICAgKiBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICAgICAqIGNvbXBhcmlzb24gYmV0d2VlbiB0d28gdmFsdWVzIHRvIGRldGVybWluZSBpZiB0aGV5IGFyZSBlcXVpdmFsZW50LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gICAgICogdmFyIG90aGVyID0geyAnYSc6IDEgfTtcbiAgICAgKlxuICAgICAqIF8uZXEob2JqZWN0LCBvYmplY3QpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uZXEob2JqZWN0LCBvdGhlcik7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIF8uZXEoJ2EnLCAnYScpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uZXEoJ2EnLCBPYmplY3QoJ2EnKSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIF8uZXEoTmFOLCBOYU4pO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBlcSh2YWx1ZSwgb3RoZXIpIHtcbiAgICAgIHJldHVybiB2YWx1ZSA9PT0gb3RoZXIgfHwgKHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGdyZWF0ZXIgdGhhbiBgb3RoZXJgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuOS4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgZ3JlYXRlciB0aGFuIGBvdGhlcmAsXG4gICAgICogIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAc2VlIF8ubHRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5ndCgzLCAxKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmd0KDMsIDMpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLmd0KDEsIDMpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgdmFyIGd0ID0gY3JlYXRlUmVsYXRpb25hbE9wZXJhdGlvbihiYXNlR3QpO1xuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGBvdGhlcmAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy45LjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gICAgICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG9cbiAgICAgKiAgYG90aGVyYCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBzZWUgXy5sdGVcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5ndGUoMywgMSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5ndGUoMywgMyk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5ndGUoMSwgMyk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICB2YXIgZ3RlID0gY3JlYXRlUmVsYXRpb25hbE9wZXJhdGlvbihmdW5jdGlvbih2YWx1ZSwgb3RoZXIpIHtcbiAgICAgIHJldHVybiB2YWx1ZSA+PSBvdGhlcjtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxpa2VseSBhbiBgYXJndW1lbnRzYCBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGBhcmd1bWVudHNgIG9iamVjdCxcbiAgICAgKiAgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNBcmd1bWVudHMoWzEsIDIsIDNdKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIHZhciBpc0FyZ3VtZW50cyA9IGJhc2VJc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA/IGJhc2VJc0FyZ3VtZW50cyA6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCAnY2FsbGVlJykgJiZcbiAgICAgICAgIXByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwodmFsdWUsICdjYWxsZWUnKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhbiBgQXJyYXlgIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc0FycmF5KFsxLCAyLCAzXSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc0FycmF5KGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLmlzQXJyYXkoJ2FiYycpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLmlzQXJyYXkoXy5ub29wKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIHZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYW4gYEFycmF5QnVmZmVyYCBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4zLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5IGJ1ZmZlciwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzQXJyYXlCdWZmZXIobmV3IEFycmF5QnVmZmVyKDIpKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzQXJyYXlCdWZmZXIobmV3IEFycmF5KDIpKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIHZhciBpc0FycmF5QnVmZmVyID0gbm9kZUlzQXJyYXlCdWZmZXIgPyBiYXNlVW5hcnkobm9kZUlzQXJyYXlCdWZmZXIpIDogYmFzZUlzQXJyYXlCdWZmZXI7XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLiBBIHZhbHVlIGlzIGNvbnNpZGVyZWQgYXJyYXktbGlrZSBpZiBpdCdzXG4gICAgICogbm90IGEgZnVuY3Rpb24gYW5kIGhhcyBhIGB2YWx1ZS5sZW5ndGhgIHRoYXQncyBhbiBpbnRlZ2VyIGdyZWF0ZXIgdGhhbiBvclxuICAgICAqIGVxdWFsIHRvIGAwYCBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUmAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFycmF5LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc0FycmF5TGlrZShbMSwgMiwgM10pO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNBcnJheUxpa2UoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc0FycmF5TGlrZSgnYWJjJyk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc0FycmF5TGlrZShfLm5vb3ApO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNBcnJheUxpa2UodmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIGlzTGVuZ3RoKHZhbHVlLmxlbmd0aCkgJiYgIWlzRnVuY3Rpb24odmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uaXNBcnJheUxpa2VgIGV4Y2VwdCB0aGF0IGl0IGFsc28gY2hlY2tzIGlmIGB2YWx1ZWBcbiAgICAgKiBpcyBhbiBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5LWxpa2Ugb2JqZWN0LFxuICAgICAqICBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNBcnJheUxpa2VPYmplY3QoWzEsIDIsIDNdKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzQXJyYXlMaWtlT2JqZWN0KGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNBcnJheUxpa2VPYmplY3QoJ2FiYycpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLmlzQXJyYXlMaWtlT2JqZWN0KF8ubm9vcCk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc0FycmF5TGlrZU9iamVjdCh2YWx1ZSkge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgaXNBcnJheUxpa2UodmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBib29sZWFuIHByaW1pdGl2ZSBvciBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgYm9vbGVhbiwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzQm9vbGVhbihmYWxzZSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc0Jvb2xlYW4obnVsbCk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc0Jvb2xlYW4odmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZSA9PT0gdHJ1ZSB8fCB2YWx1ZSA9PT0gZmFsc2UgfHxcbiAgICAgICAgKGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gYm9vbFRhZyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBidWZmZXIuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4zLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNCdWZmZXIobmV3IEJ1ZmZlcigyKSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc0J1ZmZlcihuZXcgVWludDhBcnJheSgyKSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICB2YXIgaXNCdWZmZXIgPSBuYXRpdmVJc0J1ZmZlciB8fCBzdHViRmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYERhdGVgIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBkYXRlIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzRGF0ZShuZXcgRGF0ZSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc0RhdGUoJ01vbiBBcHJpbCAyMyAyMDEyJyk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICB2YXIgaXNEYXRlID0gbm9kZUlzRGF0ZSA/IGJhc2VVbmFyeShub2RlSXNEYXRlKSA6IGJhc2VJc0RhdGU7XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBsaWtlbHkgYSBET00gZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBET00gZWxlbWVudCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzRWxlbWVudChkb2N1bWVudC5ib2R5KTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzRWxlbWVudCgnPGJvZHk+Jyk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc0VsZW1lbnQodmFsdWUpIHtcbiAgICAgIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIHZhbHVlLm5vZGVUeXBlID09PSAxICYmICFpc1BsYWluT2JqZWN0KHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhbiBlbXB0eSBvYmplY3QsIGNvbGxlY3Rpb24sIG1hcCwgb3Igc2V0LlxuICAgICAqXG4gICAgICogT2JqZWN0cyBhcmUgY29uc2lkZXJlZCBlbXB0eSBpZiB0aGV5IGhhdmUgbm8gb3duIGVudW1lcmFibGUgc3RyaW5nIGtleWVkXG4gICAgICogcHJvcGVydGllcy5cbiAgICAgKlxuICAgICAqIEFycmF5LWxpa2UgdmFsdWVzIHN1Y2ggYXMgYGFyZ3VtZW50c2Agb2JqZWN0cywgYXJyYXlzLCBidWZmZXJzLCBzdHJpbmdzLCBvclxuICAgICAqIGpRdWVyeS1saWtlIGNvbGxlY3Rpb25zIGFyZSBjb25zaWRlcmVkIGVtcHR5IGlmIHRoZXkgaGF2ZSBhIGBsZW5ndGhgIG9mIGAwYC5cbiAgICAgKiBTaW1pbGFybHksIG1hcHMgYW5kIHNldHMgYXJlIGNvbnNpZGVyZWQgZW1wdHkgaWYgdGhleSBoYXZlIGEgYHNpemVgIG9mIGAwYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgZW1wdHksIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc0VtcHR5KG51bGwpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNFbXB0eSh0cnVlKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzRW1wdHkoMSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc0VtcHR5KFsxLCAyLCAzXSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIF8uaXNFbXB0eSh7ICdhJzogMSB9KTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzRW1wdHkodmFsdWUpIHtcbiAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKGlzQXJyYXlMaWtlKHZhbHVlKSAmJlxuICAgICAgICAgIChpc0FycmF5KHZhbHVlKSB8fCB0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgfHwgdHlwZW9mIHZhbHVlLnNwbGljZSA9PSAnZnVuY3Rpb24nIHx8XG4gICAgICAgICAgICBpc0J1ZmZlcih2YWx1ZSkgfHwgaXNUeXBlZEFycmF5KHZhbHVlKSB8fCBpc0FyZ3VtZW50cyh2YWx1ZSkpKSB7XG4gICAgICAgIHJldHVybiAhdmFsdWUubGVuZ3RoO1xuICAgICAgfVxuICAgICAgdmFyIHRhZyA9IGdldFRhZyh2YWx1ZSk7XG4gICAgICBpZiAodGFnID09IG1hcFRhZyB8fCB0YWcgPT0gc2V0VGFnKSB7XG4gICAgICAgIHJldHVybiAhdmFsdWUuc2l6ZTtcbiAgICAgIH1cbiAgICAgIGlmIChpc1Byb3RvdHlwZSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuICFiYXNlS2V5cyh2YWx1ZSkubGVuZ3RoO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBrZXkpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQZXJmb3JtcyBhIGRlZXAgY29tcGFyaXNvbiBiZXR3ZWVuIHR3byB2YWx1ZXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgYXJlXG4gICAgICogZXF1aXZhbGVudC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBzdXBwb3J0cyBjb21wYXJpbmcgYXJyYXlzLCBhcnJheSBidWZmZXJzLCBib29sZWFucyxcbiAgICAgKiBkYXRlIG9iamVjdHMsIGVycm9yIG9iamVjdHMsIG1hcHMsIG51bWJlcnMsIGBPYmplY3RgIG9iamVjdHMsIHJlZ2V4ZXMsXG4gICAgICogc2V0cywgc3RyaW5ncywgc3ltYm9scywgYW5kIHR5cGVkIGFycmF5cy4gYE9iamVjdGAgb2JqZWN0cyBhcmUgY29tcGFyZWRcbiAgICAgKiBieSB0aGVpciBvd24sIG5vdCBpbmhlcml0ZWQsIGVudW1lcmFibGUgcHJvcGVydGllcy4gRnVuY3Rpb25zIGFuZCBET01cbiAgICAgKiBub2RlcyBhcmUgY29tcGFyZWQgYnkgc3RyaWN0IGVxdWFsaXR5LCBpLmUuIGA9PT1gLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gICAgICogdmFyIG90aGVyID0geyAnYSc6IDEgfTtcbiAgICAgKlxuICAgICAqIF8uaXNFcXVhbChvYmplY3QsIG90aGVyKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBvYmplY3QgPT09IG90aGVyO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNFcXVhbCh2YWx1ZSwgb3RoZXIpIHtcbiAgICAgIHJldHVybiBiYXNlSXNFcXVhbCh2YWx1ZSwgb3RoZXIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uaXNFcXVhbGAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgY3VzdG9taXplcmAgd2hpY2hcbiAgICAgKiBpcyBpbnZva2VkIHRvIGNvbXBhcmUgdmFsdWVzLiBJZiBgY3VzdG9taXplcmAgcmV0dXJucyBgdW5kZWZpbmVkYCwgY29tcGFyaXNvbnNcbiAgICAgKiBhcmUgaGFuZGxlZCBieSB0aGUgbWV0aG9kIGluc3RlYWQuIFRoZSBgY3VzdG9taXplcmAgaXMgaW52b2tlZCB3aXRoIHVwIHRvXG4gICAgICogc2l4IGFyZ3VtZW50czogKG9ialZhbHVlLCBvdGhWYWx1ZSBbLCBpbmRleHxrZXksIG9iamVjdCwgb3RoZXIsIHN0YWNrXSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gICAgICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBpc0dyZWV0aW5nKHZhbHVlKSB7XG4gICAgICogICByZXR1cm4gL15oKD86aXxlbGxvKSQvLnRlc3QodmFsdWUpO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIGN1c3RvbWl6ZXIob2JqVmFsdWUsIG90aFZhbHVlKSB7XG4gICAgICogICBpZiAoaXNHcmVldGluZyhvYmpWYWx1ZSkgJiYgaXNHcmVldGluZyhvdGhWYWx1ZSkpIHtcbiAgICAgKiAgICAgcmV0dXJuIHRydWU7XG4gICAgICogICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICogdmFyIGFycmF5ID0gWydoZWxsbycsICdnb29kYnllJ107XG4gICAgICogdmFyIG90aGVyID0gWydoaScsICdnb29kYnllJ107XG4gICAgICpcbiAgICAgKiBfLmlzRXF1YWxXaXRoKGFycmF5LCBvdGhlciwgY3VzdG9taXplcik7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzRXF1YWxXaXRoKHZhbHVlLCBvdGhlciwgY3VzdG9taXplcikge1xuICAgICAgY3VzdG9taXplciA9IHR5cGVvZiBjdXN0b21pemVyID09ICdmdW5jdGlvbicgPyBjdXN0b21pemVyIDogdW5kZWZpbmVkO1xuICAgICAgdmFyIHJlc3VsdCA9IGN1c3RvbWl6ZXIgPyBjdXN0b21pemVyKHZhbHVlLCBvdGhlcikgOiB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4gcmVzdWx0ID09PSB1bmRlZmluZWQgPyBiYXNlSXNFcXVhbCh2YWx1ZSwgb3RoZXIsIHVuZGVmaW5lZCwgY3VzdG9taXplcikgOiAhIXJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhbiBgRXJyb3JgLCBgRXZhbEVycm9yYCwgYFJhbmdlRXJyb3JgLCBgUmVmZXJlbmNlRXJyb3JgLFxuICAgICAqIGBTeW50YXhFcnJvcmAsIGBUeXBlRXJyb3JgLCBvciBgVVJJRXJyb3JgIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gZXJyb3Igb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNFcnJvcihuZXcgRXJyb3IpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNFcnJvcihFcnJvcik7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc0Vycm9yKHZhbHVlKSB7XG4gICAgICBpZiAoIWlzT2JqZWN0TGlrZSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgdmFyIHRhZyA9IGJhc2VHZXRUYWcodmFsdWUpO1xuICAgICAgcmV0dXJuIHRhZyA9PSBlcnJvclRhZyB8fCB0YWcgPT0gZG9tRXhjVGFnIHx8XG4gICAgICAgICh0eXBlb2YgdmFsdWUubWVzc2FnZSA9PSAnc3RyaW5nJyAmJiB0eXBlb2YgdmFsdWUubmFtZSA9PSAnc3RyaW5nJyAmJiAhaXNQbGFpbk9iamVjdCh2YWx1ZSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgZmluaXRlIHByaW1pdGl2ZSBudW1iZXIuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgYmFzZWQgb25cbiAgICAgKiBbYE51bWJlci5pc0Zpbml0ZWBdKGh0dHBzOi8vbWRuLmlvL051bWJlci9pc0Zpbml0ZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgZmluaXRlIG51bWJlciwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzRmluaXRlKDMpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNGaW5pdGUoTnVtYmVyLk1JTl9WQUxVRSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc0Zpbml0ZShJbmZpbml0eSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIF8uaXNGaW5pdGUoJzMnKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzRmluaXRlKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdudW1iZXInICYmIG5hdGl2ZUlzRmluaXRlKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYEZ1bmN0aW9uYCBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgZnVuY3Rpb24sIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc0Z1bmN0aW9uKF8pO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNGdW5jdGlvbigvYWJjLyk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7XG4gICAgICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICAvLyBUaGUgdXNlIG9mIGBPYmplY3QjdG9TdHJpbmdgIGF2b2lkcyBpc3N1ZXMgd2l0aCB0aGUgYHR5cGVvZmAgb3BlcmF0b3JcbiAgICAgIC8vIGluIFNhZmFyaSA5IHdoaWNoIHJldHVybnMgJ29iamVjdCcgZm9yIHR5cGVkIGFycmF5cyBhbmQgb3RoZXIgY29uc3RydWN0b3JzLlxuICAgICAgdmFyIHRhZyA9IGJhc2VHZXRUYWcodmFsdWUpO1xuICAgICAgcmV0dXJuIHRhZyA9PSBmdW5jVGFnIHx8IHRhZyA9PSBnZW5UYWcgfHwgdGFnID09IGFzeW5jVGFnIHx8IHRhZyA9PSBwcm94eVRhZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhbiBpbnRlZ2VyLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGJhc2VkIG9uXG4gICAgICogW2BOdW1iZXIuaXNJbnRlZ2VyYF0oaHR0cHM6Ly9tZG4uaW8vTnVtYmVyL2lzSW50ZWdlcikuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGludGVnZXIsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc0ludGVnZXIoMyk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc0ludGVnZXIoTnVtYmVyLk1JTl9WQUxVRSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIF8uaXNJbnRlZ2VyKEluZmluaXR5KTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogXy5pc0ludGVnZXIoJzMnKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzSW50ZWdlcih2YWx1ZSkge1xuICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJyAmJiB2YWx1ZSA9PSB0b0ludGVnZXIodmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgYXJyYXktbGlrZSBsZW5ndGguXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgbG9vc2VseSBiYXNlZCBvblxuICAgICAqIFtgVG9MZW5ndGhgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy10b2xlbmd0aCkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgbGVuZ3RoLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNMZW5ndGgoMyk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc0xlbmd0aChOdW1iZXIuTUlOX1ZBTFVFKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogXy5pc0xlbmd0aChJbmZpbml0eSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIF8uaXNMZW5ndGgoJzMnKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzTGVuZ3RoKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdudW1iZXInICYmXG4gICAgICAgIHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPD0gTUFYX1NBRkVfSU5URUdFUjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyB0aGVcbiAgICAgKiBbbGFuZ3VhZ2UgdHlwZV0oaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLWVjbWFzY3JpcHQtbGFuZ3VhZ2UtdHlwZXMpXG4gICAgICogb2YgYE9iamVjdGAuIChlLmcuIGFycmF5cywgZnVuY3Rpb25zLCBvYmplY3RzLCByZWdleGVzLCBgbmV3IE51bWJlcigwKWAsIGFuZCBgbmV3IFN0cmluZygnJylgKVxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc09iamVjdCh7fSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc09iamVjdChbMSwgMiwgM10pO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNPYmplY3QoXy5ub29wKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzT2JqZWN0KG51bGwpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgICAgIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICAgICAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgKHR5cGUgPT0gJ29iamVjdCcgfHwgdHlwZSA9PSAnZnVuY3Rpb24nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZS4gQSB2YWx1ZSBpcyBvYmplY3QtbGlrZSBpZiBpdCdzIG5vdCBgbnVsbGBcbiAgICAgKiBhbmQgaGFzIGEgYHR5cGVvZmAgcmVzdWx0IG9mIFwib2JqZWN0XCIuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNPYmplY3RMaWtlKHt9KTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzT2JqZWN0TGlrZShbMSwgMiwgM10pO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNPYmplY3RMaWtlKF8ubm9vcCk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIF8uaXNPYmplY3RMaWtlKG51bGwpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNPYmplY3RMaWtlKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT0gJ29iamVjdCc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBNYXBgIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjMuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBtYXAsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc01hcChuZXcgTWFwKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzTWFwKG5ldyBXZWFrTWFwKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIHZhciBpc01hcCA9IG5vZGVJc01hcCA/IGJhc2VVbmFyeShub2RlSXNNYXApIDogYmFzZUlzTWFwO1xuXG4gICAgLyoqXG4gICAgICogUGVyZm9ybXMgYSBwYXJ0aWFsIGRlZXAgY29tcGFyaXNvbiBiZXR3ZWVuIGBvYmplY3RgIGFuZCBgc291cmNlYCB0b1xuICAgICAqIGRldGVybWluZSBpZiBgb2JqZWN0YCBjb250YWlucyBlcXVpdmFsZW50IHByb3BlcnR5IHZhbHVlcy5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBlcXVpdmFsZW50IHRvIGBfLm1hdGNoZXNgIHdoZW4gYHNvdXJjZWAgaXNcbiAgICAgKiBwYXJ0aWFsbHkgYXBwbGllZC5cbiAgICAgKlxuICAgICAqIFBhcnRpYWwgY29tcGFyaXNvbnMgd2lsbCBtYXRjaCBlbXB0eSBhcnJheSBhbmQgZW1wdHkgb2JqZWN0IGBzb3VyY2VgXG4gICAgICogdmFsdWVzIGFnYWluc3QgYW55IGFycmF5IG9yIG9iamVjdCB2YWx1ZSwgcmVzcGVjdGl2ZWx5LiBTZWUgYF8uaXNFcXVhbGBcbiAgICAgKiBmb3IgYSBsaXN0IG9mIHN1cHBvcnRlZCB2YWx1ZSBjb21wYXJpc29ucy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IG9mIHByb3BlcnR5IHZhbHVlcyB0byBtYXRjaC5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYG9iamVjdGAgaXMgYSBtYXRjaCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEsICdiJzogMiB9O1xuICAgICAqXG4gICAgICogXy5pc01hdGNoKG9iamVjdCwgeyAnYic6IDIgfSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc01hdGNoKG9iamVjdCwgeyAnYic6IDEgfSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc01hdGNoKG9iamVjdCwgc291cmNlKSB7XG4gICAgICByZXR1cm4gb2JqZWN0ID09PSBzb3VyY2UgfHwgYmFzZUlzTWF0Y2gob2JqZWN0LCBzb3VyY2UsIGdldE1hdGNoRGF0YShzb3VyY2UpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmlzTWF0Y2hgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGN1c3RvbWl6ZXJgIHdoaWNoXG4gICAgICogaXMgaW52b2tlZCB0byBjb21wYXJlIHZhbHVlcy4gSWYgYGN1c3RvbWl6ZXJgIHJldHVybnMgYHVuZGVmaW5lZGAsIGNvbXBhcmlzb25zXG4gICAgICogYXJlIGhhbmRsZWQgYnkgdGhlIG1ldGhvZCBpbnN0ZWFkLiBUaGUgYGN1c3RvbWl6ZXJgIGlzIGludm9rZWQgd2l0aCBmaXZlXG4gICAgICogYXJndW1lbnRzOiAob2JqVmFsdWUsIHNyY1ZhbHVlLCBpbmRleHxrZXksIG9iamVjdCwgc291cmNlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IG9mIHByb3BlcnR5IHZhbHVlcyB0byBtYXRjaC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYG9iamVjdGAgaXMgYSBtYXRjaCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBpc0dyZWV0aW5nKHZhbHVlKSB7XG4gICAgICogICByZXR1cm4gL15oKD86aXxlbGxvKSQvLnRlc3QodmFsdWUpO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIGN1c3RvbWl6ZXIob2JqVmFsdWUsIHNyY1ZhbHVlKSB7XG4gICAgICogICBpZiAoaXNHcmVldGluZyhvYmpWYWx1ZSkgJiYgaXNHcmVldGluZyhzcmNWYWx1ZSkpIHtcbiAgICAgKiAgICAgcmV0dXJuIHRydWU7XG4gICAgICogICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHsgJ2dyZWV0aW5nJzogJ2hlbGxvJyB9O1xuICAgICAqIHZhciBzb3VyY2UgPSB7ICdncmVldGluZyc6ICdoaScgfTtcbiAgICAgKlxuICAgICAqIF8uaXNNYXRjaFdpdGgob2JqZWN0LCBzb3VyY2UsIGN1c3RvbWl6ZXIpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc01hdGNoV2l0aChvYmplY3QsIHNvdXJjZSwgY3VzdG9taXplcikge1xuICAgICAgY3VzdG9taXplciA9IHR5cGVvZiBjdXN0b21pemVyID09ICdmdW5jdGlvbicgPyBjdXN0b21pemVyIDogdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIGJhc2VJc01hdGNoKG9iamVjdCwgc291cmNlLCBnZXRNYXRjaERhdGEoc291cmNlKSwgY3VzdG9taXplcik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYE5hTmAuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgYmFzZWQgb25cbiAgICAgKiBbYE51bWJlci5pc05hTmBdKGh0dHBzOi8vbWRuLmlvL051bWJlci9pc05hTikgYW5kIGlzIG5vdCB0aGUgc2FtZSBhc1xuICAgICAqIGdsb2JhbCBbYGlzTmFOYF0oaHR0cHM6Ly9tZG4uaW8vaXNOYU4pIHdoaWNoIHJldHVybnMgYHRydWVgIGZvclxuICAgICAqIGB1bmRlZmluZWRgIGFuZCBvdGhlciBub24tbnVtYmVyIHZhbHVlcy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYE5hTmAsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc05hTihOYU4pO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNOYU4obmV3IE51bWJlcihOYU4pKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBpc05hTih1bmRlZmluZWQpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNOYU4odW5kZWZpbmVkKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzTmFOKHZhbHVlKSB7XG4gICAgICAvLyBBbiBgTmFOYCBwcmltaXRpdmUgaXMgdGhlIG9ubHkgdmFsdWUgdGhhdCBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLlxuICAgICAgLy8gUGVyZm9ybSB0aGUgYHRvU3RyaW5nVGFnYCBjaGVjayBmaXJzdCB0byBhdm9pZCBlcnJvcnMgd2l0aCBzb21lXG4gICAgICAvLyBBY3RpdmVYIG9iamVjdHMgaW4gSUUuXG4gICAgICByZXR1cm4gaXNOdW1iZXIodmFsdWUpICYmIHZhbHVlICE9ICt2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHByaXN0aW5lIG5hdGl2ZSBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBjYW4ndCByZWxpYWJseSBkZXRlY3QgbmF0aXZlIGZ1bmN0aW9ucyBpbiB0aGUgcHJlc2VuY2VcbiAgICAgKiBvZiB0aGUgY29yZS1qcyBwYWNrYWdlIGJlY2F1c2UgY29yZS1qcyBjaXJjdW12ZW50cyB0aGlzIGtpbmQgb2YgZGV0ZWN0aW9uLlxuICAgICAqIERlc3BpdGUgbXVsdGlwbGUgcmVxdWVzdHMsIHRoZSBjb3JlLWpzIG1haW50YWluZXIgaGFzIG1hZGUgaXQgY2xlYXI6IGFueVxuICAgICAqIGF0dGVtcHQgdG8gZml4IHRoZSBkZXRlY3Rpb24gd2lsbCBiZSBvYnN0cnVjdGVkLiBBcyBhIHJlc3VsdCwgd2UncmUgbGVmdFxuICAgICAqIHdpdGggbGl0dGxlIGNob2ljZSBidXQgdG8gdGhyb3cgYW4gZXJyb3IuIFVuZm9ydHVuYXRlbHksIHRoaXMgYWxzbyBhZmZlY3RzXG4gICAgICogcGFja2FnZXMsIGxpa2UgW2JhYmVsLXBvbHlmaWxsXShodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9iYWJlbC1wb2x5ZmlsbCksXG4gICAgICogd2hpY2ggcmVseSBvbiBjb3JlLWpzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIG5hdGl2ZSBmdW5jdGlvbixcbiAgICAgKiAgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzTmF0aXZlKEFycmF5LnByb3RvdHlwZS5wdXNoKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzTmF0aXZlKF8pO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNOYXRpdmUodmFsdWUpIHtcbiAgICAgIGlmIChpc01hc2thYmxlKHZhbHVlKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoQ09SRV9FUlJPUl9URVhUKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBiYXNlSXNOYXRpdmUodmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGBudWxsYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYG51bGxgLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNOdWxsKG51bGwpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNOdWxsKHZvaWQgMCk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc051bGwodmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBgbnVsbGAgb3IgYHVuZGVmaW5lZGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIG51bGxpc2gsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc05pbChudWxsKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzTmlsKHZvaWQgMCk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc05pbChOYU4pO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNOaWwodmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZSA9PSBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgTnVtYmVyYCBwcmltaXRpdmUgb3Igb2JqZWN0LlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRvIGV4Y2x1ZGUgYEluZmluaXR5YCwgYC1JbmZpbml0eWAsIGFuZCBgTmFOYCwgd2hpY2ggYXJlXG4gICAgICogY2xhc3NpZmllZCBhcyBudW1iZXJzLCB1c2UgdGhlIGBfLmlzRmluaXRlYCBtZXRob2QuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgbnVtYmVyLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNOdW1iZXIoMyk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc051bWJlcihOdW1iZXIuTUlOX1ZBTFVFKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzTnVtYmVyKEluZmluaXR5KTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzTnVtYmVyKCczJyk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc051bWJlcih2YWx1ZSkge1xuICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJyB8fFxuICAgICAgICAoaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBudW1iZXJUYWcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgcGxhaW4gb2JqZWN0LCB0aGF0IGlzLCBhbiBvYmplY3QgY3JlYXRlZCBieSB0aGVcbiAgICAgKiBgT2JqZWN0YCBjb25zdHJ1Y3RvciBvciBvbmUgd2l0aCBhIGBbW1Byb3RvdHlwZV1dYCBvZiBgbnVsbGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC44LjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcGxhaW4gb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIEZvbygpIHtcbiAgICAgKiAgIHRoaXMuYSA9IDE7XG4gICAgICogfVxuICAgICAqXG4gICAgICogXy5pc1BsYWluT2JqZWN0KG5ldyBGb28pO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLmlzUGxhaW5PYmplY3QoWzEsIDIsIDNdKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogXy5pc1BsYWluT2JqZWN0KHsgJ3gnOiAwLCAneSc6IDAgfSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc1BsYWluT2JqZWN0KE9iamVjdC5jcmVhdGUobnVsbCkpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlKSB7XG4gICAgICBpZiAoIWlzT2JqZWN0TGlrZSh2YWx1ZSkgfHwgYmFzZUdldFRhZyh2YWx1ZSkgIT0gb2JqZWN0VGFnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHZhciBwcm90byA9IGdldFByb3RvdHlwZSh2YWx1ZSk7XG4gICAgICBpZiAocHJvdG8gPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICB2YXIgQ3RvciA9IGhhc093blByb3BlcnR5LmNhbGwocHJvdG8sICdjb25zdHJ1Y3RvcicpICYmIHByb3RvLmNvbnN0cnVjdG9yO1xuICAgICAgcmV0dXJuIHR5cGVvZiBDdG9yID09ICdmdW5jdGlvbicgJiYgQ3RvciBpbnN0YW5jZW9mIEN0b3IgJiZcbiAgICAgICAgZnVuY1RvU3RyaW5nLmNhbGwoQ3RvcikgPT0gb2JqZWN0Q3RvclN0cmluZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFJlZ0V4cGAgb2JqZWN0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHJlZ2V4cCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzUmVnRXhwKC9hYmMvKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzUmVnRXhwKCcvYWJjLycpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgdmFyIGlzUmVnRXhwID0gbm9kZUlzUmVnRXhwID8gYmFzZVVuYXJ5KG5vZGVJc1JlZ0V4cCkgOiBiYXNlSXNSZWdFeHA7XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHNhZmUgaW50ZWdlci4gQW4gaW50ZWdlciBpcyBzYWZlIGlmIGl0J3MgYW4gSUVFRS03NTRcbiAgICAgKiBkb3VibGUgcHJlY2lzaW9uIG51bWJlciB3aGljaCBpc24ndCB0aGUgcmVzdWx0IG9mIGEgcm91bmRlZCB1bnNhZmUgaW50ZWdlci5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBiYXNlZCBvblxuICAgICAqIFtgTnVtYmVyLmlzU2FmZUludGVnZXJgXShodHRwczovL21kbi5pby9OdW1iZXIvaXNTYWZlSW50ZWdlcikuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc2FmZSBpbnRlZ2VyLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNTYWZlSW50ZWdlcigzKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzU2FmZUludGVnZXIoTnVtYmVyLk1JTl9WQUxVRSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIF8uaXNTYWZlSW50ZWdlcihJbmZpbml0eSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIF8uaXNTYWZlSW50ZWdlcignMycpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNTYWZlSW50ZWdlcih2YWx1ZSkge1xuICAgICAgcmV0dXJuIGlzSW50ZWdlcih2YWx1ZSkgJiYgdmFsdWUgPj0gLU1BWF9TQUZFX0lOVEVHRVIgJiYgdmFsdWUgPD0gTUFYX1NBRkVfSU5URUdFUjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFNldGAgb2JqZWN0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMy4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHNldCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzU2V0KG5ldyBTZXQpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNTZXQobmV3IFdlYWtTZXQpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgdmFyIGlzU2V0ID0gbm9kZUlzU2V0ID8gYmFzZVVuYXJ5KG5vZGVJc1NldCkgOiBiYXNlSXNTZXQ7XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFN0cmluZ2AgcHJpbWl0aXZlIG9yIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBzdHJpbmcsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc1N0cmluZygnYWJjJyk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc1N0cmluZygxKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzU3RyaW5nKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdzdHJpbmcnIHx8XG4gICAgICAgICghaXNBcnJheSh2YWx1ZSkgJiYgaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBzdHJpbmdUYWcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgU3ltYm9sYCBwcmltaXRpdmUgb3Igb2JqZWN0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHN5bWJvbCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzU3ltYm9sKFN5bWJvbC5pdGVyYXRvcik7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc1N5bWJvbCgnYWJjJyk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnc3ltYm9sJyB8fFxuICAgICAgICAoaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBzeW1ib2xUYWcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSB0eXBlZCBhcnJheS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB0eXBlZCBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzVHlwZWRBcnJheShuZXcgVWludDhBcnJheSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc1R5cGVkQXJyYXkoW10pO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgdmFyIGlzVHlwZWRBcnJheSA9IG5vZGVJc1R5cGVkQXJyYXkgPyBiYXNlVW5hcnkobm9kZUlzVHlwZWRBcnJheSkgOiBiYXNlSXNUeXBlZEFycmF5O1xuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYHVuZGVmaW5lZGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGB1bmRlZmluZWRgLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNVbmRlZmluZWQodm9pZCAwKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzVW5kZWZpbmVkKG51bGwpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNVbmRlZmluZWQodmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgV2Vha01hcGAgb2JqZWN0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMy4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHdlYWsgbWFwLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNXZWFrTWFwKG5ldyBXZWFrTWFwKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzV2Vha01hcChuZXcgTWFwKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzV2Vha01hcCh2YWx1ZSkge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgZ2V0VGFnKHZhbHVlKSA9PSB3ZWFrTWFwVGFnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgV2Vha1NldGAgb2JqZWN0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMy4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHdlYWsgc2V0LCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNXZWFrU2V0KG5ldyBXZWFrU2V0KTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzV2Vha1NldChuZXcgU2V0KTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzV2Vha1NldCh2YWx1ZSkge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gd2Vha1NldFRhZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBsZXNzIHRoYW4gYG90aGVyYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjkuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGxlc3MgdGhhbiBgb3RoZXJgLFxuICAgICAqICBlbHNlIGBmYWxzZWAuXG4gICAgICogQHNlZSBfLmd0XG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ubHQoMSwgMyk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5sdCgzLCAzKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogXy5sdCgzLCAxKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIHZhciBsdCA9IGNyZWF0ZVJlbGF0aW9uYWxPcGVyYXRpb24oYmFzZUx0KTtcblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgb3RoZXJgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuOS4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvXG4gICAgICogIGBvdGhlcmAsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAc2VlIF8uZ3RlXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ubHRlKDEsIDMpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8ubHRlKDMsIDMpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8ubHRlKDMsIDEpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgdmFyIGx0ZSA9IGNyZWF0ZVJlbGF0aW9uYWxPcGVyYXRpb24oZnVuY3Rpb24odmFsdWUsIG90aGVyKSB7XG4gICAgICByZXR1cm4gdmFsdWUgPD0gb3RoZXI7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGFuIGFycmF5LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY29udmVydGVkIGFycmF5LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnRvQXJyYXkoeyAnYSc6IDEsICdiJzogMiB9KTtcbiAgICAgKiAvLyA9PiBbMSwgMl1cbiAgICAgKlxuICAgICAqIF8udG9BcnJheSgnYWJjJyk7XG4gICAgICogLy8gPT4gWydhJywgJ2InLCAnYyddXG4gICAgICpcbiAgICAgKiBfLnRvQXJyYXkoMSk7XG4gICAgICogLy8gPT4gW11cbiAgICAgKlxuICAgICAqIF8udG9BcnJheShudWxsKTtcbiAgICAgKiAvLyA9PiBbXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRvQXJyYXkodmFsdWUpIHtcbiAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgaWYgKGlzQXJyYXlMaWtlKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gaXNTdHJpbmcodmFsdWUpID8gc3RyaW5nVG9BcnJheSh2YWx1ZSkgOiBjb3B5QXJyYXkodmFsdWUpO1xuICAgICAgfVxuICAgICAgaWYgKHN5bUl0ZXJhdG9yICYmIHZhbHVlW3N5bUl0ZXJhdG9yXSkge1xuICAgICAgICByZXR1cm4gaXRlcmF0b3JUb0FycmF5KHZhbHVlW3N5bUl0ZXJhdG9yXSgpKTtcbiAgICAgIH1cbiAgICAgIHZhciB0YWcgPSBnZXRUYWcodmFsdWUpLFxuICAgICAgICAgIGZ1bmMgPSB0YWcgPT0gbWFwVGFnID8gbWFwVG9BcnJheSA6ICh0YWcgPT0gc2V0VGFnID8gc2V0VG9BcnJheSA6IHZhbHVlcyk7XG5cbiAgICAgIHJldHVybiBmdW5jKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgZmluaXRlIG51bWJlci5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjEyLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgY29udmVydGVkIG51bWJlci5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy50b0Zpbml0ZSgzLjIpO1xuICAgICAqIC8vID0+IDMuMlxuICAgICAqXG4gICAgICogXy50b0Zpbml0ZShOdW1iZXIuTUlOX1ZBTFVFKTtcbiAgICAgKiAvLyA9PiA1ZS0zMjRcbiAgICAgKlxuICAgICAqIF8udG9GaW5pdGUoSW5maW5pdHkpO1xuICAgICAqIC8vID0+IDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4XG4gICAgICpcbiAgICAgKiBfLnRvRmluaXRlKCczLjInKTtcbiAgICAgKiAvLyA9PiAzLjJcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0b0Zpbml0ZSh2YWx1ZSkge1xuICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdmFsdWUgPT09IDAgPyB2YWx1ZSA6IDA7XG4gICAgICB9XG4gICAgICB2YWx1ZSA9IHRvTnVtYmVyKHZhbHVlKTtcbiAgICAgIGlmICh2YWx1ZSA9PT0gSU5GSU5JVFkgfHwgdmFsdWUgPT09IC1JTkZJTklUWSkge1xuICAgICAgICB2YXIgc2lnbiA9ICh2YWx1ZSA8IDAgPyAtMSA6IDEpO1xuICAgICAgICByZXR1cm4gc2lnbiAqIE1BWF9JTlRFR0VSO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZSA/IHZhbHVlIDogMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGFuIGludGVnZXIuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgbG9vc2VseSBiYXNlZCBvblxuICAgICAqIFtgVG9JbnRlZ2VyYF0oaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXRvaW50ZWdlcikuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgY29udmVydGVkIGludGVnZXIuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udG9JbnRlZ2VyKDMuMik7XG4gICAgICogLy8gPT4gM1xuICAgICAqXG4gICAgICogXy50b0ludGVnZXIoTnVtYmVyLk1JTl9WQUxVRSk7XG4gICAgICogLy8gPT4gMFxuICAgICAqXG4gICAgICogXy50b0ludGVnZXIoSW5maW5pdHkpO1xuICAgICAqIC8vID0+IDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4XG4gICAgICpcbiAgICAgKiBfLnRvSW50ZWdlcignMy4yJyk7XG4gICAgICogLy8gPT4gM1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRvSW50ZWdlcih2YWx1ZSkge1xuICAgICAgdmFyIHJlc3VsdCA9IHRvRmluaXRlKHZhbHVlKSxcbiAgICAgICAgICByZW1haW5kZXIgPSByZXN1bHQgJSAxO1xuXG4gICAgICByZXR1cm4gcmVzdWx0ID09PSByZXN1bHQgPyAocmVtYWluZGVyID8gcmVzdWx0IC0gcmVtYWluZGVyIDogcmVzdWx0KSA6IDA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYHZhbHVlYCB0byBhbiBpbnRlZ2VyIHN1aXRhYmxlIGZvciB1c2UgYXMgdGhlIGxlbmd0aCBvZiBhblxuICAgICAqIGFycmF5LWxpa2Ugb2JqZWN0LlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGJhc2VkIG9uXG4gICAgICogW2BUb0xlbmd0aGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXRvbGVuZ3RoKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgaW50ZWdlci5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy50b0xlbmd0aCgzLjIpO1xuICAgICAqIC8vID0+IDNcbiAgICAgKlxuICAgICAqIF8udG9MZW5ndGgoTnVtYmVyLk1JTl9WQUxVRSk7XG4gICAgICogLy8gPT4gMFxuICAgICAqXG4gICAgICogXy50b0xlbmd0aChJbmZpbml0eSk7XG4gICAgICogLy8gPT4gNDI5NDk2NzI5NVxuICAgICAqXG4gICAgICogXy50b0xlbmd0aCgnMy4yJyk7XG4gICAgICogLy8gPT4gM1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRvTGVuZ3RoKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWUgPyBiYXNlQ2xhbXAodG9JbnRlZ2VyKHZhbHVlKSwgMCwgTUFYX0FSUkFZX0xFTkdUSCkgOiAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBudW1iZXIuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHByb2Nlc3MuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgbnVtYmVyLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnRvTnVtYmVyKDMuMik7XG4gICAgICogLy8gPT4gMy4yXG4gICAgICpcbiAgICAgKiBfLnRvTnVtYmVyKE51bWJlci5NSU5fVkFMVUUpO1xuICAgICAqIC8vID0+IDVlLTMyNFxuICAgICAqXG4gICAgICogXy50b051bWJlcihJbmZpbml0eSk7XG4gICAgICogLy8gPT4gSW5maW5pdHlcbiAgICAgKlxuICAgICAqIF8udG9OdW1iZXIoJzMuMicpO1xuICAgICAqIC8vID0+IDMuMlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRvTnVtYmVyKHZhbHVlKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09ICdudW1iZXInKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIE5BTjtcbiAgICAgIH1cbiAgICAgIGlmIChpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgdmFyIG90aGVyID0gdHlwZW9mIHZhbHVlLnZhbHVlT2YgPT0gJ2Z1bmN0aW9uJyA/IHZhbHVlLnZhbHVlT2YoKSA6IHZhbHVlO1xuICAgICAgICB2YWx1ZSA9IGlzT2JqZWN0KG90aGVyKSA/IChvdGhlciArICcnKSA6IG90aGVyO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gdmFsdWUgPT09IDAgPyB2YWx1ZSA6ICt2YWx1ZTtcbiAgICAgIH1cbiAgICAgIHZhbHVlID0gYmFzZVRyaW0odmFsdWUpO1xuICAgICAgdmFyIGlzQmluYXJ5ID0gcmVJc0JpbmFyeS50ZXN0KHZhbHVlKTtcbiAgICAgIHJldHVybiAoaXNCaW5hcnkgfHwgcmVJc09jdGFsLnRlc3QodmFsdWUpKVxuICAgICAgICA/IGZyZWVQYXJzZUludCh2YWx1ZS5zbGljZSgyKSwgaXNCaW5hcnkgPyAyIDogOClcbiAgICAgICAgOiAocmVJc0JhZEhleC50ZXN0KHZhbHVlKSA/IE5BTiA6ICt2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYHZhbHVlYCB0byBhIHBsYWluIG9iamVjdCBmbGF0dGVuaW5nIGluaGVyaXRlZCBlbnVtZXJhYmxlIHN0cmluZ1xuICAgICAqIGtleWVkIHByb3BlcnRpZXMgb2YgYHZhbHVlYCB0byBvd24gcHJvcGVydGllcyBvZiB0aGUgcGxhaW4gb2JqZWN0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBwbGFpbiBvYmplY3QuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIEZvbygpIHtcbiAgICAgKiAgIHRoaXMuYiA9IDI7XG4gICAgICogfVxuICAgICAqXG4gICAgICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAgICAgKlxuICAgICAqIF8uYXNzaWduKHsgJ2EnOiAxIH0sIG5ldyBGb28pO1xuICAgICAqIC8vID0+IHsgJ2EnOiAxLCAnYic6IDIgfVxuICAgICAqXG4gICAgICogXy5hc3NpZ24oeyAnYSc6IDEgfSwgXy50b1BsYWluT2JqZWN0KG5ldyBGb28pKTtcbiAgICAgKiAvLyA9PiB7ICdhJzogMSwgJ2InOiAyLCAnYyc6IDMgfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRvUGxhaW5PYmplY3QodmFsdWUpIHtcbiAgICAgIHJldHVybiBjb3B5T2JqZWN0KHZhbHVlLCBrZXlzSW4odmFsdWUpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc2FmZSBpbnRlZ2VyLiBBIHNhZmUgaW50ZWdlciBjYW4gYmUgY29tcGFyZWQgYW5kXG4gICAgICogcmVwcmVzZW50ZWQgY29ycmVjdGx5LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBpbnRlZ2VyLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnRvU2FmZUludGVnZXIoMy4yKTtcbiAgICAgKiAvLyA9PiAzXG4gICAgICpcbiAgICAgKiBfLnRvU2FmZUludGVnZXIoTnVtYmVyLk1JTl9WQUxVRSk7XG4gICAgICogLy8gPT4gMFxuICAgICAqXG4gICAgICogXy50b1NhZmVJbnRlZ2VyKEluZmluaXR5KTtcbiAgICAgKiAvLyA9PiA5MDA3MTk5MjU0NzQwOTkxXG4gICAgICpcbiAgICAgKiBfLnRvU2FmZUludGVnZXIoJzMuMicpO1xuICAgICAqIC8vID0+IDNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0b1NhZmVJbnRlZ2VyKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWVcbiAgICAgICAgPyBiYXNlQ2xhbXAodG9JbnRlZ2VyKHZhbHVlKSwgLU1BWF9TQUZFX0lOVEVHRVIsIE1BWF9TQUZFX0lOVEVHRVIpXG4gICAgICAgIDogKHZhbHVlID09PSAwID8gdmFsdWUgOiAwKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nLiBBbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQgZm9yIGBudWxsYFxuICAgICAqIGFuZCBgdW5kZWZpbmVkYCB2YWx1ZXMuIFRoZSBzaWduIG9mIGAtMGAgaXMgcHJlc2VydmVkLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udG9TdHJpbmcobnVsbCk7XG4gICAgICogLy8gPT4gJydcbiAgICAgKlxuICAgICAqIF8udG9TdHJpbmcoLTApO1xuICAgICAqIC8vID0+ICctMCdcbiAgICAgKlxuICAgICAqIF8udG9TdHJpbmcoWzEsIDIsIDNdKTtcbiAgICAgKiAvLyA9PiAnMSwyLDMnXG4gICAgICovXG4gICAgZnVuY3Rpb24gdG9TdHJpbmcodmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZSA9PSBudWxsID8gJycgOiBiYXNlVG9TdHJpbmcodmFsdWUpO1xuICAgIH1cblxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIC8qKlxuICAgICAqIEFzc2lnbnMgb3duIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnRpZXMgb2Ygc291cmNlIG9iamVjdHMgdG8gdGhlXG4gICAgICogZGVzdGluYXRpb24gb2JqZWN0LiBTb3VyY2Ugb2JqZWN0cyBhcmUgYXBwbGllZCBmcm9tIGxlZnQgdG8gcmlnaHQuXG4gICAgICogU3Vic2VxdWVudCBzb3VyY2VzIG92ZXJ3cml0ZSBwcm9wZXJ0eSBhc3NpZ25tZW50cyBvZiBwcmV2aW91cyBzb3VyY2VzLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYG9iamVjdGAgYW5kIGlzIGxvb3NlbHkgYmFzZWQgb25cbiAgICAgKiBbYE9iamVjdC5hc3NpZ25gXShodHRwczovL21kbi5pby9PYmplY3QvYXNzaWduKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEwLjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBbc291cmNlc10gVGhlIHNvdXJjZSBvYmplY3RzLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICogQHNlZSBfLmFzc2lnbkluXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIEZvbygpIHtcbiAgICAgKiAgIHRoaXMuYSA9IDE7XG4gICAgICogfVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gQmFyKCkge1xuICAgICAqICAgdGhpcy5jID0gMztcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBGb28ucHJvdG90eXBlLmIgPSAyO1xuICAgICAqIEJhci5wcm90b3R5cGUuZCA9IDQ7XG4gICAgICpcbiAgICAgKiBfLmFzc2lnbih7ICdhJzogMCB9LCBuZXcgRm9vLCBuZXcgQmFyKTtcbiAgICAgKiAvLyA9PiB7ICdhJzogMSwgJ2MnOiAzIH1cbiAgICAgKi9cbiAgICB2YXIgYXNzaWduID0gY3JlYXRlQXNzaWduZXIoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2UpIHtcbiAgICAgIGlmIChpc1Byb3RvdHlwZShzb3VyY2UpIHx8IGlzQXJyYXlMaWtlKHNvdXJjZSkpIHtcbiAgICAgICAgY29weU9iamVjdChzb3VyY2UsIGtleXMoc291cmNlKSwgb2JqZWN0KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xuICAgICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHtcbiAgICAgICAgICBhc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgc291cmNlW2tleV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmFzc2lnbmAgZXhjZXB0IHRoYXQgaXQgaXRlcmF0ZXMgb3ZlciBvd24gYW5kXG4gICAgICogaW5oZXJpdGVkIHNvdXJjZSBwcm9wZXJ0aWVzLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAYWxpYXMgZXh0ZW5kXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAgICAgKiBAcGFyYW0gey4uLk9iamVjdH0gW3NvdXJjZXNdIFRoZSBzb3VyY2Ugb2JqZWN0cy5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqIEBzZWUgXy5hc3NpZ25cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gRm9vKCkge1xuICAgICAqICAgdGhpcy5hID0gMTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBCYXIoKSB7XG4gICAgICogICB0aGlzLmMgPSAzO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIEZvby5wcm90b3R5cGUuYiA9IDI7XG4gICAgICogQmFyLnByb3RvdHlwZS5kID0gNDtcbiAgICAgKlxuICAgICAqIF8uYXNzaWduSW4oeyAnYSc6IDAgfSwgbmV3IEZvbywgbmV3IEJhcik7XG4gICAgICogLy8gPT4geyAnYSc6IDEsICdiJzogMiwgJ2MnOiAzLCAnZCc6IDQgfVxuICAgICAqL1xuICAgIHZhciBhc3NpZ25JbiA9IGNyZWF0ZUFzc2lnbmVyKGZ1bmN0aW9uKG9iamVjdCwgc291cmNlKSB7XG4gICAgICBjb3B5T2JqZWN0KHNvdXJjZSwga2V5c0luKHNvdXJjZSksIG9iamVjdCk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmFzc2lnbkluYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBjdXN0b21pemVyYFxuICAgICAqIHdoaWNoIGlzIGludm9rZWQgdG8gcHJvZHVjZSB0aGUgYXNzaWduZWQgdmFsdWVzLiBJZiBgY3VzdG9taXplcmAgcmV0dXJuc1xuICAgICAqIGB1bmRlZmluZWRgLCBhc3NpZ25tZW50IGlzIGhhbmRsZWQgYnkgdGhlIG1ldGhvZCBpbnN0ZWFkLiBUaGUgYGN1c3RvbWl6ZXJgXG4gICAgICogaXMgaW52b2tlZCB3aXRoIGZpdmUgYXJndW1lbnRzOiAob2JqVmFsdWUsIHNyY1ZhbHVlLCBrZXksIG9iamVjdCwgc291cmNlKS5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGFsaWFzIGV4dGVuZFdpdGhcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBzb3VyY2VzIFRoZSBzb3VyY2Ugb2JqZWN0cy5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBhc3NpZ25lZCB2YWx1ZXMuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKiBAc2VlIF8uYXNzaWduV2l0aFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBjdXN0b21pemVyKG9ialZhbHVlLCBzcmNWYWx1ZSkge1xuICAgICAqICAgcmV0dXJuIF8uaXNVbmRlZmluZWQob2JqVmFsdWUpID8gc3JjVmFsdWUgOiBvYmpWYWx1ZTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiB2YXIgZGVmYXVsdHMgPSBfLnBhcnRpYWxSaWdodChfLmFzc2lnbkluV2l0aCwgY3VzdG9taXplcik7XG4gICAgICpcbiAgICAgKiBkZWZhdWx0cyh7ICdhJzogMSB9LCB7ICdiJzogMiB9LCB7ICdhJzogMyB9KTtcbiAgICAgKiAvLyA9PiB7ICdhJzogMSwgJ2InOiAyIH1cbiAgICAgKi9cbiAgICB2YXIgYXNzaWduSW5XaXRoID0gY3JlYXRlQXNzaWduZXIoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2UsIHNyY0luZGV4LCBjdXN0b21pemVyKSB7XG4gICAgICBjb3B5T2JqZWN0KHNvdXJjZSwga2V5c0luKHNvdXJjZSksIG9iamVjdCwgY3VzdG9taXplcik7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmFzc2lnbmAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgY3VzdG9taXplcmBcbiAgICAgKiB3aGljaCBpcyBpbnZva2VkIHRvIHByb2R1Y2UgdGhlIGFzc2lnbmVkIHZhbHVlcy4gSWYgYGN1c3RvbWl6ZXJgIHJldHVybnNcbiAgICAgKiBgdW5kZWZpbmVkYCwgYXNzaWdubWVudCBpcyBoYW5kbGVkIGJ5IHRoZSBtZXRob2QgaW5zdGVhZC4gVGhlIGBjdXN0b21pemVyYFxuICAgICAqIGlzIGludm9rZWQgd2l0aCBmaXZlIGFyZ3VtZW50czogKG9ialZhbHVlLCBzcmNWYWx1ZSwga2V5LCBvYmplY3QsIHNvdXJjZSkuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gICAgICogQHBhcmFtIHsuLi5PYmplY3R9IHNvdXJjZXMgVGhlIHNvdXJjZSBvYmplY3RzLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGFzc2lnbmVkIHZhbHVlcy5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqIEBzZWUgXy5hc3NpZ25JbldpdGhcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gY3VzdG9taXplcihvYmpWYWx1ZSwgc3JjVmFsdWUpIHtcbiAgICAgKiAgIHJldHVybiBfLmlzVW5kZWZpbmVkKG9ialZhbHVlKSA/IHNyY1ZhbHVlIDogb2JqVmFsdWU7XG4gICAgICogfVxuICAgICAqXG4gICAgICogdmFyIGRlZmF1bHRzID0gXy5wYXJ0aWFsUmlnaHQoXy5hc3NpZ25XaXRoLCBjdXN0b21pemVyKTtcbiAgICAgKlxuICAgICAqIGRlZmF1bHRzKHsgJ2EnOiAxIH0sIHsgJ2InOiAyIH0sIHsgJ2EnOiAzIH0pO1xuICAgICAqIC8vID0+IHsgJ2EnOiAxLCAnYic6IDIgfVxuICAgICAqL1xuICAgIHZhciBhc3NpZ25XaXRoID0gY3JlYXRlQXNzaWduZXIoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2UsIHNyY0luZGV4LCBjdXN0b21pemVyKSB7XG4gICAgICBjb3B5T2JqZWN0KHNvdXJjZSwga2V5cyhzb3VyY2UpLCBvYmplY3QsIGN1c3RvbWl6ZXIpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiB2YWx1ZXMgY29ycmVzcG9uZGluZyB0byBgcGF0aHNgIG9mIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDEuMC4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHsuLi4oc3RyaW5nfHN0cmluZ1tdKX0gW3BhdGhzXSBUaGUgcHJvcGVydHkgcGF0aHMgdG8gcGljay5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHBpY2tlZCB2YWx1ZXMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICdhJzogW3sgJ2InOiB7ICdjJzogMyB9IH0sIDRdIH07XG4gICAgICpcbiAgICAgKiBfLmF0KG9iamVjdCwgWydhWzBdLmIuYycsICdhWzFdJ10pO1xuICAgICAqIC8vID0+IFszLCA0XVxuICAgICAqL1xuICAgIHZhciBhdCA9IGZsYXRSZXN0KGJhc2VBdCk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIG9iamVjdCB0aGF0IGluaGVyaXRzIGZyb20gdGhlIGBwcm90b3R5cGVgIG9iamVjdC4gSWYgYVxuICAgICAqIGBwcm9wZXJ0aWVzYCBvYmplY3QgaXMgZ2l2ZW4sIGl0cyBvd24gZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydGllc1xuICAgICAqIGFyZSBhc3NpZ25lZCB0byB0aGUgY3JlYXRlZCBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMi4zLjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IHByb3RvdHlwZSBUaGUgb2JqZWN0IHRvIGluaGVyaXQgZnJvbS5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW3Byb3BlcnRpZXNdIFRoZSBwcm9wZXJ0aWVzIHRvIGFzc2lnbiB0byB0aGUgb2JqZWN0LlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIFNoYXBlKCkge1xuICAgICAqICAgdGhpcy54ID0gMDtcbiAgICAgKiAgIHRoaXMueSA9IDA7XG4gICAgICogfVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gQ2lyY2xlKCkge1xuICAgICAqICAgU2hhcGUuY2FsbCh0aGlzKTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBDaXJjbGUucHJvdG90eXBlID0gXy5jcmVhdGUoU2hhcGUucHJvdG90eXBlLCB7XG4gICAgICogICAnY29uc3RydWN0b3InOiBDaXJjbGVcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIHZhciBjaXJjbGUgPSBuZXcgQ2lyY2xlO1xuICAgICAqIGNpcmNsZSBpbnN0YW5jZW9mIENpcmNsZTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBjaXJjbGUgaW5zdGFuY2VvZiBTaGFwZTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlKHByb3RvdHlwZSwgcHJvcGVydGllcykge1xuICAgICAgdmFyIHJlc3VsdCA9IGJhc2VDcmVhdGUocHJvdG90eXBlKTtcbiAgICAgIHJldHVybiBwcm9wZXJ0aWVzID09IG51bGwgPyByZXN1bHQgOiBiYXNlQXNzaWduKHJlc3VsdCwgcHJvcGVydGllcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQXNzaWducyBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0aWVzIG9mIHNvdXJjZVxuICAgICAqIG9iamVjdHMgdG8gdGhlIGRlc3RpbmF0aW9uIG9iamVjdCBmb3IgYWxsIGRlc3RpbmF0aW9uIHByb3BlcnRpZXMgdGhhdFxuICAgICAqIHJlc29sdmUgdG8gYHVuZGVmaW5lZGAuIFNvdXJjZSBvYmplY3RzIGFyZSBhcHBsaWVkIGZyb20gbGVmdCB0byByaWdodC5cbiAgICAgKiBPbmNlIGEgcHJvcGVydHkgaXMgc2V0LCBhZGRpdGlvbmFsIHZhbHVlcyBvZiB0aGUgc2FtZSBwcm9wZXJ0eSBhcmUgaWdub3JlZC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAgICAgKiBAcGFyYW0gey4uLk9iamVjdH0gW3NvdXJjZXNdIFRoZSBzb3VyY2Ugb2JqZWN0cy5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqIEBzZWUgXy5kZWZhdWx0c0RlZXBcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5kZWZhdWx0cyh7ICdhJzogMSB9LCB7ICdiJzogMiB9LCB7ICdhJzogMyB9KTtcbiAgICAgKiAvLyA9PiB7ICdhJzogMSwgJ2InOiAyIH1cbiAgICAgKi9cbiAgICB2YXIgZGVmYXVsdHMgPSBiYXNlUmVzdChmdW5jdGlvbihvYmplY3QsIHNvdXJjZXMpIHtcbiAgICAgIG9iamVjdCA9IE9iamVjdChvYmplY3QpO1xuXG4gICAgICB2YXIgaW5kZXggPSAtMTtcbiAgICAgIHZhciBsZW5ndGggPSBzb3VyY2VzLmxlbmd0aDtcbiAgICAgIHZhciBndWFyZCA9IGxlbmd0aCA+IDIgPyBzb3VyY2VzWzJdIDogdW5kZWZpbmVkO1xuXG4gICAgICBpZiAoZ3VhcmQgJiYgaXNJdGVyYXRlZUNhbGwoc291cmNlc1swXSwgc291cmNlc1sxXSwgZ3VhcmQpKSB7XG4gICAgICAgIGxlbmd0aCA9IDE7XG4gICAgICB9XG5cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciBzb3VyY2UgPSBzb3VyY2VzW2luZGV4XTtcbiAgICAgICAgdmFyIHByb3BzID0ga2V5c0luKHNvdXJjZSk7XG4gICAgICAgIHZhciBwcm9wc0luZGV4ID0gLTE7XG4gICAgICAgIHZhciBwcm9wc0xlbmd0aCA9IHByb3BzLmxlbmd0aDtcblxuICAgICAgICB3aGlsZSAoKytwcm9wc0luZGV4IDwgcHJvcHNMZW5ndGgpIHtcbiAgICAgICAgICB2YXIga2V5ID0gcHJvcHNbcHJvcHNJbmRleF07XG4gICAgICAgICAgdmFyIHZhbHVlID0gb2JqZWN0W2tleV07XG5cbiAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgICAoZXEodmFsdWUsIG9iamVjdFByb3RvW2tleV0pICYmICFoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkpIHtcbiAgICAgICAgICAgIG9iamVjdFtrZXldID0gc291cmNlW2tleV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmRlZmF1bHRzYCBleGNlcHQgdGhhdCBpdCByZWN1cnNpdmVseSBhc3NpZ25zXG4gICAgICogZGVmYXVsdCBwcm9wZXJ0aWVzLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4xMC4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAgICAgKiBAcGFyYW0gey4uLk9iamVjdH0gW3NvdXJjZXNdIFRoZSBzb3VyY2Ugb2JqZWN0cy5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqIEBzZWUgXy5kZWZhdWx0c1xuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmRlZmF1bHRzRGVlcCh7ICdhJzogeyAnYic6IDIgfSB9LCB7ICdhJzogeyAnYic6IDEsICdjJzogMyB9IH0pO1xuICAgICAqIC8vID0+IHsgJ2EnOiB7ICdiJzogMiwgJ2MnOiAzIH0gfVxuICAgICAqL1xuICAgIHZhciBkZWZhdWx0c0RlZXAgPSBiYXNlUmVzdChmdW5jdGlvbihhcmdzKSB7XG4gICAgICBhcmdzLnB1c2godW5kZWZpbmVkLCBjdXN0b21EZWZhdWx0c01lcmdlKTtcbiAgICAgIHJldHVybiBhcHBseShtZXJnZVdpdGgsIHVuZGVmaW5lZCwgYXJncyk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmZpbmRgIGV4Y2VwdCB0aGF0IGl0IHJldHVybnMgdGhlIGtleSBvZiB0aGUgZmlyc3RcbiAgICAgKiBlbGVtZW50IGBwcmVkaWNhdGVgIHJldHVybnMgdHJ1dGh5IGZvciBpbnN0ZWFkIG9mIHRoZSBlbGVtZW50IGl0c2VsZi5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAxLjEuMFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge3N0cmluZ3x1bmRlZmluZWR9IFJldHVybnMgdGhlIGtleSBvZiB0aGUgbWF0Y2hlZCBlbGVtZW50LFxuICAgICAqICBlbHNlIGB1bmRlZmluZWRgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgdXNlcnMgPSB7XG4gICAgICogICAnYmFybmV5JzogIHsgJ2FnZSc6IDM2LCAnYWN0aXZlJzogdHJ1ZSB9LFxuICAgICAqICAgJ2ZyZWQnOiAgICB7ICdhZ2UnOiA0MCwgJ2FjdGl2ZSc6IGZhbHNlIH0sXG4gICAgICogICAncGViYmxlcyc6IHsgJ2FnZSc6IDEsICAnYWN0aXZlJzogdHJ1ZSB9XG4gICAgICogfTtcbiAgICAgKlxuICAgICAqIF8uZmluZEtleSh1c2VycywgZnVuY3Rpb24obykgeyByZXR1cm4gby5hZ2UgPCA0MDsgfSk7XG4gICAgICogLy8gPT4gJ2Jhcm5leScgKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5maW5kS2V5KHVzZXJzLCB7ICdhZ2UnOiAxLCAnYWN0aXZlJzogdHJ1ZSB9KTtcbiAgICAgKiAvLyA9PiAncGViYmxlcydcbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzUHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmZpbmRLZXkodXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTtcbiAgICAgKiAvLyA9PiAnZnJlZCdcbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZmluZEtleSh1c2VycywgJ2FjdGl2ZScpO1xuICAgICAqIC8vID0+ICdiYXJuZXknXG4gICAgICovXG4gICAgZnVuY3Rpb24gZmluZEtleShvYmplY3QsIHByZWRpY2F0ZSkge1xuICAgICAgcmV0dXJuIGJhc2VGaW5kS2V5KG9iamVjdCwgZ2V0SXRlcmF0ZWUocHJlZGljYXRlLCAzKSwgYmFzZUZvck93bik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5maW5kS2V5YCBleGNlcHQgdGhhdCBpdCBpdGVyYXRlcyBvdmVyIGVsZW1lbnRzIG9mXG4gICAgICogYSBjb2xsZWN0aW9uIGluIHRoZSBvcHBvc2l0ZSBvcmRlci5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAyLjAuMFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge3N0cmluZ3x1bmRlZmluZWR9IFJldHVybnMgdGhlIGtleSBvZiB0aGUgbWF0Y2hlZCBlbGVtZW50LFxuICAgICAqICBlbHNlIGB1bmRlZmluZWRgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgdXNlcnMgPSB7XG4gICAgICogICAnYmFybmV5JzogIHsgJ2FnZSc6IDM2LCAnYWN0aXZlJzogdHJ1ZSB9LFxuICAgICAqICAgJ2ZyZWQnOiAgICB7ICdhZ2UnOiA0MCwgJ2FjdGl2ZSc6IGZhbHNlIH0sXG4gICAgICogICAncGViYmxlcyc6IHsgJ2FnZSc6IDEsICAnYWN0aXZlJzogdHJ1ZSB9XG4gICAgICogfTtcbiAgICAgKlxuICAgICAqIF8uZmluZExhc3RLZXkodXNlcnMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuIG8uYWdlIDwgNDA7IH0pO1xuICAgICAqIC8vID0+IHJldHVybnMgJ3BlYmJsZXMnIGFzc3VtaW5nIGBfLmZpbmRLZXlgIHJldHVybnMgJ2Jhcm5leSdcbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5maW5kTGFzdEtleSh1c2VycywgeyAnYWdlJzogMzYsICdhY3RpdmUnOiB0cnVlIH0pO1xuICAgICAqIC8vID0+ICdiYXJuZXknXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5maW5kTGFzdEtleSh1c2VycywgWydhY3RpdmUnLCBmYWxzZV0pO1xuICAgICAqIC8vID0+ICdmcmVkJ1xuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5maW5kTGFzdEtleSh1c2VycywgJ2FjdGl2ZScpO1xuICAgICAqIC8vID0+ICdwZWJibGVzJ1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZpbmRMYXN0S2V5KG9iamVjdCwgcHJlZGljYXRlKSB7XG4gICAgICByZXR1cm4gYmFzZUZpbmRLZXkob2JqZWN0LCBnZXRJdGVyYXRlZShwcmVkaWNhdGUsIDMpLCBiYXNlRm9yT3duUmlnaHQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEl0ZXJhdGVzIG92ZXIgb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydGllcyBvZiBhblxuICAgICAqIG9iamVjdCBhbmQgaW52b2tlcyBgaXRlcmF0ZWVgIGZvciBlYWNoIHByb3BlcnR5LiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZFxuICAgICAqIHdpdGggdGhyZWUgYXJndW1lbnRzOiAodmFsdWUsIGtleSwgb2JqZWN0KS4gSXRlcmF0ZWUgZnVuY3Rpb25zIG1heSBleGl0XG4gICAgICogaXRlcmF0aW9uIGVhcmx5IGJ5IGV4cGxpY2l0bHkgcmV0dXJuaW5nIGBmYWxzZWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4zLjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqIEBzZWUgXy5mb3JJblJpZ2h0XG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIEZvbygpIHtcbiAgICAgKiAgIHRoaXMuYSA9IDE7XG4gICAgICogICB0aGlzLmIgPSAyO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gICAgICpcbiAgICAgKiBfLmZvckluKG5ldyBGb28sIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKGtleSk7XG4gICAgICogfSk7XG4gICAgICogLy8gPT4gTG9ncyAnYScsICdiJywgdGhlbiAnYycgKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZCkuXG4gICAgICovXG4gICAgZnVuY3Rpb24gZm9ySW4ob2JqZWN0LCBpdGVyYXRlZSkge1xuICAgICAgcmV0dXJuIG9iamVjdCA9PSBudWxsXG4gICAgICAgID8gb2JqZWN0XG4gICAgICAgIDogYmFzZUZvcihvYmplY3QsIGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCAzKSwga2V5c0luKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmZvckluYCBleGNlcHQgdGhhdCBpdCBpdGVyYXRlcyBvdmVyIHByb3BlcnRpZXMgb2ZcbiAgICAgKiBgb2JqZWN0YCBpbiB0aGUgb3Bwb3NpdGUgb3JkZXIuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMi4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqIEBzZWUgXy5mb3JJblxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBGb28oKSB7XG4gICAgICogICB0aGlzLmEgPSAxO1xuICAgICAqICAgdGhpcy5iID0gMjtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICAgICAqXG4gICAgICogXy5mb3JJblJpZ2h0KG5ldyBGb28sIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKGtleSk7XG4gICAgICogfSk7XG4gICAgICogLy8gPT4gTG9ncyAnYycsICdiJywgdGhlbiAnYScgYXNzdW1pbmcgYF8uZm9ySW5gIGxvZ3MgJ2EnLCAnYicsIHRoZW4gJ2MnLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZvckluUmlnaHQob2JqZWN0LCBpdGVyYXRlZSkge1xuICAgICAgcmV0dXJuIG9iamVjdCA9PSBudWxsXG4gICAgICAgID8gb2JqZWN0XG4gICAgICAgIDogYmFzZUZvclJpZ2h0KG9iamVjdCwgZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDMpLCBrZXlzSW4pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEl0ZXJhdGVzIG92ZXIgb3duIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnRpZXMgb2YgYW4gb2JqZWN0IGFuZFxuICAgICAqIGludm9rZXMgYGl0ZXJhdGVlYCBmb3IgZWFjaCBwcm9wZXJ0eS4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCB0aHJlZVxuICAgICAqIGFyZ3VtZW50czogKHZhbHVlLCBrZXksIG9iamVjdCkuIEl0ZXJhdGVlIGZ1bmN0aW9ucyBtYXkgZXhpdCBpdGVyYXRpb25cbiAgICAgKiBlYXJseSBieSBleHBsaWNpdGx5IHJldHVybmluZyBgZmFsc2VgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMy4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKiBAc2VlIF8uZm9yT3duUmlnaHRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gRm9vKCkge1xuICAgICAqICAgdGhpcy5hID0gMTtcbiAgICAgKiAgIHRoaXMuYiA9IDI7XG4gICAgICogfVxuICAgICAqXG4gICAgICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAgICAgKlxuICAgICAqIF8uZm9yT3duKG5ldyBGb28sIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKGtleSk7XG4gICAgICogfSk7XG4gICAgICogLy8gPT4gTG9ncyAnYScgdGhlbiAnYicgKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZCkuXG4gICAgICovXG4gICAgZnVuY3Rpb24gZm9yT3duKG9iamVjdCwgaXRlcmF0ZWUpIHtcbiAgICAgIHJldHVybiBvYmplY3QgJiYgYmFzZUZvck93bihvYmplY3QsIGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCAzKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5mb3JPd25gIGV4Y2VwdCB0aGF0IGl0IGl0ZXJhdGVzIG92ZXIgcHJvcGVydGllcyBvZlxuICAgICAqIGBvYmplY3RgIGluIHRoZSBvcHBvc2l0ZSBvcmRlci5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAyLjAuMFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICogQHNlZSBfLmZvck93blxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBGb28oKSB7XG4gICAgICogICB0aGlzLmEgPSAxO1xuICAgICAqICAgdGhpcy5iID0gMjtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICAgICAqXG4gICAgICogXy5mb3JPd25SaWdodChuZXcgRm9vLCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gICAgICogICBjb25zb2xlLmxvZyhrZXkpO1xuICAgICAqIH0pO1xuICAgICAqIC8vID0+IExvZ3MgJ2InIHRoZW4gJ2EnIGFzc3VtaW5nIGBfLmZvck93bmAgbG9ncyAnYScgdGhlbiAnYicuXG4gICAgICovXG4gICAgZnVuY3Rpb24gZm9yT3duUmlnaHQob2JqZWN0LCBpdGVyYXRlZSkge1xuICAgICAgcmV0dXJuIG9iamVjdCAmJiBiYXNlRm9yT3duUmlnaHQob2JqZWN0LCBnZXRJdGVyYXRlZShpdGVyYXRlZSwgMykpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgZnVuY3Rpb24gcHJvcGVydHkgbmFtZXMgZnJvbSBvd24gZW51bWVyYWJsZSBwcm9wZXJ0aWVzXG4gICAgICogb2YgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGluc3BlY3QuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBmdW5jdGlvbiBuYW1lcy5cbiAgICAgKiBAc2VlIF8uZnVuY3Rpb25zSW5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gRm9vKCkge1xuICAgICAqICAgdGhpcy5hID0gXy5jb25zdGFudCgnYScpO1xuICAgICAqICAgdGhpcy5iID0gXy5jb25zdGFudCgnYicpO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIEZvby5wcm90b3R5cGUuYyA9IF8uY29uc3RhbnQoJ2MnKTtcbiAgICAgKlxuICAgICAqIF8uZnVuY3Rpb25zKG5ldyBGb28pO1xuICAgICAqIC8vID0+IFsnYScsICdiJ11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmdW5jdGlvbnMob2JqZWN0KSB7XG4gICAgICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyBbXSA6IGJhc2VGdW5jdGlvbnMob2JqZWN0LCBrZXlzKG9iamVjdCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgZnVuY3Rpb24gcHJvcGVydHkgbmFtZXMgZnJvbSBvd24gYW5kIGluaGVyaXRlZFxuICAgICAqIGVudW1lcmFibGUgcHJvcGVydGllcyBvZiBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaW5zcGVjdC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGZ1bmN0aW9uIG5hbWVzLlxuICAgICAqIEBzZWUgXy5mdW5jdGlvbnNcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gRm9vKCkge1xuICAgICAqICAgdGhpcy5hID0gXy5jb25zdGFudCgnYScpO1xuICAgICAqICAgdGhpcy5iID0gXy5jb25zdGFudCgnYicpO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIEZvby5wcm90b3R5cGUuYyA9IF8uY29uc3RhbnQoJ2MnKTtcbiAgICAgKlxuICAgICAqIF8uZnVuY3Rpb25zSW4obmV3IEZvbyk7XG4gICAgICogLy8gPT4gWydhJywgJ2InLCAnYyddXG4gICAgICovXG4gICAgZnVuY3Rpb24gZnVuY3Rpb25zSW4ob2JqZWN0KSB7XG4gICAgICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyBbXSA6IGJhc2VGdW5jdGlvbnMob2JqZWN0LCBrZXlzSW4ob2JqZWN0KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgdmFsdWUgYXQgYHBhdGhgIG9mIGBvYmplY3RgLiBJZiB0aGUgcmVzb2x2ZWQgdmFsdWUgaXNcbiAgICAgKiBgdW5kZWZpbmVkYCwgdGhlIGBkZWZhdWx0VmFsdWVgIGlzIHJldHVybmVkIGluIGl0cyBwbGFjZS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjcuMFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAgICAgKiBAcGFyYW0geyp9IFtkZWZhdWx0VmFsdWVdIFRoZSB2YWx1ZSByZXR1cm5lZCBmb3IgYHVuZGVmaW5lZGAgcmVzb2x2ZWQgdmFsdWVzLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXNvbHZlZCB2YWx1ZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiBbeyAnYic6IHsgJ2MnOiAzIH0gfV0gfTtcbiAgICAgKlxuICAgICAqIF8uZ2V0KG9iamVjdCwgJ2FbMF0uYi5jJyk7XG4gICAgICogLy8gPT4gM1xuICAgICAqXG4gICAgICogXy5nZXQob2JqZWN0LCBbJ2EnLCAnMCcsICdiJywgJ2MnXSk7XG4gICAgICogLy8gPT4gM1xuICAgICAqXG4gICAgICogXy5nZXQob2JqZWN0LCAnYS5iLmMnLCAnZGVmYXVsdCcpO1xuICAgICAqIC8vID0+ICdkZWZhdWx0J1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldChvYmplY3QsIHBhdGgsIGRlZmF1bHRWYWx1ZSkge1xuICAgICAgdmFyIHJlc3VsdCA9IG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogYmFzZUdldChvYmplY3QsIHBhdGgpO1xuICAgICAgcmV0dXJuIHJlc3VsdCA9PT0gdW5kZWZpbmVkID8gZGVmYXVsdFZhbHVlIDogcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgcGF0aGAgaXMgYSBkaXJlY3QgcHJvcGVydHkgb2YgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgcGF0aGAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICdhJzogeyAnYic6IDIgfSB9O1xuICAgICAqIHZhciBvdGhlciA9IF8uY3JlYXRlKHsgJ2EnOiBfLmNyZWF0ZSh7ICdiJzogMiB9KSB9KTtcbiAgICAgKlxuICAgICAqIF8uaGFzKG9iamVjdCwgJ2EnKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmhhcyhvYmplY3QsICdhLmInKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmhhcyhvYmplY3QsIFsnYScsICdiJ10pO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaGFzKG90aGVyLCAnYScpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaGFzKG9iamVjdCwgcGF0aCkge1xuICAgICAgcmV0dXJuIG9iamVjdCAhPSBudWxsICYmIGhhc1BhdGgob2JqZWN0LCBwYXRoLCBiYXNlSGFzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHBhdGhgIGlzIGEgZGlyZWN0IG9yIGluaGVyaXRlZCBwcm9wZXJ0eSBvZiBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBwYXRoYCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IF8uY3JlYXRlKHsgJ2EnOiBfLmNyZWF0ZSh7ICdiJzogMiB9KSB9KTtcbiAgICAgKlxuICAgICAqIF8uaGFzSW4ob2JqZWN0LCAnYScpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaGFzSW4ob2JqZWN0LCAnYS5iJyk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5oYXNJbihvYmplY3QsIFsnYScsICdiJ10pO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaGFzSW4ob2JqZWN0LCAnYicpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaGFzSW4ob2JqZWN0LCBwYXRoKSB7XG4gICAgICByZXR1cm4gb2JqZWN0ICE9IG51bGwgJiYgaGFzUGF0aChvYmplY3QsIHBhdGgsIGJhc2VIYXNJbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBvYmplY3QgY29tcG9zZWQgb2YgdGhlIGludmVydGVkIGtleXMgYW5kIHZhbHVlcyBvZiBgb2JqZWN0YC5cbiAgICAgKiBJZiBgb2JqZWN0YCBjb250YWlucyBkdXBsaWNhdGUgdmFsdWVzLCBzdWJzZXF1ZW50IHZhbHVlcyBvdmVyd3JpdGVcbiAgICAgKiBwcm9wZXJ0eSBhc3NpZ25tZW50cyBvZiBwcmV2aW91cyB2YWx1ZXMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC43LjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGludmVydC5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgaW52ZXJ0ZWQgb2JqZWN0LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEsICdiJzogMiwgJ2MnOiAxIH07XG4gICAgICpcbiAgICAgKiBfLmludmVydChvYmplY3QpO1xuICAgICAqIC8vID0+IHsgJzEnOiAnYycsICcyJzogJ2InIH1cbiAgICAgKi9cbiAgICB2YXIgaW52ZXJ0ID0gY3JlYXRlSW52ZXJ0ZXIoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJlxuICAgICAgICAgIHR5cGVvZiB2YWx1ZS50b1N0cmluZyAhPSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHZhbHVlID0gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIHJlc3VsdFt2YWx1ZV0gPSBrZXk7XG4gICAgfSwgY29uc3RhbnQoaWRlbnRpdHkpKTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uaW52ZXJ0YCBleGNlcHQgdGhhdCB0aGUgaW52ZXJ0ZWQgb2JqZWN0IGlzIGdlbmVyYXRlZFxuICAgICAqIGZyb20gdGhlIHJlc3VsdHMgb2YgcnVubmluZyBlYWNoIGVsZW1lbnQgb2YgYG9iamVjdGAgdGhydSBgaXRlcmF0ZWVgLiBUaGVcbiAgICAgKiBjb3JyZXNwb25kaW5nIGludmVydGVkIHZhbHVlIG9mIGVhY2ggaW52ZXJ0ZWQga2V5IGlzIGFuIGFycmF5IG9mIGtleXNcbiAgICAgKiByZXNwb25zaWJsZSBmb3IgZ2VuZXJhdGluZyB0aGUgaW52ZXJ0ZWQgdmFsdWUuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkXG4gICAgICogd2l0aCBvbmUgYXJndW1lbnQ6ICh2YWx1ZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGludmVydC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IGludmVydGVkIG9iamVjdC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxLCAnYic6IDIsICdjJzogMSB9O1xuICAgICAqXG4gICAgICogXy5pbnZlcnRCeShvYmplY3QpO1xuICAgICAqIC8vID0+IHsgJzEnOiBbJ2EnLCAnYyddLCAnMic6IFsnYiddIH1cbiAgICAgKlxuICAgICAqIF8uaW52ZXJ0Qnkob2JqZWN0LCBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAqICAgcmV0dXJuICdncm91cCcgKyB2YWx1ZTtcbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiB7ICdncm91cDEnOiBbJ2EnLCAnYyddLCAnZ3JvdXAyJzogWydiJ10gfVxuICAgICAqL1xuICAgIHZhciBpbnZlcnRCeSA9IGNyZWF0ZUludmVydGVyKGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkge1xuICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiZcbiAgICAgICAgICB0eXBlb2YgdmFsdWUudG9TdHJpbmcgIT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YWx1ZSA9IG5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpO1xuICAgICAgfVxuXG4gICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChyZXN1bHQsIHZhbHVlKSkge1xuICAgICAgICByZXN1bHRbdmFsdWVdLnB1c2goa2V5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdFt2YWx1ZV0gPSBba2V5XTtcbiAgICAgIH1cbiAgICB9LCBnZXRJdGVyYXRlZSk7XG5cbiAgICAvKipcbiAgICAgKiBJbnZva2VzIHRoZSBtZXRob2QgYXQgYHBhdGhgIG9mIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgbWV0aG9kIHRvIGludm9rZS5cbiAgICAgKiBAcGFyYW0gey4uLip9IFthcmdzXSBUaGUgYXJndW1lbnRzIHRvIGludm9rZSB0aGUgbWV0aG9kIHdpdGguXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc3VsdCBvZiB0aGUgaW52b2tlZCBtZXRob2QuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICdhJzogW3sgJ2InOiB7ICdjJzogWzEsIDIsIDMsIDRdIH0gfV0gfTtcbiAgICAgKlxuICAgICAqIF8uaW52b2tlKG9iamVjdCwgJ2FbMF0uYi5jLnNsaWNlJywgMSwgMyk7XG4gICAgICogLy8gPT4gWzIsIDNdXG4gICAgICovXG4gICAgdmFyIGludm9rZSA9IGJhc2VSZXN0KGJhc2VJbnZva2UpO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogTm9uLW9iamVjdCB2YWx1ZXMgYXJlIGNvZXJjZWQgdG8gb2JqZWN0cy4gU2VlIHRoZVxuICAgICAqIFtFUyBzcGVjXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3Qua2V5cylcbiAgICAgKiBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBGb28oKSB7XG4gICAgICogICB0aGlzLmEgPSAxO1xuICAgICAqICAgdGhpcy5iID0gMjtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICAgICAqXG4gICAgICogXy5rZXlzKG5ldyBGb28pO1xuICAgICAqIC8vID0+IFsnYScsICdiJ10gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAgICAgKlxuICAgICAqIF8ua2V5cygnaGknKTtcbiAgICAgKiAvLyA9PiBbJzAnLCAnMSddXG4gICAgICovXG4gICAgZnVuY3Rpb24ga2V5cyhvYmplY3QpIHtcbiAgICAgIHJldHVybiBpc0FycmF5TGlrZShvYmplY3QpID8gYXJyYXlMaWtlS2V5cyhvYmplY3QpIDogYmFzZUtleXMob2JqZWN0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIE5vbi1vYmplY3QgdmFsdWVzIGFyZSBjb2VyY2VkIHRvIG9iamVjdHMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIEZvbygpIHtcbiAgICAgKiAgIHRoaXMuYSA9IDE7XG4gICAgICogICB0aGlzLmIgPSAyO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gICAgICpcbiAgICAgKiBfLmtleXNJbihuZXcgRm9vKTtcbiAgICAgKiAvLyA9PiBbJ2EnLCAnYicsICdjJ10gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBrZXlzSW4ob2JqZWN0KSB7XG4gICAgICByZXR1cm4gaXNBcnJheUxpa2Uob2JqZWN0KSA/IGFycmF5TGlrZUtleXMob2JqZWN0LCB0cnVlKSA6IGJhc2VLZXlzSW4ob2JqZWN0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3Bwb3NpdGUgb2YgYF8ubWFwVmFsdWVzYDsgdGhpcyBtZXRob2QgY3JlYXRlcyBhbiBvYmplY3Qgd2l0aCB0aGVcbiAgICAgKiBzYW1lIHZhbHVlcyBhcyBgb2JqZWN0YCBhbmQga2V5cyBnZW5lcmF0ZWQgYnkgcnVubmluZyBlYWNoIG93biBlbnVtZXJhYmxlXG4gICAgICogc3RyaW5nIGtleWVkIHByb3BlcnR5IG9mIGBvYmplY3RgIHRocnUgYGl0ZXJhdGVlYC4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWRcbiAgICAgKiB3aXRoIHRocmVlIGFyZ3VtZW50czogKHZhbHVlLCBrZXksIG9iamVjdCkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy44LjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgbWFwcGVkIG9iamVjdC5cbiAgICAgKiBAc2VlIF8ubWFwVmFsdWVzXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ubWFwS2V5cyh7ICdhJzogMSwgJ2InOiAyIH0sIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICAgKiAgIHJldHVybiBrZXkgKyB2YWx1ZTtcbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiB7ICdhMSc6IDEsICdiMic6IDIgfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1hcEtleXMob2JqZWN0LCBpdGVyYXRlZSkge1xuICAgICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgICAgaXRlcmF0ZWUgPSBnZXRJdGVyYXRlZShpdGVyYXRlZSwgMyk7XG5cbiAgICAgIGJhc2VGb3JPd24ob2JqZWN0LCBmdW5jdGlvbih2YWx1ZSwga2V5LCBvYmplY3QpIHtcbiAgICAgICAgYmFzZUFzc2lnblZhbHVlKHJlc3VsdCwgaXRlcmF0ZWUodmFsdWUsIGtleSwgb2JqZWN0KSwgdmFsdWUpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gb2JqZWN0IHdpdGggdGhlIHNhbWUga2V5cyBhcyBgb2JqZWN0YCBhbmQgdmFsdWVzIGdlbmVyYXRlZFxuICAgICAqIGJ5IHJ1bm5pbmcgZWFjaCBvd24gZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydHkgb2YgYG9iamVjdGAgdGhydVxuICAgICAqIGBpdGVyYXRlZWAuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggdGhyZWUgYXJndW1lbnRzOlxuICAgICAqICh2YWx1ZSwga2V5LCBvYmplY3QpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDIuNC4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG1hcHBlZCBvYmplY3QuXG4gICAgICogQHNlZSBfLm1hcEtleXNcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0ge1xuICAgICAqICAgJ2ZyZWQnOiAgICB7ICd1c2VyJzogJ2ZyZWQnLCAgICAnYWdlJzogNDAgfSxcbiAgICAgKiAgICdwZWJibGVzJzogeyAndXNlcic6ICdwZWJibGVzJywgJ2FnZSc6IDEgfVxuICAgICAqIH07XG4gICAgICpcbiAgICAgKiBfLm1hcFZhbHVlcyh1c2VycywgZnVuY3Rpb24obykgeyByZXR1cm4gby5hZ2U7IH0pO1xuICAgICAqIC8vID0+IHsgJ2ZyZWQnOiA0MCwgJ3BlYmJsZXMnOiAxIH0gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8ubWFwVmFsdWVzKHVzZXJzLCAnYWdlJyk7XG4gICAgICogLy8gPT4geyAnZnJlZCc6IDQwLCAncGViYmxlcyc6IDEgfSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1hcFZhbHVlcyhvYmplY3QsIGl0ZXJhdGVlKSB7XG4gICAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgICBpdGVyYXRlZSA9IGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCAzKTtcblxuICAgICAgYmFzZUZvck93bihvYmplY3QsIGZ1bmN0aW9uKHZhbHVlLCBrZXksIG9iamVjdCkge1xuICAgICAgICBiYXNlQXNzaWduVmFsdWUocmVzdWx0LCBrZXksIGl0ZXJhdGVlKHZhbHVlLCBrZXksIG9iamVjdCkpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uYXNzaWduYCBleGNlcHQgdGhhdCBpdCByZWN1cnNpdmVseSBtZXJnZXMgb3duIGFuZFxuICAgICAqIGluaGVyaXRlZCBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0aWVzIG9mIHNvdXJjZSBvYmplY3RzIGludG8gdGhlXG4gICAgICogZGVzdGluYXRpb24gb2JqZWN0LiBTb3VyY2UgcHJvcGVydGllcyB0aGF0IHJlc29sdmUgdG8gYHVuZGVmaW5lZGAgYXJlXG4gICAgICogc2tpcHBlZCBpZiBhIGRlc3RpbmF0aW9uIHZhbHVlIGV4aXN0cy4gQXJyYXkgYW5kIHBsYWluIG9iamVjdCBwcm9wZXJ0aWVzXG4gICAgICogYXJlIG1lcmdlZCByZWN1cnNpdmVseS4gT3RoZXIgb2JqZWN0cyBhbmQgdmFsdWUgdHlwZXMgYXJlIG92ZXJyaWRkZW4gYnlcbiAgICAgKiBhc3NpZ25tZW50LiBTb3VyY2Ugb2JqZWN0cyBhcmUgYXBwbGllZCBmcm9tIGxlZnQgdG8gcmlnaHQuIFN1YnNlcXVlbnRcbiAgICAgKiBzb3VyY2VzIG92ZXJ3cml0ZSBwcm9wZXJ0eSBhc3NpZ25tZW50cyBvZiBwcmV2aW91cyBzb3VyY2VzLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC41LjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBbc291cmNlc10gVGhlIHNvdXJjZSBvYmplY3RzLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7XG4gICAgICogICAnYSc6IFt7ICdiJzogMiB9LCB7ICdkJzogNCB9XVxuICAgICAqIH07XG4gICAgICpcbiAgICAgKiB2YXIgb3RoZXIgPSB7XG4gICAgICogICAnYSc6IFt7ICdjJzogMyB9LCB7ICdlJzogNSB9XVxuICAgICAqIH07XG4gICAgICpcbiAgICAgKiBfLm1lcmdlKG9iamVjdCwgb3RoZXIpO1xuICAgICAqIC8vID0+IHsgJ2EnOiBbeyAnYic6IDIsICdjJzogMyB9LCB7ICdkJzogNCwgJ2UnOiA1IH1dIH1cbiAgICAgKi9cbiAgICB2YXIgbWVyZ2UgPSBjcmVhdGVBc3NpZ25lcihmdW5jdGlvbihvYmplY3QsIHNvdXJjZSwgc3JjSW5kZXgpIHtcbiAgICAgIGJhc2VNZXJnZShvYmplY3QsIHNvdXJjZSwgc3JjSW5kZXgpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5tZXJnZWAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgY3VzdG9taXplcmAgd2hpY2hcbiAgICAgKiBpcyBpbnZva2VkIHRvIHByb2R1Y2UgdGhlIG1lcmdlZCB2YWx1ZXMgb2YgdGhlIGRlc3RpbmF0aW9uIGFuZCBzb3VyY2VcbiAgICAgKiBwcm9wZXJ0aWVzLiBJZiBgY3VzdG9taXplcmAgcmV0dXJucyBgdW5kZWZpbmVkYCwgbWVyZ2luZyBpcyBoYW5kbGVkIGJ5IHRoZVxuICAgICAqIG1ldGhvZCBpbnN0ZWFkLiBUaGUgYGN1c3RvbWl6ZXJgIGlzIGludm9rZWQgd2l0aCBzaXggYXJndW1lbnRzOlxuICAgICAqIChvYmpWYWx1ZSwgc3JjVmFsdWUsIGtleSwgb2JqZWN0LCBzb3VyY2UsIHN0YWNrKS5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAgICAgKiBAcGFyYW0gey4uLk9iamVjdH0gc291cmNlcyBUaGUgc291cmNlIG9iamVjdHMuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGFzc2lnbmVkIHZhbHVlcy5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBjdXN0b21pemVyKG9ialZhbHVlLCBzcmNWYWx1ZSkge1xuICAgICAqICAgaWYgKF8uaXNBcnJheShvYmpWYWx1ZSkpIHtcbiAgICAgKiAgICAgcmV0dXJuIG9ialZhbHVlLmNvbmNhdChzcmNWYWx1ZSk7XG4gICAgICogICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiBbMV0sICdiJzogWzJdIH07XG4gICAgICogdmFyIG90aGVyID0geyAnYSc6IFszXSwgJ2InOiBbNF0gfTtcbiAgICAgKlxuICAgICAqIF8ubWVyZ2VXaXRoKG9iamVjdCwgb3RoZXIsIGN1c3RvbWl6ZXIpO1xuICAgICAqIC8vID0+IHsgJ2EnOiBbMSwgM10sICdiJzogWzIsIDRdIH1cbiAgICAgKi9cbiAgICB2YXIgbWVyZ2VXaXRoID0gY3JlYXRlQXNzaWduZXIoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2UsIHNyY0luZGV4LCBjdXN0b21pemVyKSB7XG4gICAgICBiYXNlTWVyZ2Uob2JqZWN0LCBzb3VyY2UsIHNyY0luZGV4LCBjdXN0b21pemVyKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcHBvc2l0ZSBvZiBgXy5waWNrYDsgdGhpcyBtZXRob2QgY3JlYXRlcyBhbiBvYmplY3QgY29tcG9zZWQgb2YgdGhlXG4gICAgICogb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0eSBwYXRocyBvZiBgb2JqZWN0YCB0aGF0IGFyZSBub3Qgb21pdHRlZC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBjb25zaWRlcmFibHkgc2xvd2VyIHRoYW4gYF8ucGlja2AuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgc291cmNlIG9iamVjdC5cbiAgICAgKiBAcGFyYW0gey4uLihzdHJpbmd8c3RyaW5nW10pfSBbcGF0aHNdIFRoZSBwcm9wZXJ0eSBwYXRocyB0byBvbWl0LlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICdhJzogMSwgJ2InOiAnMicsICdjJzogMyB9O1xuICAgICAqXG4gICAgICogXy5vbWl0KG9iamVjdCwgWydhJywgJ2MnXSk7XG4gICAgICogLy8gPT4geyAnYic6ICcyJyB9XG4gICAgICovXG4gICAgdmFyIG9taXQgPSBmbGF0UmVzdChmdW5jdGlvbihvYmplY3QsIHBhdGhzKSB7XG4gICAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgICBpZiAob2JqZWN0ID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICAgIHZhciBpc0RlZXAgPSBmYWxzZTtcbiAgICAgIHBhdGhzID0gYXJyYXlNYXAocGF0aHMsIGZ1bmN0aW9uKHBhdGgpIHtcbiAgICAgICAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG4gICAgICAgIGlzRGVlcCB8fCAoaXNEZWVwID0gcGF0aC5sZW5ndGggPiAxKTtcbiAgICAgICAgcmV0dXJuIHBhdGg7XG4gICAgICB9KTtcbiAgICAgIGNvcHlPYmplY3Qob2JqZWN0LCBnZXRBbGxLZXlzSW4ob2JqZWN0KSwgcmVzdWx0KTtcbiAgICAgIGlmIChpc0RlZXApIHtcbiAgICAgICAgcmVzdWx0ID0gYmFzZUNsb25lKHJlc3VsdCwgQ0xPTkVfREVFUF9GTEFHIHwgQ0xPTkVfRkxBVF9GTEFHIHwgQ0xPTkVfU1lNQk9MU19GTEFHLCBjdXN0b21PbWl0Q2xvbmUpO1xuICAgICAgfVxuICAgICAgdmFyIGxlbmd0aCA9IHBhdGhzLmxlbmd0aDtcbiAgICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgICBiYXNlVW5zZXQocmVzdWx0LCBwYXRoc1tsZW5ndGhdKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3Bwb3NpdGUgb2YgYF8ucGlja0J5YDsgdGhpcyBtZXRob2QgY3JlYXRlcyBhbiBvYmplY3QgY29tcG9zZWQgb2ZcbiAgICAgKiB0aGUgb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydGllcyBvZiBgb2JqZWN0YCB0aGF0XG4gICAgICogYHByZWRpY2F0ZWAgZG9lc24ndCByZXR1cm4gdHJ1dGh5IGZvci4gVGhlIHByZWRpY2F0ZSBpcyBpbnZva2VkIHdpdGggdHdvXG4gICAgICogYXJndW1lbnRzOiAodmFsdWUsIGtleSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgc291cmNlIG9iamVjdC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBwcm9wZXJ0eS5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEsICdiJzogJzInLCAnYyc6IDMgfTtcbiAgICAgKlxuICAgICAqIF8ub21pdEJ5KG9iamVjdCwgXy5pc051bWJlcik7XG4gICAgICogLy8gPT4geyAnYic6ICcyJyB9XG4gICAgICovXG4gICAgZnVuY3Rpb24gb21pdEJ5KG9iamVjdCwgcHJlZGljYXRlKSB7XG4gICAgICByZXR1cm4gcGlja0J5KG9iamVjdCwgbmVnYXRlKGdldEl0ZXJhdGVlKHByZWRpY2F0ZSkpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIG9iamVjdCBjb21wb3NlZCBvZiB0aGUgcGlja2VkIGBvYmplY3RgIHByb3BlcnRpZXMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgc291cmNlIG9iamVjdC5cbiAgICAgKiBAcGFyYW0gey4uLihzdHJpbmd8c3RyaW5nW10pfSBbcGF0aHNdIFRoZSBwcm9wZXJ0eSBwYXRocyB0byBwaWNrLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICdhJzogMSwgJ2InOiAnMicsICdjJzogMyB9O1xuICAgICAqXG4gICAgICogXy5waWNrKG9iamVjdCwgWydhJywgJ2MnXSk7XG4gICAgICogLy8gPT4geyAnYSc6IDEsICdjJzogMyB9XG4gICAgICovXG4gICAgdmFyIHBpY2sgPSBmbGF0UmVzdChmdW5jdGlvbihvYmplY3QsIHBhdGhzKSB7XG4gICAgICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB7fSA6IGJhc2VQaWNrKG9iamVjdCwgcGF0aHMpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBvYmplY3QgY29tcG9zZWQgb2YgdGhlIGBvYmplY3RgIHByb3BlcnRpZXMgYHByZWRpY2F0ZWAgcmV0dXJuc1xuICAgICAqIHRydXRoeSBmb3IuIFRoZSBwcmVkaWNhdGUgaXMgaW52b2tlZCB3aXRoIHR3byBhcmd1bWVudHM6ICh2YWx1ZSwga2V5KS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBzb3VyY2Ugb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIHByb3BlcnR5LlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICdhJzogMSwgJ2InOiAnMicsICdjJzogMyB9O1xuICAgICAqXG4gICAgICogXy5waWNrQnkob2JqZWN0LCBfLmlzTnVtYmVyKTtcbiAgICAgKiAvLyA9PiB7ICdhJzogMSwgJ2MnOiAzIH1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBwaWNrQnkob2JqZWN0LCBwcmVkaWNhdGUpIHtcbiAgICAgIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9XG4gICAgICB2YXIgcHJvcHMgPSBhcnJheU1hcChnZXRBbGxLZXlzSW4ob2JqZWN0KSwgZnVuY3Rpb24ocHJvcCkge1xuICAgICAgICByZXR1cm4gW3Byb3BdO1xuICAgICAgfSk7XG4gICAgICBwcmVkaWNhdGUgPSBnZXRJdGVyYXRlZShwcmVkaWNhdGUpO1xuICAgICAgcmV0dXJuIGJhc2VQaWNrQnkob2JqZWN0LCBwcm9wcywgZnVuY3Rpb24odmFsdWUsIHBhdGgpIHtcbiAgICAgICAgcmV0dXJuIHByZWRpY2F0ZSh2YWx1ZSwgcGF0aFswXSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmdldGAgZXhjZXB0IHRoYXQgaWYgdGhlIHJlc29sdmVkIHZhbHVlIGlzIGFcbiAgICAgKiBmdW5jdGlvbiBpdCdzIGludm9rZWQgd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgb2YgaXRzIHBhcmVudCBvYmplY3QgYW5kXG4gICAgICogaXRzIHJlc3VsdCBpcyByZXR1cm5lZC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIHJlc29sdmUuXG4gICAgICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlXSBUaGUgdmFsdWUgcmV0dXJuZWQgZm9yIGB1bmRlZmluZWRgIHJlc29sdmVkIHZhbHVlcy5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzb2x2ZWQgdmFsdWUuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICdhJzogW3sgJ2InOiB7ICdjMSc6IDMsICdjMic6IF8uY29uc3RhbnQoNCkgfSB9XSB9O1xuICAgICAqXG4gICAgICogXy5yZXN1bHQob2JqZWN0LCAnYVswXS5iLmMxJyk7XG4gICAgICogLy8gPT4gM1xuICAgICAqXG4gICAgICogXy5yZXN1bHQob2JqZWN0LCAnYVswXS5iLmMyJyk7XG4gICAgICogLy8gPT4gNFxuICAgICAqXG4gICAgICogXy5yZXN1bHQob2JqZWN0LCAnYVswXS5iLmMzJywgJ2RlZmF1bHQnKTtcbiAgICAgKiAvLyA9PiAnZGVmYXVsdCdcbiAgICAgKlxuICAgICAqIF8ucmVzdWx0KG9iamVjdCwgJ2FbMF0uYi5jMycsIF8uY29uc3RhbnQoJ2RlZmF1bHQnKSk7XG4gICAgICogLy8gPT4gJ2RlZmF1bHQnXG4gICAgICovXG4gICAgZnVuY3Rpb24gcmVzdWx0KG9iamVjdCwgcGF0aCwgZGVmYXVsdFZhbHVlKSB7XG4gICAgICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqZWN0KTtcblxuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgbGVuZ3RoID0gcGF0aC5sZW5ndGg7XG5cbiAgICAgIC8vIEVuc3VyZSB0aGUgbG9vcCBpcyBlbnRlcmVkIHdoZW4gcGF0aCBpcyBlbXB0eS5cbiAgICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICAgIGxlbmd0aCA9IDE7XG4gICAgICAgIG9iamVjdCA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogb2JqZWN0W3RvS2V5KHBhdGhbaW5kZXhdKV07XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaW5kZXggPSBsZW5ndGg7XG4gICAgICAgICAgdmFsdWUgPSBkZWZhdWx0VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgb2JqZWN0ID0gaXNGdW5jdGlvbih2YWx1ZSkgPyB2YWx1ZS5jYWxsKG9iamVjdCkgOiB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgdmFsdWUgYXQgYHBhdGhgIG9mIGBvYmplY3RgLiBJZiBhIHBvcnRpb24gb2YgYHBhdGhgIGRvZXNuJ3QgZXhpc3QsXG4gICAgICogaXQncyBjcmVhdGVkLiBBcnJheXMgYXJlIGNyZWF0ZWQgZm9yIG1pc3NpbmcgaW5kZXggcHJvcGVydGllcyB3aGlsZSBvYmplY3RzXG4gICAgICogYXJlIGNyZWF0ZWQgZm9yIGFsbCBvdGhlciBtaXNzaW5nIHByb3BlcnRpZXMuIFVzZSBgXy5zZXRXaXRoYCB0byBjdXN0b21pemVcbiAgICAgKiBgcGF0aGAgY3JlYXRpb24uXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjcuMFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBzZXQuXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICdhJzogW3sgJ2InOiB7ICdjJzogMyB9IH1dIH07XG4gICAgICpcbiAgICAgKiBfLnNldChvYmplY3QsICdhWzBdLmIuYycsIDQpO1xuICAgICAqIGNvbnNvbGUubG9nKG9iamVjdC5hWzBdLmIuYyk7XG4gICAgICogLy8gPT4gNFxuICAgICAqXG4gICAgICogXy5zZXQob2JqZWN0LCBbJ3gnLCAnMCcsICd5JywgJ3onXSwgNSk7XG4gICAgICogY29uc29sZS5sb2cob2JqZWN0LnhbMF0ueS56KTtcbiAgICAgKiAvLyA9PiA1XG4gICAgICovXG4gICAgZnVuY3Rpb24gc2V0KG9iamVjdCwgcGF0aCwgdmFsdWUpIHtcbiAgICAgIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IG9iamVjdCA6IGJhc2VTZXQob2JqZWN0LCBwYXRoLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5zZXRgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGN1c3RvbWl6ZXJgIHdoaWNoIGlzXG4gICAgICogaW52b2tlZCB0byBwcm9kdWNlIHRoZSBvYmplY3RzIG9mIGBwYXRoYC4gIElmIGBjdXN0b21pemVyYCByZXR1cm5zIGB1bmRlZmluZWRgXG4gICAgICogcGF0aCBjcmVhdGlvbiBpcyBoYW5kbGVkIGJ5IHRoZSBtZXRob2QgaW5zdGVhZC4gVGhlIGBjdXN0b21pemVyYCBpcyBpbnZva2VkXG4gICAgICogd2l0aCB0aHJlZSBhcmd1bWVudHM6IChuc1ZhbHVlLCBrZXksIG5zT2JqZWN0KS5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gICAgICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIHNldC5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgYXNzaWduZWQgdmFsdWVzLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7fTtcbiAgICAgKlxuICAgICAqIF8uc2V0V2l0aChvYmplY3QsICdbMF1bMV0nLCAnYScsIE9iamVjdCk7XG4gICAgICogLy8gPT4geyAnMCc6IHsgJzEnOiAnYScgfSB9XG4gICAgICovXG4gICAgZnVuY3Rpb24gc2V0V2l0aChvYmplY3QsIHBhdGgsIHZhbHVlLCBjdXN0b21pemVyKSB7XG4gICAgICBjdXN0b21pemVyID0gdHlwZW9mIGN1c3RvbWl6ZXIgPT0gJ2Z1bmN0aW9uJyA/IGN1c3RvbWl6ZXIgOiB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyBvYmplY3QgOiBiYXNlU2V0KG9iamVjdCwgcGF0aCwgdmFsdWUsIGN1c3RvbWl6ZXIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2Ygb3duIGVudW1lcmFibGUgc3RyaW5nIGtleWVkLXZhbHVlIHBhaXJzIGZvciBgb2JqZWN0YFxuICAgICAqIHdoaWNoIGNhbiBiZSBjb25zdW1lZCBieSBgXy5mcm9tUGFpcnNgLiBJZiBgb2JqZWN0YCBpcyBhIG1hcCBvciBzZXQsIGl0c1xuICAgICAqIGVudHJpZXMgYXJlIHJldHVybmVkLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGFsaWFzIGVudHJpZXNcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUga2V5LXZhbHVlIHBhaXJzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBGb28oKSB7XG4gICAgICogICB0aGlzLmEgPSAxO1xuICAgICAqICAgdGhpcy5iID0gMjtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICAgICAqXG4gICAgICogXy50b1BhaXJzKG5ldyBGb28pO1xuICAgICAqIC8vID0+IFtbJ2EnLCAxXSwgWydiJywgMl1dIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gICAgICovXG4gICAgdmFyIHRvUGFpcnMgPSBjcmVhdGVUb1BhaXJzKGtleXMpO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHN0cmluZyBrZXllZC12YWx1ZSBwYWlyc1xuICAgICAqIGZvciBgb2JqZWN0YCB3aGljaCBjYW4gYmUgY29uc3VtZWQgYnkgYF8uZnJvbVBhaXJzYC4gSWYgYG9iamVjdGAgaXMgYSBtYXBcbiAgICAgKiBvciBzZXQsIGl0cyBlbnRyaWVzIGFyZSByZXR1cm5lZC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBhbGlhcyBlbnRyaWVzSW5cbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUga2V5LXZhbHVlIHBhaXJzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBGb28oKSB7XG4gICAgICogICB0aGlzLmEgPSAxO1xuICAgICAqICAgdGhpcy5iID0gMjtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICAgICAqXG4gICAgICogXy50b1BhaXJzSW4obmV3IEZvbyk7XG4gICAgICogLy8gPT4gW1snYScsIDFdLCBbJ2InLCAyXSwgWydjJywgM11dIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gICAgICovXG4gICAgdmFyIHRvUGFpcnNJbiA9IGNyZWF0ZVRvUGFpcnMoa2V5c0luKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGFsdGVybmF0aXZlIHRvIGBfLnJlZHVjZWA7IHRoaXMgbWV0aG9kIHRyYW5zZm9ybXMgYG9iamVjdGAgdG8gYSBuZXdcbiAgICAgKiBgYWNjdW11bGF0b3JgIG9iamVjdCB3aGljaCBpcyB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgZWFjaCBvZiBpdHMgb3duXG4gICAgICogZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydGllcyB0aHJ1IGBpdGVyYXRlZWAsIHdpdGggZWFjaCBpbnZvY2F0aW9uXG4gICAgICogcG90ZW50aWFsbHkgbXV0YXRpbmcgdGhlIGBhY2N1bXVsYXRvcmAgb2JqZWN0LiBJZiBgYWNjdW11bGF0b3JgIGlzIG5vdFxuICAgICAqIHByb3ZpZGVkLCBhIG5ldyBvYmplY3Qgd2l0aCB0aGUgc2FtZSBgW1tQcm90b3R5cGVdXWAgd2lsbCBiZSB1c2VkLiBUaGVcbiAgICAgKiBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggZm91ciBhcmd1bWVudHM6IChhY2N1bXVsYXRvciwgdmFsdWUsIGtleSwgb2JqZWN0KS5cbiAgICAgKiBJdGVyYXRlZSBmdW5jdGlvbnMgbWF5IGV4aXQgaXRlcmF0aW9uIGVhcmx5IGJ5IGV4cGxpY2l0bHkgcmV0dXJuaW5nIGBmYWxzZWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMS4zLjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0geyp9IFthY2N1bXVsYXRvcl0gVGhlIGN1c3RvbSBhY2N1bXVsYXRvciB2YWx1ZS5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgYWNjdW11bGF0ZWQgdmFsdWUuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udHJhbnNmb3JtKFsyLCAzLCA0XSwgZnVuY3Rpb24ocmVzdWx0LCBuKSB7XG4gICAgICogICByZXN1bHQucHVzaChuICo9IG4pO1xuICAgICAqICAgcmV0dXJuIG4gJSAyID09IDA7XG4gICAgICogfSwgW10pO1xuICAgICAqIC8vID0+IFs0LCA5XVxuICAgICAqXG4gICAgICogXy50cmFuc2Zvcm0oeyAnYSc6IDEsICdiJzogMiwgJ2MnOiAxIH0sIGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkge1xuICAgICAqICAgKHJlc3VsdFt2YWx1ZV0gfHwgKHJlc3VsdFt2YWx1ZV0gPSBbXSkpLnB1c2goa2V5KTtcbiAgICAgKiB9LCB7fSk7XG4gICAgICogLy8gPT4geyAnMSc6IFsnYScsICdjJ10sICcyJzogWydiJ10gfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRyYW5zZm9ybShvYmplY3QsIGl0ZXJhdGVlLCBhY2N1bXVsYXRvcikge1xuICAgICAgdmFyIGlzQXJyID0gaXNBcnJheShvYmplY3QpLFxuICAgICAgICAgIGlzQXJyTGlrZSA9IGlzQXJyIHx8IGlzQnVmZmVyKG9iamVjdCkgfHwgaXNUeXBlZEFycmF5KG9iamVjdCk7XG5cbiAgICAgIGl0ZXJhdGVlID0gZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDQpO1xuICAgICAgaWYgKGFjY3VtdWxhdG9yID09IG51bGwpIHtcbiAgICAgICAgdmFyIEN0b3IgPSBvYmplY3QgJiYgb2JqZWN0LmNvbnN0cnVjdG9yO1xuICAgICAgICBpZiAoaXNBcnJMaWtlKSB7XG4gICAgICAgICAgYWNjdW11bGF0b3IgPSBpc0FyciA/IG5ldyBDdG9yIDogW107XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNPYmplY3Qob2JqZWN0KSkge1xuICAgICAgICAgIGFjY3VtdWxhdG9yID0gaXNGdW5jdGlvbihDdG9yKSA/IGJhc2VDcmVhdGUoZ2V0UHJvdG90eXBlKG9iamVjdCkpIDoge307XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgYWNjdW11bGF0b3IgPSB7fTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgKGlzQXJyTGlrZSA/IGFycmF5RWFjaCA6IGJhc2VGb3JPd24pKG9iamVjdCwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBvYmplY3QpIHtcbiAgICAgICAgcmV0dXJuIGl0ZXJhdGVlKGFjY3VtdWxhdG9yLCB2YWx1ZSwgaW5kZXgsIG9iamVjdCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBhY2N1bXVsYXRvcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIHRoZSBwcm9wZXJ0eSBhdCBgcGF0aGAgb2YgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byB1bnNldC5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHByb3BlcnR5IGlzIGRlbGV0ZWQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiBbeyAnYic6IHsgJ2MnOiA3IH0gfV0gfTtcbiAgICAgKiBfLnVuc2V0KG9iamVjdCwgJ2FbMF0uYi5jJyk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogY29uc29sZS5sb2cob2JqZWN0KTtcbiAgICAgKiAvLyA9PiB7ICdhJzogW3sgJ2InOiB7fSB9XSB9O1xuICAgICAqXG4gICAgICogXy51bnNldChvYmplY3QsIFsnYScsICcwJywgJ2InLCAnYyddKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBjb25zb2xlLmxvZyhvYmplY3QpO1xuICAgICAqIC8vID0+IHsgJ2EnOiBbeyAnYic6IHt9IH1dIH07XG4gICAgICovXG4gICAgZnVuY3Rpb24gdW5zZXQob2JqZWN0LCBwYXRoKSB7XG4gICAgICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB0cnVlIDogYmFzZVVuc2V0KG9iamVjdCwgcGF0aCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5zZXRgIGV4Y2VwdCB0aGF0IGFjY2VwdHMgYHVwZGF0ZXJgIHRvIHByb2R1Y2UgdGhlXG4gICAgICogdmFsdWUgdG8gc2V0LiBVc2UgYF8udXBkYXRlV2l0aGAgdG8gY3VzdG9taXplIGBwYXRoYCBjcmVhdGlvbi4gVGhlIGB1cGRhdGVyYFxuICAgICAqIGlzIGludm9rZWQgd2l0aCBvbmUgYXJndW1lbnQ6ICh2YWx1ZSkuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjYuMFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBzZXQuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gdXBkYXRlciBUaGUgZnVuY3Rpb24gdG8gcHJvZHVjZSB0aGUgdXBkYXRlZCB2YWx1ZS5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0geyAnYSc6IFt7ICdiJzogeyAnYyc6IDMgfSB9XSB9O1xuICAgICAqXG4gICAgICogXy51cGRhdGUob2JqZWN0LCAnYVswXS5iLmMnLCBmdW5jdGlvbihuKSB7IHJldHVybiBuICogbjsgfSk7XG4gICAgICogY29uc29sZS5sb2cob2JqZWN0LmFbMF0uYi5jKTtcbiAgICAgKiAvLyA9PiA5XG4gICAgICpcbiAgICAgKiBfLnVwZGF0ZShvYmplY3QsICd4WzBdLnkueicsIGZ1bmN0aW9uKG4pIHsgcmV0dXJuIG4gPyBuICsgMSA6IDA7IH0pO1xuICAgICAqIGNvbnNvbGUubG9nKG9iamVjdC54WzBdLnkueik7XG4gICAgICogLy8gPT4gMFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHVwZGF0ZShvYmplY3QsIHBhdGgsIHVwZGF0ZXIpIHtcbiAgICAgIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IG9iamVjdCA6IGJhc2VVcGRhdGUob2JqZWN0LCBwYXRoLCBjYXN0RnVuY3Rpb24odXBkYXRlcikpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8udXBkYXRlYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBjdXN0b21pemVyYCB3aGljaCBpc1xuICAgICAqIGludm9rZWQgdG8gcHJvZHVjZSB0aGUgb2JqZWN0cyBvZiBgcGF0aGAuICBJZiBgY3VzdG9taXplcmAgcmV0dXJucyBgdW5kZWZpbmVkYFxuICAgICAqIHBhdGggY3JlYXRpb24gaXMgaGFuZGxlZCBieSB0aGUgbWV0aG9kIGluc3RlYWQuIFRoZSBgY3VzdG9taXplcmAgaXMgaW52b2tlZFxuICAgICAqIHdpdGggdGhyZWUgYXJndW1lbnRzOiAobnNWYWx1ZSwga2V5LCBuc09iamVjdCkuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjYuMFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBzZXQuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gdXBkYXRlciBUaGUgZnVuY3Rpb24gdG8gcHJvZHVjZSB0aGUgdXBkYXRlZCB2YWx1ZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBhc3NpZ25lZCB2YWx1ZXMuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHt9O1xuICAgICAqXG4gICAgICogXy51cGRhdGVXaXRoKG9iamVjdCwgJ1swXVsxXScsIF8uY29uc3RhbnQoJ2EnKSwgT2JqZWN0KTtcbiAgICAgKiAvLyA9PiB7ICcwJzogeyAnMSc6ICdhJyB9IH1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB1cGRhdGVXaXRoKG9iamVjdCwgcGF0aCwgdXBkYXRlciwgY3VzdG9taXplcikge1xuICAgICAgY3VzdG9taXplciA9IHR5cGVvZiBjdXN0b21pemVyID09ICdmdW5jdGlvbicgPyBjdXN0b21pemVyIDogdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gb2JqZWN0IDogYmFzZVVwZGF0ZShvYmplY3QsIHBhdGgsIGNhc3RGdW5jdGlvbih1cGRhdGVyKSwgY3VzdG9taXplcik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnR5IHZhbHVlcyBvZiBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IHZhbHVlcy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gRm9vKCkge1xuICAgICAqICAgdGhpcy5hID0gMTtcbiAgICAgKiAgIHRoaXMuYiA9IDI7XG4gICAgICogfVxuICAgICAqXG4gICAgICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAgICAgKlxuICAgICAqIF8udmFsdWVzKG5ldyBGb28pO1xuICAgICAqIC8vID0+IFsxLCAyXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICAgICAqXG4gICAgICogXy52YWx1ZXMoJ2hpJyk7XG4gICAgICogLy8gPT4gWydoJywgJ2knXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHZhbHVlcyhvYmplY3QpIHtcbiAgICAgIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IFtdIDogYmFzZVZhbHVlcyhvYmplY3QsIGtleXMob2JqZWN0KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydHlcbiAgICAgKiB2YWx1ZXMgb2YgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogTm9uLW9iamVjdCB2YWx1ZXMgYXJlIGNvZXJjZWQgdG8gb2JqZWN0cy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSB2YWx1ZXMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIEZvbygpIHtcbiAgICAgKiAgIHRoaXMuYSA9IDE7XG4gICAgICogICB0aGlzLmIgPSAyO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gICAgICpcbiAgICAgKiBfLnZhbHVlc0luKG5ldyBGb28pO1xuICAgICAqIC8vID0+IFsxLCAyLCAzXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHZhbHVlc0luKG9iamVjdCkge1xuICAgICAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gW10gOiBiYXNlVmFsdWVzKG9iamVjdCwga2V5c0luKG9iamVjdCkpO1xuICAgIH1cblxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIC8qKlxuICAgICAqIENsYW1wcyBgbnVtYmVyYCB3aXRoaW4gdGhlIGluY2x1c2l2ZSBgbG93ZXJgIGFuZCBgdXBwZXJgIGJvdW5kcy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBOdW1iZXJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbnVtYmVyIFRoZSBudW1iZXIgdG8gY2xhbXAuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtsb3dlcl0gVGhlIGxvd2VyIGJvdW5kLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB1cHBlciBUaGUgdXBwZXIgYm91bmQuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgY2xhbXBlZCBudW1iZXIuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uY2xhbXAoLTEwLCAtNSwgNSk7XG4gICAgICogLy8gPT4gLTVcbiAgICAgKlxuICAgICAqIF8uY2xhbXAoMTAsIC01LCA1KTtcbiAgICAgKiAvLyA9PiA1XG4gICAgICovXG4gICAgZnVuY3Rpb24gY2xhbXAobnVtYmVyLCBsb3dlciwgdXBwZXIpIHtcbiAgICAgIGlmICh1cHBlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHVwcGVyID0gbG93ZXI7XG4gICAgICAgIGxvd2VyID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKHVwcGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdXBwZXIgPSB0b051bWJlcih1cHBlcik7XG4gICAgICAgIHVwcGVyID0gdXBwZXIgPT09IHVwcGVyID8gdXBwZXIgOiAwO1xuICAgICAgfVxuICAgICAgaWYgKGxvd2VyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbG93ZXIgPSB0b051bWJlcihsb3dlcik7XG4gICAgICAgIGxvd2VyID0gbG93ZXIgPT09IGxvd2VyID8gbG93ZXIgOiAwO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJhc2VDbGFtcCh0b051bWJlcihudW1iZXIpLCBsb3dlciwgdXBwZXIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgbmAgaXMgYmV0d2VlbiBgc3RhcnRgIGFuZCB1cCB0bywgYnV0IG5vdCBpbmNsdWRpbmcsIGBlbmRgLiBJZlxuICAgICAqIGBlbmRgIGlzIG5vdCBzcGVjaWZpZWQsIGl0J3Mgc2V0IHRvIGBzdGFydGAgd2l0aCBgc3RhcnRgIHRoZW4gc2V0IHRvIGAwYC5cbiAgICAgKiBJZiBgc3RhcnRgIGlzIGdyZWF0ZXIgdGhhbiBgZW5kYCB0aGUgcGFyYW1zIGFyZSBzd2FwcGVkIHRvIHN1cHBvcnRcbiAgICAgKiBuZWdhdGl2ZSByYW5nZXMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4zLjBcbiAgICAgKiBAY2F0ZWdvcnkgTnVtYmVyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG51bWJlciBUaGUgbnVtYmVyIHRvIGNoZWNrLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9MF0gVGhlIHN0YXJ0IG9mIHRoZSByYW5nZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZW5kIFRoZSBlbmQgb2YgdGhlIHJhbmdlLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgbnVtYmVyYCBpcyBpbiB0aGUgcmFuZ2UsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAc2VlIF8ucmFuZ2UsIF8ucmFuZ2VSaWdodFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmluUmFuZ2UoMywgMiwgNCk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pblJhbmdlKDQsIDgpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaW5SYW5nZSg0LCAyKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogXy5pblJhbmdlKDIsIDIpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLmluUmFuZ2UoMS4yLCAyKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmluUmFuZ2UoNS4yLCA0KTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogXy5pblJhbmdlKC0zLCAtMiwgLTYpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpblJhbmdlKG51bWJlciwgc3RhcnQsIGVuZCkge1xuICAgICAgc3RhcnQgPSB0b0Zpbml0ZShzdGFydCk7XG4gICAgICBpZiAoZW5kID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZW5kID0gc3RhcnQ7XG4gICAgICAgIHN0YXJ0ID0gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVuZCA9IHRvRmluaXRlKGVuZCk7XG4gICAgICB9XG4gICAgICBudW1iZXIgPSB0b051bWJlcihudW1iZXIpO1xuICAgICAgcmV0dXJuIGJhc2VJblJhbmdlKG51bWJlciwgc3RhcnQsIGVuZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUHJvZHVjZXMgYSByYW5kb20gbnVtYmVyIGJldHdlZW4gdGhlIGluY2x1c2l2ZSBgbG93ZXJgIGFuZCBgdXBwZXJgIGJvdW5kcy5cbiAgICAgKiBJZiBvbmx5IG9uZSBhcmd1bWVudCBpcyBwcm92aWRlZCBhIG51bWJlciBiZXR3ZWVuIGAwYCBhbmQgdGhlIGdpdmVuIG51bWJlclxuICAgICAqIGlzIHJldHVybmVkLiBJZiBgZmxvYXRpbmdgIGlzIGB0cnVlYCwgb3IgZWl0aGVyIGBsb3dlcmAgb3IgYHVwcGVyYCBhcmVcbiAgICAgKiBmbG9hdHMsIGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyIGlzIHJldHVybmVkIGluc3RlYWQgb2YgYW4gaW50ZWdlci5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBKYXZhU2NyaXB0IGZvbGxvd3MgdGhlIElFRUUtNzU0IHN0YW5kYXJkIGZvciByZXNvbHZpbmdcbiAgICAgKiBmbG9hdGluZy1wb2ludCB2YWx1ZXMgd2hpY2ggY2FuIHByb2R1Y2UgdW5leHBlY3RlZCByZXN1bHRzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuNy4wXG4gICAgICogQGNhdGVnb3J5IE51bWJlclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbG93ZXI9MF0gVGhlIGxvd2VyIGJvdW5kLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbdXBwZXI9MV0gVGhlIHVwcGVyIGJvdW5kLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zsb2F0aW5nXSBTcGVjaWZ5IHJldHVybmluZyBhIGZsb2F0aW5nLXBvaW50IG51bWJlci5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSByYW5kb20gbnVtYmVyLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnJhbmRvbSgwLCA1KTtcbiAgICAgKiAvLyA9PiBhbiBpbnRlZ2VyIGJldHdlZW4gMCBhbmQgNVxuICAgICAqXG4gICAgICogXy5yYW5kb20oNSk7XG4gICAgICogLy8gPT4gYWxzbyBhbiBpbnRlZ2VyIGJldHdlZW4gMCBhbmQgNVxuICAgICAqXG4gICAgICogXy5yYW5kb20oNSwgdHJ1ZSk7XG4gICAgICogLy8gPT4gYSBmbG9hdGluZy1wb2ludCBudW1iZXIgYmV0d2VlbiAwIGFuZCA1XG4gICAgICpcbiAgICAgKiBfLnJhbmRvbSgxLjIsIDUuMik7XG4gICAgICogLy8gPT4gYSBmbG9hdGluZy1wb2ludCBudW1iZXIgYmV0d2VlbiAxLjIgYW5kIDUuMlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJhbmRvbShsb3dlciwgdXBwZXIsIGZsb2F0aW5nKSB7XG4gICAgICBpZiAoZmxvYXRpbmcgJiYgdHlwZW9mIGZsb2F0aW5nICE9ICdib29sZWFuJyAmJiBpc0l0ZXJhdGVlQ2FsbChsb3dlciwgdXBwZXIsIGZsb2F0aW5nKSkge1xuICAgICAgICB1cHBlciA9IGZsb2F0aW5nID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKGZsb2F0aW5nID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB1cHBlciA9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICBmbG9hdGluZyA9IHVwcGVyO1xuICAgICAgICAgIHVwcGVyID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBsb3dlciA9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICBmbG9hdGluZyA9IGxvd2VyO1xuICAgICAgICAgIGxvd2VyID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAobG93ZXIgPT09IHVuZGVmaW5lZCAmJiB1cHBlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxvd2VyID0gMDtcbiAgICAgICAgdXBwZXIgPSAxO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGxvd2VyID0gdG9GaW5pdGUobG93ZXIpO1xuICAgICAgICBpZiAodXBwZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHVwcGVyID0gbG93ZXI7XG4gICAgICAgICAgbG93ZXIgPSAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHVwcGVyID0gdG9GaW5pdGUodXBwZXIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAobG93ZXIgPiB1cHBlcikge1xuICAgICAgICB2YXIgdGVtcCA9IGxvd2VyO1xuICAgICAgICBsb3dlciA9IHVwcGVyO1xuICAgICAgICB1cHBlciA9IHRlbXA7XG4gICAgICB9XG4gICAgICBpZiAoZmxvYXRpbmcgfHwgbG93ZXIgJSAxIHx8IHVwcGVyICUgMSkge1xuICAgICAgICB2YXIgcmFuZCA9IG5hdGl2ZVJhbmRvbSgpO1xuICAgICAgICByZXR1cm4gbmF0aXZlTWluKGxvd2VyICsgKHJhbmQgKiAodXBwZXIgLSBsb3dlciArIGZyZWVQYXJzZUZsb2F0KCcxZS0nICsgKChyYW5kICsgJycpLmxlbmd0aCAtIDEpKSkpLCB1cHBlcik7XG4gICAgICB9XG4gICAgICByZXR1cm4gYmFzZVJhbmRvbShsb3dlciwgdXBwZXIpO1xuICAgIH1cblxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGBzdHJpbmdgIHRvIFtjYW1lbCBjYXNlXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9DYW1lbENhc2UpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY2FtZWwgY2FzZWQgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmNhbWVsQ2FzZSgnRm9vIEJhcicpO1xuICAgICAqIC8vID0+ICdmb29CYXInXG4gICAgICpcbiAgICAgKiBfLmNhbWVsQ2FzZSgnLS1mb28tYmFyLS0nKTtcbiAgICAgKiAvLyA9PiAnZm9vQmFyJ1xuICAgICAqXG4gICAgICogXy5jYW1lbENhc2UoJ19fRk9PX0JBUl9fJyk7XG4gICAgICogLy8gPT4gJ2Zvb0JhcidcbiAgICAgKi9cbiAgICB2YXIgY2FtZWxDYXNlID0gY3JlYXRlQ29tcG91bmRlcihmdW5jdGlvbihyZXN1bHQsIHdvcmQsIGluZGV4KSB7XG4gICAgICB3b3JkID0gd29yZC50b0xvd2VyQ2FzZSgpO1xuICAgICAgcmV0dXJuIHJlc3VsdCArIChpbmRleCA/IGNhcGl0YWxpemUod29yZCkgOiB3b3JkKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgYHN0cmluZ2AgdG8gdXBwZXIgY2FzZSBhbmQgdGhlIHJlbWFpbmluZ1xuICAgICAqIHRvIGxvd2VyIGNhc2UuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gY2FwaXRhbGl6ZS5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjYXBpdGFsaXplZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uY2FwaXRhbGl6ZSgnRlJFRCcpO1xuICAgICAqIC8vID0+ICdGcmVkJ1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNhcGl0YWxpemUoc3RyaW5nKSB7XG4gICAgICByZXR1cm4gdXBwZXJGaXJzdCh0b1N0cmluZyhzdHJpbmcpLnRvTG93ZXJDYXNlKCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlYnVycnMgYHN0cmluZ2AgYnkgY29udmVydGluZ1xuICAgICAqIFtMYXRpbi0xIFN1cHBsZW1lbnRdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0xhdGluLTFfU3VwcGxlbWVudF8oVW5pY29kZV9ibG9jaykjQ2hhcmFjdGVyX3RhYmxlKVxuICAgICAqIGFuZCBbTGF0aW4gRXh0ZW5kZWQtQV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTGF0aW5fRXh0ZW5kZWQtQSlcbiAgICAgKiBsZXR0ZXJzIHRvIGJhc2ljIExhdGluIGxldHRlcnMgYW5kIHJlbW92aW5nXG4gICAgICogW2NvbWJpbmluZyBkaWFjcml0aWNhbCBtYXJrc10oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ29tYmluaW5nX0RpYWNyaXRpY2FsX01hcmtzKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBkZWJ1cnIuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgZGVidXJyZWQgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmRlYnVycignZMOpasOgIHZ1Jyk7XG4gICAgICogLy8gPT4gJ2RlamEgdnUnXG4gICAgICovXG4gICAgZnVuY3Rpb24gZGVidXJyKHN0cmluZykge1xuICAgICAgc3RyaW5nID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgICAgIHJldHVybiBzdHJpbmcgJiYgc3RyaW5nLnJlcGxhY2UocmVMYXRpbiwgZGVidXJyTGV0dGVyKS5yZXBsYWNlKHJlQ29tYm9NYXJrLCAnJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGBzdHJpbmdgIGVuZHMgd2l0aCB0aGUgZ2l2ZW4gdGFyZ2V0IHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbdGFyZ2V0XSBUaGUgc3RyaW5nIHRvIHNlYXJjaCBmb3IuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtwb3NpdGlvbj1zdHJpbmcubGVuZ3RoXSBUaGUgcG9zaXRpb24gdG8gc2VhcmNoIHVwIHRvLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgc3RyaW5nYCBlbmRzIHdpdGggYHRhcmdldGAsXG4gICAgICogIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5lbmRzV2l0aCgnYWJjJywgJ2MnKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmVuZHNXaXRoKCdhYmMnLCAnYicpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLmVuZHNXaXRoKCdhYmMnLCAnYicsIDIpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBlbmRzV2l0aChzdHJpbmcsIHRhcmdldCwgcG9zaXRpb24pIHtcbiAgICAgIHN0cmluZyA9IHRvU3RyaW5nKHN0cmluZyk7XG4gICAgICB0YXJnZXQgPSBiYXNlVG9TdHJpbmcodGFyZ2V0KTtcblxuICAgICAgdmFyIGxlbmd0aCA9IHN0cmluZy5sZW5ndGg7XG4gICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uID09PSB1bmRlZmluZWRcbiAgICAgICAgPyBsZW5ndGhcbiAgICAgICAgOiBiYXNlQ2xhbXAodG9JbnRlZ2VyKHBvc2l0aW9uKSwgMCwgbGVuZ3RoKTtcblxuICAgICAgdmFyIGVuZCA9IHBvc2l0aW9uO1xuICAgICAgcG9zaXRpb24gLT0gdGFyZ2V0Lmxlbmd0aDtcbiAgICAgIHJldHVybiBwb3NpdGlvbiA+PSAwICYmIHN0cmluZy5zbGljZShwb3NpdGlvbiwgZW5kKSA9PSB0YXJnZXQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgdGhlIGNoYXJhY3RlcnMgXCImXCIsIFwiPFwiLCBcIj5cIiwgJ1wiJywgYW5kIFwiJ1wiIGluIGBzdHJpbmdgIHRvIHRoZWlyXG4gICAgICogY29ycmVzcG9uZGluZyBIVE1MIGVudGl0aWVzLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIE5vIG90aGVyIGNoYXJhY3RlcnMgYXJlIGVzY2FwZWQuIFRvIGVzY2FwZSBhZGRpdGlvbmFsXG4gICAgICogY2hhcmFjdGVycyB1c2UgYSB0aGlyZC1wYXJ0eSBsaWJyYXJ5IGxpa2UgW19oZV9dKGh0dHBzOi8vbXRocy5iZS9oZSkuXG4gICAgICpcbiAgICAgKiBUaG91Z2ggdGhlIFwiPlwiIGNoYXJhY3RlciBpcyBlc2NhcGVkIGZvciBzeW1tZXRyeSwgY2hhcmFjdGVycyBsaWtlXG4gICAgICogXCI+XCIgYW5kIFwiL1wiIGRvbid0IG5lZWQgZXNjYXBpbmcgaW4gSFRNTCBhbmQgaGF2ZSBubyBzcGVjaWFsIG1lYW5pbmdcbiAgICAgKiB1bmxlc3MgdGhleSdyZSBwYXJ0IG9mIGEgdGFnIG9yIHVucXVvdGVkIGF0dHJpYnV0ZSB2YWx1ZS4gU2VlXG4gICAgICogW01hdGhpYXMgQnluZW5zJ3MgYXJ0aWNsZV0oaHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2FtYmlndW91cy1hbXBlcnNhbmRzKVxuICAgICAqICh1bmRlciBcInNlbWktcmVsYXRlZCBmdW4gZmFjdFwiKSBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAqXG4gICAgICogV2hlbiB3b3JraW5nIHdpdGggSFRNTCB5b3Ugc2hvdWxkIGFsd2F5c1xuICAgICAqIFtxdW90ZSBhdHRyaWJ1dGUgdmFsdWVzXShodHRwOi8vd29ua28uY29tL3Bvc3QvaHRtbC1lc2NhcGluZykgdG8gcmVkdWNlXG4gICAgICogWFNTIHZlY3RvcnMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gZXNjYXBlLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGVzY2FwZWQgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmVzY2FwZSgnZnJlZCwgYmFybmV5LCAmIHBlYmJsZXMnKTtcbiAgICAgKiAvLyA9PiAnZnJlZCwgYmFybmV5LCAmYW1wOyBwZWJibGVzJ1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGVzY2FwZShzdHJpbmcpIHtcbiAgICAgIHN0cmluZyA9IHRvU3RyaW5nKHN0cmluZyk7XG4gICAgICByZXR1cm4gKHN0cmluZyAmJiByZUhhc1VuZXNjYXBlZEh0bWwudGVzdChzdHJpbmcpKVxuICAgICAgICA/IHN0cmluZy5yZXBsYWNlKHJlVW5lc2NhcGVkSHRtbCwgZXNjYXBlSHRtbENoYXIpXG4gICAgICAgIDogc3RyaW5nO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVzY2FwZXMgdGhlIGBSZWdFeHBgIHNwZWNpYWwgY2hhcmFjdGVycyBcIl5cIiwgXCIkXCIsIFwiXFxcIiwgXCIuXCIsIFwiKlwiLCBcIitcIixcbiAgICAgKiBcIj9cIiwgXCIoXCIsIFwiKVwiLCBcIltcIiwgXCJdXCIsIFwie1wiLCBcIn1cIiwgYW5kIFwifFwiIGluIGBzdHJpbmdgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGVzY2FwZS5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBlc2NhcGVkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5lc2NhcGVSZWdFeHAoJ1tsb2Rhc2hdKGh0dHBzOi8vbG9kYXNoLmNvbS8pJyk7XG4gICAgICogLy8gPT4gJ1xcW2xvZGFzaFxcXVxcKGh0dHBzOi8vbG9kYXNoXFwuY29tL1xcKSdcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBlc2NhcGVSZWdFeHAoc3RyaW5nKSB7XG4gICAgICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICAgICAgcmV0dXJuIChzdHJpbmcgJiYgcmVIYXNSZWdFeHBDaGFyLnRlc3Qoc3RyaW5nKSlcbiAgICAgICAgPyBzdHJpbmcucmVwbGFjZShyZVJlZ0V4cENoYXIsICdcXFxcJCYnKVxuICAgICAgICA6IHN0cmluZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBgc3RyaW5nYCB0b1xuICAgICAqIFtrZWJhYiBjYXNlXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9MZXR0ZXJfY2FzZSNTcGVjaWFsX2Nhc2Vfc3R5bGVzKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGtlYmFiIGNhc2VkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5rZWJhYkNhc2UoJ0ZvbyBCYXInKTtcbiAgICAgKiAvLyA9PiAnZm9vLWJhcidcbiAgICAgKlxuICAgICAqIF8ua2ViYWJDYXNlKCdmb29CYXInKTtcbiAgICAgKiAvLyA9PiAnZm9vLWJhcidcbiAgICAgKlxuICAgICAqIF8ua2ViYWJDYXNlKCdfX0ZPT19CQVJfXycpO1xuICAgICAqIC8vID0+ICdmb28tYmFyJ1xuICAgICAqL1xuICAgIHZhciBrZWJhYkNhc2UgPSBjcmVhdGVDb21wb3VuZGVyKGZ1bmN0aW9uKHJlc3VsdCwgd29yZCwgaW5kZXgpIHtcbiAgICAgIHJldHVybiByZXN1bHQgKyAoaW5kZXggPyAnLScgOiAnJykgKyB3b3JkLnRvTG93ZXJDYXNlKCk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBgc3RyaW5nYCwgYXMgc3BhY2Ugc2VwYXJhdGVkIHdvcmRzLCB0byBsb3dlciBjYXNlLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgbG93ZXIgY2FzZWQgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmxvd2VyQ2FzZSgnLS1Gb28tQmFyLS0nKTtcbiAgICAgKiAvLyA9PiAnZm9vIGJhcidcbiAgICAgKlxuICAgICAqIF8ubG93ZXJDYXNlKCdmb29CYXInKTtcbiAgICAgKiAvLyA9PiAnZm9vIGJhcidcbiAgICAgKlxuICAgICAqIF8ubG93ZXJDYXNlKCdfX0ZPT19CQVJfXycpO1xuICAgICAqIC8vID0+ICdmb28gYmFyJ1xuICAgICAqL1xuICAgIHZhciBsb3dlckNhc2UgPSBjcmVhdGVDb21wb3VuZGVyKGZ1bmN0aW9uKHJlc3VsdCwgd29yZCwgaW5kZXgpIHtcbiAgICAgIHJldHVybiByZXN1bHQgKyAoaW5kZXggPyAnICcgOiAnJykgKyB3b3JkLnRvTG93ZXJDYXNlKCk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIGBzdHJpbmdgIHRvIGxvd2VyIGNhc2UuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmxvd2VyRmlyc3QoJ0ZyZWQnKTtcbiAgICAgKiAvLyA9PiAnZnJlZCdcbiAgICAgKlxuICAgICAqIF8ubG93ZXJGaXJzdCgnRlJFRCcpO1xuICAgICAqIC8vID0+ICdmUkVEJ1xuICAgICAqL1xuICAgIHZhciBsb3dlckZpcnN0ID0gY3JlYXRlQ2FzZUZpcnN0KCd0b0xvd2VyQ2FzZScpO1xuXG4gICAgLyoqXG4gICAgICogUGFkcyBgc3RyaW5nYCBvbiB0aGUgbGVmdCBhbmQgcmlnaHQgc2lkZXMgaWYgaXQncyBzaG9ydGVyIHRoYW4gYGxlbmd0aGAuXG4gICAgICogUGFkZGluZyBjaGFyYWN0ZXJzIGFyZSB0cnVuY2F0ZWQgaWYgdGhleSBjYW4ndCBiZSBldmVubHkgZGl2aWRlZCBieSBgbGVuZ3RoYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBwYWQuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGg9MF0gVGhlIHBhZGRpbmcgbGVuZ3RoLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbY2hhcnM9JyAnXSBUaGUgc3RyaW5nIHVzZWQgYXMgcGFkZGluZy5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBwYWRkZWQgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnBhZCgnYWJjJywgOCk7XG4gICAgICogLy8gPT4gJyAgYWJjICAgJ1xuICAgICAqXG4gICAgICogXy5wYWQoJ2FiYycsIDgsICdfLScpO1xuICAgICAqIC8vID0+ICdfLWFiY18tXydcbiAgICAgKlxuICAgICAqIF8ucGFkKCdhYmMnLCAzKTtcbiAgICAgKiAvLyA9PiAnYWJjJ1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHBhZChzdHJpbmcsIGxlbmd0aCwgY2hhcnMpIHtcbiAgICAgIHN0cmluZyA9IHRvU3RyaW5nKHN0cmluZyk7XG4gICAgICBsZW5ndGggPSB0b0ludGVnZXIobGVuZ3RoKTtcblxuICAgICAgdmFyIHN0ckxlbmd0aCA9IGxlbmd0aCA/IHN0cmluZ1NpemUoc3RyaW5nKSA6IDA7XG4gICAgICBpZiAoIWxlbmd0aCB8fCBzdHJMZW5ndGggPj0gbGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBzdHJpbmc7XG4gICAgICB9XG4gICAgICB2YXIgbWlkID0gKGxlbmd0aCAtIHN0ckxlbmd0aCkgLyAyO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgY3JlYXRlUGFkZGluZyhuYXRpdmVGbG9vcihtaWQpLCBjaGFycykgK1xuICAgICAgICBzdHJpbmcgK1xuICAgICAgICBjcmVhdGVQYWRkaW5nKG5hdGl2ZUNlaWwobWlkKSwgY2hhcnMpXG4gICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBhZHMgYHN0cmluZ2Agb24gdGhlIHJpZ2h0IHNpZGUgaWYgaXQncyBzaG9ydGVyIHRoYW4gYGxlbmd0aGAuIFBhZGRpbmdcbiAgICAgKiBjaGFyYWN0ZXJzIGFyZSB0cnVuY2F0ZWQgaWYgdGhleSBleGNlZWQgYGxlbmd0aGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gcGFkLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoPTBdIFRoZSBwYWRkaW5nIGxlbmd0aC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2NoYXJzPScgJ10gVGhlIHN0cmluZyB1c2VkIGFzIHBhZGRpbmcuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcGFkZGVkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5wYWRFbmQoJ2FiYycsIDYpO1xuICAgICAqIC8vID0+ICdhYmMgICAnXG4gICAgICpcbiAgICAgKiBfLnBhZEVuZCgnYWJjJywgNiwgJ18tJyk7XG4gICAgICogLy8gPT4gJ2FiY18tXydcbiAgICAgKlxuICAgICAqIF8ucGFkRW5kKCdhYmMnLCAzKTtcbiAgICAgKiAvLyA9PiAnYWJjJ1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHBhZEVuZChzdHJpbmcsIGxlbmd0aCwgY2hhcnMpIHtcbiAgICAgIHN0cmluZyA9IHRvU3RyaW5nKHN0cmluZyk7XG4gICAgICBsZW5ndGggPSB0b0ludGVnZXIobGVuZ3RoKTtcblxuICAgICAgdmFyIHN0ckxlbmd0aCA9IGxlbmd0aCA/IHN0cmluZ1NpemUoc3RyaW5nKSA6IDA7XG4gICAgICByZXR1cm4gKGxlbmd0aCAmJiBzdHJMZW5ndGggPCBsZW5ndGgpXG4gICAgICAgID8gKHN0cmluZyArIGNyZWF0ZVBhZGRpbmcobGVuZ3RoIC0gc3RyTGVuZ3RoLCBjaGFycykpXG4gICAgICAgIDogc3RyaW5nO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBhZHMgYHN0cmluZ2Agb24gdGhlIGxlZnQgc2lkZSBpZiBpdCdzIHNob3J0ZXIgdGhhbiBgbGVuZ3RoYC4gUGFkZGluZ1xuICAgICAqIGNoYXJhY3RlcnMgYXJlIHRydW5jYXRlZCBpZiB0aGV5IGV4Y2VlZCBgbGVuZ3RoYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBwYWQuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGg9MF0gVGhlIHBhZGRpbmcgbGVuZ3RoLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbY2hhcnM9JyAnXSBUaGUgc3RyaW5nIHVzZWQgYXMgcGFkZGluZy5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBwYWRkZWQgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnBhZFN0YXJ0KCdhYmMnLCA2KTtcbiAgICAgKiAvLyA9PiAnICAgYWJjJ1xuICAgICAqXG4gICAgICogXy5wYWRTdGFydCgnYWJjJywgNiwgJ18tJyk7XG4gICAgICogLy8gPT4gJ18tX2FiYydcbiAgICAgKlxuICAgICAqIF8ucGFkU3RhcnQoJ2FiYycsIDMpO1xuICAgICAqIC8vID0+ICdhYmMnXG4gICAgICovXG4gICAgZnVuY3Rpb24gcGFkU3RhcnQoc3RyaW5nLCBsZW5ndGgsIGNoYXJzKSB7XG4gICAgICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICAgICAgbGVuZ3RoID0gdG9JbnRlZ2VyKGxlbmd0aCk7XG5cbiAgICAgIHZhciBzdHJMZW5ndGggPSBsZW5ndGggPyBzdHJpbmdTaXplKHN0cmluZykgOiAwO1xuICAgICAgcmV0dXJuIChsZW5ndGggJiYgc3RyTGVuZ3RoIDwgbGVuZ3RoKVxuICAgICAgICA/IChjcmVhdGVQYWRkaW5nKGxlbmd0aCAtIHN0ckxlbmd0aCwgY2hhcnMpICsgc3RyaW5nKVxuICAgICAgICA6IHN0cmluZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBgc3RyaW5nYCB0byBhbiBpbnRlZ2VyIG9mIHRoZSBzcGVjaWZpZWQgcmFkaXguIElmIGByYWRpeGAgaXNcbiAgICAgKiBgdW5kZWZpbmVkYCBvciBgMGAsIGEgYHJhZGl4YCBvZiBgMTBgIGlzIHVzZWQgdW5sZXNzIGB2YWx1ZWAgaXMgYVxuICAgICAqIGhleGFkZWNpbWFsLCBpbiB3aGljaCBjYXNlIGEgYHJhZGl4YCBvZiBgMTZgIGlzIHVzZWQuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgYWxpZ25zIHdpdGggdGhlXG4gICAgICogW0VTNSBpbXBsZW1lbnRhdGlvbl0oaHR0cHM6Ly9lczUuZ2l0aHViLmlvLyN4MTUuMS4yLjIpIG9mIGBwYXJzZUludGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMS4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtyYWRpeD0xMF0gVGhlIHJhZGl4IHRvIGludGVycHJldCBgdmFsdWVgIGJ5LlxuICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgY29udmVydGVkIGludGVnZXIuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ucGFyc2VJbnQoJzA4Jyk7XG4gICAgICogLy8gPT4gOFxuICAgICAqXG4gICAgICogXy5tYXAoWyc2JywgJzA4JywgJzEwJ10sIF8ucGFyc2VJbnQpO1xuICAgICAqIC8vID0+IFs2LCA4LCAxMF1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBwYXJzZUludChzdHJpbmcsIHJhZGl4LCBndWFyZCkge1xuICAgICAgaWYgKGd1YXJkIHx8IHJhZGl4ID09IG51bGwpIHtcbiAgICAgICAgcmFkaXggPSAwO1xuICAgICAgfSBlbHNlIGlmIChyYWRpeCkge1xuICAgICAgICByYWRpeCA9ICtyYWRpeDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuYXRpdmVQYXJzZUludCh0b1N0cmluZyhzdHJpbmcpLnJlcGxhY2UocmVUcmltU3RhcnQsICcnKSwgcmFkaXggfHwgMCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVwZWF0cyB0aGUgZ2l2ZW4gc3RyaW5nIGBuYCB0aW1lcy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byByZXBlYXQuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtuPTFdIFRoZSBudW1iZXIgb2YgdGltZXMgdG8gcmVwZWF0IHRoZSBzdHJpbmcuXG4gICAgICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ubWFwYC5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSByZXBlYXRlZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ucmVwZWF0KCcqJywgMyk7XG4gICAgICogLy8gPT4gJyoqKidcbiAgICAgKlxuICAgICAqIF8ucmVwZWF0KCdhYmMnLCAyKTtcbiAgICAgKiAvLyA9PiAnYWJjYWJjJ1xuICAgICAqXG4gICAgICogXy5yZXBlYXQoJ2FiYycsIDApO1xuICAgICAqIC8vID0+ICcnXG4gICAgICovXG4gICAgZnVuY3Rpb24gcmVwZWF0KHN0cmluZywgbiwgZ3VhcmQpIHtcbiAgICAgIGlmICgoZ3VhcmQgPyBpc0l0ZXJhdGVlQ2FsbChzdHJpbmcsIG4sIGd1YXJkKSA6IG4gPT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgbiA9IDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuID0gdG9JbnRlZ2VyKG4pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJhc2VSZXBlYXQodG9TdHJpbmcoc3RyaW5nKSwgbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVwbGFjZXMgbWF0Y2hlcyBmb3IgYHBhdHRlcm5gIGluIGBzdHJpbmdgIHdpdGggYHJlcGxhY2VtZW50YC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBiYXNlZCBvblxuICAgICAqIFtgU3RyaW5nI3JlcGxhY2VgXShodHRwczovL21kbi5pby9TdHJpbmcvcmVwbGFjZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gbW9kaWZ5LlxuICAgICAqIEBwYXJhbSB7UmVnRXhwfHN0cmluZ30gcGF0dGVybiBUaGUgcGF0dGVybiB0byByZXBsYWNlLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb258c3RyaW5nfSByZXBsYWNlbWVudCBUaGUgbWF0Y2ggcmVwbGFjZW1lbnQuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgbW9kaWZpZWQgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnJlcGxhY2UoJ0hpIEZyZWQnLCAnRnJlZCcsICdCYXJuZXknKTtcbiAgICAgKiAvLyA9PiAnSGkgQmFybmV5J1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJlcGxhY2UoKSB7XG4gICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cyxcbiAgICAgICAgICBzdHJpbmcgPSB0b1N0cmluZyhhcmdzWzBdKTtcblxuICAgICAgcmV0dXJuIGFyZ3MubGVuZ3RoIDwgMyA/IHN0cmluZyA6IHN0cmluZy5yZXBsYWNlKGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGBzdHJpbmdgIHRvXG4gICAgICogW3NuYWtlIGNhc2VdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NuYWtlX2Nhc2UpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc25ha2UgY2FzZWQgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnNuYWtlQ2FzZSgnRm9vIEJhcicpO1xuICAgICAqIC8vID0+ICdmb29fYmFyJ1xuICAgICAqXG4gICAgICogXy5zbmFrZUNhc2UoJ2Zvb0JhcicpO1xuICAgICAqIC8vID0+ICdmb29fYmFyJ1xuICAgICAqXG4gICAgICogXy5zbmFrZUNhc2UoJy0tRk9PLUJBUi0tJyk7XG4gICAgICogLy8gPT4gJ2Zvb19iYXInXG4gICAgICovXG4gICAgdmFyIHNuYWtlQ2FzZSA9IGNyZWF0ZUNvbXBvdW5kZXIoZnVuY3Rpb24ocmVzdWx0LCB3b3JkLCBpbmRleCkge1xuICAgICAgcmV0dXJuIHJlc3VsdCArIChpbmRleCA/ICdfJyA6ICcnKSArIHdvcmQudG9Mb3dlckNhc2UoKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFNwbGl0cyBgc3RyaW5nYCBieSBgc2VwYXJhdG9yYC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBiYXNlZCBvblxuICAgICAqIFtgU3RyaW5nI3NwbGl0YF0oaHR0cHM6Ly9tZG4uaW8vU3RyaW5nL3NwbGl0KS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBzcGxpdC5cbiAgICAgKiBAcGFyYW0ge1JlZ0V4cHxzdHJpbmd9IHNlcGFyYXRvciBUaGUgc2VwYXJhdG9yIHBhdHRlcm4gdG8gc3BsaXQgYnkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtsaW1pdF0gVGhlIGxlbmd0aCB0byB0cnVuY2F0ZSByZXN1bHRzIHRvLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgc3RyaW5nIHNlZ21lbnRzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnNwbGl0KCdhLWItYycsICctJywgMik7XG4gICAgICogLy8gPT4gWydhJywgJ2InXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNwbGl0KHN0cmluZywgc2VwYXJhdG9yLCBsaW1pdCkge1xuICAgICAgaWYgKGxpbWl0ICYmIHR5cGVvZiBsaW1pdCAhPSAnbnVtYmVyJyAmJiBpc0l0ZXJhdGVlQ2FsbChzdHJpbmcsIHNlcGFyYXRvciwgbGltaXQpKSB7XG4gICAgICAgIHNlcGFyYXRvciA9IGxpbWl0ID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgbGltaXQgPSBsaW1pdCA9PT0gdW5kZWZpbmVkID8gTUFYX0FSUkFZX0xFTkdUSCA6IGxpbWl0ID4+PiAwO1xuICAgICAgaWYgKCFsaW1pdCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICAgICAgaWYgKHN0cmluZyAmJiAoXG4gICAgICAgICAgICB0eXBlb2Ygc2VwYXJhdG9yID09ICdzdHJpbmcnIHx8XG4gICAgICAgICAgICAoc2VwYXJhdG9yICE9IG51bGwgJiYgIWlzUmVnRXhwKHNlcGFyYXRvcikpXG4gICAgICAgICAgKSkge1xuICAgICAgICBzZXBhcmF0b3IgPSBiYXNlVG9TdHJpbmcoc2VwYXJhdG9yKTtcbiAgICAgICAgaWYgKCFzZXBhcmF0b3IgJiYgaGFzVW5pY29kZShzdHJpbmcpKSB7XG4gICAgICAgICAgcmV0dXJuIGNhc3RTbGljZShzdHJpbmdUb0FycmF5KHN0cmluZyksIDAsIGxpbWl0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHN0cmluZy5zcGxpdChzZXBhcmF0b3IsIGxpbWl0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBgc3RyaW5nYCB0b1xuICAgICAqIFtzdGFydCBjYXNlXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9MZXR0ZXJfY2FzZSNTdHlsaXN0aWNfb3Jfc3BlY2lhbGlzZWRfdXNhZ2UpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMS4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc3RhcnQgY2FzZWQgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnN0YXJ0Q2FzZSgnLS1mb28tYmFyLS0nKTtcbiAgICAgKiAvLyA9PiAnRm9vIEJhcidcbiAgICAgKlxuICAgICAqIF8uc3RhcnRDYXNlKCdmb29CYXInKTtcbiAgICAgKiAvLyA9PiAnRm9vIEJhcidcbiAgICAgKlxuICAgICAqIF8uc3RhcnRDYXNlKCdfX0ZPT19CQVJfXycpO1xuICAgICAqIC8vID0+ICdGT08gQkFSJ1xuICAgICAqL1xuICAgIHZhciBzdGFydENhc2UgPSBjcmVhdGVDb21wb3VuZGVyKGZ1bmN0aW9uKHJlc3VsdCwgd29yZCwgaW5kZXgpIHtcbiAgICAgIHJldHVybiByZXN1bHQgKyAoaW5kZXggPyAnICcgOiAnJykgKyB1cHBlckZpcnN0KHdvcmQpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGBzdHJpbmdgIHN0YXJ0cyB3aXRoIHRoZSBnaXZlbiB0YXJnZXQgc3RyaW5nLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFt0YXJnZXRdIFRoZSBzdHJpbmcgdG8gc2VhcmNoIGZvci5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3Bvc2l0aW9uPTBdIFRoZSBwb3NpdGlvbiB0byBzZWFyY2ggZnJvbS5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHN0cmluZ2Agc3RhcnRzIHdpdGggYHRhcmdldGAsXG4gICAgICogIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5zdGFydHNXaXRoKCdhYmMnLCAnYScpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uc3RhcnRzV2l0aCgnYWJjJywgJ2InKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogXy5zdGFydHNXaXRoKCdhYmMnLCAnYicsIDEpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzdGFydHNXaXRoKHN0cmluZywgdGFyZ2V0LCBwb3NpdGlvbikge1xuICAgICAgc3RyaW5nID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgICAgIHBvc2l0aW9uID0gcG9zaXRpb24gPT0gbnVsbFxuICAgICAgICA/IDBcbiAgICAgICAgOiBiYXNlQ2xhbXAodG9JbnRlZ2VyKHBvc2l0aW9uKSwgMCwgc3RyaW5nLmxlbmd0aCk7XG5cbiAgICAgIHRhcmdldCA9IGJhc2VUb1N0cmluZyh0YXJnZXQpO1xuICAgICAgcmV0dXJuIHN0cmluZy5zbGljZShwb3NpdGlvbiwgcG9zaXRpb24gKyB0YXJnZXQubGVuZ3RoKSA9PSB0YXJnZXQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGNvbXBpbGVkIHRlbXBsYXRlIGZ1bmN0aW9uIHRoYXQgY2FuIGludGVycG9sYXRlIGRhdGEgcHJvcGVydGllc1xuICAgICAqIGluIFwiaW50ZXJwb2xhdGVcIiBkZWxpbWl0ZXJzLCBIVE1MLWVzY2FwZSBpbnRlcnBvbGF0ZWQgZGF0YSBwcm9wZXJ0aWVzIGluXG4gICAgICogXCJlc2NhcGVcIiBkZWxpbWl0ZXJzLCBhbmQgZXhlY3V0ZSBKYXZhU2NyaXB0IGluIFwiZXZhbHVhdGVcIiBkZWxpbWl0ZXJzLiBEYXRhXG4gICAgICogcHJvcGVydGllcyBtYXkgYmUgYWNjZXNzZWQgYXMgZnJlZSB2YXJpYWJsZXMgaW4gdGhlIHRlbXBsYXRlLiBJZiBhIHNldHRpbmdcbiAgICAgKiBvYmplY3QgaXMgZ2l2ZW4sIGl0IHRha2VzIHByZWNlZGVuY2Ugb3ZlciBgXy50ZW1wbGF0ZVNldHRpbmdzYCB2YWx1ZXMuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogSW4gdGhlIGRldmVsb3BtZW50IGJ1aWxkIGBfLnRlbXBsYXRlYCB1dGlsaXplc1xuICAgICAqIFtzb3VyY2VVUkxzXShodHRwOi8vd3d3Lmh0bWw1cm9ja3MuY29tL2VuL3R1dG9yaWFscy9kZXZlbG9wZXJ0b29scy9zb3VyY2VtYXBzLyN0b2Mtc291cmNldXJsKVxuICAgICAqIGZvciBlYXNpZXIgZGVidWdnaW5nLlxuICAgICAqXG4gICAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gcHJlY29tcGlsaW5nIHRlbXBsYXRlcyBzZWVcbiAgICAgKiBbbG9kYXNoJ3MgY3VzdG9tIGJ1aWxkcyBkb2N1bWVudGF0aW9uXShodHRwczovL2xvZGFzaC5jb20vY3VzdG9tLWJ1aWxkcykuXG4gICAgICpcbiAgICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBDaHJvbWUgZXh0ZW5zaW9uIHNhbmRib3hlcyBzZWVcbiAgICAgKiBbQ2hyb21lJ3MgZXh0ZW5zaW9ucyBkb2N1bWVudGF0aW9uXShodHRwczovL2RldmVsb3Blci5jaHJvbWUuY29tL2V4dGVuc2lvbnMvc2FuZGJveGluZ0V2YWwpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgdGVtcGxhdGUgc3RyaW5nLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gVGhlIG9wdGlvbnMgb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7UmVnRXhwfSBbb3B0aW9ucy5lc2NhcGU9Xy50ZW1wbGF0ZVNldHRpbmdzLmVzY2FwZV1cbiAgICAgKiAgVGhlIEhUTUwgXCJlc2NhcGVcIiBkZWxpbWl0ZXIuXG4gICAgICogQHBhcmFtIHtSZWdFeHB9IFtvcHRpb25zLmV2YWx1YXRlPV8udGVtcGxhdGVTZXR0aW5ncy5ldmFsdWF0ZV1cbiAgICAgKiAgVGhlIFwiZXZhbHVhdGVcIiBkZWxpbWl0ZXIuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zLmltcG9ydHM9Xy50ZW1wbGF0ZVNldHRpbmdzLmltcG9ydHNdXG4gICAgICogIEFuIG9iamVjdCB0byBpbXBvcnQgaW50byB0aGUgdGVtcGxhdGUgYXMgZnJlZSB2YXJpYWJsZXMuXG4gICAgICogQHBhcmFtIHtSZWdFeHB9IFtvcHRpb25zLmludGVycG9sYXRlPV8udGVtcGxhdGVTZXR0aW5ncy5pbnRlcnBvbGF0ZV1cbiAgICAgKiAgVGhlIFwiaW50ZXJwb2xhdGVcIiBkZWxpbWl0ZXIuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnNvdXJjZVVSTD0nbG9kYXNoLnRlbXBsYXRlU291cmNlc1tuXSddXG4gICAgICogIFRoZSBzb3VyY2VVUkwgb2YgdGhlIGNvbXBpbGVkIHRlbXBsYXRlLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy52YXJpYWJsZT0nb2JqJ11cbiAgICAgKiAgVGhlIGRhdGEgb2JqZWN0IHZhcmlhYmxlIG5hbWUuXG4gICAgICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ubWFwYC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIGNvbXBpbGVkIHRlbXBsYXRlIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvLyBVc2UgdGhlIFwiaW50ZXJwb2xhdGVcIiBkZWxpbWl0ZXIgdG8gY3JlYXRlIGEgY29tcGlsZWQgdGVtcGxhdGUuXG4gICAgICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnaGVsbG8gPCU9IHVzZXIgJT4hJyk7XG4gICAgICogY29tcGlsZWQoeyAndXNlcic6ICdmcmVkJyB9KTtcbiAgICAgKiAvLyA9PiAnaGVsbG8gZnJlZCEnXG4gICAgICpcbiAgICAgKiAvLyBVc2UgdGhlIEhUTUwgXCJlc2NhcGVcIiBkZWxpbWl0ZXIgdG8gZXNjYXBlIGRhdGEgcHJvcGVydHkgdmFsdWVzLlxuICAgICAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJzxiPjwlLSB2YWx1ZSAlPjwvYj4nKTtcbiAgICAgKiBjb21waWxlZCh7ICd2YWx1ZSc6ICc8c2NyaXB0PicgfSk7XG4gICAgICogLy8gPT4gJzxiPiZsdDtzY3JpcHQmZ3Q7PC9iPidcbiAgICAgKlxuICAgICAqIC8vIFVzZSB0aGUgXCJldmFsdWF0ZVwiIGRlbGltaXRlciB0byBleGVjdXRlIEphdmFTY3JpcHQgYW5kIGdlbmVyYXRlIEhUTUwuXG4gICAgICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnPCUgXy5mb3JFYWNoKHVzZXJzLCBmdW5jdGlvbih1c2VyKSB7ICU+PGxpPjwlLSB1c2VyICU+PC9saT48JSB9KTsgJT4nKTtcbiAgICAgKiBjb21waWxlZCh7ICd1c2Vycyc6IFsnZnJlZCcsICdiYXJuZXknXSB9KTtcbiAgICAgKiAvLyA9PiAnPGxpPmZyZWQ8L2xpPjxsaT5iYXJuZXk8L2xpPidcbiAgICAgKlxuICAgICAqIC8vIFVzZSB0aGUgaW50ZXJuYWwgYHByaW50YCBmdW5jdGlvbiBpbiBcImV2YWx1YXRlXCIgZGVsaW1pdGVycy5cbiAgICAgKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCc8JSBwcmludChcImhlbGxvIFwiICsgdXNlcik7ICU+IScpO1xuICAgICAqIGNvbXBpbGVkKHsgJ3VzZXInOiAnYmFybmV5JyB9KTtcbiAgICAgKiAvLyA9PiAnaGVsbG8gYmFybmV5ISdcbiAgICAgKlxuICAgICAqIC8vIFVzZSB0aGUgRVMgdGVtcGxhdGUgbGl0ZXJhbCBkZWxpbWl0ZXIgYXMgYW4gXCJpbnRlcnBvbGF0ZVwiIGRlbGltaXRlci5cbiAgICAgKiAvLyBEaXNhYmxlIHN1cHBvcnQgYnkgcmVwbGFjaW5nIHRoZSBcImludGVycG9sYXRlXCIgZGVsaW1pdGVyLlxuICAgICAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJ2hlbGxvICR7IHVzZXIgfSEnKTtcbiAgICAgKiBjb21waWxlZCh7ICd1c2VyJzogJ3BlYmJsZXMnIH0pO1xuICAgICAqIC8vID0+ICdoZWxsbyBwZWJibGVzISdcbiAgICAgKlxuICAgICAqIC8vIFVzZSBiYWNrc2xhc2hlcyB0byB0cmVhdCBkZWxpbWl0ZXJzIGFzIHBsYWluIHRleHQuXG4gICAgICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnPCU9IFwiXFxcXDwlLSB2YWx1ZSAlXFxcXD5cIiAlPicpO1xuICAgICAqIGNvbXBpbGVkKHsgJ3ZhbHVlJzogJ2lnbm9yZWQnIH0pO1xuICAgICAqIC8vID0+ICc8JS0gdmFsdWUgJT4nXG4gICAgICpcbiAgICAgKiAvLyBVc2UgdGhlIGBpbXBvcnRzYCBvcHRpb24gdG8gaW1wb3J0IGBqUXVlcnlgIGFzIGBqcWAuXG4gICAgICogdmFyIHRleHQgPSAnPCUganEuZWFjaCh1c2VycywgZnVuY3Rpb24odXNlcikgeyAlPjxsaT48JS0gdXNlciAlPjwvbGk+PCUgfSk7ICU+JztcbiAgICAgKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKHRleHQsIHsgJ2ltcG9ydHMnOiB7ICdqcSc6IGpRdWVyeSB9IH0pO1xuICAgICAqIGNvbXBpbGVkKHsgJ3VzZXJzJzogWydmcmVkJywgJ2Jhcm5leSddIH0pO1xuICAgICAqIC8vID0+ICc8bGk+ZnJlZDwvbGk+PGxpPmJhcm5leTwvbGk+J1xuICAgICAqXG4gICAgICogLy8gVXNlIHRoZSBgc291cmNlVVJMYCBvcHRpb24gdG8gc3BlY2lmeSBhIGN1c3RvbSBzb3VyY2VVUkwgZm9yIHRoZSB0ZW1wbGF0ZS5cbiAgICAgKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCdoZWxsbyA8JT0gdXNlciAlPiEnLCB7ICdzb3VyY2VVUkwnOiAnL2Jhc2ljL2dyZWV0aW5nLmpzdCcgfSk7XG4gICAgICogY29tcGlsZWQoZGF0YSk7XG4gICAgICogLy8gPT4gRmluZCB0aGUgc291cmNlIG9mIFwiZ3JlZXRpbmcuanN0XCIgdW5kZXIgdGhlIFNvdXJjZXMgdGFiIG9yIFJlc291cmNlcyBwYW5lbCBvZiB0aGUgd2ViIGluc3BlY3Rvci5cbiAgICAgKlxuICAgICAqIC8vIFVzZSB0aGUgYHZhcmlhYmxlYCBvcHRpb24gdG8gZW5zdXJlIGEgd2l0aC1zdGF0ZW1lbnQgaXNuJ3QgdXNlZCBpbiB0aGUgY29tcGlsZWQgdGVtcGxhdGUuXG4gICAgICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnaGkgPCU9IGRhdGEudXNlciAlPiEnLCB7ICd2YXJpYWJsZSc6ICdkYXRhJyB9KTtcbiAgICAgKiBjb21waWxlZC5zb3VyY2U7XG4gICAgICogLy8gPT4gZnVuY3Rpb24oZGF0YSkge1xuICAgICAqIC8vICAgdmFyIF9fdCwgX19wID0gJyc7XG4gICAgICogLy8gICBfX3AgKz0gJ2hpICcgKyAoKF9fdCA9ICggZGF0YS51c2VyICkpID09IG51bGwgPyAnJyA6IF9fdCkgKyAnISc7XG4gICAgICogLy8gICByZXR1cm4gX19wO1xuICAgICAqIC8vIH1cbiAgICAgKlxuICAgICAqIC8vIFVzZSBjdXN0b20gdGVtcGxhdGUgZGVsaW1pdGVycy5cbiAgICAgKiBfLnRlbXBsYXRlU2V0dGluZ3MuaW50ZXJwb2xhdGUgPSAve3soW1xcc1xcU10rPyl9fS9nO1xuICAgICAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJ2hlbGxvIHt7IHVzZXIgfX0hJyk7XG4gICAgICogY29tcGlsZWQoeyAndXNlcic6ICdtdXN0YWNoZScgfSk7XG4gICAgICogLy8gPT4gJ2hlbGxvIG11c3RhY2hlISdcbiAgICAgKlxuICAgICAqIC8vIFVzZSB0aGUgYHNvdXJjZWAgcHJvcGVydHkgdG8gaW5saW5lIGNvbXBpbGVkIHRlbXBsYXRlcyBmb3IgbWVhbmluZ2Z1bFxuICAgICAqIC8vIGxpbmUgbnVtYmVycyBpbiBlcnJvciBtZXNzYWdlcyBhbmQgc3RhY2sgdHJhY2VzLlxuICAgICAqIGZzLndyaXRlRmlsZVN5bmMocGF0aC5qb2luKHByb2Nlc3MuY3dkKCksICdqc3QuanMnKSwgJ1xcXG4gICAgICogICB2YXIgSlNUID0ge1xcXG4gICAgICogICAgIFwibWFpblwiOiAnICsgXy50ZW1wbGF0ZShtYWluVGV4dCkuc291cmNlICsgJ1xcXG4gICAgICogICB9O1xcXG4gICAgICogJyk7XG4gICAgICovXG4gICAgZnVuY3Rpb24gdGVtcGxhdGUoc3RyaW5nLCBvcHRpb25zLCBndWFyZCkge1xuICAgICAgLy8gQmFzZWQgb24gSm9obiBSZXNpZydzIGB0bXBsYCBpbXBsZW1lbnRhdGlvblxuICAgICAgLy8gKGh0dHA6Ly9lam9obi5vcmcvYmxvZy9qYXZhc2NyaXB0LW1pY3JvLXRlbXBsYXRpbmcvKVxuICAgICAgLy8gYW5kIExhdXJhIERva3Rvcm92YSdzIGRvVC5qcyAoaHR0cHM6Ly9naXRodWIuY29tL29sYWRvL2RvVCkuXG4gICAgICB2YXIgc2V0dGluZ3MgPSBsb2Rhc2gudGVtcGxhdGVTZXR0aW5ncztcblxuICAgICAgaWYgKGd1YXJkICYmIGlzSXRlcmF0ZWVDYWxsKHN0cmluZywgb3B0aW9ucywgZ3VhcmQpKSB7XG4gICAgICAgIG9wdGlvbnMgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICAgICAgb3B0aW9ucyA9IGFzc2lnbkluV2l0aCh7fSwgb3B0aW9ucywgc2V0dGluZ3MsIGN1c3RvbURlZmF1bHRzQXNzaWduSW4pO1xuXG4gICAgICB2YXIgaW1wb3J0cyA9IGFzc2lnbkluV2l0aCh7fSwgb3B0aW9ucy5pbXBvcnRzLCBzZXR0aW5ncy5pbXBvcnRzLCBjdXN0b21EZWZhdWx0c0Fzc2lnbkluKSxcbiAgICAgICAgICBpbXBvcnRzS2V5cyA9IGtleXMoaW1wb3J0cyksXG4gICAgICAgICAgaW1wb3J0c1ZhbHVlcyA9IGJhc2VWYWx1ZXMoaW1wb3J0cywgaW1wb3J0c0tleXMpO1xuXG4gICAgICB2YXIgaXNFc2NhcGluZyxcbiAgICAgICAgICBpc0V2YWx1YXRpbmcsXG4gICAgICAgICAgaW5kZXggPSAwLFxuICAgICAgICAgIGludGVycG9sYXRlID0gb3B0aW9ucy5pbnRlcnBvbGF0ZSB8fCByZU5vTWF0Y2gsXG4gICAgICAgICAgc291cmNlID0gXCJfX3AgKz0gJ1wiO1xuXG4gICAgICAvLyBDb21waWxlIHRoZSByZWdleHAgdG8gbWF0Y2ggZWFjaCBkZWxpbWl0ZXIuXG4gICAgICB2YXIgcmVEZWxpbWl0ZXJzID0gUmVnRXhwKFxuICAgICAgICAob3B0aW9ucy5lc2NhcGUgfHwgcmVOb01hdGNoKS5zb3VyY2UgKyAnfCcgK1xuICAgICAgICBpbnRlcnBvbGF0ZS5zb3VyY2UgKyAnfCcgK1xuICAgICAgICAoaW50ZXJwb2xhdGUgPT09IHJlSW50ZXJwb2xhdGUgPyByZUVzVGVtcGxhdGUgOiByZU5vTWF0Y2gpLnNvdXJjZSArICd8JyArXG4gICAgICAgIChvcHRpb25zLmV2YWx1YXRlIHx8IHJlTm9NYXRjaCkuc291cmNlICsgJ3wkJ1xuICAgICAgLCAnZycpO1xuXG4gICAgICAvLyBVc2UgYSBzb3VyY2VVUkwgZm9yIGVhc2llciBkZWJ1Z2dpbmcuXG4gICAgICAvLyBUaGUgc291cmNlVVJMIGdldHMgaW5qZWN0ZWQgaW50byB0aGUgc291cmNlIHRoYXQncyBldmFsLWVkLCBzbyBiZSBjYXJlZnVsXG4gICAgICAvLyB0byBub3JtYWxpemUgYWxsIGtpbmRzIG9mIHdoaXRlc3BhY2UsIHNvIGUuZy4gbmV3bGluZXMgKGFuZCB1bmljb2RlIHZlcnNpb25zIG9mIGl0KSBjYW4ndCBzbmVhayBpblxuICAgICAgLy8gYW5kIGVzY2FwZSB0aGUgY29tbWVudCwgdGh1cyBpbmplY3RpbmcgY29kZSB0aGF0IGdldHMgZXZhbGVkLlxuICAgICAgdmFyIHNvdXJjZVVSTCA9ICcvLyMgc291cmNlVVJMPScgK1xuICAgICAgICAoaGFzT3duUHJvcGVydHkuY2FsbChvcHRpb25zLCAnc291cmNlVVJMJylcbiAgICAgICAgICA/IChvcHRpb25zLnNvdXJjZVVSTCArICcnKS5yZXBsYWNlKC9cXHMvZywgJyAnKVxuICAgICAgICAgIDogKCdsb2Rhc2gudGVtcGxhdGVTb3VyY2VzWycgKyAoKyt0ZW1wbGF0ZUNvdW50ZXIpICsgJ10nKVxuICAgICAgICApICsgJ1xcbic7XG5cbiAgICAgIHN0cmluZy5yZXBsYWNlKHJlRGVsaW1pdGVycywgZnVuY3Rpb24obWF0Y2gsIGVzY2FwZVZhbHVlLCBpbnRlcnBvbGF0ZVZhbHVlLCBlc1RlbXBsYXRlVmFsdWUsIGV2YWx1YXRlVmFsdWUsIG9mZnNldCkge1xuICAgICAgICBpbnRlcnBvbGF0ZVZhbHVlIHx8IChpbnRlcnBvbGF0ZVZhbHVlID0gZXNUZW1wbGF0ZVZhbHVlKTtcblxuICAgICAgICAvLyBFc2NhcGUgY2hhcmFjdGVycyB0aGF0IGNhbid0IGJlIGluY2x1ZGVkIGluIHN0cmluZyBsaXRlcmFscy5cbiAgICAgICAgc291cmNlICs9IHN0cmluZy5zbGljZShpbmRleCwgb2Zmc2V0KS5yZXBsYWNlKHJlVW5lc2NhcGVkU3RyaW5nLCBlc2NhcGVTdHJpbmdDaGFyKTtcblxuICAgICAgICAvLyBSZXBsYWNlIGRlbGltaXRlcnMgd2l0aCBzbmlwcGV0cy5cbiAgICAgICAgaWYgKGVzY2FwZVZhbHVlKSB7XG4gICAgICAgICAgaXNFc2NhcGluZyA9IHRydWU7XG4gICAgICAgICAgc291cmNlICs9IFwiJyArXFxuX19lKFwiICsgZXNjYXBlVmFsdWUgKyBcIikgK1xcbidcIjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZhbHVhdGVWYWx1ZSkge1xuICAgICAgICAgIGlzRXZhbHVhdGluZyA9IHRydWU7XG4gICAgICAgICAgc291cmNlICs9IFwiJztcXG5cIiArIGV2YWx1YXRlVmFsdWUgKyBcIjtcXG5fX3AgKz0gJ1wiO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbnRlcnBvbGF0ZVZhbHVlKSB7XG4gICAgICAgICAgc291cmNlICs9IFwiJyArXFxuKChfX3QgPSAoXCIgKyBpbnRlcnBvbGF0ZVZhbHVlICsgXCIpKSA9PSBudWxsID8gJycgOiBfX3QpICtcXG4nXCI7XG4gICAgICAgIH1cbiAgICAgICAgaW5kZXggPSBvZmZzZXQgKyBtYXRjaC5sZW5ndGg7XG5cbiAgICAgICAgLy8gVGhlIEpTIGVuZ2luZSBlbWJlZGRlZCBpbiBBZG9iZSBwcm9kdWN0cyBuZWVkcyBgbWF0Y2hgIHJldHVybmVkIGluXG4gICAgICAgIC8vIG9yZGVyIHRvIHByb2R1Y2UgdGhlIGNvcnJlY3QgYG9mZnNldGAgdmFsdWUuXG4gICAgICAgIHJldHVybiBtYXRjaDtcbiAgICAgIH0pO1xuXG4gICAgICBzb3VyY2UgKz0gXCInO1xcblwiO1xuXG4gICAgICAvLyBJZiBgdmFyaWFibGVgIGlzIG5vdCBzcGVjaWZpZWQgd3JhcCBhIHdpdGgtc3RhdGVtZW50IGFyb3VuZCB0aGUgZ2VuZXJhdGVkXG4gICAgICAvLyBjb2RlIHRvIGFkZCB0aGUgZGF0YSBvYmplY3QgdG8gdGhlIHRvcCBvZiB0aGUgc2NvcGUgY2hhaW4uXG4gICAgICB2YXIgdmFyaWFibGUgPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9wdGlvbnMsICd2YXJpYWJsZScpICYmIG9wdGlvbnMudmFyaWFibGU7XG4gICAgICBpZiAoIXZhcmlhYmxlKSB7XG4gICAgICAgIHNvdXJjZSA9ICd3aXRoIChvYmopIHtcXG4nICsgc291cmNlICsgJ1xcbn1cXG4nO1xuICAgICAgfVxuICAgICAgLy8gVGhyb3cgYW4gZXJyb3IgaWYgYSBmb3JiaWRkZW4gY2hhcmFjdGVyIHdhcyBmb3VuZCBpbiBgdmFyaWFibGVgLCB0byBwcmV2ZW50XG4gICAgICAvLyBwb3RlbnRpYWwgY29tbWFuZCBpbmplY3Rpb24gYXR0YWNrcy5cbiAgICAgIGVsc2UgaWYgKHJlRm9yYmlkZGVuSWRlbnRpZmllckNoYXJzLnRlc3QodmFyaWFibGUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihJTlZBTElEX1RFTVBMX1ZBUl9FUlJPUl9URVhUKTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2xlYW51cCBjb2RlIGJ5IHN0cmlwcGluZyBlbXB0eSBzdHJpbmdzLlxuICAgICAgc291cmNlID0gKGlzRXZhbHVhdGluZyA/IHNvdXJjZS5yZXBsYWNlKHJlRW1wdHlTdHJpbmdMZWFkaW5nLCAnJykgOiBzb3VyY2UpXG4gICAgICAgIC5yZXBsYWNlKHJlRW1wdHlTdHJpbmdNaWRkbGUsICckMScpXG4gICAgICAgIC5yZXBsYWNlKHJlRW1wdHlTdHJpbmdUcmFpbGluZywgJyQxOycpO1xuXG4gICAgICAvLyBGcmFtZSBjb2RlIGFzIHRoZSBmdW5jdGlvbiBib2R5LlxuICAgICAgc291cmNlID0gJ2Z1bmN0aW9uKCcgKyAodmFyaWFibGUgfHwgJ29iaicpICsgJykge1xcbicgK1xuICAgICAgICAodmFyaWFibGVcbiAgICAgICAgICA/ICcnXG4gICAgICAgICAgOiAnb2JqIHx8IChvYmogPSB7fSk7XFxuJ1xuICAgICAgICApICtcbiAgICAgICAgXCJ2YXIgX190LCBfX3AgPSAnJ1wiICtcbiAgICAgICAgKGlzRXNjYXBpbmdcbiAgICAgICAgICAgPyAnLCBfX2UgPSBfLmVzY2FwZSdcbiAgICAgICAgICAgOiAnJ1xuICAgICAgICApICtcbiAgICAgICAgKGlzRXZhbHVhdGluZ1xuICAgICAgICAgID8gJywgX19qID0gQXJyYXkucHJvdG90eXBlLmpvaW47XFxuJyArXG4gICAgICAgICAgICBcImZ1bmN0aW9uIHByaW50KCkgeyBfX3AgKz0gX19qLmNhbGwoYXJndW1lbnRzLCAnJykgfVxcblwiXG4gICAgICAgICAgOiAnO1xcbidcbiAgICAgICAgKSArXG4gICAgICAgIHNvdXJjZSArXG4gICAgICAgICdyZXR1cm4gX19wXFxufSc7XG5cbiAgICAgIHZhciByZXN1bHQgPSBhdHRlbXB0KGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gRnVuY3Rpb24oaW1wb3J0c0tleXMsIHNvdXJjZVVSTCArICdyZXR1cm4gJyArIHNvdXJjZSlcbiAgICAgICAgICAuYXBwbHkodW5kZWZpbmVkLCBpbXBvcnRzVmFsdWVzKTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBQcm92aWRlIHRoZSBjb21waWxlZCBmdW5jdGlvbidzIHNvdXJjZSBieSBpdHMgYHRvU3RyaW5nYCBtZXRob2Qgb3JcbiAgICAgIC8vIHRoZSBgc291cmNlYCBwcm9wZXJ0eSBhcyBhIGNvbnZlbmllbmNlIGZvciBpbmxpbmluZyBjb21waWxlZCB0ZW1wbGF0ZXMuXG4gICAgICByZXN1bHQuc291cmNlID0gc291cmNlO1xuICAgICAgaWYgKGlzRXJyb3IocmVzdWx0KSkge1xuICAgICAgICB0aHJvdyByZXN1bHQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGBzdHJpbmdgLCBhcyBhIHdob2xlLCB0byBsb3dlciBjYXNlIGp1c3QgbGlrZVxuICAgICAqIFtTdHJpbmcjdG9Mb3dlckNhc2VdKGh0dHBzOi8vbWRuLmlvL3RvTG93ZXJDYXNlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGxvd2VyIGNhc2VkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy50b0xvd2VyKCctLUZvby1CYXItLScpO1xuICAgICAqIC8vID0+ICctLWZvby1iYXItLSdcbiAgICAgKlxuICAgICAqIF8udG9Mb3dlcignZm9vQmFyJyk7XG4gICAgICogLy8gPT4gJ2Zvb2JhcidcbiAgICAgKlxuICAgICAqIF8udG9Mb3dlcignX19GT09fQkFSX18nKTtcbiAgICAgKiAvLyA9PiAnX19mb29fYmFyX18nXG4gICAgICovXG4gICAgZnVuY3Rpb24gdG9Mb3dlcih2YWx1ZSkge1xuICAgICAgcmV0dXJuIHRvU3RyaW5nKHZhbHVlKS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGBzdHJpbmdgLCBhcyBhIHdob2xlLCB0byB1cHBlciBjYXNlIGp1c3QgbGlrZVxuICAgICAqIFtTdHJpbmcjdG9VcHBlckNhc2VdKGh0dHBzOi8vbWRuLmlvL3RvVXBwZXJDYXNlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHVwcGVyIGNhc2VkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy50b1VwcGVyKCctLWZvby1iYXItLScpO1xuICAgICAqIC8vID0+ICctLUZPTy1CQVItLSdcbiAgICAgKlxuICAgICAqIF8udG9VcHBlcignZm9vQmFyJyk7XG4gICAgICogLy8gPT4gJ0ZPT0JBUidcbiAgICAgKlxuICAgICAqIF8udG9VcHBlcignX19mb29fYmFyX18nKTtcbiAgICAgKiAvLyA9PiAnX19GT09fQkFSX18nXG4gICAgICovXG4gICAgZnVuY3Rpb24gdG9VcHBlcih2YWx1ZSkge1xuICAgICAgcmV0dXJuIHRvU3RyaW5nKHZhbHVlKS50b1VwcGVyQ2FzZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZSBvciBzcGVjaWZpZWQgY2hhcmFjdGVycyBmcm9tIGBzdHJpbmdgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIHRyaW0uXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtjaGFycz13aGl0ZXNwYWNlXSBUaGUgY2hhcmFjdGVycyB0byB0cmltLlxuICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgdHJpbW1lZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udHJpbSgnICBhYmMgICcpO1xuICAgICAqIC8vID0+ICdhYmMnXG4gICAgICpcbiAgICAgKiBfLnRyaW0oJy1fLWFiYy1fLScsICdfLScpO1xuICAgICAqIC8vID0+ICdhYmMnXG4gICAgICpcbiAgICAgKiBfLm1hcChbJyAgZm9vICAnLCAnICBiYXIgICddLCBfLnRyaW0pO1xuICAgICAqIC8vID0+IFsnZm9vJywgJ2JhciddXG4gICAgICovXG4gICAgZnVuY3Rpb24gdHJpbShzdHJpbmcsIGNoYXJzLCBndWFyZCkge1xuICAgICAgc3RyaW5nID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgICAgIGlmIChzdHJpbmcgJiYgKGd1YXJkIHx8IGNoYXJzID09PSB1bmRlZmluZWQpKSB7XG4gICAgICAgIHJldHVybiBiYXNlVHJpbShzdHJpbmcpO1xuICAgICAgfVxuICAgICAgaWYgKCFzdHJpbmcgfHwgIShjaGFycyA9IGJhc2VUb1N0cmluZyhjaGFycykpKSB7XG4gICAgICAgIHJldHVybiBzdHJpbmc7XG4gICAgICB9XG4gICAgICB2YXIgc3RyU3ltYm9scyA9IHN0cmluZ1RvQXJyYXkoc3RyaW5nKSxcbiAgICAgICAgICBjaHJTeW1ib2xzID0gc3RyaW5nVG9BcnJheShjaGFycyksXG4gICAgICAgICAgc3RhcnQgPSBjaGFyc1N0YXJ0SW5kZXgoc3RyU3ltYm9scywgY2hyU3ltYm9scyksXG4gICAgICAgICAgZW5kID0gY2hhcnNFbmRJbmRleChzdHJTeW1ib2xzLCBjaHJTeW1ib2xzKSArIDE7XG5cbiAgICAgIHJldHVybiBjYXN0U2xpY2Uoc3RyU3ltYm9scywgc3RhcnQsIGVuZCkuam9pbignJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyB0cmFpbGluZyB3aGl0ZXNwYWNlIG9yIHNwZWNpZmllZCBjaGFyYWN0ZXJzIGZyb20gYHN0cmluZ2AuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gdHJpbS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2NoYXJzPXdoaXRlc3BhY2VdIFRoZSBjaGFyYWN0ZXJzIHRvIHRyaW0uXG4gICAgICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ubWFwYC5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSB0cmltbWVkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy50cmltRW5kKCcgIGFiYyAgJyk7XG4gICAgICogLy8gPT4gJyAgYWJjJ1xuICAgICAqXG4gICAgICogXy50cmltRW5kKCctXy1hYmMtXy0nLCAnXy0nKTtcbiAgICAgKiAvLyA9PiAnLV8tYWJjJ1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRyaW1FbmQoc3RyaW5nLCBjaGFycywgZ3VhcmQpIHtcbiAgICAgIHN0cmluZyA9IHRvU3RyaW5nKHN0cmluZyk7XG4gICAgICBpZiAoc3RyaW5nICYmIChndWFyZCB8fCBjaGFycyA9PT0gdW5kZWZpbmVkKSkge1xuICAgICAgICByZXR1cm4gc3RyaW5nLnNsaWNlKDAsIHRyaW1tZWRFbmRJbmRleChzdHJpbmcpICsgMSk7XG4gICAgICB9XG4gICAgICBpZiAoIXN0cmluZyB8fCAhKGNoYXJzID0gYmFzZVRvU3RyaW5nKGNoYXJzKSkpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICAgIH1cbiAgICAgIHZhciBzdHJTeW1ib2xzID0gc3RyaW5nVG9BcnJheShzdHJpbmcpLFxuICAgICAgICAgIGVuZCA9IGNoYXJzRW5kSW5kZXgoc3RyU3ltYm9scywgc3RyaW5nVG9BcnJheShjaGFycykpICsgMTtcblxuICAgICAgcmV0dXJuIGNhc3RTbGljZShzdHJTeW1ib2xzLCAwLCBlbmQpLmpvaW4oJycpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgbGVhZGluZyB3aGl0ZXNwYWNlIG9yIHNwZWNpZmllZCBjaGFyYWN0ZXJzIGZyb20gYHN0cmluZ2AuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gdHJpbS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2NoYXJzPXdoaXRlc3BhY2VdIFRoZSBjaGFyYWN0ZXJzIHRvIHRyaW0uXG4gICAgICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ubWFwYC5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSB0cmltbWVkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy50cmltU3RhcnQoJyAgYWJjICAnKTtcbiAgICAgKiAvLyA9PiAnYWJjICAnXG4gICAgICpcbiAgICAgKiBfLnRyaW1TdGFydCgnLV8tYWJjLV8tJywgJ18tJyk7XG4gICAgICogLy8gPT4gJ2FiYy1fLSdcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0cmltU3RhcnQoc3RyaW5nLCBjaGFycywgZ3VhcmQpIHtcbiAgICAgIHN0cmluZyA9IHRvU3RyaW5nKHN0cmluZyk7XG4gICAgICBpZiAoc3RyaW5nICYmIChndWFyZCB8fCBjaGFycyA9PT0gdW5kZWZpbmVkKSkge1xuICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UocmVUcmltU3RhcnQsICcnKTtcbiAgICAgIH1cbiAgICAgIGlmICghc3RyaW5nIHx8ICEoY2hhcnMgPSBiYXNlVG9TdHJpbmcoY2hhcnMpKSkge1xuICAgICAgICByZXR1cm4gc3RyaW5nO1xuICAgICAgfVxuICAgICAgdmFyIHN0clN5bWJvbHMgPSBzdHJpbmdUb0FycmF5KHN0cmluZyksXG4gICAgICAgICAgc3RhcnQgPSBjaGFyc1N0YXJ0SW5kZXgoc3RyU3ltYm9scywgc3RyaW5nVG9BcnJheShjaGFycykpO1xuXG4gICAgICByZXR1cm4gY2FzdFNsaWNlKHN0clN5bWJvbHMsIHN0YXJ0KS5qb2luKCcnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcnVuY2F0ZXMgYHN0cmluZ2AgaWYgaXQncyBsb25nZXIgdGhhbiB0aGUgZ2l2ZW4gbWF4aW11bSBzdHJpbmcgbGVuZ3RoLlxuICAgICAqIFRoZSBsYXN0IGNoYXJhY3RlcnMgb2YgdGhlIHRydW5jYXRlZCBzdHJpbmcgYXJlIHJlcGxhY2VkIHdpdGggdGhlIG9taXNzaW9uXG4gICAgICogc3RyaW5nIHdoaWNoIGRlZmF1bHRzIHRvIFwiLi4uXCIuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gdHJ1bmNhdGUuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBUaGUgb3B0aW9ucyBvYmplY3QuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmxlbmd0aD0zMF0gVGhlIG1heGltdW0gc3RyaW5nIGxlbmd0aC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMub21pc3Npb249Jy4uLiddIFRoZSBzdHJpbmcgdG8gaW5kaWNhdGUgdGV4dCBpcyBvbWl0dGVkLlxuICAgICAqIEBwYXJhbSB7UmVnRXhwfHN0cmluZ30gW29wdGlvbnMuc2VwYXJhdG9yXSBUaGUgc2VwYXJhdG9yIHBhdHRlcm4gdG8gdHJ1bmNhdGUgdG8uXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgdHJ1bmNhdGVkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy50cnVuY2F0ZSgnaGktZGlkZGx5LWhvIHRoZXJlLCBuZWlnaGJvcmlubycpO1xuICAgICAqIC8vID0+ICdoaS1kaWRkbHktaG8gdGhlcmUsIG5laWdoYm8uLi4nXG4gICAgICpcbiAgICAgKiBfLnRydW5jYXRlKCdoaS1kaWRkbHktaG8gdGhlcmUsIG5laWdoYm9yaW5vJywge1xuICAgICAqICAgJ2xlbmd0aCc6IDI0LFxuICAgICAqICAgJ3NlcGFyYXRvcic6ICcgJ1xuICAgICAqIH0pO1xuICAgICAqIC8vID0+ICdoaS1kaWRkbHktaG8gdGhlcmUsLi4uJ1xuICAgICAqXG4gICAgICogXy50cnVuY2F0ZSgnaGktZGlkZGx5LWhvIHRoZXJlLCBuZWlnaGJvcmlubycsIHtcbiAgICAgKiAgICdsZW5ndGgnOiAyNCxcbiAgICAgKiAgICdzZXBhcmF0b3InOiAvLD8gKy9cbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiAnaGktZGlkZGx5LWhvIHRoZXJlLi4uJ1xuICAgICAqXG4gICAgICogXy50cnVuY2F0ZSgnaGktZGlkZGx5LWhvIHRoZXJlLCBuZWlnaGJvcmlubycsIHtcbiAgICAgKiAgICdvbWlzc2lvbic6ICcgWy4uLl0nXG4gICAgICogfSk7XG4gICAgICogLy8gPT4gJ2hpLWRpZGRseS1obyB0aGVyZSwgbmVpZyBbLi4uXSdcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0cnVuY2F0ZShzdHJpbmcsIG9wdGlvbnMpIHtcbiAgICAgIHZhciBsZW5ndGggPSBERUZBVUxUX1RSVU5DX0xFTkdUSCxcbiAgICAgICAgICBvbWlzc2lvbiA9IERFRkFVTFRfVFJVTkNfT01JU1NJT047XG5cbiAgICAgIGlmIChpc09iamVjdChvcHRpb25zKSkge1xuICAgICAgICB2YXIgc2VwYXJhdG9yID0gJ3NlcGFyYXRvcicgaW4gb3B0aW9ucyA/IG9wdGlvbnMuc2VwYXJhdG9yIDogc2VwYXJhdG9yO1xuICAgICAgICBsZW5ndGggPSAnbGVuZ3RoJyBpbiBvcHRpb25zID8gdG9JbnRlZ2VyKG9wdGlvbnMubGVuZ3RoKSA6IGxlbmd0aDtcbiAgICAgICAgb21pc3Npb24gPSAnb21pc3Npb24nIGluIG9wdGlvbnMgPyBiYXNlVG9TdHJpbmcob3B0aW9ucy5vbWlzc2lvbikgOiBvbWlzc2lvbjtcbiAgICAgIH1cbiAgICAgIHN0cmluZyA9IHRvU3RyaW5nKHN0cmluZyk7XG5cbiAgICAgIHZhciBzdHJMZW5ndGggPSBzdHJpbmcubGVuZ3RoO1xuICAgICAgaWYgKGhhc1VuaWNvZGUoc3RyaW5nKSkge1xuICAgICAgICB2YXIgc3RyU3ltYm9scyA9IHN0cmluZ1RvQXJyYXkoc3RyaW5nKTtcbiAgICAgICAgc3RyTGVuZ3RoID0gc3RyU3ltYm9scy5sZW5ndGg7XG4gICAgICB9XG4gICAgICBpZiAobGVuZ3RoID49IHN0ckxlbmd0aCkge1xuICAgICAgICByZXR1cm4gc3RyaW5nO1xuICAgICAgfVxuICAgICAgdmFyIGVuZCA9IGxlbmd0aCAtIHN0cmluZ1NpemUob21pc3Npb24pO1xuICAgICAgaWYgKGVuZCA8IDEpIHtcbiAgICAgICAgcmV0dXJuIG9taXNzaW9uO1xuICAgICAgfVxuICAgICAgdmFyIHJlc3VsdCA9IHN0clN5bWJvbHNcbiAgICAgICAgPyBjYXN0U2xpY2Uoc3RyU3ltYm9scywgMCwgZW5kKS5qb2luKCcnKVxuICAgICAgICA6IHN0cmluZy5zbGljZSgwLCBlbmQpO1xuXG4gICAgICBpZiAoc2VwYXJhdG9yID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdCArIG9taXNzaW9uO1xuICAgICAgfVxuICAgICAgaWYgKHN0clN5bWJvbHMpIHtcbiAgICAgICAgZW5kICs9IChyZXN1bHQubGVuZ3RoIC0gZW5kKTtcbiAgICAgIH1cbiAgICAgIGlmIChpc1JlZ0V4cChzZXBhcmF0b3IpKSB7XG4gICAgICAgIGlmIChzdHJpbmcuc2xpY2UoZW5kKS5zZWFyY2goc2VwYXJhdG9yKSkge1xuICAgICAgICAgIHZhciBtYXRjaCxcbiAgICAgICAgICAgICAgc3Vic3RyaW5nID0gcmVzdWx0O1xuXG4gICAgICAgICAgaWYgKCFzZXBhcmF0b3IuZ2xvYmFsKSB7XG4gICAgICAgICAgICBzZXBhcmF0b3IgPSBSZWdFeHAoc2VwYXJhdG9yLnNvdXJjZSwgdG9TdHJpbmcocmVGbGFncy5leGVjKHNlcGFyYXRvcikpICsgJ2cnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc2VwYXJhdG9yLmxhc3RJbmRleCA9IDA7XG4gICAgICAgICAgd2hpbGUgKChtYXRjaCA9IHNlcGFyYXRvci5leGVjKHN1YnN0cmluZykpKSB7XG4gICAgICAgICAgICB2YXIgbmV3RW5kID0gbWF0Y2guaW5kZXg7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5zbGljZSgwLCBuZXdFbmQgPT09IHVuZGVmaW5lZCA/IGVuZCA6IG5ld0VuZCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoc3RyaW5nLmluZGV4T2YoYmFzZVRvU3RyaW5nKHNlcGFyYXRvciksIGVuZCkgIT0gZW5kKSB7XG4gICAgICAgIHZhciBpbmRleCA9IHJlc3VsdC5sYXN0SW5kZXhPZihzZXBhcmF0b3IpO1xuICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5zbGljZSgwLCBpbmRleCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQgKyBvbWlzc2lvbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW52ZXJzZSBvZiBgXy5lc2NhcGVgOyB0aGlzIG1ldGhvZCBjb252ZXJ0cyB0aGUgSFRNTCBlbnRpdGllc1xuICAgICAqIGAmYW1wO2AsIGAmbHQ7YCwgYCZndDtgLCBgJnF1b3Q7YCwgYW5kIGAmIzM5O2AgaW4gYHN0cmluZ2AgdG9cbiAgICAgKiB0aGVpciBjb3JyZXNwb25kaW5nIGNoYXJhY3RlcnMuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogTm8gb3RoZXIgSFRNTCBlbnRpdGllcyBhcmUgdW5lc2NhcGVkLiBUbyB1bmVzY2FwZSBhZGRpdGlvbmFsXG4gICAgICogSFRNTCBlbnRpdGllcyB1c2UgYSB0aGlyZC1wYXJ0eSBsaWJyYXJ5IGxpa2UgW19oZV9dKGh0dHBzOi8vbXRocy5iZS9oZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC42LjBcbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gdW5lc2NhcGUuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgdW5lc2NhcGVkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy51bmVzY2FwZSgnZnJlZCwgYmFybmV5LCAmYW1wOyBwZWJibGVzJyk7XG4gICAgICogLy8gPT4gJ2ZyZWQsIGJhcm5leSwgJiBwZWJibGVzJ1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHVuZXNjYXBlKHN0cmluZykge1xuICAgICAgc3RyaW5nID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgICAgIHJldHVybiAoc3RyaW5nICYmIHJlSGFzRXNjYXBlZEh0bWwudGVzdChzdHJpbmcpKVxuICAgICAgICA/IHN0cmluZy5yZXBsYWNlKHJlRXNjYXBlZEh0bWwsIHVuZXNjYXBlSHRtbENoYXIpXG4gICAgICAgIDogc3RyaW5nO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGBzdHJpbmdgLCBhcyBzcGFjZSBzZXBhcmF0ZWQgd29yZHMsIHRvIHVwcGVyIGNhc2UuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSB1cHBlciBjYXNlZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udXBwZXJDYXNlKCctLWZvby1iYXInKTtcbiAgICAgKiAvLyA9PiAnRk9PIEJBUidcbiAgICAgKlxuICAgICAqIF8udXBwZXJDYXNlKCdmb29CYXInKTtcbiAgICAgKiAvLyA9PiAnRk9PIEJBUidcbiAgICAgKlxuICAgICAqIF8udXBwZXJDYXNlKCdfX2Zvb19iYXJfXycpO1xuICAgICAqIC8vID0+ICdGT08gQkFSJ1xuICAgICAqL1xuICAgIHZhciB1cHBlckNhc2UgPSBjcmVhdGVDb21wb3VuZGVyKGZ1bmN0aW9uKHJlc3VsdCwgd29yZCwgaW5kZXgpIHtcbiAgICAgIHJldHVybiByZXN1bHQgKyAoaW5kZXggPyAnICcgOiAnJykgKyB3b3JkLnRvVXBwZXJDYXNlKCk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIGBzdHJpbmdgIHRvIHVwcGVyIGNhc2UuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnVwcGVyRmlyc3QoJ2ZyZWQnKTtcbiAgICAgKiAvLyA9PiAnRnJlZCdcbiAgICAgKlxuICAgICAqIF8udXBwZXJGaXJzdCgnRlJFRCcpO1xuICAgICAqIC8vID0+ICdGUkVEJ1xuICAgICAqL1xuICAgIHZhciB1cHBlckZpcnN0ID0gY3JlYXRlQ2FzZUZpcnN0KCd0b1VwcGVyQ2FzZScpO1xuXG4gICAgLyoqXG4gICAgICogU3BsaXRzIGBzdHJpbmdgIGludG8gYW4gYXJyYXkgb2YgaXRzIHdvcmRzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtSZWdFeHB8c3RyaW5nfSBbcGF0dGVybl0gVGhlIHBhdHRlcm4gdG8gbWF0Y2ggd29yZHMuXG4gICAgICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ubWFwYC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHdvcmRzIG9mIGBzdHJpbmdgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLndvcmRzKCdmcmVkLCBiYXJuZXksICYgcGViYmxlcycpO1xuICAgICAqIC8vID0+IFsnZnJlZCcsICdiYXJuZXknLCAncGViYmxlcyddXG4gICAgICpcbiAgICAgKiBfLndvcmRzKCdmcmVkLCBiYXJuZXksICYgcGViYmxlcycsIC9bXiwgXSsvZyk7XG4gICAgICogLy8gPT4gWydmcmVkJywgJ2Jhcm5leScsICcmJywgJ3BlYmJsZXMnXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHdvcmRzKHN0cmluZywgcGF0dGVybiwgZ3VhcmQpIHtcbiAgICAgIHN0cmluZyA9IHRvU3RyaW5nKHN0cmluZyk7XG4gICAgICBwYXR0ZXJuID0gZ3VhcmQgPyB1bmRlZmluZWQgOiBwYXR0ZXJuO1xuXG4gICAgICBpZiAocGF0dGVybiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBoYXNVbmljb2RlV29yZChzdHJpbmcpID8gdW5pY29kZVdvcmRzKHN0cmluZykgOiBhc2NpaVdvcmRzKHN0cmluZyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3RyaW5nLm1hdGNoKHBhdHRlcm4pIHx8IFtdO1xuICAgIH1cblxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIC8qKlxuICAgICAqIEF0dGVtcHRzIHRvIGludm9rZSBgZnVuY2AsIHJldHVybmluZyBlaXRoZXIgdGhlIHJlc3VsdCBvciB0aGUgY2F1Z2h0IGVycm9yXG4gICAgICogb2JqZWN0LiBBbnkgYWRkaXRpb25hbCBhcmd1bWVudHMgYXJlIHByb3ZpZGVkIHRvIGBmdW5jYCB3aGVuIGl0J3MgaW52b2tlZC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXR0ZW1wdC5cbiAgICAgKiBAcGFyYW0gey4uLip9IFthcmdzXSBUaGUgYXJndW1lbnRzIHRvIGludm9rZSBgZnVuY2Agd2l0aC5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgYGZ1bmNgIHJlc3VsdCBvciBlcnJvciBvYmplY3QuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIC8vIEF2b2lkIHRocm93aW5nIGVycm9ycyBmb3IgaW52YWxpZCBzZWxlY3RvcnMuXG4gICAgICogdmFyIGVsZW1lbnRzID0gXy5hdHRlbXB0KGZ1bmN0aW9uKHNlbGVjdG9yKSB7XG4gICAgICogICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7XG4gICAgICogfSwgJz5fPicpO1xuICAgICAqXG4gICAgICogaWYgKF8uaXNFcnJvcihlbGVtZW50cykpIHtcbiAgICAgKiAgIGVsZW1lbnRzID0gW107XG4gICAgICogfVxuICAgICAqL1xuICAgIHZhciBhdHRlbXB0ID0gYmFzZVJlc3QoZnVuY3Rpb24oZnVuYywgYXJncykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGFwcGx5KGZ1bmMsIHVuZGVmaW5lZCwgYXJncyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBpc0Vycm9yKGUpID8gZSA6IG5ldyBFcnJvcihlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIEJpbmRzIG1ldGhvZHMgb2YgYW4gb2JqZWN0IHRvIHRoZSBvYmplY3QgaXRzZWxmLCBvdmVyd3JpdGluZyB0aGUgZXhpc3RpbmdcbiAgICAgKiBtZXRob2QuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgZG9lc24ndCBzZXQgdGhlIFwibGVuZ3RoXCIgcHJvcGVydHkgb2YgYm91bmQgZnVuY3Rpb25zLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gYmluZCBhbmQgYXNzaWduIHRoZSBib3VuZCBtZXRob2RzIHRvLlxuICAgICAqIEBwYXJhbSB7Li4uKHN0cmluZ3xzdHJpbmdbXSl9IG1ldGhvZE5hbWVzIFRoZSBvYmplY3QgbWV0aG9kIG5hbWVzIHRvIGJpbmQuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHZpZXcgPSB7XG4gICAgICogICAnbGFiZWwnOiAnZG9jcycsXG4gICAgICogICAnY2xpY2snOiBmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coJ2NsaWNrZWQgJyArIHRoaXMubGFiZWwpO1xuICAgICAqICAgfVxuICAgICAqIH07XG4gICAgICpcbiAgICAgKiBfLmJpbmRBbGwodmlldywgWydjbGljayddKTtcbiAgICAgKiBqUXVlcnkoZWxlbWVudCkub24oJ2NsaWNrJywgdmlldy5jbGljayk7XG4gICAgICogLy8gPT4gTG9ncyAnY2xpY2tlZCBkb2NzJyB3aGVuIGNsaWNrZWQuXG4gICAgICovXG4gICAgdmFyIGJpbmRBbGwgPSBmbGF0UmVzdChmdW5jdGlvbihvYmplY3QsIG1ldGhvZE5hbWVzKSB7XG4gICAgICBhcnJheUVhY2gobWV0aG9kTmFtZXMsIGZ1bmN0aW9uKGtleSkge1xuICAgICAgICBrZXkgPSB0b0tleShrZXkpO1xuICAgICAgICBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIGJpbmQob2JqZWN0W2tleV0sIG9iamVjdCkpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gb2JqZWN0O1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaXRlcmF0ZXMgb3ZlciBgcGFpcnNgIGFuZCBpbnZva2VzIHRoZSBjb3JyZXNwb25kaW5nXG4gICAgICogZnVuY3Rpb24gb2YgdGhlIGZpcnN0IHByZWRpY2F0ZSB0byByZXR1cm4gdHJ1dGh5LiBUaGUgcHJlZGljYXRlLWZ1bmN0aW9uXG4gICAgICogcGFpcnMgYXJlIGludm9rZWQgd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgYW5kIGFyZ3VtZW50cyBvZiB0aGUgY3JlYXRlZFxuICAgICAqIGZ1bmN0aW9uLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBwYWlycyBUaGUgcHJlZGljYXRlLWZ1bmN0aW9uIHBhaXJzLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNvbXBvc2l0ZSBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGZ1bmMgPSBfLmNvbmQoW1xuICAgICAqICAgW18ubWF0Y2hlcyh7ICdhJzogMSB9KSwgICAgICAgICAgIF8uY29uc3RhbnQoJ21hdGNoZXMgQScpXSxcbiAgICAgKiAgIFtfLmNvbmZvcm1zKHsgJ2InOiBfLmlzTnVtYmVyIH0pLCBfLmNvbnN0YW50KCdtYXRjaGVzIEInKV0sXG4gICAgICogICBbXy5zdHViVHJ1ZSwgICAgICAgICAgICAgICAgICAgICAgXy5jb25zdGFudCgnbm8gbWF0Y2gnKV1cbiAgICAgKiBdKTtcbiAgICAgKlxuICAgICAqIGZ1bmMoeyAnYSc6IDEsICdiJzogMiB9KTtcbiAgICAgKiAvLyA9PiAnbWF0Y2hlcyBBJ1xuICAgICAqXG4gICAgICogZnVuYyh7ICdhJzogMCwgJ2InOiAxIH0pO1xuICAgICAqIC8vID0+ICdtYXRjaGVzIEInXG4gICAgICpcbiAgICAgKiBmdW5jKHsgJ2EnOiAnMScsICdiJzogJzInIH0pO1xuICAgICAqIC8vID0+ICdubyBtYXRjaCdcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjb25kKHBhaXJzKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gcGFpcnMgPT0gbnVsbCA/IDAgOiBwYWlycy5sZW5ndGgsXG4gICAgICAgICAgdG9JdGVyYXRlZSA9IGdldEl0ZXJhdGVlKCk7XG5cbiAgICAgIHBhaXJzID0gIWxlbmd0aCA/IFtdIDogYXJyYXlNYXAocGFpcnMsIGZ1bmN0aW9uKHBhaXIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBwYWlyWzFdICE9ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFt0b0l0ZXJhdGVlKHBhaXJbMF0pLCBwYWlyWzFdXTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gYmFzZVJlc3QoZnVuY3Rpb24oYXJncykge1xuICAgICAgICB2YXIgaW5kZXggPSAtMTtcbiAgICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICB2YXIgcGFpciA9IHBhaXJzW2luZGV4XTtcbiAgICAgICAgICBpZiAoYXBwbHkocGFpclswXSwgdGhpcywgYXJncykpIHtcbiAgICAgICAgICAgIHJldHVybiBhcHBseShwYWlyWzFdLCB0aGlzLCBhcmdzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgdGhlIHByZWRpY2F0ZSBwcm9wZXJ0aWVzIG9mIGBzb3VyY2VgIHdpdGhcbiAgICAgKiB0aGUgY29ycmVzcG9uZGluZyBwcm9wZXJ0eSB2YWx1ZXMgb2YgYSBnaXZlbiBvYmplY3QsIHJldHVybmluZyBgdHJ1ZWAgaWZcbiAgICAgKiBhbGwgcHJlZGljYXRlcyByZXR1cm4gdHJ1dGh5LCBlbHNlIGBmYWxzZWAuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhlIGNyZWF0ZWQgZnVuY3Rpb24gaXMgZXF1aXZhbGVudCB0byBgXy5jb25mb3Jtc1RvYCB3aXRoXG4gICAgICogYHNvdXJjZWAgcGFydGlhbGx5IGFwcGxpZWQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCBvZiBwcm9wZXJ0eSBwcmVkaWNhdGVzIHRvIGNvbmZvcm0gdG8uXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc3BlYyBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdHMgPSBbXG4gICAgICogICB7ICdhJzogMiwgJ2InOiAxIH0sXG4gICAgICogICB7ICdhJzogMSwgJ2InOiAyIH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogXy5maWx0ZXIob2JqZWN0cywgXy5jb25mb3Jtcyh7ICdiJzogZnVuY3Rpb24obikgeyByZXR1cm4gbiA+IDE7IH0gfSkpO1xuICAgICAqIC8vID0+IFt7ICdhJzogMSwgJ2InOiAyIH1dXG4gICAgICovXG4gICAgZnVuY3Rpb24gY29uZm9ybXMoc291cmNlKSB7XG4gICAgICByZXR1cm4gYmFzZUNvbmZvcm1zKGJhc2VDbG9uZShzb3VyY2UsIENMT05FX0RFRVBfRkxBRykpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYHZhbHVlYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAyLjQuMFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcmV0dXJuIGZyb20gdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjb25zdGFudCBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdHMgPSBfLnRpbWVzKDIsIF8uY29uc3RhbnQoeyAnYSc6IDEgfSkpO1xuICAgICAqXG4gICAgICogY29uc29sZS5sb2cob2JqZWN0cyk7XG4gICAgICogLy8gPT4gW3sgJ2EnOiAxIH0sIHsgJ2EnOiAxIH1dXG4gICAgICpcbiAgICAgKiBjb25zb2xlLmxvZyhvYmplY3RzWzBdID09PSBvYmplY3RzWzFdKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICovXG4gICAgZnVuY3Rpb24gY29uc3RhbnQodmFsdWUpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgYHZhbHVlYCB0byBkZXRlcm1pbmUgd2hldGhlciBhIGRlZmF1bHQgdmFsdWUgc2hvdWxkIGJlIHJldHVybmVkIGluXG4gICAgICogaXRzIHBsYWNlLiBUaGUgYGRlZmF1bHRWYWx1ZWAgaXMgcmV0dXJuZWQgaWYgYHZhbHVlYCBpcyBgTmFOYCwgYG51bGxgLFxuICAgICAqIG9yIGB1bmRlZmluZWRgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMTQuMFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHBhcmFtIHsqfSBkZWZhdWx0VmFsdWUgVGhlIGRlZmF1bHQgdmFsdWUuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc29sdmVkIHZhbHVlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmRlZmF1bHRUbygxLCAxMCk7XG4gICAgICogLy8gPT4gMVxuICAgICAqXG4gICAgICogXy5kZWZhdWx0VG8odW5kZWZpbmVkLCAxMCk7XG4gICAgICogLy8gPT4gMTBcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBkZWZhdWx0VG8odmFsdWUsIGRlZmF1bHRWYWx1ZSkge1xuICAgICAgcmV0dXJuICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlICE9PSB2YWx1ZSkgPyBkZWZhdWx0VmFsdWUgOiB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSByZXN1bHQgb2YgaW52b2tpbmcgdGhlIGdpdmVuIGZ1bmN0aW9uc1xuICAgICAqIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIHRoZSBjcmVhdGVkIGZ1bmN0aW9uLCB3aGVyZSBlYWNoIHN1Y2Nlc3NpdmVcbiAgICAgKiBpbnZvY2F0aW9uIGlzIHN1cHBsaWVkIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIHByZXZpb3VzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0gey4uLihGdW5jdGlvbnxGdW5jdGlvbltdKX0gW2Z1bmNzXSBUaGUgZnVuY3Rpb25zIHRvIGludm9rZS5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjb21wb3NpdGUgZnVuY3Rpb24uXG4gICAgICogQHNlZSBfLmZsb3dSaWdodFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBzcXVhcmUobikge1xuICAgICAqICAgcmV0dXJuIG4gKiBuO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIHZhciBhZGRTcXVhcmUgPSBfLmZsb3coW18uYWRkLCBzcXVhcmVdKTtcbiAgICAgKiBhZGRTcXVhcmUoMSwgMik7XG4gICAgICogLy8gPT4gOVxuICAgICAqL1xuICAgIHZhciBmbG93ID0gY3JlYXRlRmxvdygpO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5mbG93YCBleGNlcHQgdGhhdCBpdCBjcmVhdGVzIGEgZnVuY3Rpb24gdGhhdFxuICAgICAqIGludm9rZXMgdGhlIGdpdmVuIGZ1bmN0aW9ucyBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7Li4uKEZ1bmN0aW9ufEZ1bmN0aW9uW10pfSBbZnVuY3NdIFRoZSBmdW5jdGlvbnMgdG8gaW52b2tlLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNvbXBvc2l0ZSBmdW5jdGlvbi5cbiAgICAgKiBAc2VlIF8uZmxvd1xuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBzcXVhcmUobikge1xuICAgICAqICAgcmV0dXJuIG4gKiBuO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIHZhciBhZGRTcXVhcmUgPSBfLmZsb3dSaWdodChbc3F1YXJlLCBfLmFkZF0pO1xuICAgICAqIGFkZFNxdWFyZSgxLCAyKTtcbiAgICAgKiAvLyA9PiA5XG4gICAgICovXG4gICAgdmFyIGZsb3dSaWdodCA9IGNyZWF0ZUZsb3codHJ1ZSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBmaXJzdCBhcmd1bWVudCBpdCByZWNlaXZlcy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBBbnkgdmFsdWUuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgYHZhbHVlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gICAgICpcbiAgICAgKiBjb25zb2xlLmxvZyhfLmlkZW50aXR5KG9iamVjdCkgPT09IG9iamVjdCk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlkZW50aXR5KHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2Agd2l0aCB0aGUgYXJndW1lbnRzIG9mIHRoZSBjcmVhdGVkXG4gICAgICogZnVuY3Rpb24uIElmIGBmdW5jYCBpcyBhIHByb3BlcnR5IG5hbWUsIHRoZSBjcmVhdGVkIGZ1bmN0aW9uIHJldHVybnMgdGhlXG4gICAgICogcHJvcGVydHkgdmFsdWUgZm9yIGEgZ2l2ZW4gZWxlbWVudC4gSWYgYGZ1bmNgIGlzIGFuIGFycmF5IG9yIG9iamVjdCwgdGhlXG4gICAgICogY3JlYXRlZCBmdW5jdGlvbiByZXR1cm5zIGB0cnVlYCBmb3IgZWxlbWVudHMgdGhhdCBjb250YWluIHRoZSBlcXVpdmFsZW50XG4gICAgICogc291cmNlIHByb3BlcnRpZXMsIG90aGVyd2lzZSBpdCByZXR1cm5zIGBmYWxzZWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7Kn0gW2Z1bmM9Xy5pZGVudGl0eV0gVGhlIHZhbHVlIHRvIGNvbnZlcnQgdG8gYSBjYWxsYmFjay5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIGNhbGxiYWNrLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgdXNlcnMgPSBbXG4gICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScsICdhZ2UnOiAzNiwgJ2FjdGl2ZSc6IHRydWUgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgJ2FnZSc6IDQwLCAnYWN0aXZlJzogZmFsc2UgfVxuICAgICAqIF07XG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc2AgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZmlsdGVyKHVzZXJzLCBfLml0ZXJhdGVlKHsgJ3VzZXInOiAnYmFybmV5JywgJ2FjdGl2ZSc6IHRydWUgfSkpO1xuICAgICAqIC8vID0+IFt7ICd1c2VyJzogJ2Jhcm5leScsICdhZ2UnOiAzNiwgJ2FjdGl2ZSc6IHRydWUgfV1cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzUHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmZpbHRlcih1c2VycywgXy5pdGVyYXRlZShbJ3VzZXInLCAnZnJlZCddKSk7XG4gICAgICogLy8gPT4gW3sgJ3VzZXInOiAnZnJlZCcsICdhZ2UnOiA0MCB9XVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5tYXAodXNlcnMsIF8uaXRlcmF0ZWUoJ3VzZXInKSk7XG4gICAgICogLy8gPT4gWydiYXJuZXknLCAnZnJlZCddXG4gICAgICpcbiAgICAgKiAvLyBDcmVhdGUgY3VzdG9tIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gICAgICogXy5pdGVyYXRlZSA9IF8ud3JhcChfLml0ZXJhdGVlLCBmdW5jdGlvbihpdGVyYXRlZSwgZnVuYykge1xuICAgICAqICAgcmV0dXJuICFfLmlzUmVnRXhwKGZ1bmMpID8gaXRlcmF0ZWUoZnVuYykgOiBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICAgKiAgICAgcmV0dXJuIGZ1bmMudGVzdChzdHJpbmcpO1xuICAgICAqICAgfTtcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIF8uZmlsdGVyKFsnYWJjJywgJ2RlZiddLCAvZWYvKTtcbiAgICAgKiAvLyA9PiBbJ2RlZiddXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXRlcmF0ZWUoZnVuYykge1xuICAgICAgcmV0dXJuIGJhc2VJdGVyYXRlZSh0eXBlb2YgZnVuYyA9PSAnZnVuY3Rpb24nID8gZnVuYyA6IGJhc2VDbG9uZShmdW5jLCBDTE9ORV9ERUVQX0ZMQUcpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBwZXJmb3JtcyBhIHBhcnRpYWwgZGVlcCBjb21wYXJpc29uIGJldHdlZW4gYSBnaXZlblxuICAgICAqIG9iamVjdCBhbmQgYHNvdXJjZWAsIHJldHVybmluZyBgdHJ1ZWAgaWYgdGhlIGdpdmVuIG9iamVjdCBoYXMgZXF1aXZhbGVudFxuICAgICAqIHByb3BlcnR5IHZhbHVlcywgZWxzZSBgZmFsc2VgLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoZSBjcmVhdGVkIGZ1bmN0aW9uIGlzIGVxdWl2YWxlbnQgdG8gYF8uaXNNYXRjaGAgd2l0aCBgc291cmNlYFxuICAgICAqIHBhcnRpYWxseSBhcHBsaWVkLlxuICAgICAqXG4gICAgICogUGFydGlhbCBjb21wYXJpc29ucyB3aWxsIG1hdGNoIGVtcHR5IGFycmF5IGFuZCBlbXB0eSBvYmplY3QgYHNvdXJjZWBcbiAgICAgKiB2YWx1ZXMgYWdhaW5zdCBhbnkgYXJyYXkgb3Igb2JqZWN0IHZhbHVlLCByZXNwZWN0aXZlbHkuIFNlZSBgXy5pc0VxdWFsYFxuICAgICAqIGZvciBhIGxpc3Qgb2Ygc3VwcG9ydGVkIHZhbHVlIGNvbXBhcmlzb25zLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIE11bHRpcGxlIHZhbHVlcyBjYW4gYmUgY2hlY2tlZCBieSBjb21iaW5pbmcgc2V2ZXJhbCBtYXRjaGVyc1xuICAgICAqIHVzaW5nIGBfLm92ZXJTb21lYFxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3Qgb2YgcHJvcGVydHkgdmFsdWVzIHRvIG1hdGNoLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNwZWMgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3RzID0gW1xuICAgICAqICAgeyAnYSc6IDEsICdiJzogMiwgJ2MnOiAzIH0sXG4gICAgICogICB7ICdhJzogNCwgJ2InOiA1LCAnYyc6IDYgfVxuICAgICAqIF07XG4gICAgICpcbiAgICAgKiBfLmZpbHRlcihvYmplY3RzLCBfLm1hdGNoZXMoeyAnYSc6IDQsICdjJzogNiB9KSk7XG4gICAgICogLy8gPT4gW3sgJ2EnOiA0LCAnYic6IDUsICdjJzogNiB9XVxuICAgICAqXG4gICAgICogLy8gQ2hlY2tpbmcgZm9yIHNldmVyYWwgcG9zc2libGUgdmFsdWVzXG4gICAgICogXy5maWx0ZXIob2JqZWN0cywgXy5vdmVyU29tZShbXy5tYXRjaGVzKHsgJ2EnOiAxIH0pLCBfLm1hdGNoZXMoeyAnYSc6IDQgfSldKSk7XG4gICAgICogLy8gPT4gW3sgJ2EnOiAxLCAnYic6IDIsICdjJzogMyB9LCB7ICdhJzogNCwgJ2InOiA1LCAnYyc6IDYgfV1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtYXRjaGVzKHNvdXJjZSkge1xuICAgICAgcmV0dXJuIGJhc2VNYXRjaGVzKGJhc2VDbG9uZShzb3VyY2UsIENMT05FX0RFRVBfRkxBRykpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHBlcmZvcm1zIGEgcGFydGlhbCBkZWVwIGNvbXBhcmlzb24gYmV0d2VlbiB0aGVcbiAgICAgKiB2YWx1ZSBhdCBgcGF0aGAgb2YgYSBnaXZlbiBvYmplY3QgdG8gYHNyY1ZhbHVlYCwgcmV0dXJuaW5nIGB0cnVlYCBpZiB0aGVcbiAgICAgKiBvYmplY3QgdmFsdWUgaXMgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFBhcnRpYWwgY29tcGFyaXNvbnMgd2lsbCBtYXRjaCBlbXB0eSBhcnJheSBhbmQgZW1wdHkgb2JqZWN0XG4gICAgICogYHNyY1ZhbHVlYCB2YWx1ZXMgYWdhaW5zdCBhbnkgYXJyYXkgb3Igb2JqZWN0IHZhbHVlLCByZXNwZWN0aXZlbHkuIFNlZVxuICAgICAqIGBfLmlzRXF1YWxgIGZvciBhIGxpc3Qgb2Ygc3VwcG9ydGVkIHZhbHVlIGNvbXBhcmlzb25zLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIE11bHRpcGxlIHZhbHVlcyBjYW4gYmUgY2hlY2tlZCBieSBjb21iaW5pbmcgc2V2ZXJhbCBtYXRjaGVyc1xuICAgICAqIHVzaW5nIGBfLm92ZXJTb21lYFxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMi4wXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICAgICAqIEBwYXJhbSB7Kn0gc3JjVmFsdWUgVGhlIHZhbHVlIHRvIG1hdGNoLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNwZWMgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3RzID0gW1xuICAgICAqICAgeyAnYSc6IDEsICdiJzogMiwgJ2MnOiAzIH0sXG4gICAgICogICB7ICdhJzogNCwgJ2InOiA1LCAnYyc6IDYgfVxuICAgICAqIF07XG4gICAgICpcbiAgICAgKiBfLmZpbmQob2JqZWN0cywgXy5tYXRjaGVzUHJvcGVydHkoJ2EnLCA0KSk7XG4gICAgICogLy8gPT4geyAnYSc6IDQsICdiJzogNSwgJ2MnOiA2IH1cbiAgICAgKlxuICAgICAqIC8vIENoZWNraW5nIGZvciBzZXZlcmFsIHBvc3NpYmxlIHZhbHVlc1xuICAgICAqIF8uZmlsdGVyKG9iamVjdHMsIF8ub3ZlclNvbWUoW18ubWF0Y2hlc1Byb3BlcnR5KCdhJywgMSksIF8ubWF0Y2hlc1Byb3BlcnR5KCdhJywgNCldKSk7XG4gICAgICogLy8gPT4gW3sgJ2EnOiAxLCAnYic6IDIsICdjJzogMyB9LCB7ICdhJzogNCwgJ2InOiA1LCAnYyc6IDYgfV1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtYXRjaGVzUHJvcGVydHkocGF0aCwgc3JjVmFsdWUpIHtcbiAgICAgIHJldHVybiBiYXNlTWF0Y2hlc1Byb3BlcnR5KHBhdGgsIGJhc2VDbG9uZShzcmNWYWx1ZSwgQ0xPTkVfREVFUF9GTEFHKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyB0aGUgbWV0aG9kIGF0IGBwYXRoYCBvZiBhIGdpdmVuIG9iamVjdC5cbiAgICAgKiBBbnkgYWRkaXRpb25hbCBhcmd1bWVudHMgYXJlIHByb3ZpZGVkIHRvIHRoZSBpbnZva2VkIG1ldGhvZC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjcuMFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIG1ldGhvZCB0byBpbnZva2UuXG4gICAgICogQHBhcmFtIHsuLi4qfSBbYXJnc10gVGhlIGFyZ3VtZW50cyB0byBpbnZva2UgdGhlIG1ldGhvZCB3aXRoLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGludm9rZXIgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3RzID0gW1xuICAgICAqICAgeyAnYSc6IHsgJ2InOiBfLmNvbnN0YW50KDIpIH0gfSxcbiAgICAgKiAgIHsgJ2EnOiB7ICdiJzogXy5jb25zdGFudCgxKSB9IH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogXy5tYXAob2JqZWN0cywgXy5tZXRob2QoJ2EuYicpKTtcbiAgICAgKiAvLyA9PiBbMiwgMV1cbiAgICAgKlxuICAgICAqIF8ubWFwKG9iamVjdHMsIF8ubWV0aG9kKFsnYScsICdiJ10pKTtcbiAgICAgKiAvLyA9PiBbMiwgMV1cbiAgICAgKi9cbiAgICB2YXIgbWV0aG9kID0gYmFzZVJlc3QoZnVuY3Rpb24ocGF0aCwgYXJncykge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgICAgICByZXR1cm4gYmFzZUludm9rZShvYmplY3QsIHBhdGgsIGFyZ3MpO1xuICAgICAgfTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcHBvc2l0ZSBvZiBgXy5tZXRob2RgOyB0aGlzIG1ldGhvZCBjcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzXG4gICAgICogdGhlIG1ldGhvZCBhdCBhIGdpdmVuIHBhdGggb2YgYG9iamVjdGAuIEFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyBhcmVcbiAgICAgKiBwcm92aWRlZCB0byB0aGUgaW52b2tlZCBtZXRob2QuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy43LjBcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0gey4uLip9IFthcmdzXSBUaGUgYXJndW1lbnRzIHRvIGludm9rZSB0aGUgbWV0aG9kIHdpdGguXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgaW52b2tlciBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGFycmF5ID0gXy50aW1lcygzLCBfLmNvbnN0YW50KSxcbiAgICAgKiAgICAgb2JqZWN0ID0geyAnYSc6IGFycmF5LCAnYic6IGFycmF5LCAnYyc6IGFycmF5IH07XG4gICAgICpcbiAgICAgKiBfLm1hcChbJ2FbMl0nLCAnY1swXSddLCBfLm1ldGhvZE9mKG9iamVjdCkpO1xuICAgICAqIC8vID0+IFsyLCAwXVxuICAgICAqXG4gICAgICogXy5tYXAoW1snYScsICcyJ10sIFsnYycsICcwJ11dLCBfLm1ldGhvZE9mKG9iamVjdCkpO1xuICAgICAqIC8vID0+IFsyLCAwXVxuICAgICAqL1xuICAgIHZhciBtZXRob2RPZiA9IGJhc2VSZXN0KGZ1bmN0aW9uKG9iamVjdCwgYXJncykge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKHBhdGgpIHtcbiAgICAgICAgcmV0dXJuIGJhc2VJbnZva2Uob2JqZWN0LCBwYXRoLCBhcmdzKTtcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGFsbCBvd24gZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgZnVuY3Rpb24gcHJvcGVydGllcyBvZiBhIHNvdXJjZVxuICAgICAqIG9iamVjdCB0byB0aGUgZGVzdGluYXRpb24gb2JqZWN0LiBJZiBgb2JqZWN0YCBpcyBhIGZ1bmN0aW9uLCB0aGVuIG1ldGhvZHNcbiAgICAgKiBhcmUgYWRkZWQgdG8gaXRzIHByb3RvdHlwZSBhcyB3ZWxsLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFVzZSBgXy5ydW5JbkNvbnRleHRgIHRvIGNyZWF0ZSBhIHByaXN0aW5lIGBsb2Rhc2hgIGZ1bmN0aW9uIHRvXG4gICAgICogYXZvaWQgY29uZmxpY3RzIGNhdXNlZCBieSBtb2RpZnlpbmcgdGhlIG9yaWdpbmFsLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufE9iamVjdH0gW29iamVjdD1sb2Rhc2hdIFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IG9mIGZ1bmN0aW9ucyB0byBhZGQuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBUaGUgb3B0aW9ucyBvYmplY3QuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5jaGFpbj10cnVlXSBTcGVjaWZ5IHdoZXRoZXIgbWl4aW5zIGFyZSBjaGFpbmFibGUuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufE9iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gdm93ZWxzKHN0cmluZykge1xuICAgICAqICAgcmV0dXJuIF8uZmlsdGVyKHN0cmluZywgZnVuY3Rpb24odikge1xuICAgICAqICAgICByZXR1cm4gL1thZWlvdV0vaS50ZXN0KHYpO1xuICAgICAqICAgfSk7XG4gICAgICogfVxuICAgICAqXG4gICAgICogXy5taXhpbih7ICd2b3dlbHMnOiB2b3dlbHMgfSk7XG4gICAgICogXy52b3dlbHMoJ2ZyZWQnKTtcbiAgICAgKiAvLyA9PiBbJ2UnXVxuICAgICAqXG4gICAgICogXygnZnJlZCcpLnZvd2VscygpLnZhbHVlKCk7XG4gICAgICogLy8gPT4gWydlJ11cbiAgICAgKlxuICAgICAqIF8ubWl4aW4oeyAndm93ZWxzJzogdm93ZWxzIH0sIHsgJ2NoYWluJzogZmFsc2UgfSk7XG4gICAgICogXygnZnJlZCcpLnZvd2VscygpO1xuICAgICAqIC8vID0+IFsnZSddXG4gICAgICovXG4gICAgZnVuY3Rpb24gbWl4aW4ob2JqZWN0LCBzb3VyY2UsIG9wdGlvbnMpIHtcbiAgICAgIHZhciBwcm9wcyA9IGtleXMoc291cmNlKSxcbiAgICAgICAgICBtZXRob2ROYW1lcyA9IGJhc2VGdW5jdGlvbnMoc291cmNlLCBwcm9wcyk7XG5cbiAgICAgIGlmIChvcHRpb25zID09IG51bGwgJiZcbiAgICAgICAgICAhKGlzT2JqZWN0KHNvdXJjZSkgJiYgKG1ldGhvZE5hbWVzLmxlbmd0aCB8fCAhcHJvcHMubGVuZ3RoKSkpIHtcbiAgICAgICAgb3B0aW9ucyA9IHNvdXJjZTtcbiAgICAgICAgc291cmNlID0gb2JqZWN0O1xuICAgICAgICBvYmplY3QgPSB0aGlzO1xuICAgICAgICBtZXRob2ROYW1lcyA9IGJhc2VGdW5jdGlvbnMoc291cmNlLCBrZXlzKHNvdXJjZSkpO1xuICAgICAgfVxuICAgICAgdmFyIGNoYWluID0gIShpc09iamVjdChvcHRpb25zKSAmJiAnY2hhaW4nIGluIG9wdGlvbnMpIHx8ICEhb3B0aW9ucy5jaGFpbixcbiAgICAgICAgICBpc0Z1bmMgPSBpc0Z1bmN0aW9uKG9iamVjdCk7XG5cbiAgICAgIGFycmF5RWFjaChtZXRob2ROYW1lcywgZnVuY3Rpb24obWV0aG9kTmFtZSkge1xuICAgICAgICB2YXIgZnVuYyA9IHNvdXJjZVttZXRob2ROYW1lXTtcbiAgICAgICAgb2JqZWN0W21ldGhvZE5hbWVdID0gZnVuYztcbiAgICAgICAgaWYgKGlzRnVuYykge1xuICAgICAgICAgIG9iamVjdC5wcm90b3R5cGVbbWV0aG9kTmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBjaGFpbkFsbCA9IHRoaXMuX19jaGFpbl9fO1xuICAgICAgICAgICAgaWYgKGNoYWluIHx8IGNoYWluQWxsKSB7XG4gICAgICAgICAgICAgIHZhciByZXN1bHQgPSBvYmplY3QodGhpcy5fX3dyYXBwZWRfXyksXG4gICAgICAgICAgICAgICAgICBhY3Rpb25zID0gcmVzdWx0Ll9fYWN0aW9uc19fID0gY29weUFycmF5KHRoaXMuX19hY3Rpb25zX18pO1xuXG4gICAgICAgICAgICAgIGFjdGlvbnMucHVzaCh7ICdmdW5jJzogZnVuYywgJ2FyZ3MnOiBhcmd1bWVudHMsICd0aGlzQXJnJzogb2JqZWN0IH0pO1xuICAgICAgICAgICAgICByZXN1bHQuX19jaGFpbl9fID0gY2hhaW5BbGw7XG4gICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZnVuYy5hcHBseShvYmplY3QsIGFycmF5UHVzaChbdGhpcy52YWx1ZSgpXSwgYXJndW1lbnRzKSk7XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV2ZXJ0cyB0aGUgYF9gIHZhcmlhYmxlIHRvIGl0cyBwcmV2aW91cyB2YWx1ZSBhbmQgcmV0dXJucyBhIHJlZmVyZW5jZSB0b1xuICAgICAqIHRoZSBgbG9kYXNoYCBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBgbG9kYXNoYCBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGxvZGFzaCA9IF8ubm9Db25mbGljdCgpO1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIG5vQ29uZmxpY3QoKSB7XG4gICAgICBpZiAocm9vdC5fID09PSB0aGlzKSB7XG4gICAgICAgIHJvb3QuXyA9IG9sZERhc2g7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGB1bmRlZmluZWRgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDIuMy4wXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy50aW1lcygyLCBfLm5vb3ApO1xuICAgICAqIC8vID0+IFt1bmRlZmluZWQsIHVuZGVmaW5lZF1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBub29wKCkge1xuICAgICAgLy8gTm8gb3BlcmF0aW9uIHBlcmZvcm1lZC5cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBnZXRzIHRoZSBhcmd1bWVudCBhdCBpbmRleCBgbmAuIElmIGBuYCBpcyBuZWdhdGl2ZSxcbiAgICAgKiB0aGUgbnRoIGFyZ3VtZW50IGZyb20gdGhlIGVuZCBpcyByZXR1cm5lZC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtuPTBdIFRoZSBpbmRleCBvZiB0aGUgYXJndW1lbnQgdG8gcmV0dXJuLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHBhc3MtdGhydSBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGZ1bmMgPSBfLm50aEFyZygxKTtcbiAgICAgKiBmdW5jKCdhJywgJ2InLCAnYycsICdkJyk7XG4gICAgICogLy8gPT4gJ2InXG4gICAgICpcbiAgICAgKiB2YXIgZnVuYyA9IF8ubnRoQXJnKC0yKTtcbiAgICAgKiBmdW5jKCdhJywgJ2InLCAnYycsICdkJyk7XG4gICAgICogLy8gPT4gJ2MnXG4gICAgICovXG4gICAgZnVuY3Rpb24gbnRoQXJnKG4pIHtcbiAgICAgIG4gPSB0b0ludGVnZXIobik7XG4gICAgICByZXR1cm4gYmFzZVJlc3QoZnVuY3Rpb24oYXJncykge1xuICAgICAgICByZXR1cm4gYmFzZU50aChhcmdzLCBuKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGl0ZXJhdGVlc2Agd2l0aCB0aGUgYXJndW1lbnRzIGl0IHJlY2VpdmVzXG4gICAgICogYW5kIHJldHVybnMgdGhlaXIgcmVzdWx0cy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHsuLi4oRnVuY3Rpb258RnVuY3Rpb25bXSl9IFtpdGVyYXRlZXM9W18uaWRlbnRpdHldXVxuICAgICAqICBUaGUgaXRlcmF0ZWVzIHRvIGludm9rZS5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGZ1bmMgPSBfLm92ZXIoW01hdGgubWF4LCBNYXRoLm1pbl0pO1xuICAgICAqXG4gICAgICogZnVuYygxLCAyLCAzLCA0KTtcbiAgICAgKiAvLyA9PiBbNCwgMV1cbiAgICAgKi9cbiAgICB2YXIgb3ZlciA9IGNyZWF0ZU92ZXIoYXJyYXlNYXApO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIGlmICoqYWxsKiogb2YgdGhlIGBwcmVkaWNhdGVzYCByZXR1cm5cbiAgICAgKiB0cnV0aHkgd2hlbiBpbnZva2VkIHdpdGggdGhlIGFyZ3VtZW50cyBpdCByZWNlaXZlcy5cbiAgICAgKlxuICAgICAqIEZvbGxvd2luZyBzaG9ydGhhbmRzIGFyZSBwb3NzaWJsZSBmb3IgcHJvdmlkaW5nIHByZWRpY2F0ZXMuXG4gICAgICogUGFzcyBhbiBgT2JqZWN0YCBhbmQgaXQgd2lsbCBiZSB1c2VkIGFzIGFuIHBhcmFtZXRlciBmb3IgYF8ubWF0Y2hlc2AgdG8gY3JlYXRlIHRoZSBwcmVkaWNhdGUuXG4gICAgICogUGFzcyBhbiBgQXJyYXlgIG9mIHBhcmFtZXRlcnMgZm9yIGBfLm1hdGNoZXNQcm9wZXJ0eWAgYW5kIHRoZSBwcmVkaWNhdGUgd2lsbCBiZSBjcmVhdGVkIHVzaW5nIHRoZW0uXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7Li4uKEZ1bmN0aW9ufEZ1bmN0aW9uW10pfSBbcHJlZGljYXRlcz1bXy5pZGVudGl0eV1dXG4gICAgICogIFRoZSBwcmVkaWNhdGVzIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgZnVuYyA9IF8ub3ZlckV2ZXJ5KFtCb29sZWFuLCBpc0Zpbml0ZV0pO1xuICAgICAqXG4gICAgICogZnVuYygnMScpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIGZ1bmMobnVsbCk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIGZ1bmMoTmFOKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIHZhciBvdmVyRXZlcnkgPSBjcmVhdGVPdmVyKGFycmF5RXZlcnkpO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIGlmICoqYW55Kiogb2YgdGhlIGBwcmVkaWNhdGVzYCByZXR1cm5cbiAgICAgKiB0cnV0aHkgd2hlbiBpbnZva2VkIHdpdGggdGhlIGFyZ3VtZW50cyBpdCByZWNlaXZlcy5cbiAgICAgKlxuICAgICAqIEZvbGxvd2luZyBzaG9ydGhhbmRzIGFyZSBwb3NzaWJsZSBmb3IgcHJvdmlkaW5nIHByZWRpY2F0ZXMuXG4gICAgICogUGFzcyBhbiBgT2JqZWN0YCBhbmQgaXQgd2lsbCBiZSB1c2VkIGFzIGFuIHBhcmFtZXRlciBmb3IgYF8ubWF0Y2hlc2AgdG8gY3JlYXRlIHRoZSBwcmVkaWNhdGUuXG4gICAgICogUGFzcyBhbiBgQXJyYXlgIG9mIHBhcmFtZXRlcnMgZm9yIGBfLm1hdGNoZXNQcm9wZXJ0eWAgYW5kIHRoZSBwcmVkaWNhdGUgd2lsbCBiZSBjcmVhdGVkIHVzaW5nIHRoZW0uXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7Li4uKEZ1bmN0aW9ufEZ1bmN0aW9uW10pfSBbcHJlZGljYXRlcz1bXy5pZGVudGl0eV1dXG4gICAgICogIFRoZSBwcmVkaWNhdGVzIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgZnVuYyA9IF8ub3ZlclNvbWUoW0Jvb2xlYW4sIGlzRmluaXRlXSk7XG4gICAgICpcbiAgICAgKiBmdW5jKCcxJyk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogZnVuYyhudWxsKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBmdW5jKE5hTik7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIHZhciBtYXRjaGVzRnVuYyA9IF8ub3ZlclNvbWUoW3sgJ2EnOiAxIH0sIHsgJ2EnOiAyIH1dKVxuICAgICAqIHZhciBtYXRjaGVzUHJvcGVydHlGdW5jID0gXy5vdmVyU29tZShbWydhJywgMV0sIFsnYScsIDJdXSlcbiAgICAgKi9cbiAgICB2YXIgb3ZlclNvbWUgPSBjcmVhdGVPdmVyKGFycmF5U29tZSk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSB2YWx1ZSBhdCBgcGF0aGAgb2YgYSBnaXZlbiBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMi40LjBcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3RzID0gW1xuICAgICAqICAgeyAnYSc6IHsgJ2InOiAyIH0gfSxcbiAgICAgKiAgIHsgJ2EnOiB7ICdiJzogMSB9IH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogXy5tYXAob2JqZWN0cywgXy5wcm9wZXJ0eSgnYS5iJykpO1xuICAgICAqIC8vID0+IFsyLCAxXVxuICAgICAqXG4gICAgICogXy5tYXAoXy5zb3J0Qnkob2JqZWN0cywgXy5wcm9wZXJ0eShbJ2EnLCAnYiddKSksICdhLmInKTtcbiAgICAgKiAvLyA9PiBbMSwgMl1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBwcm9wZXJ0eShwYXRoKSB7XG4gICAgICByZXR1cm4gaXNLZXkocGF0aCkgPyBiYXNlUHJvcGVydHkodG9LZXkocGF0aCkpIDogYmFzZVByb3BlcnR5RGVlcChwYXRoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3Bwb3NpdGUgb2YgYF8ucHJvcGVydHlgOyB0aGlzIG1ldGhvZCBjcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zXG4gICAgICogdGhlIHZhbHVlIGF0IGEgZ2l2ZW4gcGF0aCBvZiBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFjY2Vzc29yIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgYXJyYXkgPSBbMCwgMSwgMl0sXG4gICAgICogICAgIG9iamVjdCA9IHsgJ2EnOiBhcnJheSwgJ2InOiBhcnJheSwgJ2MnOiBhcnJheSB9O1xuICAgICAqXG4gICAgICogXy5tYXAoWydhWzJdJywgJ2NbMF0nXSwgXy5wcm9wZXJ0eU9mKG9iamVjdCkpO1xuICAgICAqIC8vID0+IFsyLCAwXVxuICAgICAqXG4gICAgICogXy5tYXAoW1snYScsICcyJ10sIFsnYycsICcwJ11dLCBfLnByb3BlcnR5T2Yob2JqZWN0KSk7XG4gICAgICogLy8gPT4gWzIsIDBdXG4gICAgICovXG4gICAgZnVuY3Rpb24gcHJvcGVydHlPZihvYmplY3QpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbihwYXRoKSB7XG4gICAgICAgIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGJhc2VHZXQob2JqZWN0LCBwYXRoKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiBudW1iZXJzIChwb3NpdGl2ZSBhbmQvb3IgbmVnYXRpdmUpIHByb2dyZXNzaW5nIGZyb21cbiAgICAgKiBgc3RhcnRgIHVwIHRvLCBidXQgbm90IGluY2x1ZGluZywgYGVuZGAuIEEgc3RlcCBvZiBgLTFgIGlzIHVzZWQgaWYgYSBuZWdhdGl2ZVxuICAgICAqIGBzdGFydGAgaXMgc3BlY2lmaWVkIHdpdGhvdXQgYW4gYGVuZGAgb3IgYHN0ZXBgLiBJZiBgZW5kYCBpcyBub3Qgc3BlY2lmaWVkLFxuICAgICAqIGl0J3Mgc2V0IHRvIGBzdGFydGAgd2l0aCBgc3RhcnRgIHRoZW4gc2V0IHRvIGAwYC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBKYXZhU2NyaXB0IGZvbGxvd3MgdGhlIElFRUUtNzU0IHN0YW5kYXJkIGZvciByZXNvbHZpbmdcbiAgICAgKiBmbG9hdGluZy1wb2ludCB2YWx1ZXMgd2hpY2ggY2FuIHByb2R1Y2UgdW5leHBlY3RlZCByZXN1bHRzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PTBdIFRoZSBzdGFydCBvZiB0aGUgcmFuZ2UuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGVuZCBUaGUgZW5kIG9mIHRoZSByYW5nZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3N0ZXA9MV0gVGhlIHZhbHVlIHRvIGluY3JlbWVudCBvciBkZWNyZW1lbnQgYnkuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSByYW5nZSBvZiBudW1iZXJzLlxuICAgICAqIEBzZWUgXy5pblJhbmdlLCBfLnJhbmdlUmlnaHRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5yYW5nZSg0KTtcbiAgICAgKiAvLyA9PiBbMCwgMSwgMiwgM11cbiAgICAgKlxuICAgICAqIF8ucmFuZ2UoLTQpO1xuICAgICAqIC8vID0+IFswLCAtMSwgLTIsIC0zXVxuICAgICAqXG4gICAgICogXy5yYW5nZSgxLCA1KTtcbiAgICAgKiAvLyA9PiBbMSwgMiwgMywgNF1cbiAgICAgKlxuICAgICAqIF8ucmFuZ2UoMCwgMjAsIDUpO1xuICAgICAqIC8vID0+IFswLCA1LCAxMCwgMTVdXG4gICAgICpcbiAgICAgKiBfLnJhbmdlKDAsIC00LCAtMSk7XG4gICAgICogLy8gPT4gWzAsIC0xLCAtMiwgLTNdXG4gICAgICpcbiAgICAgKiBfLnJhbmdlKDEsIDQsIDApO1xuICAgICAqIC8vID0+IFsxLCAxLCAxXVxuICAgICAqXG4gICAgICogXy5yYW5nZSgwKTtcbiAgICAgKiAvLyA9PiBbXVxuICAgICAqL1xuICAgIHZhciByYW5nZSA9IGNyZWF0ZVJhbmdlKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnJhbmdlYCBleGNlcHQgdGhhdCBpdCBwb3B1bGF0ZXMgdmFsdWVzIGluXG4gICAgICogZGVzY2VuZGluZyBvcmRlci5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD0wXSBUaGUgc3RhcnQgb2YgdGhlIHJhbmdlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBlbmQgVGhlIGVuZCBvZiB0aGUgcmFuZ2UuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtzdGVwPTFdIFRoZSB2YWx1ZSB0byBpbmNyZW1lbnQgb3IgZGVjcmVtZW50IGJ5LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgcmFuZ2Ugb2YgbnVtYmVycy5cbiAgICAgKiBAc2VlIF8uaW5SYW5nZSwgXy5yYW5nZVxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnJhbmdlUmlnaHQoNCk7XG4gICAgICogLy8gPT4gWzMsIDIsIDEsIDBdXG4gICAgICpcbiAgICAgKiBfLnJhbmdlUmlnaHQoLTQpO1xuICAgICAqIC8vID0+IFstMywgLTIsIC0xLCAwXVxuICAgICAqXG4gICAgICogXy5yYW5nZVJpZ2h0KDEsIDUpO1xuICAgICAqIC8vID0+IFs0LCAzLCAyLCAxXVxuICAgICAqXG4gICAgICogXy5yYW5nZVJpZ2h0KDAsIDIwLCA1KTtcbiAgICAgKiAvLyA9PiBbMTUsIDEwLCA1LCAwXVxuICAgICAqXG4gICAgICogXy5yYW5nZVJpZ2h0KDAsIC00LCAtMSk7XG4gICAgICogLy8gPT4gWy0zLCAtMiwgLTEsIDBdXG4gICAgICpcbiAgICAgKiBfLnJhbmdlUmlnaHQoMSwgNCwgMCk7XG4gICAgICogLy8gPT4gWzEsIDEsIDFdXG4gICAgICpcbiAgICAgKiBfLnJhbmdlUmlnaHQoMCk7XG4gICAgICogLy8gPT4gW11cbiAgICAgKi9cbiAgICB2YXIgcmFuZ2VSaWdodCA9IGNyZWF0ZVJhbmdlKHRydWUpO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIG5ldyBlbXB0eSBhcnJheS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjEzLjBcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGVtcHR5IGFycmF5LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgYXJyYXlzID0gXy50aW1lcygyLCBfLnN0dWJBcnJheSk7XG4gICAgICpcbiAgICAgKiBjb25zb2xlLmxvZyhhcnJheXMpO1xuICAgICAqIC8vID0+IFtbXSwgW11dXG4gICAgICpcbiAgICAgKiBjb25zb2xlLmxvZyhhcnJheXNbMF0gPT09IGFycmF5c1sxXSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzdHViQXJyYXkoKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBgZmFsc2VgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMTMuMFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy50aW1lcygyLCBfLnN0dWJGYWxzZSk7XG4gICAgICogLy8gPT4gW2ZhbHNlLCBmYWxzZV1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzdHViRmFsc2UoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIG5ldyBlbXB0eSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4xMy4wXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgZW1wdHkgb2JqZWN0LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0cyA9IF8udGltZXMoMiwgXy5zdHViT2JqZWN0KTtcbiAgICAgKlxuICAgICAqIGNvbnNvbGUubG9nKG9iamVjdHMpO1xuICAgICAqIC8vID0+IFt7fSwge31dXG4gICAgICpcbiAgICAgKiBjb25zb2xlLmxvZyhvYmplY3RzWzBdID09PSBvYmplY3RzWzFdKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHN0dWJPYmplY3QoKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhbiBlbXB0eSBzdHJpbmcuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4xMy4wXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBlbXB0eSBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udGltZXMoMiwgXy5zdHViU3RyaW5nKTtcbiAgICAgKiAvLyA9PiBbJycsICcnXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHN0dWJTdHJpbmcoKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBgdHJ1ZWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4xMy4wXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udGltZXMoMiwgXy5zdHViVHJ1ZSk7XG4gICAgICogLy8gPT4gW3RydWUsIHRydWVdXG4gICAgICovXG4gICAgZnVuY3Rpb24gc3R1YlRydWUoKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbnZva2VzIHRoZSBpdGVyYXRlZSBgbmAgdGltZXMsIHJldHVybmluZyBhbiBhcnJheSBvZiB0aGUgcmVzdWx0cyBvZlxuICAgICAqIGVhY2ggaW52b2NhdGlvbi4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCBvbmUgYXJndW1lbnQ7IChpbmRleCkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgdGltZXMgdG8gaW52b2tlIGBpdGVyYXRlZWAuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiByZXN1bHRzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnRpbWVzKDMsIFN0cmluZyk7XG4gICAgICogLy8gPT4gWycwJywgJzEnLCAnMiddXG4gICAgICpcbiAgICAgKiAgXy50aW1lcyg0LCBfLmNvbnN0YW50KDApKTtcbiAgICAgKiAvLyA9PiBbMCwgMCwgMCwgMF1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0aW1lcyhuLCBpdGVyYXRlZSkge1xuICAgICAgbiA9IHRvSW50ZWdlcihuKTtcbiAgICAgIGlmIChuIDwgMSB8fCBuID4gTUFYX1NBRkVfSU5URUdFUikge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICB2YXIgaW5kZXggPSBNQVhfQVJSQVlfTEVOR1RILFxuICAgICAgICAgIGxlbmd0aCA9IG5hdGl2ZU1pbihuLCBNQVhfQVJSQVlfTEVOR1RIKTtcblxuICAgICAgaXRlcmF0ZWUgPSBnZXRJdGVyYXRlZShpdGVyYXRlZSk7XG4gICAgICBuIC09IE1BWF9BUlJBWV9MRU5HVEg7XG5cbiAgICAgIHZhciByZXN1bHQgPSBiYXNlVGltZXMobGVuZ3RoLCBpdGVyYXRlZSk7XG4gICAgICB3aGlsZSAoKytpbmRleCA8IG4pIHtcbiAgICAgICAgaXRlcmF0ZWUoaW5kZXgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBwcm9wZXJ0eSBwYXRoIGFycmF5LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnRvUGF0aCgnYS5iLmMnKTtcbiAgICAgKiAvLyA9PiBbJ2EnLCAnYicsICdjJ11cbiAgICAgKlxuICAgICAqIF8udG9QYXRoKCdhWzBdLmIuYycpO1xuICAgICAqIC8vID0+IFsnYScsICcwJywgJ2InLCAnYyddXG4gICAgICovXG4gICAgZnVuY3Rpb24gdG9QYXRoKHZhbHVlKSB7XG4gICAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIGFycmF5TWFwKHZhbHVlLCB0b0tleSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gaXNTeW1ib2wodmFsdWUpID8gW3ZhbHVlXSA6IGNvcHlBcnJheShzdHJpbmdUb1BhdGgodG9TdHJpbmcodmFsdWUpKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2VuZXJhdGVzIGEgdW5pcXVlIElELiBJZiBgcHJlZml4YCBpcyBnaXZlbiwgdGhlIElEIGlzIGFwcGVuZGVkIHRvIGl0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3ByZWZpeD0nJ10gVGhlIHZhbHVlIHRvIHByZWZpeCB0aGUgSUQgd2l0aC5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSB1bmlxdWUgSUQuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udW5pcXVlSWQoJ2NvbnRhY3RfJyk7XG4gICAgICogLy8gPT4gJ2NvbnRhY3RfMTA0J1xuICAgICAqXG4gICAgICogXy51bmlxdWVJZCgpO1xuICAgICAqIC8vID0+ICcxMDUnXG4gICAgICovXG4gICAgZnVuY3Rpb24gdW5pcXVlSWQocHJlZml4KSB7XG4gICAgICB2YXIgaWQgPSArK2lkQ291bnRlcjtcbiAgICAgIHJldHVybiB0b1N0cmluZyhwcmVmaXgpICsgaWQ7XG4gICAgfVxuXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLyoqXG4gICAgICogQWRkcyB0d28gbnVtYmVycy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjQuMFxuICAgICAqIEBjYXRlZ29yeSBNYXRoXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGF1Z2VuZCBUaGUgZmlyc3QgbnVtYmVyIGluIGFuIGFkZGl0aW9uLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBhZGRlbmQgVGhlIHNlY29uZCBudW1iZXIgaW4gYW4gYWRkaXRpb24uXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgdG90YWwuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uYWRkKDYsIDQpO1xuICAgICAqIC8vID0+IDEwXG4gICAgICovXG4gICAgdmFyIGFkZCA9IGNyZWF0ZU1hdGhPcGVyYXRpb24oZnVuY3Rpb24oYXVnZW5kLCBhZGRlbmQpIHtcbiAgICAgIHJldHVybiBhdWdlbmQgKyBhZGRlbmQ7XG4gICAgfSwgMCk7XG5cbiAgICAvKipcbiAgICAgKiBDb21wdXRlcyBgbnVtYmVyYCByb3VuZGVkIHVwIHRvIGBwcmVjaXNpb25gLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMTAuMFxuICAgICAqIEBjYXRlZ29yeSBNYXRoXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG51bWJlciBUaGUgbnVtYmVyIHRvIHJvdW5kIHVwLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbcHJlY2lzaW9uPTBdIFRoZSBwcmVjaXNpb24gdG8gcm91bmQgdXAgdG8uXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgcm91bmRlZCB1cCBudW1iZXIuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uY2VpbCg0LjAwNik7XG4gICAgICogLy8gPT4gNVxuICAgICAqXG4gICAgICogXy5jZWlsKDYuMDA0LCAyKTtcbiAgICAgKiAvLyA9PiA2LjAxXG4gICAgICpcbiAgICAgKiBfLmNlaWwoNjA0MCwgLTIpO1xuICAgICAqIC8vID0+IDYxMDBcbiAgICAgKi9cbiAgICB2YXIgY2VpbCA9IGNyZWF0ZVJvdW5kKCdjZWlsJyk7XG5cbiAgICAvKipcbiAgICAgKiBEaXZpZGUgdHdvIG51bWJlcnMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC43LjBcbiAgICAgKiBAY2F0ZWdvcnkgTWF0aFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkaXZpZGVuZCBUaGUgZmlyc3QgbnVtYmVyIGluIGEgZGl2aXNpb24uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGRpdmlzb3IgVGhlIHNlY29uZCBudW1iZXIgaW4gYSBkaXZpc2lvbi5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBxdW90aWVudC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5kaXZpZGUoNiwgNCk7XG4gICAgICogLy8gPT4gMS41XG4gICAgICovXG4gICAgdmFyIGRpdmlkZSA9IGNyZWF0ZU1hdGhPcGVyYXRpb24oZnVuY3Rpb24oZGl2aWRlbmQsIGRpdmlzb3IpIHtcbiAgICAgIHJldHVybiBkaXZpZGVuZCAvIGRpdmlzb3I7XG4gICAgfSwgMSk7XG5cbiAgICAvKipcbiAgICAgKiBDb21wdXRlcyBgbnVtYmVyYCByb3VuZGVkIGRvd24gdG8gYHByZWNpc2lvbmAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4xMC4wXG4gICAgICogQGNhdGVnb3J5IE1hdGhcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbnVtYmVyIFRoZSBudW1iZXIgdG8gcm91bmQgZG93bi5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3ByZWNpc2lvbj0wXSBUaGUgcHJlY2lzaW9uIHRvIHJvdW5kIGRvd24gdG8uXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgcm91bmRlZCBkb3duIG51bWJlci5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5mbG9vcig0LjAwNik7XG4gICAgICogLy8gPT4gNFxuICAgICAqXG4gICAgICogXy5mbG9vcigwLjA0NiwgMik7XG4gICAgICogLy8gPT4gMC4wNFxuICAgICAqXG4gICAgICogXy5mbG9vcig0MDYwLCAtMik7XG4gICAgICogLy8gPT4gNDAwMFxuICAgICAqL1xuICAgIHZhciBmbG9vciA9IGNyZWF0ZVJvdW5kKCdmbG9vcicpO1xuXG4gICAgLyoqXG4gICAgICogQ29tcHV0ZXMgdGhlIG1heGltdW0gdmFsdWUgb2YgYGFycmF5YC4gSWYgYGFycmF5YCBpcyBlbXB0eSBvciBmYWxzZXksXG4gICAgICogYHVuZGVmaW5lZGAgaXMgcmV0dXJuZWQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgTWF0aFxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1heGltdW0gdmFsdWUuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ubWF4KFs0LCAyLCA4LCA2XSk7XG4gICAgICogLy8gPT4gOFxuICAgICAqXG4gICAgICogXy5tYXgoW10pO1xuICAgICAqIC8vID0+IHVuZGVmaW5lZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1heChhcnJheSkge1xuICAgICAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGgpXG4gICAgICAgID8gYmFzZUV4dHJlbXVtKGFycmF5LCBpZGVudGl0eSwgYmFzZUd0KVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLm1heGAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgaXRlcmF0ZWVgIHdoaWNoIGlzXG4gICAgICogaW52b2tlZCBmb3IgZWFjaCBlbGVtZW50IGluIGBhcnJheWAgdG8gZ2VuZXJhdGUgdGhlIGNyaXRlcmlvbiBieSB3aGljaFxuICAgICAqIHRoZSB2YWx1ZSBpcyByYW5rZWQuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OiAodmFsdWUpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IE1hdGhcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbWF4aW11bSB2YWx1ZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdHMgPSBbeyAnbic6IDEgfSwgeyAnbic6IDIgfV07XG4gICAgICpcbiAgICAgKiBfLm1heEJ5KG9iamVjdHMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuIG8ubjsgfSk7XG4gICAgICogLy8gPT4geyAnbic6IDIgfVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5tYXhCeShvYmplY3RzLCAnbicpO1xuICAgICAqIC8vID0+IHsgJ24nOiAyIH1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtYXhCeShhcnJheSwgaXRlcmF0ZWUpIHtcbiAgICAgIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKVxuICAgICAgICA/IGJhc2VFeHRyZW11bShhcnJheSwgZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDIpLCBiYXNlR3QpXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbXB1dGVzIHRoZSBtZWFuIG9mIHRoZSB2YWx1ZXMgaW4gYGFycmF5YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBNYXRoXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBtZWFuLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLm1lYW4oWzQsIDIsIDgsIDZdKTtcbiAgICAgKiAvLyA9PiA1XG4gICAgICovXG4gICAgZnVuY3Rpb24gbWVhbihhcnJheSkge1xuICAgICAgcmV0dXJuIGJhc2VNZWFuKGFycmF5LCBpZGVudGl0eSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5tZWFuYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBpdGVyYXRlZWAgd2hpY2ggaXNcbiAgICAgKiBpbnZva2VkIGZvciBlYWNoIGVsZW1lbnQgaW4gYGFycmF5YCB0byBnZW5lcmF0ZSB0aGUgdmFsdWUgdG8gYmUgYXZlcmFnZWQuXG4gICAgICogVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCBvbmUgYXJndW1lbnQ6ICh2YWx1ZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC43LjBcbiAgICAgKiBAY2F0ZWdvcnkgTWF0aFxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIG1lYW4uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3RzID0gW3sgJ24nOiA0IH0sIHsgJ24nOiAyIH0sIHsgJ24nOiA4IH0sIHsgJ24nOiA2IH1dO1xuICAgICAqXG4gICAgICogXy5tZWFuQnkob2JqZWN0cywgZnVuY3Rpb24obykgeyByZXR1cm4gby5uOyB9KTtcbiAgICAgKiAvLyA9PiA1XG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLm1lYW5CeShvYmplY3RzLCAnbicpO1xuICAgICAqIC8vID0+IDVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtZWFuQnkoYXJyYXksIGl0ZXJhdGVlKSB7XG4gICAgICByZXR1cm4gYmFzZU1lYW4oYXJyYXksIGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCAyKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29tcHV0ZXMgdGhlIG1pbmltdW0gdmFsdWUgb2YgYGFycmF5YC4gSWYgYGFycmF5YCBpcyBlbXB0eSBvciBmYWxzZXksXG4gICAgICogYHVuZGVmaW5lZGAgaXMgcmV0dXJuZWQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgTWF0aFxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1pbmltdW0gdmFsdWUuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ubWluKFs0LCAyLCA4LCA2XSk7XG4gICAgICogLy8gPT4gMlxuICAgICAqXG4gICAgICogXy5taW4oW10pO1xuICAgICAqIC8vID0+IHVuZGVmaW5lZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1pbihhcnJheSkge1xuICAgICAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGgpXG4gICAgICAgID8gYmFzZUV4dHJlbXVtKGFycmF5LCBpZGVudGl0eSwgYmFzZUx0KVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLm1pbmAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgaXRlcmF0ZWVgIHdoaWNoIGlzXG4gICAgICogaW52b2tlZCBmb3IgZWFjaCBlbGVtZW50IGluIGBhcnJheWAgdG8gZ2VuZXJhdGUgdGhlIGNyaXRlcmlvbiBieSB3aGljaFxuICAgICAqIHRoZSB2YWx1ZSBpcyByYW5rZWQuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OiAodmFsdWUpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IE1hdGhcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbWluaW11bSB2YWx1ZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdHMgPSBbeyAnbic6IDEgfSwgeyAnbic6IDIgfV07XG4gICAgICpcbiAgICAgKiBfLm1pbkJ5KG9iamVjdHMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuIG8ubjsgfSk7XG4gICAgICogLy8gPT4geyAnbic6IDEgfVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5taW5CeShvYmplY3RzLCAnbicpO1xuICAgICAqIC8vID0+IHsgJ24nOiAxIH1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtaW5CeShhcnJheSwgaXRlcmF0ZWUpIHtcbiAgICAgIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKVxuICAgICAgICA/IGJhc2VFeHRyZW11bShhcnJheSwgZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDIpLCBiYXNlTHQpXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE11bHRpcGx5IHR3byBudW1iZXJzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuNy4wXG4gICAgICogQGNhdGVnb3J5IE1hdGhcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbXVsdGlwbGllciBUaGUgZmlyc3QgbnVtYmVyIGluIGEgbXVsdGlwbGljYXRpb24uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG11bHRpcGxpY2FuZCBUaGUgc2Vjb25kIG51bWJlciBpbiBhIG11bHRpcGxpY2F0aW9uLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHByb2R1Y3QuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ubXVsdGlwbHkoNiwgNCk7XG4gICAgICogLy8gPT4gMjRcbiAgICAgKi9cbiAgICB2YXIgbXVsdGlwbHkgPSBjcmVhdGVNYXRoT3BlcmF0aW9uKGZ1bmN0aW9uKG11bHRpcGxpZXIsIG11bHRpcGxpY2FuZCkge1xuICAgICAgcmV0dXJuIG11bHRpcGxpZXIgKiBtdWx0aXBsaWNhbmQ7XG4gICAgfSwgMSk7XG5cbiAgICAvKipcbiAgICAgKiBDb21wdXRlcyBgbnVtYmVyYCByb3VuZGVkIHRvIGBwcmVjaXNpb25gLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMTAuMFxuICAgICAqIEBjYXRlZ29yeSBNYXRoXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG51bWJlciBUaGUgbnVtYmVyIHRvIHJvdW5kLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbcHJlY2lzaW9uPTBdIFRoZSBwcmVjaXNpb24gdG8gcm91bmQgdG8uXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgcm91bmRlZCBudW1iZXIuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ucm91bmQoNC4wMDYpO1xuICAgICAqIC8vID0+IDRcbiAgICAgKlxuICAgICAqIF8ucm91bmQoNC4wMDYsIDIpO1xuICAgICAqIC8vID0+IDQuMDFcbiAgICAgKlxuICAgICAqIF8ucm91bmQoNDA2MCwgLTIpO1xuICAgICAqIC8vID0+IDQxMDBcbiAgICAgKi9cbiAgICB2YXIgcm91bmQgPSBjcmVhdGVSb3VuZCgncm91bmQnKTtcblxuICAgIC8qKlxuICAgICAqIFN1YnRyYWN0IHR3byBudW1iZXJzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IE1hdGhcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbWludWVuZCBUaGUgZmlyc3QgbnVtYmVyIGluIGEgc3VidHJhY3Rpb24uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHN1YnRyYWhlbmQgVGhlIHNlY29uZCBudW1iZXIgaW4gYSBzdWJ0cmFjdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBkaWZmZXJlbmNlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnN1YnRyYWN0KDYsIDQpO1xuICAgICAqIC8vID0+IDJcbiAgICAgKi9cbiAgICB2YXIgc3VidHJhY3QgPSBjcmVhdGVNYXRoT3BlcmF0aW9uKGZ1bmN0aW9uKG1pbnVlbmQsIHN1YnRyYWhlbmQpIHtcbiAgICAgIHJldHVybiBtaW51ZW5kIC0gc3VidHJhaGVuZDtcbiAgICB9LCAwKTtcblxuICAgIC8qKlxuICAgICAqIENvbXB1dGVzIHRoZSBzdW0gb2YgdGhlIHZhbHVlcyBpbiBgYXJyYXlgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuNC4wXG4gICAgICogQGNhdGVnb3J5IE1hdGhcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHN1bS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5zdW0oWzQsIDIsIDgsIDZdKTtcbiAgICAgKiAvLyA9PiAyMFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHN1bShhcnJheSkge1xuICAgICAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGgpXG4gICAgICAgID8gYmFzZVN1bShhcnJheSwgaWRlbnRpdHkpXG4gICAgICAgIDogMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnN1bWAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgaXRlcmF0ZWVgIHdoaWNoIGlzXG4gICAgICogaW52b2tlZCBmb3IgZWFjaCBlbGVtZW50IGluIGBhcnJheWAgdG8gZ2VuZXJhdGUgdGhlIHZhbHVlIHRvIGJlIHN1bW1lZC5cbiAgICAgKiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDogKHZhbHVlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBNYXRoXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgc3VtLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0cyA9IFt7ICduJzogNCB9LCB7ICduJzogMiB9LCB7ICduJzogOCB9LCB7ICduJzogNiB9XTtcbiAgICAgKlxuICAgICAqIF8uc3VtQnkob2JqZWN0cywgZnVuY3Rpb24obykgeyByZXR1cm4gby5uOyB9KTtcbiAgICAgKiAvLyA9PiAyMFxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5zdW1CeShvYmplY3RzLCAnbicpO1xuICAgICAqIC8vID0+IDIwXG4gICAgICovXG4gICAgZnVuY3Rpb24gc3VtQnkoYXJyYXksIGl0ZXJhdGVlKSB7XG4gICAgICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aClcbiAgICAgICAgPyBiYXNlU3VtKGFycmF5LCBnZXRJdGVyYXRlZShpdGVyYXRlZSwgMikpXG4gICAgICAgIDogMDtcbiAgICB9XG5cbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvLyBBZGQgbWV0aG9kcyB0aGF0IHJldHVybiB3cmFwcGVkIHZhbHVlcyBpbiBjaGFpbiBzZXF1ZW5jZXMuXG4gICAgbG9kYXNoLmFmdGVyID0gYWZ0ZXI7XG4gICAgbG9kYXNoLmFyeSA9IGFyeTtcbiAgICBsb2Rhc2guYXNzaWduID0gYXNzaWduO1xuICAgIGxvZGFzaC5hc3NpZ25JbiA9IGFzc2lnbkluO1xuICAgIGxvZGFzaC5hc3NpZ25JbldpdGggPSBhc3NpZ25JbldpdGg7XG4gICAgbG9kYXNoLmFzc2lnbldpdGggPSBhc3NpZ25XaXRoO1xuICAgIGxvZGFzaC5hdCA9IGF0O1xuICAgIGxvZGFzaC5iZWZvcmUgPSBiZWZvcmU7XG4gICAgbG9kYXNoLmJpbmQgPSBiaW5kO1xuICAgIGxvZGFzaC5iaW5kQWxsID0gYmluZEFsbDtcbiAgICBsb2Rhc2guYmluZEtleSA9IGJpbmRLZXk7XG4gICAgbG9kYXNoLmNhc3RBcnJheSA9IGNhc3RBcnJheTtcbiAgICBsb2Rhc2guY2hhaW4gPSBjaGFpbjtcbiAgICBsb2Rhc2guY2h1bmsgPSBjaHVuaztcbiAgICBsb2Rhc2guY29tcGFjdCA9IGNvbXBhY3Q7XG4gICAgbG9kYXNoLmNvbmNhdCA9IGNvbmNhdDtcbiAgICBsb2Rhc2guY29uZCA9IGNvbmQ7XG4gICAgbG9kYXNoLmNvbmZvcm1zID0gY29uZm9ybXM7XG4gICAgbG9kYXNoLmNvbnN0YW50ID0gY29uc3RhbnQ7XG4gICAgbG9kYXNoLmNvdW50QnkgPSBjb3VudEJ5O1xuICAgIGxvZGFzaC5jcmVhdGUgPSBjcmVhdGU7XG4gICAgbG9kYXNoLmN1cnJ5ID0gY3Vycnk7XG4gICAgbG9kYXNoLmN1cnJ5UmlnaHQgPSBjdXJyeVJpZ2h0O1xuICAgIGxvZGFzaC5kZWJvdW5jZSA9IGRlYm91bmNlO1xuICAgIGxvZGFzaC5kZWZhdWx0cyA9IGRlZmF1bHRzO1xuICAgIGxvZGFzaC5kZWZhdWx0c0RlZXAgPSBkZWZhdWx0c0RlZXA7XG4gICAgbG9kYXNoLmRlZmVyID0gZGVmZXI7XG4gICAgbG9kYXNoLmRlbGF5ID0gZGVsYXk7XG4gICAgbG9kYXNoLmRpZmZlcmVuY2UgPSBkaWZmZXJlbmNlO1xuICAgIGxvZGFzaC5kaWZmZXJlbmNlQnkgPSBkaWZmZXJlbmNlQnk7XG4gICAgbG9kYXNoLmRpZmZlcmVuY2VXaXRoID0gZGlmZmVyZW5jZVdpdGg7XG4gICAgbG9kYXNoLmRyb3AgPSBkcm9wO1xuICAgIGxvZGFzaC5kcm9wUmlnaHQgPSBkcm9wUmlnaHQ7XG4gICAgbG9kYXNoLmRyb3BSaWdodFdoaWxlID0gZHJvcFJpZ2h0V2hpbGU7XG4gICAgbG9kYXNoLmRyb3BXaGlsZSA9IGRyb3BXaGlsZTtcbiAgICBsb2Rhc2guZmlsbCA9IGZpbGw7XG4gICAgbG9kYXNoLmZpbHRlciA9IGZpbHRlcjtcbiAgICBsb2Rhc2guZmxhdE1hcCA9IGZsYXRNYXA7XG4gICAgbG9kYXNoLmZsYXRNYXBEZWVwID0gZmxhdE1hcERlZXA7XG4gICAgbG9kYXNoLmZsYXRNYXBEZXB0aCA9IGZsYXRNYXBEZXB0aDtcbiAgICBsb2Rhc2guZmxhdHRlbiA9IGZsYXR0ZW47XG4gICAgbG9kYXNoLmZsYXR0ZW5EZWVwID0gZmxhdHRlbkRlZXA7XG4gICAgbG9kYXNoLmZsYXR0ZW5EZXB0aCA9IGZsYXR0ZW5EZXB0aDtcbiAgICBsb2Rhc2guZmxpcCA9IGZsaXA7XG4gICAgbG9kYXNoLmZsb3cgPSBmbG93O1xuICAgIGxvZGFzaC5mbG93UmlnaHQgPSBmbG93UmlnaHQ7XG4gICAgbG9kYXNoLmZyb21QYWlycyA9IGZyb21QYWlycztcbiAgICBsb2Rhc2guZnVuY3Rpb25zID0gZnVuY3Rpb25zO1xuICAgIGxvZGFzaC5mdW5jdGlvbnNJbiA9IGZ1bmN0aW9uc0luO1xuICAgIGxvZGFzaC5ncm91cEJ5ID0gZ3JvdXBCeTtcbiAgICBsb2Rhc2guaW5pdGlhbCA9IGluaXRpYWw7XG4gICAgbG9kYXNoLmludGVyc2VjdGlvbiA9IGludGVyc2VjdGlvbjtcbiAgICBsb2Rhc2guaW50ZXJzZWN0aW9uQnkgPSBpbnRlcnNlY3Rpb25CeTtcbiAgICBsb2Rhc2guaW50ZXJzZWN0aW9uV2l0aCA9IGludGVyc2VjdGlvbldpdGg7XG4gICAgbG9kYXNoLmludmVydCA9IGludmVydDtcbiAgICBsb2Rhc2guaW52ZXJ0QnkgPSBpbnZlcnRCeTtcbiAgICBsb2Rhc2guaW52b2tlTWFwID0gaW52b2tlTWFwO1xuICAgIGxvZGFzaC5pdGVyYXRlZSA9IGl0ZXJhdGVlO1xuICAgIGxvZGFzaC5rZXlCeSA9IGtleUJ5O1xuICAgIGxvZGFzaC5rZXlzID0ga2V5cztcbiAgICBsb2Rhc2gua2V5c0luID0ga2V5c0luO1xuICAgIGxvZGFzaC5tYXAgPSBtYXA7XG4gICAgbG9kYXNoLm1hcEtleXMgPSBtYXBLZXlzO1xuICAgIGxvZGFzaC5tYXBWYWx1ZXMgPSBtYXBWYWx1ZXM7XG4gICAgbG9kYXNoLm1hdGNoZXMgPSBtYXRjaGVzO1xuICAgIGxvZGFzaC5tYXRjaGVzUHJvcGVydHkgPSBtYXRjaGVzUHJvcGVydHk7XG4gICAgbG9kYXNoLm1lbW9pemUgPSBtZW1vaXplO1xuICAgIGxvZGFzaC5tZXJnZSA9IG1lcmdlO1xuICAgIGxvZGFzaC5tZXJnZVdpdGggPSBtZXJnZVdpdGg7XG4gICAgbG9kYXNoLm1ldGhvZCA9IG1ldGhvZDtcbiAgICBsb2Rhc2gubWV0aG9kT2YgPSBtZXRob2RPZjtcbiAgICBsb2Rhc2gubWl4aW4gPSBtaXhpbjtcbiAgICBsb2Rhc2gubmVnYXRlID0gbmVnYXRlO1xuICAgIGxvZGFzaC5udGhBcmcgPSBudGhBcmc7XG4gICAgbG9kYXNoLm9taXQgPSBvbWl0O1xuICAgIGxvZGFzaC5vbWl0QnkgPSBvbWl0Qnk7XG4gICAgbG9kYXNoLm9uY2UgPSBvbmNlO1xuICAgIGxvZGFzaC5vcmRlckJ5ID0gb3JkZXJCeTtcbiAgICBsb2Rhc2gub3ZlciA9IG92ZXI7XG4gICAgbG9kYXNoLm92ZXJBcmdzID0gb3ZlckFyZ3M7XG4gICAgbG9kYXNoLm92ZXJFdmVyeSA9IG92ZXJFdmVyeTtcbiAgICBsb2Rhc2gub3ZlclNvbWUgPSBvdmVyU29tZTtcbiAgICBsb2Rhc2gucGFydGlhbCA9IHBhcnRpYWw7XG4gICAgbG9kYXNoLnBhcnRpYWxSaWdodCA9IHBhcnRpYWxSaWdodDtcbiAgICBsb2Rhc2gucGFydGl0aW9uID0gcGFydGl0aW9uO1xuICAgIGxvZGFzaC5waWNrID0gcGljaztcbiAgICBsb2Rhc2gucGlja0J5ID0gcGlja0J5O1xuICAgIGxvZGFzaC5wcm9wZXJ0eSA9IHByb3BlcnR5O1xuICAgIGxvZGFzaC5wcm9wZXJ0eU9mID0gcHJvcGVydHlPZjtcbiAgICBsb2Rhc2gucHVsbCA9IHB1bGw7XG4gICAgbG9kYXNoLnB1bGxBbGwgPSBwdWxsQWxsO1xuICAgIGxvZGFzaC5wdWxsQWxsQnkgPSBwdWxsQWxsQnk7XG4gICAgbG9kYXNoLnB1bGxBbGxXaXRoID0gcHVsbEFsbFdpdGg7XG4gICAgbG9kYXNoLnB1bGxBdCA9IHB1bGxBdDtcbiAgICBsb2Rhc2gucmFuZ2UgPSByYW5nZTtcbiAgICBsb2Rhc2gucmFuZ2VSaWdodCA9IHJhbmdlUmlnaHQ7XG4gICAgbG9kYXNoLnJlYXJnID0gcmVhcmc7XG4gICAgbG9kYXNoLnJlamVjdCA9IHJlamVjdDtcbiAgICBsb2Rhc2gucmVtb3ZlID0gcmVtb3ZlO1xuICAgIGxvZGFzaC5yZXN0ID0gcmVzdDtcbiAgICBsb2Rhc2gucmV2ZXJzZSA9IHJldmVyc2U7XG4gICAgbG9kYXNoLnNhbXBsZVNpemUgPSBzYW1wbGVTaXplO1xuICAgIGxvZGFzaC5zZXQgPSBzZXQ7XG4gICAgbG9kYXNoLnNldFdpdGggPSBzZXRXaXRoO1xuICAgIGxvZGFzaC5zaHVmZmxlID0gc2h1ZmZsZTtcbiAgICBsb2Rhc2guc2xpY2UgPSBzbGljZTtcbiAgICBsb2Rhc2guc29ydEJ5ID0gc29ydEJ5O1xuICAgIGxvZGFzaC5zb3J0ZWRVbmlxID0gc29ydGVkVW5pcTtcbiAgICBsb2Rhc2guc29ydGVkVW5pcUJ5ID0gc29ydGVkVW5pcUJ5O1xuICAgIGxvZGFzaC5zcGxpdCA9IHNwbGl0O1xuICAgIGxvZGFzaC5zcHJlYWQgPSBzcHJlYWQ7XG4gICAgbG9kYXNoLnRhaWwgPSB0YWlsO1xuICAgIGxvZGFzaC50YWtlID0gdGFrZTtcbiAgICBsb2Rhc2gudGFrZVJpZ2h0ID0gdGFrZVJpZ2h0O1xuICAgIGxvZGFzaC50YWtlUmlnaHRXaGlsZSA9IHRha2VSaWdodFdoaWxlO1xuICAgIGxvZGFzaC50YWtlV2hpbGUgPSB0YWtlV2hpbGU7XG4gICAgbG9kYXNoLnRhcCA9IHRhcDtcbiAgICBsb2Rhc2gudGhyb3R0bGUgPSB0aHJvdHRsZTtcbiAgICBsb2Rhc2gudGhydSA9IHRocnU7XG4gICAgbG9kYXNoLnRvQXJyYXkgPSB0b0FycmF5O1xuICAgIGxvZGFzaC50b1BhaXJzID0gdG9QYWlycztcbiAgICBsb2Rhc2gudG9QYWlyc0luID0gdG9QYWlyc0luO1xuICAgIGxvZGFzaC50b1BhdGggPSB0b1BhdGg7XG4gICAgbG9kYXNoLnRvUGxhaW5PYmplY3QgPSB0b1BsYWluT2JqZWN0O1xuICAgIGxvZGFzaC50cmFuc2Zvcm0gPSB0cmFuc2Zvcm07XG4gICAgbG9kYXNoLnVuYXJ5ID0gdW5hcnk7XG4gICAgbG9kYXNoLnVuaW9uID0gdW5pb247XG4gICAgbG9kYXNoLnVuaW9uQnkgPSB1bmlvbkJ5O1xuICAgIGxvZGFzaC51bmlvbldpdGggPSB1bmlvbldpdGg7XG4gICAgbG9kYXNoLnVuaXEgPSB1bmlxO1xuICAgIGxvZGFzaC51bmlxQnkgPSB1bmlxQnk7XG4gICAgbG9kYXNoLnVuaXFXaXRoID0gdW5pcVdpdGg7XG4gICAgbG9kYXNoLnVuc2V0ID0gdW5zZXQ7XG4gICAgbG9kYXNoLnVuemlwID0gdW56aXA7XG4gICAgbG9kYXNoLnVuemlwV2l0aCA9IHVuemlwV2l0aDtcbiAgICBsb2Rhc2gudXBkYXRlID0gdXBkYXRlO1xuICAgIGxvZGFzaC51cGRhdGVXaXRoID0gdXBkYXRlV2l0aDtcbiAgICBsb2Rhc2gudmFsdWVzID0gdmFsdWVzO1xuICAgIGxvZGFzaC52YWx1ZXNJbiA9IHZhbHVlc0luO1xuICAgIGxvZGFzaC53aXRob3V0ID0gd2l0aG91dDtcbiAgICBsb2Rhc2gud29yZHMgPSB3b3JkcztcbiAgICBsb2Rhc2gud3JhcCA9IHdyYXA7XG4gICAgbG9kYXNoLnhvciA9IHhvcjtcbiAgICBsb2Rhc2gueG9yQnkgPSB4b3JCeTtcbiAgICBsb2Rhc2gueG9yV2l0aCA9IHhvcldpdGg7XG4gICAgbG9kYXNoLnppcCA9IHppcDtcbiAgICBsb2Rhc2guemlwT2JqZWN0ID0gemlwT2JqZWN0O1xuICAgIGxvZGFzaC56aXBPYmplY3REZWVwID0gemlwT2JqZWN0RGVlcDtcbiAgICBsb2Rhc2guemlwV2l0aCA9IHppcFdpdGg7XG5cbiAgICAvLyBBZGQgYWxpYXNlcy5cbiAgICBsb2Rhc2guZW50cmllcyA9IHRvUGFpcnM7XG4gICAgbG9kYXNoLmVudHJpZXNJbiA9IHRvUGFpcnNJbjtcbiAgICBsb2Rhc2guZXh0ZW5kID0gYXNzaWduSW47XG4gICAgbG9kYXNoLmV4dGVuZFdpdGggPSBhc3NpZ25JbldpdGg7XG5cbiAgICAvLyBBZGQgbWV0aG9kcyB0byBgbG9kYXNoLnByb3RvdHlwZWAuXG4gICAgbWl4aW4obG9kYXNoLCBsb2Rhc2gpO1xuXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLy8gQWRkIG1ldGhvZHMgdGhhdCByZXR1cm4gdW53cmFwcGVkIHZhbHVlcyBpbiBjaGFpbiBzZXF1ZW5jZXMuXG4gICAgbG9kYXNoLmFkZCA9IGFkZDtcbiAgICBsb2Rhc2guYXR0ZW1wdCA9IGF0dGVtcHQ7XG4gICAgbG9kYXNoLmNhbWVsQ2FzZSA9IGNhbWVsQ2FzZTtcbiAgICBsb2Rhc2guY2FwaXRhbGl6ZSA9IGNhcGl0YWxpemU7XG4gICAgbG9kYXNoLmNlaWwgPSBjZWlsO1xuICAgIGxvZGFzaC5jbGFtcCA9IGNsYW1wO1xuICAgIGxvZGFzaC5jbG9uZSA9IGNsb25lO1xuICAgIGxvZGFzaC5jbG9uZURlZXAgPSBjbG9uZURlZXA7XG4gICAgbG9kYXNoLmNsb25lRGVlcFdpdGggPSBjbG9uZURlZXBXaXRoO1xuICAgIGxvZGFzaC5jbG9uZVdpdGggPSBjbG9uZVdpdGg7XG4gICAgbG9kYXNoLmNvbmZvcm1zVG8gPSBjb25mb3Jtc1RvO1xuICAgIGxvZGFzaC5kZWJ1cnIgPSBkZWJ1cnI7XG4gICAgbG9kYXNoLmRlZmF1bHRUbyA9IGRlZmF1bHRUbztcbiAgICBsb2Rhc2guZGl2aWRlID0gZGl2aWRlO1xuICAgIGxvZGFzaC5lbmRzV2l0aCA9IGVuZHNXaXRoO1xuICAgIGxvZGFzaC5lcSA9IGVxO1xuICAgIGxvZGFzaC5lc2NhcGUgPSBlc2NhcGU7XG4gICAgbG9kYXNoLmVzY2FwZVJlZ0V4cCA9IGVzY2FwZVJlZ0V4cDtcbiAgICBsb2Rhc2guZXZlcnkgPSBldmVyeTtcbiAgICBsb2Rhc2guZmluZCA9IGZpbmQ7XG4gICAgbG9kYXNoLmZpbmRJbmRleCA9IGZpbmRJbmRleDtcbiAgICBsb2Rhc2guZmluZEtleSA9IGZpbmRLZXk7XG4gICAgbG9kYXNoLmZpbmRMYXN0ID0gZmluZExhc3Q7XG4gICAgbG9kYXNoLmZpbmRMYXN0SW5kZXggPSBmaW5kTGFzdEluZGV4O1xuICAgIGxvZGFzaC5maW5kTGFzdEtleSA9IGZpbmRMYXN0S2V5O1xuICAgIGxvZGFzaC5mbG9vciA9IGZsb29yO1xuICAgIGxvZGFzaC5mb3JFYWNoID0gZm9yRWFjaDtcbiAgICBsb2Rhc2guZm9yRWFjaFJpZ2h0ID0gZm9yRWFjaFJpZ2h0O1xuICAgIGxvZGFzaC5mb3JJbiA9IGZvckluO1xuICAgIGxvZGFzaC5mb3JJblJpZ2h0ID0gZm9ySW5SaWdodDtcbiAgICBsb2Rhc2guZm9yT3duID0gZm9yT3duO1xuICAgIGxvZGFzaC5mb3JPd25SaWdodCA9IGZvck93blJpZ2h0O1xuICAgIGxvZGFzaC5nZXQgPSBnZXQ7XG4gICAgbG9kYXNoLmd0ID0gZ3Q7XG4gICAgbG9kYXNoLmd0ZSA9IGd0ZTtcbiAgICBsb2Rhc2guaGFzID0gaGFzO1xuICAgIGxvZGFzaC5oYXNJbiA9IGhhc0luO1xuICAgIGxvZGFzaC5oZWFkID0gaGVhZDtcbiAgICBsb2Rhc2guaWRlbnRpdHkgPSBpZGVudGl0eTtcbiAgICBsb2Rhc2guaW5jbHVkZXMgPSBpbmNsdWRlcztcbiAgICBsb2Rhc2guaW5kZXhPZiA9IGluZGV4T2Y7XG4gICAgbG9kYXNoLmluUmFuZ2UgPSBpblJhbmdlO1xuICAgIGxvZGFzaC5pbnZva2UgPSBpbnZva2U7XG4gICAgbG9kYXNoLmlzQXJndW1lbnRzID0gaXNBcmd1bWVudHM7XG4gICAgbG9kYXNoLmlzQXJyYXkgPSBpc0FycmF5O1xuICAgIGxvZGFzaC5pc0FycmF5QnVmZmVyID0gaXNBcnJheUJ1ZmZlcjtcbiAgICBsb2Rhc2guaXNBcnJheUxpa2UgPSBpc0FycmF5TGlrZTtcbiAgICBsb2Rhc2guaXNBcnJheUxpa2VPYmplY3QgPSBpc0FycmF5TGlrZU9iamVjdDtcbiAgICBsb2Rhc2guaXNCb29sZWFuID0gaXNCb29sZWFuO1xuICAgIGxvZGFzaC5pc0J1ZmZlciA9IGlzQnVmZmVyO1xuICAgIGxvZGFzaC5pc0RhdGUgPSBpc0RhdGU7XG4gICAgbG9kYXNoLmlzRWxlbWVudCA9IGlzRWxlbWVudDtcbiAgICBsb2Rhc2guaXNFbXB0eSA9IGlzRW1wdHk7XG4gICAgbG9kYXNoLmlzRXF1YWwgPSBpc0VxdWFsO1xuICAgIGxvZGFzaC5pc0VxdWFsV2l0aCA9IGlzRXF1YWxXaXRoO1xuICAgIGxvZGFzaC5pc0Vycm9yID0gaXNFcnJvcjtcbiAgICBsb2Rhc2guaXNGaW5pdGUgPSBpc0Zpbml0ZTtcbiAgICBsb2Rhc2guaXNGdW5jdGlvbiA9IGlzRnVuY3Rpb247XG4gICAgbG9kYXNoLmlzSW50ZWdlciA9IGlzSW50ZWdlcjtcbiAgICBsb2Rhc2guaXNMZW5ndGggPSBpc0xlbmd0aDtcbiAgICBsb2Rhc2guaXNNYXAgPSBpc01hcDtcbiAgICBsb2Rhc2guaXNNYXRjaCA9IGlzTWF0Y2g7XG4gICAgbG9kYXNoLmlzTWF0Y2hXaXRoID0gaXNNYXRjaFdpdGg7XG4gICAgbG9kYXNoLmlzTmFOID0gaXNOYU47XG4gICAgbG9kYXNoLmlzTmF0aXZlID0gaXNOYXRpdmU7XG4gICAgbG9kYXNoLmlzTmlsID0gaXNOaWw7XG4gICAgbG9kYXNoLmlzTnVsbCA9IGlzTnVsbDtcbiAgICBsb2Rhc2guaXNOdW1iZXIgPSBpc051bWJlcjtcbiAgICBsb2Rhc2guaXNPYmplY3QgPSBpc09iamVjdDtcbiAgICBsb2Rhc2guaXNPYmplY3RMaWtlID0gaXNPYmplY3RMaWtlO1xuICAgIGxvZGFzaC5pc1BsYWluT2JqZWN0ID0gaXNQbGFpbk9iamVjdDtcbiAgICBsb2Rhc2guaXNSZWdFeHAgPSBpc1JlZ0V4cDtcbiAgICBsb2Rhc2guaXNTYWZlSW50ZWdlciA9IGlzU2FmZUludGVnZXI7XG4gICAgbG9kYXNoLmlzU2V0ID0gaXNTZXQ7XG4gICAgbG9kYXNoLmlzU3RyaW5nID0gaXNTdHJpbmc7XG4gICAgbG9kYXNoLmlzU3ltYm9sID0gaXNTeW1ib2w7XG4gICAgbG9kYXNoLmlzVHlwZWRBcnJheSA9IGlzVHlwZWRBcnJheTtcbiAgICBsb2Rhc2guaXNVbmRlZmluZWQgPSBpc1VuZGVmaW5lZDtcbiAgICBsb2Rhc2guaXNXZWFrTWFwID0gaXNXZWFrTWFwO1xuICAgIGxvZGFzaC5pc1dlYWtTZXQgPSBpc1dlYWtTZXQ7XG4gICAgbG9kYXNoLmpvaW4gPSBqb2luO1xuICAgIGxvZGFzaC5rZWJhYkNhc2UgPSBrZWJhYkNhc2U7XG4gICAgbG9kYXNoLmxhc3QgPSBsYXN0O1xuICAgIGxvZGFzaC5sYXN0SW5kZXhPZiA9IGxhc3RJbmRleE9mO1xuICAgIGxvZGFzaC5sb3dlckNhc2UgPSBsb3dlckNhc2U7XG4gICAgbG9kYXNoLmxvd2VyRmlyc3QgPSBsb3dlckZpcnN0O1xuICAgIGxvZGFzaC5sdCA9IGx0O1xuICAgIGxvZGFzaC5sdGUgPSBsdGU7XG4gICAgbG9kYXNoLm1heCA9IG1heDtcbiAgICBsb2Rhc2gubWF4QnkgPSBtYXhCeTtcbiAgICBsb2Rhc2gubWVhbiA9IG1lYW47XG4gICAgbG9kYXNoLm1lYW5CeSA9IG1lYW5CeTtcbiAgICBsb2Rhc2gubWluID0gbWluO1xuICAgIGxvZGFzaC5taW5CeSA9IG1pbkJ5O1xuICAgIGxvZGFzaC5zdHViQXJyYXkgPSBzdHViQXJyYXk7XG4gICAgbG9kYXNoLnN0dWJGYWxzZSA9IHN0dWJGYWxzZTtcbiAgICBsb2Rhc2guc3R1Yk9iamVjdCA9IHN0dWJPYmplY3Q7XG4gICAgbG9kYXNoLnN0dWJTdHJpbmcgPSBzdHViU3RyaW5nO1xuICAgIGxvZGFzaC5zdHViVHJ1ZSA9IHN0dWJUcnVlO1xuICAgIGxvZGFzaC5tdWx0aXBseSA9IG11bHRpcGx5O1xuICAgIGxvZGFzaC5udGggPSBudGg7XG4gICAgbG9kYXNoLm5vQ29uZmxpY3QgPSBub0NvbmZsaWN0O1xuICAgIGxvZGFzaC5ub29wID0gbm9vcDtcbiAgICBsb2Rhc2gubm93ID0gbm93O1xuICAgIGxvZGFzaC5wYWQgPSBwYWQ7XG4gICAgbG9kYXNoLnBhZEVuZCA9IHBhZEVuZDtcbiAgICBsb2Rhc2gucGFkU3RhcnQgPSBwYWRTdGFydDtcbiAgICBsb2Rhc2gucGFyc2VJbnQgPSBwYXJzZUludDtcbiAgICBsb2Rhc2gucmFuZG9tID0gcmFuZG9tO1xuICAgIGxvZGFzaC5yZWR1Y2UgPSByZWR1Y2U7XG4gICAgbG9kYXNoLnJlZHVjZVJpZ2h0ID0gcmVkdWNlUmlnaHQ7XG4gICAgbG9kYXNoLnJlcGVhdCA9IHJlcGVhdDtcbiAgICBsb2Rhc2gucmVwbGFjZSA9IHJlcGxhY2U7XG4gICAgbG9kYXNoLnJlc3VsdCA9IHJlc3VsdDtcbiAgICBsb2Rhc2gucm91bmQgPSByb3VuZDtcbiAgICBsb2Rhc2gucnVuSW5Db250ZXh0ID0gcnVuSW5Db250ZXh0O1xuICAgIGxvZGFzaC5zYW1wbGUgPSBzYW1wbGU7XG4gICAgbG9kYXNoLnNpemUgPSBzaXplO1xuICAgIGxvZGFzaC5zbmFrZUNhc2UgPSBzbmFrZUNhc2U7XG4gICAgbG9kYXNoLnNvbWUgPSBzb21lO1xuICAgIGxvZGFzaC5zb3J0ZWRJbmRleCA9IHNvcnRlZEluZGV4O1xuICAgIGxvZGFzaC5zb3J0ZWRJbmRleEJ5ID0gc29ydGVkSW5kZXhCeTtcbiAgICBsb2Rhc2guc29ydGVkSW5kZXhPZiA9IHNvcnRlZEluZGV4T2Y7XG4gICAgbG9kYXNoLnNvcnRlZExhc3RJbmRleCA9IHNvcnRlZExhc3RJbmRleDtcbiAgICBsb2Rhc2guc29ydGVkTGFzdEluZGV4QnkgPSBzb3J0ZWRMYXN0SW5kZXhCeTtcbiAgICBsb2Rhc2guc29ydGVkTGFzdEluZGV4T2YgPSBzb3J0ZWRMYXN0SW5kZXhPZjtcbiAgICBsb2Rhc2guc3RhcnRDYXNlID0gc3RhcnRDYXNlO1xuICAgIGxvZGFzaC5zdGFydHNXaXRoID0gc3RhcnRzV2l0aDtcbiAgICBsb2Rhc2guc3VidHJhY3QgPSBzdWJ0cmFjdDtcbiAgICBsb2Rhc2guc3VtID0gc3VtO1xuICAgIGxvZGFzaC5zdW1CeSA9IHN1bUJ5O1xuICAgIGxvZGFzaC50ZW1wbGF0ZSA9IHRlbXBsYXRlO1xuICAgIGxvZGFzaC50aW1lcyA9IHRpbWVzO1xuICAgIGxvZGFzaC50b0Zpbml0ZSA9IHRvRmluaXRlO1xuICAgIGxvZGFzaC50b0ludGVnZXIgPSB0b0ludGVnZXI7XG4gICAgbG9kYXNoLnRvTGVuZ3RoID0gdG9MZW5ndGg7XG4gICAgbG9kYXNoLnRvTG93ZXIgPSB0b0xvd2VyO1xuICAgIGxvZGFzaC50b051bWJlciA9IHRvTnVtYmVyO1xuICAgIGxvZGFzaC50b1NhZmVJbnRlZ2VyID0gdG9TYWZlSW50ZWdlcjtcbiAgICBsb2Rhc2gudG9TdHJpbmcgPSB0b1N0cmluZztcbiAgICBsb2Rhc2gudG9VcHBlciA9IHRvVXBwZXI7XG4gICAgbG9kYXNoLnRyaW0gPSB0cmltO1xuICAgIGxvZGFzaC50cmltRW5kID0gdHJpbUVuZDtcbiAgICBsb2Rhc2gudHJpbVN0YXJ0ID0gdHJpbVN0YXJ0O1xuICAgIGxvZGFzaC50cnVuY2F0ZSA9IHRydW5jYXRlO1xuICAgIGxvZGFzaC51bmVzY2FwZSA9IHVuZXNjYXBlO1xuICAgIGxvZGFzaC51bmlxdWVJZCA9IHVuaXF1ZUlkO1xuICAgIGxvZGFzaC51cHBlckNhc2UgPSB1cHBlckNhc2U7XG4gICAgbG9kYXNoLnVwcGVyRmlyc3QgPSB1cHBlckZpcnN0O1xuXG4gICAgLy8gQWRkIGFsaWFzZXMuXG4gICAgbG9kYXNoLmVhY2ggPSBmb3JFYWNoO1xuICAgIGxvZGFzaC5lYWNoUmlnaHQgPSBmb3JFYWNoUmlnaHQ7XG4gICAgbG9kYXNoLmZpcnN0ID0gaGVhZDtcblxuICAgIG1peGluKGxvZGFzaCwgKGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHNvdXJjZSA9IHt9O1xuICAgICAgYmFzZUZvck93bihsb2Rhc2gsIGZ1bmN0aW9uKGZ1bmMsIG1ldGhvZE5hbWUpIHtcbiAgICAgICAgaWYgKCFoYXNPd25Qcm9wZXJ0eS5jYWxsKGxvZGFzaC5wcm90b3R5cGUsIG1ldGhvZE5hbWUpKSB7XG4gICAgICAgICAgc291cmNlW21ldGhvZE5hbWVdID0gZnVuYztcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gc291cmNlO1xuICAgIH0oKSksIHsgJ2NoYWluJzogZmFsc2UgfSk7XG5cbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2VtYW50aWMgdmVyc2lvbiBudW1iZXIuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqL1xuICAgIGxvZGFzaC5WRVJTSU9OID0gVkVSU0lPTjtcblxuICAgIC8vIEFzc2lnbiBkZWZhdWx0IHBsYWNlaG9sZGVycy5cbiAgICBhcnJheUVhY2goWydiaW5kJywgJ2JpbmRLZXknLCAnY3VycnknLCAnY3VycnlSaWdodCcsICdwYXJ0aWFsJywgJ3BhcnRpYWxSaWdodCddLCBmdW5jdGlvbihtZXRob2ROYW1lKSB7XG4gICAgICBsb2Rhc2hbbWV0aG9kTmFtZV0ucGxhY2Vob2xkZXIgPSBsb2Rhc2g7XG4gICAgfSk7XG5cbiAgICAvLyBBZGQgYExhenlXcmFwcGVyYCBtZXRob2RzIGZvciBgXy5kcm9wYCBhbmQgYF8udGFrZWAgdmFyaWFudHMuXG4gICAgYXJyYXlFYWNoKFsnZHJvcCcsICd0YWtlJ10sIGZ1bmN0aW9uKG1ldGhvZE5hbWUsIGluZGV4KSB7XG4gICAgICBMYXp5V3JhcHBlci5wcm90b3R5cGVbbWV0aG9kTmFtZV0gPSBmdW5jdGlvbihuKSB7XG4gICAgICAgIG4gPSBuID09PSB1bmRlZmluZWQgPyAxIDogbmF0aXZlTWF4KHRvSW50ZWdlcihuKSwgMCk7XG5cbiAgICAgICAgdmFyIHJlc3VsdCA9ICh0aGlzLl9fZmlsdGVyZWRfXyAmJiAhaW5kZXgpXG4gICAgICAgICAgPyBuZXcgTGF6eVdyYXBwZXIodGhpcylcbiAgICAgICAgICA6IHRoaXMuY2xvbmUoKTtcblxuICAgICAgICBpZiAocmVzdWx0Ll9fZmlsdGVyZWRfXykge1xuICAgICAgICAgIHJlc3VsdC5fX3Rha2VDb3VudF9fID0gbmF0aXZlTWluKG4sIHJlc3VsdC5fX3Rha2VDb3VudF9fKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN1bHQuX192aWV3c19fLnB1c2goe1xuICAgICAgICAgICAgJ3NpemUnOiBuYXRpdmVNaW4obiwgTUFYX0FSUkFZX0xFTkdUSCksXG4gICAgICAgICAgICAndHlwZSc6IG1ldGhvZE5hbWUgKyAocmVzdWx0Ll9fZGlyX18gPCAwID8gJ1JpZ2h0JyA6ICcnKVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9O1xuXG4gICAgICBMYXp5V3JhcHBlci5wcm90b3R5cGVbbWV0aG9kTmFtZSArICdSaWdodCddID0gZnVuY3Rpb24obikge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXZlcnNlKClbbWV0aG9kTmFtZV0obikucmV2ZXJzZSgpO1xuICAgICAgfTtcbiAgICB9KTtcblxuICAgIC8vIEFkZCBgTGF6eVdyYXBwZXJgIG1ldGhvZHMgdGhhdCBhY2NlcHQgYW4gYGl0ZXJhdGVlYCB2YWx1ZS5cbiAgICBhcnJheUVhY2goWydmaWx0ZXInLCAnbWFwJywgJ3Rha2VXaGlsZSddLCBmdW5jdGlvbihtZXRob2ROYW1lLCBpbmRleCkge1xuICAgICAgdmFyIHR5cGUgPSBpbmRleCArIDEsXG4gICAgICAgICAgaXNGaWx0ZXIgPSB0eXBlID09IExBWllfRklMVEVSX0ZMQUcgfHwgdHlwZSA9PSBMQVpZX1dISUxFX0ZMQUc7XG5cbiAgICAgIExhenlXcmFwcGVyLnByb3RvdHlwZVttZXRob2ROYW1lXSA9IGZ1bmN0aW9uKGl0ZXJhdGVlKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSB0aGlzLmNsb25lKCk7XG4gICAgICAgIHJlc3VsdC5fX2l0ZXJhdGVlc19fLnB1c2goe1xuICAgICAgICAgICdpdGVyYXRlZSc6IGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCAzKSxcbiAgICAgICAgICAndHlwZSc6IHR5cGVcbiAgICAgICAgfSk7XG4gICAgICAgIHJlc3VsdC5fX2ZpbHRlcmVkX18gPSByZXN1bHQuX19maWx0ZXJlZF9fIHx8IGlzRmlsdGVyO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfTtcbiAgICB9KTtcblxuICAgIC8vIEFkZCBgTGF6eVdyYXBwZXJgIG1ldGhvZHMgZm9yIGBfLmhlYWRgIGFuZCBgXy5sYXN0YC5cbiAgICBhcnJheUVhY2goWydoZWFkJywgJ2xhc3QnXSwgZnVuY3Rpb24obWV0aG9kTmFtZSwgaW5kZXgpIHtcbiAgICAgIHZhciB0YWtlTmFtZSA9ICd0YWtlJyArIChpbmRleCA/ICdSaWdodCcgOiAnJyk7XG5cbiAgICAgIExhenlXcmFwcGVyLnByb3RvdHlwZVttZXRob2ROYW1lXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpc1t0YWtlTmFtZV0oMSkudmFsdWUoKVswXTtcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICAvLyBBZGQgYExhenlXcmFwcGVyYCBtZXRob2RzIGZvciBgXy5pbml0aWFsYCBhbmQgYF8udGFpbGAuXG4gICAgYXJyYXlFYWNoKFsnaW5pdGlhbCcsICd0YWlsJ10sIGZ1bmN0aW9uKG1ldGhvZE5hbWUsIGluZGV4KSB7XG4gICAgICB2YXIgZHJvcE5hbWUgPSAnZHJvcCcgKyAoaW5kZXggPyAnJyA6ICdSaWdodCcpO1xuXG4gICAgICBMYXp5V3JhcHBlci5wcm90b3R5cGVbbWV0aG9kTmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19maWx0ZXJlZF9fID8gbmV3IExhenlXcmFwcGVyKHRoaXMpIDogdGhpc1tkcm9wTmFtZV0oMSk7XG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgTGF6eVdyYXBwZXIucHJvdG90eXBlLmNvbXBhY3QgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmZpbHRlcihpZGVudGl0eSk7XG4gICAgfTtcblxuICAgIExhenlXcmFwcGVyLnByb3RvdHlwZS5maW5kID0gZnVuY3Rpb24ocHJlZGljYXRlKSB7XG4gICAgICByZXR1cm4gdGhpcy5maWx0ZXIocHJlZGljYXRlKS5oZWFkKCk7XG4gICAgfTtcblxuICAgIExhenlXcmFwcGVyLnByb3RvdHlwZS5maW5kTGFzdCA9IGZ1bmN0aW9uKHByZWRpY2F0ZSkge1xuICAgICAgcmV0dXJuIHRoaXMucmV2ZXJzZSgpLmZpbmQocHJlZGljYXRlKTtcbiAgICB9O1xuXG4gICAgTGF6eVdyYXBwZXIucHJvdG90eXBlLmludm9rZU1hcCA9IGJhc2VSZXN0KGZ1bmN0aW9uKHBhdGgsIGFyZ3MpIHtcbiAgICAgIGlmICh0eXBlb2YgcGF0aCA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBuZXcgTGF6eVdyYXBwZXIodGhpcyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGJhc2VJbnZva2UodmFsdWUsIHBhdGgsIGFyZ3MpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBMYXp5V3JhcHBlci5wcm90b3R5cGUucmVqZWN0ID0gZnVuY3Rpb24ocHJlZGljYXRlKSB7XG4gICAgICByZXR1cm4gdGhpcy5maWx0ZXIobmVnYXRlKGdldEl0ZXJhdGVlKHByZWRpY2F0ZSkpKTtcbiAgICB9O1xuXG4gICAgTGF6eVdyYXBwZXIucHJvdG90eXBlLnNsaWNlID0gZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICAgICAgc3RhcnQgPSB0b0ludGVnZXIoc3RhcnQpO1xuXG4gICAgICB2YXIgcmVzdWx0ID0gdGhpcztcbiAgICAgIGlmIChyZXN1bHQuX19maWx0ZXJlZF9fICYmIChzdGFydCA+IDAgfHwgZW5kIDwgMCkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBMYXp5V3JhcHBlcihyZXN1bHQpO1xuICAgICAgfVxuICAgICAgaWYgKHN0YXJ0IDwgMCkge1xuICAgICAgICByZXN1bHQgPSByZXN1bHQudGFrZVJpZ2h0KC1zdGFydCk7XG4gICAgICB9IGVsc2UgaWYgKHN0YXJ0KSB7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdC5kcm9wKHN0YXJ0KTtcbiAgICAgIH1cbiAgICAgIGlmIChlbmQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBlbmQgPSB0b0ludGVnZXIoZW5kKTtcbiAgICAgICAgcmVzdWx0ID0gZW5kIDwgMCA/IHJlc3VsdC5kcm9wUmlnaHQoLWVuZCkgOiByZXN1bHQudGFrZShlbmQgLSBzdGFydCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cbiAgICBMYXp5V3JhcHBlci5wcm90b3R5cGUudGFrZVJpZ2h0V2hpbGUgPSBmdW5jdGlvbihwcmVkaWNhdGUpIHtcbiAgICAgIHJldHVybiB0aGlzLnJldmVyc2UoKS50YWtlV2hpbGUocHJlZGljYXRlKS5yZXZlcnNlKCk7XG4gICAgfTtcblxuICAgIExhenlXcmFwcGVyLnByb3RvdHlwZS50b0FycmF5ID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy50YWtlKE1BWF9BUlJBWV9MRU5HVEgpO1xuICAgIH07XG5cbiAgICAvLyBBZGQgYExhenlXcmFwcGVyYCBtZXRob2RzIHRvIGBsb2Rhc2gucHJvdG90eXBlYC5cbiAgICBiYXNlRm9yT3duKExhenlXcmFwcGVyLnByb3RvdHlwZSwgZnVuY3Rpb24oZnVuYywgbWV0aG9kTmFtZSkge1xuICAgICAgdmFyIGNoZWNrSXRlcmF0ZWUgPSAvXig/OmZpbHRlcnxmaW5kfG1hcHxyZWplY3QpfFdoaWxlJC8udGVzdChtZXRob2ROYW1lKSxcbiAgICAgICAgICBpc1Rha2VyID0gL14oPzpoZWFkfGxhc3QpJC8udGVzdChtZXRob2ROYW1lKSxcbiAgICAgICAgICBsb2Rhc2hGdW5jID0gbG9kYXNoW2lzVGFrZXIgPyAoJ3Rha2UnICsgKG1ldGhvZE5hbWUgPT0gJ2xhc3QnID8gJ1JpZ2h0JyA6ICcnKSkgOiBtZXRob2ROYW1lXSxcbiAgICAgICAgICByZXRVbndyYXBwZWQgPSBpc1Rha2VyIHx8IC9eZmluZC8udGVzdChtZXRob2ROYW1lKTtcblxuICAgICAgaWYgKCFsb2Rhc2hGdW5jKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGxvZGFzaC5wcm90b3R5cGVbbWV0aG9kTmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5fX3dyYXBwZWRfXyxcbiAgICAgICAgICAgIGFyZ3MgPSBpc1Rha2VyID8gWzFdIDogYXJndW1lbnRzLFxuICAgICAgICAgICAgaXNMYXp5ID0gdmFsdWUgaW5zdGFuY2VvZiBMYXp5V3JhcHBlcixcbiAgICAgICAgICAgIGl0ZXJhdGVlID0gYXJnc1swXSxcbiAgICAgICAgICAgIHVzZUxhenkgPSBpc0xhenkgfHwgaXNBcnJheSh2YWx1ZSk7XG5cbiAgICAgICAgdmFyIGludGVyY2VwdG9yID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICB2YXIgcmVzdWx0ID0gbG9kYXNoRnVuYy5hcHBseShsb2Rhc2gsIGFycmF5UHVzaChbdmFsdWVdLCBhcmdzKSk7XG4gICAgICAgICAgcmV0dXJuIChpc1Rha2VyICYmIGNoYWluQWxsKSA/IHJlc3VsdFswXSA6IHJlc3VsdDtcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAodXNlTGF6eSAmJiBjaGVja0l0ZXJhdGVlICYmIHR5cGVvZiBpdGVyYXRlZSA9PSAnZnVuY3Rpb24nICYmIGl0ZXJhdGVlLmxlbmd0aCAhPSAxKSB7XG4gICAgICAgICAgLy8gQXZvaWQgbGF6eSB1c2UgaWYgdGhlIGl0ZXJhdGVlIGhhcyBhIFwibGVuZ3RoXCIgdmFsdWUgb3RoZXIgdGhhbiBgMWAuXG4gICAgICAgICAgaXNMYXp5ID0gdXNlTGF6eSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjaGFpbkFsbCA9IHRoaXMuX19jaGFpbl9fLFxuICAgICAgICAgICAgaXNIeWJyaWQgPSAhIXRoaXMuX19hY3Rpb25zX18ubGVuZ3RoLFxuICAgICAgICAgICAgaXNVbndyYXBwZWQgPSByZXRVbndyYXBwZWQgJiYgIWNoYWluQWxsLFxuICAgICAgICAgICAgb25seUxhenkgPSBpc0xhenkgJiYgIWlzSHlicmlkO1xuXG4gICAgICAgIGlmICghcmV0VW53cmFwcGVkICYmIHVzZUxhenkpIHtcbiAgICAgICAgICB2YWx1ZSA9IG9ubHlMYXp5ID8gdmFsdWUgOiBuZXcgTGF6eVdyYXBwZXIodGhpcyk7XG4gICAgICAgICAgdmFyIHJlc3VsdCA9IGZ1bmMuYXBwbHkodmFsdWUsIGFyZ3MpO1xuICAgICAgICAgIHJlc3VsdC5fX2FjdGlvbnNfXy5wdXNoKHsgJ2Z1bmMnOiB0aHJ1LCAnYXJncyc6IFtpbnRlcmNlcHRvcl0sICd0aGlzQXJnJzogdW5kZWZpbmVkIH0pO1xuICAgICAgICAgIHJldHVybiBuZXcgTG9kYXNoV3JhcHBlcihyZXN1bHQsIGNoYWluQWxsKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNVbndyYXBwZWQgJiYgb25seUxhenkpIHtcbiAgICAgICAgICByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQgPSB0aGlzLnRocnUoaW50ZXJjZXB0b3IpO1xuICAgICAgICByZXR1cm4gaXNVbndyYXBwZWQgPyAoaXNUYWtlciA/IHJlc3VsdC52YWx1ZSgpWzBdIDogcmVzdWx0LnZhbHVlKCkpIDogcmVzdWx0O1xuICAgICAgfTtcbiAgICB9KTtcblxuICAgIC8vIEFkZCBgQXJyYXlgIG1ldGhvZHMgdG8gYGxvZGFzaC5wcm90b3R5cGVgLlxuICAgIGFycmF5RWFjaChbJ3BvcCcsICdwdXNoJywgJ3NoaWZ0JywgJ3NvcnQnLCAnc3BsaWNlJywgJ3Vuc2hpZnQnXSwgZnVuY3Rpb24obWV0aG9kTmFtZSkge1xuICAgICAgdmFyIGZ1bmMgPSBhcnJheVByb3RvW21ldGhvZE5hbWVdLFxuICAgICAgICAgIGNoYWluTmFtZSA9IC9eKD86cHVzaHxzb3J0fHVuc2hpZnQpJC8udGVzdChtZXRob2ROYW1lKSA/ICd0YXAnIDogJ3RocnUnLFxuICAgICAgICAgIHJldFVud3JhcHBlZCA9IC9eKD86cG9wfHNoaWZ0KSQvLnRlc3QobWV0aG9kTmFtZSk7XG5cbiAgICAgIGxvZGFzaC5wcm90b3R5cGVbbWV0aG9kTmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICAgIGlmIChyZXRVbndyYXBwZWQgJiYgIXRoaXMuX19jaGFpbl9fKSB7XG4gICAgICAgICAgdmFyIHZhbHVlID0gdGhpcy52YWx1ZSgpO1xuICAgICAgICAgIHJldHVybiBmdW5jLmFwcGx5KGlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbXSwgYXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXNbY2hhaW5OYW1lXShmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgIHJldHVybiBmdW5jLmFwcGx5KGlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbXSwgYXJncyk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICB9KTtcblxuICAgIC8vIE1hcCBtaW5pZmllZCBtZXRob2QgbmFtZXMgdG8gdGhlaXIgcmVhbCBuYW1lcy5cbiAgICBiYXNlRm9yT3duKExhenlXcmFwcGVyLnByb3RvdHlwZSwgZnVuY3Rpb24oZnVuYywgbWV0aG9kTmFtZSkge1xuICAgICAgdmFyIGxvZGFzaEZ1bmMgPSBsb2Rhc2hbbWV0aG9kTmFtZV07XG4gICAgICBpZiAobG9kYXNoRnVuYykge1xuICAgICAgICB2YXIga2V5ID0gbG9kYXNoRnVuYy5uYW1lICsgJyc7XG4gICAgICAgIGlmICghaGFzT3duUHJvcGVydHkuY2FsbChyZWFsTmFtZXMsIGtleSkpIHtcbiAgICAgICAgICByZWFsTmFtZXNba2V5XSA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIHJlYWxOYW1lc1trZXldLnB1c2goeyAnbmFtZSc6IG1ldGhvZE5hbWUsICdmdW5jJzogbG9kYXNoRnVuYyB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJlYWxOYW1lc1tjcmVhdGVIeWJyaWQodW5kZWZpbmVkLCBXUkFQX0JJTkRfS0VZX0ZMQUcpLm5hbWVdID0gW3tcbiAgICAgICduYW1lJzogJ3dyYXBwZXInLFxuICAgICAgJ2Z1bmMnOiB1bmRlZmluZWRcbiAgICB9XTtcblxuICAgIC8vIEFkZCBtZXRob2RzIHRvIGBMYXp5V3JhcHBlcmAuXG4gICAgTGF6eVdyYXBwZXIucHJvdG90eXBlLmNsb25lID0gbGF6eUNsb25lO1xuICAgIExhenlXcmFwcGVyLnByb3RvdHlwZS5yZXZlcnNlID0gbGF6eVJldmVyc2U7XG4gICAgTGF6eVdyYXBwZXIucHJvdG90eXBlLnZhbHVlID0gbGF6eVZhbHVlO1xuXG4gICAgLy8gQWRkIGNoYWluIHNlcXVlbmNlIG1ldGhvZHMgdG8gdGhlIGBsb2Rhc2hgIHdyYXBwZXIuXG4gICAgbG9kYXNoLnByb3RvdHlwZS5hdCA9IHdyYXBwZXJBdDtcbiAgICBsb2Rhc2gucHJvdG90eXBlLmNoYWluID0gd3JhcHBlckNoYWluO1xuICAgIGxvZGFzaC5wcm90b3R5cGUuY29tbWl0ID0gd3JhcHBlckNvbW1pdDtcbiAgICBsb2Rhc2gucHJvdG90eXBlLm5leHQgPSB3cmFwcGVyTmV4dDtcbiAgICBsb2Rhc2gucHJvdG90eXBlLnBsYW50ID0gd3JhcHBlclBsYW50O1xuICAgIGxvZGFzaC5wcm90b3R5cGUucmV2ZXJzZSA9IHdyYXBwZXJSZXZlcnNlO1xuICAgIGxvZGFzaC5wcm90b3R5cGUudG9KU09OID0gbG9kYXNoLnByb3RvdHlwZS52YWx1ZU9mID0gbG9kYXNoLnByb3RvdHlwZS52YWx1ZSA9IHdyYXBwZXJWYWx1ZTtcblxuICAgIC8vIEFkZCBsYXp5IGFsaWFzZXMuXG4gICAgbG9kYXNoLnByb3RvdHlwZS5maXJzdCA9IGxvZGFzaC5wcm90b3R5cGUuaGVhZDtcblxuICAgIGlmIChzeW1JdGVyYXRvcikge1xuICAgICAgbG9kYXNoLnByb3RvdHlwZVtzeW1JdGVyYXRvcl0gPSB3cmFwcGVyVG9JdGVyYXRvcjtcbiAgICB9XG4gICAgcmV0dXJuIGxvZGFzaDtcbiAgfSk7XG5cbiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgLy8gRXhwb3J0IGxvZGFzaC5cbiAgdmFyIF8gPSBydW5JbkNvbnRleHQoKTtcblxuICAvLyBTb21lIEFNRCBidWlsZCBvcHRpbWl6ZXJzLCBsaWtlIHIuanMsIGNoZWNrIGZvciBjb25kaXRpb24gcGF0dGVybnMgbGlrZTpcbiAgaWYgKHR5cGVvZiBkZWZpbmUgPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgZGVmaW5lLmFtZCA9PSAnb2JqZWN0JyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgLy8gRXhwb3NlIExvZGFzaCBvbiB0aGUgZ2xvYmFsIG9iamVjdCB0byBwcmV2ZW50IGVycm9ycyB3aGVuIExvZGFzaCBpc1xuICAgIC8vIGxvYWRlZCBieSBhIHNjcmlwdCB0YWcgaW4gdGhlIHByZXNlbmNlIG9mIGFuIEFNRCBsb2FkZXIuXG4gICAgLy8gU2VlIGh0dHA6Ly9yZXF1aXJlanMub3JnL2RvY3MvZXJyb3JzLmh0bWwjbWlzbWF0Y2ggZm9yIG1vcmUgZGV0YWlscy5cbiAgICAvLyBVc2UgYF8ubm9Db25mbGljdGAgdG8gcmVtb3ZlIExvZGFzaCBmcm9tIHRoZSBnbG9iYWwgb2JqZWN0LlxuICAgIHJvb3QuXyA9IF87XG5cbiAgICAvLyBEZWZpbmUgYXMgYW4gYW5vbnltb3VzIG1vZHVsZSBzbywgdGhyb3VnaCBwYXRoIG1hcHBpbmcsIGl0IGNhbiBiZVxuICAgIC8vIHJlZmVyZW5jZWQgYXMgdGhlIFwidW5kZXJzY29yZVwiIG1vZHVsZS5cbiAgICBkZWZpbmUoZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gXztcbiAgICB9KTtcbiAgfVxuICAvLyBDaGVjayBmb3IgYGV4cG9ydHNgIGFmdGVyIGBkZWZpbmVgIGluIGNhc2UgYSBidWlsZCBvcHRpbWl6ZXIgYWRkcyBpdC5cbiAgZWxzZSBpZiAoZnJlZU1vZHVsZSkge1xuICAgIC8vIEV4cG9ydCBmb3IgTm9kZS5qcy5cbiAgICAoZnJlZU1vZHVsZS5leHBvcnRzID0gXykuXyA9IF87XG4gICAgLy8gRXhwb3J0IGZvciBDb21tb25KUyBzdXBwb3J0LlxuICAgIGZyZWVFeHBvcnRzLl8gPSBfO1xuICB9XG4gIGVsc2Uge1xuICAgIC8vIEV4cG9ydCB0byB0aGUgZ2xvYmFsIG9iamVjdC5cbiAgICByb290Ll8gPSBfO1xuICB9XG59LmNhbGwodGhpcykpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/lodash/lodash.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/af.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/af.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Afrikaans [af]\n//! author : Werner Mollentze : https://github.com/wernerm\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var af = moment.defineLocale('af', {\n        months: 'Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des'.split('_'),\n        weekdays: 'Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag'.split(\n            '_'\n        ),\n        weekdaysShort: 'Son_Maa_Din_Woe_Don_Vry_Sat'.split('_'),\n        weekdaysMin: 'So_Ma_Di_Wo_Do_Vr_Sa'.split('_'),\n        meridiemParse: /vm|nm/i,\n        isPM: function (input) {\n            return /^nm$/i.test(input);\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 12) {\n                return isLower ? 'vm' : 'VM';\n            } else {\n                return isLower ? 'nm' : 'NM';\n            }\n        },\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Vandag om] LT',\n            nextDay: '[Môre om] LT',\n            nextWeek: 'dddd [om] LT',\n            lastDay: '[Gister om] LT',\n            lastWeek: '[Laas] dddd [om] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'oor %s',\n            past: '%s gelede',\n            s: \"'n paar sekondes\",\n            ss: '%d sekondes',\n            m: \"'n minuut\",\n            mm: '%d minute',\n            h: \"'n uur\",\n            hh: '%d ure',\n            d: \"'n dag\",\n            dd: '%d dae',\n            M: \"'n maand\",\n            MM: '%d maande',\n            y: \"'n jaar\",\n            yy: '%d jaar',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n        ordinal: function (number) {\n            return (\n                number +\n                (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')\n            ); // Thanks to Joris Röling : https://github.com/jjupiter\n        },\n        week: {\n            dow: 1, // Maandag is die eerste dag van die week.\n            doy: 4, // Die week wat die 4de Januarie bevat is die eerste week van die jaar.\n        },\n    });\n\n    return af;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hZi5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxvQ0FBb0MsSUFBSTtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZixTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2FmLmpzPzM0MjEiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEFmcmlrYWFucyBbYWZdXG4vLyEgYXV0aG9yIDogV2VybmVyIE1vbGxlbnR6ZSA6IGh0dHBzOi8vZ2l0aHViLmNvbS93ZXJuZXJtXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgYWYgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdhZicsIHtcbiAgICAgICAgbW9udGhzOiAnSmFudWFyaWVfRmVicnVhcmllX01hYXJ0X0FwcmlsX01laV9KdW5pZV9KdWxpZV9BdWd1c3R1c19TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3ZlbWJlcl9EZXNlbWJlcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdKYW5fRmViX01ydF9BcHJfTWVpX0p1bl9KdWxfQXVnX1NlcF9Pa3RfTm92X0Rlcycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICdTb25kYWdfTWFhbmRhZ19EaW5zZGFnX1dvZW5zZGFnX0RvbmRlcmRhZ19WcnlkYWdfU2F0ZXJkYWcnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdTb25fTWFhX0Rpbl9Xb2VfRG9uX1ZyeV9TYXQnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnU29fTWFfRGlfV29fRG9fVnJfU2EnLnNwbGl0KCdfJyksXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC92bXxubS9pLFxuICAgICAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiAvXm5tJC9pLnRlc3QoaW5wdXQpO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXJzLCBtaW51dGVzLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91cnMgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiBpc0xvd2VyID8gJ3ZtJyA6ICdWTSc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBpc0xvd2VyID8gJ25tJyA6ICdOTSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbVmFuZGFnIG9tXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW03DtHJlIG9tXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW29tXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW0dpc3RlciBvbV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbTGFhc10gZGRkZCBbb21dIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnb29yICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyBnZWxlZGUnLFxuICAgICAgICAgICAgczogXCInbiBwYWFyIHNla29uZGVzXCIsXG4gICAgICAgICAgICBzczogJyVkIHNla29uZGVzJyxcbiAgICAgICAgICAgIG06IFwiJ24gbWludXV0XCIsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0ZScsXG4gICAgICAgICAgICBoOiBcIiduIHV1clwiLFxuICAgICAgICAgICAgaGg6ICclZCB1cmUnLFxuICAgICAgICAgICAgZDogXCInbiBkYWdcIixcbiAgICAgICAgICAgIGRkOiAnJWQgZGFlJyxcbiAgICAgICAgICAgIE06IFwiJ24gbWFhbmRcIixcbiAgICAgICAgICAgIE1NOiAnJWQgbWFhbmRlJyxcbiAgICAgICAgICAgIHk6IFwiJ24gamFhclwiLFxuICAgICAgICAgICAgeXk6ICclZCBqYWFyJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KHN0ZXxkZSkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIG51bWJlciArXG4gICAgICAgICAgICAgICAgKG51bWJlciA9PT0gMSB8fCBudW1iZXIgPT09IDggfHwgbnVtYmVyID49IDIwID8gJ3N0ZScgOiAnZGUnKVxuICAgICAgICAgICAgKTsgLy8gVGhhbmtzIHRvIEpvcmlzIFLDtmxpbmcgOiBodHRwczovL2dpdGh1Yi5jb20vamp1cGl0ZXJcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNYWFuZGFnIGlzIGRpZSBlZXJzdGUgZGFnIHZhbiBkaWUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gRGllIHdlZWsgd2F0IGRpZSA0ZGUgSmFudWFyaWUgYmV2YXQgaXMgZGllIGVlcnN0ZSB3ZWVrIHZhbiBkaWUgamFhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBhZjtcblxufSkpKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/af.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/ar-dz.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/ar-dz.js ***!
  \*********************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Arabic (Algeria) [ar-dz]\n//! author : Amine Roukh: https://github.com/Amine27\n//! author : Abdel Said: https://github.com/abdelsaid\n//! author : Ahmed Elkhatib\n//! author : forabi https://github.com/forabi\n//! author : Noureddine LOUAHEDJ : https://github.com/noureddinem\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var pluralForm = function (n) {\n            return n === 0\n                ? 0\n                : n === 1\n                ? 1\n                : n === 2\n                ? 2\n                : n % 100 >= 3 && n % 100 <= 10\n                ? 3\n                : n % 100 >= 11\n                ? 4\n                : 5;\n        },\n        plurals = {\n            s: [\n                'أقل من ثانية',\n                'ثانية واحدة',\n                ['ثانيتان', 'ثانيتين'],\n                '%d ثوان',\n                '%d ثانية',\n                '%d ثانية',\n            ],\n            m: [\n                'أقل من دقيقة',\n                'دقيقة واحدة',\n                ['دقيقتان', 'دقيقتين'],\n                '%d دقائق',\n                '%d دقيقة',\n                '%d دقيقة',\n            ],\n            h: [\n                'أقل من ساعة',\n                'ساعة واحدة',\n                ['ساعتان', 'ساعتين'],\n                '%d ساعات',\n                '%d ساعة',\n                '%d ساعة',\n            ],\n            d: [\n                'أقل من يوم',\n                'يوم واحد',\n                ['يومان', 'يومين'],\n                '%d أيام',\n                '%d يومًا',\n                '%d يوم',\n            ],\n            M: [\n                'أقل من شهر',\n                'شهر واحد',\n                ['شهران', 'شهرين'],\n                '%d أشهر',\n                '%d شهرا',\n                '%d شهر',\n            ],\n            y: [\n                'أقل من عام',\n                'عام واحد',\n                ['عامان', 'عامين'],\n                '%d أعوام',\n                '%d عامًا',\n                '%d عام',\n            ],\n        },\n        pluralize = function (u) {\n            return function (number, withoutSuffix, string, isFuture) {\n                var f = pluralForm(number),\n                    str = plurals[u][pluralForm(number)];\n                if (f === 2) {\n                    str = str[withoutSuffix ? 0 : 1];\n                }\n                return str.replace(/%d/i, number);\n            };\n        },\n        months = [\n            'جانفي',\n            'فيفري',\n            'مارس',\n            'أفريل',\n            'ماي',\n            'جوان',\n            'جويلية',\n            'أوت',\n            'سبتمبر',\n            'أكتوبر',\n            'نوفمبر',\n            'ديسمبر',\n        ];\n\n    var arDz = moment.defineLocale('ar-dz', {\n        months: months,\n        monthsShort: months,\n        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'D/\\u200FM/\\u200FYYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /ص|م/,\n        isPM: function (input) {\n            return 'م' === input;\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ص';\n            } else {\n                return 'م';\n            }\n        },\n        calendar: {\n            sameDay: '[اليوم عند الساعة] LT',\n            nextDay: '[غدًا عند الساعة] LT',\n            nextWeek: 'dddd [عند الساعة] LT',\n            lastDay: '[أمس عند الساعة] LT',\n            lastWeek: 'dddd [عند الساعة] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'بعد %s',\n            past: 'منذ %s',\n            s: pluralize('s'),\n            ss: pluralize('s'),\n            m: pluralize('m'),\n            mm: pluralize('m'),\n            h: pluralize('h'),\n            hh: pluralize('h'),\n            d: pluralize('d'),\n            dd: pluralize('d'),\n            M: pluralize('M'),\n            MM: pluralize('M'),\n            y: pluralize('y'),\n            yy: pluralize('y'),\n        },\n        postformat: function (string) {\n            return string.replace(/,/g, '،');\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return arDz;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci1kei5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsa0RBQVc7QUFDckUsR0FBRyxDQUNzQjtBQUN6QixDQUFDLDRCQUE0Qjs7QUFFN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci1kei5qcz9lOTEzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBBcmFiaWMgKEFsZ2VyaWEpIFthci1kel1cbi8vISBhdXRob3IgOiBBbWluZSBSb3VraDogaHR0cHM6Ly9naXRodWIuY29tL0FtaW5lMjdcbi8vISBhdXRob3IgOiBBYmRlbCBTYWlkOiBodHRwczovL2dpdGh1Yi5jb20vYWJkZWxzYWlkXG4vLyEgYXV0aG9yIDogQWhtZWQgRWxraGF0aWJcbi8vISBhdXRob3IgOiBmb3JhYmkgaHR0cHM6Ly9naXRodWIuY29tL2ZvcmFiaVxuLy8hIGF1dGhvciA6IE5vdXJlZGRpbmUgTE9VQUhFREogOiBodHRwczovL2dpdGh1Yi5jb20vbm91cmVkZGluZW1cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBwbHVyYWxGb3JtID0gZnVuY3Rpb24gKG4pIHtcbiAgICAgICAgICAgIHJldHVybiBuID09PSAwXG4gICAgICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICAgICAgOiBuID09PSAxXG4gICAgICAgICAgICAgICAgPyAxXG4gICAgICAgICAgICAgICAgOiBuID09PSAyXG4gICAgICAgICAgICAgICAgPyAyXG4gICAgICAgICAgICAgICAgOiBuICUgMTAwID49IDMgJiYgbiAlIDEwMCA8PSAxMFxuICAgICAgICAgICAgICAgID8gM1xuICAgICAgICAgICAgICAgIDogbiAlIDEwMCA+PSAxMVxuICAgICAgICAgICAgICAgID8gNFxuICAgICAgICAgICAgICAgIDogNTtcbiAgICAgICAgfSxcbiAgICAgICAgcGx1cmFscyA9IHtcbiAgICAgICAgICAgIHM6IFtcbiAgICAgICAgICAgICAgICAn2KPZgtmEINmF2YYg2KvYp9mG2YrYqScsXG4gICAgICAgICAgICAgICAgJ9ir2KfZhtmK2Kkg2YjYp9it2K/YqScsXG4gICAgICAgICAgICAgICAgWyfYq9in2YbZitiq2KfZhicsICfYq9in2YbZitiq2YrZhiddLFxuICAgICAgICAgICAgICAgICclZCDYq9mI2KfZhicsXG4gICAgICAgICAgICAgICAgJyVkINir2KfZhtmK2KknLFxuICAgICAgICAgICAgICAgICclZCDYq9in2YbZitipJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBtOiBbXG4gICAgICAgICAgICAgICAgJ9ij2YLZhCDZhdmGINiv2YLZitmC2KknLFxuICAgICAgICAgICAgICAgICfYr9mC2YrZgtipINmI2KfYrdiv2KknLFxuICAgICAgICAgICAgICAgIFsn2K/ZgtmK2YLYqtin2YYnLCAn2K/ZgtmK2YLYqtmK2YYnXSxcbiAgICAgICAgICAgICAgICAnJWQg2K/Zgtin2KbZgicsXG4gICAgICAgICAgICAgICAgJyVkINiv2YLZitmC2KknLFxuICAgICAgICAgICAgICAgICclZCDYr9mC2YrZgtipJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBoOiBbXG4gICAgICAgICAgICAgICAgJ9ij2YLZhCDZhdmGINiz2KfYudipJyxcbiAgICAgICAgICAgICAgICAn2LPYp9i52Kkg2YjYp9it2K/YqScsXG4gICAgICAgICAgICAgICAgWyfYs9in2LnYqtin2YYnLCAn2LPYp9i52KrZitmGJ10sXG4gICAgICAgICAgICAgICAgJyVkINiz2KfYudin2KonLFxuICAgICAgICAgICAgICAgICclZCDYs9in2LnYqScsXG4gICAgICAgICAgICAgICAgJyVkINiz2KfYudipJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBkOiBbXG4gICAgICAgICAgICAgICAgJ9ij2YLZhCDZhdmGINmK2YjZhScsXG4gICAgICAgICAgICAgICAgJ9mK2YjZhSDZiNin2K3YrycsXG4gICAgICAgICAgICAgICAgWyfZitmI2YXYp9mGJywgJ9mK2YjZhdmK2YYnXSxcbiAgICAgICAgICAgICAgICAnJWQg2KPZitin2YUnLFxuICAgICAgICAgICAgICAgICclZCDZitmI2YXZi9inJyxcbiAgICAgICAgICAgICAgICAnJWQg2YrZiNmFJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBNOiBbXG4gICAgICAgICAgICAgICAgJ9ij2YLZhCDZhdmGINi02YfYsScsXG4gICAgICAgICAgICAgICAgJ9i02YfYsSDZiNin2K3YrycsXG4gICAgICAgICAgICAgICAgWyfYtNmH2LHYp9mGJywgJ9i02YfYsdmK2YYnXSxcbiAgICAgICAgICAgICAgICAnJWQg2KPYtNmH2LEnLFxuICAgICAgICAgICAgICAgICclZCDYtNmH2LHYpycsXG4gICAgICAgICAgICAgICAgJyVkINi02YfYsScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgeTogW1xuICAgICAgICAgICAgICAgICfYo9mC2YQg2YXZhiDYudin2YUnLFxuICAgICAgICAgICAgICAgICfYudin2YUg2YjYp9it2K8nLFxuICAgICAgICAgICAgICAgIFsn2LnYp9mF2KfZhicsICfYudin2YXZitmGJ10sXG4gICAgICAgICAgICAgICAgJyVkINij2LnZiNin2YUnLFxuICAgICAgICAgICAgICAgICclZCDYudin2YXZi9inJyxcbiAgICAgICAgICAgICAgICAnJWQg2LnYp9mFJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIHBsdXJhbGl6ZSA9IGZ1bmN0aW9uICh1KSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG51bWJlciwgd2l0aG91dFN1ZmZpeCwgc3RyaW5nLCBpc0Z1dHVyZSkge1xuICAgICAgICAgICAgICAgIHZhciBmID0gcGx1cmFsRm9ybShudW1iZXIpLFxuICAgICAgICAgICAgICAgICAgICBzdHIgPSBwbHVyYWxzW3VdW3BsdXJhbEZvcm0obnVtYmVyKV07XG4gICAgICAgICAgICAgICAgaWYgKGYgPT09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyID0gc3RyW3dpdGhvdXRTdWZmaXggPyAwIDogMV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBzdHIucmVwbGFjZSgvJWQvaSwgbnVtYmVyKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICAgIG1vbnRocyA9IFtcbiAgICAgICAgICAgICfYrNin2YbZgdmKJyxcbiAgICAgICAgICAgICfZgdmK2YHYsdmKJyxcbiAgICAgICAgICAgICfZhdin2LHYsycsXG4gICAgICAgICAgICAn2KPZgdix2YrZhCcsXG4gICAgICAgICAgICAn2YXYp9mKJyxcbiAgICAgICAgICAgICfYrNmI2KfZhicsXG4gICAgICAgICAgICAn2KzZiNmK2YTZitipJyxcbiAgICAgICAgICAgICfYo9mI2KonLFxuICAgICAgICAgICAgJ9iz2KjYqtmF2KjYsScsXG4gICAgICAgICAgICAn2KPZg9iq2YjYqNixJyxcbiAgICAgICAgICAgICfZhtmI2YHZhdio2LEnLFxuICAgICAgICAgICAgJ9iv2YrYs9mF2KjYsScsXG4gICAgICAgIF07XG5cbiAgICB2YXIgYXJEeiA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2FyLWR6Jywge1xuICAgICAgICBtb250aHM6IG1vbnRocyxcbiAgICAgICAgbW9udGhzU2hvcnQ6IG1vbnRocyxcbiAgICAgICAgd2Vla2RheXM6ICfYp9mE2KPYrdivX9in2YTYpdir2YbZitmGX9in2YTYq9mE2KfYq9in2KFf2KfZhNij2LHYqNi52KfYoV/Yp9mE2K7ZhdmK2LNf2KfZhNis2YXYudipX9in2YTYs9io2KonLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfYo9it2K9f2KXYq9mG2YrZhl/Yq9mE2KfYq9in2KFf2KPYsdio2LnYp9ihX9iu2YXZitizX9is2YXYudipX9iz2KjYqicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfYrV/Zhl/Yq1/YsV/Yrl/YrF/Ysycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnRC9cXHUyMDBGTS9cXHUyMDBGWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL9i1fNmFLyxcbiAgICAgICAgaXNQTTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gJ9mFJyA9PT0gaW5wdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfYtSc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn2YUnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vYp9mE2YrZiNmFINi52YbYryDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb2LrYr9mL2Kcg2LnZhtivINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFvYudmG2K8g2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW9ij2YXYsyDYudmG2K8g2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW9i52YbYryDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAn2KjYudivICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICfZhdmG2LAgJXMnLFxuICAgICAgICAgICAgczogcGx1cmFsaXplKCdzJyksXG4gICAgICAgICAgICBzczogcGx1cmFsaXplKCdzJyksXG4gICAgICAgICAgICBtOiBwbHVyYWxpemUoJ20nKSxcbiAgICAgICAgICAgIG1tOiBwbHVyYWxpemUoJ20nKSxcbiAgICAgICAgICAgIGg6IHBsdXJhbGl6ZSgnaCcpLFxuICAgICAgICAgICAgaGg6IHBsdXJhbGl6ZSgnaCcpLFxuICAgICAgICAgICAgZDogcGx1cmFsaXplKCdkJyksXG4gICAgICAgICAgICBkZDogcGx1cmFsaXplKCdkJyksXG4gICAgICAgICAgICBNOiBwbHVyYWxpemUoJ00nKSxcbiAgICAgICAgICAgIE1NOiBwbHVyYWxpemUoJ00nKSxcbiAgICAgICAgICAgIHk6IHBsdXJhbGl6ZSgneScpLFxuICAgICAgICAgICAgeXk6IHBsdXJhbGl6ZSgneScpLFxuICAgICAgICB9LFxuICAgICAgICBwb3N0Zm9ybWF0OiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoLywvZywgJ9iMJyk7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMCwgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBhckR6O1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/ar-dz.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/ar-kw.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/ar-kw.js ***!
  \*********************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Arabic (Kuwait) [ar-kw]\n//! author : Nusret Parlak: https://github.com/nusretparlak\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var arKw = moment.defineLocale('ar-kw', {\n        months: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split(\n            '_'\n        ),\n        monthsShort:\n            'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split(\n                '_'\n            ),\n        weekdays: 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort: 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[اليوم على الساعة] LT',\n            nextDay: '[غدا على الساعة] LT',\n            nextWeek: 'dddd [على الساعة] LT',\n            lastDay: '[أمس على الساعة] LT',\n            lastWeek: 'dddd [على الساعة] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'في %s',\n            past: 'منذ %s',\n            s: 'ثوان',\n            ss: '%d ثانية',\n            m: 'دقيقة',\n            mm: '%d دقائق',\n            h: 'ساعة',\n            hh: '%d ساعات',\n            d: 'يوم',\n            dd: '%d أيام',\n            M: 'شهر',\n            MM: '%d أشهر',\n            y: 'سنة',\n            yy: '%d سنوات',\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 12, // The week that contains Jan 12th is the first week of the year.\n        },\n    });\n\n    return arKw;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci1rdy5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYXIta3cuanM/YWI3MyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogQXJhYmljIChLdXdhaXQpIFthci1rd11cbi8vISBhdXRob3IgOiBOdXNyZXQgUGFybGFrOiBodHRwczovL2dpdGh1Yi5jb20vbnVzcmV0cGFybGFrXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgYXJLdyA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2FyLWt3Jywge1xuICAgICAgICBtb250aHM6ICfZitmG2KfZitixX9mB2KjYsdin2YrYsV/Zhdin2LHYs1/Yo9io2LHZitmEX9mF2KfZil/ZitmI2YbZitmIX9mK2YjZhNmK2YjYsl/Yuti02Kpf2LTYqtmG2KjYsV/Yo9mD2KrZiNio2LFf2YbZiNmG2KjYsV/Yr9is2YbYqNixJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICfZitmG2KfZitixX9mB2KjYsdin2YrYsV/Zhdin2LHYs1/Yo9io2LHZitmEX9mF2KfZil/ZitmI2YbZitmIX9mK2YjZhNmK2YjYsl/Yuti02Kpf2LTYqtmG2KjYsV/Yo9mD2KrZiNio2LFf2YbZiNmG2KjYsV/Yr9is2YbYqNixJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzOiAn2KfZhNij2K3Yr1/Yp9mE2KXYqtmG2YrZhl/Yp9mE2KvZhNin2KvYp9ihX9in2YTYo9ix2KjYudin2KFf2KfZhNiu2YXZitizX9in2YTYrNmF2LnYqV/Yp9mE2LPYqNiqJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn2KfYrdivX9in2KrZhtmK2YZf2KvZhNin2KvYp9ihX9in2LHYqNi52KfYoV/YrtmF2YrYs1/YrNmF2LnYqV/Ys9io2KonLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn2K1f2YZf2Ktf2LFf2K5f2Kxf2LMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW9in2YTZitmI2YUg2LnZhNmJINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vYutiv2Kcg2LnZhNmJINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFvYudmE2Ykg2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW9ij2YXYsyDYudmE2Ykg2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW9i52YTZiSDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAn2YHZiiAlcycsXG4gICAgICAgICAgICBwYXN0OiAn2YXZhtiwICVzJyxcbiAgICAgICAgICAgIHM6ICfYq9mI2KfZhicsXG4gICAgICAgICAgICBzczogJyVkINir2KfZhtmK2KknLFxuICAgICAgICAgICAgbTogJ9iv2YLZitmC2KknLFxuICAgICAgICAgICAgbW06ICclZCDYr9mC2KfYptmCJyxcbiAgICAgICAgICAgIGg6ICfYs9in2LnYqScsXG4gICAgICAgICAgICBoaDogJyVkINiz2KfYudin2KonLFxuICAgICAgICAgICAgZDogJ9mK2YjZhScsXG4gICAgICAgICAgICBkZDogJyVkINij2YrYp9mFJyxcbiAgICAgICAgICAgIE06ICfYtNmH2LEnLFxuICAgICAgICAgICAgTU06ICclZCDYo9i02YfYsScsXG4gICAgICAgICAgICB5OiAn2LPZhtipJyxcbiAgICAgICAgICAgIHl5OiAnJWQg2LPZhtmI2KfYqicsXG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMCwgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDEyLCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiAxMnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGFyS3c7XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/ar-kw.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/ar-ly.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/ar-ly.js ***!
  \*********************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Arabic (Libya) [ar-ly]\n//! author : Ali Hmer: https://github.com/kikoanis\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '1',\n            2: '2',\n            3: '3',\n            4: '4',\n            5: '5',\n            6: '6',\n            7: '7',\n            8: '8',\n            9: '9',\n            0: '0',\n        },\n        pluralForm = function (n) {\n            return n === 0\n                ? 0\n                : n === 1\n                ? 1\n                : n === 2\n                ? 2\n                : n % 100 >= 3 && n % 100 <= 10\n                ? 3\n                : n % 100 >= 11\n                ? 4\n                : 5;\n        },\n        plurals = {\n            s: [\n                'أقل من ثانية',\n                'ثانية واحدة',\n                ['ثانيتان', 'ثانيتين'],\n                '%d ثوان',\n                '%d ثانية',\n                '%d ثانية',\n            ],\n            m: [\n                'أقل من دقيقة',\n                'دقيقة واحدة',\n                ['دقيقتان', 'دقيقتين'],\n                '%d دقائق',\n                '%d دقيقة',\n                '%d دقيقة',\n            ],\n            h: [\n                'أقل من ساعة',\n                'ساعة واحدة',\n                ['ساعتان', 'ساعتين'],\n                '%d ساعات',\n                '%d ساعة',\n                '%d ساعة',\n            ],\n            d: [\n                'أقل من يوم',\n                'يوم واحد',\n                ['يومان', 'يومين'],\n                '%d أيام',\n                '%d يومًا',\n                '%d يوم',\n            ],\n            M: [\n                'أقل من شهر',\n                'شهر واحد',\n                ['شهران', 'شهرين'],\n                '%d أشهر',\n                '%d شهرا',\n                '%d شهر',\n            ],\n            y: [\n                'أقل من عام',\n                'عام واحد',\n                ['عامان', 'عامين'],\n                '%d أعوام',\n                '%d عامًا',\n                '%d عام',\n            ],\n        },\n        pluralize = function (u) {\n            return function (number, withoutSuffix, string, isFuture) {\n                var f = pluralForm(number),\n                    str = plurals[u][pluralForm(number)];\n                if (f === 2) {\n                    str = str[withoutSuffix ? 0 : 1];\n                }\n                return str.replace(/%d/i, number);\n            };\n        },\n        months = [\n            'يناير',\n            'فبراير',\n            'مارس',\n            'أبريل',\n            'مايو',\n            'يونيو',\n            'يوليو',\n            'أغسطس',\n            'سبتمبر',\n            'أكتوبر',\n            'نوفمبر',\n            'ديسمبر',\n        ];\n\n    var arLy = moment.defineLocale('ar-ly', {\n        months: months,\n        monthsShort: months,\n        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'D/\\u200FM/\\u200FYYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /ص|م/,\n        isPM: function (input) {\n            return 'م' === input;\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ص';\n            } else {\n                return 'م';\n            }\n        },\n        calendar: {\n            sameDay: '[اليوم عند الساعة] LT',\n            nextDay: '[غدًا عند الساعة] LT',\n            nextWeek: 'dddd [عند الساعة] LT',\n            lastDay: '[أمس عند الساعة] LT',\n            lastWeek: 'dddd [عند الساعة] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'بعد %s',\n            past: 'منذ %s',\n            s: pluralize('s'),\n            ss: pluralize('s'),\n            m: pluralize('m'),\n            mm: pluralize('m'),\n            h: pluralize('h'),\n            hh: pluralize('h'),\n            d: pluralize('d'),\n            dd: pluralize('d'),\n            M: pluralize('M'),\n            MM: pluralize('M'),\n            y: pluralize('y'),\n            yy: pluralize('y'),\n        },\n        preparse: function (string) {\n            return string.replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string\n                .replace(/\\d/g, function (match) {\n                    return symbolMap[match];\n                })\n                .replace(/,/g, '،');\n        },\n        week: {\n            dow: 6, // Saturday is the first day of the week.\n            doy: 12, // The week that contains Jan 12th is the first week of the year.\n        },\n    });\n\n    return arLy;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci1seS5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci1seS5qcz9hNzcyIl0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBBcmFiaWMgKExpYnlhKSBbYXItbHldXG4vLyEgYXV0aG9yIDogQWxpIEhtZXI6IGh0dHBzOi8vZ2l0aHViLmNvbS9raWtvYW5pc1xuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHN5bWJvbE1hcCA9IHtcbiAgICAgICAgICAgIDE6ICcxJyxcbiAgICAgICAgICAgIDI6ICcyJyxcbiAgICAgICAgICAgIDM6ICczJyxcbiAgICAgICAgICAgIDQ6ICc0JyxcbiAgICAgICAgICAgIDU6ICc1JyxcbiAgICAgICAgICAgIDY6ICc2JyxcbiAgICAgICAgICAgIDc6ICc3JyxcbiAgICAgICAgICAgIDg6ICc4JyxcbiAgICAgICAgICAgIDk6ICc5JyxcbiAgICAgICAgICAgIDA6ICcwJyxcbiAgICAgICAgfSxcbiAgICAgICAgcGx1cmFsRm9ybSA9IGZ1bmN0aW9uIChuKSB7XG4gICAgICAgICAgICByZXR1cm4gbiA9PT0gMFxuICAgICAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgICAgIDogbiA9PT0gMVxuICAgICAgICAgICAgICAgID8gMVxuICAgICAgICAgICAgICAgIDogbiA9PT0gMlxuICAgICAgICAgICAgICAgID8gMlxuICAgICAgICAgICAgICAgIDogbiAlIDEwMCA+PSAzICYmIG4gJSAxMDAgPD0gMTBcbiAgICAgICAgICAgICAgICA/IDNcbiAgICAgICAgICAgICAgICA6IG4gJSAxMDAgPj0gMTFcbiAgICAgICAgICAgICAgICA/IDRcbiAgICAgICAgICAgICAgICA6IDU7XG4gICAgICAgIH0sXG4gICAgICAgIHBsdXJhbHMgPSB7XG4gICAgICAgICAgICBzOiBbXG4gICAgICAgICAgICAgICAgJ9ij2YLZhCDZhdmGINir2KfZhtmK2KknLFxuICAgICAgICAgICAgICAgICfYq9in2YbZitipINmI2KfYrdiv2KknLFxuICAgICAgICAgICAgICAgIFsn2KvYp9mG2YrYqtin2YYnLCAn2KvYp9mG2YrYqtmK2YYnXSxcbiAgICAgICAgICAgICAgICAnJWQg2KvZiNin2YYnLFxuICAgICAgICAgICAgICAgICclZCDYq9in2YbZitipJyxcbiAgICAgICAgICAgICAgICAnJWQg2KvYp9mG2YrYqScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgbTogW1xuICAgICAgICAgICAgICAgICfYo9mC2YQg2YXZhiDYr9mC2YrZgtipJyxcbiAgICAgICAgICAgICAgICAn2K/ZgtmK2YLYqSDZiNin2K3Yr9ipJyxcbiAgICAgICAgICAgICAgICBbJ9iv2YLZitmC2KrYp9mGJywgJ9iv2YLZitmC2KrZitmGJ10sXG4gICAgICAgICAgICAgICAgJyVkINiv2YLYp9im2YInLFxuICAgICAgICAgICAgICAgICclZCDYr9mC2YrZgtipJyxcbiAgICAgICAgICAgICAgICAnJWQg2K/ZgtmK2YLYqScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgaDogW1xuICAgICAgICAgICAgICAgICfYo9mC2YQg2YXZhiDYs9in2LnYqScsXG4gICAgICAgICAgICAgICAgJ9iz2KfYudipINmI2KfYrdiv2KknLFxuICAgICAgICAgICAgICAgIFsn2LPYp9i52KrYp9mGJywgJ9iz2KfYudiq2YrZhiddLFxuICAgICAgICAgICAgICAgICclZCDYs9in2LnYp9iqJyxcbiAgICAgICAgICAgICAgICAnJWQg2LPYp9i52KknLFxuICAgICAgICAgICAgICAgICclZCDYs9in2LnYqScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgZDogW1xuICAgICAgICAgICAgICAgICfYo9mC2YQg2YXZhiDZitmI2YUnLFxuICAgICAgICAgICAgICAgICfZitmI2YUg2YjYp9it2K8nLFxuICAgICAgICAgICAgICAgIFsn2YrZiNmF2KfZhicsICfZitmI2YXZitmGJ10sXG4gICAgICAgICAgICAgICAgJyVkINij2YrYp9mFJyxcbiAgICAgICAgICAgICAgICAnJWQg2YrZiNmF2YvYpycsXG4gICAgICAgICAgICAgICAgJyVkINmK2YjZhScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgTTogW1xuICAgICAgICAgICAgICAgICfYo9mC2YQg2YXZhiDYtNmH2LEnLFxuICAgICAgICAgICAgICAgICfYtNmH2LEg2YjYp9it2K8nLFxuICAgICAgICAgICAgICAgIFsn2LTZh9ix2KfZhicsICfYtNmH2LHZitmGJ10sXG4gICAgICAgICAgICAgICAgJyVkINij2LTZh9ixJyxcbiAgICAgICAgICAgICAgICAnJWQg2LTZh9ix2KcnLFxuICAgICAgICAgICAgICAgICclZCDYtNmH2LEnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHk6IFtcbiAgICAgICAgICAgICAgICAn2KPZgtmEINmF2YYg2LnYp9mFJyxcbiAgICAgICAgICAgICAgICAn2LnYp9mFINmI2KfYrdivJyxcbiAgICAgICAgICAgICAgICBbJ9i52KfZhdin2YYnLCAn2LnYp9mF2YrZhiddLFxuICAgICAgICAgICAgICAgICclZCDYo9i52YjYp9mFJyxcbiAgICAgICAgICAgICAgICAnJWQg2LnYp9mF2YvYpycsXG4gICAgICAgICAgICAgICAgJyVkINi52KfZhScsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICBwbHVyYWxpemUgPSBmdW5jdGlvbiAodSkge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChudW1iZXIsIHdpdGhvdXRTdWZmaXgsIHN0cmluZywgaXNGdXR1cmUpIHtcbiAgICAgICAgICAgICAgICB2YXIgZiA9IHBsdXJhbEZvcm0obnVtYmVyKSxcbiAgICAgICAgICAgICAgICAgICAgc3RyID0gcGx1cmFsc1t1XVtwbHVyYWxGb3JtKG51bWJlcildO1xuICAgICAgICAgICAgICAgIGlmIChmID09PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0ciA9IHN0clt3aXRob3V0U3VmZml4ID8gMCA6IDFdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gc3RyLnJlcGxhY2UoLyVkL2ksIG51bWJlcik7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgICAgICBtb250aHMgPSBbXG4gICAgICAgICAgICAn2YrZhtin2YrYsScsXG4gICAgICAgICAgICAn2YHYqNix2KfZitixJyxcbiAgICAgICAgICAgICfZhdin2LHYsycsXG4gICAgICAgICAgICAn2KPYqNix2YrZhCcsXG4gICAgICAgICAgICAn2YXYp9mK2YgnLFxuICAgICAgICAgICAgJ9mK2YjZhtmK2YgnLFxuICAgICAgICAgICAgJ9mK2YjZhNmK2YgnLFxuICAgICAgICAgICAgJ9ij2LrYs9i32LMnLFxuICAgICAgICAgICAgJ9iz2KjYqtmF2KjYsScsXG4gICAgICAgICAgICAn2KPZg9iq2YjYqNixJyxcbiAgICAgICAgICAgICfZhtmI2YHZhdio2LEnLFxuICAgICAgICAgICAgJ9iv2YrYs9mF2KjYsScsXG4gICAgICAgIF07XG5cbiAgICB2YXIgYXJMeSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2FyLWx5Jywge1xuICAgICAgICBtb250aHM6IG1vbnRocyxcbiAgICAgICAgbW9udGhzU2hvcnQ6IG1vbnRocyxcbiAgICAgICAgd2Vla2RheXM6ICfYp9mE2KPYrdivX9in2YTYpdir2YbZitmGX9in2YTYq9mE2KfYq9in2KFf2KfZhNij2LHYqNi52KfYoV/Yp9mE2K7ZhdmK2LNf2KfZhNis2YXYudipX9in2YTYs9io2KonLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfYo9it2K9f2KXYq9mG2YrZhl/Yq9mE2KfYq9in2KFf2KPYsdio2LnYp9ihX9iu2YXZitizX9is2YXYudipX9iz2KjYqicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfYrV/Zhl/Yq1/YsV/Yrl/YrF/Ysycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnRC9cXHUyMDBGTS9cXHUyMDBGWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL9i1fNmFLyxcbiAgICAgICAgaXNQTTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gJ9mFJyA9PT0gaW5wdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfYtSc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn2YUnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vYp9mE2YrZiNmFINi52YbYryDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb2LrYr9mL2Kcg2LnZhtivINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFvYudmG2K8g2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW9ij2YXYsyDYudmG2K8g2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW9i52YbYryDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAn2KjYudivICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICfZhdmG2LAgJXMnLFxuICAgICAgICAgICAgczogcGx1cmFsaXplKCdzJyksXG4gICAgICAgICAgICBzczogcGx1cmFsaXplKCdzJyksXG4gICAgICAgICAgICBtOiBwbHVyYWxpemUoJ20nKSxcbiAgICAgICAgICAgIG1tOiBwbHVyYWxpemUoJ20nKSxcbiAgICAgICAgICAgIGg6IHBsdXJhbGl6ZSgnaCcpLFxuICAgICAgICAgICAgaGg6IHBsdXJhbGl6ZSgnaCcpLFxuICAgICAgICAgICAgZDogcGx1cmFsaXplKCdkJyksXG4gICAgICAgICAgICBkZDogcGx1cmFsaXplKCdkJyksXG4gICAgICAgICAgICBNOiBwbHVyYWxpemUoJ00nKSxcbiAgICAgICAgICAgIE1NOiBwbHVyYWxpemUoJ00nKSxcbiAgICAgICAgICAgIHk6IHBsdXJhbGl6ZSgneScpLFxuICAgICAgICAgICAgeXk6IHBsdXJhbGl6ZSgneScpLFxuICAgICAgICB9LFxuICAgICAgICBwcmVwYXJzZTogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC/YjC9nLCAnLCcpO1xuICAgICAgICB9LFxuICAgICAgICBwb3N0Zm9ybWF0OiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcZC9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN5bWJvbE1hcFttYXRjaF07XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvLC9nLCAn2IwnKTtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiA2LCAvLyBTYXR1cmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiAxMiwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gMTJ0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBhckx5O1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/ar-ly.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/ar-ma.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/ar-ma.js ***!
  \*********************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Arabic (Morocco) [ar-ma]\n//! author : ElFadili Yassine : https://github.com/ElFadiliY\n//! author : Abdel Said : https://github.com/abdelsaid\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var arMa = moment.defineLocale('ar-ma', {\n        months: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split(\n            '_'\n        ),\n        monthsShort:\n            'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split(\n                '_'\n            ),\n        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort: 'احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[اليوم على الساعة] LT',\n            nextDay: '[غدا على الساعة] LT',\n            nextWeek: 'dddd [على الساعة] LT',\n            lastDay: '[أمس على الساعة] LT',\n            lastWeek: 'dddd [على الساعة] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'في %s',\n            past: 'منذ %s',\n            s: 'ثوان',\n            ss: '%d ثانية',\n            m: 'دقيقة',\n            mm: '%d دقائق',\n            h: 'ساعة',\n            hh: '%d ساعات',\n            d: 'يوم',\n            dd: '%d أيام',\n            M: 'شهر',\n            MM: '%d أشهر',\n            y: 'سنة',\n            yy: '%d سنوات',\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return arMa;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci1tYS5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsa0RBQVc7QUFDckUsR0FBRyxDQUNzQjtBQUN6QixDQUFDLDRCQUE0Qjs7QUFFN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci1tYS5qcz84ZTA3Il0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBBcmFiaWMgKE1vcm9jY28pIFthci1tYV1cbi8vISBhdXRob3IgOiBFbEZhZGlsaSBZYXNzaW5lIDogaHR0cHM6Ly9naXRodWIuY29tL0VsRmFkaWxpWVxuLy8hIGF1dGhvciA6IEFiZGVsIFNhaWQgOiBodHRwczovL2dpdGh1Yi5jb20vYWJkZWxzYWlkXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgYXJNYSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2FyLW1hJywge1xuICAgICAgICBtb250aHM6ICfZitmG2KfZitixX9mB2KjYsdin2YrYsV/Zhdin2LHYs1/Yo9io2LHZitmEX9mF2KfZil/ZitmI2YbZitmIX9mK2YjZhNmK2YjYsl/Yuti02Kpf2LTYqtmG2KjYsV/Yo9mD2KrZiNio2LFf2YbZiNmG2KjYsV/Yr9is2YbYqNixJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICfZitmG2KfZitixX9mB2KjYsdin2YrYsV/Zhdin2LHYs1/Yo9io2LHZitmEX9mF2KfZil/ZitmI2YbZitmIX9mK2YjZhNmK2YjYsl/Yuti02Kpf2LTYqtmG2KjYsV/Yo9mD2KrZiNio2LFf2YbZiNmG2KjYsV/Yr9is2YbYqNixJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzOiAn2KfZhNij2K3Yr1/Yp9mE2KXYq9mG2YrZhl/Yp9mE2KvZhNin2KvYp9ihX9in2YTYo9ix2KjYudin2KFf2KfZhNiu2YXZitizX9in2YTYrNmF2LnYqV/Yp9mE2LPYqNiqJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn2KfYrdivX9in2KvZhtmK2YZf2KvZhNin2KvYp9ihX9in2LHYqNi52KfYoV/YrtmF2YrYs1/YrNmF2LnYqV/Ys9io2KonLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn2K1f2YZf2Ktf2LFf2K5f2Kxf2LMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW9in2YTZitmI2YUg2LnZhNmJINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vYutiv2Kcg2LnZhNmJINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFvYudmE2Ykg2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW9ij2YXYsyDYudmE2Ykg2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW9i52YTZiSDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAn2YHZiiAlcycsXG4gICAgICAgICAgICBwYXN0OiAn2YXZhtiwICVzJyxcbiAgICAgICAgICAgIHM6ICfYq9mI2KfZhicsXG4gICAgICAgICAgICBzczogJyVkINir2KfZhtmK2KknLFxuICAgICAgICAgICAgbTogJ9iv2YLZitmC2KknLFxuICAgICAgICAgICAgbW06ICclZCDYr9mC2KfYptmCJyxcbiAgICAgICAgICAgIGg6ICfYs9in2LnYqScsXG4gICAgICAgICAgICBoaDogJyVkINiz2KfYudin2KonLFxuICAgICAgICAgICAgZDogJ9mK2YjZhScsXG4gICAgICAgICAgICBkZDogJyVkINij2YrYp9mFJyxcbiAgICAgICAgICAgIE06ICfYtNmH2LEnLFxuICAgICAgICAgICAgTU06ICclZCDYo9i02YfYsScsXG4gICAgICAgICAgICB5OiAn2LPZhtipJyxcbiAgICAgICAgICAgIHl5OiAnJWQg2LPZhtmI2KfYqicsXG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBhck1hO1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/ar-ma.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/ar-sa.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/ar-sa.js ***!
  \*********************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Arabic (Saudi Arabia) [ar-sa]\n//! author : Suhail Alkowaileet : https://github.com/xsoh\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '١',\n            2: '٢',\n            3: '٣',\n            4: '٤',\n            5: '٥',\n            6: '٦',\n            7: '٧',\n            8: '٨',\n            9: '٩',\n            0: '٠',\n        },\n        numberMap = {\n            '١': '1',\n            '٢': '2',\n            '٣': '3',\n            '٤': '4',\n            '٥': '5',\n            '٦': '6',\n            '٧': '7',\n            '٨': '8',\n            '٩': '9',\n            '٠': '0',\n        };\n\n    var arSa = moment.defineLocale('ar-sa', {\n        months: 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split(\n            '_'\n        ),\n        monthsShort:\n            'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split(\n                '_'\n            ),\n        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /ص|م/,\n        isPM: function (input) {\n            return 'م' === input;\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ص';\n            } else {\n                return 'م';\n            }\n        },\n        calendar: {\n            sameDay: '[اليوم على الساعة] LT',\n            nextDay: '[غدا على الساعة] LT',\n            nextWeek: 'dddd [على الساعة] LT',\n            lastDay: '[أمس على الساعة] LT',\n            lastWeek: 'dddd [على الساعة] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'في %s',\n            past: 'منذ %s',\n            s: 'ثوان',\n            ss: '%d ثانية',\n            m: 'دقيقة',\n            mm: '%d دقائق',\n            h: 'ساعة',\n            hh: '%d ساعات',\n            d: 'يوم',\n            dd: '%d أيام',\n            M: 'شهر',\n            MM: '%d أشهر',\n            y: 'سنة',\n            yy: '%d سنوات',\n        },\n        preparse: function (string) {\n            return string\n                .replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {\n                    return numberMap[match];\n                })\n                .replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string\n                .replace(/\\d/g, function (match) {\n                    return symbolMap[match];\n                })\n                .replace(/,/g, '،');\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return arSa;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci1zYS5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2FyLXNhLmpzPzc5YTQiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEFyYWJpYyAoU2F1ZGkgQXJhYmlhKSBbYXItc2FdXG4vLyEgYXV0aG9yIDogU3VoYWlsIEFsa293YWlsZWV0IDogaHR0cHM6Ly9naXRodWIuY29tL3hzb2hcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBzeW1ib2xNYXAgPSB7XG4gICAgICAgICAgICAxOiAn2aEnLFxuICAgICAgICAgICAgMjogJ9miJyxcbiAgICAgICAgICAgIDM6ICfZoycsXG4gICAgICAgICAgICA0OiAn2aQnLFxuICAgICAgICAgICAgNTogJ9mlJyxcbiAgICAgICAgICAgIDY6ICfZpicsXG4gICAgICAgICAgICA3OiAn2acnLFxuICAgICAgICAgICAgODogJ9moJyxcbiAgICAgICAgICAgIDk6ICfZqScsXG4gICAgICAgICAgICAwOiAn2aAnLFxuICAgICAgICB9LFxuICAgICAgICBudW1iZXJNYXAgPSB7XG4gICAgICAgICAgICAn2aEnOiAnMScsXG4gICAgICAgICAgICAn2aInOiAnMicsXG4gICAgICAgICAgICAn2aMnOiAnMycsXG4gICAgICAgICAgICAn2aQnOiAnNCcsXG4gICAgICAgICAgICAn2aUnOiAnNScsXG4gICAgICAgICAgICAn2aYnOiAnNicsXG4gICAgICAgICAgICAn2acnOiAnNycsXG4gICAgICAgICAgICAn2agnOiAnOCcsXG4gICAgICAgICAgICAn2aknOiAnOScsXG4gICAgICAgICAgICAn2aAnOiAnMCcsXG4gICAgICAgIH07XG5cbiAgICB2YXIgYXJTYSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2FyLXNhJywge1xuICAgICAgICBtb250aHM6ICfZitmG2KfZitixX9mB2KjYsdin2YrYsV/Zhdin2LHYs1/Yo9io2LHZitmEX9mF2KfZitmIX9mK2YjZhtmK2Yhf2YrZiNmE2YrZiF/Yo9i62LPYt9izX9iz2KjYqtmF2KjYsV/Yo9mD2KrZiNio2LFf2YbZiNmB2YXYqNixX9iv2YrYs9mF2KjYsScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAn2YrZhtin2YrYsV/Zgdio2LHYp9mK2LFf2YXYp9ix2LNf2KPYqNix2YrZhF/Zhdin2YrZiF/ZitmI2YbZitmIX9mK2YjZhNmK2Yhf2KPYutiz2LfYs1/Ys9io2KrZhdio2LFf2KPZg9iq2YjYqNixX9mG2YjZgdmF2KjYsV/Yr9mK2LPZhdio2LEnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXM6ICfYp9mE2KPYrdivX9in2YTYpdir2YbZitmGX9in2YTYq9mE2KfYq9in2KFf2KfZhNij2LHYqNi52KfYoV/Yp9mE2K7ZhdmK2LNf2KfZhNis2YXYudipX9in2YTYs9io2KonLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfYo9it2K9f2KXYq9mG2YrZhl/Yq9mE2KfYq9in2KFf2KPYsdio2LnYp9ihX9iu2YXZitizX9is2YXYudipX9iz2KjYqicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfYrV/Zhl/Yq1/YsV/Yrl/YrF/Ysycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL9i1fNmFLyxcbiAgICAgICAgaXNQTTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gJ9mFJyA9PT0gaW5wdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfYtSc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn2YUnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vYp9mE2YrZiNmFINi52YTZiSDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb2LrYr9inINi52YTZiSDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBb2LnZhNmJINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vYo9mF2LMg2LnZhNmJINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFvYudmE2Ykg2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ9mB2YogJXMnLFxuICAgICAgICAgICAgcGFzdDogJ9mF2YbYsCAlcycsXG4gICAgICAgICAgICBzOiAn2KvZiNin2YYnLFxuICAgICAgICAgICAgc3M6ICclZCDYq9in2YbZitipJyxcbiAgICAgICAgICAgIG06ICfYr9mC2YrZgtipJyxcbiAgICAgICAgICAgIG1tOiAnJWQg2K/Zgtin2KbZgicsXG4gICAgICAgICAgICBoOiAn2LPYp9i52KknLFxuICAgICAgICAgICAgaGg6ICclZCDYs9in2LnYp9iqJyxcbiAgICAgICAgICAgIGQ6ICfZitmI2YUnLFxuICAgICAgICAgICAgZGQ6ICclZCDYo9mK2KfZhScsXG4gICAgICAgICAgICBNOiAn2LTZh9ixJyxcbiAgICAgICAgICAgIE1NOiAnJWQg2KPYtNmH2LEnLFxuICAgICAgICAgICAgeTogJ9iz2YbYqScsXG4gICAgICAgICAgICB5eTogJyVkINiz2YbZiNin2KonLFxuICAgICAgICB9LFxuICAgICAgICBwcmVwYXJzZTogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZ1xuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9b2aHZotmj2aTZpdmm2afZqNmp2aBdL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyTWFwW21hdGNoXTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC/YjC9nLCAnLCcpO1xuICAgICAgICB9LFxuICAgICAgICBwb3N0Zm9ybWF0OiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcZC9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN5bWJvbE1hcFttYXRjaF07XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvLC9nLCAn2IwnKTtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNiwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGFyU2E7XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/ar-sa.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/ar-tn.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/ar-tn.js ***!
  \*********************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale  :  Arabic (Tunisia) [ar-tn]\n//! author : Nader Toukabri : https://github.com/naderio\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var arTn = moment.defineLocale('ar-tn', {\n        months: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split(\n            '_'\n        ),\n        monthsShort:\n            'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split(\n                '_'\n            ),\n        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[اليوم على الساعة] LT',\n            nextDay: '[غدا على الساعة] LT',\n            nextWeek: 'dddd [على الساعة] LT',\n            lastDay: '[أمس على الساعة] LT',\n            lastWeek: 'dddd [على الساعة] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'في %s',\n            past: 'منذ %s',\n            s: 'ثوان',\n            ss: '%d ثانية',\n            m: 'دقيقة',\n            mm: '%d دقائق',\n            h: 'ساعة',\n            hh: '%d ساعات',\n            d: 'يوم',\n            dd: '%d أيام',\n            M: 'شهر',\n            MM: '%d أشهر',\n            y: 'سنة',\n            yy: '%d سنوات',\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return arTn;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci10bi5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYXItdG4uanM/NzViNSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlICA6ICBBcmFiaWMgKFR1bmlzaWEpIFthci10bl1cbi8vISBhdXRob3IgOiBOYWRlciBUb3VrYWJyaSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9uYWRlcmlvXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgYXJUbiA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2FyLXRuJywge1xuICAgICAgICBtb250aHM6ICfYrNin2YbZgdmKX9mB2YrZgdix2Ypf2YXYp9ix2LNf2KPZgdix2YrZhF/Zhdin2Ypf2KzZiNin2YZf2KzZiNmK2YTZitipX9ij2YjYql/Ys9io2KrZhdio2LFf2KPZg9iq2YjYqNixX9mG2YjZgdmF2KjYsV/Yr9mK2LPZhdio2LEnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ9is2KfZhtmB2Ypf2YHZitmB2LHZil/Zhdin2LHYs1/Yo9mB2LHZitmEX9mF2KfZil/YrNmI2KfZhl/YrNmI2YrZhNmK2Klf2KPZiNiqX9iz2KjYqtmF2KjYsV/Yo9mD2KrZiNio2LFf2YbZiNmB2YXYqNixX9iv2YrYs9mF2KjYsScuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5czogJ9in2YTYo9it2K9f2KfZhNil2KvZhtmK2YZf2KfZhNir2YTYp9ir2KfYoV/Yp9mE2KPYsdio2LnYp9ihX9in2YTYrtmF2YrYs1/Yp9mE2KzZhdi52Klf2KfZhNiz2KjYqicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ9ij2K3Yr1/Ypdir2YbZitmGX9ir2YTYp9ir2KfYoV/Yo9ix2KjYudin2KFf2K7ZhdmK2LNf2KzZhdi52Klf2LPYqNiqJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ9itX9mGX9irX9ixX9iuX9isX9izJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vYp9mE2YrZiNmFINi52YTZiSDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb2LrYr9inINi52YTZiSDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBb2LnZhNmJINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vYo9mF2LMg2LnZhNmJINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFvYudmE2Ykg2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ9mB2YogJXMnLFxuICAgICAgICAgICAgcGFzdDogJ9mF2YbYsCAlcycsXG4gICAgICAgICAgICBzOiAn2KvZiNin2YYnLFxuICAgICAgICAgICAgc3M6ICclZCDYq9in2YbZitipJyxcbiAgICAgICAgICAgIG06ICfYr9mC2YrZgtipJyxcbiAgICAgICAgICAgIG1tOiAnJWQg2K/Zgtin2KbZgicsXG4gICAgICAgICAgICBoOiAn2LPYp9i52KknLFxuICAgICAgICAgICAgaGg6ICclZCDYs9in2LnYp9iqJyxcbiAgICAgICAgICAgIGQ6ICfZitmI2YUnLFxuICAgICAgICAgICAgZGQ6ICclZCDYo9mK2KfZhScsXG4gICAgICAgICAgICBNOiAn2LTZh9ixJyxcbiAgICAgICAgICAgIE1NOiAnJWQg2KPYtNmH2LEnLFxuICAgICAgICAgICAgeTogJ9iz2YbYqScsXG4gICAgICAgICAgICB5eTogJyVkINiz2YbZiNin2KonLFxuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gYXJUbjtcblxufSkpKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/ar-tn.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/ar.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/ar.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Arabic [ar]\n//! author : Abdel Said: https://github.com/abdelsaid\n//! author : Ahmed Elkhatib\n//! author : forabi https://github.com/forabi\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '١',\n            2: '٢',\n            3: '٣',\n            4: '٤',\n            5: '٥',\n            6: '٦',\n            7: '٧',\n            8: '٨',\n            9: '٩',\n            0: '٠',\n        },\n        numberMap = {\n            '١': '1',\n            '٢': '2',\n            '٣': '3',\n            '٤': '4',\n            '٥': '5',\n            '٦': '6',\n            '٧': '7',\n            '٨': '8',\n            '٩': '9',\n            '٠': '0',\n        },\n        pluralForm = function (n) {\n            return n === 0\n                ? 0\n                : n === 1\n                ? 1\n                : n === 2\n                ? 2\n                : n % 100 >= 3 && n % 100 <= 10\n                ? 3\n                : n % 100 >= 11\n                ? 4\n                : 5;\n        },\n        plurals = {\n            s: [\n                'أقل من ثانية',\n                'ثانية واحدة',\n                ['ثانيتان', 'ثانيتين'],\n                '%d ثوان',\n                '%d ثانية',\n                '%d ثانية',\n            ],\n            m: [\n                'أقل من دقيقة',\n                'دقيقة واحدة',\n                ['دقيقتان', 'دقيقتين'],\n                '%d دقائق',\n                '%d دقيقة',\n                '%d دقيقة',\n            ],\n            h: [\n                'أقل من ساعة',\n                'ساعة واحدة',\n                ['ساعتان', 'ساعتين'],\n                '%d ساعات',\n                '%d ساعة',\n                '%d ساعة',\n            ],\n            d: [\n                'أقل من يوم',\n                'يوم واحد',\n                ['يومان', 'يومين'],\n                '%d أيام',\n                '%d يومًا',\n                '%d يوم',\n            ],\n            M: [\n                'أقل من شهر',\n                'شهر واحد',\n                ['شهران', 'شهرين'],\n                '%d أشهر',\n                '%d شهرا',\n                '%d شهر',\n            ],\n            y: [\n                'أقل من عام',\n                'عام واحد',\n                ['عامان', 'عامين'],\n                '%d أعوام',\n                '%d عامًا',\n                '%d عام',\n            ],\n        },\n        pluralize = function (u) {\n            return function (number, withoutSuffix, string, isFuture) {\n                var f = pluralForm(number),\n                    str = plurals[u][pluralForm(number)];\n                if (f === 2) {\n                    str = str[withoutSuffix ? 0 : 1];\n                }\n                return str.replace(/%d/i, number);\n            };\n        },\n        months = [\n            'يناير',\n            'فبراير',\n            'مارس',\n            'أبريل',\n            'مايو',\n            'يونيو',\n            'يوليو',\n            'أغسطس',\n            'سبتمبر',\n            'أكتوبر',\n            'نوفمبر',\n            'ديسمبر',\n        ];\n\n    var ar = moment.defineLocale('ar', {\n        months: months,\n        monthsShort: months,\n        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'D/\\u200FM/\\u200FYYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /ص|م/,\n        isPM: function (input) {\n            return 'م' === input;\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ص';\n            } else {\n                return 'م';\n            }\n        },\n        calendar: {\n            sameDay: '[اليوم عند الساعة] LT',\n            nextDay: '[غدًا عند الساعة] LT',\n            nextWeek: 'dddd [عند الساعة] LT',\n            lastDay: '[أمس عند الساعة] LT',\n            lastWeek: 'dddd [عند الساعة] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'بعد %s',\n            past: 'منذ %s',\n            s: pluralize('s'),\n            ss: pluralize('s'),\n            m: pluralize('m'),\n            mm: pluralize('m'),\n            h: pluralize('h'),\n            hh: pluralize('h'),\n            d: pluralize('d'),\n            dd: pluralize('d'),\n            M: pluralize('M'),\n            MM: pluralize('M'),\n            y: pluralize('y'),\n            yy: pluralize('y'),\n        },\n        preparse: function (string) {\n            return string\n                .replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {\n                    return numberMap[match];\n                })\n                .replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string\n                .replace(/\\d/g, function (match) {\n                    return symbolMap[match];\n                })\n                .replace(/,/g, '،');\n        },\n        week: {\n            dow: 6, // Saturday is the first day of the week.\n            doy: 12, // The week that contains Jan 12th is the first week of the year.\n        },\n    });\n\n    return ar;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxrREFBVztBQUNyRSxHQUFHLENBQ3NCO0FBQ3pCLENBQUMsNEJBQTRCOztBQUU3Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYXIuanM/YmExMiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogQXJhYmljIFthcl1cbi8vISBhdXRob3IgOiBBYmRlbCBTYWlkOiBodHRwczovL2dpdGh1Yi5jb20vYWJkZWxzYWlkXG4vLyEgYXV0aG9yIDogQWhtZWQgRWxraGF0aWJcbi8vISBhdXRob3IgOiBmb3JhYmkgaHR0cHM6Ly9naXRodWIuY29tL2ZvcmFiaVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHN5bWJvbE1hcCA9IHtcbiAgICAgICAgICAgIDE6ICfZoScsXG4gICAgICAgICAgICAyOiAn2aInLFxuICAgICAgICAgICAgMzogJ9mjJyxcbiAgICAgICAgICAgIDQ6ICfZpCcsXG4gICAgICAgICAgICA1OiAn2aUnLFxuICAgICAgICAgICAgNjogJ9mmJyxcbiAgICAgICAgICAgIDc6ICfZpycsXG4gICAgICAgICAgICA4OiAn2agnLFxuICAgICAgICAgICAgOTogJ9mpJyxcbiAgICAgICAgICAgIDA6ICfZoCcsXG4gICAgICAgIH0sXG4gICAgICAgIG51bWJlck1hcCA9IHtcbiAgICAgICAgICAgICfZoSc6ICcxJyxcbiAgICAgICAgICAgICfZoic6ICcyJyxcbiAgICAgICAgICAgICfZoyc6ICczJyxcbiAgICAgICAgICAgICfZpCc6ICc0JyxcbiAgICAgICAgICAgICfZpSc6ICc1JyxcbiAgICAgICAgICAgICfZpic6ICc2JyxcbiAgICAgICAgICAgICfZpyc6ICc3JyxcbiAgICAgICAgICAgICfZqCc6ICc4JyxcbiAgICAgICAgICAgICfZqSc6ICc5JyxcbiAgICAgICAgICAgICfZoCc6ICcwJyxcbiAgICAgICAgfSxcbiAgICAgICAgcGx1cmFsRm9ybSA9IGZ1bmN0aW9uIChuKSB7XG4gICAgICAgICAgICByZXR1cm4gbiA9PT0gMFxuICAgICAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgICAgIDogbiA9PT0gMVxuICAgICAgICAgICAgICAgID8gMVxuICAgICAgICAgICAgICAgIDogbiA9PT0gMlxuICAgICAgICAgICAgICAgID8gMlxuICAgICAgICAgICAgICAgIDogbiAlIDEwMCA+PSAzICYmIG4gJSAxMDAgPD0gMTBcbiAgICAgICAgICAgICAgICA/IDNcbiAgICAgICAgICAgICAgICA6IG4gJSAxMDAgPj0gMTFcbiAgICAgICAgICAgICAgICA/IDRcbiAgICAgICAgICAgICAgICA6IDU7XG4gICAgICAgIH0sXG4gICAgICAgIHBsdXJhbHMgPSB7XG4gICAgICAgICAgICBzOiBbXG4gICAgICAgICAgICAgICAgJ9ij2YLZhCDZhdmGINir2KfZhtmK2KknLFxuICAgICAgICAgICAgICAgICfYq9in2YbZitipINmI2KfYrdiv2KknLFxuICAgICAgICAgICAgICAgIFsn2KvYp9mG2YrYqtin2YYnLCAn2KvYp9mG2YrYqtmK2YYnXSxcbiAgICAgICAgICAgICAgICAnJWQg2KvZiNin2YYnLFxuICAgICAgICAgICAgICAgICclZCDYq9in2YbZitipJyxcbiAgICAgICAgICAgICAgICAnJWQg2KvYp9mG2YrYqScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgbTogW1xuICAgICAgICAgICAgICAgICfYo9mC2YQg2YXZhiDYr9mC2YrZgtipJyxcbiAgICAgICAgICAgICAgICAn2K/ZgtmK2YLYqSDZiNin2K3Yr9ipJyxcbiAgICAgICAgICAgICAgICBbJ9iv2YLZitmC2KrYp9mGJywgJ9iv2YLZitmC2KrZitmGJ10sXG4gICAgICAgICAgICAgICAgJyVkINiv2YLYp9im2YInLFxuICAgICAgICAgICAgICAgICclZCDYr9mC2YrZgtipJyxcbiAgICAgICAgICAgICAgICAnJWQg2K/ZgtmK2YLYqScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgaDogW1xuICAgICAgICAgICAgICAgICfYo9mC2YQg2YXZhiDYs9in2LnYqScsXG4gICAgICAgICAgICAgICAgJ9iz2KfYudipINmI2KfYrdiv2KknLFxuICAgICAgICAgICAgICAgIFsn2LPYp9i52KrYp9mGJywgJ9iz2KfYudiq2YrZhiddLFxuICAgICAgICAgICAgICAgICclZCDYs9in2LnYp9iqJyxcbiAgICAgICAgICAgICAgICAnJWQg2LPYp9i52KknLFxuICAgICAgICAgICAgICAgICclZCDYs9in2LnYqScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgZDogW1xuICAgICAgICAgICAgICAgICfYo9mC2YQg2YXZhiDZitmI2YUnLFxuICAgICAgICAgICAgICAgICfZitmI2YUg2YjYp9it2K8nLFxuICAgICAgICAgICAgICAgIFsn2YrZiNmF2KfZhicsICfZitmI2YXZitmGJ10sXG4gICAgICAgICAgICAgICAgJyVkINij2YrYp9mFJyxcbiAgICAgICAgICAgICAgICAnJWQg2YrZiNmF2YvYpycsXG4gICAgICAgICAgICAgICAgJyVkINmK2YjZhScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgTTogW1xuICAgICAgICAgICAgICAgICfYo9mC2YQg2YXZhiDYtNmH2LEnLFxuICAgICAgICAgICAgICAgICfYtNmH2LEg2YjYp9it2K8nLFxuICAgICAgICAgICAgICAgIFsn2LTZh9ix2KfZhicsICfYtNmH2LHZitmGJ10sXG4gICAgICAgICAgICAgICAgJyVkINij2LTZh9ixJyxcbiAgICAgICAgICAgICAgICAnJWQg2LTZh9ix2KcnLFxuICAgICAgICAgICAgICAgICclZCDYtNmH2LEnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHk6IFtcbiAgICAgICAgICAgICAgICAn2KPZgtmEINmF2YYg2LnYp9mFJyxcbiAgICAgICAgICAgICAgICAn2LnYp9mFINmI2KfYrdivJyxcbiAgICAgICAgICAgICAgICBbJ9i52KfZhdin2YYnLCAn2LnYp9mF2YrZhiddLFxuICAgICAgICAgICAgICAgICclZCDYo9i52YjYp9mFJyxcbiAgICAgICAgICAgICAgICAnJWQg2LnYp9mF2YvYpycsXG4gICAgICAgICAgICAgICAgJyVkINi52KfZhScsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICBwbHVyYWxpemUgPSBmdW5jdGlvbiAodSkge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChudW1iZXIsIHdpdGhvdXRTdWZmaXgsIHN0cmluZywgaXNGdXR1cmUpIHtcbiAgICAgICAgICAgICAgICB2YXIgZiA9IHBsdXJhbEZvcm0obnVtYmVyKSxcbiAgICAgICAgICAgICAgICAgICAgc3RyID0gcGx1cmFsc1t1XVtwbHVyYWxGb3JtKG51bWJlcildO1xuICAgICAgICAgICAgICAgIGlmIChmID09PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0ciA9IHN0clt3aXRob3V0U3VmZml4ID8gMCA6IDFdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gc3RyLnJlcGxhY2UoLyVkL2ksIG51bWJlcik7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgICAgICBtb250aHMgPSBbXG4gICAgICAgICAgICAn2YrZhtin2YrYsScsXG4gICAgICAgICAgICAn2YHYqNix2KfZitixJyxcbiAgICAgICAgICAgICfZhdin2LHYsycsXG4gICAgICAgICAgICAn2KPYqNix2YrZhCcsXG4gICAgICAgICAgICAn2YXYp9mK2YgnLFxuICAgICAgICAgICAgJ9mK2YjZhtmK2YgnLFxuICAgICAgICAgICAgJ9mK2YjZhNmK2YgnLFxuICAgICAgICAgICAgJ9ij2LrYs9i32LMnLFxuICAgICAgICAgICAgJ9iz2KjYqtmF2KjYsScsXG4gICAgICAgICAgICAn2KPZg9iq2YjYqNixJyxcbiAgICAgICAgICAgICfZhtmI2YHZhdio2LEnLFxuICAgICAgICAgICAgJ9iv2YrYs9mF2KjYsScsXG4gICAgICAgIF07XG5cbiAgICB2YXIgYXIgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdhcicsIHtcbiAgICAgICAgbW9udGhzOiBtb250aHMsXG4gICAgICAgIG1vbnRoc1Nob3J0OiBtb250aHMsXG4gICAgICAgIHdlZWtkYXlzOiAn2KfZhNij2K3Yr1/Yp9mE2KXYq9mG2YrZhl/Yp9mE2KvZhNin2KvYp9ihX9in2YTYo9ix2KjYudin2KFf2KfZhNiu2YXZitizX9in2YTYrNmF2LnYqV/Yp9mE2LPYqNiqJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn2KPYrdivX9il2KvZhtmK2YZf2KvZhNin2KvYp9ihX9ij2LHYqNi52KfYoV/YrtmF2YrYs1/YrNmF2LnYqV/Ys9io2KonLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn2K1f2YZf2Ktf2LFf2K5f2Kxf2LMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0QvXFx1MjAwRk0vXFx1MjAwRllZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/YtXzZhS8sXG4gICAgICAgIGlzUE06IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuICfZhScgPT09IGlucHV0O1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn2LUnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9mFJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb2KfZhNmK2YjZhSDYudmG2K8g2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW9i62K/Zi9inINi52YbYryDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBb2LnZhtivINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vYo9mF2LMg2LnZhtivINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFvYudmG2K8g2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ9io2LnYryAlcycsXG4gICAgICAgICAgICBwYXN0OiAn2YXZhtiwICVzJyxcbiAgICAgICAgICAgIHM6IHBsdXJhbGl6ZSgncycpLFxuICAgICAgICAgICAgc3M6IHBsdXJhbGl6ZSgncycpLFxuICAgICAgICAgICAgbTogcGx1cmFsaXplKCdtJyksXG4gICAgICAgICAgICBtbTogcGx1cmFsaXplKCdtJyksXG4gICAgICAgICAgICBoOiBwbHVyYWxpemUoJ2gnKSxcbiAgICAgICAgICAgIGhoOiBwbHVyYWxpemUoJ2gnKSxcbiAgICAgICAgICAgIGQ6IHBsdXJhbGl6ZSgnZCcpLFxuICAgICAgICAgICAgZGQ6IHBsdXJhbGl6ZSgnZCcpLFxuICAgICAgICAgICAgTTogcGx1cmFsaXplKCdNJyksXG4gICAgICAgICAgICBNTTogcGx1cmFsaXplKCdNJyksXG4gICAgICAgICAgICB5OiBwbHVyYWxpemUoJ3knKSxcbiAgICAgICAgICAgIHl5OiBwbHVyYWxpemUoJ3knKSxcbiAgICAgICAgfSxcbiAgICAgICAgcHJlcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmdcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvW9mh2aLZo9mk2aXZptmn2ajZqdmgXS9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlck1hcFttYXRjaF07XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgv2IwvZywgJywnKTtcbiAgICAgICAgfSxcbiAgICAgICAgcG9zdGZvcm1hdDogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZ1xuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXGQvZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzeW1ib2xNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoLywvZywgJ9iMJyk7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogNiwgLy8gU2F0dXJkYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogMTIsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDEydGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gYXI7XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/ar.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/az.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/az.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Azerbaijani [az]\n//! author : topchiyev : https://github.com/topchiyev\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var suffixes = {\n        1: '-inci',\n        5: '-inci',\n        8: '-inci',\n        70: '-inci',\n        80: '-inci',\n        2: '-nci',\n        7: '-nci',\n        20: '-nci',\n        50: '-nci',\n        3: '-üncü',\n        4: '-üncü',\n        100: '-üncü',\n        6: '-ncı',\n        9: '-uncu',\n        10: '-uncu',\n        30: '-uncu',\n        60: '-ıncı',\n        90: '-ıncı',\n    };\n\n    var az = moment.defineLocale('az', {\n        months: 'yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr'.split(\n            '_'\n        ),\n        monthsShort: 'yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek'.split('_'),\n        weekdays:\n            'Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə'.split(\n                '_'\n            ),\n        weekdaysShort: 'Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən'.split('_'),\n        weekdaysMin: 'Bz_BE_ÇA_Çə_CA_Cü_Şə'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[bugün saat] LT',\n            nextDay: '[sabah saat] LT',\n            nextWeek: '[gələn həftə] dddd [saat] LT',\n            lastDay: '[dünən] LT',\n            lastWeek: '[keçən həftə] dddd [saat] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s sonra',\n            past: '%s əvvəl',\n            s: 'bir neçə saniyə',\n            ss: '%d saniyə',\n            m: 'bir dəqiqə',\n            mm: '%d dəqiqə',\n            h: 'bir saat',\n            hh: '%d saat',\n            d: 'bir gün',\n            dd: '%d gün',\n            M: 'bir ay',\n            MM: '%d ay',\n            y: 'bir il',\n            yy: '%d il',\n        },\n        meridiemParse: /gecə|səhər|gündüz|axşam/,\n        isPM: function (input) {\n            return /^(gündüz|axşam)$/.test(input);\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'gecə';\n            } else if (hour < 12) {\n                return 'səhər';\n            } else if (hour < 17) {\n                return 'gündüz';\n            } else {\n                return 'axşam';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/,\n        ordinal: function (number) {\n            if (number === 0) {\n                // special case for zero\n                return number + '-ıncı';\n            }\n            var a = number % 10,\n                b = (number % 100) - a,\n                c = number >= 100 ? 100 : null;\n            return number + (suffixes[a] || suffixes[b] || suffixes[c]);\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return az;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hei5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLFNBQVM7QUFDVCxvQ0FBb0MsSUFBSTtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2F6LmpzP2I1ZjYiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEF6ZXJiYWlqYW5pIFthel1cbi8vISBhdXRob3IgOiB0b3BjaGl5ZXYgOiBodHRwczovL2dpdGh1Yi5jb20vdG9wY2hpeWV2XG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgc3VmZml4ZXMgPSB7XG4gICAgICAgIDE6ICctaW5jaScsXG4gICAgICAgIDU6ICctaW5jaScsXG4gICAgICAgIDg6ICctaW5jaScsXG4gICAgICAgIDcwOiAnLWluY2knLFxuICAgICAgICA4MDogJy1pbmNpJyxcbiAgICAgICAgMjogJy1uY2knLFxuICAgICAgICA3OiAnLW5jaScsXG4gICAgICAgIDIwOiAnLW5jaScsXG4gICAgICAgIDUwOiAnLW5jaScsXG4gICAgICAgIDM6ICctw7xuY8O8JyxcbiAgICAgICAgNDogJy3DvG5jw7wnLFxuICAgICAgICAxMDA6ICctw7xuY8O8JyxcbiAgICAgICAgNjogJy1uY8SxJyxcbiAgICAgICAgOTogJy11bmN1JyxcbiAgICAgICAgMTA6ICctdW5jdScsXG4gICAgICAgIDMwOiAnLXVuY3UnLFxuICAgICAgICA2MDogJy3EsW5jxLEnLFxuICAgICAgICA5MDogJy3EsW5jxLEnLFxuICAgIH07XG5cbiAgICB2YXIgYXogPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdheicsIHtcbiAgICAgICAgbW9udGhzOiAneWFudmFyX2ZldnJhbF9tYXJ0X2FwcmVsX21heV9peXVuX2l5dWxfYXZxdXN0X3NlbnR5YWJyX29rdHlhYnJfbm95YWJyX2Rla2Ficicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICd5YW5fZmV2X21hcl9hcHJfbWF5X2l5bl9peWxfYXZxX3Nlbl9va3Rfbm95X2Rlaycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6XG4gICAgICAgICAgICAnQmF6YXJfQmF6YXIgZXJ0yZlzaV/Dh8mZcsWfyZluYsmZIGF4xZ9hbcSxX8OHyZlyxZ/JmW5iyZlfQ8O8bcmZIGF4xZ9hbcSxX0PDvG3JmV/FnsmZbmLJmScuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnQmF6X0J6RV/Dh0F4X8OHyZlyX0NBeF9Dw7xtX8WeyZluJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ0J6X0JFX8OHQV/Dh8mZX0NBX0PDvF/FnsmZJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbYnVnw7xuIHNhYXRdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbc2FiYWggc2FhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdbZ8mZbMmZbiBoyZlmdMmZXSBkZGRkIFtzYWF0XSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW2TDvG7JmW5dIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW2tlw6fJmW4gaMmZZnTJmV0gZGRkZCBbc2FhdF0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICclcyBzb25yYScsXG4gICAgICAgICAgICBwYXN0OiAnJXMgyZl2dsmZbCcsXG4gICAgICAgICAgICBzOiAnYmlyIG5lw6fJmSBzYW5pecmZJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2FuaXnJmScsXG4gICAgICAgICAgICBtOiAnYmlyIGTJmXFpccmZJyxcbiAgICAgICAgICAgIG1tOiAnJWQgZMmZcWlxyZknLFxuICAgICAgICAgICAgaDogJ2JpciBzYWF0JyxcbiAgICAgICAgICAgIGhoOiAnJWQgc2FhdCcsXG4gICAgICAgICAgICBkOiAnYmlyIGfDvG4nLFxuICAgICAgICAgICAgZGQ6ICclZCBnw7xuJyxcbiAgICAgICAgICAgIE06ICdiaXIgYXknLFxuICAgICAgICAgICAgTU06ICclZCBheScsXG4gICAgICAgICAgICB5OiAnYmlyIGlsJyxcbiAgICAgICAgICAgIHl5OiAnJWQgaWwnLFxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAvZ2VjyZl8c8mZaMmZcnxnw7xuZMO8enxheMWfYW0vLFxuICAgICAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiAvXihnw7xuZMO8enxheMWfYW0pJC8udGVzdChpbnB1dCk7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2dlY8mZJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdzyZloyZlyJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDE3KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdnw7xuZMO8eic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAnYXjFn2FtJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9LSjEsW5jxLF8aW5jaXxuY2l8w7xuY8O8fG5jxLF8dW5jdSkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICBpZiAobnVtYmVyID09PSAwKSB7XG4gICAgICAgICAgICAgICAgLy8gc3BlY2lhbCBjYXNlIGZvciB6ZXJvXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICctxLFuY8SxJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBhID0gbnVtYmVyICUgMTAsXG4gICAgICAgICAgICAgICAgYiA9IChudW1iZXIgJSAxMDApIC0gYSxcbiAgICAgICAgICAgICAgICBjID0gbnVtYmVyID49IDEwMCA/IDEwMCA6IG51bGw7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgKHN1ZmZpeGVzW2FdIHx8IHN1ZmZpeGVzW2JdIHx8IHN1ZmZpeGVzW2NdKTtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNywgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gN3RoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGF6O1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/az.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/be.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/be.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Belarusian [be]\n//! author : Dmitry Demidov : https://github.com/demidov91\n//! author: Praleska: http://praleska.pro/\n//! Author : Menelion Elensúle : https://github.com/Oire\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function plural(word, num) {\n        var forms = word.split('_');\n        return num % 10 === 1 && num % 100 !== 11\n            ? forms[0]\n            : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20)\n            ? forms[1]\n            : forms[2];\n    }\n    function relativeTimeWithPlural(number, withoutSuffix, key) {\n        var format = {\n            ss: withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд',\n            mm: withoutSuffix ? 'хвіліна_хвіліны_хвілін' : 'хвіліну_хвіліны_хвілін',\n            hh: withoutSuffix ? 'гадзіна_гадзіны_гадзін' : 'гадзіну_гадзіны_гадзін',\n            dd: 'дзень_дні_дзён',\n            MM: 'месяц_месяцы_месяцаў',\n            yy: 'год_гады_гадоў',\n        };\n        if (key === 'm') {\n            return withoutSuffix ? 'хвіліна' : 'хвіліну';\n        } else if (key === 'h') {\n            return withoutSuffix ? 'гадзіна' : 'гадзіну';\n        } else {\n            return number + ' ' + plural(format[key], +number);\n        }\n    }\n\n    var be = moment.defineLocale('be', {\n        months: {\n            format: 'студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня'.split(\n                '_'\n            ),\n            standalone:\n                'студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань'.split(\n                    '_'\n                ),\n        },\n        monthsShort:\n            'студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж'.split('_'),\n        weekdays: {\n            format: 'нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу'.split(\n                '_'\n            ),\n            standalone:\n                'нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота'.split(\n                    '_'\n                ),\n            isFormat: /\\[ ?[Ууў] ?(?:мінулую|наступную)? ?\\] ?dddd/,\n        },\n        weekdaysShort: 'нд_пн_ат_ср_чц_пт_сб'.split('_'),\n        weekdaysMin: 'нд_пн_ат_ср_чц_пт_сб'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY г.',\n            LLL: 'D MMMM YYYY г., HH:mm',\n            LLLL: 'dddd, D MMMM YYYY г., HH:mm',\n        },\n        calendar: {\n            sameDay: '[Сёння ў] LT',\n            nextDay: '[Заўтра ў] LT',\n            lastDay: '[Учора ў] LT',\n            nextWeek: function () {\n                return '[У] dddd [ў] LT';\n            },\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                    case 5:\n                    case 6:\n                        return '[У мінулую] dddd [ў] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                        return '[У мінулы] dddd [ў] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'праз %s',\n            past: '%s таму',\n            s: 'некалькі секунд',\n            m: relativeTimeWithPlural,\n            mm: relativeTimeWithPlural,\n            h: relativeTimeWithPlural,\n            hh: relativeTimeWithPlural,\n            d: 'дзень',\n            dd: relativeTimeWithPlural,\n            M: 'месяц',\n            MM: relativeTimeWithPlural,\n            y: 'год',\n            yy: relativeTimeWithPlural,\n        },\n        meridiemParse: /ночы|раніцы|дня|вечара/,\n        isPM: function (input) {\n            return /^(дня|вечара)$/.test(input);\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ночы';\n            } else if (hour < 12) {\n                return 'раніцы';\n            } else if (hour < 17) {\n                return 'дня';\n            } else {\n                return 'вечара';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(і|ы|га)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'M':\n                case 'd':\n                case 'DDD':\n                case 'w':\n                case 'W':\n                    return (number % 10 === 2 || number % 10 === 3) &&\n                        number % 100 !== 12 &&\n                        number % 100 !== 13\n                        ? number + '-і'\n                        : number + '-ы';\n                case 'D':\n                    return number + '-га';\n                default:\n                    return number;\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return be;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9iZS5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxrREFBVztBQUNyRSxHQUFHLENBQ3NCO0FBQ3pCLENBQUMsNEJBQTRCOztBQUU3Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYmUuanM/OTc0OSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogQmVsYXJ1c2lhbiBbYmVdXG4vLyEgYXV0aG9yIDogRG1pdHJ5IERlbWlkb3YgOiBodHRwczovL2dpdGh1Yi5jb20vZGVtaWRvdjkxXG4vLyEgYXV0aG9yOiBQcmFsZXNrYTogaHR0cDovL3ByYWxlc2thLnByby9cbi8vISBBdXRob3IgOiBNZW5lbGlvbiBFbGVuc8O6bGUgOiBodHRwczovL2dpdGh1Yi5jb20vT2lyZVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgZnVuY3Rpb24gcGx1cmFsKHdvcmQsIG51bSkge1xuICAgICAgICB2YXIgZm9ybXMgPSB3b3JkLnNwbGl0KCdfJyk7XG4gICAgICAgIHJldHVybiBudW0gJSAxMCA9PT0gMSAmJiBudW0gJSAxMDAgIT09IDExXG4gICAgICAgICAgICA/IGZvcm1zWzBdXG4gICAgICAgICAgICA6IG51bSAlIDEwID49IDIgJiYgbnVtICUgMTAgPD0gNCAmJiAobnVtICUgMTAwIDwgMTAgfHwgbnVtICUgMTAwID49IDIwKVxuICAgICAgICAgICAgPyBmb3Jtc1sxXVxuICAgICAgICAgICAgOiBmb3Jtc1syXTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVsYXRpdmVUaW1lV2l0aFBsdXJhbChudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSkge1xuICAgICAgICB2YXIgZm9ybWF0ID0ge1xuICAgICAgICAgICAgc3M6IHdpdGhvdXRTdWZmaXggPyAn0YHQtdC60YPQvdC00LBf0YHQtdC60YPQvdC00Ytf0YHQtdC60YPQvdC0JyA6ICfRgdC10LrRg9C90LTRg1/RgdC10LrRg9C90LTRi1/RgdC10LrRg9C90LQnLFxuICAgICAgICAgICAgbW06IHdpdGhvdXRTdWZmaXggPyAn0YXQstGW0LvRltC90LBf0YXQstGW0LvRltC90Ytf0YXQstGW0LvRltC9JyA6ICfRhdCy0ZbQu9GW0L3Rg1/RhdCy0ZbQu9GW0L3Ri1/RhdCy0ZbQu9GW0L0nLFxuICAgICAgICAgICAgaGg6IHdpdGhvdXRTdWZmaXggPyAn0LPQsNC00LfRltC90LBf0LPQsNC00LfRltC90Ytf0LPQsNC00LfRltC9JyA6ICfQs9Cw0LTQt9GW0L3Rg1/Qs9Cw0LTQt9GW0L3Ri1/Qs9Cw0LTQt9GW0L0nLFxuICAgICAgICAgICAgZGQ6ICfQtNC30LXQvdGMX9C00L3Rll/QtNC30ZHQvScsXG4gICAgICAgICAgICBNTTogJ9C80LXRgdGP0YZf0LzQtdGB0Y/RhtGLX9C80LXRgdGP0YbQsNGeJyxcbiAgICAgICAgICAgIHl5OiAn0LPQvtC0X9Cz0LDQtNGLX9Cz0LDQtNC+0Z4nLFxuICAgICAgICB9O1xuICAgICAgICBpZiAoa2V5ID09PSAnbScpIHtcbiAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gJ9GF0LLRltC70ZbQvdCwJyA6ICfRhdCy0ZbQu9GW0L3Rgyc7XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnaCcpIHtcbiAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gJ9Cz0LDQtNC30ZbQvdCwJyA6ICfQs9Cw0LTQt9GW0L3Rgyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJyAnICsgcGx1cmFsKGZvcm1hdFtrZXldLCArbnVtYmVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBiZSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2JlJywge1xuICAgICAgICBtb250aHM6IHtcbiAgICAgICAgICAgIGZvcm1hdDogJ9GB0YLRg9C00LfQtdC90Y9f0LvRjtGC0LDQs9CwX9GB0LDQutCw0LLRltC60LBf0LrRgNCw0YHQsNCy0ZbQutCwX9GC0YDQsNGe0L3Rj1/Rh9GN0YDQstC10L3Rj1/Qu9GW0L/QtdC90Y9f0LbQvdGW0Z7QvdGPX9Cy0LXRgNCw0YHQvdGPX9C60LDRgdGC0YDRi9GH0L3RltC60LBf0LvRltGB0YLQsNC/0LDQtNCwX9GB0L3QtdC20L3Rjycuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgc3RhbmRhbG9uZTpcbiAgICAgICAgICAgICAgICAn0YHRgtGD0LTQt9C10L3RjF/Qu9GO0YLRi1/RgdCw0LrQsNCy0ZbQul/QutGA0LDRgdCw0LLRltC6X9GC0YDQsNCy0LXQvdGMX9GH0Y3RgNCy0LXQvdGMX9C70ZbQv9C10L3RjF/QttC90ZbQstC10L3RjF/QstC10YDQsNGB0LXQvdGMX9C60LDRgdGC0YDRi9GH0L3RltC6X9C70ZbRgdGC0LDQv9Cw0LRf0YHQvdC10LbQsNC90YwnLnNwbGl0KFxuICAgICAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICB9LFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICfRgdGC0YPQtF/Qu9GO0YJf0YHQsNC6X9C60YDQsNGBX9GC0YDQsNCyX9GH0Y3RgNCyX9C70ZbQv1/QttC90ZbQsl/QstC10YBf0LrQsNGB0YJf0LvRltGB0YJf0YHQvdC10LYnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiB7XG4gICAgICAgICAgICBmb3JtYXQ6ICfQvdGP0LTQt9C10LvRjl/Qv9Cw0L3Rj9C00LfQtdC70LDQul/QsNGe0YLQvtGA0LDQul/RgdC10YDQsNC00YNf0YfQsNGG0LLQtdGAX9C/0Y/RgtC90ZbRhtGDX9GB0YPQsdC+0YLRgycuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgc3RhbmRhbG9uZTpcbiAgICAgICAgICAgICAgICAn0L3Rj9C00LfQtdC70Y9f0L/QsNC90Y/QtNC30LXQu9Cw0Lpf0LDRntGC0L7RgNCw0Lpf0YHQtdGA0LDQtNCwX9GH0LDRhtCy0LXRgF/Qv9GP0YLQvdGW0YbQsF/RgdGD0LHQvtGC0LAnLnNwbGl0KFxuICAgICAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgaXNGb3JtYXQ6IC9cXFsgP1vQo9GD0Z5dID8oPzrQvNGW0L3Rg9C70YPRjnzQvdCw0YHRgtGD0L/QvdGD0Y4pPyA/XFxdID9kZGRkLyxcbiAgICAgICAgfSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ9C90LRf0L/QvV/QsNGCX9GB0YBf0YfRhl/Qv9GCX9GB0LEnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn0L3QtF/Qv9C9X9Cw0YJf0YHRgF/Rh9GGX9C/0YJf0YHQsScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWSDQsy4nLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkg0LMuLCBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkg0LMuLCBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW9Ch0ZHQvdC90Y8g0Z5dIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb0JfQsNGe0YLRgNCwINGeXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW9Cj0YfQvtGA0LAg0Z5dIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdb0KNdIGRkZGQgW9GeXSBMVCc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdb0KMg0LzRltC90YPQu9GD0Y5dIGRkZGQgW9GeXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1vQoyDQvNGW0L3Rg9C70YtdIGRkZGQgW9GeXSBMVCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAn0L/RgNCw0LcgJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzINGC0LDQvNGDJyxcbiAgICAgICAgICAgIHM6ICfQvdC10LrQsNC70YzQutGWINGB0LXQutGD0L3QtCcsXG4gICAgICAgICAgICBtOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgbW06IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICBoOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgaGg6IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICBkOiAn0LTQt9C10L3RjCcsXG4gICAgICAgICAgICBkZDogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgICAgIE06ICfQvNC10YHRj9GGJyxcbiAgICAgICAgICAgIE1NOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgeTogJ9Cz0L7QtCcsXG4gICAgICAgICAgICB5eTogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL9C90L7Rh9GLfNGA0LDQvdGW0YbRi3zQtNC90Y980LLQtdGH0LDRgNCwLyxcbiAgICAgICAgaXNQTTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gL14o0LTQvdGPfNCy0LXRh9Cw0YDQsCkkLy50ZXN0KGlucHV0KTtcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgNCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn0L3QvtGH0YsnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9GA0LDQvdGW0YbRiyc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxNykge1xuICAgICAgICAgICAgICAgIHJldHVybiAn0LTQvdGPJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfQstC10YfQsNGA0LAnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0tKNGWfNGLfNCz0LApLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlciwgcGVyaW9kKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHBlcmlvZCkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ00nOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0RERCc6XG4gICAgICAgICAgICAgICAgY2FzZSAndyc6XG4gICAgICAgICAgICAgICAgY2FzZSAnVyc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAobnVtYmVyICUgMTAgPT09IDIgfHwgbnVtYmVyICUgMTAgPT09IDMpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBudW1iZXIgJSAxMDAgIT09IDEyICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBudW1iZXIgJSAxMDAgIT09IDEzXG4gICAgICAgICAgICAgICAgICAgICAgICA/IG51bWJlciArICct0ZYnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG51bWJlciArICct0YsnO1xuICAgICAgICAgICAgICAgIGNhc2UgJ0QnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3Qs9CwJztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA3LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA3dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gYmU7XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/be.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/bg.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/bg.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Bulgarian [bg]\n//! author : Krasen Borisov : https://github.com/kraz\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var bg = moment.defineLocale('bg', {\n        months: 'януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември'.split(\n            '_'\n        ),\n        monthsShort: 'яну_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек'.split('_'),\n        weekdays: 'неделя_понеделник_вторник_сряда_четвъртък_петък_събота'.split(\n            '_'\n        ),\n        weekdaysShort: 'нед_пон_вто_сря_чет_пет_съб'.split('_'),\n        weekdaysMin: 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'D.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY H:mm',\n            LLLL: 'dddd, D MMMM YYYY H:mm',\n        },\n        calendar: {\n            sameDay: '[Днес в] LT',\n            nextDay: '[Утре в] LT',\n            nextWeek: 'dddd [в] LT',\n            lastDay: '[Вчера в] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                    case 6:\n                        return '[Миналата] dddd [в] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[Миналия] dddd [в] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'след %s',\n            past: 'преди %s',\n            s: 'няколко секунди',\n            ss: '%d секунди',\n            m: 'минута',\n            mm: '%d минути',\n            h: 'час',\n            hh: '%d часа',\n            d: 'ден',\n            dd: '%d дена',\n            w: 'седмица',\n            ww: '%d седмици',\n            M: 'месец',\n            MM: '%d месеца',\n            y: 'година',\n            yy: '%d години',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(ев|ен|ти|ви|ри|ми)/,\n        ordinal: function (number) {\n            var lastDigit = number % 10,\n                last2Digits = number % 100;\n            if (number === 0) {\n                return number + '-ев';\n            } else if (last2Digits === 0) {\n                return number + '-ен';\n            } else if (last2Digits > 10 && last2Digits < 20) {\n                return number + '-ти';\n            } else if (lastDigit === 1) {\n                return number + '-ви';\n            } else if (lastDigit === 2) {\n                return number + '-ри';\n            } else if (lastDigit === 7 || lastDigit === 8) {\n                return number + '-ми';\n            } else {\n                return number + '-ти';\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return bg;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9iZy5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYmcuanM/NmU3OCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogQnVsZ2FyaWFuIFtiZ11cbi8vISBhdXRob3IgOiBLcmFzZW4gQm9yaXNvdiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9rcmF6XG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgYmcgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdiZycsIHtcbiAgICAgICAgbW9udGhzOiAn0Y/QvdGD0LDRgNC4X9GE0LXQstGA0YPQsNGA0Lhf0LzQsNGA0YJf0LDQv9GA0LjQu1/QvNCw0Llf0Y7QvdC4X9GO0LvQuF/QsNCy0LPRg9GB0YJf0YHQtdC/0YLQtdC80LLRgNC4X9C+0LrRgtC+0LzQstGA0Lhf0L3QvtC10LzQstGA0Lhf0LTQtdC60LXQvNCy0YDQuCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICfRj9C90YNf0YTQtdCyX9C80LDRgF/QsNC/0YBf0LzQsNC5X9GO0L3QuF/RjtC70Lhf0LDQstCzX9GB0LXQv1/QvtC60YJf0L3QvtC1X9C00LXQuicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICfQvdC10LTQtdC70Y9f0L/QvtC90LXQtNC10LvQvdC40Lpf0LLRgtC+0YDQvdC40Lpf0YHRgNGP0LTQsF/Rh9C10YLQstGK0YDRgtGK0Lpf0L/QtdGC0YrQul/RgdGK0LHQvtGC0LAnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfQvdC10LRf0L/QvtC9X9Cy0YLQvl/RgdGA0Y9f0YfQtdGCX9C/0LXRgl/RgdGK0LEnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn0L3QtF/Qv9C9X9Cy0YJf0YHRgF/Rh9GCX9C/0YJf0YHQsScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSDptbScsXG4gICAgICAgICAgICBMVFM6ICdIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb0JTQvdC10YEg0LJdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb0KPRgtGA0LUg0LJdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBb0LJdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb0JLRh9C10YDQsCDQsl0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW9Cc0LjQvdCw0LvQsNGC0LBdIGRkZGQgW9CyXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW9Cc0LjQvdCw0LvQuNGPXSBkZGRkIFvQsl0gTFQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ9GB0LvQtdC0ICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICfQv9GA0LXQtNC4ICVzJyxcbiAgICAgICAgICAgIHM6ICfQvdGP0LrQvtC70LrQviDRgdC10LrRg9C90LTQuCcsXG4gICAgICAgICAgICBzczogJyVkINGB0LXQutGD0L3QtNC4JyxcbiAgICAgICAgICAgIG06ICfQvNC40L3Rg9GC0LAnLFxuICAgICAgICAgICAgbW06ICclZCDQvNC40L3Rg9GC0LgnLFxuICAgICAgICAgICAgaDogJ9GH0LDRgScsXG4gICAgICAgICAgICBoaDogJyVkINGH0LDRgdCwJyxcbiAgICAgICAgICAgIGQ6ICfQtNC10L0nLFxuICAgICAgICAgICAgZGQ6ICclZCDQtNC10L3QsCcsXG4gICAgICAgICAgICB3OiAn0YHQtdC00LzQuNGG0LAnLFxuICAgICAgICAgICAgd3c6ICclZCDRgdC10LTQvNC40YbQuCcsXG4gICAgICAgICAgICBNOiAn0LzQtdGB0LXRhicsXG4gICAgICAgICAgICBNTTogJyVkINC80LXRgdC10YbQsCcsXG4gICAgICAgICAgICB5OiAn0LPQvtC00LjQvdCwJyxcbiAgICAgICAgICAgIHl5OiAnJWQg0LPQvtC00LjQvdC4JyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9LSjQtdCyfNC10L180YLQuHzQstC4fNGA0Lh80LzQuCkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICB2YXIgbGFzdERpZ2l0ID0gbnVtYmVyICUgMTAsXG4gICAgICAgICAgICAgICAgbGFzdDJEaWdpdHMgPSBudW1iZXIgJSAxMDA7XG4gICAgICAgICAgICBpZiAobnVtYmVyID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct0LXQsic7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGxhc3QyRGlnaXRzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct0LXQvSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGxhc3QyRGlnaXRzID4gMTAgJiYgbGFzdDJEaWdpdHMgPCAyMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLdGC0LgnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChsYXN0RGlnaXQgPT09IDEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3QstC4JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobGFzdERpZ2l0ID09PSAyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct0YDQuCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGxhc3REaWdpdCA9PT0gNyB8fCBsYXN0RGlnaXQgPT09IDgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3QvNC4JztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct0YLQuCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDcsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDd0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBiZztcblxufSkpKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/bg.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/bm.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/bm.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Bambara [bm]\n//! author : Estelle Comment : https://github.com/estellecomment\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var bm = moment.defineLocale('bm', {\n        months: 'Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_Mɛkalo_Zuwɛnkalo_Zuluyekalo_Utikalo_Sɛtanburukalo_ɔkutɔburukalo_Nowanburukalo_Desanburukalo'.split(\n            '_'\n        ),\n        monthsShort: 'Zan_Few_Mar_Awi_Mɛ_Zuw_Zul_Uti_Sɛt_ɔku_Now_Des'.split('_'),\n        weekdays: 'Kari_Ntɛnɛn_Tarata_Araba_Alamisa_Juma_Sibiri'.split('_'),\n        weekdaysShort: 'Kar_Ntɛ_Tar_Ara_Ala_Jum_Sib'.split('_'),\n        weekdaysMin: 'Ka_Nt_Ta_Ar_Al_Ju_Si'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'MMMM [tile] D [san] YYYY',\n            LLL: 'MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm',\n            LLLL: 'dddd MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm',\n        },\n        calendar: {\n            sameDay: '[Bi lɛrɛ] LT',\n            nextDay: '[Sini lɛrɛ] LT',\n            nextWeek: 'dddd [don lɛrɛ] LT',\n            lastDay: '[Kunu lɛrɛ] LT',\n            lastWeek: 'dddd [tɛmɛnen lɛrɛ] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s kɔnɔ',\n            past: 'a bɛ %s bɔ',\n            s: 'sanga dama dama',\n            ss: 'sekondi %d',\n            m: 'miniti kelen',\n            mm: 'miniti %d',\n            h: 'lɛrɛ kelen',\n            hh: 'lɛrɛ %d',\n            d: 'tile kelen',\n            dd: 'tile %d',\n            M: 'kalo kelen',\n            MM: 'kalo %d',\n            y: 'san kelen',\n            yy: 'san %d',\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return bm;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ibS5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2JtLmpzP2Y5NGMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEJhbWJhcmEgW2JtXVxuLy8hIGF1dGhvciA6IEVzdGVsbGUgQ29tbWVudCA6IGh0dHBzOi8vZ2l0aHViLmNvbS9lc3RlbGxlY29tbWVudFxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIGJtID0gbW9tZW50LmRlZmluZUxvY2FsZSgnYm0nLCB7XG4gICAgICAgIG1vbnRoczogJ1phbnd1eWVrYWxvX0Zld3VydXlla2Fsb19NYXJpc2lrYWxvX0F3aXJpbGlrYWxvX03Jm2thbG9fWnV3yZtua2Fsb19adWx1eWVrYWxvX1V0aWthbG9fU8mbdGFuYnVydWthbG9fyZRrdXTJlGJ1cnVrYWxvX05vd2FuYnVydWthbG9fRGVzYW5idXJ1a2Fsbycuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdaYW5fRmV3X01hcl9Bd2lfTcmbX1p1d19adWxfVXRpX1PJm3RfyZRrdV9Ob3dfRGVzJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ0thcmlfTnTJm27Jm25fVGFyYXRhX0FyYWJhX0FsYW1pc2FfSnVtYV9TaWJpcmknLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdLYXJfTnTJm19UYXJfQXJhX0FsYV9KdW1fU2liJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ0thX050X1RhX0FyX0FsX0p1X1NpJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ01NTU0gW3RpbGVdIEQgW3Nhbl0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdNTU1NIFt0aWxlXSBEIFtzYW5dIFlZWVkgW2zJm3LJm10gSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQgTU1NTSBbdGlsZV0gRCBbc2FuXSBZWVlZIFtsyZtyyZtdIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbQmkgbMmbcsmbXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW1NpbmkgbMmbcsmbXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW2RvbiBsyZtyyZtdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbS3VudSBsyZtyyZtdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnZGRkZCBbdMmbbcmbbmVuIGzJm3LJm10gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICclcyBryZRuyZQnLFxuICAgICAgICAgICAgcGFzdDogJ2EgYsmbICVzIGLJlCcsXG4gICAgICAgICAgICBzOiAnc2FuZ2EgZGFtYSBkYW1hJyxcbiAgICAgICAgICAgIHNzOiAnc2Vrb25kaSAlZCcsXG4gICAgICAgICAgICBtOiAnbWluaXRpIGtlbGVuJyxcbiAgICAgICAgICAgIG1tOiAnbWluaXRpICVkJyxcbiAgICAgICAgICAgIGg6ICdsyZtyyZsga2VsZW4nLFxuICAgICAgICAgICAgaGg6ICdsyZtyyZsgJWQnLFxuICAgICAgICAgICAgZDogJ3RpbGUga2VsZW4nLFxuICAgICAgICAgICAgZGQ6ICd0aWxlICVkJyxcbiAgICAgICAgICAgIE06ICdrYWxvIGtlbGVuJyxcbiAgICAgICAgICAgIE1NOiAna2FsbyAlZCcsXG4gICAgICAgICAgICB5OiAnc2FuIGtlbGVuJyxcbiAgICAgICAgICAgIHl5OiAnc2FuICVkJyxcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGJtO1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/bm.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/bn-bd.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/bn-bd.js ***!
  \*********************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Bengali (Bangladesh) [bn-bd]\n//! author : Asraf Hossain Patoary : https://github.com/ashwoolford\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '১',\n            2: '২',\n            3: '৩',\n            4: '৪',\n            5: '৫',\n            6: '৬',\n            7: '৭',\n            8: '৮',\n            9: '৯',\n            0: '০',\n        },\n        numberMap = {\n            '১': '1',\n            '২': '2',\n            '৩': '3',\n            '৪': '4',\n            '৫': '5',\n            '৬': '6',\n            '৭': '7',\n            '৮': '8',\n            '৯': '9',\n            '০': '0',\n        };\n\n    var bnBd = moment.defineLocale('bn-bd', {\n        months: 'জানুয়ারি_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split(\n            '_'\n        ),\n        monthsShort:\n            'জানু_ফেব্রু_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্ট_অক্টো_নভে_ডিসে'.split(\n                '_'\n            ),\n        weekdays: 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split(\n            '_'\n        ),\n        weekdaysShort: 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'),\n        weekdaysMin: 'রবি_সোম_মঙ্গল_বুধ_বৃহ_শুক্র_শনি'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm সময়',\n            LTS: 'A h:mm:ss সময়',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm সময়',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm সময়',\n        },\n        calendar: {\n            sameDay: '[আজ] LT',\n            nextDay: '[আগামীকাল] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[গতকাল] LT',\n            lastWeek: '[গত] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s পরে',\n            past: '%s আগে',\n            s: 'কয়েক সেকেন্ড',\n            ss: '%d সেকেন্ড',\n            m: 'এক মিনিট',\n            mm: '%d মিনিট',\n            h: 'এক ঘন্টা',\n            hh: '%d ঘন্টা',\n            d: 'এক দিন',\n            dd: '%d দিন',\n            M: 'এক মাস',\n            MM: '%d মাস',\n            y: 'এক বছর',\n            yy: '%d বছর',\n        },\n        preparse: function (string) {\n            return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n\n        meridiemParse: /রাত|ভোর|সকাল|দুপুর|বিকাল|সন্ধ্যা|রাত/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'রাত') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'ভোর') {\n                return hour;\n            } else if (meridiem === 'সকাল') {\n                return hour;\n            } else if (meridiem === 'দুপুর') {\n                return hour >= 3 ? hour : hour + 12;\n            } else if (meridiem === 'বিকাল') {\n                return hour + 12;\n            } else if (meridiem === 'সন্ধ্যা') {\n                return hour + 12;\n            }\n        },\n\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'রাত';\n            } else if (hour < 6) {\n                return 'ভোর';\n            } else if (hour < 12) {\n                return 'সকাল';\n            } else if (hour < 15) {\n                return 'দুপুর';\n            } else if (hour < 18) {\n                return 'বিকাল';\n            } else if (hour < 20) {\n                return 'সন্ধ্যা';\n            } else {\n                return 'রাত';\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return bnBd;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ibi1iZC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2JuLWJkLmpzP2Q4MjEiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEJlbmdhbGkgKEJhbmdsYWRlc2gpIFtibi1iZF1cbi8vISBhdXRob3IgOiBBc3JhZiBIb3NzYWluIFBhdG9hcnkgOiBodHRwczovL2dpdGh1Yi5jb20vYXNod29vbGZvcmRcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBzeW1ib2xNYXAgPSB7XG4gICAgICAgICAgICAxOiAn4KenJyxcbiAgICAgICAgICAgIDI6ICfgp6gnLFxuICAgICAgICAgICAgMzogJ+CnqScsXG4gICAgICAgICAgICA0OiAn4KeqJyxcbiAgICAgICAgICAgIDU6ICfgp6snLFxuICAgICAgICAgICAgNjogJ+CnrCcsXG4gICAgICAgICAgICA3OiAn4KetJyxcbiAgICAgICAgICAgIDg6ICfgp64nLFxuICAgICAgICAgICAgOTogJ+CnrycsXG4gICAgICAgICAgICAwOiAn4KemJyxcbiAgICAgICAgfSxcbiAgICAgICAgbnVtYmVyTWFwID0ge1xuICAgICAgICAgICAgJ+Cnpyc6ICcxJyxcbiAgICAgICAgICAgICfgp6gnOiAnMicsXG4gICAgICAgICAgICAn4KepJzogJzMnLFxuICAgICAgICAgICAgJ+Cnqic6ICc0JyxcbiAgICAgICAgICAgICfgp6snOiAnNScsXG4gICAgICAgICAgICAn4KesJzogJzYnLFxuICAgICAgICAgICAgJ+CnrSc6ICc3JyxcbiAgICAgICAgICAgICfgp64nOiAnOCcsXG4gICAgICAgICAgICAn4KevJzogJzknLFxuICAgICAgICAgICAgJ+Cnpic6ICcwJyxcbiAgICAgICAgfTtcblxuICAgIHZhciBibkJkID0gbW9tZW50LmRlZmluZUxvY2FsZSgnYm4tYmQnLCB7XG4gICAgICAgIG1vbnRoczogJ+CmnOCmvuCmqOCngeCnn+CmvuCmsOCmv1/gpqvgp4fgpqzgp43gprDgp4Hgp5/gpr7gprDgpr9f4Kau4Ka+4Kaw4KeN4KaaX+Cmj+CmquCnjeCmsOCmv+Cmsl/gpq7gp4df4Kac4KeB4KaoX+CmnOCngeCmsuCmvuCmh1/gpobgppfgprjgp43gpp9f4Ka44KeH4Kaq4KeN4Kaf4KeH4Kau4KeN4Kas4KawX+CmheCmleCnjeCmn+Cni+CmrOCmsF/gpqjgpq3gp4fgpq7gp43gpqzgprBf4Kah4Ka/4Ka44KeH4Kau4KeN4Kas4KawJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICfgppzgpr7gpqjgp4Ff4Kar4KeH4Kas4KeN4Kaw4KeBX+CmruCmvuCmsOCnjeCmml/gpo/gpqrgp43gprDgpr/gprJf4Kau4KeHX+CmnOCngeCmqF/gppzgp4HgprLgpr7gpodf4KaG4KaX4Ka44KeN4KafX+CmuOCnh+CmquCnjeCmn1/gpoXgppXgp43gpp/gp4tf4Kao4Kat4KeHX+CmoeCmv+CmuOCnhycuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5czogJ+CmsOCmrOCmv+CmrOCmvuCmsF/gprjgp4vgpq7gpqzgpr7gprBf4Kau4KaZ4KeN4KaX4Kay4Kas4Ka+4KawX+CmrOCngeCmp+CmrOCmvuCmsF/gpqzgp4Pgprngprjgp43gpqrgpqTgpr/gpqzgpr7gprBf4Ka24KeB4KaV4KeN4Kaw4Kas4Ka+4KawX+CmtuCmqOCmv+CmrOCmvuCmsCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ+CmsOCmrOCmv1/gprjgp4vgpq5f4Kau4KaZ4KeN4KaX4KayX+CmrOCngeCmp1/gpqzgp4Pgprngprjgp43gpqrgpqTgpr9f4Ka24KeB4KaV4KeN4KawX+CmtuCmqOCmvycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfgprDgpqzgpr9f4Ka44KeL4KauX+CmruCmmeCnjeCml+Cmsl/gpqzgp4Hgpqdf4Kas4KeD4Ka5X+CmtuCngeCmleCnjeCmsF/gprbgpqjgpr8nLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0EgaDptbSDgprjgpq7gp58nLFxuICAgICAgICAgICAgTFRTOiAnQSBoOm1tOnNzIOCmuOCmruCnnycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZLCBBIGg6bW0g4Ka44Kau4KefJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tIOCmuOCmruCnnycsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW+CmhuCmnF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vgpobgppfgpr7gpq7gp4DgppXgpr7gprJdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCwgTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vgppfgpqTgppXgpr7gprJdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW+Cml+CmpF0gZGRkZCwgTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICclcyDgpqrgprDgp4cnLFxuICAgICAgICAgICAgcGFzdDogJyVzIOCmhuCml+CnhycsXG4gICAgICAgICAgICBzOiAn4KaV4Kef4KeH4KaVIOCmuOCnh+CmleCnh+CmqOCnjeCmoScsXG4gICAgICAgICAgICBzczogJyVkIOCmuOCnh+CmleCnh+CmqOCnjeCmoScsXG4gICAgICAgICAgICBtOiAn4KaP4KaVIOCmruCmv+CmqOCmv+CmnycsXG4gICAgICAgICAgICBtbTogJyVkIOCmruCmv+CmqOCmv+CmnycsXG4gICAgICAgICAgICBoOiAn4KaP4KaVIOCmmOCmqOCnjeCmn+CmvicsXG4gICAgICAgICAgICBoaDogJyVkIOCmmOCmqOCnjeCmn+CmvicsXG4gICAgICAgICAgICBkOiAn4KaP4KaVIOCmpuCmv+CmqCcsXG4gICAgICAgICAgICBkZDogJyVkIOCmpuCmv+CmqCcsXG4gICAgICAgICAgICBNOiAn4KaP4KaVIOCmruCmvuCmuCcsXG4gICAgICAgICAgICBNTTogJyVkIOCmruCmvuCmuCcsXG4gICAgICAgICAgICB5OiAn4KaP4KaVIOCmrOCmm+CmsCcsXG4gICAgICAgICAgICB5eTogJyVkIOCmrOCmm+CmsCcsXG4gICAgICAgIH0sXG4gICAgICAgIHByZXBhcnNlOiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1vgp6fgp6jgp6ngp6rgp6vgp6zgp63gp67gp6/gp6ZdL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXJNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHBvc3Rmb3JtYXQ6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvXFxkL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzeW1ib2xNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL+CmsOCmvuCmpHzgpq3gp4vgprB84Ka44KaV4Ka+4KayfOCmpuCngeCmquCngeCmsHzgpqzgpr/gppXgpr7gprJ84Ka44Kao4KeN4Kan4KeN4Kav4Ka+fOCmsOCmvuCmpC8sXG4gICAgICAgIG1lcmlkaWVtSG91cjogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXJpZGllbSA9PT0gJ+CmsOCmvuCmpCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA8IDQgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CmreCni+CmsCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfgprjgppXgpr7gprInKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4Kam4KeB4Kaq4KeB4KawJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyID49IDMgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CmrOCmv+CmleCmvuCmsicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CmuOCmqOCnjeCmp+CnjeCmr+CmvicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CmsOCmvuCmpCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCA2KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgpq3gp4vgprAnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CmuOCmleCmvuCmsic7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxNSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4Kam4KeB4Kaq4KeB4KawJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDE4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgpqzgpr/gppXgpr7gprInO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMjApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CmuOCmqOCnjeCmp+CnjeCmr+Cmvic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4Kaw4Ka+4KakJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNiwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGJuQmQ7XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/bn-bd.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/bn.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/bn.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Bengali [bn]\n//! author : Kaushik Gandhi : https://github.com/kaushikgandhi\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '১',\n            2: '২',\n            3: '৩',\n            4: '৪',\n            5: '৫',\n            6: '৬',\n            7: '৭',\n            8: '৮',\n            9: '৯',\n            0: '০',\n        },\n        numberMap = {\n            '১': '1',\n            '২': '2',\n            '৩': '3',\n            '৪': '4',\n            '৫': '5',\n            '৬': '6',\n            '৭': '7',\n            '৮': '8',\n            '৯': '9',\n            '০': '0',\n        };\n\n    var bn = moment.defineLocale('bn', {\n        months: 'জানুয়ারি_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split(\n            '_'\n        ),\n        monthsShort:\n            'জানু_ফেব্রু_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্ট_অক্টো_নভে_ডিসে'.split(\n                '_'\n            ),\n        weekdays: 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split(\n            '_'\n        ),\n        weekdaysShort: 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'),\n        weekdaysMin: 'রবি_সোম_মঙ্গল_বুধ_বৃহ_শুক্র_শনি'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm সময়',\n            LTS: 'A h:mm:ss সময়',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm সময়',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm সময়',\n        },\n        calendar: {\n            sameDay: '[আজ] LT',\n            nextDay: '[আগামীকাল] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[গতকাল] LT',\n            lastWeek: '[গত] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s পরে',\n            past: '%s আগে',\n            s: 'কয়েক সেকেন্ড',\n            ss: '%d সেকেন্ড',\n            m: 'এক মিনিট',\n            mm: '%d মিনিট',\n            h: 'এক ঘন্টা',\n            hh: '%d ঘন্টা',\n            d: 'এক দিন',\n            dd: '%d দিন',\n            M: 'এক মাস',\n            MM: '%d মাস',\n            y: 'এক বছর',\n            yy: '%d বছর',\n        },\n        preparse: function (string) {\n            return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        meridiemParse: /রাত|সকাল|দুপুর|বিকাল|রাত/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (\n                (meridiem === 'রাত' && hour >= 4) ||\n                (meridiem === 'দুপুর' && hour < 5) ||\n                meridiem === 'বিকাল'\n            ) {\n                return hour + 12;\n            } else {\n                return hour;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'রাত';\n            } else if (hour < 10) {\n                return 'সকাল';\n            } else if (hour < 17) {\n                return 'দুপুর';\n            } else if (hour < 20) {\n                return 'বিকাল';\n            } else {\n                return 'রাত';\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return bn;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ibi5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2JuLmpzPzQ4Y2EiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEJlbmdhbGkgW2JuXVxuLy8hIGF1dGhvciA6IEthdXNoaWsgR2FuZGhpIDogaHR0cHM6Ly9naXRodWIuY29tL2thdXNoaWtnYW5kaGlcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBzeW1ib2xNYXAgPSB7XG4gICAgICAgICAgICAxOiAn4KenJyxcbiAgICAgICAgICAgIDI6ICfgp6gnLFxuICAgICAgICAgICAgMzogJ+CnqScsXG4gICAgICAgICAgICA0OiAn4KeqJyxcbiAgICAgICAgICAgIDU6ICfgp6snLFxuICAgICAgICAgICAgNjogJ+CnrCcsXG4gICAgICAgICAgICA3OiAn4KetJyxcbiAgICAgICAgICAgIDg6ICfgp64nLFxuICAgICAgICAgICAgOTogJ+CnrycsXG4gICAgICAgICAgICAwOiAn4KemJyxcbiAgICAgICAgfSxcbiAgICAgICAgbnVtYmVyTWFwID0ge1xuICAgICAgICAgICAgJ+Cnpyc6ICcxJyxcbiAgICAgICAgICAgICfgp6gnOiAnMicsXG4gICAgICAgICAgICAn4KepJzogJzMnLFxuICAgICAgICAgICAgJ+Cnqic6ICc0JyxcbiAgICAgICAgICAgICfgp6snOiAnNScsXG4gICAgICAgICAgICAn4KesJzogJzYnLFxuICAgICAgICAgICAgJ+CnrSc6ICc3JyxcbiAgICAgICAgICAgICfgp64nOiAnOCcsXG4gICAgICAgICAgICAn4KevJzogJzknLFxuICAgICAgICAgICAgJ+Cnpic6ICcwJyxcbiAgICAgICAgfTtcblxuICAgIHZhciBibiA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2JuJywge1xuICAgICAgICBtb250aHM6ICfgppzgpr7gpqjgp4Hgp5/gpr7gprDgpr9f4Kar4KeH4Kas4KeN4Kaw4KeB4Kef4Ka+4Kaw4Ka/X+CmruCmvuCmsOCnjeCmml/gpo/gpqrgp43gprDgpr/gprJf4Kau4KeHX+CmnOCngeCmqF/gppzgp4HgprLgpr7gpodf4KaG4KaX4Ka44KeN4KafX+CmuOCnh+CmquCnjeCmn+Cnh+CmruCnjeCmrOCmsF/gpoXgppXgp43gpp/gp4vgpqzgprBf4Kao4Kat4KeH4Kau4KeN4Kas4KawX+CmoeCmv+CmuOCnh+CmruCnjeCmrOCmsCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAn4Kac4Ka+4Kao4KeBX+Cmq+Cnh+CmrOCnjeCmsOCngV/gpq7gpr7gprDgp43gpppf4KaP4Kaq4KeN4Kaw4Ka/4KayX+CmruCnh1/gppzgp4Hgpqhf4Kac4KeB4Kay4Ka+4KaHX+CmhuCml+CmuOCnjeCmn1/gprjgp4fgpqrgp43gpp9f4KaF4KaV4KeN4Kaf4KeLX+CmqOCmreCnh1/gpqHgpr/gprjgp4cnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXM6ICfgprDgpqzgpr/gpqzgpr7gprBf4Ka44KeL4Kau4Kas4Ka+4KawX+CmruCmmeCnjeCml+CmsuCmrOCmvuCmsF/gpqzgp4Hgpqfgpqzgpr7gprBf4Kas4KeD4Ka54Ka44KeN4Kaq4Kak4Ka/4Kas4Ka+4KawX+CmtuCngeCmleCnjeCmsOCmrOCmvuCmsF/gprbgpqjgpr/gpqzgpr7gprAnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfgprDgpqzgpr9f4Ka44KeL4KauX+CmruCmmeCnjeCml+Cmsl/gpqzgp4Hgpqdf4Kas4KeD4Ka54Ka44KeN4Kaq4Kak4Ka/X+CmtuCngeCmleCnjeCmsF/gprbgpqjgpr8nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn4Kaw4Kas4Ka/X+CmuOCni+Cmrl/gpq7gppngp43gppfgprJf4Kas4KeB4KanX+CmrOCng+CmuV/gprbgp4HgppXgp43gprBf4Ka24Kao4Ka/Jy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdBIGg6bW0g4Ka44Kau4KefJyxcbiAgICAgICAgICAgIExUUzogJ0EgaDptbTpzcyDgprjgpq7gp58nLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSwgQSBoOm1tIOCmuOCmruCnnycsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSDgprjgpq7gp58nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vgpobgppxdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb4KaG4KaX4Ka+4Kau4KeA4KaV4Ka+4KayXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQsIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb4KaX4Kak4KaV4Ka+4KayXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1vgppfgpqRdIGRkZGQsIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMg4Kaq4Kaw4KeHJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyDgpobgppfgp4cnLFxuICAgICAgICAgICAgczogJ+CmleCnn+Cnh+CmlSDgprjgp4fgppXgp4fgpqjgp43gpqEnLFxuICAgICAgICAgICAgc3M6ICclZCDgprjgp4fgppXgp4fgpqjgp43gpqEnLFxuICAgICAgICAgICAgbTogJ+Cmj+CmlSDgpq7gpr/gpqjgpr/gpp8nLFxuICAgICAgICAgICAgbW06ICclZCDgpq7gpr/gpqjgpr/gpp8nLFxuICAgICAgICAgICAgaDogJ+Cmj+CmlSDgppjgpqjgp43gpp/gpr4nLFxuICAgICAgICAgICAgaGg6ICclZCDgppjgpqjgp43gpp/gpr4nLFxuICAgICAgICAgICAgZDogJ+Cmj+CmlSDgpqbgpr/gpqgnLFxuICAgICAgICAgICAgZGQ6ICclZCDgpqbgpr/gpqgnLFxuICAgICAgICAgICAgTTogJ+Cmj+CmlSDgpq7gpr7gprgnLFxuICAgICAgICAgICAgTU06ICclZCDgpq7gpr7gprgnLFxuICAgICAgICAgICAgeTogJ+Cmj+CmlSDgpqzgppvgprAnLFxuICAgICAgICAgICAgeXk6ICclZCDgpqzgppvgprAnLFxuICAgICAgICB9LFxuICAgICAgICBwcmVwYXJzZTogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9b4Ken4Keo4Kep4Keq4Ker4Kes4Ket4Keu4Kev4KemXS9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyTWFwW21hdGNoXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBwb3N0Zm9ybWF0OiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1xcZC9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3ltYm9sTWFwW21hdGNoXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv4Kaw4Ka+4KakfOCmuOCmleCmvuCmsnzgpqbgp4Hgpqrgp4HgprB84Kas4Ka/4KaV4Ka+4KayfOCmsOCmvuCmpC8sXG4gICAgICAgIG1lcmlkaWVtSG91cjogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAobWVyaWRpZW0gPT09ICfgprDgpr7gpqQnICYmIGhvdXIgPj0gNCkgfHxcbiAgICAgICAgICAgICAgICAobWVyaWRpZW0gPT09ICfgpqbgp4Hgpqrgp4HgprAnICYmIGhvdXIgPCA1KSB8fFxuICAgICAgICAgICAgICAgIG1lcmlkaWVtID09PSAn4Kas4Ka/4KaV4Ka+4KayJ1xuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CmsOCmvuCmpCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4Ka44KaV4Ka+4KayJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDE3KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgpqbgp4Hgpqrgp4HgprAnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMjApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CmrOCmv+CmleCmvuCmsic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4Kaw4Ka+4KakJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNiwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGJuO1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/bn.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/bo.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/bo.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Tibetan [bo]\n//! author : Thupten N. Chakrishar : https://github.com/vajradog\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '༡',\n            2: '༢',\n            3: '༣',\n            4: '༤',\n            5: '༥',\n            6: '༦',\n            7: '༧',\n            8: '༨',\n            9: '༩',\n            0: '༠',\n        },\n        numberMap = {\n            '༡': '1',\n            '༢': '2',\n            '༣': '3',\n            '༤': '4',\n            '༥': '5',\n            '༦': '6',\n            '༧': '7',\n            '༨': '8',\n            '༩': '9',\n            '༠': '0',\n        };\n\n    var bo = moment.defineLocale('bo', {\n        months: 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split(\n            '_'\n        ),\n        monthsShort:\n            'ཟླ་1_ཟླ་2_ཟླ་3_ཟླ་4_ཟླ་5_ཟླ་6_ཟླ་7_ཟླ་8_ཟླ་9_ཟླ་10_ཟླ་11_ཟླ་12'.split(\n                '_'\n            ),\n        monthsShortRegex: /^(ཟླ་\\d{1,2})/,\n        monthsParseExact: true,\n        weekdays:\n            'གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་'.split(\n                '_'\n            ),\n        weekdaysShort: 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split(\n            '_'\n        ),\n        weekdaysMin: 'ཉི_ཟླ_མིག_ལྷག_ཕུར_སངས_སྤེན'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm',\n            LTS: 'A h:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm',\n        },\n        calendar: {\n            sameDay: '[དི་རིང] LT',\n            nextDay: '[སང་ཉིན] LT',\n            nextWeek: '[བདུན་ཕྲག་རྗེས་མ], LT',\n            lastDay: '[ཁ་སང] LT',\n            lastWeek: '[བདུན་ཕྲག་མཐའ་མ] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s ལ་',\n            past: '%s སྔན་ལ',\n            s: 'ལམ་སང',\n            ss: '%d སྐར་ཆ།',\n            m: 'སྐར་མ་གཅིག',\n            mm: '%d སྐར་མ',\n            h: 'ཆུ་ཚོད་གཅིག',\n            hh: '%d ཆུ་ཚོད',\n            d: 'ཉིན་གཅིག',\n            dd: '%d ཉིན་',\n            M: 'ཟླ་བ་གཅིག',\n            MM: '%d ཟླ་བ',\n            y: 'ལོ་གཅིག',\n            yy: '%d ལོ',\n        },\n        preparse: function (string) {\n            return string.replace(/[༡༢༣༤༥༦༧༨༩༠]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        meridiemParse: /མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (\n                (meridiem === 'མཚན་མོ' && hour >= 4) ||\n                (meridiem === 'ཉིན་གུང' && hour < 5) ||\n                meridiem === 'དགོང་དག'\n            ) {\n                return hour + 12;\n            } else {\n                return hour;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'མཚན་མོ';\n            } else if (hour < 10) {\n                return 'ཞོགས་ཀས';\n            } else if (hour < 17) {\n                return 'ཉིན་གུང';\n            } else if (hour < 20) {\n                return 'དགོང་དག';\n            } else {\n                return 'མཚན་མོ';\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return bo;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9iby5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsSUFBSTtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYm8uanM/ZWRlYiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogVGliZXRhbiBbYm9dXG4vLyEgYXV0aG9yIDogVGh1cHRlbiBOLiBDaGFrcmlzaGFyIDogaHR0cHM6Ly9naXRodWIuY29tL3ZhanJhZG9nXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgc3ltYm9sTWFwID0ge1xuICAgICAgICAgICAgMTogJ+C8oScsXG4gICAgICAgICAgICAyOiAn4LyiJyxcbiAgICAgICAgICAgIDM6ICfgvKMnLFxuICAgICAgICAgICAgNDogJ+C8pCcsXG4gICAgICAgICAgICA1OiAn4LylJyxcbiAgICAgICAgICAgIDY6ICfgvKYnLFxuICAgICAgICAgICAgNzogJ+C8pycsXG4gICAgICAgICAgICA4OiAn4LyoJyxcbiAgICAgICAgICAgIDk6ICfgvKknLFxuICAgICAgICAgICAgMDogJ+C8oCcsXG4gICAgICAgIH0sXG4gICAgICAgIG51bWJlck1hcCA9IHtcbiAgICAgICAgICAgICfgvKEnOiAnMScsXG4gICAgICAgICAgICAn4LyiJzogJzInLFxuICAgICAgICAgICAgJ+C8oyc6ICczJyxcbiAgICAgICAgICAgICfgvKQnOiAnNCcsXG4gICAgICAgICAgICAn4LylJzogJzUnLFxuICAgICAgICAgICAgJ+C8pic6ICc2JyxcbiAgICAgICAgICAgICfgvKcnOiAnNycsXG4gICAgICAgICAgICAn4LyoJzogJzgnLFxuICAgICAgICAgICAgJ+C8qSc6ICc5JyxcbiAgICAgICAgICAgICfgvKAnOiAnMCcsXG4gICAgICAgIH07XG5cbiAgICB2YXIgYm8gPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdibycsIHtcbiAgICAgICAgbW9udGhzOiAn4L2f4L6z4LyL4L2W4LyL4L2R4L2E4LyL4L2U4L28X+C9n+C+s+C8i+C9luC8i+C9guC9ieC9suC9puC8i+C9lF/gvZ/gvrPgvIvgvZbgvIvgvYLgvabgvbTgvZjgvIvgvZRf4L2f4L6z4LyL4L2W4LyL4L2W4L2e4L2y4LyL4L2UX+C9n+C+s+C8i+C9luC8i+C9o+C+lOC8i+C9lF/gvZ/gvrPgvIvgvZbgvIvgvZHgvrLgvbTgvYLgvIvgvZRf4L2f4L6z4LyL4L2W4LyL4L2W4L2R4L204L2T4LyL4L2UX+C9n+C+s+C8i+C9luC8i+C9luC9ouC+kuC+seC9keC8i+C9lF/gvZ/gvrPgvIvgvZbgvIvgvZHgvYLgvbTgvIvgvZRf4L2f4L6z4LyL4L2W4LyL4L2W4L2F4L204LyL4L2UX+C9n+C+s+C8i+C9luC8i+C9luC9heC9tOC8i+C9guC9heC9suC9guC8i+C9lF/gvZ/gvrPgvIvgvZbgvIvgvZbgvYXgvbTgvIvgvYLgvYngvbLgvabgvIvgvZQnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ+C9n+C+s+C8izFf4L2f4L6z4LyLMl/gvZ/gvrPgvIszX+C9n+C+s+C8izRf4L2f4L6z4LyLNV/gvZ/gvrPgvIs2X+C9n+C+s+C8izdf4L2f4L6z4LyLOF/gvZ/gvrPgvIs5X+C9n+C+s+C8izEwX+C9n+C+s+C8izExX+C9n+C+s+C8izEyJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0UmVnZXg6IC9eKOC9n+C+s+C8i1xcZHsxLDJ9KS8sXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOlxuICAgICAgICAgICAgJ+C9guC9n+C9oOC8i+C9ieC9suC8i+C9mOC8i1/gvYLgvZ/gvaDgvIvgvZ/gvrPgvIvgvZbgvItf4L2C4L2f4L2g4LyL4L2Y4L2y4L2C4LyL4L2R4L2Y4L2i4LyLX+C9guC9n+C9oOC8i+C9o+C+t+C9guC8i+C9lOC8i1/gvYLgvZ/gvaDgvIvgvZXgvbTgvaLgvIvgvZbgvbRf4L2C4L2f4L2g4LyL4L2U4LyL4L2m4L2E4L2m4LyLX+C9guC9n+C9oOC8i+C9puC+pOC9uuC9k+C8i+C9lOC8iycuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn4L2J4L2y4LyL4L2Y4LyLX+C9n+C+s+C8i+C9luC8i1/gvZjgvbLgvYLgvIvgvZHgvZjgvaLgvItf4L2j4L634L2C4LyL4L2U4LyLX+C9leC9tOC9ouC8i+C9luC9tF/gvZTgvIvgvabgvYTgvabgvItf4L2m4L6k4L264L2T4LyL4L2U4LyLJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ+C9ieC9sl/gvZ/gvrNf4L2Y4L2y4L2CX+C9o+C+t+C9gl/gvZXgvbTgvaJf4L2m4L2E4L2mX+C9puC+pOC9uuC9kycuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnQSBoOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0EgaDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZLCBBIGg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vgvZHgvbLgvIvgvaLgvbLgvYRdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb4L2m4L2E4LyL4L2J4L2y4L2TXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ1vgvZbgvZHgvbTgvZPgvIvgvZXgvrLgvYLgvIvgvaLgvpfgvbrgvabgvIvgvZhdLCBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW+C9geC8i+C9puC9hF0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdb4L2W4L2R4L204L2T4LyL4L2V4L6y4L2C4LyL4L2Y4L2Q4L2g4LyL4L2YXSBkZGRkLCBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVzIOC9o+C8iycsXG4gICAgICAgICAgICBwYXN0OiAnJXMg4L2m4L6U4L2T4LyL4L2jJyxcbiAgICAgICAgICAgIHM6ICfgvaPgvZjgvIvgvabgvYQnLFxuICAgICAgICAgICAgc3M6ICclZCDgvabgvpDgvaLgvIvgvYbgvI0nLFxuICAgICAgICAgICAgbTogJ+C9puC+kOC9ouC8i+C9mOC8i+C9guC9heC9suC9gicsXG4gICAgICAgICAgICBtbTogJyVkIOC9puC+kOC9ouC8i+C9mCcsXG4gICAgICAgICAgICBoOiAn4L2G4L204LyL4L2a4L284L2R4LyL4L2C4L2F4L2y4L2CJyxcbiAgICAgICAgICAgIGhoOiAnJWQg4L2G4L204LyL4L2a4L284L2RJyxcbiAgICAgICAgICAgIGQ6ICfgvYngvbLgvZPgvIvgvYLgvYXgvbLgvYInLFxuICAgICAgICAgICAgZGQ6ICclZCDgvYngvbLgvZPgvIsnLFxuICAgICAgICAgICAgTTogJ+C9n+C+s+C8i+C9luC8i+C9guC9heC9suC9gicsXG4gICAgICAgICAgICBNTTogJyVkIOC9n+C+s+C8i+C9licsXG4gICAgICAgICAgICB5OiAn4L2j4L284LyL4L2C4L2F4L2y4L2CJyxcbiAgICAgICAgICAgIHl5OiAnJWQg4L2j4L28JyxcbiAgICAgICAgfSxcbiAgICAgICAgcHJlcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvW+C8oeC8ouC8o+C8pOC8peC8puC8p+C8qOC8qeC8oF0vZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlck1hcFttYXRjaF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgcG9zdGZvcm1hdDogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9cXGQvZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN5bWJvbE1hcFttYXRjaF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL+C9mOC9muC9k+C8i+C9mOC9vHzgvZ7gvbzgvYLgvabgvIvgvYDgvaZ84L2J4L2y4L2T4LyL4L2C4L204L2EfOC9keC9guC9vOC9hOC8i+C9keC9gnzgvZjgvZrgvZPgvIvgvZjgvbwvLFxuICAgICAgICBtZXJpZGllbUhvdXI6IGZ1bmN0aW9uIChob3VyLCBtZXJpZGllbSkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgKG1lcmlkaWVtID09PSAn4L2Y4L2a4L2T4LyL4L2Y4L28JyAmJiBob3VyID49IDQpIHx8XG4gICAgICAgICAgICAgICAgKG1lcmlkaWVtID09PSAn4L2J4L2y4L2T4LyL4L2C4L204L2EJyAmJiBob3VyIDwgNSkgfHxcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9PT0gJ+C9keC9guC9vOC9hOC8i+C9keC9gidcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCA0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgvZjgvZrgvZPgvIvgvZjgvbwnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+C9nuC9vOC9guC9puC8i+C9gOC9pic7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxNykge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4L2J4L2y4L2T4LyL4L2C4L204L2EJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDIwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgvZHgvYLgvbzgvYTgvIvgvZHgvYInO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+C9mOC9muC9k+C8i+C9mOC9vCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMCwgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDYsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDZ0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBibztcblxufSkpKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/bo.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/br.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/br.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Breton [br]\n//! author : Jean-Baptiste Le Duigou : https://github.com/jbleduigou\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function relativeTimeWithMutation(number, withoutSuffix, key) {\n        var format = {\n            mm: 'munutenn',\n            MM: 'miz',\n            dd: 'devezh',\n        };\n        return number + ' ' + mutation(format[key], number);\n    }\n    function specialMutationForYears(number) {\n        switch (lastNumber(number)) {\n            case 1:\n            case 3:\n            case 4:\n            case 5:\n            case 9:\n                return number + ' bloaz';\n            default:\n                return number + ' vloaz';\n        }\n    }\n    function lastNumber(number) {\n        if (number > 9) {\n            return lastNumber(number % 10);\n        }\n        return number;\n    }\n    function mutation(text, number) {\n        if (number === 2) {\n            return softMutation(text);\n        }\n        return text;\n    }\n    function softMutation(text) {\n        var mutationTable = {\n            m: 'v',\n            b: 'v',\n            d: 'z',\n        };\n        if (mutationTable[text.charAt(0)] === undefined) {\n            return text;\n        }\n        return mutationTable[text.charAt(0)] + text.substring(1);\n    }\n\n    var monthsParse = [\n            /^gen/i,\n            /^c[ʼ\\']hwe/i,\n            /^meu/i,\n            /^ebr/i,\n            /^mae/i,\n            /^(mez|eve)/i,\n            /^gou/i,\n            /^eos/i,\n            /^gwe/i,\n            /^her/i,\n            /^du/i,\n            /^ker/i,\n        ],\n        monthsRegex =\n            /^(genver|c[ʼ\\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu|gen|c[ʼ\\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,\n        monthsStrictRegex =\n            /^(genver|c[ʼ\\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu)/i,\n        monthsShortStrictRegex =\n            /^(gen|c[ʼ\\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,\n        fullWeekdaysParse = [\n            /^sul/i,\n            /^lun/i,\n            /^meurzh/i,\n            /^merc[ʼ\\']her/i,\n            /^yaou/i,\n            /^gwener/i,\n            /^sadorn/i,\n        ],\n        shortWeekdaysParse = [\n            /^Sul/i,\n            /^Lun/i,\n            /^Meu/i,\n            /^Mer/i,\n            /^Yao/i,\n            /^Gwe/i,\n            /^Sad/i,\n        ],\n        minWeekdaysParse = [\n            /^Su/i,\n            /^Lu/i,\n            /^Me([^r]|$)/i,\n            /^Mer/i,\n            /^Ya/i,\n            /^Gw/i,\n            /^Sa/i,\n        ];\n\n    var br = moment.defineLocale('br', {\n        months: 'Genver_Cʼhwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu'.split(\n            '_'\n        ),\n        monthsShort: 'Gen_Cʼhwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker'.split('_'),\n        weekdays: 'Sul_Lun_Meurzh_Mercʼher_Yaou_Gwener_Sadorn'.split('_'),\n        weekdaysShort: 'Sul_Lun_Meu_Mer_Yao_Gwe_Sad'.split('_'),\n        weekdaysMin: 'Su_Lu_Me_Mer_Ya_Gw_Sa'.split('_'),\n        weekdaysParse: minWeekdaysParse,\n        fullWeekdaysParse: fullWeekdaysParse,\n        shortWeekdaysParse: shortWeekdaysParse,\n        minWeekdaysParse: minWeekdaysParse,\n\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex: monthsStrictRegex,\n        monthsShortStrictRegex: monthsShortStrictRegex,\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D [a viz] MMMM YYYY',\n            LLL: 'D [a viz] MMMM YYYY HH:mm',\n            LLLL: 'dddd, D [a viz] MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Hiziv da] LT',\n            nextDay: '[Warcʼhoazh da] LT',\n            nextWeek: 'dddd [da] LT',\n            lastDay: '[Decʼh da] LT',\n            lastWeek: 'dddd [paset da] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'a-benn %s',\n            past: '%s ʼzo',\n            s: 'un nebeud segondennoù',\n            ss: '%d eilenn',\n            m: 'ur vunutenn',\n            mm: relativeTimeWithMutation,\n            h: 'un eur',\n            hh: '%d eur',\n            d: 'un devezh',\n            dd: relativeTimeWithMutation,\n            M: 'ur miz',\n            MM: relativeTimeWithMutation,\n            y: 'ur bloaz',\n            yy: specialMutationForYears,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(añ|vet)/,\n        ordinal: function (number) {\n            var output = number === 1 ? 'añ' : 'vet';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n        meridiemParse: /a.m.|g.m./, // goude merenn | a-raok merenn\n        isPM: function (token) {\n            return token === 'g.m.';\n        },\n        meridiem: function (hour, minute, isLower) {\n            return hour < 12 ? 'a.m.' : 'g.m.';\n        },\n    });\n\n    return br;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ici5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxvQ0FBb0MsSUFBSTtBQUN4QztBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2JyLmpzP2NlZDciXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEJyZXRvbiBbYnJdXG4vLyEgYXV0aG9yIDogSmVhbi1CYXB0aXN0ZSBMZSBEdWlnb3UgOiBodHRwczovL2dpdGh1Yi5jb20vamJsZWR1aWdvdVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgZnVuY3Rpb24gcmVsYXRpdmVUaW1lV2l0aE11dGF0aW9uKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5KSB7XG4gICAgICAgIHZhciBmb3JtYXQgPSB7XG4gICAgICAgICAgICBtbTogJ211bnV0ZW5uJyxcbiAgICAgICAgICAgIE1NOiAnbWl6JyxcbiAgICAgICAgICAgIGRkOiAnZGV2ZXpoJyxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG51bWJlciArICcgJyArIG11dGF0aW9uKGZvcm1hdFtrZXldLCBudW1iZXIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzcGVjaWFsTXV0YXRpb25Gb3JZZWFycyhudW1iZXIpIHtcbiAgICAgICAgc3dpdGNoIChsYXN0TnVtYmVyKG51bWJlcikpIHtcbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJyBibG9heic7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnIHZsb2F6JztcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBsYXN0TnVtYmVyKG51bWJlcikge1xuICAgICAgICBpZiAobnVtYmVyID4gOSkge1xuICAgICAgICAgICAgcmV0dXJuIGxhc3ROdW1iZXIobnVtYmVyICUgMTApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG11dGF0aW9uKHRleHQsIG51bWJlcikge1xuICAgICAgICBpZiAobnVtYmVyID09PSAyKSB7XG4gICAgICAgICAgICByZXR1cm4gc29mdE11dGF0aW9uKHRleHQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0ZXh0O1xuICAgIH1cbiAgICBmdW5jdGlvbiBzb2Z0TXV0YXRpb24odGV4dCkge1xuICAgICAgICB2YXIgbXV0YXRpb25UYWJsZSA9IHtcbiAgICAgICAgICAgIG06ICd2JyxcbiAgICAgICAgICAgIGI6ICd2JyxcbiAgICAgICAgICAgIGQ6ICd6JyxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKG11dGF0aW9uVGFibGVbdGV4dC5jaGFyQXQoMCldID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0ZXh0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtdXRhdGlvblRhYmxlW3RleHQuY2hhckF0KDApXSArIHRleHQuc3Vic3RyaW5nKDEpO1xuICAgIH1cblxuICAgIHZhciBtb250aHNQYXJzZSA9IFtcbiAgICAgICAgICAgIC9eZ2VuL2ksXG4gICAgICAgICAgICAvXmNbyrxcXCddaHdlL2ksXG4gICAgICAgICAgICAvXm1ldS9pLFxuICAgICAgICAgICAgL15lYnIvaSxcbiAgICAgICAgICAgIC9ebWFlL2ksXG4gICAgICAgICAgICAvXihtZXp8ZXZlKS9pLFxuICAgICAgICAgICAgL15nb3UvaSxcbiAgICAgICAgICAgIC9eZW9zL2ksXG4gICAgICAgICAgICAvXmd3ZS9pLFxuICAgICAgICAgICAgL15oZXIvaSxcbiAgICAgICAgICAgIC9eZHUvaSxcbiAgICAgICAgICAgIC9ea2VyL2ksXG4gICAgICAgIF0sXG4gICAgICAgIG1vbnRoc1JlZ2V4ID1cbiAgICAgICAgICAgIC9eKGdlbnZlcnxjW8q8XFwnXWh3ZXZyZXJ8bWV1cnpofGVicmVsfG1hZXxtZXpoZXZlbnxnb3VlcmV8ZW9zdHxnd2VuZ29sb3xoZXJlfGR1fGtlcnp1fGdlbnxjW8q8XFwnXWh3ZXxtZXV8ZWJyfG1hZXxldmV8Z291fGVvc3xnd2V8aGVyfGR1fGtlcikvaSxcbiAgICAgICAgbW9udGhzU3RyaWN0UmVnZXggPVxuICAgICAgICAgICAgL14oZ2VudmVyfGNbyrxcXCddaHdldnJlcnxtZXVyemh8ZWJyZWx8bWFlfG1lemhldmVufGdvdWVyZXxlb3N0fGd3ZW5nb2xvfGhlcmV8ZHV8a2VyenUpL2ksXG4gICAgICAgIG1vbnRoc1Nob3J0U3RyaWN0UmVnZXggPVxuICAgICAgICAgICAgL14oZ2VufGNbyrxcXCddaHdlfG1ldXxlYnJ8bWFlfGV2ZXxnb3V8ZW9zfGd3ZXxoZXJ8ZHV8a2VyKS9pLFxuICAgICAgICBmdWxsV2Vla2RheXNQYXJzZSA9IFtcbiAgICAgICAgICAgIC9ec3VsL2ksXG4gICAgICAgICAgICAvXmx1bi9pLFxuICAgICAgICAgICAgL15tZXVyemgvaSxcbiAgICAgICAgICAgIC9ebWVyY1vKvFxcJ11oZXIvaSxcbiAgICAgICAgICAgIC9eeWFvdS9pLFxuICAgICAgICAgICAgL15nd2VuZXIvaSxcbiAgICAgICAgICAgIC9ec2Fkb3JuL2ksXG4gICAgICAgIF0sXG4gICAgICAgIHNob3J0V2Vla2RheXNQYXJzZSA9IFtcbiAgICAgICAgICAgIC9eU3VsL2ksXG4gICAgICAgICAgICAvXkx1bi9pLFxuICAgICAgICAgICAgL15NZXUvaSxcbiAgICAgICAgICAgIC9eTWVyL2ksXG4gICAgICAgICAgICAvXllhby9pLFxuICAgICAgICAgICAgL15Hd2UvaSxcbiAgICAgICAgICAgIC9eU2FkL2ksXG4gICAgICAgIF0sXG4gICAgICAgIG1pbldlZWtkYXlzUGFyc2UgPSBbXG4gICAgICAgICAgICAvXlN1L2ksXG4gICAgICAgICAgICAvXkx1L2ksXG4gICAgICAgICAgICAvXk1lKFtecl18JCkvaSxcbiAgICAgICAgICAgIC9eTWVyL2ksXG4gICAgICAgICAgICAvXllhL2ksXG4gICAgICAgICAgICAvXkd3L2ksXG4gICAgICAgICAgICAvXlNhL2ksXG4gICAgICAgIF07XG5cbiAgICB2YXIgYnIgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdicicsIHtcbiAgICAgICAgbW9udGhzOiAnR2VudmVyX0PKvGh3ZXZyZXJfTWV1cnpoX0VicmVsX01hZV9NZXpoZXZlbl9Hb3VlcmVfRW9zdF9Hd2VuZ29sb19IZXJlX0R1X0tlcnp1Jy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ0dlbl9Dyrxod2VfTWV1X0Vicl9NYWVfRXZlX0dvdV9Fb3NfR3dlX0hlcl9EdV9LZXInLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAnU3VsX0x1bl9NZXVyemhfTWVyY8q8aGVyX1lhb3VfR3dlbmVyX1NhZG9ybicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ1N1bF9MdW5fTWV1X01lcl9ZYW9fR3dlX1NhZCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdTdV9MdV9NZV9NZXJfWWFfR3dfU2EnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2U6IG1pbldlZWtkYXlzUGFyc2UsXG4gICAgICAgIGZ1bGxXZWVrZGF5c1BhcnNlOiBmdWxsV2Vla2RheXNQYXJzZSxcbiAgICAgICAgc2hvcnRXZWVrZGF5c1BhcnNlOiBzaG9ydFdlZWtkYXlzUGFyc2UsXG4gICAgICAgIG1pbldlZWtkYXlzUGFyc2U6IG1pbldlZWtkYXlzUGFyc2UsXG5cbiAgICAgICAgbW9udGhzUmVnZXg6IG1vbnRoc1JlZ2V4LFxuICAgICAgICBtb250aHNTaG9ydFJlZ2V4OiBtb250aHNSZWdleCxcbiAgICAgICAgbW9udGhzU3RyaWN0UmVnZXg6IG1vbnRoc1N0cmljdFJlZ2V4LFxuICAgICAgICBtb250aHNTaG9ydFN0cmljdFJlZ2V4OiBtb250aHNTaG9ydFN0cmljdFJlZ2V4LFxuICAgICAgICBtb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgICAgIGxvbmdNb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgICAgIHNob3J0TW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBbYSB2aXpdIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIFthIHZpel0gTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIFthIHZpel0gTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbSGl6aXYgZGFdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbV2FyY8q8aG9hemggZGFdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbZGFdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbRGVjyrxoIGRhXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW3Bhc2V0IGRhXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ2EtYmVubiAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMgyrx6bycsXG4gICAgICAgICAgICBzOiAndW4gbmViZXVkIHNlZ29uZGVubm/DuScsXG4gICAgICAgICAgICBzczogJyVkIGVpbGVubicsXG4gICAgICAgICAgICBtOiAndXIgdnVudXRlbm4nLFxuICAgICAgICAgICAgbW06IHJlbGF0aXZlVGltZVdpdGhNdXRhdGlvbixcbiAgICAgICAgICAgIGg6ICd1biBldXInLFxuICAgICAgICAgICAgaGg6ICclZCBldXInLFxuICAgICAgICAgICAgZDogJ3VuIGRldmV6aCcsXG4gICAgICAgICAgICBkZDogcmVsYXRpdmVUaW1lV2l0aE11dGF0aW9uLFxuICAgICAgICAgICAgTTogJ3VyIG1peicsXG4gICAgICAgICAgICBNTTogcmVsYXRpdmVUaW1lV2l0aE11dGF0aW9uLFxuICAgICAgICAgICAgeTogJ3VyIGJsb2F6JyxcbiAgICAgICAgICAgIHl5OiBzcGVjaWFsTXV0YXRpb25Gb3JZZWFycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KGHDsXx2ZXQpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgdmFyIG91dHB1dCA9IG51bWJlciA9PT0gMSA/ICdhw7EnIDogJ3ZldCc7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgb3V0cHV0O1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC9hLm0ufGcubS4vLCAvLyBnb3VkZSBtZXJlbm4gfCBhLXJhb2sgbWVyZW5uXG4gICAgICAgIGlzUE06IGZ1bmN0aW9uICh0b2tlbikge1xuICAgICAgICAgICAgcmV0dXJuIHRva2VuID09PSAnZy5tLic7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICByZXR1cm4gaG91ciA8IDEyID8gJ2EubS4nIDogJ2cubS4nO1xuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGJyO1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/br.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/bs.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/bs.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Bosnian [bs]\n//! author : Nedim Cholich : https://github.com/frontyard\n//! based on (hr) translation by Bojan Marković\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function translate(number, withoutSuffix, key) {\n        var result = number + ' ';\n        switch (key) {\n            case 'ss':\n                if (number === 1) {\n                    result += 'sekunda';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'sekunde';\n                } else {\n                    result += 'sekundi';\n                }\n                return result;\n            case 'm':\n                return withoutSuffix ? 'jedna minuta' : 'jedne minute';\n            case 'mm':\n                if (number === 1) {\n                    result += 'minuta';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'minute';\n                } else {\n                    result += 'minuta';\n                }\n                return result;\n            case 'h':\n                return withoutSuffix ? 'jedan sat' : 'jednog sata';\n            case 'hh':\n                if (number === 1) {\n                    result += 'sat';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'sata';\n                } else {\n                    result += 'sati';\n                }\n                return result;\n            case 'dd':\n                if (number === 1) {\n                    result += 'dan';\n                } else {\n                    result += 'dana';\n                }\n                return result;\n            case 'MM':\n                if (number === 1) {\n                    result += 'mjesec';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'mjeseca';\n                } else {\n                    result += 'mjeseci';\n                }\n                return result;\n            case 'yy':\n                if (number === 1) {\n                    result += 'godina';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'godine';\n                } else {\n                    result += 'godina';\n                }\n                return result;\n        }\n    }\n\n    var bs = moment.defineLocale('bs', {\n        months: 'januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar'.split(\n            '_'\n        ),\n        monthsShort:\n            'jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split(\n            '_'\n        ),\n        weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n        weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm',\n            LLLL: 'dddd, D. MMMM YYYY H:mm',\n        },\n        calendar: {\n            sameDay: '[danas u] LT',\n            nextDay: '[sutra u] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[u] [nedjelju] [u] LT';\n                    case 3:\n                        return '[u] [srijedu] [u] LT';\n                    case 6:\n                        return '[u] [subotu] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[u] dddd [u] LT';\n                }\n            },\n            lastDay: '[jučer u] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                        return '[prošlu] dddd [u] LT';\n                    case 6:\n                        return '[prošle] [subote] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[prošli] dddd [u] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'za %s',\n            past: 'prije %s',\n            s: 'par sekundi',\n            ss: translate,\n            m: translate,\n            mm: translate,\n            h: translate,\n            hh: translate,\n            d: 'dan',\n            dd: translate,\n            M: 'mjesec',\n            MM: translate,\n            y: 'godinu',\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return bs;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9icy5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsa0RBQVc7QUFDckUsR0FBRyxDQUNzQjtBQUN6QixDQUFDLDRCQUE0Qjs7QUFFN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYnMuanM/ZTAwNiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogQm9zbmlhbiBbYnNdXG4vLyEgYXV0aG9yIDogTmVkaW0gQ2hvbGljaCA6IGh0dHBzOi8vZ2l0aHViLmNvbS9mcm9udHlhcmRcbi8vISBiYXNlZCBvbiAoaHIpIHRyYW5zbGF0aW9uIGJ5IEJvamFuIE1hcmtvdmnEh1xuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgZnVuY3Rpb24gdHJhbnNsYXRlKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5KSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBudW1iZXIgKyAnICc7XG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlICdzcyc6XG4gICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ3Nla3VuZGEnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyID09PSAyIHx8IG51bWJlciA9PT0gMyB8fCBudW1iZXIgPT09IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdzZWt1bmRlJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ3Nla3VuZGknO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgY2FzZSAnbSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyAnamVkbmEgbWludXRhJyA6ICdqZWRuZSBtaW51dGUnO1xuICAgICAgICAgICAgY2FzZSAnbW0nOlxuICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdtaW51dGEnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyID09PSAyIHx8IG51bWJlciA9PT0gMyB8fCBudW1iZXIgPT09IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdtaW51dGUnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnbWludXRhJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIGNhc2UgJ2gnOlxuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gJ2plZGFuIHNhdCcgOiAnamVkbm9nIHNhdGEnO1xuICAgICAgICAgICAgY2FzZSAnaGgnOlxuICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdzYXQnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyID09PSAyIHx8IG51bWJlciA9PT0gMyB8fCBudW1iZXIgPT09IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdzYXRhJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ3NhdGknO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgY2FzZSAnZGQnOlxuICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdkYW4nO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnZGFuYSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICBjYXNlICdNTSc6XG4gICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ21qZXNlYyc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPT09IDIgfHwgbnVtYmVyID09PSAzIHx8IG51bWJlciA9PT0gNCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ21qZXNlY2EnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnbWplc2VjaSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICBjYXNlICd5eSc6XG4gICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ2dvZGluYSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPT09IDIgfHwgbnVtYmVyID09PSAzIHx8IG51bWJlciA9PT0gNCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ2dvZGluZSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdnb2RpbmEnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGJzID0gbW9tZW50LmRlZmluZUxvY2FsZSgnYnMnLCB7XG4gICAgICAgIG1vbnRoczogJ2phbnVhcl9mZWJydWFyX21hcnRfYXByaWxfbWFqX2p1bmlfanVsaV9hdWd1c3Rfc2VwdGVtYmFyX29rdG9iYXJfbm92ZW1iYXJfZGVjZW1iYXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ2phbi5fZmViLl9tYXIuX2Fwci5fbWFqLl9qdW4uX2p1bC5fYXVnLl9zZXAuX29rdC5fbm92Ll9kZWMuJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOiAnbmVkamVsamFfcG9uZWRqZWxqYWtfdXRvcmFrX3NyaWplZGFfxI1ldHZydGFrX3BldGFrX3N1Ym90YScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ25lZC5fcG9uLl91dG8uX3NyaS5fxI1ldC5fcGV0Ll9zdWIuJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ25lX3BvX3V0X3NyX8SNZV9wZV9zdScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0g6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdELiBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRC4gTU1NTSBZWVlZIEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQuIE1NTU0gWVlZWSBIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbZGFuYXMgdV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tzdXRyYSB1XSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kYXkoKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t1XSBbbmVkamVsanVdIFt1XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3VdIFtzcmlqZWR1XSBbdV0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t1XSBbc3Vib3R1XSBbdV0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t1XSBkZGRkIFt1XSBMVCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbanXEjWVyIHVdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbcHJvxaFsdV0gZGRkZCBbdV0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1twcm/FoWxlXSBbc3Vib3RlXSBbdV0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1twcm/FoWxpXSBkZGRkIFt1XSBMVCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnemEgJXMnLFxuICAgICAgICAgICAgcGFzdDogJ3ByaWplICVzJyxcbiAgICAgICAgICAgIHM6ICdwYXIgc2VrdW5kaScsXG4gICAgICAgICAgICBzczogdHJhbnNsYXRlLFxuICAgICAgICAgICAgbTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgbW06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGg6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGhoOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBkOiAnZGFuJyxcbiAgICAgICAgICAgIGRkOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBNOiAnbWplc2VjJyxcbiAgICAgICAgICAgIE1NOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICB5OiAnZ29kaW51JyxcbiAgICAgICAgICAgIHl5OiB0cmFuc2xhdGUsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWw6ICclZC4nLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA3LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA3dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gYnM7XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/bs.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/ca.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/ca.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Catalan [ca]\n//! author : Juan G. Hurtado : https://github.com/juanghurtado\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var ca = moment.defineLocale('ca', {\n        months: {\n            standalone:\n                'gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre'.split(\n                    '_'\n                ),\n            format: \"de gener_de febrer_de març_d'abril_de maig_de juny_de juliol_d'agost_de setembre_d'octubre_de novembre_de desembre\".split(\n                '_'\n            ),\n            isFormat: /D[oD]?(\\s)+MMMM/,\n        },\n        monthsShort:\n            'gen._febr._març_abr._maig_juny_jul._ag._set._oct._nov._des.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays:\n            'diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte'.split(\n                '_'\n            ),\n        weekdaysShort: 'dg._dl._dt._dc._dj._dv._ds.'.split('_'),\n        weekdaysMin: 'dg_dl_dt_dc_dj_dv_ds'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM [de] YYYY',\n            ll: 'D MMM YYYY',\n            LLL: 'D MMMM [de] YYYY [a les] H:mm',\n            lll: 'D MMM YYYY, H:mm',\n            LLLL: 'dddd D MMMM [de] YYYY [a les] H:mm',\n            llll: 'ddd D MMM YYYY, H:mm',\n        },\n        calendar: {\n            sameDay: function () {\n                return '[avui a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';\n            },\n            nextDay: function () {\n                return '[demà a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';\n            },\n            nextWeek: function () {\n                return 'dddd [a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';\n            },\n            lastDay: function () {\n                return '[ahir a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';\n            },\n            lastWeek: function () {\n                return (\n                    '[el] dddd [passat a ' +\n                    (this.hours() !== 1 ? 'les' : 'la') +\n                    '] LT'\n                );\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: \"d'aquí %s\",\n            past: 'fa %s',\n            s: 'uns segons',\n            ss: '%d segons',\n            m: 'un minut',\n            mm: '%d minuts',\n            h: 'una hora',\n            hh: '%d hores',\n            d: 'un dia',\n            dd: '%d dies',\n            M: 'un mes',\n            MM: '%d mesos',\n            y: 'un any',\n            yy: '%d anys',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(r|n|t|è|a)/,\n        ordinal: function (number, period) {\n            var output =\n                number === 1\n                    ? 'r'\n                    : number === 2\n                    ? 'n'\n                    : number === 3\n                    ? 'r'\n                    : number === 4\n                    ? 't'\n                    : 'è';\n            if (period === 'w' || period === 'W') {\n                output = 'a';\n            }\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return ca;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9jYS5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvY2EuanM/ZDQxNyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogQ2F0YWxhbiBbY2FdXG4vLyEgYXV0aG9yIDogSnVhbiBHLiBIdXJ0YWRvIDogaHR0cHM6Ly9naXRodWIuY29tL2p1YW5naHVydGFkb1xuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIGNhID0gbW9tZW50LmRlZmluZUxvY2FsZSgnY2EnLCB7XG4gICAgICAgIG1vbnRoczoge1xuICAgICAgICAgICAgc3RhbmRhbG9uZTpcbiAgICAgICAgICAgICAgICAnZ2VuZXJfZmVicmVyX21hcsOnX2FicmlsX21haWdfanVueV9qdWxpb2xfYWdvc3Rfc2V0ZW1icmVfb2N0dWJyZV9ub3ZlbWJyZV9kZXNlbWJyZScuc3BsaXQoXG4gICAgICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICBmb3JtYXQ6IFwiZGUgZ2VuZXJfZGUgZmVicmVyX2RlIG1hcsOnX2QnYWJyaWxfZGUgbWFpZ19kZSBqdW55X2RlIGp1bGlvbF9kJ2Fnb3N0X2RlIHNldGVtYnJlX2Qnb2N0dWJyZV9kZSBub3ZlbWJyZV9kZSBkZXNlbWJyZVwiLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGlzRm9ybWF0OiAvRFtvRF0/KFxccykrTU1NTS8sXG4gICAgICAgIH0sXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ2dlbi5fZmVici5fbWFyw6dfYWJyLl9tYWlnX2p1bnlfanVsLl9hZy5fc2V0Ll9vY3QuX25vdi5fZGVzLicuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czpcbiAgICAgICAgICAgICdkaXVtZW5nZV9kaWxsdW5zX2RpbWFydHNfZGltZWNyZXNfZGlqb3VzX2RpdmVuZHJlc19kaXNzYWJ0ZScuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnZGcuX2RsLl9kdC5fZGMuX2RqLl9kdi5fZHMuJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ2RnX2RsX2R0X2RjX2RqX2R2X2RzJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0g6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBbZGVdIFlZWVknLFxuICAgICAgICAgICAgbGw6ICdEIE1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBbZGVdIFlZWVkgW2EgbGVzXSBIOm1tJyxcbiAgICAgICAgICAgIGxsbDogJ0QgTU1NIFlZWVksIEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQgRCBNTU1NIFtkZV0gWVlZWSBbYSBsZXNdIEg6bW0nLFxuICAgICAgICAgICAgbGxsbDogJ2RkZCBEIE1NTSBZWVlZLCBIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1thdnVpIGEgJyArICh0aGlzLmhvdXJzKCkgIT09IDEgPyAnbGVzJyA6ICdsYScpICsgJ10gTFQnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5leHREYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1tkZW3DoCBhICcgKyAodGhpcy5ob3VycygpICE9PSAxID8gJ2xlcycgOiAnbGEnKSArICddIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuZXh0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnZGRkZCBbYSAnICsgKHRoaXMuaG91cnMoKSAhPT0gMSA/ICdsZXMnIDogJ2xhJykgKyAnXSBMVCc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdERheTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnW2FoaXIgYSAnICsgKHRoaXMuaG91cnMoKSAhPT0gMSA/ICdsZXMnIDogJ2xhJykgKyAnXSBMVCc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAnW2VsXSBkZGRkIFtwYXNzYXQgYSAnICtcbiAgICAgICAgICAgICAgICAgICAgKHRoaXMuaG91cnMoKSAhPT0gMSA/ICdsZXMnIDogJ2xhJykgK1xuICAgICAgICAgICAgICAgICAgICAnXSBMVCdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiBcImQnYXF1w60gJXNcIixcbiAgICAgICAgICAgIHBhc3Q6ICdmYSAlcycsXG4gICAgICAgICAgICBzOiAndW5zIHNlZ29ucycsXG4gICAgICAgICAgICBzczogJyVkIHNlZ29ucycsXG4gICAgICAgICAgICBtOiAndW4gbWludXQnLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dHMnLFxuICAgICAgICAgICAgaDogJ3VuYSBob3JhJyxcbiAgICAgICAgICAgIGhoOiAnJWQgaG9yZXMnLFxuICAgICAgICAgICAgZDogJ3VuIGRpYScsXG4gICAgICAgICAgICBkZDogJyVkIGRpZXMnLFxuICAgICAgICAgICAgTTogJ3VuIG1lcycsXG4gICAgICAgICAgICBNTTogJyVkIG1lc29zJyxcbiAgICAgICAgICAgIHk6ICd1biBhbnknLFxuICAgICAgICAgICAgeXk6ICclZCBhbnlzJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KHJ8bnx0fMOofGEpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlciwgcGVyaW9kKSB7XG4gICAgICAgICAgICB2YXIgb3V0cHV0ID1cbiAgICAgICAgICAgICAgICBudW1iZXIgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgPyAncidcbiAgICAgICAgICAgICAgICAgICAgOiBudW1iZXIgPT09IDJcbiAgICAgICAgICAgICAgICAgICAgPyAnbidcbiAgICAgICAgICAgICAgICAgICAgOiBudW1iZXIgPT09IDNcbiAgICAgICAgICAgICAgICAgICAgPyAncidcbiAgICAgICAgICAgICAgICAgICAgOiBudW1iZXIgPT09IDRcbiAgICAgICAgICAgICAgICAgICAgPyAndCdcbiAgICAgICAgICAgICAgICAgICAgOiAnw6gnO1xuICAgICAgICAgICAgaWYgKHBlcmlvZCA9PT0gJ3cnIHx8IHBlcmlvZCA9PT0gJ1cnKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gJ2EnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIG91dHB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNhO1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/ca.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/cs.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/cs.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Czech [cs]\n//! author : petrbela : https://github.com/petrbela\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var months = {\n            format: 'leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec'.split(\n                '_'\n            ),\n            standalone:\n                'ledna_února_března_dubna_května_června_července_srpna_září_října_listopadu_prosince'.split(\n                    '_'\n                ),\n        },\n        monthsShort = 'led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro'.split('_'),\n        monthsParse = [\n            /^led/i,\n            /^úno/i,\n            /^bře/i,\n            /^dub/i,\n            /^kvě/i,\n            /^(čvn|červen$|června)/i,\n            /^(čvc|červenec|července)/i,\n            /^srp/i,\n            /^zář/i,\n            /^říj/i,\n            /^lis/i,\n            /^pro/i,\n        ],\n        // NOTE: 'červen' is substring of 'červenec'; therefore 'červenec' must precede 'červen' in the regex to be fully matched.\n        // Otherwise parser matches '1. červenec' as '1. červen' + 'ec'.\n        monthsRegex =\n            /^(leden|únor|březen|duben|květen|červenec|července|červen|června|srpen|září|říjen|listopad|prosinec|led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i;\n\n    function plural(n) {\n        return n > 1 && n < 5 && ~~(n / 10) !== 1;\n    }\n    function translate(number, withoutSuffix, key, isFuture) {\n        var result = number + ' ';\n        switch (key) {\n            case 's': // a few seconds / in a few seconds / a few seconds ago\n                return withoutSuffix || isFuture ? 'pár sekund' : 'pár sekundami';\n            case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'sekundy' : 'sekund');\n                } else {\n                    return result + 'sekundami';\n                }\n            case 'm': // a minute / in a minute / a minute ago\n                return withoutSuffix ? 'minuta' : isFuture ? 'minutu' : 'minutou';\n            case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'minuty' : 'minut');\n                } else {\n                    return result + 'minutami';\n                }\n            case 'h': // an hour / in an hour / an hour ago\n                return withoutSuffix ? 'hodina' : isFuture ? 'hodinu' : 'hodinou';\n            case 'hh': // 9 hours / in 9 hours / 9 hours ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'hodiny' : 'hodin');\n                } else {\n                    return result + 'hodinami';\n                }\n            case 'd': // a day / in a day / a day ago\n                return withoutSuffix || isFuture ? 'den' : 'dnem';\n            case 'dd': // 9 days / in 9 days / 9 days ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'dny' : 'dní');\n                } else {\n                    return result + 'dny';\n                }\n            case 'M': // a month / in a month / a month ago\n                return withoutSuffix || isFuture ? 'měsíc' : 'měsícem';\n            case 'MM': // 9 months / in 9 months / 9 months ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'měsíce' : 'měsíců');\n                } else {\n                    return result + 'měsíci';\n                }\n            case 'y': // a year / in a year / a year ago\n                return withoutSuffix || isFuture ? 'rok' : 'rokem';\n            case 'yy': // 9 years / in 9 years / 9 years ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'roky' : 'let');\n                } else {\n                    return result + 'lety';\n                }\n        }\n    }\n\n    var cs = moment.defineLocale('cs', {\n        months: months,\n        monthsShort: monthsShort,\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        // NOTE: 'červen' is substring of 'červenec'; therefore 'červenec' must precede 'červen' in the regex to be fully matched.\n        // Otherwise parser matches '1. červenec' as '1. červen' + 'ec'.\n        monthsStrictRegex:\n            /^(leden|ledna|února|únor|březen|března|duben|dubna|květen|května|červenec|července|červen|června|srpen|srpna|září|říjen|října|listopadu|listopad|prosinec|prosince)/i,\n        monthsShortStrictRegex:\n            /^(led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i,\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n        weekdays: 'neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota'.split('_'),\n        weekdaysShort: 'ne_po_út_st_čt_pá_so'.split('_'),\n        weekdaysMin: 'ne_po_út_st_čt_pá_so'.split('_'),\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm',\n            LLLL: 'dddd D. MMMM YYYY H:mm',\n            l: 'D. M. YYYY',\n        },\n        calendar: {\n            sameDay: '[dnes v] LT',\n            nextDay: '[zítra v] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[v neděli v] LT';\n                    case 1:\n                    case 2:\n                        return '[v] dddd [v] LT';\n                    case 3:\n                        return '[ve středu v] LT';\n                    case 4:\n                        return '[ve čtvrtek v] LT';\n                    case 5:\n                        return '[v pátek v] LT';\n                    case 6:\n                        return '[v sobotu v] LT';\n                }\n            },\n            lastDay: '[včera v] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[minulou neděli v] LT';\n                    case 1:\n                    case 2:\n                        return '[minulé] dddd [v] LT';\n                    case 3:\n                        return '[minulou středu v] LT';\n                    case 4:\n                    case 5:\n                        return '[minulý] dddd [v] LT';\n                    case 6:\n                        return '[minulou sobotu v] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'za %s',\n            past: 'před %s',\n            s: translate,\n            ss: translate,\n            m: translate,\n            mm: translate,\n            h: translate,\n            hh: translate,\n            d: translate,\n            dd: translate,\n            M: translate,\n            MM: translate,\n            y: translate,\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return cs;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9jcy5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0RBQXNEO0FBQ3REO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzREFBc0Q7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2NzLmpzPzQ4MDYiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEN6ZWNoIFtjc11cbi8vISBhdXRob3IgOiBwZXRyYmVsYSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9wZXRyYmVsYVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIG1vbnRocyA9IHtcbiAgICAgICAgICAgIGZvcm1hdDogJ2xlZGVuX8O6bm9yX2LFmWV6ZW5fZHViZW5fa3bEm3Rlbl/EjWVydmVuX8SNZXJ2ZW5lY19zcnBlbl96w6HFmcOtX8WZw61qZW5fbGlzdG9wYWRfcHJvc2luZWMnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHN0YW5kYWxvbmU6XG4gICAgICAgICAgICAgICAgJ2xlZG5hX8O6bm9yYV9ixZllem5hX2R1Ym5hX2t2xJt0bmFfxI1lcnZuYV/EjWVydmVuY2Vfc3JwbmFfesOhxZnDrV/FmcOtam5hX2xpc3RvcGFkdV9wcm9zaW5jZScuc3BsaXQoXG4gICAgICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgICAgICksXG4gICAgICAgIH0sXG4gICAgICAgIG1vbnRoc1Nob3J0ID0gJ2xlZF/Dum5vX2LFmWVfZHViX2t2xJtfxI12bl/EjXZjX3NycF96w6HFmV/FmcOtal9saXNfcHJvJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNQYXJzZSA9IFtcbiAgICAgICAgICAgIC9ebGVkL2ksXG4gICAgICAgICAgICAvXsO6bm8vaSxcbiAgICAgICAgICAgIC9eYsWZZS9pLFxuICAgICAgICAgICAgL15kdWIvaSxcbiAgICAgICAgICAgIC9ea3bEmy9pLFxuICAgICAgICAgICAgL14oxI12bnzEjWVydmVuJHzEjWVydm5hKS9pLFxuICAgICAgICAgICAgL14oxI12Y3zEjWVydmVuZWN8xI1lcnZlbmNlKS9pLFxuICAgICAgICAgICAgL15zcnAvaSxcbiAgICAgICAgICAgIC9eesOhxZkvaSxcbiAgICAgICAgICAgIC9exZnDrWovaSxcbiAgICAgICAgICAgIC9ebGlzL2ksXG4gICAgICAgICAgICAvXnByby9pLFxuICAgICAgICBdLFxuICAgICAgICAvLyBOT1RFOiAnxI1lcnZlbicgaXMgc3Vic3RyaW5nIG9mICfEjWVydmVuZWMnOyB0aGVyZWZvcmUgJ8SNZXJ2ZW5lYycgbXVzdCBwcmVjZWRlICfEjWVydmVuJyBpbiB0aGUgcmVnZXggdG8gYmUgZnVsbHkgbWF0Y2hlZC5cbiAgICAgICAgLy8gT3RoZXJ3aXNlIHBhcnNlciBtYXRjaGVzICcxLiDEjWVydmVuZWMnIGFzICcxLiDEjWVydmVuJyArICdlYycuXG4gICAgICAgIG1vbnRoc1JlZ2V4ID1cbiAgICAgICAgICAgIC9eKGxlZGVufMO6bm9yfGLFmWV6ZW58ZHViZW58a3bEm3RlbnzEjWVydmVuZWN8xI1lcnZlbmNlfMSNZXJ2ZW58xI1lcnZuYXxzcnBlbnx6w6HFmcOtfMWZw61qZW58bGlzdG9wYWR8cHJvc2luZWN8bGVkfMO6bm98YsWZZXxkdWJ8a3bEm3zEjXZufMSNdmN8c3JwfHrDocWZfMWZw61qfGxpc3xwcm8pL2k7XG5cbiAgICBmdW5jdGlvbiBwbHVyYWwobikge1xuICAgICAgICByZXR1cm4gbiA+IDEgJiYgbiA8IDUgJiYgfn4obiAvIDEwKSAhPT0gMTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdHJhbnNsYXRlKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5LCBpc0Z1dHVyZSkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gbnVtYmVyICsgJyAnO1xuICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgY2FzZSAncyc6IC8vIGEgZmV3IHNlY29uZHMgLyBpbiBhIGZldyBzZWNvbmRzIC8gYSBmZXcgc2Vjb25kcyBhZ29cbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdww6FyIHNla3VuZCcgOiAncMOhciBzZWt1bmRhbWknO1xuICAgICAgICAgICAgY2FzZSAnc3MnOiAvLyA5IHNlY29uZHMgLyBpbiA5IHNlY29uZHMgLyA5IHNlY29uZHMgYWdvXG4gICAgICAgICAgICAgICAgaWYgKHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIChwbHVyYWwobnVtYmVyKSA/ICdzZWt1bmR5JyA6ICdzZWt1bmQnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgJ3Nla3VuZGFtaSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnbSc6IC8vIGEgbWludXRlIC8gaW4gYSBtaW51dGUgLyBhIG1pbnV0ZSBhZ29cbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/ICdtaW51dGEnIDogaXNGdXR1cmUgPyAnbWludXR1JyA6ICdtaW51dG91JztcbiAgICAgICAgICAgIGNhc2UgJ21tJzogLy8gOSBtaW51dGVzIC8gaW4gOSBtaW51dGVzIC8gOSBtaW51dGVzIGFnb1xuICAgICAgICAgICAgICAgIGlmICh3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAocGx1cmFsKG51bWJlcikgPyAnbWludXR5JyA6ICdtaW51dCcpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAnbWludXRhbWknO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ2gnOiAvLyBhbiBob3VyIC8gaW4gYW4gaG91ciAvIGFuIGhvdXIgYWdvXG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyAnaG9kaW5hJyA6IGlzRnV0dXJlID8gJ2hvZGludScgOiAnaG9kaW5vdSc7XG4gICAgICAgICAgICBjYXNlICdoaCc6IC8vIDkgaG91cnMgLyBpbiA5IGhvdXJzIC8gOSBob3VycyBhZ29cbiAgICAgICAgICAgICAgICBpZiAod2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKHBsdXJhbChudW1iZXIpID8gJ2hvZGlueScgOiAnaG9kaW4nKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgJ2hvZGluYW1pJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdkJzogLy8gYSBkYXkgLyBpbiBhIGRheSAvIGEgZGF5IGFnb1xuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ2RlbicgOiAnZG5lbSc7XG4gICAgICAgICAgICBjYXNlICdkZCc6IC8vIDkgZGF5cyAvIGluIDkgZGF5cyAvIDkgZGF5cyBhZ29cbiAgICAgICAgICAgICAgICBpZiAod2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKHBsdXJhbChudW1iZXIpID8gJ2RueScgOiAnZG7DrScpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAnZG55JztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdNJzogLy8gYSBtb250aCAvIGluIGEgbW9udGggLyBhIG1vbnRoIGFnb1xuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ23Em3PDrWMnIDogJ23Em3PDrWNlbSc7XG4gICAgICAgICAgICBjYXNlICdNTSc6IC8vIDkgbW9udGhzIC8gaW4gOSBtb250aHMgLyA5IG1vbnRocyBhZ29cbiAgICAgICAgICAgICAgICBpZiAod2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKHBsdXJhbChudW1iZXIpID8gJ23Em3PDrWNlJyA6ICdtxJtzw61jxa8nKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgJ23Em3PDrWNpJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICd5JzogLy8gYSB5ZWFyIC8gaW4gYSB5ZWFyIC8gYSB5ZWFyIGFnb1xuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ3JvaycgOiAncm9rZW0nO1xuICAgICAgICAgICAgY2FzZSAneXknOiAvLyA5IHllYXJzIC8gaW4gOSB5ZWFycyAvIDkgeWVhcnMgYWdvXG4gICAgICAgICAgICAgICAgaWYgKHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIChwbHVyYWwobnVtYmVyKSA/ICdyb2t5JyA6ICdsZXQnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgJ2xldHknO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBjcyA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2NzJywge1xuICAgICAgICBtb250aHM6IG1vbnRocyxcbiAgICAgICAgbW9udGhzU2hvcnQ6IG1vbnRoc1Nob3J0LFxuICAgICAgICBtb250aHNSZWdleDogbW9udGhzUmVnZXgsXG4gICAgICAgIG1vbnRoc1Nob3J0UmVnZXg6IG1vbnRoc1JlZ2V4LFxuICAgICAgICAvLyBOT1RFOiAnxI1lcnZlbicgaXMgc3Vic3RyaW5nIG9mICfEjWVydmVuZWMnOyB0aGVyZWZvcmUgJ8SNZXJ2ZW5lYycgbXVzdCBwcmVjZWRlICfEjWVydmVuJyBpbiB0aGUgcmVnZXggdG8gYmUgZnVsbHkgbWF0Y2hlZC5cbiAgICAgICAgLy8gT3RoZXJ3aXNlIHBhcnNlciBtYXRjaGVzICcxLiDEjWVydmVuZWMnIGFzICcxLiDEjWVydmVuJyArICdlYycuXG4gICAgICAgIG1vbnRoc1N0cmljdFJlZ2V4OlxuICAgICAgICAgICAgL14obGVkZW58bGVkbmF8w7pub3JhfMO6bm9yfGLFmWV6ZW58YsWZZXpuYXxkdWJlbnxkdWJuYXxrdsSbdGVufGt2xJt0bmF8xI1lcnZlbmVjfMSNZXJ2ZW5jZXzEjWVydmVufMSNZXJ2bmF8c3JwZW58c3JwbmF8esOhxZnDrXzFmcOtamVufMWZw61qbmF8bGlzdG9wYWR1fGxpc3RvcGFkfHByb3NpbmVjfHByb3NpbmNlKS9pLFxuICAgICAgICBtb250aHNTaG9ydFN0cmljdFJlZ2V4OlxuICAgICAgICAgICAgL14obGVkfMO6bm98YsWZZXxkdWJ8a3bEm3zEjXZufMSNdmN8c3JwfHrDocWZfMWZw61qfGxpc3xwcm8pL2ksXG4gICAgICAgIG1vbnRoc1BhcnNlOiBtb250aHNQYXJzZSxcbiAgICAgICAgbG9uZ01vbnRoc1BhcnNlOiBtb250aHNQYXJzZSxcbiAgICAgICAgc2hvcnRNb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgICAgIHdlZWtkYXlzOiAnbmVkxJtsZV9wb25kxJtsw61fw7p0ZXLDvV9zdMWZZWRhX8SNdHZydGVrX3DDoXRla19zb2JvdGEnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICduZV9wb1/DunRfc3RfxI10X3DDoV9zbycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICduZV9wb1/DunRfc3RfxI10X3DDoV9zbycuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSDptbScsXG4gICAgICAgICAgICBMVFM6ICdIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRC4gTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QuIE1NTU0gWVlZWSBIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkIEQuIE1NTU0gWVlZWSBIOm1tJyxcbiAgICAgICAgICAgIGw6ICdELiBNLiBZWVlZJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbZG5lcyB2XSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW3rDrXRyYSB2XSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kYXkoKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t2IG5lZMSbbGkgdl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3ZdIGRkZGQgW3ZdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdmUgc3TFmWVkdSB2XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3ZlIMSNdHZydGVrIHZdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdiBww6F0ZWsgdl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t2IHNvYm90dSB2XSBMVCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbdsSNZXJhIHZdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW21pbnVsb3UgbmVkxJtsaSB2XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbbWludWzDqV0gZGRkZCBbdl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1ttaW51bG91IHN0xZllZHUgdl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW21pbnVsw71dIGRkZGQgW3ZdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbbWludWxvdSBzb2JvdHUgdl0gTFQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ3phICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICdwxZllZCAlcycsXG4gICAgICAgICAgICBzOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBzczogdHJhbnNsYXRlLFxuICAgICAgICAgICAgbTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgbW06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGg6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGhoOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBkOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBkZDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgTTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgTU06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIHk6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIHl5OiB0cmFuc2xhdGUsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWw6ICclZC4nLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gY3M7XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/cs.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/cv.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/cv.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Chuvash [cv]\n//! author : Anatoly Mironov : https://github.com/mirontoli\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var cv = moment.defineLocale('cv', {\n        months: 'кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав'.split(\n            '_'\n        ),\n        monthsShort: 'кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш'.split('_'),\n        weekdays:\n            'вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун'.split(\n                '_'\n            ),\n        weekdaysShort: 'выр_тун_ытл_юн_кӗҫ_эрн_шӑм'.split('_'),\n        weekdaysMin: 'вр_тн_ыт_юн_кҫ_эр_шм'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD-MM-YYYY',\n            LL: 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]',\n            LLL: 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm',\n            LLLL: 'dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm',\n        },\n        calendar: {\n            sameDay: '[Паян] LT [сехетре]',\n            nextDay: '[Ыран] LT [сехетре]',\n            lastDay: '[Ӗнер] LT [сехетре]',\n            nextWeek: '[Ҫитес] dddd LT [сехетре]',\n            lastWeek: '[Иртнӗ] dddd LT [сехетре]',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: function (output) {\n                var affix = /сехет$/i.exec(output)\n                    ? 'рен'\n                    : /ҫул$/i.exec(output)\n                    ? 'тан'\n                    : 'ран';\n                return output + affix;\n            },\n            past: '%s каялла',\n            s: 'пӗр-ик ҫеккунт',\n            ss: '%d ҫеккунт',\n            m: 'пӗр минут',\n            mm: '%d минут',\n            h: 'пӗр сехет',\n            hh: '%d сехет',\n            d: 'пӗр кун',\n            dd: '%d кун',\n            M: 'пӗр уйӑх',\n            MM: '%d уйӑх',\n            y: 'пӗр ҫул',\n            yy: '%d ҫул',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-мӗш/,\n        ordinal: '%d-мӗш',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return cv;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9jdi5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2N2LmpzPzA3YWMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IENodXZhc2ggW2N2XVxuLy8hIGF1dGhvciA6IEFuYXRvbHkgTWlyb25vdiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9taXJvbnRvbGlcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBjdiA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2N2Jywge1xuICAgICAgICBtb250aHM6ICfQutOR0YDQu9Cw0Ydf0L3QsNGA05HRgV/Qv9GD0Yhf0LDQutCwX9C80LDQuV/Sq9OX0YDRgtC80LVf0YPRgtORX9Kr0YPRgNC70LBf0LDQstOR0L1f0Y7Qv9CwX9GH07PQul/RgNCw0YjRgtCw0LInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAn0LrTkdGAX9C90LDRgF/Qv9GD0Yhf0LDQutCwX9C80LDQuV/Sq9OX0YBf0YPRgtORX9Kr0YPRgF/QsNCy0L1f0Y7Qv9CwX9GH07PQul/RgNCw0YgnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOlxuICAgICAgICAgICAgJ9Cy0YvRgNGB0LDRgNC90LjQutGD0L1f0YLRg9C90YLQuNC60YPQvV/Ri9GC0LvQsNGA0LjQutGD0L1f0Y7QvdC60YPQvV/QutOX0qvQvdC10YDQvdC40LrRg9C9X9GN0YDQvdC10LrRg9C9X9GI05HQvNCw0YLQutGD0L0nLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ9Cy0YvRgF/RgtGD0L1f0YvRgtC7X9GO0L1f0LrTl9KrX9GN0YDQvV/RiNOR0LwnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn0LLRgF/RgtC9X9GL0YJf0Y7QvV/QutKrX9GN0YBf0YjQvCcuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELU1NLVlZWVknLFxuICAgICAgICAgICAgTEw6ICdZWVlZIFvSq9GD0LvRhdC4XSBNTU1NIFvRg9C505HRhdOX0L1dIERbLdC805fRiNOXXScsXG4gICAgICAgICAgICBMTEw6ICdZWVlZIFvSq9GD0LvRhdC4XSBNTU1NIFvRg9C505HRhdOX0L1dIERbLdC805fRiNOXXSwgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIFlZWVkgW9Kr0YPQu9GF0LhdIE1NTU0gW9GD0LnTkdGF05fQvV0gRFst0LzTl9GI05ddLCBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW9Cf0LDRj9C9XSBMVCBb0YHQtdGF0LXRgtGA0LVdJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb0KvRgNCw0L1dIExUIFvRgdC10YXQtdGC0YDQtV0nLFxuICAgICAgICAgICAgbGFzdERheTogJ1vTltC90LXRgF0gTFQgW9GB0LXRhdC10YLRgNC1XScsXG4gICAgICAgICAgICBuZXh0V2VlazogJ1vSqtC40YLQtdGBXSBkZGRkIExUIFvRgdC10YXQtdGC0YDQtV0nLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdb0JjRgNGC0L3Tl10gZGRkZCBMVCBb0YHQtdGF0LXRgtGA0LVdJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiBmdW5jdGlvbiAob3V0cHV0KSB7XG4gICAgICAgICAgICAgICAgdmFyIGFmZml4ID0gL9GB0LXRhdC10YIkL2kuZXhlYyhvdXRwdXQpXG4gICAgICAgICAgICAgICAgICAgID8gJ9GA0LXQvSdcbiAgICAgICAgICAgICAgICAgICAgOiAv0qvRg9C7JC9pLmV4ZWMob3V0cHV0KVxuICAgICAgICAgICAgICAgICAgICA/ICfRgtCw0L0nXG4gICAgICAgICAgICAgICAgICAgIDogJ9GA0LDQvSc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG91dHB1dCArIGFmZml4O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhc3Q6ICclcyDQutCw0Y/Qu9C70LAnLFxuICAgICAgICAgICAgczogJ9C/05fRgC3QuNC6INKr0LXQutC60YPQvdGCJyxcbiAgICAgICAgICAgIHNzOiAnJWQg0qvQtdC60LrRg9C90YInLFxuICAgICAgICAgICAgbTogJ9C/05fRgCDQvNC40L3Rg9GCJyxcbiAgICAgICAgICAgIG1tOiAnJWQg0LzQuNC90YPRgicsXG4gICAgICAgICAgICBoOiAn0L/Tl9GAINGB0LXRhdC10YInLFxuICAgICAgICAgICAgaGg6ICclZCDRgdC10YXQtdGCJyxcbiAgICAgICAgICAgIGQ6ICfQv9OX0YAg0LrRg9C9JyxcbiAgICAgICAgICAgIGRkOiAnJWQg0LrRg9C9JyxcbiAgICAgICAgICAgIE06ICfQv9OX0YAg0YPQudOR0YUnLFxuICAgICAgICAgICAgTU06ICclZCDRg9C505HRhScsXG4gICAgICAgICAgICB5OiAn0L/Tl9GAINKr0YPQuycsXG4gICAgICAgICAgICB5eTogJyVkINKr0YPQuycsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfS3QvNOX0YgvLFxuICAgICAgICBvcmRpbmFsOiAnJWQt0LzTl9GIJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNywgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gN3RoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGN2O1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/cv.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/cy.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/cy.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Welsh [cy]\n//! author : Robert Allen : https://github.com/robgallen\n//! author : https://github.com/ryangreaves\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var cy = moment.defineLocale('cy', {\n        months: 'Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr'.split(\n            '_'\n        ),\n        monthsShort: 'Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag'.split(\n            '_'\n        ),\n        weekdays:\n            'Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn'.split(\n                '_'\n            ),\n        weekdaysShort: 'Sul_Llun_Maw_Mer_Iau_Gwe_Sad'.split('_'),\n        weekdaysMin: 'Su_Ll_Ma_Me_Ia_Gw_Sa'.split('_'),\n        weekdaysParseExact: true,\n        // time formats are the same as en-gb\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Heddiw am] LT',\n            nextDay: '[Yfory am] LT',\n            nextWeek: 'dddd [am] LT',\n            lastDay: '[Ddoe am] LT',\n            lastWeek: 'dddd [diwethaf am] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'mewn %s',\n            past: '%s yn ôl',\n            s: 'ychydig eiliadau',\n            ss: '%d eiliad',\n            m: 'munud',\n            mm: '%d munud',\n            h: 'awr',\n            hh: '%d awr',\n            d: 'diwrnod',\n            dd: '%d diwrnod',\n            M: 'mis',\n            MM: '%d mis',\n            y: 'blwyddyn',\n            yy: '%d flynedd',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,\n        // traditional ordinal numbers above 31 are not commonly used in colloquial Welsh\n        ordinal: function (number) {\n            var b = number,\n                output = '',\n                lookup = [\n                    '',\n                    'af',\n                    'il',\n                    'ydd',\n                    'ydd',\n                    'ed',\n                    'ed',\n                    'ed',\n                    'fed',\n                    'fed',\n                    'fed', // 1af to 10fed\n                    'eg',\n                    'fed',\n                    'eg',\n                    'eg',\n                    'fed',\n                    'eg',\n                    'eg',\n                    'fed',\n                    'eg',\n                    'fed', // 11eg to 20fed\n                ];\n            if (b > 20) {\n                if (b === 40 || b === 50 || b === 60 || b === 80 || b === 100) {\n                    output = 'fed'; // not 30ain, 70ain or 90ain\n                } else {\n                    output = 'ain';\n                }\n            } else if (b > 0) {\n                output = lookup[b];\n            }\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return cy;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9jeS5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsa0RBQVc7QUFDckUsR0FBRyxDQUNzQjtBQUN6QixDQUFDLDRCQUE0Qjs7QUFFN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0M7QUFDcEMsa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9jeS5qcz8yMWY0Il0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBXZWxzaCBbY3ldXG4vLyEgYXV0aG9yIDogUm9iZXJ0IEFsbGVuIDogaHR0cHM6Ly9naXRodWIuY29tL3JvYmdhbGxlblxuLy8hIGF1dGhvciA6IGh0dHBzOi8vZ2l0aHViLmNvbS9yeWFuZ3JlYXZlc1xuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIGN5ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnY3knLCB7XG4gICAgICAgIG1vbnRoczogJ0lvbmF3cl9DaHdlZnJvcl9NYXdydGhfRWJyaWxsX01haV9NZWhlZmluX0dvcmZmZW5uYWZfQXdzdF9NZWRpX0h5ZHJlZl9UYWNod2VkZF9SaGFnZnlyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ0lvbl9DaHdlX01hd19FYnJfTWFpX01laF9Hb3JfQXdzX01lZF9IeWRfVGFjaF9SaGFnJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5czpcbiAgICAgICAgICAgICdEeWRkIFN1bF9EeWRkIExsdW5fRHlkZCBNYXdydGhfRHlkZCBNZXJjaGVyX0R5ZGQgSWF1X0R5ZGQgR3dlbmVyX0R5ZGQgU2Fkd3JuJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdTdWxfTGx1bl9NYXdfTWVyX0lhdV9Hd2VfU2FkJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ1N1X0xsX01hX01lX0lhX0d3X1NhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIC8vIHRpbWUgZm9ybWF0cyBhcmUgdGhlIHNhbWUgYXMgZW4tZ2JcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tIZWRkaXcgYW1dIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbWWZvcnkgYW1dIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbYW1dIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbRGRvZSBhbV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFtkaXdldGhhZiBhbV0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdtZXduICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyB5biDDtGwnLFxuICAgICAgICAgICAgczogJ3ljaHlkaWcgZWlsaWFkYXUnLFxuICAgICAgICAgICAgc3M6ICclZCBlaWxpYWQnLFxuICAgICAgICAgICAgbTogJ211bnVkJyxcbiAgICAgICAgICAgIG1tOiAnJWQgbXVudWQnLFxuICAgICAgICAgICAgaDogJ2F3cicsXG4gICAgICAgICAgICBoaDogJyVkIGF3cicsXG4gICAgICAgICAgICBkOiAnZGl3cm5vZCcsXG4gICAgICAgICAgICBkZDogJyVkIGRpd3Jub2QnLFxuICAgICAgICAgICAgTTogJ21pcycsXG4gICAgICAgICAgICBNTTogJyVkIG1pcycsXG4gICAgICAgICAgICB5OiAnYmx3eWRkeW4nLFxuICAgICAgICAgICAgeXk6ICclZCBmbHluZWRkJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KGZlZHxhaW58YWZ8aWx8eWRkfGVkfGVnKS8sXG4gICAgICAgIC8vIHRyYWRpdGlvbmFsIG9yZGluYWwgbnVtYmVycyBhYm92ZSAzMSBhcmUgbm90IGNvbW1vbmx5IHVzZWQgaW4gY29sbG9xdWlhbCBXZWxzaFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICB2YXIgYiA9IG51bWJlcixcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAnJyxcbiAgICAgICAgICAgICAgICBsb29rdXAgPSBbXG4gICAgICAgICAgICAgICAgICAgICcnLFxuICAgICAgICAgICAgICAgICAgICAnYWYnLFxuICAgICAgICAgICAgICAgICAgICAnaWwnLFxuICAgICAgICAgICAgICAgICAgICAneWRkJyxcbiAgICAgICAgICAgICAgICAgICAgJ3lkZCcsXG4gICAgICAgICAgICAgICAgICAgICdlZCcsXG4gICAgICAgICAgICAgICAgICAgICdlZCcsXG4gICAgICAgICAgICAgICAgICAgICdlZCcsXG4gICAgICAgICAgICAgICAgICAgICdmZWQnLFxuICAgICAgICAgICAgICAgICAgICAnZmVkJyxcbiAgICAgICAgICAgICAgICAgICAgJ2ZlZCcsIC8vIDFhZiB0byAxMGZlZFxuICAgICAgICAgICAgICAgICAgICAnZWcnLFxuICAgICAgICAgICAgICAgICAgICAnZmVkJyxcbiAgICAgICAgICAgICAgICAgICAgJ2VnJyxcbiAgICAgICAgICAgICAgICAgICAgJ2VnJyxcbiAgICAgICAgICAgICAgICAgICAgJ2ZlZCcsXG4gICAgICAgICAgICAgICAgICAgICdlZycsXG4gICAgICAgICAgICAgICAgICAgICdlZycsXG4gICAgICAgICAgICAgICAgICAgICdmZWQnLFxuICAgICAgICAgICAgICAgICAgICAnZWcnLFxuICAgICAgICAgICAgICAgICAgICAnZmVkJywgLy8gMTFlZyB0byAyMGZlZFxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICBpZiAoYiA+IDIwKSB7XG4gICAgICAgICAgICAgICAgaWYgKGIgPT09IDQwIHx8IGIgPT09IDUwIHx8IGIgPT09IDYwIHx8IGIgPT09IDgwIHx8IGIgPT09IDEwMCkge1xuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSAnZmVkJzsgLy8gbm90IDMwYWluLCA3MGFpbiBvciA5MGFpblxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9ICdhaW4nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYiA+IDApIHtcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSBsb29rdXBbYl07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgb3V0cHV0O1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gY3k7XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/cy.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/da.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/da.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Danish [da]\n//! author : Ulrik Nielsen : https://github.com/mrbase\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var da = moment.defineLocale('da', {\n        months: 'januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december'.split(\n            '_'\n        ),\n        monthsShort: 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n        weekdays: 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),\n        weekdaysShort: 'søn_man_tir_ons_tor_fre_lør'.split('_'),\n        weekdaysMin: 'sø_ma_ti_on_to_fr_lø'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY HH:mm',\n            LLLL: 'dddd [d.] D. MMMM YYYY [kl.] HH:mm',\n        },\n        calendar: {\n            sameDay: '[i dag kl.] LT',\n            nextDay: '[i morgen kl.] LT',\n            nextWeek: 'på dddd [kl.] LT',\n            lastDay: '[i går kl.] LT',\n            lastWeek: '[i] dddd[s kl.] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'om %s',\n            past: '%s siden',\n            s: 'få sekunder',\n            ss: '%d sekunder',\n            m: 'et minut',\n            mm: '%d minutter',\n            h: 'en time',\n            hh: '%d timer',\n            d: 'en dag',\n            dd: '%d dage',\n            M: 'en måned',\n            MM: '%d måneder',\n            y: 'et år',\n            yy: '%d år',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return da;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9kYS5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZGEuanM/ZGFkMCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogRGFuaXNoIFtkYV1cbi8vISBhdXRob3IgOiBVbHJpayBOaWVsc2VuIDogaHR0cHM6Ly9naXRodWIuY29tL21yYmFzZVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIGRhID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZGEnLCB7XG4gICAgICAgIG1vbnRoczogJ2phbnVhcl9mZWJydWFyX21hcnRzX2FwcmlsX21hal9qdW5pX2p1bGlfYXVndXN0X3NlcHRlbWJlcl9va3RvYmVyX25vdmVtYmVyX2RlY2VtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ2phbl9mZWJfbWFyX2Fwcl9tYWpfanVuX2p1bF9hdWdfc2VwX29rdF9ub3ZfZGVjJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ3PDuG5kYWdfbWFuZGFnX3RpcnNkYWdfb25zZGFnX3RvcnNkYWdfZnJlZGFnX2zDuHJkYWcnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdzw7huX21hbl90aXJfb25zX3Rvcl9mcmVfbMO4cicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdzw7hfbWFfdGlfb25fdG9fZnJfbMO4Jy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QuIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdELiBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQgW2QuXSBELiBNTU1NIFlZWVkgW2tsLl0gSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tpIGRhZyBrbC5dIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbaSBtb3JnZW4ga2wuXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ3DDpSBkZGRkIFtrbC5dIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbaSBnw6VyIGtsLl0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbaV0gZGRkZFtzIGtsLl0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdvbSAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMgc2lkZW4nLFxuICAgICAgICAgICAgczogJ2bDpSBzZWt1bmRlcicsXG4gICAgICAgICAgICBzczogJyVkIHNla3VuZGVyJyxcbiAgICAgICAgICAgIG06ICdldCBtaW51dCcsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0dGVyJyxcbiAgICAgICAgICAgIGg6ICdlbiB0aW1lJyxcbiAgICAgICAgICAgIGhoOiAnJWQgdGltZXInLFxuICAgICAgICAgICAgZDogJ2VuIGRhZycsXG4gICAgICAgICAgICBkZDogJyVkIGRhZ2UnLFxuICAgICAgICAgICAgTTogJ2VuIG3DpW5lZCcsXG4gICAgICAgICAgICBNTTogJyVkIG3DpW5lZGVyJyxcbiAgICAgICAgICAgIHk6ICdldCDDpXInLFxuICAgICAgICAgICAgeXk6ICclZCDDpXInLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsOiAnJWQuJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGRhO1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/da.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/de-at.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/de-at.js ***!
  \*********************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : German (Austria) [de-at]\n//! author : lluchs : https://github.com/lluchs\n//! author: Menelion Elensúle: https://github.com/Oire\n//! author : Martin Groller : https://github.com/MadMG\n//! author : Mikolaj Dadela : https://github.com/mik01aj\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            m: ['eine Minute', 'einer Minute'],\n            h: ['eine Stunde', 'einer Stunde'],\n            d: ['ein Tag', 'einem Tag'],\n            dd: [number + ' Tage', number + ' Tagen'],\n            w: ['eine Woche', 'einer Woche'],\n            M: ['ein Monat', 'einem Monat'],\n            MM: [number + ' Monate', number + ' Monaten'],\n            y: ['ein Jahr', 'einem Jahr'],\n            yy: [number + ' Jahre', number + ' Jahren'],\n        };\n        return withoutSuffix ? format[key][0] : format[key][1];\n    }\n\n    var deAt = moment.defineLocale('de-at', {\n        months: 'Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split(\n            '_'\n        ),\n        monthsShort:\n            'Jän._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),\n        monthsParseExact: true,\n        weekdays:\n            'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split(\n                '_'\n            ),\n        weekdaysShort: 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),\n        weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY HH:mm',\n            LLLL: 'dddd, D. MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[heute um] LT [Uhr]',\n            sameElse: 'L',\n            nextDay: '[morgen um] LT [Uhr]',\n            nextWeek: 'dddd [um] LT [Uhr]',\n            lastDay: '[gestern um] LT [Uhr]',\n            lastWeek: '[letzten] dddd [um] LT [Uhr]',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: 'vor %s',\n            s: 'ein paar Sekunden',\n            ss: '%d Sekunden',\n            m: processRelativeTime,\n            mm: '%d Minuten',\n            h: processRelativeTime,\n            hh: '%d Stunden',\n            d: processRelativeTime,\n            dd: processRelativeTime,\n            w: processRelativeTime,\n            ww: '%d Wochen',\n            M: processRelativeTime,\n            MM: processRelativeTime,\n            y: processRelativeTime,\n            yy: processRelativeTime,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return deAt;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9kZS1hdC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZGUtYXQuanM/NDkxOSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogR2VybWFuIChBdXN0cmlhKSBbZGUtYXRdXG4vLyEgYXV0aG9yIDogbGx1Y2hzIDogaHR0cHM6Ly9naXRodWIuY29tL2xsdWNoc1xuLy8hIGF1dGhvcjogTWVuZWxpb24gRWxlbnPDumxlOiBodHRwczovL2dpdGh1Yi5jb20vT2lyZVxuLy8hIGF1dGhvciA6IE1hcnRpbiBHcm9sbGVyIDogaHR0cHM6Ly9naXRodWIuY29tL01hZE1HXG4vLyEgYXV0aG9yIDogTWlrb2xhaiBEYWRlbGEgOiBodHRwczovL2dpdGh1Yi5jb20vbWlrMDFhalxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgZnVuY3Rpb24gcHJvY2Vzc1JlbGF0aXZlVGltZShudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSwgaXNGdXR1cmUpIHtcbiAgICAgICAgdmFyIGZvcm1hdCA9IHtcbiAgICAgICAgICAgIG06IFsnZWluZSBNaW51dGUnLCAnZWluZXIgTWludXRlJ10sXG4gICAgICAgICAgICBoOiBbJ2VpbmUgU3R1bmRlJywgJ2VpbmVyIFN0dW5kZSddLFxuICAgICAgICAgICAgZDogWydlaW4gVGFnJywgJ2VpbmVtIFRhZyddLFxuICAgICAgICAgICAgZGQ6IFtudW1iZXIgKyAnIFRhZ2UnLCBudW1iZXIgKyAnIFRhZ2VuJ10sXG4gICAgICAgICAgICB3OiBbJ2VpbmUgV29jaGUnLCAnZWluZXIgV29jaGUnXSxcbiAgICAgICAgICAgIE06IFsnZWluIE1vbmF0JywgJ2VpbmVtIE1vbmF0J10sXG4gICAgICAgICAgICBNTTogW251bWJlciArICcgTW9uYXRlJywgbnVtYmVyICsgJyBNb25hdGVuJ10sXG4gICAgICAgICAgICB5OiBbJ2VpbiBKYWhyJywgJ2VpbmVtIEphaHInXSxcbiAgICAgICAgICAgIHl5OiBbbnVtYmVyICsgJyBKYWhyZScsIG51bWJlciArICcgSmFocmVuJ10sXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gZm9ybWF0W2tleV1bMF0gOiBmb3JtYXRba2V5XVsxXTtcbiAgICB9XG5cbiAgICB2YXIgZGVBdCA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2RlLWF0Jywge1xuICAgICAgICBtb250aHM6ICdKw6RubmVyX0ZlYnJ1YXJfTcOkcnpfQXByaWxfTWFpX0p1bmlfSnVsaV9BdWd1c3RfU2VwdGVtYmVyX09rdG9iZXJfTm92ZW1iZXJfRGV6ZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ0rDpG4uX0ZlYi5fTcOkcnpfQXByLl9NYWlfSnVuaV9KdWxpX0F1Zy5fU2VwLl9Pa3QuX05vdi5fRGV6Licuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6XG4gICAgICAgICAgICAnU29ubnRhZ19Nb250YWdfRGllbnN0YWdfTWl0dHdvY2hfRG9ubmVyc3RhZ19GcmVpdGFnX1NhbXN0YWcnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ1NvLl9Nby5fRGkuX01pLl9Eby5fRnIuX1NhLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdTb19Nb19EaV9NaV9Eb19Gcl9TYScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QuIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdELiBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQuIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW2hldXRlIHVtXSBMVCBbVWhyXScsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICAgICAgbmV4dERheTogJ1ttb3JnZW4gdW1dIExUIFtVaHJdJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbdW1dIExUIFtVaHJdJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbZ2VzdGVybiB1bV0gTFQgW1Vocl0nLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbbGV0enRlbl0gZGRkZCBbdW1dIExUIFtVaHJdJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdpbiAlcycsXG4gICAgICAgICAgICBwYXN0OiAndm9yICVzJyxcbiAgICAgICAgICAgIHM6ICdlaW4gcGFhciBTZWt1bmRlbicsXG4gICAgICAgICAgICBzczogJyVkIFNla3VuZGVuJyxcbiAgICAgICAgICAgIG06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBtbTogJyVkIE1pbnV0ZW4nLFxuICAgICAgICAgICAgaDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGhoOiAnJWQgU3R1bmRlbicsXG4gICAgICAgICAgICBkOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgZGQ6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICB3OiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgd3c6ICclZCBXb2NoZW4nLFxuICAgICAgICAgICAgTTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIE1NOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgeTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHl5OiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsOiAnJWQuJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGRlQXQ7XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/de-at.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/de-ch.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/de-ch.js ***!
  \*********************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : German (Switzerland) [de-ch]\n//! author : sschueller : https://github.com/sschueller\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            m: ['eine Minute', 'einer Minute'],\n            h: ['eine Stunde', 'einer Stunde'],\n            d: ['ein Tag', 'einem Tag'],\n            dd: [number + ' Tage', number + ' Tagen'],\n            w: ['eine Woche', 'einer Woche'],\n            M: ['ein Monat', 'einem Monat'],\n            MM: [number + ' Monate', number + ' Monaten'],\n            y: ['ein Jahr', 'einem Jahr'],\n            yy: [number + ' Jahre', number + ' Jahren'],\n        };\n        return withoutSuffix ? format[key][0] : format[key][1];\n    }\n\n    var deCh = moment.defineLocale('de-ch', {\n        months: 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split(\n            '_'\n        ),\n        monthsShort:\n            'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),\n        monthsParseExact: true,\n        weekdays:\n            'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split(\n                '_'\n            ),\n        weekdaysShort: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n        weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY HH:mm',\n            LLLL: 'dddd, D. MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[heute um] LT [Uhr]',\n            sameElse: 'L',\n            nextDay: '[morgen um] LT [Uhr]',\n            nextWeek: 'dddd [um] LT [Uhr]',\n            lastDay: '[gestern um] LT [Uhr]',\n            lastWeek: '[letzten] dddd [um] LT [Uhr]',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: 'vor %s',\n            s: 'ein paar Sekunden',\n            ss: '%d Sekunden',\n            m: processRelativeTime,\n            mm: '%d Minuten',\n            h: processRelativeTime,\n            hh: '%d Stunden',\n            d: processRelativeTime,\n            dd: processRelativeTime,\n            w: processRelativeTime,\n            ww: '%d Wochen',\n            M: processRelativeTime,\n            MM: processRelativeTime,\n            y: processRelativeTime,\n            yy: processRelativeTime,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return deCh;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9kZS1jaC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZGUtY2guanM/MTZhNSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogR2VybWFuIChTd2l0emVybGFuZCkgW2RlLWNoXVxuLy8hIGF1dGhvciA6IHNzY2h1ZWxsZXIgOiBodHRwczovL2dpdGh1Yi5jb20vc3NjaHVlbGxlclxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgZnVuY3Rpb24gcHJvY2Vzc1JlbGF0aXZlVGltZShudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSwgaXNGdXR1cmUpIHtcbiAgICAgICAgdmFyIGZvcm1hdCA9IHtcbiAgICAgICAgICAgIG06IFsnZWluZSBNaW51dGUnLCAnZWluZXIgTWludXRlJ10sXG4gICAgICAgICAgICBoOiBbJ2VpbmUgU3R1bmRlJywgJ2VpbmVyIFN0dW5kZSddLFxuICAgICAgICAgICAgZDogWydlaW4gVGFnJywgJ2VpbmVtIFRhZyddLFxuICAgICAgICAgICAgZGQ6IFtudW1iZXIgKyAnIFRhZ2UnLCBudW1iZXIgKyAnIFRhZ2VuJ10sXG4gICAgICAgICAgICB3OiBbJ2VpbmUgV29jaGUnLCAnZWluZXIgV29jaGUnXSxcbiAgICAgICAgICAgIE06IFsnZWluIE1vbmF0JywgJ2VpbmVtIE1vbmF0J10sXG4gICAgICAgICAgICBNTTogW251bWJlciArICcgTW9uYXRlJywgbnVtYmVyICsgJyBNb25hdGVuJ10sXG4gICAgICAgICAgICB5OiBbJ2VpbiBKYWhyJywgJ2VpbmVtIEphaHInXSxcbiAgICAgICAgICAgIHl5OiBbbnVtYmVyICsgJyBKYWhyZScsIG51bWJlciArICcgSmFocmVuJ10sXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gZm9ybWF0W2tleV1bMF0gOiBmb3JtYXRba2V5XVsxXTtcbiAgICB9XG5cbiAgICB2YXIgZGVDaCA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2RlLWNoJywge1xuICAgICAgICBtb250aHM6ICdKYW51YXJfRmVicnVhcl9Nw6Ryel9BcHJpbF9NYWlfSnVuaV9KdWxpX0F1Z3VzdF9TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3ZlbWJlcl9EZXplbWJlcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAnSmFuLl9GZWIuX03DpHJ6X0Fwci5fTWFpX0p1bmlfSnVsaV9BdWcuX1NlcC5fT2t0Ll9Ob3YuX0Rlei4nLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOlxuICAgICAgICAgICAgJ1Nvbm50YWdfTW9udGFnX0RpZW5zdGFnX01pdHR3b2NoX0Rvbm5lcnN0YWdfRnJlaXRhZ19TYW1zdGFnJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdTb19Nb19EaV9NaV9Eb19Gcl9TYScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdTb19Nb19EaV9NaV9Eb19Gcl9TYScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QuIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdELiBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQuIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW2hldXRlIHVtXSBMVCBbVWhyXScsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICAgICAgbmV4dERheTogJ1ttb3JnZW4gdW1dIExUIFtVaHJdJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbdW1dIExUIFtVaHJdJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbZ2VzdGVybiB1bV0gTFQgW1Vocl0nLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbbGV0enRlbl0gZGRkZCBbdW1dIExUIFtVaHJdJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdpbiAlcycsXG4gICAgICAgICAgICBwYXN0OiAndm9yICVzJyxcbiAgICAgICAgICAgIHM6ICdlaW4gcGFhciBTZWt1bmRlbicsXG4gICAgICAgICAgICBzczogJyVkIFNla3VuZGVuJyxcbiAgICAgICAgICAgIG06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBtbTogJyVkIE1pbnV0ZW4nLFxuICAgICAgICAgICAgaDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGhoOiAnJWQgU3R1bmRlbicsXG4gICAgICAgICAgICBkOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgZGQ6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICB3OiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgd3c6ICclZCBXb2NoZW4nLFxuICAgICAgICAgICAgTTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIE1NOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgeTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHl5OiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsOiAnJWQuJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGRlQ2g7XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/de-ch.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/de.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/de.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : German [de]\n//! author : lluchs : https://github.com/lluchs\n//! author: Menelion Elensúle: https://github.com/Oire\n//! author : Mikolaj Dadela : https://github.com/mik01aj\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            m: ['eine Minute', 'einer Minute'],\n            h: ['eine Stunde', 'einer Stunde'],\n            d: ['ein Tag', 'einem Tag'],\n            dd: [number + ' Tage', number + ' Tagen'],\n            w: ['eine Woche', 'einer Woche'],\n            M: ['ein Monat', 'einem Monat'],\n            MM: [number + ' Monate', number + ' Monaten'],\n            y: ['ein Jahr', 'einem Jahr'],\n            yy: [number + ' Jahre', number + ' Jahren'],\n        };\n        return withoutSuffix ? format[key][0] : format[key][1];\n    }\n\n    var de = moment.defineLocale('de', {\n        months: 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split(\n            '_'\n        ),\n        monthsShort:\n            'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),\n        monthsParseExact: true,\n        weekdays:\n            'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split(\n                '_'\n            ),\n        weekdaysShort: 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),\n        weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY HH:mm',\n            LLLL: 'dddd, D. MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[heute um] LT [Uhr]',\n            sameElse: 'L',\n            nextDay: '[morgen um] LT [Uhr]',\n            nextWeek: 'dddd [um] LT [Uhr]',\n            lastDay: '[gestern um] LT [Uhr]',\n            lastWeek: '[letzten] dddd [um] LT [Uhr]',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: 'vor %s',\n            s: 'ein paar Sekunden',\n            ss: '%d Sekunden',\n            m: processRelativeTime,\n            mm: '%d Minuten',\n            h: processRelativeTime,\n            hh: '%d Stunden',\n            d: processRelativeTime,\n            dd: processRelativeTime,\n            w: processRelativeTime,\n            ww: '%d Wochen',\n            M: processRelativeTime,\n            MM: processRelativeTime,\n            y: processRelativeTime,\n            yy: processRelativeTime,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return de;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9kZS5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxrREFBVztBQUNyRSxHQUFHLENBQ3NCO0FBQ3pCLENBQUMsNEJBQTRCOztBQUU3Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2RlLmpzPzViOWEiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEdlcm1hbiBbZGVdXG4vLyEgYXV0aG9yIDogbGx1Y2hzIDogaHR0cHM6Ly9naXRodWIuY29tL2xsdWNoc1xuLy8hIGF1dGhvcjogTWVuZWxpb24gRWxlbnPDumxlOiBodHRwczovL2dpdGh1Yi5jb20vT2lyZVxuLy8hIGF1dGhvciA6IE1pa29sYWogRGFkZWxhIDogaHR0cHM6Ly9naXRodWIuY29tL21pazAxYWpcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIGZ1bmN0aW9uIHByb2Nlc3NSZWxhdGl2ZVRpbWUobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXksIGlzRnV0dXJlKSB7XG4gICAgICAgIHZhciBmb3JtYXQgPSB7XG4gICAgICAgICAgICBtOiBbJ2VpbmUgTWludXRlJywgJ2VpbmVyIE1pbnV0ZSddLFxuICAgICAgICAgICAgaDogWydlaW5lIFN0dW5kZScsICdlaW5lciBTdHVuZGUnXSxcbiAgICAgICAgICAgIGQ6IFsnZWluIFRhZycsICdlaW5lbSBUYWcnXSxcbiAgICAgICAgICAgIGRkOiBbbnVtYmVyICsgJyBUYWdlJywgbnVtYmVyICsgJyBUYWdlbiddLFxuICAgICAgICAgICAgdzogWydlaW5lIFdvY2hlJywgJ2VpbmVyIFdvY2hlJ10sXG4gICAgICAgICAgICBNOiBbJ2VpbiBNb25hdCcsICdlaW5lbSBNb25hdCddLFxuICAgICAgICAgICAgTU06IFtudW1iZXIgKyAnIE1vbmF0ZScsIG51bWJlciArICcgTW9uYXRlbiddLFxuICAgICAgICAgICAgeTogWydlaW4gSmFocicsICdlaW5lbSBKYWhyJ10sXG4gICAgICAgICAgICB5eTogW251bWJlciArICcgSmFocmUnLCBudW1iZXIgKyAnIEphaHJlbiddLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/IGZvcm1hdFtrZXldWzBdIDogZm9ybWF0W2tleV1bMV07XG4gICAgfVxuXG4gICAgdmFyIGRlID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZGUnLCB7XG4gICAgICAgIG1vbnRoczogJ0phbnVhcl9GZWJydWFyX03DpHJ6X0FwcmlsX01haV9KdW5pX0p1bGlfQXVndXN0X1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0RlemVtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICdKYW4uX0ZlYi5fTcOkcnpfQXByLl9NYWlfSnVuaV9KdWxpX0F1Zy5fU2VwLl9Pa3QuX05vdi5fRGV6Licuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6XG4gICAgICAgICAgICAnU29ubnRhZ19Nb250YWdfRGllbnN0YWdfTWl0dHdvY2hfRG9ubmVyc3RhZ19GcmVpdGFnX1NhbXN0YWcnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ1NvLl9Nby5fRGkuX01pLl9Eby5fRnIuX1NhLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdTb19Nb19EaV9NaV9Eb19Gcl9TYScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QuIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdELiBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQuIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW2hldXRlIHVtXSBMVCBbVWhyXScsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICAgICAgbmV4dERheTogJ1ttb3JnZW4gdW1dIExUIFtVaHJdJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbdW1dIExUIFtVaHJdJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbZ2VzdGVybiB1bV0gTFQgW1Vocl0nLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbbGV0enRlbl0gZGRkZCBbdW1dIExUIFtVaHJdJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdpbiAlcycsXG4gICAgICAgICAgICBwYXN0OiAndm9yICVzJyxcbiAgICAgICAgICAgIHM6ICdlaW4gcGFhciBTZWt1bmRlbicsXG4gICAgICAgICAgICBzczogJyVkIFNla3VuZGVuJyxcbiAgICAgICAgICAgIG06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBtbTogJyVkIE1pbnV0ZW4nLFxuICAgICAgICAgICAgaDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGhoOiAnJWQgU3R1bmRlbicsXG4gICAgICAgICAgICBkOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgZGQ6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICB3OiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgd3c6ICclZCBXb2NoZW4nLFxuICAgICAgICAgICAgTTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIE1NOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgeTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHl5OiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsOiAnJWQuJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGRlO1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/de.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/dv.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/dv.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Maldivian [dv]\n//! author : Jawish Hameed : https://github.com/jawish\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var months = [\n            'ޖެނުއަރީ',\n            'ފެބްރުއަރީ',\n            'މާރިޗު',\n            'އޭޕްރީލު',\n            'މޭ',\n            'ޖޫން',\n            'ޖުލައި',\n            'އޯގަސްޓު',\n            'ސެޕްޓެމްބަރު',\n            'އޮކްޓޯބަރު',\n            'ނޮވެމްބަރު',\n            'ޑިސެމްބަރު',\n        ],\n        weekdays = [\n            'އާދިއްތަ',\n            'ހޯމަ',\n            'އަންގާރަ',\n            'ބުދަ',\n            'ބުރާސްފަތި',\n            'ހުކުރު',\n            'ހޮނިހިރު',\n        ];\n\n    var dv = moment.defineLocale('dv', {\n        months: months,\n        monthsShort: months,\n        weekdays: weekdays,\n        weekdaysShort: weekdays,\n        weekdaysMin: 'އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'D/M/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /މކ|މފ/,\n        isPM: function (input) {\n            return 'މފ' === input;\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'މކ';\n            } else {\n                return 'މފ';\n            }\n        },\n        calendar: {\n            sameDay: '[މިއަދު] LT',\n            nextDay: '[މާދަމާ] LT',\n            nextWeek: 'dddd LT',\n            lastDay: '[އިއްޔެ] LT',\n            lastWeek: '[ފާއިތުވި] dddd LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'ތެރޭގައި %s',\n            past: 'ކުރިން %s',\n            s: 'ސިކުންތުކޮޅެއް',\n            ss: 'd% ސިކުންތު',\n            m: 'މިނިޓެއް',\n            mm: 'މިނިޓު %d',\n            h: 'ގަޑިއިރެއް',\n            hh: 'ގަޑިއިރު %d',\n            d: 'ދުވަހެއް',\n            dd: 'ދުވަސް %d',\n            M: 'މަހެއް',\n            MM: 'މަސް %d',\n            y: 'އަހަރެއް',\n            yy: 'އަހަރު %d',\n        },\n        preparse: function (string) {\n            return string.replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/,/g, '،');\n        },\n        week: {\n            dow: 7, // Sunday is the first day of the week.\n            doy: 12, // The week that contains Jan 12th is the first week of the year.\n        },\n    });\n\n    return dv;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9kdi5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2R2LmpzPzMwMDQiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IE1hbGRpdmlhbiBbZHZdXG4vLyEgYXV0aG9yIDogSmF3aXNoIEhhbWVlZCA6IGh0dHBzOi8vZ2l0aHViLmNvbS9qYXdpc2hcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBtb250aHMgPSBbXG4gICAgICAgICAgICAn3pberN6C3qreh96m3oPeqScsXG4gICAgICAgICAgICAn3orerN6E3rDeg96q3ofept6D3qknLFxuICAgICAgICAgICAgJ96J3qfeg96o3pfeqicsXG4gICAgICAgICAgICAn3oferd6V3rDeg96p3o3eqicsXG4gICAgICAgICAgICAn3onerScsXG4gICAgICAgICAgICAn3pbeq96C3rAnLFxuICAgICAgICAgICAgJ96W3qrejd6m3ofeqCcsXG4gICAgICAgICAgICAn3ofer96O3qbekN6w3pPeqicsXG4gICAgICAgICAgICAn3pDerN6V3rDek96s3onesN6E3qbeg96qJyxcbiAgICAgICAgICAgICfeh96u3obesN6T3q/ehN6m3oPeqicsXG4gICAgICAgICAgICAn3oLert6I3qzeid6w3oTept6D3qonLFxuICAgICAgICAgICAgJ96R3qjekN6s3onesN6E3qbeg96qJyxcbiAgICAgICAgXSxcbiAgICAgICAgd2Vla2RheXMgPSBbXG4gICAgICAgICAgICAn3ofep96L3qjeh96w3ozepicsXG4gICAgICAgICAgICAn3oDer96J3qYnLFxuICAgICAgICAgICAgJ96H3qbegt6w3o7ep96D3qYnLFxuICAgICAgICAgICAgJ96E3qrei96mJyxcbiAgICAgICAgICAgICfehN6q3oPep96Q3rDeit6m3ozeqCcsXG4gICAgICAgICAgICAn3oDeqt6G3qreg96qJyxcbiAgICAgICAgICAgICfegN6u3oLeqN6A3qjeg96qJyxcbiAgICAgICAgXTtcblxuICAgIHZhciBkdiA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2R2Jywge1xuICAgICAgICBtb250aHM6IG1vbnRocyxcbiAgICAgICAgbW9udGhzU2hvcnQ6IG1vbnRocyxcbiAgICAgICAgd2Vla2RheXM6IHdlZWtkYXlzLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiB3ZWVrZGF5cyxcbiAgICAgICAgd2Vla2RheXNNaW46ICfeh96n3oveqF/egN6v3onepl/eh96m3oLesF/ehN6q3ovepl/ehN6q3oPep1/egN6q3obeql/egN6u3oLeqCcuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0QvTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv3onehnzeid6KLyxcbiAgICAgICAgaXNQTTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gJ96J3oonID09PSBpbnB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ96J3oYnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ96J3oonO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1veid6o3ofept6L3qpdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb3onep96L3qbeid6nXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1veh96o3ofesN6U3qxdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW96K3qfeh96o3ozeqt6I3qhdIGRkZGQgTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICfejN6s3oPerd6O3qbeh96oICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICfeht6q3oPeqN6C3rAgJXMnLFxuICAgICAgICAgICAgczogJ96Q3qjeht6q3oLesN6M3qreht6u3oXerN6H3rAnLFxuICAgICAgICAgICAgc3M6ICdkJSDekN6o3obeqt6C3rDejN6qJyxcbiAgICAgICAgICAgIG06ICfeid6o3oLeqN6T3qzeh96wJyxcbiAgICAgICAgICAgIG1tOiAn3oneqN6C3qjek96qICVkJyxcbiAgICAgICAgICAgIGg6ICfejt6m3pHeqN6H3qjeg96s3ofesCcsXG4gICAgICAgICAgICBoaDogJ96O3qbekd6o3ofeqN6D3qogJWQnLFxuICAgICAgICAgICAgZDogJ96L3qreiN6m3oDerN6H3rAnLFxuICAgICAgICAgICAgZGQ6ICfei96q3ojept6Q3rAgJWQnLFxuICAgICAgICAgICAgTTogJ96J3qbegN6s3ofesCcsXG4gICAgICAgICAgICBNTTogJ96J3qbekN6wICVkJyxcbiAgICAgICAgICAgIHk6ICfeh96m3oDept6D3qzeh96wJyxcbiAgICAgICAgICAgIHl5OiAn3ofept6A3qbeg96qICVkJyxcbiAgICAgICAgfSxcbiAgICAgICAgcHJlcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgv2IwvZywgJywnKTtcbiAgICAgICAgfSxcbiAgICAgICAgcG9zdGZvcm1hdDogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC8sL2csICfYjCcpO1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDcsIC8vIFN1bmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiAxMiwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gMTJ0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBkdjtcblxufSkpKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/dv.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/el.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/el.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Greek [el]\n//! author : Aggelos Karalias : https://github.com/mehiel\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function isFunction(input) {\n        return (\n            (typeof Function !== 'undefined' && input instanceof Function) ||\n            Object.prototype.toString.call(input) === '[object Function]'\n        );\n    }\n\n    var el = moment.defineLocale('el', {\n        monthsNominativeEl:\n            'Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος'.split(\n                '_'\n            ),\n        monthsGenitiveEl:\n            'Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου'.split(\n                '_'\n            ),\n        months: function (momentToFormat, format) {\n            if (!momentToFormat) {\n                return this._monthsNominativeEl;\n            } else if (\n                typeof format === 'string' &&\n                /D/.test(format.substring(0, format.indexOf('MMMM')))\n            ) {\n                // if there is a day number before 'MMMM'\n                return this._monthsGenitiveEl[momentToFormat.month()];\n            } else {\n                return this._monthsNominativeEl[momentToFormat.month()];\n            }\n        },\n        monthsShort: 'Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ'.split('_'),\n        weekdays: 'Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο'.split(\n            '_'\n        ),\n        weekdaysShort: 'Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ'.split('_'),\n        weekdaysMin: 'Κυ_Δε_Τρ_Τε_Πε_Πα_Σα'.split('_'),\n        meridiem: function (hours, minutes, isLower) {\n            if (hours > 11) {\n                return isLower ? 'μμ' : 'ΜΜ';\n            } else {\n                return isLower ? 'πμ' : 'ΠΜ';\n            }\n        },\n        isPM: function (input) {\n            return (input + '').toLowerCase()[0] === 'μ';\n        },\n        meridiemParse: /[ΠΜ]\\.?Μ?\\.?/i,\n        longDateFormat: {\n            LT: 'h:mm A',\n            LTS: 'h:mm:ss A',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY h:mm A',\n            LLLL: 'dddd, D MMMM YYYY h:mm A',\n        },\n        calendarEl: {\n            sameDay: '[Σήμερα {}] LT',\n            nextDay: '[Αύριο {}] LT',\n            nextWeek: 'dddd [{}] LT',\n            lastDay: '[Χθες {}] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 6:\n                        return '[το προηγούμενο] dddd [{}] LT';\n                    default:\n                        return '[την προηγούμενη] dddd [{}] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        calendar: function (key, mom) {\n            var output = this._calendarEl[key],\n                hours = mom && mom.hours();\n            if (isFunction(output)) {\n                output = output.apply(mom);\n            }\n            return output.replace('{}', hours % 12 === 1 ? 'στη' : 'στις');\n        },\n        relativeTime: {\n            future: 'σε %s',\n            past: '%s πριν',\n            s: 'λίγα δευτερόλεπτα',\n            ss: '%d δευτερόλεπτα',\n            m: 'ένα λεπτό',\n            mm: '%d λεπτά',\n            h: 'μία ώρα',\n            hh: '%d ώρες',\n            d: 'μία μέρα',\n            dd: '%d μέρες',\n            M: 'ένας μήνας',\n            MM: '%d μήνες',\n            y: 'ένας χρόνος',\n            yy: '%d χρόνια',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}η/,\n        ordinal: '%dη',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4st is the first week of the year.\n        },\n    });\n\n    return el;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLGdDQUFnQztBQUNoQywrQkFBK0I7QUFDL0IsK0JBQStCO0FBQy9CLDhCQUE4QjtBQUM5QjtBQUNBO0FBQ0E7QUFDQSx5REFBeUQ7QUFDekQ7QUFDQSwwREFBMEQ7QUFDMUQ7QUFDQSxhQUFhO0FBQ2I7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDO0FBQ3JDLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZWwuanM/ZmIyZiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogR3JlZWsgW2VsXVxuLy8hIGF1dGhvciA6IEFnZ2Vsb3MgS2FyYWxpYXMgOiBodHRwczovL2dpdGh1Yi5jb20vbWVoaWVsXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICBmdW5jdGlvbiBpc0Z1bmN0aW9uKGlucHV0KSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAodHlwZW9mIEZ1bmN0aW9uICE9PSAndW5kZWZpbmVkJyAmJiBpbnB1dCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB8fFxuICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGlucHV0KSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIHZhciBlbCA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2VsJywge1xuICAgICAgICBtb250aHNOb21pbmF0aXZlRWw6XG4gICAgICAgICAgICAnzpnOsc69zr/Phc6sz4HOuc6/z4JfzqbOtc6yz4HOv8+FzqzPgc65zr/Pgl/OnM6sz4HPhM65zr/Pgl/Okc+Az4HOr867zrnOv8+CX86czqzOuc6/z4JfzpnOv8+Nzr3Ouc6/z4JfzpnOv8+NzrvOuc6/z4JfzpHPjc6zzr/Phc+Dz4TOv8+CX86jzrXPgM+Ezq3OvM6yz4HOuc6/z4Jfzp/Ous+Ez47Oss+BzrnOv8+CX86dzr/Orc68zrLPgc65zr/Pgl/OlM61zrrOrc68zrLPgc65zr/Pgicuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICBtb250aHNHZW5pdGl2ZUVsOlxuICAgICAgICAgICAgJ86ZzrHOvc6/z4XOsc+Bzq/Ov8+FX86mzrXOss+Bzr/Phc6xz4HOr86/z4VfzpzOsc+Bz4TOr86/z4VfzpHPgM+BzrnOu86vzr/PhV/OnM6xzpDOv8+FX86Zzr/Phc69zq/Ov8+FX86Zzr/Phc67zq/Ov8+FX86Rz4XOs86/z43Pg8+Ezr/PhV/Oo861z4DPhM61zrzOss+Bzq/Ov8+FX86fzrrPhM+JzrLPgc6vzr/PhV/Onc6/zrXOvM6yz4HOr86/z4VfzpTOtc66zrXOvM6yz4HOr86/z4UnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgbW9udGhzOiBmdW5jdGlvbiAobW9tZW50VG9Gb3JtYXQsIGZvcm1hdCkge1xuICAgICAgICAgICAgaWYgKCFtb21lbnRUb0Zvcm1hdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNOb21pbmF0aXZlRWw7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIHR5cGVvZiBmb3JtYXQgPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICAgICAgL0QvLnRlc3QoZm9ybWF0LnN1YnN0cmluZygwLCBmb3JtYXQuaW5kZXhPZignTU1NTScpKSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIC8vIGlmIHRoZXJlIGlzIGEgZGF5IG51bWJlciBiZWZvcmUgJ01NTU0nXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoc0dlbml0aXZlRWxbbW9tZW50VG9Gb3JtYXQubW9udGgoKV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNOb21pbmF0aXZlRWxbbW9tZW50VG9Gb3JtYXQubW9udGgoKV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnzpnOsc69X86mzrXOsl/OnM6xz4FfzpHPgM+BX86czrHPil/Omc6/z4XOvV/Omc6/z4XOu1/Okc+FzrNfzqPOtc+AX86fzrrPhF/Onc6/zrVfzpTOtc66Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ86az4XPgc65zrHOus6uX86UzrXPhc+Ezq3Pgc6xX86kz4HOr8+EzrdfzqTOtc+EzqzPgc+EzrdfzqDOrc68z4DPhM63X86gzrHPgc6xz4POus61z4XOrl/Oo86szrLOss6xz4TOvycuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ86az4XPgV/OlM61z4VfzqTPgc65X86kzrXPhF/OoM61zrxfzqDOsc+BX86jzrHOsicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfOms+FX86UzrVfzqTPgV/OpM61X86gzrVfzqDOsV/Oo86xJy5zcGxpdCgnXycpLFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXJzLCBtaW51dGVzLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91cnMgPiAxMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpc0xvd2VyID8gJ868zrwnIDogJ86czpwnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICfPgM68JyA6ICfOoM6cJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgaXNQTTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gKGlucHV0ICsgJycpLnRvTG93ZXJDYXNlKClbMF0gPT09ICfOvCc7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC9bzqDOnF1cXC4/zpw/XFwuPy9pLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdoOm1tIEEnLFxuICAgICAgICAgICAgTFRTOiAnaDptbTpzcyBBJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgaDptbSBBJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBoOm1tIEEnLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhckVsOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW86jzq7OvM61z4HOsSB7fV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vOkc+Nz4HOuc6/IHt9XSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW3t9XSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW86nzrjOtc+CIHt9XSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kYXkoKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1vPhM6/IM+Az4HOv863zrPOv8+NzrzOtc69zr9dIGRkZGQgW3t9XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1vPhM63zr0gz4DPgc6/zrfOs86/z43OvM61zr3Ot10gZGRkZCBbe31dIExUJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IGZ1bmN0aW9uIChrZXksIG1vbSkge1xuICAgICAgICAgICAgdmFyIG91dHB1dCA9IHRoaXMuX2NhbGVuZGFyRWxba2V5XSxcbiAgICAgICAgICAgICAgICBob3VycyA9IG1vbSAmJiBtb20uaG91cnMoKTtcbiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKG91dHB1dCkpIHtcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSBvdXRwdXQuYXBwbHkobW9tKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBvdXRwdXQucmVwbGFjZSgne30nLCBob3VycyAlIDEyID09PSAxID8gJ8+Dz4TOtycgOiAnz4PPhM65z4InKTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICfPg861ICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyDPgM+BzrnOvScsXG4gICAgICAgICAgICBzOiAnzrvOr86zzrEgzrTOtc+Fz4TOtc+Bz4zOu861z4DPhM6xJyxcbiAgICAgICAgICAgIHNzOiAnJWQgzrTOtc+Fz4TOtc+Bz4zOu861z4DPhM6xJyxcbiAgICAgICAgICAgIG06ICfOrc69zrEgzrvOtc+Az4TPjCcsXG4gICAgICAgICAgICBtbTogJyVkIM67zrXPgM+EzqwnLFxuICAgICAgICAgICAgaDogJ868zq/OsSDPjs+BzrEnLFxuICAgICAgICAgICAgaGg6ICclZCDPjs+BzrXPgicsXG4gICAgICAgICAgICBkOiAnzrzOr86xIM68zq3Pgc6xJyxcbiAgICAgICAgICAgIGRkOiAnJWQgzrzOrc+BzrXPgicsXG4gICAgICAgICAgICBNOiAnzq3Ovc6xz4IgzrzOrs69zrHPgicsXG4gICAgICAgICAgICBNTTogJyVkIM68zq7Ovc61z4InLFxuICAgICAgICAgICAgeTogJ86tzr3Osc+CIM+Hz4HPjM69zr/PgicsXG4gICAgICAgICAgICB5eTogJyVkIM+Hz4HPjM69zrnOsScsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfc63LyxcbiAgICAgICAgb3JkaW5hbDogJyVkzrcnLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0c3QgaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZWw7XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/el.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/en-au.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/en-au.js ***!
  \*********************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : English (Australia) [en-au]\n//! author : Jared Morse : https://github.com/jarcoal\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var enAu = moment.defineLocale('en-au', {\n        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n            '_'\n        ),\n        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat: {\n            LT: 'h:mm A',\n            LTS: 'h:mm:ss A',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY h:mm A',\n            LLLL: 'dddd, D MMMM YYYY h:mm A',\n        },\n        calendar: {\n            sameDay: '[Today at] LT',\n            nextDay: '[Tomorrow at] LT',\n            nextWeek: 'dddd [at] LT',\n            lastDay: '[Yesterday at] LT',\n            lastWeek: '[Last] dddd [at] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: '%s ago',\n            s: 'a few seconds',\n            ss: '%d seconds',\n            m: 'a minute',\n            mm: '%d minutes',\n            h: 'an hour',\n            hh: '%d hours',\n            d: 'a day',\n            dd: '%d days',\n            M: 'a month',\n            MM: '%d months',\n            y: 'a year',\n            yy: '%d years',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                        ? 'st'\n                        : b === 2\n                        ? 'nd'\n                        : b === 3\n                        ? 'rd'\n                        : 'th';\n            return number + output;\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return enAu;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1hdS5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1hdS5qcz9mMmY4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBFbmdsaXNoIChBdXN0cmFsaWEpIFtlbi1hdV1cbi8vISBhdXRob3IgOiBKYXJlZCBNb3JzZSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9qYXJjb2FsXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgZW5BdSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2VuLWF1Jywge1xuICAgICAgICBtb250aHM6ICdKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ0phbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ1N1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Jy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ1N1X01vX1R1X1dlX1RoX0ZyX1NhJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdoOm1tIEEnLFxuICAgICAgICAgICAgTFRTOiAnaDptbTpzcyBBJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgaDptbSBBJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBoOm1tIEEnLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tUb2RheSBhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tUb21vcnJvdyBhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFthdF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tZZXN0ZXJkYXkgYXRdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW0xhc3RdIGRkZGQgW2F0XSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ2luICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyBhZ28nLFxuICAgICAgICAgICAgczogJ2EgZmV3IHNlY29uZHMnLFxuICAgICAgICAgICAgc3M6ICclZCBzZWNvbmRzJyxcbiAgICAgICAgICAgIG06ICdhIG1pbnV0ZScsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0ZXMnLFxuICAgICAgICAgICAgaDogJ2FuIGhvdXInLFxuICAgICAgICAgICAgaGg6ICclZCBob3VycycsXG4gICAgICAgICAgICBkOiAnYSBkYXknLFxuICAgICAgICAgICAgZGQ6ICclZCBkYXlzJyxcbiAgICAgICAgICAgIE06ICdhIG1vbnRoJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbW9udGhzJyxcbiAgICAgICAgICAgIHk6ICdhIHllYXInLFxuICAgICAgICAgICAgeXk6ICclZCB5ZWFycycsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShzdHxuZHxyZHx0aCkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICB2YXIgYiA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgICAgIG91dHB1dCA9XG4gICAgICAgICAgICAgICAgICAgIH5+KChudW1iZXIgJSAxMDApIC8gMTApID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICd0aCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAnc3QnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ25kJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAzXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICdyZCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJ3RoJztcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMCwgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBlbkF1O1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/en-au.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/en-ca.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/en-ca.js ***!
  \*********************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : English (Canada) [en-ca]\n//! author : Jonathan Abourbih : https://github.com/jonbca\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var enCa = moment.defineLocale('en-ca', {\n        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n            '_'\n        ),\n        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat: {\n            LT: 'h:mm A',\n            LTS: 'h:mm:ss A',\n            L: 'YYYY-MM-DD',\n            LL: 'MMMM D, YYYY',\n            LLL: 'MMMM D, YYYY h:mm A',\n            LLLL: 'dddd, MMMM D, YYYY h:mm A',\n        },\n        calendar: {\n            sameDay: '[Today at] LT',\n            nextDay: '[Tomorrow at] LT',\n            nextWeek: 'dddd [at] LT',\n            lastDay: '[Yesterday at] LT',\n            lastWeek: '[Last] dddd [at] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: '%s ago',\n            s: 'a few seconds',\n            ss: '%d seconds',\n            m: 'a minute',\n            mm: '%d minutes',\n            h: 'an hour',\n            hh: '%d hours',\n            d: 'a day',\n            dd: '%d days',\n            M: 'a month',\n            MM: '%d months',\n            y: 'a year',\n            yy: '%d years',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                        ? 'st'\n                        : b === 2\n                        ? 'nd'\n                        : b === 3\n                        ? 'rd'\n                        : 'th';\n            return number + output;\n        },\n    });\n\n    return enCa;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1jYS5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2VuLWNhLmpzP2RiZTUiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEVuZ2xpc2ggKENhbmFkYSkgW2VuLWNhXVxuLy8hIGF1dGhvciA6IEpvbmF0aGFuIEFib3VyYmloIDogaHR0cHM6Ly9naXRodWIuY29tL2pvbmJjYVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIGVuQ2EgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdlbi1jYScsIHtcbiAgICAgICAgbW9udGhzOiAnSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICdTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ1N1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdTdV9Nb19UdV9XZV9UaF9Gcl9TYScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnaDptbSBBJyxcbiAgICAgICAgICAgIExUUzogJ2g6bW06c3MgQScsXG4gICAgICAgICAgICBMOiAnWVlZWS1NTS1ERCcsXG4gICAgICAgICAgICBMTDogJ01NTU0gRCwgWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdNTU1NIEQsIFlZWVkgaDptbSBBJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBNTU1NIEQsIFlZWVkgaDptbSBBJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbVG9kYXkgYXRdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbVG9tb3Jyb3cgYXRdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbYXRdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbWWVzdGVyZGF5IGF0XSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1tMYXN0XSBkZGRkIFthdF0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdpbiAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMgYWdvJyxcbiAgICAgICAgICAgIHM6ICdhIGZldyBzZWNvbmRzJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2Vjb25kcycsXG4gICAgICAgICAgICBtOiAnYSBtaW51dGUnLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dGVzJyxcbiAgICAgICAgICAgIGg6ICdhbiBob3VyJyxcbiAgICAgICAgICAgIGhoOiAnJWQgaG91cnMnLFxuICAgICAgICAgICAgZDogJ2EgZGF5JyxcbiAgICAgICAgICAgIGRkOiAnJWQgZGF5cycsXG4gICAgICAgICAgICBNOiAnYSBtb250aCcsXG4gICAgICAgICAgICBNTTogJyVkIG1vbnRocycsXG4gICAgICAgICAgICB5OiAnYSB5ZWFyJyxcbiAgICAgICAgICAgIHl5OiAnJWQgeWVhcnMnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0oc3R8bmR8cmR8dGgpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgdmFyIGIgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgICAgICBvdXRwdXQgPVxuICAgICAgICAgICAgICAgICAgICB+figobnVtYmVyICUgMTAwKSAvIDEwKSA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAndGgnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ3N0J1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAyXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICduZCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gM1xuICAgICAgICAgICAgICAgICAgICAgICAgPyAncmQnXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICd0aCc7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgb3V0cHV0O1xuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGVuQ2E7XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/en-ca.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/en-gb.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/en-gb.js ***!
  \*********************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : English (United Kingdom) [en-gb]\n//! author : Chris Gedrim : https://github.com/chrisgedrim\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var enGb = moment.defineLocale('en-gb', {\n        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n            '_'\n        ),\n        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Today at] LT',\n            nextDay: '[Tomorrow at] LT',\n            nextWeek: 'dddd [at] LT',\n            lastDay: '[Yesterday at] LT',\n            lastWeek: '[Last] dddd [at] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: '%s ago',\n            s: 'a few seconds',\n            ss: '%d seconds',\n            m: 'a minute',\n            mm: '%d minutes',\n            h: 'an hour',\n            hh: '%d hours',\n            d: 'a day',\n            dd: '%d days',\n            M: 'a month',\n            MM: '%d months',\n            y: 'a year',\n            yy: '%d years',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                        ? 'st'\n                        : b === 2\n                        ? 'nd'\n                        : b === 3\n                        ? 'rd'\n                        : 'th';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return enGb;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1nYi5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1nYi5qcz83NDcwIl0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBFbmdsaXNoIChVbml0ZWQgS2luZ2RvbSkgW2VuLWdiXVxuLy8hIGF1dGhvciA6IENocmlzIEdlZHJpbSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc2dlZHJpbVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIGVuR2IgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdlbi1nYicsIHtcbiAgICAgICAgbW9udGhzOiAnSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICdTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ1N1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdTdV9Nb19UdV9XZV9UaF9Gcl9TYScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tUb2RheSBhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tUb21vcnJvdyBhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFthdF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tZZXN0ZXJkYXkgYXRdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW0xhc3RdIGRkZGQgW2F0XSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ2luICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyBhZ28nLFxuICAgICAgICAgICAgczogJ2EgZmV3IHNlY29uZHMnLFxuICAgICAgICAgICAgc3M6ICclZCBzZWNvbmRzJyxcbiAgICAgICAgICAgIG06ICdhIG1pbnV0ZScsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0ZXMnLFxuICAgICAgICAgICAgaDogJ2FuIGhvdXInLFxuICAgICAgICAgICAgaGg6ICclZCBob3VycycsXG4gICAgICAgICAgICBkOiAnYSBkYXknLFxuICAgICAgICAgICAgZGQ6ICclZCBkYXlzJyxcbiAgICAgICAgICAgIE06ICdhIG1vbnRoJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbW9udGhzJyxcbiAgICAgICAgICAgIHk6ICdhIHllYXInLFxuICAgICAgICAgICAgeXk6ICclZCB5ZWFycycsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShzdHxuZHxyZHx0aCkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICB2YXIgYiA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgICAgIG91dHB1dCA9XG4gICAgICAgICAgICAgICAgICAgIH5+KChudW1iZXIgJSAxMDApIC8gMTApID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICd0aCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAnc3QnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ25kJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAzXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICdyZCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJ3RoJztcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBlbkdiO1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/en-gb.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/en-ie.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/en-ie.js ***!
  \*********************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : English (Ireland) [en-ie]\n//! author : Chris Cartlidge : https://github.com/chriscartlidge\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var enIe = moment.defineLocale('en-ie', {\n        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n            '_'\n        ),\n        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Today at] LT',\n            nextDay: '[Tomorrow at] LT',\n            nextWeek: 'dddd [at] LT',\n            lastDay: '[Yesterday at] LT',\n            lastWeek: '[Last] dddd [at] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: '%s ago',\n            s: 'a few seconds',\n            ss: '%d seconds',\n            m: 'a minute',\n            mm: '%d minutes',\n            h: 'an hour',\n            hh: '%d hours',\n            d: 'a day',\n            dd: '%d days',\n            M: 'a month',\n            MM: '%d months',\n            y: 'a year',\n            yy: '%d years',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                        ? 'st'\n                        : b === 2\n                        ? 'nd'\n                        : b === 3\n                        ? 'rd'\n                        : 'th';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return enIe;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1pZS5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1pZS5qcz8xMWE4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBFbmdsaXNoIChJcmVsYW5kKSBbZW4taWVdXG4vLyEgYXV0aG9yIDogQ2hyaXMgQ2FydGxpZGdlIDogaHR0cHM6Ly9naXRodWIuY29tL2NocmlzY2FydGxpZGdlXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgZW5JZSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2VuLWllJywge1xuICAgICAgICBtb250aHM6ICdKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ0phbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ1N1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Jy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ1N1X01vX1R1X1dlX1RoX0ZyX1NhJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbVG9kYXkgYXRdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbVG9tb3Jyb3cgYXRdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbYXRdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbWWVzdGVyZGF5IGF0XSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1tMYXN0XSBkZGRkIFthdF0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdpbiAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMgYWdvJyxcbiAgICAgICAgICAgIHM6ICdhIGZldyBzZWNvbmRzJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2Vjb25kcycsXG4gICAgICAgICAgICBtOiAnYSBtaW51dGUnLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dGVzJyxcbiAgICAgICAgICAgIGg6ICdhbiBob3VyJyxcbiAgICAgICAgICAgIGhoOiAnJWQgaG91cnMnLFxuICAgICAgICAgICAgZDogJ2EgZGF5JyxcbiAgICAgICAgICAgIGRkOiAnJWQgZGF5cycsXG4gICAgICAgICAgICBNOiAnYSBtb250aCcsXG4gICAgICAgICAgICBNTTogJyVkIG1vbnRocycsXG4gICAgICAgICAgICB5OiAnYSB5ZWFyJyxcbiAgICAgICAgICAgIHl5OiAnJWQgeWVhcnMnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0oc3R8bmR8cmR8dGgpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgdmFyIGIgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgICAgICBvdXRwdXQgPVxuICAgICAgICAgICAgICAgICAgICB+figobnVtYmVyICUgMTAwKSAvIDEwKSA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAndGgnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ3N0J1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAyXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICduZCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gM1xuICAgICAgICAgICAgICAgICAgICAgICAgPyAncmQnXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICd0aCc7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgb3V0cHV0O1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZW5JZTtcblxufSkpKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/en-ie.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/en-il.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/en-il.js ***!
  \*********************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : English (Israel) [en-il]\n//! author : Chris Gedrim : https://github.com/chrisgedrim\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var enIl = moment.defineLocale('en-il', {\n        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n            '_'\n        ),\n        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Today at] LT',\n            nextDay: '[Tomorrow at] LT',\n            nextWeek: 'dddd [at] LT',\n            lastDay: '[Yesterday at] LT',\n            lastWeek: '[Last] dddd [at] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: '%s ago',\n            s: 'a few seconds',\n            ss: '%d seconds',\n            m: 'a minute',\n            mm: '%d minutes',\n            h: 'an hour',\n            hh: '%d hours',\n            d: 'a day',\n            dd: '%d days',\n            M: 'a month',\n            MM: '%d months',\n            y: 'a year',\n            yy: '%d years',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                        ? 'st'\n                        : b === 2\n                        ? 'nd'\n                        : b === 3\n                        ? 'rd'\n                        : 'th';\n            return number + output;\n        },\n    });\n\n    return enIl;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1pbC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2VuLWlsLmpzPzc2YzciXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEVuZ2xpc2ggKElzcmFlbCkgW2VuLWlsXVxuLy8hIGF1dGhvciA6IENocmlzIEdlZHJpbSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc2dlZHJpbVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIGVuSWwgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdlbi1pbCcsIHtcbiAgICAgICAgbW9udGhzOiAnSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICdTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ1N1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdTdV9Nb19UdV9XZV9UaF9Gcl9TYScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tUb2RheSBhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tUb21vcnJvdyBhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFthdF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tZZXN0ZXJkYXkgYXRdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW0xhc3RdIGRkZGQgW2F0XSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ2luICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyBhZ28nLFxuICAgICAgICAgICAgczogJ2EgZmV3IHNlY29uZHMnLFxuICAgICAgICAgICAgc3M6ICclZCBzZWNvbmRzJyxcbiAgICAgICAgICAgIG06ICdhIG1pbnV0ZScsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0ZXMnLFxuICAgICAgICAgICAgaDogJ2FuIGhvdXInLFxuICAgICAgICAgICAgaGg6ICclZCBob3VycycsXG4gICAgICAgICAgICBkOiAnYSBkYXknLFxuICAgICAgICAgICAgZGQ6ICclZCBkYXlzJyxcbiAgICAgICAgICAgIE06ICdhIG1vbnRoJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbW9udGhzJyxcbiAgICAgICAgICAgIHk6ICdhIHllYXInLFxuICAgICAgICAgICAgeXk6ICclZCB5ZWFycycsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShzdHxuZHxyZHx0aCkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICB2YXIgYiA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgICAgIG91dHB1dCA9XG4gICAgICAgICAgICAgICAgICAgIH5+KChudW1iZXIgJSAxMDApIC8gMTApID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICd0aCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAnc3QnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ25kJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAzXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICdyZCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJ3RoJztcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZW5JbDtcblxufSkpKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/en-il.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/en-in.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/en-in.js ***!
  \*********************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : English (India) [en-in]\n//! author : Jatin Agrawal : https://github.com/jatinag22\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var enIn = moment.defineLocale('en-in', {\n        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n            '_'\n        ),\n        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat: {\n            LT: 'h:mm A',\n            LTS: 'h:mm:ss A',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY h:mm A',\n            LLLL: 'dddd, D MMMM YYYY h:mm A',\n        },\n        calendar: {\n            sameDay: '[Today at] LT',\n            nextDay: '[Tomorrow at] LT',\n            nextWeek: 'dddd [at] LT',\n            lastDay: '[Yesterday at] LT',\n            lastWeek: '[Last] dddd [at] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: '%s ago',\n            s: 'a few seconds',\n            ss: '%d seconds',\n            m: 'a minute',\n            mm: '%d minutes',\n            h: 'an hour',\n            hh: '%d hours',\n            d: 'a day',\n            dd: '%d days',\n            M: 'a month',\n            MM: '%d months',\n            y: 'a year',\n            yy: '%d years',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                        ? 'st'\n                        : b === 2\n                        ? 'nd'\n                        : b === 3\n                        ? 'rd'\n                        : 'th';\n            return number + output;\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 1st is the first week of the year.\n        },\n    });\n\n    return enIn;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1pbi5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1pbi5qcz8wMzRmIl0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBFbmdsaXNoIChJbmRpYSkgW2VuLWluXVxuLy8hIGF1dGhvciA6IEphdGluIEFncmF3YWwgOiBodHRwczovL2dpdGh1Yi5jb20vamF0aW5hZzIyXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgZW5JbiA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2VuLWluJywge1xuICAgICAgICBtb250aHM6ICdKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ0phbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ1N1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Jy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ1N1X01vX1R1X1dlX1RoX0ZyX1NhJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdoOm1tIEEnLFxuICAgICAgICAgICAgTFRTOiAnaDptbTpzcyBBJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgaDptbSBBJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBoOm1tIEEnLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tUb2RheSBhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tUb21vcnJvdyBhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFthdF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tZZXN0ZXJkYXkgYXRdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW0xhc3RdIGRkZGQgW2F0XSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ2luICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyBhZ28nLFxuICAgICAgICAgICAgczogJ2EgZmV3IHNlY29uZHMnLFxuICAgICAgICAgICAgc3M6ICclZCBzZWNvbmRzJyxcbiAgICAgICAgICAgIG06ICdhIG1pbnV0ZScsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0ZXMnLFxuICAgICAgICAgICAgaDogJ2FuIGhvdXInLFxuICAgICAgICAgICAgaGg6ICclZCBob3VycycsXG4gICAgICAgICAgICBkOiAnYSBkYXknLFxuICAgICAgICAgICAgZGQ6ICclZCBkYXlzJyxcbiAgICAgICAgICAgIE06ICdhIG1vbnRoJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbW9udGhzJyxcbiAgICAgICAgICAgIHk6ICdhIHllYXInLFxuICAgICAgICAgICAgeXk6ICclZCB5ZWFycycsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShzdHxuZHxyZHx0aCkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICB2YXIgYiA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgICAgIG91dHB1dCA9XG4gICAgICAgICAgICAgICAgICAgIH5+KChudW1iZXIgJSAxMDApIC8gMTApID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICd0aCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAnc3QnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ25kJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAzXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICdyZCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJ3RoJztcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMCwgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDYsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDFzdCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBlbkluO1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/en-in.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/en-nz.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/en-nz.js ***!
  \*********************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : English (New Zealand) [en-nz]\n//! author : Luke McGregor : https://github.com/lukemcgregor\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var enNz = moment.defineLocale('en-nz', {\n        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n            '_'\n        ),\n        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat: {\n            LT: 'h:mm A',\n            LTS: 'h:mm:ss A',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY h:mm A',\n            LLLL: 'dddd, D MMMM YYYY h:mm A',\n        },\n        calendar: {\n            sameDay: '[Today at] LT',\n            nextDay: '[Tomorrow at] LT',\n            nextWeek: 'dddd [at] LT',\n            lastDay: '[Yesterday at] LT',\n            lastWeek: '[Last] dddd [at] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: '%s ago',\n            s: 'a few seconds',\n            ss: '%d seconds',\n            m: 'a minute',\n            mm: '%d minutes',\n            h: 'an hour',\n            hh: '%d hours',\n            d: 'a day',\n            dd: '%d days',\n            M: 'a month',\n            MM: '%d months',\n            y: 'a year',\n            yy: '%d years',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                        ? 'st'\n                        : b === 2\n                        ? 'nd'\n                        : b === 3\n                        ? 'rd'\n                        : 'th';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return enNz;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1uei5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1uei5qcz9mZGQ3Il0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBFbmdsaXNoIChOZXcgWmVhbGFuZCkgW2VuLW56XVxuLy8hIGF1dGhvciA6IEx1a2UgTWNHcmVnb3IgOiBodHRwczovL2dpdGh1Yi5jb20vbHVrZW1jZ3JlZ29yXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgZW5OeiA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2VuLW56Jywge1xuICAgICAgICBtb250aHM6ICdKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ0phbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ1N1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Jy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ1N1X01vX1R1X1dlX1RoX0ZyX1NhJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdoOm1tIEEnLFxuICAgICAgICAgICAgTFRTOiAnaDptbTpzcyBBJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgaDptbSBBJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBoOm1tIEEnLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tUb2RheSBhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tUb21vcnJvdyBhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFthdF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tZZXN0ZXJkYXkgYXRdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW0xhc3RdIGRkZGQgW2F0XSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ2luICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyBhZ28nLFxuICAgICAgICAgICAgczogJ2EgZmV3IHNlY29uZHMnLFxuICAgICAgICAgICAgc3M6ICclZCBzZWNvbmRzJyxcbiAgICAgICAgICAgIG06ICdhIG1pbnV0ZScsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0ZXMnLFxuICAgICAgICAgICAgaDogJ2FuIGhvdXInLFxuICAgICAgICAgICAgaGg6ICclZCBob3VycycsXG4gICAgICAgICAgICBkOiAnYSBkYXknLFxuICAgICAgICAgICAgZGQ6ICclZCBkYXlzJyxcbiAgICAgICAgICAgIE06ICdhIG1vbnRoJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbW9udGhzJyxcbiAgICAgICAgICAgIHk6ICdhIHllYXInLFxuICAgICAgICAgICAgeXk6ICclZCB5ZWFycycsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShzdHxuZHxyZHx0aCkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICB2YXIgYiA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgICAgIG91dHB1dCA9XG4gICAgICAgICAgICAgICAgICAgIH5+KChudW1iZXIgJSAxMDApIC8gMTApID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICd0aCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAnc3QnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ25kJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAzXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICdyZCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJ3RoJztcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBlbk56O1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/en-nz.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/en-sg.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/en-sg.js ***!
  \*********************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : English (Singapore) [en-sg]\n//! author : Matthew Castrillon-Madrigal : https://github.com/techdimension\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var enSg = moment.defineLocale('en-sg', {\n        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n            '_'\n        ),\n        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Today at] LT',\n            nextDay: '[Tomorrow at] LT',\n            nextWeek: 'dddd [at] LT',\n            lastDay: '[Yesterday at] LT',\n            lastWeek: '[Last] dddd [at] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: '%s ago',\n            s: 'a few seconds',\n            ss: '%d seconds',\n            m: 'a minute',\n            mm: '%d minutes',\n            h: 'an hour',\n            hh: '%d hours',\n            d: 'a day',\n            dd: '%d days',\n            M: 'a month',\n            MM: '%d months',\n            y: 'a year',\n            yy: '%d years',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                        ? 'st'\n                        : b === 2\n                        ? 'nd'\n                        : b === 3\n                        ? 'rd'\n                        : 'th';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return enSg;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1zZy5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1zZy5qcz8zNjg3Il0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBFbmdsaXNoIChTaW5nYXBvcmUpIFtlbi1zZ11cbi8vISBhdXRob3IgOiBNYXR0aGV3IENhc3RyaWxsb24tTWFkcmlnYWwgOiBodHRwczovL2dpdGh1Yi5jb20vdGVjaGRpbWVuc2lvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIGVuU2cgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdlbi1zZycsIHtcbiAgICAgICAgbW9udGhzOiAnSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICdTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ1N1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdTdV9Nb19UdV9XZV9UaF9Gcl9TYScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tUb2RheSBhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tUb21vcnJvdyBhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFthdF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tZZXN0ZXJkYXkgYXRdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW0xhc3RdIGRkZGQgW2F0XSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ2luICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyBhZ28nLFxuICAgICAgICAgICAgczogJ2EgZmV3IHNlY29uZHMnLFxuICAgICAgICAgICAgc3M6ICclZCBzZWNvbmRzJyxcbiAgICAgICAgICAgIG06ICdhIG1pbnV0ZScsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0ZXMnLFxuICAgICAgICAgICAgaDogJ2FuIGhvdXInLFxuICAgICAgICAgICAgaGg6ICclZCBob3VycycsXG4gICAgICAgICAgICBkOiAnYSBkYXknLFxuICAgICAgICAgICAgZGQ6ICclZCBkYXlzJyxcbiAgICAgICAgICAgIE06ICdhIG1vbnRoJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbW9udGhzJyxcbiAgICAgICAgICAgIHk6ICdhIHllYXInLFxuICAgICAgICAgICAgeXk6ICclZCB5ZWFycycsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShzdHxuZHxyZHx0aCkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICB2YXIgYiA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgICAgIG91dHB1dCA9XG4gICAgICAgICAgICAgICAgICAgIH5+KChudW1iZXIgJSAxMDApIC8gMTApID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICd0aCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAnc3QnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ25kJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAzXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICdyZCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJ3RoJztcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBlblNnO1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/en-sg.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/eo.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/eo.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Esperanto [eo]\n//! author : Colin Dean : https://github.com/colindean\n//! author : Mia Nordentoft Imperatori : https://github.com/miestasmia\n//! comment : miestasmia corrected the translation by colindean\n//! comment : Vivakvo corrected the translation by colindean and miestasmia\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var eo = moment.defineLocale('eo', {\n        months: 'januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro'.split(\n            '_'\n        ),\n        monthsShort: 'jan_feb_mart_apr_maj_jun_jul_aŭg_sept_okt_nov_dec'.split('_'),\n        weekdays: 'dimanĉo_lundo_mardo_merkredo_ĵaŭdo_vendredo_sabato'.split('_'),\n        weekdaysShort: 'dim_lun_mard_merk_ĵaŭ_ven_sab'.split('_'),\n        weekdaysMin: 'di_lu_ma_me_ĵa_ve_sa'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY-MM-DD',\n            LL: '[la] D[-an de] MMMM, YYYY',\n            LLL: '[la] D[-an de] MMMM, YYYY HH:mm',\n            LLLL: 'dddd[n], [la] D[-an de] MMMM, YYYY HH:mm',\n            llll: 'ddd, [la] D[-an de] MMM, YYYY HH:mm',\n        },\n        meridiemParse: /[ap]\\.t\\.m/i,\n        isPM: function (input) {\n            return input.charAt(0).toLowerCase() === 'p';\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours > 11) {\n                return isLower ? 'p.t.m.' : 'P.T.M.';\n            } else {\n                return isLower ? 'a.t.m.' : 'A.T.M.';\n            }\n        },\n        calendar: {\n            sameDay: '[Hodiaŭ je] LT',\n            nextDay: '[Morgaŭ je] LT',\n            nextWeek: 'dddd[n je] LT',\n            lastDay: '[Hieraŭ je] LT',\n            lastWeek: '[pasintan] dddd[n je] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'post %s',\n            past: 'antaŭ %s',\n            s: 'kelkaj sekundoj',\n            ss: '%d sekundoj',\n            m: 'unu minuto',\n            mm: '%d minutoj',\n            h: 'unu horo',\n            hh: '%d horoj',\n            d: 'unu tago', //ne 'diurno', ĉar estas uzita por proksimumo\n            dd: '%d tagoj',\n            M: 'unu monato',\n            MM: '%d monatoj',\n            y: 'unu jaro',\n            yy: '%d jaroj',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}a/,\n        ordinal: '%da',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return eo;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lby5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZW8uanM/MTIyOCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogRXNwZXJhbnRvIFtlb11cbi8vISBhdXRob3IgOiBDb2xpbiBEZWFuIDogaHR0cHM6Ly9naXRodWIuY29tL2NvbGluZGVhblxuLy8hIGF1dGhvciA6IE1pYSBOb3JkZW50b2Z0IEltcGVyYXRvcmkgOiBodHRwczovL2dpdGh1Yi5jb20vbWllc3Rhc21pYVxuLy8hIGNvbW1lbnQgOiBtaWVzdGFzbWlhIGNvcnJlY3RlZCB0aGUgdHJhbnNsYXRpb24gYnkgY29saW5kZWFuXG4vLyEgY29tbWVudCA6IFZpdmFrdm8gY29ycmVjdGVkIHRoZSB0cmFuc2xhdGlvbiBieSBjb2xpbmRlYW4gYW5kIG1pZXN0YXNtaWFcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBlbyA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2VvJywge1xuICAgICAgICBtb250aHM6ICdqYW51YXJvX2ZlYnJ1YXJvX21hcnRvX2Fwcmlsb19tYWpvX2p1bmlvX2p1bGlvX2HFrWd1c3RvX3NlcHRlbWJyb19va3RvYnJvX25vdmVtYnJvX2RlY2VtYnJvJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ2phbl9mZWJfbWFydF9hcHJfbWFqX2p1bl9qdWxfYcWtZ19zZXB0X29rdF9ub3ZfZGVjJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ2RpbWFuxIlvX2x1bmRvX21hcmRvX21lcmtyZWRvX8S1YcWtZG9fdmVuZHJlZG9fc2FiYXRvJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnZGltX2x1bl9tYXJkX21lcmtfxLVhxa1fdmVuX3NhYicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdkaV9sdV9tYV9tZV/EtWFfdmVfc2EnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdZWVlZLU1NLUREJyxcbiAgICAgICAgICAgIExMOiAnW2xhXSBEWy1hbiBkZV0gTU1NTSwgWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdbbGFdIERbLWFuIGRlXSBNTU1NLCBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkW25dLCBbbGFdIERbLWFuIGRlXSBNTU1NLCBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIGxsbGw6ICdkZGQsIFtsYV0gRFstYW4gZGVdIE1NTSwgWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC9bYXBdXFwudFxcLm0vaSxcbiAgICAgICAgaXNQTTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQuY2hhckF0KDApLnRvTG93ZXJDYXNlKCkgPT09ICdwJztcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VycywgbWludXRlcywgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXJzID4gMTEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICdwLnQubS4nIDogJ1AuVC5NLic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBpc0xvd2VyID8gJ2EudC5tLicgOiAnQS5ULk0uJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbSG9kaWHFrSBqZV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tNb3JnYcWtIGplXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGRbbiBqZV0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tIaWVyYcWtIGplXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1twYXNpbnRhbl0gZGRkZFtuIGplXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ3Bvc3QgJXMnLFxuICAgICAgICAgICAgcGFzdDogJ2FudGHFrSAlcycsXG4gICAgICAgICAgICBzOiAna2Vsa2FqIHNla3VuZG9qJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2VrdW5kb2onLFxuICAgICAgICAgICAgbTogJ3VudSBtaW51dG8nLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dG9qJyxcbiAgICAgICAgICAgIGg6ICd1bnUgaG9ybycsXG4gICAgICAgICAgICBoaDogJyVkIGhvcm9qJyxcbiAgICAgICAgICAgIGQ6ICd1bnUgdGFnbycsIC8vbmUgJ2RpdXJubycsIMSJYXIgZXN0YXMgdXppdGEgcG9yIHByb2tzaW11bW9cbiAgICAgICAgICAgIGRkOiAnJWQgdGFnb2onLFxuICAgICAgICAgICAgTTogJ3VudSBtb25hdG8nLFxuICAgICAgICAgICAgTU06ICclZCBtb25hdG9qJyxcbiAgICAgICAgICAgIHk6ICd1bnUgamFybycsXG4gICAgICAgICAgICB5eTogJyVkIGphcm9qJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9YS8sXG4gICAgICAgIG9yZGluYWw6ICclZGEnLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA3LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA3dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZW87XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/eo.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/es-do.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/es-do.js ***!
  \*********************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Spanish (Dominican Republic) [es-do]\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var monthsShortDot =\n            'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(\n                '_'\n            ),\n        monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),\n        monthsParse = [\n            /^ene/i,\n            /^feb/i,\n            /^mar/i,\n            /^abr/i,\n            /^may/i,\n            /^jun/i,\n            /^jul/i,\n            /^ago/i,\n            /^sep/i,\n            /^oct/i,\n            /^nov/i,\n            /^dic/i,\n        ],\n        monthsRegex =\n            /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n\n    var esDo = moment.defineLocale('es-do', {\n        months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(\n            '_'\n        ),\n        monthsShort: function (m, format) {\n            if (!m) {\n                return monthsShortDot;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShort[m.month()];\n            } else {\n                return monthsShortDot[m.month()];\n            }\n        },\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex:\n            /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n        monthsShortStrictRegex:\n            /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n        weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n        weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n        weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'h:mm A',\n            LTS: 'h:mm:ss A',\n            L: 'DD/MM/YYYY',\n            LL: 'D [de] MMMM [de] YYYY',\n            LLL: 'D [de] MMMM [de] YYYY h:mm A',\n            LLLL: 'dddd, D [de] MMMM [de] YYYY h:mm A',\n        },\n        calendar: {\n            sameDay: function () {\n                return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            nextDay: function () {\n                return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            nextWeek: function () {\n                return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            lastDay: function () {\n                return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            lastWeek: function () {\n                return (\n                    '[el] dddd [pasado a la' +\n                    (this.hours() !== 1 ? 's' : '') +\n                    '] LT'\n                );\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'en %s',\n            past: 'hace %s',\n            s: 'unos segundos',\n            ss: '%d segundos',\n            m: 'un minuto',\n            mm: '%d minutos',\n            h: 'una hora',\n            hh: '%d horas',\n            d: 'un día',\n            dd: '%d días',\n            w: 'una semana',\n            ww: '%d semanas',\n            M: 'un mes',\n            MM: '%d meses',\n            y: 'un año',\n            yy: '%d años',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return esDo;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lcy1kby5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxrREFBVztBQUNyRSxHQUFHLENBQ3NCO0FBQ3pCLENBQUMsNEJBQTRCOztBQUU3Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxvQ0FBb0MsSUFBSTtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lcy1kby5qcz9mMTVjIl0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBTcGFuaXNoIChEb21pbmljYW4gUmVwdWJsaWMpIFtlcy1kb11cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBtb250aHNTaG9ydERvdCA9XG4gICAgICAgICAgICAnZW5lLl9mZWIuX21hci5fYWJyLl9tYXkuX2p1bi5fanVsLl9hZ28uX3NlcC5fb2N0Ll9ub3YuX2RpYy4nLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQgPSAnZW5lX2ZlYl9tYXJfYWJyX21heV9qdW5fanVsX2Fnb19zZXBfb2N0X25vdl9kaWMnLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1BhcnNlID0gW1xuICAgICAgICAgICAgL15lbmUvaSxcbiAgICAgICAgICAgIC9eZmViL2ksXG4gICAgICAgICAgICAvXm1hci9pLFxuICAgICAgICAgICAgL15hYnIvaSxcbiAgICAgICAgICAgIC9ebWF5L2ksXG4gICAgICAgICAgICAvXmp1bi9pLFxuICAgICAgICAgICAgL15qdWwvaSxcbiAgICAgICAgICAgIC9eYWdvL2ksXG4gICAgICAgICAgICAvXnNlcC9pLFxuICAgICAgICAgICAgL15vY3QvaSxcbiAgICAgICAgICAgIC9ebm92L2ksXG4gICAgICAgICAgICAvXmRpYy9pLFxuICAgICAgICBdLFxuICAgICAgICBtb250aHNSZWdleCA9XG4gICAgICAgICAgICAvXihlbmVyb3xmZWJyZXJvfG1hcnpvfGFicmlsfG1heW98anVuaW98anVsaW98YWdvc3RvfHNlcHRpZW1icmV8b2N0dWJyZXxub3ZpZW1icmV8ZGljaWVtYnJlfGVuZVxcLj98ZmViXFwuP3xtYXJcXC4/fGFiclxcLj98bWF5XFwuP3xqdW5cXC4/fGp1bFxcLj98YWdvXFwuP3xzZXBcXC4/fG9jdFxcLj98bm92XFwuP3xkaWNcXC4/KS9pO1xuXG4gICAgdmFyIGVzRG8gPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdlcy1kbycsIHtcbiAgICAgICAgbW9udGhzOiAnZW5lcm9fZmVicmVyb19tYXJ6b19hYnJpbF9tYXlvX2p1bmlvX2p1bGlvX2Fnb3N0b19zZXB0aWVtYnJlX29jdHVicmVfbm92aWVtYnJlX2RpY2llbWJyZScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6IGZ1bmN0aW9uIChtLCBmb3JtYXQpIHtcbiAgICAgICAgICAgIGlmICghbSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb250aHNTaG9ydERvdDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoLy1NTU0tLy50ZXN0KGZvcm1hdCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzU2hvcnRbbS5tb250aCgpXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRoc1Nob3J0RG90W20ubW9udGgoKV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1vbnRoc1JlZ2V4OiBtb250aHNSZWdleCxcbiAgICAgICAgbW9udGhzU2hvcnRSZWdleDogbW9udGhzUmVnZXgsXG4gICAgICAgIG1vbnRoc1N0cmljdFJlZ2V4OlxuICAgICAgICAgICAgL14oZW5lcm98ZmVicmVyb3xtYXJ6b3xhYnJpbHxtYXlvfGp1bmlvfGp1bGlvfGFnb3N0b3xzZXB0aWVtYnJlfG9jdHVicmV8bm92aWVtYnJlfGRpY2llbWJyZSkvaSxcbiAgICAgICAgbW9udGhzU2hvcnRTdHJpY3RSZWdleDpcbiAgICAgICAgICAgIC9eKGVuZVxcLj98ZmViXFwuP3xtYXJcXC4/fGFiclxcLj98bWF5XFwuP3xqdW5cXC4/fGp1bFxcLj98YWdvXFwuP3xzZXBcXC4/fG9jdFxcLj98bm92XFwuP3xkaWNcXC4/KS9pLFxuICAgICAgICBtb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgICAgIGxvbmdNb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgICAgIHNob3J0TW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgICAgICB3ZWVrZGF5czogJ2RvbWluZ29fbHVuZXNfbWFydGVzX21pw6lyY29sZXNfanVldmVzX3ZpZXJuZXNfc8OhYmFkbycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ2RvbS5fbHVuLl9tYXIuX21pw6kuX2p1ZS5fdmllLl9zw6FiLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdkb19sdV9tYV9taV9qdV92aV9zw6EnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnaDptbSBBJyxcbiAgICAgICAgICAgIExUUzogJ2g6bW06c3MgQScsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgW2RlXSBNTU1NIFtkZV0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIFtkZV0gTU1NTSBbZGVdIFlZWVkgaDptbSBBJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIFtkZV0gTU1NTSBbZGVdIFlZWVkgaDptbSBBJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1tob3kgYSBsYScgKyAodGhpcy5ob3VycygpICE9PSAxID8gJ3MnIDogJycpICsgJ10gTFQnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5leHREYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1ttYcOxYW5hIGEgbGEnICsgKHRoaXMuaG91cnMoKSAhPT0gMSA/ICdzJyA6ICcnKSArICddIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuZXh0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnZGRkZCBbYSBsYScgKyAodGhpcy5ob3VycygpICE9PSAxID8gJ3MnIDogJycpICsgJ10gTFQnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3REYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1theWVyIGEgbGEnICsgKHRoaXMuaG91cnMoKSAhPT0gMSA/ICdzJyA6ICcnKSArICddIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICdbZWxdIGRkZGQgW3Bhc2FkbyBhIGxhJyArXG4gICAgICAgICAgICAgICAgICAgICh0aGlzLmhvdXJzKCkgIT09IDEgPyAncycgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgICAnXSBMVCdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnZW4gJXMnLFxuICAgICAgICAgICAgcGFzdDogJ2hhY2UgJXMnLFxuICAgICAgICAgICAgczogJ3Vub3Mgc2VndW5kb3MnLFxuICAgICAgICAgICAgc3M6ICclZCBzZWd1bmRvcycsXG4gICAgICAgICAgICBtOiAndW4gbWludXRvJyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludXRvcycsXG4gICAgICAgICAgICBoOiAndW5hIGhvcmEnLFxuICAgICAgICAgICAgaGg6ICclZCBob3JhcycsXG4gICAgICAgICAgICBkOiAndW4gZMOtYScsXG4gICAgICAgICAgICBkZDogJyVkIGTDrWFzJyxcbiAgICAgICAgICAgIHc6ICd1bmEgc2VtYW5hJyxcbiAgICAgICAgICAgIHd3OiAnJWQgc2VtYW5hcycsXG4gICAgICAgICAgICBNOiAndW4gbWVzJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbWVzZXMnLFxuICAgICAgICAgICAgeTogJ3VuIGHDsW8nLFxuICAgICAgICAgICAgeXk6ICclZCBhw7FvcycsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfcK6LyxcbiAgICAgICAgb3JkaW5hbDogJyVkwronLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZXNEbztcblxufSkpKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/es-do.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/es-mx.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/es-mx.js ***!
  \*********************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Spanish (Mexico) [es-mx]\n//! author : JC Franco : https://github.com/jcfranco\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var monthsShortDot =\n            'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(\n                '_'\n            ),\n        monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),\n        monthsParse = [\n            /^ene/i,\n            /^feb/i,\n            /^mar/i,\n            /^abr/i,\n            /^may/i,\n            /^jun/i,\n            /^jul/i,\n            /^ago/i,\n            /^sep/i,\n            /^oct/i,\n            /^nov/i,\n            /^dic/i,\n        ],\n        monthsRegex =\n            /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n\n    var esMx = moment.defineLocale('es-mx', {\n        months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(\n            '_'\n        ),\n        monthsShort: function (m, format) {\n            if (!m) {\n                return monthsShortDot;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShort[m.month()];\n            } else {\n                return monthsShortDot[m.month()];\n            }\n        },\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex:\n            /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n        monthsShortStrictRegex:\n            /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n        weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n        weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n        weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D [de] MMMM [de] YYYY',\n            LLL: 'D [de] MMMM [de] YYYY H:mm',\n            LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm',\n        },\n        calendar: {\n            sameDay: function () {\n                return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            nextDay: function () {\n                return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            nextWeek: function () {\n                return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            lastDay: function () {\n                return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            lastWeek: function () {\n                return (\n                    '[el] dddd [pasado a la' +\n                    (this.hours() !== 1 ? 's' : '') +\n                    '] LT'\n                );\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'en %s',\n            past: 'hace %s',\n            s: 'unos segundos',\n            ss: '%d segundos',\n            m: 'un minuto',\n            mm: '%d minutos',\n            h: 'una hora',\n            hh: '%d horas',\n            d: 'un día',\n            dd: '%d días',\n            w: 'una semana',\n            ww: '%d semanas',\n            M: 'un mes',\n            MM: '%d meses',\n            y: 'un año',\n            yy: '%d años',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n        invalidDate: 'Fecha inválida',\n    });\n\n    return esMx;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lcy1teC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZXMtbXguanM/YWQ2NyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogU3BhbmlzaCAoTWV4aWNvKSBbZXMtbXhdXG4vLyEgYXV0aG9yIDogSkMgRnJhbmNvIDogaHR0cHM6Ly9naXRodWIuY29tL2pjZnJhbmNvXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgbW9udGhzU2hvcnREb3QgPVxuICAgICAgICAgICAgJ2VuZS5fZmViLl9tYXIuX2Fici5fbWF5Ll9qdW4uX2p1bC5fYWdvLl9zZXAuX29jdC5fbm92Ll9kaWMuJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0ID0gJ2VuZV9mZWJfbWFyX2Ficl9tYXlfanVuX2p1bF9hZ29fc2VwX29jdF9ub3ZfZGljJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNQYXJzZSA9IFtcbiAgICAgICAgICAgIC9eZW5lL2ksXG4gICAgICAgICAgICAvXmZlYi9pLFxuICAgICAgICAgICAgL15tYXIvaSxcbiAgICAgICAgICAgIC9eYWJyL2ksXG4gICAgICAgICAgICAvXm1heS9pLFxuICAgICAgICAgICAgL15qdW4vaSxcbiAgICAgICAgICAgIC9eanVsL2ksXG4gICAgICAgICAgICAvXmFnby9pLFxuICAgICAgICAgICAgL15zZXAvaSxcbiAgICAgICAgICAgIC9eb2N0L2ksXG4gICAgICAgICAgICAvXm5vdi9pLFxuICAgICAgICAgICAgL15kaWMvaSxcbiAgICAgICAgXSxcbiAgICAgICAgbW9udGhzUmVnZXggPVxuICAgICAgICAgICAgL14oZW5lcm98ZmVicmVyb3xtYXJ6b3xhYnJpbHxtYXlvfGp1bmlvfGp1bGlvfGFnb3N0b3xzZXB0aWVtYnJlfG9jdHVicmV8bm92aWVtYnJlfGRpY2llbWJyZXxlbmVcXC4/fGZlYlxcLj98bWFyXFwuP3xhYnJcXC4/fG1heVxcLj98anVuXFwuP3xqdWxcXC4/fGFnb1xcLj98c2VwXFwuP3xvY3RcXC4/fG5vdlxcLj98ZGljXFwuPykvaTtcblxuICAgIHZhciBlc014ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZXMtbXgnLCB7XG4gICAgICAgIG1vbnRoczogJ2VuZXJvX2ZlYnJlcm9fbWFyem9fYWJyaWxfbWF5b19qdW5pb19qdWxpb19hZ29zdG9fc2VwdGllbWJyZV9vY3R1YnJlX25vdmllbWJyZV9kaWNpZW1icmUnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiBmdW5jdGlvbiAobSwgZm9ybWF0KSB7XG4gICAgICAgICAgICBpZiAoIW0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzU2hvcnREb3Q7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKC8tTU1NLS8udGVzdChmb3JtYXQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRoc1Nob3J0W20ubW9udGgoKV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb250aHNTaG9ydERvdFttLm1vbnRoKCldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtb250aHNSZWdleDogbW9udGhzUmVnZXgsXG4gICAgICAgIG1vbnRoc1Nob3J0UmVnZXg6IG1vbnRoc1JlZ2V4LFxuICAgICAgICBtb250aHNTdHJpY3RSZWdleDpcbiAgICAgICAgICAgIC9eKGVuZXJvfGZlYnJlcm98bWFyem98YWJyaWx8bWF5b3xqdW5pb3xqdWxpb3xhZ29zdG98c2VwdGllbWJyZXxvY3R1YnJlfG5vdmllbWJyZXxkaWNpZW1icmUpL2ksXG4gICAgICAgIG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6XG4gICAgICAgICAgICAvXihlbmVcXC4/fGZlYlxcLj98bWFyXFwuP3xhYnJcXC4/fG1heVxcLj98anVuXFwuP3xqdWxcXC4/fGFnb1xcLj98c2VwXFwuP3xvY3RcXC4/fG5vdlxcLj98ZGljXFwuPykvaSxcbiAgICAgICAgbW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgICAgICBsb25nTW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgICAgICBzaG9ydE1vbnRoc1BhcnNlOiBtb250aHNQYXJzZSxcbiAgICAgICAgd2Vla2RheXM6ICdkb21pbmdvX2x1bmVzX21hcnRlc19tacOpcmNvbGVzX2p1ZXZlc192aWVybmVzX3PDoWJhZG8nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdkb20uX2x1bi5fbWFyLl9tacOpLl9qdWUuX3ZpZS5fc8OhYi4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnZG9fbHVfbWFfbWlfanVfdmlfc8OhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0g6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgW2RlXSBNTU1NIFtkZV0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIFtkZV0gTU1NTSBbZGVdIFlZWVkgSDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBbZGVdIE1NTU0gW2RlXSBZWVlZIEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnW2hveSBhIGxhJyArICh0aGlzLmhvdXJzKCkgIT09IDEgPyAncycgOiAnJykgKyAnXSBMVCc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmV4dERheTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnW21hw7FhbmEgYSBsYScgKyAodGhpcy5ob3VycygpICE9PSAxID8gJ3MnIDogJycpICsgJ10gTFQnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5leHRXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdkZGRkIFthIGxhJyArICh0aGlzLmhvdXJzKCkgIT09IDEgPyAncycgOiAnJykgKyAnXSBMVCc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdERheTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnW2F5ZXIgYSBsYScgKyAodGhpcy5ob3VycygpICE9PSAxID8gJ3MnIDogJycpICsgJ10gTFQnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgJ1tlbF0gZGRkZCBbcGFzYWRvIGEgbGEnICtcbiAgICAgICAgICAgICAgICAgICAgKHRoaXMuaG91cnMoKSAhPT0gMSA/ICdzJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAgICddIExUJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdlbiAlcycsXG4gICAgICAgICAgICBwYXN0OiAnaGFjZSAlcycsXG4gICAgICAgICAgICBzOiAndW5vcyBzZWd1bmRvcycsXG4gICAgICAgICAgICBzczogJyVkIHNlZ3VuZG9zJyxcbiAgICAgICAgICAgIG06ICd1biBtaW51dG8nLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dG9zJyxcbiAgICAgICAgICAgIGg6ICd1bmEgaG9yYScsXG4gICAgICAgICAgICBoaDogJyVkIGhvcmFzJyxcbiAgICAgICAgICAgIGQ6ICd1biBkw61hJyxcbiAgICAgICAgICAgIGRkOiAnJWQgZMOtYXMnLFxuICAgICAgICAgICAgdzogJ3VuYSBzZW1hbmEnLFxuICAgICAgICAgICAgd3c6ICclZCBzZW1hbmFzJyxcbiAgICAgICAgICAgIE06ICd1biBtZXMnLFxuICAgICAgICAgICAgTU06ICclZCBtZXNlcycsXG4gICAgICAgICAgICB5OiAndW4gYcOxbycsXG4gICAgICAgICAgICB5eTogJyVkIGHDsW9zJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9wrovLFxuICAgICAgICBvcmRpbmFsOiAnJWTCuicsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMCwgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICAgICAgaW52YWxpZERhdGU6ICdGZWNoYSBpbnbDoWxpZGEnLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGVzTXg7XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/es-mx.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/es-us.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/es-us.js ***!
  \*********************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Spanish (United States) [es-us]\n//! author : bustta : https://github.com/bustta\n//! author : chrisrodz : https://github.com/chrisrodz\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var monthsShortDot =\n            'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(\n                '_'\n            ),\n        monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),\n        monthsParse = [\n            /^ene/i,\n            /^feb/i,\n            /^mar/i,\n            /^abr/i,\n            /^may/i,\n            /^jun/i,\n            /^jul/i,\n            /^ago/i,\n            /^sep/i,\n            /^oct/i,\n            /^nov/i,\n            /^dic/i,\n        ],\n        monthsRegex =\n            /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n\n    var esUs = moment.defineLocale('es-us', {\n        months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(\n            '_'\n        ),\n        monthsShort: function (m, format) {\n            if (!m) {\n                return monthsShortDot;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShort[m.month()];\n            } else {\n                return monthsShortDot[m.month()];\n            }\n        },\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex:\n            /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n        monthsShortStrictRegex:\n            /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n        weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n        weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n        weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'h:mm A',\n            LTS: 'h:mm:ss A',\n            L: 'MM/DD/YYYY',\n            LL: 'D [de] MMMM [de] YYYY',\n            LLL: 'D [de] MMMM [de] YYYY h:mm A',\n            LLLL: 'dddd, D [de] MMMM [de] YYYY h:mm A',\n        },\n        calendar: {\n            sameDay: function () {\n                return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            nextDay: function () {\n                return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            nextWeek: function () {\n                return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            lastDay: function () {\n                return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            lastWeek: function () {\n                return (\n                    '[el] dddd [pasado a la' +\n                    (this.hours() !== 1 ? 's' : '') +\n                    '] LT'\n                );\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'en %s',\n            past: 'hace %s',\n            s: 'unos segundos',\n            ss: '%d segundos',\n            m: 'un minuto',\n            mm: '%d minutos',\n            h: 'una hora',\n            hh: '%d horas',\n            d: 'un día',\n            dd: '%d días',\n            w: 'una semana',\n            ww: '%d semanas',\n            M: 'un mes',\n            MM: '%d meses',\n            y: 'un año',\n            yy: '%d años',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return esUs;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lcy11cy5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsa0RBQVc7QUFDckUsR0FBRyxDQUNzQjtBQUN6QixDQUFDLDRCQUE0Qjs7QUFFN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZXMtdXMuanM/ODYxYSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogU3BhbmlzaCAoVW5pdGVkIFN0YXRlcykgW2VzLXVzXVxuLy8hIGF1dGhvciA6IGJ1c3R0YSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9idXN0dGFcbi8vISBhdXRob3IgOiBjaHJpc3JvZHogOiBodHRwczovL2dpdGh1Yi5jb20vY2hyaXNyb2R6XG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgbW9udGhzU2hvcnREb3QgPVxuICAgICAgICAgICAgJ2VuZS5fZmViLl9tYXIuX2Fici5fbWF5Ll9qdW4uX2p1bC5fYWdvLl9zZXAuX29jdC5fbm92Ll9kaWMuJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0ID0gJ2VuZV9mZWJfbWFyX2Ficl9tYXlfanVuX2p1bF9hZ29fc2VwX29jdF9ub3ZfZGljJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNQYXJzZSA9IFtcbiAgICAgICAgICAgIC9eZW5lL2ksXG4gICAgICAgICAgICAvXmZlYi9pLFxuICAgICAgICAgICAgL15tYXIvaSxcbiAgICAgICAgICAgIC9eYWJyL2ksXG4gICAgICAgICAgICAvXm1heS9pLFxuICAgICAgICAgICAgL15qdW4vaSxcbiAgICAgICAgICAgIC9eanVsL2ksXG4gICAgICAgICAgICAvXmFnby9pLFxuICAgICAgICAgICAgL15zZXAvaSxcbiAgICAgICAgICAgIC9eb2N0L2ksXG4gICAgICAgICAgICAvXm5vdi9pLFxuICAgICAgICAgICAgL15kaWMvaSxcbiAgICAgICAgXSxcbiAgICAgICAgbW9udGhzUmVnZXggPVxuICAgICAgICAgICAgL14oZW5lcm98ZmVicmVyb3xtYXJ6b3xhYnJpbHxtYXlvfGp1bmlvfGp1bGlvfGFnb3N0b3xzZXB0aWVtYnJlfG9jdHVicmV8bm92aWVtYnJlfGRpY2llbWJyZXxlbmVcXC4/fGZlYlxcLj98bWFyXFwuP3xhYnJcXC4/fG1heVxcLj98anVuXFwuP3xqdWxcXC4/fGFnb1xcLj98c2VwXFwuP3xvY3RcXC4/fG5vdlxcLj98ZGljXFwuPykvaTtcblxuICAgIHZhciBlc1VzID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZXMtdXMnLCB7XG4gICAgICAgIG1vbnRoczogJ2VuZXJvX2ZlYnJlcm9fbWFyem9fYWJyaWxfbWF5b19qdW5pb19qdWxpb19hZ29zdG9fc2VwdGllbWJyZV9vY3R1YnJlX25vdmllbWJyZV9kaWNpZW1icmUnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiBmdW5jdGlvbiAobSwgZm9ybWF0KSB7XG4gICAgICAgICAgICBpZiAoIW0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzU2hvcnREb3Q7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKC8tTU1NLS8udGVzdChmb3JtYXQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRoc1Nob3J0W20ubW9udGgoKV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb250aHNTaG9ydERvdFttLm1vbnRoKCldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtb250aHNSZWdleDogbW9udGhzUmVnZXgsXG4gICAgICAgIG1vbnRoc1Nob3J0UmVnZXg6IG1vbnRoc1JlZ2V4LFxuICAgICAgICBtb250aHNTdHJpY3RSZWdleDpcbiAgICAgICAgICAgIC9eKGVuZXJvfGZlYnJlcm98bWFyem98YWJyaWx8bWF5b3xqdW5pb3xqdWxpb3xhZ29zdG98c2VwdGllbWJyZXxvY3R1YnJlfG5vdmllbWJyZXxkaWNpZW1icmUpL2ksXG4gICAgICAgIG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6XG4gICAgICAgICAgICAvXihlbmVcXC4/fGZlYlxcLj98bWFyXFwuP3xhYnJcXC4/fG1heVxcLj98anVuXFwuP3xqdWxcXC4/fGFnb1xcLj98c2VwXFwuP3xvY3RcXC4/fG5vdlxcLj98ZGljXFwuPykvaSxcbiAgICAgICAgbW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgICAgICBsb25nTW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgICAgICBzaG9ydE1vbnRoc1BhcnNlOiBtb250aHNQYXJzZSxcbiAgICAgICAgd2Vla2RheXM6ICdkb21pbmdvX2x1bmVzX21hcnRlc19tacOpcmNvbGVzX2p1ZXZlc192aWVybmVzX3PDoWJhZG8nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdkb20uX2x1bi5fbWFyLl9tacOpLl9qdWUuX3ZpZS5fc8OhYi4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnZG9fbHVfbWFfbWlfanVfdmlfc8OhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ2g6bW0gQScsXG4gICAgICAgICAgICBMVFM6ICdoOm1tOnNzIEEnLFxuICAgICAgICAgICAgTDogJ01NL0REL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIFtkZV0gTU1NTSBbZGVdIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBbZGVdIE1NTU0gW2RlXSBZWVlZIGg6bW0gQScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBbZGVdIE1NTU0gW2RlXSBZWVlZIGg6bW0gQScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdbaG95IGEgbGEnICsgKHRoaXMuaG91cnMoKSAhPT0gMSA/ICdzJyA6ICcnKSArICddIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuZXh0RGF5OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdbbWHDsWFuYSBhIGxhJyArICh0aGlzLmhvdXJzKCkgIT09IDEgPyAncycgOiAnJykgKyAnXSBMVCc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmV4dFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2RkZGQgW2EgbGEnICsgKHRoaXMuaG91cnMoKSAhPT0gMSA/ICdzJyA6ICcnKSArICddIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0RGF5OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdbYXllciBhIGxhJyArICh0aGlzLmhvdXJzKCkgIT09IDEgPyAncycgOiAnJykgKyAnXSBMVCc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAnW2VsXSBkZGRkIFtwYXNhZG8gYSBsYScgK1xuICAgICAgICAgICAgICAgICAgICAodGhpcy5ob3VycygpICE9PSAxID8gJ3MnIDogJycpICtcbiAgICAgICAgICAgICAgICAgICAgJ10gTFQnXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ2VuICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICdoYWNlICVzJyxcbiAgICAgICAgICAgIHM6ICd1bm9zIHNlZ3VuZG9zJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2VndW5kb3MnLFxuICAgICAgICAgICAgbTogJ3VuIG1pbnV0bycsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0b3MnLFxuICAgICAgICAgICAgaDogJ3VuYSBob3JhJyxcbiAgICAgICAgICAgIGhoOiAnJWQgaG9yYXMnLFxuICAgICAgICAgICAgZDogJ3VuIGTDrWEnLFxuICAgICAgICAgICAgZGQ6ICclZCBkw61hcycsXG4gICAgICAgICAgICB3OiAndW5hIHNlbWFuYScsXG4gICAgICAgICAgICB3dzogJyVkIHNlbWFuYXMnLFxuICAgICAgICAgICAgTTogJ3VuIG1lcycsXG4gICAgICAgICAgICBNTTogJyVkIG1lc2VzJyxcbiAgICAgICAgICAgIHk6ICd1biBhw7FvJyxcbiAgICAgICAgICAgIHl5OiAnJWQgYcOxb3MnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn3Cui8sXG4gICAgICAgIG9yZGluYWw6ICclZMK6JyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNiwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGVzVXM7XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/es-us.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/es.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/es.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Spanish [es]\n//! author : Julio Napurí : https://github.com/julionc\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var monthsShortDot =\n            'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(\n                '_'\n            ),\n        monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),\n        monthsParse = [\n            /^ene/i,\n            /^feb/i,\n            /^mar/i,\n            /^abr/i,\n            /^may/i,\n            /^jun/i,\n            /^jul/i,\n            /^ago/i,\n            /^sep/i,\n            /^oct/i,\n            /^nov/i,\n            /^dic/i,\n        ],\n        monthsRegex =\n            /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n\n    var es = moment.defineLocale('es', {\n        months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(\n            '_'\n        ),\n        monthsShort: function (m, format) {\n            if (!m) {\n                return monthsShortDot;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShort[m.month()];\n            } else {\n                return monthsShortDot[m.month()];\n            }\n        },\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex:\n            /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n        monthsShortStrictRegex:\n            /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n        weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n        weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n        weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D [de] MMMM [de] YYYY',\n            LLL: 'D [de] MMMM [de] YYYY H:mm',\n            LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm',\n        },\n        calendar: {\n            sameDay: function () {\n                return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            nextDay: function () {\n                return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            nextWeek: function () {\n                return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            lastDay: function () {\n                return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            lastWeek: function () {\n                return (\n                    '[el] dddd [pasado a la' +\n                    (this.hours() !== 1 ? 's' : '') +\n                    '] LT'\n                );\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'en %s',\n            past: 'hace %s',\n            s: 'unos segundos',\n            ss: '%d segundos',\n            m: 'un minuto',\n            mm: '%d minutos',\n            h: 'una hora',\n            hh: '%d horas',\n            d: 'un día',\n            dd: '%d días',\n            w: 'una semana',\n            ww: '%d semanas',\n            M: 'un mes',\n            MM: '%d meses',\n            y: 'un año',\n            yy: '%d años',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n        invalidDate: 'Fecha inválida',\n    });\n\n    return es;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lcy5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZXMuanM/OTFjMCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogU3BhbmlzaCBbZXNdXG4vLyEgYXV0aG9yIDogSnVsaW8gTmFwdXLDrSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9qdWxpb25jXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgbW9udGhzU2hvcnREb3QgPVxuICAgICAgICAgICAgJ2VuZS5fZmViLl9tYXIuX2Fici5fbWF5Ll9qdW4uX2p1bC5fYWdvLl9zZXAuX29jdC5fbm92Ll9kaWMuJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0ID0gJ2VuZV9mZWJfbWFyX2Ficl9tYXlfanVuX2p1bF9hZ29fc2VwX29jdF9ub3ZfZGljJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNQYXJzZSA9IFtcbiAgICAgICAgICAgIC9eZW5lL2ksXG4gICAgICAgICAgICAvXmZlYi9pLFxuICAgICAgICAgICAgL15tYXIvaSxcbiAgICAgICAgICAgIC9eYWJyL2ksXG4gICAgICAgICAgICAvXm1heS9pLFxuICAgICAgICAgICAgL15qdW4vaSxcbiAgICAgICAgICAgIC9eanVsL2ksXG4gICAgICAgICAgICAvXmFnby9pLFxuICAgICAgICAgICAgL15zZXAvaSxcbiAgICAgICAgICAgIC9eb2N0L2ksXG4gICAgICAgICAgICAvXm5vdi9pLFxuICAgICAgICAgICAgL15kaWMvaSxcbiAgICAgICAgXSxcbiAgICAgICAgbW9udGhzUmVnZXggPVxuICAgICAgICAgICAgL14oZW5lcm98ZmVicmVyb3xtYXJ6b3xhYnJpbHxtYXlvfGp1bmlvfGp1bGlvfGFnb3N0b3xzZXB0aWVtYnJlfG9jdHVicmV8bm92aWVtYnJlfGRpY2llbWJyZXxlbmVcXC4/fGZlYlxcLj98bWFyXFwuP3xhYnJcXC4/fG1heVxcLj98anVuXFwuP3xqdWxcXC4/fGFnb1xcLj98c2VwXFwuP3xvY3RcXC4/fG5vdlxcLj98ZGljXFwuPykvaTtcblxuICAgIHZhciBlcyA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2VzJywge1xuICAgICAgICBtb250aHM6ICdlbmVyb19mZWJyZXJvX21hcnpvX2FicmlsX21heW9fanVuaW9fanVsaW9fYWdvc3RvX3NlcHRpZW1icmVfb2N0dWJyZV9ub3ZpZW1icmVfZGljaWVtYnJlJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogZnVuY3Rpb24gKG0sIGZvcm1hdCkge1xuICAgICAgICAgICAgaWYgKCFtKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRoc1Nob3J0RG90O1xuICAgICAgICAgICAgfSBlbHNlIGlmICgvLU1NTS0vLnRlc3QoZm9ybWF0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb250aHNTaG9ydFttLm1vbnRoKCldO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzU2hvcnREb3RbbS5tb250aCgpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbW9udGhzUmVnZXg6IG1vbnRoc1JlZ2V4LFxuICAgICAgICBtb250aHNTaG9ydFJlZ2V4OiBtb250aHNSZWdleCxcbiAgICAgICAgbW9udGhzU3RyaWN0UmVnZXg6XG4gICAgICAgICAgICAvXihlbmVyb3xmZWJyZXJvfG1hcnpvfGFicmlsfG1heW98anVuaW98anVsaW98YWdvc3RvfHNlcHRpZW1icmV8b2N0dWJyZXxub3ZpZW1icmV8ZGljaWVtYnJlKS9pLFxuICAgICAgICBtb250aHNTaG9ydFN0cmljdFJlZ2V4OlxuICAgICAgICAgICAgL14oZW5lXFwuP3xmZWJcXC4/fG1hclxcLj98YWJyXFwuP3xtYXlcXC4/fGp1blxcLj98anVsXFwuP3xhZ29cXC4/fHNlcFxcLj98b2N0XFwuP3xub3ZcXC4/fGRpY1xcLj8pL2ksXG4gICAgICAgIG1vbnRoc1BhcnNlOiBtb250aHNQYXJzZSxcbiAgICAgICAgbG9uZ01vbnRoc1BhcnNlOiBtb250aHNQYXJzZSxcbiAgICAgICAgc2hvcnRNb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgICAgIHdlZWtkYXlzOiAnZG9taW5nb19sdW5lc19tYXJ0ZXNfbWnDqXJjb2xlc19qdWV2ZXNfdmllcm5lc19zw6FiYWRvJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnZG9tLl9sdW4uX21hci5fbWnDqS5fanVlLl92aWUuX3PDoWIuJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ2RvX2x1X21hX21pX2p1X3ZpX3PDoScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0g6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIFtkZV0gTU1NTSBbZGVdIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBbZGVdIE1NTU0gW2RlXSBZWVlZIEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgW2RlXSBNTU1NIFtkZV0gWVlZWSBIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1tob3kgYSBsYScgKyAodGhpcy5ob3VycygpICE9PSAxID8gJ3MnIDogJycpICsgJ10gTFQnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5leHREYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1ttYcOxYW5hIGEgbGEnICsgKHRoaXMuaG91cnMoKSAhPT0gMSA/ICdzJyA6ICcnKSArICddIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuZXh0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnZGRkZCBbYSBsYScgKyAodGhpcy5ob3VycygpICE9PSAxID8gJ3MnIDogJycpICsgJ10gTFQnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3REYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1theWVyIGEgbGEnICsgKHRoaXMuaG91cnMoKSAhPT0gMSA/ICdzJyA6ICcnKSArICddIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICdbZWxdIGRkZGQgW3Bhc2FkbyBhIGxhJyArXG4gICAgICAgICAgICAgICAgICAgICh0aGlzLmhvdXJzKCkgIT09IDEgPyAncycgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgICAnXSBMVCdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnZW4gJXMnLFxuICAgICAgICAgICAgcGFzdDogJ2hhY2UgJXMnLFxuICAgICAgICAgICAgczogJ3Vub3Mgc2VndW5kb3MnLFxuICAgICAgICAgICAgc3M6ICclZCBzZWd1bmRvcycsXG4gICAgICAgICAgICBtOiAndW4gbWludXRvJyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludXRvcycsXG4gICAgICAgICAgICBoOiAndW5hIGhvcmEnLFxuICAgICAgICAgICAgaGg6ICclZCBob3JhcycsXG4gICAgICAgICAgICBkOiAndW4gZMOtYScsXG4gICAgICAgICAgICBkZDogJyVkIGTDrWFzJyxcbiAgICAgICAgICAgIHc6ICd1bmEgc2VtYW5hJyxcbiAgICAgICAgICAgIHd3OiAnJWQgc2VtYW5hcycsXG4gICAgICAgICAgICBNOiAndW4gbWVzJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbWVzZXMnLFxuICAgICAgICAgICAgeTogJ3VuIGHDsW8nLFxuICAgICAgICAgICAgeXk6ICclZCBhw7FvcycsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfcK6LyxcbiAgICAgICAgb3JkaW5hbDogJyVkwronLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgICAgIGludmFsaWREYXRlOiAnRmVjaGEgaW52w6FsaWRhJyxcbiAgICB9KTtcblxuICAgIHJldHVybiBlcztcblxufSkpKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/es.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/et.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/et.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Estonian [et]\n//! author : Henry Kehlmann : https://github.com/madhenry\n//! improvements : Illimar Tambek : https://github.com/ragulka\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            s: ['mõne sekundi', 'mõni sekund', 'paar sekundit'],\n            ss: [number + 'sekundi', number + 'sekundit'],\n            m: ['ühe minuti', 'üks minut'],\n            mm: [number + ' minuti', number + ' minutit'],\n            h: ['ühe tunni', 'tund aega', 'üks tund'],\n            hh: [number + ' tunni', number + ' tundi'],\n            d: ['ühe päeva', 'üks päev'],\n            M: ['kuu aja', 'kuu aega', 'üks kuu'],\n            MM: [number + ' kuu', number + ' kuud'],\n            y: ['ühe aasta', 'aasta', 'üks aasta'],\n            yy: [number + ' aasta', number + ' aastat'],\n        };\n        if (withoutSuffix) {\n            return format[key][2] ? format[key][2] : format[key][1];\n        }\n        return isFuture ? format[key][0] : format[key][1];\n    }\n\n    var et = moment.defineLocale('et', {\n        months: 'jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember'.split(\n            '_'\n        ),\n        monthsShort:\n            'jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets'.split('_'),\n        weekdays:\n            'pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev'.split(\n                '_'\n            ),\n        weekdaysShort: 'P_E_T_K_N_R_L'.split('_'),\n        weekdaysMin: 'P_E_T_K_N_R_L'.split('_'),\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm',\n            LLLL: 'dddd, D. MMMM YYYY H:mm',\n        },\n        calendar: {\n            sameDay: '[Täna,] LT',\n            nextDay: '[Homme,] LT',\n            nextWeek: '[Järgmine] dddd LT',\n            lastDay: '[Eile,] LT',\n            lastWeek: '[Eelmine] dddd LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s pärast',\n            past: '%s tagasi',\n            s: processRelativeTime,\n            ss: processRelativeTime,\n            m: processRelativeTime,\n            mm: processRelativeTime,\n            h: processRelativeTime,\n            hh: processRelativeTime,\n            d: processRelativeTime,\n            dd: '%d päeva',\n            M: processRelativeTime,\n            MM: processRelativeTime,\n            y: processRelativeTime,\n            yy: processRelativeTime,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return et;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ldC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsa0RBQVc7QUFDckUsR0FBRyxDQUNzQjtBQUN6QixDQUFDLDRCQUE0Qjs7QUFFN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2V0LmpzP2VmOTEiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEVzdG9uaWFuIFtldF1cbi8vISBhdXRob3IgOiBIZW5yeSBLZWhsbWFubiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9tYWRoZW5yeVxuLy8hIGltcHJvdmVtZW50cyA6IElsbGltYXIgVGFtYmVrIDogaHR0cHM6Ly9naXRodWIuY29tL3JhZ3Vsa2FcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIGZ1bmN0aW9uIHByb2Nlc3NSZWxhdGl2ZVRpbWUobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXksIGlzRnV0dXJlKSB7XG4gICAgICAgIHZhciBmb3JtYXQgPSB7XG4gICAgICAgICAgICBzOiBbJ23DtW5lIHNla3VuZGknLCAnbcO1bmkgc2VrdW5kJywgJ3BhYXIgc2VrdW5kaXQnXSxcbiAgICAgICAgICAgIHNzOiBbbnVtYmVyICsgJ3Nla3VuZGknLCBudW1iZXIgKyAnc2VrdW5kaXQnXSxcbiAgICAgICAgICAgIG06IFsnw7xoZSBtaW51dGknLCAnw7xrcyBtaW51dCddLFxuICAgICAgICAgICAgbW06IFtudW1iZXIgKyAnIG1pbnV0aScsIG51bWJlciArICcgbWludXRpdCddLFxuICAgICAgICAgICAgaDogWyfDvGhlIHR1bm5pJywgJ3R1bmQgYWVnYScsICfDvGtzIHR1bmQnXSxcbiAgICAgICAgICAgIGhoOiBbbnVtYmVyICsgJyB0dW5uaScsIG51bWJlciArICcgdHVuZGknXSxcbiAgICAgICAgICAgIGQ6IFsnw7xoZSBww6RldmEnLCAnw7xrcyBww6RldiddLFxuICAgICAgICAgICAgTTogWydrdXUgYWphJywgJ2t1dSBhZWdhJywgJ8O8a3Mga3V1J10sXG4gICAgICAgICAgICBNTTogW251bWJlciArICcga3V1JywgbnVtYmVyICsgJyBrdXVkJ10sXG4gICAgICAgICAgICB5OiBbJ8O8aGUgYWFzdGEnLCAnYWFzdGEnLCAnw7xrcyBhYXN0YSddLFxuICAgICAgICAgICAgeXk6IFtudW1iZXIgKyAnIGFhc3RhJywgbnVtYmVyICsgJyBhYXN0YXQnXSxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXRba2V5XVsyXSA/IGZvcm1hdFtrZXldWzJdIDogZm9ybWF0W2tleV1bMV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzRnV0dXJlID8gZm9ybWF0W2tleV1bMF0gOiBmb3JtYXRba2V5XVsxXTtcbiAgICB9XG5cbiAgICB2YXIgZXQgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdldCcsIHtcbiAgICAgICAgbW9udGhzOiAnamFhbnVhcl92ZWVicnVhcl9tw6RydHNfYXByaWxsX21haV9qdXVuaV9qdXVsaV9hdWd1c3Rfc2VwdGVtYmVyX29rdG9vYmVyX25vdmVtYmVyX2RldHNlbWJlcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAnamFhbl92ZWVicl9tw6RydHNfYXByX21haV9qdXVuaV9qdXVsaV9hdWdfc2VwdF9va3Rfbm92X2RldHMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOlxuICAgICAgICAgICAgJ3DDvGhhcMOkZXZfZXNtYXNww6Rldl90ZWlzaXDDpGV2X2tvbG1hcMOkZXZfbmVsamFww6Rldl9yZWVkZV9sYXVww6Rldicuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnUF9FX1RfS19OX1JfTCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdQX0VfVF9LX05fUl9MJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0g6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdELiBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRC4gTU1NTSBZWVlZIEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQuIE1NTU0gWVlZWSBIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbVMOkbmEsXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW0hvbW1lLF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdbSsOkcmdtaW5lXSBkZGRkIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbRWlsZSxdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW0VlbG1pbmVdIGRkZGQgTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICclcyBww6RyYXN0JyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyB0YWdhc2knLFxuICAgICAgICAgICAgczogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHNzOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgbTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIG1tOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgaDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGhoOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgZDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGRkOiAnJWQgcMOkZXZhJyxcbiAgICAgICAgICAgIE06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBNTTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHk6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICB5eTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9XFwuLyxcbiAgICAgICAgb3JkaW5hbDogJyVkLicsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBldDtcblxufSkpKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/et.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/eu.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/eu.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Basque [eu]\n//! author : Eneko Illarramendi : https://github.com/eillarra\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var eu = moment.defineLocale('eu', {\n        months: 'urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua'.split(\n            '_'\n        ),\n        monthsShort:\n            'urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays:\n            'igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata'.split(\n                '_'\n            ),\n        weekdaysShort: 'ig._al._ar._az._og._ol._lr.'.split('_'),\n        weekdaysMin: 'ig_al_ar_az_og_ol_lr'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY-MM-DD',\n            LL: 'YYYY[ko] MMMM[ren] D[a]',\n            LLL: 'YYYY[ko] MMMM[ren] D[a] HH:mm',\n            LLLL: 'dddd, YYYY[ko] MMMM[ren] D[a] HH:mm',\n            l: 'YYYY-M-D',\n            ll: 'YYYY[ko] MMM D[a]',\n            lll: 'YYYY[ko] MMM D[a] HH:mm',\n            llll: 'ddd, YYYY[ko] MMM D[a] HH:mm',\n        },\n        calendar: {\n            sameDay: '[gaur] LT[etan]',\n            nextDay: '[bihar] LT[etan]',\n            nextWeek: 'dddd LT[etan]',\n            lastDay: '[atzo] LT[etan]',\n            lastWeek: '[aurreko] dddd LT[etan]',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s barru',\n            past: 'duela %s',\n            s: 'segundo batzuk',\n            ss: '%d segundo',\n            m: 'minutu bat',\n            mm: '%d minutu',\n            h: 'ordu bat',\n            hh: '%d ordu',\n            d: 'egun bat',\n            dd: '%d egun',\n            M: 'hilabete bat',\n            MM: '%d hilabete',\n            y: 'urte bat',\n            yy: '%d urte',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return eu;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ldS5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZXUuanM/ZDczNSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogQmFzcXVlIFtldV1cbi8vISBhdXRob3IgOiBFbmVrbyBJbGxhcnJhbWVuZGkgOiBodHRwczovL2dpdGh1Yi5jb20vZWlsbGFycmFcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBldSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2V1Jywge1xuICAgICAgICBtb250aHM6ICd1cnRhcnJpbGFfb3RzYWlsYV9tYXJ0eG9hX2FwaXJpbGFfbWFpYXR6YV9la2FpbmFfdXp0YWlsYV9hYnV6dHVhX2lyYWlsYV91cnJpYV9hemFyb2FfYWJlbmR1YScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAndXJ0Ll9vdHMuX21hci5fYXBpLl9tYWkuX2VrYS5fdXp0Ll9hYnUuX2lyYS5fdXJyLl9hemEuX2FiZS4nLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6XG4gICAgICAgICAgICAnaWdhbmRlYV9hc3RlbGVoZW5hX2FzdGVhcnRlYV9hc3RlYXprZW5hX29zdGVndW5hX29zdGlyYWxhX2xhcnVuYmF0YScuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnaWcuX2FsLl9hci5fYXouX29nLl9vbC5fbHIuJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ2lnX2FsX2FyX2F6X29nX29sX2xyJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdZWVlZLU1NLUREJyxcbiAgICAgICAgICAgIExMOiAnWVlZWVtrb10gTU1NTVtyZW5dIERbYV0nLFxuICAgICAgICAgICAgTExMOiAnWVlZWVtrb10gTU1NTVtyZW5dIERbYV0gSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIFlZWVlba29dIE1NTU1bcmVuXSBEW2FdIEhIOm1tJyxcbiAgICAgICAgICAgIGw6ICdZWVlZLU0tRCcsXG4gICAgICAgICAgICBsbDogJ1lZWVlba29dIE1NTSBEW2FdJyxcbiAgICAgICAgICAgIGxsbDogJ1lZWVlba29dIE1NTSBEW2FdIEhIOm1tJyxcbiAgICAgICAgICAgIGxsbGw6ICdkZGQsIFlZWVlba29dIE1NTSBEW2FdIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbZ2F1cl0gTFRbZXRhbl0nLFxuICAgICAgICAgICAgbmV4dERheTogJ1tiaWhhcl0gTFRbZXRhbl0nLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIExUW2V0YW5dJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbYXR6b10gTFRbZXRhbl0nLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbYXVycmVrb10gZGRkZCBMVFtldGFuXScsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVzIGJhcnJ1JyxcbiAgICAgICAgICAgIHBhc3Q6ICdkdWVsYSAlcycsXG4gICAgICAgICAgICBzOiAnc2VndW5kbyBiYXR6dWsnLFxuICAgICAgICAgICAgc3M6ICclZCBzZWd1bmRvJyxcbiAgICAgICAgICAgIG06ICdtaW51dHUgYmF0JyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludXR1JyxcbiAgICAgICAgICAgIGg6ICdvcmR1IGJhdCcsXG4gICAgICAgICAgICBoaDogJyVkIG9yZHUnLFxuICAgICAgICAgICAgZDogJ2VndW4gYmF0JyxcbiAgICAgICAgICAgIGRkOiAnJWQgZWd1bicsXG4gICAgICAgICAgICBNOiAnaGlsYWJldGUgYmF0JyxcbiAgICAgICAgICAgIE1NOiAnJWQgaGlsYWJldGUnLFxuICAgICAgICAgICAgeTogJ3VydGUgYmF0JyxcbiAgICAgICAgICAgIHl5OiAnJWQgdXJ0ZScsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWw6ICclZC4nLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA3LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA3dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZXU7XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/eu.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/fa.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/fa.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Persian [fa]\n//! author : Ebrahim Byagowi : https://github.com/ebraminio\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '۱',\n            2: '۲',\n            3: '۳',\n            4: '۴',\n            5: '۵',\n            6: '۶',\n            7: '۷',\n            8: '۸',\n            9: '۹',\n            0: '۰',\n        },\n        numberMap = {\n            '۱': '1',\n            '۲': '2',\n            '۳': '3',\n            '۴': '4',\n            '۵': '5',\n            '۶': '6',\n            '۷': '7',\n            '۸': '8',\n            '۹': '9',\n            '۰': '0',\n        };\n\n    var fa = moment.defineLocale('fa', {\n        months: 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split(\n            '_'\n        ),\n        monthsShort:\n            'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split(\n                '_'\n            ),\n        weekdays:\n            'یک\\u200cشنبه_دوشنبه_سه\\u200cشنبه_چهارشنبه_پنج\\u200cشنبه_جمعه_شنبه'.split(\n                '_'\n            ),\n        weekdaysShort:\n            'یک\\u200cشنبه_دوشنبه_سه\\u200cشنبه_چهارشنبه_پنج\\u200cشنبه_جمعه_شنبه'.split(\n                '_'\n            ),\n        weekdaysMin: 'ی_د_س_چ_پ_ج_ش'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /قبل از ظهر|بعد از ظهر/,\n        isPM: function (input) {\n            return /بعد از ظهر/.test(input);\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'قبل از ظهر';\n            } else {\n                return 'بعد از ظهر';\n            }\n        },\n        calendar: {\n            sameDay: '[امروز ساعت] LT',\n            nextDay: '[فردا ساعت] LT',\n            nextWeek: 'dddd [ساعت] LT',\n            lastDay: '[دیروز ساعت] LT',\n            lastWeek: 'dddd [پیش] [ساعت] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'در %s',\n            past: '%s پیش',\n            s: 'چند ثانیه',\n            ss: '%d ثانیه',\n            m: 'یک دقیقه',\n            mm: '%d دقیقه',\n            h: 'یک ساعت',\n            hh: '%d ساعت',\n            d: 'یک روز',\n            dd: '%d روز',\n            M: 'یک ماه',\n            MM: '%d ماه',\n            y: 'یک سال',\n            yy: '%d سال',\n        },\n        preparse: function (string) {\n            return string\n                .replace(/[۰-۹]/g, function (match) {\n                    return numberMap[match];\n                })\n                .replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string\n                .replace(/\\d/g, function (match) {\n                    return symbolMap[match];\n                })\n                .replace(/,/g, '،');\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}م/,\n        ordinal: '%dم',\n        week: {\n            dow: 6, // Saturday is the first day of the week.\n            doy: 12, // The week that contains Jan 12th is the first week of the year.\n        },\n    });\n\n    return fa;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9mYS5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZmEuanM/NzljNCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogUGVyc2lhbiBbZmFdXG4vLyEgYXV0aG9yIDogRWJyYWhpbSBCeWFnb3dpIDogaHR0cHM6Ly9naXRodWIuY29tL2VicmFtaW5pb1xuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHN5bWJvbE1hcCA9IHtcbiAgICAgICAgICAgIDE6ICfbsScsXG4gICAgICAgICAgICAyOiAn27InLFxuICAgICAgICAgICAgMzogJ9uzJyxcbiAgICAgICAgICAgIDQ6ICfbtCcsXG4gICAgICAgICAgICA1OiAn27UnLFxuICAgICAgICAgICAgNjogJ9u2JyxcbiAgICAgICAgICAgIDc6ICfbtycsXG4gICAgICAgICAgICA4OiAn27gnLFxuICAgICAgICAgICAgOTogJ9u5JyxcbiAgICAgICAgICAgIDA6ICfbsCcsXG4gICAgICAgIH0sXG4gICAgICAgIG51bWJlck1hcCA9IHtcbiAgICAgICAgICAgICfbsSc6ICcxJyxcbiAgICAgICAgICAgICfbsic6ICcyJyxcbiAgICAgICAgICAgICfbsyc6ICczJyxcbiAgICAgICAgICAgICfbtCc6ICc0JyxcbiAgICAgICAgICAgICfbtSc6ICc1JyxcbiAgICAgICAgICAgICfbtic6ICc2JyxcbiAgICAgICAgICAgICfbtyc6ICc3JyxcbiAgICAgICAgICAgICfbuCc6ICc4JyxcbiAgICAgICAgICAgICfbuSc6ICc5JyxcbiAgICAgICAgICAgICfbsCc6ICcwJyxcbiAgICAgICAgfTtcblxuICAgIHZhciBmYSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2ZhJywge1xuICAgICAgICBtb250aHM6ICfamNin2YbZiNuM2Ydf2YHZiNix24zZh1/Zhdin2LHYs1/YotmI2LHbjNmEX9mF2Ydf2pjZiNim2YZf2pjZiNim24zZh1/Yp9mI2Kpf2LPZvtiq2KfZhdio2LFf2Kfaqdiq2KjYsV/ZhtmI2KfZhdio2LFf2K/Ys9in2YXYqNixJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICfamNin2YbZiNuM2Ydf2YHZiNix24zZh1/Zhdin2LHYs1/YotmI2LHbjNmEX9mF2Ydf2pjZiNim2YZf2pjZiNim24zZh1/Yp9mI2Kpf2LPZvtiq2KfZhdio2LFf2Kfaqdiq2KjYsV/ZhtmI2KfZhdio2LFf2K/Ys9in2YXYqNixJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzOlxuICAgICAgICAgICAgJ9uM2qlcXHUyMDBj2LTZhtio2Ydf2K/ZiNi02YbYqNmHX9iz2YdcXHUyMDBj2LTZhtio2Ydf2obZh9in2LHYtNmG2KjZh1/ZvtmG2KxcXHUyMDBj2LTZhtio2Ydf2KzZhdi52Ydf2LTZhtio2YcnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDpcbiAgICAgICAgICAgICfbjNqpXFx1MjAwY9i02YbYqNmHX9iv2YjYtNmG2KjZh1/Ys9mHXFx1MjAwY9i02YbYqNmHX9qG2YfYp9ix2LTZhtio2Ydf2b7ZhtisXFx1MjAwY9i02YbYqNmHX9is2YXYudmHX9i02YbYqNmHJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn24xf2K9f2LNf2oZf2b5f2Kxf2LQnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv2YLYqNmEINin2LIg2LjZh9ixfNio2LnYryDYp9iyINi42YfYsS8sXG4gICAgICAgIGlzUE06IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIC/YqNi52K8g2KfYsiDYuNmH2LEvLnRlc3QoaW5wdXQpO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn2YLYqNmEINin2LIg2LjZh9ixJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfYqNi52K8g2KfYsiDYuNmH2LEnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vYp9mF2LHZiNiyINiz2KfYudiqXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW9mB2LHYr9inINiz2KfYudiqXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW9iz2KfYudiqXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW9iv24zYsdmI2LIg2LPYp9i52KpdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnZGRkZCBb2b7bjNi0XSBb2LPYp9i52KpdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAn2K/YsSAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMg2b7bjNi0JyxcbiAgICAgICAgICAgIHM6ICfahtmG2K8g2KvYp9mG24zZhycsXG4gICAgICAgICAgICBzczogJyVkINir2KfZhtuM2YcnLFxuICAgICAgICAgICAgbTogJ9uM2qkg2K/ZgtuM2YLZhycsXG4gICAgICAgICAgICBtbTogJyVkINiv2YLbjNmC2YcnLFxuICAgICAgICAgICAgaDogJ9uM2qkg2LPYp9i52KonLFxuICAgICAgICAgICAgaGg6ICclZCDYs9in2LnYqicsXG4gICAgICAgICAgICBkOiAn24zaqSDYsdmI2LInLFxuICAgICAgICAgICAgZGQ6ICclZCDYsdmI2LInLFxuICAgICAgICAgICAgTTogJ9uM2qkg2YXYp9mHJyxcbiAgICAgICAgICAgIE1NOiAnJWQg2YXYp9mHJyxcbiAgICAgICAgICAgIHk6ICfbjNqpINiz2KfZhCcsXG4gICAgICAgICAgICB5eTogJyVkINiz2KfZhCcsXG4gICAgICAgIH0sXG4gICAgICAgIHByZXBhcnNlOiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL1vbsC3buV0vZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXJNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL9iML2csICcsJyk7XG4gICAgICAgIH0sXG4gICAgICAgIHBvc3Rmb3JtYXQ6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmdcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxkL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3ltYm9sTWFwW21hdGNoXTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8sL2csICfYjCcpO1xuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn3ZhS8sXG4gICAgICAgIG9yZGluYWw6ICclZNmFJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiA2LCAvLyBTYXR1cmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiAxMiwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gMTJ0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBmYTtcblxufSkpKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/fa.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/fi.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/fi.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Finnish [fi]\n//! author : Tarmo Aidantausta : https://github.com/bleadof\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var numbersPast =\n            'nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän'.split(\n                ' '\n            ),\n        numbersFuture = [\n            'nolla',\n            'yhden',\n            'kahden',\n            'kolmen',\n            'neljän',\n            'viiden',\n            'kuuden',\n            numbersPast[7],\n            numbersPast[8],\n            numbersPast[9],\n        ];\n    function translate(number, withoutSuffix, key, isFuture) {\n        var result = '';\n        switch (key) {\n            case 's':\n                return isFuture ? 'muutaman sekunnin' : 'muutama sekunti';\n            case 'ss':\n                result = isFuture ? 'sekunnin' : 'sekuntia';\n                break;\n            case 'm':\n                return isFuture ? 'minuutin' : 'minuutti';\n            case 'mm':\n                result = isFuture ? 'minuutin' : 'minuuttia';\n                break;\n            case 'h':\n                return isFuture ? 'tunnin' : 'tunti';\n            case 'hh':\n                result = isFuture ? 'tunnin' : 'tuntia';\n                break;\n            case 'd':\n                return isFuture ? 'päivän' : 'päivä';\n            case 'dd':\n                result = isFuture ? 'päivän' : 'päivää';\n                break;\n            case 'M':\n                return isFuture ? 'kuukauden' : 'kuukausi';\n            case 'MM':\n                result = isFuture ? 'kuukauden' : 'kuukautta';\n                break;\n            case 'y':\n                return isFuture ? 'vuoden' : 'vuosi';\n            case 'yy':\n                result = isFuture ? 'vuoden' : 'vuotta';\n                break;\n        }\n        result = verbalNumber(number, isFuture) + ' ' + result;\n        return result;\n    }\n    function verbalNumber(number, isFuture) {\n        return number < 10\n            ? isFuture\n                ? numbersFuture[number]\n                : numbersPast[number]\n            : number;\n    }\n\n    var fi = moment.defineLocale('fi', {\n        months: 'tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu'.split(\n            '_'\n        ),\n        monthsShort:\n            'tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu'.split(\n                '_'\n            ),\n        weekdays:\n            'sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai'.split(\n                '_'\n            ),\n        weekdaysShort: 'su_ma_ti_ke_to_pe_la'.split('_'),\n        weekdaysMin: 'su_ma_ti_ke_to_pe_la'.split('_'),\n        longDateFormat: {\n            LT: 'HH.mm',\n            LTS: 'HH.mm.ss',\n            L: 'DD.MM.YYYY',\n            LL: 'Do MMMM[ta] YYYY',\n            LLL: 'Do MMMM[ta] YYYY, [klo] HH.mm',\n            LLLL: 'dddd, Do MMMM[ta] YYYY, [klo] HH.mm',\n            l: 'D.M.YYYY',\n            ll: 'Do MMM YYYY',\n            lll: 'Do MMM YYYY, [klo] HH.mm',\n            llll: 'ddd, Do MMM YYYY, [klo] HH.mm',\n        },\n        calendar: {\n            sameDay: '[tänään] [klo] LT',\n            nextDay: '[huomenna] [klo] LT',\n            nextWeek: 'dddd [klo] LT',\n            lastDay: '[eilen] [klo] LT',\n            lastWeek: '[viime] dddd[na] [klo] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s päästä',\n            past: '%s sitten',\n            s: translate,\n            ss: translate,\n            m: translate,\n            mm: translate,\n            h: translate,\n            hh: translate,\n            d: translate,\n            dd: translate,\n            M: translate,\n            MM: translate,\n            y: translate,\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return fi;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9maS5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZmkuanM/MGUyYyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogRmlubmlzaCBbZmldXG4vLyEgYXV0aG9yIDogVGFybW8gQWlkYW50YXVzdGEgOiBodHRwczovL2dpdGh1Yi5jb20vYmxlYWRvZlxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIG51bWJlcnNQYXN0ID1cbiAgICAgICAgICAgICdub2xsYSB5a3NpIGtha3NpIGtvbG1lIG5lbGrDpCB2aWlzaSBrdXVzaSBzZWl0c2Vtw6RuIGthaGRla3NhbiB5aGRla3PDpG4nLnNwbGl0KFxuICAgICAgICAgICAgICAgICcgJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgbnVtYmVyc0Z1dHVyZSA9IFtcbiAgICAgICAgICAgICdub2xsYScsXG4gICAgICAgICAgICAneWhkZW4nLFxuICAgICAgICAgICAgJ2thaGRlbicsXG4gICAgICAgICAgICAna29sbWVuJyxcbiAgICAgICAgICAgICduZWxqw6RuJyxcbiAgICAgICAgICAgICd2aWlkZW4nLFxuICAgICAgICAgICAgJ2t1dWRlbicsXG4gICAgICAgICAgICBudW1iZXJzUGFzdFs3XSxcbiAgICAgICAgICAgIG51bWJlcnNQYXN0WzhdLFxuICAgICAgICAgICAgbnVtYmVyc1Bhc3RbOV0sXG4gICAgICAgIF07XG4gICAgZnVuY3Rpb24gdHJhbnNsYXRlKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5LCBpc0Z1dHVyZSkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gJyc7XG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlICdzJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNGdXR1cmUgPyAnbXV1dGFtYW4gc2VrdW5uaW4nIDogJ211dXRhbWEgc2VrdW50aSc7XG4gICAgICAgICAgICBjYXNlICdzcyc6XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gaXNGdXR1cmUgPyAnc2VrdW5uaW4nIDogJ3Nla3VudGlhJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ20nOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc0Z1dHVyZSA/ICdtaW51dXRpbicgOiAnbWludXV0dGknO1xuICAgICAgICAgICAgY2FzZSAnbW0nOlxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGlzRnV0dXJlID8gJ21pbnV1dGluJyA6ICdtaW51dXR0aWEnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzRnV0dXJlID8gJ3R1bm5pbicgOiAndHVudGknO1xuICAgICAgICAgICAgY2FzZSAnaGgnOlxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGlzRnV0dXJlID8gJ3R1bm5pbicgOiAndHVudGlhJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc0Z1dHVyZSA/ICdww6RpdsOkbicgOiAncMOkaXbDpCc7XG4gICAgICAgICAgICBjYXNlICdkZCc6XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gaXNGdXR1cmUgPyAncMOkaXbDpG4nIDogJ3DDpGl2w6TDpCc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdNJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNGdXR1cmUgPyAna3V1a2F1ZGVuJyA6ICdrdXVrYXVzaSc7XG4gICAgICAgICAgICBjYXNlICdNTSc6XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gaXNGdXR1cmUgPyAna3V1a2F1ZGVuJyA6ICdrdXVrYXV0dGEnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAneSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzRnV0dXJlID8gJ3Z1b2RlbicgOiAndnVvc2knO1xuICAgICAgICAgICAgY2FzZSAneXknOlxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGlzRnV0dXJlID8gJ3Z1b2RlbicgOiAndnVvdHRhJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQgPSB2ZXJiYWxOdW1iZXIobnVtYmVyLCBpc0Z1dHVyZSkgKyAnICcgKyByZXN1bHQ7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHZlcmJhbE51bWJlcihudW1iZXIsIGlzRnV0dXJlKSB7XG4gICAgICAgIHJldHVybiBudW1iZXIgPCAxMFxuICAgICAgICAgICAgPyBpc0Z1dHVyZVxuICAgICAgICAgICAgICAgID8gbnVtYmVyc0Z1dHVyZVtudW1iZXJdXG4gICAgICAgICAgICAgICAgOiBudW1iZXJzUGFzdFtudW1iZXJdXG4gICAgICAgICAgICA6IG51bWJlcjtcbiAgICB9XG5cbiAgICB2YXIgZmkgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdmaScsIHtcbiAgICAgICAgbW9udGhzOiAndGFtbWlrdXVfaGVsbWlrdXVfbWFhbGlza3V1X2h1aHRpa3V1X3RvdWtva3V1X2tlc8Oka3V1X2hlaW7DpGt1dV9lbG9rdXVfc3l5c2t1dV9sb2tha3V1X21hcnJhc2t1dV9qb3VsdWt1dScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAndGFtbWlfaGVsbWlfbWFhbGlzX2h1aHRpX3RvdWtvX2tlc8OkX2hlaW7DpF9lbG9fc3l5c19sb2thX21hcnJhc19qb3VsdScuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5czpcbiAgICAgICAgICAgICdzdW5udW50YWlfbWFhbmFudGFpX3RpaXN0YWlfa2Vza2l2aWlra29fdG9yc3RhaV9wZXJqYW50YWlfbGF1YW50YWknLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ3N1X21hX3RpX2tlX3RvX3BlX2xhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ3N1X21hX3RpX2tlX3RvX3BlX2xhJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISC5tbScsXG4gICAgICAgICAgICBMVFM6ICdISC5tbS5zcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0RvIE1NTU1bdGFdIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRG8gTU1NTVt0YV0gWVlZWSwgW2tsb10gSEgubW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIERvIE1NTU1bdGFdIFlZWVksIFtrbG9dIEhILm1tJyxcbiAgICAgICAgICAgIGw6ICdELk0uWVlZWScsXG4gICAgICAgICAgICBsbDogJ0RvIE1NTSBZWVlZJyxcbiAgICAgICAgICAgIGxsbDogJ0RvIE1NTSBZWVlZLCBba2xvXSBISC5tbScsXG4gICAgICAgICAgICBsbGxsOiAnZGRkLCBEbyBNTU0gWVlZWSwgW2tsb10gSEgubW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1t0w6Ruw6TDpG5dIFtrbG9dIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbaHVvbWVubmFdIFtrbG9dIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBba2xvXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW2VpbGVuXSBba2xvXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1t2aWltZV0gZGRkZFtuYV0gW2tsb10gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICclcyBww6TDpHN0w6QnLFxuICAgICAgICAgICAgcGFzdDogJyVzIHNpdHRlbicsXG4gICAgICAgICAgICBzOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBzczogdHJhbnNsYXRlLFxuICAgICAgICAgICAgbTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgbW06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGg6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGhoOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBkOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBkZDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgTTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgTU06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIHk6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIHl5OiB0cmFuc2xhdGUsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWw6ICclZC4nLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZmk7XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/fi.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/fil.js":
/*!*******************************************!*\
  !*** ./node_modules/moment/locale/fil.js ***!
  \*******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Filipino [fil]\n//! author : Dan Hagman : https://github.com/hagmandan\n//! author : Matthew Co : https://github.com/matthewdeeco\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var fil = moment.defineLocale('fil', {\n        months: 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split(\n            '_'\n        ),\n        monthsShort: 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'),\n        weekdays: 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split(\n            '_'\n        ),\n        weekdaysShort: 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'),\n        weekdaysMin: 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'MM/D/YYYY',\n            LL: 'MMMM D, YYYY',\n            LLL: 'MMMM D, YYYY HH:mm',\n            LLLL: 'dddd, MMMM DD, YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: 'LT [ngayong araw]',\n            nextDay: '[Bukas ng] LT',\n            nextWeek: 'LT [sa susunod na] dddd',\n            lastDay: 'LT [kahapon]',\n            lastWeek: 'LT [noong nakaraang] dddd',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'sa loob ng %s',\n            past: '%s ang nakalipas',\n            s: 'ilang segundo',\n            ss: '%d segundo',\n            m: 'isang minuto',\n            mm: '%d minuto',\n            h: 'isang oras',\n            hh: '%d oras',\n            d: 'isang araw',\n            dd: '%d araw',\n            M: 'isang buwan',\n            MM: '%d buwan',\n            y: 'isang taon',\n            yy: '%d taon',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}/,\n        ordinal: function (number) {\n            return number;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return fil;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9maWwuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2ZpbC5qcz8yOGZlIl0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBGaWxpcGlubyBbZmlsXVxuLy8hIGF1dGhvciA6IERhbiBIYWdtYW4gOiBodHRwczovL2dpdGh1Yi5jb20vaGFnbWFuZGFuXG4vLyEgYXV0aG9yIDogTWF0dGhldyBDbyA6IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0aGV3ZGVlY29cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBmaWwgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdmaWwnLCB7XG4gICAgICAgIG1vbnRoczogJ0VuZXJvX1BlYnJlcm9fTWFyc29fQWJyaWxfTWF5b19IdW55b19IdWx5b19BZ29zdG9fU2V0eWVtYnJlX09rdHVicmVfTm9ieWVtYnJlX0Rpc3llbWJyZScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdFbmVfUGViX01hcl9BYnJfTWF5X0h1bl9IdWxfQWdvX1NldF9Pa3RfTm9iX0Rpcycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICdMaW5nZ29fTHVuZXNfTWFydGVzX01peWVya3VsZXNfSHV3ZWJlc19CaXllcm5lc19TYWJhZG8nLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdMaW5fTHVuX01hcl9NaXlfSHV3X0JpeV9TYWInLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnTGlfTHVfTWFfTWlfSHVfQmlfU2FiJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnTU0vRC9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnTU1NTSBELCBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ01NTU0gRCwgWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgTU1NTSBERCwgWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnTFQgW25nYXlvbmcgYXJhd10nLFxuICAgICAgICAgICAgbmV4dERheTogJ1tCdWthcyBuZ10gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdMVCBbc2Egc3VzdW5vZCBuYV0gZGRkZCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnTFQgW2thaGFwb25dJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnTFQgW25vb25nIG5ha2FyYWFuZ10gZGRkZCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ3NhIGxvb2IgbmcgJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzIGFuZyBuYWthbGlwYXMnLFxuICAgICAgICAgICAgczogJ2lsYW5nIHNlZ3VuZG8nLFxuICAgICAgICAgICAgc3M6ICclZCBzZWd1bmRvJyxcbiAgICAgICAgICAgIG06ICdpc2FuZyBtaW51dG8nLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dG8nLFxuICAgICAgICAgICAgaDogJ2lzYW5nIG9yYXMnLFxuICAgICAgICAgICAgaGg6ICclZCBvcmFzJyxcbiAgICAgICAgICAgIGQ6ICdpc2FuZyBhcmF3JyxcbiAgICAgICAgICAgIGRkOiAnJWQgYXJhdycsXG4gICAgICAgICAgICBNOiAnaXNhbmcgYnV3YW4nLFxuICAgICAgICAgICAgTU06ICclZCBidXdhbicsXG4gICAgICAgICAgICB5OiAnaXNhbmcgdGFvbicsXG4gICAgICAgICAgICB5eTogJyVkIHRhb24nLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0vLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZmlsO1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/fil.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/fo.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/fo.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Faroese [fo]\n//! author : Ragnar Johannesen : https://github.com/ragnar123\n//! author : Kristian Sakarisson : https://github.com/sakarisson\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var fo = moment.defineLocale('fo', {\n        months: 'januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember'.split(\n            '_'\n        ),\n        monthsShort: 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),\n        weekdays:\n            'sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur'.split(\n                '_'\n            ),\n        weekdaysShort: 'sun_mán_týs_mik_hós_frí_ley'.split('_'),\n        weekdaysMin: 'su_má_tý_mi_hó_fr_le'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D. MMMM, YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Í dag kl.] LT',\n            nextDay: '[Í morgin kl.] LT',\n            nextWeek: 'dddd [kl.] LT',\n            lastDay: '[Í gjár kl.] LT',\n            lastWeek: '[síðstu] dddd [kl] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'um %s',\n            past: '%s síðani',\n            s: 'fá sekund',\n            ss: '%d sekundir',\n            m: 'ein minuttur',\n            mm: '%d minuttir',\n            h: 'ein tími',\n            hh: '%d tímar',\n            d: 'ein dagur',\n            dd: '%d dagar',\n            M: 'ein mánaður',\n            MM: '%d mánaðir',\n            y: 'eitt ár',\n            yy: '%d ár',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return fo;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9mby5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsa0RBQVc7QUFDckUsR0FBRyxDQUNzQjtBQUN6QixDQUFDLDRCQUE0Qjs7QUFFN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxvQ0FBb0MsSUFBSTtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9mby5qcz85YWUzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBGYXJvZXNlIFtmb11cbi8vISBhdXRob3IgOiBSYWduYXIgSm9oYW5uZXNlbiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9yYWduYXIxMjNcbi8vISBhdXRob3IgOiBLcmlzdGlhbiBTYWthcmlzc29uIDogaHR0cHM6Ly9naXRodWIuY29tL3Nha2FyaXNzb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBmbyA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2ZvJywge1xuICAgICAgICBtb250aHM6ICdqYW51YXJfZmVicnVhcl9tYXJzX2FwcsOtbF9tYWlfanVuaV9qdWxpX2F1Z3VzdF9zZXB0ZW1iZXJfb2t0b2Jlcl9ub3ZlbWJlcl9kZXNlbWJlcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdqYW5fZmViX21hcl9hcHJfbWFpX2p1bl9qdWxfYXVnX3NlcF9va3Rfbm92X2Rlcycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6XG4gICAgICAgICAgICAnc3VubnVkYWd1cl9tw6FuYWRhZ3VyX3TDvXNkYWd1cl9taWt1ZGFndXJfaMOzc2RhZ3VyX2Zyw61nZ2phZGFndXJfbGV5Z2FyZGFndXInLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ3N1bl9tw6FuX3TDvXNfbWlrX2jDs3NfZnLDrV9sZXknLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnc3VfbcOhX3TDvV9taV9ow7NfZnJfbGUnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQgRC4gTU1NTSwgWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW8ONIGRhZyBrbC5dIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbw40gbW9yZ2luIGtsLl0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFtrbC5dIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbw40gZ2rDoXIga2wuXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1tzw63DsHN0dV0gZGRkZCBba2xdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAndW0gJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzIHPDrcOwYW5pJyxcbiAgICAgICAgICAgIHM6ICdmw6Egc2VrdW5kJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2VrdW5kaXInLFxuICAgICAgICAgICAgbTogJ2VpbiBtaW51dHR1cicsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0dGlyJyxcbiAgICAgICAgICAgIGg6ICdlaW4gdMOtbWknLFxuICAgICAgICAgICAgaGg6ICclZCB0w61tYXInLFxuICAgICAgICAgICAgZDogJ2VpbiBkYWd1cicsXG4gICAgICAgICAgICBkZDogJyVkIGRhZ2FyJyxcbiAgICAgICAgICAgIE06ICdlaW4gbcOhbmHDsHVyJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbcOhbmHDsGlyJyxcbiAgICAgICAgICAgIHk6ICdlaXR0IMOhcicsXG4gICAgICAgICAgICB5eTogJyVkIMOhcicsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWw6ICclZC4nLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZm87XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/fo.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/fr-ca.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/fr-ca.js ***!
  \*********************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : French (Canada) [fr-ca]\n//! author : Jonathan Abourbih : https://github.com/jonbca\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var frCa = moment.defineLocale('fr-ca', {\n        months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split(\n            '_'\n        ),\n        monthsShort:\n            'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n        weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n        weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY-MM-DD',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Aujourd’hui à] LT',\n            nextDay: '[Demain à] LT',\n            nextWeek: 'dddd [à] LT',\n            lastDay: '[Hier à] LT',\n            lastWeek: 'dddd [dernier à] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'dans %s',\n            past: 'il y a %s',\n            s: 'quelques secondes',\n            ss: '%d secondes',\n            m: 'une minute',\n            mm: '%d minutes',\n            h: 'une heure',\n            hh: '%d heures',\n            d: 'un jour',\n            dd: '%d jours',\n            M: 'un mois',\n            MM: '%d mois',\n            y: 'un an',\n            yy: '%d ans',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(er|e)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                // Words with masculine grammatical gender: mois, trimestre, jour\n                default:\n                case 'M':\n                case 'Q':\n                case 'D':\n                case 'DDD':\n                case 'd':\n                    return number + (number === 1 ? 'er' : 'e');\n\n                // Words with feminine grammatical gender: semaine\n                case 'w':\n                case 'W':\n                    return number + (number === 1 ? 're' : 'e');\n            }\n        },\n    });\n\n    return frCa;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9mci1jYS5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZnItY2EuanM/NTA5YyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogRnJlbmNoIChDYW5hZGEpIFtmci1jYV1cbi8vISBhdXRob3IgOiBKb25hdGhhbiBBYm91cmJpaCA6IGh0dHBzOi8vZ2l0aHViLmNvbS9qb25iY2FcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBmckNhID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZnItY2EnLCB7XG4gICAgICAgIG1vbnRoczogJ2phbnZpZXJfZsOpdnJpZXJfbWFyc19hdnJpbF9tYWlfanVpbl9qdWlsbGV0X2Fvw7t0X3NlcHRlbWJyZV9vY3RvYnJlX25vdmVtYnJlX2TDqWNlbWJyZScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAnamFudi5fZsOpdnIuX21hcnNfYXZyLl9tYWlfanVpbl9qdWlsLl9hb8O7dF9zZXB0Ll9vY3QuX25vdi5fZMOpYy4nLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6ICdkaW1hbmNoZV9sdW5kaV9tYXJkaV9tZXJjcmVkaV9qZXVkaV92ZW5kcmVkaV9zYW1lZGknLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdkaW0uX2x1bi5fbWFyLl9tZXIuX2pldS5fdmVuLl9zYW0uJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ2RpX2x1X21hX21lX2plX3ZlX3NhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdZWVlZLU1NLUREJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tBdWpvdXJk4oCZaHVpIMOgXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW0RlbWFpbiDDoF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFvDoF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tIaWVyIMOgXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW2Rlcm5pZXIgw6BdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnZGFucyAlcycsXG4gICAgICAgICAgICBwYXN0OiAnaWwgeSBhICVzJyxcbiAgICAgICAgICAgIHM6ICdxdWVscXVlcyBzZWNvbmRlcycsXG4gICAgICAgICAgICBzczogJyVkIHNlY29uZGVzJyxcbiAgICAgICAgICAgIG06ICd1bmUgbWludXRlJyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludXRlcycsXG4gICAgICAgICAgICBoOiAndW5lIGhldXJlJyxcbiAgICAgICAgICAgIGhoOiAnJWQgaGV1cmVzJyxcbiAgICAgICAgICAgIGQ6ICd1biBqb3VyJyxcbiAgICAgICAgICAgIGRkOiAnJWQgam91cnMnLFxuICAgICAgICAgICAgTTogJ3VuIG1vaXMnLFxuICAgICAgICAgICAgTU06ICclZCBtb2lzJyxcbiAgICAgICAgICAgIHk6ICd1biBhbicsXG4gICAgICAgICAgICB5eTogJyVkIGFucycsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShlcnxlKS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIsIHBlcmlvZCkge1xuICAgICAgICAgICAgc3dpdGNoIChwZXJpb2QpIHtcbiAgICAgICAgICAgICAgICAvLyBXb3JkcyB3aXRoIG1hc2N1bGluZSBncmFtbWF0aWNhbCBnZW5kZXI6IG1vaXMsIHRyaW1lc3RyZSwgam91clxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgY2FzZSAnTSc6XG4gICAgICAgICAgICAgICAgY2FzZSAnUSc6XG4gICAgICAgICAgICAgICAgY2FzZSAnRCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnREREJzpcbiAgICAgICAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIChudW1iZXIgPT09IDEgPyAnZXInIDogJ2UnKTtcblxuICAgICAgICAgICAgICAgIC8vIFdvcmRzIHdpdGggZmVtaW5pbmUgZ3JhbW1hdGljYWwgZ2VuZGVyOiBzZW1haW5lXG4gICAgICAgICAgICAgICAgY2FzZSAndyc6XG4gICAgICAgICAgICAgICAgY2FzZSAnVyc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAobnVtYmVyID09PSAxID8gJ3JlJyA6ICdlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZnJDYTtcblxufSkpKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/fr-ca.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/fr-ch.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/fr-ch.js ***!
  \*********************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : French (Switzerland) [fr-ch]\n//! author : Gaspard Bucher : https://github.com/gaspard\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var frCh = moment.defineLocale('fr-ch', {\n        months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split(\n            '_'\n        ),\n        monthsShort:\n            'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n        weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n        weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Aujourd’hui à] LT',\n            nextDay: '[Demain à] LT',\n            nextWeek: 'dddd [à] LT',\n            lastDay: '[Hier à] LT',\n            lastWeek: 'dddd [dernier à] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'dans %s',\n            past: 'il y a %s',\n            s: 'quelques secondes',\n            ss: '%d secondes',\n            m: 'une minute',\n            mm: '%d minutes',\n            h: 'une heure',\n            hh: '%d heures',\n            d: 'un jour',\n            dd: '%d jours',\n            M: 'un mois',\n            MM: '%d mois',\n            y: 'un an',\n            yy: '%d ans',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(er|e)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                // Words with masculine grammatical gender: mois, trimestre, jour\n                default:\n                case 'M':\n                case 'Q':\n                case 'D':\n                case 'DDD':\n                case 'd':\n                    return number + (number === 1 ? 'er' : 'e');\n\n                // Words with feminine grammatical gender: semaine\n                case 'w':\n                case 'W':\n                    return number + (number === 1 ? 're' : 'e');\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return frCh;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9mci1jaC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2ZyLWNoLmpzPzczN2UiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEZyZW5jaCAoU3dpdHplcmxhbmQpIFtmci1jaF1cbi8vISBhdXRob3IgOiBHYXNwYXJkIEJ1Y2hlciA6IGh0dHBzOi8vZ2l0aHViLmNvbS9nYXNwYXJkXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgZnJDaCA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2ZyLWNoJywge1xuICAgICAgICBtb250aHM6ICdqYW52aWVyX2bDqXZyaWVyX21hcnNfYXZyaWxfbWFpX2p1aW5fanVpbGxldF9hb8O7dF9zZXB0ZW1icmVfb2N0b2JyZV9ub3ZlbWJyZV9kw6ljZW1icmUnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ2phbnYuX2bDqXZyLl9tYXJzX2F2ci5fbWFpX2p1aW5fanVpbC5fYW/Du3Rfc2VwdC5fb2N0Ll9ub3YuX2TDqWMuJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOiAnZGltYW5jaGVfbHVuZGlfbWFyZGlfbWVyY3JlZGlfamV1ZGlfdmVuZHJlZGlfc2FtZWRpJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnZGltLl9sdW4uX21hci5fbWVyLl9qZXUuX3Zlbi5fc2FtLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdkaV9sdV9tYV9tZV9qZV92ZV9zYScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbQXVqb3VyZOKAmWh1aSDDoF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tEZW1haW4gw6BdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbw6BdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbSGllciDDoF0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFtkZXJuaWVyIMOgXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ2RhbnMgJXMnLFxuICAgICAgICAgICAgcGFzdDogJ2lsIHkgYSAlcycsXG4gICAgICAgICAgICBzOiAncXVlbHF1ZXMgc2Vjb25kZXMnLFxuICAgICAgICAgICAgc3M6ICclZCBzZWNvbmRlcycsXG4gICAgICAgICAgICBtOiAndW5lIG1pbnV0ZScsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0ZXMnLFxuICAgICAgICAgICAgaDogJ3VuZSBoZXVyZScsXG4gICAgICAgICAgICBoaDogJyVkIGhldXJlcycsXG4gICAgICAgICAgICBkOiAndW4gam91cicsXG4gICAgICAgICAgICBkZDogJyVkIGpvdXJzJyxcbiAgICAgICAgICAgIE06ICd1biBtb2lzJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbW9pcycsXG4gICAgICAgICAgICB5OiAndW4gYW4nLFxuICAgICAgICAgICAgeXk6ICclZCBhbnMnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0oZXJ8ZSkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyLCBwZXJpb2QpIHtcbiAgICAgICAgICAgIHN3aXRjaCAocGVyaW9kKSB7XG4gICAgICAgICAgICAgICAgLy8gV29yZHMgd2l0aCBtYXNjdWxpbmUgZ3JhbW1hdGljYWwgZ2VuZGVyOiBtb2lzLCB0cmltZXN0cmUsIGpvdXJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGNhc2UgJ00nOlxuICAgICAgICAgICAgICAgIGNhc2UgJ1EnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0QnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0RERCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAobnVtYmVyID09PSAxID8gJ2VyJyA6ICdlJyk7XG5cbiAgICAgICAgICAgICAgICAvLyBXb3JkcyB3aXRoIGZlbWluaW5lIGdyYW1tYXRpY2FsIGdlbmRlcjogc2VtYWluZVxuICAgICAgICAgICAgICAgIGNhc2UgJ3cnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ1cnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgKG51bWJlciA9PT0gMSA/ICdyZScgOiAnZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZnJDaDtcblxufSkpKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/fr-ch.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/fr.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/fr.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : French [fr]\n//! author : John Fischer : https://github.com/jfroffice\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var monthsStrictRegex =\n            /^(janvier|février|mars|avril|mai|juin|juillet|août|septembre|octobre|novembre|décembre)/i,\n        monthsShortStrictRegex =\n            /(janv\\.?|févr\\.?|mars|avr\\.?|mai|juin|juil\\.?|août|sept\\.?|oct\\.?|nov\\.?|déc\\.?)/i,\n        monthsRegex =\n            /(janv\\.?|févr\\.?|mars|avr\\.?|mai|juin|juil\\.?|août|sept\\.?|oct\\.?|nov\\.?|déc\\.?|janvier|février|mars|avril|mai|juin|juillet|août|septembre|octobre|novembre|décembre)/i,\n        monthsParse = [\n            /^janv/i,\n            /^févr/i,\n            /^mars/i,\n            /^avr/i,\n            /^mai/i,\n            /^juin/i,\n            /^juil/i,\n            /^août/i,\n            /^sept/i,\n            /^oct/i,\n            /^nov/i,\n            /^déc/i,\n        ];\n\n    var fr = moment.defineLocale('fr', {\n        months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split(\n            '_'\n        ),\n        monthsShort:\n            'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split(\n                '_'\n            ),\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex: monthsStrictRegex,\n        monthsShortStrictRegex: monthsShortStrictRegex,\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n        weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n        weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n        weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Aujourd’hui à] LT',\n            nextDay: '[Demain à] LT',\n            nextWeek: 'dddd [à] LT',\n            lastDay: '[Hier à] LT',\n            lastWeek: 'dddd [dernier à] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'dans %s',\n            past: 'il y a %s',\n            s: 'quelques secondes',\n            ss: '%d secondes',\n            m: 'une minute',\n            mm: '%d minutes',\n            h: 'une heure',\n            hh: '%d heures',\n            d: 'un jour',\n            dd: '%d jours',\n            w: 'une semaine',\n            ww: '%d semaines',\n            M: 'un mois',\n            MM: '%d mois',\n            y: 'un an',\n            yy: '%d ans',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(er|)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                // TODO: Return 'e' when day of month > 1. Move this case inside\n                // block for masculine words below.\n                // See https://github.com/moment/moment/issues/3375\n                case 'D':\n                    return number + (number === 1 ? 'er' : '');\n\n                // Words with masculine grammatical gender: mois, trimestre, jour\n                default:\n                case 'M':\n                case 'Q':\n                case 'DDD':\n                case 'd':\n                    return number + (number === 1 ? 'er' : 'e');\n\n                // Words with feminine grammatical gender: semaine\n                case 'w':\n                case 'W':\n                    return number + (number === 1 ? 're' : 'e');\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return fr;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9mci5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2ZyLmpzPzJjMTQiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEZyZW5jaCBbZnJdXG4vLyEgYXV0aG9yIDogSm9obiBGaXNjaGVyIDogaHR0cHM6Ly9naXRodWIuY29tL2pmcm9mZmljZVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIG1vbnRoc1N0cmljdFJlZ2V4ID1cbiAgICAgICAgICAgIC9eKGphbnZpZXJ8ZsOpdnJpZXJ8bWFyc3xhdnJpbHxtYWl8anVpbnxqdWlsbGV0fGFvw7t0fHNlcHRlbWJyZXxvY3RvYnJlfG5vdmVtYnJlfGTDqWNlbWJyZSkvaSxcbiAgICAgICAgbW9udGhzU2hvcnRTdHJpY3RSZWdleCA9XG4gICAgICAgICAgICAvKGphbnZcXC4/fGbDqXZyXFwuP3xtYXJzfGF2clxcLj98bWFpfGp1aW58anVpbFxcLj98YW/Du3R8c2VwdFxcLj98b2N0XFwuP3xub3ZcXC4/fGTDqWNcXC4/KS9pLFxuICAgICAgICBtb250aHNSZWdleCA9XG4gICAgICAgICAgICAvKGphbnZcXC4/fGbDqXZyXFwuP3xtYXJzfGF2clxcLj98bWFpfGp1aW58anVpbFxcLj98YW/Du3R8c2VwdFxcLj98b2N0XFwuP3xub3ZcXC4/fGTDqWNcXC4/fGphbnZpZXJ8ZsOpdnJpZXJ8bWFyc3xhdnJpbHxtYWl8anVpbnxqdWlsbGV0fGFvw7t0fHNlcHRlbWJyZXxvY3RvYnJlfG5vdmVtYnJlfGTDqWNlbWJyZSkvaSxcbiAgICAgICAgbW9udGhzUGFyc2UgPSBbXG4gICAgICAgICAgICAvXmphbnYvaSxcbiAgICAgICAgICAgIC9eZsOpdnIvaSxcbiAgICAgICAgICAgIC9ebWFycy9pLFxuICAgICAgICAgICAgL15hdnIvaSxcbiAgICAgICAgICAgIC9ebWFpL2ksXG4gICAgICAgICAgICAvXmp1aW4vaSxcbiAgICAgICAgICAgIC9eanVpbC9pLFxuICAgICAgICAgICAgL15hb8O7dC9pLFxuICAgICAgICAgICAgL15zZXB0L2ksXG4gICAgICAgICAgICAvXm9jdC9pLFxuICAgICAgICAgICAgL15ub3YvaSxcbiAgICAgICAgICAgIC9eZMOpYy9pLFxuICAgICAgICBdO1xuXG4gICAgdmFyIGZyID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZnInLCB7XG4gICAgICAgIG1vbnRoczogJ2phbnZpZXJfZsOpdnJpZXJfbWFyc19hdnJpbF9tYWlfanVpbl9qdWlsbGV0X2Fvw7t0X3NlcHRlbWJyZV9vY3RvYnJlX25vdmVtYnJlX2TDqWNlbWJyZScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAnamFudi5fZsOpdnIuX21hcnNfYXZyLl9tYWlfanVpbl9qdWlsLl9hb8O7dF9zZXB0Ll9vY3QuX25vdi5fZMOpYy4nLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgbW9udGhzUmVnZXg6IG1vbnRoc1JlZ2V4LFxuICAgICAgICBtb250aHNTaG9ydFJlZ2V4OiBtb250aHNSZWdleCxcbiAgICAgICAgbW9udGhzU3RyaWN0UmVnZXg6IG1vbnRoc1N0cmljdFJlZ2V4LFxuICAgICAgICBtb250aHNTaG9ydFN0cmljdFJlZ2V4OiBtb250aHNTaG9ydFN0cmljdFJlZ2V4LFxuICAgICAgICBtb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgICAgIGxvbmdNb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgICAgIHNob3J0TW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgICAgICB3ZWVrZGF5czogJ2RpbWFuY2hlX2x1bmRpX21hcmRpX21lcmNyZWRpX2pldWRpX3ZlbmRyZWRpX3NhbWVkaScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ2RpbS5fbHVuLl9tYXIuX21lci5famV1Ll92ZW4uX3NhbS4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnZGlfbHVfbWFfbWVfamVfdmVfc2EnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW0F1am91cmTigJlodWkgw6BdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbRGVtYWluIMOgXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW8OgXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW0hpZXIgw6BdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnZGRkZCBbZGVybmllciDDoF0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdkYW5zICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICdpbCB5IGEgJXMnLFxuICAgICAgICAgICAgczogJ3F1ZWxxdWVzIHNlY29uZGVzJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2Vjb25kZXMnLFxuICAgICAgICAgICAgbTogJ3VuZSBtaW51dGUnLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dGVzJyxcbiAgICAgICAgICAgIGg6ICd1bmUgaGV1cmUnLFxuICAgICAgICAgICAgaGg6ICclZCBoZXVyZXMnLFxuICAgICAgICAgICAgZDogJ3VuIGpvdXInLFxuICAgICAgICAgICAgZGQ6ICclZCBqb3VycycsXG4gICAgICAgICAgICB3OiAndW5lIHNlbWFpbmUnLFxuICAgICAgICAgICAgd3c6ICclZCBzZW1haW5lcycsXG4gICAgICAgICAgICBNOiAndW4gbW9pcycsXG4gICAgICAgICAgICBNTTogJyVkIG1vaXMnLFxuICAgICAgICAgICAgeTogJ3VuIGFuJyxcbiAgICAgICAgICAgIHl5OiAnJWQgYW5zJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KGVyfCkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyLCBwZXJpb2QpIHtcbiAgICAgICAgICAgIHN3aXRjaCAocGVyaW9kKSB7XG4gICAgICAgICAgICAgICAgLy8gVE9ETzogUmV0dXJuICdlJyB3aGVuIGRheSBvZiBtb250aCA+IDEuIE1vdmUgdGhpcyBjYXNlIGluc2lkZVxuICAgICAgICAgICAgICAgIC8vIGJsb2NrIGZvciBtYXNjdWxpbmUgd29yZHMgYmVsb3cuXG4gICAgICAgICAgICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tb21lbnQvbW9tZW50L2lzc3Vlcy8zMzc1XG4gICAgICAgICAgICAgICAgY2FzZSAnRCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAobnVtYmVyID09PSAxID8gJ2VyJyA6ICcnKTtcblxuICAgICAgICAgICAgICAgIC8vIFdvcmRzIHdpdGggbWFzY3VsaW5lIGdyYW1tYXRpY2FsIGdlbmRlcjogbW9pcywgdHJpbWVzdHJlLCBqb3VyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBjYXNlICdNJzpcbiAgICAgICAgICAgICAgICBjYXNlICdRJzpcbiAgICAgICAgICAgICAgICBjYXNlICdEREQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgKG51bWJlciA9PT0gMSA/ICdlcicgOiAnZScpO1xuXG4gICAgICAgICAgICAgICAgLy8gV29yZHMgd2l0aCBmZW1pbmluZSBncmFtbWF0aWNhbCBnZW5kZXI6IHNlbWFpbmVcbiAgICAgICAgICAgICAgICBjYXNlICd3JzpcbiAgICAgICAgICAgICAgICBjYXNlICdXJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIChudW1iZXIgPT09IDEgPyAncmUnIDogJ2UnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGZyO1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/fr.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/fy.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/fy.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Frisian [fy]\n//! author : Robin van der Vliet : https://github.com/robin0van0der0v\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var monthsShortWithDots =\n            'jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.'.split('_'),\n        monthsShortWithoutDots =\n            'jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_');\n\n    var fy = moment.defineLocale('fy', {\n        months: 'jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber'.split(\n            '_'\n        ),\n        monthsShort: function (m, format) {\n            if (!m) {\n                return monthsShortWithDots;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShortWithoutDots[m.month()];\n            } else {\n                return monthsShortWithDots[m.month()];\n            }\n        },\n        monthsParseExact: true,\n        weekdays: 'snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon'.split(\n            '_'\n        ),\n        weekdaysShort: 'si._mo._ti._wo._to._fr._so.'.split('_'),\n        weekdaysMin: 'Si_Mo_Ti_Wo_To_Fr_So'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD-MM-YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[hjoed om] LT',\n            nextDay: '[moarn om] LT',\n            nextWeek: 'dddd [om] LT',\n            lastDay: '[juster om] LT',\n            lastWeek: '[ôfrûne] dddd [om] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'oer %s',\n            past: '%s lyn',\n            s: 'in pear sekonden',\n            ss: '%d sekonden',\n            m: 'ien minút',\n            mm: '%d minuten',\n            h: 'ien oere',\n            hh: '%d oeren',\n            d: 'ien dei',\n            dd: '%d dagen',\n            M: 'ien moanne',\n            MM: '%d moannen',\n            y: 'ien jier',\n            yy: '%d jierren',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n        ordinal: function (number) {\n            return (\n                number +\n                (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')\n            );\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return fy;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9meS5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZnkuanM/OWM0NiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogRnJpc2lhbiBbZnldXG4vLyEgYXV0aG9yIDogUm9iaW4gdmFuIGRlciBWbGlldCA6IGh0dHBzOi8vZ2l0aHViLmNvbS9yb2JpbjB2YW4wZGVyMHZcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBtb250aHNTaG9ydFdpdGhEb3RzID1cbiAgICAgICAgICAgICdqYW4uX2ZlYi5fbXJ0Ll9hcHIuX21haV9qdW4uX2p1bC5fYXVnLl9zZXAuX29rdC5fbm92Ll9kZXMuJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydFdpdGhvdXREb3RzID1cbiAgICAgICAgICAgICdqYW5fZmViX21ydF9hcHJfbWFpX2p1bl9qdWxfYXVnX3NlcF9va3Rfbm92X2Rlcycuc3BsaXQoJ18nKTtcblxuICAgIHZhciBmeSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2Z5Jywge1xuICAgICAgICBtb250aHM6ICdqYW5uZXdhcmlzX2ZlYnJld2FyaXNfbWFhcnRfYXByaWxfbWFhaWVfanVueV9qdWx5X2F1Z3VzdHVzX3NlcHRpbWJlcl9va3RvYmVyX25vdmltYmVyX2Rlc2ltYmVyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogZnVuY3Rpb24gKG0sIGZvcm1hdCkge1xuICAgICAgICAgICAgaWYgKCFtKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRoc1Nob3J0V2l0aERvdHM7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKC8tTU1NLS8udGVzdChmb3JtYXQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRoc1Nob3J0V2l0aG91dERvdHNbbS5tb250aCgpXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRoc1Nob3J0V2l0aERvdHNbbS5tb250aCgpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6ICdzbmVpbl9tb2FuZGVpX3RpaXNkZWlfd29hbnNkZWlfdG9uZ2Vyc2RlaV9mcmVlZF9zbmVvbicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ3NpLl9tby5fdGkuX3dvLl90by5fZnIuX3NvLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdTaV9Nb19UaV9Xb19Ub19Gcl9Tbycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQtTU0tWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbaGpvZWQgb21dIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbbW9hcm4gb21dIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbb21dIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbanVzdGVyIG9tXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1vDtGZyw7tuZV0gZGRkZCBbb21dIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnb2VyICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyBseW4nLFxuICAgICAgICAgICAgczogJ2luIHBlYXIgc2Vrb25kZW4nLFxuICAgICAgICAgICAgc3M6ICclZCBzZWtvbmRlbicsXG4gICAgICAgICAgICBtOiAnaWVuIG1pbsO6dCcsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0ZW4nLFxuICAgICAgICAgICAgaDogJ2llbiBvZXJlJyxcbiAgICAgICAgICAgIGhoOiAnJWQgb2VyZW4nLFxuICAgICAgICAgICAgZDogJ2llbiBkZWknLFxuICAgICAgICAgICAgZGQ6ICclZCBkYWdlbicsXG4gICAgICAgICAgICBNOiAnaWVuIG1vYW5uZScsXG4gICAgICAgICAgICBNTTogJyVkIG1vYW5uZW4nLFxuICAgICAgICAgICAgeTogJ2llbiBqaWVyJyxcbiAgICAgICAgICAgIHl5OiAnJWQgamllcnJlbicsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShzdGV8ZGUpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICBudW1iZXIgK1xuICAgICAgICAgICAgICAgIChudW1iZXIgPT09IDEgfHwgbnVtYmVyID09PSA4IHx8IG51bWJlciA+PSAyMCA/ICdzdGUnIDogJ2RlJylcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBmeTtcblxufSkpKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/fy.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/ga.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/ga.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Irish or Irish Gaelic [ga]\n//! author : André Silva : https://github.com/askpt\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var months = [\n            'Eanáir',\n            'Feabhra',\n            'Márta',\n            'Aibreán',\n            'Bealtaine',\n            'Meitheamh',\n            'Iúil',\n            'Lúnasa',\n            'Meán Fómhair',\n            'Deireadh Fómhair',\n            'Samhain',\n            'Nollaig',\n        ],\n        monthsShort = [\n            'Ean',\n            'Feabh',\n            'Márt',\n            'Aib',\n            'Beal',\n            'Meith',\n            'Iúil',\n            'Lún',\n            'M.F.',\n            'D.F.',\n            'Samh',\n            'Noll',\n        ],\n        weekdays = [\n            'Dé Domhnaigh',\n            'Dé Luain',\n            'Dé Máirt',\n            'Dé Céadaoin',\n            'Déardaoin',\n            'Dé hAoine',\n            'Dé Sathairn',\n        ],\n        weekdaysShort = ['Domh', 'Luan', 'Máirt', 'Céad', 'Déar', 'Aoine', 'Sath'],\n        weekdaysMin = ['Do', 'Lu', 'Má', 'Cé', 'Dé', 'A', 'Sa'];\n\n    var ga = moment.defineLocale('ga', {\n        months: months,\n        monthsShort: monthsShort,\n        monthsParseExact: true,\n        weekdays: weekdays,\n        weekdaysShort: weekdaysShort,\n        weekdaysMin: weekdaysMin,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Inniu ag] LT',\n            nextDay: '[Amárach ag] LT',\n            nextWeek: 'dddd [ag] LT',\n            lastDay: '[Inné ag] LT',\n            lastWeek: 'dddd [seo caite] [ag] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'i %s',\n            past: '%s ó shin',\n            s: 'cúpla soicind',\n            ss: '%d soicind',\n            m: 'nóiméad',\n            mm: '%d nóiméad',\n            h: 'uair an chloig',\n            hh: '%d uair an chloig',\n            d: 'lá',\n            dd: '%d lá',\n            M: 'mí',\n            MM: '%d míonna',\n            y: 'bliain',\n            yy: '%d bliain',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(d|na|mh)/,\n        ordinal: function (number) {\n            var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return ga;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9nYS5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxvQ0FBb0MsSUFBSTtBQUN4QztBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2dhLmpzP2M2OTQiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IElyaXNoIG9yIElyaXNoIEdhZWxpYyBbZ2FdXG4vLyEgYXV0aG9yIDogQW5kcsOpIFNpbHZhIDogaHR0cHM6Ly9naXRodWIuY29tL2Fza3B0XG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgbW9udGhzID0gW1xuICAgICAgICAgICAgJ0VhbsOhaXInLFxuICAgICAgICAgICAgJ0ZlYWJocmEnLFxuICAgICAgICAgICAgJ03DoXJ0YScsXG4gICAgICAgICAgICAnQWlicmXDoW4nLFxuICAgICAgICAgICAgJ0JlYWx0YWluZScsXG4gICAgICAgICAgICAnTWVpdGhlYW1oJyxcbiAgICAgICAgICAgICdJw7ppbCcsXG4gICAgICAgICAgICAnTMO6bmFzYScsXG4gICAgICAgICAgICAnTWXDoW4gRsOzbWhhaXInLFxuICAgICAgICAgICAgJ0RlaXJlYWRoIEbDs21oYWlyJyxcbiAgICAgICAgICAgICdTYW1oYWluJyxcbiAgICAgICAgICAgICdOb2xsYWlnJyxcbiAgICAgICAgXSxcbiAgICAgICAgbW9udGhzU2hvcnQgPSBbXG4gICAgICAgICAgICAnRWFuJyxcbiAgICAgICAgICAgICdGZWFiaCcsXG4gICAgICAgICAgICAnTcOhcnQnLFxuICAgICAgICAgICAgJ0FpYicsXG4gICAgICAgICAgICAnQmVhbCcsXG4gICAgICAgICAgICAnTWVpdGgnLFxuICAgICAgICAgICAgJ0nDumlsJyxcbiAgICAgICAgICAgICdMw7puJyxcbiAgICAgICAgICAgICdNLkYuJyxcbiAgICAgICAgICAgICdELkYuJyxcbiAgICAgICAgICAgICdTYW1oJyxcbiAgICAgICAgICAgICdOb2xsJyxcbiAgICAgICAgXSxcbiAgICAgICAgd2Vla2RheXMgPSBbXG4gICAgICAgICAgICAnRMOpIERvbWhuYWlnaCcsXG4gICAgICAgICAgICAnRMOpIEx1YWluJyxcbiAgICAgICAgICAgICdEw6kgTcOhaXJ0JyxcbiAgICAgICAgICAgICdEw6kgQ8OpYWRhb2luJyxcbiAgICAgICAgICAgICdEw6lhcmRhb2luJyxcbiAgICAgICAgICAgICdEw6kgaEFvaW5lJyxcbiAgICAgICAgICAgICdEw6kgU2F0aGFpcm4nLFxuICAgICAgICBdLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0ID0gWydEb21oJywgJ0x1YW4nLCAnTcOhaXJ0JywgJ0PDqWFkJywgJ0TDqWFyJywgJ0FvaW5lJywgJ1NhdGgnXSxcbiAgICAgICAgd2Vla2RheXNNaW4gPSBbJ0RvJywgJ0x1JywgJ03DoScsICdDw6knLCAnRMOpJywgJ0EnLCAnU2EnXTtcblxuICAgIHZhciBnYSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2dhJywge1xuICAgICAgICBtb250aHM6IG1vbnRocyxcbiAgICAgICAgbW9udGhzU2hvcnQ6IG1vbnRoc1Nob3J0LFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czogd2Vla2RheXMsXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6IHdlZWtkYXlzU2hvcnQsXG4gICAgICAgIHdlZWtkYXlzTWluOiB3ZWVrZGF5c01pbixcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tJbm5pdSBhZ10gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tBbcOhcmFjaCBhZ10gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFthZ10gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tJbm7DqSBhZ10gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFtzZW8gY2FpdGVdIFthZ10gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdpICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyDDsyBzaGluJyxcbiAgICAgICAgICAgIHM6ICdjw7pwbGEgc29pY2luZCcsXG4gICAgICAgICAgICBzczogJyVkIHNvaWNpbmQnLFxuICAgICAgICAgICAgbTogJ27Ds2ltw6lhZCcsXG4gICAgICAgICAgICBtbTogJyVkIG7Ds2ltw6lhZCcsXG4gICAgICAgICAgICBoOiAndWFpciBhbiBjaGxvaWcnLFxuICAgICAgICAgICAgaGg6ICclZCB1YWlyIGFuIGNobG9pZycsXG4gICAgICAgICAgICBkOiAnbMOhJyxcbiAgICAgICAgICAgIGRkOiAnJWQgbMOhJyxcbiAgICAgICAgICAgIE06ICdtw60nLFxuICAgICAgICAgICAgTU06ICclZCBtw61vbm5hJyxcbiAgICAgICAgICAgIHk6ICdibGlhaW4nLFxuICAgICAgICAgICAgeXk6ICclZCBibGlhaW4nLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0oZHxuYXxtaCkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICB2YXIgb3V0cHV0ID0gbnVtYmVyID09PSAxID8gJ2QnIDogbnVtYmVyICUgMTAgPT09IDIgPyAnbmEnIDogJ21oJztcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBnYTtcblxufSkpKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/ga.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/gd.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/gd.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Scottish Gaelic [gd]\n//! author : Jon Ashdown : https://github.com/jonashdown\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var months = [\n            'Am Faoilleach',\n            'An Gearran',\n            'Am Màrt',\n            'An Giblean',\n            'An Cèitean',\n            'An t-Ògmhios',\n            'An t-Iuchar',\n            'An Lùnastal',\n            'An t-Sultain',\n            'An Dàmhair',\n            'An t-Samhain',\n            'An Dùbhlachd',\n        ],\n        monthsShort = [\n            'Faoi',\n            'Gear',\n            'Màrt',\n            'Gibl',\n            'Cèit',\n            'Ògmh',\n            'Iuch',\n            'Lùn',\n            'Sult',\n            'Dàmh',\n            'Samh',\n            'Dùbh',\n        ],\n        weekdays = [\n            'Didòmhnaich',\n            'Diluain',\n            'Dimàirt',\n            'Diciadain',\n            'Diardaoin',\n            'Dihaoine',\n            'Disathairne',\n        ],\n        weekdaysShort = ['Did', 'Dil', 'Dim', 'Dic', 'Dia', 'Dih', 'Dis'],\n        weekdaysMin = ['Dò', 'Lu', 'Mà', 'Ci', 'Ar', 'Ha', 'Sa'];\n\n    var gd = moment.defineLocale('gd', {\n        months: months,\n        monthsShort: monthsShort,\n        monthsParseExact: true,\n        weekdays: weekdays,\n        weekdaysShort: weekdaysShort,\n        weekdaysMin: weekdaysMin,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[An-diugh aig] LT',\n            nextDay: '[A-màireach aig] LT',\n            nextWeek: 'dddd [aig] LT',\n            lastDay: '[An-dè aig] LT',\n            lastWeek: 'dddd [seo chaidh] [aig] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'ann an %s',\n            past: 'bho chionn %s',\n            s: 'beagan diogan',\n            ss: '%d diogan',\n            m: 'mionaid',\n            mm: '%d mionaidean',\n            h: 'uair',\n            hh: '%d uairean',\n            d: 'latha',\n            dd: '%d latha',\n            M: 'mìos',\n            MM: '%d mìosan',\n            y: 'bliadhna',\n            yy: '%d bliadhna',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(d|na|mh)/,\n        ordinal: function (number) {\n            var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return gd;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9nZC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxvQ0FBb0MsSUFBSTtBQUN4QztBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2dkLmpzPzQxZjYiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFNjb3R0aXNoIEdhZWxpYyBbZ2RdXG4vLyEgYXV0aG9yIDogSm9uIEFzaGRvd24gOiBodHRwczovL2dpdGh1Yi5jb20vam9uYXNoZG93blxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIG1vbnRocyA9IFtcbiAgICAgICAgICAgICdBbSBGYW9pbGxlYWNoJyxcbiAgICAgICAgICAgICdBbiBHZWFycmFuJyxcbiAgICAgICAgICAgICdBbSBNw6BydCcsXG4gICAgICAgICAgICAnQW4gR2libGVhbicsXG4gICAgICAgICAgICAnQW4gQ8OoaXRlYW4nLFxuICAgICAgICAgICAgJ0FuIHQtw5JnbWhpb3MnLFxuICAgICAgICAgICAgJ0FuIHQtSXVjaGFyJyxcbiAgICAgICAgICAgICdBbiBMw7luYXN0YWwnLFxuICAgICAgICAgICAgJ0FuIHQtU3VsdGFpbicsXG4gICAgICAgICAgICAnQW4gRMOgbWhhaXInLFxuICAgICAgICAgICAgJ0FuIHQtU2FtaGFpbicsXG4gICAgICAgICAgICAnQW4gRMO5YmhsYWNoZCcsXG4gICAgICAgIF0sXG4gICAgICAgIG1vbnRoc1Nob3J0ID0gW1xuICAgICAgICAgICAgJ0Zhb2knLFxuICAgICAgICAgICAgJ0dlYXInLFxuICAgICAgICAgICAgJ03DoHJ0JyxcbiAgICAgICAgICAgICdHaWJsJyxcbiAgICAgICAgICAgICdDw6hpdCcsXG4gICAgICAgICAgICAnw5JnbWgnLFxuICAgICAgICAgICAgJ0l1Y2gnLFxuICAgICAgICAgICAgJ0zDuW4nLFxuICAgICAgICAgICAgJ1N1bHQnLFxuICAgICAgICAgICAgJ0TDoG1oJyxcbiAgICAgICAgICAgICdTYW1oJyxcbiAgICAgICAgICAgICdEw7liaCcsXG4gICAgICAgIF0sXG4gICAgICAgIHdlZWtkYXlzID0gW1xuICAgICAgICAgICAgJ0RpZMOybWhuYWljaCcsXG4gICAgICAgICAgICAnRGlsdWFpbicsXG4gICAgICAgICAgICAnRGltw6BpcnQnLFxuICAgICAgICAgICAgJ0RpY2lhZGFpbicsXG4gICAgICAgICAgICAnRGlhcmRhb2luJyxcbiAgICAgICAgICAgICdEaWhhb2luZScsXG4gICAgICAgICAgICAnRGlzYXRoYWlybmUnLFxuICAgICAgICBdLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0ID0gWydEaWQnLCAnRGlsJywgJ0RpbScsICdEaWMnLCAnRGlhJywgJ0RpaCcsICdEaXMnXSxcbiAgICAgICAgd2Vla2RheXNNaW4gPSBbJ0TDsicsICdMdScsICdNw6AnLCAnQ2knLCAnQXInLCAnSGEnLCAnU2EnXTtcblxuICAgIHZhciBnZCA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2dkJywge1xuICAgICAgICBtb250aHM6IG1vbnRocyxcbiAgICAgICAgbW9udGhzU2hvcnQ6IG1vbnRoc1Nob3J0LFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czogd2Vla2RheXMsXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6IHdlZWtkYXlzU2hvcnQsXG4gICAgICAgIHdlZWtkYXlzTWluOiB3ZWVrZGF5c01pbixcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tBbi1kaXVnaCBhaWddIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbQS1tw6BpcmVhY2ggYWlnXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW2FpZ10gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tBbi1kw6ggYWlnXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW3NlbyBjaGFpZGhdIFthaWddIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnYW5uIGFuICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICdiaG8gY2hpb25uICVzJyxcbiAgICAgICAgICAgIHM6ICdiZWFnYW4gZGlvZ2FuJyxcbiAgICAgICAgICAgIHNzOiAnJWQgZGlvZ2FuJyxcbiAgICAgICAgICAgIG06ICdtaW9uYWlkJyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWlvbmFpZGVhbicsXG4gICAgICAgICAgICBoOiAndWFpcicsXG4gICAgICAgICAgICBoaDogJyVkIHVhaXJlYW4nLFxuICAgICAgICAgICAgZDogJ2xhdGhhJyxcbiAgICAgICAgICAgIGRkOiAnJWQgbGF0aGEnLFxuICAgICAgICAgICAgTTogJ23DrG9zJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbcOsb3NhbicsXG4gICAgICAgICAgICB5OiAnYmxpYWRobmEnLFxuICAgICAgICAgICAgeXk6ICclZCBibGlhZGhuYScsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShkfG5hfG1oKS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBvdXRwdXQgPSBudW1iZXIgPT09IDEgPyAnZCcgOiBudW1iZXIgJSAxMCA9PT0gMiA/ICduYScgOiAnbWgnO1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIG91dHB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGdkO1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/gd.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/gl.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/gl.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Galician [gl]\n//! author : Juan G. Hurtado : https://github.com/juanghurtado\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var gl = moment.defineLocale('gl', {\n        months: 'xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro'.split(\n            '_'\n        ),\n        monthsShort:\n            'xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'domingo_luns_martes_mércores_xoves_venres_sábado'.split('_'),\n        weekdaysShort: 'dom._lun._mar._mér._xov._ven._sáb.'.split('_'),\n        weekdaysMin: 'do_lu_ma_mé_xo_ve_sá'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D [de] MMMM [de] YYYY',\n            LLL: 'D [de] MMMM [de] YYYY H:mm',\n            LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm',\n        },\n        calendar: {\n            sameDay: function () {\n                return '[hoxe ' + (this.hours() !== 1 ? 'ás' : 'á') + '] LT';\n            },\n            nextDay: function () {\n                return '[mañá ' + (this.hours() !== 1 ? 'ás' : 'á') + '] LT';\n            },\n            nextWeek: function () {\n                return 'dddd [' + (this.hours() !== 1 ? 'ás' : 'a') + '] LT';\n            },\n            lastDay: function () {\n                return '[onte ' + (this.hours() !== 1 ? 'á' : 'a') + '] LT';\n            },\n            lastWeek: function () {\n                return (\n                    '[o] dddd [pasado ' + (this.hours() !== 1 ? 'ás' : 'a') + '] LT'\n                );\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: function (str) {\n                if (str.indexOf('un') === 0) {\n                    return 'n' + str;\n                }\n                return 'en ' + str;\n            },\n            past: 'hai %s',\n            s: 'uns segundos',\n            ss: '%d segundos',\n            m: 'un minuto',\n            mm: '%d minutos',\n            h: 'unha hora',\n            hh: '%d horas',\n            d: 'un día',\n            dd: '%d días',\n            M: 'un mes',\n            MM: '%d meses',\n            y: 'un ano',\n            yy: '%d anos',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return gl;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9nbC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxvQ0FBb0MsSUFBSTtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9nbC5qcz85Nzg2Il0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBHYWxpY2lhbiBbZ2xdXG4vLyEgYXV0aG9yIDogSnVhbiBHLiBIdXJ0YWRvIDogaHR0cHM6Ly9naXRodWIuY29tL2p1YW5naHVydGFkb1xuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIGdsID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZ2wnLCB7XG4gICAgICAgIG1vbnRoczogJ3hhbmVpcm9fZmVicmVpcm9fbWFyem9fYWJyaWxfbWFpb194dcOxb194dWxsb19hZ29zdG9fc2V0ZW1icm9fb3V0dWJyb19ub3ZlbWJyb19kZWNlbWJybycuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAneGFuLl9mZWIuX21hci5fYWJyLl9tYWkuX3h1w7EuX3h1bC5fYWdvLl9zZXQuX291dC5fbm92Ll9kZWMuJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOiAnZG9taW5nb19sdW5zX21hcnRlc19tw6lyY29yZXNfeG92ZXNfdmVucmVzX3PDoWJhZG8nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdkb20uX2x1bi5fbWFyLl9tw6lyLl94b3YuX3Zlbi5fc8OhYi4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnZG9fbHVfbWFfbcOpX3hvX3ZlX3PDoScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0g6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIFtkZV0gTU1NTSBbZGVdIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBbZGVdIE1NTU0gW2RlXSBZWVlZIEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgW2RlXSBNTU1NIFtkZV0gWVlZWSBIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1tob3hlICcgKyAodGhpcy5ob3VycygpICE9PSAxID8gJ8OhcycgOiAnw6EnKSArICddIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuZXh0RGF5OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdbbWHDscOhICcgKyAodGhpcy5ob3VycygpICE9PSAxID8gJ8OhcycgOiAnw6EnKSArICddIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuZXh0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnZGRkZCBbJyArICh0aGlzLmhvdXJzKCkgIT09IDEgPyAnw6FzJyA6ICdhJykgKyAnXSBMVCc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdERheTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnW29udGUgJyArICh0aGlzLmhvdXJzKCkgIT09IDEgPyAnw6EnIDogJ2EnKSArICddIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICdbb10gZGRkZCBbcGFzYWRvICcgKyAodGhpcy5ob3VycygpICE9PSAxID8gJ8OhcycgOiAnYScpICsgJ10gTFQnXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogZnVuY3Rpb24gKHN0cikge1xuICAgICAgICAgICAgICAgIGlmIChzdHIuaW5kZXhPZigndW4nKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ24nICsgc3RyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gJ2VuICcgKyBzdHI7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGFzdDogJ2hhaSAlcycsXG4gICAgICAgICAgICBzOiAndW5zIHNlZ3VuZG9zJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2VndW5kb3MnLFxuICAgICAgICAgICAgbTogJ3VuIG1pbnV0bycsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0b3MnLFxuICAgICAgICAgICAgaDogJ3VuaGEgaG9yYScsXG4gICAgICAgICAgICBoaDogJyVkIGhvcmFzJyxcbiAgICAgICAgICAgIGQ6ICd1biBkw61hJyxcbiAgICAgICAgICAgIGRkOiAnJWQgZMOtYXMnLFxuICAgICAgICAgICAgTTogJ3VuIG1lcycsXG4gICAgICAgICAgICBNTTogJyVkIG1lc2VzJyxcbiAgICAgICAgICAgIHk6ICd1biBhbm8nLFxuICAgICAgICAgICAgeXk6ICclZCBhbm9zJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9wrovLFxuICAgICAgICBvcmRpbmFsOiAnJWTCuicsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBnbDtcblxufSkpKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/gl.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/gom-deva.js":
/*!************************************************!*\
  !*** ./node_modules/moment/locale/gom-deva.js ***!
  \************************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Konkani Devanagari script [gom-deva]\n//! author : The Discoverer : https://github.com/WikiDiscoverer\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            s: ['थोडया सॅकंडांनी', 'थोडे सॅकंड'],\n            ss: [number + ' सॅकंडांनी', number + ' सॅकंड'],\n            m: ['एका मिणटान', 'एक मिनूट'],\n            mm: [number + ' मिणटांनी', number + ' मिणटां'],\n            h: ['एका वरान', 'एक वर'],\n            hh: [number + ' वरांनी', number + ' वरां'],\n            d: ['एका दिसान', 'एक दीस'],\n            dd: [number + ' दिसांनी', number + ' दीस'],\n            M: ['एका म्हयन्यान', 'एक म्हयनो'],\n            MM: [number + ' म्हयन्यानी', number + ' म्हयने'],\n            y: ['एका वर्सान', 'एक वर्स'],\n            yy: [number + ' वर्सांनी', number + ' वर्सां'],\n        };\n        return isFuture ? format[key][0] : format[key][1];\n    }\n\n    var gomDeva = moment.defineLocale('gom-deva', {\n        months: {\n            standalone:\n                'जानेवारी_फेब्रुवारी_मार्च_एप्रील_मे_जून_जुलय_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split(\n                    '_'\n                ),\n            format: 'जानेवारीच्या_फेब्रुवारीच्या_मार्चाच्या_एप्रीलाच्या_मेयाच्या_जूनाच्या_जुलयाच्या_ऑगस्टाच्या_सप्टेंबराच्या_ऑक्टोबराच्या_नोव्हेंबराच्या_डिसेंबराच्या'.split(\n                '_'\n            ),\n            isFormat: /MMMM(\\s)+D[oD]?/,\n        },\n        monthsShort:\n            'जाने._फेब्रु._मार्च_एप्री._मे_जून_जुल._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'आयतार_सोमार_मंगळार_बुधवार_बिरेस्तार_सुक्रार_शेनवार'.split('_'),\n        weekdaysShort: 'आयत._सोम._मंगळ._बुध._ब्रेस्त._सुक्र._शेन.'.split('_'),\n        weekdaysMin: 'आ_सो_मं_बु_ब्रे_सु_शे'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'A h:mm [वाजतां]',\n            LTS: 'A h:mm:ss [वाजतां]',\n            L: 'DD-MM-YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY A h:mm [वाजतां]',\n            LLLL: 'dddd, MMMM Do, YYYY, A h:mm [वाजतां]',\n            llll: 'ddd, D MMM YYYY, A h:mm [वाजतां]',\n        },\n        calendar: {\n            sameDay: '[आयज] LT',\n            nextDay: '[फाल्यां] LT',\n            nextWeek: '[फुडलो] dddd[,] LT',\n            lastDay: '[काल] LT',\n            lastWeek: '[फाटलो] dddd[,] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s',\n            past: '%s आदीं',\n            s: processRelativeTime,\n            ss: processRelativeTime,\n            m: processRelativeTime,\n            mm: processRelativeTime,\n            h: processRelativeTime,\n            hh: processRelativeTime,\n            d: processRelativeTime,\n            dd: processRelativeTime,\n            M: processRelativeTime,\n            MM: processRelativeTime,\n            y: processRelativeTime,\n            yy: processRelativeTime,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(वेर)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                // the ordinal 'वेर' only applies to day of the month\n                case 'D':\n                    return number + 'वेर';\n                default:\n                case 'M':\n                case 'Q':\n                case 'DDD':\n                case 'd':\n                case 'w':\n                case 'W':\n                    return number;\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week\n            doy: 3, // The week that contains Jan 4th is the first week of the year (7 + 0 - 4)\n        },\n        meridiemParse: /राती|सकाळीं|दनपारां|सांजे/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'राती') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'सकाळीं') {\n                return hour;\n            } else if (meridiem === 'दनपारां') {\n                return hour > 12 ? hour : hour + 12;\n            } else if (meridiem === 'सांजे') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'राती';\n            } else if (hour < 12) {\n                return 'सकाळीं';\n            } else if (hour < 16) {\n                return 'दनपारां';\n            } else if (hour < 20) {\n                return 'सांजे';\n            } else {\n                return 'राती';\n            }\n        },\n    });\n\n    return gomDeva;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9nb20tZGV2YS5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9nb20tZGV2YS5qcz9jOGEwIl0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBLb25rYW5pIERldmFuYWdhcmkgc2NyaXB0IFtnb20tZGV2YV1cbi8vISBhdXRob3IgOiBUaGUgRGlzY292ZXJlciA6IGh0dHBzOi8vZ2l0aHViLmNvbS9XaWtpRGlzY292ZXJlclxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgZnVuY3Rpb24gcHJvY2Vzc1JlbGF0aXZlVGltZShudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSwgaXNGdXR1cmUpIHtcbiAgICAgICAgdmFyIGZvcm1hdCA9IHtcbiAgICAgICAgICAgIHM6IFsn4KSl4KWL4KSh4KSv4KS+IOCkuOClheCkleCkguCkoeCkvuCkguCkqOClgCcsICfgpKXgpYvgpKHgpYcg4KS44KWF4KSV4KSC4KShJ10sXG4gICAgICAgICAgICBzczogW251bWJlciArICcg4KS44KWF4KSV4KSC4KSh4KS+4KSC4KSo4KWAJywgbnVtYmVyICsgJyDgpLjgpYXgpJXgpILgpKEnXSxcbiAgICAgICAgICAgIG06IFsn4KSP4KSV4KS+IOCkruCkv+Cko+Ckn+CkvuCkqCcsICfgpI/gpJUg4KSu4KS/4KSo4KWC4KSfJ10sXG4gICAgICAgICAgICBtbTogW251bWJlciArICcg4KSu4KS/4KSj4KSf4KS+4KSC4KSo4KWAJywgbnVtYmVyICsgJyDgpK7gpL/gpKPgpJ/gpL7gpIInXSxcbiAgICAgICAgICAgIGg6IFsn4KSP4KSV4KS+IOCkteCksOCkvuCkqCcsICfgpI/gpJUg4KS14KSwJ10sXG4gICAgICAgICAgICBoaDogW251bWJlciArICcg4KS14KSw4KS+4KSC4KSo4KWAJywgbnVtYmVyICsgJyDgpLXgpLDgpL7gpIInXSxcbiAgICAgICAgICAgIGQ6IFsn4KSP4KSV4KS+IOCkpuCkv+CkuOCkvuCkqCcsICfgpI/gpJUg4KSm4KWA4KS4J10sXG4gICAgICAgICAgICBkZDogW251bWJlciArICcg4KSm4KS/4KS44KS+4KSC4KSo4KWAJywgbnVtYmVyICsgJyDgpKbgpYDgpLgnXSxcbiAgICAgICAgICAgIE06IFsn4KSP4KSV4KS+IOCkruCljeCkueCkr+CkqOCljeCkr+CkvuCkqCcsICfgpI/gpJUg4KSu4KWN4KS54KSv4KSo4KWLJ10sXG4gICAgICAgICAgICBNTTogW251bWJlciArICcg4KSu4KWN4KS54KSv4KSo4KWN4KSv4KS+4KSo4KWAJywgbnVtYmVyICsgJyDgpK7gpY3gpLngpK/gpKjgpYcnXSxcbiAgICAgICAgICAgIHk6IFsn4KSP4KSV4KS+IOCkteCksOCljeCkuOCkvuCkqCcsICfgpI/gpJUg4KS14KSw4KWN4KS4J10sXG4gICAgICAgICAgICB5eTogW251bWJlciArICcg4KS14KSw4KWN4KS44KS+4KSC4KSo4KWAJywgbnVtYmVyICsgJyDgpLXgpLDgpY3gpLjgpL7gpIInXSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGlzRnV0dXJlID8gZm9ybWF0W2tleV1bMF0gOiBmb3JtYXRba2V5XVsxXTtcbiAgICB9XG5cbiAgICB2YXIgZ29tRGV2YSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2dvbS1kZXZhJywge1xuICAgICAgICBtb250aHM6IHtcbiAgICAgICAgICAgIHN0YW5kYWxvbmU6XG4gICAgICAgICAgICAgICAgJ+CknOCkvuCkqOClh+CkteCkvuCksOClgF/gpKvgpYfgpKzgpY3gpLDgpYHgpLXgpL7gpLDgpYBf4KSu4KS+4KSw4KWN4KSaX+Ckj+CkquCljeCksOClgOCksl/gpK7gpYdf4KSc4KWC4KSoX+CknOClgeCksuCkr1/gpJHgpJfgpLjgpY3gpJ9f4KS44KSq4KWN4KSf4KWH4KSC4KSs4KSwX+CkkeCkleCljeCkn+Cli+CkrOCksF/gpKjgpYvgpLXgpY3gpLngpYfgpILgpKzgpLBf4KSh4KS/4KS44KWH4KSC4KSs4KSwJy5zcGxpdChcbiAgICAgICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGZvcm1hdDogJ+CknOCkvuCkqOClh+CkteCkvuCksOClgOCkmuCljeCkr+Ckvl/gpKvgpYfgpKzgpY3gpLDgpYHgpLXgpL7gpLDgpYDgpJrgpY3gpK/gpL5f4KSu4KS+4KSw4KWN4KSa4KS+4KSa4KWN4KSv4KS+X+Ckj+CkquCljeCksOClgOCksuCkvuCkmuCljeCkr+Ckvl/gpK7gpYfgpK/gpL7gpJrgpY3gpK/gpL5f4KSc4KWC4KSo4KS+4KSa4KWN4KSv4KS+X+CknOClgeCksuCkr+CkvuCkmuCljeCkr+Ckvl/gpJHgpJfgpLjgpY3gpJ/gpL7gpJrgpY3gpK/gpL5f4KS44KSq4KWN4KSf4KWH4KSC4KSs4KSw4KS+4KSa4KWN4KSv4KS+X+CkkeCkleCljeCkn+Cli+CkrOCksOCkvuCkmuCljeCkr+Ckvl/gpKjgpYvgpLXgpY3gpLngpYfgpILgpKzgpLDgpL7gpJrgpY3gpK/gpL5f4KSh4KS/4KS44KWH4KSC4KSs4KSw4KS+4KSa4KWN4KSv4KS+Jy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBpc0Zvcm1hdDogL01NTU0oXFxzKStEW29EXT8vLFxuICAgICAgICB9LFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICfgpJzgpL7gpKjgpYcuX+Ckq+Clh+CkrOCljeCksOClgS5f4KSu4KS+4KSw4KWN4KSaX+Ckj+CkquCljeCksOClgC5f4KSu4KWHX+CknOClguCkqF/gpJzgpYHgpLIuX+CkkeCkly5f4KS44KSq4KWN4KSf4KWH4KSCLl/gpJHgpJXgpY3gpJ/gpYsuX+CkqOCli+CkteCljeCkueClh+Ckgi5f4KSh4KS/4KS44KWH4KSCLicuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czogJ+CkhuCkr+CkpOCkvuCksF/gpLjgpYvgpK7gpL7gpLBf4KSu4KSC4KSX4KSz4KS+4KSwX+CkrOClgeCkp+CkteCkvuCksF/gpKzgpL/gpLDgpYfgpLjgpY3gpKTgpL7gpLBf4KS44KWB4KSV4KWN4KSw4KS+4KSwX+CktuClh+CkqOCkteCkvuCksCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ+CkhuCkr+CkpC5f4KS44KWL4KSuLl/gpK7gpILgpJfgpLMuX+CkrOClgeCkpy5f4KSs4KWN4KSw4KWH4KS44KWN4KSkLl/gpLjgpYHgpJXgpY3gpLAuX+CktuClh+CkqC4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn4KSGX+CkuOCli1/gpK7gpIJf4KSs4KWBX+CkrOCljeCksOClh1/gpLjgpYFf4KS24KWHJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0EgaDptbSBb4KS14KS+4KSc4KSk4KS+4KSCXScsXG4gICAgICAgICAgICBMVFM6ICdBIGg6bW06c3MgW+CkteCkvuCknOCkpOCkvuCkgl0nLFxuICAgICAgICAgICAgTDogJ0RELU1NLVlZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBBIGg6bW0gW+CkteCkvuCknOCkpOCkvuCkgl0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIE1NTU0gRG8sIFlZWVksIEEgaDptbSBb4KS14KS+4KSc4KSk4KS+4KSCXScsXG4gICAgICAgICAgICBsbGxsOiAnZGRkLCBEIE1NTSBZWVlZLCBBIGg6bW0gW+CkteCkvuCknOCkpOCkvuCkgl0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vgpIbgpK/gpJxdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb4KSr4KS+4KSy4KWN4KSv4KS+4KSCXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ1vgpKvgpYHgpKHgpLLgpYtdIGRkZGRbLF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vgpJXgpL7gpLJdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW+Ckq+CkvuCkn+CksuCli10gZGRkZFssXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyDgpIbgpKbgpYDgpIInLFxuICAgICAgICAgICAgczogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHNzOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgbTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIG1tOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgaDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGhoOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgZDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGRkOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgTTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIE1NOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgeTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHl5OiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0o4KS14KWH4KSwKS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIsIHBlcmlvZCkge1xuICAgICAgICAgICAgc3dpdGNoIChwZXJpb2QpIHtcbiAgICAgICAgICAgICAgICAvLyB0aGUgb3JkaW5hbCAn4KS14KWH4KSwJyBvbmx5IGFwcGxpZXMgdG8gZGF5IG9mIHRoZSBtb250aFxuICAgICAgICAgICAgICAgIGNhc2UgJ0QnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJ+CkteClh+CksCc7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBjYXNlICdNJzpcbiAgICAgICAgICAgICAgICBjYXNlICdRJzpcbiAgICAgICAgICAgICAgICBjYXNlICdEREQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ3cnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ1cnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDAsIC8vIFN1bmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrXG4gICAgICAgICAgICBkb3k6IDMsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhciAoNyArIDAgLSA0KVxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv4KSw4KS+4KSk4KWAfOCkuOCkleCkvuCks+ClgOCkgnzgpKbgpKjgpKrgpL7gpLDgpL7gpIJ84KS44KS+4KSC4KSc4KWHLyxcbiAgICAgICAgbWVyaWRpZW1Ib3VyOiBmdW5jdGlvbiAoaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1lcmlkaWVtID09PSAn4KSw4KS+4KSk4KWAJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyIDwgNCA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4KS44KSV4KS+4KSz4KWA4KSCJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CkpuCkqOCkquCkvuCksOCkvuCkgicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA+IDEyID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfgpLjgpL7gpILgpJzgpYcnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgNCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4KSw4KS+4KSk4KWAJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgpLjgpJXgpL7gpLPgpYDgpIInO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTYpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CkpuCkqOCkquCkvuCksOCkvuCkgic7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAyMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4KS44KS+4KSC4KSc4KWHJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgpLDgpL7gpKTgpYAnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGdvbURldmE7XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/gom-deva.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/gom-latn.js":
/*!************************************************!*\
  !*** ./node_modules/moment/locale/gom-latn.js ***!
  \************************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Konkani Latin script [gom-latn]\n//! author : The Discoverer : https://github.com/WikiDiscoverer\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            s: ['thoddea sekondamni', 'thodde sekond'],\n            ss: [number + ' sekondamni', number + ' sekond'],\n            m: ['eka mintan', 'ek minut'],\n            mm: [number + ' mintamni', number + ' mintam'],\n            h: ['eka voran', 'ek vor'],\n            hh: [number + ' voramni', number + ' voram'],\n            d: ['eka disan', 'ek dis'],\n            dd: [number + ' disamni', number + ' dis'],\n            M: ['eka mhoinean', 'ek mhoino'],\n            MM: [number + ' mhoineamni', number + ' mhoine'],\n            y: ['eka vorsan', 'ek voros'],\n            yy: [number + ' vorsamni', number + ' vorsam'],\n        };\n        return isFuture ? format[key][0] : format[key][1];\n    }\n\n    var gomLatn = moment.defineLocale('gom-latn', {\n        months: {\n            standalone:\n                'Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr'.split(\n                    '_'\n                ),\n            format: 'Janerachea_Febrerachea_Marsachea_Abrilachea_Maiachea_Junachea_Julaiachea_Agostachea_Setembrachea_Otubrachea_Novembrachea_Dezembrachea'.split(\n                '_'\n            ),\n            isFormat: /MMMM(\\s)+D[oD]?/,\n        },\n        monthsShort:\n            'Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.'.split('_'),\n        monthsParseExact: true,\n        weekdays: \"Aitar_Somar_Mongllar_Budhvar_Birestar_Sukrar_Son'var\".split('_'),\n        weekdaysShort: 'Ait._Som._Mon._Bud._Bre._Suk._Son.'.split('_'),\n        weekdaysMin: 'Ai_Sm_Mo_Bu_Br_Su_Sn'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'A h:mm [vazta]',\n            LTS: 'A h:mm:ss [vazta]',\n            L: 'DD-MM-YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY A h:mm [vazta]',\n            LLLL: 'dddd, MMMM Do, YYYY, A h:mm [vazta]',\n            llll: 'ddd, D MMM YYYY, A h:mm [vazta]',\n        },\n        calendar: {\n            sameDay: '[Aiz] LT',\n            nextDay: '[Faleam] LT',\n            nextWeek: '[Fuddlo] dddd[,] LT',\n            lastDay: '[Kal] LT',\n            lastWeek: '[Fattlo] dddd[,] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s',\n            past: '%s adim',\n            s: processRelativeTime,\n            ss: processRelativeTime,\n            m: processRelativeTime,\n            mm: processRelativeTime,\n            h: processRelativeTime,\n            hh: processRelativeTime,\n            d: processRelativeTime,\n            dd: processRelativeTime,\n            M: processRelativeTime,\n            MM: processRelativeTime,\n            y: processRelativeTime,\n            yy: processRelativeTime,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(er)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                // the ordinal 'er' only applies to day of the month\n                case 'D':\n                    return number + 'er';\n                default:\n                case 'M':\n                case 'Q':\n                case 'DDD':\n                case 'd':\n                case 'w':\n                case 'W':\n                    return number;\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week\n            doy: 3, // The week that contains Jan 4th is the first week of the year (7 + 0 - 4)\n        },\n        meridiemParse: /rati|sokallim|donparam|sanje/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'rati') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'sokallim') {\n                return hour;\n            } else if (meridiem === 'donparam') {\n                return hour > 12 ? hour : hour + 12;\n            } else if (meridiem === 'sanje') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'rati';\n            } else if (hour < 12) {\n                return 'sokallim';\n            } else if (hour < 16) {\n                return 'donparam';\n            } else if (hour < 20) {\n                return 'sanje';\n            } else {\n                return 'rati';\n            }\n        },\n    });\n\n    return gomLatn;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9nb20tbGF0bi5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxvQ0FBb0MsSUFBSTtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2dvbS1sYXRuLmpzPzFhNmQiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEtvbmthbmkgTGF0aW4gc2NyaXB0IFtnb20tbGF0bl1cbi8vISBhdXRob3IgOiBUaGUgRGlzY292ZXJlciA6IGh0dHBzOi8vZ2l0aHViLmNvbS9XaWtpRGlzY292ZXJlclxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgZnVuY3Rpb24gcHJvY2Vzc1JlbGF0aXZlVGltZShudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSwgaXNGdXR1cmUpIHtcbiAgICAgICAgdmFyIGZvcm1hdCA9IHtcbiAgICAgICAgICAgIHM6IFsndGhvZGRlYSBzZWtvbmRhbW5pJywgJ3Rob2RkZSBzZWtvbmQnXSxcbiAgICAgICAgICAgIHNzOiBbbnVtYmVyICsgJyBzZWtvbmRhbW5pJywgbnVtYmVyICsgJyBzZWtvbmQnXSxcbiAgICAgICAgICAgIG06IFsnZWthIG1pbnRhbicsICdlayBtaW51dCddLFxuICAgICAgICAgICAgbW06IFtudW1iZXIgKyAnIG1pbnRhbW5pJywgbnVtYmVyICsgJyBtaW50YW0nXSxcbiAgICAgICAgICAgIGg6IFsnZWthIHZvcmFuJywgJ2VrIHZvciddLFxuICAgICAgICAgICAgaGg6IFtudW1iZXIgKyAnIHZvcmFtbmknLCBudW1iZXIgKyAnIHZvcmFtJ10sXG4gICAgICAgICAgICBkOiBbJ2VrYSBkaXNhbicsICdlayBkaXMnXSxcbiAgICAgICAgICAgIGRkOiBbbnVtYmVyICsgJyBkaXNhbW5pJywgbnVtYmVyICsgJyBkaXMnXSxcbiAgICAgICAgICAgIE06IFsnZWthIG1ob2luZWFuJywgJ2VrIG1ob2lubyddLFxuICAgICAgICAgICAgTU06IFtudW1iZXIgKyAnIG1ob2luZWFtbmknLCBudW1iZXIgKyAnIG1ob2luZSddLFxuICAgICAgICAgICAgeTogWydla2Egdm9yc2FuJywgJ2VrIHZvcm9zJ10sXG4gICAgICAgICAgICB5eTogW251bWJlciArICcgdm9yc2FtbmknLCBudW1iZXIgKyAnIHZvcnNhbSddLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gaXNGdXR1cmUgPyBmb3JtYXRba2V5XVswXSA6IGZvcm1hdFtrZXldWzFdO1xuICAgIH1cblxuICAgIHZhciBnb21MYXRuID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZ29tLWxhdG4nLCB7XG4gICAgICAgIG1vbnRoczoge1xuICAgICAgICAgICAgc3RhbmRhbG9uZTpcbiAgICAgICAgICAgICAgICAnSmFuZXJfRmVicmVyX01hcnNfQWJyaWxfTWFpX0p1bl9KdWxhaV9BZ29zdF9TZXRlbWJyX090dWJyX05vdmVtYnJfRGV6ZW1icicuc3BsaXQoXG4gICAgICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICBmb3JtYXQ6ICdKYW5lcmFjaGVhX0ZlYnJlcmFjaGVhX01hcnNhY2hlYV9BYnJpbGFjaGVhX01haWFjaGVhX0p1bmFjaGVhX0p1bGFpYWNoZWFfQWdvc3RhY2hlYV9TZXRlbWJyYWNoZWFfT3R1YnJhY2hlYV9Ob3ZlbWJyYWNoZWFfRGV6ZW1icmFjaGVhJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBpc0Zvcm1hdDogL01NTU0oXFxzKStEW29EXT8vLFxuICAgICAgICB9LFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICdKYW4uX0ZlYi5fTWFyc19BYnIuX01haV9KdW5fSnVsLl9BZ28uX1NldC5fT3R1Ll9Ob3YuX0Rlei4nLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOiBcIkFpdGFyX1NvbWFyX01vbmdsbGFyX0J1ZGh2YXJfQmlyZXN0YXJfU3VrcmFyX1Nvbid2YXJcIi5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnQWl0Ll9Tb20uX01vbi5fQnVkLl9CcmUuX1N1ay5fU29uLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdBaV9TbV9Nb19CdV9Ccl9TdV9Tbicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdBIGg6bW0gW3ZhenRhXScsXG4gICAgICAgICAgICBMVFM6ICdBIGg6bW06c3MgW3ZhenRhXScsXG4gICAgICAgICAgICBMOiAnREQtTU0tWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEEgaDptbSBbdmF6dGFdJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBNTU1NIERvLCBZWVlZLCBBIGg6bW0gW3ZhenRhXScsXG4gICAgICAgICAgICBsbGxsOiAnZGRkLCBEIE1NTSBZWVlZLCBBIGg6bW0gW3ZhenRhXScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW0Fpel0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tGYWxlYW1dIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnW0Z1ZGRsb10gZGRkZFssXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW0thbF0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbRmF0dGxvXSBkZGRkWyxdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzIGFkaW0nLFxuICAgICAgICAgICAgczogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHNzOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgbTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIG1tOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgaDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGhoOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgZDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGRkOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgTTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIE1NOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgeTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHl5OiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0oZXIpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlciwgcGVyaW9kKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHBlcmlvZCkge1xuICAgICAgICAgICAgICAgIC8vIHRoZSBvcmRpbmFsICdlcicgb25seSBhcHBsaWVzIHRvIGRheSBvZiB0aGUgbW9udGhcbiAgICAgICAgICAgICAgICBjYXNlICdEJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICdlcic7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBjYXNlICdNJzpcbiAgICAgICAgICAgICAgICBjYXNlICdRJzpcbiAgICAgICAgICAgICAgICBjYXNlICdEREQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ3cnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ1cnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDAsIC8vIFN1bmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrXG4gICAgICAgICAgICBkb3k6IDMsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhciAoNyArIDAgLSA0KVxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAvcmF0aXxzb2thbGxpbXxkb25wYXJhbXxzYW5qZS8sXG4gICAgICAgIG1lcmlkaWVtSG91cjogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXJpZGllbSA9PT0gJ3JhdGknKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgPCA0ID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICdzb2thbGxpbScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICdkb25wYXJhbScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA+IDEyID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICdzYW5qZScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCA0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdyYXRpJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdzb2thbGxpbSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxNikge1xuICAgICAgICAgICAgICAgIHJldHVybiAnZG9ucGFyYW0nO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMjApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3NhbmplJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdyYXRpJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBnb21MYXRuO1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/gom-latn.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/gu.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/gu.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Gujarati [gu]\n//! author : Kaushik Thanki : https://github.com/Kaushik1987\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '૧',\n            2: '૨',\n            3: '૩',\n            4: '૪',\n            5: '૫',\n            6: '૬',\n            7: '૭',\n            8: '૮',\n            9: '૯',\n            0: '૦',\n        },\n        numberMap = {\n            '૧': '1',\n            '૨': '2',\n            '૩': '3',\n            '૪': '4',\n            '૫': '5',\n            '૬': '6',\n            '૭': '7',\n            '૮': '8',\n            '૯': '9',\n            '૦': '0',\n        };\n\n    var gu = moment.defineLocale('gu', {\n        months: 'જાન્યુઆરી_ફેબ્રુઆરી_માર્ચ_એપ્રિલ_મે_જૂન_જુલાઈ_ઑગસ્ટ_સપ્ટેમ્બર_ઑક્ટ્બર_નવેમ્બર_ડિસેમ્બર'.split(\n            '_'\n        ),\n        monthsShort:\n            'જાન્યુ._ફેબ્રુ._માર્ચ_એપ્રિ._મે_જૂન_જુલા._ઑગ._સપ્ટે._ઑક્ટ્._નવે._ડિસે.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'રવિવાર_સોમવાર_મંગળવાર_બુધ્વાર_ગુરુવાર_શુક્રવાર_શનિવાર'.split(\n            '_'\n        ),\n        weekdaysShort: 'રવિ_સોમ_મંગળ_બુધ્_ગુરુ_શુક્ર_શનિ'.split('_'),\n        weekdaysMin: 'ર_સો_મં_બુ_ગુ_શુ_શ'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm વાગ્યે',\n            LTS: 'A h:mm:ss વાગ્યે',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm વાગ્યે',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm વાગ્યે',\n        },\n        calendar: {\n            sameDay: '[આજ] LT',\n            nextDay: '[કાલે] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[ગઇકાલે] LT',\n            lastWeek: '[પાછલા] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s મા',\n            past: '%s પહેલા',\n            s: 'અમુક પળો',\n            ss: '%d સેકંડ',\n            m: 'એક મિનિટ',\n            mm: '%d મિનિટ',\n            h: 'એક કલાક',\n            hh: '%d કલાક',\n            d: 'એક દિવસ',\n            dd: '%d દિવસ',\n            M: 'એક મહિનો',\n            MM: '%d મહિનો',\n            y: 'એક વર્ષ',\n            yy: '%d વર્ષ',\n        },\n        preparse: function (string) {\n            return string.replace(/[૧૨૩૪૫૬૭૮૯૦]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        // Gujarati notation for meridiems are quite fuzzy in practice. While there exists\n        // a rigid notion of a 'Pahar' it is not used as rigidly in modern Gujarati.\n        meridiemParse: /રાત|બપોર|સવાર|સાંજ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'રાત') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'સવાર') {\n                return hour;\n            } else if (meridiem === 'બપોર') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'સાંજ') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'રાત';\n            } else if (hour < 10) {\n                return 'સવાર';\n            } else if (hour < 17) {\n                return 'બપોર';\n            } else if (hour < 20) {\n                return 'સાંજ';\n            } else {\n                return 'રાત';\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return gu;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ndS5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ndS5qcz80NGU1Il0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBHdWphcmF0aSBbZ3VdXG4vLyEgYXV0aG9yIDogS2F1c2hpayBUaGFua2kgOiBodHRwczovL2dpdGh1Yi5jb20vS2F1c2hpazE5ODdcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBzeW1ib2xNYXAgPSB7XG4gICAgICAgICAgICAxOiAn4KunJyxcbiAgICAgICAgICAgIDI6ICfgq6gnLFxuICAgICAgICAgICAgMzogJ+CrqScsXG4gICAgICAgICAgICA0OiAn4KuqJyxcbiAgICAgICAgICAgIDU6ICfgq6snLFxuICAgICAgICAgICAgNjogJ+CrrCcsXG4gICAgICAgICAgICA3OiAn4KutJyxcbiAgICAgICAgICAgIDg6ICfgq64nLFxuICAgICAgICAgICAgOTogJ+CrrycsXG4gICAgICAgICAgICAwOiAn4KumJyxcbiAgICAgICAgfSxcbiAgICAgICAgbnVtYmVyTWFwID0ge1xuICAgICAgICAgICAgJ+Crpyc6ICcxJyxcbiAgICAgICAgICAgICfgq6gnOiAnMicsXG4gICAgICAgICAgICAn4KupJzogJzMnLFxuICAgICAgICAgICAgJ+Crqic6ICc0JyxcbiAgICAgICAgICAgICfgq6snOiAnNScsXG4gICAgICAgICAgICAn4KusJzogJzYnLFxuICAgICAgICAgICAgJ+CrrSc6ICc3JyxcbiAgICAgICAgICAgICfgq64nOiAnOCcsXG4gICAgICAgICAgICAn4KuvJzogJzknLFxuICAgICAgICAgICAgJ+Crpic6ICcwJyxcbiAgICAgICAgfTtcblxuICAgIHZhciBndSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2d1Jywge1xuICAgICAgICBtb250aHM6ICfgqpzgqr7gqqjgq43gqq/gq4HgqobgqrDgq4Bf4Kqr4KuH4Kqs4KuN4Kqw4KuB4KqG4Kqw4KuAX+CqruCqvuCqsOCrjeCqml/gqo/gqqrgq43gqrDgqr/gqrJf4Kqu4KuHX+CqnOCrguCqqF/gqpzgq4HgqrLgqr7gqohf4KqR4KqX4Kq44KuN4KqfX+CquOCqquCrjeCqn+Crh+CqruCrjeCqrOCqsF/gqpHgqpXgq43gqp/gq43gqqzgqrBf4Kqo4Kq14KuH4Kqu4KuN4Kqs4KqwX+CqoeCqv+CquOCrh+CqruCrjeCqrOCqsCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAn4Kqc4Kq+4Kqo4KuN4Kqv4KuBLl/gqqvgq4fgqqzgq43gqrDgq4EuX+CqruCqvuCqsOCrjeCqml/gqo/gqqrgq43gqrDgqr8uX+CqruCrh1/gqpzgq4Lgqqhf4Kqc4KuB4Kqy4Kq+Ll/gqpHgqpcuX+CquOCqquCrjeCqn+Crhy5f4KqR4KqV4KuN4Kqf4KuNLl/gqqjgqrXgq4cuX+CqoeCqv+CquOCrhy4nLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6ICfgqrDgqrXgqr/gqrXgqr7gqrBf4Kq44KuL4Kqu4Kq14Kq+4KqwX+CqruCqguCql+Cqs+CqteCqvuCqsF/gqqzgq4Hgqqfgq43gqrXgqr7gqrBf4KqX4KuB4Kqw4KuB4Kq14Kq+4KqwX+CqtuCrgeCqleCrjeCqsOCqteCqvuCqsF/gqrbgqqjgqr/gqrXgqr7gqrAnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfgqrDgqrXgqr9f4Kq44KuL4KquX+CqruCqguCql+Cqs1/gqqzgq4Hgqqfgq41f4KqX4KuB4Kqw4KuBX+CqtuCrgeCqleCrjeCqsF/gqrbgqqjgqr8nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn4KqwX+CquOCri1/gqq7gqoJf4Kqs4KuBX+Cql+CrgV/gqrbgq4Ff4Kq2Jy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdBIGg6bW0g4Kq14Kq+4KqX4KuN4Kqv4KuHJyxcbiAgICAgICAgICAgIExUUzogJ0EgaDptbTpzcyDgqrXgqr7gqpfgq43gqq/gq4cnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSwgQSBoOm1tIOCqteCqvuCql+CrjeCqr+CrhycsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSDgqrXgqr7gqpfgq43gqq/gq4cnLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vgqobgqpxdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb4KqV4Kq+4Kqy4KuHXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQsIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb4KqX4KqH4KqV4Kq+4Kqy4KuHXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1vgqqrgqr7gqpvgqrLgqr5dIGRkZGQsIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMg4Kqu4Kq+JyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyDgqqrgqrngq4fgqrLgqr4nLFxuICAgICAgICAgICAgczogJ+CqheCqruCrgeCqlSDgqqrgqrPgq4snLFxuICAgICAgICAgICAgc3M6ICclZCDgqrjgq4fgqpXgqoLgqqEnLFxuICAgICAgICAgICAgbTogJ+Cqj+CqlSDgqq7gqr/gqqjgqr/gqp8nLFxuICAgICAgICAgICAgbW06ICclZCDgqq7gqr/gqqjgqr/gqp8nLFxuICAgICAgICAgICAgaDogJ+Cqj+CqlSDgqpXgqrLgqr7gqpUnLFxuICAgICAgICAgICAgaGg6ICclZCDgqpXgqrLgqr7gqpUnLFxuICAgICAgICAgICAgZDogJ+Cqj+CqlSDgqqbgqr/gqrXgqrgnLFxuICAgICAgICAgICAgZGQ6ICclZCDgqqbgqr/gqrXgqrgnLFxuICAgICAgICAgICAgTTogJ+Cqj+CqlSDgqq7gqrngqr/gqqjgq4snLFxuICAgICAgICAgICAgTU06ICclZCDgqq7gqrngqr/gqqjgq4snLFxuICAgICAgICAgICAgeTogJ+Cqj+CqlSDgqrXgqrDgq43gqrcnLFxuICAgICAgICAgICAgeXk6ICclZCDgqrXgqrDgq43gqrcnLFxuICAgICAgICB9LFxuICAgICAgICBwcmVwYXJzZTogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9b4Kun4Kuo4Kup4Kuq4Kur4Kus4Kut4Kuu4Kuv4KumXS9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyTWFwW21hdGNoXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBwb3N0Zm9ybWF0OiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1xcZC9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3ltYm9sTWFwW21hdGNoXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICAvLyBHdWphcmF0aSBub3RhdGlvbiBmb3IgbWVyaWRpZW1zIGFyZSBxdWl0ZSBmdXp6eSBpbiBwcmFjdGljZS4gV2hpbGUgdGhlcmUgZXhpc3RzXG4gICAgICAgIC8vIGEgcmlnaWQgbm90aW9uIG9mIGEgJ1BhaGFyJyBpdCBpcyBub3QgdXNlZCBhcyByaWdpZGx5IGluIG1vZGVybiBHdWphcmF0aS5cbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL+CqsOCqvuCqpHzgqqzgqqrgq4vgqrB84Kq44Kq14Kq+4KqwfOCquOCqvuCqguCqnC8sXG4gICAgICAgIG1lcmlkaWVtSG91cjogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXJpZGllbSA9PT0gJ+CqsOCqvuCqpCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA8IDQgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CquOCqteCqvuCqsCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfgqqzgqqrgq4vgqrAnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgPj0gMTAgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CquOCqvuCqguCqnCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCA0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgqrDgqr7gqqQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CquOCqteCqvuCqsCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxNykge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4Kqs4Kqq4KuL4KqwJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDIwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgqrjgqr7gqoLgqpwnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CqsOCqvuCqpCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMCwgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDYsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDZ0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBndTtcblxufSkpKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/gu.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/he.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/he.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Hebrew [he]\n//! author : Tomer Cohen : https://github.com/tomer\n//! author : Moshe Simantov : https://github.com/DevelopmentIL\n//! author : Tal Ater : https://github.com/TalAter\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var he = moment.defineLocale('he', {\n        months: 'ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר'.split(\n            '_'\n        ),\n        monthsShort:\n            'ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳'.split('_'),\n        weekdays: 'ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת'.split('_'),\n        weekdaysShort: 'א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳'.split('_'),\n        weekdaysMin: 'א_ב_ג_ד_ה_ו_ש'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D [ב]MMMM YYYY',\n            LLL: 'D [ב]MMMM YYYY HH:mm',\n            LLLL: 'dddd, D [ב]MMMM YYYY HH:mm',\n            l: 'D/M/YYYY',\n            ll: 'D MMM YYYY',\n            lll: 'D MMM YYYY HH:mm',\n            llll: 'ddd, D MMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[היום ב־]LT',\n            nextDay: '[מחר ב־]LT',\n            nextWeek: 'dddd [בשעה] LT',\n            lastDay: '[אתמול ב־]LT',\n            lastWeek: '[ביום] dddd [האחרון בשעה] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'בעוד %s',\n            past: 'לפני %s',\n            s: 'מספר שניות',\n            ss: '%d שניות',\n            m: 'דקה',\n            mm: '%d דקות',\n            h: 'שעה',\n            hh: function (number) {\n                if (number === 2) {\n                    return 'שעתיים';\n                }\n                return number + ' שעות';\n            },\n            d: 'יום',\n            dd: function (number) {\n                if (number === 2) {\n                    return 'יומיים';\n                }\n                return number + ' ימים';\n            },\n            M: 'חודש',\n            MM: function (number) {\n                if (number === 2) {\n                    return 'חודשיים';\n                }\n                return number + ' חודשים';\n            },\n            y: 'שנה',\n            yy: function (number) {\n                if (number === 2) {\n                    return 'שנתיים';\n                } else if (number % 10 === 0 && number !== 10) {\n                    return number + ' שנה';\n                }\n                return number + ' שנים';\n            },\n        },\n        meridiemParse:\n            /אחה\"צ|לפנה\"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i,\n        isPM: function (input) {\n            return /^(אחה\"צ|אחרי הצהריים|בערב)$/.test(input);\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 5) {\n                return 'לפנות בוקר';\n            } else if (hour < 10) {\n                return 'בבוקר';\n            } else if (hour < 12) {\n                return isLower ? 'לפנה\"צ' : 'לפני הצהריים';\n            } else if (hour < 18) {\n                return isLower ? 'אחה\"צ' : 'אחרי הצהריים';\n            } else {\n                return 'בערב';\n            }\n        },\n    });\n\n    return he;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9oZS5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxrREFBVztBQUNyRSxHQUFHLENBQ3NCO0FBQ3pCLENBQUMsNEJBQTRCOztBQUU3Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9oZS5qcz9kZTM3Il0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBIZWJyZXcgW2hlXVxuLy8hIGF1dGhvciA6IFRvbWVyIENvaGVuIDogaHR0cHM6Ly9naXRodWIuY29tL3RvbWVyXG4vLyEgYXV0aG9yIDogTW9zaGUgU2ltYW50b3YgOiBodHRwczovL2dpdGh1Yi5jb20vRGV2ZWxvcG1lbnRJTFxuLy8hIGF1dGhvciA6IFRhbCBBdGVyIDogaHR0cHM6Ly9naXRodWIuY29tL1RhbEF0ZXJcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBoZSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2hlJywge1xuICAgICAgICBtb250aHM6ICfXmdeg15XXkNeoX9ek15HXqNeV15DXqF/Xnteo16Vf15DXpNeo15nXnF/XnteQ15lf15nXldeg15lf15nXldec15lf15DXldeS15XXodeYX9eh16TXmNee15HXqF/XkNeV16fXmNeV15HXqF/XoNeV15HXnteR16hf15PXptee15HXqCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAn15nXoNeV17Nf16TXkdeo17Nf157XqNelX9eQ16TXqNezX9ee15DXmV/XmdeV16DXmV/XmdeV15zXmV/XkNeV15LXs1/Xodek15jXs1/XkNeV16fXs1/XoNeV15HXs1/Xk9em157Xsycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICfXqNeQ16nXldefX9ep16DXmV/Xqdec15nXqdeZX9eo15HXmdei15lf15fXnteZ16nXmV/XqdeZ16nXmV/XqdeR16onLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfXkNezX9eR17Nf15LXs1/Xk9ezX9eU17Nf15XXs1/XqdezJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ9eQX9eRX9eSX9eTX9eUX9eVX9epJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgW9eRXU1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIFvXkV1NTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgW9eRXU1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBsOiAnRC9NL1lZWVknLFxuICAgICAgICAgICAgbGw6ICdEIE1NTSBZWVlZJyxcbiAgICAgICAgICAgIGxsbDogJ0QgTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgbGxsbDogJ2RkZCwgRCBNTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW9eU15nXldedINeR1r5dTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vXnteX16gg15HWvl1MVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW9eR16nXoteUXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW9eQ16rXnteV15wg15HWvl1MVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1vXkdeZ15XXnV0gZGRkZCBb15TXkNeX16jXldefINeR16nXoteUXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ9eR16LXldeTICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICfXnNek16DXmSAlcycsXG4gICAgICAgICAgICBzOiAn157Xodek16gg16nXoNeZ15XXqicsXG4gICAgICAgICAgICBzczogJyVkINep16DXmdeV16onLFxuICAgICAgICAgICAgbTogJ9eT16fXlCcsXG4gICAgICAgICAgICBtbTogJyVkINeT16fXldeqJyxcbiAgICAgICAgICAgIGg6ICfXqdei15QnLFxuICAgICAgICAgICAgaGg6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgICAgICBpZiAobnVtYmVyID09PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAn16nXoteq15nXmdedJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICcg16nXoteV16onO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGQ6ICfXmdeV150nLFxuICAgICAgICAgICAgZGQ6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgICAgICBpZiAobnVtYmVyID09PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAn15nXldee15nXmdedJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICcg15nXnteZ150nO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIE06ICfXl9eV15PXqScsXG4gICAgICAgICAgICBNTTogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICfXl9eV15PXqdeZ15nXnSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnINeX15XXk9ep15nXnSc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeTogJ9ep16DXlCcsXG4gICAgICAgICAgICB5eTogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICfXqdeg16rXmdeZ150nO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyICUgMTAgPT09IDAgJiYgbnVtYmVyICE9PSAxMCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJyDXqdeg15QnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJyDXqdeg15nXnSc7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOlxuICAgICAgICAgICAgL9eQ15fXlFwi16Z815zXpNeg15RcItemfNeQ15fXqNeZINeU16bXlNeo15nXmdedfNec16TXoNeZINeU16bXlNeo15nXmdedfNec16TXoNeV16og15HXlden16h815HXkdeV16fXqHzXkdei16jXkS9pLFxuICAgICAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiAvXijXkNeX15RcItemfNeQ15fXqNeZINeU16bXlNeo15nXmdedfNeR16LXqNeRKSQvLnRlc3QoaW5wdXQpO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCA1KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfXnNek16DXldeqINeR15XXp9eoJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDEwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfXkdeR15XXp9eoJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyAn15zXpNeg15RcItemJyA6ICfXnNek16DXmSDXlNem15TXqNeZ15nXnSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxOCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpc0xvd2VyID8gJ9eQ15fXlFwi16YnIDogJ9eQ15fXqNeZINeU16bXlNeo15nXmdedJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfXkdei16jXkSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gaGU7XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/he.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/hi.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/hi.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Hindi [hi]\n//! author : Mayank Singhal : https://github.com/mayanksinghal\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '१',\n            2: '२',\n            3: '३',\n            4: '४',\n            5: '५',\n            6: '६',\n            7: '७',\n            8: '८',\n            9: '९',\n            0: '०',\n        },\n        numberMap = {\n            '१': '1',\n            '२': '2',\n            '३': '3',\n            '४': '4',\n            '५': '5',\n            '६': '6',\n            '७': '7',\n            '८': '8',\n            '९': '9',\n            '०': '0',\n        },\n        monthsParse = [\n            /^जन/i,\n            /^फ़र|फर/i,\n            /^मार्च/i,\n            /^अप्रै/i,\n            /^मई/i,\n            /^जून/i,\n            /^जुल/i,\n            /^अग/i,\n            /^सितं|सित/i,\n            /^अक्टू/i,\n            /^नव|नवं/i,\n            /^दिसं|दिस/i,\n        ],\n        shortMonthsParse = [\n            /^जन/i,\n            /^फ़र/i,\n            /^मार्च/i,\n            /^अप्रै/i,\n            /^मई/i,\n            /^जून/i,\n            /^जुल/i,\n            /^अग/i,\n            /^सित/i,\n            /^अक्टू/i,\n            /^नव/i,\n            /^दिस/i,\n        ];\n\n    var hi = moment.defineLocale('hi', {\n        months: {\n            format: 'जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर'.split(\n                '_'\n            ),\n            standalone:\n                'जनवरी_फरवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितंबर_अक्टूबर_नवंबर_दिसंबर'.split(\n                    '_'\n                ),\n        },\n        monthsShort:\n            'जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.'.split('_'),\n        weekdays: 'रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),\n        weekdaysShort: 'रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि'.split('_'),\n        weekdaysMin: 'र_सो_मं_बु_गु_शु_श'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm बजे',\n            LTS: 'A h:mm:ss बजे',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm बजे',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm बजे',\n        },\n\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: shortMonthsParse,\n\n        monthsRegex:\n            /^(जनवरी|जन\\.?|फ़रवरी|फरवरी|फ़र\\.?|मार्च?|अप्रैल|अप्रै\\.?|मई?|जून?|जुलाई|जुल\\.?|अगस्त|अग\\.?|सितम्बर|सितंबर|सित\\.?|अक्टूबर|अक्टू\\.?|नवम्बर|नवंबर|नव\\.?|दिसम्बर|दिसंबर|दिस\\.?)/i,\n\n        monthsShortRegex:\n            /^(जनवरी|जन\\.?|फ़रवरी|फरवरी|फ़र\\.?|मार्च?|अप्रैल|अप्रै\\.?|मई?|जून?|जुलाई|जुल\\.?|अगस्त|अग\\.?|सितम्बर|सितंबर|सित\\.?|अक्टूबर|अक्टू\\.?|नवम्बर|नवंबर|नव\\.?|दिसम्बर|दिसंबर|दिस\\.?)/i,\n\n        monthsStrictRegex:\n            /^(जनवरी?|फ़रवरी|फरवरी?|मार्च?|अप्रैल?|मई?|जून?|जुलाई?|अगस्त?|सितम्बर|सितंबर|सित?\\.?|अक्टूबर|अक्टू\\.?|नवम्बर|नवंबर?|दिसम्बर|दिसंबर?)/i,\n\n        monthsShortStrictRegex:\n            /^(जन\\.?|फ़र\\.?|मार्च?|अप्रै\\.?|मई?|जून?|जुल\\.?|अग\\.?|सित\\.?|अक्टू\\.?|नव\\.?|दिस\\.?)/i,\n\n        calendar: {\n            sameDay: '[आज] LT',\n            nextDay: '[कल] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[कल] LT',\n            lastWeek: '[पिछले] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s में',\n            past: '%s पहले',\n            s: 'कुछ ही क्षण',\n            ss: '%d सेकंड',\n            m: 'एक मिनट',\n            mm: '%d मिनट',\n            h: 'एक घंटा',\n            hh: '%d घंटे',\n            d: 'एक दिन',\n            dd: '%d दिन',\n            M: 'एक महीने',\n            MM: '%d महीने',\n            y: 'एक वर्ष',\n            yy: '%d वर्ष',\n        },\n        preparse: function (string) {\n            return string.replace(/[१२३४५६७८९०]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        // Hindi notation for meridiems are quite fuzzy in practice. While there exists\n        // a rigid notion of a 'Pahar' it is not used as rigidly in modern Hindi.\n        meridiemParse: /रात|सुबह|दोपहर|शाम/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'रात') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'सुबह') {\n                return hour;\n            } else if (meridiem === 'दोपहर') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'शाम') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'रात';\n            } else if (hour < 10) {\n                return 'सुबह';\n            } else if (hour < 17) {\n                return 'दोपहर';\n            } else if (hour < 20) {\n                return 'शाम';\n            } else {\n                return 'रात';\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return hi;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9oaS5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9oaS5qcz83YjU5Il0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBIaW5kaSBbaGldXG4vLyEgYXV0aG9yIDogTWF5YW5rIFNpbmdoYWwgOiBodHRwczovL2dpdGh1Yi5jb20vbWF5YW5rc2luZ2hhbFxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHN5bWJvbE1hcCA9IHtcbiAgICAgICAgICAgIDE6ICfgpacnLFxuICAgICAgICAgICAgMjogJ+ClqCcsXG4gICAgICAgICAgICAzOiAn4KWpJyxcbiAgICAgICAgICAgIDQ6ICfgpaonLFxuICAgICAgICAgICAgNTogJ+ClqycsXG4gICAgICAgICAgICA2OiAn4KWsJyxcbiAgICAgICAgICAgIDc6ICfgpa0nLFxuICAgICAgICAgICAgODogJ+ClricsXG4gICAgICAgICAgICA5OiAn4KWvJyxcbiAgICAgICAgICAgIDA6ICfgpaYnLFxuICAgICAgICB9LFxuICAgICAgICBudW1iZXJNYXAgPSB7XG4gICAgICAgICAgICAn4KWnJzogJzEnLFxuICAgICAgICAgICAgJ+ClqCc6ICcyJyxcbiAgICAgICAgICAgICfgpaknOiAnMycsXG4gICAgICAgICAgICAn4KWqJzogJzQnLFxuICAgICAgICAgICAgJ+Clqyc6ICc1JyxcbiAgICAgICAgICAgICfgpawnOiAnNicsXG4gICAgICAgICAgICAn4KWtJzogJzcnLFxuICAgICAgICAgICAgJ+Clric6ICc4JyxcbiAgICAgICAgICAgICfgpa8nOiAnOScsXG4gICAgICAgICAgICAn4KWmJzogJzAnLFxuICAgICAgICB9LFxuICAgICAgICBtb250aHNQYXJzZSA9IFtcbiAgICAgICAgICAgIC9e4KSc4KSoL2ksXG4gICAgICAgICAgICAvXuCkq+CkvOCksHzgpKvgpLAvaSxcbiAgICAgICAgICAgIC9e4KSu4KS+4KSw4KWN4KSaL2ksXG4gICAgICAgICAgICAvXuCkheCkquCljeCksOCliC9pLFxuICAgICAgICAgICAgL17gpK7gpIgvaSxcbiAgICAgICAgICAgIC9e4KSc4KWC4KSoL2ksXG4gICAgICAgICAgICAvXuCknOClgeCksi9pLFxuICAgICAgICAgICAgL17gpIXgpJcvaSxcbiAgICAgICAgICAgIC9e4KS44KS/4KSk4KSCfOCkuOCkv+CkpC9pLFxuICAgICAgICAgICAgL17gpIXgpJXgpY3gpJ/gpYIvaSxcbiAgICAgICAgICAgIC9e4KSo4KS1fOCkqOCkteCkgi9pLFxuICAgICAgICAgICAgL17gpKbgpL/gpLjgpIJ84KSm4KS/4KS4L2ksXG4gICAgICAgIF0sXG4gICAgICAgIHNob3J0TW9udGhzUGFyc2UgPSBbXG4gICAgICAgICAgICAvXuCknOCkqC9pLFxuICAgICAgICAgICAgL17gpKvgpLzgpLAvaSxcbiAgICAgICAgICAgIC9e4KSu4KS+4KSw4KWN4KSaL2ksXG4gICAgICAgICAgICAvXuCkheCkquCljeCksOCliC9pLFxuICAgICAgICAgICAgL17gpK7gpIgvaSxcbiAgICAgICAgICAgIC9e4KSc4KWC4KSoL2ksXG4gICAgICAgICAgICAvXuCknOClgeCksi9pLFxuICAgICAgICAgICAgL17gpIXgpJcvaSxcbiAgICAgICAgICAgIC9e4KS44KS/4KSkL2ksXG4gICAgICAgICAgICAvXuCkheCkleCljeCkn+Clgi9pLFxuICAgICAgICAgICAgL17gpKjgpLUvaSxcbiAgICAgICAgICAgIC9e4KSm4KS/4KS4L2ksXG4gICAgICAgIF07XG5cbiAgICB2YXIgaGkgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdoaScsIHtcbiAgICAgICAgbW9udGhzOiB7XG4gICAgICAgICAgICBmb3JtYXQ6ICfgpJzgpKjgpLXgpLDgpYBf4KSr4KS84KSw4KS14KSw4KWAX+CkruCkvuCksOCljeCkml/gpIXgpKrgpY3gpLDgpYjgpLJf4KSu4KSIX+CknOClguCkqF/gpJzgpYHgpLLgpL7gpIhf4KSF4KSX4KS44KWN4KSkX+CkuOCkv+CkpOCkruCljeCkrOCksF/gpIXgpJXgpY3gpJ/gpYLgpKzgpLBf4KSo4KS14KSu4KWN4KSs4KSwX+CkpuCkv+CkuOCkruCljeCkrOCksCcuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgc3RhbmRhbG9uZTpcbiAgICAgICAgICAgICAgICAn4KSc4KSo4KS14KSw4KWAX+Ckq+CksOCkteCksOClgF/gpK7gpL7gpLDgpY3gpJpf4KSF4KSq4KWN4KSw4KWI4KSyX+CkruCkiF/gpJzgpYLgpKhf4KSc4KWB4KSy4KS+4KSIX+CkheCkl+CkuOCljeCkpF/gpLjgpL/gpKTgpILgpKzgpLBf4KSF4KSV4KWN4KSf4KWC4KSs4KSwX+CkqOCkteCkguCkrOCksF/gpKbgpL/gpLjgpILgpKzgpLAnLnNwbGl0KFxuICAgICAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICB9LFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICfgpJzgpKguX+Ckq+CkvOCksC5f4KSu4KS+4KSw4KWN4KSaX+CkheCkquCljeCksOCliC5f4KSu4KSIX+CknOClguCkqF/gpJzgpYHgpLIuX+CkheCkly5f4KS44KS/4KSkLl/gpIXgpJXgpY3gpJ/gpYIuX+CkqOCktS5f4KSm4KS/4KS4Licuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICfgpLDgpLXgpL/gpLXgpL7gpLBf4KS44KWL4KSu4KS14KS+4KSwX+CkruCkguCkl+CksuCkteCkvuCksF/gpKzgpYHgpKfgpLXgpL7gpLBf4KSX4KWB4KSw4KWC4KS14KS+4KSwX+CktuClgeCkleCljeCksOCkteCkvuCksF/gpLbgpKjgpL/gpLXgpL7gpLAnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfgpLDgpLXgpL9f4KS44KWL4KSuX+CkruCkguCkl+Cksl/gpKzgpYHgpKdf4KSX4KWB4KSw4KWCX+CktuClgeCkleCljeCksF/gpLbgpKjgpL8nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn4KSwX+CkuOCli1/gpK7gpIJf4KSs4KWBX+Ckl+ClgV/gpLbgpYFf4KS2Jy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdBIGg6bW0g4KSs4KSc4KWHJyxcbiAgICAgICAgICAgIExUUzogJ0EgaDptbTpzcyDgpKzgpJzgpYcnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSwgQSBoOm1tIOCkrOCknOClhycsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSDgpKzgpJzgpYcnLFxuICAgICAgICB9LFxuXG4gICAgICAgIG1vbnRoc1BhcnNlOiBtb250aHNQYXJzZSxcbiAgICAgICAgbG9uZ01vbnRoc1BhcnNlOiBtb250aHNQYXJzZSxcbiAgICAgICAgc2hvcnRNb250aHNQYXJzZTogc2hvcnRNb250aHNQYXJzZSxcblxuICAgICAgICBtb250aHNSZWdleDpcbiAgICAgICAgICAgIC9eKOCknOCkqOCkteCksOClgHzgpJzgpKhcXC4/fOCkq+CkvOCksOCkteCksOClgHzgpKvgpLDgpLXgpLDgpYB84KSr4KS84KSwXFwuP3zgpK7gpL7gpLDgpY3gpJo/fOCkheCkquCljeCksOCliOCksnzgpIXgpKrgpY3gpLDgpYhcXC4/fOCkruCkiD984KSc4KWC4KSoP3zgpJzgpYHgpLLgpL7gpIh84KSc4KWB4KSyXFwuP3zgpIXgpJfgpLjgpY3gpKR84KSF4KSXXFwuP3zgpLjgpL/gpKTgpK7gpY3gpKzgpLB84KS44KS/4KSk4KSC4KSs4KSwfOCkuOCkv+CkpFxcLj984KSF4KSV4KWN4KSf4KWC4KSs4KSwfOCkheCkleCljeCkn+ClglxcLj984KSo4KS14KSu4KWN4KSs4KSwfOCkqOCkteCkguCkrOCksHzgpKjgpLVcXC4/fOCkpuCkv+CkuOCkruCljeCkrOCksHzgpKbgpL/gpLjgpILgpKzgpLB84KSm4KS/4KS4XFwuPykvaSxcblxuICAgICAgICBtb250aHNTaG9ydFJlZ2V4OlxuICAgICAgICAgICAgL14o4KSc4KSo4KS14KSw4KWAfOCknOCkqFxcLj984KSr4KS84KSw4KS14KSw4KWAfOCkq+CksOCkteCksOClgHzgpKvgpLzgpLBcXC4/fOCkruCkvuCksOCljeCkmj984KSF4KSq4KWN4KSw4KWI4KSyfOCkheCkquCljeCksOCliFxcLj984KSu4KSIP3zgpJzgpYLgpKg/fOCknOClgeCksuCkvuCkiHzgpJzgpYHgpLJcXC4/fOCkheCkl+CkuOCljeCkpHzgpIXgpJdcXC4/fOCkuOCkv+CkpOCkruCljeCkrOCksHzgpLjgpL/gpKTgpILgpKzgpLB84KS44KS/4KSkXFwuP3zgpIXgpJXgpY3gpJ/gpYLgpKzgpLB84KSF4KSV4KWN4KSf4KWCXFwuP3zgpKjgpLXgpK7gpY3gpKzgpLB84KSo4KS14KSC4KSs4KSwfOCkqOCktVxcLj984KSm4KS/4KS44KSu4KWN4KSs4KSwfOCkpuCkv+CkuOCkguCkrOCksHzgpKbgpL/gpLhcXC4/KS9pLFxuXG4gICAgICAgIG1vbnRoc1N0cmljdFJlZ2V4OlxuICAgICAgICAgICAgL14o4KSc4KSo4KS14KSw4KWAP3zgpKvgpLzgpLDgpLXgpLDgpYB84KSr4KSw4KS14KSw4KWAP3zgpK7gpL7gpLDgpY3gpJo/fOCkheCkquCljeCksOCliOCksj984KSu4KSIP3zgpJzgpYLgpKg/fOCknOClgeCksuCkvuCkiD984KSF4KSX4KS44KWN4KSkP3zgpLjgpL/gpKTgpK7gpY3gpKzgpLB84KS44KS/4KSk4KSC4KSs4KSwfOCkuOCkv+CkpD9cXC4/fOCkheCkleCljeCkn+ClguCkrOCksHzgpIXgpJXgpY3gpJ/gpYJcXC4/fOCkqOCkteCkruCljeCkrOCksHzgpKjgpLXgpILgpKzgpLA/fOCkpuCkv+CkuOCkruCljeCkrOCksHzgpKbgpL/gpLjgpILgpKzgpLA/KS9pLFxuXG4gICAgICAgIG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6XG4gICAgICAgICAgICAvXijgpJzgpKhcXC4/fOCkq+CkvOCksFxcLj984KSu4KS+4KSw4KWN4KSaP3zgpIXgpKrgpY3gpLDgpYhcXC4/fOCkruCkiD984KSc4KWC4KSoP3zgpJzgpYHgpLJcXC4/fOCkheCkl1xcLj984KS44KS/4KSkXFwuP3zgpIXgpJXgpY3gpJ/gpYJcXC4/fOCkqOCktVxcLj984KSm4KS/4KS4XFwuPykvaSxcblxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vgpIbgpJxdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb4KSV4KSyXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQsIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb4KSV4KSyXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1vgpKrgpL/gpJvgpLLgpYddIGRkZGQsIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMg4KSu4KWH4KSCJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyDgpKrgpLngpLLgpYcnLFxuICAgICAgICAgICAgczogJ+CkleClgeCkmyDgpLngpYAg4KSV4KWN4KS34KSjJyxcbiAgICAgICAgICAgIHNzOiAnJWQg4KS44KWH4KSV4KSC4KShJyxcbiAgICAgICAgICAgIG06ICfgpI/gpJUg4KSu4KS/4KSo4KSfJyxcbiAgICAgICAgICAgIG1tOiAnJWQg4KSu4KS/4KSo4KSfJyxcbiAgICAgICAgICAgIGg6ICfgpI/gpJUg4KSY4KSC4KSf4KS+JyxcbiAgICAgICAgICAgIGhoOiAnJWQg4KSY4KSC4KSf4KWHJyxcbiAgICAgICAgICAgIGQ6ICfgpI/gpJUg4KSm4KS/4KSoJyxcbiAgICAgICAgICAgIGRkOiAnJWQg4KSm4KS/4KSoJyxcbiAgICAgICAgICAgIE06ICfgpI/gpJUg4KSu4KS54KWA4KSo4KWHJyxcbiAgICAgICAgICAgIE1NOiAnJWQg4KSu4KS54KWA4KSo4KWHJyxcbiAgICAgICAgICAgIHk6ICfgpI/gpJUg4KS14KSw4KWN4KS3JyxcbiAgICAgICAgICAgIHl5OiAnJWQg4KS14KSw4KWN4KS3JyxcbiAgICAgICAgfSxcbiAgICAgICAgcHJlcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvW+Clp+ClqOClqeClquClq+ClrOClreClruClr+Clpl0vZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlck1hcFttYXRjaF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgcG9zdGZvcm1hdDogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9cXGQvZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN5bWJvbE1hcFttYXRjaF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgLy8gSGluZGkgbm90YXRpb24gZm9yIG1lcmlkaWVtcyBhcmUgcXVpdGUgZnV6enkgaW4gcHJhY3RpY2UuIFdoaWxlIHRoZXJlIGV4aXN0c1xuICAgICAgICAvLyBhIHJpZ2lkIG5vdGlvbiBvZiBhICdQYWhhcicgaXQgaXMgbm90IHVzZWQgYXMgcmlnaWRseSBpbiBtb2Rlcm4gSGluZGkuXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/gpLDgpL7gpKR84KS44KWB4KSs4KS5fOCkpuCli+CkquCkueCksHzgpLbgpL7gpK4vLFxuICAgICAgICBtZXJpZGllbUhvdXI6IGZ1bmN0aW9uIChob3VyLCBtZXJpZGllbSkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWVyaWRpZW0gPT09ICfgpLDgpL7gpKQnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgPCA0ID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfgpLjgpYHgpKzgpLknKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4KSm4KWL4KSq4KS54KSwJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyID49IDEwID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfgpLbgpL7gpK4nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgNCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4KSw4KS+4KSkJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDEwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgpLjgpYHgpKzgpLknO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CkpuCli+CkquCkueCksCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAyMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4KS24KS+4KSuJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgpLDgpL7gpKQnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDAsIC8vIFN1bmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA2LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA2dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gaGk7XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/hi.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/hr.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/hr.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Croatian [hr]\n//! author : Bojan Marković : https://github.com/bmarkovic\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function translate(number, withoutSuffix, key) {\n        var result = number + ' ';\n        switch (key) {\n            case 'ss':\n                if (number === 1) {\n                    result += 'sekunda';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'sekunde';\n                } else {\n                    result += 'sekundi';\n                }\n                return result;\n            case 'm':\n                return withoutSuffix ? 'jedna minuta' : 'jedne minute';\n            case 'mm':\n                if (number === 1) {\n                    result += 'minuta';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'minute';\n                } else {\n                    result += 'minuta';\n                }\n                return result;\n            case 'h':\n                return withoutSuffix ? 'jedan sat' : 'jednog sata';\n            case 'hh':\n                if (number === 1) {\n                    result += 'sat';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'sata';\n                } else {\n                    result += 'sati';\n                }\n                return result;\n            case 'dd':\n                if (number === 1) {\n                    result += 'dan';\n                } else {\n                    result += 'dana';\n                }\n                return result;\n            case 'MM':\n                if (number === 1) {\n                    result += 'mjesec';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'mjeseca';\n                } else {\n                    result += 'mjeseci';\n                }\n                return result;\n            case 'yy':\n                if (number === 1) {\n                    result += 'godina';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'godine';\n                } else {\n                    result += 'godina';\n                }\n                return result;\n        }\n    }\n\n    var hr = moment.defineLocale('hr', {\n        months: {\n            format: 'siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca'.split(\n                '_'\n            ),\n            standalone:\n                'siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac'.split(\n                    '_'\n                ),\n        },\n        monthsShort:\n            'sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split(\n            '_'\n        ),\n        weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n        weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'Do MMMM YYYY',\n            LLL: 'Do MMMM YYYY H:mm',\n            LLLL: 'dddd, Do MMMM YYYY H:mm',\n        },\n        calendar: {\n            sameDay: '[danas u] LT',\n            nextDay: '[sutra u] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[u] [nedjelju] [u] LT';\n                    case 3:\n                        return '[u] [srijedu] [u] LT';\n                    case 6:\n                        return '[u] [subotu] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[u] dddd [u] LT';\n                }\n            },\n            lastDay: '[jučer u] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[prošlu] [nedjelju] [u] LT';\n                    case 3:\n                        return '[prošlu] [srijedu] [u] LT';\n                    case 6:\n                        return '[prošle] [subote] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[prošli] dddd [u] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'za %s',\n            past: 'prije %s',\n            s: 'par sekundi',\n            ss: translate,\n            m: translate,\n            mm: translate,\n            h: translate,\n            hh: translate,\n            d: 'dan',\n            dd: translate,\n            M: 'mjesec',\n            MM: translate,\n            y: 'godinu',\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return hr;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9oci5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxvQ0FBb0MsSUFBSTtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9oci5qcz9hMzNlIl0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBDcm9hdGlhbiBbaHJdXG4vLyEgYXV0aG9yIDogQm9qYW4gTWFya292acSHIDogaHR0cHM6Ly9naXRodWIuY29tL2JtYXJrb3ZpY1xuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgZnVuY3Rpb24gdHJhbnNsYXRlKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5KSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBudW1iZXIgKyAnICc7XG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlICdzcyc6XG4gICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ3Nla3VuZGEnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyID09PSAyIHx8IG51bWJlciA9PT0gMyB8fCBudW1iZXIgPT09IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdzZWt1bmRlJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ3Nla3VuZGknO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgY2FzZSAnbSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyAnamVkbmEgbWludXRhJyA6ICdqZWRuZSBtaW51dGUnO1xuICAgICAgICAgICAgY2FzZSAnbW0nOlxuICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdtaW51dGEnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyID09PSAyIHx8IG51bWJlciA9PT0gMyB8fCBudW1iZXIgPT09IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdtaW51dGUnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnbWludXRhJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIGNhc2UgJ2gnOlxuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gJ2plZGFuIHNhdCcgOiAnamVkbm9nIHNhdGEnO1xuICAgICAgICAgICAgY2FzZSAnaGgnOlxuICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdzYXQnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyID09PSAyIHx8IG51bWJlciA9PT0gMyB8fCBudW1iZXIgPT09IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdzYXRhJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ3NhdGknO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgY2FzZSAnZGQnOlxuICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdkYW4nO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnZGFuYSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICBjYXNlICdNTSc6XG4gICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ21qZXNlYyc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPT09IDIgfHwgbnVtYmVyID09PSAzIHx8IG51bWJlciA9PT0gNCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ21qZXNlY2EnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnbWplc2VjaSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICBjYXNlICd5eSc6XG4gICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ2dvZGluYSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPT09IDIgfHwgbnVtYmVyID09PSAzIHx8IG51bWJlciA9PT0gNCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ2dvZGluZSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdnb2RpbmEnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGhyID0gbW9tZW50LmRlZmluZUxvY2FsZSgnaHInLCB7XG4gICAgICAgIG1vbnRoczoge1xuICAgICAgICAgICAgZm9ybWF0OiAnc2lqZcSNbmphX3ZlbGphxI1lX2/FvnVqa2FfdHJhdm5qYV9zdmlibmphX2xpcG5qYV9zcnBuamFfa29sb3ZvemFfcnVqbmFfbGlzdG9wYWRhX3N0dWRlbm9nYV9wcm9zaW5jYScuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgc3RhbmRhbG9uZTpcbiAgICAgICAgICAgICAgICAnc2lqZcSNYW5qX3ZlbGphxI1hX2/FvnVqYWtfdHJhdmFual9zdmliYW5qX2xpcGFual9zcnBhbmpfa29sb3Zvel9ydWphbl9saXN0b3BhZF9zdHVkZW5pX3Byb3NpbmFjJy5zcGxpdChcbiAgICAgICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgfSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAnc2lqLl92ZWxqLl9vxb51Ll90cmEuX3N2aS5fbGlwLl9zcnAuX2tvbC5fcnVqLl9saXMuX3N0dS5fcHJvLicuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czogJ25lZGplbGphX3BvbmVkamVsamFrX3V0b3Jha19zcmlqZWRhX8SNZXR2cnRha19wZXRha19zdWJvdGEnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICduZWQuX3Bvbi5fdXRvLl9zcmkuX8SNZXQuX3BldC5fc3ViLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICduZV9wb191dF9zcl/EjWVfcGVfc3UnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSDptbScsXG4gICAgICAgICAgICBMVFM6ICdIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRG8gTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0RvIE1NTU0gWVlZWSBIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEbyBNTU1NIFlZWVkgSDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW2RhbmFzIHVdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbc3V0cmEgdV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdV0gW25lZGplbGp1XSBbdV0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t1XSBbc3JpamVkdV0gW3VdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdV0gW3N1Ym90dV0gW3VdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdV0gZGRkZCBbdV0gTFQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0RGF5OiAnW2p1xI1lciB1XSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kYXkoKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1twcm/FoWx1XSBbbmVkamVsanVdIFt1XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3Byb8WhbHVdIFtzcmlqZWR1XSBbdV0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1twcm/FoWxlXSBbc3Vib3RlXSBbdV0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1twcm/FoWxpXSBkZGRkIFt1XSBMVCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnemEgJXMnLFxuICAgICAgICAgICAgcGFzdDogJ3ByaWplICVzJyxcbiAgICAgICAgICAgIHM6ICdwYXIgc2VrdW5kaScsXG4gICAgICAgICAgICBzczogdHJhbnNsYXRlLFxuICAgICAgICAgICAgbTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgbW06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGg6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGhoOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBkOiAnZGFuJyxcbiAgICAgICAgICAgIGRkOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBNOiAnbWplc2VjJyxcbiAgICAgICAgICAgIE1NOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICB5OiAnZ29kaW51JyxcbiAgICAgICAgICAgIHl5OiB0cmFuc2xhdGUsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWw6ICclZC4nLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA3LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA3dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gaHI7XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/hr.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/hu.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/hu.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Hungarian [hu]\n//! author : Adam Brunner : https://github.com/adambrunner\n//! author : Peter Viszt  : https://github.com/passatgt\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var weekEndings =\n        'vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton'.split(' ');\n    function translate(number, withoutSuffix, key, isFuture) {\n        var num = number;\n        switch (key) {\n            case 's':\n                return isFuture || withoutSuffix\n                    ? 'néhány másodperc'\n                    : 'néhány másodperce';\n            case 'ss':\n                return num + (isFuture || withoutSuffix)\n                    ? ' másodperc'\n                    : ' másodperce';\n            case 'm':\n                return 'egy' + (isFuture || withoutSuffix ? ' perc' : ' perce');\n            case 'mm':\n                return num + (isFuture || withoutSuffix ? ' perc' : ' perce');\n            case 'h':\n                return 'egy' + (isFuture || withoutSuffix ? ' óra' : ' órája');\n            case 'hh':\n                return num + (isFuture || withoutSuffix ? ' óra' : ' órája');\n            case 'd':\n                return 'egy' + (isFuture || withoutSuffix ? ' nap' : ' napja');\n            case 'dd':\n                return num + (isFuture || withoutSuffix ? ' nap' : ' napja');\n            case 'M':\n                return 'egy' + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');\n            case 'MM':\n                return num + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');\n            case 'y':\n                return 'egy' + (isFuture || withoutSuffix ? ' év' : ' éve');\n            case 'yy':\n                return num + (isFuture || withoutSuffix ? ' év' : ' éve');\n        }\n        return '';\n    }\n    function week(isFuture) {\n        return (\n            (isFuture ? '' : '[múlt] ') +\n            '[' +\n            weekEndings[this.day()] +\n            '] LT[-kor]'\n        );\n    }\n\n    var hu = moment.defineLocale('hu', {\n        months: 'január_február_március_április_május_június_július_augusztus_szeptember_október_november_december'.split(\n            '_'\n        ),\n        monthsShort:\n            'jan._feb._márc._ápr._máj._jún._júl._aug._szept._okt._nov._dec.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat'.split('_'),\n        weekdaysShort: 'vas_hét_kedd_sze_csüt_pén_szo'.split('_'),\n        weekdaysMin: 'v_h_k_sze_cs_p_szo'.split('_'),\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'YYYY.MM.DD.',\n            LL: 'YYYY. MMMM D.',\n            LLL: 'YYYY. MMMM D. H:mm',\n            LLLL: 'YYYY. MMMM D., dddd H:mm',\n        },\n        meridiemParse: /de|du/i,\n        isPM: function (input) {\n            return input.charAt(1).toLowerCase() === 'u';\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 12) {\n                return isLower === true ? 'de' : 'DE';\n            } else {\n                return isLower === true ? 'du' : 'DU';\n            }\n        },\n        calendar: {\n            sameDay: '[ma] LT[-kor]',\n            nextDay: '[holnap] LT[-kor]',\n            nextWeek: function () {\n                return week.call(this, true);\n            },\n            lastDay: '[tegnap] LT[-kor]',\n            lastWeek: function () {\n                return week.call(this, false);\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s múlva',\n            past: '%s',\n            s: translate,\n            ss: translate,\n            m: translate,\n            mm: translate,\n            h: translate,\n            hh: translate,\n            d: translate,\n            dd: translate,\n            M: translate,\n            MM: translate,\n            y: translate,\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return hu;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9odS5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsa0RBQVc7QUFDckUsR0FBRyxDQUNzQjtBQUN6QixDQUFDLDRCQUE0Qjs7QUFFN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2h1LmpzPzM1YWIiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEh1bmdhcmlhbiBbaHVdXG4vLyEgYXV0aG9yIDogQWRhbSBCcnVubmVyIDogaHR0cHM6Ly9naXRodWIuY29tL2FkYW1icnVubmVyXG4vLyEgYXV0aG9yIDogUGV0ZXIgVmlzenQgIDogaHR0cHM6Ly9naXRodWIuY29tL3Bhc3NhdGd0XG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgd2Vla0VuZGluZ3MgPVxuICAgICAgICAndmFzw6FybmFwIGjDqXRmxZFuIGtlZGRlbiBzemVyZMOhbiBjc8O8dMO2cnTDtmvDtm4gcMOpbnRla2VuIHN6b21iYXRvbicuc3BsaXQoJyAnKTtcbiAgICBmdW5jdGlvbiB0cmFuc2xhdGUobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXksIGlzRnV0dXJlKSB7XG4gICAgICAgIHZhciBudW0gPSBudW1iZXI7XG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlICdzJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNGdXR1cmUgfHwgd2l0aG91dFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICA/ICduw6low6FueSBtw6Fzb2RwZXJjJ1xuICAgICAgICAgICAgICAgICAgICA6ICduw6low6FueSBtw6Fzb2RwZXJjZSc7XG4gICAgICAgICAgICBjYXNlICdzcyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bSArIChpc0Z1dHVyZSB8fCB3aXRob3V0U3VmZml4KVxuICAgICAgICAgICAgICAgICAgICA/ICcgbcOhc29kcGVyYydcbiAgICAgICAgICAgICAgICAgICAgOiAnIG3DoXNvZHBlcmNlJztcbiAgICAgICAgICAgIGNhc2UgJ20nOlxuICAgICAgICAgICAgICAgIHJldHVybiAnZWd5JyArIChpc0Z1dHVyZSB8fCB3aXRob3V0U3VmZml4ID8gJyBwZXJjJyA6ICcgcGVyY2UnKTtcbiAgICAgICAgICAgIGNhc2UgJ21tJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtICsgKGlzRnV0dXJlIHx8IHdpdGhvdXRTdWZmaXggPyAnIHBlcmMnIDogJyBwZXJjZScpO1xuICAgICAgICAgICAgY2FzZSAnaCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdlZ3knICsgKGlzRnV0dXJlIHx8IHdpdGhvdXRTdWZmaXggPyAnIMOzcmEnIDogJyDDs3LDoWphJyk7XG4gICAgICAgICAgICBjYXNlICdoaCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bSArIChpc0Z1dHVyZSB8fCB3aXRob3V0U3VmZml4ID8gJyDDs3JhJyA6ICcgw7Nyw6FqYScpO1xuICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdlZ3knICsgKGlzRnV0dXJlIHx8IHdpdGhvdXRTdWZmaXggPyAnIG5hcCcgOiAnIG5hcGphJyk7XG4gICAgICAgICAgICBjYXNlICdkZCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bSArIChpc0Z1dHVyZSB8fCB3aXRob3V0U3VmZml4ID8gJyBuYXAnIDogJyBuYXBqYScpO1xuICAgICAgICAgICAgY2FzZSAnTSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdlZ3knICsgKGlzRnV0dXJlIHx8IHdpdGhvdXRTdWZmaXggPyAnIGjDs25hcCcgOiAnIGjDs25hcGphJyk7XG4gICAgICAgICAgICBjYXNlICdNTSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bSArIChpc0Z1dHVyZSB8fCB3aXRob3V0U3VmZml4ID8gJyBow7NuYXAnIDogJyBow7NuYXBqYScpO1xuICAgICAgICAgICAgY2FzZSAneSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdlZ3knICsgKGlzRnV0dXJlIHx8IHdpdGhvdXRTdWZmaXggPyAnIMOpdicgOiAnIMOpdmUnKTtcbiAgICAgICAgICAgIGNhc2UgJ3l5JzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtICsgKGlzRnV0dXJlIHx8IHdpdGhvdXRTdWZmaXggPyAnIMOpdicgOiAnIMOpdmUnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHdlZWsoaXNGdXR1cmUpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChpc0Z1dHVyZSA/ICcnIDogJ1ttw7psdF0gJykgK1xuICAgICAgICAgICAgJ1snICtcbiAgICAgICAgICAgIHdlZWtFbmRpbmdzW3RoaXMuZGF5KCldICtcbiAgICAgICAgICAgICddIExUWy1rb3JdJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIHZhciBodSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2h1Jywge1xuICAgICAgICBtb250aHM6ICdqYW51w6FyX2ZlYnJ1w6FyX23DoXJjaXVzX8OhcHJpbGlzX23DoWp1c19qw7puaXVzX2rDumxpdXNfYXVndXN6dHVzX3N6ZXB0ZW1iZXJfb2t0w7NiZXJfbm92ZW1iZXJfZGVjZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ2phbi5fZmViLl9tw6FyYy5fw6Fwci5fbcOhai5fasO6bi5fasO6bC5fYXVnLl9zemVwdC5fb2t0Ll9ub3YuX2RlYy4nLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6ICd2YXPDoXJuYXBfaMOpdGbFkV9rZWRkX3N6ZXJkYV9jc8O8dMO2cnTDtmtfcMOpbnRla19zem9tYmF0Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAndmFzX2jDqXRfa2VkZF9zemVfY3PDvHRfcMOpbl9zem8nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAndl9oX2tfc3plX2NzX3Bfc3pvJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0g6bW06c3MnLFxuICAgICAgICAgICAgTDogJ1lZWVkuTU0uREQuJyxcbiAgICAgICAgICAgIExMOiAnWVlZWS4gTU1NTSBELicsXG4gICAgICAgICAgICBMTEw6ICdZWVlZLiBNTU1NIEQuIEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ1lZWVkuIE1NTU0gRC4sIGRkZGQgSDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC9kZXxkdS9pLFxuICAgICAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dC5jaGFyQXQoMSkudG9Mb3dlckNhc2UoKSA9PT0gJ3UnO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXJzLCBtaW51dGVzLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91cnMgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiBpc0xvd2VyID09PSB0cnVlID8gJ2RlJyA6ICdERSc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBpc0xvd2VyID09PSB0cnVlID8gJ2R1JyA6ICdEVSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW21hXSBMVFsta29yXScsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW2hvbG5hcF0gTFRbLWtvcl0nLFxuICAgICAgICAgICAgbmV4dFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd2Vlay5jYWxsKHRoaXMsIHRydWUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbdGVnbmFwXSBMVFsta29yXScsXG4gICAgICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3ZWVrLmNhbGwodGhpcywgZmFsc2UpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMgbcO6bHZhJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcycsXG4gICAgICAgICAgICBzOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBzczogdHJhbnNsYXRlLFxuICAgICAgICAgICAgbTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgbW06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGg6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGhoOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBkOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBkZDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgTTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgTU06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIHk6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIHl5OiB0cmFuc2xhdGUsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWw6ICclZC4nLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gaHU7XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/hu.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/hy-am.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/hy-am.js ***!
  \*********************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Armenian [hy-am]\n//! author : Armendarabyan : https://github.com/armendarabyan\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var hyAm = moment.defineLocale('hy-am', {\n        months: {\n            format: 'հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի'.split(\n                '_'\n            ),\n            standalone:\n                'հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր'.split(\n                    '_'\n                ),\n        },\n        monthsShort: 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_'),\n        weekdays:\n            'կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ'.split(\n                '_'\n            ),\n        weekdaysShort: 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),\n        weekdaysMin: 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY թ.',\n            LLL: 'D MMMM YYYY թ., HH:mm',\n            LLLL: 'dddd, D MMMM YYYY թ., HH:mm',\n        },\n        calendar: {\n            sameDay: '[այսօր] LT',\n            nextDay: '[վաղը] LT',\n            lastDay: '[երեկ] LT',\n            nextWeek: function () {\n                return 'dddd [օրը ժամը] LT';\n            },\n            lastWeek: function () {\n                return '[անցած] dddd [օրը ժամը] LT';\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s հետո',\n            past: '%s առաջ',\n            s: 'մի քանի վայրկյան',\n            ss: '%d վայրկյան',\n            m: 'րոպե',\n            mm: '%d րոպե',\n            h: 'ժամ',\n            hh: '%d ժամ',\n            d: 'օր',\n            dd: '%d օր',\n            M: 'ամիս',\n            MM: '%d ամիս',\n            y: 'տարի',\n            yy: '%d տարի',\n        },\n        meridiemParse: /գիշերվա|առավոտվա|ցերեկվա|երեկոյան/,\n        isPM: function (input) {\n            return /^(ցերեկվա|երեկոյան)$/.test(input);\n        },\n        meridiem: function (hour) {\n            if (hour < 4) {\n                return 'գիշերվա';\n            } else if (hour < 12) {\n                return 'առավոտվա';\n            } else if (hour < 17) {\n                return 'ցերեկվա';\n            } else {\n                return 'երեկոյան';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}|\\d{1,2}-(ին|րդ)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'DDD':\n                case 'w':\n                case 'W':\n                case 'DDDo':\n                    if (number === 1) {\n                        return number + '-ին';\n                    }\n                    return number + '-րդ';\n                default:\n                    return number;\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return hyAm;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9oeS1hbS5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUksSUFBSSxJQUFJO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9oeS1hbS5qcz84OTYzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBBcm1lbmlhbiBbaHktYW1dXG4vLyEgYXV0aG9yIDogQXJtZW5kYXJhYnlhbiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9hcm1lbmRhcmFieWFuXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgaHlBbSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2h5LWFtJywge1xuICAgICAgICBtb250aHM6IHtcbiAgICAgICAgICAgIGZvcm1hdDogJ9Ww1bjWgtW21b7VodaA1atf1oPVpdW/1oDVvtWh1oDVq1/VtNWh1oDVv9WrX9Wh1brWgNWr1azVq1/VtNWh1bXVq9W91atf1bDVuNaC1bbVq9W91atf1bDVuNaC1azVq9W91atf1oXVo9W41b3Vv9W41b3Vq1/VvdWl1brVv9Wl1bTVotWl1oDVq1/VsNW41a/Vv9Wl1bTVotWl1oDVq1/VttW41bXVpdW01aLVpdaA1atf1aTVpdWv1b/VpdW01aLVpdaA1asnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHN0YW5kYWxvbmU6XG4gICAgICAgICAgICAgICAgJ9Ww1bjWgtW21b7VodaAX9aD1aXVv9aA1b7VodaAX9W01aHWgNW/X9Wh1brWgNWr1axf1bTVodW11avVvV/VsNW41oLVttWr1b1f1bDVuNaC1azVq9W9X9aF1aPVuNW91b/VuNW9X9W91aXVutW/1aXVtNWi1aXWgF/VsNW41a/Vv9Wl1bTVotWl1oBf1bbVuNW11aXVtNWi1aXWgF/VpNWl1a/Vv9Wl1bTVotWl1oAnLnNwbGl0KFxuICAgICAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICB9LFxuICAgICAgICBtb250aHNTaG9ydDogJ9Ww1bbVvl/Wg9W/1oBf1bTWgNW/X9Wh1brWgF/VtNW11b1f1bDVttW9X9Ww1azVvV/WhdWj1b1f1b3VutW/X9Ww1a/Vv1/VttW01aJf1aTVr9W/Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czpcbiAgICAgICAgICAgICfVr9Wr1oDVodWv1atf1aXWgNWv1bjWgtW31aHVotWp1atf1aXWgNWl1oTVt9Wh1aLVqdWrX9W51bjWgNWl1oTVt9Wh1aLVqdWrX9Ww1avVttWj1bfVodWi1anVq1/VuNaC1oDVotWh1alf1bfVodWi1aHVqScuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn1a/WgNWvX9Wl1oDVr1/VpdaA1oRf1bnWgNaEX9Ww1bbVo1/VuNaC1oDVol/Vt9Wi1aknLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn1a/WgNWvX9Wl1oDVr1/VpdaA1oRf1bnWgNaEX9Ww1bbVo1/VuNaC1oDVol/Vt9Wi1aknLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVkg1akuJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZINWpLiwgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZINWpLiwgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vVodW11b3WhdaAXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW9W+1aHVstWoXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW9Wl1oDVpdWvXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnZGRkZCBb1oXWgNWoINWq1aHVtNWoXSBMVCc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1vVodW21oHVodWuXSBkZGRkIFvWhdaA1agg1arVodW01ahdIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVzINWw1aXVv9W4JyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyDVodW81aHVuycsXG4gICAgICAgICAgICBzOiAn1bTVqyDWhNWh1bbVqyDVvtWh1bXWgNWv1bXVodW2JyxcbiAgICAgICAgICAgIHNzOiAnJWQg1b7VodW11oDVr9W11aHVticsXG4gICAgICAgICAgICBtOiAn1oDVuNW61aUnLFxuICAgICAgICAgICAgbW06ICclZCDWgNW41brVpScsXG4gICAgICAgICAgICBoOiAn1arVodW0JyxcbiAgICAgICAgICAgIGhoOiAnJWQg1arVodW0JyxcbiAgICAgICAgICAgIGQ6ICfWhdaAJyxcbiAgICAgICAgICAgIGRkOiAnJWQg1oXWgCcsXG4gICAgICAgICAgICBNOiAn1aHVtNWr1b0nLFxuICAgICAgICAgICAgTU06ICclZCDVodW01avVvScsXG4gICAgICAgICAgICB5OiAn1b/VodaA1asnLFxuICAgICAgICAgICAgeXk6ICclZCDVv9Wh1oDVqycsXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/Vo9Wr1bfVpdaA1b7VoXzVodW81aHVvtW41b/VvtWhfNaB1aXWgNWl1a/VvtWhfNWl1oDVpdWv1bjVtdWh1bYvLFxuICAgICAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiAvXijWgdWl1oDVpdWv1b7VoXzVpdaA1aXVr9W41bXVodW2KSQvLnRlc3QoaW5wdXQpO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgNCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn1aPVq9W31aXWgNW+1aEnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9Wh1bzVodW+1bjVv9W+1aEnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9aB1aXWgNWl1a/VvtWhJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfVpdaA1aXVr9W41bXVodW2JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9fFxcZHsxLDJ9LSjVq9W2fNaA1aQpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlciwgcGVyaW9kKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHBlcmlvZCkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ0RERCc6XG4gICAgICAgICAgICAgICAgY2FzZSAndyc6XG4gICAgICAgICAgICAgICAgY2FzZSAnVyc6XG4gICAgICAgICAgICAgICAgY2FzZSAnREREbyc6XG4gICAgICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLdWr1bYnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLdaA1aQnO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDcsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDd0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBoeUFtO1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/hy-am.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/id.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/id.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Indonesian [id]\n//! author : Mohammad Satrio Utomo : https://github.com/tyok\n//! reference: http://id.wikisource.org/wiki/Pedoman_Umum_Ejaan_Bahasa_Indonesia_yang_Disempurnakan\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var id = moment.defineLocale('id', {\n        months: 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des'.split('_'),\n        weekdays: 'Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu'.split('_'),\n        weekdaysShort: 'Min_Sen_Sel_Rab_Kam_Jum_Sab'.split('_'),\n        weekdaysMin: 'Mg_Sn_Sl_Rb_Km_Jm_Sb'.split('_'),\n        longDateFormat: {\n            LT: 'HH.mm',\n            LTS: 'HH.mm.ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY [pukul] HH.mm',\n            LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',\n        },\n        meridiemParse: /pagi|siang|sore|malam/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'pagi') {\n                return hour;\n            } else if (meridiem === 'siang') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'sore' || meridiem === 'malam') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 11) {\n                return 'pagi';\n            } else if (hours < 15) {\n                return 'siang';\n            } else if (hours < 19) {\n                return 'sore';\n            } else {\n                return 'malam';\n            }\n        },\n        calendar: {\n            sameDay: '[Hari ini pukul] LT',\n            nextDay: '[Besok pukul] LT',\n            nextWeek: 'dddd [pukul] LT',\n            lastDay: '[Kemarin pukul] LT',\n            lastWeek: 'dddd [lalu pukul] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'dalam %s',\n            past: '%s yang lalu',\n            s: 'beberapa detik',\n            ss: '%d detik',\n            m: 'semenit',\n            mm: '%d menit',\n            h: 'sejam',\n            hh: '%d jam',\n            d: 'sehari',\n            dd: '%d hari',\n            M: 'sebulan',\n            MM: '%d bulan',\n            y: 'setahun',\n            yy: '%d tahun',\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return id;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9pZC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsa0RBQVc7QUFDckUsR0FBRyxDQUNzQjtBQUN6QixDQUFDLDRCQUE0Qjs7QUFFN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9pZC5qcz80YjIxIl0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBJbmRvbmVzaWFuIFtpZF1cbi8vISBhdXRob3IgOiBNb2hhbW1hZCBTYXRyaW8gVXRvbW8gOiBodHRwczovL2dpdGh1Yi5jb20vdHlva1xuLy8hIHJlZmVyZW5jZTogaHR0cDovL2lkLndpa2lzb3VyY2Uub3JnL3dpa2kvUGVkb21hbl9VbXVtX0VqYWFuX0JhaGFzYV9JbmRvbmVzaWFfeWFuZ19EaXNlbXB1cm5ha2FuXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgaWQgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdpZCcsIHtcbiAgICAgICAgbW9udGhzOiAnSmFudWFyaV9GZWJydWFyaV9NYXJldF9BcHJpbF9NZWlfSnVuaV9KdWxpX0FndXN0dXNfU2VwdGVtYmVyX09rdG9iZXJfTm92ZW1iZXJfRGVzZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnSmFuX0ZlYl9NYXJfQXByX01laV9KdW5fSnVsX0FndF9TZXBfT2t0X05vdl9EZXMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAnTWluZ2d1X1NlbmluX1NlbGFzYV9SYWJ1X0thbWlzX0p1bWF0X1NhYnR1Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnTWluX1Nlbl9TZWxfUmFiX0thbV9KdW1fU2FiJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ01nX1NuX1NsX1JiX0ttX0ptX1NiJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISC5tbScsXG4gICAgICAgICAgICBMVFM6ICdISC5tbS5zcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIFtwdWt1bF0gSEgubW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIFtwdWt1bF0gSEgubW0nLFxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAvcGFnaXxzaWFuZ3xzb3JlfG1hbGFtLyxcbiAgICAgICAgbWVyaWRpZW1Ib3VyOiBmdW5jdGlvbiAoaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1lcmlkaWVtID09PSAncGFnaScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICdzaWFuZycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA+PSAxMSA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAnc29yZScgfHwgbWVyaWRpZW0gPT09ICdtYWxhbScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXJzLCBtaW51dGVzLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91cnMgPCAxMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAncGFnaSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXJzIDwgMTUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3NpYW5nJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91cnMgPCAxOSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnc29yZSc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAnbWFsYW0nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tIYXJpIGluaSBwdWt1bF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tCZXNvayBwdWt1bF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFtwdWt1bF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tLZW1hcmluIHB1a3VsXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW2xhbHUgcHVrdWxdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnZGFsYW0gJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzIHlhbmcgbGFsdScsXG4gICAgICAgICAgICBzOiAnYmViZXJhcGEgZGV0aWsnLFxuICAgICAgICAgICAgc3M6ICclZCBkZXRpaycsXG4gICAgICAgICAgICBtOiAnc2VtZW5pdCcsXG4gICAgICAgICAgICBtbTogJyVkIG1lbml0JyxcbiAgICAgICAgICAgIGg6ICdzZWphbScsXG4gICAgICAgICAgICBoaDogJyVkIGphbScsXG4gICAgICAgICAgICBkOiAnc2VoYXJpJyxcbiAgICAgICAgICAgIGRkOiAnJWQgaGFyaScsXG4gICAgICAgICAgICBNOiAnc2VidWxhbicsXG4gICAgICAgICAgICBNTTogJyVkIGJ1bGFuJyxcbiAgICAgICAgICAgIHk6ICdzZXRhaHVuJyxcbiAgICAgICAgICAgIHl5OiAnJWQgdGFodW4nLFxuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDAsIC8vIFN1bmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA2LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA2dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gaWQ7XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/id.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/is.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/is.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Icelandic [is]\n//! author : Hinrik Örn Sigurðsson : https://github.com/hinrik\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function plural(n) {\n        if (n % 100 === 11) {\n            return true;\n        } else if (n % 10 === 1) {\n            return false;\n        }\n        return true;\n    }\n    function translate(number, withoutSuffix, key, isFuture) {\n        var result = number + ' ';\n        switch (key) {\n            case 's':\n                return withoutSuffix || isFuture\n                    ? 'nokkrar sekúndur'\n                    : 'nokkrum sekúndum';\n            case 'ss':\n                if (plural(number)) {\n                    return (\n                        result +\n                        (withoutSuffix || isFuture ? 'sekúndur' : 'sekúndum')\n                    );\n                }\n                return result + 'sekúnda';\n            case 'm':\n                return withoutSuffix ? 'mínúta' : 'mínútu';\n            case 'mm':\n                if (plural(number)) {\n                    return (\n                        result + (withoutSuffix || isFuture ? 'mínútur' : 'mínútum')\n                    );\n                } else if (withoutSuffix) {\n                    return result + 'mínúta';\n                }\n                return result + 'mínútu';\n            case 'hh':\n                if (plural(number)) {\n                    return (\n                        result +\n                        (withoutSuffix || isFuture\n                            ? 'klukkustundir'\n                            : 'klukkustundum')\n                    );\n                }\n                return result + 'klukkustund';\n            case 'd':\n                if (withoutSuffix) {\n                    return 'dagur';\n                }\n                return isFuture ? 'dag' : 'degi';\n            case 'dd':\n                if (plural(number)) {\n                    if (withoutSuffix) {\n                        return result + 'dagar';\n                    }\n                    return result + (isFuture ? 'daga' : 'dögum');\n                } else if (withoutSuffix) {\n                    return result + 'dagur';\n                }\n                return result + (isFuture ? 'dag' : 'degi');\n            case 'M':\n                if (withoutSuffix) {\n                    return 'mánuður';\n                }\n                return isFuture ? 'mánuð' : 'mánuði';\n            case 'MM':\n                if (plural(number)) {\n                    if (withoutSuffix) {\n                        return result + 'mánuðir';\n                    }\n                    return result + (isFuture ? 'mánuði' : 'mánuðum');\n                } else if (withoutSuffix) {\n                    return result + 'mánuður';\n                }\n                return result + (isFuture ? 'mánuð' : 'mánuði');\n            case 'y':\n                return withoutSuffix || isFuture ? 'ár' : 'ári';\n            case 'yy':\n                if (plural(number)) {\n                    return result + (withoutSuffix || isFuture ? 'ár' : 'árum');\n                }\n                return result + (withoutSuffix || isFuture ? 'ár' : 'ári');\n        }\n    }\n\n    var is = moment.defineLocale('is', {\n        months: 'janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember'.split(\n            '_'\n        ),\n        monthsShort: 'jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des'.split('_'),\n        weekdays:\n            'sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur'.split(\n                '_'\n            ),\n        weekdaysShort: 'sun_mán_þri_mið_fim_fös_lau'.split('_'),\n        weekdaysMin: 'Su_Má_Þr_Mi_Fi_Fö_La'.split('_'),\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY [kl.] H:mm',\n            LLLL: 'dddd, D. MMMM YYYY [kl.] H:mm',\n        },\n        calendar: {\n            sameDay: '[í dag kl.] LT',\n            nextDay: '[á morgun kl.] LT',\n            nextWeek: 'dddd [kl.] LT',\n            lastDay: '[í gær kl.] LT',\n            lastWeek: '[síðasta] dddd [kl.] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'eftir %s',\n            past: 'fyrir %s síðan',\n            s: translate,\n            ss: translate,\n            m: translate,\n            mm: translate,\n            h: 'klukkustund',\n            hh: translate,\n            d: translate,\n            dd: translate,\n            M: translate,\n            MM: translate,\n            y: translate,\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return is;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9pcy5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2lzLmpzP2FiYTEiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEljZWxhbmRpYyBbaXNdXG4vLyEgYXV0aG9yIDogSGlucmlrIMOWcm4gU2lndXLDsHNzb24gOiBodHRwczovL2dpdGh1Yi5jb20vaGlucmlrXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICBmdW5jdGlvbiBwbHVyYWwobikge1xuICAgICAgICBpZiAobiAlIDEwMCA9PT0gMTEpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKG4gJSAxMCA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBmdW5jdGlvbiB0cmFuc2xhdGUobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXksIGlzRnV0dXJlKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBudW1iZXIgKyAnICc7XG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlICdzJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZVxuICAgICAgICAgICAgICAgICAgICA/ICdub2trcmFyIHNla8O6bmR1cidcbiAgICAgICAgICAgICAgICAgICAgOiAnbm9ra3J1bSBzZWvDum5kdW0nO1xuICAgICAgICAgICAgY2FzZSAnc3MnOlxuICAgICAgICAgICAgICAgIGlmIChwbHVyYWwobnVtYmVyKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICtcbiAgICAgICAgICAgICAgICAgICAgICAgICh3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ3Nla8O6bmR1cicgOiAnc2Vrw7puZHVtJylcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArICdzZWvDum5kYSc7XG4gICAgICAgICAgICBjYXNlICdtJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/ICdtw61uw7p0YScgOiAnbcOtbsO6dHUnO1xuICAgICAgICAgICAgY2FzZSAnbW0nOlxuICAgICAgICAgICAgICAgIGlmIChwbHVyYWwobnVtYmVyKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICsgKHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnbcOtbsO6dHVyJyA6ICdtw61uw7p0dW0nKVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAod2l0aG91dFN1ZmZpeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgJ23DrW7DunRhJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArICdtw61uw7p0dSc7XG4gICAgICAgICAgICBjYXNlICdoaCc6XG4gICAgICAgICAgICAgICAgaWYgKHBsdXJhbChudW1iZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgK1xuICAgICAgICAgICAgICAgICAgICAgICAgKHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdrbHVra3VzdHVuZGlyJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ2tsdWtrdXN0dW5kdW0nKVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgJ2tsdWtrdXN0dW5kJztcbiAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgICAgIGlmICh3aXRob3V0U3VmZml4KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnZGFndXInO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gaXNGdXR1cmUgPyAnZGFnJyA6ICdkZWdpJztcbiAgICAgICAgICAgIGNhc2UgJ2RkJzpcbiAgICAgICAgICAgICAgICBpZiAocGx1cmFsKG51bWJlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAnZGFnYXInO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAoaXNGdXR1cmUgPyAnZGFnYScgOiAnZMO2Z3VtJyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh3aXRob3V0U3VmZml4KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAnZGFndXInO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKGlzRnV0dXJlID8gJ2RhZycgOiAnZGVnaScpO1xuICAgICAgICAgICAgY2FzZSAnTSc6XG4gICAgICAgICAgICAgICAgaWYgKHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdtw6FudcOwdXInO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gaXNGdXR1cmUgPyAnbcOhbnXDsCcgOiAnbcOhbnXDsGknO1xuICAgICAgICAgICAgY2FzZSAnTU0nOlxuICAgICAgICAgICAgICAgIGlmIChwbHVyYWwobnVtYmVyKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAod2l0aG91dFN1ZmZpeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArICdtw6FudcOwaXInO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAoaXNGdXR1cmUgPyAnbcOhbnXDsGknIDogJ23DoW51w7B1bScpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAod2l0aG91dFN1ZmZpeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgJ23DoW51w7B1cic7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAoaXNGdXR1cmUgPyAnbcOhbnXDsCcgOiAnbcOhbnXDsGknKTtcbiAgICAgICAgICAgIGNhc2UgJ3knOlxuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ8OhcicgOiAnw6FyaSc7XG4gICAgICAgICAgICBjYXNlICd5eSc6XG4gICAgICAgICAgICAgICAgaWYgKHBsdXJhbChudW1iZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAod2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICfDoXInIDogJ8OhcnVtJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAod2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICfDoXInIDogJ8OhcmknKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBpcyA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2lzJywge1xuICAgICAgICBtb250aHM6ICdqYW7DumFyX2ZlYnLDumFyX21hcnNfYXByw61sX21hw61fasO6bsOtX2rDumzDrV/DoWfDunN0X3NlcHRlbWJlcl9va3TDs2Jlcl9uw7N2ZW1iZXJfZGVzZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnamFuX2ZlYl9tYXJfYXByX21hw61fasO6bl9qw7psX8OhZ8O6X3NlcF9va3RfbsOzdl9kZXMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOlxuICAgICAgICAgICAgJ3N1bm51ZGFndXJfbcOhbnVkYWd1cl/DvnJpw7BqdWRhZ3VyX21pw7B2aWt1ZGFndXJfZmltbXR1ZGFndXJfZsO2c3R1ZGFndXJfbGF1Z2FyZGFndXInLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ3N1bl9tw6FuX8O+cmlfbWnDsF9maW1fZsO2c19sYXUnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnU3VfTcOhX8Oecl9NaV9GaV9Gw7ZfTGEnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0g6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QuIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdELiBNTU1NIFlZWVkgW2tsLl0gSDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRC4gTU1NTSBZWVlZIFtrbC5dIEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vDrSBkYWcga2wuXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW8OhIG1vcmd1biBrbC5dIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBba2wuXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW8OtIGfDpnIga2wuXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1tzw63DsGFzdGFdIGRkZGQgW2tsLl0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdlZnRpciAlcycsXG4gICAgICAgICAgICBwYXN0OiAnZnlyaXIgJXMgc8Otw7BhbicsXG4gICAgICAgICAgICBzOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBzczogdHJhbnNsYXRlLFxuICAgICAgICAgICAgbTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgbW06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGg6ICdrbHVra3VzdHVuZCcsXG4gICAgICAgICAgICBoaDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgZDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgZGQ6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIE06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIE1NOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICB5OiB0cmFuc2xhdGUsXG4gICAgICAgICAgICB5eTogdHJhbnNsYXRlLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsOiAnJWQuJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGlzO1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/is.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/it-ch.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/it-ch.js ***!
  \*********************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Italian (Switzerland) [it-ch]\n//! author : xfh : https://github.com/xfh\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var itCh = moment.defineLocale('it-ch', {\n        months: 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split(\n            '_'\n        ),\n        monthsShort: 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),\n        weekdays: 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split(\n            '_'\n        ),\n        weekdaysShort: 'dom_lun_mar_mer_gio_ven_sab'.split('_'),\n        weekdaysMin: 'do_lu_ma_me_gi_ve_sa'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Oggi alle] LT',\n            nextDay: '[Domani alle] LT',\n            nextWeek: 'dddd [alle] LT',\n            lastDay: '[Ieri alle] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[la scorsa] dddd [alle] LT';\n                    default:\n                        return '[lo scorso] dddd [alle] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: function (s) {\n                return (/^[0-9].+$/.test(s) ? 'tra' : 'in') + ' ' + s;\n            },\n            past: '%s fa',\n            s: 'alcuni secondi',\n            ss: '%d secondi',\n            m: 'un minuto',\n            mm: '%d minuti',\n            h: \"un'ora\",\n            hh: '%d ore',\n            d: 'un giorno',\n            dd: '%d giorni',\n            M: 'un mese',\n            MM: '%d mesi',\n            y: 'un anno',\n            yy: '%d anni',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return itCh;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9pdC1jaC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxvQ0FBb0MsSUFBSTtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9pdC1jaC5qcz8wYzE4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBJdGFsaWFuIChTd2l0emVybGFuZCkgW2l0LWNoXVxuLy8hIGF1dGhvciA6IHhmaCA6IGh0dHBzOi8vZ2l0aHViLmNvbS94ZmhcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBpdENoID0gbW9tZW50LmRlZmluZUxvY2FsZSgnaXQtY2gnLCB7XG4gICAgICAgIG1vbnRoczogJ2dlbm5haW9fZmViYnJhaW9fbWFyem9fYXByaWxlX21hZ2dpb19naXVnbm9fbHVnbGlvX2Fnb3N0b19zZXR0ZW1icmVfb3R0b2JyZV9ub3ZlbWJyZV9kaWNlbWJyZScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdnZW5fZmViX21hcl9hcHJfbWFnX2dpdV9sdWdfYWdvX3NldF9vdHRfbm92X2RpYycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICdkb21lbmljYV9sdW5lZMOsX21hcnRlZMOsX21lcmNvbGVkw6xfZ2lvdmVkw6xfdmVuZXJkw6xfc2FiYXRvJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnZG9tX2x1bl9tYXJfbWVyX2dpb192ZW5fc2FiJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ2RvX2x1X21hX21lX2dpX3ZlX3NhJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbT2dnaSBhbGxlXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW0RvbWFuaSBhbGxlXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW2FsbGVdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbSWVyaSBhbGxlXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kYXkoKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1tsYSBzY29yc2FdIGRkZGQgW2FsbGVdIExUJztcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW2xvIHNjb3Jzb10gZGRkZCBbYWxsZV0gTFQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogZnVuY3Rpb24gKHMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKC9eWzAtOV0uKyQvLnRlc3QocykgPyAndHJhJyA6ICdpbicpICsgJyAnICsgcztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwYXN0OiAnJXMgZmEnLFxuICAgICAgICAgICAgczogJ2FsY3VuaSBzZWNvbmRpJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2Vjb25kaScsXG4gICAgICAgICAgICBtOiAndW4gbWludXRvJyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludXRpJyxcbiAgICAgICAgICAgIGg6IFwidW4nb3JhXCIsXG4gICAgICAgICAgICBoaDogJyVkIG9yZScsXG4gICAgICAgICAgICBkOiAndW4gZ2lvcm5vJyxcbiAgICAgICAgICAgIGRkOiAnJWQgZ2lvcm5pJyxcbiAgICAgICAgICAgIE06ICd1biBtZXNlJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbWVzaScsXG4gICAgICAgICAgICB5OiAndW4gYW5ubycsXG4gICAgICAgICAgICB5eTogJyVkIGFubmknLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn3Cui8sXG4gICAgICAgIG9yZGluYWw6ICclZMK6JyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGl0Q2g7XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/it-ch.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/it.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/it.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Italian [it]\n//! author : Lorenzo : https://github.com/aliem\n//! author: Mattia Larentis: https://github.com/nostalgiaz\n//! author: Marco : https://github.com/Manfre98\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var it = moment.defineLocale('it', {\n        months: 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split(\n            '_'\n        ),\n        monthsShort: 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),\n        weekdays: 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split(\n            '_'\n        ),\n        weekdaysShort: 'dom_lun_mar_mer_gio_ven_sab'.split('_'),\n        weekdaysMin: 'do_lu_ma_me_gi_ve_sa'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: function () {\n                return (\n                    '[Oggi a' +\n                    (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : \"ll'\") +\n                    ']LT'\n                );\n            },\n            nextDay: function () {\n                return (\n                    '[Domani a' +\n                    (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : \"ll'\") +\n                    ']LT'\n                );\n            },\n            nextWeek: function () {\n                return (\n                    'dddd [a' +\n                    (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : \"ll'\") +\n                    ']LT'\n                );\n            },\n            lastDay: function () {\n                return (\n                    '[Ieri a' +\n                    (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : \"ll'\") +\n                    ']LT'\n                );\n            },\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return (\n                            '[La scorsa] dddd [a' +\n                            (this.hours() > 1\n                                ? 'lle '\n                                : this.hours() === 0\n                                ? ' '\n                                : \"ll'\") +\n                            ']LT'\n                        );\n                    default:\n                        return (\n                            '[Lo scorso] dddd [a' +\n                            (this.hours() > 1\n                                ? 'lle '\n                                : this.hours() === 0\n                                ? ' '\n                                : \"ll'\") +\n                            ']LT'\n                        );\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'tra %s',\n            past: '%s fa',\n            s: 'alcuni secondi',\n            ss: '%d secondi',\n            m: 'un minuto',\n            mm: '%d minuti',\n            h: \"un'ora\",\n            hh: '%d ore',\n            d: 'un giorno',\n            dd: '%d giorni',\n            w: 'una settimana',\n            ww: '%d settimane',\n            M: 'un mese',\n            MM: '%d mesi',\n            y: 'un anno',\n            yy: '%d anni',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return it;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9pdC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxrREFBVztBQUNyRSxHQUFHLENBQ3NCO0FBQ3pCLENBQUMsNEJBQTRCOztBQUU3Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxvQ0FBb0MsSUFBSTtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9pdC5qcz83YzdiIl0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBJdGFsaWFuIFtpdF1cbi8vISBhdXRob3IgOiBMb3JlbnpvIDogaHR0cHM6Ly9naXRodWIuY29tL2FsaWVtXG4vLyEgYXV0aG9yOiBNYXR0aWEgTGFyZW50aXM6IGh0dHBzOi8vZ2l0aHViLmNvbS9ub3N0YWxnaWF6XG4vLyEgYXV0aG9yOiBNYXJjbyA6IGh0dHBzOi8vZ2l0aHViLmNvbS9NYW5mcmU5OFxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIGl0ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnaXQnLCB7XG4gICAgICAgIG1vbnRoczogJ2dlbm5haW9fZmViYnJhaW9fbWFyem9fYXByaWxlX21hZ2dpb19naXVnbm9fbHVnbGlvX2Fnb3N0b19zZXR0ZW1icmVfb3R0b2JyZV9ub3ZlbWJyZV9kaWNlbWJyZScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdnZW5fZmViX21hcl9hcHJfbWFnX2dpdV9sdWdfYWdvX3NldF9vdHRfbm92X2RpYycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICdkb21lbmljYV9sdW5lZMOsX21hcnRlZMOsX21lcmNvbGVkw6xfZ2lvdmVkw6xfdmVuZXJkw6xfc2FiYXRvJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnZG9tX2x1bl9tYXJfbWVyX2dpb192ZW5fc2FiJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ2RvX2x1X21hX21lX2dpX3ZlX3NhJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAnW09nZ2kgYScgK1xuICAgICAgICAgICAgICAgICAgICAodGhpcy5ob3VycygpID4gMSA/ICdsbGUgJyA6IHRoaXMuaG91cnMoKSA9PT0gMCA/ICcgJyA6IFwibGwnXCIpICtcbiAgICAgICAgICAgICAgICAgICAgJ11MVCdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5leHREYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAnW0RvbWFuaSBhJyArXG4gICAgICAgICAgICAgICAgICAgICh0aGlzLmhvdXJzKCkgPiAxID8gJ2xsZSAnIDogdGhpcy5ob3VycygpID09PSAwID8gJyAnIDogXCJsbCdcIikgK1xuICAgICAgICAgICAgICAgICAgICAnXUxUJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmV4dFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAnZGRkZCBbYScgK1xuICAgICAgICAgICAgICAgICAgICAodGhpcy5ob3VycygpID4gMSA/ICdsbGUgJyA6IHRoaXMuaG91cnMoKSA9PT0gMCA/ICcgJyA6IFwibGwnXCIpICtcbiAgICAgICAgICAgICAgICAgICAgJ11MVCdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3REYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAnW0llcmkgYScgK1xuICAgICAgICAgICAgICAgICAgICAodGhpcy5ob3VycygpID4gMSA/ICdsbGUgJyA6IHRoaXMuaG91cnMoKSA9PT0gMCA/ICcgJyA6IFwibGwnXCIpICtcbiAgICAgICAgICAgICAgICAgICAgJ11MVCdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1tMYSBzY29yc2FdIGRkZGQgW2EnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGhpcy5ob3VycygpID4gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdsbGUgJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuaG91cnMoKSA9PT0gMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICcgJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwibGwnXCIpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXUxUJ1xuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1tMbyBzY29yc29dIGRkZGQgW2EnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGhpcy5ob3VycygpID4gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdsbGUgJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuaG91cnMoKSA9PT0gMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICcgJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwibGwnXCIpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXUxUJ1xuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICd0cmEgJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzIGZhJyxcbiAgICAgICAgICAgIHM6ICdhbGN1bmkgc2Vjb25kaScsXG4gICAgICAgICAgICBzczogJyVkIHNlY29uZGknLFxuICAgICAgICAgICAgbTogJ3VuIG1pbnV0bycsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0aScsXG4gICAgICAgICAgICBoOiBcInVuJ29yYVwiLFxuICAgICAgICAgICAgaGg6ICclZCBvcmUnLFxuICAgICAgICAgICAgZDogJ3VuIGdpb3JubycsXG4gICAgICAgICAgICBkZDogJyVkIGdpb3JuaScsXG4gICAgICAgICAgICB3OiAndW5hIHNldHRpbWFuYScsXG4gICAgICAgICAgICB3dzogJyVkIHNldHRpbWFuZScsXG4gICAgICAgICAgICBNOiAndW4gbWVzZScsXG4gICAgICAgICAgICBNTTogJyVkIG1lc2knLFxuICAgICAgICAgICAgeTogJ3VuIGFubm8nLFxuICAgICAgICAgICAgeXk6ICclZCBhbm5pJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9wrovLFxuICAgICAgICBvcmRpbmFsOiAnJWTCuicsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBpdDtcblxufSkpKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/it.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/ja.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/ja.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Japanese [ja]\n//! author : LI Long : https://github.com/baryon\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var ja = moment.defineLocale('ja', {\n        eras: [\n            {\n                since: '2019-05-01',\n                offset: 1,\n                name: '令和',\n                narrow: '㋿',\n                abbr: 'R',\n            },\n            {\n                since: '1989-01-08',\n                until: '2019-04-30',\n                offset: 1,\n                name: '平成',\n                narrow: '㍻',\n                abbr: 'H',\n            },\n            {\n                since: '1926-12-25',\n                until: '1989-01-07',\n                offset: 1,\n                name: '昭和',\n                narrow: '㍼',\n                abbr: 'S',\n            },\n            {\n                since: '1912-07-30',\n                until: '1926-12-24',\n                offset: 1,\n                name: '大正',\n                narrow: '㍽',\n                abbr: 'T',\n            },\n            {\n                since: '1873-01-01',\n                until: '1912-07-29',\n                offset: 6,\n                name: '明治',\n                narrow: '㍾',\n                abbr: 'M',\n            },\n            {\n                since: '0001-01-01',\n                until: '1873-12-31',\n                offset: 1,\n                name: '西暦',\n                narrow: 'AD',\n                abbr: 'AD',\n            },\n            {\n                since: '0000-12-31',\n                until: -Infinity,\n                offset: 1,\n                name: '紀元前',\n                narrow: 'BC',\n                abbr: 'BC',\n            },\n        ],\n        eraYearOrdinalRegex: /(元|\\d+)年/,\n        eraYearOrdinalParse: function (input, match) {\n            return match[1] === '元' ? 1 : parseInt(match[1] || input, 10);\n        },\n        months: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n        monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(\n            '_'\n        ),\n        weekdays: '日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日'.split('_'),\n        weekdaysShort: '日_月_火_水_木_金_土'.split('_'),\n        weekdaysMin: '日_月_火_水_木_金_土'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY/MM/DD',\n            LL: 'YYYY年M月D日',\n            LLL: 'YYYY年M月D日 HH:mm',\n            LLLL: 'YYYY年M月D日 dddd HH:mm',\n            l: 'YYYY/MM/DD',\n            ll: 'YYYY年M月D日',\n            lll: 'YYYY年M月D日 HH:mm',\n            llll: 'YYYY年M月D日(ddd) HH:mm',\n        },\n        meridiemParse: /午前|午後/i,\n        isPM: function (input) {\n            return input === '午後';\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return '午前';\n            } else {\n                return '午後';\n            }\n        },\n        calendar: {\n            sameDay: '[今日] LT',\n            nextDay: '[明日] LT',\n            nextWeek: function (now) {\n                if (now.week() !== this.week()) {\n                    return '[来週]dddd LT';\n                } else {\n                    return 'dddd LT';\n                }\n            },\n            lastDay: '[昨日] LT',\n            lastWeek: function (now) {\n                if (this.week() !== now.week()) {\n                    return '[先週]dddd LT';\n                } else {\n                    return 'dddd LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}日/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'y':\n                    return number === 1 ? '元年' : number + '年';\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '日';\n                default:\n                    return number;\n            }\n        },\n        relativeTime: {\n            future: '%s後',\n            past: '%s前',\n            s: '数秒',\n            ss: '%d秒',\n            m: '1分',\n            mm: '%d分',\n            h: '1時間',\n            hh: '%d時間',\n            d: '1日',\n            dd: '%d日',\n            M: '1ヶ月',\n            MM: '%dヶ月',\n            y: '1年',\n            yy: '%d年',\n        },\n    });\n\n    return ja;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9qYS5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2phLmpzPzA2MDIiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEphcGFuZXNlIFtqYV1cbi8vISBhdXRob3IgOiBMSSBMb25nIDogaHR0cHM6Ly9naXRodWIuY29tL2JhcnlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIGphID0gbW9tZW50LmRlZmluZUxvY2FsZSgnamEnLCB7XG4gICAgICAgIGVyYXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzaW5jZTogJzIwMTktMDUtMDEnLFxuICAgICAgICAgICAgICAgIG9mZnNldDogMSxcbiAgICAgICAgICAgICAgICBuYW1lOiAn5Luk5ZKMJyxcbiAgICAgICAgICAgICAgICBuYXJyb3c6ICfji78nLFxuICAgICAgICAgICAgICAgIGFiYnI6ICdSJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2luY2U6ICcxOTg5LTAxLTA4JyxcbiAgICAgICAgICAgICAgICB1bnRpbDogJzIwMTktMDQtMzAnLFxuICAgICAgICAgICAgICAgIG9mZnNldDogMSxcbiAgICAgICAgICAgICAgICBuYW1lOiAn5bmz5oiQJyxcbiAgICAgICAgICAgICAgICBuYXJyb3c6ICfjjbsnLFxuICAgICAgICAgICAgICAgIGFiYnI6ICdIJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2luY2U6ICcxOTI2LTEyLTI1JyxcbiAgICAgICAgICAgICAgICB1bnRpbDogJzE5ODktMDEtMDcnLFxuICAgICAgICAgICAgICAgIG9mZnNldDogMSxcbiAgICAgICAgICAgICAgICBuYW1lOiAn5pit5ZKMJyxcbiAgICAgICAgICAgICAgICBuYXJyb3c6ICfjjbwnLFxuICAgICAgICAgICAgICAgIGFiYnI6ICdTJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2luY2U6ICcxOTEyLTA3LTMwJyxcbiAgICAgICAgICAgICAgICB1bnRpbDogJzE5MjYtMTItMjQnLFxuICAgICAgICAgICAgICAgIG9mZnNldDogMSxcbiAgICAgICAgICAgICAgICBuYW1lOiAn5aSn5q2jJyxcbiAgICAgICAgICAgICAgICBuYXJyb3c6ICfjjb0nLFxuICAgICAgICAgICAgICAgIGFiYnI6ICdUJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2luY2U6ICcxODczLTAxLTAxJyxcbiAgICAgICAgICAgICAgICB1bnRpbDogJzE5MTItMDctMjknLFxuICAgICAgICAgICAgICAgIG9mZnNldDogNixcbiAgICAgICAgICAgICAgICBuYW1lOiAn5piO5rK7JyxcbiAgICAgICAgICAgICAgICBuYXJyb3c6ICfjjb4nLFxuICAgICAgICAgICAgICAgIGFiYnI6ICdNJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2luY2U6ICcwMDAxLTAxLTAxJyxcbiAgICAgICAgICAgICAgICB1bnRpbDogJzE4NzMtMTItMzEnLFxuICAgICAgICAgICAgICAgIG9mZnNldDogMSxcbiAgICAgICAgICAgICAgICBuYW1lOiAn6KW/5pqmJyxcbiAgICAgICAgICAgICAgICBuYXJyb3c6ICdBRCcsXG4gICAgICAgICAgICAgICAgYWJicjogJ0FEJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2luY2U6ICcwMDAwLTEyLTMxJyxcbiAgICAgICAgICAgICAgICB1bnRpbDogLUluZmluaXR5LFxuICAgICAgICAgICAgICAgIG9mZnNldDogMSxcbiAgICAgICAgICAgICAgICBuYW1lOiAn57SA5YWD5YmNJyxcbiAgICAgICAgICAgICAgICBuYXJyb3c6ICdCQycsXG4gICAgICAgICAgICAgICAgYWJicjogJ0JDJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIGVyYVllYXJPcmRpbmFsUmVnZXg6IC8o5YWDfFxcZCsp5bm0LyxcbiAgICAgICAgZXJhWWVhck9yZGluYWxQYXJzZTogZnVuY3Rpb24gKGlucHV0LCBtYXRjaCkge1xuICAgICAgICAgICAgcmV0dXJuIG1hdGNoWzFdID09PSAn5YWDJyA/IDEgOiBwYXJzZUludChtYXRjaFsxXSB8fCBpbnB1dCwgMTApO1xuICAgICAgICB9LFxuICAgICAgICBtb250aHM6ICcx5pyIXzLmnIhfM+aciF805pyIXzXmnIhfNuaciF835pyIXzjmnIhfOeaciF8xMOaciF8xMeaciF8xMuaciCcuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICcx5pyIXzLmnIhfM+aciF805pyIXzXmnIhfNuaciF835pyIXzjmnIhfOeaciF8xMOaciF8xMeaciF8xMuaciCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXM6ICfml6Xmm5zml6Vf5pyI5puc5pelX+eBq+abnOaXpV/msLTmm5zml6Vf5pyo5puc5pelX+mHkeabnOaXpV/lnJ/mm5zml6UnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfml6Vf5pyIX+eBq1/msLRf5pyoX+mHkV/lnJ8nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn5pelX+aciF/ngatf5rC0X+acqF/ph5Ff5ZyfJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnWVlZWS9NTS9ERCcsXG4gICAgICAgICAgICBMTDogJ1lZWVnlubRN5pyIROaXpScsXG4gICAgICAgICAgICBMTEw6ICdZWVlZ5bm0TeaciETml6UgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ1lZWVnlubRN5pyIROaXpSBkZGRkIEhIOm1tJyxcbiAgICAgICAgICAgIGw6ICdZWVlZL01NL0REJyxcbiAgICAgICAgICAgIGxsOiAnWVlZWeW5tE3mnIhE5pelJyxcbiAgICAgICAgICAgIGxsbDogJ1lZWVnlubRN5pyIROaXpSBISDptbScsXG4gICAgICAgICAgICBsbGxsOiAnWVlZWeW5tE3mnIhE5pelKGRkZCkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv5Y2I5YmNfOWNiOW+jC9pLFxuICAgICAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCA9PT0gJ+WNiOW+jCc7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfljYjliY0nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+WNiOW+jCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW+S7iuaXpV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vmmI7ml6VdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiBmdW5jdGlvbiAobm93KSB7XG4gICAgICAgICAgICAgICAgaWYgKG5vdy53ZWVrKCkgIT09IHRoaXMud2VlaygpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnW+adpemAsV1kZGRkIExUJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2RkZGQgTFQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0RGF5OiAnW+aYqOaXpV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6IGZ1bmN0aW9uIChub3cpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy53ZWVrKCkgIT09IG5vdy53ZWVrKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdb5YWI6YCxXWRkZGQgTFQnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnZGRkZCBMVCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfeaXpS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIsIHBlcmlvZCkge1xuICAgICAgICAgICAgc3dpdGNoIChwZXJpb2QpIHtcbiAgICAgICAgICAgICAgICBjYXNlICd5JzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciA9PT0gMSA/ICflhYPlubQnIDogbnVtYmVyICsgJ+W5tCc7XG4gICAgICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnRCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnREREJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICfml6UnO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXPlvownLFxuICAgICAgICAgICAgcGFzdDogJyVz5YmNJyxcbiAgICAgICAgICAgIHM6ICfmlbDnp5InLFxuICAgICAgICAgICAgc3M6ICclZOenkicsXG4gICAgICAgICAgICBtOiAnMeWIhicsXG4gICAgICAgICAgICBtbTogJyVk5YiGJyxcbiAgICAgICAgICAgIGg6ICcx5pmC6ZaTJyxcbiAgICAgICAgICAgIGhoOiAnJWTmmYLplpMnLFxuICAgICAgICAgICAgZDogJzHml6UnLFxuICAgICAgICAgICAgZGQ6ICclZOaXpScsXG4gICAgICAgICAgICBNOiAnMeODtuaciCcsXG4gICAgICAgICAgICBNTTogJyVk44O25pyIJyxcbiAgICAgICAgICAgIHk6ICcx5bm0JyxcbiAgICAgICAgICAgIHl5OiAnJWTlubQnLFxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGphO1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/ja.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/jv.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/jv.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Javanese [jv]\n//! author : Rony Lantip : https://github.com/lantip\n//! reference: http://jv.wikipedia.org/wiki/Basa_Jawa\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var jv = moment.defineLocale('jv', {\n        months: 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des'.split('_'),\n        weekdays: 'Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu'.split('_'),\n        weekdaysShort: 'Min_Sen_Sel_Reb_Kem_Jem_Sep'.split('_'),\n        weekdaysMin: 'Mg_Sn_Sl_Rb_Km_Jm_Sp'.split('_'),\n        longDateFormat: {\n            LT: 'HH.mm',\n            LTS: 'HH.mm.ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY [pukul] HH.mm',\n            LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',\n        },\n        meridiemParse: /enjing|siyang|sonten|ndalu/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'enjing') {\n                return hour;\n            } else if (meridiem === 'siyang') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'sonten' || meridiem === 'ndalu') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 11) {\n                return 'enjing';\n            } else if (hours < 15) {\n                return 'siyang';\n            } else if (hours < 19) {\n                return 'sonten';\n            } else {\n                return 'ndalu';\n            }\n        },\n        calendar: {\n            sameDay: '[Dinten puniko pukul] LT',\n            nextDay: '[Mbenjang pukul] LT',\n            nextWeek: 'dddd [pukul] LT',\n            lastDay: '[Kala wingi pukul] LT',\n            lastWeek: 'dddd [kepengker pukul] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'wonten ing %s',\n            past: '%s ingkang kepengker',\n            s: 'sawetawis detik',\n            ss: '%d detik',\n            m: 'setunggal menit',\n            mm: '%d menit',\n            h: 'setunggal jam',\n            hh: '%d jam',\n            d: 'sedinten',\n            dd: '%d dinten',\n            M: 'sewulan',\n            MM: '%d wulan',\n            y: 'setaun',\n            yy: '%d taun',\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return jv;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9qdi5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsa0RBQVc7QUFDckUsR0FBRyxDQUNzQjtBQUN6QixDQUFDLDRCQUE0Qjs7QUFFN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9qdi5qcz84MjNjIl0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBKYXZhbmVzZSBbanZdXG4vLyEgYXV0aG9yIDogUm9ueSBMYW50aXAgOiBodHRwczovL2dpdGh1Yi5jb20vbGFudGlwXG4vLyEgcmVmZXJlbmNlOiBodHRwOi8vanYud2lraXBlZGlhLm9yZy93aWtpL0Jhc2FfSmF3YVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIGp2ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnanYnLCB7XG4gICAgICAgIG1vbnRoczogJ0phbnVhcmlfRmVicnVhcmlfTWFyZXRfQXByaWxfTWVpX0p1bmlfSnVsaV9BZ3VzdHVzX1NlcHRlbWJlcl9Pa3RvYmVyX05vcGVtYmVyX0Rlc2VtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ0phbl9GZWJfTWFyX0Fwcl9NZWlfSnVuX0p1bF9BZ3NfU2VwX09rdF9Ob3BfRGVzJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ01pbmdndV9TZW5lbl9TZWxvc29fUmVidV9LZW1pc19KZW11d2FoX1NlcHR1Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnTWluX1Nlbl9TZWxfUmViX0tlbV9KZW1fU2VwJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ01nX1NuX1NsX1JiX0ttX0ptX1NwJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISC5tbScsXG4gICAgICAgICAgICBMVFM6ICdISC5tbS5zcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIFtwdWt1bF0gSEgubW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIFtwdWt1bF0gSEgubW0nLFxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAvZW5qaW5nfHNpeWFuZ3xzb250ZW58bmRhbHUvLFxuICAgICAgICBtZXJpZGllbUhvdXI6IGZ1bmN0aW9uIChob3VyLCBtZXJpZGllbSkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWVyaWRpZW0gPT09ICdlbmppbmcnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAnc2l5YW5nJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyID49IDExID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICdzb250ZW4nIHx8IG1lcmlkaWVtID09PSAnbmRhbHUnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VycywgbWludXRlcywgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXJzIDwgMTEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2VuamluZyc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXJzIDwgMTUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3NpeWFuZyc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXJzIDwgMTkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3NvbnRlbic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAnbmRhbHUnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tEaW50ZW4gcHVuaWtvIHB1a3VsXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW01iZW5qYW5nIHB1a3VsXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW3B1a3VsXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW0thbGEgd2luZ2kgcHVrdWxdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnZGRkZCBba2VwZW5na2VyIHB1a3VsXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ3dvbnRlbiBpbmcgJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzIGluZ2thbmcga2VwZW5na2VyJyxcbiAgICAgICAgICAgIHM6ICdzYXdldGF3aXMgZGV0aWsnLFxuICAgICAgICAgICAgc3M6ICclZCBkZXRpaycsXG4gICAgICAgICAgICBtOiAnc2V0dW5nZ2FsIG1lbml0JyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWVuaXQnLFxuICAgICAgICAgICAgaDogJ3NldHVuZ2dhbCBqYW0nLFxuICAgICAgICAgICAgaGg6ICclZCBqYW0nLFxuICAgICAgICAgICAgZDogJ3NlZGludGVuJyxcbiAgICAgICAgICAgIGRkOiAnJWQgZGludGVuJyxcbiAgICAgICAgICAgIE06ICdzZXd1bGFuJyxcbiAgICAgICAgICAgIE1NOiAnJWQgd3VsYW4nLFxuICAgICAgICAgICAgeTogJ3NldGF1bicsXG4gICAgICAgICAgICB5eTogJyVkIHRhdW4nLFxuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA3LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA3dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4ganY7XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/jv.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/ka.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/ka.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Georgian [ka]\n//! author : Irakli Janiashvili : https://github.com/IrakliJani\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var ka = moment.defineLocale('ka', {\n        months: 'იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი'.split(\n            '_'\n        ),\n        monthsShort: 'იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ'.split('_'),\n        weekdays: {\n            standalone:\n                'კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი'.split(\n                    '_'\n                ),\n            format: 'კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს'.split(\n                '_'\n            ),\n            isFormat: /(წინა|შემდეგ)/,\n        },\n        weekdaysShort: 'კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ'.split('_'),\n        weekdaysMin: 'კვ_ორ_სა_ოთ_ხუ_პა_შა'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[დღეს] LT[-ზე]',\n            nextDay: '[ხვალ] LT[-ზე]',\n            lastDay: '[გუშინ] LT[-ზე]',\n            nextWeek: '[შემდეგ] dddd LT[-ზე]',\n            lastWeek: '[წინა] dddd LT-ზე',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: function (s) {\n                return s.replace(\n                    /(წამ|წუთ|საათ|წელ|დღ|თვ)(ი|ე)/,\n                    function ($0, $1, $2) {\n                        return $2 === 'ი' ? $1 + 'ში' : $1 + $2 + 'ში';\n                    }\n                );\n            },\n            past: function (s) {\n                if (/(წამი|წუთი|საათი|დღე|თვე)/.test(s)) {\n                    return s.replace(/(ი|ე)$/, 'ის წინ');\n                }\n                if (/წელი/.test(s)) {\n                    return s.replace(/წელი$/, 'წლის წინ');\n                }\n                return s;\n            },\n            s: 'რამდენიმე წამი',\n            ss: '%d წამი',\n            m: 'წუთი',\n            mm: '%d წუთი',\n            h: 'საათი',\n            hh: '%d საათი',\n            d: 'დღე',\n            dd: '%d დღე',\n            M: 'თვე',\n            MM: '%d თვე',\n            y: 'წელი',\n            yy: '%d წელი',\n        },\n        dayOfMonthOrdinalParse: /0|1-ლი|მე-\\d{1,2}|\\d{1,2}-ე/,\n        ordinal: function (number) {\n            if (number === 0) {\n                return number;\n            }\n            if (number === 1) {\n                return number + '-ლი';\n            }\n            if (\n                number < 20 ||\n                (number <= 100 && number % 20 === 0) ||\n                number % 100 === 0\n            ) {\n                return 'მე-' + number;\n            }\n            return number + '-ე';\n        },\n        week: {\n            dow: 1,\n            doy: 7,\n        },\n    });\n\n    return ka;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9rYS5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsOENBQThDLElBQUksSUFBSSxJQUFJO0FBQzFEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUva2EuanM/N2Y5ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogR2VvcmdpYW4gW2thXVxuLy8hIGF1dGhvciA6IElyYWtsaSBKYW5pYXNodmlsaSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9JcmFrbGlKYW5pXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIga2EgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdrYScsIHtcbiAgICAgICAgbW9udGhzOiAn4YOY4YOQ4YOc4YOV4YOQ4YOg4YOYX+GDl+GDlOGDkeGDlOGDoOGDleGDkOGDmuGDmF/hg5vhg5Dhg6Dhg6Lhg5hf4YOQ4YOe4YOg4YOY4YOa4YOYX+GDm+GDkOGDmOGDoeGDmF/hg5jhg5Xhg5zhg5jhg6Hhg5hf4YOY4YOV4YOa4YOY4YOh4YOYX+GDkOGDkuGDleGDmOGDoeGDouGDnV/hg6Hhg5Thg6Xhg6Lhg5Thg5vhg5Hhg5Thg6Dhg5hf4YOd4YOl4YOi4YOd4YOb4YOR4YOU4YOg4YOYX+GDnOGDneGDlOGDm+GDkeGDlOGDoOGDmF/hg5Phg5Thg5nhg5Thg5vhg5Hhg5Thg6Dhg5gnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAn4YOY4YOQ4YOcX+GDl+GDlOGDkV/hg5vhg5Dhg6Bf4YOQ4YOe4YOgX+GDm+GDkOGDmF/hg5jhg5Xhg5xf4YOY4YOV4YOaX+GDkOGDkuGDlV/hg6Hhg5Thg6Vf4YOd4YOl4YOiX+GDnOGDneGDlF/hg5Phg5Thg5knLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiB7XG4gICAgICAgICAgICBzdGFuZGFsb25lOlxuICAgICAgICAgICAgICAgICfhg5nhg5Xhg5jhg6Dhg5Bf4YOd4YOg4YOo4YOQ4YOR4YOQ4YOX4YOYX+GDoeGDkOGDm+GDqOGDkOGDkeGDkOGDl+GDmF/hg53hg5fhg67hg6jhg5Dhg5Hhg5Dhg5fhg5hf4YOu4YOj4YOX4YOo4YOQ4YOR4YOQ4YOX4YOYX+GDnuGDkOGDoOGDkOGDoeGDmeGDlOGDleGDmF/hg6jhg5Dhg5Hhg5Dhg5fhg5gnLnNwbGl0KFxuICAgICAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgZm9ybWF0OiAn4YOZ4YOV4YOY4YOg4YOQ4YOhX+GDneGDoOGDqOGDkOGDkeGDkOGDl+GDoV/hg6Hhg5Dhg5vhg6jhg5Dhg5Hhg5Dhg5fhg6Ff4YOd4YOX4YOu4YOo4YOQ4YOR4YOQ4YOX4YOhX+GDruGDo+GDl+GDqOGDkOGDkeGDkOGDl+GDoV/hg57hg5Dhg6Dhg5Dhg6Hhg5nhg5Thg5Xhg6Ff4YOo4YOQ4YOR4YOQ4YOX4YOhJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBpc0Zvcm1hdDogLyjhg6zhg5jhg5zhg5B84YOo4YOU4YOb4YOT4YOU4YOSKS8sXG4gICAgICAgIH0sXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfhg5nhg5Xhg5hf4YOd4YOg4YOoX+GDoeGDkOGDm1/hg53hg5fhg65f4YOu4YOj4YOXX+GDnuGDkOGDoF/hg6jhg5Dhg5EnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn4YOZ4YOVX+GDneGDoF/hg6Hhg5Bf4YOd4YOXX+GDruGDo1/hg57hg5Bf4YOo4YOQJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW+GDk+GDpuGDlOGDoV0gTFRbLeGDluGDlF0nLFxuICAgICAgICAgICAgbmV4dERheTogJ1vhg67hg5Xhg5Dhg5pdIExUWy3hg5bhg5RdJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb4YOS4YOj4YOo4YOY4YOcXSBMVFst4YOW4YOUXScsXG4gICAgICAgICAgICBuZXh0V2VlazogJ1vhg6jhg5Thg5vhg5Phg5Thg5JdIGRkZGQgTFRbLeGDluGDlF0nLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdb4YOs4YOY4YOc4YOQXSBkZGRkIExULeGDluGDlCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogZnVuY3Rpb24gKHMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcy5yZXBsYWNlKFxuICAgICAgICAgICAgICAgICAgICAvKOGDrOGDkOGDm3zhg6zhg6Phg5d84YOh4YOQ4YOQ4YOXfOGDrOGDlOGDmnzhg5Phg6Z84YOX4YOVKSjhg5h84YOUKS8sXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgkMCwgJDEsICQyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJDIgPT09ICfhg5gnID8gJDEgKyAn4YOo4YOYJyA6ICQxICsgJDIgKyAn4YOo4YOYJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGFzdDogZnVuY3Rpb24gKHMpIHtcbiAgICAgICAgICAgICAgICBpZiAoLyjhg6zhg5Dhg5vhg5h84YOs4YOj4YOX4YOYfOGDoeGDkOGDkOGDl+GDmHzhg5Phg6bhg5R84YOX4YOV4YOUKS8udGVzdChzKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcy5yZXBsYWNlKC8o4YOYfOGDlCkkLywgJ+GDmOGDoSDhg6zhg5jhg5wnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKC/hg6zhg5Thg5rhg5gvLnRlc3QocykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHMucmVwbGFjZSgv4YOs4YOU4YOa4YOYJC8sICfhg6zhg5rhg5jhg6Eg4YOs4YOY4YOcJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHM6ICfhg6Dhg5Dhg5vhg5Phg5Thg5zhg5jhg5vhg5Qg4YOs4YOQ4YOb4YOYJyxcbiAgICAgICAgICAgIHNzOiAnJWQg4YOs4YOQ4YOb4YOYJyxcbiAgICAgICAgICAgIG06ICfhg6zhg6Phg5fhg5gnLFxuICAgICAgICAgICAgbW06ICclZCDhg6zhg6Phg5fhg5gnLFxuICAgICAgICAgICAgaDogJ+GDoeGDkOGDkOGDl+GDmCcsXG4gICAgICAgICAgICBoaDogJyVkIOGDoeGDkOGDkOGDl+GDmCcsXG4gICAgICAgICAgICBkOiAn4YOT4YOm4YOUJyxcbiAgICAgICAgICAgIGRkOiAnJWQg4YOT4YOm4YOUJyxcbiAgICAgICAgICAgIE06ICfhg5fhg5Xhg5QnLFxuICAgICAgICAgICAgTU06ICclZCDhg5fhg5Xhg5QnLFxuICAgICAgICAgICAgeTogJ+GDrOGDlOGDmuGDmCcsXG4gICAgICAgICAgICB5eTogJyVkIOGDrOGDlOGDmuGDmCcsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC8wfDEt4YOa4YOYfOGDm+GDlC1cXGR7MSwyfXxcXGR7MSwyfS3hg5QvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICBpZiAobnVtYmVyID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3hg5rhg5gnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIG51bWJlciA8IDIwIHx8XG4gICAgICAgICAgICAgICAgKG51bWJlciA8PSAxMDAgJiYgbnVtYmVyICUgMjAgPT09IDApIHx8XG4gICAgICAgICAgICAgICAgbnVtYmVyICUgMTAwID09PSAwXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+GDm+GDlC0nICsgbnVtYmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct4YOUJztcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLFxuICAgICAgICAgICAgZG95OiA3LFxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGthO1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/ka.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/kk.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/kk.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Kazakh [kk]\n//! authors : Nurlan Rakhimzhanov : https://github.com/nurlan\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var suffixes = {\n        0: '-ші',\n        1: '-ші',\n        2: '-ші',\n        3: '-ші',\n        4: '-ші',\n        5: '-ші',\n        6: '-шы',\n        7: '-ші',\n        8: '-ші',\n        9: '-шы',\n        10: '-шы',\n        20: '-шы',\n        30: '-шы',\n        40: '-шы',\n        50: '-ші',\n        60: '-шы',\n        70: '-ші',\n        80: '-ші',\n        90: '-шы',\n        100: '-ші',\n    };\n\n    var kk = moment.defineLocale('kk', {\n        months: 'қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан'.split(\n            '_'\n        ),\n        monthsShort: 'қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел'.split('_'),\n        weekdays: 'жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі'.split(\n            '_'\n        ),\n        weekdaysShort: 'жек_дүй_сей_сәр_бей_жұм_сен'.split('_'),\n        weekdaysMin: 'жк_дй_сй_ср_бй_жм_сн'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Бүгін сағат] LT',\n            nextDay: '[Ертең сағат] LT',\n            nextWeek: 'dddd [сағат] LT',\n            lastDay: '[Кеше сағат] LT',\n            lastWeek: '[Өткен аптаның] dddd [сағат] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s ішінде',\n            past: '%s бұрын',\n            s: 'бірнеше секунд',\n            ss: '%d секунд',\n            m: 'бір минут',\n            mm: '%d минут',\n            h: 'бір сағат',\n            hh: '%d сағат',\n            d: 'бір күн',\n            dd: '%d күн',\n            M: 'бір ай',\n            MM: '%d ай',\n            y: 'бір жыл',\n            yy: '%d жыл',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(ші|шы)/,\n        ordinal: function (number) {\n            var a = number % 10,\n                b = number >= 100 ? 100 : null;\n            return number + (suffixes[number] || suffixes[a] || suffixes[b]);\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return kk;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ray5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ray5qcz80ODNhIl0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBLYXpha2ggW2trXVxuLy8hIGF1dGhvcnMgOiBOdXJsYW4gUmFraGltemhhbm92IDogaHR0cHM6Ly9naXRodWIuY29tL251cmxhblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHN1ZmZpeGVzID0ge1xuICAgICAgICAwOiAnLdGI0ZYnLFxuICAgICAgICAxOiAnLdGI0ZYnLFxuICAgICAgICAyOiAnLdGI0ZYnLFxuICAgICAgICAzOiAnLdGI0ZYnLFxuICAgICAgICA0OiAnLdGI0ZYnLFxuICAgICAgICA1OiAnLdGI0ZYnLFxuICAgICAgICA2OiAnLdGI0YsnLFxuICAgICAgICA3OiAnLdGI0ZYnLFxuICAgICAgICA4OiAnLdGI0ZYnLFxuICAgICAgICA5OiAnLdGI0YsnLFxuICAgICAgICAxMDogJy3RiNGLJyxcbiAgICAgICAgMjA6ICct0YjRiycsXG4gICAgICAgIDMwOiAnLdGI0YsnLFxuICAgICAgICA0MDogJy3RiNGLJyxcbiAgICAgICAgNTA6ICct0YjRlicsXG4gICAgICAgIDYwOiAnLdGI0YsnLFxuICAgICAgICA3MDogJy3RiNGWJyxcbiAgICAgICAgODA6ICct0YjRlicsXG4gICAgICAgIDkwOiAnLdGI0YsnLFxuICAgICAgICAxMDA6ICct0YjRlicsXG4gICAgfTtcblxuICAgIHZhciBrayA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2trJywge1xuICAgICAgICBtb250aHM6ICfSm9Cw0qPRgtCw0YBf0LDSm9C/0LDQvV/QvdCw0YPRgNGL0Ldf0YHTmdGD0ZbRgF/QvNCw0LzRi9GAX9C80LDRg9GB0YvQvF/RiNGW0LvQtNC1X9GC0LDQvNGL0Ldf0pvRi9GA0LrSr9C50LXQul/Sm9Cw0LfQsNC9X9Kb0LDRgNCw0YjQsF/QttC10LvRgtC+0pvRgdCw0L0nLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAn0pvQsNKjX9Cw0pvQv1/QvdCw0YNf0YHTmdGDX9C80LDQvF/QvNCw0YNf0YjRltC7X9GC0LDQvF/Sm9GL0YBf0pvQsNC3X9Kb0LDRgF/QttC10LsnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAn0LbQtdC60YHQtdC90LHRll/QtNKv0LnRgdC10L3QsdGWX9GB0LXQudGB0LXQvdCx0ZZf0YHTmdGA0YHQtdC90LHRll/QsdC10LnRgdC10L3QsdGWX9C20rHQvNCwX9GB0LXQvdCx0ZYnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfQttC10Lpf0LTSr9C5X9GB0LXQuV/RgdOZ0YBf0LHQtdC5X9C20rHQvF/RgdC10L0nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn0LbQul/QtNC5X9GB0Llf0YHRgF/QsdC5X9C20Lxf0YHQvScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vQkdKv0LPRltC9INGB0LDSk9Cw0YJdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb0JXRgNGC0LXSoyDRgdCw0pPQsNGCXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW9GB0LDSk9Cw0YJdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb0JrQtdGI0LUg0YHQsNKT0LDRgl0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdb06jRgtC60LXQvSDQsNC/0YLQsNC90YvSo10gZGRkZCBb0YHQsNKT0LDRgl0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICclcyDRltGI0ZbQvdC00LUnLFxuICAgICAgICAgICAgcGFzdDogJyVzINCx0rHRgNGL0L0nLFxuICAgICAgICAgICAgczogJ9Cx0ZbRgNC90LXRiNC1INGB0LXQutGD0L3QtCcsXG4gICAgICAgICAgICBzczogJyVkINGB0LXQutGD0L3QtCcsXG4gICAgICAgICAgICBtOiAn0LHRltGAINC80LjQvdGD0YInLFxuICAgICAgICAgICAgbW06ICclZCDQvNC40L3Rg9GCJyxcbiAgICAgICAgICAgIGg6ICfQsdGW0YAg0YHQsNKT0LDRgicsXG4gICAgICAgICAgICBoaDogJyVkINGB0LDSk9Cw0YInLFxuICAgICAgICAgICAgZDogJ9Cx0ZbRgCDQutKv0L0nLFxuICAgICAgICAgICAgZGQ6ICclZCDQutKv0L0nLFxuICAgICAgICAgICAgTTogJ9Cx0ZbRgCDQsNC5JyxcbiAgICAgICAgICAgIE1NOiAnJWQg0LDQuScsXG4gICAgICAgICAgICB5OiAn0LHRltGAINC20YvQuycsXG4gICAgICAgICAgICB5eTogJyVkINC20YvQuycsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfS0o0YjRlnzRiNGLKS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBhID0gbnVtYmVyICUgMTAsXG4gICAgICAgICAgICAgICAgYiA9IG51bWJlciA+PSAxMDAgPyAxMDAgOiBudWxsO1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIChzdWZmaXhlc1tudW1iZXJdIHx8IHN1ZmZpeGVzW2FdIHx8IHN1ZmZpeGVzW2JdKTtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNywgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gN3RoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGtrO1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/kk.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/km.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/km.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Cambodian [km]\n//! author : Kruy Vanna : https://github.com/kruyvanna\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '១',\n            2: '២',\n            3: '៣',\n            4: '៤',\n            5: '៥',\n            6: '៦',\n            7: '៧',\n            8: '៨',\n            9: '៩',\n            0: '០',\n        },\n        numberMap = {\n            '១': '1',\n            '២': '2',\n            '៣': '3',\n            '៤': '4',\n            '៥': '5',\n            '៦': '6',\n            '៧': '7',\n            '៨': '8',\n            '៩': '9',\n            '០': '0',\n        };\n\n    var km = moment.defineLocale('km', {\n        months: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split(\n            '_'\n        ),\n        monthsShort:\n            'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split(\n                '_'\n            ),\n        weekdays: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'),\n        weekdaysShort: 'អា_ច_អ_ព_ព្រ_សុ_ស'.split('_'),\n        weekdaysMin: 'អា_ច_អ_ព_ព្រ_សុ_ស'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /ព្រឹក|ល្ងាច/,\n        isPM: function (input) {\n            return input === 'ល្ងាច';\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ព្រឹក';\n            } else {\n                return 'ល្ងាច';\n            }\n        },\n        calendar: {\n            sameDay: '[ថ្ងៃនេះ ម៉ោង] LT',\n            nextDay: '[ស្អែក ម៉ោង] LT',\n            nextWeek: 'dddd [ម៉ោង] LT',\n            lastDay: '[ម្សិលមិញ ម៉ោង] LT',\n            lastWeek: 'dddd [សប្តាហ៍មុន] [ម៉ោង] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%sទៀត',\n            past: '%sមុន',\n            s: 'ប៉ុន្មានវិនាទី',\n            ss: '%d វិនាទី',\n            m: 'មួយនាទី',\n            mm: '%d នាទី',\n            h: 'មួយម៉ោង',\n            hh: '%d ម៉ោង',\n            d: 'មួយថ្ងៃ',\n            dd: '%d ថ្ងៃ',\n            M: 'មួយខែ',\n            MM: '%d ខែ',\n            y: 'មួយឆ្នាំ',\n            yy: '%d ឆ្នាំ',\n        },\n        dayOfMonthOrdinalParse: /ទី\\d{1,2}/,\n        ordinal: 'ទី%d',\n        preparse: function (string) {\n            return string.replace(/[១២៣៤៥៦៧៨៩០]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return km;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9rbS5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsc0NBQXNDLElBQUk7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2ttLmpzPzk2YWQiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IENhbWJvZGlhbiBba21dXG4vLyEgYXV0aG9yIDogS3J1eSBWYW5uYSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9rcnV5dmFubmFcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBzeW1ib2xNYXAgPSB7XG4gICAgICAgICAgICAxOiAn4Z+hJyxcbiAgICAgICAgICAgIDI6ICfhn6InLFxuICAgICAgICAgICAgMzogJ+GfoycsXG4gICAgICAgICAgICA0OiAn4Z+kJyxcbiAgICAgICAgICAgIDU6ICfhn6UnLFxuICAgICAgICAgICAgNjogJ+GfpicsXG4gICAgICAgICAgICA3OiAn4Z+nJyxcbiAgICAgICAgICAgIDg6ICfhn6gnLFxuICAgICAgICAgICAgOTogJ+GfqScsXG4gICAgICAgICAgICAwOiAn4Z+gJyxcbiAgICAgICAgfSxcbiAgICAgICAgbnVtYmVyTWFwID0ge1xuICAgICAgICAgICAgJ+GfoSc6ICcxJyxcbiAgICAgICAgICAgICfhn6InOiAnMicsXG4gICAgICAgICAgICAn4Z+jJzogJzMnLFxuICAgICAgICAgICAgJ+GfpCc6ICc0JyxcbiAgICAgICAgICAgICfhn6UnOiAnNScsXG4gICAgICAgICAgICAn4Z+mJzogJzYnLFxuICAgICAgICAgICAgJ+Gfpyc6ICc3JyxcbiAgICAgICAgICAgICfhn6gnOiAnOCcsXG4gICAgICAgICAgICAn4Z+pJzogJzknLFxuICAgICAgICAgICAgJ+GfoCc6ICcwJyxcbiAgICAgICAgfTtcblxuICAgIHZhciBrbSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2ttJywge1xuICAgICAgICBtb250aHM6ICfhnpjhnoDhnprhnrZf4Z6A4Z674Z6Y4Z+S4Z6X4Z+IX+GemOGeuOGek+Getl/hnpjhn4Hhnp/hnrZf4Z6n4Z6f4Z6X4Z62X+GemOGet+GekOGeu+Gek+Getl/hnoDhnoDhn5LhnoDhnorhnrZf4Z6f4Z644Z6g4Z62X+GegOGeieGfkuGeieGetl/hno/hnrvhnpvhnrZf4Z6c4Z634Z6F4Z+S4Z6G4Z634Z6A4Z62X+GekuGfkuGek+GevCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAn4Z6Y4Z6A4Z6a4Z62X+GegOGeu+GemOGfkuGel+GfiF/hnpjhnrjhnpPhnrZf4Z6Y4Z+B4Z6f4Z62X+Gep+Gen+Gel+Getl/hnpjhnrfhnpDhnrvhnpPhnrZf4Z6A4Z6A4Z+S4Z6A4Z6K4Z62X+Gen+GeuOGeoOGetl/hnoDhnonhn5LhnonhnrZf4Z6P4Z674Z6b4Z62X+GenOGet+GeheGfkuGehuGet+GegOGetl/hnpLhn5LhnpPhnrwnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXM6ICfhnqLhnrbhnpHhnrfhno/hn5Lhnplf4Z6F4Z+Q4Z6T4Z+S4Z6RX+GeouGehOGfkuGeguGetuGeml/hnpbhnrvhnpJf4Z6W4Z+S4Z6a4Z6g4Z6f4Z+S4Z6U4Z6P4Z634Z+NX+Gen+Geu+GegOGfkuGeml/hnp/hn4Xhnprhn40nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfhnqLhnrZf4Z6FX+Geol/hnpZf4Z6W4Z+S4Z6aX+Gen+Geu1/hnp8nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn4Z6i4Z62X+GehV/hnqJf4Z6WX+GeluGfkuGeml/hnp/hnrtf4Z6fJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL+GeluGfkuGemuGeueGegHzhnpvhn5LhnoThnrbhnoUvLFxuICAgICAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCA9PT0gJ+Gem+GfkuGehOGetuGehSc7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfhnpbhn5LhnprhnrnhnoAnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+Gem+GfkuGehOGetuGehSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW+GekOGfkuGehOGfg+Gek+GfgeGfhyDhnpjhn4nhn4ThnoRdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb4Z6f4Z+S4Z6i4Z+C4Z6AIOGemOGfieGfhOGehF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFvhnpjhn4nhn4ThnoRdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb4Z6Y4Z+S4Z6f4Z634Z6b4Z6Y4Z634Z6JIOGemOGfieGfhOGehF0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFvhnp/hnpThn5Lhno/hnrbhnqDhn43hnpjhnrvhnpNdIFvhnpjhn4nhn4ThnoRdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXPhnpHhn4Dhno8nLFxuICAgICAgICAgICAgcGFzdDogJyVz4Z6Y4Z674Z6TJyxcbiAgICAgICAgICAgIHM6ICfhnpThn4nhnrvhnpPhn5LhnpjhnrbhnpPhnpzhnrfhnpPhnrbhnpHhnrgnLFxuICAgICAgICAgICAgc3M6ICclZCDhnpzhnrfhnpPhnrbhnpHhnrgnLFxuICAgICAgICAgICAgbTogJ+GemOGeveGemeGek+GetuGekeGeuCcsXG4gICAgICAgICAgICBtbTogJyVkIOGek+GetuGekeGeuCcsXG4gICAgICAgICAgICBoOiAn4Z6Y4Z694Z6Z4Z6Y4Z+J4Z+E4Z6EJyxcbiAgICAgICAgICAgIGhoOiAnJWQg4Z6Y4Z+J4Z+E4Z6EJyxcbiAgICAgICAgICAgIGQ6ICfhnpjhnr3hnpnhnpDhn5LhnoThn4MnLFxuICAgICAgICAgICAgZGQ6ICclZCDhnpDhn5LhnoThn4MnLFxuICAgICAgICAgICAgTTogJ+GemOGeveGemeGegeGfgicsXG4gICAgICAgICAgICBNTTogJyVkIOGegeGfgicsXG4gICAgICAgICAgICB5OiAn4Z6Y4Z694Z6Z4Z6G4Z+S4Z6T4Z624Z+GJyxcbiAgICAgICAgICAgIHl5OiAnJWQg4Z6G4Z+S4Z6T4Z624Z+GJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL+GekeGeuFxcZHsxLDJ9LyxcbiAgICAgICAgb3JkaW5hbDogJ+GekeGeuCVkJyxcbiAgICAgICAgcHJlcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvW+GfoeGfouGfo+GfpOGfpeGfpuGfp+GfqOGfqeGfoF0vZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlck1hcFttYXRjaF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgcG9zdGZvcm1hdDogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9cXGQvZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN5bWJvbE1hcFttYXRjaF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGttO1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/km.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/kn.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/kn.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Kannada [kn]\n//! author : Rajeev Naik : https://github.com/rajeevnaikte\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '೧',\n            2: '೨',\n            3: '೩',\n            4: '೪',\n            5: '೫',\n            6: '೬',\n            7: '೭',\n            8: '೮',\n            9: '೯',\n            0: '೦',\n        },\n        numberMap = {\n            '೧': '1',\n            '೨': '2',\n            '೩': '3',\n            '೪': '4',\n            '೫': '5',\n            '೬': '6',\n            '೭': '7',\n            '೮': '8',\n            '೯': '9',\n            '೦': '0',\n        };\n\n    var kn = moment.defineLocale('kn', {\n        months: 'ಜನವರಿ_ಫೆಬ್ರವರಿ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬರ್_ಅಕ್ಟೋಬರ್_ನವೆಂಬರ್_ಡಿಸೆಂಬರ್'.split(\n            '_'\n        ),\n        monthsShort:\n            'ಜನ_ಫೆಬ್ರ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂ_ಅಕ್ಟೋ_ನವೆಂ_ಡಿಸೆಂ'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'ಭಾನುವಾರ_ಸೋಮವಾರ_ಮಂಗಳವಾರ_ಬುಧವಾರ_ಗುರುವಾರ_ಶುಕ್ರವಾರ_ಶನಿವಾರ'.split(\n            '_'\n        ),\n        weekdaysShort: 'ಭಾನು_ಸೋಮ_ಮಂಗಳ_ಬುಧ_ಗುರು_ಶುಕ್ರ_ಶನಿ'.split('_'),\n        weekdaysMin: 'ಭಾ_ಸೋ_ಮಂ_ಬು_ಗು_ಶು_ಶ'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm',\n            LTS: 'A h:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm',\n        },\n        calendar: {\n            sameDay: '[ಇಂದು] LT',\n            nextDay: '[ನಾಳೆ] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[ನಿನ್ನೆ] LT',\n            lastWeek: '[ಕೊನೆಯ] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s ನಂತರ',\n            past: '%s ಹಿಂದೆ',\n            s: 'ಕೆಲವು ಕ್ಷಣಗಳು',\n            ss: '%d ಸೆಕೆಂಡುಗಳು',\n            m: 'ಒಂದು ನಿಮಿಷ',\n            mm: '%d ನಿಮಿಷ',\n            h: 'ಒಂದು ಗಂಟೆ',\n            hh: '%d ಗಂಟೆ',\n            d: 'ಒಂದು ದಿನ',\n            dd: '%d ದಿನ',\n            M: 'ಒಂದು ತಿಂಗಳು',\n            MM: '%d ತಿಂಗಳು',\n            y: 'ಒಂದು ವರ್ಷ',\n            yy: '%d ವರ್ಷ',\n        },\n        preparse: function (string) {\n            return string.replace(/[೧೨೩೪೫೬೭೮೯೦]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        meridiemParse: /ರಾತ್ರಿ|ಬೆಳಿಗ್ಗೆ|ಮಧ್ಯಾಹ್ನ|ಸಂಜೆ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'ರಾತ್ರಿ') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'ಬೆಳಿಗ್ಗೆ') {\n                return hour;\n            } else if (meridiem === 'ಮಧ್ಯಾಹ್ನ') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'ಸಂಜೆ') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ರಾತ್ರಿ';\n            } else if (hour < 10) {\n                return 'ಬೆಳಿಗ್ಗೆ';\n            } else if (hour < 17) {\n                return 'ಮಧ್ಯಾಹ್ನ';\n            } else if (hour < 20) {\n                return 'ಸಂಜೆ';\n            } else {\n                return 'ರಾತ್ರಿ';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ನೇ)/,\n        ordinal: function (number) {\n            return number + 'ನೇ';\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return kn;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9rbi5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUva24uanM/YTg3MCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogS2FubmFkYSBba25dXG4vLyEgYXV0aG9yIDogUmFqZWV2IE5haWsgOiBodHRwczovL2dpdGh1Yi5jb20vcmFqZWV2bmFpa3RlXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgc3ltYm9sTWFwID0ge1xuICAgICAgICAgICAgMTogJ+CzpycsXG4gICAgICAgICAgICAyOiAn4LOoJyxcbiAgICAgICAgICAgIDM6ICfgs6knLFxuICAgICAgICAgICAgNDogJ+CzqicsXG4gICAgICAgICAgICA1OiAn4LOrJyxcbiAgICAgICAgICAgIDY6ICfgs6wnLFxuICAgICAgICAgICAgNzogJ+CzrScsXG4gICAgICAgICAgICA4OiAn4LOuJyxcbiAgICAgICAgICAgIDk6ICfgs68nLFxuICAgICAgICAgICAgMDogJ+CzpicsXG4gICAgICAgIH0sXG4gICAgICAgIG51bWJlck1hcCA9IHtcbiAgICAgICAgICAgICfgs6cnOiAnMScsXG4gICAgICAgICAgICAn4LOoJzogJzInLFxuICAgICAgICAgICAgJ+CzqSc6ICczJyxcbiAgICAgICAgICAgICfgs6onOiAnNCcsXG4gICAgICAgICAgICAn4LOrJzogJzUnLFxuICAgICAgICAgICAgJ+CzrCc6ICc2JyxcbiAgICAgICAgICAgICfgs60nOiAnNycsXG4gICAgICAgICAgICAn4LOuJzogJzgnLFxuICAgICAgICAgICAgJ+Czryc6ICc5JyxcbiAgICAgICAgICAgICfgs6YnOiAnMCcsXG4gICAgICAgIH07XG5cbiAgICB2YXIga24gPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdrbicsIHtcbiAgICAgICAgbW9udGhzOiAn4LKc4LKo4LK14LKw4LK/X+Cyq+CzhuCyrOCzjeCysOCyteCysOCyv1/gsq7gsr7gsrDgs43gsprgs41f4LKP4LKq4LON4LKw4LK/4LKy4LONX+CyruCzhuCzlV/gspzgs4Lgsqjgs41f4LKc4LOB4LKy4LOG4LOWX+CyhuCyl+CyuOCzjeCyn+CzjV/gsrjgs4bgsqrgs43gsp/gs4bgsoLgsqzgsrDgs41f4LKF4LKV4LON4LKf4LOG4LOC4LOV4LKs4LKw4LONX+CyqOCyteCzhuCyguCyrOCysOCzjV/gsqHgsr/gsrjgs4bgsoLgsqzgsrDgs40nLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ+CynOCyqF/gsqvgs4bgsqzgs43gsrBf4LKu4LK+4LKw4LON4LKa4LONX+Cyj+CyquCzjeCysOCyv+CysuCzjV/gsq7gs4bgs5Vf4LKc4LOC4LKo4LONX+CynOCzgeCysuCzhuCzll/gsobgspfgsrjgs43gsp/gs41f4LK44LOG4LKq4LON4LKf4LOG4LKCX+CyheCyleCzjeCyn+CzhuCzguCzlV/gsqjgsrXgs4bgsoJf4LKh4LK/4LK44LOG4LKCJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOiAn4LKt4LK+4LKo4LOB4LK14LK+4LKwX+CyuOCzhuCzguCzleCyruCyteCyvuCysF/gsq7gsoLgspfgsrPgsrXgsr7gsrBf4LKs4LOB4LKn4LK14LK+4LKwX+Cyl+CzgeCysOCzgeCyteCyvuCysF/gsrbgs4HgspXgs43gsrDgsrXgsr7gsrBf4LK24LKo4LK/4LK14LK+4LKwJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn4LKt4LK+4LKo4LOBX+CyuOCzhuCzguCzleCyrl/gsq7gsoLgspfgsrNf4LKs4LOB4LKnX+Cyl+CzgeCysOCzgV/gsrbgs4HgspXgs43gsrBf4LK24LKo4LK/Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ+CyreCyvl/gsrjgs4bgs4Lgs5Vf4LKu4LKCX+CyrOCzgV/gspfgs4Ff4LK24LOBX+Cyticuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnQSBoOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0EgaDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZLCBBIGg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vgsofgsoLgsqbgs4FdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb4LKo4LK+4LKz4LOGXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQsIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb4LKo4LK/4LKo4LON4LKo4LOGXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1vgspXgs4bgs4Lgsqjgs4bgsq9dIGRkZGQsIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMg4LKo4LKC4LKk4LKwJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyDgsrngsr/gsoLgsqbgs4YnLFxuICAgICAgICAgICAgczogJ+CyleCzhuCysuCyteCzgSDgspXgs43gsrfgsqPgspfgsrPgs4EnLFxuICAgICAgICAgICAgc3M6ICclZCDgsrjgs4bgspXgs4bgsoLgsqHgs4HgspfgsrPgs4EnLFxuICAgICAgICAgICAgbTogJ+CykuCyguCypuCzgSDgsqjgsr/gsq7gsr/gsrcnLFxuICAgICAgICAgICAgbW06ICclZCDgsqjgsr/gsq7gsr/gsrcnLFxuICAgICAgICAgICAgaDogJ+CykuCyguCypuCzgSDgspfgsoLgsp/gs4YnLFxuICAgICAgICAgICAgaGg6ICclZCDgspfgsoLgsp/gs4YnLFxuICAgICAgICAgICAgZDogJ+CykuCyguCypuCzgSDgsqbgsr/gsqgnLFxuICAgICAgICAgICAgZGQ6ICclZCDgsqbgsr/gsqgnLFxuICAgICAgICAgICAgTTogJ+CykuCyguCypuCzgSDgsqTgsr/gsoLgspfgsrPgs4EnLFxuICAgICAgICAgICAgTU06ICclZCDgsqTgsr/gsoLgspfgsrPgs4EnLFxuICAgICAgICAgICAgeTogJ+CykuCyguCypuCzgSDgsrXgsrDgs43gsrcnLFxuICAgICAgICAgICAgeXk6ICclZCDgsrXgsrDgs43gsrcnLFxuICAgICAgICB9LFxuICAgICAgICBwcmVwYXJzZTogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9b4LOn4LOo4LOp4LOq4LOr4LOs4LOt4LOu4LOv4LOmXS9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyTWFwW21hdGNoXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBwb3N0Zm9ybWF0OiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1xcZC9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3ltYm9sTWFwW21hdGNoXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv4LKw4LK+4LKk4LON4LKw4LK/fOCyrOCzhuCys+Cyv+Cyl+CzjeCyl+Czhnzgsq7gsqfgs43gsq/gsr7gsrngs43gsqh84LK44LKC4LKc4LOGLyxcbiAgICAgICAgbWVyaWRpZW1Ib3VyOiBmdW5jdGlvbiAoaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1lcmlkaWVtID09PSAn4LKw4LK+4LKk4LON4LKw4LK/Jykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyIDwgNCA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4LKs4LOG4LKz4LK/4LKX4LON4LKX4LOGJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CyruCyp+CzjeCyr+CyvuCyueCzjeCyqCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA+PSAxMCA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4LK44LKC4LKc4LOGJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyICsgMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CysOCyvuCypOCzjeCysOCyvyc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4LKs4LOG4LKz4LK/4LKX4LON4LKX4LOGJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDE3KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgsq7gsqfgs43gsq/gsr7gsrngs43gsqgnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMjApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CyuOCyguCynOCzhic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4LKw4LK+4LKk4LON4LKw4LK/JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KOCyqOCzhuCzlSkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJ+CyqOCzhuCzlSc7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMCwgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDYsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDZ0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBrbjtcblxufSkpKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/kn.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/ko.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/ko.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Korean [ko]\n//! author : Kyungwook, Park : https://github.com/kyungw00k\n//! author : Jeeeyul Lee <jeeeyul@gmail.com>\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var ko = moment.defineLocale('ko', {\n        months: '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'),\n        monthsShort: '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split(\n            '_'\n        ),\n        weekdays: '일요일_월요일_화요일_수요일_목요일_금요일_토요일'.split('_'),\n        weekdaysShort: '일_월_화_수_목_금_토'.split('_'),\n        weekdaysMin: '일_월_화_수_목_금_토'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm',\n            LTS: 'A h:mm:ss',\n            L: 'YYYY.MM.DD.',\n            LL: 'YYYY년 MMMM D일',\n            LLL: 'YYYY년 MMMM D일 A h:mm',\n            LLLL: 'YYYY년 MMMM D일 dddd A h:mm',\n            l: 'YYYY.MM.DD.',\n            ll: 'YYYY년 MMMM D일',\n            lll: 'YYYY년 MMMM D일 A h:mm',\n            llll: 'YYYY년 MMMM D일 dddd A h:mm',\n        },\n        calendar: {\n            sameDay: '오늘 LT',\n            nextDay: '내일 LT',\n            nextWeek: 'dddd LT',\n            lastDay: '어제 LT',\n            lastWeek: '지난주 dddd LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s 후',\n            past: '%s 전',\n            s: '몇 초',\n            ss: '%d초',\n            m: '1분',\n            mm: '%d분',\n            h: '한 시간',\n            hh: '%d시간',\n            d: '하루',\n            dd: '%d일',\n            M: '한 달',\n            MM: '%d달',\n            y: '일 년',\n            yy: '%d년',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(일|월|주)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '일';\n                case 'M':\n                    return number + '월';\n                case 'w':\n                case 'W':\n                    return number + '주';\n                default:\n                    return number;\n            }\n        },\n        meridiemParse: /오전|오후/,\n        isPM: function (token) {\n            return token === '오후';\n        },\n        meridiem: function (hour, minute, isUpper) {\n            return hour < 12 ? '오전' : '오후';\n        },\n    });\n\n    return ko;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9rby5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsa0RBQVc7QUFDckUsR0FBRyxDQUNzQjtBQUN6QixDQUFDLDRCQUE0Qjs7QUFFN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUva28uanM/Y2YzMyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogS29yZWFuIFtrb11cbi8vISBhdXRob3IgOiBLeXVuZ3dvb2ssIFBhcmsgOiBodHRwczovL2dpdGh1Yi5jb20va3l1bmd3MDBrXG4vLyEgYXV0aG9yIDogSmVlZXl1bCBMZWUgPGplZWV5dWxAZ21haWwuY29tPlxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIGtvID0gbW9tZW50LmRlZmluZUxvY2FsZSgna28nLCB7XG4gICAgICAgIG1vbnRoczogJzHsm5RfMuyblF8z7JuUXzTsm5RfNeyblF827JuUXzfsm5RfOOyblF857JuUXzEw7JuUXzEx7JuUXzEy7JuUJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydDogJzHsm5RfMuyblF8z7JuUXzTsm5RfNeyblF827JuUXzfsm5RfOOyblF857JuUXzEw7JuUXzEx7JuUXzEy7JuUJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5czogJ+ydvOyalOydvF/sm5TsmpTsnbxf7ZmU7JqU7J28X+yImOyalOydvF/rqqnsmpTsnbxf6riI7JqU7J28X+2GoOyalOydvCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ+ydvF/sm5Rf7ZmUX+yImF/rqqlf6riIX+2GoCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfsnbxf7JuUX+2ZlF/siJhf66qpX+q4iF/thqAnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0EgaDptbScsXG4gICAgICAgICAgICBMVFM6ICdBIGg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ1lZWVkuTU0uREQuJyxcbiAgICAgICAgICAgIExMOiAnWVlZWeuFhCBNTU1NIETsnbwnLFxuICAgICAgICAgICAgTExMOiAnWVlZWeuFhCBNTU1NIETsnbwgQSBoOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdZWVlZ64WEIE1NTU0gROydvCBkZGRkIEEgaDptbScsXG4gICAgICAgICAgICBsOiAnWVlZWS5NTS5ERC4nLFxuICAgICAgICAgICAgbGw6ICdZWVlZ64WEIE1NTU0gROydvCcsXG4gICAgICAgICAgICBsbGw6ICdZWVlZ64WEIE1NTU0gROydvCBBIGg6bW0nLFxuICAgICAgICAgICAgbGxsbDogJ1lZWVnrhYQgTU1NTSBE7J28IGRkZGQgQSBoOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICfsmKTripggTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ+uCtOydvCBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ+yWtOygnCBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ+yngOuCnOyjvCBkZGRkIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMg7ZuEJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyDsoIQnLFxuICAgICAgICAgICAgczogJ+uqhyDstIgnLFxuICAgICAgICAgICAgc3M6ICclZOy0iCcsXG4gICAgICAgICAgICBtOiAnMeu2hCcsXG4gICAgICAgICAgICBtbTogJyVk67aEJyxcbiAgICAgICAgICAgIGg6ICftlZwg7Iuc6rCEJyxcbiAgICAgICAgICAgIGhoOiAnJWTsi5zqsIQnLFxuICAgICAgICAgICAgZDogJ+2VmOujqCcsXG4gICAgICAgICAgICBkZDogJyVk7J28JyxcbiAgICAgICAgICAgIE06ICftlZwg64usJyxcbiAgICAgICAgICAgIE1NOiAnJWTri6wnLFxuICAgICAgICAgICAgeTogJ+ydvCDrhYQnLFxuICAgICAgICAgICAgeXk6ICclZOuFhCcsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfSjsnbx87JuUfOyjvCkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyLCBwZXJpb2QpIHtcbiAgICAgICAgICAgIHN3aXRjaCAocGVyaW9kKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnRCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnREREJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICfsnbwnO1xuICAgICAgICAgICAgICAgIGNhc2UgJ00nOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJ+yblCc7XG4gICAgICAgICAgICAgICAgY2FzZSAndyc6XG4gICAgICAgICAgICAgICAgY2FzZSAnVyc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAn7KO8JztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv7Jik7KCEfOyYpO2bhC8sXG4gICAgICAgIGlzUE06IGZ1bmN0aW9uICh0b2tlbikge1xuICAgICAgICAgICAgcmV0dXJuIHRva2VuID09PSAn7Jik7ZuEJztcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzVXBwZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBob3VyIDwgMTIgPyAn7Jik7KCEJyA6ICfsmKTtm4QnO1xuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGtvO1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/ko.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/ku.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/ku.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Kurdish [ku]\n//! author : Shahram Mebashar : https://github.com/ShahramMebashar\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '١',\n            2: '٢',\n            3: '٣',\n            4: '٤',\n            5: '٥',\n            6: '٦',\n            7: '٧',\n            8: '٨',\n            9: '٩',\n            0: '٠',\n        },\n        numberMap = {\n            '١': '1',\n            '٢': '2',\n            '٣': '3',\n            '٤': '4',\n            '٥': '5',\n            '٦': '6',\n            '٧': '7',\n            '٨': '8',\n            '٩': '9',\n            '٠': '0',\n        },\n        months = [\n            'کانونی دووەم',\n            'شوبات',\n            'ئازار',\n            'نیسان',\n            'ئایار',\n            'حوزەیران',\n            'تەمموز',\n            'ئاب',\n            'ئەیلوول',\n            'تشرینی یەكەم',\n            'تشرینی دووەم',\n            'كانونی یەکەم',\n        ];\n\n    var ku = moment.defineLocale('ku', {\n        months: months,\n        monthsShort: months,\n        weekdays:\n            'یه‌كشه‌ممه‌_دووشه‌ممه‌_سێشه‌ممه‌_چوارشه‌ممه‌_پێنجشه‌ممه‌_هه‌ینی_شه‌ممه‌'.split(\n                '_'\n            ),\n        weekdaysShort:\n            'یه‌كشه‌م_دووشه‌م_سێشه‌م_چوارشه‌م_پێنجشه‌م_هه‌ینی_شه‌ممه‌'.split('_'),\n        weekdaysMin: 'ی_د_س_چ_پ_ه_ش'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /ئێواره‌|به‌یانی/,\n        isPM: function (input) {\n            return /ئێواره‌/.test(input);\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'به‌یانی';\n            } else {\n                return 'ئێواره‌';\n            }\n        },\n        calendar: {\n            sameDay: '[ئه‌مرۆ كاتژمێر] LT',\n            nextDay: '[به‌یانی كاتژمێر] LT',\n            nextWeek: 'dddd [كاتژمێر] LT',\n            lastDay: '[دوێنێ كاتژمێر] LT',\n            lastWeek: 'dddd [كاتژمێر] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'له‌ %s',\n            past: '%s',\n            s: 'چه‌ند چركه‌یه‌ك',\n            ss: 'چركه‌ %d',\n            m: 'یه‌ك خوله‌ك',\n            mm: '%d خوله‌ك',\n            h: 'یه‌ك كاتژمێر',\n            hh: '%d كاتژمێر',\n            d: 'یه‌ك ڕۆژ',\n            dd: '%d ڕۆژ',\n            M: 'یه‌ك مانگ',\n            MM: '%d مانگ',\n            y: 'یه‌ك ساڵ',\n            yy: '%d ساڵ',\n        },\n        preparse: function (string) {\n            return string\n                .replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {\n                    return numberMap[match];\n                })\n                .replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string\n                .replace(/\\d/g, function (match) {\n                    return symbolMap[match];\n                })\n                .replace(/,/g, '،');\n        },\n        week: {\n            dow: 6, // Saturday is the first day of the week.\n            doy: 12, // The week that contains Jan 12th is the first week of the year.\n        },\n    });\n\n    return ku;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9rdS5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9rdS5qcz9iMzQ2Il0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBLdXJkaXNoIFtrdV1cbi8vISBhdXRob3IgOiBTaGFocmFtIE1lYmFzaGFyIDogaHR0cHM6Ly9naXRodWIuY29tL1NoYWhyYW1NZWJhc2hhclxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHN5bWJvbE1hcCA9IHtcbiAgICAgICAgICAgIDE6ICfZoScsXG4gICAgICAgICAgICAyOiAn2aInLFxuICAgICAgICAgICAgMzogJ9mjJyxcbiAgICAgICAgICAgIDQ6ICfZpCcsXG4gICAgICAgICAgICA1OiAn2aUnLFxuICAgICAgICAgICAgNjogJ9mmJyxcbiAgICAgICAgICAgIDc6ICfZpycsXG4gICAgICAgICAgICA4OiAn2agnLFxuICAgICAgICAgICAgOTogJ9mpJyxcbiAgICAgICAgICAgIDA6ICfZoCcsXG4gICAgICAgIH0sXG4gICAgICAgIG51bWJlck1hcCA9IHtcbiAgICAgICAgICAgICfZoSc6ICcxJyxcbiAgICAgICAgICAgICfZoic6ICcyJyxcbiAgICAgICAgICAgICfZoyc6ICczJyxcbiAgICAgICAgICAgICfZpCc6ICc0JyxcbiAgICAgICAgICAgICfZpSc6ICc1JyxcbiAgICAgICAgICAgICfZpic6ICc2JyxcbiAgICAgICAgICAgICfZpyc6ICc3JyxcbiAgICAgICAgICAgICfZqCc6ICc4JyxcbiAgICAgICAgICAgICfZqSc6ICc5JyxcbiAgICAgICAgICAgICfZoCc6ICcwJyxcbiAgICAgICAgfSxcbiAgICAgICAgbW9udGhzID0gW1xuICAgICAgICAgICAgJ9qp2KfZhtmI2YbbjCDYr9mI2YjbldmFJyxcbiAgICAgICAgICAgICfYtNmI2KjYp9iqJyxcbiAgICAgICAgICAgICfYptin2LLYp9ixJyxcbiAgICAgICAgICAgICfZhtuM2LPYp9mGJyxcbiAgICAgICAgICAgICfYptin24zYp9ixJyxcbiAgICAgICAgICAgICfYrdmI2LLblduM2LHYp9mGJyxcbiAgICAgICAgICAgICfYqtuV2YXZhdmI2LInLFxuICAgICAgICAgICAgJ9im2KfYqCcsXG4gICAgICAgICAgICAn2KbblduM2YTZiNmI2YQnLFxuICAgICAgICAgICAgJ9iq2LTYsduM2YbbjCDbjNuV2YPbldmFJyxcbiAgICAgICAgICAgICfYqti02LHbjNmG24wg2K/ZiNmI25XZhScsXG4gICAgICAgICAgICAn2YPYp9mG2YjZhtuMINuM25XaqduV2YUnLFxuICAgICAgICBdO1xuXG4gICAgdmFyIGt1ID0gbW9tZW50LmRlZmluZUxvY2FsZSgna3UnLCB7XG4gICAgICAgIG1vbnRoczogbW9udGhzLFxuICAgICAgICBtb250aHNTaG9ydDogbW9udGhzLFxuICAgICAgICB3ZWVrZGF5czpcbiAgICAgICAgICAgICfbjNmH4oCM2YPYtNmH4oCM2YXZhdmH4oCMX9iv2YjZiNi02YfigIzZhdmF2YfigIxf2LPbjti02YfigIzZhdmF2YfigIxf2obZiNin2LHYtNmH4oCM2YXZhdmH4oCMX9m+247Zhtis2LTZh+KAjNmF2YXZh+KAjF/Zh9mH4oCM24zZhtuMX9i02YfigIzZhdmF2YfigIwnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDpcbiAgICAgICAgICAgICfbjNmH4oCM2YPYtNmH4oCM2YVf2K/ZiNmI2LTZh+KAjNmFX9iz247YtNmH4oCM2YVf2obZiNin2LHYtNmH4oCM2YVf2b7bjtmG2KzYtNmH4oCM2YVf2YfZh+KAjNuM2YbbjF/YtNmH4oCM2YXZhdmH4oCMJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ9uMX9ivX9izX9qGX9m+X9mHX9i0Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL9im247ZiNin2LHZh+KAjHzYqNmH4oCM24zYp9mG24wvLFxuICAgICAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiAv2KbbjtmI2KfYsdmH4oCMLy50ZXN0KGlucHV0KTtcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9io2YfigIzbjNin2YbbjCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn2KbbjtmI2KfYsdmH4oCMJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb2KbZh+KAjNmF2LHbhiDZg9in2KramNmF247YsV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vYqNmH4oCM24zYp9mG24wg2YPYp9iq2pjZhduO2LFdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBb2YPYp9iq2pjZhduO2LFdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb2K/ZiNuO2YbbjiDZg9in2KramNmF247YsV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFvZg9in2KramNmF247YsV0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICfZhNmH4oCMICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcycsXG4gICAgICAgICAgICBzOiAn2obZh+KAjNmG2K8g2obYsdmD2YfigIzbjNmH4oCM2YMnLFxuICAgICAgICAgICAgc3M6ICfahtix2YPZh+KAjCAlZCcsXG4gICAgICAgICAgICBtOiAn24zZh+KAjNmDINiu2YjZhNmH4oCM2YMnLFxuICAgICAgICAgICAgbW06ICclZCDYrtmI2YTZh+KAjNmDJyxcbiAgICAgICAgICAgIGg6ICfbjNmH4oCM2YMg2YPYp9iq2pjZhduO2LEnLFxuICAgICAgICAgICAgaGg6ICclZCDZg9in2KramNmF247YsScsXG4gICAgICAgICAgICBkOiAn24zZh+KAjNmDINqV24bamCcsXG4gICAgICAgICAgICBkZDogJyVkINqV24bamCcsXG4gICAgICAgICAgICBNOiAn24zZh+KAjNmDINmF2KfZhtqvJyxcbiAgICAgICAgICAgIE1NOiAnJWQg2YXYp9mG2q8nLFxuICAgICAgICAgICAgeTogJ9uM2YfigIzZgyDYs9in2rUnLFxuICAgICAgICAgICAgeXk6ICclZCDYs9in2rUnLFxuICAgICAgICB9LFxuICAgICAgICBwcmVwYXJzZTogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZ1xuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9b2aHZotmj2aTZpdmm2afZqNmp2aBdL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyTWFwW21hdGNoXTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC/YjC9nLCAnLCcpO1xuICAgICAgICB9LFxuICAgICAgICBwb3N0Zm9ybWF0OiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcZC9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN5bWJvbE1hcFttYXRjaF07XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvLC9nLCAn2IwnKTtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiA2LCAvLyBTYXR1cmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiAxMiwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gMTJ0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBrdTtcblxufSkpKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/ku.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/ky.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/ky.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Kyrgyz [ky]\n//! author : Chyngyz Arystan uulu : https://github.com/chyngyz\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var suffixes = {\n        0: '-чү',\n        1: '-чи',\n        2: '-чи',\n        3: '-чү',\n        4: '-чү',\n        5: '-чи',\n        6: '-чы',\n        7: '-чи',\n        8: '-чи',\n        9: '-чу',\n        10: '-чу',\n        20: '-чы',\n        30: '-чу',\n        40: '-чы',\n        50: '-чү',\n        60: '-чы',\n        70: '-чи',\n        80: '-чи',\n        90: '-чу',\n        100: '-чү',\n    };\n\n    var ky = moment.defineLocale('ky', {\n        months: 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split(\n            '_'\n        ),\n        monthsShort: 'янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек'.split(\n            '_'\n        ),\n        weekdays: 'Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби'.split(\n            '_'\n        ),\n        weekdaysShort: 'Жек_Дүй_Шей_Шар_Бей_Жум_Ише'.split('_'),\n        weekdaysMin: 'Жк_Дй_Шй_Шр_Бй_Жм_Иш'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Бүгүн саат] LT',\n            nextDay: '[Эртең саат] LT',\n            nextWeek: 'dddd [саат] LT',\n            lastDay: '[Кечээ саат] LT',\n            lastWeek: '[Өткөн аптанын] dddd [күнү] [саат] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s ичинде',\n            past: '%s мурун',\n            s: 'бирнече секунд',\n            ss: '%d секунд',\n            m: 'бир мүнөт',\n            mm: '%d мүнөт',\n            h: 'бир саат',\n            hh: '%d саат',\n            d: 'бир күн',\n            dd: '%d күн',\n            M: 'бир ай',\n            MM: '%d ай',\n            y: 'бир жыл',\n            yy: '%d жыл',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(чи|чы|чү|чу)/,\n        ordinal: function (number) {\n            var a = number % 10,\n                b = number >= 100 ? 100 : null;\n            return number + (suffixes[number] || suffixes[a] || suffixes[b]);\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return ky;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9reS5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxvQ0FBb0MsSUFBSTtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUva3kuanM/YTU1NiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogS3lyZ3l6IFtreV1cbi8vISBhdXRob3IgOiBDaHluZ3l6IEFyeXN0YW4gdXVsdSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9jaHluZ3l6XG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgc3VmZml4ZXMgPSB7XG4gICAgICAgIDA6ICct0YfSrycsXG4gICAgICAgIDE6ICct0YfQuCcsXG4gICAgICAgIDI6ICct0YfQuCcsXG4gICAgICAgIDM6ICct0YfSrycsXG4gICAgICAgIDQ6ICct0YfSrycsXG4gICAgICAgIDU6ICct0YfQuCcsXG4gICAgICAgIDY6ICct0YfRiycsXG4gICAgICAgIDc6ICct0YfQuCcsXG4gICAgICAgIDg6ICct0YfQuCcsXG4gICAgICAgIDk6ICct0YfRgycsXG4gICAgICAgIDEwOiAnLdGH0YMnLFxuICAgICAgICAyMDogJy3Rh9GLJyxcbiAgICAgICAgMzA6ICct0YfRgycsXG4gICAgICAgIDQwOiAnLdGH0YsnLFxuICAgICAgICA1MDogJy3Rh9KvJyxcbiAgICAgICAgNjA6ICct0YfRiycsXG4gICAgICAgIDcwOiAnLdGH0LgnLFxuICAgICAgICA4MDogJy3Rh9C4JyxcbiAgICAgICAgOTA6ICct0YfRgycsXG4gICAgICAgIDEwMDogJy3Rh9KvJyxcbiAgICB9O1xuXG4gICAgdmFyIGt5ID0gbW9tZW50LmRlZmluZUxvY2FsZSgna3knLCB7XG4gICAgICAgIG1vbnRoczogJ9GP0L3QstCw0YDRjF/RhNC10LLRgNCw0LvRjF/QvNCw0YDRgl/QsNC/0YDQtdC70Yxf0LzQsNC5X9C40Y7QvdGMX9C40Y7Qu9GMX9Cw0LLQs9GD0YHRgl/RgdC10L3RgtGP0LHRgNGMX9C+0LrRgtGP0LHRgNGMX9C90L7Rj9Cx0YDRjF/QtNC10LrQsNCx0YDRjCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICfRj9C90LJf0YTQtdCyX9C80LDRgNGCX9Cw0L/RgF/QvNCw0Llf0LjRjtC90Yxf0LjRjtC70Yxf0LDQstCzX9GB0LXQvV/QvtC60YJf0L3QvtGPX9C00LXQuicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXM6ICfQltC10LrRiNC10LzQsdC4X9CU0q/QudGI06nQvNCx0q9f0KjQtdC50YjQtdC80LHQuF/QqNCw0YDRiNC10LzQsdC4X9CR0LXQudGI0LXQvNCx0Lhf0JbRg9C80LBf0JjRiNC10LzQsdC4Jy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn0JbQtdC6X9CU0q/QuV/QqNC10Llf0KjQsNGAX9CR0LXQuV/QltGD0Lxf0JjRiNC1Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ9CW0Lpf0JTQuV/QqNC5X9Co0YBf0JHQuV/QltC8X9CY0YgnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb0JHSr9Cz0q/QvSDRgdCw0LDRgl0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vQrdGA0YLQtdKjINGB0LDQsNGCXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW9GB0LDQsNGCXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW9Ca0LXRh9GN0Y0g0YHQsNCw0YJdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW9Oo0YLQutOp0L0g0LDQv9GC0LDQvdGL0L1dIGRkZGQgW9C60q/QvdKvXSBb0YHQsNCw0YJdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMg0LjRh9C40L3QtNC1JyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyDQvNGD0YDRg9C9JyxcbiAgICAgICAgICAgIHM6ICfQsdC40YDQvdC10YfQtSDRgdC10LrRg9C90LQnLFxuICAgICAgICAgICAgc3M6ICclZCDRgdC10LrRg9C90LQnLFxuICAgICAgICAgICAgbTogJ9Cx0LjRgCDQvNKv0L3TqdGCJyxcbiAgICAgICAgICAgIG1tOiAnJWQg0LzSr9C906nRgicsXG4gICAgICAgICAgICBoOiAn0LHQuNGAINGB0LDQsNGCJyxcbiAgICAgICAgICAgIGhoOiAnJWQg0YHQsNCw0YInLFxuICAgICAgICAgICAgZDogJ9Cx0LjRgCDQutKv0L0nLFxuICAgICAgICAgICAgZGQ6ICclZCDQutKv0L0nLFxuICAgICAgICAgICAgTTogJ9Cx0LjRgCDQsNC5JyxcbiAgICAgICAgICAgIE1NOiAnJWQg0LDQuScsXG4gICAgICAgICAgICB5OiAn0LHQuNGAINC20YvQuycsXG4gICAgICAgICAgICB5eTogJyVkINC20YvQuycsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfS0o0YfQuHzRh9GLfNGH0q980YfRgykvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICB2YXIgYSA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgICAgIGIgPSBudW1iZXIgPj0gMTAwID8gMTAwIDogbnVsbDtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAoc3VmZml4ZXNbbnVtYmVyXSB8fCBzdWZmaXhlc1thXSB8fCBzdWZmaXhlc1tiXSk7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDcsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDd0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBreTtcblxufSkpKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/ky.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/lb.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/lb.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Luxembourgish [lb]\n//! author : mweimerskirch : https://github.com/mweimerskirch\n//! author : David Raison : https://github.com/kwisatz\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            m: ['eng Minutt', 'enger Minutt'],\n            h: ['eng Stonn', 'enger Stonn'],\n            d: ['een Dag', 'engem Dag'],\n            M: ['ee Mount', 'engem Mount'],\n            y: ['ee Joer', 'engem Joer'],\n        };\n        return withoutSuffix ? format[key][0] : format[key][1];\n    }\n    function processFutureTime(string) {\n        var number = string.substr(0, string.indexOf(' '));\n        if (eifelerRegelAppliesToNumber(number)) {\n            return 'a ' + string;\n        }\n        return 'an ' + string;\n    }\n    function processPastTime(string) {\n        var number = string.substr(0, string.indexOf(' '));\n        if (eifelerRegelAppliesToNumber(number)) {\n            return 'viru ' + string;\n        }\n        return 'virun ' + string;\n    }\n    /**\n     * Returns true if the word before the given number loses the '-n' ending.\n     * e.g. 'an 10 Deeg' but 'a 5 Deeg'\n     *\n     * @param number {integer}\n     * @returns {boolean}\n     */\n    function eifelerRegelAppliesToNumber(number) {\n        number = parseInt(number, 10);\n        if (isNaN(number)) {\n            return false;\n        }\n        if (number < 0) {\n            // Negative Number --> always true\n            return true;\n        } else if (number < 10) {\n            // Only 1 digit\n            if (4 <= number && number <= 7) {\n                return true;\n            }\n            return false;\n        } else if (number < 100) {\n            // 2 digits\n            var lastDigit = number % 10,\n                firstDigit = number / 10;\n            if (lastDigit === 0) {\n                return eifelerRegelAppliesToNumber(firstDigit);\n            }\n            return eifelerRegelAppliesToNumber(lastDigit);\n        } else if (number < 10000) {\n            // 3 or 4 digits --> recursively check first digit\n            while (number >= 10) {\n                number = number / 10;\n            }\n            return eifelerRegelAppliesToNumber(number);\n        } else {\n            // Anything larger than 4 digits: recursively check first n-3 digits\n            number = number / 1000;\n            return eifelerRegelAppliesToNumber(number);\n        }\n    }\n\n    var lb = moment.defineLocale('lb', {\n        months: 'Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember'.split(\n            '_'\n        ),\n        monthsShort:\n            'Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays:\n            'Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg'.split(\n                '_'\n            ),\n        weekdaysShort: 'So._Mé._Dë._Më._Do._Fr._Sa.'.split('_'),\n        weekdaysMin: 'So_Mé_Dë_Më_Do_Fr_Sa'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm [Auer]',\n            LTS: 'H:mm:ss [Auer]',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm [Auer]',\n            LLLL: 'dddd, D. MMMM YYYY H:mm [Auer]',\n        },\n        calendar: {\n            sameDay: '[Haut um] LT',\n            sameElse: 'L',\n            nextDay: '[Muer um] LT',\n            nextWeek: 'dddd [um] LT',\n            lastDay: '[Gëschter um] LT',\n            lastWeek: function () {\n                // Different date string for 'Dënschdeg' (Tuesday) and 'Donneschdeg' (Thursday) due to phonological rule\n                switch (this.day()) {\n                    case 2:\n                    case 4:\n                        return '[Leschten] dddd [um] LT';\n                    default:\n                        return '[Leschte] dddd [um] LT';\n                }\n            },\n        },\n        relativeTime: {\n            future: processFutureTime,\n            past: processPastTime,\n            s: 'e puer Sekonnen',\n            ss: '%d Sekonnen',\n            m: processRelativeTime,\n            mm: '%d Minutten',\n            h: processRelativeTime,\n            hh: '%d Stonnen',\n            d: processRelativeTime,\n            dd: '%d Deeg',\n            M: processRelativeTime,\n            MM: '%d Méint',\n            y: processRelativeTime,\n            yy: '%d Joer',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return lb;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9sYi5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsa0RBQVc7QUFDckUsR0FBRyxDQUNzQjtBQUN6QixDQUFDLDRCQUE0Qjs7QUFFN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEIsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2xiLmpzP2M3ZjUiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEx1eGVtYm91cmdpc2ggW2xiXVxuLy8hIGF1dGhvciA6IG13ZWltZXJza2lyY2ggOiBodHRwczovL2dpdGh1Yi5jb20vbXdlaW1lcnNraXJjaFxuLy8hIGF1dGhvciA6IERhdmlkIFJhaXNvbiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9rd2lzYXR6XG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICBmdW5jdGlvbiBwcm9jZXNzUmVsYXRpdmVUaW1lKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5LCBpc0Z1dHVyZSkge1xuICAgICAgICB2YXIgZm9ybWF0ID0ge1xuICAgICAgICAgICAgbTogWydlbmcgTWludXR0JywgJ2VuZ2VyIE1pbnV0dCddLFxuICAgICAgICAgICAgaDogWydlbmcgU3Rvbm4nLCAnZW5nZXIgU3Rvbm4nXSxcbiAgICAgICAgICAgIGQ6IFsnZWVuIERhZycsICdlbmdlbSBEYWcnXSxcbiAgICAgICAgICAgIE06IFsnZWUgTW91bnQnLCAnZW5nZW0gTW91bnQnXSxcbiAgICAgICAgICAgIHk6IFsnZWUgSm9lcicsICdlbmdlbSBKb2VyJ10sXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gZm9ybWF0W2tleV1bMF0gOiBmb3JtYXRba2V5XVsxXTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcHJvY2Vzc0Z1dHVyZVRpbWUoc3RyaW5nKSB7XG4gICAgICAgIHZhciBudW1iZXIgPSBzdHJpbmcuc3Vic3RyKDAsIHN0cmluZy5pbmRleE9mKCcgJykpO1xuICAgICAgICBpZiAoZWlmZWxlclJlZ2VsQXBwbGllc1RvTnVtYmVyKG51bWJlcikpIHtcbiAgICAgICAgICAgIHJldHVybiAnYSAnICsgc3RyaW5nO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnYW4gJyArIHN0cmluZztcbiAgICB9XG4gICAgZnVuY3Rpb24gcHJvY2Vzc1Bhc3RUaW1lKHN0cmluZykge1xuICAgICAgICB2YXIgbnVtYmVyID0gc3RyaW5nLnN1YnN0cigwLCBzdHJpbmcuaW5kZXhPZignICcpKTtcbiAgICAgICAgaWYgKGVpZmVsZXJSZWdlbEFwcGxpZXNUb051bWJlcihudW1iZXIpKSB7XG4gICAgICAgICAgICByZXR1cm4gJ3ZpcnUgJyArIHN0cmluZztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJ3ZpcnVuICcgKyBzdHJpbmc7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgd29yZCBiZWZvcmUgdGhlIGdpdmVuIG51bWJlciBsb3NlcyB0aGUgJy1uJyBlbmRpbmcuXG4gICAgICogZS5nLiAnYW4gMTAgRGVlZycgYnV0ICdhIDUgRGVlZydcbiAgICAgKlxuICAgICAqIEBwYXJhbSBudW1iZXIge2ludGVnZXJ9XG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICovXG4gICAgZnVuY3Rpb24gZWlmZWxlclJlZ2VsQXBwbGllc1RvTnVtYmVyKG51bWJlcikge1xuICAgICAgICBudW1iZXIgPSBwYXJzZUludChudW1iZXIsIDEwKTtcbiAgICAgICAgaWYgKGlzTmFOKG51bWJlcikpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobnVtYmVyIDwgMCkge1xuICAgICAgICAgICAgLy8gTmVnYXRpdmUgTnVtYmVyIC0tPiBhbHdheXMgdHJ1ZVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAobnVtYmVyIDwgMTApIHtcbiAgICAgICAgICAgIC8vIE9ubHkgMSBkaWdpdFxuICAgICAgICAgICAgaWYgKDQgPD0gbnVtYmVyICYmIG51bWJlciA8PSA3KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0gZWxzZSBpZiAobnVtYmVyIDwgMTAwKSB7XG4gICAgICAgICAgICAvLyAyIGRpZ2l0c1xuICAgICAgICAgICAgdmFyIGxhc3REaWdpdCA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgICAgIGZpcnN0RGlnaXQgPSBudW1iZXIgLyAxMDtcbiAgICAgICAgICAgIGlmIChsYXN0RGlnaXQgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZWlmZWxlclJlZ2VsQXBwbGllc1RvTnVtYmVyKGZpcnN0RGlnaXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGVpZmVsZXJSZWdlbEFwcGxpZXNUb051bWJlcihsYXN0RGlnaXQpO1xuICAgICAgICB9IGVsc2UgaWYgKG51bWJlciA8IDEwMDAwKSB7XG4gICAgICAgICAgICAvLyAzIG9yIDQgZGlnaXRzIC0tPiByZWN1cnNpdmVseSBjaGVjayBmaXJzdCBkaWdpdFxuICAgICAgICAgICAgd2hpbGUgKG51bWJlciA+PSAxMCkge1xuICAgICAgICAgICAgICAgIG51bWJlciA9IG51bWJlciAvIDEwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGVpZmVsZXJSZWdlbEFwcGxpZXNUb051bWJlcihudW1iZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gQW55dGhpbmcgbGFyZ2VyIHRoYW4gNCBkaWdpdHM6IHJlY3Vyc2l2ZWx5IGNoZWNrIGZpcnN0IG4tMyBkaWdpdHNcbiAgICAgICAgICAgIG51bWJlciA9IG51bWJlciAvIDEwMDA7XG4gICAgICAgICAgICByZXR1cm4gZWlmZWxlclJlZ2VsQXBwbGllc1RvTnVtYmVyKG51bWJlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgbGIgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdsYicsIHtcbiAgICAgICAgbW9udGhzOiAnSmFudWFyX0ZlYnJ1YXJfTcOkZXJ6X0FicsOrbGxfTWVlX0p1bmlfSnVsaV9BdWd1c3RfU2VwdGVtYmVyX09rdG9iZXJfTm92ZW1iZXJfRGV6ZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ0phbi5fRmVici5fTXJ6Ll9BYnIuX01lZV9KdW4uX0p1bC5fQXVnLl9TZXB0Ll9Pa3QuX05vdi5fRGV6Licuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czpcbiAgICAgICAgICAgICdTb25uZGVnX03DqWluZGVnX0TDq25zY2hkZWdfTcOrdHR3b2NoX0Rvbm5lc2NoZGVnX0ZyZWlkZWdfU2Ftc2NoZGVnJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdTby5fTcOpLl9Ew6suX03Dqy5fRG8uX0ZyLl9TYS4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnU29fTcOpX0TDq19Nw6tfRG9fRnJfU2EnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSDptbSBbQXVlcl0nLFxuICAgICAgICAgICAgTFRTOiAnSDptbTpzcyBbQXVlcl0nLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdELiBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRC4gTU1NTSBZWVlZIEg6bW0gW0F1ZXJdJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBELiBNTU1NIFlZWVkgSDptbSBbQXVlcl0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tIYXV0IHVtXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tNdWVyIHVtXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW3VtXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW0fDq3NjaHRlciB1bV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAvLyBEaWZmZXJlbnQgZGF0ZSBzdHJpbmcgZm9yICdEw6tuc2NoZGVnJyAoVHVlc2RheSkgYW5kICdEb25uZXNjaGRlZycgKFRodXJzZGF5KSBkdWUgdG8gcGhvbm9sb2dpY2FsIHJ1bGVcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1tMZXNjaHRlbl0gZGRkZCBbdW1dIExUJztcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW0xlc2NodGVdIGRkZGQgW3VtXSBMVCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6IHByb2Nlc3NGdXR1cmVUaW1lLFxuICAgICAgICAgICAgcGFzdDogcHJvY2Vzc1Bhc3RUaW1lLFxuICAgICAgICAgICAgczogJ2UgcHVlciBTZWtvbm5lbicsXG4gICAgICAgICAgICBzczogJyVkIFNla29ubmVuJyxcbiAgICAgICAgICAgIG06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBtbTogJyVkIE1pbnV0dGVuJyxcbiAgICAgICAgICAgIGg6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBoaDogJyVkIFN0b25uZW4nLFxuICAgICAgICAgICAgZDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGRkOiAnJWQgRGVlZycsXG4gICAgICAgICAgICBNOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgTU06ICclZCBNw6lpbnQnLFxuICAgICAgICAgICAgeTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHl5OiAnJWQgSm9lcicsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWw6ICclZC4nLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbGI7XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/lb.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/lo.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/lo.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Lao [lo]\n//! author : Ryan Hart : https://github.com/ryanhart2\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var lo = moment.defineLocale('lo', {\n        months: 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split(\n            '_'\n        ),\n        monthsShort:\n            'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split(\n                '_'\n            ),\n        weekdays: 'ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),\n        weekdaysShort: 'ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),\n        weekdaysMin: 'ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'ວັນdddd D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /ຕອນເຊົ້າ|ຕອນແລງ/,\n        isPM: function (input) {\n            return input === 'ຕອນແລງ';\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ຕອນເຊົ້າ';\n            } else {\n                return 'ຕອນແລງ';\n            }\n        },\n        calendar: {\n            sameDay: '[ມື້ນີ້ເວລາ] LT',\n            nextDay: '[ມື້ອື່ນເວລາ] LT',\n            nextWeek: '[ວັນ]dddd[ໜ້າເວລາ] LT',\n            lastDay: '[ມື້ວານນີ້ເວລາ] LT',\n            lastWeek: '[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'ອີກ %s',\n            past: '%sຜ່ານມາ',\n            s: 'ບໍ່ເທົ່າໃດວິນາທີ',\n            ss: '%d ວິນາທີ',\n            m: '1 ນາທີ',\n            mm: '%d ນາທີ',\n            h: '1 ຊົ່ວໂມງ',\n            hh: '%d ຊົ່ວໂມງ',\n            d: '1 ມື້',\n            dd: '%d ມື້',\n            M: '1 ເດືອນ',\n            MM: '%d ເດືອນ',\n            y: '1 ປີ',\n            yy: '%d ປີ',\n        },\n        dayOfMonthOrdinalParse: /(ທີ່)\\d{1,2}/,\n        ordinal: function (number) {\n            return 'ທີ່' + number;\n        },\n    });\n\n    return lo;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9sby5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QseUNBQXlDLElBQUk7QUFDN0M7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9sby5qcz83YTA2Il0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBMYW8gW2xvXVxuLy8hIGF1dGhvciA6IFJ5YW4gSGFydCA6IGh0dHBzOi8vZ2l0aHViLmNvbS9yeWFuaGFydDJcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBsbyA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2xvJywge1xuICAgICAgICBtb250aHM6ICfguqHgurHguofguoHguq3guplf4LqB4Lq44Lqh4Lqe4LqyX+C6oeC6teC6meC6sl/gu4DguqHguqrgurJf4Lqe4Lq24LqU4Lqq4Lqw4Lqe4LqyX+C6oeC6tOC6luC6uOC6meC6sl/guoHgu43guqXgurDguoHgurvgupRf4Lqq4Lq04LqH4Lqr4LqyX+C6geC6seC6meC6jeC6sl/gupXgurjguqXgurJf4Lqe4Lqw4LqI4Lq04LqBX+C6l+C6seC6meC6p+C6sicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAn4Lqh4Lqx4LqH4LqB4Lqt4LqZX+C6geC6uOC6oeC6nuC6sl/guqHgurXgupngurJf4LuA4Lqh4Lqq4LqyX+C6nuC6tuC6lOC6quC6sOC6nuC6sl/guqHgurTgupbgurjgupngurJf4LqB4LuN4Lql4Lqw4LqB4Lq74LqUX+C6quC6tOC6h+C6q+C6sl/guoHgurHgupnguo3gurJf4LqV4Lq44Lql4LqyX+C6nuC6sOC6iOC6tOC6gV/gupfgurHgupnguqfgurInLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXM6ICfguq3gurLgupfgurTgupRf4LqI4Lqx4LqZX+C6reC6seC6h+C6hOC6suC6mV/gup7gurjgupRf4Lqe4Lqw4Lqr4Lqx4LqUX+C6quC6uOC6gV/gu4DguqrgurvgurInLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfgupfgurTgupRf4LqI4Lqx4LqZX+C6reC6seC6h+C6hOC6suC6mV/gup7gurjgupRf4Lqe4Lqw4Lqr4Lqx4LqUX+C6quC6uOC6gV/gu4DguqrgurvgurInLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn4LqXX+C6iF/guq3guoRf4LqeX+C6nuC6q1/guqrguoFf4LqqJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ+C6p+C6seC6mWRkZGQgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv4LqV4Lqt4LqZ4LuA4LqK4Lq74LuJ4LqyfOC6leC6reC6meC7geC6peC6hy8sXG4gICAgICAgIGlzUE06IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0ID09PSAn4LqV4Lqt4LqZ4LuB4Lql4LqHJztcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+C6leC6reC6meC7gOC6iuC6u+C7ieC6sic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4LqV4Lqt4LqZ4LuB4Lql4LqHJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb4Lqh4Lq34LuJ4LqZ4Lq14LuJ4LuA4Lqn4Lql4LqyXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW+C6oeC6t+C7ieC6reC6t+C7iOC6meC7gOC6p+C6peC6sl0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdb4Lqn4Lqx4LqZXWRkZGRb4Luc4LuJ4Lqy4LuA4Lqn4Lql4LqyXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW+C6oeC6t+C7ieC6p+C6suC6meC6meC6teC7ieC7gOC6p+C6peC6sl0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdb4Lqn4Lqx4LqZXWRkZGRb4LuB4Lql4LuJ4Lqn4LqZ4Lq14LuJ4LuA4Lqn4Lql4LqyXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ+C6reC6teC6gSAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXPgupzgu4jgurLgupnguqHgurInLFxuICAgICAgICAgICAgczogJ+C6muC7jeC7iOC7gOC6l+C6u+C7iOC6suC7g+C6lOC6p+C6tOC6meC6suC6l+C6tScsXG4gICAgICAgICAgICBzczogJyVkIOC6p+C6tOC6meC6suC6l+C6tScsXG4gICAgICAgICAgICBtOiAnMSDgupngurLgupfgurUnLFxuICAgICAgICAgICAgbW06ICclZCDgupngurLgupfgurUnLFxuICAgICAgICAgICAgaDogJzEg4LqK4Lq74LuI4Lqn4LuC4Lqh4LqHJyxcbiAgICAgICAgICAgIGhoOiAnJWQg4LqK4Lq74LuI4Lqn4LuC4Lqh4LqHJyxcbiAgICAgICAgICAgIGQ6ICcxIOC6oeC6t+C7iScsXG4gICAgICAgICAgICBkZDogJyVkIOC6oeC6t+C7iScsXG4gICAgICAgICAgICBNOiAnMSDgu4DgupTgurfguq3gupknLFxuICAgICAgICAgICAgTU06ICclZCDgu4DgupTgurfguq3gupknLFxuICAgICAgICAgICAgeTogJzEg4Lqb4Lq1JyxcbiAgICAgICAgICAgIHl5OiAnJWQg4Lqb4Lq1JyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogLyjgupfgurXgu4gpXFxkezEsMn0vLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gJ+C6l+C6teC7iCcgKyBudW1iZXI7XG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbG87XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/lo.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/lt.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/lt.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Lithuanian [lt]\n//! author : Mindaugas Mozūras : https://github.com/mmozuras\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var units = {\n        ss: 'sekundė_sekundžių_sekundes',\n        m: 'minutė_minutės_minutę',\n        mm: 'minutės_minučių_minutes',\n        h: 'valanda_valandos_valandą',\n        hh: 'valandos_valandų_valandas',\n        d: 'diena_dienos_dieną',\n        dd: 'dienos_dienų_dienas',\n        M: 'mėnuo_mėnesio_mėnesį',\n        MM: 'mėnesiai_mėnesių_mėnesius',\n        y: 'metai_metų_metus',\n        yy: 'metai_metų_metus',\n    };\n    function translateSeconds(number, withoutSuffix, key, isFuture) {\n        if (withoutSuffix) {\n            return 'kelios sekundės';\n        } else {\n            return isFuture ? 'kelių sekundžių' : 'kelias sekundes';\n        }\n    }\n    function translateSingular(number, withoutSuffix, key, isFuture) {\n        return withoutSuffix\n            ? forms(key)[0]\n            : isFuture\n            ? forms(key)[1]\n            : forms(key)[2];\n    }\n    function special(number) {\n        return number % 10 === 0 || (number > 10 && number < 20);\n    }\n    function forms(key) {\n        return units[key].split('_');\n    }\n    function translate(number, withoutSuffix, key, isFuture) {\n        var result = number + ' ';\n        if (number === 1) {\n            return (\n                result + translateSingular(number, withoutSuffix, key[0], isFuture)\n            );\n        } else if (withoutSuffix) {\n            return result + (special(number) ? forms(key)[1] : forms(key)[0]);\n        } else {\n            if (isFuture) {\n                return result + forms(key)[1];\n            } else {\n                return result + (special(number) ? forms(key)[1] : forms(key)[2]);\n            }\n        }\n    }\n    var lt = moment.defineLocale('lt', {\n        months: {\n            format: 'sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio'.split(\n                '_'\n            ),\n            standalone:\n                'sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis'.split(\n                    '_'\n                ),\n            isFormat: /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?|MMMM?(\\[[^\\[\\]]*\\]|\\s)+D[oD]?/,\n        },\n        monthsShort: 'sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd'.split('_'),\n        weekdays: {\n            format: 'sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį'.split(\n                '_'\n            ),\n            standalone:\n                'sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis'.split(\n                    '_'\n                ),\n            isFormat: /dddd HH:mm/,\n        },\n        weekdaysShort: 'Sek_Pir_Ant_Tre_Ket_Pen_Šeš'.split('_'),\n        weekdaysMin: 'S_P_A_T_K_Pn_Š'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY-MM-DD',\n            LL: 'YYYY [m.] MMMM D [d.]',\n            LLL: 'YYYY [m.] MMMM D [d.], HH:mm [val.]',\n            LLLL: 'YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]',\n            l: 'YYYY-MM-DD',\n            ll: 'YYYY [m.] MMMM D [d.]',\n            lll: 'YYYY [m.] MMMM D [d.], HH:mm [val.]',\n            llll: 'YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]',\n        },\n        calendar: {\n            sameDay: '[Šiandien] LT',\n            nextDay: '[Rytoj] LT',\n            nextWeek: 'dddd LT',\n            lastDay: '[Vakar] LT',\n            lastWeek: '[Praėjusį] dddd LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'po %s',\n            past: 'prieš %s',\n            s: translateSeconds,\n            ss: translate,\n            m: translateSingular,\n            mm: translate,\n            h: translateSingular,\n            hh: translate,\n            d: translateSingular,\n            dd: translate,\n            M: translateSingular,\n            MM: translate,\n            y: translateSingular,\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-oji/,\n        ordinal: function (number) {\n            return number + '-oji';\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return lt;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9sdC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxvQ0FBb0MsSUFBSTtBQUN4QztBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9sdC5qcz83MTkwIl0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBMaXRodWFuaWFuIFtsdF1cbi8vISBhdXRob3IgOiBNaW5kYXVnYXMgTW96xatyYXMgOiBodHRwczovL2dpdGh1Yi5jb20vbW1venVyYXNcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciB1bml0cyA9IHtcbiAgICAgICAgc3M6ICdzZWt1bmTEl19zZWt1bmTFvmnFs19zZWt1bmRlcycsXG4gICAgICAgIG06ICdtaW51dMSXX21pbnV0xJdzX21pbnV0xJknLFxuICAgICAgICBtbTogJ21pbnV0xJdzX21pbnXEjWnFs19taW51dGVzJyxcbiAgICAgICAgaDogJ3ZhbGFuZGFfdmFsYW5kb3NfdmFsYW5kxIUnLFxuICAgICAgICBoaDogJ3ZhbGFuZG9zX3ZhbGFuZMWzX3ZhbGFuZGFzJyxcbiAgICAgICAgZDogJ2RpZW5hX2RpZW5vc19kaWVuxIUnLFxuICAgICAgICBkZDogJ2RpZW5vc19kaWVuxbNfZGllbmFzJyxcbiAgICAgICAgTTogJ23El251b19txJduZXNpb19txJduZXPErycsXG4gICAgICAgIE1NOiAnbcSXbmVzaWFpX23El25lc2nFs19txJduZXNpdXMnLFxuICAgICAgICB5OiAnbWV0YWlfbWV0xbNfbWV0dXMnLFxuICAgICAgICB5eTogJ21ldGFpX21ldMWzX21ldHVzJyxcbiAgICB9O1xuICAgIGZ1bmN0aW9uIHRyYW5zbGF0ZVNlY29uZHMobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXksIGlzRnV0dXJlKSB7XG4gICAgICAgIGlmICh3aXRob3V0U3VmZml4KSB7XG4gICAgICAgICAgICByZXR1cm4gJ2tlbGlvcyBzZWt1bmTEl3MnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGlzRnV0dXJlID8gJ2tlbGnFsyBzZWt1bmTFvmnFsycgOiAna2VsaWFzIHNla3VuZGVzJztcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiB0cmFuc2xhdGVTaW5ndWxhcihudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSwgaXNGdXR1cmUpIHtcbiAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXhcbiAgICAgICAgICAgID8gZm9ybXMoa2V5KVswXVxuICAgICAgICAgICAgOiBpc0Z1dHVyZVxuICAgICAgICAgICAgPyBmb3JtcyhrZXkpWzFdXG4gICAgICAgICAgICA6IGZvcm1zKGtleSlbMl07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNwZWNpYWwobnVtYmVyKSB7XG4gICAgICAgIHJldHVybiBudW1iZXIgJSAxMCA9PT0gMCB8fCAobnVtYmVyID4gMTAgJiYgbnVtYmVyIDwgMjApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBmb3JtcyhrZXkpIHtcbiAgICAgICAgcmV0dXJuIHVuaXRzW2tleV0uc3BsaXQoJ18nKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdHJhbnNsYXRlKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5LCBpc0Z1dHVyZSkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gbnVtYmVyICsgJyAnO1xuICAgICAgICBpZiAobnVtYmVyID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIHJlc3VsdCArIHRyYW5zbGF0ZVNpbmd1bGFyKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5WzBdLCBpc0Z1dHVyZSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAod2l0aG91dFN1ZmZpeCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIChzcGVjaWFsKG51bWJlcikgPyBmb3JtcyhrZXkpWzFdIDogZm9ybXMoa2V5KVswXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoaXNGdXR1cmUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgZm9ybXMoa2V5KVsxXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIChzcGVjaWFsKG51bWJlcikgPyBmb3JtcyhrZXkpWzFdIDogZm9ybXMoa2V5KVsyXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmFyIGx0ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnbHQnLCB7XG4gICAgICAgIG1vbnRoczoge1xuICAgICAgICAgICAgZm9ybWF0OiAnc2F1c2lvX3Zhc2FyaW9fa292b19iYWxhbmTFvmlvX2dlZ3XFvsSXc19iaXLFvmVsaW9fbGllcG9zX3J1Z3BqxavEjWlvX3J1Z3PEl2pvX3NwYWxpb19sYXBrcmnEjWlvX2dydW9kxb5pbycuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgc3RhbmRhbG9uZTpcbiAgICAgICAgICAgICAgICAnc2F1c2lzX3Zhc2FyaXNfa292YXNfYmFsYW5kaXNfZ2VndcW+xJdfYmlyxb5lbGlzX2xpZXBhX3J1Z3Bqxat0aXNfcnVnc8SXamlzX3NwYWxpc19sYXBrcml0aXNfZ3J1b2Rpcycuc3BsaXQoXG4gICAgICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICBpc0Zvcm1hdDogL0Rbb0RdPyhcXFtbXlxcW1xcXV0qXFxdfFxccykrTU1NTT98TU1NTT8oXFxbW15cXFtcXF1dKlxcXXxcXHMpK0Rbb0RdPy8sXG4gICAgICAgIH0sXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnc2F1X3Zhc19rb3ZfYmFsX2dlZ19iaXJfbGllX3JncF9yZ3Nfc3BhX2xhcF9ncmQnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiB7XG4gICAgICAgICAgICBmb3JtYXQ6ICdzZWttYWRpZW7Er19waXJtYWRpZW7Er19hbnRyYWRpZW7Er190cmXEjWlhZGllbsSvX2tldHZpcnRhZGllbsSvX3Blbmt0YWRpZW7Er1/FoWXFoXRhZGllbsSvJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBzdGFuZGFsb25lOlxuICAgICAgICAgICAgICAgICdzZWttYWRpZW5pc19waXJtYWRpZW5pc19hbnRyYWRpZW5pc190cmXEjWlhZGllbmlzX2tldHZpcnRhZGllbmlzX3Blbmt0YWRpZW5pc1/FoWXFoXRhZGllbmlzJy5zcGxpdChcbiAgICAgICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGlzRm9ybWF0OiAvZGRkZCBISDptbS8sXG4gICAgICAgIH0sXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdTZWtfUGlyX0FudF9UcmVfS2V0X1Blbl/FoGXFoScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdTX1BfQV9UX0tfUG5fxaAnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ1lZWVktTU0tREQnLFxuICAgICAgICAgICAgTEw6ICdZWVlZIFttLl0gTU1NTSBEIFtkLl0nLFxuICAgICAgICAgICAgTExMOiAnWVlZWSBbbS5dIE1NTU0gRCBbZC5dLCBISDptbSBbdmFsLl0nLFxuICAgICAgICAgICAgTExMTDogJ1lZWVkgW20uXSBNTU1NIEQgW2QuXSwgZGRkZCwgSEg6bW0gW3ZhbC5dJyxcbiAgICAgICAgICAgIGw6ICdZWVlZLU1NLUREJyxcbiAgICAgICAgICAgIGxsOiAnWVlZWSBbbS5dIE1NTU0gRCBbZC5dJyxcbiAgICAgICAgICAgIGxsbDogJ1lZWVkgW20uXSBNTU1NIEQgW2QuXSwgSEg6bW0gW3ZhbC5dJyxcbiAgICAgICAgICAgIGxsbGw6ICdZWVlZIFttLl0gTU1NTSBEIFtkLl0sIGRkZCwgSEg6bW0gW3ZhbC5dJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbxaBpYW5kaWVuXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW1J5dG9qXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tWYWthcl0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbUHJhxJdqdXPEr10gZGRkZCBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ3BvICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICdwcmllxaEgJXMnLFxuICAgICAgICAgICAgczogdHJhbnNsYXRlU2Vjb25kcyxcbiAgICAgICAgICAgIHNzOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBtOiB0cmFuc2xhdGVTaW5ndWxhcixcbiAgICAgICAgICAgIG1tOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBoOiB0cmFuc2xhdGVTaW5ndWxhcixcbiAgICAgICAgICAgIGhoOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBkOiB0cmFuc2xhdGVTaW5ndWxhcixcbiAgICAgICAgICAgIGRkOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBNOiB0cmFuc2xhdGVTaW5ndWxhcixcbiAgICAgICAgICAgIE1NOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICB5OiB0cmFuc2xhdGVTaW5ndWxhcixcbiAgICAgICAgICAgIHl5OiB0cmFuc2xhdGUsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfS1vamkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy1vamknO1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbHQ7XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/lt.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/lv.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/lv.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Latvian [lv]\n//! author : Kristaps Karlsons : https://github.com/skakri\n//! author : Jānis Elmeris : https://github.com/JanisE\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var units = {\n        ss: 'sekundes_sekundēm_sekunde_sekundes'.split('_'),\n        m: 'minūtes_minūtēm_minūte_minūtes'.split('_'),\n        mm: 'minūtes_minūtēm_minūte_minūtes'.split('_'),\n        h: 'stundas_stundām_stunda_stundas'.split('_'),\n        hh: 'stundas_stundām_stunda_stundas'.split('_'),\n        d: 'dienas_dienām_diena_dienas'.split('_'),\n        dd: 'dienas_dienām_diena_dienas'.split('_'),\n        M: 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),\n        MM: 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),\n        y: 'gada_gadiem_gads_gadi'.split('_'),\n        yy: 'gada_gadiem_gads_gadi'.split('_'),\n    };\n    /**\n     * @param withoutSuffix boolean true = a length of time; false = before/after a period of time.\n     */\n    function format(forms, number, withoutSuffix) {\n        if (withoutSuffix) {\n            // E.g. \"21 minūte\", \"3 minūtes\".\n            return number % 10 === 1 && number % 100 !== 11 ? forms[2] : forms[3];\n        } else {\n            // E.g. \"21 minūtes\" as in \"pēc 21 minūtes\".\n            // E.g. \"3 minūtēm\" as in \"pēc 3 minūtēm\".\n            return number % 10 === 1 && number % 100 !== 11 ? forms[0] : forms[1];\n        }\n    }\n    function relativeTimeWithPlural(number, withoutSuffix, key) {\n        return number + ' ' + format(units[key], number, withoutSuffix);\n    }\n    function relativeTimeWithSingular(number, withoutSuffix, key) {\n        return format(units[key], number, withoutSuffix);\n    }\n    function relativeSeconds(number, withoutSuffix) {\n        return withoutSuffix ? 'dažas sekundes' : 'dažām sekundēm';\n    }\n\n    var lv = moment.defineLocale('lv', {\n        months: 'janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris'.split(\n            '_'\n        ),\n        monthsShort: 'jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec'.split('_'),\n        weekdays:\n            'svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena'.split(\n                '_'\n            ),\n        weekdaysShort: 'Sv_P_O_T_C_Pk_S'.split('_'),\n        weekdaysMin: 'Sv_P_O_T_C_Pk_S'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY.',\n            LL: 'YYYY. [gada] D. MMMM',\n            LLL: 'YYYY. [gada] D. MMMM, HH:mm',\n            LLLL: 'YYYY. [gada] D. MMMM, dddd, HH:mm',\n        },\n        calendar: {\n            sameDay: '[Šodien pulksten] LT',\n            nextDay: '[Rīt pulksten] LT',\n            nextWeek: 'dddd [pulksten] LT',\n            lastDay: '[Vakar pulksten] LT',\n            lastWeek: '[Pagājušā] dddd [pulksten] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'pēc %s',\n            past: 'pirms %s',\n            s: relativeSeconds,\n            ss: relativeTimeWithPlural,\n            m: relativeTimeWithSingular,\n            mm: relativeTimeWithPlural,\n            h: relativeTimeWithSingular,\n            hh: relativeTimeWithPlural,\n            d: relativeTimeWithSingular,\n            dd: relativeTimeWithPlural,\n            M: relativeTimeWithSingular,\n            MM: relativeTimeWithPlural,\n            y: relativeTimeWithSingular,\n            yy: relativeTimeWithPlural,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return lv;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9sdi5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsa0RBQVc7QUFDckUsR0FBRyxDQUNzQjtBQUN6QixDQUFDLDRCQUE0Qjs7QUFFN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZEQUE2RDtBQUM3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2x2LmpzPzE2NGQiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IExhdHZpYW4gW2x2XVxuLy8hIGF1dGhvciA6IEtyaXN0YXBzIEthcmxzb25zIDogaHR0cHM6Ly9naXRodWIuY29tL3NrYWtyaVxuLy8hIGF1dGhvciA6IErEgW5pcyBFbG1lcmlzIDogaHR0cHM6Ly9naXRodWIuY29tL0phbmlzRVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHVuaXRzID0ge1xuICAgICAgICBzczogJ3Nla3VuZGVzX3Nla3VuZMSTbV9zZWt1bmRlX3Nla3VuZGVzJy5zcGxpdCgnXycpLFxuICAgICAgICBtOiAnbWluxat0ZXNfbWluxat0xJNtX21pbsWrdGVfbWluxat0ZXMnLnNwbGl0KCdfJyksXG4gICAgICAgIG1tOiAnbWluxat0ZXNfbWluxat0xJNtX21pbsWrdGVfbWluxat0ZXMnLnNwbGl0KCdfJyksXG4gICAgICAgIGg6ICdzdHVuZGFzX3N0dW5kxIFtX3N0dW5kYV9zdHVuZGFzJy5zcGxpdCgnXycpLFxuICAgICAgICBoaDogJ3N0dW5kYXNfc3R1bmTEgW1fc3R1bmRhX3N0dW5kYXMnLnNwbGl0KCdfJyksXG4gICAgICAgIGQ6ICdkaWVuYXNfZGllbsSBbV9kaWVuYV9kaWVuYXMnLnNwbGl0KCdfJyksXG4gICAgICAgIGRkOiAnZGllbmFzX2RpZW7EgW1fZGllbmFfZGllbmFzJy5zcGxpdCgnXycpLFxuICAgICAgICBNOiAnbcSTbmXFoWFfbcSTbmXFoWllbV9txJNuZXNpc19txJNuZcWhaScuc3BsaXQoJ18nKSxcbiAgICAgICAgTU06ICdtxJNuZcWhYV9txJNuZcWhaWVtX23Ek25lc2lzX23Ek25lxaFpJy5zcGxpdCgnXycpLFxuICAgICAgICB5OiAnZ2FkYV9nYWRpZW1fZ2Fkc19nYWRpJy5zcGxpdCgnXycpLFxuICAgICAgICB5eTogJ2dhZGFfZ2FkaWVtX2dhZHNfZ2FkaScuc3BsaXQoJ18nKSxcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB3aXRob3V0U3VmZml4IGJvb2xlYW4gdHJ1ZSA9IGEgbGVuZ3RoIG9mIHRpbWU7IGZhbHNlID0gYmVmb3JlL2FmdGVyIGEgcGVyaW9kIG9mIHRpbWUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gZm9ybWF0KGZvcm1zLCBudW1iZXIsIHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgaWYgKHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgICAgIC8vIEUuZy4gXCIyMSBtaW7Fq3RlXCIsIFwiMyBtaW7Fq3Rlc1wiLlxuICAgICAgICAgICAgcmV0dXJuIG51bWJlciAlIDEwID09PSAxICYmIG51bWJlciAlIDEwMCAhPT0gMTEgPyBmb3Jtc1syXSA6IGZvcm1zWzNdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gRS5nLiBcIjIxIG1pbsWrdGVzXCIgYXMgaW4gXCJwxJNjIDIxIG1pbsWrdGVzXCIuXG4gICAgICAgICAgICAvLyBFLmcuIFwiMyBtaW7Fq3TEk21cIiBhcyBpbiBcInDEk2MgMyBtaW7Fq3TEk21cIi5cbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgJSAxMCA9PT0gMSAmJiBudW1iZXIgJSAxMDAgIT09IDExID8gZm9ybXNbMF0gOiBmb3Jtc1sxXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5KSB7XG4gICAgICAgIHJldHVybiBudW1iZXIgKyAnICcgKyBmb3JtYXQodW5pdHNba2V5XSwgbnVtYmVyLCB3aXRob3V0U3VmZml4KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVsYXRpdmVUaW1lV2l0aFNpbmd1bGFyKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5KSB7XG4gICAgICAgIHJldHVybiBmb3JtYXQodW5pdHNba2V5XSwgbnVtYmVyLCB3aXRob3V0U3VmZml4KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVsYXRpdmVTZWNvbmRzKG51bWJlciwgd2l0aG91dFN1ZmZpeCkge1xuICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/ICdkYcW+YXMgc2VrdW5kZXMnIDogJ2Rhxb7EgW0gc2VrdW5kxJNtJztcbiAgICB9XG5cbiAgICB2YXIgbHYgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdsdicsIHtcbiAgICAgICAgbW9udGhzOiAnamFudsSBcmlzX2ZlYnJ1xIFyaXNfbWFydHNfYXByxKtsaXNfbWFpanNfasWrbmlqc19qxatsaWpzX2F1Z3VzdHNfc2VwdGVtYnJpc19va3RvYnJpc19ub3ZlbWJyaXNfZGVjZW1icmlzJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ2phbl9mZWJfbWFyX2Fwcl9tYWlfasWrbl9qxatsX2F1Z19zZXBfb2t0X25vdl9kZWMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOlxuICAgICAgICAgICAgJ3N2xJN0ZGllbmFfcGlybWRpZW5hX290cmRpZW5hX3RyZcWhZGllbmFfY2V0dXJ0ZGllbmFfcGlla3RkaWVuYV9zZXN0ZGllbmEnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ1N2X1BfT19UX0NfUGtfUycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdTdl9QX09fVF9DX1BrX1MnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVkuJyxcbiAgICAgICAgICAgIExMOiAnWVlZWS4gW2dhZGFdIEQuIE1NTU0nLFxuICAgICAgICAgICAgTExMOiAnWVlZWS4gW2dhZGFdIEQuIE1NTU0sIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdZWVlZLiBbZ2FkYV0gRC4gTU1NTSwgZGRkZCwgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vFoG9kaWVuIHB1bGtzdGVuXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW1LEq3QgcHVsa3N0ZW5dIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbcHVsa3N0ZW5dIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbVmFrYXIgcHVsa3N0ZW5dIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW1BhZ8SBanXFocSBXSBkZGRkIFtwdWxrc3Rlbl0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdwxJNjICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICdwaXJtcyAlcycsXG4gICAgICAgICAgICBzOiByZWxhdGl2ZVNlY29uZHMsXG4gICAgICAgICAgICBzczogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgICAgIG06IHJlbGF0aXZlVGltZVdpdGhTaW5ndWxhcixcbiAgICAgICAgICAgIG1tOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgaDogcmVsYXRpdmVUaW1lV2l0aFNpbmd1bGFyLFxuICAgICAgICAgICAgaGg6IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICBkOiByZWxhdGl2ZVRpbWVXaXRoU2luZ3VsYXIsXG4gICAgICAgICAgICBkZDogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgICAgIE06IHJlbGF0aXZlVGltZVdpdGhTaW5ndWxhcixcbiAgICAgICAgICAgIE1NOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgeTogcmVsYXRpdmVUaW1lV2l0aFNpbmd1bGFyLFxuICAgICAgICAgICAgeXk6IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWw6ICclZC4nLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbHY7XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/lv.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/me.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/me.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Montenegrin [me]\n//! author : Miodrag Nikač <miodrag@restartit.me> : https://github.com/miodragnikac\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var translator = {\n        words: {\n            //Different grammatical cases\n            ss: ['sekund', 'sekunda', 'sekundi'],\n            m: ['jedan minut', 'jednog minuta'],\n            mm: ['minut', 'minuta', 'minuta'],\n            h: ['jedan sat', 'jednog sata'],\n            hh: ['sat', 'sata', 'sati'],\n            dd: ['dan', 'dana', 'dana'],\n            MM: ['mjesec', 'mjeseca', 'mjeseci'],\n            yy: ['godina', 'godine', 'godina'],\n        },\n        correctGrammaticalCase: function (number, wordKey) {\n            return number === 1\n                ? wordKey[0]\n                : number >= 2 && number <= 4\n                ? wordKey[1]\n                : wordKey[2];\n        },\n        translate: function (number, withoutSuffix, key) {\n            var wordKey = translator.words[key];\n            if (key.length === 1) {\n                return withoutSuffix ? wordKey[0] : wordKey[1];\n            } else {\n                return (\n                    number +\n                    ' ' +\n                    translator.correctGrammaticalCase(number, wordKey)\n                );\n            }\n        },\n    };\n\n    var me = moment.defineLocale('me', {\n        months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split(\n            '_'\n        ),\n        monthsShort:\n            'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),\n        monthsParseExact: true,\n        weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split(\n            '_'\n        ),\n        weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n        weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm',\n            LLLL: 'dddd, D. MMMM YYYY H:mm',\n        },\n        calendar: {\n            sameDay: '[danas u] LT',\n            nextDay: '[sjutra u] LT',\n\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[u] [nedjelju] [u] LT';\n                    case 3:\n                        return '[u] [srijedu] [u] LT';\n                    case 6:\n                        return '[u] [subotu] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[u] dddd [u] LT';\n                }\n            },\n            lastDay: '[juče u] LT',\n            lastWeek: function () {\n                var lastWeekDays = [\n                    '[prošle] [nedjelje] [u] LT',\n                    '[prošlog] [ponedjeljka] [u] LT',\n                    '[prošlog] [utorka] [u] LT',\n                    '[prošle] [srijede] [u] LT',\n                    '[prošlog] [četvrtka] [u] LT',\n                    '[prošlog] [petka] [u] LT',\n                    '[prošle] [subote] [u] LT',\n                ];\n                return lastWeekDays[this.day()];\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'za %s',\n            past: 'prije %s',\n            s: 'nekoliko sekundi',\n            ss: translator.translate,\n            m: translator.translate,\n            mm: translator.translate,\n            h: translator.translate,\n            hh: translator.translate,\n            d: 'dan',\n            dd: translator.translate,\n            M: 'mjesec',\n            MM: translator.translate,\n            y: 'godinu',\n            yy: translator.translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return me;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9tZS5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbWUuanM/YTBkMCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogTW9udGVuZWdyaW4gW21lXVxuLy8hIGF1dGhvciA6IE1pb2RyYWcgTmlrYcSNIDxtaW9kcmFnQHJlc3RhcnRpdC5tZT4gOiBodHRwczovL2dpdGh1Yi5jb20vbWlvZHJhZ25pa2FjXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgdHJhbnNsYXRvciA9IHtcbiAgICAgICAgd29yZHM6IHtcbiAgICAgICAgICAgIC8vRGlmZmVyZW50IGdyYW1tYXRpY2FsIGNhc2VzXG4gICAgICAgICAgICBzczogWydzZWt1bmQnLCAnc2VrdW5kYScsICdzZWt1bmRpJ10sXG4gICAgICAgICAgICBtOiBbJ2plZGFuIG1pbnV0JywgJ2plZG5vZyBtaW51dGEnXSxcbiAgICAgICAgICAgIG1tOiBbJ21pbnV0JywgJ21pbnV0YScsICdtaW51dGEnXSxcbiAgICAgICAgICAgIGg6IFsnamVkYW4gc2F0JywgJ2plZG5vZyBzYXRhJ10sXG4gICAgICAgICAgICBoaDogWydzYXQnLCAnc2F0YScsICdzYXRpJ10sXG4gICAgICAgICAgICBkZDogWydkYW4nLCAnZGFuYScsICdkYW5hJ10sXG4gICAgICAgICAgICBNTTogWydtamVzZWMnLCAnbWplc2VjYScsICdtamVzZWNpJ10sXG4gICAgICAgICAgICB5eTogWydnb2RpbmEnLCAnZ29kaW5lJywgJ2dvZGluYSddLFxuICAgICAgICB9LFxuICAgICAgICBjb3JyZWN0R3JhbW1hdGljYWxDYXNlOiBmdW5jdGlvbiAobnVtYmVyLCB3b3JkS2V5KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyID09PSAxXG4gICAgICAgICAgICAgICAgPyB3b3JkS2V5WzBdXG4gICAgICAgICAgICAgICAgOiBudW1iZXIgPj0gMiAmJiBudW1iZXIgPD0gNFxuICAgICAgICAgICAgICAgID8gd29yZEtleVsxXVxuICAgICAgICAgICAgICAgIDogd29yZEtleVsyXTtcbiAgICAgICAgfSxcbiAgICAgICAgdHJhbnNsYXRlOiBmdW5jdGlvbiAobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXkpIHtcbiAgICAgICAgICAgIHZhciB3b3JkS2V5ID0gdHJhbnNsYXRvci53b3Jkc1trZXldO1xuICAgICAgICAgICAgaWYgKGtleS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/IHdvcmRLZXlbMF0gOiB3b3JkS2V5WzFdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICBudW1iZXIgK1xuICAgICAgICAgICAgICAgICAgICAnICcgK1xuICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdG9yLmNvcnJlY3RHcmFtbWF0aWNhbENhc2UobnVtYmVyLCB3b3JkS2V5KVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgfTtcblxuICAgIHZhciBtZSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ21lJywge1xuICAgICAgICBtb250aHM6ICdqYW51YXJfZmVicnVhcl9tYXJ0X2FwcmlsX21hal9qdW5fanVsX2F2Z3VzdF9zZXB0ZW1iYXJfb2t0b2Jhcl9ub3ZlbWJhcl9kZWNlbWJhcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAnamFuLl9mZWIuX21hci5fYXByLl9tYWpfanVuX2p1bF9hdmcuX3NlcC5fb2t0Ll9ub3YuX2RlYy4nLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOiAnbmVkamVsamFfcG9uZWRqZWxqYWtfdXRvcmFrX3NyaWplZGFfxI1ldHZydGFrX3BldGFrX3N1Ym90YScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ25lZC5fcG9uLl91dG8uX3NyaS5fxI1ldC5fcGV0Ll9zdWIuJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ25lX3BvX3V0X3NyX8SNZV9wZV9zdScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0g6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdELiBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRC4gTU1NTSBZWVlZIEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQuIE1NTU0gWVlZWSBIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbZGFuYXMgdV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tzanV0cmEgdV0gTFQnLFxuXG4gICAgICAgICAgICBuZXh0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kYXkoKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t1XSBbbmVkamVsanVdIFt1XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3VdIFtzcmlqZWR1XSBbdV0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t1XSBbc3Vib3R1XSBbdV0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t1XSBkZGRkIFt1XSBMVCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbanXEjWUgdV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgbGFzdFdlZWtEYXlzID0gW1xuICAgICAgICAgICAgICAgICAgICAnW3Byb8WhbGVdIFtuZWRqZWxqZV0gW3VdIExUJyxcbiAgICAgICAgICAgICAgICAgICAgJ1twcm/FoWxvZ10gW3BvbmVkamVsamthXSBbdV0gTFQnLFxuICAgICAgICAgICAgICAgICAgICAnW3Byb8WhbG9nXSBbdXRvcmthXSBbdV0gTFQnLFxuICAgICAgICAgICAgICAgICAgICAnW3Byb8WhbGVdIFtzcmlqZWRlXSBbdV0gTFQnLFxuICAgICAgICAgICAgICAgICAgICAnW3Byb8WhbG9nXSBbxI1ldHZydGthXSBbdV0gTFQnLFxuICAgICAgICAgICAgICAgICAgICAnW3Byb8WhbG9nXSBbcGV0a2FdIFt1XSBMVCcsXG4gICAgICAgICAgICAgICAgICAgICdbcHJvxaFsZV0gW3N1Ym90ZV0gW3VdIExUJyxcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgIHJldHVybiBsYXN0V2Vla0RheXNbdGhpcy5kYXkoKV07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICd6YSAlcycsXG4gICAgICAgICAgICBwYXN0OiAncHJpamUgJXMnLFxuICAgICAgICAgICAgczogJ25la29saWtvIHNla3VuZGknLFxuICAgICAgICAgICAgc3M6IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICAgICAgbTogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgICAgICBtbTogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgICAgICBoOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGhoOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGQ6ICdkYW4nLFxuICAgICAgICAgICAgZGQ6IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICAgICAgTTogJ21qZXNlYycsXG4gICAgICAgICAgICBNTTogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgICAgICB5OiAnZ29kaW51JyxcbiAgICAgICAgICAgIHl5OiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9XFwuLyxcbiAgICAgICAgb3JkaW5hbDogJyVkLicsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDcsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDd0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBtZTtcblxufSkpKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/me.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/mi.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/mi.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Maori [mi]\n//! author : John Corrigan <robbiecloset@gmail.com> : https://github.com/johnideal\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var mi = moment.defineLocale('mi', {\n        months: 'Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea'.split(\n            '_'\n        ),\n        monthsShort:\n            'Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki'.split(\n                '_'\n            ),\n        monthsRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n        monthsStrictRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n        monthsShortRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n        monthsShortStrictRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,2}/i,\n        weekdays: 'Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei'.split('_'),\n        weekdaysShort: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),\n        weekdaysMin: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY [i] HH:mm',\n            LLLL: 'dddd, D MMMM YYYY [i] HH:mm',\n        },\n        calendar: {\n            sameDay: '[i teie mahana, i] LT',\n            nextDay: '[apopo i] LT',\n            nextWeek: 'dddd [i] LT',\n            lastDay: '[inanahi i] LT',\n            lastWeek: 'dddd [whakamutunga i] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'i roto i %s',\n            past: '%s i mua',\n            s: 'te hēkona ruarua',\n            ss: '%d hēkona',\n            m: 'he meneti',\n            mm: '%d meneti',\n            h: 'te haora',\n            hh: '%d haora',\n            d: 'he ra',\n            dd: '%d ra',\n            M: 'he marama',\n            MM: '%d marama',\n            y: 'he tau',\n            yy: '%d tau',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return mi;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9taS5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1REFBdUQsSUFBSTtBQUMzRCw2REFBNkQsSUFBSTtBQUNqRSw0REFBNEQsSUFBSTtBQUNoRSxrRUFBa0UsSUFBSTtBQUN0RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbWkuanM/NDc4YyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogTWFvcmkgW21pXVxuLy8hIGF1dGhvciA6IEpvaG4gQ29ycmlnYW4gPHJvYmJpZWNsb3NldEBnbWFpbC5jb20+IDogaHR0cHM6Ly9naXRodWIuY29tL2pvaG5pZGVhbFxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIG1pID0gbW9tZW50LmRlZmluZUxvY2FsZSgnbWknLCB7XG4gICAgICAgIG1vbnRoczogJ0tvaGktdMSBdGVfSHVpLXRhbmd1cnVfUG91dMWrLXRlLXJhbmdpX1BhZW5nYS13aMSBd2jEgV9IYXJhdHVhX1BpcGlyaV9IxY1uZ29pbmdvaV9IZXJlLXR1cmkta8WNa8SBX01haHVydV9XaGlyaW5nYS3EgS1udWt1X1doaXJpbmdhLcSBLXJhbmdpX0hha2loZWEnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ0tvaGlfSHVpX1BvdV9QYWVfSGFyYV9QaXBpX0jFjW5nb2lfSGVyZV9NYWh1X1doaS1udV9XaGktcmFfSGFraScuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICBtb250aHNSZWdleDogLyg/OlsnYS16XFx1MDEwMVxcdTAxNERcXHUwMTZCXStcXC0/KXsxLDN9L2ksXG4gICAgICAgIG1vbnRoc1N0cmljdFJlZ2V4OiAvKD86WydhLXpcXHUwMTAxXFx1MDE0RFxcdTAxNkJdK1xcLT8pezEsM30vaSxcbiAgICAgICAgbW9udGhzU2hvcnRSZWdleDogLyg/OlsnYS16XFx1MDEwMVxcdTAxNERcXHUwMTZCXStcXC0/KXsxLDN9L2ksXG4gICAgICAgIG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6IC8oPzpbJ2EtelxcdTAxMDFcXHUwMTREXFx1MDE2Ql0rXFwtPyl7MSwyfS9pLFxuICAgICAgICB3ZWVrZGF5czogJ1LEgXRhcHVfTWFuZV9UxatyZWlfV2VuZXJlaV9UxIFpdGVfUGFyYWlyZV9IxIF0YXJlaScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ1RhX01hX1TFq19XZV9UxIFpX1BhX0jEgScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdUYV9NYV9UxatfV2VfVMSBaV9QYV9IxIEnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgW2ldIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBbaV0gSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tpIHRlaWUgbWFoYW5hLCBpXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW2Fwb3BvIGldIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbaV0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tpbmFuYWhpIGldIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnZGRkZCBbd2hha2FtdXR1bmdhIGldIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnaSByb3RvIGkgJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzIGkgbXVhJyxcbiAgICAgICAgICAgIHM6ICd0ZSBoxJNrb25hIHJ1YXJ1YScsXG4gICAgICAgICAgICBzczogJyVkIGjEk2tvbmEnLFxuICAgICAgICAgICAgbTogJ2hlIG1lbmV0aScsXG4gICAgICAgICAgICBtbTogJyVkIG1lbmV0aScsXG4gICAgICAgICAgICBoOiAndGUgaGFvcmEnLFxuICAgICAgICAgICAgaGg6ICclZCBoYW9yYScsXG4gICAgICAgICAgICBkOiAnaGUgcmEnLFxuICAgICAgICAgICAgZGQ6ICclZCByYScsXG4gICAgICAgICAgICBNOiAnaGUgbWFyYW1hJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbWFyYW1hJyxcbiAgICAgICAgICAgIHk6ICdoZSB0YXUnLFxuICAgICAgICAgICAgeXk6ICclZCB0YXUnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn3Cui8sXG4gICAgICAgIG9yZGluYWw6ICclZMK6JyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG1pO1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/mi.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/mk.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/mk.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Macedonian [mk]\n//! author : Borislav Mickov : https://github.com/B0k0\n//! author : Sashko Todorov : https://github.com/bkyceh\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var mk = moment.defineLocale('mk', {\n        months: 'јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември'.split(\n            '_'\n        ),\n        monthsShort: 'јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек'.split('_'),\n        weekdays: 'недела_понеделник_вторник_среда_четврток_петок_сабота'.split(\n            '_'\n        ),\n        weekdaysShort: 'нед_пон_вто_сре_чет_пет_саб'.split('_'),\n        weekdaysMin: 'нe_пo_вт_ср_че_пе_сa'.split('_'),\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'D.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY H:mm',\n            LLLL: 'dddd, D MMMM YYYY H:mm',\n        },\n        calendar: {\n            sameDay: '[Денес во] LT',\n            nextDay: '[Утре во] LT',\n            nextWeek: '[Во] dddd [во] LT',\n            lastDay: '[Вчера во] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                    case 6:\n                        return '[Изминатата] dddd [во] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[Изминатиот] dddd [во] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'за %s',\n            past: 'пред %s',\n            s: 'неколку секунди',\n            ss: '%d секунди',\n            m: 'една минута',\n            mm: '%d минути',\n            h: 'еден час',\n            hh: '%d часа',\n            d: 'еден ден',\n            dd: '%d дена',\n            M: 'еден месец',\n            MM: '%d месеци',\n            y: 'една година',\n            yy: '%d години',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(ев|ен|ти|ви|ри|ми)/,\n        ordinal: function (number) {\n            var lastDigit = number % 10,\n                last2Digits = number % 100;\n            if (number === 0) {\n                return number + '-ев';\n            } else if (last2Digits === 0) {\n                return number + '-ен';\n            } else if (last2Digits > 10 && last2Digits < 20) {\n                return number + '-ти';\n            } else if (lastDigit === 1) {\n                return number + '-ви';\n            } else if (lastDigit === 2) {\n                return number + '-ри';\n            } else if (lastDigit === 7 || lastDigit === 8) {\n                return number + '-ми';\n            } else {\n                return number + '-ти';\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return mk;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9tay5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsa0RBQVc7QUFDckUsR0FBRyxDQUNzQjtBQUN6QixDQUFDLDRCQUE0Qjs7QUFFN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxvQ0FBb0MsSUFBSTtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL21rLmpzP2Q3MTQiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IE1hY2Vkb25pYW4gW21rXVxuLy8hIGF1dGhvciA6IEJvcmlzbGF2IE1pY2tvdiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9CMGswXG4vLyEgYXV0aG9yIDogU2FzaGtvIFRvZG9yb3YgOiBodHRwczovL2dpdGh1Yi5jb20vYmt5Y2VoXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgbWsgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdtaycsIHtcbiAgICAgICAgbW9udGhzOiAn0ZjQsNC90YPQsNGA0Lhf0YTQtdCy0YDRg9Cw0YDQuF/QvNCw0YDRgl/QsNC/0YDQuNC7X9C80LDRmF/RmNGD0L3QuF/RmNGD0LvQuF/QsNCy0LPRg9GB0YJf0YHQtdC/0YLQtdC80LLRgNC4X9C+0LrRgtC+0LzQstGA0Lhf0L3QvtC10LzQstGA0Lhf0LTQtdC60LXQvNCy0YDQuCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICfRmNCw0L1f0YTQtdCyX9C80LDRgF/QsNC/0YBf0LzQsNGYX9GY0YPQvV/RmNGD0Ltf0LDQstCzX9GB0LXQv1/QvtC60YJf0L3QvtC1X9C00LXQuicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICfQvdC10LTQtdC70LBf0L/QvtC90LXQtNC10LvQvdC40Lpf0LLRgtC+0YDQvdC40Lpf0YHRgNC10LTQsF/Rh9C10YLQstGA0YLQvtC6X9C/0LXRgtC+0Lpf0YHQsNCx0L7RgtCwJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn0L3QtdC0X9C/0L7QvV/QstGC0L5f0YHRgNC1X9GH0LXRgl/Qv9C10YJf0YHQsNCxJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ9C9ZV/Qv29f0LLRgl/RgdGAX9GH0LVf0L/QtV/RgWEnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0g6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSDptbTpzcycsXG4gICAgICAgICAgICBMOiAnRC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW9CU0LXQvdC10YEg0LLQvl0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vQo9GC0YDQtSDQstC+XSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ1vQktC+XSBkZGRkIFvQstC+XSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW9CS0YfQtdGA0LAg0LLQvl0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW9CY0LfQvNC40L3QsNGC0LDRgtCwXSBkZGRkIFvQstC+XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW9CY0LfQvNC40L3QsNGC0LjQvtGCXSBkZGRkIFvQstC+XSBMVCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAn0LfQsCAlcycsXG4gICAgICAgICAgICBwYXN0OiAn0L/RgNC10LQgJXMnLFxuICAgICAgICAgICAgczogJ9C90LXQutC+0LvQutGDINGB0LXQutGD0L3QtNC4JyxcbiAgICAgICAgICAgIHNzOiAnJWQg0YHQtdC60YPQvdC00LgnLFxuICAgICAgICAgICAgbTogJ9C10LTQvdCwINC80LjQvdGD0YLQsCcsXG4gICAgICAgICAgICBtbTogJyVkINC80LjQvdGD0YLQuCcsXG4gICAgICAgICAgICBoOiAn0LXQtNC10L0g0YfQsNGBJyxcbiAgICAgICAgICAgIGhoOiAnJWQg0YfQsNGB0LAnLFxuICAgICAgICAgICAgZDogJ9C10LTQtdC9INC00LXQvScsXG4gICAgICAgICAgICBkZDogJyVkINC00LXQvdCwJyxcbiAgICAgICAgICAgIE06ICfQtdC00LXQvSDQvNC10YHQtdGGJyxcbiAgICAgICAgICAgIE1NOiAnJWQg0LzQtdGB0LXRhtC4JyxcbiAgICAgICAgICAgIHk6ICfQtdC00L3QsCDQs9C+0LTQuNC90LAnLFxuICAgICAgICAgICAgeXk6ICclZCDQs9C+0LTQuNC90LgnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0tKNC10LJ80LXQvXzRgtC4fNCy0Lh80YDQuHzQvNC4KS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBsYXN0RGlnaXQgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgICAgICBsYXN0MkRpZ2l0cyA9IG51bWJlciAlIDEwMDtcbiAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3QtdCyJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobGFzdDJEaWdpdHMgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3QtdC9JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobGFzdDJEaWdpdHMgPiAxMCAmJiBsYXN0MkRpZ2l0cyA8IDIwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct0YLQuCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGxhc3REaWdpdCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLdCy0LgnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChsYXN0RGlnaXQgPT09IDIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3RgNC4JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobGFzdERpZ2l0ID09PSA3IHx8IGxhc3REaWdpdCA9PT0gOCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLdC80LgnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3RgtC4JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNywgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gN3RoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG1rO1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/mk.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/ml.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/ml.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Malayalam [ml]\n//! author : Floyd Pink : https://github.com/floydpink\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var ml = moment.defineLocale('ml', {\n        months: 'ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ'.split(\n            '_'\n        ),\n        monthsShort:\n            'ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays:\n            'ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച'.split(\n                '_'\n            ),\n        weekdaysShort: 'ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി'.split('_'),\n        weekdaysMin: 'ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm -നു',\n            LTS: 'A h:mm:ss -നു',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm -നു',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm -നു',\n        },\n        calendar: {\n            sameDay: '[ഇന്ന്] LT',\n            nextDay: '[നാളെ] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[ഇന്നലെ] LT',\n            lastWeek: '[കഴിഞ്ഞ] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s കഴിഞ്ഞ്',\n            past: '%s മുൻപ്',\n            s: 'അൽപ നിമിഷങ്ങൾ',\n            ss: '%d സെക്കൻഡ്',\n            m: 'ഒരു മിനിറ്റ്',\n            mm: '%d മിനിറ്റ്',\n            h: 'ഒരു മണിക്കൂർ',\n            hh: '%d മണിക്കൂർ',\n            d: 'ഒരു ദിവസം',\n            dd: '%d ദിവസം',\n            M: 'ഒരു മാസം',\n            MM: '%d മാസം',\n            y: 'ഒരു വർഷം',\n            yy: '%d വർഷം',\n        },\n        meridiemParse: /രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (\n                (meridiem === 'രാത്രി' && hour >= 4) ||\n                meridiem === 'ഉച്ച കഴിഞ്ഞ്' ||\n                meridiem === 'വൈകുന്നേരം'\n            ) {\n                return hour + 12;\n            } else {\n                return hour;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'രാത്രി';\n            } else if (hour < 12) {\n                return 'രാവിലെ';\n            } else if (hour < 17) {\n                return 'ഉച്ച കഴിഞ്ഞ്';\n            } else if (hour < 20) {\n                return 'വൈകുന്നേരം';\n            } else {\n                return 'രാത്രി';\n            }\n        },\n    });\n\n    return ml;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9tbC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbWwuanM/YjRlNyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogTWFsYXlhbGFtIFttbF1cbi8vISBhdXRob3IgOiBGbG95ZCBQaW5rIDogaHR0cHM6Ly9naXRodWIuY29tL2Zsb3lkcGlua1xuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIG1sID0gbW9tZW50LmRlZmluZUxvY2FsZSgnbWwnLCB7XG4gICAgICAgIG1vbnRoczogJ+C0nOC0qOC1geC0teC0sOC0v1/gtKvgtYbgtKzgtY3gtLDgtYHgtLXgtLDgtL9f4LSu4LS+4LW84LSa4LWN4LSa4LWNX+C0j+C0quC1jeC0sOC0v+C1vV/gtK7gtYfgtK/gtY1f4LSc4LWC4LW6X+C0nOC1guC0suC1iF/gtJPgtJfgtLjgtY3gtLHgtY3gtLHgtY1f4LS44LWG4LSq4LWN4LSx4LWN4LSx4LSC4LSs4LW8X+C0kuC0leC1jeC0n+C1i+C0rOC1vF/gtKjgtLXgtILgtKzgtbxf4LSh4LS/4LS44LSC4LSs4LW8Jy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICfgtJzgtKjgtYEuX+C0q+C1huC0rOC1jeC0sOC1gS5f4LSu4LS+4LW8Ll/gtI/gtKrgtY3gtLDgtL8uX+C0ruC1h+C0r+C1jV/gtJzgtYLgtbpf4LSc4LWC4LSy4LWILl/gtJPgtJcuX+C0uOC1huC0quC1jeC0seC1jeC0sS5f4LSS4LSV4LWN4LSf4LWLLl/gtKjgtLXgtIIuX+C0oeC0v+C0uOC0gi4nLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6XG4gICAgICAgICAgICAn4LSe4LS+4LSv4LSx4LS+4LS04LWN4LSaX+C0pOC0v+C0meC1jeC0leC0s+C0vuC0tOC1jeC0ml/gtJrgtYrgtLXgtY3gtLXgtL7gtLTgtY3gtJpf4LSs4LWB4LSn4LSo4LS+4LS04LWN4LSaX+C0teC1jeC0r+C0vuC0tOC0vuC0tOC1jeC0ml/gtLXgtYbgtLPgtY3gtLPgtL/gtK/gtL7gtLTgtY3gtJpf4LS24LSo4LS/4LSv4LS+4LS04LWN4LSaJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfgtJ7gtL7gtK/gtbxf4LSk4LS/4LSZ4LWN4LSV4LW+X+C0muC1iuC0teC1jeC0tV/gtKzgtYHgtKfgtbtf4LS14LWN4LSv4LS+4LS04LSCX+C0teC1huC0s+C1jeC0s+C0v1/gtLbgtKjgtL8nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn4LSe4LS+X+C0pOC0v1/gtJrgtYpf4LSs4LWBX+C0teC1jeC0r+C0vl/gtLXgtYZf4LS2Jy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdBIGg6bW0gLeC0qOC1gScsXG4gICAgICAgICAgICBMVFM6ICdBIGg6bW06c3MgLeC0qOC1gScsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZLCBBIGg6bW0gLeC0qOC1gScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSAt4LSo4LWBJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb4LSH4LSo4LWN4LSo4LWNXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW+C0qOC0vuC0s+C1hl0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkLCBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW+C0h+C0qOC1jeC0qOC0suC1hl0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdb4LSV4LS04LS/4LSe4LWN4LSeXSBkZGRkLCBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVzIOC0leC0tOC0v+C0nuC1jeC0nuC1jScsXG4gICAgICAgICAgICBwYXN0OiAnJXMg4LSu4LWB4LW74LSq4LWNJyxcbiAgICAgICAgICAgIHM6ICfgtIXgtb3gtKog4LSo4LS/4LSu4LS/4LS34LSZ4LWN4LSZ4LW+JyxcbiAgICAgICAgICAgIHNzOiAnJWQg4LS44LWG4LSV4LWN4LSV4LW74LSh4LWNJyxcbiAgICAgICAgICAgIG06ICfgtJLgtLDgtYEg4LSu4LS/4LSo4LS/4LSx4LWN4LSx4LWNJyxcbiAgICAgICAgICAgIG1tOiAnJWQg4LSu4LS/4LSo4LS/4LSx4LWN4LSx4LWNJyxcbiAgICAgICAgICAgIGg6ICfgtJLgtLDgtYEg4LSu4LSj4LS/4LSV4LWN4LSV4LWC4LW8JyxcbiAgICAgICAgICAgIGhoOiAnJWQg4LSu4LSj4LS/4LSV4LWN4LSV4LWC4LW8JyxcbiAgICAgICAgICAgIGQ6ICfgtJLgtLDgtYEg4LSm4LS/4LS14LS44LSCJyxcbiAgICAgICAgICAgIGRkOiAnJWQg4LSm4LS/4LS14LS44LSCJyxcbiAgICAgICAgICAgIE06ICfgtJLgtLDgtYEg4LSu4LS+4LS44LSCJyxcbiAgICAgICAgICAgIE1NOiAnJWQg4LSu4LS+4LS44LSCJyxcbiAgICAgICAgICAgIHk6ICfgtJLgtLDgtYEg4LS14LW84LS34LSCJyxcbiAgICAgICAgICAgIHl5OiAnJWQg4LS14LW84LS34LSCJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL+C0sOC0vuC0pOC1jeC0sOC0v3zgtLDgtL7gtLXgtL/gtLLgtYZ84LSJ4LSa4LWN4LSaIOC0leC0tOC0v+C0nuC1jeC0nuC1jXzgtLXgtYjgtJXgtYHgtKjgtY3gtKjgtYfgtLDgtIJ84LSw4LS+4LSk4LWN4LSw4LS/L2ksXG4gICAgICAgIG1lcmlkaWVtSG91cjogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAobWVyaWRpZW0gPT09ICfgtLDgtL7gtKTgtY3gtLDgtL8nICYmIGhvdXIgPj0gNCkgfHxcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9PT0gJ+C0ieC0muC1jeC0miDgtJXgtLTgtL/gtJ7gtY3gtJ7gtY0nIHx8XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPT09ICfgtLXgtYjgtJXgtYHgtKjgtY3gtKjgtYfgtLDgtIInXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgNCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4LSw4LS+4LSk4LWN4LSw4LS/JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgtLDgtL7gtLXgtL/gtLLgtYYnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+C0ieC0muC1jeC0miDgtJXgtLTgtL/gtJ7gtY3gtJ7gtY0nO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMjApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+C0teC1iOC0leC1geC0qOC1jeC0qOC1h+C0sOC0gic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4LSw4LS+4LSk4LWN4LSw4LS/JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBtbDtcblxufSkpKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/ml.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/mn.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/mn.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Mongolian [mn]\n//! author : Javkhlantugs Nyamdorj : https://github.com/javkhaanj7\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function translate(number, withoutSuffix, key, isFuture) {\n        switch (key) {\n            case 's':\n                return withoutSuffix ? 'хэдхэн секунд' : 'хэдхэн секундын';\n            case 'ss':\n                return number + (withoutSuffix ? ' секунд' : ' секундын');\n            case 'm':\n            case 'mm':\n                return number + (withoutSuffix ? ' минут' : ' минутын');\n            case 'h':\n            case 'hh':\n                return number + (withoutSuffix ? ' цаг' : ' цагийн');\n            case 'd':\n            case 'dd':\n                return number + (withoutSuffix ? ' өдөр' : ' өдрийн');\n            case 'M':\n            case 'MM':\n                return number + (withoutSuffix ? ' сар' : ' сарын');\n            case 'y':\n            case 'yy':\n                return number + (withoutSuffix ? ' жил' : ' жилийн');\n            default:\n                return number;\n        }\n    }\n\n    var mn = moment.defineLocale('mn', {\n        months: 'Нэгдүгээр сар_Хоёрдугаар сар_Гуравдугаар сар_Дөрөвдүгээр сар_Тавдугаар сар_Зургадугаар сар_Долдугаар сар_Наймдугаар сар_Есдүгээр сар_Аравдугаар сар_Арван нэгдүгээр сар_Арван хоёрдугаар сар'.split(\n            '_'\n        ),\n        monthsShort:\n            '1 сар_2 сар_3 сар_4 сар_5 сар_6 сар_7 сар_8 сар_9 сар_10 сар_11 сар_12 сар'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'Ням_Даваа_Мягмар_Лхагва_Пүрэв_Баасан_Бямба'.split('_'),\n        weekdaysShort: 'Ням_Дав_Мяг_Лха_Пүр_Баа_Бям'.split('_'),\n        weekdaysMin: 'Ня_Да_Мя_Лх_Пү_Ба_Бя'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY-MM-DD',\n            LL: 'YYYY оны MMMMын D',\n            LLL: 'YYYY оны MMMMын D HH:mm',\n            LLLL: 'dddd, YYYY оны MMMMын D HH:mm',\n        },\n        meridiemParse: /ҮӨ|ҮХ/i,\n        isPM: function (input) {\n            return input === 'ҮХ';\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ҮӨ';\n            } else {\n                return 'ҮХ';\n            }\n        },\n        calendar: {\n            sameDay: '[Өнөөдөр] LT',\n            nextDay: '[Маргааш] LT',\n            nextWeek: '[Ирэх] dddd LT',\n            lastDay: '[Өчигдөр] LT',\n            lastWeek: '[Өнгөрсөн] dddd LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s дараа',\n            past: '%s өмнө',\n            s: translate,\n            ss: translate,\n            m: translate,\n            mm: translate,\n            h: translate,\n            hh: translate,\n            d: translate,\n            dd: translate,\n            M: translate,\n            MM: translate,\n            y: translate,\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2} өдөр/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + ' өдөр';\n                default:\n                    return number;\n            }\n        },\n    });\n\n    return mn;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9tbi5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxvQ0FBb0MsS0FBSztBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbW4uanM/ZGQyZiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogTW9uZ29saWFuIFttbl1cbi8vISBhdXRob3IgOiBKYXZraGxhbnR1Z3MgTnlhbWRvcmogOiBodHRwczovL2dpdGh1Yi5jb20vamF2a2hhYW5qN1xuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgZnVuY3Rpb24gdHJhbnNsYXRlKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5LCBpc0Z1dHVyZSkge1xuICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgY2FzZSAncyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyAn0YXRjdC00YXRjdC9INGB0LXQutGD0L3QtCcgOiAn0YXRjdC00YXRjdC9INGB0LXQutGD0L3QtNGL0L0nO1xuICAgICAgICAgICAgY2FzZSAnc3MnOlxuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAod2l0aG91dFN1ZmZpeCA/ICcg0YHQtdC60YPQvdC0JyA6ICcg0YHQtdC60YPQvdC00YvQvScpO1xuICAgICAgICAgICAgY2FzZSAnbSc6XG4gICAgICAgICAgICBjYXNlICdtbSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICh3aXRob3V0U3VmZml4ID8gJyDQvNC40L3Rg9GCJyA6ICcg0LzQuNC90YPRgtGL0L0nKTtcbiAgICAgICAgICAgIGNhc2UgJ2gnOlxuICAgICAgICAgICAgY2FzZSAnaGgnOlxuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAod2l0aG91dFN1ZmZpeCA/ICcg0YbQsNCzJyA6ICcg0YbQsNCz0LjQudC9Jyk7XG4gICAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgIGNhc2UgJ2RkJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgKHdpdGhvdXRTdWZmaXggPyAnINOp0LTTqdGAJyA6ICcg06nQtNGA0LjQudC9Jyk7XG4gICAgICAgICAgICBjYXNlICdNJzpcbiAgICAgICAgICAgIGNhc2UgJ01NJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgKHdpdGhvdXRTdWZmaXggPyAnINGB0LDRgCcgOiAnINGB0LDRgNGL0L0nKTtcbiAgICAgICAgICAgIGNhc2UgJ3knOlxuICAgICAgICAgICAgY2FzZSAneXknOlxuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAod2l0aG91dFN1ZmZpeCA/ICcg0LbQuNC7JyA6ICcg0LbQuNC70LjQudC9Jyk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgbW4gPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdtbicsIHtcbiAgICAgICAgbW9udGhzOiAn0J3RjdCz0LTSr9Cz0Y3RjdGAINGB0LDRgF/QpdC+0ZHRgNC00YPQs9Cw0LDRgCDRgdCw0YBf0JPRg9GA0LDQstC00YPQs9Cw0LDRgCDRgdCw0YBf0JTTqdGA06nQstC00q/Qs9GN0Y3RgCDRgdCw0YBf0KLQsNCy0LTRg9Cz0LDQsNGAINGB0LDRgF/Ql9GD0YDQs9Cw0LTRg9Cz0LDQsNGAINGB0LDRgF/QlNC+0LvQtNGD0LPQsNCw0YAg0YHQsNGAX9Cd0LDQudC80LTRg9Cz0LDQsNGAINGB0LDRgF/QldGB0LTSr9Cz0Y3RjdGAINGB0LDRgF/QkNGA0LDQstC00YPQs9Cw0LDRgCDRgdCw0YBf0JDRgNCy0LDQvSDQvdGN0LPQtNKv0LPRjdGN0YAg0YHQsNGAX9CQ0YDQstCw0L0g0YXQvtGR0YDQtNGD0LPQsNCw0YAg0YHQsNGAJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICcxINGB0LDRgF8yINGB0LDRgF8zINGB0LDRgF80INGB0LDRgF81INGB0LDRgF82INGB0LDRgF83INGB0LDRgF84INGB0LDRgF85INGB0LDRgF8xMCDRgdCw0YBfMTEg0YHQsNGAXzEyINGB0LDRgCcuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czogJ9Cd0Y/QvF/QlNCw0LLQsNCwX9Cc0Y/Qs9C80LDRgF/Qm9GF0LDQs9Cy0LBf0J/Sr9GA0Y3Qsl/QkdCw0LDRgdCw0L1f0JHRj9C80LHQsCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ9Cd0Y/QvF/QlNCw0LJf0JzRj9CzX9Cb0YXQsF/Qn9Kv0YBf0JHQsNCwX9CR0Y/QvCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfQndGPX9CU0LBf0JzRj1/Qm9GFX9Cf0q9f0JHQsF/QkdGPJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdZWVlZLU1NLUREJyxcbiAgICAgICAgICAgIExMOiAnWVlZWSDQvtC90YsgTU1NTdGL0L0gRCcsXG4gICAgICAgICAgICBMTEw6ICdZWVlZINC+0L3RiyBNTU1N0YvQvSBEIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBZWVlZINC+0L3RiyBNTU1N0YvQvSBEIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL9Ku06h80q7QpS9pLFxuICAgICAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCA9PT0gJ9Ku0KUnO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn0q7TqCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn0q7QpSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW9Oo0L3TqdOp0LTTqdGAXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW9Cc0LDRgNCz0LDQsNGIXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ1vQmNGA0Y3RhV0gZGRkZCBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW9Oo0YfQuNCz0LTTqdGAXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1vTqNC90LPTqdGA0YHTqdC9XSBkZGRkIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMg0LTQsNGA0LDQsCcsXG4gICAgICAgICAgICBwYXN0OiAnJXMg06nQvNC906knLFxuICAgICAgICAgICAgczogdHJhbnNsYXRlLFxuICAgICAgICAgICAgc3M6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG1tOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBoOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBoaDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgZDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgZGQ6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIE06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIE1NOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICB5OiB0cmFuc2xhdGUsXG4gICAgICAgICAgICB5eTogdHJhbnNsYXRlLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0g06nQtNOp0YAvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyLCBwZXJpb2QpIHtcbiAgICAgICAgICAgIHN3aXRjaCAocGVyaW9kKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnRCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnREREJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICcg06nQtNOp0YAnO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbW47XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/mn.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/mr.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/mr.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Marathi [mr]\n//! author : Harshad Kale : https://github.com/kalehv\n//! author : Vivek Athalye : https://github.com/vnathalye\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '१',\n            2: '२',\n            3: '३',\n            4: '४',\n            5: '५',\n            6: '६',\n            7: '७',\n            8: '८',\n            9: '९',\n            0: '०',\n        },\n        numberMap = {\n            '१': '1',\n            '२': '2',\n            '३': '3',\n            '४': '4',\n            '५': '5',\n            '६': '6',\n            '७': '7',\n            '८': '8',\n            '९': '9',\n            '०': '0',\n        };\n\n    function relativeTimeMr(number, withoutSuffix, string, isFuture) {\n        var output = '';\n        if (withoutSuffix) {\n            switch (string) {\n                case 's':\n                    output = 'काही सेकंद';\n                    break;\n                case 'ss':\n                    output = '%d सेकंद';\n                    break;\n                case 'm':\n                    output = 'एक मिनिट';\n                    break;\n                case 'mm':\n                    output = '%d मिनिटे';\n                    break;\n                case 'h':\n                    output = 'एक तास';\n                    break;\n                case 'hh':\n                    output = '%d तास';\n                    break;\n                case 'd':\n                    output = 'एक दिवस';\n                    break;\n                case 'dd':\n                    output = '%d दिवस';\n                    break;\n                case 'M':\n                    output = 'एक महिना';\n                    break;\n                case 'MM':\n                    output = '%d महिने';\n                    break;\n                case 'y':\n                    output = 'एक वर्ष';\n                    break;\n                case 'yy':\n                    output = '%d वर्षे';\n                    break;\n            }\n        } else {\n            switch (string) {\n                case 's':\n                    output = 'काही सेकंदां';\n                    break;\n                case 'ss':\n                    output = '%d सेकंदां';\n                    break;\n                case 'm':\n                    output = 'एका मिनिटा';\n                    break;\n                case 'mm':\n                    output = '%d मिनिटां';\n                    break;\n                case 'h':\n                    output = 'एका तासा';\n                    break;\n                case 'hh':\n                    output = '%d तासां';\n                    break;\n                case 'd':\n                    output = 'एका दिवसा';\n                    break;\n                case 'dd':\n                    output = '%d दिवसां';\n                    break;\n                case 'M':\n                    output = 'एका महिन्या';\n                    break;\n                case 'MM':\n                    output = '%d महिन्यां';\n                    break;\n                case 'y':\n                    output = 'एका वर्षा';\n                    break;\n                case 'yy':\n                    output = '%d वर्षां';\n                    break;\n            }\n        }\n        return output.replace(/%d/i, number);\n    }\n\n    var mr = moment.defineLocale('mr', {\n        months: 'जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split(\n            '_'\n        ),\n        monthsShort:\n            'जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),\n        weekdaysShort: 'रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि'.split('_'),\n        weekdaysMin: 'र_सो_मं_बु_गु_शु_श'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm वाजता',\n            LTS: 'A h:mm:ss वाजता',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm वाजता',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm वाजता',\n        },\n        calendar: {\n            sameDay: '[आज] LT',\n            nextDay: '[उद्या] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[काल] LT',\n            lastWeek: '[मागील] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%sमध्ये',\n            past: '%sपूर्वी',\n            s: relativeTimeMr,\n            ss: relativeTimeMr,\n            m: relativeTimeMr,\n            mm: relativeTimeMr,\n            h: relativeTimeMr,\n            hh: relativeTimeMr,\n            d: relativeTimeMr,\n            dd: relativeTimeMr,\n            M: relativeTimeMr,\n            MM: relativeTimeMr,\n            y: relativeTimeMr,\n            yy: relativeTimeMr,\n        },\n        preparse: function (string) {\n            return string.replace(/[१२३४५६७८९०]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        meridiemParse: /पहाटे|सकाळी|दुपारी|सायंकाळी|रात्री/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'पहाटे' || meridiem === 'सकाळी') {\n                return hour;\n            } else if (\n                meridiem === 'दुपारी' ||\n                meridiem === 'सायंकाळी' ||\n                meridiem === 'रात्री'\n            ) {\n                return hour >= 12 ? hour : hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour >= 0 && hour < 6) {\n                return 'पहाटे';\n            } else if (hour < 12) {\n                return 'सकाळी';\n            } else if (hour < 17) {\n                return 'दुपारी';\n            } else if (hour < 20) {\n                return 'सायंकाळी';\n            } else {\n                return 'रात्री';\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return mr;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9tci5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsa0RBQVc7QUFDckUsR0FBRyxDQUNzQjtBQUN6QixDQUFDLDRCQUE0Qjs7QUFFN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9tci5qcz8zYmM0Il0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBNYXJhdGhpIFttcl1cbi8vISBhdXRob3IgOiBIYXJzaGFkIEthbGUgOiBodHRwczovL2dpdGh1Yi5jb20va2FsZWh2XG4vLyEgYXV0aG9yIDogVml2ZWsgQXRoYWx5ZSA6IGh0dHBzOi8vZ2l0aHViLmNvbS92bmF0aGFseWVcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBzeW1ib2xNYXAgPSB7XG4gICAgICAgICAgICAxOiAn4KWnJyxcbiAgICAgICAgICAgIDI6ICfgpagnLFxuICAgICAgICAgICAgMzogJ+ClqScsXG4gICAgICAgICAgICA0OiAn4KWqJyxcbiAgICAgICAgICAgIDU6ICfgpasnLFxuICAgICAgICAgICAgNjogJ+ClrCcsXG4gICAgICAgICAgICA3OiAn4KWtJyxcbiAgICAgICAgICAgIDg6ICfgpa4nLFxuICAgICAgICAgICAgOTogJ+ClrycsXG4gICAgICAgICAgICAwOiAn4KWmJyxcbiAgICAgICAgfSxcbiAgICAgICAgbnVtYmVyTWFwID0ge1xuICAgICAgICAgICAgJ+Clpyc6ICcxJyxcbiAgICAgICAgICAgICfgpagnOiAnMicsXG4gICAgICAgICAgICAn4KWpJzogJzMnLFxuICAgICAgICAgICAgJ+Clqic6ICc0JyxcbiAgICAgICAgICAgICfgpasnOiAnNScsXG4gICAgICAgICAgICAn4KWsJzogJzYnLFxuICAgICAgICAgICAgJ+ClrSc6ICc3JyxcbiAgICAgICAgICAgICfgpa4nOiAnOCcsXG4gICAgICAgICAgICAn4KWvJzogJzknLFxuICAgICAgICAgICAgJ+Clpic6ICcwJyxcbiAgICAgICAgfTtcblxuICAgIGZ1bmN0aW9uIHJlbGF0aXZlVGltZU1yKG51bWJlciwgd2l0aG91dFN1ZmZpeCwgc3RyaW5nLCBpc0Z1dHVyZSkge1xuICAgICAgICB2YXIgb3V0cHV0ID0gJyc7XG4gICAgICAgIGlmICh3aXRob3V0U3VmZml4KSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHN0cmluZykge1xuICAgICAgICAgICAgICAgIGNhc2UgJ3MnOlxuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSAn4KSV4KS+4KS54KWAIOCkuOClh+CkleCkguCkpic7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3NzJzpcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gJyVkIOCkuOClh+CkleCkguCkpic7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ20nOlxuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSAn4KSP4KSVIOCkruCkv+CkqOCkv+Cknyc7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ21tJzpcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gJyVkIOCkruCkv+CkqOCkv+Ckn+Clhyc7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2gnOlxuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSAn4KSP4KSVIOCkpOCkvuCkuCc7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2hoJzpcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gJyVkIOCkpOCkvuCkuCc7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSAn4KSP4KSVIOCkpuCkv+CkteCkuCc7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2RkJzpcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gJyVkIOCkpuCkv+CkteCkuCc7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ00nOlxuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSAn4KSP4KSVIOCkruCkueCkv+CkqOCkvic7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ01NJzpcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gJyVkIOCkruCkueCkv+CkqOClhyc7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3knOlxuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSAn4KSP4KSVIOCkteCksOCljeCktyc7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3l5JzpcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gJyVkIOCkteCksOCljeCkt+Clhyc7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3dpdGNoIChzdHJpbmcpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdzJzpcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gJ+CkleCkvuCkueClgCDgpLjgpYfgpJXgpILgpKbgpL7gpIInO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdzcyc6XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9ICclZCDgpLjgpYfgpJXgpILgpKbgpL7gpIInO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdtJzpcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gJ+Ckj+CkleCkviDgpK7gpL/gpKjgpL/gpJ/gpL4nO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdtbSc6XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9ICclZCDgpK7gpL/gpKjgpL/gpJ/gpL7gpIInO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdoJzpcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gJ+Ckj+CkleCkviDgpKTgpL7gpLjgpL4nO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdoaCc6XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9ICclZCDgpKTgpL7gpLjgpL7gpIInO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gJ+Ckj+CkleCkviDgpKbgpL/gpLXgpLjgpL4nO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdkZCc6XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9ICclZCDgpKbgpL/gpLXgpLjgpL7gpIInO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdNJzpcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gJ+Ckj+CkleCkviDgpK7gpLngpL/gpKjgpY3gpK/gpL4nO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdNTSc6XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9ICclZCDgpK7gpLngpL/gpKjgpY3gpK/gpL7gpIInO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICd5JzpcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gJ+Ckj+CkleCkviDgpLXgpLDgpY3gpLfgpL4nO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICd5eSc6XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9ICclZCDgpLXgpLDgpY3gpLfgpL7gpIInO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0cHV0LnJlcGxhY2UoLyVkL2ksIG51bWJlcik7XG4gICAgfVxuXG4gICAgdmFyIG1yID0gbW9tZW50LmRlZmluZUxvY2FsZSgnbXInLCB7XG4gICAgICAgIG1vbnRoczogJ+CknOCkvuCkqOClh+CkteCkvuCksOClgF/gpKvgpYfgpKzgpY3gpLDgpYHgpLXgpL7gpLDgpYBf4KSu4KS+4KSw4KWN4KSaX+Ckj+CkquCljeCksOCkv+Cksl/gpK7gpYdf4KSc4KWC4KSoX+CknOClgeCksuCliF/gpJHgpJfgpLjgpY3gpJ9f4KS44KSq4KWN4KSf4KWH4KSC4KSs4KSwX+CkkeCkleCljeCkn+Cli+CkrOCksF/gpKjgpYvgpLXgpY3gpLngpYfgpILgpKzgpLBf4KSh4KS/4KS44KWH4KSC4KSs4KSwJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICfgpJzgpL7gpKjgpYcuX+Ckq+Clh+CkrOCljeCksOClgS5f4KSu4KS+4KSw4KWN4KSaLl/gpI/gpKrgpY3gpLDgpL8uX+CkruClhy5f4KSc4KWC4KSoLl/gpJzgpYHgpLLgpYguX+CkkeCkly5f4KS44KSq4KWN4KSf4KWH4KSCLl/gpJHgpJXgpY3gpJ/gpYsuX+CkqOCli+CkteCljeCkueClh+Ckgi5f4KSh4KS/4KS44KWH4KSCLicuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czogJ+CksOCkteCkv+CkteCkvuCksF/gpLjgpYvgpK7gpLXgpL7gpLBf4KSu4KSC4KSX4KSz4KS14KS+4KSwX+CkrOClgeCkp+CkteCkvuCksF/gpJfgpYHgpLDgpYLgpLXgpL7gpLBf4KS24KWB4KSV4KWN4KSw4KS14KS+4KSwX+CktuCkqOCkv+CkteCkvuCksCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ+CksOCkteCkv1/gpLjgpYvgpK5f4KSu4KSC4KSX4KSzX+CkrOClgeCkp1/gpJfgpYHgpLDgpYJf4KS24KWB4KSV4KWN4KSwX+CktuCkqOCkvycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfgpLBf4KS44KWLX+CkruCkgl/gpKzgpYFf4KSX4KWBX+CktuClgV/gpLYnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0EgaDptbSDgpLXgpL7gpJzgpKTgpL4nLFxuICAgICAgICAgICAgTFRTOiAnQSBoOm1tOnNzIOCkteCkvuCknOCkpOCkvicsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZLCBBIGg6bW0g4KS14KS+4KSc4KSk4KS+JyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tIOCkteCkvuCknOCkpOCkvicsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW+CkhuCknF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vgpIngpKbgpY3gpK/gpL5dIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCwgTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vgpJXgpL7gpLJdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW+CkruCkvuCkl+ClgOCksl0gZGRkZCwgTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICclc+CkruCkp+CljeCkr+ClhycsXG4gICAgICAgICAgICBwYXN0OiAnJXPgpKrgpYLgpLDgpY3gpLXgpYAnLFxuICAgICAgICAgICAgczogcmVsYXRpdmVUaW1lTXIsXG4gICAgICAgICAgICBzczogcmVsYXRpdmVUaW1lTXIsXG4gICAgICAgICAgICBtOiByZWxhdGl2ZVRpbWVNcixcbiAgICAgICAgICAgIG1tOiByZWxhdGl2ZVRpbWVNcixcbiAgICAgICAgICAgIGg6IHJlbGF0aXZlVGltZU1yLFxuICAgICAgICAgICAgaGg6IHJlbGF0aXZlVGltZU1yLFxuICAgICAgICAgICAgZDogcmVsYXRpdmVUaW1lTXIsXG4gICAgICAgICAgICBkZDogcmVsYXRpdmVUaW1lTXIsXG4gICAgICAgICAgICBNOiByZWxhdGl2ZVRpbWVNcixcbiAgICAgICAgICAgIE1NOiByZWxhdGl2ZVRpbWVNcixcbiAgICAgICAgICAgIHk6IHJlbGF0aXZlVGltZU1yLFxuICAgICAgICAgICAgeXk6IHJlbGF0aXZlVGltZU1yLFxuICAgICAgICB9LFxuICAgICAgICBwcmVwYXJzZTogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9b4KWn4KWo4KWp4KWq4KWr4KWs4KWt4KWu4KWv4KWmXS9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyTWFwW21hdGNoXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBwb3N0Zm9ybWF0OiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1xcZC9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3ltYm9sTWFwW21hdGNoXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv4KSq4KS54KS+4KSf4KWHfOCkuOCkleCkvuCks+ClgHzgpKbgpYHgpKrgpL7gpLDgpYB84KS44KS+4KSv4KSC4KSV4KS+4KSz4KWAfOCksOCkvuCkpOCljeCksOClgC8sXG4gICAgICAgIG1lcmlkaWVtSG91cjogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXJpZGllbSA9PT0gJ+CkquCkueCkvuCkn+ClhycgfHwgbWVyaWRpZW0gPT09ICfgpLjgpJXgpL7gpLPgpYAnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIG1lcmlkaWVtID09PSAn4KSm4KWB4KSq4KS+4KSw4KWAJyB8fFxuICAgICAgICAgICAgICAgIG1lcmlkaWVtID09PSAn4KS44KS+4KSv4KSC4KSV4KS+4KSz4KWAJyB8fFxuICAgICAgICAgICAgICAgIG1lcmlkaWVtID09PSAn4KSw4KS+4KSk4KWN4KSw4KWAJ1xuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgPj0gMTIgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPj0gMCAmJiBob3VyIDwgNikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4KSq4KS54KS+4KSf4KWHJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgpLjgpJXgpL7gpLPgpYAnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CkpuClgeCkquCkvuCksOClgCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAyMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4KS44KS+4KSv4KSC4KSV4KS+4KSz4KWAJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgpLDgpL7gpKTgpY3gpLDgpYAnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDAsIC8vIFN1bmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA2LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA2dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbXI7XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/mr.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/ms-my.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/ms-my.js ***!
  \*********************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Malay [ms-my]\n//! note : DEPRECATED, the correct one is [ms]\n//! author : Weldan Jamili : https://github.com/weldan\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var msMy = moment.defineLocale('ms-my', {\n        months: 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),\n        weekdays: 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),\n        weekdaysShort: 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),\n        weekdaysMin: 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),\n        longDateFormat: {\n            LT: 'HH.mm',\n            LTS: 'HH.mm.ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY [pukul] HH.mm',\n            LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',\n        },\n        meridiemParse: /pagi|tengahari|petang|malam/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'pagi') {\n                return hour;\n            } else if (meridiem === 'tengahari') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'petang' || meridiem === 'malam') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 11) {\n                return 'pagi';\n            } else if (hours < 15) {\n                return 'tengahari';\n            } else if (hours < 19) {\n                return 'petang';\n            } else {\n                return 'malam';\n            }\n        },\n        calendar: {\n            sameDay: '[Hari ini pukul] LT',\n            nextDay: '[Esok pukul] LT',\n            nextWeek: 'dddd [pukul] LT',\n            lastDay: '[Kelmarin pukul] LT',\n            lastWeek: 'dddd [lepas pukul] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'dalam %s',\n            past: '%s yang lepas',\n            s: 'beberapa saat',\n            ss: '%d saat',\n            m: 'seminit',\n            mm: '%d minit',\n            h: 'sejam',\n            hh: '%d jam',\n            d: 'sehari',\n            dd: '%d hari',\n            M: 'sebulan',\n            MM: '%d bulan',\n            y: 'setahun',\n            yy: '%d tahun',\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return msMy;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9tcy1teS5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsa0RBQVc7QUFDckUsR0FBRyxDQUNzQjtBQUN6QixDQUFDLDRCQUE0Qjs7QUFFN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9tcy1teS5qcz9mOGIyIl0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBNYWxheSBbbXMtbXldXG4vLyEgbm90ZSA6IERFUFJFQ0FURUQsIHRoZSBjb3JyZWN0IG9uZSBpcyBbbXNdXG4vLyEgYXV0aG9yIDogV2VsZGFuIEphbWlsaSA6IGh0dHBzOi8vZ2l0aHViLmNvbS93ZWxkYW5cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBtc015ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnbXMtbXknLCB7XG4gICAgICAgIG1vbnRoczogJ0phbnVhcmlfRmVicnVhcmlfTWFjX0FwcmlsX01laV9KdW5fSnVsYWlfT2dvc19TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3ZlbWJlcl9EaXNlbWJlcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdKYW5fRmViX01hY19BcHJfTWVpX0p1bl9KdWxfT2dzX1NlcF9Pa3RfTm92X0Rpcycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICdBaGFkX0lzbmluX1NlbGFzYV9SYWJ1X0toYW1pc19KdW1hYXRfU2FidHUnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdBaGRfSXNuX1NlbF9SYWJfS2hhX0p1bV9TYWInLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnQWhfSXNfU2xfUmJfS21fSm1fU2InLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hILm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hILm1tLnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgW3B1a3VsXSBISC5tbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgW3B1a3VsXSBISC5tbScsXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC9wYWdpfHRlbmdhaGFyaXxwZXRhbmd8bWFsYW0vLFxuICAgICAgICBtZXJpZGllbUhvdXI6IGZ1bmN0aW9uIChob3VyLCBtZXJpZGllbSkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWVyaWRpZW0gPT09ICdwYWdpJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ3RlbmdhaGFyaScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA+PSAxMSA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAncGV0YW5nJyB8fCBtZXJpZGllbSA9PT0gJ21hbGFtJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyICsgMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91cnMsIG1pbnV0ZXMsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VycyA8IDExKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdwYWdpJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91cnMgPCAxNSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAndGVuZ2FoYXJpJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91cnMgPCAxOSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAncGV0YW5nJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdtYWxhbSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW0hhcmkgaW5pIHB1a3VsXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW0Vzb2sgcHVrdWxdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbcHVrdWxdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbS2VsbWFyaW4gcHVrdWxdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnZGRkZCBbbGVwYXMgcHVrdWxdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnZGFsYW0gJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzIHlhbmcgbGVwYXMnLFxuICAgICAgICAgICAgczogJ2JlYmVyYXBhIHNhYXQnLFxuICAgICAgICAgICAgc3M6ICclZCBzYWF0JyxcbiAgICAgICAgICAgIG06ICdzZW1pbml0JyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWluaXQnLFxuICAgICAgICAgICAgaDogJ3NlamFtJyxcbiAgICAgICAgICAgIGhoOiAnJWQgamFtJyxcbiAgICAgICAgICAgIGQ6ICdzZWhhcmknLFxuICAgICAgICAgICAgZGQ6ICclZCBoYXJpJyxcbiAgICAgICAgICAgIE06ICdzZWJ1bGFuJyxcbiAgICAgICAgICAgIE1NOiAnJWQgYnVsYW4nLFxuICAgICAgICAgICAgeTogJ3NldGFodW4nLFxuICAgICAgICAgICAgeXk6ICclZCB0YWh1bicsXG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDcsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDd0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBtc015O1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/ms-my.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/ms.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/ms.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Malay [ms]\n//! author : Weldan Jamili : https://github.com/weldan\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var ms = moment.defineLocale('ms', {\n        months: 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),\n        weekdays: 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),\n        weekdaysShort: 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),\n        weekdaysMin: 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),\n        longDateFormat: {\n            LT: 'HH.mm',\n            LTS: 'HH.mm.ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY [pukul] HH.mm',\n            LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',\n        },\n        meridiemParse: /pagi|tengahari|petang|malam/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'pagi') {\n                return hour;\n            } else if (meridiem === 'tengahari') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'petang' || meridiem === 'malam') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 11) {\n                return 'pagi';\n            } else if (hours < 15) {\n                return 'tengahari';\n            } else if (hours < 19) {\n                return 'petang';\n            } else {\n                return 'malam';\n            }\n        },\n        calendar: {\n            sameDay: '[Hari ini pukul] LT',\n            nextDay: '[Esok pukul] LT',\n            nextWeek: 'dddd [pukul] LT',\n            lastDay: '[Kelmarin pukul] LT',\n            lastWeek: 'dddd [lepas pukul] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'dalam %s',\n            past: '%s yang lepas',\n            s: 'beberapa saat',\n            ss: '%d saat',\n            m: 'seminit',\n            mm: '%d minit',\n            h: 'sejam',\n            hh: '%d jam',\n            d: 'sehari',\n            dd: '%d hari',\n            M: 'sebulan',\n            MM: '%d bulan',\n            y: 'setahun',\n            yy: '%d tahun',\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return ms;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9tcy5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbXMuanM/NThjZiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogTWFsYXkgW21zXVxuLy8hIGF1dGhvciA6IFdlbGRhbiBKYW1pbGkgOiBodHRwczovL2dpdGh1Yi5jb20vd2VsZGFuXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgbXMgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdtcycsIHtcbiAgICAgICAgbW9udGhzOiAnSmFudWFyaV9GZWJydWFyaV9NYWNfQXByaWxfTWVpX0p1bl9KdWxhaV9PZ29zX1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0Rpc2VtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ0phbl9GZWJfTWFjX0Fwcl9NZWlfSnVuX0p1bF9PZ3NfU2VwX09rdF9Ob3ZfRGlzJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ0FoYWRfSXNuaW5fU2VsYXNhX1JhYnVfS2hhbWlzX0p1bWFhdF9TYWJ0dScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ0FoZF9Jc25fU2VsX1JhYl9LaGFfSnVtX1NhYicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdBaF9Jc19TbF9SYl9LbV9KbV9TYicuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEgubW0nLFxuICAgICAgICAgICAgTFRTOiAnSEgubW0uc3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBbcHVrdWxdIEhILm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBbcHVrdWxdIEhILm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL3BhZ2l8dGVuZ2FoYXJpfHBldGFuZ3xtYWxhbS8sXG4gICAgICAgIG1lcmlkaWVtSG91cjogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXJpZGllbSA9PT0gJ3BhZ2knKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAndGVuZ2FoYXJpJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyID49IDExID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICdwZXRhbmcnIHx8IG1lcmlkaWVtID09PSAnbWFsYW0nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VycywgbWludXRlcywgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXJzIDwgMTEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3BhZ2knO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VycyA8IDE1KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICd0ZW5nYWhhcmknO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VycyA8IDE5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdwZXRhbmcnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ21hbGFtJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbSGFyaSBpbmkgcHVrdWxdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbRXNvayBwdWt1bF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFtwdWt1bF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tLZWxtYXJpbiBwdWt1bF0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFtsZXBhcyBwdWt1bF0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdkYWxhbSAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMgeWFuZyBsZXBhcycsXG4gICAgICAgICAgICBzOiAnYmViZXJhcGEgc2FhdCcsXG4gICAgICAgICAgICBzczogJyVkIHNhYXQnLFxuICAgICAgICAgICAgbTogJ3NlbWluaXQnLFxuICAgICAgICAgICAgbW06ICclZCBtaW5pdCcsXG4gICAgICAgICAgICBoOiAnc2VqYW0nLFxuICAgICAgICAgICAgaGg6ICclZCBqYW0nLFxuICAgICAgICAgICAgZDogJ3NlaGFyaScsXG4gICAgICAgICAgICBkZDogJyVkIGhhcmknLFxuICAgICAgICAgICAgTTogJ3NlYnVsYW4nLFxuICAgICAgICAgICAgTU06ICclZCBidWxhbicsXG4gICAgICAgICAgICB5OiAnc2V0YWh1bicsXG4gICAgICAgICAgICB5eTogJyVkIHRhaHVuJyxcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNywgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gN3RoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG1zO1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/ms.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/mt.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/mt.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Maltese (Malta) [mt]\n//! author : Alessandro Maruccia : https://github.com/alesma\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var mt = moment.defineLocale('mt', {\n        months: 'Jannar_Frar_Marzu_April_Mejju_Ġunju_Lulju_Awwissu_Settembru_Ottubru_Novembru_Diċembru'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Fra_Mar_Apr_Mej_Ġun_Lul_Aww_Set_Ott_Nov_Diċ'.split('_'),\n        weekdays:\n            'Il-Ħadd_It-Tnejn_It-Tlieta_L-Erbgħa_Il-Ħamis_Il-Ġimgħa_Is-Sibt'.split(\n                '_'\n            ),\n        weekdaysShort: 'Ħad_Tne_Tli_Erb_Ħam_Ġim_Sib'.split('_'),\n        weekdaysMin: 'Ħa_Tn_Tl_Er_Ħa_Ġi_Si'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Illum fil-]LT',\n            nextDay: '[Għada fil-]LT',\n            nextWeek: 'dddd [fil-]LT',\n            lastDay: '[Il-bieraħ fil-]LT',\n            lastWeek: 'dddd [li għadda] [fil-]LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'f’ %s',\n            past: '%s ilu',\n            s: 'ftit sekondi',\n            ss: '%d sekondi',\n            m: 'minuta',\n            mm: '%d minuti',\n            h: 'siegħa',\n            hh: '%d siegħat',\n            d: 'ġurnata',\n            dd: '%d ġranet',\n            M: 'xahar',\n            MM: '%d xhur',\n            y: 'sena',\n            yy: '%d sni',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return mt;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9tdC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbXQuanM/ZTFiNyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogTWFsdGVzZSAoTWFsdGEpIFttdF1cbi8vISBhdXRob3IgOiBBbGVzc2FuZHJvIE1hcnVjY2lhIDogaHR0cHM6Ly9naXRodWIuY29tL2FsZXNtYVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIG10ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnbXQnLCB7XG4gICAgICAgIG1vbnRoczogJ0phbm5hcl9GcmFyX01hcnp1X0FwcmlsX01lamp1X8SgdW5qdV9MdWxqdV9Bd3dpc3N1X1NldHRlbWJydV9PdHR1YnJ1X05vdmVtYnJ1X0RpxItlbWJydScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdKYW5fRnJhX01hcl9BcHJfTWVqX8SgdW5fTHVsX0F3d19TZXRfT3R0X05vdl9EacSLJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czpcbiAgICAgICAgICAgICdJbC3EpmFkZF9JdC1UbmVqbl9JdC1UbGlldGFfTC1FcmJnxKdhX0lsLcSmYW1pc19JbC3EoGltZ8SnYV9Jcy1TaWJ0Jy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfEpmFkX1RuZV9UbGlfRXJiX8SmYW1fxKBpbV9TaWInLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnxKZhX1RuX1RsX0VyX8SmYV/EoGlfU2knLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbSWxsdW0gZmlsLV1MVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW0fEp2FkYSBmaWwtXUxUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbZmlsLV1MVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW0lsLWJpZXJhxKcgZmlsLV1MVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW2xpIGfEp2FkZGFdIFtmaWwtXUxUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnZuKAmSAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMgaWx1JyxcbiAgICAgICAgICAgIHM6ICdmdGl0IHNla29uZGknLFxuICAgICAgICAgICAgc3M6ICclZCBzZWtvbmRpJyxcbiAgICAgICAgICAgIG06ICdtaW51dGEnLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dGknLFxuICAgICAgICAgICAgaDogJ3NpZWfEp2EnLFxuICAgICAgICAgICAgaGg6ICclZCBzaWVnxKdhdCcsXG4gICAgICAgICAgICBkOiAnxKF1cm5hdGEnLFxuICAgICAgICAgICAgZGQ6ICclZCDEoXJhbmV0JyxcbiAgICAgICAgICAgIE06ICd4YWhhcicsXG4gICAgICAgICAgICBNTTogJyVkIHhodXInLFxuICAgICAgICAgICAgeTogJ3NlbmEnLFxuICAgICAgICAgICAgeXk6ICclZCBzbmknLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn3Cui8sXG4gICAgICAgIG9yZGluYWw6ICclZMK6JyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG10O1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/mt.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/my.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/my.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Burmese [my]\n//! author : Squar team, mysquar.com\n//! author : David Rossellat : https://github.com/gholadr\n//! author : Tin Aung Lin : https://github.com/thanyawzinmin\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '၁',\n            2: '၂',\n            3: '၃',\n            4: '၄',\n            5: '၅',\n            6: '၆',\n            7: '၇',\n            8: '၈',\n            9: '၉',\n            0: '၀',\n        },\n        numberMap = {\n            '၁': '1',\n            '၂': '2',\n            '၃': '3',\n            '၄': '4',\n            '၅': '5',\n            '၆': '6',\n            '၇': '7',\n            '၈': '8',\n            '၉': '9',\n            '၀': '0',\n        };\n\n    var my = moment.defineLocale('my', {\n        months: 'ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ'.split(\n            '_'\n        ),\n        monthsShort: 'ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ'.split('_'),\n        weekdays: 'တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ'.split(\n            '_'\n        ),\n        weekdaysShort: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),\n        weekdaysMin: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),\n\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[ယနေ.] LT [မှာ]',\n            nextDay: '[မနက်ဖြန်] LT [မှာ]',\n            nextWeek: 'dddd LT [မှာ]',\n            lastDay: '[မနေ.က] LT [မှာ]',\n            lastWeek: '[ပြီးခဲ့သော] dddd LT [မှာ]',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'လာမည့် %s မှာ',\n            past: 'လွန်ခဲ့သော %s က',\n            s: 'စက္ကန်.အနည်းငယ်',\n            ss: '%d စက္ကန့်',\n            m: 'တစ်မိနစ်',\n            mm: '%d မိနစ်',\n            h: 'တစ်နာရီ',\n            hh: '%d နာရီ',\n            d: 'တစ်ရက်',\n            dd: '%d ရက်',\n            M: 'တစ်လ',\n            MM: '%d လ',\n            y: 'တစ်နှစ်',\n            yy: '%d နှစ်',\n        },\n        preparse: function (string) {\n            return string.replace(/[၁၂၃၄၅၆၇၈၉၀]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return my;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9teS5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxrREFBVztBQUNyRSxHQUFHLENBQ3NCO0FBQ3pCLENBQUMsNEJBQTRCOztBQUU3Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9teS5qcz9mYzdmIl0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBCdXJtZXNlIFtteV1cbi8vISBhdXRob3IgOiBTcXVhciB0ZWFtLCBteXNxdWFyLmNvbVxuLy8hIGF1dGhvciA6IERhdmlkIFJvc3NlbGxhdCA6IGh0dHBzOi8vZ2l0aHViLmNvbS9naG9sYWRyXG4vLyEgYXV0aG9yIDogVGluIEF1bmcgTGluIDogaHR0cHM6Ly9naXRodWIuY29tL3RoYW55YXd6aW5taW5cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBzeW1ib2xNYXAgPSB7XG4gICAgICAgICAgICAxOiAn4YGBJyxcbiAgICAgICAgICAgIDI6ICfhgYInLFxuICAgICAgICAgICAgMzogJ+GBgycsXG4gICAgICAgICAgICA0OiAn4YGEJyxcbiAgICAgICAgICAgIDU6ICfhgYUnLFxuICAgICAgICAgICAgNjogJ+GBhicsXG4gICAgICAgICAgICA3OiAn4YGHJyxcbiAgICAgICAgICAgIDg6ICfhgYgnLFxuICAgICAgICAgICAgOTogJ+GBiScsXG4gICAgICAgICAgICAwOiAn4YGAJyxcbiAgICAgICAgfSxcbiAgICAgICAgbnVtYmVyTWFwID0ge1xuICAgICAgICAgICAgJ+GBgSc6ICcxJyxcbiAgICAgICAgICAgICfhgYInOiAnMicsXG4gICAgICAgICAgICAn4YGDJzogJzMnLFxuICAgICAgICAgICAgJ+GBhCc6ICc0JyxcbiAgICAgICAgICAgICfhgYUnOiAnNScsXG4gICAgICAgICAgICAn4YGGJzogJzYnLFxuICAgICAgICAgICAgJ+GBhyc6ICc3JyxcbiAgICAgICAgICAgICfhgYgnOiAnOCcsXG4gICAgICAgICAgICAn4YGJJzogJzknLFxuICAgICAgICAgICAgJ+GBgCc6ICcwJyxcbiAgICAgICAgfTtcblxuICAgIHZhciBteSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ215Jywge1xuICAgICAgICBtb250aHM6ICfhgIfhgJThgLrhgJThgJ3hgKvhgJvhgK5f4YCW4YCx4YCW4YCx4YCs4YC64YCd4YCr4YCb4YCuX+GAmeGAkOGAul/hgKfhgJXhgLzhgK5f4YCZ4YCxX+GAh+GAveGAlOGAul/hgIfhgLDhgJzhgK3hgK/hgIThgLpf4YCe4YC84YCC4YCv4YCQ4YC6X+GAheGAgOGAuuGAkOGAhOGAuuGAmOGArF/hgKHhgLHhgKzhgIDhgLrhgJDhgK3hgK/hgJjhgKxf4YCU4YCt4YCv4YCd4YCE4YC64YCY4YCsX+GAkuGAruGAh+GAhOGAuuGAmOGArCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICfhgIfhgJThgLpf4YCW4YCxX+GAmeGAkOGAul/hgJXhgLzhgK5f4YCZ4YCxX+GAh+GAveGAlOGAul/hgJzhgK3hgK/hgIThgLpf4YCe4YC8X+GAheGAgOGAul/hgKHhgLHhgKzhgIDhgLpf4YCU4YCt4YCvX+GAkuGAricuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICfhgJDhgJThgIThgLrhgLnhgILhgJThgL3hgLFf4YCQ4YCU4YCE4YC64YC54YCc4YCsX+GAoeGAhOGAuuGAueGAguGAq1/hgJfhgK/hgJLhgLnhgJPhgJ/hgLDhgLhf4YCA4YC84YCs4YCe4YCV4YCQ4YCx4YC4X+GAnuGAseGArOGAgOGAvOGArF/hgIXhgJThgLEnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfhgJThgL3hgLFf4YCc4YCsX+GAguGAq1/hgJ/hgLDhgLhf4YCA4YC84YCsX+GAnuGAseGArF/hgJThgLEnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn4YCU4YC94YCxX+GAnOGArF/hgILhgKtf4YCf4YCw4YC4X+GAgOGAvOGArF/hgJ7hgLHhgKxf4YCU4YCxJy5zcGxpdCgnXycpLFxuXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vhgJrhgJThgLEuXSBMVCBb4YCZ4YC+4YCsXScsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW+GAmeGAlOGAgOGAuuGAluGAvOGAlOGAul0gTFQgW+GAmeGAvuGArF0nLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIExUIFvhgJnhgL7hgKxdJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb4YCZ4YCU4YCxLuGAgF0gTFQgW+GAmeGAvuGArF0nLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdb4YCV4YC84YCu4YC44YCB4YCy4YC34YCe4YCx4YCsXSBkZGRkIExUIFvhgJnhgL7hgKxdJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAn4YCc4YCs4YCZ4YCK4YC64YC3ICVzIOGAmeGAvuGArCcsXG4gICAgICAgICAgICBwYXN0OiAn4YCc4YC94YCU4YC64YCB4YCy4YC34YCe4YCx4YCsICVzIOGAgCcsXG4gICAgICAgICAgICBzOiAn4YCF4YCA4YC54YCA4YCU4YC6LuGAoeGAlOGAiuGAuuGAuOGAhOGAmuGAuicsXG4gICAgICAgICAgICBzczogJyVkIOGAheGAgOGAueGAgOGAlOGAt+GAuicsXG4gICAgICAgICAgICBtOiAn4YCQ4YCF4YC64YCZ4YCt4YCU4YCF4YC6JyxcbiAgICAgICAgICAgIG1tOiAnJWQg4YCZ4YCt4YCU4YCF4YC6JyxcbiAgICAgICAgICAgIGg6ICfhgJDhgIXhgLrhgJThgKzhgJvhgK4nLFxuICAgICAgICAgICAgaGg6ICclZCDhgJThgKzhgJvhgK4nLFxuICAgICAgICAgICAgZDogJ+GAkOGAheGAuuGAm+GAgOGAuicsXG4gICAgICAgICAgICBkZDogJyVkIOGAm+GAgOGAuicsXG4gICAgICAgICAgICBNOiAn4YCQ4YCF4YC64YCcJyxcbiAgICAgICAgICAgIE1NOiAnJWQg4YCcJyxcbiAgICAgICAgICAgIHk6ICfhgJDhgIXhgLrhgJThgL7hgIXhgLonLFxuICAgICAgICAgICAgeXk6ICclZCDhgJThgL7hgIXhgLonLFxuICAgICAgICB9LFxuICAgICAgICBwcmVwYXJzZTogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9b4YGB4YGC4YGD4YGE4YGF4YGG4YGH4YGI4YGJ4YGAXS9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyTWFwW21hdGNoXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBwb3N0Zm9ybWF0OiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1xcZC9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3ltYm9sTWFwW21hdGNoXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbXk7XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/my.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/nb.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/nb.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Norwegian Bokmål [nb]\n//! authors : Espen Hovlandsdal : https://github.com/rexxars\n//!           Sigurd Gartmann : https://github.com/sigurdga\n//!           Stephen Ramthun : https://github.com/stephenramthun\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var nb = moment.defineLocale('nb', {\n        months: 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split(\n            '_'\n        ),\n        monthsShort:\n            'jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.'.split('_'),\n        monthsParseExact: true,\n        weekdays: 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),\n        weekdaysShort: 'sø._ma._ti._on._to._fr._lø.'.split('_'),\n        weekdaysMin: 'sø_ma_ti_on_to_fr_lø'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY [kl.] HH:mm',\n            LLLL: 'dddd D. MMMM YYYY [kl.] HH:mm',\n        },\n        calendar: {\n            sameDay: '[i dag kl.] LT',\n            nextDay: '[i morgen kl.] LT',\n            nextWeek: 'dddd [kl.] LT',\n            lastDay: '[i går kl.] LT',\n            lastWeek: '[forrige] dddd [kl.] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'om %s',\n            past: '%s siden',\n            s: 'noen sekunder',\n            ss: '%d sekunder',\n            m: 'ett minutt',\n            mm: '%d minutter',\n            h: 'en time',\n            hh: '%d timer',\n            d: 'en dag',\n            dd: '%d dager',\n            w: 'en uke',\n            ww: '%d uker',\n            M: 'en måned',\n            MM: '%d måneder',\n            y: 'ett år',\n            yy: '%d år',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return nb;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9uYi5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxrREFBVztBQUNyRSxHQUFHLENBQ3NCO0FBQ3pCLENBQUMsNEJBQTRCOztBQUU3Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxvQ0FBb0MsSUFBSTtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9uYi5qcz9kNmJlIl0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBOb3J3ZWdpYW4gQm9rbcOlbCBbbmJdXG4vLyEgYXV0aG9ycyA6IEVzcGVuIEhvdmxhbmRzZGFsIDogaHR0cHM6Ly9naXRodWIuY29tL3JleHhhcnNcbi8vISAgICAgICAgICAgU2lndXJkIEdhcnRtYW5uIDogaHR0cHM6Ly9naXRodWIuY29tL3NpZ3VyZGdhXG4vLyEgICAgICAgICAgIFN0ZXBoZW4gUmFtdGh1biA6IGh0dHBzOi8vZ2l0aHViLmNvbS9zdGVwaGVucmFtdGh1blxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIG5iID0gbW9tZW50LmRlZmluZUxvY2FsZSgnbmInLCB7XG4gICAgICAgIG1vbnRoczogJ2phbnVhcl9mZWJydWFyX21hcnNfYXByaWxfbWFpX2p1bmlfanVsaV9hdWd1c3Rfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVzZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ2phbi5fZmViLl9tYXJzX2Fwci5fbWFpX2p1bmlfanVsaV9hdWcuX3NlcC5fb2t0Ll9ub3YuX2Rlcy4nLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOiAnc8O4bmRhZ19tYW5kYWdfdGlyc2RhZ19vbnNkYWdfdG9yc2RhZ19mcmVkYWdfbMO4cmRhZycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ3PDuC5fbWEuX3RpLl9vbi5fdG8uX2ZyLl9sw7guJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ3PDuF9tYV90aV9vbl90b19mcl9sw7gnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdELiBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRC4gTU1NTSBZWVlZIFtrbC5dIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkIEQuIE1NTU0gWVlZWSBba2wuXSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW2kgZGFnIGtsLl0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tpIG1vcmdlbiBrbC5dIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBba2wuXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW2kgZ8OlciBrbC5dIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW2ZvcnJpZ2VdIGRkZGQgW2tsLl0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdvbSAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMgc2lkZW4nLFxuICAgICAgICAgICAgczogJ25vZW4gc2VrdW5kZXInLFxuICAgICAgICAgICAgc3M6ICclZCBzZWt1bmRlcicsXG4gICAgICAgICAgICBtOiAnZXR0IG1pbnV0dCcsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0dGVyJyxcbiAgICAgICAgICAgIGg6ICdlbiB0aW1lJyxcbiAgICAgICAgICAgIGhoOiAnJWQgdGltZXInLFxuICAgICAgICAgICAgZDogJ2VuIGRhZycsXG4gICAgICAgICAgICBkZDogJyVkIGRhZ2VyJyxcbiAgICAgICAgICAgIHc6ICdlbiB1a2UnLFxuICAgICAgICAgICAgd3c6ICclZCB1a2VyJyxcbiAgICAgICAgICAgIE06ICdlbiBtw6VuZWQnLFxuICAgICAgICAgICAgTU06ICclZCBtw6VuZWRlcicsXG4gICAgICAgICAgICB5OiAnZXR0IMOlcicsXG4gICAgICAgICAgICB5eTogJyVkIMOlcicsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWw6ICclZC4nLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbmI7XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/nb.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/ne.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/ne.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Nepalese [ne]\n//! author : suvash : https://github.com/suvash\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '१',\n            2: '२',\n            3: '३',\n            4: '४',\n            5: '५',\n            6: '६',\n            7: '७',\n            8: '८',\n            9: '९',\n            0: '०',\n        },\n        numberMap = {\n            '१': '1',\n            '२': '2',\n            '३': '3',\n            '४': '4',\n            '५': '5',\n            '६': '6',\n            '७': '7',\n            '८': '8',\n            '९': '9',\n            '०': '0',\n        };\n\n    var ne = moment.defineLocale('ne', {\n        months: 'जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर'.split(\n            '_'\n        ),\n        monthsShort:\n            'जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार'.split(\n            '_'\n        ),\n        weekdaysShort: 'आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.'.split('_'),\n        weekdaysMin: 'आ._सो._मं._बु._बि._शु._श.'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'Aको h:mm बजे',\n            LTS: 'Aको h:mm:ss बजे',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, Aको h:mm बजे',\n            LLLL: 'dddd, D MMMM YYYY, Aको h:mm बजे',\n        },\n        preparse: function (string) {\n            return string.replace(/[१२३४५६७८९०]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        meridiemParse: /राति|बिहान|दिउँसो|साँझ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'राति') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'बिहान') {\n                return hour;\n            } else if (meridiem === 'दिउँसो') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'साँझ') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 3) {\n                return 'राति';\n            } else if (hour < 12) {\n                return 'बिहान';\n            } else if (hour < 16) {\n                return 'दिउँसो';\n            } else if (hour < 20) {\n                return 'साँझ';\n            } else {\n                return 'राति';\n            }\n        },\n        calendar: {\n            sameDay: '[आज] LT',\n            nextDay: '[भोलि] LT',\n            nextWeek: '[आउँदो] dddd[,] LT',\n            lastDay: '[हिजो] LT',\n            lastWeek: '[गएको] dddd[,] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%sमा',\n            past: '%s अगाडि',\n            s: 'केही क्षण',\n            ss: '%d सेकेण्ड',\n            m: 'एक मिनेट',\n            mm: '%d मिनेट',\n            h: 'एक घण्टा',\n            hh: '%d घण्टा',\n            d: 'एक दिन',\n            dd: '%d दिन',\n            M: 'एक महिना',\n            MM: '%d महिना',\n            y: 'एक बर्ष',\n            yy: '%d बर्ष',\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return ne;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9uZS5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbmUuanM/ZjBlNSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogTmVwYWxlc2UgW25lXVxuLy8hIGF1dGhvciA6IHN1dmFzaCA6IGh0dHBzOi8vZ2l0aHViLmNvbS9zdXZhc2hcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBzeW1ib2xNYXAgPSB7XG4gICAgICAgICAgICAxOiAn4KWnJyxcbiAgICAgICAgICAgIDI6ICfgpagnLFxuICAgICAgICAgICAgMzogJ+ClqScsXG4gICAgICAgICAgICA0OiAn4KWqJyxcbiAgICAgICAgICAgIDU6ICfgpasnLFxuICAgICAgICAgICAgNjogJ+ClrCcsXG4gICAgICAgICAgICA3OiAn4KWtJyxcbiAgICAgICAgICAgIDg6ICfgpa4nLFxuICAgICAgICAgICAgOTogJ+ClrycsXG4gICAgICAgICAgICAwOiAn4KWmJyxcbiAgICAgICAgfSxcbiAgICAgICAgbnVtYmVyTWFwID0ge1xuICAgICAgICAgICAgJ+Clpyc6ICcxJyxcbiAgICAgICAgICAgICfgpagnOiAnMicsXG4gICAgICAgICAgICAn4KWpJzogJzMnLFxuICAgICAgICAgICAgJ+Clqic6ICc0JyxcbiAgICAgICAgICAgICfgpasnOiAnNScsXG4gICAgICAgICAgICAn4KWsJzogJzYnLFxuICAgICAgICAgICAgJ+ClrSc6ICc3JyxcbiAgICAgICAgICAgICfgpa4nOiAnOCcsXG4gICAgICAgICAgICAn4KWvJzogJzknLFxuICAgICAgICAgICAgJ+Clpic6ICcwJyxcbiAgICAgICAgfTtcblxuICAgIHZhciBuZSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ25lJywge1xuICAgICAgICBtb250aHM6ICfgpJzgpKjgpLXgpLDgpYBf4KSr4KWH4KSs4KWN4KSw4KWB4KS14KSw4KWAX+CkruCkvuCksOCljeCkml/gpIXgpKrgpY3gpLDgpL/gpLJf4KSu4KSIX+CknOClgeCkqF/gpJzgpYHgpLLgpL7gpIhf4KSF4KSX4KS34KWN4KSfX+CkuOClh+CkquCljeCkn+Clh+CkruCljeCkrOCksF/gpIXgpJXgpY3gpJ/gpYvgpKzgpLBf4KSo4KWL4KSt4KWH4KSu4KWN4KSs4KSwX+CkoeCkv+CkuOClh+CkruCljeCkrOCksCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAn4KSc4KSoLl/gpKvgpYfgpKzgpY3gpLDgpYEuX+CkruCkvuCksOCljeCkml/gpIXgpKrgpY3gpLDgpL8uX+CkruCkiF/gpJzgpYHgpKhf4KSc4KWB4KSy4KS+4KSILl/gpIXgpJcuX+CkuOClh+CkquCljeCkny5f4KSF4KSV4KWN4KSf4KWLLl/gpKjgpYvgpK3gpYcuX+CkoeCkv+CkuOClhy4nLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6ICfgpIbgpIfgpKTgpKzgpL7gpLBf4KS44KWL4KSu4KSs4KS+4KSwX+CkruCkmeCljeCkl+CksuCkrOCkvuCksF/gpKzgpYHgpKfgpKzgpL7gpLBf4KSs4KS/4KS54KS/4KSs4KS+4KSwX+CktuClgeCkleCljeCksOCkrOCkvuCksF/gpLbgpKjgpL/gpKzgpL7gpLAnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfgpIbgpIfgpKQuX+CkuOCli+Ckri5f4KSu4KSZ4KWN4KSX4KSyLl/gpKzgpYHgpKcuX+CkrOCkv+CkueCkvy5f4KS24KWB4KSV4KWN4KSwLl/gpLbgpKjgpL8uJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ+Ckhi5f4KS44KWLLl/gpK7gpIIuX+CkrOClgS5f4KSs4KS/Ll/gpLbgpYEuX+Ckti4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnQeCkleCliyBoOm1tIOCkrOCknOClhycsXG4gICAgICAgICAgICBMVFM6ICdB4KSV4KWLIGg6bW06c3Mg4KSs4KSc4KWHJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVksIEHgpJXgpYsgaDptbSDgpKzgpJzgpYcnLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZLCBB4KSV4KWLIGg6bW0g4KSs4KSc4KWHJyxcbiAgICAgICAgfSxcbiAgICAgICAgcHJlcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvW+Clp+ClqOClqeClquClq+ClrOClreClruClr+Clpl0vZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlck1hcFttYXRjaF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgcG9zdGZvcm1hdDogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9cXGQvZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN5bWJvbE1hcFttYXRjaF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL+CksOCkvuCkpOCkv3zgpKzgpL/gpLngpL7gpKh84KSm4KS/4KSJ4KSB4KS44KWLfOCkuOCkvuCkgeCknS8sXG4gICAgICAgIG1lcmlkaWVtSG91cjogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXJpZGllbSA9PT0gJ+CksOCkvuCkpOCkvycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA8IDQgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CkrOCkv+CkueCkvuCkqCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfgpKbgpL/gpIngpIHgpLjgpYsnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgPj0gMTAgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CkuOCkvuCkgeCknScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCAzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgpLDgpL7gpKTgpL8nO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CkrOCkv+CkueCkvuCkqCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxNikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4KSm4KS/4KSJ4KSB4KS44KWLJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDIwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgpLjgpL7gpIHgpJ0nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CksOCkvuCkpOCkvyc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW+CkhuCknF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vgpK3gpYvgpLLgpL9dIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnW+CkhuCkieCkgeCkpuCli10gZGRkZFssXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW+CkueCkv+CknOCli10gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdb4KSX4KSP4KSV4KWLXSBkZGRkWyxdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXPgpK7gpL4nLFxuICAgICAgICAgICAgcGFzdDogJyVzIOCkheCkl+CkvuCkoeCkvycsXG4gICAgICAgICAgICBzOiAn4KSV4KWH4KS54KWAIOCkleCljeCkt+CkoycsXG4gICAgICAgICAgICBzczogJyVkIOCkuOClh+CkleClh+Cko+CljeCkoScsXG4gICAgICAgICAgICBtOiAn4KSP4KSVIOCkruCkv+CkqOClh+CknycsXG4gICAgICAgICAgICBtbTogJyVkIOCkruCkv+CkqOClh+CknycsXG4gICAgICAgICAgICBoOiAn4KSP4KSVIOCkmOCko+CljeCkn+CkvicsXG4gICAgICAgICAgICBoaDogJyVkIOCkmOCko+CljeCkn+CkvicsXG4gICAgICAgICAgICBkOiAn4KSP4KSVIOCkpuCkv+CkqCcsXG4gICAgICAgICAgICBkZDogJyVkIOCkpuCkv+CkqCcsXG4gICAgICAgICAgICBNOiAn4KSP4KSVIOCkruCkueCkv+CkqOCkvicsXG4gICAgICAgICAgICBNTTogJyVkIOCkruCkueCkv+CkqOCkvicsXG4gICAgICAgICAgICB5OiAn4KSP4KSVIOCkrOCksOCljeCktycsXG4gICAgICAgICAgICB5eTogJyVkIOCkrOCksOCljeCktycsXG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMCwgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDYsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDZ0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBuZTtcblxufSkpKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/ne.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/nl-be.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/nl-be.js ***!
  \*********************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Dutch (Belgium) [nl-be]\n//! author : Joris Röling : https://github.com/jorisroling\n//! author : Jacob Middag : https://github.com/middagj\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var monthsShortWithDots =\n            'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'),\n        monthsShortWithoutDots =\n            'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n        monthsParse = [\n            /^jan/i,\n            /^feb/i,\n            /^maart|mrt.?$/i,\n            /^apr/i,\n            /^mei$/i,\n            /^jun[i.]?$/i,\n            /^jul[i.]?$/i,\n            /^aug/i,\n            /^sep/i,\n            /^okt/i,\n            /^nov/i,\n            /^dec/i,\n        ],\n        monthsRegex =\n            /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\\.?|feb\\.?|mrt\\.?|apr\\.?|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i;\n\n    var nlBe = moment.defineLocale('nl-be', {\n        months: 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split(\n            '_'\n        ),\n        monthsShort: function (m, format) {\n            if (!m) {\n                return monthsShortWithDots;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShortWithoutDots[m.month()];\n            } else {\n                return monthsShortWithDots[m.month()];\n            }\n        },\n\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex:\n            /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,\n        monthsShortStrictRegex:\n            /^(jan\\.?|feb\\.?|mrt\\.?|apr\\.?|mei|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i,\n\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n\n        weekdays:\n            'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),\n        weekdaysShort: 'zo._ma._di._wo._do._vr._za.'.split('_'),\n        weekdaysMin: 'zo_ma_di_wo_do_vr_za'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[vandaag om] LT',\n            nextDay: '[morgen om] LT',\n            nextWeek: 'dddd [om] LT',\n            lastDay: '[gisteren om] LT',\n            lastWeek: '[afgelopen] dddd [om] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'over %s',\n            past: '%s geleden',\n            s: 'een paar seconden',\n            ss: '%d seconden',\n            m: 'één minuut',\n            mm: '%d minuten',\n            h: 'één uur',\n            hh: '%d uur',\n            d: 'één dag',\n            dd: '%d dagen',\n            M: 'één maand',\n            MM: '%d maanden',\n            y: 'één jaar',\n            yy: '%d jaar',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n        ordinal: function (number) {\n            return (\n                number +\n                (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')\n            );\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return nlBe;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ubC1iZS5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsa0RBQVc7QUFDckUsR0FBRyxDQUNzQjtBQUN6QixDQUFDLDRCQUE0Qjs7QUFFN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbmwtYmUuanM/NjA2MyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogRHV0Y2ggKEJlbGdpdW0pIFtubC1iZV1cbi8vISBhdXRob3IgOiBKb3JpcyBSw7ZsaW5nIDogaHR0cHM6Ly9naXRodWIuY29tL2pvcmlzcm9saW5nXG4vLyEgYXV0aG9yIDogSmFjb2IgTWlkZGFnIDogaHR0cHM6Ly9naXRodWIuY29tL21pZGRhZ2pcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBtb250aHNTaG9ydFdpdGhEb3RzID1cbiAgICAgICAgICAgICdqYW4uX2ZlYi5fbXJ0Ll9hcHIuX21laV9qdW4uX2p1bC5fYXVnLl9zZXAuX29rdC5fbm92Ll9kZWMuJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydFdpdGhvdXREb3RzID1cbiAgICAgICAgICAgICdqYW5fZmViX21ydF9hcHJfbWVpX2p1bl9qdWxfYXVnX3NlcF9va3Rfbm92X2RlYycuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzUGFyc2UgPSBbXG4gICAgICAgICAgICAvXmphbi9pLFxuICAgICAgICAgICAgL15mZWIvaSxcbiAgICAgICAgICAgIC9ebWFhcnR8bXJ0Lj8kL2ksXG4gICAgICAgICAgICAvXmFwci9pLFxuICAgICAgICAgICAgL15tZWkkL2ksXG4gICAgICAgICAgICAvXmp1bltpLl0/JC9pLFxuICAgICAgICAgICAgL15qdWxbaS5dPyQvaSxcbiAgICAgICAgICAgIC9eYXVnL2ksXG4gICAgICAgICAgICAvXnNlcC9pLFxuICAgICAgICAgICAgL15va3QvaSxcbiAgICAgICAgICAgIC9ebm92L2ksXG4gICAgICAgICAgICAvXmRlYy9pLFxuICAgICAgICBdLFxuICAgICAgICBtb250aHNSZWdleCA9XG4gICAgICAgICAgICAvXihqYW51YXJpfGZlYnJ1YXJpfG1hYXJ0fGFwcmlsfG1laXxqdVtubF1pfGF1Z3VzdHVzfHNlcHRlbWJlcnxva3RvYmVyfG5vdmVtYmVyfGRlY2VtYmVyfGphblxcLj98ZmViXFwuP3xtcnRcXC4/fGFwclxcLj98anVbbmxdXFwuP3xhdWdcXC4/fHNlcFxcLj98b2t0XFwuP3xub3ZcXC4/fGRlY1xcLj8pL2k7XG5cbiAgICB2YXIgbmxCZSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ25sLWJlJywge1xuICAgICAgICBtb250aHM6ICdqYW51YXJpX2ZlYnJ1YXJpX21hYXJ0X2FwcmlsX21laV9qdW5pX2p1bGlfYXVndXN0dXNfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVjZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiBmdW5jdGlvbiAobSwgZm9ybWF0KSB7XG4gICAgICAgICAgICBpZiAoIW0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzU2hvcnRXaXRoRG90cztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoLy1NTU0tLy50ZXN0KGZvcm1hdCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzU2hvcnRXaXRob3V0RG90c1ttLm1vbnRoKCldO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzU2hvcnRXaXRoRG90c1ttLm1vbnRoKCldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIG1vbnRoc1JlZ2V4OiBtb250aHNSZWdleCxcbiAgICAgICAgbW9udGhzU2hvcnRSZWdleDogbW9udGhzUmVnZXgsXG4gICAgICAgIG1vbnRoc1N0cmljdFJlZ2V4OlxuICAgICAgICAgICAgL14oamFudWFyaXxmZWJydWFyaXxtYWFydHxhcHJpbHxtZWl8anVbbmxdaXxhdWd1c3R1c3xzZXB0ZW1iZXJ8b2t0b2Jlcnxub3ZlbWJlcnxkZWNlbWJlcikvaSxcbiAgICAgICAgbW9udGhzU2hvcnRTdHJpY3RSZWdleDpcbiAgICAgICAgICAgIC9eKGphblxcLj98ZmViXFwuP3xtcnRcXC4/fGFwclxcLj98bWVpfGp1W25sXVxcLj98YXVnXFwuP3xzZXBcXC4/fG9rdFxcLj98bm92XFwuP3xkZWNcXC4/KS9pLFxuXG4gICAgICAgIG1vbnRoc1BhcnNlOiBtb250aHNQYXJzZSxcbiAgICAgICAgbG9uZ01vbnRoc1BhcnNlOiBtb250aHNQYXJzZSxcbiAgICAgICAgc2hvcnRNb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG5cbiAgICAgICAgd2Vla2RheXM6XG4gICAgICAgICAgICAnem9uZGFnX21hYW5kYWdfZGluc2RhZ193b2Vuc2RhZ19kb25kZXJkYWdfdnJpamRhZ196YXRlcmRhZycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ3pvLl9tYS5fZGkuX3dvLl9kby5fdnIuX3phLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICd6b19tYV9kaV93b19kb192cl96YScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbdmFuZGFhZyBvbV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1ttb3JnZW4gb21dIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbb21dIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbZ2lzdGVyZW4gb21dIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW2FmZ2Vsb3Blbl0gZGRkZCBbb21dIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnb3ZlciAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMgZ2VsZWRlbicsXG4gICAgICAgICAgICBzOiAnZWVuIHBhYXIgc2Vjb25kZW4nLFxuICAgICAgICAgICAgc3M6ICclZCBzZWNvbmRlbicsXG4gICAgICAgICAgICBtOiAnw6nDqW4gbWludXV0JyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludXRlbicsXG4gICAgICAgICAgICBoOiAnw6nDqW4gdXVyJyxcbiAgICAgICAgICAgIGhoOiAnJWQgdXVyJyxcbiAgICAgICAgICAgIGQ6ICfDqcOpbiBkYWcnLFxuICAgICAgICAgICAgZGQ6ICclZCBkYWdlbicsXG4gICAgICAgICAgICBNOiAnw6nDqW4gbWFhbmQnLFxuICAgICAgICAgICAgTU06ICclZCBtYWFuZGVuJyxcbiAgICAgICAgICAgIHk6ICfDqcOpbiBqYWFyJyxcbiAgICAgICAgICAgIHl5OiAnJWQgamFhcicsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShzdGV8ZGUpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICBudW1iZXIgK1xuICAgICAgICAgICAgICAgIChudW1iZXIgPT09IDEgfHwgbnVtYmVyID09PSA4IHx8IG51bWJlciA+PSAyMCA/ICdzdGUnIDogJ2RlJylcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBubEJlO1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/nl-be.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/nl.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/nl.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Dutch [nl]\n//! author : Joris Röling : https://github.com/jorisroling\n//! author : Jacob Middag : https://github.com/middagj\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var monthsShortWithDots =\n            'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'),\n        monthsShortWithoutDots =\n            'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n        monthsParse = [\n            /^jan/i,\n            /^feb/i,\n            /^maart|mrt.?$/i,\n            /^apr/i,\n            /^mei$/i,\n            /^jun[i.]?$/i,\n            /^jul[i.]?$/i,\n            /^aug/i,\n            /^sep/i,\n            /^okt/i,\n            /^nov/i,\n            /^dec/i,\n        ],\n        monthsRegex =\n            /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\\.?|feb\\.?|mrt\\.?|apr\\.?|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i;\n\n    var nl = moment.defineLocale('nl', {\n        months: 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split(\n            '_'\n        ),\n        monthsShort: function (m, format) {\n            if (!m) {\n                return monthsShortWithDots;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShortWithoutDots[m.month()];\n            } else {\n                return monthsShortWithDots[m.month()];\n            }\n        },\n\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex:\n            /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,\n        monthsShortStrictRegex:\n            /^(jan\\.?|feb\\.?|mrt\\.?|apr\\.?|mei|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i,\n\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n\n        weekdays:\n            'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),\n        weekdaysShort: 'zo._ma._di._wo._do._vr._za.'.split('_'),\n        weekdaysMin: 'zo_ma_di_wo_do_vr_za'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD-MM-YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[vandaag om] LT',\n            nextDay: '[morgen om] LT',\n            nextWeek: 'dddd [om] LT',\n            lastDay: '[gisteren om] LT',\n            lastWeek: '[afgelopen] dddd [om] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'over %s',\n            past: '%s geleden',\n            s: 'een paar seconden',\n            ss: '%d seconden',\n            m: 'één minuut',\n            mm: '%d minuten',\n            h: 'één uur',\n            hh: '%d uur',\n            d: 'één dag',\n            dd: '%d dagen',\n            w: 'één week',\n            ww: '%d weken',\n            M: 'één maand',\n            MM: '%d maanden',\n            y: 'één jaar',\n            yy: '%d jaar',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n        ordinal: function (number) {\n            return (\n                number +\n                (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')\n            );\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return nl;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ubC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsa0RBQVc7QUFDckUsR0FBRyxDQUNzQjtBQUN6QixDQUFDLDRCQUE0Qjs7QUFFN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL25sLmpzPzEyYWQiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IER1dGNoIFtubF1cbi8vISBhdXRob3IgOiBKb3JpcyBSw7ZsaW5nIDogaHR0cHM6Ly9naXRodWIuY29tL2pvcmlzcm9saW5nXG4vLyEgYXV0aG9yIDogSmFjb2IgTWlkZGFnIDogaHR0cHM6Ly9naXRodWIuY29tL21pZGRhZ2pcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBtb250aHNTaG9ydFdpdGhEb3RzID1cbiAgICAgICAgICAgICdqYW4uX2ZlYi5fbXJ0Ll9hcHIuX21laV9qdW4uX2p1bC5fYXVnLl9zZXAuX29rdC5fbm92Ll9kZWMuJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydFdpdGhvdXREb3RzID1cbiAgICAgICAgICAgICdqYW5fZmViX21ydF9hcHJfbWVpX2p1bl9qdWxfYXVnX3NlcF9va3Rfbm92X2RlYycuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzUGFyc2UgPSBbXG4gICAgICAgICAgICAvXmphbi9pLFxuICAgICAgICAgICAgL15mZWIvaSxcbiAgICAgICAgICAgIC9ebWFhcnR8bXJ0Lj8kL2ksXG4gICAgICAgICAgICAvXmFwci9pLFxuICAgICAgICAgICAgL15tZWkkL2ksXG4gICAgICAgICAgICAvXmp1bltpLl0/JC9pLFxuICAgICAgICAgICAgL15qdWxbaS5dPyQvaSxcbiAgICAgICAgICAgIC9eYXVnL2ksXG4gICAgICAgICAgICAvXnNlcC9pLFxuICAgICAgICAgICAgL15va3QvaSxcbiAgICAgICAgICAgIC9ebm92L2ksXG4gICAgICAgICAgICAvXmRlYy9pLFxuICAgICAgICBdLFxuICAgICAgICBtb250aHNSZWdleCA9XG4gICAgICAgICAgICAvXihqYW51YXJpfGZlYnJ1YXJpfG1hYXJ0fGFwcmlsfG1laXxqdVtubF1pfGF1Z3VzdHVzfHNlcHRlbWJlcnxva3RvYmVyfG5vdmVtYmVyfGRlY2VtYmVyfGphblxcLj98ZmViXFwuP3xtcnRcXC4/fGFwclxcLj98anVbbmxdXFwuP3xhdWdcXC4/fHNlcFxcLj98b2t0XFwuP3xub3ZcXC4/fGRlY1xcLj8pL2k7XG5cbiAgICB2YXIgbmwgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdubCcsIHtcbiAgICAgICAgbW9udGhzOiAnamFudWFyaV9mZWJydWFyaV9tYWFydF9hcHJpbF9tZWlfanVuaV9qdWxpX2F1Z3VzdHVzX3NlcHRlbWJlcl9va3RvYmVyX25vdmVtYmVyX2RlY2VtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogZnVuY3Rpb24gKG0sIGZvcm1hdCkge1xuICAgICAgICAgICAgaWYgKCFtKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRoc1Nob3J0V2l0aERvdHM7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKC8tTU1NLS8udGVzdChmb3JtYXQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRoc1Nob3J0V2l0aG91dERvdHNbbS5tb250aCgpXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRoc1Nob3J0V2l0aERvdHNbbS5tb250aCgpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBtb250aHNSZWdleDogbW9udGhzUmVnZXgsXG4gICAgICAgIG1vbnRoc1Nob3J0UmVnZXg6IG1vbnRoc1JlZ2V4LFxuICAgICAgICBtb250aHNTdHJpY3RSZWdleDpcbiAgICAgICAgICAgIC9eKGphbnVhcml8ZmVicnVhcml8bWFhcnR8YXByaWx8bWVpfGp1W25sXWl8YXVndXN0dXN8c2VwdGVtYmVyfG9rdG9iZXJ8bm92ZW1iZXJ8ZGVjZW1iZXIpL2ksXG4gICAgICAgIG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6XG4gICAgICAgICAgICAvXihqYW5cXC4/fGZlYlxcLj98bXJ0XFwuP3xhcHJcXC4/fG1laXxqdVtubF1cXC4/fGF1Z1xcLj98c2VwXFwuP3xva3RcXC4/fG5vdlxcLj98ZGVjXFwuPykvaSxcblxuICAgICAgICBtb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgICAgIGxvbmdNb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgICAgIHNob3J0TW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuXG4gICAgICAgIHdlZWtkYXlzOlxuICAgICAgICAgICAgJ3pvbmRhZ19tYWFuZGFnX2RpbnNkYWdfd29lbnNkYWdfZG9uZGVyZGFnX3ZyaWpkYWdfemF0ZXJkYWcnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICd6by5fbWEuX2RpLl93by5fZG8uX3ZyLl96YS4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnem9fbWFfZGlfd29fZG9fdnJfemEnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELU1NLVlZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW3ZhbmRhYWcgb21dIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbbW9yZ2VuIG9tXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW29tXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW2dpc3RlcmVuIG9tXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1thZmdlbG9wZW5dIGRkZGQgW29tXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ292ZXIgJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzIGdlbGVkZW4nLFxuICAgICAgICAgICAgczogJ2VlbiBwYWFyIHNlY29uZGVuJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2Vjb25kZW4nLFxuICAgICAgICAgICAgbTogJ8Opw6luIG1pbnV1dCcsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0ZW4nLFxuICAgICAgICAgICAgaDogJ8Opw6luIHV1cicsXG4gICAgICAgICAgICBoaDogJyVkIHV1cicsXG4gICAgICAgICAgICBkOiAnw6nDqW4gZGFnJyxcbiAgICAgICAgICAgIGRkOiAnJWQgZGFnZW4nLFxuICAgICAgICAgICAgdzogJ8Opw6luIHdlZWsnLFxuICAgICAgICAgICAgd3c6ICclZCB3ZWtlbicsXG4gICAgICAgICAgICBNOiAnw6nDqW4gbWFhbmQnLFxuICAgICAgICAgICAgTU06ICclZCBtYWFuZGVuJyxcbiAgICAgICAgICAgIHk6ICfDqcOpbiBqYWFyJyxcbiAgICAgICAgICAgIHl5OiAnJWQgamFhcicsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShzdGV8ZGUpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICBudW1iZXIgK1xuICAgICAgICAgICAgICAgIChudW1iZXIgPT09IDEgfHwgbnVtYmVyID09PSA4IHx8IG51bWJlciA+PSAyMCA/ICdzdGUnIDogJ2RlJylcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBubDtcblxufSkpKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/nl.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/nn.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/nn.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Nynorsk [nn]\n//! authors : https://github.com/mechuwind\n//!           Stephen Ramthun : https://github.com/stephenramthun\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var nn = moment.defineLocale('nn', {\n        months: 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split(\n            '_'\n        ),\n        monthsShort:\n            'jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.'.split('_'),\n        monthsParseExact: true,\n        weekdays: 'sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag'.split('_'),\n        weekdaysShort: 'su._må._ty._on._to._fr._lau.'.split('_'),\n        weekdaysMin: 'su_må_ty_on_to_fr_la'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY [kl.] H:mm',\n            LLLL: 'dddd D. MMMM YYYY [kl.] HH:mm',\n        },\n        calendar: {\n            sameDay: '[I dag klokka] LT',\n            nextDay: '[I morgon klokka] LT',\n            nextWeek: 'dddd [klokka] LT',\n            lastDay: '[I går klokka] LT',\n            lastWeek: '[Føregåande] dddd [klokka] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'om %s',\n            past: '%s sidan',\n            s: 'nokre sekund',\n            ss: '%d sekund',\n            m: 'eit minutt',\n            mm: '%d minutt',\n            h: 'ein time',\n            hh: '%d timar',\n            d: 'ein dag',\n            dd: '%d dagar',\n            w: 'ei veke',\n            ww: '%d veker',\n            M: 'ein månad',\n            MM: '%d månader',\n            y: 'eit år',\n            yy: '%d år',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return nn;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ubi5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsa0RBQVc7QUFDckUsR0FBRyxDQUNzQjtBQUN6QixDQUFDLDRCQUE0Qjs7QUFFN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbm4uanM/M2QzOSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogTnlub3JzayBbbm5dXG4vLyEgYXV0aG9ycyA6IGh0dHBzOi8vZ2l0aHViLmNvbS9tZWNodXdpbmRcbi8vISAgICAgICAgICAgU3RlcGhlbiBSYW10aHVuIDogaHR0cHM6Ly9naXRodWIuY29tL3N0ZXBoZW5yYW10aHVuXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgbm4gPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdubicsIHtcbiAgICAgICAgbW9udGhzOiAnamFudWFyX2ZlYnJ1YXJfbWFyc19hcHJpbF9tYWlfanVuaV9qdWxpX2F1Z3VzdF9zZXB0ZW1iZXJfb2t0b2Jlcl9ub3ZlbWJlcl9kZXNlbWJlcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAnamFuLl9mZWIuX21hcnNfYXByLl9tYWlfanVuaV9qdWxpX2F1Zy5fc2VwLl9va3QuX25vdi5fZGVzLicuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6ICdzdW5kYWdfbcOlbmRhZ190eXNkYWdfb25zZGFnX3RvcnNkYWdfZnJlZGFnX2xhdXJkYWcnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdzdS5fbcOlLl90eS5fb24uX3RvLl9mci5fbGF1Licuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdzdV9tw6VfdHlfb25fdG9fZnJfbGEnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdELiBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRC4gTU1NTSBZWVlZIFtrbC5dIEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQgRC4gTU1NTSBZWVlZIFtrbC5dIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbSSBkYWcga2xva2thXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW0kgbW9yZ29uIGtsb2trYV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFtrbG9ra2FdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbSSBnw6VyIGtsb2trYV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbRsO4cmVnw6VhbmRlXSBkZGRkIFtrbG9ra2FdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnb20gJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzIHNpZGFuJyxcbiAgICAgICAgICAgIHM6ICdub2tyZSBzZWt1bmQnLFxuICAgICAgICAgICAgc3M6ICclZCBzZWt1bmQnLFxuICAgICAgICAgICAgbTogJ2VpdCBtaW51dHQnLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dHQnLFxuICAgICAgICAgICAgaDogJ2VpbiB0aW1lJyxcbiAgICAgICAgICAgIGhoOiAnJWQgdGltYXInLFxuICAgICAgICAgICAgZDogJ2VpbiBkYWcnLFxuICAgICAgICAgICAgZGQ6ICclZCBkYWdhcicsXG4gICAgICAgICAgICB3OiAnZWkgdmVrZScsXG4gICAgICAgICAgICB3dzogJyVkIHZla2VyJyxcbiAgICAgICAgICAgIE06ICdlaW4gbcOlbmFkJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbcOlbmFkZXInLFxuICAgICAgICAgICAgeTogJ2VpdCDDpXInLFxuICAgICAgICAgICAgeXk6ICclZCDDpXInLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsOiAnJWQuJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5uO1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/nn.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/oc-lnc.js":
/*!**********************************************!*\
  !*** ./node_modules/moment/locale/oc-lnc.js ***!
  \**********************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Occitan, lengadocian dialecte [oc-lnc]\n//! author : Quentin PAGÈS : https://github.com/Quenty31\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var ocLnc = moment.defineLocale('oc-lnc', {\n        months: {\n            standalone:\n                'genièr_febrièr_març_abril_mai_junh_julhet_agost_setembre_octòbre_novembre_decembre'.split(\n                    '_'\n                ),\n            format: \"de genièr_de febrièr_de març_d'abril_de mai_de junh_de julhet_d'agost_de setembre_d'octòbre_de novembre_de decembre\".split(\n                '_'\n            ),\n            isFormat: /D[oD]?(\\s)+MMMM/,\n        },\n        monthsShort:\n            'gen._febr._març_abr._mai_junh_julh._ago._set._oct._nov._dec.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'dimenge_diluns_dimars_dimècres_dijòus_divendres_dissabte'.split(\n            '_'\n        ),\n        weekdaysShort: 'dg._dl._dm._dc._dj._dv._ds.'.split('_'),\n        weekdaysMin: 'dg_dl_dm_dc_dj_dv_ds'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM [de] YYYY',\n            ll: 'D MMM YYYY',\n            LLL: 'D MMMM [de] YYYY [a] H:mm',\n            lll: 'D MMM YYYY, H:mm',\n            LLLL: 'dddd D MMMM [de] YYYY [a] H:mm',\n            llll: 'ddd D MMM YYYY, H:mm',\n        },\n        calendar: {\n            sameDay: '[uèi a] LT',\n            nextDay: '[deman a] LT',\n            nextWeek: 'dddd [a] LT',\n            lastDay: '[ièr a] LT',\n            lastWeek: 'dddd [passat a] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: \"d'aquí %s\",\n            past: 'fa %s',\n            s: 'unas segondas',\n            ss: '%d segondas',\n            m: 'una minuta',\n            mm: '%d minutas',\n            h: 'una ora',\n            hh: '%d oras',\n            d: 'un jorn',\n            dd: '%d jorns',\n            M: 'un mes',\n            MM: '%d meses',\n            y: 'un an',\n            yy: '%d ans',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(r|n|t|è|a)/,\n        ordinal: function (number, period) {\n            var output =\n                number === 1\n                    ? 'r'\n                    : number === 2\n                    ? 'n'\n                    : number === 3\n                    ? 'r'\n                    : number === 4\n                    ? 't'\n                    : 'è';\n            if (period === 'w' || period === 'W') {\n                output = 'a';\n            }\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4,\n        },\n    });\n\n    return ocLnc;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9vYy1sbmMuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxrREFBVztBQUNyRSxHQUFHLENBQ3NCO0FBQ3pCLENBQUMsNEJBQTRCOztBQUU3Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvb2MtbG5jLmpzPzIyNWYiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IE9jY2l0YW4sIGxlbmdhZG9jaWFuIGRpYWxlY3RlIFtvYy1sbmNdXG4vLyEgYXV0aG9yIDogUXVlbnRpbiBQQUfDiFMgOiBodHRwczovL2dpdGh1Yi5jb20vUXVlbnR5MzFcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBvY0xuYyA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ29jLWxuYycsIHtcbiAgICAgICAgbW9udGhzOiB7XG4gICAgICAgICAgICBzdGFuZGFsb25lOlxuICAgICAgICAgICAgICAgICdnZW5pw6hyX2ZlYnJpw6hyX21hcsOnX2FicmlsX21haV9qdW5oX2p1bGhldF9hZ29zdF9zZXRlbWJyZV9vY3TDsmJyZV9ub3ZlbWJyZV9kZWNlbWJyZScuc3BsaXQoXG4gICAgICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICBmb3JtYXQ6IFwiZGUgZ2VuacOocl9kZSBmZWJyacOocl9kZSBtYXLDp19kJ2FicmlsX2RlIG1haV9kZSBqdW5oX2RlIGp1bGhldF9kJ2Fnb3N0X2RlIHNldGVtYnJlX2Qnb2N0w7JicmVfZGUgbm92ZW1icmVfZGUgZGVjZW1icmVcIi5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBpc0Zvcm1hdDogL0Rbb0RdPyhcXHMpK01NTU0vLFxuICAgICAgICB9LFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICdnZW4uX2ZlYnIuX21hcsOnX2Fici5fbWFpX2p1bmhfanVsaC5fYWdvLl9zZXQuX29jdC5fbm92Ll9kZWMuJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOiAnZGltZW5nZV9kaWx1bnNfZGltYXJzX2RpbcOoY3Jlc19kaWrDsnVzX2RpdmVuZHJlc19kaXNzYWJ0ZScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ2RnLl9kbC5fZG0uX2RjLl9kai5fZHYuX2RzLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdkZ19kbF9kbV9kY19kal9kdl9kcycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0g6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gW2RlXSBZWVlZJyxcbiAgICAgICAgICAgIGxsOiAnRCBNTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gW2RlXSBZWVlZIFthXSBIOm1tJyxcbiAgICAgICAgICAgIGxsbDogJ0QgTU1NIFlZWVksIEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQgRCBNTU1NIFtkZV0gWVlZWSBbYV0gSDptbScsXG4gICAgICAgICAgICBsbGxsOiAnZGRkIEQgTU1NIFlZWVksIEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1t1w6hpIGFdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbZGVtYW4gYV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFthXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW2nDqHIgYV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFtwYXNzYXQgYV0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6IFwiZCdhcXXDrSAlc1wiLFxuICAgICAgICAgICAgcGFzdDogJ2ZhICVzJyxcbiAgICAgICAgICAgIHM6ICd1bmFzIHNlZ29uZGFzJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2Vnb25kYXMnLFxuICAgICAgICAgICAgbTogJ3VuYSBtaW51dGEnLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dGFzJyxcbiAgICAgICAgICAgIGg6ICd1bmEgb3JhJyxcbiAgICAgICAgICAgIGhoOiAnJWQgb3JhcycsXG4gICAgICAgICAgICBkOiAndW4gam9ybicsXG4gICAgICAgICAgICBkZDogJyVkIGpvcm5zJyxcbiAgICAgICAgICAgIE06ICd1biBtZXMnLFxuICAgICAgICAgICAgTU06ICclZCBtZXNlcycsXG4gICAgICAgICAgICB5OiAndW4gYW4nLFxuICAgICAgICAgICAgeXk6ICclZCBhbnMnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0ocnxufHR8w6h8YSkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyLCBwZXJpb2QpIHtcbiAgICAgICAgICAgIHZhciBvdXRwdXQgPVxuICAgICAgICAgICAgICAgIG51bWJlciA9PT0gMVxuICAgICAgICAgICAgICAgICAgICA/ICdyJ1xuICAgICAgICAgICAgICAgICAgICA6IG51bWJlciA9PT0gMlxuICAgICAgICAgICAgICAgICAgICA/ICduJ1xuICAgICAgICAgICAgICAgICAgICA6IG51bWJlciA9PT0gM1xuICAgICAgICAgICAgICAgICAgICA/ICdyJ1xuICAgICAgICAgICAgICAgICAgICA6IG51bWJlciA9PT0gNFxuICAgICAgICAgICAgICAgICAgICA/ICd0J1xuICAgICAgICAgICAgICAgICAgICA6ICfDqCc7XG4gICAgICAgICAgICBpZiAocGVyaW9kID09PSAndycgfHwgcGVyaW9kID09PSAnVycpIHtcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAnYSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgb3V0cHV0O1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LFxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG9jTG5jO1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/oc-lnc.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/pa-in.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/pa-in.js ***!
  \*********************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Punjabi (India) [pa-in]\n//! author : Harpreet Singh : https://github.com/harpreetkhalsagtbit\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '੧',\n            2: '੨',\n            3: '੩',\n            4: '੪',\n            5: '੫',\n            6: '੬',\n            7: '੭',\n            8: '੮',\n            9: '੯',\n            0: '੦',\n        },\n        numberMap = {\n            '੧': '1',\n            '੨': '2',\n            '੩': '3',\n            '੪': '4',\n            '੫': '5',\n            '੬': '6',\n            '੭': '7',\n            '੮': '8',\n            '੯': '9',\n            '੦': '0',\n        };\n\n    var paIn = moment.defineLocale('pa-in', {\n        // There are months name as per Nanakshahi Calendar but they are not used as rigidly in modern Punjabi.\n        months: 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split(\n            '_'\n        ),\n        monthsShort:\n            'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split(\n                '_'\n            ),\n        weekdays: 'ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ'.split(\n            '_'\n        ),\n        weekdaysShort: 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),\n        weekdaysMin: 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm ਵਜੇ',\n            LTS: 'A h:mm:ss ਵਜੇ',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm ਵਜੇ',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm ਵਜੇ',\n        },\n        calendar: {\n            sameDay: '[ਅਜ] LT',\n            nextDay: '[ਕਲ] LT',\n            nextWeek: '[ਅਗਲਾ] dddd, LT',\n            lastDay: '[ਕਲ] LT',\n            lastWeek: '[ਪਿਛਲੇ] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s ਵਿੱਚ',\n            past: '%s ਪਿਛਲੇ',\n            s: 'ਕੁਝ ਸਕਿੰਟ',\n            ss: '%d ਸਕਿੰਟ',\n            m: 'ਇਕ ਮਿੰਟ',\n            mm: '%d ਮਿੰਟ',\n            h: 'ਇੱਕ ਘੰਟਾ',\n            hh: '%d ਘੰਟੇ',\n            d: 'ਇੱਕ ਦਿਨ',\n            dd: '%d ਦਿਨ',\n            M: 'ਇੱਕ ਮਹੀਨਾ',\n            MM: '%d ਮਹੀਨੇ',\n            y: 'ਇੱਕ ਸਾਲ',\n            yy: '%d ਸਾਲ',\n        },\n        preparse: function (string) {\n            return string.replace(/[੧੨੩੪੫੬੭੮੯੦]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        // Punjabi notation for meridiems are quite fuzzy in practice. While there exists\n        // a rigid notion of a 'Pahar' it is not used as rigidly in modern Punjabi.\n        meridiemParse: /ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'ਰਾਤ') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'ਸਵੇਰ') {\n                return hour;\n            } else if (meridiem === 'ਦੁਪਹਿਰ') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'ਸ਼ਾਮ') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ਰਾਤ';\n            } else if (hour < 10) {\n                return 'ਸਵੇਰ';\n            } else if (hour < 17) {\n                return 'ਦੁਪਹਿਰ';\n            } else if (hour < 20) {\n                return 'ਸ਼ਾਮ';\n            } else {\n                return 'ਰਾਤ';\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return paIn;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9wYS1pbi5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9wYS1pbi5qcz9hOTg1Il0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBQdW5qYWJpIChJbmRpYSkgW3BhLWluXVxuLy8hIGF1dGhvciA6IEhhcnByZWV0IFNpbmdoIDogaHR0cHM6Ly9naXRodWIuY29tL2hhcnByZWV0a2hhbHNhZ3RiaXRcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBzeW1ib2xNYXAgPSB7XG4gICAgICAgICAgICAxOiAn4KmnJyxcbiAgICAgICAgICAgIDI6ICfgqagnLFxuICAgICAgICAgICAgMzogJ+CpqScsXG4gICAgICAgICAgICA0OiAn4KmqJyxcbiAgICAgICAgICAgIDU6ICfgqasnLFxuICAgICAgICAgICAgNjogJ+CprCcsXG4gICAgICAgICAgICA3OiAn4KmtJyxcbiAgICAgICAgICAgIDg6ICfgqa4nLFxuICAgICAgICAgICAgOTogJ+CprycsXG4gICAgICAgICAgICAwOiAn4KmmJyxcbiAgICAgICAgfSxcbiAgICAgICAgbnVtYmVyTWFwID0ge1xuICAgICAgICAgICAgJ+Cppyc6ICcxJyxcbiAgICAgICAgICAgICfgqagnOiAnMicsXG4gICAgICAgICAgICAn4KmpJzogJzMnLFxuICAgICAgICAgICAgJ+Cpqic6ICc0JyxcbiAgICAgICAgICAgICfgqasnOiAnNScsXG4gICAgICAgICAgICAn4KmsJzogJzYnLFxuICAgICAgICAgICAgJ+CprSc6ICc3JyxcbiAgICAgICAgICAgICfgqa4nOiAnOCcsXG4gICAgICAgICAgICAn4KmvJzogJzknLFxuICAgICAgICAgICAgJ+Cppic6ICcwJyxcbiAgICAgICAgfTtcblxuICAgIHZhciBwYUluID0gbW9tZW50LmRlZmluZUxvY2FsZSgncGEtaW4nLCB7XG4gICAgICAgIC8vIFRoZXJlIGFyZSBtb250aHMgbmFtZSBhcyBwZXIgTmFuYWtzaGFoaSBDYWxlbmRhciBidXQgdGhleSBhcmUgbm90IHVzZWQgYXMgcmlnaWRseSBpbiBtb2Rlcm4gUHVuamFiaS5cbiAgICAgICAgbW9udGhzOiAn4Kic4Kio4Ki14Kiw4KmAX+Coq+CovOCosOCoteCosOCpgF/gqK7gqL7gqLDgqJpf4KiF4Kiq4KmN4Kiw4KmI4KiyX+CoruCoiF/gqJzgqYLgqKhf4Kic4KmB4Kiy4Ki+4KiIX+CoheCol+CouOCopF/gqLjgqKTgqbDgqKzgqLBf4KiF4KiV4Kik4KmC4Kis4KiwX+CoqOCoteCpsOCorOCosF/gqKbgqLjgqbDgqKzgqLAnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ+ConOCoqOCoteCosOCpgF/gqKvgqLzgqLDgqLXgqLDgqYBf4Kiu4Ki+4Kiw4KiaX+CoheCoquCpjeCosOCpiOCosl/gqK7gqIhf4Kic4KmC4KioX+ConOCpgeCosuCovuCoiF/gqIXgqJfgqLjgqKRf4Ki44Kik4Kmw4Kis4KiwX+CoheColeCopOCpguCorOCosF/gqKjgqLXgqbDgqKzgqLBf4Kim4Ki44Kmw4Kis4KiwJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzOiAn4KiQ4Kik4Ki14Ki+4KiwX+CouOCpi+CoruCoteCovuCosF/gqK7gqbDgqJfgqLLgqLXgqL7gqLBf4Kis4KmB4Kin4Ki14Ki+4KiwX+CoteCpgOCosOCoteCovuCosF/gqLjgqLzgqYHgqbHgqJXgqLDgqLXgqL7gqLBf4Ki44Ki84Kio4KmA4Kia4Kiw4Ki14Ki+4KiwJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn4KiQ4KikX+CouOCpi+Corl/gqK7gqbDgqJfgqLJf4Kis4KmB4KinX+CoteCpgOCosF/gqLjgqLzgqYHgqJXgqLBf4Ki44Ki84Kio4KmAJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ+CokOCopF/gqLjgqYvgqK5f4Kiu4Kmw4KiX4KiyX+CorOCpgeCop1/gqLXgqYDgqLBf4Ki44Ki84KmB4KiV4KiwX+CouOCovOCoqOCpgCcuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnQSBoOm1tIOCoteConOCphycsXG4gICAgICAgICAgICBMVFM6ICdBIGg6bW06c3Mg4Ki14Kic4KmHJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVksIEEgaDptbSDgqLXgqJzgqYcnLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0g4Ki14Kic4KmHJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb4KiF4KicXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW+ColeCosl0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdb4KiF4KiX4Kiy4Ki+XSBkZGRkLCBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW+ColeCosl0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdb4Kiq4Ki/4Kib4Kiy4KmHXSBkZGRkLCBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVzIOCoteCov+CpseComicsXG4gICAgICAgICAgICBwYXN0OiAnJXMg4Kiq4Ki/4Kib4Kiy4KmHJyxcbiAgICAgICAgICAgIHM6ICfgqJXgqYHgqJ0g4Ki44KiV4Ki/4Kmw4KifJyxcbiAgICAgICAgICAgIHNzOiAnJWQg4Ki44KiV4Ki/4Kmw4KifJyxcbiAgICAgICAgICAgIG06ICfgqIfgqJUg4Kiu4Ki/4Kmw4KifJyxcbiAgICAgICAgICAgIG1tOiAnJWQg4Kiu4Ki/4Kmw4KifJyxcbiAgICAgICAgICAgIGg6ICfgqIfgqbHgqJUg4KiY4Kmw4Kif4Ki+JyxcbiAgICAgICAgICAgIGhoOiAnJWQg4KiY4Kmw4Kif4KmHJyxcbiAgICAgICAgICAgIGQ6ICfgqIfgqbHgqJUg4Kim4Ki/4KioJyxcbiAgICAgICAgICAgIGRkOiAnJWQg4Kim4Ki/4KioJyxcbiAgICAgICAgICAgIE06ICfgqIfgqbHgqJUg4Kiu4Ki54KmA4Kio4Ki+JyxcbiAgICAgICAgICAgIE1NOiAnJWQg4Kiu4Ki54KmA4Kio4KmHJyxcbiAgICAgICAgICAgIHk6ICfgqIfgqbHgqJUg4Ki44Ki+4KiyJyxcbiAgICAgICAgICAgIHl5OiAnJWQg4Ki44Ki+4KiyJyxcbiAgICAgICAgfSxcbiAgICAgICAgcHJlcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvW+Cpp+CpqOCpqeCpquCpq+CprOCpreCpruCpr+Cppl0vZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlck1hcFttYXRjaF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgcG9zdGZvcm1hdDogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9cXGQvZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN5bWJvbE1hcFttYXRjaF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgLy8gUHVuamFiaSBub3RhdGlvbiBmb3IgbWVyaWRpZW1zIGFyZSBxdWl0ZSBmdXp6eSBpbiBwcmFjdGljZS4gV2hpbGUgdGhlcmUgZXhpc3RzXG4gICAgICAgIC8vIGEgcmlnaWQgbm90aW9uIG9mIGEgJ1BhaGFyJyBpdCBpcyBub3QgdXNlZCBhcyByaWdpZGx5IGluIG1vZGVybiBQdW5qYWJpLlxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv4Kiw4Ki+4KikfOCouOCoteCph+CosHzgqKbgqYHgqKrgqLngqL/gqLB84Ki44Ki84Ki+4KiuLyxcbiAgICAgICAgbWVyaWRpZW1Ib3VyOiBmdW5jdGlvbiAoaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1lcmlkaWVtID09PSAn4Kiw4Ki+4KikJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyIDwgNCA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4Ki44Ki14KmH4KiwJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CopuCpgeCoquCoueCov+CosCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA+PSAxMCA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4Ki44Ki84Ki+4KiuJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyICsgMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CosOCovuCopCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4Ki44Ki14KmH4KiwJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDE3KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgqKbgqYHgqKrgqLngqL/gqLAnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMjApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CouOCovOCovuCoric7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4Kiw4Ki+4KikJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNiwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHBhSW47XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/pa-in.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/pl.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/pl.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Polish [pl]\n//! author : Rafal Hirsz : https://github.com/evoL\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var monthsNominative =\n            'styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień'.split(\n                '_'\n            ),\n        monthsSubjective =\n            'stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia'.split(\n                '_'\n            ),\n        monthsParse = [\n            /^sty/i,\n            /^lut/i,\n            /^mar/i,\n            /^kwi/i,\n            /^maj/i,\n            /^cze/i,\n            /^lip/i,\n            /^sie/i,\n            /^wrz/i,\n            /^paź/i,\n            /^lis/i,\n            /^gru/i,\n        ];\n    function plural(n) {\n        return n % 10 < 5 && n % 10 > 1 && ~~(n / 10) % 10 !== 1;\n    }\n    function translate(number, withoutSuffix, key) {\n        var result = number + ' ';\n        switch (key) {\n            case 'ss':\n                return result + (plural(number) ? 'sekundy' : 'sekund');\n            case 'm':\n                return withoutSuffix ? 'minuta' : 'minutę';\n            case 'mm':\n                return result + (plural(number) ? 'minuty' : 'minut');\n            case 'h':\n                return withoutSuffix ? 'godzina' : 'godzinę';\n            case 'hh':\n                return result + (plural(number) ? 'godziny' : 'godzin');\n            case 'ww':\n                return result + (plural(number) ? 'tygodnie' : 'tygodni');\n            case 'MM':\n                return result + (plural(number) ? 'miesiące' : 'miesięcy');\n            case 'yy':\n                return result + (plural(number) ? 'lata' : 'lat');\n        }\n    }\n\n    var pl = moment.defineLocale('pl', {\n        months: function (momentToFormat, format) {\n            if (!momentToFormat) {\n                return monthsNominative;\n            } else if (/D MMMM/.test(format)) {\n                return monthsSubjective[momentToFormat.month()];\n            } else {\n                return monthsNominative[momentToFormat.month()];\n            }\n        },\n        monthsShort: 'sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru'.split('_'),\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n        weekdays:\n            'niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota'.split('_'),\n        weekdaysShort: 'ndz_pon_wt_śr_czw_pt_sob'.split('_'),\n        weekdaysMin: 'Nd_Pn_Wt_Śr_Cz_Pt_So'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Dziś o] LT',\n            nextDay: '[Jutro o] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[W niedzielę o] LT';\n\n                    case 2:\n                        return '[We wtorek o] LT';\n\n                    case 3:\n                        return '[W środę o] LT';\n\n                    case 6:\n                        return '[W sobotę o] LT';\n\n                    default:\n                        return '[W] dddd [o] LT';\n                }\n            },\n            lastDay: '[Wczoraj o] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[W zeszłą niedzielę o] LT';\n                    case 3:\n                        return '[W zeszłą środę o] LT';\n                    case 6:\n                        return '[W zeszłą sobotę o] LT';\n                    default:\n                        return '[W zeszły] dddd [o] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'za %s',\n            past: '%s temu',\n            s: 'kilka sekund',\n            ss: translate,\n            m: translate,\n            mm: translate,\n            h: translate,\n            hh: translate,\n            d: '1 dzień',\n            dd: '%d dni',\n            w: 'tydzień',\n            ww: translate,\n            M: 'miesiąc',\n            MM: translate,\n            y: 'rok',\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return pl;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9wbC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxvQ0FBb0MsSUFBSTtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9wbC5qcz9lZGM0Il0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBQb2xpc2ggW3BsXVxuLy8hIGF1dGhvciA6IFJhZmFsIEhpcnN6IDogaHR0cHM6Ly9naXRodWIuY29tL2V2b0xcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBtb250aHNOb21pbmF0aXZlID1cbiAgICAgICAgICAgICdzdHljemXFhF9sdXR5X21hcnplY19rd2llY2llxYRfbWFqX2N6ZXJ3aWVjX2xpcGllY19zaWVycGllxYRfd3J6ZXNpZcWEX3Bhxbpkemllcm5pa19saXN0b3BhZF9ncnVkemllxYQnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU3ViamVjdGl2ZSA9XG4gICAgICAgICAgICAnc3R5Y3puaWFfbHV0ZWdvX21hcmNhX2t3aWV0bmlhX21hamFfY3plcndjYV9saXBjYV9zaWVycG5pYV93cnplxZtuaWFfcGHFumR6aWVybmlrYV9saXN0b3BhZGFfZ3J1ZG5pYScuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICBtb250aHNQYXJzZSA9IFtcbiAgICAgICAgICAgIC9ec3R5L2ksXG4gICAgICAgICAgICAvXmx1dC9pLFxuICAgICAgICAgICAgL15tYXIvaSxcbiAgICAgICAgICAgIC9ea3dpL2ksXG4gICAgICAgICAgICAvXm1hai9pLFxuICAgICAgICAgICAgL15jemUvaSxcbiAgICAgICAgICAgIC9ebGlwL2ksXG4gICAgICAgICAgICAvXnNpZS9pLFxuICAgICAgICAgICAgL153cnovaSxcbiAgICAgICAgICAgIC9ecGHFui9pLFxuICAgICAgICAgICAgL15saXMvaSxcbiAgICAgICAgICAgIC9eZ3J1L2ksXG4gICAgICAgIF07XG4gICAgZnVuY3Rpb24gcGx1cmFsKG4pIHtcbiAgICAgICAgcmV0dXJuIG4gJSAxMCA8IDUgJiYgbiAlIDEwID4gMSAmJiB+fihuIC8gMTApICUgMTAgIT09IDE7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHRyYW5zbGF0ZShudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gbnVtYmVyICsgJyAnO1xuICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgY2FzZSAnc3MnOlxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAocGx1cmFsKG51bWJlcikgPyAnc2VrdW5keScgOiAnc2VrdW5kJyk7XG4gICAgICAgICAgICBjYXNlICdtJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/ICdtaW51dGEnIDogJ21pbnV0xJknO1xuICAgICAgICAgICAgY2FzZSAnbW0nOlxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAocGx1cmFsKG51bWJlcikgPyAnbWludXR5JyA6ICdtaW51dCcpO1xuICAgICAgICAgICAgY2FzZSAnaCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyAnZ29kemluYScgOiAnZ29kemluxJknO1xuICAgICAgICAgICAgY2FzZSAnaGgnOlxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAocGx1cmFsKG51bWJlcikgPyAnZ29kemlueScgOiAnZ29kemluJyk7XG4gICAgICAgICAgICBjYXNlICd3dyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIChwbHVyYWwobnVtYmVyKSA/ICd0eWdvZG5pZScgOiAndHlnb2RuaScpO1xuICAgICAgICAgICAgY2FzZSAnTU0nOlxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAocGx1cmFsKG51bWJlcikgPyAnbWllc2nEhWNlJyA6ICdtaWVzacSZY3knKTtcbiAgICAgICAgICAgIGNhc2UgJ3l5JzpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKHBsdXJhbChudW1iZXIpID8gJ2xhdGEnIDogJ2xhdCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHBsID0gbW9tZW50LmRlZmluZUxvY2FsZSgncGwnLCB7XG4gICAgICAgIG1vbnRoczogZnVuY3Rpb24gKG1vbWVudFRvRm9ybWF0LCBmb3JtYXQpIHtcbiAgICAgICAgICAgIGlmICghbW9tZW50VG9Gb3JtYXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzTm9taW5hdGl2ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoL0QgTU1NTS8udGVzdChmb3JtYXQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRoc1N1YmplY3RpdmVbbW9tZW50VG9Gb3JtYXQubW9udGgoKV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb250aHNOb21pbmF0aXZlW21vbWVudFRvRm9ybWF0Lm1vbnRoKCldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtb250aHNTaG9ydDogJ3N0eV9sdXRfbWFyX2t3aV9tYWpfY3plX2xpcF9zaWVfd3J6X3BhxbpfbGlzX2dydScuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgICAgICBsb25nTW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgICAgICBzaG9ydE1vbnRoc1BhcnNlOiBtb250aHNQYXJzZSxcbiAgICAgICAgd2Vla2RheXM6XG4gICAgICAgICAgICAnbmllZHppZWxhX3BvbmllZHppYcWCZWtfd3RvcmVrX8Wbcm9kYV9jendhcnRla19wacSFdGVrX3NvYm90YScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ25kel9wb25fd3RfxZtyX2N6d19wdF9zb2InLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnTmRfUG5fV3RfxZpyX0N6X1B0X1NvJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW0R6acWbIG9dIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbSnV0cm8gb10gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbVyBuaWVkemllbMSZIG9dIExUJztcblxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1tXZSB3dG9yZWsgb10gTFQnO1xuXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW1cgxZtyb2TEmSBvXSBMVCc7XG5cbiAgICAgICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbVyBzb2JvdMSZIG9dIExUJztcblxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbV10gZGRkZCBbb10gTFQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0RGF5OiAnW1djem9yYWogb10gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbVyB6ZXN6xYLEhSBuaWVkemllbMSZIG9dIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbVyB6ZXN6xYLEhSDFm3JvZMSZIG9dIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbVyB6ZXN6xYLEhSBzb2JvdMSZIG9dIExUJztcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW1cgemVzesWCeV0gZGRkZCBbb10gTFQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ3phICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyB0ZW11JyxcbiAgICAgICAgICAgIHM6ICdraWxrYSBzZWt1bmQnLFxuICAgICAgICAgICAgc3M6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG1tOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBoOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBoaDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgZDogJzEgZHppZcWEJyxcbiAgICAgICAgICAgIGRkOiAnJWQgZG5pJyxcbiAgICAgICAgICAgIHc6ICd0eWR6aWXFhCcsXG4gICAgICAgICAgICB3dzogdHJhbnNsYXRlLFxuICAgICAgICAgICAgTTogJ21pZXNpxIVjJyxcbiAgICAgICAgICAgIE1NOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICB5OiAncm9rJyxcbiAgICAgICAgICAgIHl5OiB0cmFuc2xhdGUsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWw6ICclZC4nLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gcGw7XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/pl.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/pt-br.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/pt-br.js ***!
  \*********************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Portuguese (Brazil) [pt-br]\n//! author : Caio Ribeiro Pereira : https://github.com/caio-ribeiro-pereira\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var ptBr = moment.defineLocale('pt-br', {\n        months: 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split(\n            '_'\n        ),\n        monthsShort: 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'),\n        weekdays:\n            'domingo_segunda-feira_terça-feira_quarta-feira_quinta-feira_sexta-feira_sábado'.split(\n                '_'\n            ),\n        weekdaysShort: 'dom_seg_ter_qua_qui_sex_sáb'.split('_'),\n        weekdaysMin: 'do_2ª_3ª_4ª_5ª_6ª_sá'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D [de] MMMM [de] YYYY',\n            LLL: 'D [de] MMMM [de] YYYY [às] HH:mm',\n            LLLL: 'dddd, D [de] MMMM [de] YYYY [às] HH:mm',\n        },\n        calendar: {\n            sameDay: '[Hoje às] LT',\n            nextDay: '[Amanhã às] LT',\n            nextWeek: 'dddd [às] LT',\n            lastDay: '[Ontem às] LT',\n            lastWeek: function () {\n                return this.day() === 0 || this.day() === 6\n                    ? '[Último] dddd [às] LT' // Saturday + Sunday\n                    : '[Última] dddd [às] LT'; // Monday - Friday\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'em %s',\n            past: 'há %s',\n            s: 'poucos segundos',\n            ss: '%d segundos',\n            m: 'um minuto',\n            mm: '%d minutos',\n            h: 'uma hora',\n            hh: '%d horas',\n            d: 'um dia',\n            dd: '%d dias',\n            M: 'um mês',\n            MM: '%d meses',\n            y: 'um ano',\n            yy: '%d anos',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        invalidDate: 'Data inválida',\n    });\n\n    return ptBr;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9wdC1ici5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQ0FBK0M7QUFDL0MsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxvQ0FBb0MsSUFBSTtBQUN4QztBQUNBO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvcHQtYnIuanM/YjVhZSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogUG9ydHVndWVzZSAoQnJhemlsKSBbcHQtYnJdXG4vLyEgYXV0aG9yIDogQ2FpbyBSaWJlaXJvIFBlcmVpcmEgOiBodHRwczovL2dpdGh1Yi5jb20vY2Fpby1yaWJlaXJvLXBlcmVpcmFcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBwdEJyID0gbW9tZW50LmRlZmluZUxvY2FsZSgncHQtYnInLCB7XG4gICAgICAgIG1vbnRoczogJ2phbmVpcm9fZmV2ZXJlaXJvX21hcsOnb19hYnJpbF9tYWlvX2p1bmhvX2p1bGhvX2Fnb3N0b19zZXRlbWJyb19vdXR1YnJvX25vdmVtYnJvX2RlemVtYnJvJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ2phbl9mZXZfbWFyX2Ficl9tYWlfanVuX2p1bF9hZ29fc2V0X291dF9ub3ZfZGV6Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czpcbiAgICAgICAgICAgICdkb21pbmdvX3NlZ3VuZGEtZmVpcmFfdGVyw6dhLWZlaXJhX3F1YXJ0YS1mZWlyYV9xdWludGEtZmVpcmFfc2V4dGEtZmVpcmFfc8OhYmFkbycuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnZG9tX3NlZ190ZXJfcXVhX3F1aV9zZXhfc8OhYicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdkb18ywqpfM8KqXzTCql81wqpfNsKqX3PDoScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgW2RlXSBNTU1NIFtkZV0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIFtkZV0gTU1NTSBbZGVdIFlZWVkgW8Ogc10gSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgW2RlXSBNTU1NIFtkZV0gWVlZWSBbw6BzXSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW0hvamUgw6BzXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW0FtYW5ow6Mgw6BzXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW8Ogc10gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tPbnRlbSDDoHNdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF5KCkgPT09IDAgfHwgdGhpcy5kYXkoKSA9PT0gNlxuICAgICAgICAgICAgICAgICAgICA/ICdbw5psdGltb10gZGRkZCBbw6BzXSBMVCcgLy8gU2F0dXJkYXkgKyBTdW5kYXlcbiAgICAgICAgICAgICAgICAgICAgOiAnW8OabHRpbWFdIGRkZGQgW8Ogc10gTFQnOyAvLyBNb25kYXkgLSBGcmlkYXlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ2VtICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICdow6EgJXMnLFxuICAgICAgICAgICAgczogJ3BvdWNvcyBzZWd1bmRvcycsXG4gICAgICAgICAgICBzczogJyVkIHNlZ3VuZG9zJyxcbiAgICAgICAgICAgIG06ICd1bSBtaW51dG8nLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dG9zJyxcbiAgICAgICAgICAgIGg6ICd1bWEgaG9yYScsXG4gICAgICAgICAgICBoaDogJyVkIGhvcmFzJyxcbiAgICAgICAgICAgIGQ6ICd1bSBkaWEnLFxuICAgICAgICAgICAgZGQ6ICclZCBkaWFzJyxcbiAgICAgICAgICAgIE06ICd1bSBtw6pzJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbWVzZXMnLFxuICAgICAgICAgICAgeTogJ3VtIGFubycsXG4gICAgICAgICAgICB5eTogJyVkIGFub3MnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn3Cui8sXG4gICAgICAgIG9yZGluYWw6ICclZMK6JyxcbiAgICAgICAgaW52YWxpZERhdGU6ICdEYXRhIGludsOhbGlkYScsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gcHRCcjtcblxufSkpKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/pt-br.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/pt.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/pt.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Portuguese [pt]\n//! author : Jefferson : https://github.com/jalex79\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var pt = moment.defineLocale('pt', {\n        months: 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split(\n            '_'\n        ),\n        monthsShort: 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'),\n        weekdays:\n            'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split(\n                '_'\n            ),\n        weekdaysShort: 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),\n        weekdaysMin: 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D [de] MMMM [de] YYYY',\n            LLL: 'D [de] MMMM [de] YYYY HH:mm',\n            LLLL: 'dddd, D [de] MMMM [de] YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Hoje às] LT',\n            nextDay: '[Amanhã às] LT',\n            nextWeek: 'dddd [às] LT',\n            lastDay: '[Ontem às] LT',\n            lastWeek: function () {\n                return this.day() === 0 || this.day() === 6\n                    ? '[Último] dddd [às] LT' // Saturday + Sunday\n                    : '[Última] dddd [às] LT'; // Monday - Friday\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'em %s',\n            past: 'há %s',\n            s: 'segundos',\n            ss: '%d segundos',\n            m: 'um minuto',\n            mm: '%d minutos',\n            h: 'uma hora',\n            hh: '%d horas',\n            d: 'um dia',\n            dd: '%d dias',\n            w: 'uma semana',\n            ww: '%d semanas',\n            M: 'um mês',\n            MM: '%d meses',\n            y: 'um ano',\n            yy: '%d anos',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return pt;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9wdC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQ0FBK0M7QUFDL0MsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvcHQuanM/ZmY0MiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogUG9ydHVndWVzZSBbcHRdXG4vLyEgYXV0aG9yIDogSmVmZmVyc29uIDogaHR0cHM6Ly9naXRodWIuY29tL2phbGV4NzlcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBwdCA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3B0Jywge1xuICAgICAgICBtb250aHM6ICdqYW5laXJvX2ZldmVyZWlyb19tYXLDp29fYWJyaWxfbWFpb19qdW5ob19qdWxob19hZ29zdG9fc2V0ZW1icm9fb3V0dWJyb19ub3ZlbWJyb19kZXplbWJybycuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdqYW5fZmV2X21hcl9hYnJfbWFpX2p1bl9qdWxfYWdvX3NldF9vdXRfbm92X2Rleicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6XG4gICAgICAgICAgICAnRG9taW5nb19TZWd1bmRhLWZlaXJhX1RlcsOnYS1mZWlyYV9RdWFydGEtZmVpcmFfUXVpbnRhLWZlaXJhX1NleHRhLWZlaXJhX1PDoWJhZG8nLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ0RvbV9TZWdfVGVyX1F1YV9RdWlfU2V4X1PDoWInLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnRG9fMsKqXzPCql80wqpfNcKqXzbCql9Tw6EnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIFtkZV0gTU1NTSBbZGVdIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBbZGVdIE1NTU0gW2RlXSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIFtkZV0gTU1NTSBbZGVdIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tIb2plIMOgc10gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tBbWFuaMOjIMOgc10gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFvDoHNdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbT250ZW0gw6BzXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRheSgpID09PSAwIHx8IHRoaXMuZGF5KCkgPT09IDZcbiAgICAgICAgICAgICAgICAgICAgPyAnW8OabHRpbW9dIGRkZGQgW8Ogc10gTFQnIC8vIFNhdHVyZGF5ICsgU3VuZGF5XG4gICAgICAgICAgICAgICAgICAgIDogJ1vDmmx0aW1hXSBkZGRkIFvDoHNdIExUJzsgLy8gTW9uZGF5IC0gRnJpZGF5XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdlbSAlcycsXG4gICAgICAgICAgICBwYXN0OiAnaMOhICVzJyxcbiAgICAgICAgICAgIHM6ICdzZWd1bmRvcycsXG4gICAgICAgICAgICBzczogJyVkIHNlZ3VuZG9zJyxcbiAgICAgICAgICAgIG06ICd1bSBtaW51dG8nLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dG9zJyxcbiAgICAgICAgICAgIGg6ICd1bWEgaG9yYScsXG4gICAgICAgICAgICBoaDogJyVkIGhvcmFzJyxcbiAgICAgICAgICAgIGQ6ICd1bSBkaWEnLFxuICAgICAgICAgICAgZGQ6ICclZCBkaWFzJyxcbiAgICAgICAgICAgIHc6ICd1bWEgc2VtYW5hJyxcbiAgICAgICAgICAgIHd3OiAnJWQgc2VtYW5hcycsXG4gICAgICAgICAgICBNOiAndW0gbcOqcycsXG4gICAgICAgICAgICBNTTogJyVkIG1lc2VzJyxcbiAgICAgICAgICAgIHk6ICd1bSBhbm8nLFxuICAgICAgICAgICAgeXk6ICclZCBhbm9zJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9wrovLFxuICAgICAgICBvcmRpbmFsOiAnJWTCuicsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBwdDtcblxufSkpKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/pt.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/ro.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/ro.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Romanian [ro]\n//! author : Vlad Gurdiga : https://github.com/gurdiga\n//! author : Valentin Agachi : https://github.com/avaly\n//! author : Emanuel Cepoi : https://github.com/cepem\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function relativeTimeWithPlural(number, withoutSuffix, key) {\n        var format = {\n                ss: 'secunde',\n                mm: 'minute',\n                hh: 'ore',\n                dd: 'zile',\n                ww: 'săptămâni',\n                MM: 'luni',\n                yy: 'ani',\n            },\n            separator = ' ';\n        if (number % 100 >= 20 || (number >= 100 && number % 100 === 0)) {\n            separator = ' de ';\n        }\n        return number + separator + format[key];\n    }\n\n    var ro = moment.defineLocale('ro', {\n        months: 'ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie'.split(\n            '_'\n        ),\n        monthsShort:\n            'ian._feb._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'duminică_luni_marți_miercuri_joi_vineri_sâmbătă'.split('_'),\n        weekdaysShort: 'Dum_Lun_Mar_Mie_Joi_Vin_Sâm'.split('_'),\n        weekdaysMin: 'Du_Lu_Ma_Mi_Jo_Vi_Sâ'.split('_'),\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY H:mm',\n            LLLL: 'dddd, D MMMM YYYY H:mm',\n        },\n        calendar: {\n            sameDay: '[azi la] LT',\n            nextDay: '[mâine la] LT',\n            nextWeek: 'dddd [la] LT',\n            lastDay: '[ieri la] LT',\n            lastWeek: '[fosta] dddd [la] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'peste %s',\n            past: '%s în urmă',\n            s: 'câteva secunde',\n            ss: relativeTimeWithPlural,\n            m: 'un minut',\n            mm: relativeTimeWithPlural,\n            h: 'o oră',\n            hh: relativeTimeWithPlural,\n            d: 'o zi',\n            dd: relativeTimeWithPlural,\n            w: 'o săptămână',\n            ww: relativeTimeWithPlural,\n            M: 'o lună',\n            MM: relativeTimeWithPlural,\n            y: 'un an',\n            yy: relativeTimeWithPlural,\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return ro;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9yby5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxrREFBVztBQUNyRSxHQUFHLENBQ3NCO0FBQ3pCLENBQUMsNEJBQTRCOztBQUU3Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3JvLmpzPzYyYTkiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFJvbWFuaWFuIFtyb11cbi8vISBhdXRob3IgOiBWbGFkIEd1cmRpZ2EgOiBodHRwczovL2dpdGh1Yi5jb20vZ3VyZGlnYVxuLy8hIGF1dGhvciA6IFZhbGVudGluIEFnYWNoaSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9hdmFseVxuLy8hIGF1dGhvciA6IEVtYW51ZWwgQ2Vwb2kgOiBodHRwczovL2dpdGh1Yi5jb20vY2VwZW1cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIGZ1bmN0aW9uIHJlbGF0aXZlVGltZVdpdGhQbHVyYWwobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXkpIHtcbiAgICAgICAgdmFyIGZvcm1hdCA9IHtcbiAgICAgICAgICAgICAgICBzczogJ3NlY3VuZGUnLFxuICAgICAgICAgICAgICAgIG1tOiAnbWludXRlJyxcbiAgICAgICAgICAgICAgICBoaDogJ29yZScsXG4gICAgICAgICAgICAgICAgZGQ6ICd6aWxlJyxcbiAgICAgICAgICAgICAgICB3dzogJ3PEg3B0xINtw6JuaScsXG4gICAgICAgICAgICAgICAgTU06ICdsdW5pJyxcbiAgICAgICAgICAgICAgICB5eTogJ2FuaScsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2VwYXJhdG9yID0gJyAnO1xuICAgICAgICBpZiAobnVtYmVyICUgMTAwID49IDIwIHx8IChudW1iZXIgPj0gMTAwICYmIG51bWJlciAlIDEwMCA9PT0gMCkpIHtcbiAgICAgICAgICAgIHNlcGFyYXRvciA9ICcgZGUgJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVtYmVyICsgc2VwYXJhdG9yICsgZm9ybWF0W2tleV07XG4gICAgfVxuXG4gICAgdmFyIHJvID0gbW9tZW50LmRlZmluZUxvY2FsZSgncm8nLCB7XG4gICAgICAgIG1vbnRoczogJ2lhbnVhcmllX2ZlYnJ1YXJpZV9tYXJ0aWVfYXByaWxpZV9tYWlfaXVuaWVfaXVsaWVfYXVndXN0X3NlcHRlbWJyaWVfb2N0b21icmllX25vaWVtYnJpZV9kZWNlbWJyaWUnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ2lhbi5fZmViLl9tYXJ0Ll9hcHIuX21haV9pdW4uX2l1bC5fYXVnLl9zZXB0Ll9vY3QuX25vdi5fZGVjLicuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czogJ2R1bWluaWPEg19sdW5pX21hcsibaV9taWVyY3VyaV9qb2lfdmluZXJpX3PDom1ixIN0xIMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdEdW1fTHVuX01hcl9NaWVfSm9pX1Zpbl9Tw6JtJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ0R1X0x1X01hX01pX0pvX1ZpX1PDoicuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSDptbScsXG4gICAgICAgICAgICBMVFM6ICdIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW2F6aSBsYV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1ttw6JpbmUgbGFdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbbGFdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbaWVyaSBsYV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbZm9zdGFdIGRkZGQgW2xhXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ3Blc3RlICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyDDrm4gdXJtxIMnLFxuICAgICAgICAgICAgczogJ2PDonRldmEgc2VjdW5kZScsXG4gICAgICAgICAgICBzczogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgICAgIG06ICd1biBtaW51dCcsXG4gICAgICAgICAgICBtbTogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgICAgIGg6ICdvIG9yxIMnLFxuICAgICAgICAgICAgaGg6IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICBkOiAnbyB6aScsXG4gICAgICAgICAgICBkZDogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgICAgIHc6ICdvIHPEg3B0xINtw6JuxIMnLFxuICAgICAgICAgICAgd3c6IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICBNOiAnbyBsdW7EgycsXG4gICAgICAgICAgICBNTTogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgICAgIHk6ICd1biBhbicsXG4gICAgICAgICAgICB5eTogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNywgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gN3RoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJvO1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/ro.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/ru.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/ru.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Russian [ru]\n//! author : Viktorminator : https://github.com/Viktorminator\n//! author : Menelion Elensúle : https://github.com/Oire\n//! author : Коренберг Марк : https://github.com/socketpair\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function plural(word, num) {\n        var forms = word.split('_');\n        return num % 10 === 1 && num % 100 !== 11\n            ? forms[0]\n            : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20)\n            ? forms[1]\n            : forms[2];\n    }\n    function relativeTimeWithPlural(number, withoutSuffix, key) {\n        var format = {\n            ss: withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд',\n            mm: withoutSuffix ? 'минута_минуты_минут' : 'минуту_минуты_минут',\n            hh: 'час_часа_часов',\n            dd: 'день_дня_дней',\n            ww: 'неделя_недели_недель',\n            MM: 'месяц_месяца_месяцев',\n            yy: 'год_года_лет',\n        };\n        if (key === 'm') {\n            return withoutSuffix ? 'минута' : 'минуту';\n        } else {\n            return number + ' ' + plural(format[key], +number);\n        }\n    }\n    var monthsParse = [\n        /^янв/i,\n        /^фев/i,\n        /^мар/i,\n        /^апр/i,\n        /^ма[йя]/i,\n        /^июн/i,\n        /^июл/i,\n        /^авг/i,\n        /^сен/i,\n        /^окт/i,\n        /^ноя/i,\n        /^дек/i,\n    ];\n\n    // http://new.gramota.ru/spravka/rules/139-prop : § 103\n    // Сокращения месяцев: http://new.gramota.ru/spravka/buro/search-answer?s=242637\n    // CLDR data:          http://www.unicode.org/cldr/charts/28/summary/ru.html#1753\n    var ru = moment.defineLocale('ru', {\n        months: {\n            format: 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split(\n                '_'\n            ),\n            standalone:\n                'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split(\n                    '_'\n                ),\n        },\n        monthsShort: {\n            // по CLDR именно \"июл.\" и \"июн.\", но какой смысл менять букву на точку?\n            format: 'янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.'.split(\n                '_'\n            ),\n            standalone:\n                'янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.'.split(\n                    '_'\n                ),\n        },\n        weekdays: {\n            standalone:\n                'воскресенье_понедельник_вторник_среда_четверг_пятница_суббота'.split(\n                    '_'\n                ),\n            format: 'воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу'.split(\n                '_'\n            ),\n            isFormat: /\\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?] ?dddd/,\n        },\n        weekdaysShort: 'вс_пн_вт_ср_чт_пт_сб'.split('_'),\n        weekdaysMin: 'вс_пн_вт_ср_чт_пт_сб'.split('_'),\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n\n        // полные названия с падежами, по три буквы, для некоторых, по 4 буквы, сокращения с точкой и без точки\n        monthsRegex:\n            /^(январ[ья]|янв\\.?|феврал[ья]|февр?\\.?|марта?|мар\\.?|апрел[ья]|апр\\.?|ма[йя]|июн[ья]|июн\\.?|июл[ья]|июл\\.?|августа?|авг\\.?|сентябр[ья]|сент?\\.?|октябр[ья]|окт\\.?|ноябр[ья]|нояб?\\.?|декабр[ья]|дек\\.?)/i,\n\n        // копия предыдущего\n        monthsShortRegex:\n            /^(январ[ья]|янв\\.?|феврал[ья]|февр?\\.?|марта?|мар\\.?|апрел[ья]|апр\\.?|ма[йя]|июн[ья]|июн\\.?|июл[ья]|июл\\.?|августа?|авг\\.?|сентябр[ья]|сент?\\.?|октябр[ья]|окт\\.?|ноябр[ья]|нояб?\\.?|декабр[ья]|дек\\.?)/i,\n\n        // полные названия с падежами\n        monthsStrictRegex:\n            /^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i,\n\n        // Выражение, которое соответствует только сокращённым формам\n        monthsShortStrictRegex:\n            /^(янв\\.|февр?\\.|мар[т.]|апр\\.|ма[яй]|июн[ья.]|июл[ья.]|авг\\.|сент?\\.|окт\\.|нояб?\\.|дек\\.)/i,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY г.',\n            LLL: 'D MMMM YYYY г., H:mm',\n            LLLL: 'dddd, D MMMM YYYY г., H:mm',\n        },\n        calendar: {\n            sameDay: '[Сегодня, в] LT',\n            nextDay: '[Завтра, в] LT',\n            lastDay: '[Вчера, в] LT',\n            nextWeek: function (now) {\n                if (now.week() !== this.week()) {\n                    switch (this.day()) {\n                        case 0:\n                            return '[В следующее] dddd, [в] LT';\n                        case 1:\n                        case 2:\n                        case 4:\n                            return '[В следующий] dddd, [в] LT';\n                        case 3:\n                        case 5:\n                        case 6:\n                            return '[В следующую] dddd, [в] LT';\n                    }\n                } else {\n                    if (this.day() === 2) {\n                        return '[Во] dddd, [в] LT';\n                    } else {\n                        return '[В] dddd, [в] LT';\n                    }\n                }\n            },\n            lastWeek: function (now) {\n                if (now.week() !== this.week()) {\n                    switch (this.day()) {\n                        case 0:\n                            return '[В прошлое] dddd, [в] LT';\n                        case 1:\n                        case 2:\n                        case 4:\n                            return '[В прошлый] dddd, [в] LT';\n                        case 3:\n                        case 5:\n                        case 6:\n                            return '[В прошлую] dddd, [в] LT';\n                    }\n                } else {\n                    if (this.day() === 2) {\n                        return '[Во] dddd, [в] LT';\n                    } else {\n                        return '[В] dddd, [в] LT';\n                    }\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'через %s',\n            past: '%s назад',\n            s: 'несколько секунд',\n            ss: relativeTimeWithPlural,\n            m: relativeTimeWithPlural,\n            mm: relativeTimeWithPlural,\n            h: 'час',\n            hh: relativeTimeWithPlural,\n            d: 'день',\n            dd: relativeTimeWithPlural,\n            w: 'неделя',\n            ww: relativeTimeWithPlural,\n            M: 'месяц',\n            MM: relativeTimeWithPlural,\n            y: 'год',\n            yy: relativeTimeWithPlural,\n        },\n        meridiemParse: /ночи|утра|дня|вечера/i,\n        isPM: function (input) {\n            return /^(дня|вечера)$/.test(input);\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ночи';\n            } else if (hour < 12) {\n                return 'утра';\n            } else if (hour < 17) {\n                return 'дня';\n            } else {\n                return 'вечера';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(й|го|я)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'M':\n                case 'd':\n                case 'DDD':\n                    return number + '-й';\n                case 'D':\n                    return number + '-го';\n                case 'w':\n                case 'W':\n                    return number + '-я';\n                default:\n                    return number;\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return ru;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ydS5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxrREFBVztBQUNyRSxHQUFHLENBQ3NCO0FBQ3pCLENBQUMsNEJBQTRCOztBQUU3Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBLHNCQUFzQjtBQUN0QjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0Esc0JBQXNCO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLFNBQVM7QUFDVCxvQ0FBb0MsSUFBSTtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ydS5qcz9iOTczIl0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBSdXNzaWFuIFtydV1cbi8vISBhdXRob3IgOiBWaWt0b3JtaW5hdG9yIDogaHR0cHM6Ly9naXRodWIuY29tL1Zpa3Rvcm1pbmF0b3Jcbi8vISBhdXRob3IgOiBNZW5lbGlvbiBFbGVuc8O6bGUgOiBodHRwczovL2dpdGh1Yi5jb20vT2lyZVxuLy8hIGF1dGhvciA6INCa0L7RgNC10L3QsdC10YDQsyDQnNCw0YDQuiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9zb2NrZXRwYWlyXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICBmdW5jdGlvbiBwbHVyYWwod29yZCwgbnVtKSB7XG4gICAgICAgIHZhciBmb3JtcyA9IHdvcmQuc3BsaXQoJ18nKTtcbiAgICAgICAgcmV0dXJuIG51bSAlIDEwID09PSAxICYmIG51bSAlIDEwMCAhPT0gMTFcbiAgICAgICAgICAgID8gZm9ybXNbMF1cbiAgICAgICAgICAgIDogbnVtICUgMTAgPj0gMiAmJiBudW0gJSAxMCA8PSA0ICYmIChudW0gJSAxMDAgPCAxMCB8fCBudW0gJSAxMDAgPj0gMjApXG4gICAgICAgICAgICA/IGZvcm1zWzFdXG4gICAgICAgICAgICA6IGZvcm1zWzJdO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5KSB7XG4gICAgICAgIHZhciBmb3JtYXQgPSB7XG4gICAgICAgICAgICBzczogd2l0aG91dFN1ZmZpeCA/ICfRgdC10LrRg9C90LTQsF/RgdC10LrRg9C90LTRi1/RgdC10LrRg9C90LQnIDogJ9GB0LXQutGD0L3QtNGDX9GB0LXQutGD0L3QtNGLX9GB0LXQutGD0L3QtCcsXG4gICAgICAgICAgICBtbTogd2l0aG91dFN1ZmZpeCA/ICfQvNC40L3Rg9GC0LBf0LzQuNC90YPRgtGLX9C80LjQvdGD0YInIDogJ9C80LjQvdGD0YLRg1/QvNC40L3Rg9GC0Ytf0LzQuNC90YPRgicsXG4gICAgICAgICAgICBoaDogJ9GH0LDRgV/Rh9Cw0YHQsF/Rh9Cw0YHQvtCyJyxcbiAgICAgICAgICAgIGRkOiAn0LTQtdC90Yxf0LTQvdGPX9C00L3QtdC5JyxcbiAgICAgICAgICAgIHd3OiAn0L3QtdC00LXQu9GPX9C90LXQtNC10LvQuF/QvdC10LTQtdC70YwnLFxuICAgICAgICAgICAgTU06ICfQvNC10YHRj9GGX9C80LXRgdGP0YbQsF/QvNC10YHRj9GG0LXQsicsXG4gICAgICAgICAgICB5eTogJ9Cz0L7QtF/Qs9C+0LTQsF/Qu9C10YInLFxuICAgICAgICB9O1xuICAgICAgICBpZiAoa2V5ID09PSAnbScpIHtcbiAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gJ9C80LjQvdGD0YLQsCcgOiAn0LzQuNC90YPRgtGDJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnICcgKyBwbHVyYWwoZm9ybWF0W2tleV0sICtudW1iZXIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZhciBtb250aHNQYXJzZSA9IFtcbiAgICAgICAgL17Rj9C90LIvaSxcbiAgICAgICAgL17RhNC10LIvaSxcbiAgICAgICAgL17QvNCw0YAvaSxcbiAgICAgICAgL17QsNC/0YAvaSxcbiAgICAgICAgL17QvNCwW9C50Y9dL2ksXG4gICAgICAgIC9e0LjRjtC9L2ksXG4gICAgICAgIC9e0LjRjtC7L2ksXG4gICAgICAgIC9e0LDQstCzL2ksXG4gICAgICAgIC9e0YHQtdC9L2ksXG4gICAgICAgIC9e0L7QutGCL2ksXG4gICAgICAgIC9e0L3QvtGPL2ksXG4gICAgICAgIC9e0LTQtdC6L2ksXG4gICAgXTtcblxuICAgIC8vIGh0dHA6Ly9uZXcuZ3JhbW90YS5ydS9zcHJhdmthL3J1bGVzLzEzOS1wcm9wIDogwqcgMTAzXG4gICAgLy8g0KHQvtC60YDQsNGJ0LXQvdC40Y8g0LzQtdGB0Y/RhtC10LI6IGh0dHA6Ly9uZXcuZ3JhbW90YS5ydS9zcHJhdmthL2J1cm8vc2VhcmNoLWFuc3dlcj9zPTI0MjYzN1xuICAgIC8vIENMRFIgZGF0YTogICAgICAgICAgaHR0cDovL3d3dy51bmljb2RlLm9yZy9jbGRyL2NoYXJ0cy8yOC9zdW1tYXJ5L3J1Lmh0bWwjMTc1M1xuICAgIHZhciBydSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3J1Jywge1xuICAgICAgICBtb250aHM6IHtcbiAgICAgICAgICAgIGZvcm1hdDogJ9GP0L3QstCw0YDRj1/RhNC10LLRgNCw0LvRj1/QvNCw0YDRgtCwX9Cw0L/RgNC10LvRj1/QvNCw0Y9f0LjRjtC90Y9f0LjRjtC70Y9f0LDQstCz0YPRgdGC0LBf0YHQtdC90YLRj9Cx0YDRj1/QvtC60YLRj9Cx0YDRj1/QvdC+0Y/QsdGA0Y9f0LTQtdC60LDQsdGA0Y8nLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHN0YW5kYWxvbmU6XG4gICAgICAgICAgICAgICAgJ9GP0L3QstCw0YDRjF/RhNC10LLRgNCw0LvRjF/QvNCw0YDRgl/QsNC/0YDQtdC70Yxf0LzQsNC5X9C40Y7QvdGMX9C40Y7Qu9GMX9Cw0LLQs9GD0YHRgl/RgdC10L3RgtGP0LHRgNGMX9C+0LrRgtGP0LHRgNGMX9C90L7Rj9Cx0YDRjF/QtNC10LrQsNCx0YDRjCcuc3BsaXQoXG4gICAgICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgICAgICksXG4gICAgICAgIH0sXG4gICAgICAgIG1vbnRoc1Nob3J0OiB7XG4gICAgICAgICAgICAvLyDQv9C+IENMRFIg0LjQvNC10L3QvdC+IFwi0LjRjtC7LlwiINC4IFwi0LjRjtC9LlwiLCDQvdC+INC60LDQutC+0Lkg0YHQvNGL0YHQuyDQvNC10L3Rj9GC0Ywg0LHRg9C60LLRgyDQvdCwINGC0L7Rh9C60YM/XG4gICAgICAgICAgICBmb3JtYXQ6ICfRj9C90LIuX9GE0LXQstGALl/QvNCw0YAuX9Cw0L/RgC5f0LzQsNGPX9C40Y7QvdGPX9C40Y7Qu9GPX9Cw0LLQsy5f0YHQtdC90YIuX9C+0LrRgi5f0L3QvtGP0LEuX9C00LXQui4nLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHN0YW5kYWxvbmU6XG4gICAgICAgICAgICAgICAgJ9GP0L3Qsi5f0YTQtdCy0YAuX9C80LDRgNGCX9Cw0L/RgC5f0LzQsNC5X9C40Y7QvdGMX9C40Y7Qu9GMX9Cw0LLQsy5f0YHQtdC90YIuX9C+0LrRgi5f0L3QvtGP0LEuX9C00LXQui4nLnNwbGl0KFxuICAgICAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICB9LFxuICAgICAgICB3ZWVrZGF5czoge1xuICAgICAgICAgICAgc3RhbmRhbG9uZTpcbiAgICAgICAgICAgICAgICAn0LLQvtGB0LrRgNC10YHQtdC90YzQtV/Qv9C+0L3QtdC00LXQu9GM0L3QuNC6X9Cy0YLQvtGA0L3QuNC6X9GB0YDQtdC00LBf0YfQtdGC0LLQtdGA0LNf0L/Rj9GC0L3QuNGG0LBf0YHRg9Cx0LHQvtGC0LAnLnNwbGl0KFxuICAgICAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgZm9ybWF0OiAn0LLQvtGB0LrRgNC10YHQtdC90YzQtV/Qv9C+0L3QtdC00LXQu9GM0L3QuNC6X9Cy0YLQvtGA0L3QuNC6X9GB0YDQtdC00YNf0YfQtdGC0LLQtdGA0LNf0L/Rj9GC0L3QuNGG0YNf0YHRg9Cx0LHQvtGC0YMnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGlzRm9ybWF0OiAvXFxbID9b0JLQsl0gPyg/OtC/0YDQvtGI0LvRg9GOfNGB0LvQtdC00YPRjtGJ0YPRjnzRjdGC0YMpPyA/XSA/ZGRkZC8sXG4gICAgICAgIH0sXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfQstGBX9C/0L1f0LLRgl/RgdGAX9GH0YJf0L/Rgl/RgdCxJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ9Cy0YFf0L/QvV/QstGCX9GB0YBf0YfRgl/Qv9GCX9GB0LEnLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1BhcnNlOiBtb250aHNQYXJzZSxcbiAgICAgICAgbG9uZ01vbnRoc1BhcnNlOiBtb250aHNQYXJzZSxcbiAgICAgICAgc2hvcnRNb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG5cbiAgICAgICAgLy8g0L/QvtC70L3Ri9C1INC90LDQt9Cy0LDQvdC40Y8g0YEg0L/QsNC00LXQttCw0LzQuCwg0L/QviDRgtGA0Lgg0LHRg9C60LLRiywg0LTQu9GPINC90LXQutC+0YLQvtGA0YvRhSwg0L/QviA0INCx0YPQutCy0YssINGB0L7QutGA0LDRidC10L3QuNGPINGBINGC0L7Rh9C60L7QuSDQuCDQsdC10Lcg0YLQvtGH0LrQuFxuICAgICAgICBtb250aHNSZWdleDpcbiAgICAgICAgICAgIC9eKNGP0L3QstCw0YBb0YzRj1180Y/QvdCyXFwuP3zRhNC10LLRgNCw0Ltb0YzRj1180YTQtdCy0YA/XFwuP3zQvNCw0YDRgtCwP3zQvNCw0YBcXC4/fNCw0L/RgNC10Ltb0YzRj1180LDQv9GAXFwuP3zQvNCwW9C50Y9dfNC40Y7QvVvRjNGPXXzQuNGO0L1cXC4/fNC40Y7Qu1vRjNGPXXzQuNGO0LtcXC4/fNCw0LLQs9GD0YHRgtCwP3zQsNCy0LNcXC4/fNGB0LXQvdGC0Y/QsdGAW9GM0Y9dfNGB0LXQvdGCP1xcLj980L7QutGC0Y/QsdGAW9GM0Y9dfNC+0LrRglxcLj980L3QvtGP0LHRgFvRjNGPXXzQvdC+0Y/QsT9cXC4/fNC00LXQutCw0LHRgFvRjNGPXXzQtNC10LpcXC4/KS9pLFxuXG4gICAgICAgIC8vINC60L7Qv9C40Y8g0L/RgNC10LTRi9C00YPRidC10LPQvlxuICAgICAgICBtb250aHNTaG9ydFJlZ2V4OlxuICAgICAgICAgICAgL14o0Y/QvdCy0LDRgFvRjNGPXXzRj9C90LJcXC4/fNGE0LXQstGA0LDQu1vRjNGPXXzRhNC10LLRgD9cXC4/fNC80LDRgNGC0LA/fNC80LDRgFxcLj980LDQv9GA0LXQu1vRjNGPXXzQsNC/0YBcXC4/fNC80LBb0LnRj1180LjRjtC9W9GM0Y9dfNC40Y7QvVxcLj980LjRjtC7W9GM0Y9dfNC40Y7Qu1xcLj980LDQstCz0YPRgdGC0LA/fNCw0LLQs1xcLj980YHQtdC90YLRj9Cx0YBb0YzRj1180YHQtdC90YI/XFwuP3zQvtC60YLRj9Cx0YBb0YzRj1180L7QutGCXFwuP3zQvdC+0Y/QsdGAW9GM0Y9dfNC90L7Rj9CxP1xcLj980LTQtdC60LDQsdGAW9GM0Y9dfNC00LXQulxcLj8pL2ksXG5cbiAgICAgICAgLy8g0L/QvtC70L3Ri9C1INC90LDQt9Cy0LDQvdC40Y8g0YEg0L/QsNC00LXQttCw0LzQuFxuICAgICAgICBtb250aHNTdHJpY3RSZWdleDpcbiAgICAgICAgICAgIC9eKNGP0L3QstCw0YBb0Y/RjF180YTQtdCy0YDQsNC7W9GP0YxdfNC80LDRgNGC0LA/fNCw0L/RgNC10Ltb0Y/RjF180LzQsFvRj9C5XXzQuNGO0L1b0Y/RjF180LjRjtC7W9GP0YxdfNCw0LLQs9GD0YHRgtCwP3zRgdC10L3RgtGP0LHRgFvRj9GMXXzQvtC60YLRj9Cx0YBb0Y/RjF180L3QvtGP0LHRgFvRj9GMXXzQtNC10LrQsNCx0YBb0Y/RjF0pL2ksXG5cbiAgICAgICAgLy8g0JLRi9GA0LDQttC10L3QuNC1LCDQutC+0YLQvtGA0L7QtSDRgdC+0L7RgtCy0LXRgtGB0YLQstGD0LXRgiDRgtC+0LvRjNC60L4g0YHQvtC60YDQsNGJ0ZHQvdC90YvQvCDRhNC+0YDQvNCw0LxcbiAgICAgICAgbW9udGhzU2hvcnRTdHJpY3RSZWdleDpcbiAgICAgICAgICAgIC9eKNGP0L3QslxcLnzRhNC10LLRgD9cXC580LzQsNGAW9GCLl180LDQv9GAXFwufNC80LBb0Y/QuV180LjRjtC9W9GM0Y8uXXzQuNGO0Ltb0YzRjy5dfNCw0LLQs1xcLnzRgdC10L3Rgj9cXC580L7QutGCXFwufNC90L7Rj9CxP1xcLnzQtNC10LpcXC4pL2ksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0g6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZINCzLicsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSDQsy4sIEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZINCzLiwgSDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW9Ch0LXQs9C+0LTQvdGPLCDQsl0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vQl9Cw0LLRgtGA0LAsINCyXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW9CS0YfQtdGA0LAsINCyXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogZnVuY3Rpb24gKG5vdykge1xuICAgICAgICAgICAgICAgIGlmIChub3cud2VlaygpICE9PSB0aGlzLndlZWsoKSkge1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1vQkiDRgdC70LXQtNGD0Y7RidC10LVdIGRkZGQsIFvQsl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW9CSINGB0LvQtdC00YPRjtGJ0LjQuV0gZGRkZCwgW9CyXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdb0JIg0YHQu9C10LTRg9GO0YnRg9GOXSBkZGRkLCBb0LJdIExUJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRheSgpID09PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1vQktC+XSBkZGRkLCBb0LJdIExUJztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW9CSXSBkZGRkLCBb0LJdIExUJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKG5vdykge1xuICAgICAgICAgICAgICAgIGlmIChub3cud2VlaygpICE9PSB0aGlzLndlZWsoKSkge1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1vQkiDQv9GA0L7RiNC70L7QtV0gZGRkZCwgW9CyXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdb0JIg0L/RgNC+0YjQu9GL0LldIGRkZGQsIFvQsl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW9CSINC/0YDQvtGI0LvRg9GOXSBkZGRkLCBb0LJdIExUJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRheSgpID09PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1vQktC+XSBkZGRkLCBb0LJdIExUJztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW9CSXSBkZGRkLCBb0LJdIExUJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ9GH0LXRgNC10LcgJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzINC90LDQt9Cw0LQnLFxuICAgICAgICAgICAgczogJ9C90LXRgdC60L7Qu9GM0LrQviDRgdC10LrRg9C90LQnLFxuICAgICAgICAgICAgc3M6IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICBtOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgbW06IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICBoOiAn0YfQsNGBJyxcbiAgICAgICAgICAgIGhoOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgZDogJ9C00LXQvdGMJyxcbiAgICAgICAgICAgIGRkOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgdzogJ9C90LXQtNC10LvRjycsXG4gICAgICAgICAgICB3dzogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgICAgIE06ICfQvNC10YHRj9GGJyxcbiAgICAgICAgICAgIE1NOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgeTogJ9Cz0L7QtCcsXG4gICAgICAgICAgICB5eTogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL9C90L7Rh9C4fNGD0YLRgNCwfNC00L3Rj3zQstC10YfQtdGA0LAvaSxcbiAgICAgICAgaXNQTTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gL14o0LTQvdGPfNCy0LXRh9C10YDQsCkkLy50ZXN0KGlucHV0KTtcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgNCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn0L3QvtGH0LgnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9GD0YLRgNCwJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDE3KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfQtNC90Y8nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9Cy0LXRh9C10YDQsCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfS0o0Ll80LPQvnzRjykvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyLCBwZXJpb2QpIHtcbiAgICAgICAgICAgIHN3aXRjaCAocGVyaW9kKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnTSc6XG4gICAgICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnREREJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct0LknO1xuICAgICAgICAgICAgICAgIGNhc2UgJ0QnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3Qs9C+JztcbiAgICAgICAgICAgICAgICBjYXNlICd3JzpcbiAgICAgICAgICAgICAgICBjYXNlICdXJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct0Y8nO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBydTtcblxufSkpKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/ru.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/sd.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/sd.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Sindhi [sd]\n//! author : Narain Sagar : https://github.com/narainsagar\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var months = [\n            'جنوري',\n            'فيبروري',\n            'مارچ',\n            'اپريل',\n            'مئي',\n            'جون',\n            'جولاءِ',\n            'آگسٽ',\n            'سيپٽمبر',\n            'آڪٽوبر',\n            'نومبر',\n            'ڊسمبر',\n        ],\n        days = ['آچر', 'سومر', 'اڱارو', 'اربع', 'خميس', 'جمع', 'ڇنڇر'];\n\n    var sd = moment.defineLocale('sd', {\n        months: months,\n        monthsShort: months,\n        weekdays: days,\n        weekdaysShort: days,\n        weekdaysMin: days,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd، D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /صبح|شام/,\n        isPM: function (input) {\n            return 'شام' === input;\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'صبح';\n            }\n            return 'شام';\n        },\n        calendar: {\n            sameDay: '[اڄ] LT',\n            nextDay: '[سڀاڻي] LT',\n            nextWeek: 'dddd [اڳين هفتي تي] LT',\n            lastDay: '[ڪالهه] LT',\n            lastWeek: '[گزريل هفتي] dddd [تي] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s پوء',\n            past: '%s اڳ',\n            s: 'چند سيڪنڊ',\n            ss: '%d سيڪنڊ',\n            m: 'هڪ منٽ',\n            mm: '%d منٽ',\n            h: 'هڪ ڪلاڪ',\n            hh: '%d ڪلاڪ',\n            d: 'هڪ ڏينهن',\n            dd: '%d ڏينهن',\n            M: 'هڪ مهينو',\n            MM: '%d مهينا',\n            y: 'هڪ سال',\n            yy: '%d سال',\n        },\n        preparse: function (string) {\n            return string.replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/,/g, '،');\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return sd;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zZC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zZC5qcz84YzY2Il0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBTaW5kaGkgW3NkXVxuLy8hIGF1dGhvciA6IE5hcmFpbiBTYWdhciA6IGh0dHBzOi8vZ2l0aHViLmNvbS9uYXJhaW5zYWdhclxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIG1vbnRocyA9IFtcbiAgICAgICAgICAgICfYrNmG2YjYsdmKJyxcbiAgICAgICAgICAgICfZgdmK2KjYsdmI2LHZiicsXG4gICAgICAgICAgICAn2YXYp9ix2oYnLFxuICAgICAgICAgICAgJ9in2b7YsdmK2YQnLFxuICAgICAgICAgICAgJ9mF2KbZiicsXG4gICAgICAgICAgICAn2KzZiNmGJyxcbiAgICAgICAgICAgICfYrNmI2YTYp9ih2ZAnLFxuICAgICAgICAgICAgJ9ii2q/Ys9m9JyxcbiAgICAgICAgICAgICfYs9mK2b7ZvdmF2KjYsScsXG4gICAgICAgICAgICAn2KLaqtm92YjYqNixJyxcbiAgICAgICAgICAgICfZhtmI2YXYqNixJyxcbiAgICAgICAgICAgICfaitiz2YXYqNixJyxcbiAgICAgICAgXSxcbiAgICAgICAgZGF5cyA9IFsn2KLahtixJywgJ9iz2YjZhdixJywgJ9in2rHYp9ix2YgnLCAn2KfYsdio2LknLCAn2K7ZhdmK2LMnLCAn2KzZhdi5JywgJ9qH2Ybah9ixJ107XG5cbiAgICB2YXIgc2QgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdzZCcsIHtcbiAgICAgICAgbW9udGhzOiBtb250aHMsXG4gICAgICAgIG1vbnRoc1Nob3J0OiBtb250aHMsXG4gICAgICAgIHdlZWtkYXlzOiBkYXlzLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiBkYXlzLFxuICAgICAgICB3ZWVrZGF5c01pbjogZGF5cyxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZNiMIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL9i12KjYrXzYtNin2YUvLFxuICAgICAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiAn2LTYp9mFJyA9PT0gaW5wdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfYtdio2K0nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuICfYtNin2YUnO1xuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vYp9qEXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW9iz2oDYp9q72YpdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBb2Kfas9mK2YYg2YfZgdiq2Yog2KrZil0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vaqtin2YTZh9mHXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1var9iy2LHZitmEINmH2YHYqtmKXSBkZGRkIFvYqtmKXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVzINm+2YjYoScsXG4gICAgICAgICAgICBwYXN0OiAnJXMg2KfasycsXG4gICAgICAgICAgICBzOiAn2obZhtivINiz2YraqtmG2oonLFxuICAgICAgICAgICAgc3M6ICclZCDYs9mK2qrZhtqKJyxcbiAgICAgICAgICAgIG06ICfZh9qqINmF2YbZvScsXG4gICAgICAgICAgICBtbTogJyVkINmF2YbZvScsXG4gICAgICAgICAgICBoOiAn2YfaqiDaqtmE2KfaqicsXG4gICAgICAgICAgICBoaDogJyVkINqq2YTYp9qqJyxcbiAgICAgICAgICAgIGQ6ICfZh9qqINqP2YrZhtmH2YYnLFxuICAgICAgICAgICAgZGQ6ICclZCDaj9mK2YbZh9mGJyxcbiAgICAgICAgICAgIE06ICfZh9qqINmF2YfZitmG2YgnLFxuICAgICAgICAgICAgTU06ICclZCDZhdmH2YrZhtinJyxcbiAgICAgICAgICAgIHk6ICfZh9qqINiz2KfZhCcsXG4gICAgICAgICAgICB5eTogJyVkINiz2KfZhCcsXG4gICAgICAgIH0sXG4gICAgICAgIHByZXBhcnNlOiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL9iML2csICcsJyk7XG4gICAgICAgIH0sXG4gICAgICAgIHBvc3Rmb3JtYXQ6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvLC9nLCAn2IwnKTtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNkO1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/sd.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/se.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/se.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Northern Sami [se]\n//! authors : Bård Rolstad Henriksen : https://github.com/karamell\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var se = moment.defineLocale('se', {\n        months: 'ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu'.split(\n            '_'\n        ),\n        monthsShort:\n            'ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov'.split('_'),\n        weekdays:\n            'sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat'.split(\n                '_'\n            ),\n        weekdaysShort: 'sotn_vuos_maŋ_gask_duor_bear_láv'.split('_'),\n        weekdaysMin: 's_v_m_g_d_b_L'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'MMMM D. [b.] YYYY',\n            LLL: 'MMMM D. [b.] YYYY [ti.] HH:mm',\n            LLLL: 'dddd, MMMM D. [b.] YYYY [ti.] HH:mm',\n        },\n        calendar: {\n            sameDay: '[otne ti] LT',\n            nextDay: '[ihttin ti] LT',\n            nextWeek: 'dddd [ti] LT',\n            lastDay: '[ikte ti] LT',\n            lastWeek: '[ovddit] dddd [ti] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s geažes',\n            past: 'maŋit %s',\n            s: 'moadde sekunddat',\n            ss: '%d sekunddat',\n            m: 'okta minuhta',\n            mm: '%d minuhtat',\n            h: 'okta diimmu',\n            hh: '%d diimmut',\n            d: 'okta beaivi',\n            dd: '%d beaivvit',\n            M: 'okta mánnu',\n            MM: '%d mánut',\n            y: 'okta jahki',\n            yy: '%d jagit',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return se;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zZS5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxvQ0FBb0MsSUFBSTtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zZS5qcz9kZmViIl0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBOb3J0aGVybiBTYW1pIFtzZV1cbi8vISBhdXRob3JzIDogQsOlcmQgUm9sc3RhZCBIZW5yaWtzZW4gOiBodHRwczovL2dpdGh1Yi5jb20va2FyYW1lbGxcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBzZSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3NlJywge1xuICAgICAgICBtb250aHM6ICdvxJHEkWFqYWdlbcOhbm51X2d1b3Z2YW3DoW5udV9uanVrxI1hbcOhbm51X2N1b8WLb23DoW5udV9taWVzc2Vtw6FubnVfZ2Vhc3NlbcOhbm51X3N1b2lkbmVtw6FubnVfYm9yZ2Vtw6FubnVfxI1ha8SNYW3DoW5udV9nb2xnZ290bcOhbm51X3Nrw6FibWFtw6FubnVfanVvdmxhbcOhbm51Jy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICdvxJHEkWpfZ3Vvdl9uanVrX2N1b19taWVzX2dlYXNfc3VvaV9ib3JnX8SNYWvEjV9nb2xnX3Nrw6FiX2p1b3YnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOlxuICAgICAgICAgICAgJ3NvdG5hYmVhaXZpX3Z1b3Nzw6FyZ2FfbWHFi8WLZWLDoXJnYV9nYXNrYXZhaGtrdV9kdW9yYXN0YXRfYmVhcmphZGF0X2zDoXZ2YXJkYXQnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ3NvdG5fdnVvc19tYcWLX2dhc2tfZHVvcl9iZWFyX2zDoXYnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnc192X21fZ19kX2JfTCcuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdNTU1NIEQuIFtiLl0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdNTU1NIEQuIFtiLl0gWVlZWSBbdGkuXSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgTU1NTSBELiBbYi5dIFlZWVkgW3RpLl0gSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tvdG5lIHRpXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW2lodHRpbiB0aV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFt0aV0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tpa3RlIHRpXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1tvdmRkaXRdIGRkZGQgW3RpXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVzIGdlYcW+ZXMnLFxuICAgICAgICAgICAgcGFzdDogJ21hxYtpdCAlcycsXG4gICAgICAgICAgICBzOiAnbW9hZGRlIHNla3VuZGRhdCcsXG4gICAgICAgICAgICBzczogJyVkIHNla3VuZGRhdCcsXG4gICAgICAgICAgICBtOiAnb2t0YSBtaW51aHRhJyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludWh0YXQnLFxuICAgICAgICAgICAgaDogJ29rdGEgZGlpbW11JyxcbiAgICAgICAgICAgIGhoOiAnJWQgZGlpbW11dCcsXG4gICAgICAgICAgICBkOiAnb2t0YSBiZWFpdmknLFxuICAgICAgICAgICAgZGQ6ICclZCBiZWFpdnZpdCcsXG4gICAgICAgICAgICBNOiAnb2t0YSBtw6FubnUnLFxuICAgICAgICAgICAgTU06ICclZCBtw6FudXQnLFxuICAgICAgICAgICAgeTogJ29rdGEgamFoa2knLFxuICAgICAgICAgICAgeXk6ICclZCBqYWdpdCcsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWw6ICclZC4nLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gc2U7XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/se.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/si.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/si.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Sinhalese [si]\n//! author : Sampath Sitinamaluwa : https://github.com/sampathsris\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    /*jshint -W100*/\n    var si = moment.defineLocale('si', {\n        months: 'ජනවාරි_පෙබරවාරි_මාර්තු_අප්‍රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්'.split(\n            '_'\n        ),\n        monthsShort: 'ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ'.split(\n            '_'\n        ),\n        weekdays:\n            'ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා'.split(\n                '_'\n            ),\n        weekdaysShort: 'ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන'.split('_'),\n        weekdaysMin: 'ඉ_ස_අ_බ_බ්‍ර_සි_සෙ'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'a h:mm',\n            LTS: 'a h:mm:ss',\n            L: 'YYYY/MM/DD',\n            LL: 'YYYY MMMM D',\n            LLL: 'YYYY MMMM D, a h:mm',\n            LLLL: 'YYYY MMMM D [වැනි] dddd, a h:mm:ss',\n        },\n        calendar: {\n            sameDay: '[අද] LT[ට]',\n            nextDay: '[හෙට] LT[ට]',\n            nextWeek: 'dddd LT[ට]',\n            lastDay: '[ඊයේ] LT[ට]',\n            lastWeek: '[පසුගිය] dddd LT[ට]',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%sකින්',\n            past: '%sකට පෙර',\n            s: 'තත්පර කිහිපය',\n            ss: 'තත්පර %d',\n            m: 'මිනිත්තුව',\n            mm: 'මිනිත්තු %d',\n            h: 'පැය',\n            hh: 'පැය %d',\n            d: 'දිනය',\n            dd: 'දින %d',\n            M: 'මාසය',\n            MM: 'මාස %d',\n            y: 'වසර',\n            yy: 'වසර %d',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2} වැනි/,\n        ordinal: function (number) {\n            return number + ' වැනි';\n        },\n        meridiemParse: /පෙර වරු|පස් වරු|පෙ.ව|ප.ව./,\n        isPM: function (input) {\n            return input === 'ප.ව.' || input === 'පස් වරු';\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours > 11) {\n                return isLower ? 'ප.ව.' : 'පස් වරු';\n            } else {\n                return isLower ? 'පෙ.ව.' : 'පෙර වරු';\n            }\n        },\n    });\n\n    return si;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zaS5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxvQ0FBb0MsS0FBSztBQUN6QztBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zaS5qcz85NTVmIl0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBTaW5oYWxlc2UgW3NpXVxuLy8hIGF1dGhvciA6IFNhbXBhdGggU2l0aW5hbWFsdXdhIDogaHR0cHM6Ly9naXRodWIuY29tL3NhbXBhdGhzcmlzXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICAvKmpzaGludCAtVzEwMCovXG4gICAgdmFyIHNpID0gbW9tZW50LmRlZmluZUxvY2FsZSgnc2knLCB7XG4gICAgICAgIG1vbnRoczogJ+C2ouC2seC3gOC3j+C2u+C3kl/gtrTgt5ngtrbgtrvgt4Dgt4/gtrvgt5Jf4La44LeP4La74LeK4Lat4LeUX+C2heC2tOC3iuKAjeC2u+C3muC2veC3il/gtrjgt5Dgtrrgt5Jf4Lai4LeW4Lax4LeSX+C2ouC3luC2veC3kl/gtoXgtpzgt53gt4Pgt4rgtq3gt5Rf4LeD4LeQ4La04LeK4Lat4LeQ4La44LeK4La24La74LeKX+C2lOC2muC3iuC2reC3neC2tuC2u+C3il/gtrHgt5zgt4Dgt5Dgtrjgt4rgtrbgtrvgt4pf4Lav4LeZ4LeD4LeQ4La44LeK4La24La74LeKJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ+C2ouC2sV/gtrTgt5ngtrZf4La44LeP4La74LeKX+C2heC2tOC3il/gtrjgt5Dgtrrgt5Jf4Lai4LeW4Lax4LeSX+C2ouC3luC2veC3kl/gtoXgtpzgt51f4LeD4LeQ4La04LeKX+C2lOC2muC3il/gtrHgt5zgt4Dgt5Bf4Lav4LeZ4LeD4LeQJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5czpcbiAgICAgICAgICAgICfgtongtrvgt5Lgtq/gt49f4LeD4Laz4LeU4Lav4LePX+C2heC2n+C3hOC2u+C3lOC3gOC3j+C2r+C3j1/gtrbgtq/gt4/gtq/gt49f4La24LeK4oCN4La74LeE4LeD4LeK4La04Lat4LeS4Lax4LeK4Lav4LePX+C3g+C3kuC2muC3lOC2u+C3j+C2r+C3j1/gt4Pgt5ngtrHgt4Pgt5Tgtrvgt4/gtq/gt48nLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ+C2ieC2u+C3kl/gt4PgtrPgt5Rf4LaF4LafX+C2tuC2r+C3j1/gtrbgt4rigI3gtrvgt4Rf4LeD4LeS4Laa4LeUX+C3g+C3meC2sScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfgtolf4LeDX+C2hV/gtrZf4La24LeK4oCN4La7X+C3g+C3kl/gt4Pgt5knLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnYSBoOm1tJyxcbiAgICAgICAgICAgIExUUzogJ2EgaDptbTpzcycsXG4gICAgICAgICAgICBMOiAnWVlZWS9NTS9ERCcsXG4gICAgICAgICAgICBMTDogJ1lZWVkgTU1NTSBEJyxcbiAgICAgICAgICAgIExMTDogJ1lZWVkgTU1NTSBELCBhIGg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ1lZWVkgTU1NTSBEIFvgt4Dgt5DgtrHgt5JdIGRkZGQsIGEgaDptbTpzcycsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW+C2heC2r10gTFRb4LanXScsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW+C3hOC3meC2p10gTFRb4LanXScsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgTFRb4LanXScsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW+C2iuC2uuC3ml0gTFRb4LanXScsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1vgtrTgt4Pgt5Tgtpzgt5LgtrpdIGRkZGQgTFRb4LanXScsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVz4Laa4LeS4Lax4LeKJyxcbiAgICAgICAgICAgIHBhc3Q6ICclc+C2muC2pyDgtrTgt5ngtrsnLFxuICAgICAgICAgICAgczogJ+C2reC2reC3iuC2tOC2uyDgtprgt5Lgt4Tgt5LgtrTgtronLFxuICAgICAgICAgICAgc3M6ICfgtq3gtq3gt4rgtrTgtrsgJWQnLFxuICAgICAgICAgICAgbTogJ+C2uOC3kuC2seC3kuC2reC3iuC2reC3lOC3gCcsXG4gICAgICAgICAgICBtbTogJ+C2uOC3kuC2seC3kuC2reC3iuC2reC3lCAlZCcsXG4gICAgICAgICAgICBoOiAn4La04LeQ4La6JyxcbiAgICAgICAgICAgIGhoOiAn4La04LeQ4La6ICVkJyxcbiAgICAgICAgICAgIGQ6ICfgtq/gt5LgtrHgtronLFxuICAgICAgICAgICAgZGQ6ICfgtq/gt5LgtrEgJWQnLFxuICAgICAgICAgICAgTTogJ+C2uOC3j+C3g+C2uicsXG4gICAgICAgICAgICBNTTogJ+C2uOC3j+C3gyAlZCcsXG4gICAgICAgICAgICB5OiAn4LeA4LeD4La7JyxcbiAgICAgICAgICAgIHl5OiAn4LeA4LeD4La7ICVkJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9IOC3gOC3kOC2seC3ki8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnIOC3gOC3kOC2seC3kic7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/gtrTgt5ngtrsg4LeA4La74LeUfOC2tOC3g+C3iiDgt4Dgtrvgt5R84La04LeZLuC3gHzgtrQu4LeALi8sXG4gICAgICAgIGlzUE06IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0ID09PSAn4La0LuC3gC4nIHx8IGlucHV0ID09PSAn4La04LeD4LeKIOC3gOC2u+C3lCc7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91cnMsIG1pbnV0ZXMsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VycyA+IDExKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyAn4La0LuC3gC4nIDogJ+C2tOC3g+C3iiDgt4Dgtrvgt5QnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICfgtrTgt5ku4LeALicgOiAn4La04LeZ4La7IOC3gOC2u+C3lCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gc2k7XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/si.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/sk.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/sk.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Slovak [sk]\n//! author : Martin Minka : https://github.com/k2s\n//! based on work of petrbela : https://github.com/petrbela\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var months =\n            'január_február_marec_apríl_máj_jún_júl_august_september_október_november_december'.split(\n                '_'\n            ),\n        monthsShort = 'jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec'.split('_');\n    function plural(n) {\n        return n > 1 && n < 5;\n    }\n    function translate(number, withoutSuffix, key, isFuture) {\n        var result = number + ' ';\n        switch (key) {\n            case 's': // a few seconds / in a few seconds / a few seconds ago\n                return withoutSuffix || isFuture ? 'pár sekúnd' : 'pár sekundami';\n            case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'sekundy' : 'sekúnd');\n                } else {\n                    return result + 'sekundami';\n                }\n            case 'm': // a minute / in a minute / a minute ago\n                return withoutSuffix ? 'minúta' : isFuture ? 'minútu' : 'minútou';\n            case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'minúty' : 'minút');\n                } else {\n                    return result + 'minútami';\n                }\n            case 'h': // an hour / in an hour / an hour ago\n                return withoutSuffix ? 'hodina' : isFuture ? 'hodinu' : 'hodinou';\n            case 'hh': // 9 hours / in 9 hours / 9 hours ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'hodiny' : 'hodín');\n                } else {\n                    return result + 'hodinami';\n                }\n            case 'd': // a day / in a day / a day ago\n                return withoutSuffix || isFuture ? 'deň' : 'dňom';\n            case 'dd': // 9 days / in 9 days / 9 days ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'dni' : 'dní');\n                } else {\n                    return result + 'dňami';\n                }\n            case 'M': // a month / in a month / a month ago\n                return withoutSuffix || isFuture ? 'mesiac' : 'mesiacom';\n            case 'MM': // 9 months / in 9 months / 9 months ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'mesiace' : 'mesiacov');\n                } else {\n                    return result + 'mesiacmi';\n                }\n            case 'y': // a year / in a year / a year ago\n                return withoutSuffix || isFuture ? 'rok' : 'rokom';\n            case 'yy': // 9 years / in 9 years / 9 years ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'roky' : 'rokov');\n                } else {\n                    return result + 'rokmi';\n                }\n        }\n    }\n\n    var sk = moment.defineLocale('sk', {\n        months: months,\n        monthsShort: monthsShort,\n        weekdays: 'nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota'.split('_'),\n        weekdaysShort: 'ne_po_ut_st_št_pi_so'.split('_'),\n        weekdaysMin: 'ne_po_ut_st_št_pi_so'.split('_'),\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm',\n            LLLL: 'dddd D. MMMM YYYY H:mm',\n        },\n        calendar: {\n            sameDay: '[dnes o] LT',\n            nextDay: '[zajtra o] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[v nedeľu o] LT';\n                    case 1:\n                    case 2:\n                        return '[v] dddd [o] LT';\n                    case 3:\n                        return '[v stredu o] LT';\n                    case 4:\n                        return '[vo štvrtok o] LT';\n                    case 5:\n                        return '[v piatok o] LT';\n                    case 6:\n                        return '[v sobotu o] LT';\n                }\n            },\n            lastDay: '[včera o] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[minulú nedeľu o] LT';\n                    case 1:\n                    case 2:\n                        return '[minulý] dddd [o] LT';\n                    case 3:\n                        return '[minulú stredu o] LT';\n                    case 4:\n                    case 5:\n                        return '[minulý] dddd [o] LT';\n                    case 6:\n                        return '[minulú sobotu o] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'za %s',\n            past: 'pred %s',\n            s: translate,\n            ss: translate,\n            m: translate,\n            mm: translate,\n            h: translate,\n            hh: translate,\n            d: translate,\n            dd: translate,\n            M: translate,\n            MM: translate,\n            y: translate,\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return sk;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zay5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsa0RBQVc7QUFDckUsR0FBRyxDQUNzQjtBQUN6QixDQUFDLDRCQUE0Qjs7QUFFN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NrLmpzPzA2ZmEiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFNsb3ZhayBbc2tdXG4vLyEgYXV0aG9yIDogTWFydGluIE1pbmthIDogaHR0cHM6Ly9naXRodWIuY29tL2syc1xuLy8hIGJhc2VkIG9uIHdvcmsgb2YgcGV0cmJlbGEgOiBodHRwczovL2dpdGh1Yi5jb20vcGV0cmJlbGFcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBtb250aHMgPVxuICAgICAgICAgICAgJ2phbnXDoXJfZmVicnXDoXJfbWFyZWNfYXByw61sX23DoWpfasO6bl9qw7psX2F1Z3VzdF9zZXB0ZW1iZXJfb2t0w7NiZXJfbm92ZW1iZXJfZGVjZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQgPSAnamFuX2ZlYl9tYXJfYXByX23DoWpfasO6bl9qw7psX2F1Z19zZXBfb2t0X25vdl9kZWMnLnNwbGl0KCdfJyk7XG4gICAgZnVuY3Rpb24gcGx1cmFsKG4pIHtcbiAgICAgICAgcmV0dXJuIG4gPiAxICYmIG4gPCA1O1xuICAgIH1cbiAgICBmdW5jdGlvbiB0cmFuc2xhdGUobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXksIGlzRnV0dXJlKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBudW1iZXIgKyAnICc7XG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlICdzJzogLy8gYSBmZXcgc2Vjb25kcyAvIGluIGEgZmV3IHNlY29uZHMgLyBhIGZldyBzZWNvbmRzIGFnb1xuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ3DDoXIgc2Vrw7puZCcgOiAncMOhciBzZWt1bmRhbWknO1xuICAgICAgICAgICAgY2FzZSAnc3MnOiAvLyA5IHNlY29uZHMgLyBpbiA5IHNlY29uZHMgLyA5IHNlY29uZHMgYWdvXG4gICAgICAgICAgICAgICAgaWYgKHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIChwbHVyYWwobnVtYmVyKSA/ICdzZWt1bmR5JyA6ICdzZWvDum5kJyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArICdzZWt1bmRhbWknO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ20nOiAvLyBhIG1pbnV0ZSAvIGluIGEgbWludXRlIC8gYSBtaW51dGUgYWdvXG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyAnbWluw7p0YScgOiBpc0Z1dHVyZSA/ICdtaW7DunR1JyA6ICdtaW7DunRvdSc7XG4gICAgICAgICAgICBjYXNlICdtbSc6IC8vIDkgbWludXRlcyAvIGluIDkgbWludXRlcyAvIDkgbWludXRlcyBhZ29cbiAgICAgICAgICAgICAgICBpZiAod2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKHBsdXJhbChudW1iZXIpID8gJ21pbsO6dHknIDogJ21pbsO6dCcpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAnbWluw7p0YW1pJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdoJzogLy8gYW4gaG91ciAvIGluIGFuIGhvdXIgLyBhbiBob3VyIGFnb1xuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gJ2hvZGluYScgOiBpc0Z1dHVyZSA/ICdob2RpbnUnIDogJ2hvZGlub3UnO1xuICAgICAgICAgICAgY2FzZSAnaGgnOiAvLyA5IGhvdXJzIC8gaW4gOSBob3VycyAvIDkgaG91cnMgYWdvXG4gICAgICAgICAgICAgICAgaWYgKHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIChwbHVyYWwobnVtYmVyKSA/ICdob2RpbnknIDogJ2hvZMOtbicpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAnaG9kaW5hbWknO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ2QnOiAvLyBhIGRheSAvIGluIGEgZGF5IC8gYSBkYXkgYWdvXG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnZGXFiCcgOiAnZMWIb20nO1xuICAgICAgICAgICAgY2FzZSAnZGQnOiAvLyA5IGRheXMgLyBpbiA5IGRheXMgLyA5IGRheXMgYWdvXG4gICAgICAgICAgICAgICAgaWYgKHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIChwbHVyYWwobnVtYmVyKSA/ICdkbmknIDogJ2Ruw60nKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgJ2TFiGFtaSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnTSc6IC8vIGEgbW9udGggLyBpbiBhIG1vbnRoIC8gYSBtb250aCBhZ29cbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdtZXNpYWMnIDogJ21lc2lhY29tJztcbiAgICAgICAgICAgIGNhc2UgJ01NJzogLy8gOSBtb250aHMgLyBpbiA5IG1vbnRocyAvIDkgbW9udGhzIGFnb1xuICAgICAgICAgICAgICAgIGlmICh3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAocGx1cmFsKG51bWJlcikgPyAnbWVzaWFjZScgOiAnbWVzaWFjb3YnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgJ21lc2lhY21pJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICd5JzogLy8gYSB5ZWFyIC8gaW4gYSB5ZWFyIC8gYSB5ZWFyIGFnb1xuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ3JvaycgOiAncm9rb20nO1xuICAgICAgICAgICAgY2FzZSAneXknOiAvLyA5IHllYXJzIC8gaW4gOSB5ZWFycyAvIDkgeWVhcnMgYWdvXG4gICAgICAgICAgICAgICAgaWYgKHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIChwbHVyYWwobnVtYmVyKSA/ICdyb2t5JyA6ICdyb2tvdicpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAncm9rbWknO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBzayA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3NrJywge1xuICAgICAgICBtb250aHM6IG1vbnRocyxcbiAgICAgICAgbW9udGhzU2hvcnQ6IG1vbnRoc1Nob3J0LFxuICAgICAgICB3ZWVrZGF5czogJ25lZGXEvmFfcG9uZGVsb2tfdXRvcm9rX3N0cmVkYV/FoXR2cnRva19waWF0b2tfc29ib3RhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnbmVfcG9fdXRfc3RfxaF0X3BpX3NvJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ25lX3BvX3V0X3N0X8WhdF9waV9zbycuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSDptbScsXG4gICAgICAgICAgICBMVFM6ICdIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRC4gTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QuIE1NTU0gWVlZWSBIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkIEQuIE1NTU0gWVlZWSBIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbZG5lcyBvXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW3phanRyYSBvXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kYXkoKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t2IG5lZGXEvnUgb10gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3ZdIGRkZGQgW29dIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdiBzdHJlZHUgb10gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t2byDFoXR2cnRvayBvXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3YgcGlhdG9rIG9dIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdiBzb2JvdHUgb10gTFQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0RGF5OiAnW3bEjWVyYSBvXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kYXkoKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1ttaW51bMO6IG5lZGXEvnUgb10gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW21pbnVsw71dIGRkZGQgW29dIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbbWludWzDuiBzdHJlZHUgb10gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW21pbnVsw71dIGRkZGQgW29dIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbbWludWzDuiBzb2JvdHUgb10gTFQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ3phICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICdwcmVkICVzJyxcbiAgICAgICAgICAgIHM6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIHNzOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBtOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBtbTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgaDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgaGg6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGQ6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGRkOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBNOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBNTTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgeTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgeXk6IHRyYW5zbGF0ZSxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9XFwuLyxcbiAgICAgICAgb3JkaW5hbDogJyVkLicsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBzaztcblxufSkpKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/sk.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/sl.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/sl.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Slovenian [sl]\n//! author : Robert Sedovšek : https://github.com/sedovsek\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var result = number + ' ';\n        switch (key) {\n            case 's':\n                return withoutSuffix || isFuture\n                    ? 'nekaj sekund'\n                    : 'nekaj sekundami';\n            case 'ss':\n                if (number === 1) {\n                    result += withoutSuffix ? 'sekundo' : 'sekundi';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'sekundi' : 'sekundah';\n                } else if (number < 5) {\n                    result += withoutSuffix || isFuture ? 'sekunde' : 'sekundah';\n                } else {\n                    result += 'sekund';\n                }\n                return result;\n            case 'm':\n                return withoutSuffix ? 'ena minuta' : 'eno minuto';\n            case 'mm':\n                if (number === 1) {\n                    result += withoutSuffix ? 'minuta' : 'minuto';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'minuti' : 'minutama';\n                } else if (number < 5) {\n                    result += withoutSuffix || isFuture ? 'minute' : 'minutami';\n                } else {\n                    result += withoutSuffix || isFuture ? 'minut' : 'minutami';\n                }\n                return result;\n            case 'h':\n                return withoutSuffix ? 'ena ura' : 'eno uro';\n            case 'hh':\n                if (number === 1) {\n                    result += withoutSuffix ? 'ura' : 'uro';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'uri' : 'urama';\n                } else if (number < 5) {\n                    result += withoutSuffix || isFuture ? 'ure' : 'urami';\n                } else {\n                    result += withoutSuffix || isFuture ? 'ur' : 'urami';\n                }\n                return result;\n            case 'd':\n                return withoutSuffix || isFuture ? 'en dan' : 'enim dnem';\n            case 'dd':\n                if (number === 1) {\n                    result += withoutSuffix || isFuture ? 'dan' : 'dnem';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'dni' : 'dnevoma';\n                } else {\n                    result += withoutSuffix || isFuture ? 'dni' : 'dnevi';\n                }\n                return result;\n            case 'M':\n                return withoutSuffix || isFuture ? 'en mesec' : 'enim mesecem';\n            case 'MM':\n                if (number === 1) {\n                    result += withoutSuffix || isFuture ? 'mesec' : 'mesecem';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'meseca' : 'mesecema';\n                } else if (number < 5) {\n                    result += withoutSuffix || isFuture ? 'mesece' : 'meseci';\n                } else {\n                    result += withoutSuffix || isFuture ? 'mesecev' : 'meseci';\n                }\n                return result;\n            case 'y':\n                return withoutSuffix || isFuture ? 'eno leto' : 'enim letom';\n            case 'yy':\n                if (number === 1) {\n                    result += withoutSuffix || isFuture ? 'leto' : 'letom';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'leti' : 'letoma';\n                } else if (number < 5) {\n                    result += withoutSuffix || isFuture ? 'leta' : 'leti';\n                } else {\n                    result += withoutSuffix || isFuture ? 'let' : 'leti';\n                }\n                return result;\n        }\n    }\n\n    var sl = moment.defineLocale('sl', {\n        months: 'januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december'.split(\n            '_'\n        ),\n        monthsShort:\n            'jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota'.split('_'),\n        weekdaysShort: 'ned._pon._tor._sre._čet._pet._sob.'.split('_'),\n        weekdaysMin: 'ne_po_to_sr_če_pe_so'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD. MM. YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm',\n            LLLL: 'dddd, D. MMMM YYYY H:mm',\n        },\n        calendar: {\n            sameDay: '[danes ob] LT',\n            nextDay: '[jutri ob] LT',\n\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[v] [nedeljo] [ob] LT';\n                    case 3:\n                        return '[v] [sredo] [ob] LT';\n                    case 6:\n                        return '[v] [soboto] [ob] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[v] dddd [ob] LT';\n                }\n            },\n            lastDay: '[včeraj ob] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[prejšnjo] [nedeljo] [ob] LT';\n                    case 3:\n                        return '[prejšnjo] [sredo] [ob] LT';\n                    case 6:\n                        return '[prejšnjo] [soboto] [ob] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[prejšnji] dddd [ob] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'čez %s',\n            past: 'pred %s',\n            s: processRelativeTime,\n            ss: processRelativeTime,\n            m: processRelativeTime,\n            mm: processRelativeTime,\n            h: processRelativeTime,\n            hh: processRelativeTime,\n            d: processRelativeTime,\n            dd: processRelativeTime,\n            M: processRelativeTime,\n            MM: processRelativeTime,\n            y: processRelativeTime,\n            yy: processRelativeTime,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return sl;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zbC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxvQ0FBb0MsSUFBSTtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zbC5qcz9hMzRiIl0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBTbG92ZW5pYW4gW3NsXVxuLy8hIGF1dGhvciA6IFJvYmVydCBTZWRvdsWhZWsgOiBodHRwczovL2dpdGh1Yi5jb20vc2Vkb3ZzZWtcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIGZ1bmN0aW9uIHByb2Nlc3NSZWxhdGl2ZVRpbWUobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXksIGlzRnV0dXJlKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBudW1iZXIgKyAnICc7XG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlICdzJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZVxuICAgICAgICAgICAgICAgICAgICA/ICduZWthaiBzZWt1bmQnXG4gICAgICAgICAgICAgICAgICAgIDogJ25la2FqIHNla3VuZGFtaSc7XG4gICAgICAgICAgICBjYXNlICdzcyc6XG4gICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCA/ICdzZWt1bmRvJyA6ICdzZWt1bmRpJztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG51bWJlciA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdzZWt1bmRpJyA6ICdzZWt1bmRhaCc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPCA1KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ3Nla3VuZGUnIDogJ3Nla3VuZGFoJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ3Nla3VuZCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICBjYXNlICdtJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/ICdlbmEgbWludXRhJyA6ICdlbm8gbWludXRvJztcbiAgICAgICAgICAgIGNhc2UgJ21tJzpcbiAgICAgICAgICAgICAgICBpZiAobnVtYmVyID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3aXRob3V0U3VmZml4ID8gJ21pbnV0YScgOiAnbWludXRvJztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG51bWJlciA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdtaW51dGknIDogJ21pbnV0YW1hJztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG51bWJlciA8IDUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnbWludXRlJyA6ICdtaW51dGFtaSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnbWludXQnIDogJ21pbnV0YW1pJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIGNhc2UgJ2gnOlxuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gJ2VuYSB1cmEnIDogJ2VubyB1cm8nO1xuICAgICAgICAgICAgY2FzZSAnaGgnOlxuICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdpdGhvdXRTdWZmaXggPyAndXJhJyA6ICd1cm8nO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyID09PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ3VyaScgOiAndXJhbWEnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyIDwgNSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICd1cmUnIDogJ3VyYW1pJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICd1cicgOiAndXJhbWknO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnZW4gZGFuJyA6ICdlbmltIGRuZW0nO1xuICAgICAgICAgICAgY2FzZSAnZGQnOlxuICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnZGFuJyA6ICdkbmVtJztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG51bWJlciA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdkbmknIDogJ2RuZXZvbWEnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ2RuaScgOiAnZG5ldmknO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgY2FzZSAnTSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnZW4gbWVzZWMnIDogJ2VuaW0gbWVzZWNlbSc7XG4gICAgICAgICAgICBjYXNlICdNTSc6XG4gICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdtZXNlYycgOiAnbWVzZWNlbSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPT09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnbWVzZWNhJyA6ICdtZXNlY2VtYSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPCA1KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ21lc2VjZScgOiAnbWVzZWNpJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdtZXNlY2V2JyA6ICdtZXNlY2knO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgY2FzZSAneSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnZW5vIGxldG8nIDogJ2VuaW0gbGV0b20nO1xuICAgICAgICAgICAgY2FzZSAneXknOlxuICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnbGV0bycgOiAnbGV0b20nO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyID09PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ2xldGknIDogJ2xldG9tYSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPCA1KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ2xldGEnIDogJ2xldGknO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ2xldCcgOiAnbGV0aSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgc2wgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdzbCcsIHtcbiAgICAgICAgbW9udGhzOiAnamFudWFyX2ZlYnJ1YXJfbWFyZWNfYXByaWxfbWFqX2p1bmlqX2p1bGlqX2F2Z3VzdF9zZXB0ZW1iZXJfb2t0b2Jlcl9ub3ZlbWJlcl9kZWNlbWJlcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAnamFuLl9mZWIuX21hci5fYXByLl9tYWouX2p1bi5fanVsLl9hdmcuX3NlcC5fb2t0Ll9ub3YuX2RlYy4nLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6ICduZWRlbGphX3BvbmVkZWxqZWtfdG9yZWtfc3JlZGFfxI1ldHJ0ZWtfcGV0ZWtfc29ib3RhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnbmVkLl9wb24uX3Rvci5fc3JlLl/EjWV0Ll9wZXQuX3NvYi4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnbmVfcG9fdG9fc3JfxI1lX3BlX3NvJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0g6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQuIE1NLiBZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRC4gTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QuIE1NTU0gWVlZWSBIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBELiBNTU1NIFlZWVkgSDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW2RhbmVzIG9iXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW2p1dHJpIG9iXSBMVCcsXG5cbiAgICAgICAgICAgIG5leHRXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3ZdIFtuZWRlbGpvXSBbb2JdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdl0gW3NyZWRvXSBbb2JdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdl0gW3NvYm90b10gW29iXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3ZdIGRkZGQgW29iXSBMVCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbdsSNZXJhaiBvYl0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbcHJlasWhbmpvXSBbbmVkZWxqb10gW29iXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3ByZWrFoW5qb10gW3NyZWRvXSBbb2JdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbcHJlasWhbmpvXSBbc29ib3RvXSBbb2JdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbcHJlasWhbmppXSBkZGRkIFtvYl0gTFQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ8SNZXogJXMnLFxuICAgICAgICAgICAgcGFzdDogJ3ByZWQgJXMnLFxuICAgICAgICAgICAgczogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHNzOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgbTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIG1tOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgaDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGhoOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgZDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGRkOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgTTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIE1NOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgeTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHl5OiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsOiAnJWQuJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNywgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gN3RoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNsO1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/sl.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/sq.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/sq.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Albanian [sq]\n//! author : Flakërim Ismani : https://github.com/flakerimi\n//! author : Menelion Elensúle : https://github.com/Oire\n//! author : Oerd Cukalla : https://github.com/oerd\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var sq = moment.defineLocale('sq', {\n        months: 'Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj'.split('_'),\n        weekdays: 'E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë'.split(\n            '_'\n        ),\n        weekdaysShort: 'Die_Hën_Mar_Mër_Enj_Pre_Sht'.split('_'),\n        weekdaysMin: 'D_H_Ma_Më_E_P_Sh'.split('_'),\n        weekdaysParseExact: true,\n        meridiemParse: /PD|MD/,\n        isPM: function (input) {\n            return input.charAt(0) === 'M';\n        },\n        meridiem: function (hours, minutes, isLower) {\n            return hours < 12 ? 'PD' : 'MD';\n        },\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Sot në] LT',\n            nextDay: '[Nesër në] LT',\n            nextWeek: 'dddd [në] LT',\n            lastDay: '[Dje në] LT',\n            lastWeek: 'dddd [e kaluar në] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'në %s',\n            past: '%s më parë',\n            s: 'disa sekonda',\n            ss: '%d sekonda',\n            m: 'një minutë',\n            mm: '%d minuta',\n            h: 'një orë',\n            hh: '%d orë',\n            d: 'një ditë',\n            dd: '%d ditë',\n            M: 'një muaj',\n            MM: '%d muaj',\n            y: 'një vit',\n            yy: '%d vite',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return sq;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zcS5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxrREFBVztBQUNyRSxHQUFHLENBQ3NCO0FBQ3pCLENBQUMsNEJBQTRCOztBQUU3Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NxLmpzPzkxZTUiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEFsYmFuaWFuIFtzcV1cbi8vISBhdXRob3IgOiBGbGFrw6tyaW0gSXNtYW5pIDogaHR0cHM6Ly9naXRodWIuY29tL2ZsYWtlcmltaVxuLy8hIGF1dGhvciA6IE1lbmVsaW9uIEVsZW5zw7psZSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9PaXJlXG4vLyEgYXV0aG9yIDogT2VyZCBDdWthbGxhIDogaHR0cHM6Ly9naXRodWIuY29tL29lcmRcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBzcSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3NxJywge1xuICAgICAgICBtb250aHM6ICdKYW5hcl9TaGt1cnRfTWFyc19QcmlsbF9NYWpfUWVyc2hvcl9Lb3JyaWtfR3VzaHRfU2h0YXRvcl9UZXRvcl9Ow6tudG9yX0RoamV0b3InLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnSmFuX1Noa19NYXJfUHJpX01hal9RZXJfS29yX0d1c19TaHRfVGV0X07Dq25fRGhqJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ0UgRGllbF9FIEjDq27Dq19FIE1hcnTDq19FIE3Dq3JrdXLDq19FIEVuanRlX0UgUHJlbXRlX0UgU2h0dW7Dqycuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ0RpZV9Iw6tuX01hcl9Nw6tyX0Vual9QcmVfU2h0Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ0RfSF9NYV9Nw6tfRV9QX1NoJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC9QRHxNRC8sXG4gICAgICAgIGlzUE06IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0LmNoYXJBdCgwKSA9PT0gJ00nO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXJzLCBtaW51dGVzLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICByZXR1cm4gaG91cnMgPCAxMiA/ICdQRCcgOiAnTUQnO1xuICAgICAgICB9LFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW1NvdCBuw6tdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbTmVzw6tyIG7Dq10gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFtuw6tdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbRGplIG7Dq10gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFtlIGthbHVhciBuw6tdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnbsOrICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyBtw6sgcGFyw6snLFxuICAgICAgICAgICAgczogJ2Rpc2Egc2Vrb25kYScsXG4gICAgICAgICAgICBzczogJyVkIHNla29uZGEnLFxuICAgICAgICAgICAgbTogJ25qw6sgbWludXTDqycsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0YScsXG4gICAgICAgICAgICBoOiAnbmrDqyBvcsOrJyxcbiAgICAgICAgICAgIGhoOiAnJWQgb3LDqycsXG4gICAgICAgICAgICBkOiAnbmrDqyBkaXTDqycsXG4gICAgICAgICAgICBkZDogJyVkIGRpdMOrJyxcbiAgICAgICAgICAgIE06ICduasOrIG11YWonLFxuICAgICAgICAgICAgTU06ICclZCBtdWFqJyxcbiAgICAgICAgICAgIHk6ICduasOrIHZpdCcsXG4gICAgICAgICAgICB5eTogJyVkIHZpdGUnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsOiAnJWQuJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNxO1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/sq.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/sr-cyrl.js":
/*!***********************************************!*\
  !*** ./node_modules/moment/locale/sr-cyrl.js ***!
  \***********************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Serbian Cyrillic [sr-cyrl]\n//! author : Milan Janačković<milanjanackovic@gmail.com> : https://github.com/milan-j\n//! author : Stefan Crnjaković <stefan@hotmail.rs> : https://github.com/crnjakovic\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var translator = {\n        words: {\n            //Different grammatical cases\n            ss: ['секунда', 'секунде', 'секунди'],\n            m: ['један минут', 'једног минута'],\n            mm: ['минут', 'минута', 'минута'],\n            h: ['један сат', 'једног сата'],\n            hh: ['сат', 'сата', 'сати'],\n            d: ['један дан', 'једног дана'],\n            dd: ['дан', 'дана', 'дана'],\n            M: ['један месец', 'једног месеца'],\n            MM: ['месец', 'месеца', 'месеци'],\n            y: ['једну годину', 'једне године'],\n            yy: ['годину', 'године', 'година'],\n        },\n        correctGrammaticalCase: function (number, wordKey) {\n            if (\n                number % 10 >= 1 &&\n                number % 10 <= 4 &&\n                (number % 100 < 10 || number % 100 >= 20)\n            ) {\n                return number % 10 === 1 ? wordKey[0] : wordKey[1];\n            }\n            return wordKey[2];\n        },\n        translate: function (number, withoutSuffix, key, isFuture) {\n            var wordKey = translator.words[key],\n                word;\n\n            if (key.length === 1) {\n                // Nominativ\n                if (key === 'y' && withoutSuffix) return 'једна година';\n                return isFuture || withoutSuffix ? wordKey[0] : wordKey[1];\n            }\n\n            word = translator.correctGrammaticalCase(number, wordKey);\n            // Nominativ\n            if (key === 'yy' && withoutSuffix && word === 'годину') {\n                return number + ' година';\n            }\n\n            return number + ' ' + word;\n        },\n    };\n\n    var srCyrl = moment.defineLocale('sr-cyrl', {\n        months: 'јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар'.split(\n            '_'\n        ),\n        monthsShort:\n            'јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.'.split('_'),\n        monthsParseExact: true,\n        weekdays: 'недеља_понедељак_уторак_среда_четвртак_петак_субота'.split('_'),\n        weekdaysShort: 'нед._пон._уто._сре._чет._пет._суб.'.split('_'),\n        weekdaysMin: 'не_по_ут_ср_че_пе_су'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'D. M. YYYY.',\n            LL: 'D. MMMM YYYY.',\n            LLL: 'D. MMMM YYYY. H:mm',\n            LLLL: 'dddd, D. MMMM YYYY. H:mm',\n        },\n        calendar: {\n            sameDay: '[данас у] LT',\n            nextDay: '[сутра у] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[у] [недељу] [у] LT';\n                    case 3:\n                        return '[у] [среду] [у] LT';\n                    case 6:\n                        return '[у] [суботу] [у] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[у] dddd [у] LT';\n                }\n            },\n            lastDay: '[јуче у] LT',\n            lastWeek: function () {\n                var lastWeekDays = [\n                    '[прошле] [недеље] [у] LT',\n                    '[прошлог] [понедељка] [у] LT',\n                    '[прошлог] [уторка] [у] LT',\n                    '[прошле] [среде] [у] LT',\n                    '[прошлог] [четвртка] [у] LT',\n                    '[прошлог] [петка] [у] LT',\n                    '[прошле] [суботе] [у] LT',\n                ];\n                return lastWeekDays[this.day()];\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'за %s',\n            past: 'пре %s',\n            s: 'неколико секунди',\n            ss: translator.translate,\n            m: translator.translate,\n            mm: translator.translate,\n            h: translator.translate,\n            hh: translator.translate,\n            d: translator.translate,\n            dd: translator.translate,\n            M: translator.translate,\n            MM: translator.translate,\n            y: translator.translate,\n            yy: translator.translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 1st is the first week of the year.\n        },\n    });\n\n    return srCyrl;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zci1jeXJsLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxrREFBVztBQUNyRSxHQUFHLENBQ3NCO0FBQ3pCLENBQUMsNEJBQTRCOztBQUU3Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc3ItY3lybC5qcz9iZDQ4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBTZXJiaWFuIEN5cmlsbGljIFtzci1jeXJsXVxuLy8hIGF1dGhvciA6IE1pbGFuIEphbmHEjWtvdmnEhzxtaWxhbmphbmFja292aWNAZ21haWwuY29tPiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9taWxhbi1qXG4vLyEgYXV0aG9yIDogU3RlZmFuIENybmpha292acSHIDxzdGVmYW5AaG90bWFpbC5ycz4gOiBodHRwczovL2dpdGh1Yi5jb20vY3JuamFrb3ZpY1xuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHRyYW5zbGF0b3IgPSB7XG4gICAgICAgIHdvcmRzOiB7XG4gICAgICAgICAgICAvL0RpZmZlcmVudCBncmFtbWF0aWNhbCBjYXNlc1xuICAgICAgICAgICAgc3M6IFsn0YHQtdC60YPQvdC00LAnLCAn0YHQtdC60YPQvdC00LUnLCAn0YHQtdC60YPQvdC00LgnXSxcbiAgICAgICAgICAgIG06IFsn0ZjQtdC00LDQvSDQvNC40L3Rg9GCJywgJ9GY0LXQtNC90L7QsyDQvNC40L3Rg9GC0LAnXSxcbiAgICAgICAgICAgIG1tOiBbJ9C80LjQvdGD0YInLCAn0LzQuNC90YPRgtCwJywgJ9C80LjQvdGD0YLQsCddLFxuICAgICAgICAgICAgaDogWyfRmNC10LTQsNC9INGB0LDRgicsICfRmNC10LTQvdC+0LMg0YHQsNGC0LAnXSxcbiAgICAgICAgICAgIGhoOiBbJ9GB0LDRgicsICfRgdCw0YLQsCcsICfRgdCw0YLQuCddLFxuICAgICAgICAgICAgZDogWyfRmNC10LTQsNC9INC00LDQvScsICfRmNC10LTQvdC+0LMg0LTQsNC90LAnXSxcbiAgICAgICAgICAgIGRkOiBbJ9C00LDQvScsICfQtNCw0L3QsCcsICfQtNCw0L3QsCddLFxuICAgICAgICAgICAgTTogWyfRmNC10LTQsNC9INC80LXRgdC10YYnLCAn0ZjQtdC00L3QvtCzINC80LXRgdC10YbQsCddLFxuICAgICAgICAgICAgTU06IFsn0LzQtdGB0LXRhicsICfQvNC10YHQtdGG0LAnLCAn0LzQtdGB0LXRhtC4J10sXG4gICAgICAgICAgICB5OiBbJ9GY0LXQtNC90YMg0LPQvtC00LjQvdGDJywgJ9GY0LXQtNC90LUg0LPQvtC00LjQvdC1J10sXG4gICAgICAgICAgICB5eTogWyfQs9C+0LTQuNC90YMnLCAn0LPQvtC00LjQvdC1JywgJ9Cz0L7QtNC40L3QsCddLFxuICAgICAgICB9LFxuICAgICAgICBjb3JyZWN0R3JhbW1hdGljYWxDYXNlOiBmdW5jdGlvbiAobnVtYmVyLCB3b3JkS2V5KSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgbnVtYmVyICUgMTAgPj0gMSAmJlxuICAgICAgICAgICAgICAgIG51bWJlciAlIDEwIDw9IDQgJiZcbiAgICAgICAgICAgICAgICAobnVtYmVyICUgMTAwIDwgMTAgfHwgbnVtYmVyICUgMTAwID49IDIwKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciAlIDEwID09PSAxID8gd29yZEtleVswXSA6IHdvcmRLZXlbMV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gd29yZEtleVsyXTtcbiAgICAgICAgfSxcbiAgICAgICAgdHJhbnNsYXRlOiBmdW5jdGlvbiAobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXksIGlzRnV0dXJlKSB7XG4gICAgICAgICAgICB2YXIgd29yZEtleSA9IHRyYW5zbGF0b3Iud29yZHNba2V5XSxcbiAgICAgICAgICAgICAgICB3b3JkO1xuXG4gICAgICAgICAgICBpZiAoa2V5Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIC8vIE5vbWluYXRpdlxuICAgICAgICAgICAgICAgIGlmIChrZXkgPT09ICd5JyAmJiB3aXRob3V0U3VmZml4KSByZXR1cm4gJ9GY0LXQtNC90LAg0LPQvtC00LjQvdCwJztcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNGdXR1cmUgfHwgd2l0aG91dFN1ZmZpeCA/IHdvcmRLZXlbMF0gOiB3b3JkS2V5WzFdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB3b3JkID0gdHJhbnNsYXRvci5jb3JyZWN0R3JhbW1hdGljYWxDYXNlKG51bWJlciwgd29yZEtleSk7XG4gICAgICAgICAgICAvLyBOb21pbmF0aXZcbiAgICAgICAgICAgIGlmIChrZXkgPT09ICd5eScgJiYgd2l0aG91dFN1ZmZpeCAmJiB3b3JkID09PSAn0LPQvtC00LjQvdGDJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnINCz0L7QtNC40L3QsCc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnICcgKyB3b3JkO1xuICAgICAgICB9LFxuICAgIH07XG5cbiAgICB2YXIgc3JDeXJsID0gbW9tZW50LmRlZmluZUxvY2FsZSgnc3ItY3lybCcsIHtcbiAgICAgICAgbW9udGhzOiAn0ZjQsNC90YPQsNGAX9GE0LXQsdGA0YPQsNGAX9C80LDRgNGCX9Cw0L/RgNC40Ltf0LzQsNGYX9GY0YPQvV/RmNGD0Ltf0LDQstCz0YPRgdGCX9GB0LXQv9GC0LXQvNCx0LDRgF/QvtC60YLQvtCx0LDRgF/QvdC+0LLQtdC80LHQsNGAX9C00LXRhtC10LzQsdCw0YAnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ9GY0LDQvS5f0YTQtdCxLl/QvNCw0YAuX9Cw0L/RgC5f0LzQsNGYX9GY0YPQvV/RmNGD0Ltf0LDQstCzLl/RgdC10L8uX9C+0LrRgi5f0L3QvtCyLl/QtNC10YYuJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czogJ9C90LXQtNC10ZnQsF/Qv9C+0L3QtdC00LXRmdCw0Lpf0YPRgtC+0YDQsNC6X9GB0YDQtdC00LBf0YfQtdGC0LLRgNGC0LDQul/Qv9C10YLQsNC6X9GB0YPQsdC+0YLQsCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ9C90LXQtC5f0L/QvtC9Ll/Rg9GC0L4uX9GB0YDQtS5f0YfQtdGCLl/Qv9C10YIuX9GB0YPQsS4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn0L3QtV/Qv9C+X9GD0YJf0YHRgF/Rh9C1X9C/0LVf0YHRgycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0g6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0QuIE0uIFlZWVkuJyxcbiAgICAgICAgICAgIExMOiAnRC4gTU1NTSBZWVlZLicsXG4gICAgICAgICAgICBMTEw6ICdELiBNTU1NIFlZWVkuIEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQuIE1NTU0gWVlZWS4gSDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW9C00LDQvdCw0YEg0YNdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb0YHRg9GC0YDQsCDRg10gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdb0YNdIFvQvdC10LTQtdGZ0YNdIFvRg10gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1vRg10gW9GB0YDQtdC00YNdIFvRg10gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1vRg10gW9GB0YPQsdC+0YLRg10gW9GDXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW9GDXSBkZGRkIFvRg10gTFQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0RGF5OiAnW9GY0YPRh9C1INGDXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciBsYXN0V2Vla0RheXMgPSBbXG4gICAgICAgICAgICAgICAgICAgICdb0L/RgNC+0YjQu9C1XSBb0L3QtdC00LXRmdC1XSBb0YNdIExUJyxcbiAgICAgICAgICAgICAgICAgICAgJ1vQv9GA0L7RiNC70L7Qs10gW9C/0L7QvdC10LTQtdGZ0LrQsF0gW9GDXSBMVCcsXG4gICAgICAgICAgICAgICAgICAgICdb0L/RgNC+0YjQu9C+0LNdIFvRg9GC0L7RgNC60LBdIFvRg10gTFQnLFxuICAgICAgICAgICAgICAgICAgICAnW9C/0YDQvtGI0LvQtV0gW9GB0YDQtdC00LVdIFvRg10gTFQnLFxuICAgICAgICAgICAgICAgICAgICAnW9C/0YDQvtGI0LvQvtCzXSBb0YfQtdGC0LLRgNGC0LrQsF0gW9GDXSBMVCcsXG4gICAgICAgICAgICAgICAgICAgICdb0L/RgNC+0YjQu9C+0LNdIFvQv9C10YLQutCwXSBb0YNdIExUJyxcbiAgICAgICAgICAgICAgICAgICAgJ1vQv9GA0L7RiNC70LVdIFvRgdGD0LHQvtGC0LVdIFvRg10gTFQnLFxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxhc3RXZWVrRGF5c1t0aGlzLmRheSgpXTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ9C30LAgJXMnLFxuICAgICAgICAgICAgcGFzdDogJ9C/0YDQtSAlcycsXG4gICAgICAgICAgICBzOiAn0L3QtdC60L7Qu9C40LrQviDRgdC10LrRg9C90LTQuCcsXG4gICAgICAgICAgICBzczogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgICAgICBtOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG1tOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGg6IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICAgICAgaGg6IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICAgICAgZDogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgICAgICBkZDogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgICAgICBNOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgIE1NOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgIHk6IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICAgICAgeXk6IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsOiAnJWQuJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNywgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gMXN0IGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNyQ3lybDtcblxufSkpKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/sr-cyrl.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/sr.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/sr.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Serbian [sr]\n//! author : Milan Janačković<milanjanackovic@gmail.com> : https://github.com/milan-j\n//! author : Stefan Crnjaković <stefan@hotmail.rs> : https://github.com/crnjakovic\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var translator = {\n        words: {\n            //Different grammatical cases\n            ss: ['sekunda', 'sekunde', 'sekundi'],\n            m: ['jedan minut', 'jednog minuta'],\n            mm: ['minut', 'minuta', 'minuta'],\n            h: ['jedan sat', 'jednog sata'],\n            hh: ['sat', 'sata', 'sati'],\n            d: ['jedan dan', 'jednog dana'],\n            dd: ['dan', 'dana', 'dana'],\n            M: ['jedan mesec', 'jednog meseca'],\n            MM: ['mesec', 'meseca', 'meseci'],\n            y: ['jednu godinu', 'jedne godine'],\n            yy: ['godinu', 'godine', 'godina'],\n        },\n        correctGrammaticalCase: function (number, wordKey) {\n            if (\n                number % 10 >= 1 &&\n                number % 10 <= 4 &&\n                (number % 100 < 10 || number % 100 >= 20)\n            ) {\n                return number % 10 === 1 ? wordKey[0] : wordKey[1];\n            }\n            return wordKey[2];\n        },\n        translate: function (number, withoutSuffix, key, isFuture) {\n            var wordKey = translator.words[key],\n                word;\n\n            if (key.length === 1) {\n                // Nominativ\n                if (key === 'y' && withoutSuffix) return 'jedna godina';\n                return isFuture || withoutSuffix ? wordKey[0] : wordKey[1];\n            }\n\n            word = translator.correctGrammaticalCase(number, wordKey);\n            // Nominativ\n            if (key === 'yy' && withoutSuffix && word === 'godinu') {\n                return number + ' godina';\n            }\n\n            return number + ' ' + word;\n        },\n    };\n\n    var sr = moment.defineLocale('sr', {\n        months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split(\n            '_'\n        ),\n        monthsShort:\n            'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),\n        monthsParseExact: true,\n        weekdays: 'nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota'.split(\n            '_'\n        ),\n        weekdaysShort: 'ned._pon._uto._sre._čet._pet._sub.'.split('_'),\n        weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'D. M. YYYY.',\n            LL: 'D. MMMM YYYY.',\n            LLL: 'D. MMMM YYYY. H:mm',\n            LLLL: 'dddd, D. MMMM YYYY. H:mm',\n        },\n        calendar: {\n            sameDay: '[danas u] LT',\n            nextDay: '[sutra u] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[u] [nedelju] [u] LT';\n                    case 3:\n                        return '[u] [sredu] [u] LT';\n                    case 6:\n                        return '[u] [subotu] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[u] dddd [u] LT';\n                }\n            },\n            lastDay: '[juče u] LT',\n            lastWeek: function () {\n                var lastWeekDays = [\n                    '[prošle] [nedelje] [u] LT',\n                    '[prošlog] [ponedeljka] [u] LT',\n                    '[prošlog] [utorka] [u] LT',\n                    '[prošle] [srede] [u] LT',\n                    '[prošlog] [četvrtka] [u] LT',\n                    '[prošlog] [petka] [u] LT',\n                    '[prošle] [subote] [u] LT',\n                ];\n                return lastWeekDays[this.day()];\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'za %s',\n            past: 'pre %s',\n            s: 'nekoliko sekundi',\n            ss: translator.translate,\n            m: translator.translate,\n            mm: translator.translate,\n            h: translator.translate,\n            hh: translator.translate,\n            d: translator.translate,\n            dd: translator.translate,\n            M: translator.translate,\n            MM: translator.translate,\n            y: translator.translate,\n            yy: translator.translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return sr;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zci5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsa0RBQVc7QUFDckUsR0FBRyxDQUNzQjtBQUN6QixDQUFDLDRCQUE0Qjs7QUFFN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxvQ0FBb0MsSUFBSTtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zci5qcz9lZDI5Il0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBTZXJiaWFuIFtzcl1cbi8vISBhdXRob3IgOiBNaWxhbiBKYW5hxI1rb3ZpxIc8bWlsYW5qYW5hY2tvdmljQGdtYWlsLmNvbT4gOiBodHRwczovL2dpdGh1Yi5jb20vbWlsYW4talxuLy8hIGF1dGhvciA6IFN0ZWZhbiBDcm5qYWtvdmnEhyA8c3RlZmFuQGhvdG1haWwucnM+IDogaHR0cHM6Ly9naXRodWIuY29tL2Nybmpha292aWNcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciB0cmFuc2xhdG9yID0ge1xuICAgICAgICB3b3Jkczoge1xuICAgICAgICAgICAgLy9EaWZmZXJlbnQgZ3JhbW1hdGljYWwgY2FzZXNcbiAgICAgICAgICAgIHNzOiBbJ3Nla3VuZGEnLCAnc2VrdW5kZScsICdzZWt1bmRpJ10sXG4gICAgICAgICAgICBtOiBbJ2plZGFuIG1pbnV0JywgJ2plZG5vZyBtaW51dGEnXSxcbiAgICAgICAgICAgIG1tOiBbJ21pbnV0JywgJ21pbnV0YScsICdtaW51dGEnXSxcbiAgICAgICAgICAgIGg6IFsnamVkYW4gc2F0JywgJ2plZG5vZyBzYXRhJ10sXG4gICAgICAgICAgICBoaDogWydzYXQnLCAnc2F0YScsICdzYXRpJ10sXG4gICAgICAgICAgICBkOiBbJ2plZGFuIGRhbicsICdqZWRub2cgZGFuYSddLFxuICAgICAgICAgICAgZGQ6IFsnZGFuJywgJ2RhbmEnLCAnZGFuYSddLFxuICAgICAgICAgICAgTTogWydqZWRhbiBtZXNlYycsICdqZWRub2cgbWVzZWNhJ10sXG4gICAgICAgICAgICBNTTogWydtZXNlYycsICdtZXNlY2EnLCAnbWVzZWNpJ10sXG4gICAgICAgICAgICB5OiBbJ2plZG51IGdvZGludScsICdqZWRuZSBnb2RpbmUnXSxcbiAgICAgICAgICAgIHl5OiBbJ2dvZGludScsICdnb2RpbmUnLCAnZ29kaW5hJ10sXG4gICAgICAgIH0sXG4gICAgICAgIGNvcnJlY3RHcmFtbWF0aWNhbENhc2U6IGZ1bmN0aW9uIChudW1iZXIsIHdvcmRLZXkpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBudW1iZXIgJSAxMCA+PSAxICYmXG4gICAgICAgICAgICAgICAgbnVtYmVyICUgMTAgPD0gNCAmJlxuICAgICAgICAgICAgICAgIChudW1iZXIgJSAxMDAgPCAxMCB8fCBudW1iZXIgJSAxMDAgPj0gMjApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICUgMTAgPT09IDEgPyB3b3JkS2V5WzBdIDogd29yZEtleVsxXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB3b3JkS2V5WzJdO1xuICAgICAgICB9LFxuICAgICAgICB0cmFuc2xhdGU6IGZ1bmN0aW9uIChudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSwgaXNGdXR1cmUpIHtcbiAgICAgICAgICAgIHZhciB3b3JkS2V5ID0gdHJhbnNsYXRvci53b3Jkc1trZXldLFxuICAgICAgICAgICAgICAgIHdvcmQ7XG5cbiAgICAgICAgICAgIGlmIChrZXkubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgLy8gTm9taW5hdGl2XG4gICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gJ3knICYmIHdpdGhvdXRTdWZmaXgpIHJldHVybiAnamVkbmEgZ29kaW5hJztcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNGdXR1cmUgfHwgd2l0aG91dFN1ZmZpeCA/IHdvcmRLZXlbMF0gOiB3b3JkS2V5WzFdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB3b3JkID0gdHJhbnNsYXRvci5jb3JyZWN0R3JhbW1hdGljYWxDYXNlKG51bWJlciwgd29yZEtleSk7XG4gICAgICAgICAgICAvLyBOb21pbmF0aXZcbiAgICAgICAgICAgIGlmIChrZXkgPT09ICd5eScgJiYgd2l0aG91dFN1ZmZpeCAmJiB3b3JkID09PSAnZ29kaW51Jykge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnIGdvZGluYSc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnICcgKyB3b3JkO1xuICAgICAgICB9LFxuICAgIH07XG5cbiAgICB2YXIgc3IgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdzcicsIHtcbiAgICAgICAgbW9udGhzOiAnamFudWFyX2ZlYnJ1YXJfbWFydF9hcHJpbF9tYWpfanVuX2p1bF9hdmd1c3Rfc2VwdGVtYmFyX29rdG9iYXJfbm92ZW1iYXJfZGVjZW1iYXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ2phbi5fZmViLl9tYXIuX2Fwci5fbWFqX2p1bl9qdWxfYXZnLl9zZXAuX29rdC5fbm92Ll9kZWMuJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czogJ25lZGVsamFfcG9uZWRlbGpha191dG9yYWtfc3JlZGFfxI1ldHZydGFrX3BldGFrX3N1Ym90YScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ25lZC5fcG9uLl91dG8uX3NyZS5fxI1ldC5fcGV0Ll9zdWIuJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ25lX3BvX3V0X3NyX8SNZV9wZV9zdScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0g6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0QuIE0uIFlZWVkuJyxcbiAgICAgICAgICAgIExMOiAnRC4gTU1NTSBZWVlZLicsXG4gICAgICAgICAgICBMTEw6ICdELiBNTU1NIFlZWVkuIEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQuIE1NTU0gWVlZWS4gSDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW2RhbmFzIHVdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbc3V0cmEgdV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdV0gW25lZGVsanVdIFt1XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3VdIFtzcmVkdV0gW3VdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdV0gW3N1Ym90dV0gW3VdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdV0gZGRkZCBbdV0gTFQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0RGF5OiAnW2p1xI1lIHVdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGxhc3RXZWVrRGF5cyA9IFtcbiAgICAgICAgICAgICAgICAgICAgJ1twcm/FoWxlXSBbbmVkZWxqZV0gW3VdIExUJyxcbiAgICAgICAgICAgICAgICAgICAgJ1twcm/FoWxvZ10gW3BvbmVkZWxqa2FdIFt1XSBMVCcsXG4gICAgICAgICAgICAgICAgICAgICdbcHJvxaFsb2ddIFt1dG9ya2FdIFt1XSBMVCcsXG4gICAgICAgICAgICAgICAgICAgICdbcHJvxaFsZV0gW3NyZWRlXSBbdV0gTFQnLFxuICAgICAgICAgICAgICAgICAgICAnW3Byb8WhbG9nXSBbxI1ldHZydGthXSBbdV0gTFQnLFxuICAgICAgICAgICAgICAgICAgICAnW3Byb8WhbG9nXSBbcGV0a2FdIFt1XSBMVCcsXG4gICAgICAgICAgICAgICAgICAgICdbcHJvxaFsZV0gW3N1Ym90ZV0gW3VdIExUJyxcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgIHJldHVybiBsYXN0V2Vla0RheXNbdGhpcy5kYXkoKV07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICd6YSAlcycsXG4gICAgICAgICAgICBwYXN0OiAncHJlICVzJyxcbiAgICAgICAgICAgIHM6ICduZWtvbGlrbyBzZWt1bmRpJyxcbiAgICAgICAgICAgIHNzOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG06IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICAgICAgbW06IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICAgICAgaDogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgICAgICBoaDogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgICAgICBkOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGRkOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgIE06IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICAgICAgTU06IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICAgICAgeTogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgICAgICB5eTogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWw6ICclZC4nLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA3LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA3dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gc3I7XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/sr.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/ss.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/ss.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : siSwati [ss]\n//! author : Nicolai Davies<mail@nicolai.io> : https://github.com/nicolaidavies\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var ss = moment.defineLocale('ss', {\n        months: \"Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni\".split(\n            '_'\n        ),\n        monthsShort: 'Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo'.split('_'),\n        weekdays:\n            'Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo'.split(\n                '_'\n            ),\n        weekdaysShort: 'Lis_Umb_Lsb_Les_Lsi_Lsh_Umg'.split('_'),\n        weekdaysMin: 'Li_Us_Lb_Lt_Ls_Lh_Ug'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'h:mm A',\n            LTS: 'h:mm:ss A',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY h:mm A',\n            LLLL: 'dddd, D MMMM YYYY h:mm A',\n        },\n        calendar: {\n            sameDay: '[Namuhla nga] LT',\n            nextDay: '[Kusasa nga] LT',\n            nextWeek: 'dddd [nga] LT',\n            lastDay: '[Itolo nga] LT',\n            lastWeek: 'dddd [leliphelile] [nga] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'nga %s',\n            past: 'wenteka nga %s',\n            s: 'emizuzwana lomcane',\n            ss: '%d mzuzwana',\n            m: 'umzuzu',\n            mm: '%d emizuzu',\n            h: 'lihora',\n            hh: '%d emahora',\n            d: 'lilanga',\n            dd: '%d emalanga',\n            M: 'inyanga',\n            MM: '%d tinyanga',\n            y: 'umnyaka',\n            yy: '%d iminyaka',\n        },\n        meridiemParse: /ekuseni|emini|entsambama|ebusuku/,\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 11) {\n                return 'ekuseni';\n            } else if (hours < 15) {\n                return 'emini';\n            } else if (hours < 19) {\n                return 'entsambama';\n            } else {\n                return 'ebusuku';\n            }\n        },\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'ekuseni') {\n                return hour;\n            } else if (meridiem === 'emini') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'entsambama' || meridiem === 'ebusuku') {\n                if (hour === 0) {\n                    return 0;\n                }\n                return hour + 12;\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}/,\n        ordinal: '%d',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return ss;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zcy5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NzLmpzPzYyNjYiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IHNpU3dhdGkgW3NzXVxuLy8hIGF1dGhvciA6IE5pY29sYWkgRGF2aWVzPG1haWxAbmljb2xhaS5pbz4gOiBodHRwczovL2dpdGh1Yi5jb20vbmljb2xhaWRhdmllc1xuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHNzID0gbW9tZW50LmRlZmluZUxvY2FsZSgnc3MnLCB7XG4gICAgICAgIG1vbnRoczogXCJCaGltYmlkdndhbmVfSW5kbG92YW5hX0luZGxvdidsZW5raHVsdV9NYWJhc2FfSW5raHdla2h3ZXRpX0luaGxhYmFfS2hvbHdhbmVfSW5nY2lfSW55b25pX0ltcGhhbGFfTHdldGlfSW5nb25nb25pXCIuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdCaGlfSW5hX0ludV9NYWJfSW5rX0luaF9LaG9fSWdjX0lueV9JbXBfTHdlX0lnbycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6XG4gICAgICAgICAgICAnTGlzb250Zm9fVW1zb21idWx1a29fTGVzaWJpbGlfTGVzaXRzYXRmdV9MZXNpbmVfTGVzaWhsYW51X1VtZ2NpYmVsbycuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnTGlzX1VtYl9Mc2JfTGVzX0xzaV9Mc2hfVW1nJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ0xpX1VzX0xiX0x0X0xzX0xoX1VnJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ2g6bW0gQScsXG4gICAgICAgICAgICBMVFM6ICdoOm1tOnNzIEEnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBoOm1tIEEnLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIGg6bW0gQScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW05hbXVobGEgbmdhXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW0t1c2FzYSBuZ2FdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbbmdhXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW0l0b2xvIG5nYV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFtsZWxpcGhlbGlsZV0gW25nYV0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICduZ2EgJXMnLFxuICAgICAgICAgICAgcGFzdDogJ3dlbnRla2EgbmdhICVzJyxcbiAgICAgICAgICAgIHM6ICdlbWl6dXp3YW5hIGxvbWNhbmUnLFxuICAgICAgICAgICAgc3M6ICclZCBtenV6d2FuYScsXG4gICAgICAgICAgICBtOiAndW16dXp1JyxcbiAgICAgICAgICAgIG1tOiAnJWQgZW1penV6dScsXG4gICAgICAgICAgICBoOiAnbGlob3JhJyxcbiAgICAgICAgICAgIGhoOiAnJWQgZW1haG9yYScsXG4gICAgICAgICAgICBkOiAnbGlsYW5nYScsXG4gICAgICAgICAgICBkZDogJyVkIGVtYWxhbmdhJyxcbiAgICAgICAgICAgIE06ICdpbnlhbmdhJyxcbiAgICAgICAgICAgIE1NOiAnJWQgdGlueWFuZ2EnLFxuICAgICAgICAgICAgeTogJ3Vtbnlha2EnLFxuICAgICAgICAgICAgeXk6ICclZCBpbWlueWFrYScsXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC9la3VzZW5pfGVtaW5pfGVudHNhbWJhbWF8ZWJ1c3VrdS8sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91cnMsIG1pbnV0ZXMsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VycyA8IDExKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdla3VzZW5pJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91cnMgPCAxNSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnZW1pbmknO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VycyA8IDE5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdlbnRzYW1iYW1hJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdlYnVzdWt1JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1Ib3VyOiBmdW5jdGlvbiAoaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1lcmlkaWVtID09PSAnZWt1c2VuaScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICdlbWluaScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA+PSAxMSA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAnZW50c2FtYmFtYScgfHwgbWVyaWRpZW0gPT09ICdlYnVzdWt1Jykge1xuICAgICAgICAgICAgICAgIGlmIChob3VyID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0vLFxuICAgICAgICBvcmRpbmFsOiAnJWQnLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gc3M7XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/ss.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/sv.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/sv.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Swedish [sv]\n//! author : Jens Alm : https://github.com/ulmus\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var sv = moment.defineLocale('sv', {\n        months: 'januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december'.split(\n            '_'\n        ),\n        monthsShort: 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n        weekdays: 'söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag'.split('_'),\n        weekdaysShort: 'sön_mån_tis_ons_tor_fre_lör'.split('_'),\n        weekdaysMin: 'sö_må_ti_on_to_fr_lö'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY-MM-DD',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY [kl.] HH:mm',\n            LLLL: 'dddd D MMMM YYYY [kl.] HH:mm',\n            lll: 'D MMM YYYY HH:mm',\n            llll: 'ddd D MMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Idag] LT',\n            nextDay: '[Imorgon] LT',\n            lastDay: '[Igår] LT',\n            nextWeek: '[På] dddd LT',\n            lastWeek: '[I] dddd[s] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'om %s',\n            past: 'för %s sedan',\n            s: 'några sekunder',\n            ss: '%d sekunder',\n            m: 'en minut',\n            mm: '%d minuter',\n            h: 'en timme',\n            hh: '%d timmar',\n            d: 'en dag',\n            dd: '%d dagar',\n            M: 'en månad',\n            MM: '%d månader',\n            y: 'ett år',\n            yy: '%d år',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(\\:e|\\:a)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? ':e'\n                        : b === 1\n                        ? ':a'\n                        : b === 2\n                        ? ':a'\n                        : b === 3\n                        ? ':e'\n                        : ':e';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return sv;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zdi5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zdi5qcz84MDJmIl0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBTd2VkaXNoIFtzdl1cbi8vISBhdXRob3IgOiBKZW5zIEFsbSA6IGh0dHBzOi8vZ2l0aHViLmNvbS91bG11c1xuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHN2ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnc3YnLCB7XG4gICAgICAgIG1vbnRoczogJ2phbnVhcmlfZmVicnVhcmlfbWFyc19hcHJpbF9tYWpfanVuaV9qdWxpX2F1Z3VzdGlfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVjZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnamFuX2ZlYl9tYXJfYXByX21hal9qdW5fanVsX2F1Z19zZXBfb2t0X25vdl9kZWMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAnc8O2bmRhZ19tw6VuZGFnX3Rpc2RhZ19vbnNkYWdfdG9yc2RhZ19mcmVkYWdfbMO2cmRhZycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ3PDtm5fbcOlbl90aXNfb25zX3Rvcl9mcmVfbMO2cicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdzw7ZfbcOlX3RpX29uX3RvX2ZyX2zDticuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ1lZWVktTU0tREQnLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBba2wuXSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCBEIE1NTU0gWVlZWSBba2wuXSBISDptbScsXG4gICAgICAgICAgICBsbGw6ICdEIE1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIGxsbGw6ICdkZGQgRCBNTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW0lkYWddIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbSW1vcmdvbl0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tJZ8Olcl0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdbUMOlXSBkZGRkIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW0ldIGRkZGRbc10gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdvbSAlcycsXG4gICAgICAgICAgICBwYXN0OiAnZsO2ciAlcyBzZWRhbicsXG4gICAgICAgICAgICBzOiAnbsOlZ3JhIHNla3VuZGVyJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2VrdW5kZXInLFxuICAgICAgICAgICAgbTogJ2VuIG1pbnV0JyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludXRlcicsXG4gICAgICAgICAgICBoOiAnZW4gdGltbWUnLFxuICAgICAgICAgICAgaGg6ICclZCB0aW1tYXInLFxuICAgICAgICAgICAgZDogJ2VuIGRhZycsXG4gICAgICAgICAgICBkZDogJyVkIGRhZ2FyJyxcbiAgICAgICAgICAgIE06ICdlbiBtw6VuYWQnLFxuICAgICAgICAgICAgTU06ICclZCBtw6VuYWRlcicsXG4gICAgICAgICAgICB5OiAnZXR0IMOlcicsXG4gICAgICAgICAgICB5eTogJyVkIMOlcicsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShcXDplfFxcOmEpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgdmFyIGIgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgICAgICBvdXRwdXQgPVxuICAgICAgICAgICAgICAgICAgICB+figobnVtYmVyICUgMTAwKSAvIDEwKSA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAnOmUnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJzphJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAyXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICc6YSdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gM1xuICAgICAgICAgICAgICAgICAgICAgICAgPyAnOmUnXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICc6ZSc7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgb3V0cHV0O1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gc3Y7XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/sv.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/sw.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/sw.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Swahili [sw]\n//! author : Fahad Kassim : https://github.com/fadsel\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var sw = moment.defineLocale('sw', {\n        months: 'Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des'.split('_'),\n        weekdays:\n            'Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi'.split(\n                '_'\n            ),\n        weekdaysShort: 'Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos'.split('_'),\n        weekdaysMin: 'J2_J3_J4_J5_Al_Ij_J1'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'hh:mm A',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[leo saa] LT',\n            nextDay: '[kesho saa] LT',\n            nextWeek: '[wiki ijayo] dddd [saat] LT',\n            lastDay: '[jana] LT',\n            lastWeek: '[wiki iliyopita] dddd [saat] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s baadaye',\n            past: 'tokea %s',\n            s: 'hivi punde',\n            ss: 'sekunde %d',\n            m: 'dakika moja',\n            mm: 'dakika %d',\n            h: 'saa limoja',\n            hh: 'masaa %d',\n            d: 'siku moja',\n            dd: 'siku %d',\n            M: 'mwezi mmoja',\n            MM: 'miezi %d',\n            y: 'mwaka mmoja',\n            yy: 'miaka %d',\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return sw;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zdy5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc3cuanM/NzNjZSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogU3dhaGlsaSBbc3ddXG4vLyEgYXV0aG9yIDogRmFoYWQgS2Fzc2ltIDogaHR0cHM6Ly9naXRodWIuY29tL2ZhZHNlbFxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHN3ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnc3cnLCB7XG4gICAgICAgIG1vbnRoczogJ0phbnVhcmlfRmVicnVhcmlfTWFjaGlfQXByaWxpX01laV9KdW5pX0p1bGFpX0Fnb3N0aV9TZXB0ZW1iYV9Pa3RvYmFfTm92ZW1iYV9EZXNlbWJhJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ0phbl9GZWJfTWFjX0Fwcl9NZWlfSnVuX0p1bF9BZ29fU2VwX09rdF9Ob3ZfRGVzJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czpcbiAgICAgICAgICAgICdKdW1hcGlsaV9KdW1hdGF0dV9KdW1hbm5lX0p1bWF0YW5vX0FsaGFtaXNpX0lqdW1hYV9KdW1hbW9zaScuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnSnBsX0p0YXRfSm5uZV9KdGFuX0FsaF9Jam1fSm1vcycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdKMl9KM19KNF9KNV9BbF9Jal9KMScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdoaDptbSBBJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbbGVvIHNhYV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1trZXNobyBzYWFdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnW3dpa2kgaWpheW9dIGRkZGQgW3NhYXRdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbamFuYV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbd2lraSBpbGl5b3BpdGFdIGRkZGQgW3NhYXRdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMgYmFhZGF5ZScsXG4gICAgICAgICAgICBwYXN0OiAndG9rZWEgJXMnLFxuICAgICAgICAgICAgczogJ2hpdmkgcHVuZGUnLFxuICAgICAgICAgICAgc3M6ICdzZWt1bmRlICVkJyxcbiAgICAgICAgICAgIG06ICdkYWtpa2EgbW9qYScsXG4gICAgICAgICAgICBtbTogJ2Rha2lrYSAlZCcsXG4gICAgICAgICAgICBoOiAnc2FhIGxpbW9qYScsXG4gICAgICAgICAgICBoaDogJ21hc2FhICVkJyxcbiAgICAgICAgICAgIGQ6ICdzaWt1IG1vamEnLFxuICAgICAgICAgICAgZGQ6ICdzaWt1ICVkJyxcbiAgICAgICAgICAgIE06ICdtd2V6aSBtbW9qYScsXG4gICAgICAgICAgICBNTTogJ21pZXppICVkJyxcbiAgICAgICAgICAgIHk6ICdtd2FrYSBtbW9qYScsXG4gICAgICAgICAgICB5eTogJ21pYWthICVkJyxcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNywgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gN3RoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHN3O1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/sw.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/ta.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/ta.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Tamil [ta]\n//! author : Arjunkumar Krishnamoorthy : https://github.com/tk120404\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '௧',\n            2: '௨',\n            3: '௩',\n            4: '௪',\n            5: '௫',\n            6: '௬',\n            7: '௭',\n            8: '௮',\n            9: '௯',\n            0: '௦',\n        },\n        numberMap = {\n            '௧': '1',\n            '௨': '2',\n            '௩': '3',\n            '௪': '4',\n            '௫': '5',\n            '௬': '6',\n            '௭': '7',\n            '௮': '8',\n            '௯': '9',\n            '௦': '0',\n        };\n\n    var ta = moment.defineLocale('ta', {\n        months: 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split(\n            '_'\n        ),\n        monthsShort:\n            'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split(\n                '_'\n            ),\n        weekdays:\n            'ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை'.split(\n                '_'\n            ),\n        weekdaysShort: 'ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி'.split(\n            '_'\n        ),\n        weekdaysMin: 'ஞா_தி_செ_பு_வி_வெ_ச'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, HH:mm',\n            LLLL: 'dddd, D MMMM YYYY, HH:mm',\n        },\n        calendar: {\n            sameDay: '[இன்று] LT',\n            nextDay: '[நாளை] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[நேற்று] LT',\n            lastWeek: '[கடந்த வாரம்] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s இல்',\n            past: '%s முன்',\n            s: 'ஒரு சில விநாடிகள்',\n            ss: '%d விநாடிகள்',\n            m: 'ஒரு நிமிடம்',\n            mm: '%d நிமிடங்கள்',\n            h: 'ஒரு மணி நேரம்',\n            hh: '%d மணி நேரம்',\n            d: 'ஒரு நாள்',\n            dd: '%d நாட்கள்',\n            M: 'ஒரு மாதம்',\n            MM: '%d மாதங்கள்',\n            y: 'ஒரு வருடம்',\n            yy: '%d ஆண்டுகள்',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}வது/,\n        ordinal: function (number) {\n            return number + 'வது';\n        },\n        preparse: function (string) {\n            return string.replace(/[௧௨௩௪௫௬௭௮௯௦]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        // refer http://ta.wikipedia.org/s/1er1\n        meridiemParse: /யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/,\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 2) {\n                return ' யாமம்';\n            } else if (hour < 6) {\n                return ' வைகறை'; // வைகறை\n            } else if (hour < 10) {\n                return ' காலை'; // காலை\n            } else if (hour < 14) {\n                return ' நண்பகல்'; // நண்பகல்\n            } else if (hour < 18) {\n                return ' எற்பாடு'; // எற்பாடு\n            } else if (hour < 22) {\n                return ' மாலை'; // மாலை\n            } else {\n                return ' யாமம்';\n            }\n        },\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'யாமம்') {\n                return hour < 2 ? hour : hour + 12;\n            } else if (meridiem === 'வைகறை' || meridiem === 'காலை') {\n                return hour;\n            } else if (meridiem === 'நண்பகல்') {\n                return hour >= 10 ? hour : hour + 12;\n            } else {\n                return hour + 12;\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return ta;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90YS5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2QsaUNBQWlDO0FBQ2pDLGNBQWM7QUFDZCxnQ0FBZ0M7QUFDaEMsY0FBYztBQUNkLG1DQUFtQztBQUNuQyxjQUFjO0FBQ2QsbUNBQW1DO0FBQ25DLGNBQWM7QUFDZCxnQ0FBZ0M7QUFDaEMsY0FBYztBQUNkO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RhLmpzPzk2YzkiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFRhbWlsIFt0YV1cbi8vISBhdXRob3IgOiBBcmp1bmt1bWFyIEtyaXNobmFtb29ydGh5IDogaHR0cHM6Ly9naXRodWIuY29tL3RrMTIwNDA0XG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgc3ltYm9sTWFwID0ge1xuICAgICAgICAgICAgMTogJ+CvpycsXG4gICAgICAgICAgICAyOiAn4K+oJyxcbiAgICAgICAgICAgIDM6ICfgr6knLFxuICAgICAgICAgICAgNDogJ+CvqicsXG4gICAgICAgICAgICA1OiAn4K+rJyxcbiAgICAgICAgICAgIDY6ICfgr6wnLFxuICAgICAgICAgICAgNzogJ+CvrScsXG4gICAgICAgICAgICA4OiAn4K+uJyxcbiAgICAgICAgICAgIDk6ICfgr68nLFxuICAgICAgICAgICAgMDogJ+CvpicsXG4gICAgICAgIH0sXG4gICAgICAgIG51bWJlck1hcCA9IHtcbiAgICAgICAgICAgICfgr6cnOiAnMScsXG4gICAgICAgICAgICAn4K+oJzogJzInLFxuICAgICAgICAgICAgJ+CvqSc6ICczJyxcbiAgICAgICAgICAgICfgr6onOiAnNCcsXG4gICAgICAgICAgICAn4K+rJzogJzUnLFxuICAgICAgICAgICAgJ+CvrCc6ICc2JyxcbiAgICAgICAgICAgICfgr60nOiAnNycsXG4gICAgICAgICAgICAn4K+uJzogJzgnLFxuICAgICAgICAgICAgJ+Cvryc6ICc5JyxcbiAgICAgICAgICAgICfgr6YnOiAnMCcsXG4gICAgICAgIH07XG5cbiAgICB2YXIgdGEgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd0YScsIHtcbiAgICAgICAgbW9udGhzOiAn4K6c4K6p4K614K6w4K6/X+CuquCuv+CuquCvjeCusOCuteCusOCuv1/grq7grr7grrDgr43grprgr41f4K6P4K6q4K+N4K6w4K6y4K+NX+CuruCvh1/grpzgr4Lgrqngr41f4K6c4K+C4K6y4K+IX+CuhuCuleCuuOCvjeCun+CvjV/grprgr4bgrqrgr43grp/gr4bgrq7gr43grqrgrrDgr41f4K6F4K6V4K+N4K6f4K+H4K6+4K6q4K6w4K+NX+CuqOCuteCuruCvjeCuquCusOCvjV/grp/grr/grprgrq7gr43grqrgrrDgr40nLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ+CunOCuqeCuteCusOCuv1/grqrgrr/grqrgr43grrDgrrXgrrDgrr9f4K6u4K6+4K6w4K+N4K6a4K+NX+Cuj+CuquCvjeCusOCusuCvjV/grq7gr4df4K6c4K+C4K6p4K+NX+CunOCvguCusuCviF/grobgrpXgrrjgr43grp/gr41f4K6a4K+G4K6q4K+N4K6f4K+G4K6u4K+N4K6q4K6w4K+NX+CuheCuleCvjeCun+Cvh+CuvuCuquCusOCvjV/grqjgrrXgrq7gr43grqrgrrDgr41f4K6f4K6/4K6a4K6u4K+N4K6q4K6w4K+NJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzOlxuICAgICAgICAgICAgJ+CunuCuvuCur+Cuv+CuseCvjeCuseCvgeCuleCvjeCuleCuv+CutOCuruCviF/grqTgrr/grpngr43grpXgrp/gr43grpXgrr/grrTgrq7gr4hf4K6a4K+G4K614K+N4K614K6+4K6v4K+N4K6V4K6/4K604K6u4K+IX+CuquCvgeCupOCuqeCvjeCuleCuv+CutOCuruCviF/grrXgrr/grq/grr7grrTgrpXgr43grpXgrr/grrTgrq7gr4hf4K614K+G4K6z4K+N4K6z4K6/4K6V4K+N4K6V4K6/4K604K6u4K+IX+CumuCuqeCuv+CuleCvjeCuleCuv+CutOCuruCviCcuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn4K6e4K6+4K6v4K6/4K6x4K+BX+CupOCuv+CumeCvjeCuleCus+CvjV/grprgr4bgrrXgr43grrXgrr7grq/gr41f4K6q4K+B4K6k4K6p4K+NX+CuteCuv+Cur+CuvuCutOCuqeCvjV/grrXgr4bgrrPgr43grrPgrr9f4K6a4K6p4K6/Jy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ+CunuCuvl/grqTgrr9f4K6a4K+GX+CuquCvgV/grrXgrr9f4K614K+GX+Cumicuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSwgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZLCBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW+Cuh+CuqeCvjeCuseCvgV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vgrqjgrr7grrPgr4hdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCwgTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vgrqjgr4fgrrHgr43grrHgr4FdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW+CuleCun+CuqOCvjeCupCDgrrXgrr7grrDgrq7gr41dIGRkZGQsIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMg4K6H4K6y4K+NJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyDgrq7gr4Hgrqngr40nLFxuICAgICAgICAgICAgczogJ+CukuCusOCvgSDgrprgrr/grrIg4K614K6/4K6o4K6+4K6f4K6/4K6V4K6z4K+NJyxcbiAgICAgICAgICAgIHNzOiAnJWQg4K614K6/4K6o4K6+4K6f4K6/4K6V4K6z4K+NJyxcbiAgICAgICAgICAgIG06ICfgrpLgrrDgr4Eg4K6o4K6/4K6u4K6/4K6f4K6u4K+NJyxcbiAgICAgICAgICAgIG1tOiAnJWQg4K6o4K6/4K6u4K6/4K6f4K6Z4K+N4K6V4K6z4K+NJyxcbiAgICAgICAgICAgIGg6ICfgrpLgrrDgr4Eg4K6u4K6j4K6/IOCuqOCvh+CusOCuruCvjScsXG4gICAgICAgICAgICBoaDogJyVkIOCuruCuo+CuvyDgrqjgr4fgrrDgrq7gr40nLFxuICAgICAgICAgICAgZDogJ+CukuCusOCvgSDgrqjgrr7grrPgr40nLFxuICAgICAgICAgICAgZGQ6ICclZCDgrqjgrr7grp/gr43grpXgrrPgr40nLFxuICAgICAgICAgICAgTTogJ+CukuCusOCvgSDgrq7grr7grqTgrq7gr40nLFxuICAgICAgICAgICAgTU06ICclZCDgrq7grr7grqTgrpngr43grpXgrrPgr40nLFxuICAgICAgICAgICAgeTogJ+CukuCusOCvgSDgrrXgrrDgr4Hgrp/grq7gr40nLFxuICAgICAgICAgICAgeXk6ICclZCDgrobgrqPgr43grp/gr4HgrpXgrrPgr40nLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn3grrXgrqTgr4EvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJ+CuteCupOCvgSc7XG4gICAgICAgIH0sXG4gICAgICAgIHByZXBhcnNlOiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1vgr6fgr6jgr6ngr6rgr6vgr6zgr63gr67gr6/gr6ZdL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXJNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHBvc3Rmb3JtYXQ6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvXFxkL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzeW1ib2xNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIHJlZmVyIGh0dHA6Ly90YS53aWtpcGVkaWEub3JnL3MvMWVyMVxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv4K6v4K6+4K6u4K6u4K+NfOCuteCviOCuleCuseCviHzgrpXgrr7grrLgr4h84K6o4K6j4K+N4K6q4K6V4K6y4K+NfOCujuCuseCvjeCuquCuvuCun+CvgXzgrq7grr7grrLgr4gvLFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCAyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICcg4K6v4K6+4K6u4K6u4K+NJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDYpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJyDgrrXgr4jgrpXgrrHgr4gnOyAvLyDgrrXgr4jgrpXgrrHgr4hcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDEwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICcg4K6V4K6+4K6y4K+IJzsgLy8g4K6V4K6+4K6y4K+IXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxNCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnIOCuqOCuo+CvjeCuquCuleCusuCvjSc7IC8vIOCuqOCuo+CvjeCuquCuleCusuCvjVxuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJyDgro7grrHgr43grqrgrr7grp/gr4EnOyAvLyDgro7grrHgr43grqrgrr7grp/gr4FcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDIyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICcg4K6u4K6+4K6y4K+IJzsgLy8g4K6u4K6+4K6y4K+IXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAnIOCur+CuvuCuruCuruCvjSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtSG91cjogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXJpZGllbSA9PT0gJ+Cur+CuvuCuruCuruCvjScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA8IDIgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CuteCviOCuleCuseCviCcgfHwgbWVyaWRpZW0gPT09ICfgrpXgrr7grrLgr4gnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4K6o4K6j4K+N4K6q4K6V4K6y4K+NJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyID49IDEwID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNiwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRhO1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/ta.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/te.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/te.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Telugu [te]\n//! author : Krishna Chaitanya Thota : https://github.com/kcthota\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var te = moment.defineLocale('te', {\n        months: 'జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జులై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్'.split(\n            '_'\n        ),\n        monthsShort:\n            'జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జులై_ఆగ._సెప్._అక్టో._నవ._డిసె.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays:\n            'ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం'.split(\n                '_'\n            ),\n        weekdaysShort: 'ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని'.split('_'),\n        weekdaysMin: 'ఆ_సో_మం_బు_గు_శు_శ'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm',\n            LTS: 'A h:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm',\n        },\n        calendar: {\n            sameDay: '[నేడు] LT',\n            nextDay: '[రేపు] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[నిన్న] LT',\n            lastWeek: '[గత] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s లో',\n            past: '%s క్రితం',\n            s: 'కొన్ని క్షణాలు',\n            ss: '%d సెకన్లు',\n            m: 'ఒక నిమిషం',\n            mm: '%d నిమిషాలు',\n            h: 'ఒక గంట',\n            hh: '%d గంటలు',\n            d: 'ఒక రోజు',\n            dd: '%d రోజులు',\n            M: 'ఒక నెల',\n            MM: '%d నెలలు',\n            y: 'ఒక సంవత్సరం',\n            yy: '%d సంవత్సరాలు',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}వ/,\n        ordinal: '%dవ',\n        meridiemParse: /రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'రాత్రి') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'ఉదయం') {\n                return hour;\n            } else if (meridiem === 'మధ్యాహ్నం') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'సాయంత్రం') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'రాత్రి';\n            } else if (hour < 10) {\n                return 'ఉదయం';\n            } else if (hour < 17) {\n                return 'మధ్యాహ్నం';\n            } else if (hour < 20) {\n                return 'సాయంత్రం';\n            } else {\n                return 'రాత్రి';\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return te;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90ZS5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxvQ0FBb0MsSUFBSTtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RlLmpzP2E4MzkiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFRlbHVndSBbdGVdXG4vLyEgYXV0aG9yIDogS3Jpc2huYSBDaGFpdGFueWEgVGhvdGEgOiBodHRwczovL2dpdGh1Yi5jb20va2N0aG90YVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHRlID0gbW9tZW50LmRlZmluZUxvY2FsZSgndGUnLCB7XG4gICAgICAgIG1vbnRoczogJ+CwnOCwqOCwteCwsOCwv1/gsKvgsL/gsKzgsY3gsLDgsLXgsLDgsL9f4LCu4LC+4LCw4LGN4LCa4LC/X+Cwj+CwquCxjeCwsOCwv+CwsuCxjV/gsK7gsYdf4LCc4LGC4LCo4LGNX+CwnOCxgeCwsuCxiF/gsIbgsJfgsLjgsY3gsJ/gsYFf4LC44LGG4LCq4LGN4LCf4LGG4LCC4LCs4LCw4LGNX+CwheCwleCxjeCwn+Cxi+CwrOCwsOCxjV/gsKjgsLXgsILgsKzgsLDgsY1f4LCh4LC/4LC44LGG4LCC4LCs4LCw4LGNJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICfgsJzgsKguX+Cwq+Cwv+CwrOCxjeCwsC5f4LCu4LC+4LCw4LGN4LCa4LC/X+Cwj+CwquCxjeCwsOCwvy5f4LCu4LGHX+CwnOCxguCwqOCxjV/gsJzgsYHgsLLgsYhf4LCG4LCXLl/gsLjgsYbgsKrgsY0uX+CwheCwleCxjeCwn+Cxiy5f4LCo4LC1Ll/gsKHgsL/gsLjgsYYuJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOlxuICAgICAgICAgICAgJ+CwhuCwpuCwv+CwteCwvuCwsOCwgl/gsLjgsYvgsK7gsLXgsL7gsLDgsIJf4LCu4LCC4LCX4LCz4LC14LC+4LCw4LCCX+CwrOCxgeCwp+CwteCwvuCwsOCwgl/gsJfgsYHgsLDgsYHgsLXgsL7gsLDgsIJf4LC24LGB4LCV4LGN4LCw4LC14LC+4LCw4LCCX+CwtuCwqOCwv+CwteCwvuCwsOCwgicuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn4LCG4LCm4LC/X+CwuOCxi+Cwrl/gsK7gsILgsJfgsLNf4LCs4LGB4LCnX+Cwl+CxgeCwsOCxgV/gsLbgsYHgsJXgsY3gsLBf4LC24LCo4LC/Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ+Cwhl/gsLjgsYtf4LCu4LCCX+CwrOCxgV/gsJfgsYFf4LC24LGBX+Cwticuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnQSBoOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0EgaDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZLCBBIGg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vgsKjgsYfgsKHgsYFdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb4LCw4LGH4LCq4LGBXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQsIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb4LCo4LC/4LCo4LGN4LCoXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1vgsJfgsKRdIGRkZGQsIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMg4LCy4LGLJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyDgsJXgsY3gsLDgsL/gsKTgsIInLFxuICAgICAgICAgICAgczogJ+CwleCxiuCwqOCxjeCwqOCwvyDgsJXgsY3gsLfgsKPgsL7gsLLgsYEnLFxuICAgICAgICAgICAgc3M6ICclZCDgsLjgsYbgsJXgsKjgsY3gsLLgsYEnLFxuICAgICAgICAgICAgbTogJ+CwkuCwlSDgsKjgsL/gsK7gsL/gsLfgsIInLFxuICAgICAgICAgICAgbW06ICclZCDgsKjgsL/gsK7gsL/gsLfgsL7gsLLgsYEnLFxuICAgICAgICAgICAgaDogJ+CwkuCwlSDgsJfgsILgsJ8nLFxuICAgICAgICAgICAgaGg6ICclZCDgsJfgsILgsJ/gsLLgsYEnLFxuICAgICAgICAgICAgZDogJ+CwkuCwlSDgsLDgsYvgsJzgsYEnLFxuICAgICAgICAgICAgZGQ6ICclZCDgsLDgsYvgsJzgsYHgsLLgsYEnLFxuICAgICAgICAgICAgTTogJ+CwkuCwlSDgsKjgsYbgsLInLFxuICAgICAgICAgICAgTU06ICclZCDgsKjgsYbgsLLgsLLgsYEnLFxuICAgICAgICAgICAgeTogJ+CwkuCwlSDgsLjgsILgsLXgsKTgsY3gsLjgsLDgsIInLFxuICAgICAgICAgICAgeXk6ICclZCDgsLjgsILgsLXgsKTgsY3gsLjgsLDgsL7gsLLgsYEnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn3gsLUvLFxuICAgICAgICBvcmRpbmFsOiAnJWTgsLUnLFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv4LCw4LC+4LCk4LGN4LCw4LC/fOCwieCwpuCwr+CwgnzgsK7gsKfgsY3gsK/gsL7gsLngsY3gsKjgsIJ84LC44LC+4LCv4LCC4LCk4LGN4LCw4LCCLyxcbiAgICAgICAgbWVyaWRpZW1Ib3VyOiBmdW5jdGlvbiAoaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1lcmlkaWVtID09PSAn4LCw4LC+4LCk4LGN4LCw4LC/Jykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyIDwgNCA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4LCJ4LCm4LCv4LCCJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CwruCwp+CxjeCwr+CwvuCwueCxjeCwqOCwgicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA+PSAxMCA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4LC44LC+4LCv4LCC4LCk4LGN4LCw4LCCJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyICsgMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CwsOCwvuCwpOCxjeCwsOCwvyc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4LCJ4LCm4LCv4LCCJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDE3KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgsK7gsKfgsY3gsK/gsL7gsLngsY3gsKjgsIInO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMjApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CwuOCwvuCwr+CwguCwpOCxjeCwsOCwgic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4LCw4LC+4LCk4LGN4LCw4LC/JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNiwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRlO1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/te.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/tet.js":
/*!*******************************************!*\
  !*** ./node_modules/moment/locale/tet.js ***!
  \*******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Tetun Dili (East Timor) [tet]\n//! author : Joshua Brooks : https://github.com/joshbrooks\n//! author : Onorio De J. Afonso : https://github.com/marobo\n//! author : Sonia Simoes : https://github.com/soniasimoes\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var tet = moment.defineLocale('tet', {\n        months: 'Janeiru_Fevereiru_Marsu_Abril_Maiu_Juñu_Jullu_Agustu_Setembru_Outubru_Novembru_Dezembru'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),\n        weekdays: 'Domingu_Segunda_Tersa_Kuarta_Kinta_Sesta_Sabadu'.split('_'),\n        weekdaysShort: 'Dom_Seg_Ters_Kua_Kint_Sest_Sab'.split('_'),\n        weekdaysMin: 'Do_Seg_Te_Ku_Ki_Ses_Sa'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Ohin iha] LT',\n            nextDay: '[Aban iha] LT',\n            nextWeek: 'dddd [iha] LT',\n            lastDay: '[Horiseik iha] LT',\n            lastWeek: 'dddd [semana kotuk] [iha] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'iha %s',\n            past: '%s liuba',\n            s: 'segundu balun',\n            ss: 'segundu %d',\n            m: 'minutu ida',\n            mm: 'minutu %d',\n            h: 'oras ida',\n            hh: 'oras %d',\n            d: 'loron ida',\n            dd: 'loron %d',\n            M: 'fulan ida',\n            MM: 'fulan %d',\n            y: 'tinan ida',\n            yy: 'tinan %d',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                        ? 'st'\n                        : b === 2\n                        ? 'nd'\n                        : b === 3\n                        ? 'rd'\n                        : 'th';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return tet;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90ZXQuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsa0RBQVc7QUFDckUsR0FBRyxDQUNzQjtBQUN6QixDQUFDLDRCQUE0Qjs7QUFFN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxvQ0FBb0MsSUFBSTtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdGV0LmpzPzc4N2YiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFRldHVuIERpbGkgKEVhc3QgVGltb3IpIFt0ZXRdXG4vLyEgYXV0aG9yIDogSm9zaHVhIEJyb29rcyA6IGh0dHBzOi8vZ2l0aHViLmNvbS9qb3NoYnJvb2tzXG4vLyEgYXV0aG9yIDogT25vcmlvIERlIEouIEFmb25zbyA6IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXJvYm9cbi8vISBhdXRob3IgOiBTb25pYSBTaW1vZXMgOiBodHRwczovL2dpdGh1Yi5jb20vc29uaWFzaW1vZXNcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciB0ZXQgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd0ZXQnLCB7XG4gICAgICAgIG1vbnRoczogJ0phbmVpcnVfRmV2ZXJlaXJ1X01hcnN1X0FicmlsX01haXVfSnXDsXVfSnVsbHVfQWd1c3R1X1NldGVtYnJ1X091dHVicnVfTm92ZW1icnVfRGV6ZW1icnUnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnSmFuX0Zldl9NYXJfQWJyX01haV9KdW5fSnVsX0Fnb19TZXRfT3V0X05vdl9EZXonLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAnRG9taW5ndV9TZWd1bmRhX1RlcnNhX0t1YXJ0YV9LaW50YV9TZXN0YV9TYWJhZHUnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdEb21fU2VnX1RlcnNfS3VhX0tpbnRfU2VzdF9TYWInLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnRG9fU2VnX1RlX0t1X0tpX1Nlc19TYScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tPaGluIGloYV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tBYmFuIGloYV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFtpaGFdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbSG9yaXNlaWsgaWhhXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW3NlbWFuYSBrb3R1a10gW2loYV0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdpaGEgJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzIGxpdWJhJyxcbiAgICAgICAgICAgIHM6ICdzZWd1bmR1IGJhbHVuJyxcbiAgICAgICAgICAgIHNzOiAnc2VndW5kdSAlZCcsXG4gICAgICAgICAgICBtOiAnbWludXR1IGlkYScsXG4gICAgICAgICAgICBtbTogJ21pbnV0dSAlZCcsXG4gICAgICAgICAgICBoOiAnb3JhcyBpZGEnLFxuICAgICAgICAgICAgaGg6ICdvcmFzICVkJyxcbiAgICAgICAgICAgIGQ6ICdsb3JvbiBpZGEnLFxuICAgICAgICAgICAgZGQ6ICdsb3JvbiAlZCcsXG4gICAgICAgICAgICBNOiAnZnVsYW4gaWRhJyxcbiAgICAgICAgICAgIE1NOiAnZnVsYW4gJWQnLFxuICAgICAgICAgICAgeTogJ3RpbmFuIGlkYScsXG4gICAgICAgICAgICB5eTogJ3RpbmFuICVkJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KHN0fG5kfHJkfHRoKS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBiID0gbnVtYmVyICUgMTAsXG4gICAgICAgICAgICAgICAgb3V0cHV0ID1cbiAgICAgICAgICAgICAgICAgICAgfn4oKG51bWJlciAlIDEwMCkgLyAxMCkgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ3RoJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICdzdCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMlxuICAgICAgICAgICAgICAgICAgICAgICAgPyAnbmQnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDNcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ3JkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiAndGgnO1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIG91dHB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRldDtcblxufSkpKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/tet.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/tg.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/tg.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Tajik [tg]\n//! author : Orif N. Jr. : https://github.com/orif-jr\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var suffixes = {\n        0: '-ум',\n        1: '-ум',\n        2: '-юм',\n        3: '-юм',\n        4: '-ум',\n        5: '-ум',\n        6: '-ум',\n        7: '-ум',\n        8: '-ум',\n        9: '-ум',\n        10: '-ум',\n        12: '-ум',\n        13: '-ум',\n        20: '-ум',\n        30: '-юм',\n        40: '-ум',\n        50: '-ум',\n        60: '-ум',\n        70: '-ум',\n        80: '-ум',\n        90: '-ум',\n        100: '-ум',\n    };\n\n    var tg = moment.defineLocale('tg', {\n        months: {\n            format: 'январи_феврали_марти_апрели_майи_июни_июли_августи_сентябри_октябри_ноябри_декабри'.split(\n                '_'\n            ),\n            standalone:\n                'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split(\n                    '_'\n                ),\n        },\n        monthsShort: 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),\n        weekdays: 'якшанбе_душанбе_сешанбе_чоршанбе_панҷшанбе_ҷумъа_шанбе'.split(\n            '_'\n        ),\n        weekdaysShort: 'яшб_дшб_сшб_чшб_пшб_ҷум_шнб'.split('_'),\n        weekdaysMin: 'яш_дш_сш_чш_пш_ҷм_шб'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Имрӯз соати] LT',\n            nextDay: '[Фардо соати] LT',\n            lastDay: '[Дирӯз соати] LT',\n            nextWeek: 'dddd[и] [ҳафтаи оянда соати] LT',\n            lastWeek: 'dddd[и] [ҳафтаи гузашта соати] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'баъди %s',\n            past: '%s пеш',\n            s: 'якчанд сония',\n            m: 'як дақиқа',\n            mm: '%d дақиқа',\n            h: 'як соат',\n            hh: '%d соат',\n            d: 'як рӯз',\n            dd: '%d рӯз',\n            M: 'як моҳ',\n            MM: '%d моҳ',\n            y: 'як сол',\n            yy: '%d сол',\n        },\n        meridiemParse: /шаб|субҳ|рӯз|бегоҳ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'шаб') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'субҳ') {\n                return hour;\n            } else if (meridiem === 'рӯз') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'бегоҳ') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'шаб';\n            } else if (hour < 11) {\n                return 'субҳ';\n            } else if (hour < 16) {\n                return 'рӯз';\n            } else if (hour < 19) {\n                return 'бегоҳ';\n            } else {\n                return 'шаб';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(ум|юм)/,\n        ordinal: function (number) {\n            var a = number % 10,\n                b = number >= 100 ? 100 : null;\n            return number + (suffixes[number] || suffixes[a] || suffixes[b]);\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 1th is the first week of the year.\n        },\n    });\n\n    return tg;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90Zy5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90Zy5qcz9jYzlhIl0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBUYWppayBbdGddXG4vLyEgYXV0aG9yIDogT3JpZiBOLiBKci4gOiBodHRwczovL2dpdGh1Yi5jb20vb3JpZi1qclxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHN1ZmZpeGVzID0ge1xuICAgICAgICAwOiAnLdGD0LwnLFxuICAgICAgICAxOiAnLdGD0LwnLFxuICAgICAgICAyOiAnLdGO0LwnLFxuICAgICAgICAzOiAnLdGO0LwnLFxuICAgICAgICA0OiAnLdGD0LwnLFxuICAgICAgICA1OiAnLdGD0LwnLFxuICAgICAgICA2OiAnLdGD0LwnLFxuICAgICAgICA3OiAnLdGD0LwnLFxuICAgICAgICA4OiAnLdGD0LwnLFxuICAgICAgICA5OiAnLdGD0LwnLFxuICAgICAgICAxMDogJy3Rg9C8JyxcbiAgICAgICAgMTI6ICct0YPQvCcsXG4gICAgICAgIDEzOiAnLdGD0LwnLFxuICAgICAgICAyMDogJy3Rg9C8JyxcbiAgICAgICAgMzA6ICct0Y7QvCcsXG4gICAgICAgIDQwOiAnLdGD0LwnLFxuICAgICAgICA1MDogJy3Rg9C8JyxcbiAgICAgICAgNjA6ICct0YPQvCcsXG4gICAgICAgIDcwOiAnLdGD0LwnLFxuICAgICAgICA4MDogJy3Rg9C8JyxcbiAgICAgICAgOTA6ICct0YPQvCcsXG4gICAgICAgIDEwMDogJy3Rg9C8JyxcbiAgICB9O1xuXG4gICAgdmFyIHRnID0gbW9tZW50LmRlZmluZUxvY2FsZSgndGcnLCB7XG4gICAgICAgIG1vbnRoczoge1xuICAgICAgICAgICAgZm9ybWF0OiAn0Y/QvdCy0LDRgNC4X9GE0LXQstGA0LDQu9C4X9C80LDRgNGC0Lhf0LDQv9GA0LXQu9C4X9C80LDQudC4X9C40Y7QvdC4X9C40Y7Qu9C4X9Cw0LLQs9GD0YHRgtC4X9GB0LXQvdGC0Y/QsdGA0Lhf0L7QutGC0Y/QsdGA0Lhf0L3QvtGP0LHRgNC4X9C00LXQutCw0LHRgNC4Jy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBzdGFuZGFsb25lOlxuICAgICAgICAgICAgICAgICfRj9C90LLQsNGAX9GE0LXQstGA0LDQu1/QvNCw0YDRgl/QsNC/0YDQtdC7X9C80LDQuV/QuNGO0L1f0LjRjtC7X9Cw0LLQs9GD0YHRgl/RgdC10L3RgtGP0LHRgF/QvtC60YLRj9Cx0YBf0L3QvtGP0LHRgF/QtNC10LrQsNCx0YAnLnNwbGl0KFxuICAgICAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICB9LFxuICAgICAgICBtb250aHNTaG9ydDogJ9GP0L3Qsl/RhNC10LJf0LzQsNGAX9Cw0L/RgF/QvNCw0Llf0LjRjtC9X9C40Y7Qu1/QsNCy0LNf0YHQtdC9X9C+0LrRgl/QvdC+0Y9f0LTQtdC6Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ9GP0LrRiNCw0L3QsdC1X9C00YPRiNCw0L3QsdC1X9GB0LXRiNCw0L3QsdC1X9GH0L7RgNGI0LDQvdCx0LVf0L/QsNC90rfRiNCw0L3QsdC1X9K30YPQvNGK0LBf0YjQsNC90LHQtScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ9GP0YjQsV/QtNGI0LFf0YHRiNCxX9GH0YjQsV/Qv9GI0LFf0rfRg9C8X9GI0L3QsScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfRj9GIX9C00Yhf0YHRiF/Rh9GIX9C/0Yhf0rfQvF/RiNCxJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW9CY0LzRgNOv0Lcg0YHQvtCw0YLQuF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vQpNCw0YDQtNC+INGB0L7QsNGC0LhdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb0JTQuNGA06/QtyDRgdC+0LDRgtC4XSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGRb0LhdIFvSs9Cw0YTRgtCw0Lgg0L7Rj9C90LTQsCDRgdC+0LDRgtC4XSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGRb0LhdIFvSs9Cw0YTRgtCw0Lgg0LPRg9C30LDRiNGC0LAg0YHQvtCw0YLQuF0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICfQsdCw0YrQtNC4ICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyDQv9C10YgnLFxuICAgICAgICAgICAgczogJ9GP0LrRh9Cw0L3QtCDRgdC+0L3QuNGPJyxcbiAgICAgICAgICAgIG06ICfRj9C6INC00LDSm9C40pvQsCcsXG4gICAgICAgICAgICBtbTogJyVkINC00LDSm9C40pvQsCcsXG4gICAgICAgICAgICBoOiAn0Y/QuiDRgdC+0LDRgicsXG4gICAgICAgICAgICBoaDogJyVkINGB0L7QsNGCJyxcbiAgICAgICAgICAgIGQ6ICfRj9C6INGA06/QtycsXG4gICAgICAgICAgICBkZDogJyVkINGA06/QtycsXG4gICAgICAgICAgICBNOiAn0Y/QuiDQvNC+0rMnLFxuICAgICAgICAgICAgTU06ICclZCDQvNC+0rMnLFxuICAgICAgICAgICAgeTogJ9GP0Log0YHQvtC7JyxcbiAgICAgICAgICAgIHl5OiAnJWQg0YHQvtC7JyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL9GI0LDQsXzRgdGD0LHSs3zRgNOv0Ld80LHQtdCz0L7Ssy8sXG4gICAgICAgIG1lcmlkaWVtSG91cjogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXJpZGllbSA9PT0gJ9GI0LDQsScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA8IDQgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ9GB0YPQsdKzJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ9GA06/QtycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA+PSAxMSA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn0LHQtdCz0L7SsycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCA0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfRiNCw0LEnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9GB0YPQsdKzJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDE2KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfRgNOv0LcnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9Cx0LXQs9C+0rMnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9GI0LDQsSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfS0o0YPQvHzRjtC8KS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBhID0gbnVtYmVyICUgMTAsXG4gICAgICAgICAgICAgICAgYiA9IG51bWJlciA+PSAxMDAgPyAxMDAgOiBudWxsO1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIChzdWZmaXhlc1tudW1iZXJdIHx8IHN1ZmZpeGVzW2FdIHx8IHN1ZmZpeGVzW2JdKTtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNywgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gMXRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRnO1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/tg.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/th.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/th.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Thai [th]\n//! author : Kridsada Thanabulpong : https://github.com/sirn\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var th = moment.defineLocale('th', {\n        months: 'มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม'.split(\n            '_'\n        ),\n        monthsShort:\n            'ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์'.split('_'),\n        weekdaysShort: 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์'.split('_'), // yes, three characters difference\n        weekdaysMin: 'อา._จ._อ._พ._พฤ._ศ._ส.'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY เวลา H:mm',\n            LLLL: 'วันddddที่ D MMMM YYYY เวลา H:mm',\n        },\n        meridiemParse: /ก่อนเที่ยง|หลังเที่ยง/,\n        isPM: function (input) {\n            return input === 'หลังเที่ยง';\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ก่อนเที่ยง';\n            } else {\n                return 'หลังเที่ยง';\n            }\n        },\n        calendar: {\n            sameDay: '[วันนี้ เวลา] LT',\n            nextDay: '[พรุ่งนี้ เวลา] LT',\n            nextWeek: 'dddd[หน้า เวลา] LT',\n            lastDay: '[เมื่อวานนี้ เวลา] LT',\n            lastWeek: '[วัน]dddd[ที่แล้ว เวลา] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'อีก %s',\n            past: '%sที่แล้ว',\n            s: 'ไม่กี่วินาที',\n            ss: '%d วินาที',\n            m: '1 นาที',\n            mm: '%d นาที',\n            h: '1 ชั่วโมง',\n            hh: '%d ชั่วโมง',\n            d: '1 วัน',\n            dd: '%d วัน',\n            w: '1 สัปดาห์',\n            ww: '%d สัปดาห์',\n            M: '1 เดือน',\n            MM: '%d เดือน',\n            y: '1 ปี',\n            yy: '%d ปี',\n        },\n    });\n\n    return th;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90aC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdGguanM/N2IxMSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogVGhhaSBbdGhdXG4vLyEgYXV0aG9yIDogS3JpZHNhZGEgVGhhbmFidWxwb25nIDogaHR0cHM6Ly9naXRodWIuY29tL3Npcm5cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciB0aCA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3RoJywge1xuICAgICAgICBtb250aHM6ICfguKHguIHguKPguLLguITguKFf4LiB4Li44Lih4Lig4Liy4Lie4Lix4LiZ4LiY4LmMX+C4oeC4teC4meC4suC4hOC4oV/guYDguKHguKnguLLguKLguJlf4Lie4Lik4Lip4Lig4Liy4LiE4LihX+C4oeC4tOC4luC4uOC4meC4suC4ouC4mV/guIHguKPguIHguI7guLLguITguKFf4Liq4Li04LiH4Lir4Liy4LiE4LihX+C4geC4seC4meC4ouC4suC4ouC4mV/guJXguLjguKXguLLguITguKFf4Lie4Lik4Lio4LiI4Li04LiB4Liy4Lii4LiZX+C4mOC4seC4meC4p+C4suC4hOC4oScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAn4LihLuC4hC5f4LiBLuC4ni5f4Lih4Li1LuC4hC5f4LmA4LihLuC4oi5f4LieLuC4hC5f4Lih4Li0LuC4oi5f4LiBLuC4hC5f4LiqLuC4hC5f4LiBLuC4oi5f4LiVLuC4hC5f4LieLuC4oi5f4LiYLuC4hC4nLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6ICfguK3guLLguJfguLTguJXguKLguYxf4LiI4Lix4LiZ4LiX4Lij4LmMX+C4reC4seC4h+C4hOC4suC4o1/guJ7guLjguJhf4Lie4Lik4Lir4Lix4Liq4Lia4LiU4Li1X+C4qOC4uOC4geC4o+C5jF/guYDguKrguLLguKPguYwnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfguK3guLLguJfguLTguJXguKLguYxf4LiI4Lix4LiZ4LiX4Lij4LmMX+C4reC4seC4h+C4hOC4suC4o1/guJ7guLjguJhf4Lie4Lik4Lir4Lix4LiqX+C4qOC4uOC4geC4o+C5jF/guYDguKrguLLguKPguYwnLnNwbGl0KCdfJyksIC8vIHllcywgdGhyZWUgY2hhcmFjdGVycyBkaWZmZXJlbmNlXG4gICAgICAgIHdlZWtkYXlzTWluOiAn4Lit4LiyLl/guIguX+C4rS5f4LieLl/guJ7guKQuX+C4qC5f4LiqLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0g6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSDguYDguKfguKXguLIgSDptbScsXG4gICAgICAgICAgICBMTExMOiAn4Lin4Lix4LiZZGRkZOC4l+C4teC5iCBEIE1NTU0gWVlZWSDguYDguKfguKXguLIgSDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/guIHguYjguK3guJnguYDguJfguLXguYjguKLguId84Lir4Lil4Lix4LiH4LmA4LiX4Li14LmI4Lii4LiHLyxcbiAgICAgICAgaXNQTTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQgPT09ICfguKvguKXguLHguIfguYDguJfguLXguYjguKLguIcnO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4LiB4LmI4Lit4LiZ4LmA4LiX4Li14LmI4Lii4LiHJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfguKvguKXguLHguIfguYDguJfguLXguYjguKLguIcnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vguKfguLHguJnguJnguLXguYkg4LmA4Lin4Lil4LiyXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW+C4nuC4o+C4uOC5iOC4h+C4meC4teC5iSDguYDguKfguKXguLJdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZFvguKvguJnguYnguLIg4LmA4Lin4Lil4LiyXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW+C5gOC4oeC4t+C5iOC4reC4p+C4suC4meC4meC4teC5iSDguYDguKfguKXguLJdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW+C4p+C4seC4mV1kZGRkW+C4l+C4teC5iOC5geC4peC5ieC4pyDguYDguKfguKXguLJdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAn4Lit4Li14LiBICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclc+C4l+C4teC5iOC5geC4peC5ieC4pycsXG4gICAgICAgICAgICBzOiAn4LmE4Lih4LmI4LiB4Li14LmI4Lin4Li04LiZ4Liy4LiX4Li1JyxcbiAgICAgICAgICAgIHNzOiAnJWQg4Lin4Li04LiZ4Liy4LiX4Li1JyxcbiAgICAgICAgICAgIG06ICcxIOC4meC4suC4l+C4tScsXG4gICAgICAgICAgICBtbTogJyVkIOC4meC4suC4l+C4tScsXG4gICAgICAgICAgICBoOiAnMSDguIrguLHguYjguKfguYLguKHguIcnLFxuICAgICAgICAgICAgaGg6ICclZCDguIrguLHguYjguKfguYLguKHguIcnLFxuICAgICAgICAgICAgZDogJzEg4Lin4Lix4LiZJyxcbiAgICAgICAgICAgIGRkOiAnJWQg4Lin4Lix4LiZJyxcbiAgICAgICAgICAgIHc6ICcxIOC4quC4seC4m+C4lOC4suC4q+C5jCcsXG4gICAgICAgICAgICB3dzogJyVkIOC4quC4seC4m+C4lOC4suC4q+C5jCcsXG4gICAgICAgICAgICBNOiAnMSDguYDguJTguLfguK3guJknLFxuICAgICAgICAgICAgTU06ICclZCDguYDguJTguLfguK3guJknLFxuICAgICAgICAgICAgeTogJzEg4Lib4Li1JyxcbiAgICAgICAgICAgIHl5OiAnJWQg4Lib4Li1JyxcbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiB0aDtcblxufSkpKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/th.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/tk.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/tk.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Turkmen [tk]\n//! author : Atamyrat Abdyrahmanov : https://github.com/atamyratabdy\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var suffixes = {\n        1: \"'inji\",\n        5: \"'inji\",\n        8: \"'inji\",\n        70: \"'inji\",\n        80: \"'inji\",\n        2: \"'nji\",\n        7: \"'nji\",\n        20: \"'nji\",\n        50: \"'nji\",\n        3: \"'ünji\",\n        4: \"'ünji\",\n        100: \"'ünji\",\n        6: \"'njy\",\n        9: \"'unjy\",\n        10: \"'unjy\",\n        30: \"'unjy\",\n        60: \"'ynjy\",\n        90: \"'ynjy\",\n    };\n\n    var tk = moment.defineLocale('tk', {\n        months: 'Ýanwar_Fewral_Mart_Aprel_Maý_Iýun_Iýul_Awgust_Sentýabr_Oktýabr_Noýabr_Dekabr'.split(\n            '_'\n        ),\n        monthsShort: 'Ýan_Few_Mar_Apr_Maý_Iýn_Iýl_Awg_Sen_Okt_Noý_Dek'.split('_'),\n        weekdays: 'Ýekşenbe_Duşenbe_Sişenbe_Çarşenbe_Penşenbe_Anna_Şenbe'.split(\n            '_'\n        ),\n        weekdaysShort: 'Ýek_Duş_Siş_Çar_Pen_Ann_Şen'.split('_'),\n        weekdaysMin: 'Ýk_Dş_Sş_Çr_Pn_An_Şn'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[bugün sagat] LT',\n            nextDay: '[ertir sagat] LT',\n            nextWeek: '[indiki] dddd [sagat] LT',\n            lastDay: '[düýn] LT',\n            lastWeek: '[geçen] dddd [sagat] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s soň',\n            past: '%s öň',\n            s: 'birnäçe sekunt',\n            m: 'bir minut',\n            mm: '%d minut',\n            h: 'bir sagat',\n            hh: '%d sagat',\n            d: 'bir gün',\n            dd: '%d gün',\n            M: 'bir aý',\n            MM: '%d aý',\n            y: 'bir ýyl',\n            yy: '%d ýyl',\n        },\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'Do':\n                case 'DD':\n                    return number;\n                default:\n                    if (number === 0) {\n                        // special case for zero\n                        return number + \"'unjy\";\n                    }\n                    var a = number % 10,\n                        b = (number % 100) - a,\n                        c = number >= 100 ? 100 : null;\n                    return number + (suffixes[a] || suffixes[b] || suffixes[c]);\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return tk;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90ay5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RrLmpzP2FlMWYiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFR1cmttZW4gW3RrXVxuLy8hIGF1dGhvciA6IEF0YW15cmF0IEFiZHlyYWhtYW5vdiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9hdGFteXJhdGFiZHlcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBzdWZmaXhlcyA9IHtcbiAgICAgICAgMTogXCInaW5qaVwiLFxuICAgICAgICA1OiBcIidpbmppXCIsXG4gICAgICAgIDg6IFwiJ2luamlcIixcbiAgICAgICAgNzA6IFwiJ2luamlcIixcbiAgICAgICAgODA6IFwiJ2luamlcIixcbiAgICAgICAgMjogXCInbmppXCIsXG4gICAgICAgIDc6IFwiJ25qaVwiLFxuICAgICAgICAyMDogXCInbmppXCIsXG4gICAgICAgIDUwOiBcIiduamlcIixcbiAgICAgICAgMzogXCInw7xuamlcIixcbiAgICAgICAgNDogXCInw7xuamlcIixcbiAgICAgICAgMTAwOiBcIifDvG5qaVwiLFxuICAgICAgICA2OiBcIiduanlcIixcbiAgICAgICAgOTogXCIndW5qeVwiLFxuICAgICAgICAxMDogXCIndW5qeVwiLFxuICAgICAgICAzMDogXCIndW5qeVwiLFxuICAgICAgICA2MDogXCIneW5qeVwiLFxuICAgICAgICA5MDogXCIneW5qeVwiLFxuICAgIH07XG5cbiAgICB2YXIgdGsgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd0aycsIHtcbiAgICAgICAgbW9udGhzOiAnw51hbndhcl9GZXdyYWxfTWFydF9BcHJlbF9NYcO9X0nDvXVuX0nDvXVsX0F3Z3VzdF9TZW50w71hYnJfT2t0w71hYnJfTm/DvWFicl9EZWthYnInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnw51hbl9GZXdfTWFyX0Fwcl9NYcO9X0nDvW5fScO9bF9Bd2dfU2VuX09rdF9Ob8O9X0Rlaycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICfDnWVrxZ9lbmJlX0R1xZ9lbmJlX1NpxZ9lbmJlX8OHYXLFn2VuYmVfUGVuxZ9lbmJlX0FubmFfxZ5lbmJlJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnw51la19EdcWfX1NpxZ9fw4dhcl9QZW5fQW5uX8WeZW4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnw51rX0TFn19TxZ9fw4dyX1BuX0FuX8Webicuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tidWfDvG4gc2FnYXRdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbZXJ0aXIgc2FnYXRdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnW2luZGlraV0gZGRkZCBbc2FnYXRdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbZMO8w71uXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1tnZcOnZW5dIGRkZGQgW3NhZ2F0XSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVzIHNvxYgnLFxuICAgICAgICAgICAgcGFzdDogJyVzIMO2xYgnLFxuICAgICAgICAgICAgczogJ2Jpcm7DpMOnZSBzZWt1bnQnLFxuICAgICAgICAgICAgbTogJ2JpciBtaW51dCcsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0JyxcbiAgICAgICAgICAgIGg6ICdiaXIgc2FnYXQnLFxuICAgICAgICAgICAgaGg6ICclZCBzYWdhdCcsXG4gICAgICAgICAgICBkOiAnYmlyIGfDvG4nLFxuICAgICAgICAgICAgZGQ6ICclZCBnw7xuJyxcbiAgICAgICAgICAgIE06ICdiaXIgYcO9JyxcbiAgICAgICAgICAgIE1NOiAnJWQgYcO9JyxcbiAgICAgICAgICAgIHk6ICdiaXIgw715bCcsXG4gICAgICAgICAgICB5eTogJyVkIMO9eWwnLFxuICAgICAgICB9LFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyLCBwZXJpb2QpIHtcbiAgICAgICAgICAgIHN3aXRjaCAocGVyaW9kKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnRCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnRG8nOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0REJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBpZiAobnVtYmVyID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzcGVjaWFsIGNhc2UgZm9yIHplcm9cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyBcIid1bmp5XCI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGIgPSAobnVtYmVyICUgMTAwKSAtIGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBjID0gbnVtYmVyID49IDEwMCA/IDEwMCA6IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAoc3VmZml4ZXNbYV0gfHwgc3VmZml4ZXNbYl0gfHwgc3VmZml4ZXNbY10pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA3LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA3dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGs7XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/tk.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/tl-ph.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/tl-ph.js ***!
  \*********************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Tagalog (Philippines) [tl-ph]\n//! author : Dan Hagman : https://github.com/hagmandan\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var tlPh = moment.defineLocale('tl-ph', {\n        months: 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split(\n            '_'\n        ),\n        monthsShort: 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'),\n        weekdays: 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split(\n            '_'\n        ),\n        weekdaysShort: 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'),\n        weekdaysMin: 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'MM/D/YYYY',\n            LL: 'MMMM D, YYYY',\n            LLL: 'MMMM D, YYYY HH:mm',\n            LLLL: 'dddd, MMMM DD, YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: 'LT [ngayong araw]',\n            nextDay: '[Bukas ng] LT',\n            nextWeek: 'LT [sa susunod na] dddd',\n            lastDay: 'LT [kahapon]',\n            lastWeek: 'LT [noong nakaraang] dddd',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'sa loob ng %s',\n            past: '%s ang nakalipas',\n            s: 'ilang segundo',\n            ss: '%d segundo',\n            m: 'isang minuto',\n            mm: '%d minuto',\n            h: 'isang oras',\n            hh: '%d oras',\n            d: 'isang araw',\n            dd: '%d araw',\n            M: 'isang buwan',\n            MM: '%d buwan',\n            y: 'isang taon',\n            yy: '%d taon',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}/,\n        ordinal: function (number) {\n            return number;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return tlPh;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90bC1waC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RsLXBoLmpzPzc0Y2QiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFRhZ2Fsb2cgKFBoaWxpcHBpbmVzKSBbdGwtcGhdXG4vLyEgYXV0aG9yIDogRGFuIEhhZ21hbiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9oYWdtYW5kYW5cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciB0bFBoID0gbW9tZW50LmRlZmluZUxvY2FsZSgndGwtcGgnLCB7XG4gICAgICAgIG1vbnRoczogJ0VuZXJvX1BlYnJlcm9fTWFyc29fQWJyaWxfTWF5b19IdW55b19IdWx5b19BZ29zdG9fU2V0eWVtYnJlX09rdHVicmVfTm9ieWVtYnJlX0Rpc3llbWJyZScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdFbmVfUGViX01hcl9BYnJfTWF5X0h1bl9IdWxfQWdvX1NldF9Pa3RfTm9iX0Rpcycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICdMaW5nZ29fTHVuZXNfTWFydGVzX01peWVya3VsZXNfSHV3ZWJlc19CaXllcm5lc19TYWJhZG8nLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdMaW5fTHVuX01hcl9NaXlfSHV3X0JpeV9TYWInLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnTGlfTHVfTWFfTWlfSHVfQmlfU2FiJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnTU0vRC9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnTU1NTSBELCBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ01NTU0gRCwgWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgTU1NTSBERCwgWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnTFQgW25nYXlvbmcgYXJhd10nLFxuICAgICAgICAgICAgbmV4dERheTogJ1tCdWthcyBuZ10gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdMVCBbc2Egc3VzdW5vZCBuYV0gZGRkZCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnTFQgW2thaGFwb25dJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnTFQgW25vb25nIG5ha2FyYWFuZ10gZGRkZCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ3NhIGxvb2IgbmcgJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzIGFuZyBuYWthbGlwYXMnLFxuICAgICAgICAgICAgczogJ2lsYW5nIHNlZ3VuZG8nLFxuICAgICAgICAgICAgc3M6ICclZCBzZWd1bmRvJyxcbiAgICAgICAgICAgIG06ICdpc2FuZyBtaW51dG8nLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dG8nLFxuICAgICAgICAgICAgaDogJ2lzYW5nIG9yYXMnLFxuICAgICAgICAgICAgaGg6ICclZCBvcmFzJyxcbiAgICAgICAgICAgIGQ6ICdpc2FuZyBhcmF3JyxcbiAgICAgICAgICAgIGRkOiAnJWQgYXJhdycsXG4gICAgICAgICAgICBNOiAnaXNhbmcgYnV3YW4nLFxuICAgICAgICAgICAgTU06ICclZCBidXdhbicsXG4gICAgICAgICAgICB5OiAnaXNhbmcgdGFvbicsXG4gICAgICAgICAgICB5eTogJyVkIHRhb24nLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0vLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGxQaDtcblxufSkpKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/tl-ph.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/tlh.js":
/*!*******************************************!*\
  !*** ./node_modules/moment/locale/tlh.js ***!
  \*******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Klingon [tlh]\n//! author : Dominika Kruk : https://github.com/amaranthrose\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var numbersNouns = 'pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut'.split('_');\n\n    function translateFuture(output) {\n        var time = output;\n        time =\n            output.indexOf('jaj') !== -1\n                ? time.slice(0, -3) + 'leS'\n                : output.indexOf('jar') !== -1\n                ? time.slice(0, -3) + 'waQ'\n                : output.indexOf('DIS') !== -1\n                ? time.slice(0, -3) + 'nem'\n                : time + ' pIq';\n        return time;\n    }\n\n    function translatePast(output) {\n        var time = output;\n        time =\n            output.indexOf('jaj') !== -1\n                ? time.slice(0, -3) + 'Hu’'\n                : output.indexOf('jar') !== -1\n                ? time.slice(0, -3) + 'wen'\n                : output.indexOf('DIS') !== -1\n                ? time.slice(0, -3) + 'ben'\n                : time + ' ret';\n        return time;\n    }\n\n    function translate(number, withoutSuffix, string, isFuture) {\n        var numberNoun = numberAsNoun(number);\n        switch (string) {\n            case 'ss':\n                return numberNoun + ' lup';\n            case 'mm':\n                return numberNoun + ' tup';\n            case 'hh':\n                return numberNoun + ' rep';\n            case 'dd':\n                return numberNoun + ' jaj';\n            case 'MM':\n                return numberNoun + ' jar';\n            case 'yy':\n                return numberNoun + ' DIS';\n        }\n    }\n\n    function numberAsNoun(number) {\n        var hundred = Math.floor((number % 1000) / 100),\n            ten = Math.floor((number % 100) / 10),\n            one = number % 10,\n            word = '';\n        if (hundred > 0) {\n            word += numbersNouns[hundred] + 'vatlh';\n        }\n        if (ten > 0) {\n            word += (word !== '' ? ' ' : '') + numbersNouns[ten] + 'maH';\n        }\n        if (one > 0) {\n            word += (word !== '' ? ' ' : '') + numbersNouns[one];\n        }\n        return word === '' ? 'pagh' : word;\n    }\n\n    var tlh = moment.defineLocale('tlh', {\n        months: 'tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’'.split(\n            '_'\n        ),\n        monthsShort:\n            'jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split(\n            '_'\n        ),\n        weekdaysShort:\n            'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),\n        weekdaysMin:\n            'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[DaHjaj] LT',\n            nextDay: '[wa’leS] LT',\n            nextWeek: 'LLL',\n            lastDay: '[wa’Hu’] LT',\n            lastWeek: 'LLL',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: translateFuture,\n            past: translatePast,\n            s: 'puS lup',\n            ss: translate,\n            m: 'wa’ tup',\n            mm: translate,\n            h: 'wa’ rep',\n            hh: translate,\n            d: 'wa’ jaj',\n            dd: translate,\n            M: 'wa’ jar',\n            MM: translate,\n            y: 'wa’ DIS',\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return tlh;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90bGguanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxrREFBVztBQUNyRSxHQUFHLENBQ3NCO0FBQ3pCLENBQUMsNEJBQTRCOztBQUU3Qjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdGxoLmpzPzE3MTQiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEtsaW5nb24gW3RsaF1cbi8vISBhdXRob3IgOiBEb21pbmlrYSBLcnVrIDogaHR0cHM6Ly9naXRodWIuY29tL2FtYXJhbnRocm9zZVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIG51bWJlcnNOb3VucyA9ICdwYWdoX3dh4oCZX2NoYeKAmV93ZWpfbG9TX3ZhZ2hfamF2X1NvY2hfY2hvcmdoX0h1dCcuc3BsaXQoJ18nKTtcblxuICAgIGZ1bmN0aW9uIHRyYW5zbGF0ZUZ1dHVyZShvdXRwdXQpIHtcbiAgICAgICAgdmFyIHRpbWUgPSBvdXRwdXQ7XG4gICAgICAgIHRpbWUgPVxuICAgICAgICAgICAgb3V0cHV0LmluZGV4T2YoJ2phaicpICE9PSAtMVxuICAgICAgICAgICAgICAgID8gdGltZS5zbGljZSgwLCAtMykgKyAnbGVTJ1xuICAgICAgICAgICAgICAgIDogb3V0cHV0LmluZGV4T2YoJ2phcicpICE9PSAtMVxuICAgICAgICAgICAgICAgID8gdGltZS5zbGljZSgwLCAtMykgKyAnd2FRJ1xuICAgICAgICAgICAgICAgIDogb3V0cHV0LmluZGV4T2YoJ0RJUycpICE9PSAtMVxuICAgICAgICAgICAgICAgID8gdGltZS5zbGljZSgwLCAtMykgKyAnbmVtJ1xuICAgICAgICAgICAgICAgIDogdGltZSArICcgcElxJztcbiAgICAgICAgcmV0dXJuIHRpbWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdHJhbnNsYXRlUGFzdChvdXRwdXQpIHtcbiAgICAgICAgdmFyIHRpbWUgPSBvdXRwdXQ7XG4gICAgICAgIHRpbWUgPVxuICAgICAgICAgICAgb3V0cHV0LmluZGV4T2YoJ2phaicpICE9PSAtMVxuICAgICAgICAgICAgICAgID8gdGltZS5zbGljZSgwLCAtMykgKyAnSHXigJknXG4gICAgICAgICAgICAgICAgOiBvdXRwdXQuaW5kZXhPZignamFyJykgIT09IC0xXG4gICAgICAgICAgICAgICAgPyB0aW1lLnNsaWNlKDAsIC0zKSArICd3ZW4nXG4gICAgICAgICAgICAgICAgOiBvdXRwdXQuaW5kZXhPZignRElTJykgIT09IC0xXG4gICAgICAgICAgICAgICAgPyB0aW1lLnNsaWNlKDAsIC0zKSArICdiZW4nXG4gICAgICAgICAgICAgICAgOiB0aW1lICsgJyByZXQnO1xuICAgICAgICByZXR1cm4gdGltZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0cmFuc2xhdGUobnVtYmVyLCB3aXRob3V0U3VmZml4LCBzdHJpbmcsIGlzRnV0dXJlKSB7XG4gICAgICAgIHZhciBudW1iZXJOb3VuID0gbnVtYmVyQXNOb3VuKG51bWJlcik7XG4gICAgICAgIHN3aXRjaCAoc3RyaW5nKSB7XG4gICAgICAgICAgICBjYXNlICdzcyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlck5vdW4gKyAnIGx1cCc7XG4gICAgICAgICAgICBjYXNlICdtbSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlck5vdW4gKyAnIHR1cCc7XG4gICAgICAgICAgICBjYXNlICdoaCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlck5vdW4gKyAnIHJlcCc7XG4gICAgICAgICAgICBjYXNlICdkZCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlck5vdW4gKyAnIGphaic7XG4gICAgICAgICAgICBjYXNlICdNTSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlck5vdW4gKyAnIGphcic7XG4gICAgICAgICAgICBjYXNlICd5eSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlck5vdW4gKyAnIERJUyc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBudW1iZXJBc05vdW4obnVtYmVyKSB7XG4gICAgICAgIHZhciBodW5kcmVkID0gTWF0aC5mbG9vcigobnVtYmVyICUgMTAwMCkgLyAxMDApLFxuICAgICAgICAgICAgdGVuID0gTWF0aC5mbG9vcigobnVtYmVyICUgMTAwKSAvIDEwKSxcbiAgICAgICAgICAgIG9uZSA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgd29yZCA9ICcnO1xuICAgICAgICBpZiAoaHVuZHJlZCA+IDApIHtcbiAgICAgICAgICAgIHdvcmQgKz0gbnVtYmVyc05vdW5zW2h1bmRyZWRdICsgJ3ZhdGxoJztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGVuID4gMCkge1xuICAgICAgICAgICAgd29yZCArPSAod29yZCAhPT0gJycgPyAnICcgOiAnJykgKyBudW1iZXJzTm91bnNbdGVuXSArICdtYUgnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvbmUgPiAwKSB7XG4gICAgICAgICAgICB3b3JkICs9ICh3b3JkICE9PSAnJyA/ICcgJyA6ICcnKSArIG51bWJlcnNOb3Vuc1tvbmVdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB3b3JkID09PSAnJyA/ICdwYWdoJyA6IHdvcmQ7XG4gICAgfVxuXG4gICAgdmFyIHRsaCA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3RsaCcsIHtcbiAgICAgICAgbW9udGhzOiAndGVyYeKAmSBqYXIgd2HigJlfdGVyYeKAmSBqYXIgY2hh4oCZX3RlcmHigJkgamFyIHdlal90ZXJh4oCZIGphciBsb1NfdGVyYeKAmSBqYXIgdmFnaF90ZXJh4oCZIGphciBqYXZfdGVyYeKAmSBqYXIgU29jaF90ZXJh4oCZIGphciBjaG9yZ2hfdGVyYeKAmSBqYXIgSHV0X3RlcmHigJkgamFyIHdh4oCZbWFIX3RlcmHigJkgamFyIHdh4oCZbWFIIHdh4oCZX3RlcmHigJkgamFyIHdh4oCZbWFIIGNoYeKAmScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAnamFyIHdh4oCZX2phciBjaGHigJlfamFyIHdlal9qYXIgbG9TX2phciB2YWdoX2phciBqYXZfamFyIFNvY2hfamFyIGNob3JnaF9qYXIgSHV0X2phciB3YeKAmW1hSF9qYXIgd2HigJltYUggd2HigJlfamFyIHdh4oCZbWFIIGNoYeKAmScuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czogJ2xvam1JdGphal9EYVNqYWpfcG92amFqX2doSXRsaGphal9sb2doamFqX2J1cWphal9naEluamFqJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OlxuICAgICAgICAgICAgJ2xvam1JdGphal9EYVNqYWpfcG92amFqX2doSXRsaGphal9sb2doamFqX2J1cWphal9naEluamFqJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjpcbiAgICAgICAgICAgICdsb2ptSXRqYWpfRGFTamFqX3Bvdmphal9naEl0bGhqYWpfbG9naGphal9idXFqYWpfZ2hJbmphaicuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tEYUhqYWpdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbd2HigJlsZVNdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnTExMJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbd2HigJlIdeKAmV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdMTEwnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6IHRyYW5zbGF0ZUZ1dHVyZSxcbiAgICAgICAgICAgIHBhc3Q6IHRyYW5zbGF0ZVBhc3QsXG4gICAgICAgICAgICBzOiAncHVTIGx1cCcsXG4gICAgICAgICAgICBzczogdHJhbnNsYXRlLFxuICAgICAgICAgICAgbTogJ3dh4oCZIHR1cCcsXG4gICAgICAgICAgICBtbTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgaDogJ3dh4oCZIHJlcCcsXG4gICAgICAgICAgICBoaDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgZDogJ3dh4oCZIGphaicsXG4gICAgICAgICAgICBkZDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgTTogJ3dh4oCZIGphcicsXG4gICAgICAgICAgICBNTTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgeTogJ3dh4oCZIERJUycsXG4gICAgICAgICAgICB5eTogdHJhbnNsYXRlLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsOiAnJWQuJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRsaDtcblxufSkpKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/tlh.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/tr.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/tr.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Turkish [tr]\n//! authors : Erhan Gundogan : https://github.com/erhangundogan,\n//!           Burak Yiğit Kaya: https://github.com/BYK\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var suffixes = {\n        1: \"'inci\",\n        5: \"'inci\",\n        8: \"'inci\",\n        70: \"'inci\",\n        80: \"'inci\",\n        2: \"'nci\",\n        7: \"'nci\",\n        20: \"'nci\",\n        50: \"'nci\",\n        3: \"'üncü\",\n        4: \"'üncü\",\n        100: \"'üncü\",\n        6: \"'ncı\",\n        9: \"'uncu\",\n        10: \"'uncu\",\n        30: \"'uncu\",\n        60: \"'ıncı\",\n        90: \"'ıncı\",\n    };\n\n    var tr = moment.defineLocale('tr', {\n        months: 'Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık'.split(\n            '_'\n        ),\n        monthsShort: 'Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara'.split('_'),\n        weekdays: 'Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi'.split(\n            '_'\n        ),\n        weekdaysShort: 'Paz_Pzt_Sal_Çar_Per_Cum_Cmt'.split('_'),\n        weekdaysMin: 'Pz_Pt_Sa_Ça_Pe_Cu_Ct'.split('_'),\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 12) {\n                return isLower ? 'öö' : 'ÖÖ';\n            } else {\n                return isLower ? 'ös' : 'ÖS';\n            }\n        },\n        meridiemParse: /öö|ÖÖ|ös|ÖS/,\n        isPM: function (input) {\n            return input === 'ös' || input === 'ÖS';\n        },\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[bugün saat] LT',\n            nextDay: '[yarın saat] LT',\n            nextWeek: '[gelecek] dddd [saat] LT',\n            lastDay: '[dün] LT',\n            lastWeek: '[geçen] dddd [saat] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s sonra',\n            past: '%s önce',\n            s: 'birkaç saniye',\n            ss: '%d saniye',\n            m: 'bir dakika',\n            mm: '%d dakika',\n            h: 'bir saat',\n            hh: '%d saat',\n            d: 'bir gün',\n            dd: '%d gün',\n            w: 'bir hafta',\n            ww: '%d hafta',\n            M: 'bir ay',\n            MM: '%d ay',\n            y: 'bir yıl',\n            yy: '%d yıl',\n        },\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'Do':\n                case 'DD':\n                    return number;\n                default:\n                    if (number === 0) {\n                        // special case for zero\n                        return number + \"'ıncı\";\n                    }\n                    var a = number % 10,\n                        b = (number % 100) - a,\n                        c = number >= 100 ? 100 : null;\n                    return number + (suffixes[a] || suffixes[b] || suffixes[c]);\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return tr;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90ci5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsa0RBQVc7QUFDckUsR0FBRyxDQUNzQjtBQUN6QixDQUFDLDRCQUE0Qjs7QUFFN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RyLmpzPzMzOWMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFR1cmtpc2ggW3RyXVxuLy8hIGF1dGhvcnMgOiBFcmhhbiBHdW5kb2dhbiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9lcmhhbmd1bmRvZ2FuLFxuLy8hICAgICAgICAgICBCdXJhayBZacSfaXQgS2F5YTogaHR0cHM6Ly9naXRodWIuY29tL0JZS1xuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHN1ZmZpeGVzID0ge1xuICAgICAgICAxOiBcIidpbmNpXCIsXG4gICAgICAgIDU6IFwiJ2luY2lcIixcbiAgICAgICAgODogXCInaW5jaVwiLFxuICAgICAgICA3MDogXCInaW5jaVwiLFxuICAgICAgICA4MDogXCInaW5jaVwiLFxuICAgICAgICAyOiBcIiduY2lcIixcbiAgICAgICAgNzogXCInbmNpXCIsXG4gICAgICAgIDIwOiBcIiduY2lcIixcbiAgICAgICAgNTA6IFwiJ25jaVwiLFxuICAgICAgICAzOiBcIifDvG5jw7xcIixcbiAgICAgICAgNDogXCInw7xuY8O8XCIsXG4gICAgICAgIDEwMDogXCInw7xuY8O8XCIsXG4gICAgICAgIDY6IFwiJ25jxLFcIixcbiAgICAgICAgOTogXCIndW5jdVwiLFxuICAgICAgICAxMDogXCIndW5jdVwiLFxuICAgICAgICAzMDogXCIndW5jdVwiLFxuICAgICAgICA2MDogXCInxLFuY8SxXCIsXG4gICAgICAgIDkwOiBcIifEsW5jxLFcIixcbiAgICB9O1xuXG4gICAgdmFyIHRyID0gbW9tZW50LmRlZmluZUxvY2FsZSgndHInLCB7XG4gICAgICAgIG1vbnRoczogJ09jYWtfxZ51YmF0X01hcnRfTmlzYW5fTWF5xLFzX0hhemlyYW5fVGVtbXV6X0HEn3VzdG9zX0V5bMO8bF9Fa2ltX0thc8SxbV9BcmFsxLFrJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ09jYV/FnnViX01hcl9OaXNfTWF5X0hhel9UZW1fQcSfdV9FeWxfRWtpX0thc19BcmEnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAnUGF6YXJfUGF6YXJ0ZXNpX1NhbMSxX8OHYXLFn2FtYmFfUGVyxZ9lbWJlX0N1bWFfQ3VtYXJ0ZXNpJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnUGF6X1B6dF9TYWxfw4dhcl9QZXJfQ3VtX0NtdCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdQel9QdF9TYV/Dh2FfUGVfQ3VfQ3QnLnNwbGl0KCdfJyksXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91cnMsIG1pbnV0ZXMsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VycyA8IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyAnw7bDticgOiAnw5bDlic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBpc0xvd2VyID8gJ8O2cycgOiAnw5ZTJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL8O2w7Z8w5bDlnzDtnN8w5ZTLyxcbiAgICAgICAgaXNQTTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQgPT09ICfDtnMnIHx8IGlucHV0ID09PSAnw5ZTJztcbiAgICAgICAgfSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tidWfDvG4gc2FhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1t5YXLEsW4gc2FhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdbZ2VsZWNla10gZGRkZCBbc2FhdF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tkw7xuXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1tnZcOnZW5dIGRkZGQgW3NhYXRdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMgc29ucmEnLFxuICAgICAgICAgICAgcGFzdDogJyVzIMO2bmNlJyxcbiAgICAgICAgICAgIHM6ICdiaXJrYcOnIHNhbml5ZScsXG4gICAgICAgICAgICBzczogJyVkIHNhbml5ZScsXG4gICAgICAgICAgICBtOiAnYmlyIGRha2lrYScsXG4gICAgICAgICAgICBtbTogJyVkIGRha2lrYScsXG4gICAgICAgICAgICBoOiAnYmlyIHNhYXQnLFxuICAgICAgICAgICAgaGg6ICclZCBzYWF0JyxcbiAgICAgICAgICAgIGQ6ICdiaXIgZ8O8bicsXG4gICAgICAgICAgICBkZDogJyVkIGfDvG4nLFxuICAgICAgICAgICAgdzogJ2JpciBoYWZ0YScsXG4gICAgICAgICAgICB3dzogJyVkIGhhZnRhJyxcbiAgICAgICAgICAgIE06ICdiaXIgYXknLFxuICAgICAgICAgICAgTU06ICclZCBheScsXG4gICAgICAgICAgICB5OiAnYmlyIHnEsWwnLFxuICAgICAgICAgICAgeXk6ICclZCB5xLFsJyxcbiAgICAgICAgfSxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlciwgcGVyaW9kKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHBlcmlvZCkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0QnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0RvJzpcbiAgICAgICAgICAgICAgICBjYXNlICdERCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3BlY2lhbCBjYXNlIGZvciB6ZXJvXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgXCInxLFuY8SxXCI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGIgPSAobnVtYmVyICUgMTAwKSAtIGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBjID0gbnVtYmVyID49IDEwMCA/IDEwMCA6IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAoc3VmZml4ZXNbYV0gfHwgc3VmZml4ZXNbYl0gfHwgc3VmZml4ZXNbY10pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA3LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA3dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdHI7XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/tr.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/tzl.js":
/*!*******************************************!*\
  !*** ./node_modules/moment/locale/tzl.js ***!
  \*******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Talossan [tzl]\n//! author : Robin van der Vliet : https://github.com/robin0van0der0v\n//! author : Iustì Canun\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    // After the year there should be a slash and the amount of years since December 26, 1979 in Roman numerals.\n    // This is currently too difficult (maybe even impossible) to add.\n    var tzl = moment.defineLocale('tzl', {\n        months: 'Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec'.split('_'),\n        weekdays: 'Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi'.split('_'),\n        weekdaysShort: 'Súl_Lún_Mai_Már_Xhú_Vié_Sát'.split('_'),\n        weekdaysMin: 'Sú_Lú_Ma_Má_Xh_Vi_Sá'.split('_'),\n        longDateFormat: {\n            LT: 'HH.mm',\n            LTS: 'HH.mm.ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM [dallas] YYYY',\n            LLL: 'D. MMMM [dallas] YYYY HH.mm',\n            LLLL: 'dddd, [li] D. MMMM [dallas] YYYY HH.mm',\n        },\n        meridiemParse: /d\\'o|d\\'a/i,\n        isPM: function (input) {\n            return \"d'o\" === input.toLowerCase();\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours > 11) {\n                return isLower ? \"d'o\" : \"D'O\";\n            } else {\n                return isLower ? \"d'a\" : \"D'A\";\n            }\n        },\n        calendar: {\n            sameDay: '[oxhi à] LT',\n            nextDay: '[demà à] LT',\n            nextWeek: 'dddd [à] LT',\n            lastDay: '[ieiri à] LT',\n            lastWeek: '[sür el] dddd [lasteu à] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'osprei %s',\n            past: 'ja%s',\n            s: processRelativeTime,\n            ss: processRelativeTime,\n            m: processRelativeTime,\n            mm: processRelativeTime,\n            h: processRelativeTime,\n            hh: processRelativeTime,\n            d: processRelativeTime,\n            dd: processRelativeTime,\n            M: processRelativeTime,\n            MM: processRelativeTime,\n            y: processRelativeTime,\n            yy: processRelativeTime,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            s: ['viensas secunds', \"'iensas secunds\"],\n            ss: [number + ' secunds', '' + number + ' secunds'],\n            m: [\"'n míut\", \"'iens míut\"],\n            mm: [number + ' míuts', '' + number + ' míuts'],\n            h: [\"'n þora\", \"'iensa þora\"],\n            hh: [number + ' þoras', '' + number + ' þoras'],\n            d: [\"'n ziua\", \"'iensa ziua\"],\n            dd: [number + ' ziuas', '' + number + ' ziuas'],\n            M: [\"'n mes\", \"'iens mes\"],\n            MM: [number + ' mesen', '' + number + ' mesen'],\n            y: [\"'n ar\", \"'iens ar\"],\n            yy: [number + ' ars', '' + number + ' ars'],\n        };\n        return isFuture\n            ? format[key][0]\n            : withoutSuffix\n            ? format[key][0]\n            : format[key][1];\n    }\n\n    return tzl;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90emwuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxvQ0FBb0MsSUFBSTtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdHpsLmpzP2M0MjUiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFRhbG9zc2FuIFt0emxdXG4vLyEgYXV0aG9yIDogUm9iaW4gdmFuIGRlciBWbGlldCA6IGh0dHBzOi8vZ2l0aHViLmNvbS9yb2JpbjB2YW4wZGVyMHZcbi8vISBhdXRob3IgOiBJdXN0w6wgQ2FudW5cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIC8vIEFmdGVyIHRoZSB5ZWFyIHRoZXJlIHNob3VsZCBiZSBhIHNsYXNoIGFuZCB0aGUgYW1vdW50IG9mIHllYXJzIHNpbmNlIERlY2VtYmVyIDI2LCAxOTc5IGluIFJvbWFuIG51bWVyYWxzLlxuICAgIC8vIFRoaXMgaXMgY3VycmVudGx5IHRvbyBkaWZmaWN1bHQgKG1heWJlIGV2ZW4gaW1wb3NzaWJsZSkgdG8gYWRkLlxuICAgIHZhciB0emwgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd0emwnLCB7XG4gICAgICAgIG1vbnRoczogJ0phbnVhcl9GZXZyYWdsaF9NYXLDp19BdnLDr3VfTWFpX0fDvG5fSnVsaWFfR3VzY2h0X1NldGVtdmFyX0xpc3RvcMOkdHNfTm9lbXZhcl9aZWNlbXZhcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdKYW5fRmV2X01hcl9BdnJfTWFpX0fDvG5fSnVsX0d1c19TZXRfTGlzX05vZV9aZWMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAnU8O6bGFkaV9Mw7puZcOnaV9NYWl0emlfTcOhcmN1cmlfWGjDumFkaV9WacOpbmVyw6dpX1PDoXR1cmknLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdTw7psX0zDum5fTWFpX03DoXJfWGjDul9WacOpX1PDoXQnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnU8O6X0zDul9NYV9Nw6FfWGhfVmlfU8OhJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISC5tbScsXG4gICAgICAgICAgICBMVFM6ICdISC5tbS5zcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QuIE1NTU0gW2RhbGxhc10gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdELiBNTU1NIFtkYWxsYXNdIFlZWVkgSEgubW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIFtsaV0gRC4gTU1NTSBbZGFsbGFzXSBZWVlZIEhILm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL2RcXCdvfGRcXCdhL2ksXG4gICAgICAgIGlzUE06IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIFwiZCdvXCIgPT09IGlucHV0LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91cnMsIG1pbnV0ZXMsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VycyA+IDExKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyBcImQnb1wiIDogXCJEJ09cIjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyBcImQnYVwiIDogXCJEJ0FcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbb3hoaSDDoF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tkZW3DoCDDoF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFvDoF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tpZWlyaSDDoF0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbc8O8ciBlbF0gZGRkZCBbbGFzdGV1IMOgXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ29zcHJlaSAlcycsXG4gICAgICAgICAgICBwYXN0OiAnamElcycsXG4gICAgICAgICAgICBzOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgc3M6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBtOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgbW06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBoOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgaGg6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBkOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgZGQ6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBNOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgTU06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICB5OiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgeXk6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWw6ICclZC4nLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBwcm9jZXNzUmVsYXRpdmVUaW1lKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5LCBpc0Z1dHVyZSkge1xuICAgICAgICB2YXIgZm9ybWF0ID0ge1xuICAgICAgICAgICAgczogWyd2aWVuc2FzIHNlY3VuZHMnLCBcIidpZW5zYXMgc2VjdW5kc1wiXSxcbiAgICAgICAgICAgIHNzOiBbbnVtYmVyICsgJyBzZWN1bmRzJywgJycgKyBudW1iZXIgKyAnIHNlY3VuZHMnXSxcbiAgICAgICAgICAgIG06IFtcIiduIG3DrXV0XCIsIFwiJ2llbnMgbcOtdXRcIl0sXG4gICAgICAgICAgICBtbTogW251bWJlciArICcgbcOtdXRzJywgJycgKyBudW1iZXIgKyAnIG3DrXV0cyddLFxuICAgICAgICAgICAgaDogW1wiJ24gw75vcmFcIiwgXCInaWVuc2Egw75vcmFcIl0sXG4gICAgICAgICAgICBoaDogW251bWJlciArICcgw75vcmFzJywgJycgKyBudW1iZXIgKyAnIMO+b3JhcyddLFxuICAgICAgICAgICAgZDogW1wiJ24geml1YVwiLCBcIidpZW5zYSB6aXVhXCJdLFxuICAgICAgICAgICAgZGQ6IFtudW1iZXIgKyAnIHppdWFzJywgJycgKyBudW1iZXIgKyAnIHppdWFzJ10sXG4gICAgICAgICAgICBNOiBbXCInbiBtZXNcIiwgXCInaWVucyBtZXNcIl0sXG4gICAgICAgICAgICBNTTogW251bWJlciArICcgbWVzZW4nLCAnJyArIG51bWJlciArICcgbWVzZW4nXSxcbiAgICAgICAgICAgIHk6IFtcIiduIGFyXCIsIFwiJ2llbnMgYXJcIl0sXG4gICAgICAgICAgICB5eTogW251bWJlciArICcgYXJzJywgJycgKyBudW1iZXIgKyAnIGFycyddLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gaXNGdXR1cmVcbiAgICAgICAgICAgID8gZm9ybWF0W2tleV1bMF1cbiAgICAgICAgICAgIDogd2l0aG91dFN1ZmZpeFxuICAgICAgICAgICAgPyBmb3JtYXRba2V5XVswXVxuICAgICAgICAgICAgOiBmb3JtYXRba2V5XVsxXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHpsO1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/tzl.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/tzm-latn.js":
/*!************************************************!*\
  !*** ./node_modules/moment/locale/tzm-latn.js ***!
  \************************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Central Atlas Tamazight Latin [tzm-latn]\n//! author : Abdel Said : https://github.com/abdelsaid\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var tzmLatn = moment.defineLocale('tzm-latn', {\n        months: 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split(\n            '_'\n        ),\n        monthsShort:\n            'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split(\n                '_'\n            ),\n        weekdays: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n        weekdaysShort: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n        weekdaysMin: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[asdkh g] LT',\n            nextDay: '[aska g] LT',\n            nextWeek: 'dddd [g] LT',\n            lastDay: '[assant g] LT',\n            lastWeek: 'dddd [g] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'dadkh s yan %s',\n            past: 'yan %s',\n            s: 'imik',\n            ss: '%d imik',\n            m: 'minuḍ',\n            mm: '%d minuḍ',\n            h: 'saɛa',\n            hh: '%d tassaɛin',\n            d: 'ass',\n            dd: '%d ossan',\n            M: 'ayowr',\n            MM: '%d iyyirn',\n            y: 'asgas',\n            yy: '%d isgasn',\n        },\n        week: {\n            dow: 6, // Saturday is the first day of the week.\n            doy: 12, // The week that contains Jan 12th is the first week of the year.\n        },\n    });\n\n    return tzmLatn;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90em0tbGF0bi5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3R6bS1sYXRuLmpzP2MxNWUiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IENlbnRyYWwgQXRsYXMgVGFtYXppZ2h0IExhdGluIFt0em0tbGF0bl1cbi8vISBhdXRob3IgOiBBYmRlbCBTYWlkIDogaHR0cHM6Ly9naXRodWIuY29tL2FiZGVsc2FpZFxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHR6bUxhdG4gPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd0em0tbGF0bicsIHtcbiAgICAgICAgbW9udGhzOiAnaW5uYXlyX2Jyy6RheXLLpF9tYXLLpHPLpF9pYnJpcl9tYXl5d195d255d195d2x5d3pfyaN3xaF0X8Whd3RhbmJpcl9rdMukd2Jyy6Rfbnd3YW5iaXJfZHdqbmJpcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAnaW5uYXlyX2Jyy6RheXLLpF9tYXLLpHPLpF9pYnJpcl9tYXl5d195d255d195d2x5d3pfyaN3xaF0X8Whd3RhbmJpcl9rdMukd2Jyy6Rfbnd3YW5iaXJfZHdqbmJpcicuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5czogJ2FzYW1hc19heW5hc19hc2luYXNfYWtyYXNfYWt3YXNfYXNpbXdhc19hc2nhuI15YXMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdhc2FtYXNfYXluYXNfYXNpbmFzX2FrcmFzX2Frd2FzX2FzaW13YXNfYXNp4biNeWFzJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ2FzYW1hc19heW5hc19hc2luYXNfYWtyYXNfYWt3YXNfYXNpbXdhc19hc2nhuI15YXMnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1thc2RraCBnXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW2Fza2EgZ10gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFtnXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW2Fzc2FudCBnXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW2ddIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnZGFka2ggcyB5YW4gJXMnLFxuICAgICAgICAgICAgcGFzdDogJ3lhbiAlcycsXG4gICAgICAgICAgICBzOiAnaW1paycsXG4gICAgICAgICAgICBzczogJyVkIGltaWsnLFxuICAgICAgICAgICAgbTogJ21pbnXhuI0nLFxuICAgICAgICAgICAgbW06ICclZCBtaW514biNJyxcbiAgICAgICAgICAgIGg6ICdzYcmbYScsXG4gICAgICAgICAgICBoaDogJyVkIHRhc3NhyZtpbicsXG4gICAgICAgICAgICBkOiAnYXNzJyxcbiAgICAgICAgICAgIGRkOiAnJWQgb3NzYW4nLFxuICAgICAgICAgICAgTTogJ2F5b3dyJyxcbiAgICAgICAgICAgIE1NOiAnJWQgaXl5aXJuJyxcbiAgICAgICAgICAgIHk6ICdhc2dhcycsXG4gICAgICAgICAgICB5eTogJyVkIGlzZ2FzbicsXG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogNiwgLy8gU2F0dXJkYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogMTIsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDEydGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdHptTGF0bjtcblxufSkpKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/tzm-latn.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/tzm.js":
/*!*******************************************!*\
  !*** ./node_modules/moment/locale/tzm.js ***!
  \*******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Central Atlas Tamazight [tzm]\n//! author : Abdel Said : https://github.com/abdelsaid\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var tzm = moment.defineLocale('tzm', {\n        months: 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split(\n            '_'\n        ),\n        monthsShort:\n            'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split(\n                '_'\n            ),\n        weekdays: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n        weekdaysShort: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n        weekdaysMin: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[ⴰⵙⴷⵅ ⴴ] LT',\n            nextDay: '[ⴰⵙⴽⴰ ⴴ] LT',\n            nextWeek: 'dddd [ⴴ] LT',\n            lastDay: '[ⴰⵚⴰⵏⵜ ⴴ] LT',\n            lastWeek: 'dddd [ⴴ] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s',\n            past: 'ⵢⴰⵏ %s',\n            s: 'ⵉⵎⵉⴽ',\n            ss: '%d ⵉⵎⵉⴽ',\n            m: 'ⵎⵉⵏⵓⴺ',\n            mm: '%d ⵎⵉⵏⵓⴺ',\n            h: 'ⵙⴰⵄⴰ',\n            hh: '%d ⵜⴰⵙⵙⴰⵄⵉⵏ',\n            d: 'ⴰⵙⵙ',\n            dd: '%d oⵙⵙⴰⵏ',\n            M: 'ⴰⵢoⵓⵔ',\n            MM: '%d ⵉⵢⵢⵉⵔⵏ',\n            y: 'ⴰⵙⴳⴰⵙ',\n            yy: '%d ⵉⵙⴳⴰⵙⵏ',\n        },\n        week: {\n            dow: 6, // Saturday is the first day of the week.\n            doy: 12, // The week that contains Jan 12th is the first week of the year.\n        },\n    });\n\n    return tzm;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90em0uanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxrREFBVztBQUNyRSxHQUFHLENBQ3NCO0FBQ3pCLENBQUMsNEJBQTRCOztBQUU3Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90em0uanM/ZDc2YSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogQ2VudHJhbCBBdGxhcyBUYW1hemlnaHQgW3R6bV1cbi8vISBhdXRob3IgOiBBYmRlbCBTYWlkIDogaHR0cHM6Ly9naXRodWIuY29tL2FiZGVsc2FpZFxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHR6bSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3R6bScsIHtcbiAgICAgICAgbW9udGhzOiAn4rWJ4rWP4rWP4rSw4rWi4rWUX+K0seK1leK0sOK1ouK1lV/itY7itLDitZXitZpf4rWJ4rSx4rWU4rWJ4rWUX+K1juK0sOK1ouK1ouK1k1/itaLitZPitY/itaLitZNf4rWi4rWT4rWN4rWi4rWT4rWjX+K1luK1k+K1m+K1nF/itZvitZPitZzitLDitY/itLHitYnitZRf4rS94rWf4rWT4rSx4rWVX+K1j+K1k+K1oeK0sOK1j+K0seK1ieK1lF/itLfitZPitYritY/itLHitYnitZQnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ+K1ieK1j+K1j+K0sOK1ouK1lF/itLHitZXitLDitaLitZVf4rWO4rSw4rWV4rWaX+K1ieK0seK1lOK1ieK1lF/itY7itLDitaLitaLitZNf4rWi4rWT4rWP4rWi4rWTX+K1ouK1k+K1jeK1ouK1k+K1o1/itZbitZPitZvitZxf4rWb4rWT4rWc4rSw4rWP4rSx4rWJ4rWUX+K0veK1n+K1k+K0seK1lV/itY/itZPitaHitLDitY/itLHitYnitZRf4rS34rWT4rWK4rWP4rSx4rWJ4rWUJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzOiAn4rSw4rWZ4rSw4rWO4rSw4rWZX+K0sOK1ouK1j+K0sOK1mV/itLDitZnitYnitY/itLDitZlf4rSw4rS94rWU4rSw4rWZX+K0sOK0veK1oeK0sOK1mV/itLDitZnitYnitY7itaHitLDitZlf4rSw4rWZ4rWJ4rS54rWi4rSw4rWZJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn4rSw4rWZ4rSw4rWO4rSw4rWZX+K0sOK1ouK1j+K0sOK1mV/itLDitZnitYnitY/itLDitZlf4rSw4rS94rWU4rSw4rWZX+K0sOK0veK1oeK0sOK1mV/itLDitZnitYnitY7itaHitLDitZlf4rSw4rWZ4rWJ4rS54rWi4rSw4rWZJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ+K0sOK1meK0sOK1juK0sOK1mV/itLDitaLitY/itLDitZlf4rSw4rWZ4rWJ4rWP4rSw4rWZX+K0sOK0veK1lOK0sOK1mV/itLDitL3itaHitLDitZlf4rSw4rWZ4rWJ4rWO4rWh4rSw4rWZX+K0sOK1meK1ieK0ueK1ouK0sOK1mScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW+K0sOK1meK0t+K1hSDitLRdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb4rSw4rWZ4rS94rSwIOK0tF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFvitLRdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb4rSw4rWa4rSw4rWP4rWcIOK0tF0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFvitLRdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAn4rS34rSw4rS34rWFIOK1mSDitaLitLDitY8gJXMnLFxuICAgICAgICAgICAgcGFzdDogJ+K1ouK0sOK1jyAlcycsXG4gICAgICAgICAgICBzOiAn4rWJ4rWO4rWJ4rS9JyxcbiAgICAgICAgICAgIHNzOiAnJWQg4rWJ4rWO4rWJ4rS9JyxcbiAgICAgICAgICAgIG06ICfitY7itYnitY/itZPitLonLFxuICAgICAgICAgICAgbW06ICclZCDitY7itYnitY/itZPitLonLFxuICAgICAgICAgICAgaDogJ+K1meK0sOK1hOK0sCcsXG4gICAgICAgICAgICBoaDogJyVkIOK1nOK0sOK1meK1meK0sOK1hOK1ieK1jycsXG4gICAgICAgICAgICBkOiAn4rSw4rWZ4rWZJyxcbiAgICAgICAgICAgIGRkOiAnJWQgb+K1meK1meK0sOK1jycsXG4gICAgICAgICAgICBNOiAn4rSw4rWib+K1k+K1lCcsXG4gICAgICAgICAgICBNTTogJyVkIOK1ieK1ouK1ouK1ieK1lOK1jycsXG4gICAgICAgICAgICB5OiAn4rSw4rWZ4rSz4rSw4rWZJyxcbiAgICAgICAgICAgIHl5OiAnJWQg4rWJ4rWZ4rSz4rSw4rWZ4rWPJyxcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiA2LCAvLyBTYXR1cmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiAxMiwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gMTJ0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiB0em07XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/tzm.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/ug-cn.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/ug-cn.js ***!
  \*********************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Uyghur (China) [ug-cn]\n//! author: boyaq : https://github.com/boyaq\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var ugCn = moment.defineLocale('ug-cn', {\n        months: 'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split(\n            '_'\n        ),\n        monthsShort:\n            'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split(\n                '_'\n            ),\n        weekdays: 'يەكشەنبە_دۈشەنبە_سەيشەنبە_چارشەنبە_پەيشەنبە_جۈمە_شەنبە'.split(\n            '_'\n        ),\n        weekdaysShort: 'يە_دۈ_سە_چا_پە_جۈ_شە'.split('_'),\n        weekdaysMin: 'يە_دۈ_سە_چا_پە_جۈ_شە'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY-MM-DD',\n            LL: 'YYYY-يىلىM-ئاينىڭD-كۈنى',\n            LLL: 'YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm',\n            LLLL: 'dddd، YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm',\n        },\n        meridiemParse: /يېرىم كېچە|سەھەر|چۈشتىن بۇرۇن|چۈش|چۈشتىن كېيىن|كەچ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (\n                meridiem === 'يېرىم كېچە' ||\n                meridiem === 'سەھەر' ||\n                meridiem === 'چۈشتىن بۇرۇن'\n            ) {\n                return hour;\n            } else if (meridiem === 'چۈشتىن كېيىن' || meridiem === 'كەچ') {\n                return hour + 12;\n            } else {\n                return hour >= 11 ? hour : hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            var hm = hour * 100 + minute;\n            if (hm < 600) {\n                return 'يېرىم كېچە';\n            } else if (hm < 900) {\n                return 'سەھەر';\n            } else if (hm < 1130) {\n                return 'چۈشتىن بۇرۇن';\n            } else if (hm < 1230) {\n                return 'چۈش';\n            } else if (hm < 1800) {\n                return 'چۈشتىن كېيىن';\n            } else {\n                return 'كەچ';\n            }\n        },\n        calendar: {\n            sameDay: '[بۈگۈن سائەت] LT',\n            nextDay: '[ئەتە سائەت] LT',\n            nextWeek: '[كېلەركى] dddd [سائەت] LT',\n            lastDay: '[تۆنۈگۈن] LT',\n            lastWeek: '[ئالدىنقى] dddd [سائەت] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s كېيىن',\n            past: '%s بۇرۇن',\n            s: 'نەچچە سېكونت',\n            ss: '%d سېكونت',\n            m: 'بىر مىنۇت',\n            mm: '%d مىنۇت',\n            h: 'بىر سائەت',\n            hh: '%d سائەت',\n            d: 'بىر كۈن',\n            dd: '%d كۈن',\n            M: 'بىر ئاي',\n            MM: '%d ئاي',\n            y: 'بىر يىل',\n            yy: '%d يىل',\n        },\n\n        dayOfMonthOrdinalParse: /\\d{1,2}(-كۈنى|-ئاي|-ھەپتە)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '-كۈنى';\n                case 'w':\n                case 'W':\n                    return number + '-ھەپتە';\n                default:\n                    return number;\n            }\n        },\n        preparse: function (string) {\n            return string.replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/,/g, '،');\n        },\n        week: {\n            // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 1st is the first week of the year.\n        },\n    });\n\n    return ugCn;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS91Zy1jbi5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVCxvQ0FBb0MsSUFBSTtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3VnLWNuLmpzP2ExMTgiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFV5Z2h1ciAoQ2hpbmEpIFt1Zy1jbl1cbi8vISBhdXRob3I6IGJveWFxIDogaHR0cHM6Ly9naXRodWIuY29tL2JveWFxXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgdWdDbiA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3VnLWNuJywge1xuICAgICAgICBtb250aHM6ICfZitin2Ybbi9in2LFf2YHbkNuL2LHYp9mEX9mF2KfYsdiqX9im2KfZvtix25DZhF/Zhdin2Ypf2KbZidmK24fZhl/YptmJ2Yrbh9mEX9im2Kfbi9i624fYs9iqX9iz25DZhtiq25XYqNmJ2LFf2KbbhtmD2Krbldio2YnYsV/ZhtmI2YrYp9io2YnYsV/Yr9uQ2YPYp9io2YnYsScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAn2YrYp9mG24vYp9ixX9mB25Dbi9ix2KfZhF/Zhdin2LHYql/Yptin2b7YsduQ2YRf2YXYp9mKX9im2YnZituH2YZf2KbZidmK24fZhF/Yptin24vYutuH2LPYql/Ys9uQ2YbYqtuV2KjZidixX9im24bZg9iq25XYqNmJ2LFf2YbZiNmK2KfYqNmJ2LFf2K/bkNmD2KfYqNmJ2LEnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXM6ICfZituV2YPYtNuV2YbYqNuVX9iv24jYtNuV2YbYqNuVX9iz25XZiti025XZhtio25Vf2obYp9ix2LTbldmG2KjblV/ZvtuV2YrYtNuV2YbYqNuVX9is24jZhduVX9i025XZhtio25UnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfZituVX9iv24hf2LPblV/ahtinX9m+25Vf2KzbiF/YtNuVJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ9mK25Vf2K/biF/Ys9uVX9qG2Kdf2b7blV/YrNuIX9i025UnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdZWVlZLU1NLUREJyxcbiAgICAgICAgICAgIExMOiAnWVlZWS3ZitmJ2YTZiU0t2KbYp9mK2YbZidqtRC3Zg9uI2YbZiScsXG4gICAgICAgICAgICBMTEw6ICdZWVlZLdmK2YnZhNmJTS3Yptin2YrZhtmJ2q1ELdmD24jZhtmJ2IwgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGTYjCBZWVlZLdmK2YnZhNmJTS3Yptin2YrZhtmJ2q1ELdmD24jZhtmJ2IwgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv2YrbkNix2YnZhSDZg9uQ2obblXzYs9uV2r7bldixfNqG24jYtNiq2YnZhiDYqNuH2LHbh9mGfNqG24jYtHzahtuI2LTYqtmJ2YYg2YPbkNmK2YnZhnzZg9uV2oYvLFxuICAgICAgICBtZXJpZGllbUhvdXI6IGZ1bmN0aW9uIChob3VyLCBtZXJpZGllbSkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPT09ICfZituQ2LHZidmFINmD25DahtuVJyB8fFxuICAgICAgICAgICAgICAgIG1lcmlkaWVtID09PSAn2LPbldq+25XYsScgfHxcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9PT0gJ9qG24jYtNiq2YnZhiDYqNuH2LHbh9mGJ1xuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn2obbiNi02KrZidmGINmD25DZitmJ2YYnIHx8IG1lcmlkaWVtID09PSAn2YPbldqGJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyID49IDExID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIHZhciBobSA9IGhvdXIgKiAxMDAgKyBtaW51dGU7XG4gICAgICAgICAgICBpZiAoaG0gPCA2MDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9mK25DYsdmJ2YUg2YPbkNqG25UnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChobSA8IDkwMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn2LPbldq+25XYsSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhtIDwgMTEzMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn2obbiNi02KrZidmGINio24fYsduH2YYnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChobSA8IDEyMzApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9qG24jYtCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhtIDwgMTgwMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn2obbiNi02KrZidmGINmD25DZitmJ2YYnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9mD25Xahic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW9io24jar9uI2YYg2LPYp9im25XYql0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vYptuV2KrblSDYs9in2KbbldiqXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ1vZg9uQ2YTbldix2YPZiV0gZGRkZCBb2LPYp9im25XYql0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vYqtuG2YbbiNqv24jZhl0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdb2KbYp9mE2K/ZidmG2YLZiV0gZGRkZCBb2LPYp9im25XYql0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICclcyDZg9uQ2YrZidmGJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyDYqNuH2LHbh9mGJyxcbiAgICAgICAgICAgIHM6ICfZhtuV2obahtuVINiz25DZg9mI2YbYqicsXG4gICAgICAgICAgICBzczogJyVkINiz25DZg9mI2YbYqicsXG4gICAgICAgICAgICBtOiAn2KjZidixINmF2YnZhtuH2KonLFxuICAgICAgICAgICAgbW06ICclZCDZhdmJ2Ybbh9iqJyxcbiAgICAgICAgICAgIGg6ICfYqNmJ2LEg2LPYp9im25XYqicsXG4gICAgICAgICAgICBoaDogJyVkINiz2KfYptuV2KonLFxuICAgICAgICAgICAgZDogJ9io2YnYsSDZg9uI2YYnLFxuICAgICAgICAgICAgZGQ6ICclZCDZg9uI2YYnLFxuICAgICAgICAgICAgTTogJ9io2YnYsSDYptin2YonLFxuICAgICAgICAgICAgTU06ICclZCDYptin2YonLFxuICAgICAgICAgICAgeTogJ9io2YnYsSDZitmJ2YQnLFxuICAgICAgICAgICAgeXk6ICclZCDZitmJ2YQnLFxuICAgICAgICB9LFxuXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfSgt2YPbiNmG2Yl8Ldim2KfZinwt2r7bldm+2KrblSkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyLCBwZXJpb2QpIHtcbiAgICAgICAgICAgIHN3aXRjaCAocGVyaW9kKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnRCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnREREJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct2YPbiNmG2YknO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3cnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ1cnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3avtuV2b7YqtuVJztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBwcmVwYXJzZTogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC/YjC9nLCAnLCcpO1xuICAgICAgICB9LFxuICAgICAgICBwb3N0Zm9ybWF0OiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoLywvZywgJ9iMJyk7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIC8vIEdCL1QgNzQwOC0xOTk044CK5pWw5o2u5YWD5ZKM5Lqk5o2i5qC85byPwrfkv6Hmga/kuqTmjaLCt+aXpeacn+WSjOaXtumXtOihqOekuuazleOAi+S4jklTTyA4NjAxOjE5ODjnrYnmlYhcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDcsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDFzdCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiB1Z0NuO1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/ug-cn.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/uk.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/uk.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Ukrainian [uk]\n//! author : zemlanin : https://github.com/zemlanin\n//! Author : Menelion Elensúle : https://github.com/Oire\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function plural(word, num) {\n        var forms = word.split('_');\n        return num % 10 === 1 && num % 100 !== 11\n            ? forms[0]\n            : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20)\n            ? forms[1]\n            : forms[2];\n    }\n    function relativeTimeWithPlural(number, withoutSuffix, key) {\n        var format = {\n            ss: withoutSuffix ? 'секунда_секунди_секунд' : 'секунду_секунди_секунд',\n            mm: withoutSuffix ? 'хвилина_хвилини_хвилин' : 'хвилину_хвилини_хвилин',\n            hh: withoutSuffix ? 'година_години_годин' : 'годину_години_годин',\n            dd: 'день_дні_днів',\n            MM: 'місяць_місяці_місяців',\n            yy: 'рік_роки_років',\n        };\n        if (key === 'm') {\n            return withoutSuffix ? 'хвилина' : 'хвилину';\n        } else if (key === 'h') {\n            return withoutSuffix ? 'година' : 'годину';\n        } else {\n            return number + ' ' + plural(format[key], +number);\n        }\n    }\n    function weekdaysCaseReplace(m, format) {\n        var weekdays = {\n                nominative:\n                    'неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота'.split(\n                        '_'\n                    ),\n                accusative:\n                    'неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу'.split(\n                        '_'\n                    ),\n                genitive:\n                    'неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи'.split(\n                        '_'\n                    ),\n            },\n            nounCase;\n\n        if (m === true) {\n            return weekdays['nominative']\n                .slice(1, 7)\n                .concat(weekdays['nominative'].slice(0, 1));\n        }\n        if (!m) {\n            return weekdays['nominative'];\n        }\n\n        nounCase = /(\\[[ВвУу]\\]) ?dddd/.test(format)\n            ? 'accusative'\n            : /\\[?(?:минулої|наступної)? ?\\] ?dddd/.test(format)\n            ? 'genitive'\n            : 'nominative';\n        return weekdays[nounCase][m.day()];\n    }\n    function processHoursFunction(str) {\n        return function () {\n            return str + 'о' + (this.hours() === 11 ? 'б' : '') + '] LT';\n        };\n    }\n\n    var uk = moment.defineLocale('uk', {\n        months: {\n            format: 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split(\n                '_'\n            ),\n            standalone:\n                'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split(\n                    '_'\n                ),\n        },\n        monthsShort: 'січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд'.split(\n            '_'\n        ),\n        weekdays: weekdaysCaseReplace,\n        weekdaysShort: 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n        weekdaysMin: 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY р.',\n            LLL: 'D MMMM YYYY р., HH:mm',\n            LLLL: 'dddd, D MMMM YYYY р., HH:mm',\n        },\n        calendar: {\n            sameDay: processHoursFunction('[Сьогодні '),\n            nextDay: processHoursFunction('[Завтра '),\n            lastDay: processHoursFunction('[Вчора '),\n            nextWeek: processHoursFunction('[У] dddd ['),\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                    case 5:\n                    case 6:\n                        return processHoursFunction('[Минулої] dddd [').call(this);\n                    case 1:\n                    case 2:\n                    case 4:\n                        return processHoursFunction('[Минулого] dddd [').call(this);\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'за %s',\n            past: '%s тому',\n            s: 'декілька секунд',\n            ss: relativeTimeWithPlural,\n            m: relativeTimeWithPlural,\n            mm: relativeTimeWithPlural,\n            h: 'годину',\n            hh: relativeTimeWithPlural,\n            d: 'день',\n            dd: relativeTimeWithPlural,\n            M: 'місяць',\n            MM: relativeTimeWithPlural,\n            y: 'рік',\n            yy: relativeTimeWithPlural,\n        },\n        // M. E.: those two are virtually unused but a user might want to implement them for his/her website for some reason\n        meridiemParse: /ночі|ранку|дня|вечора/,\n        isPM: function (input) {\n            return /^(дня|вечора)$/.test(input);\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ночі';\n            } else if (hour < 12) {\n                return 'ранку';\n            } else if (hour < 17) {\n                return 'дня';\n            } else {\n                return 'вечора';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(й|го)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'M':\n                case 'd':\n                case 'DDD':\n                case 'w':\n                case 'W':\n                    return number + '-й';\n                case 'D':\n                    return number + '-го';\n                default:\n                    return number;\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return uk;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS91ay5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsa0RBQVc7QUFDckUsR0FBRyxDQUNzQjtBQUN6QixDQUFDLDRCQUE0Qjs7QUFFN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3VrLmpzP2Q1MzciXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFVrcmFpbmlhbiBbdWtdXG4vLyEgYXV0aG9yIDogemVtbGFuaW4gOiBodHRwczovL2dpdGh1Yi5jb20vemVtbGFuaW5cbi8vISBBdXRob3IgOiBNZW5lbGlvbiBFbGVuc8O6bGUgOiBodHRwczovL2dpdGh1Yi5jb20vT2lyZVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgZnVuY3Rpb24gcGx1cmFsKHdvcmQsIG51bSkge1xuICAgICAgICB2YXIgZm9ybXMgPSB3b3JkLnNwbGl0KCdfJyk7XG4gICAgICAgIHJldHVybiBudW0gJSAxMCA9PT0gMSAmJiBudW0gJSAxMDAgIT09IDExXG4gICAgICAgICAgICA/IGZvcm1zWzBdXG4gICAgICAgICAgICA6IG51bSAlIDEwID49IDIgJiYgbnVtICUgMTAgPD0gNCAmJiAobnVtICUgMTAwIDwgMTAgfHwgbnVtICUgMTAwID49IDIwKVxuICAgICAgICAgICAgPyBmb3Jtc1sxXVxuICAgICAgICAgICAgOiBmb3Jtc1syXTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVsYXRpdmVUaW1lV2l0aFBsdXJhbChudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSkge1xuICAgICAgICB2YXIgZm9ybWF0ID0ge1xuICAgICAgICAgICAgc3M6IHdpdGhvdXRTdWZmaXggPyAn0YHQtdC60YPQvdC00LBf0YHQtdC60YPQvdC00Lhf0YHQtdC60YPQvdC0JyA6ICfRgdC10LrRg9C90LTRg1/RgdC10LrRg9C90LTQuF/RgdC10LrRg9C90LQnLFxuICAgICAgICAgICAgbW06IHdpdGhvdXRTdWZmaXggPyAn0YXQstC40LvQuNC90LBf0YXQstC40LvQuNC90Lhf0YXQstC40LvQuNC9JyA6ICfRhdCy0LjQu9C40L3Rg1/RhdCy0LjQu9C40L3QuF/RhdCy0LjQu9C40L0nLFxuICAgICAgICAgICAgaGg6IHdpdGhvdXRTdWZmaXggPyAn0LPQvtC00LjQvdCwX9Cz0L7QtNC40L3QuF/Qs9C+0LTQuNC9JyA6ICfQs9C+0LTQuNC90YNf0LPQvtC00LjQvdC4X9Cz0L7QtNC40L0nLFxuICAgICAgICAgICAgZGQ6ICfQtNC10L3RjF/QtNC90ZZf0LTQvdGW0LInLFxuICAgICAgICAgICAgTU06ICfQvNGW0YHRj9GG0Yxf0LzRltGB0Y/RhtGWX9C80ZbRgdGP0YbRltCyJyxcbiAgICAgICAgICAgIHl5OiAn0YDRltC6X9GA0L7QutC4X9GA0L7QutGW0LInLFxuICAgICAgICB9O1xuICAgICAgICBpZiAoa2V5ID09PSAnbScpIHtcbiAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gJ9GF0LLQuNC70LjQvdCwJyA6ICfRhdCy0LjQu9C40L3Rgyc7XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnaCcpIHtcbiAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gJ9Cz0L7QtNC40L3QsCcgOiAn0LPQvtC00LjQvdGDJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnICcgKyBwbHVyYWwoZm9ybWF0W2tleV0sICtudW1iZXIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHdlZWtkYXlzQ2FzZVJlcGxhY2UobSwgZm9ybWF0KSB7XG4gICAgICAgIHZhciB3ZWVrZGF5cyA9IHtcbiAgICAgICAgICAgICAgICBub21pbmF0aXZlOlxuICAgICAgICAgICAgICAgICAgICAn0L3QtdC00ZbQu9GPX9C/0L7QvdC10LTRltC70L7Qul/QstGW0LLRgtC+0YDQvtC6X9GB0LXRgNC10LTQsF/Rh9C10YLQstC10YBf0L/igJnRj9GC0L3QuNGG0Y9f0YHRg9Cx0L7RgtCwJy5zcGxpdChcbiAgICAgICAgICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGFjY3VzYXRpdmU6XG4gICAgICAgICAgICAgICAgICAgICfQvdC10LTRltC70Y5f0L/QvtC90LXQtNGW0LvQvtC6X9Cy0ZbQstGC0L7RgNC+0Lpf0YHQtdGA0LXQtNGDX9GH0LXRgtCy0LXRgF/Qv+KAmdGP0YLQvdC40YbRjl/RgdGD0LHQvtGC0YMnLnNwbGl0KFxuICAgICAgICAgICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgZ2VuaXRpdmU6XG4gICAgICAgICAgICAgICAgICAgICfQvdC10LTRltC70ZZf0L/QvtC90LXQtNGW0LvQutCwX9Cy0ZbQstGC0L7RgNC60LBf0YHQtdGA0LXQtNC4X9GH0LXRgtCy0LXRgNCz0LBf0L/igJnRj9GC0L3QuNGG0ZZf0YHRg9Cx0L7RgtC4Jy5zcGxpdChcbiAgICAgICAgICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5vdW5DYXNlO1xuXG4gICAgICAgIGlmIChtID09PSB0cnVlKSB7XG4gICAgICAgICAgICByZXR1cm4gd2Vla2RheXNbJ25vbWluYXRpdmUnXVxuICAgICAgICAgICAgICAgIC5zbGljZSgxLCA3KVxuICAgICAgICAgICAgICAgIC5jb25jYXQod2Vla2RheXNbJ25vbWluYXRpdmUnXS5zbGljZSgwLCAxKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFtKSB7XG4gICAgICAgICAgICByZXR1cm4gd2Vla2RheXNbJ25vbWluYXRpdmUnXTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5vdW5DYXNlID0gLyhcXFtb0JLQstCj0YNdXFxdKSA/ZGRkZC8udGVzdChmb3JtYXQpXG4gICAgICAgICAgICA/ICdhY2N1c2F0aXZlJ1xuICAgICAgICAgICAgOiAvXFxbPyg/OtC80LjQvdGD0LvQvtGXfNC90LDRgdGC0YPQv9C90L7Rlyk/ID9cXF0gP2RkZGQvLnRlc3QoZm9ybWF0KVxuICAgICAgICAgICAgPyAnZ2VuaXRpdmUnXG4gICAgICAgICAgICA6ICdub21pbmF0aXZlJztcbiAgICAgICAgcmV0dXJuIHdlZWtkYXlzW25vdW5DYXNlXVttLmRheSgpXTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcHJvY2Vzc0hvdXJzRnVuY3Rpb24oc3RyKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyICsgJ9C+JyArICh0aGlzLmhvdXJzKCkgPT09IDExID8gJ9CxJyA6ICcnKSArICddIExUJztcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgdWsgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd1aycsIHtcbiAgICAgICAgbW9udGhzOiB7XG4gICAgICAgICAgICBmb3JtYXQ6ICfRgdGW0YfQvdGPX9C70Y7RgtC+0LPQvl/QsdC10YDQtdC30L3Rj1/QutCy0ZbRgtC90Y9f0YLRgNCw0LLQvdGPX9GH0LXRgNCy0L3Rj1/Qu9C40L/QvdGPX9GB0LXRgNC/0L3Rj1/QstC10YDQtdGB0L3Rj1/QttC+0LLRgtC90Y9f0LvQuNGB0YLQvtC/0LDQtNCwX9Cz0YDRg9C00L3Rjycuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgc3RhbmRhbG9uZTpcbiAgICAgICAgICAgICAgICAn0YHRltGH0LXQvdGMX9C70Y7RgtC40Llf0LHQtdGA0LXQt9C10L3RjF/QutCy0ZbRgtC10L3RjF/RgtGA0LDQstC10L3RjF/Rh9C10YDQstC10L3RjF/Qu9C40L/QtdC90Yxf0YHQtdGA0L/QtdC90Yxf0LLQtdGA0LXRgdC10L3RjF/QttC+0LLRgtC10L3RjF/Qu9C40YHRgtC+0L/QsNC0X9Cz0YDRg9C00LXQvdGMJy5zcGxpdChcbiAgICAgICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgfSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICfRgdGW0Ydf0LvRjtGCX9Cx0LXRgF/QutCy0ZbRgl/RgtGA0LDQsl/Rh9C10YDQsl/Qu9C40L9f0YHQtdGA0L9f0LLQtdGAX9C20L7QstGCX9C70LjRgdGCX9Cz0YDRg9C0Jy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5czogd2Vla2RheXNDYXNlUmVwbGFjZSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ9C90LRf0L/QvV/QstGCX9GB0YBf0YfRgl/Qv9GCX9GB0LEnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn0L3QtF/Qv9C9X9Cy0YJf0YHRgF/Rh9GCX9C/0YJf0YHQsScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWSDRgC4nLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkg0YAuLCBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkg0YAuLCBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiBwcm9jZXNzSG91cnNGdW5jdGlvbignW9Ch0YzQvtCz0L7QtNC90ZYgJyksXG4gICAgICAgICAgICBuZXh0RGF5OiBwcm9jZXNzSG91cnNGdW5jdGlvbignW9CX0LDQstGC0YDQsCAnKSxcbiAgICAgICAgICAgIGxhc3REYXk6IHByb2Nlc3NIb3Vyc0Z1bmN0aW9uKCdb0JLRh9C+0YDQsCAnKSxcbiAgICAgICAgICAgIG5leHRXZWVrOiBwcm9jZXNzSG91cnNGdW5jdGlvbignW9CjXSBkZGRkIFsnKSxcbiAgICAgICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcm9jZXNzSG91cnNGdW5jdGlvbignW9Cc0LjQvdGD0LvQvtGXXSBkZGRkIFsnKS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb2Nlc3NIb3Vyc0Z1bmN0aW9uKCdb0JzQuNC90YPQu9C+0LPQvl0gZGRkZCBbJykuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICfQt9CwICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyDRgtC+0LzRgycsXG4gICAgICAgICAgICBzOiAn0LTQtdC60ZbQu9GM0LrQsCDRgdC10LrRg9C90LQnLFxuICAgICAgICAgICAgc3M6IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICBtOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgbW06IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICBoOiAn0LPQvtC00LjQvdGDJyxcbiAgICAgICAgICAgIGhoOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgZDogJ9C00LXQvdGMJyxcbiAgICAgICAgICAgIGRkOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgTTogJ9C80ZbRgdGP0YbRjCcsXG4gICAgICAgICAgICBNTTogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgICAgIHk6ICfRgNGW0LonLFxuICAgICAgICAgICAgeXk6IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgIH0sXG4gICAgICAgIC8vIE0uIEUuOiB0aG9zZSB0d28gYXJlIHZpcnR1YWxseSB1bnVzZWQgYnV0IGEgdXNlciBtaWdodCB3YW50IHRvIGltcGxlbWVudCB0aGVtIGZvciBoaXMvaGVyIHdlYnNpdGUgZm9yIHNvbWUgcmVhc29uXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/QvdC+0YfRlnzRgNCw0L3QutGDfNC00L3Rj3zQstC10YfQvtGA0LAvLFxuICAgICAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiAvXijQtNC90Y980LLQtdGH0L7RgNCwKSQvLnRlc3QoaW5wdXQpO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCA0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfQvdC+0YfRlic7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn0YDQsNC90LrRgyc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxNykge1xuICAgICAgICAgICAgICAgIHJldHVybiAn0LTQvdGPJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfQstC10YfQvtGA0LAnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0tKNC5fNCz0L4pLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlciwgcGVyaW9kKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHBlcmlvZCkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ00nOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0RERCc6XG4gICAgICAgICAgICAgICAgY2FzZSAndyc6XG4gICAgICAgICAgICAgICAgY2FzZSAnVyc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLdC5JztcbiAgICAgICAgICAgICAgICBjYXNlICdEJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct0LPQvic7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNywgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gN3RoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHVrO1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/uk.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/ur.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/ur.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Urdu [ur]\n//! author : Sawood Alam : https://github.com/ibnesayeed\n//! author : Zack : https://github.com/ZackVision\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var months = [\n            'جنوری',\n            'فروری',\n            'مارچ',\n            'اپریل',\n            'مئی',\n            'جون',\n            'جولائی',\n            'اگست',\n            'ستمبر',\n            'اکتوبر',\n            'نومبر',\n            'دسمبر',\n        ],\n        days = ['اتوار', 'پیر', 'منگل', 'بدھ', 'جمعرات', 'جمعہ', 'ہفتہ'];\n\n    var ur = moment.defineLocale('ur', {\n        months: months,\n        monthsShort: months,\n        weekdays: days,\n        weekdaysShort: days,\n        weekdaysMin: days,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd، D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /صبح|شام/,\n        isPM: function (input) {\n            return 'شام' === input;\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'صبح';\n            }\n            return 'شام';\n        },\n        calendar: {\n            sameDay: '[آج بوقت] LT',\n            nextDay: '[کل بوقت] LT',\n            nextWeek: 'dddd [بوقت] LT',\n            lastDay: '[گذشتہ روز بوقت] LT',\n            lastWeek: '[گذشتہ] dddd [بوقت] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s بعد',\n            past: '%s قبل',\n            s: 'چند سیکنڈ',\n            ss: '%d سیکنڈ',\n            m: 'ایک منٹ',\n            mm: '%d منٹ',\n            h: 'ایک گھنٹہ',\n            hh: '%d گھنٹے',\n            d: 'ایک دن',\n            dd: '%d دن',\n            M: 'ایک ماہ',\n            MM: '%d ماہ',\n            y: 'ایک سال',\n            yy: '%d سال',\n        },\n        preparse: function (string) {\n            return string.replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/,/g, '،');\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return ur;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS91ci5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsa0RBQVc7QUFDckUsR0FBRyxDQUNzQjtBQUN6QixDQUFDLDRCQUE0Qjs7QUFFN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3VyLmpzP2E5OWYiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFVyZHUgW3VyXVxuLy8hIGF1dGhvciA6IFNhd29vZCBBbGFtIDogaHR0cHM6Ly9naXRodWIuY29tL2libmVzYXllZWRcbi8vISBhdXRob3IgOiBaYWNrIDogaHR0cHM6Ly9naXRodWIuY29tL1phY2tWaXNpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBtb250aHMgPSBbXG4gICAgICAgICAgICAn2KzZhtmI2LHbjCcsXG4gICAgICAgICAgICAn2YHYsdmI2LHbjCcsXG4gICAgICAgICAgICAn2YXYp9ix2oYnLFxuICAgICAgICAgICAgJ9in2b7YsduM2YQnLFxuICAgICAgICAgICAgJ9mF2KbbjCcsXG4gICAgICAgICAgICAn2KzZiNmGJyxcbiAgICAgICAgICAgICfYrNmI2YTYp9im24wnLFxuICAgICAgICAgICAgJ9in2q/Ys9iqJyxcbiAgICAgICAgICAgICfYs9iq2YXYqNixJyxcbiAgICAgICAgICAgICfYp9qp2KrZiNio2LEnLFxuICAgICAgICAgICAgJ9mG2YjZhdio2LEnLFxuICAgICAgICAgICAgJ9iv2LPZhdio2LEnLFxuICAgICAgICBdLFxuICAgICAgICBkYXlzID0gWyfYp9iq2YjYp9ixJywgJ9m+24zYsScsICfZhdmG2q/ZhCcsICfYqNiv2r4nLCAn2KzZhdi52LHYp9iqJywgJ9is2YXYuduBJywgJ9uB2YHYqtuBJ107XG5cbiAgICB2YXIgdXIgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd1cicsIHtcbiAgICAgICAgbW9udGhzOiBtb250aHMsXG4gICAgICAgIG1vbnRoc1Nob3J0OiBtb250aHMsXG4gICAgICAgIHdlZWtkYXlzOiBkYXlzLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiBkYXlzLFxuICAgICAgICB3ZWVrZGF5c01pbjogZGF5cyxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZNiMIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL9i12KjYrXzYtNin2YUvLFxuICAgICAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiAn2LTYp9mFJyA9PT0gaW5wdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfYtdio2K0nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuICfYtNin2YUnO1xuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vYotisINio2YjZgtiqXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW9qp2YQg2KjZiNmC2KpdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBb2KjZiNmC2KpdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb2q/YsNi02KrbgSDYsdmI2LIg2KjZiNmC2KpdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW9qv2LDYtNiq24FdIGRkZGQgW9io2YjZgtiqXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVzINio2LnYrycsXG4gICAgICAgICAgICBwYXN0OiAnJXMg2YLYqNmEJyxcbiAgICAgICAgICAgIHM6ICfahtmG2K8g2LPbjNqp2YbaiCcsXG4gICAgICAgICAgICBzczogJyVkINiz24zaqdmG2ognLFxuICAgICAgICAgICAgbTogJ9in24zaqSDZhdmG2bknLFxuICAgICAgICAgICAgbW06ICclZCDZhdmG2bknLFxuICAgICAgICAgICAgaDogJ9in24zaqSDar9q+2YbZuduBJyxcbiAgICAgICAgICAgIGhoOiAnJWQg2q/avtmG2bnbkicsXG4gICAgICAgICAgICBkOiAn2KfbjNqpINiv2YYnLFxuICAgICAgICAgICAgZGQ6ICclZCDYr9mGJyxcbiAgICAgICAgICAgIE06ICfYp9uM2qkg2YXYp9uBJyxcbiAgICAgICAgICAgIE1NOiAnJWQg2YXYp9uBJyxcbiAgICAgICAgICAgIHk6ICfYp9uM2qkg2LPYp9mEJyxcbiAgICAgICAgICAgIHl5OiAnJWQg2LPYp9mEJyxcbiAgICAgICAgfSxcbiAgICAgICAgcHJlcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgv2IwvZywgJywnKTtcbiAgICAgICAgfSxcbiAgICAgICAgcG9zdGZvcm1hdDogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC8sL2csICfYjCcpO1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdXI7XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/ur.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/uz-latn.js":
/*!***********************************************!*\
  !*** ./node_modules/moment/locale/uz-latn.js ***!
  \***********************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Uzbek Latin [uz-latn]\n//! author : Rasulbek Mirzayev : github.com/Rasulbeeek\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var uzLatn = moment.defineLocale('uz-latn', {\n        months: 'Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr'.split(\n            '_'\n        ),\n        monthsShort: 'Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek'.split('_'),\n        weekdays:\n            'Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba'.split(\n                '_'\n            ),\n        weekdaysShort: 'Yak_Dush_Sesh_Chor_Pay_Jum_Shan'.split('_'),\n        weekdaysMin: 'Ya_Du_Se_Cho_Pa_Ju_Sha'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'D MMMM YYYY, dddd HH:mm',\n        },\n        calendar: {\n            sameDay: '[Bugun soat] LT [da]',\n            nextDay: '[Ertaga] LT [da]',\n            nextWeek: 'dddd [kuni soat] LT [da]',\n            lastDay: '[Kecha soat] LT [da]',\n            lastWeek: \"[O'tgan] dddd [kuni soat] LT [da]\",\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'Yaqin %s ichida',\n            past: 'Bir necha %s oldin',\n            s: 'soniya',\n            ss: '%d soniya',\n            m: 'bir daqiqa',\n            mm: '%d daqiqa',\n            h: 'bir soat',\n            hh: '%d soat',\n            d: 'bir kun',\n            dd: '%d kun',\n            M: 'bir oy',\n            MM: '%d oy',\n            y: 'bir yil',\n            yy: '%d yil',\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return uzLatn;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS91ei1sYXRuLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsa0RBQVc7QUFDckUsR0FBRyxDQUNzQjtBQUN6QixDQUFDLDRCQUE0Qjs7QUFFN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdXotbGF0bi5qcz9mZTRlIl0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBVemJlayBMYXRpbiBbdXotbGF0bl1cbi8vISBhdXRob3IgOiBSYXN1bGJlayBNaXJ6YXlldiA6IGdpdGh1Yi5jb20vUmFzdWxiZWVla1xuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHV6TGF0biA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3V6LWxhdG4nLCB7XG4gICAgICAgIG1vbnRoczogJ1lhbnZhcl9GZXZyYWxfTWFydF9BcHJlbF9NYXlfSXl1bl9JeXVsX0F2Z3VzdF9TZW50YWJyX09rdGFicl9Ob3lhYnJfRGVrYWJyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ1lhbl9GZXZfTWFyX0Fwcl9NYXlfSXl1bl9JeXVsX0F2Z19TZW5fT2t0X05veV9EZWsnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOlxuICAgICAgICAgICAgJ1lha3NoYW5iYV9EdXNoYW5iYV9TZXNoYW5iYV9DaG9yc2hhbmJhX1BheXNoYW5iYV9KdW1hX1NoYW5iYScuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnWWFrX0R1c2hfU2VzaF9DaG9yX1BheV9KdW1fU2hhbicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdZYV9EdV9TZV9DaG9fUGFfSnVfU2hhJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdEIE1NTU0gWVlZWSwgZGRkZCBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW0J1Z3VuIHNvYXRdIExUIFtkYV0nLFxuICAgICAgICAgICAgbmV4dERheTogJ1tFcnRhZ2FdIExUIFtkYV0nLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFtrdW5pIHNvYXRdIExUIFtkYV0nLFxuICAgICAgICAgICAgbGFzdERheTogJ1tLZWNoYSBzb2F0XSBMVCBbZGFdJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiBcIltPJ3RnYW5dIGRkZGQgW2t1bmkgc29hdF0gTFQgW2RhXVwiLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdZYXFpbiAlcyBpY2hpZGEnLFxuICAgICAgICAgICAgcGFzdDogJ0JpciBuZWNoYSAlcyBvbGRpbicsXG4gICAgICAgICAgICBzOiAnc29uaXlhJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc29uaXlhJyxcbiAgICAgICAgICAgIG06ICdiaXIgZGFxaXFhJyxcbiAgICAgICAgICAgIG1tOiAnJWQgZGFxaXFhJyxcbiAgICAgICAgICAgIGg6ICdiaXIgc29hdCcsXG4gICAgICAgICAgICBoaDogJyVkIHNvYXQnLFxuICAgICAgICAgICAgZDogJ2JpciBrdW4nLFxuICAgICAgICAgICAgZGQ6ICclZCBrdW4nLFxuICAgICAgICAgICAgTTogJ2JpciBveScsXG4gICAgICAgICAgICBNTTogJyVkIG95JyxcbiAgICAgICAgICAgIHk6ICdiaXIgeWlsJyxcbiAgICAgICAgICAgIHl5OiAnJWQgeWlsJyxcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNywgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gN3RoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHV6TGF0bjtcblxufSkpKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/uz-latn.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/uz.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/uz.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Uzbek [uz]\n//! author : Sardor Muminov : https://github.com/muminoff\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var uz = moment.defineLocale('uz', {\n        months: 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split(\n            '_'\n        ),\n        monthsShort: 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),\n        weekdays: 'Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба'.split('_'),\n        weekdaysShort: 'Якш_Душ_Сеш_Чор_Пай_Жум_Шан'.split('_'),\n        weekdaysMin: 'Як_Ду_Се_Чо_Па_Жу_Ша'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'D MMMM YYYY, dddd HH:mm',\n        },\n        calendar: {\n            sameDay: '[Бугун соат] LT [да]',\n            nextDay: '[Эртага] LT [да]',\n            nextWeek: 'dddd [куни соат] LT [да]',\n            lastDay: '[Кеча соат] LT [да]',\n            lastWeek: '[Утган] dddd [куни соат] LT [да]',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'Якин %s ичида',\n            past: 'Бир неча %s олдин',\n            s: 'фурсат',\n            ss: '%d фурсат',\n            m: 'бир дакика',\n            mm: '%d дакика',\n            h: 'бир соат',\n            hh: '%d соат',\n            d: 'бир кун',\n            dd: '%d кун',\n            M: 'бир ой',\n            MM: '%d ой',\n            y: 'бир йил',\n            yy: '%d йил',\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return uz;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS91ei5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3V6LmpzP2MwNmIiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFV6YmVrIFt1el1cbi8vISBhdXRob3IgOiBTYXJkb3IgTXVtaW5vdiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9tdW1pbm9mZlxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHV6ID0gbW9tZW50LmRlZmluZUxvY2FsZSgndXonLCB7XG4gICAgICAgIG1vbnRoczogJ9GP0L3QstCw0YBf0YTQtdCy0YDQsNC7X9C80LDRgNGCX9Cw0L/RgNC10Ltf0LzQsNC5X9C40Y7QvV/QuNGO0Ltf0LDQstCz0YPRgdGCX9GB0LXQvdGC0Y/QsdGAX9C+0LrRgtGP0LHRgF/QvdC+0Y/QsdGAX9C00LXQutCw0LHRgCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICfRj9C90LJf0YTQtdCyX9C80LDRgF/QsNC/0YBf0LzQsNC5X9C40Y7QvV/QuNGO0Ltf0LDQstCzX9GB0LXQvV/QvtC60YJf0L3QvtGPX9C00LXQuicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICfQr9C60YjQsNC90LHQsF/QlNGD0YjQsNC90LHQsF/QodC10YjQsNC90LHQsF/Qp9C+0YDRiNCw0L3QsdCwX9Cf0LDQudGI0LDQvdCx0LBf0JbRg9C80LBf0KjQsNC90LHQsCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ9Cv0LrRiF/QlNGD0Yhf0KHQtdGIX9Cn0L7RgF/Qn9Cw0Llf0JbRg9C8X9Co0LDQvScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfQr9C6X9CU0YNf0KHQtV/Qp9C+X9Cf0LBf0JbRg1/QqNCwJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdEIE1NTU0gWVlZWSwgZGRkZCBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW9CR0YPQs9GD0L0g0YHQvtCw0YJdIExUIFvQtNCwXScsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW9Ct0YDRgtCw0LPQsF0gTFQgW9C00LBdJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBb0LrRg9C90Lgg0YHQvtCw0YJdIExUIFvQtNCwXScsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW9Ca0LXRh9CwINGB0L7QsNGCXSBMVCBb0LTQsF0nLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdb0KPRgtCz0LDQvV0gZGRkZCBb0LrRg9C90Lgg0YHQvtCw0YJdIExUIFvQtNCwXScsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ9Cv0LrQuNC9ICVzINC40YfQuNC00LAnLFxuICAgICAgICAgICAgcGFzdDogJ9CR0LjRgCDQvdC10YfQsCAlcyDQvtC70LTQuNC9JyxcbiAgICAgICAgICAgIHM6ICfRhNGD0YDRgdCw0YInLFxuICAgICAgICAgICAgc3M6ICclZCDRhNGD0YDRgdCw0YInLFxuICAgICAgICAgICAgbTogJ9Cx0LjRgCDQtNCw0LrQuNC60LAnLFxuICAgICAgICAgICAgbW06ICclZCDQtNCw0LrQuNC60LAnLFxuICAgICAgICAgICAgaDogJ9Cx0LjRgCDRgdC+0LDRgicsXG4gICAgICAgICAgICBoaDogJyVkINGB0L7QsNGCJyxcbiAgICAgICAgICAgIGQ6ICfQsdC40YAg0LrRg9C9JyxcbiAgICAgICAgICAgIGRkOiAnJWQg0LrRg9C9JyxcbiAgICAgICAgICAgIE06ICfQsdC40YAg0L7QuScsXG4gICAgICAgICAgICBNTTogJyVkINC+0LknLFxuICAgICAgICAgICAgeTogJ9Cx0LjRgCDQudC40LsnLFxuICAgICAgICAgICAgeXk6ICclZCDQudC40LsnLFxuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA3LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdXo7XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/uz.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/vi.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/vi.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Vietnamese [vi]\n//! author : Bang Nguyen : https://github.com/bangnk\n//! author : Chien Kira : https://github.com/chienkira\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var vi = moment.defineLocale('vi', {\n        months: 'tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12'.split(\n            '_'\n        ),\n        monthsShort:\n            'Thg 01_Thg 02_Thg 03_Thg 04_Thg 05_Thg 06_Thg 07_Thg 08_Thg 09_Thg 10_Thg 11_Thg 12'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy'.split(\n            '_'\n        ),\n        weekdaysShort: 'CN_T2_T3_T4_T5_T6_T7'.split('_'),\n        weekdaysMin: 'CN_T2_T3_T4_T5_T6_T7'.split('_'),\n        weekdaysParseExact: true,\n        meridiemParse: /sa|ch/i,\n        isPM: function (input) {\n            return /^ch$/i.test(input);\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 12) {\n                return isLower ? 'sa' : 'SA';\n            } else {\n                return isLower ? 'ch' : 'CH';\n            }\n        },\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM [năm] YYYY',\n            LLL: 'D MMMM [năm] YYYY HH:mm',\n            LLLL: 'dddd, D MMMM [năm] YYYY HH:mm',\n            l: 'DD/M/YYYY',\n            ll: 'D MMM YYYY',\n            lll: 'D MMM YYYY HH:mm',\n            llll: 'ddd, D MMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Hôm nay lúc] LT',\n            nextDay: '[Ngày mai lúc] LT',\n            nextWeek: 'dddd [tuần tới lúc] LT',\n            lastDay: '[Hôm qua lúc] LT',\n            lastWeek: 'dddd [tuần trước lúc] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s tới',\n            past: '%s trước',\n            s: 'vài giây',\n            ss: '%d giây',\n            m: 'một phút',\n            mm: '%d phút',\n            h: 'một giờ',\n            hh: '%d giờ',\n            d: 'một ngày',\n            dd: '%d ngày',\n            w: 'một tuần',\n            ww: '%d tuần',\n            M: 'một tháng',\n            MM: '%d tháng',\n            y: 'một năm',\n            yy: '%d năm',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}/,\n        ordinal: function (number) {\n            return number;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return vi;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS92aS5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsa0RBQVc7QUFDckUsR0FBRyxDQUNzQjtBQUN6QixDQUFDLDRCQUE0Qjs7QUFFN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxvQ0FBb0MsSUFBSTtBQUN4QztBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS92aS5qcz84MDg0Il0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBWaWV0bmFtZXNlIFt2aV1cbi8vISBhdXRob3IgOiBCYW5nIE5ndXllbiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9iYW5nbmtcbi8vISBhdXRob3IgOiBDaGllbiBLaXJhIDogaHR0cHM6Ly9naXRodWIuY29tL2NoaWVua2lyYVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHZpID0gbW9tZW50LmRlZmluZUxvY2FsZSgndmknLCB7XG4gICAgICAgIG1vbnRoczogJ3Row6FuZyAxX3Row6FuZyAyX3Row6FuZyAzX3Row6FuZyA0X3Row6FuZyA1X3Row6FuZyA2X3Row6FuZyA3X3Row6FuZyA4X3Row6FuZyA5X3Row6FuZyAxMF90aMOhbmcgMTFfdGjDoW5nIDEyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICdUaGcgMDFfVGhnIDAyX1RoZyAwM19UaGcgMDRfVGhnIDA1X1RoZyAwNl9UaGcgMDdfVGhnIDA4X1RoZyAwOV9UaGcgMTBfVGhnIDExX1RoZyAxMicuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czogJ2No4bunIG5o4bqtdF90aOG7qSBoYWlfdGjhu6kgYmFfdGjhu6kgdMawX3Ro4bupIG7Eg21fdGjhu6kgc8OhdV90aOG7qSBi4bqjeScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ0NOX1QyX1QzX1Q0X1Q1X1Q2X1Q3Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ0NOX1QyX1QzX1Q0X1Q1X1Q2X1Q3Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC9zYXxjaC9pLFxuICAgICAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiAvXmNoJC9pLnRlc3QoaW5wdXQpO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXJzLCBtaW51dGVzLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91cnMgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiBpc0xvd2VyID8gJ3NhJyA6ICdTQSc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBpc0xvd2VyID8gJ2NoJyA6ICdDSCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFtuxINtXSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBbbsSDbV0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFtuxINtXSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIGw6ICdERC9NL1lZWVknLFxuICAgICAgICAgICAgbGw6ICdEIE1NTSBZWVlZJyxcbiAgICAgICAgICAgIGxsbDogJ0QgTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgbGxsbDogJ2RkZCwgRCBNTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW0jDtG0gbmF5IGzDumNdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbTmfDoHkgbWFpIGzDumNdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbdHXhuqduIHThu5tpIGzDumNdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbSMO0bSBxdWEgbMO6Y10gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFt0deG6p24gdHLGsOG7m2MgbMO6Y10gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICclcyB04bubaScsXG4gICAgICAgICAgICBwYXN0OiAnJXMgdHLGsOG7m2MnLFxuICAgICAgICAgICAgczogJ3bDoGkgZ2nDonknLFxuICAgICAgICAgICAgc3M6ICclZCBnacOieScsXG4gICAgICAgICAgICBtOiAnbeG7mXQgcGjDunQnLFxuICAgICAgICAgICAgbW06ICclZCBwaMO6dCcsXG4gICAgICAgICAgICBoOiAnbeG7mXQgZ2nhu50nLFxuICAgICAgICAgICAgaGg6ICclZCBnaeG7nScsXG4gICAgICAgICAgICBkOiAnbeG7mXQgbmfDoHknLFxuICAgICAgICAgICAgZGQ6ICclZCBuZ8OgeScsXG4gICAgICAgICAgICB3OiAnbeG7mXQgdHXhuqduJyxcbiAgICAgICAgICAgIHd3OiAnJWQgdHXhuqduJyxcbiAgICAgICAgICAgIE06ICdt4buZdCB0aMOhbmcnLFxuICAgICAgICAgICAgTU06ICclZCB0aMOhbmcnLFxuICAgICAgICAgICAgeTogJ23hu5l0IG7Eg20nLFxuICAgICAgICAgICAgeXk6ICclZCBuxINtJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9LyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHZpO1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/vi.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/x-pseudo.js":
/*!************************************************!*\
  !*** ./node_modules/moment/locale/x-pseudo.js ***!
  \************************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Pseudo [x-pseudo]\n//! author : Andrew Hood : https://github.com/andrewhood125\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var xPseudo = moment.defineLocale('x-pseudo', {\n        months: 'J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér'.split(\n            '_'\n        ),\n        monthsShort:\n            'J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays:\n            'S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý'.split(\n                '_'\n            ),\n        weekdaysShort: 'S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát'.split('_'),\n        weekdaysMin: 'S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[T~ódá~ý át] LT',\n            nextDay: '[T~ómó~rró~w át] LT',\n            nextWeek: 'dddd [át] LT',\n            lastDay: '[Ý~ést~érdá~ý át] LT',\n            lastWeek: '[L~ást] dddd [át] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'í~ñ %s',\n            past: '%s á~gó',\n            s: 'á ~féw ~sécó~ñds',\n            ss: '%d s~écóñ~ds',\n            m: 'á ~míñ~úté',\n            mm: '%d m~íñú~tés',\n            h: 'á~ñ hó~úr',\n            hh: '%d h~óúrs',\n            d: 'á ~dáý',\n            dd: '%d d~áýs',\n            M: 'á ~móñ~th',\n            MM: '%d m~óñt~hs',\n            y: 'á ~ýéár',\n            yy: '%d ý~éárs',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                        ? 'st'\n                        : b === 2\n                        ? 'nd'\n                        : b === 3\n                        ? 'rd'\n                        : 'th';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return xPseudo;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS94LXBzZXVkby5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxvQ0FBb0MsSUFBSTtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUveC1wc2V1ZG8uanM/ZDE3OCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogUHNldWRvIFt4LXBzZXVkb11cbi8vISBhdXRob3IgOiBBbmRyZXcgSG9vZCA6IGh0dHBzOi8vZ2l0aHViLmNvbS9hbmRyZXdob29kMTI1XG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgeFBzZXVkbyA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3gtcHNldWRvJywge1xuICAgICAgICBtb250aHM6ICdKfsOhw7HDusOhfnLDvV9GfsOpYnLDun7DoXLDvV9+TcOhcmN+aF/DgXB+csOtbF9+TcOhw71ffkrDusOxw6l+X0rDumx+w71fw4HDun5nw7pzdH5fU8OpcH50w6ltYn7DqXJfw5N+Y3TDs2J+w6lyX8ORfsOzdsOpbX5iw6lyX35Ew6ljw6l+bWLDqXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ0p+w6HDsV9+RsOpYl9+TcOhcl9+w4Fwcl9+TcOhw71ffkrDusOxX35Kw7psX37DgcO6Z19+U8OpcF9+w5NjdF9+w5HDs3ZffkTDqWMnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6XG4gICAgICAgICAgICAnU37DusOxZMOhfsO9X03Ds37DsWTDocO9fl9Uw7rDqX5zZMOhw71+X1fDqWR+w7HDqXNkfsOhw71fVH5ow7pyc35kw6HDvV9+RnLDrWR+w6HDvV9TfsOhdMO6cn5kw6HDvScuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnU37DusOxX35Nw7PDsV9+VMO6w6lfflfDqWRfflRow7pffkZyw61fflPDoXQnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnU37Dul9Nw7N+X1TDul9+V8OpX1R+aF9Gcn5fU8OhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbVH7Ds2TDoX7DvSDDoXRdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbVH7Ds23Ds35ycsOzfncgw6F0XSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW8OhdF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vDnX7DqXN0fsOpcmTDoX7DvSDDoXRdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW0x+w6FzdF0gZGRkZCBbw6F0XSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ8OtfsOxICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyDDoX5nw7MnLFxuICAgICAgICAgICAgczogJ8OhIH5mw6l3IH5zw6ljw7N+w7FkcycsXG4gICAgICAgICAgICBzczogJyVkIHN+w6ljw7PDsX5kcycsXG4gICAgICAgICAgICBtOiAnw6Egfm3DrcOxfsO6dMOpJyxcbiAgICAgICAgICAgIG1tOiAnJWQgbX7DrcOxw7p+dMOpcycsXG4gICAgICAgICAgICBoOiAnw6F+w7EgaMOzfsO6cicsXG4gICAgICAgICAgICBoaDogJyVkIGh+w7PDunJzJyxcbiAgICAgICAgICAgIGQ6ICfDoSB+ZMOhw70nLFxuICAgICAgICAgICAgZGQ6ICclZCBkfsOhw71zJyxcbiAgICAgICAgICAgIE06ICfDoSB+bcOzw7F+dGgnLFxuICAgICAgICAgICAgTU06ICclZCBtfsOzw7F0fmhzJyxcbiAgICAgICAgICAgIHk6ICfDoSB+w73DqcOhcicsXG4gICAgICAgICAgICB5eTogJyVkIMO9fsOpw6FycycsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfSh0aHxzdHxuZHxyZCkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICB2YXIgYiA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgICAgIG91dHB1dCA9XG4gICAgICAgICAgICAgICAgICAgIH5+KChudW1iZXIgJSAxMDApIC8gMTApID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICd0aCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAnc3QnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ25kJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAzXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICdyZCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJ3RoJztcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiB4UHNldWRvO1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/x-pseudo.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/yo.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/yo.js ***!
  \******************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Yoruba Nigeria [yo]\n//! author : Atolagbe Abisoye : https://github.com/andela-batolagbe\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var yo = moment.defineLocale('yo', {\n        months: 'Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀'.split(\n            '_'\n        ),\n        monthsShort: 'Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀'.split('_'),\n        weekdays: 'Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta'.split('_'),\n        weekdaysShort: 'Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá'.split('_'),\n        weekdaysMin: 'Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb'.split('_'),\n        longDateFormat: {\n            LT: 'h:mm A',\n            LTS: 'h:mm:ss A',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY h:mm A',\n            LLLL: 'dddd, D MMMM YYYY h:mm A',\n        },\n        calendar: {\n            sameDay: '[Ònì ni] LT',\n            nextDay: '[Ọ̀la ni] LT',\n            nextWeek: \"dddd [Ọsẹ̀ tón'bọ] [ni] LT\",\n            lastDay: '[Àna ni] LT',\n            lastWeek: 'dddd [Ọsẹ̀ tólọ́] [ni] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'ní %s',\n            past: '%s kọjá',\n            s: 'ìsẹjú aayá die',\n            ss: 'aayá %d',\n            m: 'ìsẹjú kan',\n            mm: 'ìsẹjú %d',\n            h: 'wákati kan',\n            hh: 'wákati %d',\n            d: 'ọjọ́ kan',\n            dd: 'ọjọ́ %d',\n            M: 'osù kan',\n            MM: 'osù %d',\n            y: 'ọdún kan',\n            yy: 'ọdún %d',\n        },\n        dayOfMonthOrdinalParse: /ọjọ́\\s\\d{1,2}/,\n        ordinal: 'ọjọ́ %d',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return yo;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS95by5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsMENBQTBDLElBQUk7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUveW8uanM/ZTk4ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogWW9ydWJhIE5pZ2VyaWEgW3lvXVxuLy8hIGF1dGhvciA6IEF0b2xhZ2JlIEFiaXNveWUgOiBodHRwczovL2dpdGh1Yi5jb20vYW5kZWxhLWJhdG9sYWdiZVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHlvID0gbW9tZW50LmRlZmluZUxvY2FsZSgneW8nLCB7XG4gICAgICAgIG1vbnRoczogJ1PhurnMgXLhurnMgV9FzIByZcyAbGXMgF/hurhy4bq5zIBuYcyAX0nMgGdiZcyBX0XMgGJpYmlfT8yAa3XMgGR1X0Fn4bq5bW9fT8yAZ3XMgW5fT3dld2Vf4buMzIB3YcyAcmHMgF9CZcyBbHXMgV/hu4zMgHDhurnMgMyAJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ1PhurnMgXJfRcyAcmxf4bq4cm5fScyAZ2JfRcyAYmlfT8yAa3XMgF9BZ+G6uV9PzIBndcyBX093ZV/hu4zMgHdhzIBfQmXMgWxf4buMzIBw4bq5zIDMgCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICdBzIBpzIBrdcyBX0FqZcyBX0nMgHPhurnMgWd1bl/hu4xq4buNzIFydcyBX+G7jGrhu43MgWLhu41f4bq4dGnMgF9BzIBiYcyBbeG6ucyBdGEnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdBzIBpzIBrX0FqZcyBX0nMgHPhurnMgV/hu4xqcl/hu4xqYl/hurh0acyAX0HMgGJhzIEnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnQcyAacyAX0FqX0nMgHNf4buMcl/hu4xiX+G6uHRfQcyAYicuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnaDptbSBBJyxcbiAgICAgICAgICAgIExUUzogJ2g6bW06c3MgQScsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIGg6bW0gQScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgaDptbSBBJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbT8yAbmnMgCBuaV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vhu4zMgGxhIG5pXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogXCJkZGRkIFvhu4xz4bq5zIAgdG/MgW4nYuG7jV0gW25pXSBMVFwiLFxuICAgICAgICAgICAgbGFzdERheTogJ1tBzIBuYSBuaV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFvhu4xz4bq5zIAgdG/MgWzhu43MgV0gW25pXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ25pzIEgJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzIGvhu41qYcyBJyxcbiAgICAgICAgICAgIHM6ICdpzIBz4bq5anXMgSBhYXlhzIEgZGllJyxcbiAgICAgICAgICAgIHNzOiAnYWF5YcyBICVkJyxcbiAgICAgICAgICAgIG06ICdpzIBz4bq5anXMgSBrYW4nLFxuICAgICAgICAgICAgbW06ICdpzIBz4bq5anXMgSAlZCcsXG4gICAgICAgICAgICBoOiAnd2HMgWthdGkga2FuJyxcbiAgICAgICAgICAgIGhoOiAnd2HMgWthdGkgJWQnLFxuICAgICAgICAgICAgZDogJ+G7jWrhu43MgSBrYW4nLFxuICAgICAgICAgICAgZGQ6ICfhu41q4buNzIEgJWQnLFxuICAgICAgICAgICAgTTogJ29zdcyAIGthbicsXG4gICAgICAgICAgICBNTTogJ29zdcyAICVkJyxcbiAgICAgICAgICAgIHk6ICfhu41kdcyBbiBrYW4nLFxuICAgICAgICAgICAgeXk6ICfhu41kdcyBbiAlZCcsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC/hu41q4buNzIFcXHNcXGR7MSwyfS8sXG4gICAgICAgIG9yZGluYWw6ICfhu41q4buNzIEgJWQnLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4geW87XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/yo.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/zh-cn.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/zh-cn.js ***!
  \*********************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Chinese (China) [zh-cn]\n//! author : suupic : https://github.com/suupic\n//! author : Zeno Zeng : https://github.com/zenozeng\n//! author : uu109 : https://github.com/uu109\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var zhCn = moment.defineLocale('zh-cn', {\n        months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split(\n            '_'\n        ),\n        monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(\n            '_'\n        ),\n        weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n        weekdaysShort: '周日_周一_周二_周三_周四_周五_周六'.split('_'),\n        weekdaysMin: '日_一_二_三_四_五_六'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY/MM/DD',\n            LL: 'YYYY年M月D日',\n            LLL: 'YYYY年M月D日Ah点mm分',\n            LLLL: 'YYYY年M月D日ddddAh点mm分',\n            l: 'YYYY/M/D',\n            ll: 'YYYY年M月D日',\n            lll: 'YYYY年M月D日 HH:mm',\n            llll: 'YYYY年M月D日dddd HH:mm',\n        },\n        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n                return hour;\n            } else if (meridiem === '下午' || meridiem === '晚上') {\n                return hour + 12;\n            } else {\n                // '中午'\n                return hour >= 11 ? hour : hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            var hm = hour * 100 + minute;\n            if (hm < 600) {\n                return '凌晨';\n            } else if (hm < 900) {\n                return '早上';\n            } else if (hm < 1130) {\n                return '上午';\n            } else if (hm < 1230) {\n                return '中午';\n            } else if (hm < 1800) {\n                return '下午';\n            } else {\n                return '晚上';\n            }\n        },\n        calendar: {\n            sameDay: '[今天]LT',\n            nextDay: '[明天]LT',\n            nextWeek: function (now) {\n                if (now.week() !== this.week()) {\n                    return '[下]dddLT';\n                } else {\n                    return '[本]dddLT';\n                }\n            },\n            lastDay: '[昨天]LT',\n            lastWeek: function (now) {\n                if (this.week() !== now.week()) {\n                    return '[上]dddLT';\n                } else {\n                    return '[本]dddLT';\n                }\n            },\n            sameElse: 'L',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(日|月|周)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '日';\n                case 'M':\n                    return number + '月';\n                case 'w':\n                case 'W':\n                    return number + '周';\n                default:\n                    return number;\n            }\n        },\n        relativeTime: {\n            future: '%s后',\n            past: '%s前',\n            s: '几秒',\n            ss: '%d 秒',\n            m: '1 分钟',\n            mm: '%d 分钟',\n            h: '1 小时',\n            hh: '%d 小时',\n            d: '1 天',\n            dd: '%d 天',\n            w: '1 周',\n            ww: '%d 周',\n            M: '1 个月',\n            MM: '%d 个月',\n            y: '1 年',\n            yy: '%d 年',\n        },\n        week: {\n            // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return zhCn;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS96aC1jbi5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxrREFBVztBQUNyRSxHQUFHLENBQ3NCO0FBQ3pCLENBQUMsNEJBQTRCOztBQUU3Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLFNBQVM7QUFDVCxvQ0FBb0MsSUFBSTtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvemgtY24uanM/ZGNlMyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogQ2hpbmVzZSAoQ2hpbmEpIFt6aC1jbl1cbi8vISBhdXRob3IgOiBzdXVwaWMgOiBodHRwczovL2dpdGh1Yi5jb20vc3V1cGljXG4vLyEgYXV0aG9yIDogWmVubyBaZW5nIDogaHR0cHM6Ly9naXRodWIuY29tL3plbm96ZW5nXG4vLyEgYXV0aG9yIDogdXUxMDkgOiBodHRwczovL2dpdGh1Yi5jb20vdXUxMDlcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciB6aENuID0gbW9tZW50LmRlZmluZUxvY2FsZSgnemgtY24nLCB7XG4gICAgICAgIG1vbnRoczogJ+S4gOaciF/kuozmnIhf5LiJ5pyIX+Wbm+aciF/kupTmnIhf5YWt5pyIX+S4g+aciF/lhavmnIhf5Lmd5pyIX+WNgeaciF/ljYHkuIDmnIhf5Y2B5LqM5pyIJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJzHmnIhfMuaciF8z5pyIXzTmnIhfNeaciF825pyIXzfmnIhfOOaciF855pyIXzEw5pyIXzEx5pyIXzEy5pyIJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5czogJ+aYn+acn+aXpV/mmJ/mnJ/kuIBf5pif5pyf5LqMX+aYn+acn+S4iV/mmJ/mnJ/lm5tf5pif5pyf5LqUX+aYn+acn+WFrScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ+WRqOaXpV/lkajkuIBf5ZGo5LqMX+WRqOS4iV/lkajlm5tf5ZGo5LqUX+WRqOWFrScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfml6Vf5LiAX+S6jF/kuIlf5ZubX+S6lF/lha0nLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdZWVlZL01NL0REJyxcbiAgICAgICAgICAgIExMOiAnWVlZWeW5tE3mnIhE5pelJyxcbiAgICAgICAgICAgIExMTDogJ1lZWVnlubRN5pyIROaXpUFo54K5bW3liIYnLFxuICAgICAgICAgICAgTExMTDogJ1lZWVnlubRN5pyIROaXpWRkZGRBaOeCuW1t5YiGJyxcbiAgICAgICAgICAgIGw6ICdZWVlZL00vRCcsXG4gICAgICAgICAgICBsbDogJ1lZWVnlubRN5pyIROaXpScsXG4gICAgICAgICAgICBsbGw6ICdZWVlZ5bm0TeaciETml6UgSEg6bW0nLFxuICAgICAgICAgICAgbGxsbDogJ1lZWVnlubRN5pyIROaXpWRkZGQgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv5YeM5pmofOaXqeS4inzkuIrljYh85Lit5Y2IfOS4i+WNiHzmmZrkuIovLFxuICAgICAgICBtZXJpZGllbUhvdXI6IGZ1bmN0aW9uIChob3VyLCBtZXJpZGllbSkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWVyaWRpZW0gPT09ICflh4zmmagnIHx8IG1lcmlkaWVtID09PSAn5pep5LiKJyB8fCBtZXJpZGllbSA9PT0gJ+S4iuWNiCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfkuIvljYgnIHx8IG1lcmlkaWVtID09PSAn5pma5LiKJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vICfkuK3ljYgnXG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgPj0gMTEgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgdmFyIGhtID0gaG91ciAqIDEwMCArIG1pbnV0ZTtcbiAgICAgICAgICAgIGlmIChobSA8IDYwMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5YeM5pmoJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG0gPCA5MDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+aXqeS4iic7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhtIDwgMTEzMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5LiK5Y2IJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG0gPCAxMjMwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfkuK3ljYgnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChobSA8IDE4MDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+S4i+WNiCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5pma5LiKJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb5LuK5aSpXUxUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb5piO5aSpXUxUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiBmdW5jdGlvbiAobm93KSB7XG4gICAgICAgICAgICAgICAgaWYgKG5vdy53ZWVrKCkgIT09IHRoaXMud2VlaygpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnW+S4i11kZGRMVCc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdb5pysXWRkZExUJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdERheTogJ1vmmKjlpKldTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6IGZ1bmN0aW9uIChub3cpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy53ZWVrKCkgIT09IG5vdy53ZWVrKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdb5LiKXWRkZExUJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1vmnKxdZGRkTFQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0o5pelfOaciHzlkagpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlciwgcGVyaW9kKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHBlcmlvZCkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0QnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0RERCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAn5pelJztcbiAgICAgICAgICAgICAgICBjYXNlICdNJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICfmnIgnO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3cnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ1cnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJ+WRqCc7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICclc+WQjicsXG4gICAgICAgICAgICBwYXN0OiAnJXPliY0nLFxuICAgICAgICAgICAgczogJ+WHoOenkicsXG4gICAgICAgICAgICBzczogJyVkIOenkicsXG4gICAgICAgICAgICBtOiAnMSDliIbpkp8nLFxuICAgICAgICAgICAgbW06ICclZCDliIbpkp8nLFxuICAgICAgICAgICAgaDogJzEg5bCP5pe2JyxcbiAgICAgICAgICAgIGhoOiAnJWQg5bCP5pe2JyxcbiAgICAgICAgICAgIGQ6ICcxIOWkqScsXG4gICAgICAgICAgICBkZDogJyVkIOWkqScsXG4gICAgICAgICAgICB3OiAnMSDlkagnLFxuICAgICAgICAgICAgd3c6ICclZCDlkagnLFxuICAgICAgICAgICAgTTogJzEg5Liq5pyIJyxcbiAgICAgICAgICAgIE1NOiAnJWQg5Liq5pyIJyxcbiAgICAgICAgICAgIHk6ICcxIOW5tCcsXG4gICAgICAgICAgICB5eTogJyVkIOW5tCcsXG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIC8vIEdCL1QgNzQwOC0xOTk044CK5pWw5o2u5YWD5ZKM5Lqk5o2i5qC85byPwrfkv6Hmga/kuqTmjaLCt+aXpeacn+WSjOaXtumXtOihqOekuuazleOAi+S4jklTTyA4NjAxOjE5ODjnrYnmlYhcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiB6aENuO1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/zh-cn.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/zh-hk.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/zh-hk.js ***!
  \*********************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Chinese (Hong Kong) [zh-hk]\n//! author : Ben : https://github.com/ben-lin\n//! author : Chris Lam : https://github.com/hehachris\n//! author : Konstantin : https://github.com/skfd\n//! author : Anthony : https://github.com/anthonylau\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var zhHk = moment.defineLocale('zh-hk', {\n        months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split(\n            '_'\n        ),\n        monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(\n            '_'\n        ),\n        weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n        weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'),\n        weekdaysMin: '日_一_二_三_四_五_六'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY/MM/DD',\n            LL: 'YYYY年M月D日',\n            LLL: 'YYYY年M月D日 HH:mm',\n            LLLL: 'YYYY年M月D日dddd HH:mm',\n            l: 'YYYY/M/D',\n            ll: 'YYYY年M月D日',\n            lll: 'YYYY年M月D日 HH:mm',\n            llll: 'YYYY年M月D日dddd HH:mm',\n        },\n        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n                return hour;\n            } else if (meridiem === '中午') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === '下午' || meridiem === '晚上') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            var hm = hour * 100 + minute;\n            if (hm < 600) {\n                return '凌晨';\n            } else if (hm < 900) {\n                return '早上';\n            } else if (hm < 1200) {\n                return '上午';\n            } else if (hm === 1200) {\n                return '中午';\n            } else if (hm < 1800) {\n                return '下午';\n            } else {\n                return '晚上';\n            }\n        },\n        calendar: {\n            sameDay: '[今天]LT',\n            nextDay: '[明天]LT',\n            nextWeek: '[下]ddddLT',\n            lastDay: '[昨天]LT',\n            lastWeek: '[上]ddddLT',\n            sameElse: 'L',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(日|月|週)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '日';\n                case 'M':\n                    return number + '月';\n                case 'w':\n                case 'W':\n                    return number + '週';\n                default:\n                    return number;\n            }\n        },\n        relativeTime: {\n            future: '%s後',\n            past: '%s前',\n            s: '幾秒',\n            ss: '%d 秒',\n            m: '1 分鐘',\n            mm: '%d 分鐘',\n            h: '1 小時',\n            hh: '%d 小時',\n            d: '1 天',\n            dd: '%d 天',\n            M: '1 個月',\n            MM: '%d 個月',\n            y: '1 年',\n            yy: '%d 年',\n        },\n    });\n\n    return zhHk;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS96aC1oay5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvemgtaGsuanM/ZWZmNCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogQ2hpbmVzZSAoSG9uZyBLb25nKSBbemgtaGtdXG4vLyEgYXV0aG9yIDogQmVuIDogaHR0cHM6Ly9naXRodWIuY29tL2Jlbi1saW5cbi8vISBhdXRob3IgOiBDaHJpcyBMYW0gOiBodHRwczovL2dpdGh1Yi5jb20vaGVoYWNocmlzXG4vLyEgYXV0aG9yIDogS29uc3RhbnRpbiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9za2ZkXG4vLyEgYXV0aG9yIDogQW50aG9ueSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9hbnRob255bGF1XG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgemhIayA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3poLWhrJywge1xuICAgICAgICBtb250aHM6ICfkuIDmnIhf5LqM5pyIX+S4ieaciF/lm5vmnIhf5LqU5pyIX+WFreaciF/kuIPmnIhf5YWr5pyIX+S5neaciF/ljYHmnIhf5Y2B5LiA5pyIX+WNgeS6jOaciCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICcx5pyIXzLmnIhfM+aciF805pyIXzXmnIhfNuaciF835pyIXzjmnIhfOeaciF8xMOaciF8xMeaciF8xMuaciCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXM6ICfmmJ/mnJ/ml6Vf5pif5pyf5LiAX+aYn+acn+S6jF/mmJ/mnJ/kuIlf5pif5pyf5ZubX+aYn+acn+S6lF/mmJ/mnJ/lha0nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfpgLHml6Vf6YCx5LiAX+mAseS6jF/pgLHkuIlf6YCx5ZubX+mAseS6lF/pgLHlha0nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn5pelX+S4gF/kuoxf5LiJX+Wbm1/kupRf5YWtJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnWVlZWS9NTS9ERCcsXG4gICAgICAgICAgICBMTDogJ1lZWVnlubRN5pyIROaXpScsXG4gICAgICAgICAgICBMTEw6ICdZWVlZ5bm0TeaciETml6UgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ1lZWVnlubRN5pyIROaXpWRkZGQgSEg6bW0nLFxuICAgICAgICAgICAgbDogJ1lZWVkvTS9EJyxcbiAgICAgICAgICAgIGxsOiAnWVlZWeW5tE3mnIhE5pelJyxcbiAgICAgICAgICAgIGxsbDogJ1lZWVnlubRN5pyIROaXpSBISDptbScsXG4gICAgICAgICAgICBsbGxsOiAnWVlZWeW5tE3mnIhE5pelZGRkZCBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/lh4zmmah85pep5LiKfOS4iuWNiHzkuK3ljYh85LiL5Y2IfOaZmuS4ii8sXG4gICAgICAgIG1lcmlkaWVtSG91cjogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXJpZGllbSA9PT0gJ+WHjOaZqCcgfHwgbWVyaWRpZW0gPT09ICfml6nkuIonIHx8IG1lcmlkaWVtID09PSAn5LiK5Y2IJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+S4reWNiCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA+PSAxMSA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn5LiL5Y2IJyB8fCBtZXJpZGllbSA9PT0gJ+aZmuS4iicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgdmFyIGhtID0gaG91ciAqIDEwMCArIG1pbnV0ZTtcbiAgICAgICAgICAgIGlmIChobSA8IDYwMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5YeM5pmoJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG0gPCA5MDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+aXqeS4iic7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhtIDwgMTIwMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5LiK5Y2IJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG0gPT09IDEyMDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+S4reWNiCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhtIDwgMTgwMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5LiL5Y2IJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfmmZrkuIonO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vku4rlpKldTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vmmI7lpKldTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdb5LiLXWRkZGRMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW+aYqOWkqV1MVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1vkuIpdZGRkZExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfSjml6V85pyIfOmAsSkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyLCBwZXJpb2QpIHtcbiAgICAgICAgICAgIHN3aXRjaCAocGVyaW9kKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnRCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnREREJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICfml6UnO1xuICAgICAgICAgICAgICAgIGNhc2UgJ00nOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJ+aciCc7XG4gICAgICAgICAgICAgICAgY2FzZSAndyc6XG4gICAgICAgICAgICAgICAgY2FzZSAnVyc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAn6YCxJztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVz5b6MJyxcbiAgICAgICAgICAgIHBhc3Q6ICclc+WJjScsXG4gICAgICAgICAgICBzOiAn5bm+56eSJyxcbiAgICAgICAgICAgIHNzOiAnJWQg56eSJyxcbiAgICAgICAgICAgIG06ICcxIOWIhumQmCcsXG4gICAgICAgICAgICBtbTogJyVkIOWIhumQmCcsXG4gICAgICAgICAgICBoOiAnMSDlsI/mmYInLFxuICAgICAgICAgICAgaGg6ICclZCDlsI/mmYInLFxuICAgICAgICAgICAgZDogJzEg5aSpJyxcbiAgICAgICAgICAgIGRkOiAnJWQg5aSpJyxcbiAgICAgICAgICAgIE06ICcxIOWAi+aciCcsXG4gICAgICAgICAgICBNTTogJyVkIOWAi+aciCcsXG4gICAgICAgICAgICB5OiAnMSDlubQnLFxuICAgICAgICAgICAgeXk6ICclZCDlubQnLFxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHpoSGs7XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/zh-hk.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/zh-mo.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/zh-mo.js ***!
  \*********************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Chinese (Macau) [zh-mo]\n//! author : Ben : https://github.com/ben-lin\n//! author : Chris Lam : https://github.com/hehachris\n//! author : Tan Yuanhong : https://github.com/le0tan\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var zhMo = moment.defineLocale('zh-mo', {\n        months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split(\n            '_'\n        ),\n        monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(\n            '_'\n        ),\n        weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n        weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'),\n        weekdaysMin: '日_一_二_三_四_五_六'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'YYYY年M月D日',\n            LLL: 'YYYY年M月D日 HH:mm',\n            LLLL: 'YYYY年M月D日dddd HH:mm',\n            l: 'D/M/YYYY',\n            ll: 'YYYY年M月D日',\n            lll: 'YYYY年M月D日 HH:mm',\n            llll: 'YYYY年M月D日dddd HH:mm',\n        },\n        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n                return hour;\n            } else if (meridiem === '中午') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === '下午' || meridiem === '晚上') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            var hm = hour * 100 + minute;\n            if (hm < 600) {\n                return '凌晨';\n            } else if (hm < 900) {\n                return '早上';\n            } else if (hm < 1130) {\n                return '上午';\n            } else if (hm < 1230) {\n                return '中午';\n            } else if (hm < 1800) {\n                return '下午';\n            } else {\n                return '晚上';\n            }\n        },\n        calendar: {\n            sameDay: '[今天] LT',\n            nextDay: '[明天] LT',\n            nextWeek: '[下]dddd LT',\n            lastDay: '[昨天] LT',\n            lastWeek: '[上]dddd LT',\n            sameElse: 'L',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(日|月|週)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '日';\n                case 'M':\n                    return number + '月';\n                case 'w':\n                case 'W':\n                    return number + '週';\n                default:\n                    return number;\n            }\n        },\n        relativeTime: {\n            future: '%s內',\n            past: '%s前',\n            s: '幾秒',\n            ss: '%d 秒',\n            m: '1 分鐘',\n            mm: '%d 分鐘',\n            h: '1 小時',\n            hh: '%d 小時',\n            d: '1 天',\n            dd: '%d 天',\n            M: '1 個月',\n            MM: '%d 個月',\n            y: '1 年',\n            yy: '%d 年',\n        },\n    });\n\n    return zhMo;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS96aC1tby5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxrREFBVztBQUNyRSxHQUFHLENBQ3NCO0FBQ3pCLENBQUMsNEJBQTRCOztBQUU3Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3poLW1vLmpzPzBlM2MiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IENoaW5lc2UgKE1hY2F1KSBbemgtbW9dXG4vLyEgYXV0aG9yIDogQmVuIDogaHR0cHM6Ly9naXRodWIuY29tL2Jlbi1saW5cbi8vISBhdXRob3IgOiBDaHJpcyBMYW0gOiBodHRwczovL2dpdGh1Yi5jb20vaGVoYWNocmlzXG4vLyEgYXV0aG9yIDogVGFuIFl1YW5ob25nIDogaHR0cHM6Ly9naXRodWIuY29tL2xlMHRhblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHpoTW8gPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd6aC1tbycsIHtcbiAgICAgICAgbW9udGhzOiAn5LiA5pyIX+S6jOaciF/kuInmnIhf5Zub5pyIX+S6lOaciF/lha3mnIhf5LiD5pyIX+WFq+aciF/kuZ3mnIhf5Y2B5pyIX+WNgeS4gOaciF/ljYHkuozmnIgnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnMeaciF8y5pyIXzPmnIhfNOaciF815pyIXzbmnIhfN+aciF845pyIXznmnIhfMTDmnIhfMTHmnIhfMTLmnIgnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzOiAn5pif5pyf5pelX+aYn+acn+S4gF/mmJ/mnJ/kuoxf5pif5pyf5LiJX+aYn+acn+Wbm1/mmJ/mnJ/kupRf5pif5pyf5YWtJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn6YCx5pelX+mAseS4gF/pgLHkuoxf6YCx5LiJX+mAseWbm1/pgLHkupRf6YCx5YWtJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ+aXpV/kuIBf5LqMX+S4iV/lm5tf5LqUX+WFrScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdZWVlZ5bm0TeaciETml6UnLFxuICAgICAgICAgICAgTExMOiAnWVlZWeW5tE3mnIhE5pelIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdZWVlZ5bm0TeaciETml6VkZGRkIEhIOm1tJyxcbiAgICAgICAgICAgIGw6ICdEL00vWVlZWScsXG4gICAgICAgICAgICBsbDogJ1lZWVnlubRN5pyIROaXpScsXG4gICAgICAgICAgICBsbGw6ICdZWVlZ5bm0TeaciETml6UgSEg6bW0nLFxuICAgICAgICAgICAgbGxsbDogJ1lZWVnlubRN5pyIROaXpWRkZGQgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv5YeM5pmofOaXqeS4inzkuIrljYh85Lit5Y2IfOS4i+WNiHzmmZrkuIovLFxuICAgICAgICBtZXJpZGllbUhvdXI6IGZ1bmN0aW9uIChob3VyLCBtZXJpZGllbSkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWVyaWRpZW0gPT09ICflh4zmmagnIHx8IG1lcmlkaWVtID09PSAn5pep5LiKJyB8fCBtZXJpZGllbSA9PT0gJ+S4iuWNiCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfkuK3ljYgnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgPj0gMTEgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+S4i+WNiCcgfHwgbWVyaWRpZW0gPT09ICfmmZrkuIonKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIHZhciBobSA9IGhvdXIgKiAxMDAgKyBtaW51dGU7XG4gICAgICAgICAgICBpZiAoaG0gPCA2MDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+WHjOaZqCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhtIDwgOTAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfml6nkuIonO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChobSA8IDExMzApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+S4iuWNiCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhtIDwgMTIzMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5Lit5Y2IJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG0gPCAxODAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfkuIvljYgnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+aZmuS4iic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW+S7iuWkqV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vmmI7lpKldIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnW+S4i11kZGRkIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb5pio5aSpXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1vkuIpdZGRkZCBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0o5pelfOaciHzpgLEpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlciwgcGVyaW9kKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHBlcmlvZCkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0QnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0RERCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAn5pelJztcbiAgICAgICAgICAgICAgICBjYXNlICdNJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICfmnIgnO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3cnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ1cnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJ+mAsSc7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICclc+WFpycsXG4gICAgICAgICAgICBwYXN0OiAnJXPliY0nLFxuICAgICAgICAgICAgczogJ+W5vuenkicsXG4gICAgICAgICAgICBzczogJyVkIOenkicsXG4gICAgICAgICAgICBtOiAnMSDliIbpkJgnLFxuICAgICAgICAgICAgbW06ICclZCDliIbpkJgnLFxuICAgICAgICAgICAgaDogJzEg5bCP5pmCJyxcbiAgICAgICAgICAgIGhoOiAnJWQg5bCP5pmCJyxcbiAgICAgICAgICAgIGQ6ICcxIOWkqScsXG4gICAgICAgICAgICBkZDogJyVkIOWkqScsXG4gICAgICAgICAgICBNOiAnMSDlgIvmnIgnLFxuICAgICAgICAgICAgTU06ICclZCDlgIvmnIgnLFxuICAgICAgICAgICAgeTogJzEg5bm0JyxcbiAgICAgICAgICAgIHl5OiAnJWQg5bm0JyxcbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiB6aE1vO1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/zh-mo.js\n");

/***/ }),

/***/ "./node_modules/moment/locale/zh-tw.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/zh-tw.js ***!
  \*********************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Chinese (Taiwan) [zh-tw]\n//! author : Ben : https://github.com/ben-lin\n//! author : Chris Lam : https://github.com/hehachris\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   0\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var zhTw = moment.defineLocale('zh-tw', {\n        months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split(\n            '_'\n        ),\n        monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(\n            '_'\n        ),\n        weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n        weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'),\n        weekdaysMin: '日_一_二_三_四_五_六'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY/MM/DD',\n            LL: 'YYYY年M月D日',\n            LLL: 'YYYY年M月D日 HH:mm',\n            LLLL: 'YYYY年M月D日dddd HH:mm',\n            l: 'YYYY/M/D',\n            ll: 'YYYY年M月D日',\n            lll: 'YYYY年M月D日 HH:mm',\n            llll: 'YYYY年M月D日dddd HH:mm',\n        },\n        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n                return hour;\n            } else if (meridiem === '中午') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === '下午' || meridiem === '晚上') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            var hm = hour * 100 + minute;\n            if (hm < 600) {\n                return '凌晨';\n            } else if (hm < 900) {\n                return '早上';\n            } else if (hm < 1130) {\n                return '上午';\n            } else if (hm < 1230) {\n                return '中午';\n            } else if (hm < 1800) {\n                return '下午';\n            } else {\n                return '晚上';\n            }\n        },\n        calendar: {\n            sameDay: '[今天] LT',\n            nextDay: '[明天] LT',\n            nextWeek: '[下]dddd LT',\n            lastDay: '[昨天] LT',\n            lastWeek: '[上]dddd LT',\n            sameElse: 'L',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(日|月|週)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '日';\n                case 'M':\n                    return number + '月';\n                case 'w':\n                case 'W':\n                    return number + '週';\n                default:\n                    return number;\n            }\n        },\n        relativeTime: {\n            future: '%s後',\n            past: '%s前',\n            s: '幾秒',\n            ss: '%d 秒',\n            m: '1 分鐘',\n            mm: '%d 分鐘',\n            h: '1 小時',\n            hh: '%d 小時',\n            d: '1 天',\n            dd: '%d 天',\n            M: '1 個月',\n            MM: '%d 個月',\n            y: '1 年',\n            yy: '%d 年',\n        },\n    });\n\n    return zhTw;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS96aC10dy5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsa0RBQVc7QUFDckUsR0FBRyxDQUNzQjtBQUN6QixDQUFDLDRCQUE0Qjs7QUFFN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxvQ0FBb0MsSUFBSTtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS96aC10dy5qcz8zODg4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBDaGluZXNlIChUYWl3YW4pIFt6aC10d11cbi8vISBhdXRob3IgOiBCZW4gOiBodHRwczovL2dpdGh1Yi5jb20vYmVuLWxpblxuLy8hIGF1dGhvciA6IENocmlzIExhbSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9oZWhhY2hyaXNcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciB6aFR3ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnemgtdHcnLCB7XG4gICAgICAgIG1vbnRoczogJ+S4gOaciF/kuozmnIhf5LiJ5pyIX+Wbm+aciF/kupTmnIhf5YWt5pyIX+S4g+aciF/lhavmnIhf5Lmd5pyIX+WNgeaciF/ljYHkuIDmnIhf5Y2B5LqM5pyIJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJzHmnIhfMuaciF8z5pyIXzTmnIhfNeaciF825pyIXzfmnIhfOOaciF855pyIXzEw5pyIXzEx5pyIXzEy5pyIJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5czogJ+aYn+acn+aXpV/mmJ/mnJ/kuIBf5pif5pyf5LqMX+aYn+acn+S4iV/mmJ/mnJ/lm5tf5pif5pyf5LqUX+aYn+acn+WFrScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ+mAseaXpV/pgLHkuIBf6YCx5LqMX+mAseS4iV/pgLHlm5tf6YCx5LqUX+mAseWFrScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfml6Vf5LiAX+S6jF/kuIlf5ZubX+S6lF/lha0nLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdZWVlZL01NL0REJyxcbiAgICAgICAgICAgIExMOiAnWVlZWeW5tE3mnIhE5pelJyxcbiAgICAgICAgICAgIExMTDogJ1lZWVnlubRN5pyIROaXpSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnWVlZWeW5tE3mnIhE5pelZGRkZCBISDptbScsXG4gICAgICAgICAgICBsOiAnWVlZWS9NL0QnLFxuICAgICAgICAgICAgbGw6ICdZWVlZ5bm0TeaciETml6UnLFxuICAgICAgICAgICAgbGxsOiAnWVlZWeW5tE3mnIhE5pelIEhIOm1tJyxcbiAgICAgICAgICAgIGxsbGw6ICdZWVlZ5bm0TeaciETml6VkZGRkIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL+WHjOaZqHzml6nkuIp85LiK5Y2IfOS4reWNiHzkuIvljYh85pma5LiKLyxcbiAgICAgICAgbWVyaWRpZW1Ib3VyOiBmdW5jdGlvbiAoaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1lcmlkaWVtID09PSAn5YeM5pmoJyB8fCBtZXJpZGllbSA9PT0gJ+aXqeS4iicgfHwgbWVyaWRpZW0gPT09ICfkuIrljYgnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn5Lit5Y2IJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyID49IDExID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfkuIvljYgnIHx8IG1lcmlkaWVtID09PSAn5pma5LiKJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyICsgMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICB2YXIgaG0gPSBob3VyICogMTAwICsgbWludXRlO1xuICAgICAgICAgICAgaWYgKGhtIDwgNjAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICflh4zmmagnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChobSA8IDkwMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5pep5LiKJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG0gPCAxMTMwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfkuIrljYgnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChobSA8IDEyMzApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+S4reWNiCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhtIDwgMTgwMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5LiL5Y2IJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfmmZrkuIonO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vku4rlpKldIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb5piO5aSpXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ1vkuItdZGRkZCBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW+aYqOWkqV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdb5LiKXWRkZGQgTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KOaXpXzmnIh86YCxKS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIsIHBlcmlvZCkge1xuICAgICAgICAgICAgc3dpdGNoIChwZXJpb2QpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgICAgICBjYXNlICdEJzpcbiAgICAgICAgICAgICAgICBjYXNlICdEREQnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJ+aXpSc7XG4gICAgICAgICAgICAgICAgY2FzZSAnTSc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAn5pyIJztcbiAgICAgICAgICAgICAgICBjYXNlICd3JzpcbiAgICAgICAgICAgICAgICBjYXNlICdXJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICfpgLEnO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXPlvownLFxuICAgICAgICAgICAgcGFzdDogJyVz5YmNJyxcbiAgICAgICAgICAgIHM6ICflub7np5InLFxuICAgICAgICAgICAgc3M6ICclZCDnp5InLFxuICAgICAgICAgICAgbTogJzEg5YiG6ZCYJyxcbiAgICAgICAgICAgIG1tOiAnJWQg5YiG6ZCYJyxcbiAgICAgICAgICAgIGg6ICcxIOWwj+aZgicsXG4gICAgICAgICAgICBoaDogJyVkIOWwj+aZgicsXG4gICAgICAgICAgICBkOiAnMSDlpKknLFxuICAgICAgICAgICAgZGQ6ICclZCDlpKknLFxuICAgICAgICAgICAgTTogJzEg5YCL5pyIJyxcbiAgICAgICAgICAgIE1NOiAnJWQg5YCL5pyIJyxcbiAgICAgICAgICAgIHk6ICcxIOW5tCcsXG4gICAgICAgICAgICB5eTogJyVkIOW5tCcsXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gemhUdztcblxufSkpKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/zh-tw.js\n");

/***/ }),

/***/ "./node_modules/moment/locale sync recursive ^\\.\\/.*$":
/*!***************************************************!*\
  !*** ./node_modules/moment/locale/ sync ^\.\/.*$ ***!
  \***************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var map = {
	"./af": "./node_modules/moment/locale/af.js",
	"./af.js": "./node_modules/moment/locale/af.js",
	"./ar": "./node_modules/moment/locale/ar.js",
	"./ar-dz": "./node_modules/moment/locale/ar-dz.js",
	"./ar-dz.js": "./node_modules/moment/locale/ar-dz.js",
	"./ar-kw": "./node_modules/moment/locale/ar-kw.js",
	"./ar-kw.js": "./node_modules/moment/locale/ar-kw.js",
	"./ar-ly": "./node_modules/moment/locale/ar-ly.js",
	"./ar-ly.js": "./node_modules/moment/locale/ar-ly.js",
	"./ar-ma": "./node_modules/moment/locale/ar-ma.js",
	"./ar-ma.js": "./node_modules/moment/locale/ar-ma.js",
	"./ar-sa": "./node_modules/moment/locale/ar-sa.js",
	"./ar-sa.js": "./node_modules/moment/locale/ar-sa.js",
	"./ar-tn": "./node_modules/moment/locale/ar-tn.js",
	"./ar-tn.js": "./node_modules/moment/locale/ar-tn.js",
	"./ar.js": "./node_modules/moment/locale/ar.js",
	"./az": "./node_modules/moment/locale/az.js",
	"./az.js": "./node_modules/moment/locale/az.js",
	"./be": "./node_modules/moment/locale/be.js",
	"./be.js": "./node_modules/moment/locale/be.js",
	"./bg": "./node_modules/moment/locale/bg.js",
	"./bg.js": "./node_modules/moment/locale/bg.js",
	"./bm": "./node_modules/moment/locale/bm.js",
	"./bm.js": "./node_modules/moment/locale/bm.js",
	"./bn": "./node_modules/moment/locale/bn.js",
	"./bn-bd": "./node_modules/moment/locale/bn-bd.js",
	"./bn-bd.js": "./node_modules/moment/locale/bn-bd.js",
	"./bn.js": "./node_modules/moment/locale/bn.js",
	"./bo": "./node_modules/moment/locale/bo.js",
	"./bo.js": "./node_modules/moment/locale/bo.js",
	"./br": "./node_modules/moment/locale/br.js",
	"./br.js": "./node_modules/moment/locale/br.js",
	"./bs": "./node_modules/moment/locale/bs.js",
	"./bs.js": "./node_modules/moment/locale/bs.js",
	"./ca": "./node_modules/moment/locale/ca.js",
	"./ca.js": "./node_modules/moment/locale/ca.js",
	"./cs": "./node_modules/moment/locale/cs.js",
	"./cs.js": "./node_modules/moment/locale/cs.js",
	"./cv": "./node_modules/moment/locale/cv.js",
	"./cv.js": "./node_modules/moment/locale/cv.js",
	"./cy": "./node_modules/moment/locale/cy.js",
	"./cy.js": "./node_modules/moment/locale/cy.js",
	"./da": "./node_modules/moment/locale/da.js",
	"./da.js": "./node_modules/moment/locale/da.js",
	"./de": "./node_modules/moment/locale/de.js",
	"./de-at": "./node_modules/moment/locale/de-at.js",
	"./de-at.js": "./node_modules/moment/locale/de-at.js",
	"./de-ch": "./node_modules/moment/locale/de-ch.js",
	"./de-ch.js": "./node_modules/moment/locale/de-ch.js",
	"./de.js": "./node_modules/moment/locale/de.js",
	"./dv": "./node_modules/moment/locale/dv.js",
	"./dv.js": "./node_modules/moment/locale/dv.js",
	"./el": "./node_modules/moment/locale/el.js",
	"./el.js": "./node_modules/moment/locale/el.js",
	"./en-au": "./node_modules/moment/locale/en-au.js",
	"./en-au.js": "./node_modules/moment/locale/en-au.js",
	"./en-ca": "./node_modules/moment/locale/en-ca.js",
	"./en-ca.js": "./node_modules/moment/locale/en-ca.js",
	"./en-gb": "./node_modules/moment/locale/en-gb.js",
	"./en-gb.js": "./node_modules/moment/locale/en-gb.js",
	"./en-ie": "./node_modules/moment/locale/en-ie.js",
	"./en-ie.js": "./node_modules/moment/locale/en-ie.js",
	"./en-il": "./node_modules/moment/locale/en-il.js",
	"./en-il.js": "./node_modules/moment/locale/en-il.js",
	"./en-in": "./node_modules/moment/locale/en-in.js",
	"./en-in.js": "./node_modules/moment/locale/en-in.js",
	"./en-nz": "./node_modules/moment/locale/en-nz.js",
	"./en-nz.js": "./node_modules/moment/locale/en-nz.js",
	"./en-sg": "./node_modules/moment/locale/en-sg.js",
	"./en-sg.js": "./node_modules/moment/locale/en-sg.js",
	"./eo": "./node_modules/moment/locale/eo.js",
	"./eo.js": "./node_modules/moment/locale/eo.js",
	"./es": "./node_modules/moment/locale/es.js",
	"./es-do": "./node_modules/moment/locale/es-do.js",
	"./es-do.js": "./node_modules/moment/locale/es-do.js",
	"./es-mx": "./node_modules/moment/locale/es-mx.js",
	"./es-mx.js": "./node_modules/moment/locale/es-mx.js",
	"./es-us": "./node_modules/moment/locale/es-us.js",
	"./es-us.js": "./node_modules/moment/locale/es-us.js",
	"./es.js": "./node_modules/moment/locale/es.js",
	"./et": "./node_modules/moment/locale/et.js",
	"./et.js": "./node_modules/moment/locale/et.js",
	"./eu": "./node_modules/moment/locale/eu.js",
	"./eu.js": "./node_modules/moment/locale/eu.js",
	"./fa": "./node_modules/moment/locale/fa.js",
	"./fa.js": "./node_modules/moment/locale/fa.js",
	"./fi": "./node_modules/moment/locale/fi.js",
	"./fi.js": "./node_modules/moment/locale/fi.js",
	"./fil": "./node_modules/moment/locale/fil.js",
	"./fil.js": "./node_modules/moment/locale/fil.js",
	"./fo": "./node_modules/moment/locale/fo.js",
	"./fo.js": "./node_modules/moment/locale/fo.js",
	"./fr": "./node_modules/moment/locale/fr.js",
	"./fr-ca": "./node_modules/moment/locale/fr-ca.js",
	"./fr-ca.js": "./node_modules/moment/locale/fr-ca.js",
	"./fr-ch": "./node_modules/moment/locale/fr-ch.js",
	"./fr-ch.js": "./node_modules/moment/locale/fr-ch.js",
	"./fr.js": "./node_modules/moment/locale/fr.js",
	"./fy": "./node_modules/moment/locale/fy.js",
	"./fy.js": "./node_modules/moment/locale/fy.js",
	"./ga": "./node_modules/moment/locale/ga.js",
	"./ga.js": "./node_modules/moment/locale/ga.js",
	"./gd": "./node_modules/moment/locale/gd.js",
	"./gd.js": "./node_modules/moment/locale/gd.js",
	"./gl": "./node_modules/moment/locale/gl.js",
	"./gl.js": "./node_modules/moment/locale/gl.js",
	"./gom-deva": "./node_modules/moment/locale/gom-deva.js",
	"./gom-deva.js": "./node_modules/moment/locale/gom-deva.js",
	"./gom-latn": "./node_modules/moment/locale/gom-latn.js",
	"./gom-latn.js": "./node_modules/moment/locale/gom-latn.js",
	"./gu": "./node_modules/moment/locale/gu.js",
	"./gu.js": "./node_modules/moment/locale/gu.js",
	"./he": "./node_modules/moment/locale/he.js",
	"./he.js": "./node_modules/moment/locale/he.js",
	"./hi": "./node_modules/moment/locale/hi.js",
	"./hi.js": "./node_modules/moment/locale/hi.js",
	"./hr": "./node_modules/moment/locale/hr.js",
	"./hr.js": "./node_modules/moment/locale/hr.js",
	"./hu": "./node_modules/moment/locale/hu.js",
	"./hu.js": "./node_modules/moment/locale/hu.js",
	"./hy-am": "./node_modules/moment/locale/hy-am.js",
	"./hy-am.js": "./node_modules/moment/locale/hy-am.js",
	"./id": "./node_modules/moment/locale/id.js",
	"./id.js": "./node_modules/moment/locale/id.js",
	"./is": "./node_modules/moment/locale/is.js",
	"./is.js": "./node_modules/moment/locale/is.js",
	"./it": "./node_modules/moment/locale/it.js",
	"./it-ch": "./node_modules/moment/locale/it-ch.js",
	"./it-ch.js": "./node_modules/moment/locale/it-ch.js",
	"./it.js": "./node_modules/moment/locale/it.js",
	"./ja": "./node_modules/moment/locale/ja.js",
	"./ja.js": "./node_modules/moment/locale/ja.js",
	"./jv": "./node_modules/moment/locale/jv.js",
	"./jv.js": "./node_modules/moment/locale/jv.js",
	"./ka": "./node_modules/moment/locale/ka.js",
	"./ka.js": "./node_modules/moment/locale/ka.js",
	"./kk": "./node_modules/moment/locale/kk.js",
	"./kk.js": "./node_modules/moment/locale/kk.js",
	"./km": "./node_modules/moment/locale/km.js",
	"./km.js": "./node_modules/moment/locale/km.js",
	"./kn": "./node_modules/moment/locale/kn.js",
	"./kn.js": "./node_modules/moment/locale/kn.js",
	"./ko": "./node_modules/moment/locale/ko.js",
	"./ko.js": "./node_modules/moment/locale/ko.js",
	"./ku": "./node_modules/moment/locale/ku.js",
	"./ku.js": "./node_modules/moment/locale/ku.js",
	"./ky": "./node_modules/moment/locale/ky.js",
	"./ky.js": "./node_modules/moment/locale/ky.js",
	"./lb": "./node_modules/moment/locale/lb.js",
	"./lb.js": "./node_modules/moment/locale/lb.js",
	"./lo": "./node_modules/moment/locale/lo.js",
	"./lo.js": "./node_modules/moment/locale/lo.js",
	"./lt": "./node_modules/moment/locale/lt.js",
	"./lt.js": "./node_modules/moment/locale/lt.js",
	"./lv": "./node_modules/moment/locale/lv.js",
	"./lv.js": "./node_modules/moment/locale/lv.js",
	"./me": "./node_modules/moment/locale/me.js",
	"./me.js": "./node_modules/moment/locale/me.js",
	"./mi": "./node_modules/moment/locale/mi.js",
	"./mi.js": "./node_modules/moment/locale/mi.js",
	"./mk": "./node_modules/moment/locale/mk.js",
	"./mk.js": "./node_modules/moment/locale/mk.js",
	"./ml": "./node_modules/moment/locale/ml.js",
	"./ml.js": "./node_modules/moment/locale/ml.js",
	"./mn": "./node_modules/moment/locale/mn.js",
	"./mn.js": "./node_modules/moment/locale/mn.js",
	"./mr": "./node_modules/moment/locale/mr.js",
	"./mr.js": "./node_modules/moment/locale/mr.js",
	"./ms": "./node_modules/moment/locale/ms.js",
	"./ms-my": "./node_modules/moment/locale/ms-my.js",
	"./ms-my.js": "./node_modules/moment/locale/ms-my.js",
	"./ms.js": "./node_modules/moment/locale/ms.js",
	"./mt": "./node_modules/moment/locale/mt.js",
	"./mt.js": "./node_modules/moment/locale/mt.js",
	"./my": "./node_modules/moment/locale/my.js",
	"./my.js": "./node_modules/moment/locale/my.js",
	"./nb": "./node_modules/moment/locale/nb.js",
	"./nb.js": "./node_modules/moment/locale/nb.js",
	"./ne": "./node_modules/moment/locale/ne.js",
	"./ne.js": "./node_modules/moment/locale/ne.js",
	"./nl": "./node_modules/moment/locale/nl.js",
	"./nl-be": "./node_modules/moment/locale/nl-be.js",
	"./nl-be.js": "./node_modules/moment/locale/nl-be.js",
	"./nl.js": "./node_modules/moment/locale/nl.js",
	"./nn": "./node_modules/moment/locale/nn.js",
	"./nn.js": "./node_modules/moment/locale/nn.js",
	"./oc-lnc": "./node_modules/moment/locale/oc-lnc.js",
	"./oc-lnc.js": "./node_modules/moment/locale/oc-lnc.js",
	"./pa-in": "./node_modules/moment/locale/pa-in.js",
	"./pa-in.js": "./node_modules/moment/locale/pa-in.js",
	"./pl": "./node_modules/moment/locale/pl.js",
	"./pl.js": "./node_modules/moment/locale/pl.js",
	"./pt": "./node_modules/moment/locale/pt.js",
	"./pt-br": "./node_modules/moment/locale/pt-br.js",
	"./pt-br.js": "./node_modules/moment/locale/pt-br.js",
	"./pt.js": "./node_modules/moment/locale/pt.js",
	"./ro": "./node_modules/moment/locale/ro.js",
	"./ro.js": "./node_modules/moment/locale/ro.js",
	"./ru": "./node_modules/moment/locale/ru.js",
	"./ru.js": "./node_modules/moment/locale/ru.js",
	"./sd": "./node_modules/moment/locale/sd.js",
	"./sd.js": "./node_modules/moment/locale/sd.js",
	"./se": "./node_modules/moment/locale/se.js",
	"./se.js": "./node_modules/moment/locale/se.js",
	"./si": "./node_modules/moment/locale/si.js",
	"./si.js": "./node_modules/moment/locale/si.js",
	"./sk": "./node_modules/moment/locale/sk.js",
	"./sk.js": "./node_modules/moment/locale/sk.js",
	"./sl": "./node_modules/moment/locale/sl.js",
	"./sl.js": "./node_modules/moment/locale/sl.js",
	"./sq": "./node_modules/moment/locale/sq.js",
	"./sq.js": "./node_modules/moment/locale/sq.js",
	"./sr": "./node_modules/moment/locale/sr.js",
	"./sr-cyrl": "./node_modules/moment/locale/sr-cyrl.js",
	"./sr-cyrl.js": "./node_modules/moment/locale/sr-cyrl.js",
	"./sr.js": "./node_modules/moment/locale/sr.js",
	"./ss": "./node_modules/moment/locale/ss.js",
	"./ss.js": "./node_modules/moment/locale/ss.js",
	"./sv": "./node_modules/moment/locale/sv.js",
	"./sv.js": "./node_modules/moment/locale/sv.js",
	"./sw": "./node_modules/moment/locale/sw.js",
	"./sw.js": "./node_modules/moment/locale/sw.js",
	"./ta": "./node_modules/moment/locale/ta.js",
	"./ta.js": "./node_modules/moment/locale/ta.js",
	"./te": "./node_modules/moment/locale/te.js",
	"./te.js": "./node_modules/moment/locale/te.js",
	"./tet": "./node_modules/moment/locale/tet.js",
	"./tet.js": "./node_modules/moment/locale/tet.js",
	"./tg": "./node_modules/moment/locale/tg.js",
	"./tg.js": "./node_modules/moment/locale/tg.js",
	"./th": "./node_modules/moment/locale/th.js",
	"./th.js": "./node_modules/moment/locale/th.js",
	"./tk": "./node_modules/moment/locale/tk.js",
	"./tk.js": "./node_modules/moment/locale/tk.js",
	"./tl-ph": "./node_modules/moment/locale/tl-ph.js",
	"./tl-ph.js": "./node_modules/moment/locale/tl-ph.js",
	"./tlh": "./node_modules/moment/locale/tlh.js",
	"./tlh.js": "./node_modules/moment/locale/tlh.js",
	"./tr": "./node_modules/moment/locale/tr.js",
	"./tr.js": "./node_modules/moment/locale/tr.js",
	"./tzl": "./node_modules/moment/locale/tzl.js",
	"./tzl.js": "./node_modules/moment/locale/tzl.js",
	"./tzm": "./node_modules/moment/locale/tzm.js",
	"./tzm-latn": "./node_modules/moment/locale/tzm-latn.js",
	"./tzm-latn.js": "./node_modules/moment/locale/tzm-latn.js",
	"./tzm.js": "./node_modules/moment/locale/tzm.js",
	"./ug-cn": "./node_modules/moment/locale/ug-cn.js",
	"./ug-cn.js": "./node_modules/moment/locale/ug-cn.js",
	"./uk": "./node_modules/moment/locale/uk.js",
	"./uk.js": "./node_modules/moment/locale/uk.js",
	"./ur": "./node_modules/moment/locale/ur.js",
	"./ur.js": "./node_modules/moment/locale/ur.js",
	"./uz": "./node_modules/moment/locale/uz.js",
	"./uz-latn": "./node_modules/moment/locale/uz-latn.js",
	"./uz-latn.js": "./node_modules/moment/locale/uz-latn.js",
	"./uz.js": "./node_modules/moment/locale/uz.js",
	"./vi": "./node_modules/moment/locale/vi.js",
	"./vi.js": "./node_modules/moment/locale/vi.js",
	"./x-pseudo": "./node_modules/moment/locale/x-pseudo.js",
	"./x-pseudo.js": "./node_modules/moment/locale/x-pseudo.js",
	"./yo": "./node_modules/moment/locale/yo.js",
	"./yo.js": "./node_modules/moment/locale/yo.js",
	"./zh-cn": "./node_modules/moment/locale/zh-cn.js",
	"./zh-cn.js": "./node_modules/moment/locale/zh-cn.js",
	"./zh-hk": "./node_modules/moment/locale/zh-hk.js",
	"./zh-hk.js": "./node_modules/moment/locale/zh-hk.js",
	"./zh-mo": "./node_modules/moment/locale/zh-mo.js",
	"./zh-mo.js": "./node_modules/moment/locale/zh-mo.js",
	"./zh-tw": "./node_modules/moment/locale/zh-tw.js",
	"./zh-tw.js": "./node_modules/moment/locale/zh-tw.js"
};


function webpackContext(req) {
	var id = webpackContextResolve(req);
	return __webpack_require__(id);
}
function webpackContextResolve(req) {
	if(!__webpack_require__.o(map, req)) {
		var e = new Error("Cannot find module '" + req + "'");
		e.code = 'MODULE_NOT_FOUND';
		throw e;
	}
	return map[req];
}
webpackContext.keys = function webpackContextKeys() {
	return Object.keys(map);
};
webpackContext.resolve = webpackContextResolve;
module.exports = webpackContext;
webpackContext.id = "./node_modules/moment/locale sync recursive ^\\.\\/.*$";

/***/ }),

/***/ "./node_modules/moment/moment.js":
/*!***************************************!*\
  !*** ./node_modules/moment/moment.js ***!
  \***************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {

eval("/* module decorator */ module = __webpack_require__.nmd(module);\n//! moment.js\n//! version : 2.29.4\n//! authors : Tim Wood, Iskren Chernev, Moment.js contributors\n//! license : MIT\n//! momentjs.com\n\n;(function (global, factory) {\n     true ? module.exports = factory() :\n    0\n}(this, (function () { 'use strict';\n\n    var hookCallback;\n\n    function hooks() {\n        return hookCallback.apply(null, arguments);\n    }\n\n    // This is done to register the method called with moment()\n    // without creating circular dependencies.\n    function setHookCallback(callback) {\n        hookCallback = callback;\n    }\n\n    function isArray(input) {\n        return (\n            input instanceof Array ||\n            Object.prototype.toString.call(input) === '[object Array]'\n        );\n    }\n\n    function isObject(input) {\n        // IE8 will treat undefined and null as object if it wasn't for\n        // input != null\n        return (\n            input != null &&\n            Object.prototype.toString.call(input) === '[object Object]'\n        );\n    }\n\n    function hasOwnProp(a, b) {\n        return Object.prototype.hasOwnProperty.call(a, b);\n    }\n\n    function isObjectEmpty(obj) {\n        if (Object.getOwnPropertyNames) {\n            return Object.getOwnPropertyNames(obj).length === 0;\n        } else {\n            var k;\n            for (k in obj) {\n                if (hasOwnProp(obj, k)) {\n                    return false;\n                }\n            }\n            return true;\n        }\n    }\n\n    function isUndefined(input) {\n        return input === void 0;\n    }\n\n    function isNumber(input) {\n        return (\n            typeof input === 'number' ||\n            Object.prototype.toString.call(input) === '[object Number]'\n        );\n    }\n\n    function isDate(input) {\n        return (\n            input instanceof Date ||\n            Object.prototype.toString.call(input) === '[object Date]'\n        );\n    }\n\n    function map(arr, fn) {\n        var res = [],\n            i,\n            arrLen = arr.length;\n        for (i = 0; i < arrLen; ++i) {\n            res.push(fn(arr[i], i));\n        }\n        return res;\n    }\n\n    function extend(a, b) {\n        for (var i in b) {\n            if (hasOwnProp(b, i)) {\n                a[i] = b[i];\n            }\n        }\n\n        if (hasOwnProp(b, 'toString')) {\n            a.toString = b.toString;\n        }\n\n        if (hasOwnProp(b, 'valueOf')) {\n            a.valueOf = b.valueOf;\n        }\n\n        return a;\n    }\n\n    function createUTC(input, format, locale, strict) {\n        return createLocalOrUTC(input, format, locale, strict, true).utc();\n    }\n\n    function defaultParsingFlags() {\n        // We need to deep clone this object.\n        return {\n            empty: false,\n            unusedTokens: [],\n            unusedInput: [],\n            overflow: -2,\n            charsLeftOver: 0,\n            nullInput: false,\n            invalidEra: null,\n            invalidMonth: null,\n            invalidFormat: false,\n            userInvalidated: false,\n            iso: false,\n            parsedDateParts: [],\n            era: null,\n            meridiem: null,\n            rfc2822: false,\n            weekdayMismatch: false,\n        };\n    }\n\n    function getParsingFlags(m) {\n        if (m._pf == null) {\n            m._pf = defaultParsingFlags();\n        }\n        return m._pf;\n    }\n\n    var some;\n    if (Array.prototype.some) {\n        some = Array.prototype.some;\n    } else {\n        some = function (fun) {\n            var t = Object(this),\n                len = t.length >>> 0,\n                i;\n\n            for (i = 0; i < len; i++) {\n                if (i in t && fun.call(this, t[i], i, t)) {\n                    return true;\n                }\n            }\n\n            return false;\n        };\n    }\n\n    function isValid(m) {\n        if (m._isValid == null) {\n            var flags = getParsingFlags(m),\n                parsedParts = some.call(flags.parsedDateParts, function (i) {\n                    return i != null;\n                }),\n                isNowValid =\n                    !isNaN(m._d.getTime()) &&\n                    flags.overflow < 0 &&\n                    !flags.empty &&\n                    !flags.invalidEra &&\n                    !flags.invalidMonth &&\n                    !flags.invalidWeekday &&\n                    !flags.weekdayMismatch &&\n                    !flags.nullInput &&\n                    !flags.invalidFormat &&\n                    !flags.userInvalidated &&\n                    (!flags.meridiem || (flags.meridiem && parsedParts));\n\n            if (m._strict) {\n                isNowValid =\n                    isNowValid &&\n                    flags.charsLeftOver === 0 &&\n                    flags.unusedTokens.length === 0 &&\n                    flags.bigHour === undefined;\n            }\n\n            if (Object.isFrozen == null || !Object.isFrozen(m)) {\n                m._isValid = isNowValid;\n            } else {\n                return isNowValid;\n            }\n        }\n        return m._isValid;\n    }\n\n    function createInvalid(flags) {\n        var m = createUTC(NaN);\n        if (flags != null) {\n            extend(getParsingFlags(m), flags);\n        } else {\n            getParsingFlags(m).userInvalidated = true;\n        }\n\n        return m;\n    }\n\n    // Plugins that add properties should also add the key here (null value),\n    // so we can properly clone ourselves.\n    var momentProperties = (hooks.momentProperties = []),\n        updateInProgress = false;\n\n    function copyConfig(to, from) {\n        var i,\n            prop,\n            val,\n            momentPropertiesLen = momentProperties.length;\n\n        if (!isUndefined(from._isAMomentObject)) {\n            to._isAMomentObject = from._isAMomentObject;\n        }\n        if (!isUndefined(from._i)) {\n            to._i = from._i;\n        }\n        if (!isUndefined(from._f)) {\n            to._f = from._f;\n        }\n        if (!isUndefined(from._l)) {\n            to._l = from._l;\n        }\n        if (!isUndefined(from._strict)) {\n            to._strict = from._strict;\n        }\n        if (!isUndefined(from._tzm)) {\n            to._tzm = from._tzm;\n        }\n        if (!isUndefined(from._isUTC)) {\n            to._isUTC = from._isUTC;\n        }\n        if (!isUndefined(from._offset)) {\n            to._offset = from._offset;\n        }\n        if (!isUndefined(from._pf)) {\n            to._pf = getParsingFlags(from);\n        }\n        if (!isUndefined(from._locale)) {\n            to._locale = from._locale;\n        }\n\n        if (momentPropertiesLen > 0) {\n            for (i = 0; i < momentPropertiesLen; i++) {\n                prop = momentProperties[i];\n                val = from[prop];\n                if (!isUndefined(val)) {\n                    to[prop] = val;\n                }\n            }\n        }\n\n        return to;\n    }\n\n    // Moment prototype object\n    function Moment(config) {\n        copyConfig(this, config);\n        this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n        if (!this.isValid()) {\n            this._d = new Date(NaN);\n        }\n        // Prevent infinite loop in case updateOffset creates new moment\n        // objects.\n        if (updateInProgress === false) {\n            updateInProgress = true;\n            hooks.updateOffset(this);\n            updateInProgress = false;\n        }\n    }\n\n    function isMoment(obj) {\n        return (\n            obj instanceof Moment || (obj != null && obj._isAMomentObject != null)\n        );\n    }\n\n    function warn(msg) {\n        if (\n            hooks.suppressDeprecationWarnings === false &&\n            typeof console !== 'undefined' &&\n            console.warn\n        ) {\n            console.warn('Deprecation warning: ' + msg);\n        }\n    }\n\n    function deprecate(msg, fn) {\n        var firstTime = true;\n\n        return extend(function () {\n            if (hooks.deprecationHandler != null) {\n                hooks.deprecationHandler(null, msg);\n            }\n            if (firstTime) {\n                var args = [],\n                    arg,\n                    i,\n                    key,\n                    argLen = arguments.length;\n                for (i = 0; i < argLen; i++) {\n                    arg = '';\n                    if (typeof arguments[i] === 'object') {\n                        arg += '\\n[' + i + '] ';\n                        for (key in arguments[0]) {\n                            if (hasOwnProp(arguments[0], key)) {\n                                arg += key + ': ' + arguments[0][key] + ', ';\n                            }\n                        }\n                        arg = arg.slice(0, -2); // Remove trailing comma and space\n                    } else {\n                        arg = arguments[i];\n                    }\n                    args.push(arg);\n                }\n                warn(\n                    msg +\n                        '\\nArguments: ' +\n                        Array.prototype.slice.call(args).join('') +\n                        '\\n' +\n                        new Error().stack\n                );\n                firstTime = false;\n            }\n            return fn.apply(this, arguments);\n        }, fn);\n    }\n\n    var deprecations = {};\n\n    function deprecateSimple(name, msg) {\n        if (hooks.deprecationHandler != null) {\n            hooks.deprecationHandler(name, msg);\n        }\n        if (!deprecations[name]) {\n            warn(msg);\n            deprecations[name] = true;\n        }\n    }\n\n    hooks.suppressDeprecationWarnings = false;\n    hooks.deprecationHandler = null;\n\n    function isFunction(input) {\n        return (\n            (typeof Function !== 'undefined' && input instanceof Function) ||\n            Object.prototype.toString.call(input) === '[object Function]'\n        );\n    }\n\n    function set(config) {\n        var prop, i;\n        for (i in config) {\n            if (hasOwnProp(config, i)) {\n                prop = config[i];\n                if (isFunction(prop)) {\n                    this[i] = prop;\n                } else {\n                    this['_' + i] = prop;\n                }\n            }\n        }\n        this._config = config;\n        // Lenient ordinal parsing accepts just a number in addition to\n        // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\n        // TODO: Remove \"ordinalParse\" fallback in next major release.\n        this._dayOfMonthOrdinalParseLenient = new RegExp(\n            (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +\n                '|' +\n                /\\d{1,2}/.source\n        );\n    }\n\n    function mergeConfigs(parentConfig, childConfig) {\n        var res = extend({}, parentConfig),\n            prop;\n        for (prop in childConfig) {\n            if (hasOwnProp(childConfig, prop)) {\n                if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n                    res[prop] = {};\n                    extend(res[prop], parentConfig[prop]);\n                    extend(res[prop], childConfig[prop]);\n                } else if (childConfig[prop] != null) {\n                    res[prop] = childConfig[prop];\n                } else {\n                    delete res[prop];\n                }\n            }\n        }\n        for (prop in parentConfig) {\n            if (\n                hasOwnProp(parentConfig, prop) &&\n                !hasOwnProp(childConfig, prop) &&\n                isObject(parentConfig[prop])\n            ) {\n                // make sure changes to properties don't modify parent config\n                res[prop] = extend({}, res[prop]);\n            }\n        }\n        return res;\n    }\n\n    function Locale(config) {\n        if (config != null) {\n            this.set(config);\n        }\n    }\n\n    var keys;\n\n    if (Object.keys) {\n        keys = Object.keys;\n    } else {\n        keys = function (obj) {\n            var i,\n                res = [];\n            for (i in obj) {\n                if (hasOwnProp(obj, i)) {\n                    res.push(i);\n                }\n            }\n            return res;\n        };\n    }\n\n    var defaultCalendar = {\n        sameDay: '[Today at] LT',\n        nextDay: '[Tomorrow at] LT',\n        nextWeek: 'dddd [at] LT',\n        lastDay: '[Yesterday at] LT',\n        lastWeek: '[Last] dddd [at] LT',\n        sameElse: 'L',\n    };\n\n    function calendar(key, mom, now) {\n        var output = this._calendar[key] || this._calendar['sameElse'];\n        return isFunction(output) ? output.call(mom, now) : output;\n    }\n\n    function zeroFill(number, targetLength, forceSign) {\n        var absNumber = '' + Math.abs(number),\n            zerosToFill = targetLength - absNumber.length,\n            sign = number >= 0;\n        return (\n            (sign ? (forceSign ? '+' : '') : '-') +\n            Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) +\n            absNumber\n        );\n    }\n\n    var formattingTokens =\n            /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,\n        localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,\n        formatFunctions = {},\n        formatTokenFunctions = {};\n\n    // token:    'M'\n    // padded:   ['MM', 2]\n    // ordinal:  'Mo'\n    // callback: function () { this.month() + 1 }\n    function addFormatToken(token, padded, ordinal, callback) {\n        var func = callback;\n        if (typeof callback === 'string') {\n            func = function () {\n                return this[callback]();\n            };\n        }\n        if (token) {\n            formatTokenFunctions[token] = func;\n        }\n        if (padded) {\n            formatTokenFunctions[padded[0]] = function () {\n                return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n            };\n        }\n        if (ordinal) {\n            formatTokenFunctions[ordinal] = function () {\n                return this.localeData().ordinal(\n                    func.apply(this, arguments),\n                    token\n                );\n            };\n        }\n    }\n\n    function removeFormattingTokens(input) {\n        if (input.match(/\\[[\\s\\S]/)) {\n            return input.replace(/^\\[|\\]$/g, '');\n        }\n        return input.replace(/\\\\/g, '');\n    }\n\n    function makeFormatFunction(format) {\n        var array = format.match(formattingTokens),\n            i,\n            length;\n\n        for (i = 0, length = array.length; i < length; i++) {\n            if (formatTokenFunctions[array[i]]) {\n                array[i] = formatTokenFunctions[array[i]];\n            } else {\n                array[i] = removeFormattingTokens(array[i]);\n            }\n        }\n\n        return function (mom) {\n            var output = '',\n                i;\n            for (i = 0; i < length; i++) {\n                output += isFunction(array[i])\n                    ? array[i].call(mom, format)\n                    : array[i];\n            }\n            return output;\n        };\n    }\n\n    // format date using native date object\n    function formatMoment(m, format) {\n        if (!m.isValid()) {\n            return m.localeData().invalidDate();\n        }\n\n        format = expandFormat(format, m.localeData());\n        formatFunctions[format] =\n            formatFunctions[format] || makeFormatFunction(format);\n\n        return formatFunctions[format](m);\n    }\n\n    function expandFormat(format, locale) {\n        var i = 5;\n\n        function replaceLongDateFormatTokens(input) {\n            return locale.longDateFormat(input) || input;\n        }\n\n        localFormattingTokens.lastIndex = 0;\n        while (i >= 0 && localFormattingTokens.test(format)) {\n            format = format.replace(\n                localFormattingTokens,\n                replaceLongDateFormatTokens\n            );\n            localFormattingTokens.lastIndex = 0;\n            i -= 1;\n        }\n\n        return format;\n    }\n\n    var defaultLongDateFormat = {\n        LTS: 'h:mm:ss A',\n        LT: 'h:mm A',\n        L: 'MM/DD/YYYY',\n        LL: 'MMMM D, YYYY',\n        LLL: 'MMMM D, YYYY h:mm A',\n        LLLL: 'dddd, MMMM D, YYYY h:mm A',\n    };\n\n    function longDateFormat(key) {\n        var format = this._longDateFormat[key],\n            formatUpper = this._longDateFormat[key.toUpperCase()];\n\n        if (format || !formatUpper) {\n            return format;\n        }\n\n        this._longDateFormat[key] = formatUpper\n            .match(formattingTokens)\n            .map(function (tok) {\n                if (\n                    tok === 'MMMM' ||\n                    tok === 'MM' ||\n                    tok === 'DD' ||\n                    tok === 'dddd'\n                ) {\n                    return tok.slice(1);\n                }\n                return tok;\n            })\n            .join('');\n\n        return this._longDateFormat[key];\n    }\n\n    var defaultInvalidDate = 'Invalid date';\n\n    function invalidDate() {\n        return this._invalidDate;\n    }\n\n    var defaultOrdinal = '%d',\n        defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\n    function ordinal(number) {\n        return this._ordinal.replace('%d', number);\n    }\n\n    var defaultRelativeTime = {\n        future: 'in %s',\n        past: '%s ago',\n        s: 'a few seconds',\n        ss: '%d seconds',\n        m: 'a minute',\n        mm: '%d minutes',\n        h: 'an hour',\n        hh: '%d hours',\n        d: 'a day',\n        dd: '%d days',\n        w: 'a week',\n        ww: '%d weeks',\n        M: 'a month',\n        MM: '%d months',\n        y: 'a year',\n        yy: '%d years',\n    };\n\n    function relativeTime(number, withoutSuffix, string, isFuture) {\n        var output = this._relativeTime[string];\n        return isFunction(output)\n            ? output(number, withoutSuffix, string, isFuture)\n            : output.replace(/%d/i, number);\n    }\n\n    function pastFuture(diff, output) {\n        var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n        return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n    }\n\n    var aliases = {};\n\n    function addUnitAlias(unit, shorthand) {\n        var lowerCase = unit.toLowerCase();\n        aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;\n    }\n\n    function normalizeUnits(units) {\n        return typeof units === 'string'\n            ? aliases[units] || aliases[units.toLowerCase()]\n            : undefined;\n    }\n\n    function normalizeObjectUnits(inputObject) {\n        var normalizedInput = {},\n            normalizedProp,\n            prop;\n\n        for (prop in inputObject) {\n            if (hasOwnProp(inputObject, prop)) {\n                normalizedProp = normalizeUnits(prop);\n                if (normalizedProp) {\n                    normalizedInput[normalizedProp] = inputObject[prop];\n                }\n            }\n        }\n\n        return normalizedInput;\n    }\n\n    var priorities = {};\n\n    function addUnitPriority(unit, priority) {\n        priorities[unit] = priority;\n    }\n\n    function getPrioritizedUnits(unitsObj) {\n        var units = [],\n            u;\n        for (u in unitsObj) {\n            if (hasOwnProp(unitsObj, u)) {\n                units.push({ unit: u, priority: priorities[u] });\n            }\n        }\n        units.sort(function (a, b) {\n            return a.priority - b.priority;\n        });\n        return units;\n    }\n\n    function isLeapYear(year) {\n        return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n    }\n\n    function absFloor(number) {\n        if (number < 0) {\n            // -0 -> 0\n            return Math.ceil(number) || 0;\n        } else {\n            return Math.floor(number);\n        }\n    }\n\n    function toInt(argumentForCoercion) {\n        var coercedNumber = +argumentForCoercion,\n            value = 0;\n\n        if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n            value = absFloor(coercedNumber);\n        }\n\n        return value;\n    }\n\n    function makeGetSet(unit, keepTime) {\n        return function (value) {\n            if (value != null) {\n                set$1(this, unit, value);\n                hooks.updateOffset(this, keepTime);\n                return this;\n            } else {\n                return get(this, unit);\n            }\n        };\n    }\n\n    function get(mom, unit) {\n        return mom.isValid()\n            ? mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]()\n            : NaN;\n    }\n\n    function set$1(mom, unit, value) {\n        if (mom.isValid() && !isNaN(value)) {\n            if (\n                unit === 'FullYear' &&\n                isLeapYear(mom.year()) &&\n                mom.month() === 1 &&\n                mom.date() === 29\n            ) {\n                value = toInt(value);\n                mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](\n                    value,\n                    mom.month(),\n                    daysInMonth(value, mom.month())\n                );\n            } else {\n                mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);\n            }\n        }\n    }\n\n    // MOMENTS\n\n    function stringGet(units) {\n        units = normalizeUnits(units);\n        if (isFunction(this[units])) {\n            return this[units]();\n        }\n        return this;\n    }\n\n    function stringSet(units, value) {\n        if (typeof units === 'object') {\n            units = normalizeObjectUnits(units);\n            var prioritized = getPrioritizedUnits(units),\n                i,\n                prioritizedLen = prioritized.length;\n            for (i = 0; i < prioritizedLen; i++) {\n                this[prioritized[i].unit](units[prioritized[i].unit]);\n            }\n        } else {\n            units = normalizeUnits(units);\n            if (isFunction(this[units])) {\n                return this[units](value);\n            }\n        }\n        return this;\n    }\n\n    var match1 = /\\d/, //       0 - 9\n        match2 = /\\d\\d/, //      00 - 99\n        match3 = /\\d{3}/, //     000 - 999\n        match4 = /\\d{4}/, //    0000 - 9999\n        match6 = /[+-]?\\d{6}/, // -999999 - 999999\n        match1to2 = /\\d\\d?/, //       0 - 99\n        match3to4 = /\\d\\d\\d\\d?/, //     999 - 9999\n        match5to6 = /\\d\\d\\d\\d\\d\\d?/, //   99999 - 999999\n        match1to3 = /\\d{1,3}/, //       0 - 999\n        match1to4 = /\\d{1,4}/, //       0 - 9999\n        match1to6 = /[+-]?\\d{1,6}/, // -999999 - 999999\n        matchUnsigned = /\\d+/, //       0 - inf\n        matchSigned = /[+-]?\\d+/, //    -inf - inf\n        matchOffset = /Z|[+-]\\d\\d:?\\d\\d/gi, // +00:00 -00:00 +0000 -0000 or Z\n        matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n        matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/, // 123456789 123456789.123\n        // any word (or two) characters or numbers including two/three word month in arabic.\n        // includes scottish gaelic two word and hyphenated months\n        matchWord =\n            /[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i,\n        regexes;\n\n    regexes = {};\n\n    function addRegexToken(token, regex, strictRegex) {\n        regexes[token] = isFunction(regex)\n            ? regex\n            : function (isStrict, localeData) {\n                  return isStrict && strictRegex ? strictRegex : regex;\n              };\n    }\n\n    function getParseRegexForToken(token, config) {\n        if (!hasOwnProp(regexes, token)) {\n            return new RegExp(unescapeFormat(token));\n        }\n\n        return regexes[token](config._strict, config._locale);\n    }\n\n    // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\n    function unescapeFormat(s) {\n        return regexEscape(\n            s\n                .replace('\\\\', '')\n                .replace(\n                    /\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g,\n                    function (matched, p1, p2, p3, p4) {\n                        return p1 || p2 || p3 || p4;\n                    }\n                )\n        );\n    }\n\n    function regexEscape(s) {\n        return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n    }\n\n    var tokens = {};\n\n    function addParseToken(token, callback) {\n        var i,\n            func = callback,\n            tokenLen;\n        if (typeof token === 'string') {\n            token = [token];\n        }\n        if (isNumber(callback)) {\n            func = function (input, array) {\n                array[callback] = toInt(input);\n            };\n        }\n        tokenLen = token.length;\n        for (i = 0; i < tokenLen; i++) {\n            tokens[token[i]] = func;\n        }\n    }\n\n    function addWeekParseToken(token, callback) {\n        addParseToken(token, function (input, array, config, token) {\n            config._w = config._w || {};\n            callback(input, config._w, config, token);\n        });\n    }\n\n    function addTimeToArrayFromToken(token, input, config) {\n        if (input != null && hasOwnProp(tokens, token)) {\n            tokens[token](input, config._a, config, token);\n        }\n    }\n\n    var YEAR = 0,\n        MONTH = 1,\n        DATE = 2,\n        HOUR = 3,\n        MINUTE = 4,\n        SECOND = 5,\n        MILLISECOND = 6,\n        WEEK = 7,\n        WEEKDAY = 8;\n\n    function mod(n, x) {\n        return ((n % x) + x) % x;\n    }\n\n    var indexOf;\n\n    if (Array.prototype.indexOf) {\n        indexOf = Array.prototype.indexOf;\n    } else {\n        indexOf = function (o) {\n            // I know\n            var i;\n            for (i = 0; i < this.length; ++i) {\n                if (this[i] === o) {\n                    return i;\n                }\n            }\n            return -1;\n        };\n    }\n\n    function daysInMonth(year, month) {\n        if (isNaN(year) || isNaN(month)) {\n            return NaN;\n        }\n        var modMonth = mod(month, 12);\n        year += (month - modMonth) / 12;\n        return modMonth === 1\n            ? isLeapYear(year)\n                ? 29\n                : 28\n            : 31 - ((modMonth % 7) % 2);\n    }\n\n    // FORMATTING\n\n    addFormatToken('M', ['MM', 2], 'Mo', function () {\n        return this.month() + 1;\n    });\n\n    addFormatToken('MMM', 0, 0, function (format) {\n        return this.localeData().monthsShort(this, format);\n    });\n\n    addFormatToken('MMMM', 0, 0, function (format) {\n        return this.localeData().months(this, format);\n    });\n\n    // ALIASES\n\n    addUnitAlias('month', 'M');\n\n    // PRIORITY\n\n    addUnitPriority('month', 8);\n\n    // PARSING\n\n    addRegexToken('M', match1to2);\n    addRegexToken('MM', match1to2, match2);\n    addRegexToken('MMM', function (isStrict, locale) {\n        return locale.monthsShortRegex(isStrict);\n    });\n    addRegexToken('MMMM', function (isStrict, locale) {\n        return locale.monthsRegex(isStrict);\n    });\n\n    addParseToken(['M', 'MM'], function (input, array) {\n        array[MONTH] = toInt(input) - 1;\n    });\n\n    addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n        var month = config._locale.monthsParse(input, token, config._strict);\n        // if we didn't find a month name, mark the date as invalid.\n        if (month != null) {\n            array[MONTH] = month;\n        } else {\n            getParsingFlags(config).invalidMonth = input;\n        }\n    });\n\n    // LOCALES\n\n    var defaultLocaleMonths =\n            'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n                '_'\n            ),\n        defaultLocaleMonthsShort =\n            'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/,\n        defaultMonthsShortRegex = matchWord,\n        defaultMonthsRegex = matchWord;\n\n    function localeMonths(m, format) {\n        if (!m) {\n            return isArray(this._months)\n                ? this._months\n                : this._months['standalone'];\n        }\n        return isArray(this._months)\n            ? this._months[m.month()]\n            : this._months[\n                  (this._months.isFormat || MONTHS_IN_FORMAT).test(format)\n                      ? 'format'\n                      : 'standalone'\n              ][m.month()];\n    }\n\n    function localeMonthsShort(m, format) {\n        if (!m) {\n            return isArray(this._monthsShort)\n                ? this._monthsShort\n                : this._monthsShort['standalone'];\n        }\n        return isArray(this._monthsShort)\n            ? this._monthsShort[m.month()]\n            : this._monthsShort[\n                  MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'\n              ][m.month()];\n    }\n\n    function handleStrictParse(monthName, format, strict) {\n        var i,\n            ii,\n            mom,\n            llc = monthName.toLocaleLowerCase();\n        if (!this._monthsParse) {\n            // this is not used\n            this._monthsParse = [];\n            this._longMonthsParse = [];\n            this._shortMonthsParse = [];\n            for (i = 0; i < 12; ++i) {\n                mom = createUTC([2000, i]);\n                this._shortMonthsParse[i] = this.monthsShort(\n                    mom,\n                    ''\n                ).toLocaleLowerCase();\n                this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n            }\n        }\n\n        if (strict) {\n            if (format === 'MMM') {\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._longMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        } else {\n            if (format === 'MMM') {\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._longMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._longMonthsParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        }\n    }\n\n    function localeMonthsParse(monthName, format, strict) {\n        var i, mom, regex;\n\n        if (this._monthsParseExact) {\n            return handleStrictParse.call(this, monthName, format, strict);\n        }\n\n        if (!this._monthsParse) {\n            this._monthsParse = [];\n            this._longMonthsParse = [];\n            this._shortMonthsParse = [];\n        }\n\n        // TODO: add sorting\n        // Sorting makes sure if one month (or abbr) is a prefix of another\n        // see sorting in computeMonthsParse\n        for (i = 0; i < 12; i++) {\n            // make the regex if we don't have it already\n            mom = createUTC([2000, i]);\n            if (strict && !this._longMonthsParse[i]) {\n                this._longMonthsParse[i] = new RegExp(\n                    '^' + this.months(mom, '').replace('.', '') + '$',\n                    'i'\n                );\n                this._shortMonthsParse[i] = new RegExp(\n                    '^' + this.monthsShort(mom, '').replace('.', '') + '$',\n                    'i'\n                );\n            }\n            if (!strict && !this._monthsParse[i]) {\n                regex =\n                    '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n                this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n            }\n            // test the regex\n            if (\n                strict &&\n                format === 'MMMM' &&\n                this._longMonthsParse[i].test(monthName)\n            ) {\n                return i;\n            } else if (\n                strict &&\n                format === 'MMM' &&\n                this._shortMonthsParse[i].test(monthName)\n            ) {\n                return i;\n            } else if (!strict && this._monthsParse[i].test(monthName)) {\n                return i;\n            }\n        }\n    }\n\n    // MOMENTS\n\n    function setMonth(mom, value) {\n        var dayOfMonth;\n\n        if (!mom.isValid()) {\n            // No op\n            return mom;\n        }\n\n        if (typeof value === 'string') {\n            if (/^\\d+$/.test(value)) {\n                value = toInt(value);\n            } else {\n                value = mom.localeData().monthsParse(value);\n                // TODO: Another silent failure?\n                if (!isNumber(value)) {\n                    return mom;\n                }\n            }\n        }\n\n        dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));\n        mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);\n        return mom;\n    }\n\n    function getSetMonth(value) {\n        if (value != null) {\n            setMonth(this, value);\n            hooks.updateOffset(this, true);\n            return this;\n        } else {\n            return get(this, 'Month');\n        }\n    }\n\n    function getDaysInMonth() {\n        return daysInMonth(this.year(), this.month());\n    }\n\n    function monthsShortRegex(isStrict) {\n        if (this._monthsParseExact) {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                computeMonthsParse.call(this);\n            }\n            if (isStrict) {\n                return this._monthsShortStrictRegex;\n            } else {\n                return this._monthsShortRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_monthsShortRegex')) {\n                this._monthsShortRegex = defaultMonthsShortRegex;\n            }\n            return this._monthsShortStrictRegex && isStrict\n                ? this._monthsShortStrictRegex\n                : this._monthsShortRegex;\n        }\n    }\n\n    function monthsRegex(isStrict) {\n        if (this._monthsParseExact) {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                computeMonthsParse.call(this);\n            }\n            if (isStrict) {\n                return this._monthsStrictRegex;\n            } else {\n                return this._monthsRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                this._monthsRegex = defaultMonthsRegex;\n            }\n            return this._monthsStrictRegex && isStrict\n                ? this._monthsStrictRegex\n                : this._monthsRegex;\n        }\n    }\n\n    function computeMonthsParse() {\n        function cmpLenRev(a, b) {\n            return b.length - a.length;\n        }\n\n        var shortPieces = [],\n            longPieces = [],\n            mixedPieces = [],\n            i,\n            mom;\n        for (i = 0; i < 12; i++) {\n            // make the regex if we don't have it already\n            mom = createUTC([2000, i]);\n            shortPieces.push(this.monthsShort(mom, ''));\n            longPieces.push(this.months(mom, ''));\n            mixedPieces.push(this.months(mom, ''));\n            mixedPieces.push(this.monthsShort(mom, ''));\n        }\n        // Sorting makes sure if one month (or abbr) is a prefix of another it\n        // will match the longer piece.\n        shortPieces.sort(cmpLenRev);\n        longPieces.sort(cmpLenRev);\n        mixedPieces.sort(cmpLenRev);\n        for (i = 0; i < 12; i++) {\n            shortPieces[i] = regexEscape(shortPieces[i]);\n            longPieces[i] = regexEscape(longPieces[i]);\n        }\n        for (i = 0; i < 24; i++) {\n            mixedPieces[i] = regexEscape(mixedPieces[i]);\n        }\n\n        this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n        this._monthsShortRegex = this._monthsRegex;\n        this._monthsStrictRegex = new RegExp(\n            '^(' + longPieces.join('|') + ')',\n            'i'\n        );\n        this._monthsShortStrictRegex = new RegExp(\n            '^(' + shortPieces.join('|') + ')',\n            'i'\n        );\n    }\n\n    // FORMATTING\n\n    addFormatToken('Y', 0, 0, function () {\n        var y = this.year();\n        return y <= 9999 ? zeroFill(y, 4) : '+' + y;\n    });\n\n    addFormatToken(0, ['YY', 2], 0, function () {\n        return this.year() % 100;\n    });\n\n    addFormatToken(0, ['YYYY', 4], 0, 'year');\n    addFormatToken(0, ['YYYYY', 5], 0, 'year');\n    addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\n    // ALIASES\n\n    addUnitAlias('year', 'y');\n\n    // PRIORITIES\n\n    addUnitPriority('year', 1);\n\n    // PARSING\n\n    addRegexToken('Y', matchSigned);\n    addRegexToken('YY', match1to2, match2);\n    addRegexToken('YYYY', match1to4, match4);\n    addRegexToken('YYYYY', match1to6, match6);\n    addRegexToken('YYYYYY', match1to6, match6);\n\n    addParseToken(['YYYYY', 'YYYYYY'], YEAR);\n    addParseToken('YYYY', function (input, array) {\n        array[YEAR] =\n            input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n    });\n    addParseToken('YY', function (input, array) {\n        array[YEAR] = hooks.parseTwoDigitYear(input);\n    });\n    addParseToken('Y', function (input, array) {\n        array[YEAR] = parseInt(input, 10);\n    });\n\n    // HELPERS\n\n    function daysInYear(year) {\n        return isLeapYear(year) ? 366 : 365;\n    }\n\n    // HOOKS\n\n    hooks.parseTwoDigitYear = function (input) {\n        return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n    };\n\n    // MOMENTS\n\n    var getSetYear = makeGetSet('FullYear', true);\n\n    function getIsLeapYear() {\n        return isLeapYear(this.year());\n    }\n\n    function createDate(y, m, d, h, M, s, ms) {\n        // can't just apply() to create a date:\n        // https://stackoverflow.com/q/181348\n        var date;\n        // the date constructor remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            // preserve leap years using a full 400 year cycle, then reset\n            date = new Date(y + 400, m, d, h, M, s, ms);\n            if (isFinite(date.getFullYear())) {\n                date.setFullYear(y);\n            }\n        } else {\n            date = new Date(y, m, d, h, M, s, ms);\n        }\n\n        return date;\n    }\n\n    function createUTCDate(y) {\n        var date, args;\n        // the Date.UTC function remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            args = Array.prototype.slice.call(arguments);\n            // preserve leap years using a full 400 year cycle, then reset\n            args[0] = y + 400;\n            date = new Date(Date.UTC.apply(null, args));\n            if (isFinite(date.getUTCFullYear())) {\n                date.setUTCFullYear(y);\n            }\n        } else {\n            date = new Date(Date.UTC.apply(null, arguments));\n        }\n\n        return date;\n    }\n\n    // start-of-first-week - start-of-year\n    function firstWeekOffset(year, dow, doy) {\n        var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n            fwd = 7 + dow - doy,\n            // first-week day local weekday -- which local weekday is fwd\n            fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n\n        return -fwdlw + fwd - 1;\n    }\n\n    // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\n    function dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n        var localWeekday = (7 + weekday - dow) % 7,\n            weekOffset = firstWeekOffset(year, dow, doy),\n            dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n            resYear,\n            resDayOfYear;\n\n        if (dayOfYear <= 0) {\n            resYear = year - 1;\n            resDayOfYear = daysInYear(resYear) + dayOfYear;\n        } else if (dayOfYear > daysInYear(year)) {\n            resYear = year + 1;\n            resDayOfYear = dayOfYear - daysInYear(year);\n        } else {\n            resYear = year;\n            resDayOfYear = dayOfYear;\n        }\n\n        return {\n            year: resYear,\n            dayOfYear: resDayOfYear,\n        };\n    }\n\n    function weekOfYear(mom, dow, doy) {\n        var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n            week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n            resWeek,\n            resYear;\n\n        if (week < 1) {\n            resYear = mom.year() - 1;\n            resWeek = week + weeksInYear(resYear, dow, doy);\n        } else if (week > weeksInYear(mom.year(), dow, doy)) {\n            resWeek = week - weeksInYear(mom.year(), dow, doy);\n            resYear = mom.year() + 1;\n        } else {\n            resYear = mom.year();\n            resWeek = week;\n        }\n\n        return {\n            week: resWeek,\n            year: resYear,\n        };\n    }\n\n    function weeksInYear(year, dow, doy) {\n        var weekOffset = firstWeekOffset(year, dow, doy),\n            weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n        return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n    }\n\n    // FORMATTING\n\n    addFormatToken('w', ['ww', 2], 'wo', 'week');\n    addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\n    // ALIASES\n\n    addUnitAlias('week', 'w');\n    addUnitAlias('isoWeek', 'W');\n\n    // PRIORITIES\n\n    addUnitPriority('week', 5);\n    addUnitPriority('isoWeek', 5);\n\n    // PARSING\n\n    addRegexToken('w', match1to2);\n    addRegexToken('ww', match1to2, match2);\n    addRegexToken('W', match1to2);\n    addRegexToken('WW', match1to2, match2);\n\n    addWeekParseToken(\n        ['w', 'ww', 'W', 'WW'],\n        function (input, week, config, token) {\n            week[token.substr(0, 1)] = toInt(input);\n        }\n    );\n\n    // HELPERS\n\n    // LOCALES\n\n    function localeWeek(mom) {\n        return weekOfYear(mom, this._week.dow, this._week.doy).week;\n    }\n\n    var defaultLocaleWeek = {\n        dow: 0, // Sunday is the first day of the week.\n        doy: 6, // The week that contains Jan 6th is the first week of the year.\n    };\n\n    function localeFirstDayOfWeek() {\n        return this._week.dow;\n    }\n\n    function localeFirstDayOfYear() {\n        return this._week.doy;\n    }\n\n    // MOMENTS\n\n    function getSetWeek(input) {\n        var week = this.localeData().week(this);\n        return input == null ? week : this.add((input - week) * 7, 'd');\n    }\n\n    function getSetISOWeek(input) {\n        var week = weekOfYear(this, 1, 4).week;\n        return input == null ? week : this.add((input - week) * 7, 'd');\n    }\n\n    // FORMATTING\n\n    addFormatToken('d', 0, 'do', 'day');\n\n    addFormatToken('dd', 0, 0, function (format) {\n        return this.localeData().weekdaysMin(this, format);\n    });\n\n    addFormatToken('ddd', 0, 0, function (format) {\n        return this.localeData().weekdaysShort(this, format);\n    });\n\n    addFormatToken('dddd', 0, 0, function (format) {\n        return this.localeData().weekdays(this, format);\n    });\n\n    addFormatToken('e', 0, 0, 'weekday');\n    addFormatToken('E', 0, 0, 'isoWeekday');\n\n    // ALIASES\n\n    addUnitAlias('day', 'd');\n    addUnitAlias('weekday', 'e');\n    addUnitAlias('isoWeekday', 'E');\n\n    // PRIORITY\n    addUnitPriority('day', 11);\n    addUnitPriority('weekday', 11);\n    addUnitPriority('isoWeekday', 11);\n\n    // PARSING\n\n    addRegexToken('d', match1to2);\n    addRegexToken('e', match1to2);\n    addRegexToken('E', match1to2);\n    addRegexToken('dd', function (isStrict, locale) {\n        return locale.weekdaysMinRegex(isStrict);\n    });\n    addRegexToken('ddd', function (isStrict, locale) {\n        return locale.weekdaysShortRegex(isStrict);\n    });\n    addRegexToken('dddd', function (isStrict, locale) {\n        return locale.weekdaysRegex(isStrict);\n    });\n\n    addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n        var weekday = config._locale.weekdaysParse(input, token, config._strict);\n        // if we didn't get a weekday name, mark the date as invalid\n        if (weekday != null) {\n            week.d = weekday;\n        } else {\n            getParsingFlags(config).invalidWeekday = input;\n        }\n    });\n\n    addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n        week[token] = toInt(input);\n    });\n\n    // HELPERS\n\n    function parseWeekday(input, locale) {\n        if (typeof input !== 'string') {\n            return input;\n        }\n\n        if (!isNaN(input)) {\n            return parseInt(input, 10);\n        }\n\n        input = locale.weekdaysParse(input);\n        if (typeof input === 'number') {\n            return input;\n        }\n\n        return null;\n    }\n\n    function parseIsoWeekday(input, locale) {\n        if (typeof input === 'string') {\n            return locale.weekdaysParse(input) % 7 || 7;\n        }\n        return isNaN(input) ? null : input;\n    }\n\n    // LOCALES\n    function shiftWeekdays(ws, n) {\n        return ws.slice(n, 7).concat(ws.slice(0, n));\n    }\n\n    var defaultLocaleWeekdays =\n            'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n        defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        defaultWeekdaysRegex = matchWord,\n        defaultWeekdaysShortRegex = matchWord,\n        defaultWeekdaysMinRegex = matchWord;\n\n    function localeWeekdays(m, format) {\n        var weekdays = isArray(this._weekdays)\n            ? this._weekdays\n            : this._weekdays[\n                  m && m !== true && this._weekdays.isFormat.test(format)\n                      ? 'format'\n                      : 'standalone'\n              ];\n        return m === true\n            ? shiftWeekdays(weekdays, this._week.dow)\n            : m\n            ? weekdays[m.day()]\n            : weekdays;\n    }\n\n    function localeWeekdaysShort(m) {\n        return m === true\n            ? shiftWeekdays(this._weekdaysShort, this._week.dow)\n            : m\n            ? this._weekdaysShort[m.day()]\n            : this._weekdaysShort;\n    }\n\n    function localeWeekdaysMin(m) {\n        return m === true\n            ? shiftWeekdays(this._weekdaysMin, this._week.dow)\n            : m\n            ? this._weekdaysMin[m.day()]\n            : this._weekdaysMin;\n    }\n\n    function handleStrictParse$1(weekdayName, format, strict) {\n        var i,\n            ii,\n            mom,\n            llc = weekdayName.toLocaleLowerCase();\n        if (!this._weekdaysParse) {\n            this._weekdaysParse = [];\n            this._shortWeekdaysParse = [];\n            this._minWeekdaysParse = [];\n\n            for (i = 0; i < 7; ++i) {\n                mom = createUTC([2000, 1]).day(i);\n                this._minWeekdaysParse[i] = this.weekdaysMin(\n                    mom,\n                    ''\n                ).toLocaleLowerCase();\n                this._shortWeekdaysParse[i] = this.weekdaysShort(\n                    mom,\n                    ''\n                ).toLocaleLowerCase();\n                this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n            }\n        }\n\n        if (strict) {\n            if (format === 'dddd') {\n                ii = indexOf.call(this._weekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else if (format === 'ddd') {\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        } else {\n            if (format === 'dddd') {\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else if (format === 'ddd') {\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        }\n    }\n\n    function localeWeekdaysParse(weekdayName, format, strict) {\n        var i, mom, regex;\n\n        if (this._weekdaysParseExact) {\n            return handleStrictParse$1.call(this, weekdayName, format, strict);\n        }\n\n        if (!this._weekdaysParse) {\n            this._weekdaysParse = [];\n            this._minWeekdaysParse = [];\n            this._shortWeekdaysParse = [];\n            this._fullWeekdaysParse = [];\n        }\n\n        for (i = 0; i < 7; i++) {\n            // make the regex if we don't have it already\n\n            mom = createUTC([2000, 1]).day(i);\n            if (strict && !this._fullWeekdaysParse[i]) {\n                this._fullWeekdaysParse[i] = new RegExp(\n                    '^' + this.weekdays(mom, '').replace('.', '\\\\.?') + '$',\n                    'i'\n                );\n                this._shortWeekdaysParse[i] = new RegExp(\n                    '^' + this.weekdaysShort(mom, '').replace('.', '\\\\.?') + '$',\n                    'i'\n                );\n                this._minWeekdaysParse[i] = new RegExp(\n                    '^' + this.weekdaysMin(mom, '').replace('.', '\\\\.?') + '$',\n                    'i'\n                );\n            }\n            if (!this._weekdaysParse[i]) {\n                regex =\n                    '^' +\n                    this.weekdays(mom, '') +\n                    '|^' +\n                    this.weekdaysShort(mom, '') +\n                    '|^' +\n                    this.weekdaysMin(mom, '');\n                this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n            }\n            // test the regex\n            if (\n                strict &&\n                format === 'dddd' &&\n                this._fullWeekdaysParse[i].test(weekdayName)\n            ) {\n                return i;\n            } else if (\n                strict &&\n                format === 'ddd' &&\n                this._shortWeekdaysParse[i].test(weekdayName)\n            ) {\n                return i;\n            } else if (\n                strict &&\n                format === 'dd' &&\n                this._minWeekdaysParse[i].test(weekdayName)\n            ) {\n                return i;\n            } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n                return i;\n            }\n        }\n    }\n\n    // MOMENTS\n\n    function getSetDayOfWeek(input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n        var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();\n        if (input != null) {\n            input = parseWeekday(input, this.localeData());\n            return this.add(input - day, 'd');\n        } else {\n            return day;\n        }\n    }\n\n    function getSetLocaleDayOfWeek(input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n        var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n        return input == null ? weekday : this.add(input - weekday, 'd');\n    }\n\n    function getSetISODayOfWeek(input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n\n        // behaves the same as moment#day except\n        // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n        // as a setter, sunday should belong to the previous week.\n\n        if (input != null) {\n            var weekday = parseIsoWeekday(input, this.localeData());\n            return this.day(this.day() % 7 ? weekday : weekday - 7);\n        } else {\n            return this.day() || 7;\n        }\n    }\n\n    function weekdaysRegex(isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysStrictRegex;\n            } else {\n                return this._weekdaysRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                this._weekdaysRegex = defaultWeekdaysRegex;\n            }\n            return this._weekdaysStrictRegex && isStrict\n                ? this._weekdaysStrictRegex\n                : this._weekdaysRegex;\n        }\n    }\n\n    function weekdaysShortRegex(isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysShortStrictRegex;\n            } else {\n                return this._weekdaysShortRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n                this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n            }\n            return this._weekdaysShortStrictRegex && isStrict\n                ? this._weekdaysShortStrictRegex\n                : this._weekdaysShortRegex;\n        }\n    }\n\n    function weekdaysMinRegex(isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysMinStrictRegex;\n            } else {\n                return this._weekdaysMinRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n                this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n            }\n            return this._weekdaysMinStrictRegex && isStrict\n                ? this._weekdaysMinStrictRegex\n                : this._weekdaysMinRegex;\n        }\n    }\n\n    function computeWeekdaysParse() {\n        function cmpLenRev(a, b) {\n            return b.length - a.length;\n        }\n\n        var minPieces = [],\n            shortPieces = [],\n            longPieces = [],\n            mixedPieces = [],\n            i,\n            mom,\n            minp,\n            shortp,\n            longp;\n        for (i = 0; i < 7; i++) {\n            // make the regex if we don't have it already\n            mom = createUTC([2000, 1]).day(i);\n            minp = regexEscape(this.weekdaysMin(mom, ''));\n            shortp = regexEscape(this.weekdaysShort(mom, ''));\n            longp = regexEscape(this.weekdays(mom, ''));\n            minPieces.push(minp);\n            shortPieces.push(shortp);\n            longPieces.push(longp);\n            mixedPieces.push(minp);\n            mixedPieces.push(shortp);\n            mixedPieces.push(longp);\n        }\n        // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n        // will match the longer piece.\n        minPieces.sort(cmpLenRev);\n        shortPieces.sort(cmpLenRev);\n        longPieces.sort(cmpLenRev);\n        mixedPieces.sort(cmpLenRev);\n\n        this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n        this._weekdaysShortRegex = this._weekdaysRegex;\n        this._weekdaysMinRegex = this._weekdaysRegex;\n\n        this._weekdaysStrictRegex = new RegExp(\n            '^(' + longPieces.join('|') + ')',\n            'i'\n        );\n        this._weekdaysShortStrictRegex = new RegExp(\n            '^(' + shortPieces.join('|') + ')',\n            'i'\n        );\n        this._weekdaysMinStrictRegex = new RegExp(\n            '^(' + minPieces.join('|') + ')',\n            'i'\n        );\n    }\n\n    // FORMATTING\n\n    function hFormat() {\n        return this.hours() % 12 || 12;\n    }\n\n    function kFormat() {\n        return this.hours() || 24;\n    }\n\n    addFormatToken('H', ['HH', 2], 0, 'hour');\n    addFormatToken('h', ['hh', 2], 0, hFormat);\n    addFormatToken('k', ['kk', 2], 0, kFormat);\n\n    addFormatToken('hmm', 0, 0, function () {\n        return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n    });\n\n    addFormatToken('hmmss', 0, 0, function () {\n        return (\n            '' +\n            hFormat.apply(this) +\n            zeroFill(this.minutes(), 2) +\n            zeroFill(this.seconds(), 2)\n        );\n    });\n\n    addFormatToken('Hmm', 0, 0, function () {\n        return '' + this.hours() + zeroFill(this.minutes(), 2);\n    });\n\n    addFormatToken('Hmmss', 0, 0, function () {\n        return (\n            '' +\n            this.hours() +\n            zeroFill(this.minutes(), 2) +\n            zeroFill(this.seconds(), 2)\n        );\n    });\n\n    function meridiem(token, lowercase) {\n        addFormatToken(token, 0, 0, function () {\n            return this.localeData().meridiem(\n                this.hours(),\n                this.minutes(),\n                lowercase\n            );\n        });\n    }\n\n    meridiem('a', true);\n    meridiem('A', false);\n\n    // ALIASES\n\n    addUnitAlias('hour', 'h');\n\n    // PRIORITY\n    addUnitPriority('hour', 13);\n\n    // PARSING\n\n    function matchMeridiem(isStrict, locale) {\n        return locale._meridiemParse;\n    }\n\n    addRegexToken('a', matchMeridiem);\n    addRegexToken('A', matchMeridiem);\n    addRegexToken('H', match1to2);\n    addRegexToken('h', match1to2);\n    addRegexToken('k', match1to2);\n    addRegexToken('HH', match1to2, match2);\n    addRegexToken('hh', match1to2, match2);\n    addRegexToken('kk', match1to2, match2);\n\n    addRegexToken('hmm', match3to4);\n    addRegexToken('hmmss', match5to6);\n    addRegexToken('Hmm', match3to4);\n    addRegexToken('Hmmss', match5to6);\n\n    addParseToken(['H', 'HH'], HOUR);\n    addParseToken(['k', 'kk'], function (input, array, config) {\n        var kInput = toInt(input);\n        array[HOUR] = kInput === 24 ? 0 : kInput;\n    });\n    addParseToken(['a', 'A'], function (input, array, config) {\n        config._isPm = config._locale.isPM(input);\n        config._meridiem = input;\n    });\n    addParseToken(['h', 'hh'], function (input, array, config) {\n        array[HOUR] = toInt(input);\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('hmm', function (input, array, config) {\n        var pos = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos));\n        array[MINUTE] = toInt(input.substr(pos));\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('hmmss', function (input, array, config) {\n        var pos1 = input.length - 4,\n            pos2 = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos1));\n        array[MINUTE] = toInt(input.substr(pos1, 2));\n        array[SECOND] = toInt(input.substr(pos2));\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('Hmm', function (input, array, config) {\n        var pos = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos));\n        array[MINUTE] = toInt(input.substr(pos));\n    });\n    addParseToken('Hmmss', function (input, array, config) {\n        var pos1 = input.length - 4,\n            pos2 = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos1));\n        array[MINUTE] = toInt(input.substr(pos1, 2));\n        array[SECOND] = toInt(input.substr(pos2));\n    });\n\n    // LOCALES\n\n    function localeIsPM(input) {\n        // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n        // Using charAt should be more compatible.\n        return (input + '').toLowerCase().charAt(0) === 'p';\n    }\n\n    var defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i,\n        // Setting the hour should keep the time, because the user explicitly\n        // specified which hour they want. So trying to maintain the same hour (in\n        // a new timezone) makes sense. Adding/subtracting hours does not follow\n        // this rule.\n        getSetHour = makeGetSet('Hours', true);\n\n    function localeMeridiem(hours, minutes, isLower) {\n        if (hours > 11) {\n            return isLower ? 'pm' : 'PM';\n        } else {\n            return isLower ? 'am' : 'AM';\n        }\n    }\n\n    var baseConfig = {\n        calendar: defaultCalendar,\n        longDateFormat: defaultLongDateFormat,\n        invalidDate: defaultInvalidDate,\n        ordinal: defaultOrdinal,\n        dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n        relativeTime: defaultRelativeTime,\n\n        months: defaultLocaleMonths,\n        monthsShort: defaultLocaleMonthsShort,\n\n        week: defaultLocaleWeek,\n\n        weekdays: defaultLocaleWeekdays,\n        weekdaysMin: defaultLocaleWeekdaysMin,\n        weekdaysShort: defaultLocaleWeekdaysShort,\n\n        meridiemParse: defaultLocaleMeridiemParse,\n    };\n\n    // internal storage for locale config files\n    var locales = {},\n        localeFamilies = {},\n        globalLocale;\n\n    function commonPrefix(arr1, arr2) {\n        var i,\n            minl = Math.min(arr1.length, arr2.length);\n        for (i = 0; i < minl; i += 1) {\n            if (arr1[i] !== arr2[i]) {\n                return i;\n            }\n        }\n        return minl;\n    }\n\n    function normalizeLocale(key) {\n        return key ? key.toLowerCase().replace('_', '-') : key;\n    }\n\n    // pick the locale from the array\n    // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n    // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\n    function chooseLocale(names) {\n        var i = 0,\n            j,\n            next,\n            locale,\n            split;\n\n        while (i < names.length) {\n            split = normalizeLocale(names[i]).split('-');\n            j = split.length;\n            next = normalizeLocale(names[i + 1]);\n            next = next ? next.split('-') : null;\n            while (j > 0) {\n                locale = loadLocale(split.slice(0, j).join('-'));\n                if (locale) {\n                    return locale;\n                }\n                if (\n                    next &&\n                    next.length >= j &&\n                    commonPrefix(split, next) >= j - 1\n                ) {\n                    //the next array item is better than a shallower substring of this one\n                    break;\n                }\n                j--;\n            }\n            i++;\n        }\n        return globalLocale;\n    }\n\n    function isLocaleNameSane(name) {\n        // Prevent names that look like filesystem paths, i.e contain '/' or '\\'\n        return name.match('^[^/\\\\\\\\]*$') != null;\n    }\n\n    function loadLocale(name) {\n        var oldLocale = null,\n            aliasedRequire;\n        // TODO: Find a better way to register and load all the locales in Node\n        if (\n            locales[name] === undefined &&\n            \"object\" !== 'undefined' &&\n            module &&\n            module.exports &&\n            isLocaleNameSane(name)\n        ) {\n            try {\n                oldLocale = globalLocale._abbr;\n                aliasedRequire = undefined;\n                __webpack_require__(\"./node_modules/moment/locale sync recursive ^\\\\.\\\\/.*$\")(\"./\" + name);\n                getSetGlobalLocale(oldLocale);\n            } catch (e) {\n                // mark as not found to avoid repeating expensive file require call causing high CPU\n                // when trying to find en-US, en_US, en-us for every format call\n                locales[name] = null; // null means not found\n            }\n        }\n        return locales[name];\n    }\n\n    // This function will load locale and then set the global locale.  If\n    // no arguments are passed in, it will simply return the current global\n    // locale key.\n    function getSetGlobalLocale(key, values) {\n        var data;\n        if (key) {\n            if (isUndefined(values)) {\n                data = getLocale(key);\n            } else {\n                data = defineLocale(key, values);\n            }\n\n            if (data) {\n                // moment.duration._locale = moment._locale = data;\n                globalLocale = data;\n            } else {\n                if (typeof console !== 'undefined' && console.warn) {\n                    //warn user if arguments are passed but the locale could not be set\n                    console.warn(\n                        'Locale ' + key + ' not found. Did you forget to load it?'\n                    );\n                }\n            }\n        }\n\n        return globalLocale._abbr;\n    }\n\n    function defineLocale(name, config) {\n        if (config !== null) {\n            var locale,\n                parentConfig = baseConfig;\n            config.abbr = name;\n            if (locales[name] != null) {\n                deprecateSimple(\n                    'defineLocaleOverride',\n                    'use moment.updateLocale(localeName, config) to change ' +\n                        'an existing locale. moment.defineLocale(localeName, ' +\n                        'config) should only be used for creating a new locale ' +\n                        'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'\n                );\n                parentConfig = locales[name]._config;\n            } else if (config.parentLocale != null) {\n                if (locales[config.parentLocale] != null) {\n                    parentConfig = locales[config.parentLocale]._config;\n                } else {\n                    locale = loadLocale(config.parentLocale);\n                    if (locale != null) {\n                        parentConfig = locale._config;\n                    } else {\n                        if (!localeFamilies[config.parentLocale]) {\n                            localeFamilies[config.parentLocale] = [];\n                        }\n                        localeFamilies[config.parentLocale].push({\n                            name: name,\n                            config: config,\n                        });\n                        return null;\n                    }\n                }\n            }\n            locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n            if (localeFamilies[name]) {\n                localeFamilies[name].forEach(function (x) {\n                    defineLocale(x.name, x.config);\n                });\n            }\n\n            // backwards compat for now: also set the locale\n            // make sure we set the locale AFTER all child locales have been\n            // created, so we won't end up with the child locale set.\n            getSetGlobalLocale(name);\n\n            return locales[name];\n        } else {\n            // useful for testing\n            delete locales[name];\n            return null;\n        }\n    }\n\n    function updateLocale(name, config) {\n        if (config != null) {\n            var locale,\n                tmpLocale,\n                parentConfig = baseConfig;\n\n            if (locales[name] != null && locales[name].parentLocale != null) {\n                // Update existing child locale in-place to avoid memory-leaks\n                locales[name].set(mergeConfigs(locales[name]._config, config));\n            } else {\n                // MERGE\n                tmpLocale = loadLocale(name);\n                if (tmpLocale != null) {\n                    parentConfig = tmpLocale._config;\n                }\n                config = mergeConfigs(parentConfig, config);\n                if (tmpLocale == null) {\n                    // updateLocale is called for creating a new locale\n                    // Set abbr so it will have a name (getters return\n                    // undefined otherwise).\n                    config.abbr = name;\n                }\n                locale = new Locale(config);\n                locale.parentLocale = locales[name];\n                locales[name] = locale;\n            }\n\n            // backwards compat for now: also set the locale\n            getSetGlobalLocale(name);\n        } else {\n            // pass null for config to unupdate, useful for tests\n            if (locales[name] != null) {\n                if (locales[name].parentLocale != null) {\n                    locales[name] = locales[name].parentLocale;\n                    if (name === getSetGlobalLocale()) {\n                        getSetGlobalLocale(name);\n                    }\n                } else if (locales[name] != null) {\n                    delete locales[name];\n                }\n            }\n        }\n        return locales[name];\n    }\n\n    // returns locale data\n    function getLocale(key) {\n        var locale;\n\n        if (key && key._locale && key._locale._abbr) {\n            key = key._locale._abbr;\n        }\n\n        if (!key) {\n            return globalLocale;\n        }\n\n        if (!isArray(key)) {\n            //short-circuit everything else\n            locale = loadLocale(key);\n            if (locale) {\n                return locale;\n            }\n            key = [key];\n        }\n\n        return chooseLocale(key);\n    }\n\n    function listLocales() {\n        return keys(locales);\n    }\n\n    function checkOverflow(m) {\n        var overflow,\n            a = m._a;\n\n        if (a && getParsingFlags(m).overflow === -2) {\n            overflow =\n                a[MONTH] < 0 || a[MONTH] > 11\n                    ? MONTH\n                    : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH])\n                    ? DATE\n                    : a[HOUR] < 0 ||\n                      a[HOUR] > 24 ||\n                      (a[HOUR] === 24 &&\n                          (a[MINUTE] !== 0 ||\n                              a[SECOND] !== 0 ||\n                              a[MILLISECOND] !== 0))\n                    ? HOUR\n                    : a[MINUTE] < 0 || a[MINUTE] > 59\n                    ? MINUTE\n                    : a[SECOND] < 0 || a[SECOND] > 59\n                    ? SECOND\n                    : a[MILLISECOND] < 0 || a[MILLISECOND] > 999\n                    ? MILLISECOND\n                    : -1;\n\n            if (\n                getParsingFlags(m)._overflowDayOfYear &&\n                (overflow < YEAR || overflow > DATE)\n            ) {\n                overflow = DATE;\n            }\n            if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n                overflow = WEEK;\n            }\n            if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n                overflow = WEEKDAY;\n            }\n\n            getParsingFlags(m).overflow = overflow;\n        }\n\n        return m;\n    }\n\n    // iso 8601 regex\n    // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\n    var extendedIsoRegex =\n            /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n        basicIsoRegex =\n            /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d|))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n        tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/,\n        isoDates = [\n            ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\n            ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\n            ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\n            ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\n            ['YYYY-DDD', /\\d{4}-\\d{3}/],\n            ['YYYY-MM', /\\d{4}-\\d\\d/, false],\n            ['YYYYYYMMDD', /[+-]\\d{10}/],\n            ['YYYYMMDD', /\\d{8}/],\n            ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n            ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n            ['YYYYDDD', /\\d{7}/],\n            ['YYYYMM', /\\d{6}/, false],\n            ['YYYY', /\\d{4}/, false],\n        ],\n        // iso time formats and regexes\n        isoTimes = [\n            ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n            ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n            ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\n            ['HH:mm', /\\d\\d:\\d\\d/],\n            ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n            ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\n            ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\n            ['HHmm', /\\d\\d\\d\\d/],\n            ['HH', /\\d\\d/],\n        ],\n        aspNetJsonRegex = /^\\/?Date\\((-?\\d+)/i,\n        // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n        rfc2822 =\n            /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/,\n        obsOffsets = {\n            UT: 0,\n            GMT: 0,\n            EDT: -4 * 60,\n            EST: -5 * 60,\n            CDT: -5 * 60,\n            CST: -6 * 60,\n            MDT: -6 * 60,\n            MST: -7 * 60,\n            PDT: -7 * 60,\n            PST: -8 * 60,\n        };\n\n    // date from iso format\n    function configFromISO(config) {\n        var i,\n            l,\n            string = config._i,\n            match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n            allowTime,\n            dateFormat,\n            timeFormat,\n            tzFormat,\n            isoDatesLen = isoDates.length,\n            isoTimesLen = isoTimes.length;\n\n        if (match) {\n            getParsingFlags(config).iso = true;\n            for (i = 0, l = isoDatesLen; i < l; i++) {\n                if (isoDates[i][1].exec(match[1])) {\n                    dateFormat = isoDates[i][0];\n                    allowTime = isoDates[i][2] !== false;\n                    break;\n                }\n            }\n            if (dateFormat == null) {\n                config._isValid = false;\n                return;\n            }\n            if (match[3]) {\n                for (i = 0, l = isoTimesLen; i < l; i++) {\n                    if (isoTimes[i][1].exec(match[3])) {\n                        // match[2] should be 'T' or space\n                        timeFormat = (match[2] || ' ') + isoTimes[i][0];\n                        break;\n                    }\n                }\n                if (timeFormat == null) {\n                    config._isValid = false;\n                    return;\n                }\n            }\n            if (!allowTime && timeFormat != null) {\n                config._isValid = false;\n                return;\n            }\n            if (match[4]) {\n                if (tzRegex.exec(match[4])) {\n                    tzFormat = 'Z';\n                } else {\n                    config._isValid = false;\n                    return;\n                }\n            }\n            config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n            configFromStringAndFormat(config);\n        } else {\n            config._isValid = false;\n        }\n    }\n\n    function extractFromRFC2822Strings(\n        yearStr,\n        monthStr,\n        dayStr,\n        hourStr,\n        minuteStr,\n        secondStr\n    ) {\n        var result = [\n            untruncateYear(yearStr),\n            defaultLocaleMonthsShort.indexOf(monthStr),\n            parseInt(dayStr, 10),\n            parseInt(hourStr, 10),\n            parseInt(minuteStr, 10),\n        ];\n\n        if (secondStr) {\n            result.push(parseInt(secondStr, 10));\n        }\n\n        return result;\n    }\n\n    function untruncateYear(yearStr) {\n        var year = parseInt(yearStr, 10);\n        if (year <= 49) {\n            return 2000 + year;\n        } else if (year <= 999) {\n            return 1900 + year;\n        }\n        return year;\n    }\n\n    function preprocessRFC2822(s) {\n        // Remove comments and folding whitespace and replace multiple-spaces with a single space\n        return s\n            .replace(/\\([^()]*\\)|[\\n\\t]/g, ' ')\n            .replace(/(\\s\\s+)/g, ' ')\n            .replace(/^\\s\\s*/, '')\n            .replace(/\\s\\s*$/, '');\n    }\n\n    function checkWeekday(weekdayStr, parsedInput, config) {\n        if (weekdayStr) {\n            // TODO: Replace the vanilla JS Date object with an independent day-of-week check.\n            var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n                weekdayActual = new Date(\n                    parsedInput[0],\n                    parsedInput[1],\n                    parsedInput[2]\n                ).getDay();\n            if (weekdayProvided !== weekdayActual) {\n                getParsingFlags(config).weekdayMismatch = true;\n                config._isValid = false;\n                return false;\n            }\n        }\n        return true;\n    }\n\n    function calculateOffset(obsOffset, militaryOffset, numOffset) {\n        if (obsOffset) {\n            return obsOffsets[obsOffset];\n        } else if (militaryOffset) {\n            // the only allowed military tz is Z\n            return 0;\n        } else {\n            var hm = parseInt(numOffset, 10),\n                m = hm % 100,\n                h = (hm - m) / 100;\n            return h * 60 + m;\n        }\n    }\n\n    // date and time from ref 2822 format\n    function configFromRFC2822(config) {\n        var match = rfc2822.exec(preprocessRFC2822(config._i)),\n            parsedArray;\n        if (match) {\n            parsedArray = extractFromRFC2822Strings(\n                match[4],\n                match[3],\n                match[2],\n                match[5],\n                match[6],\n                match[7]\n            );\n            if (!checkWeekday(match[1], parsedArray, config)) {\n                return;\n            }\n\n            config._a = parsedArray;\n            config._tzm = calculateOffset(match[8], match[9], match[10]);\n\n            config._d = createUTCDate.apply(null, config._a);\n            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\n            getParsingFlags(config).rfc2822 = true;\n        } else {\n            config._isValid = false;\n        }\n    }\n\n    // date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict\n    function configFromString(config) {\n        var matched = aspNetJsonRegex.exec(config._i);\n        if (matched !== null) {\n            config._d = new Date(+matched[1]);\n            return;\n        }\n\n        configFromISO(config);\n        if (config._isValid === false) {\n            delete config._isValid;\n        } else {\n            return;\n        }\n\n        configFromRFC2822(config);\n        if (config._isValid === false) {\n            delete config._isValid;\n        } else {\n            return;\n        }\n\n        if (config._strict) {\n            config._isValid = false;\n        } else {\n            // Final attempt, use Input Fallback\n            hooks.createFromInputFallback(config);\n        }\n    }\n\n    hooks.createFromInputFallback = deprecate(\n        'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +\n            'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +\n            'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.',\n        function (config) {\n            config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n        }\n    );\n\n    // Pick the first defined of two or three arguments.\n    function defaults(a, b, c) {\n        if (a != null) {\n            return a;\n        }\n        if (b != null) {\n            return b;\n        }\n        return c;\n    }\n\n    function currentDateArray(config) {\n        // hooks is actually the exported moment object\n        var nowValue = new Date(hooks.now());\n        if (config._useUTC) {\n            return [\n                nowValue.getUTCFullYear(),\n                nowValue.getUTCMonth(),\n                nowValue.getUTCDate(),\n            ];\n        }\n        return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n    }\n\n    // convert an array to a date.\n    // the array should mirror the parameters below\n    // note: all values past the year are optional and will default to the lowest possible value.\n    // [year, month, day , hour, minute, second, millisecond]\n    function configFromArray(config) {\n        var i,\n            date,\n            input = [],\n            currentDate,\n            expectedWeekday,\n            yearToUse;\n\n        if (config._d) {\n            return;\n        }\n\n        currentDate = currentDateArray(config);\n\n        //compute day of the year from weeks and weekdays\n        if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n            dayOfYearFromWeekInfo(config);\n        }\n\n        //if the day of the year is set, figure out what it is\n        if (config._dayOfYear != null) {\n            yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n            if (\n                config._dayOfYear > daysInYear(yearToUse) ||\n                config._dayOfYear === 0\n            ) {\n                getParsingFlags(config)._overflowDayOfYear = true;\n            }\n\n            date = createUTCDate(yearToUse, 0, config._dayOfYear);\n            config._a[MONTH] = date.getUTCMonth();\n            config._a[DATE] = date.getUTCDate();\n        }\n\n        // Default to current date.\n        // * if no year, month, day of month are given, default to today\n        // * if day of month is given, default month and year\n        // * if month is given, default only year\n        // * if year is given, don't default anything\n        for (i = 0; i < 3 && config._a[i] == null; ++i) {\n            config._a[i] = input[i] = currentDate[i];\n        }\n\n        // Zero out whatever was not defaulted, including time\n        for (; i < 7; i++) {\n            config._a[i] = input[i] =\n                config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i];\n        }\n\n        // Check for 24:00:00.000\n        if (\n            config._a[HOUR] === 24 &&\n            config._a[MINUTE] === 0 &&\n            config._a[SECOND] === 0 &&\n            config._a[MILLISECOND] === 0\n        ) {\n            config._nextDay = true;\n            config._a[HOUR] = 0;\n        }\n\n        config._d = (config._useUTC ? createUTCDate : createDate).apply(\n            null,\n            input\n        );\n        expectedWeekday = config._useUTC\n            ? config._d.getUTCDay()\n            : config._d.getDay();\n\n        // Apply timezone offset from input. The actual utcOffset can be changed\n        // with parseZone.\n        if (config._tzm != null) {\n            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n        }\n\n        if (config._nextDay) {\n            config._a[HOUR] = 24;\n        }\n\n        // check for mismatching day of week\n        if (\n            config._w &&\n            typeof config._w.d !== 'undefined' &&\n            config._w.d !== expectedWeekday\n        ) {\n            getParsingFlags(config).weekdayMismatch = true;\n        }\n    }\n\n    function dayOfYearFromWeekInfo(config) {\n        var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;\n\n        w = config._w;\n        if (w.GG != null || w.W != null || w.E != null) {\n            dow = 1;\n            doy = 4;\n\n            // TODO: We need to take the current isoWeekYear, but that depends on\n            // how we interpret now (local, utc, fixed offset). So create\n            // a now version of current config (take local/utc/offset flags, and\n            // create now).\n            weekYear = defaults(\n                w.GG,\n                config._a[YEAR],\n                weekOfYear(createLocal(), 1, 4).year\n            );\n            week = defaults(w.W, 1);\n            weekday = defaults(w.E, 1);\n            if (weekday < 1 || weekday > 7) {\n                weekdayOverflow = true;\n            }\n        } else {\n            dow = config._locale._week.dow;\n            doy = config._locale._week.doy;\n\n            curWeek = weekOfYear(createLocal(), dow, doy);\n\n            weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n            // Default to current week.\n            week = defaults(w.w, curWeek.week);\n\n            if (w.d != null) {\n                // weekday -- low day numbers are considered next week\n                weekday = w.d;\n                if (weekday < 0 || weekday > 6) {\n                    weekdayOverflow = true;\n                }\n            } else if (w.e != null) {\n                // local weekday -- counting starts from beginning of week\n                weekday = w.e + dow;\n                if (w.e < 0 || w.e > 6) {\n                    weekdayOverflow = true;\n                }\n            } else {\n                // default to beginning of week\n                weekday = dow;\n            }\n        }\n        if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n            getParsingFlags(config)._overflowWeeks = true;\n        } else if (weekdayOverflow != null) {\n            getParsingFlags(config)._overflowWeekday = true;\n        } else {\n            temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n            config._a[YEAR] = temp.year;\n            config._dayOfYear = temp.dayOfYear;\n        }\n    }\n\n    // constant that refers to the ISO standard\n    hooks.ISO_8601 = function () {};\n\n    // constant that refers to the RFC 2822 form\n    hooks.RFC_2822 = function () {};\n\n    // date from string and format string\n    function configFromStringAndFormat(config) {\n        // TODO: Move this to another part of the creation flow to prevent circular deps\n        if (config._f === hooks.ISO_8601) {\n            configFromISO(config);\n            return;\n        }\n        if (config._f === hooks.RFC_2822) {\n            configFromRFC2822(config);\n            return;\n        }\n        config._a = [];\n        getParsingFlags(config).empty = true;\n\n        // This array is used to make a Date, either with `new Date` or `Date.UTC`\n        var string = '' + config._i,\n            i,\n            parsedInput,\n            tokens,\n            token,\n            skipped,\n            stringLength = string.length,\n            totalParsedInputLength = 0,\n            era,\n            tokenLen;\n\n        tokens =\n            expandFormat(config._f, config._locale).match(formattingTokens) || [];\n        tokenLen = tokens.length;\n        for (i = 0; i < tokenLen; i++) {\n            token = tokens[i];\n            parsedInput = (string.match(getParseRegexForToken(token, config)) ||\n                [])[0];\n            if (parsedInput) {\n                skipped = string.substr(0, string.indexOf(parsedInput));\n                if (skipped.length > 0) {\n                    getParsingFlags(config).unusedInput.push(skipped);\n                }\n                string = string.slice(\n                    string.indexOf(parsedInput) + parsedInput.length\n                );\n                totalParsedInputLength += parsedInput.length;\n            }\n            // don't parse if it's not a known token\n            if (formatTokenFunctions[token]) {\n                if (parsedInput) {\n                    getParsingFlags(config).empty = false;\n                } else {\n                    getParsingFlags(config).unusedTokens.push(token);\n                }\n                addTimeToArrayFromToken(token, parsedInput, config);\n            } else if (config._strict && !parsedInput) {\n                getParsingFlags(config).unusedTokens.push(token);\n            }\n        }\n\n        // add remaining unparsed input length to the string\n        getParsingFlags(config).charsLeftOver =\n            stringLength - totalParsedInputLength;\n        if (string.length > 0) {\n            getParsingFlags(config).unusedInput.push(string);\n        }\n\n        // clear _12h flag if hour is <= 12\n        if (\n            config._a[HOUR] <= 12 &&\n            getParsingFlags(config).bigHour === true &&\n            config._a[HOUR] > 0\n        ) {\n            getParsingFlags(config).bigHour = undefined;\n        }\n\n        getParsingFlags(config).parsedDateParts = config._a.slice(0);\n        getParsingFlags(config).meridiem = config._meridiem;\n        // handle meridiem\n        config._a[HOUR] = meridiemFixWrap(\n            config._locale,\n            config._a[HOUR],\n            config._meridiem\n        );\n\n        // handle era\n        era = getParsingFlags(config).era;\n        if (era !== null) {\n            config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);\n        }\n\n        configFromArray(config);\n        checkOverflow(config);\n    }\n\n    function meridiemFixWrap(locale, hour, meridiem) {\n        var isPm;\n\n        if (meridiem == null) {\n            // nothing to do\n            return hour;\n        }\n        if (locale.meridiemHour != null) {\n            return locale.meridiemHour(hour, meridiem);\n        } else if (locale.isPM != null) {\n            // Fallback\n            isPm = locale.isPM(meridiem);\n            if (isPm && hour < 12) {\n                hour += 12;\n            }\n            if (!isPm && hour === 12) {\n                hour = 0;\n            }\n            return hour;\n        } else {\n            // this is not supposed to happen\n            return hour;\n        }\n    }\n\n    // date from string and array of format strings\n    function configFromStringAndArray(config) {\n        var tempConfig,\n            bestMoment,\n            scoreToBeat,\n            i,\n            currentScore,\n            validFormatFound,\n            bestFormatIsValid = false,\n            configfLen = config._f.length;\n\n        if (configfLen === 0) {\n            getParsingFlags(config).invalidFormat = true;\n            config._d = new Date(NaN);\n            return;\n        }\n\n        for (i = 0; i < configfLen; i++) {\n            currentScore = 0;\n            validFormatFound = false;\n            tempConfig = copyConfig({}, config);\n            if (config._useUTC != null) {\n                tempConfig._useUTC = config._useUTC;\n            }\n            tempConfig._f = config._f[i];\n            configFromStringAndFormat(tempConfig);\n\n            if (isValid(tempConfig)) {\n                validFormatFound = true;\n            }\n\n            // if there is any input that was not parsed add a penalty for that format\n            currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\n            //or tokens\n            currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n\n            getParsingFlags(tempConfig).score = currentScore;\n\n            if (!bestFormatIsValid) {\n                if (\n                    scoreToBeat == null ||\n                    currentScore < scoreToBeat ||\n                    validFormatFound\n                ) {\n                    scoreToBeat = currentScore;\n                    bestMoment = tempConfig;\n                    if (validFormatFound) {\n                        bestFormatIsValid = true;\n                    }\n                }\n            } else {\n                if (currentScore < scoreToBeat) {\n                    scoreToBeat = currentScore;\n                    bestMoment = tempConfig;\n                }\n            }\n        }\n\n        extend(config, bestMoment || tempConfig);\n    }\n\n    function configFromObject(config) {\n        if (config._d) {\n            return;\n        }\n\n        var i = normalizeObjectUnits(config._i),\n            dayOrDate = i.day === undefined ? i.date : i.day;\n        config._a = map(\n            [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond],\n            function (obj) {\n                return obj && parseInt(obj, 10);\n            }\n        );\n\n        configFromArray(config);\n    }\n\n    function createFromConfig(config) {\n        var res = new Moment(checkOverflow(prepareConfig(config)));\n        if (res._nextDay) {\n            // Adding is smart enough around DST\n            res.add(1, 'd');\n            res._nextDay = undefined;\n        }\n\n        return res;\n    }\n\n    function prepareConfig(config) {\n        var input = config._i,\n            format = config._f;\n\n        config._locale = config._locale || getLocale(config._l);\n\n        if (input === null || (format === undefined && input === '')) {\n            return createInvalid({ nullInput: true });\n        }\n\n        if (typeof input === 'string') {\n            config._i = input = config._locale.preparse(input);\n        }\n\n        if (isMoment(input)) {\n            return new Moment(checkOverflow(input));\n        } else if (isDate(input)) {\n            config._d = input;\n        } else if (isArray(format)) {\n            configFromStringAndArray(config);\n        } else if (format) {\n            configFromStringAndFormat(config);\n        } else {\n            configFromInput(config);\n        }\n\n        if (!isValid(config)) {\n            config._d = null;\n        }\n\n        return config;\n    }\n\n    function configFromInput(config) {\n        var input = config._i;\n        if (isUndefined(input)) {\n            config._d = new Date(hooks.now());\n        } else if (isDate(input)) {\n            config._d = new Date(input.valueOf());\n        } else if (typeof input === 'string') {\n            configFromString(config);\n        } else if (isArray(input)) {\n            config._a = map(input.slice(0), function (obj) {\n                return parseInt(obj, 10);\n            });\n            configFromArray(config);\n        } else if (isObject(input)) {\n            configFromObject(config);\n        } else if (isNumber(input)) {\n            // from milliseconds\n            config._d = new Date(input);\n        } else {\n            hooks.createFromInputFallback(config);\n        }\n    }\n\n    function createLocalOrUTC(input, format, locale, strict, isUTC) {\n        var c = {};\n\n        if (format === true || format === false) {\n            strict = format;\n            format = undefined;\n        }\n\n        if (locale === true || locale === false) {\n            strict = locale;\n            locale = undefined;\n        }\n\n        if (\n            (isObject(input) && isObjectEmpty(input)) ||\n            (isArray(input) && input.length === 0)\n        ) {\n            input = undefined;\n        }\n        // object construction must be done this way.\n        // https://github.com/moment/moment/issues/1423\n        c._isAMomentObject = true;\n        c._useUTC = c._isUTC = isUTC;\n        c._l = locale;\n        c._i = input;\n        c._f = format;\n        c._strict = strict;\n\n        return createFromConfig(c);\n    }\n\n    function createLocal(input, format, locale, strict) {\n        return createLocalOrUTC(input, format, locale, strict, false);\n    }\n\n    var prototypeMin = deprecate(\n            'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n            function () {\n                var other = createLocal.apply(null, arguments);\n                if (this.isValid() && other.isValid()) {\n                    return other < this ? this : other;\n                } else {\n                    return createInvalid();\n                }\n            }\n        ),\n        prototypeMax = deprecate(\n            'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n            function () {\n                var other = createLocal.apply(null, arguments);\n                if (this.isValid() && other.isValid()) {\n                    return other > this ? this : other;\n                } else {\n                    return createInvalid();\n                }\n            }\n        );\n\n    // Pick a moment m from moments so that m[fn](other) is true for all\n    // other. This relies on the function fn to be transitive.\n    //\n    // moments should either be an array of moment objects or an array, whose\n    // first element is an array of moment objects.\n    function pickBy(fn, moments) {\n        var res, i;\n        if (moments.length === 1 && isArray(moments[0])) {\n            moments = moments[0];\n        }\n        if (!moments.length) {\n            return createLocal();\n        }\n        res = moments[0];\n        for (i = 1; i < moments.length; ++i) {\n            if (!moments[i].isValid() || moments[i][fn](res)) {\n                res = moments[i];\n            }\n        }\n        return res;\n    }\n\n    // TODO: Use [].sort instead?\n    function min() {\n        var args = [].slice.call(arguments, 0);\n\n        return pickBy('isBefore', args);\n    }\n\n    function max() {\n        var args = [].slice.call(arguments, 0);\n\n        return pickBy('isAfter', args);\n    }\n\n    var now = function () {\n        return Date.now ? Date.now() : +new Date();\n    };\n\n    var ordering = [\n        'year',\n        'quarter',\n        'month',\n        'week',\n        'day',\n        'hour',\n        'minute',\n        'second',\n        'millisecond',\n    ];\n\n    function isDurationValid(m) {\n        var key,\n            unitHasDecimal = false,\n            i,\n            orderLen = ordering.length;\n        for (key in m) {\n            if (\n                hasOwnProp(m, key) &&\n                !(\n                    indexOf.call(ordering, key) !== -1 &&\n                    (m[key] == null || !isNaN(m[key]))\n                )\n            ) {\n                return false;\n            }\n        }\n\n        for (i = 0; i < orderLen; ++i) {\n            if (m[ordering[i]]) {\n                if (unitHasDecimal) {\n                    return false; // only allow non-integers for smallest unit\n                }\n                if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n                    unitHasDecimal = true;\n                }\n            }\n        }\n\n        return true;\n    }\n\n    function isValid$1() {\n        return this._isValid;\n    }\n\n    function createInvalid$1() {\n        return createDuration(NaN);\n    }\n\n    function Duration(duration) {\n        var normalizedInput = normalizeObjectUnits(duration),\n            years = normalizedInput.year || 0,\n            quarters = normalizedInput.quarter || 0,\n            months = normalizedInput.month || 0,\n            weeks = normalizedInput.week || normalizedInput.isoWeek || 0,\n            days = normalizedInput.day || 0,\n            hours = normalizedInput.hour || 0,\n            minutes = normalizedInput.minute || 0,\n            seconds = normalizedInput.second || 0,\n            milliseconds = normalizedInput.millisecond || 0;\n\n        this._isValid = isDurationValid(normalizedInput);\n\n        // representation for dateAddRemove\n        this._milliseconds =\n            +milliseconds +\n            seconds * 1e3 + // 1000\n            minutes * 6e4 + // 1000 * 60\n            hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n        // Because of dateAddRemove treats 24 hours as different from a\n        // day when working around DST, we need to store them separately\n        this._days = +days + weeks * 7;\n        // It is impossible to translate months into days without knowing\n        // which months you are are talking about, so we have to store\n        // it separately.\n        this._months = +months + quarters * 3 + years * 12;\n\n        this._data = {};\n\n        this._locale = getLocale();\n\n        this._bubble();\n    }\n\n    function isDuration(obj) {\n        return obj instanceof Duration;\n    }\n\n    function absRound(number) {\n        if (number < 0) {\n            return Math.round(-1 * number) * -1;\n        } else {\n            return Math.round(number);\n        }\n    }\n\n    // compare two arrays, return the number of differences\n    function compareArrays(array1, array2, dontConvert) {\n        var len = Math.min(array1.length, array2.length),\n            lengthDiff = Math.abs(array1.length - array2.length),\n            diffs = 0,\n            i;\n        for (i = 0; i < len; i++) {\n            if (\n                (dontConvert && array1[i] !== array2[i]) ||\n                (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))\n            ) {\n                diffs++;\n            }\n        }\n        return diffs + lengthDiff;\n    }\n\n    // FORMATTING\n\n    function offset(token, separator) {\n        addFormatToken(token, 0, 0, function () {\n            var offset = this.utcOffset(),\n                sign = '+';\n            if (offset < 0) {\n                offset = -offset;\n                sign = '-';\n            }\n            return (\n                sign +\n                zeroFill(~~(offset / 60), 2) +\n                separator +\n                zeroFill(~~offset % 60, 2)\n            );\n        });\n    }\n\n    offset('Z', ':');\n    offset('ZZ', '');\n\n    // PARSING\n\n    addRegexToken('Z', matchShortOffset);\n    addRegexToken('ZZ', matchShortOffset);\n    addParseToken(['Z', 'ZZ'], function (input, array, config) {\n        config._useUTC = true;\n        config._tzm = offsetFromString(matchShortOffset, input);\n    });\n\n    // HELPERS\n\n    // timezone chunker\n    // '+10:00' > ['10',  '00']\n    // '-1530'  > ['-15', '30']\n    var chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\n    function offsetFromString(matcher, string) {\n        var matches = (string || '').match(matcher),\n            chunk,\n            parts,\n            minutes;\n\n        if (matches === null) {\n            return null;\n        }\n\n        chunk = matches[matches.length - 1] || [];\n        parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n        minutes = +(parts[1] * 60) + toInt(parts[2]);\n\n        return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;\n    }\n\n    // Return a moment from input, that is local/utc/zone equivalent to model.\n    function cloneWithOffset(input, model) {\n        var res, diff;\n        if (model._isUTC) {\n            res = model.clone();\n            diff =\n                (isMoment(input) || isDate(input)\n                    ? input.valueOf()\n                    : createLocal(input).valueOf()) - res.valueOf();\n            // Use low-level api, because this fn is low-level api.\n            res._d.setTime(res._d.valueOf() + diff);\n            hooks.updateOffset(res, false);\n            return res;\n        } else {\n            return createLocal(input).local();\n        }\n    }\n\n    function getDateOffset(m) {\n        // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n        // https://github.com/moment/moment/pull/1871\n        return -Math.round(m._d.getTimezoneOffset());\n    }\n\n    // HOOKS\n\n    // This function will be called whenever a moment is mutated.\n    // It is intended to keep the offset in sync with the timezone.\n    hooks.updateOffset = function () {};\n\n    // MOMENTS\n\n    // keepLocalTime = true means only change the timezone, without\n    // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n    // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n    // +0200, so we adjust the time as needed, to be valid.\n    //\n    // Keeping the time actually adds/subtracts (one hour)\n    // from the actual represented time. That is why we call updateOffset\n    // a second time. In case it wants us to change the offset again\n    // _changeInProgress == true case, then we have to adjust, because\n    // there is no such time in the given timezone.\n    function getSetOffset(input, keepLocalTime, keepMinutes) {\n        var offset = this._offset || 0,\n            localAdjust;\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n        if (input != null) {\n            if (typeof input === 'string') {\n                input = offsetFromString(matchShortOffset, input);\n                if (input === null) {\n                    return this;\n                }\n            } else if (Math.abs(input) < 16 && !keepMinutes) {\n                input = input * 60;\n            }\n            if (!this._isUTC && keepLocalTime) {\n                localAdjust = getDateOffset(this);\n            }\n            this._offset = input;\n            this._isUTC = true;\n            if (localAdjust != null) {\n                this.add(localAdjust, 'm');\n            }\n            if (offset !== input) {\n                if (!keepLocalTime || this._changeInProgress) {\n                    addSubtract(\n                        this,\n                        createDuration(input - offset, 'm'),\n                        1,\n                        false\n                    );\n                } else if (!this._changeInProgress) {\n                    this._changeInProgress = true;\n                    hooks.updateOffset(this, true);\n                    this._changeInProgress = null;\n                }\n            }\n            return this;\n        } else {\n            return this._isUTC ? offset : getDateOffset(this);\n        }\n    }\n\n    function getSetZone(input, keepLocalTime) {\n        if (input != null) {\n            if (typeof input !== 'string') {\n                input = -input;\n            }\n\n            this.utcOffset(input, keepLocalTime);\n\n            return this;\n        } else {\n            return -this.utcOffset();\n        }\n    }\n\n    function setOffsetToUTC(keepLocalTime) {\n        return this.utcOffset(0, keepLocalTime);\n    }\n\n    function setOffsetToLocal(keepLocalTime) {\n        if (this._isUTC) {\n            this.utcOffset(0, keepLocalTime);\n            this._isUTC = false;\n\n            if (keepLocalTime) {\n                this.subtract(getDateOffset(this), 'm');\n            }\n        }\n        return this;\n    }\n\n    function setOffsetToParsedOffset() {\n        if (this._tzm != null) {\n            this.utcOffset(this._tzm, false, true);\n        } else if (typeof this._i === 'string') {\n            var tZone = offsetFromString(matchOffset, this._i);\n            if (tZone != null) {\n                this.utcOffset(tZone);\n            } else {\n                this.utcOffset(0, true);\n            }\n        }\n        return this;\n    }\n\n    function hasAlignedHourOffset(input) {\n        if (!this.isValid()) {\n            return false;\n        }\n        input = input ? createLocal(input).utcOffset() : 0;\n\n        return (this.utcOffset() - input) % 60 === 0;\n    }\n\n    function isDaylightSavingTime() {\n        return (\n            this.utcOffset() > this.clone().month(0).utcOffset() ||\n            this.utcOffset() > this.clone().month(5).utcOffset()\n        );\n    }\n\n    function isDaylightSavingTimeShifted() {\n        if (!isUndefined(this._isDSTShifted)) {\n            return this._isDSTShifted;\n        }\n\n        var c = {},\n            other;\n\n        copyConfig(c, this);\n        c = prepareConfig(c);\n\n        if (c._a) {\n            other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n            this._isDSTShifted =\n                this.isValid() && compareArrays(c._a, other.toArray()) > 0;\n        } else {\n            this._isDSTShifted = false;\n        }\n\n        return this._isDSTShifted;\n    }\n\n    function isLocal() {\n        return this.isValid() ? !this._isUTC : false;\n    }\n\n    function isUtcOffset() {\n        return this.isValid() ? this._isUTC : false;\n    }\n\n    function isUtc() {\n        return this.isValid() ? this._isUTC && this._offset === 0 : false;\n    }\n\n    // ASP.NET json date format regex\n    var aspNetRegex = /^(-|\\+)?(?:(\\d*)[. ])?(\\d+):(\\d+)(?::(\\d+)(\\.\\d*)?)?$/,\n        // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n        // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n        // and further modified to allow for strings containing both week and day\n        isoRegex =\n            /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n\n    function createDuration(input, key) {\n        var duration = input,\n            // matching against regexp is expensive, do it on demand\n            match = null,\n            sign,\n            ret,\n            diffRes;\n\n        if (isDuration(input)) {\n            duration = {\n                ms: input._milliseconds,\n                d: input._days,\n                M: input._months,\n            };\n        } else if (isNumber(input) || !isNaN(+input)) {\n            duration = {};\n            if (key) {\n                duration[key] = +input;\n            } else {\n                duration.milliseconds = +input;\n            }\n        } else if ((match = aspNetRegex.exec(input))) {\n            sign = match[1] === '-' ? -1 : 1;\n            duration = {\n                y: 0,\n                d: toInt(match[DATE]) * sign,\n                h: toInt(match[HOUR]) * sign,\n                m: toInt(match[MINUTE]) * sign,\n                s: toInt(match[SECOND]) * sign,\n                ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match\n            };\n        } else if ((match = isoRegex.exec(input))) {\n            sign = match[1] === '-' ? -1 : 1;\n            duration = {\n                y: parseIso(match[2], sign),\n                M: parseIso(match[3], sign),\n                w: parseIso(match[4], sign),\n                d: parseIso(match[5], sign),\n                h: parseIso(match[6], sign),\n                m: parseIso(match[7], sign),\n                s: parseIso(match[8], sign),\n            };\n        } else if (duration == null) {\n            // checks for null or undefined\n            duration = {};\n        } else if (\n            typeof duration === 'object' &&\n            ('from' in duration || 'to' in duration)\n        ) {\n            diffRes = momentsDifference(\n                createLocal(duration.from),\n                createLocal(duration.to)\n            );\n\n            duration = {};\n            duration.ms = diffRes.milliseconds;\n            duration.M = diffRes.months;\n        }\n\n        ret = new Duration(duration);\n\n        if (isDuration(input) && hasOwnProp(input, '_locale')) {\n            ret._locale = input._locale;\n        }\n\n        if (isDuration(input) && hasOwnProp(input, '_isValid')) {\n            ret._isValid = input._isValid;\n        }\n\n        return ret;\n    }\n\n    createDuration.fn = Duration.prototype;\n    createDuration.invalid = createInvalid$1;\n\n    function parseIso(inp, sign) {\n        // We'd normally use ~~inp for this, but unfortunately it also\n        // converts floats to ints.\n        // inp may be undefined, so careful calling replace on it.\n        var res = inp && parseFloat(inp.replace(',', '.'));\n        // apply sign while we're at it\n        return (isNaN(res) ? 0 : res) * sign;\n    }\n\n    function positiveMomentsDifference(base, other) {\n        var res = {};\n\n        res.months =\n            other.month() - base.month() + (other.year() - base.year()) * 12;\n        if (base.clone().add(res.months, 'M').isAfter(other)) {\n            --res.months;\n        }\n\n        res.milliseconds = +other - +base.clone().add(res.months, 'M');\n\n        return res;\n    }\n\n    function momentsDifference(base, other) {\n        var res;\n        if (!(base.isValid() && other.isValid())) {\n            return { milliseconds: 0, months: 0 };\n        }\n\n        other = cloneWithOffset(other, base);\n        if (base.isBefore(other)) {\n            res = positiveMomentsDifference(base, other);\n        } else {\n            res = positiveMomentsDifference(other, base);\n            res.milliseconds = -res.milliseconds;\n            res.months = -res.months;\n        }\n\n        return res;\n    }\n\n    // TODO: remove 'name' arg after deprecation is removed\n    function createAdder(direction, name) {\n        return function (val, period) {\n            var dur, tmp;\n            //invert the arguments, but complain about it\n            if (period !== null && !isNaN(+period)) {\n                deprecateSimple(\n                    name,\n                    'moment().' +\n                        name +\n                        '(period, number) is deprecated. Please use moment().' +\n                        name +\n                        '(number, period). ' +\n                        'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'\n                );\n                tmp = val;\n                val = period;\n                period = tmp;\n            }\n\n            dur = createDuration(val, period);\n            addSubtract(this, dur, direction);\n            return this;\n        };\n    }\n\n    function addSubtract(mom, duration, isAdding, updateOffset) {\n        var milliseconds = duration._milliseconds,\n            days = absRound(duration._days),\n            months = absRound(duration._months);\n\n        if (!mom.isValid()) {\n            // No op\n            return;\n        }\n\n        updateOffset = updateOffset == null ? true : updateOffset;\n\n        if (months) {\n            setMonth(mom, get(mom, 'Month') + months * isAdding);\n        }\n        if (days) {\n            set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n        }\n        if (milliseconds) {\n            mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n        }\n        if (updateOffset) {\n            hooks.updateOffset(mom, days || months);\n        }\n    }\n\n    var add = createAdder(1, 'add'),\n        subtract = createAdder(-1, 'subtract');\n\n    function isString(input) {\n        return typeof input === 'string' || input instanceof String;\n    }\n\n    // type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined\n    function isMomentInput(input) {\n        return (\n            isMoment(input) ||\n            isDate(input) ||\n            isString(input) ||\n            isNumber(input) ||\n            isNumberOrStringArray(input) ||\n            isMomentInputObject(input) ||\n            input === null ||\n            input === undefined\n        );\n    }\n\n    function isMomentInputObject(input) {\n        var objectTest = isObject(input) && !isObjectEmpty(input),\n            propertyTest = false,\n            properties = [\n                'years',\n                'year',\n                'y',\n                'months',\n                'month',\n                'M',\n                'days',\n                'day',\n                'd',\n                'dates',\n                'date',\n                'D',\n                'hours',\n                'hour',\n                'h',\n                'minutes',\n                'minute',\n                'm',\n                'seconds',\n                'second',\n                's',\n                'milliseconds',\n                'millisecond',\n                'ms',\n            ],\n            i,\n            property,\n            propertyLen = properties.length;\n\n        for (i = 0; i < propertyLen; i += 1) {\n            property = properties[i];\n            propertyTest = propertyTest || hasOwnProp(input, property);\n        }\n\n        return objectTest && propertyTest;\n    }\n\n    function isNumberOrStringArray(input) {\n        var arrayTest = isArray(input),\n            dataTypeTest = false;\n        if (arrayTest) {\n            dataTypeTest =\n                input.filter(function (item) {\n                    return !isNumber(item) && isString(input);\n                }).length === 0;\n        }\n        return arrayTest && dataTypeTest;\n    }\n\n    function isCalendarSpec(input) {\n        var objectTest = isObject(input) && !isObjectEmpty(input),\n            propertyTest = false,\n            properties = [\n                'sameDay',\n                'nextDay',\n                'lastDay',\n                'nextWeek',\n                'lastWeek',\n                'sameElse',\n            ],\n            i,\n            property;\n\n        for (i = 0; i < properties.length; i += 1) {\n            property = properties[i];\n            propertyTest = propertyTest || hasOwnProp(input, property);\n        }\n\n        return objectTest && propertyTest;\n    }\n\n    function getCalendarFormat(myMoment, now) {\n        var diff = myMoment.diff(now, 'days', true);\n        return diff < -6\n            ? 'sameElse'\n            : diff < -1\n            ? 'lastWeek'\n            : diff < 0\n            ? 'lastDay'\n            : diff < 1\n            ? 'sameDay'\n            : diff < 2\n            ? 'nextDay'\n            : diff < 7\n            ? 'nextWeek'\n            : 'sameElse';\n    }\n\n    function calendar$1(time, formats) {\n        // Support for single parameter, formats only overload to the calendar function\n        if (arguments.length === 1) {\n            if (!arguments[0]) {\n                time = undefined;\n                formats = undefined;\n            } else if (isMomentInput(arguments[0])) {\n                time = arguments[0];\n                formats = undefined;\n            } else if (isCalendarSpec(arguments[0])) {\n                formats = arguments[0];\n                time = undefined;\n            }\n        }\n        // We want to compare the start of today, vs this.\n        // Getting start-of-today depends on whether we're local/utc/offset or not.\n        var now = time || createLocal(),\n            sod = cloneWithOffset(now, this).startOf('day'),\n            format = hooks.calendarFormat(this, sod) || 'sameElse',\n            output =\n                formats &&\n                (isFunction(formats[format])\n                    ? formats[format].call(this, now)\n                    : formats[format]);\n\n        return this.format(\n            output || this.localeData().calendar(format, this, createLocal(now))\n        );\n    }\n\n    function clone() {\n        return new Moment(this);\n    }\n\n    function isAfter(input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input);\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(units) || 'millisecond';\n        if (units === 'millisecond') {\n            return this.valueOf() > localInput.valueOf();\n        } else {\n            return localInput.valueOf() < this.clone().startOf(units).valueOf();\n        }\n    }\n\n    function isBefore(input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input);\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(units) || 'millisecond';\n        if (units === 'millisecond') {\n            return this.valueOf() < localInput.valueOf();\n        } else {\n            return this.clone().endOf(units).valueOf() < localInput.valueOf();\n        }\n    }\n\n    function isBetween(from, to, units, inclusivity) {\n        var localFrom = isMoment(from) ? from : createLocal(from),\n            localTo = isMoment(to) ? to : createLocal(to);\n        if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {\n            return false;\n        }\n        inclusivity = inclusivity || '()';\n        return (\n            (inclusivity[0] === '('\n                ? this.isAfter(localFrom, units)\n                : !this.isBefore(localFrom, units)) &&\n            (inclusivity[1] === ')'\n                ? this.isBefore(localTo, units)\n                : !this.isAfter(localTo, units))\n        );\n    }\n\n    function isSame(input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input),\n            inputMs;\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(units) || 'millisecond';\n        if (units === 'millisecond') {\n            return this.valueOf() === localInput.valueOf();\n        } else {\n            inputMs = localInput.valueOf();\n            return (\n                this.clone().startOf(units).valueOf() <= inputMs &&\n                inputMs <= this.clone().endOf(units).valueOf()\n            );\n        }\n    }\n\n    function isSameOrAfter(input, units) {\n        return this.isSame(input, units) || this.isAfter(input, units);\n    }\n\n    function isSameOrBefore(input, units) {\n        return this.isSame(input, units) || this.isBefore(input, units);\n    }\n\n    function diff(input, units, asFloat) {\n        var that, zoneDelta, output;\n\n        if (!this.isValid()) {\n            return NaN;\n        }\n\n        that = cloneWithOffset(input, this);\n\n        if (!that.isValid()) {\n            return NaN;\n        }\n\n        zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n\n        units = normalizeUnits(units);\n\n        switch (units) {\n            case 'year':\n                output = monthDiff(this, that) / 12;\n                break;\n            case 'month':\n                output = monthDiff(this, that);\n                break;\n            case 'quarter':\n                output = monthDiff(this, that) / 3;\n                break;\n            case 'second':\n                output = (this - that) / 1e3;\n                break; // 1000\n            case 'minute':\n                output = (this - that) / 6e4;\n                break; // 1000 * 60\n            case 'hour':\n                output = (this - that) / 36e5;\n                break; // 1000 * 60 * 60\n            case 'day':\n                output = (this - that - zoneDelta) / 864e5;\n                break; // 1000 * 60 * 60 * 24, negate dst\n            case 'week':\n                output = (this - that - zoneDelta) / 6048e5;\n                break; // 1000 * 60 * 60 * 24 * 7, negate dst\n            default:\n                output = this - that;\n        }\n\n        return asFloat ? output : absFloor(output);\n    }\n\n    function monthDiff(a, b) {\n        if (a.date() < b.date()) {\n            // end-of-month calculations work correct when the start month has more\n            // days than the end month.\n            return -monthDiff(b, a);\n        }\n        // difference in months\n        var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),\n            // b is in (anchor - 1 month, anchor + 1 month)\n            anchor = a.clone().add(wholeMonthDiff, 'months'),\n            anchor2,\n            adjust;\n\n        if (b - anchor < 0) {\n            anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n            // linear across the month\n            adjust = (b - anchor) / (anchor - anchor2);\n        } else {\n            anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n            // linear across the month\n            adjust = (b - anchor) / (anchor2 - anchor);\n        }\n\n        //check for negative zero, return zero if negative zero\n        return -(wholeMonthDiff + adjust) || 0;\n    }\n\n    hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n    hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\n    function toString() {\n        return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n    }\n\n    function toISOString(keepOffset) {\n        if (!this.isValid()) {\n            return null;\n        }\n        var utc = keepOffset !== true,\n            m = utc ? this.clone().utc() : this;\n        if (m.year() < 0 || m.year() > 9999) {\n            return formatMoment(\n                m,\n                utc\n                    ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'\n                    : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ'\n            );\n        }\n        if (isFunction(Date.prototype.toISOString)) {\n            // native implementation is ~50x faster, use it when we can\n            if (utc) {\n                return this.toDate().toISOString();\n            } else {\n                return new Date(this.valueOf() + this.utcOffset() * 60 * 1000)\n                    .toISOString()\n                    .replace('Z', formatMoment(m, 'Z'));\n            }\n        }\n        return formatMoment(\n            m,\n            utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ'\n        );\n    }\n\n    /**\n     * Return a human readable representation of a moment that can\n     * also be evaluated to get a new moment which is the same\n     *\n     * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n     */\n    function inspect() {\n        if (!this.isValid()) {\n            return 'moment.invalid(/* ' + this._i + ' */)';\n        }\n        var func = 'moment',\n            zone = '',\n            prefix,\n            year,\n            datetime,\n            suffix;\n        if (!this.isLocal()) {\n            func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n            zone = 'Z';\n        }\n        prefix = '[' + func + '(\"]';\n        year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';\n        datetime = '-MM-DD[T]HH:mm:ss.SSS';\n        suffix = zone + '[\")]';\n\n        return this.format(prefix + year + datetime + suffix);\n    }\n\n    function format(inputString) {\n        if (!inputString) {\n            inputString = this.isUtc()\n                ? hooks.defaultFormatUtc\n                : hooks.defaultFormat;\n        }\n        var output = formatMoment(this, inputString);\n        return this.localeData().postformat(output);\n    }\n\n    function from(time, withoutSuffix) {\n        if (\n            this.isValid() &&\n            ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n        ) {\n            return createDuration({ to: this, from: time })\n                .locale(this.locale())\n                .humanize(!withoutSuffix);\n        } else {\n            return this.localeData().invalidDate();\n        }\n    }\n\n    function fromNow(withoutSuffix) {\n        return this.from(createLocal(), withoutSuffix);\n    }\n\n    function to(time, withoutSuffix) {\n        if (\n            this.isValid() &&\n            ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n        ) {\n            return createDuration({ from: this, to: time })\n                .locale(this.locale())\n                .humanize(!withoutSuffix);\n        } else {\n            return this.localeData().invalidDate();\n        }\n    }\n\n    function toNow(withoutSuffix) {\n        return this.to(createLocal(), withoutSuffix);\n    }\n\n    // If passed a locale key, it will set the locale for this\n    // instance.  Otherwise, it will return the locale configuration\n    // variables for this instance.\n    function locale(key) {\n        var newLocaleData;\n\n        if (key === undefined) {\n            return this._locale._abbr;\n        } else {\n            newLocaleData = getLocale(key);\n            if (newLocaleData != null) {\n                this._locale = newLocaleData;\n            }\n            return this;\n        }\n    }\n\n    var lang = deprecate(\n        'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n        function (key) {\n            if (key === undefined) {\n                return this.localeData();\n            } else {\n                return this.locale(key);\n            }\n        }\n    );\n\n    function localeData() {\n        return this._locale;\n    }\n\n    var MS_PER_SECOND = 1000,\n        MS_PER_MINUTE = 60 * MS_PER_SECOND,\n        MS_PER_HOUR = 60 * MS_PER_MINUTE,\n        MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;\n\n    // actual modulo - handles negative numbers (for dates before 1970):\n    function mod$1(dividend, divisor) {\n        return ((dividend % divisor) + divisor) % divisor;\n    }\n\n    function localStartOfDate(y, m, d) {\n        // the date constructor remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            // preserve leap years using a full 400 year cycle, then reset\n            return new Date(y + 400, m, d) - MS_PER_400_YEARS;\n        } else {\n            return new Date(y, m, d).valueOf();\n        }\n    }\n\n    function utcStartOfDate(y, m, d) {\n        // Date.UTC remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            // preserve leap years using a full 400 year cycle, then reset\n            return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;\n        } else {\n            return Date.UTC(y, m, d);\n        }\n    }\n\n    function startOf(units) {\n        var time, startOfDate;\n        units = normalizeUnits(units);\n        if (units === undefined || units === 'millisecond' || !this.isValid()) {\n            return this;\n        }\n\n        startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n        switch (units) {\n            case 'year':\n                time = startOfDate(this.year(), 0, 1);\n                break;\n            case 'quarter':\n                time = startOfDate(\n                    this.year(),\n                    this.month() - (this.month() % 3),\n                    1\n                );\n                break;\n            case 'month':\n                time = startOfDate(this.year(), this.month(), 1);\n                break;\n            case 'week':\n                time = startOfDate(\n                    this.year(),\n                    this.month(),\n                    this.date() - this.weekday()\n                );\n                break;\n            case 'isoWeek':\n                time = startOfDate(\n                    this.year(),\n                    this.month(),\n                    this.date() - (this.isoWeekday() - 1)\n                );\n                break;\n            case 'day':\n            case 'date':\n                time = startOfDate(this.year(), this.month(), this.date());\n                break;\n            case 'hour':\n                time = this._d.valueOf();\n                time -= mod$1(\n                    time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n                    MS_PER_HOUR\n                );\n                break;\n            case 'minute':\n                time = this._d.valueOf();\n                time -= mod$1(time, MS_PER_MINUTE);\n                break;\n            case 'second':\n                time = this._d.valueOf();\n                time -= mod$1(time, MS_PER_SECOND);\n                break;\n        }\n\n        this._d.setTime(time);\n        hooks.updateOffset(this, true);\n        return this;\n    }\n\n    function endOf(units) {\n        var time, startOfDate;\n        units = normalizeUnits(units);\n        if (units === undefined || units === 'millisecond' || !this.isValid()) {\n            return this;\n        }\n\n        startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n        switch (units) {\n            case 'year':\n                time = startOfDate(this.year() + 1, 0, 1) - 1;\n                break;\n            case 'quarter':\n                time =\n                    startOfDate(\n                        this.year(),\n                        this.month() - (this.month() % 3) + 3,\n                        1\n                    ) - 1;\n                break;\n            case 'month':\n                time = startOfDate(this.year(), this.month() + 1, 1) - 1;\n                break;\n            case 'week':\n                time =\n                    startOfDate(\n                        this.year(),\n                        this.month(),\n                        this.date() - this.weekday() + 7\n                    ) - 1;\n                break;\n            case 'isoWeek':\n                time =\n                    startOfDate(\n                        this.year(),\n                        this.month(),\n                        this.date() - (this.isoWeekday() - 1) + 7\n                    ) - 1;\n                break;\n            case 'day':\n            case 'date':\n                time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;\n                break;\n            case 'hour':\n                time = this._d.valueOf();\n                time +=\n                    MS_PER_HOUR -\n                    mod$1(\n                        time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n                        MS_PER_HOUR\n                    ) -\n                    1;\n                break;\n            case 'minute':\n                time = this._d.valueOf();\n                time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;\n                break;\n            case 'second':\n                time = this._d.valueOf();\n                time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;\n                break;\n        }\n\n        this._d.setTime(time);\n        hooks.updateOffset(this, true);\n        return this;\n    }\n\n    function valueOf() {\n        return this._d.valueOf() - (this._offset || 0) * 60000;\n    }\n\n    function unix() {\n        return Math.floor(this.valueOf() / 1000);\n    }\n\n    function toDate() {\n        return new Date(this.valueOf());\n    }\n\n    function toArray() {\n        var m = this;\n        return [\n            m.year(),\n            m.month(),\n            m.date(),\n            m.hour(),\n            m.minute(),\n            m.second(),\n            m.millisecond(),\n        ];\n    }\n\n    function toObject() {\n        var m = this;\n        return {\n            years: m.year(),\n            months: m.month(),\n            date: m.date(),\n            hours: m.hours(),\n            minutes: m.minutes(),\n            seconds: m.seconds(),\n            milliseconds: m.milliseconds(),\n        };\n    }\n\n    function toJSON() {\n        // new Date(NaN).toJSON() === null\n        return this.isValid() ? this.toISOString() : null;\n    }\n\n    function isValid$2() {\n        return isValid(this);\n    }\n\n    function parsingFlags() {\n        return extend({}, getParsingFlags(this));\n    }\n\n    function invalidAt() {\n        return getParsingFlags(this).overflow;\n    }\n\n    function creationData() {\n        return {\n            input: this._i,\n            format: this._f,\n            locale: this._locale,\n            isUTC: this._isUTC,\n            strict: this._strict,\n        };\n    }\n\n    addFormatToken('N', 0, 0, 'eraAbbr');\n    addFormatToken('NN', 0, 0, 'eraAbbr');\n    addFormatToken('NNN', 0, 0, 'eraAbbr');\n    addFormatToken('NNNN', 0, 0, 'eraName');\n    addFormatToken('NNNNN', 0, 0, 'eraNarrow');\n\n    addFormatToken('y', ['y', 1], 'yo', 'eraYear');\n    addFormatToken('y', ['yy', 2], 0, 'eraYear');\n    addFormatToken('y', ['yyy', 3], 0, 'eraYear');\n    addFormatToken('y', ['yyyy', 4], 0, 'eraYear');\n\n    addRegexToken('N', matchEraAbbr);\n    addRegexToken('NN', matchEraAbbr);\n    addRegexToken('NNN', matchEraAbbr);\n    addRegexToken('NNNN', matchEraName);\n    addRegexToken('NNNNN', matchEraNarrow);\n\n    addParseToken(\n        ['N', 'NN', 'NNN', 'NNNN', 'NNNNN'],\n        function (input, array, config, token) {\n            var era = config._locale.erasParse(input, token, config._strict);\n            if (era) {\n                getParsingFlags(config).era = era;\n            } else {\n                getParsingFlags(config).invalidEra = input;\n            }\n        }\n    );\n\n    addRegexToken('y', matchUnsigned);\n    addRegexToken('yy', matchUnsigned);\n    addRegexToken('yyy', matchUnsigned);\n    addRegexToken('yyyy', matchUnsigned);\n    addRegexToken('yo', matchEraYearOrdinal);\n\n    addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR);\n    addParseToken(['yo'], function (input, array, config, token) {\n        var match;\n        if (config._locale._eraYearOrdinalRegex) {\n            match = input.match(config._locale._eraYearOrdinalRegex);\n        }\n\n        if (config._locale.eraYearOrdinalParse) {\n            array[YEAR] = config._locale.eraYearOrdinalParse(input, match);\n        } else {\n            array[YEAR] = parseInt(input, 10);\n        }\n    });\n\n    function localeEras(m, format) {\n        var i,\n            l,\n            date,\n            eras = this._eras || getLocale('en')._eras;\n        for (i = 0, l = eras.length; i < l; ++i) {\n            switch (typeof eras[i].since) {\n                case 'string':\n                    // truncate time\n                    date = hooks(eras[i].since).startOf('day');\n                    eras[i].since = date.valueOf();\n                    break;\n            }\n\n            switch (typeof eras[i].until) {\n                case 'undefined':\n                    eras[i].until = +Infinity;\n                    break;\n                case 'string':\n                    // truncate time\n                    date = hooks(eras[i].until).startOf('day').valueOf();\n                    eras[i].until = date.valueOf();\n                    break;\n            }\n        }\n        return eras;\n    }\n\n    function localeErasParse(eraName, format, strict) {\n        var i,\n            l,\n            eras = this.eras(),\n            name,\n            abbr,\n            narrow;\n        eraName = eraName.toUpperCase();\n\n        for (i = 0, l = eras.length; i < l; ++i) {\n            name = eras[i].name.toUpperCase();\n            abbr = eras[i].abbr.toUpperCase();\n            narrow = eras[i].narrow.toUpperCase();\n\n            if (strict) {\n                switch (format) {\n                    case 'N':\n                    case 'NN':\n                    case 'NNN':\n                        if (abbr === eraName) {\n                            return eras[i];\n                        }\n                        break;\n\n                    case 'NNNN':\n                        if (name === eraName) {\n                            return eras[i];\n                        }\n                        break;\n\n                    case 'NNNNN':\n                        if (narrow === eraName) {\n                            return eras[i];\n                        }\n                        break;\n                }\n            } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {\n                return eras[i];\n            }\n        }\n    }\n\n    function localeErasConvertYear(era, year) {\n        var dir = era.since <= era.until ? +1 : -1;\n        if (year === undefined) {\n            return hooks(era.since).year();\n        } else {\n            return hooks(era.since).year() + (year - era.offset) * dir;\n        }\n    }\n\n    function getEraName() {\n        var i,\n            l,\n            val,\n            eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n            // truncate time\n            val = this.clone().startOf('day').valueOf();\n\n            if (eras[i].since <= val && val <= eras[i].until) {\n                return eras[i].name;\n            }\n            if (eras[i].until <= val && val <= eras[i].since) {\n                return eras[i].name;\n            }\n        }\n\n        return '';\n    }\n\n    function getEraNarrow() {\n        var i,\n            l,\n            val,\n            eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n            // truncate time\n            val = this.clone().startOf('day').valueOf();\n\n            if (eras[i].since <= val && val <= eras[i].until) {\n                return eras[i].narrow;\n            }\n            if (eras[i].until <= val && val <= eras[i].since) {\n                return eras[i].narrow;\n            }\n        }\n\n        return '';\n    }\n\n    function getEraAbbr() {\n        var i,\n            l,\n            val,\n            eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n            // truncate time\n            val = this.clone().startOf('day').valueOf();\n\n            if (eras[i].since <= val && val <= eras[i].until) {\n                return eras[i].abbr;\n            }\n            if (eras[i].until <= val && val <= eras[i].since) {\n                return eras[i].abbr;\n            }\n        }\n\n        return '';\n    }\n\n    function getEraYear() {\n        var i,\n            l,\n            dir,\n            val,\n            eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n            dir = eras[i].since <= eras[i].until ? +1 : -1;\n\n            // truncate time\n            val = this.clone().startOf('day').valueOf();\n\n            if (\n                (eras[i].since <= val && val <= eras[i].until) ||\n                (eras[i].until <= val && val <= eras[i].since)\n            ) {\n                return (\n                    (this.year() - hooks(eras[i].since).year()) * dir +\n                    eras[i].offset\n                );\n            }\n        }\n\n        return this.year();\n    }\n\n    function erasNameRegex(isStrict) {\n        if (!hasOwnProp(this, '_erasNameRegex')) {\n            computeErasParse.call(this);\n        }\n        return isStrict ? this._erasNameRegex : this._erasRegex;\n    }\n\n    function erasAbbrRegex(isStrict) {\n        if (!hasOwnProp(this, '_erasAbbrRegex')) {\n            computeErasParse.call(this);\n        }\n        return isStrict ? this._erasAbbrRegex : this._erasRegex;\n    }\n\n    function erasNarrowRegex(isStrict) {\n        if (!hasOwnProp(this, '_erasNarrowRegex')) {\n            computeErasParse.call(this);\n        }\n        return isStrict ? this._erasNarrowRegex : this._erasRegex;\n    }\n\n    function matchEraAbbr(isStrict, locale) {\n        return locale.erasAbbrRegex(isStrict);\n    }\n\n    function matchEraName(isStrict, locale) {\n        return locale.erasNameRegex(isStrict);\n    }\n\n    function matchEraNarrow(isStrict, locale) {\n        return locale.erasNarrowRegex(isStrict);\n    }\n\n    function matchEraYearOrdinal(isStrict, locale) {\n        return locale._eraYearOrdinalRegex || matchUnsigned;\n    }\n\n    function computeErasParse() {\n        var abbrPieces = [],\n            namePieces = [],\n            narrowPieces = [],\n            mixedPieces = [],\n            i,\n            l,\n            eras = this.eras();\n\n        for (i = 0, l = eras.length; i < l; ++i) {\n            namePieces.push(regexEscape(eras[i].name));\n            abbrPieces.push(regexEscape(eras[i].abbr));\n            narrowPieces.push(regexEscape(eras[i].narrow));\n\n            mixedPieces.push(regexEscape(eras[i].name));\n            mixedPieces.push(regexEscape(eras[i].abbr));\n            mixedPieces.push(regexEscape(eras[i].narrow));\n        }\n\n        this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n        this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i');\n        this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i');\n        this._erasNarrowRegex = new RegExp(\n            '^(' + narrowPieces.join('|') + ')',\n            'i'\n        );\n    }\n\n    // FORMATTING\n\n    addFormatToken(0, ['gg', 2], 0, function () {\n        return this.weekYear() % 100;\n    });\n\n    addFormatToken(0, ['GG', 2], 0, function () {\n        return this.isoWeekYear() % 100;\n    });\n\n    function addWeekYearFormatToken(token, getter) {\n        addFormatToken(0, [token, token.length], 0, getter);\n    }\n\n    addWeekYearFormatToken('gggg', 'weekYear');\n    addWeekYearFormatToken('ggggg', 'weekYear');\n    addWeekYearFormatToken('GGGG', 'isoWeekYear');\n    addWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\n    // ALIASES\n\n    addUnitAlias('weekYear', 'gg');\n    addUnitAlias('isoWeekYear', 'GG');\n\n    // PRIORITY\n\n    addUnitPriority('weekYear', 1);\n    addUnitPriority('isoWeekYear', 1);\n\n    // PARSING\n\n    addRegexToken('G', matchSigned);\n    addRegexToken('g', matchSigned);\n    addRegexToken('GG', match1to2, match2);\n    addRegexToken('gg', match1to2, match2);\n    addRegexToken('GGGG', match1to4, match4);\n    addRegexToken('gggg', match1to4, match4);\n    addRegexToken('GGGGG', match1to6, match6);\n    addRegexToken('ggggg', match1to6, match6);\n\n    addWeekParseToken(\n        ['gggg', 'ggggg', 'GGGG', 'GGGGG'],\n        function (input, week, config, token) {\n            week[token.substr(0, 2)] = toInt(input);\n        }\n    );\n\n    addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n        week[token] = hooks.parseTwoDigitYear(input);\n    });\n\n    // MOMENTS\n\n    function getSetWeekYear(input) {\n        return getSetWeekYearHelper.call(\n            this,\n            input,\n            this.week(),\n            this.weekday(),\n            this.localeData()._week.dow,\n            this.localeData()._week.doy\n        );\n    }\n\n    function getSetISOWeekYear(input) {\n        return getSetWeekYearHelper.call(\n            this,\n            input,\n            this.isoWeek(),\n            this.isoWeekday(),\n            1,\n            4\n        );\n    }\n\n    function getISOWeeksInYear() {\n        return weeksInYear(this.year(), 1, 4);\n    }\n\n    function getISOWeeksInISOWeekYear() {\n        return weeksInYear(this.isoWeekYear(), 1, 4);\n    }\n\n    function getWeeksInYear() {\n        var weekInfo = this.localeData()._week;\n        return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n    }\n\n    function getWeeksInWeekYear() {\n        var weekInfo = this.localeData()._week;\n        return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);\n    }\n\n    function getSetWeekYearHelper(input, week, weekday, dow, doy) {\n        var weeksTarget;\n        if (input == null) {\n            return weekOfYear(this, dow, doy).year;\n        } else {\n            weeksTarget = weeksInYear(input, dow, doy);\n            if (week > weeksTarget) {\n                week = weeksTarget;\n            }\n            return setWeekAll.call(this, input, week, weekday, dow, doy);\n        }\n    }\n\n    function setWeekAll(weekYear, week, weekday, dow, doy) {\n        var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n            date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n\n        this.year(date.getUTCFullYear());\n        this.month(date.getUTCMonth());\n        this.date(date.getUTCDate());\n        return this;\n    }\n\n    // FORMATTING\n\n    addFormatToken('Q', 0, 'Qo', 'quarter');\n\n    // ALIASES\n\n    addUnitAlias('quarter', 'Q');\n\n    // PRIORITY\n\n    addUnitPriority('quarter', 7);\n\n    // PARSING\n\n    addRegexToken('Q', match1);\n    addParseToken('Q', function (input, array) {\n        array[MONTH] = (toInt(input) - 1) * 3;\n    });\n\n    // MOMENTS\n\n    function getSetQuarter(input) {\n        return input == null\n            ? Math.ceil((this.month() + 1) / 3)\n            : this.month((input - 1) * 3 + (this.month() % 3));\n    }\n\n    // FORMATTING\n\n    addFormatToken('D', ['DD', 2], 'Do', 'date');\n\n    // ALIASES\n\n    addUnitAlias('date', 'D');\n\n    // PRIORITY\n    addUnitPriority('date', 9);\n\n    // PARSING\n\n    addRegexToken('D', match1to2);\n    addRegexToken('DD', match1to2, match2);\n    addRegexToken('Do', function (isStrict, locale) {\n        // TODO: Remove \"ordinalParse\" fallback in next major release.\n        return isStrict\n            ? locale._dayOfMonthOrdinalParse || locale._ordinalParse\n            : locale._dayOfMonthOrdinalParseLenient;\n    });\n\n    addParseToken(['D', 'DD'], DATE);\n    addParseToken('Do', function (input, array) {\n        array[DATE] = toInt(input.match(match1to2)[0]);\n    });\n\n    // MOMENTS\n\n    var getSetDayOfMonth = makeGetSet('Date', true);\n\n    // FORMATTING\n\n    addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\n    // ALIASES\n\n    addUnitAlias('dayOfYear', 'DDD');\n\n    // PRIORITY\n    addUnitPriority('dayOfYear', 4);\n\n    // PARSING\n\n    addRegexToken('DDD', match1to3);\n    addRegexToken('DDDD', match3);\n    addParseToken(['DDD', 'DDDD'], function (input, array, config) {\n        config._dayOfYear = toInt(input);\n    });\n\n    // HELPERS\n\n    // MOMENTS\n\n    function getSetDayOfYear(input) {\n        var dayOfYear =\n            Math.round(\n                (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5\n            ) + 1;\n        return input == null ? dayOfYear : this.add(input - dayOfYear, 'd');\n    }\n\n    // FORMATTING\n\n    addFormatToken('m', ['mm', 2], 0, 'minute');\n\n    // ALIASES\n\n    addUnitAlias('minute', 'm');\n\n    // PRIORITY\n\n    addUnitPriority('minute', 14);\n\n    // PARSING\n\n    addRegexToken('m', match1to2);\n    addRegexToken('mm', match1to2, match2);\n    addParseToken(['m', 'mm'], MINUTE);\n\n    // MOMENTS\n\n    var getSetMinute = makeGetSet('Minutes', false);\n\n    // FORMATTING\n\n    addFormatToken('s', ['ss', 2], 0, 'second');\n\n    // ALIASES\n\n    addUnitAlias('second', 's');\n\n    // PRIORITY\n\n    addUnitPriority('second', 15);\n\n    // PARSING\n\n    addRegexToken('s', match1to2);\n    addRegexToken('ss', match1to2, match2);\n    addParseToken(['s', 'ss'], SECOND);\n\n    // MOMENTS\n\n    var getSetSecond = makeGetSet('Seconds', false);\n\n    // FORMATTING\n\n    addFormatToken('S', 0, 0, function () {\n        return ~~(this.millisecond() / 100);\n    });\n\n    addFormatToken(0, ['SS', 2], 0, function () {\n        return ~~(this.millisecond() / 10);\n    });\n\n    addFormatToken(0, ['SSS', 3], 0, 'millisecond');\n    addFormatToken(0, ['SSSS', 4], 0, function () {\n        return this.millisecond() * 10;\n    });\n    addFormatToken(0, ['SSSSS', 5], 0, function () {\n        return this.millisecond() * 100;\n    });\n    addFormatToken(0, ['SSSSSS', 6], 0, function () {\n        return this.millisecond() * 1000;\n    });\n    addFormatToken(0, ['SSSSSSS', 7], 0, function () {\n        return this.millisecond() * 10000;\n    });\n    addFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n        return this.millisecond() * 100000;\n    });\n    addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n        return this.millisecond() * 1000000;\n    });\n\n    // ALIASES\n\n    addUnitAlias('millisecond', 'ms');\n\n    // PRIORITY\n\n    addUnitPriority('millisecond', 16);\n\n    // PARSING\n\n    addRegexToken('S', match1to3, match1);\n    addRegexToken('SS', match1to3, match2);\n    addRegexToken('SSS', match1to3, match3);\n\n    var token, getSetMillisecond;\n    for (token = 'SSSS'; token.length <= 9; token += 'S') {\n        addRegexToken(token, matchUnsigned);\n    }\n\n    function parseMs(input, array) {\n        array[MILLISECOND] = toInt(('0.' + input) * 1000);\n    }\n\n    for (token = 'S'; token.length <= 9; token += 'S') {\n        addParseToken(token, parseMs);\n    }\n\n    getSetMillisecond = makeGetSet('Milliseconds', false);\n\n    // FORMATTING\n\n    addFormatToken('z', 0, 0, 'zoneAbbr');\n    addFormatToken('zz', 0, 0, 'zoneName');\n\n    // MOMENTS\n\n    function getZoneAbbr() {\n        return this._isUTC ? 'UTC' : '';\n    }\n\n    function getZoneName() {\n        return this._isUTC ? 'Coordinated Universal Time' : '';\n    }\n\n    var proto = Moment.prototype;\n\n    proto.add = add;\n    proto.calendar = calendar$1;\n    proto.clone = clone;\n    proto.diff = diff;\n    proto.endOf = endOf;\n    proto.format = format;\n    proto.from = from;\n    proto.fromNow = fromNow;\n    proto.to = to;\n    proto.toNow = toNow;\n    proto.get = stringGet;\n    proto.invalidAt = invalidAt;\n    proto.isAfter = isAfter;\n    proto.isBefore = isBefore;\n    proto.isBetween = isBetween;\n    proto.isSame = isSame;\n    proto.isSameOrAfter = isSameOrAfter;\n    proto.isSameOrBefore = isSameOrBefore;\n    proto.isValid = isValid$2;\n    proto.lang = lang;\n    proto.locale = locale;\n    proto.localeData = localeData;\n    proto.max = prototypeMax;\n    proto.min = prototypeMin;\n    proto.parsingFlags = parsingFlags;\n    proto.set = stringSet;\n    proto.startOf = startOf;\n    proto.subtract = subtract;\n    proto.toArray = toArray;\n    proto.toObject = toObject;\n    proto.toDate = toDate;\n    proto.toISOString = toISOString;\n    proto.inspect = inspect;\n    if (typeof Symbol !== 'undefined' && Symbol.for != null) {\n        proto[Symbol.for('nodejs.util.inspect.custom')] = function () {\n            return 'Moment<' + this.format() + '>';\n        };\n    }\n    proto.toJSON = toJSON;\n    proto.toString = toString;\n    proto.unix = unix;\n    proto.valueOf = valueOf;\n    proto.creationData = creationData;\n    proto.eraName = getEraName;\n    proto.eraNarrow = getEraNarrow;\n    proto.eraAbbr = getEraAbbr;\n    proto.eraYear = getEraYear;\n    proto.year = getSetYear;\n    proto.isLeapYear = getIsLeapYear;\n    proto.weekYear = getSetWeekYear;\n    proto.isoWeekYear = getSetISOWeekYear;\n    proto.quarter = proto.quarters = getSetQuarter;\n    proto.month = getSetMonth;\n    proto.daysInMonth = getDaysInMonth;\n    proto.week = proto.weeks = getSetWeek;\n    proto.isoWeek = proto.isoWeeks = getSetISOWeek;\n    proto.weeksInYear = getWeeksInYear;\n    proto.weeksInWeekYear = getWeeksInWeekYear;\n    proto.isoWeeksInYear = getISOWeeksInYear;\n    proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;\n    proto.date = getSetDayOfMonth;\n    proto.day = proto.days = getSetDayOfWeek;\n    proto.weekday = getSetLocaleDayOfWeek;\n    proto.isoWeekday = getSetISODayOfWeek;\n    proto.dayOfYear = getSetDayOfYear;\n    proto.hour = proto.hours = getSetHour;\n    proto.minute = proto.minutes = getSetMinute;\n    proto.second = proto.seconds = getSetSecond;\n    proto.millisecond = proto.milliseconds = getSetMillisecond;\n    proto.utcOffset = getSetOffset;\n    proto.utc = setOffsetToUTC;\n    proto.local = setOffsetToLocal;\n    proto.parseZone = setOffsetToParsedOffset;\n    proto.hasAlignedHourOffset = hasAlignedHourOffset;\n    proto.isDST = isDaylightSavingTime;\n    proto.isLocal = isLocal;\n    proto.isUtcOffset = isUtcOffset;\n    proto.isUtc = isUtc;\n    proto.isUTC = isUtc;\n    proto.zoneAbbr = getZoneAbbr;\n    proto.zoneName = getZoneName;\n    proto.dates = deprecate(\n        'dates accessor is deprecated. Use date instead.',\n        getSetDayOfMonth\n    );\n    proto.months = deprecate(\n        'months accessor is deprecated. Use month instead',\n        getSetMonth\n    );\n    proto.years = deprecate(\n        'years accessor is deprecated. Use year instead',\n        getSetYear\n    );\n    proto.zone = deprecate(\n        'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/',\n        getSetZone\n    );\n    proto.isDSTShifted = deprecate(\n        'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information',\n        isDaylightSavingTimeShifted\n    );\n\n    function createUnix(input) {\n        return createLocal(input * 1000);\n    }\n\n    function createInZone() {\n        return createLocal.apply(null, arguments).parseZone();\n    }\n\n    function preParsePostFormat(string) {\n        return string;\n    }\n\n    var proto$1 = Locale.prototype;\n\n    proto$1.calendar = calendar;\n    proto$1.longDateFormat = longDateFormat;\n    proto$1.invalidDate = invalidDate;\n    proto$1.ordinal = ordinal;\n    proto$1.preparse = preParsePostFormat;\n    proto$1.postformat = preParsePostFormat;\n    proto$1.relativeTime = relativeTime;\n    proto$1.pastFuture = pastFuture;\n    proto$1.set = set;\n    proto$1.eras = localeEras;\n    proto$1.erasParse = localeErasParse;\n    proto$1.erasConvertYear = localeErasConvertYear;\n    proto$1.erasAbbrRegex = erasAbbrRegex;\n    proto$1.erasNameRegex = erasNameRegex;\n    proto$1.erasNarrowRegex = erasNarrowRegex;\n\n    proto$1.months = localeMonths;\n    proto$1.monthsShort = localeMonthsShort;\n    proto$1.monthsParse = localeMonthsParse;\n    proto$1.monthsRegex = monthsRegex;\n    proto$1.monthsShortRegex = monthsShortRegex;\n    proto$1.week = localeWeek;\n    proto$1.firstDayOfYear = localeFirstDayOfYear;\n    proto$1.firstDayOfWeek = localeFirstDayOfWeek;\n\n    proto$1.weekdays = localeWeekdays;\n    proto$1.weekdaysMin = localeWeekdaysMin;\n    proto$1.weekdaysShort = localeWeekdaysShort;\n    proto$1.weekdaysParse = localeWeekdaysParse;\n\n    proto$1.weekdaysRegex = weekdaysRegex;\n    proto$1.weekdaysShortRegex = weekdaysShortRegex;\n    proto$1.weekdaysMinRegex = weekdaysMinRegex;\n\n    proto$1.isPM = localeIsPM;\n    proto$1.meridiem = localeMeridiem;\n\n    function get$1(format, index, field, setter) {\n        var locale = getLocale(),\n            utc = createUTC().set(setter, index);\n        return locale[field](utc, format);\n    }\n\n    function listMonthsImpl(format, index, field) {\n        if (isNumber(format)) {\n            index = format;\n            format = undefined;\n        }\n\n        format = format || '';\n\n        if (index != null) {\n            return get$1(format, index, field, 'month');\n        }\n\n        var i,\n            out = [];\n        for (i = 0; i < 12; i++) {\n            out[i] = get$1(format, i, field, 'month');\n        }\n        return out;\n    }\n\n    // ()\n    // (5)\n    // (fmt, 5)\n    // (fmt)\n    // (true)\n    // (true, 5)\n    // (true, fmt, 5)\n    // (true, fmt)\n    function listWeekdaysImpl(localeSorted, format, index, field) {\n        if (typeof localeSorted === 'boolean') {\n            if (isNumber(format)) {\n                index = format;\n                format = undefined;\n            }\n\n            format = format || '';\n        } else {\n            format = localeSorted;\n            index = format;\n            localeSorted = false;\n\n            if (isNumber(format)) {\n                index = format;\n                format = undefined;\n            }\n\n            format = format || '';\n        }\n\n        var locale = getLocale(),\n            shift = localeSorted ? locale._week.dow : 0,\n            i,\n            out = [];\n\n        if (index != null) {\n            return get$1(format, (index + shift) % 7, field, 'day');\n        }\n\n        for (i = 0; i < 7; i++) {\n            out[i] = get$1(format, (i + shift) % 7, field, 'day');\n        }\n        return out;\n    }\n\n    function listMonths(format, index) {\n        return listMonthsImpl(format, index, 'months');\n    }\n\n    function listMonthsShort(format, index) {\n        return listMonthsImpl(format, index, 'monthsShort');\n    }\n\n    function listWeekdays(localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n    }\n\n    function listWeekdaysShort(localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n    }\n\n    function listWeekdaysMin(localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n    }\n\n    getSetGlobalLocale('en', {\n        eras: [\n            {\n                since: '0001-01-01',\n                until: +Infinity,\n                offset: 1,\n                name: 'Anno Domini',\n                narrow: 'AD',\n                abbr: 'AD',\n            },\n            {\n                since: '0000-12-31',\n                until: -Infinity,\n                offset: 1,\n                name: 'Before Christ',\n                narrow: 'BC',\n                abbr: 'BC',\n            },\n        ],\n        dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    toInt((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                        ? 'st'\n                        : b === 2\n                        ? 'nd'\n                        : b === 3\n                        ? 'rd'\n                        : 'th';\n            return number + output;\n        },\n    });\n\n    // Side effect imports\n\n    hooks.lang = deprecate(\n        'moment.lang is deprecated. Use moment.locale instead.',\n        getSetGlobalLocale\n    );\n    hooks.langData = deprecate(\n        'moment.langData is deprecated. Use moment.localeData instead.',\n        getLocale\n    );\n\n    var mathAbs = Math.abs;\n\n    function abs() {\n        var data = this._data;\n\n        this._milliseconds = mathAbs(this._milliseconds);\n        this._days = mathAbs(this._days);\n        this._months = mathAbs(this._months);\n\n        data.milliseconds = mathAbs(data.milliseconds);\n        data.seconds = mathAbs(data.seconds);\n        data.minutes = mathAbs(data.minutes);\n        data.hours = mathAbs(data.hours);\n        data.months = mathAbs(data.months);\n        data.years = mathAbs(data.years);\n\n        return this;\n    }\n\n    function addSubtract$1(duration, input, value, direction) {\n        var other = createDuration(input, value);\n\n        duration._milliseconds += direction * other._milliseconds;\n        duration._days += direction * other._days;\n        duration._months += direction * other._months;\n\n        return duration._bubble();\n    }\n\n    // supports only 2.0-style add(1, 's') or add(duration)\n    function add$1(input, value) {\n        return addSubtract$1(this, input, value, 1);\n    }\n\n    // supports only 2.0-style subtract(1, 's') or subtract(duration)\n    function subtract$1(input, value) {\n        return addSubtract$1(this, input, value, -1);\n    }\n\n    function absCeil(number) {\n        if (number < 0) {\n            return Math.floor(number);\n        } else {\n            return Math.ceil(number);\n        }\n    }\n\n    function bubble() {\n        var milliseconds = this._milliseconds,\n            days = this._days,\n            months = this._months,\n            data = this._data,\n            seconds,\n            minutes,\n            hours,\n            years,\n            monthsFromDays;\n\n        // if we have a mix of positive and negative values, bubble down first\n        // check: https://github.com/moment/moment/issues/2166\n        if (\n            !(\n                (milliseconds >= 0 && days >= 0 && months >= 0) ||\n                (milliseconds <= 0 && days <= 0 && months <= 0)\n            )\n        ) {\n            milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n            days = 0;\n            months = 0;\n        }\n\n        // The following code bubbles up values, see the tests for\n        // examples of what that means.\n        data.milliseconds = milliseconds % 1000;\n\n        seconds = absFloor(milliseconds / 1000);\n        data.seconds = seconds % 60;\n\n        minutes = absFloor(seconds / 60);\n        data.minutes = minutes % 60;\n\n        hours = absFloor(minutes / 60);\n        data.hours = hours % 24;\n\n        days += absFloor(hours / 24);\n\n        // convert days to months\n        monthsFromDays = absFloor(daysToMonths(days));\n        months += monthsFromDays;\n        days -= absCeil(monthsToDays(monthsFromDays));\n\n        // 12 months -> 1 year\n        years = absFloor(months / 12);\n        months %= 12;\n\n        data.days = days;\n        data.months = months;\n        data.years = years;\n\n        return this;\n    }\n\n    function daysToMonths(days) {\n        // 400 years have 146097 days (taking into account leap year rules)\n        // 400 years have 12 months === 4800\n        return (days * 4800) / 146097;\n    }\n\n    function monthsToDays(months) {\n        // the reverse of daysToMonths\n        return (months * 146097) / 4800;\n    }\n\n    function as(units) {\n        if (!this.isValid()) {\n            return NaN;\n        }\n        var days,\n            months,\n            milliseconds = this._milliseconds;\n\n        units = normalizeUnits(units);\n\n        if (units === 'month' || units === 'quarter' || units === 'year') {\n            days = this._days + milliseconds / 864e5;\n            months = this._months + daysToMonths(days);\n            switch (units) {\n                case 'month':\n                    return months;\n                case 'quarter':\n                    return months / 3;\n                case 'year':\n                    return months / 12;\n            }\n        } else {\n            // handle milliseconds separately because of floating point math errors (issue #1867)\n            days = this._days + Math.round(monthsToDays(this._months));\n            switch (units) {\n                case 'week':\n                    return days / 7 + milliseconds / 6048e5;\n                case 'day':\n                    return days + milliseconds / 864e5;\n                case 'hour':\n                    return days * 24 + milliseconds / 36e5;\n                case 'minute':\n                    return days * 1440 + milliseconds / 6e4;\n                case 'second':\n                    return days * 86400 + milliseconds / 1000;\n                // Math.floor prevents floating point math errors here\n                case 'millisecond':\n                    return Math.floor(days * 864e5) + milliseconds;\n                default:\n                    throw new Error('Unknown unit ' + units);\n            }\n        }\n    }\n\n    // TODO: Use this.as('ms')?\n    function valueOf$1() {\n        if (!this.isValid()) {\n            return NaN;\n        }\n        return (\n            this._milliseconds +\n            this._days * 864e5 +\n            (this._months % 12) * 2592e6 +\n            toInt(this._months / 12) * 31536e6\n        );\n    }\n\n    function makeAs(alias) {\n        return function () {\n            return this.as(alias);\n        };\n    }\n\n    var asMilliseconds = makeAs('ms'),\n        asSeconds = makeAs('s'),\n        asMinutes = makeAs('m'),\n        asHours = makeAs('h'),\n        asDays = makeAs('d'),\n        asWeeks = makeAs('w'),\n        asMonths = makeAs('M'),\n        asQuarters = makeAs('Q'),\n        asYears = makeAs('y');\n\n    function clone$1() {\n        return createDuration(this);\n    }\n\n    function get$2(units) {\n        units = normalizeUnits(units);\n        return this.isValid() ? this[units + 's']() : NaN;\n    }\n\n    function makeGetter(name) {\n        return function () {\n            return this.isValid() ? this._data[name] : NaN;\n        };\n    }\n\n    var milliseconds = makeGetter('milliseconds'),\n        seconds = makeGetter('seconds'),\n        minutes = makeGetter('minutes'),\n        hours = makeGetter('hours'),\n        days = makeGetter('days'),\n        months = makeGetter('months'),\n        years = makeGetter('years');\n\n    function weeks() {\n        return absFloor(this.days() / 7);\n    }\n\n    var round = Math.round,\n        thresholds = {\n            ss: 44, // a few seconds to seconds\n            s: 45, // seconds to minute\n            m: 45, // minutes to hour\n            h: 22, // hours to day\n            d: 26, // days to month/week\n            w: null, // weeks to month\n            M: 11, // months to year\n        };\n\n    // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\n    function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n        return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n    }\n\n    function relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) {\n        var duration = createDuration(posNegDuration).abs(),\n            seconds = round(duration.as('s')),\n            minutes = round(duration.as('m')),\n            hours = round(duration.as('h')),\n            days = round(duration.as('d')),\n            months = round(duration.as('M')),\n            weeks = round(duration.as('w')),\n            years = round(duration.as('y')),\n            a =\n                (seconds <= thresholds.ss && ['s', seconds]) ||\n                (seconds < thresholds.s && ['ss', seconds]) ||\n                (minutes <= 1 && ['m']) ||\n                (minutes < thresholds.m && ['mm', minutes]) ||\n                (hours <= 1 && ['h']) ||\n                (hours < thresholds.h && ['hh', hours]) ||\n                (days <= 1 && ['d']) ||\n                (days < thresholds.d && ['dd', days]);\n\n        if (thresholds.w != null) {\n            a =\n                a ||\n                (weeks <= 1 && ['w']) ||\n                (weeks < thresholds.w && ['ww', weeks]);\n        }\n        a = a ||\n            (months <= 1 && ['M']) ||\n            (months < thresholds.M && ['MM', months]) ||\n            (years <= 1 && ['y']) || ['yy', years];\n\n        a[2] = withoutSuffix;\n        a[3] = +posNegDuration > 0;\n        a[4] = locale;\n        return substituteTimeAgo.apply(null, a);\n    }\n\n    // This function allows you to set the rounding function for relative time strings\n    function getSetRelativeTimeRounding(roundingFunction) {\n        if (roundingFunction === undefined) {\n            return round;\n        }\n        if (typeof roundingFunction === 'function') {\n            round = roundingFunction;\n            return true;\n        }\n        return false;\n    }\n\n    // This function allows you to set a threshold for relative time strings\n    function getSetRelativeTimeThreshold(threshold, limit) {\n        if (thresholds[threshold] === undefined) {\n            return false;\n        }\n        if (limit === undefined) {\n            return thresholds[threshold];\n        }\n        thresholds[threshold] = limit;\n        if (threshold === 's') {\n            thresholds.ss = limit - 1;\n        }\n        return true;\n    }\n\n    function humanize(argWithSuffix, argThresholds) {\n        if (!this.isValid()) {\n            return this.localeData().invalidDate();\n        }\n\n        var withSuffix = false,\n            th = thresholds,\n            locale,\n            output;\n\n        if (typeof argWithSuffix === 'object') {\n            argThresholds = argWithSuffix;\n            argWithSuffix = false;\n        }\n        if (typeof argWithSuffix === 'boolean') {\n            withSuffix = argWithSuffix;\n        }\n        if (typeof argThresholds === 'object') {\n            th = Object.assign({}, thresholds, argThresholds);\n            if (argThresholds.s != null && argThresholds.ss == null) {\n                th.ss = argThresholds.s - 1;\n            }\n        }\n\n        locale = this.localeData();\n        output = relativeTime$1(this, !withSuffix, th, locale);\n\n        if (withSuffix) {\n            output = locale.pastFuture(+this, output);\n        }\n\n        return locale.postformat(output);\n    }\n\n    var abs$1 = Math.abs;\n\n    function sign(x) {\n        return (x > 0) - (x < 0) || +x;\n    }\n\n    function toISOString$1() {\n        // for ISO strings we do not use the normal bubbling rules:\n        //  * milliseconds bubble up until they become hours\n        //  * days do not bubble at all\n        //  * months bubble up until they become years\n        // This is because there is no context-free conversion between hours and days\n        // (think of clock changes)\n        // and also not between days and months (28-31 days per month)\n        if (!this.isValid()) {\n            return this.localeData().invalidDate();\n        }\n\n        var seconds = abs$1(this._milliseconds) / 1000,\n            days = abs$1(this._days),\n            months = abs$1(this._months),\n            minutes,\n            hours,\n            years,\n            s,\n            total = this.asSeconds(),\n            totalSign,\n            ymSign,\n            daysSign,\n            hmsSign;\n\n        if (!total) {\n            // this is the same as C#'s (Noda) and python (isodate)...\n            // but not other JS (goog.date)\n            return 'P0D';\n        }\n\n        // 3600 seconds -> 60 minutes -> 1 hour\n        minutes = absFloor(seconds / 60);\n        hours = absFloor(minutes / 60);\n        seconds %= 60;\n        minutes %= 60;\n\n        // 12 months -> 1 year\n        years = absFloor(months / 12);\n        months %= 12;\n\n        // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n        s = seconds ? seconds.toFixed(3).replace(/\\.?0+$/, '') : '';\n\n        totalSign = total < 0 ? '-' : '';\n        ymSign = sign(this._months) !== sign(total) ? '-' : '';\n        daysSign = sign(this._days) !== sign(total) ? '-' : '';\n        hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\n\n        return (\n            totalSign +\n            'P' +\n            (years ? ymSign + years + 'Y' : '') +\n            (months ? ymSign + months + 'M' : '') +\n            (days ? daysSign + days + 'D' : '') +\n            (hours || minutes || seconds ? 'T' : '') +\n            (hours ? hmsSign + hours + 'H' : '') +\n            (minutes ? hmsSign + minutes + 'M' : '') +\n            (seconds ? hmsSign + s + 'S' : '')\n        );\n    }\n\n    var proto$2 = Duration.prototype;\n\n    proto$2.isValid = isValid$1;\n    proto$2.abs = abs;\n    proto$2.add = add$1;\n    proto$2.subtract = subtract$1;\n    proto$2.as = as;\n    proto$2.asMilliseconds = asMilliseconds;\n    proto$2.asSeconds = asSeconds;\n    proto$2.asMinutes = asMinutes;\n    proto$2.asHours = asHours;\n    proto$2.asDays = asDays;\n    proto$2.asWeeks = asWeeks;\n    proto$2.asMonths = asMonths;\n    proto$2.asQuarters = asQuarters;\n    proto$2.asYears = asYears;\n    proto$2.valueOf = valueOf$1;\n    proto$2._bubble = bubble;\n    proto$2.clone = clone$1;\n    proto$2.get = get$2;\n    proto$2.milliseconds = milliseconds;\n    proto$2.seconds = seconds;\n    proto$2.minutes = minutes;\n    proto$2.hours = hours;\n    proto$2.days = days;\n    proto$2.weeks = weeks;\n    proto$2.months = months;\n    proto$2.years = years;\n    proto$2.humanize = humanize;\n    proto$2.toISOString = toISOString$1;\n    proto$2.toString = toISOString$1;\n    proto$2.toJSON = toISOString$1;\n    proto$2.locale = locale;\n    proto$2.localeData = localeData;\n\n    proto$2.toIsoString = deprecate(\n        'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)',\n        toISOString$1\n    );\n    proto$2.lang = lang;\n\n    // FORMATTING\n\n    addFormatToken('X', 0, 0, 'unix');\n    addFormatToken('x', 0, 0, 'valueOf');\n\n    // PARSING\n\n    addRegexToken('x', matchSigned);\n    addRegexToken('X', matchTimestamp);\n    addParseToken('X', function (input, array, config) {\n        config._d = new Date(parseFloat(input) * 1000);\n    });\n    addParseToken('x', function (input, array, config) {\n        config._d = new Date(toInt(input));\n    });\n\n    //! moment.js\n\n    hooks.version = '2.29.4';\n\n    setHookCallback(createLocal);\n\n    hooks.fn = proto;\n    hooks.min = min;\n    hooks.max = max;\n    hooks.now = now;\n    hooks.utc = createUTC;\n    hooks.unix = createUnix;\n    hooks.months = listMonths;\n    hooks.isDate = isDate;\n    hooks.locale = getSetGlobalLocale;\n    hooks.invalid = createInvalid;\n    hooks.duration = createDuration;\n    hooks.isMoment = isMoment;\n    hooks.weekdays = listWeekdays;\n    hooks.parseZone = createInZone;\n    hooks.localeData = getLocale;\n    hooks.isDuration = isDuration;\n    hooks.monthsShort = listMonthsShort;\n    hooks.weekdaysMin = listWeekdaysMin;\n    hooks.defineLocale = defineLocale;\n    hooks.updateLocale = updateLocale;\n    hooks.locales = listLocales;\n    hooks.weekdaysShort = listWeekdaysShort;\n    hooks.normalizeUnits = normalizeUnits;\n    hooks.relativeTimeRounding = getSetRelativeTimeRounding;\n    hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\n    hooks.calendarFormat = getCalendarFormat;\n    hooks.prototype = proto;\n\n    // currently HTML5 input type only supports 24-hour formats\n    hooks.HTML5_FMT = {\n        DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // <input type=\"datetime-local\" />\n        DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // <input type=\"datetime-local\" step=\"1\" />\n        DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // <input type=\"datetime-local\" step=\"0.001\" />\n        DATE: 'YYYY-MM-DD', // <input type=\"date\" />\n        TIME: 'HH:mm', // <input type=\"time\" />\n        TIME_SECONDS: 'HH:mm:ss', // <input type=\"time\" step=\"1\" />\n        TIME_MS: 'HH:mm:ss.SSS', // <input type=\"time\" step=\"0.001\" />\n        WEEK: 'GGGG-[W]WW', // <input type=\"week\" />\n        MONTH: 'YYYY-MM', // <input type=\"month\" />\n    };\n\n    return hooks;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L21vbWVudC5qcyIsIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsSUFBSSxLQUE0RDtBQUNoRSxJQUFJLENBQ3lCO0FBQzdCLENBQUMsc0JBQXNCOztBQUV2Qjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixZQUFZO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHdCQUF3QixTQUFTO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esd0JBQXdCLHlCQUF5QjtBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLFlBQVk7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRDtBQUNoRCxzQkFBc0I7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixJQUFJO0FBQ3hCO0FBQ0E7O0FBRUE7QUFDQSwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQztBQUNyQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esd0dBQXdHLElBQUksd0JBQXdCLElBQUksdURBQXVELElBQUk7QUFDbk0scUVBQXFFLElBQUk7QUFDekUsNEJBQTRCO0FBQzVCOztBQUVBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDJDQUEyQyxZQUFZO0FBQ3ZEO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixZQUFZO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDRDQUE0QyxJQUFJOztBQUVoRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZ0NBQWdDO0FBQ2hDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCLGtDQUFrQztBQUMvRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFD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O0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLFFBQVE7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixRQUFRO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixRQUFRO0FBQzVCO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixRQUFRO0FBQzVCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsd0JBQXdCLE9BQU87QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG9CQUFvQixPQUFPO0FBQzNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixPQUFPO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0Esb0JBQW9CO0FBQ3BCLDJCQUEyQjtBQUMzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsVUFBVTtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxRQUFhO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQyxTQUFPO0FBQ3hDLGdCQUFnQiw4RUFBZSxJQUFXLE9BQU8sQ0FBQztBQUNsRDtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixFQUFFLElBQUksRUFBRTtBQUNwQztBQUNBLDRCQUE0QixFQUFFLElBQUksRUFBRTtBQUNwQztBQUNBO0FBQ0EscUNBQXFDLEVBQUU7QUFDdkMsK0JBQStCLEVBQUU7QUFDakMsaUNBQWlDLEVBQUU7QUFDbkMsK0JBQStCLEVBQUU7QUFDakMsNkJBQTZCLEVBQUUsSUFBSSxFQUFFO0FBQ3JDLDRCQUE0QixFQUFFO0FBQzlCLG1DQUFtQyxHQUFHO0FBQ3RDLDZCQUE2QixFQUFFO0FBQy9CLCtCQUErQixFQUFFLElBQUksRUFBRTtBQUN2Qyw4QkFBOEIsRUFBRSxJQUFJLEVBQUU7QUFDdEMsNEJBQTRCLEVBQUU7QUFDOUIsMkJBQTJCLEVBQUU7QUFDN0IseUJBQXlCLEVBQUU7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3REFBd0QsSUFBSSwwREFBMEQsSUFBSSxxRUFBcUUsRUFBRTtBQUNqTTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx5Q0FBeUMsT0FBTztBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkNBQTZDLE9BQU87QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQiwrQkFBK0I7QUFDbkQ7QUFDQTs7QUFFQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLGNBQWM7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsb0JBQW9CLGdCQUFnQjtBQUNwQztBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsbUNBQW1DLGlCQUFpQjtBQUNwRDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBLFVBQVU7QUFDVjtBQUNBLFVBQVU7QUFDVjtBQUNBLFVBQVU7QUFDVjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0EsVUFBVTtBQUNWO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxVQUFVO0FBQ1Y7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLG9CQUFvQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG9CQUFvQixjQUFjO0FBQ2xDO0FBQ0E7QUFDQSxrQ0FBa0M7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0M7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsU0FBUztBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSw0R0FBNEc7QUFDNUc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsb0JBQW9CLGlCQUFpQjtBQUNyQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsb0JBQW9CLHVCQUF1QjtBQUMzQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0Msc0JBQXNCO0FBQzFEO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DLHNCQUFzQjtBQUMxRDtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHdCQUF3QjtBQUN4Qjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLE9BQU87QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxxQ0FBcUMsT0FBTztBQUM1QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLE9BQU87QUFDNUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUMsT0FBTztBQUM1QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQyxPQUFPO0FBQzVDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUMsT0FBTztBQUM1Qzs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEscUNBQXFDLE9BQU87QUFDNUM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EseUJBQXlCLG1CQUFtQjtBQUM1QztBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxzQkFBc0IsbUJBQW1CO0FBQ3pDO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esb0JBQW9CLFFBQVE7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsb0JBQW9CLE9BQU87QUFDM0I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxvQ0FBb0MsSUFBSTtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQztBQUNqQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbW9tZW50LmpzPzkzODAiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qc1xuLy8hIHZlcnNpb24gOiAyLjI5LjRcbi8vISBhdXRob3JzIDogVGltIFdvb2QsIElza3JlbiBDaGVybmV2LCBNb21lbnQuanMgY29udHJpYnV0b3JzXG4vLyEgbGljZW5zZSA6IE1JVFxuLy8hIG1vbWVudGpzLmNvbVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKSA6XG4gICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKGZhY3RvcnkpIDpcbiAgICBnbG9iYWwubW9tZW50ID0gZmFjdG9yeSgpXG59KHRoaXMsIChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIHZhciBob29rQ2FsbGJhY2s7XG5cbiAgICBmdW5jdGlvbiBob29rcygpIHtcbiAgICAgICAgcmV0dXJuIGhvb2tDYWxsYmFjay5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgIH1cblxuICAgIC8vIFRoaXMgaXMgZG9uZSB0byByZWdpc3RlciB0aGUgbWV0aG9kIGNhbGxlZCB3aXRoIG1vbWVudCgpXG4gICAgLy8gd2l0aG91dCBjcmVhdGluZyBjaXJjdWxhciBkZXBlbmRlbmNpZXMuXG4gICAgZnVuY3Rpb24gc2V0SG9va0NhbGxiYWNrKGNhbGxiYWNrKSB7XG4gICAgICAgIGhvb2tDYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzQXJyYXkoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGlucHV0IGluc3RhbmNlb2YgQXJyYXkgfHxcbiAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpbnB1dCkgPT09ICdbb2JqZWN0IEFycmF5XSdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc09iamVjdChpbnB1dCkge1xuICAgICAgICAvLyBJRTggd2lsbCB0cmVhdCB1bmRlZmluZWQgYW5kIG51bGwgYXMgb2JqZWN0IGlmIGl0IHdhc24ndCBmb3JcbiAgICAgICAgLy8gaW5wdXQgIT0gbnVsbFxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgaW5wdXQgIT0gbnVsbCAmJlxuICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGlucHV0KSA9PT0gJ1tvYmplY3QgT2JqZWN0XSdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoYXNPd25Qcm9wKGEsIGIpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhLCBiKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc09iamVjdEVtcHR5KG9iaikge1xuICAgICAgICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopLmxlbmd0aCA9PT0gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBrO1xuICAgICAgICAgICAgZm9yIChrIGluIG9iaikge1xuICAgICAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKG9iaiwgaykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNVbmRlZmluZWQoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0ID09PSB2b2lkIDA7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNOdW1iZXIoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHR5cGVvZiBpbnB1dCA9PT0gJ251bWJlcicgfHxcbiAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpbnB1dCkgPT09ICdbb2JqZWN0IE51bWJlcl0nXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNEYXRlKGlucHV0KSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBpbnB1dCBpbnN0YW5jZW9mIERhdGUgfHxcbiAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpbnB1dCkgPT09ICdbb2JqZWN0IERhdGVdJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1hcChhcnIsIGZuKSB7XG4gICAgICAgIHZhciByZXMgPSBbXSxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBhcnJMZW4gPSBhcnIubGVuZ3RoO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYXJyTGVuOyArK2kpIHtcbiAgICAgICAgICAgIHJlcy5wdXNoKGZuKGFycltpXSwgaSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXh0ZW5kKGEsIGIpIHtcbiAgICAgICAgZm9yICh2YXIgaSBpbiBiKSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duUHJvcChiLCBpKSkge1xuICAgICAgICAgICAgICAgIGFbaV0gPSBiW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGhhc093blByb3AoYiwgJ3RvU3RyaW5nJykpIHtcbiAgICAgICAgICAgIGEudG9TdHJpbmcgPSBiLnRvU3RyaW5nO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGhhc093blByb3AoYiwgJ3ZhbHVlT2YnKSkge1xuICAgICAgICAgICAgYS52YWx1ZU9mID0gYi52YWx1ZU9mO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGE7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlVVRDKGlucHV0LCBmb3JtYXQsIGxvY2FsZSwgc3RyaWN0KSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVMb2NhbE9yVVRDKGlucHV0LCBmb3JtYXQsIGxvY2FsZSwgc3RyaWN0LCB0cnVlKS51dGMoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZWZhdWx0UGFyc2luZ0ZsYWdzKCkge1xuICAgICAgICAvLyBXZSBuZWVkIHRvIGRlZXAgY2xvbmUgdGhpcyBvYmplY3QuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBlbXB0eTogZmFsc2UsXG4gICAgICAgICAgICB1bnVzZWRUb2tlbnM6IFtdLFxuICAgICAgICAgICAgdW51c2VkSW5wdXQ6IFtdLFxuICAgICAgICAgICAgb3ZlcmZsb3c6IC0yLFxuICAgICAgICAgICAgY2hhcnNMZWZ0T3ZlcjogMCxcbiAgICAgICAgICAgIG51bGxJbnB1dDogZmFsc2UsXG4gICAgICAgICAgICBpbnZhbGlkRXJhOiBudWxsLFxuICAgICAgICAgICAgaW52YWxpZE1vbnRoOiBudWxsLFxuICAgICAgICAgICAgaW52YWxpZEZvcm1hdDogZmFsc2UsXG4gICAgICAgICAgICB1c2VySW52YWxpZGF0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgaXNvOiBmYWxzZSxcbiAgICAgICAgICAgIHBhcnNlZERhdGVQYXJ0czogW10sXG4gICAgICAgICAgICBlcmE6IG51bGwsXG4gICAgICAgICAgICBtZXJpZGllbTogbnVsbCxcbiAgICAgICAgICAgIHJmYzI4MjI6IGZhbHNlLFxuICAgICAgICAgICAgd2Vla2RheU1pc21hdGNoOiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRQYXJzaW5nRmxhZ3MobSkge1xuICAgICAgICBpZiAobS5fcGYgPT0gbnVsbCkge1xuICAgICAgICAgICAgbS5fcGYgPSBkZWZhdWx0UGFyc2luZ0ZsYWdzKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG0uX3BmO1xuICAgIH1cblxuICAgIHZhciBzb21lO1xuICAgIGlmIChBcnJheS5wcm90b3R5cGUuc29tZSkge1xuICAgICAgICBzb21lID0gQXJyYXkucHJvdG90eXBlLnNvbWU7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgc29tZSA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICAgICAgICAgIHZhciB0ID0gT2JqZWN0KHRoaXMpLFxuICAgICAgICAgICAgICAgIGxlbiA9IHQubGVuZ3RoID4+PiAwLFxuICAgICAgICAgICAgICAgIGk7XG5cbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChpIGluIHQgJiYgZnVuLmNhbGwodGhpcywgdFtpXSwgaSwgdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNWYWxpZChtKSB7XG4gICAgICAgIGlmIChtLl9pc1ZhbGlkID09IG51bGwpIHtcbiAgICAgICAgICAgIHZhciBmbGFncyA9IGdldFBhcnNpbmdGbGFncyhtKSxcbiAgICAgICAgICAgICAgICBwYXJzZWRQYXJ0cyA9IHNvbWUuY2FsbChmbGFncy5wYXJzZWREYXRlUGFydHMsIGZ1bmN0aW9uIChpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpICE9IG51bGw7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgaXNOb3dWYWxpZCA9XG4gICAgICAgICAgICAgICAgICAgICFpc05hTihtLl9kLmdldFRpbWUoKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3Mub3ZlcmZsb3cgPCAwICYmXG4gICAgICAgICAgICAgICAgICAgICFmbGFncy5lbXB0eSAmJlxuICAgICAgICAgICAgICAgICAgICAhZmxhZ3MuaW52YWxpZEVyYSAmJlxuICAgICAgICAgICAgICAgICAgICAhZmxhZ3MuaW52YWxpZE1vbnRoICYmXG4gICAgICAgICAgICAgICAgICAgICFmbGFncy5pbnZhbGlkV2Vla2RheSAmJlxuICAgICAgICAgICAgICAgICAgICAhZmxhZ3Mud2Vla2RheU1pc21hdGNoICYmXG4gICAgICAgICAgICAgICAgICAgICFmbGFncy5udWxsSW5wdXQgJiZcbiAgICAgICAgICAgICAgICAgICAgIWZsYWdzLmludmFsaWRGb3JtYXQgJiZcbiAgICAgICAgICAgICAgICAgICAgIWZsYWdzLnVzZXJJbnZhbGlkYXRlZCAmJlxuICAgICAgICAgICAgICAgICAgICAoIWZsYWdzLm1lcmlkaWVtIHx8IChmbGFncy5tZXJpZGllbSAmJiBwYXJzZWRQYXJ0cykpO1xuXG4gICAgICAgICAgICBpZiAobS5fc3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgaXNOb3dWYWxpZCA9XG4gICAgICAgICAgICAgICAgICAgIGlzTm93VmFsaWQgJiZcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MuY2hhcnNMZWZ0T3ZlciA9PT0gMCAmJlxuICAgICAgICAgICAgICAgICAgICBmbGFncy51bnVzZWRUb2tlbnMubGVuZ3RoID09PSAwICYmXG4gICAgICAgICAgICAgICAgICAgIGZsYWdzLmJpZ0hvdXIgPT09IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKE9iamVjdC5pc0Zyb3plbiA9PSBudWxsIHx8ICFPYmplY3QuaXNGcm96ZW4obSkpIHtcbiAgICAgICAgICAgICAgICBtLl9pc1ZhbGlkID0gaXNOb3dWYWxpZDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzTm93VmFsaWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG0uX2lzVmFsaWQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlSW52YWxpZChmbGFncykge1xuICAgICAgICB2YXIgbSA9IGNyZWF0ZVVUQyhOYU4pO1xuICAgICAgICBpZiAoZmxhZ3MgIT0gbnVsbCkge1xuICAgICAgICAgICAgZXh0ZW5kKGdldFBhcnNpbmdGbGFncyhtKSwgZmxhZ3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKG0pLnVzZXJJbnZhbGlkYXRlZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICAvLyBQbHVnaW5zIHRoYXQgYWRkIHByb3BlcnRpZXMgc2hvdWxkIGFsc28gYWRkIHRoZSBrZXkgaGVyZSAobnVsbCB2YWx1ZSksXG4gICAgLy8gc28gd2UgY2FuIHByb3Blcmx5IGNsb25lIG91cnNlbHZlcy5cbiAgICB2YXIgbW9tZW50UHJvcGVydGllcyA9IChob29rcy5tb21lbnRQcm9wZXJ0aWVzID0gW10pLFxuICAgICAgICB1cGRhdGVJblByb2dyZXNzID0gZmFsc2U7XG5cbiAgICBmdW5jdGlvbiBjb3B5Q29uZmlnKHRvLCBmcm9tKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgcHJvcCxcbiAgICAgICAgICAgIHZhbCxcbiAgICAgICAgICAgIG1vbWVudFByb3BlcnRpZXNMZW4gPSBtb21lbnRQcm9wZXJ0aWVzLmxlbmd0aDtcblxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2lzQU1vbWVudE9iamVjdCkpIHtcbiAgICAgICAgICAgIHRvLl9pc0FNb21lbnRPYmplY3QgPSBmcm9tLl9pc0FNb21lbnRPYmplY3Q7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9pKSkge1xuICAgICAgICAgICAgdG8uX2kgPSBmcm9tLl9pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fZikpIHtcbiAgICAgICAgICAgIHRvLl9mID0gZnJvbS5fZjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2wpKSB7XG4gICAgICAgICAgICB0by5fbCA9IGZyb20uX2w7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9zdHJpY3QpKSB7XG4gICAgICAgICAgICB0by5fc3RyaWN0ID0gZnJvbS5fc3RyaWN0O1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fdHptKSkge1xuICAgICAgICAgICAgdG8uX3R6bSA9IGZyb20uX3R6bTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2lzVVRDKSkge1xuICAgICAgICAgICAgdG8uX2lzVVRDID0gZnJvbS5faXNVVEM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9vZmZzZXQpKSB7XG4gICAgICAgICAgICB0by5fb2Zmc2V0ID0gZnJvbS5fb2Zmc2V0O1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fcGYpKSB7XG4gICAgICAgICAgICB0by5fcGYgPSBnZXRQYXJzaW5nRmxhZ3MoZnJvbSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9sb2NhbGUpKSB7XG4gICAgICAgICAgICB0by5fbG9jYWxlID0gZnJvbS5fbG9jYWxlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1vbWVudFByb3BlcnRpZXNMZW4gPiAwKSB7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbW9tZW50UHJvcGVydGllc0xlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgcHJvcCA9IG1vbWVudFByb3BlcnRpZXNbaV07XG4gICAgICAgICAgICAgICAgdmFsID0gZnJvbVtwcm9wXTtcbiAgICAgICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKHZhbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9bcHJvcF0gPSB2YWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRvO1xuICAgIH1cblxuICAgIC8vIE1vbWVudCBwcm90b3R5cGUgb2JqZWN0XG4gICAgZnVuY3Rpb24gTW9tZW50KGNvbmZpZykge1xuICAgICAgICBjb3B5Q29uZmlnKHRoaXMsIGNvbmZpZyk7XG4gICAgICAgIHRoaXMuX2QgPSBuZXcgRGF0ZShjb25maWcuX2QgIT0gbnVsbCA/IGNvbmZpZy5fZC5nZXRUaW1lKCkgOiBOYU4pO1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICB0aGlzLl9kID0gbmV3IERhdGUoTmFOKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBQcmV2ZW50IGluZmluaXRlIGxvb3AgaW4gY2FzZSB1cGRhdGVPZmZzZXQgY3JlYXRlcyBuZXcgbW9tZW50XG4gICAgICAgIC8vIG9iamVjdHMuXG4gICAgICAgIGlmICh1cGRhdGVJblByb2dyZXNzID09PSBmYWxzZSkge1xuICAgICAgICAgICAgdXBkYXRlSW5Qcm9ncmVzcyA9IHRydWU7XG4gICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQodGhpcyk7XG4gICAgICAgICAgICB1cGRhdGVJblByb2dyZXNzID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc01vbWVudChvYmopIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIG9iaiBpbnN0YW5jZW9mIE1vbWVudCB8fCAob2JqICE9IG51bGwgJiYgb2JqLl9pc0FNb21lbnRPYmplY3QgIT0gbnVsbClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3YXJuKG1zZykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBob29rcy5zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZ3MgPT09IGZhbHNlICYmXG4gICAgICAgICAgICB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgIGNvbnNvbGUud2FyblxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignRGVwcmVjYXRpb24gd2FybmluZzogJyArIG1zZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZXByZWNhdGUobXNnLCBmbikge1xuICAgICAgICB2YXIgZmlyc3RUaW1lID0gdHJ1ZTtcblxuICAgICAgICByZXR1cm4gZXh0ZW5kKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChob29rcy5kZXByZWNhdGlvbkhhbmRsZXIgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlcihudWxsLCBtc2cpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZpcnN0VGltZSkge1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gW10sXG4gICAgICAgICAgICAgICAgICAgIGFyZyxcbiAgICAgICAgICAgICAgICAgICAgaSxcbiAgICAgICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgICAgICBhcmdMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBhcmdMZW47IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBhcmcgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbaV0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgKz0gJ1xcblsnICsgaSArICddICc7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGtleSBpbiBhcmd1bWVudHNbMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzT3duUHJvcChhcmd1bWVudHNbMF0sIGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnICs9IGtleSArICc6ICcgKyBhcmd1bWVudHNbMF1ba2V5XSArICcsICc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gYXJnLnNsaWNlKDAsIC0yKTsgLy8gUmVtb3ZlIHRyYWlsaW5nIGNvbW1hIGFuZCBzcGFjZVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGFyZ3MucHVzaChhcmcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB3YXJuKFxuICAgICAgICAgICAgICAgICAgICBtc2cgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ1xcbkFyZ3VtZW50czogJyArXG4gICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmdzKS5qb2luKCcnKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAnXFxuJyArXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgRXJyb3IoKS5zdGFja1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgZmlyc3RUaW1lID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfSwgZm4pO1xuICAgIH1cblxuICAgIHZhciBkZXByZWNhdGlvbnMgPSB7fTtcblxuICAgIGZ1bmN0aW9uIGRlcHJlY2F0ZVNpbXBsZShuYW1lLCBtc2cpIHtcbiAgICAgICAgaWYgKGhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlciAhPSBudWxsKSB7XG4gICAgICAgICAgICBob29rcy5kZXByZWNhdGlvbkhhbmRsZXIobmFtZSwgbXNnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWRlcHJlY2F0aW9uc1tuYW1lXSkge1xuICAgICAgICAgICAgd2Fybihtc2cpO1xuICAgICAgICAgICAgZGVwcmVjYXRpb25zW25hbWVdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhvb2tzLnN1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5ncyA9IGZhbHNlO1xuICAgIGhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlciA9IG51bGw7XG5cbiAgICBmdW5jdGlvbiBpc0Z1bmN0aW9uKGlucHV0KSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAodHlwZW9mIEZ1bmN0aW9uICE9PSAndW5kZWZpbmVkJyAmJiBpbnB1dCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB8fFxuICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGlucHV0KSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldChjb25maWcpIHtcbiAgICAgICAgdmFyIHByb3AsIGk7XG4gICAgICAgIGZvciAoaSBpbiBjb25maWcpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKGNvbmZpZywgaSkpIHtcbiAgICAgICAgICAgICAgICBwcm9wID0gY29uZmlnW2ldO1xuICAgICAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKHByb3ApKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXNbaV0gPSBwcm9wO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXNbJ18nICsgaV0gPSBwcm9wO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jb25maWcgPSBjb25maWc7XG4gICAgICAgIC8vIExlbmllbnQgb3JkaW5hbCBwYXJzaW5nIGFjY2VwdHMganVzdCBhIG51bWJlciBpbiBhZGRpdGlvbiB0b1xuICAgICAgICAvLyBudW1iZXIgKyAocG9zc2libHkpIHN0dWZmIGNvbWluZyBmcm9tIF9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlLlxuICAgICAgICAvLyBUT0RPOiBSZW1vdmUgXCJvcmRpbmFsUGFyc2VcIiBmYWxsYmFjayBpbiBuZXh0IG1ham9yIHJlbGVhc2UuXG4gICAgICAgIHRoaXMuX2RheU9mTW9udGhPcmRpbmFsUGFyc2VMZW5pZW50ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICh0aGlzLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlLnNvdXJjZSB8fCB0aGlzLl9vcmRpbmFsUGFyc2Uuc291cmNlKSArXG4gICAgICAgICAgICAgICAgJ3wnICtcbiAgICAgICAgICAgICAgICAvXFxkezEsMn0vLnNvdXJjZVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1lcmdlQ29uZmlncyhwYXJlbnRDb25maWcsIGNoaWxkQ29uZmlnKSB7XG4gICAgICAgIHZhciByZXMgPSBleHRlbmQoe30sIHBhcmVudENvbmZpZyksXG4gICAgICAgICAgICBwcm9wO1xuICAgICAgICBmb3IgKHByb3AgaW4gY2hpbGRDb25maWcpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKGNoaWxkQ29uZmlnLCBwcm9wKSkge1xuICAgICAgICAgICAgICAgIGlmIChpc09iamVjdChwYXJlbnRDb25maWdbcHJvcF0pICYmIGlzT2JqZWN0KGNoaWxkQ29uZmlnW3Byb3BdKSkge1xuICAgICAgICAgICAgICAgICAgICByZXNbcHJvcF0gPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgZXh0ZW5kKHJlc1twcm9wXSwgcGFyZW50Q29uZmlnW3Byb3BdKTtcbiAgICAgICAgICAgICAgICAgICAgZXh0ZW5kKHJlc1twcm9wXSwgY2hpbGRDb25maWdbcHJvcF0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hpbGRDb25maWdbcHJvcF0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICByZXNbcHJvcF0gPSBjaGlsZENvbmZpZ1twcm9wXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcmVzW3Byb3BdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKHByb3AgaW4gcGFyZW50Q29uZmlnKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgaGFzT3duUHJvcChwYXJlbnRDb25maWcsIHByb3ApICYmXG4gICAgICAgICAgICAgICAgIWhhc093blByb3AoY2hpbGRDb25maWcsIHByb3ApICYmXG4gICAgICAgICAgICAgICAgaXNPYmplY3QocGFyZW50Q29uZmlnW3Byb3BdKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgLy8gbWFrZSBzdXJlIGNoYW5nZXMgdG8gcHJvcGVydGllcyBkb24ndCBtb2RpZnkgcGFyZW50IGNvbmZpZ1xuICAgICAgICAgICAgICAgIHJlc1twcm9wXSA9IGV4dGVuZCh7fSwgcmVzW3Byb3BdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIExvY2FsZShjb25maWcpIHtcbiAgICAgICAgaWYgKGNvbmZpZyAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLnNldChjb25maWcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGtleXM7XG5cbiAgICBpZiAoT2JqZWN0LmtleXMpIHtcbiAgICAgICAga2V5cyA9IE9iamVjdC5rZXlzO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGtleXMgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgICAgICByZXMgPSBbXTtcbiAgICAgICAgICAgIGZvciAoaSBpbiBvYmopIHtcbiAgICAgICAgICAgICAgICBpZiAoaGFzT3duUHJvcChvYmosIGkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcy5wdXNoKGkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRDYWxlbmRhciA9IHtcbiAgICAgICAgc2FtZURheTogJ1tUb2RheSBhdF0gTFQnLFxuICAgICAgICBuZXh0RGF5OiAnW1RvbW9ycm93IGF0XSBMVCcsXG4gICAgICAgIG5leHRXZWVrOiAnZGRkZCBbYXRdIExUJyxcbiAgICAgICAgbGFzdERheTogJ1tZZXN0ZXJkYXkgYXRdIExUJyxcbiAgICAgICAgbGFzdFdlZWs6ICdbTGFzdF0gZGRkZCBbYXRdIExUJyxcbiAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gY2FsZW5kYXIoa2V5LCBtb20sIG5vdykge1xuICAgICAgICB2YXIgb3V0cHV0ID0gdGhpcy5fY2FsZW5kYXJba2V5XSB8fCB0aGlzLl9jYWxlbmRhclsnc2FtZUVsc2UnXTtcbiAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24ob3V0cHV0KSA/IG91dHB1dC5jYWxsKG1vbSwgbm93KSA6IG91dHB1dDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB6ZXJvRmlsbChudW1iZXIsIHRhcmdldExlbmd0aCwgZm9yY2VTaWduKSB7XG4gICAgICAgIHZhciBhYnNOdW1iZXIgPSAnJyArIE1hdGguYWJzKG51bWJlciksXG4gICAgICAgICAgICB6ZXJvc1RvRmlsbCA9IHRhcmdldExlbmd0aCAtIGFic051bWJlci5sZW5ndGgsXG4gICAgICAgICAgICBzaWduID0gbnVtYmVyID49IDA7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAoc2lnbiA/IChmb3JjZVNpZ24gPyAnKycgOiAnJykgOiAnLScpICtcbiAgICAgICAgICAgIE1hdGgucG93KDEwLCBNYXRoLm1heCgwLCB6ZXJvc1RvRmlsbCkpLnRvU3RyaW5nKCkuc3Vic3RyKDEpICtcbiAgICAgICAgICAgIGFic051bWJlclxuICAgICAgICApO1xuICAgIH1cblxuICAgIHZhciBmb3JtYXR0aW5nVG9rZW5zID1cbiAgICAgICAgICAgIC8oXFxbW15cXFtdKlxcXSl8KFxcXFwpPyhbSGhdbW0oc3MpP3xNb3xNTT9NP00/fERvfERERG98REQ/RD9EP3xkZGQ/ZD98ZG8/fHdbb3x3XT98V1tvfFddP3xRbz98TnsxLDV9fFlZWVlZWXxZWVlZWXxZWVlZfFlZfHl7Miw0fXx5bz98Z2coZ2dnPyk/fEdHKEdHRz8pP3xlfEV8YXxBfGhoP3xISD98a2s/fG1tP3xzcz98U3sxLDl9fHh8WHx6ej98Wlo/fC4pL2csXG4gICAgICAgIGxvY2FsRm9ybWF0dGluZ1Rva2VucyA9IC8oXFxbW15cXFtdKlxcXSl8KFxcXFwpPyhMVFN8TFR8TEw/TD9MP3xsezEsNH0pL2csXG4gICAgICAgIGZvcm1hdEZ1bmN0aW9ucyA9IHt9LFxuICAgICAgICBmb3JtYXRUb2tlbkZ1bmN0aW9ucyA9IHt9O1xuXG4gICAgLy8gdG9rZW46ICAgICdNJ1xuICAgIC8vIHBhZGRlZDogICBbJ01NJywgMl1cbiAgICAvLyBvcmRpbmFsOiAgJ01vJ1xuICAgIC8vIGNhbGxiYWNrOiBmdW5jdGlvbiAoKSB7IHRoaXMubW9udGgoKSArIDEgfVxuICAgIGZ1bmN0aW9uIGFkZEZvcm1hdFRva2VuKHRva2VuLCBwYWRkZWQsIG9yZGluYWwsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBmdW5jID0gY2FsbGJhY2s7XG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBmdW5jID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzW2NhbGxiYWNrXSgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgICAgIGZvcm1hdFRva2VuRnVuY3Rpb25zW3Rva2VuXSA9IGZ1bmM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhZGRlZCkge1xuICAgICAgICAgICAgZm9ybWF0VG9rZW5GdW5jdGlvbnNbcGFkZGVkWzBdXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gemVyb0ZpbGwoZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpLCBwYWRkZWRbMV0sIHBhZGRlZFsyXSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcmRpbmFsKSB7XG4gICAgICAgICAgICBmb3JtYXRUb2tlbkZ1bmN0aW9uc1tvcmRpbmFsXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkub3JkaW5hbChcbiAgICAgICAgICAgICAgICAgICAgZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpLFxuICAgICAgICAgICAgICAgICAgICB0b2tlblxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVtb3ZlRm9ybWF0dGluZ1Rva2VucyhpbnB1dCkge1xuICAgICAgICBpZiAoaW5wdXQubWF0Y2goL1xcW1tcXHNcXFNdLykpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dC5yZXBsYWNlKC9eXFxbfFxcXSQvZywgJycpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnB1dC5yZXBsYWNlKC9cXFxcL2csICcnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYWtlRm9ybWF0RnVuY3Rpb24oZm9ybWF0KSB7XG4gICAgICAgIHZhciBhcnJheSA9IGZvcm1hdC5tYXRjaChmb3JtYXR0aW5nVG9rZW5zKSxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBsZW5ndGg7XG5cbiAgICAgICAgZm9yIChpID0gMCwgbGVuZ3RoID0gYXJyYXkubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChmb3JtYXRUb2tlbkZ1bmN0aW9uc1thcnJheVtpXV0pIHtcbiAgICAgICAgICAgICAgICBhcnJheVtpXSA9IGZvcm1hdFRva2VuRnVuY3Rpb25zW2FycmF5W2ldXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYXJyYXlbaV0gPSByZW1vdmVGb3JtYXR0aW5nVG9rZW5zKGFycmF5W2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAobW9tKSB7XG4gICAgICAgICAgICB2YXIgb3V0cHV0ID0gJycsXG4gICAgICAgICAgICAgICAgaTtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIG91dHB1dCArPSBpc0Z1bmN0aW9uKGFycmF5W2ldKVxuICAgICAgICAgICAgICAgICAgICA/IGFycmF5W2ldLmNhbGwobW9tLCBmb3JtYXQpXG4gICAgICAgICAgICAgICAgICAgIDogYXJyYXlbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIGZvcm1hdCBkYXRlIHVzaW5nIG5hdGl2ZSBkYXRlIG9iamVjdFxuICAgIGZ1bmN0aW9uIGZvcm1hdE1vbWVudChtLCBmb3JtYXQpIHtcbiAgICAgICAgaWYgKCFtLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIG0ubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3JtYXQgPSBleHBhbmRGb3JtYXQoZm9ybWF0LCBtLmxvY2FsZURhdGEoKSk7XG4gICAgICAgIGZvcm1hdEZ1bmN0aW9uc1tmb3JtYXRdID1cbiAgICAgICAgICAgIGZvcm1hdEZ1bmN0aW9uc1tmb3JtYXRdIHx8IG1ha2VGb3JtYXRGdW5jdGlvbihmb3JtYXQpO1xuXG4gICAgICAgIHJldHVybiBmb3JtYXRGdW5jdGlvbnNbZm9ybWF0XShtKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBleHBhbmRGb3JtYXQoZm9ybWF0LCBsb2NhbGUpIHtcbiAgICAgICAgdmFyIGkgPSA1O1xuXG4gICAgICAgIGZ1bmN0aW9uIHJlcGxhY2VMb25nRGF0ZUZvcm1hdFRva2VucyhpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsZS5sb25nRGF0ZUZvcm1hdChpbnB1dCkgfHwgaW5wdXQ7XG4gICAgICAgIH1cblxuICAgICAgICBsb2NhbEZvcm1hdHRpbmdUb2tlbnMubGFzdEluZGV4ID0gMDtcbiAgICAgICAgd2hpbGUgKGkgPj0gMCAmJiBsb2NhbEZvcm1hdHRpbmdUb2tlbnMudGVzdChmb3JtYXQpKSB7XG4gICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZShcbiAgICAgICAgICAgICAgICBsb2NhbEZvcm1hdHRpbmdUb2tlbnMsXG4gICAgICAgICAgICAgICAgcmVwbGFjZUxvbmdEYXRlRm9ybWF0VG9rZW5zXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbG9jYWxGb3JtYXR0aW5nVG9rZW5zLmxhc3RJbmRleCA9IDA7XG4gICAgICAgICAgICBpIC09IDE7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZm9ybWF0O1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0TG9uZ0RhdGVGb3JtYXQgPSB7XG4gICAgICAgIExUUzogJ2g6bW06c3MgQScsXG4gICAgICAgIExUOiAnaDptbSBBJyxcbiAgICAgICAgTDogJ01NL0REL1lZWVknLFxuICAgICAgICBMTDogJ01NTU0gRCwgWVlZWScsXG4gICAgICAgIExMTDogJ01NTU0gRCwgWVlZWSBoOm1tIEEnLFxuICAgICAgICBMTExMOiAnZGRkZCwgTU1NTSBELCBZWVlZIGg6bW0gQScsXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGxvbmdEYXRlRm9ybWF0KGtleSkge1xuICAgICAgICB2YXIgZm9ybWF0ID0gdGhpcy5fbG9uZ0RhdGVGb3JtYXRba2V5XSxcbiAgICAgICAgICAgIGZvcm1hdFVwcGVyID0gdGhpcy5fbG9uZ0RhdGVGb3JtYXRba2V5LnRvVXBwZXJDYXNlKCldO1xuXG4gICAgICAgIGlmIChmb3JtYXQgfHwgIWZvcm1hdFVwcGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbG9uZ0RhdGVGb3JtYXRba2V5XSA9IGZvcm1hdFVwcGVyXG4gICAgICAgICAgICAubWF0Y2goZm9ybWF0dGluZ1Rva2VucylcbiAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKHRvaykge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgdG9rID09PSAnTU1NTScgfHxcbiAgICAgICAgICAgICAgICAgICAgdG9rID09PSAnTU0nIHx8XG4gICAgICAgICAgICAgICAgICAgIHRvayA9PT0gJ0REJyB8fFxuICAgICAgICAgICAgICAgICAgICB0b2sgPT09ICdkZGRkJ1xuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9rLnNsaWNlKDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdG9rO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5qb2luKCcnKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5fbG9uZ0RhdGVGb3JtYXRba2V5XTtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdEludmFsaWREYXRlID0gJ0ludmFsaWQgZGF0ZSc7XG5cbiAgICBmdW5jdGlvbiBpbnZhbGlkRGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ludmFsaWREYXRlO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0T3JkaW5hbCA9ICclZCcsXG4gICAgICAgIGRlZmF1bHREYXlPZk1vbnRoT3JkaW5hbFBhcnNlID0gL1xcZHsxLDJ9LztcblxuICAgIGZ1bmN0aW9uIG9yZGluYWwobnVtYmVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9vcmRpbmFsLnJlcGxhY2UoJyVkJywgbnVtYmVyKTtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdFJlbGF0aXZlVGltZSA9IHtcbiAgICAgICAgZnV0dXJlOiAnaW4gJXMnLFxuICAgICAgICBwYXN0OiAnJXMgYWdvJyxcbiAgICAgICAgczogJ2EgZmV3IHNlY29uZHMnLFxuICAgICAgICBzczogJyVkIHNlY29uZHMnLFxuICAgICAgICBtOiAnYSBtaW51dGUnLFxuICAgICAgICBtbTogJyVkIG1pbnV0ZXMnLFxuICAgICAgICBoOiAnYW4gaG91cicsXG4gICAgICAgIGhoOiAnJWQgaG91cnMnLFxuICAgICAgICBkOiAnYSBkYXknLFxuICAgICAgICBkZDogJyVkIGRheXMnLFxuICAgICAgICB3OiAnYSB3ZWVrJyxcbiAgICAgICAgd3c6ICclZCB3ZWVrcycsXG4gICAgICAgIE06ICdhIG1vbnRoJyxcbiAgICAgICAgTU06ICclZCBtb250aHMnLFxuICAgICAgICB5OiAnYSB5ZWFyJyxcbiAgICAgICAgeXk6ICclZCB5ZWFycycsXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIHJlbGF0aXZlVGltZShudW1iZXIsIHdpdGhvdXRTdWZmaXgsIHN0cmluZywgaXNGdXR1cmUpIHtcbiAgICAgICAgdmFyIG91dHB1dCA9IHRoaXMuX3JlbGF0aXZlVGltZVtzdHJpbmddO1xuICAgICAgICByZXR1cm4gaXNGdW5jdGlvbihvdXRwdXQpXG4gICAgICAgICAgICA/IG91dHB1dChudW1iZXIsIHdpdGhvdXRTdWZmaXgsIHN0cmluZywgaXNGdXR1cmUpXG4gICAgICAgICAgICA6IG91dHB1dC5yZXBsYWNlKC8lZC9pLCBudW1iZXIpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhc3RGdXR1cmUoZGlmZiwgb3V0cHV0KSB7XG4gICAgICAgIHZhciBmb3JtYXQgPSB0aGlzLl9yZWxhdGl2ZVRpbWVbZGlmZiA+IDAgPyAnZnV0dXJlJyA6ICdwYXN0J107XG4gICAgICAgIHJldHVybiBpc0Z1bmN0aW9uKGZvcm1hdCkgPyBmb3JtYXQob3V0cHV0KSA6IGZvcm1hdC5yZXBsYWNlKC8lcy9pLCBvdXRwdXQpO1xuICAgIH1cblxuICAgIHZhciBhbGlhc2VzID0ge307XG5cbiAgICBmdW5jdGlvbiBhZGRVbml0QWxpYXModW5pdCwgc2hvcnRoYW5kKSB7XG4gICAgICAgIHZhciBsb3dlckNhc2UgPSB1bml0LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGFsaWFzZXNbbG93ZXJDYXNlXSA9IGFsaWFzZXNbbG93ZXJDYXNlICsgJ3MnXSA9IGFsaWFzZXNbc2hvcnRoYW5kXSA9IHVuaXQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbm9ybWFsaXplVW5pdHModW5pdHMpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB1bml0cyA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgID8gYWxpYXNlc1t1bml0c10gfHwgYWxpYXNlc1t1bml0cy50b0xvd2VyQ2FzZSgpXVxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbm9ybWFsaXplT2JqZWN0VW5pdHMoaW5wdXRPYmplY3QpIHtcbiAgICAgICAgdmFyIG5vcm1hbGl6ZWRJbnB1dCA9IHt9LFxuICAgICAgICAgICAgbm9ybWFsaXplZFByb3AsXG4gICAgICAgICAgICBwcm9wO1xuXG4gICAgICAgIGZvciAocHJvcCBpbiBpbnB1dE9iamVjdCkge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3AoaW5wdXRPYmplY3QsIHByb3ApKSB7XG4gICAgICAgICAgICAgICAgbm9ybWFsaXplZFByb3AgPSBub3JtYWxpemVVbml0cyhwcm9wKTtcbiAgICAgICAgICAgICAgICBpZiAobm9ybWFsaXplZFByb3ApIHtcbiAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZElucHV0W25vcm1hbGl6ZWRQcm9wXSA9IGlucHV0T2JqZWN0W3Byb3BdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBub3JtYWxpemVkSW5wdXQ7XG4gICAgfVxuXG4gICAgdmFyIHByaW9yaXRpZXMgPSB7fTtcblxuICAgIGZ1bmN0aW9uIGFkZFVuaXRQcmlvcml0eSh1bml0LCBwcmlvcml0eSkge1xuICAgICAgICBwcmlvcml0aWVzW3VuaXRdID0gcHJpb3JpdHk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0UHJpb3JpdGl6ZWRVbml0cyh1bml0c09iaikge1xuICAgICAgICB2YXIgdW5pdHMgPSBbXSxcbiAgICAgICAgICAgIHU7XG4gICAgICAgIGZvciAodSBpbiB1bml0c09iaikge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3AodW5pdHNPYmosIHUpKSB7XG4gICAgICAgICAgICAgICAgdW5pdHMucHVzaCh7IHVuaXQ6IHUsIHByaW9yaXR5OiBwcmlvcml0aWVzW3VdIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHVuaXRzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgIHJldHVybiBhLnByaW9yaXR5IC0gYi5wcmlvcml0eTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB1bml0cztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0xlYXBZZWFyKHllYXIpIHtcbiAgICAgICAgcmV0dXJuICh5ZWFyICUgNCA9PT0gMCAmJiB5ZWFyICUgMTAwICE9PSAwKSB8fCB5ZWFyICUgNDAwID09PSAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFic0Zsb29yKG51bWJlcikge1xuICAgICAgICBpZiAobnVtYmVyIDwgMCkge1xuICAgICAgICAgICAgLy8gLTAgLT4gMFxuICAgICAgICAgICAgcmV0dXJuIE1hdGguY2VpbChudW1iZXIpIHx8IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihudW1iZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9JbnQoYXJndW1lbnRGb3JDb2VyY2lvbikge1xuICAgICAgICB2YXIgY29lcmNlZE51bWJlciA9ICthcmd1bWVudEZvckNvZXJjaW9uLFxuICAgICAgICAgICAgdmFsdWUgPSAwO1xuXG4gICAgICAgIGlmIChjb2VyY2VkTnVtYmVyICE9PSAwICYmIGlzRmluaXRlKGNvZXJjZWROdW1iZXIpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IGFic0Zsb29yKGNvZXJjZWROdW1iZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1ha2VHZXRTZXQodW5pdCwga2VlcFRpbWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBzZXQkMSh0aGlzLCB1bml0LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHRoaXMsIGtlZXBUaW1lKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdldCh0aGlzLCB1bml0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXQobW9tLCB1bml0KSB7XG4gICAgICAgIHJldHVybiBtb20uaXNWYWxpZCgpXG4gICAgICAgICAgICA/IG1vbS5fZFsnZ2V0JyArIChtb20uX2lzVVRDID8gJ1VUQycgOiAnJykgKyB1bml0XSgpXG4gICAgICAgICAgICA6IE5hTjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXQkMShtb20sIHVuaXQsIHZhbHVlKSB7XG4gICAgICAgIGlmIChtb20uaXNWYWxpZCgpICYmICFpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB1bml0ID09PSAnRnVsbFllYXInICYmXG4gICAgICAgICAgICAgICAgaXNMZWFwWWVhcihtb20ueWVhcigpKSAmJlxuICAgICAgICAgICAgICAgIG1vbS5tb250aCgpID09PSAxICYmXG4gICAgICAgICAgICAgICAgbW9tLmRhdGUoKSA9PT0gMjlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdG9JbnQodmFsdWUpO1xuICAgICAgICAgICAgICAgIG1vbS5fZFsnc2V0JyArIChtb20uX2lzVVRDID8gJ1VUQycgOiAnJykgKyB1bml0XShcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIG1vbS5tb250aCgpLFxuICAgICAgICAgICAgICAgICAgICBkYXlzSW5Nb250aCh2YWx1ZSwgbW9tLm1vbnRoKCkpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbW9tLl9kWydzZXQnICsgKG1vbS5faXNVVEMgPyAnVVRDJyA6ICcnKSArIHVuaXRdKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIHN0cmluZ0dldCh1bml0cykge1xuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24odGhpc1t1bml0c10pKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpc1t1bml0c10oKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzdHJpbmdTZXQodW5pdHMsIHZhbHVlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdW5pdHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZU9iamVjdFVuaXRzKHVuaXRzKTtcbiAgICAgICAgICAgIHZhciBwcmlvcml0aXplZCA9IGdldFByaW9yaXRpemVkVW5pdHModW5pdHMpLFxuICAgICAgICAgICAgICAgIGksXG4gICAgICAgICAgICAgICAgcHJpb3JpdGl6ZWRMZW4gPSBwcmlvcml0aXplZC5sZW5ndGg7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcHJpb3JpdGl6ZWRMZW47IGkrKykge1xuICAgICAgICAgICAgICAgIHRoaXNbcHJpb3JpdGl6ZWRbaV0udW5pdF0odW5pdHNbcHJpb3JpdGl6ZWRbaV0udW5pdF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG4gICAgICAgICAgICBpZiAoaXNGdW5jdGlvbih0aGlzW3VuaXRzXSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpc1t1bml0c10odmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHZhciBtYXRjaDEgPSAvXFxkLywgLy8gICAgICAgMCAtIDlcbiAgICAgICAgbWF0Y2gyID0gL1xcZFxcZC8sIC8vICAgICAgMDAgLSA5OVxuICAgICAgICBtYXRjaDMgPSAvXFxkezN9LywgLy8gICAgIDAwMCAtIDk5OVxuICAgICAgICBtYXRjaDQgPSAvXFxkezR9LywgLy8gICAgMDAwMCAtIDk5OTlcbiAgICAgICAgbWF0Y2g2ID0gL1srLV0/XFxkezZ9LywgLy8gLTk5OTk5OSAtIDk5OTk5OVxuICAgICAgICBtYXRjaDF0bzIgPSAvXFxkXFxkPy8sIC8vICAgICAgIDAgLSA5OVxuICAgICAgICBtYXRjaDN0bzQgPSAvXFxkXFxkXFxkXFxkPy8sIC8vICAgICA5OTkgLSA5OTk5XG4gICAgICAgIG1hdGNoNXRvNiA9IC9cXGRcXGRcXGRcXGRcXGRcXGQ/LywgLy8gICA5OTk5OSAtIDk5OTk5OVxuICAgICAgICBtYXRjaDF0bzMgPSAvXFxkezEsM30vLCAvLyAgICAgICAwIC0gOTk5XG4gICAgICAgIG1hdGNoMXRvNCA9IC9cXGR7MSw0fS8sIC8vICAgICAgIDAgLSA5OTk5XG4gICAgICAgIG1hdGNoMXRvNiA9IC9bKy1dP1xcZHsxLDZ9LywgLy8gLTk5OTk5OSAtIDk5OTk5OVxuICAgICAgICBtYXRjaFVuc2lnbmVkID0gL1xcZCsvLCAvLyAgICAgICAwIC0gaW5mXG4gICAgICAgIG1hdGNoU2lnbmVkID0gL1srLV0/XFxkKy8sIC8vICAgIC1pbmYgLSBpbmZcbiAgICAgICAgbWF0Y2hPZmZzZXQgPSAvWnxbKy1dXFxkXFxkOj9cXGRcXGQvZ2ksIC8vICswMDowMCAtMDA6MDAgKzAwMDAgLTAwMDAgb3IgWlxuICAgICAgICBtYXRjaFNob3J0T2Zmc2V0ID0gL1p8WystXVxcZFxcZCg/Ojo/XFxkXFxkKT8vZ2ksIC8vICswMCAtMDAgKzAwOjAwIC0wMDowMCArMDAwMCAtMDAwMCBvciBaXG4gICAgICAgIG1hdGNoVGltZXN0YW1wID0gL1srLV0/XFxkKyhcXC5cXGR7MSwzfSk/LywgLy8gMTIzNDU2Nzg5IDEyMzQ1Njc4OS4xMjNcbiAgICAgICAgLy8gYW55IHdvcmQgKG9yIHR3bykgY2hhcmFjdGVycyBvciBudW1iZXJzIGluY2x1ZGluZyB0d28vdGhyZWUgd29yZCBtb250aCBpbiBhcmFiaWMuXG4gICAgICAgIC8vIGluY2x1ZGVzIHNjb3R0aXNoIGdhZWxpYyB0d28gd29yZCBhbmQgaHlwaGVuYXRlZCBtb250aHNcbiAgICAgICAgbWF0Y2hXb3JkID1cbiAgICAgICAgICAgIC9bMC05XXswLDI1Nn1bJ2EtelxcdTAwQTAtXFx1MDVGRlxcdTA3MDAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkYwN1xcdUZGMTAtXFx1RkZFRl17MSwyNTZ9fFtcXHUwNjAwLVxcdTA2RkZcXC9dezEsMjU2fShcXHMqP1tcXHUwNjAwLVxcdTA2RkZdezEsMjU2fSl7MSwyfS9pLFxuICAgICAgICByZWdleGVzO1xuXG4gICAgcmVnZXhlcyA9IHt9O1xuXG4gICAgZnVuY3Rpb24gYWRkUmVnZXhUb2tlbih0b2tlbiwgcmVnZXgsIHN0cmljdFJlZ2V4KSB7XG4gICAgICAgIHJlZ2V4ZXNbdG9rZW5dID0gaXNGdW5jdGlvbihyZWdleClcbiAgICAgICAgICAgID8gcmVnZXhcbiAgICAgICAgICAgIDogZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGVEYXRhKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gaXNTdHJpY3QgJiYgc3RyaWN0UmVnZXggPyBzdHJpY3RSZWdleCA6IHJlZ2V4O1xuICAgICAgICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFBhcnNlUmVnZXhGb3JUb2tlbih0b2tlbiwgY29uZmlnKSB7XG4gICAgICAgIGlmICghaGFzT3duUHJvcChyZWdleGVzLCB0b2tlbikpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUmVnRXhwKHVuZXNjYXBlRm9ybWF0KHRva2VuKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVnZXhlc1t0b2tlbl0oY29uZmlnLl9zdHJpY3QsIGNvbmZpZy5fbG9jYWxlKTtcbiAgICB9XG5cbiAgICAvLyBDb2RlIGZyb20gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8zNTYxNDkzL2lzLXRoZXJlLWEtcmVnZXhwLWVzY2FwZS1mdW5jdGlvbi1pbi1qYXZhc2NyaXB0XG4gICAgZnVuY3Rpb24gdW5lc2NhcGVGb3JtYXQocykge1xuICAgICAgICByZXR1cm4gcmVnZXhFc2NhcGUoXG4gICAgICAgICAgICBzXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoJ1xcXFwnLCAnJylcbiAgICAgICAgICAgICAgICAucmVwbGFjZShcbiAgICAgICAgICAgICAgICAgICAgL1xcXFwoXFxbKXxcXFxcKFxcXSl8XFxbKFteXFxdXFxbXSopXFxdfFxcXFwoLikvZyxcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKG1hdGNoZWQsIHAxLCBwMiwgcDMsIHA0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcDEgfHwgcDIgfHwgcDMgfHwgcDQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVnZXhFc2NhcGUocykge1xuICAgICAgICByZXR1cm4gcy5yZXBsYWNlKC9bLVxcL1xcXFxeJCorPy4oKXxbXFxde31dL2csICdcXFxcJCYnKTtcbiAgICB9XG5cbiAgICB2YXIgdG9rZW5zID0ge307XG5cbiAgICBmdW5jdGlvbiBhZGRQYXJzZVRva2VuKHRva2VuLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGZ1bmMgPSBjYWxsYmFjayxcbiAgICAgICAgICAgIHRva2VuTGVuO1xuICAgICAgICBpZiAodHlwZW9mIHRva2VuID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdG9rZW4gPSBbdG9rZW5dO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc051bWJlcihjYWxsYmFjaykpIHtcbiAgICAgICAgICAgIGZ1bmMgPSBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgICAgICAgICAgYXJyYXlbY2FsbGJhY2tdID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICB0b2tlbkxlbiA9IHRva2VuLmxlbmd0aDtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRva2VuTGVuOyBpKyspIHtcbiAgICAgICAgICAgIHRva2Vuc1t0b2tlbltpXV0gPSBmdW5jO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkV2Vla1BhcnNlVG9rZW4odG9rZW4sIGNhbGxiYWNrKSB7XG4gICAgICAgIGFkZFBhcnNlVG9rZW4odG9rZW4sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgICAgIGNvbmZpZy5fdyA9IGNvbmZpZy5fdyB8fCB7fTtcbiAgICAgICAgICAgIGNhbGxiYWNrKGlucHV0LCBjb25maWcuX3csIGNvbmZpZywgdG9rZW4pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhZGRUaW1lVG9BcnJheUZyb21Ub2tlbih0b2tlbiwgaW5wdXQsIGNvbmZpZykge1xuICAgICAgICBpZiAoaW5wdXQgIT0gbnVsbCAmJiBoYXNPd25Qcm9wKHRva2VucywgdG9rZW4pKSB7XG4gICAgICAgICAgICB0b2tlbnNbdG9rZW5dKGlucHV0LCBjb25maWcuX2EsIGNvbmZpZywgdG9rZW4pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIFlFQVIgPSAwLFxuICAgICAgICBNT05USCA9IDEsXG4gICAgICAgIERBVEUgPSAyLFxuICAgICAgICBIT1VSID0gMyxcbiAgICAgICAgTUlOVVRFID0gNCxcbiAgICAgICAgU0VDT05EID0gNSxcbiAgICAgICAgTUlMTElTRUNPTkQgPSA2LFxuICAgICAgICBXRUVLID0gNyxcbiAgICAgICAgV0VFS0RBWSA9IDg7XG5cbiAgICBmdW5jdGlvbiBtb2QobiwgeCkge1xuICAgICAgICByZXR1cm4gKChuICUgeCkgKyB4KSAlIHg7XG4gICAgfVxuXG4gICAgdmFyIGluZGV4T2Y7XG5cbiAgICBpZiAoQXJyYXkucHJvdG90eXBlLmluZGV4T2YpIHtcbiAgICAgICAgaW5kZXhPZiA9IEFycmF5LnByb3RvdHlwZS5pbmRleE9mO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGluZGV4T2YgPSBmdW5jdGlvbiAobykge1xuICAgICAgICAgICAgLy8gSSBrbm93XG4gICAgICAgICAgICB2YXIgaTtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXNbaV0gPT09IG8pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRheXNJbk1vbnRoKHllYXIsIG1vbnRoKSB7XG4gICAgICAgIGlmIChpc05hTih5ZWFyKSB8fCBpc05hTihtb250aCkpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG1vZE1vbnRoID0gbW9kKG1vbnRoLCAxMik7XG4gICAgICAgIHllYXIgKz0gKG1vbnRoIC0gbW9kTW9udGgpIC8gMTI7XG4gICAgICAgIHJldHVybiBtb2RNb250aCA9PT0gMVxuICAgICAgICAgICAgPyBpc0xlYXBZZWFyKHllYXIpXG4gICAgICAgICAgICAgICAgPyAyOVxuICAgICAgICAgICAgICAgIDogMjhcbiAgICAgICAgICAgIDogMzEgLSAoKG1vZE1vbnRoICUgNykgJSAyKTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignTScsIFsnTU0nLCAyXSwgJ01vJywgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tb250aCgpICsgMTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdNTU0nLCAwLCAwLCBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5tb250aHNTaG9ydCh0aGlzLCBmb3JtYXQpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ01NTU0nLCAwLCAwLCBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5tb250aHModGhpcywgZm9ybWF0KTtcbiAgICB9KTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygnbW9udGgnLCAnTScpO1xuXG4gICAgLy8gUFJJT1JJVFlcblxuICAgIGFkZFVuaXRQcmlvcml0eSgnbW9udGgnLCA4KTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ00nLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ01NJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ01NTScsIGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUubW9udGhzU2hvcnRSZWdleChpc1N0cmljdCk7XG4gICAgfSk7XG4gICAgYWRkUmVnZXhUb2tlbignTU1NTScsIGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUubW9udGhzUmVnZXgoaXNTdHJpY3QpO1xuICAgIH0pO1xuXG4gICAgYWRkUGFyc2VUb2tlbihbJ00nLCAnTU0nXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSkge1xuICAgICAgICBhcnJheVtNT05USF0gPSB0b0ludChpbnB1dCkgLSAxO1xuICAgIH0pO1xuXG4gICAgYWRkUGFyc2VUb2tlbihbJ01NTScsICdNTU1NJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgdmFyIG1vbnRoID0gY29uZmlnLl9sb2NhbGUubW9udGhzUGFyc2UoaW5wdXQsIHRva2VuLCBjb25maWcuX3N0cmljdCk7XG4gICAgICAgIC8vIGlmIHdlIGRpZG4ndCBmaW5kIGEgbW9udGggbmFtZSwgbWFyayB0aGUgZGF0ZSBhcyBpbnZhbGlkLlxuICAgICAgICBpZiAobW9udGggIT0gbnVsbCkge1xuICAgICAgICAgICAgYXJyYXlbTU9OVEhdID0gbW9udGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5pbnZhbGlkTW9udGggPSBpbnB1dDtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gTE9DQUxFU1xuXG4gICAgdmFyIGRlZmF1bHRMb2NhbGVNb250aHMgPVxuICAgICAgICAgICAgJ0phbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgZGVmYXVsdExvY2FsZU1vbnRoc1Nob3J0ID1cbiAgICAgICAgICAgICdKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYycuc3BsaXQoJ18nKSxcbiAgICAgICAgTU9OVEhTX0lOX0ZPUk1BVCA9IC9EW29EXT8oXFxbW15cXFtcXF1dKlxcXXxcXHMpK01NTU0/LyxcbiAgICAgICAgZGVmYXVsdE1vbnRoc1Nob3J0UmVnZXggPSBtYXRjaFdvcmQsXG4gICAgICAgIGRlZmF1bHRNb250aHNSZWdleCA9IG1hdGNoV29yZDtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZU1vbnRocyhtLCBmb3JtYXQpIHtcbiAgICAgICAgaWYgKCFtKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNBcnJheSh0aGlzLl9tb250aHMpXG4gICAgICAgICAgICAgICAgPyB0aGlzLl9tb250aHNcbiAgICAgICAgICAgICAgICA6IHRoaXMuX21vbnRoc1snc3RhbmRhbG9uZSddO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc0FycmF5KHRoaXMuX21vbnRocylcbiAgICAgICAgICAgID8gdGhpcy5fbW9udGhzW20ubW9udGgoKV1cbiAgICAgICAgICAgIDogdGhpcy5fbW9udGhzW1xuICAgICAgICAgICAgICAgICAgKHRoaXMuX21vbnRocy5pc0Zvcm1hdCB8fCBNT05USFNfSU5fRk9STUFUKS50ZXN0KGZvcm1hdClcbiAgICAgICAgICAgICAgICAgICAgICA/ICdmb3JtYXQnXG4gICAgICAgICAgICAgICAgICAgICAgOiAnc3RhbmRhbG9uZSdcbiAgICAgICAgICAgICAgXVttLm1vbnRoKCldO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZU1vbnRoc1Nob3J0KG0sIGZvcm1hdCkge1xuICAgICAgICBpZiAoIW0pIHtcbiAgICAgICAgICAgIHJldHVybiBpc0FycmF5KHRoaXMuX21vbnRoc1Nob3J0KVxuICAgICAgICAgICAgICAgID8gdGhpcy5fbW9udGhzU2hvcnRcbiAgICAgICAgICAgICAgICA6IHRoaXMuX21vbnRoc1Nob3J0WydzdGFuZGFsb25lJ107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzQXJyYXkodGhpcy5fbW9udGhzU2hvcnQpXG4gICAgICAgICAgICA/IHRoaXMuX21vbnRoc1Nob3J0W20ubW9udGgoKV1cbiAgICAgICAgICAgIDogdGhpcy5fbW9udGhzU2hvcnRbXG4gICAgICAgICAgICAgICAgICBNT05USFNfSU5fRk9STUFULnRlc3QoZm9ybWF0KSA/ICdmb3JtYXQnIDogJ3N0YW5kYWxvbmUnXG4gICAgICAgICAgICAgIF1bbS5tb250aCgpXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoYW5kbGVTdHJpY3RQYXJzZShtb250aE5hbWUsIGZvcm1hdCwgc3RyaWN0KSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgaWksXG4gICAgICAgICAgICBtb20sXG4gICAgICAgICAgICBsbGMgPSBtb250aE5hbWUudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKCF0aGlzLl9tb250aHNQYXJzZSkge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyBub3QgdXNlZFxuICAgICAgICAgICAgdGhpcy5fbW9udGhzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX2xvbmdNb250aHNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fc2hvcnRNb250aHNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDEyOyArK2kpIHtcbiAgICAgICAgICAgICAgICBtb20gPSBjcmVhdGVVVEMoWzIwMDAsIGldKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG9ydE1vbnRoc1BhcnNlW2ldID0gdGhpcy5tb250aHNTaG9ydChcbiAgICAgICAgICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgICAgICAgICAnJ1xuICAgICAgICAgICAgICAgICkudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb25nTW9udGhzUGFyc2VbaV0gPSB0aGlzLm1vbnRocyhtb20sICcnKS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0cmljdCkge1xuICAgICAgICAgICAgaWYgKGZvcm1hdCA9PT0gJ01NTScpIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydE1vbnRoc1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX2xvbmdNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGZvcm1hdCA9PT0gJ01NTScpIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydE1vbnRoc1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9sb25nTW9udGhzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbG9uZ01vbnRoc1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydE1vbnRoc1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVNb250aHNQYXJzZShtb250aE5hbWUsIGZvcm1hdCwgc3RyaWN0KSB7XG4gICAgICAgIHZhciBpLCBtb20sIHJlZ2V4O1xuXG4gICAgICAgIGlmICh0aGlzLl9tb250aHNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlU3RyaWN0UGFyc2UuY2FsbCh0aGlzLCBtb250aE5hbWUsIGZvcm1hdCwgc3RyaWN0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5fbW9udGhzUGFyc2UpIHtcbiAgICAgICAgICAgIHRoaXMuX21vbnRoc1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9sb25nTW9udGhzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX3Nob3J0TW9udGhzUGFyc2UgPSBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRPRE86IGFkZCBzb3J0aW5nXG4gICAgICAgIC8vIFNvcnRpbmcgbWFrZXMgc3VyZSBpZiBvbmUgbW9udGggKG9yIGFiYnIpIGlzIGEgcHJlZml4IG9mIGFub3RoZXJcbiAgICAgICAgLy8gc2VlIHNvcnRpbmcgaW4gY29tcHV0ZU1vbnRoc1BhcnNlXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAxMjsgaSsrKSB7XG4gICAgICAgICAgICAvLyBtYWtlIHRoZSByZWdleCBpZiB3ZSBkb24ndCBoYXZlIGl0IGFscmVhZHlcbiAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgaV0pO1xuICAgICAgICAgICAgaWYgKHN0cmljdCAmJiAhdGhpcy5fbG9uZ01vbnRoc1BhcnNlW2ldKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9uZ01vbnRoc1BhcnNlW2ldID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICAgICAgICAgJ14nICsgdGhpcy5tb250aHMobW9tLCAnJykucmVwbGFjZSgnLicsICcnKSArICckJyxcbiAgICAgICAgICAgICAgICAgICAgJ2knXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG9ydE1vbnRoc1BhcnNlW2ldID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICAgICAgICAgJ14nICsgdGhpcy5tb250aHNTaG9ydChtb20sICcnKS5yZXBsYWNlKCcuJywgJycpICsgJyQnLFxuICAgICAgICAgICAgICAgICAgICAnaSdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFzdHJpY3QgJiYgIXRoaXMuX21vbnRoc1BhcnNlW2ldKSB7XG4gICAgICAgICAgICAgICAgcmVnZXggPVxuICAgICAgICAgICAgICAgICAgICAnXicgKyB0aGlzLm1vbnRocyhtb20sICcnKSArICd8XicgKyB0aGlzLm1vbnRoc1Nob3J0KG1vbSwgJycpO1xuICAgICAgICAgICAgICAgIHRoaXMuX21vbnRoc1BhcnNlW2ldID0gbmV3IFJlZ0V4cChyZWdleC5yZXBsYWNlKCcuJywgJycpLCAnaScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gdGVzdCB0aGUgcmVnZXhcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBzdHJpY3QgJiZcbiAgICAgICAgICAgICAgICBmb3JtYXQgPT09ICdNTU1NJyAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX2xvbmdNb250aHNQYXJzZVtpXS50ZXN0KG1vbnRoTmFtZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICBzdHJpY3QgJiZcbiAgICAgICAgICAgICAgICBmb3JtYXQgPT09ICdNTU0nICYmXG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRNb250aHNQYXJzZVtpXS50ZXN0KG1vbnRoTmFtZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghc3RyaWN0ICYmIHRoaXMuX21vbnRoc1BhcnNlW2ldLnRlc3QobW9udGhOYW1lKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gc2V0TW9udGgobW9tLCB2YWx1ZSkge1xuICAgICAgICB2YXIgZGF5T2ZNb250aDtcblxuICAgICAgICBpZiAoIW1vbS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIC8vIE5vIG9wXG4gICAgICAgICAgICByZXR1cm4gbW9tO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGlmICgvXlxcZCskLy50ZXN0KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdG9JbnQodmFsdWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IG1vbS5sb2NhbGVEYXRhKCkubW9udGhzUGFyc2UodmFsdWUpO1xuICAgICAgICAgICAgICAgIC8vIFRPRE86IEFub3RoZXIgc2lsZW50IGZhaWx1cmU/XG4gICAgICAgICAgICAgICAgaWYgKCFpc051bWJlcih2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1vbTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBkYXlPZk1vbnRoID0gTWF0aC5taW4obW9tLmRhdGUoKSwgZGF5c0luTW9udGgobW9tLnllYXIoKSwgdmFsdWUpKTtcbiAgICAgICAgbW9tLl9kWydzZXQnICsgKG1vbS5faXNVVEMgPyAnVVRDJyA6ICcnKSArICdNb250aCddKHZhbHVlLCBkYXlPZk1vbnRoKTtcbiAgICAgICAgcmV0dXJuIG1vbTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRNb250aCh2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgc2V0TW9udGgodGhpcywgdmFsdWUpO1xuICAgICAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHRoaXMsIHRydWUpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0KHRoaXMsICdNb250aCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0RGF5c0luTW9udGgoKSB7XG4gICAgICAgIHJldHVybiBkYXlzSW5Nb250aCh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb250aHNTaG9ydFJlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl9tb250aHNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19tb250aHNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgY29tcHV0ZU1vbnRoc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoc1Nob3J0UmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19tb250aHNTaG9ydFJlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tb250aHNTaG9ydFJlZ2V4ID0gZGVmYXVsdE1vbnRoc1Nob3J0UmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleCAmJiBpc1N0cmljdFxuICAgICAgICAgICAgICAgID8gdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleFxuICAgICAgICAgICAgICAgIDogdGhpcy5fbW9udGhzU2hvcnRSZWdleDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vbnRoc1JlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl9tb250aHNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19tb250aHNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgY29tcHV0ZU1vbnRoc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzU3RyaWN0UmVnZXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX21vbnRoc1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tb250aHNSZWdleCA9IGRlZmF1bHRNb250aHNSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNTdHJpY3RSZWdleCAmJiBpc1N0cmljdFxuICAgICAgICAgICAgICAgID8gdGhpcy5fbW9udGhzU3RyaWN0UmVnZXhcbiAgICAgICAgICAgICAgICA6IHRoaXMuX21vbnRoc1JlZ2V4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tcHV0ZU1vbnRoc1BhcnNlKCkge1xuICAgICAgICBmdW5jdGlvbiBjbXBMZW5SZXYoYSwgYikge1xuICAgICAgICAgICAgcmV0dXJuIGIubGVuZ3RoIC0gYS5sZW5ndGg7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2hvcnRQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIGxvbmdQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIG1peGVkUGllY2VzID0gW10sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgbW9tO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgICAgICAgLy8gbWFrZSB0aGUgcmVnZXggaWYgd2UgZG9uJ3QgaGF2ZSBpdCBhbHJlYWR5XG4gICAgICAgICAgICBtb20gPSBjcmVhdGVVVEMoWzIwMDAsIGldKTtcbiAgICAgICAgICAgIHNob3J0UGllY2VzLnB1c2godGhpcy5tb250aHNTaG9ydChtb20sICcnKSk7XG4gICAgICAgICAgICBsb25nUGllY2VzLnB1c2godGhpcy5tb250aHMobW9tLCAnJykpO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaCh0aGlzLm1vbnRocyhtb20sICcnKSk7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKHRoaXMubW9udGhzU2hvcnQobW9tLCAnJykpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNvcnRpbmcgbWFrZXMgc3VyZSBpZiBvbmUgbW9udGggKG9yIGFiYnIpIGlzIGEgcHJlZml4IG9mIGFub3RoZXIgaXRcbiAgICAgICAgLy8gd2lsbCBtYXRjaCB0aGUgbG9uZ2VyIHBpZWNlLlxuICAgICAgICBzaG9ydFBpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgICAgIGxvbmdQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuICAgICAgICBtaXhlZFBpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAxMjsgaSsrKSB7XG4gICAgICAgICAgICBzaG9ydFBpZWNlc1tpXSA9IHJlZ2V4RXNjYXBlKHNob3J0UGllY2VzW2ldKTtcbiAgICAgICAgICAgIGxvbmdQaWVjZXNbaV0gPSByZWdleEVzY2FwZShsb25nUGllY2VzW2ldKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMjQ7IGkrKykge1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXNbaV0gPSByZWdleEVzY2FwZShtaXhlZFBpZWNlc1tpXSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9tb250aHNSZWdleCA9IG5ldyBSZWdFeHAoJ14oJyArIG1peGVkUGllY2VzLmpvaW4oJ3wnKSArICcpJywgJ2knKTtcbiAgICAgICAgdGhpcy5fbW9udGhzU2hvcnRSZWdleCA9IHRoaXMuX21vbnRoc1JlZ2V4O1xuICAgICAgICB0aGlzLl9tb250aHNTdHJpY3RSZWdleCA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAnXignICsgbG9uZ1BpZWNlcy5qb2luKCd8JykgKyAnKScsXG4gICAgICAgICAgICAnaSdcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleCA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAnXignICsgc2hvcnRQaWVjZXMuam9pbignfCcpICsgJyknLFxuICAgICAgICAgICAgJ2knXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ1knLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB5ID0gdGhpcy55ZWFyKCk7XG4gICAgICAgIHJldHVybiB5IDw9IDk5OTkgPyB6ZXJvRmlsbCh5LCA0KSA6ICcrJyArIHk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1lZJywgMl0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMueWVhcigpICUgMTAwO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydZWVlZJywgNF0sIDAsICd5ZWFyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydZWVlZWScsIDVdLCAwLCAneWVhcicpO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnWVlZWVlZJywgNiwgdHJ1ZV0sIDAsICd5ZWFyJyk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ3llYXInLCAneScpO1xuXG4gICAgLy8gUFJJT1JJVElFU1xuXG4gICAgYWRkVW5pdFByaW9yaXR5KCd5ZWFyJywgMSk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdZJywgbWF0Y2hTaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1lZJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1lZWVknLCBtYXRjaDF0bzQsIG1hdGNoNCk7XG4gICAgYWRkUmVnZXhUb2tlbignWVlZWVknLCBtYXRjaDF0bzYsIG1hdGNoNik7XG4gICAgYWRkUmVnZXhUb2tlbignWVlZWVlZJywgbWF0Y2gxdG82LCBtYXRjaDYpO1xuXG4gICAgYWRkUGFyc2VUb2tlbihbJ1lZWVlZJywgJ1lZWVlZWSddLCBZRUFSKTtcbiAgICBhZGRQYXJzZVRva2VuKCdZWVlZJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSkge1xuICAgICAgICBhcnJheVtZRUFSXSA9XG4gICAgICAgICAgICBpbnB1dC5sZW5ndGggPT09IDIgPyBob29rcy5wYXJzZVR3b0RpZ2l0WWVhcihpbnB1dCkgOiB0b0ludChpbnB1dCk7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignWVknLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W1lFQVJdID0gaG9va3MucGFyc2VUd29EaWdpdFllYXIoaW5wdXQpO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ1knLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W1lFQVJdID0gcGFyc2VJbnQoaW5wdXQsIDEwKTtcbiAgICB9KTtcblxuICAgIC8vIEhFTFBFUlNcblxuICAgIGZ1bmN0aW9uIGRheXNJblllYXIoeWVhcikge1xuICAgICAgICByZXR1cm4gaXNMZWFwWWVhcih5ZWFyKSA/IDM2NiA6IDM2NTtcbiAgICB9XG5cbiAgICAvLyBIT09LU1xuXG4gICAgaG9va3MucGFyc2VUd29EaWdpdFllYXIgPSBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIHRvSW50KGlucHV0KSArICh0b0ludChpbnB1dCkgPiA2OCA/IDE5MDAgOiAyMDAwKTtcbiAgICB9O1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgdmFyIGdldFNldFllYXIgPSBtYWtlR2V0U2V0KCdGdWxsWWVhcicsIHRydWUpO1xuXG4gICAgZnVuY3Rpb24gZ2V0SXNMZWFwWWVhcigpIHtcbiAgICAgICAgcmV0dXJuIGlzTGVhcFllYXIodGhpcy55ZWFyKCkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZURhdGUoeSwgbSwgZCwgaCwgTSwgcywgbXMpIHtcbiAgICAgICAgLy8gY2FuJ3QganVzdCBhcHBseSgpIHRvIGNyZWF0ZSBhIGRhdGU6XG4gICAgICAgIC8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcS8xODEzNDhcbiAgICAgICAgdmFyIGRhdGU7XG4gICAgICAgIC8vIHRoZSBkYXRlIGNvbnN0cnVjdG9yIHJlbWFwcyB5ZWFycyAwLTk5IHRvIDE5MDAtMTk5OVxuICAgICAgICBpZiAoeSA8IDEwMCAmJiB5ID49IDApIHtcbiAgICAgICAgICAgIC8vIHByZXNlcnZlIGxlYXAgeWVhcnMgdXNpbmcgYSBmdWxsIDQwMCB5ZWFyIGN5Y2xlLCB0aGVuIHJlc2V0XG4gICAgICAgICAgICBkYXRlID0gbmV3IERhdGUoeSArIDQwMCwgbSwgZCwgaCwgTSwgcywgbXMpO1xuICAgICAgICAgICAgaWYgKGlzRmluaXRlKGRhdGUuZ2V0RnVsbFllYXIoKSkpIHtcbiAgICAgICAgICAgICAgICBkYXRlLnNldEZ1bGxZZWFyKHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKHksIG0sIGQsIGgsIE0sIHMsIG1zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkYXRlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZVVUQ0RhdGUoeSkge1xuICAgICAgICB2YXIgZGF0ZSwgYXJncztcbiAgICAgICAgLy8gdGhlIERhdGUuVVRDIGZ1bmN0aW9uIHJlbWFwcyB5ZWFycyAwLTk5IHRvIDE5MDAtMTk5OVxuICAgICAgICBpZiAoeSA8IDEwMCAmJiB5ID49IDApIHtcbiAgICAgICAgICAgIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgLy8gcHJlc2VydmUgbGVhcCB5ZWFycyB1c2luZyBhIGZ1bGwgNDAwIHllYXIgY3ljbGUsIHRoZW4gcmVzZXRcbiAgICAgICAgICAgIGFyZ3NbMF0gPSB5ICsgNDAwO1xuICAgICAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKERhdGUuVVRDLmFwcGx5KG51bGwsIGFyZ3MpKTtcbiAgICAgICAgICAgIGlmIChpc0Zpbml0ZShkYXRlLmdldFVUQ0Z1bGxZZWFyKCkpKSB7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXRVVENGdWxsWWVhcih5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZShEYXRlLlVUQy5hcHBseShudWxsLCBhcmd1bWVudHMpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkYXRlO1xuICAgIH1cblxuICAgIC8vIHN0YXJ0LW9mLWZpcnN0LXdlZWsgLSBzdGFydC1vZi15ZWFyXG4gICAgZnVuY3Rpb24gZmlyc3RXZWVrT2Zmc2V0KHllYXIsIGRvdywgZG95KSB7XG4gICAgICAgIHZhciAvLyBmaXJzdC13ZWVrIGRheSAtLSB3aGljaCBqYW51YXJ5IGlzIGFsd2F5cyBpbiB0aGUgZmlyc3Qgd2VlayAoNCBmb3IgaXNvLCAxIGZvciBvdGhlcilcbiAgICAgICAgICAgIGZ3ZCA9IDcgKyBkb3cgLSBkb3ksXG4gICAgICAgICAgICAvLyBmaXJzdC13ZWVrIGRheSBsb2NhbCB3ZWVrZGF5IC0tIHdoaWNoIGxvY2FsIHdlZWtkYXkgaXMgZndkXG4gICAgICAgICAgICBmd2RsdyA9ICg3ICsgY3JlYXRlVVRDRGF0ZSh5ZWFyLCAwLCBmd2QpLmdldFVUQ0RheSgpIC0gZG93KSAlIDc7XG5cbiAgICAgICAgcmV0dXJuIC1md2RsdyArIGZ3ZCAtIDE7XG4gICAgfVxuXG4gICAgLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPX3dlZWtfZGF0ZSNDYWxjdWxhdGluZ19hX2RhdGVfZ2l2ZW5fdGhlX3llYXIuMkNfd2Vla19udW1iZXJfYW5kX3dlZWtkYXlcbiAgICBmdW5jdGlvbiBkYXlPZlllYXJGcm9tV2Vla3MoeWVhciwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3kpIHtcbiAgICAgICAgdmFyIGxvY2FsV2Vla2RheSA9ICg3ICsgd2Vla2RheSAtIGRvdykgJSA3LFxuICAgICAgICAgICAgd2Vla09mZnNldCA9IGZpcnN0V2Vla09mZnNldCh5ZWFyLCBkb3csIGRveSksXG4gICAgICAgICAgICBkYXlPZlllYXIgPSAxICsgNyAqICh3ZWVrIC0gMSkgKyBsb2NhbFdlZWtkYXkgKyB3ZWVrT2Zmc2V0LFxuICAgICAgICAgICAgcmVzWWVhcixcbiAgICAgICAgICAgIHJlc0RheU9mWWVhcjtcblxuICAgICAgICBpZiAoZGF5T2ZZZWFyIDw9IDApIHtcbiAgICAgICAgICAgIHJlc1llYXIgPSB5ZWFyIC0gMTtcbiAgICAgICAgICAgIHJlc0RheU9mWWVhciA9IGRheXNJblllYXIocmVzWWVhcikgKyBkYXlPZlllYXI7XG4gICAgICAgIH0gZWxzZSBpZiAoZGF5T2ZZZWFyID4gZGF5c0luWWVhcih5ZWFyKSkge1xuICAgICAgICAgICAgcmVzWWVhciA9IHllYXIgKyAxO1xuICAgICAgICAgICAgcmVzRGF5T2ZZZWFyID0gZGF5T2ZZZWFyIC0gZGF5c0luWWVhcih5ZWFyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc1llYXIgPSB5ZWFyO1xuICAgICAgICAgICAgcmVzRGF5T2ZZZWFyID0gZGF5T2ZZZWFyO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHllYXI6IHJlc1llYXIsXG4gICAgICAgICAgICBkYXlPZlllYXI6IHJlc0RheU9mWWVhcixcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3ZWVrT2ZZZWFyKG1vbSwgZG93LCBkb3kpIHtcbiAgICAgICAgdmFyIHdlZWtPZmZzZXQgPSBmaXJzdFdlZWtPZmZzZXQobW9tLnllYXIoKSwgZG93LCBkb3kpLFxuICAgICAgICAgICAgd2VlayA9IE1hdGguZmxvb3IoKG1vbS5kYXlPZlllYXIoKSAtIHdlZWtPZmZzZXQgLSAxKSAvIDcpICsgMSxcbiAgICAgICAgICAgIHJlc1dlZWssXG4gICAgICAgICAgICByZXNZZWFyO1xuXG4gICAgICAgIGlmICh3ZWVrIDwgMSkge1xuICAgICAgICAgICAgcmVzWWVhciA9IG1vbS55ZWFyKCkgLSAxO1xuICAgICAgICAgICAgcmVzV2VlayA9IHdlZWsgKyB3ZWVrc0luWWVhcihyZXNZZWFyLCBkb3csIGRveSk7XG4gICAgICAgIH0gZWxzZSBpZiAod2VlayA+IHdlZWtzSW5ZZWFyKG1vbS55ZWFyKCksIGRvdywgZG95KSkge1xuICAgICAgICAgICAgcmVzV2VlayA9IHdlZWsgLSB3ZWVrc0luWWVhcihtb20ueWVhcigpLCBkb3csIGRveSk7XG4gICAgICAgICAgICByZXNZZWFyID0gbW9tLnllYXIoKSArIDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNZZWFyID0gbW9tLnllYXIoKTtcbiAgICAgICAgICAgIHJlc1dlZWsgPSB3ZWVrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHdlZWs6IHJlc1dlZWssXG4gICAgICAgICAgICB5ZWFyOiByZXNZZWFyLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdlZWtzSW5ZZWFyKHllYXIsIGRvdywgZG95KSB7XG4gICAgICAgIHZhciB3ZWVrT2Zmc2V0ID0gZmlyc3RXZWVrT2Zmc2V0KHllYXIsIGRvdywgZG95KSxcbiAgICAgICAgICAgIHdlZWtPZmZzZXROZXh0ID0gZmlyc3RXZWVrT2Zmc2V0KHllYXIgKyAxLCBkb3csIGRveSk7XG4gICAgICAgIHJldHVybiAoZGF5c0luWWVhcih5ZWFyKSAtIHdlZWtPZmZzZXQgKyB3ZWVrT2Zmc2V0TmV4dCkgLyA3O1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCd3JywgWyd3dycsIDJdLCAnd28nLCAnd2VlaycpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdXJywgWydXVycsIDJdLCAnV28nLCAnaXNvV2VlaycpO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCd3ZWVrJywgJ3cnKTtcbiAgICBhZGRVbml0QWxpYXMoJ2lzb1dlZWsnLCAnVycpO1xuXG4gICAgLy8gUFJJT1JJVElFU1xuXG4gICAgYWRkVW5pdFByaW9yaXR5KCd3ZWVrJywgNSk7XG4gICAgYWRkVW5pdFByaW9yaXR5KCdpc29XZWVrJywgNSk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCd3JywgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCd3dycsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdXJywgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdXVycsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcblxuICAgIGFkZFdlZWtQYXJzZVRva2VuKFxuICAgICAgICBbJ3cnLCAnd3cnLCAnVycsICdXVyddLFxuICAgICAgICBmdW5jdGlvbiAoaW5wdXQsIHdlZWssIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgICAgIHdlZWtbdG9rZW4uc3Vic3RyKDAsIDEpXSA9IHRvSW50KGlucHV0KTtcbiAgICAgICAgfVxuICAgICk7XG5cbiAgICAvLyBIRUxQRVJTXG5cbiAgICAvLyBMT0NBTEVTXG5cbiAgICBmdW5jdGlvbiBsb2NhbGVXZWVrKG1vbSkge1xuICAgICAgICByZXR1cm4gd2Vla09mWWVhcihtb20sIHRoaXMuX3dlZWsuZG93LCB0aGlzLl93ZWVrLmRveSkud2VlaztcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdExvY2FsZVdlZWsgPSB7XG4gICAgICAgIGRvdzogMCwgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgIGRveTogNiwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVGaXJzdERheU9mV2VlaygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWsuZG93O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZUZpcnN0RGF5T2ZZZWFyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fd2Vlay5kb3k7XG4gICAgfVxuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gZ2V0U2V0V2VlayhpbnB1dCkge1xuICAgICAgICB2YXIgd2VlayA9IHRoaXMubG9jYWxlRGF0YSgpLndlZWsodGhpcyk7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PSBudWxsID8gd2VlayA6IHRoaXMuYWRkKChpbnB1dCAtIHdlZWspICogNywgJ2QnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRJU09XZWVrKGlucHV0KSB7XG4gICAgICAgIHZhciB3ZWVrID0gd2Vla09mWWVhcih0aGlzLCAxLCA0KS53ZWVrO1xuICAgICAgICByZXR1cm4gaW5wdXQgPT0gbnVsbCA/IHdlZWsgOiB0aGlzLmFkZCgoaW5wdXQgLSB3ZWVrKSAqIDcsICdkJyk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2QnLCAwLCAnZG8nLCAnZGF5Jyk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignZGQnLCAwLCAwLCBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS53ZWVrZGF5c01pbih0aGlzLCBmb3JtYXQpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2RkZCcsIDAsIDAsIGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLndlZWtkYXlzU2hvcnQodGhpcywgZm9ybWF0KTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdkZGRkJywgMCwgMCwgZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkud2Vla2RheXModGhpcywgZm9ybWF0KTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdlJywgMCwgMCwgJ3dlZWtkYXknKTtcbiAgICBhZGRGb3JtYXRUb2tlbignRScsIDAsIDAsICdpc29XZWVrZGF5Jyk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ2RheScsICdkJyk7XG4gICAgYWRkVW5pdEFsaWFzKCd3ZWVrZGF5JywgJ2UnKTtcbiAgICBhZGRVbml0QWxpYXMoJ2lzb1dlZWtkYXknLCAnRScpO1xuXG4gICAgLy8gUFJJT1JJVFlcbiAgICBhZGRVbml0UHJpb3JpdHkoJ2RheScsIDExKTtcbiAgICBhZGRVbml0UHJpb3JpdHkoJ3dlZWtkYXknLCAxMSk7XG4gICAgYWRkVW5pdFByaW9yaXR5KCdpc29XZWVrZGF5JywgMTEpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignZCcsIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignZScsIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignRScsIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignZGQnLCBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLndlZWtkYXlzTWluUmVnZXgoaXNTdHJpY3QpO1xuICAgIH0pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2RkZCcsIGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUud2Vla2RheXNTaG9ydFJlZ2V4KGlzU3RyaWN0KTtcbiAgICB9KTtcbiAgICBhZGRSZWdleFRva2VuKCdkZGRkJywgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS53ZWVrZGF5c1JlZ2V4KGlzU3RyaWN0KTtcbiAgICB9KTtcblxuICAgIGFkZFdlZWtQYXJzZVRva2VuKFsnZGQnLCAnZGRkJywgJ2RkZGQnXSwgZnVuY3Rpb24gKGlucHV0LCB3ZWVrLCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgIHZhciB3ZWVrZGF5ID0gY29uZmlnLl9sb2NhbGUud2Vla2RheXNQYXJzZShpbnB1dCwgdG9rZW4sIGNvbmZpZy5fc3RyaWN0KTtcbiAgICAgICAgLy8gaWYgd2UgZGlkbid0IGdldCBhIHdlZWtkYXkgbmFtZSwgbWFyayB0aGUgZGF0ZSBhcyBpbnZhbGlkXG4gICAgICAgIGlmICh3ZWVrZGF5ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHdlZWsuZCA9IHdlZWtkYXk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5pbnZhbGlkV2Vla2RheSA9IGlucHV0O1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBhZGRXZWVrUGFyc2VUb2tlbihbJ2QnLCAnZScsICdFJ10sIGZ1bmN0aW9uIChpbnB1dCwgd2VlaywgY29uZmlnLCB0b2tlbikge1xuICAgICAgICB3ZWVrW3Rva2VuXSA9IHRvSW50KGlucHV0KTtcbiAgICB9KTtcblxuICAgIC8vIEhFTFBFUlNcblxuICAgIGZ1bmN0aW9uIHBhcnNlV2Vla2RheShpbnB1dCwgbG9jYWxlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzTmFOKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KGlucHV0LCAxMCk7XG4gICAgICAgIH1cblxuICAgICAgICBpbnB1dCA9IGxvY2FsZS53ZWVrZGF5c1BhcnNlKGlucHV0KTtcbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlSXNvV2Vla2RheShpbnB1dCwgbG9jYWxlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlLndlZWtkYXlzUGFyc2UoaW5wdXQpICUgNyB8fCA3O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc05hTihpbnB1dCkgPyBudWxsIDogaW5wdXQ7XG4gICAgfVxuXG4gICAgLy8gTE9DQUxFU1xuICAgIGZ1bmN0aW9uIHNoaWZ0V2Vla2RheXMod3MsIG4pIHtcbiAgICAgICAgcmV0dXJuIHdzLnNsaWNlKG4sIDcpLmNvbmNhdCh3cy5zbGljZSgwLCBuKSk7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRMb2NhbGVXZWVrZGF5cyA9XG4gICAgICAgICAgICAnU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXknLnNwbGl0KCdfJyksXG4gICAgICAgIGRlZmF1bHRMb2NhbGVXZWVrZGF5c1Nob3J0ID0gJ1N1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCcuc3BsaXQoJ18nKSxcbiAgICAgICAgZGVmYXVsdExvY2FsZVdlZWtkYXlzTWluID0gJ1N1X01vX1R1X1dlX1RoX0ZyX1NhJy5zcGxpdCgnXycpLFxuICAgICAgICBkZWZhdWx0V2Vla2RheXNSZWdleCA9IG1hdGNoV29yZCxcbiAgICAgICAgZGVmYXVsdFdlZWtkYXlzU2hvcnRSZWdleCA9IG1hdGNoV29yZCxcbiAgICAgICAgZGVmYXVsdFdlZWtkYXlzTWluUmVnZXggPSBtYXRjaFdvcmQ7XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVXZWVrZGF5cyhtLCBmb3JtYXQpIHtcbiAgICAgICAgdmFyIHdlZWtkYXlzID0gaXNBcnJheSh0aGlzLl93ZWVrZGF5cylcbiAgICAgICAgICAgID8gdGhpcy5fd2Vla2RheXNcbiAgICAgICAgICAgIDogdGhpcy5fd2Vla2RheXNbXG4gICAgICAgICAgICAgICAgICBtICYmIG0gIT09IHRydWUgJiYgdGhpcy5fd2Vla2RheXMuaXNGb3JtYXQudGVzdChmb3JtYXQpXG4gICAgICAgICAgICAgICAgICAgICAgPyAnZm9ybWF0J1xuICAgICAgICAgICAgICAgICAgICAgIDogJ3N0YW5kYWxvbmUnXG4gICAgICAgICAgICAgIF07XG4gICAgICAgIHJldHVybiBtID09PSB0cnVlXG4gICAgICAgICAgICA/IHNoaWZ0V2Vla2RheXMod2Vla2RheXMsIHRoaXMuX3dlZWsuZG93KVxuICAgICAgICAgICAgOiBtXG4gICAgICAgICAgICA/IHdlZWtkYXlzW20uZGF5KCldXG4gICAgICAgICAgICA6IHdlZWtkYXlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZVdlZWtkYXlzU2hvcnQobSkge1xuICAgICAgICByZXR1cm4gbSA9PT0gdHJ1ZVxuICAgICAgICAgICAgPyBzaGlmdFdlZWtkYXlzKHRoaXMuX3dlZWtkYXlzU2hvcnQsIHRoaXMuX3dlZWsuZG93KVxuICAgICAgICAgICAgOiBtXG4gICAgICAgICAgICA/IHRoaXMuX3dlZWtkYXlzU2hvcnRbbS5kYXkoKV1cbiAgICAgICAgICAgIDogdGhpcy5fd2Vla2RheXNTaG9ydDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVXZWVrZGF5c01pbihtKSB7XG4gICAgICAgIHJldHVybiBtID09PSB0cnVlXG4gICAgICAgICAgICA/IHNoaWZ0V2Vla2RheXModGhpcy5fd2Vla2RheXNNaW4sIHRoaXMuX3dlZWsuZG93KVxuICAgICAgICAgICAgOiBtXG4gICAgICAgICAgICA/IHRoaXMuX3dlZWtkYXlzTWluW20uZGF5KCldXG4gICAgICAgICAgICA6IHRoaXMuX3dlZWtkYXlzTWluO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhbmRsZVN0cmljdFBhcnNlJDEod2Vla2RheU5hbWUsIGZvcm1hdCwgc3RyaWN0KSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgaWksXG4gICAgICAgICAgICBtb20sXG4gICAgICAgICAgICBsbGMgPSB3ZWVrZGF5TmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAoIXRoaXMuX3dlZWtkYXlzUGFyc2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3dlZWtkYXlzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fbWluV2Vla2RheXNQYXJzZSA9IFtdO1xuXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNzsgKytpKSB7XG4gICAgICAgICAgICAgICAgbW9tID0gY3JlYXRlVVRDKFsyMDAwLCAxXSkuZGF5KGkpO1xuICAgICAgICAgICAgICAgIHRoaXMuX21pbldlZWtkYXlzUGFyc2VbaV0gPSB0aGlzLndlZWtkYXlzTWluKFxuICAgICAgICAgICAgICAgICAgICBtb20sXG4gICAgICAgICAgICAgICAgICAgICcnXG4gICAgICAgICAgICAgICAgKS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZVtpXSA9IHRoaXMud2Vla2RheXNTaG9ydChcbiAgICAgICAgICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgICAgICAgICAnJ1xuICAgICAgICAgICAgICAgICkudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1BhcnNlW2ldID0gdGhpcy53ZWVrZGF5cyhtb20sICcnKS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0cmljdCkge1xuICAgICAgICAgICAgaWYgKGZvcm1hdCA9PT0gJ2RkZGQnKSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fd2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChmb3JtYXQgPT09ICdkZGQnKSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChmb3JtYXQgPT09ICdkZGRkJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChmb3JtYXQgPT09ICdkZGQnKSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlV2Vla2RheXNQYXJzZSh3ZWVrZGF5TmFtZSwgZm9ybWF0LCBzdHJpY3QpIHtcbiAgICAgICAgdmFyIGksIG1vbSwgcmVnZXg7XG5cbiAgICAgICAgaWYgKHRoaXMuX3dlZWtkYXlzUGFyc2VFeGFjdCkge1xuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZVN0cmljdFBhcnNlJDEuY2FsbCh0aGlzLCB3ZWVrZGF5TmFtZSwgZm9ybWF0LCBzdHJpY3QpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLl93ZWVrZGF5c1BhcnNlKSB7XG4gICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9taW5XZWVrZGF5c1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlID0gW107XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICAgICAgICAvLyBtYWtlIHRoZSByZWdleCBpZiB3ZSBkb24ndCBoYXZlIGl0IGFscmVhZHlcblxuICAgICAgICAgICAgbW9tID0gY3JlYXRlVVRDKFsyMDAwLCAxXSkuZGF5KGkpO1xuICAgICAgICAgICAgaWYgKHN0cmljdCAmJiAhdGhpcy5fZnVsbFdlZWtkYXlzUGFyc2VbaV0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9mdWxsV2Vla2RheXNQYXJzZVtpXSA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAgICAgICAgICdeJyArIHRoaXMud2Vla2RheXMobW9tLCAnJykucmVwbGFjZSgnLicsICdcXFxcLj8nKSArICckJyxcbiAgICAgICAgICAgICAgICAgICAgJ2knXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgICAgICAgICAnXicgKyB0aGlzLndlZWtkYXlzU2hvcnQobW9tLCAnJykucmVwbGFjZSgnLicsICdcXFxcLj8nKSArICckJyxcbiAgICAgICAgICAgICAgICAgICAgJ2knXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9taW5XZWVrZGF5c1BhcnNlW2ldID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICAgICAgICAgJ14nICsgdGhpcy53ZWVrZGF5c01pbihtb20sICcnKS5yZXBsYWNlKCcuJywgJ1xcXFwuPycpICsgJyQnLFxuICAgICAgICAgICAgICAgICAgICAnaSdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLl93ZWVrZGF5c1BhcnNlW2ldKSB7XG4gICAgICAgICAgICAgICAgcmVnZXggPVxuICAgICAgICAgICAgICAgICAgICAnXicgK1xuICAgICAgICAgICAgICAgICAgICB0aGlzLndlZWtkYXlzKG1vbSwgJycpICtcbiAgICAgICAgICAgICAgICAgICAgJ3xeJyArXG4gICAgICAgICAgICAgICAgICAgIHRoaXMud2Vla2RheXNTaG9ydChtb20sICcnKSArXG4gICAgICAgICAgICAgICAgICAgICd8XicgK1xuICAgICAgICAgICAgICAgICAgICB0aGlzLndlZWtkYXlzTWluKG1vbSwgJycpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3dlZWtkYXlzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKHJlZ2V4LnJlcGxhY2UoJy4nLCAnJyksICdpJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyB0ZXN0IHRoZSByZWdleFxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHN0cmljdCAmJlxuICAgICAgICAgICAgICAgIGZvcm1hdCA9PT0gJ2RkZGQnICYmXG4gICAgICAgICAgICAgICAgdGhpcy5fZnVsbFdlZWtkYXlzUGFyc2VbaV0udGVzdCh3ZWVrZGF5TmFtZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICBzdHJpY3QgJiZcbiAgICAgICAgICAgICAgICBmb3JtYXQgPT09ICdkZGQnICYmXG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlW2ldLnRlc3Qod2Vla2RheU5hbWUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgc3RyaWN0ICYmXG4gICAgICAgICAgICAgICAgZm9ybWF0ID09PSAnZGQnICYmXG4gICAgICAgICAgICAgICAgdGhpcy5fbWluV2Vla2RheXNQYXJzZVtpXS50ZXN0KHdlZWtkYXlOYW1lKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJpY3QgJiYgdGhpcy5fd2Vla2RheXNQYXJzZVtpXS50ZXN0KHdlZWtkYXlOYW1lKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gZ2V0U2V0RGF5T2ZXZWVrKGlucHV0KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCAhPSBudWxsID8gdGhpcyA6IE5hTjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZGF5ID0gdGhpcy5faXNVVEMgPyB0aGlzLl9kLmdldFVUQ0RheSgpIDogdGhpcy5fZC5nZXREYXkoKTtcbiAgICAgICAgaWYgKGlucHV0ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlucHV0ID0gcGFyc2VXZWVrZGF5KGlucHV0LCB0aGlzLmxvY2FsZURhdGEoKSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hZGQoaW5wdXQgLSBkYXksICdkJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZGF5O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0TG9jYWxlRGF5T2ZXZWVrKGlucHV0KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCAhPSBudWxsID8gdGhpcyA6IE5hTjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgd2Vla2RheSA9ICh0aGlzLmRheSgpICsgNyAtIHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRvdykgJSA3O1xuICAgICAgICByZXR1cm4gaW5wdXQgPT0gbnVsbCA/IHdlZWtkYXkgOiB0aGlzLmFkZChpbnB1dCAtIHdlZWtkYXksICdkJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0SVNPRGF5T2ZXZWVrKGlucHV0KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCAhPSBudWxsID8gdGhpcyA6IE5hTjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGJlaGF2ZXMgdGhlIHNhbWUgYXMgbW9tZW50I2RheSBleGNlcHRcbiAgICAgICAgLy8gYXMgYSBnZXR0ZXIsIHJldHVybnMgNyBpbnN0ZWFkIG9mIDAgKDEtNyByYW5nZSBpbnN0ZWFkIG9mIDAtNilcbiAgICAgICAgLy8gYXMgYSBzZXR0ZXIsIHN1bmRheSBzaG91bGQgYmVsb25nIHRvIHRoZSBwcmV2aW91cyB3ZWVrLlxuXG4gICAgICAgIGlmIChpbnB1dCAhPSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgd2Vla2RheSA9IHBhcnNlSXNvV2Vla2RheShpbnB1dCwgdGhpcy5sb2NhbGVEYXRhKCkpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF5KHRoaXMuZGF5KCkgJSA3ID8gd2Vla2RheSA6IHdlZWtkYXkgLSA3KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRheSgpIHx8IDc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3ZWVrZGF5c1JlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIGNvbXB1dGVXZWVrZGF5c1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1JlZ2V4ID0gZGVmYXVsdFdlZWtkYXlzUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleCAmJiBpc1N0cmljdFxuICAgICAgICAgICAgICAgID8gdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleFxuICAgICAgICAgICAgICAgIDogdGhpcy5fd2Vla2RheXNSZWdleDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdlZWtkYXlzU2hvcnRSZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAodGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICBjb21wdXRlV2Vla2RheXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzU2hvcnRSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4ID0gZGVmYXVsdFdlZWtkYXlzU2hvcnRSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXggJiYgaXNTdHJpY3RcbiAgICAgICAgICAgICAgICA/IHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleFxuICAgICAgICAgICAgICAgIDogdGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gd2Vla2RheXNNaW5SZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAodGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICBjb21wdXRlV2Vla2RheXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c01pblJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfd2Vla2RheXNNaW5SZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNNaW5SZWdleCA9IGRlZmF1bHRXZWVrZGF5c01pblJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXggJiYgaXNTdHJpY3RcbiAgICAgICAgICAgICAgICA/IHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXhcbiAgICAgICAgICAgICAgICA6IHRoaXMuX3dlZWtkYXlzTWluUmVnZXg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21wdXRlV2Vla2RheXNQYXJzZSgpIHtcbiAgICAgICAgZnVuY3Rpb24gY21wTGVuUmV2KGEsIGIpIHtcbiAgICAgICAgICAgIHJldHVybiBiLmxlbmd0aCAtIGEubGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG1pblBpZWNlcyA9IFtdLFxuICAgICAgICAgICAgc2hvcnRQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIGxvbmdQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIG1peGVkUGllY2VzID0gW10sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgbWlucCxcbiAgICAgICAgICAgIHNob3J0cCxcbiAgICAgICAgICAgIGxvbmdwO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICAgICAgICAvLyBtYWtlIHRoZSByZWdleCBpZiB3ZSBkb24ndCBoYXZlIGl0IGFscmVhZHlcbiAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgMV0pLmRheShpKTtcbiAgICAgICAgICAgIG1pbnAgPSByZWdleEVzY2FwZSh0aGlzLndlZWtkYXlzTWluKG1vbSwgJycpKTtcbiAgICAgICAgICAgIHNob3J0cCA9IHJlZ2V4RXNjYXBlKHRoaXMud2Vla2RheXNTaG9ydChtb20sICcnKSk7XG4gICAgICAgICAgICBsb25ncCA9IHJlZ2V4RXNjYXBlKHRoaXMud2Vla2RheXMobW9tLCAnJykpO1xuICAgICAgICAgICAgbWluUGllY2VzLnB1c2gobWlucCk7XG4gICAgICAgICAgICBzaG9ydFBpZWNlcy5wdXNoKHNob3J0cCk7XG4gICAgICAgICAgICBsb25nUGllY2VzLnB1c2gobG9uZ3ApO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChtaW5wKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2goc2hvcnRwKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2gobG9uZ3ApO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNvcnRpbmcgbWFrZXMgc3VyZSBpZiBvbmUgd2Vla2RheSAob3IgYWJicikgaXMgYSBwcmVmaXggb2YgYW5vdGhlciBpdFxuICAgICAgICAvLyB3aWxsIG1hdGNoIHRoZSBsb25nZXIgcGllY2UuXG4gICAgICAgIG1pblBpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgICAgIHNob3J0UGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICAgICAgbG9uZ1BpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgICAgIG1peGVkUGllY2VzLnNvcnQoY21wTGVuUmV2KTtcblxuICAgICAgICB0aGlzLl93ZWVrZGF5c1JlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgbWl4ZWRQaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgICAgICB0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXggPSB0aGlzLl93ZWVrZGF5c1JlZ2V4O1xuICAgICAgICB0aGlzLl93ZWVrZGF5c01pblJlZ2V4ID0gdGhpcy5fd2Vla2RheXNSZWdleDtcblxuICAgICAgICB0aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBsb25nUGllY2VzLmpvaW4oJ3wnKSArICcpJyxcbiAgICAgICAgICAgICdpJ1xuICAgICAgICApO1xuICAgICAgICB0aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXggPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgJ14oJyArIHNob3J0UGllY2VzLmpvaW4oJ3wnKSArICcpJyxcbiAgICAgICAgICAgICdpJ1xuICAgICAgICApO1xuICAgICAgICB0aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBtaW5QaWVjZXMuam9pbignfCcpICsgJyknLFxuICAgICAgICAgICAgJ2knXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgZnVuY3Rpb24gaEZvcm1hdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaG91cnMoKSAlIDEyIHx8IDEyO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGtGb3JtYXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhvdXJzKCkgfHwgMjQ7XG4gICAgfVxuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ0gnLCBbJ0hIJywgMl0sIDAsICdob3VyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ2gnLCBbJ2hoJywgMl0sIDAsIGhGb3JtYXQpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdrJywgWydraycsIDJdLCAwLCBrRm9ybWF0KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdobW0nLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAnJyArIGhGb3JtYXQuYXBwbHkodGhpcykgKyB6ZXJvRmlsbCh0aGlzLm1pbnV0ZXMoKSwgMik7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignaG1tc3MnLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAnJyArXG4gICAgICAgICAgICBoRm9ybWF0LmFwcGx5KHRoaXMpICtcbiAgICAgICAgICAgIHplcm9GaWxsKHRoaXMubWludXRlcygpLCAyKSArXG4gICAgICAgICAgICB6ZXJvRmlsbCh0aGlzLnNlY29uZHMoKSwgMilcbiAgICAgICAgKTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdIbW0nLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAnJyArIHRoaXMuaG91cnMoKSArIHplcm9GaWxsKHRoaXMubWludXRlcygpLCAyKTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdIbW1zcycsIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICcnICtcbiAgICAgICAgICAgIHRoaXMuaG91cnMoKSArXG4gICAgICAgICAgICB6ZXJvRmlsbCh0aGlzLm1pbnV0ZXMoKSwgMikgK1xuICAgICAgICAgICAgemVyb0ZpbGwodGhpcy5zZWNvbmRzKCksIDIpXG4gICAgICAgICk7XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBtZXJpZGllbSh0b2tlbiwgbG93ZXJjYXNlKSB7XG4gICAgICAgIGFkZEZvcm1hdFRva2VuKHRva2VuLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubWVyaWRpZW0oXG4gICAgICAgICAgICAgICAgdGhpcy5ob3VycygpLFxuICAgICAgICAgICAgICAgIHRoaXMubWludXRlcygpLFxuICAgICAgICAgICAgICAgIGxvd2VyY2FzZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbWVyaWRpZW0oJ2EnLCB0cnVlKTtcbiAgICBtZXJpZGllbSgnQScsIGZhbHNlKTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygnaG91cicsICdoJyk7XG5cbiAgICAvLyBQUklPUklUWVxuICAgIGFkZFVuaXRQcmlvcml0eSgnaG91cicsIDEzKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGZ1bmN0aW9uIG1hdGNoTWVyaWRpZW0oaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLl9tZXJpZGllbVBhcnNlO1xuICAgIH1cblxuICAgIGFkZFJlZ2V4VG9rZW4oJ2EnLCBtYXRjaE1lcmlkaWVtKTtcbiAgICBhZGRSZWdleFRva2VuKCdBJywgbWF0Y2hNZXJpZGllbSk7XG4gICAgYWRkUmVnZXhUb2tlbignSCcsIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignaCcsIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignaycsIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignSEgnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignaGgnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbigna2snLCBtYXRjaDF0bzIsIG1hdGNoMik7XG5cbiAgICBhZGRSZWdleFRva2VuKCdobW0nLCBtYXRjaDN0bzQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2htbXNzJywgbWF0Y2g1dG82KTtcbiAgICBhZGRSZWdleFRva2VuKCdIbW0nLCBtYXRjaDN0bzQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0htbXNzJywgbWF0Y2g1dG82KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWydIJywgJ0hIJ10sIEhPVVIpO1xuICAgIGFkZFBhcnNlVG9rZW4oWydrJywgJ2trJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2YXIga0lucHV0ID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICBhcnJheVtIT1VSXSA9IGtJbnB1dCA9PT0gMjQgPyAwIDoga0lucHV0O1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oWydhJywgJ0EnXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZy5faXNQbSA9IGNvbmZpZy5fbG9jYWxlLmlzUE0oaW5wdXQpO1xuICAgICAgICBjb25maWcuX21lcmlkaWVtID0gaW5wdXQ7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbihbJ2gnLCAnaGgnXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID0gdHJ1ZTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdobW0nLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgdmFyIHBvcyA9IGlucHV0Lmxlbmd0aCAtIDI7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQuc3Vic3RyKDAsIHBvcykpO1xuICAgICAgICBhcnJheVtNSU5VVEVdID0gdG9JbnQoaW5wdXQuc3Vic3RyKHBvcykpO1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID0gdHJ1ZTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdobW1zcycsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2YXIgcG9zMSA9IGlucHV0Lmxlbmd0aCAtIDQsXG4gICAgICAgICAgICBwb3MyID0gaW5wdXQubGVuZ3RoIC0gMjtcbiAgICAgICAgYXJyYXlbSE9VUl0gPSB0b0ludChpbnB1dC5zdWJzdHIoMCwgcG9zMSkpO1xuICAgICAgICBhcnJheVtNSU5VVEVdID0gdG9JbnQoaW5wdXQuc3Vic3RyKHBvczEsIDIpKTtcbiAgICAgICAgYXJyYXlbU0VDT05EXSA9IHRvSW50KGlucHV0LnN1YnN0cihwb3MyKSk7XG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmJpZ0hvdXIgPSB0cnVlO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ0htbScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2YXIgcG9zID0gaW5wdXQubGVuZ3RoIC0gMjtcbiAgICAgICAgYXJyYXlbSE9VUl0gPSB0b0ludChpbnB1dC5zdWJzdHIoMCwgcG9zKSk7XG4gICAgICAgIGFycmF5W01JTlVURV0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zKSk7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignSG1tc3MnLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgdmFyIHBvczEgPSBpbnB1dC5sZW5ndGggLSA0LFxuICAgICAgICAgICAgcG9zMiA9IGlucHV0Lmxlbmd0aCAtIDI7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQuc3Vic3RyKDAsIHBvczEpKTtcbiAgICAgICAgYXJyYXlbTUlOVVRFXSA9IHRvSW50KGlucHV0LnN1YnN0cihwb3MxLCAyKSk7XG4gICAgICAgIGFycmF5W1NFQ09ORF0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zMikpO1xuICAgIH0pO1xuXG4gICAgLy8gTE9DQUxFU1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlSXNQTShpbnB1dCkge1xuICAgICAgICAvLyBJRTggUXVpcmtzIE1vZGUgJiBJRTcgU3RhbmRhcmRzIE1vZGUgZG8gbm90IGFsbG93IGFjY2Vzc2luZyBzdHJpbmdzIGxpa2UgYXJyYXlzXG4gICAgICAgIC8vIFVzaW5nIGNoYXJBdCBzaG91bGQgYmUgbW9yZSBjb21wYXRpYmxlLlxuICAgICAgICByZXR1cm4gKGlucHV0ICsgJycpLnRvTG93ZXJDYXNlKCkuY2hhckF0KDApID09PSAncCc7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRMb2NhbGVNZXJpZGllbVBhcnNlID0gL1thcF1cXC4/bT9cXC4/L2ksXG4gICAgICAgIC8vIFNldHRpbmcgdGhlIGhvdXIgc2hvdWxkIGtlZXAgdGhlIHRpbWUsIGJlY2F1c2UgdGhlIHVzZXIgZXhwbGljaXRseVxuICAgICAgICAvLyBzcGVjaWZpZWQgd2hpY2ggaG91ciB0aGV5IHdhbnQuIFNvIHRyeWluZyB0byBtYWludGFpbiB0aGUgc2FtZSBob3VyIChpblxuICAgICAgICAvLyBhIG5ldyB0aW1lem9uZSkgbWFrZXMgc2Vuc2UuIEFkZGluZy9zdWJ0cmFjdGluZyBob3VycyBkb2VzIG5vdCBmb2xsb3dcbiAgICAgICAgLy8gdGhpcyBydWxlLlxuICAgICAgICBnZXRTZXRIb3VyID0gbWFrZUdldFNldCgnSG91cnMnLCB0cnVlKTtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZU1lcmlkaWVtKGhvdXJzLCBtaW51dGVzLCBpc0xvd2VyKSB7XG4gICAgICAgIGlmIChob3VycyA+IDExKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICdwbScgOiAnUE0nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyAnYW0nIDogJ0FNJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBiYXNlQ29uZmlnID0ge1xuICAgICAgICBjYWxlbmRhcjogZGVmYXVsdENhbGVuZGFyLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDogZGVmYXVsdExvbmdEYXRlRm9ybWF0LFxuICAgICAgICBpbnZhbGlkRGF0ZTogZGVmYXVsdEludmFsaWREYXRlLFxuICAgICAgICBvcmRpbmFsOiBkZWZhdWx0T3JkaW5hbCxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogZGVmYXVsdERheU9mTW9udGhPcmRpbmFsUGFyc2UsXG4gICAgICAgIHJlbGF0aXZlVGltZTogZGVmYXVsdFJlbGF0aXZlVGltZSxcblxuICAgICAgICBtb250aHM6IGRlZmF1bHRMb2NhbGVNb250aHMsXG4gICAgICAgIG1vbnRoc1Nob3J0OiBkZWZhdWx0TG9jYWxlTW9udGhzU2hvcnQsXG5cbiAgICAgICAgd2VlazogZGVmYXVsdExvY2FsZVdlZWssXG5cbiAgICAgICAgd2Vla2RheXM6IGRlZmF1bHRMb2NhbGVXZWVrZGF5cyxcbiAgICAgICAgd2Vla2RheXNNaW46IGRlZmF1bHRMb2NhbGVXZWVrZGF5c01pbixcbiAgICAgICAgd2Vla2RheXNTaG9ydDogZGVmYXVsdExvY2FsZVdlZWtkYXlzU2hvcnQsXG5cbiAgICAgICAgbWVyaWRpZW1QYXJzZTogZGVmYXVsdExvY2FsZU1lcmlkaWVtUGFyc2UsXG4gICAgfTtcblxuICAgIC8vIGludGVybmFsIHN0b3JhZ2UgZm9yIGxvY2FsZSBjb25maWcgZmlsZXNcbiAgICB2YXIgbG9jYWxlcyA9IHt9LFxuICAgICAgICBsb2NhbGVGYW1pbGllcyA9IHt9LFxuICAgICAgICBnbG9iYWxMb2NhbGU7XG5cbiAgICBmdW5jdGlvbiBjb21tb25QcmVmaXgoYXJyMSwgYXJyMikge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIG1pbmwgPSBNYXRoLm1pbihhcnIxLmxlbmd0aCwgYXJyMi5sZW5ndGgpO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbWlubDsgaSArPSAxKSB7XG4gICAgICAgICAgICBpZiAoYXJyMVtpXSAhPT0gYXJyMltpXSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtaW5sO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZUxvY2FsZShrZXkpIHtcbiAgICAgICAgcmV0dXJuIGtleSA/IGtleS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoJ18nLCAnLScpIDoga2V5O1xuICAgIH1cblxuICAgIC8vIHBpY2sgdGhlIGxvY2FsZSBmcm9tIHRoZSBhcnJheVxuICAgIC8vIHRyeSBbJ2VuLWF1JywgJ2VuLWdiJ10gYXMgJ2VuLWF1JywgJ2VuLWdiJywgJ2VuJywgYXMgaW4gbW92ZSB0aHJvdWdoIHRoZSBsaXN0IHRyeWluZyBlYWNoXG4gICAgLy8gc3Vic3RyaW5nIGZyb20gbW9zdCBzcGVjaWZpYyB0byBsZWFzdCwgYnV0IG1vdmUgdG8gdGhlIG5leHQgYXJyYXkgaXRlbSBpZiBpdCdzIGEgbW9yZSBzcGVjaWZpYyB2YXJpYW50IHRoYW4gdGhlIGN1cnJlbnQgcm9vdFxuICAgIGZ1bmN0aW9uIGNob29zZUxvY2FsZShuYW1lcykge1xuICAgICAgICB2YXIgaSA9IDAsXG4gICAgICAgICAgICBqLFxuICAgICAgICAgICAgbmV4dCxcbiAgICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICAgIHNwbGl0O1xuXG4gICAgICAgIHdoaWxlIChpIDwgbmFtZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBzcGxpdCA9IG5vcm1hbGl6ZUxvY2FsZShuYW1lc1tpXSkuc3BsaXQoJy0nKTtcbiAgICAgICAgICAgIGogPSBzcGxpdC5sZW5ndGg7XG4gICAgICAgICAgICBuZXh0ID0gbm9ybWFsaXplTG9jYWxlKG5hbWVzW2kgKyAxXSk7XG4gICAgICAgICAgICBuZXh0ID0gbmV4dCA/IG5leHQuc3BsaXQoJy0nKSA6IG51bGw7XG4gICAgICAgICAgICB3aGlsZSAoaiA+IDApIHtcbiAgICAgICAgICAgICAgICBsb2NhbGUgPSBsb2FkTG9jYWxlKHNwbGl0LnNsaWNlKDAsIGopLmpvaW4oJy0nKSk7XG4gICAgICAgICAgICAgICAgaWYgKGxvY2FsZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbG9jYWxlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIG5leHQgJiZcbiAgICAgICAgICAgICAgICAgICAgbmV4dC5sZW5ndGggPj0gaiAmJlxuICAgICAgICAgICAgICAgICAgICBjb21tb25QcmVmaXgoc3BsaXQsIG5leHQpID49IGogLSAxXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vdGhlIG5leHQgYXJyYXkgaXRlbSBpcyBiZXR0ZXIgdGhhbiBhIHNoYWxsb3dlciBzdWJzdHJpbmcgb2YgdGhpcyBvbmVcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGotLTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2xvYmFsTG9jYWxlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTG9jYWxlTmFtZVNhbmUobmFtZSkge1xuICAgICAgICAvLyBQcmV2ZW50IG5hbWVzIHRoYXQgbG9vayBsaWtlIGZpbGVzeXN0ZW0gcGF0aHMsIGkuZSBjb250YWluICcvJyBvciAnXFwnXG4gICAgICAgIHJldHVybiBuYW1lLm1hdGNoKCdeW14vXFxcXFxcXFxdKiQnKSAhPSBudWxsO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvYWRMb2NhbGUobmFtZSkge1xuICAgICAgICB2YXIgb2xkTG9jYWxlID0gbnVsbCxcbiAgICAgICAgICAgIGFsaWFzZWRSZXF1aXJlO1xuICAgICAgICAvLyBUT0RPOiBGaW5kIGEgYmV0dGVyIHdheSB0byByZWdpc3RlciBhbmQgbG9hZCBhbGwgdGhlIGxvY2FsZXMgaW4gTm9kZVxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBsb2NhbGVzW25hbWVdID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICBtb2R1bGUgJiZcbiAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzICYmXG4gICAgICAgICAgICBpc0xvY2FsZU5hbWVTYW5lKG5hbWUpXG4gICAgICAgICkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBvbGRMb2NhbGUgPSBnbG9iYWxMb2NhbGUuX2FiYnI7XG4gICAgICAgICAgICAgICAgYWxpYXNlZFJlcXVpcmUgPSByZXF1aXJlO1xuICAgICAgICAgICAgICAgIGFsaWFzZWRSZXF1aXJlKCcuL2xvY2FsZS8nICsgbmFtZSk7XG4gICAgICAgICAgICAgICAgZ2V0U2V0R2xvYmFsTG9jYWxlKG9sZExvY2FsZSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgLy8gbWFyayBhcyBub3QgZm91bmQgdG8gYXZvaWQgcmVwZWF0aW5nIGV4cGVuc2l2ZSBmaWxlIHJlcXVpcmUgY2FsbCBjYXVzaW5nIGhpZ2ggQ1BVXG4gICAgICAgICAgICAgICAgLy8gd2hlbiB0cnlpbmcgdG8gZmluZCBlbi1VUywgZW5fVVMsIGVuLXVzIGZvciBldmVyeSBmb3JtYXQgY2FsbFxuICAgICAgICAgICAgICAgIGxvY2FsZXNbbmFtZV0gPSBudWxsOyAvLyBudWxsIG1lYW5zIG5vdCBmb3VuZFxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsb2NhbGVzW25hbWVdO1xuICAgIH1cblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gd2lsbCBsb2FkIGxvY2FsZSBhbmQgdGhlbiBzZXQgdGhlIGdsb2JhbCBsb2NhbGUuICBJZlxuICAgIC8vIG5vIGFyZ3VtZW50cyBhcmUgcGFzc2VkIGluLCBpdCB3aWxsIHNpbXBseSByZXR1cm4gdGhlIGN1cnJlbnQgZ2xvYmFsXG4gICAgLy8gbG9jYWxlIGtleS5cbiAgICBmdW5jdGlvbiBnZXRTZXRHbG9iYWxMb2NhbGUoa2V5LCB2YWx1ZXMpIHtcbiAgICAgICAgdmFyIGRhdGE7XG4gICAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgICAgIGlmIChpc1VuZGVmaW5lZCh2YWx1ZXMpKSB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGdldExvY2FsZShrZXkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gZGVmaW5lTG9jYWxlKGtleSwgdmFsdWVzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAvLyBtb21lbnQuZHVyYXRpb24uX2xvY2FsZSA9IG1vbWVudC5fbG9jYWxlID0gZGF0YTtcbiAgICAgICAgICAgICAgICBnbG9iYWxMb2NhbGUgPSBkYXRhO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmIGNvbnNvbGUud2Fybikge1xuICAgICAgICAgICAgICAgICAgICAvL3dhcm4gdXNlciBpZiBhcmd1bWVudHMgYXJlIHBhc3NlZCBidXQgdGhlIGxvY2FsZSBjb3VsZCBub3QgYmUgc2V0XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgICAgICAgICAgICAgICdMb2NhbGUgJyArIGtleSArICcgbm90IGZvdW5kLiBEaWQgeW91IGZvcmdldCB0byBsb2FkIGl0PydcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZ2xvYmFsTG9jYWxlLl9hYmJyO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlZmluZUxvY2FsZShuYW1lLCBjb25maWcpIHtcbiAgICAgICAgaWYgKGNvbmZpZyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIGxvY2FsZSxcbiAgICAgICAgICAgICAgICBwYXJlbnRDb25maWcgPSBiYXNlQ29uZmlnO1xuICAgICAgICAgICAgY29uZmlnLmFiYnIgPSBuYW1lO1xuICAgICAgICAgICAgaWYgKGxvY2FsZXNbbmFtZV0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGRlcHJlY2F0ZVNpbXBsZShcbiAgICAgICAgICAgICAgICAgICAgJ2RlZmluZUxvY2FsZU92ZXJyaWRlJyxcbiAgICAgICAgICAgICAgICAgICAgJ3VzZSBtb21lbnQudXBkYXRlTG9jYWxlKGxvY2FsZU5hbWUsIGNvbmZpZykgdG8gY2hhbmdlICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2FuIGV4aXN0aW5nIGxvY2FsZS4gbW9tZW50LmRlZmluZUxvY2FsZShsb2NhbGVOYW1lLCAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdjb25maWcpIHNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIGNyZWF0aW5nIGEgbmV3IGxvY2FsZSAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdTZWUgaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9kZWZpbmUtbG9jYWxlLyBmb3IgbW9yZSBpbmZvLidcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHBhcmVudENvbmZpZyA9IGxvY2FsZXNbbmFtZV0uX2NvbmZpZztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29uZmlnLnBhcmVudExvY2FsZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKGxvY2FsZXNbY29uZmlnLnBhcmVudExvY2FsZV0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBwYXJlbnRDb25maWcgPSBsb2NhbGVzW2NvbmZpZy5wYXJlbnRMb2NhbGVdLl9jb25maWc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxlID0gbG9hZExvY2FsZShjb25maWcucGFyZW50TG9jYWxlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxvY2FsZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRDb25maWcgPSBsb2NhbGUuX2NvbmZpZztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbG9jYWxlRmFtaWxpZXNbY29uZmlnLnBhcmVudExvY2FsZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbGVGYW1pbGllc1tjb25maWcucGFyZW50TG9jYWxlXSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxlRmFtaWxpZXNbY29uZmlnLnBhcmVudExvY2FsZV0ucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWc6IGNvbmZpZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsb2NhbGVzW25hbWVdID0gbmV3IExvY2FsZShtZXJnZUNvbmZpZ3MocGFyZW50Q29uZmlnLCBjb25maWcpKTtcblxuICAgICAgICAgICAgaWYgKGxvY2FsZUZhbWlsaWVzW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgbG9jYWxlRmFtaWxpZXNbbmFtZV0uZm9yRWFjaChmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICBkZWZpbmVMb2NhbGUoeC5uYW1lLCB4LmNvbmZpZyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGJhY2t3YXJkcyBjb21wYXQgZm9yIG5vdzogYWxzbyBzZXQgdGhlIGxvY2FsZVxuICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHdlIHNldCB0aGUgbG9jYWxlIEFGVEVSIGFsbCBjaGlsZCBsb2NhbGVzIGhhdmUgYmVlblxuICAgICAgICAgICAgLy8gY3JlYXRlZCwgc28gd2Ugd29uJ3QgZW5kIHVwIHdpdGggdGhlIGNoaWxkIGxvY2FsZSBzZXQuXG4gICAgICAgICAgICBnZXRTZXRHbG9iYWxMb2NhbGUobmFtZSk7XG5cbiAgICAgICAgICAgIHJldHVybiBsb2NhbGVzW25hbWVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gdXNlZnVsIGZvciB0ZXN0aW5nXG4gICAgICAgICAgICBkZWxldGUgbG9jYWxlc1tuYW1lXTtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdXBkYXRlTG9jYWxlKG5hbWUsIGNvbmZpZykge1xuICAgICAgICBpZiAoY29uZmlnICE9IG51bGwpIHtcbiAgICAgICAgICAgIHZhciBsb2NhbGUsXG4gICAgICAgICAgICAgICAgdG1wTG9jYWxlLFxuICAgICAgICAgICAgICAgIHBhcmVudENvbmZpZyA9IGJhc2VDb25maWc7XG5cbiAgICAgICAgICAgIGlmIChsb2NhbGVzW25hbWVdICE9IG51bGwgJiYgbG9jYWxlc1tuYW1lXS5wYXJlbnRMb2NhbGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSBleGlzdGluZyBjaGlsZCBsb2NhbGUgaW4tcGxhY2UgdG8gYXZvaWQgbWVtb3J5LWxlYWtzXG4gICAgICAgICAgICAgICAgbG9jYWxlc1tuYW1lXS5zZXQobWVyZ2VDb25maWdzKGxvY2FsZXNbbmFtZV0uX2NvbmZpZywgY29uZmlnKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIE1FUkdFXG4gICAgICAgICAgICAgICAgdG1wTG9jYWxlID0gbG9hZExvY2FsZShuYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAodG1wTG9jYWxlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50Q29uZmlnID0gdG1wTG9jYWxlLl9jb25maWc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbmZpZyA9IG1lcmdlQ29uZmlncyhwYXJlbnRDb25maWcsIGNvbmZpZyk7XG4gICAgICAgICAgICAgICAgaWYgKHRtcExvY2FsZSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHVwZGF0ZUxvY2FsZSBpcyBjYWxsZWQgZm9yIGNyZWF0aW5nIGEgbmV3IGxvY2FsZVxuICAgICAgICAgICAgICAgICAgICAvLyBTZXQgYWJiciBzbyBpdCB3aWxsIGhhdmUgYSBuYW1lIChnZXR0ZXJzIHJldHVyblxuICAgICAgICAgICAgICAgICAgICAvLyB1bmRlZmluZWQgb3RoZXJ3aXNlKS5cbiAgICAgICAgICAgICAgICAgICAgY29uZmlnLmFiYnIgPSBuYW1lO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsb2NhbGUgPSBuZXcgTG9jYWxlKGNvbmZpZyk7XG4gICAgICAgICAgICAgICAgbG9jYWxlLnBhcmVudExvY2FsZSA9IGxvY2FsZXNbbmFtZV07XG4gICAgICAgICAgICAgICAgbG9jYWxlc1tuYW1lXSA9IGxvY2FsZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gYmFja3dhcmRzIGNvbXBhdCBmb3Igbm93OiBhbHNvIHNldCB0aGUgbG9jYWxlXG4gICAgICAgICAgICBnZXRTZXRHbG9iYWxMb2NhbGUobmFtZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBwYXNzIG51bGwgZm9yIGNvbmZpZyB0byB1bnVwZGF0ZSwgdXNlZnVsIGZvciB0ZXN0c1xuICAgICAgICAgICAgaWYgKGxvY2FsZXNbbmFtZV0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmIChsb2NhbGVzW25hbWVdLnBhcmVudExvY2FsZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvY2FsZXNbbmFtZV0gPSBsb2NhbGVzW25hbWVdLnBhcmVudExvY2FsZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09IGdldFNldEdsb2JhbExvY2FsZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRTZXRHbG9iYWxMb2NhbGUobmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxvY2FsZXNbbmFtZV0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgbG9jYWxlc1tuYW1lXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxvY2FsZXNbbmFtZV07XG4gICAgfVxuXG4gICAgLy8gcmV0dXJucyBsb2NhbGUgZGF0YVxuICAgIGZ1bmN0aW9uIGdldExvY2FsZShrZXkpIHtcbiAgICAgICAgdmFyIGxvY2FsZTtcblxuICAgICAgICBpZiAoa2V5ICYmIGtleS5fbG9jYWxlICYmIGtleS5fbG9jYWxlLl9hYmJyKSB7XG4gICAgICAgICAgICBrZXkgPSBrZXkuX2xvY2FsZS5fYWJicjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgha2V5KSB7XG4gICAgICAgICAgICByZXR1cm4gZ2xvYmFsTG9jYWxlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc0FycmF5KGtleSkpIHtcbiAgICAgICAgICAgIC8vc2hvcnQtY2lyY3VpdCBldmVyeXRoaW5nIGVsc2VcbiAgICAgICAgICAgIGxvY2FsZSA9IGxvYWRMb2NhbGUoa2V5KTtcbiAgICAgICAgICAgIGlmIChsb2NhbGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbG9jYWxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAga2V5ID0gW2tleV07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2hvb3NlTG9jYWxlKGtleSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdExvY2FsZXMoKSB7XG4gICAgICAgIHJldHVybiBrZXlzKGxvY2FsZXMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNoZWNrT3ZlcmZsb3cobSkge1xuICAgICAgICB2YXIgb3ZlcmZsb3csXG4gICAgICAgICAgICBhID0gbS5fYTtcblxuICAgICAgICBpZiAoYSAmJiBnZXRQYXJzaW5nRmxhZ3MobSkub3ZlcmZsb3cgPT09IC0yKSB7XG4gICAgICAgICAgICBvdmVyZmxvdyA9XG4gICAgICAgICAgICAgICAgYVtNT05USF0gPCAwIHx8IGFbTU9OVEhdID4gMTFcbiAgICAgICAgICAgICAgICAgICAgPyBNT05USFxuICAgICAgICAgICAgICAgICAgICA6IGFbREFURV0gPCAxIHx8IGFbREFURV0gPiBkYXlzSW5Nb250aChhW1lFQVJdLCBhW01PTlRIXSlcbiAgICAgICAgICAgICAgICAgICAgPyBEQVRFXG4gICAgICAgICAgICAgICAgICAgIDogYVtIT1VSXSA8IDAgfHxcbiAgICAgICAgICAgICAgICAgICAgICBhW0hPVVJdID4gMjQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAoYVtIT1VSXSA9PT0gMjQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGFbTUlOVVRFXSAhPT0gMCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVtTRUNPTkRdICE9PSAwIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhW01JTExJU0VDT05EXSAhPT0gMCkpXG4gICAgICAgICAgICAgICAgICAgID8gSE9VUlxuICAgICAgICAgICAgICAgICAgICA6IGFbTUlOVVRFXSA8IDAgfHwgYVtNSU5VVEVdID4gNTlcbiAgICAgICAgICAgICAgICAgICAgPyBNSU5VVEVcbiAgICAgICAgICAgICAgICAgICAgOiBhW1NFQ09ORF0gPCAwIHx8IGFbU0VDT05EXSA+IDU5XG4gICAgICAgICAgICAgICAgICAgID8gU0VDT05EXG4gICAgICAgICAgICAgICAgICAgIDogYVtNSUxMSVNFQ09ORF0gPCAwIHx8IGFbTUlMTElTRUNPTkRdID4gOTk5XG4gICAgICAgICAgICAgICAgICAgID8gTUlMTElTRUNPTkRcbiAgICAgICAgICAgICAgICAgICAgOiAtMTtcblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhtKS5fb3ZlcmZsb3dEYXlPZlllYXIgJiZcbiAgICAgICAgICAgICAgICAob3ZlcmZsb3cgPCBZRUFSIHx8IG92ZXJmbG93ID4gREFURSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIG92ZXJmbG93ID0gREFURTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChnZXRQYXJzaW5nRmxhZ3MobSkuX292ZXJmbG93V2Vla3MgJiYgb3ZlcmZsb3cgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgb3ZlcmZsb3cgPSBXRUVLO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGdldFBhcnNpbmdGbGFncyhtKS5fb3ZlcmZsb3dXZWVrZGF5ICYmIG92ZXJmbG93ID09PSAtMSkge1xuICAgICAgICAgICAgICAgIG92ZXJmbG93ID0gV0VFS0RBWTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKG0pLm92ZXJmbG93ID0gb3ZlcmZsb3c7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICAvLyBpc28gODYwMSByZWdleFxuICAgIC8vIDAwMDAtMDAtMDAgMDAwMC1XMDAgb3IgMDAwMC1XMDAtMCArIFQgKyAwMCBvciAwMDowMCBvciAwMDowMDowMCBvciAwMDowMDowMC4wMDAgKyArMDA6MDAgb3IgKzAwMDAgb3IgKzAwKVxuICAgIHZhciBleHRlbmRlZElzb1JlZ2V4ID1cbiAgICAgICAgICAgIC9eXFxzKigoPzpbKy1dXFxkezZ9fFxcZHs0fSktKD86XFxkXFxkLVxcZFxcZHxXXFxkXFxkLVxcZHxXXFxkXFxkfFxcZFxcZFxcZHxcXGRcXGQpKSg/OihUfCApKFxcZFxcZCg/OjpcXGRcXGQoPzo6XFxkXFxkKD86Wy4sXVxcZCspPyk/KT8pKFsrLV1cXGRcXGQoPzo6P1xcZFxcZCk/fFxccypaKT8pPyQvLFxuICAgICAgICBiYXNpY0lzb1JlZ2V4ID1cbiAgICAgICAgICAgIC9eXFxzKigoPzpbKy1dXFxkezZ9fFxcZHs0fSkoPzpcXGRcXGRcXGRcXGR8V1xcZFxcZFxcZHxXXFxkXFxkfFxcZFxcZFxcZHxcXGRcXGR8KSkoPzooVHwgKShcXGRcXGQoPzpcXGRcXGQoPzpcXGRcXGQoPzpbLixdXFxkKyk/KT8pPykoWystXVxcZFxcZCg/Ojo/XFxkXFxkKT98XFxzKlopPyk/JC8sXG4gICAgICAgIHR6UmVnZXggPSAvWnxbKy1dXFxkXFxkKD86Oj9cXGRcXGQpPy8sXG4gICAgICAgIGlzb0RhdGVzID0gW1xuICAgICAgICAgICAgWydZWVlZWVktTU0tREQnLCAvWystXVxcZHs2fS1cXGRcXGQtXFxkXFxkL10sXG4gICAgICAgICAgICBbJ1lZWVktTU0tREQnLCAvXFxkezR9LVxcZFxcZC1cXGRcXGQvXSxcbiAgICAgICAgICAgIFsnR0dHRy1bV11XVy1FJywgL1xcZHs0fS1XXFxkXFxkLVxcZC9dLFxuICAgICAgICAgICAgWydHR0dHLVtXXVdXJywgL1xcZHs0fS1XXFxkXFxkLywgZmFsc2VdLFxuICAgICAgICAgICAgWydZWVlZLURERCcsIC9cXGR7NH0tXFxkezN9L10sXG4gICAgICAgICAgICBbJ1lZWVktTU0nLCAvXFxkezR9LVxcZFxcZC8sIGZhbHNlXSxcbiAgICAgICAgICAgIFsnWVlZWVlZTU1ERCcsIC9bKy1dXFxkezEwfS9dLFxuICAgICAgICAgICAgWydZWVlZTU1ERCcsIC9cXGR7OH0vXSxcbiAgICAgICAgICAgIFsnR0dHR1tXXVdXRScsIC9cXGR7NH1XXFxkezN9L10sXG4gICAgICAgICAgICBbJ0dHR0dbV11XVycsIC9cXGR7NH1XXFxkezJ9LywgZmFsc2VdLFxuICAgICAgICAgICAgWydZWVlZREREJywgL1xcZHs3fS9dLFxuICAgICAgICAgICAgWydZWVlZTU0nLCAvXFxkezZ9LywgZmFsc2VdLFxuICAgICAgICAgICAgWydZWVlZJywgL1xcZHs0fS8sIGZhbHNlXSxcbiAgICAgICAgXSxcbiAgICAgICAgLy8gaXNvIHRpbWUgZm9ybWF0cyBhbmQgcmVnZXhlc1xuICAgICAgICBpc29UaW1lcyA9IFtcbiAgICAgICAgICAgIFsnSEg6bW06c3MuU1NTUycsIC9cXGRcXGQ6XFxkXFxkOlxcZFxcZFxcLlxcZCsvXSxcbiAgICAgICAgICAgIFsnSEg6bW06c3MsU1NTUycsIC9cXGRcXGQ6XFxkXFxkOlxcZFxcZCxcXGQrL10sXG4gICAgICAgICAgICBbJ0hIOm1tOnNzJywgL1xcZFxcZDpcXGRcXGQ6XFxkXFxkL10sXG4gICAgICAgICAgICBbJ0hIOm1tJywgL1xcZFxcZDpcXGRcXGQvXSxcbiAgICAgICAgICAgIFsnSEhtbXNzLlNTU1MnLCAvXFxkXFxkXFxkXFxkXFxkXFxkXFwuXFxkKy9dLFxuICAgICAgICAgICAgWydISG1tc3MsU1NTUycsIC9cXGRcXGRcXGRcXGRcXGRcXGQsXFxkKy9dLFxuICAgICAgICAgICAgWydISG1tc3MnLCAvXFxkXFxkXFxkXFxkXFxkXFxkL10sXG4gICAgICAgICAgICBbJ0hIbW0nLCAvXFxkXFxkXFxkXFxkL10sXG4gICAgICAgICAgICBbJ0hIJywgL1xcZFxcZC9dLFxuICAgICAgICBdLFxuICAgICAgICBhc3BOZXRKc29uUmVnZXggPSAvXlxcLz9EYXRlXFwoKC0/XFxkKykvaSxcbiAgICAgICAgLy8gUkZDIDI4MjIgcmVnZXg6IEZvciBkZXRhaWxzIHNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjgyMiNzZWN0aW9uLTMuM1xuICAgICAgICByZmMyODIyID1cbiAgICAgICAgICAgIC9eKD86KE1vbnxUdWV8V2VkfFRodXxGcml8U2F0fFN1biksP1xccyk/KFxcZHsxLDJ9KVxccyhKYW58RmVifE1hcnxBcHJ8TWF5fEp1bnxKdWx8QXVnfFNlcHxPY3R8Tm92fERlYylcXHMoXFxkezIsNH0pXFxzKFxcZFxcZCk6KFxcZFxcZCkoPzo6KFxcZFxcZCkpP1xccyg/OihVVHxHTVR8W0VDTVBdW1NEXVQpfChbWnpdKXwoWystXVxcZHs0fSkpJC8sXG4gICAgICAgIG9ic09mZnNldHMgPSB7XG4gICAgICAgICAgICBVVDogMCxcbiAgICAgICAgICAgIEdNVDogMCxcbiAgICAgICAgICAgIEVEVDogLTQgKiA2MCxcbiAgICAgICAgICAgIEVTVDogLTUgKiA2MCxcbiAgICAgICAgICAgIENEVDogLTUgKiA2MCxcbiAgICAgICAgICAgIENTVDogLTYgKiA2MCxcbiAgICAgICAgICAgIE1EVDogLTYgKiA2MCxcbiAgICAgICAgICAgIE1TVDogLTcgKiA2MCxcbiAgICAgICAgICAgIFBEVDogLTcgKiA2MCxcbiAgICAgICAgICAgIFBTVDogLTggKiA2MCxcbiAgICAgICAgfTtcblxuICAgIC8vIGRhdGUgZnJvbSBpc28gZm9ybWF0XG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbUlTTyhjb25maWcpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBsLFxuICAgICAgICAgICAgc3RyaW5nID0gY29uZmlnLl9pLFxuICAgICAgICAgICAgbWF0Y2ggPSBleHRlbmRlZElzb1JlZ2V4LmV4ZWMoc3RyaW5nKSB8fCBiYXNpY0lzb1JlZ2V4LmV4ZWMoc3RyaW5nKSxcbiAgICAgICAgICAgIGFsbG93VGltZSxcbiAgICAgICAgICAgIGRhdGVGb3JtYXQsXG4gICAgICAgICAgICB0aW1lRm9ybWF0LFxuICAgICAgICAgICAgdHpGb3JtYXQsXG4gICAgICAgICAgICBpc29EYXRlc0xlbiA9IGlzb0RhdGVzLmxlbmd0aCxcbiAgICAgICAgICAgIGlzb1RpbWVzTGVuID0gaXNvVGltZXMubGVuZ3RoO1xuXG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaXNvID0gdHJ1ZTtcbiAgICAgICAgICAgIGZvciAoaSA9IDAsIGwgPSBpc29EYXRlc0xlbjsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChpc29EYXRlc1tpXVsxXS5leGVjKG1hdGNoWzFdKSkge1xuICAgICAgICAgICAgICAgICAgICBkYXRlRm9ybWF0ID0gaXNvRGF0ZXNbaV1bMF07XG4gICAgICAgICAgICAgICAgICAgIGFsbG93VGltZSA9IGlzb0RhdGVzW2ldWzJdICE9PSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGVGb3JtYXQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXRjaFszXSkge1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGwgPSBpc29UaW1lc0xlbjsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNvVGltZXNbaV1bMV0uZXhlYyhtYXRjaFszXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1hdGNoWzJdIHNob3VsZCBiZSAnVCcgb3Igc3BhY2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVGb3JtYXQgPSAobWF0Y2hbMl0gfHwgJyAnKSArIGlzb1RpbWVzW2ldWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRpbWVGb3JtYXQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghYWxsb3dUaW1lICYmIHRpbWVGb3JtYXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXRjaFs0XSkge1xuICAgICAgICAgICAgICAgIGlmICh0elJlZ2V4LmV4ZWMobWF0Y2hbNF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHR6Rm9ybWF0ID0gJ1onO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uZmlnLl9mID0gZGF0ZUZvcm1hdCArICh0aW1lRm9ybWF0IHx8ICcnKSArICh0ekZvcm1hdCB8fCAnJyk7XG4gICAgICAgICAgICBjb25maWdGcm9tU3RyaW5nQW5kRm9ybWF0KGNvbmZpZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4dHJhY3RGcm9tUkZDMjgyMlN0cmluZ3MoXG4gICAgICAgIHllYXJTdHIsXG4gICAgICAgIG1vbnRoU3RyLFxuICAgICAgICBkYXlTdHIsXG4gICAgICAgIGhvdXJTdHIsXG4gICAgICAgIG1pbnV0ZVN0cixcbiAgICAgICAgc2Vjb25kU3RyXG4gICAgKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBbXG4gICAgICAgICAgICB1bnRydW5jYXRlWWVhcih5ZWFyU3RyKSxcbiAgICAgICAgICAgIGRlZmF1bHRMb2NhbGVNb250aHNTaG9ydC5pbmRleE9mKG1vbnRoU3RyKSxcbiAgICAgICAgICAgIHBhcnNlSW50KGRheVN0ciwgMTApLFxuICAgICAgICAgICAgcGFyc2VJbnQoaG91clN0ciwgMTApLFxuICAgICAgICAgICAgcGFyc2VJbnQobWludXRlU3RyLCAxMCksXG4gICAgICAgIF07XG5cbiAgICAgICAgaWYgKHNlY29uZFN0cikge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2gocGFyc2VJbnQoc2Vjb25kU3RyLCAxMCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1bnRydW5jYXRlWWVhcih5ZWFyU3RyKSB7XG4gICAgICAgIHZhciB5ZWFyID0gcGFyc2VJbnQoeWVhclN0ciwgMTApO1xuICAgICAgICBpZiAoeWVhciA8PSA0OSkge1xuICAgICAgICAgICAgcmV0dXJuIDIwMDAgKyB5ZWFyO1xuICAgICAgICB9IGVsc2UgaWYgKHllYXIgPD0gOTk5KSB7XG4gICAgICAgICAgICByZXR1cm4gMTkwMCArIHllYXI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHllYXI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJlcHJvY2Vzc1JGQzI4MjIocykge1xuICAgICAgICAvLyBSZW1vdmUgY29tbWVudHMgYW5kIGZvbGRpbmcgd2hpdGVzcGFjZSBhbmQgcmVwbGFjZSBtdWx0aXBsZS1zcGFjZXMgd2l0aCBhIHNpbmdsZSBzcGFjZVxuICAgICAgICByZXR1cm4gc1xuICAgICAgICAgICAgLnJlcGxhY2UoL1xcKFteKCldKlxcKXxbXFxuXFx0XS9nLCAnICcpXG4gICAgICAgICAgICAucmVwbGFjZSgvKFxcc1xccyspL2csICcgJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC9eXFxzXFxzKi8sICcnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcc1xccyokLywgJycpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNoZWNrV2Vla2RheSh3ZWVrZGF5U3RyLCBwYXJzZWRJbnB1dCwgY29uZmlnKSB7XG4gICAgICAgIGlmICh3ZWVrZGF5U3RyKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBSZXBsYWNlIHRoZSB2YW5pbGxhIEpTIERhdGUgb2JqZWN0IHdpdGggYW4gaW5kZXBlbmRlbnQgZGF5LW9mLXdlZWsgY2hlY2suXG4gICAgICAgICAgICB2YXIgd2Vla2RheVByb3ZpZGVkID0gZGVmYXVsdExvY2FsZVdlZWtkYXlzU2hvcnQuaW5kZXhPZih3ZWVrZGF5U3RyKSxcbiAgICAgICAgICAgICAgICB3ZWVrZGF5QWN0dWFsID0gbmV3IERhdGUoXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlZElucHV0WzBdLFxuICAgICAgICAgICAgICAgICAgICBwYXJzZWRJbnB1dFsxXSxcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkSW5wdXRbMl1cbiAgICAgICAgICAgICAgICApLmdldERheSgpO1xuICAgICAgICAgICAgaWYgKHdlZWtkYXlQcm92aWRlZCAhPT0gd2Vla2RheUFjdHVhbCkge1xuICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLndlZWtkYXlNaXNtYXRjaCA9IHRydWU7XG4gICAgICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNhbGN1bGF0ZU9mZnNldChvYnNPZmZzZXQsIG1pbGl0YXJ5T2Zmc2V0LCBudW1PZmZzZXQpIHtcbiAgICAgICAgaWYgKG9ic09mZnNldCkge1xuICAgICAgICAgICAgcmV0dXJuIG9ic09mZnNldHNbb2JzT2Zmc2V0XTtcbiAgICAgICAgfSBlbHNlIGlmIChtaWxpdGFyeU9mZnNldCkge1xuICAgICAgICAgICAgLy8gdGhlIG9ubHkgYWxsb3dlZCBtaWxpdGFyeSB0eiBpcyBaXG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBobSA9IHBhcnNlSW50KG51bU9mZnNldCwgMTApLFxuICAgICAgICAgICAgICAgIG0gPSBobSAlIDEwMCxcbiAgICAgICAgICAgICAgICBoID0gKGhtIC0gbSkgLyAxMDA7XG4gICAgICAgICAgICByZXR1cm4gaCAqIDYwICsgbTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRhdGUgYW5kIHRpbWUgZnJvbSByZWYgMjgyMiBmb3JtYXRcbiAgICBmdW5jdGlvbiBjb25maWdGcm9tUkZDMjgyMihjb25maWcpIHtcbiAgICAgICAgdmFyIG1hdGNoID0gcmZjMjgyMi5leGVjKHByZXByb2Nlc3NSRkMyODIyKGNvbmZpZy5faSkpLFxuICAgICAgICAgICAgcGFyc2VkQXJyYXk7XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgcGFyc2VkQXJyYXkgPSBleHRyYWN0RnJvbVJGQzI4MjJTdHJpbmdzKFxuICAgICAgICAgICAgICAgIG1hdGNoWzRdLFxuICAgICAgICAgICAgICAgIG1hdGNoWzNdLFxuICAgICAgICAgICAgICAgIG1hdGNoWzJdLFxuICAgICAgICAgICAgICAgIG1hdGNoWzVdLFxuICAgICAgICAgICAgICAgIG1hdGNoWzZdLFxuICAgICAgICAgICAgICAgIG1hdGNoWzddXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKCFjaGVja1dlZWtkYXkobWF0Y2hbMV0sIHBhcnNlZEFycmF5LCBjb25maWcpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25maWcuX2EgPSBwYXJzZWRBcnJheTtcbiAgICAgICAgICAgIGNvbmZpZy5fdHptID0gY2FsY3VsYXRlT2Zmc2V0KG1hdGNoWzhdLCBtYXRjaFs5XSwgbWF0Y2hbMTBdKTtcblxuICAgICAgICAgICAgY29uZmlnLl9kID0gY3JlYXRlVVRDRGF0ZS5hcHBseShudWxsLCBjb25maWcuX2EpO1xuICAgICAgICAgICAgY29uZmlnLl9kLnNldFVUQ01pbnV0ZXMoY29uZmlnLl9kLmdldFVUQ01pbnV0ZXMoKSAtIGNvbmZpZy5fdHptKTtcblxuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykucmZjMjgyMiA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRhdGUgZnJvbSAxKSBBU1AuTkVULCAyKSBJU08sIDMpIFJGQyAyODIyIGZvcm1hdHMsIG9yIDQpIG9wdGlvbmFsIGZhbGxiYWNrIGlmIHBhcnNpbmcgaXNuJ3Qgc3RyaWN0XG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbVN0cmluZyhjb25maWcpIHtcbiAgICAgICAgdmFyIG1hdGNoZWQgPSBhc3BOZXRKc29uUmVnZXguZXhlYyhjb25maWcuX2kpO1xuICAgICAgICBpZiAobWF0Y2hlZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUoK21hdGNoZWRbMV0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uZmlnRnJvbUlTTyhjb25maWcpO1xuICAgICAgICBpZiAoY29uZmlnLl9pc1ZhbGlkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgZGVsZXRlIGNvbmZpZy5faXNWYWxpZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbmZpZ0Zyb21SRkMyODIyKGNvbmZpZyk7XG4gICAgICAgIGlmIChjb25maWcuX2lzVmFsaWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBkZWxldGUgY29uZmlnLl9pc1ZhbGlkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbmZpZy5fc3RyaWN0KSB7XG4gICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEZpbmFsIGF0dGVtcHQsIHVzZSBJbnB1dCBGYWxsYmFja1xuICAgICAgICAgICAgaG9va3MuY3JlYXRlRnJvbUlucHV0RmFsbGJhY2soY29uZmlnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhvb2tzLmNyZWF0ZUZyb21JbnB1dEZhbGxiYWNrID0gZGVwcmVjYXRlKFxuICAgICAgICAndmFsdWUgcHJvdmlkZWQgaXMgbm90IGluIGEgcmVjb2duaXplZCBSRkMyODIyIG9yIElTTyBmb3JtYXQuIG1vbWVudCBjb25zdHJ1Y3Rpb24gZmFsbHMgYmFjayB0byBqcyBEYXRlKCksICcgK1xuICAgICAgICAgICAgJ3doaWNoIGlzIG5vdCByZWxpYWJsZSBhY3Jvc3MgYWxsIGJyb3dzZXJzIGFuZCB2ZXJzaW9ucy4gTm9uIFJGQzI4MjIvSVNPIGRhdGUgZm9ybWF0cyBhcmUgJyArXG4gICAgICAgICAgICAnZGlzY291cmFnZWQuIFBsZWFzZSByZWZlciB0byBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2pzLWRhdGUvIGZvciBtb3JlIGluZm8uJyxcbiAgICAgICAgZnVuY3Rpb24gKGNvbmZpZykge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUoY29uZmlnLl9pICsgKGNvbmZpZy5fdXNlVVRDID8gJyBVVEMnIDogJycpKTtcbiAgICAgICAgfVxuICAgICk7XG5cbiAgICAvLyBQaWNrIHRoZSBmaXJzdCBkZWZpbmVkIG9mIHR3byBvciB0aHJlZSBhcmd1bWVudHMuXG4gICAgZnVuY3Rpb24gZGVmYXVsdHMoYSwgYiwgYykge1xuICAgICAgICBpZiAoYSAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gYTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYiAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gYjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjdXJyZW50RGF0ZUFycmF5KGNvbmZpZykge1xuICAgICAgICAvLyBob29rcyBpcyBhY3R1YWxseSB0aGUgZXhwb3J0ZWQgbW9tZW50IG9iamVjdFxuICAgICAgICB2YXIgbm93VmFsdWUgPSBuZXcgRGF0ZShob29rcy5ub3coKSk7XG4gICAgICAgIGlmIChjb25maWcuX3VzZVVUQykge1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICBub3dWYWx1ZS5nZXRVVENGdWxsWWVhcigpLFxuICAgICAgICAgICAgICAgIG5vd1ZhbHVlLmdldFVUQ01vbnRoKCksXG4gICAgICAgICAgICAgICAgbm93VmFsdWUuZ2V0VVRDRGF0ZSgpLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW25vd1ZhbHVlLmdldEZ1bGxZZWFyKCksIG5vd1ZhbHVlLmdldE1vbnRoKCksIG5vd1ZhbHVlLmdldERhdGUoKV07XG4gICAgfVxuXG4gICAgLy8gY29udmVydCBhbiBhcnJheSB0byBhIGRhdGUuXG4gICAgLy8gdGhlIGFycmF5IHNob3VsZCBtaXJyb3IgdGhlIHBhcmFtZXRlcnMgYmVsb3dcbiAgICAvLyBub3RlOiBhbGwgdmFsdWVzIHBhc3QgdGhlIHllYXIgYXJlIG9wdGlvbmFsIGFuZCB3aWxsIGRlZmF1bHQgdG8gdGhlIGxvd2VzdCBwb3NzaWJsZSB2YWx1ZS5cbiAgICAvLyBbeWVhciwgbW9udGgsIGRheSAsIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBtaWxsaXNlY29uZF1cbiAgICBmdW5jdGlvbiBjb25maWdGcm9tQXJyYXkoY29uZmlnKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgZGF0ZSxcbiAgICAgICAgICAgIGlucHV0ID0gW10sXG4gICAgICAgICAgICBjdXJyZW50RGF0ZSxcbiAgICAgICAgICAgIGV4cGVjdGVkV2Vla2RheSxcbiAgICAgICAgICAgIHllYXJUb1VzZTtcblxuICAgICAgICBpZiAoY29uZmlnLl9kKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjdXJyZW50RGF0ZSA9IGN1cnJlbnREYXRlQXJyYXkoY29uZmlnKTtcblxuICAgICAgICAvL2NvbXB1dGUgZGF5IG9mIHRoZSB5ZWFyIGZyb20gd2Vla3MgYW5kIHdlZWtkYXlzXG4gICAgICAgIGlmIChjb25maWcuX3cgJiYgY29uZmlnLl9hW0RBVEVdID09IG51bGwgJiYgY29uZmlnLl9hW01PTlRIXSA9PSBudWxsKSB7XG4gICAgICAgICAgICBkYXlPZlllYXJGcm9tV2Vla0luZm8oY29uZmlnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vaWYgdGhlIGRheSBvZiB0aGUgeWVhciBpcyBzZXQsIGZpZ3VyZSBvdXQgd2hhdCBpdCBpc1xuICAgICAgICBpZiAoY29uZmlnLl9kYXlPZlllYXIgIT0gbnVsbCkge1xuICAgICAgICAgICAgeWVhclRvVXNlID0gZGVmYXVsdHMoY29uZmlnLl9hW1lFQVJdLCBjdXJyZW50RGF0ZVtZRUFSXSk7XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBjb25maWcuX2RheU9mWWVhciA+IGRheXNJblllYXIoeWVhclRvVXNlKSB8fFxuICAgICAgICAgICAgICAgIGNvbmZpZy5fZGF5T2ZZZWFyID09PSAwXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5fb3ZlcmZsb3dEYXlPZlllYXIgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkYXRlID0gY3JlYXRlVVRDRGF0ZSh5ZWFyVG9Vc2UsIDAsIGNvbmZpZy5fZGF5T2ZZZWFyKTtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtNT05USF0gPSBkYXRlLmdldFVUQ01vbnRoKCk7XG4gICAgICAgICAgICBjb25maWcuX2FbREFURV0gPSBkYXRlLmdldFVUQ0RhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERlZmF1bHQgdG8gY3VycmVudCBkYXRlLlxuICAgICAgICAvLyAqIGlmIG5vIHllYXIsIG1vbnRoLCBkYXkgb2YgbW9udGggYXJlIGdpdmVuLCBkZWZhdWx0IHRvIHRvZGF5XG4gICAgICAgIC8vICogaWYgZGF5IG9mIG1vbnRoIGlzIGdpdmVuLCBkZWZhdWx0IG1vbnRoIGFuZCB5ZWFyXG4gICAgICAgIC8vICogaWYgbW9udGggaXMgZ2l2ZW4sIGRlZmF1bHQgb25seSB5ZWFyXG4gICAgICAgIC8vICogaWYgeWVhciBpcyBnaXZlbiwgZG9uJ3QgZGVmYXVsdCBhbnl0aGluZ1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMyAmJiBjb25maWcuX2FbaV0gPT0gbnVsbDsgKytpKSB7XG4gICAgICAgICAgICBjb25maWcuX2FbaV0gPSBpbnB1dFtpXSA9IGN1cnJlbnREYXRlW2ldO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gWmVybyBvdXQgd2hhdGV2ZXIgd2FzIG5vdCBkZWZhdWx0ZWQsIGluY2x1ZGluZyB0aW1lXG4gICAgICAgIGZvciAoOyBpIDwgNzsgaSsrKSB7XG4gICAgICAgICAgICBjb25maWcuX2FbaV0gPSBpbnB1dFtpXSA9XG4gICAgICAgICAgICAgICAgY29uZmlnLl9hW2ldID09IG51bGwgPyAoaSA9PT0gMiA/IDEgOiAwKSA6IGNvbmZpZy5fYVtpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENoZWNrIGZvciAyNDowMDowMC4wMDBcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgY29uZmlnLl9hW0hPVVJdID09PSAyNCAmJlxuICAgICAgICAgICAgY29uZmlnLl9hW01JTlVURV0gPT09IDAgJiZcbiAgICAgICAgICAgIGNvbmZpZy5fYVtTRUNPTkRdID09PSAwICYmXG4gICAgICAgICAgICBjb25maWcuX2FbTUlMTElTRUNPTkRdID09PSAwXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uZmlnLl9uZXh0RGF5ID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtIT1VSXSA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBjb25maWcuX2QgPSAoY29uZmlnLl91c2VVVEMgPyBjcmVhdGVVVENEYXRlIDogY3JlYXRlRGF0ZSkuYXBwbHkoXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgaW5wdXRcbiAgICAgICAgKTtcbiAgICAgICAgZXhwZWN0ZWRXZWVrZGF5ID0gY29uZmlnLl91c2VVVENcbiAgICAgICAgICAgID8gY29uZmlnLl9kLmdldFVUQ0RheSgpXG4gICAgICAgICAgICA6IGNvbmZpZy5fZC5nZXREYXkoKTtcblxuICAgICAgICAvLyBBcHBseSB0aW1lem9uZSBvZmZzZXQgZnJvbSBpbnB1dC4gVGhlIGFjdHVhbCB1dGNPZmZzZXQgY2FuIGJlIGNoYW5nZWRcbiAgICAgICAgLy8gd2l0aCBwYXJzZVpvbmUuXG4gICAgICAgIGlmIChjb25maWcuX3R6bSAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb25maWcuX2Quc2V0VVRDTWludXRlcyhjb25maWcuX2QuZ2V0VVRDTWludXRlcygpIC0gY29uZmlnLl90em0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbmZpZy5fbmV4dERheSkge1xuICAgICAgICAgICAgY29uZmlnLl9hW0hPVVJdID0gMjQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjaGVjayBmb3IgbWlzbWF0Y2hpbmcgZGF5IG9mIHdlZWtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgY29uZmlnLl93ICYmXG4gICAgICAgICAgICB0eXBlb2YgY29uZmlnLl93LmQgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICBjb25maWcuX3cuZCAhPT0gZXhwZWN0ZWRXZWVrZGF5XG4gICAgICAgICkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykud2Vla2RheU1pc21hdGNoID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRheU9mWWVhckZyb21XZWVrSW5mbyhjb25maWcpIHtcbiAgICAgICAgdmFyIHcsIHdlZWtZZWFyLCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSwgdGVtcCwgd2Vla2RheU92ZXJmbG93LCBjdXJXZWVrO1xuXG4gICAgICAgIHcgPSBjb25maWcuX3c7XG4gICAgICAgIGlmICh3LkdHICE9IG51bGwgfHwgdy5XICE9IG51bGwgfHwgdy5FICE9IG51bGwpIHtcbiAgICAgICAgICAgIGRvdyA9IDE7XG4gICAgICAgICAgICBkb3kgPSA0O1xuXG4gICAgICAgICAgICAvLyBUT0RPOiBXZSBuZWVkIHRvIHRha2UgdGhlIGN1cnJlbnQgaXNvV2Vla1llYXIsIGJ1dCB0aGF0IGRlcGVuZHMgb25cbiAgICAgICAgICAgIC8vIGhvdyB3ZSBpbnRlcnByZXQgbm93IChsb2NhbCwgdXRjLCBmaXhlZCBvZmZzZXQpLiBTbyBjcmVhdGVcbiAgICAgICAgICAgIC8vIGEgbm93IHZlcnNpb24gb2YgY3VycmVudCBjb25maWcgKHRha2UgbG9jYWwvdXRjL29mZnNldCBmbGFncywgYW5kXG4gICAgICAgICAgICAvLyBjcmVhdGUgbm93KS5cbiAgICAgICAgICAgIHdlZWtZZWFyID0gZGVmYXVsdHMoXG4gICAgICAgICAgICAgICAgdy5HRyxcbiAgICAgICAgICAgICAgICBjb25maWcuX2FbWUVBUl0sXG4gICAgICAgICAgICAgICAgd2Vla09mWWVhcihjcmVhdGVMb2NhbCgpLCAxLCA0KS55ZWFyXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgd2VlayA9IGRlZmF1bHRzKHcuVywgMSk7XG4gICAgICAgICAgICB3ZWVrZGF5ID0gZGVmYXVsdHMody5FLCAxKTtcbiAgICAgICAgICAgIGlmICh3ZWVrZGF5IDwgMSB8fCB3ZWVrZGF5ID4gNykge1xuICAgICAgICAgICAgICAgIHdlZWtkYXlPdmVyZmxvdyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkb3cgPSBjb25maWcuX2xvY2FsZS5fd2Vlay5kb3c7XG4gICAgICAgICAgICBkb3kgPSBjb25maWcuX2xvY2FsZS5fd2Vlay5kb3k7XG5cbiAgICAgICAgICAgIGN1cldlZWsgPSB3ZWVrT2ZZZWFyKGNyZWF0ZUxvY2FsKCksIGRvdywgZG95KTtcblxuICAgICAgICAgICAgd2Vla1llYXIgPSBkZWZhdWx0cyh3LmdnLCBjb25maWcuX2FbWUVBUl0sIGN1cldlZWsueWVhcik7XG5cbiAgICAgICAgICAgIC8vIERlZmF1bHQgdG8gY3VycmVudCB3ZWVrLlxuICAgICAgICAgICAgd2VlayA9IGRlZmF1bHRzKHcudywgY3VyV2Vlay53ZWVrKTtcblxuICAgICAgICAgICAgaWYgKHcuZCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gd2Vla2RheSAtLSBsb3cgZGF5IG51bWJlcnMgYXJlIGNvbnNpZGVyZWQgbmV4dCB3ZWVrXG4gICAgICAgICAgICAgICAgd2Vla2RheSA9IHcuZDtcbiAgICAgICAgICAgICAgICBpZiAod2Vla2RheSA8IDAgfHwgd2Vla2RheSA+IDYpIHtcbiAgICAgICAgICAgICAgICAgICAgd2Vla2RheU92ZXJmbG93ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHcuZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gbG9jYWwgd2Vla2RheSAtLSBjb3VudGluZyBzdGFydHMgZnJvbSBiZWdpbm5pbmcgb2Ygd2Vla1xuICAgICAgICAgICAgICAgIHdlZWtkYXkgPSB3LmUgKyBkb3c7XG4gICAgICAgICAgICAgICAgaWYgKHcuZSA8IDAgfHwgdy5lID4gNikge1xuICAgICAgICAgICAgICAgICAgICB3ZWVrZGF5T3ZlcmZsb3cgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gZGVmYXVsdCB0byBiZWdpbm5pbmcgb2Ygd2Vla1xuICAgICAgICAgICAgICAgIHdlZWtkYXkgPSBkb3c7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHdlZWsgPCAxIHx8IHdlZWsgPiB3ZWVrc0luWWVhcih3ZWVrWWVhciwgZG93LCBkb3kpKSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5fb3ZlcmZsb3dXZWVrcyA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAod2Vla2RheU92ZXJmbG93ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLl9vdmVyZmxvd1dlZWtkYXkgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGVtcCA9IGRheU9mWWVhckZyb21XZWVrcyh3ZWVrWWVhciwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3kpO1xuICAgICAgICAgICAgY29uZmlnLl9hW1lFQVJdID0gdGVtcC55ZWFyO1xuICAgICAgICAgICAgY29uZmlnLl9kYXlPZlllYXIgPSB0ZW1wLmRheU9mWWVhcjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNvbnN0YW50IHRoYXQgcmVmZXJzIHRvIHRoZSBJU08gc3RhbmRhcmRcbiAgICBob29rcy5JU09fODYwMSA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgLy8gY29uc3RhbnQgdGhhdCByZWZlcnMgdG8gdGhlIFJGQyAyODIyIGZvcm1cbiAgICBob29rcy5SRkNfMjgyMiA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgLy8gZGF0ZSBmcm9tIHN0cmluZyBhbmQgZm9ybWF0IHN0cmluZ1xuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21TdHJpbmdBbmRGb3JtYXQoY29uZmlnKSB7XG4gICAgICAgIC8vIFRPRE86IE1vdmUgdGhpcyB0byBhbm90aGVyIHBhcnQgb2YgdGhlIGNyZWF0aW9uIGZsb3cgdG8gcHJldmVudCBjaXJjdWxhciBkZXBzXG4gICAgICAgIGlmIChjb25maWcuX2YgPT09IGhvb2tzLklTT184NjAxKSB7XG4gICAgICAgICAgICBjb25maWdGcm9tSVNPKGNvbmZpZyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbmZpZy5fZiA9PT0gaG9va3MuUkZDXzI4MjIpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21SRkMyODIyKGNvbmZpZyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uZmlnLl9hID0gW107XG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmVtcHR5ID0gdHJ1ZTtcblxuICAgICAgICAvLyBUaGlzIGFycmF5IGlzIHVzZWQgdG8gbWFrZSBhIERhdGUsIGVpdGhlciB3aXRoIGBuZXcgRGF0ZWAgb3IgYERhdGUuVVRDYFxuICAgICAgICB2YXIgc3RyaW5nID0gJycgKyBjb25maWcuX2ksXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgcGFyc2VkSW5wdXQsXG4gICAgICAgICAgICB0b2tlbnMsXG4gICAgICAgICAgICB0b2tlbixcbiAgICAgICAgICAgIHNraXBwZWQsXG4gICAgICAgICAgICBzdHJpbmdMZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuICAgICAgICAgICAgdG90YWxQYXJzZWRJbnB1dExlbmd0aCA9IDAsXG4gICAgICAgICAgICBlcmEsXG4gICAgICAgICAgICB0b2tlbkxlbjtcblxuICAgICAgICB0b2tlbnMgPVxuICAgICAgICAgICAgZXhwYW5kRm9ybWF0KGNvbmZpZy5fZiwgY29uZmlnLl9sb2NhbGUpLm1hdGNoKGZvcm1hdHRpbmdUb2tlbnMpIHx8IFtdO1xuICAgICAgICB0b2tlbkxlbiA9IHRva2Vucy5sZW5ndGg7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0b2tlbkxlbjsgaSsrKSB7XG4gICAgICAgICAgICB0b2tlbiA9IHRva2Vuc1tpXTtcbiAgICAgICAgICAgIHBhcnNlZElucHV0ID0gKHN0cmluZy5tYXRjaChnZXRQYXJzZVJlZ2V4Rm9yVG9rZW4odG9rZW4sIGNvbmZpZykpIHx8XG4gICAgICAgICAgICAgICAgW10pWzBdO1xuICAgICAgICAgICAgaWYgKHBhcnNlZElucHV0KSB7XG4gICAgICAgICAgICAgICAgc2tpcHBlZCA9IHN0cmluZy5zdWJzdHIoMCwgc3RyaW5nLmluZGV4T2YocGFyc2VkSW5wdXQpKTtcbiAgICAgICAgICAgICAgICBpZiAoc2tpcHBlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnVudXNlZElucHV0LnB1c2goc2tpcHBlZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHN0cmluZyA9IHN0cmluZy5zbGljZShcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5nLmluZGV4T2YocGFyc2VkSW5wdXQpICsgcGFyc2VkSW5wdXQubGVuZ3RoXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0b3RhbFBhcnNlZElucHV0TGVuZ3RoICs9IHBhcnNlZElucHV0Lmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGRvbid0IHBhcnNlIGlmIGl0J3Mgbm90IGEga25vd24gdG9rZW5cbiAgICAgICAgICAgIGlmIChmb3JtYXRUb2tlbkZ1bmN0aW9uc1t0b2tlbl0pIHtcbiAgICAgICAgICAgICAgICBpZiAocGFyc2VkSW5wdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuZW1wdHkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS51bnVzZWRUb2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFkZFRpbWVUb0FycmF5RnJvbVRva2VuKHRva2VuLCBwYXJzZWRJbnB1dCwgY29uZmlnKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29uZmlnLl9zdHJpY3QgJiYgIXBhcnNlZElucHV0KSB7XG4gICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykudW51c2VkVG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gYWRkIHJlbWFpbmluZyB1bnBhcnNlZCBpbnB1dCBsZW5ndGggdG8gdGhlIHN0cmluZ1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5jaGFyc0xlZnRPdmVyID1cbiAgICAgICAgICAgIHN0cmluZ0xlbmd0aCAtIHRvdGFsUGFyc2VkSW5wdXRMZW5ndGg7XG4gICAgICAgIGlmIChzdHJpbmcubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykudW51c2VkSW5wdXQucHVzaChzdHJpbmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY2xlYXIgXzEyaCBmbGFnIGlmIGhvdXIgaXMgPD0gMTJcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgY29uZmlnLl9hW0hPVVJdIDw9IDEyICYmXG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID09PSB0cnVlICYmXG4gICAgICAgICAgICBjb25maWcuX2FbSE9VUl0gPiAwXG4gICAgICAgICkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuYmlnSG91ciA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnBhcnNlZERhdGVQYXJ0cyA9IGNvbmZpZy5fYS5zbGljZSgwKTtcbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykubWVyaWRpZW0gPSBjb25maWcuX21lcmlkaWVtO1xuICAgICAgICAvLyBoYW5kbGUgbWVyaWRpZW1cbiAgICAgICAgY29uZmlnLl9hW0hPVVJdID0gbWVyaWRpZW1GaXhXcmFwKFxuICAgICAgICAgICAgY29uZmlnLl9sb2NhbGUsXG4gICAgICAgICAgICBjb25maWcuX2FbSE9VUl0sXG4gICAgICAgICAgICBjb25maWcuX21lcmlkaWVtXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gaGFuZGxlIGVyYVxuICAgICAgICBlcmEgPSBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5lcmE7XG4gICAgICAgIGlmIChlcmEgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtZRUFSXSA9IGNvbmZpZy5fbG9jYWxlLmVyYXNDb252ZXJ0WWVhcihlcmEsIGNvbmZpZy5fYVtZRUFSXSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25maWdGcm9tQXJyYXkoY29uZmlnKTtcbiAgICAgICAgY2hlY2tPdmVyZmxvdyhjb25maWcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1lcmlkaWVtRml4V3JhcChsb2NhbGUsIGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgIHZhciBpc1BtO1xuXG4gICAgICAgIGlmIChtZXJpZGllbSA9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBub3RoaW5nIHRvIGRvXG4gICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG9jYWxlLm1lcmlkaWVtSG91ciAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlLm1lcmlkaWVtSG91cihob3VyLCBtZXJpZGllbSk7XG4gICAgICAgIH0gZWxzZSBpZiAobG9jYWxlLmlzUE0gIT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gRmFsbGJhY2tcbiAgICAgICAgICAgIGlzUG0gPSBsb2NhbGUuaXNQTShtZXJpZGllbSk7XG4gICAgICAgICAgICBpZiAoaXNQbSAmJiBob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyICs9IDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFpc1BtICYmIGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgbm90IHN1cHBvc2VkIHRvIGhhcHBlblxuICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBkYXRlIGZyb20gc3RyaW5nIGFuZCBhcnJheSBvZiBmb3JtYXQgc3RyaW5nc1xuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21TdHJpbmdBbmRBcnJheShjb25maWcpIHtcbiAgICAgICAgdmFyIHRlbXBDb25maWcsXG4gICAgICAgICAgICBiZXN0TW9tZW50LFxuICAgICAgICAgICAgc2NvcmVUb0JlYXQsXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgY3VycmVudFNjb3JlLFxuICAgICAgICAgICAgdmFsaWRGb3JtYXRGb3VuZCxcbiAgICAgICAgICAgIGJlc3RGb3JtYXRJc1ZhbGlkID0gZmFsc2UsXG4gICAgICAgICAgICBjb25maWdmTGVuID0gY29uZmlnLl9mLmxlbmd0aDtcblxuICAgICAgICBpZiAoY29uZmlnZkxlbiA9PT0gMCkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaW52YWxpZEZvcm1hdCA9IHRydWU7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShOYU4pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvbmZpZ2ZMZW47IGkrKykge1xuICAgICAgICAgICAgY3VycmVudFNjb3JlID0gMDtcbiAgICAgICAgICAgIHZhbGlkRm9ybWF0Rm91bmQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRlbXBDb25maWcgPSBjb3B5Q29uZmlnKHt9LCBjb25maWcpO1xuICAgICAgICAgICAgaWYgKGNvbmZpZy5fdXNlVVRDICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0ZW1wQ29uZmlnLl91c2VVVEMgPSBjb25maWcuX3VzZVVUQztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRlbXBDb25maWcuX2YgPSBjb25maWcuX2ZbaV07XG4gICAgICAgICAgICBjb25maWdGcm9tU3RyaW5nQW5kRm9ybWF0KHRlbXBDb25maWcpO1xuXG4gICAgICAgICAgICBpZiAoaXNWYWxpZCh0ZW1wQ29uZmlnKSkge1xuICAgICAgICAgICAgICAgIHZhbGlkRm9ybWF0Rm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBhbnkgaW5wdXQgdGhhdCB3YXMgbm90IHBhcnNlZCBhZGQgYSBwZW5hbHR5IGZvciB0aGF0IGZvcm1hdFxuICAgICAgICAgICAgY3VycmVudFNjb3JlICs9IGdldFBhcnNpbmdGbGFncyh0ZW1wQ29uZmlnKS5jaGFyc0xlZnRPdmVyO1xuXG4gICAgICAgICAgICAvL29yIHRva2Vuc1xuICAgICAgICAgICAgY3VycmVudFNjb3JlICs9IGdldFBhcnNpbmdGbGFncyh0ZW1wQ29uZmlnKS51bnVzZWRUb2tlbnMubGVuZ3RoICogMTA7XG5cbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyh0ZW1wQ29uZmlnKS5zY29yZSA9IGN1cnJlbnRTY29yZTtcblxuICAgICAgICAgICAgaWYgKCFiZXN0Rm9ybWF0SXNWYWxpZCkge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgc2NvcmVUb0JlYXQgPT0gbnVsbCB8fFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2NvcmUgPCBzY29yZVRvQmVhdCB8fFxuICAgICAgICAgICAgICAgICAgICB2YWxpZEZvcm1hdEZvdW5kXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHNjb3JlVG9CZWF0ID0gY3VycmVudFNjb3JlO1xuICAgICAgICAgICAgICAgICAgICBiZXN0TW9tZW50ID0gdGVtcENvbmZpZztcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbGlkRm9ybWF0Rm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJlc3RGb3JtYXRJc1ZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRTY29yZSA8IHNjb3JlVG9CZWF0KSB7XG4gICAgICAgICAgICAgICAgICAgIHNjb3JlVG9CZWF0ID0gY3VycmVudFNjb3JlO1xuICAgICAgICAgICAgICAgICAgICBiZXN0TW9tZW50ID0gdGVtcENvbmZpZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBleHRlbmQoY29uZmlnLCBiZXN0TW9tZW50IHx8IHRlbXBDb25maWcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21PYmplY3QoY29uZmlnKSB7XG4gICAgICAgIGlmIChjb25maWcuX2QpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpID0gbm9ybWFsaXplT2JqZWN0VW5pdHMoY29uZmlnLl9pKSxcbiAgICAgICAgICAgIGRheU9yRGF0ZSA9IGkuZGF5ID09PSB1bmRlZmluZWQgPyBpLmRhdGUgOiBpLmRheTtcbiAgICAgICAgY29uZmlnLl9hID0gbWFwKFxuICAgICAgICAgICAgW2kueWVhciwgaS5tb250aCwgZGF5T3JEYXRlLCBpLmhvdXIsIGkubWludXRlLCBpLnNlY29uZCwgaS5taWxsaXNlY29uZF0sXG4gICAgICAgICAgICBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9iaiAmJiBwYXJzZUludChvYmosIDEwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcblxuICAgICAgICBjb25maWdGcm9tQXJyYXkoY29uZmlnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVGcm9tQ29uZmlnKGNvbmZpZykge1xuICAgICAgICB2YXIgcmVzID0gbmV3IE1vbWVudChjaGVja092ZXJmbG93KHByZXBhcmVDb25maWcoY29uZmlnKSkpO1xuICAgICAgICBpZiAocmVzLl9uZXh0RGF5KSB7XG4gICAgICAgICAgICAvLyBBZGRpbmcgaXMgc21hcnQgZW5vdWdoIGFyb3VuZCBEU1RcbiAgICAgICAgICAgIHJlcy5hZGQoMSwgJ2QnKTtcbiAgICAgICAgICAgIHJlcy5fbmV4dERheSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJlcGFyZUNvbmZpZyhjb25maWcpIHtcbiAgICAgICAgdmFyIGlucHV0ID0gY29uZmlnLl9pLFxuICAgICAgICAgICAgZm9ybWF0ID0gY29uZmlnLl9mO1xuXG4gICAgICAgIGNvbmZpZy5fbG9jYWxlID0gY29uZmlnLl9sb2NhbGUgfHwgZ2V0TG9jYWxlKGNvbmZpZy5fbCk7XG5cbiAgICAgICAgaWYgKGlucHV0ID09PSBudWxsIHx8IChmb3JtYXQgPT09IHVuZGVmaW5lZCAmJiBpbnB1dCA9PT0gJycpKSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlSW52YWxpZCh7IG51bGxJbnB1dDogdHJ1ZSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBjb25maWcuX2kgPSBpbnB1dCA9IGNvbmZpZy5fbG9jYWxlLnByZXBhcnNlKGlucHV0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc01vbWVudChpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTW9tZW50KGNoZWNrT3ZlcmZsb3coaW5wdXQpKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0RhdGUoaW5wdXQpKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBpbnB1dDtcbiAgICAgICAgfSBlbHNlIGlmIChpc0FycmF5KGZvcm1hdCkpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21TdHJpbmdBbmRBcnJheShjb25maWcpO1xuICAgICAgICB9IGVsc2UgaWYgKGZvcm1hdCkge1xuICAgICAgICAgICAgY29uZmlnRnJvbVN0cmluZ0FuZEZvcm1hdChjb25maWcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uZmlnRnJvbUlucHV0KGNvbmZpZyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzVmFsaWQoY29uZmlnKSkge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb25maWc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbUlucHV0KGNvbmZpZykge1xuICAgICAgICB2YXIgaW5wdXQgPSBjb25maWcuX2k7XG4gICAgICAgIGlmIChpc1VuZGVmaW5lZChpbnB1dCkpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKGhvb2tzLm5vdygpKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0RhdGUoaW5wdXQpKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShpbnB1dC52YWx1ZU9mKCkpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21TdHJpbmcoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0FycmF5KGlucHV0KSkge1xuICAgICAgICAgICAgY29uZmlnLl9hID0gbWFwKGlucHV0LnNsaWNlKDApLCBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KG9iaiwgMTApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25maWdGcm9tQXJyYXkoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc09iamVjdChpbnB1dCkpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21PYmplY3QoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc051bWJlcihpbnB1dCkpIHtcbiAgICAgICAgICAgIC8vIGZyb20gbWlsbGlzZWNvbmRzXG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShpbnB1dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBob29rcy5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjayhjb25maWcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlTG9jYWxPclVUQyhpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCwgaXNVVEMpIHtcbiAgICAgICAgdmFyIGMgPSB7fTtcblxuICAgICAgICBpZiAoZm9ybWF0ID09PSB0cnVlIHx8IGZvcm1hdCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHN0cmljdCA9IGZvcm1hdDtcbiAgICAgICAgICAgIGZvcm1hdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsb2NhbGUgPT09IHRydWUgfHwgbG9jYWxlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgc3RyaWN0ID0gbG9jYWxlO1xuICAgICAgICAgICAgbG9jYWxlID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgKGlzT2JqZWN0KGlucHV0KSAmJiBpc09iamVjdEVtcHR5KGlucHV0KSkgfHxcbiAgICAgICAgICAgIChpc0FycmF5KGlucHV0KSAmJiBpbnB1dC5sZW5ndGggPT09IDApXG4gICAgICAgICkge1xuICAgICAgICAgICAgaW5wdXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gb2JqZWN0IGNvbnN0cnVjdGlvbiBtdXN0IGJlIGRvbmUgdGhpcyB3YXkuXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tb21lbnQvbW9tZW50L2lzc3Vlcy8xNDIzXG4gICAgICAgIGMuX2lzQU1vbWVudE9iamVjdCA9IHRydWU7XG4gICAgICAgIGMuX3VzZVVUQyA9IGMuX2lzVVRDID0gaXNVVEM7XG4gICAgICAgIGMuX2wgPSBsb2NhbGU7XG4gICAgICAgIGMuX2kgPSBpbnB1dDtcbiAgICAgICAgYy5fZiA9IGZvcm1hdDtcbiAgICAgICAgYy5fc3RyaWN0ID0gc3RyaWN0O1xuXG4gICAgICAgIHJldHVybiBjcmVhdGVGcm9tQ29uZmlnKGMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUxvY2FsKGlucHV0LCBmb3JtYXQsIGxvY2FsZSwgc3RyaWN0KSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVMb2NhbE9yVVRDKGlucHV0LCBmb3JtYXQsIGxvY2FsZSwgc3RyaWN0LCBmYWxzZSk7XG4gICAgfVxuXG4gICAgdmFyIHByb3RvdHlwZU1pbiA9IGRlcHJlY2F0ZShcbiAgICAgICAgICAgICdtb21lbnQoKS5taW4gaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudC5tYXggaW5zdGVhZC4gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9taW4tbWF4LycsXG4gICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIG90aGVyID0gY3JlYXRlTG9jYWwuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1ZhbGlkKCkgJiYgb3RoZXIuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvdGhlciA8IHRoaXMgPyB0aGlzIDogb3RoZXI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUludmFsaWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIHByb3RvdHlwZU1heCA9IGRlcHJlY2F0ZShcbiAgICAgICAgICAgICdtb21lbnQoKS5tYXggaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudC5taW4gaW5zdGVhZC4gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9taW4tbWF4LycsXG4gICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIG90aGVyID0gY3JlYXRlTG9jYWwuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1ZhbGlkKCkgJiYgb3RoZXIuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvdGhlciA+IHRoaXMgPyB0aGlzIDogb3RoZXI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUludmFsaWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG5cbiAgICAvLyBQaWNrIGEgbW9tZW50IG0gZnJvbSBtb21lbnRzIHNvIHRoYXQgbVtmbl0ob3RoZXIpIGlzIHRydWUgZm9yIGFsbFxuICAgIC8vIG90aGVyLiBUaGlzIHJlbGllcyBvbiB0aGUgZnVuY3Rpb24gZm4gdG8gYmUgdHJhbnNpdGl2ZS5cbiAgICAvL1xuICAgIC8vIG1vbWVudHMgc2hvdWxkIGVpdGhlciBiZSBhbiBhcnJheSBvZiBtb21lbnQgb2JqZWN0cyBvciBhbiBhcnJheSwgd2hvc2VcbiAgICAvLyBmaXJzdCBlbGVtZW50IGlzIGFuIGFycmF5IG9mIG1vbWVudCBvYmplY3RzLlxuICAgIGZ1bmN0aW9uIHBpY2tCeShmbiwgbW9tZW50cykge1xuICAgICAgICB2YXIgcmVzLCBpO1xuICAgICAgICBpZiAobW9tZW50cy5sZW5ndGggPT09IDEgJiYgaXNBcnJheShtb21lbnRzWzBdKSkge1xuICAgICAgICAgICAgbW9tZW50cyA9IG1vbWVudHNbMF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFtb21lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzID0gbW9tZW50c1swXTtcbiAgICAgICAgZm9yIChpID0gMTsgaSA8IG1vbWVudHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIGlmICghbW9tZW50c1tpXS5pc1ZhbGlkKCkgfHwgbW9tZW50c1tpXVtmbl0ocmVzKSkge1xuICAgICAgICAgICAgICAgIHJlcyA9IG1vbWVudHNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBVc2UgW10uc29ydCBpbnN0ZWFkP1xuICAgIGZ1bmN0aW9uIG1pbigpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XG5cbiAgICAgICAgcmV0dXJuIHBpY2tCeSgnaXNCZWZvcmUnLCBhcmdzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXgoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDApO1xuXG4gICAgICAgIHJldHVybiBwaWNrQnkoJ2lzQWZ0ZXInLCBhcmdzKTtcbiAgICB9XG5cbiAgICB2YXIgbm93ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gRGF0ZS5ub3cgPyBEYXRlLm5vdygpIDogK25ldyBEYXRlKCk7XG4gICAgfTtcblxuICAgIHZhciBvcmRlcmluZyA9IFtcbiAgICAgICAgJ3llYXInLFxuICAgICAgICAncXVhcnRlcicsXG4gICAgICAgICdtb250aCcsXG4gICAgICAgICd3ZWVrJyxcbiAgICAgICAgJ2RheScsXG4gICAgICAgICdob3VyJyxcbiAgICAgICAgJ21pbnV0ZScsXG4gICAgICAgICdzZWNvbmQnLFxuICAgICAgICAnbWlsbGlzZWNvbmQnLFxuICAgIF07XG5cbiAgICBmdW5jdGlvbiBpc0R1cmF0aW9uVmFsaWQobSkge1xuICAgICAgICB2YXIga2V5LFxuICAgICAgICAgICAgdW5pdEhhc0RlY2ltYWwgPSBmYWxzZSxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBvcmRlckxlbiA9IG9yZGVyaW5nLmxlbmd0aDtcbiAgICAgICAgZm9yIChrZXkgaW4gbSkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGhhc093blByb3AobSwga2V5KSAmJlxuICAgICAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgICAgIGluZGV4T2YuY2FsbChvcmRlcmluZywga2V5KSAhPT0gLTEgJiZcbiAgICAgICAgICAgICAgICAgICAgKG1ba2V5XSA9PSBudWxsIHx8ICFpc05hTihtW2tleV0pKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBvcmRlckxlbjsgKytpKSB7XG4gICAgICAgICAgICBpZiAobVtvcmRlcmluZ1tpXV0pIHtcbiAgICAgICAgICAgICAgICBpZiAodW5pdEhhc0RlY2ltYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBvbmx5IGFsbG93IG5vbi1pbnRlZ2VycyBmb3Igc21hbGxlc3QgdW5pdFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocGFyc2VGbG9hdChtW29yZGVyaW5nW2ldXSkgIT09IHRvSW50KG1bb3JkZXJpbmdbaV1dKSkge1xuICAgICAgICAgICAgICAgICAgICB1bml0SGFzRGVjaW1hbCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNWYWxpZCQxKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNWYWxpZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVJbnZhbGlkJDEoKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVEdXJhdGlvbihOYU4pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIER1cmF0aW9uKGR1cmF0aW9uKSB7XG4gICAgICAgIHZhciBub3JtYWxpemVkSW5wdXQgPSBub3JtYWxpemVPYmplY3RVbml0cyhkdXJhdGlvbiksXG4gICAgICAgICAgICB5ZWFycyA9IG5vcm1hbGl6ZWRJbnB1dC55ZWFyIHx8IDAsXG4gICAgICAgICAgICBxdWFydGVycyA9IG5vcm1hbGl6ZWRJbnB1dC5xdWFydGVyIHx8IDAsXG4gICAgICAgICAgICBtb250aHMgPSBub3JtYWxpemVkSW5wdXQubW9udGggfHwgMCxcbiAgICAgICAgICAgIHdlZWtzID0gbm9ybWFsaXplZElucHV0LndlZWsgfHwgbm9ybWFsaXplZElucHV0Lmlzb1dlZWsgfHwgMCxcbiAgICAgICAgICAgIGRheXMgPSBub3JtYWxpemVkSW5wdXQuZGF5IHx8IDAsXG4gICAgICAgICAgICBob3VycyA9IG5vcm1hbGl6ZWRJbnB1dC5ob3VyIHx8IDAsXG4gICAgICAgICAgICBtaW51dGVzID0gbm9ybWFsaXplZElucHV0Lm1pbnV0ZSB8fCAwLFxuICAgICAgICAgICAgc2Vjb25kcyA9IG5vcm1hbGl6ZWRJbnB1dC5zZWNvbmQgfHwgMCxcbiAgICAgICAgICAgIG1pbGxpc2Vjb25kcyA9IG5vcm1hbGl6ZWRJbnB1dC5taWxsaXNlY29uZCB8fCAwO1xuXG4gICAgICAgIHRoaXMuX2lzVmFsaWQgPSBpc0R1cmF0aW9uVmFsaWQobm9ybWFsaXplZElucHV0KTtcblxuICAgICAgICAvLyByZXByZXNlbnRhdGlvbiBmb3IgZGF0ZUFkZFJlbW92ZVxuICAgICAgICB0aGlzLl9taWxsaXNlY29uZHMgPVxuICAgICAgICAgICAgK21pbGxpc2Vjb25kcyArXG4gICAgICAgICAgICBzZWNvbmRzICogMWUzICsgLy8gMTAwMFxuICAgICAgICAgICAgbWludXRlcyAqIDZlNCArIC8vIDEwMDAgKiA2MFxuICAgICAgICAgICAgaG91cnMgKiAxMDAwICogNjAgKiA2MDsgLy91c2luZyAxMDAwICogNjAgKiA2MCBpbnN0ZWFkIG9mIDM2ZTUgdG8gYXZvaWQgZmxvYXRpbmcgcG9pbnQgcm91bmRpbmcgZXJyb3JzIGh0dHBzOi8vZ2l0aHViLmNvbS9tb21lbnQvbW9tZW50L2lzc3Vlcy8yOTc4XG4gICAgICAgIC8vIEJlY2F1c2Ugb2YgZGF0ZUFkZFJlbW92ZSB0cmVhdHMgMjQgaG91cnMgYXMgZGlmZmVyZW50IGZyb20gYVxuICAgICAgICAvLyBkYXkgd2hlbiB3b3JraW5nIGFyb3VuZCBEU1QsIHdlIG5lZWQgdG8gc3RvcmUgdGhlbSBzZXBhcmF0ZWx5XG4gICAgICAgIHRoaXMuX2RheXMgPSArZGF5cyArIHdlZWtzICogNztcbiAgICAgICAgLy8gSXQgaXMgaW1wb3NzaWJsZSB0byB0cmFuc2xhdGUgbW9udGhzIGludG8gZGF5cyB3aXRob3V0IGtub3dpbmdcbiAgICAgICAgLy8gd2hpY2ggbW9udGhzIHlvdSBhcmUgYXJlIHRhbGtpbmcgYWJvdXQsIHNvIHdlIGhhdmUgdG8gc3RvcmVcbiAgICAgICAgLy8gaXQgc2VwYXJhdGVseS5cbiAgICAgICAgdGhpcy5fbW9udGhzID0gK21vbnRocyArIHF1YXJ0ZXJzICogMyArIHllYXJzICogMTI7XG5cbiAgICAgICAgdGhpcy5fZGF0YSA9IHt9O1xuXG4gICAgICAgIHRoaXMuX2xvY2FsZSA9IGdldExvY2FsZSgpO1xuXG4gICAgICAgIHRoaXMuX2J1YmJsZSgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRHVyYXRpb24ob2JqKSB7XG4gICAgICAgIHJldHVybiBvYmogaW5zdGFuY2VvZiBEdXJhdGlvbjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhYnNSb3VuZChudW1iZXIpIHtcbiAgICAgICAgaWYgKG51bWJlciA8IDApIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLnJvdW5kKC0xICogbnVtYmVyKSAqIC0xO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGgucm91bmQobnVtYmVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNvbXBhcmUgdHdvIGFycmF5cywgcmV0dXJuIHRoZSBudW1iZXIgb2YgZGlmZmVyZW5jZXNcbiAgICBmdW5jdGlvbiBjb21wYXJlQXJyYXlzKGFycmF5MSwgYXJyYXkyLCBkb250Q29udmVydCkge1xuICAgICAgICB2YXIgbGVuID0gTWF0aC5taW4oYXJyYXkxLmxlbmd0aCwgYXJyYXkyLmxlbmd0aCksXG4gICAgICAgICAgICBsZW5ndGhEaWZmID0gTWF0aC5hYnMoYXJyYXkxLmxlbmd0aCAtIGFycmF5Mi5sZW5ndGgpLFxuICAgICAgICAgICAgZGlmZnMgPSAwLFxuICAgICAgICAgICAgaTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgKGRvbnRDb252ZXJ0ICYmIGFycmF5MVtpXSAhPT0gYXJyYXkyW2ldKSB8fFxuICAgICAgICAgICAgICAgICghZG9udENvbnZlcnQgJiYgdG9JbnQoYXJyYXkxW2ldKSAhPT0gdG9JbnQoYXJyYXkyW2ldKSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGRpZmZzKys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRpZmZzICsgbGVuZ3RoRGlmZjtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBmdW5jdGlvbiBvZmZzZXQodG9rZW4sIHNlcGFyYXRvcikge1xuICAgICAgICBhZGRGb3JtYXRUb2tlbih0b2tlbiwgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIG9mZnNldCA9IHRoaXMudXRjT2Zmc2V0KCksXG4gICAgICAgICAgICAgICAgc2lnbiA9ICcrJztcbiAgICAgICAgICAgIGlmIChvZmZzZXQgPCAwKSB7XG4gICAgICAgICAgICAgICAgb2Zmc2V0ID0gLW9mZnNldDtcbiAgICAgICAgICAgICAgICBzaWduID0gJy0nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICBzaWduICtcbiAgICAgICAgICAgICAgICB6ZXJvRmlsbCh+fihvZmZzZXQgLyA2MCksIDIpICtcbiAgICAgICAgICAgICAgICBzZXBhcmF0b3IgK1xuICAgICAgICAgICAgICAgIHplcm9GaWxsKH5+b2Zmc2V0ICUgNjAsIDIpXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvZmZzZXQoJ1onLCAnOicpO1xuICAgIG9mZnNldCgnWlonLCAnJyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdaJywgbWF0Y2hTaG9ydE9mZnNldCk7XG4gICAgYWRkUmVnZXhUb2tlbignWlonLCBtYXRjaFNob3J0T2Zmc2V0KTtcbiAgICBhZGRQYXJzZVRva2VuKFsnWicsICdaWiddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgY29uZmlnLl91c2VVVEMgPSB0cnVlO1xuICAgICAgICBjb25maWcuX3R6bSA9IG9mZnNldEZyb21TdHJpbmcobWF0Y2hTaG9ydE9mZnNldCwgaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gSEVMUEVSU1xuXG4gICAgLy8gdGltZXpvbmUgY2h1bmtlclxuICAgIC8vICcrMTA6MDAnID4gWycxMCcsICAnMDAnXVxuICAgIC8vICctMTUzMCcgID4gWyctMTUnLCAnMzAnXVxuICAgIHZhciBjaHVua09mZnNldCA9IC8oW1xcK1xcLV18XFxkXFxkKS9naTtcblxuICAgIGZ1bmN0aW9uIG9mZnNldEZyb21TdHJpbmcobWF0Y2hlciwgc3RyaW5nKSB7XG4gICAgICAgIHZhciBtYXRjaGVzID0gKHN0cmluZyB8fCAnJykubWF0Y2gobWF0Y2hlciksXG4gICAgICAgICAgICBjaHVuayxcbiAgICAgICAgICAgIHBhcnRzLFxuICAgICAgICAgICAgbWludXRlcztcblxuICAgICAgICBpZiAobWF0Y2hlcyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjaHVuayA9IG1hdGNoZXNbbWF0Y2hlcy5sZW5ndGggLSAxXSB8fCBbXTtcbiAgICAgICAgcGFydHMgPSAoY2h1bmsgKyAnJykubWF0Y2goY2h1bmtPZmZzZXQpIHx8IFsnLScsIDAsIDBdO1xuICAgICAgICBtaW51dGVzID0gKyhwYXJ0c1sxXSAqIDYwKSArIHRvSW50KHBhcnRzWzJdKTtcblxuICAgICAgICByZXR1cm4gbWludXRlcyA9PT0gMCA/IDAgOiBwYXJ0c1swXSA9PT0gJysnID8gbWludXRlcyA6IC1taW51dGVzO1xuICAgIH1cblxuICAgIC8vIFJldHVybiBhIG1vbWVudCBmcm9tIGlucHV0LCB0aGF0IGlzIGxvY2FsL3V0Yy96b25lIGVxdWl2YWxlbnQgdG8gbW9kZWwuXG4gICAgZnVuY3Rpb24gY2xvbmVXaXRoT2Zmc2V0KGlucHV0LCBtb2RlbCkge1xuICAgICAgICB2YXIgcmVzLCBkaWZmO1xuICAgICAgICBpZiAobW9kZWwuX2lzVVRDKSB7XG4gICAgICAgICAgICByZXMgPSBtb2RlbC5jbG9uZSgpO1xuICAgICAgICAgICAgZGlmZiA9XG4gICAgICAgICAgICAgICAgKGlzTW9tZW50KGlucHV0KSB8fCBpc0RhdGUoaW5wdXQpXG4gICAgICAgICAgICAgICAgICAgID8gaW5wdXQudmFsdWVPZigpXG4gICAgICAgICAgICAgICAgICAgIDogY3JlYXRlTG9jYWwoaW5wdXQpLnZhbHVlT2YoKSkgLSByZXMudmFsdWVPZigpO1xuICAgICAgICAgICAgLy8gVXNlIGxvdy1sZXZlbCBhcGksIGJlY2F1c2UgdGhpcyBmbiBpcyBsb3ctbGV2ZWwgYXBpLlxuICAgICAgICAgICAgcmVzLl9kLnNldFRpbWUocmVzLl9kLnZhbHVlT2YoKSArIGRpZmYpO1xuICAgICAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHJlcywgZmFsc2UpO1xuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVMb2NhbChpbnB1dCkubG9jYWwoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldERhdGVPZmZzZXQobSkge1xuICAgICAgICAvLyBPbiBGaXJlZm94LjI0IERhdGUjZ2V0VGltZXpvbmVPZmZzZXQgcmV0dXJucyBhIGZsb2F0aW5nIHBvaW50LlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbW9tZW50L21vbWVudC9wdWxsLzE4NzFcbiAgICAgICAgcmV0dXJuIC1NYXRoLnJvdW5kKG0uX2QuZ2V0VGltZXpvbmVPZmZzZXQoKSk7XG4gICAgfVxuXG4gICAgLy8gSE9PS1NcblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2hlbmV2ZXIgYSBtb21lbnQgaXMgbXV0YXRlZC5cbiAgICAvLyBJdCBpcyBpbnRlbmRlZCB0byBrZWVwIHRoZSBvZmZzZXQgaW4gc3luYyB3aXRoIHRoZSB0aW1lem9uZS5cbiAgICBob29rcy51cGRhdGVPZmZzZXQgPSBmdW5jdGlvbiAoKSB7fTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIC8vIGtlZXBMb2NhbFRpbWUgPSB0cnVlIG1lYW5zIG9ubHkgY2hhbmdlIHRoZSB0aW1lem9uZSwgd2l0aG91dFxuICAgIC8vIGFmZmVjdGluZyB0aGUgbG9jYWwgaG91ci4gU28gNTozMToyNiArMDMwMCAtLVt1dGNPZmZzZXQoMiwgdHJ1ZSldLS0+XG4gICAgLy8gNTozMToyNiArMDIwMCBJdCBpcyBwb3NzaWJsZSB0aGF0IDU6MzE6MjYgZG9lc24ndCBleGlzdCB3aXRoIG9mZnNldFxuICAgIC8vICswMjAwLCBzbyB3ZSBhZGp1c3QgdGhlIHRpbWUgYXMgbmVlZGVkLCB0byBiZSB2YWxpZC5cbiAgICAvL1xuICAgIC8vIEtlZXBpbmcgdGhlIHRpbWUgYWN0dWFsbHkgYWRkcy9zdWJ0cmFjdHMgKG9uZSBob3VyKVxuICAgIC8vIGZyb20gdGhlIGFjdHVhbCByZXByZXNlbnRlZCB0aW1lLiBUaGF0IGlzIHdoeSB3ZSBjYWxsIHVwZGF0ZU9mZnNldFxuICAgIC8vIGEgc2Vjb25kIHRpbWUuIEluIGNhc2UgaXQgd2FudHMgdXMgdG8gY2hhbmdlIHRoZSBvZmZzZXQgYWdhaW5cbiAgICAvLyBfY2hhbmdlSW5Qcm9ncmVzcyA9PSB0cnVlIGNhc2UsIHRoZW4gd2UgaGF2ZSB0byBhZGp1c3QsIGJlY2F1c2VcbiAgICAvLyB0aGVyZSBpcyBubyBzdWNoIHRpbWUgaW4gdGhlIGdpdmVuIHRpbWV6b25lLlxuICAgIGZ1bmN0aW9uIGdldFNldE9mZnNldChpbnB1dCwga2VlcExvY2FsVGltZSwga2VlcE1pbnV0ZXMpIHtcbiAgICAgICAgdmFyIG9mZnNldCA9IHRoaXMuX29mZnNldCB8fCAwLFxuICAgICAgICAgICAgbG9jYWxBZGp1c3Q7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCAhPSBudWxsID8gdGhpcyA6IE5hTjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5wdXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBpbnB1dCA9IG9mZnNldEZyb21TdHJpbmcobWF0Y2hTaG9ydE9mZnNldCwgaW5wdXQpO1xuICAgICAgICAgICAgICAgIGlmIChpbnB1dCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKE1hdGguYWJzKGlucHV0KSA8IDE2ICYmICFrZWVwTWludXRlcykge1xuICAgICAgICAgICAgICAgIGlucHV0ID0gaW5wdXQgKiA2MDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5faXNVVEMgJiYga2VlcExvY2FsVGltZSkge1xuICAgICAgICAgICAgICAgIGxvY2FsQWRqdXN0ID0gZ2V0RGF0ZU9mZnNldCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX29mZnNldCA9IGlucHV0O1xuICAgICAgICAgICAgdGhpcy5faXNVVEMgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGxvY2FsQWRqdXN0ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZChsb2NhbEFkanVzdCwgJ20nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvZmZzZXQgIT09IGlucHV0KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFrZWVwTG9jYWxUaW1lIHx8IHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkU3VidHJhY3QoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRHVyYXRpb24oaW5wdXQgLSBvZmZzZXQsICdtJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLl9jaGFuZ2VJblByb2dyZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3MgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQodGhpcywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3MgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzVVRDID8gb2Zmc2V0IDogZ2V0RGF0ZU9mZnNldCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldFpvbmUoaW5wdXQsIGtlZXBMb2NhbFRpbWUpIHtcbiAgICAgICAgaWYgKGlucHV0ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgaW5wdXQgPSAtaW5wdXQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KGlucHV0LCBrZWVwTG9jYWxUaW1lKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gLXRoaXMudXRjT2Zmc2V0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRPZmZzZXRUb1VUQyhrZWVwTG9jYWxUaW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnV0Y09mZnNldCgwLCBrZWVwTG9jYWxUaW1lKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRPZmZzZXRUb0xvY2FsKGtlZXBMb2NhbFRpbWUpIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzVVRDKSB7XG4gICAgICAgICAgICB0aGlzLnV0Y09mZnNldCgwLCBrZWVwTG9jYWxUaW1lKTtcbiAgICAgICAgICAgIHRoaXMuX2lzVVRDID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGlmIChrZWVwTG9jYWxUaW1lKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdWJ0cmFjdChnZXREYXRlT2Zmc2V0KHRoaXMpLCAnbScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldE9mZnNldFRvUGFyc2VkT2Zmc2V0KCkge1xuICAgICAgICBpZiAodGhpcy5fdHptICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KHRoaXMuX3R6bSwgZmFsc2UsIHRydWUpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLl9pID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdmFyIHRab25lID0gb2Zmc2V0RnJvbVN0cmluZyhtYXRjaE9mZnNldCwgdGhpcy5faSk7XG4gICAgICAgICAgICBpZiAodFpvbmUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KHRab25lKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQoMCwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFzQWxpZ25lZEhvdXJPZmZzZXQoaW5wdXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlucHV0ID0gaW5wdXQgPyBjcmVhdGVMb2NhbChpbnB1dCkudXRjT2Zmc2V0KCkgOiAwO1xuXG4gICAgICAgIHJldHVybiAodGhpcy51dGNPZmZzZXQoKSAtIGlucHV0KSAlIDYwID09PSAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRGF5bGlnaHRTYXZpbmdUaW1lKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQoKSA+IHRoaXMuY2xvbmUoKS5tb250aCgwKS51dGNPZmZzZXQoKSB8fFxuICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQoKSA+IHRoaXMuY2xvbmUoKS5tb250aCg1KS51dGNPZmZzZXQoKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRGF5bGlnaHRTYXZpbmdUaW1lU2hpZnRlZCgpIHtcbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZCh0aGlzLl9pc0RTVFNoaWZ0ZWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faXNEU1RTaGlmdGVkO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGMgPSB7fSxcbiAgICAgICAgICAgIG90aGVyO1xuXG4gICAgICAgIGNvcHlDb25maWcoYywgdGhpcyk7XG4gICAgICAgIGMgPSBwcmVwYXJlQ29uZmlnKGMpO1xuXG4gICAgICAgIGlmIChjLl9hKSB7XG4gICAgICAgICAgICBvdGhlciA9IGMuX2lzVVRDID8gY3JlYXRlVVRDKGMuX2EpIDogY3JlYXRlTG9jYWwoYy5fYSk7XG4gICAgICAgICAgICB0aGlzLl9pc0RTVFNoaWZ0ZWQgPVxuICAgICAgICAgICAgICAgIHRoaXMuaXNWYWxpZCgpICYmIGNvbXBhcmVBcnJheXMoYy5fYSwgb3RoZXIudG9BcnJheSgpKSA+IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9pc0RTVFNoaWZ0ZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9pc0RTVFNoaWZ0ZWQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNMb2NhbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gIXRoaXMuX2lzVVRDIDogZmFsc2U7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNVdGNPZmZzZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/IHRoaXMuX2lzVVRDIDogZmFsc2U7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNVdGMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/IHRoaXMuX2lzVVRDICYmIHRoaXMuX29mZnNldCA9PT0gMCA6IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIEFTUC5ORVQganNvbiBkYXRlIGZvcm1hdCByZWdleFxuICAgIHZhciBhc3BOZXRSZWdleCA9IC9eKC18XFwrKT8oPzooXFxkKilbLiBdKT8oXFxkKyk6KFxcZCspKD86OihcXGQrKShcXC5cXGQqKT8pPyQvLFxuICAgICAgICAvLyBmcm9tIGh0dHA6Ly9kb2NzLmNsb3N1cmUtbGlicmFyeS5nb29nbGVjb2RlLmNvbS9naXQvY2xvc3VyZV9nb29nX2RhdGVfZGF0ZS5qcy5zb3VyY2UuaHRtbFxuICAgICAgICAvLyBzb21ld2hhdCBtb3JlIGluIGxpbmUgd2l0aCA0LjQuMy4yIDIwMDQgc3BlYywgYnV0IGFsbG93cyBkZWNpbWFsIGFueXdoZXJlXG4gICAgICAgIC8vIGFuZCBmdXJ0aGVyIG1vZGlmaWVkIHRvIGFsbG93IGZvciBzdHJpbmdzIGNvbnRhaW5pbmcgYm90aCB3ZWVrIGFuZCBkYXlcbiAgICAgICAgaXNvUmVnZXggPVxuICAgICAgICAgICAgL14oLXxcXCspP1AoPzooWy0rXT9bMC05LC5dKilZKT8oPzooWy0rXT9bMC05LC5dKilNKT8oPzooWy0rXT9bMC05LC5dKilXKT8oPzooWy0rXT9bMC05LC5dKilEKT8oPzpUKD86KFstK10/WzAtOSwuXSopSCk/KD86KFstK10/WzAtOSwuXSopTSk/KD86KFstK10/WzAtOSwuXSopUyk/KT8kLztcblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUR1cmF0aW9uKGlucHV0LCBrZXkpIHtcbiAgICAgICAgdmFyIGR1cmF0aW9uID0gaW5wdXQsXG4gICAgICAgICAgICAvLyBtYXRjaGluZyBhZ2FpbnN0IHJlZ2V4cCBpcyBleHBlbnNpdmUsIGRvIGl0IG9uIGRlbWFuZFxuICAgICAgICAgICAgbWF0Y2ggPSBudWxsLFxuICAgICAgICAgICAgc2lnbixcbiAgICAgICAgICAgIHJldCxcbiAgICAgICAgICAgIGRpZmZSZXM7XG5cbiAgICAgICAgaWYgKGlzRHVyYXRpb24oaW5wdXQpKSB7XG4gICAgICAgICAgICBkdXJhdGlvbiA9IHtcbiAgICAgICAgICAgICAgICBtczogaW5wdXQuX21pbGxpc2Vjb25kcyxcbiAgICAgICAgICAgICAgICBkOiBpbnB1dC5fZGF5cyxcbiAgICAgICAgICAgICAgICBNOiBpbnB1dC5fbW9udGhzLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmIChpc051bWJlcihpbnB1dCkgfHwgIWlzTmFOKCtpbnB1dCkpIHtcbiAgICAgICAgICAgIGR1cmF0aW9uID0ge307XG4gICAgICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgZHVyYXRpb25ba2V5XSA9ICtpbnB1dDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZHVyYXRpb24ubWlsbGlzZWNvbmRzID0gK2lucHV0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKChtYXRjaCA9IGFzcE5ldFJlZ2V4LmV4ZWMoaW5wdXQpKSkge1xuICAgICAgICAgICAgc2lnbiA9IG1hdGNoWzFdID09PSAnLScgPyAtMSA6IDE7XG4gICAgICAgICAgICBkdXJhdGlvbiA9IHtcbiAgICAgICAgICAgICAgICB5OiAwLFxuICAgICAgICAgICAgICAgIGQ6IHRvSW50KG1hdGNoW0RBVEVdKSAqIHNpZ24sXG4gICAgICAgICAgICAgICAgaDogdG9JbnQobWF0Y2hbSE9VUl0pICogc2lnbixcbiAgICAgICAgICAgICAgICBtOiB0b0ludChtYXRjaFtNSU5VVEVdKSAqIHNpZ24sXG4gICAgICAgICAgICAgICAgczogdG9JbnQobWF0Y2hbU0VDT05EXSkgKiBzaWduLFxuICAgICAgICAgICAgICAgIG1zOiB0b0ludChhYnNSb3VuZChtYXRjaFtNSUxMSVNFQ09ORF0gKiAxMDAwKSkgKiBzaWduLCAvLyB0aGUgbWlsbGlzZWNvbmQgZGVjaW1hbCBwb2ludCBpcyBpbmNsdWRlZCBpbiB0aGUgbWF0Y2hcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoKG1hdGNoID0gaXNvUmVnZXguZXhlYyhpbnB1dCkpKSB7XG4gICAgICAgICAgICBzaWduID0gbWF0Y2hbMV0gPT09ICctJyA/IC0xIDogMTtcbiAgICAgICAgICAgIGR1cmF0aW9uID0ge1xuICAgICAgICAgICAgICAgIHk6IHBhcnNlSXNvKG1hdGNoWzJdLCBzaWduKSxcbiAgICAgICAgICAgICAgICBNOiBwYXJzZUlzbyhtYXRjaFszXSwgc2lnbiksXG4gICAgICAgICAgICAgICAgdzogcGFyc2VJc28obWF0Y2hbNF0sIHNpZ24pLFxuICAgICAgICAgICAgICAgIGQ6IHBhcnNlSXNvKG1hdGNoWzVdLCBzaWduKSxcbiAgICAgICAgICAgICAgICBoOiBwYXJzZUlzbyhtYXRjaFs2XSwgc2lnbiksXG4gICAgICAgICAgICAgICAgbTogcGFyc2VJc28obWF0Y2hbN10sIHNpZ24pLFxuICAgICAgICAgICAgICAgIHM6IHBhcnNlSXNvKG1hdGNoWzhdLCBzaWduKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoZHVyYXRpb24gPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gY2hlY2tzIGZvciBudWxsIG9yIHVuZGVmaW5lZFxuICAgICAgICAgICAgZHVyYXRpb24gPSB7fTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHR5cGVvZiBkdXJhdGlvbiA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAgICgnZnJvbScgaW4gZHVyYXRpb24gfHwgJ3RvJyBpbiBkdXJhdGlvbilcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBkaWZmUmVzID0gbW9tZW50c0RpZmZlcmVuY2UoXG4gICAgICAgICAgICAgICAgY3JlYXRlTG9jYWwoZHVyYXRpb24uZnJvbSksXG4gICAgICAgICAgICAgICAgY3JlYXRlTG9jYWwoZHVyYXRpb24udG8pXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBkdXJhdGlvbiA9IHt9O1xuICAgICAgICAgICAgZHVyYXRpb24ubXMgPSBkaWZmUmVzLm1pbGxpc2Vjb25kcztcbiAgICAgICAgICAgIGR1cmF0aW9uLk0gPSBkaWZmUmVzLm1vbnRocztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldCA9IG5ldyBEdXJhdGlvbihkdXJhdGlvbik7XG5cbiAgICAgICAgaWYgKGlzRHVyYXRpb24oaW5wdXQpICYmIGhhc093blByb3AoaW5wdXQsICdfbG9jYWxlJykpIHtcbiAgICAgICAgICAgIHJldC5fbG9jYWxlID0gaW5wdXQuX2xvY2FsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0R1cmF0aW9uKGlucHV0KSAmJiBoYXNPd25Qcm9wKGlucHV0LCAnX2lzVmFsaWQnKSkge1xuICAgICAgICAgICAgcmV0Ll9pc1ZhbGlkID0gaW5wdXQuX2lzVmFsaWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cblxuICAgIGNyZWF0ZUR1cmF0aW9uLmZuID0gRHVyYXRpb24ucHJvdG90eXBlO1xuICAgIGNyZWF0ZUR1cmF0aW9uLmludmFsaWQgPSBjcmVhdGVJbnZhbGlkJDE7XG5cbiAgICBmdW5jdGlvbiBwYXJzZUlzbyhpbnAsIHNpZ24pIHtcbiAgICAgICAgLy8gV2UnZCBub3JtYWxseSB1c2Ugfn5pbnAgZm9yIHRoaXMsIGJ1dCB1bmZvcnR1bmF0ZWx5IGl0IGFsc29cbiAgICAgICAgLy8gY29udmVydHMgZmxvYXRzIHRvIGludHMuXG4gICAgICAgIC8vIGlucCBtYXkgYmUgdW5kZWZpbmVkLCBzbyBjYXJlZnVsIGNhbGxpbmcgcmVwbGFjZSBvbiBpdC5cbiAgICAgICAgdmFyIHJlcyA9IGlucCAmJiBwYXJzZUZsb2F0KGlucC5yZXBsYWNlKCcsJywgJy4nKSk7XG4gICAgICAgIC8vIGFwcGx5IHNpZ24gd2hpbGUgd2UncmUgYXQgaXRcbiAgICAgICAgcmV0dXJuIChpc05hTihyZXMpID8gMCA6IHJlcykgKiBzaWduO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBvc2l0aXZlTW9tZW50c0RpZmZlcmVuY2UoYmFzZSwgb3RoZXIpIHtcbiAgICAgICAgdmFyIHJlcyA9IHt9O1xuXG4gICAgICAgIHJlcy5tb250aHMgPVxuICAgICAgICAgICAgb3RoZXIubW9udGgoKSAtIGJhc2UubW9udGgoKSArIChvdGhlci55ZWFyKCkgLSBiYXNlLnllYXIoKSkgKiAxMjtcbiAgICAgICAgaWYgKGJhc2UuY2xvbmUoKS5hZGQocmVzLm1vbnRocywgJ00nKS5pc0FmdGVyKG90aGVyKSkge1xuICAgICAgICAgICAgLS1yZXMubW9udGhzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzLm1pbGxpc2Vjb25kcyA9ICtvdGhlciAtICtiYXNlLmNsb25lKCkuYWRkKHJlcy5tb250aHMsICdNJyk7XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb21lbnRzRGlmZmVyZW5jZShiYXNlLCBvdGhlcikge1xuICAgICAgICB2YXIgcmVzO1xuICAgICAgICBpZiAoIShiYXNlLmlzVmFsaWQoKSAmJiBvdGhlci5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4geyBtaWxsaXNlY29uZHM6IDAsIG1vbnRoczogMCB9O1xuICAgICAgICB9XG5cbiAgICAgICAgb3RoZXIgPSBjbG9uZVdpdGhPZmZzZXQob3RoZXIsIGJhc2UpO1xuICAgICAgICBpZiAoYmFzZS5pc0JlZm9yZShvdGhlcikpIHtcbiAgICAgICAgICAgIHJlcyA9IHBvc2l0aXZlTW9tZW50c0RpZmZlcmVuY2UoYmFzZSwgb3RoZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzID0gcG9zaXRpdmVNb21lbnRzRGlmZmVyZW5jZShvdGhlciwgYmFzZSk7XG4gICAgICAgICAgICByZXMubWlsbGlzZWNvbmRzID0gLXJlcy5taWxsaXNlY29uZHM7XG4gICAgICAgICAgICByZXMubW9udGhzID0gLXJlcy5tb250aHM7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIC8vIFRPRE86IHJlbW92ZSAnbmFtZScgYXJnIGFmdGVyIGRlcHJlY2F0aW9uIGlzIHJlbW92ZWRcbiAgICBmdW5jdGlvbiBjcmVhdGVBZGRlcihkaXJlY3Rpb24sIG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWwsIHBlcmlvZCkge1xuICAgICAgICAgICAgdmFyIGR1ciwgdG1wO1xuICAgICAgICAgICAgLy9pbnZlcnQgdGhlIGFyZ3VtZW50cywgYnV0IGNvbXBsYWluIGFib3V0IGl0XG4gICAgICAgICAgICBpZiAocGVyaW9kICE9PSBudWxsICYmICFpc05hTigrcGVyaW9kKSkge1xuICAgICAgICAgICAgICAgIGRlcHJlY2F0ZVNpbXBsZShcbiAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgJ21vbWVudCgpLicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAnKHBlcmlvZCwgbnVtYmVyKSBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIG1vbWVudCgpLicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAnKG51bWJlciwgcGVyaW9kKS4gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvYWRkLWludmVydGVkLXBhcmFtLyBmb3IgbW9yZSBpbmZvLidcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRtcCA9IHZhbDtcbiAgICAgICAgICAgICAgICB2YWwgPSBwZXJpb2Q7XG4gICAgICAgICAgICAgICAgcGVyaW9kID0gdG1wO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkdXIgPSBjcmVhdGVEdXJhdGlvbih2YWwsIHBlcmlvZCk7XG4gICAgICAgICAgICBhZGRTdWJ0cmFjdCh0aGlzLCBkdXIsIGRpcmVjdGlvbik7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhZGRTdWJ0cmFjdChtb20sIGR1cmF0aW9uLCBpc0FkZGluZywgdXBkYXRlT2Zmc2V0KSB7XG4gICAgICAgIHZhciBtaWxsaXNlY29uZHMgPSBkdXJhdGlvbi5fbWlsbGlzZWNvbmRzLFxuICAgICAgICAgICAgZGF5cyA9IGFic1JvdW5kKGR1cmF0aW9uLl9kYXlzKSxcbiAgICAgICAgICAgIG1vbnRocyA9IGFic1JvdW5kKGR1cmF0aW9uLl9tb250aHMpO1xuXG4gICAgICAgIGlmICghbW9tLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgLy8gTm8gb3BcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHVwZGF0ZU9mZnNldCA9IHVwZGF0ZU9mZnNldCA9PSBudWxsID8gdHJ1ZSA6IHVwZGF0ZU9mZnNldDtcblxuICAgICAgICBpZiAobW9udGhzKSB7XG4gICAgICAgICAgICBzZXRNb250aChtb20sIGdldChtb20sICdNb250aCcpICsgbW9udGhzICogaXNBZGRpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXlzKSB7XG4gICAgICAgICAgICBzZXQkMShtb20sICdEYXRlJywgZ2V0KG1vbSwgJ0RhdGUnKSArIGRheXMgKiBpc0FkZGluZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1pbGxpc2Vjb25kcykge1xuICAgICAgICAgICAgbW9tLl9kLnNldFRpbWUobW9tLl9kLnZhbHVlT2YoKSArIG1pbGxpc2Vjb25kcyAqIGlzQWRkaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodXBkYXRlT2Zmc2V0KSB7XG4gICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQobW9tLCBkYXlzIHx8IG1vbnRocyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgYWRkID0gY3JlYXRlQWRkZXIoMSwgJ2FkZCcpLFxuICAgICAgICBzdWJ0cmFjdCA9IGNyZWF0ZUFkZGVyKC0xLCAnc3VidHJhY3QnKTtcblxuICAgIGZ1bmN0aW9uIGlzU3RyaW5nKGlucHV0KSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnIHx8IGlucHV0IGluc3RhbmNlb2YgU3RyaW5nO1xuICAgIH1cblxuICAgIC8vIHR5cGUgTW9tZW50SW5wdXQgPSBNb21lbnQgfCBEYXRlIHwgc3RyaW5nIHwgbnVtYmVyIHwgKG51bWJlciB8IHN0cmluZylbXSB8IE1vbWVudElucHV0T2JqZWN0IHwgdm9pZDsgLy8gbnVsbCB8IHVuZGVmaW5lZFxuICAgIGZ1bmN0aW9uIGlzTW9tZW50SW5wdXQoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGlzTW9tZW50KGlucHV0KSB8fFxuICAgICAgICAgICAgaXNEYXRlKGlucHV0KSB8fFxuICAgICAgICAgICAgaXNTdHJpbmcoaW5wdXQpIHx8XG4gICAgICAgICAgICBpc051bWJlcihpbnB1dCkgfHxcbiAgICAgICAgICAgIGlzTnVtYmVyT3JTdHJpbmdBcnJheShpbnB1dCkgfHxcbiAgICAgICAgICAgIGlzTW9tZW50SW5wdXRPYmplY3QoaW5wdXQpIHx8XG4gICAgICAgICAgICBpbnB1dCA9PT0gbnVsbCB8fFxuICAgICAgICAgICAgaW5wdXQgPT09IHVuZGVmaW5lZFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTW9tZW50SW5wdXRPYmplY3QoaW5wdXQpIHtcbiAgICAgICAgdmFyIG9iamVjdFRlc3QgPSBpc09iamVjdChpbnB1dCkgJiYgIWlzT2JqZWN0RW1wdHkoaW5wdXQpLFxuICAgICAgICAgICAgcHJvcGVydHlUZXN0ID0gZmFsc2UsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzID0gW1xuICAgICAgICAgICAgICAgICd5ZWFycycsXG4gICAgICAgICAgICAgICAgJ3llYXInLFxuICAgICAgICAgICAgICAgICd5JyxcbiAgICAgICAgICAgICAgICAnbW9udGhzJyxcbiAgICAgICAgICAgICAgICAnbW9udGgnLFxuICAgICAgICAgICAgICAgICdNJyxcbiAgICAgICAgICAgICAgICAnZGF5cycsXG4gICAgICAgICAgICAgICAgJ2RheScsXG4gICAgICAgICAgICAgICAgJ2QnLFxuICAgICAgICAgICAgICAgICdkYXRlcycsXG4gICAgICAgICAgICAgICAgJ2RhdGUnLFxuICAgICAgICAgICAgICAgICdEJyxcbiAgICAgICAgICAgICAgICAnaG91cnMnLFxuICAgICAgICAgICAgICAgICdob3VyJyxcbiAgICAgICAgICAgICAgICAnaCcsXG4gICAgICAgICAgICAgICAgJ21pbnV0ZXMnLFxuICAgICAgICAgICAgICAgICdtaW51dGUnLFxuICAgICAgICAgICAgICAgICdtJyxcbiAgICAgICAgICAgICAgICAnc2Vjb25kcycsXG4gICAgICAgICAgICAgICAgJ3NlY29uZCcsXG4gICAgICAgICAgICAgICAgJ3MnLFxuICAgICAgICAgICAgICAgICdtaWxsaXNlY29uZHMnLFxuICAgICAgICAgICAgICAgICdtaWxsaXNlY29uZCcsXG4gICAgICAgICAgICAgICAgJ21zJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgcHJvcGVydHksXG4gICAgICAgICAgICBwcm9wZXJ0eUxlbiA9IHByb3BlcnRpZXMubGVuZ3RoO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBwcm9wZXJ0eUxlbjsgaSArPSAxKSB7XG4gICAgICAgICAgICBwcm9wZXJ0eSA9IHByb3BlcnRpZXNbaV07XG4gICAgICAgICAgICBwcm9wZXJ0eVRlc3QgPSBwcm9wZXJ0eVRlc3QgfHwgaGFzT3duUHJvcChpbnB1dCwgcHJvcGVydHkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9iamVjdFRlc3QgJiYgcHJvcGVydHlUZXN0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTnVtYmVyT3JTdHJpbmdBcnJheShpbnB1dCkge1xuICAgICAgICB2YXIgYXJyYXlUZXN0ID0gaXNBcnJheShpbnB1dCksXG4gICAgICAgICAgICBkYXRhVHlwZVRlc3QgPSBmYWxzZTtcbiAgICAgICAgaWYgKGFycmF5VGVzdCkge1xuICAgICAgICAgICAgZGF0YVR5cGVUZXN0ID1cbiAgICAgICAgICAgICAgICBpbnB1dC5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFpc051bWJlcihpdGVtKSAmJiBpc1N0cmluZyhpbnB1dCk7XG4gICAgICAgICAgICAgICAgfSkubGVuZ3RoID09PSAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcnJheVRlc3QgJiYgZGF0YVR5cGVUZXN0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzQ2FsZW5kYXJTcGVjKGlucHV0KSB7XG4gICAgICAgIHZhciBvYmplY3RUZXN0ID0gaXNPYmplY3QoaW5wdXQpICYmICFpc09iamVjdEVtcHR5KGlucHV0KSxcbiAgICAgICAgICAgIHByb3BlcnR5VGVzdCA9IGZhbHNlLFxuICAgICAgICAgICAgcHJvcGVydGllcyA9IFtcbiAgICAgICAgICAgICAgICAnc2FtZURheScsXG4gICAgICAgICAgICAgICAgJ25leHREYXknLFxuICAgICAgICAgICAgICAgICdsYXN0RGF5JyxcbiAgICAgICAgICAgICAgICAnbmV4dFdlZWsnLFxuICAgICAgICAgICAgICAgICdsYXN0V2VlaycsXG4gICAgICAgICAgICAgICAgJ3NhbWVFbHNlJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgcHJvcGVydHk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgIHByb3BlcnR5ID0gcHJvcGVydGllc1tpXTtcbiAgICAgICAgICAgIHByb3BlcnR5VGVzdCA9IHByb3BlcnR5VGVzdCB8fCBoYXNPd25Qcm9wKGlucHV0LCBwcm9wZXJ0eSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb2JqZWN0VGVzdCAmJiBwcm9wZXJ0eVRlc3Q7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0Q2FsZW5kYXJGb3JtYXQobXlNb21lbnQsIG5vdykge1xuICAgICAgICB2YXIgZGlmZiA9IG15TW9tZW50LmRpZmYobm93LCAnZGF5cycsIHRydWUpO1xuICAgICAgICByZXR1cm4gZGlmZiA8IC02XG4gICAgICAgICAgICA/ICdzYW1lRWxzZSdcbiAgICAgICAgICAgIDogZGlmZiA8IC0xXG4gICAgICAgICAgICA/ICdsYXN0V2VlaydcbiAgICAgICAgICAgIDogZGlmZiA8IDBcbiAgICAgICAgICAgID8gJ2xhc3REYXknXG4gICAgICAgICAgICA6IGRpZmYgPCAxXG4gICAgICAgICAgICA/ICdzYW1lRGF5J1xuICAgICAgICAgICAgOiBkaWZmIDwgMlxuICAgICAgICAgICAgPyAnbmV4dERheSdcbiAgICAgICAgICAgIDogZGlmZiA8IDdcbiAgICAgICAgICAgID8gJ25leHRXZWVrJ1xuICAgICAgICAgICAgOiAnc2FtZUVsc2UnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNhbGVuZGFyJDEodGltZSwgZm9ybWF0cykge1xuICAgICAgICAvLyBTdXBwb3J0IGZvciBzaW5nbGUgcGFyYW1ldGVyLCBmb3JtYXRzIG9ubHkgb3ZlcmxvYWQgdG8gdGhlIGNhbGVuZGFyIGZ1bmN0aW9uXG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBpZiAoIWFyZ3VtZW50c1swXSkge1xuICAgICAgICAgICAgICAgIHRpbWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgZm9ybWF0cyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNNb21lbnRJbnB1dChhcmd1bWVudHNbMF0pKSB7XG4gICAgICAgICAgICAgICAgdGltZSA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgICAgICAgICBmb3JtYXRzID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpc0NhbGVuZGFyU3BlYyhhcmd1bWVudHNbMF0pKSB7XG4gICAgICAgICAgICAgICAgZm9ybWF0cyA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgICAgICAgICB0aW1lID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFdlIHdhbnQgdG8gY29tcGFyZSB0aGUgc3RhcnQgb2YgdG9kYXksIHZzIHRoaXMuXG4gICAgICAgIC8vIEdldHRpbmcgc3RhcnQtb2YtdG9kYXkgZGVwZW5kcyBvbiB3aGV0aGVyIHdlJ3JlIGxvY2FsL3V0Yy9vZmZzZXQgb3Igbm90LlxuICAgICAgICB2YXIgbm93ID0gdGltZSB8fCBjcmVhdGVMb2NhbCgpLFxuICAgICAgICAgICAgc29kID0gY2xvbmVXaXRoT2Zmc2V0KG5vdywgdGhpcykuc3RhcnRPZignZGF5JyksXG4gICAgICAgICAgICBmb3JtYXQgPSBob29rcy5jYWxlbmRhckZvcm1hdCh0aGlzLCBzb2QpIHx8ICdzYW1lRWxzZScsXG4gICAgICAgICAgICBvdXRwdXQgPVxuICAgICAgICAgICAgICAgIGZvcm1hdHMgJiZcbiAgICAgICAgICAgICAgICAoaXNGdW5jdGlvbihmb3JtYXRzW2Zvcm1hdF0pXG4gICAgICAgICAgICAgICAgICAgID8gZm9ybWF0c1tmb3JtYXRdLmNhbGwodGhpcywgbm93KVxuICAgICAgICAgICAgICAgICAgICA6IGZvcm1hdHNbZm9ybWF0XSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0KFxuICAgICAgICAgICAgb3V0cHV0IHx8IHRoaXMubG9jYWxlRGF0YSgpLmNhbGVuZGFyKGZvcm1hdCwgdGhpcywgY3JlYXRlTG9jYWwobm93KSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjbG9uZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBNb21lbnQodGhpcyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNBZnRlcihpbnB1dCwgdW5pdHMpIHtcbiAgICAgICAgdmFyIGxvY2FsSW5wdXQgPSBpc01vbWVudChpbnB1dCkgPyBpbnB1dCA6IGNyZWF0ZUxvY2FsKGlucHV0KTtcbiAgICAgICAgaWYgKCEodGhpcy5pc1ZhbGlkKCkgJiYgbG9jYWxJbnB1dC5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cykgfHwgJ21pbGxpc2Vjb25kJztcbiAgICAgICAgaWYgKHVuaXRzID09PSAnbWlsbGlzZWNvbmQnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCkgPiBsb2NhbElucHV0LnZhbHVlT2YoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbElucHV0LnZhbHVlT2YoKSA8IHRoaXMuY2xvbmUoKS5zdGFydE9mKHVuaXRzKS52YWx1ZU9mKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0JlZm9yZShpbnB1dCwgdW5pdHMpIHtcbiAgICAgICAgdmFyIGxvY2FsSW5wdXQgPSBpc01vbWVudChpbnB1dCkgPyBpbnB1dCA6IGNyZWF0ZUxvY2FsKGlucHV0KTtcbiAgICAgICAgaWYgKCEodGhpcy5pc1ZhbGlkKCkgJiYgbG9jYWxJbnB1dC5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cykgfHwgJ21pbGxpc2Vjb25kJztcbiAgICAgICAgaWYgKHVuaXRzID09PSAnbWlsbGlzZWNvbmQnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCkgPCBsb2NhbElucHV0LnZhbHVlT2YoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb25lKCkuZW5kT2YodW5pdHMpLnZhbHVlT2YoKSA8IGxvY2FsSW5wdXQudmFsdWVPZigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNCZXR3ZWVuKGZyb20sIHRvLCB1bml0cywgaW5jbHVzaXZpdHkpIHtcbiAgICAgICAgdmFyIGxvY2FsRnJvbSA9IGlzTW9tZW50KGZyb20pID8gZnJvbSA6IGNyZWF0ZUxvY2FsKGZyb20pLFxuICAgICAgICAgICAgbG9jYWxUbyA9IGlzTW9tZW50KHRvKSA/IHRvIDogY3JlYXRlTG9jYWwodG8pO1xuICAgICAgICBpZiAoISh0aGlzLmlzVmFsaWQoKSAmJiBsb2NhbEZyb20uaXNWYWxpZCgpICYmIGxvY2FsVG8uaXNWYWxpZCgpKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGluY2x1c2l2aXR5ID0gaW5jbHVzaXZpdHkgfHwgJygpJztcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChpbmNsdXNpdml0eVswXSA9PT0gJygnXG4gICAgICAgICAgICAgICAgPyB0aGlzLmlzQWZ0ZXIobG9jYWxGcm9tLCB1bml0cylcbiAgICAgICAgICAgICAgICA6ICF0aGlzLmlzQmVmb3JlKGxvY2FsRnJvbSwgdW5pdHMpKSAmJlxuICAgICAgICAgICAgKGluY2x1c2l2aXR5WzFdID09PSAnKSdcbiAgICAgICAgICAgICAgICA/IHRoaXMuaXNCZWZvcmUobG9jYWxUbywgdW5pdHMpXG4gICAgICAgICAgICAgICAgOiAhdGhpcy5pc0FmdGVyKGxvY2FsVG8sIHVuaXRzKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1NhbWUoaW5wdXQsIHVuaXRzKSB7XG4gICAgICAgIHZhciBsb2NhbElucHV0ID0gaXNNb21lbnQoaW5wdXQpID8gaW5wdXQgOiBjcmVhdGVMb2NhbChpbnB1dCksXG4gICAgICAgICAgICBpbnB1dE1zO1xuICAgICAgICBpZiAoISh0aGlzLmlzVmFsaWQoKSAmJiBsb2NhbElucHV0LmlzVmFsaWQoKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKSB8fCAnbWlsbGlzZWNvbmQnO1xuICAgICAgICBpZiAodW5pdHMgPT09ICdtaWxsaXNlY29uZCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKSA9PT0gbG9jYWxJbnB1dC52YWx1ZU9mKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbnB1dE1zID0gbG9jYWxJbnB1dC52YWx1ZU9mKCk7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIHRoaXMuY2xvbmUoKS5zdGFydE9mKHVuaXRzKS52YWx1ZU9mKCkgPD0gaW5wdXRNcyAmJlxuICAgICAgICAgICAgICAgIGlucHV0TXMgPD0gdGhpcy5jbG9uZSgpLmVuZE9mKHVuaXRzKS52YWx1ZU9mKClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1NhbWVPckFmdGVyKGlucHV0LCB1bml0cykge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1NhbWUoaW5wdXQsIHVuaXRzKSB8fCB0aGlzLmlzQWZ0ZXIoaW5wdXQsIHVuaXRzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1NhbWVPckJlZm9yZShpbnB1dCwgdW5pdHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNTYW1lKGlucHV0LCB1bml0cykgfHwgdGhpcy5pc0JlZm9yZShpbnB1dCwgdW5pdHMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRpZmYoaW5wdXQsIHVuaXRzLCBhc0Zsb2F0KSB7XG4gICAgICAgIHZhciB0aGF0LCB6b25lRGVsdGEsIG91dHB1dDtcblxuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhhdCA9IGNsb25lV2l0aE9mZnNldChpbnB1dCwgdGhpcyk7XG5cbiAgICAgICAgaWYgKCF0aGF0LmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuXG4gICAgICAgIHpvbmVEZWx0YSA9ICh0aGF0LnV0Y09mZnNldCgpIC0gdGhpcy51dGNPZmZzZXQoKSkgKiA2ZTQ7XG5cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG5cbiAgICAgICAgc3dpdGNoICh1bml0cykge1xuICAgICAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gbW9udGhEaWZmKHRoaXMsIHRoYXQpIC8gMTI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gbW9udGhEaWZmKHRoaXMsIHRoYXQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncXVhcnRlcic6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gbW9udGhEaWZmKHRoaXMsIHRoYXQpIC8gMztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gKHRoaXMgLSB0aGF0KSAvIDFlMztcbiAgICAgICAgICAgICAgICBicmVhazsgLy8gMTAwMFxuICAgICAgICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAodGhpcyAtIHRoYXQpIC8gNmU0O1xuICAgICAgICAgICAgICAgIGJyZWFrOyAvLyAxMDAwICogNjBcbiAgICAgICAgICAgIGNhc2UgJ2hvdXInOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9ICh0aGlzIC0gdGhhdCkgLyAzNmU1O1xuICAgICAgICAgICAgICAgIGJyZWFrOyAvLyAxMDAwICogNjAgKiA2MFxuICAgICAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAodGhpcyAtIHRoYXQgLSB6b25lRGVsdGEpIC8gODY0ZTU7XG4gICAgICAgICAgICAgICAgYnJlYWs7IC8vIDEwMDAgKiA2MCAqIDYwICogMjQsIG5lZ2F0ZSBkc3RcbiAgICAgICAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9ICh0aGlzIC0gdGhhdCAtIHpvbmVEZWx0YSkgLyA2MDQ4ZTU7XG4gICAgICAgICAgICAgICAgYnJlYWs7IC8vIDEwMDAgKiA2MCAqIDYwICogMjQgKiA3LCBuZWdhdGUgZHN0XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIG91dHB1dCA9IHRoaXMgLSB0aGF0O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFzRmxvYXQgPyBvdXRwdXQgOiBhYnNGbG9vcihvdXRwdXQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vbnRoRGlmZihhLCBiKSB7XG4gICAgICAgIGlmIChhLmRhdGUoKSA8IGIuZGF0ZSgpKSB7XG4gICAgICAgICAgICAvLyBlbmQtb2YtbW9udGggY2FsY3VsYXRpb25zIHdvcmsgY29ycmVjdCB3aGVuIHRoZSBzdGFydCBtb250aCBoYXMgbW9yZVxuICAgICAgICAgICAgLy8gZGF5cyB0aGFuIHRoZSBlbmQgbW9udGguXG4gICAgICAgICAgICByZXR1cm4gLW1vbnRoRGlmZihiLCBhKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBkaWZmZXJlbmNlIGluIG1vbnRoc1xuICAgICAgICB2YXIgd2hvbGVNb250aERpZmYgPSAoYi55ZWFyKCkgLSBhLnllYXIoKSkgKiAxMiArIChiLm1vbnRoKCkgLSBhLm1vbnRoKCkpLFxuICAgICAgICAgICAgLy8gYiBpcyBpbiAoYW5jaG9yIC0gMSBtb250aCwgYW5jaG9yICsgMSBtb250aClcbiAgICAgICAgICAgIGFuY2hvciA9IGEuY2xvbmUoKS5hZGQod2hvbGVNb250aERpZmYsICdtb250aHMnKSxcbiAgICAgICAgICAgIGFuY2hvcjIsXG4gICAgICAgICAgICBhZGp1c3Q7XG5cbiAgICAgICAgaWYgKGIgLSBhbmNob3IgPCAwKSB7XG4gICAgICAgICAgICBhbmNob3IyID0gYS5jbG9uZSgpLmFkZCh3aG9sZU1vbnRoRGlmZiAtIDEsICdtb250aHMnKTtcbiAgICAgICAgICAgIC8vIGxpbmVhciBhY3Jvc3MgdGhlIG1vbnRoXG4gICAgICAgICAgICBhZGp1c3QgPSAoYiAtIGFuY2hvcikgLyAoYW5jaG9yIC0gYW5jaG9yMik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhbmNob3IyID0gYS5jbG9uZSgpLmFkZCh3aG9sZU1vbnRoRGlmZiArIDEsICdtb250aHMnKTtcbiAgICAgICAgICAgIC8vIGxpbmVhciBhY3Jvc3MgdGhlIG1vbnRoXG4gICAgICAgICAgICBhZGp1c3QgPSAoYiAtIGFuY2hvcikgLyAoYW5jaG9yMiAtIGFuY2hvcik7XG4gICAgICAgIH1cblxuICAgICAgICAvL2NoZWNrIGZvciBuZWdhdGl2ZSB6ZXJvLCByZXR1cm4gemVybyBpZiBuZWdhdGl2ZSB6ZXJvXG4gICAgICAgIHJldHVybiAtKHdob2xlTW9udGhEaWZmICsgYWRqdXN0KSB8fCAwO1xuICAgIH1cblxuICAgIGhvb2tzLmRlZmF1bHRGb3JtYXQgPSAnWVlZWS1NTS1ERFRISDptbTpzc1onO1xuICAgIGhvb2tzLmRlZmF1bHRGb3JtYXRVdGMgPSAnWVlZWS1NTS1ERFRISDptbTpzc1taXSc7XG5cbiAgICBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5sb2NhbGUoJ2VuJykuZm9ybWF0KCdkZGQgTU1NIEREIFlZWVkgSEg6bW06c3MgW0dNVF1aWicpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvSVNPU3RyaW5nKGtlZXBPZmZzZXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHV0YyA9IGtlZXBPZmZzZXQgIT09IHRydWUsXG4gICAgICAgICAgICBtID0gdXRjID8gdGhpcy5jbG9uZSgpLnV0YygpIDogdGhpcztcbiAgICAgICAgaWYgKG0ueWVhcigpIDwgMCB8fCBtLnllYXIoKSA+IDk5OTkpIHtcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXRNb21lbnQoXG4gICAgICAgICAgICAgICAgbSxcbiAgICAgICAgICAgICAgICB1dGNcbiAgICAgICAgICAgICAgICAgICAgPyAnWVlZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTW1pdJ1xuICAgICAgICAgICAgICAgICAgICA6ICdZWVlZWVktTU0tRERbVF1ISDptbTpzcy5TU1NaJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNGdW5jdGlvbihEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZykpIHtcbiAgICAgICAgICAgIC8vIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbiBpcyB+NTB4IGZhc3RlciwgdXNlIGl0IHdoZW4gd2UgY2FuXG4gICAgICAgICAgICBpZiAodXRjKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9EYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHRoaXMudmFsdWVPZigpICsgdGhpcy51dGNPZmZzZXQoKSAqIDYwICogMTAwMClcbiAgICAgICAgICAgICAgICAgICAgLnRvSVNPU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoJ1onLCBmb3JtYXRNb21lbnQobSwgJ1onKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZvcm1hdE1vbWVudChcbiAgICAgICAgICAgIG0sXG4gICAgICAgICAgICB1dGMgPyAnWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1taXScgOiAnWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1onXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIGEgaHVtYW4gcmVhZGFibGUgcmVwcmVzZW50YXRpb24gb2YgYSBtb21lbnQgdGhhdCBjYW5cbiAgICAgKiBhbHNvIGJlIGV2YWx1YXRlZCB0byBnZXQgYSBuZXcgbW9tZW50IHdoaWNoIGlzIHRoZSBzYW1lXG4gICAgICpcbiAgICAgKiBAbGluayBodHRwczovL25vZGVqcy5vcmcvZGlzdC9sYXRlc3QvZG9jcy9hcGkvdXRpbC5odG1sI3V0aWxfY3VzdG9tX2luc3BlY3RfZnVuY3Rpb25fb25fb2JqZWN0c1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGluc3BlY3QoKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiAnbW9tZW50LmludmFsaWQoLyogJyArIHRoaXMuX2kgKyAnICovKSc7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGZ1bmMgPSAnbW9tZW50JyxcbiAgICAgICAgICAgIHpvbmUgPSAnJyxcbiAgICAgICAgICAgIHByZWZpeCxcbiAgICAgICAgICAgIHllYXIsXG4gICAgICAgICAgICBkYXRldGltZSxcbiAgICAgICAgICAgIHN1ZmZpeDtcbiAgICAgICAgaWYgKCF0aGlzLmlzTG9jYWwoKSkge1xuICAgICAgICAgICAgZnVuYyA9IHRoaXMudXRjT2Zmc2V0KCkgPT09IDAgPyAnbW9tZW50LnV0YycgOiAnbW9tZW50LnBhcnNlWm9uZSc7XG4gICAgICAgICAgICB6b25lID0gJ1onO1xuICAgICAgICB9XG4gICAgICAgIHByZWZpeCA9ICdbJyArIGZ1bmMgKyAnKFwiXSc7XG4gICAgICAgIHllYXIgPSAwIDw9IHRoaXMueWVhcigpICYmIHRoaXMueWVhcigpIDw9IDk5OTkgPyAnWVlZWScgOiAnWVlZWVlZJztcbiAgICAgICAgZGF0ZXRpbWUgPSAnLU1NLUREW1RdSEg6bW06c3MuU1NTJztcbiAgICAgICAgc3VmZml4ID0gem9uZSArICdbXCIpXSc7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0KHByZWZpeCArIHllYXIgKyBkYXRldGltZSArIHN1ZmZpeCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZm9ybWF0KGlucHV0U3RyaW5nKSB7XG4gICAgICAgIGlmICghaW5wdXRTdHJpbmcpIHtcbiAgICAgICAgICAgIGlucHV0U3RyaW5nID0gdGhpcy5pc1V0YygpXG4gICAgICAgICAgICAgICAgPyBob29rcy5kZWZhdWx0Rm9ybWF0VXRjXG4gICAgICAgICAgICAgICAgOiBob29rcy5kZWZhdWx0Rm9ybWF0O1xuICAgICAgICB9XG4gICAgICAgIHZhciBvdXRwdXQgPSBmb3JtYXRNb21lbnQodGhpcywgaW5wdXRTdHJpbmcpO1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkucG9zdGZvcm1hdChvdXRwdXQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZyb20odGltZSwgd2l0aG91dFN1ZmZpeCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmlzVmFsaWQoKSAmJlxuICAgICAgICAgICAgKChpc01vbWVudCh0aW1lKSAmJiB0aW1lLmlzVmFsaWQoKSkgfHwgY3JlYXRlTG9jYWwodGltZSkuaXNWYWxpZCgpKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVEdXJhdGlvbih7IHRvOiB0aGlzLCBmcm9tOiB0aW1lIH0pXG4gICAgICAgICAgICAgICAgLmxvY2FsZSh0aGlzLmxvY2FsZSgpKVxuICAgICAgICAgICAgICAgIC5odW1hbml6ZSghd2l0aG91dFN1ZmZpeCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZyb21Ob3cod2l0aG91dFN1ZmZpeCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mcm9tKGNyZWF0ZUxvY2FsKCksIHdpdGhvdXRTdWZmaXgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvKHRpbWUsIHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5pc1ZhbGlkKCkgJiZcbiAgICAgICAgICAgICgoaXNNb21lbnQodGltZSkgJiYgdGltZS5pc1ZhbGlkKCkpIHx8IGNyZWF0ZUxvY2FsKHRpbWUpLmlzVmFsaWQoKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlRHVyYXRpb24oeyBmcm9tOiB0aGlzLCB0bzogdGltZSB9KVxuICAgICAgICAgICAgICAgIC5sb2NhbGUodGhpcy5sb2NhbGUoKSlcbiAgICAgICAgICAgICAgICAuaHVtYW5pemUoIXdpdGhvdXRTdWZmaXgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b05vdyh3aXRob3V0U3VmZml4KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvKGNyZWF0ZUxvY2FsKCksIHdpdGhvdXRTdWZmaXgpO1xuICAgIH1cblxuICAgIC8vIElmIHBhc3NlZCBhIGxvY2FsZSBrZXksIGl0IHdpbGwgc2V0IHRoZSBsb2NhbGUgZm9yIHRoaXNcbiAgICAvLyBpbnN0YW5jZS4gIE90aGVyd2lzZSwgaXQgd2lsbCByZXR1cm4gdGhlIGxvY2FsZSBjb25maWd1cmF0aW9uXG4gICAgLy8gdmFyaWFibGVzIGZvciB0aGlzIGluc3RhbmNlLlxuICAgIGZ1bmN0aW9uIGxvY2FsZShrZXkpIHtcbiAgICAgICAgdmFyIG5ld0xvY2FsZURhdGE7XG5cbiAgICAgICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbG9jYWxlLl9hYmJyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3TG9jYWxlRGF0YSA9IGdldExvY2FsZShrZXkpO1xuICAgICAgICAgICAgaWYgKG5ld0xvY2FsZURhdGEgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvY2FsZSA9IG5ld0xvY2FsZURhdGE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBsYW5nID0gZGVwcmVjYXRlKFxuICAgICAgICAnbW9tZW50KCkubGFuZygpIGlzIGRlcHJlY2F0ZWQuIEluc3RlYWQsIHVzZSBtb21lbnQoKS5sb2NhbGVEYXRhKCkgdG8gZ2V0IHRoZSBsYW5ndWFnZSBjb25maWd1cmF0aW9uLiBVc2UgbW9tZW50KCkubG9jYWxlKCkgdG8gY2hhbmdlIGxhbmd1YWdlcy4nLFxuICAgICAgICBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZShrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZURhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb2NhbGU7XG4gICAgfVxuXG4gICAgdmFyIE1TX1BFUl9TRUNPTkQgPSAxMDAwLFxuICAgICAgICBNU19QRVJfTUlOVVRFID0gNjAgKiBNU19QRVJfU0VDT05ELFxuICAgICAgICBNU19QRVJfSE9VUiA9IDYwICogTVNfUEVSX01JTlVURSxcbiAgICAgICAgTVNfUEVSXzQwMF9ZRUFSUyA9ICgzNjUgKiA0MDAgKyA5NykgKiAyNCAqIE1TX1BFUl9IT1VSO1xuXG4gICAgLy8gYWN0dWFsIG1vZHVsbyAtIGhhbmRsZXMgbmVnYXRpdmUgbnVtYmVycyAoZm9yIGRhdGVzIGJlZm9yZSAxOTcwKTpcbiAgICBmdW5jdGlvbiBtb2QkMShkaXZpZGVuZCwgZGl2aXNvcikge1xuICAgICAgICByZXR1cm4gKChkaXZpZGVuZCAlIGRpdmlzb3IpICsgZGl2aXNvcikgJSBkaXZpc29yO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsU3RhcnRPZkRhdGUoeSwgbSwgZCkge1xuICAgICAgICAvLyB0aGUgZGF0ZSBjb25zdHJ1Y3RvciByZW1hcHMgeWVhcnMgMC05OSB0byAxOTAwLTE5OTlcbiAgICAgICAgaWYgKHkgPCAxMDAgJiYgeSA+PSAwKSB7XG4gICAgICAgICAgICAvLyBwcmVzZXJ2ZSBsZWFwIHllYXJzIHVzaW5nIGEgZnVsbCA0MDAgeWVhciBjeWNsZSwgdGhlbiByZXNldFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHkgKyA0MDAsIG0sIGQpIC0gTVNfUEVSXzQwMF9ZRUFSUztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZSh5LCBtLCBkKS52YWx1ZU9mKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1dGNTdGFydE9mRGF0ZSh5LCBtLCBkKSB7XG4gICAgICAgIC8vIERhdGUuVVRDIHJlbWFwcyB5ZWFycyAwLTk5IHRvIDE5MDAtMTk5OVxuICAgICAgICBpZiAoeSA8IDEwMCAmJiB5ID49IDApIHtcbiAgICAgICAgICAgIC8vIHByZXNlcnZlIGxlYXAgeWVhcnMgdXNpbmcgYSBmdWxsIDQwMCB5ZWFyIGN5Y2xlLCB0aGVuIHJlc2V0XG4gICAgICAgICAgICByZXR1cm4gRGF0ZS5VVEMoeSArIDQwMCwgbSwgZCkgLSBNU19QRVJfNDAwX1lFQVJTO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIERhdGUuVVRDKHksIG0sIGQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3RhcnRPZih1bml0cykge1xuICAgICAgICB2YXIgdGltZSwgc3RhcnRPZkRhdGU7XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICBpZiAodW5pdHMgPT09IHVuZGVmaW5lZCB8fCB1bml0cyA9PT0gJ21pbGxpc2Vjb25kJyB8fCAhdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhcnRPZkRhdGUgPSB0aGlzLl9pc1VUQyA/IHV0Y1N0YXJ0T2ZEYXRlIDogbG9jYWxTdGFydE9mRGF0ZTtcblxuICAgICAgICBzd2l0Y2ggKHVuaXRzKSB7XG4gICAgICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIDAsIDEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncXVhcnRlcic6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb250aCgpIC0gKHRoaXMubW9udGgoKSAlIDMpLFxuICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSwgMSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMueWVhcigpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vbnRoKCksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZSgpIC0gdGhpcy53ZWVrZGF5KClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaXNvV2Vlayc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb250aCgpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGUoKSAtICh0aGlzLmlzb1dlZWtkYXkoKSAtIDEpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSwgdGhpcy5kYXRlKCkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgICAgICAgICAgdGltZSA9IHRoaXMuX2QudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgIHRpbWUgLT0gbW9kJDEoXG4gICAgICAgICAgICAgICAgICAgIHRpbWUgKyAodGhpcy5faXNVVEMgPyAwIDogdGhpcy51dGNPZmZzZXQoKSAqIE1TX1BFUl9NSU5VVEUpLFxuICAgICAgICAgICAgICAgICAgICBNU19QRVJfSE9VUlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtaW51dGUnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lIC09IG1vZCQxKHRpbWUsIE1TX1BFUl9NSU5VVEUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc2Vjb25kJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gdGhpcy5fZC52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgdGltZSAtPSBtb2QkMSh0aW1lLCBNU19QRVJfU0VDT05EKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2Quc2V0VGltZSh0aW1lKTtcbiAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHRoaXMsIHRydWUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlbmRPZih1bml0cykge1xuICAgICAgICB2YXIgdGltZSwgc3RhcnRPZkRhdGU7XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICBpZiAodW5pdHMgPT09IHVuZGVmaW5lZCB8fCB1bml0cyA9PT0gJ21pbGxpc2Vjb25kJyB8fCAhdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhcnRPZkRhdGUgPSB0aGlzLl9pc1VUQyA/IHV0Y1N0YXJ0T2ZEYXRlIDogbG9jYWxTdGFydE9mRGF0ZTtcblxuICAgICAgICBzd2l0Y2ggKHVuaXRzKSB7XG4gICAgICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCkgKyAxLCAwLCAxKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdxdWFydGVyJzpcbiAgICAgICAgICAgICAgICB0aW1lID1cbiAgICAgICAgICAgICAgICAgICAgc3RhcnRPZkRhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW9udGgoKSAtICh0aGlzLm1vbnRoKCkgJSAzKSArIDMsXG4gICAgICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICAgICkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZSh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpICsgMSwgMSkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnd2Vlayc6XG4gICAgICAgICAgICAgICAgdGltZSA9XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0T2ZEYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy55ZWFyKCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vbnRoKCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGUoKSAtIHRoaXMud2Vla2RheSgpICsgN1xuICAgICAgICAgICAgICAgICAgICApIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2lzb1dlZWsnOlxuICAgICAgICAgICAgICAgIHRpbWUgPVxuICAgICAgICAgICAgICAgICAgICBzdGFydE9mRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMueWVhcigpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb250aCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlKCkgLSAodGhpcy5pc29XZWVrZGF5KCkgLSAxKSArIDdcbiAgICAgICAgICAgICAgICAgICAgKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdkYXknOlxuICAgICAgICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKHRoaXMueWVhcigpLCB0aGlzLm1vbnRoKCksIHRoaXMuZGF0ZSgpICsgMSkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgICAgICAgICAgdGltZSA9IHRoaXMuX2QudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgIHRpbWUgKz1cbiAgICAgICAgICAgICAgICAgICAgTVNfUEVSX0hPVVIgLVxuICAgICAgICAgICAgICAgICAgICBtb2QkMShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUgKyAodGhpcy5faXNVVEMgPyAwIDogdGhpcy51dGNPZmZzZXQoKSAqIE1TX1BFUl9NSU5VVEUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgTVNfUEVSX0hPVVJcbiAgICAgICAgICAgICAgICAgICAgKSAtXG4gICAgICAgICAgICAgICAgICAgIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtaW51dGUnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lICs9IE1TX1BFUl9NSU5VVEUgLSBtb2QkMSh0aW1lLCBNU19QRVJfTUlOVVRFKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzZWNvbmQnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lICs9IE1TX1BFUl9TRUNPTkQgLSBtb2QkMSh0aW1lLCBNU19QRVJfU0VDT05EKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9kLnNldFRpbWUodGltZSk7XG4gICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdmFsdWVPZigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2QudmFsdWVPZigpIC0gKHRoaXMuX29mZnNldCB8fCAwKSAqIDYwMDAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVuaXgoKSB7XG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKHRoaXMudmFsdWVPZigpIC8gMTAwMCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9EYXRlKCkge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUodGhpcy52YWx1ZU9mKCkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvQXJyYXkoKSB7XG4gICAgICAgIHZhciBtID0gdGhpcztcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG0ueWVhcigpLFxuICAgICAgICAgICAgbS5tb250aCgpLFxuICAgICAgICAgICAgbS5kYXRlKCksXG4gICAgICAgICAgICBtLmhvdXIoKSxcbiAgICAgICAgICAgIG0ubWludXRlKCksXG4gICAgICAgICAgICBtLnNlY29uZCgpLFxuICAgICAgICAgICAgbS5taWxsaXNlY29uZCgpLFxuICAgICAgICBdO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvT2JqZWN0KCkge1xuICAgICAgICB2YXIgbSA9IHRoaXM7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB5ZWFyczogbS55ZWFyKCksXG4gICAgICAgICAgICBtb250aHM6IG0ubW9udGgoKSxcbiAgICAgICAgICAgIGRhdGU6IG0uZGF0ZSgpLFxuICAgICAgICAgICAgaG91cnM6IG0uaG91cnMoKSxcbiAgICAgICAgICAgIG1pbnV0ZXM6IG0ubWludXRlcygpLFxuICAgICAgICAgICAgc2Vjb25kczogbS5zZWNvbmRzKCksXG4gICAgICAgICAgICBtaWxsaXNlY29uZHM6IG0ubWlsbGlzZWNvbmRzKCksXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9KU09OKCkge1xuICAgICAgICAvLyBuZXcgRGF0ZShOYU4pLnRvSlNPTigpID09PSBudWxsXG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/IHRoaXMudG9JU09TdHJpbmcoKSA6IG51bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNWYWxpZCQyKCkge1xuICAgICAgICByZXR1cm4gaXNWYWxpZCh0aGlzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzaW5nRmxhZ3MoKSB7XG4gICAgICAgIHJldHVybiBleHRlbmQoe30sIGdldFBhcnNpbmdGbGFncyh0aGlzKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW52YWxpZEF0KCkge1xuICAgICAgICByZXR1cm4gZ2V0UGFyc2luZ0ZsYWdzKHRoaXMpLm92ZXJmbG93O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0aW9uRGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlucHV0OiB0aGlzLl9pLFxuICAgICAgICAgICAgZm9ybWF0OiB0aGlzLl9mLFxuICAgICAgICAgICAgbG9jYWxlOiB0aGlzLl9sb2NhbGUsXG4gICAgICAgICAgICBpc1VUQzogdGhpcy5faXNVVEMsXG4gICAgICAgICAgICBzdHJpY3Q6IHRoaXMuX3N0cmljdCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBhZGRGb3JtYXRUb2tlbignTicsIDAsIDAsICdlcmFBYmJyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ05OJywgMCwgMCwgJ2VyYUFiYnInKTtcbiAgICBhZGRGb3JtYXRUb2tlbignTk5OJywgMCwgMCwgJ2VyYUFiYnInKTtcbiAgICBhZGRGb3JtYXRUb2tlbignTk5OTicsIDAsIDAsICdlcmFOYW1lJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ05OTk5OJywgMCwgMCwgJ2VyYU5hcnJvdycpO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ3knLCBbJ3knLCAxXSwgJ3lvJywgJ2VyYVllYXInKTtcbiAgICBhZGRGb3JtYXRUb2tlbigneScsIFsneXknLCAyXSwgMCwgJ2VyYVllYXInKTtcbiAgICBhZGRGb3JtYXRUb2tlbigneScsIFsneXl5JywgM10sIDAsICdlcmFZZWFyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ3knLCBbJ3l5eXknLCA0XSwgMCwgJ2VyYVllYXInKTtcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ04nLCBtYXRjaEVyYUFiYnIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ05OJywgbWF0Y2hFcmFBYmJyKTtcbiAgICBhZGRSZWdleFRva2VuKCdOTk4nLCBtYXRjaEVyYUFiYnIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ05OTk4nLCBtYXRjaEVyYU5hbWUpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ05OTk5OJywgbWF0Y2hFcmFOYXJyb3cpO1xuXG4gICAgYWRkUGFyc2VUb2tlbihcbiAgICAgICAgWydOJywgJ05OJywgJ05OTicsICdOTk5OJywgJ05OTk5OJ10sXG4gICAgICAgIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgICAgIHZhciBlcmEgPSBjb25maWcuX2xvY2FsZS5lcmFzUGFyc2UoaW5wdXQsIHRva2VuLCBjb25maWcuX3N0cmljdCk7XG4gICAgICAgICAgICBpZiAoZXJhKSB7XG4gICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuZXJhID0gZXJhO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5pbnZhbGlkRXJhID0gaW5wdXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgYWRkUmVnZXhUb2tlbigneScsIG1hdGNoVW5zaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ3l5JywgbWF0Y2hVbnNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbigneXl5JywgbWF0Y2hVbnNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbigneXl5eScsIG1hdGNoVW5zaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ3lvJywgbWF0Y2hFcmFZZWFyT3JkaW5hbCk7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsneScsICd5eScsICd5eXknLCAneXl5eSddLCBZRUFSKTtcbiAgICBhZGRQYXJzZVRva2VuKFsneW8nXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnLCB0b2tlbikge1xuICAgICAgICB2YXIgbWF0Y2g7XG4gICAgICAgIGlmIChjb25maWcuX2xvY2FsZS5fZXJhWWVhck9yZGluYWxSZWdleCkge1xuICAgICAgICAgICAgbWF0Y2ggPSBpbnB1dC5tYXRjaChjb25maWcuX2xvY2FsZS5fZXJhWWVhck9yZGluYWxSZWdleCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29uZmlnLl9sb2NhbGUuZXJhWWVhck9yZGluYWxQYXJzZSkge1xuICAgICAgICAgICAgYXJyYXlbWUVBUl0gPSBjb25maWcuX2xvY2FsZS5lcmFZZWFyT3JkaW5hbFBhcnNlKGlucHV0LCBtYXRjaCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhcnJheVtZRUFSXSA9IHBhcnNlSW50KGlucHV0LCAxMCk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZUVyYXMobSwgZm9ybWF0KSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5fZXJhcyB8fCBnZXRMb2NhbGUoJ2VuJykuX2VyYXM7XG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgc3dpdGNoICh0eXBlb2YgZXJhc1tpXS5zaW5jZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgICAgICAgICAgICAgIC8vIHRydW5jYXRlIHRpbWVcbiAgICAgICAgICAgICAgICAgICAgZGF0ZSA9IGhvb2tzKGVyYXNbaV0uc2luY2UpLnN0YXJ0T2YoJ2RheScpO1xuICAgICAgICAgICAgICAgICAgICBlcmFzW2ldLnNpbmNlID0gZGF0ZS52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzd2l0Y2ggKHR5cGVvZiBlcmFzW2ldLnVudGlsKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAndW5kZWZpbmVkJzpcbiAgICAgICAgICAgICAgICAgICAgZXJhc1tpXS51bnRpbCA9ICtJbmZpbml0eTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICAgICAgICAgICAgLy8gdHJ1bmNhdGUgdGltZVxuICAgICAgICAgICAgICAgICAgICBkYXRlID0gaG9va3MoZXJhc1tpXS51bnRpbCkuc3RhcnRPZignZGF5JykudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgICAgICBlcmFzW2ldLnVudGlsID0gZGF0ZS52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlcmFzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZUVyYXNQYXJzZShlcmFOYW1lLCBmb3JtYXQsIHN0cmljdCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5lcmFzKCksXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgYWJicixcbiAgICAgICAgICAgIG5hcnJvdztcbiAgICAgICAgZXJhTmFtZSA9IGVyYU5hbWUudG9VcHBlckNhc2UoKTtcblxuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIG5hbWUgPSBlcmFzW2ldLm5hbWUudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgIGFiYnIgPSBlcmFzW2ldLmFiYnIudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgIG5hcnJvdyA9IGVyYXNbaV0ubmFycm93LnRvVXBwZXJDYXNlKCk7XG5cbiAgICAgICAgICAgIGlmIChzdHJpY3QpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdOJzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnTk4nOlxuICAgICAgICAgICAgICAgICAgICBjYXNlICdOTk4nOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFiYnIgPT09IGVyYU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ05OTk4nOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09IGVyYU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ05OTk5OJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYXJyb3cgPT09IGVyYU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoW25hbWUsIGFiYnIsIG5hcnJvd10uaW5kZXhPZihlcmFOYW1lKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVFcmFzQ29udmVydFllYXIoZXJhLCB5ZWFyKSB7XG4gICAgICAgIHZhciBkaXIgPSBlcmEuc2luY2UgPD0gZXJhLnVudGlsID8gKzEgOiAtMTtcbiAgICAgICAgaWYgKHllYXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGhvb2tzKGVyYS5zaW5jZSkueWVhcigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGhvb2tzKGVyYS5zaW5jZSkueWVhcigpICsgKHllYXIgLSBlcmEub2Zmc2V0KSAqIGRpcjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEVyYU5hbWUoKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIHZhbCxcbiAgICAgICAgICAgIGVyYXMgPSB0aGlzLmxvY2FsZURhdGEoKS5lcmFzKCk7XG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgLy8gdHJ1bmNhdGUgdGltZVxuICAgICAgICAgICAgdmFsID0gdGhpcy5jbG9uZSgpLnN0YXJ0T2YoJ2RheScpLnZhbHVlT2YoKTtcblxuICAgICAgICAgICAgaWYgKGVyYXNbaV0uc2luY2UgPD0gdmFsICYmIHZhbCA8PSBlcmFzW2ldLnVudGlsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV0ubmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcmFzW2ldLnVudGlsIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS5zaW5jZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLm5hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0RXJhTmFycm93KCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICB2YWwsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5sb2NhbGVEYXRhKCkuZXJhcygpO1xuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIC8vIHRydW5jYXRlIHRpbWVcbiAgICAgICAgICAgIHZhbCA9IHRoaXMuY2xvbmUoKS5zdGFydE9mKCdkYXknKS52YWx1ZU9mKCk7XG5cbiAgICAgICAgICAgIGlmIChlcmFzW2ldLnNpbmNlIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS51bnRpbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLm5hcnJvdztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcmFzW2ldLnVudGlsIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS5zaW5jZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLm5hcnJvdztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRFcmFBYmJyKCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICB2YWwsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5sb2NhbGVEYXRhKCkuZXJhcygpO1xuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIC8vIHRydW5jYXRlIHRpbWVcbiAgICAgICAgICAgIHZhbCA9IHRoaXMuY2xvbmUoKS5zdGFydE9mKCdkYXknKS52YWx1ZU9mKCk7XG5cbiAgICAgICAgICAgIGlmIChlcmFzW2ldLnNpbmNlIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS51bnRpbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLmFiYnI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJhc1tpXS51bnRpbCA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0uc2luY2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXS5hYmJyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEVyYVllYXIoKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIGRpcixcbiAgICAgICAgICAgIHZhbCxcbiAgICAgICAgICAgIGVyYXMgPSB0aGlzLmxvY2FsZURhdGEoKS5lcmFzKCk7XG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgZGlyID0gZXJhc1tpXS5zaW5jZSA8PSBlcmFzW2ldLnVudGlsID8gKzEgOiAtMTtcblxuICAgICAgICAgICAgLy8gdHJ1bmNhdGUgdGltZVxuICAgICAgICAgICAgdmFsID0gdGhpcy5jbG9uZSgpLnN0YXJ0T2YoJ2RheScpLnZhbHVlT2YoKTtcblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIChlcmFzW2ldLnNpbmNlIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS51bnRpbCkgfHxcbiAgICAgICAgICAgICAgICAoZXJhc1tpXS51bnRpbCA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0uc2luY2UpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAodGhpcy55ZWFyKCkgLSBob29rcyhlcmFzW2ldLnNpbmNlKS55ZWFyKCkpICogZGlyICtcbiAgICAgICAgICAgICAgICAgICAgZXJhc1tpXS5vZmZzZXRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMueWVhcigpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVyYXNOYW1lUmVnZXgoaXNTdHJpY3QpIHtcbiAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfZXJhc05hbWVSZWdleCcpKSB7XG4gICAgICAgICAgICBjb21wdXRlRXJhc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzU3RyaWN0ID8gdGhpcy5fZXJhc05hbWVSZWdleCA6IHRoaXMuX2VyYXNSZWdleDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlcmFzQWJiclJlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX2VyYXNBYmJyUmVnZXgnKSkge1xuICAgICAgICAgICAgY29tcHV0ZUVyYXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc1N0cmljdCA/IHRoaXMuX2VyYXNBYmJyUmVnZXggOiB0aGlzLl9lcmFzUmVnZXg7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXJhc05hcnJvd1JlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX2VyYXNOYXJyb3dSZWdleCcpKSB7XG4gICAgICAgICAgICBjb21wdXRlRXJhc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzU3RyaWN0ID8gdGhpcy5fZXJhc05hcnJvd1JlZ2V4IDogdGhpcy5fZXJhc1JlZ2V4O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1hdGNoRXJhQWJicihpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUuZXJhc0FiYnJSZWdleChpc1N0cmljdCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWF0Y2hFcmFOYW1lKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5lcmFzTmFtZVJlZ2V4KGlzU3RyaWN0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXRjaEVyYU5hcnJvdyhpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUuZXJhc05hcnJvd1JlZ2V4KGlzU3RyaWN0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXRjaEVyYVllYXJPcmRpbmFsKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5fZXJhWWVhck9yZGluYWxSZWdleCB8fCBtYXRjaFVuc2lnbmVkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbXB1dGVFcmFzUGFyc2UoKSB7XG4gICAgICAgIHZhciBhYmJyUGllY2VzID0gW10sXG4gICAgICAgICAgICBuYW1lUGllY2VzID0gW10sXG4gICAgICAgICAgICBuYXJyb3dQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIG1peGVkUGllY2VzID0gW10sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIGVyYXMgPSB0aGlzLmVyYXMoKTtcblxuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIG5hbWVQaWVjZXMucHVzaChyZWdleEVzY2FwZShlcmFzW2ldLm5hbWUpKTtcbiAgICAgICAgICAgIGFiYnJQaWVjZXMucHVzaChyZWdleEVzY2FwZShlcmFzW2ldLmFiYnIpKTtcbiAgICAgICAgICAgIG5hcnJvd1BpZWNlcy5wdXNoKHJlZ2V4RXNjYXBlKGVyYXNbaV0ubmFycm93KSk7XG5cbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2gocmVnZXhFc2NhcGUoZXJhc1tpXS5uYW1lKSk7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKHJlZ2V4RXNjYXBlKGVyYXNbaV0uYWJicikpO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChyZWdleEVzY2FwZShlcmFzW2ldLm5hcnJvdykpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZXJhc1JlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgbWl4ZWRQaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgICAgICB0aGlzLl9lcmFzTmFtZVJlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgbmFtZVBpZWNlcy5qb2luKCd8JykgKyAnKScsICdpJyk7XG4gICAgICAgIHRoaXMuX2VyYXNBYmJyUmVnZXggPSBuZXcgUmVnRXhwKCdeKCcgKyBhYmJyUGllY2VzLmpvaW4oJ3wnKSArICcpJywgJ2knKTtcbiAgICAgICAgdGhpcy5fZXJhc05hcnJvd1JlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBuYXJyb3dQaWVjZXMuam9pbignfCcpICsgJyknLFxuICAgICAgICAgICAgJ2knXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydnZycsIDJdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLndlZWtZZWFyKCkgJSAxMDA7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ0dHJywgMl0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNvV2Vla1llYXIoKSAlIDEwMDtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4odG9rZW4sIGdldHRlcikge1xuICAgICAgICBhZGRGb3JtYXRUb2tlbigwLCBbdG9rZW4sIHRva2VuLmxlbmd0aF0sIDAsIGdldHRlcik7XG4gICAgfVxuXG4gICAgYWRkV2Vla1llYXJGb3JtYXRUb2tlbignZ2dnZycsICd3ZWVrWWVhcicpO1xuICAgIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4oJ2dnZ2dnJywgJ3dlZWtZZWFyJyk7XG4gICAgYWRkV2Vla1llYXJGb3JtYXRUb2tlbignR0dHRycsICdpc29XZWVrWWVhcicpO1xuICAgIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4oJ0dHR0dHJywgJ2lzb1dlZWtZZWFyJyk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ3dlZWtZZWFyJywgJ2dnJyk7XG4gICAgYWRkVW5pdEFsaWFzKCdpc29XZWVrWWVhcicsICdHRycpO1xuXG4gICAgLy8gUFJJT1JJVFlcblxuICAgIGFkZFVuaXRQcmlvcml0eSgnd2Vla1llYXInLCAxKTtcbiAgICBhZGRVbml0UHJpb3JpdHkoJ2lzb1dlZWtZZWFyJywgMSk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdHJywgbWF0Y2hTaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2cnLCBtYXRjaFNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbignR0cnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignZ2cnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignR0dHRycsIG1hdGNoMXRvNCwgbWF0Y2g0KTtcbiAgICBhZGRSZWdleFRva2VuKCdnZ2dnJywgbWF0Y2gxdG80LCBtYXRjaDQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0dHR0dHJywgbWF0Y2gxdG82LCBtYXRjaDYpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2dnZ2dnJywgbWF0Y2gxdG82LCBtYXRjaDYpO1xuXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oXG4gICAgICAgIFsnZ2dnZycsICdnZ2dnZycsICdHR0dHJywgJ0dHR0dHJ10sXG4gICAgICAgIGZ1bmN0aW9uIChpbnB1dCwgd2VlaywgY29uZmlnLCB0b2tlbikge1xuICAgICAgICAgICAgd2Vla1t0b2tlbi5zdWJzdHIoMCwgMildID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICB9XG4gICAgKTtcblxuICAgIGFkZFdlZWtQYXJzZVRva2VuKFsnZ2cnLCAnR0cnXSwgZnVuY3Rpb24gKGlucHV0LCB3ZWVrLCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgIHdlZWtbdG9rZW5dID0gaG9va3MucGFyc2VUd29EaWdpdFllYXIoaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gZ2V0U2V0V2Vla1llYXIoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGdldFNldFdlZWtZZWFySGVscGVyLmNhbGwoXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICB0aGlzLndlZWsoKSxcbiAgICAgICAgICAgIHRoaXMud2Vla2RheSgpLFxuICAgICAgICAgICAgdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG93LFxuICAgICAgICAgICAgdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG95XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0SVNPV2Vla1llYXIoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGdldFNldFdlZWtZZWFySGVscGVyLmNhbGwoXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICB0aGlzLmlzb1dlZWsoKSxcbiAgICAgICAgICAgIHRoaXMuaXNvV2Vla2RheSgpLFxuICAgICAgICAgICAgMSxcbiAgICAgICAgICAgIDRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRJU09XZWVrc0luWWVhcigpIHtcbiAgICAgICAgcmV0dXJuIHdlZWtzSW5ZZWFyKHRoaXMueWVhcigpLCAxLCA0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRJU09XZWVrc0luSVNPV2Vla1llYXIoKSB7XG4gICAgICAgIHJldHVybiB3ZWVrc0luWWVhcih0aGlzLmlzb1dlZWtZZWFyKCksIDEsIDQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFdlZWtzSW5ZZWFyKCkge1xuICAgICAgICB2YXIgd2Vla0luZm8gPSB0aGlzLmxvY2FsZURhdGEoKS5fd2VlaztcbiAgICAgICAgcmV0dXJuIHdlZWtzSW5ZZWFyKHRoaXMueWVhcigpLCB3ZWVrSW5mby5kb3csIHdlZWtJbmZvLmRveSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0V2Vla3NJbldlZWtZZWFyKCkge1xuICAgICAgICB2YXIgd2Vla0luZm8gPSB0aGlzLmxvY2FsZURhdGEoKS5fd2VlaztcbiAgICAgICAgcmV0dXJuIHdlZWtzSW5ZZWFyKHRoaXMud2Vla1llYXIoKSwgd2Vla0luZm8uZG93LCB3ZWVrSW5mby5kb3kpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldFdlZWtZZWFySGVscGVyKGlucHV0LCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSkge1xuICAgICAgICB2YXIgd2Vla3NUYXJnZXQ7XG4gICAgICAgIGlmIChpbnB1dCA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gd2Vla09mWWVhcih0aGlzLCBkb3csIGRveSkueWVhcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHdlZWtzVGFyZ2V0ID0gd2Vla3NJblllYXIoaW5wdXQsIGRvdywgZG95KTtcbiAgICAgICAgICAgIGlmICh3ZWVrID4gd2Vla3NUYXJnZXQpIHtcbiAgICAgICAgICAgICAgICB3ZWVrID0gd2Vla3NUYXJnZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc2V0V2Vla0FsbC5jYWxsKHRoaXMsIGlucHV0LCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRXZWVrQWxsKHdlZWtZZWFyLCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSkge1xuICAgICAgICB2YXIgZGF5T2ZZZWFyRGF0YSA9IGRheU9mWWVhckZyb21XZWVrcyh3ZWVrWWVhciwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3kpLFxuICAgICAgICAgICAgZGF0ZSA9IGNyZWF0ZVVUQ0RhdGUoZGF5T2ZZZWFyRGF0YS55ZWFyLCAwLCBkYXlPZlllYXJEYXRhLmRheU9mWWVhcik7XG5cbiAgICAgICAgdGhpcy55ZWFyKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSk7XG4gICAgICAgIHRoaXMubW9udGgoZGF0ZS5nZXRVVENNb250aCgpKTtcbiAgICAgICAgdGhpcy5kYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ1EnLCAwLCAnUW8nLCAncXVhcnRlcicpO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCdxdWFydGVyJywgJ1EnKTtcblxuICAgIC8vIFBSSU9SSVRZXG5cbiAgICBhZGRVbml0UHJpb3JpdHkoJ3F1YXJ0ZXInLCA3KTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ1EnLCBtYXRjaDEpO1xuICAgIGFkZFBhcnNlVG9rZW4oJ1EnLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W01PTlRIXSA9ICh0b0ludChpbnB1dCkgLSAxKSAqIDM7XG4gICAgfSk7XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRTZXRRdWFydGVyKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PSBudWxsXG4gICAgICAgICAgICA/IE1hdGguY2VpbCgodGhpcy5tb250aCgpICsgMSkgLyAzKVxuICAgICAgICAgICAgOiB0aGlzLm1vbnRoKChpbnB1dCAtIDEpICogMyArICh0aGlzLm1vbnRoKCkgJSAzKSk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ0QnLCBbJ0REJywgMl0sICdEbycsICdkYXRlJyk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ2RhdGUnLCAnRCcpO1xuXG4gICAgLy8gUFJJT1JJVFlcbiAgICBhZGRVbml0UHJpb3JpdHkoJ2RhdGUnLCA5KTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ0QnLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0REJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0RvJywgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgLy8gVE9ETzogUmVtb3ZlIFwib3JkaW5hbFBhcnNlXCIgZmFsbGJhY2sgaW4gbmV4dCBtYWpvciByZWxlYXNlLlxuICAgICAgICByZXR1cm4gaXNTdHJpY3RcbiAgICAgICAgICAgID8gbG9jYWxlLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlIHx8IGxvY2FsZS5fb3JkaW5hbFBhcnNlXG4gICAgICAgICAgICA6IGxvY2FsZS5fZGF5T2ZNb250aE9yZGluYWxQYXJzZUxlbmllbnQ7XG4gICAgfSk7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsnRCcsICdERCddLCBEQVRFKTtcbiAgICBhZGRQYXJzZVRva2VuKCdEbycsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbREFURV0gPSB0b0ludChpbnB1dC5tYXRjaChtYXRjaDF0bzIpWzBdKTtcbiAgICB9KTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIHZhciBnZXRTZXREYXlPZk1vbnRoID0gbWFrZUdldFNldCgnRGF0ZScsIHRydWUpO1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ0RERCcsIFsnRERERCcsIDNdLCAnREREbycsICdkYXlPZlllYXInKTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygnZGF5T2ZZZWFyJywgJ0RERCcpO1xuXG4gICAgLy8gUFJJT1JJVFlcbiAgICBhZGRVbml0UHJpb3JpdHkoJ2RheU9mWWVhcicsIDQpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignREREJywgbWF0Y2gxdG8zKTtcbiAgICBhZGRSZWdleFRva2VuKCdEREREJywgbWF0Y2gzKTtcbiAgICBhZGRQYXJzZVRva2VuKFsnREREJywgJ0REREQnXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZy5fZGF5T2ZZZWFyID0gdG9JbnQoaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gSEVMUEVSU1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gZ2V0U2V0RGF5T2ZZZWFyKGlucHV0KSB7XG4gICAgICAgIHZhciBkYXlPZlllYXIgPVxuICAgICAgICAgICAgTWF0aC5yb3VuZChcbiAgICAgICAgICAgICAgICAodGhpcy5jbG9uZSgpLnN0YXJ0T2YoJ2RheScpIC0gdGhpcy5jbG9uZSgpLnN0YXJ0T2YoJ3llYXInKSkgLyA4NjRlNVxuICAgICAgICAgICAgKSArIDE7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PSBudWxsID8gZGF5T2ZZZWFyIDogdGhpcy5hZGQoaW5wdXQgLSBkYXlPZlllYXIsICdkJyk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ20nLCBbJ21tJywgMl0sIDAsICdtaW51dGUnKTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygnbWludXRlJywgJ20nKTtcblxuICAgIC8vIFBSSU9SSVRZXG5cbiAgICBhZGRVbml0UHJpb3JpdHkoJ21pbnV0ZScsIDE0KTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ20nLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ21tJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFBhcnNlVG9rZW4oWydtJywgJ21tJ10sIE1JTlVURSk7XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICB2YXIgZ2V0U2V0TWludXRlID0gbWFrZUdldFNldCgnTWludXRlcycsIGZhbHNlKTtcblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdzJywgWydzcycsIDJdLCAwLCAnc2Vjb25kJyk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ3NlY29uZCcsICdzJyk7XG5cbiAgICAvLyBQUklPUklUWVxuXG4gICAgYWRkVW5pdFByaW9yaXR5KCdzZWNvbmQnLCAxNSk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdzJywgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdzcycsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRQYXJzZVRva2VuKFsncycsICdzcyddLCBTRUNPTkQpO1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgdmFyIGdldFNldFNlY29uZCA9IG1ha2VHZXRTZXQoJ1NlY29uZHMnLCBmYWxzZSk7XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignUycsIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIH5+KHRoaXMubWlsbGlzZWNvbmQoKSAvIDEwMCk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTJywgMl0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIH5+KHRoaXMubWlsbGlzZWNvbmQoKSAvIDEwKTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTJywgM10sIDAsICdtaWxsaXNlY29uZCcpO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTUycsIDRdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kKCkgKiAxMDtcbiAgICB9KTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1NTJywgNV0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSAqIDEwMDtcbiAgICB9KTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1NTUycsIDZdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kKCkgKiAxMDAwO1xuICAgIH0pO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTU1NTUycsIDddLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kKCkgKiAxMDAwMDtcbiAgICB9KTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1NTU1NTJywgOF0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSAqIDEwMDAwMDtcbiAgICB9KTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1NTU1NTUycsIDldLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kKCkgKiAxMDAwMDAwO1xuICAgIH0pO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCdtaWxsaXNlY29uZCcsICdtcycpO1xuXG4gICAgLy8gUFJJT1JJVFlcblxuICAgIGFkZFVuaXRQcmlvcml0eSgnbWlsbGlzZWNvbmQnLCAxNik7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdTJywgbWF0Y2gxdG8zLCBtYXRjaDEpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1NTJywgbWF0Y2gxdG8zLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1NTUycsIG1hdGNoMXRvMywgbWF0Y2gzKTtcblxuICAgIHZhciB0b2tlbiwgZ2V0U2V0TWlsbGlzZWNvbmQ7XG4gICAgZm9yICh0b2tlbiA9ICdTU1NTJzsgdG9rZW4ubGVuZ3RoIDw9IDk7IHRva2VuICs9ICdTJykge1xuICAgICAgICBhZGRSZWdleFRva2VuKHRva2VuLCBtYXRjaFVuc2lnbmVkKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZU1zKGlucHV0LCBhcnJheSkge1xuICAgICAgICBhcnJheVtNSUxMSVNFQ09ORF0gPSB0b0ludCgoJzAuJyArIGlucHV0KSAqIDEwMDApO1xuICAgIH1cblxuICAgIGZvciAodG9rZW4gPSAnUyc7IHRva2VuLmxlbmd0aCA8PSA5OyB0b2tlbiArPSAnUycpIHtcbiAgICAgICAgYWRkUGFyc2VUb2tlbih0b2tlbiwgcGFyc2VNcyk7XG4gICAgfVxuXG4gICAgZ2V0U2V0TWlsbGlzZWNvbmQgPSBtYWtlR2V0U2V0KCdNaWxsaXNlY29uZHMnLCBmYWxzZSk7XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbigneicsIDAsIDAsICd6b25lQWJicicpO1xuICAgIGFkZEZvcm1hdFRva2VuKCd6eicsIDAsIDAsICd6b25lTmFtZScpO1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gZ2V0Wm9uZUFiYnIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1VUQyA/ICdVVEMnIDogJyc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0Wm9uZU5hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1VUQyA/ICdDb29yZGluYXRlZCBVbml2ZXJzYWwgVGltZScgOiAnJztcbiAgICB9XG5cbiAgICB2YXIgcHJvdG8gPSBNb21lbnQucHJvdG90eXBlO1xuXG4gICAgcHJvdG8uYWRkID0gYWRkO1xuICAgIHByb3RvLmNhbGVuZGFyID0gY2FsZW5kYXIkMTtcbiAgICBwcm90by5jbG9uZSA9IGNsb25lO1xuICAgIHByb3RvLmRpZmYgPSBkaWZmO1xuICAgIHByb3RvLmVuZE9mID0gZW5kT2Y7XG4gICAgcHJvdG8uZm9ybWF0ID0gZm9ybWF0O1xuICAgIHByb3RvLmZyb20gPSBmcm9tO1xuICAgIHByb3RvLmZyb21Ob3cgPSBmcm9tTm93O1xuICAgIHByb3RvLnRvID0gdG87XG4gICAgcHJvdG8udG9Ob3cgPSB0b05vdztcbiAgICBwcm90by5nZXQgPSBzdHJpbmdHZXQ7XG4gICAgcHJvdG8uaW52YWxpZEF0ID0gaW52YWxpZEF0O1xuICAgIHByb3RvLmlzQWZ0ZXIgPSBpc0FmdGVyO1xuICAgIHByb3RvLmlzQmVmb3JlID0gaXNCZWZvcmU7XG4gICAgcHJvdG8uaXNCZXR3ZWVuID0gaXNCZXR3ZWVuO1xuICAgIHByb3RvLmlzU2FtZSA9IGlzU2FtZTtcbiAgICBwcm90by5pc1NhbWVPckFmdGVyID0gaXNTYW1lT3JBZnRlcjtcbiAgICBwcm90by5pc1NhbWVPckJlZm9yZSA9IGlzU2FtZU9yQmVmb3JlO1xuICAgIHByb3RvLmlzVmFsaWQgPSBpc1ZhbGlkJDI7XG4gICAgcHJvdG8ubGFuZyA9IGxhbmc7XG4gICAgcHJvdG8ubG9jYWxlID0gbG9jYWxlO1xuICAgIHByb3RvLmxvY2FsZURhdGEgPSBsb2NhbGVEYXRhO1xuICAgIHByb3RvLm1heCA9IHByb3RvdHlwZU1heDtcbiAgICBwcm90by5taW4gPSBwcm90b3R5cGVNaW47XG4gICAgcHJvdG8ucGFyc2luZ0ZsYWdzID0gcGFyc2luZ0ZsYWdzO1xuICAgIHByb3RvLnNldCA9IHN0cmluZ1NldDtcbiAgICBwcm90by5zdGFydE9mID0gc3RhcnRPZjtcbiAgICBwcm90by5zdWJ0cmFjdCA9IHN1YnRyYWN0O1xuICAgIHByb3RvLnRvQXJyYXkgPSB0b0FycmF5O1xuICAgIHByb3RvLnRvT2JqZWN0ID0gdG9PYmplY3Q7XG4gICAgcHJvdG8udG9EYXRlID0gdG9EYXRlO1xuICAgIHByb3RvLnRvSVNPU3RyaW5nID0gdG9JU09TdHJpbmc7XG4gICAgcHJvdG8uaW5zcGVjdCA9IGluc3BlY3Q7XG4gICAgaWYgKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC5mb3IgIT0gbnVsbCkge1xuICAgICAgICBwcm90b1tTeW1ib2wuZm9yKCdub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbScpXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAnTW9tZW50PCcgKyB0aGlzLmZvcm1hdCgpICsgJz4nO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBwcm90by50b0pTT04gPSB0b0pTT047XG4gICAgcHJvdG8udG9TdHJpbmcgPSB0b1N0cmluZztcbiAgICBwcm90by51bml4ID0gdW5peDtcbiAgICBwcm90by52YWx1ZU9mID0gdmFsdWVPZjtcbiAgICBwcm90by5jcmVhdGlvbkRhdGEgPSBjcmVhdGlvbkRhdGE7XG4gICAgcHJvdG8uZXJhTmFtZSA9IGdldEVyYU5hbWU7XG4gICAgcHJvdG8uZXJhTmFycm93ID0gZ2V0RXJhTmFycm93O1xuICAgIHByb3RvLmVyYUFiYnIgPSBnZXRFcmFBYmJyO1xuICAgIHByb3RvLmVyYVllYXIgPSBnZXRFcmFZZWFyO1xuICAgIHByb3RvLnllYXIgPSBnZXRTZXRZZWFyO1xuICAgIHByb3RvLmlzTGVhcFllYXIgPSBnZXRJc0xlYXBZZWFyO1xuICAgIHByb3RvLndlZWtZZWFyID0gZ2V0U2V0V2Vla1llYXI7XG4gICAgcHJvdG8uaXNvV2Vla1llYXIgPSBnZXRTZXRJU09XZWVrWWVhcjtcbiAgICBwcm90by5xdWFydGVyID0gcHJvdG8ucXVhcnRlcnMgPSBnZXRTZXRRdWFydGVyO1xuICAgIHByb3RvLm1vbnRoID0gZ2V0U2V0TW9udGg7XG4gICAgcHJvdG8uZGF5c0luTW9udGggPSBnZXREYXlzSW5Nb250aDtcbiAgICBwcm90by53ZWVrID0gcHJvdG8ud2Vla3MgPSBnZXRTZXRXZWVrO1xuICAgIHByb3RvLmlzb1dlZWsgPSBwcm90by5pc29XZWVrcyA9IGdldFNldElTT1dlZWs7XG4gICAgcHJvdG8ud2Vla3NJblllYXIgPSBnZXRXZWVrc0luWWVhcjtcbiAgICBwcm90by53ZWVrc0luV2Vla1llYXIgPSBnZXRXZWVrc0luV2Vla1llYXI7XG4gICAgcHJvdG8uaXNvV2Vla3NJblllYXIgPSBnZXRJU09XZWVrc0luWWVhcjtcbiAgICBwcm90by5pc29XZWVrc0luSVNPV2Vla1llYXIgPSBnZXRJU09XZWVrc0luSVNPV2Vla1llYXI7XG4gICAgcHJvdG8uZGF0ZSA9IGdldFNldERheU9mTW9udGg7XG4gICAgcHJvdG8uZGF5ID0gcHJvdG8uZGF5cyA9IGdldFNldERheU9mV2VlaztcbiAgICBwcm90by53ZWVrZGF5ID0gZ2V0U2V0TG9jYWxlRGF5T2ZXZWVrO1xuICAgIHByb3RvLmlzb1dlZWtkYXkgPSBnZXRTZXRJU09EYXlPZldlZWs7XG4gICAgcHJvdG8uZGF5T2ZZZWFyID0gZ2V0U2V0RGF5T2ZZZWFyO1xuICAgIHByb3RvLmhvdXIgPSBwcm90by5ob3VycyA9IGdldFNldEhvdXI7XG4gICAgcHJvdG8ubWludXRlID0gcHJvdG8ubWludXRlcyA9IGdldFNldE1pbnV0ZTtcbiAgICBwcm90by5zZWNvbmQgPSBwcm90by5zZWNvbmRzID0gZ2V0U2V0U2Vjb25kO1xuICAgIHByb3RvLm1pbGxpc2Vjb25kID0gcHJvdG8ubWlsbGlzZWNvbmRzID0gZ2V0U2V0TWlsbGlzZWNvbmQ7XG4gICAgcHJvdG8udXRjT2Zmc2V0ID0gZ2V0U2V0T2Zmc2V0O1xuICAgIHByb3RvLnV0YyA9IHNldE9mZnNldFRvVVRDO1xuICAgIHByb3RvLmxvY2FsID0gc2V0T2Zmc2V0VG9Mb2NhbDtcbiAgICBwcm90by5wYXJzZVpvbmUgPSBzZXRPZmZzZXRUb1BhcnNlZE9mZnNldDtcbiAgICBwcm90by5oYXNBbGlnbmVkSG91ck9mZnNldCA9IGhhc0FsaWduZWRIb3VyT2Zmc2V0O1xuICAgIHByb3RvLmlzRFNUID0gaXNEYXlsaWdodFNhdmluZ1RpbWU7XG4gICAgcHJvdG8uaXNMb2NhbCA9IGlzTG9jYWw7XG4gICAgcHJvdG8uaXNVdGNPZmZzZXQgPSBpc1V0Y09mZnNldDtcbiAgICBwcm90by5pc1V0YyA9IGlzVXRjO1xuICAgIHByb3RvLmlzVVRDID0gaXNVdGM7XG4gICAgcHJvdG8uem9uZUFiYnIgPSBnZXRab25lQWJicjtcbiAgICBwcm90by56b25lTmFtZSA9IGdldFpvbmVOYW1lO1xuICAgIHByb3RvLmRhdGVzID0gZGVwcmVjYXRlKFxuICAgICAgICAnZGF0ZXMgYWNjZXNzb3IgaXMgZGVwcmVjYXRlZC4gVXNlIGRhdGUgaW5zdGVhZC4nLFxuICAgICAgICBnZXRTZXREYXlPZk1vbnRoXG4gICAgKTtcbiAgICBwcm90by5tb250aHMgPSBkZXByZWNhdGUoXG4gICAgICAgICdtb250aHMgYWNjZXNzb3IgaXMgZGVwcmVjYXRlZC4gVXNlIG1vbnRoIGluc3RlYWQnLFxuICAgICAgICBnZXRTZXRNb250aFxuICAgICk7XG4gICAgcHJvdG8ueWVhcnMgPSBkZXByZWNhdGUoXG4gICAgICAgICd5ZWFycyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgeWVhciBpbnN0ZWFkJyxcbiAgICAgICAgZ2V0U2V0WWVhclxuICAgICk7XG4gICAgcHJvdG8uem9uZSA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ21vbWVudCgpLnpvbmUgaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudCgpLnV0Y09mZnNldCBpbnN0ZWFkLiBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL3pvbmUvJyxcbiAgICAgICAgZ2V0U2V0Wm9uZVxuICAgICk7XG4gICAgcHJvdG8uaXNEU1RTaGlmdGVkID0gZGVwcmVjYXRlKFxuICAgICAgICAnaXNEU1RTaGlmdGVkIGlzIGRlcHJlY2F0ZWQuIFNlZSBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2RzdC1zaGlmdGVkLyBmb3IgbW9yZSBpbmZvcm1hdGlvbicsXG4gICAgICAgIGlzRGF5bGlnaHRTYXZpbmdUaW1lU2hpZnRlZFxuICAgICk7XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVVbml4KGlucHV0KSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVMb2NhbChpbnB1dCAqIDEwMDApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUluWm9uZSgpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsLmFwcGx5KG51bGwsIGFyZ3VtZW50cykucGFyc2Vab25lKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJlUGFyc2VQb3N0Rm9ybWF0KHN0cmluZykge1xuICAgICAgICByZXR1cm4gc3RyaW5nO1xuICAgIH1cblxuICAgIHZhciBwcm90byQxID0gTG9jYWxlLnByb3RvdHlwZTtcblxuICAgIHByb3RvJDEuY2FsZW5kYXIgPSBjYWxlbmRhcjtcbiAgICBwcm90byQxLmxvbmdEYXRlRm9ybWF0ID0gbG9uZ0RhdGVGb3JtYXQ7XG4gICAgcHJvdG8kMS5pbnZhbGlkRGF0ZSA9IGludmFsaWREYXRlO1xuICAgIHByb3RvJDEub3JkaW5hbCA9IG9yZGluYWw7XG4gICAgcHJvdG8kMS5wcmVwYXJzZSA9IHByZVBhcnNlUG9zdEZvcm1hdDtcbiAgICBwcm90byQxLnBvc3Rmb3JtYXQgPSBwcmVQYXJzZVBvc3RGb3JtYXQ7XG4gICAgcHJvdG8kMS5yZWxhdGl2ZVRpbWUgPSByZWxhdGl2ZVRpbWU7XG4gICAgcHJvdG8kMS5wYXN0RnV0dXJlID0gcGFzdEZ1dHVyZTtcbiAgICBwcm90byQxLnNldCA9IHNldDtcbiAgICBwcm90byQxLmVyYXMgPSBsb2NhbGVFcmFzO1xuICAgIHByb3RvJDEuZXJhc1BhcnNlID0gbG9jYWxlRXJhc1BhcnNlO1xuICAgIHByb3RvJDEuZXJhc0NvbnZlcnRZZWFyID0gbG9jYWxlRXJhc0NvbnZlcnRZZWFyO1xuICAgIHByb3RvJDEuZXJhc0FiYnJSZWdleCA9IGVyYXNBYmJyUmVnZXg7XG4gICAgcHJvdG8kMS5lcmFzTmFtZVJlZ2V4ID0gZXJhc05hbWVSZWdleDtcbiAgICBwcm90byQxLmVyYXNOYXJyb3dSZWdleCA9IGVyYXNOYXJyb3dSZWdleDtcblxuICAgIHByb3RvJDEubW9udGhzID0gbG9jYWxlTW9udGhzO1xuICAgIHByb3RvJDEubW9udGhzU2hvcnQgPSBsb2NhbGVNb250aHNTaG9ydDtcbiAgICBwcm90byQxLm1vbnRoc1BhcnNlID0gbG9jYWxlTW9udGhzUGFyc2U7XG4gICAgcHJvdG8kMS5tb250aHNSZWdleCA9IG1vbnRoc1JlZ2V4O1xuICAgIHByb3RvJDEubW9udGhzU2hvcnRSZWdleCA9IG1vbnRoc1Nob3J0UmVnZXg7XG4gICAgcHJvdG8kMS53ZWVrID0gbG9jYWxlV2VlaztcbiAgICBwcm90byQxLmZpcnN0RGF5T2ZZZWFyID0gbG9jYWxlRmlyc3REYXlPZlllYXI7XG4gICAgcHJvdG8kMS5maXJzdERheU9mV2VlayA9IGxvY2FsZUZpcnN0RGF5T2ZXZWVrO1xuXG4gICAgcHJvdG8kMS53ZWVrZGF5cyA9IGxvY2FsZVdlZWtkYXlzO1xuICAgIHByb3RvJDEud2Vla2RheXNNaW4gPSBsb2NhbGVXZWVrZGF5c01pbjtcbiAgICBwcm90byQxLndlZWtkYXlzU2hvcnQgPSBsb2NhbGVXZWVrZGF5c1Nob3J0O1xuICAgIHByb3RvJDEud2Vla2RheXNQYXJzZSA9IGxvY2FsZVdlZWtkYXlzUGFyc2U7XG5cbiAgICBwcm90byQxLndlZWtkYXlzUmVnZXggPSB3ZWVrZGF5c1JlZ2V4O1xuICAgIHByb3RvJDEud2Vla2RheXNTaG9ydFJlZ2V4ID0gd2Vla2RheXNTaG9ydFJlZ2V4O1xuICAgIHByb3RvJDEud2Vla2RheXNNaW5SZWdleCA9IHdlZWtkYXlzTWluUmVnZXg7XG5cbiAgICBwcm90byQxLmlzUE0gPSBsb2NhbGVJc1BNO1xuICAgIHByb3RvJDEubWVyaWRpZW0gPSBsb2NhbGVNZXJpZGllbTtcblxuICAgIGZ1bmN0aW9uIGdldCQxKGZvcm1hdCwgaW5kZXgsIGZpZWxkLCBzZXR0ZXIpIHtcbiAgICAgICAgdmFyIGxvY2FsZSA9IGdldExvY2FsZSgpLFxuICAgICAgICAgICAgdXRjID0gY3JlYXRlVVRDKCkuc2V0KHNldHRlciwgaW5kZXgpO1xuICAgICAgICByZXR1cm4gbG9jYWxlW2ZpZWxkXSh1dGMsIGZvcm1hdCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdE1vbnRoc0ltcGwoZm9ybWF0LCBpbmRleCwgZmllbGQpIHtcbiAgICAgICAgaWYgKGlzTnVtYmVyKGZvcm1hdCkpIHtcbiAgICAgICAgICAgIGluZGV4ID0gZm9ybWF0O1xuICAgICAgICAgICAgZm9ybWF0ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9ybWF0ID0gZm9ybWF0IHx8ICcnO1xuXG4gICAgICAgIGlmIChpbmRleCAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0JDEoZm9ybWF0LCBpbmRleCwgZmllbGQsICdtb250aCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBvdXQgPSBbXTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDEyOyBpKyspIHtcbiAgICAgICAgICAgIG91dFtpXSA9IGdldCQxKGZvcm1hdCwgaSwgZmllbGQsICdtb250aCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxuXG4gICAgLy8gKClcbiAgICAvLyAoNSlcbiAgICAvLyAoZm10LCA1KVxuICAgIC8vIChmbXQpXG4gICAgLy8gKHRydWUpXG4gICAgLy8gKHRydWUsIDUpXG4gICAgLy8gKHRydWUsIGZtdCwgNSlcbiAgICAvLyAodHJ1ZSwgZm10KVxuICAgIGZ1bmN0aW9uIGxpc3RXZWVrZGF5c0ltcGwobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4LCBmaWVsZCkge1xuICAgICAgICBpZiAodHlwZW9mIGxvY2FsZVNvcnRlZCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICBpZiAoaXNOdW1iZXIoZm9ybWF0KSkge1xuICAgICAgICAgICAgICAgIGluZGV4ID0gZm9ybWF0O1xuICAgICAgICAgICAgICAgIGZvcm1hdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0IHx8ICcnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9ybWF0ID0gbG9jYWxlU29ydGVkO1xuICAgICAgICAgICAgaW5kZXggPSBmb3JtYXQ7XG4gICAgICAgICAgICBsb2NhbGVTb3J0ZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKGlzTnVtYmVyKGZvcm1hdCkpIHtcbiAgICAgICAgICAgICAgICBpbmRleCA9IGZvcm1hdDtcbiAgICAgICAgICAgICAgICBmb3JtYXQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdCB8fCAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBsb2NhbGUgPSBnZXRMb2NhbGUoKSxcbiAgICAgICAgICAgIHNoaWZ0ID0gbG9jYWxlU29ydGVkID8gbG9jYWxlLl93ZWVrLmRvdyA6IDAsXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgb3V0ID0gW107XG5cbiAgICAgICAgaWYgKGluZGV4ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXQkMShmb3JtYXQsIChpbmRleCArIHNoaWZ0KSAlIDcsIGZpZWxkLCAnZGF5Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICAgICAgICBvdXRbaV0gPSBnZXQkMShmb3JtYXQsIChpICsgc2hpZnQpICUgNywgZmllbGQsICdkYXknKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RNb250aHMoZm9ybWF0LCBpbmRleCkge1xuICAgICAgICByZXR1cm4gbGlzdE1vbnRoc0ltcGwoZm9ybWF0LCBpbmRleCwgJ21vbnRocycpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RNb250aHNTaG9ydChmb3JtYXQsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBsaXN0TW9udGhzSW1wbChmb3JtYXQsIGluZGV4LCAnbW9udGhzU2hvcnQnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0V2Vla2RheXMobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBsaXN0V2Vla2RheXNJbXBsKGxvY2FsZVNvcnRlZCwgZm9ybWF0LCBpbmRleCwgJ3dlZWtkYXlzJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdFdlZWtkYXlzU2hvcnQobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBsaXN0V2Vla2RheXNJbXBsKGxvY2FsZVNvcnRlZCwgZm9ybWF0LCBpbmRleCwgJ3dlZWtkYXlzU2hvcnQnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0V2Vla2RheXNNaW4obG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBsaXN0V2Vla2RheXNJbXBsKGxvY2FsZVNvcnRlZCwgZm9ybWF0LCBpbmRleCwgJ3dlZWtkYXlzTWluJyk7XG4gICAgfVxuXG4gICAgZ2V0U2V0R2xvYmFsTG9jYWxlKCdlbicsIHtcbiAgICAgICAgZXJhczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNpbmNlOiAnMDAwMS0wMS0wMScsXG4gICAgICAgICAgICAgICAgdW50aWw6ICtJbmZpbml0eSxcbiAgICAgICAgICAgICAgICBvZmZzZXQ6IDEsXG4gICAgICAgICAgICAgICAgbmFtZTogJ0Fubm8gRG9taW5pJyxcbiAgICAgICAgICAgICAgICBuYXJyb3c6ICdBRCcsXG4gICAgICAgICAgICAgICAgYWJicjogJ0FEJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2luY2U6ICcwMDAwLTEyLTMxJyxcbiAgICAgICAgICAgICAgICB1bnRpbDogLUluZmluaXR5LFxuICAgICAgICAgICAgICAgIG9mZnNldDogMSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnQmVmb3JlIENocmlzdCcsXG4gICAgICAgICAgICAgICAgbmFycm93OiAnQkMnLFxuICAgICAgICAgICAgICAgIGFiYnI6ICdCQycsXG4gICAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0odGh8c3R8bmR8cmQpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgdmFyIGIgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgICAgICBvdXRwdXQgPVxuICAgICAgICAgICAgICAgICAgICB0b0ludCgobnVtYmVyICUgMTAwKSAvIDEwKSA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAndGgnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ3N0J1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAyXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICduZCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gM1xuICAgICAgICAgICAgICAgICAgICAgICAgPyAncmQnXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICd0aCc7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgb3V0cHV0O1xuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gU2lkZSBlZmZlY3QgaW1wb3J0c1xuXG4gICAgaG9va3MubGFuZyA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ21vbWVudC5sYW5nIGlzIGRlcHJlY2F0ZWQuIFVzZSBtb21lbnQubG9jYWxlIGluc3RlYWQuJyxcbiAgICAgICAgZ2V0U2V0R2xvYmFsTG9jYWxlXG4gICAgKTtcbiAgICBob29rcy5sYW5nRGF0YSA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ21vbWVudC5sYW5nRGF0YSBpcyBkZXByZWNhdGVkLiBVc2UgbW9tZW50LmxvY2FsZURhdGEgaW5zdGVhZC4nLFxuICAgICAgICBnZXRMb2NhbGVcbiAgICApO1xuXG4gICAgdmFyIG1hdGhBYnMgPSBNYXRoLmFicztcblxuICAgIGZ1bmN0aW9uIGFicygpIHtcbiAgICAgICAgdmFyIGRhdGEgPSB0aGlzLl9kYXRhO1xuXG4gICAgICAgIHRoaXMuX21pbGxpc2Vjb25kcyA9IG1hdGhBYnModGhpcy5fbWlsbGlzZWNvbmRzKTtcbiAgICAgICAgdGhpcy5fZGF5cyA9IG1hdGhBYnModGhpcy5fZGF5cyk7XG4gICAgICAgIHRoaXMuX21vbnRocyA9IG1hdGhBYnModGhpcy5fbW9udGhzKTtcblxuICAgICAgICBkYXRhLm1pbGxpc2Vjb25kcyA9IG1hdGhBYnMoZGF0YS5taWxsaXNlY29uZHMpO1xuICAgICAgICBkYXRhLnNlY29uZHMgPSBtYXRoQWJzKGRhdGEuc2Vjb25kcyk7XG4gICAgICAgIGRhdGEubWludXRlcyA9IG1hdGhBYnMoZGF0YS5taW51dGVzKTtcbiAgICAgICAgZGF0YS5ob3VycyA9IG1hdGhBYnMoZGF0YS5ob3Vycyk7XG4gICAgICAgIGRhdGEubW9udGhzID0gbWF0aEFicyhkYXRhLm1vbnRocyk7XG4gICAgICAgIGRhdGEueWVhcnMgPSBtYXRoQWJzKGRhdGEueWVhcnMpO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkZFN1YnRyYWN0JDEoZHVyYXRpb24sIGlucHV0LCB2YWx1ZSwgZGlyZWN0aW9uKSB7XG4gICAgICAgIHZhciBvdGhlciA9IGNyZWF0ZUR1cmF0aW9uKGlucHV0LCB2YWx1ZSk7XG5cbiAgICAgICAgZHVyYXRpb24uX21pbGxpc2Vjb25kcyArPSBkaXJlY3Rpb24gKiBvdGhlci5fbWlsbGlzZWNvbmRzO1xuICAgICAgICBkdXJhdGlvbi5fZGF5cyArPSBkaXJlY3Rpb24gKiBvdGhlci5fZGF5cztcbiAgICAgICAgZHVyYXRpb24uX21vbnRocyArPSBkaXJlY3Rpb24gKiBvdGhlci5fbW9udGhzO1xuXG4gICAgICAgIHJldHVybiBkdXJhdGlvbi5fYnViYmxlKCk7XG4gICAgfVxuXG4gICAgLy8gc3VwcG9ydHMgb25seSAyLjAtc3R5bGUgYWRkKDEsICdzJykgb3IgYWRkKGR1cmF0aW9uKVxuICAgIGZ1bmN0aW9uIGFkZCQxKGlucHV0LCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gYWRkU3VidHJhY3QkMSh0aGlzLCBpbnB1dCwgdmFsdWUsIDEpO1xuICAgIH1cblxuICAgIC8vIHN1cHBvcnRzIG9ubHkgMi4wLXN0eWxlIHN1YnRyYWN0KDEsICdzJykgb3Igc3VidHJhY3QoZHVyYXRpb24pXG4gICAgZnVuY3Rpb24gc3VidHJhY3QkMShpbnB1dCwgdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGFkZFN1YnRyYWN0JDEodGhpcywgaW5wdXQsIHZhbHVlLCAtMSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWJzQ2VpbChudW1iZXIpIHtcbiAgICAgICAgaWYgKG51bWJlciA8IDApIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmZsb29yKG51bWJlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5jZWlsKG51bWJlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWJibGUoKSB7XG4gICAgICAgIHZhciBtaWxsaXNlY29uZHMgPSB0aGlzLl9taWxsaXNlY29uZHMsXG4gICAgICAgICAgICBkYXlzID0gdGhpcy5fZGF5cyxcbiAgICAgICAgICAgIG1vbnRocyA9IHRoaXMuX21vbnRocyxcbiAgICAgICAgICAgIGRhdGEgPSB0aGlzLl9kYXRhLFxuICAgICAgICAgICAgc2Vjb25kcyxcbiAgICAgICAgICAgIG1pbnV0ZXMsXG4gICAgICAgICAgICBob3VycyxcbiAgICAgICAgICAgIHllYXJzLFxuICAgICAgICAgICAgbW9udGhzRnJvbURheXM7XG5cbiAgICAgICAgLy8gaWYgd2UgaGF2ZSBhIG1peCBvZiBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgdmFsdWVzLCBidWJibGUgZG93biBmaXJzdFxuICAgICAgICAvLyBjaGVjazogaHR0cHM6Ly9naXRodWIuY29tL21vbWVudC9tb21lbnQvaXNzdWVzLzIxNjZcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICAobWlsbGlzZWNvbmRzID49IDAgJiYgZGF5cyA+PSAwICYmIG1vbnRocyA+PSAwKSB8fFxuICAgICAgICAgICAgICAgIChtaWxsaXNlY29uZHMgPD0gMCAmJiBkYXlzIDw9IDAgJiYgbW9udGhzIDw9IDApXG4gICAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgICAgbWlsbGlzZWNvbmRzICs9IGFic0NlaWwobW9udGhzVG9EYXlzKG1vbnRocykgKyBkYXlzKSAqIDg2NGU1O1xuICAgICAgICAgICAgZGF5cyA9IDA7XG4gICAgICAgICAgICBtb250aHMgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBjb2RlIGJ1YmJsZXMgdXAgdmFsdWVzLCBzZWUgdGhlIHRlc3RzIGZvclxuICAgICAgICAvLyBleGFtcGxlcyBvZiB3aGF0IHRoYXQgbWVhbnMuXG4gICAgICAgIGRhdGEubWlsbGlzZWNvbmRzID0gbWlsbGlzZWNvbmRzICUgMTAwMDtcblxuICAgICAgICBzZWNvbmRzID0gYWJzRmxvb3IobWlsbGlzZWNvbmRzIC8gMTAwMCk7XG4gICAgICAgIGRhdGEuc2Vjb25kcyA9IHNlY29uZHMgJSA2MDtcblxuICAgICAgICBtaW51dGVzID0gYWJzRmxvb3Ioc2Vjb25kcyAvIDYwKTtcbiAgICAgICAgZGF0YS5taW51dGVzID0gbWludXRlcyAlIDYwO1xuXG4gICAgICAgIGhvdXJzID0gYWJzRmxvb3IobWludXRlcyAvIDYwKTtcbiAgICAgICAgZGF0YS5ob3VycyA9IGhvdXJzICUgMjQ7XG5cbiAgICAgICAgZGF5cyArPSBhYnNGbG9vcihob3VycyAvIDI0KTtcblxuICAgICAgICAvLyBjb252ZXJ0IGRheXMgdG8gbW9udGhzXG4gICAgICAgIG1vbnRoc0Zyb21EYXlzID0gYWJzRmxvb3IoZGF5c1RvTW9udGhzKGRheXMpKTtcbiAgICAgICAgbW9udGhzICs9IG1vbnRoc0Zyb21EYXlzO1xuICAgICAgICBkYXlzIC09IGFic0NlaWwobW9udGhzVG9EYXlzKG1vbnRoc0Zyb21EYXlzKSk7XG5cbiAgICAgICAgLy8gMTIgbW9udGhzIC0+IDEgeWVhclxuICAgICAgICB5ZWFycyA9IGFic0Zsb29yKG1vbnRocyAvIDEyKTtcbiAgICAgICAgbW9udGhzICU9IDEyO1xuXG4gICAgICAgIGRhdGEuZGF5cyA9IGRheXM7XG4gICAgICAgIGRhdGEubW9udGhzID0gbW9udGhzO1xuICAgICAgICBkYXRhLnllYXJzID0geWVhcnM7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGF5c1RvTW9udGhzKGRheXMpIHtcbiAgICAgICAgLy8gNDAwIHllYXJzIGhhdmUgMTQ2MDk3IGRheXMgKHRha2luZyBpbnRvIGFjY291bnQgbGVhcCB5ZWFyIHJ1bGVzKVxuICAgICAgICAvLyA0MDAgeWVhcnMgaGF2ZSAxMiBtb250aHMgPT09IDQ4MDBcbiAgICAgICAgcmV0dXJuIChkYXlzICogNDgwMCkgLyAxNDYwOTc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW9udGhzVG9EYXlzKG1vbnRocykge1xuICAgICAgICAvLyB0aGUgcmV2ZXJzZSBvZiBkYXlzVG9Nb250aHNcbiAgICAgICAgcmV0dXJuIChtb250aHMgKiAxNDYwOTcpIC8gNDgwMDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhcyh1bml0cykge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG4gICAgICAgIHZhciBkYXlzLFxuICAgICAgICAgICAgbW9udGhzLFxuICAgICAgICAgICAgbWlsbGlzZWNvbmRzID0gdGhpcy5fbWlsbGlzZWNvbmRzO1xuXG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuXG4gICAgICAgIGlmICh1bml0cyA9PT0gJ21vbnRoJyB8fCB1bml0cyA9PT0gJ3F1YXJ0ZXInIHx8IHVuaXRzID09PSAneWVhcicpIHtcbiAgICAgICAgICAgIGRheXMgPSB0aGlzLl9kYXlzICsgbWlsbGlzZWNvbmRzIC8gODY0ZTU7XG4gICAgICAgICAgICBtb250aHMgPSB0aGlzLl9tb250aHMgKyBkYXlzVG9Nb250aHMoZGF5cyk7XG4gICAgICAgICAgICBzd2l0Y2ggKHVuaXRzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3F1YXJ0ZXInOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzIC8gMztcbiAgICAgICAgICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRocyAvIDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gaGFuZGxlIG1pbGxpc2Vjb25kcyBzZXBhcmF0ZWx5IGJlY2F1c2Ugb2YgZmxvYXRpbmcgcG9pbnQgbWF0aCBlcnJvcnMgKGlzc3VlICMxODY3KVxuICAgICAgICAgICAgZGF5cyA9IHRoaXMuX2RheXMgKyBNYXRoLnJvdW5kKG1vbnRoc1RvRGF5cyh0aGlzLl9tb250aHMpKTtcbiAgICAgICAgICAgIHN3aXRjaCAodW5pdHMpIHtcbiAgICAgICAgICAgICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRheXMgLyA3ICsgbWlsbGlzZWNvbmRzIC8gNjA0OGU1O1xuICAgICAgICAgICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXlzICsgbWlsbGlzZWNvbmRzIC8gODY0ZTU7XG4gICAgICAgICAgICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXlzICogMjQgKyBtaWxsaXNlY29uZHMgLyAzNmU1O1xuICAgICAgICAgICAgICAgIGNhc2UgJ21pbnV0ZSc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXlzICogMTQ0MCArIG1pbGxpc2Vjb25kcyAvIDZlNDtcbiAgICAgICAgICAgICAgICBjYXNlICdzZWNvbmQnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF5cyAqIDg2NDAwICsgbWlsbGlzZWNvbmRzIC8gMTAwMDtcbiAgICAgICAgICAgICAgICAvLyBNYXRoLmZsb29yIHByZXZlbnRzIGZsb2F0aW5nIHBvaW50IG1hdGggZXJyb3JzIGhlcmVcbiAgICAgICAgICAgICAgICBjYXNlICdtaWxsaXNlY29uZCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLmZsb29yKGRheXMgKiA4NjRlNSkgKyBtaWxsaXNlY29uZHM7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIHVuaXQgJyArIHVuaXRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRPRE86IFVzZSB0aGlzLmFzKCdtcycpP1xuICAgIGZ1bmN0aW9uIHZhbHVlT2YkMSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy5fbWlsbGlzZWNvbmRzICtcbiAgICAgICAgICAgIHRoaXMuX2RheXMgKiA4NjRlNSArXG4gICAgICAgICAgICAodGhpcy5fbW9udGhzICUgMTIpICogMjU5MmU2ICtcbiAgICAgICAgICAgIHRvSW50KHRoaXMuX21vbnRocyAvIDEyKSAqIDMxNTM2ZTZcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYWtlQXMoYWxpYXMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFzKGFsaWFzKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgYXNNaWxsaXNlY29uZHMgPSBtYWtlQXMoJ21zJyksXG4gICAgICAgIGFzU2Vjb25kcyA9IG1ha2VBcygncycpLFxuICAgICAgICBhc01pbnV0ZXMgPSBtYWtlQXMoJ20nKSxcbiAgICAgICAgYXNIb3VycyA9IG1ha2VBcygnaCcpLFxuICAgICAgICBhc0RheXMgPSBtYWtlQXMoJ2QnKSxcbiAgICAgICAgYXNXZWVrcyA9IG1ha2VBcygndycpLFxuICAgICAgICBhc01vbnRocyA9IG1ha2VBcygnTScpLFxuICAgICAgICBhc1F1YXJ0ZXJzID0gbWFrZUFzKCdRJyksXG4gICAgICAgIGFzWWVhcnMgPSBtYWtlQXMoJ3knKTtcblxuICAgIGZ1bmN0aW9uIGNsb25lJDEoKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVEdXJhdGlvbih0aGlzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXQkMih1bml0cykge1xuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gdGhpc1t1bml0cyArICdzJ10oKSA6IE5hTjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYWtlR2V0dGVyKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/IHRoaXMuX2RhdGFbbmFtZV0gOiBOYU47XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIG1pbGxpc2Vjb25kcyA9IG1ha2VHZXR0ZXIoJ21pbGxpc2Vjb25kcycpLFxuICAgICAgICBzZWNvbmRzID0gbWFrZUdldHRlcignc2Vjb25kcycpLFxuICAgICAgICBtaW51dGVzID0gbWFrZUdldHRlcignbWludXRlcycpLFxuICAgICAgICBob3VycyA9IG1ha2VHZXR0ZXIoJ2hvdXJzJyksXG4gICAgICAgIGRheXMgPSBtYWtlR2V0dGVyKCdkYXlzJyksXG4gICAgICAgIG1vbnRocyA9IG1ha2VHZXR0ZXIoJ21vbnRocycpLFxuICAgICAgICB5ZWFycyA9IG1ha2VHZXR0ZXIoJ3llYXJzJyk7XG5cbiAgICBmdW5jdGlvbiB3ZWVrcygpIHtcbiAgICAgICAgcmV0dXJuIGFic0Zsb29yKHRoaXMuZGF5cygpIC8gNyk7XG4gICAgfVxuXG4gICAgdmFyIHJvdW5kID0gTWF0aC5yb3VuZCxcbiAgICAgICAgdGhyZXNob2xkcyA9IHtcbiAgICAgICAgICAgIHNzOiA0NCwgLy8gYSBmZXcgc2Vjb25kcyB0byBzZWNvbmRzXG4gICAgICAgICAgICBzOiA0NSwgLy8gc2Vjb25kcyB0byBtaW51dGVcbiAgICAgICAgICAgIG06IDQ1LCAvLyBtaW51dGVzIHRvIGhvdXJcbiAgICAgICAgICAgIGg6IDIyLCAvLyBob3VycyB0byBkYXlcbiAgICAgICAgICAgIGQ6IDI2LCAvLyBkYXlzIHRvIG1vbnRoL3dlZWtcbiAgICAgICAgICAgIHc6IG51bGwsIC8vIHdlZWtzIHRvIG1vbnRoXG4gICAgICAgICAgICBNOiAxMSwgLy8gbW9udGhzIHRvIHllYXJcbiAgICAgICAgfTtcblxuICAgIC8vIGhlbHBlciBmdW5jdGlvbiBmb3IgbW9tZW50LmZuLmZyb20sIG1vbWVudC5mbi5mcm9tTm93LCBhbmQgbW9tZW50LmR1cmF0aW9uLmZuLmh1bWFuaXplXG4gICAgZnVuY3Rpb24gc3Vic3RpdHV0ZVRpbWVBZ28oc3RyaW5nLCBudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGlzRnV0dXJlLCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5yZWxhdGl2ZVRpbWUobnVtYmVyIHx8IDEsICEhd2l0aG91dFN1ZmZpeCwgc3RyaW5nLCBpc0Z1dHVyZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVsYXRpdmVUaW1lJDEocG9zTmVnRHVyYXRpb24sIHdpdGhvdXRTdWZmaXgsIHRocmVzaG9sZHMsIGxvY2FsZSkge1xuICAgICAgICB2YXIgZHVyYXRpb24gPSBjcmVhdGVEdXJhdGlvbihwb3NOZWdEdXJhdGlvbikuYWJzKCksXG4gICAgICAgICAgICBzZWNvbmRzID0gcm91bmQoZHVyYXRpb24uYXMoJ3MnKSksXG4gICAgICAgICAgICBtaW51dGVzID0gcm91bmQoZHVyYXRpb24uYXMoJ20nKSksXG4gICAgICAgICAgICBob3VycyA9IHJvdW5kKGR1cmF0aW9uLmFzKCdoJykpLFxuICAgICAgICAgICAgZGF5cyA9IHJvdW5kKGR1cmF0aW9uLmFzKCdkJykpLFxuICAgICAgICAgICAgbW9udGhzID0gcm91bmQoZHVyYXRpb24uYXMoJ00nKSksXG4gICAgICAgICAgICB3ZWVrcyA9IHJvdW5kKGR1cmF0aW9uLmFzKCd3JykpLFxuICAgICAgICAgICAgeWVhcnMgPSByb3VuZChkdXJhdGlvbi5hcygneScpKSxcbiAgICAgICAgICAgIGEgPVxuICAgICAgICAgICAgICAgIChzZWNvbmRzIDw9IHRocmVzaG9sZHMuc3MgJiYgWydzJywgc2Vjb25kc10pIHx8XG4gICAgICAgICAgICAgICAgKHNlY29uZHMgPCB0aHJlc2hvbGRzLnMgJiYgWydzcycsIHNlY29uZHNdKSB8fFxuICAgICAgICAgICAgICAgIChtaW51dGVzIDw9IDEgJiYgWydtJ10pIHx8XG4gICAgICAgICAgICAgICAgKG1pbnV0ZXMgPCB0aHJlc2hvbGRzLm0gJiYgWydtbScsIG1pbnV0ZXNdKSB8fFxuICAgICAgICAgICAgICAgIChob3VycyA8PSAxICYmIFsnaCddKSB8fFxuICAgICAgICAgICAgICAgIChob3VycyA8IHRocmVzaG9sZHMuaCAmJiBbJ2hoJywgaG91cnNdKSB8fFxuICAgICAgICAgICAgICAgIChkYXlzIDw9IDEgJiYgWydkJ10pIHx8XG4gICAgICAgICAgICAgICAgKGRheXMgPCB0aHJlc2hvbGRzLmQgJiYgWydkZCcsIGRheXNdKTtcblxuICAgICAgICBpZiAodGhyZXNob2xkcy53ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGEgPVxuICAgICAgICAgICAgICAgIGEgfHxcbiAgICAgICAgICAgICAgICAod2Vla3MgPD0gMSAmJiBbJ3cnXSkgfHxcbiAgICAgICAgICAgICAgICAod2Vla3MgPCB0aHJlc2hvbGRzLncgJiYgWyd3dycsIHdlZWtzXSk7XG4gICAgICAgIH1cbiAgICAgICAgYSA9IGEgfHxcbiAgICAgICAgICAgIChtb250aHMgPD0gMSAmJiBbJ00nXSkgfHxcbiAgICAgICAgICAgIChtb250aHMgPCB0aHJlc2hvbGRzLk0gJiYgWydNTScsIG1vbnRoc10pIHx8XG4gICAgICAgICAgICAoeWVhcnMgPD0gMSAmJiBbJ3knXSkgfHwgWyd5eScsIHllYXJzXTtcblxuICAgICAgICBhWzJdID0gd2l0aG91dFN1ZmZpeDtcbiAgICAgICAgYVszXSA9ICtwb3NOZWdEdXJhdGlvbiA+IDA7XG4gICAgICAgIGFbNF0gPSBsb2NhbGU7XG4gICAgICAgIHJldHVybiBzdWJzdGl0dXRlVGltZUFnby5hcHBseShudWxsLCBhKTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGFsbG93cyB5b3UgdG8gc2V0IHRoZSByb3VuZGluZyBmdW5jdGlvbiBmb3IgcmVsYXRpdmUgdGltZSBzdHJpbmdzXG4gICAgZnVuY3Rpb24gZ2V0U2V0UmVsYXRpdmVUaW1lUm91bmRpbmcocm91bmRpbmdGdW5jdGlvbikge1xuICAgICAgICBpZiAocm91bmRpbmdGdW5jdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gcm91bmQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiByb3VuZGluZ0Z1bmN0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByb3VuZCA9IHJvdW5kaW5nRnVuY3Rpb247XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiBhbGxvd3MgeW91IHRvIHNldCBhIHRocmVzaG9sZCBmb3IgcmVsYXRpdmUgdGltZSBzdHJpbmdzXG4gICAgZnVuY3Rpb24gZ2V0U2V0UmVsYXRpdmVUaW1lVGhyZXNob2xkKHRocmVzaG9sZCwgbGltaXQpIHtcbiAgICAgICAgaWYgKHRocmVzaG9sZHNbdGhyZXNob2xkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxpbWl0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aHJlc2hvbGRzW3RocmVzaG9sZF07XG4gICAgICAgIH1cbiAgICAgICAgdGhyZXNob2xkc1t0aHJlc2hvbGRdID0gbGltaXQ7XG4gICAgICAgIGlmICh0aHJlc2hvbGQgPT09ICdzJykge1xuICAgICAgICAgICAgdGhyZXNob2xkcy5zcyA9IGxpbWl0IC0gMTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBodW1hbml6ZShhcmdXaXRoU3VmZml4LCBhcmdUaHJlc2hvbGRzKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHdpdGhTdWZmaXggPSBmYWxzZSxcbiAgICAgICAgICAgIHRoID0gdGhyZXNob2xkcyxcbiAgICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICAgIG91dHB1dDtcblxuICAgICAgICBpZiAodHlwZW9mIGFyZ1dpdGhTdWZmaXggPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBhcmdUaHJlc2hvbGRzID0gYXJnV2l0aFN1ZmZpeDtcbiAgICAgICAgICAgIGFyZ1dpdGhTdWZmaXggPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGFyZ1dpdGhTdWZmaXggPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgd2l0aFN1ZmZpeCA9IGFyZ1dpdGhTdWZmaXg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBhcmdUaHJlc2hvbGRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgdGggPSBPYmplY3QuYXNzaWduKHt9LCB0aHJlc2hvbGRzLCBhcmdUaHJlc2hvbGRzKTtcbiAgICAgICAgICAgIGlmIChhcmdUaHJlc2hvbGRzLnMgIT0gbnVsbCAmJiBhcmdUaHJlc2hvbGRzLnNzID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aC5zcyA9IGFyZ1RocmVzaG9sZHMucyAtIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsb2NhbGUgPSB0aGlzLmxvY2FsZURhdGEoKTtcbiAgICAgICAgb3V0cHV0ID0gcmVsYXRpdmVUaW1lJDEodGhpcywgIXdpdGhTdWZmaXgsIHRoLCBsb2NhbGUpO1xuXG4gICAgICAgIGlmICh3aXRoU3VmZml4KSB7XG4gICAgICAgICAgICBvdXRwdXQgPSBsb2NhbGUucGFzdEZ1dHVyZSgrdGhpcywgb3V0cHV0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBsb2NhbGUucG9zdGZvcm1hdChvdXRwdXQpO1xuICAgIH1cblxuICAgIHZhciBhYnMkMSA9IE1hdGguYWJzO1xuXG4gICAgZnVuY3Rpb24gc2lnbih4KSB7XG4gICAgICAgIHJldHVybiAoeCA+IDApIC0gKHggPCAwKSB8fCAreDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b0lTT1N0cmluZyQxKCkge1xuICAgICAgICAvLyBmb3IgSVNPIHN0cmluZ3Mgd2UgZG8gbm90IHVzZSB0aGUgbm9ybWFsIGJ1YmJsaW5nIHJ1bGVzOlxuICAgICAgICAvLyAgKiBtaWxsaXNlY29uZHMgYnViYmxlIHVwIHVudGlsIHRoZXkgYmVjb21lIGhvdXJzXG4gICAgICAgIC8vICAqIGRheXMgZG8gbm90IGJ1YmJsZSBhdCBhbGxcbiAgICAgICAgLy8gICogbW9udGhzIGJ1YmJsZSB1cCB1bnRpbCB0aGV5IGJlY29tZSB5ZWFyc1xuICAgICAgICAvLyBUaGlzIGlzIGJlY2F1c2UgdGhlcmUgaXMgbm8gY29udGV4dC1mcmVlIGNvbnZlcnNpb24gYmV0d2VlbiBob3VycyBhbmQgZGF5c1xuICAgICAgICAvLyAodGhpbmsgb2YgY2xvY2sgY2hhbmdlcylcbiAgICAgICAgLy8gYW5kIGFsc28gbm90IGJldHdlZW4gZGF5cyBhbmQgbW9udGhzICgyOC0zMSBkYXlzIHBlciBtb250aClcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2Vjb25kcyA9IGFicyQxKHRoaXMuX21pbGxpc2Vjb25kcykgLyAxMDAwLFxuICAgICAgICAgICAgZGF5cyA9IGFicyQxKHRoaXMuX2RheXMpLFxuICAgICAgICAgICAgbW9udGhzID0gYWJzJDEodGhpcy5fbW9udGhzKSxcbiAgICAgICAgICAgIG1pbnV0ZXMsXG4gICAgICAgICAgICBob3VycyxcbiAgICAgICAgICAgIHllYXJzLFxuICAgICAgICAgICAgcyxcbiAgICAgICAgICAgIHRvdGFsID0gdGhpcy5hc1NlY29uZHMoKSxcbiAgICAgICAgICAgIHRvdGFsU2lnbixcbiAgICAgICAgICAgIHltU2lnbixcbiAgICAgICAgICAgIGRheXNTaWduLFxuICAgICAgICAgICAgaG1zU2lnbjtcblxuICAgICAgICBpZiAoIXRvdGFsKSB7XG4gICAgICAgICAgICAvLyB0aGlzIGlzIHRoZSBzYW1lIGFzIEMjJ3MgKE5vZGEpIGFuZCBweXRob24gKGlzb2RhdGUpLi4uXG4gICAgICAgICAgICAvLyBidXQgbm90IG90aGVyIEpTIChnb29nLmRhdGUpXG4gICAgICAgICAgICByZXR1cm4gJ1AwRCc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAzNjAwIHNlY29uZHMgLT4gNjAgbWludXRlcyAtPiAxIGhvdXJcbiAgICAgICAgbWludXRlcyA9IGFic0Zsb29yKHNlY29uZHMgLyA2MCk7XG4gICAgICAgIGhvdXJzID0gYWJzRmxvb3IobWludXRlcyAvIDYwKTtcbiAgICAgICAgc2Vjb25kcyAlPSA2MDtcbiAgICAgICAgbWludXRlcyAlPSA2MDtcblxuICAgICAgICAvLyAxMiBtb250aHMgLT4gMSB5ZWFyXG4gICAgICAgIHllYXJzID0gYWJzRmxvb3IobW9udGhzIC8gMTIpO1xuICAgICAgICBtb250aHMgJT0gMTI7XG5cbiAgICAgICAgLy8gaW5zcGlyZWQgYnkgaHR0cHM6Ly9naXRodWIuY29tL2RvcmRpbGxlL21vbWVudC1pc29kdXJhdGlvbi9ibG9iL21hc3Rlci9tb21lbnQuaXNvZHVyYXRpb24uanNcbiAgICAgICAgcyA9IHNlY29uZHMgPyBzZWNvbmRzLnRvRml4ZWQoMykucmVwbGFjZSgvXFwuPzArJC8sICcnKSA6ICcnO1xuXG4gICAgICAgIHRvdGFsU2lnbiA9IHRvdGFsIDwgMCA/ICctJyA6ICcnO1xuICAgICAgICB5bVNpZ24gPSBzaWduKHRoaXMuX21vbnRocykgIT09IHNpZ24odG90YWwpID8gJy0nIDogJyc7XG4gICAgICAgIGRheXNTaWduID0gc2lnbih0aGlzLl9kYXlzKSAhPT0gc2lnbih0b3RhbCkgPyAnLScgOiAnJztcbiAgICAgICAgaG1zU2lnbiA9IHNpZ24odGhpcy5fbWlsbGlzZWNvbmRzKSAhPT0gc2lnbih0b3RhbCkgPyAnLScgOiAnJztcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdG90YWxTaWduICtcbiAgICAgICAgICAgICdQJyArXG4gICAgICAgICAgICAoeWVhcnMgPyB5bVNpZ24gKyB5ZWFycyArICdZJyA6ICcnKSArXG4gICAgICAgICAgICAobW9udGhzID8geW1TaWduICsgbW9udGhzICsgJ00nIDogJycpICtcbiAgICAgICAgICAgIChkYXlzID8gZGF5c1NpZ24gKyBkYXlzICsgJ0QnIDogJycpICtcbiAgICAgICAgICAgIChob3VycyB8fCBtaW51dGVzIHx8IHNlY29uZHMgPyAnVCcgOiAnJykgK1xuICAgICAgICAgICAgKGhvdXJzID8gaG1zU2lnbiArIGhvdXJzICsgJ0gnIDogJycpICtcbiAgICAgICAgICAgIChtaW51dGVzID8gaG1zU2lnbiArIG1pbnV0ZXMgKyAnTScgOiAnJykgK1xuICAgICAgICAgICAgKHNlY29uZHMgPyBobXNTaWduICsgcyArICdTJyA6ICcnKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHZhciBwcm90byQyID0gRHVyYXRpb24ucHJvdG90eXBlO1xuXG4gICAgcHJvdG8kMi5pc1ZhbGlkID0gaXNWYWxpZCQxO1xuICAgIHByb3RvJDIuYWJzID0gYWJzO1xuICAgIHByb3RvJDIuYWRkID0gYWRkJDE7XG4gICAgcHJvdG8kMi5zdWJ0cmFjdCA9IHN1YnRyYWN0JDE7XG4gICAgcHJvdG8kMi5hcyA9IGFzO1xuICAgIHByb3RvJDIuYXNNaWxsaXNlY29uZHMgPSBhc01pbGxpc2Vjb25kcztcbiAgICBwcm90byQyLmFzU2Vjb25kcyA9IGFzU2Vjb25kcztcbiAgICBwcm90byQyLmFzTWludXRlcyA9IGFzTWludXRlcztcbiAgICBwcm90byQyLmFzSG91cnMgPSBhc0hvdXJzO1xuICAgIHByb3RvJDIuYXNEYXlzID0gYXNEYXlzO1xuICAgIHByb3RvJDIuYXNXZWVrcyA9IGFzV2Vla3M7XG4gICAgcHJvdG8kMi5hc01vbnRocyA9IGFzTW9udGhzO1xuICAgIHByb3RvJDIuYXNRdWFydGVycyA9IGFzUXVhcnRlcnM7XG4gICAgcHJvdG8kMi5hc1llYXJzID0gYXNZZWFycztcbiAgICBwcm90byQyLnZhbHVlT2YgPSB2YWx1ZU9mJDE7XG4gICAgcHJvdG8kMi5fYnViYmxlID0gYnViYmxlO1xuICAgIHByb3RvJDIuY2xvbmUgPSBjbG9uZSQxO1xuICAgIHByb3RvJDIuZ2V0ID0gZ2V0JDI7XG4gICAgcHJvdG8kMi5taWxsaXNlY29uZHMgPSBtaWxsaXNlY29uZHM7XG4gICAgcHJvdG8kMi5zZWNvbmRzID0gc2Vjb25kcztcbiAgICBwcm90byQyLm1pbnV0ZXMgPSBtaW51dGVzO1xuICAgIHByb3RvJDIuaG91cnMgPSBob3VycztcbiAgICBwcm90byQyLmRheXMgPSBkYXlzO1xuICAgIHByb3RvJDIud2Vla3MgPSB3ZWVrcztcbiAgICBwcm90byQyLm1vbnRocyA9IG1vbnRocztcbiAgICBwcm90byQyLnllYXJzID0geWVhcnM7XG4gICAgcHJvdG8kMi5odW1hbml6ZSA9IGh1bWFuaXplO1xuICAgIHByb3RvJDIudG9JU09TdHJpbmcgPSB0b0lTT1N0cmluZyQxO1xuICAgIHByb3RvJDIudG9TdHJpbmcgPSB0b0lTT1N0cmluZyQxO1xuICAgIHByb3RvJDIudG9KU09OID0gdG9JU09TdHJpbmckMTtcbiAgICBwcm90byQyLmxvY2FsZSA9IGxvY2FsZTtcbiAgICBwcm90byQyLmxvY2FsZURhdGEgPSBsb2NhbGVEYXRhO1xuXG4gICAgcHJvdG8kMi50b0lzb1N0cmluZyA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ3RvSXNvU3RyaW5nKCkgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSB0b0lTT1N0cmluZygpIGluc3RlYWQgKG5vdGljZSB0aGUgY2FwaXRhbHMpJyxcbiAgICAgICAgdG9JU09TdHJpbmckMVxuICAgICk7XG4gICAgcHJvdG8kMi5sYW5nID0gbGFuZztcblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdYJywgMCwgMCwgJ3VuaXgnKTtcbiAgICBhZGRGb3JtYXRUb2tlbigneCcsIDAsIDAsICd2YWx1ZU9mJyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCd4JywgbWF0Y2hTaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1gnLCBtYXRjaFRpbWVzdGFtcCk7XG4gICAgYWRkUGFyc2VUb2tlbignWCcsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShwYXJzZUZsb2F0KGlucHV0KSAqIDEwMDApO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ3gnLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUodG9JbnQoaW5wdXQpKTtcbiAgICB9KTtcblxuICAgIC8vISBtb21lbnQuanNcblxuICAgIGhvb2tzLnZlcnNpb24gPSAnMi4yOS40JztcblxuICAgIHNldEhvb2tDYWxsYmFjayhjcmVhdGVMb2NhbCk7XG5cbiAgICBob29rcy5mbiA9IHByb3RvO1xuICAgIGhvb2tzLm1pbiA9IG1pbjtcbiAgICBob29rcy5tYXggPSBtYXg7XG4gICAgaG9va3Mubm93ID0gbm93O1xuICAgIGhvb2tzLnV0YyA9IGNyZWF0ZVVUQztcbiAgICBob29rcy51bml4ID0gY3JlYXRlVW5peDtcbiAgICBob29rcy5tb250aHMgPSBsaXN0TW9udGhzO1xuICAgIGhvb2tzLmlzRGF0ZSA9IGlzRGF0ZTtcbiAgICBob29rcy5sb2NhbGUgPSBnZXRTZXRHbG9iYWxMb2NhbGU7XG4gICAgaG9va3MuaW52YWxpZCA9IGNyZWF0ZUludmFsaWQ7XG4gICAgaG9va3MuZHVyYXRpb24gPSBjcmVhdGVEdXJhdGlvbjtcbiAgICBob29rcy5pc01vbWVudCA9IGlzTW9tZW50O1xuICAgIGhvb2tzLndlZWtkYXlzID0gbGlzdFdlZWtkYXlzO1xuICAgIGhvb2tzLnBhcnNlWm9uZSA9IGNyZWF0ZUluWm9uZTtcbiAgICBob29rcy5sb2NhbGVEYXRhID0gZ2V0TG9jYWxlO1xuICAgIGhvb2tzLmlzRHVyYXRpb24gPSBpc0R1cmF0aW9uO1xuICAgIGhvb2tzLm1vbnRoc1Nob3J0ID0gbGlzdE1vbnRoc1Nob3J0O1xuICAgIGhvb2tzLndlZWtkYXlzTWluID0gbGlzdFdlZWtkYXlzTWluO1xuICAgIGhvb2tzLmRlZmluZUxvY2FsZSA9IGRlZmluZUxvY2FsZTtcbiAgICBob29rcy51cGRhdGVMb2NhbGUgPSB1cGRhdGVMb2NhbGU7XG4gICAgaG9va3MubG9jYWxlcyA9IGxpc3RMb2NhbGVzO1xuICAgIGhvb2tzLndlZWtkYXlzU2hvcnQgPSBsaXN0V2Vla2RheXNTaG9ydDtcbiAgICBob29rcy5ub3JtYWxpemVVbml0cyA9IG5vcm1hbGl6ZVVuaXRzO1xuICAgIGhvb2tzLnJlbGF0aXZlVGltZVJvdW5kaW5nID0gZ2V0U2V0UmVsYXRpdmVUaW1lUm91bmRpbmc7XG4gICAgaG9va3MucmVsYXRpdmVUaW1lVGhyZXNob2xkID0gZ2V0U2V0UmVsYXRpdmVUaW1lVGhyZXNob2xkO1xuICAgIGhvb2tzLmNhbGVuZGFyRm9ybWF0ID0gZ2V0Q2FsZW5kYXJGb3JtYXQ7XG4gICAgaG9va3MucHJvdG90eXBlID0gcHJvdG87XG5cbiAgICAvLyBjdXJyZW50bHkgSFRNTDUgaW5wdXQgdHlwZSBvbmx5IHN1cHBvcnRzIDI0LWhvdXIgZm9ybWF0c1xuICAgIGhvb2tzLkhUTUw1X0ZNVCA9IHtcbiAgICAgICAgREFURVRJTUVfTE9DQUw6ICdZWVlZLU1NLUREVEhIOm1tJywgLy8gPGlucHV0IHR5cGU9XCJkYXRldGltZS1sb2NhbFwiIC8+XG4gICAgICAgIERBVEVUSU1FX0xPQ0FMX1NFQ09ORFM6ICdZWVlZLU1NLUREVEhIOm1tOnNzJywgLy8gPGlucHV0IHR5cGU9XCJkYXRldGltZS1sb2NhbFwiIHN0ZXA9XCIxXCIgLz5cbiAgICAgICAgREFURVRJTUVfTE9DQUxfTVM6ICdZWVlZLU1NLUREVEhIOm1tOnNzLlNTUycsIC8vIDxpbnB1dCB0eXBlPVwiZGF0ZXRpbWUtbG9jYWxcIiBzdGVwPVwiMC4wMDFcIiAvPlxuICAgICAgICBEQVRFOiAnWVlZWS1NTS1ERCcsIC8vIDxpbnB1dCB0eXBlPVwiZGF0ZVwiIC8+XG4gICAgICAgIFRJTUU6ICdISDptbScsIC8vIDxpbnB1dCB0eXBlPVwidGltZVwiIC8+XG4gICAgICAgIFRJTUVfU0VDT05EUzogJ0hIOm1tOnNzJywgLy8gPGlucHV0IHR5cGU9XCJ0aW1lXCIgc3RlcD1cIjFcIiAvPlxuICAgICAgICBUSU1FX01TOiAnSEg6bW06c3MuU1NTJywgLy8gPGlucHV0IHR5cGU9XCJ0aW1lXCIgc3RlcD1cIjAuMDAxXCIgLz5cbiAgICAgICAgV0VFSzogJ0dHR0ctW1ddV1cnLCAvLyA8aW5wdXQgdHlwZT1cIndlZWtcIiAvPlxuICAgICAgICBNT05USDogJ1lZWVktTU0nLCAvLyA8aW5wdXQgdHlwZT1cIm1vbnRoXCIgLz5cbiAgICB9O1xuXG4gICAgcmV0dXJuIGhvb2tzO1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/moment/moment.js\n");

/***/ }),

/***/ "./node_modules/normalize-wheel/index.js":
/*!***********************************************!*\
  !*** ./node_modules/normalize-wheel/index.js ***!
  \***********************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

eval("module.exports = __webpack_require__(/*! ./src/normalizeWheel.js */ \"./node_modules/normalize-wheel/src/normalizeWheel.js\");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbm9ybWFsaXplLXdoZWVsL2luZGV4LmpzIiwibWFwcGluZ3MiOiJBQUFBLDJIQUFtRCIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9ub3JtYWxpemUtd2hlZWwvaW5kZXguanM/MTJhZCJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vc3JjL25vcm1hbGl6ZVdoZWVsLmpzJyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/normalize-wheel/index.js\n");

/***/ }),

/***/ "./node_modules/normalize-wheel/src/ExecutionEnvironment.js":
/*!******************************************************************!*\
  !*** ./node_modules/normalize-wheel/src/ExecutionEnvironment.js ***!
  \******************************************************************/
/***/ ((module) => {

"use strict";
eval("/**\n * Copyright (c) 2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ExecutionEnvironment\n */\n\n/*jslint evil: true */\n\n\n\nvar canUseDOM = !!(\n  typeof window !== 'undefined' &&\n  window.document &&\n  window.document.createElement\n);\n\n/**\n * Simple, lightweight module assisting with the detection and context of\n * Worker. Helps avoid circular dependencies and allows code to reason about\n * whether or not they are in a Worker, even if they never include the main\n * `ReactWorker` dependency.\n */\nvar ExecutionEnvironment = {\n\n  canUseDOM: canUseDOM,\n\n  canUseWorkers: typeof Worker !== 'undefined',\n\n  canUseEventListeners:\n    canUseDOM && !!(window.addEventListener || window.attachEvent),\n\n  canUseViewport: canUseDOM && !!window.screen,\n\n  isInWorker: !canUseDOM // For now, this is true - might change in the future.\n\n};\n\nmodule.exports = ExecutionEnvironment;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbm9ybWFsaXplLXdoZWVsL3NyYy9FeGVjdXRpb25FbnZpcm9ubWVudC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbm9ybWFsaXplLXdoZWVsL3NyYy9FeGVjdXRpb25FbnZpcm9ubWVudC5qcz84NTA1Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIEV4ZWN1dGlvbkVudmlyb25tZW50XG4gKi9cblxuLypqc2xpbnQgZXZpbDogdHJ1ZSAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBjYW5Vc2VET00gPSAhIShcbiAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgd2luZG93LmRvY3VtZW50ICYmXG4gIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50XG4pO1xuXG4vKipcbiAqIFNpbXBsZSwgbGlnaHR3ZWlnaHQgbW9kdWxlIGFzc2lzdGluZyB3aXRoIHRoZSBkZXRlY3Rpb24gYW5kIGNvbnRleHQgb2ZcbiAqIFdvcmtlci4gSGVscHMgYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jaWVzIGFuZCBhbGxvd3MgY29kZSB0byByZWFzb24gYWJvdXRcbiAqIHdoZXRoZXIgb3Igbm90IHRoZXkgYXJlIGluIGEgV29ya2VyLCBldmVuIGlmIHRoZXkgbmV2ZXIgaW5jbHVkZSB0aGUgbWFpblxuICogYFJlYWN0V29ya2VyYCBkZXBlbmRlbmN5LlxuICovXG52YXIgRXhlY3V0aW9uRW52aXJvbm1lbnQgPSB7XG5cbiAgY2FuVXNlRE9NOiBjYW5Vc2VET00sXG5cbiAgY2FuVXNlV29ya2VyczogdHlwZW9mIFdvcmtlciAhPT0gJ3VuZGVmaW5lZCcsXG5cbiAgY2FuVXNlRXZlbnRMaXN0ZW5lcnM6XG4gICAgY2FuVXNlRE9NICYmICEhKHdpbmRvdy5hZGRFdmVudExpc3RlbmVyIHx8IHdpbmRvdy5hdHRhY2hFdmVudCksXG5cbiAgY2FuVXNlVmlld3BvcnQ6IGNhblVzZURPTSAmJiAhIXdpbmRvdy5zY3JlZW4sXG5cbiAgaXNJbldvcmtlcjogIWNhblVzZURPTSAvLyBGb3Igbm93LCB0aGlzIGlzIHRydWUgLSBtaWdodCBjaGFuZ2UgaW4gdGhlIGZ1dHVyZS5cblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBFeGVjdXRpb25FbnZpcm9ubWVudDtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/normalize-wheel/src/ExecutionEnvironment.js\n");

/***/ }),

/***/ "./node_modules/normalize-wheel/src/UserAgent_DEPRECATED.js":
/*!******************************************************************!*\
  !*** ./node_modules/normalize-wheel/src/UserAgent_DEPRECATED.js ***!
  \******************************************************************/
/***/ ((module) => {

eval("/**\n * Copyright 2004-present Facebook. All Rights Reserved.\n *\n * @providesModule UserAgent_DEPRECATED\n */\n\n/**\n *  Provides entirely client-side User Agent and OS detection. You should prefer\n *  the non-deprecated UserAgent module when possible, which exposes our\n *  authoritative server-side PHP-based detection to the client.\n *\n *  Usage is straightforward:\n *\n *    if (UserAgent_DEPRECATED.ie()) {\n *      //  IE\n *    }\n *\n *  You can also do version checks:\n *\n *    if (UserAgent_DEPRECATED.ie() >= 7) {\n *      //  IE7 or better\n *    }\n *\n *  The browser functions will return NaN if the browser does not match, so\n *  you can also do version compares the other way:\n *\n *    if (UserAgent_DEPRECATED.ie() < 7) {\n *      //  IE6 or worse\n *    }\n *\n *  Note that the version is a float and may include a minor version number,\n *  so you should always use range operators to perform comparisons, not\n *  strict equality.\n *\n *  **Note:** You should **strongly** prefer capability detection to browser\n *  version detection where it's reasonable:\n *\n *    http://www.quirksmode.org/js/support.html\n *\n *  Further, we have a large number of mature wrapper functions and classes\n *  which abstract away many browser irregularities. Check the documentation,\n *  grep for things, or ask on javascript@lists.facebook.com before writing yet\n *  another copy of \"event || window.event\".\n *\n */\n\nvar _populated = false;\n\n// Browsers\nvar _ie, _firefox, _opera, _webkit, _chrome;\n\n// Actual IE browser for compatibility mode\nvar _ie_real_version;\n\n// Platforms\nvar _osx, _windows, _linux, _android;\n\n// Architectures\nvar _win64;\n\n// Devices\nvar _iphone, _ipad, _native;\n\nvar _mobile;\n\nfunction _populate() {\n  if (_populated) {\n    return;\n  }\n\n  _populated = true;\n\n  // To work around buggy JS libraries that can't handle multi-digit\n  // version numbers, Opera 10's user agent string claims it's Opera\n  // 9, then later includes a Version/X.Y field:\n  //\n  // Opera/9.80 (foo) Presto/2.2.15 Version/10.10\n  var uas = navigator.userAgent;\n  var agent = /(?:MSIE.(\\d+\\.\\d+))|(?:(?:Firefox|GranParadiso|Iceweasel).(\\d+\\.\\d+))|(?:Opera(?:.+Version.|.)(\\d+\\.\\d+))|(?:AppleWebKit.(\\d+(?:\\.\\d+)?))|(?:Trident\\/\\d+\\.\\d+.*rv:(\\d+\\.\\d+))/.exec(uas);\n  var os    = /(Mac OS X)|(Windows)|(Linux)/.exec(uas);\n\n  _iphone = /\\b(iPhone|iP[ao]d)/.exec(uas);\n  _ipad = /\\b(iP[ao]d)/.exec(uas);\n  _android = /Android/i.exec(uas);\n  _native = /FBAN\\/\\w+;/i.exec(uas);\n  _mobile = /Mobile/i.exec(uas);\n\n  // Note that the IE team blog would have you believe you should be checking\n  // for 'Win64; x64'.  But MSDN then reveals that you can actually be coming\n  // from either x64 or ia64;  so ultimately, you should just check for Win64\n  // as in indicator of whether you're in 64-bit IE.  32-bit IE on 64-bit\n  // Windows will send 'WOW64' instead.\n  _win64 = !!(/Win64/.exec(uas));\n\n  if (agent) {\n    _ie = agent[1] ? parseFloat(agent[1]) : (\n          agent[5] ? parseFloat(agent[5]) : NaN);\n    // IE compatibility mode\n    if (_ie && document && document.documentMode) {\n      _ie = document.documentMode;\n    }\n    // grab the \"true\" ie version from the trident token if available\n    var trident = /(?:Trident\\/(\\d+.\\d+))/.exec(uas);\n    _ie_real_version = trident ? parseFloat(trident[1]) + 4 : _ie;\n\n    _firefox = agent[2] ? parseFloat(agent[2]) : NaN;\n    _opera   = agent[3] ? parseFloat(agent[3]) : NaN;\n    _webkit  = agent[4] ? parseFloat(agent[4]) : NaN;\n    if (_webkit) {\n      // We do not add the regexp to the above test, because it will always\n      // match 'safari' only since 'AppleWebKit' appears before 'Chrome' in\n      // the userAgent string.\n      agent = /(?:Chrome\\/(\\d+\\.\\d+))/.exec(uas);\n      _chrome = agent && agent[1] ? parseFloat(agent[1]) : NaN;\n    } else {\n      _chrome = NaN;\n    }\n  } else {\n    _ie = _firefox = _opera = _chrome = _webkit = NaN;\n  }\n\n  if (os) {\n    if (os[1]) {\n      // Detect OS X version.  If no version number matches, set _osx to true.\n      // Version examples:  10, 10_6_1, 10.7\n      // Parses version number as a float, taking only first two sets of\n      // digits.  If only one set of digits is found, returns just the major\n      // version number.\n      var ver = /(?:Mac OS X (\\d+(?:[._]\\d+)?))/.exec(uas);\n\n      _osx = ver ? parseFloat(ver[1].replace('_', '.')) : true;\n    } else {\n      _osx = false;\n    }\n    _windows = !!os[2];\n    _linux   = !!os[3];\n  } else {\n    _osx = _windows = _linux = false;\n  }\n}\n\nvar UserAgent_DEPRECATED = {\n\n  /**\n   *  Check if the UA is Internet Explorer.\n   *\n   *\n   *  @return float|NaN Version number (if match) or NaN.\n   */\n  ie: function() {\n    return _populate() || _ie;\n  },\n\n  /**\n   * Check if we're in Internet Explorer compatibility mode.\n   *\n   * @return bool true if in compatibility mode, false if\n   * not compatibility mode or not ie\n   */\n  ieCompatibilityMode: function() {\n    return _populate() || (_ie_real_version > _ie);\n  },\n\n\n  /**\n   * Whether the browser is 64-bit IE.  Really, this is kind of weak sauce;  we\n   * only need this because Skype can't handle 64-bit IE yet.  We need to remove\n   * this when we don't need it -- tracked by #601957.\n   */\n  ie64: function() {\n    return UserAgent_DEPRECATED.ie() && _win64;\n  },\n\n  /**\n   *  Check if the UA is Firefox.\n   *\n   *\n   *  @return float|NaN Version number (if match) or NaN.\n   */\n  firefox: function() {\n    return _populate() || _firefox;\n  },\n\n\n  /**\n   *  Check if the UA is Opera.\n   *\n   *\n   *  @return float|NaN Version number (if match) or NaN.\n   */\n  opera: function() {\n    return _populate() || _opera;\n  },\n\n\n  /**\n   *  Check if the UA is WebKit.\n   *\n   *\n   *  @return float|NaN Version number (if match) or NaN.\n   */\n  webkit: function() {\n    return _populate() || _webkit;\n  },\n\n  /**\n   *  For Push\n   *  WILL BE REMOVED VERY SOON. Use UserAgent_DEPRECATED.webkit\n   */\n  safari: function() {\n    return UserAgent_DEPRECATED.webkit();\n  },\n\n  /**\n   *  Check if the UA is a Chrome browser.\n   *\n   *\n   *  @return float|NaN Version number (if match) or NaN.\n   */\n  chrome : function() {\n    return _populate() || _chrome;\n  },\n\n\n  /**\n   *  Check if the user is running Windows.\n   *\n   *  @return bool `true' if the user's OS is Windows.\n   */\n  windows: function() {\n    return _populate() || _windows;\n  },\n\n\n  /**\n   *  Check if the user is running Mac OS X.\n   *\n   *  @return float|bool   Returns a float if a version number is detected,\n   *                       otherwise true/false.\n   */\n  osx: function() {\n    return _populate() || _osx;\n  },\n\n  /**\n   * Check if the user is running Linux.\n   *\n   * @return bool `true' if the user's OS is some flavor of Linux.\n   */\n  linux: function() {\n    return _populate() || _linux;\n  },\n\n  /**\n   * Check if the user is running on an iPhone or iPod platform.\n   *\n   * @return bool `true' if the user is running some flavor of the\n   *    iPhone OS.\n   */\n  iphone: function() {\n    return _populate() || _iphone;\n  },\n\n  mobile: function() {\n    return _populate() || (_iphone || _ipad || _android || _mobile);\n  },\n\n  nativeApp: function() {\n    // webviews inside of the native apps\n    return _populate() || _native;\n  },\n\n  android: function() {\n    return _populate() || _android;\n  },\n\n  ipad: function() {\n    return _populate() || _ipad;\n  }\n};\n\nmodule.exports = UserAgent_DEPRECATED;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbm9ybWFsaXplLXdoZWVsL3NyYy9Vc2VyQWdlbnRfREVQUkVDQVRFRC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7O0FBRUE7QUFDQSxpQkFBaUI7QUFDakIsK0JBQStCO0FBQy9CO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBLDZFQUE2RTtBQUM3RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbm9ybWFsaXplLXdoZWVsL3NyYy9Vc2VyQWdlbnRfREVQUkVDQVRFRC5qcz84MTMzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IDIwMDQtcHJlc2VudCBGYWNlYm9vay4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgVXNlckFnZW50X0RFUFJFQ0FURURcbiAqL1xuXG4vKipcbiAqICBQcm92aWRlcyBlbnRpcmVseSBjbGllbnQtc2lkZSBVc2VyIEFnZW50IGFuZCBPUyBkZXRlY3Rpb24uIFlvdSBzaG91bGQgcHJlZmVyXG4gKiAgdGhlIG5vbi1kZXByZWNhdGVkIFVzZXJBZ2VudCBtb2R1bGUgd2hlbiBwb3NzaWJsZSwgd2hpY2ggZXhwb3NlcyBvdXJcbiAqICBhdXRob3JpdGF0aXZlIHNlcnZlci1zaWRlIFBIUC1iYXNlZCBkZXRlY3Rpb24gdG8gdGhlIGNsaWVudC5cbiAqXG4gKiAgVXNhZ2UgaXMgc3RyYWlnaHRmb3J3YXJkOlxuICpcbiAqICAgIGlmIChVc2VyQWdlbnRfREVQUkVDQVRFRC5pZSgpKSB7XG4gKiAgICAgIC8vICBJRVxuICogICAgfVxuICpcbiAqICBZb3UgY2FuIGFsc28gZG8gdmVyc2lvbiBjaGVja3M6XG4gKlxuICogICAgaWYgKFVzZXJBZ2VudF9ERVBSRUNBVEVELmllKCkgPj0gNykge1xuICogICAgICAvLyAgSUU3IG9yIGJldHRlclxuICogICAgfVxuICpcbiAqICBUaGUgYnJvd3NlciBmdW5jdGlvbnMgd2lsbCByZXR1cm4gTmFOIGlmIHRoZSBicm93c2VyIGRvZXMgbm90IG1hdGNoLCBzb1xuICogIHlvdSBjYW4gYWxzbyBkbyB2ZXJzaW9uIGNvbXBhcmVzIHRoZSBvdGhlciB3YXk6XG4gKlxuICogICAgaWYgKFVzZXJBZ2VudF9ERVBSRUNBVEVELmllKCkgPCA3KSB7XG4gKiAgICAgIC8vICBJRTYgb3Igd29yc2VcbiAqICAgIH1cbiAqXG4gKiAgTm90ZSB0aGF0IHRoZSB2ZXJzaW9uIGlzIGEgZmxvYXQgYW5kIG1heSBpbmNsdWRlIGEgbWlub3IgdmVyc2lvbiBudW1iZXIsXG4gKiAgc28geW91IHNob3VsZCBhbHdheXMgdXNlIHJhbmdlIG9wZXJhdG9ycyB0byBwZXJmb3JtIGNvbXBhcmlzb25zLCBub3RcbiAqICBzdHJpY3QgZXF1YWxpdHkuXG4gKlxuICogICoqTm90ZToqKiBZb3Ugc2hvdWxkICoqc3Ryb25nbHkqKiBwcmVmZXIgY2FwYWJpbGl0eSBkZXRlY3Rpb24gdG8gYnJvd3NlclxuICogIHZlcnNpb24gZGV0ZWN0aW9uIHdoZXJlIGl0J3MgcmVhc29uYWJsZTpcbiAqXG4gKiAgICBodHRwOi8vd3d3LnF1aXJrc21vZGUub3JnL2pzL3N1cHBvcnQuaHRtbFxuICpcbiAqICBGdXJ0aGVyLCB3ZSBoYXZlIGEgbGFyZ2UgbnVtYmVyIG9mIG1hdHVyZSB3cmFwcGVyIGZ1bmN0aW9ucyBhbmQgY2xhc3Nlc1xuICogIHdoaWNoIGFic3RyYWN0IGF3YXkgbWFueSBicm93c2VyIGlycmVndWxhcml0aWVzLiBDaGVjayB0aGUgZG9jdW1lbnRhdGlvbixcbiAqICBncmVwIGZvciB0aGluZ3MsIG9yIGFzayBvbiBqYXZhc2NyaXB0QGxpc3RzLmZhY2Vib29rLmNvbSBiZWZvcmUgd3JpdGluZyB5ZXRcbiAqICBhbm90aGVyIGNvcHkgb2YgXCJldmVudCB8fCB3aW5kb3cuZXZlbnRcIi5cbiAqXG4gKi9cblxudmFyIF9wb3B1bGF0ZWQgPSBmYWxzZTtcblxuLy8gQnJvd3NlcnNcbnZhciBfaWUsIF9maXJlZm94LCBfb3BlcmEsIF93ZWJraXQsIF9jaHJvbWU7XG5cbi8vIEFjdHVhbCBJRSBicm93c2VyIGZvciBjb21wYXRpYmlsaXR5IG1vZGVcbnZhciBfaWVfcmVhbF92ZXJzaW9uO1xuXG4vLyBQbGF0Zm9ybXNcbnZhciBfb3N4LCBfd2luZG93cywgX2xpbnV4LCBfYW5kcm9pZDtcblxuLy8gQXJjaGl0ZWN0dXJlc1xudmFyIF93aW42NDtcblxuLy8gRGV2aWNlc1xudmFyIF9pcGhvbmUsIF9pcGFkLCBfbmF0aXZlO1xuXG52YXIgX21vYmlsZTtcblxuZnVuY3Rpb24gX3BvcHVsYXRlKCkge1xuICBpZiAoX3BvcHVsYXRlZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIF9wb3B1bGF0ZWQgPSB0cnVlO1xuXG4gIC8vIFRvIHdvcmsgYXJvdW5kIGJ1Z2d5IEpTIGxpYnJhcmllcyB0aGF0IGNhbid0IGhhbmRsZSBtdWx0aS1kaWdpdFxuICAvLyB2ZXJzaW9uIG51bWJlcnMsIE9wZXJhIDEwJ3MgdXNlciBhZ2VudCBzdHJpbmcgY2xhaW1zIGl0J3MgT3BlcmFcbiAgLy8gOSwgdGhlbiBsYXRlciBpbmNsdWRlcyBhIFZlcnNpb24vWC5ZIGZpZWxkOlxuICAvL1xuICAvLyBPcGVyYS85LjgwIChmb28pIFByZXN0by8yLjIuMTUgVmVyc2lvbi8xMC4xMFxuICB2YXIgdWFzID0gbmF2aWdhdG9yLnVzZXJBZ2VudDtcbiAgdmFyIGFnZW50ID0gLyg/Ok1TSUUuKFxcZCtcXC5cXGQrKSl8KD86KD86RmlyZWZveHxHcmFuUGFyYWRpc298SWNld2Vhc2VsKS4oXFxkK1xcLlxcZCspKXwoPzpPcGVyYSg/Oi4rVmVyc2lvbi58LikoXFxkK1xcLlxcZCspKXwoPzpBcHBsZVdlYktpdC4oXFxkKyg/OlxcLlxcZCspPykpfCg/OlRyaWRlbnRcXC9cXGQrXFwuXFxkKy4qcnY6KFxcZCtcXC5cXGQrKSkvLmV4ZWModWFzKTtcbiAgdmFyIG9zICAgID0gLyhNYWMgT1MgWCl8KFdpbmRvd3MpfChMaW51eCkvLmV4ZWModWFzKTtcblxuICBfaXBob25lID0gL1xcYihpUGhvbmV8aVBbYW9dZCkvLmV4ZWModWFzKTtcbiAgX2lwYWQgPSAvXFxiKGlQW2FvXWQpLy5leGVjKHVhcyk7XG4gIF9hbmRyb2lkID0gL0FuZHJvaWQvaS5leGVjKHVhcyk7XG4gIF9uYXRpdmUgPSAvRkJBTlxcL1xcdys7L2kuZXhlYyh1YXMpO1xuICBfbW9iaWxlID0gL01vYmlsZS9pLmV4ZWModWFzKTtcblxuICAvLyBOb3RlIHRoYXQgdGhlIElFIHRlYW0gYmxvZyB3b3VsZCBoYXZlIHlvdSBiZWxpZXZlIHlvdSBzaG91bGQgYmUgY2hlY2tpbmdcbiAgLy8gZm9yICdXaW42NDsgeDY0Jy4gIEJ1dCBNU0ROIHRoZW4gcmV2ZWFscyB0aGF0IHlvdSBjYW4gYWN0dWFsbHkgYmUgY29taW5nXG4gIC8vIGZyb20gZWl0aGVyIHg2NCBvciBpYTY0OyAgc28gdWx0aW1hdGVseSwgeW91IHNob3VsZCBqdXN0IGNoZWNrIGZvciBXaW42NFxuICAvLyBhcyBpbiBpbmRpY2F0b3Igb2Ygd2hldGhlciB5b3UncmUgaW4gNjQtYml0IElFLiAgMzItYml0IElFIG9uIDY0LWJpdFxuICAvLyBXaW5kb3dzIHdpbGwgc2VuZCAnV09XNjQnIGluc3RlYWQuXG4gIF93aW42NCA9ICEhKC9XaW42NC8uZXhlYyh1YXMpKTtcblxuICBpZiAoYWdlbnQpIHtcbiAgICBfaWUgPSBhZ2VudFsxXSA/IHBhcnNlRmxvYXQoYWdlbnRbMV0pIDogKFxuICAgICAgICAgIGFnZW50WzVdID8gcGFyc2VGbG9hdChhZ2VudFs1XSkgOiBOYU4pO1xuICAgIC8vIElFIGNvbXBhdGliaWxpdHkgbW9kZVxuICAgIGlmIChfaWUgJiYgZG9jdW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRNb2RlKSB7XG4gICAgICBfaWUgPSBkb2N1bWVudC5kb2N1bWVudE1vZGU7XG4gICAgfVxuICAgIC8vIGdyYWIgdGhlIFwidHJ1ZVwiIGllIHZlcnNpb24gZnJvbSB0aGUgdHJpZGVudCB0b2tlbiBpZiBhdmFpbGFibGVcbiAgICB2YXIgdHJpZGVudCA9IC8oPzpUcmlkZW50XFwvKFxcZCsuXFxkKykpLy5leGVjKHVhcyk7XG4gICAgX2llX3JlYWxfdmVyc2lvbiA9IHRyaWRlbnQgPyBwYXJzZUZsb2F0KHRyaWRlbnRbMV0pICsgNCA6IF9pZTtcblxuICAgIF9maXJlZm94ID0gYWdlbnRbMl0gPyBwYXJzZUZsb2F0KGFnZW50WzJdKSA6IE5hTjtcbiAgICBfb3BlcmEgICA9IGFnZW50WzNdID8gcGFyc2VGbG9hdChhZ2VudFszXSkgOiBOYU47XG4gICAgX3dlYmtpdCAgPSBhZ2VudFs0XSA/IHBhcnNlRmxvYXQoYWdlbnRbNF0pIDogTmFOO1xuICAgIGlmIChfd2Via2l0KSB7XG4gICAgICAvLyBXZSBkbyBub3QgYWRkIHRoZSByZWdleHAgdG8gdGhlIGFib3ZlIHRlc3QsIGJlY2F1c2UgaXQgd2lsbCBhbHdheXNcbiAgICAgIC8vIG1hdGNoICdzYWZhcmknIG9ubHkgc2luY2UgJ0FwcGxlV2ViS2l0JyBhcHBlYXJzIGJlZm9yZSAnQ2hyb21lJyBpblxuICAgICAgLy8gdGhlIHVzZXJBZ2VudCBzdHJpbmcuXG4gICAgICBhZ2VudCA9IC8oPzpDaHJvbWVcXC8oXFxkK1xcLlxcZCspKS8uZXhlYyh1YXMpO1xuICAgICAgX2Nocm9tZSA9IGFnZW50ICYmIGFnZW50WzFdID8gcGFyc2VGbG9hdChhZ2VudFsxXSkgOiBOYU47XG4gICAgfSBlbHNlIHtcbiAgICAgIF9jaHJvbWUgPSBOYU47XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIF9pZSA9IF9maXJlZm94ID0gX29wZXJhID0gX2Nocm9tZSA9IF93ZWJraXQgPSBOYU47XG4gIH1cblxuICBpZiAob3MpIHtcbiAgICBpZiAob3NbMV0pIHtcbiAgICAgIC8vIERldGVjdCBPUyBYIHZlcnNpb24uICBJZiBubyB2ZXJzaW9uIG51bWJlciBtYXRjaGVzLCBzZXQgX29zeCB0byB0cnVlLlxuICAgICAgLy8gVmVyc2lvbiBleGFtcGxlczogIDEwLCAxMF82XzEsIDEwLjdcbiAgICAgIC8vIFBhcnNlcyB2ZXJzaW9uIG51bWJlciBhcyBhIGZsb2F0LCB0YWtpbmcgb25seSBmaXJzdCB0d28gc2V0cyBvZlxuICAgICAgLy8gZGlnaXRzLiAgSWYgb25seSBvbmUgc2V0IG9mIGRpZ2l0cyBpcyBmb3VuZCwgcmV0dXJucyBqdXN0IHRoZSBtYWpvclxuICAgICAgLy8gdmVyc2lvbiBudW1iZXIuXG4gICAgICB2YXIgdmVyID0gLyg/Ok1hYyBPUyBYIChcXGQrKD86Wy5fXVxcZCspPykpLy5leGVjKHVhcyk7XG5cbiAgICAgIF9vc3ggPSB2ZXIgPyBwYXJzZUZsb2F0KHZlclsxXS5yZXBsYWNlKCdfJywgJy4nKSkgOiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBfb3N4ID0gZmFsc2U7XG4gICAgfVxuICAgIF93aW5kb3dzID0gISFvc1syXTtcbiAgICBfbGludXggICA9ICEhb3NbM107XG4gIH0gZWxzZSB7XG4gICAgX29zeCA9IF93aW5kb3dzID0gX2xpbnV4ID0gZmFsc2U7XG4gIH1cbn1cblxudmFyIFVzZXJBZ2VudF9ERVBSRUNBVEVEID0ge1xuXG4gIC8qKlxuICAgKiAgQ2hlY2sgaWYgdGhlIFVBIGlzIEludGVybmV0IEV4cGxvcmVyLlxuICAgKlxuICAgKlxuICAgKiAgQHJldHVybiBmbG9hdHxOYU4gVmVyc2lvbiBudW1iZXIgKGlmIG1hdGNoKSBvciBOYU4uXG4gICAqL1xuICBpZTogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIF9wb3B1bGF0ZSgpIHx8IF9pZTtcbiAgfSxcblxuICAvKipcbiAgICogQ2hlY2sgaWYgd2UncmUgaW4gSW50ZXJuZXQgRXhwbG9yZXIgY29tcGF0aWJpbGl0eSBtb2RlLlxuICAgKlxuICAgKiBAcmV0dXJuIGJvb2wgdHJ1ZSBpZiBpbiBjb21wYXRpYmlsaXR5IG1vZGUsIGZhbHNlIGlmXG4gICAqIG5vdCBjb21wYXRpYmlsaXR5IG1vZGUgb3Igbm90IGllXG4gICAqL1xuICBpZUNvbXBhdGliaWxpdHlNb2RlOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gX3BvcHVsYXRlKCkgfHwgKF9pZV9yZWFsX3ZlcnNpb24gPiBfaWUpO1xuICB9LFxuXG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGJyb3dzZXIgaXMgNjQtYml0IElFLiAgUmVhbGx5LCB0aGlzIGlzIGtpbmQgb2Ygd2VhayBzYXVjZTsgIHdlXG4gICAqIG9ubHkgbmVlZCB0aGlzIGJlY2F1c2UgU2t5cGUgY2FuJ3QgaGFuZGxlIDY0LWJpdCBJRSB5ZXQuICBXZSBuZWVkIHRvIHJlbW92ZVxuICAgKiB0aGlzIHdoZW4gd2UgZG9uJ3QgbmVlZCBpdCAtLSB0cmFja2VkIGJ5ICM2MDE5NTcuXG4gICAqL1xuICBpZTY0OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gVXNlckFnZW50X0RFUFJFQ0FURUQuaWUoKSAmJiBfd2luNjQ7XG4gIH0sXG5cbiAgLyoqXG4gICAqICBDaGVjayBpZiB0aGUgVUEgaXMgRmlyZWZveC5cbiAgICpcbiAgICpcbiAgICogIEByZXR1cm4gZmxvYXR8TmFOIFZlcnNpb24gbnVtYmVyIChpZiBtYXRjaCkgb3IgTmFOLlxuICAgKi9cbiAgZmlyZWZveDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIF9wb3B1bGF0ZSgpIHx8IF9maXJlZm94O1xuICB9LFxuXG5cbiAgLyoqXG4gICAqICBDaGVjayBpZiB0aGUgVUEgaXMgT3BlcmEuXG4gICAqXG4gICAqXG4gICAqICBAcmV0dXJuIGZsb2F0fE5hTiBWZXJzaW9uIG51bWJlciAoaWYgbWF0Y2gpIG9yIE5hTi5cbiAgICovXG4gIG9wZXJhOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gX3BvcHVsYXRlKCkgfHwgX29wZXJhO1xuICB9LFxuXG5cbiAgLyoqXG4gICAqICBDaGVjayBpZiB0aGUgVUEgaXMgV2ViS2l0LlxuICAgKlxuICAgKlxuICAgKiAgQHJldHVybiBmbG9hdHxOYU4gVmVyc2lvbiBudW1iZXIgKGlmIG1hdGNoKSBvciBOYU4uXG4gICAqL1xuICB3ZWJraXQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBfcG9wdWxhdGUoKSB8fCBfd2Via2l0O1xuICB9LFxuXG4gIC8qKlxuICAgKiAgRm9yIFB1c2hcbiAgICogIFdJTEwgQkUgUkVNT1ZFRCBWRVJZIFNPT04uIFVzZSBVc2VyQWdlbnRfREVQUkVDQVRFRC53ZWJraXRcbiAgICovXG4gIHNhZmFyaTogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFVzZXJBZ2VudF9ERVBSRUNBVEVELndlYmtpdCgpO1xuICB9LFxuXG4gIC8qKlxuICAgKiAgQ2hlY2sgaWYgdGhlIFVBIGlzIGEgQ2hyb21lIGJyb3dzZXIuXG4gICAqXG4gICAqXG4gICAqICBAcmV0dXJuIGZsb2F0fE5hTiBWZXJzaW9uIG51bWJlciAoaWYgbWF0Y2gpIG9yIE5hTi5cbiAgICovXG4gIGNocm9tZSA6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBfcG9wdWxhdGUoKSB8fCBfY2hyb21lO1xuICB9LFxuXG5cbiAgLyoqXG4gICAqICBDaGVjayBpZiB0aGUgdXNlciBpcyBydW5uaW5nIFdpbmRvd3MuXG4gICAqXG4gICAqICBAcmV0dXJuIGJvb2wgYHRydWUnIGlmIHRoZSB1c2VyJ3MgT1MgaXMgV2luZG93cy5cbiAgICovXG4gIHdpbmRvd3M6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBfcG9wdWxhdGUoKSB8fCBfd2luZG93cztcbiAgfSxcblxuXG4gIC8qKlxuICAgKiAgQ2hlY2sgaWYgdGhlIHVzZXIgaXMgcnVubmluZyBNYWMgT1MgWC5cbiAgICpcbiAgICogIEByZXR1cm4gZmxvYXR8Ym9vbCAgIFJldHVybnMgYSBmbG9hdCBpZiBhIHZlcnNpb24gbnVtYmVyIGlzIGRldGVjdGVkLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgb3RoZXJ3aXNlIHRydWUvZmFsc2UuXG4gICAqL1xuICBvc3g6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBfcG9wdWxhdGUoKSB8fCBfb3N4O1xuICB9LFxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0aGUgdXNlciBpcyBydW5uaW5nIExpbnV4LlxuICAgKlxuICAgKiBAcmV0dXJuIGJvb2wgYHRydWUnIGlmIHRoZSB1c2VyJ3MgT1MgaXMgc29tZSBmbGF2b3Igb2YgTGludXguXG4gICAqL1xuICBsaW51eDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIF9wb3B1bGF0ZSgpIHx8IF9saW51eDtcbiAgfSxcblxuICAvKipcbiAgICogQ2hlY2sgaWYgdGhlIHVzZXIgaXMgcnVubmluZyBvbiBhbiBpUGhvbmUgb3IgaVBvZCBwbGF0Zm9ybS5cbiAgICpcbiAgICogQHJldHVybiBib29sIGB0cnVlJyBpZiB0aGUgdXNlciBpcyBydW5uaW5nIHNvbWUgZmxhdm9yIG9mIHRoZVxuICAgKiAgICBpUGhvbmUgT1MuXG4gICAqL1xuICBpcGhvbmU6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBfcG9wdWxhdGUoKSB8fCBfaXBob25lO1xuICB9LFxuXG4gIG1vYmlsZTogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIF9wb3B1bGF0ZSgpIHx8IChfaXBob25lIHx8IF9pcGFkIHx8IF9hbmRyb2lkIHx8IF9tb2JpbGUpO1xuICB9LFxuXG4gIG5hdGl2ZUFwcDogZnVuY3Rpb24oKSB7XG4gICAgLy8gd2Vidmlld3MgaW5zaWRlIG9mIHRoZSBuYXRpdmUgYXBwc1xuICAgIHJldHVybiBfcG9wdWxhdGUoKSB8fCBfbmF0aXZlO1xuICB9LFxuXG4gIGFuZHJvaWQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBfcG9wdWxhdGUoKSB8fCBfYW5kcm9pZDtcbiAgfSxcblxuICBpcGFkOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gX3BvcHVsYXRlKCkgfHwgX2lwYWQ7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gVXNlckFnZW50X0RFUFJFQ0FURUQ7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/normalize-wheel/src/UserAgent_DEPRECATED.js\n");

/***/ }),

/***/ "./node_modules/normalize-wheel/src/isEventSupported.js":
/*!**************************************************************!*\
  !*** ./node_modules/normalize-wheel/src/isEventSupported.js ***!
  \**************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";
eval("/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule isEventSupported\n */\n\n\n\nvar ExecutionEnvironment = __webpack_require__(/*! ./ExecutionEnvironment */ \"./node_modules/normalize-wheel/src/ExecutionEnvironment.js\");\n\nvar useHasFeature;\nif (ExecutionEnvironment.canUseDOM) {\n  useHasFeature =\n    document.implementation &&\n    document.implementation.hasFeature &&\n    // always returns true in newer browsers as per the standard.\n    // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature\n    document.implementation.hasFeature('', '') !== true;\n}\n\n/**\n * Checks if an event is supported in the current execution environment.\n *\n * NOTE: This will not work correctly for non-generic events such as `change`,\n * `reset`, `load`, `error`, and `select`.\n *\n * Borrows from Modernizr.\n *\n * @param {string} eventNameSuffix Event name, e.g. \"click\".\n * @param {?boolean} capture Check if the capture phase is supported.\n * @return {boolean} True if the event is supported.\n * @internal\n * @license Modernizr 3.0.0pre (Custom Build) | MIT\n */\nfunction isEventSupported(eventNameSuffix, capture) {\n  if (!ExecutionEnvironment.canUseDOM ||\n      capture && !('addEventListener' in document)) {\n    return false;\n  }\n\n  var eventName = 'on' + eventNameSuffix;\n  var isSupported = eventName in document;\n\n  if (!isSupported) {\n    var element = document.createElement('div');\n    element.setAttribute(eventName, 'return;');\n    isSupported = typeof element[eventName] === 'function';\n  }\n\n  if (!isSupported && useHasFeature && eventNameSuffix === 'wheel') {\n    // This is the only way to test support for the `wheel` event in IE9+.\n    isSupported = document.implementation.hasFeature('Events.wheel', '3.0');\n  }\n\n  return isSupported;\n}\n\nmodule.exports = isEventSupported;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbm9ybWFsaXplLXdoZWVsL3NyYy9pc0V2ZW50U3VwcG9ydGVkLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVhOztBQUViLDJCQUEyQixtQkFBTyxDQUFDLDBGQUF3Qjs7QUFFM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxVQUFVO0FBQ3JCLFlBQVksU0FBUztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDRDQUE0QztBQUM1QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbm9ybWFsaXplLXdoZWVsL3NyYy9pc0V2ZW50U3VwcG9ydGVkLmpzPzJhOGIiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIGlzRXZlbnRTdXBwb3J0ZWRcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBFeGVjdXRpb25FbnZpcm9ubWVudCA9IHJlcXVpcmUoJy4vRXhlY3V0aW9uRW52aXJvbm1lbnQnKTtcblxudmFyIHVzZUhhc0ZlYXR1cmU7XG5pZiAoRXhlY3V0aW9uRW52aXJvbm1lbnQuY2FuVXNlRE9NKSB7XG4gIHVzZUhhc0ZlYXR1cmUgPVxuICAgIGRvY3VtZW50LmltcGxlbWVudGF0aW9uICYmXG4gICAgZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uaGFzRmVhdHVyZSAmJlxuICAgIC8vIGFsd2F5cyByZXR1cm5zIHRydWUgaW4gbmV3ZXIgYnJvd3NlcnMgYXMgcGVyIHRoZSBzdGFuZGFyZC5cbiAgICAvLyBAc2VlIGh0dHA6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNkb20tZG9taW1wbGVtZW50YXRpb24taGFzZmVhdHVyZVxuICAgIGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmhhc0ZlYXR1cmUoJycsICcnKSAhPT0gdHJ1ZTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYW4gZXZlbnQgaXMgc3VwcG9ydGVkIGluIHRoZSBjdXJyZW50IGV4ZWN1dGlvbiBlbnZpcm9ubWVudC5cbiAqXG4gKiBOT1RFOiBUaGlzIHdpbGwgbm90IHdvcmsgY29ycmVjdGx5IGZvciBub24tZ2VuZXJpYyBldmVudHMgc3VjaCBhcyBgY2hhbmdlYCxcbiAqIGByZXNldGAsIGBsb2FkYCwgYGVycm9yYCwgYW5kIGBzZWxlY3RgLlxuICpcbiAqIEJvcnJvd3MgZnJvbSBNb2Rlcm5penIuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZVN1ZmZpeCBFdmVudCBuYW1lLCBlLmcuIFwiY2xpY2tcIi5cbiAqIEBwYXJhbSB7P2Jvb2xlYW59IGNhcHR1cmUgQ2hlY2sgaWYgdGhlIGNhcHR1cmUgcGhhc2UgaXMgc3VwcG9ydGVkLlxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgZXZlbnQgaXMgc3VwcG9ydGVkLlxuICogQGludGVybmFsXG4gKiBAbGljZW5zZSBNb2Rlcm5penIgMy4wLjBwcmUgKEN1c3RvbSBCdWlsZCkgfCBNSVRcbiAqL1xuZnVuY3Rpb24gaXNFdmVudFN1cHBvcnRlZChldmVudE5hbWVTdWZmaXgsIGNhcHR1cmUpIHtcbiAgaWYgKCFFeGVjdXRpb25FbnZpcm9ubWVudC5jYW5Vc2VET00gfHxcbiAgICAgIGNhcHR1cmUgJiYgISgnYWRkRXZlbnRMaXN0ZW5lcicgaW4gZG9jdW1lbnQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIGV2ZW50TmFtZSA9ICdvbicgKyBldmVudE5hbWVTdWZmaXg7XG4gIHZhciBpc1N1cHBvcnRlZCA9IGV2ZW50TmFtZSBpbiBkb2N1bWVudDtcblxuICBpZiAoIWlzU3VwcG9ydGVkKSB7XG4gICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShldmVudE5hbWUsICdyZXR1cm47Jyk7XG4gICAgaXNTdXBwb3J0ZWQgPSB0eXBlb2YgZWxlbWVudFtldmVudE5hbWVdID09PSAnZnVuY3Rpb24nO1xuICB9XG5cbiAgaWYgKCFpc1N1cHBvcnRlZCAmJiB1c2VIYXNGZWF0dXJlICYmIGV2ZW50TmFtZVN1ZmZpeCA9PT0gJ3doZWVsJykge1xuICAgIC8vIFRoaXMgaXMgdGhlIG9ubHkgd2F5IHRvIHRlc3Qgc3VwcG9ydCBmb3IgdGhlIGB3aGVlbGAgZXZlbnQgaW4gSUU5Ky5cbiAgICBpc1N1cHBvcnRlZCA9IGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmhhc0ZlYXR1cmUoJ0V2ZW50cy53aGVlbCcsICczLjAnKTtcbiAgfVxuXG4gIHJldHVybiBpc1N1cHBvcnRlZDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0V2ZW50U3VwcG9ydGVkO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/normalize-wheel/src/isEventSupported.js\n");

/***/ }),

/***/ "./node_modules/normalize-wheel/src/normalizeWheel.js":
/*!************************************************************!*\
  !*** ./node_modules/normalize-wheel/src/normalizeWheel.js ***!
  \************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";
eval("/**\n * Copyright (c) 2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule normalizeWheel\n * @typechecks\n */\n\n\n\nvar UserAgent_DEPRECATED = __webpack_require__(/*! ./UserAgent_DEPRECATED */ \"./node_modules/normalize-wheel/src/UserAgent_DEPRECATED.js\");\n\nvar isEventSupported = __webpack_require__(/*! ./isEventSupported */ \"./node_modules/normalize-wheel/src/isEventSupported.js\");\n\n\n// Reasonable defaults\nvar PIXEL_STEP  = 10;\nvar LINE_HEIGHT = 40;\nvar PAGE_HEIGHT = 800;\n\n/**\n * Mouse wheel (and 2-finger trackpad) support on the web sucks.  It is\n * complicated, thus this doc is long and (hopefully) detailed enough to answer\n * your questions.\n *\n * If you need to react to the mouse wheel in a predictable way, this code is\n * like your bestest friend. * hugs *\n *\n * As of today, there are 4 DOM event types you can listen to:\n *\n *   'wheel'                -- Chrome(31+), FF(17+), IE(9+)\n *   'mousewheel'           -- Chrome, IE(6+), Opera, Safari\n *   'MozMousePixelScroll'  -- FF(3.5 only!) (2010-2013) -- don't bother!\n *   'DOMMouseScroll'       -- FF(0.9.7+) since 2003\n *\n * So what to do?  The is the best:\n *\n *   normalizeWheel.getEventType();\n *\n * In your event callback, use this code to get sane interpretation of the\n * deltas.  This code will return an object with properties:\n *\n *   spinX   -- normalized spin speed (use for zoom) - x plane\n *   spinY   -- \" - y plane\n *   pixelX  -- normalized distance (to pixels) - x plane\n *   pixelY  -- \" - y plane\n *\n * Wheel values are provided by the browser assuming you are using the wheel to\n * scroll a web page by a number of lines or pixels (or pages).  Values can vary\n * significantly on different platforms and browsers, forgetting that you can\n * scroll at different speeds.  Some devices (like trackpads) emit more events\n * at smaller increments with fine granularity, and some emit massive jumps with\n * linear speed or acceleration.\n *\n * This code does its best to normalize the deltas for you:\n *\n *   - spin is trying to normalize how far the wheel was spun (or trackpad\n *     dragged).  This is super useful for zoom support where you want to\n *     throw away the chunky scroll steps on the PC and make those equal to\n *     the slow and smooth tiny steps on the Mac. Key data: This code tries to\n *     resolve a single slow step on a wheel to 1.\n *\n *   - pixel is normalizing the desired scroll delta in pixel units.  You'll\n *     get the crazy differences between browsers, but at least it'll be in\n *     pixels!\n *\n *   - positive value indicates scrolling DOWN/RIGHT, negative UP/LEFT.  This\n *     should translate to positive value zooming IN, negative zooming OUT.\n *     This matches the newer 'wheel' event.\n *\n * Why are there spinX, spinY (or pixels)?\n *\n *   - spinX is a 2-finger side drag on the trackpad, and a shift + wheel turn\n *     with a mouse.  It results in side-scrolling in the browser by default.\n *\n *   - spinY is what you expect -- it's the classic axis of a mouse wheel.\n *\n *   - I dropped spinZ/pixelZ.  It is supported by the DOM 3 'wheel' event and\n *     probably is by browsers in conjunction with fancy 3D controllers .. but\n *     you know.\n *\n * Implementation info:\n *\n * Examples of 'wheel' event if you scroll slowly (down) by one step with an\n * average mouse:\n *\n *   OS X + Chrome  (mouse)     -    4   pixel delta  (wheelDelta -120)\n *   OS X + Safari  (mouse)     -  N/A   pixel delta  (wheelDelta  -12)\n *   OS X + Firefox (mouse)     -    0.1 line  delta  (wheelDelta  N/A)\n *   Win8 + Chrome  (mouse)     -  100   pixel delta  (wheelDelta -120)\n *   Win8 + Firefox (mouse)     -    3   line  delta  (wheelDelta -120)\n *\n * On the trackpad:\n *\n *   OS X + Chrome  (trackpad)  -    2   pixel delta  (wheelDelta   -6)\n *   OS X + Firefox (trackpad)  -    1   pixel delta  (wheelDelta  N/A)\n *\n * On other/older browsers.. it's more complicated as there can be multiple and\n * also missing delta values.\n *\n * The 'wheel' event is more standard:\n *\n * http://www.w3.org/TR/DOM-Level-3-Events/#events-wheelevents\n *\n * The basics is that it includes a unit, deltaMode (pixels, lines, pages), and\n * deltaX, deltaY and deltaZ.  Some browsers provide other values to maintain\n * backward compatibility with older events.  Those other values help us\n * better normalize spin speed.  Example of what the browsers provide:\n *\n *                          | event.wheelDelta | event.detail\n *        ------------------+------------------+--------------\n *          Safari v5/OS X  |       -120       |       0\n *          Safari v5/Win7  |       -120       |       0\n *         Chrome v17/OS X  |       -120       |       0\n *         Chrome v17/Win7  |       -120       |       0\n *                IE9/Win7  |       -120       |   undefined\n *         Firefox v4/OS X  |     undefined    |       1\n *         Firefox v4/Win7  |     undefined    |       3\n *\n */\nfunction normalizeWheel(/*object*/ event) /*object*/ {\n  var sX = 0, sY = 0,       // spinX, spinY\n      pX = 0, pY = 0;       // pixelX, pixelY\n\n  // Legacy\n  if ('detail'      in event) { sY = event.detail; }\n  if ('wheelDelta'  in event) { sY = -event.wheelDelta / 120; }\n  if ('wheelDeltaY' in event) { sY = -event.wheelDeltaY / 120; }\n  if ('wheelDeltaX' in event) { sX = -event.wheelDeltaX / 120; }\n\n  // side scrolling on FF with DOMMouseScroll\n  if ( 'axis' in event && event.axis === event.HORIZONTAL_AXIS ) {\n    sX = sY;\n    sY = 0;\n  }\n\n  pX = sX * PIXEL_STEP;\n  pY = sY * PIXEL_STEP;\n\n  if ('deltaY' in event) { pY = event.deltaY; }\n  if ('deltaX' in event) { pX = event.deltaX; }\n\n  if ((pX || pY) && event.deltaMode) {\n    if (event.deltaMode == 1) {          // delta in LINE units\n      pX *= LINE_HEIGHT;\n      pY *= LINE_HEIGHT;\n    } else {                             // delta in PAGE units\n      pX *= PAGE_HEIGHT;\n      pY *= PAGE_HEIGHT;\n    }\n  }\n\n  // Fall-back if spin cannot be determined\n  if (pX && !sX) { sX = (pX < 1) ? -1 : 1; }\n  if (pY && !sY) { sY = (pY < 1) ? -1 : 1; }\n\n  return { spinX  : sX,\n           spinY  : sY,\n           pixelX : pX,\n           pixelY : pY };\n}\n\n\n/**\n * The best combination if you prefer spinX + spinY normalization.  It favors\n * the older DOMMouseScroll for Firefox, as FF does not include wheelDelta with\n * 'wheel' event, making spin speed determination impossible.\n */\nnormalizeWheel.getEventType = function() /*string*/ {\n  return (UserAgent_DEPRECATED.firefox())\n           ? 'DOMMouseScroll'\n           : (isEventSupported('wheel'))\n               ? 'wheel'\n               : 'mousewheel';\n};\n\nmodule.exports = normalizeWheel;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbm9ybWFsaXplLXdoZWVsL3NyYy9ub3JtYWxpemVXaGVlbC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVhOztBQUViLDJCQUEyQixtQkFBTyxDQUFDLDBGQUF3Qjs7QUFFM0QsdUJBQXVCLG1CQUFPLENBQUMsa0ZBQW9COzs7QUFHbkQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCOztBQUU1QjtBQUNBLGdDQUFnQztBQUNoQyxnQ0FBZ0M7QUFDaEMsZ0NBQWdDO0FBQ2hDLGdDQUFnQzs7QUFFaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLDJCQUEyQjtBQUMzQiwyQkFBMkI7O0FBRTNCO0FBQ0EseUNBQXlDO0FBQ3pDO0FBQ0E7QUFDQSxNQUFNLG1DQUFtQztBQUN6QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQjtBQUNuQixtQkFBbUI7O0FBRW5CLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL25vcm1hbGl6ZS13aGVlbC9zcmMvbm9ybWFsaXplV2hlZWwuanM/MGE2MSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBub3JtYWxpemVXaGVlbFxuICogQHR5cGVjaGVja3NcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBVc2VyQWdlbnRfREVQUkVDQVRFRCA9IHJlcXVpcmUoJy4vVXNlckFnZW50X0RFUFJFQ0FURUQnKTtcblxudmFyIGlzRXZlbnRTdXBwb3J0ZWQgPSByZXF1aXJlKCcuL2lzRXZlbnRTdXBwb3J0ZWQnKTtcblxuXG4vLyBSZWFzb25hYmxlIGRlZmF1bHRzXG52YXIgUElYRUxfU1RFUCAgPSAxMDtcbnZhciBMSU5FX0hFSUdIVCA9IDQwO1xudmFyIFBBR0VfSEVJR0hUID0gODAwO1xuXG4vKipcbiAqIE1vdXNlIHdoZWVsIChhbmQgMi1maW5nZXIgdHJhY2twYWQpIHN1cHBvcnQgb24gdGhlIHdlYiBzdWNrcy4gIEl0IGlzXG4gKiBjb21wbGljYXRlZCwgdGh1cyB0aGlzIGRvYyBpcyBsb25nIGFuZCAoaG9wZWZ1bGx5KSBkZXRhaWxlZCBlbm91Z2ggdG8gYW5zd2VyXG4gKiB5b3VyIHF1ZXN0aW9ucy5cbiAqXG4gKiBJZiB5b3UgbmVlZCB0byByZWFjdCB0byB0aGUgbW91c2Ugd2hlZWwgaW4gYSBwcmVkaWN0YWJsZSB3YXksIHRoaXMgY29kZSBpc1xuICogbGlrZSB5b3VyIGJlc3Rlc3QgZnJpZW5kLiAqIGh1Z3MgKlxuICpcbiAqIEFzIG9mIHRvZGF5LCB0aGVyZSBhcmUgNCBET00gZXZlbnQgdHlwZXMgeW91IGNhbiBsaXN0ZW4gdG86XG4gKlxuICogICAnd2hlZWwnICAgICAgICAgICAgICAgIC0tIENocm9tZSgzMSspLCBGRigxNyspLCBJRSg5KylcbiAqICAgJ21vdXNld2hlZWwnICAgICAgICAgICAtLSBDaHJvbWUsIElFKDYrKSwgT3BlcmEsIFNhZmFyaVxuICogICAnTW96TW91c2VQaXhlbFNjcm9sbCcgIC0tIEZGKDMuNSBvbmx5ISkgKDIwMTAtMjAxMykgLS0gZG9uJ3QgYm90aGVyIVxuICogICAnRE9NTW91c2VTY3JvbGwnICAgICAgIC0tIEZGKDAuOS43Kykgc2luY2UgMjAwM1xuICpcbiAqIFNvIHdoYXQgdG8gZG8/ICBUaGUgaXMgdGhlIGJlc3Q6XG4gKlxuICogICBub3JtYWxpemVXaGVlbC5nZXRFdmVudFR5cGUoKTtcbiAqXG4gKiBJbiB5b3VyIGV2ZW50IGNhbGxiYWNrLCB1c2UgdGhpcyBjb2RlIHRvIGdldCBzYW5lIGludGVycHJldGF0aW9uIG9mIHRoZVxuICogZGVsdGFzLiAgVGhpcyBjb2RlIHdpbGwgcmV0dXJuIGFuIG9iamVjdCB3aXRoIHByb3BlcnRpZXM6XG4gKlxuICogICBzcGluWCAgIC0tIG5vcm1hbGl6ZWQgc3BpbiBzcGVlZCAodXNlIGZvciB6b29tKSAtIHggcGxhbmVcbiAqICAgc3BpblkgICAtLSBcIiAtIHkgcGxhbmVcbiAqICAgcGl4ZWxYICAtLSBub3JtYWxpemVkIGRpc3RhbmNlICh0byBwaXhlbHMpIC0geCBwbGFuZVxuICogICBwaXhlbFkgIC0tIFwiIC0geSBwbGFuZVxuICpcbiAqIFdoZWVsIHZhbHVlcyBhcmUgcHJvdmlkZWQgYnkgdGhlIGJyb3dzZXIgYXNzdW1pbmcgeW91IGFyZSB1c2luZyB0aGUgd2hlZWwgdG9cbiAqIHNjcm9sbCBhIHdlYiBwYWdlIGJ5IGEgbnVtYmVyIG9mIGxpbmVzIG9yIHBpeGVscyAob3IgcGFnZXMpLiAgVmFsdWVzIGNhbiB2YXJ5XG4gKiBzaWduaWZpY2FudGx5IG9uIGRpZmZlcmVudCBwbGF0Zm9ybXMgYW5kIGJyb3dzZXJzLCBmb3JnZXR0aW5nIHRoYXQgeW91IGNhblxuICogc2Nyb2xsIGF0IGRpZmZlcmVudCBzcGVlZHMuICBTb21lIGRldmljZXMgKGxpa2UgdHJhY2twYWRzKSBlbWl0IG1vcmUgZXZlbnRzXG4gKiBhdCBzbWFsbGVyIGluY3JlbWVudHMgd2l0aCBmaW5lIGdyYW51bGFyaXR5LCBhbmQgc29tZSBlbWl0IG1hc3NpdmUganVtcHMgd2l0aFxuICogbGluZWFyIHNwZWVkIG9yIGFjY2VsZXJhdGlvbi5cbiAqXG4gKiBUaGlzIGNvZGUgZG9lcyBpdHMgYmVzdCB0byBub3JtYWxpemUgdGhlIGRlbHRhcyBmb3IgeW91OlxuICpcbiAqICAgLSBzcGluIGlzIHRyeWluZyB0byBub3JtYWxpemUgaG93IGZhciB0aGUgd2hlZWwgd2FzIHNwdW4gKG9yIHRyYWNrcGFkXG4gKiAgICAgZHJhZ2dlZCkuICBUaGlzIGlzIHN1cGVyIHVzZWZ1bCBmb3Igem9vbSBzdXBwb3J0IHdoZXJlIHlvdSB3YW50IHRvXG4gKiAgICAgdGhyb3cgYXdheSB0aGUgY2h1bmt5IHNjcm9sbCBzdGVwcyBvbiB0aGUgUEMgYW5kIG1ha2UgdGhvc2UgZXF1YWwgdG9cbiAqICAgICB0aGUgc2xvdyBhbmQgc21vb3RoIHRpbnkgc3RlcHMgb24gdGhlIE1hYy4gS2V5IGRhdGE6IFRoaXMgY29kZSB0cmllcyB0b1xuICogICAgIHJlc29sdmUgYSBzaW5nbGUgc2xvdyBzdGVwIG9uIGEgd2hlZWwgdG8gMS5cbiAqXG4gKiAgIC0gcGl4ZWwgaXMgbm9ybWFsaXppbmcgdGhlIGRlc2lyZWQgc2Nyb2xsIGRlbHRhIGluIHBpeGVsIHVuaXRzLiAgWW91J2xsXG4gKiAgICAgZ2V0IHRoZSBjcmF6eSBkaWZmZXJlbmNlcyBiZXR3ZWVuIGJyb3dzZXJzLCBidXQgYXQgbGVhc3QgaXQnbGwgYmUgaW5cbiAqICAgICBwaXhlbHMhXG4gKlxuICogICAtIHBvc2l0aXZlIHZhbHVlIGluZGljYXRlcyBzY3JvbGxpbmcgRE9XTi9SSUdIVCwgbmVnYXRpdmUgVVAvTEVGVC4gIFRoaXNcbiAqICAgICBzaG91bGQgdHJhbnNsYXRlIHRvIHBvc2l0aXZlIHZhbHVlIHpvb21pbmcgSU4sIG5lZ2F0aXZlIHpvb21pbmcgT1VULlxuICogICAgIFRoaXMgbWF0Y2hlcyB0aGUgbmV3ZXIgJ3doZWVsJyBldmVudC5cbiAqXG4gKiBXaHkgYXJlIHRoZXJlIHNwaW5YLCBzcGluWSAob3IgcGl4ZWxzKT9cbiAqXG4gKiAgIC0gc3BpblggaXMgYSAyLWZpbmdlciBzaWRlIGRyYWcgb24gdGhlIHRyYWNrcGFkLCBhbmQgYSBzaGlmdCArIHdoZWVsIHR1cm5cbiAqICAgICB3aXRoIGEgbW91c2UuICBJdCByZXN1bHRzIGluIHNpZGUtc2Nyb2xsaW5nIGluIHRoZSBicm93c2VyIGJ5IGRlZmF1bHQuXG4gKlxuICogICAtIHNwaW5ZIGlzIHdoYXQgeW91IGV4cGVjdCAtLSBpdCdzIHRoZSBjbGFzc2ljIGF4aXMgb2YgYSBtb3VzZSB3aGVlbC5cbiAqXG4gKiAgIC0gSSBkcm9wcGVkIHNwaW5aL3BpeGVsWi4gIEl0IGlzIHN1cHBvcnRlZCBieSB0aGUgRE9NIDMgJ3doZWVsJyBldmVudCBhbmRcbiAqICAgICBwcm9iYWJseSBpcyBieSBicm93c2VycyBpbiBjb25qdW5jdGlvbiB3aXRoIGZhbmN5IDNEIGNvbnRyb2xsZXJzIC4uIGJ1dFxuICogICAgIHlvdSBrbm93LlxuICpcbiAqIEltcGxlbWVudGF0aW9uIGluZm86XG4gKlxuICogRXhhbXBsZXMgb2YgJ3doZWVsJyBldmVudCBpZiB5b3Ugc2Nyb2xsIHNsb3dseSAoZG93bikgYnkgb25lIHN0ZXAgd2l0aCBhblxuICogYXZlcmFnZSBtb3VzZTpcbiAqXG4gKiAgIE9TIFggKyBDaHJvbWUgIChtb3VzZSkgICAgIC0gICAgNCAgIHBpeGVsIGRlbHRhICAod2hlZWxEZWx0YSAtMTIwKVxuICogICBPUyBYICsgU2FmYXJpICAobW91c2UpICAgICAtICBOL0EgICBwaXhlbCBkZWx0YSAgKHdoZWVsRGVsdGEgIC0xMilcbiAqICAgT1MgWCArIEZpcmVmb3ggKG1vdXNlKSAgICAgLSAgICAwLjEgbGluZSAgZGVsdGEgICh3aGVlbERlbHRhICBOL0EpXG4gKiAgIFdpbjggKyBDaHJvbWUgIChtb3VzZSkgICAgIC0gIDEwMCAgIHBpeGVsIGRlbHRhICAod2hlZWxEZWx0YSAtMTIwKVxuICogICBXaW44ICsgRmlyZWZveCAobW91c2UpICAgICAtICAgIDMgICBsaW5lICBkZWx0YSAgKHdoZWVsRGVsdGEgLTEyMClcbiAqXG4gKiBPbiB0aGUgdHJhY2twYWQ6XG4gKlxuICogICBPUyBYICsgQ2hyb21lICAodHJhY2twYWQpICAtICAgIDIgICBwaXhlbCBkZWx0YSAgKHdoZWVsRGVsdGEgICAtNilcbiAqICAgT1MgWCArIEZpcmVmb3ggKHRyYWNrcGFkKSAgLSAgICAxICAgcGl4ZWwgZGVsdGEgICh3aGVlbERlbHRhICBOL0EpXG4gKlxuICogT24gb3RoZXIvb2xkZXIgYnJvd3NlcnMuLiBpdCdzIG1vcmUgY29tcGxpY2F0ZWQgYXMgdGhlcmUgY2FuIGJlIG11bHRpcGxlIGFuZFxuICogYWxzbyBtaXNzaW5nIGRlbHRhIHZhbHVlcy5cbiAqXG4gKiBUaGUgJ3doZWVsJyBldmVudCBpcyBtb3JlIHN0YW5kYXJkOlxuICpcbiAqIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy8jZXZlbnRzLXdoZWVsZXZlbnRzXG4gKlxuICogVGhlIGJhc2ljcyBpcyB0aGF0IGl0IGluY2x1ZGVzIGEgdW5pdCwgZGVsdGFNb2RlIChwaXhlbHMsIGxpbmVzLCBwYWdlcyksIGFuZFxuICogZGVsdGFYLCBkZWx0YVkgYW5kIGRlbHRhWi4gIFNvbWUgYnJvd3NlcnMgcHJvdmlkZSBvdGhlciB2YWx1ZXMgdG8gbWFpbnRhaW5cbiAqIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciBldmVudHMuICBUaG9zZSBvdGhlciB2YWx1ZXMgaGVscCB1c1xuICogYmV0dGVyIG5vcm1hbGl6ZSBzcGluIHNwZWVkLiAgRXhhbXBsZSBvZiB3aGF0IHRoZSBicm93c2VycyBwcm92aWRlOlxuICpcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICB8IGV2ZW50LndoZWVsRGVsdGEgfCBldmVudC5kZXRhaWxcbiAqICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tXG4gKiAgICAgICAgICBTYWZhcmkgdjUvT1MgWCAgfCAgICAgICAtMTIwICAgICAgIHwgICAgICAgMFxuICogICAgICAgICAgU2FmYXJpIHY1L1dpbjcgIHwgICAgICAgLTEyMCAgICAgICB8ICAgICAgIDBcbiAqICAgICAgICAgQ2hyb21lIHYxNy9PUyBYICB8ICAgICAgIC0xMjAgICAgICAgfCAgICAgICAwXG4gKiAgICAgICAgIENocm9tZSB2MTcvV2luNyAgfCAgICAgICAtMTIwICAgICAgIHwgICAgICAgMFxuICogICAgICAgICAgICAgICAgSUU5L1dpbjcgIHwgICAgICAgLTEyMCAgICAgICB8ICAgdW5kZWZpbmVkXG4gKiAgICAgICAgIEZpcmVmb3ggdjQvT1MgWCAgfCAgICAgdW5kZWZpbmVkICAgIHwgICAgICAgMVxuICogICAgICAgICBGaXJlZm94IHY0L1dpbjcgIHwgICAgIHVuZGVmaW5lZCAgICB8ICAgICAgIDNcbiAqXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVdoZWVsKC8qb2JqZWN0Ki8gZXZlbnQpIC8qb2JqZWN0Ki8ge1xuICB2YXIgc1ggPSAwLCBzWSA9IDAsICAgICAgIC8vIHNwaW5YLCBzcGluWVxuICAgICAgcFggPSAwLCBwWSA9IDA7ICAgICAgIC8vIHBpeGVsWCwgcGl4ZWxZXG5cbiAgLy8gTGVnYWN5XG4gIGlmICgnZGV0YWlsJyAgICAgIGluIGV2ZW50KSB7IHNZID0gZXZlbnQuZGV0YWlsOyB9XG4gIGlmICgnd2hlZWxEZWx0YScgIGluIGV2ZW50KSB7IHNZID0gLWV2ZW50LndoZWVsRGVsdGEgLyAxMjA7IH1cbiAgaWYgKCd3aGVlbERlbHRhWScgaW4gZXZlbnQpIHsgc1kgPSAtZXZlbnQud2hlZWxEZWx0YVkgLyAxMjA7IH1cbiAgaWYgKCd3aGVlbERlbHRhWCcgaW4gZXZlbnQpIHsgc1ggPSAtZXZlbnQud2hlZWxEZWx0YVggLyAxMjA7IH1cblxuICAvLyBzaWRlIHNjcm9sbGluZyBvbiBGRiB3aXRoIERPTU1vdXNlU2Nyb2xsXG4gIGlmICggJ2F4aXMnIGluIGV2ZW50ICYmIGV2ZW50LmF4aXMgPT09IGV2ZW50LkhPUklaT05UQUxfQVhJUyApIHtcbiAgICBzWCA9IHNZO1xuICAgIHNZID0gMDtcbiAgfVxuXG4gIHBYID0gc1ggKiBQSVhFTF9TVEVQO1xuICBwWSA9IHNZICogUElYRUxfU1RFUDtcblxuICBpZiAoJ2RlbHRhWScgaW4gZXZlbnQpIHsgcFkgPSBldmVudC5kZWx0YVk7IH1cbiAgaWYgKCdkZWx0YVgnIGluIGV2ZW50KSB7IHBYID0gZXZlbnQuZGVsdGFYOyB9XG5cbiAgaWYgKChwWCB8fCBwWSkgJiYgZXZlbnQuZGVsdGFNb2RlKSB7XG4gICAgaWYgKGV2ZW50LmRlbHRhTW9kZSA9PSAxKSB7ICAgICAgICAgIC8vIGRlbHRhIGluIExJTkUgdW5pdHNcbiAgICAgIHBYICo9IExJTkVfSEVJR0hUO1xuICAgICAgcFkgKj0gTElORV9IRUlHSFQ7XG4gICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRlbHRhIGluIFBBR0UgdW5pdHNcbiAgICAgIHBYICo9IFBBR0VfSEVJR0hUO1xuICAgICAgcFkgKj0gUEFHRV9IRUlHSFQ7XG4gICAgfVxuICB9XG5cbiAgLy8gRmFsbC1iYWNrIGlmIHNwaW4gY2Fubm90IGJlIGRldGVybWluZWRcbiAgaWYgKHBYICYmICFzWCkgeyBzWCA9IChwWCA8IDEpID8gLTEgOiAxOyB9XG4gIGlmIChwWSAmJiAhc1kpIHsgc1kgPSAocFkgPCAxKSA/IC0xIDogMTsgfVxuXG4gIHJldHVybiB7IHNwaW5YICA6IHNYLFxuICAgICAgICAgICBzcGluWSAgOiBzWSxcbiAgICAgICAgICAgcGl4ZWxYIDogcFgsXG4gICAgICAgICAgIHBpeGVsWSA6IHBZIH07XG59XG5cblxuLyoqXG4gKiBUaGUgYmVzdCBjb21iaW5hdGlvbiBpZiB5b3UgcHJlZmVyIHNwaW5YICsgc3Bpblkgbm9ybWFsaXphdGlvbi4gIEl0IGZhdm9yc1xuICogdGhlIG9sZGVyIERPTU1vdXNlU2Nyb2xsIGZvciBGaXJlZm94LCBhcyBGRiBkb2VzIG5vdCBpbmNsdWRlIHdoZWVsRGVsdGEgd2l0aFxuICogJ3doZWVsJyBldmVudCwgbWFraW5nIHNwaW4gc3BlZWQgZGV0ZXJtaW5hdGlvbiBpbXBvc3NpYmxlLlxuICovXG5ub3JtYWxpemVXaGVlbC5nZXRFdmVudFR5cGUgPSBmdW5jdGlvbigpIC8qc3RyaW5nKi8ge1xuICByZXR1cm4gKFVzZXJBZ2VudF9ERVBSRUNBVEVELmZpcmVmb3goKSlcbiAgICAgICAgICAgPyAnRE9NTW91c2VTY3JvbGwnXG4gICAgICAgICAgIDogKGlzRXZlbnRTdXBwb3J0ZWQoJ3doZWVsJykpXG4gICAgICAgICAgICAgICA/ICd3aGVlbCdcbiAgICAgICAgICAgICAgIDogJ21vdXNld2hlZWwnO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBub3JtYWxpemVXaGVlbDtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/normalize-wheel/src/normalizeWheel.js\n");

/***/ }),

/***/ "./node_modules/process/browser.js":
/*!*****************************************!*\
  !*** ./node_modules/process/browser.js ***!
  \*****************************************/
/***/ ((module) => {

eval("// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\n(function () {\n    try {\n        if (typeof setTimeout === 'function') {\n            cachedSetTimeout = setTimeout;\n        } else {\n            cachedSetTimeout = defaultSetTimout;\n        }\n    } catch (e) {\n        cachedSetTimeout = defaultSetTimout;\n    }\n    try {\n        if (typeof clearTimeout === 'function') {\n            cachedClearTimeout = clearTimeout;\n        } else {\n            cachedClearTimeout = defaultClearTimeout;\n        }\n    } catch (e) {\n        cachedClearTimeout = defaultClearTimeout;\n    }\n} ())\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        //normal enviroments in sane situations\n        return setTimeout(fun, 0);\n    }\n    // if setTimeout wasn't available but was latter defined\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        //normal enviroments in sane situations\n        return clearTimeout(marker);\n    }\n    // if clearTimeout wasn't available but was latter defined\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        runTimeout(drainQueue);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0Isc0JBQXNCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCO0FBQ3RCOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxzQ0FBc0M7O0FBRXRDO0FBQ0E7QUFDQTs7QUFFQSw0QkFBNEI7QUFDNUI7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3Byb2Nlc3MvYnJvd3Nlci5qcz81Y2IzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIHNoaW0gZm9yIHVzaW5nIHByb2Nlc3MgaW4gYnJvd3NlclxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xuXG4vLyBjYWNoZWQgZnJvbSB3aGF0ZXZlciBnbG9iYWwgaXMgcHJlc2VudCBzbyB0aGF0IHRlc3QgcnVubmVycyB0aGF0IHN0dWIgaXRcbi8vIGRvbid0IGJyZWFrIHRoaW5ncy4gIEJ1dCB3ZSBuZWVkIHRvIHdyYXAgaXQgaW4gYSB0cnkgY2F0Y2ggaW4gY2FzZSBpdCBpc1xuLy8gd3JhcHBlZCBpbiBzdHJpY3QgbW9kZSBjb2RlIHdoaWNoIGRvZXNuJ3QgZGVmaW5lIGFueSBnbG9iYWxzLiAgSXQncyBpbnNpZGUgYVxuLy8gZnVuY3Rpb24gYmVjYXVzZSB0cnkvY2F0Y2hlcyBkZW9wdGltaXplIGluIGNlcnRhaW4gZW5naW5lcy5cblxudmFyIGNhY2hlZFNldFRpbWVvdXQ7XG52YXIgY2FjaGVkQ2xlYXJUaW1lb3V0O1xuXG5mdW5jdGlvbiBkZWZhdWx0U2V0VGltb3V0KCkge1xuICAgIHRocm93IG5ldyBFcnJvcignc2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuZnVuY3Rpb24gZGVmYXVsdENsZWFyVGltZW91dCAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbihmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBjbGVhclRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgfVxufSAoKSlcbmZ1bmN0aW9uIHJ1blRpbWVvdXQoZnVuKSB7XG4gICAgaWYgKGNhY2hlZFNldFRpbWVvdXQgPT09IHNldFRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIC8vIGlmIHNldFRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRTZXRUaW1lb3V0ID09PSBkZWZhdWx0U2V0VGltb3V0IHx8ICFjYWNoZWRTZXRUaW1lb3V0KSAmJiBzZXRUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfSBjYXRjaChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbChudWxsLCBmdW4sIDApO1xuICAgICAgICB9IGNhdGNoKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3JcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwodGhpcywgZnVuLCAwKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG59XG5mdW5jdGlvbiBydW5DbGVhclRpbWVvdXQobWFya2VyKSB7XG4gICAgaWYgKGNhY2hlZENsZWFyVGltZW91dCA9PT0gY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIC8vIGlmIGNsZWFyVGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZENsZWFyVGltZW91dCA9PT0gZGVmYXVsdENsZWFyVGltZW91dCB8fCAhY2FjaGVkQ2xlYXJUaW1lb3V0KSAmJiBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0ICB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKG51bGwsIG1hcmtlcik7XG4gICAgICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3IuXG4gICAgICAgICAgICAvLyBTb21lIHZlcnNpb25zIG9mIEkuRS4gaGF2ZSBkaWZmZXJlbnQgcnVsZXMgZm9yIGNsZWFyVGltZW91dCB2cyBzZXRUaW1lb3V0XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwodGhpcywgbWFya2VyKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG5cbn1cbnZhciBxdWV1ZSA9IFtdO1xudmFyIGRyYWluaW5nID0gZmFsc2U7XG52YXIgY3VycmVudFF1ZXVlO1xudmFyIHF1ZXVlSW5kZXggPSAtMTtcblxuZnVuY3Rpb24gY2xlYW5VcE5leHRUaWNrKCkge1xuICAgIGlmICghZHJhaW5pbmcgfHwgIWN1cnJlbnRRdWV1ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgaWYgKGN1cnJlbnRRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgcXVldWUgPSBjdXJyZW50UXVldWUuY29uY2F0KHF1ZXVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgfVxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgZHJhaW5RdWV1ZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcbiAgICBpZiAoZHJhaW5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdGltZW91dCA9IHJ1blRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcbiAgICBkcmFpbmluZyA9IHRydWU7XG5cbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIHdoaWxlKGxlbikge1xuICAgICAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICAgICAgcXVldWUgPSBbXTtcbiAgICAgICAgd2hpbGUgKCsrcXVldWVJbmRleCA8IGxlbikge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRRdWV1ZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB9XG4gICAgY3VycmVudFF1ZXVlID0gbnVsbDtcbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIHJ1bkNsZWFyVGltZW91dCh0aW1lb3V0KTtcbn1cblxucHJvY2Vzcy5uZXh0VGljayA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xuICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEgJiYgIWRyYWluaW5nKSB7XG4gICAgICAgIHJ1blRpbWVvdXQoZHJhaW5RdWV1ZSk7XG4gICAgfVxufTtcblxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xuZnVuY3Rpb24gSXRlbShmdW4sIGFycmF5KSB7XG4gICAgdGhpcy5mdW4gPSBmdW47XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xufVxuSXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xufTtcbnByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7XG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xucHJvY2Vzcy5lbnYgPSB7fTtcbnByb2Nlc3MuYXJndiA9IFtdO1xucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXG5wcm9jZXNzLnZlcnNpb25zID0ge307XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5wcm9jZXNzLm9uID0gbm9vcDtcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5vbmNlID0gbm9vcDtcbnByb2Nlc3Mub2ZmID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBub29wO1xucHJvY2Vzcy5lbWl0ID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZE9uY2VMaXN0ZW5lciA9IG5vb3A7XG5cbnByb2Nlc3MubGlzdGVuZXJzID0gZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuIFtdIH1cblxucHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xuXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcbnByb2Nlc3MudW1hc2sgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/process/browser.js\n");

/***/ }),

/***/ "./node_modules/resize-observer-polyfill/dist/ResizeObserver.es.js":
/*!*************************************************************************!*\
  !*** ./node_modules/resize-observer-polyfill/dist/ResizeObserver.es.js ***!
  \*************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/**\r\n * A collection of shims that provide minimal functionality of the ES6 collections.\r\n *\r\n * These implementations are not meant to be used outside of the ResizeObserver\r\n * modules as they cover only a limited range of use cases.\r\n */\r\n/* eslint-disable require-jsdoc, valid-jsdoc */\r\nvar MapShim = (function () {\r\n    if (typeof Map !== 'undefined') {\r\n        return Map;\r\n    }\r\n    /**\r\n     * Returns index in provided array that matches the specified key.\r\n     *\r\n     * @param {Array<Array>} arr\r\n     * @param {*} key\r\n     * @returns {number}\r\n     */\r\n    function getIndex(arr, key) {\r\n        var result = -1;\r\n        arr.some(function (entry, index) {\r\n            if (entry[0] === key) {\r\n                result = index;\r\n                return true;\r\n            }\r\n            return false;\r\n        });\r\n        return result;\r\n    }\r\n    return /** @class */ (function () {\r\n        function class_1() {\r\n            this.__entries__ = [];\r\n        }\r\n        Object.defineProperty(class_1.prototype, \"size\", {\r\n            /**\r\n             * @returns {boolean}\r\n             */\r\n            get: function () {\r\n                return this.__entries__.length;\r\n            },\r\n            enumerable: true,\r\n            configurable: true\r\n        });\r\n        /**\r\n         * @param {*} key\r\n         * @returns {*}\r\n         */\r\n        class_1.prototype.get = function (key) {\r\n            var index = getIndex(this.__entries__, key);\r\n            var entry = this.__entries__[index];\r\n            return entry && entry[1];\r\n        };\r\n        /**\r\n         * @param {*} key\r\n         * @param {*} value\r\n         * @returns {void}\r\n         */\r\n        class_1.prototype.set = function (key, value) {\r\n            var index = getIndex(this.__entries__, key);\r\n            if (~index) {\r\n                this.__entries__[index][1] = value;\r\n            }\r\n            else {\r\n                this.__entries__.push([key, value]);\r\n            }\r\n        };\r\n        /**\r\n         * @param {*} key\r\n         * @returns {void}\r\n         */\r\n        class_1.prototype.delete = function (key) {\r\n            var entries = this.__entries__;\r\n            var index = getIndex(entries, key);\r\n            if (~index) {\r\n                entries.splice(index, 1);\r\n            }\r\n        };\r\n        /**\r\n         * @param {*} key\r\n         * @returns {void}\r\n         */\r\n        class_1.prototype.has = function (key) {\r\n            return !!~getIndex(this.__entries__, key);\r\n        };\r\n        /**\r\n         * @returns {void}\r\n         */\r\n        class_1.prototype.clear = function () {\r\n            this.__entries__.splice(0);\r\n        };\r\n        /**\r\n         * @param {Function} callback\r\n         * @param {*} [ctx=null]\r\n         * @returns {void}\r\n         */\r\n        class_1.prototype.forEach = function (callback, ctx) {\r\n            if (ctx === void 0) { ctx = null; }\r\n            for (var _i = 0, _a = this.__entries__; _i < _a.length; _i++) {\r\n                var entry = _a[_i];\r\n                callback.call(ctx, entry[1], entry[0]);\r\n            }\r\n        };\r\n        return class_1;\r\n    }());\r\n})();\n\n/**\r\n * Detects whether window and document objects are available in current environment.\r\n */\r\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && window.document === document;\n\n// Returns global object of a current environment.\r\nvar global$1 = (function () {\r\n    if (typeof __webpack_require__.g !== 'undefined' && __webpack_require__.g.Math === Math) {\r\n        return __webpack_require__.g;\r\n    }\r\n    if (typeof self !== 'undefined' && self.Math === Math) {\r\n        return self;\r\n    }\r\n    if (typeof window !== 'undefined' && window.Math === Math) {\r\n        return window;\r\n    }\r\n    // eslint-disable-next-line no-new-func\r\n    return Function('return this')();\r\n})();\n\n/**\r\n * A shim for the requestAnimationFrame which falls back to the setTimeout if\r\n * first one is not supported.\r\n *\r\n * @returns {number} Requests' identifier.\r\n */\r\nvar requestAnimationFrame$1 = (function () {\r\n    if (typeof requestAnimationFrame === 'function') {\r\n        // It's required to use a bounded function because IE sometimes throws\r\n        // an \"Invalid calling object\" error if rAF is invoked without the global\r\n        // object on the left hand side.\r\n        return requestAnimationFrame.bind(global$1);\r\n    }\r\n    return function (callback) { return setTimeout(function () { return callback(Date.now()); }, 1000 / 60); };\r\n})();\n\n// Defines minimum timeout before adding a trailing call.\r\nvar trailingTimeout = 2;\r\n/**\r\n * Creates a wrapper function which ensures that provided callback will be\r\n * invoked only once during the specified delay period.\r\n *\r\n * @param {Function} callback - Function to be invoked after the delay period.\r\n * @param {number} delay - Delay after which to invoke callback.\r\n * @returns {Function}\r\n */\r\nfunction throttle (callback, delay) {\r\n    var leadingCall = false, trailingCall = false, lastCallTime = 0;\r\n    /**\r\n     * Invokes the original callback function and schedules new invocation if\r\n     * the \"proxy\" was called during current request.\r\n     *\r\n     * @returns {void}\r\n     */\r\n    function resolvePending() {\r\n        if (leadingCall) {\r\n            leadingCall = false;\r\n            callback();\r\n        }\r\n        if (trailingCall) {\r\n            proxy();\r\n        }\r\n    }\r\n    /**\r\n     * Callback invoked after the specified delay. It will further postpone\r\n     * invocation of the original function delegating it to the\r\n     * requestAnimationFrame.\r\n     *\r\n     * @returns {void}\r\n     */\r\n    function timeoutCallback() {\r\n        requestAnimationFrame$1(resolvePending);\r\n    }\r\n    /**\r\n     * Schedules invocation of the original function.\r\n     *\r\n     * @returns {void}\r\n     */\r\n    function proxy() {\r\n        var timeStamp = Date.now();\r\n        if (leadingCall) {\r\n            // Reject immediately following calls.\r\n            if (timeStamp - lastCallTime < trailingTimeout) {\r\n                return;\r\n            }\r\n            // Schedule new call to be in invoked when the pending one is resolved.\r\n            // This is important for \"transitions\" which never actually start\r\n            // immediately so there is a chance that we might miss one if change\r\n            // happens amids the pending invocation.\r\n            trailingCall = true;\r\n        }\r\n        else {\r\n            leadingCall = true;\r\n            trailingCall = false;\r\n            setTimeout(timeoutCallback, delay);\r\n        }\r\n        lastCallTime = timeStamp;\r\n    }\r\n    return proxy;\r\n}\n\n// Minimum delay before invoking the update of observers.\r\nvar REFRESH_DELAY = 20;\r\n// A list of substrings of CSS properties used to find transition events that\r\n// might affect dimensions of observed elements.\r\nvar transitionKeys = ['top', 'right', 'bottom', 'left', 'width', 'height', 'size', 'weight'];\r\n// Check if MutationObserver is available.\r\nvar mutationObserverSupported = typeof MutationObserver !== 'undefined';\r\n/**\r\n * Singleton controller class which handles updates of ResizeObserver instances.\r\n */\r\nvar ResizeObserverController = /** @class */ (function () {\r\n    /**\r\n     * Creates a new instance of ResizeObserverController.\r\n     *\r\n     * @private\r\n     */\r\n    function ResizeObserverController() {\r\n        /**\r\n         * Indicates whether DOM listeners have been added.\r\n         *\r\n         * @private {boolean}\r\n         */\r\n        this.connected_ = false;\r\n        /**\r\n         * Tells that controller has subscribed for Mutation Events.\r\n         *\r\n         * @private {boolean}\r\n         */\r\n        this.mutationEventsAdded_ = false;\r\n        /**\r\n         * Keeps reference to the instance of MutationObserver.\r\n         *\r\n         * @private {MutationObserver}\r\n         */\r\n        this.mutationsObserver_ = null;\r\n        /**\r\n         * A list of connected observers.\r\n         *\r\n         * @private {Array<ResizeObserverSPI>}\r\n         */\r\n        this.observers_ = [];\r\n        this.onTransitionEnd_ = this.onTransitionEnd_.bind(this);\r\n        this.refresh = throttle(this.refresh.bind(this), REFRESH_DELAY);\r\n    }\r\n    /**\r\n     * Adds observer to observers list.\r\n     *\r\n     * @param {ResizeObserverSPI} observer - Observer to be added.\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverController.prototype.addObserver = function (observer) {\r\n        if (!~this.observers_.indexOf(observer)) {\r\n            this.observers_.push(observer);\r\n        }\r\n        // Add listeners if they haven't been added yet.\r\n        if (!this.connected_) {\r\n            this.connect_();\r\n        }\r\n    };\r\n    /**\r\n     * Removes observer from observers list.\r\n     *\r\n     * @param {ResizeObserverSPI} observer - Observer to be removed.\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverController.prototype.removeObserver = function (observer) {\r\n        var observers = this.observers_;\r\n        var index = observers.indexOf(observer);\r\n        // Remove observer if it's present in registry.\r\n        if (~index) {\r\n            observers.splice(index, 1);\r\n        }\r\n        // Remove listeners if controller has no connected observers.\r\n        if (!observers.length && this.connected_) {\r\n            this.disconnect_();\r\n        }\r\n    };\r\n    /**\r\n     * Invokes the update of observers. It will continue running updates insofar\r\n     * it detects changes.\r\n     *\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverController.prototype.refresh = function () {\r\n        var changesDetected = this.updateObservers_();\r\n        // Continue running updates if changes have been detected as there might\r\n        // be future ones caused by CSS transitions.\r\n        if (changesDetected) {\r\n            this.refresh();\r\n        }\r\n    };\r\n    /**\r\n     * Updates every observer from observers list and notifies them of queued\r\n     * entries.\r\n     *\r\n     * @private\r\n     * @returns {boolean} Returns \"true\" if any observer has detected changes in\r\n     *      dimensions of it's elements.\r\n     */\r\n    ResizeObserverController.prototype.updateObservers_ = function () {\r\n        // Collect observers that have active observations.\r\n        var activeObservers = this.observers_.filter(function (observer) {\r\n            return observer.gatherActive(), observer.hasActive();\r\n        });\r\n        // Deliver notifications in a separate cycle in order to avoid any\r\n        // collisions between observers, e.g. when multiple instances of\r\n        // ResizeObserver are tracking the same element and the callback of one\r\n        // of them changes content dimensions of the observed target. Sometimes\r\n        // this may result in notifications being blocked for the rest of observers.\r\n        activeObservers.forEach(function (observer) { return observer.broadcastActive(); });\r\n        return activeObservers.length > 0;\r\n    };\r\n    /**\r\n     * Initializes DOM listeners.\r\n     *\r\n     * @private\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverController.prototype.connect_ = function () {\r\n        // Do nothing if running in a non-browser environment or if listeners\r\n        // have been already added.\r\n        if (!isBrowser || this.connected_) {\r\n            return;\r\n        }\r\n        // Subscription to the \"Transitionend\" event is used as a workaround for\r\n        // delayed transitions. This way it's possible to capture at least the\r\n        // final state of an element.\r\n        document.addEventListener('transitionend', this.onTransitionEnd_);\r\n        window.addEventListener('resize', this.refresh);\r\n        if (mutationObserverSupported) {\r\n            this.mutationsObserver_ = new MutationObserver(this.refresh);\r\n            this.mutationsObserver_.observe(document, {\r\n                attributes: true,\r\n                childList: true,\r\n                characterData: true,\r\n                subtree: true\r\n            });\r\n        }\r\n        else {\r\n            document.addEventListener('DOMSubtreeModified', this.refresh);\r\n            this.mutationEventsAdded_ = true;\r\n        }\r\n        this.connected_ = true;\r\n    };\r\n    /**\r\n     * Removes DOM listeners.\r\n     *\r\n     * @private\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverController.prototype.disconnect_ = function () {\r\n        // Do nothing if running in a non-browser environment or if listeners\r\n        // have been already removed.\r\n        if (!isBrowser || !this.connected_) {\r\n            return;\r\n        }\r\n        document.removeEventListener('transitionend', this.onTransitionEnd_);\r\n        window.removeEventListener('resize', this.refresh);\r\n        if (this.mutationsObserver_) {\r\n            this.mutationsObserver_.disconnect();\r\n        }\r\n        if (this.mutationEventsAdded_) {\r\n            document.removeEventListener('DOMSubtreeModified', this.refresh);\r\n        }\r\n        this.mutationsObserver_ = null;\r\n        this.mutationEventsAdded_ = false;\r\n        this.connected_ = false;\r\n    };\r\n    /**\r\n     * \"Transitionend\" event handler.\r\n     *\r\n     * @private\r\n     * @param {TransitionEvent} event\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverController.prototype.onTransitionEnd_ = function (_a) {\r\n        var _b = _a.propertyName, propertyName = _b === void 0 ? '' : _b;\r\n        // Detect whether transition may affect dimensions of an element.\r\n        var isReflowProperty = transitionKeys.some(function (key) {\r\n            return !!~propertyName.indexOf(key);\r\n        });\r\n        if (isReflowProperty) {\r\n            this.refresh();\r\n        }\r\n    };\r\n    /**\r\n     * Returns instance of the ResizeObserverController.\r\n     *\r\n     * @returns {ResizeObserverController}\r\n     */\r\n    ResizeObserverController.getInstance = function () {\r\n        if (!this.instance_) {\r\n            this.instance_ = new ResizeObserverController();\r\n        }\r\n        return this.instance_;\r\n    };\r\n    /**\r\n     * Holds reference to the controller's instance.\r\n     *\r\n     * @private {ResizeObserverController}\r\n     */\r\n    ResizeObserverController.instance_ = null;\r\n    return ResizeObserverController;\r\n}());\n\n/**\r\n * Defines non-writable/enumerable properties of the provided target object.\r\n *\r\n * @param {Object} target - Object for which to define properties.\r\n * @param {Object} props - Properties to be defined.\r\n * @returns {Object} Target object.\r\n */\r\nvar defineConfigurable = (function (target, props) {\r\n    for (var _i = 0, _a = Object.keys(props); _i < _a.length; _i++) {\r\n        var key = _a[_i];\r\n        Object.defineProperty(target, key, {\r\n            value: props[key],\r\n            enumerable: false,\r\n            writable: false,\r\n            configurable: true\r\n        });\r\n    }\r\n    return target;\r\n});\n\n/**\r\n * Returns the global object associated with provided element.\r\n *\r\n * @param {Object} target\r\n * @returns {Object}\r\n */\r\nvar getWindowOf = (function (target) {\r\n    // Assume that the element is an instance of Node, which means that it\r\n    // has the \"ownerDocument\" property from which we can retrieve a\r\n    // corresponding global object.\r\n    var ownerGlobal = target && target.ownerDocument && target.ownerDocument.defaultView;\r\n    // Return the local global object if it's not possible extract one from\r\n    // provided element.\r\n    return ownerGlobal || global$1;\r\n});\n\n// Placeholder of an empty content rectangle.\r\nvar emptyRect = createRectInit(0, 0, 0, 0);\r\n/**\r\n * Converts provided string to a number.\r\n *\r\n * @param {number|string} value\r\n * @returns {number}\r\n */\r\nfunction toFloat(value) {\r\n    return parseFloat(value) || 0;\r\n}\r\n/**\r\n * Extracts borders size from provided styles.\r\n *\r\n * @param {CSSStyleDeclaration} styles\r\n * @param {...string} positions - Borders positions (top, right, ...)\r\n * @returns {number}\r\n */\r\nfunction getBordersSize(styles) {\r\n    var positions = [];\r\n    for (var _i = 1; _i < arguments.length; _i++) {\r\n        positions[_i - 1] = arguments[_i];\r\n    }\r\n    return positions.reduce(function (size, position) {\r\n        var value = styles['border-' + position + '-width'];\r\n        return size + toFloat(value);\r\n    }, 0);\r\n}\r\n/**\r\n * Extracts paddings sizes from provided styles.\r\n *\r\n * @param {CSSStyleDeclaration} styles\r\n * @returns {Object} Paddings box.\r\n */\r\nfunction getPaddings(styles) {\r\n    var positions = ['top', 'right', 'bottom', 'left'];\r\n    var paddings = {};\r\n    for (var _i = 0, positions_1 = positions; _i < positions_1.length; _i++) {\r\n        var position = positions_1[_i];\r\n        var value = styles['padding-' + position];\r\n        paddings[position] = toFloat(value);\r\n    }\r\n    return paddings;\r\n}\r\n/**\r\n * Calculates content rectangle of provided SVG element.\r\n *\r\n * @param {SVGGraphicsElement} target - Element content rectangle of which needs\r\n *      to be calculated.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction getSVGContentRect(target) {\r\n    var bbox = target.getBBox();\r\n    return createRectInit(0, 0, bbox.width, bbox.height);\r\n}\r\n/**\r\n * Calculates content rectangle of provided HTMLElement.\r\n *\r\n * @param {HTMLElement} target - Element for which to calculate the content rectangle.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction getHTMLElementContentRect(target) {\r\n    // Client width & height properties can't be\r\n    // used exclusively as they provide rounded values.\r\n    var clientWidth = target.clientWidth, clientHeight = target.clientHeight;\r\n    // By this condition we can catch all non-replaced inline, hidden and\r\n    // detached elements. Though elements with width & height properties less\r\n    // than 0.5 will be discarded as well.\r\n    //\r\n    // Without it we would need to implement separate methods for each of\r\n    // those cases and it's not possible to perform a precise and performance\r\n    // effective test for hidden elements. E.g. even jQuery's ':visible' filter\r\n    // gives wrong results for elements with width & height less than 0.5.\r\n    if (!clientWidth && !clientHeight) {\r\n        return emptyRect;\r\n    }\r\n    var styles = getWindowOf(target).getComputedStyle(target);\r\n    var paddings = getPaddings(styles);\r\n    var horizPad = paddings.left + paddings.right;\r\n    var vertPad = paddings.top + paddings.bottom;\r\n    // Computed styles of width & height are being used because they are the\r\n    // only dimensions available to JS that contain non-rounded values. It could\r\n    // be possible to utilize the getBoundingClientRect if only it's data wasn't\r\n    // affected by CSS transformations let alone paddings, borders and scroll bars.\r\n    var width = toFloat(styles.width), height = toFloat(styles.height);\r\n    // Width & height include paddings and borders when the 'border-box' box\r\n    // model is applied (except for IE).\r\n    if (styles.boxSizing === 'border-box') {\r\n        // Following conditions are required to handle Internet Explorer which\r\n        // doesn't include paddings and borders to computed CSS dimensions.\r\n        //\r\n        // We can say that if CSS dimensions + paddings are equal to the \"client\"\r\n        // properties then it's either IE, and thus we don't need to subtract\r\n        // anything, or an element merely doesn't have paddings/borders styles.\r\n        if (Math.round(width + horizPad) !== clientWidth) {\r\n            width -= getBordersSize(styles, 'left', 'right') + horizPad;\r\n        }\r\n        if (Math.round(height + vertPad) !== clientHeight) {\r\n            height -= getBordersSize(styles, 'top', 'bottom') + vertPad;\r\n        }\r\n    }\r\n    // Following steps can't be applied to the document's root element as its\r\n    // client[Width/Height] properties represent viewport area of the window.\r\n    // Besides, it's as well not necessary as the <html> itself neither has\r\n    // rendered scroll bars nor it can be clipped.\r\n    if (!isDocumentElement(target)) {\r\n        // In some browsers (only in Firefox, actually) CSS width & height\r\n        // include scroll bars size which can be removed at this step as scroll\r\n        // bars are the only difference between rounded dimensions + paddings\r\n        // and \"client\" properties, though that is not always true in Chrome.\r\n        var vertScrollbar = Math.round(width + horizPad) - clientWidth;\r\n        var horizScrollbar = Math.round(height + vertPad) - clientHeight;\r\n        // Chrome has a rather weird rounding of \"client\" properties.\r\n        // E.g. for an element with content width of 314.2px it sometimes gives\r\n        // the client width of 315px and for the width of 314.7px it may give\r\n        // 314px. And it doesn't happen all the time. So just ignore this delta\r\n        // as a non-relevant.\r\n        if (Math.abs(vertScrollbar) !== 1) {\r\n            width -= vertScrollbar;\r\n        }\r\n        if (Math.abs(horizScrollbar) !== 1) {\r\n            height -= horizScrollbar;\r\n        }\r\n    }\r\n    return createRectInit(paddings.left, paddings.top, width, height);\r\n}\r\n/**\r\n * Checks whether provided element is an instance of the SVGGraphicsElement.\r\n *\r\n * @param {Element} target - Element to be checked.\r\n * @returns {boolean}\r\n */\r\nvar isSVGGraphicsElement = (function () {\r\n    // Some browsers, namely IE and Edge, don't have the SVGGraphicsElement\r\n    // interface.\r\n    if (typeof SVGGraphicsElement !== 'undefined') {\r\n        return function (target) { return target instanceof getWindowOf(target).SVGGraphicsElement; };\r\n    }\r\n    // If it's so, then check that element is at least an instance of the\r\n    // SVGElement and that it has the \"getBBox\" method.\r\n    // eslint-disable-next-line no-extra-parens\r\n    return function (target) { return (target instanceof getWindowOf(target).SVGElement &&\r\n        typeof target.getBBox === 'function'); };\r\n})();\r\n/**\r\n * Checks whether provided element is a document element (<html>).\r\n *\r\n * @param {Element} target - Element to be checked.\r\n * @returns {boolean}\r\n */\r\nfunction isDocumentElement(target) {\r\n    return target === getWindowOf(target).document.documentElement;\r\n}\r\n/**\r\n * Calculates an appropriate content rectangle for provided html or svg element.\r\n *\r\n * @param {Element} target - Element content rectangle of which needs to be calculated.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction getContentRect(target) {\r\n    if (!isBrowser) {\r\n        return emptyRect;\r\n    }\r\n    if (isSVGGraphicsElement(target)) {\r\n        return getSVGContentRect(target);\r\n    }\r\n    return getHTMLElementContentRect(target);\r\n}\r\n/**\r\n * Creates rectangle with an interface of the DOMRectReadOnly.\r\n * Spec: https://drafts.fxtf.org/geometry/#domrectreadonly\r\n *\r\n * @param {DOMRectInit} rectInit - Object with rectangle's x/y coordinates and dimensions.\r\n * @returns {DOMRectReadOnly}\r\n */\r\nfunction createReadOnlyRect(_a) {\r\n    var x = _a.x, y = _a.y, width = _a.width, height = _a.height;\r\n    // If DOMRectReadOnly is available use it as a prototype for the rectangle.\r\n    var Constr = typeof DOMRectReadOnly !== 'undefined' ? DOMRectReadOnly : Object;\r\n    var rect = Object.create(Constr.prototype);\r\n    // Rectangle's properties are not writable and non-enumerable.\r\n    defineConfigurable(rect, {\r\n        x: x, y: y, width: width, height: height,\r\n        top: y,\r\n        right: x + width,\r\n        bottom: height + y,\r\n        left: x\r\n    });\r\n    return rect;\r\n}\r\n/**\r\n * Creates DOMRectInit object based on the provided dimensions and the x/y coordinates.\r\n * Spec: https://drafts.fxtf.org/geometry/#dictdef-domrectinit\r\n *\r\n * @param {number} x - X coordinate.\r\n * @param {number} y - Y coordinate.\r\n * @param {number} width - Rectangle's width.\r\n * @param {number} height - Rectangle's height.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction createRectInit(x, y, width, height) {\r\n    return { x: x, y: y, width: width, height: height };\r\n}\n\n/**\r\n * Class that is responsible for computations of the content rectangle of\r\n * provided DOM element and for keeping track of it's changes.\r\n */\r\nvar ResizeObservation = /** @class */ (function () {\r\n    /**\r\n     * Creates an instance of ResizeObservation.\r\n     *\r\n     * @param {Element} target - Element to be observed.\r\n     */\r\n    function ResizeObservation(target) {\r\n        /**\r\n         * Broadcasted width of content rectangle.\r\n         *\r\n         * @type {number}\r\n         */\r\n        this.broadcastWidth = 0;\r\n        /**\r\n         * Broadcasted height of content rectangle.\r\n         *\r\n         * @type {number}\r\n         */\r\n        this.broadcastHeight = 0;\r\n        /**\r\n         * Reference to the last observed content rectangle.\r\n         *\r\n         * @private {DOMRectInit}\r\n         */\r\n        this.contentRect_ = createRectInit(0, 0, 0, 0);\r\n        this.target = target;\r\n    }\r\n    /**\r\n     * Updates content rectangle and tells whether it's width or height properties\r\n     * have changed since the last broadcast.\r\n     *\r\n     * @returns {boolean}\r\n     */\r\n    ResizeObservation.prototype.isActive = function () {\r\n        var rect = getContentRect(this.target);\r\n        this.contentRect_ = rect;\r\n        return (rect.width !== this.broadcastWidth ||\r\n            rect.height !== this.broadcastHeight);\r\n    };\r\n    /**\r\n     * Updates 'broadcastWidth' and 'broadcastHeight' properties with a data\r\n     * from the corresponding properties of the last observed content rectangle.\r\n     *\r\n     * @returns {DOMRectInit} Last observed content rectangle.\r\n     */\r\n    ResizeObservation.prototype.broadcastRect = function () {\r\n        var rect = this.contentRect_;\r\n        this.broadcastWidth = rect.width;\r\n        this.broadcastHeight = rect.height;\r\n        return rect;\r\n    };\r\n    return ResizeObservation;\r\n}());\n\nvar ResizeObserverEntry = /** @class */ (function () {\r\n    /**\r\n     * Creates an instance of ResizeObserverEntry.\r\n     *\r\n     * @param {Element} target - Element that is being observed.\r\n     * @param {DOMRectInit} rectInit - Data of the element's content rectangle.\r\n     */\r\n    function ResizeObserverEntry(target, rectInit) {\r\n        var contentRect = createReadOnlyRect(rectInit);\r\n        // According to the specification following properties are not writable\r\n        // and are also not enumerable in the native implementation.\r\n        //\r\n        // Property accessors are not being used as they'd require to define a\r\n        // private WeakMap storage which may cause memory leaks in browsers that\r\n        // don't support this type of collections.\r\n        defineConfigurable(this, { target: target, contentRect: contentRect });\r\n    }\r\n    return ResizeObserverEntry;\r\n}());\n\nvar ResizeObserverSPI = /** @class */ (function () {\r\n    /**\r\n     * Creates a new instance of ResizeObserver.\r\n     *\r\n     * @param {ResizeObserverCallback} callback - Callback function that is invoked\r\n     *      when one of the observed elements changes it's content dimensions.\r\n     * @param {ResizeObserverController} controller - Controller instance which\r\n     *      is responsible for the updates of observer.\r\n     * @param {ResizeObserver} callbackCtx - Reference to the public\r\n     *      ResizeObserver instance which will be passed to callback function.\r\n     */\r\n    function ResizeObserverSPI(callback, controller, callbackCtx) {\r\n        /**\r\n         * Collection of resize observations that have detected changes in dimensions\r\n         * of elements.\r\n         *\r\n         * @private {Array<ResizeObservation>}\r\n         */\r\n        this.activeObservations_ = [];\r\n        /**\r\n         * Registry of the ResizeObservation instances.\r\n         *\r\n         * @private {Map<Element, ResizeObservation>}\r\n         */\r\n        this.observations_ = new MapShim();\r\n        if (typeof callback !== 'function') {\r\n            throw new TypeError('The callback provided as parameter 1 is not a function.');\r\n        }\r\n        this.callback_ = callback;\r\n        this.controller_ = controller;\r\n        this.callbackCtx_ = callbackCtx;\r\n    }\r\n    /**\r\n     * Starts observing provided element.\r\n     *\r\n     * @param {Element} target - Element to be observed.\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverSPI.prototype.observe = function (target) {\r\n        if (!arguments.length) {\r\n            throw new TypeError('1 argument required, but only 0 present.');\r\n        }\r\n        // Do nothing if current environment doesn't have the Element interface.\r\n        if (typeof Element === 'undefined' || !(Element instanceof Object)) {\r\n            return;\r\n        }\r\n        if (!(target instanceof getWindowOf(target).Element)) {\r\n            throw new TypeError('parameter 1 is not of type \"Element\".');\r\n        }\r\n        var observations = this.observations_;\r\n        // Do nothing if element is already being observed.\r\n        if (observations.has(target)) {\r\n            return;\r\n        }\r\n        observations.set(target, new ResizeObservation(target));\r\n        this.controller_.addObserver(this);\r\n        // Force the update of observations.\r\n        this.controller_.refresh();\r\n    };\r\n    /**\r\n     * Stops observing provided element.\r\n     *\r\n     * @param {Element} target - Element to stop observing.\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverSPI.prototype.unobserve = function (target) {\r\n        if (!arguments.length) {\r\n            throw new TypeError('1 argument required, but only 0 present.');\r\n        }\r\n        // Do nothing if current environment doesn't have the Element interface.\r\n        if (typeof Element === 'undefined' || !(Element instanceof Object)) {\r\n            return;\r\n        }\r\n        if (!(target instanceof getWindowOf(target).Element)) {\r\n            throw new TypeError('parameter 1 is not of type \"Element\".');\r\n        }\r\n        var observations = this.observations_;\r\n        // Do nothing if element is not being observed.\r\n        if (!observations.has(target)) {\r\n            return;\r\n        }\r\n        observations.delete(target);\r\n        if (!observations.size) {\r\n            this.controller_.removeObserver(this);\r\n        }\r\n    };\r\n    /**\r\n     * Stops observing all elements.\r\n     *\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverSPI.prototype.disconnect = function () {\r\n        this.clearActive();\r\n        this.observations_.clear();\r\n        this.controller_.removeObserver(this);\r\n    };\r\n    /**\r\n     * Collects observation instances the associated element of which has changed\r\n     * it's content rectangle.\r\n     *\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverSPI.prototype.gatherActive = function () {\r\n        var _this = this;\r\n        this.clearActive();\r\n        this.observations_.forEach(function (observation) {\r\n            if (observation.isActive()) {\r\n                _this.activeObservations_.push(observation);\r\n            }\r\n        });\r\n    };\r\n    /**\r\n     * Invokes initial callback function with a list of ResizeObserverEntry\r\n     * instances collected from active resize observations.\r\n     *\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverSPI.prototype.broadcastActive = function () {\r\n        // Do nothing if observer doesn't have active observations.\r\n        if (!this.hasActive()) {\r\n            return;\r\n        }\r\n        var ctx = this.callbackCtx_;\r\n        // Create ResizeObserverEntry instance for every active observation.\r\n        var entries = this.activeObservations_.map(function (observation) {\r\n            return new ResizeObserverEntry(observation.target, observation.broadcastRect());\r\n        });\r\n        this.callback_.call(ctx, entries, ctx);\r\n        this.clearActive();\r\n    };\r\n    /**\r\n     * Clears the collection of active observations.\r\n     *\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverSPI.prototype.clearActive = function () {\r\n        this.activeObservations_.splice(0);\r\n    };\r\n    /**\r\n     * Tells whether observer has active observations.\r\n     *\r\n     * @returns {boolean}\r\n     */\r\n    ResizeObserverSPI.prototype.hasActive = function () {\r\n        return this.activeObservations_.length > 0;\r\n    };\r\n    return ResizeObserverSPI;\r\n}());\n\n// Registry of internal observers. If WeakMap is not available use current shim\r\n// for the Map collection as it has all required methods and because WeakMap\r\n// can't be fully polyfilled anyway.\r\nvar observers = typeof WeakMap !== 'undefined' ? new WeakMap() : new MapShim();\r\n/**\r\n * ResizeObserver API. Encapsulates the ResizeObserver SPI implementation\r\n * exposing only those methods and properties that are defined in the spec.\r\n */\r\nvar ResizeObserver = /** @class */ (function () {\r\n    /**\r\n     * Creates a new instance of ResizeObserver.\r\n     *\r\n     * @param {ResizeObserverCallback} callback - Callback that is invoked when\r\n     *      dimensions of the observed elements change.\r\n     */\r\n    function ResizeObserver(callback) {\r\n        if (!(this instanceof ResizeObserver)) {\r\n            throw new TypeError('Cannot call a class as a function.');\r\n        }\r\n        if (!arguments.length) {\r\n            throw new TypeError('1 argument required, but only 0 present.');\r\n        }\r\n        var controller = ResizeObserverController.getInstance();\r\n        var observer = new ResizeObserverSPI(callback, controller, this);\r\n        observers.set(this, observer);\r\n    }\r\n    return ResizeObserver;\r\n}());\r\n// Expose public methods of ResizeObserver.\r\n[\r\n    'observe',\r\n    'unobserve',\r\n    'disconnect'\r\n].forEach(function (method) {\r\n    ResizeObserver.prototype[method] = function () {\r\n        var _a;\r\n        return (_a = observers.get(this))[method].apply(_a, arguments);\r\n    };\r\n});\n\nvar index = (function () {\r\n    // Export existing implementation if available.\r\n    if (typeof global$1.ResizeObserver !== 'undefined') {\r\n        return global$1.ResizeObserver;\r\n    }\r\n    return ResizeObserver;\r\n})();\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (index);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcmVzaXplLW9ic2VydmVyLXBvbHlmaWxsL2Rpc3QvUmVzaXplT2JzZXJ2ZXIuZXMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGNBQWM7QUFDN0IsZUFBZSxHQUFHO0FBQ2xCLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLG1CQUFtQixHQUFHO0FBQ3RCLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixHQUFHO0FBQ3RCLG1CQUFtQixHQUFHO0FBQ3RCLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLEdBQUc7QUFDdEIscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixHQUFHO0FBQ3RCLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsVUFBVTtBQUM3QixtQkFBbUIsR0FBRztBQUN0QixxQkFBcUI7QUFDckI7QUFDQTtBQUNBLGtDQUFrQztBQUNsQyxvREFBb0QsZ0JBQWdCO0FBQ3BFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZUFBZSxxQkFB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QTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSx3QkFBd0I7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCxpRUFBZSxLQUFLLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVzaXplLW9ic2VydmVyLXBvbHlmaWxsL2Rpc3QvUmVzaXplT2JzZXJ2ZXIuZXMuanM/ZjM0NyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQSBjb2xsZWN0aW9uIG9mIHNoaW1zIHRoYXQgcHJvdmlkZSBtaW5pbWFsIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIEVTNiBjb2xsZWN0aW9ucy5cclxuICpcclxuICogVGhlc2UgaW1wbGVtZW50YXRpb25zIGFyZSBub3QgbWVhbnQgdG8gYmUgdXNlZCBvdXRzaWRlIG9mIHRoZSBSZXNpemVPYnNlcnZlclxyXG4gKiBtb2R1bGVzIGFzIHRoZXkgY292ZXIgb25seSBhIGxpbWl0ZWQgcmFuZ2Ugb2YgdXNlIGNhc2VzLlxyXG4gKi9cclxuLyogZXNsaW50LWRpc2FibGUgcmVxdWlyZS1qc2RvYywgdmFsaWQtanNkb2MgKi9cclxudmFyIE1hcFNoaW0gPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKHR5cGVvZiBNYXAgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgcmV0dXJuIE1hcDtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBpbmRleCBpbiBwcm92aWRlZCBhcnJheSB0aGF0IG1hdGNoZXMgdGhlIHNwZWNpZmllZCBrZXkuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtBcnJheTxBcnJheT59IGFyclxyXG4gICAgICogQHBhcmFtIHsqfSBrZXlcclxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIGdldEluZGV4KGFyciwga2V5KSB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IC0xO1xyXG4gICAgICAgIGFyci5zb21lKGZ1bmN0aW9uIChlbnRyeSwgaW5kZXgpIHtcclxuICAgICAgICAgICAgaWYgKGVudHJ5WzBdID09PSBrZXkpIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGluZGV4O1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGZ1bmN0aW9uIGNsYXNzXzEoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX19lbnRyaWVzX18gPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNsYXNzXzEucHJvdG90eXBlLCBcInNpemVcIiwge1xyXG4gICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9fZW50cmllc19fLmxlbmd0aDtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHBhcmFtIHsqfSBrZXlcclxuICAgICAgICAgKiBAcmV0dXJucyB7Kn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBjbGFzc18xLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICAgICAgICAgIHZhciBpbmRleCA9IGdldEluZGV4KHRoaXMuX19lbnRyaWVzX18sIGtleSk7XHJcbiAgICAgICAgICAgIHZhciBlbnRyeSA9IHRoaXMuX19lbnRyaWVzX19baW5kZXhdO1xyXG4gICAgICAgICAgICByZXR1cm4gZW50cnkgJiYgZW50cnlbMV07XHJcbiAgICAgICAgfTtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAcGFyYW0geyp9IGtleVxyXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gdmFsdWVcclxuICAgICAgICAgKiBAcmV0dXJucyB7dm9pZH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBjbGFzc18xLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xyXG4gICAgICAgICAgICB2YXIgaW5kZXggPSBnZXRJbmRleCh0aGlzLl9fZW50cmllc19fLCBrZXkpO1xyXG4gICAgICAgICAgICBpZiAofmluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9fZW50cmllc19fW2luZGV4XVsxXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fX2VudHJpZXNfXy5wdXNoKFtrZXksIHZhbHVlXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBwYXJhbSB7Kn0ga2V5XHJcbiAgICAgICAgICogQHJldHVybnMge3ZvaWR9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY2xhc3NfMS5wcm90b3R5cGUuZGVsZXRlID0gZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgICAgICB2YXIgZW50cmllcyA9IHRoaXMuX19lbnRyaWVzX187XHJcbiAgICAgICAgICAgIHZhciBpbmRleCA9IGdldEluZGV4KGVudHJpZXMsIGtleSk7XHJcbiAgICAgICAgICAgIGlmICh+aW5kZXgpIHtcclxuICAgICAgICAgICAgICAgIGVudHJpZXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHBhcmFtIHsqfSBrZXlcclxuICAgICAgICAgKiBAcmV0dXJucyB7dm9pZH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBjbGFzc18xLnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICAgICAgICAgIHJldHVybiAhIX5nZXRJbmRleCh0aGlzLl9fZW50cmllc19fLCBrZXkpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHJldHVybnMge3ZvaWR9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY2xhc3NfMS5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX19lbnRyaWVzX18uc3BsaWNlKDApO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcclxuICAgICAgICAgKiBAcGFyYW0geyp9IFtjdHg9bnVsbF1cclxuICAgICAgICAgKiBAcmV0dXJucyB7dm9pZH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBjbGFzc18xLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKGNhbGxiYWNrLCBjdHgpIHtcclxuICAgICAgICAgICAgaWYgKGN0eCA9PT0gdm9pZCAwKSB7IGN0eCA9IG51bGw7IH1cclxuICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IHRoaXMuX19lbnRyaWVzX187IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZW50cnkgPSBfYVtfaV07XHJcbiAgICAgICAgICAgICAgICBjYWxsYmFjay5jYWxsKGN0eCwgZW50cnlbMV0sIGVudHJ5WzBdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIGNsYXNzXzE7XHJcbiAgICB9KCkpO1xyXG59KSgpO1xuXG4vKipcclxuICogRGV0ZWN0cyB3aGV0aGVyIHdpbmRvdyBhbmQgZG9jdW1lbnQgb2JqZWN0cyBhcmUgYXZhaWxhYmxlIGluIGN1cnJlbnQgZW52aXJvbm1lbnQuXHJcbiAqL1xyXG52YXIgaXNCcm93c2VyID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuZG9jdW1lbnQgPT09IGRvY3VtZW50O1xuXG4vLyBSZXR1cm5zIGdsb2JhbCBvYmplY3Qgb2YgYSBjdXJyZW50IGVudmlyb25tZW50LlxyXG52YXIgZ2xvYmFsJDEgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnICYmIGdsb2JhbC5NYXRoID09PSBNYXRoKSB7XHJcbiAgICAgICAgcmV0dXJuIGdsb2JhbDtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgJiYgc2VsZi5NYXRoID09PSBNYXRoKSB7XHJcbiAgICAgICAgcmV0dXJuIHNlbGY7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Lk1hdGggPT09IE1hdGgpIHtcclxuICAgICAgICByZXR1cm4gd2luZG93O1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXHJcbiAgICByZXR1cm4gRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcclxufSkoKTtcblxuLyoqXHJcbiAqIEEgc2hpbSBmb3IgdGhlIHJlcXVlc3RBbmltYXRpb25GcmFtZSB3aGljaCBmYWxscyBiYWNrIHRvIHRoZSBzZXRUaW1lb3V0IGlmXHJcbiAqIGZpcnN0IG9uZSBpcyBub3Qgc3VwcG9ydGVkLlxyXG4gKlxyXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXF1ZXN0cycgaWRlbnRpZmllci5cclxuICovXHJcbnZhciByZXF1ZXN0QW5pbWF0aW9uRnJhbWUkMSA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAodHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIC8vIEl0J3MgcmVxdWlyZWQgdG8gdXNlIGEgYm91bmRlZCBmdW5jdGlvbiBiZWNhdXNlIElFIHNvbWV0aW1lcyB0aHJvd3NcclxuICAgICAgICAvLyBhbiBcIkludmFsaWQgY2FsbGluZyBvYmplY3RcIiBlcnJvciBpZiByQUYgaXMgaW52b2tlZCB3aXRob3V0IHRoZSBnbG9iYWxcclxuICAgICAgICAvLyBvYmplY3Qgb24gdGhlIGxlZnQgaGFuZCBzaWRlLlxyXG4gICAgICAgIHJldHVybiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZChnbG9iYWwkMSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKGNhbGxiYWNrKSB7IHJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNhbGxiYWNrKERhdGUubm93KCkpOyB9LCAxMDAwIC8gNjApOyB9O1xyXG59KSgpO1xuXG4vLyBEZWZpbmVzIG1pbmltdW0gdGltZW91dCBiZWZvcmUgYWRkaW5nIGEgdHJhaWxpbmcgY2FsbC5cclxudmFyIHRyYWlsaW5nVGltZW91dCA9IDI7XHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgd3JhcHBlciBmdW5jdGlvbiB3aGljaCBlbnN1cmVzIHRoYXQgcHJvdmlkZWQgY2FsbGJhY2sgd2lsbCBiZVxyXG4gKiBpbnZva2VkIG9ubHkgb25jZSBkdXJpbmcgdGhlIHNwZWNpZmllZCBkZWxheSBwZXJpb2QuXHJcbiAqXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIC0gRnVuY3Rpb24gdG8gYmUgaW52b2tlZCBhZnRlciB0aGUgZGVsYXkgcGVyaW9kLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gZGVsYXkgLSBEZWxheSBhZnRlciB3aGljaCB0byBpbnZva2UgY2FsbGJhY2suXHJcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cclxuICovXHJcbmZ1bmN0aW9uIHRocm90dGxlIChjYWxsYmFjaywgZGVsYXkpIHtcclxuICAgIHZhciBsZWFkaW5nQ2FsbCA9IGZhbHNlLCB0cmFpbGluZ0NhbGwgPSBmYWxzZSwgbGFzdENhbGxUaW1lID0gMDtcclxuICAgIC8qKlxyXG4gICAgICogSW52b2tlcyB0aGUgb3JpZ2luYWwgY2FsbGJhY2sgZnVuY3Rpb24gYW5kIHNjaGVkdWxlcyBuZXcgaW52b2NhdGlvbiBpZlxyXG4gICAgICogdGhlIFwicHJveHlcIiB3YXMgY2FsbGVkIGR1cmluZyBjdXJyZW50IHJlcXVlc3QuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybnMge3ZvaWR9XHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIHJlc29sdmVQZW5kaW5nKCkge1xyXG4gICAgICAgIGlmIChsZWFkaW5nQ2FsbCkge1xyXG4gICAgICAgICAgICBsZWFkaW5nQ2FsbCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBjYWxsYmFjaygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodHJhaWxpbmdDYWxsKSB7XHJcbiAgICAgICAgICAgIHByb3h5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxsYmFjayBpbnZva2VkIGFmdGVyIHRoZSBzcGVjaWZpZWQgZGVsYXkuIEl0IHdpbGwgZnVydGhlciBwb3N0cG9uZVxyXG4gICAgICogaW52b2NhdGlvbiBvZiB0aGUgb3JpZ2luYWwgZnVuY3Rpb24gZGVsZWdhdGluZyBpdCB0byB0aGVcclxuICAgICAqIHJlcXVlc3RBbmltYXRpb25GcmFtZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJucyB7dm9pZH1cclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gdGltZW91dENhbGxiYWNrKCkge1xyXG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSQxKHJlc29sdmVQZW5kaW5nKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogU2NoZWR1bGVzIGludm9jYXRpb24gb2YgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm5zIHt2b2lkfVxyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiBwcm94eSgpIHtcclxuICAgICAgICB2YXIgdGltZVN0YW1wID0gRGF0ZS5ub3coKTtcclxuICAgICAgICBpZiAobGVhZGluZ0NhbGwpIHtcclxuICAgICAgICAgICAgLy8gUmVqZWN0IGltbWVkaWF0ZWx5IGZvbGxvd2luZyBjYWxscy5cclxuICAgICAgICAgICAgaWYgKHRpbWVTdGFtcCAtIGxhc3RDYWxsVGltZSA8IHRyYWlsaW5nVGltZW91dCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIFNjaGVkdWxlIG5ldyBjYWxsIHRvIGJlIGluIGludm9rZWQgd2hlbiB0aGUgcGVuZGluZyBvbmUgaXMgcmVzb2x2ZWQuXHJcbiAgICAgICAgICAgIC8vIFRoaXMgaXMgaW1wb3J0YW50IGZvciBcInRyYW5zaXRpb25zXCIgd2hpY2ggbmV2ZXIgYWN0dWFsbHkgc3RhcnRcclxuICAgICAgICAgICAgLy8gaW1tZWRpYXRlbHkgc28gdGhlcmUgaXMgYSBjaGFuY2UgdGhhdCB3ZSBtaWdodCBtaXNzIG9uZSBpZiBjaGFuZ2VcclxuICAgICAgICAgICAgLy8gaGFwcGVucyBhbWlkcyB0aGUgcGVuZGluZyBpbnZvY2F0aW9uLlxyXG4gICAgICAgICAgICB0cmFpbGluZ0NhbGwgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbGVhZGluZ0NhbGwgPSB0cnVlO1xyXG4gICAgICAgICAgICB0cmFpbGluZ0NhbGwgPSBmYWxzZTtcclxuICAgICAgICAgICAgc2V0VGltZW91dCh0aW1lb3V0Q2FsbGJhY2ssIGRlbGF5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGFzdENhbGxUaW1lID0gdGltZVN0YW1wO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHByb3h5O1xyXG59XG5cbi8vIE1pbmltdW0gZGVsYXkgYmVmb3JlIGludm9raW5nIHRoZSB1cGRhdGUgb2Ygb2JzZXJ2ZXJzLlxyXG52YXIgUkVGUkVTSF9ERUxBWSA9IDIwO1xyXG4vLyBBIGxpc3Qgb2Ygc3Vic3RyaW5ncyBvZiBDU1MgcHJvcGVydGllcyB1c2VkIHRvIGZpbmQgdHJhbnNpdGlvbiBldmVudHMgdGhhdFxyXG4vLyBtaWdodCBhZmZlY3QgZGltZW5zaW9ucyBvZiBvYnNlcnZlZCBlbGVtZW50cy5cclxudmFyIHRyYW5zaXRpb25LZXlzID0gWyd0b3AnLCAncmlnaHQnLCAnYm90dG9tJywgJ2xlZnQnLCAnd2lkdGgnLCAnaGVpZ2h0JywgJ3NpemUnLCAnd2VpZ2h0J107XHJcbi8vIENoZWNrIGlmIE11dGF0aW9uT2JzZXJ2ZXIgaXMgYXZhaWxhYmxlLlxyXG52YXIgbXV0YXRpb25PYnNlcnZlclN1cHBvcnRlZCA9IHR5cGVvZiBNdXRhdGlvbk9ic2VydmVyICE9PSAndW5kZWZpbmVkJztcclxuLyoqXHJcbiAqIFNpbmdsZXRvbiBjb250cm9sbGVyIGNsYXNzIHdoaWNoIGhhbmRsZXMgdXBkYXRlcyBvZiBSZXNpemVPYnNlcnZlciBpbnN0YW5jZXMuXHJcbiAqL1xyXG52YXIgUmVzaXplT2JzZXJ2ZXJDb250cm9sbGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIFJlc2l6ZU9ic2VydmVyQ29udHJvbGxlci5cclxuICAgICAqXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiBSZXNpemVPYnNlcnZlckNvbnRyb2xsZXIoKSB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSW5kaWNhdGVzIHdoZXRoZXIgRE9NIGxpc3RlbmVycyBoYXZlIGJlZW4gYWRkZWQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAcHJpdmF0ZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNvbm5lY3RlZF8gPSBmYWxzZTtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUZWxscyB0aGF0IGNvbnRyb2xsZXIgaGFzIHN1YnNjcmliZWQgZm9yIE11dGF0aW9uIEV2ZW50cy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBwcml2YXRlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubXV0YXRpb25FdmVudHNBZGRlZF8gPSBmYWxzZTtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBLZWVwcyByZWZlcmVuY2UgdG8gdGhlIGluc3RhbmNlIG9mIE11dGF0aW9uT2JzZXJ2ZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAcHJpdmF0ZSB7TXV0YXRpb25PYnNlcnZlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm11dGF0aW9uc09ic2VydmVyXyA9IG51bGw7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSBsaXN0IG9mIGNvbm5lY3RlZCBvYnNlcnZlcnMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAcHJpdmF0ZSB7QXJyYXk8UmVzaXplT2JzZXJ2ZXJTUEk+fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMub2JzZXJ2ZXJzXyA9IFtdO1xyXG4gICAgICAgIHRoaXMub25UcmFuc2l0aW9uRW5kXyA9IHRoaXMub25UcmFuc2l0aW9uRW5kXy5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMucmVmcmVzaCA9IHRocm90dGxlKHRoaXMucmVmcmVzaC5iaW5kKHRoaXMpLCBSRUZSRVNIX0RFTEFZKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQWRkcyBvYnNlcnZlciB0byBvYnNlcnZlcnMgbGlzdC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1Jlc2l6ZU9ic2VydmVyU1BJfSBvYnNlcnZlciAtIE9ic2VydmVyIHRvIGJlIGFkZGVkLlxyXG4gICAgICogQHJldHVybnMge3ZvaWR9XHJcbiAgICAgKi9cclxuICAgIFJlc2l6ZU9ic2VydmVyQ29udHJvbGxlci5wcm90b3R5cGUuYWRkT2JzZXJ2ZXIgPSBmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcclxuICAgICAgICBpZiAoIX50aGlzLm9ic2VydmVyc18uaW5kZXhPZihvYnNlcnZlcikpIHtcclxuICAgICAgICAgICAgdGhpcy5vYnNlcnZlcnNfLnB1c2gob2JzZXJ2ZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBBZGQgbGlzdGVuZXJzIGlmIHRoZXkgaGF2ZW4ndCBiZWVuIGFkZGVkIHlldC5cclxuICAgICAgICBpZiAoIXRoaXMuY29ubmVjdGVkXykge1xyXG4gICAgICAgICAgICB0aGlzLmNvbm5lY3RfKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyBvYnNlcnZlciBmcm9tIG9ic2VydmVycyBsaXN0LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UmVzaXplT2JzZXJ2ZXJTUEl9IG9ic2VydmVyIC0gT2JzZXJ2ZXIgdG8gYmUgcmVtb3ZlZC5cclxuICAgICAqIEByZXR1cm5zIHt2b2lkfVxyXG4gICAgICovXHJcbiAgICBSZXNpemVPYnNlcnZlckNvbnRyb2xsZXIucHJvdG90eXBlLnJlbW92ZU9ic2VydmVyID0gZnVuY3Rpb24gKG9ic2VydmVyKSB7XHJcbiAgICAgICAgdmFyIG9ic2VydmVycyA9IHRoaXMub2JzZXJ2ZXJzXztcclxuICAgICAgICB2YXIgaW5kZXggPSBvYnNlcnZlcnMuaW5kZXhPZihvYnNlcnZlcik7XHJcbiAgICAgICAgLy8gUmVtb3ZlIG9ic2VydmVyIGlmIGl0J3MgcHJlc2VudCBpbiByZWdpc3RyeS5cclxuICAgICAgICBpZiAofmluZGV4KSB7XHJcbiAgICAgICAgICAgIG9ic2VydmVycy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBSZW1vdmUgbGlzdGVuZXJzIGlmIGNvbnRyb2xsZXIgaGFzIG5vIGNvbm5lY3RlZCBvYnNlcnZlcnMuXHJcbiAgICAgICAgaWYgKCFvYnNlcnZlcnMubGVuZ3RoICYmIHRoaXMuY29ubmVjdGVkXykge1xyXG4gICAgICAgICAgICB0aGlzLmRpc2Nvbm5lY3RfKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogSW52b2tlcyB0aGUgdXBkYXRlIG9mIG9ic2VydmVycy4gSXQgd2lsbCBjb250aW51ZSBydW5uaW5nIHVwZGF0ZXMgaW5zb2ZhclxyXG4gICAgICogaXQgZGV0ZWN0cyBjaGFuZ2VzLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm5zIHt2b2lkfVxyXG4gICAgICovXHJcbiAgICBSZXNpemVPYnNlcnZlckNvbnRyb2xsZXIucHJvdG90eXBlLnJlZnJlc2ggPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGNoYW5nZXNEZXRlY3RlZCA9IHRoaXMudXBkYXRlT2JzZXJ2ZXJzXygpO1xyXG4gICAgICAgIC8vIENvbnRpbnVlIHJ1bm5pbmcgdXBkYXRlcyBpZiBjaGFuZ2VzIGhhdmUgYmVlbiBkZXRlY3RlZCBhcyB0aGVyZSBtaWdodFxyXG4gICAgICAgIC8vIGJlIGZ1dHVyZSBvbmVzIGNhdXNlZCBieSBDU1MgdHJhbnNpdGlvbnMuXHJcbiAgICAgICAgaWYgKGNoYW5nZXNEZXRlY3RlZCkge1xyXG4gICAgICAgICAgICB0aGlzLnJlZnJlc2goKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGVzIGV2ZXJ5IG9ic2VydmVyIGZyb20gb2JzZXJ2ZXJzIGxpc3QgYW5kIG5vdGlmaWVzIHRoZW0gb2YgcXVldWVkXHJcbiAgICAgKiBlbnRyaWVzLlxyXG4gICAgICpcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBcInRydWVcIiBpZiBhbnkgb2JzZXJ2ZXIgaGFzIGRldGVjdGVkIGNoYW5nZXMgaW5cclxuICAgICAqICAgICAgZGltZW5zaW9ucyBvZiBpdCdzIGVsZW1lbnRzLlxyXG4gICAgICovXHJcbiAgICBSZXNpemVPYnNlcnZlckNvbnRyb2xsZXIucHJvdG90eXBlLnVwZGF0ZU9ic2VydmVyc18gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgLy8gQ29sbGVjdCBvYnNlcnZlcnMgdGhhdCBoYXZlIGFjdGl2ZSBvYnNlcnZhdGlvbnMuXHJcbiAgICAgICAgdmFyIGFjdGl2ZU9ic2VydmVycyA9IHRoaXMub2JzZXJ2ZXJzXy5maWx0ZXIoZnVuY3Rpb24gKG9ic2VydmVyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBvYnNlcnZlci5nYXRoZXJBY3RpdmUoKSwgb2JzZXJ2ZXIuaGFzQWN0aXZlKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgLy8gRGVsaXZlciBub3RpZmljYXRpb25zIGluIGEgc2VwYXJhdGUgY3ljbGUgaW4gb3JkZXIgdG8gYXZvaWQgYW55XHJcbiAgICAgICAgLy8gY29sbGlzaW9ucyBiZXR3ZWVuIG9ic2VydmVycywgZS5nLiB3aGVuIG11bHRpcGxlIGluc3RhbmNlcyBvZlxyXG4gICAgICAgIC8vIFJlc2l6ZU9ic2VydmVyIGFyZSB0cmFja2luZyB0aGUgc2FtZSBlbGVtZW50IGFuZCB0aGUgY2FsbGJhY2sgb2Ygb25lXHJcbiAgICAgICAgLy8gb2YgdGhlbSBjaGFuZ2VzIGNvbnRlbnQgZGltZW5zaW9ucyBvZiB0aGUgb2JzZXJ2ZWQgdGFyZ2V0LiBTb21ldGltZXNcclxuICAgICAgICAvLyB0aGlzIG1heSByZXN1bHQgaW4gbm90aWZpY2F0aW9ucyBiZWluZyBibG9ja2VkIGZvciB0aGUgcmVzdCBvZiBvYnNlcnZlcnMuXHJcbiAgICAgICAgYWN0aXZlT2JzZXJ2ZXJzLmZvckVhY2goZnVuY3Rpb24gKG9ic2VydmVyKSB7IHJldHVybiBvYnNlcnZlci5icm9hZGNhc3RBY3RpdmUoKTsgfSk7XHJcbiAgICAgICAgcmV0dXJuIGFjdGl2ZU9ic2VydmVycy5sZW5ndGggPiAwO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogSW5pdGlhbGl6ZXMgRE9NIGxpc3RlbmVycy5cclxuICAgICAqXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHJldHVybnMge3ZvaWR9XHJcbiAgICAgKi9cclxuICAgIFJlc2l6ZU9ic2VydmVyQ29udHJvbGxlci5wcm90b3R5cGUuY29ubmVjdF8gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgLy8gRG8gbm90aGluZyBpZiBydW5uaW5nIGluIGEgbm9uLWJyb3dzZXIgZW52aXJvbm1lbnQgb3IgaWYgbGlzdGVuZXJzXHJcbiAgICAgICAgLy8gaGF2ZSBiZWVuIGFscmVhZHkgYWRkZWQuXHJcbiAgICAgICAgaWYgKCFpc0Jyb3dzZXIgfHwgdGhpcy5jb25uZWN0ZWRfKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gU3Vic2NyaXB0aW9uIHRvIHRoZSBcIlRyYW5zaXRpb25lbmRcIiBldmVudCBpcyB1c2VkIGFzIGEgd29ya2Fyb3VuZCBmb3JcclxuICAgICAgICAvLyBkZWxheWVkIHRyYW5zaXRpb25zLiBUaGlzIHdheSBpdCdzIHBvc3NpYmxlIHRvIGNhcHR1cmUgYXQgbGVhc3QgdGhlXHJcbiAgICAgICAgLy8gZmluYWwgc3RhdGUgb2YgYW4gZWxlbWVudC5cclxuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd0cmFuc2l0aW9uZW5kJywgdGhpcy5vblRyYW5zaXRpb25FbmRfKTtcclxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5yZWZyZXNoKTtcclxuICAgICAgICBpZiAobXV0YXRpb25PYnNlcnZlclN1cHBvcnRlZCkge1xyXG4gICAgICAgICAgICB0aGlzLm11dGF0aW9uc09ic2VydmVyXyA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKHRoaXMucmVmcmVzaCk7XHJcbiAgICAgICAgICAgIHRoaXMubXV0YXRpb25zT2JzZXJ2ZXJfLm9ic2VydmUoZG9jdW1lbnQsIHtcclxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBjaGlsZExpc3Q6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBjaGFyYWN0ZXJEYXRhOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgc3VidHJlZTogdHJ1ZVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTVN1YnRyZWVNb2RpZmllZCcsIHRoaXMucmVmcmVzaCk7XHJcbiAgICAgICAgICAgIHRoaXMubXV0YXRpb25FdmVudHNBZGRlZF8gPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNvbm5lY3RlZF8gPSB0cnVlO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyBET00gbGlzdGVuZXJzLlxyXG4gICAgICpcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAcmV0dXJucyB7dm9pZH1cclxuICAgICAqL1xyXG4gICAgUmVzaXplT2JzZXJ2ZXJDb250cm9sbGVyLnByb3RvdHlwZS5kaXNjb25uZWN0XyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAvLyBEbyBub3RoaW5nIGlmIHJ1bm5pbmcgaW4gYSBub24tYnJvd3NlciBlbnZpcm9ubWVudCBvciBpZiBsaXN0ZW5lcnNcclxuICAgICAgICAvLyBoYXZlIGJlZW4gYWxyZWFkeSByZW1vdmVkLlxyXG4gICAgICAgIGlmICghaXNCcm93c2VyIHx8ICF0aGlzLmNvbm5lY3RlZF8pIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0cmFuc2l0aW9uZW5kJywgdGhpcy5vblRyYW5zaXRpb25FbmRfKTtcclxuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5yZWZyZXNoKTtcclxuICAgICAgICBpZiAodGhpcy5tdXRhdGlvbnNPYnNlcnZlcl8pIHtcclxuICAgICAgICAgICAgdGhpcy5tdXRhdGlvbnNPYnNlcnZlcl8uZGlzY29ubmVjdCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5tdXRhdGlvbkV2ZW50c0FkZGVkXykge1xyXG4gICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdET01TdWJ0cmVlTW9kaWZpZWQnLCB0aGlzLnJlZnJlc2gpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm11dGF0aW9uc09ic2VydmVyXyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5tdXRhdGlvbkV2ZW50c0FkZGVkXyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY29ubmVjdGVkXyA9IGZhbHNlO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogXCJUcmFuc2l0aW9uZW5kXCIgZXZlbnQgaGFuZGxlci5cclxuICAgICAqXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHBhcmFtIHtUcmFuc2l0aW9uRXZlbnR9IGV2ZW50XHJcbiAgICAgKiBAcmV0dXJucyB7dm9pZH1cclxuICAgICAqL1xyXG4gICAgUmVzaXplT2JzZXJ2ZXJDb250cm9sbGVyLnByb3RvdHlwZS5vblRyYW5zaXRpb25FbmRfID0gZnVuY3Rpb24gKF9hKSB7XHJcbiAgICAgICAgdmFyIF9iID0gX2EucHJvcGVydHlOYW1lLCBwcm9wZXJ0eU5hbWUgPSBfYiA9PT0gdm9pZCAwID8gJycgOiBfYjtcclxuICAgICAgICAvLyBEZXRlY3Qgd2hldGhlciB0cmFuc2l0aW9uIG1heSBhZmZlY3QgZGltZW5zaW9ucyBvZiBhbiBlbGVtZW50LlxyXG4gICAgICAgIHZhciBpc1JlZmxvd1Byb3BlcnR5ID0gdHJhbnNpdGlvbktleXMuc29tZShmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICAgICAgICAgIHJldHVybiAhIX5wcm9wZXJ0eU5hbWUuaW5kZXhPZihrZXkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChpc1JlZmxvd1Byb3BlcnR5KSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaCgpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgaW5zdGFuY2Ugb2YgdGhlIFJlc2l6ZU9ic2VydmVyQ29udHJvbGxlci5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJucyB7UmVzaXplT2JzZXJ2ZXJDb250cm9sbGVyfVxyXG4gICAgICovXHJcbiAgICBSZXNpemVPYnNlcnZlckNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmluc3RhbmNlXykge1xyXG4gICAgICAgICAgICB0aGlzLmluc3RhbmNlXyA9IG5ldyBSZXNpemVPYnNlcnZlckNvbnRyb2xsZXIoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5zdGFuY2VfO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogSG9sZHMgcmVmZXJlbmNlIHRvIHRoZSBjb250cm9sbGVyJ3MgaW5zdGFuY2UuXHJcbiAgICAgKlxyXG4gICAgICogQHByaXZhdGUge1Jlc2l6ZU9ic2VydmVyQ29udHJvbGxlcn1cclxuICAgICAqL1xyXG4gICAgUmVzaXplT2JzZXJ2ZXJDb250cm9sbGVyLmluc3RhbmNlXyA9IG51bGw7XHJcbiAgICByZXR1cm4gUmVzaXplT2JzZXJ2ZXJDb250cm9sbGVyO1xyXG59KCkpO1xuXG4vKipcclxuICogRGVmaW5lcyBub24td3JpdGFibGUvZW51bWVyYWJsZSBwcm9wZXJ0aWVzIG9mIHRoZSBwcm92aWRlZCB0YXJnZXQgb2JqZWN0LlxyXG4gKlxyXG4gKiBAcGFyYW0ge09iamVjdH0gdGFyZ2V0IC0gT2JqZWN0IGZvciB3aGljaCB0byBkZWZpbmUgcHJvcGVydGllcy5cclxuICogQHBhcmFtIHtPYmplY3R9IHByb3BzIC0gUHJvcGVydGllcyB0byBiZSBkZWZpbmVkLlxyXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUYXJnZXQgb2JqZWN0LlxyXG4gKi9cclxudmFyIGRlZmluZUNvbmZpZ3VyYWJsZSA9IChmdW5jdGlvbiAodGFyZ2V0LCBwcm9wcykge1xyXG4gICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IE9iamVjdC5rZXlzKHByb3BzKTsgX2kgPCBfYS5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICB2YXIga2V5ID0gX2FbX2ldO1xyXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwge1xyXG4gICAgICAgICAgICB2YWx1ZTogcHJvcHNba2V5XSxcclxuICAgICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGFyZ2V0O1xyXG59KTtcblxuLyoqXHJcbiAqIFJldHVybnMgdGhlIGdsb2JhbCBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHByb3ZpZGVkIGVsZW1lbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSB0YXJnZXRcclxuICogQHJldHVybnMge09iamVjdH1cclxuICovXHJcbnZhciBnZXRXaW5kb3dPZiA9IChmdW5jdGlvbiAodGFyZ2V0KSB7XHJcbiAgICAvLyBBc3N1bWUgdGhhdCB0aGUgZWxlbWVudCBpcyBhbiBpbnN0YW5jZSBvZiBOb2RlLCB3aGljaCBtZWFucyB0aGF0IGl0XHJcbiAgICAvLyBoYXMgdGhlIFwib3duZXJEb2N1bWVudFwiIHByb3BlcnR5IGZyb20gd2hpY2ggd2UgY2FuIHJldHJpZXZlIGFcclxuICAgIC8vIGNvcnJlc3BvbmRpbmcgZ2xvYmFsIG9iamVjdC5cclxuICAgIHZhciBvd25lckdsb2JhbCA9IHRhcmdldCAmJiB0YXJnZXQub3duZXJEb2N1bWVudCAmJiB0YXJnZXQub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldztcclxuICAgIC8vIFJldHVybiB0aGUgbG9jYWwgZ2xvYmFsIG9iamVjdCBpZiBpdCdzIG5vdCBwb3NzaWJsZSBleHRyYWN0IG9uZSBmcm9tXHJcbiAgICAvLyBwcm92aWRlZCBlbGVtZW50LlxyXG4gICAgcmV0dXJuIG93bmVyR2xvYmFsIHx8IGdsb2JhbCQxO1xyXG59KTtcblxuLy8gUGxhY2Vob2xkZXIgb2YgYW4gZW1wdHkgY29udGVudCByZWN0YW5nbGUuXHJcbnZhciBlbXB0eVJlY3QgPSBjcmVhdGVSZWN0SW5pdCgwLCAwLCAwLCAwKTtcclxuLyoqXHJcbiAqIENvbnZlcnRzIHByb3ZpZGVkIHN0cmluZyB0byBhIG51bWJlci5cclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSB2YWx1ZVxyXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxyXG4gKi9cclxuZnVuY3Rpb24gdG9GbG9hdCh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIHBhcnNlRmxvYXQodmFsdWUpIHx8IDA7XHJcbn1cclxuLyoqXHJcbiAqIEV4dHJhY3RzIGJvcmRlcnMgc2l6ZSBmcm9tIHByb3ZpZGVkIHN0eWxlcy5cclxuICpcclxuICogQHBhcmFtIHtDU1NTdHlsZURlY2xhcmF0aW9ufSBzdHlsZXNcclxuICogQHBhcmFtIHsuLi5zdHJpbmd9IHBvc2l0aW9ucyAtIEJvcmRlcnMgcG9zaXRpb25zICh0b3AsIHJpZ2h0LCAuLi4pXHJcbiAqIEByZXR1cm5zIHtudW1iZXJ9XHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRCb3JkZXJzU2l6ZShzdHlsZXMpIHtcclxuICAgIHZhciBwb3NpdGlvbnMgPSBbXTtcclxuICAgIGZvciAodmFyIF9pID0gMTsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgcG9zaXRpb25zW19pIC0gMV0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHBvc2l0aW9ucy5yZWR1Y2UoZnVuY3Rpb24gKHNpemUsIHBvc2l0aW9uKSB7XHJcbiAgICAgICAgdmFyIHZhbHVlID0gc3R5bGVzWydib3JkZXItJyArIHBvc2l0aW9uICsgJy13aWR0aCddO1xyXG4gICAgICAgIHJldHVybiBzaXplICsgdG9GbG9hdCh2YWx1ZSk7XHJcbiAgICB9LCAwKTtcclxufVxyXG4vKipcclxuICogRXh0cmFjdHMgcGFkZGluZ3Mgc2l6ZXMgZnJvbSBwcm92aWRlZCBzdHlsZXMuXHJcbiAqXHJcbiAqIEBwYXJhbSB7Q1NTU3R5bGVEZWNsYXJhdGlvbn0gc3R5bGVzXHJcbiAqIEByZXR1cm5zIHtPYmplY3R9IFBhZGRpbmdzIGJveC5cclxuICovXHJcbmZ1bmN0aW9uIGdldFBhZGRpbmdzKHN0eWxlcykge1xyXG4gICAgdmFyIHBvc2l0aW9ucyA9IFsndG9wJywgJ3JpZ2h0JywgJ2JvdHRvbScsICdsZWZ0J107XHJcbiAgICB2YXIgcGFkZGluZ3MgPSB7fTtcclxuICAgIGZvciAodmFyIF9pID0gMCwgcG9zaXRpb25zXzEgPSBwb3NpdGlvbnM7IF9pIDwgcG9zaXRpb25zXzEubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgdmFyIHBvc2l0aW9uID0gcG9zaXRpb25zXzFbX2ldO1xyXG4gICAgICAgIHZhciB2YWx1ZSA9IHN0eWxlc1sncGFkZGluZy0nICsgcG9zaXRpb25dO1xyXG4gICAgICAgIHBhZGRpbmdzW3Bvc2l0aW9uXSA9IHRvRmxvYXQodmFsdWUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHBhZGRpbmdzO1xyXG59XHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIGNvbnRlbnQgcmVjdGFuZ2xlIG9mIHByb3ZpZGVkIFNWRyBlbGVtZW50LlxyXG4gKlxyXG4gKiBAcGFyYW0ge1NWR0dyYXBoaWNzRWxlbWVudH0gdGFyZ2V0IC0gRWxlbWVudCBjb250ZW50IHJlY3RhbmdsZSBvZiB3aGljaCBuZWVkc1xyXG4gKiAgICAgIHRvIGJlIGNhbGN1bGF0ZWQuXHJcbiAqIEByZXR1cm5zIHtET01SZWN0SW5pdH1cclxuICovXHJcbmZ1bmN0aW9uIGdldFNWR0NvbnRlbnRSZWN0KHRhcmdldCkge1xyXG4gICAgdmFyIGJib3ggPSB0YXJnZXQuZ2V0QkJveCgpO1xyXG4gICAgcmV0dXJuIGNyZWF0ZVJlY3RJbml0KDAsIDAsIGJib3gud2lkdGgsIGJib3guaGVpZ2h0KTtcclxufVxyXG4vKipcclxuICogQ2FsY3VsYXRlcyBjb250ZW50IHJlY3RhbmdsZSBvZiBwcm92aWRlZCBIVE1MRWxlbWVudC5cclxuICpcclxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gdGFyZ2V0IC0gRWxlbWVudCBmb3Igd2hpY2ggdG8gY2FsY3VsYXRlIHRoZSBjb250ZW50IHJlY3RhbmdsZS5cclxuICogQHJldHVybnMge0RPTVJlY3RJbml0fVxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0SFRNTEVsZW1lbnRDb250ZW50UmVjdCh0YXJnZXQpIHtcclxuICAgIC8vIENsaWVudCB3aWR0aCAmIGhlaWdodCBwcm9wZXJ0aWVzIGNhbid0IGJlXHJcbiAgICAvLyB1c2VkIGV4Y2x1c2l2ZWx5IGFzIHRoZXkgcHJvdmlkZSByb3VuZGVkIHZhbHVlcy5cclxuICAgIHZhciBjbGllbnRXaWR0aCA9IHRhcmdldC5jbGllbnRXaWR0aCwgY2xpZW50SGVpZ2h0ID0gdGFyZ2V0LmNsaWVudEhlaWdodDtcclxuICAgIC8vIEJ5IHRoaXMgY29uZGl0aW9uIHdlIGNhbiBjYXRjaCBhbGwgbm9uLXJlcGxhY2VkIGlubGluZSwgaGlkZGVuIGFuZFxyXG4gICAgLy8gZGV0YWNoZWQgZWxlbWVudHMuIFRob3VnaCBlbGVtZW50cyB3aXRoIHdpZHRoICYgaGVpZ2h0IHByb3BlcnRpZXMgbGVzc1xyXG4gICAgLy8gdGhhbiAwLjUgd2lsbCBiZSBkaXNjYXJkZWQgYXMgd2VsbC5cclxuICAgIC8vXHJcbiAgICAvLyBXaXRob3V0IGl0IHdlIHdvdWxkIG5lZWQgdG8gaW1wbGVtZW50IHNlcGFyYXRlIG1ldGhvZHMgZm9yIGVhY2ggb2ZcclxuICAgIC8vIHRob3NlIGNhc2VzIGFuZCBpdCdzIG5vdCBwb3NzaWJsZSB0byBwZXJmb3JtIGEgcHJlY2lzZSBhbmQgcGVyZm9ybWFuY2VcclxuICAgIC8vIGVmZmVjdGl2ZSB0ZXN0IGZvciBoaWRkZW4gZWxlbWVudHMuIEUuZy4gZXZlbiBqUXVlcnkncyAnOnZpc2libGUnIGZpbHRlclxyXG4gICAgLy8gZ2l2ZXMgd3JvbmcgcmVzdWx0cyBmb3IgZWxlbWVudHMgd2l0aCB3aWR0aCAmIGhlaWdodCBsZXNzIHRoYW4gMC41LlxyXG4gICAgaWYgKCFjbGllbnRXaWR0aCAmJiAhY2xpZW50SGVpZ2h0KSB7XHJcbiAgICAgICAgcmV0dXJuIGVtcHR5UmVjdDtcclxuICAgIH1cclxuICAgIHZhciBzdHlsZXMgPSBnZXRXaW5kb3dPZih0YXJnZXQpLmdldENvbXB1dGVkU3R5bGUodGFyZ2V0KTtcclxuICAgIHZhciBwYWRkaW5ncyA9IGdldFBhZGRpbmdzKHN0eWxlcyk7XHJcbiAgICB2YXIgaG9yaXpQYWQgPSBwYWRkaW5ncy5sZWZ0ICsgcGFkZGluZ3MucmlnaHQ7XHJcbiAgICB2YXIgdmVydFBhZCA9IHBhZGRpbmdzLnRvcCArIHBhZGRpbmdzLmJvdHRvbTtcclxuICAgIC8vIENvbXB1dGVkIHN0eWxlcyBvZiB3aWR0aCAmIGhlaWdodCBhcmUgYmVpbmcgdXNlZCBiZWNhdXNlIHRoZXkgYXJlIHRoZVxyXG4gICAgLy8gb25seSBkaW1lbnNpb25zIGF2YWlsYWJsZSB0byBKUyB0aGF0IGNvbnRhaW4gbm9uLXJvdW5kZWQgdmFsdWVzLiBJdCBjb3VsZFxyXG4gICAgLy8gYmUgcG9zc2libGUgdG8gdXRpbGl6ZSB0aGUgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGlmIG9ubHkgaXQncyBkYXRhIHdhc24ndFxyXG4gICAgLy8gYWZmZWN0ZWQgYnkgQ1NTIHRyYW5zZm9ybWF0aW9ucyBsZXQgYWxvbmUgcGFkZGluZ3MsIGJvcmRlcnMgYW5kIHNjcm9sbCBiYXJzLlxyXG4gICAgdmFyIHdpZHRoID0gdG9GbG9hdChzdHlsZXMud2lkdGgpLCBoZWlnaHQgPSB0b0Zsb2F0KHN0eWxlcy5oZWlnaHQpO1xyXG4gICAgLy8gV2lkdGggJiBoZWlnaHQgaW5jbHVkZSBwYWRkaW5ncyBhbmQgYm9yZGVycyB3aGVuIHRoZSAnYm9yZGVyLWJveCcgYm94XHJcbiAgICAvLyBtb2RlbCBpcyBhcHBsaWVkIChleGNlcHQgZm9yIElFKS5cclxuICAgIGlmIChzdHlsZXMuYm94U2l6aW5nID09PSAnYm9yZGVyLWJveCcpIHtcclxuICAgICAgICAvLyBGb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgcmVxdWlyZWQgdG8gaGFuZGxlIEludGVybmV0IEV4cGxvcmVyIHdoaWNoXHJcbiAgICAgICAgLy8gZG9lc24ndCBpbmNsdWRlIHBhZGRpbmdzIGFuZCBib3JkZXJzIHRvIGNvbXB1dGVkIENTUyBkaW1lbnNpb25zLlxyXG4gICAgICAgIC8vXHJcbiAgICAgICAgLy8gV2UgY2FuIHNheSB0aGF0IGlmIENTUyBkaW1lbnNpb25zICsgcGFkZGluZ3MgYXJlIGVxdWFsIHRvIHRoZSBcImNsaWVudFwiXHJcbiAgICAgICAgLy8gcHJvcGVydGllcyB0aGVuIGl0J3MgZWl0aGVyIElFLCBhbmQgdGh1cyB3ZSBkb24ndCBuZWVkIHRvIHN1YnRyYWN0XHJcbiAgICAgICAgLy8gYW55dGhpbmcsIG9yIGFuIGVsZW1lbnQgbWVyZWx5IGRvZXNuJ3QgaGF2ZSBwYWRkaW5ncy9ib3JkZXJzIHN0eWxlcy5cclxuICAgICAgICBpZiAoTWF0aC5yb3VuZCh3aWR0aCArIGhvcml6UGFkKSAhPT0gY2xpZW50V2lkdGgpIHtcclxuICAgICAgICAgICAgd2lkdGggLT0gZ2V0Qm9yZGVyc1NpemUoc3R5bGVzLCAnbGVmdCcsICdyaWdodCcpICsgaG9yaXpQYWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChNYXRoLnJvdW5kKGhlaWdodCArIHZlcnRQYWQpICE9PSBjbGllbnRIZWlnaHQpIHtcclxuICAgICAgICAgICAgaGVpZ2h0IC09IGdldEJvcmRlcnNTaXplKHN0eWxlcywgJ3RvcCcsICdib3R0b20nKSArIHZlcnRQYWQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gRm9sbG93aW5nIHN0ZXBzIGNhbid0IGJlIGFwcGxpZWQgdG8gdGhlIGRvY3VtZW50J3Mgcm9vdCBlbGVtZW50IGFzIGl0c1xyXG4gICAgLy8gY2xpZW50W1dpZHRoL0hlaWdodF0gcHJvcGVydGllcyByZXByZXNlbnQgdmlld3BvcnQgYXJlYSBvZiB0aGUgd2luZG93LlxyXG4gICAgLy8gQmVzaWRlcywgaXQncyBhcyB3ZWxsIG5vdCBuZWNlc3NhcnkgYXMgdGhlIDxodG1sPiBpdHNlbGYgbmVpdGhlciBoYXNcclxuICAgIC8vIHJlbmRlcmVkIHNjcm9sbCBiYXJzIG5vciBpdCBjYW4gYmUgY2xpcHBlZC5cclxuICAgIGlmICghaXNEb2N1bWVudEVsZW1lbnQodGFyZ2V0KSkge1xyXG4gICAgICAgIC8vIEluIHNvbWUgYnJvd3NlcnMgKG9ubHkgaW4gRmlyZWZveCwgYWN0dWFsbHkpIENTUyB3aWR0aCAmIGhlaWdodFxyXG4gICAgICAgIC8vIGluY2x1ZGUgc2Nyb2xsIGJhcnMgc2l6ZSB3aGljaCBjYW4gYmUgcmVtb3ZlZCBhdCB0aGlzIHN0ZXAgYXMgc2Nyb2xsXHJcbiAgICAgICAgLy8gYmFycyBhcmUgdGhlIG9ubHkgZGlmZmVyZW5jZSBiZXR3ZWVuIHJvdW5kZWQgZGltZW5zaW9ucyArIHBhZGRpbmdzXHJcbiAgICAgICAgLy8gYW5kIFwiY2xpZW50XCIgcHJvcGVydGllcywgdGhvdWdoIHRoYXQgaXMgbm90IGFsd2F5cyB0cnVlIGluIENocm9tZS5cclxuICAgICAgICB2YXIgdmVydFNjcm9sbGJhciA9IE1hdGgucm91bmQod2lkdGggKyBob3JpelBhZCkgLSBjbGllbnRXaWR0aDtcclxuICAgICAgICB2YXIgaG9yaXpTY3JvbGxiYXIgPSBNYXRoLnJvdW5kKGhlaWdodCArIHZlcnRQYWQpIC0gY2xpZW50SGVpZ2h0O1xyXG4gICAgICAgIC8vIENocm9tZSBoYXMgYSByYXRoZXIgd2VpcmQgcm91bmRpbmcgb2YgXCJjbGllbnRcIiBwcm9wZXJ0aWVzLlxyXG4gICAgICAgIC8vIEUuZy4gZm9yIGFuIGVsZW1lbnQgd2l0aCBjb250ZW50IHdpZHRoIG9mIDMxNC4ycHggaXQgc29tZXRpbWVzIGdpdmVzXHJcbiAgICAgICAgLy8gdGhlIGNsaWVudCB3aWR0aCBvZiAzMTVweCBhbmQgZm9yIHRoZSB3aWR0aCBvZiAzMTQuN3B4IGl0IG1heSBnaXZlXHJcbiAgICAgICAgLy8gMzE0cHguIEFuZCBpdCBkb2Vzbid0IGhhcHBlbiBhbGwgdGhlIHRpbWUuIFNvIGp1c3QgaWdub3JlIHRoaXMgZGVsdGFcclxuICAgICAgICAvLyBhcyBhIG5vbi1yZWxldmFudC5cclxuICAgICAgICBpZiAoTWF0aC5hYnModmVydFNjcm9sbGJhcikgIT09IDEpIHtcclxuICAgICAgICAgICAgd2lkdGggLT0gdmVydFNjcm9sbGJhcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKE1hdGguYWJzKGhvcml6U2Nyb2xsYmFyKSAhPT0gMSkge1xyXG4gICAgICAgICAgICBoZWlnaHQgLT0gaG9yaXpTY3JvbGxiYXI7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNyZWF0ZVJlY3RJbml0KHBhZGRpbmdzLmxlZnQsIHBhZGRpbmdzLnRvcCwgd2lkdGgsIGhlaWdodCk7XHJcbn1cclxuLyoqXHJcbiAqIENoZWNrcyB3aGV0aGVyIHByb3ZpZGVkIGVsZW1lbnQgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIFNWR0dyYXBoaWNzRWxlbWVudC5cclxuICpcclxuICogQHBhcmFtIHtFbGVtZW50fSB0YXJnZXQgLSBFbGVtZW50IHRvIGJlIGNoZWNrZWQuXHJcbiAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gKi9cclxudmFyIGlzU1ZHR3JhcGhpY3NFbGVtZW50ID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIC8vIFNvbWUgYnJvd3NlcnMsIG5hbWVseSBJRSBhbmQgRWRnZSwgZG9uJ3QgaGF2ZSB0aGUgU1ZHR3JhcGhpY3NFbGVtZW50XHJcbiAgICAvLyBpbnRlcmZhY2UuXHJcbiAgICBpZiAodHlwZW9mIFNWR0dyYXBoaWNzRWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCkgeyByZXR1cm4gdGFyZ2V0IGluc3RhbmNlb2YgZ2V0V2luZG93T2YodGFyZ2V0KS5TVkdHcmFwaGljc0VsZW1lbnQ7IH07XHJcbiAgICB9XHJcbiAgICAvLyBJZiBpdCdzIHNvLCB0aGVuIGNoZWNrIHRoYXQgZWxlbWVudCBpcyBhdCBsZWFzdCBhbiBpbnN0YW5jZSBvZiB0aGVcclxuICAgIC8vIFNWR0VsZW1lbnQgYW5kIHRoYXQgaXQgaGFzIHRoZSBcImdldEJCb3hcIiBtZXRob2QuXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXh0cmEtcGFyZW5zXHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCkgeyByZXR1cm4gKHRhcmdldCBpbnN0YW5jZW9mIGdldFdpbmRvd09mKHRhcmdldCkuU1ZHRWxlbWVudCAmJlxyXG4gICAgICAgIHR5cGVvZiB0YXJnZXQuZ2V0QkJveCA9PT0gJ2Z1bmN0aW9uJyk7IH07XHJcbn0pKCk7XHJcbi8qKlxyXG4gKiBDaGVja3Mgd2hldGhlciBwcm92aWRlZCBlbGVtZW50IGlzIGEgZG9jdW1lbnQgZWxlbWVudCAoPGh0bWw+KS5cclxuICpcclxuICogQHBhcmFtIHtFbGVtZW50fSB0YXJnZXQgLSBFbGVtZW50IHRvIGJlIGNoZWNrZWQuXHJcbiAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gKi9cclxuZnVuY3Rpb24gaXNEb2N1bWVudEVsZW1lbnQodGFyZ2V0KSB7XHJcbiAgICByZXR1cm4gdGFyZ2V0ID09PSBnZXRXaW5kb3dPZih0YXJnZXQpLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcclxufVxyXG4vKipcclxuICogQ2FsY3VsYXRlcyBhbiBhcHByb3ByaWF0ZSBjb250ZW50IHJlY3RhbmdsZSBmb3IgcHJvdmlkZWQgaHRtbCBvciBzdmcgZWxlbWVudC5cclxuICpcclxuICogQHBhcmFtIHtFbGVtZW50fSB0YXJnZXQgLSBFbGVtZW50IGNvbnRlbnQgcmVjdGFuZ2xlIG9mIHdoaWNoIG5lZWRzIHRvIGJlIGNhbGN1bGF0ZWQuXHJcbiAqIEByZXR1cm5zIHtET01SZWN0SW5pdH1cclxuICovXHJcbmZ1bmN0aW9uIGdldENvbnRlbnRSZWN0KHRhcmdldCkge1xyXG4gICAgaWYgKCFpc0Jyb3dzZXIpIHtcclxuICAgICAgICByZXR1cm4gZW1wdHlSZWN0O1xyXG4gICAgfVxyXG4gICAgaWYgKGlzU1ZHR3JhcGhpY3NFbGVtZW50KHRhcmdldCkpIHtcclxuICAgICAgICByZXR1cm4gZ2V0U1ZHQ29udGVudFJlY3QodGFyZ2V0KTtcclxuICAgIH1cclxuICAgIHJldHVybiBnZXRIVE1MRWxlbWVudENvbnRlbnRSZWN0KHRhcmdldCk7XHJcbn1cclxuLyoqXHJcbiAqIENyZWF0ZXMgcmVjdGFuZ2xlIHdpdGggYW4gaW50ZXJmYWNlIG9mIHRoZSBET01SZWN0UmVhZE9ubHkuXHJcbiAqIFNwZWM6IGh0dHBzOi8vZHJhZnRzLmZ4dGYub3JnL2dlb21ldHJ5LyNkb21yZWN0cmVhZG9ubHlcclxuICpcclxuICogQHBhcmFtIHtET01SZWN0SW5pdH0gcmVjdEluaXQgLSBPYmplY3Qgd2l0aCByZWN0YW5nbGUncyB4L3kgY29vcmRpbmF0ZXMgYW5kIGRpbWVuc2lvbnMuXHJcbiAqIEByZXR1cm5zIHtET01SZWN0UmVhZE9ubHl9XHJcbiAqL1xyXG5mdW5jdGlvbiBjcmVhdGVSZWFkT25seVJlY3QoX2EpIHtcclxuICAgIHZhciB4ID0gX2EueCwgeSA9IF9hLnksIHdpZHRoID0gX2Eud2lkdGgsIGhlaWdodCA9IF9hLmhlaWdodDtcclxuICAgIC8vIElmIERPTVJlY3RSZWFkT25seSBpcyBhdmFpbGFibGUgdXNlIGl0IGFzIGEgcHJvdG90eXBlIGZvciB0aGUgcmVjdGFuZ2xlLlxyXG4gICAgdmFyIENvbnN0ciA9IHR5cGVvZiBET01SZWN0UmVhZE9ubHkgIT09ICd1bmRlZmluZWQnID8gRE9NUmVjdFJlYWRPbmx5IDogT2JqZWN0O1xyXG4gICAgdmFyIHJlY3QgPSBPYmplY3QuY3JlYXRlKENvbnN0ci5wcm90b3R5cGUpO1xyXG4gICAgLy8gUmVjdGFuZ2xlJ3MgcHJvcGVydGllcyBhcmUgbm90IHdyaXRhYmxlIGFuZCBub24tZW51bWVyYWJsZS5cclxuICAgIGRlZmluZUNvbmZpZ3VyYWJsZShyZWN0LCB7XHJcbiAgICAgICAgeDogeCwgeTogeSwgd2lkdGg6IHdpZHRoLCBoZWlnaHQ6IGhlaWdodCxcclxuICAgICAgICB0b3A6IHksXHJcbiAgICAgICAgcmlnaHQ6IHggKyB3aWR0aCxcclxuICAgICAgICBib3R0b206IGhlaWdodCArIHksXHJcbiAgICAgICAgbGVmdDogeFxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gcmVjdDtcclxufVxyXG4vKipcclxuICogQ3JlYXRlcyBET01SZWN0SW5pdCBvYmplY3QgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGRpbWVuc2lvbnMgYW5kIHRoZSB4L3kgY29vcmRpbmF0ZXMuXHJcbiAqIFNwZWM6IGh0dHBzOi8vZHJhZnRzLmZ4dGYub3JnL2dlb21ldHJ5LyNkaWN0ZGVmLWRvbXJlY3Rpbml0XHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gWCBjb29yZGluYXRlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geSAtIFkgY29vcmRpbmF0ZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoIC0gUmVjdGFuZ2xlJ3Mgd2lkdGguXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHQgLSBSZWN0YW5nbGUncyBoZWlnaHQuXHJcbiAqIEByZXR1cm5zIHtET01SZWN0SW5pdH1cclxuICovXHJcbmZ1bmN0aW9uIGNyZWF0ZVJlY3RJbml0KHgsIHksIHdpZHRoLCBoZWlnaHQpIHtcclxuICAgIHJldHVybiB7IHg6IHgsIHk6IHksIHdpZHRoOiB3aWR0aCwgaGVpZ2h0OiBoZWlnaHQgfTtcclxufVxuXG4vKipcclxuICogQ2xhc3MgdGhhdCBpcyByZXNwb25zaWJsZSBmb3IgY29tcHV0YXRpb25zIG9mIHRoZSBjb250ZW50IHJlY3RhbmdsZSBvZlxyXG4gKiBwcm92aWRlZCBET00gZWxlbWVudCBhbmQgZm9yIGtlZXBpbmcgdHJhY2sgb2YgaXQncyBjaGFuZ2VzLlxyXG4gKi9cclxudmFyIFJlc2l6ZU9ic2VydmF0aW9uID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIFJlc2l6ZU9ic2VydmF0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gdGFyZ2V0IC0gRWxlbWVudCB0byBiZSBvYnNlcnZlZC5cclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gUmVzaXplT2JzZXJ2YXRpb24odGFyZ2V0KSB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQnJvYWRjYXN0ZWQgd2lkdGggb2YgY29udGVudCByZWN0YW5nbGUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYnJvYWRjYXN0V2lkdGggPSAwO1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEJyb2FkY2FzdGVkIGhlaWdodCBvZiBjb250ZW50IHJlY3RhbmdsZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5icm9hZGNhc3RIZWlnaHQgPSAwO1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFJlZmVyZW5jZSB0byB0aGUgbGFzdCBvYnNlcnZlZCBjb250ZW50IHJlY3RhbmdsZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBwcml2YXRlIHtET01SZWN0SW5pdH1cclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNvbnRlbnRSZWN0XyA9IGNyZWF0ZVJlY3RJbml0KDAsIDAsIDAsIDApO1xyXG4gICAgICAgIHRoaXMudGFyZ2V0ID0gdGFyZ2V0O1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGVzIGNvbnRlbnQgcmVjdGFuZ2xlIGFuZCB0ZWxscyB3aGV0aGVyIGl0J3Mgd2lkdGggb3IgaGVpZ2h0IHByb3BlcnRpZXNcclxuICAgICAqIGhhdmUgY2hhbmdlZCBzaW5jZSB0aGUgbGFzdCBicm9hZGNhc3QuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIFJlc2l6ZU9ic2VydmF0aW9uLnByb3RvdHlwZS5pc0FjdGl2ZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgcmVjdCA9IGdldENvbnRlbnRSZWN0KHRoaXMudGFyZ2V0KTtcclxuICAgICAgICB0aGlzLmNvbnRlbnRSZWN0XyA9IHJlY3Q7XHJcbiAgICAgICAgcmV0dXJuIChyZWN0LndpZHRoICE9PSB0aGlzLmJyb2FkY2FzdFdpZHRoIHx8XHJcbiAgICAgICAgICAgIHJlY3QuaGVpZ2h0ICE9PSB0aGlzLmJyb2FkY2FzdEhlaWdodCk7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGVzICdicm9hZGNhc3RXaWR0aCcgYW5kICdicm9hZGNhc3RIZWlnaHQnIHByb3BlcnRpZXMgd2l0aCBhIGRhdGFcclxuICAgICAqIGZyb20gdGhlIGNvcnJlc3BvbmRpbmcgcHJvcGVydGllcyBvZiB0aGUgbGFzdCBvYnNlcnZlZCBjb250ZW50IHJlY3RhbmdsZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJucyB7RE9NUmVjdEluaXR9IExhc3Qgb2JzZXJ2ZWQgY29udGVudCByZWN0YW5nbGUuXHJcbiAgICAgKi9cclxuICAgIFJlc2l6ZU9ic2VydmF0aW9uLnByb3RvdHlwZS5icm9hZGNhc3RSZWN0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciByZWN0ID0gdGhpcy5jb250ZW50UmVjdF87XHJcbiAgICAgICAgdGhpcy5icm9hZGNhc3RXaWR0aCA9IHJlY3Qud2lkdGg7XHJcbiAgICAgICAgdGhpcy5icm9hZGNhc3RIZWlnaHQgPSByZWN0LmhlaWdodDtcclxuICAgICAgICByZXR1cm4gcmVjdDtcclxuICAgIH07XHJcbiAgICByZXR1cm4gUmVzaXplT2JzZXJ2YXRpb247XHJcbn0oKSk7XG5cbnZhciBSZXNpemVPYnNlcnZlckVudHJ5ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIFJlc2l6ZU9ic2VydmVyRW50cnkuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSB0YXJnZXQgLSBFbGVtZW50IHRoYXQgaXMgYmVpbmcgb2JzZXJ2ZWQuXHJcbiAgICAgKiBAcGFyYW0ge0RPTVJlY3RJbml0fSByZWN0SW5pdCAtIERhdGEgb2YgdGhlIGVsZW1lbnQncyBjb250ZW50IHJlY3RhbmdsZS5cclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gUmVzaXplT2JzZXJ2ZXJFbnRyeSh0YXJnZXQsIHJlY3RJbml0KSB7XHJcbiAgICAgICAgdmFyIGNvbnRlbnRSZWN0ID0gY3JlYXRlUmVhZE9ubHlSZWN0KHJlY3RJbml0KTtcclxuICAgICAgICAvLyBBY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmljYXRpb24gZm9sbG93aW5nIHByb3BlcnRpZXMgYXJlIG5vdCB3cml0YWJsZVxyXG4gICAgICAgIC8vIGFuZCBhcmUgYWxzbyBub3QgZW51bWVyYWJsZSBpbiB0aGUgbmF0aXZlIGltcGxlbWVudGF0aW9uLlxyXG4gICAgICAgIC8vXHJcbiAgICAgICAgLy8gUHJvcGVydHkgYWNjZXNzb3JzIGFyZSBub3QgYmVpbmcgdXNlZCBhcyB0aGV5J2QgcmVxdWlyZSB0byBkZWZpbmUgYVxyXG4gICAgICAgIC8vIHByaXZhdGUgV2Vha01hcCBzdG9yYWdlIHdoaWNoIG1heSBjYXVzZSBtZW1vcnkgbGVha3MgaW4gYnJvd3NlcnMgdGhhdFxyXG4gICAgICAgIC8vIGRvbid0IHN1cHBvcnQgdGhpcyB0eXBlIG9mIGNvbGxlY3Rpb25zLlxyXG4gICAgICAgIGRlZmluZUNvbmZpZ3VyYWJsZSh0aGlzLCB7IHRhcmdldDogdGFyZ2V0LCBjb250ZW50UmVjdDogY29udGVudFJlY3QgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gUmVzaXplT2JzZXJ2ZXJFbnRyeTtcclxufSgpKTtcblxudmFyIFJlc2l6ZU9ic2VydmVyU1BJID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIFJlc2l6ZU9ic2VydmVyLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UmVzaXplT2JzZXJ2ZXJDYWxsYmFja30gY2FsbGJhY2sgLSBDYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGludm9rZWRcclxuICAgICAqICAgICAgd2hlbiBvbmUgb2YgdGhlIG9ic2VydmVkIGVsZW1lbnRzIGNoYW5nZXMgaXQncyBjb250ZW50IGRpbWVuc2lvbnMuXHJcbiAgICAgKiBAcGFyYW0ge1Jlc2l6ZU9ic2VydmVyQ29udHJvbGxlcn0gY29udHJvbGxlciAtIENvbnRyb2xsZXIgaW5zdGFuY2Ugd2hpY2hcclxuICAgICAqICAgICAgaXMgcmVzcG9uc2libGUgZm9yIHRoZSB1cGRhdGVzIG9mIG9ic2VydmVyLlxyXG4gICAgICogQHBhcmFtIHtSZXNpemVPYnNlcnZlcn0gY2FsbGJhY2tDdHggLSBSZWZlcmVuY2UgdG8gdGhlIHB1YmxpY1xyXG4gICAgICogICAgICBSZXNpemVPYnNlcnZlciBpbnN0YW5jZSB3aGljaCB3aWxsIGJlIHBhc3NlZCB0byBjYWxsYmFjayBmdW5jdGlvbi5cclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gUmVzaXplT2JzZXJ2ZXJTUEkoY2FsbGJhY2ssIGNvbnRyb2xsZXIsIGNhbGxiYWNrQ3R4KSB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQ29sbGVjdGlvbiBvZiByZXNpemUgb2JzZXJ2YXRpb25zIHRoYXQgaGF2ZSBkZXRlY3RlZCBjaGFuZ2VzIGluIGRpbWVuc2lvbnNcclxuICAgICAgICAgKiBvZiBlbGVtZW50cy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBwcml2YXRlIHtBcnJheTxSZXNpemVPYnNlcnZhdGlvbj59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5hY3RpdmVPYnNlcnZhdGlvbnNfID0gW107XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogUmVnaXN0cnkgb2YgdGhlIFJlc2l6ZU9ic2VydmF0aW9uIGluc3RhbmNlcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBwcml2YXRlIHtNYXA8RWxlbWVudCwgUmVzaXplT2JzZXJ2YXRpb24+fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMub2JzZXJ2YXRpb25zXyA9IG5ldyBNYXBTaGltKCk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgY2FsbGJhY2sgcHJvdmlkZWQgYXMgcGFyYW1ldGVyIDEgaXMgbm90IGEgZnVuY3Rpb24uJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY2FsbGJhY2tfID0gY2FsbGJhY2s7XHJcbiAgICAgICAgdGhpcy5jb250cm9sbGVyXyA9IGNvbnRyb2xsZXI7XHJcbiAgICAgICAgdGhpcy5jYWxsYmFja0N0eF8gPSBjYWxsYmFja0N0eDtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogU3RhcnRzIG9ic2VydmluZyBwcm92aWRlZCBlbGVtZW50LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gdGFyZ2V0IC0gRWxlbWVudCB0byBiZSBvYnNlcnZlZC5cclxuICAgICAqIEByZXR1cm5zIHt2b2lkfVxyXG4gICAgICovXHJcbiAgICBSZXNpemVPYnNlcnZlclNQSS5wcm90b3R5cGUub2JzZXJ2ZSA9IGZ1bmN0aW9uICh0YXJnZXQpIHtcclxuICAgICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgMCBwcmVzZW50LicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBEbyBub3RoaW5nIGlmIGN1cnJlbnQgZW52aXJvbm1lbnQgZG9lc24ndCBoYXZlIHRoZSBFbGVtZW50IGludGVyZmFjZS5cclxuICAgICAgICBpZiAodHlwZW9mIEVsZW1lbnQgPT09ICd1bmRlZmluZWQnIHx8ICEoRWxlbWVudCBpbnN0YW5jZW9mIE9iamVjdCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoISh0YXJnZXQgaW5zdGFuY2VvZiBnZXRXaW5kb3dPZih0YXJnZXQpLkVsZW1lbnQpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3BhcmFtZXRlciAxIGlzIG5vdCBvZiB0eXBlIFwiRWxlbWVudFwiLicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgb2JzZXJ2YXRpb25zID0gdGhpcy5vYnNlcnZhdGlvbnNfO1xyXG4gICAgICAgIC8vIERvIG5vdGhpbmcgaWYgZWxlbWVudCBpcyBhbHJlYWR5IGJlaW5nIG9ic2VydmVkLlxyXG4gICAgICAgIGlmIChvYnNlcnZhdGlvbnMuaGFzKHRhcmdldCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvYnNlcnZhdGlvbnMuc2V0KHRhcmdldCwgbmV3IFJlc2l6ZU9ic2VydmF0aW9uKHRhcmdldCkpO1xyXG4gICAgICAgIHRoaXMuY29udHJvbGxlcl8uYWRkT2JzZXJ2ZXIodGhpcyk7XHJcbiAgICAgICAgLy8gRm9yY2UgdGhlIHVwZGF0ZSBvZiBvYnNlcnZhdGlvbnMuXHJcbiAgICAgICAgdGhpcy5jb250cm9sbGVyXy5yZWZyZXNoKCk7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBTdG9wcyBvYnNlcnZpbmcgcHJvdmlkZWQgZWxlbWVudC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IHRhcmdldCAtIEVsZW1lbnQgdG8gc3RvcCBvYnNlcnZpbmcuXHJcbiAgICAgKiBAcmV0dXJucyB7dm9pZH1cclxuICAgICAqL1xyXG4gICAgUmVzaXplT2JzZXJ2ZXJTUEkucHJvdG90eXBlLnVub2JzZXJ2ZSA9IGZ1bmN0aW9uICh0YXJnZXQpIHtcclxuICAgICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgMCBwcmVzZW50LicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBEbyBub3RoaW5nIGlmIGN1cnJlbnQgZW52aXJvbm1lbnQgZG9lc24ndCBoYXZlIHRoZSBFbGVtZW50IGludGVyZmFjZS5cclxuICAgICAgICBpZiAodHlwZW9mIEVsZW1lbnQgPT09ICd1bmRlZmluZWQnIHx8ICEoRWxlbWVudCBpbnN0YW5jZW9mIE9iamVjdCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoISh0YXJnZXQgaW5zdGFuY2VvZiBnZXRXaW5kb3dPZih0YXJnZXQpLkVsZW1lbnQpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3BhcmFtZXRlciAxIGlzIG5vdCBvZiB0eXBlIFwiRWxlbWVudFwiLicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgb2JzZXJ2YXRpb25zID0gdGhpcy5vYnNlcnZhdGlvbnNfO1xyXG4gICAgICAgIC8vIERvIG5vdGhpbmcgaWYgZWxlbWVudCBpcyBub3QgYmVpbmcgb2JzZXJ2ZWQuXHJcbiAgICAgICAgaWYgKCFvYnNlcnZhdGlvbnMuaGFzKHRhcmdldCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvYnNlcnZhdGlvbnMuZGVsZXRlKHRhcmdldCk7XHJcbiAgICAgICAgaWYgKCFvYnNlcnZhdGlvbnMuc2l6ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnJlbW92ZU9ic2VydmVyKHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIFN0b3BzIG9ic2VydmluZyBhbGwgZWxlbWVudHMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybnMge3ZvaWR9XHJcbiAgICAgKi9cclxuICAgIFJlc2l6ZU9ic2VydmVyU1BJLnByb3RvdHlwZS5kaXNjb25uZWN0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuY2xlYXJBY3RpdmUoKTtcclxuICAgICAgICB0aGlzLm9ic2VydmF0aW9uc18uY2xlYXIoKTtcclxuICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnJlbW92ZU9ic2VydmVyKHRoaXMpO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogQ29sbGVjdHMgb2JzZXJ2YXRpb24gaW5zdGFuY2VzIHRoZSBhc3NvY2lhdGVkIGVsZW1lbnQgb2Ygd2hpY2ggaGFzIGNoYW5nZWRcclxuICAgICAqIGl0J3MgY29udGVudCByZWN0YW5nbGUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybnMge3ZvaWR9XHJcbiAgICAgKi9cclxuICAgIFJlc2l6ZU9ic2VydmVyU1BJLnByb3RvdHlwZS5nYXRoZXJBY3RpdmUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICB0aGlzLmNsZWFyQWN0aXZlKCk7XHJcbiAgICAgICAgdGhpcy5vYnNlcnZhdGlvbnNfLmZvckVhY2goZnVuY3Rpb24gKG9ic2VydmF0aW9uKSB7XHJcbiAgICAgICAgICAgIGlmIChvYnNlcnZhdGlvbi5pc0FjdGl2ZSgpKSB7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5hY3RpdmVPYnNlcnZhdGlvbnNfLnB1c2gob2JzZXJ2YXRpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBJbnZva2VzIGluaXRpYWwgY2FsbGJhY2sgZnVuY3Rpb24gd2l0aCBhIGxpc3Qgb2YgUmVzaXplT2JzZXJ2ZXJFbnRyeVxyXG4gICAgICogaW5zdGFuY2VzIGNvbGxlY3RlZCBmcm9tIGFjdGl2ZSByZXNpemUgb2JzZXJ2YXRpb25zLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm5zIHt2b2lkfVxyXG4gICAgICovXHJcbiAgICBSZXNpemVPYnNlcnZlclNQSS5wcm90b3R5cGUuYnJvYWRjYXN0QWN0aXZlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIC8vIERvIG5vdGhpbmcgaWYgb2JzZXJ2ZXIgZG9lc24ndCBoYXZlIGFjdGl2ZSBvYnNlcnZhdGlvbnMuXHJcbiAgICAgICAgaWYgKCF0aGlzLmhhc0FjdGl2ZSgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGN0eCA9IHRoaXMuY2FsbGJhY2tDdHhfO1xyXG4gICAgICAgIC8vIENyZWF0ZSBSZXNpemVPYnNlcnZlckVudHJ5IGluc3RhbmNlIGZvciBldmVyeSBhY3RpdmUgb2JzZXJ2YXRpb24uXHJcbiAgICAgICAgdmFyIGVudHJpZXMgPSB0aGlzLmFjdGl2ZU9ic2VydmF0aW9uc18ubWFwKGZ1bmN0aW9uIChvYnNlcnZhdGlvbikge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFJlc2l6ZU9ic2VydmVyRW50cnkob2JzZXJ2YXRpb24udGFyZ2V0LCBvYnNlcnZhdGlvbi5icm9hZGNhc3RSZWN0KCkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuY2FsbGJhY2tfLmNhbGwoY3R4LCBlbnRyaWVzLCBjdHgpO1xyXG4gICAgICAgIHRoaXMuY2xlYXJBY3RpdmUoKTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIENsZWFycyB0aGUgY29sbGVjdGlvbiBvZiBhY3RpdmUgb2JzZXJ2YXRpb25zLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm5zIHt2b2lkfVxyXG4gICAgICovXHJcbiAgICBSZXNpemVPYnNlcnZlclNQSS5wcm90b3R5cGUuY2xlYXJBY3RpdmUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5hY3RpdmVPYnNlcnZhdGlvbnNfLnNwbGljZSgwKTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIFRlbGxzIHdoZXRoZXIgb2JzZXJ2ZXIgaGFzIGFjdGl2ZSBvYnNlcnZhdGlvbnMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIFJlc2l6ZU9ic2VydmVyU1BJLnByb3RvdHlwZS5oYXNBY3RpdmUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZlT2JzZXJ2YXRpb25zXy5sZW5ndGggPiAwO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBSZXNpemVPYnNlcnZlclNQSTtcclxufSgpKTtcblxuLy8gUmVnaXN0cnkgb2YgaW50ZXJuYWwgb2JzZXJ2ZXJzLiBJZiBXZWFrTWFwIGlzIG5vdCBhdmFpbGFibGUgdXNlIGN1cnJlbnQgc2hpbVxyXG4vLyBmb3IgdGhlIE1hcCBjb2xsZWN0aW9uIGFzIGl0IGhhcyBhbGwgcmVxdWlyZWQgbWV0aG9kcyBhbmQgYmVjYXVzZSBXZWFrTWFwXHJcbi8vIGNhbid0IGJlIGZ1bGx5IHBvbHlmaWxsZWQgYW55d2F5LlxyXG52YXIgb2JzZXJ2ZXJzID0gdHlwZW9mIFdlYWtNYXAgIT09ICd1bmRlZmluZWQnID8gbmV3IFdlYWtNYXAoKSA6IG5ldyBNYXBTaGltKCk7XHJcbi8qKlxyXG4gKiBSZXNpemVPYnNlcnZlciBBUEkuIEVuY2Fwc3VsYXRlcyB0aGUgUmVzaXplT2JzZXJ2ZXIgU1BJIGltcGxlbWVudGF0aW9uXHJcbiAqIGV4cG9zaW5nIG9ubHkgdGhvc2UgbWV0aG9kcyBhbmQgcHJvcGVydGllcyB0aGF0IGFyZSBkZWZpbmVkIGluIHRoZSBzcGVjLlxyXG4gKi9cclxudmFyIFJlc2l6ZU9ic2VydmVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIFJlc2l6ZU9ic2VydmVyLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UmVzaXplT2JzZXJ2ZXJDYWxsYmFja30gY2FsbGJhY2sgLSBDYWxsYmFjayB0aGF0IGlzIGludm9rZWQgd2hlblxyXG4gICAgICogICAgICBkaW1lbnNpb25zIG9mIHRoZSBvYnNlcnZlZCBlbGVtZW50cyBjaGFuZ2UuXHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIFJlc2l6ZU9ic2VydmVyKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJlc2l6ZU9ic2VydmVyKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24uJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCcxIGFyZ3VtZW50IHJlcXVpcmVkLCBidXQgb25seSAwIHByZXNlbnQuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBjb250cm9sbGVyID0gUmVzaXplT2JzZXJ2ZXJDb250cm9sbGVyLmdldEluc3RhbmNlKCk7XHJcbiAgICAgICAgdmFyIG9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyU1BJKGNhbGxiYWNrLCBjb250cm9sbGVyLCB0aGlzKTtcclxuICAgICAgICBvYnNlcnZlcnMuc2V0KHRoaXMsIG9ic2VydmVyKTtcclxuICAgIH1cclxuICAgIHJldHVybiBSZXNpemVPYnNlcnZlcjtcclxufSgpKTtcclxuLy8gRXhwb3NlIHB1YmxpYyBtZXRob2RzIG9mIFJlc2l6ZU9ic2VydmVyLlxyXG5bXHJcbiAgICAnb2JzZXJ2ZScsXHJcbiAgICAndW5vYnNlcnZlJyxcclxuICAgICdkaXNjb25uZWN0J1xyXG5dLmZvckVhY2goZnVuY3Rpb24gKG1ldGhvZCkge1xyXG4gICAgUmVzaXplT2JzZXJ2ZXIucHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIF9hO1xyXG4gICAgICAgIHJldHVybiAoX2EgPSBvYnNlcnZlcnMuZ2V0KHRoaXMpKVttZXRob2RdLmFwcGx5KF9hLCBhcmd1bWVudHMpO1xyXG4gICAgfTtcclxufSk7XG5cbnZhciBpbmRleCA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICAvLyBFeHBvcnQgZXhpc3RpbmcgaW1wbGVtZW50YXRpb24gaWYgYXZhaWxhYmxlLlxyXG4gICAgaWYgKHR5cGVvZiBnbG9iYWwkMS5SZXNpemVPYnNlcnZlciAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICByZXR1cm4gZ2xvYmFsJDEuUmVzaXplT2JzZXJ2ZXI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gUmVzaXplT2JzZXJ2ZXI7XHJcbn0pKCk7XG5cbmV4cG9ydCBkZWZhdWx0IGluZGV4O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/resize-observer-polyfill/dist/ResizeObserver.es.js\n");

/***/ }),

/***/ "./node_modules/@mathieustan/vue-datepicker/dist/vue-datepicker.min.css":
/*!******************************************************************************!*\
  !*** ./node_modules/@mathieustan/vue-datepicker/dist/vue-datepicker.min.css ***!
  \******************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../../style-loader/dist/runtime/injectStylesIntoStyleTag.js */ \"./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n/* harmony import */ var _style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _css_loader_dist_cjs_js_clonedRuleSet_9_use_1_postcss_loader_dist_cjs_js_clonedRuleSet_9_use_2_vue_datepicker_min_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !!../../../css-loader/dist/cjs.js??clonedRuleSet-9.use[1]!../../../postcss-loader/dist/cjs.js??clonedRuleSet-9.use[2]!./vue-datepicker.min.css */ \"./node_modules/css-loader/dist/cjs.js??clonedRuleSet-9.use[1]!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-9.use[2]!./node_modules/@mathieustan/vue-datepicker/dist/vue-datepicker.min.css\");\n\n            \n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = _style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_css_loader_dist_cjs_js_clonedRuleSet_9_use_1_postcss_loader_dist_cjs_js_clonedRuleSet_9_use_2_vue_datepicker_min_css__WEBPACK_IMPORTED_MODULE_1__[\"default\"], options);\n\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_css_loader_dist_cjs_js_clonedRuleSet_9_use_1_postcss_loader_dist_cjs_js_clonedRuleSet_9_use_2_vue_datepicker_min_css__WEBPACK_IMPORTED_MODULE_1__[\"default\"].locals || {});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQG1hdGhpZXVzdGFuL3Z1ZS1kYXRlcGlja2VyL2Rpc3QvdnVlLWRhdGVwaWNrZXIubWluLmNzcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQWtGO0FBQ2xGLFlBQWlMOztBQUVqTDs7QUFFQTtBQUNBOztBQUVBLGFBQWEsNkZBQUcsQ0FBQyw2SkFBTzs7OztBQUl4QixpRUFBZSw2SkFBTyxhQUFhIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BtYXRoaWV1c3Rhbi92dWUtZGF0ZXBpY2tlci9kaXN0L3Z1ZS1kYXRlcGlja2VyLm1pbi5jc3M/ZWQ1NyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXBpIGZyb20gXCIhLi4vLi4vLi4vc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbmplY3RTdHlsZXNJbnRvU3R5bGVUYWcuanNcIjtcbiAgICAgICAgICAgIGltcG9ydCBjb250ZW50IGZyb20gXCIhIS4uLy4uLy4uL2Nzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtOS51c2VbMV0hLi4vLi4vLi4vcG9zdGNzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtOS51c2VbMl0hLi92dWUtZGF0ZXBpY2tlci5taW4uY3NzXCI7XG5cbnZhciBvcHRpb25zID0ge307XG5cbm9wdGlvbnMuaW5zZXJ0ID0gXCJoZWFkXCI7XG5vcHRpb25zLnNpbmdsZXRvbiA9IGZhbHNlO1xuXG52YXIgdXBkYXRlID0gYXBpKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5cblxuZXhwb3J0IGRlZmF1bHQgY29udGVudC5sb2NhbHMgfHwge307Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@mathieustan/vue-datepicker/dist/vue-datepicker.min.css\n");

/***/ }),

/***/ "./node_modules/element-ui/lib/theme-chalk/index.css":
/*!***********************************************************!*\
  !*** ./node_modules/element-ui/lib/theme-chalk/index.css ***!
  \***********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../../style-loader/dist/runtime/injectStylesIntoStyleTag.js */ \"./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n/* harmony import */ var _style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _css_loader_dist_cjs_js_clonedRuleSet_9_use_1_postcss_loader_dist_cjs_js_clonedRuleSet_9_use_2_index_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !!../../../css-loader/dist/cjs.js??clonedRuleSet-9.use[1]!../../../postcss-loader/dist/cjs.js??clonedRuleSet-9.use[2]!./index.css */ \"./node_modules/css-loader/dist/cjs.js??clonedRuleSet-9.use[1]!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-9.use[2]!./node_modules/element-ui/lib/theme-chalk/index.css\");\n\n            \n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = _style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_css_loader_dist_cjs_js_clonedRuleSet_9_use_1_postcss_loader_dist_cjs_js_clonedRuleSet_9_use_2_index_css__WEBPACK_IMPORTED_MODULE_1__[\"default\"], options);\n\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_css_loader_dist_cjs_js_clonedRuleSet_9_use_1_postcss_loader_dist_cjs_js_clonedRuleSet_9_use_2_index_css__WEBPACK_IMPORTED_MODULE_1__[\"default\"].locals || {});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdGhlbWUtY2hhbGsvaW5kZXguY3NzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBa0Y7QUFDbEYsWUFBb0s7O0FBRXBLOztBQUVBO0FBQ0E7O0FBRUEsYUFBYSw2RkFBRyxDQUFDLGdKQUFPOzs7O0FBSXhCLGlFQUFlLGdKQUFPLGFBQWEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdGhlbWUtY2hhbGsvaW5kZXguY3NzP2RmN2YiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFwaSBmcm9tIFwiIS4uLy4uLy4uL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5qZWN0U3R5bGVzSW50b1N0eWxlVGFnLmpzXCI7XG4gICAgICAgICAgICBpbXBvcnQgY29udGVudCBmcm9tIFwiISEuLi8uLi8uLi9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTkudXNlWzFdIS4uLy4uLy4uL3Bvc3Rjc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTkudXNlWzJdIS4vaW5kZXguY3NzXCI7XG5cbnZhciBvcHRpb25zID0ge307XG5cbm9wdGlvbnMuaW5zZXJ0ID0gXCJoZWFkXCI7XG5vcHRpb25zLnNpbmdsZXRvbiA9IGZhbHNlO1xuXG52YXIgdXBkYXRlID0gYXBpKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5cblxuZXhwb3J0IGRlZmF1bHQgY29udGVudC5sb2NhbHMgfHwge307Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/theme-chalk/index.css\n");

/***/ }),

/***/ "./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-9.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-9.use[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/widgets/SidebarWidget.vue?vue&type=style&index=0&id=5c937b85&lang=css&":
/*!**********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-9.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-9.use[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/widgets/SidebarWidget.vue?vue&type=style&index=0&id=5c937b85&lang=css& ***!
  \**********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ \"./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_cjs_js_clonedRuleSet_9_use_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_9_use_2_node_modules_vue_loader_lib_index_js_vue_loader_options_SidebarWidget_vue_vue_type_style_index_0_id_5c937b85_lang_css___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !!../../../../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-9.use[1]!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-9.use[2]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SidebarWidget.vue?vue&type=style&index=0&id=5c937b85&lang=css& */ \"./node_modules/css-loader/dist/cjs.js??clonedRuleSet-9.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-9.use[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/widgets/SidebarWidget.vue?vue&type=style&index=0&id=5c937b85&lang=css&\");\n\n            \n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_css_loader_dist_cjs_js_clonedRuleSet_9_use_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_9_use_2_node_modules_vue_loader_lib_index_js_vue_loader_options_SidebarWidget_vue_vue_type_style_index_0_id_5c937b85_lang_css___WEBPACK_IMPORTED_MODULE_1__[\"default\"], options);\n\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_css_loader_dist_cjs_js_clonedRuleSet_9_use_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_9_use_2_node_modules_vue_loader_lib_index_js_vue_loader_options_SidebarWidget_vue_vue_type_style_index_0_id_5c937b85_lang_css___WEBPACK_IMPORTED_MODULE_1__[\"default\"].locals || {});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtOS51c2VbMV0hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy9zdHlsZVBvc3RMb2FkZXIuanMhLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtOS51c2VbMl0hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3Jlc291cmNlcy9qcy9jb21wb25lbnRzL2FkbWluL3dpZGdldHMvU2lkZWJhcldpZGdldC52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD01YzkzN2I4NSZsYW5nPWNzcyYiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFxRztBQUNyRyxZQUE2WTs7QUFFN1k7O0FBRUE7QUFDQTs7QUFFQSxhQUFhLDBHQUFHLENBQUMsOFVBQU87Ozs7QUFJeEIsaUVBQWUsOFVBQU8sYUFBYSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9jb21wb25lbnRzL2FkbWluL3dpZGdldHMvU2lkZWJhcldpZGdldC52dWU/Yzg3ZCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXBpIGZyb20gXCIhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5qZWN0U3R5bGVzSW50b1N0eWxlVGFnLmpzXCI7XG4gICAgICAgICAgICBpbXBvcnQgY29udGVudCBmcm9tIFwiISEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC05LnVzZVsxXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy9zdHlsZVBvc3RMb2FkZXIuanMhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTkudXNlWzJdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vU2lkZWJhcldpZGdldC52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD01YzkzN2I4NSZsYW5nPWNzcyZcIjtcblxudmFyIG9wdGlvbnMgPSB7fTtcblxub3B0aW9ucy5pbnNlcnQgPSBcImhlYWRcIjtcbm9wdGlvbnMuc2luZ2xldG9uID0gZmFsc2U7XG5cbnZhciB1cGRhdGUgPSBhcGkoY29udGVudCwgb3B0aW9ucyk7XG5cblxuXG5leHBvcnQgZGVmYXVsdCBjb250ZW50LmxvY2FscyB8fCB7fTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-9.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-9.use[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/widgets/SidebarWidget.vue?vue&type=style&index=0&id=5c937b85&lang=css&\n");

/***/ }),

/***/ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js":
/*!****************************************************************************!*\
  !*** ./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js ***!
  \****************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";
eval("\n\nvar isOldIE = function isOldIE() {\n  var memo;\n  return function memorize() {\n    if (typeof memo === 'undefined') {\n      // Test for IE <= 9 as proposed by Browserhacks\n      // @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805\n      // Tests for existence of standard globals is to allow style-loader\n      // to operate correctly into non-standard environments\n      // @see https://github.com/webpack-contrib/style-loader/issues/177\n      memo = Boolean(window && document && document.all && !window.atob);\n    }\n\n    return memo;\n  };\n}();\n\nvar getTarget = function getTarget() {\n  var memo = {};\n  return function memorize(target) {\n    if (typeof memo[target] === 'undefined') {\n      var styleTarget = document.querySelector(target); // Special case to return head of iframe instead of iframe itself\n\n      if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n        try {\n          // This will throw an exception if access to iframe is blocked\n          // due to cross-origin restrictions\n          styleTarget = styleTarget.contentDocument.head;\n        } catch (e) {\n          // istanbul ignore next\n          styleTarget = null;\n        }\n      }\n\n      memo[target] = styleTarget;\n    }\n\n    return memo[target];\n  };\n}();\n\nvar stylesInDom = [];\n\nfunction getIndexByIdentifier(identifier) {\n  var result = -1;\n\n  for (var i = 0; i < stylesInDom.length; i++) {\n    if (stylesInDom[i].identifier === identifier) {\n      result = i;\n      break;\n    }\n  }\n\n  return result;\n}\n\nfunction modulesToDom(list, options) {\n  var idCountMap = {};\n  var identifiers = [];\n\n  for (var i = 0; i < list.length; i++) {\n    var item = list[i];\n    var id = options.base ? item[0] + options.base : item[0];\n    var count = idCountMap[id] || 0;\n    var identifier = \"\".concat(id, \" \").concat(count);\n    idCountMap[id] = count + 1;\n    var index = getIndexByIdentifier(identifier);\n    var obj = {\n      css: item[1],\n      media: item[2],\n      sourceMap: item[3]\n    };\n\n    if (index !== -1) {\n      stylesInDom[index].references++;\n      stylesInDom[index].updater(obj);\n    } else {\n      stylesInDom.push({\n        identifier: identifier,\n        updater: addStyle(obj, options),\n        references: 1\n      });\n    }\n\n    identifiers.push(identifier);\n  }\n\n  return identifiers;\n}\n\nfunction insertStyleElement(options) {\n  var style = document.createElement('style');\n  var attributes = options.attributes || {};\n\n  if (typeof attributes.nonce === 'undefined') {\n    var nonce =  true ? __webpack_require__.nc : 0;\n\n    if (nonce) {\n      attributes.nonce = nonce;\n    }\n  }\n\n  Object.keys(attributes).forEach(function (key) {\n    style.setAttribute(key, attributes[key]);\n  });\n\n  if (typeof options.insert === 'function') {\n    options.insert(style);\n  } else {\n    var target = getTarget(options.insert || 'head');\n\n    if (!target) {\n      throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");\n    }\n\n    target.appendChild(style);\n  }\n\n  return style;\n}\n\nfunction removeStyleElement(style) {\n  // istanbul ignore if\n  if (style.parentNode === null) {\n    return false;\n  }\n\n  style.parentNode.removeChild(style);\n}\n/* istanbul ignore next  */\n\n\nvar replaceText = function replaceText() {\n  var textStore = [];\n  return function replace(index, replacement) {\n    textStore[index] = replacement;\n    return textStore.filter(Boolean).join('\\n');\n  };\n}();\n\nfunction applyToSingletonTag(style, index, remove, obj) {\n  var css = remove ? '' : obj.media ? \"@media \".concat(obj.media, \" {\").concat(obj.css, \"}\") : obj.css; // For old IE\n\n  /* istanbul ignore if  */\n\n  if (style.styleSheet) {\n    style.styleSheet.cssText = replaceText(index, css);\n  } else {\n    var cssNode = document.createTextNode(css);\n    var childNodes = style.childNodes;\n\n    if (childNodes[index]) {\n      style.removeChild(childNodes[index]);\n    }\n\n    if (childNodes.length) {\n      style.insertBefore(cssNode, childNodes[index]);\n    } else {\n      style.appendChild(cssNode);\n    }\n  }\n}\n\nfunction applyToTag(style, options, obj) {\n  var css = obj.css;\n  var media = obj.media;\n  var sourceMap = obj.sourceMap;\n\n  if (media) {\n    style.setAttribute('media', media);\n  } else {\n    style.removeAttribute('media');\n  }\n\n  if (sourceMap && typeof btoa !== 'undefined') {\n    css += \"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), \" */\");\n  } // For old IE\n\n  /* istanbul ignore if  */\n\n\n  if (style.styleSheet) {\n    style.styleSheet.cssText = css;\n  } else {\n    while (style.firstChild) {\n      style.removeChild(style.firstChild);\n    }\n\n    style.appendChild(document.createTextNode(css));\n  }\n}\n\nvar singleton = null;\nvar singletonCounter = 0;\n\nfunction addStyle(obj, options) {\n  var style;\n  var update;\n  var remove;\n\n  if (options.singleton) {\n    var styleIndex = singletonCounter++;\n    style = singleton || (singleton = insertStyleElement(options));\n    update = applyToSingletonTag.bind(null, style, styleIndex, false);\n    remove = applyToSingletonTag.bind(null, style, styleIndex, true);\n  } else {\n    style = insertStyleElement(options);\n    update = applyToTag.bind(null, style, options);\n\n    remove = function remove() {\n      removeStyleElement(style);\n    };\n  }\n\n  update(obj);\n  return function updateStyle(newObj) {\n    if (newObj) {\n      if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap) {\n        return;\n      }\n\n      update(obj = newObj);\n    } else {\n      remove();\n    }\n  };\n}\n\nmodule.exports = function (list, options) {\n  options = options || {}; // Force single-tag solution on IE6-9, which has a hard limit on the # of <style>\n  // tags it will allow on a page\n\n  if (!options.singleton && typeof options.singleton !== 'boolean') {\n    options.singleton = isOldIE();\n  }\n\n  list = list || [];\n  var lastIdentifiers = modulesToDom(list, options);\n  return function update(newList) {\n    newList = newList || [];\n\n    if (Object.prototype.toString.call(newList) !== '[object Array]') {\n      return;\n    }\n\n    for (var i = 0; i < lastIdentifiers.length; i++) {\n      var identifier = lastIdentifiers[i];\n      var index = getIndexByIdentifier(identifier);\n      stylesInDom[index].references--;\n    }\n\n    var newLastIdentifiers = modulesToDom(newList, options);\n\n    for (var _i = 0; _i < lastIdentifiers.length; _i++) {\n      var _identifier = lastIdentifiers[_i];\n\n      var _index = getIndexByIdentifier(_identifier);\n\n      if (stylesInDom[_index].references === 0) {\n        stylesInDom[_index].updater();\n\n        stylesInDom.splice(_index, 1);\n      }\n    }\n\n    lastIdentifiers = newLastIdentifiers;\n  };\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbmplY3RTdHlsZXNJbnRvU3R5bGVUYWcuanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdEQUF3RDs7QUFFeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDOztBQUVEOztBQUVBO0FBQ0E7O0FBRUEsa0JBQWtCLHdCQUF3QjtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGtCQUFrQixpQkFBaUI7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGdCQUFnQixLQUF3QyxHQUFHLHNCQUFpQixHQUFHLENBQUk7O0FBRW5GO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBLHFFQUFxRSxxQkFBcUIsY0FBYzs7QUFFeEc7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBLHlEQUF5RDtBQUN6RCxJQUFJOztBQUVKOzs7QUFHQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMkJBQTJCO0FBQzNCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsb0JBQW9CLDRCQUE0QjtBQUNoRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxxQkFBcUIsNkJBQTZCO0FBQ2xEOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qcz9kYmQ5Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG52YXIgaXNPbGRJRSA9IGZ1bmN0aW9uIGlzT2xkSUUoKSB7XG4gIHZhciBtZW1vO1xuICByZXR1cm4gZnVuY3Rpb24gbWVtb3JpemUoKSB7XG4gICAgaWYgKHR5cGVvZiBtZW1vID09PSAndW5kZWZpbmVkJykge1xuICAgICAgLy8gVGVzdCBmb3IgSUUgPD0gOSBhcyBwcm9wb3NlZCBieSBCcm93c2VyaGFja3NcbiAgICAgIC8vIEBzZWUgaHR0cDovL2Jyb3dzZXJoYWNrcy5jb20vI2hhY2stZTcxZDg2OTJmNjUzMzQxNzNmZWU3MTVjMjIyY2I4MDVcbiAgICAgIC8vIFRlc3RzIGZvciBleGlzdGVuY2Ugb2Ygc3RhbmRhcmQgZ2xvYmFscyBpcyB0byBhbGxvdyBzdHlsZS1sb2FkZXJcbiAgICAgIC8vIHRvIG9wZXJhdGUgY29ycmVjdGx5IGludG8gbm9uLXN0YW5kYXJkIGVudmlyb25tZW50c1xuICAgICAgLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vd2VicGFjay1jb250cmliL3N0eWxlLWxvYWRlci9pc3N1ZXMvMTc3XG4gICAgICBtZW1vID0gQm9vbGVhbih3aW5kb3cgJiYgZG9jdW1lbnQgJiYgZG9jdW1lbnQuYWxsICYmICF3aW5kb3cuYXRvYik7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lbW87XG4gIH07XG59KCk7XG5cbnZhciBnZXRUYXJnZXQgPSBmdW5jdGlvbiBnZXRUYXJnZXQoKSB7XG4gIHZhciBtZW1vID0ge307XG4gIHJldHVybiBmdW5jdGlvbiBtZW1vcml6ZSh0YXJnZXQpIHtcbiAgICBpZiAodHlwZW9mIG1lbW9bdGFyZ2V0XSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHZhciBzdHlsZVRhcmdldCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGFyZ2V0KTsgLy8gU3BlY2lhbCBjYXNlIHRvIHJldHVybiBoZWFkIG9mIGlmcmFtZSBpbnN0ZWFkIG9mIGlmcmFtZSBpdHNlbGZcblxuICAgICAgaWYgKHdpbmRvdy5IVE1MSUZyYW1lRWxlbWVudCAmJiBzdHlsZVRhcmdldCBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MSUZyYW1lRWxlbWVudCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIFRoaXMgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24gaWYgYWNjZXNzIHRvIGlmcmFtZSBpcyBibG9ja2VkXG4gICAgICAgICAgLy8gZHVlIHRvIGNyb3NzLW9yaWdpbiByZXN0cmljdGlvbnNcbiAgICAgICAgICBzdHlsZVRhcmdldCA9IHN0eWxlVGFyZ2V0LmNvbnRlbnREb2N1bWVudC5oZWFkO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICAgICAgICBzdHlsZVRhcmdldCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbWVtb1t0YXJnZXRdID0gc3R5bGVUYXJnZXQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lbW9bdGFyZ2V0XTtcbiAgfTtcbn0oKTtcblxudmFyIHN0eWxlc0luRG9tID0gW107XG5cbmZ1bmN0aW9uIGdldEluZGV4QnlJZGVudGlmaWVyKGlkZW50aWZpZXIpIHtcbiAgdmFyIHJlc3VsdCA9IC0xO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGVzSW5Eb20ubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoc3R5bGVzSW5Eb21baV0uaWRlbnRpZmllciA9PT0gaWRlbnRpZmllcikge1xuICAgICAgcmVzdWx0ID0gaTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIG1vZHVsZXNUb0RvbShsaXN0LCBvcHRpb25zKSB7XG4gIHZhciBpZENvdW50TWFwID0ge307XG4gIHZhciBpZGVudGlmaWVycyA9IFtdO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBpdGVtID0gbGlzdFtpXTtcbiAgICB2YXIgaWQgPSBvcHRpb25zLmJhc2UgPyBpdGVtWzBdICsgb3B0aW9ucy5iYXNlIDogaXRlbVswXTtcbiAgICB2YXIgY291bnQgPSBpZENvdW50TWFwW2lkXSB8fCAwO1xuICAgIHZhciBpZGVudGlmaWVyID0gXCJcIi5jb25jYXQoaWQsIFwiIFwiKS5jb25jYXQoY291bnQpO1xuICAgIGlkQ291bnRNYXBbaWRdID0gY291bnQgKyAxO1xuICAgIHZhciBpbmRleCA9IGdldEluZGV4QnlJZGVudGlmaWVyKGlkZW50aWZpZXIpO1xuICAgIHZhciBvYmogPSB7XG4gICAgICBjc3M6IGl0ZW1bMV0sXG4gICAgICBtZWRpYTogaXRlbVsyXSxcbiAgICAgIHNvdXJjZU1hcDogaXRlbVszXVxuICAgIH07XG5cbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICBzdHlsZXNJbkRvbVtpbmRleF0ucmVmZXJlbmNlcysrO1xuICAgICAgc3R5bGVzSW5Eb21baW5kZXhdLnVwZGF0ZXIob2JqKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3R5bGVzSW5Eb20ucHVzaCh7XG4gICAgICAgIGlkZW50aWZpZXI6IGlkZW50aWZpZXIsXG4gICAgICAgIHVwZGF0ZXI6IGFkZFN0eWxlKG9iaiwgb3B0aW9ucyksXG4gICAgICAgIHJlZmVyZW5jZXM6IDFcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlkZW50aWZpZXJzLnB1c2goaWRlbnRpZmllcik7XG4gIH1cblxuICByZXR1cm4gaWRlbnRpZmllcnM7XG59XG5cbmZ1bmN0aW9uIGluc2VydFN0eWxlRWxlbWVudChvcHRpb25zKSB7XG4gIHZhciBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gIHZhciBhdHRyaWJ1dGVzID0gb3B0aW9ucy5hdHRyaWJ1dGVzIHx8IHt9O1xuXG4gIGlmICh0eXBlb2YgYXR0cmlidXRlcy5ub25jZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICB2YXIgbm9uY2UgPSB0eXBlb2YgX193ZWJwYWNrX25vbmNlX18gIT09ICd1bmRlZmluZWQnID8gX193ZWJwYWNrX25vbmNlX18gOiBudWxsO1xuXG4gICAgaWYgKG5vbmNlKSB7XG4gICAgICBhdHRyaWJ1dGVzLm5vbmNlID0gbm9uY2U7XG4gICAgfVxuICB9XG5cbiAgT2JqZWN0LmtleXMoYXR0cmlidXRlcykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgc3R5bGUuc2V0QXR0cmlidXRlKGtleSwgYXR0cmlidXRlc1trZXldKTtcbiAgfSk7XG5cbiAgaWYgKHR5cGVvZiBvcHRpb25zLmluc2VydCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIG9wdGlvbnMuaW5zZXJ0KHN0eWxlKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgdGFyZ2V0ID0gZ2V0VGFyZ2V0KG9wdGlvbnMuaW5zZXJ0IHx8ICdoZWFkJyk7XG5cbiAgICBpZiAoIXRhcmdldCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ291bGRuJ3QgZmluZCBhIHN0eWxlIHRhcmdldC4gVGhpcyBwcm9iYWJseSBtZWFucyB0aGF0IHRoZSB2YWx1ZSBmb3IgdGhlICdpbnNlcnQnIHBhcmFtZXRlciBpcyBpbnZhbGlkLlwiKTtcbiAgICB9XG5cbiAgICB0YXJnZXQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuICB9XG5cbiAgcmV0dXJuIHN0eWxlO1xufVxuXG5mdW5jdGlvbiByZW1vdmVTdHlsZUVsZW1lbnQoc3R5bGUpIHtcbiAgLy8gaXN0YW5idWwgaWdub3JlIGlmXG4gIGlmIChzdHlsZS5wYXJlbnROb2RlID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc3R5bGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzdHlsZSk7XG59XG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cblxuXG52YXIgcmVwbGFjZVRleHQgPSBmdW5jdGlvbiByZXBsYWNlVGV4dCgpIHtcbiAgdmFyIHRleHRTdG9yZSA9IFtdO1xuICByZXR1cm4gZnVuY3Rpb24gcmVwbGFjZShpbmRleCwgcmVwbGFjZW1lbnQpIHtcbiAgICB0ZXh0U3RvcmVbaW5kZXhdID0gcmVwbGFjZW1lbnQ7XG4gICAgcmV0dXJuIHRleHRTdG9yZS5maWx0ZXIoQm9vbGVhbikuam9pbignXFxuJyk7XG4gIH07XG59KCk7XG5cbmZ1bmN0aW9uIGFwcGx5VG9TaW5nbGV0b25UYWcoc3R5bGUsIGluZGV4LCByZW1vdmUsIG9iaikge1xuICB2YXIgY3NzID0gcmVtb3ZlID8gJycgOiBvYmoubWVkaWEgPyBcIkBtZWRpYSBcIi5jb25jYXQob2JqLm1lZGlhLCBcIiB7XCIpLmNvbmNhdChvYmouY3NzLCBcIn1cIikgOiBvYmouY3NzOyAvLyBGb3Igb2xkIElFXG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICAqL1xuXG4gIGlmIChzdHlsZS5zdHlsZVNoZWV0KSB7XG4gICAgc3R5bGUuc3R5bGVTaGVldC5jc3NUZXh0ID0gcmVwbGFjZVRleHQoaW5kZXgsIGNzcyk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGNzc05vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpO1xuICAgIHZhciBjaGlsZE5vZGVzID0gc3R5bGUuY2hpbGROb2RlcztcblxuICAgIGlmIChjaGlsZE5vZGVzW2luZGV4XSkge1xuICAgICAgc3R5bGUucmVtb3ZlQ2hpbGQoY2hpbGROb2Rlc1tpbmRleF0pO1xuICAgIH1cblxuICAgIGlmIChjaGlsZE5vZGVzLmxlbmd0aCkge1xuICAgICAgc3R5bGUuaW5zZXJ0QmVmb3JlKGNzc05vZGUsIGNoaWxkTm9kZXNbaW5kZXhdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3R5bGUuYXBwZW5kQ2hpbGQoY3NzTm9kZSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGFwcGx5VG9UYWcoc3R5bGUsIG9wdGlvbnMsIG9iaikge1xuICB2YXIgY3NzID0gb2JqLmNzcztcbiAgdmFyIG1lZGlhID0gb2JqLm1lZGlhO1xuICB2YXIgc291cmNlTWFwID0gb2JqLnNvdXJjZU1hcDtcblxuICBpZiAobWVkaWEpIHtcbiAgICBzdHlsZS5zZXRBdHRyaWJ1dGUoJ21lZGlhJywgbWVkaWEpO1xuICB9IGVsc2Uge1xuICAgIHN0eWxlLnJlbW92ZUF0dHJpYnV0ZSgnbWVkaWEnKTtcbiAgfVxuXG4gIGlmIChzb3VyY2VNYXAgJiYgdHlwZW9mIGJ0b2EgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgY3NzICs9IFwiXFxuLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxcIi5jb25jYXQoYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoc291cmNlTWFwKSkpKSwgXCIgKi9cIik7XG4gIH0gLy8gRm9yIG9sZCBJRVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAgKi9cblxuXG4gIGlmIChzdHlsZS5zdHlsZVNoZWV0KSB7XG4gICAgc3R5bGUuc3R5bGVTaGVldC5jc3NUZXh0ID0gY3NzO1xuICB9IGVsc2Uge1xuICAgIHdoaWxlIChzdHlsZS5maXJzdENoaWxkKSB7XG4gICAgICBzdHlsZS5yZW1vdmVDaGlsZChzdHlsZS5maXJzdENoaWxkKTtcbiAgICB9XG5cbiAgICBzdHlsZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpKTtcbiAgfVxufVxuXG52YXIgc2luZ2xldG9uID0gbnVsbDtcbnZhciBzaW5nbGV0b25Db3VudGVyID0gMDtcblxuZnVuY3Rpb24gYWRkU3R5bGUob2JqLCBvcHRpb25zKSB7XG4gIHZhciBzdHlsZTtcbiAgdmFyIHVwZGF0ZTtcbiAgdmFyIHJlbW92ZTtcblxuICBpZiAob3B0aW9ucy5zaW5nbGV0b24pIHtcbiAgICB2YXIgc3R5bGVJbmRleCA9IHNpbmdsZXRvbkNvdW50ZXIrKztcbiAgICBzdHlsZSA9IHNpbmdsZXRvbiB8fCAoc2luZ2xldG9uID0gaW5zZXJ0U3R5bGVFbGVtZW50KG9wdGlvbnMpKTtcbiAgICB1cGRhdGUgPSBhcHBseVRvU2luZ2xldG9uVGFnLmJpbmQobnVsbCwgc3R5bGUsIHN0eWxlSW5kZXgsIGZhbHNlKTtcbiAgICByZW1vdmUgPSBhcHBseVRvU2luZ2xldG9uVGFnLmJpbmQobnVsbCwgc3R5bGUsIHN0eWxlSW5kZXgsIHRydWUpO1xuICB9IGVsc2Uge1xuICAgIHN0eWxlID0gaW5zZXJ0U3R5bGVFbGVtZW50KG9wdGlvbnMpO1xuICAgIHVwZGF0ZSA9IGFwcGx5VG9UYWcuYmluZChudWxsLCBzdHlsZSwgb3B0aW9ucyk7XG5cbiAgICByZW1vdmUgPSBmdW5jdGlvbiByZW1vdmUoKSB7XG4gICAgICByZW1vdmVTdHlsZUVsZW1lbnQoc3R5bGUpO1xuICAgIH07XG4gIH1cblxuICB1cGRhdGUob2JqKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIHVwZGF0ZVN0eWxlKG5ld09iaikge1xuICAgIGlmIChuZXdPYmopIHtcbiAgICAgIGlmIChuZXdPYmouY3NzID09PSBvYmouY3NzICYmIG5ld09iai5tZWRpYSA9PT0gb2JqLm1lZGlhICYmIG5ld09iai5zb3VyY2VNYXAgPT09IG9iai5zb3VyY2VNYXApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB1cGRhdGUob2JqID0gbmV3T2JqKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVtb3ZlKCk7XG4gICAgfVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChsaXN0LCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OyAvLyBGb3JjZSBzaW5nbGUtdGFnIHNvbHV0aW9uIG9uIElFNi05LCB3aGljaCBoYXMgYSBoYXJkIGxpbWl0IG9uIHRoZSAjIG9mIDxzdHlsZT5cbiAgLy8gdGFncyBpdCB3aWxsIGFsbG93IG9uIGEgcGFnZVxuXG4gIGlmICghb3B0aW9ucy5zaW5nbGV0b24gJiYgdHlwZW9mIG9wdGlvbnMuc2luZ2xldG9uICE9PSAnYm9vbGVhbicpIHtcbiAgICBvcHRpb25zLnNpbmdsZXRvbiA9IGlzT2xkSUUoKTtcbiAgfVxuXG4gIGxpc3QgPSBsaXN0IHx8IFtdO1xuICB2YXIgbGFzdElkZW50aWZpZXJzID0gbW9kdWxlc1RvRG9tKGxpc3QsIG9wdGlvbnMpO1xuICByZXR1cm4gZnVuY3Rpb24gdXBkYXRlKG5ld0xpc3QpIHtcbiAgICBuZXdMaXN0ID0gbmV3TGlzdCB8fCBbXTtcblxuICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobmV3TGlzdCkgIT09ICdbb2JqZWN0IEFycmF5XScpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxhc3RJZGVudGlmaWVycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGlkZW50aWZpZXIgPSBsYXN0SWRlbnRpZmllcnNbaV07XG4gICAgICB2YXIgaW5kZXggPSBnZXRJbmRleEJ5SWRlbnRpZmllcihpZGVudGlmaWVyKTtcbiAgICAgIHN0eWxlc0luRG9tW2luZGV4XS5yZWZlcmVuY2VzLS07XG4gICAgfVxuXG4gICAgdmFyIG5ld0xhc3RJZGVudGlmaWVycyA9IG1vZHVsZXNUb0RvbShuZXdMaXN0LCBvcHRpb25zKTtcblxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBsYXN0SWRlbnRpZmllcnMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgX2lkZW50aWZpZXIgPSBsYXN0SWRlbnRpZmllcnNbX2ldO1xuXG4gICAgICB2YXIgX2luZGV4ID0gZ2V0SW5kZXhCeUlkZW50aWZpZXIoX2lkZW50aWZpZXIpO1xuXG4gICAgICBpZiAoc3R5bGVzSW5Eb21bX2luZGV4XS5yZWZlcmVuY2VzID09PSAwKSB7XG4gICAgICAgIHN0eWxlc0luRG9tW19pbmRleF0udXBkYXRlcigpO1xuXG4gICAgICAgIHN0eWxlc0luRG9tLnNwbGljZShfaW5kZXgsIDEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxhc3RJZGVudGlmaWVycyA9IG5ld0xhc3RJZGVudGlmaWVycztcbiAgfTtcbn07Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\n");

/***/ }),

/***/ "./node_modules/survey-vue/survey-vue.js":
/*!***********************************************!*\
  !*** ./node_modules/survey-vue/survey-vue.js ***!
  \***********************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {

eval("/*!\n * surveyjs - Survey JavaScript library v1.9.110\n * Copyright (c) 2015-2023 Devsoft Baltic OÜ  - http://surveyjs.io/\n * License: MIT (http://www.opensource.org/licenses/mit-license.php)\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(true)\n\t\tmodule.exports = factory(__webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.esm.js\"));\n\telse {}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_vue__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __nested_webpack_require_822__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __nested_webpack_require_822__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__nested_webpack_require_822__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__nested_webpack_require_822__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__nested_webpack_require_822__.d = function(exports, name, getter) {\n/******/ \t\tif(!__nested_webpack_require_822__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__nested_webpack_require_822__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__nested_webpack_require_822__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __nested_webpack_require_822__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__nested_webpack_require_822__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __nested_webpack_require_822__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__nested_webpack_require_822__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__nested_webpack_require_822__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__nested_webpack_require_822__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__nested_webpack_require_822__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __nested_webpack_require_822__(__nested_webpack_require_822__.s = \"./src/entries/vue.ts\");\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ \"./node_modules/signature_pad/dist/signature_pad.js\":\n/*!**********************************************************!*\\\n  !*** ./node_modules/signature_pad/dist/signature_pad.js ***!\n  \\**********************************************************/\n/*! exports provided: default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4596__) {\n\n\"use strict\";\n__nested_webpack_require_4596__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_4596__.d(__nested_webpack_exports__, \"default\", function() { return SignaturePad; });\n/*!\n * Signature Pad v4.1.6 | https://github.com/szimek/signature_pad\n * (c) 2023 Szymon Nowak | Released under the MIT license\n */\n\nclass Point {\n    constructor(x, y, pressure, time) {\n        if (isNaN(x) || isNaN(y)) {\n            throw new Error(`Point is invalid: (${x}, ${y})`);\n        }\n        this.x = +x;\n        this.y = +y;\n        this.pressure = pressure || 0;\n        this.time = time || Date.now();\n    }\n    distanceTo(start) {\n        return Math.sqrt(Math.pow(this.x - start.x, 2) + Math.pow(this.y - start.y, 2));\n    }\n    equals(other) {\n        return (this.x === other.x &&\n            this.y === other.y &&\n            this.pressure === other.pressure &&\n            this.time === other.time);\n    }\n    velocityFrom(start) {\n        return this.time !== start.time\n            ? this.distanceTo(start) / (this.time - start.time)\n            : 0;\n    }\n}\n\nclass Bezier {\n    constructor(startPoint, control2, control1, endPoint, startWidth, endWidth) {\n        this.startPoint = startPoint;\n        this.control2 = control2;\n        this.control1 = control1;\n        this.endPoint = endPoint;\n        this.startWidth = startWidth;\n        this.endWidth = endWidth;\n    }\n    static fromPoints(points, widths) {\n        const c2 = this.calculateControlPoints(points[0], points[1], points[2]).c2;\n        const c3 = this.calculateControlPoints(points[1], points[2], points[3]).c1;\n        return new Bezier(points[1], c2, c3, points[2], widths.start, widths.end);\n    }\n    static calculateControlPoints(s1, s2, s3) {\n        const dx1 = s1.x - s2.x;\n        const dy1 = s1.y - s2.y;\n        const dx2 = s2.x - s3.x;\n        const dy2 = s2.y - s3.y;\n        const m1 = { x: (s1.x + s2.x) / 2.0, y: (s1.y + s2.y) / 2.0 };\n        const m2 = { x: (s2.x + s3.x) / 2.0, y: (s2.y + s3.y) / 2.0 };\n        const l1 = Math.sqrt(dx1 * dx1 + dy1 * dy1);\n        const l2 = Math.sqrt(dx2 * dx2 + dy2 * dy2);\n        const dxm = m1.x - m2.x;\n        const dym = m1.y - m2.y;\n        const k = l2 / (l1 + l2);\n        const cm = { x: m2.x + dxm * k, y: m2.y + dym * k };\n        const tx = s2.x - cm.x;\n        const ty = s2.y - cm.y;\n        return {\n            c1: new Point(m1.x + tx, m1.y + ty),\n            c2: new Point(m2.x + tx, m2.y + ty),\n        };\n    }\n    length() {\n        const steps = 10;\n        let length = 0;\n        let px;\n        let py;\n        for (let i = 0; i <= steps; i += 1) {\n            const t = i / steps;\n            const cx = this.point(t, this.startPoint.x, this.control1.x, this.control2.x, this.endPoint.x);\n            const cy = this.point(t, this.startPoint.y, this.control1.y, this.control2.y, this.endPoint.y);\n            if (i > 0) {\n                const xdiff = cx - px;\n                const ydiff = cy - py;\n                length += Math.sqrt(xdiff * xdiff + ydiff * ydiff);\n            }\n            px = cx;\n            py = cy;\n        }\n        return length;\n    }\n    point(t, start, c1, c2, end) {\n        return (start * (1.0 - t) * (1.0 - t) * (1.0 - t))\n            + (3.0 * c1 * (1.0 - t) * (1.0 - t) * t)\n            + (3.0 * c2 * (1.0 - t) * t * t)\n            + (end * t * t * t);\n    }\n}\n\nclass SignatureEventTarget {\n    constructor() {\n        try {\n            this._et = new EventTarget();\n        }\n        catch (error) {\n            this._et = document;\n        }\n    }\n    addEventListener(type, listener, options) {\n        this._et.addEventListener(type, listener, options);\n    }\n    dispatchEvent(event) {\n        return this._et.dispatchEvent(event);\n    }\n    removeEventListener(type, callback, options) {\n        this._et.removeEventListener(type, callback, options);\n    }\n}\n\nfunction throttle(fn, wait = 250) {\n    let previous = 0;\n    let timeout = null;\n    let result;\n    let storedContext;\n    let storedArgs;\n    const later = () => {\n        previous = Date.now();\n        timeout = null;\n        result = fn.apply(storedContext, storedArgs);\n        if (!timeout) {\n            storedContext = null;\n            storedArgs = [];\n        }\n    };\n    return function wrapper(...args) {\n        const now = Date.now();\n        const remaining = wait - (now - previous);\n        storedContext = this;\n        storedArgs = args;\n        if (remaining <= 0 || remaining > wait) {\n            if (timeout) {\n                clearTimeout(timeout);\n                timeout = null;\n            }\n            previous = now;\n            result = fn.apply(storedContext, storedArgs);\n            if (!timeout) {\n                storedContext = null;\n                storedArgs = [];\n            }\n        }\n        else if (!timeout) {\n            timeout = window.setTimeout(later, remaining);\n        }\n        return result;\n    };\n}\n\nclass SignaturePad extends SignatureEventTarget {\n    constructor(canvas, options = {}) {\n        super();\n        this.canvas = canvas;\n        this._drawningStroke = false;\n        this._isEmpty = true;\n        this._lastPoints = [];\n        this._data = [];\n        this._lastVelocity = 0;\n        this._lastWidth = 0;\n        this._handleMouseDown = (event) => {\n            if (event.buttons === 1) {\n                this._drawningStroke = true;\n                this._strokeBegin(event);\n            }\n        };\n        this._handleMouseMove = (event) => {\n            if (this._drawningStroke) {\n                this._strokeMoveUpdate(event);\n            }\n        };\n        this._handleMouseUp = (event) => {\n            if (event.buttons === 1 && this._drawningStroke) {\n                this._drawningStroke = false;\n                this._strokeEnd(event);\n            }\n        };\n        this._handleTouchStart = (event) => {\n            if (event.cancelable) {\n                event.preventDefault();\n            }\n            if (event.targetTouches.length === 1) {\n                const touch = event.changedTouches[0];\n                this._strokeBegin(touch);\n            }\n        };\n        this._handleTouchMove = (event) => {\n            if (event.cancelable) {\n                event.preventDefault();\n            }\n            const touch = event.targetTouches[0];\n            this._strokeMoveUpdate(touch);\n        };\n        this._handleTouchEnd = (event) => {\n            const wasCanvasTouched = event.target === this.canvas;\n            if (wasCanvasTouched) {\n                if (event.cancelable) {\n                    event.preventDefault();\n                }\n                const touch = event.changedTouches[0];\n                this._strokeEnd(touch);\n            }\n        };\n        this._handlePointerStart = (event) => {\n            this._drawningStroke = true;\n            event.preventDefault();\n            this._strokeBegin(event);\n        };\n        this._handlePointerMove = (event) => {\n            if (this._drawningStroke) {\n                event.preventDefault();\n                this._strokeMoveUpdate(event);\n            }\n        };\n        this._handlePointerEnd = (event) => {\n            if (this._drawningStroke) {\n                event.preventDefault();\n                this._drawningStroke = false;\n                this._strokeEnd(event);\n            }\n        };\n        this.velocityFilterWeight = options.velocityFilterWeight || 0.7;\n        this.minWidth = options.minWidth || 0.5;\n        this.maxWidth = options.maxWidth || 2.5;\n        this.throttle = ('throttle' in options ? options.throttle : 16);\n        this.minDistance = ('minDistance' in options ? options.minDistance : 5);\n        this.dotSize = options.dotSize || 0;\n        this.penColor = options.penColor || 'black';\n        this.backgroundColor = options.backgroundColor || 'rgba(0,0,0,0)';\n        this.compositeOperation = options.compositeOperation || 'source-over';\n        this._strokeMoveUpdate = this.throttle\n            ? throttle(SignaturePad.prototype._strokeUpdate, this.throttle)\n            : SignaturePad.prototype._strokeUpdate;\n        this._ctx = canvas.getContext('2d');\n        this.clear();\n        this.on();\n    }\n    clear() {\n        const { _ctx: ctx, canvas } = this;\n        ctx.fillStyle = this.backgroundColor;\n        ctx.clearRect(0, 0, canvas.width, canvas.height);\n        ctx.fillRect(0, 0, canvas.width, canvas.height);\n        this._data = [];\n        this._reset(this._getPointGroupOptions());\n        this._isEmpty = true;\n    }\n    fromDataURL(dataUrl, options = {}) {\n        return new Promise((resolve, reject) => {\n            const image = new Image();\n            const ratio = options.ratio || window.devicePixelRatio || 1;\n            const width = options.width || this.canvas.width / ratio;\n            const height = options.height || this.canvas.height / ratio;\n            const xOffset = options.xOffset || 0;\n            const yOffset = options.yOffset || 0;\n            this._reset(this._getPointGroupOptions());\n            image.onload = () => {\n                this._ctx.drawImage(image, xOffset, yOffset, width, height);\n                resolve();\n            };\n            image.onerror = (error) => {\n                reject(error);\n            };\n            image.crossOrigin = 'anonymous';\n            image.src = dataUrl;\n            this._isEmpty = false;\n        });\n    }\n    toDataURL(type = 'image/png', encoderOptions) {\n        switch (type) {\n            case 'image/svg+xml':\n                if (typeof encoderOptions !== 'object') {\n                    encoderOptions = undefined;\n                }\n                return `data:image/svg+xml;base64,${btoa(this.toSVG(encoderOptions))}`;\n            default:\n                if (typeof encoderOptions !== 'number') {\n                    encoderOptions = undefined;\n                }\n                return this.canvas.toDataURL(type, encoderOptions);\n        }\n    }\n    on() {\n        this.canvas.style.touchAction = 'none';\n        this.canvas.style.msTouchAction = 'none';\n        this.canvas.style.userSelect = 'none';\n        const isIOS = /Macintosh/.test(navigator.userAgent) && 'ontouchstart' in document;\n        if (window.PointerEvent && !isIOS) {\n            this._handlePointerEvents();\n        }\n        else {\n            this._handleMouseEvents();\n            if ('ontouchstart' in window) {\n                this._handleTouchEvents();\n            }\n        }\n    }\n    off() {\n        this.canvas.style.touchAction = 'auto';\n        this.canvas.style.msTouchAction = 'auto';\n        this.canvas.style.userSelect = 'auto';\n        this.canvas.removeEventListener('pointerdown', this._handlePointerStart);\n        this.canvas.removeEventListener('pointermove', this._handlePointerMove);\n        this.canvas.ownerDocument.removeEventListener('pointerup', this._handlePointerEnd);\n        this.canvas.removeEventListener('mousedown', this._handleMouseDown);\n        this.canvas.removeEventListener('mousemove', this._handleMouseMove);\n        this.canvas.ownerDocument.removeEventListener('mouseup', this._handleMouseUp);\n        this.canvas.removeEventListener('touchstart', this._handleTouchStart);\n        this.canvas.removeEventListener('touchmove', this._handleTouchMove);\n        this.canvas.removeEventListener('touchend', this._handleTouchEnd);\n    }\n    isEmpty() {\n        return this._isEmpty;\n    }\n    fromData(pointGroups, { clear = true } = {}) {\n        if (clear) {\n            this.clear();\n        }\n        this._fromData(pointGroups, this._drawCurve.bind(this), this._drawDot.bind(this));\n        this._data = this._data.concat(pointGroups);\n    }\n    toData() {\n        return this._data;\n    }\n    _getPointGroupOptions(group) {\n        return {\n            penColor: group && 'penColor' in group ? group.penColor : this.penColor,\n            dotSize: group && 'dotSize' in group ? group.dotSize : this.dotSize,\n            minWidth: group && 'minWidth' in group ? group.minWidth : this.minWidth,\n            maxWidth: group && 'maxWidth' in group ? group.maxWidth : this.maxWidth,\n            velocityFilterWeight: group && 'velocityFilterWeight' in group\n                ? group.velocityFilterWeight\n                : this.velocityFilterWeight,\n            compositeOperation: group && 'compositeOperation' in group\n                ? group.compositeOperation\n                : this.compositeOperation,\n        };\n    }\n    _strokeBegin(event) {\n        this.dispatchEvent(new CustomEvent('beginStroke', { detail: event }));\n        const pointGroupOptions = this._getPointGroupOptions();\n        const newPointGroup = Object.assign(Object.assign({}, pointGroupOptions), { points: [] });\n        this._data.push(newPointGroup);\n        this._reset(pointGroupOptions);\n        this._strokeUpdate(event);\n    }\n    _strokeUpdate(event) {\n        if (this._data.length === 0) {\n            this._strokeBegin(event);\n            return;\n        }\n        this.dispatchEvent(new CustomEvent('beforeUpdateStroke', { detail: event }));\n        const x = event.clientX;\n        const y = event.clientY;\n        const pressure = event.pressure !== undefined\n            ? event.pressure\n            : event.force !== undefined\n                ? event.force\n                : 0;\n        const point = this._createPoint(x, y, pressure);\n        const lastPointGroup = this._data[this._data.length - 1];\n        const lastPoints = lastPointGroup.points;\n        const lastPoint = lastPoints.length > 0 && lastPoints[lastPoints.length - 1];\n        const isLastPointTooClose = lastPoint\n            ? point.distanceTo(lastPoint) <= this.minDistance\n            : false;\n        const pointGroupOptions = this._getPointGroupOptions(lastPointGroup);\n        if (!lastPoint || !(lastPoint && isLastPointTooClose)) {\n            const curve = this._addPoint(point, pointGroupOptions);\n            if (!lastPoint) {\n                this._drawDot(point, pointGroupOptions);\n            }\n            else if (curve) {\n                this._drawCurve(curve, pointGroupOptions);\n            }\n            lastPoints.push({\n                time: point.time,\n                x: point.x,\n                y: point.y,\n                pressure: point.pressure,\n            });\n        }\n        this.dispatchEvent(new CustomEvent('afterUpdateStroke', { detail: event }));\n    }\n    _strokeEnd(event) {\n        this._strokeUpdate(event);\n        this.dispatchEvent(new CustomEvent('endStroke', { detail: event }));\n    }\n    _handlePointerEvents() {\n        this._drawningStroke = false;\n        this.canvas.addEventListener('pointerdown', this._handlePointerStart);\n        this.canvas.addEventListener('pointermove', this._handlePointerMove);\n        this.canvas.ownerDocument.addEventListener('pointerup', this._handlePointerEnd);\n    }\n    _handleMouseEvents() {\n        this._drawningStroke = false;\n        this.canvas.addEventListener('mousedown', this._handleMouseDown);\n        this.canvas.addEventListener('mousemove', this._handleMouseMove);\n        this.canvas.ownerDocument.addEventListener('mouseup', this._handleMouseUp);\n    }\n    _handleTouchEvents() {\n        this.canvas.addEventListener('touchstart', this._handleTouchStart);\n        this.canvas.addEventListener('touchmove', this._handleTouchMove);\n        this.canvas.addEventListener('touchend', this._handleTouchEnd);\n    }\n    _reset(options) {\n        this._lastPoints = [];\n        this._lastVelocity = 0;\n        this._lastWidth = (options.minWidth + options.maxWidth) / 2;\n        this._ctx.fillStyle = options.penColor;\n        this._ctx.globalCompositeOperation = options.compositeOperation;\n    }\n    _createPoint(x, y, pressure) {\n        const rect = this.canvas.getBoundingClientRect();\n        return new Point(x - rect.left, y - rect.top, pressure, new Date().getTime());\n    }\n    _addPoint(point, options) {\n        const { _lastPoints } = this;\n        _lastPoints.push(point);\n        if (_lastPoints.length > 2) {\n            if (_lastPoints.length === 3) {\n                _lastPoints.unshift(_lastPoints[0]);\n            }\n            const widths = this._calculateCurveWidths(_lastPoints[1], _lastPoints[2], options);\n            const curve = Bezier.fromPoints(_lastPoints, widths);\n            _lastPoints.shift();\n            return curve;\n        }\n        return null;\n    }\n    _calculateCurveWidths(startPoint, endPoint, options) {\n        const velocity = options.velocityFilterWeight * endPoint.velocityFrom(startPoint) +\n            (1 - options.velocityFilterWeight) * this._lastVelocity;\n        const newWidth = this._strokeWidth(velocity, options);\n        const widths = {\n            end: newWidth,\n            start: this._lastWidth,\n        };\n        this._lastVelocity = velocity;\n        this._lastWidth = newWidth;\n        return widths;\n    }\n    _strokeWidth(velocity, options) {\n        return Math.max(options.maxWidth / (velocity + 1), options.minWidth);\n    }\n    _drawCurveSegment(x, y, width) {\n        const ctx = this._ctx;\n        ctx.moveTo(x, y);\n        ctx.arc(x, y, width, 0, 2 * Math.PI, false);\n        this._isEmpty = false;\n    }\n    _drawCurve(curve, options) {\n        const ctx = this._ctx;\n        const widthDelta = curve.endWidth - curve.startWidth;\n        const drawSteps = Math.ceil(curve.length()) * 2;\n        ctx.beginPath();\n        ctx.fillStyle = options.penColor;\n        for (let i = 0; i < drawSteps; i += 1) {\n            const t = i / drawSteps;\n            const tt = t * t;\n            const ttt = tt * t;\n            const u = 1 - t;\n            const uu = u * u;\n            const uuu = uu * u;\n            let x = uuu * curve.startPoint.x;\n            x += 3 * uu * t * curve.control1.x;\n            x += 3 * u * tt * curve.control2.x;\n            x += ttt * curve.endPoint.x;\n            let y = uuu * curve.startPoint.y;\n            y += 3 * uu * t * curve.control1.y;\n            y += 3 * u * tt * curve.control2.y;\n            y += ttt * curve.endPoint.y;\n            const width = Math.min(curve.startWidth + ttt * widthDelta, options.maxWidth);\n            this._drawCurveSegment(x, y, width);\n        }\n        ctx.closePath();\n        ctx.fill();\n    }\n    _drawDot(point, options) {\n        const ctx = this._ctx;\n        const width = options.dotSize > 0\n            ? options.dotSize\n            : (options.minWidth + options.maxWidth) / 2;\n        ctx.beginPath();\n        this._drawCurveSegment(point.x, point.y, width);\n        ctx.closePath();\n        ctx.fillStyle = options.penColor;\n        ctx.fill();\n    }\n    _fromData(pointGroups, drawCurve, drawDot) {\n        for (const group of pointGroups) {\n            const { points } = group;\n            const pointGroupOptions = this._getPointGroupOptions(group);\n            if (points.length > 1) {\n                for (let j = 0; j < points.length; j += 1) {\n                    const basicPoint = points[j];\n                    const point = new Point(basicPoint.x, basicPoint.y, basicPoint.pressure, basicPoint.time);\n                    if (j === 0) {\n                        this._reset(pointGroupOptions);\n                    }\n                    const curve = this._addPoint(point, pointGroupOptions);\n                    if (curve) {\n                        drawCurve(curve, pointGroupOptions);\n                    }\n                }\n            }\n            else {\n                this._reset(pointGroupOptions);\n                drawDot(points[0], pointGroupOptions);\n            }\n        }\n    }\n    toSVG({ includeBackgroundColor = false } = {}) {\n        const pointGroups = this._data;\n        const ratio = Math.max(window.devicePixelRatio || 1, 1);\n        const minX = 0;\n        const minY = 0;\n        const maxX = this.canvas.width / ratio;\n        const maxY = this.canvas.height / ratio;\n        const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n        svg.setAttribute('xmlns', 'http://www.w3.org/2000/svg');\n        svg.setAttribute('xmlns:xlink', 'http://www.w3.org/1999/xlink');\n        svg.setAttribute('viewBox', `${minX} ${minY} ${maxX} ${maxY}`);\n        svg.setAttribute('width', maxX.toString());\n        svg.setAttribute('height', maxY.toString());\n        if (includeBackgroundColor && this.backgroundColor) {\n            const rect = document.createElement('rect');\n            rect.setAttribute('width', '100%');\n            rect.setAttribute('height', '100%');\n            rect.setAttribute('fill', this.backgroundColor);\n            svg.appendChild(rect);\n        }\n        this._fromData(pointGroups, (curve, { penColor }) => {\n            const path = document.createElement('path');\n            if (!isNaN(curve.control1.x) &&\n                !isNaN(curve.control1.y) &&\n                !isNaN(curve.control2.x) &&\n                !isNaN(curve.control2.y)) {\n                const attr = `M ${curve.startPoint.x.toFixed(3)},${curve.startPoint.y.toFixed(3)} ` +\n                    `C ${curve.control1.x.toFixed(3)},${curve.control1.y.toFixed(3)} ` +\n                    `${curve.control2.x.toFixed(3)},${curve.control2.y.toFixed(3)} ` +\n                    `${curve.endPoint.x.toFixed(3)},${curve.endPoint.y.toFixed(3)}`;\n                path.setAttribute('d', attr);\n                path.setAttribute('stroke-width', (curve.endWidth * 2.25).toFixed(3));\n                path.setAttribute('stroke', penColor);\n                path.setAttribute('fill', 'none');\n                path.setAttribute('stroke-linecap', 'round');\n                svg.appendChild(path);\n            }\n        }, (point, { penColor, dotSize, minWidth, maxWidth }) => {\n            const circle = document.createElement('circle');\n            const size = dotSize > 0 ? dotSize : (minWidth + maxWidth) / 2;\n            circle.setAttribute('r', size.toString());\n            circle.setAttribute('cx', point.x.toString());\n            circle.setAttribute('cy', point.y.toString());\n            circle.setAttribute('fill', penColor);\n            svg.appendChild(circle);\n        });\n        return svg.outerHTML;\n    }\n}\n\n\n//# sourceMappingURL=signature_pad.js.map\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/boolean-checkbox.vue?vue&type=script&lang=ts&\":\n/*!**************************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/boolean-checkbox.vue?vue&type=script&lang=ts& ***!\n  \\**************************************************************************************************************************************************/\n/*! exports provided: BooleanCheckbox, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_27436__) {\n\n\"use strict\";\n__nested_webpack_require_27436__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_27436__.d(__nested_webpack_exports__, \"BooleanCheckbox\", function() { return BooleanCheckbox; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_27436__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_27436__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_27436__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _boolean__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_27436__(/*! ./boolean */ \"./src/vue/boolean.ts\");\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_27436__(/*! survey-core */ \"./src/entries/core.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\nvar BooleanCheckbox = /** @class */ (function (_super) {\n    __extends(BooleanCheckbox, _super);\n    function BooleanCheckbox() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    BooleanCheckbox = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], BooleanCheckbox);\n    return BooleanCheckbox;\n}(_boolean__WEBPACK_IMPORTED_MODULE_2__[\"Boolean\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-boolean-checkbox\", BooleanCheckbox);\nsurvey_core__WEBPACK_IMPORTED_MODULE_3__[\"RendererFactory\"].Instance.registerRenderer(\"boolean\", \"checkbox\", \"sv-boolean-checkbox\");\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (BooleanCheckbox);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/boolean-radio-item.vue?vue&type=script&lang=ts&\":\n/*!****************************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/boolean-radio-item.vue?vue&type=script&lang=ts& ***!\n  \\****************************************************************************************************************************************************/\n/*! exports provided: BooleanRadioItem, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_31137__) {\n\n\"use strict\";\n__nested_webpack_require_31137__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_31137__.d(__nested_webpack_exports__, \"BooleanRadioItem\", function() { return BooleanRadioItem; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_31137__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_31137__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_31137__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar BooleanRadioItem = /** @class */ (function (_super) {\n    __extends(BooleanRadioItem, _super);\n    function BooleanRadioItem() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.handleChange = function (event) {\n            _this.question.booleanValue = event.target.value == \"true\";\n        };\n        return _this;\n    }\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], BooleanRadioItem.prototype, \"question\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], BooleanRadioItem.prototype, \"locText\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], BooleanRadioItem.prototype, \"value\", void 0);\n    BooleanRadioItem = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], BooleanRadioItem);\n    return BooleanRadioItem;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-boolean-radio-item\", BooleanRadioItem);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (BooleanRadioItem);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/boolean-radio.vue?vue&type=script&lang=ts&\":\n/*!***********************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/boolean-radio.vue?vue&type=script&lang=ts& ***!\n  \\***********************************************************************************************************************************************/\n/*! exports provided: BooleanRadio, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_35032__) {\n\n\"use strict\";\n__nested_webpack_require_35032__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_35032__.d(__nested_webpack_exports__, \"BooleanRadio\", function() { return BooleanRadio; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_35032__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_35032__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_35032__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _boolean__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_35032__(/*! ./boolean */ \"./src/vue/boolean.ts\");\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_35032__(/*! survey-core */ \"./src/entries/core.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\nvar BooleanRadio = /** @class */ (function (_super) {\n    __extends(BooleanRadio, _super);\n    function BooleanRadio() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    BooleanRadio = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], BooleanRadio);\n    return BooleanRadio;\n}(_boolean__WEBPACK_IMPORTED_MODULE_2__[\"Boolean\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-boolean-radio\", BooleanRadio);\nsurvey_core__WEBPACK_IMPORTED_MODULE_3__[\"RendererFactory\"].Instance.registerRenderer(\"boolean\", \"radio\", \"sv-boolean-radio\");\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (BooleanRadio);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/boolean-switch.vue?vue&type=script&lang=ts&\":\n/*!************************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/boolean-switch.vue?vue&type=script&lang=ts& ***!\n  \\************************************************************************************************************************************************/\n/*! exports provided: BooleanSwitch, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_38675__) {\n\n\"use strict\";\n__nested_webpack_require_38675__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_38675__.d(__nested_webpack_exports__, \"BooleanSwitch\", function() { return BooleanSwitch; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_38675__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_38675__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_38675__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _boolean__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_38675__(/*! ./boolean */ \"./src/vue/boolean.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar BooleanSwitch = /** @class */ (function (_super) {\n    __extends(BooleanSwitch, _super);\n    function BooleanSwitch() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    BooleanSwitch = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], BooleanSwitch);\n    return BooleanSwitch;\n}(_boolean__WEBPACK_IMPORTED_MODULE_2__[\"Boolean\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-boolean\", BooleanSwitch);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (BooleanSwitch);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/buttongroup.vue?vue&type=script&lang=ts&\":\n/*!*********************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/buttongroup.vue?vue&type=script&lang=ts& ***!\n  \\*********************************************************************************************************************************************/\n/*! exports provided: ButtonGroup, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_42051__) {\n\n\"use strict\";\n__nested_webpack_require_42051__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_42051__.d(__nested_webpack_exports__, \"ButtonGroup\", function() { return ButtonGroup; });\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_42051__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_42051__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar ButtonGroup = /** @class */ (function (_super) {\n    __extends(ButtonGroup, _super);\n    function ButtonGroup() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    ButtonGroup.prototype.getModel = function () {\n        return this.question;\n    };\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Prop\"])()\n    ], ButtonGroup.prototype, \"question\", void 0);\n    ButtonGroup = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Component\"]\n    ], ButtonGroup);\n    return ButtonGroup;\n}(_question__WEBPACK_IMPORTED_MODULE_1__[\"QuestionVue\"]));\n\n// Vue.component(\"survey-buttongroup\", ButtonGroup);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (ButtonGroup);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/buttongroupitem.vue?vue&type=script&lang=ts&\":\n/*!*************************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/buttongroupitem.vue?vue&type=script&lang=ts& ***!\n  \\*************************************************************************************************************************************************/\n/*! exports provided: ButtonGroupItem, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_45399__) {\n\n\"use strict\";\n__nested_webpack_require_45399__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_45399__.d(__nested_webpack_exports__, \"ButtonGroupItem\", function() { return ButtonGroupItem; });\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_45399__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_45399__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__nested_webpack_require_45399__.n(vue__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_45399__(/*! survey-core */ \"./src/entries/core.ts\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_45399__(/*! ./base */ \"./src/vue/base.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\nvar ButtonGroupItem = /** @class */ (function (_super) {\n    __extends(ButtonGroupItem, _super);\n    function ButtonGroupItem(props) {\n        var _this = _super.call(this, props) || this;\n        _this.model = new survey_core__WEBPACK_IMPORTED_MODULE_2__[\"ButtonGroupItemModel\"](_this.question, _this.item, _this.index);\n        return _this;\n    }\n    ButtonGroupItem.prototype.getModel = function () {\n        return this.item;\n    };\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Prop\"])()\n    ], ButtonGroupItem.prototype, \"item\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Prop\"])()\n    ], ButtonGroupItem.prototype, \"question\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Prop\"])()\n    ], ButtonGroupItem.prototype, \"index\", void 0);\n    ButtonGroupItem = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Component\"]\n    ], ButtonGroupItem);\n    return ButtonGroupItem;\n}(_base__WEBPACK_IMPORTED_MODULE_3__[\"BaseVue\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_1___default.a.component(\"sv-button-group-item\", ButtonGroupItem);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (ButtonGroupItem);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/checkbox.vue?vue&type=script&lang=ts&\":\n/*!******************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/checkbox.vue?vue&type=script&lang=ts& ***!\n  \\******************************************************************************************************************************************/\n/*! exports provided: Checkbox, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_49580__) {\n\n\"use strict\";\n__nested_webpack_require_49580__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_49580__.d(__nested_webpack_exports__, \"Checkbox\", function() { return Checkbox; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_49580__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_49580__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_49580__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_49580__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar Checkbox = /** @class */ (function (_super) {\n    __extends(Checkbox, _super);\n    function Checkbox() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Checkbox = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], Checkbox);\n    return Checkbox;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-checkbox\", Checkbox);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (Checkbox);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/checkboxitem.vue?vue&type=script&lang=ts&\":\n/*!**********************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/checkboxitem.vue?vue&type=script&lang=ts& ***!\n  \\**********************************************************************************************************************************************/\n/*! exports provided: CheckboxItem, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_52916__) {\n\n\"use strict\";\n__nested_webpack_require_52916__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_52916__.d(__nested_webpack_exports__, \"CheckboxItem\", function() { return CheckboxItem; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_52916__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_52916__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_52916__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_52916__(/*! ./base */ \"./src/vue/base.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar CheckboxItem = /** @class */ (function (_super) {\n    __extends(CheckboxItem, _super);\n    function CheckboxItem() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    CheckboxItem.prototype.getModel = function () {\n        return this.item;\n    };\n    Object.defineProperty(CheckboxItem.prototype, \"isAllSelected\", {\n        get: function () {\n            return this.question.isAllSelected || \"\";\n        },\n        set: function (val) {\n            this.question.isAllSelected = val;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], CheckboxItem.prototype, \"question\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], CheckboxItem.prototype, \"item\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], CheckboxItem.prototype, \"index\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], CheckboxItem.prototype, \"hideLabel\", void 0);\n    CheckboxItem = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], CheckboxItem);\n    return CheckboxItem;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"BaseVue\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-checkbox-item\", CheckboxItem);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (CheckboxItem);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/comment.vue?vue&type=script&lang=ts&\":\n/*!*****************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/comment.vue?vue&type=script&lang=ts& ***!\n  \\*****************************************************************************************************************************************/\n/*! exports provided: Comment, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_57234__) {\n\n\"use strict\";\n__nested_webpack_require_57234__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_57234__.d(__nested_webpack_exports__, \"Comment\", function() { return Comment; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_57234__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_57234__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_57234__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_57234__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar Comment = /** @class */ (function (_super) {\n    __extends(Comment, _super);\n    function Comment() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Comment.prototype.change = function (event) {\n        this.question.value = event.target.value;\n    };\n    Comment = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], Comment);\n    return Comment;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-comment\", Comment);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (Comment);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action-bar-item-dropdown.vue?vue&type=script&lang=ts&\":\n/*!********************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/action-bar/action-bar-item-dropdown.vue?vue&type=script&lang=ts& ***!\n  \\********************************************************************************************************************************************************************************/\n/*! exports provided: ActionBarItemDropdownViewModel, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_60820__) {\n\n\"use strict\";\n__nested_webpack_require_60820__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_60820__.d(__nested_webpack_exports__, \"ActionBarItemDropdownViewModel\", function() { return ActionBarItemDropdownViewModel; });\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_60820__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_60820__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__nested_webpack_require_60820__.n(vue__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _action_bar_item_vue__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_60820__(/*! ./action-bar-item.vue */ \"./src/vue/components/action-bar/action-bar-item.vue\");\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_60820__(/*! survey-core */ \"./src/entries/core.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\nvar ActionBarItemDropdownViewModel = /** @class */ (function (_super) {\n    __extends(ActionBarItemDropdownViewModel, _super);\n    function ActionBarItemDropdownViewModel() {\n        var _this = _super.call(this) || this;\n        _this.getTarget = survey_core__WEBPACK_IMPORTED_MODULE_3__[\"getActionDropdownButtonTarget\"];\n        _this.viewModel = new survey_core__WEBPACK_IMPORTED_MODULE_3__[\"ActionDropdownViewModel\"](_this.item);\n        return _this;\n    }\n    ActionBarItemDropdownViewModel.prototype.onDestroyed = function () {\n        this.viewModel.dispose();\n    };\n    ActionBarItemDropdownViewModel = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Component\"]\n    ], ActionBarItemDropdownViewModel);\n    return ActionBarItemDropdownViewModel;\n}(_action_bar_item_vue__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_1___default.a.component(\"sv-action-bar-item-dropdown\", ActionBarItemDropdownViewModel);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (ActionBarItemDropdownViewModel);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action-bar-item.vue?vue&type=script&lang=ts&\":\n/*!***********************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/action-bar/action-bar-item.vue?vue&type=script&lang=ts& ***!\n  \\***********************************************************************************************************************************************************************/\n/*! exports provided: ActionBarItemViewModel, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_65017__) {\n\n\"use strict\";\n__nested_webpack_require_65017__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_65017__.d(__nested_webpack_exports__, \"ActionBarItemViewModel\", function() { return ActionBarItemViewModel; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_65017__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_65017__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_65017__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_65017__(/*! ../../base */ \"./src/vue/base.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar ActionBarItemViewModel = /** @class */ (function (_super) {\n    __extends(ActionBarItemViewModel, _super);\n    function ActionBarItemViewModel() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    ActionBarItemViewModel.prototype.getModel = function () {\n        return this.item;\n    };\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], ActionBarItemViewModel.prototype, \"item\", void 0);\n    ActionBarItemViewModel = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], ActionBarItemViewModel);\n    return ActionBarItemViewModel;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-action-bar-item\", ActionBarItemViewModel);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (ActionBarItemViewModel);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action-bar-separator.vue?vue&type=script&lang=ts&\":\n/*!****************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/action-bar/action-bar-separator.vue?vue&type=script&lang=ts& ***!\n  \\****************************************************************************************************************************************************************************/\n/*! exports provided: ActionBarSeparatorViewModel, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_68867__) {\n\n\"use strict\";\n__nested_webpack_require_68867__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_68867__.d(__nested_webpack_exports__, \"ActionBarSeparatorViewModel\", function() { return ActionBarSeparatorViewModel; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_68867__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_68867__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_68867__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar ActionBarSeparatorViewModel = /** @class */ (function (_super) {\n    __extends(ActionBarSeparatorViewModel, _super);\n    function ActionBarSeparatorViewModel() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Object.defineProperty(ActionBarSeparatorViewModel.prototype, \"innerCss\", {\n        get: function () {\n            return this.item && this.item.innerCss;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], ActionBarSeparatorViewModel.prototype, \"item\", void 0);\n    ActionBarSeparatorViewModel = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], ActionBarSeparatorViewModel);\n    return ActionBarSeparatorViewModel;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-action-bar-separator\", ActionBarSeparatorViewModel);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (ActionBarSeparatorViewModel);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action-bar.vue?vue&type=script&lang=ts&\":\n/*!******************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/action-bar/action-bar.vue?vue&type=script&lang=ts& ***!\n  \\******************************************************************************************************************************************************************/\n/*! exports provided: ActionViewModel, ActionBarItemViewModel, ActionBarItemDropdownViewModel, ActionBarSeparatorViewModel, ActionBarViewModel, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_72840__) {\n\n\"use strict\";\n__nested_webpack_require_72840__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_72840__.d(__nested_webpack_exports__, \"ActionBarViewModel\", function() { return ActionBarViewModel; });\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_72840__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_72840__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__nested_webpack_require_72840__.n(vue__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_72840__(/*! ../../base */ \"./src/vue/base.ts\");\n/* harmony import */ var _action_vue__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_72840__(/*! ./action.vue */ \"./src/vue/components/action-bar/action.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_72840__.d(__nested_webpack_exports__, \"ActionViewModel\", function() { return _action_vue__WEBPACK_IMPORTED_MODULE_3__[\"ActionViewModel\"]; });\n\n/* harmony import */ var _action_bar_item_vue__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_72840__(/*! ./action-bar-item.vue */ \"./src/vue/components/action-bar/action-bar-item.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_72840__.d(__nested_webpack_exports__, \"ActionBarItemViewModel\", function() { return _action_bar_item_vue__WEBPACK_IMPORTED_MODULE_4__[\"ActionBarItemViewModel\"]; });\n\n/* harmony import */ var _action_bar_item_dropdown_vue__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_72840__(/*! ./action-bar-item-dropdown.vue */ \"./src/vue/components/action-bar/action-bar-item-dropdown.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_72840__.d(__nested_webpack_exports__, \"ActionBarItemDropdownViewModel\", function() { return _action_bar_item_dropdown_vue__WEBPACK_IMPORTED_MODULE_5__[\"ActionBarItemDropdownViewModel\"]; });\n\n/* harmony import */ var _action_bar_separator_vue__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_72840__(/*! ./action-bar-separator.vue */ \"./src/vue/components/action-bar/action-bar-separator.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_72840__.d(__nested_webpack_exports__, \"ActionBarSeparatorViewModel\", function() { return _action_bar_separator_vue__WEBPACK_IMPORTED_MODULE_6__[\"ActionBarSeparatorViewModel\"]; });\n\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\n\n\nvar ActionBarViewModel = /** @class */ (function (_super) {\n    __extends(ActionBarViewModel, _super);\n    function ActionBarViewModel(props) {\n        return _super.call(this, props) || this;\n    }\n    ActionBarViewModel.prototype.getModel = function () {\n        return this.model;\n    };\n    ActionBarViewModel.prototype.mounted = function () {\n        if (!this.model.hasActions)\n            return;\n        var container = this.$el;\n        this.model.initResponsivityManager(container);\n    };\n    ActionBarViewModel.prototype.beforeDestroy = function () {\n        this.model.resetResponsivityManager();\n    };\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Prop\"])()\n    ], ActionBarViewModel.prototype, \"model\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Prop\"])()\n    ], ActionBarViewModel.prototype, \"container\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Prop\"])()\n    ], ActionBarViewModel.prototype, \"handleClick\", void 0);\n    ActionBarViewModel = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Component\"]\n    ], ActionBarViewModel);\n    return ActionBarViewModel;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"BaseVue\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_1___default.a.component(\"sv-action-bar\", ActionBarViewModel);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (ActionBarViewModel);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action.vue?vue&type=script&lang=ts&\":\n/*!**************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/action-bar/action.vue?vue&type=script&lang=ts& ***!\n  \\**************************************************************************************************************************************************************/\n/*! exports provided: ActionViewModel, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_78756__) {\n\n\"use strict\";\n__nested_webpack_require_78756__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_78756__.d(__nested_webpack_exports__, \"ActionViewModel\", function() { return ActionViewModel; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_78756__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_78756__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_78756__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_78756__(/*! ../../base */ \"./src/vue/base.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar ActionViewModel = /** @class */ (function (_super) {\n    __extends(ActionViewModel, _super);\n    function ActionViewModel(props) {\n        return _super.call(this, props) || this;\n    }\n    ActionViewModel.prototype.getModel = function () {\n        return this.item;\n    };\n    ActionViewModel.prototype.getComponentName = function () {\n        return this.item.component || \"sv-action-bar-item\";\n    };\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], ActionViewModel.prototype, \"item\", void 0);\n    ActionViewModel = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], ActionViewModel);\n    return ActionViewModel;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-action\", ActionViewModel);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (ActionViewModel);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/brand-info.vue?vue&type=script&lang=ts&\":\n/*!*******************************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/brand-info.vue?vue&type=script&lang=ts& ***!\n  \\*******************************************************************************************************************************************************/\n/*! exports provided: BrandInfo, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_82522__) {\n\n\"use strict\";\n__nested_webpack_require_82522__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_82522__.d(__nested_webpack_exports__, \"BrandInfo\", function() { return BrandInfo; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_82522__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_82522__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_82522__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar BrandInfo = /** @class */ (function (_super) {\n    __extends(BrandInfo, _super);\n    function BrandInfo() {\n        return _super.call(this) || this;\n    }\n    BrandInfo = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], BrandInfo);\n    return BrandInfo;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-brand-info\", BrandInfo);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (BrandInfo);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/character-counter.vue?vue&type=script&lang=ts&\":\n/*!**************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/character-counter.vue?vue&type=script&lang=ts& ***!\n  \\**************************************************************************************************************************************************************/\n/*! exports provided: CharacterCounterComponent, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_85774__) {\n\n\"use strict\";\n__nested_webpack_require_85774__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_85774__.d(__nested_webpack_exports__, \"CharacterCounterComponent\", function() { return CharacterCounterComponent; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_85774__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_85774__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_85774__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_85774__(/*! ../base */ \"./src/vue/base.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar CharacterCounterComponent = /** @class */ (function (_super) {\n    __extends(CharacterCounterComponent, _super);\n    function CharacterCounterComponent() {\n        return _super.call(this) || this;\n    }\n    CharacterCounterComponent.prototype.getModel = function () {\n        return this.counter;\n    };\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], CharacterCounterComponent.prototype, \"counter\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], CharacterCounterComponent.prototype, \"remainingCharacterCounter\", void 0);\n    CharacterCounterComponent = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], CharacterCounterComponent);\n    return CharacterCounterComponent;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"BaseVue\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-character-counter\", CharacterCounterComponent);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (CharacterCounterComponent);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/container.vue?vue&type=script&lang=ts&\":\n/*!******************************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/container.vue?vue&type=script&lang=ts& ***!\n  \\******************************************************************************************************************************************************/\n/*! exports provided: ComponentsContainer, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_89715__) {\n\n\"use strict\";\n__nested_webpack_require_89715__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_89715__.d(__nested_webpack_exports__, \"ComponentsContainer\", function() { return ComponentsContainer; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_89715__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_89715__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_89715__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_89715__(/*! ../base */ \"./src/vue/base.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar ComponentsContainer = /** @class */ (function (_super) {\n    __extends(ComponentsContainer, _super);\n    function ComponentsContainer() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Object.defineProperty(ComponentsContainer.prototype, \"components\", {\n        get: function () {\n            return this.survey.getContainerContent(this.container);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], ComponentsContainer.prototype, \"survey\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], ComponentsContainer.prototype, \"container\", void 0);\n    ComponentsContainer = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], ComponentsContainer);\n    return ComponentsContainer;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"BaseVue\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-components-container\", ComponentsContainer);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (ComponentsContainer);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/cover/cover-cell.vue?vue&type=script&lang=ts&\":\n/*!*************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/cover/cover-cell.vue?vue&type=script&lang=ts& ***!\n  \\*************************************************************************************************************************************************************/\n/*! exports provided: CoverCellViewModel, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_93768__) {\n\n\"use strict\";\n__nested_webpack_require_93768__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_93768__.d(__nested_webpack_exports__, \"CoverCellViewModel\", function() { return CoverCellViewModel; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_93768__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_93768__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_93768__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar CoverCellViewModel = /** @class */ (function (_super) {\n    __extends(CoverCellViewModel, _super);\n    function CoverCellViewModel(props) {\n        return _super.call(this, props) || this;\n    }\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], CoverCellViewModel.prototype, \"model\", void 0);\n    CoverCellViewModel = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], CoverCellViewModel);\n    return CoverCellViewModel;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-cover-cell\", CoverCellViewModel);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (CoverCellViewModel);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/cover/cover.vue?vue&type=script&lang=ts&\":\n/*!********************************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/cover/cover.vue?vue&type=script&lang=ts& ***!\n  \\********************************************************************************************************************************************************/\n/*! exports provided: CoverCellViewModel, CoverViewModel, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_97257__) {\n\n\"use strict\";\n__nested_webpack_require_97257__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_97257__.d(__nested_webpack_exports__, \"CoverViewModel\", function() { return CoverViewModel; });\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_97257__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_97257__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__nested_webpack_require_97257__.n(vue__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_97257__(/*! ../../base */ \"./src/vue/base.ts\");\n/* harmony import */ var _cover_cell_vue__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_97257__(/*! ./cover-cell.vue */ \"./src/vue/components/cover/cover-cell.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_97257__.d(__nested_webpack_exports__, \"CoverCellViewModel\", function() { return _cover_cell_vue__WEBPACK_IMPORTED_MODULE_3__[\"CoverCellViewModel\"]; });\n\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\nvar CoverViewModel = /** @class */ (function (_super) {\n    __extends(CoverViewModel, _super);\n    function CoverViewModel(props) {\n        return _super.call(this, props) || this;\n    }\n    CoverViewModel.prototype.getModel = function () {\n        this.model.survey = this.survey;\n        return this.model;\n    };\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Prop\"])()\n    ], CoverViewModel.prototype, \"model\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Prop\"])()\n    ], CoverViewModel.prototype, \"survey\", void 0);\n    CoverViewModel = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Component\"]\n    ], CoverViewModel);\n    return CoverViewModel;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"BaseVue\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_1___default.a.component(\"sv-cover\", CoverViewModel);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (CoverViewModel);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/dropdown/dropdown.vue?vue&type=script&lang=ts&\":\n/*!**************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/dropdown/dropdown.vue?vue&type=script&lang=ts& ***!\n  \\**************************************************************************************************************************************************************/\n/*! exports provided: DropdownComponent, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_101457__) {\n\n\"use strict\";\n__nested_webpack_require_101457__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_101457__.d(__nested_webpack_exports__, \"DropdownComponent\", function() { return DropdownComponent; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_101457__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_101457__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_101457__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_101457__(/*! survey-core */ \"./src/entries/core.ts\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_101457__(/*! ../../base */ \"./src/vue/base.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\nvar DropdownComponent = /** @class */ (function (_super) {\n    __extends(DropdownComponent, _super);\n    function DropdownComponent() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Object.defineProperty(DropdownComponent.prototype, \"model\", {\n        get: function () {\n            return this.question.dropdownListModel;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    DropdownComponent.prototype.getModel = function () {\n        if (!this.question.dropdownListModel) {\n            this.question.dropdownListModel = new survey_core__WEBPACK_IMPORTED_MODULE_2__[\"DropdownListModel\"](this.question);\n        }\n        return this.model;\n    };\n    DropdownComponent.prototype.inputChange = function (event) {\n        this.model.inputStringRendered = event.target.value;\n    };\n    DropdownComponent.prototype.click = function (event) {\n        var _a;\n        (_a = this.model) === null || _a === void 0 ? void 0 : _a.onClick(event);\n    };\n    DropdownComponent.prototype.clear = function (event) {\n        var _a;\n        (_a = this.model) === null || _a === void 0 ? void 0 : _a.onClear(event);\n    };\n    DropdownComponent.prototype.keyhandler = function (event) {\n        var _a;\n        (_a = this.model) === null || _a === void 0 ? void 0 : _a.keyHandler(event);\n    };\n    DropdownComponent.prototype.blur = function (event) {\n        var _a;\n        (_a = this.model) === null || _a === void 0 ? void 0 : _a.onBlur(event);\n        this.updateInputDomElement();\n    };\n    DropdownComponent.prototype.focus = function (event) {\n        var _a;\n        (_a = this.model) === null || _a === void 0 ? void 0 : _a.onFocus(event);\n    };\n    DropdownComponent.prototype.onMounted = function () {\n        this.inputElement = this.$refs[\"inputElement\"];\n        this.updateInputDomElement();\n    };\n    DropdownComponent.prototype.onUpdated = function () {\n        this.updateInputDomElement();\n    };\n    DropdownComponent.prototype.updateInputDomElement = function () {\n        if (!!this.inputElement) {\n            var control = this.inputElement;\n            var newValue = this.model.inputStringRendered;\n            if (!survey_core__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isTwoValueEquals(newValue, control.value, false, true, false)) {\n                control.value = this.model.inputStringRendered;\n            }\n        }\n    };\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], DropdownComponent.prototype, \"question\", void 0);\n    DropdownComponent = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], DropdownComponent);\n    return DropdownComponent;\n}(_base__WEBPACK_IMPORTED_MODULE_3__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-dropdown\", DropdownComponent);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (DropdownComponent);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/dropdown/option-item.vue?vue&type=script&lang=ts&\":\n/*!*****************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/dropdown/option-item.vue?vue&type=script&lang=ts& ***!\n  \\*****************************************************************************************************************************************************************/\n/*! exports provided: DropdownComponent, DropdownOptionItem, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_107446__) {\n\n\"use strict\";\n__nested_webpack_require_107446__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_107446__.d(__nested_webpack_exports__, \"DropdownOptionItem\", function() { return DropdownOptionItem; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_107446__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_107446__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_107446__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_107446__(/*! ../../base */ \"./src/vue/base.ts\");\n/* harmony import */ var _dropdown_vue__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_107446__(/*! ./dropdown.vue */ \"./src/vue/components/dropdown/dropdown.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_107446__.d(__nested_webpack_exports__, \"DropdownComponent\", function() { return _dropdown_vue__WEBPACK_IMPORTED_MODULE_3__[\"DropdownComponent\"]; });\n\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\nvar DropdownOptionItem = /** @class */ (function (_super) {\n    __extends(DropdownOptionItem, _super);\n    function DropdownOptionItem() {\n        var _this = _super.call(this) || this;\n        if (!_this.item.locText)\n            return _this;\n        var self = _this;\n        _this.item.locText.onChanged = function () {\n            self.$forceUpdate();\n        };\n        _this.item.locText.onChanged();\n        return _this;\n    }\n    DropdownOptionItem.prototype.getModel = function () {\n        return this.item;\n    };\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], DropdownOptionItem.prototype, \"item\", void 0);\n    DropdownOptionItem = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], DropdownOptionItem);\n    return DropdownOptionItem;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"BaseVue\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-dropdown-option-item\", DropdownOptionItem);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (DropdownOptionItem);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/file-actions/file-choose-button.vue?vue&type=script&lang=ts&\":\n/*!****************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/file-actions/file-choose-button.vue?vue&type=script&lang=ts& ***!\n  \\****************************************************************************************************************************************************************************/\n/*! exports provided: FileChooseButton, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_111804__) {\n\n\"use strict\";\n__nested_webpack_require_111804__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_111804__.d(__nested_webpack_exports__, \"FileChooseButton\", function() { return FileChooseButton; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_111804__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_111804__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_111804__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar FileChooseButton = /** @class */ (function (_super) {\n    __extends(FileChooseButton, _super);\n    function FileChooseButton() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Object.defineProperty(FileChooseButton.prototype, \"question\", {\n        get: function () {\n            return (this.item && this.item.data.question) || this.data.question;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], FileChooseButton.prototype, \"data\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], FileChooseButton.prototype, \"item\", void 0);\n    FileChooseButton = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], FileChooseButton);\n    return FileChooseButton;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-file-choose-btn\", FileChooseButton);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (FileChooseButton);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/list/list-item.vue?vue&type=script&lang=ts&\":\n/*!***********************************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/list/list-item.vue?vue&type=script&lang=ts& ***!\n  \\***********************************************************************************************************************************************************/\n/*! exports provided: List, ListItem, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_115682__) {\n\n\"use strict\";\n__nested_webpack_require_115682__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_115682__.d(__nested_webpack_exports__, \"ListItem\", function() { return ListItem; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_115682__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_115682__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_115682__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_115682__(/*! ../../base */ \"./src/vue/base.ts\");\n/* harmony import */ var _list_vue__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_115682__(/*! ./list.vue */ \"./src/vue/components/list/list.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_115682__.d(__nested_webpack_exports__, \"List\", function() { return _list_vue__WEBPACK_IMPORTED_MODULE_3__[\"List\"]; });\n\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\nvar ListItem = /** @class */ (function (_super) {\n    __extends(ListItem, _super);\n    function ListItem() {\n        return _super.call(this) || this;\n    }\n    ListItem.prototype.getModel = function () {\n        return this.item;\n    };\n    Object.defineProperty(ListItem.prototype, \"elementId\", {\n        get: function () {\n            var _a;\n            return (_a = this.item) === null || _a === void 0 ? void 0 : _a.elementId;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    ListItem.prototype.click = function (event) {\n        this.model.onItemClick(this.item);\n        event.stopPropagation();\n    };\n    ListItem.prototype.onMounted = function () {\n        this.model.onLastItemRended(this.item);\n    };\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], ListItem.prototype, \"item\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], ListItem.prototype, \"model\", void 0);\n    ListItem = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], ListItem);\n    return ListItem;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"BaseVue\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-list-item\", ListItem);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (ListItem);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/list/list.vue?vue&type=script&lang=ts&\":\n/*!******************************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/list/list.vue?vue&type=script&lang=ts& ***!\n  \\******************************************************************************************************************************************************/\n/*! exports provided: ListItem, List, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_120169__) {\n\n\"use strict\";\n__nested_webpack_require_120169__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_120169__.d(__nested_webpack_exports__, \"List\", function() { return List; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_120169__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_120169__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_120169__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_120169__(/*! ../../base */ \"./src/vue/base.ts\");\n/* harmony import */ var _list_item_vue__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_120169__(/*! ./list-item.vue */ \"./src/vue/components/list/list-item.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_120169__.d(__nested_webpack_exports__, \"ListItem\", function() { return _list_item_vue__WEBPACK_IMPORTED_MODULE_3__[\"ListItem\"]; });\n\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\nvar List = /** @class */ (function (_super) {\n    __extends(List, _super);\n    function List() {\n        return _super.call(this) || this;\n    }\n    List.prototype.getModel = function () {\n        return this.model;\n    };\n    List.prototype.change = function (event) {\n        this.model.filterString = event.target.value;\n    };\n    List.prototype.keyup = function (event) {\n        this.model.filterString = event.target.value;\n        this.model.goToItems(event);\n    };\n    List.prototype.mouseMove = function (event) {\n        this.model.onMouseMove(event);\n    };\n    List.prototype.onMounted = function () {\n        var listContainerElement = this.$refs[\"listContainerElement\"];\n        this.model.initListContainerHtmlElement(listContainerElement);\n    };\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], List.prototype, \"model\", void 0);\n    List = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], List);\n    return List;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"BaseVue\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-list\", List);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (List);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/loading-indicator.vue?vue&type=script&lang=ts&\":\n/*!**************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/loading-indicator.vue?vue&type=script&lang=ts& ***!\n  \\**************************************************************************************************************************************************************/\n/*! exports provided: LoadingIndicatorComponent, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_124573__) {\n\n\"use strict\";\n__nested_webpack_require_124573__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_124573__.d(__nested_webpack_exports__, \"LoadingIndicatorComponent\", function() { return LoadingIndicatorComponent; });\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_124573__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_124573__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__nested_webpack_require_124573__.n(vue__WEBPACK_IMPORTED_MODULE_1__);\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar LoadingIndicatorComponent = /** @class */ (function (_super) {\n    __extends(LoadingIndicatorComponent, _super);\n    function LoadingIndicatorComponent() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    LoadingIndicatorComponent = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Component\"]\n    ], LoadingIndicatorComponent);\n    return LoadingIndicatorComponent;\n}(vue__WEBPACK_IMPORTED_MODULE_1___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_1___default.a.component(\"sv-loading-indicator\", LoadingIndicatorComponent);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (LoadingIndicatorComponent);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/matrix-actions/detail-button/detail-button.vue?vue&type=script&lang=ts&\":\n/*!***************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/matrix-actions/detail-button/detail-button.vue?vue&type=script&lang=ts& ***!\n  \\***************************************************************************************************************************************************************************************/\n/*! exports provided: SurveyQuestionMatrixDetailButton, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_128130__) {\n\n\"use strict\";\n__nested_webpack_require_128130__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_128130__.d(__nested_webpack_exports__, \"SurveyQuestionMatrixDetailButton\", function() { return SurveyQuestionMatrixDetailButton; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_128130__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_128130__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_128130__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_128130__(/*! ../../../base */ \"./src/vue/base.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar SurveyQuestionMatrixDetailButton = /** @class */ (function (_super) {\n    __extends(SurveyQuestionMatrixDetailButton, _super);\n    function SurveyQuestionMatrixDetailButton() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Object.defineProperty(SurveyQuestionMatrixDetailButton.prototype, \"question\", {\n        get: function () {\n            return this.item.data.question;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyQuestionMatrixDetailButton.prototype, \"row\", {\n        get: function () {\n            return this.item.data.row;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyQuestionMatrixDetailButton.prototype.getModel = function () {\n        return this.item;\n    };\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], SurveyQuestionMatrixDetailButton.prototype, \"item\", void 0);\n    SurveyQuestionMatrixDetailButton = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], SurveyQuestionMatrixDetailButton);\n    return SurveyQuestionMatrixDetailButton;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-matrix-detail-button\", SurveyQuestionMatrixDetailButton);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (SurveyQuestionMatrixDetailButton);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/matrix-actions/drag-drop-icon/drag-drop-icon.vue?vue&type=script&lang=ts&\":\n/*!*****************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/matrix-actions/drag-drop-icon/drag-drop-icon.vue?vue&type=script&lang=ts& ***!\n  \\*****************************************************************************************************************************************************************************************/\n/*! exports provided: SurveyQuestionMatrixDynamicDragDropIcon, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_132618__) {\n\n\"use strict\";\n__nested_webpack_require_132618__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_132618__.d(__nested_webpack_exports__, \"SurveyQuestionMatrixDynamicDragDropIcon\", function() { return SurveyQuestionMatrixDynamicDragDropIcon; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_132618__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_132618__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_132618__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_132618__(/*! ../../../base */ \"./src/vue/base.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar SurveyQuestionMatrixDynamicDragDropIcon = /** @class */ (function (_super) {\n    __extends(SurveyQuestionMatrixDynamicDragDropIcon, _super);\n    function SurveyQuestionMatrixDynamicDragDropIcon() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Object.defineProperty(SurveyQuestionMatrixDynamicDragDropIcon.prototype, \"question\", {\n        get: function () {\n            return this.item.data.question;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyQuestionMatrixDynamicDragDropIcon.prototype.getModel = function () {\n        return this.item;\n    };\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], SurveyQuestionMatrixDynamicDragDropIcon.prototype, \"item\", void 0);\n    SurveyQuestionMatrixDynamicDragDropIcon = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], SurveyQuestionMatrixDynamicDragDropIcon);\n    return SurveyQuestionMatrixDynamicDragDropIcon;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-matrix-drag-drop-icon\", SurveyQuestionMatrixDynamicDragDropIcon);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (SurveyQuestionMatrixDynamicDragDropIcon);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/matrix-actions/remove-button/remove-button.vue?vue&type=script&lang=ts&\":\n/*!***************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/matrix-actions/remove-button/remove-button.vue?vue&type=script&lang=ts& ***!\n  \\***************************************************************************************************************************************************************************************/\n/*! exports provided: SurveyQuestionMatrixDynamicRemoveButton, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_136972__) {\n\n\"use strict\";\n__nested_webpack_require_136972__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_136972__.d(__nested_webpack_exports__, \"SurveyQuestionMatrixDynamicRemoveButton\", function() { return SurveyQuestionMatrixDynamicRemoveButton; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_136972__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_136972__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_136972__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_136972__(/*! ../../../base */ \"./src/vue/base.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar SurveyQuestionMatrixDynamicRemoveButton = /** @class */ (function (_super) {\n    __extends(SurveyQuestionMatrixDynamicRemoveButton, _super);\n    function SurveyQuestionMatrixDynamicRemoveButton() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Object.defineProperty(SurveyQuestionMatrixDynamicRemoveButton.prototype, \"question\", {\n        get: function () {\n            return this.item.data.question;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyQuestionMatrixDynamicRemoveButton.prototype, \"row\", {\n        get: function () {\n            return this.item.data.row;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyQuestionMatrixDynamicRemoveButton.prototype.getModel = function () {\n        return this.item;\n    };\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], SurveyQuestionMatrixDynamicRemoveButton.prototype, \"item\", void 0);\n    SurveyQuestionMatrixDynamicRemoveButton = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], SurveyQuestionMatrixDynamicRemoveButton);\n    return SurveyQuestionMatrixDynamicRemoveButton;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-matrix-remove-button\", SurveyQuestionMatrixDynamicRemoveButton);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (SurveyQuestionMatrixDynamicRemoveButton);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/notifier.vue?vue&type=script&lang=ts&\":\n/*!*****************************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/notifier.vue?vue&type=script&lang=ts& ***!\n  \\*****************************************************************************************************************************************************/\n/*! exports provided: NotifierComponent, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_141392__) {\n\n\"use strict\";\n__nested_webpack_require_141392__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_141392__.d(__nested_webpack_exports__, \"NotifierComponent\", function() { return NotifierComponent; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_141392__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_141392__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_141392__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_141392__(/*! ../base */ \"./src/vue/base.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar NotifierComponent = /** @class */ (function (_super) {\n    __extends(NotifierComponent, _super);\n    function NotifierComponent() {\n        return _super.call(this) || this;\n    }\n    NotifierComponent.prototype.getModel = function () {\n        return this.model;\n    };\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], NotifierComponent.prototype, \"model\", void 0);\n    NotifierComponent = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], NotifierComponent);\n    return NotifierComponent;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"BaseVue\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-notifier\", NotifierComponent);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (NotifierComponent);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/paneldynamic-actions/paneldynamic-add-btn.vue?vue&type=script&lang=ts&\":\n/*!**************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/paneldynamic-actions/paneldynamic-add-btn.vue?vue&type=script&lang=ts& ***!\n  \\**************************************************************************************************************************************************************************************/\n/*! exports provided: PaneldynamicAction, PanelDynamicAddBtn, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_145194__) {\n\n\"use strict\";\n__nested_webpack_require_145194__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_145194__.d(__nested_webpack_exports__, \"PaneldynamicAction\", function() { return PaneldynamicAction; });\n/* harmony export (binding) */ __nested_webpack_require_145194__.d(__nested_webpack_exports__, \"PanelDynamicAddBtn\", function() { return PanelDynamicAddBtn; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_145194__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_145194__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_145194__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar PaneldynamicAction = /** @class */ (function (_super) {\n    __extends(PaneldynamicAction, _super);\n    function PaneldynamicAction() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Object.defineProperty(PaneldynamicAction.prototype, \"question\", {\n        get: function () {\n            return (this.item && this.item.data.question) || this.data.question;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], PaneldynamicAction.prototype, \"data\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], PaneldynamicAction.prototype, \"item\", void 0);\n    return PaneldynamicAction;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvar PanelDynamicAddBtn = /** @class */ (function (_super) {\n    __extends(PanelDynamicAddBtn, _super);\n    function PanelDynamicAddBtn() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    PanelDynamicAddBtn.prototype.addPanelClick = function () {\n        this.question.addPanelUI();\n    };\n    PanelDynamicAddBtn = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], PanelDynamicAddBtn);\n    return PanelDynamicAddBtn;\n}(PaneldynamicAction));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-paneldynamic-add-btn\", PanelDynamicAddBtn);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (PanelDynamicAddBtn);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/paneldynamic-actions/paneldynamic-next-btn.vue?vue&type=script&lang=ts&\":\n/*!***************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/paneldynamic-actions/paneldynamic-next-btn.vue?vue&type=script&lang=ts& ***!\n  \\***************************************************************************************************************************************************************************************/\n/*! exports provided: PanelDynamicNextBtn, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_149740__) {\n\n\"use strict\";\n__nested_webpack_require_149740__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_149740__.d(__nested_webpack_exports__, \"PanelDynamicNextBtn\", function() { return PanelDynamicNextBtn; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_149740__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_149740__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_149740__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _paneldynamic_add_btn_vue__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_149740__(/*! ./paneldynamic-add-btn.vue */ \"./src/vue/components/paneldynamic-actions/paneldynamic-add-btn.vue\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar PanelDynamicNextBtn = /** @class */ (function (_super) {\n    __extends(PanelDynamicNextBtn, _super);\n    function PanelDynamicNextBtn() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    PanelDynamicNextBtn.prototype.nextPanelClick = function () {\n        this.question.goToNextPanel();\n    };\n    PanelDynamicNextBtn = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], PanelDynamicNextBtn);\n    return PanelDynamicNextBtn;\n}(_paneldynamic_add_btn_vue__WEBPACK_IMPORTED_MODULE_2__[\"PaneldynamicAction\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-paneldynamic-next-btn\", PanelDynamicNextBtn);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (PanelDynamicNextBtn);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/paneldynamic-actions/paneldynamic-prev-btn.vue?vue&type=script&lang=ts&\":\n/*!***************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/paneldynamic-actions/paneldynamic-prev-btn.vue?vue&type=script&lang=ts& ***!\n  \\***************************************************************************************************************************************************************************************/\n/*! exports provided: PanelDynamicPrevBtn, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_153581__) {\n\n\"use strict\";\n__nested_webpack_require_153581__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_153581__.d(__nested_webpack_exports__, \"PanelDynamicPrevBtn\", function() { return PanelDynamicPrevBtn; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_153581__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_153581__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_153581__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _paneldynamic_add_btn_vue__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_153581__(/*! ./paneldynamic-add-btn.vue */ \"./src/vue/components/paneldynamic-actions/paneldynamic-add-btn.vue\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar PanelDynamicPrevBtn = /** @class */ (function (_super) {\n    __extends(PanelDynamicPrevBtn, _super);\n    function PanelDynamicPrevBtn() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    PanelDynamicPrevBtn.prototype.prevPanelClick = function () {\n        this.question.goToPrevPanel();\n    };\n    PanelDynamicPrevBtn = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], PanelDynamicPrevBtn);\n    return PanelDynamicPrevBtn;\n}(_paneldynamic_add_btn_vue__WEBPACK_IMPORTED_MODULE_2__[\"PaneldynamicAction\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-paneldynamic-prev-btn\", PanelDynamicPrevBtn);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (PanelDynamicPrevBtn);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/paneldynamic-actions/paneldynamic-progress-text.vue?vue&type=script&lang=ts&\":\n/*!********************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/paneldynamic-actions/paneldynamic-progress-text.vue?vue&type=script&lang=ts& ***!\n  \\********************************************************************************************************************************************************************************************/\n/*! exports provided: PanelDynamicProgressText, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_157447__) {\n\n\"use strict\";\n__nested_webpack_require_157447__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_157447__.d(__nested_webpack_exports__, \"PanelDynamicProgressText\", function() { return PanelDynamicProgressText; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_157447__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_157447__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_157447__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _paneldynamic_add_btn_vue__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_157447__(/*! ./paneldynamic-add-btn.vue */ \"./src/vue/components/paneldynamic-actions/paneldynamic-add-btn.vue\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar PanelDynamicProgressText = /** @class */ (function (_super) {\n    __extends(PanelDynamicProgressText, _super);\n    function PanelDynamicProgressText() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    PanelDynamicProgressText = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], PanelDynamicProgressText);\n    return PanelDynamicProgressText;\n}(_paneldynamic_add_btn_vue__WEBPACK_IMPORTED_MODULE_2__[\"PaneldynamicAction\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-paneldynamic-progress-text\", PanelDynamicProgressText);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (PanelDynamicProgressText);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/paneldynamic-actions/paneldynamic-remove-btn.vue?vue&type=script&lang=ts&\":\n/*!*****************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/paneldynamic-actions/paneldynamic-remove-btn.vue?vue&type=script&lang=ts& ***!\n  \\*****************************************************************************************************************************************************************************************/\n/*! exports provided: PanelDynamicRemoveButton, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_161245__) {\n\n\"use strict\";\n__nested_webpack_require_161245__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_161245__.d(__nested_webpack_exports__, \"PanelDynamicRemoveButton\", function() { return PanelDynamicRemoveButton; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_161245__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_161245__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_161245__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _paneldynamic_add_btn_vue__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_161245__(/*! ./paneldynamic-add-btn.vue */ \"./src/vue/components/paneldynamic-actions/paneldynamic-add-btn.vue\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar PanelDynamicRemoveButton = /** @class */ (function (_super) {\n    __extends(PanelDynamicRemoveButton, _super);\n    function PanelDynamicRemoveButton() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Object.defineProperty(PanelDynamicRemoveButton.prototype, \"panel\", {\n        get: function () {\n            return (this.item && this.item.data.panel) || this.data.panel;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    PanelDynamicRemoveButton.prototype.removePanelClick = function (panel) {\n        if (!this.question.isInputReadOnly) {\n            this.question.removePanelUI(panel);\n        }\n    };\n    PanelDynamicRemoveButton = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], PanelDynamicRemoveButton);\n    return PanelDynamicRemoveButton;\n}(_paneldynamic_add_btn_vue__WEBPACK_IMPORTED_MODULE_2__[\"PaneldynamicAction\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-paneldynamic-remove-btn\", PanelDynamicRemoveButton);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (PanelDynamicRemoveButton);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/popup/popup-container.vue?vue&type=script&lang=ts&\":\n/*!******************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/popup/popup-container.vue?vue&type=script&lang=ts& ***!\n  \\******************************************************************************************************************************************************************/\n/*! exports provided: PopupContainer, showModal, showDialog, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_165397__) {\n\n\"use strict\";\n__nested_webpack_require_165397__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_165397__.d(__nested_webpack_exports__, \"PopupContainer\", function() { return PopupContainer; });\n/* harmony export (binding) */ __nested_webpack_require_165397__.d(__nested_webpack_exports__, \"showModal\", function() { return showModal; });\n/* harmony export (binding) */ __nested_webpack_require_165397__.d(__nested_webpack_exports__, \"showDialog\", function() { return showDialog; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_165397__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_165397__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_165397__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_165397__(/*! survey-core */ \"./src/entries/core.ts\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_165397__(/*! ../../base */ \"./src/vue/base.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\nvar PopupContainer = /** @class */ (function (_super) {\n    __extends(PopupContainer, _super);\n    function PopupContainer() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    PopupContainer.prototype.getModel = function () {\n        return this.model;\n    };\n    PopupContainer.prototype.clickInside = function (event) {\n        event.stopPropagation();\n    };\n    PopupContainer.prototype.onUpdated = function () {\n        if (!this.prevIsVisible && this.model.isVisible) {\n            this.model.updateOnShowing();\n        }\n        this.prevIsVisible = this.model.isVisible;\n    };\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], PopupContainer.prototype, \"model\", void 0);\n    PopupContainer = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], PopupContainer);\n    return PopupContainer;\n}(_base__WEBPACK_IMPORTED_MODULE_3__[\"BaseVue\"]));\n\n// replace to showDialog then delete\nfunction showModal(componentName, data, onApply, onCancel, cssClass, title, displayMode) {\n    if (displayMode === void 0) { displayMode = \"popup\"; }\n    var options = Object(survey_core__WEBPACK_IMPORTED_MODULE_2__[\"createDialogOptions\"])(componentName, data, onApply, onCancel, undefined, undefined, cssClass, title, displayMode);\n    return showDialog(options);\n}\nfunction showDialog(dialogOptions, rootElement) {\n    dialogOptions.onHide = function () {\n        popup.$destroy();\n        popupViewModel.dispose();\n    };\n    var popupViewModel = Object(survey_core__WEBPACK_IMPORTED_MODULE_2__[\"createPopupModalViewModel\"])(dialogOptions, rootElement);\n    var popup = new PopupContainer({\n        el: popupViewModel.container.appendChild(document.createElement(\"div\")),\n        propsData: { model: popupViewModel },\n    });\n    popupViewModel.model.isVisible = true;\n    return popupViewModel;\n}\nsurvey_core__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].showModal = showModal;\nsurvey_core__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].showDialog = showDialog;\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-popup-container\", PopupContainer);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (PopupContainer);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/popup/popup-pointer.vue?vue&type=script&lang=ts&\":\n/*!****************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/popup/popup-pointer.vue?vue&type=script&lang=ts& ***!\n  \\****************************************************************************************************************************************************************/\n/*! exports provided: PopupPointer, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_170888__) {\n\n\"use strict\";\n__nested_webpack_require_170888__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_170888__.d(__nested_webpack_exports__, \"PopupPointer\", function() { return PopupPointer; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_170888__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_170888__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_170888__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_170888__(/*! ../../base */ \"./src/vue/base.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar PopupPointer = /** @class */ (function (_super) {\n    __extends(PopupPointer, _super);\n    function PopupPointer() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], PopupPointer.prototype, \"model\", void 0);\n    PopupPointer = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], PopupPointer);\n    return PopupPointer;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"BaseVue\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"popup-pointer\", PopupPointer);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (PopupPointer);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/popup/popup.vue?vue&type=script&lang=ts&\":\n/*!********************************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/popup/popup.vue?vue&type=script&lang=ts& ***!\n  \\********************************************************************************************************************************************************/\n/*! exports provided: Popup, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_174427__) {\n\n\"use strict\";\n__nested_webpack_require_174427__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_174427__.d(__nested_webpack_exports__, \"Popup\", function() { return Popup; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_174427__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_174427__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_174427__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_174427__(/*! survey-core */ \"./src/entries/core.ts\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_174427__(/*! ../../base */ \"./src/vue/base.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\nvar Popup = /** @class */ (function (_super) {\n    __extends(Popup, _super);\n    function Popup(props) {\n        var _this = _super.call(this, props) || this;\n        _this.popupViewModel = Object(survey_core__WEBPACK_IMPORTED_MODULE_2__[\"createPopupViewModel\"])(_this.model, undefined);\n        return _this;\n    }\n    Popup.prototype.getModel = function () {\n        return this.model;\n    };\n    Popup.prototype.onMounted = function () {\n        var container = this.$el;\n        this.popupViewModel.setComponentElement(container, this.getTarget ? this.getTarget(container) : undefined);\n    };\n    Popup.prototype.destroyed = function () {\n        this.popupViewModel.dispose();\n    };\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], Popup.prototype, \"model\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], Popup.prototype, \"getTarget\", void 0);\n    Popup = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], Popup);\n    return Popup;\n}(_base__WEBPACK_IMPORTED_MODULE_3__[\"BaseVue\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-popup\", Popup);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (Popup);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/rating/rating-item-smiley.vue?vue&type=script&lang=ts&\":\n/*!**********************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/rating/rating-item-smiley.vue?vue&type=script&lang=ts& ***!\n  \\**********************************************************************************************************************************************************************/\n/*! exports provided: RatingItemSmiley, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_178737__) {\n\n\"use strict\";\n__nested_webpack_require_178737__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_178737__.d(__nested_webpack_exports__, \"RatingItemSmiley\", function() { return RatingItemSmiley; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_178737__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_178737__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_178737__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_178737__(/*! ../../base */ \"./src/vue/base.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar RatingItemSmiley = /** @class */ (function (_super) {\n    __extends(RatingItemSmiley, _super);\n    function RatingItemSmiley() {\n        return _super.call(this) || this;\n    }\n    RatingItemSmiley.prototype.getModel = function () {\n        return this.item;\n    };\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], RatingItemSmiley.prototype, \"item\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], RatingItemSmiley.prototype, \"question\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], RatingItemSmiley.prototype, \"index\", void 0);\n    RatingItemSmiley = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], RatingItemSmiley);\n    return RatingItemSmiley;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"BaseVue\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-rating-item-smiley\", RatingItemSmiley);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (RatingItemSmiley);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/rating/rating-item-star.vue?vue&type=script&lang=ts&\":\n/*!********************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/rating/rating-item-star.vue?vue&type=script&lang=ts& ***!\n  \\********************************************************************************************************************************************************************/\n/*! exports provided: RatingItemStar, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_182741__) {\n\n\"use strict\";\n__nested_webpack_require_182741__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_182741__.d(__nested_webpack_exports__, \"RatingItemStar\", function() { return RatingItemStar; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_182741__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_182741__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_182741__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_182741__(/*! ../../base */ \"./src/vue/base.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar RatingItemStar = /** @class */ (function (_super) {\n    __extends(RatingItemStar, _super);\n    function RatingItemStar() {\n        return _super.call(this) || this;\n    }\n    RatingItemStar.prototype.getModel = function () {\n        return this.item;\n    };\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], RatingItemStar.prototype, \"item\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], RatingItemStar.prototype, \"question\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], RatingItemStar.prototype, \"index\", void 0);\n    RatingItemStar = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], RatingItemStar);\n    return RatingItemStar;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"BaseVue\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-rating-item-star\", RatingItemStar);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (RatingItemStar);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/rating/rating-item.vue?vue&type=script&lang=ts&\":\n/*!***************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/rating/rating-item.vue?vue&type=script&lang=ts& ***!\n  \\***************************************************************************************************************************************************************/\n/*! exports provided: RatingItem, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_186691__) {\n\n\"use strict\";\n__nested_webpack_require_186691__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_186691__.d(__nested_webpack_exports__, \"RatingItem\", function() { return RatingItem; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_186691__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_186691__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_186691__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_186691__(/*! ../../base */ \"./src/vue/base.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar RatingItem = /** @class */ (function (_super) {\n    __extends(RatingItem, _super);\n    function RatingItem() {\n        return _super.call(this) || this;\n    }\n    RatingItem.prototype.getModel = function () {\n        return this.item;\n    };\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], RatingItem.prototype, \"item\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], RatingItem.prototype, \"question\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], RatingItem.prototype, \"index\", void 0);\n    RatingItem = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], RatingItem);\n    return RatingItem;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"BaseVue\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-rating-item\", RatingItem);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (RatingItem);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/skeleton.vue?vue&type=script&lang=ts&\":\n/*!*****************************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/skeleton.vue?vue&type=script&lang=ts& ***!\n  \\*****************************************************************************************************************************************************/\n/*! exports provided: Skeleton, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_190538__) {\n\n\"use strict\";\n__nested_webpack_require_190538__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_190538__.d(__nested_webpack_exports__, \"Skeleton\", function() { return Skeleton; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_190538__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_190538__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_190538__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_190538__(/*! ../base */ \"./src/vue/base.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar Skeleton = /** @class */ (function (_super) {\n    __extends(Skeleton, _super);\n    function Skeleton() {\n        return _super.call(this) || this;\n    }\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], Skeleton.prototype, \"element\", void 0);\n    Skeleton = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], Skeleton);\n    return Skeleton;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"BaseVue\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-skeleton\", Skeleton);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (Skeleton);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/survey-actions/survey-nav-button.vue?vue&type=script&lang=ts&\":\n/*!*****************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/survey-actions/survey-nav-button.vue?vue&type=script&lang=ts& ***!\n  \\*****************************************************************************************************************************************************************************/\n/*! exports provided: SurveyNavigationButton, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_194100__) {\n\n\"use strict\";\n__nested_webpack_require_194100__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_194100__.d(__nested_webpack_exports__, \"SurveyNavigationButton\", function() { return SurveyNavigationButton; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_194100__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_194100__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_194100__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_194100__(/*! ../../base */ \"./src/vue/base.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar SurveyNavigationButton = /** @class */ (function (_super) {\n    __extends(SurveyNavigationButton, _super);\n    function SurveyNavigationButton() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    SurveyNavigationButton.prototype.getModel = function () {\n        return this.item;\n    };\n    SurveyNavigationButton.prototype.buttonMouseDown = function () {\n        return this.item.data && this.item.data.mouseDown();\n    };\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], SurveyNavigationButton.prototype, \"item\", void 0);\n    SurveyNavigationButton = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], SurveyNavigationButton);\n    return SurveyNavigationButton;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"BaseVue\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-nav-btn\", SurveyNavigationButton);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (SurveyNavigationButton);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/svg-icon/svg-icon.vue?vue&type=script&lang=ts&\":\n/*!**************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/svg-icon/svg-icon.vue?vue&type=script&lang=ts& ***!\n  \\**************************************************************************************************************************************************************/\n/*! exports provided: SvgIcon, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_198003__) {\n\n\"use strict\";\n__nested_webpack_require_198003__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_198003__.d(__nested_webpack_exports__, \"SvgIcon\", function() { return SvgIcon; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_198003__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_198003__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_198003__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_198003__(/*! survey-core */ \"./src/entries/core.ts\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_198003__(/*! ../../base */ \"./src/vue/base.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\nvar SvgIcon = /** @class */ (function (_super) {\n    __extends(SvgIcon, _super);\n    function SvgIcon() {\n        return _super.call(this) || this;\n    }\n    SvgIcon.prototype.onSizePropertyChanged = function () {\n        this.onUpdated();\n    };\n    SvgIcon.prototype.onWidthPropertyChanged = function () {\n        this.onUpdated();\n    };\n    SvgIcon.prototype.onHeightPropertyChanged = function () {\n        this.onUpdated();\n    };\n    SvgIcon.prototype.onIconNamePropertyChanged = function () {\n        this.onUpdated();\n    };\n    SvgIcon.prototype.onUpdated = function () {\n        Object(survey_core__WEBPACK_IMPORTED_MODULE_2__[\"createSvg\"])(this.size, this.width, this.height, this.iconName, this.svgIconElement, this.title);\n    };\n    SvgIcon.prototype.onMounted = function () {\n        this.svgIconElement = this.$refs[\"svgIcon\"];\n        this.onUpdated();\n    };\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], SvgIcon.prototype, \"size\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], SvgIcon.prototype, \"width\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], SvgIcon.prototype, \"height\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], SvgIcon.prototype, \"iconName\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], SvgIcon.prototype, \"title\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Watch\"])(\"size\")\n    ], SvgIcon.prototype, \"onSizePropertyChanged\", null);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Watch\"])(\"width\")\n    ], SvgIcon.prototype, \"onWidthPropertyChanged\", null);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Watch\"])(\"height\")\n    ], SvgIcon.prototype, \"onHeightPropertyChanged\", null);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Watch\"])(\"iconName\")\n    ], SvgIcon.prototype, \"onIconNamePropertyChanged\", null);\n    SvgIcon = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], SvgIcon);\n    return SvgIcon;\n}(_base__WEBPACK_IMPORTED_MODULE_3__[\"BaseVue\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-svg-icon\", SvgIcon);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (SvgIcon);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/tagbox/tagbox-filter.vue?vue&type=script&lang=ts&\":\n/*!*****************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/tagbox/tagbox-filter.vue?vue&type=script&lang=ts& ***!\n  \\*****************************************************************************************************************************************************************/\n/*! exports provided: TagboxFilterComponent, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_203576__) {\n\n\"use strict\";\n__nested_webpack_require_203576__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_203576__.d(__nested_webpack_exports__, \"TagboxFilterComponent\", function() { return TagboxFilterComponent; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_203576__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_203576__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_203576__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_203576__(/*! ../../base */ \"./src/vue/base.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar TagboxFilterComponent = /** @class */ (function (_super) {\n    __extends(TagboxFilterComponent, _super);\n    function TagboxFilterComponent() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    TagboxFilterComponent.prototype.getModel = function () {\n        return this.model;\n    };\n    TagboxFilterComponent.prototype.inputChange = function (event) {\n        this.model.inputStringRendered = event.target.value;\n    };\n    TagboxFilterComponent.prototype.inputKeyHandler = function (event) {\n        this.model.inputKeyHandler(event);\n    };\n    TagboxFilterComponent.prototype.blur = function (event) {\n        this.model.onBlur(event);\n    };\n    TagboxFilterComponent.prototype.focus = function (event) {\n        this.model.onFocus(event);\n    };\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], TagboxFilterComponent.prototype, \"model\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], TagboxFilterComponent.prototype, \"question\", void 0);\n    TagboxFilterComponent = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], TagboxFilterComponent);\n    return TagboxFilterComponent;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-tagbox-filter\", TagboxFilterComponent);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (TagboxFilterComponent);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/tagbox/tagbox-item.vue?vue&type=script&lang=ts&\":\n/*!***************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/tagbox/tagbox-item.vue?vue&type=script&lang=ts& ***!\n  \\***************************************************************************************************************************************************************/\n/*! exports provided: TagboxItem, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_207969__) {\n\n\"use strict\";\n__nested_webpack_require_207969__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_207969__.d(__nested_webpack_exports__, \"TagboxItem\", function() { return TagboxItem; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_207969__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_207969__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_207969__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_207969__(/*! ../../base */ \"./src/vue/base.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar TagboxItem = /** @class */ (function (_super) {\n    __extends(TagboxItem, _super);\n    function TagboxItem() {\n        return _super.call(this) || this;\n    }\n    TagboxItem.prototype.getModel = function () {\n        return this.item;\n    };\n    TagboxItem.prototype.removeItem = function (event) {\n        this.question.dropdownListModel.deselectItem(this.item.value);\n        event.stopPropagation();\n    };\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], TagboxItem.prototype, \"item\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], TagboxItem.prototype, \"question\", void 0);\n    TagboxItem = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], TagboxItem);\n    return TagboxItem;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"BaseVue\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-tagbox-item\", TagboxItem);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (TagboxItem);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/tagbox/tagbox.vue?vue&type=script&lang=ts&\":\n/*!**********************************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/tagbox/tagbox.vue?vue&type=script&lang=ts& ***!\n  \\**********************************************************************************************************************************************************/\n/*! exports provided: TagboxComponent, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_211869__) {\n\n\"use strict\";\n__nested_webpack_require_211869__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_211869__.d(__nested_webpack_exports__, \"TagboxComponent\", function() { return TagboxComponent; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_211869__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_211869__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_211869__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_211869__(/*! survey-core */ \"./src/entries/core.ts\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_211869__(/*! ../../base */ \"./src/vue/base.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\nvar TagboxComponent = /** @class */ (function (_super) {\n    __extends(TagboxComponent, _super);\n    function TagboxComponent() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Object.defineProperty(TagboxComponent.prototype, \"model\", {\n        get: function () {\n            return this.question.dropdownListModel;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    TagboxComponent.prototype.getModel = function () {\n        return this.model;\n    };\n    TagboxComponent.prototype.inputChange = function (event) {\n        this.model.filterString = event.target.value;\n    };\n    TagboxComponent.prototype.click = function (event) {\n        var _a;\n        (_a = this.question.dropdownListModel) === null || _a === void 0 ? void 0 : _a.onClick(event);\n    };\n    TagboxComponent.prototype.clear = function (event) {\n        var _a;\n        (_a = this.question.dropdownListModel) === null || _a === void 0 ? void 0 : _a.onClear(event);\n    };\n    TagboxComponent.prototype.keyhandler = function (event) {\n        var _a;\n        (_a = this.question.dropdownListModel) === null || _a === void 0 ? void 0 : _a.keyHandler(event);\n    };\n    TagboxComponent.prototype.blur = function (event) {\n        var _a;\n        (_a = this.question.dropdownListModel) === null || _a === void 0 ? void 0 : _a.onBlur(event);\n    };\n    TagboxComponent.prototype.onCreated = function () {\n        if (!this.question.dropdownListModel) {\n            this.question.dropdownListModel = new survey_core__WEBPACK_IMPORTED_MODULE_2__[\"DropdownMultiSelectListModel\"](this.question);\n        }\n    };\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], TagboxComponent.prototype, \"question\", void 0);\n    TagboxComponent = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], TagboxComponent);\n    return TagboxComponent;\n}(_base__WEBPACK_IMPORTED_MODULE_3__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-tagbox\", TagboxComponent);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (TagboxComponent);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/title/title-actions.vue?vue&type=script&lang=ts&\":\n/*!****************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/title/title-actions.vue?vue&type=script&lang=ts& ***!\n  \\****************************************************************************************************************************************************************/\n/*! exports provided: TitleActions, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_217040__) {\n\n\"use strict\";\n__nested_webpack_require_217040__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_217040__.d(__nested_webpack_exports__, \"TitleActions\", function() { return TitleActions; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_217040__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_217040__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_217040__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_217040__(/*! survey-core */ \"./src/entries/core.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar TitleActions = /** @class */ (function (_super) {\n    __extends(TitleActions, _super);\n    function TitleActions() {\n        return _super.call(this) || this;\n    }\n    Object.defineProperty(TitleActions.prototype, \"toolbar\", {\n        get: function () {\n            return this.element.getTitleToolbar();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], TitleActions.prototype, \"element\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], TitleActions.prototype, \"css\", void 0);\n    TitleActions = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], TitleActions);\n    return TitleActions;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nsurvey_core__WEBPACK_IMPORTED_MODULE_2__[\"RendererFactory\"].Instance.registerRenderer(\"element\", \"title-actions\", \"sv-title-actions\");\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-title-actions\", TitleActions);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (TitleActions);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/title/title-content.vue?vue&type=script&lang=ts&\":\n/*!****************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/title/title-content.vue?vue&type=script&lang=ts& ***!\n  \\****************************************************************************************************************************************************************/\n/*! exports provided: TitleContent, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_221091__) {\n\n\"use strict\";\n__nested_webpack_require_221091__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_221091__.d(__nested_webpack_exports__, \"TitleContent\", function() { return TitleContent; });\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_221091__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_221091__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__nested_webpack_require_221091__.n(vue__WEBPACK_IMPORTED_MODULE_1__);\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar TitleContent = /** @class */ (function (_super) {\n    __extends(TitleContent, _super);\n    function TitleContent() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Prop\"])()\n    ], TitleContent.prototype, \"element\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Prop\"])()\n    ], TitleContent.prototype, \"css\", void 0);\n    TitleContent = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Component\"]\n    ], TitleContent);\n    return TitleContent;\n}(vue__WEBPACK_IMPORTED_MODULE_1___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_1___default.a.component(\"survey-element-title-content\", TitleContent);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (TitleContent);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/title/title-element.vue?vue&type=script&lang=ts&\":\n/*!****************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/title/title-element.vue?vue&type=script&lang=ts& ***!\n  \\****************************************************************************************************************************************************************/\n/*! exports provided: TitleElement, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_224702__) {\n\n\"use strict\";\n__nested_webpack_require_224702__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_224702__.d(__nested_webpack_exports__, \"TitleElement\", function() { return TitleElement; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_224702__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_224702__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_224702__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_224702__(/*! survey-core */ \"./src/entries/core.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar TitleElement = /** @class */ (function (_super) {\n    __extends(TitleElement, _super);\n    function TitleElement() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    TitleElement.prototype.keyup = function (evt) {\n        Object(survey_core__WEBPACK_IMPORTED_MODULE_2__[\"doKey2ClickUp\"])(evt);\n    };\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], TitleElement.prototype, \"element\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], TitleElement.prototype, \"css\", void 0);\n    TitleElement = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], TitleElement);\n    return TitleElement;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-element-title\", TitleElement);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (TitleElement);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/composite.vue?vue&type=script&lang=ts&\":\n/*!*******************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/composite.vue?vue&type=script&lang=ts& ***!\n  \\*******************************************************************************************************************************************/\n/*! exports provided: Composite, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_228491__) {\n\n\"use strict\";\n__nested_webpack_require_228491__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_228491__.d(__nested_webpack_exports__, \"Composite\", function() { return Composite; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_228491__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_228491__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_228491__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_228491__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar Composite = /** @class */ (function (_super) {\n    __extends(Composite, _super);\n    function Composite() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Object.defineProperty(Composite.prototype, \"contentPanel\", {\n        get: function () {\n            return this.question.contentPanel;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Composite = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], Composite);\n    return Composite;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-composite\", Composite);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (Composite);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/custom.vue?vue&type=script&lang=ts&\":\n/*!****************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/custom.vue?vue&type=script&lang=ts& ***!\n  \\****************************************************************************************************************************************/\n/*! exports provided: Custom, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_232020__) {\n\n\"use strict\";\n__nested_webpack_require_232020__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_232020__.d(__nested_webpack_exports__, \"Custom\", function() { return Custom; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_232020__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_232020__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_232020__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_232020__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar Custom = /** @class */ (function (_super) {\n    __extends(Custom, _super);\n    function Custom() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Object.defineProperty(Custom.prototype, \"contentQuestion\", {\n        get: function () {\n            return this.question.contentQuestion;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Custom.prototype.getComponentName = function (element) {\n        return Object(_question__WEBPACK_IMPORTED_MODULE_2__[\"getComponentName\"])(element);\n    };\n    Custom = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], Custom);\n    return Custom;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-custom\", Custom);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (Custom);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/customwidget.vue?vue&type=script&lang=ts&\":\n/*!**********************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/customwidget.vue?vue&type=script&lang=ts& ***!\n  \\**********************************************************************************************************************************************/\n/*! exports provided: CustomWidget, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_235709__) {\n\n\"use strict\";\n__nested_webpack_require_235709__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_235709__.d(__nested_webpack_exports__, \"CustomWidget\", function() { return CustomWidget; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_235709__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_235709__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_235709__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar CustomWidget = /** @class */ (function (_super) {\n    __extends(CustomWidget, _super);\n    function CustomWidget() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Object.defineProperty(CustomWidget.prototype, \"hasDefaultRender\", {\n        get: function () {\n            return this.question.customWidget.isDefaultRender || this.hasVueComponent;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(CustomWidget.prototype, \"hasHtml\", {\n        get: function () {\n            return this.question.customWidget.htmlTemplate ? true : false;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(CustomWidget.prototype, \"customHtml\", {\n        get: function () {\n            return this.question.customWidget.htmlTemplate;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(CustomWidget.prototype, \"hasVueComponent\", {\n        get: function () {\n            var options = vue__WEBPACK_IMPORTED_MODULE_0___default.a[\"options\"];\n            if (!options)\n                return false;\n            return (options.components && options.components[this.question.customWidget.name]);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(CustomWidget.prototype, \"componentName\", {\n        get: function () {\n            if (this.hasVueComponent)\n                return this.question.customWidget.name;\n            return \"survey-\" + this.question.getTemplate();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    CustomWidget.prototype.mounted = function () {\n        this.question.customWidget.afterRender(this.question, this.$el);\n    };\n    CustomWidget.prototype.updated = function () {\n        //this.question.customWidget.afterRender(this.question, this.$el);\n    };\n    CustomWidget.prototype.beforeDestroy = function () {\n        this.question.customWidget.willUnmount(this.question, this.$el);\n    };\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], CustomWidget.prototype, \"css\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], CustomWidget.prototype, \"question\", void 0);\n    CustomWidget = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], CustomWidget);\n    return CustomWidget;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-customwidget\", CustomWidget);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (CustomWidget);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/dropdown-select.vue?vue&type=script&lang=ts&\":\n/*!*************************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/dropdown-select.vue?vue&type=script&lang=ts& ***!\n  \\*************************************************************************************************************************************************/\n/*! exports provided: DropdownSelect, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_241105__) {\n\n\"use strict\";\n__nested_webpack_require_241105__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_241105__.d(__nested_webpack_exports__, \"DropdownSelect\", function() { return DropdownSelect; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_241105__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_241105__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_241105__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_241105__(/*! ./question */ \"./src/vue/question.ts\");\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_241105__(/*! survey-core */ \"./src/entries/core.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\nvar DropdownSelect = /** @class */ (function (_super) {\n    __extends(DropdownSelect, _super);\n    function DropdownSelect() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    DropdownSelect.prototype.click = function (event) {\n        this.question.onClick(event);\n    };\n    DropdownSelect.prototype.keyUp = function (event) {\n        this.question.onKeyUp(event);\n    };\n    DropdownSelect = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], DropdownSelect);\n    return DropdownSelect;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-dropdown-select\", DropdownSelect);\nsurvey_core__WEBPACK_IMPORTED_MODULE_3__[\"RendererFactory\"].Instance.registerRenderer(\"dropdown\", \"select\", \"sv-dropdown-select\");\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (DropdownSelect);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/dropdown.vue?vue&type=script&lang=ts&\":\n/*!******************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/dropdown.vue?vue&type=script&lang=ts& ***!\n  \\******************************************************************************************************************************************/\n/*! exports provided: Dropdown, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_244951__) {\n\n\"use strict\";\n__nested_webpack_require_244951__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_244951__.d(__nested_webpack_exports__, \"Dropdown\", function() { return Dropdown; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_244951__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_244951__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_244951__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_244951__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar Dropdown = /** @class */ (function (_super) {\n    __extends(Dropdown, _super);\n    function Dropdown() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Dropdown = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], Dropdown);\n    return Dropdown;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-dropdown\", Dropdown);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (Dropdown);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/element.vue?vue&type=script&lang=ts&\":\n/*!*****************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/element.vue?vue&type=script&lang=ts& ***!\n  \\*****************************************************************************************************************************************/\n/*! exports provided: SurveyElementVue, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_248271__) {\n\n\"use strict\";\n__nested_webpack_require_248271__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_248271__.d(__nested_webpack_exports__, \"SurveyElementVue\", function() { return SurveyElementVue; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_248271__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_248271__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_248271__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_248271__(/*! ./question */ \"./src/vue/question.ts\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_248271__(/*! ./base */ \"./src/vue/base.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\nvar SurveyElementVue = /** @class */ (function (_super) {\n    __extends(SurveyElementVue, _super);\n    function SurveyElementVue() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    SurveyElementVue.prototype.getModel = function () {\n        return this.element;\n    };\n    SurveyElementVue.prototype.getComponentName = function (element) {\n        return Object(_question__WEBPACK_IMPORTED_MODULE_2__[\"getComponentName\"])(element);\n    };\n    SurveyElementVue.prototype.getContentClass = function (element) {\n        return element.cssContent;\n    };\n    Object.defineProperty(SurveyElementVue.prototype, \"hasErrorsOnTop\", {\n        get: function () {\n            return !this.element.isPanel && this.element.showErrorOnTop;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyElementVue.prototype, \"hasErrorsOnBottom\", {\n        get: function () {\n            return !this.element.isPanel && this.element.showErrorOnBottom;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyElementVue.prototype.mounted = function () {\n        if (!this.element.isPanel) {\n            this.element.afterRender(this.$el);\n        }\n    };\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], SurveyElementVue.prototype, \"css\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], SurveyElementVue.prototype, \"survey\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], SurveyElementVue.prototype, \"element\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], SurveyElementVue.prototype, \"row\", void 0);\n    SurveyElementVue = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], SurveyElementVue);\n    return SurveyElementVue;\n}(_base__WEBPACK_IMPORTED_MODULE_3__[\"BaseVue\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-element\", SurveyElementVue);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (SurveyElementVue);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/elementheader.vue?vue&type=script&lang=ts&\":\n/*!***********************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/elementheader.vue?vue&type=script&lang=ts& ***!\n  \\***********************************************************************************************************************************************/\n/*! exports provided: ElementHeader, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_253428__) {\n\n\"use strict\";\n__nested_webpack_require_253428__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_253428__.d(__nested_webpack_exports__, \"ElementHeader\", function() { return ElementHeader; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_253428__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_253428__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_253428__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar ElementHeader = /** @class */ (function (_super) {\n    __extends(ElementHeader, _super);\n    function ElementHeader() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    ElementHeader.prototype.clickTitleFunction = function (e) {\n        if (typeof this.element.clickTitleFunction === \"function\") {\n            this.element.clickTitleFunction(e);\n        }\n    };\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], ElementHeader.prototype, \"element\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], ElementHeader.prototype, \"css\", void 0);\n    ElementHeader = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], ElementHeader);\n    return ElementHeader;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-element-header\", ElementHeader);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (ElementHeader);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/empty.vue?vue&type=script&lang=ts&\":\n/*!***************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/empty.vue?vue&type=script&lang=ts& ***!\n  \\***************************************************************************************************************************************/\n/*! exports provided: Empty, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_257135__) {\n\n\"use strict\";\n__nested_webpack_require_257135__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_257135__.d(__nested_webpack_exports__, \"Empty\", function() { return Empty; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_257135__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_257135__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_257135__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_257135__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar Empty = /** @class */ (function (_super) {\n    __extends(Empty, _super);\n    function Empty() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Empty = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], Empty);\n    return Empty;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-empty\", Empty);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (Empty);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/errors.vue?vue&type=script&lang=ts&\":\n/*!****************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/errors.vue?vue&type=script&lang=ts& ***!\n  \\****************************************************************************************************************************************/\n/*! exports provided: Errors, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_260408__) {\n\n\"use strict\";\n__nested_webpack_require_260408__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_260408__.d(__nested_webpack_exports__, \"Errors\", function() { return Errors; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_260408__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_260408__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_260408__(/*! ./base */ \"./src/vue/base.ts\");\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_260408__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar Errors = /** @class */ (function (_super) {\n    __extends(Errors, _super);\n    function Errors() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Errors.prototype.getModel = function () {\n        return this.element;\n    };\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_2__[\"Prop\"])()\n    ], Errors.prototype, \"element\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_2__[\"Prop\"])()\n    ], Errors.prototype, \"location\", void 0);\n    Errors = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_2__[\"Component\"]\n    ], Errors);\n    return Errors;\n}(_base__WEBPACK_IMPORTED_MODULE_1__[\"BaseVue\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-errors\", Errors);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (Errors);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/expression.vue?vue&type=script&lang=ts&\":\n/*!********************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/expression.vue?vue&type=script&lang=ts& ***!\n  \\********************************************************************************************************************************************/\n/*! exports provided: Expression, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_264059__) {\n\n\"use strict\";\n__nested_webpack_require_264059__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_264059__.d(__nested_webpack_exports__, \"Expression\", function() { return Expression; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_264059__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_264059__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_264059__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_264059__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar Expression = /** @class */ (function (_super) {\n    __extends(Expression, _super);\n    function Expression() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Expression = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], Expression);\n    return Expression;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-expression\", Expression);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (Expression);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/file-clean-button.vue?vue&type=script&lang=ts&\":\n/*!***************************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/file-clean-button.vue?vue&type=script&lang=ts& ***!\n  \\***************************************************************************************************************************************************/\n/*! exports provided: FileCleanButton, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_267440__) {\n\n\"use strict\";\n__nested_webpack_require_267440__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_267440__.d(__nested_webpack_exports__, \"FileCleanButton\", function() { return FileCleanButton; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_267440__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_267440__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_267440__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar FileCleanButton = /** @class */ (function (_super) {\n    __extends(FileCleanButton, _super);\n    function FileCleanButton() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], FileCleanButton.prototype, \"question\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], FileCleanButton.prototype, \"css\", void 0);\n    FileCleanButton = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], FileCleanButton);\n    return FileCleanButton;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-file-clean-btn\", FileCleanButton);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (FileCleanButton);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/file-preview.vue?vue&type=script&lang=ts&\":\n/*!**********************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/file-preview.vue?vue&type=script&lang=ts& ***!\n  \\**********************************************************************************************************************************************/\n/*! exports provided: FilePreview, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_271004__) {\n\n\"use strict\";\n__nested_webpack_require_271004__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_271004__.d(__nested_webpack_exports__, \"FilePreview\", function() { return FilePreview; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_271004__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_271004__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_271004__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar FilePreview = /** @class */ (function (_super) {\n    __extends(FilePreview, _super);\n    function FilePreview() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    FilePreview.prototype.isPreviewVisible = function (index) {\n        return this.question.isPreviewVisible(index);\n    };\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], FilePreview.prototype, \"question\", void 0);\n    FilePreview = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], FilePreview);\n    return FilePreview;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-file-preview\", FilePreview);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (FilePreview);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/file-video.vue?vue&type=script&lang=ts&\":\n/*!********************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/file-video.vue?vue&type=script&lang=ts& ***!\n  \\********************************************************************************************************************************************/\n/*! exports provided: FileVideo, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_274492__) {\n\n\"use strict\";\n__nested_webpack_require_274492__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_274492__.d(__nested_webpack_exports__, \"FileVideo\", function() { return FileVideo; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_274492__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_274492__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_274492__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar FileVideo = /** @class */ (function (_super) {\n    __extends(FileVideo, _super);\n    function FileVideo() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], FileVideo.prototype, \"question\", void 0);\n    FileVideo = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], FileVideo);\n    return FileVideo;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-file-video\", FileVideo);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (FileVideo);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/file.vue?vue&type=script&lang=ts&\":\n/*!**************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/file.vue?vue&type=script&lang=ts& ***!\n  \\**************************************************************************************************************************************/\n/*! exports provided: File, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_277802__) {\n\n\"use strict\";\n__nested_webpack_require_277802__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_277802__.d(__nested_webpack_exports__, \"File\", function() { return File; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_277802__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_277802__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_277802__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_277802__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar File = /** @class */ (function (_super) {\n    __extends(File, _super);\n    function File() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    File = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], File);\n    return File;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-file\", File);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (File);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/flowpanel.vue?vue&type=script&lang=ts&\":\n/*!*******************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/flowpanel.vue?vue&type=script&lang=ts& ***!\n  \\*******************************************************************************************************************************************/\n/*! exports provided: FlowPanel, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_281079__) {\n\n\"use strict\";\n__nested_webpack_require_281079__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_281079__.d(__nested_webpack_exports__, \"FlowPanel\", function() { return FlowPanel; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_281079__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_281079__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_281079__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar FlowPanel = /** @class */ (function (_super) {\n    __extends(FlowPanel, _super);\n    function FlowPanel() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.isCollapsedValue = false;\n        return _this;\n    }\n    Object.defineProperty(FlowPanel.prototype, \"rootNode\", {\n        get: function () {\n            return this.rootNodeValue;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    FlowPanel.prototype.beforeMount = function () {\n        if (!this.question)\n            return;\n        var self = this;\n        this.question.onCustomHtmlProducing = function () {\n            return \"\";\n        };\n        this.question.onGetHtmlForQuestion = self.renderQuestion;\n        this.setRootNode();\n    };\n    FlowPanel.prototype.setRootNode = function () {\n        var html = \"<span>\" + this.question.produceHtml() + \"</span>\";\n        var doc = new DOMParser().parseFromString(html, \"text/xml\");\n        this.rootNodeValue =\n            !!doc && doc.childNodes.length > 0 ? doc.childNodes[0] : null;\n    };\n    FlowPanel.prototype.renderQuestion = function (question) {\n        return \"<question>\" + question.name + \"</question>\";\n    };\n    FlowPanel.prototype.mounted = function () {\n        var _this = this;\n        if (this.question.survey) {\n            this.question.survey.afterRenderPanel(this.question, this.$el);\n        }\n        this.isCollapsed = this.question.isCollapsed;\n        this.question.registerPropertyChangedHandlers([\"state\"], function (val) { _this.isCollapsed = _this.question.isCollapsed; });\n    };\n    Object.defineProperty(FlowPanel.prototype, \"rootStyle\", {\n        get: function () {\n            var result = {};\n            if (this.question.renderWidth) {\n                result[\"flexBasis\"] = this.question.renderWidth;\n                result[\"flexGrow\"] = 1;\n                result[\"flexShrink\"] = 1;\n                result[\"width\"] = this.question.renderWidth;\n                result[\"minWidth\"] = this.question.minWidth;\n                result[\"maxWidth\"] = this.question.maxWidth;\n            }\n            return result;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(FlowPanel.prototype, \"showIcon\", {\n        get: function () {\n            return (this.question && (this.question.isExpanded || this.question.isCollapsed));\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(FlowPanel.prototype, \"rows\", {\n        get: function () {\n            return this.question.rows;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(FlowPanel.prototype, \"hasTitle\", {\n        get: function () {\n            return this.question.title.length > 0;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(FlowPanel.prototype, \"survey\", {\n        get: function () {\n            return this.question.survey;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(FlowPanel.prototype, \"iconCss\", {\n        get: function () {\n            //refactor\n            var result = \"sv_panel_icon\";\n            if (!this.isCollapsed)\n                result += \" sv_expanded\";\n            return result;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(FlowPanel.prototype, \"isCollapsed\", {\n        get: function () {\n            return this.isCollapsedValue;\n        },\n        set: function (val) {\n            this.isCollapsedValue = val;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    FlowPanel.prototype.changeExpanded = function () {\n        if (this.question.isCollapsed || this.question.isExpanded) {\n            if (this.question.isCollapsed) {\n                this.question.expand();\n            }\n            else {\n                this.question.collapse();\n            }\n        }\n    };\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], FlowPanel.prototype, \"question\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], FlowPanel.prototype, \"isEditMode\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], FlowPanel.prototype, \"css\", void 0);\n    FlowPanel = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], FlowPanel);\n    return FlowPanel;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-flowpanel\", FlowPanel);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (FlowPanel);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/flowpanelelement.vue?vue&type=script&lang=ts&\":\n/*!**************************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/flowpanelelement.vue?vue&type=script&lang=ts& ***!\n  \\**************************************************************************************************************************************************/\n/*! exports provided: FlowPanelElement, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_288552__) {\n\n\"use strict\";\n__nested_webpack_require_288552__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_288552__.d(__nested_webpack_exports__, \"FlowPanelElement\", function() { return FlowPanelElement; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_288552__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_288552__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_288552__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_288552__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar FlowPanelElement = /** @class */ (function (_super) {\n    __extends(FlowPanelElement, _super);\n    function FlowPanelElement() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.question = null;\n        _this.tagName = \"span\";\n        _this.nodes = [];\n        _this.text = \"\";\n        _this.style = {};\n        return _this;\n    }\n    FlowPanelElement_1 = FlowPanelElement;\n    FlowPanelElement.prototype.getStyle = function (nodeType) {\n        var style = {};\n        if (nodeType.toLowerCase() === \"b\") {\n            style.fontWeight = \"bold\";\n        }\n        if (nodeType.toLowerCase() === \"i\") {\n            style.fontStyle = \"italic\";\n        }\n        if (nodeType.toLowerCase() === \"u\") {\n            style.textDecoration = \"underline\";\n        }\n        return style;\n    };\n    Object.defineProperty(FlowPanelElement.prototype, \"elementId\", {\n        get: function () {\n            if (!this.elementIdValue) {\n                if (!FlowPanelElement_1.idValue) {\n                    FlowPanelElement_1.idValue = 0;\n                }\n                FlowPanelElement_1.idValue++;\n                this.elementIdValue = \"fp_el\" + FlowPanelElement_1.idValue;\n            }\n            return this.elementIdValue;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(FlowPanelElement.prototype, \"survey\", {\n        get: function () {\n            return this.panel.survey;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    FlowPanelElement.prototype.beforeMount = function () {\n        if (!this.panel || !this.node)\n            return;\n        var nodeType = this.node.nodeName.toLowerCase();\n        if (!this.hasTextChildNodesOnly(this.node)) {\n            this.nodes = this.getChildDomNodes(this.node);\n        }\n        else {\n            if (nodeType == \"question\") {\n                this.question = this.panel.getQuestionByName(this.node.textContent);\n            }\n            else {\n                this.text = this.node.textContent;\n            }\n        }\n        if (nodeType == \"div\" && !this.question) {\n            this.tagName = \"div\";\n        }\n        this.style = this.getStyle(nodeType);\n    };\n    //duplicated code from element.vue\n    FlowPanelElement.prototype.getComponentName = function (element) {\n        return Object(_question__WEBPACK_IMPORTED_MODULE_2__[\"getComponentName\"])(element);\n    };\n    // duplicated code from reactpages.tsx\n    FlowPanelElement.prototype.hasTextChildNodesOnly = function (node) {\n        var nodes = node.childNodes;\n        for (var i = 0; i < nodes.length; i++) {\n            if (nodes[i].nodeName.toLowerCase() !== \"#text\")\n                return false;\n        }\n        return true;\n    };\n    FlowPanelElement.prototype.getChildDomNodes = function (node) {\n        var domNodes = [];\n        for (var i = 0; i < node.childNodes.length; i++) {\n            domNodes.push(node.childNodes[i]);\n        }\n        return domNodes;\n    };\n    var FlowPanelElement_1;\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], FlowPanelElement.prototype, \"node\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], FlowPanelElement.prototype, \"panel\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], FlowPanelElement.prototype, \"css\", void 0);\n    FlowPanelElement = FlowPanelElement_1 = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], FlowPanelElement);\n    return FlowPanelElement;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-flowpanelelement\", FlowPanelElement);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (FlowPanelElement);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/header.vue?vue&type=script&lang=ts&\":\n/*!****************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/header.vue?vue&type=script&lang=ts& ***!\n  \\****************************************************************************************************************************************/\n/*! exports provided: SurveyHeader, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_295246__) {\n\n\"use strict\";\n__nested_webpack_require_295246__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_295246__.d(__nested_webpack_exports__, \"SurveyHeader\", function() { return SurveyHeader; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_295246__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_295246__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_295246__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar SurveyHeader = /** @class */ (function (_super) {\n    __extends(SurveyHeader, _super);\n    function SurveyHeader() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    SurveyHeader.prototype.mounted = function () {\n        var el = this.$el;\n        if (el && this.survey)\n            this.survey.afterRenderHeader(el);\n    };\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], SurveyHeader.prototype, \"survey\", void 0);\n    SurveyHeader = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], SurveyHeader);\n    return SurveyHeader;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-header\", SurveyHeader);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (SurveyHeader);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/html.vue?vue&type=script&lang=ts&\":\n/*!**************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/html.vue?vue&type=script&lang=ts& ***!\n  \\**************************************************************************************************************************************/\n/*! exports provided: Html, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_298750__) {\n\n\"use strict\";\n__nested_webpack_require_298750__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_298750__.d(__nested_webpack_exports__, \"Html\", function() { return Html; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_298750__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_298750__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_298750__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar Html = /** @class */ (function (_super) {\n    __extends(Html, _super);\n    function Html() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], Html.prototype, \"question\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], Html.prototype, \"css\", void 0);\n    Html = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], Html);\n    return Html;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-html\", Html);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (Html);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/image.vue?vue&type=script&lang=ts&\":\n/*!***************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/image.vue?vue&type=script&lang=ts& ***!\n  \\***************************************************************************************************************************************/\n/*! exports provided: QuestionImage, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_302150__) {\n\n\"use strict\";\n__nested_webpack_require_302150__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_302150__.d(__nested_webpack_exports__, \"QuestionImage\", function() { return QuestionImage; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_302150__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_302150__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_302150__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar QuestionImage = /** @class */ (function (_super) {\n    __extends(QuestionImage, _super);\n    function QuestionImage() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], QuestionImage.prototype, \"question\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], QuestionImage.prototype, \"css\", void 0);\n    QuestionImage = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], QuestionImage);\n    return QuestionImage;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-image\", QuestionImage);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (QuestionImage);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/imagepicker-item.vue?vue&type=script&lang=ts&\":\n/*!**************************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/imagepicker-item.vue?vue&type=script&lang=ts& ***!\n  \\**************************************************************************************************************************************************/\n/*! exports provided: ImagePickerItem, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_305705__) {\n\n\"use strict\";\n__nested_webpack_require_305705__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_305705__.d(__nested_webpack_exports__, \"ImagePickerItem\", function() { return ImagePickerItem; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_305705__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_305705__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_305705__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_305705__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar ImagePickerItem = /** @class */ (function (_super) {\n    __extends(ImagePickerItem, _super);\n    function ImagePickerItem() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    ImagePickerItem.prototype.getItemClass = function (item) {\n        return this.question.getItemClass(item);\n    };\n    ImagePickerItem.prototype.getModel = function () {\n        return this.item;\n    };\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], ImagePickerItem.prototype, \"question\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], ImagePickerItem.prototype, \"item\", void 0);\n    ImagePickerItem = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], ImagePickerItem);\n    return ImagePickerItem;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-imagepicker-item\", ImagePickerItem);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (ImagePickerItem);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/imagepicker.vue?vue&type=script&lang=ts&\":\n/*!*********************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/imagepicker.vue?vue&type=script&lang=ts& ***!\n  \\*********************************************************************************************************************************************/\n/*! exports provided: ImagePicker, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_309617__) {\n\n\"use strict\";\n__nested_webpack_require_309617__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_309617__.d(__nested_webpack_exports__, \"ImagePicker\", function() { return ImagePicker; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_309617__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_309617__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_309617__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_309617__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar ImagePicker = /** @class */ (function (_super) {\n    __extends(ImagePicker, _super);\n    function ImagePicker() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    ImagePicker.prototype.getItemClass = function (item) {\n        return this.question.getItemClass(item);\n    };\n    ImagePicker = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], ImagePicker);\n    return ImagePicker;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-imagepicker\", ImagePicker);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (ImagePicker);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrix.vue?vue&type=script&lang=ts&\":\n/*!****************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/matrix.vue?vue&type=script&lang=ts& ***!\n  \\****************************************************************************************************************************************/\n/*! exports provided: Matrix, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_313071__) {\n\n\"use strict\";\n__nested_webpack_require_313071__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_313071__.d(__nested_webpack_exports__, \"Matrix\", function() { return Matrix; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_313071__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_313071__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_313071__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_313071__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar Matrix = /** @class */ (function (_super) {\n    __extends(Matrix, _super);\n    function Matrix() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Matrix.prototype.cellClick = function (row, column) {\n        if (this.question.isInputReadOnly)\n            return;\n        row.value = column.value;\n    };\n    Matrix = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], Matrix);\n    return Matrix;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-matrix\", Matrix);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (Matrix);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrixcell.vue?vue&type=script&lang=ts&\":\n/*!********************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/matrixcell.vue?vue&type=script&lang=ts& ***!\n  \\********************************************************************************************************************************************/\n/*! exports provided: MatrixCell, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_316537__) {\n\n\"use strict\";\n__nested_webpack_require_316537__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_316537__.d(__nested_webpack_exports__, \"MatrixCell\", function() { return MatrixCell; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_316537__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_316537__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_316537__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_316537__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar MatrixCell = /** @class */ (function (_super) {\n    __extends(MatrixCell, _super);\n    function MatrixCell() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.isVisible = false;\n        return _this;\n    }\n    MatrixCell.prototype.getComponentName = function (element) {\n        return Object(_question__WEBPACK_IMPORTED_MODULE_2__[\"getComponentName\"])(element);\n    };\n    MatrixCell.prototype.getHeaders = function () {\n        return this.cell.headers;\n    };\n    MatrixCell.prototype.getCellStyle = function () {\n        if (!!this.cell.width || !!this.cell.minWidth)\n            return { width: this.cell.width, minWidth: this.cell.minWidth };\n        return null;\n    };\n    MatrixCell.prototype.getCellIndex = function () {\n        return this.cell.index || \"\";\n    };\n    MatrixCell.prototype.mounted = function () {\n        var _this = this;\n        if (!this.cell.hasQuestion || !this.question || !this.question.survey)\n            return;\n        this.onVisibilityChanged();\n        this.cell.question.registerPropertyChangedHandlers([\"isVisible\"], function () {\n            _this.onVisibilityChanged();\n        });\n        var options = {\n            cell: this.cell.cell,\n            cellQuestion: this.cell.question,\n            htmlElement: this.$el,\n            row: this.cell.row,\n            column: this.cell.cell.column,\n        };\n        this.question.survey.matrixAfterCellRender(this.question, options);\n    };\n    MatrixCell.prototype.onVisibilityChanged = function () {\n        this.isVisible = this.cell.question.isVisible;\n    };\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], MatrixCell.prototype, \"question\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], MatrixCell.prototype, \"cell\", void 0);\n    MatrixCell = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], MatrixCell);\n    return MatrixCell;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-matrixcell\", MatrixCell);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (MatrixCell);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrixdropdown.vue?vue&type=script&lang=ts&\":\n/*!************************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/matrixdropdown.vue?vue&type=script&lang=ts& ***!\n  \\************************************************************************************************************************************************/\n/*! exports provided: MatrixDropdown, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_321596__) {\n\n\"use strict\";\n__nested_webpack_require_321596__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_321596__.d(__nested_webpack_exports__, \"MatrixDropdown\", function() { return MatrixDropdown; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_321596__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_321596__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_321596__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_321596__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar MatrixDropdown = /** @class */ (function (_super) {\n    __extends(MatrixDropdown, _super);\n    function MatrixDropdown() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    MatrixDropdown = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], MatrixDropdown);\n    return MatrixDropdown;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-matrixdropdown\", MatrixDropdown);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (MatrixDropdown);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrixdynamic.vue?vue&type=script&lang=ts&\":\n/*!***********************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/matrixdynamic.vue?vue&type=script&lang=ts& ***!\n  \\***********************************************************************************************************************************************/\n/*! exports provided: MatrixDynamic, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_325003__) {\n\n\"use strict\";\n__nested_webpack_require_325003__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_325003__.d(__nested_webpack_exports__, \"MatrixDynamic\", function() { return MatrixDynamic; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_325003__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_325003__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_325003__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_325003__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar MatrixDynamic = /** @class */ (function (_super) {\n    __extends(MatrixDynamic, _super);\n    function MatrixDynamic() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    MatrixDynamic.prototype.addRowClick = function () {\n        this.question.addRowUI();\n    };\n    MatrixDynamic = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], MatrixDynamic);\n    return MatrixDynamic;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-matrixdynamic\", MatrixDynamic);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (MatrixDynamic);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrixheaderrequired.vue?vue&type=script&lang=ts&\":\n/*!******************************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/matrixheaderrequired.vue?vue&type=script&lang=ts& ***!\n  \\******************************************************************************************************************************************************/\n/*! exports provided: MatrixHeaderRequired, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_328531__) {\n\n\"use strict\";\n__nested_webpack_require_328531__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_328531__.d(__nested_webpack_exports__, \"MatrixHeaderRequired\", function() { return MatrixHeaderRequired; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_328531__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_328531__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_328531__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_328531__(/*! ./base */ \"./src/vue/base.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar MatrixHeaderRequired = /** @class */ (function (_super) {\n    __extends(MatrixHeaderRequired, _super);\n    function MatrixHeaderRequired() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    MatrixHeaderRequired.prototype.getModel = function () {\n        return this.column;\n    };\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], MatrixHeaderRequired.prototype, \"question\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], MatrixHeaderRequired.prototype, \"column\", void 0);\n    MatrixHeaderRequired = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], MatrixHeaderRequired);\n    return MatrixHeaderRequired;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"BaseVue\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-matrixheaderrequired\", MatrixHeaderRequired);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (MatrixHeaderRequired);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrixtable.vue?vue&type=script&lang=ts&\":\n/*!*********************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/matrixtable.vue?vue&type=script&lang=ts& ***!\n  \\*********************************************************************************************************************************************/\n/*! exports provided: MatrixTable, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_332381__) {\n\n\"use strict\";\n__nested_webpack_require_332381__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_332381__.d(__nested_webpack_exports__, \"MatrixTable\", function() { return MatrixTable; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_332381__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_332381__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_332381__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_332381__(/*! ./base */ \"./src/vue/base.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar MatrixTable = /** @class */ (function (_super) {\n    __extends(MatrixTable, _super);\n    function MatrixTable() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Object.defineProperty(MatrixTable.prototype, \"table\", {\n        get: function () {\n            return this.question.renderedTable;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    MatrixTable.prototype.getModel = function () {\n        return this.question.renderedTable;\n    };\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], MatrixTable.prototype, \"question\", void 0);\n    MatrixTable = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], MatrixTable);\n    return MatrixTable;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"BaseVue\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-matrixtable\", MatrixTable);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (MatrixTable);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/multipletext.vue?vue&type=script&lang=ts&\":\n/*!**********************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/multipletext.vue?vue&type=script&lang=ts& ***!\n  \\**********************************************************************************************************************************************/\n/*! exports provided: MultipleText, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_336190__) {\n\n\"use strict\";\n__nested_webpack_require_336190__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_336190__.d(__nested_webpack_exports__, \"MultipleText\", function() { return MultipleText; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_336190__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_336190__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_336190__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_336190__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar MultipleText = /** @class */ (function (_super) {\n    __extends(MultipleText, _super);\n    function MultipleText() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    MultipleText = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], MultipleText);\n    return MultipleText;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-multipletext\", MultipleText);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (MultipleText);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/multipletextitem.vue?vue&type=script&lang=ts&\":\n/*!**************************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/multipletextitem.vue?vue&type=script&lang=ts& ***!\n  \\**************************************************************************************************************************************************/\n/*! exports provided: MultipleTextItem, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_339590__) {\n\n\"use strict\";\n__nested_webpack_require_339590__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_339590__.d(__nested_webpack_exports__, \"MultipleTextItem\", function() { return MultipleTextItem; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_339590__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_339590__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_339590__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_339590__(/*! ./base */ \"./src/vue/base.ts\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_339590__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\nvar MultipleTextItem = /** @class */ (function (_super) {\n    __extends(MultipleTextItem, _super);\n    function MultipleTextItem() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    MultipleTextItem.prototype.getModel = function () {\n        return this.cell.item.editor;\n    };\n    Object.defineProperty(MultipleTextItem.prototype, \"item\", {\n        get: function () {\n            return this.cell.item;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    MultipleTextItem.prototype.getComponentName = function (question) {\n        return Object(_question__WEBPACK_IMPORTED_MODULE_3__[\"getComponentName\"])(question);\n    };\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], MultipleTextItem.prototype, \"question\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], MultipleTextItem.prototype, \"cell\", void 0);\n    MultipleTextItem = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], MultipleTextItem);\n    return MultipleTextItem;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-multipletext-item\", MultipleTextItem);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (MultipleTextItem);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/page.vue?vue&type=script&lang=ts&\":\n/*!**************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/page.vue?vue&type=script&lang=ts& ***!\n  \\**************************************************************************************************************************************/\n/*! exports provided: Page, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_343860__) {\n\n\"use strict\";\n__nested_webpack_require_343860__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_343860__.d(__nested_webpack_exports__, \"Page\", function() { return Page; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_343860__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_343860__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_343860__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_343860__(/*! ./base */ \"./src/vue/base.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar Page = /** @class */ (function (_super) {\n    __extends(Page, _super);\n    function Page() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Page.prototype.getModel = function () {\n        return this.page;\n    };\n    Page.prototype.onMounted = function () {\n        if (this.survey) {\n            this.survey.afterRenderPage(this.$el);\n        }\n    };\n    Object.defineProperty(Page.prototype, \"showDescription\", {\n        //protected onUpdated() {\n        //  this.survey.afterRenderPage(this.$el as HTMLElement);\n        //}\n        get: function () {\n            return this.page._showDescription;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Page.prototype, \"num\", {\n        get: function () {\n            return this.page.num > 0 ? this.page.num + \". \" : \"\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Page.prototype, \"rows\", {\n        get: function () {\n            return this.page.rows;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], Page.prototype, \"survey\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], Page.prototype, \"page\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], Page.prototype, \"css\", void 0);\n    Page = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], Page);\n    return Page;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"BaseVue\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-page\", Page);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (Page);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/panel.vue?vue&type=script&lang=ts&\":\n/*!***************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/panel.vue?vue&type=script&lang=ts& ***!\n  \\***************************************************************************************************************************************/\n/*! exports provided: Panel, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_348450__) {\n\n\"use strict\";\n__nested_webpack_require_348450__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_348450__.d(__nested_webpack_exports__, \"Panel\", function() { return Panel; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_348450__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_348450__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_348450__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_348450__(/*! ./base */ \"./src/vue/base.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar Panel = /** @class */ (function (_super) {\n    __extends(Panel, _super);\n    function Panel() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.isCollapsedValue = false;\n        return _this;\n    }\n    Panel.prototype.getModel = function () {\n        return this.question;\n    };\n    Panel.prototype.onMounted = function () {\n        var _this = this;\n        if (this.question.survey) {\n            this.question.survey.afterRenderPanel(this.question, this.$el);\n        }\n        this.isCollapsedValue = this.question.isCollapsed;\n        this.question.stateChangedCallback = function () {\n            _this.isCollapsedValue = _this.question.isCollapsed;\n        };\n    };\n    Panel.prototype.beforeDestroy = function () {\n        this.question.stateChangedCallback = null;\n    };\n    Object.defineProperty(Panel.prototype, \"rootStyle\", {\n        get: function () {\n            var result = {};\n            if (this.question.renderWidth) {\n                result[\"flexBasis\"] = this.question.renderWidth;\n                result[\"flexGrow\"] = 1;\n                result[\"flexShrink\"] = 1;\n                result[\"width\"] = this.question.renderWidth;\n                result[\"minWidth\"] = this.question.minWidth;\n                result[\"maxWidth\"] = this.question.maxWidth;\n            }\n            return result;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Panel.prototype, \"showIcon\", {\n        get: function () {\n            return this.question.isExpanded || this.question.isCollapsed;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Panel.prototype, \"rows\", {\n        get: function () {\n            return this.question.rows;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Panel.prototype, \"survey\", {\n        get: function () {\n            return this.question.survey;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Panel.prototype, \"isCollapsed\", {\n        get: function () {\n            return this.isCollapsedValue;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Panel.prototype.cancelPreview = function () {\n        this.question.cancelPreview();\n    };\n    Object.defineProperty(Panel.prototype, \"requiredTextCss\", {\n        get: function () {\n            return (this.question.cssClasses.requiredText || this.question.cssClasses.panel.requiredText);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], Panel.prototype, \"question\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], Panel.prototype, \"isEditMode\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], Panel.prototype, \"css\", void 0);\n    Panel = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], Panel);\n    return Panel;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"BaseVue\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-panel\", Panel);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (Panel);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/paneldynamic.vue?vue&type=script&lang=ts&\":\n/*!**********************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/paneldynamic.vue?vue&type=script&lang=ts& ***!\n  \\**********************************************************************************************************************************************/\n/*! exports provided: PanelDynamic, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_354597__) {\n\n\"use strict\";\n__nested_webpack_require_354597__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_354597__.d(__nested_webpack_exports__, \"PanelDynamic\", function() { return PanelDynamic; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_354597__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_354597__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_354597__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_354597__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar PanelDynamic = /** @class */ (function (_super) {\n    __extends(PanelDynamic, _super);\n    function PanelDynamic() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Object.defineProperty(PanelDynamic.prototype, \"renderedPanels\", {\n        get: function () {\n            if (this.question.isRenderModeList)\n                return this.question.panels;\n            var panels = [];\n            if (this.question.currentPanel) {\n                panels.push(this.question.currentPanel);\n            }\n            return panels;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(PanelDynamic.prototype, \"showLegacyNavigation\", {\n        get: function () {\n            return this.question[\"showLegacyNavigation\"];\n        },\n        enumerable: false,\n        configurable: true\n    });\n    PanelDynamic = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], PanelDynamic);\n    return PanelDynamic;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-paneldynamic\", PanelDynamic);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (PanelDynamic);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/paneldynamicprogress.vue?vue&type=script&lang=ts&\":\n/*!******************************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/paneldynamicprogress.vue?vue&type=script&lang=ts& ***!\n  \\******************************************************************************************************************************************************/\n/*! exports provided: PanelDynamicProgress, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_358687__) {\n\n\"use strict\";\n__nested_webpack_require_358687__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_358687__.d(__nested_webpack_exports__, \"PanelDynamicProgress\", function() { return PanelDynamicProgress; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_358687__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_358687__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_358687__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar PanelDynamicProgress = /** @class */ (function (_super) {\n    __extends(PanelDynamicProgress, _super);\n    function PanelDynamicProgress() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Object.defineProperty(PanelDynamicProgress.prototype, \"cssClass\", {\n        get: function () {\n            return this.question.isProgressTopShowing\n                ? this.question.cssClasses.progressTop\n                : this.question.cssClasses.progressBottom;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], PanelDynamicProgress.prototype, \"question\", void 0);\n    PanelDynamicProgress = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], PanelDynamicProgress);\n    return PanelDynamicProgress;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-paneldynamicprogress\", PanelDynamicProgress);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (PanelDynamicProgress);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/paneldynamicprogressV2.vue?vue&type=script&lang=ts&\":\n/*!********************************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/paneldynamicprogressV2.vue?vue&type=script&lang=ts& ***!\n  \\********************************************************************************************************************************************************/\n/*! exports provided: PanelDynamicProgressV2, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_362562__) {\n\n\"use strict\";\n__nested_webpack_require_362562__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_362562__.d(__nested_webpack_exports__, \"PanelDynamicProgressV2\", function() { return PanelDynamicProgressV2; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_362562__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_362562__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_362562__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _paneldynamicprogress_vue__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_362562__(/*! ./paneldynamicprogress.vue */ \"./src/vue/paneldynamicprogress.vue\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar PanelDynamicProgressV2 = /** @class */ (function (_super) {\n    __extends(PanelDynamicProgressV2, _super);\n    function PanelDynamicProgressV2() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    PanelDynamicProgressV2 = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], PanelDynamicProgressV2);\n    return PanelDynamicProgressV2;\n}(_paneldynamicprogress_vue__WEBPACK_IMPORTED_MODULE_2__[\"PanelDynamicProgress\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-paneldynamicprogress-v2\", PanelDynamicProgressV2);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (PanelDynamicProgressV2);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/popup-survey.vue?vue&type=script&lang=ts&\":\n/*!**********************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/popup-survey.vue?vue&type=script&lang=ts& ***!\n  \\**********************************************************************************************************************************************/\n/*! exports provided: PopupSurvey, SurveyWindow, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_366140__) {\n\n\"use strict\";\n__nested_webpack_require_366140__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_366140__.d(__nested_webpack_exports__, \"PopupSurvey\", function() { return PopupSurvey; });\n/* harmony export (binding) */ __nested_webpack_require_366140__.d(__nested_webpack_exports__, \"SurveyWindow\", function() { return SurveyWindow; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_366140__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_366140__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_366140__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_366140__(/*! survey-core */ \"./src/entries/core.ts\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_366140__(/*! ./base */ \"./src/vue/base.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\nvar PopupSurvey = /** @class */ (function (_super) {\n    __extends(PopupSurvey, _super);\n    function PopupSurvey() {\n        var _this = _super.call(this) || this;\n        if (_this.window) {\n            _this.surveyWindow = _this.window;\n        }\n        else {\n            _this.surveyWindow = new survey_core__WEBPACK_IMPORTED_MODULE_2__[\"PopupSurveyModel\"](null, _this.survey);\n        }\n        if (_this.isexpanded !== undefined) {\n            _this.surveyWindow.isExpanded = _this.isexpanded;\n        }\n        if (_this.isExpanded !== undefined) {\n            _this.surveyWindow.isExpanded = _this.isExpanded;\n        }\n        if (_this.closeOnCompleteTimeout !== undefined) {\n            _this.surveyWindow.closeOnCompleteTimeout = _this.closeOnCompleteTimeout;\n        }\n        if (_this.allowClose !== undefined) {\n            _this.surveyWindow.allowClose = _this.allowClose;\n        }\n        _this.surveyWindow.isShowing = true;\n        return _this;\n    }\n    PopupSurvey.prototype.getModel = function () {\n        return this.surveyWindow;\n    };\n    Object.defineProperty(PopupSurvey.prototype, \"windowSurvey\", {\n        get: function () {\n            return this.surveyWindow.survey;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(PopupSurvey.prototype, \"css\", {\n        get: function () {\n            return !!this.survey ? this.survey.getCss() : {};\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(PopupSurvey.prototype, \"expandedCss\", {\n        get: function () {\n            return this.surveyWindow.isExpanded\n                ? this.css.window.header.buttonCollapsed\n                : this.css.window.header.buttonExpanded;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(PopupSurvey.prototype, \"isExpandedSurvey\", {\n        get: function () {\n            return this.surveyWindow.isExpanded;\n        },\n        set: function (val) {\n            this.surveyWindow.isExpanded = val;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    PopupSurvey.prototype.doExpand = function () {\n        this.surveyWindow.changeExpandCollapse();\n    };\n    PopupSurvey.prototype.doHide = function () {\n        this.surveyWindow.hide();\n    };\n    PopupSurvey.prototype.getSurveyComponentName = function () {\n        return \"survey\";\n    };\n    PopupSurvey.prototype.doScroll = function () {\n        this.surveyWindow.onScroll();\n    };\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], PopupSurvey.prototype, \"window\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], PopupSurvey.prototype, \"survey\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], PopupSurvey.prototype, \"isExpanded\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], PopupSurvey.prototype, \"isexpanded\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], PopupSurvey.prototype, \"allowClose\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], PopupSurvey.prototype, \"closeOnCompleteTimeout\", void 0);\n    PopupSurvey = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], PopupSurvey);\n    return PopupSurvey;\n}(_base__WEBPACK_IMPORTED_MODULE_3__[\"BaseVue\"]));\n\n/**\n * Obsolete, please use PopupSurvey\n */\nvar SurveyWindow = /** @class */ (function (_super) {\n    __extends(SurveyWindow, _super);\n    function SurveyWindow() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    return SurveyWindow;\n}(PopupSurvey));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-window\", SurveyWindow);\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"popup-survey\", PopupSurvey);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (PopupSurvey);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/progress.vue?vue&type=script&lang=ts&\":\n/*!******************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/progress.vue?vue&type=script&lang=ts& ***!\n  \\******************************************************************************************************************************************/\n/*! exports provided: Progress, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_373323__) {\n\n\"use strict\";\n__nested_webpack_require_373323__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_373323__.d(__nested_webpack_exports__, \"Progress\", function() { return Progress; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_373323__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_373323__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_373323__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_373323__(/*! survey-core */ \"./src/entries/core.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar Progress = /** @class */ (function (_super) {\n    __extends(Progress, _super);\n    function Progress() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Object.defineProperty(Progress.prototype, \"progress\", {\n        get: function () {\n            return this.survey.progressValue + \"%\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Progress.prototype.getProgressTextInBarCss = function (css) {\n        return survey_core__WEBPACK_IMPORTED_MODULE_2__[\"SurveyProgressModel\"].getProgressTextInBarCss(css);\n    };\n    Progress.prototype.getProgressTextUnderBarCss = function (css) {\n        return survey_core__WEBPACK_IMPORTED_MODULE_2__[\"SurveyProgressModel\"].getProgressTextUnderBarCss(css);\n    };\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], Progress.prototype, \"survey\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], Progress.prototype, \"container\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], Progress.prototype, \"css\", void 0);\n    Progress = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], Progress);\n    return Progress;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-progress-pages\", Progress);\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-progress-questions\", Progress);\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-progress-correctquestions\", Progress);\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-progress-requiredquestions\", Progress);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (Progress);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/progressButtons.vue?vue&type=script&lang=ts&\":\n/*!*************************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/progressButtons.vue?vue&type=script&lang=ts& ***!\n  \\*************************************************************************************************************************************************/\n/*! exports provided: ProgressButtons, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_377959__) {\n\n\"use strict\";\n__nested_webpack_require_377959__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_377959__.d(__nested_webpack_exports__, \"ProgressButtons\", function() { return ProgressButtons; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_377959__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_377959__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_377959__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_377959__(/*! survey-core */ \"./src/entries/core.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar ProgressButtons = /** @class */ (function (_super) {\n    __extends(ProgressButtons, _super);\n    function ProgressButtons() {\n        var _this = _super.call(this) || this;\n        _this.hasScroller = false;\n        _this.updateScroller = undefined;\n        _this.progressButtonsModel = new survey_core__WEBPACK_IMPORTED_MODULE_2__[\"SurveyProgressButtonsModel\"](_this.survey);\n        return _this;\n    }\n    Object.defineProperty(ProgressButtons.prototype, \"css\", {\n        get: function () {\n            return this.survey.css;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    ProgressButtons.prototype.mounted = function () {\n        var _this = this;\n        var listContainerElement = this.$refs[\"progressButtonsListContainer\"];\n        this.updateScroller = setInterval(function () {\n            _this.hasScroller =\n                listContainerElement.scrollWidth > listContainerElement.offsetWidth;\n        }, 100);\n    };\n    ProgressButtons.prototype.isListElementClickable = function (index) {\n        return this.progressButtonsModel.isListElementClickable(index);\n    };\n    ProgressButtons.prototype.getListElementCss = function (index) {\n        return this.progressButtonsModel.getListElementCss(index);\n    };\n    ProgressButtons.prototype.clickListElement = function (index) {\n        this.progressButtonsModel.clickListElement(index);\n    };\n    ProgressButtons.prototype.getScrollButtonCss = function (hasScroller, isLeftScroll) {\n        return this.progressButtonsModel.getScrollButtonCss(hasScroller, isLeftScroll);\n    };\n    ProgressButtons.prototype.clickScrollButton = function (isLeftScroll) {\n        var listContainerElement = this.$refs[\"progressButtonsListContainer\"];\n        listContainerElement.scrollLeft += (isLeftScroll ? -1 : 1) * 70;\n    };\n    ProgressButtons.prototype.beforeDestroy = function () {\n        if (typeof this.updateScroller !== \"undefined\") {\n            clearInterval(this.updateScroller);\n            this.updateScroller = undefined;\n        }\n    };\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], ProgressButtons.prototype, \"survey\", void 0);\n    ProgressButtons = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], ProgressButtons);\n    return ProgressButtons;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-progress-buttons\", ProgressButtons);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (ProgressButtons);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/progressToc.vue?vue&type=script&lang=ts&\":\n/*!*********************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/progressToc.vue?vue&type=script&lang=ts& ***!\n  \\*********************************************************************************************************************************************/\n/*! exports provided: ProgressToc, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_383340__) {\n\n\"use strict\";\n__nested_webpack_require_383340__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_383340__.d(__nested_webpack_exports__, \"ProgressToc\", function() { return ProgressToc; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_383340__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_383340__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_383340__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_383340__(/*! survey-core */ \"./src/entries/core.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar ProgressToc = /** @class */ (function (_super) {\n    __extends(ProgressToc, _super);\n    function ProgressToc() {\n        var _this = _super.call(this) || this;\n        _this.tocModel = undefined;\n        _this.tocModel = new survey_core__WEBPACK_IMPORTED_MODULE_2__[\"TOCModel\"](_this.survey);\n        return _this;\n    }\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], ProgressToc.prototype, \"survey\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], ProgressToc.prototype, \"css\", void 0);\n    ProgressToc = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], ProgressToc);\n    return ProgressToc;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-progress-toc\", ProgressToc);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (ProgressToc);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/question-comment.vue?vue&type=script&lang=ts&\":\n/*!**************************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/question-comment.vue?vue&type=script&lang=ts& ***!\n  \\**************************************************************************************************************************************************/\n/*! exports provided: OtherComment, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_387132__) {\n\n\"use strict\";\n__nested_webpack_require_387132__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_387132__.d(__nested_webpack_exports__, \"OtherComment\", function() { return OtherComment; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_387132__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_387132__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_387132__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar OtherComment = /** @class */ (function (_super) {\n    __extends(OtherComment, _super);\n    function OtherComment() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], OtherComment.prototype, \"question\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], OtherComment.prototype, \"commentClass\", void 0);\n    OtherComment = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], OtherComment);\n    return OtherComment;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-question-comment\", OtherComment);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (OtherComment);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/question-other.vue?vue&type=script&lang=ts&\":\n/*!************************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/question-other.vue?vue&type=script&lang=ts& ***!\n  \\************************************************************************************************************************************************/\n/*! exports provided: OtherChoice, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_390683__) {\n\n\"use strict\";\n__nested_webpack_require_390683__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_390683__.d(__nested_webpack_exports__, \"OtherChoice\", function() { return OtherChoice; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_390683__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_390683__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_390683__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar OtherChoice = /** @class */ (function (_super) {\n    __extends(OtherChoice, _super);\n    function OtherChoice() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], OtherChoice.prototype, \"question\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], OtherChoice.prototype, \"commentClass\", void 0);\n    OtherChoice = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], OtherChoice);\n    return OtherChoice;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-other-choice\", OtherChoice);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (OtherChoice);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/radiogroup.vue?vue&type=script&lang=ts&\":\n/*!********************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/radiogroup.vue?vue&type=script&lang=ts& ***!\n  \\********************************************************************************************************************************************/\n/*! exports provided: Radiogroup, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_394201__) {\n\n\"use strict\";\n__nested_webpack_require_394201__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_394201__.d(__nested_webpack_exports__, \"Radiogroup\", function() { return Radiogroup; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_394201__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_394201__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_394201__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_394201__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar Radiogroup = /** @class */ (function (_super) {\n    __extends(Radiogroup, _super);\n    function Radiogroup() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Object.defineProperty(Radiogroup.prototype, \"choicesCount\", {\n        get: function () {\n            return this.question.visibleChoices.length - 1;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Radiogroup.prototype.getItemClass = function (item) {\n        return this.question.getItemClass(item);\n    };\n    Radiogroup = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], Radiogroup);\n    return Radiogroup;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-radiogroup\", Radiogroup);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (Radiogroup);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/radiogroupitem.vue?vue&type=script&lang=ts&\":\n/*!************************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/radiogroupitem.vue?vue&type=script&lang=ts& ***!\n  \\************************************************************************************************************************************************/\n/*! exports provided: RadiogroupItem, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_397909__) {\n\n\"use strict\";\n__nested_webpack_require_397909__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_397909__.d(__nested_webpack_exports__, \"RadiogroupItem\", function() { return RadiogroupItem; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_397909__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_397909__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_397909__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_397909__(/*! ./base */ \"./src/vue/base.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar RadiogroupItem = /** @class */ (function (_super) {\n    __extends(RadiogroupItem, _super);\n    function RadiogroupItem() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    RadiogroupItem.prototype.getModel = function () {\n        return this.item;\n    };\n    RadiogroupItem.prototype.getLabelClass = function (item) {\n        return this.question.getLabelClass(item);\n    };\n    RadiogroupItem.prototype.getControlLabelClass = function (item) {\n        return this.question.getControlLabelClass(item);\n    };\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], RadiogroupItem.prototype, \"question\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], RadiogroupItem.prototype, \"item\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], RadiogroupItem.prototype, \"index\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], RadiogroupItem.prototype, \"hideLabel\", void 0);\n    RadiogroupItem = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], RadiogroupItem);\n    return RadiogroupItem;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"BaseVue\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-radiogroup-item\", RadiogroupItem);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (RadiogroupItem);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/ranking/ranking-item.vue?vue&type=script&lang=ts&\":\n/*!******************************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/ranking/ranking-item.vue?vue&type=script&lang=ts& ***!\n  \\******************************************************************************************************************************************************/\n/*! exports provided: RankingItem, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_402258__) {\n\n\"use strict\";\n__nested_webpack_require_402258__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_402258__.d(__nested_webpack_exports__, \"RankingItem\", function() { return RankingItem; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_402258__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_402258__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_402258__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar RankingItem = /** @class */ (function (_super) {\n    __extends(RankingItem, _super);\n    function RankingItem() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], RankingItem.prototype, \"index\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], RankingItem.prototype, \"indexText\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], RankingItem.prototype, \"text\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], RankingItem.prototype, \"handleKeydown\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], RankingItem.prototype, \"cssClasses\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], RankingItem.prototype, \"question\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], RankingItem.prototype, \"item\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], RankingItem.prototype, \"unrankedItem\", void 0);\n    RankingItem = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], RankingItem);\n    return RankingItem;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-ranking-item\", RankingItem);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (RankingItem);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/ranking/ranking.vue?vue&type=script&lang=ts&\":\n/*!*************************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/ranking/ranking.vue?vue&type=script&lang=ts& ***!\n  \\*************************************************************************************************************************************************/\n/*! exports provided: Ranking, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_406666__) {\n\n\"use strict\";\n__nested_webpack_require_406666__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_406666__.d(__nested_webpack_exports__, \"Ranking\", function() { return Ranking; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_406666__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_406666__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_406666__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_406666__(/*! ../question */ \"./src/vue/question.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar Ranking = /** @class */ (function (_super) {\n    __extends(Ranking, _super);\n    function Ranking() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Ranking.prototype.getNumberByIndex = function (index) {\n        return this.question.getNumberByIndex(index);\n    };\n    Ranking = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], Ranking);\n    return Ranking;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-ranking\", Ranking);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (Ranking);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/rating-dropdown.vue?vue&type=script&lang=ts&\":\n/*!*************************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/rating-dropdown.vue?vue&type=script&lang=ts& ***!\n  \\*************************************************************************************************************************************************/\n/*! exports provided: RatingDropdown, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_410127__) {\n\n\"use strict\";\n__nested_webpack_require_410127__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_410127__.d(__nested_webpack_exports__, \"RatingDropdown\", function() { return RatingDropdown; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_410127__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_410127__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_410127__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_410127__(/*! ./question */ \"./src/vue/question.ts\");\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_410127__(/*! survey-core */ \"./src/entries/core.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\nvar RatingDropdown = /** @class */ (function (_super) {\n    __extends(RatingDropdown, _super);\n    function RatingDropdown() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    RatingDropdown = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], RatingDropdown);\n    return RatingDropdown;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nsurvey_core__WEBPACK_IMPORTED_MODULE_3__[\"RendererFactory\"].Instance.registerRenderer(\"rating\", \"dropdown\", \"sv-rating-dropdown\");\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-rating-dropdown\", RatingDropdown);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (RatingDropdown);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/rating.vue?vue&type=script&lang=ts&\":\n/*!****************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/rating.vue?vue&type=script&lang=ts& ***!\n  \\****************************************************************************************************************************************/\n/*! exports provided: Rating, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_413761__) {\n\n\"use strict\";\n__nested_webpack_require_413761__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_413761__.d(__nested_webpack_exports__, \"Rating\", function() { return Rating; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_413761__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_413761__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_413761__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_413761__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar Rating = /** @class */ (function (_super) {\n    __extends(Rating, _super);\n    function Rating() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Rating.prototype.getInputId = function (index) {\n        return this.question.getInputId(index);\n    };\n    Rating = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], Rating);\n    return Rating;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-rating\", Rating);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (Rating);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/row-element.vue?vue&type=script&lang=ts&\":\n/*!*********************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/row-element.vue?vue&type=script&lang=ts& ***!\n  \\*********************************************************************************************************************************************/\n/*! exports provided: SurveyRowElement, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_417183__) {\n\n\"use strict\";\n__nested_webpack_require_417183__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_417183__.d(__nested_webpack_exports__, \"SurveyRowElement\", function() { return SurveyRowElement; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_417183__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_417183__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_417183__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_417183__(/*! ./base */ \"./src/vue/base.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar SurveyRowElement = /** @class */ (function (_super) {\n    __extends(SurveyRowElement, _super);\n    function SurveyRowElement() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    SurveyRowElement.prototype.getModel = function () {\n        return this.element;\n    };\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], SurveyRowElement.prototype, \"element\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], SurveyRowElement.prototype, \"row\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], SurveyRowElement.prototype, \"css\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], SurveyRowElement.prototype, \"survey\", void 0);\n    SurveyRowElement = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], SurveyRowElement);\n    return SurveyRowElement;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"BaseVue\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-row-element\", SurveyRowElement);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (SurveyRowElement);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/row.vue?vue&type=script&lang=ts&\":\n/*!*************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/row.vue?vue&type=script&lang=ts& ***!\n  \\*************************************************************************************************************************************/\n/*! exports provided: Row, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_421224__) {\n\n\"use strict\";\n__nested_webpack_require_421224__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_421224__.d(__nested_webpack_exports__, \"Row\", function() { return Row; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_421224__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_421224__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_421224__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_421224__(/*! ./base */ \"./src/vue/base.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar Row = /** @class */ (function (_super) {\n    __extends(Row, _super);\n    function Row() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Object.defineProperty(Row.prototype, \"elements\", {\n        get: function () {\n            return this.row.visibleElements;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Row.prototype.getModel = function () {\n        return this.row;\n    };\n    Row.prototype.onMounted = function () {\n        var _this = this;\n        if (!!this.row) {\n            if (!this.row.isNeedRender) {\n                var rowContainerDiv = this.$el;\n                setTimeout(function () {\n                    _this.row.startLazyRendering(rowContainerDiv);\n                }, 10);\n            }\n        }\n    };\n    Row.prototype.beforeDestroy = function () {\n        if (!!this.row) {\n            this.row.isNeedRender = !this.row.isLazyRendering();\n        }\n    };\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], Row.prototype, \"row\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], Row.prototype, \"css\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], Row.prototype, \"survey\", void 0);\n    Row = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], Row);\n    return Row;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"BaseVue\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-row\", Row);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (Row);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/signaturepad.vue?vue&type=script&lang=ts&\":\n/*!**********************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/signaturepad.vue?vue&type=script&lang=ts& ***!\n  \\**********************************************************************************************************************************************/\n/*! exports provided: SignaturePad, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_425671__) {\n\n\"use strict\";\n__nested_webpack_require_425671__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_425671__.d(__nested_webpack_exports__, \"SignaturePad\", function() { return SignaturePad; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_425671__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_425671__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_425671__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_425671__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar SignaturePad = /** @class */ (function (_super) {\n    __extends(SignaturePad, _super);\n    function SignaturePad() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    SignaturePad = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], SignaturePad);\n    return SignaturePad;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-signaturepad\", SignaturePad);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (SignaturePad);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/string-editor.vue?vue&type=script&lang=ts&\":\n/*!***********************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/string-editor.vue?vue&type=script&lang=ts& ***!\n  \\***********************************************************************************************************************************************/\n/*! exports provided: SurveyStringEditor, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_429061__) {\n\n\"use strict\";\n__nested_webpack_require_429061__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_429061__.d(__nested_webpack_exports__, \"SurveyStringEditor\", function() { return SurveyStringEditor; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_429061__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_429061__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_429061__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_429061__(/*! survey-core */ \"./src/entries/core.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar SurveyStringEditor = /** @class */ (function (_super) {\n    __extends(SurveyStringEditor, _super);\n    function SurveyStringEditor() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.onInput = function (event) {\n            _this.locString.text = event.target.innerText;\n        };\n        _this.onClick = function (event) {\n            event.preventDefault();\n            event.stopPropagation();\n        };\n        return _this;\n    }\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], SurveyStringEditor.prototype, \"locString\", void 0);\n    SurveyStringEditor = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], SurveyStringEditor);\n    return SurveyStringEditor;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(survey_core__WEBPACK_IMPORTED_MODULE_2__[\"LocalizableString\"].editableRenderer, SurveyStringEditor);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (SurveyStringEditor);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/string-viewer.vue?vue&type=script&lang=ts&\":\n/*!***********************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/string-viewer.vue?vue&type=script&lang=ts& ***!\n  \\***********************************************************************************************************************************************/\n/*! exports provided: SurveyStringViewer, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_432985__) {\n\n\"use strict\";\n__nested_webpack_require_432985__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_432985__.d(__nested_webpack_exports__, \"SurveyStringViewer\", function() { return SurveyStringViewer; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_432985__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_432985__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_432985__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_432985__(/*! survey-core */ \"./src/entries/core.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar SurveyStringViewer = /** @class */ (function (_super) {\n    __extends(SurveyStringViewer, _super);\n    function SurveyStringViewer() {\n        var _this = _super.call(this) || this;\n        if (!_this.locString)\n            return _this;\n        var self = _this;\n        _this.locString.onChanged = function () {\n            self.$forceUpdate();\n        };\n        _this.locString.onChanged();\n        return _this;\n    }\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], SurveyStringViewer.prototype, \"locString\", void 0);\n    SurveyStringViewer = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], SurveyStringViewer);\n    return SurveyStringViewer;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(survey_core__WEBPACK_IMPORTED_MODULE_2__[\"LocalizableString\"].defaultRenderer, SurveyStringViewer);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (SurveyStringViewer);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/string.vue?vue&type=script&lang=ts&\":\n/*!****************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/string.vue?vue&type=script&lang=ts& ***!\n  \\****************************************************************************************************************************************/\n/*! exports provided: SurveyString, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_436816__) {\n\n\"use strict\";\n__nested_webpack_require_436816__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_436816__.d(__nested_webpack_exports__, \"SurveyString\", function() { return SurveyString; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_436816__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_436816__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_436816__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar SurveyString = /** @class */ (function (_super) {\n    __extends(SurveyString, _super);\n    function SurveyString() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], SurveyString.prototype, \"locString\", void 0);\n    SurveyString = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], SurveyString);\n    return SurveyString;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-string\", SurveyString);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (SurveyString);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/survey.vue?vue&type=script&lang=ts&\":\n/*!****************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/survey.vue?vue&type=script&lang=ts& ***!\n  \\****************************************************************************************************************************************/\n/*! exports provided: Survey, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_440170__) {\n\n\"use strict\";\n__nested_webpack_require_440170__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_440170__.d(__nested_webpack_exports__, \"Survey\", function() { return Survey; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_440170__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_440170__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_440170__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_440170__(/*! survey-core */ \"./src/entries/core.ts\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_440170__(/*! ./base */ \"./src/vue/base.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\nvar Survey = /** @class */ (function (_super) {\n    __extends(Survey, _super);\n    function Survey() {\n        var _this = _super.call(this) || this;\n        _this.updater = 1;\n        if (_this.vueSurvey[\"needRenderIcons\"]) {\n            survey_core__WEBPACK_IMPORTED_MODULE_2__[\"SvgRegistry\"].renderIcons();\n        }\n        return _this;\n    }\n    Object.defineProperty(Survey.prototype, \"pageKey\", {\n        get: function () {\n            return \"page\" + this.getActivePageId();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Survey.prototype, \"navId\", {\n        get: function () {\n            return \"nav\" + this.getActivePageId();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Survey.prototype.getModel = function () {\n        return this.vueSurvey;\n    };\n    Object.defineProperty(Survey.prototype, \"vueSurvey\", {\n        get: function () {\n            return !!this.survey ? this.survey : this.model;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Survey.prototype.onPropertyChanged = function (value, oldValue) {\n        this.onCreated();\n        this.surveyOnMounted();\n    };\n    Survey.prototype.forceUpdate = function () {\n        this.updater += 1;\n        this.$forceUpdate();\n    };\n    Survey.prototype.onMounted = function () {\n        this.surveyOnMounted();\n    };\n    Object.defineProperty(Survey.prototype, \"pageId\", {\n        get: function () {\n            return !!this.vueSurvey.activePage ? this.vueSurvey.activePage.id : \"\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Survey.prototype.getActivePageId = function () {\n        var pageId = this.pageId;\n        return !!this.vueSurvey && pageId + this.updater.toString();\n    };\n    Survey.prototype.surveyOnMounted = function () {\n        if (!this.vueSurvey)\n            return;\n        var el = this.$el;\n        if (el)\n            this.vueSurvey.afterRenderSurvey(el);\n        this.vueSurvey.valueHashSetDataCallback = function (valuesHash, key, value) {\n            vue__WEBPACK_IMPORTED_MODULE_0___default.a.set(valuesHash, key, value);\n        };\n        this.vueSurvey.valueHashDeleteDataCallback = function (valuesHash, key) {\n            vue__WEBPACK_IMPORTED_MODULE_0___default.a.delete(valuesHash, key);\n        };\n        this.vueSurvey.renderCallback = this.forceUpdate;\n        this.vueSurvey.startTimerFromUI();\n    };\n    Survey.prototype.beforeDestroy = function () {\n        this.vueSurvey.stopTimer();\n        this.vueSurvey.renderCallback = undefined;\n    };\n    Object.defineProperty(Survey.prototype, \"hasTitle\", {\n        get: function () {\n            return !!this.vueSurvey.title && this.vueSurvey.showTitle;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Survey.prototype, \"hasCompletedPage\", {\n        get: function () {\n            return this.vueSurvey.showCompletedPage && this.vueSurvey.state === \"completed\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Survey.prototype, \"css\", {\n        get: function () {\n            return this.vueSurvey.css;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Survey.prototype.getProcessedCompletedHtml = function () {\n        if (!this.hasCompletedPage)\n            return \"\";\n        if (!this.processedCompletedHtmlValue) {\n            this.processedCompletedHtmlValue = this.vueSurvey.processedCompletedHtml;\n        }\n        return this.processedCompletedHtmlValue;\n    };\n    Survey.prototype.start = function () {\n        this.vueSurvey.start();\n    };\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], Survey.prototype, \"survey\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], Survey.prototype, \"model\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Watch\"])(\"model\"),\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Watch\"])(\"survey\")\n    ], Survey.prototype, \"onPropertyChanged\", null);\n    Survey = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], Survey);\n    return Survey;\n}(_base__WEBPACK_IMPORTED_MODULE_3__[\"BaseVue\"]));\n\n// TODO: make this functionality available via surveyCss in all examples\nObject.defineProperty(Survey, \"cssType\", {\n    get: function () {\n        return survey_core__WEBPACK_IMPORTED_MODULE_2__[\"surveyCss\"].currentType;\n    },\n    set: function (newType) {\n        survey_core__WEBPACK_IMPORTED_MODULE_2__[\"StylesManager\"].applyTheme(newType);\n    },\n    enumerable: true,\n    configurable: false,\n});\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey\", Survey);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (Survey);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/tagbox.vue?vue&type=script&lang=ts&\":\n/*!****************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/tagbox.vue?vue&type=script&lang=ts& ***!\n  \\****************************************************************************************************************************************/\n/*! exports provided: Tagbox, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_447997__) {\n\n\"use strict\";\n__nested_webpack_require_447997__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_447997__.d(__nested_webpack_exports__, \"Tagbox\", function() { return Tagbox; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_447997__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_447997__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_447997__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_447997__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar Tagbox = /** @class */ (function (_super) {\n    __extends(Tagbox, _super);\n    function Tagbox() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Tagbox = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], Tagbox);\n    return Tagbox;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-tagbox\", Tagbox);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (Tagbox);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/text-input.vue?vue&type=script&lang=ts&\":\n/*!********************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/text-input.vue?vue&type=script&lang=ts& ***!\n  \\********************************************************************************************************************************************/\n/*! exports provided: QuestionTextInput, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_451308__) {\n\n\"use strict\";\n__nested_webpack_require_451308__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_451308__.d(__nested_webpack_exports__, \"QuestionTextInput\", function() { return QuestionTextInput; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_451308__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_451308__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_451308__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_451308__(/*! ./base */ \"./src/vue/base.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar QuestionTextInput = /** @class */ (function (_super) {\n    __extends(QuestionTextInput, _super);\n    function QuestionTextInput() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Object.defineProperty(QuestionTextInput.prototype, \"inputStyle\", {\n        get: function () {\n            return this.question.inputStyle;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionTextInput.prototype.getModel = function () {\n        return this.question;\n    };\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], QuestionTextInput.prototype, \"question\", void 0);\n    QuestionTextInput = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], QuestionTextInput);\n    return QuestionTextInput;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"BaseVue\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-text-input\", QuestionTextInput);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (QuestionTextInput);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/text.vue?vue&type=script&lang=ts&\":\n/*!**************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/text.vue?vue&type=script&lang=ts& ***!\n  \\**************************************************************************************************************************************/\n/*! exports provided: QuestionText, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_455150__) {\n\n\"use strict\";\n__nested_webpack_require_455150__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_455150__.d(__nested_webpack_exports__, \"QuestionText\", function() { return QuestionText; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_455150__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_455150__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_455150__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_455150__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar QuestionText = /** @class */ (function (_super) {\n    __extends(QuestionText, _super);\n    function QuestionText() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    QuestionText = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], QuestionText);\n    return QuestionText;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-text\", QuestionText);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (QuestionText);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/timerpanel.vue?vue&type=script&lang=ts&\":\n/*!********************************************************************************************************************************************!*\\\n  !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/timerpanel.vue?vue&type=script&lang=ts& ***!\n  \\********************************************************************************************************************************************/\n/*! exports provided: TimerPanel, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_458512__) {\n\n\"use strict\";\n__nested_webpack_require_458512__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_458512__.d(__nested_webpack_exports__, \"TimerPanel\", function() { return TimerPanel; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_458512__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_458512__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_458512__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_458512__(/*! ./base */ \"./src/vue/base.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar TimerPanel = /** @class */ (function (_super) {\n    __extends(TimerPanel, _super);\n    function TimerPanel() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.circleRadius = 440;\n        return _this;\n    }\n    Object.defineProperty(TimerPanel.prototype, \"progress\", {\n        get: function () {\n            return -this.circleRadius * this.model.progress;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(TimerPanel.prototype, \"text\", {\n        get: function () {\n            return this.model.text;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    TimerPanel.prototype.getModel = function () {\n        return this.model;\n    };\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], TimerPanel.prototype, \"model\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n    ], TimerPanel.prototype, \"css\", void 0);\n    TimerPanel = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n    ], TimerPanel);\n    return TimerPanel;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"BaseVue\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-timerpanel\", TimerPanel);\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (TimerPanel);\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-class-component/dist/vue-class-component.esm.js\":\n/*!**************************************************************************!*\\\n  !*** ./node_modules/vue-class-component/dist/vue-class-component.esm.js ***!\n  \\**************************************************************************/\n/*! exports provided: default, createDecorator, mixins */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_462441__) {\n\n\"use strict\";\n__nested_webpack_require_462441__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_462441__.d(__nested_webpack_exports__, \"createDecorator\", function() { return createDecorator; });\n/* harmony export (binding) */ __nested_webpack_require_462441__.d(__nested_webpack_exports__, \"mixins\", function() { return mixins; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_462441__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_462441__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/**\n  * vue-class-component v7.2.6\n  * (c) 2015-present Evan You\n  * @license MIT\n  */\n\n\nfunction _typeof(obj) {\n  if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n    _typeof = function (obj) {\n      return typeof obj;\n    };\n  } else {\n    _typeof = function (obj) {\n      return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n    };\n  }\n\n  return _typeof(obj);\n}\n\nfunction _defineProperty(obj, key, value) {\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n\n  return obj;\n}\n\nfunction _toConsumableArray(arr) {\n  return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n  if (Array.isArray(arr)) {\n    for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n\n    return arr2;\n  }\n}\n\nfunction _iterableToArray(iter) {\n  if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter);\n}\n\nfunction _nonIterableSpread() {\n  throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n}\n\n// The rational behind the verbose Reflect-feature check below is the fact that there are polyfills\n// which add an implementation for Reflect.defineMetadata but not for Reflect.getOwnMetadataKeys.\n// Without this check consumers will encounter hard to track down runtime errors.\nfunction reflectionIsSupported() {\n  return typeof Reflect !== 'undefined' && Reflect.defineMetadata && Reflect.getOwnMetadataKeys;\n}\nfunction copyReflectionMetadata(to, from) {\n  forwardMetadata(to, from);\n  Object.getOwnPropertyNames(from.prototype).forEach(function (key) {\n    forwardMetadata(to.prototype, from.prototype, key);\n  });\n  Object.getOwnPropertyNames(from).forEach(function (key) {\n    forwardMetadata(to, from, key);\n  });\n}\n\nfunction forwardMetadata(to, from, propertyKey) {\n  var metaKeys = propertyKey ? Reflect.getOwnMetadataKeys(from, propertyKey) : Reflect.getOwnMetadataKeys(from);\n  metaKeys.forEach(function (metaKey) {\n    var metadata = propertyKey ? Reflect.getOwnMetadata(metaKey, from, propertyKey) : Reflect.getOwnMetadata(metaKey, from);\n\n    if (propertyKey) {\n      Reflect.defineMetadata(metaKey, metadata, to, propertyKey);\n    } else {\n      Reflect.defineMetadata(metaKey, metadata, to);\n    }\n  });\n}\n\nvar fakeArray = {\n  __proto__: []\n};\nvar hasProto = fakeArray instanceof Array;\nfunction createDecorator(factory) {\n  return function (target, key, index) {\n    var Ctor = typeof target === 'function' ? target : target.constructor;\n\n    if (!Ctor.__decorators__) {\n      Ctor.__decorators__ = [];\n    }\n\n    if (typeof index !== 'number') {\n      index = undefined;\n    }\n\n    Ctor.__decorators__.push(function (options) {\n      return factory(options, key, index);\n    });\n  };\n}\nfunction mixins() {\n  for (var _len = arguments.length, Ctors = new Array(_len), _key = 0; _key < _len; _key++) {\n    Ctors[_key] = arguments[_key];\n  }\n\n  return vue__WEBPACK_IMPORTED_MODULE_0___default.a.extend({\n    mixins: Ctors\n  });\n}\nfunction isPrimitive(value) {\n  var type = _typeof(value);\n\n  return value == null || type !== 'object' && type !== 'function';\n}\nfunction warn(message) {\n  if (typeof console !== 'undefined') {\n    console.warn('[vue-class-component] ' + message);\n  }\n}\n\nfunction collectDataFromConstructor(vm, Component) {\n  // override _init to prevent to init as Vue instance\n  var originalInit = Component.prototype._init;\n\n  Component.prototype._init = function () {\n    var _this = this;\n\n    // proxy to actual vm\n    var keys = Object.getOwnPropertyNames(vm); // 2.2.0 compat (props are no longer exposed as self properties)\n\n    if (vm.$options.props) {\n      for (var key in vm.$options.props) {\n        if (!vm.hasOwnProperty(key)) {\n          keys.push(key);\n        }\n      }\n    }\n\n    keys.forEach(function (key) {\n      Object.defineProperty(_this, key, {\n        get: function get() {\n          return vm[key];\n        },\n        set: function set(value) {\n          vm[key] = value;\n        },\n        configurable: true\n      });\n    });\n  }; // should be acquired class property values\n\n\n  var data = new Component(); // restore original _init to avoid memory leak (#209)\n\n  Component.prototype._init = originalInit; // create plain data object\n\n  var plainData = {};\n  Object.keys(data).forEach(function (key) {\n    if (data[key] !== undefined) {\n      plainData[key] = data[key];\n    }\n  });\n\n  if (true) {\n    if (!(Component.prototype instanceof vue__WEBPACK_IMPORTED_MODULE_0___default.a) && Object.keys(plainData).length > 0) {\n      warn('Component class must inherit Vue or its descendant class ' + 'when class property is used.');\n    }\n  }\n\n  return plainData;\n}\n\nvar $internalHooks = ['data', 'beforeCreate', 'created', 'beforeMount', 'mounted', 'beforeDestroy', 'destroyed', 'beforeUpdate', 'updated', 'activated', 'deactivated', 'render', 'errorCaptured', 'serverPrefetch' // 2.6\n];\nfunction componentFactory(Component) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  options.name = options.name || Component._componentTag || Component.name; // prototype props.\n\n  var proto = Component.prototype;\n  Object.getOwnPropertyNames(proto).forEach(function (key) {\n    if (key === 'constructor') {\n      return;\n    } // hooks\n\n\n    if ($internalHooks.indexOf(key) > -1) {\n      options[key] = proto[key];\n      return;\n    }\n\n    var descriptor = Object.getOwnPropertyDescriptor(proto, key);\n\n    if (descriptor.value !== void 0) {\n      // methods\n      if (typeof descriptor.value === 'function') {\n        (options.methods || (options.methods = {}))[key] = descriptor.value;\n      } else {\n        // typescript decorated data\n        (options.mixins || (options.mixins = [])).push({\n          data: function data() {\n            return _defineProperty({}, key, descriptor.value);\n          }\n        });\n      }\n    } else if (descriptor.get || descriptor.set) {\n      // computed properties\n      (options.computed || (options.computed = {}))[key] = {\n        get: descriptor.get,\n        set: descriptor.set\n      };\n    }\n  });\n  (options.mixins || (options.mixins = [])).push({\n    data: function data() {\n      return collectDataFromConstructor(this, Component);\n    }\n  }); // decorate options\n\n  var decorators = Component.__decorators__;\n\n  if (decorators) {\n    decorators.forEach(function (fn) {\n      return fn(options);\n    });\n    delete Component.__decorators__;\n  } // find super\n\n\n  var superProto = Object.getPrototypeOf(Component.prototype);\n  var Super = superProto instanceof vue__WEBPACK_IMPORTED_MODULE_0___default.a ? superProto.constructor : vue__WEBPACK_IMPORTED_MODULE_0___default.a;\n  var Extended = Super.extend(options);\n  forwardStaticMembers(Extended, Component, Super);\n\n  if (reflectionIsSupported()) {\n    copyReflectionMetadata(Extended, Component);\n  }\n\n  return Extended;\n}\nvar reservedPropertyNames = [// Unique id\n'cid', // Super Vue constructor\n'super', // Component options that will be used by the component\n'options', 'superOptions', 'extendOptions', 'sealedOptions', // Private assets\n'component', 'directive', 'filter'];\nvar shouldIgnore = {\n  prototype: true,\n  arguments: true,\n  callee: true,\n  caller: true\n};\n\nfunction forwardStaticMembers(Extended, Original, Super) {\n  // We have to use getOwnPropertyNames since Babel registers methods as non-enumerable\n  Object.getOwnPropertyNames(Original).forEach(function (key) {\n    // Skip the properties that should not be overwritten\n    if (shouldIgnore[key]) {\n      return;\n    } // Some browsers does not allow reconfigure built-in properties\n\n\n    var extendedDescriptor = Object.getOwnPropertyDescriptor(Extended, key);\n\n    if (extendedDescriptor && !extendedDescriptor.configurable) {\n      return;\n    }\n\n    var descriptor = Object.getOwnPropertyDescriptor(Original, key); // If the user agent does not support `__proto__` or its family (IE <= 10),\n    // the sub class properties may be inherited properties from the super class in TypeScript.\n    // We need to exclude such properties to prevent to overwrite\n    // the component options object which stored on the extended constructor (See #192).\n    // If the value is a referenced value (object or function),\n    // we can check equality of them and exclude it if they have the same reference.\n    // If it is a primitive value, it will be forwarded for safety.\n\n    if (!hasProto) {\n      // Only `cid` is explicitly exluded from property forwarding\n      // because we cannot detect whether it is a inherited property or not\n      // on the no `__proto__` environment even though the property is reserved.\n      if (key === 'cid') {\n        return;\n      }\n\n      var superDescriptor = Object.getOwnPropertyDescriptor(Super, key);\n\n      if (!isPrimitive(descriptor.value) && superDescriptor && superDescriptor.value === descriptor.value) {\n        return;\n      }\n    } // Warn if the users manually declare reserved properties\n\n\n    if (  true && reservedPropertyNames.indexOf(key) >= 0) {\n      warn(\"Static property name '\".concat(key, \"' declared on class '\").concat(Original.name, \"' \") + 'conflicts with reserved property name of Vue internal. ' + 'It may cause unexpected behavior of the component. Consider renaming the property.');\n    }\n\n    Object.defineProperty(Extended, key, descriptor);\n  });\n}\n\nfunction Component(options) {\n  if (typeof options === 'function') {\n    return componentFactory(options);\n  }\n\n  return function (Component) {\n    return componentFactory(Component, options);\n  };\n}\n\nComponent.registerHooks = function registerHooks(keys) {\n  $internalHooks.push.apply($internalHooks, _toConsumableArray(keys));\n};\n\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (Component);\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/boolean-checkbox.vue?vue&type=template&id=5ccd340a&\":\n/*!***************************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/boolean-checkbox.vue?vue&type=template&id=5ccd340a& ***!\n  \\***************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_473869__) {\n\n\"use strict\";\n__nested_webpack_require_473869__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_473869__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_473869__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\"div\", { class: _vm.question.cssClasses.rootCheckbox }, [\n    _c(\"div\", { class: _vm.question.getCheckboxItemCss() }, [\n      _c(\"label\", { class: _vm.question.cssClasses.checkboxLabel }, [\n        _c(\"input\", {\n          directives: [\n            {\n              name: \"model\",\n              rawName: \"v-model\",\n              value: _vm.question.booleanValue,\n              expression: \"question.booleanValue\",\n            },\n          ],\n          class: _vm.question.cssClasses.controlCheckbox,\n          attrs: {\n            type: \"checkbox\",\n            name: _vm.question.name,\n            id: _vm.question.inputId,\n            disabled: _vm.question.isInputReadOnly,\n            \"aria-required\": _vm.question.ariaRequired,\n            \"aria-label\": _vm.question.ariaLabel,\n            \"aria-invalid\": _vm.question.ariaInvalid,\n            \"aria-describedby\": _vm.question.ariaDescribedBy,\n          },\n          domProps: {\n            value: _vm.question.booleanValue,\n            indeterminate: _vm.question.isIndeterminate,\n            checked: Array.isArray(_vm.question.booleanValue)\n              ? _vm._i(_vm.question.booleanValue, _vm.question.booleanValue) >\n                -1\n              : _vm.question.booleanValue,\n          },\n          on: {\n            change: function ($event) {\n              var $$a = _vm.question.booleanValue,\n                $$el = $event.target,\n                $$c = $$el.checked ? true : false\n              if (Array.isArray($$a)) {\n                var $$v = _vm.question.booleanValue,\n                  $$i = _vm._i($$a, $$v)\n                if ($$el.checked) {\n                  $$i < 0 &&\n                    _vm.$set(_vm.question, \"booleanValue\", $$a.concat([$$v]))\n                } else {\n                  $$i > -1 &&\n                    _vm.$set(\n                      _vm.question,\n                      \"booleanValue\",\n                      $$a.slice(0, $$i).concat($$a.slice($$i + 1))\n                    )\n                }\n              } else {\n                _vm.$set(_vm.question, \"booleanValue\", $$c)\n              }\n            },\n          },\n        }),\n        _c(\n          \"span\",\n          { class: _vm.question.cssClasses.checkboxMaterialDecorator },\n          [\n            _vm.question.svgIcon\n              ? _c(\n                  \"svg\",\n                  { class: _vm.question.cssClasses.checkboxItemDecorator },\n                  [_c(\"use\", { attrs: { \"xlink:href\": _vm.question.svgIcon } })]\n                )\n              : _vm._e(),\n            _c(\"span\", { staticClass: \"check\" }),\n          ]\n        ),\n        _vm.question.isLabelRendered\n          ? _c(\n              \"span\",\n              {\n                class: _vm.question.cssClasses.checkboxControlLabel,\n                attrs: { id: _vm.question.labelRenderedAriaID },\n              },\n              [\n                !_vm.question.hasTitleActions\n                  ? _c(\"survey-element-title-content\", {\n                      attrs: { element: _vm.question, css: _vm.css },\n                    })\n                  : _vm._e(),\n                _vm._v(\" \"),\n                _vm.question.hasTitleActions\n                  ? _c(\"sv-title-actions\", {\n                      attrs: { element: _vm.question, css: _vm.css },\n                    })\n                  : _vm._e(),\n              ],\n              1\n            )\n          : _vm._e(),\n      ]),\n      _vm._v(\" \"),\n      _vm.question.canRenderLabelDescription\n        ? _c(\n            \"div\",\n            { class: _vm.question.cssDescription },\n            [\n              _c(\"survey-string\", {\n                attrs: { locString: _vm.question.locDescription },\n              }),\n            ],\n            1\n          )\n        : _vm._e(),\n    ]),\n  ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/boolean-radio-item.vue?vue&type=template&id=7889d5a8&\":\n/*!*****************************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/boolean-radio-item.vue?vue&type=template&id=7889d5a8& ***!\n  \\*****************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_479014__) {\n\n\"use strict\";\n__nested_webpack_require_479014__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_479014__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_479014__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    {\n      class: _vm.question.getRadioItemClass(_vm.question.cssClasses, _vm.value),\n      attrs: { role: \"presentation\" },\n    },\n    [\n      _c(\"label\", { class: _vm.question.cssClasses.radioLabel }, [\n        _c(\"input\", {\n          class: _vm.question.cssClasses.itemRadioControl,\n          attrs: {\n            type: \"radio\",\n            name: _vm.question.name,\n            \"aria-describedby\": _vm.question.ariaDescribedBy,\n            disabled: _vm.question.isInputReadOnly,\n          },\n          domProps: {\n            value: _vm.value,\n            checked: _vm.value === _vm.question.booleanValueRendered,\n          },\n          on: { change: _vm.handleChange },\n        }),\n        _vm._v(\" \"),\n        _vm.question.cssClasses.materialRadioDecorator\n          ? _c(\n              \"span\",\n              { class: _vm.question.cssClasses.materialRadioDecorator },\n              [\n                _vm.question.itemSvgIcon\n                  ? _c(\n                      \"svg\",\n                      { class: _vm.question.cssClasses.itemRadioDecorator },\n                      [\n                        _c(\"use\", {\n                          attrs: { \"xlink:href\": _vm.question.itemSvgIcon },\n                        }),\n                      ]\n                    )\n                  : _vm._e(),\n              ]\n            )\n          : _vm._e(),\n        _vm._v(\" \"),\n        _c(\n          \"span\",\n          { class: _vm.question.cssClasses.radioControlLabel },\n          [_c(\"survey-string\", { attrs: { locString: _vm.locText } })],\n          1\n        ),\n      ]),\n    ]\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/boolean-radio.vue?vue&type=template&id=4a238f78&\":\n/*!************************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/boolean-radio.vue?vue&type=template&id=4a238f78& ***!\n  \\************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_481980__) {\n\n\"use strict\";\n__nested_webpack_require_481980__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_481980__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_481980__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\"div\", { class: _vm.question.cssClasses.rootRadio }, [\n    _c(\n      \"fieldset\",\n      {\n        class: _vm.question.cssClasses.radioFieldset,\n        attrs: { role: \"presentation\" },\n      },\n      [\n        _c(\"sv-boolean-radio-item\", {\n          key: false,\n          attrs: {\n            question: _vm.question,\n            locText: _vm.question.locLabelFalse,\n            value: false,\n          },\n        }),\n        _vm._v(\" \"),\n        _c(\"sv-boolean-radio-item\", {\n          key: true,\n          attrs: {\n            question: _vm.question,\n            locText: _vm.question.locLabelTrue,\n            value: true,\n          },\n        }),\n      ],\n      1\n    ),\n  ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/boolean-switch.vue?vue&type=template&id=70e4aebb&\":\n/*!*************************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/boolean-switch.vue?vue&type=template&id=70e4aebb& ***!\n  \\*************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_484031__) {\n\n\"use strict\";\n__nested_webpack_require_484031__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_484031__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_484031__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    {\n      class: _vm.question.cssClasses.root,\n      on: {\n        keydown: function ($event) {\n          return _vm.question.onKeyDownCore($event)\n        },\n      },\n    },\n    [\n      _c(\"label\", { class: _vm.question.getItemCss() }, [\n        _c(\"input\", {\n          directives: [\n            {\n              name: \"model\",\n              rawName: \"v-model\",\n              value: _vm.question.booleanValue,\n              expression: \"question.booleanValue\",\n            },\n          ],\n          class: _vm.question.cssClasses.control,\n          attrs: {\n            type: \"checkbox\",\n            name: _vm.question.name,\n            id: _vm.question.inputId,\n            disabled: _vm.question.isInputReadOnly,\n            \"aria-required\": _vm.question.ariaRequired,\n            \"aria-label\": _vm.question.ariaLabel,\n            \"aria-invalid\": _vm.question.ariaInvalid,\n            \"aria-describedby\": _vm.question.ariaDescribedBy,\n          },\n          domProps: {\n            value: _vm.question.booleanValue,\n            indeterminate: _vm.question.isIndeterminate,\n            checked: Array.isArray(_vm.question.booleanValue)\n              ? _vm._i(_vm.question.booleanValue, _vm.question.booleanValue) >\n                -1\n              : _vm.question.booleanValue,\n          },\n          on: {\n            change: function ($event) {\n              var $$a = _vm.question.booleanValue,\n                $$el = $event.target,\n                $$c = $$el.checked ? true : false\n              if (Array.isArray($$a)) {\n                var $$v = _vm.question.booleanValue,\n                  $$i = _vm._i($$a, $$v)\n                if ($$el.checked) {\n                  $$i < 0 &&\n                    _vm.$set(_vm.question, \"booleanValue\", $$a.concat([$$v]))\n                } else {\n                  $$i > -1 &&\n                    _vm.$set(\n                      _vm.question,\n                      \"booleanValue\",\n                      $$a.slice(0, $$i).concat($$a.slice($$i + 1))\n                    )\n                }\n              } else {\n                _vm.$set(_vm.question, \"booleanValue\", $$c)\n              }\n            },\n          },\n        }),\n        _vm._v(\" \"),\n        _c(\n          \"div\",\n          {\n            class: _vm.question.cssClasses.sliderGhost,\n            on: {\n              click: function ($event) {\n                return _vm.onLabelClick($event, false)\n              },\n            },\n          },\n          [\n            _c(\n              \"span\",\n              { class: _vm.question.getLabelCss(false) },\n              [\n                _c(\"survey-string\", {\n                  attrs: { locString: _vm.question.locLabelFalse },\n                }),\n              ],\n              1\n            ),\n          ]\n        ),\n        _vm._v(\" \"),\n        _c(\n          \"div\",\n          {\n            class: _vm.question.cssClasses.switch,\n            on: {\n              click: function ($event) {\n                return _vm.onSwitchClick($event)\n              },\n            },\n          },\n          [\n            _c(\"span\", { class: _vm.question.cssClasses.slider }, [\n              _vm.question.cssClasses.sliderText && _vm.question.isDeterminated\n                ? _c(\n                    \"span\",\n                    { class: _vm.question.cssClasses.sliderText },\n                    [\n                      _c(\"survey-string\", {\n                        attrs: { locString: _vm.question.getCheckedLabel() },\n                      }),\n                    ],\n                    1\n                  )\n                : _vm._e(),\n            ]),\n          ]\n        ),\n        _vm._v(\" \"),\n        _c(\n          \"div\",\n          {\n            class: _vm.question.cssClasses.sliderGhost,\n            on: {\n              click: function ($event) {\n                return _vm.onLabelClick($event, true)\n              },\n            },\n          },\n          [\n            _c(\n              \"span\",\n              { class: _vm.question.getLabelCss(true) },\n              [\n                _c(\"survey-string\", {\n                  attrs: { locString: _vm.question.locLabelTrue },\n                }),\n              ],\n              1\n            ),\n          ]\n        ),\n      ]),\n    ]\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/buttongroup.vue?vue&type=template&id=6bdc7abb&\":\n/*!**********************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/buttongroup.vue?vue&type=template&id=6bdc7abb& ***!\n  \\**********************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_489632__) {\n\n\"use strict\";\n__nested_webpack_require_489632__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_489632__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_489632__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    { class: _vm.question.cssClasses.root, attrs: { role: \"group\" } },\n    [\n      _vm._l(_vm.question.visibleChoices, function (item, index) {\n        return [\n          _c(\"sv-button-group-item\", {\n            key: _vm.question.inputId + \"_\" + index,\n            attrs: { item: item, question: _vm.question, index: index },\n          }),\n        ]\n      }),\n    ],\n    2\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/buttongroupitem.vue?vue&type=template&id=4bad6ace&\":\n/*!**************************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/buttongroupitem.vue?vue&type=template&id=4bad6ace& ***!\n  \\**************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_491398__) {\n\n\"use strict\";\n__nested_webpack_require_491398__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_491398__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_491398__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"label\",\n    {\n      class: _vm.model.css.label,\n      attrs: { title: _vm.model.caption.renderedHtml },\n    },\n    [\n      _c(\"input\", {\n        directives: [\n          {\n            name: \"model\",\n            rawName: \"v-model\",\n            value: _vm.model.question.renderedValue,\n            expression: \"model.question.renderedValue\",\n          },\n        ],\n        class: _vm.model.css.control,\n        attrs: {\n          type: \"radio\",\n          name: _vm.model.name,\n          id: _vm.model.id,\n          role: \"radio\",\n          \"aria-required\": _vm.model.isRequired,\n          \"aria-label\": _vm.model.caption.renderedHtml,\n          \"aria-invalid\": _vm.model.hasErrors,\n          \"aria-describedby\": _vm.model.describedBy,\n          disabled: _vm.model.readOnly,\n        },\n        domProps: {\n          value: _vm.model.value,\n          checked: _vm._q(_vm.model.question.renderedValue, _vm.model.value),\n        },\n        on: {\n          change: function ($event) {\n            return _vm.$set(\n              _vm.model.question,\n              \"renderedValue\",\n              _vm.model.value\n            )\n          },\n        },\n      }),\n      _vm._v(\" \"),\n      _c(\n        \"div\",\n        { class: _vm.model.css.decorator },\n        [\n          !!_vm.model.iconName\n            ? _c(\"sv-svg-icon\", {\n                class: _vm.model.css.icon,\n                attrs: {\n                  iconName: _vm.model.iconName,\n                  size: _vm.model.iconSize,\n                },\n              })\n            : _vm._e(),\n          _vm._v(\" \"),\n          _vm.model.showCaption\n            ? _c(\n                \"span\",\n                { class: _vm.model.css.caption },\n                [\n                  _c(\"survey-string\", {\n                    attrs: { locString: _vm.model.caption },\n                  }),\n                ],\n                1\n              )\n            : _vm._e(),\n        ],\n        1\n      ),\n    ]\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/checkbox.vue?vue&type=template&id=cad276f6&\":\n/*!*******************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/checkbox.vue?vue&type=template&id=cad276f6& ***!\n  \\*******************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_494692__) {\n\n\"use strict\";\n__nested_webpack_require_494692__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_494692__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_494692__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"fieldset\",\n    {\n      class: _vm.question.getSelectBaseRootCss(),\n      attrs: {\n        role: _vm.question.a11y_input_ariaRole,\n        \"aria-required\": _vm.question.a11y_input_ariaRequired,\n        \"aria-label\": _vm.question.a11y_input_ariaLabel,\n        \"aria-labelledby\": _vm.question.a11y_input_ariaLabelledBy,\n        \"aria-invalid\": _vm.question.a11y_input_ariaInvalid,\n        \"aria-describedby\": _vm.question.a11y_input_ariaDescribedBy,\n      },\n    },\n    [\n      _c(\"legend\", {\n        staticClass: \"sv-hidden\",\n        attrs: { role: \"presentation\" },\n      }),\n      _vm._v(\" \"),\n      _vm._l(_vm.question.headItems, function (item, index) {\n        return _vm.question.hasHeadItems\n          ? _c(\"survey-checkbox-item\", {\n              key: item.value,\n              class: _vm.question.getItemClass(item),\n              attrs: { question: _vm.question, item: item, index: \"\" + index },\n            })\n          : _vm._e()\n      }),\n      _vm._v(\" \"),\n      _vm._l(_vm.question.bodyItems, function (item, index) {\n        return !_vm.question.hasColumns && !_vm.question.blockedRow\n          ? _c(\"survey-checkbox-item\", {\n              key: item.value,\n              class: _vm.question.getItemClass(item),\n              attrs: { question: _vm.question, item: item, index: index },\n            })\n          : _vm._e()\n      }),\n      _vm._v(\" \"),\n      _vm.question.blockedRow\n        ? _c(\n            \"div\",\n            { class: _vm.question.cssClasses.rootRow },\n            _vm._l(_vm.question.dataChoices, function (item, index) {\n              return !_vm.question.hasColumns && _vm.question.blockedRow\n                ? _c(\"survey-checkbox-item\", {\n                    key: item.value,\n                    class: _vm.question.getItemClass(item),\n                    attrs: { question: _vm.question, item: item, index: index },\n                  })\n                : _vm._e()\n            }),\n            1\n          )\n        : _vm._e(),\n      _vm._v(\" \"),\n      _vm.question.hasColumns\n        ? _c(\n            \"div\",\n            { class: _vm.question.cssClasses.rootMultiColumn },\n            _vm._l(_vm.question.columns, function (column, colIndex) {\n              return _c(\n                \"div\",\n                {\n                  class: _vm.question.getColumnClass(),\n                  attrs: { role: \"presentation\" },\n                },\n                _vm._l(column, function (item, index) {\n                  return _c(\"survey-checkbox-item\", {\n                    key: item.value,\n                    class: _vm.question.getItemClass(item),\n                    attrs: {\n                      question: _vm.question,\n                      item: item,\n                      index: \"\" + colIndex + index,\n                    },\n                  })\n                }),\n                1\n              )\n            }),\n            0\n          )\n        : _vm._e(),\n      _vm._v(\" \"),\n      _vm._l(_vm.question.footItems, function (item, index) {\n        return _vm.question.hasFootItems\n          ? _c(\"survey-checkbox-item\", {\n              key: item.value,\n              class: _vm.question.getItemClass(item),\n              attrs: { question: _vm.question, item: item, index: \"\" + index },\n            })\n          : _vm._e()\n      }),\n      _vm._v(\" \"),\n      _vm.question.renderedValue && _vm.question.isOtherSelected\n        ? _c(\"survey-other-choice\", { attrs: { question: _vm.question } })\n        : _vm._e(),\n    ],\n    2\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/checkboxitem.vue?vue&type=template&id=c58c80d0&\":\n/*!***********************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/checkboxitem.vue?vue&type=template&id=c58c80d0& ***!\n  \\***********************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_499531__) {\n\n\"use strict\";\n__nested_webpack_require_499531__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_499531__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_499531__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\"div\", { attrs: { role: \"presentation\" } }, [\n    _c(\"label\", { class: _vm.question.getLabelClass(_vm.item) }, [\n      _vm.item == _vm.question.selectAllItem\n        ? _c(\"input\", {\n            directives: [\n              {\n                name: \"model\",\n                rawName: \"v-model\",\n                value: _vm.isAllSelected,\n                expression: \"isAllSelected\",\n              },\n            ],\n            class: _vm.question.cssClasses.itemControl,\n            attrs: {\n              type: \"checkbox\",\n              name: _vm.question.name,\n              id: _vm.question.getItemId(_vm.item),\n              disabled: !_vm.question.getItemEnabled(_vm.item),\n            },\n            domProps: {\n              value: _vm.isAllSelected,\n              checked: Array.isArray(_vm.isAllSelected)\n                ? _vm._i(_vm.isAllSelected, _vm.isAllSelected) > -1\n                : _vm.isAllSelected,\n            },\n            on: {\n              change: function ($event) {\n                var $$a = _vm.isAllSelected,\n                  $$el = $event.target,\n                  $$c = $$el.checked ? true : false\n                if (Array.isArray($$a)) {\n                  var $$v = _vm.isAllSelected,\n                    $$i = _vm._i($$a, $$v)\n                  if ($$el.checked) {\n                    $$i < 0 && (_vm.isAllSelected = $$a.concat([$$v]))\n                  } else {\n                    $$i > -1 &&\n                      (_vm.isAllSelected = $$a\n                        .slice(0, $$i)\n                        .concat($$a.slice($$i + 1)))\n                  }\n                } else {\n                  _vm.isAllSelected = $$c\n                }\n              },\n            },\n          })\n        : _vm._e(),\n      _vm._v(\" \"),\n      _vm.item != _vm.question.selectAllItem\n        ? _c(\"input\", {\n            directives: [\n              {\n                name: \"model\",\n                rawName: \"v-model\",\n                value: _vm.question.renderedValue,\n                expression: \"question.renderedValue\",\n              },\n            ],\n            class: _vm.question.cssClasses.itemControl,\n            attrs: {\n              type: \"checkbox\",\n              name: _vm.question.name,\n              id: _vm.question.getItemId(_vm.item),\n              disabled: !_vm.question.getItemEnabled(_vm.item),\n            },\n            domProps: {\n              value: _vm.item.value,\n              checked: Array.isArray(_vm.question.renderedValue)\n                ? _vm._i(_vm.question.renderedValue, _vm.item.value) > -1\n                : _vm.question.renderedValue,\n            },\n            on: {\n              change: function ($event) {\n                var $$a = _vm.question.renderedValue,\n                  $$el = $event.target,\n                  $$c = $$el.checked ? true : false\n                if (Array.isArray($$a)) {\n                  var $$v = _vm.item.value,\n                    $$i = _vm._i($$a, $$v)\n                  if ($$el.checked) {\n                    $$i < 0 &&\n                      _vm.$set(_vm.question, \"renderedValue\", $$a.concat([$$v]))\n                  } else {\n                    $$i > -1 &&\n                      _vm.$set(\n                        _vm.question,\n                        \"renderedValue\",\n                        $$a.slice(0, $$i).concat($$a.slice($$i + 1))\n                      )\n                  }\n                } else {\n                  _vm.$set(_vm.question, \"renderedValue\", $$c)\n                }\n              },\n            },\n          })\n        : _vm._e(),\n      _vm.question.cssClasses.materialDecorator\n        ? _c(\"span\", { class: _vm.question.cssClasses.materialDecorator }, [\n            _vm.question.itemSvgIcon\n              ? _c(\"svg\", { class: _vm.question.cssClasses.itemDecorator }, [\n                  _c(\"use\", {\n                    attrs: { \"xlink:href\": _vm.question.itemSvgIcon },\n                  }),\n                ])\n              : _vm._e(),\n          ])\n        : _vm._e(),\n      !_vm.hideLabel\n        ? _c(\n            \"span\",\n            { class: _vm.question.cssClasses.controlLabel },\n            [_c(\"survey-string\", { attrs: { locString: _vm.item.locText } })],\n            1\n          )\n        : _vm._e(),\n    ]),\n  ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/comment.vue?vue&type=template&id=099c2c8d&\":\n/*!******************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/comment.vue?vue&type=template&id=099c2c8d& ***!\n  \\******************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_505119__) {\n\n\"use strict\";\n__nested_webpack_require_505119__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_505119__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_505119__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return !_vm.question.isReadOnlyRenderDiv() && !_vm.question.getMaxLength()\n    ? _c(\"textarea\", {\n        class: _vm.question.className,\n        style: { resize: _vm.question.resizeStyle },\n        attrs: {\n          readonly: _vm.question.isInputReadOnly,\n          disabled: _vm.question.renderedInputDisabled,\n          id: _vm.question.inputId,\n          maxlength: _vm.question.getMaxLength(),\n          cols: _vm.question.cols,\n          rows: _vm.question.rows,\n          placeholder: _vm.question.renderedPlaceholder,\n          \"aria-required\": _vm.question.a11y_input_ariaRequired,\n          \"aria-label\": _vm.question.a11y_input_ariaLabel,\n          \"aria-labelledby\": _vm.question.a11y_input_ariaLabelledBy,\n          \"aria-invalid\": _vm.question.a11y_input_ariaInvalid,\n          \"aria-describedby\": _vm.question.a11y_input_ariaDescribedBy,\n        },\n        domProps: { value: _vm.question.value },\n        on: {\n          change: _vm.change,\n          input: function (e) {\n            _vm.question.onInput(e)\n          },\n          keydown: function (e) {\n            _vm.question.onKeyDown(e)\n          },\n        },\n      })\n    : !_vm.question.isReadOnlyRenderDiv() && _vm.question.getMaxLength()\n    ? _c(\n        \"div\",\n        [\n          _c(\"textarea\", {\n            class: _vm.question.className,\n            style: { resize: _vm.question.resizeStyle },\n            attrs: {\n              readonly: _vm.question.isInputReadOnly,\n              disabled: _vm.question.renderedInputDisabled,\n              id: _vm.question.inputId,\n              maxlength: _vm.question.getMaxLength(),\n              cols: _vm.question.cols,\n              rows: _vm.question.rows,\n              placeholder: _vm.question.renderedPlaceholder,\n              \"aria-required\": _vm.question.a11y_input_ariaRequired,\n              \"aria-label\": _vm.question.a11y_input_ariaLabel,\n              \"aria-labelledby\": _vm.question.a11y_input_ariaLabelledBy,\n              \"aria-invalid\": _vm.question.a11y_input_ariaInvalid,\n              \"aria-describedby\": _vm.question.a11y_input_ariaDescribedBy,\n            },\n            domProps: { value: _vm.question.value },\n            on: {\n              change: _vm.change,\n              input: function (e) {\n                _vm.question.onInput(e)\n              },\n              keydown: function (e) {\n                _vm.question.onKeyDown(e)\n              },\n            },\n          }),\n          _vm._v(\" \"),\n          _c(\"sv-character-counter\", {\n            attrs: {\n              counter: _vm.question.characterCounter,\n              remainingCharacterCounter:\n                _vm.question.cssClasses.remainingCharacterCounter,\n            },\n          }),\n        ],\n        1\n      )\n    : _c(\"div\", [_vm._v(_vm._s(_vm.question.value))])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action-bar-item-dropdown.vue?vue&type=template&id=4ca4f276&\":\n/*!*********************************************************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/action-bar/action-bar-item-dropdown.vue?vue&type=template&id=4ca4f276& ***!\n  \\*********************************************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_509399__) {\n\n\"use strict\";\n__nested_webpack_require_509399__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_509399__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_509399__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    { staticStyle: { width: \"100%\" } },\n    [\n      _c(\n        \"button\",\n        {\n          class: _vm.item.getActionBarItemCss(),\n          attrs: {\n            type: \"button\",\n            disabled: _vm.item.enabled !== undefined && _vm.item.enabled,\n            title: _vm.item.tooltip || _vm.item.title,\n            role: _vm.item.ariaRole,\n            tabindex: _vm.item.disableTabStop ? -1 : 0,\n          },\n          on: {\n            click: function (args) {\n              _vm.item.action(_vm.item, !!args.pointerType)\n            },\n            keyup: function (evt) {\n              evt.stopPropagation()\n            },\n          },\n        },\n        [\n          _vm.item.iconName\n            ? _c(\"sv-svg-icon\", {\n                class: _vm.item.cssClasses.itemIcon,\n                attrs: {\n                  iconName: _vm.item.iconName,\n                  size: _vm.item.iconSize,\n                  title: _vm.item.tooltip || _vm.item.title,\n                },\n              })\n            : _vm._e(),\n          _vm._v(\" \"),\n          _vm.item.hasTitle\n            ? _c(\"span\", { class: _vm.item.getActionBarItemTitleCss() }, [\n                _vm._v(_vm._s(_vm.item.title)),\n              ])\n            : _vm._e(),\n        ],\n        1\n      ),\n      _vm._v(\" \"),\n      _c(\"sv-popup\", {\n        attrs: { model: _vm.item.popupModel, getTarget: _vm.getTarget },\n      }),\n    ],\n    1\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action-bar-item.vue?vue&type=template&id=40a056f8&\":\n/*!************************************************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/action-bar/action-bar-item.vue?vue&type=template&id=40a056f8& ***!\n  \\************************************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_512278__) {\n\n\"use strict\";\n__nested_webpack_require_512278__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_512278__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_512278__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"button\",\n    {\n      class: _vm.item.getActionBarItemCss(),\n      attrs: {\n        type: \"button\",\n        disabled: _vm.item.enabled !== undefined && !_vm.item.enabled,\n        title: _vm.item.tooltip || _vm.item.title,\n        \"aria-checked\": _vm.item.ariaChecked,\n        \"aria-expanded\": _vm.item.ariaExpanded,\n        role: _vm.item.ariaRole,\n        tabindex: _vm.item.disableTabStop ? -1 : 0,\n      },\n      on: {\n        click: function (args) {\n          _vm.item.action(_vm.item, !!args.pointerType)\n        },\n        keyup: function (evt) {\n          evt.stopPropagation()\n        },\n      },\n    },\n    [\n      _vm.item.iconName\n        ? _c(\"sv-svg-icon\", {\n            class: _vm.item.cssClasses.itemIcon,\n            attrs: {\n              iconName: _vm.item.iconName,\n              size: _vm.item.iconSize,\n              title: _vm.item.tooltip || _vm.item.title,\n            },\n          })\n        : _vm._e(),\n      _vm._v(\" \"),\n      _vm.item.hasTitle\n        ? _c(\"span\", { class: _vm.item.getActionBarItemTitleCss() }, [\n            _vm._v(_vm._s(_vm.item.title)),\n          ])\n        : _vm._e(),\n    ],\n    1\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action-bar-separator.vue?vue&type=template&id=1aab6850&\":\n/*!*****************************************************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/action-bar/action-bar-separator.vue?vue&type=template&id=1aab6850& ***!\n  \\*****************************************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_514906__) {\n\n\"use strict\";\n__nested_webpack_require_514906__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_514906__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_514906__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\"div\", {\n    staticClass: \"sv-action-bar-separator\",\n    class: _vm.innerCss,\n  })\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action-bar.vue?vue&type=template&id=313bf210&\":\n/*!*******************************************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/action-bar/action-bar.vue?vue&type=template&id=313bf210& ***!\n  \\*******************************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_516434__) {\n\n\"use strict\";\n__nested_webpack_require_516434__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_516434__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_516434__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _vm.model.hasActions\n    ? _c(\n        \"div\",\n        {\n          ref: \"container\",\n          class: _vm.model.getRootCss(),\n          on: {\n            click: function (event) {\n              event.stopPropagation()\n            },\n          },\n        },\n        _vm._l(_vm.model.renderedActions, function (item) {\n          return _c(\"sv-action\", { key: item.id, attrs: { item: item } })\n        }),\n        1\n      )\n    : _vm._e()\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action.vue?vue&type=template&id=2fe54632&\":\n/*!***************************************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/action-bar/action.vue?vue&type=template&id=2fe54632& ***!\n  \\***************************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_518295__) {\n\n\"use strict\";\n__nested_webpack_require_518295__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_518295__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_518295__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    { class: _vm.item.getActionRootCss(), attrs: { id: _vm.item.id } },\n    [\n      _c(\n        \"div\",\n        { staticClass: \"sv-action__content\" },\n        [\n          _vm.item.needSeparator ? _c(\"sv-action-bar-separator\") : _vm._e(),\n          _vm._v(\" \"),\n          _c(_vm.getComponentName(), {\n            tag: \"component\",\n            attrs: { item: _vm.item },\n          }),\n        ],\n        1\n      ),\n    ]\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/brand-info.vue?vue&type=template&id=2616b47b&\":\n/*!********************************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/brand-info.vue?vue&type=template&id=2616b47b& ***!\n  \\********************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_520130__) {\n\n\"use strict\";\n__nested_webpack_require_520130__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_520130__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_520130__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _vm._m(0)\n}\nvar staticRenderFns = [\n  function () {\n    var _vm = this\n    var _h = _vm.$createElement\n    var _c = _vm._self._c || _h\n    return _c(\"div\", { staticClass: \"sv-brand-info\" }, [\n      _c(\n        \"a\",\n        {\n          staticClass: \"sv-brand-info__logo\",\n          attrs: {\n            href: \"https://surveyjs.io/?utm_source=built-in_links&utm_medium=online_survey_tool&utm_campaign=landing_page\",\n          },\n        },\n        [\n          _c(\"img\", {\n            attrs: { src: \"https://surveyjs.io/Content/Images/poweredby.svg\" },\n          }),\n        ]\n      ),\n      _vm._v(\" \"),\n      _c(\"div\", { staticClass: \"sv-brand-info__text\" }, [\n        _vm._v(\"Try and see how easy it is to \"),\n        _c(\n          \"a\",\n          {\n            attrs: {\n              href: \"https://surveyjs.io/create-survey?utm_source=built-in_links&utm_medium=online_survey_tool&utm_campaign=create_survey\",\n            },\n          },\n          [_vm._v(\"create a survey\")]\n        ),\n      ]),\n      _vm._v(\" \"),\n      _c(\"div\", { staticClass: \"sv-brand-info__terms\" }, [\n        _c(\"a\", { attrs: { href: \"https://surveyjs.io/TermsOfUse\" } }, [\n          _vm._v(\"Terms of Use & Privacy Statement\"),\n        ]),\n      ]),\n    ])\n  },\n]\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/character-counter.vue?vue&type=template&id=7c80ca61&\":\n/*!***************************************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/character-counter.vue?vue&type=template&id=7c80ca61& ***!\n  \\***************************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_522767__) {\n\n\"use strict\";\n__nested_webpack_require_522767__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_522767__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_522767__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\"div\", { class: _vm.remainingCharacterCounter }, [\n    _vm._v(_vm._s(_vm.counter.remainingCharacterCounter)),\n  ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/container.vue?vue&type=template&id=2b44a00a&\":\n/*!*******************************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/container.vue?vue&type=template&id=2b44a00a& ***!\n  \\*******************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_524279__) {\n\n\"use strict\";\n__nested_webpack_require_524279__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_524279__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_524279__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _vm.components.length > 0\n    ? _c(\n        \"div\",\n        { staticClass: \"sv-components-column\" },\n        [\n          _vm._l(_vm.components, function (component, index) {\n            return [\n              _c(component.component, {\n                tag: \"component\",\n                attrs: {\n                  survey: _vm.survey,\n                  container: _vm.container,\n                  model: component.data,\n                },\n              }),\n            ]\n          }),\n        ],\n        2\n      )\n    : _vm._e()\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/cover/cover-cell.vue?vue&type=template&id=36297717&\":\n/*!**************************************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/cover/cover-cell.vue?vue&type=template&id=36297717& ***!\n  \\**************************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_526226__) {\n\n\"use strict\";\n__nested_webpack_require_526226__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_526226__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_526226__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\"div\", { class: _vm.model.css, style: _vm.model.style }, [\n    _c(\n      \"div\",\n      { staticClass: \"sv-cover__cell-content\", style: _vm.model.contentStyle },\n      [\n        _vm.model.showLogo\n          ? _c(\"div\", { staticClass: \"sv-cover__logo\" }, [\n              _c(\"div\", { class: _vm.model.survey.logoClassNames }, [\n                _c(\"img\", {\n                  class: _vm.model.survey.css.logoImage,\n                  style: {\n                    objectFit: _vm.model.survey.logoFit,\n                    width: _vm.model.survey.renderedStyleLogoWidth,\n                    height: _vm.model.survey.renderedStyleLogoHeight,\n                  },\n                  attrs: {\n                    src: _vm.model.survey.locLogo.renderedHtml,\n                    width: _vm.model.survey.renderedLogoWidth,\n                    height: _vm.model.survey.renderedLogoHeight,\n                    alt: _vm.model.survey.locTitle.renderedHtml,\n                  },\n                }),\n              ]),\n            ])\n          : _vm._e(),\n        _vm._v(\" \"),\n        _vm.model.showTitle\n          ? _c(\n              \"div\",\n              {\n                staticClass: \"sv-cover__title\",\n                style: { maxWidth: _vm.model.textWidth },\n              },\n              [\n                _c(\"survey-element-title\", {\n                  attrs: {\n                    element: _vm.model.survey,\n                    css: _vm.model.survey.css,\n                  },\n                }),\n              ],\n              1\n            )\n          : _vm._e(),\n        _vm._v(\" \"),\n        _vm.model.showDescription\n          ? _c(\n              \"div\",\n              {\n                staticClass: \"sv-cover__description\",\n                style: { maxWidth: _vm.model.textWidth },\n              },\n              [\n                _vm.model.survey.renderedHasDescription\n                  ? _c(\n                      \"h5\",\n                      { class: _vm.model.survey.css.description },\n                      [\n                        _c(\"survey-string\", {\n                          attrs: { locString: _vm.model.survey.locDescription },\n                        }),\n                      ],\n                      1\n                    )\n                  : _vm._e(),\n              ]\n            )\n          : _vm._e(),\n      ]\n    ),\n  ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/cover/cover.vue?vue&type=template&id=4e62b8b0&\":\n/*!*********************************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/cover/cover.vue?vue&type=template&id=4e62b8b0& ***!\n  \\*********************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_529960__) {\n\n\"use strict\";\n__nested_webpack_require_529960__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_529960__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_529960__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    {\n      class: _vm.model.coverClasses,\n      style: {\n        height: _vm.model.renderedHeight,\n        backgroundColor: _vm.model.backgroundColor,\n      },\n    },\n    [\n      !!_vm.model.backgroundImage\n        ? _c(\"div\", {\n            class: _vm.model.backgroundImageClasses,\n            style: _vm.model.backgroundImageStyle,\n          })\n        : _vm._e(),\n      _vm._v(\" \"),\n      _c(\n        \"div\",\n        { class: _vm.model.contentClasses },\n        _vm._l(_vm.model.cells, function (cell) {\n          return _c(\"sv-cover-cell\", { attrs: { model: cell } })\n        }),\n        1\n      ),\n    ]\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/dropdown/dropdown.vue?vue&type=template&id=361fc050&\":\n/*!***************************************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/dropdown/dropdown.vue?vue&type=template&id=361fc050& ***!\n  \\***************************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_532013__) {\n\n\"use strict\";\n__nested_webpack_require_532013__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_532013__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_532013__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    { class: _vm.question.cssClasses.selectWrapper, on: { click: _vm.click } },\n    [\n      !_vm.question.isReadOnly\n        ? _c(\n            \"div\",\n            {\n              class: _vm.question.getControlClass(),\n              attrs: {\n                id: _vm.question.inputId,\n                disabled: _vm.question.isInputReadOnly,\n                tabindex: _vm.model.inputReadOnly ? undefined : 0,\n                role: _vm.question.ariaRole,\n                \"aria-required\": _vm.question.ariaRequired,\n                \"aria-label\": _vm.question.ariaLabel,\n                \"aria-invalid\": _vm.question.ariaInvalid,\n                \"aria-describedby\": _vm.question.ariaDescribedBy,\n                \"aria-expanded\": _vm.question.ariaExpanded,\n                \"aria-controls\": _vm.model.listElementId,\n                \"aria-activedescendant\": _vm.model.ariaActivedescendant,\n                required: _vm.question.isRequired,\n              },\n              on: { keydown: _vm.keyhandler, blur: _vm.blur },\n            },\n            [\n              _vm.model.showHintPrefix\n                ? _c(\"div\", { class: _vm.question.cssClasses.hintPrefix }, [\n                    _c(\"span\", [_vm._v(_vm._s(_vm.model.hintStringPrefix))]),\n                  ])\n                : _vm._e(),\n              _vm._v(\" \"),\n              _c(\n                \"div\",\n                { class: _vm.question.cssClasses.controlValue },\n                [\n                  _vm.question.showSelectedItemLocText\n                    ? _c(\"survey-string\", {\n                        attrs: { locString: _vm.question.selectedItemLocText },\n                      })\n                    : _vm._e(),\n                  _vm._v(\" \"),\n                  _vm.model.showHintString\n                    ? _c(\"div\", { class: _vm.question.cssClasses.hintSuffix }, [\n                        _c(\"span\", { staticStyle: { visibility: \"hidden\" } }, [\n                          _vm._v(_vm._s(_vm.model.inputStringRendered)),\n                        ]),\n                        _vm._v(\" \"),\n                        _c(\"span\", [\n                          _vm._v(_vm._s(_vm.model.hintStringSuffix)),\n                        ]),\n                      ])\n                    : _vm._e(),\n                  _vm._v(\" \"),\n                  _vm.question.showInputFieldComponent\n                    ? _c(_vm.question.inputFieldComponentName, {\n                        tag: \"component\",\n                        attrs: {\n                          item: _vm.model.getSelectedAction(),\n                          question: _vm.question,\n                        },\n                      })\n                    : _vm._e(),\n                  _vm._v(\" \"),\n                  _c(\"input\", {\n                    ref: \"inputElement\",\n                    class: _vm.question.cssClasses.filterStringInput,\n                    attrs: {\n                      type: \"text\",\n                      disabled: _vm.question.isInputReadOnly,\n                      autocomplete: \"off\",\n                      inputmode: _vm.model.inputMode,\n                      role: _vm.model.filterStringEnabled\n                        ? _vm.question.ariaRole\n                        : null,\n                      id: _vm.question.getInputId(),\n                      tabindex: _vm.model.inputReadOnly ? undefined : -1,\n                      readonly: !_vm.model.searchEnabled ? true : null,\n                      \"aria-label\": _vm.question.placeholder,\n                      \"aria-expanded\": _vm.question.ariaExpanded,\n                      \"aria-controls\": _vm.model.listElementId,\n                      \"aria-activedescendant\": _vm.model.ariaActivedescendant,\n                      placeholder: _vm.model.placeholderRendered,\n                    },\n                    on: {\n                      input: _vm.inputChange,\n                      blur: _vm.blur,\n                      focus: _vm.focus,\n                    },\n                  }),\n                ],\n                1\n              ),\n              _vm._v(\" \"),\n              _vm.question.allowClear &&\n              _vm.question.cssClasses.cleanButtonIconId\n                ? _c(\n                    \"div\",\n                    {\n                      directives: [\n                        {\n                          name: \"show\",\n                          rawName: \"v-show\",\n                          value: !_vm.question.isEmpty(),\n                          expression: \"!question.isEmpty()\",\n                        },\n                      ],\n                      class: _vm.question.cssClasses.cleanButton,\n                      on: { click: _vm.clear },\n                    },\n                    [\n                      _c(\"sv-svg-icon\", {\n                        class: _vm.question.cssClasses.cleanButtonSvg,\n                        attrs: {\n                          iconName: _vm.question.cssClasses.cleanButtonIconId,\n                          title: _vm.question.clearCaption,\n                          size: \"auto\",\n                        },\n                      }),\n                    ],\n                    1\n                  )\n                : _vm._e(),\n            ]\n          )\n        : _vm._e(),\n      _vm._v(\" \"),\n      !_vm.question.isReadOnly\n        ? _c(\"sv-popup\", {\n            attrs: { model: _vm.question.dropdownListModel.popupModel },\n          })\n        : _c(\n            \"div\",\n            {\n              class: _vm.question.getControlClass(),\n              attrs: { disabled: \"\", id: _vm.question.inputId },\n            },\n            [\n              _vm.question.selectedItemLocText\n                ? _c(\"survey-string\", {\n                    attrs: { locString: _vm.question.selectedItemLocText },\n                  })\n                : _vm._e(),\n              _vm._v(\" \"),\n              _c(\"div\", [_vm._v(_vm._s(_vm.question.readOnlyText))]),\n            ],\n            1\n          ),\n      _vm._v(\" \"),\n      _vm.question.cssClasses.chevronButtonIconId\n        ? _c(\n            \"div\",\n            { class: _vm.question.cssClasses.chevronButton },\n            [\n              _c(\"sv-svg-icon\", {\n                class: _vm.question.cssClasses.chevronButtonSvg,\n                attrs: {\n                  iconName: _vm.question.cssClasses.chevronButtonIconId,\n                  size: \"auto\",\n                },\n              }),\n            ],\n            1\n          )\n        : _vm._e(),\n    ],\n    1\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/dropdown/option-item.vue?vue&type=template&id=36b56e74&\":\n/*!******************************************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/dropdown/option-item.vue?vue&type=template&id=36b56e74& ***!\n  \\******************************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_539886__) {\n\n\"use strict\";\n__nested_webpack_require_539886__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_539886__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_539886__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"option\",\n    {\n      attrs: { disabled: !_vm.item.isEnabled },\n      domProps: { value: _vm.item.value },\n    },\n    [_vm._v(_vm._s(_vm.item.text))]\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/file-actions/file-choose-button.vue?vue&type=template&id=729d1aa3&\":\n/*!*****************************************************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/file-actions/file-choose-button.vue?vue&type=template&id=729d1aa3& ***!\n  \\*****************************************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_541530__) {\n\n\"use strict\";\n__nested_webpack_require_541530__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_541530__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_541530__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return !_vm.question.isReadOnly\n    ? _c(\n        \"label\",\n        {\n          directives: [{ name: \"key2click\", rawName: \"v-key2click\" }],\n          class: _vm.question.getChooseFileCss(),\n          attrs: {\n            role: \"button\",\n            tabindex: \"0\",\n            for: _vm.question.inputId,\n            \"aria-label\": _vm.question.chooseButtonText,\n          },\n        },\n        [\n          _vm.question.cssClasses.chooseFileIconId\n            ? _c(\"sv-svg-icon\", {\n                attrs: {\n                  title: _vm.question.chooseButtonText,\n                  iconName: _vm.question.cssClasses.chooseFileIconId,\n                  size: \"auto\",\n                },\n              })\n            : _vm._e(),\n          _vm._v(\" \"),\n          _c(\"span\", [_vm._v(_vm._s(_vm.question.chooseButtonText))]),\n        ],\n        1\n      )\n    : _vm._e()\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/list/list-item.vue?vue&type=template&id=4fffcdf8&\":\n/*!************************************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/list/list-item.vue?vue&type=template&id=4fffcdf8& ***!\n  \\************************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_543797__) {\n\n\"use strict\";\n__nested_webpack_require_543797__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_543797__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_543797__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"li\",\n    {\n      directives: [\n        {\n          name: \"show\",\n          rawName: \"v-show\",\n          value: _vm.model.isItemVisible(_vm.item),\n          expression: \"model.isItemVisible(item)\",\n        },\n        { name: \"key2click\", rawName: \"v-key2click\" },\n      ],\n      key: _vm.item.id,\n      class: _vm.model.getItemClass(_vm.item),\n      attrs: {\n        tabindex: \"0\",\n        role: \"option\",\n        id: _vm.elementId,\n        \"aria-selected\": _vm.model.isItemSelected(_vm.item) ? \"true\" : \"false\",\n      },\n      on: { click: _vm.click },\n    },\n    [\n      _vm.item.needSeparator\n        ? _c(\"div\", { class: _vm.model.cssClasses.itemSeparator })\n        : _vm._e(),\n      _vm._v(\" \"),\n      _c(\n        \"div\",\n        {\n          class: _vm.model.cssClasses.itemBody,\n          style: { paddingInlineStart: _vm.model.getItemIndent(_vm.item) },\n        },\n        [\n          _vm.item.iconName && !_vm.item.component\n            ? _c(\"sv-svg-icon\", {\n                class: _vm.model.cssClasses.itemIcon,\n                attrs: { iconName: _vm.item.iconName, size: _vm.item.iconSize },\n              })\n            : _vm._e(),\n          _vm._v(\" \"),\n          !_vm.item.component\n            ? _c(\"survey-string\", { attrs: { locString: _vm.item.locTitle } })\n            : _vm._e(),\n          _vm._v(\" \"),\n          _vm.item.component\n            ? _c(_vm.item.component, {\n                tag: \"component\",\n                attrs: { item: _vm.item },\n              })\n            : _vm._e(),\n        ],\n        1\n      ),\n    ]\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/list/list.vue?vue&type=template&id=cc17a010&\":\n/*!*******************************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/list/list.vue?vue&type=template&id=cc17a010& ***!\n  \\*******************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_546747__) {\n\n\"use strict\";\n__nested_webpack_require_546747__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_546747__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_546747__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    { ref: \"listContainerElement\", class: _vm.model.cssClasses.root },\n    [\n      _vm.model.showFilter\n        ? _c(\"div\", { class: _vm.model.cssClasses.filter }, [\n            _c(\n              \"div\",\n              { class: _vm.model.cssClasses.filterIcon },\n              [\n                _c(\"sv-svg-icon\", {\n                  attrs: { iconName: \"icon-search\", size: \"auto\" },\n                }),\n              ],\n              1\n            ),\n            _vm._v(\" \"),\n            _c(\"input\", {\n              class: _vm.model.cssClasses.filterInput,\n              attrs: {\n                type: \"text\",\n                \"aria-label\": _vm.model.filterStringPlaceholder,\n                placeholder: _vm.model.filterStringPlaceholder,\n              },\n              domProps: { value: _vm.model.filterString },\n              on: { change: _vm.change, keyup: _vm.keyup },\n            }),\n            _vm._v(\" \"),\n            _vm.model.showSearchClearButton && !!_vm.model.filterString\n              ? _c(\n                  \"button\",\n                  {\n                    class: _vm.model.cssClasses.searchClearButtonIcon,\n                    on: {\n                      click: function (event) {\n                        _vm.model.onClickSearchClearButton(event)\n                      },\n                    },\n                  },\n                  [\n                    _c(\"sv-svg-icon\", {\n                      attrs: { iconName: \"icon-searchclear\", size: \"auto\" },\n                    }),\n                  ],\n                  1\n                )\n              : _vm._e(),\n          ])\n        : _vm._e(),\n      _vm._v(\" \"),\n      _c(\n        \"div\",\n        {\n          directives: [\n            {\n              name: \"show\",\n              rawName: \"v-show\",\n              value: _vm.model.isEmpty,\n              expression: \"model.isEmpty\",\n            },\n          ],\n          class: _vm.model.cssClasses.emptyContainer,\n        },\n        [\n          _c(\n            \"div\",\n            {\n              class: _vm.model.cssClasses.emptyText,\n              attrs: { \"aria-label\": _vm.model.emptyMessage },\n            },\n            [_vm._v(_vm._s(_vm.model.emptyMessage))]\n          ),\n        ]\n      ),\n      _vm._v(\" \"),\n      _vm.model.renderElements\n        ? _c(\n            \"ul\",\n            {\n              directives: [\n                {\n                  name: \"show\",\n                  rawName: \"v-show\",\n                  value: !_vm.model.isEmpty,\n                  expression: \"!model.isEmpty\",\n                },\n              ],\n              class: _vm.model.getListClass(),\n              attrs: { role: \"listbox\", id: _vm.model.elementId },\n              on: {\n                mousedown: function (event) {\n                  event.preventDefault()\n                },\n                mousemove: _vm.mouseMove,\n                keydown: function (event) {\n                  _vm.model.onKeyDown(event)\n                },\n              },\n            },\n            _vm._l(_vm.model.renderedActions, function (item) {\n              return _c(\"sv-list-item\", {\n                key: item.id,\n                attrs: { item: item, model: _vm.model },\n              })\n            }),\n            1\n          )\n        : _vm._e(),\n    ]\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/loading-indicator.vue?vue&type=template&id=e887da72&\":\n/*!***************************************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/loading-indicator.vue?vue&type=template&id=e887da72& ***!\n  \\***************************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_551447__) {\n\n\"use strict\";\n__nested_webpack_require_551447__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_551447__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_551447__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    { staticClass: \"sd-loading-indicator\" },\n    [\n      _c(\"sv-svg-icon\", {\n        attrs: { iconName: \"icon-loading\", size: \"'auto'\" },\n      }),\n    ],\n    1\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/matrix-actions/detail-button/detail-button.vue?vue&type=template&id=5b4e69b6&\":\n/*!****************************************************************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/matrix-actions/detail-button/detail-button.vue?vue&type=template&id=5b4e69b6& ***!\n  \\****************************************************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_553153__) {\n\n\"use strict\";\n__nested_webpack_require_553153__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_553153__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_553153__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"button\",\n    {\n      class: _vm.question.getDetailPanelButtonCss(_vm.row),\n      attrs: {\n        type: \"button\",\n        \"aria-expanded\": _vm.question.getIsDetailPanelShowing(_vm.row)\n          ? \"true\"\n          : \"false\",\n        \"aria-controls\": _vm.question.getIsDetailPanelShowing(_vm.row)\n          ? _vm.row.detailPanelId\n          : null,\n      },\n      on: {\n        click: function () {\n          return _vm.row.showHideDetailPanelClick()\n        },\n      },\n    },\n    [\n      _c(\"sv-svg-icon\", {\n        class: this.question.getDetailPanelIconCss(this.row),\n        attrs: {\n          iconName: this.question.getDetailPanelIconId(this.row),\n          size: \"auto\",\n        },\n      }),\n    ],\n    1\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/matrix-actions/drag-drop-icon/drag-drop-icon.vue?vue&type=template&id=4f55d298&\":\n/*!******************************************************************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/matrix-actions/drag-drop-icon/drag-drop-icon.vue?vue&type=template&id=4f55d298& ***!\n  \\******************************************************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_555412__) {\n\n\"use strict\";\n__nested_webpack_require_555412__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_555412__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_555412__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\"span\", { class: _vm.question.cssClasses.iconDrag })\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/matrix-actions/remove-button/remove-button.vue?vue&type=template&id=c8a7aa60&\":\n/*!****************************************************************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/matrix-actions/remove-button/remove-button.vue?vue&type=template&id=c8a7aa60& ***!\n  \\****************************************************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_556994__) {\n\n\"use strict\";\n__nested_webpack_require_556994__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_556994__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_556994__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"button\",\n    {\n      class: _vm.question.getRemoveRowButtonCss(),\n      attrs: { type: \"button\", disabled: _vm.question.isInputReadOnly },\n      on: {\n        click: function () {\n          return _vm.question.removeRowUI(_vm.row)\n        },\n      },\n    },\n    [\n      _c(\"survey-string\", {\n        attrs: { locString: _vm.question.locRemoveRowText },\n      }),\n      _vm._v(\" \"),\n      _c(\"span\", { class: _vm.question.cssClasses.iconRemove }),\n    ],\n    1\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/notifier.vue?vue&type=template&id=2d93edad&\":\n/*!******************************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/notifier.vue?vue&type=template&id=2d93edad& ***!\n  \\******************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_558857__) {\n\n\"use strict\";\n__nested_webpack_require_558857__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_558857__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_558857__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _vm.model.isDisplayed\n    ? _c(\n        \"div\",\n        {\n          class: _vm.model.css,\n          style: { visibility: _vm.model.active ? \"visible\" : \"hidden\" },\n          attrs: { role: \"alert\", \"aria-live\": \"polite\" },\n        },\n        [\n          _c(\"span\", [_vm._v(_vm._s(_vm.model.message))]),\n          _vm._v(\" \"),\n          _c(\"sv-action-bar\", { attrs: { model: _vm.model.actionBar } }),\n        ],\n        1\n      )\n    : _vm._e()\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/paneldynamic-actions/paneldynamic-add-btn.vue?vue&type=template&id=247e54cb&\":\n/*!***************************************************************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/paneldynamic-actions/paneldynamic-add-btn.vue?vue&type=template&id=247e54cb& ***!\n  \\***************************************************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_560822__) {\n\n\"use strict\";\n__nested_webpack_require_560822__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_560822__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_560822__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _vm.question.canAddPanel\n    ? _c(\n        \"button\",\n        {\n          class: _vm.question.getAddButtonCss(),\n          attrs: { type: \"button\" },\n          on: { click: _vm.addPanelClick },\n        },\n        [\n          _c(\"span\", { class: _vm.question.cssClasses.buttonAddText }, [\n            _vm._v(_vm._s(_vm.question.panelAddText)),\n          ]),\n        ]\n      )\n    : _vm._e()\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/paneldynamic-actions/paneldynamic-next-btn.vue?vue&type=template&id=6cc1c777&\":\n/*!****************************************************************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/paneldynamic-actions/paneldynamic-next-btn.vue?vue&type=template&id=6cc1c777& ***!\n  \\****************************************************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_562737__) {\n\n\"use strict\";\n__nested_webpack_require_562737__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_562737__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_562737__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    {\n      class: _vm.question.getNextButtonCss(),\n      attrs: { title: _vm.question.panelNextText },\n      on: { click: _vm.nextPanelClick },\n    },\n    [\n      _c(\"sv-svg-icon\", {\n        attrs: {\n          iconName: _vm.question.cssClasses.progressBtnIcon,\n          size: \"auto\",\n        },\n      }),\n    ],\n    1\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/paneldynamic-actions/paneldynamic-prev-btn.vue?vue&type=template&id=12d79eb7&\":\n/*!****************************************************************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/paneldynamic-actions/paneldynamic-prev-btn.vue?vue&type=template&id=12d79eb7& ***!\n  \\****************************************************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_564602__) {\n\n\"use strict\";\n__nested_webpack_require_564602__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_564602__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_564602__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    {\n      class: _vm.question.getPrevButtonCss(),\n      attrs: { title: _vm.question.panelPrevText },\n      on: { click: _vm.prevPanelClick },\n    },\n    [\n      _c(\"sv-svg-icon\", {\n        attrs: {\n          iconName: _vm.question.cssClasses.progressBtnIcon,\n          size: \"auto\",\n        },\n      }),\n    ],\n    1\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/paneldynamic-actions/paneldynamic-progress-text.vue?vue&type=template&id=3d8075a8&\":\n/*!*********************************************************************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/paneldynamic-actions/paneldynamic-progress-text.vue?vue&type=template&id=3d8075a8& ***!\n  \\*********************************************************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_566487__) {\n\n\"use strict\";\n__nested_webpack_require_566487__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_566487__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_566487__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\"div\", { class: _vm.question.cssClasses.progressText }, [\n    _vm._v(_vm._s(_vm.question.progressText)),\n  ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/paneldynamic-actions/paneldynamic-remove-btn.vue?vue&type=template&id=202e30c8&\":\n/*!******************************************************************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/paneldynamic-actions/paneldynamic-remove-btn.vue?vue&type=template&id=202e30c8& ***!\n  \\******************************************************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_568134__) {\n\n\"use strict\";\n__nested_webpack_require_568134__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_568134__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_568134__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"button\",\n    {\n      class: _vm.question.getPanelRemoveButtonCss(),\n      attrs: { type: \"button\" },\n      on: {\n        click: function ($event) {\n          return _vm.removePanelClick(_vm.panel)\n        },\n      },\n    },\n    [\n      _c(\"span\", { class: _vm.question.cssClasses.buttonRemoveText }, [\n        _vm._v(_vm._s(_vm.question.panelRemoveText)),\n      ]),\n      _vm._v(\" \"),\n      _c(\"span\", { class: _vm.question.cssClasses.iconRemove }),\n    ]\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/popup/popup-container.vue?vue&type=template&id=c18dfd74&\":\n/*!*******************************************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/popup/popup-container.vue?vue&type=template&id=c18dfd74& ***!\n  \\*******************************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_570045__) {\n\n\"use strict\";\n__nested_webpack_require_570045__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_570045__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_570045__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    {\n      directives: [\n        {\n          name: \"show\",\n          rawName: \"v-show\",\n          value: _vm.model.isVisible,\n          expression: \"model.isVisible\",\n        },\n      ],\n      staticClass: \"sv-popup\",\n      class: _vm.model.styleClass,\n      attrs: { tabindex: \"-1\" },\n      on: {\n        keydown: function (event) {\n          _vm.model.onKeyDown(event)\n        },\n        click: function (event) {\n          _vm.model.clickOutside(event)\n        },\n      },\n    },\n    [\n      _c(\n        \"div\",\n        {\n          staticClass: \"sv-popup__container\",\n          style: {\n            left: _vm.model.left,\n            top: _vm.model.top,\n            height: _vm.model.height,\n            width: _vm.model.width,\n            minWidth: _vm.model.minWidth,\n          },\n          on: { click: _vm.clickInside },\n        },\n        [\n          _c(\n            \"div\",\n            { staticClass: \"sv-popup__shadow\" },\n            [\n              _vm.model.showHeader\n                ? _c(_vm.model.popupHeaderTemplate, {\n                    tag: \"component\",\n                    attrs: { model: _vm.model },\n                  })\n                : _vm._e(),\n              _vm._v(\" \"),\n              _c(\"div\", { staticClass: \"sv-popup__body-content\" }, [\n                !!_vm.model.title\n                  ? _c(\"div\", { staticClass: \"sv-popup__body-header\" }, [\n                      _vm._v(_vm._s(_vm.model.title)),\n                    ])\n                  : _vm._e(),\n                _vm._v(\" \"),\n                _c(\"div\", { staticClass: \"sv-popup__scrolling-content\" }, [\n                  _c(\n                    \"div\",\n                    { staticClass: \"sv-popup__content\" },\n                    [\n                      _c(\n                        _vm.model.contentComponentName,\n                        _vm._b(\n                          { tag: \"component\" },\n                          \"component\",\n                          _vm.model.contentComponentData,\n                          false\n                        )\n                      ),\n                    ],\n                    1\n                  ),\n                ]),\n                _vm._v(\" \"),\n                _vm.model.showFooter\n                  ? _c(\n                      \"div\",\n                      { staticClass: \"sv-popup__body-footer\" },\n                      [\n                        _c(\"sv-action-bar\", {\n                          attrs: { model: _vm.model.footerToolbar },\n                        }),\n                      ],\n                      1\n                    )\n                  : _vm._e(),\n              ]),\n            ],\n            1\n          ),\n        ]\n      ),\n    ]\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/popup/popup-pointer.vue?vue&type=template&id=00847c42&\":\n/*!*****************************************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/popup/popup-pointer.vue?vue&type=template&id=00847c42& ***!\n  \\*****************************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_574177__) {\n\n\"use strict\";\n__nested_webpack_require_574177__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_574177__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_574177__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\"span\", {\n    staticClass: \"sv-popup__pointer\",\n    style: {\n      left: _vm.model.pointerTarget.left,\n      top: _vm.model.pointerTarget.top,\n    },\n  })\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/popup/popup.vue?vue&type=template&id=ef11265c&\":\n/*!*********************************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/popup/popup.vue?vue&type=template&id=ef11265c& ***!\n  \\*********************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_575737__) {\n\n\"use strict\";\n__nested_webpack_require_575737__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_575737__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_575737__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    [_c(\"sv-popup-container\", { attrs: { model: _vm.popupViewModel } })],\n    1\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/rating/rating-item-smiley.vue?vue&type=template&id=7da6a776&\":\n/*!***********************************************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/rating/rating-item-smiley.vue?vue&type=template&id=7da6a776& ***!\n  \\***********************************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_577294__) {\n\n\"use strict\";\n__nested_webpack_require_577294__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_577294__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_577294__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"label\",\n    {\n      key: _vm.item.value,\n      class: _vm.question.getItemClass(_vm.item.itemValue, _vm.item.highlight),\n      style: _vm.question.getItemStyle(_vm.item.itemValue, _vm.item.highlight),\n      on: {\n        mousedown: function ($event) {\n          return _vm.question.onMouseDown()\n        },\n        mouseover: function (e) {\n          return _vm.question.onItemMouseIn(_vm.item)\n        },\n        mouseleave: function (e) {\n          return _vm.question.onItemMouseOut(_vm.item)\n        },\n      },\n    },\n    [\n      _c(\"input\", {\n        staticClass: \"sv-visuallyhidden\",\n        attrs: {\n          type: \"radio\",\n          name: _vm.question.name,\n          id: _vm.question.getInputId(_vm.index),\n          disabled: _vm.question.isInputReadOnly,\n          \"aria-required\": _vm.question.ariaRequired,\n          \"aria-label\": _vm.question.ariaLabel,\n          \"aria-invalid\": _vm.question.ariaInvalid,\n          \"aria-describedby\": _vm.question.ariaDescribedBy,\n        },\n        domProps: { value: _vm.item.value },\n        on: {\n          click: function (e) {\n            return _vm.question.setValueFromClick(e.target.value)\n          },\n        },\n      }),\n      _vm._v(\" \"),\n      _c(\"sv-svg-icon\", {\n        attrs: {\n          iconName: _vm.question.getItemSmileyIconName(_vm.item.itemValue),\n          size: \"auto\",\n          title: _vm.item.text,\n        },\n      }),\n    ],\n    1\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/rating/rating-item-star.vue?vue&type=template&id=5d03fe17&\":\n/*!*********************************************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/rating/rating-item-star.vue?vue&type=template&id=5d03fe17& ***!\n  \\*********************************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_580169__) {\n\n\"use strict\";\n__nested_webpack_require_580169__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_580169__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_580169__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"label\",\n    {\n      key: _vm.item.value,\n      class: _vm.question.getItemClass(_vm.item.itemValue),\n      on: {\n        mousedown: function ($event) {\n          return _vm.question.onMouseDown()\n        },\n        mouseover: function (e) {\n          return _vm.question.onItemMouseIn(_vm.item)\n        },\n        mouseleave: function (e) {\n          return _vm.question.onItemMouseOut(_vm.item)\n        },\n      },\n    },\n    [\n      _c(\"input\", {\n        staticClass: \"sv-visuallyhidden\",\n        attrs: {\n          type: \"radio\",\n          name: _vm.question.name,\n          id: _vm.question.getInputId(_vm.index),\n          disabled: _vm.question.isInputReadOnly,\n          \"aria-required\": _vm.question.ariaRequired,\n          \"aria-label\": _vm.question.ariaLabel,\n          \"aria-invalid\": _vm.question.ariaInvalid,\n          \"aria-describedby\": _vm.question.ariaDescribedBy,\n        },\n        domProps: { value: _vm.item.value },\n        on: {\n          click: function (e) {\n            return _vm.question.setValueFromClick(e.target.value)\n          },\n        },\n      }),\n      _vm._v(\" \"),\n      _c(\"sv-svg-icon\", {\n        class: \"sv-star\",\n        attrs: {\n          iconName: _vm.question.itemStarIcon,\n          size: \"auto\",\n          title: _vm.item.text,\n        },\n      }),\n      _vm._v(\" \"),\n      _c(\"sv-svg-icon\", {\n        class: \"sv-star-2\",\n        attrs: {\n          iconName: _vm.question.itemStarIconAlt,\n          size: \"auto\",\n          title: _vm.item.text,\n        },\n      }),\n    ],\n    1\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/rating/rating-item.vue?vue&type=template&id=38c2d0d0&\":\n/*!****************************************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/rating/rating-item.vue?vue&type=template&id=38c2d0d0& ***!\n  \\****************************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_583138__) {\n\n\"use strict\";\n__nested_webpack_require_583138__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_583138__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_583138__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"label\",\n    {\n      key: _vm.item.value,\n      class: _vm.question.getItemClassByText(_vm.item.itemValue, _vm.item.text),\n      on: {\n        mousedown: function ($event) {\n          return _vm.question.onMouseDown()\n        },\n      },\n    },\n    [\n      _c(\"input\", {\n        staticClass: \"sv-visuallyhidden\",\n        attrs: {\n          type: \"radio\",\n          name: _vm.question.name,\n          id: _vm.question.getInputId(_vm.index),\n          disabled: _vm.question.isInputReadOnly,\n          \"aria-required\": _vm.question.ariaRequired,\n          \"aria-label\": _vm.question.ariaLabel,\n          \"aria-invalid\": _vm.question.ariaInvalid,\n          \"aria-describedby\": _vm.question.ariaDescribedBy,\n        },\n        domProps: { value: _vm.item.value },\n        on: {\n          click: function (e) {\n            return _vm.question.setValueFromClick(e.target.value)\n          },\n        },\n      }),\n      _vm._v(\" \"),\n      _c(\n        \"span\",\n        { class: _vm.question.cssClasses.itemText },\n        [_c(\"survey-string\", { attrs: { locString: _vm.item.locText } })],\n        1\n      ),\n    ]\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/skeleton.vue?vue&type=template&id=5bd480d4&\":\n/*!******************************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/skeleton.vue?vue&type=template&id=5bd480d4& ***!\n  \\******************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_585644__) {\n\n\"use strict\";\n__nested_webpack_require_585644__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_585644__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_585644__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\"div\", {\n    staticClass: \"sv-skeleton-element\",\n    attrs: { id: _vm.element.id },\n  })\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/survey-actions/survey-nav-button.vue?vue&type=template&id=3760119e&\":\n/*!******************************************************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/survey-actions/survey-nav-button.vue?vue&type=template&id=3760119e& ***!\n  \\******************************************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_587222__) {\n\n\"use strict\";\n__nested_webpack_require_587222__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_587222__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_587222__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _vm.item.visible\n    ? _c(\"input\", {\n        class: _vm.item.innerCss,\n        attrs: {\n          type: \"button\",\n          disabled: _vm.item.disabled,\n          value: _vm.item.title,\n          title: _vm.item.getTooltip(),\n        },\n        on: { mousedown: _vm.buttonMouseDown, click: _vm.item.action },\n      })\n    : _vm._e()\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/svg-icon/svg-icon.vue?vue&type=template&id=684776f8&\":\n/*!***************************************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/svg-icon/svg-icon.vue?vue&type=template&id=684776f8& ***!\n  \\***************************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_588981__) {\n\n\"use strict\";\n__nested_webpack_require_588981__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_588981__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_588981__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"svg\",\n    {\n      ref: \"svgIcon\",\n      staticClass: \"sv-svg-icon\",\n      attrs: { role: \"img\", \"aria-label\": _vm.title },\n    },\n    [_c(\"use\")]\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/tagbox/tagbox-filter.vue?vue&type=template&id=dc2bc686&\":\n/*!******************************************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/tagbox/tagbox-filter.vue?vue&type=template&id=dc2bc686& ***!\n  \\******************************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_590578__) {\n\n\"use strict\";\n__nested_webpack_require_590578__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_590578__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_590578__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\"div\", { class: _vm.question.cssClasses.hint }, [\n    _vm.model.showHintPrefix\n      ? _c(\"div\", { class: _vm.question.cssClasses.hintPrefix }, [\n          _c(\"span\", [_vm._v(_vm._s(_vm.model.hintStringPrefix))]),\n        ])\n      : _vm._e(),\n    _vm._v(\" \"),\n    _c(\n      \"div\",\n      { class: _vm.question.cssClasses.hintSuffixWrapper },\n      [\n        _vm.question.showSelectedItemLocText\n          ? _c(\"survey-string\", {\n              attrs: { locString: _vm.question.selectedItemLocText },\n            })\n          : _vm._e(),\n        _vm._v(\" \"),\n        _vm.model.showHintString\n          ? _c(\"div\", { class: _vm.question.cssClasses.hintSuffix }, [\n              _c(\"span\", { staticStyle: { visibility: \"hidden\" } }, [\n                _vm._v(_vm._s(_vm.model.inputStringRendered)),\n              ]),\n              _vm._v(\" \"),\n              _c(\"span\", [_vm._v(_vm._s(_vm.model.hintStringSuffix))]),\n            ])\n          : _vm._e(),\n        _vm._v(\" \"),\n        _c(\"input\", {\n          directives: [\n            {\n              name: \"model\",\n              rawName: \"v-model\",\n              value: _vm.model.inputStringRendered,\n              expression: \"model.inputStringRendered\",\n            },\n          ],\n          class: _vm.question.cssClasses.filterStringInput,\n          attrs: {\n            type: \"text\",\n            autocomplete: \"off\",\n            placeholder: _vm.model.filterStringPlaceholder,\n            disabled: _vm.question.isInputReadOnly,\n            inputmode: _vm.model.inputMode,\n            role: _vm.model.filterStringEnabled ? _vm.question.ariaRole : null,\n            \"aria-label\": _vm.question.placeholder,\n            \"aria-expanded\": _vm.question.ariaExpanded,\n            \"aria-controls\": _vm.model.listElementId,\n            \"aria-activedescendant\": _vm.model.ariaActivedescendant,\n            id: _vm.question.getInputId(),\n            readonly: !_vm.model.searchEnabled ? true : null,\n            size: !_vm.model.inputStringRendered ? 1 : null,\n          },\n          domProps: { value: _vm.model.inputStringRendered },\n          on: {\n            change: _vm.inputChange,\n            keydown: _vm.inputKeyHandler,\n            blur: _vm.blur,\n            focus: _vm.focus,\n            input: function ($event) {\n              if ($event.target.composing) {\n                return\n              }\n              _vm.$set(_vm.model, \"inputStringRendered\", $event.target.value)\n            },\n          },\n        }),\n      ],\n      1\n    ),\n  ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/tagbox/tagbox-item.vue?vue&type=template&id=46c763d0&\":\n/*!****************************************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/tagbox/tagbox-item.vue?vue&type=template&id=46c763d0& ***!\n  \\****************************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_594506__) {\n\n\"use strict\";\n__nested_webpack_require_594506__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_594506__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_594506__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\"div\", { key: _vm.item.key, staticClass: \"sv-tagbox__item\" }, [\n    _c(\n      \"div\",\n      { staticClass: \"sv-tagbox__item-text\" },\n      [_c(\"survey-string\", { attrs: { locString: _vm.item.locText } })],\n      1\n    ),\n    _vm._v(\" \"),\n    _c(\n      \"div\",\n      {\n        class: _vm.question.cssClasses.cleanItemButton,\n        on: { click: _vm.removeItem },\n      },\n      [\n        _c(\"sv-svg-icon\", {\n          class: _vm.question.cssClasses.cleanItemButtonSvg,\n          attrs: {\n            iconName: _vm.question.cssClasses.cleanItemButtonIconId,\n            size: \"auto\",\n          },\n        }),\n      ],\n      1\n    ),\n  ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/tagbox/tagbox.vue?vue&type=template&id=a15fc850&\":\n/*!***********************************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/tagbox/tagbox.vue?vue&type=template&id=a15fc850& ***!\n  \\***********************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_596554__) {\n\n\"use strict\";\n__nested_webpack_require_596554__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_596554__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_596554__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    { class: _vm.question.cssClasses.selectWrapper, on: { click: _vm.click } },\n    [\n      !_vm.question.isReadOnly\n        ? _c(\n            \"div\",\n            {\n              class: _vm.question.getControlClass(),\n              attrs: {\n                id: _vm.question.inputId,\n                tabindex: _vm.model.inputReadOnly ? undefined : 0,\n                disabled: _vm.question.isInputReadOnly,\n                role: _vm.question.ariaRole,\n                \"aria-required\": _vm.question.ariaRequired,\n                \"aria-label\": _vm.question.ariaLabel,\n                \"aria-invalid\": _vm.question.ariaInvalid,\n                \"aria-describedby\": _vm.question.ariaDescribedBy,\n                \"aria-expanded\": _vm.question.ariaExpanded,\n                \"aria-controls\": _vm.model.listElementId,\n                \"aria-activedescendant\": _vm.model.ariaActivedescendant,\n                required: _vm.question.isRequired,\n              },\n              on: { keydown: _vm.keyhandler, blur: _vm.blur },\n              model: {\n                value: _vm.question.renderedValue,\n                callback: function ($$v) {\n                  _vm.$set(_vm.question, \"renderedValue\", $$v)\n                },\n                expression: \"question.renderedValue\",\n              },\n            },\n            [\n              _c(\n                \"div\",\n                { class: _vm.question.cssClasses.controlValue },\n                [\n                  _vm._l(_vm.question.selectedChoices, function (item, index) {\n                    return _c(\"sv-tagbox-item\", {\n                      key: \"item\" + index,\n                      attrs: { item: item, question: _vm.question },\n                    })\n                  }),\n                  _vm._v(\" \"),\n                  _c(\"sv-tagbox-filter\", {\n                    attrs: { model: _vm.model, question: _vm.question },\n                  }),\n                ],\n                2\n              ),\n              _vm._v(\" \"),\n              _vm.question.allowClear &&\n              _vm.question.cssClasses.cleanButtonIconId\n                ? _c(\n                    \"div\",\n                    {\n                      directives: [\n                        {\n                          name: \"show\",\n                          rawName: \"v-show\",\n                          value: !_vm.question.isEmpty(),\n                          expression: \"!question.isEmpty()\",\n                        },\n                      ],\n                      class: _vm.question.cssClasses.cleanButton,\n                      on: { click: _vm.clear },\n                    },\n                    [\n                      _c(\"sv-svg-icon\", {\n                        class: _vm.question.cssClasses.cleanButtonSvg,\n                        attrs: {\n                          iconName: _vm.question.cssClasses.cleanButtonIconId,\n                          title: _vm.question.clearCaption,\n                          size: \"auto\",\n                        },\n                      }),\n                    ],\n                    1\n                  )\n                : _vm._e(),\n            ]\n          )\n        : _vm._e(),\n      _vm._v(\" \"),\n      !_vm.question.isReadOnly\n        ? _c(\"sv-popup\", { attrs: { model: _vm.model.popupModel } })\n        : _c(\n            \"div\",\n            {\n              class: _vm.question.getControlClass(),\n              attrs: { disabled: \"\", id: _vm.question.inputId },\n            },\n            [_c(\"div\", [_vm._v(_vm._s(_vm.question.readOnlyText))])]\n          ),\n      _vm._v(\" \"),\n      _vm.question.cssClasses.chevronButtonIconId\n        ? _c(\n            \"div\",\n            { class: _vm.question.cssClasses.chevronButton },\n            [\n              _c(\"sv-svg-icon\", {\n                class: _vm.question.cssClasses.chevronButtonSvg,\n                attrs: {\n                  iconName: _vm.question.cssClasses.chevronButtonIconId,\n                  size: \"auto\",\n                },\n              }),\n            ],\n            1\n          )\n        : _vm._e(),\n    ],\n    1\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/title/title-actions.vue?vue&type=template&id=c938554c&\":\n/*!*****************************************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/title/title-actions.vue?vue&type=template&id=c938554c& ***!\n  \\*****************************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_602038__) {\n\n\"use strict\";\n__nested_webpack_require_602038__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_602038__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_602038__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    { staticClass: \"sv-title-actions\" },\n    [\n      _c(\n        \"span\",\n        { staticClass: \"sv-title-actions__title\" },\n        [\n          _vm.element.isPage\n            ? _c(\"survey-string\", {\n                attrs: { locString: _vm.element.locTitle },\n              })\n            : _vm._e(),\n          _vm._v(\" \"),\n          !_vm.element.isPage\n            ? _c(\"survey-element-title-content\", {\n                attrs: { element: _vm.element, css: _vm.css },\n              })\n            : _vm._e(),\n        ],\n        1\n      ),\n      _vm._v(\" \"),\n      _c(\"sv-action-bar\", { attrs: { model: _vm.toolbar } }),\n    ],\n    1\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/title/title-content.vue?vue&type=template&id=24c0a2d6&\":\n/*!*****************************************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/title/title-content.vue?vue&type=template&id=24c0a2d6& ***!\n  \\*****************************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_604124__) {\n\n\"use strict\";\n__nested_webpack_require_604124__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_604124__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_604124__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    { staticClass: \"sv-vue-title-additional-div\" },\n    [\n      _vm.element.isTitleRenderedAsString\n        ? _c(\"survey-string\", { attrs: { locString: _vm.element.locTitle } })\n        : _vm._e(),\n      _vm._v(\" \"),\n      !_vm.element.isTitleRenderedAsString && _vm.element.isRequireTextOnStart\n        ? _c(\n            \"span\",\n            {\n              class: _vm.element.cssClasses.requiredText,\n              attrs: { \"aria-hidden\": true },\n            },\n            [_vm._v(_vm._s(_vm.element.requiredText))]\n          )\n        : _vm._e(),\n      _vm._v(\" \"),\n      !_vm.element.isTitleRenderedAsString && _vm.element.no\n        ? _c(\n            \"span\",\n            {\n              class: _vm.element.cssTitleNumber,\n              staticStyle: { position: \"static\" },\n              attrs: { \"aria-hidden\": true },\n            },\n            [_vm._v(_vm._s(_vm.element.no))]\n          )\n        : _vm._e(),\n      _vm._v(\" \"),\n      !_vm.element.isTitleRenderedAsString && _vm.element.no\n        ? _c(\"span\", [_vm._v(\" \")])\n        : _vm._e(),\n      _vm._v(\" \"),\n      !_vm.element.isTitleRenderedAsString &&\n      _vm.element.isRequireTextBeforeTitle\n        ? _c(\n            \"span\",\n            {\n              class: _vm.element.cssClasses.requiredText,\n              attrs: { \"aria-hidden\": true },\n            },\n            [_vm._v(_vm._s(_vm.element.requiredText))]\n          )\n        : _vm._e(),\n      _vm._v(\" \"),\n      !_vm.element.isTitleRenderedAsString &&\n      _vm.element.isRequireTextBeforeTitle\n        ? _c(\"span\", [_vm._v(\" \")])\n        : _vm._e(),\n      _vm._v(\" \"),\n      !_vm.element.isTitleRenderedAsString\n        ? _c(\"survey-string\", { attrs: { locString: _vm.element.locTitle } })\n        : _vm._e(),\n      _vm._v(\" \"),\n      !_vm.element.isTitleRenderedAsString &&\n      _vm.element.isRequireTextAfterTitle\n        ? _c(\"span\", [_vm._v(\" \")])\n        : _vm._e(),\n      _vm._v(\" \"),\n      !_vm.element.isTitleRenderedAsString &&\n      _vm.element.isRequireTextAfterTitle\n        ? _c(\n            \"span\",\n            {\n              class: _vm.element.cssClasses.requiredText,\n              attrs: { \"aria-hidden\": true },\n            },\n            [_vm._v(_vm._s(_vm.element.requiredText))]\n          )\n        : _vm._e(),\n    ],\n    1\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/title/title-element.vue?vue&type=template&id=641d93d9&\":\n/*!*****************************************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/title/title-element.vue?vue&type=template&id=641d93d9& ***!\n  \\*****************************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_607852__) {\n\n\"use strict\";\n__nested_webpack_require_607852__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_607852__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_607852__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _vm.element.hasTitle\n    ? _c(\n        _vm.element.titleTagName,\n        {\n          tag: \"component\",\n          class: _vm.element.cssTitle,\n          attrs: {\n            \"aria-label\": _vm.element.titleAriaLabel,\n            id: _vm.element.ariaTitleId,\n            tabindex: _vm.element.titleTabIndex,\n            \"aria-expanded\": _vm.element.titleAriaExpanded,\n            role: _vm.element.titleAriaRole,\n          },\n          on: {\n            keyup: function ($event) {\n              _vm.keyup($event)\n            },\n          },\n        },\n        [\n          !_vm.element.hasTitleActions\n            ? _c(\"survey-element-title-content\", {\n                attrs: { element: _vm.element, css: _vm.css },\n              })\n            : _vm._e(),\n          _vm._v(\" \"),\n          _vm.element.hasTitleActions\n            ? _c(\"sv-title-actions\", {\n                attrs: { element: _vm.element, css: _vm.css },\n              })\n            : _vm._e(),\n        ],\n        1\n      )\n    : _vm._e()\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/composite.vue?vue&type=template&id=1a9e2196&\":\n/*!********************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/composite.vue?vue&type=template&id=1a9e2196& ***!\n  \\********************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_610203__) {\n\n\"use strict\";\n__nested_webpack_require_610203__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_610203__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_610203__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\"survey-panel\", {\n    attrs: { question: _vm.contentPanel, css: _vm.css },\n  })\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/custom.vue?vue&type=template&id=d4aae09a&\":\n/*!*****************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/custom.vue?vue&type=template&id=d4aae09a& ***!\n  \\*****************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_611624__) {\n\n\"use strict\";\n__nested_webpack_require_611624__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_611624__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_611624__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(_vm.getComponentName(_vm.contentQuestion), {\n    tag: \"component\",\n    attrs: { question: _vm.contentQuestion, css: _vm.css },\n  })\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/customwidget.vue?vue&type=template&id=1e61a7b7&\":\n/*!***********************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/customwidget.vue?vue&type=template&id=1e61a7b7& ***!\n  \\***********************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_613121__) {\n\n\"use strict\";\n__nested_webpack_require_613121__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_613121__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_613121__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    [\n      _vm.hasHtml\n        ? _c(\"div\", { domProps: { innerHTML: _vm._s(_vm.customHtml) } })\n        : _vm._e(),\n      _vm._v(\" \"),\n      _vm.hasDefaultRender\n        ? _c(_vm.componentName, {\n            tag: \"component\",\n            attrs: { question: _vm.question, css: _vm.css },\n          })\n        : _vm._e(),\n    ],\n    1\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/dropdown-select.vue?vue&type=template&id=8199ec34&\":\n/*!**************************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/dropdown-select.vue?vue&type=template&id=8199ec34& ***!\n  \\**************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_614848__) {\n\n\"use strict\";\n__nested_webpack_require_614848__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_614848__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_614848__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    { class: _vm.question.renderCssRoot },\n    [\n      _c(\"div\", { class: _vm.question.cssClasses.selectWrapper }, [\n        !_vm.question.isReadOnly\n          ? _c(\n              \"select\",\n              {\n                directives: [\n                  {\n                    name: \"model\",\n                    rawName: \"v-model\",\n                    value: _vm.question.renderedValue,\n                    expression: \"question.renderedValue\",\n                  },\n                ],\n                class: _vm.question.getControlClass(),\n                attrs: {\n                  id: _vm.question.inputId,\n                  autocomplete: _vm.question.autocomplete,\n                  \"aria-required\": _vm.question.ariaRequired,\n                  \"aria-label\": _vm.question.ariaLabel,\n                  \"aria-invalid\": _vm.question.ariaInvalid,\n                  \"aria-describedby\": _vm.question.ariaDescribedBy,\n                  required: _vm.question.isRequired,\n                },\n                on: {\n                  click: _vm.click,\n                  keyup: _vm.keyUp,\n                  change: function ($event) {\n                    var $$selectedVal = Array.prototype.filter\n                      .call($event.target.options, function (o) {\n                        return o.selected\n                      })\n                      .map(function (o) {\n                        var val = \"_value\" in o ? o._value : o.value\n                        return val\n                      })\n                    _vm.$set(\n                      _vm.question,\n                      \"renderedValue\",\n                      $event.target.multiple ? $$selectedVal : $$selectedVal[0]\n                    )\n                  },\n                },\n              },\n              [\n                _vm.question.allowClear\n                  ? _c(\"option\", { domProps: { value: undefined } }, [\n                      _vm._v(_vm._s(_vm.question.placeholder)),\n                    ])\n                  : _vm._e(),\n                _vm._v(\" \"),\n                _vm._l(_vm.question.visibleChoices, function (item) {\n                  return _c(\"sv-dropdown-option-item\", {\n                    key: item.id,\n                    attrs: { item: item },\n                  })\n                }),\n              ],\n              2\n            )\n          : _c(\n              \"div\",\n              {\n                class: _vm.question.getControlClass(),\n                attrs: { disabled: \"\", id: _vm.question.inputId },\n              },\n              [_vm._v(_vm._s(_vm.question.readOnlyText))]\n            ),\n        _vm._v(\" \"),\n        _vm.question.cssClasses.chevronButtonIconId\n          ? _c(\n              \"div\",\n              { class: _vm.question.cssClasses.chevronButton },\n              [\n                _c(\"sv-svg-icon\", {\n                  class: _vm.question.cssClasses.chevronButtonSvg,\n                  attrs: {\n                    iconName: _vm.question.cssClasses.chevronButtonIconId,\n                    size: \"auto\",\n                  },\n                }),\n              ],\n              1\n            )\n          : _vm._e(),\n      ]),\n      _vm._v(\" \"),\n      _vm.question.isOtherSelected\n        ? _c(\"survey-other-choice\", { attrs: { question: _vm.question } })\n        : _vm._e(),\n    ],\n    1\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/dropdown.vue?vue&type=template&id=6b3215d3&\":\n/*!*******************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/dropdown.vue?vue&type=template&id=6b3215d3& ***!\n  \\*******************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_619510__) {\n\n\"use strict\";\n__nested_webpack_require_619510__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_619510__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_619510__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    { class: _vm.question.renderCssRoot },\n    [\n      _c(\"sv-dropdown\", { attrs: { question: _vm.question } }),\n      _vm._v(\" \"),\n      _vm.question.isOtherSelected\n        ? _c(\"survey-other-choice\", { attrs: { question: _vm.question } })\n        : _vm._e(),\n    ],\n    1\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/element.vue?vue&type=template&id=973472ac&\":\n/*!******************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/element.vue?vue&type=template&id=973472ac& ***!\n  \\******************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_621146__) {\n\n\"use strict\";\n__nested_webpack_require_621146__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_621146__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_621146__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _vm.row.isNeedRender\n    ? _c(\n        \"div\",\n        {\n          class: !_vm.element.isPanel ? _vm.element.getRootCss() : null,\n          attrs: {\n            id: _vm.element.id,\n            role: _vm.element.ariaRole,\n            \"aria-required\": _vm.element.ariaRequired,\n            \"aria-invalid\": _vm.element.ariaInvalid,\n            \"aria-labelledby\": _vm.element.ariaLabelledBy,\n            \"aria-expanded\": _vm.element.ariaExpanded,\n            \"data-name\": _vm.element.name,\n          },\n          on: {\n            focusin: function ($event) {\n              return _vm.element.focusIn()\n            },\n          },\n        },\n        [\n          !_vm.element.isPanel && _vm.element.showErrorsAboveQuestion\n            ? _c(\"survey-errors\", {\n                attrs: { element: _vm.element, location: \"top\" },\n              })\n            : _vm._e(),\n          _vm._v(\" \"),\n          !_vm.element.isPanel && _vm.element.hasTitleOnLeftTop\n            ? _c(\"survey-element-header\", {\n                attrs: { element: _vm.element, css: _vm.css },\n              })\n            : _vm._e(),\n          _vm._v(\" \"),\n          _c(\n            \"div\",\n            {\n              directives: [\n                {\n                  name: \"show\",\n                  rawName: \"v-show\",\n                  value: _vm.element.isPanel || !_vm.element.isCollapsed,\n                  expression: \"element.isPanel || !element.isCollapsed\",\n                },\n              ],\n              class: _vm.getContentClass(_vm.element) || undefined,\n              attrs: { role: \"presentation\" },\n            },\n            [\n              _vm.hasErrorsOnTop\n                ? _c(\"survey-errors\", {\n                    attrs: { element: _vm.element, location: \"top\" },\n                  })\n                : _vm._e(),\n              _vm._v(\" \"),\n              _vm.element.isPanel || !_vm.element.isCollapsed\n                ? _c(_vm.getComponentName(_vm.element), {\n                    tag: \"component\",\n                    attrs: { question: _vm.element, css: _vm.css },\n                  })\n                : _vm._e(),\n              _vm._v(\" \"),\n              _vm.element.hasComment\n                ? _c(\n                    \"div\",\n                    { class: _vm.element.getCommentAreaCss() },\n                    [\n                      _c(\n                        \"div\",\n                        [\n                          _c(\"survey-string\", {\n                            attrs: { locString: _vm.element.locCommentText },\n                          }),\n                        ],\n                        1\n                      ),\n                      _vm._v(\" \"),\n                      _c(\"survey-question-comment\", {\n                        attrs: {\n                          commentClass: _vm.css.comment,\n                          question: _vm.element,\n                        },\n                      }),\n                    ],\n                    1\n                  )\n                : _vm._e(),\n              _vm._v(\" \"),\n              _vm.hasErrorsOnBottom\n                ? _c(\"survey-errors\", {\n                    attrs: { element: _vm.element, location: \"bottom\" },\n                  })\n                : _vm._e(),\n              _vm._v(\" \"),\n              !_vm.element.isPanel && _vm.element.hasDescriptionUnderInput\n                ? _c(\n                    \"div\",\n                    { class: _vm.element.cssClasses.descriptionUnderInput },\n                    [\n                      _c(\"survey-string\", {\n                        attrs: { locString: _vm.element.locDescription },\n                      }),\n                    ],\n                    1\n                  )\n                : _vm._e(),\n            ],\n            1\n          ),\n          _vm._v(\" \"),\n          !_vm.element.isPanel && _vm.element.hasTitleOnBottom\n            ? _c(\"survey-element-header\", {\n                attrs: { element: _vm.element, css: _vm.css },\n              })\n            : _vm._e(),\n          _vm._v(\" \"),\n          !_vm.element.isPanel && _vm.element.showErrorsBelowQuestion\n            ? _c(\"survey-errors\", {\n                attrs: { element: _vm.element, location: \"bottom\" },\n              })\n            : _vm._e(),\n        ],\n        1\n      )\n    : !!_vm.element.skeletonComponentName\n    ? _c(_vm.element.skeletonComponentName, {\n        tag: \"component\",\n        attrs: { element: _vm.element, css: _vm.css },\n      })\n    : _vm._e()\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/elementheader.vue?vue&type=template&id=27adc537&\":\n/*!************************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/elementheader.vue?vue&type=template&id=27adc537& ***!\n  \\************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_626952__) {\n\n\"use strict\";\n__nested_webpack_require_626952__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_626952__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_626952__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    { class: _vm.element.cssHeader, on: { click: _vm.clickTitleFunction } },\n    [\n      _c(\"survey-element-title\", {\n        attrs: { element: _vm.element, css: _vm.css },\n      }),\n      _vm._v(\" \"),\n      _vm.element.hasDescriptionUnderTitle\n        ? _c(\n            \"div\",\n            {\n              directives: [\n                {\n                  name: \"show\",\n                  rawName: \"v-show\",\n                  value: _vm.element.hasDescription,\n                  expression: \"element.hasDescription\",\n                },\n              ],\n              class: _vm.element.cssDescription,\n            },\n            [\n              _c(\"survey-string\", {\n                attrs: { locString: _vm.element.locDescription },\n              }),\n            ],\n            1\n          )\n        : _vm._e(),\n      _vm._v(\" \"),\n      !!_vm.element.additionalTitleToolbar\n        ? _c(\"sv-action-bar\", {\n            attrs: { model: _vm.element.additionalTitleToolbar },\n          })\n        : _vm._e(),\n    ],\n    1\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/empty.vue?vue&type=template&id=05052c0a&\":\n/*!****************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/empty.vue?vue&type=template&id=05052c0a& ***!\n  \\****************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_629322__) {\n\n\"use strict\";\n__nested_webpack_require_629322__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_629322__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_629322__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\"div\")\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/errors.vue?vue&type=template&id=5682e6ad&\":\n/*!*****************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/errors.vue?vue&type=template&id=5682e6ad& ***!\n  \\*****************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_630670__) {\n\n\"use strict\";\n__nested_webpack_require_630670__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_630670__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_630670__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _vm.element.hasVisibleErrors\n    ? _c(\n        \"div\",\n        {\n          class: _vm.element.cssError,\n          attrs: {\n            role: \"alert\",\n            \"aria-live\": \"polite\",\n            id: _vm.element.id + \"_errors\",\n          },\n        },\n        _vm._l(_vm.element.errors, function (error, index) {\n          return _c(\"div\", { key: \"error_\" + index }, [\n            _c(\"span\", {\n              class: _vm.element.cssClasses\n                ? _vm.element.cssClasses.error.icon || undefined\n                : \"panel-error-icon\",\n              attrs: { \"aria-hidden\": \"true\" },\n            }),\n            _vm._v(\" \"),\n            _c(\n              \"span\",\n              {\n                class: _vm.element.cssClasses\n                  ? _vm.element.cssClasses.error.item || undefined\n                  : \"panel-error-item\",\n              },\n              [_c(\"survey-string\", { attrs: { locString: error.locText } })],\n              1\n            ),\n          ])\n        }),\n        0\n      )\n    : _vm._e()\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/expression.vue?vue&type=template&id=1d20865a&\":\n/*!*********************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/expression.vue?vue&type=template&id=1d20865a& ***!\n  \\*********************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_633045__) {\n\n\"use strict\";\n__nested_webpack_require_633045__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_633045__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_633045__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\"div\", { class: _vm.question.cssClasses.text }, [\n    _vm._v(_vm._s(_vm.question.formatedValue)),\n  ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/file-clean-button.vue?vue&type=template&id=29c892d6&\":\n/*!****************************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/file-clean-button.vue?vue&type=template&id=29c892d6& ***!\n  \\****************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_634533__) {\n\n\"use strict\";\n__nested_webpack_require_634533__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_634533__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_634533__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"button\",\n    {\n      class: _vm.css,\n      attrs: { type: \"button\" },\n      on: { click: _vm.question.doClean },\n    },\n    [\n      _c(\"span\", [_vm._v(_vm._s(_vm.question.clearButtonCaption))]),\n      _vm._v(\" \"),\n      _vm.question.cssClasses.removeButtonIconId\n        ? _c(\"sv-svg-icon\", {\n            attrs: {\n              iconName: _vm.question.cssClasses.removeButtonIconId,\n              size: \"auto\",\n              title: _vm.question.clearButtonCaption,\n            },\n          })\n        : _vm._e(),\n    ],\n    1\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/file-preview.vue?vue&type=template&id=6b866b8e&\":\n/*!***********************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/file-preview.vue?vue&type=template&id=6b866b8e& ***!\n  \\***********************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_636433__) {\n\n\"use strict\";\n__nested_webpack_require_636433__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_636433__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_636433__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    { class: _vm.question.cssClasses.fileList || undefined },\n    _vm._l(_vm.question.previewValue, function (val, index) {\n      return _c(\n        \"span\",\n        {\n          directives: [\n            {\n              name: \"show\",\n              rawName: \"v-show\",\n              value: val && _vm.isPreviewVisible(index),\n              expression: \"val && isPreviewVisible(index)\",\n            },\n          ],\n          key: _vm.question.inputId + \"_\" + index,\n          class: _vm.question.cssClasses.preview,\n        },\n        [\n          val.name && _vm.question.cssClasses.fileSign\n            ? _c(\"div\", { class: _vm.question.cssClasses.fileSign }, [\n                _c(\n                  \"a\",\n                  {\n                    style: { width: _vm.question.imageWidth },\n                    attrs: {\n                      href: val.content,\n                      title: val.name,\n                      download: val.name,\n                    },\n                    on: {\n                      click: function ($event) {\n                        return _vm.question.doDownloadFile($event, val)\n                      },\n                    },\n                  },\n                  [_vm._v(_vm._s(val.name))]\n                ),\n              ])\n            : _vm._e(),\n          _vm._v(\" \"),\n          _c(\n            \"div\",\n            { class: _vm.question.cssClasses.imageWrapper },\n            [\n              _vm.question.canPreviewImage(val)\n                ? _c(\"img\", {\n                    style: {\n                      height: _vm.question.imageHeight,\n                      width: _vm.question.imageWidth,\n                    },\n                    attrs: { src: val.content, alt: \"File preview\" },\n                  })\n                : _vm._e(),\n              _vm._v(\" \"),\n              _vm.question.defaultImage(val)\n                ? _c(\"sv-svg-icon\", {\n                    class: _vm.question.cssClasses.defaultImage,\n                    attrs: {\n                      iconName: _vm.question.cssClasses.defaultImageIconId,\n                      size: \"auto\",\n                    },\n                  })\n                : _vm._e(),\n              _vm._v(\" \"),\n              val.name && !_vm.question.isReadOnly\n                ? _c(\n                    \"div\",\n                    {\n                      class: _vm.question.getRemoveButtonCss(),\n                      on: {\n                        click: function ($event) {\n                          return _vm.question.doRemoveFile(val)\n                        },\n                      },\n                    },\n                    [\n                      _c(\n                        \"span\",\n                        { class: _vm.question.cssClasses.removeFile },\n                        [_vm._v(_vm._s(_vm.question.removeFileCaption))]\n                      ),\n                      _vm._v(\" \"),\n                      _vm.question.cssClasses.removeFileSvgIconId\n                        ? _c(\"sv-svg-icon\", {\n                            class: _vm.question.cssClasses.removeFileSvg,\n                            attrs: {\n                              title: _vm.question.removeFileCaption,\n                              iconName:\n                                _vm.question.cssClasses.removeFileSvgIconId,\n                              size: \"auto\",\n                            },\n                          })\n                        : _vm._e(),\n                    ],\n                    1\n                  )\n                : _vm._e(),\n            ],\n            1\n          ),\n          _vm._v(\" \"),\n          val.name && _vm.question.cssClasses.fileSignBottom\n            ? _c(\"div\", { class: _vm.question.cssClasses.fileSignBottom }, [\n                _c(\n                  \"a\",\n                  {\n                    style: { width: _vm.question.imageWidth },\n                    attrs: {\n                      href: val.content,\n                      title: val.name,\n                      download: val.name,\n                    },\n                    on: {\n                      click: function ($event) {\n                        return _vm.question.doDownloadFile($event, val)\n                      },\n                    },\n                  },\n                  [_vm._v(_vm._s(val.name))]\n                ),\n              ])\n            : _vm._e(),\n        ]\n      )\n    }),\n    0\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/file-video.vue?vue&type=template&id=7b5c8bac&\":\n/*!*********************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/file-video.vue?vue&type=template&id=7b5c8bac& ***!\n  \\*********************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_642177__) {\n\n\"use strict\";\n__nested_webpack_require_642177__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_642177__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_642177__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    { class: _vm.question.cssClasses.videoContainer },\n    [\n      _c(\"sv-action\", { attrs: { item: _vm.question.changeCameraAction } }),\n      _vm._v(\" \"),\n      _c(\"sv-action\", { attrs: { item: _vm.question.closeCameraAction } }),\n      _vm._v(\" \"),\n      _c(\"video\", {\n        class: _vm.question.cssClasses.video,\n        attrs: { autoplay: \"\", playsinline: \"\", id: _vm.question.videoId },\n      }),\n      _vm._v(\" \"),\n      _c(\"sv-action\", { attrs: { item: _vm.question.takePictureAction } }),\n    ],\n    1\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/file.vue?vue&type=template&id=20f70284&\":\n/*!***************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/file.vue?vue&type=template&id=20f70284& ***!\n  \\***************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_644038__) {\n\n\"use strict\";\n__nested_webpack_require_644038__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_644038__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_644038__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\"div\", { class: _vm.question.fileRootCss }, [\n    !_vm.question.isReadOnly && _vm.question.hasFileUI\n      ? _c(\"input\", {\n          class: _vm.question.cssClasses.fileInput,\n          attrs: {\n            tabindex: \"-1\",\n            type: \"file\",\n            id: _vm.question.inputId,\n            \"aria-required\": _vm.question.ariaRequired,\n            \"aria-label\": _vm.question.ariaLabel,\n            \"aria-invalid\": _vm.question.ariaInvalid,\n            \"aria-describedby\": _vm.question.ariaDescribedBy,\n            multiple: _vm.question.allowMultiple,\n            title: _vm.question.inputTitle,\n            accept: _vm.question.acceptedTypes,\n            capture: _vm.question.renderCapture,\n          },\n          on: { change: _vm.question.doChange },\n        })\n      : _vm._e(),\n    _vm._v(\" \"),\n    _vm.question.isReadOnly\n      ? _c(\"input\", {\n          class: _vm.question.getReadOnlyFileCss(),\n          staticStyle: { color: \"transparent\" },\n          attrs: {\n            type: \"file\",\n            disabled: \"\",\n            id: _vm.question.inputId,\n            multiple: _vm.question.allowMultiple,\n            placeholder: _vm.question.title,\n          },\n        })\n      : _vm._e(),\n    _vm._v(\" \"),\n    _c(\n      \"div\",\n      {\n        class: _vm.question.cssClasses.dragArea,\n        on: {\n          drop: _vm.question.onDrop,\n          dragover: _vm.question.onDragOver,\n          dragleave: _vm.question.onDragLeave,\n          dragenter: _vm.question.onDragEnter,\n        },\n      },\n      [\n        _vm.question.showFileDecorator\n          ? _c(\"div\", { class: _vm.question.getFileDecoratorCss() }, [\n              _c(\n                \"span\",\n                { class: _vm.question.cssClasses.dragAreaPlaceholder },\n                [_vm._v(_vm._s(_vm.question.renderedPlaceholder))]\n              ),\n              _vm._v(\" \"),\n              _c(\n                \"div\",\n                { class: _vm.question.cssClasses.wrapper },\n                [\n                  _vm.question.showChooseButton\n                    ? _c(\"sv-file-choose-btn\", {\n                        attrs: { data: { question: _vm.question } },\n                      })\n                    : _vm._e(),\n                  _vm._v(\" \"),\n                  _vm.question.actionsContainerVisible\n                    ? _c(\"sv-action-bar\", {\n                        attrs: { model: _vm.question.actionsContainer },\n                      })\n                    : _vm._e(),\n                  _vm._v(\" \"),\n                  _vm.question.isEmpty()\n                    ? _c(\n                        \"span\",\n                        { class: _vm.question.cssClasses.noFileChosen },\n                        [_vm._v(_vm._s(_vm.question.noFileChosenCaption))]\n                      )\n                    : _vm._e(),\n                ],\n                1\n              ),\n            ])\n          : _vm._e(),\n        _vm._v(\" \"),\n        _vm.question.showRemoveButton\n          ? _c(\"sv-file-clean-btn\", {\n              attrs: {\n                question: _vm.question,\n                css: _vm.question.showRemoveButton,\n              },\n            })\n          : _vm._e(),\n        _vm._v(\" \"),\n        _vm.question.showLoadingIndicator\n          ? _c(\n              \"div\",\n              { class: _vm.question.cssClasses.loadingIndicator },\n              [_c(\"sv-loading-indicator\")],\n              1\n            )\n          : _vm._e(),\n        _vm._v(\" \"),\n        _vm.question.isPlayingVideo\n          ? _c(\"sv-file-video\", { attrs: { question: _vm.question } })\n          : _vm._e(),\n        _vm._v(\" \"),\n        _vm.question.allowShowPreview\n          ? [_c(\"sv-file-preview\", { attrs: { question: _vm.question } })]\n          : _vm._e(),\n        _vm._v(\" \"),\n        _vm.question.showRemoveButtonBottom\n          ? _c(\"sv-file-clean-btn\", {\n              attrs: {\n                question: _vm.question,\n                css: _vm.question.showRemoveButtonBottom,\n              },\n            })\n          : _vm._e(),\n        _vm._v(\" \"),\n        _vm.question.fileNavigatorVisible\n          ? _c(\"sv-action-bar\", {\n              attrs: { model: _vm.question.fileNavigator },\n            })\n          : _vm._e(),\n      ],\n      2\n    ),\n  ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/flowpanel.vue?vue&type=template&id=96ae1a78&\":\n/*!********************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/flowpanel.vue?vue&type=template&id=96ae1a78& ***!\n  \\********************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_649606__) {\n\n\"use strict\";\n__nested_webpack_require_649606__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_649606__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_649606__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _vm.question.isVisible\n    ? _c(\n        \"div\",\n        {\n          class: _vm.question.cssClasses.panel.container,\n          style: _vm.rootStyle,\n        },\n        [\n          _c(\n            \"h4\",\n            {\n              directives: [\n                {\n                  name: \"show\",\n                  rawName: \"v-show\",\n                  value: _vm.hasTitle,\n                  expression: \"hasTitle\",\n                },\n              ],\n              class: _vm.question.cssTitle,\n              on: { click: _vm.changeExpanded },\n            },\n            [\n              _c(\"survey-string\", {\n                attrs: { locString: _vm.question.locTitle },\n              }),\n              _vm._v(\" \"),\n              _c(\"span\", {\n                directives: [\n                  {\n                    name: \"show\",\n                    rawName: \"v-show\",\n                    value: _vm.showIcon,\n                    expression: \"showIcon\",\n                  },\n                ],\n                class: _vm.iconCss,\n              }),\n            ],\n            1\n          ),\n          _vm._v(\" \"),\n          _c(\n            \"div\",\n            { class: _vm.question.cssClasses.panel.description },\n            [\n              _c(\"survey-string\", {\n                attrs: { locString: _vm.question.locDescription },\n              }),\n            ],\n            1\n          ),\n          _vm._v(\" \"),\n          _c(\"survey-errors\", { attrs: { element: _vm.question } }),\n          _vm._v(\" \"),\n          _c(\n            \"f-panel\",\n            {\n              directives: [\n                {\n                  name: \"show\",\n                  rawName: \"v-show\",\n                  value: !_vm.isCollapsed,\n                  expression: \"!isCollapsed\",\n                },\n              ],\n              style: { paddingLeft: _vm.question.innerPaddingLeft },\n            },\n            [\n              _c(\"survey-flowpanelelement\", {\n                attrs: { node: _vm.rootNode, panel: _vm.question, css: \"css\" },\n              }),\n            ],\n            1\n          ),\n        ],\n        1\n      )\n    : _vm._e()\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/flowpanelelement.vue?vue&type=template&id=9d992c30&\":\n/*!***************************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/flowpanelelement.vue?vue&type=template&id=9d992c30& ***!\n  \\***************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_653099__) {\n\n\"use strict\";\n__nested_webpack_require_653099__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_653099__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_653099__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"span\",\n    { style: _vm.style },\n    [\n      !_vm.question\n        ? _c(\n            _vm.tagName,\n            { tag: \"component\" },\n            [\n              _vm._l(_vm.nodes, function (elNode) {\n                return _c(\"survey-flowpanelelement\", {\n                  key: _vm.elementId,\n                  attrs: { node: elNode, panel: _vm.panel, css: \"css\" },\n                })\n              }),\n              _vm._v(\"\\n    \" + _vm._s(_vm.text) + \"\\n  \"),\n            ],\n            2\n          )\n        : _vm._e(),\n      _vm._v(\" \"),\n      !!_vm.question\n        ? _c(\n            \"span\",\n            [\n              _c(\"survey-element\", {\n                key: _vm.question.idValue,\n                style: {\n                  flexBasis: _vm.question.renderWidth,\n                  flexGrow: 1,\n                  flexShrink: 1,\n                  width: _vm.question.renderWidth,\n                  minWidth: _vm.question.minWidth,\n                  maxWidth: _vm.question.maxWidth,\n                },\n                attrs: {\n                  id: _vm.question.id,\n                  element: _vm.question,\n                  survey: _vm.survey,\n                  css: _vm.css,\n                },\n              }),\n            ],\n            1\n          )\n        : _vm._e(),\n    ],\n    1\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/header.vue?vue&type=template&id=69cff8cf&\":\n/*!*****************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/header.vue?vue&type=template&id=69cff8cf& ***!\n  \\*****************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_655742__) {\n\n\"use strict\";\n__nested_webpack_require_655742__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_655742__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_655742__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _vm.survey.renderedHasHeader\n    ? _c(\"div\", { class: _vm.survey.css.header }, [\n        _vm.survey.isLogoBefore\n          ? _c(\"div\", { class: _vm.survey.logoClassNames }, [\n              _c(\"img\", {\n                class: _vm.survey.css.logoImage,\n                style: {\n                  objectFit: _vm.survey.logoFit,\n                  width: _vm.survey.renderedStyleLogoWidth,\n                  height: _vm.survey.renderedStyleLogoHeight,\n                },\n                attrs: {\n                  src: _vm.survey.locLogo.renderedHtml,\n                  width: _vm.survey.renderedLogoWidth,\n                  height: _vm.survey.renderedLogoHeight,\n                  alt: _vm.survey.locTitle.renderedHtml,\n                },\n              }),\n            ])\n          : _vm._e(),\n        _vm._v(\" \"),\n        _vm.survey.renderedHasTitle\n          ? _c(\n              \"div\",\n              {\n                class: _vm.survey.css.headerText,\n                style: { maxWidth: _vm.survey.titleMaxWidth },\n              },\n              [\n                _c(\"survey-element-title\", {\n                  attrs: { element: _vm.survey, css: _vm.survey.css },\n                }),\n                _vm._v(\" \"),\n                _vm.survey.renderedHasDescription\n                  ? _c(\n                      \"h5\",\n                      { class: _vm.survey.css.description },\n                      [\n                        _c(\"survey-string\", {\n                          attrs: { locString: _vm.survey.locDescription },\n                        }),\n                      ],\n                      1\n                    )\n                  : _vm._e(),\n              ],\n              1\n            )\n          : _vm._e(),\n        _vm._v(\" \"),\n        _vm.survey.isLogoAfter\n          ? _c(\"div\", { class: _vm.survey.logoClassNames }, [\n              _c(\"img\", {\n                class: _vm.survey.css.logoImage,\n                style: {\n                  objectFit: _vm.survey.logoFit,\n                  width: _vm.survey.renderedStyleLogoWidth,\n                  height: _vm.survey.renderedStyleLogoHeight,\n                },\n                attrs: {\n                  src: _vm.survey.locLogo.renderedHtml,\n                  width: _vm.survey.renderedLogoWidth,\n                  height: _vm.survey.renderedLogoHeight,\n                  alt: _vm.survey.locTitle.renderedHtml,\n                },\n              }),\n            ])\n          : _vm._e(),\n        _vm._v(\" \"),\n        _c(\"div\", { class: _vm.survey.css.headerClose }),\n      ])\n    : _vm._e()\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/html.vue?vue&type=template&id=0742e16d&\":\n/*!***************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/html.vue?vue&type=template&id=0742e16d& ***!\n  \\***************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_659619__) {\n\n\"use strict\";\n__nested_webpack_require_659619__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_659619__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_659619__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\"div\", {\n    class: _vm.question.renderCssRoot,\n    domProps: { innerHTML: _vm._s(_vm.question.locHtml.renderedHtml) },\n  })\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/image.vue?vue&type=template&id=1dc8d709&\":\n/*!****************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/image.vue?vue&type=template&id=1dc8d709& ***!\n  \\****************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_661081__) {\n\n\"use strict\";\n__nested_webpack_require_661081__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_661081__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_661081__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\"div\", { class: _vm.question.cssClasses.root }, [\n    _vm.question.renderedMode === \"image\"\n      ? _c(\"img\", {\n          directives: [\n            {\n              name: \"show\",\n              rawName: \"v-show\",\n              value: _vm.question.imageLink && !_vm.question.contentNotLoaded,\n              expression: \"question.imageLink && !question.contentNotLoaded\",\n            },\n          ],\n          class: _vm.question.getImageCss(),\n          style: {\n            objectFit: _vm.question.imageFit,\n            width: _vm.question.renderedStyleWidth,\n            height: _vm.question.renderedStyleHeight,\n          },\n          attrs: {\n            src: _vm.question.locImageLink.renderedHtml,\n            alt: _vm.question.altText || _vm.question.title,\n            width: _vm.question.renderedWidth,\n            height: _vm.question.renderedHeight,\n          },\n          on: {\n            load: function (event) {\n              _vm.question.onLoadHandler()\n            },\n            error: function (event) {\n              _vm.question.onErrorHandler()\n            },\n          },\n        })\n      : _vm._e(),\n    _vm.question.renderedMode === \"video\"\n      ? _c(\"video\", {\n          directives: [\n            {\n              name: \"show\",\n              rawName: \"v-show\",\n              value: _vm.question.imageLink && !_vm.question.contentNotLoaded,\n              expression: \"question.imageLink && !question.contentNotLoaded\",\n            },\n          ],\n          class: _vm.question.getImageCss(),\n          style: {\n            objectFit: _vm.question.imageFit,\n            width: _vm.question.renderedStyleWidth,\n            height: _vm.question.renderedStyleHeight,\n          },\n          attrs: {\n            controls: \"\",\n            src: _vm.question.locImageLink.renderedHtml,\n            width: _vm.question.renderedWidth,\n            height: _vm.question.renderedHeight,\n          },\n          on: {\n            loadedmetadata: function (event) {\n              _vm.question.onLoadHandler()\n            },\n            error: function (event) {\n              _vm.question.onErrorHandler()\n            },\n          },\n        })\n      : _vm._e(),\n    _vm._v(\" \"),\n    _vm.question.renderedMode === \"youtube\"\n      ? _c(\"iframe\", {\n          class: _vm.question.getImageCss(),\n          style: {\n            objectFit: _vm.question.imageFit,\n            width: _vm.question.renderedStyleWidth,\n            height: _vm.question.renderedStyleHeight,\n          },\n          attrs: {\n            src: _vm.question.locImageLink.renderedHtml,\n            width: _vm.question.renderedWidth,\n            height: _vm.question.renderedHeight,\n          },\n        })\n      : _vm._e(),\n    _vm._v(\" \"),\n    !_vm.question.imageLink || _vm.question.contentNotLoaded\n      ? _c(\n          \"div\",\n          { class: _vm.question.cssClasses.noImage },\n          [\n            _c(\"sv-svg-icon\", {\n              attrs: {\n                iconName: _vm.question.cssClasses.noImageSvgIconId,\n                size: 48,\n              },\n            }),\n          ],\n          1\n        )\n      : _vm._e(),\n  ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/imagepicker-item.vue?vue&type=template&id=64b00179&\":\n/*!***************************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/imagepicker-item.vue?vue&type=template&id=64b00179& ***!\n  \\***************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_665571__) {\n\n\"use strict\";\n__nested_webpack_require_665571__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_665571__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_665571__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\"div\", { class: _vm.getItemClass(_vm.item) }, [\n    _c(\"label\", { class: _vm.question.cssClasses.label }, [\n      _vm.question.multiSelect\n        ? _c(\"input\", {\n            directives: [\n              {\n                name: \"model\",\n                rawName: \"v-model\",\n                value: _vm.question.value,\n                expression: \"question.value\",\n              },\n            ],\n            class: _vm.question.cssClasses.itemControl,\n            attrs: {\n              type: \"checkbox\",\n              name: _vm.question.questionName,\n              id: _vm.question.getItemId(_vm.item),\n              disabled: !_vm.question.getItemEnabled(_vm.item),\n              \"aria-required\": _vm.question.ariaRequired,\n              \"aria-label\": _vm.question.ariaLabel,\n              \"aria-invalid\": _vm.question.ariaInvalid,\n              \"aria-describedby\": _vm.question.ariaDescribedBy,\n            },\n            domProps: {\n              value: _vm.item.value,\n              checked: Array.isArray(_vm.question.value)\n                ? _vm._i(_vm.question.value, _vm.item.value) > -1\n                : _vm.question.value,\n            },\n            on: {\n              change: function ($event) {\n                var $$a = _vm.question.value,\n                  $$el = $event.target,\n                  $$c = $$el.checked ? true : false\n                if (Array.isArray($$a)) {\n                  var $$v = _vm.item.value,\n                    $$i = _vm._i($$a, $$v)\n                  if ($$el.checked) {\n                    $$i < 0 &&\n                      _vm.$set(_vm.question, \"value\", $$a.concat([$$v]))\n                  } else {\n                    $$i > -1 &&\n                      _vm.$set(\n                        _vm.question,\n                        \"value\",\n                        $$a.slice(0, $$i).concat($$a.slice($$i + 1))\n                      )\n                  }\n                } else {\n                  _vm.$set(_vm.question, \"value\", $$c)\n                }\n              },\n            },\n          })\n        : _c(\"input\", {\n            directives: [\n              {\n                name: \"model\",\n                rawName: \"v-model\",\n                value: _vm.question.value,\n                expression: \"question.value\",\n              },\n            ],\n            class: _vm.question.cssClasses.itemControl,\n            attrs: {\n              type: \"radio\",\n              name: _vm.question.questionName,\n              id: _vm.question.getItemId(_vm.item),\n              disabled: !_vm.question.getItemEnabled(_vm.item),\n              \"aria-required\": _vm.question.ariaRequired,\n              \"aria-label\": _vm.question.ariaLabel,\n              \"aria-invalid\": _vm.question.ariaInvalid,\n              \"aria-describedby\": _vm.question.ariaDescribedBy,\n            },\n            domProps: {\n              value: _vm.item.value,\n              checked: _vm._q(_vm.question.value, _vm.item.value),\n            },\n            on: {\n              change: function ($event) {\n                return _vm.$set(_vm.question, \"value\", _vm.item.value)\n              },\n            },\n          }),\n      _c(\"div\", { class: _vm.question.cssClasses.itemDecorator }, [\n        _c(\"div\", { class: _vm.question.cssClasses.imageContainer }, [\n          _vm.question.cssClasses.checkedItemDecorator\n            ? _c(\n                \"span\",\n                { class: this.question.cssClasses.checkedItemDecorator },\n                [\n                  _vm.question.cssClasses.checkedItemSvgIconId\n                    ? _c(\"sv-svg-icon\", {\n                        class: _vm.question.cssClasses.checkedItemSvgIcon,\n                        attrs: {\n                          size: \"auto\",\n                          iconName:\n                            _vm.question.cssClasses.checkedItemSvgIconId,\n                        },\n                      })\n                    : _vm._e(),\n                ],\n                1\n              )\n            : _vm._e(),\n          _vm._v(\" \"),\n          _vm.item.imageLink &&\n          !_vm.item.contentNotLoaded &&\n          _vm.question.contentMode === \"image\"\n            ? _c(\"img\", {\n                class: _vm.question.cssClasses.image,\n                style: { objectFit: _vm.question.imageFit },\n                attrs: {\n                  src: _vm.item.imageLink,\n                  width: _vm.question.renderedImageWidth,\n                  height: _vm.question.renderedImageHeight,\n                  alt: _vm.item.locText.renderedHtml,\n                },\n                on: {\n                  load: function (event) {\n                    _vm.question.onContentLoaded(_vm.item, event)\n                  },\n                  error: function (event) {\n                    _vm.item.onErrorHandler()\n                  },\n                },\n              })\n            : _vm._e(),\n          _vm.item.imageLink &&\n          !_vm.item.contentNotLoaded &&\n          _vm.question.contentMode === \"video\"\n            ? _c(\"video\", {\n                class: _vm.question.cssClasses.image,\n                style: { objectFit: _vm.question.imageFit },\n                attrs: {\n                  controls: \"\",\n                  src: _vm.item.imageLink,\n                  width: _vm.question.renderedImageWidth,\n                  height: _vm.question.renderedImageHeight,\n                },\n                on: {\n                  loadedmetadata: function (event) {\n                    _vm.question.onContentLoaded(_vm.item, event)\n                  },\n                  error: function (event) {\n                    _vm.item.onErrorHandler()\n                  },\n                },\n              })\n            : _vm._e(),\n          _vm._v(\" \"),\n          !_vm.item.imageLink || _vm.item.contentNotLoaded\n            ? _c(\n                \"div\",\n                {\n                  class: _vm.question.cssClasses.itemNoImage,\n                  style: {\n                    width: _vm.question.renderedImageWidth + \"px\",\n                    height: _vm.question.renderedImageHeight + \"px\",\n                    objectFit: _vm.question.imageFit,\n                  },\n                },\n                [\n                  _c(\"sv-svg-icon\", {\n                    class: _vm.question.cssClasses.itemNoImageSvgIcon,\n                    attrs: {\n                      iconName: _vm.question.cssClasses.itemNoImageSvgIconId,\n                      size: 48,\n                    },\n                  }),\n                ],\n                1\n              )\n            : _vm._e(),\n        ]),\n        _vm.question.showLabel\n          ? _c(\n              \"span\",\n              { class: _vm.question.cssClasses.itemText },\n              [_c(\"survey-string\", { attrs: { locString: _vm.item.locText } })],\n              1\n            )\n          : _vm._e(),\n      ]),\n    ]),\n  ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/imagepicker.vue?vue&type=template&id=153fe052&\":\n/*!**********************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/imagepicker.vue?vue&type=template&id=153fe052& ***!\n  \\**********************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_673747__) {\n\n\"use strict\";\n__nested_webpack_require_673747__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_673747__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_673747__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"fieldset\",\n    { class: _vm.question.getSelectBaseRootCss() },\n    [\n      _c(\"legend\", {\n        attrs: {\n          role: \"radio\",\n          \"aria-label\": _vm.question.locTitle.renderedHtml,\n        },\n      }),\n      _vm._v(\" \"),\n      _vm._l(_vm.question.visibleChoices, function (item) {\n        return !_vm.question.hasColumns\n          ? _c(\"survey-imagepicker-item\", {\n              key: item.value,\n              attrs: { question: _vm.question, item: item },\n            })\n          : _vm._e()\n      }),\n      _vm._v(\" \"),\n      _vm._l(_vm.question.columns, function (column, colIndex) {\n        return _vm.question.hasColumns\n          ? _c(\n              \"div\",\n              {\n                key: colIndex,\n                class: _vm.question.getColumnClass(),\n                attrs: { role: \"presentation\" },\n              },\n              _vm._l(column, function (item) {\n                return _c(\"survey-imagepicker-item\", {\n                  key: item.value,\n                  attrs: { question: _vm.question, item: item },\n                })\n              }),\n              1\n            )\n          : _vm._e()\n      }),\n    ],\n    2\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrix.vue?vue&type=template&id=7fa2f403&\":\n/*!*****************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/matrix.vue?vue&type=template&id=7fa2f403& ***!\n  \\*****************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_676252__) {\n\n\"use strict\";\n__nested_webpack_require_676252__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_676252__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_676252__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\"div\", { class: _vm.question.cssClasses.tableWrapper }, [\n    _c(\"fieldset\", [\n      _c(\"legend\", {\n        attrs: { \"aria-label\": _vm.question.locTitle.renderedHtml },\n      }),\n      _vm._v(\" \"),\n      _c(\"table\", { class: _vm.question.getTableCss() }, [\n        _vm.question.showHeader\n          ? _c(\"thead\", [\n              _c(\n                \"tr\",\n                [\n                  _vm.question.hasRows ? _c(\"td\") : _vm._e(),\n                  _vm._v(\" \"),\n                  _vm._l(\n                    _vm.question.visibleColumns,\n                    function (column, columnIndex) {\n                      return _c(\n                        \"th\",\n                        {\n                          key: columnIndex,\n                          class: _vm.question.cssClasses.headerCell,\n                          style: {\n                            minWidth: _vm.question.columnMinWidth,\n                            width: _vm.question.columnMinWidth,\n                          },\n                        },\n                        [\n                          _c(\"survey-string\", {\n                            attrs: { locString: column.locText },\n                          }),\n                        ],\n                        1\n                      )\n                    }\n                  ),\n                ],\n                2\n              ),\n            ])\n          : _vm._e(),\n        _vm._v(\" \"),\n        _c(\n          \"tbody\",\n          _vm._l(_vm.question.visibleRows, function (row, rowIndex) {\n            return _c(\n              \"tr\",\n              {\n                key: \"row_\" + row.name + \"_\" + rowIndex,\n                class: row.rowClasses || undefined,\n              },\n              [\n                _c(\n                  \"td\",\n                  {\n                    directives: [\n                      {\n                        name: \"show\",\n                        rawName: \"v-show\",\n                        value: _vm.question.hasRows,\n                        expression: \"question.hasRows\",\n                      },\n                    ],\n                    class: _vm.question.cssClasses.rowTextCell,\n                    style: {\n                      minWidth: _vm.question.rowTitleWidth,\n                      width: _vm.question.rowTitleWidth,\n                    },\n                  },\n                  [_c(\"survey-string\", { attrs: { locString: row.locText } })],\n                  1\n                ),\n                _vm._v(\" \"),\n                _vm._l(\n                  _vm.question.visibleColumns,\n                  function (column, columnIndex) {\n                    return _vm.question.hasCellText\n                      ? _c(\n                          \"td\",\n                          {\n                            key: columnIndex,\n                            class: _vm.question.getItemClass(row, column),\n                            on: {\n                              click: function ($event) {\n                                return _vm.cellClick(row, column)\n                              },\n                            },\n                          },\n                          [\n                            _c(\"survey-string\", {\n                              attrs: {\n                                locString: _vm.question.getCellDisplayLocText(\n                                  row.name,\n                                  column\n                                ),\n                              },\n                            }),\n                          ],\n                          1\n                        )\n                      : _vm._e()\n                  }\n                ),\n                _vm._v(\" \"),\n                _vm._l(\n                  _vm.question.visibleColumns,\n                  function (column, columnIndex) {\n                    return !_vm.question.hasCellText\n                      ? _c(\n                          \"td\",\n                          {\n                            key: columnIndex,\n                            class: _vm.question.cssClasses.cell,\n                            attrs: {\n                              \"data-responsive-title\":\n                                column.locText.renderedHtml,\n                            },\n                            on: {\n                              click: function ($event) {\n                                return _vm.cellClick(row, column)\n                              },\n                            },\n                          },\n                          [\n                            _c(\n                              \"label\",\n                              {\n                                class: _vm.question.getItemClass(row, column),\n                                on: {\n                                  mousedown: function ($event) {\n                                    return _vm.question.onMouseDown()\n                                  },\n                                },\n                              },\n                              [\n                                _c(\"input\", {\n                                  directives: [\n                                    {\n                                      name: \"model\",\n                                      rawName: \"v-model\",\n                                      value: row.value,\n                                      expression: \"row.value\",\n                                    },\n                                  ],\n                                  class: _vm.question.cssClasses.itemValue,\n                                  attrs: {\n                                    type: \"radio\",\n                                    name: row.fullName,\n                                    disabled: _vm.question.isInputReadOnly,\n                                    id:\n                                      _vm.question.inputId +\n                                      \"_\" +\n                                      row.name +\n                                      \"_\" +\n                                      columnIndex,\n                                    \"aria-required\": _vm.question.ariaRequired,\n                                    \"aria-label\": column.locText.renderedHtml,\n                                    \"aria-invalid\": _vm.question.ariaInvalid,\n                                    \"aria-describedby\":\n                                      _vm.question.ariaDescribedBy,\n                                  },\n                                  domProps: {\n                                    value: column.value,\n                                    checked: _vm._q(row.value, column.value),\n                                  },\n                                  on: {\n                                    change: function ($event) {\n                                      return _vm.$set(\n                                        row,\n                                        \"value\",\n                                        column.value\n                                      )\n                                    },\n                                  },\n                                }),\n                                _vm._v(\" \"),\n                                _c(\n                                  \"span\",\n                                  {\n                                    class:\n                                      _vm.question.cssClasses.materialDecorator,\n                                  },\n                                  [\n                                    _vm.question.itemSvgIcon\n                                      ? _c(\n                                          \"svg\",\n                                          {\n                                            class:\n                                              _vm.question.cssClasses\n                                                .itemDecorator,\n                                          },\n                                          [\n                                            _c(\"use\", {\n                                              attrs: {\n                                                \"xlink:href\":\n                                                  _vm.question.itemSvgIcon,\n                                              },\n                                            }),\n                                          ]\n                                        )\n                                      : _vm._e(),\n                                  ]\n                                ),\n                                _vm._v(\" \"),\n                                _c(\n                                  \"span\",\n                                  {\n                                    directives: [\n                                      {\n                                        name: \"show\",\n                                        rawName: \"v-show\",\n                                        value: _vm.question.isMobile,\n                                        expression: \"question.isMobile\",\n                                      },\n                                    ],\n                                    class:\n                                      _vm.question.cssClasses\n                                        .cellResponsiveTitle,\n                                  },\n                                  [\n                                    _c(\"survey-string\", {\n                                      attrs: { locString: column.locText },\n                                    }),\n                                  ],\n                                  1\n                                ),\n                              ]\n                            ),\n                          ]\n                        )\n                      : _vm._e()\n                  }\n                ),\n              ],\n              2\n            )\n          }),\n          0\n        ),\n      ]),\n    ]),\n  ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrixcell.vue?vue&type=template&id=3ca54ee5&\":\n/*!*********************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/matrixcell.vue?vue&type=template&id=3ca54ee5& ***!\n  \\*********************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_687506__) {\n\n\"use strict\";\n__nested_webpack_require_687506__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_687506__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_687506__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"td\",\n    {\n      class: _vm.cell.className,\n      style: _vm.getCellStyle(),\n      attrs: {\n        \"data-responsive-title\": _vm.getHeaders(),\n        title: _vm.cell.getTitle(),\n        colspan: _vm.cell.colSpans,\n      },\n      on: {\n        focusin: function ($event) {\n          return _vm.cell.focusIn()\n        },\n      },\n    },\n    [\n      _vm.cell.isErrorsCell\n        ? _c(\"survey-errors\", { attrs: { element: _vm.cell.question } })\n        : _vm._e(),\n      _vm._v(\" \"),\n      _vm.cell.isActionsCell\n        ? _c(\"sv-action-bar\", {\n            attrs: { model: _vm.cell.item.getData(), handleClick: false },\n          })\n        : _vm._e(),\n      _vm._v(\" \"),\n      _vm.cell.hasPanel\n        ? _c(_vm.getComponentName(_vm.cell.panel), {\n            tag: \"component\",\n            attrs: { question: _vm.cell.panel, css: _vm.question.cssClasses },\n          })\n        : _vm._e(),\n      _vm._v(\" \"),\n      _vm.cell.hasQuestion\n        ? _c(\n            \"div\",\n            { class: _vm.question.cssClasses.cellQuestionWrapper },\n            [\n              !_vm.cell.isChoice && _vm.cell.question.isDefaultRendering()\n                ? _c(_vm.getComponentName(_vm.cell.question), {\n                    directives: [\n                      {\n                        name: \"show\",\n                        rawName: \"v-show\",\n                        value: _vm.isVisible,\n                        expression: \"isVisible\",\n                      },\n                    ],\n                    tag: \"component\",\n                    attrs: { question: _vm.cell.question },\n                  })\n                : _vm._e(),\n              _vm._v(\" \"),\n              !_vm.cell.isChoice && !_vm.cell.question.isDefaultRendering()\n                ? _c(_vm.cell.question.getComponentName(), {\n                    directives: [\n                      {\n                        name: \"show\",\n                        rawName: \"v-show\",\n                        value: _vm.isVisible,\n                        expression: \"isVisible\",\n                      },\n                    ],\n                    tag: \"component\",\n                    attrs: { question: _vm.cell.question },\n                  })\n                : _vm._e(),\n              _vm._v(\" \"),\n              _vm.cell.isRadio\n                ? _c(\"survey-radiogroup-item\", {\n                    key: _vm.cell.item.value,\n                    class: _vm.cell.question.getItemClass(_vm.cell.item),\n                    attrs: {\n                      question: _vm.cell.question,\n                      item: _vm.cell.item,\n                      index: _vm.getCellIndex(),\n                      hideLabel: true,\n                    },\n                  })\n                : _vm._e(),\n              _vm._v(\" \"),\n              _vm.cell.isCheckbox\n                ? _c(\"survey-checkbox-item\", {\n                    key: _vm.cell.item.value,\n                    class: _vm.cell.question.getItemClass(_vm.cell.item),\n                    attrs: {\n                      question: _vm.cell.question,\n                      item: _vm.cell.item,\n                      index: _vm.getCellIndex(),\n                      hideLabel: true,\n                    },\n                  })\n                : _vm._e(),\n              _vm._v(\" \"),\n              _vm.cell.isOtherChoice\n                ? _c(\"survey-other-choice\", {\n                    attrs: { question: _vm.cell.question },\n                  })\n                : _vm._e(),\n            ],\n            1\n          )\n        : _vm._e(),\n      _vm._v(\" \"),\n      _vm.cell.hasTitle\n        ? _c(\"survey-string\", { attrs: { locString: _vm.cell.locTitle } })\n        : _vm._e(),\n      _vm._v(\" \"),\n      !!_vm.cell.requiredText\n        ? _c(\"span\", { class: _vm.question.cssClasses.cellRequiredText }, [\n            _vm._v(_vm._s(_vm.cell.requiredText)),\n          ])\n        : _vm._e(),\n    ],\n    1\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrixdropdown.vue?vue&type=template&id=0b4da6d8&\":\n/*!*************************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/matrixdropdown.vue?vue&type=template&id=0b4da6d8& ***!\n  \\*************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_692761__) {\n\n\"use strict\";\n__nested_webpack_require_692761__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_692761__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_692761__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\"survey-matrixtable\", { attrs: { question: _vm.question } })\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrixdynamic.vue?vue&type=template&id=9a0b88e8&\":\n/*!************************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/matrixdynamic.vue?vue&type=template&id=9a0b88e8& ***!\n  \\************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_694191__) {\n\n\"use strict\";\n__nested_webpack_require_694191__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_694191__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_694191__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    [\n      _vm.question.renderedTable.showAddRowOnTop\n        ? _c(\"div\", { class: _vm.question.cssClasses.footer }, [\n            _c(\n              \"button\",\n              {\n                class: _vm.question.getAddRowButtonCss(),\n                attrs: { type: \"button\" },\n                on: { click: _vm.addRowClick },\n              },\n              [\n                _c(\"survey-string\", {\n                  attrs: { locString: _vm.question.locAddRowText },\n                }),\n                _vm._v(\" \"),\n                _c(\"span\", { class: _vm.question.cssClasses.iconAdd }),\n              ],\n              1\n            ),\n          ])\n        : _vm._e(),\n      _vm._v(\" \"),\n      _vm.question.renderedTable.showTable\n        ? _c(\"survey-matrixtable\", { attrs: { question: _vm.question } })\n        : _vm._e(),\n      _vm._v(\" \"),\n      !_vm.question.renderedTable.showTable\n        ? _c(\"div\", { class: _vm.question.cssClasses.emptyRowsSection }, [\n            _c(\n              \"div\",\n              { class: _vm.question.cssClasses.emptyRowsText },\n              [\n                _c(\"survey-string\", {\n                  attrs: { locString: _vm.question.locEmptyRowsText },\n                }),\n              ],\n              1\n            ),\n            _vm._v(\" \"),\n            _vm.question.renderedTable.showAddRow\n              ? _c(\n                  \"button\",\n                  {\n                    class: _vm.question.getAddRowButtonCss(true),\n                    attrs: { type: \"button\" },\n                    on: { click: _vm.addRowClick },\n                  },\n                  [\n                    _c(\"survey-string\", {\n                      attrs: { locString: _vm.question.locAddRowText },\n                    }),\n                    _vm._v(\" \"),\n                    _c(\"span\", { class: _vm.question.cssClasses.iconAdd }),\n                  ],\n                  1\n                )\n              : _vm._e(),\n          ])\n        : _vm._e(),\n      _vm._v(\" \"),\n      _vm.question.renderedTable.showAddRowOnBottom\n        ? _c(\"div\", { class: _vm.question.cssClasses.footer }, [\n            _c(\n              \"button\",\n              {\n                class: _vm.question.getAddRowButtonCss(),\n                attrs: { type: \"button\" },\n                on: { click: _vm.addRowClick },\n              },\n              [\n                _c(\"survey-string\", {\n                  attrs: { locString: _vm.question.locAddRowText },\n                }),\n                _vm._v(\" \"),\n                _c(\"span\", { class: _vm.question.cssClasses.iconAdd }),\n              ],\n              1\n            ),\n          ])\n        : _vm._e(),\n    ],\n    1\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrixheaderrequired.vue?vue&type=template&id=5d995022&\":\n/*!*******************************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/matrixheaderrequired.vue?vue&type=template&id=5d995022& ***!\n  \\*******************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_698267__) {\n\n\"use strict\";\n__nested_webpack_require_698267__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_698267__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_698267__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _vm.column.isRenderedRequired\n    ? _c(\"span\", { staticClass: \"sv-vue-title-additional-div\" }, [\n        _c(\"span\", [_vm._v(\" \")]),\n        _vm._v(\" \"),\n        _c(\"span\", { class: _vm.question.cssClasses.cellRequiredText }, [\n          _vm._v(_vm._s(_vm.column.requiredText)),\n        ]),\n      ])\n    : _vm._e()\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrixtable.vue?vue&type=template&id=fa197e4a&\":\n/*!**********************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/matrixtable.vue?vue&type=template&id=fa197e4a& ***!\n  \\**********************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_699939__) {\n\n\"use strict\";\n__nested_webpack_require_699939__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_699939__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_699939__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    {\n      class: _vm.question.cssClasses.tableWrapper,\n      style: { overflowX: _vm.question.showHorizontalScroll ? \"scroll\" : \"\" },\n    },\n    [\n      _c(\"table\", { class: _vm.question.getTableCss() }, [\n        _vm.table.showHeader\n          ? _c(\"thead\", [\n              _c(\n                \"tr\",\n                [\n                  _vm._l(_vm.table.headerRow.cells, function (cell) {\n                    return [\n                      cell.hasTitle\n                        ? _c(\n                            \"th\",\n                            {\n                              key: \"header_\" + cell.id,\n                              class: cell.className,\n                              style: {\n                                minWidth: cell.minWidth,\n                                width: cell.width,\n                              },\n                            },\n                            [\n                              _c(\"survey-string\", {\n                                attrs: { locString: cell.locTitle },\n                              }),\n                              _vm._v(\" \"),\n                              !!cell.column\n                                ? _c(\"survey-matrixheaderrequired\", {\n                                    attrs: {\n                                      column: cell.column,\n                                      question: _vm.question,\n                                    },\n                                  })\n                                : _vm._e(),\n                            ],\n                            1\n                          )\n                        : _vm._e(),\n                      _vm._v(\" \"),\n                      !cell.hasTitle\n                        ? _c(\"td\", {\n                            key: \"header_\" + cell.id,\n                            class: cell.className,\n                            style: {\n                              minWidth: cell.minWidth,\n                              width: cell.width,\n                            },\n                          })\n                        : _vm._e(),\n                    ]\n                  }),\n                ],\n                2\n              ),\n            ])\n          : _vm._e(),\n        _vm._v(\" \"),\n        _c(\n          \"tbody\",\n          [\n            _vm._l(_vm.table.rows, function (row) {\n              return [\n                row.visible\n                  ? _c(\n                      \"tr\",\n                      {\n                        key: _vm.question.inputId + \"_\" + row.id,\n                        class: row.className,\n                        attrs: {\n                          \"data-sv-drop-target-matrix-row\":\n                            row.row && row.row.id,\n                        },\n                      },\n                      _vm._l(row.cells, function (cell, cellIndex) {\n                        return _c(\"survey-matrixcell\", {\n                          key: row.id + \"_\" + cellIndex,\n                          attrs: { cell: cell, question: _vm.question },\n                        })\n                      }),\n                      1\n                    )\n                  : _vm._e(),\n              ]\n            }),\n          ],\n          2\n        ),\n        _vm._v(\" \"),\n        _vm.table.showFooter\n          ? _c(\"tfoot\", [\n              _c(\n                \"tr\",\n                _vm._l(_vm.table.footerRow.cells, function (cell, cellIndex) {\n                  return _c(\"survey-matrixcell\", {\n                    key: \"footer_\" + cellIndex,\n                    attrs: { cell: cell, question: _vm.question },\n                  })\n                }),\n                1\n              ),\n            ])\n          : _vm._e(),\n      ]),\n    ]\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/multipletext.vue?vue&type=template&id=93fe4c02&\":\n/*!***********************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/multipletext.vue?vue&type=template&id=93fe4c02& ***!\n  \\***********************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_705023__) {\n\n\"use strict\";\n__nested_webpack_require_705023__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_705023__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_705023__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\"table\", { class: _vm.question.getQuestionRootCss() }, [\n    _c(\n      \"tbody\",\n      [\n        _vm._l(_vm.question.getRows(), function (row, rowIndex) {\n          return [\n            row.isVisible\n              ? _c(\n                  \"tr\",\n                  {\n                    key: _vm.question.inputId + \"rowkey\" + rowIndex,\n                    class: _vm.question.cssClasses.row,\n                  },\n                  _vm._l(row.cells, function (cell) {\n                    return _c(\n                      \"td\",\n                      {\n                        key: \"item\" + cell.item.editor.id,\n                        class: cell.className,\n                      },\n                      [\n                        _c(\"survey-multipletext-item\", {\n                          attrs: { question: _vm.question, cell: cell },\n                        }),\n                      ],\n                      1\n                    )\n                  }),\n                  0\n                )\n              : _vm._e(),\n          ]\n        }),\n      ],\n      2\n    ),\n  ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/multipletextitem.vue?vue&type=template&id=22488812&\":\n/*!***************************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/multipletextitem.vue?vue&type=template&id=22488812& ***!\n  \\***************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_707473__) {\n\n\"use strict\";\n__nested_webpack_require_707473__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_707473__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_707473__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return !_vm.cell.isErrorsCell\n    ? _c(\"label\", { class: _vm.question.getItemLabelCss(_vm.item) }, [\n        _c(\n          \"span\",\n          { class: _vm.question.getItemTitleCss() },\n          [\n            _vm.item.editor.isRequireTextBeforeTitle ||\n            _vm.item.editor.isRequireTextOnStart\n              ? _c(\"span\", { class: _vm.question.cssClasses.requiredText }, [\n                  _vm._v(_vm._s(_vm.item.editor.requiredText)),\n                ])\n              : _vm._e(),\n            _vm._v(\" \"),\n            _c(\"survey-string\", { attrs: { locString: _vm.item.locTitle } }),\n            _vm._v(\" \"),\n            _vm.item.editor.isRequireTextAfterTitle\n              ? _c(\"span\", [_vm._v(\" \")])\n              : _vm._e(),\n            _vm._v(\" \"),\n            _vm.item.editor.isRequireTextAfterTitle\n              ? _c(\n                  \"span\",\n                  {\n                    class: _vm.question.cssClasses.requiredText,\n                    attrs: { \"aria-hidden\": \"true\" },\n                  },\n                  [_vm._v(_vm._s(_vm.item.editor.requiredText))]\n                )\n              : _vm._e(),\n          ],\n          1\n        ),\n        _vm._v(\" \"),\n        _c(\n          \"div\",\n          {\n            key: _vm.item.editor.id,\n            class: _vm.question.getItemCss(),\n            on: {\n              focusin: function ($event) {\n                return _vm.item.focusIn()\n              },\n            },\n          },\n          [\n            _c(_vm.getComponentName(_vm.item.editor), {\n              tag: \"component\",\n              attrs: { question: _vm.item.editor },\n            }),\n          ],\n          1\n        ),\n      ])\n    : _c(\"survey-errors\", { attrs: { element: _vm.item.editor } })\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/page.vue?vue&type=template&id=4e962a51&\":\n/*!***************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/page.vue?vue&type=template&id=4e962a51& ***!\n  \\***************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_710533__) {\n\n\"use strict\";\n__nested_webpack_require_710533__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_710533__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_710533__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    { class: _vm.page.cssRoot },\n    [\n      _c(\"survey-element-title\", {\n        attrs: { element: _vm.page, css: _vm.css },\n      }),\n      _vm._v(\" \"),\n      _vm.showDescription\n        ? _c(\n            \"div\",\n            { class: _vm.page.cssClasses.page.description },\n            [\n              _c(\"survey-string\", {\n                attrs: { locString: _vm.page.locDescription },\n              }),\n            ],\n            1\n          )\n        : _vm._e(),\n      _vm._v(\" \"),\n      _vm._l(_vm.rows, function (row, index) {\n        return [\n          row.visible\n            ? _c(\"survey-row\", {\n                key: _vm.page.id + \"_\" + index,\n                attrs: { row: row, survey: _vm.survey, css: _vm.css },\n              })\n            : _vm._e(),\n        ]\n      }),\n    ],\n    2\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/panel.vue?vue&type=template&id=0c78899c&\":\n/*!****************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/panel.vue?vue&type=template&id=0c78899c& ***!\n  \\****************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_712684__) {\n\n\"use strict\";\n__nested_webpack_require_712684__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_712684__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_712684__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _vm.question.isVisible\n    ? _c(\n        \"div\",\n        {\n          class: _vm.question.getContainerCss(),\n          attrs: { id: _vm.question.id },\n        },\n        [\n          _vm.question.showErrorsAbovePanel\n            ? _c(\"survey-errors\", { attrs: { element: _vm.question } })\n            : _vm._e(),\n          _vm._v(\" \"),\n          _vm.question.hasTitle || _vm.question.hasDescription\n            ? _c(\"survey-element-header\", {\n                attrs: { element: _vm.question, css: _vm.css },\n              })\n            : _vm._e(),\n          _vm._v(\" \"),\n          !_vm.question.showErrorsAbovePanel\n            ? _c(\"survey-errors\", { attrs: { element: _vm.question } })\n            : _vm._e(),\n          _vm._v(\" \"),\n          !_vm.isCollapsed\n            ? _c(\n                \"div\",\n                {\n                  class: _vm.question.cssClasses.panel.content,\n                  style: { paddingLeft: _vm.question.innerPaddingLeft },\n                  attrs: { id: _vm.question.contentId },\n                },\n                [\n                  _vm._l(_vm.rows, function (row, index) {\n                    return [\n                      row.visible\n                        ? _c(\"survey-row\", {\n                            key: _vm.question.id + \"_\" + index,\n                            attrs: {\n                              row: row,\n                              survey: _vm.survey,\n                              css: _vm.css,\n                            },\n                          })\n                        : _vm._e(),\n                    ]\n                  }),\n                  _vm._v(\" \"),\n                  _c(\"sv-action-bar\", {\n                    attrs: { model: _vm.question.getFooterToolbar() },\n                  }),\n                ],\n                2\n              )\n            : _vm._e(),\n        ],\n        1\n      )\n    : _vm._e()\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/paneldynamic.vue?vue&type=template&id=9dda5d06&\":\n/*!***********************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/paneldynamic.vue?vue&type=template&id=9dda5d06& ***!\n  \\***********************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_715922__) {\n\n\"use strict\";\n__nested_webpack_require_715922__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_715922__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_715922__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    { class: _vm.question.cssClasses.root },\n    [\n      _vm.question.getShowNoEntriesPlaceholder()\n        ? _c(\n            \"div\",\n            { class: _vm.question.cssClasses.noEntriesPlaceholder },\n            [\n              _c(\n                \"span\",\n                [\n                  _c(\"survey-string\", {\n                    attrs: { locString: _vm.question.locNoEntriesText },\n                  }),\n                ],\n                1\n              ),\n              _vm._v(\" \"),\n              _c(\"sv-paneldynamic-add-btn\", {\n                attrs: { data: { question: _vm.question } },\n              }),\n            ],\n            1\n          )\n        : _vm._e(),\n      _vm._v(\" \"),\n      !_vm.showLegacyNavigation &&\n      _vm.question.isProgressTopShowing &&\n      _vm.question.isRangeShowing\n        ? _c(\"div\", { class: _vm.question.cssClasses.progress }, [\n            _c(\"div\", {\n              class: _vm.question.cssClasses.progressBar,\n              style: { width: _vm.question.progress },\n              attrs: { role: \"progressbar\" },\n            }),\n          ])\n        : _vm._e(),\n      _vm._v(\" \"),\n      _vm.showLegacyNavigation && _vm.question.isProgressTopShowing\n        ? _c(\"survey-paneldynamicprogress\", {\n            attrs: { question: _vm.question },\n          })\n        : _vm._e(),\n      _vm._v(\" \"),\n      _vm._l(_vm.renderedPanels, function (panel, index) {\n        return [\n          _c(\n            \"div\",\n            { key: panel.id, class: _vm.question.getPanelWrapperCss() },\n            [\n              _c(\"survey-panel\", { attrs: { question: panel, css: _vm.css } }),\n              _vm._v(\" \"),\n              _vm.question.panelRemoveButtonLocation === \"right\" &&\n              _vm.question.canRemovePanel &&\n              panel.state !== \"collapsed\"\n                ? _c(\"sv-paneldynamic-remove-btn\", {\n                    attrs: { data: { question: _vm.question, panel: panel } },\n                  })\n                : _vm._e(),\n            ],\n            1\n          ),\n          _vm._v(\" \"),\n          _vm.question.isRenderModeList &&\n          index < _vm.question.visiblePanelCount - 1\n            ? _c(\"hr\", {\n                key: \"separator\" + panel.id,\n                class: _vm.question.cssClasses.separator,\n              })\n            : _vm._e(),\n        ]\n      }),\n      _vm._v(\" \"),\n      _vm.showLegacyNavigation && _vm.question.isProgressBottomShowing\n        ? _c(\"survey-paneldynamicprogress\", {\n            attrs: { question: _vm.question },\n          })\n        : _vm._e(),\n      _vm._v(\" \"),\n      _vm.showLegacyNavigation && _vm.question.isRenderModeList\n        ? _c(\"sv-paneldynamic-add-btn\", {\n            attrs: { data: { question: _vm.question } },\n          })\n        : _vm._e(),\n      _vm._v(\" \"),\n      _vm.question.showNavigation\n        ? _c(\"survey-paneldynamicprogress-v2\", {\n            attrs: { question: _vm.question },\n          })\n        : _vm._e(),\n    ],\n    2\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/paneldynamicprogress.vue?vue&type=template&id=742bffac&\":\n/*!*******************************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/paneldynamicprogress.vue?vue&type=template&id=742bffac& ***!\n  \\*******************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_720290__) {\n\n\"use strict\";\n__nested_webpack_require_720290__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_720290__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_720290__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\"div\", { class: this.cssClass }, [\n    _c(\n      \"div\",\n      { class: this.cssClass, staticStyle: { clear: \"both\" } },\n      [\n        _c(\n          \"div\",\n          { class: _vm.question.cssClasses.progressContainer },\n          [\n            _c(\"sv-paneldynamic-prev-btn\", {\n              attrs: { data: { question: _vm.question } },\n            }),\n            _vm._v(\" \"),\n            _vm.question.isRangeShowing\n              ? _c(\"div\", { class: _vm.question.cssClasses.progress }, [\n                  _c(\"div\", {\n                    class: _vm.question.cssClasses.progressBar,\n                    style: { width: _vm.question.progress },\n                    attrs: { role: \"progressbar\" },\n                  }),\n                ])\n              : _vm._e(),\n            _vm._v(\" \"),\n            _c(\"sv-paneldynamic-next-btn\", {\n              attrs: { data: { question: _vm.question } },\n            }),\n          ],\n          1\n        ),\n        _vm._v(\" \"),\n        _c(\"sv-paneldynamic-add-btn\", {\n          attrs: { data: { question: _vm.question } },\n        }),\n        _vm._v(\" \"),\n        _c(\"sv-paneldynamic-progress-text\", {\n          attrs: { data: { question: _vm.question } },\n        }),\n      ],\n      1\n    ),\n  ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/paneldynamicprogressV2.vue?vue&type=template&id=33ce4046&\":\n/*!*********************************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/paneldynamicprogressV2.vue?vue&type=template&id=33ce4046& ***!\n  \\*********************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_722932__) {\n\n\"use strict\";\n__nested_webpack_require_722932__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_722932__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_722932__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return !!_vm.question.cssClasses.footer\n    ? _c(\"div\", { class: _vm.question.cssClasses.footer }, [\n        _c(\"hr\", { class: _vm.question.cssClasses.separator }),\n        _vm._v(\" \"),\n        _vm.question.isRangeShowing && _vm.question.isProgressBottomShowing\n          ? _c(\"div\", { class: _vm.question.cssClasses.progress }, [\n              _c(\"div\", {\n                class: _vm.question.cssClasses.progressBar,\n                style: { width: _vm.question.progress },\n                attrs: { role: \"progressbar\" },\n              }),\n            ])\n          : _vm._e(),\n        _vm._v(\" \"),\n        _vm.question.footerToolbar.visibleActions.length\n          ? _c(\n              \"div\",\n              { class: _vm.question.cssClasses.footerButtonsContainer },\n              [\n                _c(\"sv-action-bar\", {\n                  attrs: { model: _vm.question.footerToolbar },\n                }),\n              ],\n              1\n            )\n          : _vm._e(),\n      ])\n    : _vm._e()\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/popup-survey.vue?vue&type=template&id=7937df5d&\":\n/*!***********************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/popup-survey.vue?vue&type=template&id=7937df5d& ***!\n  \\***********************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_725283__) {\n\n\"use strict\";\n__nested_webpack_require_725283__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_725283__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_725283__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _vm.surveyWindow.isShowing\n    ? _c(\n        \"div\",\n        {\n          class: _vm.surveyWindow.cssRoot,\n          staticStyle: { position: \"fixed\", bottom: \"3px\", right: \"10px\" },\n          style: {\n            maxWidth: _vm.surveyWindow.renderedWidth,\n            width: _vm.surveyWindow.renderedWidth,\n          },\n        },\n        [\n          _c(\"div\", { class: _vm.surveyWindow.cssHeaderRoot }, [\n            _c(\n              \"span\",\n              {\n                staticStyle: {\n                  width: \"100%\",\n                  cursor: \"pointer\",\n                  \"user-select\": \"none\",\n                },\n                on: { click: _vm.doExpand },\n              },\n              [\n                _c(\n                  \"span\",\n                  {\n                    class: _vm.surveyWindow.cssHeaderTitle,\n                    staticStyle: { \"padding-right\": \"10px\" },\n                  },\n                  [\n                    _c(\"survey-string\", {\n                      attrs: { locString: _vm.windowSurvey.locTitle },\n                    }),\n                  ],\n                  1\n                ),\n                _vm._v(\" \"),\n                _c(\"span\", {\n                  class: _vm.expandedCss,\n                  attrs: { \"aria-hidden\": \"true\" },\n                }),\n              ]\n            ),\n            _vm._v(\" \"),\n            _vm.surveyWindow.allowClose\n              ? _c(\n                  \"span\",\n                  {\n                    class: _vm.surveyWindow.cssHeaderButton,\n                    staticStyle: {\n                      transform: \"rotate(45deg)\",\n                      float: \"right\",\n                      cursor: \"pointer\",\n                      \"user-select\": \"none\",\n                      width: \"24px\",\n                      height: \"24px\",\n                    },\n                    on: { click: _vm.doHide },\n                  },\n                  [\n                    _c(\"sv-svg-icon\", {\n                      attrs: { iconName: \"icon-expanddetail\", size: 16 },\n                    }),\n                  ],\n                  1\n                )\n              : _vm._e(),\n            _vm._v(\" \"),\n            _vm.isExpandedSurvey\n              ? _c(\n                  \"span\",\n                  {\n                    class: _vm.surveyWindow.cssHeaderButton,\n                    staticStyle: {\n                      float: \"right\",\n                      cursor: \"pointer\",\n                      \"user-select\": \"none\",\n                      width: \"24px\",\n                      height: \"24px\",\n                    },\n                    on: { click: _vm.doExpand },\n                  },\n                  [\n                    _c(\"sv-svg-icon\", {\n                      attrs: { iconName: \"icon-collapsedetail\", size: 16 },\n                    }),\n                  ],\n                  1\n                )\n              : _vm._e(),\n          ]),\n          _vm._v(\" \"),\n          _vm.isExpandedSurvey\n            ? _c(\n                \"div\",\n                {\n                  class: _vm.surveyWindow.cssBody,\n                  on: { scroll: _vm.doScroll },\n                },\n                [\n                  _c(_vm.getSurveyComponentName(), {\n                    tag: \"component\",\n                    attrs: { survey: _vm.windowSurvey },\n                  }),\n                ],\n                1\n              )\n            : _vm._e(),\n        ]\n      )\n    : _vm._e()\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/progress.vue?vue&type=template&id=27e325ef&\":\n/*!*******************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/progress.vue?vue&type=template&id=27e325ef& ***!\n  \\*******************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_730065__) {\n\n\"use strict\";\n__nested_webpack_require_730065__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_730065__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_730065__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\"div\", { class: _vm.survey.getProgressCssClasses(_vm.container) }, [\n    _c(\n      \"div\",\n      {\n        class: _vm.survey.css.progressBar,\n        style: { width: _vm.progress },\n        attrs: {\n          role: \"progressbar\",\n          \"aria-valuemin\": \"0\",\n          \"aria-valuemax\": \"100\",\n        },\n      },\n      [\n        _c(\"span\", { class: _vm.getProgressTextInBarCss(_vm.survey.css) }, [\n          _vm._v(_vm._s(_vm.survey.progressText)),\n        ]),\n      ]\n    ),\n    _vm._v(\" \"),\n    _c(\"span\", { class: _vm.getProgressTextUnderBarCss(_vm.survey.css) }, [\n      _vm._v(_vm._s(_vm.survey.progressText)),\n    ]),\n  ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/progressButtons.vue?vue&type=template&id=2ae7de42&\":\n/*!**************************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/progressButtons.vue?vue&type=template&id=2ae7de42& ***!\n  \\**************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_732073__) {\n\n\"use strict\";\n__nested_webpack_require_732073__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_732073__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_732073__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\"div\", { class: _vm.css.progressButtonsContainerCenter }, [\n    _c(\"div\", { class: _vm.css.progressButtonsContainer }, [\n      _c(\"div\", {\n        class: _vm.getScrollButtonCss(_vm.hasScroller, true),\n        attrs: { role: \"button\" },\n        on: {\n          click: function ($event) {\n            return _vm.clickScrollButton(true)\n          },\n        },\n      }),\n      _vm._v(\" \"),\n      _c(\n        \"div\",\n        {\n          ref: \"progressButtonsListContainer\",\n          class: _vm.css.progressButtonsListContainer,\n        },\n        [\n          _c(\n            \"ul\",\n            { class: _vm.css.progressButtonsList },\n            _vm._l(_vm.survey.visiblePages, function (page, index) {\n              return _c(\n                \"li\",\n                {\n                  key: \"listelement\" + index,\n                  class: _vm.getListElementCss(index),\n                  on: {\n                    click: function ($event) {\n                      _vm.isListElementClickable(index)\n                        ? _vm.clickListElement(index)\n                        : null\n                    },\n                  },\n                },\n                [\n                  _c(\n                    \"div\",\n                    {\n                      class: _vm.css.progressButtonsPageTitle,\n                      attrs: { title: page.renderedNavigationTitle },\n                    },\n                    [\n                      _vm._v(\n                        \"\\n            \" +\n                          _vm._s(page.renderedNavigationTitle) +\n                          \"\\n          \"\n                      ),\n                    ]\n                  ),\n                  _vm._v(\" \"),\n                  _c(\n                    \"div\",\n                    {\n                      class: _vm.css.progressButtonsPageDescription,\n                      attrs: {\n                        title: page.locNavigationDescription.renderedHtml,\n                      },\n                    },\n                    [\n                      _vm._v(\n                        \"\\n            \" +\n                          _vm._s(page.locNavigationDescription.renderedHtml) +\n                          \"\\n          \"\n                      ),\n                    ]\n                  ),\n                ]\n              )\n            }),\n            0\n          ),\n        ]\n      ),\n      _vm._v(\" \"),\n      _c(\"div\", {\n        class: _vm.getScrollButtonCss(_vm.hasScroller, false),\n        attrs: { role: \"button\" },\n        on: {\n          click: function ($event) {\n            return _vm.clickScrollButton(false)\n          },\n        },\n      }),\n    ]),\n  ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/progressToc.vue?vue&type=template&id=f0bd3dee&\":\n/*!**********************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/progressToc.vue?vue&type=template&id=f0bd3dee& ***!\n  \\**********************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_736072__) {\n\n\"use strict\";\n__nested_webpack_require_736072__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_736072__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_736072__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    { class: _vm.tocModel.containerCss },\n    [\n      _vm.tocModel.isMobile\n        ? _c(\n            \"div\",\n            {\n              directives: [{ name: \"key2click\", rawName: \"v-key2click\" }],\n              on: { click: _vm.tocModel.togglePopup },\n            },\n            [\n              _c(\"sv-svg-icon\", {\n                attrs: { iconName: _vm.tocModel.icon, size: 24 },\n              }),\n              _vm._v(\" \"),\n              _c(\"sv-popup\", { attrs: { model: _vm.tocModel.popupModel } }),\n            ],\n            1\n          )\n        : _c(\"sv-list\", { attrs: { model: _vm.tocModel.listModel } }),\n    ],\n    1\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/question-comment.vue?vue&type=template&id=0c35788c&\":\n/*!***************************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/question-comment.vue?vue&type=template&id=0c35788c& ***!\n  \\***************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_738098__) {\n\n\"use strict\";\n__nested_webpack_require_738098__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_738098__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_738098__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _vm.question.isReadOnlyRenderDiv()\n    ? _c(\"div\", [_vm._v(_vm._s(_vm.question.comment))])\n    : _c(\"textarea\", {\n        class: _vm.question.cssClasses.other || _vm.commentClass,\n        style: { resize: _vm.question.resizeStyle },\n        attrs: {\n          id: _vm.question.commentId,\n          readonly: _vm.question.isInputReadOnly,\n          disabled: _vm.question.isInputReadOnly,\n          maxlength: _vm.question.getOthersMaxLength(),\n          placeholder: _vm.question.renderedCommentPlaceholder,\n          \"aria-label\":\n            _vm.question.ariaLabel || _vm.question.a11y_input_ariaLabel,\n          \"aria-required\":\n            _vm.question.ariaRequired || _vm.question.a11y_input_ariaRequired,\n        },\n        domProps: { value: _vm.question.comment },\n        on: {\n          change: function (e) {\n            _vm.question.onCommentChange(e)\n          },\n          input: function (e) {\n            _vm.question.onCommentInput(e)\n          },\n        },\n      })\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/question-other.vue?vue&type=template&id=d3986eaa&\":\n/*!*************************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/question-other.vue?vue&type=template&id=d3986eaa& ***!\n  \\*************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_740453__) {\n\n\"use strict\";\n__nested_webpack_require_740453__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_740453__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_740453__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\"div\", { class: _vm.question.getCommentAreaCss(true) }, [\n    !_vm.question.isReadOnlyRenderDiv()\n      ? _c(\"textarea\", {\n          class: _vm.question.cssClasses.other || _vm.commentClass,\n          style: { resize: _vm.question.resizeStyle },\n          attrs: {\n            id: _vm.question.otherId,\n            readonly: _vm.question.isInputReadOnly,\n            disabled: _vm.question.isInputReadOnly,\n            maxlength: _vm.question.getOthersMaxLength(),\n            placeholder: _vm.question.otherPlaceholder,\n            \"aria-label\":\n              _vm.question.ariaLabel || _vm.question.a11y_input_ariaLabel,\n            \"aria-required\":\n              _vm.question.ariaRequired || _vm.question.a11y_input_ariaRequired,\n          },\n          domProps: { value: _vm.question.otherValue },\n          on: {\n            change: function (e) {\n              _vm.question.onOtherValueChange(e)\n            },\n            input: function (e) {\n              _vm.question.onOtherValueInput(e)\n            },\n          },\n        })\n      : _vm._e(),\n    _vm.question.isReadOnlyRenderDiv()\n      ? _c(\"div\", [_vm._v(_vm._s(_vm.question.otherValue))])\n      : _vm._e(),\n  ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/radiogroup.vue?vue&type=template&id=06c6d526&\":\n/*!*********************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/radiogroup.vue?vue&type=template&id=06c6d526& ***!\n  \\*********************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_742988__) {\n\n\"use strict\";\n__nested_webpack_require_742988__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_742988__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_742988__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"fieldset\",\n    {\n      class: _vm.question.getSelectBaseRootCss(),\n      attrs: {\n        role: _vm.question.a11y_input_ariaRole,\n        \"aria-required\": _vm.question.a11y_input_ariaRequired,\n        \"aria-label\": _vm.question.a11y_input_ariaLabel,\n        \"aria-labelledby\": _vm.question.a11y_input_ariaLabelledBy,\n        \"aria-invalid\": _vm.question.a11y_input_ariaInvalid,\n        \"aria-describedby\": _vm.question.a11y_input_ariaDescribedBy,\n      },\n    },\n    [\n      _vm._l(_vm.question.visibleChoices, function (item, index) {\n        return !_vm.question.hasColumns && !_vm.question.blockedRow\n          ? _c(\"survey-radiogroup-item\", {\n              key: item.value,\n              class: _vm.getItemClass(item),\n              attrs: { question: _vm.question, item: item, index: index },\n            })\n          : _vm._e()\n      }),\n      _vm._v(\" \"),\n      _vm.question.blockedRow\n        ? _c(\n            \"div\",\n            { class: _vm.question.cssClasses.rootRow },\n            _vm._l(_vm.question.dataChoices, function (item, index) {\n              return !_vm.question.hasColumns && _vm.question.blockedRow\n                ? _c(\"survey-radiogroup-item\", {\n                    key: item.value,\n                    class: _vm.question.getItemClass(item),\n                    attrs: { question: _vm.question, item: item, index: index },\n                  })\n                : _vm._e()\n            }),\n            1\n          )\n        : _vm._e(),\n      _vm._v(\" \"),\n      _vm.question.hasColumns\n        ? _c(\n            \"div\",\n            { class: _vm.question.cssClasses.rootMultiColumn },\n            _vm._l(_vm.question.columns, function (column, colIndex) {\n              return _vm.question.hasColumns\n                ? _c(\n                    \"div\",\n                    {\n                      class: _vm.question.getColumnClass(),\n                      attrs: { role: \"presentation\" },\n                    },\n                    _vm._l(column, function (item, index) {\n                      return _c(\"survey-radiogroup-item\", {\n                        key: item.value,\n                        class: _vm.getItemClass(item),\n                        attrs: {\n                          question: _vm.question,\n                          item: item,\n                          index: \"\" + colIndex + index,\n                        },\n                      })\n                    }),\n                    1\n                  )\n                : _vm._e()\n            }),\n            0\n          )\n        : _vm._e(),\n      _vm._v(\" \"),\n      _vm._l(_vm.question.footItems, function (item, index) {\n        return _vm.question.hasFootItems\n          ? _c(\"survey-radiogroup-item\", {\n              key: item.value,\n              class: _vm.question.getItemClass(item),\n              attrs: { question: _vm.question, item: item, index: \"\" + index },\n            })\n          : _vm._e()\n      }),\n      _vm._v(\" \"),\n      _vm.question.renderedValue && _vm.question.isOtherSelected\n        ? _c(\"survey-other-choice\", { attrs: { question: _vm.question } })\n        : _vm._e(),\n      _vm._v(\" \"),\n      _vm.question.showClearButtonInContent\n        ? _c(\"div\", [\n            _c(\"input\", {\n              class: _vm.question.cssClasses.clearButton,\n              attrs: { type: \"button\", value: _vm.question.clearButtonCaption },\n              on: {\n                click: function () {\n                  _vm.question.clearValue()\n                },\n              },\n            }),\n          ])\n        : _vm._e(),\n    ],\n    2\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/radiogroupitem.vue?vue&type=template&id=5bbe97b9&\":\n/*!*************************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/radiogroupitem.vue?vue&type=template&id=5bbe97b9& ***!\n  \\*************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_747908__) {\n\n\"use strict\";\n__nested_webpack_require_747908__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_747908__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_747908__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\"div\", { attrs: { role: \"presentation\" } }, [\n    _c(\n      \"label\",\n      {\n        class: _vm.getLabelClass(_vm.item),\n        on: {\n          mousedown: function ($event) {\n            return _vm.question.onMouseDown()\n          },\n        },\n      },\n      [\n        _c(\"input\", {\n          directives: [\n            {\n              name: \"model\",\n              rawName: \"v-model\",\n              value: _vm.question.renderedValue,\n              expression: \"question.renderedValue\",\n            },\n          ],\n          class: _vm.question.cssClasses.itemControl,\n          attrs: {\n            type: \"radio\",\n            name: _vm.question.questionName,\n            id: _vm.question.getItemId(_vm.item),\n            \"aria-describedby\": _vm.question.ariaDescribedBy,\n            disabled: !_vm.question.getItemEnabled(_vm.item),\n          },\n          domProps: {\n            value: _vm.item.value,\n            checked: _vm._q(_vm.question.renderedValue, _vm.item.value),\n          },\n          on: {\n            change: function ($event) {\n              return _vm.$set(_vm.question, \"renderedValue\", _vm.item.value)\n            },\n          },\n        }),\n        _vm.question.cssClasses.materialDecorator\n          ? _c(\"span\", { class: _vm.question.cssClasses.materialDecorator }, [\n              _vm.question.itemSvgIcon\n                ? _c(\"svg\", { class: _vm.question.cssClasses.itemDecorator }, [\n                    _c(\"use\", {\n                      attrs: { \"xlink:href\": _vm.question.itemSvgIcon },\n                    }),\n                  ])\n                : _vm._e(),\n            ])\n          : _vm._e(),\n        !_vm.hideLabel\n          ? _c(\n              \"span\",\n              { class: _vm.getControlLabelClass(_vm.item) },\n              [_c(\"survey-string\", { attrs: { locString: _vm.item.locText } })],\n              1\n            )\n          : _vm._e(),\n      ]\n    ),\n  ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/ranking/ranking-item.vue?vue&type=template&id=2faded76&\":\n/*!*******************************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/ranking/ranking-item.vue?vue&type=template&id=2faded76& ***!\n  \\*******************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_751206__) {\n\n\"use strict\";\n__nested_webpack_require_751206__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_751206__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_751206__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    {\n      class: _vm.question.getItemClass(_vm.item),\n      attrs: {\n        tabindex: _vm.question.getItemTabIndex(_vm.item),\n        \"data-sv-drop-target-ranking-item\": _vm.index,\n      },\n      on: {\n        keydown: function (event) {\n          _vm.question.handleKeydown.call(_vm.question, event, _vm.item)\n        },\n        pointerdown: function (event) {\n          _vm.question.handlePointerDown.call(\n            _vm.question,\n            event,\n            _vm.item,\n            event.currentTarget\n          )\n        },\n      },\n    },\n    [\n      _c(\n        \"div\",\n        { staticStyle: { outline: \"none\" }, attrs: { tabindex: \"-1\" } },\n        [\n          _c(\"div\", { class: _vm.cssClasses.itemGhostNode }),\n          _vm._v(\" \"),\n          _c(\"div\", { class: _vm.cssClasses.itemContent }, [\n            _c(\"div\", { class: _vm.cssClasses.itemIconContainer }, [\n              _c(\n                \"svg\",\n                {\n                  class: _vm.question.getIconHoverCss(),\n                  attrs: {\n                    width: \"10\",\n                    height: \"16\",\n                    viewBox: \"0 0 10 16\",\n                    xmlns: \"http://www.w3.org/2000/svg\",\n                  },\n                },\n                [\n                  _c(\"path\", {\n                    attrs: {\n                      d: \"M6 2C6 0.9 6.9 0 8 0C9.1 0 10 0.9 10 2C10 3.1 9.1 4 8 4C6.9 4 6 3.1 6 2ZM2 0C0.9 0 0 0.9 0 2C0 3.1 0.9 4 2 4C3.1 4 4 3.1 4 2C4 0.9 3.1 0 2 0ZM8 6C6.9 6 6 6.9 6 8C6 9.1 6.9 10 8 10C9.1 10 10 9.1 10 8C10 6.9 9.1 6 8 6ZM2 6C0.9 6 0 6.9 0 8C0 9.1 0.9 10 2 10C3.1 10 4 9.1 4 8C4 6.9 3.1 6 2 6ZM8 12C6.9 12 6 12.9 6 14C6 15.1 6.9 16 8 16C9.1 16 10 15.1 10 14C10 12.9 9.1 12 8 12ZM2 12C0.9 12 0 12.9 0 14C0 15.1 0.9 16 2 16C3.1 16 4 15.1 4 14C4 12.9 3.1 12 2 12Z\",\n                    },\n                  }),\n                ]\n              ),\n              _vm._v(\" \"),\n              _c(\n                \"svg\",\n                {\n                  class: _vm.question.getIconFocusCss(),\n                  attrs: {\n                    width: \"10\",\n                    height: \"24\",\n                    viewBox: \"0 0 10 24\",\n                    xmlns: \"http://www.w3.org/2000/svg\",\n                  },\n                },\n                [\n                  _c(\"path\", { attrs: { d: \"M10 5L5 0L0 5H4V9H6V5H10Z\" } }),\n                  _vm._v(\" \"),\n                  _c(\"path\", { attrs: { d: \"M6 19V15H4V19H0L5 24L10 19H6Z\" } }),\n                ]\n              ),\n            ]),\n            _vm._v(\" \"),\n            _c(\"div\", { class: _vm.question.getItemIndexClasses(_vm.item) }, [\n              _vm._v(_vm._s(_vm.unrankedItem ? \"\" : _vm.indexText)),\n            ]),\n            _vm._v(\" \"),\n            _c(\n              \"div\",\n              { class: _vm.cssClasses.controlLabel },\n              [_c(\"survey-string\", { attrs: { locString: _vm.text } })],\n              1\n            ),\n          ]),\n        ]\n      ),\n    ]\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/ranking/ranking.vue?vue&type=template&id=19074eea&\":\n/*!**************************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/ranking/ranking.vue?vue&type=template&id=19074eea& ***!\n  \\**************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_755551__) {\n\n\"use strict\";\n__nested_webpack_require_755551__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_755551__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_755551__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    { class: _vm.question.rootClass },\n    [\n      _vm._l(_vm.question.rankingChoices, function (item, index) {\n        return !_vm.question.selectToRankEnabled\n          ? _c(\"survey-ranking-item\", {\n              key: item.value + \"-\" + index + \"-item\",\n              class: _vm.question.getItemClass(item),\n              attrs: {\n                text: item.locText,\n                index: index,\n                indexText: _vm.getNumberByIndex(index),\n                cssClasses: _vm.question.cssClasses,\n                question: _vm.question,\n                item: item,\n              },\n            })\n          : _vm._e()\n      }),\n      _vm._v(\" \"),\n      _vm.question.selectToRankEnabled\n        ? _c(\n            \"div\",\n            {\n              class: _vm.question.getContainerClasses(\"from\"),\n              attrs: { \"data-ranking\": \"from-container\" },\n            },\n            [\n              _vm._l(_vm.question.unRankingChoices, function (item, index) {\n                return _c(\"survey-ranking-item\", {\n                  key: item.value + \"-\" + index + \"-item\",\n                  class: _vm.question.getItemClass(item),\n                  attrs: {\n                    text: item.locText,\n                    index: index,\n                    indexText: _vm.getNumberByIndex(index),\n                    cssClasses: _vm.question.cssClasses,\n                    question: _vm.question,\n                    item: item,\n                    unrankedItem: true,\n                  },\n                })\n              }),\n              _vm._v(\" \"),\n              _vm.question.unRankingChoices.length === 0\n                ? _c(\n                    \"div\",\n                    { class: _vm.question.cssClasses.containerPlaceholder },\n                    [\n                      _vm._v(\n                        \"\\n      \" +\n                          _vm._s(_vm.question.selectToRankEmptyRankedAreaText) +\n                          \" \"\n                      ),\n                    ]\n                  )\n                : _vm._e(),\n            ],\n            2\n          )\n        : _vm._e(),\n      _vm._v(\" \"),\n      _vm.question.selectToRankEnabled\n        ? _c(\"div\", { class: _vm.question.cssClasses.containersDivider })\n        : _vm._e(),\n      _vm._v(\" \"),\n      _vm.question.selectToRankEnabled\n        ? _c(\n            \"div\",\n            {\n              class: _vm.question.getContainerClasses(\"to\"),\n              attrs: { \"data-ranking\": \"to-container\" },\n            },\n            [\n              _vm._l(_vm.question.rankingChoices, function (item, index) {\n                return _c(\"survey-ranking-item\", {\n                  key: item.value + \"-\" + index + \"-item\",\n                  class: _vm.question.getItemClass(item),\n                  attrs: {\n                    text: item.locText,\n                    index: index,\n                    indexText: _vm.getNumberByIndex(index),\n                    cssClasses: _vm.question.cssClasses,\n                    question: _vm.question,\n                    item: item,\n                  },\n                })\n              }),\n              _vm._v(\" \"),\n              _vm.question.rankingChoices.length === 0\n                ? _c(\n                    \"div\",\n                    { class: _vm.question.cssClasses.containerPlaceholder },\n                    [\n                      _vm._v(\n                        _vm._s(_vm.question.selectToRankEmptyUnrankedAreaText)\n                      ),\n                    ]\n                  )\n                : _vm._e(),\n            ],\n            2\n          )\n        : _vm._e(),\n    ],\n    2\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/rating-dropdown.vue?vue&type=template&id=312c9d6f&\":\n/*!**************************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/rating-dropdown.vue?vue&type=template&id=312c9d6f& ***!\n  \\**************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_760549__) {\n\n\"use strict\";\n__nested_webpack_require_760549__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_760549__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_760549__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    { class: _vm.question.cssClasses.rootDropdown },\n    [_c(\"sv-dropdown\", { attrs: { question: _vm.question } })],\n    1\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/rating.vue?vue&type=template&id=7092bfdf&\":\n/*!*****************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/rating.vue?vue&type=template&id=7092bfdf& ***!\n  \\*****************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_762029__) {\n\n\"use strict\";\n__nested_webpack_require_762029__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_762029__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_762029__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\"div\", { class: _vm.question.ratingRootCss }, [\n    _c(\n      \"fieldset\",\n      { attrs: { role: \"radiogroup\" } },\n      [\n        _c(\"legend\", {\n          staticClass: \"sv-hidden\",\n          attrs: { role: \"presentation\" },\n        }),\n        _vm._v(\" \"),\n        _vm.question.hasMinLabel\n          ? _c(\n              \"span\",\n              { class: _vm.question.cssClasses.minText },\n              [\n                _c(\"survey-string\", {\n                  attrs: { locString: _vm.question.locMinRateDescription },\n                }),\n              ],\n              1\n            )\n          : _vm._e(),\n        _vm._v(\" \"),\n        _vm._l(_vm.question.renderedRateItems, function (item, index) {\n          return _c(_vm.question.itemComponentName, {\n            tag: \"component\",\n            attrs: { item: item, index: index, question: _vm.question },\n          })\n        }),\n        _vm._v(\" \"),\n        _vm.question.hasMaxLabel\n          ? _c(\n              \"span\",\n              { class: _vm.question.cssClasses.maxText },\n              [\n                _c(\"survey-string\", {\n                  attrs: { locString: _vm.question.locMaxRateDescription },\n                }),\n              ],\n              1\n            )\n          : _vm._e(),\n      ],\n      2\n    ),\n  ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/row-element.vue?vue&type=template&id=617c2037&\":\n/*!**********************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/row-element.vue?vue&type=template&id=617c2037& ***!\n  \\**********************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_764669__) {\n\n\"use strict\";\n__nested_webpack_require_764669__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_764669__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_764669__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    { style: _vm.element.rootStyle },\n    [\n      !_vm.element.isPanel\n        ? _c(\"survey-element\", {\n            key: _vm.element.id,\n            style: _vm.element.getRootStyle(),\n            attrs: {\n              element: _vm.element,\n              survey: _vm.survey,\n              css: _vm.css,\n              row: _vm.row,\n            },\n          })\n        : _vm._e(),\n      _vm._v(\" \"),\n      _vm.element.isPanel\n        ? _c(\"survey-panel\", {\n            key: _vm.element.id,\n            attrs: { question: _vm.element, css: _vm.css },\n          })\n        : _vm._e(),\n    ],\n    1\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/row.vue?vue&type=template&id=7cc0bd88&\":\n/*!**************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/row.vue?vue&type=template&id=7cc0bd88& ***!\n  \\**************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_766608__) {\n\n\"use strict\";\n__nested_webpack_require_766608__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_766608__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_766608__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    { class: _vm.row.getRowCss() },\n    _vm._l(_vm.elements, function (element) {\n      return _c(\"survey-row-element\", {\n        key: element.id,\n        attrs: {\n          element: element,\n          survey: _vm.survey,\n          css: _vm.css,\n          row: _vm.row,\n        },\n      })\n    }),\n    1\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/signaturepad.vue?vue&type=template&id=0462349d&\":\n/*!***********************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/signaturepad.vue?vue&type=template&id=0462349d& ***!\n  \\***********************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_768293__) {\n\n\"use strict\";\n__nested_webpack_require_768293__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_768293__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_768293__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    {\n      class: _vm.question.cssClasses.root,\n      style: {\n        height: _vm.question.signatureHeight + \"px\",\n        width: _vm.question.signatureWidth + \"px\",\n      },\n    },\n    [\n      _c(\n        \"div\",\n        {\n          directives: [\n            {\n              name: \"show\",\n              rawName: \"v-show\",\n              value: _vm.question.needShowPlaceholder(),\n              expression: \"question.needShowPlaceholder()\",\n            },\n          ],\n          class: _vm.question.cssClasses.placeholder,\n        },\n        [_vm._v(_vm._s(_vm.question.placeHolderText))]\n      ),\n      _vm._v(\" \"),\n      _c(\"div\", [\n        _vm.question.backgroundImage\n          ? _c(\"img\", {\n              class: _vm.question.cssClasses.backgroundImage,\n              attrs: {\n                src: _vm.question.backgroundImage,\n                width: _vm.question.signatureWidth,\n                height: _vm.question.signatureHeight,\n              },\n            })\n          : _vm._e(),\n        _vm._v(\" \"),\n        _c(\"canvas\", {\n          class: _vm.question.cssClasses.canvas,\n          attrs: { tabindex: \"0\" },\n        }),\n      ]),\n      _vm._v(\" \"),\n      _vm.question.canShowClearButton\n        ? _c(\"div\", { class: _vm.question.cssClasses.controls }, [\n            _c(\n              \"button\",\n              {\n                class: _vm.question.cssClasses.clearButton,\n                attrs: {\n                  type: \"button\",\n                  title: _vm.question.clearButtonCaption,\n                },\n                on: {\n                  click: function () {\n                    _vm.question.clearValue()\n                  },\n                },\n              },\n              [\n                !_vm.question.cssClasses.clearButtonIconId\n                  ? _c(\"span\", [_vm._v(\"✖\")])\n                  : _vm._e(),\n                _vm._v(\" \"),\n                _vm.question.cssClasses.clearButtonIconId\n                  ? _c(\"sv-svg-icon\", {\n                      attrs: {\n                        iconName: _vm.question.cssClasses.clearButtonIconId,\n                        size: \"auto\",\n                      },\n                    })\n                  : _vm._e(),\n              ],\n              1\n            ),\n          ])\n        : _vm._e(),\n    ]\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/string-editor.vue?vue&type=template&id=9639f152&\":\n/*!************************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/string-editor.vue?vue&type=template&id=9639f152& ***!\n  \\************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_771950__) {\n\n\"use strict\";\n__nested_webpack_require_771950__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_771950__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_771950__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _vm.locString.hasHtml\n    ? _c(\"span\", {\n        staticClass: \"sv-string-editor\",\n        attrs: { contenteditable: \"true\" },\n        domProps: { innerHTML: _vm._s(_vm.locString.renderedHtml) },\n        on: { blur: _vm.onInput, click: _vm.onClick },\n      })\n    : _c(\n        \"span\",\n        {\n          staticClass: \"sv-string-editor\",\n          attrs: { contenteditable: \"true\" },\n          on: { blur: _vm.onInput, click: _vm.onClick },\n        },\n        [_vm._v(_vm._s(_vm.locString.renderedHtml))]\n      )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/string-viewer.vue?vue&type=template&id=7d918508&\":\n/*!************************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/string-viewer.vue?vue&type=template&id=7d918508& ***!\n  \\************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_773829__) {\n\n\"use strict\";\n__nested_webpack_require_773829__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_773829__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_773829__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _vm.locString.hasHtml\n    ? _c(\"span\", {\n        staticClass: \"sv-string-viewer\",\n        domProps: { innerHTML: _vm._s(_vm.locString.renderedHtml) },\n      })\n    : _c(\"span\", { staticClass: \"sv-string-viewer\" }, [\n        _vm._v(_vm._s(_vm.locString.renderedHtml)),\n      ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/string.vue?vue&type=template&id=d3a3d75a&\":\n/*!*****************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/string.vue?vue&type=template&id=d3a3d75a& ***!\n  \\*****************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_775444__) {\n\n\"use strict\";\n__nested_webpack_require_775444__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_775444__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_775444__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(_vm.locString.renderAs, {\n    tag: \"component\",\n    attrs: { locString: _vm.locString.renderAsData },\n  })\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/survey.vue?vue&type=template&id=6874e1c8&\":\n/*!*****************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/survey.vue?vue&type=template&id=6874e1c8& ***!\n  \\*****************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_776892__) {\n\n\"use strict\";\n__nested_webpack_require_776892__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_776892__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_776892__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    { class: _vm.survey.getRootCss(), style: _vm.vueSurvey.themeVariables },\n    [\n      _vm.vueSurvey.renderBackgroundImage\n        ? _c(\"div\", {\n            class: _vm.css.rootBackgroundImage,\n            style: _vm.vueSurvey.backgroundImageStyle,\n          })\n        : _vm._e(),\n      _vm._v(\" \"),\n      _c(\"form\", { attrs: { onsubmit: \"return false;\" } }, [\n        !_vm.vueSurvey.hasLogo\n          ? _c(\"div\", { staticClass: \"sv_custom_header\" })\n          : _vm._e(),\n        _vm._v(\" \"),\n        _c(\n          \"div\",\n          { class: _vm.css.container },\n          [\n            _vm.vueSurvey.titleView === \"title\"\n              ? _c(\"survey-header\", { attrs: { survey: _vm.vueSurvey } })\n              : _vm._e(),\n            _vm._v(\" \"),\n            _c(\"sv-components-container\", {\n              tag: \"component\",\n              attrs: { survey: _vm.vueSurvey, container: \"header\" },\n            }),\n            _vm._v(\" \"),\n            _vm.vueSurvey.isShowingPage\n              ? [\n                  _c(\n                    \"div\",\n                    { class: _vm.vueSurvey.bodyContainerCss },\n                    [\n                      _c(\"sv-components-container\", {\n                        tag: \"component\",\n                        attrs: { survey: _vm.vueSurvey, container: \"left\" },\n                      }),\n                      _vm._v(\" \"),\n                      _c(\n                        \"div\",\n                        {\n                          class: _vm.vueSurvey.bodyCss,\n                          style: { maxWidth: _vm.survey.renderedWidth },\n                          attrs: { id: _vm.pageId },\n                        },\n                        [\n                          _c(\"sv-components-container\", {\n                            tag: \"component\",\n                            attrs: {\n                              survey: _vm.vueSurvey,\n                              container: \"contentTop\",\n                            },\n                          }),\n                          _vm._v(\" \"),\n                          _c(\"survey-page\", {\n                            key: _vm.pageKey,\n                            attrs: {\n                              survey: _vm.vueSurvey,\n                              page: _vm.vueSurvey.activePage,\n                              css: _vm.css,\n                            },\n                          }),\n                          _vm._v(\" \"),\n                          _c(\"sv-components-container\", {\n                            tag: \"component\",\n                            attrs: {\n                              survey: _vm.vueSurvey,\n                              container: \"contentBottom\",\n                            },\n                          }),\n                        ],\n                        1\n                      ),\n                      _vm._v(\" \"),\n                      _c(\"sv-components-container\", {\n                        tag: \"component\",\n                        attrs: { survey: _vm.vueSurvey, container: \"right\" },\n                      }),\n                    ],\n                    1\n                  ),\n                ]\n              : _vm._e(),\n            _vm._v(\" \"),\n            _c(\"sv-components-container\", {\n              tag: \"component\",\n              attrs: { survey: _vm.vueSurvey, container: \"footer\" },\n            }),\n            _vm._v(\" \"),\n            _vm.hasCompletedPage\n              ? _c(\n                  \"div\",\n                  [\n                    _c(\"div\", {\n                      class: _vm.vueSurvey.completedCss,\n                      domProps: {\n                        innerHTML: _vm._s(_vm.getProcessedCompletedHtml()),\n                      },\n                    }),\n                    _vm._v(\" \"),\n                    _c(\"sv-components-container\", {\n                      tag: \"component\",\n                      attrs: {\n                        survey: _vm.vueSurvey,\n                        container: \"completePage\",\n                      },\n                    }),\n                  ],\n                  1\n                )\n              : _vm._e(),\n            _vm._v(\" \"),\n            _vm.vueSurvey.state === \"completedbefore\"\n              ? _c(\"div\", {\n                  class: _vm.vueSurvey.completedBeforeCss,\n                  domProps: {\n                    innerHTML: _vm._s(\n                      _vm.vueSurvey.processedCompletedBeforeHtml\n                    ),\n                  },\n                })\n              : _vm._e(),\n            _vm._v(\" \"),\n            _vm.vueSurvey.state === \"loading\"\n              ? _c(\"div\", {\n                  class: _vm.vueSurvey.loadingBodyCss,\n                  domProps: {\n                    innerHTML: _vm._s(_vm.vueSurvey.processedLoadingHtml),\n                  },\n                })\n              : _vm._e(),\n            _vm._v(\" \"),\n            _vm.vueSurvey.state === \"empty\"\n              ? _c(\"div\", { class: _vm.css.bodyEmpty }, [\n                  _vm._v(\n                    \"\\n        \" +\n                      _vm._s(_vm.vueSurvey.emptySurveyText) +\n                      \"\\n      \"\n                  ),\n                ])\n              : _vm._e(),\n          ],\n          2\n        ),\n      ]),\n      _vm._v(\" \"),\n      _vm.vueSurvey.showBrandInfo ? _c(\"sv-brand-info\") : _vm._e(),\n      _vm._v(\" \"),\n      _c(\"sv-notifier\", { attrs: { model: _vm.vueSurvey.notifier } }),\n    ],\n    1\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/tagbox.vue?vue&type=template&id=b9e1b79a&\":\n/*!*****************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/tagbox.vue?vue&type=template&id=b9e1b79a& ***!\n  \\*****************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_783646__) {\n\n\"use strict\";\n__nested_webpack_require_783646__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_783646__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_783646__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    { class: _vm.question.renderCssRoot },\n    [\n      _c(\"sv-tagbox\", { attrs: { question: _vm.question } }),\n      _vm._v(\" \"),\n      _vm.question.isOtherSelected\n        ? _c(\"survey-other-choice\", { attrs: { question: _vm.question } })\n        : _vm._e(),\n    ],\n    1\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/text-input.vue?vue&type=template&id=4776b5ec&\":\n/*!*********************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/text-input.vue?vue&type=template&id=4776b5ec& ***!\n  \\*********************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_785292__) {\n\n\"use strict\";\n__nested_webpack_require_785292__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_785292__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_785292__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return !_vm.question.getMaxLength()\n    ? _c(\"input\", {\n        class: _vm.question.getControlClass(),\n        style: _vm.inputStyle,\n        attrs: {\n          disabled: _vm.question.isInputReadOnly,\n          type: _vm.question.inputType,\n          maxlength: _vm.question.getMaxLength(),\n          min: _vm.question.renderedMin,\n          max: _vm.question.renderedMax,\n          step: _vm.question.renderedStep,\n          size: _vm.question.renderedInputSize,\n          id: _vm.question.inputId,\n          list: _vm.question.dataListId,\n          placeholder: _vm.question.renderedPlaceholder,\n          autocomplete: _vm.question.autocomplete,\n          \"aria-required\": _vm.question.a11y_input_ariaRequired,\n          \"aria-label\": _vm.question.a11y_input_ariaLabel,\n          \"aria-labelledby\": _vm.question.a11y_input_ariaLabelledBy,\n          \"aria-invalid\": _vm.question.a11y_input_ariaInvalid,\n          \"aria-describedby\": _vm.question.a11y_input_ariaDescribedBy,\n        },\n        domProps: { value: _vm.question.value },\n        on: {\n          change: _vm.question.onChange,\n          keyup: _vm.question.onKeyUp,\n          keydown: _vm.question.onKeyDown,\n          \"composition-update\": _vm.question.onCompositionUpdate,\n          blur: _vm.question.onBlur,\n          focus: _vm.question.onFocus,\n        },\n      })\n    : _c(\n        \"div\",\n        [\n          _c(\"input\", {\n            class: _vm.question.getControlClass(),\n            style: _vm.inputStyle,\n            attrs: {\n              disabled: _vm.question.isInputReadOnly,\n              type: _vm.question.inputType,\n              maxlength: _vm.question.getMaxLength(),\n              min: _vm.question.renderedMin,\n              max: _vm.question.renderedMax,\n              step: _vm.question.renderedStep,\n              size: _vm.question.renderedInputSize,\n              id: _vm.question.inputId,\n              list: _vm.question.dataListId,\n              placeholder: _vm.question.renderedPlaceholder,\n              autocomplete: _vm.question.autocomplete,\n              \"aria-required\": _vm.question.a11y_input_ariaRequired,\n              \"aria-label\": _vm.question.a11y_input_ariaLabel,\n              \"aria-invalid\": _vm.question.a11y_input_ariaInvalid,\n              \"aria-describedby\": _vm.question.a11y_input_ariaDescribedBy,\n            },\n            domProps: { value: _vm.question.value },\n            on: {\n              change: _vm.question.onChange,\n              keyup: _vm.question.onKeyUp,\n              keydown: _vm.question.onKeyDown,\n              \"composition-update\": _vm.question.onCompositionUpdate,\n              blur: _vm.question.onBlur,\n              focus: _vm.question.onFocus,\n            },\n          }),\n          _vm._v(\" \"),\n          _c(\"sv-character-counter\", {\n            attrs: {\n              counter: _vm.question.characterCounter,\n              remainingCharacterCounter:\n                _vm.question.cssClasses.remainingCharacterCounter,\n            },\n          }),\n        ],\n        1\n      )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/text.vue?vue&type=template&id=40ece422&\":\n/*!***************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/text.vue?vue&type=template&id=40ece422& ***!\n  \\***************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_789639__) {\n\n\"use strict\";\n__nested_webpack_require_789639__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_789639__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_789639__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _vm.question.isReadOnlyRenderDiv()\n    ? _c(\"div\", [_vm._v(_vm._s(_vm.question.value))])\n    : _vm.question.dataListId\n    ? _c(\n        \"div\",\n        [\n          _c(\"survey-text-input\", { attrs: { question: _vm.question } }),\n          _vm._v(\" \"),\n          _c(\n            \"datalist\",\n            { attrs: { id: _vm.question.dataListId } },\n            _vm._l(_vm.question.dataList, function (item) {\n              return _c(\"option\", { domProps: { value: item } })\n            }),\n            0\n          ),\n        ],\n        1\n      )\n    : _c(\"survey-text-input\", { attrs: { question: _vm.question } })\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/timerpanel.vue?vue&type=template&id=0d2abe21&\":\n/*!*********************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/timerpanel.vue?vue&type=template&id=0d2abe21& ***!\n  \\*********************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_791604__) {\n\n\"use strict\";\n__nested_webpack_require_791604__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_791604__.d(__nested_webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __nested_webpack_require_791604__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _vm.model.isRunning && _vm.model.showTimerAsClock\n    ? _c(\"div\", { class: _vm.model.rootCss }, [\n        _vm.model.showProgress\n          ? _c(\n              \"svg\",\n              {\n                class: _vm.model.getProgressCss(),\n                style: {\n                  strokeDasharray: _vm.circleRadius,\n                  strokeDashoffset: _vm.progress,\n                },\n              },\n              [_c(\"use\", { attrs: { \"xlink:href\": \"#icon-timercircle\" } })]\n            )\n          : _vm._e(),\n        _vm._v(\" \"),\n        _c(\"div\", { class: _vm.model.textContainerCss }, [\n          _c(\"span\", { class: _vm.model.majorTextCss }, [\n            _vm._v(_vm._s(_vm.model.clockMajorText)),\n          ]),\n          _vm._v(\" \"),\n          !!_vm.model.clockMinorText\n            ? _c(\"span\", { class: _vm.model.minorTextCss }, [\n                _vm._v(_vm._s(_vm.model.clockMinorText)),\n              ])\n            : _vm._e(),\n        ]),\n      ])\n    : _c(\n        \"div\",\n        {\n          directives: [\n            {\n              name: \"show\",\n              rawName: \"v-show\",\n              value: _vm.model.isRunning && !_vm.model.showTimerAsClock,\n              expression: \"model.isRunning && !model.showTimerAsClock\",\n            },\n          ],\n          class: _vm.model.survey.getCss().timerRoot,\n        },\n        [_vm._v(\"\\n  \" + _vm._s(_vm.text) + \"\\n\")]\n      )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\":\n/*!********************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/runtime/componentNormalizer.js ***!\n  \\********************************************************************/\n/*! exports provided: default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_793875__) {\n\n\"use strict\";\n__nested_webpack_require_793875__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_793875__.d(__nested_webpack_exports__, \"default\", function() { return normalizeComponent; });\n/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nfunction normalizeComponent (\n  scriptExports,\n  render,\n  staticRenderFns,\n  functionalTemplate,\n  injectStyles,\n  scopeId,\n  moduleIdentifier, /* server only */\n  shadowMode /* vue-cli only */\n) {\n  // Vue.extend constructor export interop\n  var options = typeof scriptExports === 'function'\n    ? scriptExports.options\n    : scriptExports\n\n  // render functions\n  if (render) {\n    options.render = render\n    options.staticRenderFns = staticRenderFns\n    options._compiled = true\n  }\n\n  // functional template\n  if (functionalTemplate) {\n    options.functional = true\n  }\n\n  // scopedId\n  if (scopeId) {\n    options._scopeId = 'data-v-' + scopeId\n  }\n\n  var hook\n  if (moduleIdentifier) { // server build\n    hook = function (context) {\n      // 2.3 injection\n      context =\n        context || // cached call\n        (this.$vnode && this.$vnode.ssrContext) || // stateful\n        (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n      // 2.2 with runInNewContext: true\n      if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n        context = __VUE_SSR_CONTEXT__\n      }\n      // inject component styles\n      if (injectStyles) {\n        injectStyles.call(this, context)\n      }\n      // register component module identifier for async chunk inferrence\n      if (context && context._registeredComponents) {\n        context._registeredComponents.add(moduleIdentifier)\n      }\n    }\n    // used by ssr in case component is cached and beforeCreate\n    // never gets called\n    options._ssrRegister = hook\n  } else if (injectStyles) {\n    hook = shadowMode\n      ? function () {\n        injectStyles.call(\n          this,\n          (options.functional ? this.parent : this).$root.$options.shadowRoot\n        )\n      }\n      : injectStyles\n  }\n\n  if (hook) {\n    if (options.functional) {\n      // for template-only hot-reload because in that case the render fn doesn't\n      // go through the normalizer\n      options._injectStyles = hook\n      // register for functional component in vue file\n      var originalRender = options.render\n      options.render = function renderWithStyleInjection (h, context) {\n        hook.call(context)\n        return originalRender(h, context)\n      }\n    } else {\n      // inject component registration as beforeCreate hook\n      var existing = options.beforeCreate\n      options.beforeCreate = existing\n        ? [].concat(existing, hook)\n        : [hook]\n    }\n  }\n\n  return {\n    exports: scriptExports,\n    options: options\n  }\n}\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-property-decorator/lib/decorators/Emit.js\":\n/*!********************************************************************!*\\\n  !*** ./node_modules/vue-property-decorator/lib/decorators/Emit.js ***!\n  \\********************************************************************/\n/*! exports provided: Emit */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_797221__) {\n\n\"use strict\";\n__nested_webpack_require_797221__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_797221__.d(__nested_webpack_exports__, \"Emit\", function() { return Emit; });\nvar __spreadArrays = ( false) || function () {\n    for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n    for (var r = Array(s), k = 0, i = 0; i < il; i++)\n        for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n            r[k] = a[j];\n    return r;\n};\n// Code copied from Vue/src/shared/util.js\nvar hyphenateRE = /\\B([A-Z])/g;\nvar hyphenate = function (str) { return str.replace(hyphenateRE, '-$1').toLowerCase(); };\n/**\n * decorator of an event-emitter function\n * @param  event The name of the event\n * @return MethodDecorator\n */\nfunction Emit(event) {\n    return function (_target, propertyKey, descriptor) {\n        var key = hyphenate(propertyKey);\n        var original = descriptor.value;\n        descriptor.value = function emitter() {\n            var _this = this;\n            var args = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                args[_i] = arguments[_i];\n            }\n            var emit = function (returnValue) {\n                var emitName = event || key;\n                if (returnValue === undefined) {\n                    if (args.length === 0) {\n                        _this.$emit(emitName);\n                    }\n                    else if (args.length === 1) {\n                        _this.$emit(emitName, args[0]);\n                    }\n                    else {\n                        _this.$emit.apply(_this, __spreadArrays([emitName], args));\n                    }\n                }\n                else {\n                    args.unshift(returnValue);\n                    _this.$emit.apply(_this, __spreadArrays([emitName], args));\n                }\n            };\n            var returnValue = original.apply(this, args);\n            if (isPromise(returnValue)) {\n                returnValue.then(emit);\n            }\n            else {\n                emit(returnValue);\n            }\n            return returnValue;\n        };\n    };\n}\nfunction isPromise(obj) {\n    return obj instanceof Promise || (obj && typeof obj.then === 'function');\n}\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-property-decorator/lib/decorators/Inject.js\":\n/*!**********************************************************************!*\\\n  !*** ./node_modules/vue-property-decorator/lib/decorators/Inject.js ***!\n  \\**********************************************************************/\n/*! exports provided: Inject */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_799905__) {\n\n\"use strict\";\n__nested_webpack_require_799905__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_799905__.d(__nested_webpack_exports__, \"Inject\", function() { return Inject; });\n/* harmony import */ var vue_class_component__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_799905__(/*! vue-class-component */ \"./node_modules/vue-class-component/dist/vue-class-component.esm.js\");\n\n/**\n * decorator of an inject\n * @param from key\n * @return PropertyDecorator\n */\nfunction Inject(options) {\n    return Object(vue_class_component__WEBPACK_IMPORTED_MODULE_0__[\"createDecorator\"])(function (componentOptions, key) {\n        if (typeof componentOptions.inject === 'undefined') {\n            componentOptions.inject = {};\n        }\n        if (!Array.isArray(componentOptions.inject)) {\n            componentOptions.inject[key] = options || key;\n        }\n    });\n}\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-property-decorator/lib/decorators/InjectReactive.js\":\n/*!******************************************************************************!*\\\n  !*** ./node_modules/vue-property-decorator/lib/decorators/InjectReactive.js ***!\n  \\******************************************************************************/\n/*! exports provided: InjectReactive */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_801206__) {\n\n\"use strict\";\n__nested_webpack_require_801206__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_801206__.d(__nested_webpack_exports__, \"InjectReactive\", function() { return InjectReactive; });\n/* harmony import */ var vue_class_component__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_801206__(/*! vue-class-component */ \"./node_modules/vue-class-component/dist/vue-class-component.esm.js\");\n/* harmony import */ var _helpers_provideInject__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_801206__(/*! ../helpers/provideInject */ \"./node_modules/vue-property-decorator/lib/helpers/provideInject.js\");\n\n\n/**\n * decorator of a reactive inject\n * @param from key\n * @return PropertyDecorator\n */\nfunction InjectReactive(options) {\n    return Object(vue_class_component__WEBPACK_IMPORTED_MODULE_0__[\"createDecorator\"])(function (componentOptions, key) {\n        if (typeof componentOptions.inject === 'undefined') {\n            componentOptions.inject = {};\n        }\n        if (!Array.isArray(componentOptions.inject)) {\n            var fromKey_1 = !!options ? options.from || options : key;\n            var defaultVal_1 = (!!options && options.default) || undefined;\n            if (!componentOptions.computed)\n                componentOptions.computed = {};\n            componentOptions.computed[key] = function () {\n                var obj = this[_helpers_provideInject__WEBPACK_IMPORTED_MODULE_1__[\"reactiveInjectKey\"]];\n                return obj ? obj[fromKey_1] : defaultVal_1;\n            };\n            componentOptions.inject[_helpers_provideInject__WEBPACK_IMPORTED_MODULE_1__[\"reactiveInjectKey\"]] = _helpers_provideInject__WEBPACK_IMPORTED_MODULE_1__[\"reactiveInjectKey\"];\n        }\n    });\n}\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-property-decorator/lib/decorators/Model.js\":\n/*!*********************************************************************!*\\\n  !*** ./node_modules/vue-property-decorator/lib/decorators/Model.js ***!\n  \\*********************************************************************/\n/*! exports provided: Model */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_803303__) {\n\n\"use strict\";\n__nested_webpack_require_803303__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_803303__.d(__nested_webpack_exports__, \"Model\", function() { return Model; });\n/* harmony import */ var vue_class_component__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_803303__(/*! vue-class-component */ \"./node_modules/vue-class-component/dist/vue-class-component.esm.js\");\n/* harmony import */ var _helpers_metadata__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_803303__(/*! ../helpers/metadata */ \"./node_modules/vue-property-decorator/lib/helpers/metadata.js\");\n\n\n/**\n * decorator of model\n * @param  event event name\n * @param options options\n * @return PropertyDecorator\n */\nfunction Model(event, options) {\n    if (options === void 0) { options = {}; }\n    return function (target, key) {\n        Object(_helpers_metadata__WEBPACK_IMPORTED_MODULE_1__[\"applyMetadata\"])(options, target, key);\n        Object(vue_class_component__WEBPACK_IMPORTED_MODULE_0__[\"createDecorator\"])(function (componentOptions, k) {\n            ;\n            (componentOptions.props || (componentOptions.props = {}))[k] = options;\n            componentOptions.model = { prop: k, event: event || k };\n        })(target, key);\n    };\n}\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-property-decorator/lib/decorators/ModelSync.js\":\n/*!*************************************************************************!*\\\n  !*** ./node_modules/vue-property-decorator/lib/decorators/ModelSync.js ***!\n  \\*************************************************************************/\n/*! exports provided: ModelSync */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_804935__) {\n\n\"use strict\";\n__nested_webpack_require_804935__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_804935__.d(__nested_webpack_exports__, \"ModelSync\", function() { return ModelSync; });\n/* harmony import */ var vue_class_component__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_804935__(/*! vue-class-component */ \"./node_modules/vue-class-component/dist/vue-class-component.esm.js\");\n/* harmony import */ var _helpers_metadata__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_804935__(/*! ../helpers/metadata */ \"./node_modules/vue-property-decorator/lib/helpers/metadata.js\");\n\n\n/**\n * decorator of synced model and prop\n * @param propName the name to interface with from outside, must be different from decorated property\n * @param  event event name\n * @param options options\n * @return PropertyDecorator\n */\nfunction ModelSync(propName, event, options) {\n    if (options === void 0) { options = {}; }\n    return function (target, key) {\n        Object(_helpers_metadata__WEBPACK_IMPORTED_MODULE_1__[\"applyMetadata\"])(options, target, key);\n        Object(vue_class_component__WEBPACK_IMPORTED_MODULE_0__[\"createDecorator\"])(function (componentOptions, k) {\n            ;\n            (componentOptions.props || (componentOptions.props = {}))[propName] = options;\n            componentOptions.model = { prop: propName, event: event || k };\n            (componentOptions.computed || (componentOptions.computed = {}))[k] = {\n                get: function () {\n                    return this[propName];\n                },\n                set: function (value) {\n                    // @ts-ignore\n                    this.$emit(event, value);\n                },\n            };\n        })(target, key);\n    };\n}\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-property-decorator/lib/decorators/Prop.js\":\n/*!********************************************************************!*\\\n  !*** ./node_modules/vue-property-decorator/lib/decorators/Prop.js ***!\n  \\********************************************************************/\n/*! exports provided: Prop */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_807030__) {\n\n\"use strict\";\n__nested_webpack_require_807030__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_807030__.d(__nested_webpack_exports__, \"Prop\", function() { return Prop; });\n/* harmony import */ var vue_class_component__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_807030__(/*! vue-class-component */ \"./node_modules/vue-class-component/dist/vue-class-component.esm.js\");\n/* harmony import */ var _helpers_metadata__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_807030__(/*! ../helpers/metadata */ \"./node_modules/vue-property-decorator/lib/helpers/metadata.js\");\n\n\n/**\n * decorator of a prop\n * @param  options the options for the prop\n * @return PropertyDecorator | void\n */\nfunction Prop(options) {\n    if (options === void 0) { options = {}; }\n    return function (target, key) {\n        Object(_helpers_metadata__WEBPACK_IMPORTED_MODULE_1__[\"applyMetadata\"])(options, target, key);\n        Object(vue_class_component__WEBPACK_IMPORTED_MODULE_0__[\"createDecorator\"])(function (componentOptions, k) {\n            ;\n            (componentOptions.props || (componentOptions.props = {}))[k] = options;\n        })(target, key);\n    };\n}\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-property-decorator/lib/decorators/PropSync.js\":\n/*!************************************************************************!*\\\n  !*** ./node_modules/vue-property-decorator/lib/decorators/PropSync.js ***!\n  \\************************************************************************/\n/*! exports provided: PropSync */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_808576__) {\n\n\"use strict\";\n__nested_webpack_require_808576__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_808576__.d(__nested_webpack_exports__, \"PropSync\", function() { return PropSync; });\n/* harmony import */ var vue_class_component__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_808576__(/*! vue-class-component */ \"./node_modules/vue-class-component/dist/vue-class-component.esm.js\");\n/* harmony import */ var _helpers_metadata__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_808576__(/*! ../helpers/metadata */ \"./node_modules/vue-property-decorator/lib/helpers/metadata.js\");\n\n\n/**\n * decorator of a synced prop\n * @param propName the name to interface with from outside, must be different from decorated property\n * @param options the options for the synced prop\n * @return PropertyDecorator | void\n */\nfunction PropSync(propName, options) {\n    if (options === void 0) { options = {}; }\n    return function (target, key) {\n        Object(_helpers_metadata__WEBPACK_IMPORTED_MODULE_1__[\"applyMetadata\"])(options, target, key);\n        Object(vue_class_component__WEBPACK_IMPORTED_MODULE_0__[\"createDecorator\"])(function (componentOptions, k) {\n            ;\n            (componentOptions.props || (componentOptions.props = {}))[propName] = options;\n            (componentOptions.computed || (componentOptions.computed = {}))[k] = {\n                get: function () {\n                    return this[propName];\n                },\n                set: function (value) {\n                    this.$emit(\"update:\" + propName, value);\n                },\n            };\n        })(target, key);\n    };\n}\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-property-decorator/lib/decorators/Provide.js\":\n/*!***********************************************************************!*\\\n  !*** ./node_modules/vue-property-decorator/lib/decorators/Provide.js ***!\n  \\***********************************************************************/\n/*! exports provided: Provide */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_810576__) {\n\n\"use strict\";\n__nested_webpack_require_810576__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_810576__.d(__nested_webpack_exports__, \"Provide\", function() { return Provide; });\n/* harmony import */ var vue_class_component__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_810576__(/*! vue-class-component */ \"./node_modules/vue-class-component/dist/vue-class-component.esm.js\");\n/* harmony import */ var _helpers_provideInject__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_810576__(/*! ../helpers/provideInject */ \"./node_modules/vue-property-decorator/lib/helpers/provideInject.js\");\n\n\n/**\n * decorator of a provide\n * @param key key\n * @return PropertyDecorator | void\n */\nfunction Provide(key) {\n    return Object(vue_class_component__WEBPACK_IMPORTED_MODULE_0__[\"createDecorator\"])(function (componentOptions, k) {\n        var provide = componentOptions.provide;\n        Object(_helpers_provideInject__WEBPACK_IMPORTED_MODULE_1__[\"inheritInjected\"])(componentOptions);\n        if (Object(_helpers_provideInject__WEBPACK_IMPORTED_MODULE_1__[\"needToProduceProvide\"])(provide)) {\n            provide = componentOptions.provide = Object(_helpers_provideInject__WEBPACK_IMPORTED_MODULE_1__[\"produceProvide\"])(provide);\n        }\n        provide.managed[k] = key || k;\n    });\n}\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-property-decorator/lib/decorators/ProvideReactive.js\":\n/*!*******************************************************************************!*\\\n  !*** ./node_modules/vue-property-decorator/lib/decorators/ProvideReactive.js ***!\n  \\*******************************************************************************/\n/*! exports provided: ProvideReactive */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_812298__) {\n\n\"use strict\";\n__nested_webpack_require_812298__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_812298__.d(__nested_webpack_exports__, \"ProvideReactive\", function() { return ProvideReactive; });\n/* harmony import */ var vue_class_component__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_812298__(/*! vue-class-component */ \"./node_modules/vue-class-component/dist/vue-class-component.esm.js\");\n/* harmony import */ var _helpers_provideInject__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_812298__(/*! ../helpers/provideInject */ \"./node_modules/vue-property-decorator/lib/helpers/provideInject.js\");\n\n\n/**\n * decorator of a reactive provide\n * @param key key\n * @return PropertyDecorator | void\n */\nfunction ProvideReactive(key) {\n    return Object(vue_class_component__WEBPACK_IMPORTED_MODULE_0__[\"createDecorator\"])(function (componentOptions, k) {\n        var provide = componentOptions.provide;\n        Object(_helpers_provideInject__WEBPACK_IMPORTED_MODULE_1__[\"inheritInjected\"])(componentOptions);\n        if (Object(_helpers_provideInject__WEBPACK_IMPORTED_MODULE_1__[\"needToProduceProvide\"])(provide)) {\n            provide = componentOptions.provide = Object(_helpers_provideInject__WEBPACK_IMPORTED_MODULE_1__[\"produceProvide\"])(provide);\n        }\n        provide.managedReactive[k] = key || k;\n    });\n}\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-property-decorator/lib/decorators/Ref.js\":\n/*!*******************************************************************!*\\\n  !*** ./node_modules/vue-property-decorator/lib/decorators/Ref.js ***!\n  \\*******************************************************************/\n/*! exports provided: Ref */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_814001__) {\n\n\"use strict\";\n__nested_webpack_require_814001__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_814001__.d(__nested_webpack_exports__, \"Ref\", function() { return Ref; });\n/* harmony import */ var vue_class_component__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_814001__(/*! vue-class-component */ \"./node_modules/vue-class-component/dist/vue-class-component.esm.js\");\n\n/**\n * decorator of a ref prop\n * @param refKey the ref key defined in template\n */\nfunction Ref(refKey) {\n    return Object(vue_class_component__WEBPACK_IMPORTED_MODULE_0__[\"createDecorator\"])(function (options, key) {\n        options.computed = options.computed || {};\n        options.computed[key] = {\n            cache: false,\n            get: function () {\n                return this.$refs[refKey || key];\n            },\n        };\n    });\n}\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-property-decorator/lib/decorators/VModel.js\":\n/*!**********************************************************************!*\\\n  !*** ./node_modules/vue-property-decorator/lib/decorators/VModel.js ***!\n  \\**********************************************************************/\n/*! exports provided: VModel */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_815225__) {\n\n\"use strict\";\n__nested_webpack_require_815225__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_815225__.d(__nested_webpack_exports__, \"VModel\", function() { return VModel; });\n/* harmony import */ var vue_class_component__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_815225__(/*! vue-class-component */ \"./node_modules/vue-class-component/dist/vue-class-component.esm.js\");\n\n/**\n * decorator for capturings v-model binding to component\n * @param options the options for the prop\n */\nfunction VModel(options) {\n    if (options === void 0) { options = {}; }\n    var valueKey = 'value';\n    return Object(vue_class_component__WEBPACK_IMPORTED_MODULE_0__[\"createDecorator\"])(function (componentOptions, key) {\n        ;\n        (componentOptions.props || (componentOptions.props = {}))[valueKey] = options;\n        (componentOptions.computed || (componentOptions.computed = {}))[key] = {\n            get: function () {\n                return this[valueKey];\n            },\n            set: function (value) {\n                this.$emit('input', value);\n            },\n        };\n    });\n}\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-property-decorator/lib/decorators/Watch.js\":\n/*!*********************************************************************!*\\\n  !*** ./node_modules/vue-property-decorator/lib/decorators/Watch.js ***!\n  \\*********************************************************************/\n/*! exports provided: Watch */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_816712__) {\n\n\"use strict\";\n__nested_webpack_require_816712__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_816712__.d(__nested_webpack_exports__, \"Watch\", function() { return Watch; });\n/* harmony import */ var vue_class_component__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_816712__(/*! vue-class-component */ \"./node_modules/vue-class-component/dist/vue-class-component.esm.js\");\n\n/**\n * decorator of a watch function\n * @param  path the path or the expression to observe\n * @param  WatchOption\n * @return MethodDecorator\n */\nfunction Watch(path, options) {\n    if (options === void 0) { options = {}; }\n    var _a = options.deep, deep = _a === void 0 ? false : _a, _b = options.immediate, immediate = _b === void 0 ? false : _b;\n    return Object(vue_class_component__WEBPACK_IMPORTED_MODULE_0__[\"createDecorator\"])(function (componentOptions, handler) {\n        if (typeof componentOptions.watch !== 'object') {\n            componentOptions.watch = Object.create(null);\n        }\n        var watch = componentOptions.watch;\n        if (typeof watch[path] === 'object' && !Array.isArray(watch[path])) {\n            watch[path] = [watch[path]];\n        }\n        else if (typeof watch[path] === 'undefined') {\n            watch[path] = [];\n        }\n        watch[path].push({ handler: handler, deep: deep, immediate: immediate });\n    });\n}\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-property-decorator/lib/helpers/metadata.js\":\n/*!*********************************************************************!*\\\n  !*** ./node_modules/vue-property-decorator/lib/helpers/metadata.js ***!\n  \\*********************************************************************/\n/*! exports provided: applyMetadata */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_818456__) {\n\n\"use strict\";\n__nested_webpack_require_818456__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_818456__.d(__nested_webpack_exports__, \"applyMetadata\", function() { return applyMetadata; });\n/** @see {@link https://github.com/vuejs/vue-class-component/blob/master/src/reflect.ts} */\nvar reflectMetadataIsSupported = typeof Reflect !== 'undefined' && typeof Reflect.getMetadata !== 'undefined';\nfunction applyMetadata(options, target, key) {\n    if (reflectMetadataIsSupported) {\n        if (!Array.isArray(options) &&\n            typeof options !== 'function' &&\n            !options.hasOwnProperty('type') &&\n            typeof options.type === 'undefined') {\n            var type = Reflect.getMetadata('design:type', target, key);\n            if (type !== Object) {\n                options.type = type;\n            }\n        }\n    }\n}\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-property-decorator/lib/helpers/provideInject.js\":\n/*!**************************************************************************!*\\\n  !*** ./node_modules/vue-property-decorator/lib/helpers/provideInject.js ***!\n  \\**************************************************************************/\n/*! exports provided: needToProduceProvide, produceProvide, reactiveInjectKey, inheritInjected */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_819785__) {\n\n\"use strict\";\n__nested_webpack_require_819785__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_819785__.d(__nested_webpack_exports__, \"needToProduceProvide\", function() { return needToProduceProvide; });\n/* harmony export (binding) */ __nested_webpack_require_819785__.d(__nested_webpack_exports__, \"produceProvide\", function() { return produceProvide; });\n/* harmony export (binding) */ __nested_webpack_require_819785__.d(__nested_webpack_exports__, \"reactiveInjectKey\", function() { return reactiveInjectKey; });\n/* harmony export (binding) */ __nested_webpack_require_819785__.d(__nested_webpack_exports__, \"inheritInjected\", function() { return inheritInjected; });\nfunction needToProduceProvide(original) {\n    return (typeof original !== 'function' ||\n        (!original.managed && !original.managedReactive));\n}\nfunction produceProvide(original) {\n    var provide = function () {\n        var _this = this;\n        var rv = typeof original === 'function' ? original.call(this) : original;\n        rv = Object.create(rv || null);\n        // set reactive services (propagates previous services if necessary)\n        rv[reactiveInjectKey] = Object.create(this[reactiveInjectKey] || {});\n        for (var i in provide.managed) {\n            rv[provide.managed[i]] = this[i];\n        }\n        var _loop_1 = function (i) {\n            rv[provide.managedReactive[i]] = this_1[i]; // Duplicates the behavior of `@Provide`\n            Object.defineProperty(rv[reactiveInjectKey], provide.managedReactive[i], {\n                enumerable: true,\n                configurable: true,\n                get: function () { return _this[i]; },\n            });\n        };\n        var this_1 = this;\n        for (var i in provide.managedReactive) {\n            _loop_1(i);\n        }\n        return rv;\n    };\n    provide.managed = {};\n    provide.managedReactive = {};\n    return provide;\n}\n/** Used for keying reactive provide/inject properties */\nvar reactiveInjectKey = '__reactiveInject__';\nfunction inheritInjected(componentOptions) {\n    // inject parent reactive services (if any)\n    if (!Array.isArray(componentOptions.inject)) {\n        componentOptions.inject = componentOptions.inject || {};\n        componentOptions.inject[reactiveInjectKey] = {\n            from: reactiveInjectKey,\n            default: {},\n        };\n    }\n}\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-property-decorator/lib/index.js\":\n/*!**********************************************************!*\\\n  !*** ./node_modules/vue-property-decorator/lib/index.js ***!\n  \\**********************************************************/\n/*! exports provided: Component, Vue, Mixins, Emit, Inject, InjectReactive, Model, ModelSync, Prop, PropSync, Provide, ProvideReactive, Ref, VModel, Watch */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_822539__) {\n\n\"use strict\";\n__nested_webpack_require_822539__.r(__nested_webpack_exports__);\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_822539__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_822539__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony reexport (default from non-harmony) */ __nested_webpack_require_822539__.d(__nested_webpack_exports__, \"Vue\", function() { return vue__WEBPACK_IMPORTED_MODULE_0___default.a; });\n/* harmony import */ var vue_class_component__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_822539__(/*! vue-class-component */ \"./node_modules/vue-class-component/dist/vue-class-component.esm.js\");\n/* harmony reexport (safe) */ __nested_webpack_require_822539__.d(__nested_webpack_exports__, \"Component\", function() { return vue_class_component__WEBPACK_IMPORTED_MODULE_1__[\"default\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_822539__.d(__nested_webpack_exports__, \"Mixins\", function() { return vue_class_component__WEBPACK_IMPORTED_MODULE_1__[\"mixins\"]; });\n\n/* harmony import */ var _decorators_Emit__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_822539__(/*! ./decorators/Emit */ \"./node_modules/vue-property-decorator/lib/decorators/Emit.js\");\n/* harmony reexport (safe) */ __nested_webpack_require_822539__.d(__nested_webpack_exports__, \"Emit\", function() { return _decorators_Emit__WEBPACK_IMPORTED_MODULE_2__[\"Emit\"]; });\n\n/* harmony import */ var _decorators_Inject__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_822539__(/*! ./decorators/Inject */ \"./node_modules/vue-property-decorator/lib/decorators/Inject.js\");\n/* harmony reexport (safe) */ __nested_webpack_require_822539__.d(__nested_webpack_exports__, \"Inject\", function() { return _decorators_Inject__WEBPACK_IMPORTED_MODULE_3__[\"Inject\"]; });\n\n/* harmony import */ var _decorators_InjectReactive__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_822539__(/*! ./decorators/InjectReactive */ \"./node_modules/vue-property-decorator/lib/decorators/InjectReactive.js\");\n/* harmony reexport (safe) */ __nested_webpack_require_822539__.d(__nested_webpack_exports__, \"InjectReactive\", function() { return _decorators_InjectReactive__WEBPACK_IMPORTED_MODULE_4__[\"InjectReactive\"]; });\n\n/* harmony import */ var _decorators_Model__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_822539__(/*! ./decorators/Model */ \"./node_modules/vue-property-decorator/lib/decorators/Model.js\");\n/* harmony reexport (safe) */ __nested_webpack_require_822539__.d(__nested_webpack_exports__, \"Model\", function() { return _decorators_Model__WEBPACK_IMPORTED_MODULE_5__[\"Model\"]; });\n\n/* harmony import */ var _decorators_ModelSync__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_822539__(/*! ./decorators/ModelSync */ \"./node_modules/vue-property-decorator/lib/decorators/ModelSync.js\");\n/* harmony reexport (safe) */ __nested_webpack_require_822539__.d(__nested_webpack_exports__, \"ModelSync\", function() { return _decorators_ModelSync__WEBPACK_IMPORTED_MODULE_6__[\"ModelSync\"]; });\n\n/* harmony import */ var _decorators_Prop__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_822539__(/*! ./decorators/Prop */ \"./node_modules/vue-property-decorator/lib/decorators/Prop.js\");\n/* harmony reexport (safe) */ __nested_webpack_require_822539__.d(__nested_webpack_exports__, \"Prop\", function() { return _decorators_Prop__WEBPACK_IMPORTED_MODULE_7__[\"Prop\"]; });\n\n/* harmony import */ var _decorators_PropSync__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_822539__(/*! ./decorators/PropSync */ \"./node_modules/vue-property-decorator/lib/decorators/PropSync.js\");\n/* harmony reexport (safe) */ __nested_webpack_require_822539__.d(__nested_webpack_exports__, \"PropSync\", function() { return _decorators_PropSync__WEBPACK_IMPORTED_MODULE_8__[\"PropSync\"]; });\n\n/* harmony import */ var _decorators_Provide__WEBPACK_IMPORTED_MODULE_9__ = __nested_webpack_require_822539__(/*! ./decorators/Provide */ \"./node_modules/vue-property-decorator/lib/decorators/Provide.js\");\n/* harmony reexport (safe) */ __nested_webpack_require_822539__.d(__nested_webpack_exports__, \"Provide\", function() { return _decorators_Provide__WEBPACK_IMPORTED_MODULE_9__[\"Provide\"]; });\n\n/* harmony import */ var _decorators_ProvideReactive__WEBPACK_IMPORTED_MODULE_10__ = __nested_webpack_require_822539__(/*! ./decorators/ProvideReactive */ \"./node_modules/vue-property-decorator/lib/decorators/ProvideReactive.js\");\n/* harmony reexport (safe) */ __nested_webpack_require_822539__.d(__nested_webpack_exports__, \"ProvideReactive\", function() { return _decorators_ProvideReactive__WEBPACK_IMPORTED_MODULE_10__[\"ProvideReactive\"]; });\n\n/* harmony import */ var _decorators_Ref__WEBPACK_IMPORTED_MODULE_11__ = __nested_webpack_require_822539__(/*! ./decorators/Ref */ \"./node_modules/vue-property-decorator/lib/decorators/Ref.js\");\n/* harmony reexport (safe) */ __nested_webpack_require_822539__.d(__nested_webpack_exports__, \"Ref\", function() { return _decorators_Ref__WEBPACK_IMPORTED_MODULE_11__[\"Ref\"]; });\n\n/* harmony import */ var _decorators_VModel__WEBPACK_IMPORTED_MODULE_12__ = __nested_webpack_require_822539__(/*! ./decorators/VModel */ \"./node_modules/vue-property-decorator/lib/decorators/VModel.js\");\n/* harmony reexport (safe) */ __nested_webpack_require_822539__.d(__nested_webpack_exports__, \"VModel\", function() { return _decorators_VModel__WEBPACK_IMPORTED_MODULE_12__[\"VModel\"]; });\n\n/* harmony import */ var _decorators_Watch__WEBPACK_IMPORTED_MODULE_13__ = __nested_webpack_require_822539__(/*! ./decorators/Watch */ \"./node_modules/vue-property-decorator/lib/decorators/Watch.js\");\n/* harmony reexport (safe) */ __nested_webpack_require_822539__.d(__nested_webpack_exports__, \"Watch\", function() { return _decorators_Watch__WEBPACK_IMPORTED_MODULE_13__[\"Watch\"]; });\n\n/** vue-property-decorator verson 9.1.2 MIT LICENSE copyright 2020 kaorun343 */\n/// <reference types='reflect-metadata'/>\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/***/ }),\n\n/***/ \"./src/actions/action.ts\":\n/*!*******************************!*\\\n  !*** ./src/actions/action.ts ***!\n  \\*******************************/\n/*! exports provided: createDropdownActionModel, createDropdownActionModelAdvanced, getActionDropdownButtonTarget, BaseAction, Action, ActionDropdownViewModel */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_828424__) {\n\n\"use strict\";\n__nested_webpack_require_828424__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_828424__.d(__nested_webpack_exports__, \"createDropdownActionModel\", function() { return createDropdownActionModel; });\n/* harmony export (binding) */ __nested_webpack_require_828424__.d(__nested_webpack_exports__, \"createDropdownActionModelAdvanced\", function() { return createDropdownActionModelAdvanced; });\n/* harmony export (binding) */ __nested_webpack_require_828424__.d(__nested_webpack_exports__, \"getActionDropdownButtonTarget\", function() { return getActionDropdownButtonTarget; });\n/* harmony export (binding) */ __nested_webpack_require_828424__.d(__nested_webpack_exports__, \"BaseAction\", function() { return BaseAction; });\n/* harmony export (binding) */ __nested_webpack_require_828424__.d(__nested_webpack_exports__, \"Action\", function() { return Action; });\n/* harmony export (binding) */ __nested_webpack_require_828424__.d(__nested_webpack_exports__, \"ActionDropdownViewModel\", function() { return ActionDropdownViewModel; });\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_828424__(/*! ../base */ \"./src/base.ts\");\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_828424__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_828424__(/*! ../jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _list__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_828424__(/*! ../list */ \"./src/list.ts\");\n/* harmony import */ var _popup__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_828424__(/*! ../popup */ \"./src/popup.ts\");\n/* harmony import */ var _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_828424__(/*! ../utils/cssClassBuilder */ \"./src/utils/cssClassBuilder.ts\");\n/* harmony import */ var _container__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_828424__(/*! ./container */ \"./src/actions/container.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\n\n\nfunction createDropdownActionModel(actionOptions, dropdownOptions, locOwner) {\n    return createDropdownActionModelAdvanced(actionOptions, dropdownOptions, dropdownOptions, locOwner);\n}\nfunction createDropdownActionModelAdvanced(actionOptions, listOptions, popupOptions, locOwner) {\n    var listModel = new _list__WEBPACK_IMPORTED_MODULE_3__[\"ListModel\"](listOptions.items, function (item) {\n        if (newAction.hasTitle) {\n            newAction.title = item.title;\n        }\n        listOptions.onSelectionChanged(item);\n        innerPopupModel.toggleVisibility();\n    }, listOptions.allowSelection, listOptions.selectedItem, listOptions.onFilterStringChangedCallback);\n    listModel.locOwner = locOwner;\n    var innerPopupModel = new _popup__WEBPACK_IMPORTED_MODULE_4__[\"PopupModel\"](\"sv-list\", { model: listModel }, popupOptions === null || popupOptions === void 0 ? void 0 : popupOptions.verticalPosition, popupOptions === null || popupOptions === void 0 ? void 0 : popupOptions.horizontalPosition, popupOptions === null || popupOptions === void 0 ? void 0 : popupOptions.showPointer, popupOptions === null || popupOptions === void 0 ? void 0 : popupOptions.isModal, popupOptions === null || popupOptions === void 0 ? void 0 : popupOptions.onCancel, popupOptions === null || popupOptions === void 0 ? void 0 : popupOptions.onApply, popupOptions === null || popupOptions === void 0 ? void 0 : popupOptions.onHide, popupOptions === null || popupOptions === void 0 ? void 0 : popupOptions.onShow, popupOptions === null || popupOptions === void 0 ? void 0 : popupOptions.cssClass, popupOptions === null || popupOptions === void 0 ? void 0 : popupOptions.title, function () {\n        listModel.dispose();\n    });\n    innerPopupModel.displayMode = popupOptions === null || popupOptions === void 0 ? void 0 : popupOptions.displayMode;\n    var newActionOptions = Object.assign({}, actionOptions, {\n        component: \"sv-action-bar-item-dropdown\",\n        popupModel: innerPopupModel,\n        action: function (action, isUserAction) {\n            !!(actionOptions.action) && actionOptions.action();\n            innerPopupModel.isFocusedContent = !isUserAction || listModel.showFilter;\n            innerPopupModel.toggleVisibility();\n            listModel.scrollToSelectedItem();\n        },\n    });\n    var newAction = new Action(newActionOptions);\n    newAction.data = listModel;\n    return newAction;\n}\nfunction getActionDropdownButtonTarget(container) {\n    return container === null || container === void 0 ? void 0 : container.previousElementSibling;\n}\nvar BaseAction = /** @class */ (function (_super) {\n    __extends(BaseAction, _super);\n    function BaseAction() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.iconSize = 24;\n        return _this;\n    }\n    Object.defineProperty(BaseAction.prototype, \"visible\", {\n        get: function () {\n            return this.getVisible();\n        },\n        set: function (val) {\n            this.setVisible(val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(BaseAction.prototype, \"enabled\", {\n        get: function () {\n            return this.getEnabled();\n        },\n        set: function (val) {\n            this.setEnabled(val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(BaseAction.prototype, \"component\", {\n        get: function () {\n            return this.getComponent();\n        },\n        set: function (val) {\n            this.setComponent(val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(BaseAction.prototype, \"locTitle\", {\n        get: function () {\n            return this.getLocTitle();\n        },\n        set: function (val) {\n            this.setLocTitle(val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(BaseAction.prototype, \"title\", {\n        get: function () {\n            return this.getTitle();\n        },\n        set: function (val) {\n            this.setTitle(val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(BaseAction.prototype, \"cssClasses\", {\n        get: function () {\n            return this.cssClassesValue || _container__WEBPACK_IMPORTED_MODULE_6__[\"defaultActionBarCss\"];\n        },\n        set: function (val) {\n            this.cssClassesValue = val;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(BaseAction.prototype, \"isVisible\", {\n        get: function () {\n            return this.visible && this.mode !== \"popup\" && this.mode !== \"removed\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(BaseAction.prototype, \"disabled\", {\n        get: function () {\n            return this.enabled !== undefined && !this.enabled;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(BaseAction.prototype, \"canShrink\", {\n        get: function () {\n            return !!this.iconName;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(BaseAction.prototype, \"hasTitle\", {\n        get: function () {\n            return (((this.mode != \"small\" &&\n                (this.showTitle || this.showTitle === undefined)) ||\n                !this.iconName) &&\n                !!this.title);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    BaseAction.prototype.getActionBarItemTitleCss = function () {\n        return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_5__[\"CssClassBuilder\"]()\n            .append(this.cssClasses.itemTitle)\n            .append(this.cssClasses.itemTitleWithIcon, !!this.iconName)\n            .toString();\n    };\n    BaseAction.prototype.getActionBarItemCss = function () {\n        return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_5__[\"CssClassBuilder\"]()\n            .append(this.cssClasses.item)\n            .append(this.cssClasses.itemWithTitle, this.hasTitle)\n            .append(this.cssClasses.itemAsIcon, !this.hasTitle)\n            .append(this.cssClasses.itemActive, !!this.active)\n            .append(this.cssClasses.itemPressed, !!this.pressed)\n            .append(this.innerCss)\n            .toString();\n    };\n    BaseAction.prototype.getActionRootCss = function () {\n        return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_5__[\"CssClassBuilder\"]()\n            .append(\"sv-action\")\n            .append(this.css)\n            .append(\"sv-action--space\", this.needSpace)\n            .append(\"sv-action--hidden\", !this.isVisible)\n            .toString();\n    };\n    BaseAction.prototype.getTooltip = function () {\n        return this.tooltip || this.title;\n    };\n    BaseAction.prototype.getIsTrusted = function (args) {\n        if (!!args.originalEvent) {\n            return args.originalEvent.isTrusted;\n        }\n        return args.isTrusted;\n    };\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"property\"])()\n    ], BaseAction.prototype, \"tooltip\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"property\"])()\n    ], BaseAction.prototype, \"showTitle\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"property\"])()\n    ], BaseAction.prototype, \"innerCss\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"property\"])()\n    ], BaseAction.prototype, \"active\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"property\"])()\n    ], BaseAction.prototype, \"pressed\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"property\"])()\n    ], BaseAction.prototype, \"data\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"property\"])()\n    ], BaseAction.prototype, \"popupModel\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"property\"])()\n    ], BaseAction.prototype, \"needSeparator\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"property\"])()\n    ], BaseAction.prototype, \"template\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"property\"])({ defaultValue: \"large\" })\n    ], BaseAction.prototype, \"mode\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"property\"])()\n    ], BaseAction.prototype, \"visibleIndex\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"property\"])()\n    ], BaseAction.prototype, \"disableTabStop\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"property\"])()\n    ], BaseAction.prototype, \"disableShrink\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"property\"])()\n    ], BaseAction.prototype, \"disableHide\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"property\"])({ defaultValue: false })\n    ], BaseAction.prototype, \"needSpace\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"property\"])()\n    ], BaseAction.prototype, \"ariaChecked\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"property\"])()\n    ], BaseAction.prototype, \"ariaExpanded\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"property\"])({ defaultValue: \"button\" })\n    ], BaseAction.prototype, \"ariaRole\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"property\"])()\n    ], BaseAction.prototype, \"iconName\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"property\"])()\n    ], BaseAction.prototype, \"iconSize\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"property\"])()\n    ], BaseAction.prototype, \"css\", void 0);\n    return BaseAction;\n}(_base__WEBPACK_IMPORTED_MODULE_0__[\"Base\"]));\n\nvar Action = /** @class */ (function (_super) {\n    __extends(Action, _super);\n    function Action(innerItem) {\n        var _this = _super.call(this) || this;\n        _this.innerItem = innerItem;\n        _this.locTitleChanged = function () {\n            var val = _this.locTitle.renderedHtml;\n            _this.setPropertyValue(\"_title\", !!val ? val : undefined);\n        };\n        _this.locTitle = !!innerItem ? innerItem[\"locTitle\"] : null;\n        //Object.assign(this, item) to support IE11\n        if (!!innerItem) {\n            for (var key in innerItem) {\n                if (key !== \"locTitle\") {\n                    _this[key] = innerItem[key];\n                }\n            }\n        }\n        if (!!_this.locTitleName) {\n            _this.locTitleChanged();\n        }\n        _this.registerFunctionOnPropertyValueChanged(\"_title\", function () {\n            _this.raiseUpdate(true);\n        });\n        _this.locStrChangedInPopupModel();\n        return _this;\n    }\n    Action.prototype.raiseUpdate = function (isResetInitialized) {\n        if (isResetInitialized === void 0) { isResetInitialized = false; }\n        this.updateCallback && this.updateCallback(isResetInitialized);\n    };\n    Action.prototype.createLocTitle = function () {\n        return this.createLocalizableString(\"title\", this, true);\n    };\n    Action.prototype.getLocTitle = function () {\n        return this.locTitleValue;\n    };\n    Action.prototype.setLocTitle = function (val) {\n        if (!val && !this.locTitleValue) {\n            val = this.createLocTitle();\n        }\n        if (!!this.locTitleValue) {\n            this.locTitleValue.onStringChanged.remove(this.locTitleChanged);\n        }\n        this.locTitleValue = val;\n        this.locTitleValue.onStringChanged.add(this.locTitleChanged);\n        this.locTitleChanged();\n    };\n    Action.prototype.getTitle = function () {\n        return this._title;\n    };\n    Action.prototype.setTitle = function (val) {\n        this._title = val;\n    };\n    Object.defineProperty(Action.prototype, \"locTitleName\", {\n        get: function () {\n            return this.locTitle.localizationName;\n        },\n        set: function (val) {\n            this.locTitle.localizationName = val;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Action.prototype.locStrsChanged = function () {\n        _super.prototype.locStrsChanged.call(this);\n        this.locTooltipChanged();\n        this.locStrChangedInPopupModel();\n    };\n    Action.prototype.locStrChangedInPopupModel = function () {\n        if (!this.popupModel || !this.popupModel.contentComponentData || !this.popupModel.contentComponentData.model)\n            return;\n        var model = this.popupModel.contentComponentData.model;\n        if (Array.isArray(model.actions)) {\n            var actions = model.actions;\n            actions.forEach(function (item) {\n                if (!!item.locStrsChanged) {\n                    item.locStrsChanged();\n                }\n            });\n        }\n    };\n    Action.prototype.locTooltipChanged = function () {\n        if (!this.locTooltipName)\n            return;\n        this.tooltip = _surveyStrings__WEBPACK_IMPORTED_MODULE_1__[\"surveyLocalization\"].getString(this.locTooltipName, this.locTitle.locale);\n    };\n    //ILocalizableOwner\n    Action.prototype.getLocale = function () { return this.owner ? this.owner.getLocale() : \"\"; };\n    Action.prototype.getMarkdownHtml = function (text, name) { return this.owner ? this.owner.getMarkdownHtml(text, name) : undefined; };\n    Action.prototype.getProcessedText = function (text) { return this.owner ? this.owner.getProcessedText(text) : text; };\n    Action.prototype.getRenderer = function (name) { return this.owner ? this.owner.getRenderer(name) : null; };\n    Action.prototype.getRendererContext = function (locStr) { return this.owner ? this.owner.getRendererContext(locStr) : locStr; };\n    Action.prototype.setVisible = function (val) {\n        this._visible = val;\n    };\n    Action.prototype.getVisible = function () {\n        return this._visible;\n    };\n    Action.prototype.setEnabled = function (val) {\n        this._enabled = val;\n    };\n    Action.prototype.getEnabled = function () {\n        return this._enabled;\n    };\n    Action.prototype.setComponent = function (val) {\n        this._component = val;\n    };\n    Action.prototype.getComponent = function () {\n        return this._component;\n    };\n    Action.prototype.dispose = function () {\n        this.action = undefined;\n        _super.prototype.dispose.call(this);\n        if (this.popupModel) {\n            this.popupModel.dispose();\n        }\n        if (!!this.locTitleValue) {\n            this.locTitleValue.onStringChanged.remove(this.locTitleChanged);\n            this.locTitleChanged = undefined;\n        }\n    };\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"property\"])()\n    ], Action.prototype, \"id\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"property\"])({\n            defaultValue: true,\n            onSet: function (_, target) {\n                target.raiseUpdate();\n            }\n        })\n    ], Action.prototype, \"_visible\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"property\"])({\n            onSet: function (_, target) {\n                target.locTooltipChanged();\n            }\n        })\n    ], Action.prototype, \"locTooltipName\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"property\"])()\n    ], Action.prototype, \"_enabled\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"property\"])()\n    ], Action.prototype, \"action\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"property\"])()\n    ], Action.prototype, \"_component\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"property\"])()\n    ], Action.prototype, \"items\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"property\"])({\n            onSet: function (val, target) {\n                if (target.locTitleValue.text === val)\n                    return;\n                target.locTitleValue.text = val;\n            }\n        })\n    ], Action.prototype, \"_title\", void 0);\n    return Action;\n}(BaseAction));\n\nvar ActionDropdownViewModel = /** @class */ (function () {\n    function ActionDropdownViewModel(item) {\n        this.item = item;\n        this.funcKey = \"sv-dropdown-action\";\n        this.setupPopupCallbacks();\n    }\n    ActionDropdownViewModel.prototype.setupPopupCallbacks = function () {\n        var _this = this;\n        var popupModel = this.popupModel = this.item.popupModel;\n        if (!popupModel)\n            return;\n        popupModel.registerPropertyChangedHandlers([\"isVisible\"], function () {\n            if (!popupModel.isVisible) {\n                _this.item.pressed = false;\n            }\n            else {\n                _this.item.pressed = true;\n            }\n        }, this.funcKey);\n    };\n    ActionDropdownViewModel.prototype.removePopupCallbacks = function () {\n        if (!!this.popupModel) {\n            this.popupModel.unregisterPropertyChangedHandlers([\"isVisible\"], this.funcKey);\n        }\n    };\n    ActionDropdownViewModel.prototype.dispose = function () {\n        this.removePopupCallbacks();\n    };\n    return ActionDropdownViewModel;\n}());\n\n\n\n/***/ }),\n\n/***/ \"./src/actions/adaptive-container.ts\":\n/*!*******************************************!*\\\n  !*** ./src/actions/adaptive-container.ts ***!\n  \\*******************************************/\n/*! exports provided: AdaptiveActionContainer */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_849497__) {\n\n\"use strict\";\n__nested_webpack_require_849497__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_849497__.d(__nested_webpack_exports__, \"AdaptiveActionContainer\", function() { return AdaptiveActionContainer; });\n/* harmony import */ var _utils_responsivity_manager__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_849497__(/*! ../utils/responsivity-manager */ \"./src/utils/responsivity-manager.ts\");\n/* harmony import */ var _action__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_849497__(/*! ./action */ \"./src/actions/action.ts\");\n/* harmony import */ var _container__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_849497__(/*! ./container */ \"./src/actions/container.ts\");\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_849497__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n\n\n\n\nvar AdaptiveActionContainer = /** @class */ (function (_super) {\n    __extends(AdaptiveActionContainer, _super);\n    function AdaptiveActionContainer() {\n        var _this = _super.call(this) || this;\n        _this.minVisibleItemsCount = 0;\n        _this.isResponsivenessDisabled = false;\n        _this.dotsItem = Object(_action__WEBPACK_IMPORTED_MODULE_1__[\"createDropdownActionModelAdvanced\"])({\n            id: \"dotsItem-id\" + AdaptiveActionContainer.ContainerID++,\n            css: \"sv-dots\",\n            innerCss: \"sv-dots__item\",\n            iconName: \"icon-more\",\n            visible: false,\n            tooltip: _surveyStrings__WEBPACK_IMPORTED_MODULE_3__[\"surveyLocalization\"].getString(\"more\"),\n        }, {\n            items: [],\n            onSelectionChanged: function (item) {\n                _this.hiddenItemSelected(item);\n            },\n            allowSelection: false\n        });\n        return _this;\n    }\n    AdaptiveActionContainer.prototype.hideItemsGreaterN = function (visibleItemsCount) {\n        var actionsToHide = this.getActionsToHide();\n        visibleItemsCount = Math.max(visibleItemsCount, this.minVisibleItemsCount - (this.visibleActions.length - actionsToHide.length));\n        var hiddenItems = [];\n        actionsToHide.forEach(function (item) {\n            if (visibleItemsCount <= 0) {\n                if (item.removePriority) {\n                    item.mode = \"removed\";\n                }\n                else {\n                    item.mode = \"popup\";\n                    hiddenItems.push(item.innerItem);\n                }\n            }\n            visibleItemsCount--;\n        });\n        this.hiddenItemsListModel.setItems(hiddenItems);\n    };\n    AdaptiveActionContainer.prototype.getActionsToHide = function () {\n        return this.visibleActions.filter(function (action) { return !action.disableHide; }).sort(function (a, b) { return a.removePriority || 0 - b.removePriority || 0; });\n    };\n    AdaptiveActionContainer.prototype.getVisibleItemsCount = function (availableSize) {\n        this.visibleActions.filter(function (action) { return action.disableHide; }).forEach(function (action) { return availableSize -= action.minDimension; });\n        var itemsSizes = this.getActionsToHide().map(function (item) { return item.minDimension; });\n        var currSize = 0;\n        for (var i = 0; i < itemsSizes.length; i++) {\n            currSize += itemsSizes[i];\n            if (currSize > availableSize)\n                return i;\n        }\n        return i;\n    };\n    AdaptiveActionContainer.prototype.updateItemMode = function (availableSize, itemsSize) {\n        var items = this.visibleActions;\n        for (var index = items.length - 1; index >= 0; index--) {\n            if (itemsSize > availableSize && !items[index].disableShrink) {\n                itemsSize -= items[index].maxDimension - items[index].minDimension;\n                items[index].mode = \"small\";\n            }\n            else {\n                items[index].mode = \"large\";\n            }\n        }\n        if (itemsSize > availableSize) {\n            var hidableItems = this.visibleActions.filter(function (a) { return a.removePriority; });\n            hidableItems.sort(function (a, b) { return a.removePriority - b.removePriority; });\n            for (var index = 0; index < hidableItems.length; index++) {\n                if (itemsSize > availableSize) {\n                    itemsSize -= items[index].disableShrink ? hidableItems[index].maxDimension : hidableItems[index].minDimension;\n                    hidableItems[index].mode = \"removed\";\n                }\n            }\n        }\n    };\n    Object.defineProperty(AdaptiveActionContainer.prototype, \"hiddenItemsListModel\", {\n        get: function () {\n            return this.dotsItem.data;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    AdaptiveActionContainer.prototype.hiddenItemSelected = function (item) {\n        if (!!item && typeof item.action === \"function\") {\n            item.action();\n        }\n    };\n    AdaptiveActionContainer.prototype.onSet = function () {\n        var _this = this;\n        this.actions.forEach(function (action) { return action.updateCallback = function (isResetInitialized) { return _this.raiseUpdate(isResetInitialized); }; });\n        _super.prototype.onSet.call(this);\n    };\n    AdaptiveActionContainer.prototype.onPush = function (item) {\n        var _this = this;\n        item.updateCallback = function (isResetInitialized) { return _this.raiseUpdate(isResetInitialized); };\n        _super.prototype.onPush.call(this, item);\n    };\n    AdaptiveActionContainer.prototype.getRenderedActions = function () {\n        if (this.actions.length === 1 && !!this.actions[0].iconName)\n            return this.actions;\n        return this.actions.concat([this.dotsItem]);\n    };\n    AdaptiveActionContainer.prototype.raiseUpdate = function (isResetInitialized) {\n        if (!this.isResponsivenessDisabled) {\n            _super.prototype.raiseUpdate.call(this, isResetInitialized);\n        }\n    };\n    AdaptiveActionContainer.prototype.fit = function (dimension, dotsItemSize) {\n        if (dimension <= 0)\n            return;\n        this.dotsItem.visible = false;\n        var minSize = 0;\n        var maxSize = 0;\n        var items = this.visibleActions;\n        items.forEach(function (item) {\n            minSize += item.minDimension;\n            maxSize += item.maxDimension;\n        });\n        if (dimension >= maxSize) {\n            this.setActionsMode(\"large\");\n        }\n        else if (dimension < minSize) {\n            this.setActionsMode(\"small\");\n            this.hideItemsGreaterN(this.getVisibleItemsCount(dimension - dotsItemSize));\n            this.dotsItem.visible = !!this.hiddenItemsListModel.actions.length;\n        }\n        else {\n            this.updateItemMode(dimension, maxSize);\n        }\n    };\n    AdaptiveActionContainer.prototype.initResponsivityManager = function (container) {\n        this.responsivityManager = new _utils_responsivity_manager__WEBPACK_IMPORTED_MODULE_0__[\"ResponsivityManager\"](container, this, \":scope > .sv-action:not(.sv-dots) > .sv-action__content\");\n    };\n    AdaptiveActionContainer.prototype.resetResponsivityManager = function () {\n        if (!!this.responsivityManager) {\n            this.responsivityManager.dispose();\n            this.responsivityManager = undefined;\n        }\n    };\n    AdaptiveActionContainer.prototype.setActionsMode = function (mode) {\n        this.actions.forEach(function (action) {\n            if (mode == \"small\" && action.disableShrink)\n                return;\n            action.mode = mode;\n        });\n    };\n    AdaptiveActionContainer.prototype.dispose = function () {\n        _super.prototype.dispose.call(this);\n        this.dotsItem.data.dispose();\n        this.dotsItem.dispose();\n        this.resetResponsivityManager();\n    };\n    AdaptiveActionContainer.ContainerID = 1;\n    return AdaptiveActionContainer;\n}(_container__WEBPACK_IMPORTED_MODULE_2__[\"ActionContainer\"]));\n\n\n\n/***/ }),\n\n/***/ \"./src/actions/container.ts\":\n/*!**********************************!*\\\n  !*** ./src/actions/container.ts ***!\n  \\**********************************/\n/*! exports provided: defaultActionBarCss, ActionContainer */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_858392__) {\n\n\"use strict\";\n__nested_webpack_require_858392__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_858392__.d(__nested_webpack_exports__, \"defaultActionBarCss\", function() { return defaultActionBarCss; });\n/* harmony export (binding) */ __nested_webpack_require_858392__.d(__nested_webpack_exports__, \"ActionContainer\", function() { return ActionContainer; });\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_858392__(/*! ../jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_858392__(/*! ../base */ \"./src/base.ts\");\n/* harmony import */ var _action__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_858392__(/*! ./action */ \"./src/actions/action.ts\");\n/* harmony import */ var _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_858392__(/*! ../utils/cssClassBuilder */ \"./src/utils/cssClassBuilder.ts\");\n/* harmony import */ var _utils_utils__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_858392__(/*! ../utils/utils */ \"./src/utils/utils.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\nvar defaultActionBarCss = {\n    root: \"sv-action-bar\",\n    defaultSizeMode: \"sv-action-bar--default-size-mode\",\n    smallSizeMode: \"sv-action-bar--small-size-mode\",\n    item: \"sv-action-bar-item\",\n    itemWithTitle: \"\",\n    itemAsIcon: \"sv-action-bar-item--icon\",\n    itemActive: \"sv-action-bar-item--active\",\n    itemPressed: \"sv-action-bar-item--pressed\",\n    itemIcon: \"sv-action-bar-item__icon\",\n    itemTitle: \"sv-action-bar-item__title\",\n    itemTitleWithIcon: \"sv-action-bar-item__title--with-icon\",\n};\nvar ActionContainer = /** @class */ (function (_super) {\n    __extends(ActionContainer, _super);\n    function ActionContainer() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.sizeMode = \"default\";\n        return _this;\n    }\n    ActionContainer.prototype.getMarkdownHtml = function (text, name) {\n        return !!this.locOwner ? this.locOwner.getMarkdownHtml(text, name) : undefined;\n    };\n    ActionContainer.prototype.getRenderer = function (name) {\n        return !!this.locOwner ? this.locOwner.getRenderer(name) : null;\n    };\n    ActionContainer.prototype.getRendererContext = function (locStr) {\n        return !!this.locOwner ? this.locOwner.getRendererContext(locStr) : locStr;\n    };\n    ActionContainer.prototype.getProcessedText = function (text) {\n        return this.locOwner ? this.locOwner.getProcessedText(text) : text;\n    };\n    ActionContainer.prototype.getLocale = function () {\n        return !!this.locOwner ? this.locOwner.getLocale() : \"\";\n    };\n    ActionContainer.prototype.getRenderedActions = function () {\n        return this.actions;\n    };\n    ActionContainer.prototype.locStrsChanged = function () {\n        _super.prototype.locStrsChanged.call(this);\n        this.actions.forEach(function (item) {\n            if (item.locTitle)\n                item.locTitle.strChanged();\n            item.locStrsChanged();\n        });\n    };\n    ActionContainer.prototype.raiseUpdate = function (isResetInitialized) {\n        this.isEmpty = !this.actions.some(function (action) { return action.visible; });\n        this.updateCallback && this.updateCallback(isResetInitialized);\n    };\n    ActionContainer.prototype.onSet = function () {\n        var _this = this;\n        this.actions.forEach(function (item) { _this.setActionCssClasses(item); });\n        this.raiseUpdate(true);\n    };\n    ActionContainer.prototype.onPush = function (item) {\n        this.setActionCssClasses(item);\n        item.owner = this;\n        this.raiseUpdate(true);\n    };\n    ActionContainer.prototype.onRemove = function (item) {\n        item.owner = null;\n        this.raiseUpdate(true);\n    };\n    ActionContainer.prototype.setActionCssClasses = function (item) {\n        item.cssClasses = this.cssClasses;\n    };\n    Object.defineProperty(ActionContainer.prototype, \"hasActions\", {\n        get: function () {\n            return (this.actions || []).length > 0;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(ActionContainer.prototype, \"renderedActions\", {\n        get: function () {\n            return this.getRenderedActions();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(ActionContainer.prototype, \"visibleActions\", {\n        get: function () {\n            return this.actions.filter(function (action) { return action.visible !== false; });\n        },\n        enumerable: false,\n        configurable: true\n    });\n    ActionContainer.prototype.getRootCss = function () {\n        var sizeModeClass = this.sizeMode === \"small\" ? this.cssClasses.smallSizeMode : this.cssClasses.defaultSizeMode;\n        return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_3__[\"CssClassBuilder\"]().append(this.cssClasses.root + (!!sizeModeClass ? \" \" + sizeModeClass : \"\") + (!!this.containerCss ? \" \" + this.containerCss : \"\"))\n            .append(this.cssClasses.root + \"--empty\", this.isEmpty)\n            .toString();\n    };\n    ActionContainer.prototype.getDefaultCssClasses = function () {\n        return defaultActionBarCss;\n    };\n    Object.defineProperty(ActionContainer.prototype, \"cssClasses\", {\n        get: function () {\n            if (!this.cssClassesValue) {\n                this.cssClassesValue = this.getDefaultCssClasses();\n            }\n            return this.cssClassesValue;\n        },\n        set: function (val) {\n            var _this = this;\n            this.cssClassesValue = {};\n            this.copyCssClasses(this.cssClassesValue, this.getDefaultCssClasses());\n            Object(_utils_utils__WEBPACK_IMPORTED_MODULE_4__[\"mergeValues\"])(val, this.cssClasses);\n            this.actions.forEach(function (action) {\n                _this.setActionCssClasses(action);\n            });\n        },\n        enumerable: false,\n        configurable: true\n    });\n    ActionContainer.prototype.createAction = function (item) {\n        return (item instanceof _action__WEBPACK_IMPORTED_MODULE_2__[\"BaseAction\"] ? item : new _action__WEBPACK_IMPORTED_MODULE_2__[\"Action\"](item));\n    };\n    ActionContainer.prototype.addAction = function (val, sortByVisibleIndex) {\n        if (sortByVisibleIndex === void 0) { sortByVisibleIndex = true; }\n        var res = this.createAction(val);\n        this.actions.push(res);\n        this.sortItems();\n        return res;\n    };\n    ActionContainer.prototype.sortItems = function () {\n        this.actions = []\n            .concat(this.actions.filter(function (item) { return item.visibleIndex === undefined || item.visibleIndex >= 0; }))\n            .sort(function (firstItem, secondItem) {\n            return firstItem.visibleIndex - secondItem.visibleIndex;\n        });\n    };\n    ActionContainer.prototype.setItems = function (items, sortByVisibleIndex) {\n        var _this = this;\n        if (sortByVisibleIndex === void 0) { sortByVisibleIndex = true; }\n        this.actions = items.map(function (item) { return _this.createAction(item); });\n        if (sortByVisibleIndex) {\n            this.sortItems();\n        }\n    };\n    ActionContainer.prototype.initResponsivityManager = function (container) {\n        return;\n    };\n    ActionContainer.prototype.resetResponsivityManager = function () { };\n    ActionContainer.prototype.getActionById = function (id) {\n        for (var i = 0; i < this.actions.length; i++) {\n            if (this.actions[i].id === id)\n                return this.actions[i];\n        }\n        return null;\n    };\n    ActionContainer.prototype.dispose = function () {\n        _super.prototype.dispose.call(this);\n        this.actions.forEach(function (action) { return action.dispose(); });\n        this.actions.length = 0;\n    };\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"propertyArray\"])({\n            onSet: function (_, target) {\n                target.onSet();\n            },\n            onPush: function (item, i, target) {\n                target.onPush(item);\n            },\n            onRemove: function (item, i, target) {\n                target.onRemove(item);\n            }\n        })\n    ], ActionContainer.prototype, \"actions\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({})\n    ], ActionContainer.prototype, \"containerCss\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ defaultValue: false })\n    ], ActionContainer.prototype, \"isEmpty\", void 0);\n    return ActionContainer;\n}(_base__WEBPACK_IMPORTED_MODULE_1__[\"Base\"]));\n\n\n\n/***/ }),\n\n/***/ \"./src/base.ts\":\n/*!*********************!*\\\n  !*** ./src/base.ts ***!\n  \\*********************/\n/*! exports provided: Bindings, Dependencies, ComputedUpdater, Base, ArrayChanges, Event, EventBase */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_868570__) {\n\n\"use strict\";\n__nested_webpack_require_868570__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_868570__.d(__nested_webpack_exports__, \"Bindings\", function() { return Bindings; });\n/* harmony export (binding) */ __nested_webpack_require_868570__.d(__nested_webpack_exports__, \"Dependencies\", function() { return Dependencies; });\n/* harmony export (binding) */ __nested_webpack_require_868570__.d(__nested_webpack_exports__, \"ComputedUpdater\", function() { return ComputedUpdater; });\n/* harmony export (binding) */ __nested_webpack_require_868570__.d(__nested_webpack_exports__, \"Base\", function() { return Base; });\n/* harmony export (binding) */ __nested_webpack_require_868570__.d(__nested_webpack_exports__, \"ArrayChanges\", function() { return ArrayChanges; });\n/* harmony export (binding) */ __nested_webpack_require_868570__.d(__nested_webpack_exports__, \"Event\", function() { return Event; });\n/* harmony export (binding) */ __nested_webpack_require_868570__.d(__nested_webpack_exports__, \"EventBase\", function() { return EventBase; });\n/* harmony import */ var _localizablestring__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_868570__(/*! ./localizablestring */ \"./src/localizablestring.ts\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_868570__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_868570__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_868570__(/*! ./settings */ \"./src/settings.ts\");\n/* harmony import */ var _conditions__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_868570__(/*! ./conditions */ \"./src/conditions.ts\");\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_868570__(/*! ./surveyStrings */ \"./src/surveyStrings.ts\");\n/* harmony import */ var _console_warnings__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_868570__(/*! ./console-warnings */ \"./src/console-warnings.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __spreadArray = ( false) || function (to, from) {\n    for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\n        to[j] = from[i];\n    return to;\n};\n\n\n\n\n\n\n\nvar Bindings = /** @class */ (function () {\n    function Bindings(obj) {\n        this.obj = obj;\n        this.properties = null;\n        this.values = null;\n    }\n    Bindings.prototype.getType = function () {\n        return \"bindings\";\n    };\n    Bindings.prototype.getNames = function () {\n        var res = [];\n        this.fillProperties();\n        for (var i = 0; i < this.properties.length; i++) {\n            if (this.properties[i].isVisible(\"\", this.obj)) {\n                res.push(this.properties[i].name);\n            }\n        }\n        return res;\n    };\n    Bindings.prototype.getProperties = function () {\n        var res = [];\n        this.fillProperties();\n        for (var i = 0; i < this.properties.length; i++) {\n            res.push(this.properties[i]);\n        }\n        return res;\n    };\n    Bindings.prototype.setBinding = function (propertyName, valueName) {\n        if (!this.values)\n            this.values = {};\n        var oldValue = this.getJson();\n        if (oldValue === valueName)\n            return;\n        if (!!valueName) {\n            this.values[propertyName] = valueName;\n        }\n        else {\n            delete this.values[propertyName];\n            if (Object.keys(this.values).length == 0) {\n                this.values = null;\n            }\n        }\n        this.onChangedJSON(oldValue);\n    };\n    Bindings.prototype.clearBinding = function (propertyName) {\n        this.setBinding(propertyName, \"\");\n    };\n    Bindings.prototype.isEmpty = function () {\n        if (!this.values)\n            return true;\n        for (var key in this.values)\n            return false;\n        return true;\n    };\n    Bindings.prototype.getValueNameByPropertyName = function (propertyName) {\n        if (!this.values)\n            return undefined;\n        return this.values[propertyName];\n    };\n    Bindings.prototype.getPropertiesByValueName = function (valueName) {\n        if (!this.values)\n            return [];\n        var res = [];\n        for (var key in this.values) {\n            if (this.values[key] == valueName) {\n                res.push(key);\n            }\n        }\n        return res;\n    };\n    Bindings.prototype.getJson = function () {\n        if (this.isEmpty())\n            return undefined;\n        var res = {};\n        for (var key in this.values) {\n            res[key] = this.values[key];\n        }\n        return res;\n    };\n    Bindings.prototype.setJson = function (value) {\n        var oldValue = this.getJson();\n        this.values = null;\n        if (!!value) {\n            this.values = {};\n            for (var key in value) {\n                this.values[key] = value[key];\n            }\n        }\n        this.onChangedJSON(oldValue);\n    };\n    Bindings.prototype.fillProperties = function () {\n        if (this.properties !== null)\n            return;\n        this.properties = [];\n        var objProperties = _jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"Serializer\"].getPropertiesByObj(this.obj);\n        for (var i = 0; i < objProperties.length; i++) {\n            if (objProperties[i].isBindable) {\n                this.properties.push(objProperties[i]);\n            }\n        }\n    };\n    Bindings.prototype.onChangedJSON = function (oldValue) {\n        if (this.obj) {\n            this.obj.onBindingChanged(oldValue, this.getJson());\n        }\n    };\n    return Bindings;\n}());\n\nvar Dependencies = /** @class */ (function () {\n    function Dependencies(currentDependency, target, property) {\n        this.currentDependency = currentDependency;\n        this.target = target;\n        this.property = property;\n        this.dependencies = [];\n        this.id = \"\" + (++Dependencies.DependenciesCount);\n    }\n    Dependencies.prototype.addDependency = function (target, property) {\n        if (this.target === target && this.property === property)\n            return;\n        if (this.dependencies.some(function (dependency) { return dependency.obj === target && dependency.prop === property; }))\n            return;\n        this.dependencies.push({\n            obj: target,\n            prop: property,\n            id: this.id\n        });\n        target.registerPropertyChangedHandlers([property], this.currentDependency, this.id);\n    };\n    Dependencies.prototype.dispose = function () {\n        this.dependencies.forEach(function (dependency) {\n            dependency.obj.unregisterPropertyChangedHandlers([dependency.prop], dependency.id);\n        });\n        // this.currentDependency = undefined;\n    };\n    Dependencies.DependenciesCount = 0;\n    return Dependencies;\n}());\n\nvar ComputedUpdater = /** @class */ (function () {\n    function ComputedUpdater(_updater) {\n        this._updater = _updater;\n        this.dependencies = undefined;\n        this.type = ComputedUpdater.ComputedUpdaterType;\n    }\n    Object.defineProperty(ComputedUpdater.prototype, \"updater\", {\n        get: function () {\n            return this._updater;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    ComputedUpdater.prototype.setDependencies = function (dependencies) {\n        this.clearDependencies();\n        this.dependencies = dependencies;\n    };\n    ComputedUpdater.prototype.getDependencies = function () {\n        return this.dependencies;\n    };\n    ComputedUpdater.prototype.clearDependencies = function () {\n        if (this.dependencies) {\n            this.dependencies.dispose();\n            this.dependencies = undefined;\n        }\n    };\n    ComputedUpdater.prototype.dispose = function () {\n        this.clearDependencies();\n    };\n    ComputedUpdater.ComputedUpdaterType = \"__dependency_computed\";\n    return ComputedUpdater;\n}());\n\n/**\n * A base class for all SurveyJS objects.\n */\nvar Base = /** @class */ (function () {\n    function Base() {\n        this.dependencies = {};\n        this.propertyHash = Base.createPropertiesHash();\n        this.eventList = [];\n        this.isLoadingFromJsonValue = false;\n        this.loadingOwner = null;\n        /**\n         * An event that is raised when a property of this SurveyJS object has changed.\n         *\n         * Parameters:\n         *\n         * - `sender`: `this`\\\n         * A SurveyJS object whose property has changed.\n         * - `options.name`: `String`\\\n         * The name of the changed property.\n         * - `options.newValue`: `any`\\\n         * A new value for the property.\n         * - `options.oldValue`: `any`\\\n         * An old value of the property. If the property is an array, `oldValue` contains the same array as `newValue` does.\n         */\n        this.onPropertyChanged = this.addEvent();\n        /**\n         * An event that is raised when an [`ItemValue`](https://surveyjs.io/form-library/documentation/itemvalue) property is changed.\n         *\n         * Parameters:\n         *\n         * - `sender`: `this`\\\n         * A SurveyJS object whose property contains an array of `ItemValue` objects.\n         * - `options.obj`: [`ItemValue`](https://surveyjs.io/form-library/documentation/itemvalue)\\\n         * An `ItemValue` object.\n         * - `options.propertyName`: `String`\\\n         * The name of the property to which an array of `ItemValue` objects is assigned (for example, `\"choices\"` or `\"rows\"`).\n         * - `options.name`: `\"text\"` | `\"value\"`\\\n         * The name of the changed property.\n         * - `options.newValue`: `any`\\\n         * A new value for the property.\n         */\n        this.onItemValuePropertyChanged = this.addEvent();\n        this.isCreating = true;\n        this.bindingsValue = new Bindings(this);\n        _jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"CustomPropertiesCollection\"].createProperties(this);\n        this.onBaseCreating();\n        this.isCreating = false;\n    }\n    Base.finishCollectDependencies = function () {\n        var deps = Base.currentDependencis;\n        Base.currentDependencis = undefined;\n        return deps;\n    };\n    Base.startCollectDependencies = function (updater, target, property) {\n        if (Base.currentDependencis !== undefined) {\n            throw new Error(\"Attempt to collect nested dependencies. Nested dependencies are not supported.\");\n        }\n        Base.currentDependencis = new Dependencies(updater, target, property);\n    };\n    Base.collectDependency = function (target, property) {\n        if (Base.currentDependencis === undefined)\n            return;\n        Base.currentDependencis.addDependency(target, property);\n    };\n    Object.defineProperty(Base, \"commentSuffix\", {\n        get: function () {\n            return _settings__WEBPACK_IMPORTED_MODULE_3__[\"settings\"].commentSuffix;\n        },\n        set: function (val) {\n            _settings__WEBPACK_IMPORTED_MODULE_3__[\"settings\"].commentSuffix = val;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Base, \"commentPrefix\", {\n        get: function () {\n            return Base.commentSuffix;\n        },\n        set: function (val) {\n            Base.commentSuffix = val;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    /**\n     * Returns `true` if a passed `value` is an empty string, array, or object or if it equals to `undefined` or `null`.\n     *\n     * @param value A value to be checked.\n     * @param trimString (Optional) When this parameter is `true`, the method ignores whitespace characters at the beginning and end of a string value. Pass `false` to disable this functionality.\n     */\n    Base.prototype.isValueEmpty = function (value, trimString) {\n        if (trimString === void 0) { trimString = true; }\n        if (trimString) {\n            value = this.trimValue(value);\n        }\n        return _helpers__WEBPACK_IMPORTED_MODULE_1__[\"Helpers\"].isValueEmpty(value);\n    };\n    Base.prototype.trimValue = function (value) {\n        if (!!value && (typeof value === \"string\" || value instanceof String))\n            return value.trim();\n        return value;\n    };\n    Base.prototype.isPropertyEmpty = function (value) {\n        return value !== \"\" && this.isValueEmpty(value);\n    };\n    Base.createPropertiesHash = function () {\n        return {};\n    };\n    Base.prototype.dispose = function () {\n        var _this = this;\n        for (var i = 0; i < this.eventList.length; i++) {\n            this.eventList[i].clear();\n        }\n        this.onPropertyValueChangedCallback = undefined;\n        this.isDisposedValue = true;\n        Object.keys(this.dependencies).forEach(function (key) { return _this.dependencies[key].dispose(); });\n    };\n    Object.defineProperty(Base.prototype, \"isDisposed\", {\n        get: function () {\n            return this.isDisposedValue === true;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Base.prototype.addEvent = function () {\n        var res = new EventBase();\n        this.eventList.push(res);\n        return res;\n    };\n    Base.prototype.onBaseCreating = function () { };\n    /**\n     * Returns the object type as it is used in the JSON schema.\n     */\n    Base.prototype.getType = function () {\n        return \"base\";\n    };\n    /**\n     * Use this method to find out if the current object is of a given `typeName` or inherited from it.\n     *\n     * @param typeName One of the values listed in the [getType()](https://surveyjs.io/form-library/documentation/question#getType) description.\n     * @returns `true` if the current object is of a given `typeName` or inherited from it.\n     * @see getType\n     */\n    Base.prototype.isDescendantOf = function (typeName) {\n        return _jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"Serializer\"].isDescendantOf(this.getType(), typeName);\n    };\n    Base.prototype.getSurvey = function (isLive) {\n        if (isLive === void 0) { isLive = false; }\n        return null;\n    };\n    Object.defineProperty(Base.prototype, \"isDesignMode\", {\n        /**\n         * Returns `true` if the survey is being designed in Survey Creator.\n         */\n        get: function () {\n            var survey = this.getSurvey();\n            return !!survey && survey.isDesignMode;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Base.prototype, \"inSurvey\", {\n        /**\n         * Returns `true` if the object is included in a survey.\n         *\n         * This property may return `false`, for example, when you [create a survey model dynamically](https://surveyjs.io/form-library/documentation/design-survey-create-a-simple-survey#create-or-change-a-survey-model-dynamically).\n         */\n        get: function () {\n            return !!this.getSurvey(true);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Base.prototype, \"bindings\", {\n        get: function () {\n            return this.bindingsValue;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Base.prototype.checkBindings = function (valueName, value) { };\n    Base.prototype.updateBindings = function (propertyName, value) {\n        var valueName = this.bindings.getValueNameByPropertyName(propertyName);\n        if (!!valueName) {\n            this.updateBindingValue(valueName, value);\n        }\n    };\n    Base.prototype.updateBindingValue = function (valueName, value) { };\n    Base.prototype.getTemplate = function () {\n        return this.getType();\n    };\n    Object.defineProperty(Base.prototype, \"isLoadingFromJson\", {\n        /**\n         * Returns `true` if the object configuration is being loaded from JSON.\n         */\n        get: function () {\n            return this.isLoadingFromJsonValue || this.getIsLoadingFromJson();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Base.prototype.getIsLoadingFromJson = function () {\n        if (!!this.loadingOwner && this.loadingOwner.isLoadingFromJson)\n            return true;\n        return this.isLoadingFromJsonValue;\n    };\n    Base.prototype.startLoadingFromJson = function (json) {\n        this.isLoadingFromJsonValue = true;\n        this.jsonObj = json;\n    };\n    Base.prototype.endLoadingFromJson = function () {\n        this.isLoadingFromJsonValue = false;\n    };\n    /**\n     * Returns a JSON object that corresponds to the current SurveyJS object.\n     * @see fromJSON\n     */\n    Base.prototype.toJSON = function () {\n        return new _jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"JsonObject\"]().toJsonObject(this);\n    };\n    /**\n     * Assigns a new configuration to the current SurveyJS object. This configuration is taken from a passed JSON object.\n     *\n     * The JSON object should contain only serializable properties of this SurveyJS object. Event handlers and properties that do not belong to the SurveyJS object are ignored.\n     *\n     * @param json A JSON object with properties that you want to apply to the current SurveyJS object.\n     * @see toJSON\n     */\n    Base.prototype.fromJSON = function (json) {\n        new _jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"JsonObject\"]().toObject(json, this);\n        this.onSurveyLoad();\n    };\n    Base.prototype.onSurveyLoad = function () { };\n    /**\n     * Creates a new object that has the same type and properties as the current SurveyJS object.\n     */\n    Base.prototype.clone = function () {\n        var clonedObj = _jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"Serializer\"].createClass(this.getType());\n        clonedObj.fromJSON(this.toJSON());\n        return clonedObj;\n    };\n    /**\n     * Returns a `JsonObjectProperty` object with metadata about a serializable property that belongs to the current SurveyJS object.\n     *\n     * If the property is not found, this method returns `null`.\n     * @param propName A property name.\n     */\n    Base.prototype.getPropertyByName = function (propName) {\n        var type = this.getType();\n        if (!this.classMetaData || this.classMetaData.name !== type) {\n            this.classMetaData = _jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"Serializer\"].findClass(type);\n        }\n        return !!this.classMetaData ? this.classMetaData.findProperty(propName) : null;\n    };\n    Base.prototype.isPropertyVisible = function (propName) {\n        var prop = this.getPropertyByName(propName);\n        return !!prop ? prop.isVisible(\"\", this) : false;\n    };\n    Base.createProgressInfo = function () {\n        return {\n            questionCount: 0,\n            answeredQuestionCount: 0,\n            requiredQuestionCount: 0,\n            requiredAnsweredQuestionCount: 0,\n        };\n    };\n    Base.prototype.getProgressInfo = function () {\n        return Base.createProgressInfo();\n    };\n    Base.prototype.localeChanged = function () { };\n    Base.prototype.locStrsChanged = function () {\n        if (!!this.arraysInfo) {\n            for (var key in this.arraysInfo) {\n                var item = this.arraysInfo[key];\n                if (item && item.isItemValues) {\n                    var arr = this.getPropertyValue(key);\n                    if (arr && !!Base.itemValueLocStrChanged)\n                        Base.itemValueLocStrChanged(arr);\n                }\n            }\n        }\n        if (!!this.localizableStrings) {\n            for (var key in this.localizableStrings) {\n                var item = this.getLocalizableString(key);\n                if (item)\n                    item.strChanged();\n            }\n        }\n    };\n    /**\n     * Returns the value of a property with a specified name.\n     *\n     * If the property is not found or does not have a value, this method returns either `undefined`, `defaultValue` specified in the property configuration, or a value passed as the `defaultValue` parameter.\n     *\n     * @param name A property name.\n     * @param defaultValue (Optional) A value to return if the property is not found or does not have a value.\n     */\n    Base.prototype.getPropertyValue = function (name, defaultValue) {\n        if (defaultValue === void 0) { defaultValue = null; }\n        var res = this.getPropertyValueWithoutDefault(name);\n        if (this.isPropertyEmpty(res)) {\n            var locStr = this.localizableStrings ? this.localizableStrings[name] : undefined;\n            if (locStr)\n                return locStr.text;\n            if (defaultValue !== null && defaultValue !== undefined)\n                return defaultValue;\n            var propDefaultValue = this.getDefaultPropertyValue(name);\n            if (propDefaultValue !== undefined)\n                return propDefaultValue;\n        }\n        return res;\n    };\n    Base.prototype.getDefaultPropertyValue = function (name) {\n        var prop = this.getPropertyByName(name);\n        if (!prop || prop.isCustom && this.isCreating)\n            return undefined;\n        var dValue = prop.defaultValue;\n        if (!this.isPropertyEmpty(dValue) && !Array.isArray(dValue))\n            return dValue;\n        var locStr = this.localizableStrings ? this.localizableStrings[name] : undefined;\n        if (locStr && locStr.localizationName)\n            return this.getLocalizationString(locStr.localizationName);\n        if (prop.type == \"boolean\" || prop.type == \"switch\")\n            return false;\n        if (prop.isCustom && !!prop.onGetValue)\n            return prop.onGetValue(this);\n        return undefined;\n    };\n    Base.prototype.hasDefaultPropertyValue = function (name) {\n        return this.getDefaultPropertyValue(name) !== undefined;\n    };\n    Base.prototype.resetPropertyValue = function (name) {\n        var locStr = this.localizableStrings ? this.localizableStrings[name] : undefined;\n        if (locStr) {\n            locStr.clearLocale();\n        }\n        else {\n            this.setPropertyValue(name, undefined);\n        }\n    };\n    Base.prototype.getPropertyValueWithoutDefault = function (name) {\n        return this.getPropertyValueCore(this.propertyHash, name);\n    };\n    Base.prototype.getPropertyValueCore = function (propertiesHash, name) {\n        if (!this.isLoadingFromJson) {\n            Base.collectDependency(this, name);\n        }\n        if (this.getPropertyValueCoreHandler)\n            return this.getPropertyValueCoreHandler(propertiesHash, name);\n        else\n            return propertiesHash[name];\n    };\n    Base.prototype.geValueFromHash = function () {\n        return this.propertyHash[\"value\"];\n    };\n    Base.prototype.setPropertyValueCore = function (propertiesHash, name, val) {\n        if (this.setPropertyValueCoreHandler) {\n            if (!this.isDisposedValue) {\n                this.setPropertyValueCoreHandler(propertiesHash, name, val);\n            }\n            else {\n                _console_warnings__WEBPACK_IMPORTED_MODULE_6__[\"ConsoleWarnings\"].disposedObjectChangedProperty(name, this.getType());\n            }\n        }\n        else\n            propertiesHash[name] = val;\n    };\n    Object.defineProperty(Base.prototype, \"isEditingSurveyElement\", {\n        get: function () {\n            var survey = this.getSurvey();\n            return !!survey && survey.isEditingSurveyElement;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Base.prototype.iteratePropertiesHash = function (func) {\n        var _this = this;\n        var keys = [];\n        for (var key in this.propertyHash) {\n            if (key === \"value\" &&\n                this.isEditingSurveyElement &&\n                Array.isArray(this.value))\n                continue;\n            keys.push(key);\n        }\n        keys.forEach(function (key) { return func(_this.propertyHash, key); });\n    };\n    /**\n     * Assigns a new value to a specified property.\n     * @param name A property name.\n     * @param val A new value for the property.\n     */\n    Base.prototype.setPropertyValue = function (name, val) {\n        if (!this.isLoadingFromJson) {\n            var prop = this.getPropertyByName(name);\n            if (!!prop) {\n                val = prop.settingValue(this, val);\n            }\n        }\n        var oldValue = this.getPropertyValue(name);\n        if (oldValue &&\n            Array.isArray(oldValue) &&\n            !!this.arraysInfo &&\n            (!val || Array.isArray(val))) {\n            if (this.isTwoValueEquals(oldValue, val))\n                return;\n            this.setArrayPropertyDirectly(name, val);\n        }\n        else {\n            this.setPropertyValueDirectly(name, val);\n            if (!this.isDisposedValue && !this.isTwoValueEquals(oldValue, val)) {\n                this.propertyValueChanged(name, oldValue, val);\n            }\n        }\n    };\n    Base.prototype.setArrayPropertyDirectly = function (name, val, sendNotification) {\n        if (sendNotification === void 0) { sendNotification = true; }\n        var arrayInfo = this.arraysInfo[name];\n        this.setArray(name, this.getPropertyValue(name), val, arrayInfo ? arrayInfo.isItemValues : false, arrayInfo ? sendNotification && arrayInfo.onPush : null);\n    };\n    Base.prototype.setPropertyValueDirectly = function (name, val) {\n        this.setPropertyValueCore(this.propertyHash, name, val);\n    };\n    Base.prototype.clearPropertyValue = function (name) {\n        this.setPropertyValueCore(this.propertyHash, name, null);\n        delete this.propertyHash[name];\n    };\n    Base.prototype.onPropertyValueChangedCallback = function (name, oldValue, newValue, sender, arrayChanges) { };\n    Base.prototype.itemValuePropertyChanged = function (item, name, oldValue, newValue) {\n        this.onItemValuePropertyChanged.fire(this, {\n            obj: item,\n            name: name,\n            oldValue: oldValue,\n            newValue: newValue,\n            propertyName: item.ownerPropertyName,\n        });\n    };\n    Base.prototype.onPropertyValueChanged = function (name, oldValue, newValue) { };\n    Base.prototype.propertyValueChanged = function (name, oldValue, newValue, arrayChanges, target) {\n        if (this.isLoadingFromJson)\n            return;\n        this.updateBindings(name, newValue);\n        this.onPropertyValueChanged(name, oldValue, newValue);\n        this.onPropertyChanged.fire(this, {\n            name: name,\n            oldValue: oldValue,\n            newValue: newValue,\n        });\n        this.doPropertyValueChangedCallback(name, oldValue, newValue, arrayChanges, this);\n        this.checkConditionPropertyChanged(name);\n        if (!this.onPropChangeFunctions)\n            return;\n        for (var i = 0; i < this.onPropChangeFunctions.length; i++) {\n            if (this.onPropChangeFunctions[i].name == name)\n                this.onPropChangeFunctions[i].func(newValue);\n        }\n    };\n    Base.prototype.onBindingChanged = function (oldValue, newValue) {\n        if (this.isLoadingFromJson)\n            return;\n        this.doPropertyValueChangedCallback(\"bindings\", oldValue, newValue);\n    };\n    Object.defineProperty(Base.prototype, \"isInternal\", {\n        get: function () {\n            return false;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Base.prototype.doPropertyValueChangedCallback = function (name, oldValue, newValue, arrayChanges, target) {\n        if (this.isInternal)\n            return;\n        if (!target)\n            target = this;\n        var notifier = this.getSurvey();\n        if (!notifier)\n            notifier = this;\n        if (!!notifier.onPropertyValueChangedCallback) {\n            notifier.onPropertyValueChangedCallback(name, oldValue, newValue, target, arrayChanges);\n        }\n        if (notifier !== this && !!this.onPropertyValueChangedCallback) {\n            this.onPropertyValueChangedCallback(name, oldValue, newValue, target, arrayChanges);\n        }\n    };\n    Base.prototype.addExpressionProperty = function (name, onExecute, canRun) {\n        if (!this.expressionInfo) {\n            this.expressionInfo = {};\n        }\n        this.expressionInfo[name] = { onExecute: onExecute, canRun: canRun };\n    };\n    Base.prototype.getDataFilteredValues = function () {\n        return {};\n    };\n    Base.prototype.getDataFilteredProperties = function () {\n        return {};\n    };\n    Base.prototype.runConditionCore = function (values, properties) {\n        if (!this.expressionInfo)\n            return;\n        for (var key in this.expressionInfo) {\n            this.runConditionItemCore(key, values, properties);\n        }\n    };\n    Base.prototype.canRunConditions = function () {\n        return !this.isDesignMode;\n    };\n    Base.prototype.checkConditionPropertyChanged = function (propName) {\n        if (!this.expressionInfo || !this.expressionInfo[propName])\n            return;\n        if (!this.canRunConditions())\n            return;\n        this.runConditionItemCore(propName, this.getDataFilteredValues(), this.getDataFilteredProperties());\n    };\n    Base.prototype.runConditionItemCore = function (propName, values, properties) {\n        var _this = this;\n        var info = this.expressionInfo[propName];\n        var expression = this.getPropertyValue(propName);\n        if (!expression)\n            return;\n        if (!!info.canRun && !info.canRun(this))\n            return;\n        if (!info.runner) {\n            info.runner = this.createExpressionRunner(expression);\n            info.runner.onRunComplete = function (res) {\n                info.onExecute(_this, res);\n            };\n        }\n        info.runner.expression = expression;\n        info.runner.run(values, properties);\n    };\n    Base.prototype.doBeforeAsynRun = function (id) {\n        if (!this.asynExpressionHash)\n            this.asynExpressionHash = [];\n        var isChanged = !this.isAsyncExpressionRunning;\n        this.asynExpressionHash[id] = true;\n        if (isChanged) {\n            this.onAsyncRunningChanged();\n        }\n    };\n    Base.prototype.doAfterAsynRun = function (id) {\n        if (!!this.asynExpressionHash) {\n            delete this.asynExpressionHash[id];\n            if (!this.isAsyncExpressionRunning) {\n                this.onAsyncRunningChanged();\n            }\n        }\n    };\n    Base.prototype.onAsyncRunningChanged = function () { };\n    Object.defineProperty(Base.prototype, \"isAsyncExpressionRunning\", {\n        get: function () {\n            return !!this.asynExpressionHash && Object.keys(this.asynExpressionHash).length > 0;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Base.prototype.createExpressionRunner = function (expression) {\n        var _this = this;\n        var res = new _conditions__WEBPACK_IMPORTED_MODULE_4__[\"ExpressionRunner\"](expression);\n        res.onBeforeAsyncRun = function (id) { _this.doBeforeAsynRun(id); };\n        res.onAfterAsyncRun = function (id) { _this.doAfterAsynRun(id); };\n        return res;\n    };\n    /**\n     * Registers a function to call when a property value changes.\n     * @param propertyNames An array of one or multiple property names.\n     * @param handler A function to call when one of the listed properties change.\n     * @param key (Optional) A key that identifies the current registration. If a function for one of the properties is already registered with the same key, the function will be overwritten. You can also use the key to subsequently unregister handlers.\n     * @see unregisterPropertyChangedHandlers\n     */\n    Base.prototype.registerPropertyChangedHandlers = function (propertyNames, handler, key) {\n        if (key === void 0) { key = null; }\n        for (var i = 0; i < propertyNames.length; i++) {\n            this.registerFunctionOnPropertyValueChanged(propertyNames[i], handler, key);\n        }\n    };\n    /**\n     * Unregisters value change event handlers for the specified properties.\n     * @param propertyNames An array of one or multiple property names.\n     * @param key (Optional) A key of the registration that you want to cancel.\n     * @see registerPropertyChangedHandlers\n     */\n    Base.prototype.unregisterPropertyChangedHandlers = function (propertyNames, key) {\n        if (key === void 0) { key = null; }\n        for (var i = 0; i < propertyNames.length; i++) {\n            this.unRegisterFunctionOnPropertyValueChanged(propertyNames[i], key);\n        }\n    };\n    Base.prototype.registerFunctionOnPropertyValueChanged = function (name, func, key) {\n        if (key === void 0) { key = null; }\n        if (!this.onPropChangeFunctions) {\n            this.onPropChangeFunctions = [];\n        }\n        if (key) {\n            for (var i = 0; i < this.onPropChangeFunctions.length; i++) {\n                var item = this.onPropChangeFunctions[i];\n                if (item.name == name && item.key == key) {\n                    item.func = func;\n                    return;\n                }\n            }\n        }\n        this.onPropChangeFunctions.push({ name: name, func: func, key: key });\n    };\n    Base.prototype.registerFunctionOnPropertiesValueChanged = function (names, func, key) {\n        if (key === void 0) { key = null; }\n        this.registerPropertyChangedHandlers(names, func, key);\n    };\n    Base.prototype.unRegisterFunctionOnPropertyValueChanged = function (name, key) {\n        if (key === void 0) { key = null; }\n        if (!this.onPropChangeFunctions)\n            return;\n        for (var i = 0; i < this.onPropChangeFunctions.length; i++) {\n            var item = this.onPropChangeFunctions[i];\n            if (item.name == name && item.key == key) {\n                this.onPropChangeFunctions.splice(i, 1);\n                return;\n            }\n        }\n    };\n    Base.prototype.unRegisterFunctionOnPropertiesValueChanged = function (names, key) {\n        if (key === void 0) { key = null; }\n        this.unregisterPropertyChangedHandlers(names, key);\n    };\n    Base.prototype.createCustomLocalizableObj = function (name) {\n        var locStr = this.getLocalizableString(name);\n        if (locStr)\n            return;\n        this.createLocalizableString(name, this, false, true);\n    };\n    Base.prototype.getLocale = function () {\n        var locOwner = this.getSurvey();\n        return !!locOwner ? locOwner.getLocale() : \"\";\n    };\n    Base.prototype.getLocalizationString = function (strName) {\n        return _surveyStrings__WEBPACK_IMPORTED_MODULE_5__[\"surveyLocalization\"].getString(strName, this.getLocale());\n    };\n    Base.prototype.getLocalizationFormatString = function (strName) {\n        var args = [];\n        for (var _i = 1; _i < arguments.length; _i++) {\n            args[_i - 1] = arguments[_i];\n        }\n        var str = this.getLocalizationString(strName);\n        if (!str || !str.format)\n            return \"\";\n        return str.format.apply(str, args);\n    };\n    Base.prototype.createLocalizableString = function (name, owner, useMarkDown, defaultStr) {\n        var _this = this;\n        if (useMarkDown === void 0) { useMarkDown = false; }\n        if (defaultStr === void 0) { defaultStr = false; }\n        var locStr = new _localizablestring__WEBPACK_IMPORTED_MODULE_0__[\"LocalizableString\"](owner, useMarkDown, name);\n        if (defaultStr) {\n            locStr.localizationName = defaultStr === true ? name : defaultStr;\n        }\n        locStr.onStrChanged = function (oldValue, newValue) {\n            _this.propertyValueChanged(name, oldValue, newValue);\n        };\n        if (!this.localizableStrings) {\n            this.localizableStrings = {};\n        }\n        this.localizableStrings[name] = locStr;\n        var prop = this.getPropertyByName(name);\n        locStr.disableLocalization = prop && prop.isLocalizable === false;\n        return locStr;\n    };\n    Base.prototype.getLocalizableString = function (name) {\n        return !!this.localizableStrings ? this.localizableStrings[name] : null;\n    };\n    Base.prototype.getLocalizableStringText = function (name, defaultStr) {\n        if (defaultStr === void 0) { defaultStr = \"\"; }\n        Base.collectDependency(this, name);\n        var locStr = this.getLocalizableString(name);\n        if (!locStr)\n            return \"\";\n        var res = locStr.text;\n        return res ? res : defaultStr;\n    };\n    Base.prototype.setLocalizableStringText = function (name, value) {\n        var locStr = this.getLocalizableString(name);\n        if (!locStr)\n            return;\n        var oldValue = locStr.text;\n        if (oldValue != value) {\n            locStr.text = value;\n            // this.propertyValueChanged(name, oldValue, value);\n        }\n    };\n    Base.prototype.addUsedLocales = function (locales) {\n        if (!!this.localizableStrings) {\n            for (var key in this.localizableStrings) {\n                var item = this.getLocalizableString(key);\n                if (item)\n                    this.AddLocStringToUsedLocales(item, locales);\n            }\n        }\n        if (!!this.arraysInfo) {\n            for (var key in this.arraysInfo) {\n                var items = this.getPropertyValue(key);\n                if (!items || !items.length)\n                    continue;\n                for (var i = 0; i < items.length; i++) {\n                    var item = items[i];\n                    if (item && item.addUsedLocales) {\n                        item.addUsedLocales(locales);\n                    }\n                }\n            }\n        }\n    };\n    Base.prototype.searchText = function (text, founded) {\n        var strs = [];\n        this.getSearchableLocalizedStrings(strs);\n        for (var i = 0; i < strs.length; i++) {\n            if (strs[i].setFindText(text)) {\n                founded.push({ element: this, str: strs[i] });\n            }\n        }\n    };\n    Base.prototype.getSearchableLocalizedStrings = function (arr) {\n        if (!!this.localizableStrings) {\n            var keys_1 = [];\n            this.getSearchableLocKeys(keys_1);\n            for (var i = 0; i < keys_1.length; i++) {\n                var item = this.getLocalizableString(keys_1[i]);\n                if (item)\n                    arr.push(item);\n            }\n        }\n        if (!this.arraysInfo)\n            return;\n        var keys = [];\n        this.getSearchableItemValueKeys(keys);\n        for (var i = 0; i < keys.length; i++) {\n            var items = this.getPropertyValue(keys[i]);\n            if (!items)\n                continue;\n            for (var j = 0; j < items.length; j++) {\n                arr.push(items[j].locText);\n            }\n        }\n    };\n    Base.prototype.getSearchableLocKeys = function (keys) { };\n    Base.prototype.getSearchableItemValueKeys = function (keys) { };\n    Base.prototype.AddLocStringToUsedLocales = function (locStr, locales) {\n        var locs = locStr.getLocales();\n        for (var i = 0; i < locs.length; i++) {\n            if (locales.indexOf(locs[i]) < 0) {\n                locales.push(locs[i]);\n            }\n        }\n    };\n    Base.prototype.createItemValues = function (name) {\n        var self = this;\n        var result = this.createNewArray(name, function (item) {\n            item.locOwner = self;\n            item.ownerPropertyName = name;\n            if (typeof item.getSurvey == \"function\") {\n                var survey = item.getSurvey();\n                if (!!survey && typeof survey.makeReactive == \"function\") {\n                    survey.makeReactive(item);\n                }\n            }\n        });\n        this.arraysInfo[name].isItemValues = true;\n        return result;\n    };\n    Base.prototype.notifyArrayChanged = function (ar, arrayChanges) {\n        !!ar.onArrayChanged && ar.onArrayChanged(arrayChanges);\n    };\n    Base.prototype.createNewArrayCore = function (name) {\n        var res = null;\n        if (!!this.createArrayCoreHandler) {\n            res = this.createArrayCoreHandler(this.propertyHash, name);\n        }\n        if (!res) {\n            res = new Array();\n            this.setPropertyValueCore(this.propertyHash, name, res);\n        }\n        return res;\n    };\n    Base.prototype.ensureArray = function (name, onPush, onRemove) {\n        if (onPush === void 0) { onPush = null; }\n        if (onRemove === void 0) { onRemove = null; }\n        if (this.arraysInfo && this.arraysInfo[name]) {\n            return;\n        }\n        return this.createNewArray(name, onPush, onRemove);\n    };\n    Base.prototype.createNewArray = function (name, onPush, onRemove) {\n        if (onPush === void 0) { onPush = null; }\n        if (onRemove === void 0) { onRemove = null; }\n        var newArray = this.createNewArrayCore(name);\n        if (!this.arraysInfo) {\n            this.arraysInfo = {};\n        }\n        this.arraysInfo[name] = { onPush: onPush, isItemValues: false };\n        var self = this;\n        newArray.push = function (value) {\n            var result = Object.getPrototypeOf(newArray).push.call(newArray, value);\n            if (!self.isDisposedValue) {\n                if (onPush)\n                    onPush(value, newArray.length - 1);\n                var arrayChanges = new ArrayChanges(newArray.length - 1, 0, [value], []);\n                self.propertyValueChanged(name, newArray, newArray, arrayChanges);\n                self.notifyArrayChanged(newArray, arrayChanges);\n            }\n            return result;\n        };\n        newArray.shift = function () {\n            var result = Object.getPrototypeOf(newArray).shift.call(newArray);\n            if (!self.isDisposedValue && result) {\n                if (onRemove)\n                    onRemove(result);\n                var arrayChanges = new ArrayChanges(newArray.length - 1, 1, [], []);\n                self.propertyValueChanged(name, newArray, newArray, arrayChanges);\n                self.notifyArrayChanged(newArray, arrayChanges);\n            }\n            return result;\n        };\n        newArray.unshift = function (value) {\n            var result = Object.getPrototypeOf(newArray).unshift.call(newArray, value);\n            if (!self.isDisposedValue) {\n                if (onPush)\n                    onPush(value, newArray.length - 1);\n                var arrayChanges = new ArrayChanges(0, 0, [value], []);\n                self.propertyValueChanged(name, newArray, newArray, arrayChanges);\n                self.notifyArrayChanged(newArray, arrayChanges);\n            }\n            return result;\n        };\n        newArray.pop = function () {\n            var result = Object.getPrototypeOf(newArray).pop.call(newArray);\n            if (!self.isDisposedValue) {\n                if (onRemove)\n                    onRemove(result);\n                var arrayChanges = new ArrayChanges(newArray.length - 1, 1, [], []);\n                self.propertyValueChanged(name, newArray, newArray, arrayChanges);\n                self.notifyArrayChanged(newArray, arrayChanges);\n            }\n            return result;\n        };\n        newArray.splice = function (start, deleteCount) {\n            var _a;\n            var items = [];\n            for (var _i = 2; _i < arguments.length; _i++) {\n                items[_i - 2] = arguments[_i];\n            }\n            if (!start)\n                start = 0;\n            if (!deleteCount)\n                deleteCount = 0;\n            var result = (_a = Object.getPrototypeOf(newArray).splice).call.apply(_a, __spreadArray([newArray,\n                start,\n                deleteCount], items));\n            if (!items)\n                items = [];\n            if (!self.isDisposedValue) {\n                if (onRemove && result) {\n                    for (var i = 0; i < result.length; i++) {\n                        onRemove(result[i]);\n                    }\n                }\n                if (onPush) {\n                    for (var i = 0; i < items.length; i++) {\n                        onPush(items[i], start + i);\n                    }\n                }\n                var arrayChanges = new ArrayChanges(start, deleteCount, items, result);\n                self.propertyValueChanged(name, newArray, newArray, arrayChanges);\n                self.notifyArrayChanged(newArray, arrayChanges);\n            }\n            return result;\n        };\n        return newArray;\n    };\n    Base.prototype.getItemValueType = function () {\n        return undefined;\n    };\n    Base.prototype.setArray = function (name, src, dest, isItemValues, onPush) {\n        var deletedItems = [].concat(src);\n        Object.getPrototypeOf(src).splice.call(src, 0, src.length);\n        if (!!dest) {\n            for (var i = 0; i < dest.length; i++) {\n                var item = dest[i];\n                if (isItemValues) {\n                    if (!!Base.createItemValue) {\n                        item = Base.createItemValue(item, this.getItemValueType());\n                    }\n                }\n                Object.getPrototypeOf(src).push.call(src, item);\n                if (onPush)\n                    onPush(src[i]);\n            }\n        }\n        var arrayChanges = new ArrayChanges(0, deletedItems.length, src, deletedItems);\n        this.propertyValueChanged(name, deletedItems, src, arrayChanges);\n        this.notifyArrayChanged(src, arrayChanges);\n    };\n    Base.prototype.isTwoValueEquals = function (x, y, caseInSensitive, trimString) {\n        if (caseInSensitive === void 0) { caseInSensitive = false; }\n        if (trimString === void 0) { trimString = false; }\n        return _helpers__WEBPACK_IMPORTED_MODULE_1__[\"Helpers\"].isTwoValueEquals(x, y, false, !caseInSensitive, trimString);\n    };\n    Base.copyObject = function (dst, src) {\n        for (var key in src) {\n            var source = src[key];\n            if (typeof source === \"object\") {\n                source = {};\n                this.copyObject(source, src[key]);\n            }\n            dst[key] = source;\n        }\n    };\n    Base.prototype.copyCssClasses = function (dest, source) {\n        if (!source)\n            return;\n        if (typeof source === \"string\" || source instanceof String) {\n            dest[\"root\"] = source;\n        }\n        else {\n            Base.copyObject(dest, source);\n        }\n    };\n    Base.prototype.getValueInLowCase = function (val) {\n        if (!!val && typeof val == \"string\")\n            return val.toLowerCase();\n        return val;\n    };\n    Base.prototype.getElementsInDesign = function (includeHidden) {\n        if (includeHidden === void 0) { includeHidden = false; }\n        return [];\n    };\n    Base.currentDependencis = undefined;\n    return Base;\n}());\n\nvar ArrayChanges = /** @class */ (function () {\n    function ArrayChanges(index, deleteCount, itemsToAdd, deletedItems) {\n        this.index = index;\n        this.deleteCount = deleteCount;\n        this.itemsToAdd = itemsToAdd;\n        this.deletedItems = deletedItems;\n    }\n    return ArrayChanges;\n}());\n\nvar Event = /** @class */ (function () {\n    function Event() {\n    }\n    Object.defineProperty(Event.prototype, \"isEmpty\", {\n        get: function () {\n            return this.length === 0;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Event.prototype, \"length\", {\n        get: function () {\n            return !!this.callbacks ? this.callbacks.length : 0;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Event.prototype.fireByCreatingOptions = function (sender, createOptions) {\n        if (!this.callbacks)\n            return;\n        for (var i = 0; i < this.callbacks.length; i++) {\n            this.callbacks[i](sender, createOptions());\n            if (!this.callbacks)\n                return;\n        }\n    };\n    Event.prototype.fire = function (sender, options) {\n        if (!this.callbacks)\n            return;\n        for (var i = 0; i < this.callbacks.length; i++) {\n            this.callbacks[i](sender, options);\n            if (!this.callbacks)\n                return;\n        }\n    };\n    Event.prototype.clear = function () {\n        this.callbacks = undefined;\n    };\n    Event.prototype.add = function (func) {\n        if (this.hasFunc(func))\n            return;\n        if (!this.callbacks) {\n            this.callbacks = new Array();\n        }\n        this.callbacks.push(func);\n        this.fireCallbackChanged();\n    };\n    Event.prototype.remove = function (func) {\n        if (this.hasFunc(func)) {\n            var index = this.callbacks.indexOf(func, 0);\n            this.callbacks.splice(index, 1);\n            this.fireCallbackChanged();\n        }\n    };\n    Event.prototype.hasFunc = function (func) {\n        if (this.callbacks == null)\n            return false;\n        return this.callbacks.indexOf(func, 0) > -1;\n    };\n    Event.prototype.fireCallbackChanged = function () {\n        if (!!this.onCallbacksChanged) {\n            this.onCallbacksChanged();\n        }\n    };\n    return Event;\n}());\n\nvar EventBase = /** @class */ (function (_super) {\n    __extends(EventBase, _super);\n    function EventBase() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    return EventBase;\n}(Event));\n\n\n\n/***/ }),\n\n/***/ \"./src/calculatedValue.ts\":\n/*!********************************!*\\\n  !*** ./src/calculatedValue.ts ***!\n  \\********************************/\n/*! exports provided: CalculatedValue */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_918210__) {\n\n\"use strict\";\n__nested_webpack_require_918210__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_918210__.d(__nested_webpack_exports__, \"CalculatedValue\", function() { return CalculatedValue; });\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_918210__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_918210__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _conditions__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_918210__(/*! ./conditions */ \"./src/conditions.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_918210__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n\n\n\n\n/**\n * The calculated value is a way to define the variable in Survey Creator.\n * It has two main properties: name and expression. Based on expression the value read-only property is automatically calculated.\n * The name property should be unique though all calculated values.\n * It uses survey.getVariable/seruvey.setVariable functions to get/set its value. The class do not store its value internally.\n * You may set includeIntoResult property to true to store this calculated value into survey result.\n */\nvar CalculatedValue = /** @class */ (function (_super) {\n    __extends(CalculatedValue, _super);\n    function CalculatedValue(name, expression) {\n        if (name === void 0) { name = null; }\n        if (expression === void 0) { expression = null; }\n        var _this = _super.call(this) || this;\n        _this.expressionIsRunning = false;\n        _this.isCalculated = false;\n        if (!!name) {\n            _this.name = name;\n        }\n        if (!!expression) {\n            _this.expression = expression;\n        }\n        return _this;\n    }\n    CalculatedValue.prototype.setOwner = function (data) {\n        this.data = data;\n        this.rerunExpression();\n    };\n    CalculatedValue.prototype.getType = function () {\n        return \"calculatedvalue\";\n    };\n    CalculatedValue.prototype.getSurvey = function (live) {\n        if (live === void 0) { live = false; }\n        return !!this.data && !!this.data[\"getSurvey\"]\n            ? this.data.getSurvey()\n            : null;\n    };\n    Object.defineProperty(CalculatedValue.prototype, \"owner\", {\n        get: function () {\n            return this.data;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(CalculatedValue.prototype, \"name\", {\n        /**\n         * The calculated value name. It should be non empty and unique.\n         */\n        get: function () {\n            return this.getPropertyValue(\"name\") || \"\";\n        },\n        set: function (val) {\n            this.setPropertyValue(\"name\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(CalculatedValue.prototype, \"includeIntoResult\", {\n        /**\n         * Set this property to true to include the non-empty calculated value into survey result, survey.data property.\n         */\n        get: function () {\n            return this.getPropertyValue(\"includeIntoResult\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"includeIntoResult\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(CalculatedValue.prototype, \"expression\", {\n        /**\n         * The Expression that used to calculate the value. You may use standard operators like +, -, * and /, squares (). Here is the example of accessing the question value {questionname}.\n         * Example: \"({quantity} * {price}) * (100 - {discount}) / 100\"\n         */\n        get: function () {\n            return this.getPropertyValue(\"expression\") || \"\";\n        },\n        set: function (val) {\n            this.setPropertyValue(\"expression\", val);\n            this.rerunExpression();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    CalculatedValue.prototype.locCalculation = function () {\n        this.expressionIsRunning = true;\n    };\n    CalculatedValue.prototype.unlocCalculation = function () {\n        this.expressionIsRunning = false;\n    };\n    CalculatedValue.prototype.resetCalculation = function () {\n        this.isCalculated = false;\n    };\n    CalculatedValue.prototype.doCalculation = function (calculatedValues, values, properties) {\n        if (this.isCalculated)\n            return;\n        this.runExpressionCore(calculatedValues, values, properties);\n        this.isCalculated = true;\n    };\n    CalculatedValue.prototype.runExpression = function (values, properties) {\n        this.runExpressionCore(null, values, properties);\n    };\n    Object.defineProperty(CalculatedValue.prototype, \"value\", {\n        get: function () {\n            if (!this.data)\n                return undefined;\n            return this.data.getVariable(this.name);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    CalculatedValue.prototype.setValue = function (val) {\n        if (!this.data)\n            return;\n        this.data.setVariable(this.name, val);\n    };\n    Object.defineProperty(CalculatedValue.prototype, \"canRunExpression\", {\n        get: function () {\n            return (!!this.data &&\n                !this.isLoadingFromJson &&\n                !!this.expression &&\n                !this.expressionIsRunning &&\n                !!this.name);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    CalculatedValue.prototype.rerunExpression = function () {\n        if (!this.canRunExpression)\n            return;\n        this.runExpression(this.data.getFilteredValues(), this.data.getFilteredProperties());\n    };\n    CalculatedValue.prototype.runExpressionCore = function (calculatedValues, values, properties) {\n        if (!this.canRunExpression)\n            return;\n        this.ensureExpression(values);\n        this.locCalculation();\n        if (!!calculatedValues) {\n            this.runDependentExpressions(calculatedValues, values, properties);\n        }\n        this.expressionRunner.run(values, properties);\n    };\n    CalculatedValue.prototype.runDependentExpressions = function (calculatedValues, values, properties) {\n        var variables = this.expressionRunner.getVariables();\n        if (!variables)\n            return;\n        for (var i = 0; i < calculatedValues.length; i++) {\n            var calcItem = calculatedValues[i];\n            if (calcItem === this || variables.indexOf(calcItem.name) < 0)\n                continue;\n            calcItem.doCalculation(calculatedValues, values, properties);\n            values[calcItem.name] = calcItem.value;\n        }\n    };\n    CalculatedValue.prototype.ensureExpression = function (values) {\n        var _this = this;\n        if (!!this.expressionRunner)\n            return;\n        this.expressionRunner = new _conditions__WEBPACK_IMPORTED_MODULE_2__[\"ExpressionRunner\"](this.expression);\n        this.expressionRunner.onRunComplete = function (newValue) {\n            if (!_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isTwoValueEquals(newValue, _this.value, false, true, false)) {\n                _this.setValue(newValue);\n            }\n            _this.unlocCalculation();\n        };\n    };\n    return CalculatedValue;\n}(_base__WEBPACK_IMPORTED_MODULE_1__[\"Base\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_3__[\"Serializer\"].addClass(\"calculatedvalue\", [\n    { name: \"!name\", isUnique: true },\n    \"expression:expression\",\n    \"includeIntoResult:boolean\",\n], function () {\n    return new CalculatedValue();\n}, \"base\");\n\n\n/***/ }),\n\n/***/ \"./src/choicesRestful.ts\":\n/*!*******************************!*\\\n  !*** ./src/choicesRestful.ts ***!\n  \\*******************************/\n/*! exports provided: ChoicesRestful, ChoicesRestfull */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_926821__) {\n\n\"use strict\";\n__nested_webpack_require_926821__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_926821__.d(__nested_webpack_exports__, \"ChoicesRestful\", function() { return ChoicesRestful; });\n/* harmony export (binding) */ __nested_webpack_require_926821__.d(__nested_webpack_exports__, \"ChoicesRestfull\", function() { return ChoicesRestfull; });\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_926821__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _itemvalue__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_926821__(/*! ./itemvalue */ \"./src/itemvalue.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_926821__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _error__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_926821__(/*! ./error */ \"./src/error.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_926821__(/*! ./settings */ \"./src/settings.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n\n\n\n\n\nvar XmlParser = /** @class */ (function () {\n    function XmlParser() {\n        this.parser = new DOMParser();\n    }\n    XmlParser.prototype.assignValue = function (target, name, value) {\n        if (Array.isArray(target[name])) {\n            target[name].push(value);\n        }\n        else if (target[name] !== undefined) {\n            target[name] = [target[name]].concat(value);\n        }\n        else if (typeof value === \"object\" &&\n            Object.keys(value).length === 1 &&\n            Object.keys(value)[0] === name) {\n            target[name] = value[name];\n        }\n        else {\n            target[name] = value;\n        }\n    };\n    XmlParser.prototype.xml2Json = function (xmlNode, result) {\n        if (xmlNode.children && xmlNode.children.length > 0) {\n            for (var i = 0; i < xmlNode.children.length; i++) {\n                var childNode = xmlNode.children[i];\n                var childObject = {};\n                this.xml2Json(childNode, childObject);\n                this.assignValue(result, childNode.nodeName, childObject);\n            }\n        }\n        else {\n            this.assignValue(result, xmlNode.nodeName, xmlNode.textContent);\n        }\n    };\n    XmlParser.prototype.parseXmlString = function (xmlString) {\n        var xmlRoot = this.parser.parseFromString(xmlString, \"text/xml\");\n        var json = {};\n        this.xml2Json(xmlRoot, json);\n        return json;\n    };\n    return XmlParser;\n}());\n/**\n * Configures access to a RESTful service that returns choices for [Checkbox](https://surveyjs.io/Examples/Library?id=questiontype-checkbox), [Dropdown](https://surveyjs.io/Examples/Library?id=questiontype-dropdown), [Radiogroup](https://surveyjs.io/Examples/Library?id=questiontype-radiogroup), and other multiple-choice question types.\n *\n * Use the following properties to configure this object:\n *\n * ```js\n * {\n *   url: \"http://...\", // A RESTful service's URL.\n *   valueName: \"value\", // Specifies which field contains choice values.\n *   titleName: \"title\", // Specifies which field contains display texts for choice values.\n *   imageLinkName: \"imageUrl\", // Specifies which field contains image URLs. Used in Image Picker questions.\n *   // Path to the array of choices. Specify `path` only if the array of choices is nested within the object returned by the service.\n *   // The following path separators are allowed: semicolon `;`, comma `,`.\n *   path: \"myNestedArray\"\n * }\n * ```\n *\n * Typically, you should assign this object to a question's [`choicesByUrl`](https://surveyjs.io/Documentation/Library?id=QuestionSelectBase#choicesByUrl) property.\n */\nvar ChoicesRestful = /** @class */ (function (_super) {\n    __extends(ChoicesRestful, _super);\n    function ChoicesRestful() {\n        var _this = _super.call(this) || this;\n        _this.lastObjHash = \"\";\n        _this.isRunningValue = false;\n        _this.processedUrl = \"\";\n        _this.processedPath = \"\";\n        _this.isUsingCacheFromUrl = undefined;\n        _this.error = null;\n        _this.createItemValue = function (value) {\n            return new _itemvalue__WEBPACK_IMPORTED_MODULE_1__[\"ItemValue\"](value);\n        };\n        return _this;\n    }\n    Object.defineProperty(ChoicesRestful, \"EncodeParameters\", {\n        get: function () {\n            return _settings__WEBPACK_IMPORTED_MODULE_4__[\"settings\"].web.encodeUrlParams;\n        },\n        set: function (val) {\n            _settings__WEBPACK_IMPORTED_MODULE_4__[\"settings\"].web.encodeUrlParams = val;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    ChoicesRestful.clearCache = function () {\n        ChoicesRestful.itemsResult = {};\n        ChoicesRestful.sendingSameRequests = {};\n    };\n    ChoicesRestful.addSameRequest = function (obj) {\n        if (!obj.isUsingCache)\n            return false;\n        var hash = obj.objHash;\n        var res = ChoicesRestful.sendingSameRequests[hash];\n        if (!res) {\n            ChoicesRestful.sendingSameRequests[obj.objHash] = [];\n            return false;\n        }\n        res.push(obj);\n        obj.isRunningValue = true;\n        return true;\n    };\n    ChoicesRestful.unregisterSameRequests = function (obj, items) {\n        if (!obj.isUsingCache)\n            return;\n        var res = ChoicesRestful.sendingSameRequests[obj.objHash];\n        delete ChoicesRestful.sendingSameRequests[obj.objHash];\n        if (!res)\n            return;\n        for (var i = 0; i < res.length; i++) {\n            res[i].isRunningValue = false;\n            if (!!res[i].getResultCallback) {\n                res[i].getResultCallback(items);\n            }\n        }\n    };\n    ChoicesRestful.getCachedItemsResult = function (obj) {\n        var hash = obj.objHash;\n        var res = ChoicesRestful.itemsResult[hash];\n        if (!res)\n            return false;\n        if (obj.getResultCallback) {\n            obj.getResultCallback(res);\n        }\n        return true;\n    };\n    ChoicesRestful.prototype.getSurvey = function (live) {\n        if (live === void 0) { live = false; }\n        return !!this.owner ? this.owner.survey : null;\n    };\n    ChoicesRestful.prototype.run = function (textProcessor) {\n        if (textProcessor === void 0) { textProcessor = null; }\n        if (!this.url || !this.getResultCallback)\n            return;\n        this.processedText(textProcessor);\n        if (!this.processedUrl) {\n            this.doEmptyResultCallback({});\n            this.lastObjHash = this.objHash;\n            return;\n        }\n        if (this.lastObjHash === this.objHash)\n            return;\n        this.lastObjHash = this.objHash;\n        this.error = null;\n        if (this.useChangedItemsResults())\n            return;\n        if (ChoicesRestful.addSameRequest(this))\n            return;\n        this.sendRequest();\n    };\n    Object.defineProperty(ChoicesRestful.prototype, \"isUsingCache\", {\n        get: function () {\n            if (this.isUsingCacheFromUrl === true)\n                return true;\n            if (this.isUsingCacheFromUrl === false)\n                return false;\n            return _settings__WEBPACK_IMPORTED_MODULE_4__[\"settings\"].web.cacheLoadedChoices;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(ChoicesRestful.prototype, \"isRunning\", {\n        get: function () {\n            return this.getIsRunning();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    ChoicesRestful.prototype.getIsRunning = function () {\n        return this.isRunningValue;\n    };\n    Object.defineProperty(ChoicesRestful.prototype, \"isWaitingForParameters\", {\n        get: function () {\n            return this.url && !this.processedUrl;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    ChoicesRestful.prototype.useChangedItemsResults = function () {\n        return ChoicesRestful.getCachedItemsResult(this);\n    };\n    ChoicesRestful.prototype.doEmptyResultCallback = function (serverResult) {\n        var items = [];\n        if (this.updateResultCallback) {\n            items = this.updateResultCallback(items, serverResult);\n        }\n        this.getResultCallback(items);\n    };\n    ChoicesRestful.prototype.processedText = function (textProcessor) {\n        var urlText = this.url;\n        if (!!urlText) {\n            urlText = urlText\n                .replace(ChoicesRestful.cacheText, \"\")\n                .replace(ChoicesRestful.noCacheText, \"\");\n        }\n        if (textProcessor) {\n            var pUrl = textProcessor.processTextEx(urlText, false, _settings__WEBPACK_IMPORTED_MODULE_4__[\"settings\"].web.encodeUrlParams);\n            var pPath = textProcessor.processTextEx(this.path, false, _settings__WEBPACK_IMPORTED_MODULE_4__[\"settings\"].web.encodeUrlParams);\n            if (!pUrl.hasAllValuesOnLastRun || !pPath.hasAllValuesOnLastRun) {\n                this.processedUrl = \"\";\n                this.processedPath = \"\";\n            }\n            else {\n                this.processedUrl = pUrl.text;\n                this.processedPath = pPath.text;\n            }\n        }\n        else {\n            this.processedUrl = urlText;\n            this.processedPath = this.path;\n        }\n        if (this.onProcessedUrlCallback) {\n            this.onProcessedUrlCallback(this.processedUrl, this.processedPath);\n        }\n    };\n    ChoicesRestful.prototype.parseResponse = function (response) {\n        var parsedResponse;\n        if (!!response &&\n            typeof response.indexOf === \"function\" &&\n            response.indexOf(\"<\") === 0) {\n            var parser = new XmlParser();\n            parsedResponse = parser.parseXmlString(response);\n        }\n        else {\n            try {\n                parsedResponse = JSON.parse(response);\n            }\n            catch (_a) {\n                parsedResponse = (response || \"\")\n                    .split(\"\\n\")\n                    .map(function (s) { return s.trim(\" \"); })\n                    .filter(function (s) { return !!s; });\n            }\n        }\n        return parsedResponse;\n    };\n    ChoicesRestful.prototype.sendRequest = function () {\n        var xhr = new XMLHttpRequest();\n        xhr.open(\"GET\", this.processedUrl);\n        xhr.setRequestHeader(\"Content-Type\", \"application/x-www-form-urlencoded\");\n        var self = this;\n        var loadingObjHash = this.objHash;\n        xhr.onload = function () {\n            self.beforeLoadRequest();\n            if (xhr.status === 200) {\n                self.onLoad(self.parseResponse(xhr.response), loadingObjHash);\n            }\n            else {\n                self.onError(xhr.statusText, xhr.responseText);\n            }\n        };\n        var options = { request: xhr };\n        if (!!ChoicesRestful.onBeforeSendRequest) {\n            ChoicesRestful.onBeforeSendRequest(this, options);\n        }\n        this.beforeSendRequest();\n        options.request.send();\n    };\n    ChoicesRestful.prototype.getType = function () {\n        return \"choicesByUrl\";\n    };\n    Object.defineProperty(ChoicesRestful.prototype, \"isEmpty\", {\n        get: function () {\n            return !this.url && !this.path;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    ChoicesRestful.prototype.getCustomPropertiesNames = function () {\n        var properties = this.getCustomProperties();\n        var res = new Array();\n        for (var i = 0; i < properties.length; i++) {\n            res.push(this.getCustomPropertyName(properties[i].name));\n        }\n        return res;\n    };\n    ChoicesRestful.prototype.getCustomPropertyName = function (propertyName) {\n        return propertyName + \"Name\";\n    };\n    ChoicesRestful.prototype.getCustomProperties = function () {\n        var properties = _jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"Serializer\"].getProperties(this.itemValueType);\n        var res = [];\n        for (var i = 0; i < properties.length; i++) {\n            if (properties[i].name === \"value\" ||\n                properties[i].name === \"text\" ||\n                properties[i].name === \"visibleIf\" ||\n                properties[i].name === \"enableIf\")\n                continue;\n            res.push(properties[i]);\n        }\n        return res;\n    };\n    ChoicesRestful.prototype.setData = function (json) {\n        this.clear();\n        if (json.url)\n            this.url = json.url;\n        if (json.path)\n            this.path = json.path;\n        if (json.valueName)\n            this.valueName = json.valueName;\n        if (json.titleName)\n            this.titleName = json.titleName;\n        if (json.imageLinkName)\n            this.imageLinkName = json.imageLinkName;\n        if (json.allowEmptyResponse !== undefined)\n            this.allowEmptyResponse = json.allowEmptyResponse;\n        if (json.attachOriginalItems !== undefined)\n            this.attachOriginalItems = json.attachOriginalItems;\n        var properties = this.getCustomPropertiesNames();\n        for (var i = 0; i < properties.length; i++) {\n            if (json[properties[i]])\n                this[properties[i]] = json[properties[i]];\n        }\n    };\n    ChoicesRestful.prototype.getData = function () {\n        if (this.isEmpty)\n            return null;\n        var res = {};\n        if (this.url)\n            res[\"url\"] = this.url;\n        if (this.path)\n            res[\"path\"] = this.path;\n        if (this.valueName)\n            res[\"valueName\"] = this.valueName;\n        if (this.titleName)\n            res[\"titleName\"] = this.titleName;\n        if (this.imageLinkName)\n            res[\"imageLinkName\"] = this.imageLinkName;\n        if (this.allowEmptyResponse)\n            res[\"allowEmptyResponse\"] = this.allowEmptyResponse;\n        if (this.attachOriginalItems)\n            res[\"attachOriginalItems\"] = this.attachOriginalItems;\n        var properties = this.getCustomPropertiesNames();\n        for (var i = 0; i < properties.length; i++) {\n            if (this[properties[i]])\n                res[properties[i]] = this[properties[i]];\n        }\n        return res;\n    };\n    Object.defineProperty(ChoicesRestful.prototype, \"url\", {\n        /**\n         * A RESTful service's URL.\n         *\n         * This property supports [dynamic URLs](https://surveyjs.io/Documentation/Library?id=design-survey-conditional-logic#dynamic-texts). For example, the URL below depends on the `region` question's value. When the value changes, the survey automatically loads a new dataset that corresponds to the selected region.\n         *\n         * ```js\n         * url: \"https://surveyjs.io/api/CountriesExample?region={region}\"\n         * ```\n         *\n         * [View Demo](https://surveyjs.io/Examples/Library/?id=questiontype-dropdownrestfull (linkStyle))\n         * @see path\n         * @see valueName\n         * @see titleName\n         */\n        get: function () {\n            return this.getPropertyValue(\"url\", \"\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"url\", val);\n            this.isUsingCacheFromUrl = undefined;\n            if (!val)\n                return;\n            if (val.indexOf(ChoicesRestful.cacheText) > -1) {\n                this.isUsingCacheFromUrl = true;\n            }\n            else {\n                if (val.indexOf(ChoicesRestful.noCacheText) > -1) {\n                    this.isUsingCacheFromUrl = false;\n                }\n            }\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(ChoicesRestful.prototype, \"path\", {\n        /**\n         * Path to the array of choices. The following path separators are allowed: semicolon `;`, comma `,`.\n         *\n         * Specify this property only if the array of choices is nested within the object returned by the service. For example, the service returns the following object:\n         *\n         * ```js\n         * {\n         *   countries: [ ... ],\n         *   capitals: [ ... ]\n         * }\n         * ```\n         *\n         * To populate choices with values from the `countries` array, set the `path` property to `\"countries\"`. To use the `capitals` array, set this property to `\"capitals\"`.\n         * @see url\n         * @see valueName\n         * @see titleName\n         */\n        get: function () {\n            var res = this.getPropertyValue(\"path\");\n            return !!res ? res : \"\";\n        },\n        set: function (val) {\n            this.setPropertyValue(\"path\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(ChoicesRestful.prototype, \"valueName\", {\n        /**\n         * Specifies which property in the obtained data object contains choice values.\n         *\n         * [View Demo](https://surveyjs.io/Examples/Library/?id=questiontype-dropdownrestfull (linkStyle))\n         *\n         * @see url\n         * @see path\n         * @see titleName\n         */\n        get: function () {\n            return this.getPropertyValue(\"valueName\", \"\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"valueName\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(ChoicesRestful.prototype, \"titleName\", {\n        /**\n         * Specifies which property in the obtained data object contains display texts for choices.\n         *\n         * @see url\n         * @see path\n         * @see valueName\n         */\n        get: function () {\n            return this.getPropertyValue(\"titleName\", \"\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"titleName\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(ChoicesRestful.prototype, \"imageLinkName\", {\n        /**\n         * Specifies which property in the obtained data object contains image URLs. Used only in [Image Picker](https://surveyjs.io/Examples/Library?id=questiontype-imagepicker) questions.\n         *\n         * @see url\n         * @see path\n         * @see valueName\n         */\n        get: function () {\n            return this.getPropertyValue(\"imageLinkName\", \"\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"imageLinkName\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(ChoicesRestful.prototype, \"allowEmptyResponse\", {\n        get: function () {\n            return this.getPropertyValue(\"allowEmptyResponse\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"allowEmptyResponse\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(ChoicesRestful.prototype, \"attachOriginalItems\", {\n        get: function () {\n            return this.getPropertyValue(\"attachOriginalItems\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"attachOriginalItems\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(ChoicesRestful.prototype, \"itemValueType\", {\n        get: function () {\n            if (!this.owner)\n                return \"itemvalue\";\n            var prop = _jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"Serializer\"].findProperty(this.owner.getType(), \"choices\");\n            if (!prop)\n                return \"itemvalue\";\n            if (prop.type == \"itemvalue[]\")\n                return \"itemvalue\";\n            return prop.type;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    ChoicesRestful.prototype.clear = function () {\n        this.url = \"\";\n        this.path = \"\";\n        this.valueName = \"\";\n        this.titleName = \"\";\n        this.imageLinkName = \"\";\n        var properties = this.getCustomPropertiesNames();\n        for (var i = 0; i < properties.length; i++) {\n            if (this[properties[i]])\n                this[properties[i]] = \"\";\n        }\n    };\n    ChoicesRestful.prototype.beforeSendRequest = function () {\n        this.isRunningValue = true;\n        if (!!this.beforeSendRequestCallback) {\n            this.beforeSendRequestCallback();\n        }\n    };\n    ChoicesRestful.prototype.beforeLoadRequest = function () {\n        this.isRunningValue = false;\n    };\n    ChoicesRestful.prototype.onLoad = function (result, loadingObjHash) {\n        if (loadingObjHash === void 0) { loadingObjHash = null; }\n        if (!loadingObjHash) {\n            loadingObjHash = this.objHash;\n        }\n        var items = new Array();\n        var updatedResult = this.getResultAfterPath(result);\n        if (updatedResult && updatedResult[\"length\"]) {\n            for (var i = 0; i < updatedResult.length; i++) {\n                var itemValue = updatedResult[i];\n                if (!itemValue)\n                    continue;\n                var value = !!this.getItemValueCallback\n                    ? this.getItemValueCallback(itemValue)\n                    : this.getValue(itemValue);\n                var item = this.createItemValue(value);\n                this.setTitle(item, itemValue);\n                this.setCustomProperties(item, itemValue);\n                if (this.attachOriginalItems) {\n                    item.originalItem = itemValue;\n                }\n                var imageLink = this.getImageLink(itemValue);\n                if (!!imageLink) {\n                    item.imageLink = imageLink;\n                }\n                items.push(item);\n            }\n        }\n        else {\n            if (!this.allowEmptyResponse) {\n                this.error = new _error__WEBPACK_IMPORTED_MODULE_3__[\"WebRequestEmptyError\"](null, this.owner);\n            }\n        }\n        if (this.updateResultCallback) {\n            items = this.updateResultCallback(items, result);\n        }\n        if (this.isUsingCache) {\n            ChoicesRestful.itemsResult[loadingObjHash] = items;\n        }\n        this.callResultCallback(items, loadingObjHash);\n        ChoicesRestful.unregisterSameRequests(this, items);\n    };\n    ChoicesRestful.prototype.callResultCallback = function (items, loadingObjHash) {\n        if (loadingObjHash != this.objHash)\n            return;\n        this.getResultCallback(items);\n    };\n    ChoicesRestful.prototype.setCustomProperties = function (item, itemValue) {\n        var properties = this.getCustomProperties();\n        for (var i = 0; i < properties.length; i++) {\n            var prop = properties[i];\n            var val = this.getValueCore(itemValue, this.getPropertyBinding(prop.name));\n            if (!this.isValueEmpty(val)) {\n                item[prop.name] = val;\n            }\n        }\n    };\n    ChoicesRestful.prototype.getPropertyBinding = function (propertyName) {\n        if (this[this.getCustomPropertyName(propertyName)])\n            return this[this.getCustomPropertyName(propertyName)];\n        if (this[propertyName])\n            return this[propertyName];\n        return propertyName;\n    };\n    ChoicesRestful.prototype.onError = function (status, response) {\n        this.error = new _error__WEBPACK_IMPORTED_MODULE_3__[\"WebRequestError\"](status, response, this.owner);\n        this.doEmptyResultCallback(response);\n        ChoicesRestful.unregisterSameRequests(this, []);\n    };\n    ChoicesRestful.prototype.getResultAfterPath = function (result) {\n        if (!result)\n            return result;\n        if (!this.processedPath)\n            return result;\n        var pathes = this.getPathes();\n        for (var i = 0; i < pathes.length; i++) {\n            result = result[pathes[i]];\n            if (!result)\n                return null;\n        }\n        return result;\n    };\n    ChoicesRestful.prototype.getPathes = function () {\n        var pathes = [];\n        if (this.processedPath.indexOf(\";\") > -1) {\n            pathes = this.path.split(\";\");\n        }\n        else {\n            pathes = this.processedPath.split(\",\");\n        }\n        if (pathes.length == 0)\n            pathes.push(this.processedPath);\n        return pathes;\n    };\n    ChoicesRestful.prototype.getValue = function (item) {\n        if (!item)\n            return null;\n        if (this.valueName)\n            return this.getValueCore(item, this.valueName);\n        if (!(item instanceof Object))\n            return item;\n        var len = Object.keys(item).length;\n        if (len < 1)\n            return null;\n        return item[Object.keys(item)[0]];\n    };\n    ChoicesRestful.prototype.setTitle = function (item, itemValue) {\n        var title = this.titleName ? this.titleName : \"title\";\n        var val = this.getValueCore(itemValue, title);\n        if (!val)\n            return;\n        if (typeof val === \"string\") {\n            item.text = val;\n        }\n        else {\n            item.locText.setJson(val);\n        }\n    };\n    ChoicesRestful.prototype.getImageLink = function (item) {\n        var imageLink = this.imageLinkName ? this.imageLinkName : \"imageLink\";\n        return this.getValueCore(item, imageLink);\n    };\n    ChoicesRestful.prototype.getValueCore = function (item, property) {\n        if (!item)\n            return null;\n        if (property.indexOf(\".\") < 0)\n            return item[property];\n        var properties = property.split(\".\");\n        for (var i = 0; i < properties.length; i++) {\n            item = item[properties[i]];\n            if (!item)\n                return null;\n        }\n        return item;\n    };\n    Object.defineProperty(ChoicesRestful.prototype, \"objHash\", {\n        get: function () {\n            return (this.processedUrl +\n                \";\" +\n                this.processedPath +\n                \";\" +\n                this.valueName +\n                \";\" +\n                this.titleName +\n                \";\" +\n                this.imageLinkName);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    ChoicesRestful.cacheText = \"{CACHE}\";\n    ChoicesRestful.noCacheText = \"{NOCACHE}\";\n    ChoicesRestful.itemsResult = {};\n    ChoicesRestful.sendingSameRequests = {};\n    return ChoicesRestful;\n}(_base__WEBPACK_IMPORTED_MODULE_0__[\"Base\"]));\n\n/**\n * Obsolete, please use ChoicesRestful\n */\nvar ChoicesRestfull = /** @class */ (function (_super) {\n    __extends(ChoicesRestfull, _super);\n    function ChoicesRestfull() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Object.defineProperty(ChoicesRestfull, \"EncodeParameters\", {\n        get: function () {\n            return ChoicesRestful.EncodeParameters;\n        },\n        set: function (val) {\n            ChoicesRestful.EncodeParameters = val;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    ChoicesRestfull.clearCache = function () {\n        ChoicesRestful.clearCache();\n    };\n    Object.defineProperty(ChoicesRestfull, \"onBeforeSendRequest\", {\n        get: function () {\n            return ChoicesRestful.onBeforeSendRequest;\n        },\n        set: function (val) {\n            ChoicesRestful.onBeforeSendRequest = val;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    return ChoicesRestfull;\n}(ChoicesRestful));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"Serializer\"].addClass(\"choicesByUrl\", [\n    \"url\",\n    \"path\",\n    \"valueName\",\n    \"titleName\",\n    {\n        name: \"imageLinkName\",\n        visibleIf: function (obj) {\n            return !!obj && !!obj.owner && obj.owner.getType() == \"imagepicker\";\n        },\n    },\n    { name: \"allowEmptyResponse:boolean\" },\n    { name: \"attachOriginalItems:boolean\", visible: false },\n], function () {\n    return new ChoicesRestful();\n});\n\n\n/***/ }),\n\n/***/ \"./src/conditionProcessValue.ts\":\n/*!**************************************!*\\\n  !*** ./src/conditionProcessValue.ts ***!\n  \\**************************************/\n/*! exports provided: ProcessValue */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_955271__) {\n\n\"use strict\";\n__nested_webpack_require_955271__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_955271__.d(__nested_webpack_exports__, \"ProcessValue\", function() { return ProcessValue; });\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_955271__(/*! ./helpers */ \"./src/helpers.ts\");\n\nvar surveyBuiltInVarible = \"@survey\";\nvar ProcessValue = /** @class */ (function () {\n    function ProcessValue() {\n        this.values = null;\n        this.properties = null;\n    }\n    ProcessValue.prototype.getFirstName = function (text, obj) {\n        if (obj === void 0) { obj = null; }\n        if (!text)\n            return text;\n        var res = \"\";\n        if (!!obj) {\n            res = this.getFirstPropertyName(text, obj);\n            if (!!res)\n                return res;\n        }\n        for (var i = 0; i < text.length; i++) {\n            var ch = text[i];\n            if (ch == \".\" || ch == \"[\")\n                break;\n            res += ch;\n        }\n        return res;\n    };\n    ProcessValue.prototype.hasValue = function (text, values) {\n        if (values === void 0) { values = null; }\n        if (!values)\n            values = this.values;\n        var res = this.getValueCore(text, values);\n        return res.hasValue;\n    };\n    ProcessValue.prototype.getValue = function (text, values) {\n        if (values === void 0) { values = null; }\n        if (!values)\n            values = this.values;\n        var res = this.getValueCore(text, values);\n        return res.value;\n    };\n    ProcessValue.prototype.setValue = function (obj, text, value) {\n        if (!text)\n            return;\n        var nonNestedObj = this.getNonNestedObject(obj, text, true);\n        if (!nonNestedObj)\n            return;\n        obj = nonNestedObj.value;\n        text = nonNestedObj.text;\n        if (!!obj && !!text) {\n            obj[text] = value;\n        }\n    };\n    ProcessValue.prototype.getValueInfo = function (valueInfo) {\n        if (!!valueInfo.path) {\n            valueInfo.value = this.getValueFromPath(valueInfo.path, this.values);\n            valueInfo.hasValue =\n                valueInfo.value !== null && !_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(valueInfo.value);\n            if (!valueInfo.hasValue &&\n                valueInfo.path.length > 1 &&\n                valueInfo.path[valueInfo.path.length - 1] == \"length\") {\n                valueInfo.hasValue = true;\n                valueInfo.value = 0;\n            }\n            return;\n        }\n        var res = this.getValueCore(valueInfo.name, this.values);\n        valueInfo.value = res.value;\n        valueInfo.hasValue = res.hasValue;\n        valueInfo.path = res.hasValue ? res.path : null;\n        valueInfo.sctrictCompare = res.sctrictCompare;\n    };\n    ProcessValue.prototype.isAnyKeyChanged = function (keys, usedNames) {\n        for (var i = 0; i < usedNames.length; i++) {\n            var name = usedNames[i];\n            if (keys.hasOwnProperty(name))\n                return true;\n            var firstName = this.getFirstName(name);\n            if (!keys.hasOwnProperty(firstName))\n                continue;\n            if (name === firstName)\n                return true;\n            var keyValue = keys[firstName];\n            if (keyValue == undefined)\n                continue;\n            if (!keyValue.hasOwnProperty(\"oldValue\") ||\n                !keyValue.hasOwnProperty(\"newValue\"))\n                return true;\n            var v = {};\n            v[firstName] = keyValue[\"oldValue\"];\n            var oldValue = this.getValue(name, v);\n            v[firstName] = keyValue[\"newValue\"];\n            var newValue = this.getValue(name, v);\n            if (!_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isTwoValueEquals(oldValue, newValue, false, false, false))\n                return true;\n        }\n        return false;\n    };\n    ProcessValue.prototype.getValueFromPath = function (path, values) {\n        if (path.length === 2 && path[0] === surveyBuiltInVarible) {\n            return this.getValueFromSurvey(path[1]);\n        }\n        var index = 0;\n        while (!!values && index < path.length) {\n            var ind_name = path[index];\n            if (_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isNumber(ind_name) &&\n                Array.isArray(values) &&\n                ind_name >= values.length)\n                return null;\n            values = values[ind_name];\n            index++;\n        }\n        return values;\n    };\n    ProcessValue.prototype.getValueCore = function (text, values) {\n        var question = this.getQuestionDirectly(text);\n        if (question) {\n            return { hasValue: true, value: question.value, path: [text], sctrictCompare: question.requireStrictCompare };\n        }\n        var res = this.getValueFromValues(text, values);\n        if (!!text && !res.hasValue) {\n            var val = this.getValueFromSurvey(text);\n            if (val !== undefined) {\n                res.hasValue = true;\n                res.value = val;\n                res.path = [surveyBuiltInVarible, text];\n            }\n        }\n        return res;\n    };\n    ProcessValue.prototype.getQuestionDirectly = function (name) {\n        if (!!this.properties && !!this.properties.survey)\n            return this.properties.survey.getQuestionByValueName(name);\n        return undefined;\n    };\n    ProcessValue.prototype.getValueFromSurvey = function (name) {\n        if (!!this.properties && !!this.properties.survey)\n            return this.properties.survey.getBuiltInVariableValue(name.toLocaleLowerCase());\n        return undefined;\n    };\n    ProcessValue.prototype.getValueFromValues = function (text, values) {\n        var res = { hasValue: false, value: null, path: null };\n        var curValue = values;\n        if (!curValue && curValue !== 0 && curValue !== false)\n            return res;\n        if (text &&\n            text.lastIndexOf(\".length\") > -1 &&\n            text.lastIndexOf(\".length\") === text.length - \".length\".length) {\n            res.value = 0;\n            res.hasValue = true;\n        }\n        var nonNestedObj = this.getNonNestedObject(curValue, text, false);\n        if (!nonNestedObj)\n            return res;\n        res.path = nonNestedObj.path;\n        res.value = !!nonNestedObj.text\n            ? this.getObjectValue(nonNestedObj.value, nonNestedObj.text)\n            : nonNestedObj.value;\n        res.hasValue = !_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(res.value);\n        return res;\n    };\n    ProcessValue.prototype.getNonNestedObject = function (obj, text, createPath) {\n        var curName = this.getFirstPropertyName(text, obj, createPath);\n        var path = !!curName ? [curName] : null;\n        while (text != curName && !!obj) {\n            var isArray = text[0] == \"[\";\n            if (!isArray) {\n                if (!curName && text == this.getFirstName(text))\n                    return { value: obj, text: text, path: path };\n                obj = this.getObjectValue(obj, curName);\n                if (_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(obj) && !createPath)\n                    return null;\n                text = text.substring(curName.length);\n            }\n            else {\n                var objInArray = this.getObjInArray(obj, text);\n                if (!objInArray)\n                    return null;\n                obj = objInArray.value;\n                text = objInArray.text;\n                path.push(objInArray.index);\n            }\n            if (!!text && text[0] == \".\") {\n                text = text.substring(1);\n            }\n            curName = this.getFirstPropertyName(text, obj, createPath);\n            if (!!curName) {\n                path.push(curName);\n            }\n        }\n        return { value: obj, text: text, path: path };\n    };\n    ProcessValue.prototype.getObjInArray = function (curValue, text) {\n        if (!Array.isArray(curValue))\n            return null;\n        var index = 1;\n        var str = \"\";\n        while (index < text.length && text[index] != \"]\") {\n            str += text[index];\n            index++;\n        }\n        text = index < text.length ? text.substring(index + 1) : \"\";\n        index = this.getIntValue(str);\n        if (index < 0 || index >= curValue.length)\n            return null;\n        return { value: curValue[index], text: text, index: index };\n    };\n    ProcessValue.prototype.getFirstPropertyName = function (name, obj, createProp) {\n        if (createProp === void 0) { createProp = false; }\n        if (!name)\n            return name;\n        if (!obj)\n            obj = {};\n        if (obj.hasOwnProperty(name))\n            return name;\n        var nameInLow = name.toLowerCase();\n        var A = nameInLow[0];\n        var a = A.toUpperCase();\n        for (var key in obj) {\n            var first = key[0];\n            if (first === a || first === A) {\n                var keyName = key.toLowerCase();\n                if (keyName == nameInLow)\n                    return key;\n                if (nameInLow.length <= keyName.length)\n                    continue;\n                var ch = nameInLow[keyName.length];\n                if (ch != \".\" && ch != \"[\")\n                    continue;\n                if (keyName == nameInLow.substring(0, keyName.length))\n                    return key;\n            }\n        }\n        if (createProp && name[0] !== \"[\") {\n            var ind = name.indexOf(\".\");\n            if (ind > -1) {\n                name = name.substring(0, ind);\n                obj[name] = {};\n            }\n            return name;\n        }\n        return \"\";\n    };\n    ProcessValue.prototype.getObjectValue = function (obj, name) {\n        if (!name)\n            return null;\n        return obj[name];\n    };\n    ProcessValue.prototype.getIntValue = function (str) {\n        if (str == \"0\" || ((str | 0) > 0 && str % 1 == 0))\n            return Number(str);\n        return -1;\n    };\n    return ProcessValue;\n}());\n\n\n\n/***/ }),\n\n/***/ \"./src/conditions.ts\":\n/*!***************************!*\\\n  !*** ./src/conditions.ts ***!\n  \\***************************/\n/*! exports provided: ExpressionExecutor, ExpressionRunnerBase, ConditionRunner, ExpressionRunner */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_965566__) {\n\n\"use strict\";\n__nested_webpack_require_965566__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_965566__.d(__nested_webpack_exports__, \"ExpressionExecutor\", function() { return ExpressionExecutor; });\n/* harmony export (binding) */ __nested_webpack_require_965566__.d(__nested_webpack_exports__, \"ExpressionRunnerBase\", function() { return ExpressionRunnerBase; });\n/* harmony export (binding) */ __nested_webpack_require_965566__.d(__nested_webpack_exports__, \"ConditionRunner\", function() { return ConditionRunner; });\n/* harmony export (binding) */ __nested_webpack_require_965566__.d(__nested_webpack_exports__, \"ExpressionRunner\", function() { return ExpressionRunner; });\n/* harmony import */ var _conditionProcessValue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_965566__(/*! ./conditionProcessValue */ \"./src/conditionProcessValue.ts\");\n/* harmony import */ var _conditionsParser__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_965566__(/*! ./conditionsParser */ \"./src/conditionsParser.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n\n\nvar ExpressionExecutor = /** @class */ (function () {\n    function ExpressionExecutor(expression) {\n        this.processValue = new _conditionProcessValue__WEBPACK_IMPORTED_MODULE_0__[\"ProcessValue\"]();\n        this.parser = new _conditionsParser__WEBPACK_IMPORTED_MODULE_1__[\"ConditionsParser\"]();\n        this.isAsyncValue = false;\n        this.hasFunctionValue = false;\n        this.setExpression(expression);\n    }\n    Object.defineProperty(ExpressionExecutor.prototype, \"expression\", {\n        get: function () {\n            return this.expressionValue;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    ExpressionExecutor.prototype.setExpression = function (value) {\n        if (this.expression === value)\n            return;\n        this.expressionValue = value;\n        this.operand = this.parser.parseExpression(value);\n        this.hasFunctionValue = this.canRun() ? this.operand.hasFunction() : false;\n        this.isAsyncValue = this.hasFunction()\n            ? this.operand.hasAsyncFunction()\n            : false;\n    };\n    ExpressionExecutor.prototype.getVariables = function () {\n        if (!this.operand)\n            return [];\n        var variables = [];\n        this.operand.setVariables(variables);\n        return variables;\n    };\n    ExpressionExecutor.prototype.hasFunction = function () {\n        return this.hasFunctionValue;\n    };\n    Object.defineProperty(ExpressionExecutor.prototype, \"isAsync\", {\n        get: function () {\n            return this.isAsyncValue;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    ExpressionExecutor.prototype.canRun = function () {\n        return !!this.operand;\n    };\n    ExpressionExecutor.prototype.run = function (values, properties) {\n        var _this = this;\n        if (properties === void 0) { properties = null; }\n        if (!this.operand)\n            return null;\n        this.processValue.values = values;\n        this.processValue.properties = properties;\n        if (!this.isAsync)\n            return this.runValues();\n        this.asyncFuncList = [];\n        this.operand.addToAsyncList(this.asyncFuncList);\n        for (var i = 0; i < this.asyncFuncList.length; i++) {\n            this.asyncFuncList[i].onAsyncReady = function () {\n                _this.doAsyncFunctionReady();\n            };\n        }\n        for (var i = 0; i < this.asyncFuncList.length; i++) {\n            this.asyncFuncList[i].evaluateAsync(this.processValue);\n        }\n        return false;\n    };\n    ExpressionExecutor.prototype.doAsyncFunctionReady = function () {\n        for (var i = 0; i < this.asyncFuncList.length; i++) {\n            if (!this.asyncFuncList[i].isReady)\n                return;\n        }\n        this.runValues();\n    };\n    ExpressionExecutor.prototype.runValues = function () {\n        var res = this.operand.evaluate(this.processValue);\n        if (!!this.onComplete) {\n            this.onComplete(res);\n        }\n        return res;\n    };\n    ExpressionExecutor.createExpressionExecutor = function (expression) { return new ExpressionExecutor(expression); };\n    return ExpressionExecutor;\n}());\n\nvar ExpressionRunnerBase = /** @class */ (function () {\n    function ExpressionRunnerBase(expression) {\n        this._id = ExpressionRunnerBase.IdCounter++;\n        this.expression = expression;\n    }\n    Object.defineProperty(ExpressionRunnerBase.prototype, \"id\", {\n        get: function () { return this._id; },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(ExpressionRunnerBase.prototype, \"expression\", {\n        get: function () {\n            return !!this.expressionExecutor ? this.expressionExecutor.expression : \"\";\n        },\n        set: function (value) {\n            var _this = this;\n            if (!!this.expressionExecutor && value === this.expression)\n                return;\n            this.expressionExecutor = ExpressionExecutor.createExpressionExecutor(value);\n            this.expressionExecutor.onComplete = function (res) { _this.doOnComplete(res); };\n            this.variables = undefined;\n            this.containsFunc = undefined;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    ExpressionRunnerBase.prototype.getVariables = function () {\n        if (this.variables === undefined) {\n            this.variables = this.expressionExecutor.getVariables();\n        }\n        return this.variables;\n    };\n    ExpressionRunnerBase.prototype.hasFunction = function () {\n        if (this.containsFunc === undefined) {\n            this.containsFunc = this.expressionExecutor.hasFunction();\n        }\n        return this.containsFunc;\n    };\n    Object.defineProperty(ExpressionRunnerBase.prototype, \"isAsync\", {\n        get: function () {\n            return this.expressionExecutor.isAsync;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    ExpressionRunnerBase.prototype.canRun = function () {\n        return this.expressionExecutor.canRun();\n    };\n    ExpressionRunnerBase.prototype.runCore = function (values, properties) {\n        if (properties === void 0) { properties = null; }\n        if (this.onBeforeAsyncRun && this.isAsync) {\n            this.onBeforeAsyncRun(this.id);\n        }\n        return this.expressionExecutor.run(values, properties);\n    };\n    ExpressionRunnerBase.prototype.doOnComplete = function (res) {\n        if (this.onAfterAsyncRun && this.isAsync) {\n            this.onAfterAsyncRun(this.id);\n        }\n    };\n    ExpressionRunnerBase.IdCounter = 1;\n    return ExpressionRunnerBase;\n}());\n\nvar ConditionRunner = /** @class */ (function (_super) {\n    __extends(ConditionRunner, _super);\n    function ConditionRunner() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    ConditionRunner.prototype.run = function (values, properties) {\n        if (properties === void 0) { properties = null; }\n        return this.runCore(values, properties) == true;\n    };\n    ConditionRunner.prototype.doOnComplete = function (res) {\n        if (!!this.onRunComplete)\n            this.onRunComplete(res == true);\n        _super.prototype.doOnComplete.call(this, res);\n    };\n    return ConditionRunner;\n}(ExpressionRunnerBase));\n\nvar ExpressionRunner = /** @class */ (function (_super) {\n    __extends(ExpressionRunner, _super);\n    function ExpressionRunner() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    ExpressionRunner.prototype.run = function (values, properties) {\n        if (properties === void 0) { properties = null; }\n        return this.runCore(values, properties);\n    };\n    ExpressionRunner.prototype.doOnComplete = function (res) {\n        if (!!this.onRunComplete)\n            this.onRunComplete(res);\n        _super.prototype.doOnComplete.call(this, res);\n    };\n    return ExpressionRunner;\n}(ExpressionRunnerBase));\n\n\n\n/***/ }),\n\n/***/ \"./src/conditionsParser.ts\":\n/*!*********************************!*\\\n  !*** ./src/conditionsParser.ts ***!\n  \\*********************************/\n/*! exports provided: ConditionsParserError, ConditionsParser */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_974445__) {\n\n\"use strict\";\n__nested_webpack_require_974445__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_974445__.d(__nested_webpack_exports__, \"ConditionsParserError\", function() { return ConditionsParserError; });\n/* harmony export (binding) */ __nested_webpack_require_974445__.d(__nested_webpack_exports__, \"ConditionsParser\", function() { return ConditionsParser; });\n/* harmony import */ var _expressions_expressionParser__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_974445__(/*! ./expressions/expressionParser */ \"./src/expressions/expressionParser.ts\");\n\nvar ConditionsParserError = /** @class */ (function () {\n    function ConditionsParserError(at, code) {\n        this.at = at;\n        this.code = code;\n    }\n    return ConditionsParserError;\n}());\n\nvar ConditionsParser = /** @class */ (function () {\n    function ConditionsParser() {\n    }\n    ConditionsParser.prototype.patchExpression = function (text) {\n        return text\n            .replace(/=>/g, \">=\")\n            .replace(/=</g, \"<=\")\n            .replace(/<>/g, \"!=\")\n            .replace(/equals/g, \"equal \")\n            .replace(/notequals/g, \"notequal \");\n    };\n    ConditionsParser.prototype.createCondition = function (text) {\n        return this.parseExpression(text);\n    };\n    ConditionsParser.prototype.parseExpression = function (text) {\n        try {\n            var result = ConditionsParser.parserCache[text];\n            if (result === undefined) {\n                result = Object(_expressions_expressionParser__WEBPACK_IMPORTED_MODULE_0__[\"parse\"])(this.patchExpression(text));\n                if (!result.hasAsyncFunction()) {\n                    ConditionsParser.parserCache[text] = result;\n                }\n            }\n            return result;\n        }\n        catch (e) {\n            if (e instanceof _expressions_expressionParser__WEBPACK_IMPORTED_MODULE_0__[\"SyntaxError\"]) {\n                this.conditionError = new ConditionsParserError(e.location.start.offset, e.message);\n            }\n        }\n    };\n    Object.defineProperty(ConditionsParser.prototype, \"error\", {\n        get: function () {\n            return this.conditionError;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    ConditionsParser.parserCache = {};\n    return ConditionsParser;\n}());\n\n\n\n/***/ }),\n\n/***/ \"./src/console-warnings.ts\":\n/*!*********************************!*\\\n  !*** ./src/console-warnings.ts ***!\n  \\*********************************/\n/*! exports provided: ConsoleWarnings */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_976975__) {\n\n\"use strict\";\n__nested_webpack_require_976975__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_976975__.d(__nested_webpack_exports__, \"ConsoleWarnings\", function() { return ConsoleWarnings; });\nvar ConsoleWarnings = /** @class */ (function () {\n    function ConsoleWarnings() {\n    }\n    ConsoleWarnings.disposedObjectChangedProperty = function (propName, objType) {\n        ConsoleWarnings.warn(\"An attempt to set a property \\\"\" + propName + \"\\\" of a disposed object \\\"\" + objType + \"\\\"\");\n    };\n    ConsoleWarnings.inCorrectQuestionValue = function (questionName, val) {\n        var valStr = JSON.stringify(val, null, 3);\n        ConsoleWarnings.warn(\"An attempt to assign an incorrect value\" + valStr + \" to the following question: \\\"\" + questionName + \"\\\"\");\n    };\n    ConsoleWarnings.warn = function (text) {\n        // eslint-disable-next-line no-console\n        console.warn(text);\n    };\n    return ConsoleWarnings;\n}());\n\n\n\n/***/ }),\n\n/***/ \"./src/cover.ts\":\n/*!**********************!*\\\n  !*** ./src/cover.ts ***!\n  \\**********************/\n/*! exports provided: CoverCell, Cover */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_978137__) {\n\n\"use strict\";\n__nested_webpack_require_978137__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_978137__.d(__nested_webpack_exports__, \"CoverCell\", function() { return CoverCell; });\n/* harmony export (binding) */ __nested_webpack_require_978137__.d(__nested_webpack_exports__, \"Cover\", function() { return Cover; });\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_978137__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_978137__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_978137__(/*! ./utils/cssClassBuilder */ \"./src/utils/cssClassBuilder.ts\");\n/* harmony import */ var _utils_utils__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_978137__(/*! ./utils/utils */ \"./src/utils/utils.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\nvar CoverCell = /** @class */ (function () {\n    function CoverCell(cover, positionX, positionY) {\n        this.cover = cover;\n        this.positionX = positionX;\n        this.positionY = positionY;\n    }\n    CoverCell.prototype.calcRow = function (positionY) {\n        return positionY === \"top\" ? 1 : (positionY === \"middle\" ? 2 : 3);\n    };\n    CoverCell.prototype.calcColumn = function (positionX) {\n        return positionX === \"left\" ? 1 : (positionX === \"center\" ? 2 : 3);\n    };\n    CoverCell.prototype.calcAlignItems = function (positionX) {\n        return positionX === \"left\" ? \"flex-start\" : (positionX === \"center\" ? \"center\" : \"flex-end\");\n    };\n    CoverCell.prototype.calcAlignText = function (positionX) {\n        return positionX === \"left\" ? \"start\" : (positionX === \"center\" ? \"center\" : \"end\");\n    };\n    CoverCell.prototype.calcJustifyContent = function (positionY) {\n        return positionY === \"top\" ? \"flex-start\" : (positionY === \"middle\" ? \"center\" : \"flex-end\");\n    };\n    Object.defineProperty(CoverCell.prototype, \"survey\", {\n        get: function () {\n            return this.cover.survey;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(CoverCell.prototype, \"css\", {\n        get: function () {\n            var result = CoverCell.CLASSNAME + \" \" + CoverCell.CLASSNAME + \"--\" + this.positionX + \" \" + CoverCell.CLASSNAME + \"--\" + this.positionY;\n            return result;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(CoverCell.prototype, \"style\", {\n        get: function () {\n            var result = {};\n            result[\"gridColumn\"] = this.calcColumn(this.positionX);\n            result[\"gridRow\"] = this.calcRow(this.positionY);\n            return result;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(CoverCell.prototype, \"contentStyle\", {\n        get: function () {\n            var result = {};\n            result[\"textAlign\"] = this.calcAlignText(this.positionX);\n            result[\"alignItems\"] = this.calcAlignItems(this.positionX);\n            result[\"justifyContent\"] = this.calcJustifyContent(this.positionY);\n            return result;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(CoverCell.prototype, \"showLogo\", {\n        get: function () {\n            return this.survey.hasLogo && this.positionX === this.cover.logoPositionX && this.positionY === this.cover.logoPositionY;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(CoverCell.prototype, \"showTitle\", {\n        get: function () {\n            return this.survey.hasTitle && this.positionX === this.cover.titlePositionX && this.positionY === this.cover.titlePositionY;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(CoverCell.prototype, \"showDescription\", {\n        get: function () {\n            return this.survey.renderedHasDescription && this.positionX === this.cover.descriptionPositionX && this.positionY === this.cover.descriptionPositionY;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(CoverCell.prototype, \"textWidth\", {\n        get: function () {\n            if (!this.cover.textWidth) {\n                return \"\";\n            }\n            return \"\" + this.cover.textWidth + \"px\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    CoverCell.CLASSNAME = \"sv-cover__cell\";\n    return CoverCell;\n}());\n\nvar Cover = /** @class */ (function (_super) {\n    __extends(Cover, _super);\n    function Cover() {\n        var _this = _super.call(this) || this;\n        _this.cells = [];\n        _this.renderBackgroundImage = Object(_utils_utils__WEBPACK_IMPORTED_MODULE_3__[\"wrapUrlForBackgroundImage\"])(_this.backgroundImage);\n        [\"top\", \"middle\", \"bottom\"].forEach(function (positionY) {\n            return [\"left\", \"center\", \"right\"].forEach(function (positionX) { return _this.cells.push(new CoverCell(_this, positionX, positionY)); });\n        });\n        return _this;\n    }\n    Cover.prototype.calcBackgroundSize = function (backgroundImageFit) {\n        if (backgroundImageFit === \"fill\") {\n            return \"100% 100%\";\n        }\n        if (backgroundImageFit === \"tile\") {\n            return \"contain\";\n        }\n        return backgroundImageFit;\n    };\n    Cover.prototype.getType = function () {\n        return \"cover\";\n    };\n    Object.defineProperty(Cover.prototype, \"renderedHeight\", {\n        get: function () {\n            return this.height ? this.height + \"px\" : undefined;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Cover.prototype, \"renderedTextWidth\", {\n        get: function () {\n            return this.textWidth ? this.textWidth + \"px\" : undefined;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Cover.prototype, \"coverClasses\", {\n        get: function () {\n            return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_2__[\"CssClassBuilder\"]()\n                .append(\"sv-cover\")\n                .append(\"sv-conver__without-background\", !this.backgroundColor && !this.backgroundImage)\n                .toString();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Cover.prototype, \"contentClasses\", {\n        get: function () {\n            return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_2__[\"CssClassBuilder\"]()\n                .append(\"sv-conver__content\")\n                .append(\"sv-conver__content--static\", this.areaWidth === \"survey\" && this.survey.calculateWidthMode() === \"static\")\n                .append(\"sv-conver__content--responsive\", this.areaWidth === \"container\" || this.survey.calculateWidthMode() === \"responsive\")\n                .toString();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Cover.prototype, \"backgroundImageClasses\", {\n        get: function () {\n            return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_2__[\"CssClassBuilder\"]()\n                .append(\"sv-cover__background-image\")\n                .append(\"sv-cover__background-image--contain\", this.backgroundImageFit === \"contain\")\n                .append(\"sv-cover__background-image--tile\", this.backgroundImageFit === \"tile\")\n                .toString();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Cover.prototype, \"backgroundImageStyle\", {\n        get: function () {\n            if (!this.backgroundImage)\n                return null;\n            return {\n                opacity: this.backgroundImageOpacity,\n                backgroundImage: this.renderBackgroundImage,\n                backgroundSize: this.calcBackgroundSize(this.backgroundImageFit),\n            };\n        },\n        enumerable: false,\n        configurable: true\n    });\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n    ], Cover.prototype, \"height\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n    ], Cover.prototype, \"areaWidth\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n    ], Cover.prototype, \"textWidth\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n    ], Cover.prototype, \"invertText\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n    ], Cover.prototype, \"glowText\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n    ], Cover.prototype, \"overlap\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n    ], Cover.prototype, \"backgroundColor\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({\n            onSet: function (newVal, target) {\n                target.renderBackgroundImage = Object(_utils_utils__WEBPACK_IMPORTED_MODULE_3__[\"wrapUrlForBackgroundImage\"])(newVal);\n            }\n        })\n    ], Cover.prototype, \"backgroundImage\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n    ], Cover.prototype, \"renderBackgroundImage\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n    ], Cover.prototype, \"backgroundImageFit\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n    ], Cover.prototype, \"backgroundImageOpacity\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n    ], Cover.prototype, \"logoPositionX\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n    ], Cover.prototype, \"logoPositionY\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n    ], Cover.prototype, \"titlePositionX\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n    ], Cover.prototype, \"titlePositionY\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n    ], Cover.prototype, \"descriptionPositionX\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n    ], Cover.prototype, \"descriptionPositionY\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n    ], Cover.prototype, \"logoStyle\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n    ], Cover.prototype, \"titleStyle\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n    ], Cover.prototype, \"descriptionStyle\", void 0);\n    return Cover;\n}(_base__WEBPACK_IMPORTED_MODULE_0__[\"Base\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].addClass(\"cover\", [\n    { name: \"height:number\", minValue: 0, default: 256 },\n    { name: \"areaWidth\", default: \"survey\" },\n    { name: \"textWidth:number\", minValue: 0, default: 512 },\n    { name: \"invertText:boolean\" },\n    { name: \"glowText:boolean\" },\n    { name: \"overlap:boolean\" },\n    { name: \"backgroundColor\" },\n    { name: \"backgroundImage\" },\n    { name: \"backgroundImageOpacity:number\", minValue: 0, maxValue: 1, default: 1 },\n    { name: \"backgroundImageFit\", default: \"cover\", choices: [\"cover\", \"fill\", \"contain\"] },\n    { name: \"logoPositionX\", default: \"right\" },\n    { name: \"logoPositionY\", default: \"top\" },\n    { name: \"titlePositionX\", default: \"left\" },\n    { name: \"titlePositionY\", default: \"bottom\" },\n    { name: \"descriptionPositionX\", default: \"left\" },\n    { name: \"descriptionPositionY\", default: \"bottom\" }\n], function () {\n    return new Cover();\n});\n\n\n/***/ }),\n\n/***/ \"./src/defaultCss/cssmodern.ts\":\n/*!*************************************!*\\\n  !*** ./src/defaultCss/cssmodern.ts ***!\n  \\*************************************/\n/*! exports provided: modernCss */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_991668__) {\n\n\"use strict\";\n__nested_webpack_require_991668__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_991668__.d(__nested_webpack_exports__, \"modernCss\", function() { return modernCss; });\n/* harmony import */ var _defaultV2Css__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_991668__(/*! ./defaultV2Css */ \"./src/defaultCss/defaultV2Css.ts\");\n\nvar modernCss = {\n    root: \"sv-root-modern\",\n    timerRoot: \"sv-body__timer\",\n    container: \"sv-container-modern\",\n    header: \"sv-title sv-container-modern__title\",\n    headerClose: \"sv-container-modern__close\",\n    bodyContainer: \"sv-components-row\",\n    body: \"sv-components-column sv-components-column--expandable sv-body\",\n    bodyEmpty: \"sv-body sv-body--empty\",\n    footer: \"sv-footer sv-body__footer sv-clearfix\",\n    title: \"\",\n    description: \"\",\n    logo: \"sv-logo\",\n    logoImage: \"sv-logo__image\",\n    headerText: \"sv-header__text\",\n    navigationButton: \"sv-btn sv-btn--navigation\",\n    completedPage: \"sv-completedpage\",\n    navigation: {\n        complete: \"sv-footer__complete-btn\",\n        prev: \"sv-footer__prev-btn\",\n        next: \"sv-footer__next-btn\",\n        start: \"sv-footer__start-btn\",\n        preview: \"sv-footer__preview-btn\",\n        edit: \"sv-footer__edit-btn\",\n    },\n    panel: {\n        title: \"sv-title sv-panel__title\",\n        titleExpandable: \"sv-panel__title--expandable\",\n        titleExpanded: \"sv-panel__title--expanded\",\n        titleCollapsed: \"sv-panel__title--collapsed\",\n        titleOnError: \"sv-panel__title--error\",\n        description: \"sv-description sv-panel__description\",\n        container: \"sv-panel sv-row__panel\",\n        content: \"sv-panel__content\",\n        icon: \"sv-panel__icon\",\n        iconExpanded: \"sv-panel__icon--expanded\",\n        footer: \"sv-panel__footer\",\n        requiredText: \"sv-panel__required-text\",\n        number: \"sv-question__num\",\n    },\n    paneldynamic: {\n        root: \"sv-paneldynamic\",\n        navigation: \"sv-paneldynamic__navigation\",\n        title: \"sv-title sv-question__title\",\n        button: \"sv-btn\",\n        buttonRemove: \"sv-paneldynamic__remove-btn\",\n        buttonRemoveRight: \"sv-paneldynamic__remove-btn--right\",\n        buttonAdd: \"sv-paneldynamic__add-btn\",\n        progressTop: \"sv-paneldynamic__progress sv-paneldynamic__progress--top\",\n        progressBottom: \"sv-paneldynamic__progress sv-paneldynamic__progress--bottom\",\n        buttonPrev: \"sv-paneldynamic__prev-btn\",\n        buttonNext: \"sv-paneldynamic__next-btn\",\n        buttonPrevDisabled: \"sv-paneldynamic__prev-btn--disabled\",\n        buttonNextDisabled: \"sv-paneldynamic__next-btn--disabled\",\n        progressContainer: \"sv-paneldynamic__progress-container\",\n        progress: \"sv-progress\",\n        progressBar: \"sv-progress__bar\",\n        progressText: \"sv-paneldynamic__progress-text\",\n        separator: \"sv-paneldynamic__separator\",\n        panelWrapper: \"sv-paneldynamic__panel-wrapper\",\n        panelWrapperInRow: \"sv-paneldynamic__panel-wrapper--in-row\",\n        progressBtnIcon: \"icon-progressbutton\",\n        footer: \"\"\n    },\n    progress: \"sv-progress sv-body__progress\",\n    progressBar: \"sv-progress__bar\",\n    progressText: \"sv-progress__text\",\n    progressTextInBar: \"sv-hidden\",\n    progressButtonsContainerCenter: \"sv_progress-buttons__container-center\",\n    progressButtonsContainer: \"sv_progress-buttons__container\",\n    progressButtonsImageButtonLeft: \"sv_progress-buttons__image-button-left\",\n    progressButtonsImageButtonRight: \"sv_progress-buttons__image-button-right\",\n    progressButtonsImageButtonHidden: \"sv_progress-buttons__image-button--hidden\",\n    progressButtonsListContainer: \"sv_progress-buttons__list-container\",\n    progressButtonsList: \"sv_progress-buttons__list\",\n    progressButtonsListElementPassed: \"sv_progress-buttons__list-element--passed\",\n    progressButtonsListElementCurrent: \"sv_progress-buttons__list-element--current\",\n    progressButtonsListElementNonClickable: \"sv_progress-buttons__list-element--nonclickable\",\n    progressButtonsPageTitle: \"sv_progress-buttons__page-title\",\n    progressButtonsPageDescription: \"sv_progress-buttons__page-description\",\n    page: {\n        root: \"sv-page sv-body__page\",\n        title: \"sv-title sv-page__title\",\n        description: \"sv-description sv-page__description\",\n    },\n    pageTitle: \"sv-title sv-page__title\",\n    pageDescription: \"sv-description sv-page__description\",\n    row: \"sv-row sv-clearfix\",\n    question: {\n        mainRoot: \"sv-question sv-row__question\",\n        flowRoot: \"sv-question sv-row__question sv-row__question--flow\",\n        asCell: \"sv-table__cell\",\n        header: \"sv-question__header\",\n        headerLeft: \"sv-question__header--location--left\",\n        headerTop: \"sv-question__header--location--top\",\n        headerBottom: \"sv-question__header--location--bottom\",\n        content: \"sv-question__content\",\n        contentLeft: \"sv-question__content--left\",\n        titleLeftRoot: \"\",\n        answered: \"sv-question--answered\",\n        titleOnAnswer: \"sv-question__title--answer\",\n        titleOnError: \"sv-question__title--error\",\n        title: \"sv-title sv-question__title\",\n        titleExpandable: \"sv-question__title--expandable\",\n        titleExpanded: \"sv-question__title--expanded\",\n        titleCollapsed: \"sv-question__title--collapsed\",\n        icon: \"sv-question__icon\",\n        iconExpanded: \"sv-question__icon--expanded\",\n        requiredText: \"sv-question__required-text\",\n        number: \"sv-question__num\",\n        description: \"sv-description sv-question__description\",\n        descriptionUnderInput: \"sv-description sv-question__description\",\n        comment: \"sv-comment\",\n        required: \"sv-question--required\",\n        titleRequired: \"sv-question__title--required\",\n        indent: 20,\n        footer: \"sv-question__footer\",\n        formGroup: \"sv-question__form-group\",\n        hasError: \"\",\n        disabled: \"sv-question--disabled\",\n    },\n    image: { root: \"sv-image\", image: \"sv_image_image\" },\n    error: {\n        root: \"sv-question__erbox\",\n        icon: \"\",\n        item: \"\",\n        locationTop: \"sv-question__erbox--location--top\",\n        locationBottom: \"sv-question__erbox--location--bottom\",\n    },\n    checkbox: {\n        root: \"sv-selectbase\",\n        item: \"sv-item sv-checkbox sv-selectbase__item\",\n        itemSelectAll: \"sv-checkbox--selectall\",\n        itemNone: \"sv-checkbox--none\",\n        itemDisabled: \"sv-item--disabled sv-checkbox--disabled\",\n        itemChecked: \"sv-checkbox--checked\",\n        itemHover: \"sv-checkbox--allowhover\",\n        itemInline: \"sv-selectbase__item--inline\",\n        label: \"sv-selectbase__label\",\n        labelChecked: \"\",\n        itemControl: \"sv-visuallyhidden sv-item__control\",\n        itemDecorator: \"sv-item__svg sv-checkbox__svg\",\n        itemSvgIconId: \"#icon-moderncheck\",\n        controlLabel: \"sv-item__control-label\",\n        materialDecorator: \"sv-item__decorator sv-selectbase__decorator sv-checkbox__decorator\",\n        other: \"sv-comment sv-question__other\",\n        column: \"sv-selectbase__column\",\n    },\n    ranking: {\n        root: \"sv-ranking\",\n        rootMobileMod: \"sv-ranking--mobile\",\n        rootDragMod: \"sv-ranking--drag\",\n        rootDisabled: \"sv-ranking--disabled\",\n        rootDragHandleAreaIcon: \"sv-ranking--drag-handle-area-icon\",\n        rootSelectToRankMod: \"sv-ranking--select-to-rank\",\n        rootSelectToRankAlignVertical: \"sv-ranking--select-to-rank-vertical\",\n        rootSelectToRankAlignHorizontal: \"sv-ranking--select-to-rank-horizontal\",\n        item: \"sv-ranking-item\",\n        itemContent: \"sv-ranking-item__content\",\n        itemIndex: \"sv-ranking-item__index\",\n        itemIndexEmptyMode: \"sv-ranking-item__index--empty\",\n        // itemText: \"sv-ranking-item__text\",\n        controlLabel: \"sv-ranking-item__text\",\n        itemGhostNode: \"sv-ranking-item__ghost\",\n        itemIconContainer: \"sv-ranking-item__icon-container\",\n        itemIcon: \"sv-ranking-item__icon\",\n        itemIconHoverMod: \"sv-ranking-item__icon--hover\",\n        itemIconFocusMod: \"sv-ranking-item__icon--focus\",\n        itemGhostMod: \"sv-ranking-item--ghost\",\n        itemDragMod: \"sv-ranking-item--drag\",\n        container: \"sv-ranking__container\",\n        containerEmptyMode: \"sv-ranking__container--empty\",\n        containerFromMode: \"sv-ranking__container--from\",\n        containerToMode: \"sv-ranking__container--to\",\n        containerPlaceholder: \"sv-ranking__container-placeholder\",\n        containersDivider: \"sv-ranking__containers-divider\",\n    },\n    radiogroup: {\n        root: \"sv-selectbase\",\n        item: \"sv-item sv-radio sv-selectbase__item\",\n        itemInline: \"sv-selectbase__item--inline\",\n        label: \"sv-selectbase__label\",\n        labelChecked: \"\",\n        itemDisabled: \"sv-item--disabled sv-radio--disabled\",\n        itemChecked: \"sv-radio--checked\",\n        itemHover: \"sv-radio--allowhover\",\n        itemControl: \"sv-visuallyhidden sv-item__control\",\n        itemDecorator: \"sv-item__svg sv-radio__svg\",\n        itemSvgIconId: \"#icon-modernradio\",\n        controlLabel: \"sv-item__control-label\",\n        materialDecorator: \"sv-item__decorator sv-selectbase__decorator sv-radio__decorator\",\n        other: \"sv-comment sv-question__other\",\n        clearButton: \"sv-btn sv-selectbase__clear-btn\",\n        column: \"sv-selectbase__column\",\n    },\n    buttongroup: {\n        root: \"sv-button-group\",\n        item: \"sv-button-group__item\",\n        itemIcon: \"sv-button-group__item-icon\",\n        itemDecorator: \"sv-button-group__item-decorator\",\n        itemCaption: \"sv-button-group__item-caption\",\n        itemSelected: \"sv-button-group__item--selected\",\n        itemHover: \"sv-button-group__item--hover\",\n        itemDisabled: \"sv-button-group__item--disabled\",\n        itemControl: \"sv-visuallyhidden\",\n    },\n    boolean: {\n        root: \"sv_qbln\",\n        rootRadio: \"sv_qbln\",\n        small: \"sv-row__question--small\",\n        item: \"sv-boolean sv-item\",\n        control: \"sv-visuallyhidden\",\n        itemChecked: \"sv-boolean--checked\",\n        itemIndeterminate: \"sv-boolean--indeterminate\",\n        itemDisabled: \"sv-item--disabled sv-boolean--disabled\",\n        switch: \"sv-boolean__switch\",\n        slider: \"sv-boolean__slider\",\n        label: \"sv-boolean__label\",\n        disabledLabel: \"sv-boolean__label--disabled\",\n        sliderGhost: \"sv-boolean__thumb-ghost\",\n        //checkbox\n        rootCheckbox: \"sv_qbln\",\n        checkboxItem: \"sv-boolean sv-item\",\n        checkboxItemChecked: \"sv-boolean--checked\",\n        controlCheckbox: \"sv-visuallyhidden\",\n        checkboxControlLabel: \"sv-boolean__label\",\n        checkboxItemIndeterminate: \"sv-boolean--indeterminate\",\n        checkboxItemDisabled: \"sv-item--disabled sv-boolean--disabled\",\n        checkboxMaterialDecorator: \"sv-item__decorator sv-boolean__decorator \",\n        checkboxItemDecorator: \"sv-item__svg  sv-boolean__svg\",\n        indeterminatePath: \"sv-boolean__indeterminate-path\",\n        svgIconCheckedId: \"#icon-modernbooleancheckchecked\",\n        svgIconUncheckedId: \"#icon-modernbooleancheckunchecked\",\n        svgIconIndId: \"#icon-modernbooleancheckind\",\n    },\n    text: {\n        root: \"sv-text\",\n        small: \"sv-row__question--small\",\n        remainingCharacterCounter: \"sv-remaining-character-counter\",\n        onError: \"sv-text--error\",\n    },\n    multipletext: {\n        root: \"sv-multipletext\",\n        item: \"sv-multipletext__item\",\n        itemLabel: \"sv-multipletext__item-label\",\n        itemTitle: \"sv-multipletext__item-title\",\n        row: \"sv-multipletext__row\",\n        cell: \"sv-multipletext__cell\",\n    },\n    dropdown: {\n        root: \"\",\n        popup: \"sv-dropdown-popup\",\n        small: \"sv-row__question--small\",\n        control: \"sv-dropdown\",\n        selectWrapper: \"\",\n        other: \"sv-comment sv-question__other\",\n        onError: \"sv-dropdown--error\",\n        cleanButton: \"sv-dropdown_clean-button\",\n        cleanButtonSvg: \"sv-dropdown_clean-button-svg\",\n        cleanButtonIconId: \"icon-clear_16x16\",\n        filterStringInput: \"sv-dropdown__filter-string-input\",\n        controlValue: \"sv-dropdown__value\",\n        controlInputFieldComponent: \"sv_dropdown_control__input-field-component\",\n        hintPrefix: \"sv-dropdown__hint-prefix\",\n        hintSuffix: \"sv-dropdown__hint-suffix\"\n    },\n    tagbox: {\n        root: \"\",\n        popup: \"sv-dropdown-popup\",\n        small: \"sv-row__question--small\",\n        selectWrapper: \"sv_select_wrapper sv-tagbox_wrapper\",\n        other: \"sv-input sv-comment sv-selectbase__other\",\n        cleanButton: \"sv-tagbox_clean-button sv-dropdown_clean-button\",\n        cleanButtonSvg: \"sv-tagbox_clean-button-svg sv-dropdown_clean-button-svg\",\n        cleanButtonIconId: \"icon-clear_16x16\",\n        cleanItemButton: \"sv-tagbox__item_clean-button\",\n        cleanItemButtonSvg: \"sv-tagbox__item_clean-button-svg\",\n        cleanItemButtonIconId: \"icon-clear_16x16\",\n        control: \"sv-input sv-tagbox sv-dropdown\",\n        controlValue: \"sv-tagbox__value sv-dropdown__value\",\n        controlEmpty: \"sv-dropdown--empty sv-tagbox--empty\",\n        placeholderInput: \"sv-tagbox__placeholder\",\n        filterStringInput: \"sv-tagbox__filter-string-input sv-dropdown__filter-string-input\"\n    },\n    imagepicker: {\n        root: \"sv-selectbase sv-imagepicker\",\n        column: \"sv-selectbase__column\",\n        item: \"sv-imagepicker__item\",\n        itemInline: \"sv-imagepicker__item--inline\",\n        itemChecked: \"sv-imagepicker__item--checked\",\n        itemDisabled: \"sv-imagepicker__item--disabled\",\n        itemHover: \"sv-imagepicker__item--allowhover\",\n        label: \"sv-imagepicker__label\",\n        itemControl: \"sv-imagepicker__control sv-visuallyhidden\",\n        image: \"sv-imagepicker__image\",\n        itemText: \"sv-imagepicker__text\",\n        clearButton: \"sv-btn\",\n        other: \"sv-comment sv-question__other\",\n    },\n    matrix: {\n        tableWrapper: \"sv-matrix\",\n        root: \"sv-table sv-matrix-root\",\n        rowError: \"sv-matrix__row--error\",\n        cell: \"sv-table__cell sv-matrix__cell\",\n        headerCell: \"sv-table__cell sv-table__cell--header\",\n        label: \"sv-item sv-radio sv-matrix__label\",\n        itemValue: \"sv-visuallyhidden sv-item__control sv-radio__control\",\n        itemChecked: \"sv-radio--checked\",\n        itemDisabled: \"sv-item--disabled sv-radio--disabled\",\n        itemHover: \"sv-radio--allowhover\",\n        materialDecorator: \"sv-item__decorator sv-radio__decorator\",\n        itemDecorator: \"sv-item__svg sv-radio__svg\",\n        cellText: \"sv-matrix__text\",\n        cellTextSelected: \"sv-matrix__text--checked\",\n        cellTextDisabled: \"sv-matrix__text--disabled\",\n        cellResponsiveTitle: \"sv-hidden\",\n        itemSvgIconId: \"#icon-modernradio\",\n    },\n    matrixdropdown: {\n        root: \"sv-table sv-matrixdropdown\",\n        cell: \"sv-table__cell\",\n        headerCell: \"sv-table__cell sv-table__cell--header\",\n        row: \"sv-table__row\",\n        rowAdditional: \"sv-table__row--additional\",\n        detailRow: \"sv-table__row--detail\",\n        detailRowText: \"sv-table__cell--detail-rowtext\",\n        detailCell: \"sv-table__cell--detail\",\n        choiceCell: \"sv-table__cell--choice\",\n        detailButton: \"sv-table__cell--detail-button\",\n        detailButtonExpanded: \"sv-table__cell--detail-button--expanded\",\n        detailIcon: \"sv-detail-panel__icon\",\n        detailIconExpanded: \"sv-detail-panel__icon--expanded\",\n        detailPanelCell: \"sv-table__cell--detail-panel\",\n        actionsCell: \"sv-table__cell sv-table__cell--actions\",\n    },\n    matrixdynamic: {\n        root: \"sv-table sv-matrixdynamic\",\n        cell: \"sv-table__cell\",\n        headerCell: \"sv-table__cell sv-table__cell--header\",\n        button: \"sv-btn\",\n        buttonAdd: \"sv-matrixdynamic__add-btn\",\n        buttonRemove: \"sv-matrixdynamic__remove-btn\",\n        iconAdd: \"\",\n        iconRemove: \"\",\n        iconDrag: \"sv-matrixdynamic__drag-icon\",\n        row: \"sv-table__row\",\n        detailRow: \"sv-table__row--detail\",\n        detailCell: \"sv-table__cell--detail\",\n        choiceCell: \"sv-table__cell--choice\",\n        detailButton: \"sv-table__cell--detail-button\",\n        detailButtonExpanded: \"sv-table__cell--detail-button--expanded\",\n        detailIcon: \"sv-detail-panel__icon\",\n        detailIconExpanded: \"sv-detail-panel__icon--expanded\",\n        detailPanelCell: \"sv-table__cell--detail-panel\",\n        actionsCell: \"sv-table__cell sv-table__cell--actions\",\n        emptyRowsSection: \"sv-table__empty--rows--section\",\n        emptyRowsText: \"sv-table__empty--rows--text\",\n        emptyRowsButton: \"\",\n        ghostRow: \"sv-matrix-row--drag-drop-ghost-mod\"\n    },\n    rating: {\n        root: \"sv-rating\",\n        item: \"sv-rating__item\",\n        selected: \"sv-rating__item--selected\",\n        minText: \"sv-rating__min-text\",\n        itemText: \"sv-rating__item-text\",\n        maxText: \"sv-rating__max-text\",\n        itemDisabled: \"sv-rating--disabled\",\n        filterStringInput: \"sv-dropdown__filter-string-input\",\n        control: \"sv-dropdown\",\n        cleanButton: \"sv-dropdown_clean-button\",\n        cleanButtonSvg: \"sv-dropdown_clean-button-svg\",\n        cleanButtonIconId: \"icon-clear_16x16\",\n        controlValue: \"sv-dropdown__value\",\n        controlInputFieldComponent: \"sv_dropdown_control__input-field-component\",\n        itemSmiley: \"sv-rating__item-smiley\",\n        itemStar: \"sv-rating__item-star\",\n        itemSmileySelected: \"sv-rating__item-smiley--selected\",\n        itemStarSelected: \"sv-rating__item-star--selected\"\n    },\n    comment: {\n        root: \"sv-comment\",\n        small: \"sv-row__question--small\",\n        remainingCharacterCounter: \"sv-remaining-character-counter\",\n    },\n    expression: \"\",\n    file: {\n        root: \"sv-file\",\n        other: \"sv-comment sv-question__other\",\n        placeholderInput: \"sv-visuallyhidden\",\n        preview: \"sv-file__preview\",\n        fileSignBottom: \"sv-file__sign\",\n        fileDecorator: \"sv-file__decorator\",\n        fileInput: \"sv-visuallyhidden\",\n        noFileChosen: \"sv-description sv-file__no-file-chosen\",\n        chooseFile: \"sv-btn sv-file__choose-btn\",\n        controlDisabled: \"sv-file__choose-btn--disabled\",\n        removeButton: \"sv-hidden\",\n        removeButtonBottom: \"sv-btn sv-file__clean-btn\",\n        removeFile: \"sv-hidden\",\n        removeFileSvg: \"sv-file__remove-svg\",\n        removeFileSvgIconId: \"icon-removefile\",\n        wrapper: \"sv-file__wrapper\",\n        dragAreaPlaceholder: \"sv-hidden\",\n        fileList: \"\",\n    },\n    signaturepad: {\n        root: \"sv-signaturepad sjs_sp_container\",\n        small: \"sv-row__question--small\",\n        controls: \"sjs_sp_controls\",\n        placeholder: \"sjs_sp_placeholder\",\n        canvas: \"sjs_sp_canvas\",\n        backgroundImage: \"sjs_sp__background-image\",\n        clearButton: \"sjs_sp_clear\",\n    },\n    saveData: {\n        root: \"sv-save-data_root\",\n        info: \"sv-save-data_info\",\n        error: \"sv-save-data_error\",\n        success: \"sv-save-data_success\",\n        button: \"sv-save-data_button\",\n        shown: \"sv-save-data_root--shown\"\n    },\n    window: {\n        root: \"sv_window\",\n        body: \"sv_window_content\",\n        header: {\n            root: \"sv_window_title\",\n            title: \"\",\n            button: \"\",\n            buttonExpanded: \"\",\n            buttonCollapsed: \"\",\n        },\n    },\n    variables: {\n        mobileWidth: \"--sv-mobile-width\",\n        themeMark: \"--sv-modern-mark\"\n    }\n};\n_defaultV2Css__WEBPACK_IMPORTED_MODULE_0__[\"surveyCss\"][\"modern\"] = modernCss;\n\n\n/***/ }),\n\n/***/ \"./src/defaultCss/cssstandard.ts\":\n/*!***************************************!*\\\n  !*** ./src/defaultCss/cssstandard.ts ***!\n  \\***************************************/\n/*! exports provided: defaultStandardCss */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1011463__) {\n\n\"use strict\";\n__nested_webpack_require_1011463__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_1011463__.d(__nested_webpack_exports__, \"defaultStandardCss\", function() { return defaultStandardCss; });\n/* harmony import */ var _defaultV2Css__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1011463__(/*! ./defaultV2Css */ \"./src/defaultCss/defaultV2Css.ts\");\n\nvar defaultStandardCss = {\n    root: \"sv_main sv_default_css\",\n    container: \"sv_container\",\n    header: \"sv_header\",\n    bodyContainer: \"sv-components-row\",\n    body: \"sv-components-column sv-components-column--expandable sv_body\",\n    bodyEmpty: \"sv_body sv_body_empty\",\n    footer: \"sv_nav\",\n    title: \"\",\n    description: \"\",\n    logo: \"sv_logo\",\n    logoImage: \"sv_logo__image\",\n    headerText: \"sv_header__text\",\n    navigationButton: \"sv_nav_btn\",\n    completedPage: \"sv_completed_page\",\n    navigation: {\n        complete: \"sv_complete_btn\",\n        prev: \"sv_prev_btn\",\n        next: \"sv_next_btn\",\n        start: \"sv_start_btn\",\n        preview: \"sv_preview_btn\",\n        edit: \"sv_edit_btn\",\n    },\n    progress: \"sv_progress\",\n    progressBar: \"sv_progress_bar\",\n    progressTextInBar: \"sv-hidden\",\n    progressButtonsContainerCenter: \"sv_progress-buttons__container-center\",\n    progressButtonsContainer: \"sv_progress-buttons__container\",\n    progressButtonsImageButtonLeft: \"sv_progress-buttons__image-button-left\",\n    progressButtonsImageButtonRight: \"sv_progress-buttons__image-button-right\",\n    progressButtonsImageButtonHidden: \"sv_progress-buttons__image-button--hidden\",\n    progressButtonsListContainer: \"sv_progress-buttons__list-container\",\n    progressButtonsList: \"sv_progress-buttons__list\",\n    progressButtonsListElementPassed: \"sv_progress-buttons__list-element--passed\",\n    progressButtonsListElementCurrent: \"sv_progress-buttons__list-element--current\",\n    progressButtonsListElementNonClickable: \"sv_progress-buttons__list-element--nonclickable\",\n    progressButtonsPageTitle: \"sv_progress-buttons__page-title\",\n    progressButtonsPageDescription: \"sv_progress-buttons__page-description\",\n    page: {\n        root: \"sv_p_root\",\n        title: \"sv_page_title\",\n        description: \"\",\n    },\n    // TODO: move to the page object\n    pageTitle: \"sv_page_title\",\n    pageDescription: \"\",\n    row: \"sv_row\",\n    question: {\n        mainRoot: \"sv_q sv_qstn\",\n        flowRoot: \"sv_q_flow sv_qstn\",\n        header: \"\",\n        headerLeft: \"title-left\",\n        content: \"\",\n        contentLeft: \"content-left\",\n        titleLeftRoot: \"sv_qstn_left\",\n        requiredText: \"sv_q_required_text\",\n        title: \"sv_q_title\",\n        titleExpandable: \"sv_q_title_expandable\",\n        titleExpanded: \"sv_q_title_expanded\",\n        titleCollapsed: \"sv_q_title_collapsed\",\n        number: \"sv_q_num\",\n        description: \"sv_q_description\",\n        comment: \"\",\n        required: \"\",\n        titleRequired: \"\",\n        hasError: \"\",\n        indent: 20,\n        footer: \"sv_q_footer\",\n        formGroup: \"form-group\",\n        asCell: \"sv_matrix_cell\",\n        icon: \"sv_question_icon\",\n        iconExpanded: \"sv_expanded\",\n        disabled: \"sv_q--disabled\",\n    },\n    panel: {\n        title: \"sv_p_title\",\n        titleExpandable: \"sv_p_title_expandable\",\n        titleExpanded: \"sv_p_title_expanded\",\n        titleCollapsed: \"sv_p_title_collapsed\",\n        titleOnError: \"\",\n        icon: \"sv_panel_icon\",\n        iconExpanded: \"sv_expanded\",\n        description: \"sv_p_description\",\n        container: \"sv_p_container\",\n        footer: \"sv_p_footer\",\n        number: \"sv_q_num\",\n        requiredText: \"sv_q_required_text\",\n    },\n    error: {\n        root: \"sv_q_erbox\",\n        icon: \"\",\n        item: \"\",\n        locationTop: \"sv_qstn_error_top\",\n        locationBottom: \"sv_qstn_error_bottom\",\n    },\n    boolean: {\n        root: \"sv_qcbc sv_qbln\",\n        rootRadio: \"sv_qcbc sv_qbln\",\n        item: \"sv-boolean\",\n        control: \"sv-visuallyhidden\",\n        itemChecked: \"sv-boolean--checked checked\",\n        itemIndeterminate: \"sv-boolean--indeterminate\",\n        itemDisabled: \"sv-boolean--disabled\",\n        switch: \"sv-boolean__switch\",\n        slider: \"sv-boolean__slider\",\n        label: \"sv-boolean__label \",\n        disabledLabel: \"sv-boolean__label--disabled\",\n        sliderGhost: \"sv-boolean__thumb-ghost\",\n        //checkbox\n        rootCheckbox: \"sv_qcbc sv_qbln\",\n        checkboxItem: \"sv-boolean\",\n        checkboxItemChecked: \"sv-boolean--checked\",\n        controlCheckbox: \"sv-visuallyvisible\",\n        checkboxControlLabel: \"sv-boolean__label\",\n        checkboxItemIndeterminate: \"sv-boolean--indeterminate\",\n        checkboxItemDisabled: \"sv-item--disabled sv-boolean--disabled\",\n        checkboxMaterialDecorator: \"sv-item__decorator sv-boolean__decorator\",\n        checkboxItemDecorator: \"sv-item__svg sv-boolean__svg\",\n    },\n    checkbox: {\n        root: \"sv_qcbc sv_qcbx\",\n        item: \"sv_q_checkbox\",\n        itemSelectAll: \"sv_q_checkbox_selectall\",\n        itemNone: \"sv_q_checkbox_none\",\n        itemChecked: \"checked\",\n        itemInline: \"sv_q_checkbox_inline\",\n        label: \"sv_q_checkbox_label\",\n        labelChecked: \"\",\n        itemControl: \"sv_q_checkbox_control_item\",\n        itemDecorator: \"sv-hidden\",\n        controlLabel: \"sv_q_checkbox_control_label\",\n        other: \"sv_q_other sv_q_checkbox_other\",\n        column: \"sv_q_select_column\",\n    },\n    ranking: {\n        root: \"sv-ranking\",\n        rootMobileMod: \"sv-ranking--mobile\",\n        rootDragMod: \"sv-ranking--drag\",\n        rootDisabled: \"sv-ranking--disabled\",\n        rootDragHandleAreaIcon: \"sv-ranking--drag-handle-area-icon\",\n        rootSelectToRankMod: \"sv-ranking--select-to-rank\",\n        rootSelectToRankAlignVertical: \"sv-ranking--select-to-rank-vertical\",\n        rootSelectToRankAlignHorizontal: \"sv-ranking--select-to-rank-horizontal\",\n        item: \"sv-ranking-item\",\n        itemContent: \"sv-ranking-item__content\",\n        itemIndex: \"sv-ranking-item__index\",\n        itemIndexEmptyMode: \"sv-ranking-item__index--empty\",\n        // itemText: \"sv-ranking-item__text\",\n        controlLabel: \"sv-ranking-item__text\",\n        itemGhostNode: \"sv-ranking-item__ghost\",\n        itemIconContainer: \"sv-ranking-item__icon-container\",\n        itemIcon: \"sv-ranking-item__icon\",\n        itemIconHoverMod: \"sv-ranking-item__icon--hover\",\n        itemIconFocusMod: \"sv-ranking-item__icon--focus\",\n        itemGhostMod: \"sv-ranking-item--ghost\",\n        itemDragMod: \"sv-ranking-item--drag\",\n        container: \"sv-ranking__container\",\n        containerEmptyMode: \"sv-ranking__container--empty\",\n        containerFromMode: \"sv-ranking__container--from\",\n        containerToMode: \"sv-ranking__container--to\",\n        containerPlaceholder: \"sv-ranking__container-placeholder\",\n        containersDivider: \"sv-ranking__containers-divider\",\n    },\n    comment: {\n        remainingCharacterCounter: \"sv-remaining-character-counter\",\n    },\n    dropdown: {\n        root: \"\",\n        popup: \"sv-dropdown-popup\",\n        control: \"sv_q_dropdown_control\",\n        controlInputFieldComponent: \"sv_q_dropdown_control__input-field-component\",\n        selectWrapper: \"sv_select_wrapper\",\n        other: \"sv_q_dd_other\",\n        cleanButton: \"sv_q_dropdown_clean-button\",\n        cleanButtonSvg: \"sv_q_dropdown_clean-button-svg\",\n        cleanButtonIconId: \"icon-clear_16x16\",\n        controlValue: \"sv_q_dropdown__value\",\n        filterStringInput: \"sv_q_dropdown__filter-string-input\",\n        hintPrefix: \"sv_q_dropdown__hint-prefix\",\n        hintSuffix: \"sv_q_dropdown__hint-suffix\"\n    },\n    html: { root: \"\" },\n    image: {\n        root: \"sv_q_image\",\n        image: \"sv_image_image\",\n        noImage: \"sv-image__no-image\",\n        noImageSvgIconId: \"icon-no-image\",\n    },\n    matrix: {\n        root: \"sv_q_matrix\",\n        label: \"sv_q_m_label\",\n        itemChecked: \"checked\",\n        itemDecorator: \"sv-hidden\",\n        cell: \"sv_q_m_cell\",\n        cellText: \"sv_q_m_cell_text\",\n        cellTextSelected: \"sv_q_m_cell_selected\",\n        cellLabel: \"sv_q_m_cell_label\",\n        cellResponsiveTitle: \"sv-hidden\"\n    },\n    matrixdropdown: {\n        root: \"sv_q_matrix_dropdown\",\n        cell: \"sv_matrix_cell\",\n        headerCell: \"sv_matrix_cell_header\",\n        row: \"sv_matrix_row\",\n        rowAdditional: \"sv-matrix__row--additional\",\n        detailRow: \"sv_matrix_detail_row\",\n        detailRowText: \"sv_matrix_cell_detail_rowtext\",\n        detailCell: \"sv_matrix_cell_detail\",\n        choiceCell: \"sv-table__cell--choice\",\n        detailButton: \"sv_matrix_cell_detail_button\",\n        detailButtonExpanded: \"sv_matrix_cell_detail_button_expanded\",\n        detailIcon: \"sv_detail_panel_icon\",\n        detailIconExpanded: \"sv_detail_expanded\",\n        detailPanelCell: \"sv_matrix_cell_detail_panel\",\n        actionsCell: \"sv_matrix_cell sv_matrix_cell_actions\",\n    },\n    matrixdynamic: {\n        root: \"sv_q_matrix_dynamic\",\n        button: \"sv_matrix_dynamic_button\",\n        buttonAdd: \"\",\n        buttonRemove: \"\",\n        iconAdd: \"\",\n        iconRemove: \"\",\n        iconDrag: \"sv-matrixdynamic__drag-icon\",\n        cell: \"sv_matrix_cell\",\n        headerCell: \"sv_matrix_cell_header\",\n        row: \"sv_matrix_row\",\n        detailRow: \"sv_matrix_detail_row\",\n        detailCell: \"sv_matrix_cell_detail\",\n        choiceCell: \"sv-table__cell--choice\",\n        detailButton: \"sv_matrix_cell_detail_button\",\n        detailButtonExpanded: \"sv_matrix_cell_detail_button_expanded\",\n        detailIcon: \"sv_detail_panel_icon\",\n        detailIconExpanded: \"sv_detail_expanded\",\n        detailPanelCell: \"sv_matrix_cell_detail_panel\",\n        actionsCell: \"sv_matrix_cell sv_matrix_cell_actions\",\n        emptyRowsSection: \"sv_matrix_empty_rows_section\",\n        emptyRowsText: \"sv_matrix_empty_rows_text\",\n        emptyRowsButton: \"\",\n        ghostRow: \"sv-matrix-row--drag-drop-ghost-mod\"\n    },\n    paneldynamic: {\n        root: \"sv_panel_dynamic\",\n        title: \"sv_p_title\",\n        header: \"sv-paneldynamic__header sv_header\",\n        headerTab: \"sv-paneldynamic__header-tab\",\n        button: \"\",\n        buttonAdd: \"sv-paneldynamic__add-btn\",\n        buttonRemove: \"sv_p_remove_btn\",\n        buttonRemoveRight: \"sv_p_remove_btn_right\",\n        buttonPrev: \"sv-paneldynamic__prev-btn\",\n        buttonPrevDisabled: \"sv-paneldynamic__prev-btn--disabled\",\n        buttonNextDisabled: \"sv-paneldynamic__next-btn--disabled\",\n        buttonNext: \"sv-paneldynamic__next-btn\",\n        progressContainer: \"sv-paneldynamic__progress-container\",\n        progress: \"sv-progress\",\n        progressBar: \"sv-progress__bar\",\n        progressText: \"sv-paneldynamic__progress-text\",\n        panelWrapper: \"sv_p_wrapper\",\n        panelWrapperInRow: \"sv_p_wrapper_in_row\",\n        footer: \"\",\n        progressBtnIcon: \"icon-progressbutton\"\n    },\n    multipletext: {\n        root: \"sv_q_mt\",\n        itemTitle: \"sv_q_mt_title\",\n        item: \"sv_q_mt_item\",\n        row: \"sv_q_mt_row\",\n        itemLabel: \"sv_q_mt_label\",\n        itemValue: \"sv_q_mt_item_value sv_q_text_root\",\n    },\n    radiogroup: {\n        root: \"sv_qcbc\",\n        item: \"sv_q_radiogroup\",\n        itemChecked: \"checked\",\n        itemInline: \"sv_q_radiogroup_inline\",\n        itemDecorator: \"sv-hidden\",\n        label: \"sv_q_radiogroup_label\",\n        labelChecked: \"\",\n        itemControl: \"sv_q_radiogroup_control_item\",\n        controlLabel: \"\",\n        other: \"sv_q_other sv_q_radiogroup_other\",\n        clearButton: \"sv_q_radiogroup_clear\",\n        column: \"sv_q_select_column\",\n    },\n    buttongroup: {\n        root: \"sv-button-group\",\n        item: \"sv-button-group__item\",\n        itemIcon: \"sv-button-group__item-icon\",\n        itemDecorator: \"sv-button-group__item-decorator\",\n        itemCaption: \"sv-button-group__item-caption\",\n        itemHover: \"sv-button-group__item--hover\",\n        itemSelected: \"sv-button-group__item--selected\",\n        itemDisabled: \"sv-button-group__item--disabled\",\n        itemControl: \"sv-visuallyhidden\",\n    },\n    imagepicker: {\n        root: \"sv_imgsel\",\n        item: \"sv_q_imgsel\",\n        itemChecked: \"checked\",\n        label: \"sv_q_imgsel_label\",\n        itemControl: \"sv_q_imgsel_control_item\",\n        image: \"sv_q_imgsel_image\",\n        itemInline: \"sv_q_imagepicker_inline\",\n        itemText: \"sv_q_imgsel_text\",\n        clearButton: \"sv_q_radiogroup_clear\",\n        column: \"sv_q_select_column\",\n        itemNoImage: \"sv_q_imgsel__no-image\",\n        itemNoImageSvgIcon: \"sv_q_imgsel__no-image-svg\",\n        itemNoImageSvgIconId: \"icon-no-image\",\n    },\n    rating: {\n        root: \"sv_q_rating\",\n        item: \"sv_q_rating_item\",\n        itemFixedSize: \"sv_q_rating_item_fixed\",\n        selected: \"active\",\n        minText: \"sv_q_rating_min_text\",\n        itemText: \"sv_q_rating_item_text\",\n        maxText: \"sv_q_rating_max_text\",\n        itemStar: \"sv_q_rating__item-star\",\n        itemStarSelected: \"sv_q_rating__item-star--selected\",\n        itemSmiley: \"sv_q_rating__item-smiley\",\n        itemSmileySelected: \"sv_q_rating__item-smiley--selected\",\n    },\n    text: {\n        root: \"sv_q_text_root\",\n        remainingCharacterCounter: \"sv-remaining-character-counter\",\n    },\n    expression: \"\",\n    file: {\n        root: \"sv_q_file\",\n        placeholderInput: \"sv-visuallyhidden\",\n        preview: \"sv_q_file_preview\",\n        removeButton: \"sv_q_file_remove_button\",\n        fileInput: \"sv-visuallyhidden\",\n        removeFile: \"sv_q_file_remove\",\n        fileDecorator: \"sv-file__decorator\",\n        fileSign: \"sv_q_file_sign\",\n        chooseFile: \"sv_q_file_choose_button\",\n        noFileChosen: \"sv_q_file_placeholder\",\n        dragAreaPlaceholder: \"sv-hidden\",\n        fileList: \"\",\n    },\n    signaturepad: {\n        root: \"sv_q_signaturepad sjs_sp_container\",\n        controls: \"sjs_sp_controls\",\n        placeholder: \"sjs_sp_placeholder\",\n        canvas: \"sjs_sp_canvas\",\n        backgroundImage: \"sjs_sp__background-image\",\n        clearButton: \"sjs_sp_clear\",\n    },\n    saveData: {\n        root: \"sv-save-data_root\",\n        info: \"sv-save-data_info\",\n        error: \"sv-save-data_error\",\n        success: \"sv-save-data_success\",\n        button: \"sv-save-data_button\",\n        shown: \"sv-save-data_root--shown\"\n    },\n    window: {\n        root: \"sv_window\",\n        body: \"sv_window_content\",\n        header: {\n            root: \"sv_window_title\",\n            title: \"\",\n            button: \"\",\n            buttonExpanded: \"\",\n            buttonCollapsed: \"\",\n        },\n    },\n    variables: {\n        mobileWidth: \"--sv-mobile-width\",\n        themeMark: \"--sv-default-mark\"\n    },\n    tagbox: {\n        root: \"\",\n        popup: \"sv-dropdown-popup\",\n        small: \"sv_q_row__question--small\",\n        selectWrapper: \"sv_select_wrapper sv_q_tagbox_wrapper\",\n        other: \"sv_q_input sv_q_comment sv_q_selectbase__other\",\n        cleanButton: \"sv_q_tagbox_clean-button sv_q_dropdown_clean-button\",\n        cleanButtonSvg: \"sv_q_tagbox_clean-button-svg sv_q_dropdown_clean-button-svg\",\n        cleanButtonIconId: \"icon-clear_16x16\",\n        cleanItemButton: \"sv_q_tagbox-item_clean-button\",\n        cleanItemButtonSvg: \"sv_q_tagbox-item_clean-button-svg\",\n        cleanItemButtonIconId: \"icon-clear_16x16\",\n        control: \"sv_q_input sv_q_tagbox sv_q_dropdown_control\",\n        controlValue: \"sv_q_tagbox__value sv_q_dropdown__value\",\n        controlEmpty: \"sv_q_dropdown--empty sv_q_tagbox--empty\",\n        placeholderInput: \"sv_q_tagbox__placeholder\",\n        filterStringInput: \"sv_q_tagbox__filter-string-input sv_q_dropdown__filter-string-input\",\n        hint: \"sv_q_tagbox__hint\",\n        hintPrefix: \"sv_q_dropdown__hint-prefix sv_q_tagbox__hint-prefix\",\n        hintSuffix: \"sv_q_dropdown__hint-suffix sv_q_tagbox__hint-suffix\",\n        hintSuffixWrapper: \"sv_q_tagbox__hint-suffix-wrapper\"\n    },\n};\n_defaultV2Css__WEBPACK_IMPORTED_MODULE_0__[\"surveyCss\"][\"default\"] = defaultStandardCss;\n_defaultV2Css__WEBPACK_IMPORTED_MODULE_0__[\"surveyCss\"][\"orange\"] = defaultStandardCss;\n_defaultV2Css__WEBPACK_IMPORTED_MODULE_0__[\"surveyCss\"][\"darkblue\"] = defaultStandardCss;\n_defaultV2Css__WEBPACK_IMPORTED_MODULE_0__[\"surveyCss\"][\"darkrose\"] = defaultStandardCss;\n_defaultV2Css__WEBPACK_IMPORTED_MODULE_0__[\"surveyCss\"][\"stone\"] = defaultStandardCss;\n_defaultV2Css__WEBPACK_IMPORTED_MODULE_0__[\"surveyCss\"][\"winter\"] = defaultStandardCss;\n_defaultV2Css__WEBPACK_IMPORTED_MODULE_0__[\"surveyCss\"][\"winterstone\"] = defaultStandardCss;\n\n\n/***/ }),\n\n/***/ \"./src/defaultCss/defaultV2Css.ts\":\n/*!****************************************!*\\\n  !*** ./src/defaultCss/defaultV2Css.ts ***!\n  \\****************************************/\n/*! exports provided: surveyCss, defaultV2Css, defaultV2ThemeName */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1028248__) {\n\n\"use strict\";\n__nested_webpack_require_1028248__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_1028248__.d(__nested_webpack_exports__, \"surveyCss\", function() { return surveyCss; });\n/* harmony export (binding) */ __nested_webpack_require_1028248__.d(__nested_webpack_exports__, \"defaultV2Css\", function() { return defaultV2Css; });\n/* harmony export (binding) */ __nested_webpack_require_1028248__.d(__nested_webpack_exports__, \"defaultV2ThemeName\", function() { return defaultV2ThemeName; });\nvar surveyCss = {\n    currentType: \"\",\n    getCss: function () {\n        var loc = this.currentType ? this[this.currentType] : defaultV2Css;\n        if (!loc)\n            loc = defaultV2Css;\n        return loc;\n    },\n    getAvailableThemes: function () {\n        return Object.keys(this).filter(function (propertyName) { return [\"currentType\", \"getCss\", \"getAvailableThemes\"].indexOf(propertyName) === -1; });\n    }\n};\nvar defaultV2Css = {\n    root: \"sd-root-modern\",\n    rootMobile: \"sd-root-modern--mobile\",\n    rootReadOnly: \"sd-root--readonly\",\n    rootCompact: \"sd-root--compact\",\n    rootFitToContainer: \"sd-root-modern--full-container\",\n    rootBackgroundImage: \"sd-root_background-image\",\n    container: \"sd-container-modern\",\n    header: \"sd-title sd-container-modern__title\",\n    bodyContainer: \"sv-components-row\",\n    body: \"sv-components-column sv-components-column--expandable sd-body\",\n    bodyWithTimer: \"sd-body--with-timer\",\n    clockTimerRoot: \"sd-timer\",\n    clockTimerRootTop: \"sd-timer--top\",\n    clockTimerRootBottom: \"sd-timer--bottom\",\n    clockTimerProgress: \"sd-timer__progress\",\n    clockTimerProgressAnimation: \"sd-timer__progress--animation\",\n    clockTimerTextContainer: \"sd-timer__text-container\",\n    clockTimerMinorText: \"sd-timer__text--minor\",\n    clockTimerMajorText: \"sd-timer__text--major\",\n    bodyEmpty: \"sd-body sd-body--empty\",\n    bodyLoading: \"sd-body--loading\",\n    footer: \"sd-footer sd-body__navigation sd-clearfix\",\n    title: \"sd-title\",\n    description: \"sd-description\",\n    logo: \"sd-logo\",\n    logoImage: \"sd-logo__image\",\n    headerText: \"sd-header__text\",\n    headerClose: \"sd-hidden\",\n    navigationButton: \"\",\n    bodyNavigationButton: \"sd-btn\",\n    completedPage: \"sd-completedpage\",\n    completedBeforePage: \"sd-completed-before-page\",\n    timerRoot: \"sd-body__timer\",\n    navigation: {\n        complete: \"sd-btn--action sd-navigation__complete-btn\",\n        prev: \"sd-navigation__prev-btn\",\n        next: \"sd-navigation__next-btn\",\n        start: \"sd-navigation__start-btn\",\n        preview: \"sd-navigation__preview-btn\",\n        edit: \"\",\n    },\n    panel: {\n        asPage: \"sd-panel--as-page\",\n        number: \"sd-element__num\",\n        title: \"sd-title sd-element__title sd-panel__title\",\n        titleExpandable: \"sd-element__title--expandable\",\n        titleNumInline: \"sd-element__title--num-inline\",\n        titleExpanded: \"sd-element__title--expanded\",\n        titleCollapsed: \"sd-element__title--collapsed\",\n        titleDisabled: \"sd-element__title--disabled\",\n        titleOnExpand: \"sd-panel__title--expanded\",\n        titleOnError: \"sd-panel__title--error\",\n        titleBar: \"sd-action-title-bar\",\n        description: \"sd-description sd-panel__description\",\n        container: \"sd-element sd-element--complex sd-panel sd-row__panel\",\n        withFrame: \"sd-element--with-frame\",\n        content: \"sd-panel__content\",\n        icon: \"sd-panel__icon\",\n        iconExpanded: \"sd-panel__icon--expanded\",\n        footer: \"sd-panel__footer\",\n        requiredText: \"sd-panel__required-text\",\n        header: \"sd-panel__header sd-element__header sd-element__header--location-top\",\n        collapsed: \"sd-element--collapsed\",\n        expanded: \"sd-element--expanded\",\n        nested: \"sd-element--nested\",\n        invisible: \"sd-element--invisible\",\n        navigationButton: \"\",\n        compact: \"sd-element--with-frame sd-element--compact\"\n    },\n    paneldynamic: {\n        mainRoot: \"sd-element  sd-question sd-question--paneldynamic sd-element--complex sd-question--complex sd-row__question\",\n        empty: \"sd-question--empty\",\n        root: \"sd-paneldynamic\",\n        iconRemove: \"sd-hidden\",\n        navigation: \"sd-paneldynamic__navigation\",\n        title: \"sd-title sd-element__title sd-question__title\",\n        header: \"sd-paneldynamic__header sd-element__header\",\n        headerTab: \"sd-paneldynamic__header-tab\",\n        button: \"sd-action sd-paneldynamic__btn\",\n        buttonRemove: \"sd-action--negative sd-paneldynamic__remove-btn\",\n        buttonAdd: \"sd-paneldynamic__add-btn\",\n        buttonPrev: \"sd-paneldynamic__prev-btn sd-action--icon sd-action\",\n        buttonPrevDisabled: \"sd-action--disabled\",\n        buttonNextDisabled: \"sd-action--disabled\",\n        buttonNext: \"sd-paneldynamic__next-btn sd-action--icon sd-action\",\n        progressContainer: \"sd-paneldynamic__progress-container\",\n        progress: \"sd-progress\",\n        progressBar: \"sd-progress__bar\",\n        progressText: \"sd-paneldynamic__progress-text\",\n        separator: \"sd-paneldynamic__separator\",\n        panelWrapper: \"sd-paneldynamic__panel-wrapper\",\n        footer: \"sd-paneldynamic__footer\",\n        panelFooter: \"sd-paneldynamic__panel-footer\",\n        footerButtonsContainer: \"sd-paneldynamic__buttons-container\",\n        panelWrapperInRow: \"sd-paneldynamic__panel-wrapper--in-row\",\n        progressBtnIcon: \"icon-progressbuttonv2\",\n        noEntriesPlaceholder: \"sd-paneldynamic__placeholder sd-question__placeholder\",\n        compact: \"sd-element--with-frame sd-element--compact\",\n        tabsRoot: \"sd-tabs-toolbar\",\n        tabsLeft: \"sd-tabs-toolbar--left\",\n        tabsRight: \"sd-tabs-toolbar--right\",\n        tabsCenter: \"sd-tabs-toolbar--center\",\n        tabs: {\n            item: \"sd-tab-item\",\n            itemPressed: \"sd-tab-item--pressed\",\n            itemAsIcon: \"sd-tab-item--icon\",\n            itemIcon: \"sd-tab-item__icon\",\n            itemTitle: \"sd-tab-item__title\"\n        }\n    },\n    progress: \"sd-progress sd-body__progress\",\n    progressTop: \"sd-body__progress--top\",\n    progressBottom: \"sd-body__progress--bottom\",\n    progressBar: \"sd-progress__bar\",\n    progressText: \"sd-progress__text\",\n    progressButtonsContainerCenter: \"sd-progress-buttons__container-center\",\n    progressButtonsContainer: \"sd-progress-buttons__container\",\n    progressButtonsImageButtonLeft: \"sd-progress-buttons__image-button-left\",\n    progressButtonsImageButtonRight: \"sd-progress-buttons__image-button-right\",\n    progressButtonsImageButtonHidden: \"sd-progress-buttons__image-button--hidden\",\n    progressButtonsListContainer: \"sd-progress-buttons__list-container\",\n    progressButtonsList: \"sd-progress-buttons__list\",\n    progressButtonsListElementPassed: \"sd-progress-buttons__list-element--passed\",\n    progressButtonsListElementCurrent: \"sd-progress-buttons__list-element--current\",\n    progressButtonsListElementNonClickable: \"sd-progress-buttons__list-element--nonclickable\",\n    progressButtonsPageTitle: \"sd-progress-buttons__page-title\",\n    progressButtonsPageDescription: \"sd-progress-buttons__page-description\",\n    progressTextInBar: \"sd-hidden\",\n    page: {\n        root: \"sd-page sd-body__page\",\n        emptyHeaderRoot: \"sd-page__empty-header\",\n        title: \"sd-title sd-page__title\",\n        description: \"sd-description sd-page__description\"\n    },\n    pageTitle: \"sd-title sd-page__title\",\n    pageDescription: \"sd-description sd-page__description\",\n    row: \"sd-row sd-clearfix\",\n    rowMultiple: \"sd-row--multiple\",\n    rowCompact: \"sd-row--compact\",\n    pageRow: \"sd-page__row\",\n    question: {\n        mainRoot: \"sd-element sd-question sd-row__question\",\n        flowRoot: \"sd-element sd-question sd-row__question sd-row__question--flow\",\n        withFrame: \"sd-element--with-frame\",\n        asCell: \"sd-table__cell\",\n        answered: \"sd-question--answered\",\n        header: \"sd-question__header sd-element__header\",\n        headerLeft: \"sd-question__header--location--left\",\n        headerTop: \"sd-question__header--location-top sd-element__header--location-top\",\n        headerBottom: \"sd-question__header--location--bottom\",\n        content: \"sd-question__content\",\n        contentLeft: \"sd-question__content--left\",\n        titleNumInline: \"sd-element__title--num-inline\",\n        titleLeftRoot: \"sd-question--left\",\n        titleOnAnswer: \"sd-question__title--answer\",\n        titleEmpty: \"sd-question__title--empty\",\n        titleOnError: \"sd-question__title--error\",\n        title: \"sd-title sd-element__title sd-question__title\",\n        titleExpandable: \"sd-element__title--expandable\",\n        titleExpanded: \"sd-element__title--expanded\",\n        titleCollapsed: \"sd-element__title--collapsed\",\n        titleDisabled: \"sd-element__title--disabled\",\n        titleBar: \"sd-action-title-bar\",\n        requiredText: \"sd-question__required-text\",\n        number: \"sd-element__num\",\n        description: \"sd-description sd-question__description\",\n        descriptionUnderInput: \"sd-description sd-question__description sd-question__description--under-input\",\n        comment: \"sd-input sd-comment\",\n        other: \"sd-input sd-comment\",\n        required: \"sd-question--required\",\n        titleRequired: \"sd-question__title--required\",\n        indent: 20,\n        footer: \"sd-question__footer\",\n        commentArea: \"sd-question__comment-area\",\n        formGroup: \"sd-question__form-group\",\n        hasError: \"sd-question--error\",\n        collapsed: \"sd-element--collapsed\",\n        expanded: \"sd-element--expanded\",\n        nested: \"sd-element--nested\",\n        invisible: \"sd-element--invisible\",\n        composite: \"sd-element--complex\",\n        disabled: \"sd-question--disabled\",\n    },\n    image: {\n        mainRoot: \"sd-question sd-question--image\",\n        root: \"sd-image\",\n        image: \"sd-image__image\",\n        adaptive: \"sd-image__image--adaptive\",\n        noImage: \"sd-image__no-image\",\n        noImageSvgIconId: \"icon-no-image\",\n        withFrame: \"\"\n    },\n    html: {\n        mainRoot: \"sd-question sd-row__question sd-question--html\",\n        root: \"sd-html\",\n        withFrame: \"\"\n    },\n    error: {\n        root: \"sd-question__erbox\",\n        icon: \"\",\n        item: \"\",\n        tooltip: \"sd-question__erbox--tooltip\",\n        outsideQuestion: \"sd-question__erbox--outside-question\",\n        aboveQuestion: \"sd-question__erbox--above-question\",\n        belowQuestion: \"sd-question__erbox--below-question\",\n        locationTop: \"sd-question__erbox--location--top\",\n        locationBottom: \"sd-question__erbox--location--bottom\"\n    },\n    checkbox: {\n        root: \"sd-selectbase\",\n        rootMobile: \"sd-selectbase--mobile\",\n        rootRow: \"sd-selectbase--row\",\n        rootMultiColumn: \"sd-selectbase--multi-column\",\n        item: \"sd-item sd-checkbox sd-selectbase__item\",\n        itemOnError: \"sd-item--error\",\n        itemSelectAll: \"sd-checkbox--selectall\",\n        itemNone: \"sd-checkbox--none\",\n        itemDisabled: \"sd-item--disabled sd-checkbox--disabled\",\n        itemChecked: \"sd-item--checked sd-checkbox--checked\",\n        itemHover: \"sd-item--allowhover sd-checkbox--allowhover\",\n        itemInline: \"sd-selectbase__item--inline\",\n        label: \"sd-selectbase__label\",\n        labelChecked: \"\",\n        itemControl: \"sd-visuallyhidden sd-item__control sd-checkbox__control\",\n        itemDecorator: \"sd-item__svg sd-checkbox__svg\",\n        itemSvgIconId: \"#icon-v2check\",\n        controlLabel: \"sd-item__control-label\",\n        materialDecorator: \"sd-item__decorator sd-checkbox__decorator\",\n        other: \"sd-input sd-comment sd-selectbase__other\",\n        column: \"sd-selectbase__column\",\n    },\n    radiogroup: {\n        root: \"sd-selectbase\",\n        rootMobile: \"sd-selectbase--mobile\",\n        rootRow: \"sd-selectbase--row\",\n        rootMultiColumn: \"sd-selectbase--multi-column\",\n        item: \"sd-item sd-radio sd-selectbase__item\",\n        itemOnError: \"sd-item--error\",\n        itemInline: \"sd-selectbase__item--inline\",\n        label: \"sd-selectbase__label\",\n        labelChecked: \"\",\n        itemDisabled: \"sd-item--disabled sd-radio--disabled\",\n        itemChecked: \"sd-item--checked sd-radio--checked\",\n        itemHover: \"sd-item--allowhover sd-radio--allowhover\",\n        itemControl: \"sd-visuallyhidden sd-item__control sd-radio__control\",\n        itemDecorator: \"sd-item__svg sd-radio__svg\",\n        controlLabel: \"sd-item__control-label\",\n        materialDecorator: \"sd-item__decorator sd-radio__decorator\",\n        other: \"sd-input sd-comment sd-selectbase__other\",\n        clearButton: \"\",\n        column: \"sd-selectbase__column\"\n    },\n    boolean: {\n        mainRoot: \"sd-element sd-question sd-row__question sd-question--boolean\",\n        root: \"sv_qcbc sv_qbln sd-scrollable-container sd-boolean-root\",\n        rootRadio: \"sv_qcbc sv_qbln sd-scrollable-container sd-scrollable-container--compact\",\n        item: \"sd-boolean\",\n        itemOnError: \"sd-boolean--error\",\n        control: \"sd-boolean__control sd-visuallyhidden\",\n        itemChecked: \"sd-boolean--checked\",\n        itemIndeterminate: \"sd-boolean--indeterminate\",\n        itemDisabled: \"sd-boolean--disabled\",\n        itemHover: \"sd-boolean--allowhover\",\n        label: \"sd-boolean__label\",\n        labelTrue: \"sd-boolean__label--true\",\n        labelFalse: \"sd-boolean__label--false\",\n        switch: \"sd-boolean__switch\",\n        disabledLabel: \"sd-checkbox__label--disabled\",\n        sliderText: \"sd-boolean__thumb-text\",\n        slider: \"sd-boolean__thumb\",\n        sliderGhost: \"sd-boolean__thumb-ghost\",\n        //radio\n        radioItem: \"sd-item\",\n        radioItemChecked: \"sd-item--checked sd-radio--checked\",\n        radioLabel: \"sd-selectbase__label\",\n        radioControlLabel: \"sd-item__control-label\",\n        radioFieldset: \"sd-selectbase\",\n        itemRadioDecorator: \"sd-item__svg sd-radio__svg\",\n        materialRadioDecorator: \"sd-item__decorator sd-radio__decorator\",\n        itemRadioControl: \"sd-visuallyhidden sd-item__control sd-radio__control\",\n        //end radio\n        //checkbox\n        rootCheckbox: \"sd-selectbase\",\n        checkboxItem: \"sd-item sd-selectbase__item sd-checkbox\",\n        checkboxLabel: \"sd-selectbase__label\",\n        checkboxItemOnError: \"sd-item--error\",\n        checkboxItemIndeterminate: \"sd-checkbox--intermediate\",\n        checkboxItemChecked: \"sd-item--checked sd-checkbox--checked\",\n        checkboxItemDecorator: \"sd-item__svg sd-checkbox__svg\",\n        checkboxItemDisabled: \"sd-item--disabled sd-checkbox--disabled\",\n        controlCheckbox: \"sd-visuallyhidden sd-item__control sd-checkbox__control\",\n        checkboxMaterialDecorator: \"sd-item__decorator sd-checkbox__decorator\",\n        checkboxControlLabel: \"sd-item__control-label\",\n        svgIconCheckedId: \"#icon-v2check\",\n    },\n    text: {\n        root: \"sd-input sd-text\",\n        small: \"sd-row__question--small\",\n        controlDisabled: \"sd-input--disabled\",\n        content: \"sd-text__content sd-question__content\",\n        remainingCharacterCounter: \"sd-remaining-character-counter\",\n        onError: \"sd-input--error\"\n    },\n    multipletext: {\n        root: \"sd-multipletext\",\n        rootMobile: \"sd-multipletext--mobile\",\n        itemLabel: \"sd-multipletext__item-container sd-input\",\n        itemLabelOnError: \"sd-multipletext__item-container--error\",\n        itemLabelAllowFocus: \"sd-multipletext__item-container--allow-focus\",\n        itemLabelAnswered: \"sd-multipletext__item-container--answered\",\n        item: \"sd-multipletext__item\",\n        itemTitle: \"sd-multipletext__item-title\",\n        content: \"sd-multipletext__content sd-question__content\",\n        row: \"sd-multipletext__row\",\n        cell: \"sd-multipletext__cell\",\n        cellError: \"sd-multipletext__cell--error\",\n        cellErrorTop: \"sd-multipletext__cell--error-top\",\n        cellErrorBottom: \"sd-multipletext__cell--error-bottom\"\n    },\n    dropdown: {\n        root: \"sd-selectbase\",\n        popup: \"sv-dropdown-popup\",\n        small: \"sd-row__question--small\",\n        selectWrapper: \"sv-dropdown_select-wrapper\",\n        other: \"sd-input sd-comment sd-selectbase__other\",\n        onError: \"sd-input--error\",\n        label: \"sd-selectbase__label\",\n        item: \"sd-item sd-radio sd-selectbase__item\",\n        itemDisabled: \"sd-item--disabled sd-radio--disabled\",\n        itemChecked: \"sd-item--checked sd-radio--checked\",\n        itemHover: \"sd-item--allowhover sd-radio--allowhover\",\n        itemControl: \"sd-visuallyhidden sd-item__control sd-radio__control\",\n        itemDecorator: \"sd-item__svg sd-radio__svg\",\n        cleanButton: \"sd-dropdown_clean-button\",\n        cleanButtonSvg: \"sd-dropdown_clean-button-svg\",\n        cleanButtonIconId: \"icon-clear\",\n        chevronButton: \"sd-dropdown_chevron-button\",\n        chevronButtonSvg: \"sd-dropdown_chevron-button-svg\",\n        chevronButtonIconId: \"icon-chevron\",\n        control: \"sd-input sd-dropdown\",\n        controlInputFieldComponent: \"sd-dropdown__input-field-component\",\n        controlValue: \"sd-dropdown__value\",\n        controlDisabled: \"sd-input--disabled\",\n        controlEmpty: \"sd-dropdown--empty\",\n        controlLabel: \"sd-item__control-label\",\n        filterStringInput: \"sd-dropdown__filter-string-input\",\n        materialDecorator: \"sd-item__decorator sd-radio__decorator\",\n        hintPrefix: \"sd-dropdown__hint-prefix\",\n        hintSuffix: \"sd-dropdown__hint-suffix\"\n    },\n    imagepicker: {\n        mainRoot: \"sd-element sd-question sd-row__question\",\n        root: \"sd-selectbase sd-imagepicker\",\n        rootColumn: \"sd-imagepicker--column\",\n        item: \"sd-imagepicker__item\",\n        itemOnError: \"sd-imagepicker__item--error\",\n        itemInline: \"sd-imagepicker__item--inline\",\n        itemChecked: \"sd-imagepicker__item--checked\",\n        itemDisabled: \"sd-imagepicker__item--disabled\",\n        itemHover: \"sd-imagepicker__item--allowhover\",\n        label: \"sd-imagepicker__label\",\n        itemDecorator: \"sd-imagepicker__item-decorator\",\n        imageContainer: \"sd-imagepicker__image-container\",\n        itemControl: \"sd-imagepicker__control sd-visuallyhidden\",\n        image: \"sd-imagepicker__image\",\n        itemText: \"sd-imagepicker__text\",\n        other: \"sd-input sd-comment\",\n        itemNoImage: \"sd-imagepicker__no-image\",\n        itemNoImageSvgIcon: \"sd-imagepicker__no-image-svg\",\n        itemNoImageSvgIconId: \"icon-no-image\",\n        column: \"sd-selectbase__column sd-imagepicker__column\",\n        checkedItemDecorator: \"sd-imagepicker__check-decorator\",\n        checkedItemSvgIcon: \"sd-imagepicker__check-icon\",\n        checkedItemSvgIconId: \"icon-v2check_24x24\",\n    },\n    matrix: {\n        mainRoot: \"sd-element sd-question sd-row__question sd-element--complex sd-question--complex sd-question--table\",\n        tableWrapper: \"sd-matrix sd-table-wrapper\",\n        root: \"sd-table sd-matrix__table\",\n        noHeader: \"sd-table--no-header\",\n        rootVerticalAlignTop: \"sd-table--align-top\",\n        rootVerticalAlignMiddle: \"sd-table--align-middle\",\n        rootAlternateRows: \"sd-table--alternate-rows\",\n        rowError: \"sd-matrix__row--error\",\n        cell: \"sd-table__cell sd-matrix__cell\",\n        row: \"sd-table__row\",\n        headerCell: \"sd-table__cell sd-table__cell--header\",\n        rowTextCell: \"sd-table__cell sd-matrix__cell sd-table__cell--row-text\",\n        label: \"sd-item sd-radio sd-matrix__label\",\n        itemOnError: \"sd-item--error\",\n        itemValue: \"sd-visuallyhidden sd-item__control sd-radio__control\",\n        itemChecked: \"sd-item--checked sd-radio--checked\",\n        itemDisabled: \"sd-item--disabled sd-radio--disabled\",\n        itemHover: \"sd-radio--allowhover\",\n        materialDecorator: \"sd-item__decorator sd-radio__decorator\",\n        itemDecorator: \"sd-item__svg sd-radio__svg\",\n        cellText: \"sd-matrix__text\",\n        cellTextSelected: \"sd-matrix__text--checked\",\n        cellTextDisabled: \"sd-matrix__text--disabled\",\n        cellResponsiveTitle: \"sd-matrix__responsive-title\",\n        compact: \"sd-element--with-frame sd-element--compact\"\n    },\n    matrixdropdown: {\n        mainRoot: \"sd-element sd-question sd-row__question sd-element--complex sd-question--complex sd-question--table\",\n        rootScroll: \"sd-question--scroll\",\n        root: \"sd-table sd-matrixdropdown\",\n        noHeader: \"sd-table--no-header\",\n        rootVerticalAlignTop: \"sd-table--align-top\",\n        rootVerticalAlignMiddle: \"sd-table--align-middle\",\n        tableWrapper: \"sd-table-wrapper\",\n        rootAlternateRows: \"sd-table--alternate-rows\",\n        cell: \"sd-table__cell\",\n        errorsCell: \"sd-table__cell--error\",\n        errorsCellTop: \"sd-table__cell--error-top\",\n        errorsCellBottom: \"sd-table__cell--error-bottom\",\n        itemCell: \"sd-table__cell--item\",\n        row: \"sd-table__row\",\n        headerCell: \"sd-table__cell sd-table__cell--header\",\n        rowTextCell: \"sd-table__cell sd-table__cell--row-text\",\n        columnTitleCell: \"sd-table__cell--column-title\",\n        cellRequiredText: \"sd-question__required-text\",\n        detailButton: \"sd-table__cell--detail-button\",\n        detailButtonExpanded: \"sd-table__cell--detail-button--expanded\",\n        detailIcon: \"sd-detail-panel__icon\",\n        detailIconExpanded: \"sd-detail-panel__icon--expanded\",\n        detailIconId: \"icon-expanddetail\",\n        detailIconExpandedId: \"icon-collapsedetail\",\n        detailPanelCell: \"sd-table__cell--detail-panel\",\n        actionsCell: \"sd-table__cell sd-table__cell--actions\",\n        actionsCellDrag: \"sd-table__cell--drag\",\n        emptyCell: \"sd-table__cell--empty\",\n        verticalCell: \"sd-table__cell--vertical\",\n        cellQuestionWrapper: \"sd-table__question-wrapper\",\n        compact: \"sd-element--with-frame sd-element--compact\"\n    },\n    matrixdynamic: {\n        mainRoot: \"sd-element sd-question sd-row__question sd-element--complex sd-question--complex sd-question--table\",\n        rootScroll: \"sd-question--scroll\",\n        empty: \"sd-question--empty\",\n        root: \"sd-table sd-matrixdynamic\",\n        noHeader: \"sd-table--no-header\",\n        tableWrapper: \"sd-table-wrapper\",\n        content: \"sd-matrixdynamic__content sd-question__content\",\n        cell: \"sd-table__cell\",\n        row: \"sd-table__row\",\n        itemCell: \"sd-table__cell--item\",\n        headerCell: \"sd-table__cell sd-table__cell--header\",\n        rowTextCell: \"sd-table__cell sd-table__cell--row-text\",\n        columnTitleCell: \"sd-table__cell--column-title\",\n        cellRequiredText: \"sd-question__required-text\",\n        button: \"sd-action sd-matrixdynamic__btn\",\n        detailRow: \"sd-table__row sd-table__row--detail\",\n        detailButton: \"sd-table__cell--detail-button\",\n        detailButtonExpanded: \"sd-table__cell--detail-button--expanded\",\n        detailIcon: \"sd-detail-panel__icon\",\n        detailIconExpanded: \"sd-detail-panel__icon--expanded\",\n        detailIconId: \"icon-expanddetail\",\n        detailIconExpandedId: \"icon-collapsedetail\",\n        detailPanelCell: \"sd-table__cell--detail-panel\",\n        actionsCell: \"sd-table__cell sd-table__cell--actions\",\n        actionsCellDrag: \"sd-table__cell--drag\",\n        buttonAdd: \"sd-matrixdynamic__add-btn\",\n        buttonRemove: \"sd-action--negative sd-matrixdynamic__remove-btn\",\n        iconAdd: \"sd-hidden\",\n        iconRemove: \"\",\n        dragElementDecorator: \"sd-drag-element__svg\",\n        iconDragElement: \"#icon-v2dragelement_16x16\",\n        footer: \"sd-matrixdynamic__footer\",\n        emptyRowsSection: \"sd-matrixdynamic__placeholder sd-question__placeholder\",\n        iconDrag: \"sv-matrixdynamic__drag-icon\",\n        ghostRow: \"sv-matrix-row--drag-drop-ghost-mod\",\n        emptyCell: \"sd-table__cell--empty\",\n        verticalCell: \"sd-table__cell--vertical\",\n        cellQuestionWrapper: \"sd-table__question-wrapper\",\n        errorsCell: \"sd-table__cell--error\",\n        errorsCellTop: \"sd-table__cell--error-top\",\n        errorsCellBottom: \"sd-table__cell--error-bottom\",\n        compact: \"sd-element--with-frame sd-element--compact\",\n    },\n    rating: {\n        rootDropdown: \"sd-scrollable-container sd-scrollable-container--compact sd-selectbase\",\n        root: \"sd-scrollable-container sd-rating\",\n        rootWrappable: \"sd-scrollable-container sd-rating sd-rating--wrappable\",\n        item: \"sd-rating__item\",\n        itemOnError: \"sd-rating__item--error\",\n        itemHover: \"sd-rating__item--allowhover\",\n        selected: \"sd-rating__item--selected\",\n        itemStar: \"sd-rating__item-star\",\n        itemStarOnError: \"sd-rating__item-star--error\",\n        itemStarHover: \"sd-rating__item-star--allowhover\",\n        itemStarSelected: \"sd-rating__item-star--selected\",\n        itemStarDisabled: \"sd-rating__item-star--disabled\",\n        itemStarHighlighted: \"sd-rating__item-star--highlighted\",\n        itemStarUnhighlighted: \"sd-rating__item-star--unhighlighted\",\n        itemStarSmall: \"sd-rating__item-star--small\",\n        itemSmiley: \"sd-rating__item-smiley\",\n        itemSmileyOnError: \"sd-rating__item-smiley--error\",\n        itemSmileyHover: \"sd-rating__item-smiley--allowhover\",\n        itemSmileySelected: \"sd-rating__item-smiley--selected\",\n        itemSmileyDisabled: \"sd-rating__item-smiley--disabled\",\n        itemSmileyHighlighted: \"sd-rating__item-star--highlighted\",\n        itemSmileyScaleColored: \"sd-rating__item-smiley--scale-colored\",\n        itemSmileyRateColored: \"sd-rating__item-smiley--rate-colored\",\n        itemSmileySmall: \"sd-rating__item-smiley--small\",\n        minText: \"sd-rating__item-text sd-rating__min-text\",\n        itemText: \"sd-rating__item-text\",\n        maxText: \"sd-rating__item-text sd-rating__max-text\",\n        itemDisabled: \"sd-rating__item--disabled\",\n        itemFixedSize: \"sd-rating__item--fixed-size\",\n        control: \"sd-input sd-dropdown\",\n        itemSmall: \"sd-rating--small\",\n        selectWrapper: \"sv-dropdown_select-wrapper\",\n        controlValue: \"sd-dropdown__value\",\n        controlDisabled: \"sd-input--disabled\",\n        controlEmpty: \"sd-dropdown--empty\",\n        filterStringInput: \"sd-dropdown__filter-string-input\",\n        chevronButton: \"sd-dropdown_chevron-button\",\n        chevronButtonSvg: \"sd-dropdown_chevron-button-svg\",\n        chevronButtonIconId: \"icon-chevron\",\n        popup: \"sv-dropdown-popup\",\n        onError: \"sd-input--error\",\n    },\n    comment: {\n        root: \"sd-input sd-comment\",\n        small: \"sd-row__question--small\",\n        controlDisabled: \"sd-input--disabled\",\n        content: \"sd-comment__content sd-question__content\",\n        remainingCharacterCounter: \"sd-remaining-character-counter\",\n        onError: \"sd-input--error\"\n    },\n    expression: \"sd-expression\",\n    file: {\n        root: \"sd-file\",\n        rootDragging: \"sd-file--dragging\",\n        rootAnswered: \"sd-file--answered\",\n        other: \"sd-input sd-comment\",\n        placeholderInput: \"sd-visuallyhidden\",\n        preview: \"sd-file__preview\",\n        fileSign: \"\",\n        fileList: \"sd-file__list\",\n        fileSignBottom: \"sd-file__sign\",\n        dragArea: \"sd-file__drag-area\",\n        dragAreaActive: \"sd-file__drag-area--active\",\n        fileDecorator: \"sd-file__decorator\",\n        onError: \"sd-file__decorator--error\",\n        fileDecoratorDrag: \"sd-file__decorator--drag\",\n        fileInput: \"sd-visuallyhidden\",\n        noFileChosen: \"sd-description sd-file__no-file-chosen\",\n        chooseFile: \"sd-file__choose-btn\",\n        chooseFileAsText: \"sd-action sd-file__choose-btn--text\",\n        chooseFileAsTextDisabled: \"sd-action--disabled\",\n        chooseFileAsIcon: \"sd-file__choose-btn--icon\",\n        chooseFileIconId: \"icon-choosefile\",\n        disabled: \"sd-file__choose-btn--disabled\",\n        //todo: remove it in v2\n        removeButton: \"sd-context-btn--negative\",\n        removeButtonBottom: \"\",\n        //\n        removeButtonIconId: \"icon-clear\",\n        removeFile: \"sd-hidden\",\n        removeFileSvg: \"\",\n        removeFileSvgIconId: \"icon-delete\",\n        wrapper: \"sd-file__wrapper\",\n        defaultImage: \"sd-file__default-image\",\n        defaultImageIconId: \"icon-defaultfile\",\n        leftIconId: \"icon-arrowleft\",\n        rightIconId: \"icon-arrowright\",\n        removeFileButton: \"sd-context-btn--negative sd-file__remove-file-button\",\n        dragAreaPlaceholder: \"sd-file__drag-area-placeholder\",\n        imageWrapper: \"sd-file__image-wrapper\",\n        single: \"sd-file--single\",\n        singleImage: \"sd-file--single-image\",\n        mobile: \"sd-file--mobile\",\n        videoContainer: \"sd-file__video-container\",\n        contextButton: \"sd-context-btn\",\n        video: \"sd-file__video\",\n        actionsContainer: \"sd-file__actions-container\",\n        closeCameraButton: \"sd-file__close-camera-button\",\n        changeCameraButton: \"sd-file__change-camera-button\",\n        takePictureButton: \"sd-file__take-picture-button\",\n        loadingIndicator: \"sd-file__loading-indicator\",\n    },\n    signaturepad: {\n        mainRoot: \"sd-element sd-question sd-question--signature sd-row__question\",\n        root: \"sd-signaturepad sjs_sp_container\",\n        small: \"sd-row__question--small\",\n        controls: \"sjs_sp_controls sd-signaturepad__controls\",\n        placeholder: \"sjs_sp_placeholder\",\n        canvas: \"sjs_sp_canvas sd-signaturepad__canvas\",\n        backgroundImage: \"sjs_sp__background-image sd-signaturepad__background-image\",\n        clearButton: \"sjs_sp_clear sd-context-btn sd-context-btn--negative sd-signaturepad__clear\",\n        clearButtonIconId: \"icon-clear\"\n    },\n    saveData: {\n        root: \"sv-save-data_root\",\n        info: \"sv-save-data_info\",\n        error: \"sv-save-data_error\",\n        success: \"sv-save-data_success\",\n        button: \"sv-save-data_button\",\n        shown: \"sv-save-data_root--shown\"\n    },\n    window: {\n        root: \"sv_window\",\n        body: \"sv_window_content\",\n        header: {\n            root: \"sv_window_title\",\n            title: \"\",\n            button: \"sv_window_button\",\n            buttonExpanded: \"\",\n            buttonCollapsed: \"\"\n        }\n    },\n    ranking: {\n        root: \"sv-ranking\",\n        rootMobileMod: \"sv-ranking--mobile\",\n        rootDragMod: \"sv-ranking--drag\",\n        rootDisabled: \"sd-ranking--disabled\",\n        rootDesignMode: \"sv-ranking--design-mode\",\n        rootDragHandleAreaIcon: \"sv-ranking--drag-handle-area-icon\",\n        rootSelectToRankMod: \"sv-ranking--select-to-rank\",\n        rootSelectToRankAlignVertical: \"sv-ranking--select-to-rank-vertical\",\n        rootSelectToRankAlignHorizontal: \"sv-ranking--select-to-rank-horizontal\",\n        item: \"sv-ranking-item\",\n        itemContent: \"sv-ranking-item__content sd-ranking-item__content\",\n        itemIndex: \"sv-ranking-item__index sd-ranking-item__index\",\n        itemIndexEmptyMode: \"sv-ranking-item__index--empty sd-ranking-item__index--empty\",\n        // itemText: \"sv-ranking-item__text\",\n        itemDisabled: \"sv-ranking-item--disabled\",\n        controlLabel: \"sv-ranking-item__text\",\n        itemGhostNode: \"sv-ranking-item__ghost\",\n        itemIconContainer: \"sv-ranking-item__icon-container\",\n        itemIcon: \"sv-ranking-item__icon\",\n        itemIconHoverMod: \"sv-ranking-item__icon--hover\",\n        itemIconFocusMod: \"sv-ranking-item__icon--focus\",\n        itemGhostMod: \"sv-ranking-item--ghost\",\n        itemDragMod: \"sv-ranking--drag\",\n        itemOnError: \"sv-ranking-item--error\",\n        container: \"sv-ranking__container\",\n        containerEmptyMode: \"sv-ranking__container--empty\",\n        containerFromMode: \"sv-ranking__container--from\",\n        containerToMode: \"sv-ranking__container--to\",\n        containerPlaceholder: \"sv-ranking__container-placeholder\",\n        containersDivider: \"sv-ranking__containers-divider\",\n    },\n    buttongroup: {\n        root: \"sv-button-group\",\n        item: \"sv-button-group__item\",\n        itemIcon: \"sv-button-group__item-icon\",\n        itemDecorator: \"sv-button-group__item-decorator\",\n        itemCaption: \"sv-button-group__item-caption\",\n        itemHover: \"sv-button-group__item--hover\",\n        itemSelected: \"sv-button-group__item--selected\",\n        itemDisabled: \"sv-button-group__item--disabled\",\n        itemControl: \"sv-visuallyhidden\",\n    },\n    list: {\n        root: \"sv-list__container sd-list\",\n        item: \"sv-list__item sd-list__item\",\n        itemBody: \"sv-list__item-body sd-list__item-body\",\n        itemSelected: \"sv-list__item--selected sd-list__item--selected\",\n        itemFocused: \"sv-list__item--focused sd-list__item--focused\",\n    },\n    actionBar: {\n        root: \"sd-action-bar\",\n        item: \"sd-action\",\n        defaultSizeMode: \"\",\n        smallSizeMode: \"\",\n        itemPressed: \"sd-action--pressed\",\n        itemAsIcon: \"sd-action--icon\",\n        itemIcon: \"sd-action__icon\",\n        itemTitle: \"sd-action__title\",\n    },\n    variables: {\n        mobileWidth: \"--sd-mobile-width\",\n        themeMark: \"--sv-defaultV2-mark\"\n    },\n    tagbox: {\n        root: \"sd-selectbase\",\n        popup: \"sv-dropdown-popup\",\n        small: \"sd-row__question--small\",\n        selectWrapper: \"sv-dropdown_select-wrapper\",\n        other: \"sd-input sd-comment sd-selectbase__other\",\n        onError: \"sd-input--error\",\n        label: \"sd-selectbase__label\",\n        itemSvgIconId: \"#icon-v2check\",\n        item: \"sd-item sd-checkbox sd-selectbase__item\",\n        itemDisabled: \"sd-item--disabled sd-checkbox--disabled\",\n        itemChecked: \"sd-item--checked sd-checkbox--checked\",\n        itemHover: \"sd-item--allowhover sd-checkbox--allowhover\",\n        itemControl: \"sd-visuallyhidden sd-item__control sd-checkbox__control\",\n        itemDecorator: \"sd-item__svg sd-checkbox__svg\",\n        cleanButton: \"sd-tagbox_clean-button sd-dropdown_clean-button\",\n        cleanButtonSvg: \"sd-tagbox_clean-button-svg sd-dropdown_clean-button-svg\",\n        cleanButtonIconId: \"icon-clear\",\n        cleanItemButton: \"sd-tagbox-item_clean-button\",\n        cleanItemButtonSvg: \"sd-tagbox-item_clean-button-svg\",\n        cleanItemButtonIconId: \"icon-clear_16x16\",\n        chevronButton: \"sd-dropdown_chevron-button\",\n        chevronButtonSvg: \"sd-dropdown_chevron-button-svg\",\n        chevronButtonIconId: \"icon-chevron\",\n        control: \"sd-input sd-tagbox sd-dropdown\",\n        controlValue: \"sd-tagbox__value sd-dropdown__value\",\n        controlValueItems: \"sd-tagbox__value-items\",\n        placeholderInput: \"sd-tagbox__placeholder\",\n        controlDisabled: \"sd-input--disabled\",\n        controlEmpty: \"sd-dropdown--empty sd-tagbox--empty\",\n        controlLabel: \"sd-item__control-label\",\n        filterStringInput: \"sd-tagbox__filter-string-input sd-dropdown__filter-string-input\",\n        materialDecorator: \"sd-item__decorator sd-checkbox__decorator\",\n        hint: \"sd-tagbox__hint\",\n        hintPrefix: \"sd-dropdown__hint-prefix sd-tagbox__hint-prefix\",\n        hintSuffix: \"sd-dropdown__hint-suffix sd-tagbox__hint-suffix\",\n        hintSuffixWrapper: \"sd-tagbox__hint-suffix-wrapper\"\n    },\n};\nvar defaultV2ThemeName = \"defaultV2\";\nsurveyCss[defaultV2ThemeName] = defaultV2Css;\n\n\n/***/ }),\n\n/***/ \"./src/defaultTitle.ts\":\n/*!*****************************!*\\\n  !*** ./src/defaultTitle.ts ***!\n  \\*****************************/\n/*! exports provided: DefaultTitleModel */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1063425__) {\n\n\"use strict\";\n__nested_webpack_require_1063425__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_1063425__.d(__nested_webpack_exports__, \"DefaultTitleModel\", function() { return DefaultTitleModel; });\n/* harmony import */ var _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1063425__(/*! ./utils/cssClassBuilder */ \"./src/utils/cssClassBuilder.ts\");\n\nvar DefaultTitleModel = /** @class */ (function () {\n    function DefaultTitleModel() {\n    }\n    DefaultTitleModel.getIconCss = function (cssClasses, isCollapsed) {\n        return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_0__[\"CssClassBuilder\"]()\n            .append(cssClasses.icon)\n            .append(cssClasses.iconExpanded, !isCollapsed)\n            .toString();\n    };\n    return DefaultTitleModel;\n}());\n\n\n\n/***/ }),\n\n/***/ \"./src/drag-drop-helper-v1.ts\":\n/*!************************************!*\\\n  !*** ./src/drag-drop-helper-v1.ts ***!\n  \\************************************/\n/*! exports provided: DragDropInfo */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1064493__) {\n\n\"use strict\";\n__nested_webpack_require_1064493__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_1064493__.d(__nested_webpack_exports__, \"DragDropInfo\", function() { return DragDropInfo; });\nvar DragDropInfo = /** @class */ (function () {\n    function DragDropInfo(source, target, nestedPanelDepth) {\n        if (nestedPanelDepth === void 0) { nestedPanelDepth = -1; }\n        this.source = source;\n        this.target = target;\n        this.nestedPanelDepth = nestedPanelDepth;\n    }\n    return DragDropInfo;\n}());\n\n\n\n/***/ }),\n\n/***/ \"./src/drag-drop-page-helper-v1.ts\":\n/*!*****************************************!*\\\n  !*** ./src/drag-drop-page-helper-v1.ts ***!\n  \\*****************************************/\n/*! exports provided: DragDropPageHelperV1 */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1065316__) {\n\n\"use strict\";\n__nested_webpack_require_1065316__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_1065316__.d(__nested_webpack_exports__, \"DragDropPageHelperV1\", function() { return DragDropPageHelperV1; });\n/* harmony import */ var _drag_drop_helper_v1__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1065316__(/*! ./drag-drop-helper-v1 */ \"./src/drag-drop-helper-v1.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1065316__(/*! ./settings */ \"./src/settings.ts\");\n\n\nvar DragDropPageHelperV1 = /** @class */ (function () {\n    function DragDropPageHelperV1(page) {\n        this.page = page;\n    }\n    DragDropPageHelperV1.prototype.getDragDropInfo = function () { return this.dragDropInfo; };\n    DragDropPageHelperV1.prototype.dragDropStart = function (src, target, nestedPanelDepth) {\n        if (nestedPanelDepth === void 0) { nestedPanelDepth = -1; }\n        this.dragDropInfo = new _drag_drop_helper_v1__WEBPACK_IMPORTED_MODULE_0__[\"DragDropInfo\"](src, target, nestedPanelDepth);\n    };\n    DragDropPageHelperV1.prototype.dragDropMoveTo = function (destination, isBottom, isEdge) {\n        if (isBottom === void 0) { isBottom = false; }\n        if (isEdge === void 0) { isEdge = false; }\n        if (!this.dragDropInfo)\n            return false;\n        this.dragDropInfo.destination = destination;\n        this.dragDropInfo.isBottom = isBottom;\n        this.dragDropInfo.isEdge = isEdge;\n        this.correctDragDropInfo(this.dragDropInfo);\n        if (!this.dragDropCanDropTagert())\n            return false;\n        if (!this.dragDropCanDropSource() || !this.dragDropAllowFromSurvey()) {\n            if (!!this.dragDropInfo.source) {\n                var row = this.page.dragDropFindRow(this.dragDropInfo.target);\n                this.page.updateRowsRemoveElementFromRow(this.dragDropInfo.target, row);\n            }\n            return false;\n        }\n        this.page.dragDropAddTarget(this.dragDropInfo);\n        return true;\n    };\n    DragDropPageHelperV1.prototype.correctDragDropInfo = function (dragDropInfo) {\n        if (!dragDropInfo.destination)\n            return;\n        var panel = dragDropInfo.destination.isPanel\n            ? dragDropInfo.destination\n            : null;\n        if (!panel)\n            return;\n        if (!dragDropInfo.target.isLayoutTypeSupported(panel.getChildrenLayoutType())) {\n            dragDropInfo.isEdge = true;\n        }\n    };\n    DragDropPageHelperV1.prototype.dragDropAllowFromSurvey = function () {\n        var dest = this.dragDropInfo.destination;\n        if (!dest || !this.page.survey)\n            return true;\n        var insertBefore = null;\n        var insertAfter = null;\n        var parent = dest.isPage || (!this.dragDropInfo.isEdge && dest.isPanel)\n            ? dest\n            : dest.parent;\n        if (!dest.isPage) {\n            var container = dest.parent;\n            if (!!container) {\n                var elements = container.elements;\n                var index = elements.indexOf(dest);\n                if (index > -1) {\n                    insertBefore = dest;\n                    insertAfter = dest;\n                    if (this.dragDropInfo.isBottom) {\n                        insertBefore =\n                            index < elements.length - 1 ? elements[index + 1] : null;\n                    }\n                    else {\n                        insertAfter = index > 0 ? elements[index - 1] : null;\n                    }\n                }\n            }\n        }\n        var options = {\n            allow: true,\n            target: this.dragDropInfo.target,\n            source: this.dragDropInfo.source,\n            parent: parent,\n            insertAfter: insertAfter,\n            insertBefore: insertBefore,\n        };\n        return this.page.survey.dragAndDropAllow(options);\n    };\n    DragDropPageHelperV1.prototype.dragDropFinish = function (isCancel) {\n        if (isCancel === void 0) { isCancel = false; }\n        if (!this.dragDropInfo)\n            return;\n        var target = this.dragDropInfo.target;\n        var src = this.dragDropInfo.source;\n        var dest = this.dragDropInfo.destination;\n        var row = this.page.dragDropFindRow(target);\n        var targetIndex = this.dragDropGetElementIndex(target, row);\n        this.page.updateRowsRemoveElementFromRow(target, row);\n        var elementsToSetSWNL = [];\n        var elementsToResetSWNL = [];\n        if (!isCancel && !!row) {\n            var isSamePanel = false;\n            if (this.page.isDesignMode && _settings__WEBPACK_IMPORTED_MODULE_1__[\"settings\"].supportCreatorV2) {\n                var srcRow = src && src.parent && src.parent.dragDropFindRow(src);\n                if (row.panel.elements[targetIndex] && row.panel.elements[targetIndex].startWithNewLine && row.elements.length > 1 && row.panel.elements[targetIndex] === dest) {\n                    elementsToSetSWNL.push(target);\n                    elementsToResetSWNL.push(row.panel.elements[targetIndex]);\n                }\n                if (target.startWithNewLine && row.elements.length > 1 && (!row.panel.elements[targetIndex] || !row.panel.elements[targetIndex].startWithNewLine)) {\n                    elementsToResetSWNL.push(target);\n                }\n                if (srcRow && srcRow.elements[0] === src && srcRow.elements[1]) {\n                    elementsToSetSWNL.push(srcRow.elements[1]);\n                }\n                if (row.elements.length <= 1) {\n                    elementsToSetSWNL.push(target);\n                }\n                if (target.startWithNewLine && row.elements.length > 1 && row.elements[0] !== dest) {\n                    elementsToResetSWNL.push(target);\n                }\n            }\n            if (!!src && !!src.parent) {\n                this.page.survey.startMovingQuestion();\n                isSamePanel = row.panel == src.parent;\n                if (isSamePanel) {\n                    row.panel.dragDropMoveElement(src, target, targetIndex);\n                    targetIndex = -1;\n                }\n                else {\n                    src.parent.removeElement(src);\n                }\n            }\n            if (targetIndex > -1) {\n                row.panel.addElement(target, targetIndex);\n            }\n            this.page.survey.stopMovingQuestion();\n        }\n        elementsToSetSWNL.map(function (e) { e.startWithNewLine = true; });\n        elementsToResetSWNL.map(function (e) { e.startWithNewLine = false; });\n        this.dragDropInfo = null;\n        return !isCancel ? target : null;\n    };\n    DragDropPageHelperV1.prototype.dragDropGetElementIndex = function (target, row) {\n        if (!row)\n            return -1;\n        var index = row.elements.indexOf(target);\n        if (row.index == 0)\n            return index;\n        var prevRow = row.panel.rows[row.index - 1];\n        var prevElement = prevRow.elements[prevRow.elements.length - 1];\n        return index + row.panel.elements.indexOf(prevElement) + 1;\n    };\n    DragDropPageHelperV1.prototype.dragDropCanDropTagert = function () {\n        var destination = this.dragDropInfo.destination;\n        if (!destination || destination.isPage)\n            return true;\n        return this.dragDropCanDropCore(this.dragDropInfo.target, destination);\n    };\n    DragDropPageHelperV1.prototype.dragDropCanDropSource = function () {\n        var source = this.dragDropInfo.source;\n        if (!source)\n            return true;\n        var destination = this.dragDropInfo.destination;\n        if (!this.dragDropCanDropCore(source, destination))\n            return false;\n        if (this.page.isDesignMode && _settings__WEBPACK_IMPORTED_MODULE_1__[\"settings\"].supportCreatorV2) {\n            var rowSource = this.page.dragDropFindRow(source);\n            var rowDestination = this.page.dragDropFindRow(destination);\n            if (rowSource !== rowDestination) {\n                if (!source.startWithNewLine && destination.startWithNewLine)\n                    return true;\n                if (source.startWithNewLine && !destination.startWithNewLine) {\n                    return true;\n                }\n            }\n            var row = this.page.dragDropFindRow(destination);\n            if (row && row.elements.length == 1)\n                return true;\n        }\n        return this.dragDropCanDropNotNext(source, destination, this.dragDropInfo.isEdge, this.dragDropInfo.isBottom);\n    };\n    DragDropPageHelperV1.prototype.dragDropCanDropCore = function (target, destination) {\n        if (!destination)\n            return true;\n        if (this.dragDropIsSameElement(destination, target))\n            return false;\n        if (target.isPanel) {\n            var pnl = target;\n            if (pnl.containsElement(destination) ||\n                !!pnl.getElementByName(destination.name))\n                return false;\n        }\n        return true;\n    };\n    DragDropPageHelperV1.prototype.dragDropCanDropNotNext = function (source, destination, isEdge, isBottom) {\n        if (!destination || (destination.isPanel && !isEdge))\n            return true;\n        if (typeof source.parent === \"undefined\" || source.parent !== destination.parent)\n            return true;\n        var pnl = source.parent;\n        var srcIndex = pnl.elements.indexOf(source);\n        var destIndex = pnl.elements.indexOf(destination);\n        if (destIndex < srcIndex && !isBottom)\n            destIndex--;\n        if (isBottom)\n            destIndex++;\n        return srcIndex < destIndex\n            ? destIndex - srcIndex > 1\n            : srcIndex - destIndex > 0;\n    };\n    DragDropPageHelperV1.prototype.dragDropIsSameElement = function (el1, el2) {\n        return el1 == el2 || el1.name == el2.name;\n    };\n    return DragDropPageHelperV1;\n}());\n\n\n\n/***/ }),\n\n/***/ \"./src/drag-drop-panel-helper-v1.ts\":\n/*!******************************************!*\\\n  !*** ./src/drag-drop-panel-helper-v1.ts ***!\n  \\******************************************/\n/*! exports provided: DragDropPanelHelperV1 */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1075347__) {\n\n\"use strict\";\n__nested_webpack_require_1075347__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_1075347__.d(__nested_webpack_exports__, \"DragDropPanelHelperV1\", function() { return DragDropPanelHelperV1; });\n/* harmony import */ var _drag_drop_helper_v1__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1075347__(/*! ./drag-drop-helper-v1 */ \"./src/drag-drop-helper-v1.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1075347__(/*! ./settings */ \"./src/settings.ts\");\n\n\nvar DragDropPanelHelperV1 = /** @class */ (function () {\n    function DragDropPanelHelperV1(panel) {\n        this.panel = panel;\n    }\n    DragDropPanelHelperV1.prototype.dragDropAddTarget = function (dragDropInfo) {\n        var prevRow = this.dragDropFindRow(dragDropInfo.target);\n        if (this.dragDropAddTargetToRow(dragDropInfo, prevRow)) {\n            this.panel.updateRowsRemoveElementFromRow(dragDropInfo.target, prevRow);\n        }\n    };\n    DragDropPanelHelperV1.prototype.dragDropFindRow = function (findElement) {\n        if (!findElement || findElement.isPage)\n            return null;\n        var element = findElement;\n        var rows = this.panel.rows;\n        for (var i = 0; i < rows.length; i++) {\n            if (rows[i].elements.indexOf(element) > -1)\n                return rows[i];\n        }\n        for (var i = 0; i < this.panel.elements.length; i++) {\n            var pnl = this.panel.elements[i].getPanel();\n            if (!pnl)\n                continue;\n            var row = pnl.dragDropFindRow(element);\n            if (!!row)\n                return row;\n        }\n        return null;\n    };\n    DragDropPanelHelperV1.prototype.dragDropMoveElement = function (src, target, targetIndex) {\n        var srcIndex = src.parent.elements.indexOf(src);\n        if (targetIndex > srcIndex) {\n            targetIndex--;\n        }\n        this.panel.removeElement(src);\n        this.panel.addElement(target, targetIndex);\n    };\n    DragDropPanelHelperV1.prototype.updateRowsOnElementAdded = function (element, index, dragDropInfo, thisElement) {\n        if (!dragDropInfo) {\n            dragDropInfo = new _drag_drop_helper_v1__WEBPACK_IMPORTED_MODULE_0__[\"DragDropInfo\"](null, element);\n            dragDropInfo.target = element;\n            dragDropInfo.isEdge = this.panel.elements.length > 1;\n            if (this.panel.elements.length < 2) {\n                dragDropInfo.destination = thisElement;\n            }\n            else {\n                dragDropInfo.isBottom = index > 0;\n                if (index == 0) {\n                    dragDropInfo.destination = this.panel.elements[1];\n                }\n                else {\n                    dragDropInfo.destination = this.panel.elements[index - 1];\n                }\n            }\n        }\n        this.dragDropAddTargetToRow(dragDropInfo, null);\n    };\n    DragDropPanelHelperV1.prototype.dragDropAddTargetToRow = function (dragDropInfo, prevRow) {\n        if (!dragDropInfo.destination)\n            return true;\n        if (this.dragDropAddTargetToEmptyPanel(dragDropInfo))\n            return true;\n        var dest = dragDropInfo.destination;\n        var destRow = this.dragDropFindRow(dest);\n        if (!destRow)\n            return true;\n        // if (settings.supportCreatorV2 && this.panel.isDesignMode) {\n        //   if (destRow.elements.length > 1)\n        //     return this.dragDropAddTargetToExistingRow(\n        //       dragDropInfo,\n        //       destRow,\n        //       prevRow\n        //     );\n        //   else\n        //     return this.dragDropAddTargetToNewRow(dragDropInfo, destRow, prevRow);\n        // }\n        if (!dragDropInfo.target.startWithNewLine)\n            return this.dragDropAddTargetToExistingRow(dragDropInfo, destRow, prevRow);\n        return this.dragDropAddTargetToNewRow(dragDropInfo, destRow, prevRow);\n    };\n    DragDropPanelHelperV1.prototype.dragDropAddTargetToEmptyPanel = function (dragDropInfo) {\n        if (dragDropInfo.destination.isPage) {\n            this.dragDropAddTargetToEmptyPanelCore(this.panel.root, dragDropInfo.target, dragDropInfo.isBottom);\n            return true;\n        }\n        var dest = dragDropInfo.destination;\n        if (dest.isPanel && !dragDropInfo.isEdge) {\n            var panel = dest;\n            if (dragDropInfo.target[\"template\"] === dest) {\n                return false;\n            }\n            if (dragDropInfo.nestedPanelDepth < 0 ||\n                dragDropInfo.nestedPanelDepth >= panel.depth) {\n                this.dragDropAddTargetToEmptyPanelCore(dest, dragDropInfo.target, dragDropInfo.isBottom);\n                return true;\n            }\n        }\n        return false;\n    };\n    DragDropPanelHelperV1.prototype.dragDropAddTargetToExistingRow = function (dragDropInfo, destRow, prevRow) {\n        var index = destRow.elements.indexOf(dragDropInfo.destination);\n        if (index == 0 &&\n            !dragDropInfo.isBottom) {\n            if (this.panel.isDesignMode && _settings__WEBPACK_IMPORTED_MODULE_1__[\"settings\"].supportCreatorV2) {\n            }\n            else if (destRow.elements[0].startWithNewLine) {\n                if (destRow.index > 0) {\n                    dragDropInfo.isBottom = true;\n                    destRow = destRow.panel.rows[destRow.index - 1];\n                    dragDropInfo.destination =\n                        destRow.elements[destRow.elements.length - 1];\n                    return this.dragDropAddTargetToExistingRow(dragDropInfo, destRow, prevRow);\n                }\n                else {\n                    return this.dragDropAddTargetToNewRow(dragDropInfo, destRow, prevRow);\n                }\n            }\n        }\n        var prevRowIndex = -1;\n        if (prevRow == destRow) {\n            prevRowIndex = destRow.elements.indexOf(dragDropInfo.target);\n        }\n        if (dragDropInfo.isBottom)\n            index++;\n        var srcRow = this.panel.findRowByElement(dragDropInfo.source);\n        if (srcRow == destRow &&\n            srcRow.elements.indexOf(dragDropInfo.source) == index)\n            return false;\n        if (index == prevRowIndex)\n            return false;\n        if (prevRowIndex > -1) {\n            destRow.elements.splice(prevRowIndex, 1);\n            if (prevRowIndex < index)\n                index--;\n        }\n        destRow.elements.splice(index, 0, dragDropInfo.target);\n        destRow.updateVisible();\n        return prevRowIndex < 0;\n    };\n    DragDropPanelHelperV1.prototype.dragDropAddTargetToNewRow = function (dragDropInfo, destRow, prevRow) {\n        var targetRow = destRow.panel.createRowAndSetLazy(destRow.panel.rows.length);\n        if (this.panel.isDesignMode && _settings__WEBPACK_IMPORTED_MODULE_1__[\"settings\"].supportCreatorV2) {\n            targetRow.setIsLazyRendering(false);\n        }\n        targetRow.addElement(dragDropInfo.target);\n        var index = destRow.index;\n        if (dragDropInfo.isBottom) {\n            index++;\n        }\n        //same row\n        if (!!prevRow && prevRow.panel == targetRow.panel && prevRow.index == index)\n            return false;\n        var srcRow = this.panel.findRowByElement(dragDropInfo.source);\n        if (!!srcRow &&\n            srcRow.panel == targetRow.panel &&\n            srcRow.elements.length == 1 &&\n            srcRow.index == index)\n            return false;\n        destRow.panel.rows.splice(index, 0, targetRow);\n        return true;\n    };\n    DragDropPanelHelperV1.prototype.dragDropAddTargetToEmptyPanelCore = function (panel, target, isBottom) {\n        var targetRow = panel.createRow();\n        targetRow.addElement(target);\n        if (panel.elements.length == 0 || isBottom) {\n            panel.rows.push(targetRow);\n        }\n        else {\n            panel.rows.splice(0, 0, targetRow);\n        }\n    };\n    return DragDropPanelHelperV1;\n}());\n\n\n\n/***/ }),\n\n/***/ \"./src/dragdrop/choices.ts\":\n/*!*********************************!*\\\n  !*** ./src/dragdrop/choices.ts ***!\n  \\*********************************/\n/*! exports provided: DragDropChoices */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1083426__) {\n\n\"use strict\";\n__nested_webpack_require_1083426__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_1083426__.d(__nested_webpack_exports__, \"DragDropChoices\", function() { return DragDropChoices; });\n/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1083426__(/*! ./core */ \"./src/dragdrop/core.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n\nvar DragDropChoices = /** @class */ (function (_super) {\n    __extends(DragDropChoices, _super);\n    function DragDropChoices() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.doDragOver = function () {\n            if (_this.parentElement.getType() === \"imagepicker\")\n                return;\n            var node = _this.domAdapter.draggedElementShortcut.querySelector(\".svc-item-value-controls__button\");\n            node.style.cursor = \"grabbing\";\n        };\n        _this.doBanDropHere = function () {\n            if (_this.parentElement.getType() === \"imagepicker\")\n                return;\n            var node = _this.domAdapter.draggedElementShortcut.querySelector(\".svc-item-value-controls__button\");\n            node.style.cursor = \"not-allowed\";\n        };\n        return _this;\n    }\n    Object.defineProperty(DragDropChoices.prototype, \"draggedElementType\", {\n        get: function () {\n            return \"item-value\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    DragDropChoices.prototype.createDraggedElementShortcut = function (text, draggedElementNode, event) {\n        if (this.parentElement.getType() === \"imagepicker\") {\n            return this.createImagePickerShortcut(this.draggedElement, text, draggedElementNode, event);\n        }\n        var draggedElementShortcut = document.createElement(\"div\");\n        // draggedElementShortcut.innerText = text;\n        draggedElementShortcut.style.cssText = \" \\n          cursor: grabbing;\\n          position: absolute;\\n          z-index: 10000;\\n          font-family: var(--font-family, 'Open Sans');\\n        \";\n        var isDeepClone = true;\n        var clone = (draggedElementNode\n            .closest(\"[data-sv-drop-target-item-value]\")\n            .cloneNode(isDeepClone));\n        clone.style.cssText = \"\\n      min-width: 100px;\\n      box-shadow: var(--sjs-shadow-large, 0px 8px 16px 0px rgba(0, 0, 0, 0.1)), var(--sjs-shadow-medium, 0px 2px 6px 0px rgba(0, 0, 0, 0.1));\\n      background-color: var(--sjs-general-backcolor, var(--background, #fff));\\n      border-radius: calc(4.5 * var(--sjs-base-unit, var(--base-unit, 8px)));\\n      padding-right: calc(2* var(--sjs-base-unit, var(--base-unit, 8px)));\\n      margin-left: 0;\\n    \";\n        var dragIcon = clone.querySelector(\".svc-item-value-controls__drag-icon\");\n        dragIcon.style.visibility = \"visible\";\n        var removeIcon = clone.querySelector(\".svc-item-value-controls__remove\");\n        removeIcon.style.backgroundColor = \"transparent\";\n        clone.classList.remove(\"svc-item-value--moveup\");\n        clone.classList.remove(\"svc-item-value--movedown\");\n        this.draggedElement.isDragDropMoveDown = false;\n        this.draggedElement.isDragDropMoveUp = false;\n        draggedElementShortcut.appendChild(clone);\n        var rect = draggedElementNode.getBoundingClientRect();\n        draggedElementShortcut.shortcutXOffset = event.clientX - rect.x;\n        draggedElementShortcut.shortcutYOffset = event.clientY - rect.y;\n        this.isBottom = null;\n        return draggedElementShortcut;\n    };\n    DragDropChoices.prototype.createImagePickerShortcut = function (item, text, draggedElementNode, event) {\n        var draggedElementShortcut = document.createElement(\"div\");\n        draggedElementShortcut.style.cssText = \" \\n      cursor: grabbing;\\n      position: absolute;\\n      z-index: 10000;\\n      box-shadow: var(--sjs-shadow-large, 0px 8px 16px 0px rgba(0, 0, 0, 0.1)), var(--sjs-shadow-medium, 0px 2px 6px 0px rgba(0, 0, 0, 0.1));\\n      background-color: var(--sjs-general-backcolor, var(--background, #fff));\\n      padding: calc(0.5 * var(--sjs-base-unit, var(--base-unit, 8px)));\\n      border-radius: calc(0.5 * var(--sjs-base-unit, var(--base-unit, 8px)));\\n    \";\n        var itemValueNode = draggedElementNode.closest(\"[data-sv-drop-target-item-value]\");\n        var controlsNode = itemValueNode.querySelector(\".svc-image-item-value-controls\");\n        var imageContainerNode = itemValueNode.querySelector(\".sd-imagepicker__image-container\");\n        var imageNode = itemValueNode.querySelector(item.imageLink ? \"img\" : \".sd-imagepicker__no-image\").cloneNode(true);\n        controlsNode.style.display = \"none\";\n        imageContainerNode.style.width = imageNode.width + \"px\";\n        imageContainerNode.style.height = imageNode.height + \"px\";\n        imageNode.style.objectFit = \"cover\";\n        imageNode.style.borderRadius = \"4px\";\n        draggedElementShortcut.appendChild(imageNode);\n        return draggedElementShortcut;\n    };\n    DragDropChoices.prototype.getDropTargetByDataAttributeValue = function (dataAttributeValue) {\n        var dragOverChoice;\n        dragOverChoice = this.parentElement.choices.filter(function (choice) { return \"\" + choice.value == dataAttributeValue; })[0];\n        return dragOverChoice;\n    };\n    DragDropChoices.prototype.getVisibleChoices = function () {\n        var parent = this.parentElement;\n        if (parent.getType() === \"ranking\") {\n            if (parent.selectToRankEnabled) {\n                return parent.visibleChoices;\n            }\n            else {\n                return parent.rankingChoices;\n            }\n        }\n        return parent.visibleChoices;\n    };\n    DragDropChoices.prototype.isDropTargetValid = function (dropTarget, dropTargetNode) {\n        var choices = this.getVisibleChoices();\n        if (this.parentElement.getType() !== \"imagepicker\") {\n            var dropTargetIndex = choices.indexOf(this.dropTarget);\n            var draggedElementIndex = choices.indexOf(this.draggedElement);\n            if (draggedElementIndex > dropTargetIndex && this.dropTarget.isDragDropMoveUp) {\n                this.dropTarget.isDragDropMoveUp = false;\n                return false;\n            }\n            if (draggedElementIndex < dropTargetIndex && this.dropTarget.isDragDropMoveDown) {\n                this.dropTarget.isDragDropMoveDown = false;\n                return false;\n            }\n        }\n        // shouldn't allow to drop on \"adorners\" (selectall, none, other)\n        if (choices.indexOf(dropTarget) === -1)\n            return false;\n        return true;\n    };\n    DragDropChoices.prototype.calculateIsBottom = function (clientY) {\n        var choices = this.getVisibleChoices();\n        return (choices.indexOf(this.dropTarget) - choices.indexOf(this.draggedElement) >\n            0);\n    };\n    DragDropChoices.prototype.afterDragOver = function (dropTargetNode) {\n        if (this.isDropTargetDoesntChanged(this.isBottom))\n            return;\n        if (this.dropTarget === this.draggedElement)\n            return;\n        var choices = this.getVisibleChoices();\n        var dropTargetIndex = choices.indexOf(this.dropTarget);\n        var draggedElementIndex = choices.indexOf(this.draggedElement);\n        choices.splice(draggedElementIndex, 1);\n        choices.splice(dropTargetIndex, 0, this.draggedElement);\n        if (this.parentElement.getType() === \"imagepicker\")\n            return;\n        if (draggedElementIndex !== dropTargetIndex) {\n            dropTargetNode.classList.remove(\"svc-item-value--moveup\");\n            dropTargetNode.classList.remove(\"svc-item-value--movedown\");\n            this.dropTarget.isDragDropMoveDown = false;\n            this.dropTarget.isDragDropMoveUp = false;\n        }\n        if (draggedElementIndex > dropTargetIndex) {\n            this.dropTarget.isDragDropMoveDown = true;\n        }\n        if (draggedElementIndex < dropTargetIndex) {\n            this.dropTarget.isDragDropMoveUp = true;\n        }\n        _super.prototype.ghostPositionChanged.call(this);\n    };\n    DragDropChoices.prototype.doDrop = function () {\n        var choices = this.parentElement.choices;\n        var filteredChoices = this.getVisibleChoices().filter(function (item) {\n            return choices.indexOf(item) !== -1;\n        });\n        var oldIndex = choices.indexOf(this.draggedElement);\n        var newIndex = filteredChoices.indexOf(this.draggedElement);\n        choices.splice(oldIndex, 1);\n        choices.splice(newIndex, 0, this.draggedElement);\n        return this.parentElement;\n    };\n    DragDropChoices.prototype.clear = function () {\n        if (!!this.parentElement) {\n            this.updateVisibleChoices(this.parentElement);\n        }\n        _super.prototype.clear.call(this);\n    };\n    DragDropChoices.prototype.updateVisibleChoices = function (parent) {\n        parent.getType() === \"ranking\" ?\n            parent.updateRankingChoices() :\n            parent[\"updateVisibleChoices\"]();\n    };\n    return DragDropChoices;\n}(_core__WEBPACK_IMPORTED_MODULE_0__[\"DragDropCore\"]));\n\n\n\n/***/ }),\n\n/***/ \"./src/dragdrop/core.ts\":\n/*!******************************!*\\\n  !*** ./src/dragdrop/core.ts ***!\n  \\******************************/\n/*! exports provided: DragDropCore */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1093437__) {\n\n\"use strict\";\n__nested_webpack_require_1093437__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_1093437__.d(__nested_webpack_exports__, \"DragDropCore\", function() { return DragDropCore; });\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1093437__(/*! ../base */ \"./src/base.ts\");\n/* harmony import */ var _dom_adapter__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1093437__(/*! ./dom-adapter */ \"./src/dragdrop/dom-adapter.ts\");\n\n\nvar DragDropCore = /** @class */ (function () {\n    function DragDropCore(surveyValue, creator, longTap, domAdapter) {\n        var _this = this;\n        this.surveyValue = surveyValue;\n        this.creator = creator;\n        this._isBottom = null;\n        this.onGhostPositionChanged = new _base__WEBPACK_IMPORTED_MODULE_0__[\"EventBase\"]();\n        this.onDragStart = new _base__WEBPACK_IMPORTED_MODULE_0__[\"EventBase\"]();\n        this.onDragEnd = new _base__WEBPACK_IMPORTED_MODULE_0__[\"EventBase\"]();\n        this.onBeforeDrop = this.onDragStart;\n        this.onAfterDrop = this.onDragEnd;\n        this.draggedElement = null;\n        this.dropTarget = null;\n        this.prevDropTarget = null;\n        this.allowDropHere = false;\n        this.banDropHere = function () {\n            _this.allowDropHere = false;\n            _this.doBanDropHere();\n            _this.dropTarget = null;\n            _this.domAdapter.draggedElementShortcut.style.cursor = \"not-allowed\";\n            _this.isBottom = null;\n        };\n        this.doBanDropHere = function () { };\n        this.domAdapter = domAdapter || new _dom_adapter__WEBPACK_IMPORTED_MODULE_1__[\"DragDropDOMAdapter\"](this, longTap);\n    }\n    Object.defineProperty(DragDropCore.prototype, \"isBottom\", {\n        get: function () {\n            return !!this._isBottom;\n        },\n        set: function (val) {\n            this._isBottom = val;\n            this.ghostPositionChanged();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    DragDropCore.prototype.ghostPositionChanged = function () {\n        this.onGhostPositionChanged.fire({}, {});\n    };\n    Object.defineProperty(DragDropCore.prototype, \"dropTargetDataAttributeName\", {\n        get: function () {\n            return \"[data-sv-drop-target-\" + this.draggedElementType + \"]\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(DragDropCore.prototype, \"survey\", {\n        get: function () {\n            return this.surveyValue || this.creator.survey;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    DragDropCore.prototype.startDrag = function (event, draggedElement, parentElement, draggedElementNode, preventSaveTargetNode) {\n        var _a;\n        if (preventSaveTargetNode === void 0) { preventSaveTargetNode = false; }\n        this.domAdapter.rootContainer = (_a = this.survey) === null || _a === void 0 ? void 0 : _a.rootElement;\n        this.domAdapter.startDrag(event, draggedElement, parentElement, draggedElementNode, preventSaveTargetNode);\n    };\n    DragDropCore.prototype.dragInit = function (event, draggedElement, parentElement, draggedElementNode) {\n        this.draggedElement = draggedElement;\n        this.parentElement = parentElement;\n        var shortcutText = this.getShortcutText(this.draggedElement);\n        this.domAdapter.draggedElementShortcut = this.createDraggedElementShortcut(shortcutText, draggedElementNode, event);\n        this.onStartDrag(event);\n    };\n    DragDropCore.prototype.onStartDrag = function (event) {\n    };\n    DragDropCore.prototype.isDropTargetDoesntChanged = function (newIsBottom) {\n        return (this.dropTarget === this.prevDropTarget && newIsBottom === this.isBottom);\n    };\n    DragDropCore.prototype.getShortcutText = function (draggedElement) {\n        return draggedElement.shortcutText;\n    };\n    DragDropCore.prototype.createDraggedElementShortcut = function (text, draggedElementNode, event) {\n        var draggedElementShortcut = document.createElement(\"div\");\n        draggedElementShortcut.innerText = text;\n        draggedElementShortcut.className = this.getDraggedElementClass();\n        return draggedElementShortcut;\n    };\n    DragDropCore.prototype.getDraggedElementClass = function () {\n        return \"sv-dragged-element-shortcut\";\n    };\n    DragDropCore.prototype.doDragOver = function () { };\n    DragDropCore.prototype.afterDragOver = function (dropTargetNode) { };\n    DragDropCore.prototype.findDropTargetNodeFromPoint = function (clientX, clientY) {\n        var displayProp = this.domAdapter.draggedElementShortcut.style.display;\n        //this.domAdapter.draggedElementShortcut.hidden = true;\n        this.domAdapter.draggedElementShortcut.style.display = \"none\";\n        var dragOverNode = document.elementFromPoint(clientX, clientY);\n        // this.domAdapter.draggedElementShortcut.hidden = false;\n        this.domAdapter.draggedElementShortcut.style.display = displayProp || \"block\";\n        if (!dragOverNode)\n            return null;\n        return this.findDropTargetNodeByDragOverNode(dragOverNode);\n    };\n    DragDropCore.prototype.getDataAttributeValueByNode = function (node) {\n        var _this = this;\n        var datasetName = \"svDropTarget\";\n        var words = this.draggedElementType.split(\"-\");\n        words.forEach(function (word) {\n            datasetName += _this.capitalizeFirstLetter(word);\n        });\n        return node.dataset[datasetName];\n    };\n    DragDropCore.prototype.getDropTargetByNode = function (dropTargetNode, event) {\n        var dataAttributeValue = this.getDataAttributeValueByNode(dropTargetNode);\n        return this.getDropTargetByDataAttributeValue(dataAttributeValue, dropTargetNode, event);\n    };\n    DragDropCore.prototype.capitalizeFirstLetter = function (string) {\n        return string.charAt(0).toUpperCase() + string.slice(1);\n    };\n    DragDropCore.prototype.calculateVerticalMiddleOfHTMLElement = function (HTMLElement) {\n        var rect = HTMLElement.getBoundingClientRect();\n        return rect.y + rect.height / 2;\n    };\n    DragDropCore.prototype.calculateHorizontalMiddleOfHTMLElement = function (HTMLElement) {\n        var rect = HTMLElement.getBoundingClientRect();\n        return rect.x + rect.width / 2;\n    };\n    DragDropCore.prototype.calculateIsBottom = function (clientY, dropTargetNode) {\n        return false;\n    };\n    DragDropCore.prototype.findDropTargetNodeByDragOverNode = function (dragOverNode) {\n        var dropTargetNode = dragOverNode.closest(this.dropTargetDataAttributeName);\n        return dropTargetNode;\n    };\n    DragDropCore.prototype.dragOver = function (event) {\n        var dropTargetNode = this.findDropTargetNodeFromPoint(event.clientX, event.clientY);\n        if (!dropTargetNode) {\n            this.banDropHere();\n            return;\n        }\n        this.dropTarget = this.getDropTargetByNode(dropTargetNode, event);\n        var isDropTargetValid = this.isDropTargetValid(this.dropTarget, dropTargetNode);\n        this.doDragOver();\n        if (!isDropTargetValid) {\n            this.banDropHere();\n            return;\n        }\n        var isBottom = this.calculateIsBottom(event.clientY, dropTargetNode);\n        this.allowDropHere = true;\n        if (this.isDropTargetDoesntChanged(isBottom))\n            return;\n        this.isBottom = null; //TODO need for property change trigger with guarantee but it would be better not to watch on isBottom property but have some event like onValidTargetDragOver\n        this.isBottom = isBottom;\n        this.afterDragOver(dropTargetNode);\n        this.prevDropTarget = this.dropTarget;\n    };\n    DragDropCore.prototype.drop = function () {\n        if (this.allowDropHere) {\n            var fromElement = this.draggedElement.parent;\n            this.onDragStart.fire(this, { fromElement: fromElement, draggedElement: this.draggedElement });\n            var newElement = this.doDrop();\n            this.onDragEnd.fire(this, { fromElement: fromElement, draggedElement: newElement, toElement: this.dropTarget });\n        }\n    };\n    DragDropCore.prototype.clear = function () {\n        this.dropTarget = null;\n        this.draggedElement = null;\n        this.isBottom = null;\n        this.parentElement = null;\n    };\n    return DragDropCore;\n}());\n\n\n\n/***/ }),\n\n/***/ \"./src/dragdrop/dom-adapter.ts\":\n/*!*************************************!*\\\n  !*** ./src/dragdrop/dom-adapter.ts ***!\n  \\*************************************/\n/*! exports provided: DragDropDOMAdapter */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1101981__) {\n\n\"use strict\";\n__nested_webpack_require_1101981__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_1101981__.d(__nested_webpack_exports__, \"DragDropDOMAdapter\", function() { return DragDropDOMAdapter; });\n/* harmony import */ var _utils_utils__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1101981__(/*! ../utils/utils */ \"./src/utils/utils.ts\");\n/* harmony import */ var _utils_devices__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1101981__(/*! ../utils/devices */ \"./src/utils/devices.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1101981__(/*! ../settings */ \"./src/settings.ts\");\n\n\n\n// WebKit requires cancelable `touchmove` events to be added as early as possible\n// see https://bugs.webkit.org/show_bug.cgi?id=184250\nif (typeof window !== \"undefined\") {\n    window.addEventListener(\"touchmove\", function (event) {\n        if (!DragDropDOMAdapter.PreventScrolling) {\n            return;\n        }\n        // Prevent scrolling\n        event.preventDefault();\n    }, { passive: false });\n}\nvar DragDropDOMAdapter = /** @class */ (function () {\n    function DragDropDOMAdapter(dd, longTap) {\n        var _this = this;\n        if (longTap === void 0) { longTap = true; }\n        this.dd = dd;\n        this.longTap = longTap;\n        this.scrollIntervalId = null;\n        this.stopLongTapIfMoveEnough = function (pointerMoveEvent) {\n            pointerMoveEvent.preventDefault();\n            _this.currentX = pointerMoveEvent.pageX;\n            _this.currentY = pointerMoveEvent.pageY;\n            if (_this.isMicroMovement)\n                return;\n            _this.returnUserSelectBack();\n            _this.stopLongTap();\n        };\n        this.stopLongTap = function (e) {\n            clearTimeout(_this.timeoutID);\n            _this.timeoutID = null;\n            document.removeEventListener(\"pointerup\", _this.stopLongTap);\n            document.removeEventListener(\"pointermove\", _this.stopLongTapIfMoveEnough);\n        };\n        this.handlePointerCancel = function (event) {\n            _this.clear();\n        };\n        this.handleEscapeButton = function (event) {\n            if (event.keyCode == 27) {\n                _this.clear();\n            }\n        };\n        this.onContextMenu = function (event) {\n            event.preventDefault();\n            event.stopPropagation();\n        };\n        this.dragOver = function (event) {\n            _this.moveShortcutElement(event);\n            _this.draggedElementShortcut.style.cursor = \"grabbing\";\n            _this.dd.dragOver(event);\n        };\n        this.clear = function () {\n            cancelAnimationFrame(_this.scrollIntervalId);\n            document.removeEventListener(\"pointermove\", _this.dragOver);\n            document.removeEventListener(\"pointercancel\", _this.handlePointerCancel);\n            document.removeEventListener(\"keydown\", _this.handleEscapeButton);\n            document.removeEventListener(\"pointerup\", _this.drop);\n            _this.draggedElementShortcut.removeEventListener(\"pointerup\", _this.drop);\n            if (_utils_devices__WEBPACK_IMPORTED_MODULE_1__[\"IsTouch\"]) {\n                _this.draggedElementShortcut.removeEventListener(\"contextmenu\", _this.onContextMenu);\n            }\n            _this.draggedElementShortcut.parentElement.removeChild(_this.draggedElementShortcut);\n            _this.dd.clear();\n            _this.draggedElementShortcut = null;\n            _this.scrollIntervalId = null;\n            if (_utils_devices__WEBPACK_IMPORTED_MODULE_1__[\"IsTouch\"]) {\n                _this.savedTargetNode.style.cssText = null;\n                _this.savedTargetNode && _this.savedTargetNode.parentElement.removeChild(_this.savedTargetNode);\n                _this.savedTargetNodeParent.appendChild(_this.savedTargetNode);\n                DragDropDOMAdapter.PreventScrolling = false;\n            }\n            _this.savedTargetNode = null;\n            _this.savedTargetNodeParent = null;\n            _this.returnUserSelectBack();\n        };\n        this.drop = function () {\n            _this.dd.drop();\n            _this.clear();\n        };\n        this.draggedElementShortcut = null;\n    }\n    Object.defineProperty(DragDropDOMAdapter.prototype, \"rootElement\", {\n        get: function () {\n            if (Object(_utils_utils__WEBPACK_IMPORTED_MODULE_0__[\"isShadowDOM\"])(_settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].environment.root)) {\n                return _settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].environment.root.host;\n            }\n            else {\n                return this.rootContainer || _settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].environment.root.documentElement || document.body;\n            }\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(DragDropDOMAdapter.prototype, \"isMicroMovement\", {\n        // see https://stackoverflow.com/questions/6042202/how-to-distinguish-mouse-click-and-drag\n        get: function () {\n            var delta = 5;\n            var diffX = Math.abs(this.currentX - this.startX);\n            var diffY = Math.abs(this.currentY - this.startY);\n            return diffX < delta && diffY < delta;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    DragDropDOMAdapter.prototype.startLongTapProcessing = function (event, draggedElement, parentElement, draggedElementNode, preventSaveTargetNode) {\n        var _this = this;\n        if (preventSaveTargetNode === void 0) { preventSaveTargetNode = false; }\n        this.startX = event.pageX;\n        this.startY = event.pageY;\n        document.body.style.setProperty(\"touch-action\", \"none\", \"important\");\n        //document.body.style.setProperty(\"-webkit-touch-callout\", \"none\", \"important\");\n        this.timeoutID = setTimeout(function () {\n            _this.doStartDrag(event, draggedElement, parentElement, draggedElementNode);\n            if (!preventSaveTargetNode) {\n                _this.savedTargetNode = event.target;\n                _this.savedTargetNode.style.cssText =\n                    \"\\n          position: absolute;\\n          height: 1px!important;\\n          width: 1px!important;\\n          overflow: hidden;\\n          clip: rect(1px 1px 1px 1px);\\n          clip: rect(1px, 1px, 1px, 1px);\\n        \";\n                _this.savedTargetNodeParent = _this.savedTargetNode.parentElement;\n                _this.rootElement.appendChild(_this.savedTargetNode);\n            }\n            _this.stopLongTap();\n        }, this.longTap ? 500 : 0);\n        document.addEventListener(\"pointerup\", this.stopLongTap);\n        document.addEventListener(\"pointermove\", this.stopLongTapIfMoveEnough);\n    };\n    DragDropDOMAdapter.prototype.moveShortcutElement = function (event) {\n        var rootElementX = this.rootElement.getBoundingClientRect().x;\n        var rootElementY = this.rootElement.getBoundingClientRect().y;\n        this.doScroll(event.clientY, event.clientX);\n        var shortcutHeight = this.draggedElementShortcut.offsetHeight;\n        var shortcutWidth = this.draggedElementShortcut.offsetWidth;\n        var shortcutXOffset = this.draggedElementShortcut.shortcutXOffset || shortcutWidth / 2;\n        var shortcutYOffset = this.draggedElementShortcut.shortcutYOffset || shortcutHeight / 2;\n        // TODO this is hot fix for RTL support. Probably we need better global strategy for it. https://github.com/surveyjs/survey-library/issues/4554\n        if (document.querySelectorAll(\"[dir='rtl']\").length !== 0) {\n            shortcutXOffset = shortcutWidth / 2;\n            shortcutYOffset = shortcutHeight / 2;\n        }\n        var documentBottom = document.documentElement.clientHeight;\n        var documentRight = document.documentElement.clientWidth;\n        var pageX = event.pageX;\n        var pageY = event.pageY;\n        var clientX = event.clientX;\n        var clientY = event.clientY;\n        var shortcutBottomCoordinate = this.getShortcutBottomCoordinate(clientY, shortcutHeight, shortcutYOffset);\n        var shortcutRightCoordinate = this.getShortcutRightCoordinate(clientX, shortcutWidth, shortcutXOffset);\n        if (shortcutRightCoordinate >= documentRight) { // right boundary\n            this.draggedElementShortcut.style.left =\n                // pageX -\n                // clientX +\n                documentRight -\n                    shortcutWidth -\n                    rootElementX +\n                    \"px\";\n            this.draggedElementShortcut.style.top =\n                /*pageY*/ clientY - shortcutYOffset - rootElementY + \"px\";\n            return;\n        }\n        if (clientX - shortcutXOffset <= 0) { // left boundary\n            this.draggedElementShortcut.style.left =\n                pageX - clientX - rootElementX + \"px\";\n            this.draggedElementShortcut.style.top =\n                /*pageY*/ clientY - rootElementY - shortcutYOffset + \"px\";\n            return;\n        }\n        if (shortcutBottomCoordinate >= documentBottom) { // bottom boundary\n            this.draggedElementShortcut.style.left =\n                /*pageX*/ clientX - shortcutXOffset - rootElementX + \"px\";\n            this.draggedElementShortcut.style.top =\n                // pageY -\n                // clientY +\n                documentBottom -\n                    shortcutHeight -\n                    rootElementY +\n                    \"px\";\n            return;\n        }\n        if (clientY - shortcutYOffset <= 0) { // top  boundary\n            this.draggedElementShortcut.style.left =\n                clientX - shortcutXOffset - rootElementX + \"px\";\n            this.draggedElementShortcut.style.top =\n                pageY - clientY - rootElementY + \"px\";\n            return;\n        }\n        this.draggedElementShortcut.style.left =\n            clientX - rootElementX - shortcutXOffset + \"px\";\n        this.draggedElementShortcut.style.top =\n            clientY - rootElementY - shortcutYOffset + \"px\";\n    };\n    DragDropDOMAdapter.prototype.getShortcutBottomCoordinate = function (currentY, shortcutHeight, shortcutYOffset) {\n        return currentY + shortcutHeight - shortcutYOffset;\n    };\n    DragDropDOMAdapter.prototype.getShortcutRightCoordinate = function (currentX, shortcutWidth, shortcutXOffset) {\n        return currentX + shortcutWidth - shortcutXOffset;\n    };\n    DragDropDOMAdapter.prototype.doScroll = function (clientY, clientX) {\n        var _this = this;\n        cancelAnimationFrame(this.scrollIntervalId);\n        var startScrollBoundary = 100;\n        var displayProp = this.draggedElementShortcut.style.display;\n        //this.draggedElementShortcut.hidden = true;\n        this.draggedElementShortcut.style.display = \"none\";\n        var dragOverNode = document.elementFromPoint(clientX, clientY);\n        //this.draggedElementShortcut.hidden = false;\n        this.draggedElementShortcut.style.display = displayProp || \"block\";\n        var scrollableParentNode = Object(_utils_utils__WEBPACK_IMPORTED_MODULE_0__[\"findScrollableParent\"])(dragOverNode);\n        var top;\n        var bottom;\n        var left;\n        var right;\n        if (scrollableParentNode.tagName === \"HTML\") {\n            top = 0;\n            bottom = document.documentElement.clientHeight;\n            left = 0;\n            right = document.documentElement.clientWidth;\n        }\n        else {\n            top = scrollableParentNode.getBoundingClientRect().top;\n            bottom = scrollableParentNode.getBoundingClientRect().bottom;\n            left = scrollableParentNode.getBoundingClientRect().left;\n            right = scrollableParentNode.getBoundingClientRect().right;\n        }\n        var repeat = function () {\n            if (clientY - top <= startScrollBoundary) {\n                scrollableParentNode.scrollTop -= 15;\n            }\n            else if (bottom - clientY <= startScrollBoundary) {\n                scrollableParentNode.scrollTop += 15;\n            }\n            else if (right - clientX <= startScrollBoundary) {\n                scrollableParentNode.scrollLeft += 15;\n            }\n            else if (clientX - left <= startScrollBoundary) {\n                scrollableParentNode.scrollLeft -= 15;\n            }\n            _this.scrollIntervalId = requestAnimationFrame(repeat);\n        };\n        this.scrollIntervalId = requestAnimationFrame(repeat);\n    };\n    DragDropDOMAdapter.prototype.doStartDrag = function (event, draggedElement, parentElement, draggedElementNode) {\n        if (_utils_devices__WEBPACK_IMPORTED_MODULE_1__[\"IsTouch\"]) {\n            DragDropDOMAdapter.PreventScrolling = true;\n        }\n        if (event.which === 3)\n            return; //right mouse btn\n        this.dd.dragInit(event, draggedElement, parentElement, draggedElementNode);\n        this.rootElement.append(this.draggedElementShortcut);\n        this.moveShortcutElement(event);\n        document.addEventListener(\"pointermove\", this.dragOver);\n        document.addEventListener(\"pointercancel\", this.handlePointerCancel);\n        document.addEventListener(\"keydown\", this.handleEscapeButton);\n        document.addEventListener(\"pointerup\", this.drop);\n        if (!_utils_devices__WEBPACK_IMPORTED_MODULE_1__[\"IsTouch\"]) {\n            this.draggedElementShortcut.addEventListener(\"pointerup\", this.drop);\n        }\n        else {\n            this.draggedElementShortcut.addEventListener(\"contextmenu\", this.onContextMenu);\n        }\n    };\n    DragDropDOMAdapter.prototype.returnUserSelectBack = function () {\n        document.body.style.setProperty(\"touch-action\", \"auto\");\n        document.body.style.setProperty(\"user-select\", \"auto\");\n        document.body.style.setProperty(\"-webkit-user-select\", \"auto\");\n        //document.body.style.setProperty(\"-webkit-touch-callout\", \"default\");\n    };\n    DragDropDOMAdapter.prototype.startDrag = function (event, draggedElement, parentElement, draggedElementNode, preventSaveTargetNode) {\n        if (preventSaveTargetNode === void 0) { preventSaveTargetNode = false; }\n        document.body.style.setProperty(\"user-select\", \"none\", \"important\");\n        document.body.style.setProperty(\"-webkit-user-select\", \"none\", \"important\");\n        if (_utils_devices__WEBPACK_IMPORTED_MODULE_1__[\"IsTouch\"]) {\n            this.startLongTapProcessing(event, draggedElement, parentElement, draggedElementNode, preventSaveTargetNode);\n            return;\n        }\n        this.doStartDrag(event, draggedElement, parentElement, draggedElementNode);\n    };\n    DragDropDOMAdapter.PreventScrolling = false;\n    return DragDropDOMAdapter;\n}());\n\n\n\n/***/ }),\n\n/***/ \"./src/dragdrop/matrix-rows.ts\":\n/*!*************************************!*\\\n  !*** ./src/dragdrop/matrix-rows.ts ***!\n  \\*************************************/\n/*! exports provided: DragDropMatrixRows */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1116740__) {\n\n\"use strict\";\n__nested_webpack_require_1116740__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_1116740__.d(__nested_webpack_exports__, \"DragDropMatrixRows\", function() { return DragDropMatrixRows; });\n/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1116740__(/*! ./core */ \"./src/dragdrop/core.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n\nvar DragDropMatrixRows = /** @class */ (function (_super) {\n    __extends(DragDropMatrixRows, _super);\n    function DragDropMatrixRows() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.fromIndex = null;\n        _this.toIndex = null;\n        _this.doDrop = function () {\n            _this.parentElement.moveRowByIndex(_this.fromIndex, _this.toIndex);\n            return _this.parentElement;\n        };\n        return _this;\n    }\n    Object.defineProperty(DragDropMatrixRows.prototype, \"draggedElementType\", {\n        get: function () {\n            return \"matrix-row\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    DragDropMatrixRows.prototype.onStartDrag = function () {\n        this.restoreUserSelectValue = document.body.style.userSelect;\n        document.body.style.userSelect = \"none\";\n    };\n    DragDropMatrixRows.prototype.createDraggedElementShortcut = function (text, draggedElementNode, event) {\n        var _this = this;\n        var draggedElementShortcut = document.createElement(\"div\");\n        // draggedElementShortcut.innerText = text;\n        draggedElementShortcut.style.cssText = \" \\n          cursor: grabbing;\\n          position: absolute;\\n          z-index: 10000;\\n          font-family: var(--font-family, 'Open Sans');\\n        \";\n        var isDeepClone = true;\n        if (!!draggedElementNode) {\n            var row = (draggedElementNode\n                .closest(\"[data-sv-drop-target-matrix-row]\"));\n            var clone = (row.cloneNode(isDeepClone));\n            clone.style.cssText = \"\\n        box-shadow: var(--sjs-shadow-large, 0px 8px 16px 0px rgba(0, 0, 0, 0.1)), var(--sjs-shadow-medium, 0px 2px 6px 0px rgba(0, 0, 0, 0.1));\\n        background-color: var(--sjs-general-backcolor, var(--background, #fff));\\n        display: flex;\\n        flex-grow: 0;\\n        flex-shrink: 0;\\n        align-items: center;\\n        line-height: 0;\\n        width: \" + row.offsetWidth + \"px;\\n      \";\n            clone.classList.remove(\"sv-matrix__drag-drop--moveup\");\n            clone.classList.remove(\"sv-matrix__drag-drop--movedown\");\n            this.draggedElement.isDragDropMoveDown = false;\n            this.draggedElement.isDragDropMoveUp = false;\n            draggedElementShortcut.appendChild(clone);\n            var rect = draggedElementNode.getBoundingClientRect();\n            draggedElementShortcut.shortcutXOffset = event.clientX - rect.x;\n            draggedElementShortcut.shortcutYOffset = event.clientY - rect.y;\n        }\n        //this.isBottom = null;\n        var renderedRows = this.parentElement.renderedTable.rows;\n        renderedRows.forEach(function (renderedRow, index) {\n            if (renderedRow.row === _this.draggedElement) {\n                renderedRow.isGhostRow = true;\n            }\n        });\n        this.fromIndex = this.parentElement.visibleRows.indexOf(this.draggedElement);\n        return draggedElementShortcut;\n    };\n    // protected ghostPositionChanged(): void {\n    //   let ghostPosition;\n    //   this.parentElement.renderedTable.rows.forEach(\n    //     (renderedRow: QuestionMatrixDropdownRenderedRow) => {\n    //       ghostPosition = this.getGhostPosition(\n    //         renderedRow.row\n    //       );\n    //       renderedRow.isGhostRow = !ghostPosition;\n    //     }\n    //   );\n    //   super.ghostPositionChanged();\n    // }\n    DragDropMatrixRows.prototype.getDropTargetByDataAttributeValue = function (dataAttributeValue) {\n        var matrix = this.parentElement;\n        var dropTargetRenderedRow;\n        dropTargetRenderedRow = matrix.renderedTable.rows.filter(function (renderedRow) { return renderedRow.row && renderedRow.row.id === dataAttributeValue; })[0];\n        return dropTargetRenderedRow.row;\n    };\n    DragDropMatrixRows.prototype.isDropTargetValid = function (dropTarget, dropTargetNode) {\n        return true;\n    };\n    DragDropMatrixRows.prototype.calculateIsBottom = function (clientY) {\n        var rendreredRows = this.parentElement.renderedTable.rows;\n        var rows = rendreredRows.map(function (rendredRow) { return rendredRow.row; });\n        return (rows.indexOf(this.dropTarget) - rows.indexOf(this.draggedElement) > 0);\n    };\n    DragDropMatrixRows.prototype.afterDragOver = function (dropTargetNode) {\n        var _this = this;\n        if (this.isDropTargetDoesntChanged(this.isBottom))\n            return;\n        if (this.dropTarget === this.draggedElement)\n            return;\n        var dropTargetIndex;\n        var draggedElementIndex;\n        var draggedRenderedRow;\n        var renderedRows = this.parentElement.renderedTable.rows;\n        renderedRows.forEach(function (renderedRow, index) {\n            if (renderedRow.row === _this.dropTarget) {\n                // renderedRow.isGhostRow = true;\n                dropTargetIndex = index;\n            }\n            if (renderedRow.row === _this.draggedElement) {\n                draggedRenderedRow = renderedRow;\n                draggedElementIndex = index;\n                draggedRenderedRow.isGhostRow = true;\n            }\n        });\n        renderedRows.splice(draggedElementIndex, 1);\n        renderedRows.splice(dropTargetIndex, 0, draggedRenderedRow);\n        this.toIndex = this.parentElement.visibleRows.indexOf(this.dropTarget);\n        // const matrix = this.parentElement;\n        // const fromIndex = matrix.visibleRows.indexOf(this.draggedElement);\n        // const toIndex = matrix.visibleRows.indexOf(this.dropTarget);\n        // matrix.moveRowByIndex(fromIndex, toIndex);\n        // if (draggedElementIndex !== dropTargetIndex) {\n        //   dropTargetNode.classList.remove(\"sv-matrix__drag-drop--moveup\");\n        //   dropTargetNode.classList.remove(\"sv-matrix__drag-drop--movedown\");\n        //   this.dropTarget.isDragDropMoveDown = false;\n        //   this.dropTarget.isDragDropMoveUp = false;\n        // }\n        // if (draggedElementIndex > dropTargetIndex) {\n        //   this.dropTarget.isDragDropMoveDown = true;\n        // }\n        // if (draggedElementIndex < dropTargetIndex) {\n        //   this.dropTarget.isDragDropMoveUp = true;\n        // }\n        _super.prototype.ghostPositionChanged.call(this);\n    };\n    DragDropMatrixRows.prototype.clear = function () {\n        var renderedRows = this.parentElement.renderedTable.rows;\n        renderedRows.forEach(function (renderedRow) {\n            renderedRow.isGhostRow = false;\n        });\n        this.parentElement.clearOnDrop();\n        this.fromIndex = null;\n        this.toIndex = null;\n        document.body.style.userSelect = this.restoreUserSelectValue || \"initial\";\n        _super.prototype.clear.call(this);\n    };\n    return DragDropMatrixRows;\n}(_core__WEBPACK_IMPORTED_MODULE_0__[\"DragDropCore\"]));\n\n\n\n/***/ }),\n\n/***/ \"./src/dragdrop/ranking-choices.ts\":\n/*!*****************************************!*\\\n  !*** ./src/dragdrop/ranking-choices.ts ***!\n  \\*****************************************/\n/*! exports provided: DragDropRankingChoices */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1124912__) {\n\n\"use strict\";\n__nested_webpack_require_1124912__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_1124912__.d(__nested_webpack_exports__, \"DragDropRankingChoices\", function() { return DragDropRankingChoices; });\n/* harmony import */ var _choices__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1124912__(/*! ./choices */ \"./src/dragdrop/choices.ts\");\n/* harmony import */ var _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1124912__(/*! ../utils/cssClassBuilder */ \"./src/utils/cssClassBuilder.ts\");\n/* harmony import */ var _utils_devices__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1124912__(/*! ../utils/devices */ \"./src/utils/devices.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n\n\n\nvar DragDropRankingChoices = /** @class */ (function (_super) {\n    __extends(DragDropRankingChoices, _super);\n    function DragDropRankingChoices() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.isDragOverRootNode = false;\n        _this.doDragOver = function () {\n            var node = _this.domAdapter.draggedElementShortcut.querySelector(\".sv-ranking-item\");\n            node.style.cursor = \"grabbing\";\n        };\n        _this.doBanDropHere = function () {\n            if (_this.isDragOverRootNode) {\n                _this.allowDropHere = true;\n                return;\n            }\n            var node = _this.domAdapter.draggedElementShortcut.querySelector(\".sv-ranking-item\");\n            node.style.cursor = \"not-allowed\";\n        };\n        _this.doDrop = function () {\n            _this.parentElement.setValue();\n            return _this.parentElement;\n        };\n        return _this;\n    }\n    Object.defineProperty(DragDropRankingChoices.prototype, \"draggedElementType\", {\n        get: function () {\n            return \"ranking-item\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    DragDropRankingChoices.prototype.createDraggedElementShortcut = function (text, draggedElementNode, event) {\n        var draggedElementShortcut = document.createElement(\"div\");\n        draggedElementShortcut.className = this.shortcutClass + \" sv-ranking-shortcut\";\n        draggedElementShortcut.style.cssText = \" \\n          cursor: grabbing;\\n          position: absolute;\\n          z-index: 10000;\\n          border-radius: calc(12.5 * var(--sjs-base-unit, var(--base-unit, 8px)));\\n          min-width: 100px;\\n          box-shadow: var(--sjs-shadow-medium, 0px 2px 6px 0px rgba(0, 0, 0, 0.1)), var(--sjs-shadow-large, 0px 8px 16px 0px rgba(0, 0, 0, 0.1));\\n          background-color: var(--sjs-general-backcolor, var(--background, #fff));\\n          font-family: var(--font-family, 'Open Sans');\\n        \";\n        var isDeepClone = true;\n        var clone = draggedElementNode.cloneNode(isDeepClone);\n        draggedElementShortcut.appendChild(clone);\n        var rect = draggedElementNode.getBoundingClientRect();\n        draggedElementShortcut.shortcutXOffset = event.clientX - rect.x;\n        draggedElementShortcut.shortcutYOffset = event.clientY - rect.y;\n        if (this.parentElement && this.parentElement.useFullItemSizeForShortcut) {\n            draggedElementShortcut.style.width = draggedElementNode.offsetWidth + \"px\";\n            draggedElementShortcut.style.height = draggedElementNode.offsetHeight + \"px\";\n        }\n        return draggedElementShortcut;\n    };\n    Object.defineProperty(DragDropRankingChoices.prototype, \"shortcutClass\", {\n        get: function () {\n            return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_1__[\"CssClassBuilder\"]()\n                .append(this.parentElement.cssClasses.root)\n                .append(this.parentElement.cssClasses.rootMobileMod, _utils_devices__WEBPACK_IMPORTED_MODULE_2__[\"IsMobile\"])\n                .toString();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    DragDropRankingChoices.prototype.getDropTargetByDataAttributeValue = function (dataAttributeValue) {\n        return this.parentElement.rankingChoices[dataAttributeValue];\n    };\n    DragDropRankingChoices.prototype.findDropTargetNodeByDragOverNode = function (dragOverNode) {\n        this.isDragOverRootNode = this.getIsDragOverRootNode(dragOverNode);\n        return _super.prototype.findDropTargetNodeByDragOverNode.call(this, dragOverNode);\n    };\n    DragDropRankingChoices.prototype.getIsDragOverRootNode = function (dragOverNode) {\n        // dragOverNode might be <path></path> for example and the className prop is obj\n        return typeof dragOverNode.className === \"string\" &&\n            dragOverNode.className.indexOf(\"sv-ranking\") !== -1;\n    };\n    DragDropRankingChoices.prototype.isDropTargetValid = function (dropTarget, dropTargetNode) {\n        var choices = this.parentElement.rankingChoices;\n        var dropTargetIndex = choices.indexOf(this.dropTarget);\n        var draggedElementIndex = choices.indexOf(this.draggedElement);\n        if (draggedElementIndex > dropTargetIndex && dropTargetNode.classList.contains(\"sv-dragdrop-moveup\")) {\n            this.parentElement.dropTargetNodeMove = null;\n            return false;\n        }\n        if (draggedElementIndex < dropTargetIndex && dropTargetNode.classList.contains(\"sv-dragdrop-movedown\")) {\n            this.parentElement.dropTargetNodeMove = null;\n            return false;\n        }\n        if (choices.indexOf(dropTarget) === -1)\n            // shouldn't allow to drop on \"adorners\" (selectall, none, other)\n            return false;\n        return true;\n    };\n    DragDropRankingChoices.prototype.calculateIsBottom = function (clientY) {\n        var choices = this.parentElement.rankingChoices;\n        return (choices.indexOf(this.dropTarget) - choices.indexOf(this.draggedElement) >\n            0);\n    };\n    DragDropRankingChoices.prototype.afterDragOver = function (dropTargetNode) {\n        var choices = this.parentElement.rankingChoices;\n        var dropTargetIndex = choices.indexOf(this.dropTarget);\n        var draggedElementIndex = choices.indexOf(this.draggedElement);\n        choices.splice(draggedElementIndex, 1);\n        choices.splice(dropTargetIndex, 0, this.draggedElement);\n        this.parentElement.setPropertyValue(\"rankingChoices\", choices);\n        //return;\n        this.updateDraggedElementShortcut(dropTargetIndex + 1);\n        if (draggedElementIndex !== dropTargetIndex) {\n            dropTargetNode.classList.remove(\"sv-dragdrop-moveup\");\n            dropTargetNode.classList.remove(\"sv-dragdrop-movedown\");\n            this.parentElement.dropTargetNodeMove = null;\n        }\n        if (draggedElementIndex > dropTargetIndex) {\n            this.parentElement.dropTargetNodeMove = \"down\";\n        }\n        if (draggedElementIndex < dropTargetIndex) {\n            this.parentElement.dropTargetNodeMove = \"up\";\n        }\n    };\n    DragDropRankingChoices.prototype.updateDraggedElementShortcut = function (newIndex) {\n        var newIndexText = newIndex !== null ? newIndex + \"\" : \"\";\n        // TODO should avoid direct DOM manipulation, do through the frameworks instead\n        var indexNode = this.domAdapter.draggedElementShortcut.querySelector(\".sv-ranking-item__index\");\n        indexNode.innerText = newIndexText;\n    };\n    DragDropRankingChoices.prototype.ghostPositionChanged = function () {\n        this.parentElement.currentDropTarget = this.draggedElement;\n        _super.prototype.ghostPositionChanged.call(this);\n    };\n    DragDropRankingChoices.prototype.clear = function () {\n        if (!!this.parentElement) {\n            this.parentElement.dropTargetNodeMove = null;\n            this.parentElement.updateRankingChoices(true);\n        }\n        _super.prototype.clear.call(this);\n    };\n    return DragDropRankingChoices;\n}(_choices__WEBPACK_IMPORTED_MODULE_0__[\"DragDropChoices\"]));\n\n\n\n/***/ }),\n\n/***/ \"./src/dragdrop/ranking-select-to-rank.ts\":\n/*!************************************************!*\\\n  !*** ./src/dragdrop/ranking-select-to-rank.ts ***!\n  \\************************************************/\n/*! exports provided: DragDropRankingSelectToRank */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1133755__) {\n\n\"use strict\";\n__nested_webpack_require_1133755__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_1133755__.d(__nested_webpack_exports__, \"DragDropRankingSelectToRank\", function() { return DragDropRankingSelectToRank; });\n/* harmony import */ var _ranking_choices__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1133755__(/*! ./ranking-choices */ \"./src/dragdrop/ranking-choices.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n\nvar DragDropRankingSelectToRank = /** @class */ (function (_super) {\n    __extends(DragDropRankingSelectToRank, _super);\n    function DragDropRankingSelectToRank() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    DragDropRankingSelectToRank.prototype.onStartDrag = function (event) {\n        var target = event.target;\n        var fromContainerNode = target.closest(\".sv-ranking__container--from\");\n        if (!!fromContainerNode) {\n            fromContainerNode.style.minHeight = fromContainerNode.offsetHeight + \"px\";\n        }\n    };\n    DragDropRankingSelectToRank.prototype.findDropTargetNodeByDragOverNode = function (dragOverNode) {\n        if (dragOverNode.dataset.ranking === \"from-container\" || dragOverNode.dataset.ranking === \"to-container\") {\n            return dragOverNode;\n        }\n        if (this.parentElement.isEmpty()) {\n            var toContainer = dragOverNode.closest(\"[data-ranking='to-container']\");\n            var fromContainer = dragOverNode.closest(\"[data-ranking='from-container']\");\n            if (!!toContainer)\n                return toContainer;\n            if (!!fromContainer)\n                return fromContainer;\n            return null;\n        }\n        return _super.prototype.findDropTargetNodeByDragOverNode.call(this, dragOverNode);\n    };\n    DragDropRankingSelectToRank.prototype.getDropTargetByDataAttributeValue = function (dataAttributeValue) {\n        return this.parentElement.rankingChoices[dataAttributeValue] || this.parentElement.unRankingChoices[dataAttributeValue];\n    };\n    DragDropRankingSelectToRank.prototype.getDropTargetByNode = function (dropTargetNode, event) {\n        if (dropTargetNode.dataset.ranking === \"to-container\") {\n            return \"to-container\";\n        }\n        if (dropTargetNode.dataset.ranking === \"from-container\" || dropTargetNode.closest(\"[data-ranking='from-container']\")) {\n            return \"from-container\";\n        }\n        return _super.prototype.getDropTargetByNode.call(this, dropTargetNode, event);\n    };\n    DragDropRankingSelectToRank.prototype.isDropTargetValid = function (dropTarget, dropTargetNode) {\n        if (dropTarget === \"to-container\" || dropTarget === \"from-container\") {\n            return true;\n        }\n        else {\n            return _super.prototype.isDropTargetValid.call(this, dropTarget, dropTargetNode);\n        }\n    };\n    DragDropRankingSelectToRank.prototype.afterDragOver = function (dropTargetNode) {\n        var questionModel = this.parentElement;\n        var rankingChoices = questionModel.rankingChoices;\n        var unRankingChoices = questionModel.unRankingChoices;\n        if (this.isDraggedElementUnranked && this.isDropTargetRanked) {\n            this.doRankBetween(dropTargetNode, unRankingChoices, rankingChoices, this.selectToRank);\n            return;\n        }\n        if (this.isDraggedElementRanked && this.isDropTargetRanked) {\n            this.doRankBetween(dropTargetNode, rankingChoices, rankingChoices, this.reorderRankedItem);\n            return;\n        }\n        if (this.isDraggedElementRanked && !this.isDropTargetRanked) {\n            this.doRankBetween(dropTargetNode, rankingChoices, unRankingChoices, this.unselectFromRank);\n            return;\n        }\n    };\n    DragDropRankingSelectToRank.prototype.doRankBetween = function (dropTargetNode, fromChoicesArray, toChoicesArray, rankFunction) {\n        var questionModel = this.parentElement;\n        var fromIndex = fromChoicesArray.indexOf(this.draggedElement);\n        var toIndex = toChoicesArray.indexOf(this.dropTarget);\n        if (toIndex === -1)\n            toIndex = toChoicesArray.length;\n        rankFunction(questionModel, fromIndex, toIndex);\n        this.doUIEffects(dropTargetNode, fromIndex, toIndex);\n    };\n    DragDropRankingSelectToRank.prototype.doUIEffects = function (dropTargetNode, fromIndex, toIndex) {\n        var questionModel = this.parentElement;\n        var isDropToEmptyRankedContainer = this.dropTarget === \"to-container\" && questionModel.isEmpty();\n        var isNeedToShowIndexAtShortcut = !this.isDropTargetUnranked || isDropToEmptyRankedContainer;\n        var shortcutIndex = isNeedToShowIndexAtShortcut ? toIndex + 1 : null;\n        this.updateDraggedElementShortcut(shortcutIndex);\n        if (fromIndex !== toIndex) {\n            dropTargetNode.classList.remove(\"sv-dragdrop-moveup\");\n            dropTargetNode.classList.remove(\"sv-dragdrop-movedown\");\n            questionModel.dropTargetNodeMove = null;\n        }\n        if (fromIndex > toIndex) {\n            questionModel.dropTargetNodeMove = \"down\";\n        }\n        if (fromIndex < toIndex) {\n            questionModel.dropTargetNodeMove = \"up\";\n        }\n    };\n    Object.defineProperty(DragDropRankingSelectToRank.prototype, \"isDraggedElementRanked\", {\n        get: function () {\n            return this.parentElement.rankingChoices.indexOf(this.draggedElement) !== -1;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(DragDropRankingSelectToRank.prototype, \"isDropTargetRanked\", {\n        get: function () {\n            if (this.dropTarget === \"to-container\")\n                return true;\n            return this.parentElement.rankingChoices.indexOf(this.dropTarget) !== -1;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(DragDropRankingSelectToRank.prototype, \"isDraggedElementUnranked\", {\n        get: function () {\n            return !this.isDraggedElementRanked;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(DragDropRankingSelectToRank.prototype, \"isDropTargetUnranked\", {\n        get: function () {\n            return !this.isDropTargetRanked;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    DragDropRankingSelectToRank.prototype.selectToRank = function (questionModel, fromIndex, toIndex) {\n        var rankingChoices = questionModel.rankingChoices;\n        var unRankingChoices = questionModel.unRankingChoices;\n        var item = unRankingChoices[fromIndex];\n        rankingChoices.splice(toIndex, 0, item);\n        questionModel.setPropertyValue(\"rankingChoices\", rankingChoices);\n    };\n    DragDropRankingSelectToRank.prototype.unselectFromRank = function (questionModel, fromIndex, toIndex) {\n        var rankingChoices = questionModel.rankingChoices;\n        rankingChoices.splice(fromIndex, 1);\n        questionModel.setPropertyValue(\"rankingChoices\", rankingChoices);\n    };\n    DragDropRankingSelectToRank.prototype.reorderRankedItem = function (questionModel, fromIndex, toIndex) {\n        var rankingChoices = questionModel.rankingChoices;\n        var item = rankingChoices[fromIndex];\n        rankingChoices.splice(fromIndex, 1);\n        rankingChoices.splice(toIndex, 0, item);\n        questionModel.setPropertyValue(\"rankingChoices\", rankingChoices);\n    };\n    return DragDropRankingSelectToRank;\n}(_ranking_choices__WEBPACK_IMPORTED_MODULE_0__[\"DragDropRankingChoices\"]));\n\n\n\n/***/ }),\n\n/***/ \"./src/dropdownListModel.ts\":\n/*!**********************************!*\\\n  !*** ./src/dropdownListModel.ts ***!\n  \\**********************************/\n/*! exports provided: DropdownListModel */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1142224__) {\n\n\"use strict\";\n__nested_webpack_require_1142224__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_1142224__.d(__nested_webpack_exports__, \"DropdownListModel\", function() { return DropdownListModel; });\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1142224__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _itemvalue__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1142224__(/*! ./itemvalue */ \"./src/itemvalue.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1142224__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _list__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1142224__(/*! ./list */ \"./src/list.ts\");\n/* harmony import */ var _popup__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1142224__(/*! ./popup */ \"./src/popup.ts\");\n/* harmony import */ var _question_dropdown__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1142224__(/*! ./question_dropdown */ \"./src/question_dropdown.ts\");\n/* harmony import */ var _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_1142224__(/*! ./utils/cssClassBuilder */ \"./src/utils/cssClassBuilder.ts\");\n/* harmony import */ var _utils_devices__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_1142224__(/*! ./utils/devices */ \"./src/utils/devices.ts\");\n/* harmony import */ var _utils_utils__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_1142224__(/*! ./utils/utils */ \"./src/utils/utils.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\n\n\n\n\nvar DropdownListModel = /** @class */ (function (_super) {\n    __extends(DropdownListModel, _super);\n    function DropdownListModel(question, onSelectionChanged) {\n        var _this = _super.call(this) || this;\n        _this.question = question;\n        _this.onSelectionChanged = onSelectionChanged;\n        _this.minPageSize = 25;\n        _this.loadingItemHeight = 40;\n        _this._markdownMode = false;\n        _this.selectedItemSelector = \".sv-list__item--selected\";\n        _this.itemSelector = \".sv-list__item\";\n        _this.itemsSettings = { skip: 0, take: 0, totalCount: 0, items: [] };\n        _this.isRunningLoadQuestionChoices = false;\n        _this.popupCssClasses = \"sv-single-select-list\";\n        _this.listModelFilterStringChanged = function (newValue) {\n            if (_this.filterString !== newValue) {\n                _this.filterString = newValue;\n            }\n        };\n        _this.qustionPropertyChangedHandler = function (sender, options) {\n            _this.onPropertyChangedHandler(sender, options);\n        };\n        question.onPropertyChanged.add(_this.qustionPropertyChangedHandler);\n        _this.showInputFieldComponent = _this.question.showInputFieldComponent;\n        _this.listModel = _this.createListModel();\n        _this.updateAfterListModelCreated(_this.listModel);\n        _this.setSearchEnabled(_this.question.searchEnabled);\n        _this.createPopup();\n        _this.resetItemsSettings();\n        return _this;\n    }\n    Object.defineProperty(DropdownListModel.prototype, \"focusFirstInputSelector\", {\n        get: function () {\n            return this.getFocusFirstInputSelector();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    DropdownListModel.prototype.getFocusFirstInputSelector = function () {\n        if (_utils_devices__WEBPACK_IMPORTED_MODULE_7__[\"IsTouch\"]) {\n            return this.isValueEmpty(this.question.value) ? this.itemSelector : this.selectedItemSelector;\n        }\n        else {\n            return (!this.listModel.showFilter && !!this.question.value) ? this.selectedItemSelector : \"\";\n        }\n    };\n    DropdownListModel.prototype.resetItemsSettings = function () {\n        this.itemsSettings.skip = 0;\n        this.itemsSettings.take = Math.max(this.minPageSize, this.question.choicesLazyLoadPageSize);\n        this.itemsSettings.totalCount = 0;\n        this.itemsSettings.items = [];\n    };\n    DropdownListModel.prototype.setItems = function (items, totalCount) {\n        this.itemsSettings.items = [].concat(this.itemsSettings.items, items);\n        this.itemsSettings.totalCount = totalCount;\n        this.listModel.isAllDataLoaded = this.question.choicesLazyLoadEnabled && this.itemsSettings.items.length == this.itemsSettings.totalCount;\n        this.question.choices = this.itemsSettings.items;\n    };\n    DropdownListModel.prototype.updateQuestionChoices = function (callbackAfterItemsLoaded) {\n        var _this = this;\n        if (this.isRunningLoadQuestionChoices)\n            return;\n        var isUpdate = (this.itemsSettings.skip + 1) < this.itemsSettings.totalCount;\n        if (!this.itemsSettings.skip || isUpdate) {\n            this.isRunningLoadQuestionChoices = true;\n            this.question.survey.loadQuestionChoices({\n                question: this.question,\n                filter: this.filterString,\n                skip: this.itemsSettings.skip,\n                take: this.itemsSettings.take,\n                setItems: function (items, totalCount) {\n                    _this.isRunningLoadQuestionChoices = false;\n                    _this.setItems(items || [], totalCount || 0);\n                    _this.popupRecalculatePosition(_this.itemsSettings.skip === _this.itemsSettings.take);\n                    if (!!callbackAfterItemsLoaded) {\n                        callbackAfterItemsLoaded();\n                    }\n                }\n            });\n            this.itemsSettings.skip += this.itemsSettings.take;\n        }\n    };\n    DropdownListModel.prototype.updatePopupFocusFirstInputSelector = function () {\n        this._popupModel.focusFirstInputSelector = this.focusFirstInputSelector;\n    };\n    DropdownListModel.prototype.createPopup = function () {\n        var _this = this;\n        this._popupModel = new _popup__WEBPACK_IMPORTED_MODULE_4__[\"PopupModel\"](\"sv-list\", { model: this.listModel }, \"bottom\", \"center\", false);\n        this._popupModel.displayMode = _utils_devices__WEBPACK_IMPORTED_MODULE_7__[\"IsTouch\"] ? \"overlay\" : \"popup\";\n        this._popupModel.positionMode = \"fixed\";\n        this._popupModel.isFocusedContainer = false;\n        this._popupModel.isFocusedContent = _utils_devices__WEBPACK_IMPORTED_MODULE_7__[\"IsTouch\"];\n        this._popupModel.setWidthByTarget = !_utils_devices__WEBPACK_IMPORTED_MODULE_7__[\"IsTouch\"];\n        this.updatePopupFocusFirstInputSelector();\n        this.listModel.registerPropertyChangedHandlers([\"showFilter\"], function () {\n            _this.updatePopupFocusFirstInputSelector();\n        });\n        this._popupModel.cssClass = this.popupCssClasses;\n        this._popupModel.onVisibilityChanged.add(function (_, option) {\n            if (option.isVisible) {\n                _this.listModel.renderElements = true;\n            }\n            if (option.isVisible && _this.question.choicesLazyLoadEnabled) {\n                _this.listModel.actions = [];\n                _this.updateQuestionChoices();\n            }\n            if (option.isVisible && !!_this.question.onOpenedCallBack) {\n                _this.updatePopupFocusFirstInputSelector();\n                _this.question.onOpenedCallBack();\n            }\n            if (!option.isVisible) {\n                _this.onHidePopup();\n                if (_this.question.choicesLazyLoadEnabled) {\n                    _this.resetItemsSettings();\n                }\n            }\n            _this.question.processPopupVisiblilityChanged(_this.popupModel, option.isVisible);\n        });\n    };\n    DropdownListModel.prototype.setFilterStringToListModel = function (newValue) {\n        var _this = this;\n        this.listModel.filterString = newValue;\n        this.listModel.resetFocusedItem();\n        if (this.question.selectedItem && this.question.selectedItem.text.indexOf(newValue) >= 0) {\n            this.listModel.focusedItem = this.getAvailableItems().filter(function (item) { return item.id == _this.question.selectedItem.value; })[0];\n            if (this.listModel.filterString) {\n                this.listModel.actions.map(function (a) { return a.selectedValue = false; });\n            }\n            return;\n        }\n        if (!this.listModel.focusedItem || !this.listModel.isItemVisible(this.listModel.focusedItem)) {\n            this.listModel.focusFirstVisibleItem();\n        }\n    };\n    DropdownListModel.prototype.popupRecalculatePosition = function (isResetHeight) {\n        var _this = this;\n        setTimeout(function () {\n            _this.popupModel.recalculatePosition(isResetHeight);\n        }, 1);\n    };\n    DropdownListModel.prototype.onHidePopup = function () {\n        this.resetFilterString();\n        this.question.suggestedItem = null;\n        this.listModel.refresh();\n    };\n    DropdownListModel.prototype.getAvailableItems = function () {\n        return this.question.visibleChoices;\n    };\n    DropdownListModel.prototype.createListModel = function () {\n        var _this = this;\n        var visibleItems = this.getAvailableItems();\n        var _onSelectionChanged = this.onSelectionChanged;\n        if (!_onSelectionChanged) {\n            _onSelectionChanged = function (item) {\n                _this.question.value = item.id;\n                if (_this.question.searchEnabled)\n                    _this.applyInputString(item);\n                _this._popupModel.toggleVisibility();\n            };\n        }\n        var res = new _list__WEBPACK_IMPORTED_MODULE_3__[\"ListModel\"](visibleItems, _onSelectionChanged, false, undefined, this.question.choicesLazyLoadEnabled ? this.listModelFilterStringChanged : undefined, this.listElementId);\n        res.renderElements = false;\n        res.forceShowFilter = true;\n        res.areSameItemsCallback = function (item1, item2) {\n            return item1 === item2;\n        };\n        return res;\n    };\n    DropdownListModel.prototype.updateAfterListModelCreated = function (model) {\n        var _this = this;\n        model.isItemSelected = function (action) { return !!action.selected; };\n        model.locOwner = this.question;\n        model.onPropertyChanged.add(function (sender, options) {\n            if (options.name == \"hasVerticalScroller\") {\n                _this.hasScroll = options.newValue;\n            }\n        });\n        model.isAllDataLoaded = !this.question.choicesLazyLoadEnabled;\n    };\n    DropdownListModel.prototype.updateCssClasses = function (popupCssClass, listCssClasses) {\n        this.popupModel.cssClass = new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_6__[\"CssClassBuilder\"]().append(popupCssClass).append(this.popupCssClasses).toString();\n        this.listModel.cssClasses = listCssClasses;\n    };\n    DropdownListModel.prototype.resetFilterString = function () {\n        if (!!this.filterString) {\n            this.filterString = undefined;\n        }\n    };\n    DropdownListModel.prototype.clear = function () {\n        this.inputString = null;\n        this.hintString = \"\";\n        this.resetFilterString();\n    };\n    DropdownListModel.prototype.onSetFilterString = function () {\n        var _this = this;\n        if (!!this.filterString && !this.popupModel.isVisible) {\n            this.popupModel.isVisible = true;\n        }\n        var updateAfterFilterStringChanged = function () {\n            _this.setFilterStringToListModel(_this.filterString);\n            _this.popupRecalculatePosition(true);\n        };\n        if (this.question.choicesLazyLoadEnabled) {\n            this.resetItemsSettings();\n            this.updateQuestionChoices(updateAfterFilterStringChanged);\n        }\n        else {\n            updateAfterFilterStringChanged();\n        }\n    };\n    Object.defineProperty(DropdownListModel.prototype, \"isAllDataLoaded\", {\n        get: function () {\n            return !!this.itemsSettings.totalCount && this.itemsSettings.items.length == this.itemsSettings.totalCount;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(DropdownListModel.prototype, \"canShowSelectedItem\", {\n        get: function () {\n            return !this.focused || this._markdownMode || !this.searchEnabled;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    DropdownListModel.prototype.applyInputString = function (item) {\n        var hasHtml = item === null || item === void 0 ? void 0 : item.locText.hasHtml;\n        if (hasHtml || this.question.inputFieldComponentName) {\n            this._markdownMode = true;\n            this.inputString = \"\";\n            this.hintString = \"\";\n        }\n        else {\n            this.inputString = item === null || item === void 0 ? void 0 : item.title;\n            this.hintString = item === null || item === void 0 ? void 0 : item.title;\n        }\n    };\n    DropdownListModel.prototype.fixInputCase = function () {\n        var hintStringMiddle = this.hintStringMiddle;\n        if (hintStringMiddle && this.inputString != hintStringMiddle)\n            this.inputString = hintStringMiddle;\n    };\n    DropdownListModel.prototype.applyHintString = function (item) {\n        var hasHtml = item === null || item === void 0 ? void 0 : item.locText.hasHtml;\n        if (hasHtml || this.question.inputFieldComponentName) {\n            this._markdownMode = true;\n            this.hintString = \"\";\n        }\n        else {\n            this.hintString = item === null || item === void 0 ? void 0 : item.title;\n        }\n    };\n    Object.defineProperty(DropdownListModel.prototype, \"inputStringRendered\", {\n        get: function () {\n            return this.inputString || \"\";\n        },\n        set: function (val) {\n            this.inputString = val;\n            this.filterString = val;\n            if (!val) {\n                this.hintString = \"\";\n            }\n            else {\n                this.applyHintString(this.listModel.focusedItem || this.question.selectedItem);\n            }\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(DropdownListModel.prototype, \"placeholderRendered\", {\n        get: function () {\n            return this.hintString ? \"\" : this.question.readOnlyText;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(DropdownListModel.prototype, \"listElementId\", {\n        get: function () {\n            return this.question.inputId + \"_list\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(DropdownListModel.prototype, \"hintStringLC\", {\n        get: function () {\n            var _a;\n            return ((_a = this.hintString) === null || _a === void 0 ? void 0 : _a.toLowerCase()) || \"\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(DropdownListModel.prototype, \"inputStringLC\", {\n        get: function () {\n            var _a;\n            return ((_a = this.inputString) === null || _a === void 0 ? void 0 : _a.toLowerCase()) || \"\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(DropdownListModel.prototype, \"showHintPrefix\", {\n        get: function () {\n            return !!this.inputString && this.hintStringLC.indexOf(this.inputStringLC) > 0;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(DropdownListModel.prototype, \"hintStringPrefix\", {\n        get: function () {\n            if (!this.inputString)\n                return null;\n            return this.hintString.substring(0, this.hintStringLC.indexOf(this.inputStringLC));\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(DropdownListModel.prototype, \"showHintString\", {\n        get: function () {\n            return !!this.question.searchEnabled && this.hintStringLC && this.hintStringLC.indexOf(this.inputStringLC) >= 0 ||\n                !this.question.searchEnabled && this.hintStringLC && this.question.isEmpty();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(DropdownListModel.prototype, \"hintStringSuffix\", {\n        get: function () {\n            return this.hintString.substring(this.hintStringLC.indexOf(this.inputStringLC) + this.inputStringLC.length);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(DropdownListModel.prototype, \"hintStringMiddle\", {\n        get: function () {\n            var start = this.hintStringLC.indexOf(this.inputStringLC);\n            if (start == -1)\n                return null;\n            return this.hintString.substring(start, start + this.inputStringLC.length);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(DropdownListModel.prototype, \"popupModel\", {\n        get: function () {\n            return this._popupModel;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(DropdownListModel.prototype, \"inputReadOnly\", {\n        get: function () {\n            return this.question.isInputReadOnly || this.searchEnabled;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(DropdownListModel.prototype, \"filterStringEnabled\", {\n        get: function () {\n            return !this.question.isInputReadOnly && this.searchEnabled;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(DropdownListModel.prototype, \"inputMode\", {\n        get: function () {\n            return _utils_devices__WEBPACK_IMPORTED_MODULE_7__[\"IsTouch\"] ? \"none\" : \"text\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    DropdownListModel.prototype.setSearchEnabled = function (newValue) {\n        this.listModel.searchEnabled = _utils_devices__WEBPACK_IMPORTED_MODULE_7__[\"IsTouch\"];\n        this.listModel.showSearchClearButton = _utils_devices__WEBPACK_IMPORTED_MODULE_7__[\"IsTouch\"];\n        this.searchEnabled = newValue;\n    };\n    DropdownListModel.prototype.updateItems = function () {\n        this.listModel.setItems(this.getAvailableItems());\n    };\n    DropdownListModel.prototype.onClick = function (event) {\n        if (this.question.readOnly || this.question.isDesignMode)\n            return;\n        this._popupModel.toggleVisibility();\n        this.focusItemOnClickAndPopup();\n        if (this.searchEnabled && !!event && !!event.target) {\n            var input = event.target.querySelector(\"input\");\n            if (!!input) {\n                input.focus();\n            }\n        }\n    };\n    DropdownListModel.prototype.onPropertyChangedHandler = function (sender, options) {\n        if (options.name == \"value\") {\n            this.showInputFieldComponent = this.question.showInputFieldComponent;\n        }\n        if (options.name == \"choicesLazyLoadEnabled\" && options.newValue) {\n            this.listModel.setOnFilterStringChangedCallback(this.listModelFilterStringChanged);\n        }\n    };\n    DropdownListModel.prototype.focusItemOnClickAndPopup = function () {\n        if (this._popupModel.isVisible && this.question.value)\n            this.changeSelectionWithKeyboard(false);\n    };\n    DropdownListModel.prototype.onClear = function (event) {\n        this.question.clearValue();\n        this._popupModel.isVisible = false;\n        if (event) {\n            event.preventDefault();\n            event.stopPropagation();\n        }\n    };\n    DropdownListModel.prototype.getSelectedAction = function () {\n        return this.question.selectedItem || null;\n    };\n    DropdownListModel.prototype.changeSelectionWithKeyboard = function (reverse) {\n        var _a;\n        var focusedItem = this.listModel.focusedItem;\n        if (!focusedItem && this.question.selectedItem) {\n            if (_itemvalue__WEBPACK_IMPORTED_MODULE_1__[\"ItemValue\"].getItemByValue(this.question.choices, this.question.value)) {\n                this.listModel.focusedItem = this.question.selectedItem;\n            }\n        }\n        else {\n            if (reverse) {\n                this.listModel.focusPrevVisibleItem();\n            }\n            else {\n                this.listModel.focusNextVisibleItem();\n            }\n        }\n        this.beforeScrollToFocusedItem(focusedItem);\n        this.scrollToFocusedItem();\n        this.afterScrollToFocusedItem();\n        this.ariaActivedescendant = (_a = this.listModel.focusedItem) === null || _a === void 0 ? void 0 : _a.elementId;\n    };\n    DropdownListModel.prototype.beforeScrollToFocusedItem = function (focusedItem) {\n        if (this.question.value && focusedItem) {\n            focusedItem.selectedValue = false;\n            this.listModel.focusedItem.selectedValue = !this.listModel.filterString;\n            this.question.suggestedItem = this.listModel.focusedItem;\n        }\n    };\n    DropdownListModel.prototype.afterScrollToFocusedItem = function () {\n        var _a;\n        if (this.question.value && !this.listModel.filterString && this.question.searchEnabled) {\n            this.applyInputString(this.listModel.focusedItem || this.question.selectedItem);\n        }\n        else {\n            this.applyHintString(this.listModel.focusedItem || this.question.selectedItem);\n        }\n        this.fixInputCase();\n        this.ariaActivedescendant = (_a = this.listModel.focusedItem) === null || _a === void 0 ? void 0 : _a.elementId;\n    };\n    DropdownListModel.prototype.keyHandler = function (event) {\n        var char = event.which || event.keyCode;\n        if (this.popupModel.isVisible && event.keyCode === 38) {\n            this.changeSelectionWithKeyboard(true);\n            event.preventDefault();\n            event.stopPropagation();\n        }\n        else if (event.keyCode === 40) {\n            if (!this.popupModel.isVisible) {\n                this.popupModel.toggleVisibility();\n            }\n            this.changeSelectionWithKeyboard(false);\n            event.preventDefault();\n            event.stopPropagation();\n        }\n        if (event.keyCode === 9) {\n            this.popupModel.isVisible = false;\n        }\n        else if (!this.popupModel.isVisible && (event.keyCode === 13 || event.keyCode === 32)) {\n            this.popupModel.toggleVisibility();\n            this.changeSelectionWithKeyboard(false);\n            event.preventDefault();\n            event.stopPropagation();\n        }\n        else if (this.popupModel.isVisible && (event.keyCode === 13 || event.keyCode === 32 && (!this.question.searchEnabled || !this.inputString))) {\n            if (event.keyCode === 13 && this.question.searchEnabled && !this.inputString && this.question instanceof _question_dropdown__WEBPACK_IMPORTED_MODULE_5__[\"QuestionDropdownModel\"] && !this._markdownMode && this.question.value) {\n                this._popupModel.isVisible = false;\n                this.onClear(event);\n                this.question.survey.questionEditFinishCallback(this.question, event);\n            }\n            else {\n                this.listModel.selectFocusedItem();\n                this.onFocus(event);\n                this.question.survey.questionEditFinishCallback(this.question, event);\n            }\n            event.preventDefault();\n            event.stopPropagation();\n        }\n        else if (char === 46 || char === 8) {\n            if (!this.searchEnabled) {\n                this.onClear(event);\n            }\n        }\n        else if (event.keyCode === 27) {\n            this._popupModel.isVisible = false;\n            this.hintString = \"\";\n            this.onEscape();\n        }\n        else {\n            if (event.keyCode === 38 || event.keyCode === 40 || event.keyCode === 32 && !this.question.searchEnabled) {\n                event.preventDefault();\n                event.stopPropagation();\n            }\n            if (event.keyCode === 32 && this.question.searchEnabled) {\n                return;\n            }\n            Object(_utils_utils__WEBPACK_IMPORTED_MODULE_8__[\"doKey2ClickUp\"])(event, { processEsc: false, disableTabStop: this.question.isInputReadOnly });\n        }\n    };\n    DropdownListModel.prototype.onEscape = function () {\n        if (this.question.searchEnabled)\n            this.applyInputString(this.question.selectedItem);\n    };\n    DropdownListModel.prototype.onScroll = function (event) {\n        var target = event.target;\n        if ((target.scrollHeight - (target.scrollTop + target.offsetHeight)) <= this.loadingItemHeight) {\n            this.updateQuestionChoices();\n        }\n    };\n    DropdownListModel.prototype.onBlur = function (event) {\n        this.focused = false;\n        if (this.popupModel.isVisible && _utils_devices__WEBPACK_IMPORTED_MODULE_7__[\"IsTouch\"]) {\n            this._popupModel.isVisible = true;\n            return;\n        }\n        this.resetFilterString();\n        this.inputString = null;\n        this.hintString = \"\";\n        Object(_utils_utils__WEBPACK_IMPORTED_MODULE_8__[\"doKey2ClickBlur\"])(event);\n        this._popupModel.isVisible = false;\n        event.stopPropagation();\n    };\n    DropdownListModel.prototype.onFocus = function (event) {\n        this.focused = true;\n        this.setInputStringFromSelectedItem(this.question.selectedItem);\n    };\n    DropdownListModel.prototype.setInputStringFromSelectedItem = function (newValue) {\n        if (!this.focused)\n            return;\n        if (this.question.searchEnabled && !!newValue) {\n            this.applyInputString(newValue);\n        }\n        else {\n            this.inputString = null;\n        }\n    };\n    DropdownListModel.prototype.dispose = function () {\n        _super.prototype.dispose.call(this);\n        this.question && this.question.onPropertyChanged.remove(this.qustionPropertyChangedHandler);\n        this.qustionPropertyChangedHandler = undefined;\n        if (!!this.listModel) {\n            this.listModel.dispose();\n        }\n        if (!!this.popupModel) {\n            this.popupModel.dispose();\n        }\n    };\n    DropdownListModel.prototype.scrollToFocusedItem = function () {\n        this.listModel.scrollToFocusedItem();\n    };\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"property\"])({ defaultValue: true })\n    ], DropdownListModel.prototype, \"searchEnabled\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"property\"])({\n            defaultValue: \"\",\n            onSet: function (_, target) {\n                target.onSetFilterString();\n            }\n        })\n    ], DropdownListModel.prototype, \"filterString\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"property\"])({\n            defaultValue: \"\",\n            onSet: function (newValue, target) {\n                target.question.inputHasValue = !!newValue;\n            }\n        })\n    ], DropdownListModel.prototype, \"inputString\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"property\"])({})\n    ], DropdownListModel.prototype, \"showInputFieldComponent\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"property\"])()\n    ], DropdownListModel.prototype, \"ariaActivedescendant\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"property\"])({\n            defaultValue: false,\n            onSet: function (newVal, target) {\n                if (newVal) {\n                    target.listModel.addScrollEventListener(function (e) { target.onScroll(e); });\n                }\n                else {\n                    target.listModel.removeScrollEventListener();\n                }\n            }\n        })\n    ], DropdownListModel.prototype, \"hasScroll\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"property\"])({ defaultValue: \"\" })\n    ], DropdownListModel.prototype, \"hintString\", void 0);\n    return DropdownListModel;\n}(_base__WEBPACK_IMPORTED_MODULE_0__[\"Base\"]));\n\n\n\n/***/ }),\n\n/***/ \"./src/dropdownMultiSelectListModel.ts\":\n/*!*********************************************!*\\\n  !*** ./src/dropdownMultiSelectListModel.ts ***!\n  \\*********************************************/\n/*! exports provided: DropdownMultiSelectListModel */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1171592__) {\n\n\"use strict\";\n__nested_webpack_require_1171592__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_1171592__.d(__nested_webpack_exports__, \"DropdownMultiSelectListModel\", function() { return DropdownMultiSelectListModel; });\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1171592__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _dropdownListModel__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1171592__(/*! ./dropdownListModel */ \"./src/dropdownListModel.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1171592__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _multiSelectListModel__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1171592__(/*! ./multiSelectListModel */ \"./src/multiSelectListModel.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1171592__(/*! ./settings */ \"./src/settings.ts\");\n/* harmony import */ var _utils_devices__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1171592__(/*! ./utils/devices */ \"./src/utils/devices.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\n\nvar DropdownMultiSelectListModel = /** @class */ (function (_super) {\n    __extends(DropdownMultiSelectListModel, _super);\n    function DropdownMultiSelectListModel(question, onSelectionChanged) {\n        var _this = _super.call(this, question, onSelectionChanged) || this;\n        _this.popupCssClasses = \"sv-multi-select-list\";\n        _this.setHideSelectedItems(question.hideSelectedItems);\n        _this.syncFilterStringPlaceholder();\n        _this.closeOnSelect = question.closeOnSelect;\n        return _this;\n    }\n    DropdownMultiSelectListModel.prototype.locStrsChanged = function () {\n        _super.prototype.locStrsChanged.call(this);\n        this.syncFilterStringPlaceholder();\n    };\n    DropdownMultiSelectListModel.prototype.updateListState = function () {\n        this.listModel.updateState();\n        this.syncFilterStringPlaceholder();\n    };\n    DropdownMultiSelectListModel.prototype.syncFilterStringPlaceholder = function () {\n        var selectedActions = this.getSelectedActions();\n        if (selectedActions.length || this.question.selectedItems.length || this.listModel.focusedItem) {\n            this.filterStringPlaceholder = undefined;\n        }\n        else {\n            this.filterStringPlaceholder = this.question.placeholder;\n        }\n    };\n    DropdownMultiSelectListModel.prototype.getSelectedActions = function () {\n        return this.listModel.actions.filter(function (item) { return item.selected; });\n    };\n    DropdownMultiSelectListModel.prototype.getFocusFirstInputSelector = function () {\n        if (this.listModel.hideSelectedItems && _utils_devices__WEBPACK_IMPORTED_MODULE_5__[\"IsTouch\"] && !this.isValueEmpty(this.question.value)) {\n            return this.itemSelector;\n        }\n        else {\n            return _super.prototype.getFocusFirstInputSelector.call(this);\n        }\n    };\n    DropdownMultiSelectListModel.prototype.createListModel = function () {\n        var _this = this;\n        var visibleItems = this.getAvailableItems();\n        var _onSelectionChanged = this.onSelectionChanged;\n        if (!_onSelectionChanged) {\n            _onSelectionChanged = function (item, status) {\n                _this.resetFilterString();\n                if (item.value === \"selectall\") {\n                    _this.selectAllItems();\n                }\n                else if (status === \"added\" && item.value === _settings__WEBPACK_IMPORTED_MODULE_4__[\"settings\"].noneItemValue) {\n                    _this.selectNoneItem();\n                }\n                else if (status === \"added\") {\n                    _this.selectItem(item.value);\n                }\n                else if (status === \"removed\") {\n                    _this.deselectItem(item.value);\n                }\n                _this.popupRecalculatePosition(false);\n                if (_this.closeOnSelect) {\n                    _this.popupModel.isVisible = false;\n                }\n            };\n        }\n        var res = new _multiSelectListModel__WEBPACK_IMPORTED_MODULE_3__[\"MultiSelectListModel\"](visibleItems, _onSelectionChanged, false, undefined, this.question.choicesLazyLoadEnabled ? this.listModelFilterStringChanged : undefined, this.listElementId);\n        res.forceShowFilter = true;\n        return res;\n    };\n    DropdownMultiSelectListModel.prototype.resetFilterString = function () {\n        _super.prototype.resetFilterString.call(this);\n        this.inputString = null;\n        this.hintString = \"\";\n    };\n    Object.defineProperty(DropdownMultiSelectListModel.prototype, \"shouldResetAfterCancel\", {\n        get: function () {\n            return _utils_devices__WEBPACK_IMPORTED_MODULE_5__[\"IsTouch\"] && !this.closeOnSelect;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    DropdownMultiSelectListModel.prototype.createPopup = function () {\n        var _this = this;\n        _super.prototype.createPopup.call(this);\n        this.popupModel.onFooterActionsCreated.add(function (_, opt) {\n            if (_this.shouldResetAfterCancel) {\n                opt.actions.push({\n                    id: \"sv-dropdown-done-button\",\n                    title: _this.doneButtonCaption,\n                    innerCss: \"sv-popup__button--done\",\n                    needSpace: true,\n                    action: function () { _this.popupModel.isVisible = false; },\n                    enabled: new _base__WEBPACK_IMPORTED_MODULE_0__[\"ComputedUpdater\"](function () { return !_this.isTwoValueEquals(_this.question.renderedValue, _this.previousValue); })\n                });\n            }\n        });\n        this.popupModel.onVisibilityChanged.add(function (_, opt) {\n            if (_this.shouldResetAfterCancel && opt.isVisible) {\n                _this.previousValue = [].concat(_this.question.renderedValue || []);\n            }\n        });\n        this.popupModel.onCancel = function () {\n            if (_this.shouldResetAfterCancel) {\n                _this.question.renderedValue = _this.previousValue;\n                _this.updateListState();\n            }\n        };\n    };\n    DropdownMultiSelectListModel.prototype.selectAllItems = function () {\n        this.question.toggleSelectAll();\n        this.updateListState();\n    };\n    DropdownMultiSelectListModel.prototype.selectNoneItem = function () {\n        this.question.renderedValue = [_settings__WEBPACK_IMPORTED_MODULE_4__[\"settings\"].noneItemValue];\n        this.updateListState();\n    };\n    DropdownMultiSelectListModel.prototype.selectItem = function (id) {\n        var newValue = [].concat(this.question.renderedValue || []);\n        newValue.push(id);\n        this.question.renderedValue = newValue;\n        this.updateListState();\n    };\n    DropdownMultiSelectListModel.prototype.deselectItem = function (id) {\n        var newValue = [].concat(this.question.renderedValue || []);\n        newValue.splice(newValue.indexOf(id), 1);\n        this.question.renderedValue = newValue;\n        this.applyHintString(this.listModel.focusedItem);\n        this.updateListState();\n    };\n    DropdownMultiSelectListModel.prototype.clear = function () {\n        _super.prototype.clear.call(this);\n        this.syncFilterStringPlaceholder();\n    };\n    DropdownMultiSelectListModel.prototype.onClear = function (event) {\n        _super.prototype.onClear.call(this, event);\n        this.updateListState();\n    };\n    DropdownMultiSelectListModel.prototype.setHideSelectedItems = function (newValue) {\n        this.listModel.hideSelectedItems = newValue;\n        this.updateListState();\n    };\n    DropdownMultiSelectListModel.prototype.removeLastSelectedItem = function () {\n        this.deselectItem(this.question.renderedValue[this.question.renderedValue.length - 1]);\n        this.popupRecalculatePosition(false);\n    };\n    DropdownMultiSelectListModel.prototype.inputKeyHandler = function (event) {\n        if (event.keyCode === 8 && !this.filterString) {\n            this.removeLastSelectedItem();\n            event.preventDefault();\n            event.stopPropagation();\n        }\n    };\n    DropdownMultiSelectListModel.prototype.setInputStringFromSelectedItem = function (newValue) {\n        if (this.question.searchEnabled) {\n            this.inputString = null;\n        }\n    };\n    DropdownMultiSelectListModel.prototype.focusItemOnClickAndPopup = function () {\n        return;\n    };\n    DropdownMultiSelectListModel.prototype.onEscape = function () {\n        return;\n    };\n    DropdownMultiSelectListModel.prototype.beforeScrollToFocusedItem = function (focusedItem) {\n        return;\n    };\n    DropdownMultiSelectListModel.prototype.afterScrollToFocusedItem = function () {\n        var _a;\n        if (!((_a = this.listModel.focusedItem) === null || _a === void 0 ? void 0 : _a.selected)) {\n            this.applyHintString(this.listModel.focusedItem || this.question.selectedItem);\n        }\n        else {\n            this.hintString = \"\";\n        }\n        this.syncFilterStringPlaceholder();\n    };\n    DropdownMultiSelectListModel.prototype.onPropertyChangedHandler = function (sender, options) {\n        _super.prototype.onPropertyChangedHandler.call(this, sender, options);\n        if (options.name === \"value\" || options.name === \"renderedValue\") {\n            this.syncFilterStringPlaceholder();\n        }\n    };\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"property\"])({ defaultValue: \"\" })\n    ], DropdownMultiSelectListModel.prototype, \"filterStringPlaceholder\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"property\"])({ defaultValue: true })\n    ], DropdownMultiSelectListModel.prototype, \"closeOnSelect\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"property\"])()\n    ], DropdownMultiSelectListModel.prototype, \"previousValue\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"property\"])({ localizable: { defaultStr: \"tagboxDoneButtonCaption\" } })\n    ], DropdownMultiSelectListModel.prototype, \"doneButtonCaption\", void 0);\n    return DropdownMultiSelectListModel;\n}(_dropdownListModel__WEBPACK_IMPORTED_MODULE_1__[\"DropdownListModel\"]));\n\n\n\n/***/ }),\n\n/***/ \"./src/dxSurveyService.ts\":\n/*!********************************!*\\\n  !*** ./src/dxSurveyService.ts ***!\n  \\********************************/\n/*! exports provided: dxSurveyService */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1183391__) {\n\n\"use strict\";\n__nested_webpack_require_1183391__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_1183391__.d(__nested_webpack_exports__, \"dxSurveyService\", function() { return dxSurveyService; });\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1183391__(/*! ./settings */ \"./src/settings.ts\");\n\n/**\n * The class contains methods to work with api.surveyjs.io service.\n */\nvar dxSurveyService = /** @class */ (function () {\n    function dxSurveyService() {\n    }\n    Object.defineProperty(dxSurveyService, \"serviceUrl\", {\n        get: function () {\n            return _settings__WEBPACK_IMPORTED_MODULE_0__[\"settings\"].web.surveyServiceUrl;\n        },\n        set: function (val) {\n            _settings__WEBPACK_IMPORTED_MODULE_0__[\"settings\"].web.surveyServiceUrl = val;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    dxSurveyService.prototype.loadSurvey = function (surveyId, onLoad) {\n        var xhr = new XMLHttpRequest();\n        xhr.open(\"GET\", dxSurveyService.serviceUrl + \"/getSurvey?surveyId=\" + surveyId);\n        xhr.setRequestHeader(\"Content-Type\", \"application/x-www-form-urlencoded\");\n        xhr.onload = function () {\n            var result = JSON.parse(xhr.response);\n            onLoad(xhr.status == 200, result, xhr.response);\n        };\n        xhr.send();\n    };\n    dxSurveyService.prototype.getSurveyJsonAndIsCompleted = function (surveyId, clientId, onLoad) {\n        var xhr = new XMLHttpRequest();\n        xhr.open(\"GET\", dxSurveyService.serviceUrl +\n            \"/getSurveyAndIsCompleted?surveyId=\" +\n            surveyId +\n            \"&clientId=\" +\n            clientId);\n        xhr.setRequestHeader(\"Content-Type\", \"application/x-www-form-urlencoded\");\n        xhr.onload = function () {\n            var result = JSON.parse(xhr.response);\n            var surveyJson = result ? result.survey : null;\n            var isCompleted = result ? result.isCompleted : null;\n            onLoad(xhr.status == 200, surveyJson, isCompleted, xhr.response);\n        };\n        xhr.send();\n    };\n    dxSurveyService.prototype.sendResult = function (postId, result, onSendResult, clientId, isPartialCompleted) {\n        if (clientId === void 0) { clientId = null; }\n        if (isPartialCompleted === void 0) { isPartialCompleted = false; }\n        var xhr = new XMLHttpRequest();\n        xhr.open(\"POST\", dxSurveyService.serviceUrl + \"/post/\");\n        xhr.setRequestHeader(\"Content-Type\", \"application/json; charset=utf-8\");\n        var data = { postId: postId, surveyResult: JSON.stringify(result) };\n        if (clientId)\n            data[\"clientId\"] = clientId;\n        if (isPartialCompleted)\n            data[\"isPartialCompleted\"] = true;\n        var dataStringify = JSON.stringify(data);\n        var self = this;\n        xhr.onload = xhr.onerror = function () {\n            if (!onSendResult)\n                return;\n            onSendResult(xhr.status === 200, xhr.response, xhr);\n        };\n        xhr.send(dataStringify);\n    };\n    dxSurveyService.prototype.sendFile = function (postId, file, onSendFile) {\n        var xhr = new XMLHttpRequest();\n        xhr.onload = xhr.onerror = function () {\n            if (!onSendFile)\n                return;\n            onSendFile(xhr.status == 200, JSON.parse(xhr.response));\n        };\n        xhr.open(\"POST\", dxSurveyService.serviceUrl + \"/upload/\", true);\n        var formData = new FormData();\n        formData.append(\"file\", file);\n        formData.append(\"postId\", postId);\n        xhr.send(formData);\n    };\n    dxSurveyService.prototype.getResult = function (resultId, name, onGetResult) {\n        var xhr = new XMLHttpRequest();\n        var data = \"resultId=\" + resultId + \"&name=\" + name;\n        xhr.open(\"GET\", dxSurveyService.serviceUrl + \"/getResult?\" + data);\n        xhr.setRequestHeader(\"Content-Type\", \"application/x-www-form-urlencoded\");\n        var self = this;\n        xhr.onload = function () {\n            var result = null;\n            var list = null;\n            if (xhr.status == 200) {\n                result = JSON.parse(xhr.response);\n                list = [];\n                for (var key in result.QuestionResult) {\n                    var el = { name: key, value: result.QuestionResult[key] };\n                    list.push(el);\n                }\n            }\n            onGetResult(xhr.status == 200, result, list, xhr.response);\n        };\n        xhr.send();\n    };\n    dxSurveyService.prototype.isCompleted = function (resultId, clientId, onIsCompleted) {\n        var xhr = new XMLHttpRequest();\n        var data = \"resultId=\" + resultId + \"&clientId=\" + clientId;\n        xhr.open(\"GET\", dxSurveyService.serviceUrl + \"/isCompleted?\" + data);\n        xhr.setRequestHeader(\"Content-Type\", \"application/x-www-form-urlencoded\");\n        var self = this;\n        xhr.onload = function () {\n            var result = null;\n            if (xhr.status == 200) {\n                result = JSON.parse(xhr.response);\n            }\n            onIsCompleted(xhr.status == 200, result, xhr.response);\n        };\n        xhr.send();\n    };\n    return dxSurveyService;\n}());\n\n\n\n/***/ }),\n\n/***/ \"./src/element-helper.ts\":\n/*!*******************************!*\\\n  !*** ./src/element-helper.ts ***!\n  \\*******************************/\n/*! exports provided: ElementHelper */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1188781__) {\n\n\"use strict\";\n__nested_webpack_require_1188781__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_1188781__.d(__nested_webpack_exports__, \"ElementHelper\", function() { return ElementHelper; });\nvar ElementHelper = /** @class */ (function () {\n    function ElementHelper() {\n    }\n    ElementHelper.focusElement = function (element) {\n        element && element.focus();\n    };\n    ElementHelper.visibility = function (node) {\n        var style = window.getComputedStyle(node);\n        if (style.display === \"none\" || style.visibility === \"hidden\")\n            return false;\n        return node.parentElement ? this.visibility(node.parentElement) : true;\n    };\n    ElementHelper.getNextElementPreorder = function (element) {\n        var result = !!element.nextElementSibling ? element.nextElementSibling : element.parentElement.firstElementChild;\n        if (this.visibility(result)) {\n            return result;\n        }\n        else {\n            return this.getNextElementPreorder(result);\n        }\n    };\n    ElementHelper.getNextElementPostorder = function (element) {\n        var result = !!element.previousElementSibling ? element.previousElementSibling : element.parentElement.lastElementChild;\n        if (this.visibility(result)) {\n            return result;\n        }\n        else {\n            return this.getNextElementPostorder(result);\n        }\n    };\n    ElementHelper.hasHorizontalScroller = function (element) {\n        if (!!element) {\n            return element.scrollWidth > element.offsetWidth;\n        }\n        return false;\n    };\n    ElementHelper.hasVerticalScroller = function (element) {\n        if (!!element) {\n            return element.scrollHeight > element.offsetHeight;\n        }\n        return false;\n    };\n    return ElementHelper;\n}());\n\n\n\n/***/ }),\n\n/***/ \"./src/entries/chunks/localization.ts\":\n/*!********************************************!*\\\n  !*** ./src/entries/chunks/localization.ts ***!\n  \\********************************************/\n/*! no exports provided */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1190860__) {\n\n\"use strict\";\n__nested_webpack_require_1190860__.r(__nested_webpack_exports__);\n/* harmony import */ var _localization_arabic__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1190860__(/*! ../../localization/arabic */ \"./src/localization/arabic.ts\");\n/* harmony import */ var _localization_basque__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1190860__(/*! ../../localization/basque */ \"./src/localization/basque.ts\");\n/* harmony import */ var _localization_bulgarian__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1190860__(/*! ../../localization/bulgarian */ \"./src/localization/bulgarian.ts\");\n/* harmony import */ var _localization_catalan__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1190860__(/*! ../../localization/catalan */ \"./src/localization/catalan.ts\");\n/* harmony import */ var _localization_croatian__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1190860__(/*! ../../localization/croatian */ \"./src/localization/croatian.ts\");\n/* harmony import */ var _localization_czech__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1190860__(/*! ../../localization/czech */ \"./src/localization/czech.ts\");\n/* harmony import */ var _localization_danish__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_1190860__(/*! ../../localization/danish */ \"./src/localization/danish.ts\");\n/* harmony import */ var _localization_dutch__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_1190860__(/*! ../../localization/dutch */ \"./src/localization/dutch.ts\");\n/* harmony import */ var _localization_nl_BE__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_1190860__(/*! ../../localization/nl-BE */ \"./src/localization/nl-BE.ts\");\n/* harmony import */ var _localization_estonian__WEBPACK_IMPORTED_MODULE_9__ = __nested_webpack_require_1190860__(/*! ../../localization/estonian */ \"./src/localization/estonian.ts\");\n/* harmony import */ var _localization_finnish__WEBPACK_IMPORTED_MODULE_10__ = __nested_webpack_require_1190860__(/*! ../../localization/finnish */ \"./src/localization/finnish.ts\");\n/* harmony import */ var _localization_french__WEBPACK_IMPORTED_MODULE_11__ = __nested_webpack_require_1190860__(/*! ../../localization/french */ \"./src/localization/french.ts\");\n/* harmony import */ var _localization_georgian__WEBPACK_IMPORTED_MODULE_12__ = __nested_webpack_require_1190860__(/*! ../../localization/georgian */ \"./src/localization/georgian.ts\");\n/* harmony import */ var _localization_german__WEBPACK_IMPORTED_MODULE_13__ = __nested_webpack_require_1190860__(/*! ../../localization/german */ \"./src/localization/german.ts\");\n/* harmony import */ var _localization_greek__WEBPACK_IMPORTED_MODULE_14__ = __nested_webpack_require_1190860__(/*! ../../localization/greek */ \"./src/localization/greek.ts\");\n/* harmony import */ var _localization_hebrew__WEBPACK_IMPORTED_MODULE_15__ = __nested_webpack_require_1190860__(/*! ../../localization/hebrew */ \"./src/localization/hebrew.ts\");\n/* harmony import */ var _localization_hindi__WEBPACK_IMPORTED_MODULE_16__ = __nested_webpack_require_1190860__(/*! ../../localization/hindi */ \"./src/localization/hindi.ts\");\n/* harmony import */ var _localization_hungarian__WEBPACK_IMPORTED_MODULE_17__ = __nested_webpack_require_1190860__(/*! ../../localization/hungarian */ \"./src/localization/hungarian.ts\");\n/* harmony import */ var _localization_icelandic__WEBPACK_IMPORTED_MODULE_18__ = __nested_webpack_require_1190860__(/*! ../../localization/icelandic */ \"./src/localization/icelandic.ts\");\n/* harmony import */ var _localization_indonesian__WEBPACK_IMPORTED_MODULE_19__ = __nested_webpack_require_1190860__(/*! ../../localization/indonesian */ \"./src/localization/indonesian.ts\");\n/* harmony import */ var _localization_italian__WEBPACK_IMPORTED_MODULE_20__ = __nested_webpack_require_1190860__(/*! ../../localization/italian */ \"./src/localization/italian.ts\");\n/* harmony import */ var _localization_japanese__WEBPACK_IMPORTED_MODULE_21__ = __nested_webpack_require_1190860__(/*! ../../localization/japanese */ \"./src/localization/japanese.ts\");\n/* harmony import */ var _localization_kazakh__WEBPACK_IMPORTED_MODULE_22__ = __nested_webpack_require_1190860__(/*! ../../localization/kazakh */ \"./src/localization/kazakh.ts\");\n/* harmony import */ var _localization_korean__WEBPACK_IMPORTED_MODULE_23__ = __nested_webpack_require_1190860__(/*! ../../localization/korean */ \"./src/localization/korean.ts\");\n/* harmony import */ var _localization_latvian__WEBPACK_IMPORTED_MODULE_24__ = __nested_webpack_require_1190860__(/*! ../../localization/latvian */ \"./src/localization/latvian.ts\");\n/* harmony import */ var _localization_lithuanian__WEBPACK_IMPORTED_MODULE_25__ = __nested_webpack_require_1190860__(/*! ../../localization/lithuanian */ \"./src/localization/lithuanian.ts\");\n/* harmony import */ var _localization_macedonian__WEBPACK_IMPORTED_MODULE_26__ = __nested_webpack_require_1190860__(/*! ../../localization/macedonian */ \"./src/localization/macedonian.ts\");\n/* harmony import */ var _localization_malay__WEBPACK_IMPORTED_MODULE_27__ = __nested_webpack_require_1190860__(/*! ../../localization/malay */ \"./src/localization/malay.ts\");\n/* harmony import */ var _localization_norwegian__WEBPACK_IMPORTED_MODULE_28__ = __nested_webpack_require_1190860__(/*! ../../localization/norwegian */ \"./src/localization/norwegian.ts\");\n/* harmony import */ var _localization_persian__WEBPACK_IMPORTED_MODULE_29__ = __nested_webpack_require_1190860__(/*! ../../localization/persian */ \"./src/localization/persian.ts\");\n/* harmony import */ var _localization_polish__WEBPACK_IMPORTED_MODULE_30__ = __nested_webpack_require_1190860__(/*! ../../localization/polish */ \"./src/localization/polish.ts\");\n/* harmony import */ var _localization_portuguese__WEBPACK_IMPORTED_MODULE_31__ = __nested_webpack_require_1190860__(/*! ../../localization/portuguese */ \"./src/localization/portuguese.ts\");\n/* harmony import */ var _localization_portuguese_br__WEBPACK_IMPORTED_MODULE_32__ = __nested_webpack_require_1190860__(/*! ../../localization/portuguese-br */ \"./src/localization/portuguese-br.ts\");\n/* harmony import */ var _localization_romanian__WEBPACK_IMPORTED_MODULE_33__ = __nested_webpack_require_1190860__(/*! ../../localization/romanian */ \"./src/localization/romanian.ts\");\n/* harmony import */ var _localization_russian__WEBPACK_IMPORTED_MODULE_34__ = __nested_webpack_require_1190860__(/*! ../../localization/russian */ \"./src/localization/russian.ts\");\n/* harmony import */ var _localization_serbian__WEBPACK_IMPORTED_MODULE_35__ = __nested_webpack_require_1190860__(/*! ../../localization/serbian */ \"./src/localization/serbian.ts\");\n/* harmony import */ var _localization_simplified_chinese__WEBPACK_IMPORTED_MODULE_36__ = __nested_webpack_require_1190860__(/*! ../../localization/simplified-chinese */ \"./src/localization/simplified-chinese.ts\");\n/* harmony import */ var _localization_slovak__WEBPACK_IMPORTED_MODULE_37__ = __nested_webpack_require_1190860__(/*! ../../localization/slovak */ \"./src/localization/slovak.ts\");\n/* harmony import */ var _localization_spanish__WEBPACK_IMPORTED_MODULE_38__ = __nested_webpack_require_1190860__(/*! ../../localization/spanish */ \"./src/localization/spanish.ts\");\n/* harmony import */ var _localization_swahili__WEBPACK_IMPORTED_MODULE_39__ = __nested_webpack_require_1190860__(/*! ../../localization/swahili */ \"./src/localization/swahili.ts\");\n/* harmony import */ var _localization_swedish__WEBPACK_IMPORTED_MODULE_40__ = __nested_webpack_require_1190860__(/*! ../../localization/swedish */ \"./src/localization/swedish.ts\");\n/* harmony import */ var _localization_tajik__WEBPACK_IMPORTED_MODULE_41__ = __nested_webpack_require_1190860__(/*! ../../localization/tajik */ \"./src/localization/tajik.ts\");\n/* harmony import */ var _localization_thai__WEBPACK_IMPORTED_MODULE_42__ = __nested_webpack_require_1190860__(/*! ../../localization/thai */ \"./src/localization/thai.ts\");\n/* harmony import */ var _localization_traditional_chinese__WEBPACK_IMPORTED_MODULE_43__ = __nested_webpack_require_1190860__(/*! ../../localization/traditional-chinese */ \"./src/localization/traditional-chinese.ts\");\n/* harmony import */ var _localization_turkish__WEBPACK_IMPORTED_MODULE_44__ = __nested_webpack_require_1190860__(/*! ../../localization/turkish */ \"./src/localization/turkish.ts\");\n/* harmony import */ var _localization_ukrainian__WEBPACK_IMPORTED_MODULE_45__ = __nested_webpack_require_1190860__(/*! ../../localization/ukrainian */ \"./src/localization/ukrainian.ts\");\n/* harmony import */ var _localization_vietnamese__WEBPACK_IMPORTED_MODULE_46__ = __nested_webpack_require_1190860__(/*! ../../localization/vietnamese */ \"./src/localization/vietnamese.ts\");\n/* harmony import */ var _localization_welsh__WEBPACK_IMPORTED_MODULE_47__ = __nested_webpack_require_1190860__(/*! ../../localization/welsh */ \"./src/localization/welsh.ts\");\n/* harmony import */ var _localization_telugu__WEBPACK_IMPORTED_MODULE_48__ = __nested_webpack_require_1190860__(/*! ../../localization/telugu */ \"./src/localization/telugu.ts\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/***/ }),\n\n/***/ \"./src/entries/chunks/model.ts\":\n/*!*************************************!*\\\n  !*** ./src/entries/chunks/model.ts ***!\n  \\*************************************/\n/*! exports provided: Version, ReleaseDate, checkLibraryVersion, setLicenseKey, hasLicense, settings, Helpers, AnswerCountValidator, EmailValidator, NumericValidator, RegexValidator, SurveyValidator, TextValidator, ValidatorResult, ExpressionValidator, ValidatorRunner, ItemValue, Base, Event, EventBase, ArrayChanges, ComputedUpdater, SurveyError, SurveyElementCore, SurveyElement, DragTypeOverMeEnum, CalculatedValue, CustomError, AnswerRequiredError, OneAnswerRequiredError, RequreNumericError, ExceedSizeError, LocalizableString, LocalizableStrings, HtmlConditionItem, UrlConditionItem, ChoicesRestful, ChoicesRestfull, FunctionFactory, registerFunction, ConditionRunner, ExpressionRunner, ExpressionExecutor, Operand, Const, BinaryOperand, Variable, FunctionOperand, ArrayOperand, UnaryOperand, ConditionsParser, ProcessValue, JsonError, JsonIncorrectTypeError, JsonMetadata, JsonMetadataClass, JsonMissingTypeError, JsonMissingTypeErrorBase, JsonObject, JsonObjectProperty, JsonRequiredPropertyError, JsonUnknownPropertyError, Serializer, property, propertyArray, MatrixDropdownCell, MatrixDropdownRowModelBase, QuestionMatrixDropdownModelBase, MatrixDropdownColumn, matrixDropdownColumnTypes, QuestionMatrixDropdownRenderedCell, QuestionMatrixDropdownRenderedRow, QuestionMatrixDropdownRenderedTable, MatrixDropdownRowModel, QuestionMatrixDropdownModel, MatrixDynamicRowModel, QuestionMatrixDynamicModel, MatrixRowModel, MatrixCells, QuestionMatrixModel, QuestionMatrixBaseModel, MultipleTextItemModel, MultipleTextCell, MultipleTextErrorCell, MutlipleTextErrorRow, MutlipleTextRow, QuestionMultipleTextModel, MultipleTextEditorModel, PanelModel, PanelModelBase, QuestionRowModel, FlowPanelModel, PageModel, DefaultTitleModel, Question, QuestionNonValue, QuestionEmptyModel, QuestionCheckboxBase, QuestionSelectBase, QuestionCheckboxModel, QuestionTagboxModel, QuestionRankingModel, QuestionCommentModel, QuestionDropdownModel, QuestionFactory, ElementFactory, QuestionFileModel, QuestionHtmlModel, QuestionRadiogroupModel, QuestionRatingModel, RenderedRatingItem, QuestionExpressionModel, QuestionTextBase, CharacterCounter, QuestionTextModel, QuestionBooleanModel, QuestionImagePickerModel, ImageItemValue, QuestionImageModel, QuestionSignaturePadModel, QuestionPanelDynamicModel, QuestionPanelDynamicItem, SurveyTimer, SurveyTimerModel, tryNavigateToPage, tryFocusPage, createTOCListModel, getTocRootCss, TOCModel, SurveyProgressModel, SurveyProgressButtonsModel, SurveyModel, SurveyTrigger, SurveyTriggerComplete, SurveyTriggerSetValue, SurveyTriggerVisible, SurveyTriggerCopyValue, SurveyTriggerRunExpression, SurveyTriggerSkip, Trigger, PopupSurveyModel, SurveyWindowModel, TextPreProcessor, Notifier, Cover, CoverCell, dxSurveyService, englishStrings, surveyLocalization, surveyStrings, QuestionCustomWidget, CustomWidgetCollection, QuestionCustomModel, QuestionCompositeModel, ComponentQuestionJSON, ComponentCollection, StylesManager, ListModel, MultiSelectListModel, PopupModel, createDialogOptions, PopupBaseViewModel, PopupDropdownViewModel, PopupModalViewModel, createPopupViewModel, createPopupModalViewModel, DropdownListModel, DropdownMultiSelectListModel, QuestionButtonGroupModel, ButtonGroupItemModel, ButtonGroupItemValue, IsMobile, IsTouch, _setIsTouch, confirmAction, confirmActionAsync, detectIEOrEdge, doKey2ClickUp, doKey2ClickDown, doKey2ClickBlur, loadFileFromBase64, increaseHeightByContent, createSvg, sanitizeEditableContent, CssClassBuilder, surveyCss, defaultV2Css, defaultV2ThemeName, DragDropCore, DragDropChoices, DragDropRankingSelectToRank */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1203063__) {\n\n\"use strict\";\n__nested_webpack_require_1203063__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"Version\", function() { return Version; });\n/* harmony export (binding) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"ReleaseDate\", function() { return ReleaseDate; });\n/* harmony export (binding) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"checkLibraryVersion\", function() { return checkLibraryVersion; });\n/* harmony export (binding) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"setLicenseKey\", function() { return setLicenseKey; });\n/* harmony export (binding) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"hasLicense\", function() { return hasLicense; });\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1203063__(/*! ../../settings */ \"./src/settings.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"settings\", function() { return _settings__WEBPACK_IMPORTED_MODULE_0__[\"settings\"]; });\n\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1203063__(/*! ../../helpers */ \"./src/helpers.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"Helpers\", function() { return _helpers__WEBPACK_IMPORTED_MODULE_1__[\"Helpers\"]; });\n\n/* harmony import */ var _validator__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1203063__(/*! ../../validator */ \"./src/validator.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"AnswerCountValidator\", function() { return _validator__WEBPACK_IMPORTED_MODULE_2__[\"AnswerCountValidator\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"EmailValidator\", function() { return _validator__WEBPACK_IMPORTED_MODULE_2__[\"EmailValidator\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"NumericValidator\", function() { return _validator__WEBPACK_IMPORTED_MODULE_2__[\"NumericValidator\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"RegexValidator\", function() { return _validator__WEBPACK_IMPORTED_MODULE_2__[\"RegexValidator\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"SurveyValidator\", function() { return _validator__WEBPACK_IMPORTED_MODULE_2__[\"SurveyValidator\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"TextValidator\", function() { return _validator__WEBPACK_IMPORTED_MODULE_2__[\"TextValidator\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"ValidatorResult\", function() { return _validator__WEBPACK_IMPORTED_MODULE_2__[\"ValidatorResult\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"ExpressionValidator\", function() { return _validator__WEBPACK_IMPORTED_MODULE_2__[\"ExpressionValidator\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"ValidatorRunner\", function() { return _validator__WEBPACK_IMPORTED_MODULE_2__[\"ValidatorRunner\"]; });\n\n/* harmony import */ var _itemvalue__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1203063__(/*! ../../itemvalue */ \"./src/itemvalue.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"ItemValue\", function() { return _itemvalue__WEBPACK_IMPORTED_MODULE_3__[\"ItemValue\"]; });\n\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1203063__(/*! ../../base */ \"./src/base.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"Base\", function() { return _base__WEBPACK_IMPORTED_MODULE_4__[\"Base\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"Event\", function() { return _base__WEBPACK_IMPORTED_MODULE_4__[\"Event\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"EventBase\", function() { return _base__WEBPACK_IMPORTED_MODULE_4__[\"EventBase\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"ArrayChanges\", function() { return _base__WEBPACK_IMPORTED_MODULE_4__[\"ArrayChanges\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"ComputedUpdater\", function() { return _base__WEBPACK_IMPORTED_MODULE_4__[\"ComputedUpdater\"]; });\n\n/* harmony import */ var _survey_error__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1203063__(/*! ../../survey-error */ \"./src/survey-error.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"SurveyError\", function() { return _survey_error__WEBPACK_IMPORTED_MODULE_5__[\"SurveyError\"]; });\n\n/* harmony import */ var _survey_element__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_1203063__(/*! ../../survey-element */ \"./src/survey-element.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"SurveyElementCore\", function() { return _survey_element__WEBPACK_IMPORTED_MODULE_6__[\"SurveyElementCore\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"SurveyElement\", function() { return _survey_element__WEBPACK_IMPORTED_MODULE_6__[\"SurveyElement\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"DragTypeOverMeEnum\", function() { return _survey_element__WEBPACK_IMPORTED_MODULE_6__[\"DragTypeOverMeEnum\"]; });\n\n/* harmony import */ var _calculatedValue__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_1203063__(/*! ../../calculatedValue */ \"./src/calculatedValue.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"CalculatedValue\", function() { return _calculatedValue__WEBPACK_IMPORTED_MODULE_7__[\"CalculatedValue\"]; });\n\n/* harmony import */ var _error__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_1203063__(/*! ../../error */ \"./src/error.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"CustomError\", function() { return _error__WEBPACK_IMPORTED_MODULE_8__[\"CustomError\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"AnswerRequiredError\", function() { return _error__WEBPACK_IMPORTED_MODULE_8__[\"AnswerRequiredError\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"OneAnswerRequiredError\", function() { return _error__WEBPACK_IMPORTED_MODULE_8__[\"OneAnswerRequiredError\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"RequreNumericError\", function() { return _error__WEBPACK_IMPORTED_MODULE_8__[\"RequreNumericError\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"ExceedSizeError\", function() { return _error__WEBPACK_IMPORTED_MODULE_8__[\"ExceedSizeError\"]; });\n\n/* harmony import */ var _localizablestring__WEBPACK_IMPORTED_MODULE_9__ = __nested_webpack_require_1203063__(/*! ../../localizablestring */ \"./src/localizablestring.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"LocalizableString\", function() { return _localizablestring__WEBPACK_IMPORTED_MODULE_9__[\"LocalizableString\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"LocalizableStrings\", function() { return _localizablestring__WEBPACK_IMPORTED_MODULE_9__[\"LocalizableStrings\"]; });\n\n/* harmony import */ var _expressionItems__WEBPACK_IMPORTED_MODULE_10__ = __nested_webpack_require_1203063__(/*! ../../expressionItems */ \"./src/expressionItems.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"HtmlConditionItem\", function() { return _expressionItems__WEBPACK_IMPORTED_MODULE_10__[\"HtmlConditionItem\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"UrlConditionItem\", function() { return _expressionItems__WEBPACK_IMPORTED_MODULE_10__[\"UrlConditionItem\"]; });\n\n/* harmony import */ var _choicesRestful__WEBPACK_IMPORTED_MODULE_11__ = __nested_webpack_require_1203063__(/*! ../../choicesRestful */ \"./src/choicesRestful.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"ChoicesRestful\", function() { return _choicesRestful__WEBPACK_IMPORTED_MODULE_11__[\"ChoicesRestful\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"ChoicesRestfull\", function() { return _choicesRestful__WEBPACK_IMPORTED_MODULE_11__[\"ChoicesRestfull\"]; });\n\n/* harmony import */ var _functionsfactory__WEBPACK_IMPORTED_MODULE_12__ = __nested_webpack_require_1203063__(/*! ../../functionsfactory */ \"./src/functionsfactory.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"FunctionFactory\", function() { return _functionsfactory__WEBPACK_IMPORTED_MODULE_12__[\"FunctionFactory\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"registerFunction\", function() { return _functionsfactory__WEBPACK_IMPORTED_MODULE_12__[\"registerFunction\"]; });\n\n/* harmony import */ var _conditions__WEBPACK_IMPORTED_MODULE_13__ = __nested_webpack_require_1203063__(/*! ../../conditions */ \"./src/conditions.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"ConditionRunner\", function() { return _conditions__WEBPACK_IMPORTED_MODULE_13__[\"ConditionRunner\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"ExpressionRunner\", function() { return _conditions__WEBPACK_IMPORTED_MODULE_13__[\"ExpressionRunner\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"ExpressionExecutor\", function() { return _conditions__WEBPACK_IMPORTED_MODULE_13__[\"ExpressionExecutor\"]; });\n\n/* harmony import */ var _expressions_expressions__WEBPACK_IMPORTED_MODULE_14__ = __nested_webpack_require_1203063__(/*! ../../expressions/expressions */ \"./src/expressions/expressions.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"Operand\", function() { return _expressions_expressions__WEBPACK_IMPORTED_MODULE_14__[\"Operand\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"Const\", function() { return _expressions_expressions__WEBPACK_IMPORTED_MODULE_14__[\"Const\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"BinaryOperand\", function() { return _expressions_expressions__WEBPACK_IMPORTED_MODULE_14__[\"BinaryOperand\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"Variable\", function() { return _expressions_expressions__WEBPACK_IMPORTED_MODULE_14__[\"Variable\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"FunctionOperand\", function() { return _expressions_expressions__WEBPACK_IMPORTED_MODULE_14__[\"FunctionOperand\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"ArrayOperand\", function() { return _expressions_expressions__WEBPACK_IMPORTED_MODULE_14__[\"ArrayOperand\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"UnaryOperand\", function() { return _expressions_expressions__WEBPACK_IMPORTED_MODULE_14__[\"UnaryOperand\"]; });\n\n/* harmony import */ var _conditionsParser__WEBPACK_IMPORTED_MODULE_15__ = __nested_webpack_require_1203063__(/*! ../../conditionsParser */ \"./src/conditionsParser.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"ConditionsParser\", function() { return _conditionsParser__WEBPACK_IMPORTED_MODULE_15__[\"ConditionsParser\"]; });\n\n/* harmony import */ var _conditionProcessValue__WEBPACK_IMPORTED_MODULE_16__ = __nested_webpack_require_1203063__(/*! ../../conditionProcessValue */ \"./src/conditionProcessValue.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"ProcessValue\", function() { return _conditionProcessValue__WEBPACK_IMPORTED_MODULE_16__[\"ProcessValue\"]; });\n\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_17__ = __nested_webpack_require_1203063__(/*! ../../jsonobject */ \"./src/jsonobject.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"JsonError\", function() { return _jsonobject__WEBPACK_IMPORTED_MODULE_17__[\"JsonError\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"JsonIncorrectTypeError\", function() { return _jsonobject__WEBPACK_IMPORTED_MODULE_17__[\"JsonIncorrectTypeError\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"JsonMetadata\", function() { return _jsonobject__WEBPACK_IMPORTED_MODULE_17__[\"JsonMetadata\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"JsonMetadataClass\", function() { return _jsonobject__WEBPACK_IMPORTED_MODULE_17__[\"JsonMetadataClass\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"JsonMissingTypeError\", function() { return _jsonobject__WEBPACK_IMPORTED_MODULE_17__[\"JsonMissingTypeError\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"JsonMissingTypeErrorBase\", function() { return _jsonobject__WEBPACK_IMPORTED_MODULE_17__[\"JsonMissingTypeErrorBase\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"JsonObject\", function() { return _jsonobject__WEBPACK_IMPORTED_MODULE_17__[\"JsonObject\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"JsonObjectProperty\", function() { return _jsonobject__WEBPACK_IMPORTED_MODULE_17__[\"JsonObjectProperty\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"JsonRequiredPropertyError\", function() { return _jsonobject__WEBPACK_IMPORTED_MODULE_17__[\"JsonRequiredPropertyError\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"JsonUnknownPropertyError\", function() { return _jsonobject__WEBPACK_IMPORTED_MODULE_17__[\"JsonUnknownPropertyError\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"Serializer\", function() { return _jsonobject__WEBPACK_IMPORTED_MODULE_17__[\"Serializer\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"property\", function() { return _jsonobject__WEBPACK_IMPORTED_MODULE_17__[\"property\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"propertyArray\", function() { return _jsonobject__WEBPACK_IMPORTED_MODULE_17__[\"propertyArray\"]; });\n\n/* harmony import */ var _question_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_18__ = __nested_webpack_require_1203063__(/*! ../../question_matrixdropdownbase */ \"./src/question_matrixdropdownbase.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"MatrixDropdownCell\", function() { return _question_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_18__[\"MatrixDropdownCell\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"MatrixDropdownRowModelBase\", function() { return _question_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_18__[\"MatrixDropdownRowModelBase\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"QuestionMatrixDropdownModelBase\", function() { return _question_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_18__[\"QuestionMatrixDropdownModelBase\"]; });\n\n/* harmony import */ var _question_matrixdropdowncolumn__WEBPACK_IMPORTED_MODULE_19__ = __nested_webpack_require_1203063__(/*! ../../question_matrixdropdowncolumn */ \"./src/question_matrixdropdowncolumn.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"MatrixDropdownColumn\", function() { return _question_matrixdropdowncolumn__WEBPACK_IMPORTED_MODULE_19__[\"MatrixDropdownColumn\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"matrixDropdownColumnTypes\", function() { return _question_matrixdropdowncolumn__WEBPACK_IMPORTED_MODULE_19__[\"matrixDropdownColumnTypes\"]; });\n\n/* harmony import */ var _question_matrixdropdownrendered__WEBPACK_IMPORTED_MODULE_20__ = __nested_webpack_require_1203063__(/*! ../../question_matrixdropdownrendered */ \"./src/question_matrixdropdownrendered.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"QuestionMatrixDropdownRenderedCell\", function() { return _question_matrixdropdownrendered__WEBPACK_IMPORTED_MODULE_20__[\"QuestionMatrixDropdownRenderedCell\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"QuestionMatrixDropdownRenderedRow\", function() { return _question_matrixdropdownrendered__WEBPACK_IMPORTED_MODULE_20__[\"QuestionMatrixDropdownRenderedRow\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"QuestionMatrixDropdownRenderedTable\", function() { return _question_matrixdropdownrendered__WEBPACK_IMPORTED_MODULE_20__[\"QuestionMatrixDropdownRenderedTable\"]; });\n\n/* harmony import */ var _question_matrixdropdown__WEBPACK_IMPORTED_MODULE_21__ = __nested_webpack_require_1203063__(/*! ../../question_matrixdropdown */ \"./src/question_matrixdropdown.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"MatrixDropdownRowModel\", function() { return _question_matrixdropdown__WEBPACK_IMPORTED_MODULE_21__[\"MatrixDropdownRowModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"QuestionMatrixDropdownModel\", function() { return _question_matrixdropdown__WEBPACK_IMPORTED_MODULE_21__[\"QuestionMatrixDropdownModel\"]; });\n\n/* harmony import */ var _question_matrixdynamic__WEBPACK_IMPORTED_MODULE_22__ = __nested_webpack_require_1203063__(/*! ../../question_matrixdynamic */ \"./src/question_matrixdynamic.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"MatrixDynamicRowModel\", function() { return _question_matrixdynamic__WEBPACK_IMPORTED_MODULE_22__[\"MatrixDynamicRowModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"QuestionMatrixDynamicModel\", function() { return _question_matrixdynamic__WEBPACK_IMPORTED_MODULE_22__[\"QuestionMatrixDynamicModel\"]; });\n\n/* harmony import */ var _question_matrix__WEBPACK_IMPORTED_MODULE_23__ = __nested_webpack_require_1203063__(/*! ../../question_matrix */ \"./src/question_matrix.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"MatrixRowModel\", function() { return _question_matrix__WEBPACK_IMPORTED_MODULE_23__[\"MatrixRowModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"MatrixCells\", function() { return _question_matrix__WEBPACK_IMPORTED_MODULE_23__[\"MatrixCells\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"QuestionMatrixModel\", function() { return _question_matrix__WEBPACK_IMPORTED_MODULE_23__[\"QuestionMatrixModel\"]; });\n\n/* harmony import */ var _martixBase__WEBPACK_IMPORTED_MODULE_24__ = __nested_webpack_require_1203063__(/*! ../../martixBase */ \"./src/martixBase.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"QuestionMatrixBaseModel\", function() { return _martixBase__WEBPACK_IMPORTED_MODULE_24__[\"QuestionMatrixBaseModel\"]; });\n\n/* harmony import */ var _question_multipletext__WEBPACK_IMPORTED_MODULE_25__ = __nested_webpack_require_1203063__(/*! ../../question_multipletext */ \"./src/question_multipletext.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"MultipleTextItemModel\", function() { return _question_multipletext__WEBPACK_IMPORTED_MODULE_25__[\"MultipleTextItemModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"MultipleTextCell\", function() { return _question_multipletext__WEBPACK_IMPORTED_MODULE_25__[\"MultipleTextCell\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"MultipleTextErrorCell\", function() { return _question_multipletext__WEBPACK_IMPORTED_MODULE_25__[\"MultipleTextErrorCell\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"MutlipleTextErrorRow\", function() { return _question_multipletext__WEBPACK_IMPORTED_MODULE_25__[\"MutlipleTextErrorRow\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"MutlipleTextRow\", function() { return _question_multipletext__WEBPACK_IMPORTED_MODULE_25__[\"MutlipleTextRow\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"QuestionMultipleTextModel\", function() { return _question_multipletext__WEBPACK_IMPORTED_MODULE_25__[\"QuestionMultipleTextModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"MultipleTextEditorModel\", function() { return _question_multipletext__WEBPACK_IMPORTED_MODULE_25__[\"MultipleTextEditorModel\"]; });\n\n/* harmony import */ var _panel__WEBPACK_IMPORTED_MODULE_26__ = __nested_webpack_require_1203063__(/*! ../../panel */ \"./src/panel.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"PanelModel\", function() { return _panel__WEBPACK_IMPORTED_MODULE_26__[\"PanelModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"PanelModelBase\", function() { return _panel__WEBPACK_IMPORTED_MODULE_26__[\"PanelModelBase\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"QuestionRowModel\", function() { return _panel__WEBPACK_IMPORTED_MODULE_26__[\"QuestionRowModel\"]; });\n\n/* harmony import */ var _flowpanel__WEBPACK_IMPORTED_MODULE_27__ = __nested_webpack_require_1203063__(/*! ../../flowpanel */ \"./src/flowpanel.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"FlowPanelModel\", function() { return _flowpanel__WEBPACK_IMPORTED_MODULE_27__[\"FlowPanelModel\"]; });\n\n/* harmony import */ var _page__WEBPACK_IMPORTED_MODULE_28__ = __nested_webpack_require_1203063__(/*! ../../page */ \"./src/page.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"PageModel\", function() { return _page__WEBPACK_IMPORTED_MODULE_28__[\"PageModel\"]; });\n\n/* harmony import */ var _template_renderer__WEBPACK_IMPORTED_MODULE_29__ = __nested_webpack_require_1203063__(/*! ../../template-renderer */ \"./src/template-renderer.ts\");\n/* empty/unused harmony star reexport *//* harmony import */ var _defaultTitle__WEBPACK_IMPORTED_MODULE_30__ = __nested_webpack_require_1203063__(/*! ../../defaultTitle */ \"./src/defaultTitle.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"DefaultTitleModel\", function() { return _defaultTitle__WEBPACK_IMPORTED_MODULE_30__[\"DefaultTitleModel\"]; });\n\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_31__ = __nested_webpack_require_1203063__(/*! ../../question */ \"./src/question.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"Question\", function() { return _question__WEBPACK_IMPORTED_MODULE_31__[\"Question\"]; });\n\n/* harmony import */ var _questionnonvalue__WEBPACK_IMPORTED_MODULE_32__ = __nested_webpack_require_1203063__(/*! ../../questionnonvalue */ \"./src/questionnonvalue.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"QuestionNonValue\", function() { return _questionnonvalue__WEBPACK_IMPORTED_MODULE_32__[\"QuestionNonValue\"]; });\n\n/* harmony import */ var _question_empty__WEBPACK_IMPORTED_MODULE_33__ = __nested_webpack_require_1203063__(/*! ../../question_empty */ \"./src/question_empty.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"QuestionEmptyModel\", function() { return _question_empty__WEBPACK_IMPORTED_MODULE_33__[\"QuestionEmptyModel\"]; });\n\n/* harmony import */ var _question_baseselect__WEBPACK_IMPORTED_MODULE_34__ = __nested_webpack_require_1203063__(/*! ../../question_baseselect */ \"./src/question_baseselect.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"QuestionCheckboxBase\", function() { return _question_baseselect__WEBPACK_IMPORTED_MODULE_34__[\"QuestionCheckboxBase\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"QuestionSelectBase\", function() { return _question_baseselect__WEBPACK_IMPORTED_MODULE_34__[\"QuestionSelectBase\"]; });\n\n/* harmony import */ var _question_checkbox__WEBPACK_IMPORTED_MODULE_35__ = __nested_webpack_require_1203063__(/*! ../../question_checkbox */ \"./src/question_checkbox.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"QuestionCheckboxModel\", function() { return _question_checkbox__WEBPACK_IMPORTED_MODULE_35__[\"QuestionCheckboxModel\"]; });\n\n/* harmony import */ var _question_tagbox__WEBPACK_IMPORTED_MODULE_36__ = __nested_webpack_require_1203063__(/*! ../../question_tagbox */ \"./src/question_tagbox.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"QuestionTagboxModel\", function() { return _question_tagbox__WEBPACK_IMPORTED_MODULE_36__[\"QuestionTagboxModel\"]; });\n\n/* harmony import */ var _question_ranking__WEBPACK_IMPORTED_MODULE_37__ = __nested_webpack_require_1203063__(/*! ../../question_ranking */ \"./src/question_ranking.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"QuestionRankingModel\", function() { return _question_ranking__WEBPACK_IMPORTED_MODULE_37__[\"QuestionRankingModel\"]; });\n\n/* harmony import */ var _question_comment__WEBPACK_IMPORTED_MODULE_38__ = __nested_webpack_require_1203063__(/*! ../../question_comment */ \"./src/question_comment.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"QuestionCommentModel\", function() { return _question_comment__WEBPACK_IMPORTED_MODULE_38__[\"QuestionCommentModel\"]; });\n\n/* harmony import */ var _question_dropdown__WEBPACK_IMPORTED_MODULE_39__ = __nested_webpack_require_1203063__(/*! ../../question_dropdown */ \"./src/question_dropdown.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"QuestionDropdownModel\", function() { return _question_dropdown__WEBPACK_IMPORTED_MODULE_39__[\"QuestionDropdownModel\"]; });\n\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_40__ = __nested_webpack_require_1203063__(/*! ../../questionfactory */ \"./src/questionfactory.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"QuestionFactory\", function() { return _questionfactory__WEBPACK_IMPORTED_MODULE_40__[\"QuestionFactory\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"ElementFactory\", function() { return _questionfactory__WEBPACK_IMPORTED_MODULE_40__[\"ElementFactory\"]; });\n\n/* harmony import */ var _question_file__WEBPACK_IMPORTED_MODULE_41__ = __nested_webpack_require_1203063__(/*! ../../question_file */ \"./src/question_file.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"QuestionFileModel\", function() { return _question_file__WEBPACK_IMPORTED_MODULE_41__[\"QuestionFileModel\"]; });\n\n/* harmony import */ var _question_html__WEBPACK_IMPORTED_MODULE_42__ = __nested_webpack_require_1203063__(/*! ../../question_html */ \"./src/question_html.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"QuestionHtmlModel\", function() { return _question_html__WEBPACK_IMPORTED_MODULE_42__[\"QuestionHtmlModel\"]; });\n\n/* harmony import */ var _question_radiogroup__WEBPACK_IMPORTED_MODULE_43__ = __nested_webpack_require_1203063__(/*! ../../question_radiogroup */ \"./src/question_radiogroup.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"QuestionRadiogroupModel\", function() { return _question_radiogroup__WEBPACK_IMPORTED_MODULE_43__[\"QuestionRadiogroupModel\"]; });\n\n/* harmony import */ var _question_rating__WEBPACK_IMPORTED_MODULE_44__ = __nested_webpack_require_1203063__(/*! ../../question_rating */ \"./src/question_rating.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"QuestionRatingModel\", function() { return _question_rating__WEBPACK_IMPORTED_MODULE_44__[\"QuestionRatingModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"RenderedRatingItem\", function() { return _question_rating__WEBPACK_IMPORTED_MODULE_44__[\"RenderedRatingItem\"]; });\n\n/* harmony import */ var _question_expression__WEBPACK_IMPORTED_MODULE_45__ = __nested_webpack_require_1203063__(/*! ../../question_expression */ \"./src/question_expression.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"QuestionExpressionModel\", function() { return _question_expression__WEBPACK_IMPORTED_MODULE_45__[\"QuestionExpressionModel\"]; });\n\n/* harmony import */ var _question_textbase__WEBPACK_IMPORTED_MODULE_46__ = __nested_webpack_require_1203063__(/*! ../../question_textbase */ \"./src/question_textbase.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"QuestionTextBase\", function() { return _question_textbase__WEBPACK_IMPORTED_MODULE_46__[\"QuestionTextBase\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"CharacterCounter\", function() { return _question_textbase__WEBPACK_IMPORTED_MODULE_46__[\"CharacterCounter\"]; });\n\n/* harmony import */ var _question_text__WEBPACK_IMPORTED_MODULE_47__ = __nested_webpack_require_1203063__(/*! ../../question_text */ \"./src/question_text.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"QuestionTextModel\", function() { return _question_text__WEBPACK_IMPORTED_MODULE_47__[\"QuestionTextModel\"]; });\n\n/* harmony import */ var _question_boolean__WEBPACK_IMPORTED_MODULE_48__ = __nested_webpack_require_1203063__(/*! ../../question_boolean */ \"./src/question_boolean.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"QuestionBooleanModel\", function() { return _question_boolean__WEBPACK_IMPORTED_MODULE_48__[\"QuestionBooleanModel\"]; });\n\n/* harmony import */ var _question_imagepicker__WEBPACK_IMPORTED_MODULE_49__ = __nested_webpack_require_1203063__(/*! ../../question_imagepicker */ \"./src/question_imagepicker.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"QuestionImagePickerModel\", function() { return _question_imagepicker__WEBPACK_IMPORTED_MODULE_49__[\"QuestionImagePickerModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"ImageItemValue\", function() { return _question_imagepicker__WEBPACK_IMPORTED_MODULE_49__[\"ImageItemValue\"]; });\n\n/* harmony import */ var _question_image__WEBPACK_IMPORTED_MODULE_50__ = __nested_webpack_require_1203063__(/*! ../../question_image */ \"./src/question_image.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"QuestionImageModel\", function() { return _question_image__WEBPACK_IMPORTED_MODULE_50__[\"QuestionImageModel\"]; });\n\n/* harmony import */ var _question_signaturepad__WEBPACK_IMPORTED_MODULE_51__ = __nested_webpack_require_1203063__(/*! ../../question_signaturepad */ \"./src/question_signaturepad.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"QuestionSignaturePadModel\", function() { return _question_signaturepad__WEBPACK_IMPORTED_MODULE_51__[\"QuestionSignaturePadModel\"]; });\n\n/* harmony import */ var _question_paneldynamic__WEBPACK_IMPORTED_MODULE_52__ = __nested_webpack_require_1203063__(/*! ../../question_paneldynamic */ \"./src/question_paneldynamic.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"QuestionPanelDynamicModel\", function() { return _question_paneldynamic__WEBPACK_IMPORTED_MODULE_52__[\"QuestionPanelDynamicModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"QuestionPanelDynamicItem\", function() { return _question_paneldynamic__WEBPACK_IMPORTED_MODULE_52__[\"QuestionPanelDynamicItem\"]; });\n\n/* harmony import */ var _surveytimer__WEBPACK_IMPORTED_MODULE_53__ = __nested_webpack_require_1203063__(/*! ../../surveytimer */ \"./src/surveytimer.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"SurveyTimer\", function() { return _surveytimer__WEBPACK_IMPORTED_MODULE_53__[\"SurveyTimer\"]; });\n\n/* harmony import */ var _surveyTimerModel__WEBPACK_IMPORTED_MODULE_54__ = __nested_webpack_require_1203063__(/*! ../../surveyTimerModel */ \"./src/surveyTimerModel.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"SurveyTimerModel\", function() { return _surveyTimerModel__WEBPACK_IMPORTED_MODULE_54__[\"SurveyTimerModel\"]; });\n\n/* harmony import */ var _surveyToc__WEBPACK_IMPORTED_MODULE_55__ = __nested_webpack_require_1203063__(/*! ../../surveyToc */ \"./src/surveyToc.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"tryNavigateToPage\", function() { return _surveyToc__WEBPACK_IMPORTED_MODULE_55__[\"tryNavigateToPage\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"tryFocusPage\", function() { return _surveyToc__WEBPACK_IMPORTED_MODULE_55__[\"tryFocusPage\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"createTOCListModel\", function() { return _surveyToc__WEBPACK_IMPORTED_MODULE_55__[\"createTOCListModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"getTocRootCss\", function() { return _surveyToc__WEBPACK_IMPORTED_MODULE_55__[\"getTocRootCss\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"TOCModel\", function() { return _surveyToc__WEBPACK_IMPORTED_MODULE_55__[\"TOCModel\"]; });\n\n/* harmony import */ var _surveyProgress__WEBPACK_IMPORTED_MODULE_56__ = __nested_webpack_require_1203063__(/*! ../../surveyProgress */ \"./src/surveyProgress.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"SurveyProgressModel\", function() { return _surveyProgress__WEBPACK_IMPORTED_MODULE_56__[\"SurveyProgressModel\"]; });\n\n/* harmony import */ var _surveyProgressButtons__WEBPACK_IMPORTED_MODULE_57__ = __nested_webpack_require_1203063__(/*! ../../surveyProgressButtons */ \"./src/surveyProgressButtons.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"SurveyProgressButtonsModel\", function() { return _surveyProgressButtons__WEBPACK_IMPORTED_MODULE_57__[\"SurveyProgressButtonsModel\"]; });\n\n/* harmony import */ var _themes__WEBPACK_IMPORTED_MODULE_58__ = __nested_webpack_require_1203063__(/*! ../../themes */ \"./src/themes.ts\");\n/* empty/unused harmony star reexport *//* harmony import */ var _survey__WEBPACK_IMPORTED_MODULE_59__ = __nested_webpack_require_1203063__(/*! ../../survey */ \"./src/survey.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"SurveyModel\", function() { return _survey__WEBPACK_IMPORTED_MODULE_59__[\"SurveyModel\"]; });\n\n/* harmony import */ var _survey_events_api__WEBPACK_IMPORTED_MODULE_60__ = __nested_webpack_require_1203063__(/*! ../../survey-events-api */ \"./src/survey-events-api.ts\");\n/* empty/unused harmony star reexport *//* harmony import */ var _trigger__WEBPACK_IMPORTED_MODULE_61__ = __nested_webpack_require_1203063__(/*! ../../trigger */ \"./src/trigger.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"SurveyTrigger\", function() { return _trigger__WEBPACK_IMPORTED_MODULE_61__[\"SurveyTrigger\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"SurveyTriggerComplete\", function() { return _trigger__WEBPACK_IMPORTED_MODULE_61__[\"SurveyTriggerComplete\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"SurveyTriggerSetValue\", function() { return _trigger__WEBPACK_IMPORTED_MODULE_61__[\"SurveyTriggerSetValue\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"SurveyTriggerVisible\", function() { return _trigger__WEBPACK_IMPORTED_MODULE_61__[\"SurveyTriggerVisible\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"SurveyTriggerCopyValue\", function() { return _trigger__WEBPACK_IMPORTED_MODULE_61__[\"SurveyTriggerCopyValue\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"SurveyTriggerRunExpression\", function() { return _trigger__WEBPACK_IMPORTED_MODULE_61__[\"SurveyTriggerRunExpression\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"SurveyTriggerSkip\", function() { return _trigger__WEBPACK_IMPORTED_MODULE_61__[\"SurveyTriggerSkip\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"Trigger\", function() { return _trigger__WEBPACK_IMPORTED_MODULE_61__[\"Trigger\"]; });\n\n/* harmony import */ var _popup_survey__WEBPACK_IMPORTED_MODULE_62__ = __nested_webpack_require_1203063__(/*! ../../popup-survey */ \"./src/popup-survey.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"PopupSurveyModel\", function() { return _popup_survey__WEBPACK_IMPORTED_MODULE_62__[\"PopupSurveyModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"SurveyWindowModel\", function() { return _popup_survey__WEBPACK_IMPORTED_MODULE_62__[\"SurveyWindowModel\"]; });\n\n/* harmony import */ var _textPreProcessor__WEBPACK_IMPORTED_MODULE_63__ = __nested_webpack_require_1203063__(/*! ../../textPreProcessor */ \"./src/textPreProcessor.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"TextPreProcessor\", function() { return _textPreProcessor__WEBPACK_IMPORTED_MODULE_63__[\"TextPreProcessor\"]; });\n\n/* harmony import */ var _notifier__WEBPACK_IMPORTED_MODULE_64__ = __nested_webpack_require_1203063__(/*! ../../notifier */ \"./src/notifier.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"Notifier\", function() { return _notifier__WEBPACK_IMPORTED_MODULE_64__[\"Notifier\"]; });\n\n/* harmony import */ var _cover__WEBPACK_IMPORTED_MODULE_65__ = __nested_webpack_require_1203063__(/*! ../../cover */ \"./src/cover.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"Cover\", function() { return _cover__WEBPACK_IMPORTED_MODULE_65__[\"Cover\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"CoverCell\", function() { return _cover__WEBPACK_IMPORTED_MODULE_65__[\"CoverCell\"]; });\n\n/* harmony import */ var _dxSurveyService__WEBPACK_IMPORTED_MODULE_66__ = __nested_webpack_require_1203063__(/*! ../../dxSurveyService */ \"./src/dxSurveyService.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"dxSurveyService\", function() { return _dxSurveyService__WEBPACK_IMPORTED_MODULE_66__[\"dxSurveyService\"]; });\n\n/* harmony import */ var _localization_english__WEBPACK_IMPORTED_MODULE_67__ = __nested_webpack_require_1203063__(/*! ../../localization/english */ \"./src/localization/english.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"englishStrings\", function() { return _localization_english__WEBPACK_IMPORTED_MODULE_67__[\"englishStrings\"]; });\n\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_68__ = __nested_webpack_require_1203063__(/*! ../../surveyStrings */ \"./src/surveyStrings.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"surveyLocalization\", function() { return _surveyStrings__WEBPACK_IMPORTED_MODULE_68__[\"surveyLocalization\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"surveyStrings\", function() { return _surveyStrings__WEBPACK_IMPORTED_MODULE_68__[\"surveyStrings\"]; });\n\n/* harmony import */ var _questionCustomWidgets__WEBPACK_IMPORTED_MODULE_69__ = __nested_webpack_require_1203063__(/*! ../../questionCustomWidgets */ \"./src/questionCustomWidgets.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"QuestionCustomWidget\", function() { return _questionCustomWidgets__WEBPACK_IMPORTED_MODULE_69__[\"QuestionCustomWidget\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"CustomWidgetCollection\", function() { return _questionCustomWidgets__WEBPACK_IMPORTED_MODULE_69__[\"CustomWidgetCollection\"]; });\n\n/* harmony import */ var _question_custom__WEBPACK_IMPORTED_MODULE_70__ = __nested_webpack_require_1203063__(/*! ../../question_custom */ \"./src/question_custom.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"QuestionCustomModel\", function() { return _question_custom__WEBPACK_IMPORTED_MODULE_70__[\"QuestionCustomModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"QuestionCompositeModel\", function() { return _question_custom__WEBPACK_IMPORTED_MODULE_70__[\"QuestionCompositeModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"ComponentQuestionJSON\", function() { return _question_custom__WEBPACK_IMPORTED_MODULE_70__[\"ComponentQuestionJSON\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"ComponentCollection\", function() { return _question_custom__WEBPACK_IMPORTED_MODULE_70__[\"ComponentCollection\"]; });\n\n/* harmony import */ var _stylesmanager__WEBPACK_IMPORTED_MODULE_71__ = __nested_webpack_require_1203063__(/*! ../../stylesmanager */ \"./src/stylesmanager.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"StylesManager\", function() { return _stylesmanager__WEBPACK_IMPORTED_MODULE_71__[\"StylesManager\"]; });\n\n/* harmony import */ var _list__WEBPACK_IMPORTED_MODULE_72__ = __nested_webpack_require_1203063__(/*! ../../list */ \"./src/list.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"ListModel\", function() { return _list__WEBPACK_IMPORTED_MODULE_72__[\"ListModel\"]; });\n\n/* harmony import */ var _multiSelectListModel__WEBPACK_IMPORTED_MODULE_73__ = __nested_webpack_require_1203063__(/*! ../../multiSelectListModel */ \"./src/multiSelectListModel.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"MultiSelectListModel\", function() { return _multiSelectListModel__WEBPACK_IMPORTED_MODULE_73__[\"MultiSelectListModel\"]; });\n\n/* harmony import */ var _popup__WEBPACK_IMPORTED_MODULE_74__ = __nested_webpack_require_1203063__(/*! ../../popup */ \"./src/popup.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"PopupModel\", function() { return _popup__WEBPACK_IMPORTED_MODULE_74__[\"PopupModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"createDialogOptions\", function() { return _popup__WEBPACK_IMPORTED_MODULE_74__[\"createDialogOptions\"]; });\n\n/* harmony import */ var _popup_view_model__WEBPACK_IMPORTED_MODULE_75__ = __nested_webpack_require_1203063__(/*! ../../popup-view-model */ \"./src/popup-view-model.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"PopupBaseViewModel\", function() { return _popup_view_model__WEBPACK_IMPORTED_MODULE_75__[\"PopupBaseViewModel\"]; });\n\n/* harmony import */ var _popup_dropdown_view_model__WEBPACK_IMPORTED_MODULE_76__ = __nested_webpack_require_1203063__(/*! ../../popup-dropdown-view-model */ \"./src/popup-dropdown-view-model.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"PopupDropdownViewModel\", function() { return _popup_dropdown_view_model__WEBPACK_IMPORTED_MODULE_76__[\"PopupDropdownViewModel\"]; });\n\n/* harmony import */ var _popup_modal_view_model__WEBPACK_IMPORTED_MODULE_77__ = __nested_webpack_require_1203063__(/*! ../../popup-modal-view-model */ \"./src/popup-modal-view-model.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"PopupModalViewModel\", function() { return _popup_modal_view_model__WEBPACK_IMPORTED_MODULE_77__[\"PopupModalViewModel\"]; });\n\n/* harmony import */ var _popup_utils__WEBPACK_IMPORTED_MODULE_78__ = __nested_webpack_require_1203063__(/*! ../../popup-utils */ \"./src/popup-utils.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"createPopupViewModel\", function() { return _popup_utils__WEBPACK_IMPORTED_MODULE_78__[\"createPopupViewModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"createPopupModalViewModel\", function() { return _popup_utils__WEBPACK_IMPORTED_MODULE_78__[\"createPopupModalViewModel\"]; });\n\n/* harmony import */ var _dropdownListModel__WEBPACK_IMPORTED_MODULE_79__ = __nested_webpack_require_1203063__(/*! ../../dropdownListModel */ \"./src/dropdownListModel.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"DropdownListModel\", function() { return _dropdownListModel__WEBPACK_IMPORTED_MODULE_79__[\"DropdownListModel\"]; });\n\n/* harmony import */ var _dropdownMultiSelectListModel__WEBPACK_IMPORTED_MODULE_80__ = __nested_webpack_require_1203063__(/*! ../../dropdownMultiSelectListModel */ \"./src/dropdownMultiSelectListModel.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"DropdownMultiSelectListModel\", function() { return _dropdownMultiSelectListModel__WEBPACK_IMPORTED_MODULE_80__[\"DropdownMultiSelectListModel\"]; });\n\n/* harmony import */ var _question_buttongroup__WEBPACK_IMPORTED_MODULE_81__ = __nested_webpack_require_1203063__(/*! ../../question_buttongroup */ \"./src/question_buttongroup.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"QuestionButtonGroupModel\", function() { return _question_buttongroup__WEBPACK_IMPORTED_MODULE_81__[\"QuestionButtonGroupModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"ButtonGroupItemModel\", function() { return _question_buttongroup__WEBPACK_IMPORTED_MODULE_81__[\"ButtonGroupItemModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"ButtonGroupItemValue\", function() { return _question_buttongroup__WEBPACK_IMPORTED_MODULE_81__[\"ButtonGroupItemValue\"]; });\n\n/* harmony import */ var _utils_devices__WEBPACK_IMPORTED_MODULE_82__ = __nested_webpack_require_1203063__(/*! ../../utils/devices */ \"./src/utils/devices.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"IsMobile\", function() { return _utils_devices__WEBPACK_IMPORTED_MODULE_82__[\"IsMobile\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"IsTouch\", function() { return _utils_devices__WEBPACK_IMPORTED_MODULE_82__[\"IsTouch\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"_setIsTouch\", function() { return _utils_devices__WEBPACK_IMPORTED_MODULE_82__[\"_setIsTouch\"]; });\n\n/* harmony import */ var _utils_utils__WEBPACK_IMPORTED_MODULE_83__ = __nested_webpack_require_1203063__(/*! ../../utils/utils */ \"./src/utils/utils.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"confirmAction\", function() { return _utils_utils__WEBPACK_IMPORTED_MODULE_83__[\"confirmAction\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"confirmActionAsync\", function() { return _utils_utils__WEBPACK_IMPORTED_MODULE_83__[\"confirmActionAsync\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"detectIEOrEdge\", function() { return _utils_utils__WEBPACK_IMPORTED_MODULE_83__[\"detectIEOrEdge\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"doKey2ClickUp\", function() { return _utils_utils__WEBPACK_IMPORTED_MODULE_83__[\"doKey2ClickUp\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"doKey2ClickDown\", function() { return _utils_utils__WEBPACK_IMPORTED_MODULE_83__[\"doKey2ClickDown\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"doKey2ClickBlur\", function() { return _utils_utils__WEBPACK_IMPORTED_MODULE_83__[\"doKey2ClickBlur\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"loadFileFromBase64\", function() { return _utils_utils__WEBPACK_IMPORTED_MODULE_83__[\"loadFileFromBase64\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"increaseHeightByContent\", function() { return _utils_utils__WEBPACK_IMPORTED_MODULE_83__[\"increaseHeightByContent\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"createSvg\", function() { return _utils_utils__WEBPACK_IMPORTED_MODULE_83__[\"createSvg\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"sanitizeEditableContent\", function() { return _utils_utils__WEBPACK_IMPORTED_MODULE_83__[\"sanitizeEditableContent\"]; });\n\n/* harmony import */ var _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_84__ = __nested_webpack_require_1203063__(/*! ../../utils/cssClassBuilder */ \"./src/utils/cssClassBuilder.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"CssClassBuilder\", function() { return _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_84__[\"CssClassBuilder\"]; });\n\n/* harmony import */ var _defaultCss_defaultV2Css__WEBPACK_IMPORTED_MODULE_85__ = __nested_webpack_require_1203063__(/*! ../../defaultCss/defaultV2Css */ \"./src/defaultCss/defaultV2Css.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"surveyCss\", function() { return _defaultCss_defaultV2Css__WEBPACK_IMPORTED_MODULE_85__[\"surveyCss\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"defaultV2Css\", function() { return _defaultCss_defaultV2Css__WEBPACK_IMPORTED_MODULE_85__[\"defaultV2Css\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"defaultV2ThemeName\", function() { return _defaultCss_defaultV2Css__WEBPACK_IMPORTED_MODULE_85__[\"defaultV2ThemeName\"]; });\n\n/* harmony import */ var _dragdrop_core__WEBPACK_IMPORTED_MODULE_86__ = __nested_webpack_require_1203063__(/*! ../../dragdrop/core */ \"./src/dragdrop/core.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"DragDropCore\", function() { return _dragdrop_core__WEBPACK_IMPORTED_MODULE_86__[\"DragDropCore\"]; });\n\n/* harmony import */ var _dragdrop_choices__WEBPACK_IMPORTED_MODULE_87__ = __nested_webpack_require_1203063__(/*! ../../dragdrop/choices */ \"./src/dragdrop/choices.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"DragDropChoices\", function() { return _dragdrop_choices__WEBPACK_IMPORTED_MODULE_87__[\"DragDropChoices\"]; });\n\n/* harmony import */ var _dragdrop_ranking_select_to_rank__WEBPACK_IMPORTED_MODULE_88__ = __nested_webpack_require_1203063__(/*! ../../dragdrop/ranking-select-to-rank */ \"./src/dragdrop/ranking-select-to-rank.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1203063__.d(__nested_webpack_exports__, \"DragDropRankingSelectToRank\", function() { return _dragdrop_ranking_select_to_rank__WEBPACK_IMPORTED_MODULE_88__[\"DragDropRankingSelectToRank\"]; });\n\n// styles\n// import \"../../main.scss\";\n//import \"../../modern.scss\";\nvar Version;\nvar ReleaseDate;\nVersion = \"\" + \"1.9.110\";\nReleaseDate = \"\" + \"2023-09-26\";\nfunction checkLibraryVersion(ver, libraryName) {\n    if (Version != ver) {\n        var str = \"survey-core has version '\" + Version + \"' and \" + libraryName\n            + \" has version '\" + ver + \"'. SurveyJS libraries should have the same versions to work correctly.\";\n        /* eslint no-console: [\"error\", { allow: [\"error\"] }] */\n        console.error(str);\n    }\n}\nfunction setLicenseKey(key) {\n    slk(key, lic, ReleaseDate);\n}\nfunction hasLicense(index) {\n    return lic[index.toString()] === true;\n}\nvar lic = {};\nfunction slk(k, lh, rd) {\n    if (!k)\n        return;\n    var en = function (s) {\n        var e = {}, i, b = 0, c, x, l = 0, a, r = \"\", w = String.fromCharCode, L = s.length;\n        var A = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n        for (i = 0; i < 64; i++) {\n            e[A.charAt(i)] = i;\n        }\n        for (x = 0; x < L; x++) {\n            var c_1 = e[s.charAt(x)];\n            b = (b << 6) + c_1;\n            l += 6;\n            while (l >= 8) {\n                ((a = (b >>> (l -= 8)) & 0xff) || (x < (L - 2))) && (r += w(a));\n            }\n        }\n        return r;\n    };\n    var v = en(k);\n    if (!v)\n        return;\n    var index = v.indexOf(\";\");\n    if (index < 0)\n        return;\n    v = v.substring(index + 1);\n    v.split(\",\").forEach(function (s) {\n        var i = s.indexOf(\"=\");\n        if (i > 0) {\n            lh[s.substring(0, i)] = new Date(rd) <= new Date(s.substring(i + 1));\n        }\n    });\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n// export { cultureInfo } from \"../../cultureInfo\";\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n//Uncomment to include the \"date\" question type.\n//export {default as QuestionDateModel} from \"../../plugins/question_date\";\n\n\n\n\n\n/***/ }),\n\n/***/ \"./src/entries/core-wo-model.ts\":\n/*!**************************************!*\\\n  !*** ./src/entries/core-wo-model.ts ***!\n  \\**************************************/\n/*! exports provided: Version, ReleaseDate, checkLibraryVersion, setLicenseKey, hasLicense, settings, Helpers, AnswerCountValidator, EmailValidator, NumericValidator, RegexValidator, SurveyValidator, TextValidator, ValidatorResult, ExpressionValidator, ValidatorRunner, ItemValue, Base, Event, EventBase, ArrayChanges, ComputedUpdater, SurveyError, SurveyElementCore, SurveyElement, DragTypeOverMeEnum, CalculatedValue, CustomError, AnswerRequiredError, OneAnswerRequiredError, RequreNumericError, ExceedSizeError, LocalizableString, LocalizableStrings, HtmlConditionItem, UrlConditionItem, ChoicesRestful, ChoicesRestfull, FunctionFactory, registerFunction, ConditionRunner, ExpressionRunner, ExpressionExecutor, Operand, Const, BinaryOperand, Variable, FunctionOperand, ArrayOperand, UnaryOperand, ConditionsParser, ProcessValue, JsonError, JsonIncorrectTypeError, JsonMetadata, JsonMetadataClass, JsonMissingTypeError, JsonMissingTypeErrorBase, JsonObject, JsonObjectProperty, JsonRequiredPropertyError, JsonUnknownPropertyError, Serializer, property, propertyArray, MatrixDropdownCell, MatrixDropdownRowModelBase, QuestionMatrixDropdownModelBase, MatrixDropdownColumn, matrixDropdownColumnTypes, QuestionMatrixDropdownRenderedCell, QuestionMatrixDropdownRenderedRow, QuestionMatrixDropdownRenderedTable, MatrixDropdownRowModel, QuestionMatrixDropdownModel, MatrixDynamicRowModel, QuestionMatrixDynamicModel, MatrixRowModel, MatrixCells, QuestionMatrixModel, QuestionMatrixBaseModel, MultipleTextItemModel, MultipleTextCell, MultipleTextErrorCell, MutlipleTextErrorRow, MutlipleTextRow, QuestionMultipleTextModel, MultipleTextEditorModel, PanelModel, PanelModelBase, QuestionRowModel, FlowPanelModel, PageModel, DefaultTitleModel, Question, QuestionNonValue, QuestionEmptyModel, QuestionCheckboxBase, QuestionSelectBase, QuestionCheckboxModel, QuestionTagboxModel, QuestionRankingModel, QuestionCommentModel, QuestionDropdownModel, QuestionFactory, ElementFactory, QuestionFileModel, QuestionHtmlModel, QuestionRadiogroupModel, QuestionRatingModel, RenderedRatingItem, QuestionExpressionModel, QuestionTextBase, CharacterCounter, QuestionTextModel, QuestionBooleanModel, QuestionImagePickerModel, ImageItemValue, QuestionImageModel, QuestionSignaturePadModel, QuestionPanelDynamicModel, QuestionPanelDynamicItem, SurveyTimer, SurveyTimerModel, tryNavigateToPage, tryFocusPage, createTOCListModel, getTocRootCss, TOCModel, SurveyProgressModel, SurveyProgressButtonsModel, SurveyModel, SurveyTrigger, SurveyTriggerComplete, SurveyTriggerSetValue, SurveyTriggerVisible, SurveyTriggerCopyValue, SurveyTriggerRunExpression, SurveyTriggerSkip, Trigger, PopupSurveyModel, SurveyWindowModel, TextPreProcessor, Notifier, Cover, CoverCell, dxSurveyService, englishStrings, surveyLocalization, surveyStrings, QuestionCustomWidget, CustomWidgetCollection, QuestionCustomModel, QuestionCompositeModel, ComponentQuestionJSON, ComponentCollection, StylesManager, ListModel, MultiSelectListModel, PopupModel, createDialogOptions, PopupBaseViewModel, PopupDropdownViewModel, PopupModalViewModel, createPopupViewModel, createPopupModalViewModel, DropdownListModel, DropdownMultiSelectListModel, QuestionButtonGroupModel, ButtonGroupItemModel, ButtonGroupItemValue, IsMobile, IsTouch, _setIsTouch, confirmAction, confirmActionAsync, detectIEOrEdge, doKey2ClickUp, doKey2ClickDown, doKey2ClickBlur, loadFileFromBase64, increaseHeightByContent, createSvg, sanitizeEditableContent, CssClassBuilder, surveyCss, defaultV2Css, defaultV2ThemeName, DragDropCore, DragDropChoices, DragDropRankingSelectToRank, defaultStandardCss, modernCss, SvgIconRegistry, SvgRegistry, SvgBundleViewModel, RendererFactory, ResponsivityManager, VerticalResponsivityManager, unwrap, getOriginalEvent, getElement, createDropdownActionModel, createDropdownActionModelAdvanced, getActionDropdownButtonTarget, BaseAction, Action, ActionDropdownViewModel, AdaptiveActionContainer, defaultActionBarCss, ActionContainer, DragOrClickHelper */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1258300__) {\n\n\"use strict\";\n__nested_webpack_require_1258300__.r(__nested_webpack_exports__);\n/* harmony import */ var _chunks_model__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1258300__(/*! ./chunks/model */ \"./src/entries/chunks/model.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"Version\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"Version\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"ReleaseDate\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ReleaseDate\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"checkLibraryVersion\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"checkLibraryVersion\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"setLicenseKey\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"setLicenseKey\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"hasLicense\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"hasLicense\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"settings\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"settings\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"Helpers\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"AnswerCountValidator\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"AnswerCountValidator\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"EmailValidator\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"EmailValidator\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"NumericValidator\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"NumericValidator\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"RegexValidator\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"RegexValidator\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"SurveyValidator\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"SurveyValidator\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"TextValidator\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"TextValidator\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"ValidatorResult\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ValidatorResult\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"ExpressionValidator\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ExpressionValidator\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"ValidatorRunner\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ValidatorRunner\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"ItemValue\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ItemValue\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"Base\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"Base\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"Event\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"Event\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"EventBase\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"EventBase\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"ArrayChanges\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ArrayChanges\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"ComputedUpdater\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ComputedUpdater\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"SurveyError\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"SurveyError\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"SurveyElementCore\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"SurveyElementCore\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"SurveyElement\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"SurveyElement\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"DragTypeOverMeEnum\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"DragTypeOverMeEnum\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"CalculatedValue\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"CalculatedValue\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"CustomError\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"CustomError\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"AnswerRequiredError\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"AnswerRequiredError\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"OneAnswerRequiredError\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"OneAnswerRequiredError\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"RequreNumericError\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"RequreNumericError\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"ExceedSizeError\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ExceedSizeError\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"LocalizableString\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"LocalizableString\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"LocalizableStrings\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"LocalizableStrings\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"HtmlConditionItem\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"HtmlConditionItem\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"UrlConditionItem\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"UrlConditionItem\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"ChoicesRestful\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ChoicesRestful\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"ChoicesRestfull\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ChoicesRestfull\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"FunctionFactory\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"FunctionFactory\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"registerFunction\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"registerFunction\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"ConditionRunner\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ConditionRunner\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"ExpressionRunner\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ExpressionRunner\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"ExpressionExecutor\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ExpressionExecutor\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"Operand\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"Operand\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"Const\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"Const\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"BinaryOperand\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"BinaryOperand\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"Variable\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"Variable\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"FunctionOperand\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"FunctionOperand\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"ArrayOperand\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ArrayOperand\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"UnaryOperand\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"UnaryOperand\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"ConditionsParser\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ConditionsParser\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"ProcessValue\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ProcessValue\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"JsonError\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"JsonError\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"JsonIncorrectTypeError\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"JsonIncorrectTypeError\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"JsonMetadata\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"JsonMetadata\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"JsonMetadataClass\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"JsonMetadataClass\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"JsonMissingTypeError\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"JsonMissingTypeError\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"JsonMissingTypeErrorBase\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"JsonMissingTypeErrorBase\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"JsonObject\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"JsonObject\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"JsonObjectProperty\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"JsonObjectProperty\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"JsonRequiredPropertyError\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"JsonRequiredPropertyError\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"JsonUnknownPropertyError\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"JsonUnknownPropertyError\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"Serializer\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"property\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"property\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"propertyArray\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"propertyArray\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"MatrixDropdownCell\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"MatrixDropdownCell\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"MatrixDropdownRowModelBase\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"MatrixDropdownRowModelBase\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"QuestionMatrixDropdownModelBase\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixDropdownModelBase\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"MatrixDropdownColumn\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"MatrixDropdownColumn\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"matrixDropdownColumnTypes\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"matrixDropdownColumnTypes\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"QuestionMatrixDropdownRenderedCell\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixDropdownRenderedCell\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"QuestionMatrixDropdownRenderedRow\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixDropdownRenderedRow\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"QuestionMatrixDropdownRenderedTable\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixDropdownRenderedTable\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"MatrixDropdownRowModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"MatrixDropdownRowModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"QuestionMatrixDropdownModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixDropdownModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"MatrixDynamicRowModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"MatrixDynamicRowModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"QuestionMatrixDynamicModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixDynamicModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"MatrixRowModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"MatrixRowModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"MatrixCells\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"MatrixCells\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"QuestionMatrixModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"QuestionMatrixBaseModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixBaseModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"MultipleTextItemModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"MultipleTextItemModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"MultipleTextCell\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"MultipleTextCell\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"MultipleTextErrorCell\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"MultipleTextErrorCell\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"MutlipleTextErrorRow\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"MutlipleTextErrorRow\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"MutlipleTextRow\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"MutlipleTextRow\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"QuestionMultipleTextModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMultipleTextModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"MultipleTextEditorModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"MultipleTextEditorModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"PanelModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"PanelModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"PanelModelBase\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"PanelModelBase\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"QuestionRowModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionRowModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"FlowPanelModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"FlowPanelModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"PageModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"PageModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"DefaultTitleModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"DefaultTitleModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"Question\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"Question\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"QuestionNonValue\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionNonValue\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"QuestionEmptyModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionEmptyModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"QuestionCheckboxBase\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionCheckboxBase\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"QuestionSelectBase\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionSelectBase\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"QuestionCheckboxModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionCheckboxModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"QuestionTagboxModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionTagboxModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"QuestionRankingModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionRankingModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"QuestionCommentModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionCommentModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"QuestionDropdownModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionDropdownModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"QuestionFactory\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionFactory\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"ElementFactory\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ElementFactory\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"QuestionFileModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionFileModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"QuestionHtmlModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionHtmlModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"QuestionRadiogroupModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionRadiogroupModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"QuestionRatingModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionRatingModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"RenderedRatingItem\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"RenderedRatingItem\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"QuestionExpressionModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionExpressionModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"QuestionTextBase\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionTextBase\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"CharacterCounter\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"CharacterCounter\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"QuestionTextModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionTextModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"QuestionBooleanModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionBooleanModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"QuestionImagePickerModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionImagePickerModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"ImageItemValue\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ImageItemValue\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"QuestionImageModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionImageModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"QuestionSignaturePadModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionSignaturePadModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"QuestionPanelDynamicModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionPanelDynamicModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"QuestionPanelDynamicItem\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionPanelDynamicItem\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"SurveyTimer\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"SurveyTimer\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"SurveyTimerModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"SurveyTimerModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"tryNavigateToPage\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"tryNavigateToPage\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"tryFocusPage\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"tryFocusPage\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"createTOCListModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"createTOCListModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"getTocRootCss\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"getTocRootCss\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"TOCModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"TOCModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"SurveyProgressModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"SurveyProgressModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"SurveyProgressButtonsModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"SurveyProgressButtonsModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"SurveyModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"SurveyModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"SurveyTrigger\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"SurveyTrigger\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"SurveyTriggerComplete\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"SurveyTriggerComplete\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"SurveyTriggerSetValue\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"SurveyTriggerSetValue\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"SurveyTriggerVisible\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"SurveyTriggerVisible\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"SurveyTriggerCopyValue\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"SurveyTriggerCopyValue\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"SurveyTriggerRunExpression\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"SurveyTriggerRunExpression\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"SurveyTriggerSkip\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"SurveyTriggerSkip\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"Trigger\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"Trigger\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"PopupSurveyModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"PopupSurveyModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"SurveyWindowModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"SurveyWindowModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"TextPreProcessor\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"TextPreProcessor\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"Notifier\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"Notifier\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"Cover\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"Cover\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"CoverCell\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"CoverCell\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"dxSurveyService\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"dxSurveyService\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"englishStrings\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"englishStrings\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"surveyLocalization\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"surveyStrings\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"surveyStrings\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"QuestionCustomWidget\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionCustomWidget\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"CustomWidgetCollection\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"CustomWidgetCollection\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"QuestionCustomModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionCustomModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"QuestionCompositeModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionCompositeModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"ComponentQuestionJSON\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ComponentQuestionJSON\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"ComponentCollection\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ComponentCollection\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"StylesManager\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"StylesManager\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"ListModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ListModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"MultiSelectListModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"MultiSelectListModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"PopupModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"PopupModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"createDialogOptions\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"createDialogOptions\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"PopupBaseViewModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"PopupBaseViewModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"PopupDropdownViewModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"PopupDropdownViewModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"PopupModalViewModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"PopupModalViewModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"createPopupViewModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"createPopupViewModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"createPopupModalViewModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"createPopupModalViewModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"DropdownListModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"DropdownListModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"DropdownMultiSelectListModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"DropdownMultiSelectListModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"QuestionButtonGroupModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionButtonGroupModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"ButtonGroupItemModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ButtonGroupItemModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"ButtonGroupItemValue\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ButtonGroupItemValue\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"IsMobile\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"IsMobile\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"IsTouch\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"IsTouch\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"_setIsTouch\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"_setIsTouch\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"confirmAction\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"confirmAction\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"confirmActionAsync\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"confirmActionAsync\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"detectIEOrEdge\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"detectIEOrEdge\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"doKey2ClickUp\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"doKey2ClickUp\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"doKey2ClickDown\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"doKey2ClickDown\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"doKey2ClickBlur\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"doKey2ClickBlur\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"loadFileFromBase64\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"loadFileFromBase64\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"increaseHeightByContent\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"increaseHeightByContent\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"createSvg\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"createSvg\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"sanitizeEditableContent\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"sanitizeEditableContent\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"CssClassBuilder\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"CssClassBuilder\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"surveyCss\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"surveyCss\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"defaultV2Css\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"defaultV2Css\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"defaultV2ThemeName\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"defaultV2ThemeName\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"DragDropCore\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"DragDropCore\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"DragDropChoices\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"DragDropChoices\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"DragDropRankingSelectToRank\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"DragDropRankingSelectToRank\"]; });\n\n/* harmony import */ var _defaultCss_cssstandard__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1258300__(/*! ../defaultCss/cssstandard */ \"./src/defaultCss/cssstandard.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"defaultStandardCss\", function() { return _defaultCss_cssstandard__WEBPACK_IMPORTED_MODULE_1__[\"defaultStandardCss\"]; });\n\n/* harmony import */ var _defaultCss_cssmodern__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1258300__(/*! ../defaultCss/cssmodern */ \"./src/defaultCss/cssmodern.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"modernCss\", function() { return _defaultCss_cssmodern__WEBPACK_IMPORTED_MODULE_2__[\"modernCss\"]; });\n\n/* harmony import */ var _svgbundle__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1258300__(/*! ../svgbundle */ \"./src/svgbundle.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"SvgIconRegistry\", function() { return _svgbundle__WEBPACK_IMPORTED_MODULE_3__[\"SvgIconRegistry\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"SvgRegistry\", function() { return _svgbundle__WEBPACK_IMPORTED_MODULE_3__[\"SvgRegistry\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"SvgBundleViewModel\", function() { return _svgbundle__WEBPACK_IMPORTED_MODULE_3__[\"SvgBundleViewModel\"]; });\n\n/* harmony import */ var _rendererFactory__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1258300__(/*! ../rendererFactory */ \"./src/rendererFactory.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"RendererFactory\", function() { return _rendererFactory__WEBPACK_IMPORTED_MODULE_4__[\"RendererFactory\"]; });\n\n/* harmony import */ var _utils_responsivity_manager__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1258300__(/*! ../utils/responsivity-manager */ \"./src/utils/responsivity-manager.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"ResponsivityManager\", function() { return _utils_responsivity_manager__WEBPACK_IMPORTED_MODULE_5__[\"ResponsivityManager\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"VerticalResponsivityManager\", function() { return _utils_responsivity_manager__WEBPACK_IMPORTED_MODULE_5__[\"VerticalResponsivityManager\"]; });\n\n/* harmony import */ var _utils_utils__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_1258300__(/*! ../utils/utils */ \"./src/utils/utils.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"unwrap\", function() { return _utils_utils__WEBPACK_IMPORTED_MODULE_6__[\"unwrap\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"getOriginalEvent\", function() { return _utils_utils__WEBPACK_IMPORTED_MODULE_6__[\"getOriginalEvent\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"getElement\", function() { return _utils_utils__WEBPACK_IMPORTED_MODULE_6__[\"getElement\"]; });\n\n/* harmony import */ var _actions_action__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_1258300__(/*! ../actions/action */ \"./src/actions/action.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"createDropdownActionModel\", function() { return _actions_action__WEBPACK_IMPORTED_MODULE_7__[\"createDropdownActionModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"createDropdownActionModelAdvanced\", function() { return _actions_action__WEBPACK_IMPORTED_MODULE_7__[\"createDropdownActionModelAdvanced\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"getActionDropdownButtonTarget\", function() { return _actions_action__WEBPACK_IMPORTED_MODULE_7__[\"getActionDropdownButtonTarget\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"BaseAction\", function() { return _actions_action__WEBPACK_IMPORTED_MODULE_7__[\"BaseAction\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"Action\", function() { return _actions_action__WEBPACK_IMPORTED_MODULE_7__[\"Action\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"ActionDropdownViewModel\", function() { return _actions_action__WEBPACK_IMPORTED_MODULE_7__[\"ActionDropdownViewModel\"]; });\n\n/* harmony import */ var _actions_adaptive_container__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_1258300__(/*! ../actions/adaptive-container */ \"./src/actions/adaptive-container.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"AdaptiveActionContainer\", function() { return _actions_adaptive_container__WEBPACK_IMPORTED_MODULE_8__[\"AdaptiveActionContainer\"]; });\n\n/* harmony import */ var _actions_container__WEBPACK_IMPORTED_MODULE_9__ = __nested_webpack_require_1258300__(/*! ../actions/container */ \"./src/actions/container.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"defaultActionBarCss\", function() { return _actions_container__WEBPACK_IMPORTED_MODULE_9__[\"defaultActionBarCss\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"ActionContainer\", function() { return _actions_container__WEBPACK_IMPORTED_MODULE_9__[\"ActionContainer\"]; });\n\n/* harmony import */ var _utils_dragOrClickHelper__WEBPACK_IMPORTED_MODULE_10__ = __nested_webpack_require_1258300__(/*! ../utils/dragOrClickHelper */ \"./src/utils/dragOrClickHelper.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1258300__.d(__nested_webpack_exports__, \"DragOrClickHelper\", function() { return _utils_dragOrClickHelper__WEBPACK_IMPORTED_MODULE_10__[\"DragOrClickHelper\"]; });\n\n// model\n\n// css standard classes\n\n// css modern classes\n\n\n// utils\n\n\n\n\n\n\n\n\n\n/***/ }),\n\n/***/ \"./src/entries/core.ts\":\n/*!*****************************!*\\\n  !*** ./src/entries/core.ts ***!\n  \\*****************************/\n/*! exports provided: Version, ReleaseDate, checkLibraryVersion, setLicenseKey, hasLicense, settings, Helpers, AnswerCountValidator, EmailValidator, NumericValidator, RegexValidator, SurveyValidator, TextValidator, ValidatorResult, ExpressionValidator, ValidatorRunner, ItemValue, Base, Event, EventBase, ArrayChanges, ComputedUpdater, SurveyError, SurveyElementCore, SurveyElement, DragTypeOverMeEnum, CalculatedValue, CustomError, AnswerRequiredError, OneAnswerRequiredError, RequreNumericError, ExceedSizeError, LocalizableString, LocalizableStrings, HtmlConditionItem, UrlConditionItem, ChoicesRestful, ChoicesRestfull, FunctionFactory, registerFunction, ConditionRunner, ExpressionRunner, ExpressionExecutor, Operand, Const, BinaryOperand, Variable, FunctionOperand, ArrayOperand, UnaryOperand, ConditionsParser, ProcessValue, JsonError, JsonIncorrectTypeError, JsonMetadata, JsonMetadataClass, JsonMissingTypeError, JsonMissingTypeErrorBase, JsonObject, JsonObjectProperty, JsonRequiredPropertyError, JsonUnknownPropertyError, Serializer, property, propertyArray, MatrixDropdownCell, MatrixDropdownRowModelBase, QuestionMatrixDropdownModelBase, MatrixDropdownColumn, matrixDropdownColumnTypes, QuestionMatrixDropdownRenderedCell, QuestionMatrixDropdownRenderedRow, QuestionMatrixDropdownRenderedTable, MatrixDropdownRowModel, QuestionMatrixDropdownModel, MatrixDynamicRowModel, QuestionMatrixDynamicModel, MatrixRowModel, MatrixCells, QuestionMatrixModel, QuestionMatrixBaseModel, MultipleTextItemModel, MultipleTextCell, MultipleTextErrorCell, MutlipleTextErrorRow, MutlipleTextRow, QuestionMultipleTextModel, MultipleTextEditorModel, PanelModel, PanelModelBase, QuestionRowModel, FlowPanelModel, PageModel, DefaultTitleModel, Question, QuestionNonValue, QuestionEmptyModel, QuestionCheckboxBase, QuestionSelectBase, QuestionCheckboxModel, QuestionTagboxModel, QuestionRankingModel, QuestionCommentModel, QuestionDropdownModel, QuestionFactory, ElementFactory, QuestionFileModel, QuestionHtmlModel, QuestionRadiogroupModel, QuestionRatingModel, RenderedRatingItem, QuestionExpressionModel, QuestionTextBase, CharacterCounter, QuestionTextModel, QuestionBooleanModel, QuestionImagePickerModel, ImageItemValue, QuestionImageModel, QuestionSignaturePadModel, QuestionPanelDynamicModel, QuestionPanelDynamicItem, SurveyTimer, SurveyTimerModel, tryNavigateToPage, tryFocusPage, createTOCListModel, getTocRootCss, TOCModel, SurveyProgressModel, SurveyProgressButtonsModel, SurveyModel, SurveyTrigger, SurveyTriggerComplete, SurveyTriggerSetValue, SurveyTriggerVisible, SurveyTriggerCopyValue, SurveyTriggerRunExpression, SurveyTriggerSkip, Trigger, PopupSurveyModel, SurveyWindowModel, TextPreProcessor, Notifier, Cover, CoverCell, dxSurveyService, englishStrings, surveyLocalization, surveyStrings, QuestionCustomWidget, CustomWidgetCollection, QuestionCustomModel, QuestionCompositeModel, ComponentQuestionJSON, ComponentCollection, StylesManager, ListModel, MultiSelectListModel, PopupModel, createDialogOptions, PopupBaseViewModel, PopupDropdownViewModel, PopupModalViewModel, createPopupViewModel, createPopupModalViewModel, DropdownListModel, DropdownMultiSelectListModel, QuestionButtonGroupModel, ButtonGroupItemModel, ButtonGroupItemValue, IsMobile, IsTouch, _setIsTouch, confirmAction, confirmActionAsync, detectIEOrEdge, doKey2ClickUp, doKey2ClickDown, doKey2ClickBlur, loadFileFromBase64, increaseHeightByContent, createSvg, sanitizeEditableContent, CssClassBuilder, surveyCss, defaultV2Css, defaultV2ThemeName, DragDropCore, DragDropChoices, DragDropRankingSelectToRank, defaultStandardCss, modernCss, SvgIconRegistry, SvgRegistry, SvgBundleViewModel, RendererFactory, ResponsivityManager, VerticalResponsivityManager, unwrap, getOriginalEvent, getElement, createDropdownActionModel, createDropdownActionModelAdvanced, getActionDropdownButtonTarget, BaseAction, Action, ActionDropdownViewModel, AdaptiveActionContainer, defaultActionBarCss, ActionContainer, DragOrClickHelper, Model */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1303351__) {\n\n\"use strict\";\n__nested_webpack_require_1303351__.r(__nested_webpack_exports__);\n/* harmony import */ var _core_wo_model__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1303351__(/*! ./core-wo-model */ \"./src/entries/core-wo-model.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"Version\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"Version\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"ReleaseDate\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"ReleaseDate\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"checkLibraryVersion\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"checkLibraryVersion\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"setLicenseKey\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"setLicenseKey\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"hasLicense\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"hasLicense\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"settings\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"settings\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"Helpers\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"AnswerCountValidator\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"AnswerCountValidator\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"EmailValidator\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"EmailValidator\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"NumericValidator\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"NumericValidator\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"RegexValidator\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"RegexValidator\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"SurveyValidator\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"SurveyValidator\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"TextValidator\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"TextValidator\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"ValidatorResult\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"ValidatorResult\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"ExpressionValidator\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"ExpressionValidator\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"ValidatorRunner\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"ValidatorRunner\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"ItemValue\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"ItemValue\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"Base\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"Base\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"Event\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"Event\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"EventBase\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"EventBase\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"ArrayChanges\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"ArrayChanges\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"ComputedUpdater\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"ComputedUpdater\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"SurveyError\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"SurveyError\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"SurveyElementCore\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"SurveyElementCore\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"SurveyElement\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"SurveyElement\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"DragTypeOverMeEnum\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"DragTypeOverMeEnum\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"CalculatedValue\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"CalculatedValue\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"CustomError\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"CustomError\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"AnswerRequiredError\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"AnswerRequiredError\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"OneAnswerRequiredError\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"OneAnswerRequiredError\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"RequreNumericError\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"RequreNumericError\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"ExceedSizeError\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"ExceedSizeError\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"LocalizableString\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"LocalizableString\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"LocalizableStrings\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"LocalizableStrings\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"HtmlConditionItem\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"HtmlConditionItem\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"UrlConditionItem\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"UrlConditionItem\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"ChoicesRestful\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"ChoicesRestful\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"ChoicesRestfull\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"ChoicesRestfull\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"FunctionFactory\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"FunctionFactory\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"registerFunction\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"registerFunction\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"ConditionRunner\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"ConditionRunner\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"ExpressionRunner\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"ExpressionRunner\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"ExpressionExecutor\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"ExpressionExecutor\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"Operand\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"Operand\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"Const\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"Const\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"BinaryOperand\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"BinaryOperand\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"Variable\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"Variable\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"FunctionOperand\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"FunctionOperand\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"ArrayOperand\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"ArrayOperand\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"UnaryOperand\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"UnaryOperand\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"ConditionsParser\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"ConditionsParser\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"ProcessValue\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"ProcessValue\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"JsonError\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"JsonError\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"JsonIncorrectTypeError\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"JsonIncorrectTypeError\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"JsonMetadata\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"JsonMetadata\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"JsonMetadataClass\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"JsonMetadataClass\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"JsonMissingTypeError\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"JsonMissingTypeError\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"JsonMissingTypeErrorBase\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"JsonMissingTypeErrorBase\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"JsonObject\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"JsonObject\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"JsonObjectProperty\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"JsonObjectProperty\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"JsonRequiredPropertyError\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"JsonRequiredPropertyError\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"JsonUnknownPropertyError\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"JsonUnknownPropertyError\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"Serializer\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"property\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"property\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"propertyArray\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"propertyArray\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"MatrixDropdownCell\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"MatrixDropdownCell\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"MatrixDropdownRowModelBase\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"MatrixDropdownRowModelBase\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"QuestionMatrixDropdownModelBase\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixDropdownModelBase\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"MatrixDropdownColumn\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"MatrixDropdownColumn\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"matrixDropdownColumnTypes\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"matrixDropdownColumnTypes\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"QuestionMatrixDropdownRenderedCell\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixDropdownRenderedCell\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"QuestionMatrixDropdownRenderedRow\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixDropdownRenderedRow\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"QuestionMatrixDropdownRenderedTable\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixDropdownRenderedTable\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"MatrixDropdownRowModel\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"MatrixDropdownRowModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"QuestionMatrixDropdownModel\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixDropdownModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"MatrixDynamicRowModel\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"MatrixDynamicRowModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"QuestionMatrixDynamicModel\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixDynamicModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"MatrixRowModel\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"MatrixRowModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"MatrixCells\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"MatrixCells\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"QuestionMatrixModel\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"QuestionMatrixBaseModel\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixBaseModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"MultipleTextItemModel\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"MultipleTextItemModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"MultipleTextCell\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"MultipleTextCell\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"MultipleTextErrorCell\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"MultipleTextErrorCell\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"MutlipleTextErrorRow\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"MutlipleTextErrorRow\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"MutlipleTextRow\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"MutlipleTextRow\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"QuestionMultipleTextModel\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMultipleTextModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"MultipleTextEditorModel\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"MultipleTextEditorModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"PanelModel\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"PanelModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"PanelModelBase\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"PanelModelBase\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"QuestionRowModel\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionRowModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"FlowPanelModel\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"FlowPanelModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"PageModel\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"PageModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"DefaultTitleModel\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"DefaultTitleModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"Question\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"Question\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"QuestionNonValue\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionNonValue\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"QuestionEmptyModel\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionEmptyModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"QuestionCheckboxBase\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionCheckboxBase\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"QuestionSelectBase\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionSelectBase\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"QuestionCheckboxModel\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionCheckboxModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"QuestionTagboxModel\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionTagboxModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"QuestionRankingModel\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionRankingModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"QuestionCommentModel\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionCommentModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"QuestionDropdownModel\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionDropdownModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"QuestionFactory\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionFactory\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"ElementFactory\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"ElementFactory\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"QuestionFileModel\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionFileModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"QuestionHtmlModel\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionHtmlModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"QuestionRadiogroupModel\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionRadiogroupModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"QuestionRatingModel\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionRatingModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"RenderedRatingItem\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"RenderedRatingItem\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"QuestionExpressionModel\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionExpressionModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"QuestionTextBase\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionTextBase\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"CharacterCounter\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"CharacterCounter\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"QuestionTextModel\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionTextModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"QuestionBooleanModel\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionBooleanModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"QuestionImagePickerModel\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionImagePickerModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"ImageItemValue\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"ImageItemValue\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"QuestionImageModel\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionImageModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"QuestionSignaturePadModel\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionSignaturePadModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"QuestionPanelDynamicModel\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionPanelDynamicModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"QuestionPanelDynamicItem\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionPanelDynamicItem\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"SurveyTimer\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"SurveyTimer\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"SurveyTimerModel\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"SurveyTimerModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"tryNavigateToPage\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"tryNavigateToPage\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"tryFocusPage\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"tryFocusPage\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"createTOCListModel\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"createTOCListModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"getTocRootCss\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"getTocRootCss\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"TOCModel\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"TOCModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"SurveyProgressModel\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"SurveyProgressModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"SurveyProgressButtonsModel\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"SurveyProgressButtonsModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"SurveyModel\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"SurveyModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"SurveyTrigger\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"SurveyTrigger\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"SurveyTriggerComplete\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"SurveyTriggerComplete\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"SurveyTriggerSetValue\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"SurveyTriggerSetValue\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"SurveyTriggerVisible\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"SurveyTriggerVisible\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"SurveyTriggerCopyValue\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"SurveyTriggerCopyValue\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"SurveyTriggerRunExpression\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"SurveyTriggerRunExpression\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"SurveyTriggerSkip\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"SurveyTriggerSkip\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"Trigger\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"Trigger\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"PopupSurveyModel\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"PopupSurveyModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"SurveyWindowModel\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"SurveyWindowModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"TextPreProcessor\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"TextPreProcessor\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"Notifier\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"Notifier\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"Cover\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"Cover\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"CoverCell\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"CoverCell\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"dxSurveyService\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"dxSurveyService\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"englishStrings\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"englishStrings\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"surveyLocalization\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"surveyStrings\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"surveyStrings\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"QuestionCustomWidget\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionCustomWidget\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"CustomWidgetCollection\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"CustomWidgetCollection\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"QuestionCustomModel\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionCustomModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"QuestionCompositeModel\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionCompositeModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"ComponentQuestionJSON\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"ComponentQuestionJSON\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"ComponentCollection\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"ComponentCollection\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"StylesManager\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"StylesManager\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"ListModel\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"ListModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"MultiSelectListModel\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"MultiSelectListModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"PopupModel\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"PopupModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"createDialogOptions\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"createDialogOptions\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"PopupBaseViewModel\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"PopupBaseViewModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"PopupDropdownViewModel\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"PopupDropdownViewModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"PopupModalViewModel\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"PopupModalViewModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"createPopupViewModel\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"createPopupViewModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"createPopupModalViewModel\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"createPopupModalViewModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"DropdownListModel\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"DropdownListModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"DropdownMultiSelectListModel\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"DropdownMultiSelectListModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"QuestionButtonGroupModel\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionButtonGroupModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"ButtonGroupItemModel\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"ButtonGroupItemModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"ButtonGroupItemValue\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"ButtonGroupItemValue\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"IsMobile\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"IsMobile\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"IsTouch\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"IsTouch\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"_setIsTouch\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"_setIsTouch\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"confirmAction\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"confirmAction\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"confirmActionAsync\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"confirmActionAsync\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"detectIEOrEdge\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"detectIEOrEdge\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"doKey2ClickUp\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"doKey2ClickUp\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"doKey2ClickDown\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"doKey2ClickDown\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"doKey2ClickBlur\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"doKey2ClickBlur\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"loadFileFromBase64\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"loadFileFromBase64\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"increaseHeightByContent\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"increaseHeightByContent\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"createSvg\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"createSvg\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"sanitizeEditableContent\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"sanitizeEditableContent\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"CssClassBuilder\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"CssClassBuilder\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"surveyCss\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"surveyCss\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"defaultV2Css\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"defaultV2Css\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"defaultV2ThemeName\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"defaultV2ThemeName\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"DragDropCore\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"DragDropCore\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"DragDropChoices\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"DragDropChoices\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"DragDropRankingSelectToRank\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"DragDropRankingSelectToRank\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"defaultStandardCss\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"defaultStandardCss\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"modernCss\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"modernCss\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"SvgIconRegistry\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"SvgIconRegistry\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"SvgRegistry\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"SvgRegistry\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"SvgBundleViewModel\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"SvgBundleViewModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"RendererFactory\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"RendererFactory\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"ResponsivityManager\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"ResponsivityManager\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"VerticalResponsivityManager\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"VerticalResponsivityManager\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"unwrap\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"unwrap\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"getOriginalEvent\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"getOriginalEvent\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"getElement\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"getElement\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"createDropdownActionModel\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"createDropdownActionModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"createDropdownActionModelAdvanced\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"createDropdownActionModelAdvanced\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"getActionDropdownButtonTarget\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"getActionDropdownButtonTarget\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"BaseAction\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"BaseAction\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"Action\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"Action\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"ActionDropdownViewModel\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"ActionDropdownViewModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"AdaptiveActionContainer\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"AdaptiveActionContainer\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"defaultActionBarCss\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"defaultActionBarCss\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"ActionContainer\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"ActionContainer\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"DragOrClickHelper\", function() { return _core_wo_model__WEBPACK_IMPORTED_MODULE_0__[\"DragOrClickHelper\"]; });\n\n/* harmony import */ var _survey__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1303351__(/*! ../survey */ \"./src/survey.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1303351__.d(__nested_webpack_exports__, \"Model\", function() { return _survey__WEBPACK_IMPORTED_MODULE_1__[\"SurveyModel\"]; });\n\n// model\n\n\n\n\n/***/ }),\n\n/***/ \"./src/entries/plugins.ts\":\n/*!********************************!*\\\n  !*** ./src/entries/plugins.ts ***!\n  \\********************************/\n/*! exports provided: bootstrapThemeName, bootstrapThemeColors, bootstrapThemeCssRules, bootstrapMaterialThemeName, bootstrapMaterialThemeColors, bootstrapMaterialThemeCssRules, defaultBootstrapCss, defaultBootstrapMaterialCss */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1343411__) {\n\n\"use strict\";\n__nested_webpack_require_1343411__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_1343411__.d(__nested_webpack_exports__, \"defaultBootstrapCss\", function() { return defaultBootstrapCss; });\n/* harmony export (binding) */ __nested_webpack_require_1343411__.d(__nested_webpack_exports__, \"defaultBootstrapMaterialCss\", function() { return defaultBootstrapMaterialCss; });\n/* harmony import */ var _plugins_themes_bootstrap_cssbootstrap__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1343411__(/*! ../plugins/themes/bootstrap/cssbootstrap */ \"./src/plugins/themes/bootstrap/cssbootstrap.ts\");\n/* harmony import */ var _plugins_themes_bootstrapmaterial_cssbootstrapmaterial__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1343411__(/*! ../plugins/themes/bootstrapmaterial/cssbootstrapmaterial */ \"./src/plugins/themes/bootstrapmaterial/cssbootstrapmaterial.ts\");\n/* harmony import */ var _plugins_themes_bootstrap_theme_settings__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1343411__(/*! ../plugins/themes/bootstrap/theme-settings */ \"./src/plugins/themes/bootstrap/theme-settings.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1343411__.d(__nested_webpack_exports__, \"bootstrapThemeName\", function() { return _plugins_themes_bootstrap_theme_settings__WEBPACK_IMPORTED_MODULE_2__[\"bootstrapThemeName\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1343411__.d(__nested_webpack_exports__, \"bootstrapThemeColors\", function() { return _plugins_themes_bootstrap_theme_settings__WEBPACK_IMPORTED_MODULE_2__[\"bootstrapThemeColors\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1343411__.d(__nested_webpack_exports__, \"bootstrapThemeCssRules\", function() { return _plugins_themes_bootstrap_theme_settings__WEBPACK_IMPORTED_MODULE_2__[\"bootstrapThemeCssRules\"]; });\n\n/* harmony import */ var _plugins_themes_bootstrapmaterial_theme_settings__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1343411__(/*! ../plugins/themes/bootstrapmaterial/theme-settings */ \"./src/plugins/themes/bootstrapmaterial/theme-settings.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1343411__.d(__nested_webpack_exports__, \"bootstrapMaterialThemeName\", function() { return _plugins_themes_bootstrapmaterial_theme_settings__WEBPACK_IMPORTED_MODULE_3__[\"bootstrapMaterialThemeName\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1343411__.d(__nested_webpack_exports__, \"bootstrapMaterialThemeColors\", function() { return _plugins_themes_bootstrapmaterial_theme_settings__WEBPACK_IMPORTED_MODULE_3__[\"bootstrapMaterialThemeColors\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1343411__.d(__nested_webpack_exports__, \"bootstrapMaterialThemeCssRules\", function() { return _plugins_themes_bootstrapmaterial_theme_settings__WEBPACK_IMPORTED_MODULE_3__[\"bootstrapMaterialThemeCssRules\"]; });\n\n\n\n\n\nvar defaultBootstrapCss = _plugins_themes_bootstrap_cssbootstrap__WEBPACK_IMPORTED_MODULE_0__[\"defaultCss\"];\nvar defaultBootstrapMaterialCss = _plugins_themes_bootstrapmaterial_cssbootstrapmaterial__WEBPACK_IMPORTED_MODULE_1__[\"defaultCss\"];\n\n\n/***/ }),\n\n/***/ \"./src/entries/vue-ui-model.ts\":\n/*!*************************************!*\\\n  !*** ./src/entries/vue-ui-model.ts ***!\n  \\*************************************/\n/*! exports provided: Survey, CustomWidget, SurveyString, SurveyStringViewer, SurveyStringEditor, SurveyElementVue, SurveyRowElement, PopupSurvey, SurveyWindow, Page, Radiogroup, RadiogroupItem, OtherChoice, OtherComment, Rating, RatingDropdown, Comment, Ranking, RankingItem, Checkbox, CheckboxItem, ButtonGroup, ButtonGroupItem, QuestionText, QuestionTextInput, Boolean, BooleanSwitch, BooleanCheckbox, BooleanRadio, BooleanRadioItem, Empty, MultipleText, MultipleTextItem, Matrix, Dropdown, DropdownSelect, Tagbox, File, FilePreview, FileCleanButton, FileVideo, FileChooseButton, MatrixCell, MatrixHeaderRequired, MatrixTable, MatrixDropdown, MatrixDynamic, Errors, Html, Expression, ImagePicker, ImagePickerItem, PanelDynamic, PanelDynamicProgress, PanelDynamicProgressV2, Progress, ProgressButtons, ProgressToc, TimerPanel, Panel, FlowPanel, FlowPanelElement, Row, ElementHeader, QuestionImage, SignaturePad, SurveyHeader, Custom, Composite, TitleElement, TitleContent, TitleActions, ActionBarViewModel, SvgIcon, PopupPointer, PopupContainer, Popup, List, DropdownOptionItem, DropdownComponent, TagboxFilterComponent, TagboxComponent, TagboxItem, RatingItem, RatingItemStar, RatingItemSmiley, SurveyQuestionMatrixDynamicRemoveButton, SurveyQuestionMatrixDetailButton, SurveyQuestionMatrixDynamicDragDropIcon, PanelDynamicAddBtn, PanelDynamicNextBtn, PanelDynamicPrevBtn, PanelDynamicProgressText, PanelDynamicRemoveButton, SurveyNavigationButton, Skeleton, BrandInfo, NotifierComponent, ComponentsContainer, CharacterCounterComponent, LoadingIndicatorComponent, CoverCellViewModel, CoverViewModel */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1348183__) {\n\n\"use strict\";\n__nested_webpack_require_1348183__.r(__nested_webpack_exports__);\n/* harmony import */ var _vue_survey_vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1348183__(/*! ../vue/survey.vue */ \"./src/vue/survey.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"Survey\", function() { return _vue_survey_vue__WEBPACK_IMPORTED_MODULE_0__[\"Survey\"]; });\n\n/* harmony import */ var _vue_customwidget_vue__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1348183__(/*! ../vue/customwidget.vue */ \"./src/vue/customwidget.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"CustomWidget\", function() { return _vue_customwidget_vue__WEBPACK_IMPORTED_MODULE_1__[\"CustomWidget\"]; });\n\n/* harmony import */ var _vue_string_vue__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1348183__(/*! ../vue/string.vue */ \"./src/vue/string.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"SurveyString\", function() { return _vue_string_vue__WEBPACK_IMPORTED_MODULE_2__[\"SurveyString\"]; });\n\n/* harmony import */ var _vue_string_viewer_vue__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1348183__(/*! ../vue/string-viewer.vue */ \"./src/vue/string-viewer.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"SurveyStringViewer\", function() { return _vue_string_viewer_vue__WEBPACK_IMPORTED_MODULE_3__[\"SurveyStringViewer\"]; });\n\n/* harmony import */ var _vue_string_editor_vue__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1348183__(/*! ../vue/string-editor.vue */ \"./src/vue/string-editor.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"SurveyStringEditor\", function() { return _vue_string_editor_vue__WEBPACK_IMPORTED_MODULE_4__[\"SurveyStringEditor\"]; });\n\n/* harmony import */ var _vue_element_vue__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1348183__(/*! ../vue/element.vue */ \"./src/vue/element.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"SurveyElementVue\", function() { return _vue_element_vue__WEBPACK_IMPORTED_MODULE_5__[\"SurveyElementVue\"]; });\n\n/* harmony import */ var _vue_row_element_vue__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_1348183__(/*! ../vue/row-element.vue */ \"./src/vue/row-element.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"SurveyRowElement\", function() { return _vue_row_element_vue__WEBPACK_IMPORTED_MODULE_6__[\"SurveyRowElement\"]; });\n\n/* harmony import */ var _vue_popup_survey_vue__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_1348183__(/*! ../vue/popup-survey.vue */ \"./src/vue/popup-survey.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"PopupSurvey\", function() { return _vue_popup_survey_vue__WEBPACK_IMPORTED_MODULE_7__[\"PopupSurvey\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"SurveyWindow\", function() { return _vue_popup_survey_vue__WEBPACK_IMPORTED_MODULE_7__[\"SurveyWindow\"]; });\n\n/* harmony import */ var _vue_page_vue__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_1348183__(/*! ../vue/page.vue */ \"./src/vue/page.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"Page\", function() { return _vue_page_vue__WEBPACK_IMPORTED_MODULE_8__[\"Page\"]; });\n\n/* harmony import */ var _vue_radiogroup_vue__WEBPACK_IMPORTED_MODULE_9__ = __nested_webpack_require_1348183__(/*! ../vue/radiogroup.vue */ \"./src/vue/radiogroup.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"Radiogroup\", function() { return _vue_radiogroup_vue__WEBPACK_IMPORTED_MODULE_9__[\"Radiogroup\"]; });\n\n/* harmony import */ var _vue_radiogroupitem_vue__WEBPACK_IMPORTED_MODULE_10__ = __nested_webpack_require_1348183__(/*! ../vue/radiogroupitem.vue */ \"./src/vue/radiogroupitem.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"RadiogroupItem\", function() { return _vue_radiogroupitem_vue__WEBPACK_IMPORTED_MODULE_10__[\"RadiogroupItem\"]; });\n\n/* harmony import */ var _vue_question_other_vue__WEBPACK_IMPORTED_MODULE_11__ = __nested_webpack_require_1348183__(/*! ../vue/question-other.vue */ \"./src/vue/question-other.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"OtherChoice\", function() { return _vue_question_other_vue__WEBPACK_IMPORTED_MODULE_11__[\"OtherChoice\"]; });\n\n/* harmony import */ var _vue_question_comment_vue__WEBPACK_IMPORTED_MODULE_12__ = __nested_webpack_require_1348183__(/*! ../vue/question-comment.vue */ \"./src/vue/question-comment.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"OtherComment\", function() { return _vue_question_comment_vue__WEBPACK_IMPORTED_MODULE_12__[\"OtherComment\"]; });\n\n/* harmony import */ var _vue_rating_vue__WEBPACK_IMPORTED_MODULE_13__ = __nested_webpack_require_1348183__(/*! ../vue/rating.vue */ \"./src/vue/rating.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"Rating\", function() { return _vue_rating_vue__WEBPACK_IMPORTED_MODULE_13__[\"Rating\"]; });\n\n/* harmony import */ var _vue_rating_dropdown_vue__WEBPACK_IMPORTED_MODULE_14__ = __nested_webpack_require_1348183__(/*! ../vue/rating-dropdown.vue */ \"./src/vue/rating-dropdown.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"RatingDropdown\", function() { return _vue_rating_dropdown_vue__WEBPACK_IMPORTED_MODULE_14__[\"RatingDropdown\"]; });\n\n/* harmony import */ var _vue_comment_vue__WEBPACK_IMPORTED_MODULE_15__ = __nested_webpack_require_1348183__(/*! ../vue/comment.vue */ \"./src/vue/comment.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"Comment\", function() { return _vue_comment_vue__WEBPACK_IMPORTED_MODULE_15__[\"Comment\"]; });\n\n/* harmony import */ var _vue_ranking_ranking_vue__WEBPACK_IMPORTED_MODULE_16__ = __nested_webpack_require_1348183__(/*! ../vue/ranking/ranking.vue */ \"./src/vue/ranking/ranking.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"Ranking\", function() { return _vue_ranking_ranking_vue__WEBPACK_IMPORTED_MODULE_16__[\"Ranking\"]; });\n\n/* harmony import */ var _vue_ranking_ranking_item_vue__WEBPACK_IMPORTED_MODULE_17__ = __nested_webpack_require_1348183__(/*! ../vue/ranking/ranking-item.vue */ \"./src/vue/ranking/ranking-item.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"RankingItem\", function() { return _vue_ranking_ranking_item_vue__WEBPACK_IMPORTED_MODULE_17__[\"RankingItem\"]; });\n\n/* harmony import */ var _vue_checkbox_vue__WEBPACK_IMPORTED_MODULE_18__ = __nested_webpack_require_1348183__(/*! ../vue/checkbox.vue */ \"./src/vue/checkbox.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"Checkbox\", function() { return _vue_checkbox_vue__WEBPACK_IMPORTED_MODULE_18__[\"Checkbox\"]; });\n\n/* harmony import */ var _vue_checkboxitem_vue__WEBPACK_IMPORTED_MODULE_19__ = __nested_webpack_require_1348183__(/*! ../vue/checkboxitem.vue */ \"./src/vue/checkboxitem.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"CheckboxItem\", function() { return _vue_checkboxitem_vue__WEBPACK_IMPORTED_MODULE_19__[\"CheckboxItem\"]; });\n\n/* harmony import */ var _vue_buttongroup_vue__WEBPACK_IMPORTED_MODULE_20__ = __nested_webpack_require_1348183__(/*! ../vue/buttongroup.vue */ \"./src/vue/buttongroup.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"ButtonGroup\", function() { return _vue_buttongroup_vue__WEBPACK_IMPORTED_MODULE_20__[\"ButtonGroup\"]; });\n\n/* harmony import */ var _vue_buttongroupitem_vue__WEBPACK_IMPORTED_MODULE_21__ = __nested_webpack_require_1348183__(/*! ../vue/buttongroupitem.vue */ \"./src/vue/buttongroupitem.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"ButtonGroupItem\", function() { return _vue_buttongroupitem_vue__WEBPACK_IMPORTED_MODULE_21__[\"ButtonGroupItem\"]; });\n\n/* harmony import */ var _vue_text_vue__WEBPACK_IMPORTED_MODULE_22__ = __nested_webpack_require_1348183__(/*! ../vue/text.vue */ \"./src/vue/text.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"QuestionText\", function() { return _vue_text_vue__WEBPACK_IMPORTED_MODULE_22__[\"QuestionText\"]; });\n\n/* harmony import */ var _vue_text_input_vue__WEBPACK_IMPORTED_MODULE_23__ = __nested_webpack_require_1348183__(/*! ../vue/text-input.vue */ \"./src/vue/text-input.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"QuestionTextInput\", function() { return _vue_text_input_vue__WEBPACK_IMPORTED_MODULE_23__[\"QuestionTextInput\"]; });\n\n/* harmony import */ var _vue_boolean__WEBPACK_IMPORTED_MODULE_24__ = __nested_webpack_require_1348183__(/*! ../vue/boolean */ \"./src/vue/boolean.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"Boolean\", function() { return _vue_boolean__WEBPACK_IMPORTED_MODULE_24__[\"Boolean\"]; });\n\n/* harmony import */ var _vue_boolean_switch_vue__WEBPACK_IMPORTED_MODULE_25__ = __nested_webpack_require_1348183__(/*! ../vue/boolean-switch.vue */ \"./src/vue/boolean-switch.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"BooleanSwitch\", function() { return _vue_boolean_switch_vue__WEBPACK_IMPORTED_MODULE_25__[\"BooleanSwitch\"]; });\n\n/* harmony import */ var _vue_boolean_checkbox_vue__WEBPACK_IMPORTED_MODULE_26__ = __nested_webpack_require_1348183__(/*! ../vue/boolean-checkbox.vue */ \"./src/vue/boolean-checkbox.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"BooleanCheckbox\", function() { return _vue_boolean_checkbox_vue__WEBPACK_IMPORTED_MODULE_26__[\"BooleanCheckbox\"]; });\n\n/* harmony import */ var _vue_boolean_radio_vue__WEBPACK_IMPORTED_MODULE_27__ = __nested_webpack_require_1348183__(/*! ../vue/boolean-radio.vue */ \"./src/vue/boolean-radio.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"BooleanRadio\", function() { return _vue_boolean_radio_vue__WEBPACK_IMPORTED_MODULE_27__[\"BooleanRadio\"]; });\n\n/* harmony import */ var _vue_boolean_radio_item_vue__WEBPACK_IMPORTED_MODULE_28__ = __nested_webpack_require_1348183__(/*! ../vue/boolean-radio-item.vue */ \"./src/vue/boolean-radio-item.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"BooleanRadioItem\", function() { return _vue_boolean_radio_item_vue__WEBPACK_IMPORTED_MODULE_28__[\"BooleanRadioItem\"]; });\n\n/* harmony import */ var _vue_empty_vue__WEBPACK_IMPORTED_MODULE_29__ = __nested_webpack_require_1348183__(/*! ../vue/empty.vue */ \"./src/vue/empty.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"Empty\", function() { return _vue_empty_vue__WEBPACK_IMPORTED_MODULE_29__[\"Empty\"]; });\n\n/* harmony import */ var _vue_multipletext_vue__WEBPACK_IMPORTED_MODULE_30__ = __nested_webpack_require_1348183__(/*! ../vue/multipletext.vue */ \"./src/vue/multipletext.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"MultipleText\", function() { return _vue_multipletext_vue__WEBPACK_IMPORTED_MODULE_30__[\"MultipleText\"]; });\n\n/* harmony import */ var _vue_multipletextitem_vue__WEBPACK_IMPORTED_MODULE_31__ = __nested_webpack_require_1348183__(/*! ../vue/multipletextitem.vue */ \"./src/vue/multipletextitem.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"MultipleTextItem\", function() { return _vue_multipletextitem_vue__WEBPACK_IMPORTED_MODULE_31__[\"MultipleTextItem\"]; });\n\n/* harmony import */ var _vue_matrix_vue__WEBPACK_IMPORTED_MODULE_32__ = __nested_webpack_require_1348183__(/*! ../vue/matrix.vue */ \"./src/vue/matrix.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"Matrix\", function() { return _vue_matrix_vue__WEBPACK_IMPORTED_MODULE_32__[\"Matrix\"]; });\n\n/* harmony import */ var _vue_dropdown_vue__WEBPACK_IMPORTED_MODULE_33__ = __nested_webpack_require_1348183__(/*! ../vue/dropdown.vue */ \"./src/vue/dropdown.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"Dropdown\", function() { return _vue_dropdown_vue__WEBPACK_IMPORTED_MODULE_33__[\"Dropdown\"]; });\n\n/* harmony import */ var _vue_dropdown_select_vue__WEBPACK_IMPORTED_MODULE_34__ = __nested_webpack_require_1348183__(/*! ../vue/dropdown-select.vue */ \"./src/vue/dropdown-select.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"DropdownSelect\", function() { return _vue_dropdown_select_vue__WEBPACK_IMPORTED_MODULE_34__[\"DropdownSelect\"]; });\n\n/* harmony import */ var _vue_tagbox_vue__WEBPACK_IMPORTED_MODULE_35__ = __nested_webpack_require_1348183__(/*! ../vue/tagbox.vue */ \"./src/vue/tagbox.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"Tagbox\", function() { return _vue_tagbox_vue__WEBPACK_IMPORTED_MODULE_35__[\"Tagbox\"]; });\n\n/* harmony import */ var _vue_file_vue__WEBPACK_IMPORTED_MODULE_36__ = __nested_webpack_require_1348183__(/*! ../vue/file.vue */ \"./src/vue/file.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"File\", function() { return _vue_file_vue__WEBPACK_IMPORTED_MODULE_36__[\"File\"]; });\n\n/* harmony import */ var _vue_file_preview_vue__WEBPACK_IMPORTED_MODULE_37__ = __nested_webpack_require_1348183__(/*! ../vue/file-preview.vue */ \"./src/vue/file-preview.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"FilePreview\", function() { return _vue_file_preview_vue__WEBPACK_IMPORTED_MODULE_37__[\"FilePreview\"]; });\n\n/* harmony import */ var _vue_file_clean_button_vue__WEBPACK_IMPORTED_MODULE_38__ = __nested_webpack_require_1348183__(/*! ../vue/file-clean-button.vue */ \"./src/vue/file-clean-button.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"FileCleanButton\", function() { return _vue_file_clean_button_vue__WEBPACK_IMPORTED_MODULE_38__[\"FileCleanButton\"]; });\n\n/* harmony import */ var _vue_file_video_vue__WEBPACK_IMPORTED_MODULE_39__ = __nested_webpack_require_1348183__(/*! ../vue/file-video.vue */ \"./src/vue/file-video.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"FileVideo\", function() { return _vue_file_video_vue__WEBPACK_IMPORTED_MODULE_39__[\"FileVideo\"]; });\n\n/* harmony import */ var _vue_components_file_actions_file_choose_button_vue__WEBPACK_IMPORTED_MODULE_40__ = __nested_webpack_require_1348183__(/*! ../vue/components/file-actions/file-choose-button.vue */ \"./src/vue/components/file-actions/file-choose-button.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"FileChooseButton\", function() { return _vue_components_file_actions_file_choose_button_vue__WEBPACK_IMPORTED_MODULE_40__[\"FileChooseButton\"]; });\n\n/* harmony import */ var _vue_matrixcell_vue__WEBPACK_IMPORTED_MODULE_41__ = __nested_webpack_require_1348183__(/*! ../vue/matrixcell.vue */ \"./src/vue/matrixcell.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"MatrixCell\", function() { return _vue_matrixcell_vue__WEBPACK_IMPORTED_MODULE_41__[\"MatrixCell\"]; });\n\n/* harmony import */ var _vue_matrixheaderrequired_vue__WEBPACK_IMPORTED_MODULE_42__ = __nested_webpack_require_1348183__(/*! ../vue/matrixheaderrequired.vue */ \"./src/vue/matrixheaderrequired.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"MatrixHeaderRequired\", function() { return _vue_matrixheaderrequired_vue__WEBPACK_IMPORTED_MODULE_42__[\"MatrixHeaderRequired\"]; });\n\n/* harmony import */ var _vue_matrixtable_vue__WEBPACK_IMPORTED_MODULE_43__ = __nested_webpack_require_1348183__(/*! ../vue/matrixtable.vue */ \"./src/vue/matrixtable.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"MatrixTable\", function() { return _vue_matrixtable_vue__WEBPACK_IMPORTED_MODULE_43__[\"MatrixTable\"]; });\n\n/* harmony import */ var _vue_matrixdropdown_vue__WEBPACK_IMPORTED_MODULE_44__ = __nested_webpack_require_1348183__(/*! ../vue/matrixdropdown.vue */ \"./src/vue/matrixdropdown.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"MatrixDropdown\", function() { return _vue_matrixdropdown_vue__WEBPACK_IMPORTED_MODULE_44__[\"MatrixDropdown\"]; });\n\n/* harmony import */ var _vue_matrixdynamic_vue__WEBPACK_IMPORTED_MODULE_45__ = __nested_webpack_require_1348183__(/*! ../vue/matrixdynamic.vue */ \"./src/vue/matrixdynamic.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"MatrixDynamic\", function() { return _vue_matrixdynamic_vue__WEBPACK_IMPORTED_MODULE_45__[\"MatrixDynamic\"]; });\n\n/* harmony import */ var _vue_errors_vue__WEBPACK_IMPORTED_MODULE_46__ = __nested_webpack_require_1348183__(/*! ../vue/errors.vue */ \"./src/vue/errors.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"Errors\", function() { return _vue_errors_vue__WEBPACK_IMPORTED_MODULE_46__[\"Errors\"]; });\n\n/* harmony import */ var _vue_html_vue__WEBPACK_IMPORTED_MODULE_47__ = __nested_webpack_require_1348183__(/*! ../vue/html.vue */ \"./src/vue/html.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"Html\", function() { return _vue_html_vue__WEBPACK_IMPORTED_MODULE_47__[\"Html\"]; });\n\n/* harmony import */ var _vue_expression_vue__WEBPACK_IMPORTED_MODULE_48__ = __nested_webpack_require_1348183__(/*! ../vue/expression.vue */ \"./src/vue/expression.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"Expression\", function() { return _vue_expression_vue__WEBPACK_IMPORTED_MODULE_48__[\"Expression\"]; });\n\n/* harmony import */ var _vue_imagepicker_vue__WEBPACK_IMPORTED_MODULE_49__ = __nested_webpack_require_1348183__(/*! ../vue/imagepicker.vue */ \"./src/vue/imagepicker.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"ImagePicker\", function() { return _vue_imagepicker_vue__WEBPACK_IMPORTED_MODULE_49__[\"ImagePicker\"]; });\n\n/* harmony import */ var _vue_imagepicker_item_vue__WEBPACK_IMPORTED_MODULE_50__ = __nested_webpack_require_1348183__(/*! ../vue/imagepicker-item.vue */ \"./src/vue/imagepicker-item.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"ImagePickerItem\", function() { return _vue_imagepicker_item_vue__WEBPACK_IMPORTED_MODULE_50__[\"ImagePickerItem\"]; });\n\n/* harmony import */ var _vue_paneldynamic_vue__WEBPACK_IMPORTED_MODULE_51__ = __nested_webpack_require_1348183__(/*! ../vue/paneldynamic.vue */ \"./src/vue/paneldynamic.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"PanelDynamic\", function() { return _vue_paneldynamic_vue__WEBPACK_IMPORTED_MODULE_51__[\"PanelDynamic\"]; });\n\n/* harmony import */ var _vue_paneldynamicprogress_vue__WEBPACK_IMPORTED_MODULE_52__ = __nested_webpack_require_1348183__(/*! ../vue/paneldynamicprogress.vue */ \"./src/vue/paneldynamicprogress.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"PanelDynamicProgress\", function() { return _vue_paneldynamicprogress_vue__WEBPACK_IMPORTED_MODULE_52__[\"PanelDynamicProgress\"]; });\n\n/* harmony import */ var _vue_paneldynamicprogressV2_vue__WEBPACK_IMPORTED_MODULE_53__ = __nested_webpack_require_1348183__(/*! ../vue/paneldynamicprogressV2.vue */ \"./src/vue/paneldynamicprogressV2.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"PanelDynamicProgressV2\", function() { return _vue_paneldynamicprogressV2_vue__WEBPACK_IMPORTED_MODULE_53__[\"PanelDynamicProgressV2\"]; });\n\n/* harmony import */ var _vue_progress_vue__WEBPACK_IMPORTED_MODULE_54__ = __nested_webpack_require_1348183__(/*! ../vue/progress.vue */ \"./src/vue/progress.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"Progress\", function() { return _vue_progress_vue__WEBPACK_IMPORTED_MODULE_54__[\"Progress\"]; });\n\n/* harmony import */ var _vue_progressButtons_vue__WEBPACK_IMPORTED_MODULE_55__ = __nested_webpack_require_1348183__(/*! ../vue/progressButtons.vue */ \"./src/vue/progressButtons.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"ProgressButtons\", function() { return _vue_progressButtons_vue__WEBPACK_IMPORTED_MODULE_55__[\"ProgressButtons\"]; });\n\n/* harmony import */ var _vue_progressToc_vue__WEBPACK_IMPORTED_MODULE_56__ = __nested_webpack_require_1348183__(/*! ../vue/progressToc.vue */ \"./src/vue/progressToc.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"ProgressToc\", function() { return _vue_progressToc_vue__WEBPACK_IMPORTED_MODULE_56__[\"ProgressToc\"]; });\n\n/* harmony import */ var _vue_timerpanel_vue__WEBPACK_IMPORTED_MODULE_57__ = __nested_webpack_require_1348183__(/*! ../vue/timerpanel.vue */ \"./src/vue/timerpanel.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"TimerPanel\", function() { return _vue_timerpanel_vue__WEBPACK_IMPORTED_MODULE_57__[\"TimerPanel\"]; });\n\n/* harmony import */ var _vue_panel_vue__WEBPACK_IMPORTED_MODULE_58__ = __nested_webpack_require_1348183__(/*! ../vue/panel.vue */ \"./src/vue/panel.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"Panel\", function() { return _vue_panel_vue__WEBPACK_IMPORTED_MODULE_58__[\"Panel\"]; });\n\n/* harmony import */ var _vue_flowpanel_vue__WEBPACK_IMPORTED_MODULE_59__ = __nested_webpack_require_1348183__(/*! ../vue/flowpanel.vue */ \"./src/vue/flowpanel.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"FlowPanel\", function() { return _vue_flowpanel_vue__WEBPACK_IMPORTED_MODULE_59__[\"FlowPanel\"]; });\n\n/* harmony import */ var _vue_flowpanelelement_vue__WEBPACK_IMPORTED_MODULE_60__ = __nested_webpack_require_1348183__(/*! ../vue/flowpanelelement.vue */ \"./src/vue/flowpanelelement.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"FlowPanelElement\", function() { return _vue_flowpanelelement_vue__WEBPACK_IMPORTED_MODULE_60__[\"FlowPanelElement\"]; });\n\n/* harmony import */ var _vue_row_vue__WEBPACK_IMPORTED_MODULE_61__ = __nested_webpack_require_1348183__(/*! ../vue/row.vue */ \"./src/vue/row.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"Row\", function() { return _vue_row_vue__WEBPACK_IMPORTED_MODULE_61__[\"Row\"]; });\n\n/* harmony import */ var _vue_elementheader_vue__WEBPACK_IMPORTED_MODULE_62__ = __nested_webpack_require_1348183__(/*! ../vue/elementheader.vue */ \"./src/vue/elementheader.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"ElementHeader\", function() { return _vue_elementheader_vue__WEBPACK_IMPORTED_MODULE_62__[\"ElementHeader\"]; });\n\n/* harmony import */ var _vue_image_vue__WEBPACK_IMPORTED_MODULE_63__ = __nested_webpack_require_1348183__(/*! ../vue/image.vue */ \"./src/vue/image.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"QuestionImage\", function() { return _vue_image_vue__WEBPACK_IMPORTED_MODULE_63__[\"QuestionImage\"]; });\n\n/* harmony import */ var _vue_signaturepad_vue__WEBPACK_IMPORTED_MODULE_64__ = __nested_webpack_require_1348183__(/*! ../vue/signaturepad.vue */ \"./src/vue/signaturepad.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"SignaturePad\", function() { return _vue_signaturepad_vue__WEBPACK_IMPORTED_MODULE_64__[\"SignaturePad\"]; });\n\n/* harmony import */ var _vue_header_vue__WEBPACK_IMPORTED_MODULE_65__ = __nested_webpack_require_1348183__(/*! ../vue/header.vue */ \"./src/vue/header.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"SurveyHeader\", function() { return _vue_header_vue__WEBPACK_IMPORTED_MODULE_65__[\"SurveyHeader\"]; });\n\n/* harmony import */ var _vue_custom_vue__WEBPACK_IMPORTED_MODULE_66__ = __nested_webpack_require_1348183__(/*! ../vue/custom.vue */ \"./src/vue/custom.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"Custom\", function() { return _vue_custom_vue__WEBPACK_IMPORTED_MODULE_66__[\"Custom\"]; });\n\n/* harmony import */ var _vue_composite_vue__WEBPACK_IMPORTED_MODULE_67__ = __nested_webpack_require_1348183__(/*! ../vue/composite.vue */ \"./src/vue/composite.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"Composite\", function() { return _vue_composite_vue__WEBPACK_IMPORTED_MODULE_67__[\"Composite\"]; });\n\n/* harmony import */ var _vue_components_title_title_element_vue__WEBPACK_IMPORTED_MODULE_68__ = __nested_webpack_require_1348183__(/*! ../vue/components/title/title-element.vue */ \"./src/vue/components/title/title-element.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"TitleElement\", function() { return _vue_components_title_title_element_vue__WEBPACK_IMPORTED_MODULE_68__[\"TitleElement\"]; });\n\n/* harmony import */ var _vue_components_title_title_content_vue__WEBPACK_IMPORTED_MODULE_69__ = __nested_webpack_require_1348183__(/*! ../vue/components/title/title-content.vue */ \"./src/vue/components/title/title-content.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"TitleContent\", function() { return _vue_components_title_title_content_vue__WEBPACK_IMPORTED_MODULE_69__[\"TitleContent\"]; });\n\n/* harmony import */ var _vue_components_title_title_actions_vue__WEBPACK_IMPORTED_MODULE_70__ = __nested_webpack_require_1348183__(/*! ../vue/components/title/title-actions.vue */ \"./src/vue/components/title/title-actions.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"TitleActions\", function() { return _vue_components_title_title_actions_vue__WEBPACK_IMPORTED_MODULE_70__[\"TitleActions\"]; });\n\n/* harmony import */ var _vue_components_action_bar_action_bar_vue__WEBPACK_IMPORTED_MODULE_71__ = __nested_webpack_require_1348183__(/*! ../vue/components/action-bar/action-bar.vue */ \"./src/vue/components/action-bar/action-bar.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"ActionBarViewModel\", function() { return _vue_components_action_bar_action_bar_vue__WEBPACK_IMPORTED_MODULE_71__[\"ActionBarViewModel\"]; });\n\n/* harmony import */ var _vue_components_svg_icon_svg_icon_vue__WEBPACK_IMPORTED_MODULE_72__ = __nested_webpack_require_1348183__(/*! ../vue/components/svg-icon/svg-icon.vue */ \"./src/vue/components/svg-icon/svg-icon.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"SvgIcon\", function() { return _vue_components_svg_icon_svg_icon_vue__WEBPACK_IMPORTED_MODULE_72__[\"SvgIcon\"]; });\n\n/* harmony import */ var _vue_components_popup_popup_pointer_vue__WEBPACK_IMPORTED_MODULE_73__ = __nested_webpack_require_1348183__(/*! ../vue/components/popup/popup-pointer.vue */ \"./src/vue/components/popup/popup-pointer.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"PopupPointer\", function() { return _vue_components_popup_popup_pointer_vue__WEBPACK_IMPORTED_MODULE_73__[\"PopupPointer\"]; });\n\n/* harmony import */ var _vue_components_popup_popup_container_vue__WEBPACK_IMPORTED_MODULE_74__ = __nested_webpack_require_1348183__(/*! ../vue/components/popup/popup-container.vue */ \"./src/vue/components/popup/popup-container.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"PopupContainer\", function() { return _vue_components_popup_popup_container_vue__WEBPACK_IMPORTED_MODULE_74__[\"PopupContainer\"]; });\n\n/* harmony import */ var _vue_components_popup_popup_vue__WEBPACK_IMPORTED_MODULE_75__ = __nested_webpack_require_1348183__(/*! ../vue/components/popup/popup.vue */ \"./src/vue/components/popup/popup.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"Popup\", function() { return _vue_components_popup_popup_vue__WEBPACK_IMPORTED_MODULE_75__[\"Popup\"]; });\n\n/* harmony import */ var _vue_components_list_list_vue__WEBPACK_IMPORTED_MODULE_76__ = __nested_webpack_require_1348183__(/*! ../vue/components/list/list.vue */ \"./src/vue/components/list/list.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"List\", function() { return _vue_components_list_list_vue__WEBPACK_IMPORTED_MODULE_76__[\"List\"]; });\n\n/* harmony import */ var _vue_components_dropdown_option_item_vue__WEBPACK_IMPORTED_MODULE_77__ = __nested_webpack_require_1348183__(/*! ../vue/components/dropdown/option-item.vue */ \"./src/vue/components/dropdown/option-item.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"DropdownOptionItem\", function() { return _vue_components_dropdown_option_item_vue__WEBPACK_IMPORTED_MODULE_77__[\"DropdownOptionItem\"]; });\n\n/* harmony import */ var _vue_components_dropdown_dropdown_vue__WEBPACK_IMPORTED_MODULE_78__ = __nested_webpack_require_1348183__(/*! ../vue/components/dropdown/dropdown.vue */ \"./src/vue/components/dropdown/dropdown.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"DropdownComponent\", function() { return _vue_components_dropdown_dropdown_vue__WEBPACK_IMPORTED_MODULE_78__[\"DropdownComponent\"]; });\n\n/* harmony import */ var _vue_components_tagbox_tagbox_filter_vue__WEBPACK_IMPORTED_MODULE_79__ = __nested_webpack_require_1348183__(/*! ../vue/components/tagbox/tagbox-filter.vue */ \"./src/vue/components/tagbox/tagbox-filter.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"TagboxFilterComponent\", function() { return _vue_components_tagbox_tagbox_filter_vue__WEBPACK_IMPORTED_MODULE_79__[\"TagboxFilterComponent\"]; });\n\n/* harmony import */ var _vue_components_tagbox_tagbox_vue__WEBPACK_IMPORTED_MODULE_80__ = __nested_webpack_require_1348183__(/*! ../vue/components/tagbox/tagbox.vue */ \"./src/vue/components/tagbox/tagbox.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"TagboxComponent\", function() { return _vue_components_tagbox_tagbox_vue__WEBPACK_IMPORTED_MODULE_80__[\"TagboxComponent\"]; });\n\n/* harmony import */ var _vue_components_tagbox_tagbox_item_vue__WEBPACK_IMPORTED_MODULE_81__ = __nested_webpack_require_1348183__(/*! ../vue/components/tagbox/tagbox-item.vue */ \"./src/vue/components/tagbox/tagbox-item.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"TagboxItem\", function() { return _vue_components_tagbox_tagbox_item_vue__WEBPACK_IMPORTED_MODULE_81__[\"TagboxItem\"]; });\n\n/* harmony import */ var _vue_components_rating_rating_item_vue__WEBPACK_IMPORTED_MODULE_82__ = __nested_webpack_require_1348183__(/*! ../vue/components/rating/rating-item.vue */ \"./src/vue/components/rating/rating-item.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"RatingItem\", function() { return _vue_components_rating_rating_item_vue__WEBPACK_IMPORTED_MODULE_82__[\"RatingItem\"]; });\n\n/* harmony import */ var _vue_components_rating_rating_item_star_vue__WEBPACK_IMPORTED_MODULE_83__ = __nested_webpack_require_1348183__(/*! ../vue/components/rating/rating-item-star.vue */ \"./src/vue/components/rating/rating-item-star.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"RatingItemStar\", function() { return _vue_components_rating_rating_item_star_vue__WEBPACK_IMPORTED_MODULE_83__[\"RatingItemStar\"]; });\n\n/* harmony import */ var _vue_components_rating_rating_item_smiley_vue__WEBPACK_IMPORTED_MODULE_84__ = __nested_webpack_require_1348183__(/*! ../vue/components/rating/rating-item-smiley.vue */ \"./src/vue/components/rating/rating-item-smiley.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"RatingItemSmiley\", function() { return _vue_components_rating_rating_item_smiley_vue__WEBPACK_IMPORTED_MODULE_84__[\"RatingItemSmiley\"]; });\n\n/* harmony import */ var _vue_components_matrix_actions_remove_button_remove_button_vue__WEBPACK_IMPORTED_MODULE_85__ = __nested_webpack_require_1348183__(/*! ../vue/components/matrix-actions/remove-button/remove-button.vue */ \"./src/vue/components/matrix-actions/remove-button/remove-button.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"SurveyQuestionMatrixDynamicRemoveButton\", function() { return _vue_components_matrix_actions_remove_button_remove_button_vue__WEBPACK_IMPORTED_MODULE_85__[\"SurveyQuestionMatrixDynamicRemoveButton\"]; });\n\n/* harmony import */ var _vue_components_matrix_actions_detail_button_detail_button_vue__WEBPACK_IMPORTED_MODULE_86__ = __nested_webpack_require_1348183__(/*! ../vue/components/matrix-actions/detail-button/detail-button.vue */ \"./src/vue/components/matrix-actions/detail-button/detail-button.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"SurveyQuestionMatrixDetailButton\", function() { return _vue_components_matrix_actions_detail_button_detail_button_vue__WEBPACK_IMPORTED_MODULE_86__[\"SurveyQuestionMatrixDetailButton\"]; });\n\n/* harmony import */ var _vue_components_matrix_actions_drag_drop_icon_drag_drop_icon_vue__WEBPACK_IMPORTED_MODULE_87__ = __nested_webpack_require_1348183__(/*! ../vue/components/matrix-actions/drag-drop-icon/drag-drop-icon.vue */ \"./src/vue/components/matrix-actions/drag-drop-icon/drag-drop-icon.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"SurveyQuestionMatrixDynamicDragDropIcon\", function() { return _vue_components_matrix_actions_drag_drop_icon_drag_drop_icon_vue__WEBPACK_IMPORTED_MODULE_87__[\"SurveyQuestionMatrixDynamicDragDropIcon\"]; });\n\n/* harmony import */ var _vue_components_paneldynamic_actions_paneldynamic_add_btn_vue__WEBPACK_IMPORTED_MODULE_88__ = __nested_webpack_require_1348183__(/*! ../vue/components/paneldynamic-actions/paneldynamic-add-btn.vue */ \"./src/vue/components/paneldynamic-actions/paneldynamic-add-btn.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"PanelDynamicAddBtn\", function() { return _vue_components_paneldynamic_actions_paneldynamic_add_btn_vue__WEBPACK_IMPORTED_MODULE_88__[\"PanelDynamicAddBtn\"]; });\n\n/* harmony import */ var _vue_components_paneldynamic_actions_paneldynamic_next_btn_vue__WEBPACK_IMPORTED_MODULE_89__ = __nested_webpack_require_1348183__(/*! ../vue/components/paneldynamic-actions/paneldynamic-next-btn.vue */ \"./src/vue/components/paneldynamic-actions/paneldynamic-next-btn.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"PanelDynamicNextBtn\", function() { return _vue_components_paneldynamic_actions_paneldynamic_next_btn_vue__WEBPACK_IMPORTED_MODULE_89__[\"PanelDynamicNextBtn\"]; });\n\n/* harmony import */ var _vue_components_paneldynamic_actions_paneldynamic_prev_btn_vue__WEBPACK_IMPORTED_MODULE_90__ = __nested_webpack_require_1348183__(/*! ../vue/components/paneldynamic-actions/paneldynamic-prev-btn.vue */ \"./src/vue/components/paneldynamic-actions/paneldynamic-prev-btn.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"PanelDynamicPrevBtn\", function() { return _vue_components_paneldynamic_actions_paneldynamic_prev_btn_vue__WEBPACK_IMPORTED_MODULE_90__[\"PanelDynamicPrevBtn\"]; });\n\n/* harmony import */ var _vue_components_paneldynamic_actions_paneldynamic_progress_text_vue__WEBPACK_IMPORTED_MODULE_91__ = __nested_webpack_require_1348183__(/*! ../vue/components/paneldynamic-actions/paneldynamic-progress-text.vue */ \"./src/vue/components/paneldynamic-actions/paneldynamic-progress-text.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"PanelDynamicProgressText\", function() { return _vue_components_paneldynamic_actions_paneldynamic_progress_text_vue__WEBPACK_IMPORTED_MODULE_91__[\"PanelDynamicProgressText\"]; });\n\n/* harmony import */ var _vue_components_paneldynamic_actions_paneldynamic_remove_btn_vue__WEBPACK_IMPORTED_MODULE_92__ = __nested_webpack_require_1348183__(/*! ../vue/components/paneldynamic-actions/paneldynamic-remove-btn.vue */ \"./src/vue/components/paneldynamic-actions/paneldynamic-remove-btn.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"PanelDynamicRemoveButton\", function() { return _vue_components_paneldynamic_actions_paneldynamic_remove_btn_vue__WEBPACK_IMPORTED_MODULE_92__[\"PanelDynamicRemoveButton\"]; });\n\n/* harmony import */ var _vue_components_survey_actions_survey_nav_button_vue__WEBPACK_IMPORTED_MODULE_93__ = __nested_webpack_require_1348183__(/*! ../vue/components/survey-actions/survey-nav-button.vue */ \"./src/vue/components/survey-actions/survey-nav-button.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"SurveyNavigationButton\", function() { return _vue_components_survey_actions_survey_nav_button_vue__WEBPACK_IMPORTED_MODULE_93__[\"SurveyNavigationButton\"]; });\n\n/* harmony import */ var _vue_components_skeleton_vue__WEBPACK_IMPORTED_MODULE_94__ = __nested_webpack_require_1348183__(/*! ../vue/components/skeleton.vue */ \"./src/vue/components/skeleton.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"Skeleton\", function() { return _vue_components_skeleton_vue__WEBPACK_IMPORTED_MODULE_94__[\"Skeleton\"]; });\n\n/* harmony import */ var _vue_components_brand_info_vue__WEBPACK_IMPORTED_MODULE_95__ = __nested_webpack_require_1348183__(/*! ../vue/components/brand-info.vue */ \"./src/vue/components/brand-info.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"BrandInfo\", function() { return _vue_components_brand_info_vue__WEBPACK_IMPORTED_MODULE_95__[\"BrandInfo\"]; });\n\n/* harmony import */ var _vue_components_notifier_vue__WEBPACK_IMPORTED_MODULE_96__ = __nested_webpack_require_1348183__(/*! ../vue/components/notifier.vue */ \"./src/vue/components/notifier.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"NotifierComponent\", function() { return _vue_components_notifier_vue__WEBPACK_IMPORTED_MODULE_96__[\"NotifierComponent\"]; });\n\n/* harmony import */ var _vue_components_container_vue__WEBPACK_IMPORTED_MODULE_97__ = __nested_webpack_require_1348183__(/*! ../vue/components/container.vue */ \"./src/vue/components/container.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"ComponentsContainer\", function() { return _vue_components_container_vue__WEBPACK_IMPORTED_MODULE_97__[\"ComponentsContainer\"]; });\n\n/* harmony import */ var _vue_components_character_counter_vue__WEBPACK_IMPORTED_MODULE_98__ = __nested_webpack_require_1348183__(/*! ../vue/components/character-counter.vue */ \"./src/vue/components/character-counter.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"CharacterCounterComponent\", function() { return _vue_components_character_counter_vue__WEBPACK_IMPORTED_MODULE_98__[\"CharacterCounterComponent\"]; });\n\n/* harmony import */ var _vue_components_loading_indicator_vue__WEBPACK_IMPORTED_MODULE_99__ = __nested_webpack_require_1348183__(/*! ../vue/components/loading-indicator.vue */ \"./src/vue/components/loading-indicator.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"LoadingIndicatorComponent\", function() { return _vue_components_loading_indicator_vue__WEBPACK_IMPORTED_MODULE_99__[\"LoadingIndicatorComponent\"]; });\n\n/* harmony import */ var _vue_components_cover_cover_cell_vue__WEBPACK_IMPORTED_MODULE_100__ = __nested_webpack_require_1348183__(/*! ../vue/components/cover/cover-cell.vue */ \"./src/vue/components/cover/cover-cell.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"CoverCellViewModel\", function() { return _vue_components_cover_cover_cell_vue__WEBPACK_IMPORTED_MODULE_100__[\"CoverCellViewModel\"]; });\n\n/* harmony import */ var _vue_components_cover_cover_vue__WEBPACK_IMPORTED_MODULE_101__ = __nested_webpack_require_1348183__(/*! ../vue/components/cover/cover.vue */ \"./src/vue/components/cover/cover.vue\");\n/* harmony reexport (safe) */ __nested_webpack_require_1348183__.d(__nested_webpack_exports__, \"CoverViewModel\", function() { return _vue_components_cover_cover_vue__WEBPACK_IMPORTED_MODULE_101__[\"CoverViewModel\"]; });\n\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_102__ = __nested_webpack_require_1348183__(/*! survey-core */ \"./src/entries/core.ts\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nsurvey_core__WEBPACK_IMPORTED_MODULE_102__[\"SurveyModel\"].platform = \"vue\";\n\n\n/***/ }),\n\n/***/ \"./src/entries/vue.ts\":\n/*!****************************!*\\\n  !*** ./src/entries/vue.ts ***!\n  \\****************************/\n/*! exports provided: Version, ReleaseDate, checkLibraryVersion, setLicenseKey, hasLicense, settings, Helpers, AnswerCountValidator, EmailValidator, NumericValidator, RegexValidator, SurveyValidator, TextValidator, ValidatorResult, ExpressionValidator, ValidatorRunner, ItemValue, Base, Event, EventBase, ArrayChanges, ComputedUpdater, SurveyError, SurveyElementCore, SurveyElement, DragTypeOverMeEnum, CalculatedValue, CustomError, AnswerRequiredError, OneAnswerRequiredError, RequreNumericError, ExceedSizeError, LocalizableString, LocalizableStrings, HtmlConditionItem, UrlConditionItem, ChoicesRestful, ChoicesRestfull, FunctionFactory, registerFunction, ConditionRunner, ExpressionRunner, ExpressionExecutor, Operand, Const, BinaryOperand, Variable, FunctionOperand, ArrayOperand, UnaryOperand, ConditionsParser, ProcessValue, JsonError, JsonIncorrectTypeError, JsonMetadata, JsonMetadataClass, JsonMissingTypeError, JsonMissingTypeErrorBase, JsonObject, JsonObjectProperty, JsonRequiredPropertyError, JsonUnknownPropertyError, Serializer, property, propertyArray, MatrixDropdownCell, MatrixDropdownRowModelBase, QuestionMatrixDropdownModelBase, MatrixDropdownColumn, matrixDropdownColumnTypes, QuestionMatrixDropdownRenderedCell, QuestionMatrixDropdownRenderedRow, QuestionMatrixDropdownRenderedTable, MatrixDropdownRowModel, QuestionMatrixDropdownModel, MatrixDynamicRowModel, QuestionMatrixDynamicModel, MatrixRowModel, MatrixCells, QuestionMatrixModel, QuestionMatrixBaseModel, MultipleTextItemModel, MultipleTextCell, MultipleTextErrorCell, MutlipleTextErrorRow, MutlipleTextRow, QuestionMultipleTextModel, MultipleTextEditorModel, PanelModel, PanelModelBase, QuestionRowModel, FlowPanelModel, PageModel, DefaultTitleModel, Question, QuestionNonValue, QuestionEmptyModel, QuestionCheckboxBase, QuestionSelectBase, QuestionCheckboxModel, QuestionTagboxModel, QuestionRankingModel, QuestionCommentModel, QuestionDropdownModel, QuestionFactory, ElementFactory, QuestionFileModel, QuestionHtmlModel, QuestionRadiogroupModel, QuestionRatingModel, RenderedRatingItem, QuestionExpressionModel, QuestionTextBase, CharacterCounter, QuestionTextModel, QuestionBooleanModel, QuestionImagePickerModel, ImageItemValue, QuestionImageModel, QuestionSignaturePadModel, QuestionPanelDynamicModel, QuestionPanelDynamicItem, SurveyTimer, SurveyTimerModel, tryNavigateToPage, tryFocusPage, createTOCListModel, getTocRootCss, TOCModel, SurveyProgressModel, SurveyProgressButtonsModel, SurveyModel, SurveyTrigger, SurveyTriggerComplete, SurveyTriggerSetValue, SurveyTriggerVisible, SurveyTriggerCopyValue, SurveyTriggerRunExpression, SurveyTriggerSkip, Trigger, PopupSurveyModel, SurveyWindowModel, TextPreProcessor, Notifier, Cover, CoverCell, dxSurveyService, englishStrings, surveyLocalization, surveyStrings, QuestionCustomWidget, CustomWidgetCollection, QuestionCustomModel, QuestionCompositeModel, ComponentQuestionJSON, ComponentCollection, StylesManager, ListModel, MultiSelectListModel, PopupModel, createDialogOptions, PopupBaseViewModel, PopupDropdownViewModel, PopupModalViewModel, createPopupViewModel, createPopupModalViewModel, DropdownListModel, DropdownMultiSelectListModel, QuestionButtonGroupModel, ButtonGroupItemModel, ButtonGroupItemValue, IsMobile, IsTouch, _setIsTouch, confirmAction, confirmActionAsync, detectIEOrEdge, doKey2ClickUp, doKey2ClickDown, doKey2ClickBlur, loadFileFromBase64, increaseHeightByContent, createSvg, sanitizeEditableContent, CssClassBuilder, surveyCss, defaultV2Css, defaultV2ThemeName, DragDropCore, DragDropChoices, DragDropRankingSelectToRank, defaultStandardCss, modernCss, SvgIconRegistry, SvgRegistry, SvgBundleViewModel, RendererFactory, ResponsivityManager, VerticalResponsivityManager, unwrap, getOriginalEvent, getElement, createDropdownActionModel, createDropdownActionModelAdvanced, getActionDropdownButtonTarget, BaseAction, Action, ActionDropdownViewModel, AdaptiveActionContainer, defaultActionBarCss, ActionContainer, DragOrClickHelper, Model, bootstrapThemeName, bootstrapThemeColors, bootstrapThemeCssRules, bootstrapMaterialThemeName, bootstrapMaterialThemeColors, bootstrapMaterialThemeCssRules, defaultBootstrapCss, defaultBootstrapMaterialCss, Survey, CustomWidget, SurveyString, SurveyStringViewer, SurveyStringEditor, SurveyElementVue, SurveyRowElement, PopupSurvey, SurveyWindow, Page, Radiogroup, RadiogroupItem, OtherChoice, OtherComment, Rating, RatingDropdown, Comment, Ranking, RankingItem, Checkbox, CheckboxItem, ButtonGroup, ButtonGroupItem, QuestionText, QuestionTextInput, Boolean, BooleanSwitch, BooleanCheckbox, BooleanRadio, BooleanRadioItem, Empty, MultipleText, MultipleTextItem, Matrix, Dropdown, DropdownSelect, Tagbox, File, FilePreview, FileCleanButton, FileVideo, FileChooseButton, MatrixCell, MatrixHeaderRequired, MatrixTable, MatrixDropdown, MatrixDynamic, Errors, Html, Expression, ImagePicker, ImagePickerItem, PanelDynamic, PanelDynamicProgress, PanelDynamicProgressV2, Progress, ProgressButtons, ProgressToc, TimerPanel, Panel, FlowPanel, FlowPanelElement, Row, ElementHeader, QuestionImage, SignaturePad, SurveyHeader, Custom, Composite, TitleElement, TitleContent, TitleActions, ActionBarViewModel, SvgIcon, PopupPointer, PopupContainer, Popup, List, DropdownOptionItem, DropdownComponent, TagboxFilterComponent, TagboxComponent, TagboxItem, RatingItem, RatingItemStar, RatingItemSmiley, SurveyQuestionMatrixDynamicRemoveButton, SurveyQuestionMatrixDetailButton, SurveyQuestionMatrixDynamicDragDropIcon, PanelDynamicAddBtn, PanelDynamicNextBtn, PanelDynamicPrevBtn, PanelDynamicProgressText, PanelDynamicRemoveButton, SurveyNavigationButton, Skeleton, BrandInfo, NotifierComponent, ComponentsContainer, CharacterCounterComponent, LoadingIndicatorComponent, CoverCellViewModel, CoverViewModel */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1392914__) {\n\n\"use strict\";\n__nested_webpack_require_1392914__.r(__nested_webpack_exports__);\n/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1392914__(/*! ./core */ \"./src/entries/core.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"Version\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"Version\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"ReleaseDate\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ReleaseDate\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"checkLibraryVersion\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"checkLibraryVersion\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"setLicenseKey\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"setLicenseKey\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"hasLicense\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"hasLicense\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"settings\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"settings\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"Helpers\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"AnswerCountValidator\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"AnswerCountValidator\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"EmailValidator\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"EmailValidator\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"NumericValidator\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"NumericValidator\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"RegexValidator\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"RegexValidator\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"SurveyValidator\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"SurveyValidator\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"TextValidator\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"TextValidator\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"ValidatorResult\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ValidatorResult\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"ExpressionValidator\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ExpressionValidator\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"ValidatorRunner\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ValidatorRunner\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"ItemValue\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ItemValue\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"Base\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"Base\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"Event\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"Event\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"EventBase\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"EventBase\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"ArrayChanges\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ArrayChanges\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"ComputedUpdater\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ComputedUpdater\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"SurveyError\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"SurveyError\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"SurveyElementCore\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"SurveyElementCore\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"SurveyElement\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"SurveyElement\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"DragTypeOverMeEnum\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"DragTypeOverMeEnum\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"CalculatedValue\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"CalculatedValue\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"CustomError\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"CustomError\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"AnswerRequiredError\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"AnswerRequiredError\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"OneAnswerRequiredError\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"OneAnswerRequiredError\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"RequreNumericError\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"RequreNumericError\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"ExceedSizeError\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ExceedSizeError\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"LocalizableString\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"LocalizableString\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"LocalizableStrings\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"LocalizableStrings\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"HtmlConditionItem\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"HtmlConditionItem\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"UrlConditionItem\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"UrlConditionItem\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"ChoicesRestful\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ChoicesRestful\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"ChoicesRestfull\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ChoicesRestfull\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"FunctionFactory\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"FunctionFactory\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"registerFunction\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"registerFunction\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"ConditionRunner\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ConditionRunner\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"ExpressionRunner\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ExpressionRunner\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"ExpressionExecutor\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ExpressionExecutor\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"Operand\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"Operand\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"Const\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"Const\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"BinaryOperand\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"BinaryOperand\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"Variable\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"Variable\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"FunctionOperand\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"FunctionOperand\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"ArrayOperand\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ArrayOperand\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"UnaryOperand\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"UnaryOperand\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"ConditionsParser\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ConditionsParser\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"ProcessValue\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ProcessValue\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"JsonError\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"JsonError\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"JsonIncorrectTypeError\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"JsonIncorrectTypeError\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"JsonMetadata\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"JsonMetadata\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"JsonMetadataClass\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"JsonMetadataClass\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"JsonMissingTypeError\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"JsonMissingTypeError\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"JsonMissingTypeErrorBase\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"JsonMissingTypeErrorBase\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"JsonObject\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"JsonObject\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"JsonObjectProperty\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"JsonObjectProperty\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"JsonRequiredPropertyError\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"JsonRequiredPropertyError\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"JsonUnknownPropertyError\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"JsonUnknownPropertyError\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"Serializer\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"property\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"property\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"propertyArray\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"propertyArray\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"MatrixDropdownCell\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"MatrixDropdownCell\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"MatrixDropdownRowModelBase\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"MatrixDropdownRowModelBase\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"QuestionMatrixDropdownModelBase\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixDropdownModelBase\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"MatrixDropdownColumn\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"MatrixDropdownColumn\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"matrixDropdownColumnTypes\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"matrixDropdownColumnTypes\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"QuestionMatrixDropdownRenderedCell\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixDropdownRenderedCell\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"QuestionMatrixDropdownRenderedRow\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixDropdownRenderedRow\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"QuestionMatrixDropdownRenderedTable\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixDropdownRenderedTable\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"MatrixDropdownRowModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"MatrixDropdownRowModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"QuestionMatrixDropdownModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixDropdownModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"MatrixDynamicRowModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"MatrixDynamicRowModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"QuestionMatrixDynamicModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixDynamicModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"MatrixRowModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"MatrixRowModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"MatrixCells\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"MatrixCells\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"QuestionMatrixModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"QuestionMatrixBaseModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixBaseModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"MultipleTextItemModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"MultipleTextItemModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"MultipleTextCell\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"MultipleTextCell\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"MultipleTextErrorCell\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"MultipleTextErrorCell\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"MutlipleTextErrorRow\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"MutlipleTextErrorRow\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"MutlipleTextRow\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"MutlipleTextRow\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"QuestionMultipleTextModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMultipleTextModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"MultipleTextEditorModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"MultipleTextEditorModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"PanelModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"PanelModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"PanelModelBase\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"PanelModelBase\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"QuestionRowModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionRowModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"FlowPanelModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"FlowPanelModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"PageModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"PageModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"DefaultTitleModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"DefaultTitleModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"Question\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"Question\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"QuestionNonValue\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionNonValue\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"QuestionEmptyModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionEmptyModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"QuestionCheckboxBase\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionCheckboxBase\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"QuestionSelectBase\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionSelectBase\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"QuestionCheckboxModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionCheckboxModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"QuestionTagboxModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionTagboxModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"QuestionRankingModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionRankingModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"QuestionCommentModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionCommentModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"QuestionDropdownModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionDropdownModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"QuestionFactory\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionFactory\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"ElementFactory\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ElementFactory\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"QuestionFileModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionFileModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"QuestionHtmlModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionHtmlModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"QuestionRadiogroupModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionRadiogroupModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"QuestionRatingModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionRatingModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"RenderedRatingItem\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"RenderedRatingItem\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"QuestionExpressionModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionExpressionModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"QuestionTextBase\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionTextBase\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"CharacterCounter\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"CharacterCounter\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"QuestionTextModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionTextModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"QuestionBooleanModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionBooleanModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"QuestionImagePickerModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionImagePickerModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"ImageItemValue\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ImageItemValue\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"QuestionImageModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionImageModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"QuestionSignaturePadModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionSignaturePadModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"QuestionPanelDynamicModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionPanelDynamicModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"QuestionPanelDynamicItem\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionPanelDynamicItem\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"SurveyTimer\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"SurveyTimer\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"SurveyTimerModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"SurveyTimerModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"tryNavigateToPage\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"tryNavigateToPage\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"tryFocusPage\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"tryFocusPage\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"createTOCListModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"createTOCListModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"getTocRootCss\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"getTocRootCss\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"TOCModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"TOCModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"SurveyProgressModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"SurveyProgressModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"SurveyProgressButtonsModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"SurveyProgressButtonsModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"SurveyModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"SurveyModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"SurveyTrigger\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"SurveyTrigger\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"SurveyTriggerComplete\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"SurveyTriggerComplete\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"SurveyTriggerSetValue\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"SurveyTriggerSetValue\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"SurveyTriggerVisible\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"SurveyTriggerVisible\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"SurveyTriggerCopyValue\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"SurveyTriggerCopyValue\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"SurveyTriggerRunExpression\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"SurveyTriggerRunExpression\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"SurveyTriggerSkip\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"SurveyTriggerSkip\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"Trigger\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"Trigger\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"PopupSurveyModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"PopupSurveyModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"SurveyWindowModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"SurveyWindowModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"TextPreProcessor\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"TextPreProcessor\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"Notifier\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"Notifier\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"Cover\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"Cover\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"CoverCell\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"CoverCell\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"dxSurveyService\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"dxSurveyService\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"englishStrings\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"englishStrings\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"surveyLocalization\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"surveyStrings\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"surveyStrings\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"QuestionCustomWidget\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionCustomWidget\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"CustomWidgetCollection\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"CustomWidgetCollection\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"QuestionCustomModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionCustomModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"QuestionCompositeModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionCompositeModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"ComponentQuestionJSON\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ComponentQuestionJSON\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"ComponentCollection\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ComponentCollection\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"StylesManager\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"StylesManager\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"ListModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ListModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"MultiSelectListModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"MultiSelectListModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"PopupModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"PopupModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"createDialogOptions\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"createDialogOptions\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"PopupBaseViewModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"PopupBaseViewModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"PopupDropdownViewModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"PopupDropdownViewModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"PopupModalViewModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"PopupModalViewModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"createPopupViewModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"createPopupViewModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"createPopupModalViewModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"createPopupModalViewModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"DropdownListModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"DropdownListModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"DropdownMultiSelectListModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"DropdownMultiSelectListModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"QuestionButtonGroupModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionButtonGroupModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"ButtonGroupItemModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ButtonGroupItemModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"ButtonGroupItemValue\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ButtonGroupItemValue\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"IsMobile\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"IsMobile\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"IsTouch\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"IsTouch\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"_setIsTouch\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"_setIsTouch\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"confirmAction\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"confirmAction\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"confirmActionAsync\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"confirmActionAsync\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"detectIEOrEdge\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"detectIEOrEdge\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"doKey2ClickUp\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"doKey2ClickUp\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"doKey2ClickDown\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"doKey2ClickDown\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"doKey2ClickBlur\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"doKey2ClickBlur\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"loadFileFromBase64\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"loadFileFromBase64\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"increaseHeightByContent\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"increaseHeightByContent\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"createSvg\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"createSvg\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"sanitizeEditableContent\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"sanitizeEditableContent\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"CssClassBuilder\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"CssClassBuilder\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"surveyCss\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"surveyCss\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"defaultV2Css\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"defaultV2Css\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"defaultV2ThemeName\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"defaultV2ThemeName\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"DragDropCore\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"DragDropCore\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"DragDropChoices\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"DragDropChoices\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"DragDropRankingSelectToRank\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"DragDropRankingSelectToRank\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"defaultStandardCss\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"defaultStandardCss\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"modernCss\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"modernCss\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"SvgIconRegistry\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"SvgIconRegistry\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"SvgRegistry\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"SvgRegistry\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"SvgBundleViewModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"SvgBundleViewModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"RendererFactory\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"RendererFactory\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"ResponsivityManager\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ResponsivityManager\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"VerticalResponsivityManager\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"VerticalResponsivityManager\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"unwrap\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"unwrap\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"getOriginalEvent\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"getOriginalEvent\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"getElement\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"getElement\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"createDropdownActionModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"createDropdownActionModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"createDropdownActionModelAdvanced\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"createDropdownActionModelAdvanced\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"getActionDropdownButtonTarget\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"getActionDropdownButtonTarget\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"BaseAction\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"BaseAction\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"Action\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"Action\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"ActionDropdownViewModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ActionDropdownViewModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"AdaptiveActionContainer\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"AdaptiveActionContainer\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"defaultActionBarCss\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"defaultActionBarCss\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"ActionContainer\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ActionContainer\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"DragOrClickHelper\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"DragOrClickHelper\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"Model\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"Model\"]; });\n\n/* harmony import */ var _plugins__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1392914__(/*! ./plugins */ \"./src/entries/plugins.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"bootstrapThemeName\", function() { return _plugins__WEBPACK_IMPORTED_MODULE_1__[\"bootstrapThemeName\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"bootstrapThemeColors\", function() { return _plugins__WEBPACK_IMPORTED_MODULE_1__[\"bootstrapThemeColors\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"bootstrapThemeCssRules\", function() { return _plugins__WEBPACK_IMPORTED_MODULE_1__[\"bootstrapThemeCssRules\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"bootstrapMaterialThemeName\", function() { return _plugins__WEBPACK_IMPORTED_MODULE_1__[\"bootstrapMaterialThemeName\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"bootstrapMaterialThemeColors\", function() { return _plugins__WEBPACK_IMPORTED_MODULE_1__[\"bootstrapMaterialThemeColors\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"bootstrapMaterialThemeCssRules\", function() { return _plugins__WEBPACK_IMPORTED_MODULE_1__[\"bootstrapMaterialThemeCssRules\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"defaultBootstrapCss\", function() { return _plugins__WEBPACK_IMPORTED_MODULE_1__[\"defaultBootstrapCss\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"defaultBootstrapMaterialCss\", function() { return _plugins__WEBPACK_IMPORTED_MODULE_1__[\"defaultBootstrapMaterialCss\"]; });\n\n/* harmony import */ var _chunks_localization__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1392914__(/*! ./chunks/localization */ \"./src/entries/chunks/localization.ts\");\n/* harmony import */ var _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1392914__(/*! ./vue-ui-model */ \"./src/entries/vue-ui-model.ts\");\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"Survey\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"Survey\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"CustomWidget\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"CustomWidget\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"SurveyString\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"SurveyString\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"SurveyStringViewer\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"SurveyStringViewer\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"SurveyStringEditor\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"SurveyStringEditor\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"SurveyElementVue\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"SurveyElementVue\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"SurveyRowElement\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"SurveyRowElement\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"PopupSurvey\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"PopupSurvey\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"SurveyWindow\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"SurveyWindow\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"Page\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"Page\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"Radiogroup\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"Radiogroup\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"RadiogroupItem\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"RadiogroupItem\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"OtherChoice\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"OtherChoice\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"OtherComment\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"OtherComment\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"Rating\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"Rating\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"RatingDropdown\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"RatingDropdown\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"Comment\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"Comment\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"Ranking\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"Ranking\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"RankingItem\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"RankingItem\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"Checkbox\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"Checkbox\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"CheckboxItem\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"CheckboxItem\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"ButtonGroup\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"ButtonGroup\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"ButtonGroupItem\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"ButtonGroupItem\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"QuestionText\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"QuestionText\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"QuestionTextInput\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"QuestionTextInput\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"Boolean\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"Boolean\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"BooleanSwitch\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"BooleanSwitch\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"BooleanCheckbox\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"BooleanCheckbox\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"BooleanRadio\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"BooleanRadio\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"BooleanRadioItem\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"BooleanRadioItem\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"Empty\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"Empty\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"MultipleText\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"MultipleText\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"MultipleTextItem\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"MultipleTextItem\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"Matrix\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"Matrix\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"Dropdown\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"Dropdown\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"DropdownSelect\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"DropdownSelect\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"Tagbox\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"Tagbox\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"File\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"File\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"FilePreview\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"FilePreview\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"FileCleanButton\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"FileCleanButton\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"FileVideo\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"FileVideo\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"FileChooseButton\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"FileChooseButton\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"MatrixCell\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"MatrixCell\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"MatrixHeaderRequired\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"MatrixHeaderRequired\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"MatrixTable\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"MatrixTable\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"MatrixDropdown\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"MatrixDropdown\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"MatrixDynamic\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"MatrixDynamic\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"Errors\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"Errors\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"Html\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"Html\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"Expression\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"Expression\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"ImagePicker\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"ImagePicker\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"ImagePickerItem\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"ImagePickerItem\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"PanelDynamic\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"PanelDynamic\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"PanelDynamicProgress\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"PanelDynamicProgress\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"PanelDynamicProgressV2\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"PanelDynamicProgressV2\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"Progress\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"Progress\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"ProgressButtons\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"ProgressButtons\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"ProgressToc\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"ProgressToc\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"TimerPanel\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"TimerPanel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"Panel\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"Panel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"FlowPanel\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"FlowPanel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"FlowPanelElement\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"FlowPanelElement\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"Row\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"Row\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"ElementHeader\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"ElementHeader\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"QuestionImage\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"QuestionImage\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"SignaturePad\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"SignaturePad\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"SurveyHeader\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"SurveyHeader\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"Custom\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"Custom\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"Composite\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"Composite\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"TitleElement\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"TitleElement\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"TitleContent\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"TitleContent\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"TitleActions\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"TitleActions\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"ActionBarViewModel\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"ActionBarViewModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"SvgIcon\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"SvgIcon\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"PopupPointer\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"PopupPointer\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"PopupContainer\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"PopupContainer\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"Popup\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"Popup\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"List\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"List\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"DropdownOptionItem\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"DropdownOptionItem\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"DropdownComponent\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"DropdownComponent\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"TagboxFilterComponent\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"TagboxFilterComponent\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"TagboxComponent\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"TagboxComponent\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"TagboxItem\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"TagboxItem\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"RatingItem\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"RatingItem\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"RatingItemStar\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"RatingItemStar\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"RatingItemSmiley\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"RatingItemSmiley\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"SurveyQuestionMatrixDynamicRemoveButton\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"SurveyQuestionMatrixDynamicRemoveButton\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"SurveyQuestionMatrixDetailButton\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"SurveyQuestionMatrixDetailButton\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"SurveyQuestionMatrixDynamicDragDropIcon\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"SurveyQuestionMatrixDynamicDragDropIcon\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"PanelDynamicAddBtn\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"PanelDynamicAddBtn\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"PanelDynamicNextBtn\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"PanelDynamicNextBtn\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"PanelDynamicPrevBtn\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"PanelDynamicPrevBtn\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"PanelDynamicProgressText\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"PanelDynamicProgressText\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"PanelDynamicRemoveButton\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"PanelDynamicRemoveButton\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"SurveyNavigationButton\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"SurveyNavigationButton\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"Skeleton\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"Skeleton\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"BrandInfo\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"BrandInfo\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"NotifierComponent\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"NotifierComponent\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"ComponentsContainer\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"ComponentsContainer\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"CharacterCounterComponent\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"CharacterCounterComponent\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"LoadingIndicatorComponent\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"LoadingIndicatorComponent\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"CoverCellViewModel\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"CoverCellViewModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_1392914__.d(__nested_webpack_exports__, \"CoverViewModel\", function() { return _vue_ui_model__WEBPACK_IMPORTED_MODULE_3__[\"CoverViewModel\"]; });\n\n\n// themes settings\n\n// localization\n\n\n\n\n/***/ }),\n\n/***/ \"./src/error.ts\":\n/*!**********************!*\\\n  !*** ./src/error.ts ***!\n  \\**********************/\n/*! exports provided: AnswerRequiredError, OneAnswerRequiredError, RequreNumericError, ExceedSizeError, WebRequestError, WebRequestEmptyError, OtherEmptyError, UploadingFileError, RequiredInAllRowsError, MinRowCountError, KeyDuplicationError, CustomError */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1451110__) {\n\n\"use strict\";\n__nested_webpack_require_1451110__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_1451110__.d(__nested_webpack_exports__, \"AnswerRequiredError\", function() { return AnswerRequiredError; });\n/* harmony export (binding) */ __nested_webpack_require_1451110__.d(__nested_webpack_exports__, \"OneAnswerRequiredError\", function() { return OneAnswerRequiredError; });\n/* harmony export (binding) */ __nested_webpack_require_1451110__.d(__nested_webpack_exports__, \"RequreNumericError\", function() { return RequreNumericError; });\n/* harmony export (binding) */ __nested_webpack_require_1451110__.d(__nested_webpack_exports__, \"ExceedSizeError\", function() { return ExceedSizeError; });\n/* harmony export (binding) */ __nested_webpack_require_1451110__.d(__nested_webpack_exports__, \"WebRequestError\", function() { return WebRequestError; });\n/* harmony export (binding) */ __nested_webpack_require_1451110__.d(__nested_webpack_exports__, \"WebRequestEmptyError\", function() { return WebRequestEmptyError; });\n/* harmony export (binding) */ __nested_webpack_require_1451110__.d(__nested_webpack_exports__, \"OtherEmptyError\", function() { return OtherEmptyError; });\n/* harmony export (binding) */ __nested_webpack_require_1451110__.d(__nested_webpack_exports__, \"UploadingFileError\", function() { return UploadingFileError; });\n/* harmony export (binding) */ __nested_webpack_require_1451110__.d(__nested_webpack_exports__, \"RequiredInAllRowsError\", function() { return RequiredInAllRowsError; });\n/* harmony export (binding) */ __nested_webpack_require_1451110__.d(__nested_webpack_exports__, \"MinRowCountError\", function() { return MinRowCountError; });\n/* harmony export (binding) */ __nested_webpack_require_1451110__.d(__nested_webpack_exports__, \"KeyDuplicationError\", function() { return KeyDuplicationError; });\n/* harmony export (binding) */ __nested_webpack_require_1451110__.d(__nested_webpack_exports__, \"CustomError\", function() { return CustomError; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1451110__(/*! ./surveyStrings */ \"./src/surveyStrings.ts\");\n/* harmony import */ var _survey_error__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1451110__(/*! ./survey-error */ \"./src/survey-error.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n\n\nvar AnswerRequiredError = /** @class */ (function (_super) {\n    __extends(AnswerRequiredError, _super);\n    function AnswerRequiredError(text, errorOwner) {\n        if (text === void 0) { text = null; }\n        if (errorOwner === void 0) { errorOwner = null; }\n        var _this = _super.call(this, text, errorOwner) || this;\n        _this.text = text;\n        return _this;\n    }\n    AnswerRequiredError.prototype.getErrorType = function () {\n        return \"required\";\n    };\n    AnswerRequiredError.prototype.getDefaultText = function () {\n        return this.getLocalizationString(\"requiredError\");\n    };\n    return AnswerRequiredError;\n}(_survey_error__WEBPACK_IMPORTED_MODULE_1__[\"SurveyError\"]));\n\nvar OneAnswerRequiredError = /** @class */ (function (_super) {\n    __extends(OneAnswerRequiredError, _super);\n    function OneAnswerRequiredError(text, errorOwner) {\n        if (text === void 0) { text = null; }\n        if (errorOwner === void 0) { errorOwner = null; }\n        var _this = _super.call(this, text, errorOwner) || this;\n        _this.text = text;\n        return _this;\n    }\n    OneAnswerRequiredError.prototype.getErrorType = function () {\n        return \"requireoneanswer\";\n    };\n    OneAnswerRequiredError.prototype.getDefaultText = function () {\n        return this.getLocalizationString(\"requiredErrorInPanel\");\n    };\n    return OneAnswerRequiredError;\n}(_survey_error__WEBPACK_IMPORTED_MODULE_1__[\"SurveyError\"]));\n\nvar RequreNumericError = /** @class */ (function (_super) {\n    __extends(RequreNumericError, _super);\n    function RequreNumericError(text, errorOwner) {\n        if (text === void 0) { text = null; }\n        if (errorOwner === void 0) { errorOwner = null; }\n        var _this = _super.call(this, text, errorOwner) || this;\n        _this.text = text;\n        return _this;\n    }\n    RequreNumericError.prototype.getErrorType = function () {\n        return \"requirenumeric\";\n    };\n    RequreNumericError.prototype.getDefaultText = function () {\n        return this.getLocalizationString(\"numericError\");\n    };\n    return RequreNumericError;\n}(_survey_error__WEBPACK_IMPORTED_MODULE_1__[\"SurveyError\"]));\n\nvar ExceedSizeError = /** @class */ (function (_super) {\n    __extends(ExceedSizeError, _super);\n    function ExceedSizeError(maxSize, errorOwner) {\n        if (errorOwner === void 0) { errorOwner = null; }\n        var _this = _super.call(this, null, errorOwner) || this;\n        _this.maxSize = maxSize;\n        _this.locText.text = _this.getText();\n        return _this;\n    }\n    ExceedSizeError.prototype.getErrorType = function () {\n        return \"exceedsize\";\n    };\n    ExceedSizeError.prototype.getDefaultText = function () {\n        return _surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"]\n            .getString(\"exceedMaxSize\")[\"format\"](this.getTextSize());\n    };\n    ExceedSizeError.prototype.getTextSize = function () {\n        var sizes = [\"Bytes\", \"KB\", \"MB\", \"GB\", \"TB\"];\n        var fixed = [0, 0, 2, 3, 3];\n        if (this.maxSize === 0) {\n            return \"0 Byte\";\n        }\n        var i = Math.floor(Math.log(this.maxSize) / Math.log(1024));\n        var value = this.maxSize / Math.pow(1024, i);\n        return value.toFixed(fixed[i]) + \" \" + sizes[i];\n    };\n    return ExceedSizeError;\n}(_survey_error__WEBPACK_IMPORTED_MODULE_1__[\"SurveyError\"]));\n\nvar WebRequestError = /** @class */ (function (_super) {\n    __extends(WebRequestError, _super);\n    function WebRequestError(status, response, errorOwner) {\n        if (errorOwner === void 0) { errorOwner = null; }\n        var _this = _super.call(this, null, errorOwner) || this;\n        _this.status = status;\n        _this.response = response;\n        return _this;\n    }\n    WebRequestError.prototype.getErrorType = function () {\n        return \"webrequest\";\n    };\n    WebRequestError.prototype.getDefaultText = function () {\n        var str = this.getLocalizationString(\"urlRequestError\");\n        return !!str ? str[\"format\"](this.status, this.response) : \"\";\n    };\n    return WebRequestError;\n}(_survey_error__WEBPACK_IMPORTED_MODULE_1__[\"SurveyError\"]));\n\nvar WebRequestEmptyError = /** @class */ (function (_super) {\n    __extends(WebRequestEmptyError, _super);\n    function WebRequestEmptyError(text, errorOwner) {\n        if (errorOwner === void 0) { errorOwner = null; }\n        var _this = _super.call(this, text, errorOwner) || this;\n        _this.text = text;\n        return _this;\n    }\n    WebRequestEmptyError.prototype.getErrorType = function () {\n        return \"webrequestempty\";\n    };\n    WebRequestEmptyError.prototype.getDefaultText = function () {\n        return this.getLocalizationString(\"urlGetChoicesError\");\n    };\n    return WebRequestEmptyError;\n}(_survey_error__WEBPACK_IMPORTED_MODULE_1__[\"SurveyError\"]));\n\nvar OtherEmptyError = /** @class */ (function (_super) {\n    __extends(OtherEmptyError, _super);\n    function OtherEmptyError(text, errorOwner) {\n        if (errorOwner === void 0) { errorOwner = null; }\n        var _this = _super.call(this, text, errorOwner) || this;\n        _this.text = text;\n        return _this;\n    }\n    OtherEmptyError.prototype.getErrorType = function () {\n        return \"otherempty\";\n    };\n    OtherEmptyError.prototype.getDefaultText = function () {\n        return this.getLocalizationString(\"otherRequiredError\");\n    };\n    return OtherEmptyError;\n}(_survey_error__WEBPACK_IMPORTED_MODULE_1__[\"SurveyError\"]));\n\nvar UploadingFileError = /** @class */ (function (_super) {\n    __extends(UploadingFileError, _super);\n    function UploadingFileError(text, errorOwner) {\n        if (errorOwner === void 0) { errorOwner = null; }\n        var _this = _super.call(this, text, errorOwner) || this;\n        _this.text = text;\n        return _this;\n    }\n    UploadingFileError.prototype.getErrorType = function () {\n        return \"uploadingfile\";\n    };\n    UploadingFileError.prototype.getDefaultText = function () {\n        return this.getLocalizationString(\"uploadingFile\");\n    };\n    return UploadingFileError;\n}(_survey_error__WEBPACK_IMPORTED_MODULE_1__[\"SurveyError\"]));\n\nvar RequiredInAllRowsError = /** @class */ (function (_super) {\n    __extends(RequiredInAllRowsError, _super);\n    function RequiredInAllRowsError(text, errorOwner) {\n        if (errorOwner === void 0) { errorOwner = null; }\n        var _this = _super.call(this, text, errorOwner) || this;\n        _this.text = text;\n        return _this;\n    }\n    RequiredInAllRowsError.prototype.getErrorType = function () {\n        return \"requiredinallrowserror\";\n    };\n    RequiredInAllRowsError.prototype.getDefaultText = function () {\n        return this.getLocalizationString(\"requiredInAllRowsError\");\n    };\n    return RequiredInAllRowsError;\n}(_survey_error__WEBPACK_IMPORTED_MODULE_1__[\"SurveyError\"]));\n\nvar MinRowCountError = /** @class */ (function (_super) {\n    __extends(MinRowCountError, _super);\n    function MinRowCountError(minRowCount, errorOwner) {\n        if (errorOwner === void 0) { errorOwner = null; }\n        var _this = _super.call(this, null, errorOwner) || this;\n        _this.minRowCount = minRowCount;\n        return _this;\n    }\n    MinRowCountError.prototype.getErrorType = function () {\n        return \"minrowcounterror\";\n    };\n    MinRowCountError.prototype.getDefaultText = function () {\n        return _surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"]\n            .getString(\"minRowCountError\")[\"format\"](this.minRowCount);\n    };\n    return MinRowCountError;\n}(_survey_error__WEBPACK_IMPORTED_MODULE_1__[\"SurveyError\"]));\n\nvar KeyDuplicationError = /** @class */ (function (_super) {\n    __extends(KeyDuplicationError, _super);\n    function KeyDuplicationError(text, errorOwner) {\n        if (errorOwner === void 0) { errorOwner = null; }\n        var _this = _super.call(this, text, errorOwner) || this;\n        _this.text = text;\n        return _this;\n    }\n    KeyDuplicationError.prototype.getErrorType = function () {\n        return \"keyduplicationerror\";\n    };\n    KeyDuplicationError.prototype.getDefaultText = function () {\n        return this.getLocalizationString(\"keyDuplicationError\");\n    };\n    return KeyDuplicationError;\n}(_survey_error__WEBPACK_IMPORTED_MODULE_1__[\"SurveyError\"]));\n\nvar CustomError = /** @class */ (function (_super) {\n    __extends(CustomError, _super);\n    function CustomError(text, errorOwner) {\n        if (errorOwner === void 0) { errorOwner = null; }\n        var _this = _super.call(this, text, errorOwner) || this;\n        _this.text = text;\n        return _this;\n    }\n    CustomError.prototype.getErrorType = function () {\n        return \"custom\";\n    };\n    return CustomError;\n}(_survey_error__WEBPACK_IMPORTED_MODULE_1__[\"SurveyError\"]));\n\n\n\n/***/ }),\n\n/***/ \"./src/expressionItems.ts\":\n/*!********************************!*\\\n  !*** ./src/expressionItems.ts ***!\n  \\********************************/\n/*! exports provided: ExpressionItem, HtmlConditionItem, UrlConditionItem */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1462926__) {\n\n\"use strict\";\n__nested_webpack_require_1462926__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_1462926__.d(__nested_webpack_exports__, \"ExpressionItem\", function() { return ExpressionItem; });\n/* harmony export (binding) */ __nested_webpack_require_1462926__.d(__nested_webpack_exports__, \"HtmlConditionItem\", function() { return HtmlConditionItem; });\n/* harmony export (binding) */ __nested_webpack_require_1462926__.d(__nested_webpack_exports__, \"UrlConditionItem\", function() { return UrlConditionItem; });\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1462926__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1462926__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _conditions__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1462926__(/*! ./conditions */ \"./src/conditions.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n\n\n\n/**\n * Base class for HtmlConditionItem and UrlConditionItem classes.\n */\nvar ExpressionItem = /** @class */ (function (_super) {\n    __extends(ExpressionItem, _super);\n    function ExpressionItem(expression) {\n        if (expression === void 0) { expression = null; }\n        var _this = _super.call(this) || this;\n        _this.expression = expression;\n        return _this;\n    }\n    ExpressionItem.prototype.getType = function () {\n        return \"expressionitem\";\n    };\n    ExpressionItem.prototype.runCondition = function (values, properties) {\n        if (!this.expression)\n            return false;\n        return new _conditions__WEBPACK_IMPORTED_MODULE_2__[\"ConditionRunner\"](this.expression).run(values, properties);\n    };\n    Object.defineProperty(ExpressionItem.prototype, \"expression\", {\n        /**\n         * The expression property. If this expression returns true, then survey will use html property to show on complete page.\n         */\n        get: function () {\n            return this.getPropertyValue(\"expression\", \"\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"expression\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(ExpressionItem.prototype, \"locHtml\", {\n        get: function () {\n            return this.getLocalizableString(\"html\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    ExpressionItem.prototype.getLocale = function () {\n        return !!this.locOwner ? this.locOwner.getLocale() : \"\";\n    };\n    ExpressionItem.prototype.getMarkdownHtml = function (text, name) {\n        return !!this.locOwner ? this.locOwner.getMarkdownHtml(text, name) : undefined;\n    };\n    ExpressionItem.prototype.getRenderer = function (name) {\n        return !!this.locOwner ? this.locOwner.getRenderer(name) : null;\n    };\n    ExpressionItem.prototype.getRendererContext = function (locStr) {\n        return !!this.locOwner ? this.locOwner.getRendererContext(locStr) : locStr;\n    };\n    ExpressionItem.prototype.getProcessedText = function (text) {\n        return this.locOwner ? this.locOwner.getProcessedText(text) : text;\n    };\n    ExpressionItem.prototype.getSurvey = function (isLive) {\n        if (isLive === void 0) { isLive = false; }\n        return this.locOwner;\n    };\n    return ExpressionItem;\n}(_base__WEBPACK_IMPORTED_MODULE_1__[\"Base\"]));\n\n/**\n * A class that contains expression and html propeties. It uses in survey.completedHtmlOnCondition array.\n * If the expression returns true then html of this item uses instead of survey.completedHtml property\n * @see SurveyModel.completedHtmlOnCondition\n * @see SurveyModel.completedHtml\n */\nvar HtmlConditionItem = /** @class */ (function (_super) {\n    __extends(HtmlConditionItem, _super);\n    function HtmlConditionItem(expression, html) {\n        if (expression === void 0) { expression = null; }\n        if (html === void 0) { html = null; }\n        var _this = _super.call(this, expression) || this;\n        _this.createLocalizableString(\"html\", _this);\n        _this.html = html;\n        return _this;\n    }\n    HtmlConditionItem.prototype.getType = function () {\n        return \"htmlconditionitem\";\n    };\n    Object.defineProperty(HtmlConditionItem.prototype, \"html\", {\n        /**\n         * The html that shows on completed ('Thank you') page. The expression should return true\n         * @see expression\n         */\n        get: function () {\n            return this.getLocalizableStringText(\"html\");\n        },\n        set: function (value) {\n            this.setLocalizableStringText(\"html\", value);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(HtmlConditionItem.prototype, \"locHtml\", {\n        get: function () {\n            return this.getLocalizableString(\"html\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    return HtmlConditionItem;\n}(ExpressionItem));\n\n/**\n * A class that contains expression and url propeties. It uses in survey.navigateToUrlOnCondition array.\n * If the expression returns true then url of this item uses instead of survey.navigateToUrl property\n * @see SurveyModel.navigateToUrl\n */\nvar UrlConditionItem = /** @class */ (function (_super) {\n    __extends(UrlConditionItem, _super);\n    function UrlConditionItem(expression, url) {\n        if (expression === void 0) { expression = null; }\n        if (url === void 0) { url = null; }\n        var _this = _super.call(this, expression) || this;\n        _this.createLocalizableString(\"url\", _this);\n        _this.url = url;\n        return _this;\n    }\n    UrlConditionItem.prototype.getType = function () {\n        return \"urlconditionitem\";\n    };\n    Object.defineProperty(UrlConditionItem.prototype, \"url\", {\n        /**\n         * The url that survey navigates to on completing the survey. The expression should return true\n         * @see expression\n         */\n        get: function () {\n            return this.getLocalizableStringText(\"url\");\n        },\n        set: function (value) {\n            this.setLocalizableStringText(\"url\", value);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(UrlConditionItem.prototype, \"locUrl\", {\n        get: function () {\n            return this.getLocalizableString(\"url\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    return UrlConditionItem;\n}(ExpressionItem));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"expressionitem\", [\"expression:condition\"], function () {\n    return new ExpressionItem();\n}, \"base\");\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"htmlconditionitem\", [{ name: \"html:html\", serializationProperty: \"locHtml\" }], function () {\n    return new HtmlConditionItem();\n}, \"expressionitem\");\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"urlconditionitem\", [{ name: \"url:string\", serializationProperty: \"locUrl\" }], function () {\n    return new UrlConditionItem();\n}, \"expressionitem\");\n\n\n/***/ }),\n\n/***/ \"./src/expressions/expressionParser.ts\":\n/*!*********************************************!*\\\n  !*** ./src/expressions/expressionParser.ts ***!\n  \\*********************************************/\n/*! exports provided: SyntaxError, parse */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1470937__) {\n\n\"use strict\";\n__nested_webpack_require_1470937__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_1470937__.d(__nested_webpack_exports__, \"SyntaxError\", function() { return SyntaxError; });\n/* harmony export (binding) */ __nested_webpack_require_1470937__.d(__nested_webpack_exports__, \"parse\", function() { return parse; });\n/* harmony import */ var _expressions__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1470937__(/*! ./expressions */ \"./src/expressions/expressions.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/* eslint-disable */\n\n// Generated by PEG.js v. 0.10.0 (ts-pegjs plugin v. 0.3.1 )\n//\n// https://pegjs.org/   https://github.com/metadevpro/ts-pegjs\n\"use strict\";\nvar SyntaxError = /** @class */ (function (_super) {\n    __extends(SyntaxError, _super);\n    function SyntaxError(message, expected, found, location) {\n        var _this = _super.call(this) || this;\n        _this.message = message;\n        _this.expected = expected;\n        _this.found = found;\n        _this.location = location;\n        _this.name = \"SyntaxError\";\n        if (typeof Error.captureStackTrace === \"function\") {\n            Error.captureStackTrace(_this, SyntaxError);\n        }\n        return _this;\n    }\n    SyntaxError.buildMessage = function (expected, found) {\n        function hex(ch) {\n            return ch.charCodeAt(0).toString(16).toUpperCase();\n        }\n        function literalEscape(s) {\n            return s\n                .replace(/\\\\/g, \"\\\\\\\\\")\n                .replace(/\"/g, \"\\\\\\\"\")\n                .replace(/\\0/g, \"\\\\0\")\n                .replace(/\\t/g, \"\\\\t\")\n                .replace(/\\n/g, \"\\\\n\")\n                .replace(/\\r/g, \"\\\\r\")\n                .replace(/[\\x00-\\x0F]/g, function (ch) { return \"\\\\x0\" + hex(ch); })\n                .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function (ch) { return \"\\\\x\" + hex(ch); });\n        }\n        function classEscape(s) {\n            return s\n                .replace(/\\\\/g, \"\\\\\\\\\")\n                .replace(/\\]/g, \"\\\\]\")\n                .replace(/\\^/g, \"\\\\^\")\n                .replace(/-/g, \"\\\\-\")\n                .replace(/\\0/g, \"\\\\0\")\n                .replace(/\\t/g, \"\\\\t\")\n                .replace(/\\n/g, \"\\\\n\")\n                .replace(/\\r/g, \"\\\\r\")\n                .replace(/[\\x00-\\x0F]/g, function (ch) { return \"\\\\x0\" + hex(ch); })\n                .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function (ch) { return \"\\\\x\" + hex(ch); });\n        }\n        function describeExpectation(expectation) {\n            switch (expectation.type) {\n                case \"literal\":\n                    return \"\\\"\" + literalEscape(expectation.text) + \"\\\"\";\n                case \"class\":\n                    var escapedParts = expectation.parts.map(function (part) {\n                        return Array.isArray(part)\n                            ? classEscape(part[0]) + \"-\" + classEscape(part[1])\n                            : classEscape(part);\n                    });\n                    return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts + \"]\";\n                case \"any\":\n                    return \"any character\";\n                case \"end\":\n                    return \"end of input\";\n                case \"other\":\n                    return expectation.description;\n            }\n        }\n        function describeExpected(expected1) {\n            var descriptions = expected1.map(describeExpectation);\n            var i;\n            var j;\n            descriptions.sort();\n            if (descriptions.length > 0) {\n                for (i = 1, j = 1; i < descriptions.length; i++) {\n                    if (descriptions[i - 1] !== descriptions[i]) {\n                        descriptions[j] = descriptions[i];\n                        j++;\n                    }\n                }\n                descriptions.length = j;\n            }\n            switch (descriptions.length) {\n                case 1:\n                    return descriptions[0];\n                case 2:\n                    return descriptions[0] + \" or \" + descriptions[1];\n                default:\n                    return descriptions.slice(0, -1).join(\", \")\n                        + \", or \"\n                        + descriptions[descriptions.length - 1];\n            }\n        }\n        function describeFound(found1) {\n            return found1 ? \"\\\"\" + literalEscape(found1) + \"\\\"\" : \"end of input\";\n        }\n        return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n    };\n    return SyntaxError;\n}(Error));\n\nfunction peg$parse(input, options) {\n    options = options !== undefined ? options : {};\n    var peg$FAILED = {};\n    var peg$startRuleFunctions = { Expression: peg$parseExpression };\n    var peg$startRuleFunction = peg$parseExpression;\n    var peg$c0 = function (head, tail) {\n        return buildBinaryOperand(head, tail, true);\n    };\n    var peg$c1 = \"||\";\n    var peg$c2 = peg$literalExpectation(\"||\", false);\n    var peg$c3 = \"or\";\n    var peg$c4 = peg$literalExpectation(\"or\", true);\n    var peg$c5 = function () { return \"or\"; };\n    var peg$c6 = \"&&\";\n    var peg$c7 = peg$literalExpectation(\"&&\", false);\n    var peg$c8 = \"and\";\n    var peg$c9 = peg$literalExpectation(\"and\", true);\n    var peg$c10 = function () { return \"and\"; };\n    var peg$c11 = function (head, tail) {\n        return buildBinaryOperand(head, tail);\n    };\n    var peg$c12 = \"<=\";\n    var peg$c13 = peg$literalExpectation(\"<=\", false);\n    var peg$c14 = \"lessorequal\";\n    var peg$c15 = peg$literalExpectation(\"lessorequal\", true);\n    var peg$c16 = function () { return \"lessorequal\"; };\n    var peg$c17 = \">=\";\n    var peg$c18 = peg$literalExpectation(\">=\", false);\n    var peg$c19 = \"greaterorequal\";\n    var peg$c20 = peg$literalExpectation(\"greaterorequal\", true);\n    var peg$c21 = function () { return \"greaterorequal\"; };\n    var peg$c22 = \"==\";\n    var peg$c23 = peg$literalExpectation(\"==\", false);\n    var peg$c24 = \"equal\";\n    var peg$c25 = peg$literalExpectation(\"equal\", true);\n    var peg$c26 = function () { return \"equal\"; };\n    var peg$c27 = \"=\";\n    var peg$c28 = peg$literalExpectation(\"=\", false);\n    var peg$c29 = \"!=\";\n    var peg$c30 = peg$literalExpectation(\"!=\", false);\n    var peg$c31 = \"notequal\";\n    var peg$c32 = peg$literalExpectation(\"notequal\", true);\n    var peg$c33 = function () { return \"notequal\"; };\n    var peg$c34 = \"<\";\n    var peg$c35 = peg$literalExpectation(\"<\", false);\n    var peg$c36 = \"less\";\n    var peg$c37 = peg$literalExpectation(\"less\", true);\n    var peg$c38 = function () { return \"less\"; };\n    var peg$c39 = \">\";\n    var peg$c40 = peg$literalExpectation(\">\", false);\n    var peg$c41 = \"greater\";\n    var peg$c42 = peg$literalExpectation(\"greater\", true);\n    var peg$c43 = function () { return \"greater\"; };\n    var peg$c44 = \"+\";\n    var peg$c45 = peg$literalExpectation(\"+\", false);\n    var peg$c46 = function () { return \"plus\"; };\n    var peg$c47 = \"-\";\n    var peg$c48 = peg$literalExpectation(\"-\", false);\n    var peg$c49 = function () { return \"minus\"; };\n    var peg$c50 = \"*\";\n    var peg$c51 = peg$literalExpectation(\"*\", false);\n    var peg$c52 = function () { return \"mul\"; };\n    var peg$c53 = \"/\";\n    var peg$c54 = peg$literalExpectation(\"/\", false);\n    var peg$c55 = function () { return \"div\"; };\n    var peg$c56 = \"%\";\n    var peg$c57 = peg$literalExpectation(\"%\", false);\n    var peg$c58 = function () { return \"mod\"; };\n    var peg$c59 = \"^\";\n    var peg$c60 = peg$literalExpectation(\"^\", false);\n    var peg$c61 = \"power\";\n    var peg$c62 = peg$literalExpectation(\"power\", true);\n    var peg$c63 = function () { return \"power\"; };\n    var peg$c64 = \"*=\";\n    var peg$c65 = peg$literalExpectation(\"*=\", false);\n    var peg$c66 = \"contains\";\n    var peg$c67 = peg$literalExpectation(\"contains\", true);\n    var peg$c68 = \"contain\";\n    var peg$c69 = peg$literalExpectation(\"contain\", true);\n    var peg$c70 = function () { return \"contains\"; };\n    var peg$c71 = \"notcontains\";\n    var peg$c72 = peg$literalExpectation(\"notcontains\", true);\n    var peg$c73 = \"notcontain\";\n    var peg$c74 = peg$literalExpectation(\"notcontain\", true);\n    var peg$c75 = function () { return \"notcontains\"; };\n    var peg$c76 = \"anyof\";\n    var peg$c77 = peg$literalExpectation(\"anyof\", true);\n    var peg$c78 = function () { return \"anyof\"; };\n    var peg$c79 = \"allof\";\n    var peg$c80 = peg$literalExpectation(\"allof\", true);\n    var peg$c81 = function () { return \"allof\"; };\n    var peg$c82 = \"(\";\n    var peg$c83 = peg$literalExpectation(\"(\", false);\n    var peg$c84 = \")\";\n    var peg$c85 = peg$literalExpectation(\")\", false);\n    var peg$c86 = function (expr) { return expr; };\n    var peg$c87 = function (name, params) { return new _expressions__WEBPACK_IMPORTED_MODULE_0__[\"FunctionOperand\"](name, params); };\n    var peg$c88 = \"!\";\n    var peg$c89 = peg$literalExpectation(\"!\", false);\n    var peg$c90 = \"negate\";\n    var peg$c91 = peg$literalExpectation(\"negate\", true);\n    var peg$c92 = function (expr) { return new _expressions__WEBPACK_IMPORTED_MODULE_0__[\"UnaryOperand\"](expr, \"negate\"); };\n    var peg$c93 = function (expr, op) { return new _expressions__WEBPACK_IMPORTED_MODULE_0__[\"UnaryOperand\"](expr, op); };\n    var peg$c94 = \"empty\";\n    var peg$c95 = peg$literalExpectation(\"empty\", true);\n    var peg$c96 = function () { return \"empty\"; };\n    var peg$c97 = \"notempty\";\n    var peg$c98 = peg$literalExpectation(\"notempty\", true);\n    var peg$c99 = function () { return \"notempty\"; };\n    var peg$c100 = \"undefined\";\n    var peg$c101 = peg$literalExpectation(\"undefined\", false);\n    var peg$c102 = \"null\";\n    var peg$c103 = peg$literalExpectation(\"null\", false);\n    var peg$c104 = function () { return null; };\n    var peg$c105 = function (value) { return new _expressions__WEBPACK_IMPORTED_MODULE_0__[\"Const\"](value); };\n    var peg$c106 = \"{\";\n    var peg$c107 = peg$literalExpectation(\"{\", false);\n    var peg$c108 = \"}\";\n    var peg$c109 = peg$literalExpectation(\"}\", false);\n    var peg$c110 = function (value) { return new _expressions__WEBPACK_IMPORTED_MODULE_0__[\"Variable\"](value); };\n    var peg$c111 = function (value) { return value; };\n    var peg$c112 = \"''\";\n    var peg$c113 = peg$literalExpectation(\"''\", false);\n    var peg$c114 = function () { return \"\"; };\n    var peg$c115 = \"\\\"\\\"\";\n    var peg$c116 = peg$literalExpectation(\"\\\"\\\"\", false);\n    var peg$c117 = \"'\";\n    var peg$c118 = peg$literalExpectation(\"'\", false);\n    var peg$c119 = function (value) { return \"'\" + value + \"'\"; };\n    var peg$c120 = \"\\\"\";\n    var peg$c121 = peg$literalExpectation(\"\\\"\", false);\n    var peg$c122 = \"[\";\n    var peg$c123 = peg$literalExpectation(\"[\", false);\n    var peg$c124 = \"]\";\n    var peg$c125 = peg$literalExpectation(\"]\", false);\n    var peg$c126 = function (sequence) { return sequence; };\n    var peg$c127 = \",\";\n    var peg$c128 = peg$literalExpectation(\",\", false);\n    var peg$c129 = function (expr, tail) {\n        if (expr == null)\n            return new _expressions__WEBPACK_IMPORTED_MODULE_0__[\"ArrayOperand\"]([]);\n        var array = [expr];\n        if (Array.isArray(tail)) {\n            var flatten = flattenArray(tail);\n            for (var i = 3; i < flatten.length; i += 4) {\n                array.push(flatten[i]);\n            }\n        }\n        return new _expressions__WEBPACK_IMPORTED_MODULE_0__[\"ArrayOperand\"](array);\n    };\n    var peg$c130 = \"true\";\n    var peg$c131 = peg$literalExpectation(\"true\", true);\n    var peg$c132 = function () { return true; };\n    var peg$c133 = \"false\";\n    var peg$c134 = peg$literalExpectation(\"false\", true);\n    var peg$c135 = function () { return false; };\n    var peg$c136 = \"0x\";\n    var peg$c137 = peg$literalExpectation(\"0x\", false);\n    var peg$c138 = function () { return parseInt(text(), 16); };\n    var peg$c139 = /^[\\-]/;\n    var peg$c140 = peg$classExpectation([\"-\"], false, false);\n    var peg$c141 = function (sign, num) { return sign == null ? num : -num; };\n    var peg$c142 = \".\";\n    var peg$c143 = peg$literalExpectation(\".\", false);\n    var peg$c144 = function () { return parseFloat(text()); };\n    var peg$c145 = function () { return parseInt(text(), 10); };\n    var peg$c146 = \"0\";\n    var peg$c147 = peg$literalExpectation(\"0\", false);\n    var peg$c148 = function () { return 0; };\n    var peg$c149 = function (chars) { return chars.join(\"\"); };\n    var peg$c150 = \"\\\\'\";\n    var peg$c151 = peg$literalExpectation(\"\\\\'\", false);\n    var peg$c152 = function () { return \"'\"; };\n    var peg$c153 = \"\\\\\\\"\";\n    var peg$c154 = peg$literalExpectation(\"\\\\\\\"\", false);\n    var peg$c155 = function () { return \"\\\"\"; };\n    var peg$c156 = /^[^\"']/;\n    var peg$c157 = peg$classExpectation([\"\\\"\", \"'\"], true, false);\n    var peg$c158 = function () { return text(); };\n    var peg$c159 = /^[^{}]/;\n    var peg$c160 = peg$classExpectation([\"{\", \"}\"], true, false);\n    var peg$c161 = /^[0-9]/;\n    var peg$c162 = peg$classExpectation([[\"0\", \"9\"]], false, false);\n    var peg$c163 = /^[1-9]/;\n    var peg$c164 = peg$classExpectation([[\"1\", \"9\"]], false, false);\n    var peg$c165 = /^[a-zA-Z_]/;\n    var peg$c166 = peg$classExpectation([[\"a\", \"z\"], [\"A\", \"Z\"], \"_\"], false, false);\n    var peg$c167 = peg$otherExpectation(\"whitespace\");\n    var peg$c168 = /^[ \\t\\n\\r]/;\n    var peg$c169 = peg$classExpectation([\" \", \"\\t\", \"\\n\", \"\\r\"], false, false);\n    var peg$currPos = 0;\n    var peg$savedPos = 0;\n    var peg$posDetailsCache = [{ line: 1, column: 1 }];\n    var peg$maxFailPos = 0;\n    var peg$maxFailExpected = [];\n    var peg$silentFails = 0;\n    var peg$resultsCache = {};\n    var peg$result;\n    if (options.startRule !== undefined) {\n        if (!(options.startRule in peg$startRuleFunctions)) {\n            throw new Error(\"Can't start parsing from rule \\\"\" + options.startRule + \"\\\".\");\n        }\n        peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n    }\n    function text() {\n        return input.substring(peg$savedPos, peg$currPos);\n    }\n    function location() {\n        return peg$computeLocation(peg$savedPos, peg$currPos);\n    }\n    function expected(description, location1) {\n        location1 = location1 !== undefined\n            ? location1\n            : peg$computeLocation(peg$savedPos, peg$currPos);\n        throw peg$buildStructuredError([peg$otherExpectation(description)], input.substring(peg$savedPos, peg$currPos), location1);\n    }\n    function error(message, location1) {\n        location1 = location1 !== undefined\n            ? location1\n            : peg$computeLocation(peg$savedPos, peg$currPos);\n        throw peg$buildSimpleError(message, location1);\n    }\n    function peg$literalExpectation(text1, ignoreCase) {\n        return { type: \"literal\", text: text1, ignoreCase: ignoreCase };\n    }\n    function peg$classExpectation(parts, inverted, ignoreCase) {\n        return { type: \"class\", parts: parts, inverted: inverted, ignoreCase: ignoreCase };\n    }\n    function peg$anyExpectation() {\n        return { type: \"any\" };\n    }\n    function peg$endExpectation() {\n        return { type: \"end\" };\n    }\n    function peg$otherExpectation(description) {\n        return { type: \"other\", description: description };\n    }\n    function peg$computePosDetails(pos) {\n        var details = peg$posDetailsCache[pos];\n        var p;\n        if (details) {\n            return details;\n        }\n        else {\n            p = pos - 1;\n            while (!peg$posDetailsCache[p]) {\n                p--;\n            }\n            details = peg$posDetailsCache[p];\n            details = {\n                line: details.line,\n                column: details.column\n            };\n            while (p < pos) {\n                if (input.charCodeAt(p) === 10) {\n                    details.line++;\n                    details.column = 1;\n                }\n                else {\n                    details.column++;\n                }\n                p++;\n            }\n            peg$posDetailsCache[pos] = details;\n            return details;\n        }\n    }\n    function peg$computeLocation(startPos, endPos) {\n        var startPosDetails = peg$computePosDetails(startPos);\n        var endPosDetails = peg$computePosDetails(endPos);\n        return {\n            start: {\n                offset: startPos,\n                line: startPosDetails.line,\n                column: startPosDetails.column\n            },\n            end: {\n                offset: endPos,\n                line: endPosDetails.line,\n                column: endPosDetails.column\n            }\n        };\n    }\n    function peg$fail(expected1) {\n        if (peg$currPos < peg$maxFailPos) {\n            return;\n        }\n        if (peg$currPos > peg$maxFailPos) {\n            peg$maxFailPos = peg$currPos;\n            peg$maxFailExpected = [];\n        }\n        peg$maxFailExpected.push(expected1);\n    }\n    function peg$buildSimpleError(message, location1) {\n        return new SyntaxError(message, [], \"\", location1);\n    }\n    function peg$buildStructuredError(expected1, found, location1) {\n        return new SyntaxError(SyntaxError.buildMessage(expected1, found), expected1, found, location1);\n    }\n    function peg$parseExpression() {\n        var s0, s1, s2, s3, s4, s5, s6, s7, s8;\n        var key = peg$currPos * 34 + 0;\n        var cached = peg$resultsCache[key];\n        if (cached) {\n            peg$currPos = cached.nextPos;\n            return cached.result;\n        }\n        s0 = peg$currPos;\n        s1 = peg$parse_();\n        if (s1 !== peg$FAILED) {\n            s2 = peg$parseLogicOr();\n            if (s2 !== peg$FAILED) {\n                s3 = [];\n                s4 = peg$currPos;\n                s5 = peg$parse_();\n                if (s5 !== peg$FAILED) {\n                    s6 = peg$parseOrSign();\n                    if (s6 !== peg$FAILED) {\n                        s7 = peg$parse_();\n                        if (s7 !== peg$FAILED) {\n                            s8 = peg$parseLogicOr();\n                            if (s8 !== peg$FAILED) {\n                                s5 = [s5, s6, s7, s8];\n                                s4 = s5;\n                            }\n                            else {\n                                peg$currPos = s4;\n                                s4 = peg$FAILED;\n                            }\n                        }\n                        else {\n                            peg$currPos = s4;\n                            s4 = peg$FAILED;\n                        }\n                    }\n                    else {\n                        peg$currPos = s4;\n                        s4 = peg$FAILED;\n                    }\n                }\n                else {\n                    peg$currPos = s4;\n                    s4 = peg$FAILED;\n                }\n                while (s4 !== peg$FAILED) {\n                    s3.push(s4);\n                    s4 = peg$currPos;\n                    s5 = peg$parse_();\n                    if (s5 !== peg$FAILED) {\n                        s6 = peg$parseOrSign();\n                        if (s6 !== peg$FAILED) {\n                            s7 = peg$parse_();\n                            if (s7 !== peg$FAILED) {\n                                s8 = peg$parseLogicOr();\n                                if (s8 !== peg$FAILED) {\n                                    s5 = [s5, s6, s7, s8];\n                                    s4 = s5;\n                                }\n                                else {\n                                    peg$currPos = s4;\n                                    s4 = peg$FAILED;\n                                }\n                            }\n                            else {\n                                peg$currPos = s4;\n                                s4 = peg$FAILED;\n                            }\n                        }\n                        else {\n                            peg$currPos = s4;\n                            s4 = peg$FAILED;\n                        }\n                    }\n                    else {\n                        peg$currPos = s4;\n                        s4 = peg$FAILED;\n                    }\n                }\n                if (s3 !== peg$FAILED) {\n                    s4 = peg$parse_();\n                    if (s4 !== peg$FAILED) {\n                        peg$savedPos = s0;\n                        s1 = peg$c0(s2, s3);\n                        s0 = s1;\n                    }\n                    else {\n                        peg$currPos = s0;\n                        s0 = peg$FAILED;\n                    }\n                }\n                else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                }\n            }\n            else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n            }\n        }\n        else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n        }\n        peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n        return s0;\n    }\n    function peg$parseOrSign() {\n        var s0, s1;\n        var key = peg$currPos * 34 + 1;\n        var cached = peg$resultsCache[key];\n        if (cached) {\n            peg$currPos = cached.nextPos;\n            return cached.result;\n        }\n        s0 = peg$currPos;\n        if (input.substr(peg$currPos, 2) === peg$c1) {\n            s1 = peg$c1;\n            peg$currPos += 2;\n        }\n        else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c2);\n            }\n        }\n        if (s1 === peg$FAILED) {\n            if (input.substr(peg$currPos, 2).toLowerCase() === peg$c3) {\n                s1 = input.substr(peg$currPos, 2);\n                peg$currPos += 2;\n            }\n            else {\n                s1 = peg$FAILED;\n                if (peg$silentFails === 0) {\n                    peg$fail(peg$c4);\n                }\n            }\n        }\n        if (s1 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c5();\n        }\n        s0 = s1;\n        peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n        return s0;\n    }\n    function peg$parseLogicOr() {\n        var s0, s1, s2, s3, s4, s5, s6, s7;\n        var key = peg$currPos * 34 + 2;\n        var cached = peg$resultsCache[key];\n        if (cached) {\n            peg$currPos = cached.nextPos;\n            return cached.result;\n        }\n        s0 = peg$currPos;\n        s1 = peg$parseLogicAnd();\n        if (s1 !== peg$FAILED) {\n            s2 = [];\n            s3 = peg$currPos;\n            s4 = peg$parse_();\n            if (s4 !== peg$FAILED) {\n                s5 = peg$parseAndSign();\n                if (s5 !== peg$FAILED) {\n                    s6 = peg$parse_();\n                    if (s6 !== peg$FAILED) {\n                        s7 = peg$parseLogicAnd();\n                        if (s7 !== peg$FAILED) {\n                            s4 = [s4, s5, s6, s7];\n                            s3 = s4;\n                        }\n                        else {\n                            peg$currPos = s3;\n                            s3 = peg$FAILED;\n                        }\n                    }\n                    else {\n                        peg$currPos = s3;\n                        s3 = peg$FAILED;\n                    }\n                }\n                else {\n                    peg$currPos = s3;\n                    s3 = peg$FAILED;\n                }\n            }\n            else {\n                peg$currPos = s3;\n                s3 = peg$FAILED;\n            }\n            while (s3 !== peg$FAILED) {\n                s2.push(s3);\n                s3 = peg$currPos;\n                s4 = peg$parse_();\n                if (s4 !== peg$FAILED) {\n                    s5 = peg$parseAndSign();\n                    if (s5 !== peg$FAILED) {\n                        s6 = peg$parse_();\n                        if (s6 !== peg$FAILED) {\n                            s7 = peg$parseLogicAnd();\n                            if (s7 !== peg$FAILED) {\n                                s4 = [s4, s5, s6, s7];\n                                s3 = s4;\n                            }\n                            else {\n                                peg$currPos = s3;\n                                s3 = peg$FAILED;\n                            }\n                        }\n                        else {\n                            peg$currPos = s3;\n                            s3 = peg$FAILED;\n                        }\n                    }\n                    else {\n                        peg$currPos = s3;\n                        s3 = peg$FAILED;\n                    }\n                }\n                else {\n                    peg$currPos = s3;\n                    s3 = peg$FAILED;\n                }\n            }\n            if (s2 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c0(s1, s2);\n                s0 = s1;\n            }\n            else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n            }\n        }\n        else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n        }\n        peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n        return s0;\n    }\n    function peg$parseAndSign() {\n        var s0, s1;\n        var key = peg$currPos * 34 + 3;\n        var cached = peg$resultsCache[key];\n        if (cached) {\n            peg$currPos = cached.nextPos;\n            return cached.result;\n        }\n        s0 = peg$currPos;\n        if (input.substr(peg$currPos, 2) === peg$c6) {\n            s1 = peg$c6;\n            peg$currPos += 2;\n        }\n        else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c7);\n            }\n        }\n        if (s1 === peg$FAILED) {\n            if (input.substr(peg$currPos, 3).toLowerCase() === peg$c8) {\n                s1 = input.substr(peg$currPos, 3);\n                peg$currPos += 3;\n            }\n            else {\n                s1 = peg$FAILED;\n                if (peg$silentFails === 0) {\n                    peg$fail(peg$c9);\n                }\n            }\n        }\n        if (s1 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c10();\n        }\n        s0 = s1;\n        peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n        return s0;\n    }\n    function peg$parseLogicAnd() {\n        var s0, s1, s2, s3, s4, s5, s6, s7;\n        var key = peg$currPos * 34 + 4;\n        var cached = peg$resultsCache[key];\n        if (cached) {\n            peg$currPos = cached.nextPos;\n            return cached.result;\n        }\n        s0 = peg$currPos;\n        s1 = peg$parseCompOps();\n        if (s1 !== peg$FAILED) {\n            s2 = [];\n            s3 = peg$currPos;\n            s4 = peg$parse_();\n            if (s4 !== peg$FAILED) {\n                s5 = peg$parseComparableOperators();\n                if (s5 !== peg$FAILED) {\n                    s6 = peg$parse_();\n                    if (s6 !== peg$FAILED) {\n                        s7 = peg$parseCompOps();\n                        if (s7 !== peg$FAILED) {\n                            s4 = [s4, s5, s6, s7];\n                            s3 = s4;\n                        }\n                        else {\n                            peg$currPos = s3;\n                            s3 = peg$FAILED;\n                        }\n                    }\n                    else {\n                        peg$currPos = s3;\n                        s3 = peg$FAILED;\n                    }\n                }\n                else {\n                    peg$currPos = s3;\n                    s3 = peg$FAILED;\n                }\n            }\n            else {\n                peg$currPos = s3;\n                s3 = peg$FAILED;\n            }\n            while (s3 !== peg$FAILED) {\n                s2.push(s3);\n                s3 = peg$currPos;\n                s4 = peg$parse_();\n                if (s4 !== peg$FAILED) {\n                    s5 = peg$parseComparableOperators();\n                    if (s5 !== peg$FAILED) {\n                        s6 = peg$parse_();\n                        if (s6 !== peg$FAILED) {\n                            s7 = peg$parseCompOps();\n                            if (s7 !== peg$FAILED) {\n                                s4 = [s4, s5, s6, s7];\n                                s3 = s4;\n                            }\n                            else {\n                                peg$currPos = s3;\n                                s3 = peg$FAILED;\n                            }\n                        }\n                        else {\n                            peg$currPos = s3;\n                            s3 = peg$FAILED;\n                        }\n                    }\n                    else {\n                        peg$currPos = s3;\n                        s3 = peg$FAILED;\n                    }\n                }\n                else {\n                    peg$currPos = s3;\n                    s3 = peg$FAILED;\n                }\n            }\n            if (s2 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c11(s1, s2);\n                s0 = s1;\n            }\n            else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n            }\n        }\n        else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n        }\n        peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n        return s0;\n    }\n    function peg$parseComparableOperators() {\n        var s0, s1;\n        var key = peg$currPos * 34 + 5;\n        var cached = peg$resultsCache[key];\n        if (cached) {\n            peg$currPos = cached.nextPos;\n            return cached.result;\n        }\n        s0 = peg$currPos;\n        if (input.substr(peg$currPos, 2) === peg$c12) {\n            s1 = peg$c12;\n            peg$currPos += 2;\n        }\n        else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c13);\n            }\n        }\n        if (s1 === peg$FAILED) {\n            if (input.substr(peg$currPos, 11).toLowerCase() === peg$c14) {\n                s1 = input.substr(peg$currPos, 11);\n                peg$currPos += 11;\n            }\n            else {\n                s1 = peg$FAILED;\n                if (peg$silentFails === 0) {\n                    peg$fail(peg$c15);\n                }\n            }\n        }\n        if (s1 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c16();\n        }\n        s0 = s1;\n        if (s0 === peg$FAILED) {\n            s0 = peg$currPos;\n            if (input.substr(peg$currPos, 2) === peg$c17) {\n                s1 = peg$c17;\n                peg$currPos += 2;\n            }\n            else {\n                s1 = peg$FAILED;\n                if (peg$silentFails === 0) {\n                    peg$fail(peg$c18);\n                }\n            }\n            if (s1 === peg$FAILED) {\n                if (input.substr(peg$currPos, 14).toLowerCase() === peg$c19) {\n                    s1 = input.substr(peg$currPos, 14);\n                    peg$currPos += 14;\n                }\n                else {\n                    s1 = peg$FAILED;\n                    if (peg$silentFails === 0) {\n                        peg$fail(peg$c20);\n                    }\n                }\n            }\n            if (s1 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c21();\n            }\n            s0 = s1;\n            if (s0 === peg$FAILED) {\n                s0 = peg$currPos;\n                if (input.substr(peg$currPos, 2) === peg$c22) {\n                    s1 = peg$c22;\n                    peg$currPos += 2;\n                }\n                else {\n                    s1 = peg$FAILED;\n                    if (peg$silentFails === 0) {\n                        peg$fail(peg$c23);\n                    }\n                }\n                if (s1 === peg$FAILED) {\n                    if (input.substr(peg$currPos, 5).toLowerCase() === peg$c24) {\n                        s1 = input.substr(peg$currPos, 5);\n                        peg$currPos += 5;\n                    }\n                    else {\n                        s1 = peg$FAILED;\n                        if (peg$silentFails === 0) {\n                            peg$fail(peg$c25);\n                        }\n                    }\n                }\n                if (s1 !== peg$FAILED) {\n                    peg$savedPos = s0;\n                    s1 = peg$c26();\n                }\n                s0 = s1;\n                if (s0 === peg$FAILED) {\n                    s0 = peg$currPos;\n                    if (input.charCodeAt(peg$currPos) === 61) {\n                        s1 = peg$c27;\n                        peg$currPos++;\n                    }\n                    else {\n                        s1 = peg$FAILED;\n                        if (peg$silentFails === 0) {\n                            peg$fail(peg$c28);\n                        }\n                    }\n                    if (s1 === peg$FAILED) {\n                        if (input.substr(peg$currPos, 5).toLowerCase() === peg$c24) {\n                            s1 = input.substr(peg$currPos, 5);\n                            peg$currPos += 5;\n                        }\n                        else {\n                            s1 = peg$FAILED;\n                            if (peg$silentFails === 0) {\n                                peg$fail(peg$c25);\n                            }\n                        }\n                    }\n                    if (s1 !== peg$FAILED) {\n                        peg$savedPos = s0;\n                        s1 = peg$c26();\n                    }\n                    s0 = s1;\n                    if (s0 === peg$FAILED) {\n                        s0 = peg$currPos;\n                        if (input.substr(peg$currPos, 2) === peg$c29) {\n                            s1 = peg$c29;\n                            peg$currPos += 2;\n                        }\n                        else {\n                            s1 = peg$FAILED;\n                            if (peg$silentFails === 0) {\n                                peg$fail(peg$c30);\n                            }\n                        }\n                        if (s1 === peg$FAILED) {\n                            if (input.substr(peg$currPos, 8).toLowerCase() === peg$c31) {\n                                s1 = input.substr(peg$currPos, 8);\n                                peg$currPos += 8;\n                            }\n                            else {\n                                s1 = peg$FAILED;\n                                if (peg$silentFails === 0) {\n                                    peg$fail(peg$c32);\n                                }\n                            }\n                        }\n                        if (s1 !== peg$FAILED) {\n                            peg$savedPos = s0;\n                            s1 = peg$c33();\n                        }\n                        s0 = s1;\n                        if (s0 === peg$FAILED) {\n                            s0 = peg$currPos;\n                            if (input.charCodeAt(peg$currPos) === 60) {\n                                s1 = peg$c34;\n                                peg$currPos++;\n                            }\n                            else {\n                                s1 = peg$FAILED;\n                                if (peg$silentFails === 0) {\n                                    peg$fail(peg$c35);\n                                }\n                            }\n                            if (s1 === peg$FAILED) {\n                                if (input.substr(peg$currPos, 4).toLowerCase() === peg$c36) {\n                                    s1 = input.substr(peg$currPos, 4);\n                                    peg$currPos += 4;\n                                }\n                                else {\n                                    s1 = peg$FAILED;\n                                    if (peg$silentFails === 0) {\n                                        peg$fail(peg$c37);\n                                    }\n                                }\n                            }\n                            if (s1 !== peg$FAILED) {\n                                peg$savedPos = s0;\n                                s1 = peg$c38();\n                            }\n                            s0 = s1;\n                            if (s0 === peg$FAILED) {\n                                s0 = peg$currPos;\n                                if (input.charCodeAt(peg$currPos) === 62) {\n                                    s1 = peg$c39;\n                                    peg$currPos++;\n                                }\n                                else {\n                                    s1 = peg$FAILED;\n                                    if (peg$silentFails === 0) {\n                                        peg$fail(peg$c40);\n                                    }\n                                }\n                                if (s1 === peg$FAILED) {\n                                    if (input.substr(peg$currPos, 7).toLowerCase() === peg$c41) {\n                                        s1 = input.substr(peg$currPos, 7);\n                                        peg$currPos += 7;\n                                    }\n                                    else {\n                                        s1 = peg$FAILED;\n                                        if (peg$silentFails === 0) {\n                                            peg$fail(peg$c42);\n                                        }\n                                    }\n                                }\n                                if (s1 !== peg$FAILED) {\n                                    peg$savedPos = s0;\n                                    s1 = peg$c43();\n                                }\n                                s0 = s1;\n                            }\n                        }\n                    }\n                }\n            }\n        }\n        peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n        return s0;\n    }\n    function peg$parseCompOps() {\n        var s0, s1, s2, s3, s4, s5, s6, s7;\n        var key = peg$currPos * 34 + 6;\n        var cached = peg$resultsCache[key];\n        if (cached) {\n            peg$currPos = cached.nextPos;\n            return cached.result;\n        }\n        s0 = peg$currPos;\n        s1 = peg$parsePlusMinusOps();\n        if (s1 !== peg$FAILED) {\n            s2 = [];\n            s3 = peg$currPos;\n            s4 = peg$parse_();\n            if (s4 !== peg$FAILED) {\n                s5 = peg$parsePlusMinusSigns();\n                if (s5 !== peg$FAILED) {\n                    s6 = peg$parse_();\n                    if (s6 !== peg$FAILED) {\n                        s7 = peg$parsePlusMinusOps();\n                        if (s7 !== peg$FAILED) {\n                            s4 = [s4, s5, s6, s7];\n                            s3 = s4;\n                        }\n                        else {\n                            peg$currPos = s3;\n                            s3 = peg$FAILED;\n                        }\n                    }\n                    else {\n                        peg$currPos = s3;\n                        s3 = peg$FAILED;\n                    }\n                }\n                else {\n                    peg$currPos = s3;\n                    s3 = peg$FAILED;\n                }\n            }\n            else {\n                peg$currPos = s3;\n                s3 = peg$FAILED;\n            }\n            while (s3 !== peg$FAILED) {\n                s2.push(s3);\n                s3 = peg$currPos;\n                s4 = peg$parse_();\n                if (s4 !== peg$FAILED) {\n                    s5 = peg$parsePlusMinusSigns();\n                    if (s5 !== peg$FAILED) {\n                        s6 = peg$parse_();\n                        if (s6 !== peg$FAILED) {\n                            s7 = peg$parsePlusMinusOps();\n                            if (s7 !== peg$FAILED) {\n                                s4 = [s4, s5, s6, s7];\n                                s3 = s4;\n                            }\n                            else {\n                                peg$currPos = s3;\n                                s3 = peg$FAILED;\n                            }\n                        }\n                        else {\n                            peg$currPos = s3;\n                            s3 = peg$FAILED;\n                        }\n                    }\n                    else {\n                        peg$currPos = s3;\n                        s3 = peg$FAILED;\n                    }\n                }\n                else {\n                    peg$currPos = s3;\n                    s3 = peg$FAILED;\n                }\n            }\n            if (s2 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c0(s1, s2);\n                s0 = s1;\n            }\n            else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n            }\n        }\n        else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n        }\n        peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n        return s0;\n    }\n    function peg$parsePlusMinusSigns() {\n        var s0, s1;\n        var key = peg$currPos * 34 + 7;\n        var cached = peg$resultsCache[key];\n        if (cached) {\n            peg$currPos = cached.nextPos;\n            return cached.result;\n        }\n        s0 = peg$currPos;\n        if (input.charCodeAt(peg$currPos) === 43) {\n            s1 = peg$c44;\n            peg$currPos++;\n        }\n        else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c45);\n            }\n        }\n        if (s1 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c46();\n        }\n        s0 = s1;\n        if (s0 === peg$FAILED) {\n            s0 = peg$currPos;\n            if (input.charCodeAt(peg$currPos) === 45) {\n                s1 = peg$c47;\n                peg$currPos++;\n            }\n            else {\n                s1 = peg$FAILED;\n                if (peg$silentFails === 0) {\n                    peg$fail(peg$c48);\n                }\n            }\n            if (s1 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c49();\n            }\n            s0 = s1;\n        }\n        peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n        return s0;\n    }\n    function peg$parsePlusMinusOps() {\n        var s0, s1, s2, s3, s4, s5, s6, s7;\n        var key = peg$currPos * 34 + 8;\n        var cached = peg$resultsCache[key];\n        if (cached) {\n            peg$currPos = cached.nextPos;\n            return cached.result;\n        }\n        s0 = peg$currPos;\n        s1 = peg$parseMulDivOps();\n        if (s1 !== peg$FAILED) {\n            s2 = [];\n            s3 = peg$currPos;\n            s4 = peg$parse_();\n            if (s4 !== peg$FAILED) {\n                s5 = peg$parseMulDivSigns();\n                if (s5 !== peg$FAILED) {\n                    s6 = peg$parse_();\n                    if (s6 !== peg$FAILED) {\n                        s7 = peg$parseMulDivOps();\n                        if (s7 !== peg$FAILED) {\n                            s4 = [s4, s5, s6, s7];\n                            s3 = s4;\n                        }\n                        else {\n                            peg$currPos = s3;\n                            s3 = peg$FAILED;\n                        }\n                    }\n                    else {\n                        peg$currPos = s3;\n                        s3 = peg$FAILED;\n                    }\n                }\n                else {\n                    peg$currPos = s3;\n                    s3 = peg$FAILED;\n                }\n            }\n            else {\n                peg$currPos = s3;\n                s3 = peg$FAILED;\n            }\n            while (s3 !== peg$FAILED) {\n                s2.push(s3);\n                s3 = peg$currPos;\n                s4 = peg$parse_();\n                if (s4 !== peg$FAILED) {\n                    s5 = peg$parseMulDivSigns();\n                    if (s5 !== peg$FAILED) {\n                        s6 = peg$parse_();\n                        if (s6 !== peg$FAILED) {\n                            s7 = peg$parseMulDivOps();\n                            if (s7 !== peg$FAILED) {\n                                s4 = [s4, s5, s6, s7];\n                                s3 = s4;\n                            }\n                            else {\n                                peg$currPos = s3;\n                                s3 = peg$FAILED;\n                            }\n                        }\n                        else {\n                            peg$currPos = s3;\n                            s3 = peg$FAILED;\n                        }\n                    }\n                    else {\n                        peg$currPos = s3;\n                        s3 = peg$FAILED;\n                    }\n                }\n                else {\n                    peg$currPos = s3;\n                    s3 = peg$FAILED;\n                }\n            }\n            if (s2 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c0(s1, s2);\n                s0 = s1;\n            }\n            else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n            }\n        }\n        else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n        }\n        peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n        return s0;\n    }\n    function peg$parseMulDivSigns() {\n        var s0, s1;\n        var key = peg$currPos * 34 + 9;\n        var cached = peg$resultsCache[key];\n        if (cached) {\n            peg$currPos = cached.nextPos;\n            return cached.result;\n        }\n        s0 = peg$currPos;\n        if (input.charCodeAt(peg$currPos) === 42) {\n            s1 = peg$c50;\n            peg$currPos++;\n        }\n        else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c51);\n            }\n        }\n        if (s1 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c52();\n        }\n        s0 = s1;\n        if (s0 === peg$FAILED) {\n            s0 = peg$currPos;\n            if (input.charCodeAt(peg$currPos) === 47) {\n                s1 = peg$c53;\n                peg$currPos++;\n            }\n            else {\n                s1 = peg$FAILED;\n                if (peg$silentFails === 0) {\n                    peg$fail(peg$c54);\n                }\n            }\n            if (s1 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c55();\n            }\n            s0 = s1;\n            if (s0 === peg$FAILED) {\n                s0 = peg$currPos;\n                if (input.charCodeAt(peg$currPos) === 37) {\n                    s1 = peg$c56;\n                    peg$currPos++;\n                }\n                else {\n                    s1 = peg$FAILED;\n                    if (peg$silentFails === 0) {\n                        peg$fail(peg$c57);\n                    }\n                }\n                if (s1 !== peg$FAILED) {\n                    peg$savedPos = s0;\n                    s1 = peg$c58();\n                }\n                s0 = s1;\n            }\n        }\n        peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n        return s0;\n    }\n    function peg$parseMulDivOps() {\n        var s0, s1, s2, s3, s4, s5, s6, s7;\n        var key = peg$currPos * 34 + 10;\n        var cached = peg$resultsCache[key];\n        if (cached) {\n            peg$currPos = cached.nextPos;\n            return cached.result;\n        }\n        s0 = peg$currPos;\n        s1 = peg$parseBinaryFuncOp();\n        if (s1 !== peg$FAILED) {\n            s2 = [];\n            s3 = peg$currPos;\n            s4 = peg$parse_();\n            if (s4 !== peg$FAILED) {\n                s5 = peg$parsePowerSigns();\n                if (s5 !== peg$FAILED) {\n                    s6 = peg$parse_();\n                    if (s6 !== peg$FAILED) {\n                        s7 = peg$parseBinaryFuncOp();\n                        if (s7 !== peg$FAILED) {\n                            s4 = [s4, s5, s6, s7];\n                            s3 = s4;\n                        }\n                        else {\n                            peg$currPos = s3;\n                            s3 = peg$FAILED;\n                        }\n                    }\n                    else {\n                        peg$currPos = s3;\n                        s3 = peg$FAILED;\n                    }\n                }\n                else {\n                    peg$currPos = s3;\n                    s3 = peg$FAILED;\n                }\n            }\n            else {\n                peg$currPos = s3;\n                s3 = peg$FAILED;\n            }\n            while (s3 !== peg$FAILED) {\n                s2.push(s3);\n                s3 = peg$currPos;\n                s4 = peg$parse_();\n                if (s4 !== peg$FAILED) {\n                    s5 = peg$parsePowerSigns();\n                    if (s5 !== peg$FAILED) {\n                        s6 = peg$parse_();\n                        if (s6 !== peg$FAILED) {\n                            s7 = peg$parseBinaryFuncOp();\n                            if (s7 !== peg$FAILED) {\n                                s4 = [s4, s5, s6, s7];\n                                s3 = s4;\n                            }\n                            else {\n                                peg$currPos = s3;\n                                s3 = peg$FAILED;\n                            }\n                        }\n                        else {\n                            peg$currPos = s3;\n                            s3 = peg$FAILED;\n                        }\n                    }\n                    else {\n                        peg$currPos = s3;\n                        s3 = peg$FAILED;\n                    }\n                }\n                else {\n                    peg$currPos = s3;\n                    s3 = peg$FAILED;\n                }\n            }\n            if (s2 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c0(s1, s2);\n                s0 = s1;\n            }\n            else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n            }\n        }\n        else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n        }\n        peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n        return s0;\n    }\n    function peg$parsePowerSigns() {\n        var s0, s1;\n        var key = peg$currPos * 34 + 11;\n        var cached = peg$resultsCache[key];\n        if (cached) {\n            peg$currPos = cached.nextPos;\n            return cached.result;\n        }\n        s0 = peg$currPos;\n        if (input.charCodeAt(peg$currPos) === 94) {\n            s1 = peg$c59;\n            peg$currPos++;\n        }\n        else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c60);\n            }\n        }\n        if (s1 === peg$FAILED) {\n            if (input.substr(peg$currPos, 5).toLowerCase() === peg$c61) {\n                s1 = input.substr(peg$currPos, 5);\n                peg$currPos += 5;\n            }\n            else {\n                s1 = peg$FAILED;\n                if (peg$silentFails === 0) {\n                    peg$fail(peg$c62);\n                }\n            }\n        }\n        if (s1 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c63();\n        }\n        s0 = s1;\n        peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n        return s0;\n    }\n    function peg$parseBinaryFuncOp() {\n        var s0, s1, s2, s3, s4, s5, s6, s7;\n        var key = peg$currPos * 34 + 12;\n        var cached = peg$resultsCache[key];\n        if (cached) {\n            peg$currPos = cached.nextPos;\n            return cached.result;\n        }\n        s0 = peg$currPos;\n        s1 = peg$parseFactor();\n        if (s1 !== peg$FAILED) {\n            s2 = [];\n            s3 = peg$currPos;\n            s4 = peg$parse_();\n            if (s4 !== peg$FAILED) {\n                s5 = peg$parseBinFunctions();\n                if (s5 !== peg$FAILED) {\n                    s6 = peg$parse_();\n                    if (s6 !== peg$FAILED) {\n                        s7 = peg$parseFactor();\n                        if (s7 === peg$FAILED) {\n                            s7 = null;\n                        }\n                        if (s7 !== peg$FAILED) {\n                            s4 = [s4, s5, s6, s7];\n                            s3 = s4;\n                        }\n                        else {\n                            peg$currPos = s3;\n                            s3 = peg$FAILED;\n                        }\n                    }\n                    else {\n                        peg$currPos = s3;\n                        s3 = peg$FAILED;\n                    }\n                }\n                else {\n                    peg$currPos = s3;\n                    s3 = peg$FAILED;\n                }\n            }\n            else {\n                peg$currPos = s3;\n                s3 = peg$FAILED;\n            }\n            while (s3 !== peg$FAILED) {\n                s2.push(s3);\n                s3 = peg$currPos;\n                s4 = peg$parse_();\n                if (s4 !== peg$FAILED) {\n                    s5 = peg$parseBinFunctions();\n                    if (s5 !== peg$FAILED) {\n                        s6 = peg$parse_();\n                        if (s6 !== peg$FAILED) {\n                            s7 = peg$parseFactor();\n                            if (s7 === peg$FAILED) {\n                                s7 = null;\n                            }\n                            if (s7 !== peg$FAILED) {\n                                s4 = [s4, s5, s6, s7];\n                                s3 = s4;\n                            }\n                            else {\n                                peg$currPos = s3;\n                                s3 = peg$FAILED;\n                            }\n                        }\n                        else {\n                            peg$currPos = s3;\n                            s3 = peg$FAILED;\n                        }\n                    }\n                    else {\n                        peg$currPos = s3;\n                        s3 = peg$FAILED;\n                    }\n                }\n                else {\n                    peg$currPos = s3;\n                    s3 = peg$FAILED;\n                }\n            }\n            if (s2 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c11(s1, s2);\n                s0 = s1;\n            }\n            else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n            }\n        }\n        else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n        }\n        peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n        return s0;\n    }\n    function peg$parseBinFunctions() {\n        var s0, s1;\n        var key = peg$currPos * 34 + 13;\n        var cached = peg$resultsCache[key];\n        if (cached) {\n            peg$currPos = cached.nextPos;\n            return cached.result;\n        }\n        s0 = peg$currPos;\n        if (input.substr(peg$currPos, 2) === peg$c64) {\n            s1 = peg$c64;\n            peg$currPos += 2;\n        }\n        else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c65);\n            }\n        }\n        if (s1 === peg$FAILED) {\n            if (input.substr(peg$currPos, 8).toLowerCase() === peg$c66) {\n                s1 = input.substr(peg$currPos, 8);\n                peg$currPos += 8;\n            }\n            else {\n                s1 = peg$FAILED;\n                if (peg$silentFails === 0) {\n                    peg$fail(peg$c67);\n                }\n            }\n            if (s1 === peg$FAILED) {\n                if (input.substr(peg$currPos, 7).toLowerCase() === peg$c68) {\n                    s1 = input.substr(peg$currPos, 7);\n                    peg$currPos += 7;\n                }\n                else {\n                    s1 = peg$FAILED;\n                    if (peg$silentFails === 0) {\n                        peg$fail(peg$c69);\n                    }\n                }\n            }\n        }\n        if (s1 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c70();\n        }\n        s0 = s1;\n        if (s0 === peg$FAILED) {\n            s0 = peg$currPos;\n            if (input.substr(peg$currPos, 11).toLowerCase() === peg$c71) {\n                s1 = input.substr(peg$currPos, 11);\n                peg$currPos += 11;\n            }\n            else {\n                s1 = peg$FAILED;\n                if (peg$silentFails === 0) {\n                    peg$fail(peg$c72);\n                }\n            }\n            if (s1 === peg$FAILED) {\n                if (input.substr(peg$currPos, 10).toLowerCase() === peg$c73) {\n                    s1 = input.substr(peg$currPos, 10);\n                    peg$currPos += 10;\n                }\n                else {\n                    s1 = peg$FAILED;\n                    if (peg$silentFails === 0) {\n                        peg$fail(peg$c74);\n                    }\n                }\n            }\n            if (s1 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c75();\n            }\n            s0 = s1;\n            if (s0 === peg$FAILED) {\n                s0 = peg$currPos;\n                if (input.substr(peg$currPos, 5).toLowerCase() === peg$c76) {\n                    s1 = input.substr(peg$currPos, 5);\n                    peg$currPos += 5;\n                }\n                else {\n                    s1 = peg$FAILED;\n                    if (peg$silentFails === 0) {\n                        peg$fail(peg$c77);\n                    }\n                }\n                if (s1 !== peg$FAILED) {\n                    peg$savedPos = s0;\n                    s1 = peg$c78();\n                }\n                s0 = s1;\n                if (s0 === peg$FAILED) {\n                    s0 = peg$currPos;\n                    if (input.substr(peg$currPos, 5).toLowerCase() === peg$c79) {\n                        s1 = input.substr(peg$currPos, 5);\n                        peg$currPos += 5;\n                    }\n                    else {\n                        s1 = peg$FAILED;\n                        if (peg$silentFails === 0) {\n                            peg$fail(peg$c80);\n                        }\n                    }\n                    if (s1 !== peg$FAILED) {\n                        peg$savedPos = s0;\n                        s1 = peg$c81();\n                    }\n                    s0 = s1;\n                }\n            }\n        }\n        peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n        return s0;\n    }\n    function peg$parseFactor() {\n        var s0, s1, s2, s3, s4, s5;\n        var key = peg$currPos * 34 + 14;\n        var cached = peg$resultsCache[key];\n        if (cached) {\n            peg$currPos = cached.nextPos;\n            return cached.result;\n        }\n        s0 = peg$currPos;\n        if (input.charCodeAt(peg$currPos) === 40) {\n            s1 = peg$c82;\n            peg$currPos++;\n        }\n        else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c83);\n            }\n        }\n        if (s1 !== peg$FAILED) {\n            s2 = peg$parse_();\n            if (s2 !== peg$FAILED) {\n                s3 = peg$parseExpression();\n                if (s3 !== peg$FAILED) {\n                    s4 = peg$parse_();\n                    if (s4 !== peg$FAILED) {\n                        if (input.charCodeAt(peg$currPos) === 41) {\n                            s5 = peg$c84;\n                            peg$currPos++;\n                        }\n                        else {\n                            s5 = peg$FAILED;\n                            if (peg$silentFails === 0) {\n                                peg$fail(peg$c85);\n                            }\n                        }\n                        if (s5 === peg$FAILED) {\n                            s5 = null;\n                        }\n                        if (s5 !== peg$FAILED) {\n                            peg$savedPos = s0;\n                            s1 = peg$c86(s3);\n                            s0 = s1;\n                        }\n                        else {\n                            peg$currPos = s0;\n                            s0 = peg$FAILED;\n                        }\n                    }\n                    else {\n                        peg$currPos = s0;\n                        s0 = peg$FAILED;\n                    }\n                }\n                else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                }\n            }\n            else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n            }\n        }\n        else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n        }\n        if (s0 === peg$FAILED) {\n            s0 = peg$parseFunctionOp();\n            if (s0 === peg$FAILED) {\n                s0 = peg$parseUnaryFunctionOp();\n                if (s0 === peg$FAILED) {\n                    s0 = peg$parseAtom();\n                    if (s0 === peg$FAILED) {\n                        s0 = peg$parseArrayOp();\n                    }\n                }\n            }\n        }\n        peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n        return s0;\n    }\n    function peg$parseFunctionOp() {\n        var s0, s1, s2, s3, s4;\n        var key = peg$currPos * 34 + 15;\n        var cached = peg$resultsCache[key];\n        if (cached) {\n            peg$currPos = cached.nextPos;\n            return cached.result;\n        }\n        s0 = peg$currPos;\n        s1 = peg$parseLettersAndDigits();\n        if (s1 !== peg$FAILED) {\n            if (input.charCodeAt(peg$currPos) === 40) {\n                s2 = peg$c82;\n                peg$currPos++;\n            }\n            else {\n                s2 = peg$FAILED;\n                if (peg$silentFails === 0) {\n                    peg$fail(peg$c83);\n                }\n            }\n            if (s2 !== peg$FAILED) {\n                s3 = peg$parseSequence();\n                if (s3 !== peg$FAILED) {\n                    if (input.charCodeAt(peg$currPos) === 41) {\n                        s4 = peg$c84;\n                        peg$currPos++;\n                    }\n                    else {\n                        s4 = peg$FAILED;\n                        if (peg$silentFails === 0) {\n                            peg$fail(peg$c85);\n                        }\n                    }\n                    if (s4 === peg$FAILED) {\n                        s4 = null;\n                    }\n                    if (s4 !== peg$FAILED) {\n                        peg$savedPos = s0;\n                        s1 = peg$c87(s1, s3);\n                        s0 = s1;\n                    }\n                    else {\n                        peg$currPos = s0;\n                        s0 = peg$FAILED;\n                    }\n                }\n                else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                }\n            }\n            else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n            }\n        }\n        else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n        }\n        peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n        return s0;\n    }\n    function peg$parseUnaryFunctionOp() {\n        var s0, s1, s2, s3;\n        var key = peg$currPos * 34 + 16;\n        var cached = peg$resultsCache[key];\n        if (cached) {\n            peg$currPos = cached.nextPos;\n            return cached.result;\n        }\n        s0 = peg$currPos;\n        if (input.charCodeAt(peg$currPos) === 33) {\n            s1 = peg$c88;\n            peg$currPos++;\n        }\n        else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c89);\n            }\n        }\n        if (s1 === peg$FAILED) {\n            if (input.substr(peg$currPos, 6).toLowerCase() === peg$c90) {\n                s1 = input.substr(peg$currPos, 6);\n                peg$currPos += 6;\n            }\n            else {\n                s1 = peg$FAILED;\n                if (peg$silentFails === 0) {\n                    peg$fail(peg$c91);\n                }\n            }\n        }\n        if (s1 !== peg$FAILED) {\n            s2 = peg$parse_();\n            if (s2 !== peg$FAILED) {\n                s3 = peg$parseExpression();\n                if (s3 !== peg$FAILED) {\n                    peg$savedPos = s0;\n                    s1 = peg$c92(s3);\n                    s0 = s1;\n                }\n                else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                }\n            }\n            else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n            }\n        }\n        else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n        }\n        if (s0 === peg$FAILED) {\n            s0 = peg$currPos;\n            s1 = peg$parseAtom();\n            if (s1 !== peg$FAILED) {\n                s2 = peg$parse_();\n                if (s2 !== peg$FAILED) {\n                    s3 = peg$parseUnFunctions();\n                    if (s3 !== peg$FAILED) {\n                        peg$savedPos = s0;\n                        s1 = peg$c93(s1, s3);\n                        s0 = s1;\n                    }\n                    else {\n                        peg$currPos = s0;\n                        s0 = peg$FAILED;\n                    }\n                }\n                else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                }\n            }\n            else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n            }\n        }\n        peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n        return s0;\n    }\n    function peg$parseUnFunctions() {\n        var s0, s1;\n        var key = peg$currPos * 34 + 17;\n        var cached = peg$resultsCache[key];\n        if (cached) {\n            peg$currPos = cached.nextPos;\n            return cached.result;\n        }\n        s0 = peg$currPos;\n        if (input.substr(peg$currPos, 5).toLowerCase() === peg$c94) {\n            s1 = input.substr(peg$currPos, 5);\n            peg$currPos += 5;\n        }\n        else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c95);\n            }\n        }\n        if (s1 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c96();\n        }\n        s0 = s1;\n        if (s0 === peg$FAILED) {\n            s0 = peg$currPos;\n            if (input.substr(peg$currPos, 8).toLowerCase() === peg$c97) {\n                s1 = input.substr(peg$currPos, 8);\n                peg$currPos += 8;\n            }\n            else {\n                s1 = peg$FAILED;\n                if (peg$silentFails === 0) {\n                    peg$fail(peg$c98);\n                }\n            }\n            if (s1 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c99();\n            }\n            s0 = s1;\n        }\n        peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n        return s0;\n    }\n    function peg$parseAtom() {\n        var s0, s1, s2, s3, s4;\n        var key = peg$currPos * 34 + 18;\n        var cached = peg$resultsCache[key];\n        if (cached) {\n            peg$currPos = cached.nextPos;\n            return cached.result;\n        }\n        s0 = peg$currPos;\n        s1 = peg$parse_();\n        if (s1 !== peg$FAILED) {\n            if (input.substr(peg$currPos, 9) === peg$c100) {\n                s2 = peg$c100;\n                peg$currPos += 9;\n            }\n            else {\n                s2 = peg$FAILED;\n                if (peg$silentFails === 0) {\n                    peg$fail(peg$c101);\n                }\n            }\n            if (s2 === peg$FAILED) {\n                if (input.substr(peg$currPos, 4) === peg$c102) {\n                    s2 = peg$c102;\n                    peg$currPos += 4;\n                }\n                else {\n                    s2 = peg$FAILED;\n                    if (peg$silentFails === 0) {\n                        peg$fail(peg$c103);\n                    }\n                }\n            }\n            if (s2 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c104();\n                s0 = s1;\n            }\n            else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n            }\n        }\n        else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n        }\n        if (s0 === peg$FAILED) {\n            s0 = peg$currPos;\n            s1 = peg$parse_();\n            if (s1 !== peg$FAILED) {\n                s2 = peg$parseConstValue();\n                if (s2 !== peg$FAILED) {\n                    peg$savedPos = s0;\n                    s1 = peg$c105(s2);\n                    s0 = s1;\n                }\n                else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                }\n            }\n            else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n            }\n            if (s0 === peg$FAILED) {\n                s0 = peg$currPos;\n                s1 = peg$parse_();\n                if (s1 !== peg$FAILED) {\n                    if (input.charCodeAt(peg$currPos) === 123) {\n                        s2 = peg$c106;\n                        peg$currPos++;\n                    }\n                    else {\n                        s2 = peg$FAILED;\n                        if (peg$silentFails === 0) {\n                            peg$fail(peg$c107);\n                        }\n                    }\n                    if (s2 !== peg$FAILED) {\n                        s3 = peg$parseValueInput();\n                        if (s3 !== peg$FAILED) {\n                            if (input.charCodeAt(peg$currPos) === 125) {\n                                s4 = peg$c108;\n                                peg$currPos++;\n                            }\n                            else {\n                                s4 = peg$FAILED;\n                                if (peg$silentFails === 0) {\n                                    peg$fail(peg$c109);\n                                }\n                            }\n                            if (s4 !== peg$FAILED) {\n                                peg$savedPos = s0;\n                                s1 = peg$c110(s3);\n                                s0 = s1;\n                            }\n                            else {\n                                peg$currPos = s0;\n                                s0 = peg$FAILED;\n                            }\n                        }\n                        else {\n                            peg$currPos = s0;\n                            s0 = peg$FAILED;\n                        }\n                    }\n                    else {\n                        peg$currPos = s0;\n                        s0 = peg$FAILED;\n                    }\n                }\n                else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                }\n            }\n        }\n        peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n        return s0;\n    }\n    function peg$parseConstValue() {\n        var s0, s1, s2, s3;\n        var key = peg$currPos * 34 + 19;\n        var cached = peg$resultsCache[key];\n        if (cached) {\n            peg$currPos = cached.nextPos;\n            return cached.result;\n        }\n        s0 = peg$currPos;\n        s1 = peg$parseLogicValue();\n        if (s1 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c111(s1);\n        }\n        s0 = s1;\n        if (s0 === peg$FAILED) {\n            s0 = peg$currPos;\n            s1 = peg$parseArithmeticValue();\n            if (s1 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c111(s1);\n            }\n            s0 = s1;\n            if (s0 === peg$FAILED) {\n                s0 = peg$currPos;\n                s1 = peg$parseLettersAndDigits();\n                if (s1 !== peg$FAILED) {\n                    peg$savedPos = s0;\n                    s1 = peg$c111(s1);\n                }\n                s0 = s1;\n                if (s0 === peg$FAILED) {\n                    s0 = peg$currPos;\n                    if (input.substr(peg$currPos, 2) === peg$c112) {\n                        s1 = peg$c112;\n                        peg$currPos += 2;\n                    }\n                    else {\n                        s1 = peg$FAILED;\n                        if (peg$silentFails === 0) {\n                            peg$fail(peg$c113);\n                        }\n                    }\n                    if (s1 !== peg$FAILED) {\n                        peg$savedPos = s0;\n                        s1 = peg$c114();\n                    }\n                    s0 = s1;\n                    if (s0 === peg$FAILED) {\n                        s0 = peg$currPos;\n                        if (input.substr(peg$currPos, 2) === peg$c115) {\n                            s1 = peg$c115;\n                            peg$currPos += 2;\n                        }\n                        else {\n                            s1 = peg$FAILED;\n                            if (peg$silentFails === 0) {\n                                peg$fail(peg$c116);\n                            }\n                        }\n                        if (s1 !== peg$FAILED) {\n                            peg$savedPos = s0;\n                            s1 = peg$c114();\n                        }\n                        s0 = s1;\n                        if (s0 === peg$FAILED) {\n                            s0 = peg$currPos;\n                            if (input.charCodeAt(peg$currPos) === 39) {\n                                s1 = peg$c117;\n                                peg$currPos++;\n                            }\n                            else {\n                                s1 = peg$FAILED;\n                                if (peg$silentFails === 0) {\n                                    peg$fail(peg$c118);\n                                }\n                            }\n                            if (s1 !== peg$FAILED) {\n                                s2 = peg$parseAnyInput();\n                                if (s2 !== peg$FAILED) {\n                                    if (input.charCodeAt(peg$currPos) === 39) {\n                                        s3 = peg$c117;\n                                        peg$currPos++;\n                                    }\n                                    else {\n                                        s3 = peg$FAILED;\n                                        if (peg$silentFails === 0) {\n                                            peg$fail(peg$c118);\n                                        }\n                                    }\n                                    if (s3 !== peg$FAILED) {\n                                        peg$savedPos = s0;\n                                        s1 = peg$c119(s2);\n                                        s0 = s1;\n                                    }\n                                    else {\n                                        peg$currPos = s0;\n                                        s0 = peg$FAILED;\n                                    }\n                                }\n                                else {\n                                    peg$currPos = s0;\n                                    s0 = peg$FAILED;\n                                }\n                            }\n                            else {\n                                peg$currPos = s0;\n                                s0 = peg$FAILED;\n                            }\n                            if (s0 === peg$FAILED) {\n                                s0 = peg$currPos;\n                                if (input.charCodeAt(peg$currPos) === 34) {\n                                    s1 = peg$c120;\n                                    peg$currPos++;\n                                }\n                                else {\n                                    s1 = peg$FAILED;\n                                    if (peg$silentFails === 0) {\n                                        peg$fail(peg$c121);\n                                    }\n                                }\n                                if (s1 !== peg$FAILED) {\n                                    s2 = peg$parseAnyInput();\n                                    if (s2 !== peg$FAILED) {\n                                        if (input.charCodeAt(peg$currPos) === 34) {\n                                            s3 = peg$c120;\n                                            peg$currPos++;\n                                        }\n                                        else {\n                                            s3 = peg$FAILED;\n                                            if (peg$silentFails === 0) {\n                                                peg$fail(peg$c121);\n                                            }\n                                        }\n                                        if (s3 !== peg$FAILED) {\n                                            peg$savedPos = s0;\n                                            s1 = peg$c119(s2);\n                                            s0 = s1;\n                                        }\n                                        else {\n                                            peg$currPos = s0;\n                                            s0 = peg$FAILED;\n                                        }\n                                    }\n                                    else {\n                                        peg$currPos = s0;\n                                        s0 = peg$FAILED;\n                                    }\n                                }\n                                else {\n                                    peg$currPos = s0;\n                                    s0 = peg$FAILED;\n                                }\n                            }\n                        }\n                    }\n                }\n            }\n        }\n        peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n        return s0;\n    }\n    function peg$parseArrayOp() {\n        var s0, s1, s2, s3;\n        var key = peg$currPos * 34 + 20;\n        var cached = peg$resultsCache[key];\n        if (cached) {\n            peg$currPos = cached.nextPos;\n            return cached.result;\n        }\n        s0 = peg$currPos;\n        if (input.charCodeAt(peg$currPos) === 91) {\n            s1 = peg$c122;\n            peg$currPos++;\n        }\n        else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c123);\n            }\n        }\n        if (s1 !== peg$FAILED) {\n            s2 = peg$parseSequence();\n            if (s2 !== peg$FAILED) {\n                if (input.charCodeAt(peg$currPos) === 93) {\n                    s3 = peg$c124;\n                    peg$currPos++;\n                }\n                else {\n                    s3 = peg$FAILED;\n                    if (peg$silentFails === 0) {\n                        peg$fail(peg$c125);\n                    }\n                }\n                if (s3 !== peg$FAILED) {\n                    peg$savedPos = s0;\n                    s1 = peg$c126(s2);\n                    s0 = s1;\n                }\n                else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                }\n            }\n            else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n            }\n        }\n        else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n        }\n        peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n        return s0;\n    }\n    function peg$parseSequence() {\n        var s0, s1, s2, s3, s4, s5, s6, s7;\n        var key = peg$currPos * 34 + 21;\n        var cached = peg$resultsCache[key];\n        if (cached) {\n            peg$currPos = cached.nextPos;\n            return cached.result;\n        }\n        s0 = peg$currPos;\n        s1 = peg$parseExpression();\n        if (s1 === peg$FAILED) {\n            s1 = null;\n        }\n        if (s1 !== peg$FAILED) {\n            s2 = [];\n            s3 = peg$currPos;\n            s4 = peg$parse_();\n            if (s4 !== peg$FAILED) {\n                if (input.charCodeAt(peg$currPos) === 44) {\n                    s5 = peg$c127;\n                    peg$currPos++;\n                }\n                else {\n                    s5 = peg$FAILED;\n                    if (peg$silentFails === 0) {\n                        peg$fail(peg$c128);\n                    }\n                }\n                if (s5 !== peg$FAILED) {\n                    s6 = peg$parse_();\n                    if (s6 !== peg$FAILED) {\n                        s7 = peg$parseExpression();\n                        if (s7 !== peg$FAILED) {\n                            s4 = [s4, s5, s6, s7];\n                            s3 = s4;\n                        }\n                        else {\n                            peg$currPos = s3;\n                            s3 = peg$FAILED;\n                        }\n                    }\n                    else {\n                        peg$currPos = s3;\n                        s3 = peg$FAILED;\n                    }\n                }\n                else {\n                    peg$currPos = s3;\n                    s3 = peg$FAILED;\n                }\n            }\n            else {\n                peg$currPos = s3;\n                s3 = peg$FAILED;\n            }\n            while (s3 !== peg$FAILED) {\n                s2.push(s3);\n                s3 = peg$currPos;\n                s4 = peg$parse_();\n                if (s4 !== peg$FAILED) {\n                    if (input.charCodeAt(peg$currPos) === 44) {\n                        s5 = peg$c127;\n                        peg$currPos++;\n                    }\n                    else {\n                        s5 = peg$FAILED;\n                        if (peg$silentFails === 0) {\n                            peg$fail(peg$c128);\n                        }\n                    }\n                    if (s5 !== peg$FAILED) {\n                        s6 = peg$parse_();\n                        if (s6 !== peg$FAILED) {\n                            s7 = peg$parseExpression();\n                            if (s7 !== peg$FAILED) {\n                                s4 = [s4, s5, s6, s7];\n                                s3 = s4;\n                            }\n                            else {\n                                peg$currPos = s3;\n                                s3 = peg$FAILED;\n                            }\n                        }\n                        else {\n                            peg$currPos = s3;\n                            s3 = peg$FAILED;\n                        }\n                    }\n                    else {\n                        peg$currPos = s3;\n                        s3 = peg$FAILED;\n                    }\n                }\n                else {\n                    peg$currPos = s3;\n                    s3 = peg$FAILED;\n                }\n            }\n            if (s2 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c129(s1, s2);\n                s0 = s1;\n            }\n            else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n            }\n        }\n        else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n        }\n        peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n        return s0;\n    }\n    function peg$parseLogicValue() {\n        var s0, s1;\n        var key = peg$currPos * 34 + 22;\n        var cached = peg$resultsCache[key];\n        if (cached) {\n            peg$currPos = cached.nextPos;\n            return cached.result;\n        }\n        s0 = peg$currPos;\n        if (input.substr(peg$currPos, 4).toLowerCase() === peg$c130) {\n            s1 = input.substr(peg$currPos, 4);\n            peg$currPos += 4;\n        }\n        else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c131);\n            }\n        }\n        if (s1 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c132();\n        }\n        s0 = s1;\n        if (s0 === peg$FAILED) {\n            s0 = peg$currPos;\n            if (input.substr(peg$currPos, 5).toLowerCase() === peg$c133) {\n                s1 = input.substr(peg$currPos, 5);\n                peg$currPos += 5;\n            }\n            else {\n                s1 = peg$FAILED;\n                if (peg$silentFails === 0) {\n                    peg$fail(peg$c134);\n                }\n            }\n            if (s1 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c135();\n            }\n            s0 = s1;\n        }\n        peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n        return s0;\n    }\n    function peg$parseArithmeticValue() {\n        var s0, s1, s2;\n        var key = peg$currPos * 34 + 23;\n        var cached = peg$resultsCache[key];\n        if (cached) {\n            peg$currPos = cached.nextPos;\n            return cached.result;\n        }\n        s0 = peg$currPos;\n        if (input.substr(peg$currPos, 2) === peg$c136) {\n            s1 = peg$c136;\n            peg$currPos += 2;\n        }\n        else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c137);\n            }\n        }\n        if (s1 !== peg$FAILED) {\n            s2 = peg$parseDigits();\n            if (s2 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c138();\n                s0 = s1;\n            }\n            else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n            }\n        }\n        else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n        }\n        if (s0 === peg$FAILED) {\n            s0 = peg$currPos;\n            if (peg$c139.test(input.charAt(peg$currPos))) {\n                s1 = input.charAt(peg$currPos);\n                peg$currPos++;\n            }\n            else {\n                s1 = peg$FAILED;\n                if (peg$silentFails === 0) {\n                    peg$fail(peg$c140);\n                }\n            }\n            if (s1 === peg$FAILED) {\n                s1 = null;\n            }\n            if (s1 !== peg$FAILED) {\n                s2 = peg$parseNumber();\n                if (s2 !== peg$FAILED) {\n                    peg$savedPos = s0;\n                    s1 = peg$c141(s1, s2);\n                    s0 = s1;\n                }\n                else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                }\n            }\n            else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n            }\n        }\n        peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n        return s0;\n    }\n    function peg$parseNumber() {\n        var s0, s1, s2, s3;\n        var key = peg$currPos * 34 + 24;\n        var cached = peg$resultsCache[key];\n        if (cached) {\n            peg$currPos = cached.nextPos;\n            return cached.result;\n        }\n        s0 = peg$currPos;\n        s1 = peg$parseDigits();\n        if (s1 !== peg$FAILED) {\n            if (input.charCodeAt(peg$currPos) === 46) {\n                s2 = peg$c142;\n                peg$currPos++;\n            }\n            else {\n                s2 = peg$FAILED;\n                if (peg$silentFails === 0) {\n                    peg$fail(peg$c143);\n                }\n            }\n            if (s2 !== peg$FAILED) {\n                s3 = peg$parseDigits();\n                if (s3 !== peg$FAILED) {\n                    peg$savedPos = s0;\n                    s1 = peg$c144();\n                    s0 = s1;\n                }\n                else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                }\n            }\n            else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n            }\n        }\n        else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n        }\n        if (s0 === peg$FAILED) {\n            s0 = peg$currPos;\n            s1 = peg$parseNonZeroDigits();\n            if (s1 !== peg$FAILED) {\n                s2 = peg$parseDigits();\n                if (s2 === peg$FAILED) {\n                    s2 = null;\n                }\n                if (s2 !== peg$FAILED) {\n                    peg$savedPos = s0;\n                    s1 = peg$c145();\n                    s0 = s1;\n                }\n                else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                }\n            }\n            else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n            }\n            if (s0 === peg$FAILED) {\n                s0 = peg$currPos;\n                if (input.charCodeAt(peg$currPos) === 48) {\n                    s1 = peg$c146;\n                    peg$currPos++;\n                }\n                else {\n                    s1 = peg$FAILED;\n                    if (peg$silentFails === 0) {\n                        peg$fail(peg$c147);\n                    }\n                }\n                if (s1 !== peg$FAILED) {\n                    peg$savedPos = s0;\n                    s1 = peg$c148();\n                }\n                s0 = s1;\n            }\n        }\n        peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n        return s0;\n    }\n    function peg$parseValueInput() {\n        var s0, s1, s2;\n        var key = peg$currPos * 34 + 25;\n        var cached = peg$resultsCache[key];\n        if (cached) {\n            peg$currPos = cached.nextPos;\n            return cached.result;\n        }\n        s0 = peg$currPos;\n        s1 = [];\n        s2 = peg$parseValueCharacters();\n        if (s2 !== peg$FAILED) {\n            while (s2 !== peg$FAILED) {\n                s1.push(s2);\n                s2 = peg$parseValueCharacters();\n            }\n        }\n        else {\n            s1 = peg$FAILED;\n        }\n        if (s1 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c149(s1);\n        }\n        s0 = s1;\n        peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n        return s0;\n    }\n    function peg$parseAnyInput() {\n        var s0, s1, s2;\n        var key = peg$currPos * 34 + 26;\n        var cached = peg$resultsCache[key];\n        if (cached) {\n            peg$currPos = cached.nextPos;\n            return cached.result;\n        }\n        s0 = peg$currPos;\n        s1 = [];\n        s2 = peg$parseAnyCharacters();\n        if (s2 !== peg$FAILED) {\n            while (s2 !== peg$FAILED) {\n                s1.push(s2);\n                s2 = peg$parseAnyCharacters();\n            }\n        }\n        else {\n            s1 = peg$FAILED;\n        }\n        if (s1 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c149(s1);\n        }\n        s0 = s1;\n        peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n        return s0;\n    }\n    function peg$parseAnyCharacters() {\n        var s0, s1;\n        var key = peg$currPos * 34 + 27;\n        var cached = peg$resultsCache[key];\n        if (cached) {\n            peg$currPos = cached.nextPos;\n            return cached.result;\n        }\n        s0 = peg$currPos;\n        if (input.substr(peg$currPos, 2) === peg$c150) {\n            s1 = peg$c150;\n            peg$currPos += 2;\n        }\n        else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c151);\n            }\n        }\n        if (s1 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c152();\n        }\n        s0 = s1;\n        if (s0 === peg$FAILED) {\n            s0 = peg$currPos;\n            if (input.substr(peg$currPos, 2) === peg$c153) {\n                s1 = peg$c153;\n                peg$currPos += 2;\n            }\n            else {\n                s1 = peg$FAILED;\n                if (peg$silentFails === 0) {\n                    peg$fail(peg$c154);\n                }\n            }\n            if (s1 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c155();\n            }\n            s0 = s1;\n            if (s0 === peg$FAILED) {\n                s0 = peg$currPos;\n                if (peg$c156.test(input.charAt(peg$currPos))) {\n                    s1 = input.charAt(peg$currPos);\n                    peg$currPos++;\n                }\n                else {\n                    s1 = peg$FAILED;\n                    if (peg$silentFails === 0) {\n                        peg$fail(peg$c157);\n                    }\n                }\n                if (s1 !== peg$FAILED) {\n                    peg$savedPos = s0;\n                    s1 = peg$c158();\n                }\n                s0 = s1;\n            }\n        }\n        peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n        return s0;\n    }\n    function peg$parseValueCharacters() {\n        var s0, s1;\n        var key = peg$currPos * 34 + 28;\n        var cached = peg$resultsCache[key];\n        if (cached) {\n            peg$currPos = cached.nextPos;\n            return cached.result;\n        }\n        s0 = peg$currPos;\n        if (peg$c159.test(input.charAt(peg$currPos))) {\n            s1 = input.charAt(peg$currPos);\n            peg$currPos++;\n        }\n        else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c160);\n            }\n        }\n        if (s1 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c158();\n        }\n        s0 = s1;\n        peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n        return s0;\n    }\n    function peg$parseLettersAndDigits() {\n        var s0, s1, s2, s3, s4, s5, s6;\n        var key = peg$currPos * 34 + 29;\n        var cached = peg$resultsCache[key];\n        if (cached) {\n            peg$currPos = cached.nextPos;\n            return cached.result;\n        }\n        s0 = peg$currPos;\n        s1 = peg$parseLetters();\n        if (s1 !== peg$FAILED) {\n            s2 = [];\n            s3 = peg$currPos;\n            s4 = peg$parseDigits();\n            if (s4 !== peg$FAILED) {\n                s5 = [];\n                s6 = peg$parseLetters();\n                while (s6 !== peg$FAILED) {\n                    s5.push(s6);\n                    s6 = peg$parseLetters();\n                }\n                if (s5 !== peg$FAILED) {\n                    s4 = [s4, s5];\n                    s3 = s4;\n                }\n                else {\n                    peg$currPos = s3;\n                    s3 = peg$FAILED;\n                }\n            }\n            else {\n                peg$currPos = s3;\n                s3 = peg$FAILED;\n            }\n            while (s3 !== peg$FAILED) {\n                s2.push(s3);\n                s3 = peg$currPos;\n                s4 = peg$parseDigits();\n                if (s4 !== peg$FAILED) {\n                    s5 = [];\n                    s6 = peg$parseLetters();\n                    while (s6 !== peg$FAILED) {\n                        s5.push(s6);\n                        s6 = peg$parseLetters();\n                    }\n                    if (s5 !== peg$FAILED) {\n                        s4 = [s4, s5];\n                        s3 = s4;\n                    }\n                    else {\n                        peg$currPos = s3;\n                        s3 = peg$FAILED;\n                    }\n                }\n                else {\n                    peg$currPos = s3;\n                    s3 = peg$FAILED;\n                }\n            }\n            if (s2 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c158();\n                s0 = s1;\n            }\n            else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n            }\n        }\n        else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n        }\n        peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n        return s0;\n    }\n    function peg$parseDigits() {\n        var s0, s1;\n        var key = peg$currPos * 34 + 30;\n        var cached = peg$resultsCache[key];\n        if (cached) {\n            peg$currPos = cached.nextPos;\n            return cached.result;\n        }\n        s0 = [];\n        if (peg$c161.test(input.charAt(peg$currPos))) {\n            s1 = input.charAt(peg$currPos);\n            peg$currPos++;\n        }\n        else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c162);\n            }\n        }\n        if (s1 !== peg$FAILED) {\n            while (s1 !== peg$FAILED) {\n                s0.push(s1);\n                if (peg$c161.test(input.charAt(peg$currPos))) {\n                    s1 = input.charAt(peg$currPos);\n                    peg$currPos++;\n                }\n                else {\n                    s1 = peg$FAILED;\n                    if (peg$silentFails === 0) {\n                        peg$fail(peg$c162);\n                    }\n                }\n            }\n        }\n        else {\n            s0 = peg$FAILED;\n        }\n        peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n        return s0;\n    }\n    function peg$parseNonZeroDigits() {\n        var s0, s1;\n        var key = peg$currPos * 34 + 31;\n        var cached = peg$resultsCache[key];\n        if (cached) {\n            peg$currPos = cached.nextPos;\n            return cached.result;\n        }\n        s0 = [];\n        if (peg$c163.test(input.charAt(peg$currPos))) {\n            s1 = input.charAt(peg$currPos);\n            peg$currPos++;\n        }\n        else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c164);\n            }\n        }\n        if (s1 !== peg$FAILED) {\n            while (s1 !== peg$FAILED) {\n                s0.push(s1);\n                if (peg$c163.test(input.charAt(peg$currPos))) {\n                    s1 = input.charAt(peg$currPos);\n                    peg$currPos++;\n                }\n                else {\n                    s1 = peg$FAILED;\n                    if (peg$silentFails === 0) {\n                        peg$fail(peg$c164);\n                    }\n                }\n            }\n        }\n        else {\n            s0 = peg$FAILED;\n        }\n        peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n        return s0;\n    }\n    function peg$parseLetters() {\n        var s0, s1;\n        var key = peg$currPos * 34 + 32;\n        var cached = peg$resultsCache[key];\n        if (cached) {\n            peg$currPos = cached.nextPos;\n            return cached.result;\n        }\n        s0 = [];\n        if (peg$c165.test(input.charAt(peg$currPos))) {\n            s1 = input.charAt(peg$currPos);\n            peg$currPos++;\n        }\n        else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c166);\n            }\n        }\n        if (s1 !== peg$FAILED) {\n            while (s1 !== peg$FAILED) {\n                s0.push(s1);\n                if (peg$c165.test(input.charAt(peg$currPos))) {\n                    s1 = input.charAt(peg$currPos);\n                    peg$currPos++;\n                }\n                else {\n                    s1 = peg$FAILED;\n                    if (peg$silentFails === 0) {\n                        peg$fail(peg$c166);\n                    }\n                }\n            }\n        }\n        else {\n            s0 = peg$FAILED;\n        }\n        peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n        return s0;\n    }\n    function peg$parse_() {\n        var s0, s1;\n        var key = peg$currPos * 34 + 33;\n        var cached = peg$resultsCache[key];\n        if (cached) {\n            peg$currPos = cached.nextPos;\n            return cached.result;\n        }\n        peg$silentFails++;\n        s0 = [];\n        if (peg$c168.test(input.charAt(peg$currPos))) {\n            s1 = input.charAt(peg$currPos);\n            peg$currPos++;\n        }\n        else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c169);\n            }\n        }\n        while (s1 !== peg$FAILED) {\n            s0.push(s1);\n            if (peg$c168.test(input.charAt(peg$currPos))) {\n                s1 = input.charAt(peg$currPos);\n                peg$currPos++;\n            }\n            else {\n                s1 = peg$FAILED;\n                if (peg$silentFails === 0) {\n                    peg$fail(peg$c169);\n                }\n            }\n        }\n        peg$silentFails--;\n        if (s0 === peg$FAILED) {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) {\n                peg$fail(peg$c167);\n            }\n        }\n        peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n        return s0;\n    }\n    function buildBinaryOperand(head, tail, isArithmeticOp) {\n        if (isArithmeticOp === void 0) { isArithmeticOp = false; }\n        return tail.reduce(function (result, elements) {\n            return new _expressions__WEBPACK_IMPORTED_MODULE_0__[\"BinaryOperand\"](elements[1], result, elements[3], isArithmeticOp);\n        }, head);\n    }\n    function flattenArray(array) {\n        return [].concat.apply([], array);\n    }\n    peg$result = peg$startRuleFunction();\n    if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n        return peg$result;\n    }\n    else {\n        if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n            peg$fail(peg$endExpectation());\n        }\n        throw peg$buildStructuredError(peg$maxFailExpected, peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, peg$maxFailPos < input.length\n            ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1)\n            : peg$computeLocation(peg$maxFailPos, peg$maxFailPos));\n    }\n}\nvar parse = peg$parse;\n\n\n/***/ }),\n\n/***/ \"./src/expressions/expressions.ts\":\n/*!****************************************!*\\\n  !*** ./src/expressions/expressions.ts ***!\n  \\****************************************/\n/*! exports provided: Operand, BinaryOperand, UnaryOperand, ArrayOperand, Const, Variable, FunctionOperand, OperandMaker */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1574067__) {\n\n\"use strict\";\n__nested_webpack_require_1574067__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_1574067__.d(__nested_webpack_exports__, \"Operand\", function() { return Operand; });\n/* harmony export (binding) */ __nested_webpack_require_1574067__.d(__nested_webpack_exports__, \"BinaryOperand\", function() { return BinaryOperand; });\n/* harmony export (binding) */ __nested_webpack_require_1574067__.d(__nested_webpack_exports__, \"UnaryOperand\", function() { return UnaryOperand; });\n/* harmony export (binding) */ __nested_webpack_require_1574067__.d(__nested_webpack_exports__, \"ArrayOperand\", function() { return ArrayOperand; });\n/* harmony export (binding) */ __nested_webpack_require_1574067__.d(__nested_webpack_exports__, \"Const\", function() { return Const; });\n/* harmony export (binding) */ __nested_webpack_require_1574067__.d(__nested_webpack_exports__, \"Variable\", function() { return Variable; });\n/* harmony export (binding) */ __nested_webpack_require_1574067__.d(__nested_webpack_exports__, \"FunctionOperand\", function() { return FunctionOperand; });\n/* harmony export (binding) */ __nested_webpack_require_1574067__.d(__nested_webpack_exports__, \"OperandMaker\", function() { return OperandMaker; });\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1574067__(/*! ../helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _functionsfactory__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1574067__(/*! ../functionsfactory */ \"./src/functionsfactory.ts\");\n/* harmony import */ var _conditionProcessValue__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1574067__(/*! ../conditionProcessValue */ \"./src/conditionProcessValue.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1574067__(/*! ../settings */ \"./src/settings.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n\n\n\n\nvar Operand = /** @class */ (function () {\n    function Operand() {\n    }\n    Operand.prototype.toString = function (func) {\n        if (func === void 0) { func = undefined; }\n        return \"\";\n    };\n    Operand.prototype.hasFunction = function () {\n        return false;\n    };\n    Operand.prototype.hasAsyncFunction = function () { return false; };\n    Operand.prototype.addToAsyncList = function (list) { };\n    Operand.prototype.isEqual = function (op) {\n        return !!op && op.getType() === this.getType() && this.isContentEqual(op);\n    };\n    Operand.prototype.areOperatorsEquals = function (op1, op2) {\n        return !op1 && !op2 || !!op1 && op1.isEqual(op2);\n    };\n    return Operand;\n}());\n\nvar BinaryOperand = /** @class */ (function (_super) {\n    __extends(BinaryOperand, _super);\n    function BinaryOperand(operatorName, left, right, isArithmeticOp) {\n        if (left === void 0) { left = null; }\n        if (right === void 0) { right = null; }\n        if (isArithmeticOp === void 0) { isArithmeticOp = false; }\n        var _this = _super.call(this) || this;\n        _this.operatorName = operatorName;\n        _this.left = left;\n        _this.right = right;\n        _this.isArithmeticValue = isArithmeticOp;\n        if (isArithmeticOp) {\n            _this.consumer = OperandMaker.binaryFunctions[\"arithmeticOp\"](operatorName);\n        }\n        else {\n            _this.consumer = OperandMaker.binaryFunctions[operatorName];\n        }\n        if (_this.consumer == null) {\n            OperandMaker.throwInvalidOperatorError(operatorName);\n        }\n        return _this;\n    }\n    Object.defineProperty(BinaryOperand.prototype, \"requireStrictCompare\", {\n        get: function () {\n            return this.getIsOperandRequireStrict(this.left) ||\n                this.getIsOperandRequireStrict(this.right);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    BinaryOperand.prototype.getIsOperandRequireStrict = function (op) {\n        return !!op && op.requireStrictCompare;\n    };\n    BinaryOperand.prototype.getType = function () {\n        return \"binary\";\n    };\n    Object.defineProperty(BinaryOperand.prototype, \"isArithmetic\", {\n        get: function () {\n            return this.isArithmeticValue;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(BinaryOperand.prototype, \"isConjunction\", {\n        get: function () {\n            return this.operatorName == \"or\" || this.operatorName == \"and\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(BinaryOperand.prototype, \"conjunction\", {\n        get: function () {\n            return this.isConjunction ? this.operatorName : \"\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(BinaryOperand.prototype, \"operator\", {\n        get: function () {\n            return this.operatorName;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(BinaryOperand.prototype, \"leftOperand\", {\n        get: function () {\n            return this.left;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(BinaryOperand.prototype, \"rightOperand\", {\n        get: function () {\n            return this.right;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    BinaryOperand.prototype.isContentEqual = function (op) {\n        var bOp = op;\n        return bOp.operator === this.operator &&\n            this.areOperatorsEquals(this.left, bOp.left) &&\n            this.areOperatorsEquals(this.right, bOp.right);\n    };\n    BinaryOperand.prototype.evaluateParam = function (x, processValue) {\n        return x == null ? null : x.evaluate(processValue);\n    };\n    BinaryOperand.prototype.evaluate = function (processValue) {\n        return this.consumer.call(this, this.evaluateParam(this.left, processValue), this.evaluateParam(this.right, processValue), this.requireStrictCompare);\n    };\n    BinaryOperand.prototype.toString = function (func) {\n        if (func === void 0) { func = undefined; }\n        if (!!func) {\n            var res = func(this);\n            if (!!res)\n                return res;\n        }\n        return (\"(\" +\n            OperandMaker.safeToString(this.left, func) +\n            \" \" +\n            OperandMaker.operatorToString(this.operatorName) +\n            \" \" +\n            OperandMaker.safeToString(this.right, func) +\n            \")\");\n    };\n    BinaryOperand.prototype.setVariables = function (variables) {\n        if (this.left != null)\n            this.left.setVariables(variables);\n        if (this.right != null)\n            this.right.setVariables(variables);\n    };\n    BinaryOperand.prototype.hasFunction = function () {\n        return ((!!this.left && this.left.hasFunction()) ||\n            (!!this.right && this.right.hasFunction()));\n    };\n    BinaryOperand.prototype.hasAsyncFunction = function () {\n        return ((!!this.left && this.left.hasAsyncFunction()) ||\n            (!!this.right && this.right.hasAsyncFunction()));\n    };\n    BinaryOperand.prototype.addToAsyncList = function (list) {\n        if (!!this.left)\n            this.left.addToAsyncList(list);\n        if (!!this.right)\n            this.right.addToAsyncList(list);\n    };\n    return BinaryOperand;\n}(Operand));\n\nvar UnaryOperand = /** @class */ (function (_super) {\n    __extends(UnaryOperand, _super);\n    function UnaryOperand(expressionValue, operatorName) {\n        var _this = _super.call(this) || this;\n        _this.expressionValue = expressionValue;\n        _this.operatorName = operatorName;\n        _this.consumer = OperandMaker.unaryFunctions[operatorName];\n        if (_this.consumer == null) {\n            OperandMaker.throwInvalidOperatorError(operatorName);\n        }\n        return _this;\n    }\n    Object.defineProperty(UnaryOperand.prototype, \"operator\", {\n        get: function () {\n            return this.operatorName;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(UnaryOperand.prototype, \"expression\", {\n        get: function () {\n            return this.expressionValue;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    UnaryOperand.prototype.getType = function () {\n        return \"unary\";\n    };\n    UnaryOperand.prototype.toString = function (func) {\n        if (func === void 0) { func = undefined; }\n        if (!!func) {\n            var res = func(this);\n            if (!!res)\n                return res;\n        }\n        return (OperandMaker.operatorToString(this.operatorName) +\n            \" \" +\n            this.expression.toString(func));\n    };\n    UnaryOperand.prototype.isContentEqual = function (op) {\n        var uOp = op;\n        return uOp.operator == this.operator && this.areOperatorsEquals(this.expression, uOp.expression);\n    };\n    UnaryOperand.prototype.evaluate = function (processValue) {\n        var value = this.expression.evaluate(processValue);\n        return this.consumer.call(this, value);\n    };\n    UnaryOperand.prototype.setVariables = function (variables) {\n        this.expression.setVariables(variables);\n    };\n    return UnaryOperand;\n}(Operand));\n\nvar ArrayOperand = /** @class */ (function (_super) {\n    __extends(ArrayOperand, _super);\n    function ArrayOperand(values) {\n        var _this = _super.call(this) || this;\n        _this.values = values;\n        return _this;\n    }\n    ArrayOperand.prototype.getType = function () {\n        return \"array\";\n    };\n    ArrayOperand.prototype.toString = function (func) {\n        if (func === void 0) { func = undefined; }\n        if (!!func) {\n            var res = func(this);\n            if (!!res)\n                return res;\n        }\n        return (\"[\" +\n            this.values\n                .map(function (el) {\n                return el.toString(func);\n            })\n                .join(\", \") +\n            \"]\");\n    };\n    ArrayOperand.prototype.evaluate = function (processValue) {\n        return this.values.map(function (el) {\n            return el.evaluate(processValue);\n        });\n    };\n    ArrayOperand.prototype.setVariables = function (variables) {\n        this.values.forEach(function (el) {\n            el.setVariables(variables);\n        });\n    };\n    ArrayOperand.prototype.hasFunction = function () {\n        return this.values.some(function (operand) { return operand.hasFunction(); });\n    };\n    ArrayOperand.prototype.hasAsyncFunction = function () {\n        return this.values.some(function (operand) { return operand.hasAsyncFunction(); });\n    };\n    ArrayOperand.prototype.addToAsyncList = function (list) {\n        this.values.forEach(function (operand) { return operand.addToAsyncList(list); });\n    };\n    ArrayOperand.prototype.isContentEqual = function (op) {\n        var aOp = op;\n        if (aOp.values.length !== this.values.length)\n            return false;\n        for (var i = 0; i < this.values.length; i++) {\n            if (!aOp.values[i].isEqual(this.values[i]))\n                return false;\n        }\n        return true;\n    };\n    return ArrayOperand;\n}(Operand));\n\nvar Const = /** @class */ (function (_super) {\n    __extends(Const, _super);\n    function Const(value) {\n        var _this = _super.call(this) || this;\n        _this.value = value;\n        return _this;\n    }\n    Const.prototype.getType = function () {\n        return \"const\";\n    };\n    Const.prototype.toString = function (func) {\n        if (func === void 0) { func = undefined; }\n        if (!!func) {\n            var res = func(this);\n            if (!!res)\n                return res;\n        }\n        return this.value.toString();\n    };\n    Object.defineProperty(Const.prototype, \"correctValue\", {\n        get: function () {\n            return this.getCorrectValue(this.value);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Const.prototype, \"requireStrictCompare\", {\n        get: function () { return false; },\n        enumerable: false,\n        configurable: true\n    });\n    Const.prototype.evaluate = function () {\n        return this.getCorrectValue(this.value);\n    };\n    Const.prototype.setVariables = function (variables) { };\n    Const.prototype.getCorrectValue = function (value) {\n        if (!value || typeof value != \"string\")\n            return value;\n        if (this.isBooleanValue(value))\n            return value.toLowerCase() === \"true\";\n        if (value.length > 1 &&\n            this.isQuote(value[0]) &&\n            this.isQuote(value[value.length - 1]))\n            return value.substring(1, value.length - 1);\n        if (OperandMaker.isNumeric(value)) {\n            if (value.indexOf(\"0x\") == 0)\n                return parseInt(value);\n            if (value.length > 1 && value[0] == \"0\" && (value.length < 2 || (value[1] !== \".\" && value[1] !== \",\")))\n                return value;\n            return parseFloat(value);\n        }\n        return value;\n    };\n    Const.prototype.isContentEqual = function (op) {\n        var cOp = op;\n        return cOp.value == this.value;\n    };\n    Const.prototype.isQuote = function (ch) {\n        return ch == \"'\" || ch == '\"';\n    };\n    Const.prototype.isBooleanValue = function (value) {\n        return (value &&\n            (value.toLowerCase() === \"true\" || value.toLowerCase() === \"false\"));\n    };\n    return Const;\n}(Operand));\n\nvar Variable = /** @class */ (function (_super) {\n    __extends(Variable, _super);\n    function Variable(variableName) {\n        var _this = _super.call(this, variableName) || this;\n        _this.variableName = variableName;\n        _this.valueInfo = {};\n        _this.useValueAsItIs = false;\n        if (!!_this.variableName &&\n            _this.variableName.length > 1 &&\n            _this.variableName[0] === Variable.DisableConversionChar) {\n            _this.variableName = _this.variableName.substring(1);\n            _this.useValueAsItIs = true;\n        }\n        return _this;\n    }\n    Object.defineProperty(Variable, \"DisableConversionChar\", {\n        get: function () { return _settings__WEBPACK_IMPORTED_MODULE_3__[\"settings\"].expressionDisableConversionChar; },\n        set: function (val) { _settings__WEBPACK_IMPORTED_MODULE_3__[\"settings\"].expressionDisableConversionChar = val; },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Variable.prototype, \"requireStrictCompare\", {\n        get: function () {\n            return this.valueInfo.sctrictCompare === true;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Variable.prototype.getType = function () {\n        return \"variable\";\n    };\n    Variable.prototype.toString = function (func) {\n        if (func === void 0) { func = undefined; }\n        if (!!func) {\n            var res = func(this);\n            if (!!res)\n                return res;\n        }\n        var prefix = this.useValueAsItIs ? Variable.DisableConversionChar : \"\";\n        return \"{\" + prefix + this.variableName + \"}\";\n    };\n    Object.defineProperty(Variable.prototype, \"variable\", {\n        get: function () {\n            return this.variableName;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Variable.prototype.evaluate = function (processValue) {\n        this.valueInfo.name = this.variableName;\n        processValue.getValueInfo(this.valueInfo);\n        return this.valueInfo.hasValue\n            ? this.getCorrectValue(this.valueInfo.value)\n            : null;\n    };\n    Variable.prototype.setVariables = function (variables) {\n        variables.push(this.variableName);\n    };\n    Variable.prototype.getCorrectValue = function (value) {\n        if (this.useValueAsItIs)\n            return value;\n        return _super.prototype.getCorrectValue.call(this, value);\n    };\n    Variable.prototype.isContentEqual = function (op) {\n        var vOp = op;\n        return vOp.variable == this.variable;\n    };\n    return Variable;\n}(Const));\n\nvar FunctionOperand = /** @class */ (function (_super) {\n    __extends(FunctionOperand, _super);\n    function FunctionOperand(originalValue, parameters) {\n        var _this = _super.call(this) || this;\n        _this.originalValue = originalValue;\n        _this.parameters = parameters;\n        _this.isReadyValue = false;\n        if (Array.isArray(parameters) && parameters.length === 0) {\n            _this.parameters = new ArrayOperand([]);\n        }\n        return _this;\n    }\n    FunctionOperand.prototype.getType = function () {\n        return \"function\";\n    };\n    FunctionOperand.prototype.evaluateAsync = function (processValue) {\n        var _this = this;\n        this.isReadyValue = false;\n        var asyncProcessValue = new _conditionProcessValue__WEBPACK_IMPORTED_MODULE_2__[\"ProcessValue\"]();\n        asyncProcessValue.values = _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].createCopy(processValue.values);\n        asyncProcessValue.properties = _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].createCopy(processValue.properties);\n        asyncProcessValue.properties.returnResult = function (result) {\n            _this.asynResult = result;\n            _this.isReadyValue = true;\n            _this.onAsyncReady();\n        };\n        this.evaluateCore(asyncProcessValue);\n    };\n    FunctionOperand.prototype.evaluate = function (processValue) {\n        if (this.isReady)\n            return this.asynResult;\n        return this.evaluateCore(processValue);\n    };\n    FunctionOperand.prototype.evaluateCore = function (processValue) {\n        return _functionsfactory__WEBPACK_IMPORTED_MODULE_1__[\"FunctionFactory\"].Instance.run(this.originalValue, this.parameters.evaluate(processValue), processValue.properties);\n    };\n    FunctionOperand.prototype.toString = function (func) {\n        if (func === void 0) { func = undefined; }\n        if (!!func) {\n            var res = func(this);\n            if (!!res)\n                return res;\n        }\n        return this.originalValue + \"(\" + this.parameters.toString(func) + \")\";\n    };\n    FunctionOperand.prototype.setVariables = function (variables) {\n        this.parameters.setVariables(variables);\n    };\n    Object.defineProperty(FunctionOperand.prototype, \"isReady\", {\n        get: function () {\n            return this.isReadyValue;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    FunctionOperand.prototype.hasFunction = function () {\n        return true;\n    };\n    FunctionOperand.prototype.hasAsyncFunction = function () {\n        return _functionsfactory__WEBPACK_IMPORTED_MODULE_1__[\"FunctionFactory\"].Instance.isAsyncFunction(this.originalValue);\n    };\n    FunctionOperand.prototype.addToAsyncList = function (list) {\n        if (this.hasAsyncFunction()) {\n            list.push(this);\n        }\n    };\n    FunctionOperand.prototype.isContentEqual = function (op) {\n        var fOp = op;\n        return fOp.originalValue == this.originalValue && this.areOperatorsEquals(fOp.parameters, this.parameters);\n    };\n    return FunctionOperand;\n}(Operand));\n\nvar OperandMaker = /** @class */ (function () {\n    function OperandMaker() {\n    }\n    OperandMaker.throwInvalidOperatorError = function (op) {\n        throw new Error(\"Invalid operator: '\" + op + \"'\");\n    };\n    OperandMaker.safeToString = function (operand, func) {\n        return operand == null ? \"\" : operand.toString(func);\n    };\n    OperandMaker.toOperandString = function (value) {\n        if (!!value &&\n            !OperandMaker.isNumeric(value) &&\n            !OperandMaker.isBooleanValue(value))\n            value = \"'\" + value + \"'\";\n        return value;\n    };\n    OperandMaker.isSpaceString = function (str) {\n        return !!str && !str.replace(\" \", \"\");\n    };\n    OperandMaker.isNumeric = function (value) {\n        if (!!value &&\n            (value.indexOf(\"-\") > -1 ||\n                value.indexOf(\"+\") > 1 ||\n                value.indexOf(\"*\") > -1 ||\n                value.indexOf(\"^\") > -1 ||\n                value.indexOf(\"/\") > -1 ||\n                value.indexOf(\"%\") > -1))\n            return false;\n        if (OperandMaker.isSpaceString(value))\n            return false;\n        return _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isNumber(value);\n    };\n    OperandMaker.isBooleanValue = function (value) {\n        return (!!value &&\n            (value.toLowerCase() === \"true\" || value.toLowerCase() === \"false\"));\n    };\n    OperandMaker.countDecimals = function (value) {\n        if (_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isNumber(value) && Math.floor(value) !== value) {\n            var strs = value.toString().split(\".\");\n            return strs.length > 1 && strs[1].length || 0;\n        }\n        return 0;\n    };\n    OperandMaker.plusMinus = function (a, b, res) {\n        var digitsA = OperandMaker.countDecimals(a);\n        var digitsB = OperandMaker.countDecimals(b);\n        if (digitsA > 0 || digitsB > 0) {\n            var digits = Math.max(digitsA, digitsB);\n            res = parseFloat(res.toFixed(digits));\n        }\n        return res;\n    };\n    OperandMaker.isTwoValueEquals = function (x, y, ignoreOrder) {\n        if (ignoreOrder === void 0) { ignoreOrder = true; }\n        if (x === \"undefined\")\n            x = undefined;\n        if (y === \"undefined\")\n            y = undefined;\n        return _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isTwoValueEquals(x, y, ignoreOrder);\n    };\n    OperandMaker.operatorToString = function (operatorName) {\n        var opStr = OperandMaker.signs[operatorName];\n        return opStr == null ? operatorName : opStr;\n    };\n    OperandMaker.convertValForDateCompare = function (val, second) {\n        if (second instanceof Date && typeof val === \"string\") {\n            var res = new Date(val);\n            res.setHours(0, 0, 0);\n            return res;\n        }\n        return val;\n    };\n    OperandMaker.unaryFunctions = {\n        empty: function (value) {\n            return _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(value);\n        },\n        notempty: function (value) {\n            return !OperandMaker.unaryFunctions.empty(value);\n        },\n        negate: function (value) {\n            return !value;\n        },\n    };\n    OperandMaker.binaryFunctions = {\n        arithmeticOp: function (operatorName) {\n            var convertForArithmeticOp = function (val, second) {\n                if (!_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(val))\n                    return val;\n                if (typeof second === \"number\")\n                    return 0;\n                if (typeof val === \"string\")\n                    return val;\n                if (typeof second === \"string\")\n                    return \"\";\n                if (Array.isArray(second))\n                    return [];\n                return 0;\n            };\n            return function (a, b) {\n                a = convertForArithmeticOp(a, b);\n                b = convertForArithmeticOp(b, a);\n                var consumer = OperandMaker.binaryFunctions[operatorName];\n                return consumer == null ? null : consumer.call(this, a, b);\n            };\n        },\n        and: function (a, b) {\n            return a && b;\n        },\n        or: function (a, b) {\n            return a || b;\n        },\n        plus: function (a, b) {\n            return _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].sumAnyValues(a, b);\n        },\n        minus: function (a, b) {\n            return _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].correctAfterPlusMinis(a, b, a - b);\n        },\n        mul: function (a, b) {\n            return _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].correctAfterMultiple(a, b, a * b);\n        },\n        div: function (a, b) {\n            if (!b)\n                return null;\n            return a / b;\n        },\n        mod: function (a, b) {\n            if (!b)\n                return null;\n            return a % b;\n        },\n        power: function (a, b) {\n            return Math.pow(a, b);\n        },\n        greater: function (left, right) {\n            if (left == null || right == null)\n                return false;\n            left = OperandMaker.convertValForDateCompare(left, right);\n            right = OperandMaker.convertValForDateCompare(right, left);\n            return left > right;\n        },\n        less: function (left, right) {\n            if (left == null || right == null)\n                return false;\n            left = OperandMaker.convertValForDateCompare(left, right);\n            right = OperandMaker.convertValForDateCompare(right, left);\n            return left < right;\n        },\n        greaterorequal: function (left, right) {\n            if (OperandMaker.binaryFunctions.equal(left, right))\n                return true;\n            return OperandMaker.binaryFunctions.greater(left, right);\n        },\n        lessorequal: function (left, right) {\n            if (OperandMaker.binaryFunctions.equal(left, right))\n                return true;\n            return OperandMaker.binaryFunctions.less(left, right);\n        },\n        equal: function (left, right, strictCompare) {\n            left = OperandMaker.convertValForDateCompare(left, right);\n            right = OperandMaker.convertValForDateCompare(right, left);\n            return OperandMaker.isTwoValueEquals(left, right, strictCompare !== true);\n        },\n        notequal: function (left, right) {\n            return !OperandMaker.binaryFunctions.equal(left, right);\n        },\n        contains: function (left, right) {\n            return OperandMaker.binaryFunctions.containsCore(left, right, true);\n        },\n        notcontains: function (left, right) {\n            if (!left && !_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(right))\n                return true;\n            return OperandMaker.binaryFunctions.containsCore(left, right, false);\n        },\n        anyof: function (left, right) {\n            if (_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(left) && _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(right))\n                return true;\n            if (_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(left) ||\n                (!Array.isArray(left) && left.length === 0))\n                return false;\n            if (_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(right))\n                return true;\n            if (!Array.isArray(left))\n                return OperandMaker.binaryFunctions.contains(right, left);\n            if (!Array.isArray(right))\n                return OperandMaker.binaryFunctions.contains(left, right);\n            for (var i = 0; i < right.length; i++) {\n                if (OperandMaker.binaryFunctions.contains(left, right[i]))\n                    return true;\n            }\n            return false;\n        },\n        allof: function (left, right) {\n            if (!left && !_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(right))\n                return false;\n            if (!Array.isArray(right))\n                return OperandMaker.binaryFunctions.contains(left, right);\n            for (var i = 0; i < right.length; i++) {\n                if (!OperandMaker.binaryFunctions.contains(left, right[i]))\n                    return false;\n            }\n            return true;\n        },\n        containsCore: function (left, right, isContains) {\n            if (!left && left !== 0 && left !== false)\n                return false;\n            if (!left.length) {\n                left = left.toString();\n                if (typeof right === \"string\" || right instanceof String) {\n                    left = left.toUpperCase();\n                    right = right.toUpperCase();\n                }\n            }\n            if (typeof left === \"string\" || left instanceof String) {\n                if (!right)\n                    return false;\n                right = right.toString();\n                var found = left.indexOf(right) > -1;\n                return isContains ? found : !found;\n            }\n            var rightArray = Array.isArray(right) ? right : [right];\n            for (var rIndex = 0; rIndex < rightArray.length; rIndex++) {\n                var i = 0;\n                right = rightArray[rIndex];\n                for (; i < left.length; i++) {\n                    if (OperandMaker.isTwoValueEquals(left[i], right))\n                        break;\n                }\n                if (i == left.length)\n                    return !isContains;\n            }\n            return isContains;\n        },\n    };\n    OperandMaker.signs = {\n        less: \"<\",\n        lessorequal: \"<=\",\n        greater: \">\",\n        greaterorequal: \">=\",\n        equal: \"==\",\n        notequal: \"!=\",\n        plus: \"+\",\n        minus: \"-\",\n        mul: \"*\",\n        div: \"/\",\n        and: \"and\",\n        or: \"or\",\n        power: \"^\",\n        mod: \"%\",\n        negate: \"!\",\n    };\n    return OperandMaker;\n}());\n\n\n\n/***/ }),\n\n/***/ \"./src/flowpanel.ts\":\n/*!**************************!*\\\n  !*** ./src/flowpanel.ts ***!\n  \\**************************/\n/*! exports provided: FlowPanelModel */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1603724__) {\n\n\"use strict\";\n__nested_webpack_require_1603724__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_1603724__.d(__nested_webpack_exports__, \"FlowPanelModel\", function() { return FlowPanelModel; });\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1603724__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _panel__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1603724__(/*! ./panel */ \"./src/panel.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n\n\n/**\n * The flow panel object. It is a container with flow layout where you can mix questions with markdown text.\n *\n */\nvar FlowPanelModel = /** @class */ (function (_super) {\n    __extends(FlowPanelModel, _super);\n    function FlowPanelModel(name) {\n        if (name === void 0) { name = \"\"; }\n        var _this = _super.call(this, name) || this;\n        _this.createLocalizableString(\"content\", _this, true);\n        _this.registerPropertyChangedHandlers([\"content\"], function () {\n            _this.onContentChanged();\n        });\n        return _this;\n    }\n    FlowPanelModel.prototype.getType = function () {\n        return \"flowpanel\";\n    };\n    FlowPanelModel.prototype.getChildrenLayoutType = function () {\n        return \"flow\";\n    };\n    FlowPanelModel.prototype.onSurveyLoad = function () {\n        _super.prototype.onSurveyLoad.call(this);\n        this.onContentChanged();\n    };\n    Object.defineProperty(FlowPanelModel.prototype, \"content\", {\n        get: function () {\n            return this.getLocalizableStringText(\"content\");\n        },\n        set: function (val) {\n            this.setLocalizableStringText(\"content\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(FlowPanelModel.prototype, \"locContent\", {\n        get: function () {\n            return this.getLocalizableString(\"content\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(FlowPanelModel.prototype, \"html\", {\n        get: function () {\n            return this.getPropertyValue(\"html\", \"\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"html\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    FlowPanelModel.prototype.onContentChanged = function () {\n        var html = \"\";\n        if (!!this.onCustomHtmlProducing) {\n            html = this.onCustomHtmlProducing();\n        }\n        else {\n            html = this.produceHtml();\n        }\n        this.html = html;\n        if (!!this.contentChangedCallback)\n            this.contentChangedCallback();\n    };\n    FlowPanelModel.prototype.produceHtml = function () {\n        var html = [];\n        //contentElementNamePrefix\n        var regEx = /{(.*?(element:)[^$].*?)}/g;\n        var str = this.content;\n        var startIndex = 0;\n        var res = null;\n        while ((res = regEx.exec(str)) !== null) {\n            if (res.index > startIndex) {\n                html.push(str.substring(startIndex, res.index));\n                startIndex = res.index;\n            }\n            var question = this.getQuestionFromText(res[0]);\n            if (!!question) {\n                html.push(this.getHtmlForQuestion(question));\n            }\n            else {\n                html.push(str.substring(startIndex, res.index + res[0].length));\n            }\n            startIndex = res.index + res[0].length;\n        }\n        if (startIndex < str.length) {\n            html.push(str.substring(startIndex, str.length));\n        }\n        return html.join(\"\").replace(new RegExp(\"<br>\", \"g\"), \"<br/>\");\n    };\n    FlowPanelModel.prototype.getQuestionFromText = function (str) {\n        str = str.substring(1, str.length - 1);\n        str = str.replace(FlowPanelModel.contentElementNamePrefix, \"\").trim();\n        return this.getQuestionByName(str);\n    };\n    FlowPanelModel.prototype.getHtmlForQuestion = function (question) {\n        if (!!this.onGetHtmlForQuestion)\n            return this.onGetHtmlForQuestion(question);\n        return \"\";\n    };\n    FlowPanelModel.prototype.getQuestionHtmlId = function (question) {\n        return this.name + \"_\" + question.id;\n    };\n    FlowPanelModel.prototype.onAddElement = function (element, index) {\n        _super.prototype.onAddElement.call(this, element, index);\n        this.addElementToContent(element);\n        element.renderWidth = \"\";\n    };\n    FlowPanelModel.prototype.onRemoveElement = function (element) {\n        var searchStr = this.getElementContentText(element);\n        this.content = this.content.replace(searchStr, \"\");\n        _super.prototype.onRemoveElement.call(this, element);\n    };\n    FlowPanelModel.prototype.dragDropMoveElement = function (src, target, targetIndex) { };\n    FlowPanelModel.prototype.addElementToContent = function (element) {\n        if (this.isLoadingFromJson)\n            return;\n        var text = this.getElementContentText(element);\n        if (!this.insertTextAtCursor(text)) {\n            this.content = this.content + text;\n        }\n    };\n    FlowPanelModel.prototype.insertTextAtCursor = function (text, prevName) {\n        if (prevName === void 0) { prevName = null; }\n        if (!this.isDesignMode ||\n            typeof document === \"undefined\" ||\n            !window.getSelection)\n            return false;\n        var sel = window.getSelection();\n        if (sel.getRangeAt && sel.rangeCount) {\n            var range = sel.getRangeAt(0);\n            range.deleteContents();\n            range.insertNode(document.createTextNode(text));\n            var self = this;\n            if (self.getContent) {\n                var str = self.getContent(prevName);\n                this.content = str;\n            }\n            return true;\n        }\n        return false;\n    };\n    FlowPanelModel.prototype.getElementContentText = function (element) {\n        return \"{\" + FlowPanelModel.contentElementNamePrefix + element.name + \"}\";\n    };\n    FlowPanelModel.contentElementNamePrefix = \"element:\";\n    return FlowPanelModel;\n}(_panel__WEBPACK_IMPORTED_MODULE_1__[\"PanelModel\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"flowpanel\", [{ name: \"content:html\", serializationProperty: \"locContent\" }], function () {\n    return new FlowPanelModel();\n}, \"panel\");\n\n\n/***/ }),\n\n/***/ \"./src/functionsfactory.ts\":\n/*!*********************************!*\\\n  !*** ./src/functionsfactory.ts ***!\n  \\*********************************/\n/*! exports provided: FunctionFactory, registerFunction */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1611017__) {\n\n\"use strict\";\n__nested_webpack_require_1611017__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_1611017__.d(__nested_webpack_exports__, \"FunctionFactory\", function() { return FunctionFactory; });\n/* harmony export (binding) */ __nested_webpack_require_1611017__.d(__nested_webpack_exports__, \"registerFunction\", function() { return registerFunction; });\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1611017__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1611017__(/*! ./settings */ \"./src/settings.ts\");\n\n\nvar FunctionFactory = /** @class */ (function () {\n    function FunctionFactory() {\n        this.functionHash = {};\n        this.isAsyncHash = {};\n    }\n    FunctionFactory.prototype.register = function (name, func, isAsync) {\n        if (isAsync === void 0) { isAsync = false; }\n        this.functionHash[name] = func;\n        if (isAsync)\n            this.isAsyncHash[name] = true;\n    };\n    FunctionFactory.prototype.unregister = function (name) {\n        delete this.functionHash[name];\n        delete this.isAsyncHash[name];\n    };\n    FunctionFactory.prototype.hasFunction = function (name) {\n        return !!this.functionHash[name];\n    };\n    FunctionFactory.prototype.isAsyncFunction = function (name) {\n        return !!this.isAsyncHash[name];\n    };\n    FunctionFactory.prototype.clear = function () {\n        this.functionHash = {};\n    };\n    FunctionFactory.prototype.getAll = function () {\n        var result = [];\n        for (var key in this.functionHash) {\n            result.push(key);\n        }\n        return result.sort();\n    };\n    FunctionFactory.prototype.run = function (name, params, properties) {\n        if (properties === void 0) { properties = null; }\n        var func = this.functionHash[name];\n        if (!func)\n            return null;\n        var classRunner = {\n            func: func,\n        };\n        if (properties) {\n            for (var key in properties) {\n                classRunner[key] = properties[key];\n            }\n        }\n        return classRunner.func(params);\n    };\n    FunctionFactory.Instance = new FunctionFactory();\n    return FunctionFactory;\n}());\n\nvar registerFunction = FunctionFactory.Instance.register;\nfunction getParamsAsArray(value, arr) {\n    if (value === undefined || value === null)\n        return;\n    if (Array.isArray(value)) {\n        for (var i = 0; i < value.length; i++) {\n            getParamsAsArray(value[i], arr);\n        }\n    }\n    else {\n        if (_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isNumber(value)) {\n            value = _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].getNumber(value);\n        }\n        arr.push(value);\n    }\n}\nfunction sum(params) {\n    var arr = [];\n    getParamsAsArray(params, arr);\n    var res = 0;\n    for (var i = 0; i < arr.length; i++) {\n        res = _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].correctAfterPlusMinis(res, arr[i], res + arr[i]);\n    }\n    return res;\n}\nFunctionFactory.Instance.register(\"sum\", sum);\nfunction min_max(params, isMin) {\n    var arr = [];\n    getParamsAsArray(params, arr);\n    var res = undefined;\n    for (var i = 0; i < arr.length; i++) {\n        if (res === undefined) {\n            res = arr[i];\n        }\n        if (isMin) {\n            if (res > arr[i])\n                res = arr[i];\n        }\n        else {\n            if (res < arr[i])\n                res = arr[i];\n        }\n    }\n    return res;\n}\nfunction min(params) {\n    return min_max(params, true);\n}\nFunctionFactory.Instance.register(\"min\", min);\nfunction max(params) {\n    return min_max(params, false);\n}\nFunctionFactory.Instance.register(\"max\", max);\nfunction count(params) {\n    var arr = [];\n    getParamsAsArray(params, arr);\n    return arr.length;\n}\nFunctionFactory.Instance.register(\"count\", count);\nfunction avg(params) {\n    var arr = [];\n    getParamsAsArray(params, arr);\n    var res = sum(params);\n    return arr.length > 0 ? res / arr.length : 0;\n}\nFunctionFactory.Instance.register(\"avg\", avg);\nfunction getInArrayParams(params) {\n    if (params.length != 2)\n        return null;\n    var arr = params[0];\n    if (!arr)\n        return null;\n    if (!Array.isArray(arr) && !Array.isArray(Object.keys(arr)))\n        return null;\n    var name = params[1];\n    if (typeof name !== \"string\" && !(name instanceof String))\n        return null;\n    return { data: arr, name: name };\n}\nfunction convertToNumber(val) {\n    if (typeof val === \"string\")\n        return _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isNumber(val) ? _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].getNumber(val) : undefined;\n    return val;\n}\nfunction processItemInArray(item, name, res, func, needToConvert) {\n    if (!item || _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(item[name]))\n        return res;\n    var val = needToConvert ? convertToNumber(item[name]) : 1;\n    return func(res, val);\n}\nfunction calcInArray(params, func, needToConvert) {\n    if (needToConvert === void 0) { needToConvert = true; }\n    var v = getInArrayParams(params);\n    if (!v)\n        return undefined;\n    var res = undefined;\n    if (Array.isArray(v.data)) {\n        for (var i = 0; i < v.data.length; i++) {\n            res = processItemInArray(v.data[i], v.name, res, func, needToConvert);\n        }\n    }\n    else {\n        for (var key in v.data) {\n            res = processItemInArray(v.data[key], v.name, res, func, needToConvert);\n        }\n    }\n    return res;\n}\nfunction sumInArray(params) {\n    var res = calcInArray(params, function (res, val) {\n        if (res == undefined)\n            res = 0;\n        if (val == undefined || val == null)\n            return res;\n        return _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].correctAfterPlusMinis(res, val, res + val);\n    });\n    return res !== undefined ? res : 0;\n}\nFunctionFactory.Instance.register(\"sumInArray\", sumInArray);\nfunction minInArray(params) {\n    return calcInArray(params, function (res, val) {\n        if (res == undefined)\n            return val;\n        if (val == undefined || val == null)\n            return res;\n        return res < val ? res : val;\n    });\n}\nFunctionFactory.Instance.register(\"minInArray\", minInArray);\nfunction maxInArray(params) {\n    return calcInArray(params, function (res, val) {\n        if (res == undefined)\n            return val;\n        if (val == undefined || val == null)\n            return res;\n        return res > val ? res : val;\n    });\n}\nFunctionFactory.Instance.register(\"maxInArray\", maxInArray);\nfunction countInArray(params) {\n    var res = calcInArray(params, function (res, val) {\n        if (res == undefined)\n            res = 0;\n        if (val == undefined || val == null)\n            return res;\n        return res + 1;\n    }, false);\n    return res !== undefined ? res : 0;\n}\nFunctionFactory.Instance.register(\"countInArray\", countInArray);\nfunction avgInArray(params) {\n    var count = countInArray(params);\n    if (count == 0)\n        return 0;\n    return sumInArray(params) / count;\n}\nFunctionFactory.Instance.register(\"avgInArray\", avgInArray);\nfunction iif(params) {\n    if (!params && params.length !== 3)\n        return \"\";\n    return params[0] ? params[1] : params[2];\n}\nFunctionFactory.Instance.register(\"iif\", iif);\nfunction getDate(params) {\n    if (!params && params.length < 1)\n        return null;\n    if (!params[0])\n        return null;\n    return new Date(params[0]);\n}\nFunctionFactory.Instance.register(\"getDate\", getDate);\nfunction age(params) {\n    if (!params && params.length < 1)\n        return null;\n    if (!params[0])\n        return null;\n    var birthDate = new Date(params[0]);\n    var today = new Date();\n    var age = today.getFullYear() - birthDate.getFullYear();\n    var m = today.getMonth() - birthDate.getMonth();\n    if (m < 0 || (m === 0 && today.getDate() < birthDate.getDate())) {\n        age -= age > 0 ? 1 : 0;\n    }\n    return age;\n}\nFunctionFactory.Instance.register(\"age\", age);\nfunction isContainerReadyCore(container) {\n    if (!container)\n        return false;\n    var questions = container.questions;\n    for (var i = 0; i < questions.length; i++) {\n        if (!questions[i].validate(false))\n            return false;\n    }\n    return true;\n}\nfunction isContainerReady(params) {\n    if (!params && params.length < 1)\n        return false;\n    if (!params[0] || !this.survey)\n        return false;\n    var name = params[0];\n    var container = this.survey.getPageByName(name);\n    if (!container)\n        container = this.survey.getPanelByName(name);\n    if (!container) {\n        var question = this.survey.getQuestionByName(name);\n        if (!question || !Array.isArray(question.panels))\n            return false;\n        if (params.length > 1) {\n            if (params[1] < question.panels.length) {\n                container = question.panels[params[1]];\n            }\n        }\n        else {\n            for (var i = 0; i < question.panels.length; i++) {\n                if (!isContainerReadyCore(question.panels[i]))\n                    return false;\n            }\n            return true;\n        }\n    }\n    return isContainerReadyCore(container);\n}\nFunctionFactory.Instance.register(\"isContainerReady\", isContainerReady);\nfunction isDisplayMode() {\n    return this.survey && this.survey.isDisplayMode;\n}\nFunctionFactory.Instance.register(\"isDisplayMode\", isDisplayMode);\nfunction currentDate() {\n    return new Date();\n}\nFunctionFactory.Instance.register(\"currentDate\", currentDate);\nfunction today(params) {\n    var res = new Date();\n    if (_settings__WEBPACK_IMPORTED_MODULE_1__[\"settings\"].localization.useLocalTimeZone) {\n        res.setHours(0, 0, 0, 0);\n    }\n    else {\n        res.setUTCHours(0, 0, 0, 0);\n    }\n    if (Array.isArray(params) && params.length == 1) {\n        res.setDate(res.getDate() + params[0]);\n    }\n    return res;\n}\nFunctionFactory.Instance.register(\"today\", today);\nfunction getYear(params) {\n    if (params.length !== 1 || !params[0])\n        return undefined;\n    return new Date(params[0]).getFullYear();\n}\nFunctionFactory.Instance.register(\"getYear\", getYear);\nfunction currentYear() {\n    return new Date().getFullYear();\n}\nFunctionFactory.Instance.register(\"currentYear\", currentYear);\nfunction diffDays(params) {\n    if (!Array.isArray(params) || params.length !== 2)\n        return 0;\n    if (!params[0] || !params[1])\n        return 0;\n    var date1 = new Date(params[0]);\n    var date2 = new Date(params[1]);\n    var diffTime = Math.abs(date2 - date1);\n    return Math.ceil(diffTime / (1000 * 60 * 60 * 24));\n}\nFunctionFactory.Instance.register(\"diffDays\", diffDays);\nfunction dateFromFirstParameterOrToday(params) {\n    var date = today(undefined);\n    if (params && params[0]) {\n        date = new Date(params[0]);\n    }\n    return date;\n}\nfunction year(params) {\n    var date = dateFromFirstParameterOrToday(params);\n    return date.getFullYear();\n}\nFunctionFactory.Instance.register(\"year\", year);\nfunction month(params) {\n    var date = dateFromFirstParameterOrToday(params);\n    return date.getMonth() + 1;\n}\nFunctionFactory.Instance.register(\"month\", month);\nfunction day(params) {\n    var date = dateFromFirstParameterOrToday(params);\n    return date.getDate();\n}\nFunctionFactory.Instance.register(\"day\", day);\nfunction weekday(params) {\n    var date = dateFromFirstParameterOrToday(params);\n    return date.getDay();\n}\nFunctionFactory.Instance.register(\"weekday\", weekday);\nfunction getQuestionValueByContext(context, name) {\n    if (!context || !name)\n        return undefined;\n    var keys = [\"row\", \"panel\", \"survey\"];\n    for (var i = 0; i < keys.length; i++) {\n        var ctx = context[keys[i]];\n        if (ctx && ctx.getQuestionByName) {\n            var res = ctx.getQuestionByName(name);\n            if (res)\n                return res;\n        }\n    }\n    return null;\n}\nfunction displayValue(params) {\n    var q = getQuestionValueByContext(this, params[0]);\n    return q ? q.displayValue : \"\";\n}\nFunctionFactory.Instance.register(\"displayValue\", displayValue);\nfunction propertyValue(params) {\n    if (params.length !== 2 || !params[0] || !params[1])\n        return undefined;\n    var q = getQuestionValueByContext(this, params[0]);\n    return q ? q[params[1]] : undefined;\n}\nFunctionFactory.Instance.register(\"propertyValue\", propertyValue);\n\n\n/***/ }),\n\n/***/ \"./src/helpers.ts\":\n/*!************************!*\\\n  !*** ./src/helpers.ts ***!\n  \\************************/\n/*! exports provided: Helpers */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1623565__) {\n\n\"use strict\";\n__nested_webpack_require_1623565__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_1623565__.d(__nested_webpack_exports__, \"Helpers\", function() { return Helpers; });\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1623565__(/*! ./settings */ \"./src/settings.ts\");\n\nvar Helpers = /** @class */ (function () {\n    function Helpers() {\n    }\n    /**\n     * A static methods that returns true if a value undefined, null, empty string or empty array.\n     * @param value\n     */\n    Helpers.isValueEmpty = function (value) {\n        if (Array.isArray(value) && value.length === 0)\n            return true;\n        if (!!value && Helpers.isValueObject(value) && value.constructor === Object) {\n            for (var key in value) {\n                if (!Helpers.isValueEmpty(value[key]))\n                    return false;\n            }\n            return true;\n        }\n        return !value && value !== 0 && value !== false;\n    };\n    Helpers.isArrayContainsEqual = function (x, y) {\n        if (!Array.isArray(x) || !Array.isArray(y))\n            return false;\n        if (x.length !== y.length)\n            return false;\n        for (var i = 0; i < x.length; i++) {\n            var j = 0;\n            for (; j < y.length; j++) {\n                if (Helpers.isTwoValueEquals(x[i], y[j]))\n                    break;\n            }\n            if (j === y.length)\n                return false;\n        }\n        return true;\n    };\n    Helpers.isArraysEqual = function (x, y, ignoreOrder, caseSensitive, trimStrings) {\n        if (ignoreOrder === void 0) { ignoreOrder = false; }\n        if (!Array.isArray(x) || !Array.isArray(y))\n            return false;\n        if (x.length !== y.length)\n            return false;\n        if (ignoreOrder) {\n            var xSorted = [];\n            var ySorted = [];\n            for (var i = 0; i < x.length; i++) {\n                xSorted.push(x[i]);\n                ySorted.push(y[i]);\n            }\n            xSorted.sort();\n            ySorted.sort();\n            x = xSorted;\n            y = ySorted;\n        }\n        for (var i = 0; i < x.length; i++) {\n            if (!Helpers.isTwoValueEquals(x[i], y[i], ignoreOrder, caseSensitive, trimStrings))\n                return false;\n        }\n        return true;\n    };\n    Helpers.compareStrings = function (x, y) {\n        var normalize = _settings__WEBPACK_IMPORTED_MODULE_0__[\"settings\"].comparator.normalizeTextCallback;\n        if (!!x)\n            x = normalize(x, \"compare\").trim();\n        if (!!y)\n            y = normalize(y, \"compare\").trim();\n        if (!x && !y)\n            return 0;\n        if (!x)\n            return -1;\n        if (!y)\n            return 1;\n        if (x === y)\n            return 0;\n        var digitIndex = -1;\n        for (var i = 0; i < x.length && i < y.length; i++) {\n            if (this.isCharDigit(x[i]) && this.isCharDigit(y[i])) {\n                digitIndex = i;\n                break;\n            }\n            if (x[i] !== y[i])\n                break;\n        }\n        if (digitIndex > -1) {\n            var nX = this.getNumberFromStr(x, digitIndex);\n            var nY = this.getNumberFromStr(y, digitIndex);\n            if (!Number.isNaN(nX) && !Number.isNaN(nY) && nX !== nY) {\n                return nX > nY ? 1 : -1;\n            }\n        }\n        return x > y ? 1 : -1;\n    };\n    Helpers.isTwoValueEquals = function (x, y, ignoreOrder, caseSensitive, trimStrings) {\n        if (ignoreOrder === void 0) { ignoreOrder = false; }\n        if (x === y)\n            return true;\n        if (Array.isArray(x) && x.length === 0 && typeof y === \"undefined\")\n            return true;\n        if (Array.isArray(y) && y.length === 0 && typeof x === \"undefined\")\n            return true;\n        if ((x === undefined || x === null) && y === \"\")\n            return true;\n        if ((y === undefined || y === null) && x === \"\")\n            return true;\n        if (trimStrings === undefined)\n            trimStrings = _settings__WEBPACK_IMPORTED_MODULE_0__[\"settings\"].comparator.trimStrings;\n        if (caseSensitive === undefined)\n            caseSensitive = _settings__WEBPACK_IMPORTED_MODULE_0__[\"settings\"].comparator.caseSensitive;\n        if (typeof x === \"string\" && typeof y === \"string\") {\n            var normalize = _settings__WEBPACK_IMPORTED_MODULE_0__[\"settings\"].comparator.normalizeTextCallback;\n            x = normalize(x, \"compare\");\n            y = normalize(y, \"compare\");\n            if (trimStrings) {\n                x = x.trim();\n                y = y.trim();\n            }\n            if (!caseSensitive) {\n                x = x.toLowerCase();\n                y = y.toLowerCase();\n            }\n            return x === y;\n        }\n        if (x instanceof Date && y instanceof Date)\n            return x.getTime() == y.getTime();\n        if (Helpers.isConvertibleToNumber(x) && Helpers.isConvertibleToNumber(y)) {\n            if (parseInt(x) === parseInt(y) && parseFloat(x) === parseFloat(y)) {\n                return true;\n            }\n        }\n        if ((!Helpers.isValueEmpty(x) && Helpers.isValueEmpty(y)) ||\n            (Helpers.isValueEmpty(x) && !Helpers.isValueEmpty(y)))\n            return false;\n        if ((x === true || x === false) && typeof y == \"string\") {\n            return x.toString() === y.toLocaleLowerCase();\n        }\n        if ((y === true || y === false) && typeof x == \"string\") {\n            return y.toString() === x.toLocaleLowerCase();\n        }\n        if (!Helpers.isValueObject(x) && !Helpers.isValueObject(y))\n            return x == y;\n        if (!Helpers.isValueObject(x) || !Helpers.isValueObject(y))\n            return false;\n        if (x[\"equals\"])\n            return x.equals(y);\n        if (!!x.toJSON && !!y.toJSON && !!x.getType && !!y.getType) {\n            if (x.isDiposed || y.isDiposed)\n                return false;\n            if (x.getType() !== y.getType())\n                return false;\n            if (!!x.name && x.name !== y.name)\n                return false;\n            return this.isTwoValueEquals(x.toJSON(), y.toJSON(), ignoreOrder, caseSensitive, trimStrings);\n        }\n        if (Array.isArray(x) && Array.isArray(y))\n            return Helpers.isArraysEqual(x, y, ignoreOrder, caseSensitive, trimStrings);\n        if (!!x.equalsTo && y.equalsTo)\n            return x.equalsTo(y);\n        for (var p in x) {\n            if (!x.hasOwnProperty(p))\n                continue;\n            if (!y.hasOwnProperty(p))\n                return false;\n            if (!this.isTwoValueEquals(x[p], y[p], ignoreOrder, caseSensitive, trimStrings))\n                return false;\n        }\n        for (p in y) {\n            if (y.hasOwnProperty(p) && !x.hasOwnProperty(p))\n                return false;\n        }\n        return true;\n    };\n    Helpers.randomizeArray = function (array) {\n        for (var i = array.length - 1; i > 0; i--) {\n            var j = Math.floor(Math.random() * (i + 1));\n            var temp = array[i];\n            array[i] = array[j];\n            array[j] = temp;\n        }\n        return array;\n    };\n    Helpers.getUnbindValue = function (value) {\n        if (Array.isArray(value)) {\n            var res = [];\n            for (var i = 0; i < value.length; i++) {\n                res.push(Helpers.getUnbindValue(value[i]));\n            }\n            return res;\n        }\n        if (!!value && Helpers.isValueObject(value) && !(value instanceof Date)) {\n            return JSON.parse(JSON.stringify(value));\n        }\n        return value;\n    };\n    Helpers.createCopy = function (obj) {\n        var res = {};\n        if (!obj)\n            return res;\n        for (var key in obj) {\n            res[key] = obj[key];\n        }\n        return res;\n    };\n    Helpers.isConvertibleToNumber = function (value) {\n        return (value !== undefined &&\n            value !== null &&\n            !Array.isArray(value) &&\n            !isNaN(value));\n    };\n    Helpers.isValueObject = function (val, excludeArray) {\n        return val instanceof Object && (!excludeArray || !Array.isArray(val));\n    };\n    Helpers.isNumber = function (value) {\n        return !isNaN(this.getNumber(value));\n    };\n    Helpers.getNumber = function (value) {\n        if (typeof value == \"string\" &&\n            !!value &&\n            value.indexOf(\"0x\") == 0 &&\n            value.length > 32)\n            return NaN;\n        value = this.prepareStringToNumber(value);\n        var res = parseFloat(value);\n        if (isNaN(res) || !isFinite(value))\n            return NaN;\n        return res;\n    };\n    Helpers.prepareStringToNumber = function (val) {\n        if (typeof val !== \"string\" || !val)\n            return val;\n        var i = val.indexOf(\",\");\n        if (i > -1 && val.indexOf(\",\", i + 1) < 0) {\n            return val.replace(\",\", \".\");\n        }\n        return val;\n    };\n    Helpers.getMaxLength = function (maxLength, surveyLength) {\n        if (maxLength < 0) {\n            maxLength = surveyLength;\n        }\n        return maxLength > 0 ? maxLength : null;\n    };\n    Helpers.getRemainingCharacterCounterText = function (newValue, maxLength) {\n        if (!maxLength || maxLength <= 0 || !_settings__WEBPACK_IMPORTED_MODULE_0__[\"settings\"].showMaxLengthIndicator) {\n            return \"\";\n        }\n        var value = newValue ? newValue.length : \"0\";\n        return [value, maxLength].join(\"/\");\n    };\n    Helpers.getNumberByIndex = function (index, startIndexStr) {\n        if (index < 0)\n            return \"\";\n        var startIndex = 1;\n        var prefix = \"\";\n        var postfix = \".\";\n        var isNumeric = true;\n        var strIndex = \"A\";\n        var str = \"\";\n        if (!!startIndexStr) {\n            str = startIndexStr;\n            var ind = str.length - 1;\n            var hasDigit = false;\n            for (var i = 0; i < str.length; i++) {\n                if (Helpers.isCharDigit(str[i])) {\n                    hasDigit = true;\n                    break;\n                }\n            }\n            var checkLetter = function () {\n                return ((hasDigit && !Helpers.isCharDigit(str[ind])) ||\n                    Helpers.isCharNotLetterAndDigit(str[ind]));\n            };\n            while (ind >= 0 && checkLetter())\n                ind--;\n            var newPostfix = \"\";\n            if (ind < str.length - 1) {\n                newPostfix = str.substring(ind + 1);\n                str = str.substring(0, ind + 1);\n            }\n            ind = str.length - 1;\n            while (ind >= 0) {\n                if (checkLetter())\n                    break;\n                ind--;\n                if (!hasDigit)\n                    break;\n            }\n            strIndex = str.substring(ind + 1);\n            prefix = str.substring(0, ind + 1);\n            if (parseInt(strIndex))\n                startIndex = parseInt(strIndex);\n            else if (strIndex.length == 1)\n                isNumeric = false;\n            if (!!newPostfix || !!prefix) {\n                postfix = newPostfix;\n            }\n        }\n        if (isNumeric) {\n            var val = (index + startIndex).toString();\n            while (val.length < strIndex.length)\n                val = \"0\" + val;\n            return prefix + val + postfix;\n        }\n        return (prefix + String.fromCharCode(strIndex.charCodeAt(0) + index) + postfix);\n    };\n    Helpers.isCharNotLetterAndDigit = function (ch) {\n        return ch.toUpperCase() == ch.toLowerCase() && !Helpers.isCharDigit(ch);\n    };\n    Helpers.isCharDigit = function (ch) {\n        return ch >= \"0\" && ch <= \"9\";\n    };\n    Helpers.getNumberFromStr = function (str, index) {\n        if (!this.isCharDigit(str[index]))\n            return NaN;\n        var nStr = \"\";\n        while (index < str.length && this.isCharDigit(str[index])) {\n            nStr += str[index];\n            index++;\n        }\n        if (!nStr)\n            return NaN;\n        return this.getNumber(nStr);\n    };\n    Helpers.countDecimals = function (value) {\n        if (Helpers.isNumber(value) && Math.floor(value) !== value) {\n            var strs = value.toString().split(\".\");\n            return strs.length > 1 && strs[1].length || 0;\n        }\n        return 0;\n    };\n    Helpers.correctAfterPlusMinis = function (a, b, res) {\n        var digitsA = Helpers.countDecimals(a);\n        var digitsB = Helpers.countDecimals(b);\n        if (digitsA > 0 || digitsB > 0) {\n            var digits = Math.max(digitsA, digitsB);\n            res = parseFloat(res.toFixed(digits));\n        }\n        return res;\n    };\n    Helpers.sumAnyValues = function (a, b) {\n        if (!Helpers.isNumber(a) || !Helpers.isNumber(b)) {\n            if (Array.isArray(a) && Array.isArray(b))\n                return [].concat(a).concat(b);\n            if (Array.isArray(a) || Array.isArray(b)) {\n                var arr = Array.isArray(a) ? a : b;\n                var val = arr === a ? b : a;\n                if (typeof val === \"string\") {\n                    var str = arr.join(\", \");\n                    return arr === a ? str + val : val + str;\n                }\n                if (typeof val === \"number\") {\n                    var res = 0;\n                    for (var i = 0; i < arr.length; i++) {\n                        if (typeof arr[i] === \"number\") {\n                            res = Helpers.correctAfterPlusMinis(res, arr[i], res + arr[i]);\n                        }\n                    }\n                    return Helpers.correctAfterPlusMinis(res, val, res + val);\n                }\n            }\n            return a + b;\n        }\n        if (typeof a === \"string\" || typeof b === \"string\")\n            return a + b;\n        return Helpers.correctAfterPlusMinis(a, b, a + b);\n    };\n    Helpers.correctAfterMultiple = function (a, b, res) {\n        var digits = Helpers.countDecimals(a) + Helpers.countDecimals(b);\n        if (digits > 0) {\n            res = parseFloat(res.toFixed(digits));\n        }\n        return res;\n    };\n    Helpers.convertArrayValueToObject = function (src, propName, dest) {\n        if (dest === void 0) { dest = undefined; }\n        var res = new Array();\n        if (!src || !Array.isArray(src))\n            return res;\n        for (var i = 0; i < src.length; i++) {\n            var item = void 0;\n            if (Array.isArray(dest)) {\n                item = Helpers.findObjByPropValue(dest, propName, src[i]);\n            }\n            if (!item) {\n                item = {};\n                item[propName] = src[i];\n            }\n            res.push(item);\n        }\n        return res;\n    };\n    Helpers.findObjByPropValue = function (arr, propName, val) {\n        for (var i = 0; i < arr.length; i++) {\n            if (Helpers.isTwoValueEquals(arr[i][propName], val))\n                return arr[i];\n        }\n        return undefined;\n    };\n    Helpers.convertArrayObjectToValue = function (src, propName) {\n        var res = new Array();\n        if (!src || !Array.isArray(src))\n            return res;\n        for (var i = 0; i < src.length; i++) {\n            var itemVal = !!src[i] ? src[i][propName] : undefined;\n            if (!Helpers.isValueEmpty(itemVal))\n                res.push(itemVal);\n        }\n        return res;\n    };\n    Helpers.convertDateToString = function (date) {\n        var toStr = function (val) {\n            if (val < 10)\n                return \"0\" + val.toString();\n            return val.toString();\n        };\n        return date.getFullYear() + \"-\" + toStr(date.getMonth() + 1) + \"-\" + toStr(date.getDate());\n    };\n    Helpers.convertDateTimeToString = function (date) {\n        var toStr = function (val) {\n            if (val < 10)\n                return \"0\" + val.toString();\n            return val.toString();\n        };\n        return this.convertDateToString(date) + \" \" + toStr(date.getHours()) + \":\" + toStr(date.getMinutes());\n    };\n    Helpers.convertValToQuestionVal = function (val, inputType) {\n        if (val instanceof Date) {\n            if (inputType === \"datetime-local\")\n                return Helpers.convertDateTimeToString(val);\n            return Helpers.convertDateToString(val);\n        }\n        return val;\n    };\n    return Helpers;\n}());\n\nif (!String.prototype[\"format\"]) {\n    String.prototype[\"format\"] = function () {\n        var args = arguments;\n        return this.replace(/{(\\d+)}/g, function (match, number) {\n            return typeof args[number] != \"undefined\" ? args[number] : match;\n        });\n    };\n}\n\n\n/***/ }),\n\n/***/ \"./src/images sync \\\\.svg$\":\n/*!*********************************************!*\\\n  !*** ./src/images sync nonrecursive \\.svg$ ***!\n  \\*********************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __nested_webpack_require_1640303__) {\n\nvar map = {\n\t\"./ArrowDown_34x34.svg\": \"./src/images/ArrowDown_34x34.svg\",\n\t\"./ArrowLeft.svg\": \"./src/images/ArrowLeft.svg\",\n\t\"./ArrowRight.svg\": \"./src/images/ArrowRight.svg\",\n\t\"./Arrow_downGREY_10x10.svg\": \"./src/images/Arrow_downGREY_10x10.svg\",\n\t\"./ChangeCamera.svg\": \"./src/images/ChangeCamera.svg\",\n\t\"./ChooseFile.svg\": \"./src/images/ChooseFile.svg\",\n\t\"./Clear.svg\": \"./src/images/Clear.svg\",\n\t\"./CloseCamera.svg\": \"./src/images/CloseCamera.svg\",\n\t\"./DefaultFile.svg\": \"./src/images/DefaultFile.svg\",\n\t\"./Delete.svg\": \"./src/images/Delete.svg\",\n\t\"./Down_34x34.svg\": \"./src/images/Down_34x34.svg\",\n\t\"./Left.svg\": \"./src/images/Left.svg\",\n\t\"./ModernBooleanCheckChecked.svg\": \"./src/images/ModernBooleanCheckChecked.svg\",\n\t\"./ModernBooleanCheckInd.svg\": \"./src/images/ModernBooleanCheckInd.svg\",\n\t\"./ModernBooleanCheckUnchecked.svg\": \"./src/images/ModernBooleanCheckUnchecked.svg\",\n\t\"./ModernCheck.svg\": \"./src/images/ModernCheck.svg\",\n\t\"./ModernRadio.svg\": \"./src/images/ModernRadio.svg\",\n\t\"./More.svg\": \"./src/images/More.svg\",\n\t\"./NavMenu_24x24.svg\": \"./src/images/NavMenu_24x24.svg\",\n\t\"./ProgressButton.svg\": \"./src/images/ProgressButton.svg\",\n\t\"./ProgressButtonV2.svg\": \"./src/images/ProgressButtonV2.svg\",\n\t\"./RemoveFile.svg\": \"./src/images/RemoveFile.svg\",\n\t\"./Right.svg\": \"./src/images/Right.svg\",\n\t\"./SearchClear.svg\": \"./src/images/SearchClear.svg\",\n\t\"./ShowCamera.svg\": \"./src/images/ShowCamera.svg\",\n\t\"./TakePicture.svg\": \"./src/images/TakePicture.svg\",\n\t\"./TakePicture_24x24.svg\": \"./src/images/TakePicture_24x24.svg\",\n\t\"./TimerCircle.svg\": \"./src/images/TimerCircle.svg\",\n\t\"./V2Check.svg\": \"./src/images/V2Check.svg\",\n\t\"./V2Check_24x24.svg\": \"./src/images/V2Check_24x24.svg\",\n\t\"./V2DragElement_16x16.svg\": \"./src/images/V2DragElement_16x16.svg\",\n\t\"./chevron.svg\": \"./src/images/chevron.svg\",\n\t\"./clear_16x16.svg\": \"./src/images/clear_16x16.svg\",\n\t\"./collapseDetail.svg\": \"./src/images/collapseDetail.svg\",\n\t\"./expandDetail.svg\": \"./src/images/expandDetail.svg\",\n\t\"./loading.svg\": \"./src/images/loading.svg\",\n\t\"./no-image.svg\": \"./src/images/no-image.svg\",\n\t\"./rating-star-2.svg\": \"./src/images/rating-star-2.svg\",\n\t\"./rating-star-small-2.svg\": \"./src/images/rating-star-small-2.svg\",\n\t\"./rating-star-small.svg\": \"./src/images/rating-star-small.svg\",\n\t\"./rating-star.svg\": \"./src/images/rating-star.svg\",\n\t\"./search.svg\": \"./src/images/search.svg\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __nested_webpack_require_1640303__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__nested_webpack_require_1640303__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"./src/images sync \\\\.svg$\";\n\n/***/ }),\n\n/***/ \"./src/images/ArrowDown_34x34.svg\":\n/*!****************************************!*\\\n  !*** ./src/images/ArrowDown_34x34.svg ***!\n  \\****************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg version=\\\"1.1\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\" x=\\\"0px\\\" y=\\\"0px\\\" viewBox=\\\"0 0 34 34\\\" xml:space=\\\"preserve\\\"><polygon class=\\\"st0\\\" points=\\\"12,16 14,14 17,17 20,14 22,16 17,21 \\\"></polygon></svg>\"\n\n/***/ }),\n\n/***/ \"./src/images/ArrowLeft.svg\":\n/*!**********************************!*\\\n  !*** ./src/images/ArrowLeft.svg ***!\n  \\**********************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewBox=\\\"0 0 16 16\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M15 8.99999H4.39998L8.69998 13.3L7.29998 14.7L0.599976 7.99999L7.29998 1.29999L8.69998 2.69999L4.39998 6.99999H15V8.99999Z\\\"></path></svg>\"\n\n/***/ }),\n\n/***/ \"./src/images/ArrowRight.svg\":\n/*!***********************************!*\\\n  !*** ./src/images/ArrowRight.svg ***!\n  \\***********************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewBox=\\\"0 0 16 16\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M1 6.99999H11.6L7.3 2.69999L8.7 1.29999L15.4 7.99999L8.7 14.7L7.3 13.3L11.6 8.99999H1V6.99999Z\\\"></path></svg>\"\n\n/***/ }),\n\n/***/ \"./src/images/Arrow_downGREY_10x10.svg\":\n/*!*********************************************!*\\\n  !*** ./src/images/Arrow_downGREY_10x10.svg ***!\n  \\*********************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg version=\\\"1.1\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\" x=\\\"0px\\\" y=\\\"0px\\\" viewBox=\\\"0 0 10 10\\\" xml:space=\\\"preserve\\\"><polygon class=\\\"st0\\\" points=\\\"2,2 0,4 5,9 10,4 8,2 5,5 \\\"></polygon></svg>\"\n\n/***/ }),\n\n/***/ \"./src/images/ChangeCamera.svg\":\n/*!*************************************!*\\\n  !*** ./src/images/ChangeCamera.svg ***!\n  \\*************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewBox=\\\"0 0 24 24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M23 12.0037C23 14.2445 21.7794 16.3052 19.5684 17.8257C19.3984 17.9458 19.1983 18.0058 19.0082 18.0058C18.688 18.0058 18.3779 17.8557 18.1778 17.5756C17.8677 17.1155 17.9777 16.4953 18.4379 16.1852C20.0887 15.0448 21.0091 13.5643 21.0091 12.0138C21.0091 8.70262 16.9673 6.01171 12.005 6.01171C11.4948 6.01171 10.9945 6.04172 10.5043 6.09173L11.7149 7.30215C12.105 7.69228 12.105 8.32249 11.7149 8.71263C11.5148 8.9127 11.2647 9.00273 11.0045 9.00273C10.7444 9.00273 10.4943 8.90269 10.2942 8.71263L6.58254 5.00136L10.2842 1.2901C10.6744 0.899964 11.3047 0.899964 11.6949 1.2901C12.085 1.68023 12.085 2.31045 11.6949 2.70058L10.3042 4.09105C10.8545 4.03103 11.4147 4.00102 11.985 4.00102C18.0578 4.00102 22.99 7.59225 22.99 12.0037H23ZM12.2851 15.2949C11.895 15.685 11.895 16.3152 12.2851 16.7054L13.4957 17.9158C13.0055 17.9758 12.4952 17.9958 11.995 17.9958C7.03274 17.9958 2.99091 15.3049 2.99091 11.9937C2.99091 10.4332 3.90132 8.95271 5.56207 7.82232C6.02228 7.51222 6.13233 6.89201 5.82219 6.43185C5.51205 5.97169 4.89177 5.86166 4.43156 6.17176C2.22055 7.69228 1 9.76299 1 11.9937C1 16.4052 5.93224 19.9965 12.005 19.9965C12.5753 19.9965 13.1355 19.9665 13.6858 19.9064L12.2951 21.2969C11.905 21.6871 11.905 22.3173 12.2951 22.7074C12.4952 22.9075 12.7453 22.9975 13.0055 22.9975C13.2656 22.9975 13.5157 22.8975 13.7158 22.7074L17.4275 18.9961L13.7158 15.2849C13.3256 14.8947 12.6953 14.8947 12.3051 15.2849L12.2851 15.2949Z\\\"></path></svg>\"\n\n/***/ }),\n\n/***/ \"./src/images/ChooseFile.svg\":\n/*!***********************************!*\\\n  !*** ./src/images/ChooseFile.svg ***!\n  \\***********************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewBox=\\\"0 0 24 24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M22 9V7C22 5.9 21.1 5 20 5H12L10 3H4C2.9 3 2 3.9 2 5V9V10V21H22L24 9H22ZM4 5H9.2L10.6 6.4L11.2 7H12H20V9H4V5ZM20.3 19H4V11H21.6L20.3 19Z\\\"></path></svg>\"\n\n/***/ }),\n\n/***/ \"./src/images/Clear.svg\":\n/*!******************************!*\\\n  !*** ./src/images/Clear.svg ***!\n  \\******************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewBox=\\\"0 0 24 24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M22.6 8.6L16.4 2.4C16 2 15.5 1.8 15 1.8C14.5 1.8 14 2 13.6 2.4L1.4 14.6C0.600003 15.4 0.600003 16.6 1.4 17.4L6 22H12L22.6 11.4C23.3 10.6 23.3 9.3 22.6 8.6ZM11.1 20H6.8L2.8 16L6.2 12.6L12.4 18.8L11.1 20ZM13.8 17.4L7.6 11.2L15 3.8L21.2 10L13.8 17.4ZM16 20H23V22H14L16 20Z\\\"></path></svg>\"\n\n/***/ }),\n\n/***/ \"./src/images/CloseCamera.svg\":\n/*!************************************!*\\\n  !*** ./src/images/CloseCamera.svg ***!\n  \\************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewBox=\\\"0 0 24 24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M13.41 12L20.7 4.71C21.09 4.32 21.09 3.69 20.7 3.3C20.31 2.91 19.68 2.91 19.29 3.3L12 10.59L4.71 3.29C4.32 2.9 3.68 2.9 3.29 3.29C2.9 3.68 2.9 4.32 3.29 4.71L10.58 12L3.29 19.29C2.9 19.68 2.9 20.31 3.29 20.7C3.49 20.9 3.74 20.99 4 20.99C4.26 20.99 4.51 20.89 4.71 20.7L12 13.41L19.29 20.7C19.49 20.9 19.74 20.99 20 20.99C20.26 20.99 20.51 20.89 20.71 20.7C21.1 20.31 21.1 19.68 20.71 19.29L13.42 12H13.41Z\\\"></path></svg>\"\n\n/***/ }),\n\n/***/ \"./src/images/DefaultFile.svg\":\n/*!************************************!*\\\n  !*** ./src/images/DefaultFile.svg ***!\n  \\************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewBox=\\\"0 0 56 68\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><g clip-path=\\\"url(#clip0_9011_41219)\\\"><path d=\\\"M54.83 10.83L45.17 1.17C44.7982 0.798664 44.357 0.504208 43.8714 0.303455C43.3858 0.102703 42.8654 -0.000411943 42.34 1.2368e-06H6C4.4087 1.2368e-06 2.88257 0.632142 1.75735 1.75736C0.632136 2.88258 0 4.4087 0 6V62C0 63.5913 0.632136 65.1174 1.75735 66.2426C2.88257 67.3679 4.4087 68 6 68H50C51.5913 68 53.1174 67.3679 54.2426 66.2426C55.3679 65.1174 56 63.5913 56 62V13.66C56.0004 13.1346 55.8973 12.6142 55.6965 12.1286C55.4958 11.643 55.2013 11.2018 54.83 10.83ZM44 2.83L53.17 12H48C46.9391 12 45.9217 11.5786 45.1716 10.8284C44.4214 10.0783 44 9.06087 44 8V2.83ZM54 62C54 63.0609 53.5786 64.0783 52.8284 64.8284C52.0783 65.5786 51.0609 66 50 66H6C4.93913 66 3.92172 65.5786 3.17157 64.8284C2.42142 64.0783 2 63.0609 2 62V6C2 4.93914 2.42142 3.92172 3.17157 3.17157C3.92172 2.42143 4.93913 2 6 2H42V8C42 9.5913 42.6321 11.1174 43.7574 12.2426C44.8826 13.3679 46.4087 14 48 14H54V62ZM14 24H42V26H14V24ZM14 30H42V32H14V30ZM14 36H42V38H14V36ZM14 42H42V44H14V42Z\\\" fill=\\\"#909090\\\"></path></g><defs><clipPath id=\\\"clip0_9011_41219\\\"><rect width=\\\"56\\\" height=\\\"68\\\" fill=\\\"white\\\"></rect></clipPath></defs></svg>\"\n\n/***/ }),\n\n/***/ \"./src/images/Delete.svg\":\n/*!*******************************!*\\\n  !*** ./src/images/Delete.svg ***!\n  \\*******************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewBox=\\\"0 0 24 24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M22 4H20H16V2C16 0.9 15.1 0 14 0H10C8.9 0 8 0.9 8 2V4H4H2V6H4V20C4 21.1 4.9 22 6 22H18C19.1 22 20 21.1 20 20V6H22V4ZM10 2H14V4H10V2ZM18 20H6V6H8H16H18V20ZM14 8H16V18H14V8ZM11 8H13V18H11V8ZM8 8H10V18H8V8Z\\\"></path></svg>\"\n\n/***/ }),\n\n/***/ \"./src/images/Down_34x34.svg\":\n/*!***********************************!*\\\n  !*** ./src/images/Down_34x34.svg ***!\n  \\***********************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg version=\\\"1.1\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\" x=\\\"0px\\\" y=\\\"0px\\\" viewBox=\\\"0 0 34 34\\\" xml:space=\\\"preserve\\\"><g><path class=\\\"st0\\\" d=\\\"M33,34H0V0h33c0.6,0,1,0.4,1,1v32C34,33.6,33.6,34,33,34z\\\"></path><polygon class=\\\"st1\\\" points=\\\"12,16 14,14 17,17 20,14 22,16 17,21 \\\"></polygon></g></svg>\"\n\n/***/ }),\n\n/***/ \"./src/images/Left.svg\":\n/*!*****************************!*\\\n  !*** ./src/images/Left.svg ***!\n  \\*****************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg version=\\\"1.1\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\" x=\\\"0px\\\" y=\\\"0px\\\" viewBox=\\\"0 0 16 16\\\" xml:space=\\\"preserve\\\"><polygon points=\\\"11,12 9,14 3,8 9,2 11,4 7,8 \\\"></polygon></svg>\"\n\n/***/ }),\n\n/***/ \"./src/images/ModernBooleanCheckChecked.svg\":\n/*!**************************************************!*\\\n  !*** ./src/images/ModernBooleanCheckChecked.svg ***!\n  \\**************************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg version=\\\"1.1\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\" viewBox=\\\"0 0 24 24\\\"><polygon points=\\\"19,10 14,10 14,5 10,5 10,10 5,10 5,14 10,14 10,19 14,19 14,14 19,14 \\\"></polygon></svg>\"\n\n/***/ }),\n\n/***/ \"./src/images/ModernBooleanCheckInd.svg\":\n/*!**********************************************!*\\\n  !*** ./src/images/ModernBooleanCheckInd.svg ***!\n  \\**********************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg version=\\\"1.1\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M22,0H2C0.9,0,0,0.9,0,2v20c0,1.1,0.9,2,2,2h20c1.1,0,2-0.9,2-2V2C24,0.9,23.1,0,22,0z M21,18L6,3h15V18z M3,6l15,15H3V6z\\\"></path></svg>\"\n\n/***/ }),\n\n/***/ \"./src/images/ModernBooleanCheckUnchecked.svg\":\n/*!****************************************************!*\\\n  !*** ./src/images/ModernBooleanCheckUnchecked.svg ***!\n  \\****************************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg version=\\\"1.1\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\" viewBox=\\\"0 0 24 24\\\"><rect x=\\\"5\\\" y=\\\"10\\\" width=\\\"14\\\" height=\\\"4\\\"></rect></svg>\"\n\n/***/ }),\n\n/***/ \"./src/images/ModernCheck.svg\":\n/*!************************************!*\\\n  !*** ./src/images/ModernCheck.svg ***!\n  \\************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewBox=\\\"0 0 24 24\\\"><path d=\\\"M5,13l2-2l3,3l7-7l2,2l-9,9L5,13z\\\"></path></svg>\"\n\n/***/ }),\n\n/***/ \"./src/images/ModernRadio.svg\":\n/*!************************************!*\\\n  !*** ./src/images/ModernRadio.svg ***!\n  \\************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewBox=\\\"-12 -12 24 24\\\"><circle r=\\\"6\\\" cx=\\\"0\\\" cy=\\\"0\\\"></circle></svg>\"\n\n/***/ }),\n\n/***/ \"./src/images/More.svg\":\n/*!*****************************!*\\\n  !*** ./src/images/More.svg ***!\n  \\*****************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewBox=\\\"0 0 24 24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M6 12C6 13.1 5.1 14 4 14C2.9 14 2 13.1 2 12C2 10.9 2.9 10 4 10C5.1 10 6 10.9 6 12ZM12 10C10.9 10 10 10.9 10 12C10 13.1 10.9 14 12 14C13.1 14 14 13.1 14 12C14 10.9 13.1 10 12 10ZM20 10C18.9 10 18 10.9 18 12C18 13.1 18.9 14 20 14C21.1 14 22 13.1 22 12C22 10.9 21.1 10 20 10Z\\\"></path></svg>\"\n\n/***/ }),\n\n/***/ \"./src/images/NavMenu_24x24.svg\":\n/*!**************************************!*\\\n  !*** ./src/images/NavMenu_24x24.svg ***!\n  \\**************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M16 7H2V5H16V7ZM2 11V13H22V11H2ZM2 19H10V17H2V19Z\\\" fill=\\\"black\\\" fill-opacity=\\\"0.45\\\"></path></svg>\"\n\n/***/ }),\n\n/***/ \"./src/images/ProgressButton.svg\":\n/*!***************************************!*\\\n  !*** ./src/images/ProgressButton.svg ***!\n  \\***************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewBox=\\\"0 0 10 10\\\"><polygon points=\\\"2,2 0,4 5,9 10,4 8,2 5,5 \\\"></polygon></svg>\"\n\n/***/ }),\n\n/***/ \"./src/images/ProgressButtonV2.svg\":\n/*!*****************************************!*\\\n  !*** ./src/images/ProgressButtonV2.svg ***!\n  \\*****************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewBox=\\\"0 0 16 16\\\"><path d=\\\"M15 8.99999H4.39998L8.69998 13.3L7.29998 14.7L0.599976 7.99999L7.29998 1.29999L8.69998 2.69999L4.39998 6.99999H15V8.99999Z\\\"></path></svg>\"\n\n/***/ }),\n\n/***/ \"./src/images/RemoveFile.svg\":\n/*!***********************************!*\\\n  !*** ./src/images/RemoveFile.svg ***!\n  \\***********************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewBox=\\\"0 0 16 16\\\"><path d=\\\"M8,2C4.7,2,2,4.7,2,8s2.7,6,6,6s6-2.7,6-6S11.3,2,8,2z M11,10l-1,1L8,9l-2,2l-1-1l2-2L5,6l1-1l2,2l2-2l1,1L9,8 L11,10z\\\"></path></svg>\"\n\n/***/ }),\n\n/***/ \"./src/images/Right.svg\":\n/*!******************************!*\\\n  !*** ./src/images/Right.svg ***!\n  \\******************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg version=\\\"1.1\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\" x=\\\"0px\\\" y=\\\"0px\\\" viewBox=\\\"0 0 16 16\\\" xml:space=\\\"preserve\\\"><polygon points=\\\"5,4 7,2 13,8 7,14 5,12 9,8 \\\"></polygon></svg>\"\n\n/***/ }),\n\n/***/ \"./src/images/SearchClear.svg\":\n/*!************************************!*\\\n  !*** ./src/images/SearchClear.svg ***!\n  \\************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewBox=\\\"0 0 16 16\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M13.35 3.34999L12.65 2.64999L8.05002 7.24999L3.35002 2.64999L2.65002 3.34999L7.25002 8.04999L2.65002 12.65L3.35002 13.35L8.05002 8.74999L12.65 13.35L13.35 12.65L8.75002 8.04999L13.35 3.34999Z\\\"></path></svg>\"\n\n/***/ }),\n\n/***/ \"./src/images/ShowCamera.svg\":\n/*!***********************************!*\\\n  !*** ./src/images/ShowCamera.svg ***!\n  \\***********************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewBox=\\\"0 0 24 24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M20.01 4H18.4C18.2 4 18.01 3.9 17.9 3.73L16.97 2.34C16.41 1.5 15.48 1 14.47 1H9.54C8.53 1 7.6 1.5 7.04 2.34L6.11 3.73C6 3.9 5.81 4 5.61 4H4C2.35 4 1 5.35 1 7V19C1 20.65 2.35 22 4 22H20C21.65 22 23 20.65 23 19V7C23 5.35 21.65 4 20 4H20.01ZM21.01 19C21.01 19.55 20.56 20 20.01 20H4.01C3.46 20 3.01 19.55 3.01 19V7C3.01 6.45 3.46 6 4.01 6H5.62C6.49 6 7.3 5.56 7.79 4.84L8.72 3.45C8.91 3.17 9.22 3 9.55 3H14.48C14.81 3 15.13 3.17 15.31 3.45L16.24 4.84C16.72 5.56 17.54 6 18.41 6H20.02C20.57 6 21.02 6.45 21.02 7V19H21.01ZM12.01 6C8.7 6 6.01 8.69 6.01 12C6.01 15.31 8.7 18 12.01 18C15.32 18 18.01 15.31 18.01 12C18.01 8.69 15.32 6 12.01 6ZM12.01 16C9.8 16 8.01 14.21 8.01 12C8.01 9.79 9.8 8 12.01 8C14.22 8 16.01 9.79 16.01 12C16.01 14.21 14.22 16 12.01 16ZM13.01 10C13.01 10.55 12.56 11 12.01 11C11.46 11 11.01 11.45 11.01 12C11.01 12.55 10.56 13 10.01 13C9.46 13 9.01 12.55 9.01 12C9.01 10.35 10.36 9 12.01 9C12.56 9 13.01 9.45 13.01 10Z\\\" fill=\\\"black\\\" fill-opacity=\\\"0.45\\\"></path></svg>\"\n\n/***/ }),\n\n/***/ \"./src/images/TakePicture.svg\":\n/*!************************************!*\\\n  !*** ./src/images/TakePicture.svg ***!\n  \\************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewBox=\\\"0 0 32 32\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M27 6H23.8C23.34 6 22.92 5.77 22.66 5.39L22.25 4.78C21.51 3.66 20.26 3 18.92 3H13.06C11.72 3 10.48 3.67 9.73 4.78L9.32 5.39C9.07 5.77 8.64 6 8.18 6H4.98C2.79 6 1 7.79 1 10V24C1 26.21 2.79 28 5 28H27C29.21 28 31 26.21 31 24V10C31 7.79 29.21 6 27 6ZM29 24C29 25.1 28.1 26 27 26H5C3.9 26 3 25.1 3 24V10C3 8.9 3.9 8 5 8H8.2C9.33 8 10.38 7.44 11 6.5L11.41 5.89C11.78 5.33 12.41 5 13.07 5H18.93C19.6 5 20.22 5.33 20.59 5.89L21 6.5C21.62 7.44 22.68 8 23.8 8H27C28.1 8 29 8.9 29 10V24ZM16 9C12.13 9 9 12.13 9 16C9 19.87 12.13 23 16 23C19.87 23 23 19.87 23 16C23 12.13 19.87 9 16 9ZM16 21C13.24 21 11 18.76 11 16C11 13.24 13.24 11 16 11C18.76 11 21 13.24 21 16C21 18.76 18.76 21 16 21ZM17 13C17 13.55 16.55 14 16 14C14.9 14 14 14.9 14 16C14 16.55 13.55 17 13 17C12.45 17 12 16.55 12 16C12 13.79 13.79 12 16 12C16.55 12 17 12.45 17 13Z\\\"></path></svg>\"\n\n/***/ }),\n\n/***/ \"./src/images/TakePicture_24x24.svg\":\n/*!******************************************!*\\\n  !*** ./src/images/TakePicture_24x24.svg ***!\n  \\******************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewBox=\\\"0 0 24 24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M20.01 4H18.4C18.2 4 18.01 3.9 17.9 3.73L16.97 2.34C16.41 1.5 15.48 1 14.47 1H9.54C8.53 1 7.6 1.5 7.04 2.34L6.11 3.73C6 3.9 5.81 4 5.61 4H4C2.35 4 1 5.35 1 7V19C1 20.65 2.35 22 4 22H20C21.65 22 23 20.65 23 19V7C23 5.35 21.65 4 20 4H20.01ZM21.01 19C21.01 19.55 20.56 20 20.01 20H4.01C3.46 20 3.01 19.55 3.01 19V7C3.01 6.45 3.46 6 4.01 6H5.62C6.49 6 7.3 5.56 7.79 4.84L8.72 3.45C8.91 3.17 9.22 3 9.55 3H14.48C14.81 3 15.13 3.17 15.31 3.45L16.24 4.84C16.72 5.56 17.54 6 18.41 6H20.02C20.57 6 21.02 6.45 21.02 7V19H21.01ZM12.01 6C8.7 6 6.01 8.69 6.01 12C6.01 15.31 8.7 18 12.01 18C15.32 18 18.01 15.31 18.01 12C18.01 8.69 15.32 6 12.01 6ZM12.01 16C9.8 16 8.01 14.21 8.01 12C8.01 9.79 9.8 8 12.01 8C14.22 8 16.01 9.79 16.01 12C16.01 14.21 14.22 16 12.01 16ZM13.01 10C13.01 10.55 12.56 11 12.01 11C11.46 11 11.01 11.45 11.01 12C11.01 12.55 10.56 13 10.01 13C9.46 13 9.01 12.55 9.01 12C9.01 10.35 10.36 9 12.01 9C12.56 9 13.01 9.45 13.01 10Z\\\"></path></svg>\"\n\n/***/ }),\n\n/***/ \"./src/images/TimerCircle.svg\":\n/*!************************************!*\\\n  !*** ./src/images/TimerCircle.svg ***!\n  \\************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" version=\\\"1.1\\\" viewBox=\\\"0 0 160 160\\\"><circle cx=\\\"80\\\" cy=\\\"80\\\" r=\\\"70\\\" style=\\\"stroke: var(--sd-timer-stroke-background-color); stroke-width: var(--sd-timer-stroke-background-width)\\\" stroke-dasharray=\\\"none\\\" stroke-dashoffset=\\\"none\\\"></circle><circle cx=\\\"80\\\" cy=\\\"80\\\" r=\\\"70\\\"></circle></svg>\"\n\n/***/ }),\n\n/***/ \"./src/images/V2Check.svg\":\n/*!********************************!*\\\n  !*** ./src/images/V2Check.svg ***!\n  \\********************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M8.00001 15.8L2.60001 10.4L4.00001 9L8.00001 13L16 5L17.4 6.4L8.00001 15.8Z\\\"></path></svg>\"\n\n/***/ }),\n\n/***/ \"./src/images/V2Check_24x24.svg\":\n/*!**************************************!*\\\n  !*** ./src/images/V2Check_24x24.svg ***!\n  \\**************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewBox=\\\"0 0 24 24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M9 20.1L1 12L3.1 9.9L9 15.9L20.9 4L23 6.1L9 20.1Z\\\"></path></svg>\"\n\n/***/ }),\n\n/***/ \"./src/images/V2DragElement_16x16.svg\":\n/*!********************************************!*\\\n  !*** ./src/images/V2DragElement_16x16.svg ***!\n  \\********************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewBox=\\\"0 0 16 16\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M2 4C2 3.73478 2.10536 3.48043 2.29289 3.29289C2.48043 3.10536 2.73478 3 3 3H13C13.2652 3 13.5196 3.10536 13.7071 3.29289C13.8946 3.48043 14 3.73478 14 4C14 4.26522 13.8946 4.51957 13.7071 4.70711C13.5196 4.89464 13.2652 5 13 5H3C2.73478 5 2.48043 4.89464 2.29289 4.70711C2.10536 4.51957 2 4.26522 2 4ZM13 7H3C2.73478 7 2.48043 7.10536 2.29289 7.29289C2.10536 7.48043 2 7.73478 2 8C2 8.26522 2.10536 8.51957 2.29289 8.70711C2.48043 8.89464 2.73478 9 3 9H13C13.2652 9 13.5196 8.89464 13.7071 8.70711C13.8946 8.51957 14 8.26522 14 8C14 7.73478 13.8946 7.48043 13.7071 7.29289C13.5196 7.10536 13.2652 7 13 7ZM13 11H3C2.73478 11 2.48043 11.1054 2.29289 11.2929C2.10536 11.4804 2 11.7348 2 12C2 12.2652 2.10536 12.5196 2.29289 12.7071C2.48043 12.8946 2.73478 13 3 13H13C13.2652 13 13.5196 12.8946 13.7071 12.7071C13.8946 12.5196 14 12.2652 14 12C14 11.7348 13.8946 11.4804 13.7071 11.2929C13.5196 11.1054 13.2652 11 13 11Z\\\"></path></svg>\"\n\n/***/ }),\n\n/***/ \"./src/images/chevron.svg\":\n/*!********************************!*\\\n  !*** ./src/images/chevron.svg ***!\n  \\********************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewBox=\\\"0 0 24 24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M12 15L17 10H7L12 15Z\\\"></path></svg>\"\n\n/***/ }),\n\n/***/ \"./src/images/clear_16x16.svg\":\n/*!************************************!*\\\n  !*** ./src/images/clear_16x16.svg ***!\n  \\************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewBox=\\\"0 0 16 16\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M13.35 3.34999L12.65 2.64999L8.05002 7.24999L3.35002 2.64999L2.65002 3.34999L7.25002 8.04999L2.65002 12.65L3.35002 13.35L8.05002 8.74999L12.65 13.35L13.35 12.65L8.75002 8.04999L13.35 3.34999Z\\\"></path></svg>\"\n\n/***/ }),\n\n/***/ \"./src/images/collapseDetail.svg\":\n/*!***************************************!*\\\n  !*** ./src/images/collapseDetail.svg ***!\n  \\***************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewBox=\\\"0 0 16 16\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M13 7H3V9H13V7Z\\\"></path></svg>\"\n\n/***/ }),\n\n/***/ \"./src/images/expandDetail.svg\":\n/*!*************************************!*\\\n  !*** ./src/images/expandDetail.svg ***!\n  \\*************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewBox=\\\"0 0 16 16\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M13 7H9V3H7V7H3V9H7V13H9V9H13V7Z\\\"></path></svg>\"\n\n/***/ }),\n\n/***/ \"./src/images/loading.svg\":\n/*!********************************!*\\\n  !*** ./src/images/loading.svg ***!\n  \\********************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewBox=\\\"0 0 48 48\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><g clip-path=\\\"url(#clip0_885_24957)\\\"><path opacity=\\\"0.1\\\" d=\\\"M24 40C15.18 40 8 32.82 8 24C8 15.18 15.18 8 24 8C32.82 8 40 15.18 40 24C40 32.82 32.82 40 24 40ZM24 12C17.38 12 12 17.38 12 24C12 30.62 17.38 36 24 36C30.62 36 36 30.62 36 24C36 17.38 30.62 12 24 12Z\\\" fill=\\\"black\\\" fill-opacity=\\\"0.91\\\"></path><path d=\\\"M10 26C8.9 26 8 25.1 8 24C8 15.18 15.18 8 24 8C25.1 8 26 8.9 26 10C26 11.1 25.1 12 24 12C17.38 12 12 17.38 12 24C12 25.1 11.1 26 10 26Z\\\" fill=\\\"#19B394\\\"></path></g><defs><clipPath id=\\\"clip0_885_24957\\\"><rect width=\\\"32\\\" height=\\\"32\\\" fill=\\\"white\\\" transform=\\\"translate(8 8)\\\"></rect></clipPath></defs></svg>\"\n\n/***/ }),\n\n/***/ \"./src/images/no-image.svg\":\n/*!*********************************!*\\\n  !*** ./src/images/no-image.svg ***!\n  \\*********************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewBox=\\\"0 0 48 48\\\"><g opacity=\\\"0.5\\\"><path d=\\\"M14 17.01C14 16.4167 14.1759 15.8366 14.5056 15.3433C14.8352 14.8499 15.3038 14.4654 15.8519 14.2384C16.4001 14.0113 17.0033 13.9519 17.5853 14.0676C18.1672 14.1834 18.7018 14.4691 19.1213 14.8887C19.5409 15.3082 19.8266 15.8428 19.9424 16.4247C20.0581 17.0067 19.9987 17.6099 19.7716 18.1581C19.5446 18.7062 19.1601 19.1748 18.6667 19.5044C18.1734 19.8341 17.5933 20.01 17 20.01C16.2044 20.01 15.4413 19.6939 14.8787 19.1313C14.3161 18.5687 14 17.8056 14 17.01ZM27.09 24.14L20 36.01H36L27.09 24.14ZM36.72 8.14L35.57 10.01H36C36.5304 10.01 37.0391 10.2207 37.4142 10.5958C37.7893 10.9709 38 11.4796 38 12.01V36.01C38 36.5404 37.7893 37.0491 37.4142 37.4242C37.0391 37.7993 36.5304 38.01 36 38.01H18.77L17.57 40.01H36C37.0609 40.01 38.0783 39.5886 38.8284 38.8384C39.5786 38.0883 40 37.0709 40 36.01V12.01C39.9966 11.0765 39.6668 10.1737 39.0678 9.45778C38.4688 8.74188 37.6382 8.25802 36.72 8.09V8.14ZM36.86 4.5L12.86 44.5L11.14 43.5L13.23 40.01H12C10.9391 40.01 9.92172 39.5886 9.17157 38.8384C8.42143 38.0883 8 37.0709 8 36.01V12.01C8 10.9491 8.42143 9.93172 9.17157 9.18157C9.92172 8.43143 10.9391 8.01 12 8.01H32.43L35.14 3.5L36.86 4.5ZM14.43 38.01L15.63 36.01H12L19 27.01L20.56 27.8L31.23 10.01H12C11.4696 10.01 10.9609 10.2207 10.5858 10.5958C10.2107 10.9709 10 11.4796 10 12.01V36.01C10 36.5404 10.2107 37.0491 10.5858 37.4242C10.9609 37.7993 11.4696 38.01 12 38.01H14.43Z\\\"></path></g></svg>\"\n\n/***/ }),\n\n/***/ \"./src/images/rating-star-2.svg\":\n/*!**************************************!*\\\n  !*** ./src/images/rating-star-2.svg ***!\n  \\**************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewBox=\\\"0 0 48 48\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><g><path d=\\\"M24 39.5057L11.7226 45.9839C10.4095 46.6739 8.87606 45.5622 9.12525 44.096L11.4734 30.373L1.54411 20.6556C0.480254 19.6207 1.06489 17.8095 2.53128 17.5986L16.2559 15.5957L22.3994 3.10891C23.0512 1.77685 24.9488 1.77685 25.6102 3.10891L31.7441 15.5957L45.4687 17.5986C46.9351 17.8095 47.5197 19.6207 46.4559 20.6556L36.5266 30.373L38.8748 44.096C39.1239 45.5622 37.5905 46.6835 36.2774 45.9839L24 39.5057Z\\\" fill=\\\"none\\\" stroke-width=\\\"2\\\"></path><path d=\\\"M24.4663 34.6154L24 34.3695L23.5336 34.6154L14.4788 39.389L16.2156 29.2691L16.3044 28.7517L15.9289 28.3848L8.57358 21.1966L18.7249 19.7094L19.245 19.6332L19.4772 19.1616L24 9.97413L28.5228 19.1616L28.755 19.6332L29.275 19.7094L39.4264 21.1966L32.0711 28.3848L31.6956 28.7517L31.7844 29.2691L33.5211 39.389L24.4663 34.6154Z\\\" stroke-width=\\\"2\\\"></path></g></svg>\"\n\n/***/ }),\n\n/***/ \"./src/images/rating-star-small-2.svg\":\n/*!********************************************!*\\\n  !*** ./src/images/rating-star-small-2.svg ***!\n  \\********************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewBox=\\\"0 0 24 24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M12 19.3373L6.13001 22.4373C5.50001 22.7673 4.77001 22.2373 4.89001 21.5373L6.01001 14.9773L1.26001 10.3273C0.750007 9.83728 1.03001 8.96728 1.73001 8.86728L8.29001 7.90728L11.23 1.93728C11.54 1.29728 12.45 1.29728 12.77 1.93728L15.7 7.90728L22.26 8.86728C22.96 8.96728 23.24 9.83728 22.73 10.3273L17.98 14.9773L19.1 21.5373C19.22 22.2373 18.49 22.7773 17.86 22.4373L11.99 19.3373H12Z\\\" fill=\\\"none\\\" stroke-width=\\\"2\\\"></path><path d=\\\"M12 15.9472L8.58001 17.7572L9.23001 13.9272L6.45001 11.2072L10.29 10.6472L12 7.17725L13.71 10.6472L17.55 11.2072L14.77 13.9272L15.42 17.7572L12 15.9472Z\\\"></path></svg>\"\n\n/***/ }),\n\n/***/ \"./src/images/rating-star-small.svg\":\n/*!******************************************!*\\\n  !*** ./src/images/rating-star-small.svg ***!\n  \\******************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewBox=\\\"0 0 24 24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><g><path d=\\\"M12 19.3373L6.13001 22.4373C5.50001 22.7673 4.77001 22.2373 4.89001 21.5373L6.01001 14.9773L1.26001 10.3273C0.750007 9.83728 1.03001 8.96728 1.73001 8.86728L8.29001 7.90728L11.23 1.93728C11.54 1.29728 12.45 1.29728 12.77 1.93728L15.7 7.90728L22.26 8.86728C22.96 8.96728 23.24 9.83728 22.73 10.3273L17.98 14.9773L19.1 21.5373C19.22 22.2373 18.49 22.7773 17.86 22.4373L11.99 19.3373H12Z\\\" stroke-width=\\\"2\\\"></path></g></svg>\"\n\n/***/ }),\n\n/***/ \"./src/images/rating-star.svg\":\n/*!************************************!*\\\n  !*** ./src/images/rating-star.svg ***!\n  \\************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewBox=\\\"0 0 48 48\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><g><path d=\\\"M24 39.5057L11.7226 45.9839C10.4095 46.6739 8.87606 45.5622 9.12525 44.096L11.4734 30.373L1.54411 20.6556C0.480254 19.6207 1.06489 17.8095 2.53128 17.5986L16.2559 15.5957L22.3994 3.10891C23.0512 1.77685 24.9488 1.77685 25.6102 3.10891L31.7441 15.5957L45.4687 17.5986C46.9351 17.8095 47.5197 19.6207 46.4559 20.6556L36.5266 30.373L38.8748 44.096C39.1239 45.5622 37.5905 46.6835 36.2774 45.9839L24 39.5057Z\\\" stroke-width=\\\"2\\\"></path></g></svg>\"\n\n/***/ }),\n\n/***/ \"./src/images/search.svg\":\n/*!*******************************!*\\\n  !*** ./src/images/search.svg ***!\n  \\*******************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewBox=\\\"0 0 24 24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M14 2C9.6 2 6 5.6 6 10C6 11.8 6.6 13.5 7.7 14.9L2.3 20.3C1.9 20.7 1.9 21.3 2.3 21.7C2.5 21.9 2.7 22 3 22C3.3 22 3.5 21.9 3.7 21.7L9.1 16.3C10.5 17.4 12.2 18 14 18C18.4 18 22 14.4 22 10C22 5.6 18.4 2 14 2ZM14 16C10.7 16 8 13.3 8 10C8 6.7 10.7 4 14 4C17.3 4 20 6.7 20 10C20 13.3 17.3 16 14 16Z\\\"></path></svg>\"\n\n/***/ }),\n\n/***/ \"./src/images/smiley sync \\\\.svg$\":\n/*!****************************************************!*\\\n  !*** ./src/images/smiley sync nonrecursive \\.svg$ ***!\n  \\****************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __nested_webpack_require_1673051__) {\n\nvar map = {\n\t\"./average.svg\": \"./src/images/smiley/average.svg\",\n\t\"./excellent.svg\": \"./src/images/smiley/excellent.svg\",\n\t\"./good.svg\": \"./src/images/smiley/good.svg\",\n\t\"./normal.svg\": \"./src/images/smiley/normal.svg\",\n\t\"./not-good.svg\": \"./src/images/smiley/not-good.svg\",\n\t\"./perfect.svg\": \"./src/images/smiley/perfect.svg\",\n\t\"./poor.svg\": \"./src/images/smiley/poor.svg\",\n\t\"./terrible.svg\": \"./src/images/smiley/terrible.svg\",\n\t\"./very-good.svg\": \"./src/images/smiley/very-good.svg\",\n\t\"./very-poor.svg\": \"./src/images/smiley/very-poor.svg\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __nested_webpack_require_1673051__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__nested_webpack_require_1673051__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"./src/images/smiley sync \\\\.svg$\";\n\n/***/ }),\n\n/***/ \"./src/images/smiley/average.svg\":\n/*!***************************************!*\\\n  !*** ./src/images/smiley/average.svg ***!\n  \\***************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewBox=\\\"0 0 24 24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M7.00572 7C6.45572 7 6.00572 6.55 6.00572 6V2C6.00572 1.45 6.45572 1 7.00572 1C7.55572 1 8.00572 1.45 8.00572 2V6C8.00572 6.55 7.55572 7 7.00572 7ZM18.0057 6V2C18.0057 1.45 17.5557 1 17.0057 1C16.4557 1 16.0057 1.45 16.0057 2V6C16.0057 6.55 16.4557 7 17.0057 7C17.5557 7 18.0057 6.55 18.0057 6ZM19.9457 21.33C20.1257 20.81 19.8557 20.24 19.3357 20.05C14.5457 18.35 9.45572 18.35 4.66572 20.05C4.14572 20.23 3.87572 20.81 4.05572 21.33C4.23572 21.85 4.80572 22.12 5.33572 21.94C9.69572 20.4 14.3057 20.4 18.6657 21.94C18.7757 21.98 18.8857 22 18.9957 22C19.4057 22 19.7957 21.74 19.9357 21.33H19.9457Z\\\"></path></svg>\"\n\n/***/ }),\n\n/***/ \"./src/images/smiley/excellent.svg\":\n/*!*****************************************!*\\\n  !*** ./src/images/smiley/excellent.svg ***!\n  \\*****************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewBox=\\\"0 0 24 24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M12.01 24C6.85767 24 1.15509 20.96 0.0145752 14.16C-0.0354475 13.87 0.0445888 13.57 0.234675 13.35C0.424761 13.13 0.704888 13 0.995019 13H23.005C23.2951 13 23.5752 13.13 23.7653 13.35C23.9554 13.57 24.0354 13.87 23.9854 14.16C22.8549 20.95 17.1423 24 11.99 24H12.01ZM2.25559 15C3.61621 19.82 8.0182 22 12.01 22C16.0018 22 20.4038 19.82 21.7644 15H2.25559ZM8.00819 6V2C8.00819 1.45 7.55799 1 7.00774 1C6.45749 1 6.00729 1.45 6.00729 2V6C6.00729 6.55 6.45749 7 7.00774 7C7.55799 7 8.00819 6.55 8.00819 6ZM18.0127 6V2C18.0127 1.45 17.5625 1 17.0123 1C16.462 1 16.0118 1.45 16.0118 2V6C16.0118 6.55 16.462 7 17.0123 7C17.5625 7 18.0127 6.55 18.0127 6Z\\\"></path></svg>\"\n\n/***/ }),\n\n/***/ \"./src/images/smiley/good.svg\":\n/*!************************************!*\\\n  !*** ./src/images/smiley/good.svg ***!\n  \\************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewBox=\\\"0 0 24 24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M12.0022 23.99C11.452 23.99 11.0018 23.5402 11.0018 22.9904C11.0018 22.4407 11.452 21.9909 12.0022 21.9909C16.3137 21.9909 21.0755 19.472 22.0158 13.8344C22.1058 13.2947 22.616 12.9248 23.1662 13.0148C23.7064 13.1047 24.0765 13.6245 23.9865 14.1643C22.8561 20.9513 17.144 24 11.9922 24L12.0022 23.99ZM8.00072 5.99783V1.99957C8.00072 1.4498 7.55056 1 7.00036 1C6.45016 1 6 1.4498 6 1.99957V5.99783C6 6.54759 6.45016 6.99739 7.00036 6.99739C7.55056 6.99739 8.00072 6.54759 8.00072 5.99783ZM18.0043 5.99783V1.99957C18.0043 1.4498 17.5542 1 17.004 1C16.4538 1 16.0036 1.4498 16.0036 1.99957V5.99783C16.0036 6.54759 16.4538 6.99739 17.004 6.99739C17.5542 6.99739 18.0043 6.54759 18.0043 5.99783Z\\\"></path></svg>\"\n\n/***/ }),\n\n/***/ \"./src/images/smiley/normal.svg\":\n/*!**************************************!*\\\n  !*** ./src/images/smiley/normal.svg ***!\n  \\**************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewBox=\\\"0 0 24 24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M7 7C6.45 7 6 6.55 6 6V2C6 1.45 6.45 1 7 1C7.55 1 8 1.45 8 2V6C8 6.55 7.55 7 7 7ZM18 6V2C18 1.45 17.55 1 17 1C16.45 1 16 1.45 16 2V6C16 6.55 16.45 7 17 7C17.55 7 18 6.55 18 6ZM21 21C21 20.45 20.55 20 20 20H4C3.45 20 3 20.45 3 21C3 21.55 3.45 22 4 22H20C20.55 22 21 21.55 21 21Z\\\"></path></svg>\"\n\n/***/ }),\n\n/***/ \"./src/images/smiley/not-good.svg\":\n/*!****************************************!*\\\n  !*** ./src/images/smiley/not-good.svg ***!\n  \\****************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewBox=\\\"0 0 24 24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M7.06927 7C6.51927 7 6.06927 6.55 6.06927 6V2C6.06927 1.45 6.51927 1 7.06927 1C7.61927 1 8.06927 1.45 8.06927 2V6C8.06927 6.55 7.61927 7 7.06927 7ZM18.0693 6V2C18.0693 1.45 17.6193 1 17.0693 1C16.5193 1 16.0693 1.45 16.0693 2V6C16.0693 6.55 16.5193 7 17.0693 7C17.6193 7 18.0693 6.55 18.0693 6ZM22.5693 21.9C23.0693 21.66 23.2793 21.07 23.0393 20.57C21.1093 16.52 16.9093 14 12.0693 14C7.22927 14 3.02927 16.52 1.09927 20.57C0.859273 21.07 1.06927 21.67 1.56927 21.9C2.06927 22.14 2.65927 21.93 2.89927 21.43C4.49927 18.08 8.00927 16 12.0593 16C16.1093 16 19.6293 18.08 21.2193 21.43C21.3893 21.79 21.7493 22 22.1193 22C22.2593 22 22.4093 21.97 22.5493 21.9H22.5693Z\\\"></path></svg>\"\n\n/***/ }),\n\n/***/ \"./src/images/smiley/perfect.svg\":\n/*!***************************************!*\\\n  !*** ./src/images/smiley/perfect.svg ***!\n  \\***************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewBox=\\\"0 0 24 24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M12.01 23C6.85721 23 1.15412 19.9621 0.0134987 13.1669C-0.0765501 12.6272 0.293651 12.1076 0.833944 12.0177C1.38424 11.9277 1.89452 12.2975 1.98457 12.8371C2.92508 18.4732 7.69767 20.9914 12 20.9914C16.3023 20.9914 21.0749 18.4732 22.0154 12.8371C22.1055 12.2975 22.6158 11.9277 23.1661 12.0177C23.7063 12.1076 24.0765 12.6272 23.9865 13.1669C22.8559 19.9521 17.1428 23 11.99 23H12.01ZM21.165 6.15177C22.3056 5.01257 22.3056 3.16386 21.165 2.02465L21.0049 1.85477C19.9143 0.765533 18.1633 0.725561 17.0227 1.71487C15.8821 0.715568 14.1312 0.765533 13.0406 1.85477L12.8705 2.01466C11.7299 3.15386 11.7299 5.00257 12.8705 6.14178L17.0227 10.2889L21.175 6.14178L21.165 6.15177ZM15.742 3.27378L17.0127 4.54289L18.2834 3.27378C18.6436 2.91403 19.2239 2.91403 19.5841 3.27378L19.7442 3.43367C20.1044 3.79342 20.1044 4.37301 19.7442 4.73276L17.0127 7.46086L14.2812 4.73276C13.921 4.37301 13.921 3.79342 14.2812 3.43367L14.4413 3.27378C14.6214 3.09391 14.8515 3.00397 15.0917 3.00397C15.3318 3.00397 15.5619 3.09391 15.742 3.27378ZM11.1595 6.15177C12.3002 5.01257 12.3002 3.16386 11.1595 2.02465L10.9995 1.85477C9.90886 0.765533 8.15792 0.725561 7.0173 1.71487C5.87668 0.715568 4.12573 0.765533 3.03514 1.85477L2.86505 2.01466C1.72443 3.15386 1.72443 5.00257 2.86505 6.14178L7.0173 10.2889L11.1695 6.14178L11.1595 6.15177ZM5.7366 3.27378L7.00729 4.54289L8.27798 3.27378C8.63818 2.91403 9.21849 2.91403 9.57869 3.27378L9.73877 3.43367C10.099 3.79342 10.099 4.37301 9.73877 4.73276L7.00729 7.46086L4.27581 4.73276C3.91562 4.37301 3.91562 3.79342 4.27581 3.43367L4.4359 3.27378C4.61599 3.09391 4.84612 3.00397 5.08625 3.00397C5.32638 3.00397 5.5565 3.09391 5.7366 3.27378Z\\\"></path></svg>\"\n\n/***/ }),\n\n/***/ \"./src/images/smiley/poor.svg\":\n/*!************************************!*\\\n  !*** ./src/images/smiley/poor.svg ***!\n  \\************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewBox=\\\"0 0 24 24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M7.01915 7C6.46961 7 6.01998 6.55 6.01998 6V2C6.01998 1.45 6.46961 1 7.01915 1C7.56869 1 8.01832 1.45 8.01832 2V6C8.01832 6.55 7.56869 7 7.01915 7ZM18.01 6V2C18.01 1.45 17.5604 1 17.0108 1C16.4613 1 16.0117 1.45 16.0117 2V6C16.0117 6.55 16.4613 7 17.0108 7C17.5604 7 18.01 6.55 18.01 6ZM16.4213 21.58L18.01 19.99L19.2989 21.28C19.6886 21.67 20.3181 21.67 20.7077 21.28C21.0974 20.89 21.0974 20.26 20.7077 19.87L19.4188 18.58C18.6395 17.8 17.3705 17.8 16.5912 18.58L15.0025 20.17L13.4138 18.58C12.6345 17.8 11.3655 17.8 10.5862 18.58L8.9975 20.17L7.40883 18.58C6.62948 17.8 5.36053 17.8 4.58118 18.58L3.29226 19.87C2.90258 20.26 2.90258 20.89 3.29226 21.28C3.68193 21.67 4.31141 21.67 4.70108 21.28L5.99001 19.99L7.57868 21.58C8.35803 22.36 9.62698 22.36 10.4063 21.58L11.995 19.99L13.5837 21.58C13.9734 21.97 14.4829 22.16 14.9925 22.16C15.5021 22.16 16.0117 21.97 16.4013 21.58H16.4213Z\\\"></path></svg>\"\n\n/***/ }),\n\n/***/ \"./src/images/smiley/terrible.svg\":\n/*!****************************************!*\\\n  !*** ./src/images/smiley/terrible.svg ***!\n  \\****************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewBox=\\\"0 0 24 24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M4 4.9938C4 4.44362 4.45 3.99348 5 3.99348H6.59L5.3 2.70306C4.91 2.31293 4.91 1.68272 5.3 1.2926C5.69 0.902468 6.32 0.902468 6.71 1.2926L9.71 4.29357C9.8 4.3836 9.88 4.49364 9.93 4.62368C10.03 4.86376 10.03 5.14385 9.93 5.38393C9.88 5.50397 9.81 5.614 9.71 5.71404L6.71 8.71501C6.51 8.91508 6.26 9.00511 6 9.00511C5.74 9.00511 5.49 8.90508 5.29 8.71501C4.9 8.32489 4.9 7.69468 5.29 7.30456L6.58 6.01413H4.99C4.44 6.01413 3.99 5.56399 3.99 5.01381L4 4.9938ZM14.08 5.37393C14.13 5.49397 14.2 5.604 14.3 5.70403L17.3 8.70501C17.5 8.90508 17.75 8.99511 18.01 8.99511C18.27 8.99511 18.52 8.89507 18.72 8.70501C19.11 8.31488 19.11 7.68468 18.72 7.29455L17.43 6.00413H19.02C19.57 6.00413 20.02 5.55399 20.02 5.00381C20.02 4.45363 19.57 4.00348 19.02 4.00348H17.43L18.72 2.71306C19.11 2.32293 19.11 1.69273 18.72 1.3026C18.33 0.912471 17.7 0.912471 17.31 1.3026L14.31 4.30358C14.22 4.39361 14.14 4.50364 14.09 4.63368C13.99 4.87376 13.99 5.15385 14.09 5.39393L14.08 5.37393ZM22 14.9971V20.999C22 22.6496 20.65 24 19 24H5C3.35 24 2 22.6496 2 20.999V14.9971C2 13.3465 3.35 11.9961 5 11.9961H19C20.65 11.9961 22 13.3465 22 14.9971ZM19 13.9967H16V16.9977H20V14.9971C20 14.4469 19.55 13.9967 19 13.9967ZM14 16.9977V13.9967H10V16.9977H14ZM10 18.9984V21.9993H14V18.9984H10ZM4 14.9971V16.9977H8V13.9967H5C4.45 13.9967 4 14.4469 4 14.9971ZM5 21.9993H8V18.9984H4V20.999C4 21.5492 4.45 21.9993 5 21.9993ZM20 20.999V18.9984H16V21.9993H19C19.55 21.9993 20 21.5492 20 20.999Z\\\"></path></svg>\"\n\n/***/ }),\n\n/***/ \"./src/images/smiley/very-good.svg\":\n/*!*****************************************!*\\\n  !*** ./src/images/smiley/very-good.svg ***!\n  \\*****************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewBox=\\\"0 0 24 24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M12.01 24C6.85721 24 1.15412 20.96 0.0134987 14.16C-0.0765501 13.62 0.293651 13.1 0.833944 13.01C1.38424 12.92 1.89452 13.29 1.98457 13.83C2.92508 19.47 7.69767 21.99 12 21.99C16.3023 21.99 21.0749 19.47 22.0154 13.83C22.1055 13.29 22.6158 12.92 23.1661 13.01C23.7063 13.1 24.0765 13.62 23.9865 14.16C22.8559 20.95 17.1428 24 11.99 24H12.01ZM8.00783 6V2C8.00783 1.45 7.55759 1 7.00729 1C6.45699 1 6.00675 1.45 6.00675 2V6C6.00675 6.55 6.45699 7 7.00729 7C7.55759 7 8.00783 6.55 8.00783 6ZM18.0133 6V2C18.0133 1.45 17.563 1 17.0127 1C16.4624 1 16.0122 1.45 16.0122 2V6C16.0122 6.55 16.4624 7 17.0127 7C17.563 7 18.0133 6.55 18.0133 6Z\\\"></path></svg>\"\n\n/***/ }),\n\n/***/ \"./src/images/smiley/very-poor.svg\":\n/*!*****************************************!*\\\n  !*** ./src/images/smiley/very-poor.svg ***!\n  \\*****************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewBox=\\\"0 0 24 24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><g clip-path=\\\"url(#clip0_15894_140103)\\\"><path d=\\\"M4.88291 4.50999C4.47291 4.50999 4.08291 4.24999 3.94291 3.83999C3.76291 3.31999 4.03291 2.74999 4.55291 2.56999L8.32291 1.24999C8.84291 1.05999 9.41291 1.33999 9.59291 1.85999C9.77291 2.37999 9.50291 2.94999 8.98291 3.12999L5.20291 4.44999C5.09291 4.48999 4.98291 4.50999 4.87291 4.50999H4.88291ZM19.8129 3.88999C20.0229 3.37999 19.7729 2.78999 19.2629 2.58999L15.5529 1.06999C15.0429 0.859992 14.4529 1.10999 14.2529 1.61999C14.0429 2.12999 14.2929 2.71999 14.8029 2.91999L18.5029 4.42999C18.6229 4.47999 18.7529 4.49999 18.8829 4.49999C19.2729 4.49999 19.6529 4.26999 19.8129 3.87999V3.88999ZM3.50291 5.99999C2.64291 6.36999 1.79291 6.87999 1.00291 7.47999C0.79291 7.63999 0.64291 7.86999 0.59291 8.13999C0.48291 8.72999 0.87291 9.28999 1.45291 9.39999C2.04291 9.50999 2.60291 9.11999 2.71291 8.53999C2.87291 7.68999 3.12291 6.82999 3.50291 5.98999V5.99999ZM21.0429 8.54999C21.6029 10.48 24.2429 8.83999 22.7529 7.47999C21.9629 6.87999 21.1129 6.36999 20.2529 5.99999C20.6329 6.83999 20.8829 7.69999 21.0429 8.54999ZM21.5729 13.2C21.2529 14.2 22.5429 15.09 23.3629 14.39C23.8529 14 23.9229 13.29 23.5429 12.81C21.7429 10.67 22.1329 10.55 21.5829 13.2H21.5729ZM1.75291 11C1.22291 11.79 -0.14709 12.64 0.0129102 13.75C0.15291 14.36 0.75291 14.74 1.35291 14.6C2.98291 14.1 1.80291 12.22 1.75291 11ZM19.8829 17C19.8829 13.14 16.2929 9.99999 11.8829 9.99999C7.47291 9.99999 3.88291 13.14 3.88291 17C3.88291 20.86 7.47291 24 11.8829 24C16.2929 24 19.8829 20.86 19.8829 17ZM17.8829 17C17.8829 19.76 15.1929 22 11.8829 22C8.57291 22 5.88291 19.76 5.88291 17C5.88291 14.24 8.57291 12 11.8829 12C15.1929 12 17.8829 14.24 17.8829 17Z\\\"></path></g><defs><clipPath id=\\\"clip0_15894_140103\\\"><rect width=\\\"24\\\" height=\\\"24\\\" fill=\\\"white\\\"></rect></clipPath></defs></svg>\"\n\n/***/ }),\n\n/***/ \"./src/itemvalue.ts\":\n/*!**************************!*\\\n  !*** ./src/itemvalue.ts ***!\n  \\**************************/\n/*! exports provided: ItemValue */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1687306__) {\n\n\"use strict\";\n__nested_webpack_require_1687306__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_1687306__.d(__nested_webpack_exports__, \"ItemValue\", function() { return ItemValue; });\n/* harmony import */ var _localizablestring__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1687306__(/*! ./localizablestring */ \"./src/localizablestring.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1687306__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1687306__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _conditions__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1687306__(/*! ./conditions */ \"./src/conditions.ts\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1687306__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1687306__(/*! ./settings */ \"./src/settings.ts\");\n/* harmony import */ var _actions_action__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_1687306__(/*! ./actions/action */ \"./src/actions/action.ts\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_1687306__(/*! ./question */ \"./src/question.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\n\n\n\n/**\n * Array of ItemValue is used in checkbox, dropdown and radiogroup choices, matrix columns and rows.\n * It has two main properties: value and text. If text is empty, value is used for displaying.\n * The text property is localizable and support markdown.\n */\nvar ItemValue = /** @class */ (function (_super) {\n    __extends(ItemValue, _super);\n    function ItemValue(value, text, typeName) {\n        if (text === void 0) { text = null; }\n        if (typeName === void 0) { typeName = \"itemvalue\"; }\n        var _this = _super.call(this) || this;\n        _this.typeName = typeName;\n        _this.ownerPropertyName = \"\";\n        _this.locTextValue = new _localizablestring__WEBPACK_IMPORTED_MODULE_0__[\"LocalizableString\"](_this, true, \"text\");\n        _this.locTextValue.onStrChanged = function (oldValue, newValue) {\n            if (newValue == _this.value) {\n                newValue = undefined;\n            }\n            _this.propertyValueChanged(\"text\", oldValue, newValue);\n        };\n        _this.locTextValue.onGetTextCallback = function (txt) {\n            return txt\n                ? txt\n                : !_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(_this.value)\n                    ? _this.value.toString()\n                    : null;\n        };\n        if (text)\n            _this.locText.text = text;\n        if (!!value && typeof value === \"object\") {\n            _this.setData(value);\n        }\n        else {\n            _this.value = value;\n        }\n        if (_this.getType() != \"itemvalue\") {\n            _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"CustomPropertiesCollection\"].createProperties(_this);\n        }\n        _this.data = _this;\n        _this.onCreating();\n        return _this;\n    }\n    ItemValue.prototype.getMarkdownHtml = function (text, name) {\n        return !!this.locOwner ? this.locOwner.getMarkdownHtml(text, name) : undefined;\n    };\n    ItemValue.prototype.getRenderer = function (name) {\n        return !!this.locOwner ? this.locOwner.getRenderer(name) : null;\n    };\n    ItemValue.prototype.getRendererContext = function (locStr) {\n        return !!this.locOwner ? this.locOwner.getRendererContext(locStr) : locStr;\n    };\n    ItemValue.prototype.getProcessedText = function (text) {\n        return this.locOwner ? this.locOwner.getProcessedText(text) : text;\n    };\n    Object.defineProperty(ItemValue, \"Separator\", {\n        get: function () {\n            return _settings__WEBPACK_IMPORTED_MODULE_5__[\"settings\"].itemValueSeparator;\n        },\n        set: function (val) {\n            _settings__WEBPACK_IMPORTED_MODULE_5__[\"settings\"].itemValueSeparator = val;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    /**\n     * Resets the input array and fills it with values from the values array\n     */\n    ItemValue.setData = function (items, values, type) {\n        items.length = 0;\n        for (var i = 0; i < values.length; i++) {\n            var value = values[i];\n            var itemType = !!value && typeof value.getType === \"function\" ? value.getType() : (type !== null && type !== void 0 ? type : \"itemvalue\");\n            var item = _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].createClass(itemType);\n            item.setData(value);\n            if (!!value.originalItem) {\n                item.originalItem = value.originalItem;\n            }\n            items.push(item);\n        }\n    };\n    ItemValue.getData = function (items) {\n        var result = [];\n        for (var i = 0; i < items.length; i++) {\n            result.push(items[i].getData());\n        }\n        return result;\n    };\n    ItemValue.getItemByValue = function (items, val) {\n        if (!Array.isArray(items))\n            return null;\n        var valIsEmpty = _helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(val);\n        for (var i = 0; i < items.length; i++) {\n            if (valIsEmpty && _helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(items[i].value))\n                return items[i];\n            if (_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isTwoValueEquals(items[i].value, val, false, true, false))\n                return items[i];\n        }\n        return null;\n    };\n    ItemValue.getTextOrHtmlByValue = function (items, val) {\n        var item = ItemValue.getItemByValue(items, val);\n        return item !== null ? item.locText.textOrHtml : \"\";\n    };\n    ItemValue.locStrsChanged = function (items) {\n        for (var i = 0; i < items.length; i++) {\n            items[i].locStrsChanged();\n        }\n    };\n    ItemValue.runConditionsForItems = function (items, filteredItems, runner, values, properties, useItemExpression, onItemCallBack) {\n        if (useItemExpression === void 0) { useItemExpression = true; }\n        return ItemValue.runConditionsForItemsCore(items, filteredItems, runner, values, properties, true, useItemExpression, onItemCallBack);\n    };\n    ItemValue.runEnabledConditionsForItems = function (items, runner, values, properties, onItemCallBack) {\n        return ItemValue.runConditionsForItemsCore(items, null, runner, values, properties, false, true, onItemCallBack);\n    };\n    ItemValue.runConditionsForItemsCore = function (items, filteredItems, runner, values, properties, isVisible, useItemExpression, onItemCallBack) {\n        if (useItemExpression === void 0) { useItemExpression = true; }\n        if (!values) {\n            values = {};\n        }\n        var itemValue = values[\"item\"];\n        var choiceValue = values[\"choice\"];\n        var hasChanded = false;\n        for (var i = 0; i < items.length; i++) {\n            var item = items[i];\n            values[\"item\"] = item.value;\n            values[\"choice\"] = item.value;\n            var itemRunner = useItemExpression && !!item.getConditionRunner\n                ? item.getConditionRunner(isVisible)\n                : false;\n            if (!itemRunner) {\n                itemRunner = runner;\n            }\n            var newValue = true;\n            if (itemRunner) {\n                newValue = itemRunner.run(values, properties);\n            }\n            if (!!onItemCallBack) {\n                newValue = onItemCallBack(item, newValue);\n            }\n            if (!!filteredItems && newValue) {\n                filteredItems.push(item);\n            }\n            var oldValue = isVisible ? item.isVisible : item.isEnabled;\n            if (newValue != oldValue) {\n                hasChanded = true;\n                if (isVisible) {\n                    if (!!item.setIsVisible)\n                        item.setIsVisible(newValue);\n                }\n                else {\n                    if (!!item.setIsEnabled)\n                        item.setIsEnabled(newValue);\n                }\n            }\n        }\n        if (itemValue) {\n            values[\"item\"] = itemValue;\n        }\n        else {\n            delete values[\"item\"];\n        }\n        if (choiceValue) {\n            values[\"choice\"] = choiceValue;\n        }\n        else {\n            delete values[\"choice\"];\n        }\n        return hasChanded;\n    };\n    ItemValue.prototype.onCreating = function () { };\n    ItemValue.prototype.getType = function () {\n        return !!this.typeName ? this.typeName : \"itemvalue\";\n    };\n    ItemValue.prototype.getSurvey = function (live) {\n        if (live === void 0) { live = false; }\n        return !!this.locOwner && !!this.locOwner[\"getSurvey\"]\n            ? this.locOwner.getSurvey()\n            : null;\n    };\n    ItemValue.prototype.getLocale = function () {\n        return !!this.locOwner && this.locOwner.getLocale ? this.locOwner.getLocale() : \"\";\n    };\n    Object.defineProperty(ItemValue.prototype, \"isInternal\", {\n        get: function () {\n            return this.isGhost === true;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(ItemValue.prototype, \"locText\", {\n        get: function () {\n            return this.locTextValue;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    ItemValue.prototype.setLocText = function (locText) {\n        this.locTextValue = locText;\n    };\n    Object.defineProperty(ItemValue.prototype, \"locOwner\", {\n        get: function () {\n            return this._locOwner;\n        },\n        set: function (value) {\n            this._locOwner = value;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(ItemValue.prototype, \"value\", {\n        get: function () {\n            return this.getPropertyValue(\"value\");\n        },\n        set: function (newValue) {\n            var text = undefined;\n            if (!_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(newValue)) {\n                var str = newValue.toString();\n                var index = str.indexOf(_settings__WEBPACK_IMPORTED_MODULE_5__[\"settings\"].itemValueSeparator);\n                if (index > -1) {\n                    newValue = str.slice(0, index);\n                    text = str.slice(index + 1);\n                }\n            }\n            this.setPropertyValue(\"value\", newValue);\n            if (!!text) {\n                this.text = text;\n            }\n            this.id = this.value;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(ItemValue.prototype, \"hasText\", {\n        get: function () {\n            return this.locText.pureText ? true : false;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(ItemValue.prototype, \"pureText\", {\n        get: function () {\n            return this.locText.pureText;\n        },\n        set: function (val) {\n            this.text = val;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(ItemValue.prototype, \"text\", {\n        get: function () {\n            return this.locText.calculatedText; //TODO: it will be correct to use this.locText.text, however it would require a lot of rewriting in Creator\n        },\n        set: function (newText) {\n            this.locText.text = newText;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(ItemValue.prototype, \"calculatedText\", {\n        get: function () {\n            return this.locText.calculatedText;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(ItemValue.prototype, \"shortcutText\", {\n        get: function () {\n            return this.text;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    ItemValue.prototype.canSerializeValue = function () {\n        var val = this.value;\n        if (val === undefined || val === null)\n            return false;\n        return !Array.isArray(val) && typeof val !== \"object\";\n    };\n    ItemValue.prototype.getData = function () {\n        var json = this.toJSON();\n        if (!!json[\"value\"] && !!json[\"value\"][\"pos\"]) {\n            delete json[\"value\"][\"pos\"];\n        }\n        if (_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(json.value))\n            return json;\n        var canSerializeVal = this.canSerializeValue();\n        var canSerializeAsContant = !canSerializeVal || !_settings__WEBPACK_IMPORTED_MODULE_5__[\"settings\"].serialization.itemValueSerializeAsObject && !_settings__WEBPACK_IMPORTED_MODULE_5__[\"settings\"].serialization.itemValueSerializeDisplayText;\n        if (canSerializeAsContant && Object.keys(json).length == 1)\n            return this.value;\n        if (_settings__WEBPACK_IMPORTED_MODULE_5__[\"settings\"].serialization.itemValueSerializeDisplayText && json.text === undefined && canSerializeVal) {\n            json.text = this.value.toString();\n        }\n        return json;\n    };\n    ItemValue.prototype.toJSON = function () {\n        var res = {};\n        var properties = _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].getProperties(this.getType());\n        if (!properties || properties.length == 0) {\n            properties = _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].getProperties(\"itemvalue\");\n        }\n        var jsoObj = new _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"JsonObject\"]();\n        for (var i = 0; i < properties.length; i++) {\n            var prop = properties[i];\n            if (prop.name === \"text\" && !this.locText.hasNonDefaultText() &&\n                _helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isTwoValueEquals(this.value, this.text, false, true, false))\n                continue;\n            jsoObj.valueToJson(this, res, prop);\n        }\n        return res;\n    };\n    ItemValue.prototype.setData = function (value) {\n        if (_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(value))\n            return;\n        if (typeof value.value === \"undefined\" && typeof value.text !== \"undefined\" && Object.keys(value).length === 1) {\n            value.value = value.text;\n        }\n        if (typeof value.value !== \"undefined\") {\n            var json = void 0;\n            if (typeof value.toJSON === \"function\") {\n                json = value.toJSON();\n            }\n            else {\n                json = value;\n            }\n            new _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"JsonObject\"]().toObject(json, this);\n        }\n        else {\n            this.value = value;\n        }\n        this.locText.strChanged();\n    };\n    Object.defineProperty(ItemValue.prototype, \"visibleIf\", {\n        get: function () {\n            return this.getPropertyValue(\"visibleIf\", \"\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"visibleIf\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(ItemValue.prototype, \"enableIf\", {\n        get: function () {\n            return this.getPropertyValue(\"enableIf\", \"\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"enableIf\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(ItemValue.prototype, \"isVisible\", {\n        get: function () {\n            return this.getPropertyValue(\"isVisible\", true);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    ItemValue.prototype.setIsVisible = function (val) {\n        this.setPropertyValue(\"isVisible\", val);\n    };\n    Object.defineProperty(ItemValue.prototype, \"isEnabled\", {\n        get: function () {\n            return this.getPropertyValue(\"isEnabled\", true);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    ItemValue.prototype.setIsEnabled = function (val) {\n        this.setPropertyValue(\"isEnabled\", val);\n    };\n    ItemValue.prototype.addUsedLocales = function (locales) {\n        this.AddLocStringToUsedLocales(this.locTextValue, locales);\n    };\n    ItemValue.prototype.locStrsChanged = function () {\n        _super.prototype.locStrsChanged.call(this);\n        this.locText.strChanged();\n    };\n    ItemValue.prototype.onPropertyValueChanged = function (name, oldValue, newValue) {\n        if (name === \"value\" && !this.hasText) {\n            this.locText.strChanged();\n        }\n        var funcName = \"itemValuePropertyChanged\";\n        if (!this.locOwner || !this.locOwner[funcName])\n            return;\n        this.locOwner[funcName](this, name, oldValue, newValue);\n    };\n    ItemValue.prototype.getConditionRunner = function (isVisible) {\n        if (isVisible)\n            return this.getVisibleConditionRunner();\n        return this.getEnableConditionRunner();\n    };\n    ItemValue.prototype.getVisibleConditionRunner = function () {\n        if (!this.visibleIf)\n            return null;\n        if (!this.visibleConditionRunner)\n            this.visibleConditionRunner = new _conditions__WEBPACK_IMPORTED_MODULE_3__[\"ConditionRunner\"](this.visibleIf);\n        this.visibleConditionRunner.expression = this.visibleIf;\n        return this.visibleConditionRunner;\n    };\n    ItemValue.prototype.getEnableConditionRunner = function () {\n        if (!this.enableIf)\n            return null;\n        if (!this.enableConditionRunner)\n            this.enableConditionRunner = new _conditions__WEBPACK_IMPORTED_MODULE_3__[\"ConditionRunner\"](this.enableIf);\n        this.enableConditionRunner.expression = this.enableIf;\n        return this.enableConditionRunner;\n    };\n    Object.defineProperty(ItemValue.prototype, \"selected\", {\n        get: function () {\n            var _this = this;\n            var locOwner = this._locOwner;\n            if (locOwner instanceof _question__WEBPACK_IMPORTED_MODULE_7__[\"Question\"] && locOwner.isItemSelected && this.selectedValue === undefined) {\n                this.selectedValue = (new _base__WEBPACK_IMPORTED_MODULE_4__[\"ComputedUpdater\"](function () { return locOwner.isItemSelected(_this); }));\n            }\n            return this.selectedValue;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    ItemValue.prototype.getComponent = function () {\n        if (this._locOwner instanceof _question__WEBPACK_IMPORTED_MODULE_7__[\"Question\"]) {\n            return this.componentValue || this._locOwner.itemComponent;\n        }\n        return this.componentValue;\n    };\n    ItemValue.prototype.setComponent = function (val) {\n        this.componentValue = val;\n    };\n    ItemValue.prototype.getEnabled = function () {\n        return this.isEnabled;\n    };\n    ItemValue.prototype.setEnabled = function (val) {\n        this.setIsEnabled(val);\n    };\n    ItemValue.prototype.getVisible = function () {\n        var isVisible = this.isVisible === undefined ? true : this.isVisible;\n        var visible = this._visible === undefined ? true : this._visible;\n        return isVisible && visible;\n    };\n    ItemValue.prototype.setVisible = function (val) {\n        this._visible = val;\n    };\n    ItemValue.prototype.getLocTitle = function () {\n        return this.locText;\n    };\n    ItemValue.prototype.getTitle = function () {\n        return this.text;\n    };\n    ItemValue.prototype.setLocTitle = function (val) { };\n    ItemValue.prototype.setTitle = function (val) { };\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: true })\n    ], ItemValue.prototype, \"_visible\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n    ], ItemValue.prototype, \"selectedValue\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n    ], ItemValue.prototype, \"icon\", void 0);\n    return ItemValue;\n}(_actions_action__WEBPACK_IMPORTED_MODULE_6__[\"BaseAction\"]));\n\n_base__WEBPACK_IMPORTED_MODULE_4__[\"Base\"].createItemValue = function (source, type) {\n    var item = null;\n    if (!!type) {\n        item = _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"JsonObject\"].metaData.createClass(type, {});\n    }\n    else if (typeof source.getType === \"function\") {\n        item = new ItemValue(null, undefined, source.getType());\n    }\n    else {\n        item = new ItemValue(null);\n    }\n    item.setData(source);\n    return item;\n};\n_base__WEBPACK_IMPORTED_MODULE_4__[\"Base\"].itemValueLocStrChanged = function (arr) {\n    ItemValue.locStrsChanged(arr);\n};\n_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"JsonObjectProperty\"].getItemValuesDefaultValue = function (val, type) {\n    var res = new Array();\n    ItemValue.setData(res, Array.isArray(val) ? val : [], type);\n    return res;\n};\n_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].addClass(\"itemvalue\", [\n    { name: \"!value\", isUnique: true },\n    {\n        name: \"text\",\n        serializationProperty: \"locText\",\n    },\n    { name: \"visibleIf:condition\", showMode: \"form\" },\n    {\n        name: \"enableIf:condition\",\n        showMode: \"form\",\n        visibleIf: function (obj) {\n            return !obj || obj.ownerPropertyName !== \"rateValues\";\n        },\n    }\n], function (value) { return new ItemValue(value); });\n\n\n/***/ }),\n\n/***/ \"./src/jsonobject.ts\":\n/*!***************************!*\\\n  !*** ./src/jsonobject.ts ***!\n  \\***************************/\n/*! exports provided: property, propertyArray, JsonObjectProperty, CustomPropertiesCollection, JsonMetadataClass, JsonMetadata, JsonError, JsonUnknownPropertyError, JsonMissingTypeErrorBase, JsonMissingTypeError, JsonIncorrectTypeError, JsonRequiredPropertyError, JsonObject, Serializer */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1710304__) {\n\n\"use strict\";\n__nested_webpack_require_1710304__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_1710304__.d(__nested_webpack_exports__, \"property\", function() { return property; });\n/* harmony export (binding) */ __nested_webpack_require_1710304__.d(__nested_webpack_exports__, \"propertyArray\", function() { return propertyArray; });\n/* harmony export (binding) */ __nested_webpack_require_1710304__.d(__nested_webpack_exports__, \"JsonObjectProperty\", function() { return JsonObjectProperty; });\n/* harmony export (binding) */ __nested_webpack_require_1710304__.d(__nested_webpack_exports__, \"CustomPropertiesCollection\", function() { return CustomPropertiesCollection; });\n/* harmony export (binding) */ __nested_webpack_require_1710304__.d(__nested_webpack_exports__, \"JsonMetadataClass\", function() { return JsonMetadataClass; });\n/* harmony export (binding) */ __nested_webpack_require_1710304__.d(__nested_webpack_exports__, \"JsonMetadata\", function() { return JsonMetadata; });\n/* harmony export (binding) */ __nested_webpack_require_1710304__.d(__nested_webpack_exports__, \"JsonError\", function() { return JsonError; });\n/* harmony export (binding) */ __nested_webpack_require_1710304__.d(__nested_webpack_exports__, \"JsonUnknownPropertyError\", function() { return JsonUnknownPropertyError; });\n/* harmony export (binding) */ __nested_webpack_require_1710304__.d(__nested_webpack_exports__, \"JsonMissingTypeErrorBase\", function() { return JsonMissingTypeErrorBase; });\n/* harmony export (binding) */ __nested_webpack_require_1710304__.d(__nested_webpack_exports__, \"JsonMissingTypeError\", function() { return JsonMissingTypeError; });\n/* harmony export (binding) */ __nested_webpack_require_1710304__.d(__nested_webpack_exports__, \"JsonIncorrectTypeError\", function() { return JsonIncorrectTypeError; });\n/* harmony export (binding) */ __nested_webpack_require_1710304__.d(__nested_webpack_exports__, \"JsonRequiredPropertyError\", function() { return JsonRequiredPropertyError; });\n/* harmony export (binding) */ __nested_webpack_require_1710304__.d(__nested_webpack_exports__, \"JsonObject\", function() { return JsonObject; });\n/* harmony export (binding) */ __nested_webpack_require_1710304__.d(__nested_webpack_exports__, \"Serializer\", function() { return Serializer; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1710304__(/*! ./surveyStrings */ \"./src/surveyStrings.ts\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1710304__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1710304__(/*! ./helpers */ \"./src/helpers.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __spreadArray = ( false) || function (to, from) {\n    for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\n        to[j] = from[i];\n    return to;\n};\n\n\n\nfunction ensureLocString(target, options, key) {\n    var locString = target.getLocalizableString(key);\n    if (!locString) {\n        locString = target.createLocalizableString(key, target, true);\n        if (typeof options.localizable === \"object\" &&\n            typeof options.localizable.onGetTextCallback === \"function\") {\n            locString.onGetTextCallback = options.localizable.onGetTextCallback;\n        }\n    }\n}\nfunction getLocStringValue(target, options, key) {\n    ensureLocString(target, options, key);\n    var res = target.getLocalizableStringText(key);\n    if (!!res)\n        return res;\n    if (typeof options.localizable === \"object\" && options.localizable.defaultStr) {\n        var loc = !!target.getLocale ? target.getLocale() : \"\";\n        return _surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].getString(options.localizable.defaultStr, loc);\n    }\n    return \"\";\n}\nfunction property(options) {\n    if (options === void 0) { options = {}; }\n    // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n    return function (target, key) {\n        var processComputedUpdater = function (obj, val) {\n            if (!!val && typeof val === \"object\" && val.type === _base__WEBPACK_IMPORTED_MODULE_1__[\"ComputedUpdater\"].ComputedUpdaterType) {\n                _base__WEBPACK_IMPORTED_MODULE_1__[\"Base\"].startCollectDependencies(function () { return obj[key] = val.updater(); }, obj, key);\n                var result = val.updater();\n                var dependencies = _base__WEBPACK_IMPORTED_MODULE_1__[\"Base\"].finishCollectDependencies();\n                val.setDependencies(dependencies);\n                if (obj.dependencies[key]) {\n                    obj.dependencies[key].dispose();\n                }\n                obj.dependencies[key] = val;\n                return result;\n            }\n            return val;\n        };\n        if (!options || !options.localizable) {\n            Object.defineProperty(target, key, {\n                get: function () {\n                    var defaultVal = null;\n                    if (!!options) {\n                        if (typeof options.getDefaultValue === \"function\") {\n                            defaultVal = options.getDefaultValue(this);\n                        }\n                        if (options.defaultValue !== undefined) {\n                            defaultVal = options.defaultValue;\n                        }\n                    }\n                    return this.getPropertyValue(key, defaultVal);\n                },\n                set: function (val) {\n                    var newValue = processComputedUpdater(this, val);\n                    this.setPropertyValue(key, newValue);\n                    if (!!options && options.onSet) {\n                        options.onSet(newValue, this);\n                    }\n                },\n            });\n        }\n        else {\n            Object.defineProperty(target, key, {\n                get: function () {\n                    return getLocStringValue(this, options, key);\n                },\n                set: function (val) {\n                    ensureLocString(this, options, key);\n                    var newValue = processComputedUpdater(this, val);\n                    this.setLocalizableStringText(key, newValue);\n                    if (!!options && options.onSet) {\n                        options.onSet(newValue, this);\n                    }\n                },\n            });\n            Object.defineProperty(target, typeof options.localizable === \"object\" && !!options.localizable.name ?\n                options.localizable.name : \"loc\" + key.charAt(0).toUpperCase() + key.slice(1), {\n                get: function () {\n                    ensureLocString(this, options, key);\n                    return this.getLocalizableString(key);\n                },\n            });\n        }\n    };\n}\nfunction ensureArray(target, options, key) {\n    target.ensureArray(key, function (item, index) {\n        var handler = !!options ? options.onPush : null;\n        handler && handler(item, index, target);\n    }, function (item, index) {\n        var handler = !!options ? options.onRemove : null;\n        handler && handler(item, index, target);\n    });\n}\nfunction propertyArray(options) {\n    return function (target, key) {\n        Object.defineProperty(target, key, {\n            get: function () {\n                ensureArray(this, options, key);\n                return this.getPropertyValue(key);\n            },\n            set: function (val) {\n                ensureArray(this, options, key);\n                var arr = this.getPropertyValue(key);\n                if (val === arr) {\n                    return;\n                }\n                if (arr) {\n                    arr.splice.apply(arr, __spreadArray([0, arr.length], (val || [])));\n                }\n                else {\n                    this.setPropertyValue(key, val);\n                }\n                if (!!options && options.onSet) {\n                    options.onSet(val, this);\n                }\n            },\n        });\n    };\n}\n/**\n * Contains information about a property of a survey element (page, panel, questions, and etc).\n * @see addProperty\n * @see removeProperty\n * @see [Add Properties](https://surveyjs.io/Documentation/Survey-Creator#addproperties)\n * @see [Remove Properties](https://surveyjs.io/Documentation/Survey-Creator#removeproperties)\n */\nvar JsonObjectProperty = /** @class */ (function () {\n    function JsonObjectProperty(classInfo, name, isRequired) {\n        if (isRequired === void 0) { isRequired = false; }\n        this.name = name;\n        this.isRequiredValue = false;\n        this.isUniqueValue = false;\n        this.isSerializable = true;\n        this.isLightSerializable = true;\n        this.isCustom = false;\n        this.isDynamicChoices = false; //TODO obsolete, use dependsOn attribute\n        this.isBindable = false;\n        this.category = \"\";\n        this.categoryIndex = -1;\n        this.visibleIndex = -1;\n        this.maxLength = -1;\n        this.isArray = false;\n        this.classInfoValue = classInfo;\n        this.isRequiredValue = isRequired;\n        this.idValue = JsonObjectProperty.Index++;\n    }\n    Object.defineProperty(JsonObjectProperty.prototype, \"id\", {\n        get: function () {\n            return this.idValue;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(JsonObjectProperty.prototype, \"classInfo\", {\n        get: function () {\n            return this.classInfoValue;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(JsonObjectProperty.prototype, \"type\", {\n        get: function () {\n            return this.typeValue ? this.typeValue : \"string\";\n        },\n        set: function (value) {\n            if (value === \"itemvalues\")\n                value = \"itemvalue[]\";\n            if (value === \"textitems\")\n                value = \"textitem[]\";\n            this.typeValue = value;\n            if (this.typeValue.indexOf(\"[]\") === this.typeValue.length - 2) {\n                this.isArray = true;\n                this.className = this.typeValue.substring(0, this.typeValue.length - 2);\n            }\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(JsonObjectProperty.prototype, \"isRequired\", {\n        get: function () {\n            return this.isRequiredValue;\n        },\n        set: function (val) {\n            this.isRequiredValue = val;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(JsonObjectProperty.prototype, \"isUnique\", {\n        get: function () {\n            return this.isUniqueValue;\n        },\n        set: function (val) {\n            this.isUniqueValue = val;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(JsonObjectProperty.prototype, \"uniquePropertyName\", {\n        get: function () {\n            return this.uniquePropertyValue;\n        },\n        set: function (val) {\n            this.uniquePropertyValue = val;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(JsonObjectProperty.prototype, \"hasToUseGetValue\", {\n        get: function () {\n            return this.onGetValue || this.serializationProperty;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(JsonObjectProperty.prototype, \"defaultValue\", {\n        get: function () {\n            var result = !!this.defaultValueFunc ? this.defaultValueFunc() : this.defaultValueValue;\n            if (!!JsonObjectProperty.getItemValuesDefaultValue &&\n                JsonObject.metaData.isDescendantOf(this.className, \"itemvalue\")) {\n                result = JsonObjectProperty.getItemValuesDefaultValue(this.defaultValueValue || [], this.className);\n            }\n            return result;\n        },\n        set: function (newValue) {\n            this.defaultValueValue = newValue;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    JsonObjectProperty.prototype.isDefaultValue = function (value) {\n        if (!_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(this.defaultValue)) {\n            return _helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isTwoValueEquals(value, this.defaultValue, false, true, false);\n        }\n        if (this.isLocalizable)\n            return value === null || value === undefined;\n        return ((value === false && (this.type == \"boolean\" || this.type == \"switch\")) ||\n            value === \"\" || _helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(value));\n    };\n    JsonObjectProperty.prototype.getValue = function (obj) {\n        if (this.onGetValue)\n            return this.onGetValue(obj);\n        if (this.serializationProperty && !!obj[this.serializationProperty])\n            return obj[this.serializationProperty].getJson();\n        return obj[this.name];\n    };\n    JsonObjectProperty.prototype.getPropertyValue = function (obj) {\n        if (this.isLocalizable) {\n            return !!obj[this.serializationProperty]\n                ? obj[this.serializationProperty].text\n                : null;\n        }\n        return this.getValue(obj);\n    };\n    Object.defineProperty(JsonObjectProperty.prototype, \"hasToUseSetValue\", {\n        get: function () {\n            return this.onSetValue || this.serializationProperty;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    JsonObjectProperty.prototype.settingValue = function (obj, value) {\n        if (!this.onSettingValue || obj.isLoadingFromJson)\n            return value;\n        return this.onSettingValue(obj, value);\n    };\n    JsonObjectProperty.prototype.setValue = function (obj, value, jsonConv) {\n        if (this.onSetValue) {\n            this.onSetValue(obj, value, jsonConv);\n        }\n        else {\n            if (this.serializationProperty && !!obj[this.serializationProperty])\n                obj[this.serializationProperty].setJson(value);\n            else {\n                if (value && typeof value === \"string\") {\n                    if (this.type == \"number\") {\n                        value = parseInt(value);\n                    }\n                    if (this.type == \"boolean\" || this.type == \"switch\") {\n                        value = value.toLowerCase() === \"true\";\n                    }\n                }\n                obj[this.name] = value;\n            }\n        }\n    };\n    JsonObjectProperty.prototype.getObjType = function (objType) {\n        if (!this.classNamePart)\n            return objType;\n        return objType.replace(this.classNamePart, \"\");\n    };\n    Object.defineProperty(JsonObjectProperty.prototype, \"choices\", {\n        /**\n         * Depricated, please use getChoices\n         */\n        get: function () {\n            return this.getChoices(null);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(JsonObjectProperty.prototype, \"hasChoices\", {\n        get: function () {\n            return !!this.choicesValue || !!this.choicesfunc;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    JsonObjectProperty.prototype.getChoices = function (obj, choicesCallback) {\n        if (choicesCallback === void 0) { choicesCallback = null; }\n        if (this.choicesValue != null)\n            return this.choicesValue;\n        if (this.choicesfunc != null)\n            return this.choicesfunc(obj, choicesCallback);\n        return null;\n    };\n    JsonObjectProperty.prototype.setChoices = function (value, valueFunc) {\n        if (valueFunc === void 0) { valueFunc = null; }\n        this.choicesValue = value;\n        this.choicesfunc = valueFunc;\n    };\n    JsonObjectProperty.prototype.getBaseValue = function () {\n        if (!this.baseValue)\n            return \"\";\n        if (typeof this.baseValue == \"function\")\n            return this.baseValue();\n        return this.baseValue;\n    };\n    JsonObjectProperty.prototype.setBaseValue = function (val) {\n        this.baseValue = val;\n    };\n    Object.defineProperty(JsonObjectProperty.prototype, \"readOnly\", {\n        get: function () {\n            return this.readOnlyValue != null ? this.readOnlyValue : false;\n        },\n        set: function (val) {\n            this.readOnlyValue = val;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    JsonObjectProperty.prototype.isVisible = function (layout, obj) {\n        if (obj === void 0) { obj = null; }\n        var isLayout = !this.layout || this.layout == layout;\n        if (!this.visible || !isLayout)\n            return false;\n        if (!!this.visibleIf && !!obj)\n            return this.visibleIf(obj);\n        return true;\n    };\n    Object.defineProperty(JsonObjectProperty.prototype, \"visible\", {\n        get: function () {\n            return this.visibleValue != null ? this.visibleValue : true;\n        },\n        set: function (val) {\n            this.visibleValue = val;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(JsonObjectProperty.prototype, \"isLocalizable\", {\n        get: function () {\n            return this.isLocalizableValue != null ? this.isLocalizableValue : false;\n        },\n        set: function (val) {\n            this.isLocalizableValue = val;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(JsonObjectProperty.prototype, \"dataList\", {\n        get: function () {\n            return Array.isArray(this.dataListValue) ? this.dataListValue : [];\n        },\n        set: function (val) {\n            this.dataListValue = val;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    JsonObjectProperty.prototype.mergeWith = function (prop) {\n        var valuesNames = JsonObjectProperty.mergableValues;\n        for (var i = 0; i < valuesNames.length; i++) {\n            this.mergeValue(prop, valuesNames[i]);\n        }\n    };\n    JsonObjectProperty.prototype.addDependedProperty = function (name) {\n        if (!this.dependedProperties) {\n            this.dependedProperties = [];\n        }\n        if (this.dependedProperties.indexOf(name) < 0) {\n            this.dependedProperties.push(name);\n        }\n    };\n    JsonObjectProperty.prototype.getDependedProperties = function () {\n        return !!this.dependedProperties ? this.dependedProperties : [];\n    };\n    JsonObjectProperty.prototype.schemaType = function () {\n        if (this.className === \"choicesByUrl\")\n            return undefined;\n        if (this.className === \"string\")\n            return this.className;\n        if (!!this.className)\n            return \"array\";\n        if (!!this.baseClassName)\n            return \"array\";\n        if (this.type == \"switch\")\n            return \"boolean\";\n        if (this.type == \"boolean\" || this.type == \"number\")\n            return this.type;\n        return \"string\";\n    };\n    JsonObjectProperty.prototype.schemaRef = function () {\n        if (!!this.className)\n            return this.className;\n        return undefined;\n    };\n    JsonObjectProperty.prototype.mergeValue = function (prop, valueName) {\n        if (this[valueName] == null && prop[valueName] != null) {\n            this[valueName] = prop[valueName];\n        }\n    };\n    JsonObjectProperty.Index = 1;\n    JsonObjectProperty.mergableValues = [\n        \"typeValue\",\n        \"choicesValue\",\n        \"baseValue\",\n        \"readOnlyValue\",\n        \"visibleValue\",\n        \"isSerializable\",\n        \"isLightSerializable\",\n        \"isCustom\",\n        \"isBindable\",\n        \"isUnique\",\n        \"uniquePropertyName\",\n        \"isDynamicChoices\",\n        \"isLocalizableValue\",\n        \"className\",\n        \"alternativeName\",\n        \"layout\",\n        \"classNamePart\",\n        \"baseClassName\",\n        \"defaultValue\",\n        \"defaultValueFunc\",\n        \"serializationProperty\",\n        \"onGetValue\",\n        \"onSetValue\",\n        \"onSettingValue\",\n        \"displayName\",\n        \"category\",\n        \"categoryIndex\",\n        \"visibleIndex\",\n        \"nextToProperty\",\n        \"overridingProperty\",\n        \"showMode\",\n        \"dependedProperties\",\n        \"visibleIf\",\n        \"onExecuteExpression\",\n        \"onPropertyEditorUpdate\",\n        \"maxLength\",\n        \"maxValue\",\n        \"minValue\",\n        \"dataListValue\",\n    ];\n    return JsonObjectProperty;\n}());\n\nvar CustomPropertiesCollection = /** @class */ (function () {\n    function CustomPropertiesCollection() {\n    }\n    CustomPropertiesCollection.addProperty = function (className, property) {\n        className = className.toLowerCase();\n        var props = CustomPropertiesCollection.properties;\n        if (!props[className]) {\n            props[className] = [];\n        }\n        props[className].push(property);\n    };\n    CustomPropertiesCollection.removeProperty = function (className, propertyName) {\n        className = className.toLowerCase();\n        var props = CustomPropertiesCollection.properties;\n        if (!props[className])\n            return;\n        var properties = props[className];\n        for (var i = 0; i < properties.length; i++) {\n            if (properties[i].name == propertyName) {\n                props[className].splice(i, 1);\n                break;\n            }\n        }\n    };\n    CustomPropertiesCollection.removeAllProperties = function (className) {\n        className = className.toLowerCase();\n        delete CustomPropertiesCollection.properties[className];\n    };\n    CustomPropertiesCollection.addClass = function (className, parentClassName) {\n        className = className.toLowerCase();\n        if (parentClassName) {\n            parentClassName = parentClassName.toLowerCase();\n        }\n        CustomPropertiesCollection.parentClasses[className] = parentClassName;\n    };\n    CustomPropertiesCollection.getProperties = function (className) {\n        className = className.toLowerCase();\n        var res = [];\n        var props = CustomPropertiesCollection.properties;\n        while (className) {\n            var properties = props[className];\n            if (properties) {\n                for (var i = 0; i < properties.length; i++) {\n                    res.push(properties[i]);\n                }\n            }\n            className = CustomPropertiesCollection.parentClasses[className];\n        }\n        return res;\n    };\n    CustomPropertiesCollection.createProperties = function (obj) {\n        if (!obj || !obj.getType)\n            return;\n        CustomPropertiesCollection.createPropertiesCore(obj, obj.getType());\n    };\n    CustomPropertiesCollection.createPropertiesCore = function (obj, className) {\n        var props = CustomPropertiesCollection.properties;\n        if (props[className]) {\n            CustomPropertiesCollection.createPropertiesInObj(obj, props[className]);\n        }\n        var parentClass = CustomPropertiesCollection.parentClasses[className];\n        if (parentClass) {\n            CustomPropertiesCollection.createPropertiesCore(obj, parentClass);\n        }\n    };\n    CustomPropertiesCollection.createPropertiesInObj = function (obj, properties) {\n        for (var i = 0; i < properties.length; i++) {\n            CustomPropertiesCollection.createPropertyInObj(obj, properties[i]);\n        }\n    };\n    CustomPropertiesCollection.createPropertyInObj = function (obj, prop) {\n        if (CustomPropertiesCollection.checkIsPropertyExists(obj, prop.name))\n            return;\n        if (!!prop.serializationProperty && CustomPropertiesCollection.checkIsPropertyExists(obj, prop.serializationProperty))\n            return;\n        if (prop.isLocalizable &&\n            prop.serializationProperty &&\n            obj.createCustomLocalizableObj) {\n            obj.createCustomLocalizableObj(prop.name);\n            var locDesc = {\n                get: function () {\n                    return obj.getLocalizableString(prop.name);\n                },\n            };\n            Object.defineProperty(obj, prop.serializationProperty, locDesc);\n            var desc = {\n                get: function () {\n                    return obj.getLocalizableStringText(prop.name, prop.defaultValue);\n                },\n                set: function (v) {\n                    obj.setLocalizableStringText(prop.name, v);\n                },\n            };\n            Object.defineProperty(obj, prop.name, desc);\n        }\n        else {\n            var defaultValue = prop.defaultValue;\n            var isArrayProp = prop.isArray || prop.type === \"multiplevalues\";\n            if (typeof obj.createNewArray === \"function\") {\n                if (JsonObject.metaData.isDescendantOf(prop.className, \"itemvalue\")) {\n                    obj.createNewArray(prop.name, function (item) {\n                        item.locOwner = obj;\n                        item.ownerPropertyName = prop.name;\n                    });\n                    isArrayProp = true;\n                }\n                else {\n                    //It is a simple array property\n                    if (isArrayProp) {\n                        obj.createNewArray(prop.name);\n                    }\n                }\n                if (isArrayProp) {\n                    if (Array.isArray(defaultValue)) {\n                        obj.setPropertyValue(prop.name, defaultValue);\n                    }\n                    defaultValue = null;\n                }\n            }\n            if (!!obj.getPropertyValue && !!obj.setPropertyValue) {\n                var desc = {\n                    get: function () {\n                        if (!!prop.onGetValue) {\n                            return prop.onGetValue(obj);\n                        }\n                        return obj.getPropertyValue(prop.name, defaultValue);\n                    },\n                    set: function (v) {\n                        if (!!prop.onSetValue) {\n                            prop.onSetValue(obj, v, null);\n                        }\n                        else {\n                            obj.setPropertyValue(prop.name, v);\n                        }\n                    },\n                };\n                Object.defineProperty(obj, prop.name, desc);\n            }\n        }\n        if (prop.type === \"condition\" || prop.type === \"expression\") {\n            if (!!prop.onExecuteExpression) {\n                obj.addExpressionProperty(prop.name, prop.onExecuteExpression);\n            }\n        }\n    };\n    CustomPropertiesCollection.checkIsPropertyExists = function (obj, name) {\n        return obj.hasOwnProperty(name) || obj[name];\n    };\n    CustomPropertiesCollection.properties = {};\n    CustomPropertiesCollection.parentClasses = {};\n    return CustomPropertiesCollection;\n}());\n\nvar JsonMetadataClass = /** @class */ (function () {\n    function JsonMetadataClass(name, properties, creator, parentName) {\n        if (creator === void 0) { creator = null; }\n        if (parentName === void 0) { parentName = null; }\n        this.name = name;\n        this.creator = creator;\n        this.parentName = parentName;\n        name = name.toLowerCase();\n        this.isCustomValue = !creator && name !== \"survey\";\n        if (this.parentName) {\n            this.parentName = this.parentName.toLowerCase();\n            CustomPropertiesCollection.addClass(name, this.parentName);\n            if (!!creator) {\n                this.makeParentRegularClass();\n            }\n        }\n        this.properties = new Array();\n        for (var i = 0; i < properties.length; i++) {\n            this.createProperty(properties[i], this.isCustom);\n        }\n    }\n    //Obsolete\n    JsonMetadataClass.prototype.find = function (name) {\n        for (var i = 0; i < this.properties.length; i++) {\n            if (this.properties[i].name == name)\n                return this.properties[i];\n        }\n        return null;\n    };\n    JsonMetadataClass.prototype.findProperty = function (name) {\n        this.fillAllProperties();\n        return this.hashProperties[name];\n    };\n    JsonMetadataClass.prototype.getAllProperties = function () {\n        this.fillAllProperties();\n        return this.allProperties;\n    };\n    JsonMetadataClass.prototype.resetAllProperties = function () {\n        this.allProperties = undefined;\n        this.hashProperties = undefined;\n        var childClasses = Serializer.getChildrenClasses(this.name);\n        for (var i = 0; i < childClasses.length; i++) {\n            childClasses[i].resetAllProperties();\n        }\n    };\n    Object.defineProperty(JsonMetadataClass.prototype, \"isCustom\", {\n        get: function () { return this.isCustomValue; },\n        enumerable: false,\n        configurable: true\n    });\n    JsonMetadataClass.prototype.fillAllProperties = function () {\n        var _this = this;\n        if (!!this.allProperties)\n            return;\n        this.allProperties = [];\n        this.hashProperties = {};\n        var localProperties = {};\n        this.properties.forEach(function (prop) { return localProperties[prop.name] = prop; });\n        var parentClass = !!this.parentName ? Serializer.findClass(this.parentName) : null;\n        if (!!parentClass) {\n            var parentProperties = parentClass.getAllProperties();\n            parentProperties.forEach(function (prop) {\n                var overridedProp = localProperties[prop.name];\n                if (!!overridedProp) {\n                    overridedProp.mergeWith(prop);\n                    _this.addPropCore(overridedProp);\n                }\n                else {\n                    _this.addPropCore(prop);\n                }\n            });\n        }\n        this.properties.forEach(function (prop) {\n            if (!_this.hashProperties[prop.name]) {\n                _this.addPropCore(prop);\n            }\n        });\n    };\n    JsonMetadataClass.prototype.addPropCore = function (prop) {\n        this.allProperties.push(prop);\n        this.hashProperties[prop.name] = prop;\n        if (!!prop.alternativeName) {\n            this.hashProperties[prop.alternativeName] = prop;\n        }\n    };\n    JsonMetadataClass.prototype.isOverridedProp = function (propName) {\n        return !!this.parentName && !!Serializer.findProperty(this.parentName, propName);\n    };\n    JsonMetadataClass.prototype.hasRegularChildClass = function () {\n        if (!this.isCustom)\n            return;\n        this.isCustomValue = false;\n        for (var i = 0; i < this.properties.length; i++) {\n            this.properties[i].isCustom = false;\n        }\n        CustomPropertiesCollection.removeAllProperties(this.name);\n        this.makeParentRegularClass();\n    };\n    JsonMetadataClass.prototype.makeParentRegularClass = function () {\n        if (!this.parentName)\n            return;\n        var parent = Serializer.findClass(this.parentName);\n        if (!!parent) {\n            parent.hasRegularChildClass();\n        }\n    };\n    JsonMetadataClass.prototype.createProperty = function (propInfo, isCustom) {\n        if (isCustom === void 0) { isCustom = false; }\n        var propertyName = typeof propInfo === \"string\" ? propInfo : propInfo.name;\n        if (!propertyName)\n            return;\n        var propertyType = null;\n        var typeIndex = propertyName.indexOf(JsonMetadataClass.typeSymbol);\n        if (typeIndex > -1) {\n            propertyType = propertyName.substring(typeIndex + 1);\n            propertyName = propertyName.substring(0, typeIndex);\n        }\n        var isRequired = this.getIsPropertyNameRequired(propertyName) || !!propInfo.isRequired;\n        propertyName = this.getPropertyName(propertyName);\n        var prop = new JsonObjectProperty(this, propertyName, isRequired);\n        if (propertyType) {\n            prop.type = propertyType;\n        }\n        if (typeof propInfo === \"object\") {\n            if (propInfo.type) {\n                prop.type = propInfo.type;\n            }\n            if (propInfo.default !== undefined) {\n                prop.defaultValue = propInfo.default;\n            }\n            if (propInfo.defaultFunc !== undefined) {\n                prop.defaultValueFunc = propInfo.defaultFunc;\n            }\n            if (!_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(propInfo.isSerializable)) {\n                prop.isSerializable = propInfo.isSerializable;\n            }\n            if (!_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(propInfo.isLightSerializable)) {\n                prop.isLightSerializable = propInfo.isLightSerializable;\n            }\n            if (!_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(propInfo.maxLength)) {\n                prop.maxLength = propInfo.maxLength;\n            }\n            if (!_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(propInfo.displayName)) {\n                prop.displayName = propInfo.displayName;\n            }\n            if (!_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(propInfo.category)) {\n                prop.category = propInfo.category;\n            }\n            if (!_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(propInfo.categoryIndex)) {\n                prop.categoryIndex = propInfo.categoryIndex;\n            }\n            if (!_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(propInfo.nextToProperty)) {\n                prop.nextToProperty = propInfo.nextToProperty;\n            }\n            if (!_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(propInfo.overridingProperty)) {\n                prop.overridingProperty = propInfo.overridingProperty;\n            }\n            if (!_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(propInfo.visibleIndex)) {\n                prop.visibleIndex = propInfo.visibleIndex;\n            }\n            if (!_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(propInfo.showMode)) {\n                prop.showMode = propInfo.showMode;\n            }\n            if (!_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(propInfo.maxValue)) {\n                prop.maxValue = propInfo.maxValue;\n            }\n            if (!_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(propInfo.minValue)) {\n                prop.minValue = propInfo.minValue;\n            }\n            if (!_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(propInfo.dataList)) {\n                prop.dataList = propInfo.dataList;\n            }\n            if (!_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(propInfo.isDynamicChoices)) {\n                prop.isDynamicChoices = propInfo.isDynamicChoices;\n            }\n            if (!_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(propInfo.isBindable)) {\n                prop.isBindable = propInfo.isBindable;\n            }\n            if (!_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(propInfo.isUnique)) {\n                prop.isUnique = propInfo.isUnique;\n            }\n            if (!_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(propInfo.uniqueProperty)) {\n                prop.uniquePropertyName = propInfo.uniqueProperty;\n            }\n            if (!_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(propInfo.isArray)) {\n                prop.isArray = propInfo.isArray;\n            }\n            if (propInfo.visible === true || propInfo.visible === false) {\n                prop.visible = propInfo.visible;\n            }\n            if (!!propInfo.visibleIf) {\n                prop.visibleIf = propInfo.visibleIf;\n            }\n            if (!!propInfo.onExecuteExpression) {\n                prop.onExecuteExpression = propInfo.onExecuteExpression;\n            }\n            if (!!propInfo.onPropertyEditorUpdate) {\n                prop.onPropertyEditorUpdate = propInfo.onPropertyEditorUpdate;\n            }\n            if (propInfo.readOnly === true) {\n                prop.readOnly = true;\n            }\n            if (propInfo.choices) {\n                var choicesFunc = typeof propInfo.choices === \"function\" ? propInfo.choices : null;\n                var choicesValue = typeof propInfo.choices !== \"function\" ? propInfo.choices : null;\n                prop.setChoices(choicesValue, choicesFunc);\n            }\n            if (!!propInfo.baseValue) {\n                prop.setBaseValue(propInfo.baseValue);\n            }\n            if (propInfo.onGetValue) {\n                prop.onGetValue = propInfo.onGetValue;\n            }\n            if (propInfo.onSetValue) {\n                prop.onSetValue = propInfo.onSetValue;\n            }\n            if (propInfo.onSettingValue) {\n                prop.onSettingValue = propInfo.onSettingValue;\n            }\n            if (propInfo.isLocalizable) {\n                propInfo.serializationProperty = \"loc\" + prop.name;\n            }\n            if (propInfo.serializationProperty) {\n                prop.serializationProperty = propInfo.serializationProperty;\n                var s;\n                if (prop.serializationProperty &&\n                    prop.serializationProperty.indexOf(\"loc\") == 0) {\n                    prop.isLocalizable = true;\n                }\n            }\n            if (propInfo.isLocalizable) {\n                prop.isLocalizable = propInfo.isLocalizable;\n            }\n            if (propInfo.className) {\n                prop.className = propInfo.className;\n            }\n            if (propInfo.baseClassName) {\n                prop.baseClassName = propInfo.baseClassName;\n            }\n            if (propInfo.classNamePart) {\n                prop.classNamePart = propInfo.classNamePart;\n            }\n            if (propInfo.alternativeName) {\n                prop.alternativeName = propInfo.alternativeName;\n            }\n            if (propInfo.layout) {\n                prop.layout = propInfo.layout;\n            }\n            if (propInfo.dependsOn) {\n                this.addDependsOnProperties(prop, propInfo.dependsOn);\n            }\n        }\n        this.properties.push(prop);\n        if (isCustom && !this.isOverridedProp(prop.name)) {\n            prop.isCustom = true;\n            CustomPropertiesCollection.addProperty(this.name, prop);\n        }\n        return prop;\n    };\n    JsonMetadataClass.prototype.addDependsOnProperties = function (prop, dependsOn) {\n        if (Array.isArray(dependsOn)) {\n            for (var i = 0; i < dependsOn.length; i++) {\n                this.addDependsOnProperty(prop, dependsOn[i]);\n            }\n        }\n        else {\n            this.addDependsOnProperty(prop, dependsOn);\n        }\n    };\n    JsonMetadataClass.prototype.addDependsOnProperty = function (prop, dependsOn) {\n        var property = this.find(dependsOn);\n        if (!property) {\n            property = Serializer.findProperty(this.parentName, dependsOn);\n        }\n        if (!property)\n            return;\n        property.addDependedProperty(prop.name);\n    };\n    JsonMetadataClass.prototype.getIsPropertyNameRequired = function (propertyName) {\n        return (propertyName.length > 0 &&\n            propertyName[0] == JsonMetadataClass.requiredSymbol);\n    };\n    JsonMetadataClass.prototype.getPropertyName = function (propertyName) {\n        if (!this.getIsPropertyNameRequired(propertyName))\n            return propertyName;\n        propertyName = propertyName.slice(1);\n        return propertyName;\n    };\n    JsonMetadataClass.requiredSymbol = \"!\";\n    JsonMetadataClass.typeSymbol = \":\";\n    return JsonMetadataClass;\n}());\n\n/**\n * The metadata object. It contains object properties' runtime information and allows you to modify it.\n */\nvar JsonMetadata = /** @class */ (function () {\n    function JsonMetadata() {\n        this.classes = {};\n        this.alternativeNames = {};\n        this.childrenClasses = {};\n    }\n    JsonMetadata.prototype.getObjPropertyValue = function (obj, name) {\n        if (this.isObjWrapper(obj)) {\n            var orignalObj = obj.getOriginalObj();\n            var prop = Serializer.findProperty(orignalObj.getType(), name);\n            if (!!prop)\n                return this.getObjPropertyValueCore(orignalObj, prop);\n        }\n        var prop = Serializer.findProperty(obj.getType(), name);\n        if (!prop)\n            return obj[name];\n        return this.getObjPropertyValueCore(obj, prop);\n    };\n    JsonMetadata.prototype.setObjPropertyValue = function (obj, name, val) {\n        if (obj[name] === val)\n            return;\n        if (!!obj[name] && !!obj[name].setJson) {\n            obj[name].setJson(val);\n        }\n        else {\n            if (Array.isArray(val)) {\n                var newVal = [];\n                for (var i = 0; i < val.length; i++)\n                    newVal.push(val[i]);\n                val = newVal;\n            }\n            obj[name] = val;\n        }\n    };\n    JsonMetadata.prototype.getObjPropertyValueCore = function (obj, prop) {\n        if (!prop.isSerializable)\n            return obj[prop.name];\n        if (prop.isLocalizable) {\n            if (prop.isArray)\n                return obj[prop.name];\n            if (!!prop.serializationProperty)\n                return obj[prop.serializationProperty].text;\n        }\n        return obj.getPropertyValue(prop.name);\n    };\n    JsonMetadata.prototype.isObjWrapper = function (obj) {\n        return !!obj.getOriginalObj && !!obj.getOriginalObj();\n    };\n    JsonMetadata.prototype.addClass = function (name, properties, creator, parentName) {\n        if (creator === void 0) { creator = null; }\n        if (parentName === void 0) { parentName = null; }\n        name = name.toLowerCase();\n        var metaDataClass = new JsonMetadataClass(name, properties, creator, parentName);\n        this.classes[name] = metaDataClass;\n        if (parentName) {\n            parentName = parentName.toLowerCase();\n            var children = this.childrenClasses[parentName];\n            if (!children) {\n                this.childrenClasses[parentName] = [];\n            }\n            this.childrenClasses[parentName].push(metaDataClass);\n        }\n        return metaDataClass;\n    };\n    JsonMetadata.prototype.removeClass = function (name) {\n        var metaClass = this.findClass(name);\n        if (!metaClass)\n            return;\n        delete this.classes[metaClass.name];\n        if (!!metaClass.parentName) {\n            var index = this.childrenClasses[metaClass.parentName].indexOf(metaClass);\n            if (index > -1) {\n                this.childrenClasses[metaClass.parentName].splice(index, 1);\n            }\n        }\n    };\n    JsonMetadata.prototype.overrideClassCreatore = function (name, creator) {\n        this.overrideClassCreator(name, creator);\n    };\n    JsonMetadata.prototype.overrideClassCreator = function (name, creator) {\n        name = name.toLowerCase();\n        var metaDataClass = this.findClass(name);\n        if (metaDataClass) {\n            metaDataClass.creator = creator;\n        }\n    };\n    JsonMetadata.prototype.getProperties = function (className) {\n        var metaClass = this.findClass(className);\n        if (!metaClass)\n            return [];\n        return metaClass.getAllProperties();\n    };\n    JsonMetadata.prototype.getPropertiesByObj = function (obj) {\n        if (!obj || !obj.getType)\n            return [];\n        var res = {};\n        var props = this.getProperties(obj.getType());\n        for (var i = 0; i < props.length; i++) {\n            res[props[i].name] = props[i];\n        }\n        var dynamicProps = !!obj.getDynamicType\n            ? this.getProperties(obj.getDynamicType())\n            : null;\n        if (dynamicProps && dynamicProps.length > 0) {\n            for (var i = 0; i < dynamicProps.length; i++) {\n                var dProp = dynamicProps[i];\n                if (!!res[dProp.name])\n                    continue;\n                res[dProp.name] = dProp;\n            }\n        }\n        return Object.keys(res).map(function (key) { return res[key]; });\n    };\n    JsonMetadata.prototype.getDynamicPropertiesByObj = function (obj, dynamicType) {\n        if (dynamicType === void 0) { dynamicType = null; }\n        if (!obj || !obj.getType || (!obj.getDynamicType && !dynamicType))\n            return [];\n        var dType = !!dynamicType ? dynamicType : obj.getDynamicType();\n        if (!dType)\n            return [];\n        var dynamicProps = this.getProperties(dType);\n        if (!dynamicProps || dynamicProps.length == 0)\n            return [];\n        var hash = {};\n        var props = this.getProperties(obj.getType());\n        for (var i = 0; i < props.length; i++) {\n            hash[props[i].name] = props[i];\n        }\n        var res = [];\n        for (var i = 0; i < dynamicProps.length; i++) {\n            var dProp = dynamicProps[i];\n            if (!hash[dProp.name]) {\n                res.push(dProp);\n            }\n        }\n        return res;\n    };\n    JsonMetadata.prototype.hasOriginalProperty = function (obj, propName) {\n        return !!this.getOriginalProperty(obj, propName);\n    };\n    JsonMetadata.prototype.getOriginalProperty = function (obj, propName) {\n        var res = this.findProperty(obj.getType(), propName);\n        if (!!res)\n            return res;\n        if (this.isObjWrapper(obj))\n            return this.findProperty(obj.getOriginalObj().getType(), propName);\n        return null;\n    };\n    JsonMetadata.prototype.getProperty = function (className, propertyName) {\n        var prop = this.findProperty(className, propertyName);\n        if (!prop)\n            return prop;\n        var classInfo = this.findClass(className);\n        if (prop.classInfo === classInfo)\n            return prop;\n        var newProp = new JsonObjectProperty(classInfo, prop.name, prop.isRequired);\n        newProp.mergeWith(prop);\n        newProp.isArray = prop.isArray;\n        classInfo.properties.push(newProp);\n        classInfo.resetAllProperties();\n        return newProp;\n    };\n    JsonMetadata.prototype.findProperty = function (className, propertyName) {\n        var cl = this.findClass(className);\n        return !!cl ? cl.findProperty(propertyName) : null;\n    };\n    JsonMetadata.prototype.findProperties = function (className, propertyNames) {\n        var result = new Array();\n        var cl = this.findClass(className);\n        if (!cl)\n            return result;\n        for (var i = 0; i < propertyNames.length; i++) {\n            var prop = cl.findProperty(propertyNames[i]);\n            if (prop) {\n                result.push(prop);\n            }\n        }\n        return result;\n    };\n    JsonMetadata.prototype.getAllPropertiesByName = function (propertyName) {\n        var res = new Array();\n        var classes = this.getAllClasses();\n        for (var i = 0; i < classes.length; i++) {\n            var classInfo = this.findClass(classes[i]);\n            for (var j = 0; j < classInfo.properties.length; j++) {\n                if (classInfo.properties[j].name == propertyName) {\n                    res.push(classInfo.properties[j]);\n                    break;\n                }\n            }\n        }\n        return res;\n    };\n    JsonMetadata.prototype.getAllClasses = function () {\n        var res = new Array();\n        for (var name in this.classes) {\n            res.push(name);\n        }\n        return res;\n    };\n    JsonMetadata.prototype.createClass = function (name, json) {\n        if (json === void 0) { json = undefined; }\n        name = name.toLowerCase();\n        var metaDataClass = this.findClass(name);\n        if (!metaDataClass)\n            return null;\n        if (metaDataClass.creator)\n            return metaDataClass.creator(json);\n        var parentName = metaDataClass.parentName;\n        while (parentName) {\n            metaDataClass = this.findClass(parentName);\n            if (!metaDataClass)\n                return null;\n            parentName = metaDataClass.parentName;\n            if (metaDataClass.creator)\n                return this.createCustomType(name, metaDataClass.creator, json);\n        }\n        return null;\n    };\n    JsonMetadata.prototype.createCustomType = function (name, creator, json) {\n        if (json === void 0) { json = undefined; }\n        name = name.toLowerCase();\n        var res = creator(json);\n        var customTypeName = name;\n        var customTemplateName = res.getTemplate\n            ? res.getTemplate()\n            : res.getType();\n        res.getType = function () {\n            return customTypeName;\n        };\n        res.getTemplate = function () {\n            return customTemplateName;\n        };\n        CustomPropertiesCollection.createProperties(res);\n        return res;\n    };\n    JsonMetadata.prototype.getChildrenClasses = function (name, canBeCreated) {\n        if (canBeCreated === void 0) { canBeCreated = false; }\n        name = name.toLowerCase();\n        var result = [];\n        this.fillChildrenClasses(name, canBeCreated, result);\n        return result;\n    };\n    JsonMetadata.prototype.getRequiredProperties = function (name) {\n        var properties = this.getProperties(name);\n        var res = [];\n        for (var i = 0; i < properties.length; i++) {\n            if (properties[i].isRequired) {\n                res.push(properties[i].name);\n            }\n        }\n        return res;\n    };\n    JsonMetadata.prototype.addProperties = function (className, propertiesInfos) {\n        className = className.toLowerCase();\n        var metaDataClass = this.findClass(className);\n        for (var i = 0; i < propertiesInfos.length; i++) {\n            this.addCustomPropertyCore(metaDataClass, propertiesInfos[i]);\n        }\n    };\n    JsonMetadata.prototype.addProperty = function (className, propertyInfo) {\n        return this.addCustomPropertyCore(this.findClass(className), propertyInfo);\n    };\n    JsonMetadata.prototype.addCustomPropertyCore = function (metaDataClass, propertyInfo) {\n        if (!metaDataClass)\n            return null;\n        var property = metaDataClass.createProperty(propertyInfo, true);\n        if (property) {\n            metaDataClass.resetAllProperties();\n        }\n        return property;\n    };\n    JsonMetadata.prototype.removeProperty = function (className, propertyName) {\n        var metaDataClass = this.findClass(className);\n        if (!metaDataClass)\n            return false;\n        var property = metaDataClass.find(propertyName);\n        if (property) {\n            this.removePropertyFromClass(metaDataClass, property);\n            metaDataClass.resetAllProperties();\n            CustomPropertiesCollection.removeProperty(metaDataClass.name, propertyName);\n        }\n    };\n    JsonMetadata.prototype.removePropertyFromClass = function (metaDataClass, property) {\n        var index = metaDataClass.properties.indexOf(property);\n        if (index < 0)\n            return;\n        metaDataClass.properties.splice(index, 1);\n    };\n    JsonMetadata.prototype.fillChildrenClasses = function (name, canBeCreated, result) {\n        var children = this.childrenClasses[name];\n        if (!children)\n            return;\n        for (var i = 0; i < children.length; i++) {\n            if (!canBeCreated || children[i].creator) {\n                result.push(children[i]);\n            }\n            this.fillChildrenClasses(children[i].name, canBeCreated, result);\n        }\n    };\n    JsonMetadata.prototype.findClass = function (name) {\n        name = name.toLowerCase();\n        var res = this.classes[name];\n        if (!res) {\n            var newName = this.alternativeNames[name];\n            if (!!newName && newName != name)\n                return this.findClass(newName);\n        }\n        return res;\n    };\n    JsonMetadata.prototype.isDescendantOf = function (className, ancestorClassName) {\n        if (!className || !ancestorClassName) {\n            return false;\n        }\n        className = className.toLowerCase();\n        ancestorClassName = ancestorClassName.toLowerCase();\n        var class_ = this.findClass(className);\n        if (!class_) {\n            return false;\n        }\n        var parentClass = class_;\n        do {\n            if (parentClass.name === ancestorClassName) {\n                return true;\n            }\n            parentClass = this.classes[parentClass.parentName];\n        } while (!!parentClass);\n        return false;\n    };\n    JsonMetadata.prototype.addAlterNativeClassName = function (name, alternativeName) {\n        this.alternativeNames[alternativeName.toLowerCase()] = name.toLowerCase();\n    };\n    JsonMetadata.prototype.generateSchema = function (className) {\n        if (className === void 0) { className = undefined; }\n        if (!className)\n            className = \"survey\";\n        var classInfo = this.findClass(className);\n        if (!classInfo)\n            return null;\n        var res = {\n            $schema: \"http://json-schema.org/draft-07/schema#\",\n            title: \"SurveyJS Library json schema\",\n            type: \"object\",\n            properties: {},\n            definitions: { locstring: this.generateLocStrClass() },\n        };\n        this.generateSchemaProperties(classInfo, res, res.definitions, true);\n        return res;\n    };\n    JsonMetadata.prototype.generateLocStrClass = function () {\n        var props = {};\n        var locProp = Serializer.findProperty(\"survey\", \"locale\");\n        if (!!locProp) {\n            var choices = locProp.getChoices(null);\n            if (Array.isArray(choices)) {\n                if (choices.indexOf(\"en\") < 0) {\n                    choices.splice(0, 0, \"en\");\n                }\n                choices.splice(0, 0, \"default\");\n                choices.forEach(function (l) { if (!!l) {\n                    props[l] = { type: \"string\" };\n                } });\n            }\n        }\n        return {\n            $id: \"locstring\",\n            type: \"object\",\n            properties: props\n        };\n    };\n    JsonMetadata.prototype.generateSchemaProperties = function (classInfo, classSchema, schemaDef, isRoot) {\n        if (!classInfo)\n            return;\n        var schemaProperties = classSchema.properties;\n        var requiredProps = [];\n        if (classInfo.name === \"question\" || classInfo.name === \"panel\") {\n            schemaProperties.type = { type: \"string\" };\n            requiredProps.push(\"type\");\n        }\n        for (var i = 0; i < classInfo.properties.length; i++) {\n            var prop = classInfo.properties[i];\n            if (!!classInfo.parentName && !!Serializer.findProperty(classInfo.parentName, prop.name))\n                continue;\n            schemaProperties[prop.name] = this.generateSchemaProperty(prop, schemaDef, isRoot);\n            if (prop.isRequired)\n                requiredProps.push(prop.name);\n        }\n        if (requiredProps.length > 0) {\n            classSchema.required = requiredProps;\n        }\n    };\n    JsonMetadata.prototype.generateSchemaProperty = function (prop, schemaDef, isRoot) {\n        if (prop.isLocalizable) {\n            return { oneOf: [\n                    { \"type\": \"string\" },\n                    { \"$ref\": this.getChemeRefName(\"locstring\", isRoot) }\n                ] };\n        }\n        var propType = prop.schemaType();\n        var refType = prop.schemaRef();\n        var res = {};\n        if (!!propType) {\n            res.type = propType;\n        }\n        if (prop.hasChoices) {\n            var enumRes = prop.getChoices(null);\n            if (Array.isArray(enumRes) && enumRes.length > 0) {\n                res.enum = enumRes;\n            }\n        }\n        if (!!refType) {\n            if (propType === \"array\") {\n                if (prop.className === \"string\") {\n                    res.items = { type: prop.className };\n                }\n                else {\n                    res.items = { $ref: this.getChemeRefName(prop.className, isRoot) };\n                }\n            }\n            else {\n                res[\"$ref\"] = this.getChemeRefName(refType, isRoot);\n            }\n            this.generateChemaClass(prop.className, schemaDef, false);\n        }\n        if (!!prop.baseClassName) {\n            var usedClasses = this.getChildrenClasses(prop.baseClassName, true);\n            if (prop.baseClassName == \"question\") {\n                usedClasses.push(this.findClass(\"panel\"));\n            }\n            res.items = { anyOf: [] };\n            for (var i = 0; i < usedClasses.length; i++) {\n                var className = usedClasses[i].name;\n                res.items.anyOf.push({ $ref: this.getChemeRefName(className, isRoot) });\n                this.generateChemaClass(className, schemaDef, false);\n            }\n        }\n        return res;\n    };\n    JsonMetadata.prototype.getChemeRefName = function (className, isRoot) {\n        //Fix for #6486, according to https://niem.github.io/json/reference/json-schema/references/#:~:text=In%20a%20JSON%20schema%2C%20a,%2C%20an%20in%2Dschema%20reference\n        return \"#/definitions/\" + className;\n        //return isRoot ? \"#/definitions/\" + className : className + \"#\";\n    };\n    JsonMetadata.prototype.generateChemaClass = function (className, schemaDef, isRoot) {\n        if (!!schemaDef[className])\n            return;\n        var classInfo = this.findClass(className);\n        if (!classInfo)\n            return;\n        var hasParent = !!classInfo.parentName && classInfo.parentName != \"base\";\n        if (hasParent) {\n            this.generateChemaClass(classInfo.parentName, schemaDef, isRoot);\n        }\n        var res = { type: \"object\", $id: className };\n        schemaDef[className] = res;\n        var chemaProps = { properties: {} };\n        this.generateSchemaProperties(classInfo, chemaProps, schemaDef, isRoot);\n        if (hasParent) {\n            res.allOf = [\n                { $ref: this.getChemeRefName(classInfo.parentName, isRoot) },\n                { properties: chemaProps.properties },\n            ];\n        }\n        else {\n            res.properties = chemaProps.properties;\n        }\n        if (Array.isArray(chemaProps.required)) {\n            res.required = chemaProps.required;\n        }\n    };\n    return JsonMetadata;\n}());\n\nvar JsonError = /** @class */ (function () {\n    function JsonError(type, message) {\n        this.type = type;\n        this.message = message;\n        this.description = \"\";\n        this.at = -1;\n        this.end = -1;\n    }\n    JsonError.prototype.getFullDescription = function () {\n        return this.message + (this.description ? \"\\n\" + this.description : \"\");\n    };\n    return JsonError;\n}());\n\nvar JsonUnknownPropertyError = /** @class */ (function (_super) {\n    __extends(JsonUnknownPropertyError, _super);\n    function JsonUnknownPropertyError(propertyName, className) {\n        var _this = _super.call(this, \"unknownproperty\", \"The property '\" +\n            propertyName +\n            \"' in class '\" +\n            className +\n            \"' is unknown.\") || this;\n        _this.propertyName = propertyName;\n        _this.className = className;\n        var properties = JsonObject.metaData.getProperties(className);\n        if (properties) {\n            _this.description = \"The list of available properties are: \";\n            for (var i = 0; i < properties.length; i++) {\n                if (i > 0)\n                    _this.description += \", \";\n                _this.description += properties[i].name;\n            }\n            _this.description += \".\";\n        }\n        return _this;\n    }\n    return JsonUnknownPropertyError;\n}(JsonError));\n\nvar JsonMissingTypeErrorBase = /** @class */ (function (_super) {\n    __extends(JsonMissingTypeErrorBase, _super);\n    function JsonMissingTypeErrorBase(baseClassName, type, message) {\n        var _this = _super.call(this, type, message) || this;\n        _this.baseClassName = baseClassName;\n        _this.type = type;\n        _this.message = message;\n        _this.description = \"The following types are available: \";\n        var types = JsonObject.metaData.getChildrenClasses(baseClassName, true);\n        for (var i = 0; i < types.length; i++) {\n            if (i > 0)\n                _this.description += \", \";\n            _this.description += \"'\" + types[i].name + \"'\";\n        }\n        _this.description += \".\";\n        return _this;\n    }\n    return JsonMissingTypeErrorBase;\n}(JsonError));\n\nvar JsonMissingTypeError = /** @class */ (function (_super) {\n    __extends(JsonMissingTypeError, _super);\n    function JsonMissingTypeError(propertyName, baseClassName) {\n        var _this = _super.call(this, baseClassName, \"missingtypeproperty\", \"The property type is missing in the object. Please take a look at property: '\" +\n            propertyName +\n            \"'.\") || this;\n        _this.propertyName = propertyName;\n        _this.baseClassName = baseClassName;\n        return _this;\n    }\n    return JsonMissingTypeError;\n}(JsonMissingTypeErrorBase));\n\nvar JsonIncorrectTypeError = /** @class */ (function (_super) {\n    __extends(JsonIncorrectTypeError, _super);\n    function JsonIncorrectTypeError(propertyName, baseClassName) {\n        var _this = _super.call(this, baseClassName, \"incorrecttypeproperty\", \"The property type is incorrect in the object. Please take a look at property: '\" +\n            propertyName +\n            \"'.\") || this;\n        _this.propertyName = propertyName;\n        _this.baseClassName = baseClassName;\n        return _this;\n    }\n    return JsonIncorrectTypeError;\n}(JsonMissingTypeErrorBase));\n\nvar JsonRequiredPropertyError = /** @class */ (function (_super) {\n    __extends(JsonRequiredPropertyError, _super);\n    function JsonRequiredPropertyError(propertyName, className) {\n        var _this = _super.call(this, \"requiredproperty\", \"The property '\" +\n            propertyName +\n            \"' is required in class '\" +\n            className +\n            \"'.\") || this;\n        _this.propertyName = propertyName;\n        _this.className = className;\n        return _this;\n    }\n    return JsonRequiredPropertyError;\n}(JsonError));\n\nvar JsonObject = /** @class */ (function () {\n    function JsonObject() {\n        this.errors = new Array();\n        this.lightSerializing = false;\n    }\n    Object.defineProperty(JsonObject, \"metaData\", {\n        get: function () {\n            return JsonObject.metaDataValue;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    JsonObject.prototype.toJsonObject = function (obj, storeDefaults) {\n        if (storeDefaults === void 0) { storeDefaults = false; }\n        return this.toJsonObjectCore(obj, null, storeDefaults);\n    };\n    JsonObject.prototype.toObject = function (jsonObj, obj) {\n        this.toObjectCore(jsonObj, obj);\n        var error = this.getRequiredError(obj, jsonObj);\n        if (!!error) {\n            this.addNewError(error, jsonObj, obj);\n        }\n    };\n    JsonObject.prototype.toObjectCore = function (jsonObj, obj) {\n        if (!jsonObj)\n            return;\n        var properties = null;\n        var objType = undefined;\n        var needAddErrors = true;\n        if (obj.getType) {\n            objType = obj.getType();\n            properties = JsonObject.metaData.getProperties(objType);\n            needAddErrors =\n                !!objType && !JsonObject.metaData.isDescendantOf(objType, \"itemvalue\");\n        }\n        if (!properties)\n            return;\n        if (obj.startLoadingFromJson) {\n            obj.startLoadingFromJson(jsonObj);\n        }\n        properties = this.addDynamicProperties(obj, jsonObj, properties);\n        for (var key in jsonObj) {\n            if (key === JsonObject.typePropertyName)\n                continue;\n            if (key === JsonObject.positionPropertyName) {\n                obj[key] = jsonObj[key];\n                continue;\n            }\n            var property = this.findProperty(properties, key);\n            if (!property) {\n                if (needAddErrors) {\n                    this.addNewError(new JsonUnknownPropertyError(key.toString(), objType), jsonObj, obj);\n                }\n                continue;\n            }\n            this.valueToObj(jsonObj[key], obj, property);\n        }\n        if (obj.endLoadingFromJson) {\n            obj.endLoadingFromJson();\n        }\n    };\n    JsonObject.prototype.toJsonObjectCore = function (obj, property, storeDefaults) {\n        if (storeDefaults === void 0) { storeDefaults = false; }\n        if (!obj || !obj.getType)\n            return obj;\n        if (typeof obj.getData === \"function\")\n            return obj.getData();\n        var result = {};\n        if (property != null && !property.className) {\n            result[JsonObject.typePropertyName] = property.getObjType(obj.getType());\n        }\n        this.propertiesToJson(obj, JsonObject.metaData.getProperties(obj.getType()), result, storeDefaults);\n        this.propertiesToJson(obj, this.getDynamicProperties(obj), result, storeDefaults);\n        return result;\n    };\n    JsonObject.prototype.getDynamicProperties = function (obj) {\n        return Serializer.getDynamicPropertiesByObj(obj);\n    };\n    JsonObject.prototype.addDynamicProperties = function (obj, jsonObj, properties) {\n        if (!obj.getDynamicPropertyName)\n            return properties;\n        var dynamicPropName = obj.getDynamicPropertyName();\n        if (!dynamicPropName)\n            return properties;\n        if (jsonObj[dynamicPropName]) {\n            obj[dynamicPropName] = jsonObj[dynamicPropName];\n        }\n        var dynamicProperties = this.getDynamicProperties(obj);\n        var res = [];\n        for (var i = 0; i < properties.length; i++) {\n            res.push(properties[i]);\n        }\n        for (var i = 0; i < dynamicProperties.length; i++) {\n            res.push(dynamicProperties[i]);\n        }\n        return res;\n    };\n    JsonObject.prototype.propertiesToJson = function (obj, properties, json, storeDefaults) {\n        if (storeDefaults === void 0) { storeDefaults = false; }\n        for (var i = 0; i < properties.length; i++) {\n            this.valueToJson(obj, json, properties[i], storeDefaults);\n        }\n    };\n    JsonObject.prototype.valueToJson = function (obj, result, property, storeDefaults) {\n        if (storeDefaults === void 0) { storeDefaults = false; }\n        if (property.isSerializable === false ||\n            (property.isLightSerializable === false && this.lightSerializing))\n            return;\n        var value = property.getValue(obj);\n        if (!storeDefaults && property.isDefaultValue(value))\n            return;\n        if (this.isValueArray(value)) {\n            var arrValue = [];\n            for (var i = 0; i < value.length; i++) {\n                arrValue.push(this.toJsonObjectCore(value[i], property, storeDefaults));\n            }\n            value = arrValue.length > 0 ? arrValue : null;\n        }\n        else {\n            value = this.toJsonObjectCore(value, property, storeDefaults);\n        }\n        var hasValue = typeof obj[\"getPropertyValue\"] === \"function\" &&\n            obj[\"getPropertyValue\"](property.name, null) !== null;\n        if ((storeDefaults && hasValue) || !property.isDefaultValue(value)) {\n            if (!Serializer.onSerializingProperty || !Serializer.onSerializingProperty(obj, property, value, result)) {\n                result[property.name] = value;\n            }\n        }\n    };\n    JsonObject.prototype.valueToObj = function (value, obj, property) {\n        if (value === null || value === undefined)\n            return;\n        this.removePos(property, value);\n        if (property != null && property.hasToUseSetValue) {\n            property.setValue(obj, value, this);\n            return;\n        }\n        if (this.isValueArray(value)) {\n            this.valueToArray(value, obj, property.name, property);\n            return;\n        }\n        var newObj = this.createNewObj(value, property);\n        if (newObj.newObj) {\n            this.toObjectCore(value, newObj.newObj);\n            value = newObj.newObj;\n        }\n        if (!newObj.error) {\n            if (property != null) {\n                property.setValue(obj, value, this);\n            }\n            else {\n                obj[property.name] = value;\n            }\n        }\n    };\n    JsonObject.prototype.removePos = function (property, value) {\n        if (!property || !property.type || property.type.indexOf(\"value\") < 0)\n            return;\n        this.removePosFromObj(value);\n    };\n    JsonObject.prototype.removePosFromObj = function (obj) {\n        if (!obj)\n            return;\n        if (Array.isArray(obj)) {\n            for (var i = 0; i < obj.length; i++) {\n                this.removePosFromObj(obj[i]);\n            }\n        }\n        if (!!obj[JsonObject.positionPropertyName]) {\n            delete obj[JsonObject.positionPropertyName];\n        }\n    };\n    JsonObject.prototype.isValueArray = function (value) {\n        return value && Array.isArray(value);\n    };\n    JsonObject.prototype.createNewObj = function (value, property) {\n        var result = { newObj: null, error: null };\n        var className = this.getClassNameForNewObj(value, property);\n        result.newObj = className\n            ? JsonObject.metaData.createClass(className, value)\n            : null;\n        result.error = this.checkNewObjectOnErrors(result.newObj, value, property, className);\n        return result;\n    };\n    JsonObject.prototype.getClassNameForNewObj = function (value, property) {\n        var res = property != null && property.className ? property.className : undefined;\n        if (!res) {\n            res = value[JsonObject.typePropertyName];\n        }\n        if (!res)\n            return res;\n        res = res.toLowerCase();\n        var classNamePart = property.classNamePart;\n        if (classNamePart && res.indexOf(classNamePart) < 0) {\n            res += classNamePart;\n        }\n        return res;\n    };\n    JsonObject.prototype.checkNewObjectOnErrors = function (newObj, value, property, className) {\n        var error = null;\n        if (newObj) {\n            error = this.getRequiredError(newObj, value);\n        }\n        else {\n            if (property.baseClassName) {\n                if (!className) {\n                    error = new JsonMissingTypeError(property.name, property.baseClassName);\n                }\n                else {\n                    error = new JsonIncorrectTypeError(property.name, property.baseClassName);\n                }\n            }\n        }\n        if (error) {\n            this.addNewError(error, value, newObj);\n        }\n        return error;\n    };\n    JsonObject.prototype.getRequiredError = function (obj, jsonValue) {\n        if (!obj.getType || typeof obj.getData === \"function\")\n            return null;\n        var className = obj.getType();\n        var requiredProperties = JsonObject.metaData.getRequiredProperties(className);\n        if (!Array.isArray(requiredProperties))\n            return null;\n        for (var i = 0; i < requiredProperties.length; i++) {\n            var prop = Serializer.findProperty(className, requiredProperties[i]);\n            if (!prop || !_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(prop.defaultValue))\n                continue;\n            if (!jsonValue[prop.name]) {\n                return new JsonRequiredPropertyError(prop.name, className);\n            }\n        }\n        return null;\n    };\n    JsonObject.prototype.addNewError = function (error, jsonObj, element) {\n        error.jsonObj = jsonObj;\n        error.element = element;\n        this.errors.push(error);\n        if (!jsonObj)\n            return;\n        var posObj = jsonObj[JsonObject.positionPropertyName];\n        if (!posObj)\n            return;\n        error.at = posObj.start;\n        error.end = posObj.end;\n    };\n    JsonObject.prototype.valueToArray = function (value, obj, key, property) {\n        if (obj[key] && !this.isValueArray(obj[key]))\n            return;\n        if (obj[key] && value.length > 0)\n            obj[key].splice(0, obj[key].length);\n        var valueRes = obj[key] ? obj[key] : [];\n        this.addValuesIntoArray(value, valueRes, property);\n        if (!obj[key])\n            obj[key] = valueRes;\n    };\n    JsonObject.prototype.addValuesIntoArray = function (value, result, property) {\n        for (var i = 0; i < value.length; i++) {\n            var newValue = this.createNewObj(value[i], property);\n            if (newValue.newObj) {\n                if (!!value[i].name) {\n                    newValue.newObj.name = value[i].name;\n                }\n                if (!!value[i].valueName) {\n                    newValue.newObj.valueName = value[i].valueName.toString();\n                }\n                result.push(newValue.newObj);\n                this.toObjectCore(value[i], newValue.newObj);\n            }\n            else {\n                if (!newValue.error) {\n                    result.push(value[i]);\n                }\n            }\n        }\n    };\n    JsonObject.prototype.findProperty = function (properties, key) {\n        if (!properties)\n            return null;\n        for (var i = 0; i < properties.length; i++) {\n            var prop = properties[i];\n            if (prop.name == key || prop.alternativeName == key)\n                return prop;\n        }\n        return null;\n    };\n    JsonObject.typePropertyName = \"type\";\n    JsonObject.positionPropertyName = \"pos\";\n    JsonObject.metaDataValue = new JsonMetadata();\n    return JsonObject;\n}());\n\n/**\n * An alias for the metadata object. It contains object properties' runtime information and allows you to modify it.\n * @see JsonMetadata\n */\nvar Serializer = JsonObject.metaData;\n\n\n/***/ }),\n\n/***/ \"./src/list.ts\":\n/*!*********************!*\\\n  !*** ./src/list.ts ***!\n  \\*********************/\n/*! exports provided: defaultListCss, ListModel */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1784260__) {\n\n\"use strict\";\n__nested_webpack_require_1784260__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_1784260__.d(__nested_webpack_exports__, \"defaultListCss\", function() { return defaultListCss; });\n/* harmony export (binding) */ __nested_webpack_require_1784260__.d(__nested_webpack_exports__, \"ListModel\", function() { return ListModel; });\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1784260__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _actions_container__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1784260__(/*! ./actions/container */ \"./src/actions/container.ts\");\n/* harmony import */ var _actions_action__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1784260__(/*! ./actions/action */ \"./src/actions/action.ts\");\n/* harmony import */ var _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1784260__(/*! ./utils/cssClassBuilder */ \"./src/utils/cssClassBuilder.ts\");\n/* harmony import */ var _element_helper__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1784260__(/*! ./element-helper */ \"./src/element-helper.ts\");\n/* harmony import */ var _utils_utils__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1784260__(/*! ./utils/utils */ \"./src/utils/utils.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_1784260__(/*! ./settings */ \"./src/settings.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\n\n\nvar defaultListCss = {\n    root: \"sv-list__container\",\n    item: \"sv-list__item\",\n    searchClearButtonIcon: \"sv-list__filter-clear-button\",\n    loadingIndicator: \"sv-list__loading-indicator\",\n    itemSelected: \"sv-list__item--selected\",\n    itemWithIcon: \"sv-list__item--with-icon\",\n    itemDisabled: \"sv-list__item--disabled\",\n    itemFocused: \"sv-list__item--focused\",\n    itemIcon: \"sv-list__item-icon\",\n    itemSeparator: \"sv-list__item-separator\",\n    itemBody: \"sv-list__item-body\",\n    itemsContainer: \"sv-list\",\n    itemsContainerFiltering: \"sv-list--filtering\",\n    filter: \"sv-list__filter\",\n    filterIcon: \"sv-list__filter-icon\",\n    filterInput: \"sv-list__input\",\n    emptyContainer: \"sv-list__empty-container\",\n    emptyText: \"sv-list__empty-text\"\n};\nvar ListModel = /** @class */ (function (_super) {\n    __extends(ListModel, _super);\n    function ListModel(items, onSelectionChanged, allowSelection, selectedItem, onFilterStringChangedCallback, elementId) {\n        var _this = _super.call(this) || this;\n        _this.onSelectionChanged = onSelectionChanged;\n        _this.allowSelection = allowSelection;\n        _this.onFilterStringChangedCallback = onFilterStringChangedCallback;\n        _this.elementId = elementId;\n        _this.onItemClick = function (itemValue) {\n            if (_this.isItemDisabled(itemValue)) {\n                return;\n            }\n            _this.isExpanded = false;\n            if (_this.allowSelection) {\n                _this.selectedItem = itemValue;\n            }\n            if (!!_this.onSelectionChanged) {\n                _this.onSelectionChanged(itemValue);\n            }\n        };\n        _this.isItemDisabled = function (itemValue) {\n            return itemValue.enabled !== undefined && !itemValue.enabled;\n        };\n        _this.isItemSelected = function (itemValue) {\n            return _this.areSameItems(_this.selectedItem, itemValue);\n        };\n        _this.isItemFocused = function (itemValue) {\n            return _this.areSameItems(_this.focusedItem, itemValue);\n        };\n        _this.getListClass = function () {\n            return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_3__[\"CssClassBuilder\"]()\n                .append(_this.cssClasses.itemsContainer)\n                .append(_this.cssClasses.itemsContainerFiltering, !!_this.filterString && _this.visibleActions.length !== _this.visibleItems.length)\n                .toString();\n        };\n        _this.getItemClass = function (itemValue) {\n            return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_3__[\"CssClassBuilder\"]()\n                .append(_this.cssClasses.item)\n                .append(_this.cssClasses.itemWithIcon, !!itemValue.iconName)\n                .append(_this.cssClasses.itemDisabled, _this.isItemDisabled(itemValue))\n                .append(_this.cssClasses.itemFocused, _this.isItemFocused(itemValue))\n                .append(_this.cssClasses.itemSelected, _this.isItemSelected(itemValue))\n                .append(itemValue.css)\n                .toString();\n        };\n        _this.getItemIndent = function (itemValue) {\n            var level = itemValue.level || 0;\n            return (level + 1) * ListModel.INDENT + \"px\";\n        };\n        _this.setItems(items);\n        _this.selectedItem = selectedItem;\n        return _this;\n    }\n    ListModel.prototype.hasText = function (item, filterStringInLow) {\n        if (!filterStringInLow)\n            return true;\n        var textInLow = (item.title || \"\").toLocaleLowerCase();\n        textInLow = _settings__WEBPACK_IMPORTED_MODULE_6__[\"settings\"].comparator.normalizeTextCallback(textInLow, \"filter\");\n        return textInLow.indexOf(filterStringInLow.toLocaleLowerCase()) > -1;\n    };\n    ListModel.prototype.isItemVisible = function (item) {\n        return item.visible && (!this.shouldProcessFilter || this.hasText(item, this.filterString));\n    };\n    Object.defineProperty(ListModel.prototype, \"visibleItems\", {\n        get: function () {\n            var _this = this;\n            return this.visibleActions.filter(function (item) { return _this.isItemVisible(item); });\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(ListModel.prototype, \"shouldProcessFilter\", {\n        get: function () {\n            return !this.onFilterStringChangedCallback;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    ListModel.prototype.onFilterStringChanged = function (text) {\n        var _this = this;\n        if (!!this.onFilterStringChangedCallback) {\n            this.onFilterStringChangedCallback(text);\n        }\n        this.isEmpty = this.renderedActions.filter(function (action) { return _this.isItemVisible(action); }).length === 0;\n    };\n    ListModel.prototype.scrollToItem = function (selector, ms) {\n        var _this = this;\n        if (ms === void 0) { ms = 0; }\n        setTimeout(function () {\n            if (!_this.listContainerHtmlElement)\n                return;\n            var item = _this.listContainerHtmlElement.querySelector(\".\" + selector);\n            if (item) {\n                setTimeout(function () {\n                    item.scrollIntoView({ behavior: \"smooth\", block: \"nearest\", inline: \"start\" });\n                }, ms);\n            }\n        }, ms);\n    };\n    ListModel.prototype.setOnFilterStringChangedCallback = function (callback) {\n        this.onFilterStringChangedCallback = callback;\n    };\n    ListModel.prototype.setItems = function (items, sortByVisibleIndex) {\n        var _this = this;\n        if (sortByVisibleIndex === void 0) { sortByVisibleIndex = true; }\n        _super.prototype.setItems.call(this, items, sortByVisibleIndex);\n        if (this.elementId) {\n            this.renderedActions.forEach(function (action) { action.elementId = _this.elementId + action.id; });\n        }\n        if (!this.isAllDataLoaded && !!this.actions.length) {\n            this.actions.push(this.loadingIndicator);\n        }\n    };\n    ListModel.prototype.onSet = function () {\n        this.showFilter = this.searchEnabled && (this.forceShowFilter || (this.actions || []).length > ListModel.MINELEMENTCOUNT);\n        _super.prototype.onSet.call(this);\n    };\n    ListModel.prototype.getDefaultCssClasses = function () {\n        return defaultListCss;\n    };\n    ListModel.prototype.areSameItems = function (item1, item2) {\n        if (!!this.areSameItemsCallback)\n            return this.areSameItemsCallback(item1, item2);\n        return !!item1 && !!item2 && item1.id == item2.id;\n    };\n    Object.defineProperty(ListModel.prototype, \"filterStringPlaceholder\", {\n        get: function () {\n            return this.getLocalizationString(\"filterStringPlaceholder\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(ListModel.prototype, \"emptyMessage\", {\n        get: function () {\n            return this.isAllDataLoaded ? this.getLocalizationString(\"emptyMessage\") : this.loadingText;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(ListModel.prototype, \"scrollableContainer\", {\n        get: function () {\n            return this.listContainerHtmlElement.querySelector(\".\" + this.getDefaultCssClasses().itemsContainer);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(ListModel.prototype, \"loadingText\", {\n        get: function () {\n            return this.getLocalizationString(\"loadingFile\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(ListModel.prototype, \"loadingIndicator\", {\n        get: function () {\n            if (!this.loadingIndicatorValue) {\n                this.loadingIndicatorValue = (new _actions_action__WEBPACK_IMPORTED_MODULE_2__[\"Action\"]({\n                    id: \"loadingIndicator\",\n                    title: this.loadingText,\n                    action: function () { },\n                    css: this.cssClasses.loadingIndicator\n                }));\n            }\n            return this.loadingIndicatorValue;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    ListModel.prototype.goToItems = function (event) {\n        if (event.key === \"ArrowDown\" || event.keyCode === 40) {\n            var currentElement = event.target.parentElement;\n            var listElement = currentElement.parentElement.querySelector(\"ul\");\n            var firstChild = Object(_utils_utils__WEBPACK_IMPORTED_MODULE_5__[\"getFirstVisibleChild\"])(listElement);\n            if (!!listElement && !!firstChild) {\n                _element_helper__WEBPACK_IMPORTED_MODULE_4__[\"ElementHelper\"].focusElement(firstChild);\n                event.preventDefault();\n            }\n        }\n    };\n    ListModel.prototype.onMouseMove = function (event) {\n        this.resetFocusedItem();\n    };\n    ListModel.prototype.onKeyDown = function (event) {\n        var currentElement = event.target;\n        if (event.key === \"ArrowDown\" || event.keyCode === 40) {\n            _element_helper__WEBPACK_IMPORTED_MODULE_4__[\"ElementHelper\"].focusElement(_element_helper__WEBPACK_IMPORTED_MODULE_4__[\"ElementHelper\"].getNextElementPreorder(currentElement));\n            event.preventDefault();\n        }\n        else if (event.key === \"ArrowUp\" || event.keyCode === 38) {\n            _element_helper__WEBPACK_IMPORTED_MODULE_4__[\"ElementHelper\"].focusElement(_element_helper__WEBPACK_IMPORTED_MODULE_4__[\"ElementHelper\"].getNextElementPostorder(currentElement));\n            event.preventDefault();\n        }\n    };\n    ListModel.prototype.onPointerDown = function (event, item) { };\n    ListModel.prototype.refresh = function () {\n        this.filterString = \"\";\n        this.resetFocusedItem();\n    };\n    ListModel.prototype.onClickSearchClearButton = function (event) {\n        event.currentTarget.parentElement.querySelector(\"input\").focus();\n        this.refresh();\n    };\n    ListModel.prototype.resetFocusedItem = function () {\n        this.focusedItem = undefined;\n    };\n    ListModel.prototype.focusFirstVisibleItem = function () {\n        this.focusedItem = this.visibleItems[0];\n    };\n    ListModel.prototype.focusLastVisibleItem = function () {\n        this.focusedItem = this.visibleItems[this.visibleItems.length - 1];\n    };\n    ListModel.prototype.initFocusedItem = function () {\n        var _this = this;\n        this.focusedItem = this.visibleItems.filter(function (item) { return item.visible && _this.isItemSelected(item); })[0];\n        if (!this.focusedItem) {\n            this.focusFirstVisibleItem();\n        }\n    };\n    ListModel.prototype.focusNextVisibleItem = function () {\n        if (!this.focusedItem) {\n            this.initFocusedItem();\n        }\n        else {\n            var items = this.visibleItems;\n            var currentFocusedItemIndex = items.indexOf(this.focusedItem);\n            var nextItem = items[currentFocusedItemIndex + 1];\n            if (nextItem) {\n                this.focusedItem = nextItem;\n            }\n            else {\n                this.focusFirstVisibleItem();\n            }\n        }\n    };\n    ListModel.prototype.focusPrevVisibleItem = function () {\n        if (!this.focusedItem) {\n            this.initFocusedItem();\n        }\n        else {\n            var items = this.visibleItems;\n            var currentFocusedItemIndex = items.indexOf(this.focusedItem);\n            var prevItem = items[currentFocusedItemIndex - 1];\n            if (prevItem) {\n                this.focusedItem = prevItem;\n            }\n            else {\n                this.focusLastVisibleItem();\n            }\n        }\n    };\n    ListModel.prototype.selectFocusedItem = function () {\n        !!this.focusedItem && this.onItemClick(this.focusedItem);\n    };\n    ListModel.prototype.initListContainerHtmlElement = function (htmlElement) {\n        this.listContainerHtmlElement = htmlElement;\n    };\n    ListModel.prototype.onLastItemRended = function (item) {\n        if (this.isAllDataLoaded)\n            return;\n        if (item === this.actions[this.actions.length - 1] && !!this.listContainerHtmlElement) {\n            this.hasVerticalScroller = _element_helper__WEBPACK_IMPORTED_MODULE_4__[\"ElementHelper\"].hasVerticalScroller(this.scrollableContainer);\n        }\n    };\n    ListModel.prototype.scrollToFocusedItem = function () {\n        this.scrollToItem(this.getDefaultCssClasses().itemFocused);\n    };\n    ListModel.prototype.scrollToSelectedItem = function () {\n        this.scrollToItem(this.getDefaultCssClasses().itemSelected, 110);\n    };\n    ListModel.prototype.addScrollEventListener = function (handler) {\n        if (!!handler) {\n            this.scrollHandler = handler;\n        }\n        if (!!this.scrollHandler) {\n            this.scrollableContainer.addEventListener(\"scroll\", this.scrollHandler);\n        }\n    };\n    ListModel.prototype.removeScrollEventListener = function () {\n        if (!!this.scrollHandler) {\n            this.scrollableContainer.removeEventListener(\"scroll\", this.scrollHandler);\n        }\n    };\n    ListModel.prototype.dispose = function () {\n        _super.prototype.dispose.call(this);\n        if (!!this.loadingIndicatorValue) {\n            this.loadingIndicatorValue.dispose();\n        }\n        this.listContainerHtmlElement = undefined;\n    };\n    ListModel.INDENT = 16;\n    ListModel.MINELEMENTCOUNT = 10;\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({\n            defaultValue: true,\n            onSet: function (newValue, target) {\n                target.onSet();\n            }\n        })\n    ], ListModel.prototype, \"searchEnabled\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ defaultValue: false })\n    ], ListModel.prototype, \"showFilter\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ defaultValue: false })\n    ], ListModel.prototype, \"forceShowFilter\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ defaultValue: false })\n    ], ListModel.prototype, \"isExpanded\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({})\n    ], ListModel.prototype, \"selectedItem\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])()\n    ], ListModel.prototype, \"focusedItem\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({\n            onSet: function (_, target) {\n                target.onFilterStringChanged(target.filterString);\n            }\n        })\n    ], ListModel.prototype, \"filterString\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ defaultValue: false })\n    ], ListModel.prototype, \"hasVerticalScroller\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ defaultValue: true })\n    ], ListModel.prototype, \"isAllDataLoaded\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ defaultValue: false })\n    ], ListModel.prototype, \"showSearchClearButton\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ defaultValue: true })\n    ], ListModel.prototype, \"renderElements\", void 0);\n    return ListModel;\n}(_actions_container__WEBPACK_IMPORTED_MODULE_1__[\"ActionContainer\"]));\n\n\n\n/***/ }),\n\n/***/ \"./src/localizablestring.ts\":\n/*!**********************************!*\\\n  !*** ./src/localizablestring.ts ***!\n  \\**********************************/\n/*! exports provided: LocalizableString, LocalizableStrings */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1802703__) {\n\n\"use strict\";\n__nested_webpack_require_1802703__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_1802703__.d(__nested_webpack_exports__, \"LocalizableString\", function() { return LocalizableString; });\n/* harmony export (binding) */ __nested_webpack_require_1802703__.d(__nested_webpack_exports__, \"LocalizableStrings\", function() { return LocalizableStrings; });\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1802703__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1802703__(/*! ./surveyStrings */ \"./src/surveyStrings.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1802703__(/*! ./settings */ \"./src/settings.ts\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1802703__(/*! ./base */ \"./src/base.ts\");\n\n\n\n\n/**\n * The class represents the string that supports multi-languages and markdown.\n * It uses in all objects where support for multi-languages and markdown is required.\n */\nvar LocalizableString = /** @class */ (function () {\n    function LocalizableString(owner, useMarkdown, name) {\n        if (useMarkdown === void 0) { useMarkdown = false; }\n        this.owner = owner;\n        this.useMarkdown = useMarkdown;\n        this.name = name;\n        this.values = {};\n        this.htmlValues = {};\n        this.onStringChanged = new _base__WEBPACK_IMPORTED_MODULE_3__[\"EventBase\"]();\n        this.onCreating();\n    }\n    Object.defineProperty(LocalizableString, \"defaultLocale\", {\n        get: function () {\n            return _settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].localization.defaultLocaleName;\n        },\n        set: function (val) {\n            _settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].localization.defaultLocaleName = val;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(LocalizableString.prototype, \"localizationName\", {\n        get: function () {\n            return this._localizationName;\n        },\n        set: function (val) {\n            if (this._localizationName != val) {\n                this._localizationName = val;\n                this.strChanged();\n            }\n        },\n        enumerable: false,\n        configurable: true\n    });\n    LocalizableString.prototype.getIsMultiple = function () { return false; };\n    Object.defineProperty(LocalizableString.prototype, \"locale\", {\n        get: function () {\n            if (this.owner && this.owner.getLocale) {\n                var res = this.owner.getLocale();\n                if (!!res || !this.sharedData)\n                    return res;\n            }\n            if (!!this.sharedData)\n                return this.sharedData.locale;\n            return \"\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    LocalizableString.prototype.strChanged = function () {\n        this.searchableText = undefined;\n        if (this.renderedText === undefined)\n            return;\n        this.calculatedTextValue = this.calcText();\n        if (this.renderedText !== this.calculatedTextValue) {\n            this.renderedText = undefined;\n            this.calculatedTextValue = undefined;\n        }\n        this.htmlValues = {};\n        this.onChanged();\n        this.onStringChanged.fire(this, {});\n    };\n    Object.defineProperty(LocalizableString.prototype, \"text\", {\n        get: function () {\n            return this.pureText;\n        },\n        set: function (value) {\n            this.setLocaleText(this.locale, value);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(LocalizableString.prototype, \"calculatedText\", {\n        get: function () {\n            this.renderedText =\n                this.calculatedTextValue !== undefined\n                    ? this.calculatedTextValue\n                    : this.calcText();\n            this.calculatedTextValue = undefined;\n            return this.renderedText;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    LocalizableString.prototype.calcText = function () {\n        var res = this.pureText;\n        if (res &&\n            this.owner &&\n            this.owner.getProcessedText &&\n            res.indexOf(\"{\") > -1) {\n            res = this.owner.getProcessedText(res);\n        }\n        if (this.onGetTextCallback)\n            res = this.onGetTextCallback(res);\n        return res;\n    };\n    Object.defineProperty(LocalizableString.prototype, \"pureText\", {\n        get: function () {\n            var loc = this.locale;\n            if (!loc)\n                loc = this.defaultLoc;\n            var res = this.getValue(loc);\n            if (this.isValueEmpty(res) && loc === this.defaultLoc) {\n                res = this.getValue(_surveyStrings__WEBPACK_IMPORTED_MODULE_1__[\"surveyLocalization\"].defaultLocale);\n            }\n            if (this.isValueEmpty(res)) {\n                var dialect = this.getRootDialect(loc);\n                if (!!dialect) {\n                    res = this.getValue(dialect);\n                }\n            }\n            if (this.isValueEmpty(res) && loc !== this.defaultLoc) {\n                res = this.getValue(this.defaultLoc);\n            }\n            if (this.isValueEmpty(res) && !!this.getLocalizationName()) {\n                res = this.getLocalizationStr();\n                if (!!this.onGetLocalizationTextCallback) {\n                    res = this.onGetLocalizationTextCallback(res);\n                }\n            }\n            if (!res)\n                res = \"\";\n            return res;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    LocalizableString.prototype.getRootDialect = function (loc) {\n        if (!loc)\n            return loc;\n        var index = loc.indexOf(\"-\");\n        return index > -1 ? loc.substring(0, index) : \"\";\n    };\n    LocalizableString.prototype.getLocalizationName = function () {\n        return !!this.sharedData ? this.sharedData.localizationName : this.localizationName;\n    };\n    LocalizableString.prototype.getLocalizationStr = function () {\n        var name = this.getLocalizationName();\n        return !!name ? _surveyStrings__WEBPACK_IMPORTED_MODULE_1__[\"surveyLocalization\"].getString(name, this.locale) : \"\";\n    };\n    Object.defineProperty(LocalizableString.prototype, \"hasHtml\", {\n        get: function () {\n            return this.hasHtmlValue();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(LocalizableString.prototype, \"html\", {\n        get: function () {\n            if (!this.hasHtml)\n                return \"\";\n            return this.getHtmlValue();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(LocalizableString.prototype, \"isEmpty\", {\n        get: function () {\n            return this.getValuesKeys().length == 0;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(LocalizableString.prototype, \"textOrHtml\", {\n        get: function () {\n            return this.hasHtml ? this.getHtmlValue() : this.calculatedText;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(LocalizableString.prototype, \"renderedHtml\", {\n        get: function () {\n            return this.textOrHtml;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    LocalizableString.prototype.getLocaleText = function (loc) {\n        var res = this.getLocaleTextCore(loc);\n        return res ? res : \"\";\n    };\n    LocalizableString.prototype.getLocaleTextCore = function (loc) {\n        if (!loc)\n            loc = this.defaultLoc;\n        return this.getValue(loc);\n    };\n    LocalizableString.prototype.isLocaleTextEqualsWithDefault = function (loc, val) {\n        var res = this.getLocaleTextCore(loc);\n        if (!res && this.onGetDefaultTextCallback) {\n            res = this.onGetDefaultTextCallback();\n        }\n        if (res === val)\n            return true;\n        return this.isValueEmpty(res) && this.isValueEmpty(val);\n    };\n    LocalizableString.prototype.clear = function () {\n        this.setJson(undefined);\n    };\n    LocalizableString.prototype.clearLocale = function (loc) {\n        this.setLocaleText(loc, undefined);\n    };\n    LocalizableString.prototype.setLocaleText = function (loc, value) {\n        loc = this.getValueLoc(loc);\n        if (!this.storeDefaultText && this.isLocaleTextEqualsWithDefault(loc, value)) {\n            if (!this.isValueEmpty(value) || !!loc && loc !== this.defaultLoc)\n                return;\n            var dl = _surveyStrings__WEBPACK_IMPORTED_MODULE_1__[\"surveyLocalization\"].defaultLocale;\n            var oldValue_1 = this.getValue(dl);\n            if (!!dl && !this.isValueEmpty(oldValue_1)) {\n                this.setValue(dl, value);\n                this.fireStrChanged(dl, oldValue_1);\n            }\n            return;\n        }\n        if (!_settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].localization.storeDuplicatedTranslations &&\n            !this.isValueEmpty(value) && loc && loc != this.defaultLoc &&\n            !this.getValue(loc) &&\n            value == this.getLocaleText(this.defaultLoc))\n            return;\n        var curLoc = this.curLocale;\n        if (!loc)\n            loc = this.defaultLoc;\n        var oldValue = this.onStrChanged && loc === curLoc ? this.pureText : undefined;\n        delete this.htmlValues[loc];\n        if (this.isValueEmpty(value)) {\n            this.deleteValue(loc);\n        }\n        else {\n            if (typeof value === \"string\") {\n                if (this.canRemoveLocValue(loc, value)) {\n                    this.setLocaleText(loc, null);\n                }\n                else {\n                    this.setValue(loc, value);\n                    if (loc == this.defaultLoc) {\n                        this.deleteValuesEqualsToDefault(value);\n                    }\n                }\n            }\n        }\n        this.fireStrChanged(loc, oldValue);\n    };\n    LocalizableString.prototype.isValueEmpty = function (val) {\n        if (val === undefined || val === null)\n            return true;\n        if (this.localizationName)\n            return false;\n        return val === \"\";\n    };\n    Object.defineProperty(LocalizableString.prototype, \"curLocale\", {\n        get: function () {\n            return !!this.locale ? this.locale : this.defaultLoc;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    LocalizableString.prototype.canRemoveLocValue = function (loc, val) {\n        if (_settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].localization.storeDuplicatedTranslations)\n            return false;\n        if (loc === this.defaultLoc)\n            return false;\n        var dialect = this.getRootDialect(loc);\n        if (!!dialect) {\n            var dialectVal = this.getLocaleText(dialect);\n            if (!!dialectVal)\n                return dialectVal == val;\n            return this.canRemoveLocValue(dialect, val);\n        }\n        else {\n            return val == this.getLocaleText(this.defaultLoc);\n        }\n    };\n    LocalizableString.prototype.fireStrChanged = function (loc, oldValue) {\n        this.strChanged();\n        if (!this.onStrChanged)\n            return;\n        var value = this.pureText;\n        if (loc !== this.curLocale || oldValue !== value) {\n            this.onStrChanged(oldValue, value);\n        }\n    };\n    LocalizableString.prototype.hasNonDefaultText = function () {\n        var keys = this.getValuesKeys();\n        if (keys.length == 0)\n            return false;\n        return keys.length > 1 || keys[0] != this.defaultLoc;\n    };\n    LocalizableString.prototype.getLocales = function () {\n        var keys = this.getValuesKeys();\n        if (keys.length == 0)\n            return [];\n        return keys;\n    };\n    LocalizableString.prototype.getJson = function () {\n        if (!!this.sharedData)\n            return this.sharedData.getJson();\n        var keys = this.getValuesKeys();\n        if (keys.length == 0)\n            return null;\n        if (keys.length == 1 &&\n            keys[0] == _settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].localization.defaultLocaleName &&\n            !_settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].serialization.localizableStringSerializeAsObject)\n            return this.values[keys[0]];\n        return this.values;\n    };\n    LocalizableString.prototype.setJson = function (value) {\n        if (!!this.sharedData) {\n            this.sharedData.setJson(value);\n            return;\n        }\n        this.values = {};\n        this.htmlValues = {};\n        if (value === null || value === undefined)\n            return;\n        if (typeof value === \"string\") {\n            this.setLocaleText(null, value);\n        }\n        else {\n            for (var key in value) {\n                this.setLocaleText(key, value[key]);\n            }\n        }\n        this.strChanged();\n    };\n    Object.defineProperty(LocalizableString.prototype, \"renderAs\", {\n        get: function () {\n            if (!this.owner || typeof this.owner.getRenderer !== \"function\") {\n                return LocalizableString.defaultRenderer;\n            }\n            return this.owner.getRenderer(this.name) || LocalizableString.defaultRenderer;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(LocalizableString.prototype, \"renderAsData\", {\n        get: function () {\n            if (!this.owner || typeof this.owner.getRendererContext !== \"function\") {\n                return this;\n            }\n            return this.owner.getRendererContext(this) || this;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    LocalizableString.prototype.equals = function (obj) {\n        if (!!this.sharedData)\n            return this.sharedData.equals(obj);\n        if (!obj || !obj.values)\n            return false;\n        return _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isTwoValueEquals(this.values, obj.values, false, true, false);\n    };\n    LocalizableString.prototype.setFindText = function (text) {\n        if (this.searchText == text)\n            return;\n        this.searchText = text;\n        if (!this.searchableText) {\n            var textOrHtml = this.textOrHtml;\n            this.searchableText = !!textOrHtml ? textOrHtml.toLowerCase() : \"\";\n        }\n        var str = this.searchableText;\n        var index = !!str && !!text ? str.indexOf(text) : undefined;\n        if (index < 0)\n            index = undefined;\n        if (index != undefined || this.searchIndex != index) {\n            this.searchIndex = index;\n            if (!!this.onSearchChanged) {\n                this.onSearchChanged();\n            }\n        }\n        return this.searchIndex != undefined;\n    };\n    LocalizableString.prototype.onChanged = function () { };\n    LocalizableString.prototype.onCreating = function () { };\n    LocalizableString.prototype.hasHtmlValue = function () {\n        if (!this.owner || !this.useMarkdown)\n            return false;\n        var loc = this.locale;\n        if (!loc)\n            loc = this.defaultLoc;\n        if (this.htmlValues[loc] !== undefined)\n            return !!this.htmlValues[loc];\n        var renderedText = this.calculatedText;\n        if (!renderedText)\n            return false;\n        if (!!this.getLocalizationName() && renderedText === this.getLocalizationStr())\n            return false;\n        var res = this.owner.getMarkdownHtml(renderedText, this.name);\n        this.htmlValues[loc] = res;\n        return !!res;\n    };\n    LocalizableString.prototype.getHtmlValue = function () {\n        var loc = this.locale;\n        if (!loc)\n            loc = this.defaultLoc;\n        return this.htmlValues[loc];\n    };\n    LocalizableString.prototype.deleteValuesEqualsToDefault = function (defaultValue) {\n        if (_settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].localization.storeDuplicatedTranslations)\n            return;\n        var keys = this.getValuesKeys();\n        for (var i = 0; i < keys.length; i++) {\n            if (keys[i] == this.defaultLoc)\n                continue;\n            if (this.getValue(keys[i]) == defaultValue) {\n                this.deleteValue(keys[i]);\n            }\n        }\n    };\n    LocalizableString.prototype.getValue = function (loc) {\n        if (!!this.sharedData)\n            return this.sharedData.getValue(loc);\n        return this.values[this.getValueLoc(loc)];\n    };\n    LocalizableString.prototype.setValue = function (loc, value) {\n        if (!!this.sharedData)\n            this.sharedData.setValue(loc, value);\n        else\n            this.values[this.getValueLoc(loc)] = value;\n    };\n    LocalizableString.prototype.deleteValue = function (loc) {\n        if (!!this.sharedData)\n            this.sharedData.deleteValue(loc);\n        else\n            delete this.values[this.getValueLoc(loc)];\n    };\n    LocalizableString.prototype.getValueLoc = function (loc) {\n        if (this.disableLocalization)\n            return _settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].localization.defaultLocaleName;\n        return loc;\n    };\n    LocalizableString.prototype.getValuesKeys = function () {\n        if (!!this.sharedData)\n            return this.sharedData.getValuesKeys();\n        return Object.keys(this.values);\n    };\n    Object.defineProperty(LocalizableString.prototype, \"defaultLoc\", {\n        get: function () {\n            return _settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].localization.defaultLocaleName;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    LocalizableString.SerializeAsObject = false;\n    LocalizableString.defaultRenderer = \"sv-string-viewer\";\n    LocalizableString.editableRenderer = \"sv-string-editor\";\n    return LocalizableString;\n}());\n\n/**\n * The class represents the list of strings that supports multi-languages.\n */\nvar LocalizableStrings = /** @class */ (function () {\n    function LocalizableStrings(owner) {\n        this.owner = owner;\n        this.values = {};\n    }\n    LocalizableStrings.prototype.getIsMultiple = function () { return true; };\n    Object.defineProperty(LocalizableStrings.prototype, \"locale\", {\n        get: function () {\n            return this.owner && this.owner.getLocale ? this.owner.getLocale() : \"\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(LocalizableStrings.prototype, \"value\", {\n        get: function () {\n            return this.getValue(\"\");\n        },\n        set: function (val) {\n            this.setValue(\"\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(LocalizableStrings.prototype, \"text\", {\n        get: function () {\n            return Array.isArray(this.value) ? this.value.join(\"\\n\") : \"\";\n        },\n        set: function (val) {\n            this.value = !!val ? val.split(\"\\n\") : [];\n        },\n        enumerable: false,\n        configurable: true\n    });\n    LocalizableStrings.prototype.getLocaleText = function (loc) {\n        var res = this.getValueCore(loc, !loc || loc === this.locale);\n        if (!res || !Array.isArray(res) || res.length == 0)\n            return \"\";\n        return res.join(\"\\n\");\n    };\n    LocalizableStrings.prototype.setLocaleText = function (loc, newValue) {\n        var val = !!newValue ? newValue.split(\"\\n\") : null;\n        this.setValue(loc, val);\n    };\n    LocalizableStrings.prototype.getValue = function (loc) {\n        return this.getValueCore(loc);\n    };\n    LocalizableStrings.prototype.getValueCore = function (loc, useDefault) {\n        if (useDefault === void 0) { useDefault = true; }\n        loc = this.getLocale(loc);\n        if (this.values[loc])\n            return this.values[loc];\n        if (useDefault) {\n            var defLoc = _settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].localization.defaultLocaleName;\n            if (loc !== defLoc && this.values[defLoc])\n                return this.values[defLoc];\n        }\n        return [];\n    };\n    LocalizableStrings.prototype.setValue = function (loc, val) {\n        loc = this.getLocale(loc);\n        var oldValue = _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].createCopy(this.values);\n        if (!val || val.length == 0) {\n            delete this.values[loc];\n        }\n        else {\n            this.values[loc] = val;\n        }\n        if (!!this.onValueChanged) {\n            this.onValueChanged(oldValue, this.values);\n        }\n    };\n    LocalizableStrings.prototype.hasValue = function (loc) {\n        if (loc === void 0) { loc = \"\"; }\n        return !this.isEmpty && this.getValue(loc).length > 0;\n    };\n    Object.defineProperty(LocalizableStrings.prototype, \"isEmpty\", {\n        get: function () {\n            return this.getValuesKeys().length == 0;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    LocalizableStrings.prototype.getLocale = function (loc) {\n        if (!!loc)\n            return loc;\n        loc = this.locale;\n        return !!loc ? loc : _settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].localization.defaultLocaleName;\n    };\n    LocalizableStrings.prototype.getLocales = function () {\n        var keys = this.getValuesKeys();\n        if (keys.length == 0)\n            return [];\n        return keys;\n    };\n    LocalizableStrings.prototype.getJson = function () {\n        var keys = this.getValuesKeys();\n        if (keys.length == 0)\n            return null;\n        if (keys.length == 1 &&\n            keys[0] == _settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].localization.defaultLocaleName &&\n            !_settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].serialization.localizableStringSerializeAsObject)\n            return this.values[keys[0]];\n        return _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].createCopy(this.values);\n    };\n    LocalizableStrings.prototype.setJson = function (value) {\n        this.values = {};\n        if (!value)\n            return;\n        if (Array.isArray(value)) {\n            this.setValue(null, value);\n        }\n        else {\n            for (var key in value) {\n                this.setValue(key, value[key]);\n            }\n        }\n    };\n    LocalizableStrings.prototype.getValuesKeys = function () {\n        return Object.keys(this.values);\n    };\n    return LocalizableStrings;\n}());\n\n\n\n/***/ }),\n\n/***/ \"./src/localization/arabic.ts\":\n/*!************************************!*\\\n  !*** ./src/localization/arabic.ts ***!\n  \\************************************/\n/*! exports provided: arabicSurveyStrings */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1825394__) {\n\n\"use strict\";\n__nested_webpack_require_1825394__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_1825394__.d(__nested_webpack_exports__, \"arabicSurveyStrings\", function() { return arabicSurveyStrings; });\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1825394__(/*! survey-core */ \"./src/entries/core.ts\");\n\nvar arabicSurveyStrings = {\n    pagePrevText: \"السابق\",\n    pageNextText: \"التالي\",\n    completeText: \"إرسال البيانات\",\n    previewText: \"معاينة\",\n    editText: \"تعديل\",\n    startSurveyText: \"بداية\",\n    otherItemText: \"نص آخر\",\n    noneItemText: \"لا شيء\",\n    selectAllItemText: \"اختر الكل\",\n    progressText: \"{1} صفحة {0} من\",\n    indexText: \"{0} من {1}\",\n    panelDynamicProgressText: \"سجل {0} من {1}\",\n    panelDynamicTabTextFormat: \"لوحة {بانل إندكس}\",\n    questionsProgressText: \"تمت الإجابة على أسئلة {0} / {1}\",\n    emptySurvey: \"لا توجد صفحة مرئية أو سؤال في النموذج\",\n    completingSurvey: \"شكرا لكم لاستكمال النموذج!\",\n    completingSurveyBefore: \"تظهر سجلاتنا أنك قد أكملت هذا الاستطلاع بالفعل.\",\n    loadingSurvey: \"...يتم تحميل النموذج\",\n    placeholder: \"...اختر\",\n    ratingOptionsCaption: \"اختار...\",\n    value: \"القيمة\",\n    requiredError: \".يرجى الإجابة على السؤال\",\n    requiredErrorInPanel: \"الرجاء الإجابة على سؤال واحد على الأقل.\",\n    requiredInAllRowsError: \"يرجى الإجابة على الأسئلة في جميع الصفوف\",\n    numericError: \"يجب أن تكون القيمة رقمية.\",\n    minError: \"يجب ألا تقل القيمة عن {0}\",\n    maxError: \"يجب ألا تزيد القيمة عن {0}\",\n    textMinLength: \"الرجاء إدخال ما لا يقل عن {0} حروف\",\n    textMaxLength: \"الرجاء إدخال أقل من {0} حروف\",\n    textMinMaxLength: \"يرجى إدخال أكثر من {0} وأقل من {1} حروف\",\n    minRowCountError: \"يرجى ملء ما لا يقل عن {0} الصفوف\",\n    minSelectError: \"يرجى تحديد ما لا يقل عن {0} المتغيرات\",\n    maxSelectError: \"يرجى تحديد ما لا يزيد عن {0} المتغيرات\",\n    numericMinMax: \"و'{0}' يجب أن تكون مساوية أو أكثر من {1} وتساوي أو أقل من {2}ا\",\n    numericMin: \"و'{0}' يجب أن تكون مساوية أو أكثر من {1}ا\",\n    numericMax: \"و'{0}' يجب أن تكون مساوية أو أقل من {1}ا\",\n    invalidEmail: \"الرجاء إدخال بريد الكتروني صحيح\",\n    invalidExpression: \"يجب أن يعرض التعبير: {0} 'صواب'.\",\n    urlRequestError: \"طلب إرجاع خطأ '{0}'. {1}ا\",\n    urlGetChoicesError: \"عاد طلب البيانات فارغ أو 'المسار' غير صحيح \",\n    exceedMaxSize: \"ينبغي ألا يتجاوز حجم الملف {0}ا\",\n    otherRequiredError: \"الرجاء إدخال قيمة أخرى\",\n    uploadingFile: \"تحميل الملف الخاص بك. يرجى الانتظار عدة ثوان والمحاولة لاحقًا\",\n    loadingFile: \"جار التحميل...\",\n    chooseFile: \"اختر الملفات...\",\n    noFileChosen: \"لم تقم باختيار ملف\",\n    fileDragAreaPlaceholder: \"اسحب ملفا وأفلته هنا أو انقر فوق الزر أدناه واختر ملفا لتحميله.\",\n    confirmDelete: \"هل تريد حذف السجل؟\",\n    keyDuplicationError: \"يجب أن تكون هذه القيمة فريدة.\",\n    addColumn: \"أضف العمود\",\n    addRow: \"اضافة صف\",\n    removeRow: \"إزالة صف\",\n    emptyRowsText: \"لا توجد صفوف.\",\n    addPanel: \"اضف جديد\",\n    removePanel: \"إزالة\",\n    choices_Item: \"بند\",\n    matrix_column: \"عمود\",\n    matrix_row: \"صف\",\n    multipletext_itemname: \"نص\",\n    savingData: \"يتم حفظ النتائج على الخادم ...\",\n    savingDataError: \"حدث خطأ ولم نتمكن من حفظ النتائج.\",\n    savingDataSuccess: \"تم حفظ النتائج بنجاح!\",\n    saveAgainButton: \"حاول مجددا\",\n    timerMin: \"دقيقة\",\n    timerSec: \"ثانية\",\n    timerSpentAll: \"لقد أنفقت {0} على هذه الصفحة و {1} إجمالاً.\",\n    timerSpentPage: \"لقد أنفقت {0} على هذه الصفحة.\",\n    timerSpentSurvey: \"لقد أنفقت {0} إجمالاً.\",\n    timerLimitAll: \"لقد أنفقت {0} من {1} في هذه الصفحة و {2} من إجمالي {3}.\",\n    timerLimitPage: \"لقد أنفقت {0} من {1} في هذه الصفحة.\",\n    timerLimitSurvey: \"لقد أنفقت {0} من إجمالي {1}.\",\n    clearCaption: \"واضح\",\n    signaturePlaceHolder: \"وقع هنا\",\n    chooseFileCaption: \"اختر ملف\",\n    takePhotoCaption: \"التقاط صورة\",\n    cameraPlaceHolder: \"انقر فوق الزر أدناه لالتقاط صورة باستخدام الكاميرا.\",\n    fileCameraDragAreaPlaceHolder: \"قم بسحب ملف وإفلاته أو تحديده لتحميله أو التقاط صورة باستخدام الكاميرا.\",\n    replaceFileCaption: \"استبدال الملف\",\n    removeFileCaption: \"قم بإزالة هذا الملف\",\n    booleanCheckedLabel: \"نعم\",\n    booleanUncheckedLabel: \"لا\",\n    confirmRemoveFile: \"هل أنت متأكد أنك تريد إزالة هذا الملف: {0}؟\",\n    confirmRemoveAllFiles: \"هل أنت متأكد أنك تريد إزالة كافة الملفات؟\",\n    questionTitlePatternText: \"عنوان السؤال\",\n    modalCancelButtonText: \"إلغاء الأمر\",\n    modalApplyButtonText: \"طبق\",\n    filterStringPlaceholder: \"اكتب للبحث...\",\n    emptyMessage: \"لا توجد بيانات للعرض\",\n    noEntriesText: \"لا توجد إدخالات حتى الآن.\\nانقر فوق الزر أدناه لإضافة إدخال جديد.\",\n    noEntriesReadonlyText: \"لا توجد إدخالات.\",\n    more: \"أكثر\",\n    tagboxDoneButtonCaption: \"موافق\",\n    selectToRankEmptyRankedAreaText: \"يتم ترتيب جميع الخيارات\",\n    selectToRankEmptyUnrankedAreaText: \"قم بسحب وإسقاط الخيارات هنا لترتيبها\"\n};\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"ar\"] = arabicSurveyStrings;\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"ar\"] = \"العربية\";\n// The following strings have been translated by a machine translation service\n// Remove those strings that you have corrected manually\n// indexText: \"{0} of {1}\" => \"{0} من {1}\"\n// panelDynamicTabTextFormat: \"Panel {panelIndex}\" => \"لوحة {بانل إندكس}\"\n// ratingOptionsCaption: \"Select...\" => \"اختار...\"\n// minError: \"The value should not be less than {0}\" => \"يجب ألا تقل القيمة عن {0}\"\n// maxError: \"The value should not be greater than {0}\" => \"يجب ألا تزيد القيمة عن {0}\"\n// fileDragAreaPlaceholder: \"Drag and drop a file here or click the button below and choose a file to upload.\" => \"اسحب ملفا وأفلته هنا أو انقر فوق الزر أدناه واختر ملفا لتحميله.\"\n// emptyRowsText: \"There are no rows.\" => \"لا توجد صفوف.\"\n// multipletext_itemname: \"text\" => \"نص\"\n// signaturePlaceHolder: \"Sign here\" => \"وقع هنا\"\n// modalCancelButtonText: \"Cancel\" => \"إلغاء الأمر\"\n// modalApplyButtonText: \"Apply\" => \"طبق\"\n// filterStringPlaceholder: \"Type to search...\" => \"اكتب للبحث...\"\n// emptyMessage: \"No data to display\" => \"لا توجد بيانات للعرض\"\n// noEntriesText: \"There are no entries yet.\\nClick the button below to add a new entry.\" => \"لا توجد إدخالات حتى الآن.\\nانقر فوق الزر أدناه لإضافة إدخال جديد.\"\n// noEntriesReadonlyText: \"There are no entries.\" => \"لا توجد إدخالات.\"\n// more: \"More\" => \"أكثر\"\n// tagboxDoneButtonCaption: \"OK\" => \"موافق\"\n// selectToRankEmptyRankedAreaText: \"All choices are ranked\" => \"يتم ترتيب جميع الخيارات\"\n// selectToRankEmptyUnrankedAreaText: \"Drag and drop choices here to rank them\" => \"قم بسحب وإسقاط الخيارات هنا لترتيبها\"// takePhotoCaption: \"Take Photo\" => \"التقاط صورة\"\n// cameraPlaceHolder: \"Click the button below to take a photo using the camera.\" => \"انقر فوق الزر أدناه لالتقاط صورة باستخدام الكاميرا.\"\n// fileCameraDragAreaPlaceHolder: \"Drag and drop or select a file to upload or take a photo using the camera.\" => \"قم بسحب ملف وإفلاته أو تحديده لتحميله أو التقاط صورة باستخدام الكاميرا.\"\n// replaceFileCaption: \"Replace file\" => \"استبدال الملف\"\n\n\n/***/ }),\n\n/***/ \"./src/localization/basque.ts\":\n/*!************************************!*\\\n  !*** ./src/localization/basque.ts ***!\n  \\************************************/\n/*! exports provided: basqueSurveyStrings */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1832669__) {\n\n\"use strict\";\n__nested_webpack_require_1832669__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_1832669__.d(__nested_webpack_exports__, \"basqueSurveyStrings\", function() { return basqueSurveyStrings; });\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1832669__(/*! survey-core */ \"./src/entries/core.ts\");\n\nvar basqueSurveyStrings = {\n    pagePrevText: \"Aurrekoa\",\n    pageNextText: \"Hurrengoa\",\n    completeText: \"Bukatu\",\n    previewText: \"Aurrebista\",\n    editText: \"Editatu\",\n    startSurveyText: \"Hasi\",\n    otherItemText: \"Beste bat (zehaztu)\",\n    noneItemText: \"Bat ere ez\",\n    selectAllItemText: \"Guztia hautatu\",\n    progressText: \"{1}-(e)tik {0} orrialde\",\n    indexText: \"{1} {0}\",\n    panelDynamicProgressText: \"{0} errigistro {1}-(e)tik\",\n    panelDynamicTabTextFormat: \"Panel {panelIndex}\",\n    questionsProgressText: \"Erantzundako galderak {0}/{1}\",\n    emptySurvey: \"Ez dago orrialde bistaragarririk edo ez dago galderarik.\",\n    completingSurvey: \"Eskerrik asko galdetegia erantzuteagatik!\",\n    completingSurveyBefore: \"Gure datuek diote dagoeneko galdetegia erantzun duzula.\",\n    loadingSurvey: \"Galdetegia kargatzen...\",\n    placeholder: \"Hautatu...\",\n    ratingOptionsCaption: \"Aukeratu...\",\n    value: \"balioa\",\n    requiredError: \"Mesedez, galdera erantzun.\",\n    requiredErrorInPanel: \"Mesedez, gutxienez galdera bat erantzun.\",\n    requiredInAllRowsError: \"Mesedez, errenkadako galdera guztiak erantzun.\",\n    numericError: \"Estimazioa zenbakizkoa izan behar du.\",\n    minError: \"Balioa ez da {0} baino txikiagoa izan behar\",\n    maxError: \"Balioa ez da {0} baino handiagoa izan behar\",\n    textMinLength: \"Mesedez, gutxienez {0} karaktere erabili behar dira.\",\n    textMaxLength: \"Mesedez, gehienez {0} karaktere erabili behar dira.\",\n    textMinMaxLength: \"Mesedez, gehienez {0} eta gutxienez {1} karaktere erabili behar dira.\",\n    minRowCountError: \"Mesedez, gutxienez {0} errenkada bete.\",\n    minSelectError: \"Mesedez, gutxienez {0} aukera hautatu.\",\n    maxSelectError: \"Mesedez, {0} aukera baino gehiago ez hautatu.\",\n    numericMinMax: \"El '{0}' debe de ser igual o más de {1} y igual o menos de {2}\",\n    numericMin: \"'{0}' {1} baino handiagoa edo berdin izan behar da\",\n    numericMax: \"'{0}' {1} baino txikiago edo berdin izan behar da\",\n    invalidEmail: \"Mesedez, baliozko emaila idatz ezazu.\",\n    invalidExpression: \"{0} adierazpenak 'egiazkoa' itzuli beharko luke.\",\n    urlRequestError: \"Eskaerak '{0}' errorea itzuli du. {1}\",\n    urlGetChoicesError: \"La solicitud regresó vacío de data o la propiedad 'trayectoria' no es correcta\",\n    exceedMaxSize: \"Fitxategiaren tamaina ez da {0} baino handiagoa izan behar.\",\n    otherRequiredError: \"Mesedez, beste estimazioa gehitu.\",\n    uploadingFile: \"Zure fitxategia igotzen ari da. Mesedez, segundo batzuk itxaron eta saiatu berriro.\",\n    loadingFile: \"Kargatzen...\",\n    chooseFile: \"Fitxategia(k) hautatu...\",\n    noFileChosen: \"Ez da inolako fitxategirik hautatu\",\n    fileDragAreaPlaceholder: \"Arrastatu eta askatu artxibo bat hemen edo klik egin beheko botoian eta aukeratu artxibo bat kargatzeko.\",\n    confirmDelete: \"¿Erregistroa borratu nahi al duzu?\",\n    keyDuplicationError: \"Balio hau bakarra izan behar du.\",\n    addColumn: \"Zutabe bat gehitu\",\n    addRow: \"Errenkada bat gehitu\",\n    removeRow: \"Errenkada bat kendu\",\n    emptyRowsText: \"Ez dago errenkadarik.\",\n    addPanel: \"Berria gehitu\",\n    removePanel: \"Kendu\",\n    choices_Item: \"artikulua\",\n    matrix_column: \"Zutabea\",\n    matrix_row: \"Errenkada\",\n    multipletext_itemname: \"testua\",\n    savingData: \"Erantzunak zerbitzarian gordetzen ari dira...\",\n    savingDataError: \"Erroreren bat gertatu eta erantzunak ez dira zerbitzarian gorde ahal izan.\",\n    savingDataSuccess: \"Erantzunak egoki gorde dira!\",\n    saveAgainButton: \"Berriro saiatu.\",\n    timerMin: \"min\",\n    timerSec: \"seg\",\n    timerSpentAll: \"{0} erabili duzu orrialde honetan eta orotara {1}.\",\n    timerSpentPage: \"Zuk {0} erabili duzu.\",\n    timerSpentSurvey: \"Orotara gastatu duzu.\",\n    timerLimitAll: \"{0} gastatu duzu {1}-(e)tik orrialde honetan eta orotara {2} {3}-(e)tik.\",\n    timerLimitPage: \"{0} gastatu duzu orrialde honetan {1}-(e)tik.\",\n    timerLimitSurvey: \"Zuk orotara {0} gastatu duzu {1}-(e)tik.\",\n    clearCaption: \"Hustu\",\n    signaturePlaceHolder: \"Sinatu hemen\",\n    chooseFileCaption: \"Fitxategia hautatu\",\n    takePhotoCaption: \"Argazkia hartu\",\n    cameraPlaceHolder: \"Egin klik beheko botoian, kamerarekin argazki bat hartzeko.\",\n    fileCameraDragAreaPlaceHolder: \"Arrastatu eta askatu artxibo bat kamerarekin argazki bat kargatzeko edo hartzeko.\",\n    replaceFileCaption: \"Artxiboa ordeztu\",\n    removeFileCaption: \"Fitxategi hau ezabatu\",\n    booleanCheckedLabel: \"Bai\",\n    booleanUncheckedLabel: \"Ez\",\n    confirmRemoveFile: \"Ziur zaude hurrengo fitxategia ezabatu nahi duzula: {0}?\",\n    confirmRemoveAllFiles: \"Ziur al zaude fitxategi guztiak ezabatu nahi dituzula?\",\n    questionTitlePatternText: \"Galderaren izenburua\",\n    modalCancelButtonText: \"Ezeztatu\",\n    modalApplyButtonText: \"Ezarri\",\n    filterStringPlaceholder: \"Idatzi bila...\",\n    emptyMessage: \"Ez daturik erakusteko\",\n    noEntriesText: \"Oraindik ez sarrerarik.\\nKlik beheko botoian klik egin sarrera berri bat eransteko.\",\n    noEntriesReadonlyText: \"Ez sarrerarik.\",\n    more: \"Gehiago\",\n    tagboxDoneButtonCaption: \"Ados\",\n    selectToRankEmptyRankedAreaText: \"Aukera guztiak sailkatuta daude\",\n    selectToRankEmptyUnrankedAreaText: \"Arrastaka eta askatzen ditu hemen sailkatzeko\"\n};\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"eu\"] = basqueSurveyStrings;\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"eu\"] = \"Euskara\";\n// The following strings have been translated by a machine translation service\n// Remove those strings that you have corrected manually\n// indexText: \"{0} of {1}\" => \"{1} {0}\"\n// panelDynamicTabTextFormat: \"Panel {panelIndex}\" => \"Panel {panelIndex}\"\n// ratingOptionsCaption: \"Select...\" => \"Aukeratu...\"\n// fileDragAreaPlaceholder: \"Drag and drop a file here or click the button below and choose a file to upload.\" => \"Arrastatu eta askatu artxibo bat hemen edo klik egin beheko botoian eta aukeratu artxibo bat kargatzeko.\"\n// filterStringPlaceholder: \"Type to search...\" => \"Idatzi bila...\"\n// emptyMessage: \"No data to display\" => \"Ez daturik erakusteko\"\n// noEntriesText: \"There are no entries yet.\\nClick the button below to add a new entry.\" => \"Oraindik ez sarrerarik.\\nKlik beheko botoian klik egin sarrera berri bat eransteko.\"\n// noEntriesReadonlyText: \"There are no entries.\" => \"Ez sarrerarik.\"\n// more: \"More\" => \"Gehiago\"\n// tagboxDoneButtonCaption: \"OK\" => \"Ados\"\n// selectToRankEmptyRankedAreaText: \"All choices are ranked\" => \"Aukera guztiak sailkatuta daude\"\n// selectToRankEmptyUnrankedAreaText: \"Drag and drop choices here to rank them\" => \"Arrastaka eta askatzen ditu hemen sailkatzeko\"// takePhotoCaption: \"Take Photo\" => \"Argazkia hartu\"\n// cameraPlaceHolder: \"Click the button below to take a photo using the camera.\" => \"Egin klik beheko botoian, kamerarekin argazki bat hartzeko.\"\n// fileCameraDragAreaPlaceHolder: \"Drag and drop or select a file to upload or take a photo using the camera.\" => \"Arrastatu eta askatu artxibo bat kamerarekin argazki bat kargatzeko edo hartzeko.\"\n// replaceFileCaption: \"Replace file\" => \"Artxiboa ordeztu\"\n\n\n/***/ }),\n\n/***/ \"./src/localization/bulgarian.ts\":\n/*!***************************************!*\\\n  !*** ./src/localization/bulgarian.ts ***!\n  \\***************************************/\n/*! exports provided: bulgarianStrings */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1840381__) {\n\n\"use strict\";\n__nested_webpack_require_1840381__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_1840381__.d(__nested_webpack_exports__, \"bulgarianStrings\", function() { return bulgarianStrings; });\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1840381__(/*! survey-core */ \"./src/entries/core.ts\");\n\nvar bulgarianStrings = {\n    pagePrevText: \"Назад\",\n    pageNextText: \"Напред\",\n    completeText: \"Край\",\n    previewText: \"Визуализация\",\n    editText: \"редактиране\",\n    startSurveyText: \"Начало\",\n    otherItemText: \"Друго (опишете)\",\n    noneItemText: \"Нито един\",\n    selectAllItemText: \"Всички\",\n    progressText: \"стр. {0}, общо стр. {1}\",\n    indexText: \"{0} на {1}\",\n    panelDynamicProgressText: \"Запис {0} от {1}\",\n    panelDynamicTabTextFormat: \"Панел {panelIndex}\",\n    questionsProgressText: \"Отговорени на {0} / {1} въпроса\",\n    emptySurvey: \"Анкетата не съдържа видими страници или въпроси.\",\n    completingSurvey: \"Благодарим ви за участието в анкетата!\",\n    completingSurveyBefore: \"Изглежда, че вие вече сте попълнили анкетата.\",\n    loadingSurvey: \"Зареждане на анкетата...\",\n    placeholder: \"Изберете...\",\n    ratingOptionsCaption: \"Отбран...\",\n    value: \"value\",\n    requiredError: \"Моля, отговорете на следния въпрос.\",\n    requiredErrorInPanel: \"Моля, отговорете поне на един от въпросите.\",\n    requiredInAllRowsError: \"Моля, отговорете на въпросите на всички редове.\",\n    numericError: \"Стойността следва да бъде число.\",\n    minError: \"Стойността не трябва да бъде по-малка от {0}\",\n    maxError: \"Стойността не трябва да бъде по-голяма от {0}\",\n    textMinLength: \"Моля, използвайте поне {0} символа.\",\n    textMaxLength: \"Моля, използвайте не повече от {0} символа.\",\n    textMinMaxLength: \"Моля, използвайте повече от {0} и по-малко от {1} символа.\",\n    minRowCountError: \"Моля, попълнете поне {0} реда.\",\n    minSelectError: \"Моля, изберете поне {0} варианта.\",\n    maxSelectError: \"Моля, изберете не повече от {0} варианта.\",\n    numericMinMax: \"Стойността '{0}' следва да бъде равна или по-голяма от {1} и равна или по-малка от {2}\",\n    numericMin: \"Стойността '{0}' следва да бъде равна или по-голяма от {1}\",\n    numericMax: \"Стойността '{0}' следва да бъде равна или по-малка от {1}\",\n    invalidEmail: \"Моля, въведете валиден адрес на електронна поща.\",\n    invalidExpression: \"Изразът: {0} трябва да дава резултат 'true' (истина).\",\n    urlRequestError: \"Заявката води до грешка '{0}'. {1}\",\n    urlGetChoicesError: \"Заявката не връща данни или частта 'path' (път до търсения ресурс на сървъра) е неправилно зададена\",\n    exceedMaxSize: \"Размерът на файла следва да не превишава {0}.\",\n    otherRequiredError: \"Моля, въведете другата стойност.\",\n    uploadingFile: \"Вашит файл се зарежда на сървъра. Моля, изчакайте няколко секунди и тогава опитвайте отново.\",\n    loadingFile: \"Зареждане...\",\n    chooseFile: \"Изберете файл(ове)...\",\n    noFileChosen: \"Няма избран файл\",\n    fileDragAreaPlaceholder: \"Плъзнете и пуснете файл тук или щракнете върху бутона по-долу и изберете файл за качване.\",\n    confirmDelete: \"Желаете ли да изтриете записа?\",\n    keyDuplicationError: \"Стойността следва да бъде уникална.\",\n    addColumn: \"Добавяне на колона\",\n    addRow: \"Добавяне на ред\",\n    removeRow: \"Премахване на ред\",\n    emptyRowsText: \"Няма редове.\",\n    addPanel: \"Добавяне на панел\",\n    removePanel: \"Премахване на панел\",\n    choices_Item: \"елемент\",\n    matrix_column: \"Колона\",\n    matrix_row: \"Ред\",\n    multipletext_itemname: \"Текст\",\n    savingData: \"Резултатите се запазват на сървъра...\",\n    savingDataError: \"Поради възникнала грешка резултатите не можаха да бъдат запазени.\",\n    savingDataSuccess: \"Резултатите бяха запазени успешно!\",\n    saveAgainButton: \"Нов опит\",\n    timerMin: \"мин\",\n    timerSec: \"сек\",\n    timerSpentAll: \"Вие използвахте {0} на тази страница и общо {1}.\",\n    timerSpentPage: \"Вие използвахте {0} на тази страница.\",\n    timerSpentSurvey: \"Вие използвахте общо {0}.\",\n    timerLimitAll: \"Вие изпозвахте {0} от {1} на тази страница и общо {2} от {3}.\",\n    timerLimitPage: \"Вие използвахте {0} от {1} на тази страница.\",\n    timerLimitSurvey: \"Вие използвахте общо {0} от {1}.\",\n    clearCaption: \"Начално състояние\",\n    signaturePlaceHolder: \"Подпишете тук\",\n    chooseFileCaption: \"Изберете файл\",\n    takePhotoCaption: \"Направете снимка\",\n    cameraPlaceHolder: \"Кликнете върху бутона по-долу, за да направите снимка с помощта на камерата.\",\n    fileCameraDragAreaPlaceHolder: \"Плъзнете и пуснете или изберете файл за качване или правене на снимка с помощта на камерата.\",\n    replaceFileCaption: \"Заместване на файл\",\n    removeFileCaption: \"Премахване на файла\",\n    booleanCheckedLabel: \"Да\",\n    booleanUncheckedLabel: \"Не\",\n    confirmRemoveFile: \"Наистина ли искате да премахнете този файл: {0}?\",\n    confirmRemoveAllFiles: \"Наистина ли искате да премахнете всички файлове?\",\n    questionTitlePatternText: \"Заглавие на въпроса\",\n    modalCancelButtonText: \"Отмени\",\n    modalApplyButtonText: \"Прилагам\",\n    filterStringPlaceholder: \"Въведете за търсене...\",\n    emptyMessage: \"Няма данни за показване\",\n    noEntriesText: \"Все още няма записи.\\nЩракнете върху бутона по-долу, за да добавите нов запис.\",\n    noEntriesReadonlyText: \"Няма записи.\",\n    more: \"Още\",\n    tagboxDoneButtonCaption: \"Добре\",\n    selectToRankEmptyRankedAreaText: \"Всички възможности за избор са класирани\",\n    selectToRankEmptyUnrankedAreaText: \"Плъзнете и пуснете опции тук, за да ги класирате\"\n};\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"bg\"] = bulgarianStrings;\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"bg\"] = \"български\";\n// The following strings have been translated by a machine translation service\n// Remove those strings that you have corrected manually\n// indexText: \"{0} of {1}\" => \"{0} на {1}\"\n// panelDynamicTabTextFormat: \"Panel {panelIndex}\" => \"Панел {panelIndex}\"\n// ratingOptionsCaption: \"Select...\" => \"Отбран...\"\n// minError: \"The value should not be less than {0}\" => \"Стойността не трябва да бъде по-малка от {0}\"\n// maxError: \"The value should not be greater than {0}\" => \"Стойността не трябва да бъде по-голяма от {0}\"\n// fileDragAreaPlaceholder: \"Drag and drop a file here or click the button below and choose a file to upload.\" => \"Плъзнете и пуснете файл тук или щракнете върху бутона по-долу и изберете файл за качване.\"\n// emptyRowsText: \"There are no rows.\" => \"Няма редове.\"\n// multipletext_itemname: \"text\" => \"Текст\"\n// signaturePlaceHolder: \"Sign here\" => \"Подпишете тук\"\n// modalCancelButtonText: \"Cancel\" => \"Отмени\"\n// modalApplyButtonText: \"Apply\" => \"Прилагам\"\n// filterStringPlaceholder: \"Type to search...\" => \"Въведете за търсене...\"\n// emptyMessage: \"No data to display\" => \"Няма данни за показване\"\n// noEntriesText: \"There are no entries yet.\\nClick the button below to add a new entry.\" => \"Все още няма записи.\\nЩракнете върху бутона по-долу, за да добавите нов запис.\"\n// noEntriesReadonlyText: \"There are no entries.\" => \"Няма записи.\"\n// more: \"More\" => \"Още\"\n// tagboxDoneButtonCaption: \"OK\" => \"Добре\"\n// selectToRankEmptyRankedAreaText: \"All choices are ranked\" => \"Всички възможности за избор са класирани\"\n// selectToRankEmptyUnrankedAreaText: \"Drag and drop choices here to rank them\" => \"Плъзнете и пуснете опции тук, за да ги класирате\"// takePhotoCaption: \"Take Photo\" => \"Направете снимка\"\n// cameraPlaceHolder: \"Click the button below to take a photo using the camera.\" => \"Кликнете върху бутона по-долу, за да направите снимка с помощта на камерата.\"\n// fileCameraDragAreaPlaceHolder: \"Drag and drop or select a file to upload or take a photo using the camera.\" => \"Плъзнете и пуснете или изберете файл за качване или правене на снимка с помощта на камерата.\"\n// replaceFileCaption: \"Replace file\" => \"Заместване на файл\"\n\n\n/***/ }),\n\n/***/ \"./src/localization/catalan.ts\":\n/*!*************************************!*\\\n  !*** ./src/localization/catalan.ts ***!\n  \\*************************************/\n/*! exports provided: catalanSurveyStrings */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1848527__) {\n\n\"use strict\";\n__nested_webpack_require_1848527__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_1848527__.d(__nested_webpack_exports__, \"catalanSurveyStrings\", function() { return catalanSurveyStrings; });\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1848527__(/*! survey-core */ \"./src/entries/core.ts\");\n\nvar catalanSurveyStrings = {\n    pagePrevText: \"Anterior\",\n    pageNextText: \"Següent\",\n    completeText: \"Complet\",\n    previewText: \"Preestrena\",\n    editText: \"Editar\",\n    startSurveyText: \"Començar\",\n    otherItemText: \"Un altre (descrigui)\",\n    noneItemText: \"Cap\",\n    selectAllItemText: \"Selecciona-ho tot\",\n    progressText: \"Pàgina {0} de {1}\",\n    indexText: \"{0} de {1}\",\n    panelDynamicProgressText: \"{0} de {1}\",\n    panelDynamicTabTextFormat: \"Panell {panelIndex}\",\n    questionsProgressText: \"Respostes {0}/{1} preguntes\",\n    emptySurvey: \"No hi ha cap pàgina visible o pregunta a l'enquesta.\",\n    completingSurvey: \"Gràcies per completar l'enquesta!\",\n    completingSurveyBefore: \"Els nostres registres mostren que ja heu completat aquesta enquesta.\",\n    loadingSurvey: \"L'enquesta s'està carregant ...\",\n    placeholder: \"Selecciona ...\",\n    ratingOptionsCaption: \"Seleccionar...\",\n    value: \"valor\",\n    requiredError: \"Si us plau contesti la pregunta.\",\n    requiredErrorInPanel: \"Resposta necessària: respondre almenys una pregunta.\",\n    requiredInAllRowsError: \"Si us plau contesti les preguntes de cada filera.\",\n    numericError: \"L'estimació ha de ser numèrica.\",\n    minError: \"El valor no ha de ser inferior a {0}\",\n    maxError: \"El valor no ha de ser superior a {0}\",\n    textMinLength: \"Si us plau entre almenys {0} símbols.\",\n    textMaxLength: \"Si us plau entre menys de {0} símbols.\",\n    textMinMaxLength: \"Si us plau entre més de {0} i menys de {1} símbols.\",\n    minRowCountError: \"Si us plau ompli almenys {0} fileres.\",\n    minSelectError: \"Si us plau seleccioni almenys {0} variants.\",\n    maxSelectError: \"Si us plau seleccioni no més de {0} variants.\",\n    numericMinMax: \"El '{0}' deu ser igual o més de {1} i igual o menys de {2}\",\n    numericMin: \"El '{0}' ha de ser igual o més de {1}\",\n    numericMax: \"El '{0}' ha de ser igual o menys de {1}\",\n    invalidEmail: \"Si us plau afegiu un correu electrònic vàlid.\",\n    invalidExpression: \"L'expressió: {0} ha de tornar 'veritable'.\",\n    urlRequestError: \"La sol·licitud va tornar error '{0}'. {1}\",\n    urlGetChoicesError: \"La sol·licitud va tornar buida de dates o la propietat 'trajectòria' no és correcta\",\n    exceedMaxSize: \"La mida de l'arxiu no pot excedir {0}.\",\n    otherRequiredError: \"Si us plau afegiu l'altra estimació.\",\n    uploadingFile: \"El seu arxiu s'està pujant. Si us plau esperi uns segons i intenteu-ho de nou.\",\n    loadingFile: \"Càrrega...\",\n    chooseFile: \"Trieu fitxer(s)...\",\n    noFileChosen: \"No s'ha triat cap fitxer\",\n    fileDragAreaPlaceholder: \"Arrossegueu i deixeu anar un fitxer aquí o feu clic al botó següent i trieu un fitxer per carregar.\",\n    confirmDelete: \"Vols eliminar el registre?\",\n    keyDuplicationError: \"Aquest valor ha de ser únic.\",\n    addColumn: \"Afegeix una columna\",\n    addRow: \"Afegiu una filera\",\n    removeRow: \"Eliminar una filera\",\n    emptyRowsText: \"No hi ha files.\",\n    addPanel: \"Afegeix un nou\",\n    removePanel: \"Treure\",\n    choices_Item: \"ítem\",\n    matrix_column: \"Columna\",\n    matrix_row: \"Filera\",\n    multipletext_itemname: \"SMS\",\n    savingData: \"Els resultats s'estan guardant al servidor...\",\n    savingDataError: \"S'ha produït un error i no hem pogut guardar els resultats.\",\n    savingDataSuccess: \"Els resultats es van salvar amb èxit!\",\n    saveAgainButton: \"Prova una altra vegada\",\n    timerMin: \"min\",\n    timerSec: \"Seg\",\n    timerSpentAll: \"Heu passat {0} en aquesta pàgina i {1} en total.\",\n    timerSpentPage: \"Has passat {0} en aquesta pàgina.\",\n    timerSpentSurvey: \"Has gastat {0} en total.\",\n    timerLimitAll: \"Heu passat {0} de {1} en aquesta pàgina i {2} de {3} en total.\",\n    timerLimitPage: \"Has passat {0} de {1} en aquesta pàgina.\",\n    timerLimitSurvey: \"Has gastat {0} d'{1} en total.\",\n    clearCaption: \"Clar\",\n    signaturePlaceHolder: \"Inscriu-te aquí\",\n    chooseFileCaption: \"Tria un fitxer\",\n    takePhotoCaption: \"Fer foto\",\n    cameraPlaceHolder: \"Feu clic al botó següent per fer una foto amb la càmera.\",\n    fileCameraDragAreaPlaceHolder: \"Arrossegueu i deixeu anar o seleccioneu un fitxer per penjar-lo o fer-ne una foto amb la càmera.\",\n    replaceFileCaption: \"Substitueix el fitxer\",\n    removeFileCaption: \"Suprimeix aquest fitxer\",\n    booleanCheckedLabel: \"Sí\",\n    booleanUncheckedLabel: \"No\",\n    confirmRemoveFile: \"Esteu segur que voleu eliminar aquest fitxer: {0}?\",\n    confirmRemoveAllFiles: \"Esteu segur que voleu eliminar tots els fitxers?\",\n    questionTitlePatternText: \"Títol de la pregunta\",\n    modalCancelButtonText: \"Cancel·lar\",\n    modalApplyButtonText: \"Aplicar\",\n    filterStringPlaceholder: \"Escriviu per cercar...\",\n    emptyMessage: \"No hi ha dades per mostrar\",\n    noEntriesText: \"Encara no hi ha entrades.\\nFeu clic al botó següent per afegir una entrada nova.\",\n    noEntriesReadonlyText: \"No hi ha entrades.\",\n    more: \"Més\",\n    tagboxDoneButtonCaption: \"D'ACORD\",\n    selectToRankEmptyRankedAreaText: \"Totes les opcions estan classificades\",\n    selectToRankEmptyUnrankedAreaText: \"Arrossegueu i deixeu anar les opcions aquí per classificar-les\"\n};\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"ca\"] = catalanSurveyStrings;\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"ca\"] = \"català\";\n// The following strings have been translated by a machine translation service\n// Remove those strings that you have corrected manually\n// previewText: \"Preview\" => \"Preestrena\"\n// editText: \"Edit\" => \"Editar\"\n// startSurveyText: \"Start\" => \"Començar\"\n// noneItemText: \"None\" => \"Cap\"\n// selectAllItemText: \"Select All\" => \"Selecciona-ho tot\"\n// indexText: \"{0} of {1}\" => \"{0} de {1}\"\n// panelDynamicProgressText: \"{0} of {1}\" => \"{0} de {1}\"\n// panelDynamicTabTextFormat: \"Panel {panelIndex}\" => \"Panell {panelIndex}\"\n// questionsProgressText: \"Answered {0}/{1} questions\" => \"Respostes {0}/{1} preguntes\"\n// completingSurveyBefore: \"Our records show that you have already completed this survey.\" => \"Els nostres registres mostren que ja heu completat aquesta enquesta.\"\n// ratingOptionsCaption: \"Select...\" => \"Seleccionar...\"\n// value: \"value\" => \"valor\"\n// requiredErrorInPanel: \"Response required: answer at least one question.\" => \"Resposta necessària: respondre almenys una pregunta.\"\n// minError: \"The value should not be less than {0}\" => \"El valor no ha de ser inferior a {0}\"\n// maxError: \"The value should not be greater than {0}\" => \"El valor no ha de ser superior a {0}\"\n// invalidExpression: \"The expression: {0} should return 'true'.\" => \"L'expressió: {0} ha de tornar 'veritable'.\"\n// loadingFile: \"Loading...\" => \"Càrrega...\"\n// chooseFile: \"Choose file(s)...\" => \"Trieu fitxer(s)...\"\n// noFileChosen: \"No file chosen\" => \"No s'ha triat cap fitxer\"\n// fileDragAreaPlaceholder: \"Drag and drop a file here or click the button below and choose a file to upload.\" => \"Arrossegueu i deixeu anar un fitxer aquí o feu clic al botó següent i trieu un fitxer per carregar.\"\n// confirmDelete: \"Do you want to delete the record?\" => \"Vols eliminar el registre?\"\n// keyDuplicationError: \"This value should be unique.\" => \"Aquest valor ha de ser únic.\"\n// addColumn: \"Add Column\" => \"Afegeix una columna\"\n// emptyRowsText: \"There are no rows.\" => \"No hi ha files.\"\n// addPanel: \"Add new\" => \"Afegeix un nou\"\n// removePanel: \"Remove\" => \"Treure\"\n// choices_Item: \"item\" => \"ítem\"\n// multipletext_itemname: \"text\" => \"SMS\"\n// savingData: \"The results are being saved on the server...\" => \"Els resultats s'estan guardant al servidor...\"\n// savingDataError: \"An error occurred and we could not save the results.\" => \"S'ha produït un error i no hem pogut guardar els resultats.\"\n// savingDataSuccess: \"The results were saved successfully!\" => \"Els resultats es van salvar amb èxit!\"\n// saveAgainButton: \"Try again\" => \"Prova una altra vegada\"\n// timerMin: \"min\" => \"min\"\n// timerSec: \"sec\" => \"Seg\"\n// timerSpentAll: \"You have spent {0} on this page and {1} in total.\" => \"Heu passat {0} en aquesta pàgina i {1} en total.\"\n// timerSpentPage: \"You have spent {0} on this page.\" => \"Has passat {0} en aquesta pàgina.\"\n// timerSpentSurvey: \"You have spent {0} in total.\" => \"Has gastat {0} en total.\"\n// timerLimitAll: \"You have spent {0} of {1} on this page and {2} of {3} in total.\" => \"Heu passat {0} de {1} en aquesta pàgina i {2} de {3} en total.\"\n// timerLimitPage: \"You have spent {0} of {1} on this page.\" => \"Has passat {0} de {1} en aquesta pàgina.\"\n// timerLimitSurvey: \"You have spent {0} of {1} in total.\" => \"Has gastat {0} d'{1} en total.\"\n// clearCaption: \"Clear\" => \"Clar\"\n// signaturePlaceHolder: \"Sign here\" => \"Inscriu-te aquí\"\n// chooseFileCaption: \"Choose file\" => \"Tria un fitxer\"\n// removeFileCaption: \"Remove this file\" => \"Suprimeix aquest fitxer\"\n// booleanCheckedLabel: \"Yes\" => \"Sí\"\n// booleanUncheckedLabel: \"No\" => \"No\"\n// confirmRemoveFile: \"Are you sure that you want to remove this file: {0}?\" => \"Esteu segur que voleu eliminar aquest fitxer: {0}?\"\n// confirmRemoveAllFiles: \"Are you sure that you want to remove all files?\" => \"Esteu segur que voleu eliminar tots els fitxers?\"\n// questionTitlePatternText: \"Question Title\" => \"Títol de la pregunta\"\n// modalCancelButtonText: \"Cancel\" => \"Cancel·lar\"\n// modalApplyButtonText: \"Apply\" => \"Aplicar\"\n// filterStringPlaceholder: \"Type to search...\" => \"Escriviu per cercar...\"\n// emptyMessage: \"No data to display\" => \"No hi ha dades per mostrar\"\n// noEntriesText: \"There are no entries yet.\\nClick the button below to add a new entry.\" => \"Encara no hi ha entrades.\\nFeu clic al botó següent per afegir una entrada nova.\"\n// noEntriesReadonlyText: \"There are no entries.\" => \"No hi ha entrades.\"\n// more: \"More\" => \"Més\"\n// tagboxDoneButtonCaption: \"OK\" => \"D'ACORD\"\n// selectToRankEmptyRankedAreaText: \"All choices are ranked\" => \"Totes les opcions estan classificades\"\n// selectToRankEmptyUnrankedAreaText: \"Drag and drop choices here to rank them\" => \"Arrossegueu i deixeu anar les opcions aquí per classificar-les\"// takePhotoCaption: \"Take Photo\" => \"Fer foto\"\n// cameraPlaceHolder: \"Click the button below to take a photo using the camera.\" => \"Feu clic al botó següent per fer una foto amb la càmera.\"\n// fileCameraDragAreaPlaceHolder: \"Drag and drop or select a file to upload or take a photo using the camera.\" => \"Arrossegueu i deixeu anar o seleccioneu un fitxer per penjar-lo o fer-ne una foto amb la càmera.\"\n// replaceFileCaption: \"Replace file\" => \"Substitueix el fitxer\"\n\n\n/***/ }),\n\n/***/ \"./src/localization/croatian.ts\":\n/*!**************************************!*\\\n  !*** ./src/localization/croatian.ts ***!\n  \\**************************************/\n/*! exports provided: croatianStrings */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1859629__) {\n\n\"use strict\";\n__nested_webpack_require_1859629__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_1859629__.d(__nested_webpack_exports__, \"croatianStrings\", function() { return croatianStrings; });\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1859629__(/*! survey-core */ \"./src/entries/core.ts\");\n\nvar croatianStrings = {\n    pagePrevText: \"Prethodni\",\n    pageNextText: \"Sljedeći\",\n    completeText: \"Kompletan\",\n    previewText: \"Pregled\",\n    editText: \"Uređivanje\",\n    startSurveyText: \"Početak\",\n    otherItemText: \"Ostali (opis)\",\n    noneItemText: \"Nitko\",\n    selectAllItemText: \"Select All\",\n    progressText: \"Stranica {0} od {1}\",\n    indexText: \"{0} {1}\",\n    panelDynamicProgressText: \"Zapisa {0} od {1}\",\n    panelDynamicTabTextFormat: \"Ploča {panelIndex}\",\n    questionsProgressText: \"Odgovorio na {0}/{1} pitanja\",\n    emptySurvey: \"U anketi nema vidljive stranice ili pitanja.\",\n    completingSurvey: \"Hvala vam što ste završili anketu!\",\n    completingSurveyBefore: \"Naši zapisi pokazuju da ste već završili ovu anketu.\",\n    loadingSurvey: \"Anketa o učitavanje...\",\n    placeholder: \"Odaberite...\",\n    ratingOptionsCaption: \"Odabirati...\",\n    value: \"vrijednost\",\n    requiredError: \"Molim vas odgovorite na pitanje.\",\n    requiredErrorInPanel: \"Molim vas odgovorite na barem jedno pitanje.\",\n    requiredInAllRowsError: \"Odgovorite na pitanja u svim redovima.\",\n    numericError: \"Vrijednost bi trebala biti brojčana.\",\n    minError: \"Vrijednost ne smije biti manja od {0}\",\n    maxError: \"Vrijednost ne smije biti veća od {0}\",\n    textMinLength: \"Unesite najmanje {0} znak(ova).\",\n    textMaxLength: \"Unesite manje od {0} znak(ova).\",\n    textMinMaxLength: \"Unesite više od {0} i manje od {1} znakova.\",\n    minRowCountError: \"Molimo ispunite najmanje {0} redaka.\",\n    minSelectError: \"Odaberite barem {0} varijante.\",\n    maxSelectError: \"Odaberite ne više od {0} varijanti.\",\n    numericMinMax: \"'{0}'bi trebao biti jednak ili više od {1} i jednak ili manji od {2}.\",\n    numericMin: \"'{0}' bi trebao biti jednak ili više od {1}.\",\n    numericMax: \"'{0}' bi trebao biti jednak ili manji od {1}\",\n    invalidEmail: \"Unesite valjanu e-mail adresu.\",\n    invalidExpression: \"Izraz: {0} treba vratiti 'true'.\",\n    urlRequestError: \"Zahtjev vratio pogrešku '{0}'. {1}\",\n    urlGetChoicesError: \"Zahtjev je vratio prazne podatke ili je 'path' svojstvo netočna.\",\n    exceedMaxSize: \"Veličina datoteke ne smije prelaziti {0}.\",\n    otherRequiredError: \"Unesite drugu vrijednost.\",\n    uploadingFile: \"Vaša datoteka se prenosi. Pričekajte nekoliko sekundi i pokušajte ponovno.\",\n    loadingFile: \"Učitavanje...\",\n    chooseFile: \"Odaberite datoteku...\",\n    noFileChosen: \"Nije odabrana datoteka\",\n    fileDragAreaPlaceholder: \"Povucite i ispustite datoteku ovdje ili kliknite donji gumb i odaberite datoteku koju želite prenijeti.\",\n    confirmDelete: \"Želite li izbrisati zapis?\",\n    keyDuplicationError: \"Ta bi vrijednost trebala biti jedinstvena.\",\n    addColumn: \"Dodavanje stupca\",\n    addRow: \"Dodavanje redaka\",\n    removeRow: \"Ukloniti\",\n    emptyRowsText: \"Nema redova.\",\n    addPanel: \"Dodavanje novih\",\n    removePanel: \"Ukloniti\",\n    choices_Item: \"stavku\",\n    matrix_column: \"Stupca\",\n    matrix_row: \"Redak\",\n    multipletext_itemname: \"Tekstualna poruka\",\n    savingData: \"Rezultati se spremaju na poslužitelju...\",\n    savingDataError: \"Došlo je do pogreške i nismo mogli spremiti rezultate.\",\n    savingDataSuccess: \"Rezultati su uspješno spremljeni!\",\n    saveAgainButton: \"Pokušaj ponovo\",\n    timerMin: \"min\",\n    timerSec: \"sec\",\n    timerSpentAll: \"Vi ste proveli {0} na ovoj stranici i {1} ukupno.\",\n    timerSpentPage: \"Potrošili ste {0} na ovu stranicu.\",\n    timerSpentSurvey: \"You have spent {0} in total. {0}.\",\n    timerLimitAll: \"Vi ste proveli {0} od {1} na ovoj stranici i {2} od {3} ukupno.\",\n    timerLimitPage: \"Potrošio si {0} od {1} na ovoj stranici.\",\n    timerLimitSurvey: \"Ukupno ste potrošili {0} od {1}.\",\n    clearCaption: \"Očistiti\",\n    signaturePlaceHolder: \"Potpiši ovdje\",\n    chooseFileCaption: \"Odaberite datoteku\",\n    takePhotoCaption: \"Snimi fotografiju\",\n    cameraPlaceHolder: \"Kliknite donji gumb da biste snimili fotografiju pomoću kamere.\",\n    fileCameraDragAreaPlaceHolder: \"Povucite i ispustite ili odaberite datoteku za prijenos ili snimanje fotografije pomoću kamere.\",\n    replaceFileCaption: \"Zamijeni datoteku\",\n    removeFileCaption: \"Uklonite ovu datoteku\",\n    booleanCheckedLabel: \"Da\",\n    booleanUncheckedLabel: \"Ne\",\n    confirmRemoveFile: \"Jeste li sigurni da želite ukloniti ovu datoteku: {0}?\",\n    confirmRemoveAllFiles: \"Jeste li sigurni da želite ukloniti sve datoteke?\",\n    questionTitlePatternText: \"Naslov pitanja\",\n    modalCancelButtonText: \"Otkazati\",\n    modalApplyButtonText: \"Primijeniti\",\n    filterStringPlaceholder: \"Upišite za pretraživanje...\",\n    emptyMessage: \"Nema podataka za prikaz\",\n    noEntriesText: \"Još nema unosa.\\nKliknite donji gumb da biste dodali novi unos.\",\n    noEntriesReadonlyText: \"Nema unosa.\",\n    more: \"Više\",\n    tagboxDoneButtonCaption: \"OK\",\n    selectToRankEmptyRankedAreaText: \"Svi izbori su rangirani\",\n    selectToRankEmptyUnrankedAreaText: \"Ovdje povucite i ispustite odabire da biste ih rangirali\"\n};\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"hr\"] = croatianStrings;\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"hr\"] = \"hrvatski\";\n// The following strings have been translated by a machine translation service\n// Remove those strings that you have corrected manually\n// indexText: \"{0} of {1}\" => \"{0} {1}\"\n// panelDynamicTabTextFormat: \"Panel {panelIndex}\" => \"Ploča {panelIndex}\"\n// ratingOptionsCaption: \"Select...\" => \"Odabirati...\"\n// minError: \"The value should not be less than {0}\" => \"Vrijednost ne smije biti manja od {0}\"\n// maxError: \"The value should not be greater than {0}\" => \"Vrijednost ne smije biti veća od {0}\"\n// fileDragAreaPlaceholder: \"Drag and drop a file here or click the button below and choose a file to upload.\" => \"Povucite i ispustite datoteku ovdje ili kliknite donji gumb i odaberite datoteku koju želite prenijeti.\"\n// emptyRowsText: \"There are no rows.\" => \"Nema redova.\"\n// multipletext_itemname: \"text\" => \"Tekstualna poruka\"\n// signaturePlaceHolder: \"Sign here\" => \"Potpiši ovdje\"\n// filterStringPlaceholder: \"Type to search...\" => \"Upišite za pretraživanje...\"\n// emptyMessage: \"No data to display\" => \"Nema podataka za prikaz\"\n// noEntriesText: \"There are no entries yet.\\nClick the button below to add a new entry.\" => \"Još nema unosa.\\nKliknite donji gumb da biste dodali novi unos.\"\n// noEntriesReadonlyText: \"There are no entries.\" => \"Nema unosa.\"\n// more: \"More\" => \"Više\"\n// tagboxDoneButtonCaption: \"OK\" => \"OK\"\n// selectToRankEmptyRankedAreaText: \"All choices are ranked\" => \"Svi izbori su rangirani\"\n// selectToRankEmptyUnrankedAreaText: \"Drag and drop choices here to rank them\" => \"Ovdje povucite i ispustite odabire da biste ih rangirali\"// takePhotoCaption: \"Take Photo\" => \"Snimi fotografiju\"\n// cameraPlaceHolder: \"Click the button below to take a photo using the camera.\" => \"Kliknite donji gumb da biste snimili fotografiju pomoću kamere.\"\n// fileCameraDragAreaPlaceHolder: \"Drag and drop or select a file to upload or take a photo using the camera.\" => \"Povucite i ispustite ili odaberite datoteku za prijenos ili snimanje fotografije pomoću kamere.\"\n// replaceFileCaption: \"Replace file\" => \"Zamijeni datoteku\"\n\n\n/***/ }),\n\n/***/ \"./src/localization/czech.ts\":\n/*!***********************************!*\\\n  !*** ./src/localization/czech.ts ***!\n  \\***********************************/\n/*! exports provided: czechSurveyStrings */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1867429__) {\n\n\"use strict\";\n__nested_webpack_require_1867429__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_1867429__.d(__nested_webpack_exports__, \"czechSurveyStrings\", function() { return czechSurveyStrings; });\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1867429__(/*! survey-core */ \"./src/entries/core.ts\");\n\nvar czechSurveyStrings = {\n    pagePrevText: \"Předchozí\",\n    pageNextText: \"Další\",\n    completeText: \"Dokončit\",\n    previewText: \"Náhled\",\n    editText: \"Upravit\",\n    startSurveyText: \"Začít\",\n    otherItemText: \"Jiná odpověď (napište)\",\n    noneItemText: \"Žádný\",\n    selectAllItemText: \"Vybrat vše\",\n    progressText: \"Strana {0} z {1}\",\n    indexText: \"{0} z {1}\",\n    panelDynamicProgressText: \"Záznam {0} z {1}\",\n    panelDynamicTabTextFormat: \"Panel {panelIndex}\",\n    questionsProgressText: \"Zodpovězené otázky: {0} / {1}\",\n    emptySurvey: \"Průzkum neobsahuje žádné otázky.\",\n    completingSurvey: \"Děkujeme za vyplnění průzkumu!\",\n    completingSurveyBefore: \"Naše záznamy ukazují, že jste tento průzkum již dokončil/a.\",\n    loadingSurvey: \"Probíhá načítání průzkumu...\",\n    placeholder: \"Vyberte...\",\n    ratingOptionsCaption: \"Vybrat...\",\n    value: \"hodnota\",\n    requiredError: \"Odpovězte prosím na otázku.\",\n    requiredErrorInPanel: \"Odpovězte prosím alespoň jednu otázku.\",\n    requiredInAllRowsError: \"Odpovězte prosím na všechny otázky.\",\n    numericError: \"V tomto poli lze zadat pouze čísla.\",\n    minError: \"Hodnota by neměla být menší než {0}\",\n    maxError: \"Hodnota by neměla být větší než {0}\",\n    textMinLength: \"Zadejte prosím alespoň {0} znaků.\",\n    textMaxLength: \"Zadejte prosím méně než {0} znaků.\",\n    textMinMaxLength: \"Zadejte prosím více než {0} a méně než {1} znaků.\",\n    minRowCountError: \"Vyplňte prosím alespoň {0} řádků.\",\n    minSelectError: \"Vyberte prosím alespoň {0} varianty.\",\n    maxSelectError: \"Nevybírejte prosím více než {0} variant.\",\n    numericMinMax: \"Odpověď '{0}' by mělo být větší nebo rovno {1} a menší nebo rovno {2}\",\n    numericMin: \"Odpověď '{0}' by mělo být větší nebo rovno {1}\",\n    numericMax: \"Odpověď '{0}' by mělo být menší nebo rovno {1}\",\n    invalidEmail: \"Zadejte prosím platnou e-mailovou adresu.\",\n    invalidExpression: \"Výraz: {0} by měl vrátit hodnotu „true“.\",\n    urlRequestError: \"Požadavek vrátil chybu '{0}'. {1}\",\n    urlGetChoicesError: \"Požadavek nevrátil data nebo je neplatná vlastnost 'path'\",\n    exceedMaxSize: \"Velikost souboru by neměla být větší než {0}.\",\n    otherRequiredError: \"Zadejte prosím jinou hodnotu.\",\n    uploadingFile: \"Váš soubor se nahrává. Zkuste to prosím za několik sekund.\",\n    loadingFile: \"Načítání...\",\n    chooseFile: \"Vyberte soubory...\",\n    noFileChosen: \"Není zvolený žádný soubor\",\n    fileDragAreaPlaceholder: \"Přetáhněte sem soubor nebo klikněte na tlačítko níže a vyberte soubor, který chcete nahrát.\",\n    confirmDelete: \"Chcete záznam smazat?\",\n    keyDuplicationError: \"Tato hodnota by měla být unikátní.\",\n    addColumn: \"Přidat sloupec\",\n    addRow: \"Přidat řádek\",\n    removeRow: \"Odstranit\",\n    emptyRowsText: \"Neexistují žádné řádky.\",\n    addPanel: \"Přidat nový\",\n    removePanel: \"Odstranit\",\n    choices_Item: \"položka\",\n    matrix_column: \"Sloupec\",\n    matrix_row: \"Řádek\",\n    multipletext_itemname: \"Text\",\n    savingData: \"Výsledky se ukládají na server...\",\n    savingDataError: \"Došlo k chybě a výsledky jsme nemohli uložit.\",\n    savingDataSuccess: \"Výsledky byly úspěšně uloženy!\",\n    saveAgainButton: \"Zkuste to znovu\",\n    timerMin: \"min\",\n    timerSec: \"sek\",\n    timerSpentAll: \"Na této stránce jste strávil/a celkem {0} z {1}.\",\n    timerSpentPage: \"Na této stránce jste strávil/a {0}.\",\n    timerSpentSurvey: \"Celkem jste strávil/a {0}.\",\n    timerLimitAll: \"Na této stránce jste strávil/a {0} z {1} a celkem {2} z {3}.\",\n    timerLimitPage: \"Na této stránce jste strávil/a {0} z {1}.\",\n    timerLimitSurvey: \"Celkově jste strávil/a {0} z {1}.\",\n    clearCaption: \"Vymazat\",\n    signaturePlaceHolder: \"Podepište se zde\",\n    chooseFileCaption: \"Vyberte soubor\",\n    takePhotoCaption: \"Pořídit fotografii\",\n    cameraPlaceHolder: \"Kliknutím na tlačítko níže pořídíte fotografii pomocí fotoaparátu.\",\n    fileCameraDragAreaPlaceHolder: \"Přetáhněte nebo vyberte soubor, který chcete nahrát nebo pořiďte fotografii pomocí fotoaparátu.\",\n    replaceFileCaption: \"Nahradit soubor\",\n    removeFileCaption: \"Odeberte tento soubor\",\n    booleanCheckedLabel: \"Ano\",\n    booleanUncheckedLabel: \"Ne\",\n    confirmRemoveFile: \"Opravdu chcete odebrat tento soubor: {0}?\",\n    confirmRemoveAllFiles: \"Opravdu chcete odstranit všechny soubory?\",\n    questionTitlePatternText: \"Název otázky\",\n    modalCancelButtonText: \"Zrušit\",\n    modalApplyButtonText: \"Použít\",\n    filterStringPlaceholder: \"Zadejte hledaný text...\",\n    emptyMessage: \"Žádná data k zobrazení\",\n    noEntriesText: \"Zatím nejsou žádné záznamy.\\nKliknutím na tlačítko níže přidáte novou položku.\",\n    noEntriesReadonlyText: \"Nejsou zde žádné položky.\",\n    more: \"Více\",\n    tagboxDoneButtonCaption: \"OK\",\n    selectToRankEmptyRankedAreaText: \"Všechny možnosti jsou seřazeny\",\n    selectToRankEmptyUnrankedAreaText: \"Přetáhněte volby zde a seřaďte je\"\n};\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"cs\"] = czechSurveyStrings;\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"cs\"] = \"čeština\";\n// The following strings have been translated by a machine translation service\n// Remove those strings that you have corrected manually\n// indexText: \"{0} of {1}\" => \"{0} z {1}\"\n// panelDynamicTabTextFormat: \"Panel {panelIndex}\" => \"Panel {panelIndex}\"\n// ratingOptionsCaption: \"Select...\" => \"Vybrat...\"\n// minError: \"The value should not be less than {0}\" => \"Hodnota by neměla být menší než {0}\"\n// maxError: \"The value should not be greater than {0}\" => \"Hodnota by neměla být větší než {0}\"\n// fileDragAreaPlaceholder: \"Drag and drop a file here or click the button below and choose a file to upload.\" => \"Přetáhněte sem soubor nebo klikněte na tlačítko níže a vyberte soubor, který chcete nahrát.\"\n// emptyRowsText: \"There are no rows.\" => \"Neexistují žádné řádky.\"\n// multipletext_itemname: \"text\" => \"Text\"\n// signaturePlaceHolder: \"Sign here\" => \"Podepište se zde\"\n// modalCancelButtonText: \"Cancel\" => \"Zrušit\"\n// modalApplyButtonText: \"Apply\" => \"Použít\"\n// filterStringPlaceholder: \"Type to search...\" => \"Zadejte hledaný text...\"\n// emptyMessage: \"No data to display\" => \"Žádná data k zobrazení\"\n// noEntriesText: \"There are no entries yet.\\nClick the button below to add a new entry.\" => \"Zatím nejsou žádné záznamy.\\nKliknutím na tlačítko níže přidáte novou položku.\"\n// noEntriesReadonlyText: \"There are no entries.\" => \"Nejsou zde žádné položky.\"\n// more: \"More\" => \"Více\"\n// tagboxDoneButtonCaption: \"OK\" => \"OK\"\n// selectToRankEmptyRankedAreaText: \"All choices are ranked\" => \"Všechny možnosti jsou seřazeny\"\n// selectToRankEmptyUnrankedAreaText: \"Drag and drop choices here to rank them\" => \"Přetáhněte volby zde a seřaďte je\"// takePhotoCaption: \"Take Photo\" => \"Pořídit fotografii\"\n// cameraPlaceHolder: \"Click the button below to take a photo using the camera.\" => \"Kliknutím na tlačítko níže pořídíte fotografii pomocí fotoaparátu.\"\n// fileCameraDragAreaPlaceHolder: \"Drag and drop or select a file to upload or take a photo using the camera.\" => \"Přetáhněte nebo vyberte soubor, který chcete nahrát nebo pořiďte fotografii pomocí fotoaparátu.\"\n// replaceFileCaption: \"Replace file\" => \"Nahradit soubor\"\n\n\n/***/ }),\n\n/***/ \"./src/localization/danish.ts\":\n/*!************************************!*\\\n  !*** ./src/localization/danish.ts ***!\n  \\************************************/\n/*! exports provided: danishSurveyStrings */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1875245__) {\n\n\"use strict\";\n__nested_webpack_require_1875245__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_1875245__.d(__nested_webpack_exports__, \"danishSurveyStrings\", function() { return danishSurveyStrings; });\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1875245__(/*! survey-core */ \"./src/entries/core.ts\");\n\nvar danishSurveyStrings = {\n    pagePrevText: \"Tilbage\",\n    pageNextText: \"Videre\",\n    completeText: \"Færdig\",\n    previewText: \"Forpremiere\",\n    editText: \"Redigér\",\n    startSurveyText: \"Start\",\n    otherItemText: \"Valgfrit svar...\",\n    noneItemText: \"Ingen\",\n    selectAllItemText: \"Vælg alle\",\n    progressText: \"Side {0} af {1}\",\n    indexText: \"{0} af {1}\",\n    panelDynamicProgressText: \"Optag {0} af {1}\",\n    panelDynamicTabTextFormat: \"Panel {panelIndex}\",\n    questionsProgressText: \"Besvarede {0} / {1} spørgsmål\",\n    emptySurvey: \"Der er ingen synlige spørgsmål.\",\n    completingSurvey: \"Mange tak for din besvarelse!\",\n    completingSurveyBefore: \"Vores data viser at du allerede har gennemført dette spørgeskema.\",\n    loadingSurvey: \"Spørgeskemaet hentes fra serveren...\",\n    placeholder: \"Vælg...\",\n    ratingOptionsCaption: \"Markere...\",\n    value: \"værdi\",\n    requiredError: \"Besvar venligst spørgsmålet.\",\n    requiredErrorInPanel: \"Besvar venligst mindst ét spørgsmål.\",\n    requiredInAllRowsError: \"Besvar venligst spørgsmål i alle rækker.\",\n    numericError: \"Angiv et tal.\",\n    minError: \"Værdien bør ikke være mindre end {0}\",\n    maxError: \"Værdien bør ikke være større end {0}\",\n    textMinLength: \"Angiv mindst {0} tegn.\",\n    textMaxLength: \"Please enter less than {0} characters.\",\n    textMinMaxLength: \"Angiv mere end {0} og mindre end {1} tegn.\",\n    minRowCountError: \"Udfyld mindst {0} rækker.\",\n    minSelectError: \"Vælg venligst mindst {0} svarmulighed(er).\",\n    maxSelectError: \"Vælg venligst færre {0} svarmuligheder(er).\",\n    numericMinMax: \"'{0}' skal være lig med eller større end {1} og lig med eller mindre end {2}\",\n    numericMin: \"'{0}' skal være lig med eller større end {1}\",\n    numericMax: \"'{0}' skal være lig med eller mindre end {1}\",\n    invalidEmail: \"Angiv venligst en gyldig e-mail adresse.\",\n    invalidExpression: \"Udtrykket: {0} skal returnere 'true'.\",\n    urlRequestError: \"Forespørgslen returnerede fejlen '{0}'. {1}\",\n    urlGetChoicesError: \"Forespørgslen returnerede ingen data eller 'path' parameteren er forkert\",\n    exceedMaxSize: \"Filstørrelsen må ikke overstige {0}.\",\n    otherRequiredError: \"Angiv en værdi for dit valgfrie svar.\",\n    uploadingFile: \"Din fil bliver uploadet. Vent nogle sekunder og prøv eventuelt igen.\",\n    loadingFile: \"Indlæser...\",\n    chooseFile: \"Vælg fil(er)...\",\n    noFileChosen: \"Ingen fil er valgt\",\n    fileDragAreaPlaceholder: \"Træk og slip en fil her, eller klik på knappen nedenfor, og vælg en fil, der skal uploades.\",\n    confirmDelete: \"Vil du fjerne den?\",\n    keyDuplicationError: \"Denne værdi skal være unik.\",\n    addColumn: \"Tilføj kolonne\",\n    addRow: \"Tilføj række\",\n    removeRow: \"Fjern\",\n    emptyRowsText: \"Der er ingen rækker.\",\n    addPanel: \"Tilføj ny\",\n    removePanel: \"Fjern\",\n    choices_Item: \"valg\",\n    matrix_column: \"Kolonne\",\n    matrix_row: \"Række\",\n    multipletext_itemname: \"Tekst\",\n    savingData: \"Resultaterne bliver gemt på serveren...\",\n    savingDataError: \"Der opstod en fejl og vi kunne ikke gemme resultatet.\",\n    savingDataSuccess: \"Resultatet blev gemt!\",\n    saveAgainButton: \"Prøv igen\",\n    timerMin: \"min\",\n    timerSec: \"sek\",\n    timerSpentAll: \"Du har brugt {0} på denne side og {1} i alt.\",\n    timerSpentPage: \"Du har brugt {0} på denne side.\",\n    timerSpentSurvey: \"Du har brugt {0} i alt.\",\n    timerLimitAll: \"Du har brugt {0} af {1} på denne side og {2} af {3} i alt.\",\n    timerLimitPage: \"Du har brugt {0} af {1} på denne side.\",\n    timerLimitSurvey: \"Du har brugt {0} af {1} i alt.\",\n    clearCaption: \"Fjern\",\n    signaturePlaceHolder: \"Tilmeld dig her\",\n    chooseFileCaption: \"Vælg fil\",\n    takePhotoCaption: \"Tag billede\",\n    cameraPlaceHolder: \"Klik på knappen nedenfor for at tage et billede med kameraet.\",\n    fileCameraDragAreaPlaceHolder: \"Træk og slip, eller vælg en fil, der skal uploades, eller tag et billede med kameraet.\",\n    replaceFileCaption: \"Erstat fil\",\n    removeFileCaption: \"Fjern denne fil\",\n    booleanCheckedLabel: \"Ja\",\n    booleanUncheckedLabel: \"Ingen\",\n    confirmRemoveFile: \"Er du sikker på, at du vil fjerne denne fil: {0}?\",\n    confirmRemoveAllFiles: \"Er du sikker på, at du vil fjerne alle filer?\",\n    questionTitlePatternText: \"Spørgsmåls titel\",\n    modalCancelButtonText: \"Aflyse\",\n    modalApplyButtonText: \"Anvende\",\n    filterStringPlaceholder: \"Skriv for at søge...\",\n    emptyMessage: \"Ingen data at vise\",\n    noEntriesText: \"Der er endnu ingen tilmeldinger.\\nKlik på knappen nedenfor for at tilføje en ny post.\",\n    noEntriesReadonlyText: \"Der er ingen poster.\",\n    more: \"Mere\",\n    tagboxDoneButtonCaption: \"OK\",\n    selectToRankEmptyRankedAreaText: \"Alle valg er rangeret\",\n    selectToRankEmptyUnrankedAreaText: \"Træk og slip valg her for at rangere dem\"\n};\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"da\"] = danishSurveyStrings;\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"da\"] = \"dansk\";\n// The following strings have been translated by a machine translation service\n// Remove those strings that you have corrected manually\n// indexText: \"{0} of {1}\" => \"{0} af {1}\"\n// panelDynamicTabTextFormat: \"Panel {panelIndex}\" => \"Panel {panelIndex}\"\n// ratingOptionsCaption: \"Select...\" => \"Markere...\"\n// minError: \"The value should not be less than {0}\" => \"Værdien bør ikke være mindre end {0}\"\n// maxError: \"The value should not be greater than {0}\" => \"Værdien bør ikke være større end {0}\"\n// fileDragAreaPlaceholder: \"Drag and drop a file here or click the button below and choose a file to upload.\" => \"Træk og slip en fil her, eller klik på knappen nedenfor, og vælg en fil, der skal uploades.\"\n// emptyRowsText: \"There are no rows.\" => \"Der er ingen rækker.\"\n// multipletext_itemname: \"text\" => \"Tekst\"\n// signaturePlaceHolder: \"Sign here\" => \"Tilmeld dig her\"\n// modalCancelButtonText: \"Cancel\" => \"Aflyse\"\n// modalApplyButtonText: \"Apply\" => \"Anvende\"\n// filterStringPlaceholder: \"Type to search...\" => \"Skriv for at søge...\"\n// emptyMessage: \"No data to display\" => \"Ingen data at vise\"\n// noEntriesText: \"There are no entries yet.\\nClick the button below to add a new entry.\" => \"Der er endnu ingen tilmeldinger.\\nKlik på knappen nedenfor for at tilføje en ny post.\"\n// noEntriesReadonlyText: \"There are no entries.\" => \"Der er ingen poster.\"\n// more: \"More\" => \"Mere\"\n// tagboxDoneButtonCaption: \"OK\" => \"OK\"\n// selectToRankEmptyRankedAreaText: \"All choices are ranked\" => \"Alle valg er rangeret\"\n// selectToRankEmptyUnrankedAreaText: \"Drag and drop choices here to rank them\" => \"Træk og slip valg her for at rangere dem\"// takePhotoCaption: \"Take Photo\" => \"Tag billede\"\n// cameraPlaceHolder: \"Click the button below to take a photo using the camera.\" => \"Klik på knappen nedenfor for at tage et billede med kameraet.\"\n// fileCameraDragAreaPlaceHolder: \"Drag and drop or select a file to upload or take a photo using the camera.\" => \"Træk og slip, eller vælg en fil, der skal uploades, eller tag et billede med kameraet.\"\n// replaceFileCaption: \"Replace file\" => \"Erstat fil\"\n\n\n/***/ }),\n\n/***/ \"./src/localization/dutch.ts\":\n/*!***********************************!*\\\n  !*** ./src/localization/dutch.ts ***!\n  \\***********************************/\n/*! exports provided: dutchSurveyStrings */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1882950__) {\n\n\"use strict\";\n__nested_webpack_require_1882950__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_1882950__.d(__nested_webpack_exports__, \"dutchSurveyStrings\", function() { return dutchSurveyStrings; });\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1882950__(/*! survey-core */ \"./src/entries/core.ts\");\n\nvar dutchSurveyStrings = {\n    pagePrevText: \"Vorige\",\n    pageNextText: \"Volgende\",\n    completeText: \"Verzenden\",\n    previewText: \"Voorbeeld\",\n    editText: \"Bewerk\",\n    startSurveyText: \"Start\",\n    otherItemText: \"Anders, nl.\",\n    noneItemText: \"Geen\",\n    selectAllItemText: \"Selecteer Alles\",\n    progressText: \"Pagina {0} van {1}\",\n    indexText: \"{0} van {1}\",\n    panelDynamicProgressText: \"Record {0} of {1}\",\n    panelDynamicTabTextFormat: \"Paneel {panelIndex}\",\n    questionsProgressText: \"Geantwoord {0}/{1} vragen\",\n    emptySurvey: \"Er is geen zichtbare pagina of vraag in deze vragenlijst\",\n    completingSurvey: \"Bedankt voor het invullen van de vragenlijst\",\n    completingSurveyBefore: \"Onze gegevens tonen aan dat je deze vragenlijst reeds beantwoord hebt.\",\n    loadingSurvey: \"De vragenlijst is aan het laden...\",\n    placeholder: \"Kies...\",\n    ratingOptionsCaption: \"Selecteren...\",\n    value: \"waarde\",\n    requiredError: \"Dit is een vereiste vraag\",\n    requiredErrorInPanel: \"Gelieve ten minste een vraag te beantwoorden.\",\n    requiredInAllRowsError: \"Deze vraag vereist één antwoord per rij\",\n    numericError: \"Het antwoord moet een getal zijn\",\n    minError: \"De waarde mag niet lager zijn dan {0}\",\n    maxError: \"De waarde mag niet groter zijn dan {0}\",\n    textMinLength: \"Vul minstens {0} karakters in\",\n    textMaxLength: \"Gelieve minder dan {0} karakters in te vullen.\",\n    textMinMaxLength: \"Gelieve meer dan {0} en minder dan {1} karakters in te vullen.\",\n    minRowCountError: \"Gelieve ten minste {0} rijen in te vullen.\",\n    minSelectError: \"Selecteer minimum {0} antwoorden\",\n    maxSelectError: \"Selecteer niet meer dan {0} antwoorden\",\n    numericMinMax: \"Uw antwoord '{0}' moet groter of gelijk zijn aan {1} en kleiner of gelijk aan {2}\",\n    numericMin: \"Uw antwoord '{0}' moet groter of gelijk zijn aan {1}\",\n    numericMax: \"Uw antwoord '{0}' moet groter of gelijk zijn aan {1}\",\n    invalidEmail: \"Vul een geldig e-mailadres in\",\n    invalidExpression: \"De uitdrukking: {0} moet 'waar' teruggeven.\",\n    urlRequestError: \"De vraag keerde een fout terug '{0}'. {1}\",\n    urlGetChoicesError: \"De vraag gaf een leeg antwoord terug of de 'pad' eigenschap is niet correct\",\n    exceedMaxSize: \"De grootte van het bestand mag niet groter zijn dan {0}\",\n    otherRequiredError: \"Vul het veld 'Anders, nl.' in\",\n    uploadingFile: \"Uw bestand wordt geüpload. Gelieve enkele seconden te wachten en opnieuw te proberen.\",\n    loadingFile: \"Laden...\",\n    chooseFile: \"Kies uw bestand(en)...\",\n    noFileChosen: \"Geen bestand gekozen\",\n    fileDragAreaPlaceholder: \"Sleep het bestand naar hier\",\n    confirmDelete: \"Wilt u deze gegevens verwijderen?\",\n    keyDuplicationError: \"Deze waarde moet uniek zijn.\",\n    addColumn: \"Voeg kolom toe\",\n    addRow: \"Voeg rij toe\",\n    removeRow: \"Verwijder\",\n    emptyRowsText: \"Er zijn geen rijen.\",\n    addPanel: \"Nieuwe toevoegen\",\n    removePanel: \"Verwijder\",\n    choices_Item: \"onderwerp\",\n    matrix_column: \"Kolom\",\n    matrix_row: \"Rij\",\n    multipletext_itemname: \"Sms\",\n    savingData: \"De resultaten worden bewaard op de server...\",\n    savingDataError: \"Er was een probleem en we konden de resultaten niet bewaren.\",\n    savingDataSuccess: \"De resultaten werden succesvol bewaard!\",\n    saveAgainButton: \"Probeer opnieuw\",\n    timerMin: \"minimum\",\n    timerSec: \"sec\",\n    timerSpentAll: \"U heeft {0} gespendeerd op deze pagina en {1} in totaal.\",\n    timerSpentPage: \"U heeft {0} op deze pagina gespendeerd.\",\n    timerSpentSurvey: \"U heeft in totaal {0} gespendeerd.\",\n    timerLimitAll: \"U heeft {0} van {1} op deze pagina gespendeerd en {2} van {3} in totaal.\",\n    timerLimitPage: \"U heeft {0} van {1} gespendeerd op deze pagina.\",\n    timerLimitSurvey: \"U heeft {0} van {1} in het totaal.\",\n    clearCaption: \"Verwijder\",\n    signaturePlaceHolder: \"Hier tekenen\",\n    chooseFileCaption: \"Gekozen bestand\",\n    takePhotoCaption: \"Foto maken\",\n    cameraPlaceHolder: \"Klik op de onderstaande knop om een foto te maken met de camera.\",\n    fileCameraDragAreaPlaceHolder: \"Sleep en zet neer of selecteer een bestand om te uploaden of maak een foto met de camera.\",\n    replaceFileCaption: \"Bestand vervangen\",\n    removeFileCaption: \"Verwijder dit bestand\",\n    booleanCheckedLabel: \"Ja\",\n    booleanUncheckedLabel: \"Nee\",\n    confirmRemoveFile: \"Weet u zeker dat u deze file wilt verwijderen: {0}?\",\n    confirmRemoveAllFiles: \"Weet u zeker dat u al deze files wilt verwijderen?\",\n    questionTitlePatternText: \"Titel van de vraag\",\n    modalCancelButtonText: \"Annuleren\",\n    modalApplyButtonText: \"Toepassen\",\n    filterStringPlaceholder: \"Typ om te zoeken...\",\n    emptyMessage: \"Geen gegevens om weer te geven\",\n    noEntriesText: \"Er zijn nog geen inzendingen.\\nKlik op de onderstaande knop om een nieuw item toe te voegen.\",\n    noEntriesReadonlyText: \"Er zijn geen inzendingen.\",\n    more: \"Meer\",\n    tagboxDoneButtonCaption: \"OK\",\n    selectToRankEmptyRankedAreaText: \"Alle keuzes zijn gerangschikt\",\n    selectToRankEmptyUnrankedAreaText: \"Drag en drop keuzes hier om ze te rangschikken\"\n};\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"nl\"] = dutchSurveyStrings;\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"nl\"] = \"nederlands\";\n// The following strings have been translated by a machine translation service\n// Remove those strings that you have corrected manually\n// indexText: \"{0} of {1}\" => \"{0} van {1}\"\n// panelDynamicTabTextFormat: \"Panel {panelIndex}\" => \"Paneel {panelIndex}\"\n// ratingOptionsCaption: \"Select...\" => \"Selecteren...\"\n// minError: \"The value should not be less than {0}\" => \"De waarde mag niet lager zijn dan {0}\"\n// maxError: \"The value should not be greater than {0}\" => \"De waarde mag niet groter zijn dan {0}\"\n// emptyRowsText: \"There are no rows.\" => \"Er zijn geen rijen.\"\n// multipletext_itemname: \"text\" => \"Sms\"\n// modalCancelButtonText: \"Cancel\" => \"Annuleren\"\n// modalApplyButtonText: \"Apply\" => \"Toepassen\"\n// filterStringPlaceholder: \"Type to search...\" => \"Typ om te zoeken...\"\n// emptyMessage: \"No data to display\" => \"Geen gegevens om weer te geven\"\n// noEntriesText: \"There are no entries yet.\\nClick the button below to add a new entry.\" => \"Er zijn nog geen inzendingen.\\nKlik op de onderstaande knop om een nieuw item toe te voegen.\"\n// noEntriesReadonlyText: \"There are no entries.\" => \"Er zijn geen inzendingen.\"\n// more: \"More\" => \"Meer\"\n// tagboxDoneButtonCaption: \"OK\" => \"OK\"\n// selectToRankEmptyRankedAreaText: \"All choices are ranked\" => \"Alle keuzes zijn gerangschikt\"\n// selectToRankEmptyUnrankedAreaText: \"Drag and drop choices here to rank them\" => \"Drag en drop keuzes hier om ze te rangschikken\"// takePhotoCaption: \"Take Photo\" => \"Foto maken\"\n// cameraPlaceHolder: \"Click the button below to take a photo using the camera.\" => \"Klik op de onderstaande knop om een foto te maken met de camera.\"\n// fileCameraDragAreaPlaceHolder: \"Drag and drop or select a file to upload or take a photo using the camera.\" => \"Sleep en zet neer of selecteer een bestand om te uploaden of maak een foto met de camera.\"\n// replaceFileCaption: \"Replace file\" => \"Bestand vervangen\"\n\n\n/***/ }),\n\n/***/ \"./src/localization/english.ts\":\n/*!*************************************!*\\\n  !*** ./src/localization/english.ts ***!\n  \\*************************************/\n/*! exports provided: englishStrings */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1890756__) {\n\n\"use strict\";\n__nested_webpack_require_1890756__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_1890756__.d(__nested_webpack_exports__, \"englishStrings\", function() { return englishStrings; });\n// Uncomment the line below if you create a custom dictionary\n// import { surveyLocalization } from \"survey-core\";\nvar englishStrings = {\n    pagePrevText: \"Previous\",\n    pageNextText: \"Next\",\n    completeText: \"Complete\",\n    previewText: \"Preview\",\n    editText: \"Edit\",\n    startSurveyText: \"Start\",\n    otherItemText: \"Other (describe)\",\n    noneItemText: \"None\",\n    selectAllItemText: \"Select All\",\n    progressText: \"Page {0} of {1}\",\n    indexText: \"{0} of {1}\",\n    panelDynamicProgressText: \"{0} of {1}\",\n    panelDynamicTabTextFormat: \"Panel {panelIndex}\",\n    questionsProgressText: \"Answered {0}/{1} questions\",\n    emptySurvey: \"The survey doesn't contain visible pages or questions.\",\n    completingSurvey: \"Thank you for completing the survey\",\n    completingSurveyBefore: \"Our records show that you have already completed this survey.\",\n    loadingSurvey: \"Loading Survey...\",\n    placeholder: \"Select...\",\n    ratingOptionsCaption: \"Select...\",\n    value: \"value\",\n    requiredError: \"Response required.\",\n    requiredErrorInPanel: \"Response required: answer at least one question.\",\n    requiredInAllRowsError: \"Response required: answer questions in all rows.\",\n    numericError: \"The value should be numeric.\",\n    minError: \"The value should not be less than {0}\",\n    maxError: \"The value should not be greater than {0}\",\n    textMinLength: \"Please enter at least {0} character(s).\",\n    textMaxLength: \"Please enter no more than {0} character(s).\",\n    textMinMaxLength: \"Please enter at least {0} and no more than {1} characters.\",\n    minRowCountError: \"Please fill in at least {0} row(s).\",\n    minSelectError: \"Please select at least {0} variant(s).\",\n    maxSelectError: \"Please select no more than {0} variant(s).\",\n    numericMinMax: \"The '{0}' should be at least {1} and at most {2}\",\n    numericMin: \"The '{0}' should be at least {1}\",\n    numericMax: \"The '{0}' should be at most {1}\",\n    invalidEmail: \"Please enter a valid e-mail address.\",\n    invalidExpression: \"The expression: {0} should return 'true'.\",\n    urlRequestError: \"The request returned error '{0}'. {1}\",\n    urlGetChoicesError: \"The request returned empty data or the 'path' property is incorrect\",\n    exceedMaxSize: \"The file size should not exceed {0}.\",\n    otherRequiredError: \"Response required: enter another value.\",\n    uploadingFile: \"Your file is uploading. Please wait several seconds and try again.\",\n    loadingFile: \"Loading...\",\n    chooseFile: \"Choose file(s)...\",\n    noFileChosen: \"No file chosen\",\n    fileDragAreaPlaceholder: \"Drag and drop a file here or click the button below to select a file to upload.\",\n    confirmDelete: \"Do you want to delete the record?\",\n    keyDuplicationError: \"This value should be unique.\",\n    addColumn: \"Add Column\",\n    addRow: \"Add Row\",\n    removeRow: \"Remove\",\n    emptyRowsText: \"There are no rows.\",\n    addPanel: \"Add new\",\n    removePanel: \"Remove\",\n    choices_Item: \"item\",\n    matrix_column: \"Column\",\n    matrix_row: \"Row\",\n    multipletext_itemname: \"text\",\n    savingData: \"The results are being saved on the server...\",\n    savingDataError: \"An error occurred and we could not save the results.\",\n    savingDataSuccess: \"The results were saved successfully!\",\n    saveAgainButton: \"Try again\",\n    timerMin: \"min\",\n    timerSec: \"sec\",\n    timerSpentAll: \"You have spent {0} on this page and {1} in total.\",\n    timerSpentPage: \"You have spent {0} on this page.\",\n    timerSpentSurvey: \"You have spent {0} in total.\",\n    timerLimitAll: \"You have spent {0} of {1} on this page and {2} of {3} in total.\",\n    timerLimitPage: \"You have spent {0} of {1} on this page.\",\n    timerLimitSurvey: \"You have spent {0} of {1} in total.\",\n    clearCaption: \"Clear\",\n    signaturePlaceHolder: \"Sign here\",\n    chooseFileCaption: \"Select File\",\n    takePhotoCaption: \"Take Photo\",\n    cameraPlaceHolder: \"Click the button below to take a photo using the camera.\",\n    fileCameraDragAreaPlaceHolder: \"Drag and drop or select a file to upload or take a photo using the camera.\",\n    replaceFileCaption: \"Replace file\",\n    removeFileCaption: \"Remove this file\",\n    booleanCheckedLabel: \"Yes\",\n    booleanUncheckedLabel: \"No\",\n    confirmRemoveFile: \"Are you sure that you want to remove this file: {0}?\",\n    confirmRemoveAllFiles: \"Are you sure that you want to remove all files?\",\n    questionTitlePatternText: \"Question Title\",\n    modalCancelButtonText: \"Cancel\",\n    modalApplyButtonText: \"Apply\",\n    filterStringPlaceholder: \"Type to search...\",\n    emptyMessage: \"No data to display\",\n    noEntriesText: \"There are no entries yet.\\nClick the button below to add a new entry.\",\n    noEntriesReadonlyText: \"There are no entries.\",\n    more: \"More\",\n    tagboxDoneButtonCaption: \"OK\",\n    selectToRankEmptyRankedAreaText: \"All choices are ranked\",\n    selectToRankEmptyUnrankedAreaText: \"Drag and drop choices here to rank them\",\n};\n// Uncomment the lines below if you create a custom dictionary.\n// Replace \"en\" with a custom locale code (for example, \"fr\" or \"de\"),\n// Replace `englishStrings` with the name of the variable that contains the custom dictionary.\n// surveyLocalization.locales[\"en\"] = englishStrings;\n// surveyLocalization.localeNames[\"en\"] = \"English\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/estonian.ts\":\n/*!**************************************!*\\\n  !*** ./src/localization/estonian.ts ***!\n  \\**************************************/\n/*! exports provided: estonianSurveyStrings */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1896482__) {\n\n\"use strict\";\n__nested_webpack_require_1896482__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_1896482__.d(__nested_webpack_exports__, \"estonianSurveyStrings\", function() { return estonianSurveyStrings; });\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1896482__(/*! survey-core */ \"./src/entries/core.ts\");\n\nvar estonianSurveyStrings = {\n    pagePrevText: \"Tagasi\",\n    pageNextText: \"Edasi\",\n    completeText: \"Lõpeta\",\n    previewText: \"Eelvaade\",\n    editText: \"Muuda\",\n    startSurveyText: \"Alusta\",\n    otherItemText: \"Muu (täpsusta)\",\n    noneItemText: \"Mitte midagi\",\n    selectAllItemText: \"Vali kõik\",\n    progressText: \"Lehekülg {0}/{1}\",\n    indexText: \"{0} {1}\",\n    panelDynamicProgressText: \"Kirje {0}/{1}\",\n    panelDynamicTabTextFormat: \"Paneel {panelIndex}\",\n    questionsProgressText: \"Vastatud {0} küsimust {1}-st\",\n    emptySurvey: \"Selles uuringus ei ole ühtki nähtavat lehekülge või küsimust.\",\n    completingSurvey: \"Aitäh, et vastasid ankeedile!\",\n    completingSurveyBefore: \"Meie andmetel oled sa sellele ankeedile juba vastanud.\",\n    loadingSurvey: \"Laen ankeeti...\",\n    placeholder: \"Vali...\",\n    ratingOptionsCaption: \"Valima...\",\n    value: \"väärtus\",\n    requiredError: \"Palun vasta küsimusele.\",\n    requiredErrorInPanel: \"Palun vasta vähemalt ühele küsimusele.\",\n    requiredInAllRowsError: \"Palun anna vastus igal real.\",\n    numericError: \"See peaks olema numbriline väärtus.\",\n    minError: \"Väärtus ei tohiks olla väiksem kui {0}\",\n    maxError: \"Väärtus ei tohiks olla suurem kui {0}\",\n    textMinLength: \"Palun sisesta vähemalt {0} tähemärki.\",\n    textMaxLength: \"Palun ära sisesta rohkem kui {0} tähemärki.\",\n    textMinMaxLength: \"Sisesta palun {0} - {1} tähemärki.\",\n    minRowCountError: \"Sisesta plaun vähemalt {0} rida.\",\n    minSelectError: \"Palun vali vähemalt {0} varianti.\",\n    maxSelectError: \"Palun vali kõige rohkem {0} varianti.\",\n    numericMinMax: \"'{0}' peaks olema võrdne või suurem kui {1} ja võrdne või väiksem kui {2}\",\n    numericMin: \"'{0}' peaks olema võrdne või suurem kui {1}\",\n    numericMax: \"'{0}' peaks olema võrnde või väiksem kui {1}\",\n    invalidEmail: \"Sisesta palun korrektne e-posti aadress.\",\n    invalidExpression: \"Avaldis: {0} peaks tagastama tõese.\",\n    urlRequestError: \"Taotlus tagastas vea „{0}”. {1}\",\n    urlGetChoicesError: \"Taotlus tagastas tühjad andmed või atribuut 'path' on vale\",\n    exceedMaxSize: \"Faili suurus ei tohi ületada {0}.\",\n    otherRequiredError: \"Sisesta palun muu vastus.\",\n    uploadingFile: \"Sinu fail laeb üles. Palun oota mõned sekundid ning proovi seejärel uuesti.\",\n    loadingFile: \"Laen...\",\n    chooseFile: \"Vali fail(id)...\",\n    noFileChosen: \"Faili pole valitud\",\n    fileDragAreaPlaceholder: \"Pukseerige fail siia või klõpsake allolevat nuppu ja valige üleslaaditav fail.\",\n    confirmDelete: \"Kas tahad kirje kustutada?\",\n    keyDuplicationError: \"See väärtus peab olema unikaalne.\",\n    addColumn: \"Lisa veerg\",\n    addRow: \"Lisa rida\",\n    removeRow: \"Eemalda\",\n    emptyRowsText: \"Ridu pole.\",\n    addPanel: \"Lisa uus\",\n    removePanel: \"Eemalda\",\n    choices_Item: \"üksus\",\n    matrix_column: \"Veerg\",\n    matrix_row: \"Rida\",\n    multipletext_itemname: \"Tekst\",\n    savingData: \"Salvestan andmed serveris...\",\n    savingDataError: \"Tekkis viga ning me ei saanud vastuseid salvestada.\",\n    savingDataSuccess: \"Vastuste salvestamine õnnestus!\",\n    saveAgainButton: \"Proovi uuesti\",\n    timerMin: \"min\",\n    timerSec: \"sek\",\n    timerSpentAll: \"Oled veetnud {0} sellel lehel ning kokku {1}.\",\n    timerSpentPage: \"Oled veetnud {0} sellel lehel.\",\n    timerSpentSurvey: \"Oled veetnud {0} kokku.\",\n    timerLimitAll: \"Oled kulutanud {0} võimalikust {1} sellel lehel ning {2} võimalikust {3} kokku.\",\n    timerLimitPage: \"Oled kulutanud {0} võimalikust {1} sellel lehel.\",\n    timerLimitSurvey: \"Oled kulutanud {0} võimalikust {1} koguajast.\",\n    clearCaption: \"Puhasta\",\n    signaturePlaceHolder: \"Allkirjasta siin\",\n    chooseFileCaption: \"Vali fail\",\n    takePhotoCaption: \"Pildistamine\",\n    cameraPlaceHolder: \"Kaamera abil pildistamiseks klõpsake allolevat nuppu.\",\n    fileCameraDragAreaPlaceHolder: \"Pukseerige või valige üleslaaditav fail või pildistage seda kaamera abil.\",\n    replaceFileCaption: \"Asenda fail\",\n    removeFileCaption: \"Eemalda see fail\",\n    booleanCheckedLabel: \"Jah\",\n    booleanUncheckedLabel: \"Ei\",\n    confirmRemoveFile: \"Oled sa kindel, et soovid selle faili eemaldada: {0}?\",\n    confirmRemoveAllFiles: \"Oled sa kindel, et soovid eemaldada kõik failid?\",\n    questionTitlePatternText: \"Küsimuse pealkiri\",\n    modalCancelButtonText: \"Tühistama\",\n    modalApplyButtonText: \"Kohaldata\",\n    filterStringPlaceholder: \"Tippige otsimiseks...\",\n    emptyMessage: \"Kuvatavaid andmeid pole\",\n    noEntriesText: \"Sissekandeid veel ei ole.\\nUue kirje lisamiseks klõpsake allolevat nuppu.\",\n    noEntriesReadonlyText: \"Kirjeid ei ole.\",\n    more: \"Rohkem\",\n    tagboxDoneButtonCaption: \"OK\",\n    selectToRankEmptyRankedAreaText: \"Kõik valikud on järjestatud\",\n    selectToRankEmptyUnrankedAreaText: \"Lohistage valikuid siia, et neid järjestada\"\n};\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"et\"] = estonianSurveyStrings;\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"et\"] = \"eesti keel\";\n// The following strings have been translated by a machine translation service\n// Remove those strings that you have corrected manually\n// indexText: \"{0} of {1}\" => \"{0} {1}\"\n// panelDynamicTabTextFormat: \"Panel {panelIndex}\" => \"Paneel {panelIndex}\"\n// ratingOptionsCaption: \"Select...\" => \"Valima...\"\n// minError: \"The value should not be less than {0}\" => \"Väärtus ei tohiks olla väiksem kui {0}\"\n// maxError: \"The value should not be greater than {0}\" => \"Väärtus ei tohiks olla suurem kui {0}\"\n// fileDragAreaPlaceholder: \"Drag and drop a file here or click the button below and choose a file to upload.\" => \"Pukseerige fail siia või klõpsake allolevat nuppu ja valige üleslaaditav fail.\"\n// emptyRowsText: \"There are no rows.\" => \"Ridu pole.\"\n// multipletext_itemname: \"text\" => \"Tekst\"\n// signaturePlaceHolder: \"Sign here\" => \"Allkirjasta siin\"\n// modalCancelButtonText: \"Cancel\" => \"Tühistama\"\n// modalApplyButtonText: \"Apply\" => \"Kohaldata\"\n// filterStringPlaceholder: \"Type to search...\" => \"Tippige otsimiseks...\"\n// emptyMessage: \"No data to display\" => \"Kuvatavaid andmeid pole\"\n// noEntriesText: \"There are no entries yet.\\nClick the button below to add a new entry.\" => \"Sissekandeid veel ei ole.\\nUue kirje lisamiseks klõpsake allolevat nuppu.\"\n// noEntriesReadonlyText: \"There are no entries.\" => \"Kirjeid ei ole.\"\n// more: \"More\" => \"Rohkem\"\n// tagboxDoneButtonCaption: \"OK\" => \"OK\"\n// selectToRankEmptyRankedAreaText: \"All choices are ranked\" => \"Kõik valikud on järjestatud\"\n// selectToRankEmptyUnrankedAreaText: \"Drag and drop choices here to rank them\" => \"Lohistage valikuid siia, et neid järjestada\"// takePhotoCaption: \"Take Photo\" => \"Pildistamine\"\n// cameraPlaceHolder: \"Click the button below to take a photo using the camera.\" => \"Kaamera abil pildistamiseks klõpsake allolevat nuppu.\"\n// fileCameraDragAreaPlaceHolder: \"Drag and drop or select a file to upload or take a photo using the camera.\" => \"Pukseerige või valige üleslaaditav fail või pildistage seda kaamera abil.\"\n// replaceFileCaption: \"Replace file\" => \"Asenda fail\"\n\n\n/***/ }),\n\n/***/ \"./src/localization/finnish.ts\":\n/*!*************************************!*\\\n  !*** ./src/localization/finnish.ts ***!\n  \\*************************************/\n/*! exports provided: finnishSurveyStrings */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1904167__) {\n\n\"use strict\";\n__nested_webpack_require_1904167__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_1904167__.d(__nested_webpack_exports__, \"finnishSurveyStrings\", function() { return finnishSurveyStrings; });\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1904167__(/*! survey-core */ \"./src/entries/core.ts\");\n\nvar finnishSurveyStrings = {\n    pagePrevText: \"Edellinen\",\n    pageNextText: \"Seuraava\",\n    completeText: \"Valmis\",\n    previewText: \"Esikatselu\",\n    editText: \"Muokkaa\",\n    startSurveyText: \"Aloita\",\n    otherItemText: \"Muu (tarkenna)\",\n    noneItemText: \"Ei mitään\",\n    selectAllItemText: \"Valitse kaikki\",\n    progressText: \"Sivu {0} / {1}\",\n    indexText: \"{0} / {1}\",\n    panelDynamicProgressText: \"Osio {0} / {1}\",\n    panelDynamicTabTextFormat: \"Paneeli {panelIndex}\",\n    questionsProgressText: \"Olet vastannut {0} / {1} kysymykseen.\",\n    emptySurvey: \"Tässä kyselyssä ei ole yhtään näkyvillä olevaa sivua tai kysymystä.\",\n    completingSurvey: \"Kiitos kyselyyn vastaamisesta!\",\n    completingSurveyBefore: \"Tietojemme mukaan olet jo suorittanut tämän kyselyn.\",\n    loadingSurvey: \"Kyselyä ladataan palvelimelta...\",\n    placeholder: \"Valitse...\",\n    ratingOptionsCaption: \"Arvioi napauttamalla tätä...\",\n    value: \"arvo\",\n    requiredError: \"Vastaa kysymykseen, kiitos.\",\n    requiredErrorInPanel: \"Vastaa ainakin yhteen kysymykseen.\",\n    requiredInAllRowsError: \"Vastaa kysymyksiin kaikilla riveillä.\",\n    numericError: \"Arvon tulee olla numeerinen.\",\n    minError: \"Arvo ei saa olla pienempi kuin {0}\",\n    maxError: \"Arvo ei saa olla suurempi kuin {0}\",\n    textMinLength: \"Syötä vähintään {0} merkkiä.\",\n    textMaxLength: \"Älä syötä yli {0} merkkiä.\",\n    textMinMaxLength: \"Syötä vähintään {0} ja enintään {1} merkkiä.\",\n    minRowCountError: \"Täytä vähintään {0} riviä.\",\n    minSelectError: \"Valitse vähintään {0} vaihtoehtoa.\",\n    maxSelectError: \"Valitse enintään {0} vaihtoehtoa.\",\n    numericMinMax: \"Luvun '{0}' tulee olla vähintään {1} ja korkeintaan {2}.\",\n    numericMin: \"Luvun '{0}' tulee olla vähintään {1}.\",\n    numericMax: \"Luvun '{0}' tulee olla korkeintaan {1}.\",\n    invalidEmail: \"Syötä validi sähköpostiosoite.\",\n    invalidExpression: \"Lausekkeen: {0} pitäisi palauttaa 'true'.\",\n    urlRequestError: \"Pyyntö palautti virheen {0}. {1}\",\n    urlGetChoicesError: \"Pyyntö palautti tyhjän tiedoston tai 'path'-asetus on väärä\",\n    exceedMaxSize: \"Tiedoston koko ei saa olla suurempi kuin {0}.\",\n    otherRequiredError: \"Tarkenna vastaustasi tekstikenttään.\",\n    uploadingFile: \"Tiedostoa lähetetään. Odota muutama sekunti ja yritä uudelleen.\",\n    loadingFile: \"Ladataan...\",\n    chooseFile: \"Valitse tiedosto(t)...\",\n    noFileChosen: \"Ei tiedostoa valittuna\",\n    fileDragAreaPlaceholder: \"Pudota tiedosto tähän tai lataa tiedosto napsauttamalla alla olevaa painiketta.\",\n    confirmDelete: \"Haluatko poistaa osion?\",\n    keyDuplicationError: \"Tämä arvo on jo käytössä. Syötä toinen arvo.\",\n    addColumn: \"Lisää sarake\",\n    addRow: \"Lisää rivi\",\n    removeRow: \"Poista\",\n    emptyRowsText: \"Ei rivejä\",\n    addPanel: \"Lisää uusi\",\n    removePanel: \"Poista\",\n    choices_Item: \"kohde\",\n    matrix_column: \"Sarake\",\n    matrix_row: \"Rivi\",\n    multipletext_itemname: \"teksti\",\n    savingData: \"Tietoja tallennetaan palvelimelle...\",\n    savingDataError: \"Tapahtui virhe, emmekä voineet tallentaa kyselyn tietoja.\",\n    savingDataSuccess: \"Tiedot tallennettiin onnistuneesti!\",\n    saveAgainButton: \"Yritä uudelleen\",\n    timerMin: \"min\",\n    timerSec: \"sek\",\n    timerSpentAll: \"Olet käyttänyt {0} tällä sivulla ja yhteensä {1}.\",\n    timerSpentPage: \"Olet käyttänyt {0} tällä sivulla.\",\n    timerSpentSurvey: \"Olet käyttänyt yhteensä {0}.\",\n    timerLimitAll: \"Olet käyttänyt tällä sivulla {0} / {1} ja yhteensä {2} / {3}.\",\n    timerLimitPage: \"Olet käyttänyt {0} / {1} tällä sivulla.\",\n    timerLimitSurvey: \"Olet käyttänyt yhteensä {0} / {1}.\",\n    clearCaption: \"Tyhjennä\",\n    signaturePlaceHolder: \"Allekirjoita tähän\",\n    chooseFileCaption: \"Valitse tiedosto\",\n    takePhotoCaption: \"Ota valokuva\",\n    cameraPlaceHolder: \"Napsauta alla olevaa painiketta ottaaksesi valokuvan kameralla.\",\n    fileCameraDragAreaPlaceHolder: \"Vedä ja pudota tai valitse ladattava tiedosto tai ota valokuva kameralla.\",\n    replaceFileCaption: \"Korvaa tiedosto\",\n    removeFileCaption: \"Poista tämä tiedosto\",\n    booleanCheckedLabel: \"Kyllä\",\n    booleanUncheckedLabel: \"Ei\",\n    confirmRemoveFile: \"Haluatko varmasti poistaa tämän tiedoston: {0}?\",\n    confirmRemoveAllFiles: \"Haluatko varmasti poistaa kaikki tiedostot?\",\n    questionTitlePatternText: \"Kysymyksen otsikko\",\n    modalCancelButtonText: \"Peruuta\",\n    modalApplyButtonText: \"Käytä\",\n    filterStringPlaceholder: \"Hae kirjoittamalla...\",\n    emptyMessage: \"Ei näytettäviä tietoja\",\n    noEntriesText: \"Merkintöjä ei ole vielä.\\nLisää uusi merkintä napsauttamalla alla olevaa painiketta.\",\n    noEntriesReadonlyText: \"Merkintöjä ei ole.\",\n    more: \"Enemmän\",\n    tagboxDoneButtonCaption: \"OKEI\",\n    selectToRankEmptyRankedAreaText: \"Kaikki valinnat asetetaan paremmuusjärjestykseen\",\n    selectToRankEmptyUnrankedAreaText: \"Vedä ja pudota vaihtoehdot tähän luokitellaksesi ne\"\n};\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"fi\"] = finnishSurveyStrings;\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"fi\"] = \"suomi\";\n// The following strings have been translated by a machine translation service\n// Remove those strings that you have corrected manually\n// panelDynamicTabTextFormat: \"Panel {panelIndex}\" => \"Paneeli {panelIndex}\"\n// emptyMessage: \"No data to display\" => \"Ei näytettäviä tietoja\"\n// noEntriesReadonlyText: \"There are no entries.\" => \"Merkintöjä ei ole.\"\n// more: \"More\" => \"Enemmän\"\n// tagboxDoneButtonCaption: \"OK\" => \"OKEI\"\n// selectToRankEmptyRankedAreaText: \"All choices are ranked\" => \"Kaikki valinnat asetetaan paremmuusjärjestykseen\"\n// selectToRankEmptyUnrankedAreaText: \"Drag and drop choices here to rank them\" => \"Vedä ja pudota vaihtoehdot tähän luokitellaksesi ne\"// takePhotoCaption: \"Take Photo\" => \"Ota valokuva\"\n// cameraPlaceHolder: \"Click the button below to take a photo using the camera.\" => \"Napsauta alla olevaa painiketta ottaaksesi valokuvan kameralla.\"\n// fileCameraDragAreaPlaceHolder: \"Drag and drop or select a file to upload or take a photo using the camera.\" => \"Vedä ja pudota tai valitse ladattava tiedosto tai ota valokuva kameralla.\"\n// replaceFileCaption: \"Replace file\" => \"Korvaa tiedosto\"\n\n\n/***/ }),\n\n/***/ \"./src/localization/french.ts\":\n/*!************************************!*\\\n  !*** ./src/localization/french.ts ***!\n  \\************************************/\n/*! exports provided: frenchSurveyStrings */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1910999__) {\n\n\"use strict\";\n__nested_webpack_require_1910999__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_1910999__.d(__nested_webpack_exports__, \"frenchSurveyStrings\", function() { return frenchSurveyStrings; });\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1910999__(/*! survey-core */ \"./src/entries/core.ts\");\n\nvar frenchSurveyStrings = {\n    pagePrevText: \"Précédent\",\n    pageNextText: \"Suivant\",\n    completeText: \"Terminer\",\n    previewText: \"Aperçu\",\n    editText: \"Modifier\",\n    startSurveyText: \"Commencer\",\n    otherItemText: \"Autre (préciser)\",\n    noneItemText: \"Aucun\",\n    selectAllItemText: \"Tout sélectionner\",\n    progressText: \"Page {0} sur {1}\",\n    indexText: \"{0} sur {1}\",\n    panelDynamicProgressText: \"Enregistrement {0} sur {1}\",\n    panelDynamicTabTextFormat: \"Panel {panelIndex}\",\n    questionsProgressText: \"{0}/{1} question(s) répondue(s)\",\n    emptySurvey: \"Il n'y a ni page visible ni question visible dans ce questionnaire\",\n    completingSurvey: \"Merci d'avoir répondu au questionnaire !\",\n    completingSurveyBefore: \"Nos données indiquent que vous avez déjà rempli ce questionnaire.\",\n    loadingSurvey: \"Le questionnaire est en cours de chargement...\",\n    placeholder: \"Choisissez...\",\n    ratingOptionsCaption: \"Appuyez ici pour noter...\",\n    value: \"valeur\",\n    requiredError: \"La réponse à cette question est obligatoire.\",\n    requiredErrorInPanel: \"Merci de répondre au moins à une question.\",\n    requiredInAllRowsError: \"Toutes les lignes sont obligatoires\",\n    numericError: \"La réponse doit être un nombre.\",\n    minError: \"La valeur ne doit pas être inférieure à {0}\",\n    maxError: \"La valeur ne doit pas être supérieure à {0}\",\n    textMinLength: \"Merci de saisir au moins {0} caractères.\",\n    textMaxLength: \"Merci de saisir moins de {0} caractères.\",\n    textMinMaxLength: \"Merci de saisir entre {0} et {1} caractères.\",\n    minRowCountError: \"Merci de compléter au moins {0} lignes.\",\n    minSelectError: \"Merci de sélectionner au minimum {0} réponses.\",\n    maxSelectError: \"Merci de sélectionner au maximum {0} réponses.\",\n    numericMinMax: \"Votre réponse '{0}' doit être supérieure ou égale à {1} et inférieure ou égale à {2}\",\n    numericMin: \"Votre réponse '{0}' doit être supérieure ou égale à {1}\",\n    numericMax: \"Votre réponse '{0}' doit être inférieure ou égale à {1}\",\n    invalidEmail: \"Merci d'entrer une adresse mail valide.\",\n    invalidExpression: \"L'expression: {0} doit retourner 'true'.\",\n    urlRequestError: \"La requête a renvoyé une erreur '{0}'. {1}\",\n    urlGetChoicesError: \"La requête a renvoyé des données vides ou la propriété 'path' est incorrecte\",\n    exceedMaxSize: \"La taille du fichier ne doit pas excéder {0}.\",\n    otherRequiredError: \"Merci de préciser le champ 'Autre'.\",\n    uploadingFile: \"Votre fichier est en cours de chargement. Merci d'attendre quelques secondes et de réessayer.\",\n    loadingFile: \"Chargement...\",\n    chooseFile: \"Ajouter des fichiers...\",\n    noFileChosen: \"Aucun fichier ajouté\",\n    fileDragAreaPlaceholder: \"Déposez un fichier ici ou cliquez sur le bouton ci-dessous pour charger le fichier.\",\n    confirmDelete: \"Voulez-vous supprimer cet enregistrement ?\",\n    keyDuplicationError: \"Cette valeur doit être unique.\",\n    addColumn: \"Ajouter une colonne\",\n    addRow: \"Ajouter une ligne\",\n    removeRow: \"Supprimer\",\n    emptyRowsText: \"Il n'y a pas de lignes.\",\n    addPanel: \"Ajouter\",\n    removePanel: \"Supprimer\",\n    choices_Item: \"item\",\n    matrix_column: \"Colonne\",\n    matrix_row: \"Ligne\",\n    multipletext_itemname: \"texte\",\n    savingData: \"Les résultats sont en cours de sauvegarde sur le serveur...\",\n    savingDataError: \"Une erreur est survenue et a empêché la sauvegarde des résultats.\",\n    savingDataSuccess: \"Les résultats ont bien été enregistrés !\",\n    saveAgainButton: \"Réessayer\",\n    timerMin: \"min\",\n    timerSec: \"sec\",\n    timerSpentAll: \"Vous avez passé {0} sur cette page et {1} au total.\",\n    timerSpentPage: \"Vous avez passé {0} sur cette page.\",\n    timerSpentSurvey: \"Vous avez passé {0} au total.\",\n    timerLimitAll: \"Vous avez passé {0} sur {1} sur cette page et {2} sur {3} au total.\",\n    timerLimitPage: \"Vous avez passé {0} sur {1} sur cette page.\",\n    timerLimitSurvey: \"Vous avez passé {0} sur {1} au total.\",\n    clearCaption: \"Vider\",\n    signaturePlaceHolder: \"Signez ici\",\n    chooseFileCaption: \"Ajouter un fichier\",\n    takePhotoCaption: \"Prendre une photo\",\n    cameraPlaceHolder: \"Cliquez sur le bouton ci-dessous pour prendre une photo à l’aide de l’appareil photo.\",\n    fileCameraDragAreaPlaceHolder: \"Faites glisser et déposez ou sélectionnez un fichier à télécharger ou à prendre une photo à l’aide de l’appareil photo.\",\n    replaceFileCaption: \"Remplacer le fichier\",\n    removeFileCaption: \"Enlever ce fichier\",\n    booleanCheckedLabel: \"Oui\",\n    booleanUncheckedLabel: \"Non\",\n    confirmRemoveFile: \"Êtes-vous certains de vouloir supprimer ce fichier : {0}?\",\n    confirmRemoveAllFiles: \"Êtes-vous certains de vouloir supprimer tous les fichiers?\",\n    questionTitlePatternText: \"Titre de la question\",\n    modalCancelButtonText: \"Annuler\",\n    modalApplyButtonText: \"Appliquer\",\n    filterStringPlaceholder: \"Tapez pour rechercher...\",\n    emptyMessage: \"Aucune donnée à afficher\",\n    noEntriesText: \"Il n'y a pas encore d'entrées.\\nCliquez sur le bouton ci-dessous pour ajouter une nouvelle entrée.\",\n    noEntriesReadonlyText: \"Il n’y a pas d’entrées.\",\n    more: \"Plus\",\n    tagboxDoneButtonCaption: \"D’ACCORD\",\n    selectToRankEmptyRankedAreaText: \"Tous les choix sont classés\",\n    selectToRankEmptyUnrankedAreaText: \"Faites glisser et déposez les choix ici pour les classer\"\n};\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"fr\"] = frenchSurveyStrings;\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"fr\"] = \"français\";\n// The following strings have been translated by a machine translation service\n// Remove those strings that you have corrected manually\n// panelDynamicTabTextFormat: \"Panel {panelIndex}\" => \"Panel {panelIndex}\"\n// emptyMessage: \"No data to display\" => \"Aucune donnée à afficher\"\n// noEntriesReadonlyText: \"There are no entries.\" => \"Il n’y a pas d’entrées.\"\n// more: \"More\" => \"Plus\"\n// tagboxDoneButtonCaption: \"OK\" => \"D’ACCORD\"\n// selectToRankEmptyRankedAreaText: \"All choices are ranked\" => \"Tous les choix sont classés\"\n// selectToRankEmptyUnrankedAreaText: \"Drag and drop choices here to rank them\" => \"Faites glisser et déposez les choix ici pour les classer\"// takePhotoCaption: \"Take Photo\" => \"Prendre une photo\"\n// cameraPlaceHolder: \"Click the button below to take a photo using the camera.\" => \"Cliquez sur le bouton ci-dessous pour prendre une photo à l’aide de l’appareil photo.\"\n// fileCameraDragAreaPlaceHolder: \"Drag and drop or select a file to upload or take a photo using the camera.\" => \"Faites glisser et déposez ou sélectionnez un fichier à télécharger ou à prendre une photo à l’aide de l’appareil photo.\"\n// replaceFileCaption: \"Replace file\" => \"Remplacer le fichier\"\n\n\n/***/ }),\n\n/***/ \"./src/localization/georgian.ts\":\n/*!**************************************!*\\\n  !*** ./src/localization/georgian.ts ***!\n  \\**************************************/\n/*! exports provided: georgianSurveyStrings */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1918385__) {\n\n\"use strict\";\n__nested_webpack_require_1918385__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_1918385__.d(__nested_webpack_exports__, \"georgianSurveyStrings\", function() { return georgianSurveyStrings; });\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1918385__(/*! survey-core */ \"./src/entries/core.ts\");\n\nvar georgianSurveyStrings = {\n    pagePrevText: \"უკან\",\n    pageNextText: \"შემდეგ\",\n    completeText: \"დასრულება\",\n    previewText: \"გადახედვა\",\n    editText: \"რედაქტირება\",\n    startSurveyText: \"დაქოქვა\",\n    otherItemText: \"სხვა (გთხოვთ მიუთითეთ)\",\n    noneItemText: \"არცერთი\",\n    selectAllItemText: \"ყველას მონიშნა\",\n    progressText: \"გვერდი {0} / {1}\",\n    indexText: \"{1} {0}\",\n    panelDynamicProgressText: \"{1} {0}\",\n    panelDynamicTabTextFormat: \"Panel {panelIndex}\",\n    questionsProgressText: \"უპასუხეთ {0}/{1} კითხვებს\",\n    emptySurvey: \"არცერთი კითხვა არ არის.\",\n    completingSurvey: \"გმადლობთ კითხვარის შევსებისთვის!\",\n    completingSurveyBefore: \"ჩვენი ჩანაწერები აჩვენებს, რომ თქვენ უკვე დაასრულეთ ეს გამოკითხვა.\",\n    loadingSurvey: \"ჩატვირთვა სერვერიდან...\",\n    placeholder: \"არჩევა...\",\n    ratingOptionsCaption: \"აირჩიეთ...\",\n    value: \"ღირებულება\",\n    requiredError: \"გთხოვთ უპასუხეთ კითხვას.\",\n    requiredErrorInPanel: \"საჭიროა პასუხი: უპასუხეთ მინიმუმ ერთ კითხვას.\",\n    requiredInAllRowsError: \"საჭიროა პასუხი: უპასუხეთ კითხვებს ყველა რიგში.\",\n    numericError: \"პასუხი უნდა იყოს რიცხვი.\",\n    minError: \"ღირებულება არ უნდა იყოს ნაკლები {0}\",\n    maxError: \"ღირებულება არ უნდა იყოს {0}\",\n    textMinLength: \"გთხოვთ შეიყვანეთ არანაკლებ {0} სიმბოლო.\",\n    textMaxLength: \"გთხოვთ, შეიყვანოთ არაუმეტეს {0} სიმბოლო(ებ)ი.\",\n    textMinMaxLength: \"გთხოვთ, შეიყვანოთ მინიმუმ {0} და არაუმეტეს {1} სიმბოლო.\",\n    minRowCountError: \"გთხოვთ შეავსოთ მინიმუმ {0} რიგი( ებ)ი.\",\n    minSelectError: \"გთხოვთ აირჩიეთ არანაკლებ {0} ვარიანტი.\",\n    maxSelectError: \"გთხოვთ აირჩიეთ არაუმეტეს {0} ვარიანტი.\",\n    numericMinMax: \"'{0}' უნდა იყოს მეტი ან ტოლი, ვიდრე {1}, და ნაკლები ან ტოლი ვიდრე {2}\",\n    numericMin: \"'{0}' უნდა იყოს მეტი ან ტოლი ვიდრე {1}\",\n    numericMax: \"'{0}' უნდა იყოს ნაკლები ან ტოლი ვიდრე {1}\",\n    invalidEmail: \"გთხოვთ შეიყვანოთ ელ. ფოსტის რეალური მისამართი.\",\n    invalidExpression: \"გამოთქმა: {0} უნდა დაბრუნდეს \\\"ჭეშმარიტი\\\".\",\n    urlRequestError: \"მოთხოვნა დაუბრუნდა შეცდომას '{0}'. {1}\",\n    urlGetChoicesError: \"მოთხოვნამ დაუბრუნა ცარიელი მონაცემები ან \\\"ბილიკის\\\" ქონება არასწორია\",\n    exceedMaxSize: \"ფაილის ზომა არ უნდა აღემატებოდეს {0}.\",\n    otherRequiredError: \"საჭიროა პასუხი: შეიყვანეთ სხვა მნიშვნელობა.\",\n    uploadingFile: \"თქვენი ფაილი ატვირთვაა. გთხოვთ დაელოდოთ რამდენიმე წამს და კიდევ სცადოთ.\",\n    loadingFile: \"იტვირთება...\",\n    chooseFile: \"აირჩიეთ ფაილი...\",\n    noFileChosen: \"ფაილის არჩევა არ არის\",\n    fileDragAreaPlaceholder: \"გადაიტანეთ და ჩამოაგდეთ ფაილი აქ ან დააჭირეთ ქვემოთ მოცემულ ღილაკს და აირჩიეთ ფაილი ასატვირთად.\",\n    confirmDelete: \"გსურთ ჩანაწერის წაშლა?\",\n    keyDuplicationError: \"ეს მნიშვნელობა უნდა იყოს უნიკალური.\",\n    addColumn: \"სვეტის დამატება\",\n    addRow: \"რიგის დამატება\",\n    removeRow: \"წაშლა\",\n    emptyRowsText: \"რიგები არ არის.\",\n    addPanel: \"ახალი დამატება\",\n    removePanel: \"წაშლა\",\n    choices_Item: \"ნივთი\",\n    matrix_column: \"სვეტი\",\n    matrix_row: \"რიგი\",\n    multipletext_itemname: \"ტექსტი\",\n    savingData: \"შედეგები ინახება სერვერზე...\",\n    savingDataError: \"დაფიქსირდა შეცდომა და შედეგი ვერ შევინახავდით.\",\n    savingDataSuccess: \"შედეგები წარმატებით გადაარჩინეს!\",\n    saveAgainButton: \"კიდევ სცადე\",\n    timerMin: \"წთ\",\n    timerSec: \"წმ\",\n    timerSpentAll: \"თქვენ დახარჯეთ {0} ამ გვერდზე და ჯამში {1}.\",\n    timerSpentPage: \"თქვენ {0} დახარჯეთ ამ გვერდზე.\",\n    timerSpentSurvey: \"თქვენ სულ {0} დახარჯეთ.\",\n    timerLimitAll: \"თქვენ დახარჯეთ {1} {0} ამ გვერდზე და ჯამში {3} {2}.\",\n    timerLimitPage: \"თქვენ ამ გვერდზე {1} {0} დახარჯეთ.\",\n    timerLimitSurvey: \"თქვენ სულ {1} {0} დახარჯეთ.\",\n    clearCaption: \"მოწმენდილი ცა\",\n    signaturePlaceHolder: \"შესვლა აქ\",\n    chooseFileCaption: \"ვაუჩერის ნახვა\",\n    takePhotoCaption: \"გადაიღეთ ფოტო\",\n    cameraPlaceHolder: \"დააჭირეთ ქვემოთ მოცემულ ღილაკს, რომ გადაიღოთ ფოტო კამერის გამოყენებით.\",\n    fileCameraDragAreaPlaceHolder: \"გადაიტანეთ და ჩამოაგდეთ ან შეარჩიეთ ფაილი კამერის გამოყენებით ფოტოს ასატვირთად ან გადასაღებად.\",\n    replaceFileCaption: \"ფაილის შეცვლა\",\n    removeFileCaption: \"ამ ფაილის წაშლა\",\n    booleanCheckedLabel: \"დიახ\",\n    booleanUncheckedLabel: \"არა\",\n    confirmRemoveFile: \"დარწმუნებული ხართ, რომ გსურთ ამ ფაილის წაშლა: {0}?\",\n    confirmRemoveAllFiles: \"დარწმუნებული ხართ, რომ გსურთ ყველა ფაილის წაშლა?\",\n    questionTitlePatternText: \"კითხვის სათაური\",\n    modalCancelButtonText: \"გაუქმება\",\n    modalApplyButtonText: \"მიღება\",\n    filterStringPlaceholder: \"ჩაწერეთ ძებნა...\",\n    emptyMessage: \"მონაცემები არ არის საჩვენებლად\",\n    noEntriesText: \"ჯერ არ არის ჩანაწერები.\\nდააჭირეთ ქვემოთ მოცემულ ღილაკს, რომ დაამატოთ ახალი ჩანაწერი.\",\n    noEntriesReadonlyText: \"არ არსებობს ჩანაწერები.\",\n    more: \"სრულად\",\n    tagboxDoneButtonCaption: \"კარგი\",\n    selectToRankEmptyRankedAreaText: \"ყველა არჩევანი რანჟირებულია\",\n    selectToRankEmptyUnrankedAreaText: \"გადაიტანეთ და ჩამოაგდეთ არჩევანი აქ, რომ დაასახელოთ ისინი\"\n};\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"ka\"] = georgianSurveyStrings;\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"ka\"] = \"ქართული\";\n// The following strings have been translated by a machine translation service\n// Remove those strings that you have corrected manually\n// previewText: \"Preview\" => \"გადახედვა\"\n// editText: \"Edit\" => \"რედაქტირება\"\n// startSurveyText: \"Start\" => \"დაქოქვა\"\n// noneItemText: \"None\" => \"არცერთი\"\n// selectAllItemText: \"Select All\" => \"ყველას მონიშნა\"\n// indexText: \"{0} of {1}\" => \"{1} {0}\"\n// panelDynamicProgressText: \"{0} of {1}\" => \"{1} {0}\"\n// panelDynamicTabTextFormat: \"Panel {panelIndex}\" => \"Panel {panelIndex}\"\n// questionsProgressText: \"Answered {0}/{1} questions\" => \"უპასუხეთ {0}/{1} კითხვებს\"\n// completingSurveyBefore: \"Our records show that you have already completed this survey.\" => \"ჩვენი ჩანაწერები აჩვენებს, რომ თქვენ უკვე დაასრულეთ ეს გამოკითხვა.\"\n// ratingOptionsCaption: \"Select...\" => \"აირჩიეთ...\"\n// value: \"value\" => \"ღირებულება\"\n// requiredErrorInPanel: \"Response required: answer at least one question.\" => \"საჭიროა პასუხი: უპასუხეთ მინიმუმ ერთ კითხვას.\"\n// requiredInAllRowsError: \"Response required: answer questions in all rows.\" => \"საჭიროა პასუხი: უპასუხეთ კითხვებს ყველა რიგში.\"\n// minError: \"The value should not be less than {0}\" => \"ღირებულება არ უნდა იყოს ნაკლები {0}\"\n// maxError: \"The value should not be greater than {0}\" => \"ღირებულება არ უნდა იყოს {0}\"\n// textMaxLength: \"Please enter no more than {0} character(s).\" => \"გთხოვთ, შეიყვანოთ არაუმეტეს {0} სიმბოლო(ებ)ი.\"\n// textMinMaxLength: \"Please enter at least {0} and no more than {1} characters.\" => \"გთხოვთ, შეიყვანოთ მინიმუმ {0} და არაუმეტეს {1} სიმბოლო.\"\n// minRowCountError: \"Please fill in at least {0} row(s).\" => \"გთხოვთ შეავსოთ მინიმუმ {0} რიგი( ებ)ი.\"\n// invalidExpression: \"The expression: {0} should return 'true'.\" => \"გამოთქმა: {0} უნდა დაბრუნდეს \\\"ჭეშმარიტი\\\".\"\n// urlRequestError: \"The request returned error '{0}'. {1}\" => \"მოთხოვნა დაუბრუნდა შეცდომას '{0}'. {1}\"\n// urlGetChoicesError: \"The request returned empty data or the 'path' property is incorrect\" => \"მოთხოვნამ დაუბრუნა ცარიელი მონაცემები ან \\\"ბილიკის\\\" ქონება არასწორია\"\n// exceedMaxSize: \"The file size should not exceed {0}.\" => \"ფაილის ზომა არ უნდა აღემატებოდეს {0}.\"\n// otherRequiredError: \"Response required: enter another value.\" => \"საჭიროა პასუხი: შეიყვანეთ სხვა მნიშვნელობა.\"\n// uploadingFile: \"Your file is uploading. Please wait several seconds and try again.\" => \"თქვენი ფაილი ატვირთვაა. გთხოვთ დაელოდოთ რამდენიმე წამს და კიდევ სცადოთ.\"\n// loadingFile: \"Loading...\" => \"იტვირთება...\"\n// chooseFile: \"Choose file(s)...\" => \"აირჩიეთ ფაილი...\"\n// noFileChosen: \"No file chosen\" => \"ფაილის არჩევა არ არის\"\n// fileDragAreaPlaceholder: \"Drag and drop a file here or click the button below and choose a file to upload.\" => \"გადაიტანეთ და ჩამოაგდეთ ფაილი აქ ან დააჭირეთ ქვემოთ მოცემულ ღილაკს და აირჩიეთ ფაილი ასატვირთად.\"\n// confirmDelete: \"Do you want to delete the record?\" => \"გსურთ ჩანაწერის წაშლა?\"\n// keyDuplicationError: \"This value should be unique.\" => \"ეს მნიშვნელობა უნდა იყოს უნიკალური.\"\n// addColumn: \"Add Column\" => \"სვეტის დამატება\"\n// addRow: \"Add Row\" => \"რიგის დამატება\"\n// removeRow: \"Remove\" => \"წაშლა\"\n// emptyRowsText: \"There are no rows.\" => \"რიგები არ არის.\"\n// addPanel: \"Add new\" => \"ახალი დამატება\"\n// removePanel: \"Remove\" => \"წაშლა\"\n// choices_Item: \"item\" => \"ნივთი\"\n// matrix_column: \"Column\" => \"სვეტი\"\n// matrix_row: \"Row\" => \"რიგი\"\n// multipletext_itemname: \"text\" => \"ტექსტი\"\n// savingData: \"The results are being saved on the server...\" => \"შედეგები ინახება სერვერზე...\"\n// savingDataError: \"An error occurred and we could not save the results.\" => \"დაფიქსირდა შეცდომა და შედეგი ვერ შევინახავდით.\"\n// savingDataSuccess: \"The results were saved successfully!\" => \"შედეგები წარმატებით გადაარჩინეს!\"\n// saveAgainButton: \"Try again\" => \"კიდევ სცადე\"\n// timerMin: \"min\" => \"წთ\"\n// timerSec: \"sec\" => \"წმ\"\n// timerSpentAll: \"You have spent {0} on this page and {1} in total.\" => \"თქვენ დახარჯეთ {0} ამ გვერდზე და ჯამში {1}.\"\n// timerSpentPage: \"You have spent {0} on this page.\" => \"თქვენ {0} დახარჯეთ ამ გვერდზე.\"\n// timerSpentSurvey: \"You have spent {0} in total.\" => \"თქვენ სულ {0} დახარჯეთ.\"\n// timerLimitAll: \"You have spent {0} of {1} on this page and {2} of {3} in total.\" => \"თქვენ დახარჯეთ {1} {0} ამ გვერდზე და ჯამში {3} {2}.\"\n// timerLimitPage: \"You have spent {0} of {1} on this page.\" => \"თქვენ ამ გვერდზე {1} {0} დახარჯეთ.\"\n// timerLimitSurvey: \"You have spent {0} of {1} in total.\" => \"თქვენ სულ {1} {0} დახარჯეთ.\"\n// clearCaption: \"Clear\" => \"მოწმენდილი ცა\"\n// signaturePlaceHolder: \"Sign here\" => \"შესვლა აქ\"\n// chooseFileCaption: \"Choose file\" => \"ვაუჩერის ნახვა\"\n// removeFileCaption: \"Remove this file\" => \"ამ ფაილის წაშლა\"\n// booleanCheckedLabel: \"Yes\" => \"დიახ\"\n// booleanUncheckedLabel: \"No\" => \"არა\"\n// confirmRemoveFile: \"Are you sure that you want to remove this file: {0}?\" => \"დარწმუნებული ხართ, რომ გსურთ ამ ფაილის წაშლა: {0}?\"\n// confirmRemoveAllFiles: \"Are you sure that you want to remove all files?\" => \"დარწმუნებული ხართ, რომ გსურთ ყველა ფაილის წაშლა?\"\n// questionTitlePatternText: \"Question Title\" => \"კითხვის სათაური\"\n// modalCancelButtonText: \"Cancel\" => \"გაუქმება\"\n// modalApplyButtonText: \"Apply\" => \"მიღება\"\n// filterStringPlaceholder: \"Type to search...\" => \"ჩაწერეთ ძებნა...\"\n// emptyMessage: \"No data to display\" => \"მონაცემები არ არის საჩვენებლად\"\n// noEntriesText: \"There are no entries yet.\\nClick the button below to add a new entry.\" => \"ჯერ არ არის ჩანაწერები.\\nდააჭირეთ ქვემოთ მოცემულ ღილაკს, რომ დაამატოთ ახალი ჩანაწერი.\"\n// noEntriesReadonlyText: \"There are no entries.\" => \"არ არსებობს ჩანაწერები.\"\n// more: \"More\" => \"სრულად\"\n// tagboxDoneButtonCaption: \"OK\" => \"კარგი\"\n// selectToRankEmptyRankedAreaText: \"All choices are ranked\" => \"ყველა არჩევანი რანჟირებულია\"\n// selectToRankEmptyUnrankedAreaText: \"Drag and drop choices here to rank them\" => \"გადაიტანეთ და ჩამოაგდეთ არჩევანი აქ, რომ დაასახელოთ ისინი\"// takePhotoCaption: \"Take Photo\" => \"გადაიღეთ ფოტო\"\n// cameraPlaceHolder: \"Click the button below to take a photo using the camera.\" => \"დააჭირეთ ქვემოთ მოცემულ ღილაკს, რომ გადაიღოთ ფოტო კამერის გამოყენებით.\"\n// fileCameraDragAreaPlaceHolder: \"Drag and drop or select a file to upload or take a photo using the camera.\" => \"გადაიტანეთ და ჩამოაგდეთ ან შეარჩიეთ ფაილი კამერის გამოყენებით ფოტოს ასატვირთად ან გადასაღებად.\"\n// replaceFileCaption: \"Replace file\" => \"ფაილის შეცვლა\"\n\n\n/***/ }),\n\n/***/ \"./src/localization/german.ts\":\n/*!************************************!*\\\n  !*** ./src/localization/german.ts ***!\n  \\************************************/\n/*! exports provided: germanSurveyStrings */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1930466__) {\n\n\"use strict\";\n__nested_webpack_require_1930466__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_1930466__.d(__nested_webpack_exports__, \"germanSurveyStrings\", function() { return germanSurveyStrings; });\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1930466__(/*! survey-core */ \"./src/entries/core.ts\");\n\nvar germanSurveyStrings = {\n    pagePrevText: \"Zurück\",\n    pageNextText: \"Weiter\",\n    completeText: \"Abschließen\",\n    previewText: \"Vorschau\",\n    editText: \"Bearbeiten\",\n    startSurveyText: \"Start\",\n    otherItemText: \"Sonstiges (Bitte angeben)\",\n    noneItemText: \"Nichts trifft zu\",\n    selectAllItemText: \"Alles auswählen\",\n    progressText: \"Seite {0} von {1}\",\n    indexText: \"{0} von {1}\",\n    panelDynamicProgressText: \"Eintrag {0} von {1}\",\n    panelDynamicTabTextFormat: \"Bereich {panelIndex}\",\n    questionsProgressText: \"{0}/{1} Fragen beantwortet\",\n    emptySurvey: \"Es sind keine Fragen vorhanden.\",\n    completingSurvey: \"Vielen Dank, dass Sie die Umfrage abgeschlossen haben!\",\n    completingSurveyBefore: \"Wir haben festgestellt, dass Sie diese Umfrage bereits abgeschlossen haben.\",\n    loadingSurvey: \"Umfrage wird geladen...\",\n    placeholder: \"Bitte auswählen...\",\n    ratingOptionsCaption: \"Tippen Sie hier, um zu bewerten...\",\n    value: \"Wert\",\n    requiredError: \"Bitte beantworten Sie diese Frage.\",\n    requiredErrorInPanel: \"Bitte beantworten Sie mindestens eine Frage.\",\n    requiredInAllRowsError: \"Bitte beantworten Sie alle Fragen.\",\n    numericError: \"Der Wert muss eine Zahl sein.\",\n    minError: \"Der Wert sollte nicht kleiner als {0} sein\",\n    maxError: \"Der Wert sollte nicht größer als {0} sein\",\n    textMinLength: \"Bitte geben Sie mindestens {0} Zeichen ein.\",\n    textMaxLength: \"Bitte geben Sie nicht mehr als {0} Zeichen ein.\",\n    textMinMaxLength: \"Bitte geben Sie mindestens {0} und maximal {1} Zeichen ein.\",\n    minRowCountError: \"Bitte machen Sie in mindestens {0} Zeilen eine Eingabe.\",\n    minSelectError: \"Bitte wählen Sie mindestens {0} Antwort(en) aus.\",\n    maxSelectError: \"Bitte wählen Sie nicht mehr als {0} Antwort(en) aus.\",\n    numericMinMax: \"'{0}' muss größer oder gleich {1} und kleiner oder gleich {2} sein\",\n    numericMin: \"'{0}' muss größer oder gleich {1} sein\",\n    numericMax: \"'{0}' muss kleiner oder gleich {1} sein\",\n    invalidEmail: \"Bitte geben Sie eine gültige E-Mail-Adresse ein.\",\n    invalidExpression: \"Der Ausdruck: {0} muss den Wert 'wahr' zurückgeben.\",\n    urlRequestError: \"Ein Netzwerkdienst hat folgenden Fehler zurückgegeben '{0}'. {1}\",\n    urlGetChoicesError: \"Eine Netzwerkdienst hat ungültige Daten zurückgegeben\",\n    exceedMaxSize: \"Die Datei darf nicht größer als {0} sein.\",\n    otherRequiredError: \"Bitte geben Sie einen Wert an.\",\n    uploadingFile: \"Bitte warten Sie bis der Upload Ihrer Dateien abgeschlossen ist.\",\n    loadingFile: \"Wird hochgeladen...\",\n    chooseFile: \"Datei(en) auswählen...\",\n    noFileChosen: \"Keine Datei ausgewählt\",\n    fileDragAreaPlaceholder: \"Legen Sie hier eine Datei ab oder klicken Sie auf die Schaltfläche unten, um die Datei zu laden.\",\n    confirmDelete: \"Wollen Sie den Eintrag löschen?\",\n    keyDuplicationError: \"Dieser Wert muss einmalig sein.\",\n    addColumn: \"Spalte hinzufügen\",\n    addRow: \"Zeile hinzufügen\",\n    removeRow: \"Entfernen\",\n    emptyRowsText: \"Es gibt keine Reihen.\",\n    addPanel: \"Neu hinzufügen\",\n    removePanel: \"Entfernen\",\n    choices_Item: \"Element\",\n    matrix_column: \"Spalte\",\n    matrix_row: \"Zeile\",\n    multipletext_itemname: \"Text\",\n    savingData: \"Die Ergebnisse werden auf dem Server gespeichert...\",\n    savingDataError: \"Es ist ein Fehler aufgetreten. Die Ergebnisse konnten nicht gespeichert werden.\",\n    savingDataSuccess: \"Die Ergebnisse wurden gespeichert!\",\n    saveAgainButton: \"Erneut absenden\",\n    timerMin: \"Min.\",\n    timerSec: \"Sek.\",\n    timerSpentAll: \"Sie waren {0} auf dieser Seite und brauchten insgesamt {1}.\",\n    timerSpentPage: \"Sie waren {0} auf dieser Seite.\",\n    timerSpentSurvey: \"Sie haben insgesamt {0} gebraucht.\",\n    timerLimitAll: \"Sie waren {0} von {1} auf dieser Seite und brauchten insgesamt {2} von {3}.\",\n    timerLimitPage: \"Sie waren {0} von {1} auf dieser Seite.\",\n    timerLimitSurvey: \"Sie haben insgesamt {0} von {1} gebraucht.\",\n    clearCaption: \"Auswahl entfernen\",\n    signaturePlaceHolder: \"Hier unterschreiben\",\n    chooseFileCaption: \"Datei auswählen\",\n    takePhotoCaption: \"Foto machen\",\n    cameraPlaceHolder: \"Klicken Sie auf die Schaltfläche unten, um ein Foto mit der Kamera aufzunehmen.\",\n    fileCameraDragAreaPlaceHolder: \"Ziehen Sie eine Datei per Drag & Drop oder wählen Sie sie aus, um sie hochzuladen oder ein Foto mit der Kamera aufzunehmen.\",\n    replaceFileCaption: \"Datei ersetzen\",\n    removeFileCaption: \"Datei löschen\",\n    booleanCheckedLabel: \"Ja\",\n    booleanUncheckedLabel: \"Nein\",\n    confirmRemoveFile: \"Sind Sie sicher, dass Sie diese Datei löschen möchten: {0}?\",\n    confirmRemoveAllFiles: \"Sind Sie sicher, dass Sie alle Dateien löschen möchten?\",\n    questionTitlePatternText: \"Fragentitel\",\n    modalCancelButtonText: \"Abbrechen\",\n    modalApplyButtonText: \"Anwenden\",\n    filterStringPlaceholder: \"Tippe um zu suchen...\",\n    emptyMessage: \"Es gibt noch keine Daten.\",\n    noEntriesText: \"Es gibt noch keine Einträge.\\nKlicken Sie auf die Schaltfläche unten, um einen neuen Eintrag hinzuzufügen.\",\n    noEntriesReadonlyText: \"Es gibt keine Einträge.\",\n    more: \"Mehr\",\n    tagboxDoneButtonCaption: \"OKAY\",\n    selectToRankEmptyRankedAreaText: \"Alle Auswahlmöglichkeiten sind in einer Rangfolge angeordnet\",\n    selectToRankEmptyUnrankedAreaText: \"Ziehen Sie die Auswahl hierher, um sie zu ordnen\"\n};\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"de\"] = germanSurveyStrings;\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"de\"] = \"deutsch\";\n// The following strings have been translated by a machine translation service\n// Remove those strings that you have corrected manually\n// panelDynamicTabTextFormat: \"Panel {panelIndex}\" => \"Bereich {panelIndex}\"\n// noEntriesReadonlyText: \"There are no entries.\" => \"Es gibt keine Einträge.\"\n// tagboxDoneButtonCaption: \"OK\" => \"OKAY\"\n// selectToRankEmptyRankedAreaText: \"All choices are ranked\" => \"Alle Auswahlmöglichkeiten sind in einer Rangfolge angeordnet\"\n// selectToRankEmptyUnrankedAreaText: \"Drag and drop choices here to rank them\" => \"Ziehen Sie die Auswahl hierher, um sie zu ordnen\"// takePhotoCaption: \"Take Photo\" => \"Foto machen\"\n// cameraPlaceHolder: \"Click the button below to take a photo using the camera.\" => \"Klicken Sie auf die Schaltfläche unten, um ein Foto mit der Kamera aufzunehmen.\"\n// fileCameraDragAreaPlaceHolder: \"Drag and drop or select a file to upload or take a photo using the camera.\" => \"Ziehen Sie eine Datei per Drag & Drop oder wählen Sie sie aus, um sie hochzuladen oder ein Foto mit der Kamera aufzunehmen.\"\n// replaceFileCaption: \"Replace file\" => \"Datei ersetzen\"\n\n\n/***/ }),\n\n/***/ \"./src/localization/greek.ts\":\n/*!***********************************!*\\\n  !*** ./src/localization/greek.ts ***!\n  \\***********************************/\n/*! exports provided: greekSurveyStrings */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1937758__) {\n\n\"use strict\";\n__nested_webpack_require_1937758__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_1937758__.d(__nested_webpack_exports__, \"greekSurveyStrings\", function() { return greekSurveyStrings; });\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1937758__(/*! survey-core */ \"./src/entries/core.ts\");\n\nvar greekSurveyStrings = {\n    pagePrevText: \"Προηγούμενο\",\n    pageNextText: \"Επόμενο\",\n    completeText: \"Ολοκλήρωση\",\n    previewText: \"Προεπισκόπηση\",\n    editText: \"Επεξεργασία\",\n    startSurveyText: \"Αρχή\",\n    otherItemText: \"Άλλο (παρακαλώ διευκρινίστε)\",\n    noneItemText: \"Κανένας\",\n    selectAllItemText: \"Επιλογή όλων\",\n    progressText: \"Σελίδα {0} από {1}\",\n    indexText: \"{0} από {1}\",\n    panelDynamicProgressText: \"Εγγραφή {0} από {1}\",\n    panelDynamicTabTextFormat: \"Πίνακας {panelIndex}\",\n    questionsProgressText: \"Απαντήθηκαν {0} / {1} ερωτήσεις\",\n    emptySurvey: \"Δεν υπάρχει καμία ορατή σελίδα ή ορατή ερώτηση σε αυτό το ερωτηματολόγιο.\",\n    completingSurvey: \"Ευχαριστούμε για την συμπλήρωση αυτού του ερωτηματολογίου!\",\n    completingSurveyBefore: \"Τα αρχεία μας δείχνουν ότι έχετε ήδη ολοκληρώσει αυτήν την έρευνα.\",\n    loadingSurvey: \"Το ερωτηματολόγιο φορτώνεται απο το διακομιστή...\",\n    placeholder: \"Επιλέξτε...\",\n    ratingOptionsCaption: \"Πατήστε για να βαθμολογήσετε εδώ...\",\n    value: \"τιμή\",\n    requiredError: \"Παρακαλώ απαντήστε στην ερώτηση.\",\n    requiredErrorInPanel: \"Απαντήστε σε τουλάχιστον μία ερώτηση.\",\n    requiredInAllRowsError: \"Παρακαλώ απαντήστε τις ερωτήσεις σε όλες τις γραμμές.\",\n    numericError: \"Η τιμή πρέπει να είναι αριθμητική.\",\n    minError: \"Η τιμή δεν πρέπει να είναι μικρότερη από {0}\",\n    maxError: \"Η τιμή δεν πρέπει να είναι μεγαλύτερη από {0}\",\n    textMinLength: \"Παρακαλώ συμπληρώστε τουλάχιστον {0} χαρακτήρες.\",\n    textMaxLength: \"Εισαγάγετε λιγότερους από {0} χαρακτήρες.\",\n    textMinMaxLength: \"Εισαγάγετε περισσότερους από {0} και λιγότερους από {1} χαρακτήρες.\",\n    minRowCountError: \"Παρακαλώ συμπληρώστε τουλάχιστον {0} γραμμές.\",\n    minSelectError: \"Παρακαλώ επιλέξτε τουλάχιστον {0} παραλλαγές.\",\n    maxSelectError: \"Παρακαλώ επιλέξτε όχι παραπάνω απο {0} παραλλαγές.\",\n    numericMinMax: \"Το '{0}' θα πρέπει να είναι ίσο ή μεγαλύτερο απο το {1} και ίσο ή μικρότερο απο το {2}\",\n    numericMin: \"Το '{0}' πρέπει να είναι μεγαλύτερο ή ισο με το {1}\",\n    numericMax: \"Το '{0}' πρέπει να είναι μικρότερο ή ίσο απο το {1}\",\n    invalidEmail: \"Παρακαλώ δώστε μια αποδεκτή διεύθυνση e-mail.\",\n    invalidExpression: \"Η έκφραση: {0} θα πρέπει να επιστρέψει 'true'.\",\n    urlRequestError: \"Η αίτηση επέστρεψε σφάλμα '{0}'. {1}\",\n    urlGetChoicesError: \"Η αίτηση επέστρεψε κενά δεδομένα ή η ιδιότητα 'μονοπάτι/path' είναι εσφαλμένη\",\n    exceedMaxSize: \"Το μέγεθος του αρχείου δεν μπορεί να υπερβαίνει τα {0}.\",\n    otherRequiredError: \"Παρακαλώ συμπληρώστε την τιμή για το πεδίο 'άλλο'.\",\n    uploadingFile: \"Το αρχείο σας ανεβαίνει. Παρακαλώ περιμένετε μερικά δευτερόλεπτα και δοκιμάστε ξανά.\",\n    loadingFile: \"Φόρτωση...\",\n    chooseFile: \"Επιλογή αρχείων ...\",\n    noFileChosen: \"Δεν έχει επιλεγεί αρχείο\",\n    fileDragAreaPlaceholder: \"Αποθέστε το αρχείο σας εδώ ή κάντε κλικ στο κουμπί παρακάτω για να φορτώσετε το αρχείο.\",\n    confirmDelete: \"Θέλετε να διαγράψετε την εγγραφή;\",\n    keyDuplicationError: \"Αυτή η τιμή πρέπει να είναι μοναδική.\",\n    addColumn: \"Προσθήκη στήλης\",\n    addRow: \"Προσθήκη γραμμής\",\n    removeRow: \"Αφαίρεση\",\n    emptyRowsText: \"Δεν υπάρχουν εγγραφές.\",\n    addPanel: \"Προσθέστε νέο\",\n    removePanel: \"Αφαίρεση\",\n    choices_Item: \"είδος\",\n    matrix_column: \"Στήλη\",\n    matrix_row: \"Γραμμή\",\n    multipletext_itemname: \"κείμενο\",\n    savingData: \"Τα αποτελέσματα αποθηκεύονται στον διακομιστή ...\",\n    savingDataError: \"Παρουσιάστηκε σφάλμα και δεν ήταν δυνατή η αποθήκευση των αποτελεσμάτων.\",\n    savingDataSuccess: \"Τα αποτελέσματα αποθηκεύτηκαν με επιτυχία!\",\n    saveAgainButton: \"Προσπάθησε ξανά\",\n    timerMin: \"ελάχ\",\n    timerSec: \"δευτ\",\n    timerSpentAll: \"Έχετε δαπανήσει {0} σε αυτήν τη σελίδα και {1} συνολικά.\",\n    timerSpentPage: \"Έχετε ξοδέψει {0} σε αυτήν τη σελίδα.\",\n    timerSpentSurvey: \"Έχετε ξοδέψει συνολικά {0}.\",\n    timerLimitAll: \"Έχετε δαπανήσει {0} από {1} σε αυτήν τη σελίδα και {2} από {3} συνολικά.\",\n    timerLimitPage: \"Έχετε ξοδέψει {0} από {1} σε αυτήν τη σελίδα.\",\n    timerLimitSurvey: \"Έχετε ξοδέψει {0} από {1} συνολικά.\",\n    clearCaption: \"Εκκαθάριση\",\n    signaturePlaceHolder: \"Υπογράψτε εδώ\",\n    chooseFileCaption: \"Επιλέξτε αρχείο\",\n    takePhotoCaption: \"Λήψη φωτογραφίας\",\n    cameraPlaceHolder: \"Κάντε κλικ στο παρακάτω κουμπί για να τραβήξετε μια φωτογραφία χρησιμοποιώντας την κάμερα.\",\n    fileCameraDragAreaPlaceHolder: \"Σύρετε και αποθέστε ή επιλέξτε ένα αρχείο για αποστολή ή λήψη φωτογραφίας χρησιμοποιώντας την κάμερα.\",\n    replaceFileCaption: \"Αντικατάσταση αρχείου\",\n    removeFileCaption: \"Διαγράψτε αυτό το αρχείο\",\n    booleanCheckedLabel: \"Ναι\",\n    booleanUncheckedLabel: \"Όχι\",\n    confirmRemoveFile: \"Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτό το αρχείο: {0};\",\n    confirmRemoveAllFiles: \"Είστε βέβαιοι ότι θέλετε να διαγράψετε όλα τα αρχεία;\",\n    questionTitlePatternText: \"Τίτλος ερώτησης\",\n    modalCancelButtonText: \"Άκυρο\",\n    modalApplyButtonText: \"Εφαρμογή\",\n    filterStringPlaceholder: \"Πληκτρολογήστε για αναζήτηση...\",\n    emptyMessage: \"Δεν υπάρχουν δεδομένα προς εμφάνιση\",\n    noEntriesText: \"Δεν υπάρχουν ακόμη εγγραφές.\\nΚάντε κλικ στο κουμπί παρακάτω για να προσθέσετε μια νέα εγγραφή.\",\n    noEntriesReadonlyText: \"Δεν υπάρχουν καταχωρήσεις.\",\n    more: \"Περισσότερα\",\n    tagboxDoneButtonCaption: \"ΟΚ\",\n    selectToRankEmptyRankedAreaText: \"Όλες οι επιλογές κατατάσσονται\",\n    selectToRankEmptyUnrankedAreaText: \"Σύρετε και αποθέστε επιλογές εδώ για να τις κατατάξετε\"\n};\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"gr\"] = greekSurveyStrings;\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"gr\"] = \"ελληνικά\";\n// The following strings have been translated by a machine translation service\n// Remove those strings that you have corrected manually\n// panelDynamicTabTextFormat: \"Panel {panelIndex}\" => \"Πίνακας {panelIndex}\"\n// noEntriesReadonlyText: \"There are no entries.\" => \"Δεν υπάρχουν καταχωρήσεις.\"\n// selectToRankEmptyRankedAreaText: \"All choices are ranked\" => \"Όλες οι επιλογές κατατάσσονται\"\n// selectToRankEmptyUnrankedAreaText: \"Drag and drop choices here to rank them\" => \"Σύρετε και αποθέστε επιλογές εδώ για να τις κατατάξετε\"// takePhotoCaption: \"Take Photo\" => \"Λήψη φωτογραφίας\"\n// cameraPlaceHolder: \"Click the button below to take a photo using the camera.\" => \"Κάντε κλικ στο παρακάτω κουμπί για να τραβήξετε μια φωτογραφία χρησιμοποιώντας την κάμερα.\"\n// fileCameraDragAreaPlaceHolder: \"Drag and drop or select a file to upload or take a photo using the camera.\" => \"Σύρετε και αποθέστε ή επιλέξτε ένα αρχείο για αποστολή ή λήψη φωτογραφίας χρησιμοποιώντας την κάμερα.\"\n// replaceFileCaption: \"Replace file\" => \"Αντικατάσταση αρχείου\"\n\n\n/***/ }),\n\n/***/ \"./src/localization/hebrew.ts\":\n/*!************************************!*\\\n  !*** ./src/localization/hebrew.ts ***!\n  \\************************************/\n/*! exports provided: hebrewSurveyStrings */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1945120__) {\n\n\"use strict\";\n__nested_webpack_require_1945120__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_1945120__.d(__nested_webpack_exports__, \"hebrewSurveyStrings\", function() { return hebrewSurveyStrings; });\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1945120__(/*! survey-core */ \"./src/entries/core.ts\");\n\nvar hebrewSurveyStrings = {\n    pagePrevText: \"אחורה\",\n    pageNextText: \"קדימה\",\n    completeText: \"סיום\",\n    previewText: \"תצוגה מקדימה\",\n    editText: \"לַעֲרוֹך\",\n    startSurveyText: \"הַתחָלָה\",\n    otherItemText: \"אחר (נא לתאר)\",\n    noneItemText: \"אף אחד\",\n    selectAllItemText: \"בחר הכל\",\n    progressText: \"דף {1} מתוך {0}\",\n    indexText: \"{0} מתוך {1}\",\n    panelDynamicProgressText: \"הקלטה {0} מתוך {1}\",\n    panelDynamicTabTextFormat: \"לוח {panelIndex}\",\n    questionsProgressText: \"ענה על שאלות\",\n    emptySurvey: \"אין שאלות\",\n    completingSurvey: \"תודה על מילוי השאלון!\",\n    completingSurveyBefore: \"הרשומות שלנו מראות שכבר סיימת את הסקר הזה.\",\n    loadingSurvey: \"טעינה מהשרת...\",\n    placeholder: \"בחר...\",\n    ratingOptionsCaption: \"בחר...\",\n    value: \"ערך\",\n    requiredError: \"אנא השב על השאלה\",\n    requiredErrorInPanel: \"אנא ענה לפחות על שאלה אחת.\",\n    requiredInAllRowsError: \"אנא ענה על שאלות בכל השורות.\",\n    numericError: \"התשובה צריכה להיות מספר.\",\n    minError: \"הערך לא צריך להיות קטן מ {0}\",\n    maxError: \"הערך לא צריך להיות גדול מ- {0}\",\n    textMinLength: \"הזן לפחות {0} תווים.\",\n    textMaxLength: \"הזן פחות מ- {0} תווים.\",\n    textMinMaxLength: \"הזן יותר מ- {0} ופחות מ- {1} תווים.\",\n    minRowCountError: \"אנא מלא לפחות {0} שורות.\",\n    minSelectError: \"בחר לפחות {0} אפשרויות.\",\n    maxSelectError: \"בחר עד {0} אפשרויות.\",\n    numericMinMax: \"'{0}' חייב להיות שווה או גדול מ {1}, ושווה ל- {2} או פחות מ- {}}\",\n    numericMin: \"'{0}' חייב להיות שווה או גדול מ {1}\",\n    numericMax: \"'{0}' חייב להיות שווה או קטן מ {1}\",\n    invalidEmail: \"הזן כתובת דוא\\\"ל חוקית.\",\n    invalidExpression: \"הביטוי: {0} צריך להחזיר 'אמת'.\",\n    urlRequestError: \"הבקשה החזירה את השגיאה '{0}'. {1}\",\n    urlGetChoicesError: \"הבקשה החזירה נתונים ריקים או שהמאפיין 'נתיב' שגוי\",\n    exceedMaxSize: \"גודל הקובץ לא יעלה על {0}.\",\n    otherRequiredError: \"נא להזין נתונים בשדה \\\"אחר\\\"\",\n    uploadingFile: \"הקובץ שלך נטען. המתן מספר שניות ונסה שוב.\",\n    loadingFile: \"טוען...\",\n    chooseFile: \"לבחור קבצים...\",\n    noFileChosen: \"לא נבחר קובץ\",\n    fileDragAreaPlaceholder: \"גרור ושחרר קובץ לכאן או לחץ על הלחצן למטה ובחר קובץ להעלאה.\",\n    confirmDelete: \"האם אתה רוצה למחוק את הרשומה?\",\n    keyDuplicationError: \"ערך זה צריך להיות ייחודי.\",\n    addColumn: \"הוסף עמודה\",\n    addRow: \"להוסיף שורה\",\n    removeRow: \"לְהַסִיר\",\n    emptyRowsText: \"אין שורות.\",\n    addPanel: \"הוסף חדש\",\n    removePanel: \"לְהַסִיר\",\n    choices_Item: \"פריט\",\n    matrix_column: \"טור\",\n    matrix_row: \"שׁוּרָה\",\n    multipletext_itemname: \"טקסט\",\n    savingData: \"התוצאות נשמרות בשרת ...\",\n    savingDataError: \"אירעה שגיאה ולא הצלחנו לשמור את התוצאות.\",\n    savingDataSuccess: \"התוצאות נשמרו בהצלחה!\",\n    saveAgainButton: \"נסה שוב\",\n    timerMin: \"דקה\",\n    timerSec: \"שניות\",\n    timerSpentAll: \"הוצאת {0} בדף זה ובסך הכל {1}.\",\n    timerSpentPage: \"הוצאת {0} בדף זה.\",\n    timerSpentSurvey: \"הוצאת סכום כולל של {0}.\",\n    timerLimitAll: \"הוצאת {0} מתוך {1} בדף זה ו- {2} מתוך {3} בסך הכל.\",\n    timerLimitPage: \"הוצאת {0} מתוך {1} בדף זה.\",\n    timerLimitSurvey: \"הוצאת סכום כולל של {0} מתוך {1}.\",\n    clearCaption: \"ברור\",\n    signaturePlaceHolder: \"חתום כאן\",\n    chooseFileCaption: \"בחר קובץ\",\n    takePhotoCaption: \"צלם תמונה\",\n    cameraPlaceHolder: \"לחץ על הלחצן למטה כדי לצלם תמונה באמצעות המצלמה.\",\n    fileCameraDragAreaPlaceHolder: \"גרור ושחרר או בחר קובץ כדי להעלות או לצלם תמונה באמצעות המצלמה.\",\n    replaceFileCaption: \"החלפת קובץ\",\n    removeFileCaption: \"הסר קובץ זה\",\n    booleanCheckedLabel: \"כן\",\n    booleanUncheckedLabel: \"לא\",\n    confirmRemoveFile: \"האם אתה בטוח שברצונך להסיר קובץ זה: {0}?\",\n    confirmRemoveAllFiles: \"האם אתה בטוח שברצונך להסיר את כל הקבצים?\",\n    questionTitlePatternText: \"כותרת שאלה\",\n    modalCancelButtonText: \"ביטל\",\n    modalApplyButtonText: \"החל\",\n    filterStringPlaceholder: \"הקלד כדי לחפש...\",\n    emptyMessage: \"אין נתונים להצגה\",\n    noEntriesText: \"אין עדיין ערכים.\\nלחץ על הלחצן למטה כדי להוסיף ערך חדש.\",\n    noEntriesReadonlyText: \"אין ערכים.\",\n    more: \"עוד\",\n    tagboxDoneButtonCaption: \"אוקיי\",\n    selectToRankEmptyRankedAreaText: \"כל האפשרויות מדורגות\",\n    selectToRankEmptyUnrankedAreaText: \"גרור ושחרר אפשרויות לכאן כדי לדרג אותן\"\n};\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"he\"] = hebrewSurveyStrings;\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"he\"] = \"עברית\";\n// The following strings have been translated by a machine translation service\n// Remove those strings that you have corrected manually\n// indexText: \"{0} of {1}\" => \"{0} מתוך {1}\"\n// panelDynamicTabTextFormat: \"Panel {panelIndex}\" => \"לוח {panelIndex}\"\n// ratingOptionsCaption: \"Select...\" => \"בחר...\"\n// minError: \"The value should not be less than {0}\" => \"הערך לא צריך להיות קטן מ {0}\"\n// maxError: \"The value should not be greater than {0}\" => \"הערך לא צריך להיות גדול מ- {0}\"\n// fileDragAreaPlaceholder: \"Drag and drop a file here or click the button below and choose a file to upload.\" => \"גרור ושחרר קובץ לכאן או לחץ על הלחצן למטה ובחר קובץ להעלאה.\"\n// emptyRowsText: \"There are no rows.\" => \"אין שורות.\"\n// multipletext_itemname: \"text\" => \"טקסט\"\n// signaturePlaceHolder: \"Sign here\" => \"חתום כאן\"\n// modalCancelButtonText: \"Cancel\" => \"ביטל\"\n// modalApplyButtonText: \"Apply\" => \"החל\"\n// filterStringPlaceholder: \"Type to search...\" => \"הקלד כדי לחפש...\"\n// emptyMessage: \"No data to display\" => \"אין נתונים להצגה\"\n// noEntriesText: \"There are no entries yet.\\nClick the button below to add a new entry.\" => \"אין עדיין ערכים.\\nלחץ על הלחצן למטה כדי להוסיף ערך חדש.\"\n// noEntriesReadonlyText: \"There are no entries.\" => \"אין ערכים.\"\n// more: \"More\" => \"עוד\"\n// tagboxDoneButtonCaption: \"OK\" => \"אוקיי\"\n// selectToRankEmptyRankedAreaText: \"All choices are ranked\" => \"כל האפשרויות מדורגות\"\n// selectToRankEmptyUnrankedAreaText: \"Drag and drop choices here to rank them\" => \"גרור ושחרר אפשרויות לכאן כדי לדרג אותן\"// takePhotoCaption: \"Take Photo\" => \"צלם תמונה\"\n// cameraPlaceHolder: \"Click the button below to take a photo using the camera.\" => \"לחץ על הלחצן למטה כדי לצלם תמונה באמצעות המצלמה.\"\n// fileCameraDragAreaPlaceHolder: \"Drag and drop or select a file to upload or take a photo using the camera.\" => \"גרור ושחרר או בחר קובץ כדי להעלות או לצלם תמונה באמצעות המצלמה.\"\n// replaceFileCaption: \"Replace file\" => \"החלפת קובץ\"\n\n\n/***/ }),\n\n/***/ \"./src/localization/hindi.ts\":\n/*!***********************************!*\\\n  !*** ./src/localization/hindi.ts ***!\n  \\***********************************/\n/*! exports provided: hindiStrings */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1952072__) {\n\n\"use strict\";\n__nested_webpack_require_1952072__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_1952072__.d(__nested_webpack_exports__, \"hindiStrings\", function() { return hindiStrings; });\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1952072__(/*! survey-core */ \"./src/entries/core.ts\");\n\nvar hindiStrings = {\n    pagePrevText: \"पिछला\",\n    pageNextText: \"अगला\",\n    completeText: \"पूरा\",\n    previewText: \"पूर्वसमीक्षा\",\n    editText: \"संपादित\",\n    startSurveyText: \"शुरू\",\n    otherItemText: \"दूसरा (वर्णन करें)\",\n    noneItemText: \"कोई नहीं\",\n    selectAllItemText: \"सभी का चयन करें\",\n    progressText: \"पृष्ठ 1 में से 0\",\n    indexText: \"{1} का {0}\",\n    panelDynamicProgressText: \" दस्तावेज {1} के {0}\",\n    panelDynamicTabTextFormat: \"पैनल {panelIndex}\",\n    questionsProgressText: \"{1} सवालों में से {0} के जवाब दिए\",\n    emptySurvey: \"सर्वेक्षण में कोई दृश्यमान पृष्ठ या प्रश्न नहीं है\",\n    completingSurvey: \"सर्वेक्षण को पूरा करने के लिए धन्यवाद\",\n    completingSurveyBefore: \" हमारे रिकॉर्ड बताते हैं कि आप पहले ही इस सर्वेक्षण को पूरा कर चुके हैं\",\n    loadingSurvey: \"सर्वेक्षण खुल रहा है.…\",\n    placeholder: \"चुनें\",\n    ratingOptionsCaption: \"चुनना।।।\",\n    value: \"मूल्य\",\n    requiredError: \"कृपया प्रश्न का उत्तर दें\",\n    requiredErrorInPanel: \"कृपया कम से कम एक प्रश्न का उत्तर दें\",\n    requiredInAllRowsError: \"कृपया सभी पंक्तियों में सवालों के जवाब दें\",\n    numericError: \"मूल्य संख्यात्मक होना चाहिए\",\n    minError: \"मान {0} से कम नहीं होना चाहिए\",\n    maxError: \"मान {0} से अधिक नहीं होना चाहिए\",\n    textMinLength: \"कृपया कम से कम {0} वर्ण दर्ज करें\",\n    textMaxLength: \"कृपया {0} से कम वर्ण दर्ज करें\",\n    textMinMaxLength: \"कृपया {0} से अधिक और {1} से कम पात्रों में प्रवेश करें\",\n    minRowCountError: \"कृपया कम से कम {0} पंक्तियों को भरें\",\n    minSelectError: \"कृपया कम से कम {0} विकल्प का चयन करें\",\n    maxSelectError: \"कृपया {0} विकल्पों से अधिक नहीं चुनें\",\n    numericMinMax: \"'{0}' {1} से बराबर या अधिक और {2} से बराबर या कम होना चाहिए\",\n    numericMin: \"'{0}' {1} से बराबर या अधिक होना चाहिए\",\n    numericMax: \"'{0}' {1} से बराबर या कम होना चाहिए\",\n    invalidEmail: \"कृपया एक वैध ईमेल पता दर्ज करें\",\n    invalidExpression: \"अभिव्यक्ति: {0} को ' सच ' लौटना चाहिए\",\n    urlRequestError: \"अनुरोध लौटाया त्रुटि '{0}' . {1}\",\n    urlGetChoicesError: \"अनुरोध ने खाली डेटा वापस कर दिया है \",\n    exceedMaxSize: \"फ़ाइल का आकार {0} से अधिक नहीं होना चाहिए  या फिर 'पाथ' प्रॉपर्टी गलत है\",\n    otherRequiredError: \"कृपया दूसरा मूल्य दर्ज करें\",\n    uploadingFile: \"आपकी फाइल अपलोड हो रही है। कृपया कई सेकंड इंतजार करें और फिर से प्रयास करें।\",\n    loadingFile: \"लोडिंग\",\n    chooseFile: \"फ़ाइल चुनें\",\n    noFileChosen: \"कोई फाइल नहीं चुनी गई\",\n    fileDragAreaPlaceholder: \"यहां एक फ़ाइल खींचें और छोड़ें या नीचे दिए गए बटन पर क्लिक करें और अपलोड करने के लिए एक फ़ाइल चुनें।\",\n    confirmDelete: \"क्या आप रिकॉर्ड हटाना चाहते हैं\",\n    keyDuplicationError: \"यह मान अनोखा होना चाहिए\",\n    addColumn: \"कॉलम जोड़ें\",\n    addRow: \"पंक्ति जोड़ें\",\n    removeRow: \"हटाए\",\n    emptyRowsText: \"कोई पंक्तियाँ नहीं हैं.\",\n    addPanel: \"नया जोड़ें\",\n    removePanel: \"हटाए\",\n    choices_Item: \"मद\",\n    matrix_column: \"कॉलम\",\n    matrix_row: \"पंक्ति\",\n    multipletext_itemname: \"टेक्स्ट\",\n    savingData: \"परिणाम सर्वर पर सेव हो रहे हैं\",\n    savingDataError: \"एक त्रुटि हुई और हम परिणामों को नहीं सेव कर सके\",\n    savingDataSuccess: \"परिणाम सफलतापूर्वक सेव हो गए\",\n    saveAgainButton: \"फिर कोशिश करो\",\n    timerMin: \"मिनट\",\n    timerSec: \"सेकंड\",\n    timerSpentAll: \"आपने इस पृष्ठ पर {0} खर्च किए हैं और कुल {1}\",\n    timerSpentPage: \"आपने इस पृष्ठ पर {0} खर्च किया है\",\n    timerSpentSurvey: \"आपने कुल {0} खर्च किया है\",\n    timerLimitAll: \"आपने इस पृष्ठ पर {1} की {0} और कुल {3} की {2} खर्च की है।\",\n    timerLimitPage: \"आपने इस पृष्ठ पर {1} का {0} खर्च किया है\",\n    timerLimitSurvey: \"आपने कुल {1} की {0} खर्च की है\",\n    clearCaption: \"स्पष्ट\",\n    signaturePlaceHolder: \"यहां साइन करें\",\n    chooseFileCaption: \"फ़ाइल चुनें\",\n    takePhotoCaption: \"फोटो ले लो\",\n    cameraPlaceHolder: \"कैमरे का उपयोग करके फोटो लेने के लिए नीचे दिए गए बटन पर क्लिक करें।\",\n    fileCameraDragAreaPlaceHolder: \"कैमरे का उपयोग करके फ़ोटो अपलोड करने या फ़ोटो लेने के लिए किसी फ़ाइल को खींचें और छोड़ें या चुनें.\",\n    replaceFileCaption: \"फ़ाइल बदलें\",\n    removeFileCaption: \"इस फाइल को निकालें\",\n    booleanCheckedLabel: \"हाँ\",\n    booleanUncheckedLabel: \"नहीं\",\n    confirmRemoveFile: \"क्या आप सुनिश्चित हैं कि आप इस फ़ाइल को हटाना चाहते हैं: {0}\",\n    confirmRemoveAllFiles: \"क्या आप सुनिश्चित हैं कि आप सभी फ़ाइलों को हटाना चाहते हैं\",\n    questionTitlePatternText: \"प्रश्न का शीर्षक\",\n    modalCancelButtonText: \"रद्द करना\",\n    modalApplyButtonText: \"लागू करना\",\n    filterStringPlaceholder: \"खोज करने के लिए टाइप करें...\",\n    emptyMessage: \"प्रदर्शित करने के लिए कोई डेटा नहीं\",\n    noEntriesText: \"अभी तक कोई प्रविष्टियां नहीं हैं।\\nनई प्रविष्टि जोड़ने के लिए नीचे दिए गए बटन पर क्लिक करें.\",\n    noEntriesReadonlyText: \"कोई प्रविष्टियाँ नहीं हैं.\",\n    more: \"अधिक\",\n    tagboxDoneButtonCaption: \"ठीक है\",\n    selectToRankEmptyRankedAreaText: \"सभी विकल्पों को रैंक किया गया है\",\n    selectToRankEmptyUnrankedAreaText: \"विकल्पों को रैंक करने के लिए उन्हें यहां खींचें और छोड़ दें\"\n};\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"hi\"] = hindiStrings;\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"hi\"] = \"hindi\";\n// The following strings have been translated by a machine translation service\n// Remove those strings that you have corrected manually\n// noneItemText: \"None\" => \"कोई नहीं\"\n// indexText: \"{0} of {1}\" => \"{1} का {0}\"\n// panelDynamicTabTextFormat: \"Panel {panelIndex}\" => \"पैनल {panelIndex}\"\n// ratingOptionsCaption: \"Select...\" => \"चुनना।।।\"\n// minError: \"The value should not be less than {0}\" => \"मान {0} से कम नहीं होना चाहिए\"\n// maxError: \"The value should not be greater than {0}\" => \"मान {0} से अधिक नहीं होना चाहिए\"\n// fileDragAreaPlaceholder: \"Drag and drop a file here or click the button below and choose a file to upload.\" => \"यहां एक फ़ाइल खींचें और छोड़ें या नीचे दिए गए बटन पर क्लिक करें और अपलोड करने के लिए एक फ़ाइल चुनें।\"\n// emptyRowsText: \"There are no rows.\" => \"कोई पंक्तियाँ नहीं हैं.\"\n// multipletext_itemname: \"text\" => \"टेक्स्ट\"\n// signaturePlaceHolder: \"Sign here\" => \"यहां साइन करें\"\n// modalCancelButtonText: \"Cancel\" => \"रद्द करना\"\n// modalApplyButtonText: \"Apply\" => \"लागू करना\"\n// filterStringPlaceholder: \"Type to search...\" => \"खोज करने के लिए टाइप करें...\"\n// emptyMessage: \"No data to display\" => \"प्रदर्शित करने के लिए कोई डेटा नहीं\"\n// noEntriesText: \"There are no entries yet.\\nClick the button below to add a new entry.\" => \"अभी तक कोई प्रविष्टियां नहीं हैं।\\nनई प्रविष्टि जोड़ने के लिए नीचे दिए गए बटन पर क्लिक करें.\"\n// noEntriesReadonlyText: \"There are no entries.\" => \"कोई प्रविष्टियाँ नहीं हैं.\"\n// more: \"More\" => \"अधिक\"\n// tagboxDoneButtonCaption: \"OK\" => \"ठीक है\"\n// selectToRankEmptyRankedAreaText: \"All choices are ranked\" => \"सभी विकल्पों को रैंक किया गया है\"\n// selectToRankEmptyUnrankedAreaText: \"Drag and drop choices here to rank them\" => \"विकल्पों को रैंक करने के लिए उन्हें यहां खींचें और छोड़ दें\"// takePhotoCaption: \"Take Photo\" => \"फोटो ले लो\"\n// cameraPlaceHolder: \"Click the button below to take a photo using the camera.\" => \"कैमरे का उपयोग करके फोटो लेने के लिए नीचे दिए गए बटन पर क्लिक करें।\"\n// fileCameraDragAreaPlaceHolder: \"Drag and drop or select a file to upload or take a photo using the camera.\" => \"कैमरे का उपयोग करके फ़ोटो अपलोड करने या फ़ोटो लेने के लिए किसी फ़ाइल को खींचें और छोड़ें या चुनें.\"\n// replaceFileCaption: \"Replace file\" => \"फ़ाइल बदलें\"\n\n\n/***/ }),\n\n/***/ \"./src/localization/hungarian.ts\":\n/*!***************************************!*\\\n  !*** ./src/localization/hungarian.ts ***!\n  \\***************************************/\n/*! exports provided: hungarianSurveyStrings */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1960029__) {\n\n\"use strict\";\n__nested_webpack_require_1960029__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_1960029__.d(__nested_webpack_exports__, \"hungarianSurveyStrings\", function() { return hungarianSurveyStrings; });\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1960029__(/*! survey-core */ \"./src/entries/core.ts\");\n\nvar hungarianSurveyStrings = {\n    pagePrevText: \"Vissza\",\n    pageNextText: \"Tovább\",\n    completeText: \"Kész\",\n    previewText: \"Előnézet\",\n    editText: \"Szerkesztés\",\n    startSurveyText: \"Rajt\",\n    otherItemText: \"Egyéb (adja meg)\",\n    noneItemText: \"Egyik sem\",\n    selectAllItemText: \"Mindet kiválaszt\",\n    progressText: \"{0}./{1} oldal\",\n    indexText: \"{0} {1} közül\",\n    panelDynamicProgressText: \"{0} / {1} rekord\",\n    panelDynamicTabTextFormat: \"Panel {panelIndex}\",\n    questionsProgressText: \"Válaszolt kérdések: {0} / {1}\",\n    emptySurvey: \"The survey doesn't contain visible pages or questions.\",\n    completingSurvey: \"Köszönjük, hogy kitöltötte felmérésünket!\",\n    completingSurveyBefore: \"Már kitöltötte a felmérést.\",\n    loadingSurvey: \"Felmérés betöltése...\",\n    placeholder: \"Válasszon...\",\n    ratingOptionsCaption: \"Kiválaszt...\",\n    value: \"érték\",\n    requiredError: \"Kérjük, válaszolja meg ezt a kérdést!\",\n    requiredErrorInPanel: \"Kérjük, válaszoljon legalább egy kérdésre.\",\n    requiredInAllRowsError: \"Kérjük adjon választ minden sorban!\",\n    numericError: \"Az érték szám kell, hogy legyen!\",\n    minError: \"Az érték nem lehet kisebb, mint {0}\",\n    maxError: \"Az érték nem lehet nagyobb, mint {0}\",\n    textMinLength: \"Adjon meg legalább {0} karaktert!\",\n    textMaxLength: \"Legfeljebb {0} karaktert adjon meg!\",\n    textMinMaxLength: \"Adjon meg legalább {0}, de legfeljebb {1} karaktert!\",\n    minRowCountError: \"Töltsön ki minimum {0} sort!\",\n    minSelectError: \"Válasszon ki legalább {0} lehetőséget!\",\n    maxSelectError: \"Ne válasszon többet, mint {0} lehetőség!\",\n    numericMinMax: \"'{0}' legyen nagyobb, vagy egyenlő, mint {1} és kisebb, vagy egyenlő, mint {2}!\",\n    numericMin: \"'{0}' legyen legalább {1}!\",\n    numericMax: \"The '{0}' ne legyen nagyobb, mint {1}!\",\n    invalidEmail: \"Adjon meg egy valós email címet!\",\n    invalidExpression: \"A következő kifejezés: {0} vissza kell adnia az „igaz” értéket.\",\n    urlRequestError: \"A lekérdezés hibával tért vissza: '{0}'. {1}\",\n    urlGetChoicesError: \"A lekérdezés üres adattal tért vissza, vagy a 'path' paraméter helytelen.\",\n    exceedMaxSize: \"A méret nem lehet nagyobb, mint {0}.\",\n    otherRequiredError: \"Adja meg az egyéb értéket!\",\n    uploadingFile: \"Feltöltés folyamatban. Várjon pár másodpercet, majd próbálja újra.\",\n    loadingFile: \"Betöltés...\",\n    chooseFile: \"Fájlok kiválasztása ...\",\n    noFileChosen: \"Nincs kiválasztva fájl\",\n    fileDragAreaPlaceholder: \"Dobjon ide egy fájlt, vagy kattintson az alábbi gombra a fájl betöltéséhez.\",\n    confirmDelete: \"Törli ezt a rekordot?\",\n    keyDuplicationError: \"Az értéknek egyedinek kell lennie.\",\n    addColumn: \"Oszlop hozzáadása\",\n    addRow: \"Sor hozzáadása\",\n    removeRow: \"Eltávolítás\",\n    emptyRowsText: \"Nincsenek sorok.\",\n    addPanel: \"Új hozzáadása\",\n    removePanel: \"Eltávolítás\",\n    choices_Item: \"elem\",\n    matrix_column: \"Oszlop\",\n    matrix_row: \"Sor\",\n    multipletext_itemname: \"SMS\",\n    savingData: \"Eredmény mentése a szerverre...\",\n    savingDataError: \"Egy hiba folytán nem tudtuk elmenteni az eredményt.\",\n    savingDataSuccess: \"Eredmény sikeresen mentve!\",\n    saveAgainButton: \"Próbálja újra\",\n    timerMin: \"min\",\n    timerSec: \"sec\",\n    timerSpentAll: \"Ön {0} összeget költött ezen az oldalon, és összesen {1}.\",\n    timerSpentPage: \"{0} összeget költött ezen az oldalon.\",\n    timerSpentSurvey: \"Összesen {0} költött.\",\n    timerLimitAll: \"Ön {0} / {1} összeget költött ezen az oldalon, és összesen {2} / {3}.\",\n    timerLimitPage: \"Ön {0} / {1} összeget költött ezen az oldalon.\",\n    timerLimitSurvey: \"Összesen {0} / {1} összeget költött el.\",\n    clearCaption: \"Egyértelmű\",\n    signaturePlaceHolder: \"Írja alá itt\",\n    chooseFileCaption: \"Válassz fájlt\",\n    takePhotoCaption: \"Fotó készítése\",\n    cameraPlaceHolder: \"Kattintson az alábbi gombra, hogy fényképet készítsen a fényképezőgéppel.\",\n    fileCameraDragAreaPlaceHolder: \"Húzzon át vagy válasszon ki egy fájlt, amelyet fel szeretne tölteni vagy fényképet szeretne készíteni a kamerával.\",\n    replaceFileCaption: \"Fájl cseréje\",\n    removeFileCaption: \"Távolítsa el ezt a fájlt\",\n    booleanCheckedLabel: \"Igen\",\n    booleanUncheckedLabel: \"Nem\",\n    confirmRemoveFile: \"Biztosan eltávolítja ezt a fájlt: {0}?\",\n    confirmRemoveAllFiles: \"Biztosan el akarja távolítani az összes fájlt?\",\n    questionTitlePatternText: \"Kérdés címe\",\n    modalCancelButtonText: \"Érvénytelenít\",\n    modalApplyButtonText: \"Alkalmaz\",\n    filterStringPlaceholder: \"Írja be a kereséshez...\",\n    emptyMessage: \"Nincs megjeleníthető adat\",\n    noEntriesText: \"Még nincsenek bejegyzések.\\nKattintson az alábbi gombra egy új bejegyzés hozzáadásához.\",\n    noEntriesReadonlyText: \"Nincsenek bejegyzések.\",\n    more: \"Több\",\n    tagboxDoneButtonCaption: \"OKÉ\",\n    selectToRankEmptyRankedAreaText: \"Minden választási lehetőség rangsorolva van\",\n    selectToRankEmptyUnrankedAreaText: \"Húzza ide a választási lehetőségeket a rangsoroláshoz\"\n};\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"hu\"] = hungarianSurveyStrings;\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"hu\"] = \"magyar\";\n// The following strings have been translated by a machine translation service\n// Remove those strings that you have corrected manually\n// indexText: \"{0} of {1}\" => \"{0} {1} közül\"\n// panelDynamicTabTextFormat: \"Panel {panelIndex}\" => \"Panel {panelIndex}\"\n// ratingOptionsCaption: \"Select...\" => \"Kiválaszt...\"\n// minError: \"The value should not be less than {0}\" => \"Az érték nem lehet kisebb, mint {0}\"\n// maxError: \"The value should not be greater than {0}\" => \"Az érték nem lehet nagyobb, mint {0}\"\n// emptyRowsText: \"There are no rows.\" => \"Nincsenek sorok.\"\n// multipletext_itemname: \"text\" => \"SMS\"\n// signaturePlaceHolder: \"Sign here\" => \"Írja alá itt\"\n// modalCancelButtonText: \"Cancel\" => \"Érvénytelenít\"\n// modalApplyButtonText: \"Apply\" => \"Alkalmaz\"\n// filterStringPlaceholder: \"Type to search...\" => \"Írja be a kereséshez...\"\n// emptyMessage: \"No data to display\" => \"Nincs megjeleníthető adat\"\n// noEntriesText: \"There are no entries yet.\\nClick the button below to add a new entry.\" => \"Még nincsenek bejegyzések.\\nKattintson az alábbi gombra egy új bejegyzés hozzáadásához.\"\n// noEntriesReadonlyText: \"There are no entries.\" => \"Nincsenek bejegyzések.\"\n// more: \"More\" => \"Több\"\n// tagboxDoneButtonCaption: \"OK\" => \"OKÉ\"\n// selectToRankEmptyRankedAreaText: \"All choices are ranked\" => \"Minden választási lehetőség rangsorolva van\"\n// selectToRankEmptyUnrankedAreaText: \"Drag and drop choices here to rank them\" => \"Húzza ide a választási lehetőségeket a rangsoroláshoz\"// takePhotoCaption: \"Take Photo\" => \"Fotó készítése\"\n// cameraPlaceHolder: \"Click the button below to take a photo using the camera.\" => \"Kattintson az alábbi gombra, hogy fényképet készítsen a fényképezőgéppel.\"\n// fileCameraDragAreaPlaceHolder: \"Drag and drop or select a file to upload or take a photo using the camera.\" => \"Húzzon át vagy válasszon ki egy fájlt, amelyet fel szeretne tölteni vagy fényképet szeretne készíteni a kamerával.\"\n// replaceFileCaption: \"Replace file\" => \"Fájl cseréje\"\n\n\n/***/ }),\n\n/***/ \"./src/localization/icelandic.ts\":\n/*!***************************************!*\\\n  !*** ./src/localization/icelandic.ts ***!\n  \\***************************************/\n/*! exports provided: icelandicSurveyStrings */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1967850__) {\n\n\"use strict\";\n__nested_webpack_require_1967850__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_1967850__.d(__nested_webpack_exports__, \"icelandicSurveyStrings\", function() { return icelandicSurveyStrings; });\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1967850__(/*! survey-core */ \"./src/entries/core.ts\");\n\nvar icelandicSurveyStrings = {\n    pagePrevText: \"Tilbaka\",\n    pageNextText: \"Áfram\",\n    completeText: \"Lokið\",\n    previewText: \"Forskoða\",\n    editText: \"Breyta\",\n    startSurveyText: \"Byrjaðu\",\n    otherItemText: \"Hinn (skýring)\",\n    noneItemText: \"Enginn\",\n    selectAllItemText: \"Velja allt\",\n    progressText: \"Síða {0} of {1}\",\n    indexText: \"{0} af {1}\",\n    panelDynamicProgressText: \"Taka upp {0} af {1}\",\n    panelDynamicTabTextFormat: \"Pallborð {panelIndex}\",\n    questionsProgressText: \"Svarað {0} / {1} spurningum\",\n    emptySurvey: \"Það er enginn síða eða spurningar í þessari könnun.\",\n    completingSurvey: \"Takk fyrir að fyllja út þessa könnun!\",\n    completingSurveyBefore: \"Skrár okkar sýna að þú hefur þegar lokið þessari könnun.\",\n    loadingSurvey: \"Könnunin er að hlaða...\",\n    placeholder: \"Veldu...\",\n    ratingOptionsCaption: \"Velja...\",\n    value: \"gildi\",\n    requiredError: \"Vinsamlegast svarið spurningunni.\",\n    requiredErrorInPanel: \"Vinsamlegast svaraðu að minnsta kosti einni spurningu.\",\n    requiredInAllRowsError: \"Vinsamlegast svarið spurningum í öllum röðum.\",\n    numericError: \"Þetta gildi verður að vera tala.\",\n    minError: \"Gildið má ekki vera lægra en {0}\",\n    maxError: \"Gildið má ekki vera hærra en {0}\",\n    textMinLength: \"Það ætti að vera minnst {0} tákn.\",\n    textMaxLength: \"Það ætti að vera mest {0} tákn.\",\n    textMinMaxLength: \"Það ætti að vera fleiri en {0} og færri en {1} tákn.\",\n    minRowCountError: \"Vinsamlegast fyllið úr að minnsta kosti {0} raðir.\",\n    minSelectError: \"Vinsamlegast veljið að minnsta kosti {0} möguleika.\",\n    maxSelectError: \"Vinsamlegast veljið ekki fleiri en {0} möguleika.\",\n    numericMinMax: \"'{0}' ætti að vera meira en eða jafnt og {1} minna en eða jafnt og {2}\",\n    numericMin: \"{0}' ætti að vera meira en eða jafnt og {1}\",\n    numericMax: \"'{0}' ætti að vera minna en eða jafnt og {1}\",\n    invalidEmail: \"Vinsamlegast sláið inn gilt netfang.\",\n    invalidExpression: \"Tjáningin: {0} ætti að skila 'satt'.\",\n    urlRequestError: \"Beiðninn skilaði eftirfaranadi villu '{0}'. {1}\",\n    urlGetChoicesError: \"Beiðninng skilaði engum gögnum eða slóðinn var röng\",\n    exceedMaxSize: \"Skráinn skal ekki vera stærri en {0}.\",\n    otherRequiredError: \"Vinamlegast fyllið út hitt gildið.\",\n    uploadingFile: \"Skráinn þín var send. Vinsamlegast bíðið í nokkrar sekúndur og reynið aftur.\",\n    loadingFile: \"Hleður ...\",\n    chooseFile: \"Veldu skrár ...\",\n    noFileChosen: \"Engin skrá valin\",\n    fileDragAreaPlaceholder: \"Dragðu og slepptu skrá hér eða smelltu á hnappinn hér að neðan og veldu skrá til að hlaða upp.\",\n    confirmDelete: \"Viltu eyða skránni?\",\n    keyDuplicationError: \"Þetta gildi ætti að vera einstakt.\",\n    addColumn: \"Bæta við dálki\",\n    addRow: \"Bæta við röð\",\n    removeRow: \"Fjarlægja\",\n    emptyRowsText: \"Það eru engar raðir.\",\n    addPanel: \"Bæta við nýju\",\n    removePanel: \"Fjarlægðu\",\n    choices_Item: \"hlutur\",\n    matrix_column: \"Dálkur\",\n    matrix_row: \"Röð\",\n    multipletext_itemname: \"Texti\",\n    savingData: \"Niðurstöðurnar eru að spara á netþjóninum ... \",\n    savingDataError: \"Villa kom upp og við gátum ekki vistað niðurstöðurnar.\",\n    savingDataSuccess: \"Árangurinn var vistaður með góðum árangri!\",\n    saveAgainButton: \"Reyndu aftur\",\n    timerMin: \"mín\",\n    timerSec: \"sek\",\n    timerSpentAll: \"Þú hefur eytt {0} á þessari síðu og {1} samtals.\",\n    timerSpentPage: \"Þú hefur eytt {0} á þessari síðu.\",\n    timerSpentSurvey: \"Þú hefur eytt {0} samtals.\",\n    timerLimitAll: \"Þú hefur eytt {0} af {1} á þessari síðu og {2} af {3} samtals.\",\n    timerLimitPage: \"Þú hefur eytt {0} af {1} á þessari síðu.\",\n    timerLimitSurvey: \"Þú hefur eytt {0} af {1} samtals.\",\n    clearCaption: \"Hreinsa\",\n    signaturePlaceHolder: \"Kvittađu hér\",\n    chooseFileCaption: \"Veldu skrá\",\n    takePhotoCaption: \"Taka mynd\",\n    cameraPlaceHolder: \"Smelltu á hnappinn hér að neðan til að taka mynd með myndavélinni.\",\n    fileCameraDragAreaPlaceHolder: \"Dragðu og slepptu eða veldu skrá til að hlaða upp eða taka mynd með myndavélinni.\",\n    replaceFileCaption: \"Skipta út skrá\",\n    removeFileCaption: \"Fjarlægðu þessa skrá\",\n    booleanCheckedLabel: \"Já\",\n    booleanUncheckedLabel: \"Nei\",\n    confirmRemoveFile: \"Ertu viss um að þú viljir fjarlægja þessa skrá: {0}?\",\n    confirmRemoveAllFiles: \"Ertu viss um að þú viljir fjarlægja allar skrár?\",\n    questionTitlePatternText: \"Spurningartitill\",\n    modalCancelButtonText: \"Afturkalla\",\n    modalApplyButtonText: \"Nota\",\n    filterStringPlaceholder: \"Sláðu inn til að leita...\",\n    emptyMessage: \"Engin gögn til að birta\",\n    noEntriesText: \"Það eru engar færslur ennþá.\\nSmelltu á hnappinn hér að neðan til að bæta við nýrri færslu.\",\n    noEntriesReadonlyText: \"Það eru engar færslur.\",\n    more: \"Fleiri\",\n    tagboxDoneButtonCaption: \"ÓKEI\",\n    selectToRankEmptyRankedAreaText: \"Öllum valkostum er raðað\",\n    selectToRankEmptyUnrankedAreaText: \"Dragðu og slepptu valkostum hér til að raða þeim\"\n};\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"is\"] = icelandicSurveyStrings;\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"is\"] = \"íslenska\";\n// The following strings have been translated by a machine translation service\n// Remove those strings that you have corrected manually\n// indexText: \"{0} of {1}\" => \"{0} af {1}\"\n// panelDynamicTabTextFormat: \"Panel {panelIndex}\" => \"Pallborð {panelIndex}\"\n// ratingOptionsCaption: \"Select...\" => \"Velja...\"\n// minError: \"The value should not be less than {0}\" => \"Gildið má ekki vera lægra en {0}\"\n// maxError: \"The value should not be greater than {0}\" => \"Gildið má ekki vera hærra en {0}\"\n// fileDragAreaPlaceholder: \"Drag and drop a file here or click the button below and choose a file to upload.\" => \"Dragðu og slepptu skrá hér eða smelltu á hnappinn hér að neðan og veldu skrá til að hlaða upp.\"\n// emptyRowsText: \"There are no rows.\" => \"Það eru engar raðir.\"\n// multipletext_itemname: \"text\" => \"Texti\"\n// signaturePlaceHolder: \"Sign here\" => \"Kvittađu hér\"\n// modalCancelButtonText: \"Cancel\" => \"Afturkalla\"\n// modalApplyButtonText: \"Apply\" => \"Nota\"\n// filterStringPlaceholder: \"Type to search...\" => \"Sláðu inn til að leita...\"\n// emptyMessage: \"No data to display\" => \"Engin gögn til að birta\"\n// noEntriesText: \"There are no entries yet.\\nClick the button below to add a new entry.\" => \"Það eru engar færslur ennþá.\\nSmelltu á hnappinn hér að neðan til að bæta við nýrri færslu.\"\n// noEntriesReadonlyText: \"There are no entries.\" => \"Það eru engar færslur.\"\n// more: \"More\" => \"Fleiri\"\n// tagboxDoneButtonCaption: \"OK\" => \"ÓKEI\"\n// selectToRankEmptyRankedAreaText: \"All choices are ranked\" => \"Öllum valkostum er raðað\"\n// selectToRankEmptyUnrankedAreaText: \"Drag and drop choices here to rank them\" => \"Dragðu og slepptu valkostum hér til að raða þeim\"// takePhotoCaption: \"Take Photo\" => \"Taka mynd\"\n// cameraPlaceHolder: \"Click the button below to take a photo using the camera.\" => \"Smelltu á hnappinn hér að neðan til að taka mynd með myndavélinni.\"\n// fileCameraDragAreaPlaceHolder: \"Drag and drop or select a file to upload or take a photo using the camera.\" => \"Dragðu og slepptu eða veldu skrá til að hlaða upp eða taka mynd með myndavélinni.\"\n// replaceFileCaption: \"Replace file\" => \"Skipta út skrá\"\n\n\n/***/ }),\n\n/***/ \"./src/localization/indonesian.ts\":\n/*!****************************************!*\\\n  !*** ./src/localization/indonesian.ts ***!\n  \\****************************************/\n/*! exports provided: indonesianStrings */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1975808__) {\n\n\"use strict\";\n__nested_webpack_require_1975808__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_1975808__.d(__nested_webpack_exports__, \"indonesianStrings\", function() { return indonesianStrings; });\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1975808__(/*! survey-core */ \"./src/entries/core.ts\");\n\nvar indonesianStrings = {\n    pagePrevText: \"Sebelumnya\",\n    pageNextText: \"Selanjutnya\",\n    completeText: \"Selesai\",\n    previewText: \"Pratinjau\",\n    editText: \"Sunting\",\n    startSurveyText: \"Mulai\",\n    otherItemText: \"Lainnya (jelaskan)\",\n    noneItemText: \"Tidak Ada\",\n    selectAllItemText: \"Pilih Semua\",\n    progressText: \"Halaman {0} dari {1}\",\n    indexText: \"{0} dari {1}\",\n    panelDynamicProgressText: \"Rekam {0} dari {1}\",\n    panelDynamicTabTextFormat: \"Panel {panelIndex}\",\n    questionsProgressText: \"Menjawab pertanyaan {0} / {1}\",\n    emptySurvey: \"Tidak ada halaman atau pertanyaan dalam survei.\",\n    completingSurvey: \"Terima kasih telah menyelesaikan survei!\",\n    completingSurveyBefore: \"Catatan kami menunjukkan bahwa Anda telah menyelesaikan survei ini.\",\n    loadingSurvey: \"Memuat survei...\",\n    placeholder: \"Pilih...\",\n    ratingOptionsCaption: \"Pilih...\",\n    value: \"nilai\",\n    requiredError: \"Silahkan jawab pertanyaan berikut.\",\n    requiredErrorInPanel: \"Silahkan jawab setidaknya satu petanyaan.\",\n    requiredInAllRowsError: \"Silahkan jawab pertanyaan pada semua baris.\",\n    numericError: \"Nilai harus berupa angka.\",\n    minError: \"Nilainya tidak boleh kurang dari {0}\",\n    maxError: \"Nilai tidak boleh lebih besar dari {0}\",\n    textMinLength: \"Silahkan masukkan setidaknya {0} karakter.\",\n    textMaxLength: \"Silahkan masukkan kurang {0} karakter.\",\n    textMinMaxLength: \"PSilahkan masukkan lebih dari {0} dan kurang dari {1} karakter.\",\n    minRowCountError: \"Silahkan isi setidaknya {0} baris.\",\n    minSelectError: \"Silahkan pilih setidaknya {0} varian.\",\n    maxSelectError: \"Silahkan pilih tidak lebih dari {0} varian.\",\n    numericMinMax: \"'{0}' harus sama dengan atau lebih dari {1} dan harus sama dengan atau kurang dari {2}\",\n    numericMin: \"'{0}' harus sama dengan atau lebih dari {1}\",\n    numericMax: \"'{0}' harus sama dengan atau kurang dari {1}\",\n    invalidEmail: \"Silahkan masukkan e-mail yang benar.\",\n    invalidExpression: \"Ekspresi: {0} harus mengembalikan 'benar'.\",\n    urlRequestError: \"Permintaan mengembalikan kesalahan '{0}'. {1}\",\n    urlGetChoicesError: \"Permintaan mengembalikan data kosong atau properti 'path' salah.\",\n    exceedMaxSize: \"Ukuran berkas tidak boleh melebihi {0}.\",\n    otherRequiredError: \"Silahkan masukkan nilai lainnnya.\",\n    uploadingFile: \"Berkas Anda sedang diunggah. Silahkan tunggu beberapa saat atau coba lagi.\",\n    loadingFile: \"Memuat...\",\n    chooseFile: \"Pilih berkas...\",\n    noFileChosen: \"Tidak ada file yang dipilih\",\n    fileDragAreaPlaceholder: \"Seret dan jatuhkan file di sini atau klik tombol di bawah ini dan pilih file yang akan diunggah.\",\n    confirmDelete: \"Apakah Anda ingin menghapus catatan?\",\n    keyDuplicationError: \"Nilai harus unik.\",\n    addColumn: \"Tambah kolom\",\n    addRow: \"Tambah baris\",\n    removeRow: \"Hapus\",\n    emptyRowsText: \"Tidak ada baris.\",\n    addPanel: \"Tambah baru\",\n    removePanel: \"Hapus\",\n    choices_Item: \"item\",\n    matrix_column: \"Kolom\",\n    matrix_row: \"Baris\",\n    multipletext_itemname: \"Teks\",\n    savingData: \"Hasil sedang disimpan pada server...\",\n    savingDataError: \"Kesalahan terjadi dan kami tidak dapat menyimpan hasil.\",\n    savingDataSuccess: \"Hasil telah sukses disimpan!\",\n    saveAgainButton: \"Coba lagi\",\n    timerMin: \"menit\",\n    timerSec: \"detik\",\n    timerSpentAll: \"Anda telah menghabiskan {0} pada halaman ini dan {1} secara keseluruhan.\",\n    timerSpentPage: \"YAnda telah menghabiskan {0} pada halaman ini.\",\n    timerSpentSurvey: \"Anda telah menghabiskan {0} secara keseluruhan.\",\n    timerLimitAll: \"Anda telah menghabiskan {0} dari {1} pada halaman ini dan {2} dari {3} secara keseluruhan.\",\n    timerLimitPage: \"Anda telah menghabiskan {0} dari {1} pada halaman ini.\",\n    timerLimitSurvey: \"Anda telah menghabiskan {0} dari {1} secara keseluruhan.\",\n    clearCaption: \"Bersihkan\",\n    signaturePlaceHolder: \"Tanda tangan di sini\",\n    chooseFileCaption: \"Pilih File\",\n    takePhotoCaption: \"Ambil Foto\",\n    cameraPlaceHolder: \"Klik tombol di bawah ini untuk mengambil foto menggunakan kamera.\",\n    fileCameraDragAreaPlaceHolder: \"Seret dan lepas atau pilih file untuk diunggah atau mengambil foto menggunakan kamera.\",\n    replaceFileCaption: \"Ganti file\",\n    removeFileCaption: \"Hapus berkas ini\",\n    booleanCheckedLabel: \"Iya\",\n    booleanUncheckedLabel: \"Tidak\",\n    confirmRemoveFile: \"Anda yakin ingin menghapus file ini: {0}?\",\n    confirmRemoveAllFiles: \"Anda yakin ingin menghapus semua file?\",\n    questionTitlePatternText: \"Judul pertanyaan\",\n    modalCancelButtonText: \"Membatalkan\",\n    modalApplyButtonText: \"Berlaku\",\n    filterStringPlaceholder: \"Ketik untuk mencari...\",\n    emptyMessage: \"Tidak ada data untuk ditampilkan\",\n    noEntriesText: \"Belum ada entri.\\nKlik tombol di bawah ini untuk menambahkan entri baru.\",\n    noEntriesReadonlyText: \"Tidak ada entri.\",\n    more: \"Lebih\",\n    tagboxDoneButtonCaption: \"OKE\",\n    selectToRankEmptyRankedAreaText: \"Semua pilihan diberi peringkat\",\n    selectToRankEmptyUnrankedAreaText: \"Seret dan lepas pilihan di sini untuk memberi peringkat\"\n};\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"id\"] = indonesianStrings;\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"id\"] = \"bahasa Indonesia\";\n// The following strings have been translated by a machine translation service\n// Remove those strings that you have corrected manually\n// indexText: \"{0} of {1}\" => \"{0} dari {1}\"\n// panelDynamicTabTextFormat: \"Panel {panelIndex}\" => \"Panel {panelIndex}\"\n// ratingOptionsCaption: \"Select...\" => \"Pilih...\"\n// minError: \"The value should not be less than {0}\" => \"Nilainya tidak boleh kurang dari {0}\"\n// maxError: \"The value should not be greater than {0}\" => \"Nilai tidak boleh lebih besar dari {0}\"\n// fileDragAreaPlaceholder: \"Drag and drop a file here or click the button below and choose a file to upload.\" => \"Seret dan jatuhkan file di sini atau klik tombol di bawah ini dan pilih file yang akan diunggah.\"\n// emptyRowsText: \"There are no rows.\" => \"Tidak ada baris.\"\n// multipletext_itemname: \"text\" => \"Teks\"\n// signaturePlaceHolder: \"Sign here\" => \"Tanda tangan di sini\"\n// modalCancelButtonText: \"Cancel\" => \"Membatalkan\"\n// modalApplyButtonText: \"Apply\" => \"Berlaku\"\n// filterStringPlaceholder: \"Type to search...\" => \"Ketik untuk mencari...\"\n// emptyMessage: \"No data to display\" => \"Tidak ada data untuk ditampilkan\"\n// noEntriesText: \"There are no entries yet.\\nClick the button below to add a new entry.\" => \"Belum ada entri.\\nKlik tombol di bawah ini untuk menambahkan entri baru.\"\n// noEntriesReadonlyText: \"There are no entries.\" => \"Tidak ada entri.\"\n// more: \"More\" => \"Lebih\"\n// tagboxDoneButtonCaption: \"OK\" => \"OKE\"\n// selectToRankEmptyRankedAreaText: \"All choices are ranked\" => \"Semua pilihan diberi peringkat\"\n// selectToRankEmptyUnrankedAreaText: \"Drag and drop choices here to rank them\" => \"Seret dan lepas pilihan di sini untuk memberi peringkat\"// takePhotoCaption: \"Take Photo\" => \"Ambil Foto\"\n// cameraPlaceHolder: \"Click the button below to take a photo using the camera.\" => \"Klik tombol di bawah ini untuk mengambil foto menggunakan kamera.\"\n// fileCameraDragAreaPlaceHolder: \"Drag and drop or select a file to upload or take a photo using the camera.\" => \"Seret dan lepas atau pilih file untuk diunggah atau mengambil foto menggunakan kamera.\"\n// replaceFileCaption: \"Replace file\" => \"Ganti file\"\n\n\n/***/ }),\n\n/***/ \"./src/localization/italian.ts\":\n/*!*************************************!*\\\n  !*** ./src/localization/italian.ts ***!\n  \\*************************************/\n/*! exports provided: italianSurveyStrings */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1983875__) {\n\n\"use strict\";\n__nested_webpack_require_1983875__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_1983875__.d(__nested_webpack_exports__, \"italianSurveyStrings\", function() { return italianSurveyStrings; });\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1983875__(/*! survey-core */ \"./src/entries/core.ts\");\n\nvar italianSurveyStrings = {\n    pagePrevText: \"Precedente\",\n    pageNextText: \"Successivo\",\n    completeText: \"Salva\",\n    previewText: \"Anteprima\",\n    editText: \"Modifica\",\n    startSurveyText: \"Inizio\",\n    otherItemText: \"Altro (descrivi)\",\n    noneItemText: \"Nessuno\",\n    selectAllItemText: \"Seleziona tutti\",\n    progressText: \"Pagina {0} di {1}\",\n    indexText: \"{0} da {1}\",\n    panelDynamicProgressText: \"Record di {0} di {1}\",\n    panelDynamicTabTextFormat: \"Pannello {panelIndex}\",\n    questionsProgressText: \"Risposte a {0}/{1} domande\",\n    emptySurvey: \"Non ci sono pagine o domande visibili nel questionario.\",\n    completingSurvey: \"Grazie per aver completato il questionario!\",\n    completingSurveyBefore: \"I nostri records mostrano che hai già completato questo questionario.\",\n    loadingSurvey: \"Caricamento del questionario in corso...\",\n    placeholder: \"Scegli...\",\n    ratingOptionsCaption: \"Tocca qui per valutare...\",\n    value: \"valore\",\n    requiredError: \"Campo obbligatorio\",\n    requiredErrorInPanel: \"Per Favore, rispondi ad almeno una domanda.\",\n    requiredInAllRowsError: \"Completare tutte le righe\",\n    numericError: \"Il valore deve essere numerico\",\n    minError: \"Il valore non deve essere inferiore a {0}\",\n    maxError: \"Il valore non deve essere maggiore di {0}\",\n    textMinLength: \"Inserire almeno {0} caratteri\",\n    textMaxLength: \"Lunghezza massima consentita {0} caratteri\",\n    textMinMaxLength: \"Inserire una stringa con minimo {0} e massimo {1} caratteri\",\n    minRowCountError: \"Completare almeno {0} righe.\",\n    minSelectError: \"Selezionare almeno {0} varianti.\",\n    maxSelectError: \"Selezionare massimo {0} varianti.\",\n    numericMinMax: \"'{0}' deve essere uguale o superiore a {1} e uguale o inferiore a {2}\",\n    numericMin: \"'{0}' deve essere uguale o superiore a {1}\",\n    numericMax: \"'{0}' deve essere uguale o inferiore a {1}\",\n    invalidEmail: \"Inserire indirizzo mail valido\",\n    invalidExpression: \"L'espressione: {0} dovrebbe tornare 'vero'.\",\n    urlRequestError: \"La richiesta ha risposto con un errore '{0}'. {1}\",\n    urlGetChoicesError: \"La richiesta ha risposto null oppure il percorso non è corretto\",\n    exceedMaxSize: \"Il file non può eccedere {0}\",\n    otherRequiredError: \"Inserire il valore 'altro'\",\n    uploadingFile: \"File in caricamento. Attendi alcuni secondi e riprova\",\n    loadingFile: \"Caricamento...\",\n    chooseFile: \"Selezionare file(s)...\",\n    noFileChosen: \"Nessun file selezionato\",\n    fileDragAreaPlaceholder: \"Trascina un file qui o fai clic sul pulsante in basso per caricare il file.\",\n    confirmDelete: \"Sei sicuro di voler elminare il record?\",\n    keyDuplicationError: \"Questo valore deve essere univoco.\",\n    addColumn: \"Aggiungi colonna\",\n    addRow: \"Aggiungi riga\",\n    removeRow: \"Rimuovi riga\",\n    emptyRowsText: \"Non ci sono righe.\",\n    addPanel: \"Aggiungi riga\",\n    removePanel: \"Elimina\",\n    choices_Item: \"Elemento\",\n    matrix_column: \"Colonna\",\n    matrix_row: \"Riga\",\n    multipletext_itemname: \"testo\",\n    savingData: \"Salvataggio dati sul server...\",\n    savingDataError: \"Si è verificato un errore e non è stato possibile salvare i risultati.\",\n    savingDataSuccess: \"I risultati sono stati salvati con successo!\",\n    saveAgainButton: \"Riprova\",\n    timerMin: \"min\",\n    timerSec: \"sec\",\n    timerSpentAll: \"Hai impiegato {0} su questa pagina e {1} in totale.\",\n    timerSpentPage: \"Hai impiegato {0} su questa pagina.\",\n    timerSpentSurvey: \"Hai impiegato {0} in totale.\",\n    timerLimitAll: \"Hai impiegato {0} di {1} su questa pagina e {2} di {3} in totale.\",\n    timerLimitPage: \"Hai impiegato {0} di {1} su questa pagina.\",\n    timerLimitSurvey: \"Hai impiegato {0} di {1} in totale.\",\n    clearCaption: \"Cancella\",\n    signaturePlaceHolder: \"Firmare qui\",\n    chooseFileCaption: \"Scegliere il file\",\n    takePhotoCaption: \"Scatta foto\",\n    cameraPlaceHolder: \"Fai clic sul pulsante qui sotto per scattare una foto utilizzando la fotocamera.\",\n    fileCameraDragAreaPlaceHolder: \"Trascina e rilascia o seleziona un file da caricare o scattare una foto utilizzando la fotocamera.\",\n    replaceFileCaption: \"Sostituisci file\",\n    removeFileCaption: \"Rimuovere questo file\",\n    booleanCheckedLabel: \"Sì\",\n    booleanUncheckedLabel: \"No\",\n    confirmRemoveFile: \"Sei sicuro di voler elminare questo file: {0}?\",\n    confirmRemoveAllFiles: \"Sei sicuro di voler elminare tutti i files?\",\n    questionTitlePatternText: \"Titolo della domanda\",\n    modalCancelButtonText: \"Annulla\",\n    modalApplyButtonText: \"Applicare\",\n    filterStringPlaceholder: \"Digita per cercare...\",\n    emptyMessage: \"Nessun dato da visualizzare\",\n    noEntriesText: \"Non ci sono ancora voci.\\nFai clic sul pulsante qui sotto per aggiungere una nuova voce.\",\n    noEntriesReadonlyText: \"Non ci sono voci.\",\n    more: \"Più\",\n    tagboxDoneButtonCaption: \"OK\",\n    selectToRankEmptyRankedAreaText: \"Tutte le scelte sono classificate\",\n    selectToRankEmptyUnrankedAreaText: \"Trascina e rilascia le scelte qui per classificarle\"\n};\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"it\"] = italianSurveyStrings;\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"it\"] = \"italiano\";\n// The following strings have been translated by a machine translation service\n// Remove those strings that you have corrected manually\n// panelDynamicTabTextFormat: \"Panel {panelIndex}\" => \"Pannello {panelIndex}\"\n// emptyMessage: \"No data to display\" => \"Nessun dato da visualizzare\"\n// noEntriesReadonlyText: \"There are no entries.\" => \"Non ci sono voci.\"\n// more: \"More\" => \"Più\"\n// tagboxDoneButtonCaption: \"OK\" => \"OK\"\n// selectToRankEmptyRankedAreaText: \"All choices are ranked\" => \"Tutte le scelte sono classificate\"\n// selectToRankEmptyUnrankedAreaText: \"Drag and drop choices here to rank them\" => \"Trascina e rilascia le scelte qui per classificarle\"// takePhotoCaption: \"Take Photo\" => \"Scatta foto\"\n// cameraPlaceHolder: \"Click the button below to take a photo using the camera.\" => \"Fai clic sul pulsante qui sotto per scattare una foto utilizzando la fotocamera.\"\n// fileCameraDragAreaPlaceHolder: \"Drag and drop or select a file to upload or take a photo using the camera.\" => \"Trascina e rilascia o seleziona un file da caricare o scattare una foto utilizzando la fotocamera.\"\n// replaceFileCaption: \"Replace file\" => \"Sostituisci file\"\n\n\n/***/ }),\n\n/***/ \"./src/localization/japanese.ts\":\n/*!**************************************!*\\\n  !*** ./src/localization/japanese.ts ***!\n  \\**************************************/\n/*! exports provided: japaneseSurveyStrings */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1990897__) {\n\n\"use strict\";\n__nested_webpack_require_1990897__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_1990897__.d(__nested_webpack_exports__, \"japaneseSurveyStrings\", function() { return japaneseSurveyStrings; });\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1990897__(/*! survey-core */ \"./src/entries/core.ts\");\n\nvar japaneseSurveyStrings = {\n    pagePrevText: \"前へ\",\n    pageNextText: \"次へ\",\n    completeText: \"完了\",\n    previewText: \"プレビュー\",\n    editText: \"編集\",\n    startSurveyText: \"スタート\",\n    otherItemText: \"その他(説明)\",\n    noneItemText: \"なし\",\n    selectAllItemText: \"すべて選択\",\n    progressText: \"{0}/{1}頁\",\n    indexText: \"{1}の{0}\",\n    panelDynamicProgressText: \"{1}の{0}を記録する\",\n    panelDynamicTabTextFormat: \"Panel {panelIndex}\",\n    questionsProgressText: \"{0}/{1}の質問に回答しました。\",\n    emptySurvey: \"この調査に表示できるページや質問はありません\",\n    completingSurvey: \"調査を完了してくれてありがとうございました\",\n    completingSurveyBefore: \"当社の記録によると、この調査はすでに完了しています。\",\n    loadingSurvey: \"調査をダウンロード中\",\n    placeholder: \"選択\",\n    ratingOptionsCaption: \"選ぶ。。。\",\n    value: \"値打ち\",\n    requiredError: \"質問にお答え下さい\",\n    requiredErrorInPanel: \"最低でも1つの質問に答えてください。\",\n    requiredInAllRowsError: \"質問には全列で回答してください。\",\n    numericError: \"数字でご記入下さい\",\n    minError: \"値は {0} 値より小さくすることはできません\",\n    maxError: \"値は {0} を超えてはなりません。\",\n    textMinLength: \"{0} 文字以上で入力して下さい\",\n    textMaxLength: \"{0}文字以下で入力してください。\",\n    textMinMaxLength: \"{0}以上{1}未満の文字を入力してください。\",\n    minRowCountError: \"{0}行以上で入力して下さい\",\n    minSelectError: \"{0}種類以上を選択して下さい\",\n    maxSelectError: \"{0}以上のバリアントを選択しないでください。\",\n    numericMinMax: \"{0}は{1}以上であり、{2}以下であることが望ましい。\",\n    numericMin: \"'{0}' は同等か{1}より大きくなければなりません\",\n    numericMax: \"'{0}' は同等か{1}より小さくなければなりません\",\n    invalidEmail: \"有効なメールアドレスをご記入下さい\",\n    invalidExpression: \"式は {0}は'true'を返すべきです。\",\n    urlRequestError: \"リクエストはエラー '{0}' を返しました。{1}\",\n    urlGetChoicesError: \"リクエストが空のデータを返したか、'path' プロパティが正しくありません。\",\n    exceedMaxSize: \"ファイルのサイズは{0}を超えてはいけません\",\n    otherRequiredError: \"その他の値を入力してください。\",\n    uploadingFile: \"ファイルをアップロード中です。しばらくしてから再度お試し下さい\",\n    loadingFile: \"読み込み中\",\n    chooseFile: \"ファイルを選択\",\n    noFileChosen: \"選択されたファイルはありません\",\n    fileDragAreaPlaceholder: \"ここにファイルをドラッグ&ドロップするか、下のボタンをクリックしてアップロードするファイルを選択してください。\",\n    confirmDelete: \"レコードを削除しますか?\",\n    keyDuplicationError: \"この値は一意でなければなりません。\",\n    addColumn: \"列の追加\",\n    addRow: \"追加行\",\n    removeRow: \"除去\",\n    emptyRowsText: \"行はありません。\",\n    addPanel: \"新規追加\",\n    removePanel: \"除去\",\n    choices_Item: \"品目\",\n    matrix_column: \"コラム\",\n    matrix_row: \"行\",\n    multipletext_itemname: \"テキスト\",\n    savingData: \"結果はサーバーに保存されています...。\",\n    savingDataError: \"エラーが発生し、結果を保存できませんでした。\",\n    savingDataSuccess: \"結果は無事に保存されました\",\n    saveAgainButton: \"もう一度試してみてください。\",\n    timerMin: \"僅少\",\n    timerSec: \"セック\",\n    timerSpentAll: \"あなたはこのページに{0}を費やし、合計で{1}を費やしました。\",\n    timerSpentPage: \"あなたはこのページに{0}を費やしました。\",\n    timerSpentSurvey: \"合計で{0}を使ったことになります。\",\n    timerLimitAll: \"このページに{1}のうち{0}を費やし、{3}のうち{2}を合計で費やしました。\",\n    timerLimitPage: \"このページで{1}の{0}を使ったことがあります。\",\n    timerLimitSurvey: \"合計で{1}の{0}を使ったことがあります。\",\n    clearCaption: \"空白\",\n    signaturePlaceHolder: \"ここに署名\",\n    chooseFileCaption: \"ファイルを選択\",\n    takePhotoCaption: \"写真を撮る\",\n    cameraPlaceHolder: \"下のボタンをクリックして、カメラを使用して写真を撮ります。\",\n    fileCameraDragAreaPlaceHolder: \"アップロードするファイルをドラッグアンドドロップまたは選択するか、カメラを使用して写真を撮ります。\",\n    replaceFileCaption: \"ファイルの置換\",\n    removeFileCaption: \"このファイルを削除\",\n    booleanCheckedLabel: \"噫\",\n    booleanUncheckedLabel: \"否\",\n    confirmRemoveFile: \"このファイルを削除してもよろしいですか?{0}?\",\n    confirmRemoveAllFiles: \"すべてのファイルを削除してもよろしいですか?\",\n    questionTitlePatternText: \"質問名\",\n    modalCancelButtonText: \"キャンセル\",\n    modalApplyButtonText: \"申し込む\",\n    filterStringPlaceholder: \"検索するタイプ...\",\n    emptyMessage: \"表示するデータがありません\",\n    noEntriesText: \"エントリはまだありません。\\n下のボタンをクリックして、新しいエントリを追加します。\",\n    noEntriesReadonlyText: \"エントリはありません。\",\n    more: \"もっとその\",\n    tagboxDoneButtonCaption: \"わかりました\",\n    selectToRankEmptyRankedAreaText: \"すべての選択肢がランク付けされます\",\n    selectToRankEmptyUnrankedAreaText: \"ここに選択肢をドラッグアンドドロップしてランク付けします\"\n};\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"ja\"] = japaneseSurveyStrings;\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"ja\"] = \"日本語\";\n// The following strings have been translated by a machine translation service\n// Remove those strings that you have corrected manually\n// indexText: \"{0} of {1}\" => \"{1}の{0}\"\n// panelDynamicTabTextFormat: \"Panel {panelIndex}\" => \"Panel {panelIndex}\"\n// ratingOptionsCaption: \"Select...\" => \"選ぶ。。。\"\n// minError: \"The value should not be less than {0}\" => \"値は {0} 値より小さくすることはできません\"\n// maxError: \"The value should not be greater than {0}\" => \"値は {0} を超えてはなりません。\"\n// fileDragAreaPlaceholder: \"Drag and drop a file here or click the button below and choose a file to upload.\" => \"ここにファイルをドラッグ&ドロップするか、下のボタンをクリックしてアップロードするファイルを選択してください。\"\n// emptyRowsText: \"There are no rows.\" => \"行はありません。\"\n// multipletext_itemname: \"text\" => \"テキスト\"\n// signaturePlaceHolder: \"Sign here\" => \"ここに署名\"\n// modalCancelButtonText: \"Cancel\" => \"キャンセル\"\n// modalApplyButtonText: \"Apply\" => \"申し込む\"\n// filterStringPlaceholder: \"Type to search...\" => \"検索するタイプ...\"\n// emptyMessage: \"No data to display\" => \"表示するデータがありません\"\n// noEntriesText: \"There are no entries yet.\\nClick the button below to add a new entry.\" => \"エントリはまだありません。\\n下のボタンをクリックして、新しいエントリを追加します。\"\n// noEntriesReadonlyText: \"There are no entries.\" => \"エントリはありません。\"\n// more: \"More\" => \"もっとその\"\n// tagboxDoneButtonCaption: \"OK\" => \"わかりました\"\n// selectToRankEmptyRankedAreaText: \"All choices are ranked\" => \"すべての選択肢がランク付けされます\"\n// selectToRankEmptyUnrankedAreaText: \"Drag and drop choices here to rank them\" => \"ここに選択肢をドラッグアンドドロップしてランク付けします\"// takePhotoCaption: \"Take Photo\" => \"写真を撮る\"\n// cameraPlaceHolder: \"Click the button below to take a photo using the camera.\" => \"下のボタンをクリックして、カメラを使用して写真を撮ります。\"\n// fileCameraDragAreaPlaceHolder: \"Drag and drop or select a file to upload or take a photo using the camera.\" => \"アップロードするファイルをドラッグアンドドロップまたは選択するか、カメラを使用して写真を撮ります。\"\n// replaceFileCaption: \"Replace file\" => \"ファイルの置換\"\n\n\n/***/ }),\n\n/***/ \"./src/localization/kazakh.ts\":\n/*!************************************!*\\\n  !*** ./src/localization/kazakh.ts ***!\n  \\************************************/\n/*! exports provided: kazakhStrings */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_1997258__) {\n\n\"use strict\";\n__nested_webpack_require_1997258__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_1997258__.d(__nested_webpack_exports__, \"kazakhStrings\", function() { return kazakhStrings; });\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1997258__(/*! survey-core */ \"./src/entries/core.ts\");\n\nvar kazakhStrings = {\n    pagePrevText: \"Артқа\",\n    pageNextText: \"Келесі\",\n    completeText: \"Дайын\",\n    previewText: \"Алдын ала қарау\",\n    editText: \"Редакциялау\",\n    startSurveyText: \"Бастау\",\n    otherItemText: \"Басқа (өтінеміз, жазыңыз)\",\n    noneItemText: \"Жоқ\",\n    selectAllItemText: \"Барлығын таңдау\",\n    progressText: \"{0} ден {1} бет \",\n    indexText: \"{1} {0}\",\n    panelDynamicProgressText: \"{0} ден {1} жазба\",\n    panelDynamicTabTextFormat: \"Панель {panelIndex}\",\n    questionsProgressText: \"{0}/{1} сұрақтарға жауап\",\n    emptySurvey: \"Бір де бір сұрақ жоқ.\",\n    completingSurvey: \"Сауалнаманы толтырғаныңыз үшін рахмет!\",\n    completingSurveyBefore: \"Сіз бұл сауалнаманы өтіп қойдыңыз.\",\n    loadingSurvey: \"Серверден жүктеу...\",\n    placeholder: \"Таңдау...\",\n    ratingOptionsCaption: \"Таңдау...\",\n    value: \"мәні\",\n    requiredError: \"Өтінеміз, сұраққа жауап беріңіз.\",\n    requiredErrorInPanel: \"Өтінеміз, кем дегенде бір сұраққа жауап беріңіз.\",\n    requiredInAllRowsError: \"Өтінеміз, әрбір жолдың сұрағаны жауап беріңіз.\",\n    numericError: \"Жауап сан түрінде болуы керек.\",\n    minError: \"Мәні {0} кем болмауы тиіс\",\n    maxError: \"Мән {0} артық болмауы тиіс\",\n    textMinLength: \"Өтінеміз, {0} ден көп таңба енгізіңіз.\",\n    textMaxLength: \"Өтінеміз, {0} ден аз таңба енгізіңіз.\",\n    textMinMaxLength: \"Өтінеміз, {0} аз және {1} көп таңба енгізіңіз.\",\n    minRowCountError: \"Өтінеміз, {0} ден кем емес жол толтырыңыз.\",\n    minSelectError: \"Өтінеміз, тым болмаса {0} нұсқа таңдаңыз.\",\n    maxSelectError: \"Өтінеміз, {0} нұсқадан көп таңдамаңыз.\",\n    numericMinMax: \"'{0}' {1} ден кем емес және {2} ден көп емес болу керек\",\n    numericMin: \"'{0}' {1} ден кем емес болу керек\",\n    numericMax: \"'{0}' {1} ден көп емес болу керек\",\n    invalidEmail: \"Өтінеміз, жарамды электрондық поштаңызды енгізіңіз.\",\n    invalidExpression: \"{0} өрнегі  'true' қайтару керек.\",\n    urlRequestError: \"Сұратым қателікті қайтарды'{0}'. {1}\",\n    urlGetChoicesError: \"Сұратымға жауап бос келді немесе 'path' қасиеті қате көрсетілген \",\n    exceedMaxSize: \"Файлдың мөлшері {0} аспау керек.\",\n    otherRequiredError: \"Өтінеміз, “Басқа” жолына деректі енгізіңіз\",\n    uploadingFile: \"Сіздің файлыңыз жүктеліп жатыр. Бірнеше секунд тосып, қайтадан байқап көріңіз.\",\n    loadingFile: \"Жүктеу...\",\n    chooseFile: \"Файлдарды таңдаңыз...\",\n    noFileChosen: \"Файл таңдалынбады\",\n    fileDragAreaPlaceholder: \"Файлды осы жерге апарып тастаңыз немесе төмендегі түймені басыңыз және кері жүктеу үшін файлды таңдаңыз.\",\n    confirmDelete: \"Сіз жазбаны жоятыныңызға сенімдісіз бе?\",\n    keyDuplicationError: \"Бұл мән бірегей болу керек.\",\n    addColumn: \"Бағана қосу\",\n    addRow: \"Жолды қосу\",\n    removeRow: \"Өшіру\",\n    emptyRowsText: \"Қатарлар жоқ.\",\n    addPanel: \"Жаңа қосу\",\n    removePanel: \"Өшіру\",\n    choices_Item: \"Нұсқа\",\n    matrix_column: \"Бағана\",\n    matrix_row: \"Жол\",\n    multipletext_itemname: \"мәтін\",\n    savingData: \"Нәтижелер серверде сақталады...\",\n    savingDataError: \"Қателік туындады, нәтиже сақталынбады.\",\n    savingDataSuccess: \"Нәтиже ойдағыдай сақталды!\",\n    saveAgainButton: \"Қайтадан байқап көру\",\n    timerMin: \"мин\",\n    timerSec: \"сек\",\n    timerSpentAll: \"Сіз бұл бетте {0} кетірдіңіз және барлығы {1}.\",\n    timerSpentPage: \"Сіз бұл бетте {0} кетірдіңіз.\",\n    timerSpentSurvey: \"Сіз сауалнама кезінде {0} кетірдіңіз.\",\n    timerLimitAll: \"Сіз бұл бетте {0} ден {1} кетірдіңіз және {2} ден {3} бүкіл сауалнама үшін.\",\n    timerLimitPage: \"Сіз бұл бетте {0} ден {1} кетірдіңіз.\",\n    timerLimitSurvey: \"Сіз бүкіл сауалнама үшін {0} ден {1} кетірдіңіз \",\n    clearCaption: \"Тазалау\",\n    signaturePlaceHolder: \"Осында кіру\",\n    chooseFileCaption: \"Файл таңдаңыз\",\n    takePhotoCaption: \"Фотосуретке түсу\",\n    cameraPlaceHolder: \"Камераны пайдаланып суретке түсу үшін төмендегі түймені басыңыз.\",\n    fileCameraDragAreaPlaceHolder: \"Фотоаппаратты пайдаланып кері жүктеу немесе суретке түсіру үшін файлды апарып тастаыңыз немесе таңдаңыз.\",\n    replaceFileCaption: \"Файлды ауыстыру\",\n    removeFileCaption: \"Файлды жойыңыз\",\n    booleanCheckedLabel: \"Иә\",\n    booleanUncheckedLabel: \"Жоқ\",\n    confirmRemoveFile: \"Сіз бұл файлды жоятыныңызға сенімдісіз бе: {0}?\",\n    confirmRemoveAllFiles: \"Сіз барлық файлдарды жоятыныңызға сенімдісіз бе?\",\n    questionTitlePatternText: \"Сұрақтың атауы\",\n    modalCancelButtonText: \"Болдырмау\",\n    modalApplyButtonText: \"Қолдану\",\n    filterStringPlaceholder: \"Іздеу үшін теріңіз...\",\n    emptyMessage: \"Көрсетілетін деректер жоқ\",\n    noEntriesText: \"Әзірге жазбалар жоқ.\\nЖаңа жазбаны қосу үшін төмендегі түймешігіңді басыңыз.\",\n    noEntriesReadonlyText: \"Жазбалар жоқ.\",\n    more: \"Қосымша\",\n    tagboxDoneButtonCaption: \"ЖАҚСЫ\",\n    selectToRankEmptyRankedAreaText: \"Барлық таңдаулар ранжирленген\",\n    selectToRankEmptyUnrankedAreaText: \"Таңдауды рангтеу үшін осында апарып тастау\"\n};\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"kk\"] = kazakhStrings;\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"kk\"] = \"Kazakh\";\n// The following strings have been translated by a machine translation service\n// Remove those strings that you have corrected manually\n// indexText: \"{0} of {1}\" => \"{1} {0}\"\n// panelDynamicTabTextFormat: \"Panel {panelIndex}\" => \"Панель {panelIndex}\"\n// ratingOptionsCaption: \"Select...\" => \"Таңдау...\"\n// minError: \"The value should not be less than {0}\" => \"Мәні {0} кем болмауы тиіс\"\n// maxError: \"The value should not be greater than {0}\" => \"Мән {0} артық болмауы тиіс\"\n// fileDragAreaPlaceholder: \"Drag and drop a file here or click the button below and choose a file to upload.\" => \"Файлды осы жерге апарып тастаңыз немесе төмендегі түймені басыңыз және кері жүктеу үшін файлды таңдаңыз.\"\n// emptyRowsText: \"There are no rows.\" => \"Қатарлар жоқ.\"\n// multipletext_itemname: \"text\" => \"мәтін\"\n// signaturePlaceHolder: \"Sign here\" => \"Осында кіру\"\n// modalCancelButtonText: \"Cancel\" => \"Болдырмау\"\n// modalApplyButtonText: \"Apply\" => \"Қолдану\"\n// filterStringPlaceholder: \"Type to search...\" => \"Іздеу үшін теріңіз...\"\n// emptyMessage: \"No data to display\" => \"Көрсетілетін деректер жоқ\"\n// noEntriesText: \"There are no entries yet.\\nClick the button below to add a new entry.\" => \"Әзірге жазбалар жоқ.\\nЖаңа жазбаны қосу үшін төмендегі түймешігіңді басыңыз.\"\n// noEntriesReadonlyText: \"There are no entries.\" => \"Жазбалар жоқ.\"\n// more: \"More\" => \"Қосымша\"\n// tagboxDoneButtonCaption: \"OK\" => \"ЖАҚСЫ\"\n// selectToRankEmptyRankedAreaText: \"All choices are ranked\" => \"Барлық таңдаулар ранжирленген\"\n// selectToRankEmptyUnrankedAreaText: \"Drag and drop choices here to rank them\" => \"Таңдауды рангтеу үшін осында апарып тастау\"// takePhotoCaption: \"Take Photo\" => \"Фотосуретке түсу\"\n// cameraPlaceHolder: \"Click the button below to take a photo using the camera.\" => \"Камераны пайдаланып суретке түсу үшін төмендегі түймені басыңыз.\"\n// fileCameraDragAreaPlaceHolder: \"Drag and drop or select a file to upload or take a photo using the camera.\" => \"Фотоаппаратты пайдаланып кері жүктеу немесе суретке түсіру үшін файлды апарып тастаыңыз немесе таңдаңыз.\"\n// replaceFileCaption: \"Replace file\" => \"Файлды ауыстыру\"\n\n\n/***/ }),\n\n/***/ \"./src/localization/korean.ts\":\n/*!************************************!*\\\n  !*** ./src/localization/korean.ts ***!\n  \\************************************/\n/*! exports provided: koreanStrings */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_2005038__) {\n\n\"use strict\";\n__nested_webpack_require_2005038__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_2005038__.d(__nested_webpack_exports__, \"koreanStrings\", function() { return koreanStrings; });\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_2005038__(/*! survey-core */ \"./src/entries/core.ts\");\n\nvar koreanStrings = {\n    pagePrevText: \"이전\",\n    pageNextText: \"다음\",\n    completeText: \"완료\",\n    previewText: \"미리보기\",\n    editText: \"수정\",\n    startSurveyText: \"시작\",\n    otherItemText: \"기타 (설명)\",\n    noneItemText: \"없음\",\n    selectAllItemText: \"모두 선택\",\n    progressText: \"페이지 {1} / {0}\",\n    indexText: \"{0} / {1}\",\n    panelDynamicProgressText: \"{0} / {1}\",\n    panelDynamicTabTextFormat: \"패널 {panelIndex}\",\n    questionsProgressText: \"{0} / {1} 개의 질문에 답변함\",\n    emptySurvey: \"설문지에 보여지는 페이지나 질문이 없습니다.\",\n    completingSurvey: \"설문조사를 완료해 주셔서 감사합니다.\",\n    completingSurveyBefore: \"기록에 따르면 이미 설문 조사를 마치셨습니다.\",\n    loadingSurvey: \"설문조사가 로드중입니다...\",\n    placeholder: \"선택...\",\n    ratingOptionsCaption: \"등급을 매기려면 누르세요.\",\n    value: \"값\",\n    requiredError: \"질문에 답하시오.\",\n    requiredErrorInPanel: \"하나 이상의 질문에 답하십시오.\",\n    requiredInAllRowsError: \"모든 행에 있는 질문에 답하십시오.\",\n    numericError: \"값은 숫자여야 합니다.\",\n    minError: \"값은 {0}보다 작으면 안됩니다.\",\n    maxError: \"값은 {0}보다 클 수 없습니다.\",\n    textMinLength: \"답변의 길이는 최소 {0}자여야 입니다.\",\n    textMaxLength: \"답변의 길이는 {0}자를 초과 할 수 없습니다.\",\n    textMinMaxLength: \"답변의 길이는 {0} - {1}자 사이여야 합니다.\",\n    minRowCountError: \"최소 {0}개의 행을 채우십시오\",\n    minSelectError: \"최소 {0}개의 변수를 선택하십시오.\",\n    maxSelectError: \"최대 {0}개의 변수를 선택하십시오.\",\n    numericMinMax: \"'{0}'은 {1}보다 크거나 같고 {2}보다 작거나 같아야합니다.\",\n    numericMin: \"'{0}'은 {1}보다 크거나 같아야합니다.\",\n    numericMax: \"'{0}'은 {1}보다 작거나 같아야합니다.\",\n    invalidEmail: \"올바른 이메일 주소를 입력하십시오.\",\n    invalidExpression: \"표현식: {0}은 '참'이어야 합니다.\",\n    urlRequestError: \"'{0}'으로 잘못된 요청입니다. {1}\",\n    urlGetChoicesError: \"비어있는 데이터를 요청했거나 잘못된 속성의 경로입니다.\",\n    exceedMaxSize: \"파일 크기가 {0}을 초과 할 수 없습니다.\",\n    otherRequiredError: \"다른 질문을 작성하십시오.\",\n    uploadingFile: \"파일 업로드 중입니다. 잠시 후 다시 시도하십시오.\",\n    loadingFile: \"로드 중...\",\n    chooseFile: \"파일 선택...\",\n    noFileChosen: \"선택된 파일이 없습니다.\",\n    fileDragAreaPlaceholder: \"파일을 여기에 놓거나 아래 버튼을 클릭하여 파일을 불러오세요.\",\n    confirmDelete: \"기록을 삭제하시겠습니까?\",\n    keyDuplicationError: \" 이 값은 고유해야합니다.\",\n    addColumn: \"열 추가\",\n    addRow: \"행 추가\",\n    removeRow: \"제거\",\n    emptyRowsText: \"행이 없습니다.\",\n    addPanel: \"추가\",\n    removePanel: \"제거\",\n    choices_Item: \"항목\",\n    matrix_column: \"열\",\n    matrix_row: \"행\",\n    multipletext_itemname: \"텍스트\",\n    savingData: \"결과가 서버에 저장 중입니다...\",\n    savingDataError: \"오류가 발생하여 결과를 저장할 수 없습니다.\",\n    savingDataSuccess: \"결과가 성공적으로 저장되었습니다.\",\n    saveAgainButton: \"다시 시도하세요.\",\n    timerMin: \"분\",\n    timerSec: \"초\",\n    timerSpentAll: \"현재 페이지에서 {0}을 소요해 총 {1}이 걸렸습니다.\",\n    timerSpentPage: \"현재 페이지에서 {0}이 걸렸습니다.\",\n    timerSpentSurvey: \"총 {0}이 걸렸습니다.\",\n    timerLimitAll: \"현재 페이지에서 {0}/{1}을 소요해 총 {2}/{3}이 걸렸습니다.\",\n    timerLimitPage: \"현재 페이지에서 {0}/{1}이 걸렸습니다.\",\n    timerLimitSurvey: \"총 {0}/{1}이 걸렸습니다.\",\n    clearCaption: \"지우기\",\n    signaturePlaceHolder: \"서명하세요.\",\n    chooseFileCaption: \"파일 선택\",\n    takePhotoCaption: \"사진 찍기\",\n    cameraPlaceHolder: \"아래 버튼을 클릭하여 카메라로 사진을 찍습니다.\",\n    fileCameraDragAreaPlaceHolder: \"업로드할 파일을 드래그 앤 드롭하거나 선택하거나 카메라를 사용하여 사진을 찍습니다.\",\n    replaceFileCaption: \"파일 바꾸기\",\n    removeFileCaption: \"파일 제거\",\n    booleanCheckedLabel: \"예\",\n    booleanUncheckedLabel: \"아니오\",\n    confirmRemoveFile: \"{0} 파일을 제거 하시겠습니까?\",\n    confirmRemoveAllFiles: \"모든 파일을 제거 하시겠습니까?\",\n    questionTitlePatternText: \"질문 제목\",\n    modalCancelButtonText: \"취소\",\n    modalApplyButtonText: \"적용\",\n    filterStringPlaceholder: \"검색 유형...\",\n    emptyMessage: \"표시할 데이터가 없습니다.\",\n    noEntriesText: \"아직 항목이 없습니다.\\n새 항목을 추가하려면 아래 버튼을 클릭하세요.\",\n    noEntriesReadonlyText: \"항목이 없습니다.\",\n    more: \"더보기\",\n    tagboxDoneButtonCaption: \"그래\",\n    selectToRankEmptyRankedAreaText: \"모든 선택 항목이 순위가 매겨집니다.\",\n    selectToRankEmptyUnrankedAreaText: \"여기에 선택 항목을 끌어다 놓아 순위를 매깁니다.\"\n};\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"ko\"] = koreanStrings;\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"ko\"] = \"한국어\";\n// The following strings have been translated by a machine translation service\n// Remove those strings that you have corrected manually\n// panelDynamicTabTextFormat: \"Panel {panelIndex}\" => \"패널 {panelIndex}\"\n// emptyMessage: \"No data to display\" => \"표시할 데이터가 없습니다.\"\n// noEntriesReadonlyText: \"There are no entries.\" => \"항목이 없습니다.\"\n// tagboxDoneButtonCaption: \"OK\" => \"그래\"\n// selectToRankEmptyRankedAreaText: \"All choices are ranked\" => \"모든 선택 항목이 순위가 매겨집니다.\"\n// selectToRankEmptyUnrankedAreaText: \"Drag and drop choices here to rank them\" => \"여기에 선택 항목을 끌어다 놓아 순위를 매깁니다.\"// takePhotoCaption: \"Take Photo\" => \"사진 찍기\"\n// cameraPlaceHolder: \"Click the button below to take a photo using the camera.\" => \"아래 버튼을 클릭하여 카메라로 사진을 찍습니다.\"\n// fileCameraDragAreaPlaceHolder: \"Drag and drop or select a file to upload or take a photo using the camera.\" => \"업로드할 파일을 드래그 앤 드롭하거나 선택하거나 카메라를 사용하여 사진을 찍습니다.\"\n// replaceFileCaption: \"Replace file\" => \"파일 바꾸기\"\n\n\n/***/ }),\n\n/***/ \"./src/localization/latvian.ts\":\n/*!*************************************!*\\\n  !*** ./src/localization/latvian.ts ***!\n  \\*************************************/\n/*! exports provided: latvianSurveyStrings */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_2010434__) {\n\n\"use strict\";\n__nested_webpack_require_2010434__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_2010434__.d(__nested_webpack_exports__, \"latvianSurveyStrings\", function() { return latvianSurveyStrings; });\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_2010434__(/*! survey-core */ \"./src/entries/core.ts\");\n\nvar latvianSurveyStrings = {\n    pagePrevText: \"Iepriekšēja lapa\",\n    pageNextText: \"Nākamā lapa\",\n    completeText: \"Iesniegt\",\n    previewText: \"Priekšskatījums\",\n    editText: \"Rediģēt\",\n    startSurveyText: \"Sākt\",\n    otherItemText: \"Cits (lūdzu, aprakstiet!)\",\n    noneItemText: \"Nav\",\n    selectAllItemText: \"Izvēlēties visus\",\n    progressText: \"{0}. lapa no {1}\",\n    indexText: \"{0} no {1}\",\n    panelDynamicProgressText: \"Ierakstīt {0} no {1}\",\n    panelDynamicTabTextFormat: \"Panelis {panelIndex}\",\n    questionsProgressText: \"Atbildēts uz {0} / {1} jautājumiem\",\n    emptySurvey: \"Nav neviena jautājuma.\",\n    completingSurvey: \"Pateicamies Jums par anketas aizpildīšanu!\",\n    completingSurveyBefore: \"Mūsu ieraksti liecina, ka Jūs jau esat aizpildījis šo aptauju.\",\n    loadingSurvey: \"Ielāde no servera...\",\n    placeholder: \"Izvēlēties...\",\n    ratingOptionsCaption: \"Nospiediet šeit, lai novērtētu...\",\n    value: \"value\",\n    requiredError: \"Lūdzu, atbildiet uz jautājumu!\",\n    requiredErrorInPanel: \"Lūdzu, atbildiet uz vismaz vienu jautājumu.\",\n    requiredInAllRowsError: \"Lūdzu, atbildiet uz jautājumiem visās rindās.\",\n    numericError: \"Atbildei ir jābūt skaitlim.\",\n    minError: \"Vērtība nedrīkst būt mazāka par {0}\",\n    maxError: \"Vērtība nedrīkst būt lielāka par {0}\",\n    textMinLength: \"Lūdzu, ievadiet vismaz {0} simbolus.\",\n    textMaxLength: \"Lūdzu, ievadiet mazāk nekā {0} rakstzīmes.\",\n    textMinMaxLength: \"Lūdzu, ievadiet vairāk nekā {0} rakstzīmes un mazāk nekā {1} rakstzīmes.\",\n    minRowCountError: \"Lūdzu, aizpildiet vismaz {0} rindas.\",\n    minSelectError: \"Lūdzu, izvēlieties vismaz {0} variantu.\",\n    maxSelectError: \"Lūdzu, izvēlieties ne vairak par {0} variantiem.\",\n    numericMinMax: \"'{0}' jābūt vienādam vai lielākam nekā {1}, un vienādam vai mazākam, nekā {2}\",\n    numericMin: \"'{0}' jābūt vienādam vai lielākam {1}\",\n    numericMax: \"'{0}' jābūt vienādam vai lielākam {1}\",\n    invalidEmail: \"Lūdzu, ievadiet pareizu e-pasta adresi!\",\n    invalidExpression: \"Izteicienam: {0} jāatgriež “true”.\",\n    urlRequestError: \"Pieprasījumā tika atgriezta kļūda “{0}”. {1}\",\n    urlGetChoicesError: \"Pieprasījums atgrieza tukšus datus vai rekvizīts “path” ir nepareizs\",\n    exceedMaxSize: \"Faila lielums nedrīkst pārsniegt {0}.\",\n    otherRequiredError: \"Lūdzu, ievadiet datus laukā 'Cits'\",\n    uploadingFile: \"Jūsu fails tiek augšupielādēts. Lūdzu, uzgaidiet dažas sekundes un mēģiniet vēlreiz.\",\n    loadingFile: \"Notiek ielāde ...\",\n    chooseFile: \"Izvēlieties failus ...\",\n    noFileChosen: \"Nav izvēlēts neviens fails\",\n    fileDragAreaPlaceholder: \"Lai pievienotu, ievelciet failu šeit vai arī klikšķiniet uz zemāk redzamās pogas\",\n    confirmDelete: \"Vai vēlaties izdzēst ierakstu?\",\n    keyDuplicationError: \"Šai vērtībai jābūt unikālai.\",\n    addColumn: \"Pievienot kolonnu\",\n    addRow: \"Pievienot rindu\",\n    removeRow: \"Noņemt\",\n    emptyRowsText: \"Nav rindu.\",\n    addPanel: \"Pievieno jaunu\",\n    removePanel: \"Noņemt\",\n    choices_Item: \"vienums\",\n    matrix_column: \"Sleja\",\n    matrix_row: \"Rinda\",\n    multipletext_itemname: \"teksts\",\n    savingData: \"Rezultāti tiek saglabāti serverī ...\",\n    savingDataError: \"Radās kļūda, un mēs nevarējām saglabāt rezultātus.\",\n    savingDataSuccess: \"Rezultāti tika veiksmīgi saglabāti!\",\n    saveAgainButton: \"Mēģiniet vēlreiz\",\n    timerMin: \"min\",\n    timerSec: \"sek\",\n    timerSpentAll: \"Šajā lapā esat iztērējis {0} un kopā {1}.\",\n    timerSpentPage: \"Šajā lapā esat iztērējis {0}.\",\n    timerSpentSurvey: \"Kopā esat iztērējis {0}.\",\n    timerLimitAll: \"Šajā lapā esat iztērējis {0} no {1} un kopā {2} no {3}.\",\n    timerLimitPage: \"Šajā lapā esat iztērējis {0} no {1}.\",\n    timerLimitSurvey: \"Kopā esat iztērējis {0} no {1}.\",\n    clearCaption: \"Iztīrīt\",\n    signaturePlaceHolder: \"Parakstieties šeit\",\n    chooseFileCaption: \"Izvēlēties failu\",\n    takePhotoCaption: \"Uzņemt fotoattēlu\",\n    cameraPlaceHolder: \"Noklikšķiniet uz pogas zemāk, lai uzņemtu fotoattēlu, izmantojot kameru.\",\n    fileCameraDragAreaPlaceHolder: \"Velciet un nometiet vai atlasiet failu, ko augšupielādēt vai uzņemt fotoattēlu, izmantojot kameru.\",\n    replaceFileCaption: \"Aizstāt failu\",\n    removeFileCaption: \"Noņemiet šo failu\",\n    booleanCheckedLabel: \"Jā\",\n    booleanUncheckedLabel: \"Nē\",\n    confirmRemoveFile: \"Vai tiešām vēlaties noņemt šo failu: {0}?\",\n    confirmRemoveAllFiles: \"Vai tiešām vēlaties noņemt visus failus?\",\n    questionTitlePatternText: \"Jautājuma nosaukums\",\n    modalCancelButtonText: \"Atcelt\",\n    modalApplyButtonText: \"Pielietot\",\n    filterStringPlaceholder: \"Ierakstiet, lai meklētu...\",\n    emptyMessage: \"Nav datu, ko rādīt\",\n    noEntriesText: \"Vēl nav neviena ieraksta.\\nNoklikšķiniet uz zemāk esošās pogas, lai pievienotu jaunu ierakstu.\",\n    noEntriesReadonlyText: \"Ierakstu nav.\",\n    more: \"Vairāk\",\n    tagboxDoneButtonCaption: \"LABI\",\n    selectToRankEmptyRankedAreaText: \"Visas izvēles ir sarindotas\",\n    selectToRankEmptyUnrankedAreaText: \"Velciet un nometiet izvēles iespējas šeit, lai tās sarindotu\"\n};\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"lv\"] = latvianSurveyStrings;\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"lv\"] = \"latviešu\";\n// The following strings have been translated by a machine translation service\n// Remove those strings that you have corrected manually\n// panelDynamicTabTextFormat: \"Panel {panelIndex}\" => \"Panelis {panelIndex}\"\n// emptyMessage: \"No data to display\" => \"Nav datu, ko rādīt\"\n// noEntriesReadonlyText: \"There are no entries.\" => \"Ierakstu nav.\"\n// more: \"More\" => \"Vairāk\"\n// tagboxDoneButtonCaption: \"OK\" => \"LABI\"\n// selectToRankEmptyRankedAreaText: \"All choices are ranked\" => \"Visas izvēles ir sarindotas\"\n// selectToRankEmptyUnrankedAreaText: \"Drag and drop choices here to rank them\" => \"Velciet un nometiet izvēles iespējas šeit, lai tās sarindotu\"// takePhotoCaption: \"Take Photo\" => \"Uzņemt fotoattēlu\"\n// cameraPlaceHolder: \"Click the button below to take a photo using the camera.\" => \"Noklikšķiniet uz pogas zemāk, lai uzņemtu fotoattēlu, izmantojot kameru.\"\n// fileCameraDragAreaPlaceHolder: \"Drag and drop or select a file to upload or take a photo using the camera.\" => \"Velciet un nometiet vai atlasiet failu, ko augšupielādēt vai uzņemt fotoattēlu, izmantojot kameru.\"\n// replaceFileCaption: \"Replace file\" => \"Aizstāt failu\"\n\n\n/***/ }),\n\n/***/ \"./src/localization/lithuanian.ts\":\n/*!****************************************!*\\\n  !*** ./src/localization/lithuanian.ts ***!\n  \\****************************************/\n/*! exports provided: lithuaniaSurveyStrings */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_2017465__) {\n\n\"use strict\";\n__nested_webpack_require_2017465__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_2017465__.d(__nested_webpack_exports__, \"lithuaniaSurveyStrings\", function() { return lithuaniaSurveyStrings; });\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_2017465__(/*! survey-core */ \"./src/entries/core.ts\");\n\nvar lithuaniaSurveyStrings = {\n    pagePrevText: \"Atgal\",\n    pageNextText: \"Toliau\",\n    completeText: \"Baigti\",\n    previewText: \"Peržiūra\",\n    editText: \"Redaguoti\",\n    startSurveyText: \"Pradėti\",\n    otherItemText: \"Kita (įvesti)\",\n    noneItemText: \"Nėra\",\n    selectAllItemText: \"Pasirinkti visus\",\n    progressText: \"Puslapis {0} iš {1}\",\n    indexText: \"{1} {0}\",\n    panelDynamicProgressText: \"Įrašyti {0} iš {1}\",\n    panelDynamicTabTextFormat: \"Skydelis {panelIndex}\",\n    questionsProgressText: \"Atsakė į {0} / {1} klausimus\",\n    emptySurvey: \"Apklausoje nėra matomo puslapio ar klausimo.\",\n    completingSurvey: \"Dėkojame už dalyvavimą apklausoje!\",\n    completingSurveyBefore: \"Mūsų įrašai rodo, kad jau atlikote šią apklausą.\",\n    loadingSurvey: \"Prašome palaukti...\",\n    placeholder: \"Pasirinkti...\",\n    ratingOptionsCaption: \"Žymėti...\",\n    value: \"reikšmė\",\n    requiredError: \"Būtina atsakyti į šį klausimą.\",\n    requiredErrorInPanel: \"Būtina atsakyti bent į vieną klausimą.\",\n    requiredInAllRowsError: \"Prašome atsakyti į klausimus visose eilutėse.\",\n    numericError: \"Turi būti skaičiai.\",\n    minError: \"Vertė neturėtų būti mažesnė nei {0}\",\n    maxError: \"Vertė neturėtų būti didesnė nei {0}\",\n    textMinLength: \"Prašome suvesti bent {0} simbolius.\",\n    textMaxLength: \"Prašome suvesti mažiau nei {0} simbolių.\",\n    textMinMaxLength: \"Prašome suvesti daugiau nei {0} ir mažiau nei {1} simbolių.\",\n    minRowCountError: \"Prašome suvesti ne mažiau nei {0} eilučių.\",\n    minSelectError: \"Prašome pasirinkti bent {0} variantų.\",\n    maxSelectError: \"Pasirinkite ne daugiau kaip {0} variantus.\",\n    numericMinMax: \"'{0}' turi būti lygus arba didesnis nei {1} ir lygus arba mažesnis nei {2}\",\n    numericMin: \"'{0}' turėtų būti lygus arba didesnis nei {1}\",\n    numericMax: \"'{0}' turėtų būti lygus ar mažesnis už {1}\",\n    invalidEmail: \"Prašome įvesti galiojantį elektroninio pašto adresą.\",\n    invalidExpression: \"Reikšmė: {0} turi grąžinti 'true'.\",\n    urlRequestError: \"Užklausa grąžino klaidą'{0}'. {1}\",\n    urlGetChoicesError: \"Užklausa grąžino tuščius duomenis arba 'path' savybė yra neteisinga\",\n    exceedMaxSize: \"Failo dydis neturi viršyti {0}.\",\n    otherRequiredError: \"Įveskite kitą reikšmę.\",\n    uploadingFile: \"Jūsų failas yra keliamas. Palaukite keletą sekundžių ir bandykite dar kartą.\",\n    loadingFile: \"Prašome palaukti...\",\n    chooseFile: \"Pasirinkti failą(us)...\",\n    noFileChosen: \"Nepasirinktas joks failas\",\n    fileDragAreaPlaceholder: \"Nuvilkite failą čia arba spustelėkite žemiau esantį mygtuką ir pasirinkite failą, kurį norite įkelti.\",\n    confirmDelete: \"Ar norite ištrinti įrašą?\",\n    keyDuplicationError: \"Ši reikšmė turėtų būti unikali.\",\n    addColumn: \"Pridėti stulpelį\",\n    addRow: \"Pridėti eilutę\",\n    removeRow: \"Ištrinti\",\n    emptyRowsText: \"Eilių nėra.\",\n    addPanel: \"Pridėti naują\",\n    removePanel: \"Ištrinti\",\n    choices_Item: \"elementas\",\n    matrix_column: \"Stulpelis\",\n    matrix_row: \"Eilutė\",\n    multipletext_itemname: \"SMS žinutė\",\n    savingData: \"Rezultatai saugomi serveryje...\",\n    savingDataError: \"Įvyko klaida ir mes negalėjome išsaugoti rezultatų.\",\n    savingDataSuccess: \"Rezultatai buvo išsaugoti sėkmingai!\",\n    saveAgainButton: \"Bandyti dar kartą\",\n    timerMin: \"min\",\n    timerSec: \"sek\",\n    timerSpentAll: \"Praleidote {0} šiame puslapyje ir {1} iš viso.\",\n    timerSpentPage: \"Praleidote {0} šiame puslapyje.\",\n    timerSpentSurvey: \"Praleidote {0} iš viso.\",\n    timerLimitAll: \"Praleidote {0} iš {1} šiame puslapyje ir {2} iš {3} iš viso.\",\n    timerLimitPage: \"Praleidote {0} iš {1} šiame puslapyje.\",\n    timerLimitSurvey: \"Praleidote {0} iš {1} iš viso.\",\n    clearCaption: \"Valyti\",\n    signaturePlaceHolder: \"Pasirašykite čia\",\n    chooseFileCaption: \"Pasirinkti failą\",\n    takePhotoCaption: \"Fotografuoti\",\n    cameraPlaceHolder: \"Spustelėkite žemiau esantį mygtuką, kad nufotografuotumėte fotoaparatu.\",\n    fileCameraDragAreaPlaceHolder: \"Nuvilkite arba pasirinkite failą, kurį norite įkelti arba nufotografuoti naudodami fotoaparatą.\",\n    replaceFileCaption: \"Pakeiskite failą\",\n    removeFileCaption: \"Ištrinti šį failą\",\n    booleanCheckedLabel: \"Taip\",\n    booleanUncheckedLabel: \"Ne\",\n    confirmRemoveFile: \"Ar tikrai norite pašalinti šį failą: {0}?\",\n    confirmRemoveAllFiles: \"Ar tikrai norite pašalinti visus failus?\",\n    questionTitlePatternText: \"Klausimo pavadinimas\",\n    modalCancelButtonText: \"Atšaukti\",\n    modalApplyButtonText: \"Vartoti\",\n    filterStringPlaceholder: \"Įveskite, kad ieškotumėte...\",\n    emptyMessage: \"Nėra rodomų duomenų\",\n    noEntriesText: \"Įrašų dar nėra.\\nSpustelėkite žemiau esantį mygtuką, kad pridėtumėte naują įrašą.\",\n    noEntriesReadonlyText: \"Įrašų nėra.\",\n    more: \"Daugiau\",\n    tagboxDoneButtonCaption: \"GERAI\",\n    selectToRankEmptyRankedAreaText: \"Visi pasirinkimai yra reitinguojami\",\n    selectToRankEmptyUnrankedAreaText: \"Nuvilkite pasirinkimus čia, kad juos reitinguotumėte\"\n};\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"lt\"] = lithuaniaSurveyStrings;\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"lt\"] = \"lietuvių\";\n// The following strings have been translated by a machine translation service\n// Remove those strings that you have corrected manually\n// indexText: \"{0} of {1}\" => \"{1} {0}\"\n// panelDynamicTabTextFormat: \"Panel {panelIndex}\" => \"Skydelis {panelIndex}\"\n// ratingOptionsCaption: \"Select...\" => \"Žymėti...\"\n// minError: \"The value should not be less than {0}\" => \"Vertė neturėtų būti mažesnė nei {0}\"\n// maxError: \"The value should not be greater than {0}\" => \"Vertė neturėtų būti didesnė nei {0}\"\n// fileDragAreaPlaceholder: \"Drag and drop a file here or click the button below and choose a file to upload.\" => \"Nuvilkite failą čia arba spustelėkite žemiau esantį mygtuką ir pasirinkite failą, kurį norite įkelti.\"\n// emptyRowsText: \"There are no rows.\" => \"Eilių nėra.\"\n// multipletext_itemname: \"text\" => \"SMS žinutė\"\n// signaturePlaceHolder: \"Sign here\" => \"Pasirašykite čia\"\n// modalCancelButtonText: \"Cancel\" => \"Atšaukti\"\n// modalApplyButtonText: \"Apply\" => \"Vartoti\"\n// filterStringPlaceholder: \"Type to search...\" => \"Įveskite, kad ieškotumėte...\"\n// emptyMessage: \"No data to display\" => \"Nėra rodomų duomenų\"\n// noEntriesText: \"There are no entries yet.\\nClick the button below to add a new entry.\" => \"Įrašų dar nėra.\\nSpustelėkite žemiau esantį mygtuką, kad pridėtumėte naują įrašą.\"\n// noEntriesReadonlyText: \"There are no entries.\" => \"Įrašų nėra.\"\n// more: \"More\" => \"Daugiau\"\n// tagboxDoneButtonCaption: \"OK\" => \"GERAI\"\n// selectToRankEmptyRankedAreaText: \"All choices are ranked\" => \"Visi pasirinkimai yra reitinguojami\"\n// selectToRankEmptyUnrankedAreaText: \"Drag and drop choices here to rank them\" => \"Nuvilkite pasirinkimus čia, kad juos reitinguotumėte\"// takePhotoCaption: \"Take Photo\" => \"Fotografuoti\"\n// cameraPlaceHolder: \"Click the button below to take a photo using the camera.\" => \"Spustelėkite žemiau esantį mygtuką, kad nufotografuotumėte fotoaparatu.\"\n// fileCameraDragAreaPlaceHolder: \"Drag and drop or select a file to upload or take a photo using the camera.\" => \"Nuvilkite arba pasirinkite failą, kurį norite įkelti arba nufotografuoti naudodami fotoaparatą.\"\n// replaceFileCaption: \"Replace file\" => \"Pakeiskite failą\"\n\n\n/***/ }),\n\n/***/ \"./src/localization/macedonian.ts\":\n/*!****************************************!*\\\n  !*** ./src/localization/macedonian.ts ***!\n  \\****************************************/\n/*! exports provided: macedonianSurveyStrings */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_2025440__) {\n\n\"use strict\";\n__nested_webpack_require_2025440__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_2025440__.d(__nested_webpack_exports__, \"macedonianSurveyStrings\", function() { return macedonianSurveyStrings; });\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_2025440__(/*! survey-core */ \"./src/entries/core.ts\");\n\nvar macedonianSurveyStrings = {\n    pagePrevText: \"Претходна\",\n    pageNextText: \"Следно\",\n    completeText: \"Заврши\",\n    previewText: \"Преглед\",\n    editText: \"Уредување\",\n    startSurveyText: \"Започнете\",\n    otherItemText: \"Друго (опиши)\",\n    noneItemText: \"Ништо\",\n    selectAllItemText: \"Селектирај се\",\n    progressText: \"Страница {0} од {1}\",\n    indexText: \"{0} на {1}\",\n    panelDynamicProgressText: \"Сними {0} од {1}\",\n    panelDynamicTabTextFormat: \"Панел {панел Индекс}\",\n    questionsProgressText: \"Одговорени на {0} / {1} прашања\",\n    emptySurvey: \"Нема видлива страница или прашање во истражувањето.\",\n    completingSurvey: \"Ви благодариме што го завршивте истражувањето!\",\n    completingSurveyBefore: \"Нашите записи покажуваат дека веќе сте го завршиле ова истражување.\",\n    loadingSurvey: \"Анкетата се вчитува ...\",\n    placeholder: \"Изберете ...\",\n    ratingOptionsCaption: \"Изберете...\",\n    value: \"вредност\",\n    requiredError: \"Ве молам, одговорете на прашањето.\",\n    requiredErrorInPanel: \"Ве молам, одговорете барем на едно прашање.\",\n    requiredInAllRowsError: \"Ве молиме, одговорете на прашања во сите редови.\",\n    numericError: \"Вредноста треба да биде нумеричка.\",\n    minError: \"Вредноста не треба да биде помала од {0}\",\n    maxError: \"Вредноста не треба да биде поголема од {0}\",\n    textMinLength: \"Внесете најмалку {0} знак/ци.\",\n    textMaxLength: \"Внесете не повеќе од {0} знак/ци.\",\n    textMinMaxLength: \"Внесете најмалку {0} и не повеќе од {1} знаци.\",\n    minRowCountError: \"Пополнете најмалку {0} ред(ови).\",\n    minSelectError: \"Ве молиме изберете најмалку {0} варијанта(и).\",\n    maxSelectError: \"Изберете не повеќе од {0} варијанта(и).\",\n    numericMinMax: \"'{0}' треба да биде најмалку {1} и најмногу {2}\",\n    numericMin: \"'{0}' треба да биде најмалку {1}\",\n    numericMax: \"'{0}' треба да биде најмногу {1}\",\n    invalidEmail: \"Ве молиме внесете валидна е-маил адреса.\",\n    invalidExpression: \"Изразот: {0} треба да се врати 'true'.\",\n    urlRequestError: \"Барањето врати грешка '{0}'. {1} \",\n    urlGetChoicesError: \"Барањето врати празни податоци или својството 'path' е неточно\",\n    exceedMaxSize: \"Големината на датотеката не треба да надминува {0}.\",\n    otherRequiredError: \"Внесете ја другата вредност.\",\n    uploadingFile: \"Вашата датотека се поставува. Ве молиме почекајте неколку секунди и обидете се повторно.\",\n    loadingFile: \"Се вчитува ...\",\n    chooseFile: \"Изберете датотека (и) ...\",\n    noFileChosen: \"Не се избрани датотеки\",\n    fileDragAreaPlaceholder: \"Пуштете датотека овде или кликнете на копчето подолу за да ја вчитате датотеката.\",\n    confirmDelete: \"Дали сакате да го избришете записот?\",\n    keyDuplicationError: \"Оваа вредност треба да биде единствена.\",\n    addColumn: \"Додај колона\",\n    addRow: \"Додади ред\",\n    removeRow: \"Отстрани\",\n    emptyRowsText: \"Нема редови.\",\n    addPanel: \"Додади ново\",\n    removePanel: \"Отстрани\",\n    choices_Item: \"ставка\",\n    matrix_column: \"Колона\",\n    matrix_row: \"Ред\",\n    multipletext_itemname: \"текст.\",\n    savingData: \"Резултатите се зачувуваат на серверот ...\",\n    savingDataError: \"Настана грешка и не можевме да ги зачуваме резултатите.\",\n    savingDataSuccess: \"Резултатите беа успешно зачувани!\",\n    saveAgainButton: \"Обиди се повторно\",\n    timerMin: \"мин\",\n    timerSec: \"сек\",\n    timerSpentAll: \"Поминавте {0} на оваа страница и вкупно {1}.\",\n    timerSpentPage: \"Поминавте {0} на оваа страница.\",\n    timerSpentSurvey: \"Вие потрошивте вкупно {0}.\",\n    timerLimitAll: \"Поминавте {0} од {1} на оваа страница и {2} од {3} вкупно.\",\n    timerLimitPage: \"Поминавте {0} од {1} на оваа страница.\",\n    timerLimitSurvey: \"Вие потрошивте вкупно {0} од {1}.\",\n    clearCaption: \"Да расчисти\",\n    signaturePlaceHolder: \"Потпиши се овде.\",\n    chooseFileCaption: \"Изберете датотека\",\n    takePhotoCaption: \"Фотографирајте\",\n    cameraPlaceHolder: \"Кликнете на копчето подолу за да фотографирате користејќи ја камерата.\",\n    fileCameraDragAreaPlaceHolder: \"Влечете и фрлајте или изберете датотека за качување или фотографирање користејќи ја камерата.\",\n    replaceFileCaption: \"Заменете го фајлот.\",\n    removeFileCaption: \"Отстранете ја оваа датотека\",\n    booleanCheckedLabel: \"Да\",\n    booleanUncheckedLabel: \"Не\",\n    confirmRemoveFile: \"Дали сте сигурни дека сакате да ја отстраните оваа датотека: {0}?\",\n    confirmRemoveAllFiles: \"Дали сте сигурни дека сакате да ги отстраните сите датотеки?\",\n    questionTitlePatternText: \"Наслов на прашањето\",\n    modalCancelButtonText: \"Откажи\",\n    modalApplyButtonText: \"Аплицирај\",\n    filterStringPlaceholder: \"Тип за пребарување...\",\n    emptyMessage: \"Нема податоци за прикажување\",\n    noEntriesText: \"Сеуште нема влезници.\\nКликнете на копчето подолу за да додадете нов влез.\",\n    noEntriesReadonlyText: \"Нема влезници.\",\n    more: \"Повеќе\",\n    tagboxDoneButtonCaption: \"ДОБРО\",\n    selectToRankEmptyRankedAreaText: \"Сите избори се рангирани\",\n    selectToRankEmptyUnrankedAreaText: \"Влечете и фрлете го изборот овде за да ги рангирате\"\n};\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"mk\"] = macedonianSurveyStrings;\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"mk\"] = \"Македонски\";\n// The following strings have been translated by a machine translation service\n// Remove those strings that you have corrected manually\n// indexText: \"{0} of {1}\" => \"{0} на {1}\"\n// panelDynamicTabTextFormat: \"Panel {panelIndex}\" => \"Панел {панел Индекс}\"\n// ratingOptionsCaption: \"Select...\" => \"Изберете...\"\n// multipletext_itemname: \"text\" => \"текст.\"\n// signaturePlaceHolder: \"Sign here\" => \"Потпиши се овде.\"\n// filterStringPlaceholder: \"Type to search...\" => \"Тип за пребарување...\"\n// emptyMessage: \"No data to display\" => \"Нема податоци за прикажување\"\n// noEntriesText: \"There are no entries yet.\\nClick the button below to add a new entry.\" => \"Сеуште нема влезници.\\nКликнете на копчето подолу за да додадете нов влез.\"\n// noEntriesReadonlyText: \"There are no entries.\" => \"Нема влезници.\"\n// more: \"More\" => \"Повеќе\"\n// tagboxDoneButtonCaption: \"OK\" => \"ДОБРО\"\n// selectToRankEmptyRankedAreaText: \"All choices are ranked\" => \"Сите избори се рангирани\"\n// selectToRankEmptyUnrankedAreaText: \"Drag and drop choices here to rank them\" => \"Влечете и фрлете го изборот овде за да ги рангирате\"// takePhotoCaption: \"Take Photo\" => \"Фотографирајте\"\n// cameraPlaceHolder: \"Click the button below to take a photo using the camera.\" => \"Кликнете на копчето подолу за да фотографирате користејќи ја камерата.\"\n// fileCameraDragAreaPlaceHolder: \"Drag and drop or select a file to upload or take a photo using the camera.\" => \"Влечете и фрлајте или изберете датотека за качување или фотографирање користејќи ја камерата.\"\n// replaceFileCaption: \"Replace file\" => \"Заменете го фајлот.\"\n\n\n/***/ }),\n\n/***/ \"./src/localization/malay.ts\":\n/*!***********************************!*\\\n  !*** ./src/localization/malay.ts ***!\n  \\***********************************/\n/*! exports provided: malaySurveyStrings */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_2032884__) {\n\n\"use strict\";\n__nested_webpack_require_2032884__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_2032884__.d(__nested_webpack_exports__, \"malaySurveyStrings\", function() { return malaySurveyStrings; });\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_2032884__(/*! survey-core */ \"./src/entries/core.ts\");\n\nvar malaySurveyStrings = {\n    pagePrevText: \"Sebelumnya\",\n    pageNextText: \"Seterusnya\",\n    completeText: \"Selesai\",\n    previewText: \"Pratonton\",\n    editText: \"Edit\",\n    startSurveyText: \"Mula\",\n    otherItemText: \"Lain (terangkan)\",\n    noneItemText: \"Tiada\",\n    selectAllItemText: \"Pilih Semua\",\n    progressText: \"Halaman {0} daripada {1}\",\n    indexText: \"{0} {1}\",\n    panelDynamicProgressText: \"Rekod {0} daripada {1}\",\n    panelDynamicTabTextFormat: \"Panel {panelIndex}\",\n    questionsProgressText: \"{0}/{1} soalan telah dijawab\",\n    emptySurvey: \"Tiada halaman atau soalan boleh dilihat dalam tinjauan.\",\n    completingSurvey: \"Terima kasih kerana melengkapkan tinjauan!\",\n    completingSurveyBefore: \"Rekod kami menunjukkan yang anda telah melengkapkan tinjauan ini.\",\n    loadingSurvey: \"Memuatkan Tinjauan...\",\n    placeholder: \"Pilih...\",\n    ratingOptionsCaption: \"Pilih...\",\n    value: \"nilai\",\n    requiredError: \"Respons diperlukan.\",\n    requiredErrorInPanel: \"Respons diperlukan: jawab sekurang-kurangnya satu soalan.\",\n    requiredInAllRowsError: \"Respons diperlukan: jawab soalan dalam semua baris.\",\n    numericError: \"Nilai mestilah numerik.\",\n    minError: \"Nilai tidak boleh kurang daripada {0}\",\n    maxError: \"Nilai tidak boleh lebih besar daripada {0}\",\n    textMinLength: \"Sila masukkan sekurang-kurangnya {0} aksara.\",\n    textMaxLength: \"Sila masukkan tidak lebih daripada {0} aksara.\",\n    textMinMaxLength: \"Sila masukkan sekurang-kurangnya {0} dan tidak lebih daripada {1} aksara.\",\n    minRowCountError: \"Sila isikan sekurang-kurangnya {0} baris.\",\n    minSelectError: \"Sila pilih sekurang-kurangnya {0} varian.\",\n    maxSelectError: \"Sila pilih tidak lebih daripada {0} varian.\",\n    numericMinMax: \"'{0}' mestilah sekurang-kurangnya {1} dan paling banyak {2}\",\n    numericMin: \"'{0}' mestilah sekurang-kurangnya {1}\",\n    numericMax: \"'{0}' mestilah paling banyak {1}\",\n    invalidEmail: \"Sila masukkan alamat e-mel yang sah.\",\n    invalidExpression: \"Ekspresi: {0} hendaklah mengembalikan nilai 'benar'.\",\n    urlRequestError: \"Permintaan mengembalikan ralat '{0}'. {1}\",\n    urlGetChoicesError: \"Permintaan mengembalikan data kosong atau ciri 'laluan' salah\",\n    exceedMaxSize: \"Saiz fail hendaklah tidak melebihi {0}.\",\n    otherRequiredError: \"Respons diperlukan: masukkan nilai lain.\",\n    uploadingFile: \"Fail anda sedang dimuat naik. Sila tunggu beberapa saat dan cuba lagi.\",\n    loadingFile: \"Memuat...\",\n    chooseFile: \"Pilih fail...\",\n    noFileChosen: \"Tiada fail dipilih\",\n    fileDragAreaPlaceholder: \"Letakkan fail di sini atau klik butang di bawah untuk memuatkan fail.\",\n    confirmDelete: \"Adakah anda ingin memadamkan rekod?\",\n    keyDuplicationError: \"Nilai ini hendaklah unik.\",\n    addColumn: \"Tambahkan lajur\",\n    addRow: \"Tambahkan baris\",\n    removeRow: \"Alih keluar\",\n    emptyRowsText: \"Tiada baris.\",\n    addPanel: \"Tambah baharu\",\n    removePanel: \"Alih keluar\",\n    choices_Item: \"item\",\n    matrix_column: \"Lajur\",\n    matrix_row: \"Baris\",\n    multipletext_itemname: \"teks\",\n    savingData: \"Keputusan sedang disimpan pada pelayan...\",\n    savingDataError: \"Ralat berlaku dan kami tidak dapat menyimpan keputusan.\",\n    savingDataSuccess: \"Keputusan berjaya disimpan!\",\n    saveAgainButton: \"Cuba lagi\",\n    timerMin: \"min\",\n    timerSec: \"saat\",\n    timerSpentAll: \"Anda telah meluangkan {0} pada halaman ini dan {1} secara keseluruhan.\",\n    timerSpentPage: \"Anda telah meluangkan {0} pada halaman ini.\",\n    timerSpentSurvey: \"Anda telah meluangkan {0} secara keseluruhan.\",\n    timerLimitAll: \"Anda telah meluangkan {0} daripada {1} pada halaman ini dan {2} daripada {3} secara keseluruhan.\",\n    timerLimitPage: \"Anda telah meluangkan {0} daripada {1} pada halaman ini.\",\n    timerLimitSurvey: \"Anda telah meluangkan {0} daripada {1} secara keseluruhan.\",\n    clearCaption: \"Kosongkan\",\n    signaturePlaceHolder: \"Tandatangan di sini\",\n    chooseFileCaption: \"Pilih fail\",\n    takePhotoCaption: \"Ambil gambar\",\n    cameraPlaceHolder: \"Klik butang di bawah untuk mengambil gambar menggunakan kamera.\",\n    fileCameraDragAreaPlaceHolder: \"Seret dan lepas atau pilih fail untuk memuat naik atau mengambil foto menggunakan kamera.\",\n    replaceFileCaption: \"Gantikan fail\",\n    removeFileCaption: \"Alih keluar fail ini\",\n    booleanCheckedLabel: \"Ya\",\n    booleanUncheckedLabel: \"Tidak\",\n    confirmRemoveFile: \"Anda pasti ingin mengalih keluar fail ini: {0}?\",\n    confirmRemoveAllFiles: \"Anda pasti ingin mengalih keluar semua fail?\",\n    questionTitlePatternText: \"Tajuk Soalan\",\n    modalCancelButtonText: \"Batal\",\n    modalApplyButtonText: \"Guna\",\n    filterStringPlaceholder: \"Taip untuk membuat carian...\",\n    emptyMessage: \"Tiada data untuk dipaparkan\",\n    noEntriesText: \"Belum ada entri.\\nKlik butang di bawah untuk menambahkan entri.\",\n    noEntriesReadonlyText: \"Tiada penyertaan.\",\n    more: \"Lebih banyak\",\n    tagboxDoneButtonCaption: \"OK\",\n    selectToRankEmptyRankedAreaText: \"Semua pilihan disenaraikan\",\n    selectToRankEmptyUnrankedAreaText: \"Seret dan lepaskan pilihan di sini untuk meletakkannya\"\n};\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"ms\"] = malaySurveyStrings;\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"ms\"] = \"melayu\";\n// The following strings have been translated by a machine translation service\n// Remove those strings that you have corrected manually\n// indexText: \"{0} of {1}\" => \"{0} {1}\"\n// panelDynamicTabTextFormat: \"Panel {panelIndex}\" => \"Panel {panelIndex}\"\n// ratingOptionsCaption: \"Select...\" => \"Pilih...\"\n// emptyMessage: \"No data to display\" => \"Tiada data untuk dipaparkan\"\n// noEntriesReadonlyText: \"There are no entries.\" => \"Tiada penyertaan.\"\n// more: \"More\" => \"Lebih banyak\"\n// tagboxDoneButtonCaption: \"OK\" => \"OK\"\n// selectToRankEmptyRankedAreaText: \"All choices are ranked\" => \"Semua pilihan disenaraikan\"\n// selectToRankEmptyUnrankedAreaText: \"Drag and drop choices here to rank them\" => \"Seret dan lepaskan pilihan di sini untuk meletakkannya\"// takePhotoCaption: \"Take Photo\" => \"Ambil gambar\"\n// cameraPlaceHolder: \"Click the button below to take a photo using the camera.\" => \"Klik butang di bawah untuk mengambil gambar menggunakan kamera.\"\n// fileCameraDragAreaPlaceHolder: \"Drag and drop or select a file to upload or take a photo using the camera.\" => \"Seret dan lepas atau pilih fail untuk memuat naik atau mengambil foto menggunakan kamera.\"\n// replaceFileCaption: \"Replace file\" => \"Gantikan fail\"\n\n\n/***/ }),\n\n/***/ \"./src/localization/nl-BE.ts\":\n/*!***********************************!*\\\n  !*** ./src/localization/nl-BE.ts ***!\n  \\***********************************/\n/*! no exports provided */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_2039997__) {\n\n\"use strict\";\n__nested_webpack_require_2039997__.r(__nested_webpack_exports__);\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_2039997__(/*! survey-core */ \"./src/entries/core.ts\");\n/* harmony import */ var _dutch__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_2039997__(/*! ./dutch */ \"./src/localization/dutch.ts\");\n\n\n/**\n * This is initialized as a copy of the Dutch strings, when they start to deviate a choice has to be made:\n * - Copy the Dutch set once and move forward as if it are 2 totally different languages\n * - Override the relevant strings only\n */\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"nl-BE\"] = _dutch__WEBPACK_IMPORTED_MODULE_1__[\"dutchSurveyStrings\"];\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"nl-BE\"] = \"vlaams\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/norwegian.ts\":\n/*!***************************************!*\\\n  !*** ./src/localization/norwegian.ts ***!\n  \\***************************************/\n/*! exports provided: norwegianSurveyStrings */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_2041106__) {\n\n\"use strict\";\n__nested_webpack_require_2041106__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_2041106__.d(__nested_webpack_exports__, \"norwegianSurveyStrings\", function() { return norwegianSurveyStrings; });\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_2041106__(/*! survey-core */ \"./src/entries/core.ts\");\n\nvar norwegianSurveyStrings = {\n    pagePrevText: \"Forrige\",\n    pageNextText: \"Neste\",\n    completeText: \"Fullfør\",\n    previewText: \"Forhåndsvisning\",\n    editText: \"Redigere\",\n    startSurveyText: \"Start\",\n    otherItemText: \"Annet (beskriv)\",\n    noneItemText: \"Ingen\",\n    selectAllItemText: \"Velg alle\",\n    progressText: \"Side {0} av {1}\",\n    indexText: \"{0} av {1}\",\n    panelDynamicProgressText: \"Ta opp {0} av {1}\",\n    panelDynamicTabTextFormat: \"Panel {panelIndex}\",\n    questionsProgressText: \"Besvarte {0} / {1} spørsmål\",\n    emptySurvey: \"Det er ingen synlig side eller spørsmål i undersøkelsen.\",\n    completingSurvey: \"Takk for at du fullførte undersøkelsen!\",\n    completingSurveyBefore: \"Våre data viser at du allerede har gjennomført denne undersøkelsen.\",\n    loadingSurvey: \"Undersøkelsen laster...\",\n    placeholder: \"Velg...\",\n    ratingOptionsCaption: \"Velge...\",\n    value: \"verdi\",\n    requiredError: \"Vennligst svar på spørsmålet.\",\n    requiredErrorInPanel: \"Vennligst svar på minst ett spørsmål.\",\n    requiredInAllRowsError: \"Vennligst svar på spørsmål i alle rader.\",\n    numericError: \"Verdien skal være numerisk.\",\n    minError: \"Verdien bør ikke være mindre enn {0}\",\n    maxError: \"Verdien bør ikke være større enn {0}\",\n    textMinLength: \"Vennligst skriv inn minst {0} tegn.\",\n    textMaxLength: \"Vennligst skriv inn mindre enn {0} tegn.\",\n    textMinMaxLength: \"Vennligst skriv inn mer enn {0} og mindre enn {1} tegn.\",\n    minRowCountError: \"Vennligst fyll inn minst {0} rader.\",\n    minSelectError: \"Vennligst velg minst {0} varianter.\",\n    maxSelectError: \"Vennligst ikke velg mer enn {0} varianter.\",\n    numericMinMax: \"'{0}' bør være lik eller mer enn {1} og lik eller mindre enn {2}\",\n    numericMin: \"'{0}' bør være lik eller mer enn {1}\",\n    numericMax: \"'{0}' bør være lik eller mindre enn {1}\",\n    invalidEmail: \"Vennligst skriv inn en gyldig e-post adresse.\",\n    invalidExpression: \"Uttrykket: {0} skal returnere 'sant'.\",\n    urlRequestError: \"Forespørselen returnerte feilen '{0}'. {1}\",\n    urlGetChoicesError: \"Forespørselen returnerte tomme data, eller 'sti' -egenskapen er feil\",\n    exceedMaxSize: \"Filstørrelsen bør ikke overstige {0}.\",\n    otherRequiredError: \"Vennligst skriv inn den andre verdien.\",\n    uploadingFile: \"Filen din lastes opp. Vennligst vent noen sekunder og prøv igjen.\",\n    loadingFile: \"Laster inn ...\",\n    chooseFile: \"Velg fil (er) ...\",\n    noFileChosen: \"Ingen fil valgt\",\n    fileDragAreaPlaceholder: \"Dra og slipp en fil her, eller klikk på knappen nedenfor og velg en fil du vil laste opp.\",\n    confirmDelete: \"Ønsker du å slette posten?\",\n    keyDuplicationError: \"Denne verdien skal være unik.\",\n    addColumn: \"Legg til kolonne\",\n    addRow: \"Legg til rad\",\n    removeRow: \"Fjern\",\n    emptyRowsText: \"Det er ingen rader.\",\n    addPanel: \"Legg til ny\",\n    removePanel: \"Fjerne\",\n    choices_Item: \"element\",\n    matrix_column: \"Kolonne\",\n    matrix_row: \"Rad\",\n    multipletext_itemname: \"Tekst\",\n    savingData: \"Resultatene lagres på serveren ...\",\n    savingDataError: \"Det oppsto en feil, og vi kunne ikke lagre resultatene.\",\n    savingDataSuccess: \"Resultatene ble lagret!\",\n    saveAgainButton: \"Prøv igjen\",\n    timerMin: \"min\",\n    timerSec: \"sek\",\n    timerSpentAll: \"Du har tilbrakt {0} på denne siden og {1} totalt.\",\n    timerSpentPage: \"Du har tilbrakt {0} på denne siden.\",\n    timerSpentSurvey: \"Du har tilbrakt {0} totalt.\",\n    timerLimitAll: \"Du har tilbrakt {0} av {1} på denne siden og totalt {2} av {3}.\",\n    timerLimitPage: \"Du har tilbrakt {0} av {1} på denne siden.\",\n    timerLimitSurvey: \"Du har tilbrakt {0} av {1} totalt.\",\n    clearCaption: \"Klar\",\n    signaturePlaceHolder: \"Logg inn her\",\n    chooseFileCaption: \"Velg Fil\",\n    takePhotoCaption: \"Ta bilde\",\n    cameraPlaceHolder: \"Klikk på knappen nedenfor for å ta et bilde med kameraet.\",\n    fileCameraDragAreaPlaceHolder: \"Dra og slipp eller velg en fil for å laste opp eller ta et bilde med kameraet.\",\n    replaceFileCaption: \"Erstatt fil\",\n    removeFileCaption: \"Fjern denne filen\",\n    booleanCheckedLabel: \"Ja\",\n    booleanUncheckedLabel: \"Nei\",\n    confirmRemoveFile: \"Er du sikker på at du vil fjerne denne filen: {0}?\",\n    confirmRemoveAllFiles: \"Er du sikker på at du vil fjerne alle filene?\",\n    questionTitlePatternText: \"Spørsmålstittel\",\n    modalCancelButtonText: \"Annullere\",\n    modalApplyButtonText: \"Bruke\",\n    filterStringPlaceholder: \"Skriv for å søke ...\",\n    emptyMessage: \"Ingen data å vise\",\n    noEntriesText: \"Det er ingen oppføringer ennå.\\nKlikk på knappen nedenfor for å legge til en ny oppføring.\",\n    noEntriesReadonlyText: \"Det er ingen oppføringer.\",\n    more: \"Mer\",\n    tagboxDoneButtonCaption: \"OK\",\n    selectToRankEmptyRankedAreaText: \"Alle valg er rangert\",\n    selectToRankEmptyUnrankedAreaText: \"Dra og slipp valg her for å rangere dem\"\n};\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"no\"] = norwegianSurveyStrings;\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"no\"] = \"norsk\";\n// The following strings have been translated by a machine translation service\n// Remove those strings that you have corrected manually\n// indexText: \"{0} of {1}\" => \"{0} av {1}\"\n// panelDynamicTabTextFormat: \"Panel {panelIndex}\" => \"Panel {panelIndex}\"\n// ratingOptionsCaption: \"Select...\" => \"Velge...\"\n// minError: \"The value should not be less than {0}\" => \"Verdien bør ikke være mindre enn {0}\"\n// maxError: \"The value should not be greater than {0}\" => \"Verdien bør ikke være større enn {0}\"\n// fileDragAreaPlaceholder: \"Drag and drop a file here or click the button below and choose a file to upload.\" => \"Dra og slipp en fil her, eller klikk på knappen nedenfor og velg en fil du vil laste opp.\"\n// emptyRowsText: \"There are no rows.\" => \"Det er ingen rader.\"\n// multipletext_itemname: \"text\" => \"Tekst\"\n// signaturePlaceHolder: \"Sign here\" => \"Logg inn her\"\n// modalCancelButtonText: \"Cancel\" => \"Annullere\"\n// modalApplyButtonText: \"Apply\" => \"Bruke\"\n// filterStringPlaceholder: \"Type to search...\" => \"Skriv for å søke ...\"\n// emptyMessage: \"No data to display\" => \"Ingen data å vise\"\n// noEntriesText: \"There are no entries yet.\\nClick the button below to add a new entry.\" => \"Det er ingen oppføringer ennå.\\nKlikk på knappen nedenfor for å legge til en ny oppføring.\"\n// noEntriesReadonlyText: \"There are no entries.\" => \"Det er ingen oppføringer.\"\n// more: \"More\" => \"Mer\"\n// tagboxDoneButtonCaption: \"OK\" => \"OK\"\n// selectToRankEmptyRankedAreaText: \"All choices are ranked\" => \"Alle valg er rangert\"\n// selectToRankEmptyUnrankedAreaText: \"Drag and drop choices here to rank them\" => \"Dra og slipp valg her for å rangere dem\"// takePhotoCaption: \"Take Photo\" => \"Ta bilde\"\n// cameraPlaceHolder: \"Click the button below to take a photo using the camera.\" => \"Klikk på knappen nedenfor for å ta et bilde med kameraet.\"\n// fileCameraDragAreaPlaceHolder: \"Drag and drop or select a file to upload or take a photo using the camera.\" => \"Dra og slipp eller velg en fil for å laste opp eller ta et bilde med kameraet.\"\n// replaceFileCaption: \"Replace file\" => \"Erstatt fil\"\n\n\n/***/ }),\n\n/***/ \"./src/localization/persian.ts\":\n/*!*************************************!*\\\n  !*** ./src/localization/persian.ts ***!\n  \\*************************************/\n/*! exports provided: persianSurveyStrings */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_2048893__) {\n\n\"use strict\";\n__nested_webpack_require_2048893__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_2048893__.d(__nested_webpack_exports__, \"persianSurveyStrings\", function() { return persianSurveyStrings; });\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_2048893__(/*! survey-core */ \"./src/entries/core.ts\");\n\nvar persianSurveyStrings = {\n    pagePrevText: \"قبلی\",\n    pageNextText: \"بعدی\",\n    completeText: \"تکمیل\",\n    previewText: \"پیش نمایش\",\n    editText: \"ویرایش\",\n    startSurveyText: \"شروع\",\n    otherItemText: \"دیگر(توضیح)\",\n    noneItemText: \"هیچ\",\n    selectAllItemText: \"انتخاب همه\",\n    progressText: \"صفحه {0} از {1}\",\n    indexText: \"{0} {1}\",\n    panelDynamicProgressText: \"مورد {0} از {1}\",\n    panelDynamicTabTextFormat: \"پنل {panelIndex}\",\n    questionsProgressText: \"تعداد پاسخ {0}/{1} سوال\",\n    emptySurvey: \"صفحه ای یا گزینه ای برای این پرسشنامه موجود نیست.\",\n    completingSurvey: \"از شما بابت تکمیل این پرسشنامه متشکریم\",\n    completingSurveyBefore: \"به نظر می رسد هم هم اکنون پرسشنامه را تکمیل کرده اید.\",\n    loadingSurvey: \"درحال ایجاد پرسشنامه\",\n    placeholder: \"انتخاب کنید...\",\n    ratingOptionsCaption: \"انتخاب...\",\n    value: \"مقدار\",\n    requiredError: \"لطفا به سوال پاسخ دهید\",\n    requiredErrorInPanel: \"لطفا حداقل به یک سوال پاسخ دهید.\",\n    requiredInAllRowsError: \"لطفا سوالات تمام سطرها را پاسخ دهید.\",\n    numericError: \"مقدار باید عددی باشد\",\n    minError: \"ارزش نباید کمتر از {0}\",\n    maxError: \"ارزش نباید بیشتر از {0}\",\n    textMinLength: \"لطفا حداقل  {0} حرف وارد کنید\",\n    textMaxLength: \"لطفا کمتر از  {0} حرف وارد کنید.\",\n    textMinMaxLength: \"لطفا بیشتر از  {0} حرف و کمتر از {1} حرف وارد کنید.\",\n    minRowCountError: \"لطفا حداقل {0} سطر وارد کنید.\",\n    minSelectError: \"حداقل {0} انتخاب کنید.\",\n    maxSelectError: \"لطفا بیشتر از  {0} انتخاب کنید.\",\n    numericMinMax: \"'{0}' باید بین {1} و {2} باشد\",\n    numericMin: \"'{0}' بزرگتر مساوی {1} باشد\",\n    numericMax: \"'{0}' باید کوچکتر یا مساوی {1} باشد\",\n    invalidEmail: \"لطفا ایمیل صحیح درج کنید\",\n    invalidExpression: \"عبارت: {0} پاسخ باید 'true' باشد.\",\n    urlRequestError: \"درخواست با خطا روبرو شد: '{0}'. {1}\",\n    urlGetChoicesError: \"درخواست مسیری خالی بازگشت داده یا مسیر درست تنظیم نشده\",\n    exceedMaxSize: \"بیشترین حجم مجاز فایل: {0}\",\n    otherRequiredError: \"مقدار 'دیگر' را وارد کنید\",\n    uploadingFile: \"فایل در حال آیلود است. لطفا صبر کنید.\",\n    loadingFile: \"بارگیری...\",\n    chooseFile: \"انتخاب فایل(ها)...\",\n    noFileChosen: \"هیچ فایلی انتخاب نشده\",\n    fileDragAreaPlaceholder: \"کشیدن و رها کردن یک فایل در اینجا و یا کلیک بر روی دکمه زیر و یک فایل برای اپلود را انتخاب کنید.\",\n    confirmDelete: \"آیا مایل به حذف این ردیف هستید؟\",\n    keyDuplicationError: \"این مقدار باید غیر تکراری باشد\",\n    addColumn: \"ستون جدید\",\n    addRow: \"سطر جدید\",\n    removeRow: \"حذف\",\n    emptyRowsText: \"هیچ ردیفی وجود ندارد.\",\n    addPanel: \"جدید\",\n    removePanel: \"حذف\",\n    choices_Item: \"آیتم\",\n    matrix_column: \"ستون\",\n    matrix_row: \"سطر\",\n    multipletext_itemname: \"پیامک\",\n    savingData: \"نتایج در حال ذخیره سازی در سرور است\",\n    savingDataError: \"خطایی در ذخیره سازی نتایج رخ داده است\",\n    savingDataSuccess: \"نتایج با موفقیت ذخیره شد\",\n    saveAgainButton: \"مجدد تلاش کنید\",\n    timerMin: \"دقیقه\",\n    timerSec: \"ثانیه\",\n    timerSpentAll: \"شما مدت {0} در این صفحه و مدت {1} را در مجموع سپری کرده اید.\",\n    timerSpentPage: \"شما مدت {0} را در این صفحه سپری کرده اید.\",\n    timerSpentSurvey: \"شما مدت {0} را در مجموع سپری کرده اید.\",\n    timerLimitAll: \"شما مدت {0} از {1} در این صفحه و مدت {2} از {3} را در مجموع سپری کرده اید.\",\n    timerLimitPage: \"شما مدت {0} از {1} را در این صفحه سپری کرده اید.\",\n    timerLimitSurvey: \"شما مدت {0} از {1} را در مجموع سپری کرده اید.\",\n    clearCaption: \"خالی کردن\",\n    signaturePlaceHolder: \"اینجا را امضا کنید\",\n    chooseFileCaption: \"انتخاب فایل\",\n    takePhotoCaption: \"گرفتن عکس\",\n    cameraPlaceHolder: \"روی دکمه زیر کلیک کنید تا با استفاده از دوربین عکس بگیرید.\",\n    fileCameraDragAreaPlaceHolder: \"کشیدن و رها کردن یا انتخاب یک فایل برای اپلود یا گرفتن عکس با استفاده از دوربین.\",\n    replaceFileCaption: \"جایگزینی پرونده\",\n    removeFileCaption: \"حذف این فایل\",\n    booleanCheckedLabel: \"بله\",\n    booleanUncheckedLabel: \"خیر\",\n    confirmRemoveFile: \"آیا میخواهید این فایل را پاک کنید: {0}?\",\n    confirmRemoveAllFiles: \"آیا میخواهید تمام فایل ها را پاک کنید?\",\n    questionTitlePatternText: \"عنوان سوال\",\n    modalCancelButtonText: \"لغو\",\n    modalApplyButtonText: \"درخواست\",\n    filterStringPlaceholder: \"تایپ برای جستجو...\",\n    emptyMessage: \"داده ای برای نمایش وجود ندارد\",\n    noEntriesText: \"هنوز هیچ ورودی وجود ندارد.\\nروی دکمه زیر کلیک کنید تا یک ورودی جدید اضافه شود.\",\n    noEntriesReadonlyText: \"هیچ ورودی وجود ندارد.\",\n    more: \"بیشتر\",\n    tagboxDoneButtonCaption: \"باشه\",\n    selectToRankEmptyRankedAreaText: \"همه انتخاب ها رتبه بندی می شوند\",\n    selectToRankEmptyUnrankedAreaText: \"انتخاب های کشیدن و رها کردن در اینجا برای رتبه بندی انها\"\n};\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"fa\"] = persianSurveyStrings;\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"fa\"] = \"فارْسِى\";\n// The following strings have been translated by a machine translation service\n// Remove those strings that you have corrected manually\n// indexText: \"{0} of {1}\" => \"{0} {1}\"\n// panelDynamicTabTextFormat: \"Panel {panelIndex}\" => \"پنل {panelIndex}\"\n// ratingOptionsCaption: \"Select...\" => \"انتخاب...\"\n// minError: \"The value should not be less than {0}\" => \"ارزش نباید کمتر از {0}\"\n// maxError: \"The value should not be greater than {0}\" => \"ارزش نباید بیشتر از {0}\"\n// fileDragAreaPlaceholder: \"Drag and drop a file here or click the button below and choose a file to upload.\" => \"کشیدن و رها کردن یک فایل در اینجا و یا کلیک بر روی دکمه زیر و یک فایل برای اپلود را انتخاب کنید.\"\n// emptyRowsText: \"There are no rows.\" => \"هیچ ردیفی وجود ندارد.\"\n// multipletext_itemname: \"text\" => \"پیامک\"\n// signaturePlaceHolder: \"Sign here\" => \"اینجا را امضا کنید\"\n// modalCancelButtonText: \"Cancel\" => \"لغو\"\n// modalApplyButtonText: \"Apply\" => \"درخواست\"\n// filterStringPlaceholder: \"Type to search...\" => \"تایپ برای جستجو...\"\n// emptyMessage: \"No data to display\" => \"داده ای برای نمایش وجود ندارد\"\n// noEntriesText: \"There are no entries yet.\\nClick the button below to add a new entry.\" => \"هنوز هیچ ورودی وجود ندارد.\\nروی دکمه زیر کلیک کنید تا یک ورودی جدید اضافه شود.\"\n// noEntriesReadonlyText: \"There are no entries.\" => \"هیچ ورودی وجود ندارد.\"\n// more: \"More\" => \"بیشتر\"\n// tagboxDoneButtonCaption: \"OK\" => \"باشه\"\n// selectToRankEmptyRankedAreaText: \"All choices are ranked\" => \"همه انتخاب ها رتبه بندی می شوند\"\n// selectToRankEmptyUnrankedAreaText: \"Drag and drop choices here to rank them\" => \"انتخاب های کشیدن و رها کردن در اینجا برای رتبه بندی انها\"// takePhotoCaption: \"Take Photo\" => \"گرفتن عکس\"\n// cameraPlaceHolder: \"Click the button below to take a photo using the camera.\" => \"روی دکمه زیر کلیک کنید تا با استفاده از دوربین عکس بگیرید.\"\n// fileCameraDragAreaPlaceHolder: \"Drag and drop or select a file to upload or take a photo using the camera.\" => \"کشیدن و رها کردن یا انتخاب یک فایل برای اپلود یا گرفتن عکس با استفاده از دوربین.\"\n// replaceFileCaption: \"Replace file\" => \"جایگزینی پرونده\"\n\n\n/***/ }),\n\n/***/ \"./src/localization/polish.ts\":\n/*!************************************!*\\\n  !*** ./src/localization/polish.ts ***!\n  \\************************************/\n/*! exports provided: polishSurveyStrings */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_2056445__) {\n\n\"use strict\";\n__nested_webpack_require_2056445__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_2056445__.d(__nested_webpack_exports__, \"polishSurveyStrings\", function() { return polishSurveyStrings; });\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_2056445__(/*! survey-core */ \"./src/entries/core.ts\");\n\nvar polishSurveyStrings = {\n    pagePrevText: \"Wstecz\",\n    pageNextText: \"Dalej\",\n    completeText: \"Gotowe\",\n    previewText: \"Premiera\",\n    editText: \"Edycja\",\n    startSurveyText: \"Start\",\n    otherItemText: \"Inna odpowiedź (wpisz)\",\n    noneItemText: \"Brak\",\n    selectAllItemText: \"Wybierz wszystkie\",\n    progressText: \"Strona {0} z {1}\",\n    indexText: \"{0} od {1}\",\n    panelDynamicProgressText: \"Zapis {0} z {1}\",\n    panelDynamicTabTextFormat: \"Panel {panelIndex}\",\n    questionsProgressText: \"Odpowiedzi na {0}/{1} pytania\",\n    emptySurvey: \"Nie ma widocznych pytań.\",\n    completingSurvey: \"Dziękujemy za wypełnienie ankiety!\",\n    completingSurveyBefore: \"Z naszych zapisów wynika, że wypełniłeś już tę ankietę.\",\n    loadingSurvey: \"Trwa wczytywanie ankiety...\",\n    placeholder: \"Wybierz...\",\n    ratingOptionsCaption: \"Kliknij tutaj, aby ocenić...\",\n    value: \"Wartość\",\n    requiredError: \"Proszę odpowiedzieć na to pytanie.\",\n    requiredErrorInPanel: \"Proszę odpowiedzieć na co najmniej jedno pytanie.\",\n    requiredInAllRowsError: \"Proszę odpowiedzieć na wszystkie pytania.\",\n    numericError: \"W tym polu można wpisać tylko liczby.\",\n    minError: \"Wartość nie powinna być mniejsza niż {0}\",\n    maxError: \"Wartość nie powinna być większa niż {0}\",\n    textMinLength: \"Proszę wpisać co najmniej {0} znaków.\",\n    textMaxLength: \"Proszę wpisać mniej niż {0} znaków.\",\n    textMinMaxLength: \"Proszę wpisać więcej niż {0} i mniej niż {1} znaków.\",\n    minRowCountError: \"Proszę uzupełnić przynajmniej {0} wierszy.\",\n    minSelectError: \"Proszę wybrać co najmniej {0} pozycji.\",\n    maxSelectError: \"Proszę wybrać nie więcej niż {0} pozycji.\",\n    numericMinMax: \"Odpowiedź '{0}' powinna być większa lub równa {1} oraz mniejsza lub równa {2}\",\n    numericMin: \"Odpowiedź '{0}' powinna być większa lub równa {1}\",\n    numericMax: \"Odpowiedź '{0}' powinna być mniejsza lub równa {1}\",\n    invalidEmail: \"Proszę podać prawidłowy adres email.\",\n    invalidExpression: \"Wyrażenie: {0} powinno wracać 'prawdziwe'.\",\n    urlRequestError: \"Żądanie zwróciło błąd '{0}'. {1}\",\n    urlGetChoicesError: \"Żądanie nie zwróciło danych albo ścieżka jest nieprawidłowa\",\n    exceedMaxSize: \"Rozmiar przesłanego pliku nie może przekraczać {0}.\",\n    otherRequiredError: \"Proszę podać inną odpowiedź.\",\n    uploadingFile: \"Trwa przenoszenie Twojego pliku, proszę spróbować ponownie za kilka sekund.\",\n    loadingFile: \"Ładowanie...\",\n    chooseFile: \"Wybierz plik(i)...\",\n    noFileChosen: \"Nie wybrano żadnego pliku\",\n    fileDragAreaPlaceholder: \"Upuść plik tutaj lub kliknij przycisk poniżej, aby załadować plik.\",\n    confirmDelete: \"Chcesz skasować nagranie?\",\n    keyDuplicationError: \"Ta wartość powinna być wyjątkowa.\",\n    addColumn: \"Dodaj kolumnę\",\n    addRow: \"Dodaj wiersz\",\n    removeRow: \"Usuń\",\n    emptyRowsText: \"Nie ma rzędów.\",\n    addPanel: \"Dodaj panel\",\n    removePanel: \"Usuń\",\n    choices_Item: \"element\",\n    matrix_column: \"Kolumna\",\n    matrix_row: \"Wiersz\",\n    multipletext_itemname: \"tekst\",\n    savingData: \"Zapisuję wyniki ankiety na serwerze...\",\n    savingDataError: \"Wystąpił błąd i wyniki nie mogły zostać zapisane.\",\n    savingDataSuccess: \"Wyniki zostały poprawnie zapisane!\",\n    saveAgainButton: \"Spróbuj ponownie\",\n    timerMin: \"min\",\n    timerSec: \"sek\",\n    timerSpentAll: \"Spędziłeś {0} na tej stronie a w sumie {1}.\",\n    timerSpentPage: \"Spędziłeś {0} na tej stronie.\",\n    timerSpentSurvey: \"Spędziłeś w sumie {0}.\",\n    timerLimitAll: \"Spędziłeś {0} z {1} na tej stronie a w sumie {2} z {3}.\",\n    timerLimitPage: \"Spędziłeś {0} z {1} na tej stronie\",\n    timerLimitSurvey: \"Spędziłeś {0} z {1}.\",\n    clearCaption: \"Wyczyść\",\n    signaturePlaceHolder: \"Podpisz tutaj\",\n    chooseFileCaption: \"Wybierz plik\",\n    takePhotoCaption: \"Zrób zdjęcie\",\n    cameraPlaceHolder: \"Kliknij przycisk poniżej, aby zrobić zdjęcie aparatem.\",\n    fileCameraDragAreaPlaceHolder: \"Przeciągnij i upuść lub wybierz plik, który chcesz przesłać lub zrobić zdjęcie za pomocą aparatu.\",\n    replaceFileCaption: \"Zastąp plik\",\n    removeFileCaption: \"Usuń ten plik\",\n    booleanCheckedLabel: \"Tak\",\n    booleanUncheckedLabel: \"Nie\",\n    confirmRemoveFile: \"Jesteś pewien, że chcesz usunąć ten plik: {0}?\",\n    confirmRemoveAllFiles: \"Jesteś pewien, że chcesz usunąć wszystkie pliki?\",\n    questionTitlePatternText: \"Tytuł pytania\",\n    modalCancelButtonText: \"Anulować\",\n    modalApplyButtonText: \"Zastosować\",\n    filterStringPlaceholder: \"Wpisz aby wyszukać...\",\n    emptyMessage: \"Brak danych do wyświetlenia\",\n    noEntriesText: \"Nie ma jeszcze wpisów.\\nKliknij przycisk poniżej, aby dodać nowy wpis.\",\n    noEntriesReadonlyText: \"Brak wpisów.\",\n    more: \"Więcej\",\n    tagboxDoneButtonCaption: \"OK\",\n    selectToRankEmptyRankedAreaText: \"Wszystkie wybory są uszeregowane\",\n    selectToRankEmptyUnrankedAreaText: \"Przeciągnij i upuść tutaj wybory, aby je uszeregować\"\n};\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"pl\"] = polishSurveyStrings;\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"pl\"] = \"polski\";\n// The following strings have been translated by a machine translation service\n// Remove those strings that you have corrected manually\n// panelDynamicTabTextFormat: \"Panel {panelIndex}\" => \"Panel {panelIndex}\"\n// emptyMessage: \"No data to display\" => \"Brak danych do wyświetlenia\"\n// noEntriesReadonlyText: \"There are no entries.\" => \"Brak wpisów.\"\n// more: \"More\" => \"Więcej\"\n// tagboxDoneButtonCaption: \"OK\" => \"OK\"\n// selectToRankEmptyRankedAreaText: \"All choices are ranked\" => \"Wszystkie wybory są uszeregowane\"\n// selectToRankEmptyUnrankedAreaText: \"Drag and drop choices here to rank them\" => \"Przeciągnij i upuść tutaj wybory, aby je uszeregować\"// takePhotoCaption: \"Take Photo\" => \"Zrób zdjęcie\"\n// cameraPlaceHolder: \"Click the button below to take a photo using the camera.\" => \"Kliknij przycisk poniżej, aby zrobić zdjęcie aparatem.\"\n// fileCameraDragAreaPlaceHolder: \"Drag and drop or select a file to upload or take a photo using the camera.\" => \"Przeciągnij i upuść lub wybierz plik, który chcesz przesłać lub zrobić zdjęcie za pomocą aparatu.\"\n// replaceFileCaption: \"Replace file\" => \"Zastąp plik\"\n\n\n/***/ }),\n\n/***/ \"./src/localization/portuguese-br.ts\":\n/*!*******************************************!*\\\n  !*** ./src/localization/portuguese-br.ts ***!\n  \\*******************************************/\n/*! exports provided: portugueseBrSurveyStrings */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_2063316__) {\n\n\"use strict\";\n__nested_webpack_require_2063316__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_2063316__.d(__nested_webpack_exports__, \"portugueseBrSurveyStrings\", function() { return portugueseBrSurveyStrings; });\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_2063316__(/*! survey-core */ \"./src/entries/core.ts\");\n\n/**\n * You don't need to translate strings that have the same value as Portuguese translation\n */\nvar portugueseBrSurveyStrings = {\n    pagePrevText: \"Anterior\",\n    pageNextText: \"Próximo\",\n    completeText: \"Completar\",\n    previewText: \"Visualizar\",\n    editText: \"Editar\",\n    startSurveyText: \"Começar\",\n    otherItemText: \"Outros (descrever)\",\n    noneItemText: \"Nenhum\",\n    selectAllItemText: \"Selecionar tudo\",\n    progressText: \"Página {0} de {1}\",\n    indexText: \"{0} de {1}\",\n    panelDynamicProgressText: \"{0} de {1}\",\n    panelDynamicTabTextFormat: \"Painel {panelIndex}\",\n    questionsProgressText: \"Perguntas respondidas {0}/{1}\",\n    emptySurvey: \"Não há página visível ou pergunta na pesquisa.\",\n    completingSurvey: \"Obrigado por finalizar a pesquisa!\",\n    completingSurveyBefore: \"Nossos registros mostram que você já finalizou a pesquisa.\",\n    loadingSurvey: \"A pesquisa está carregando...\",\n    placeholder: \"Selecionar...\",\n    ratingOptionsCaption: \"Selecionar...\",\n    value: \"valor\",\n    requiredError: \"Por favor, responda a pergunta.\",\n    requiredErrorInPanel: \"Por favor, responda pelo menos uma pergunta.\",\n    requiredInAllRowsError: \"Por favor, responda as perguntas em todas as linhas.\",\n    numericError: \"O valor deve ser numérico.\",\n    minError: \"O valor não deve ser inferior a {0}\",\n    maxError: \"O valor não deve ser maior que {0}\",\n    textMinLength: \"Introduza pelo menos {0} caractere(s).\",\n    textMaxLength: \"Introduza no máximo {0} caractere(s).\",\n    textMinMaxLength: \"Insira pelo menos {0} e não mais do que {1} caracteres.\",\n    minRowCountError: \"Por favor, preencha pelo menos {0} linha(s).\",\n    minSelectError: \"Selecione pelo menos {0} variante(s).\",\n    maxSelectError: \"Por favor, selecione não mais do que {0} opções.\",\n    numericMinMax: \"O \\\"{0}\\\" deve ser pelo menos {1} e no máximo {2}\",\n    numericMin: \"O \\\"{0}\\\" deve ser pelo menos {1}\",\n    numericMax: \"O \\\"{0}\\\" deve ser no máximo {1}\",\n    invalidEmail: \"Por favor, informe um e-mail válido.\",\n    invalidExpression: \"A expressão: {0} deve retornar 'verdadeiro'.\",\n    urlRequestError: \"A requisição retornou o erro '{0}'. {1}\",\n    urlGetChoicesError: \"A requisição não retornou dados ou o 'caminho' da requisição não está correto\",\n    exceedMaxSize: \"O tamanho do arquivo não deve exceder {0}.\",\n    otherRequiredError: \"Por favor, informe o outro valor.\",\n    uploadingFile: \"Seu arquivo está sendo carregado. Por favor, aguarde alguns segundos e tente novamente.\",\n    loadingFile: \"Carregando...\",\n    chooseFile: \"Escolha o(s) arquivo(s)...\",\n    noFileChosen: \"Nenhum arquivo escolhido\",\n    fileDragAreaPlaceholder: \"Arraste e solte um arquivo aqui ou clique no botão abaixo e escolha um arquivo para carregar.\",\n    confirmDelete: \"Tem certeza que deseja deletar?\",\n    keyDuplicationError: \"Esse valor deve ser único.\",\n    addColumn: \"Adicionar coluna\",\n    addRow: \"Adicionar linha\",\n    removeRow: \"Retirar\",\n    emptyRowsText: \"Não há filas.\",\n    addPanel: \"Adicionar novo\",\n    removePanel: \"Retirar\",\n    choices_Item: \"item\",\n    matrix_column: \"Coluna\",\n    matrix_row: \"Remar\",\n    multipletext_itemname: \"Texto\",\n    savingData: \"Os resultados esto sendo salvos no servidor...\",\n    savingDataError: \"Ocorreu um erro e não foi possível salvar os resultados.\",\n    savingDataSuccess: \"Os resultados foram salvos com sucesso!\",\n    saveAgainButton: \"Tentar novamente\",\n    timerMin: \"Min\",\n    timerSec: \"segundo\",\n    timerSpentAll: \"Você gastou {0} nesta página e {1} no total.\",\n    timerSpentPage: \"Você passou {0} nesta página.\",\n    timerSpentSurvey: \"Gastou {0} no total.\",\n    timerLimitAll: \"Você gastou {0} de {1} nesta página e {2} de {3} no total.\",\n    timerLimitPage: \"Você gastou {0} de {1} nesta página.\",\n    timerLimitSurvey: \"Gastou {0} de {1} no total.\",\n    clearCaption: \"Claro\",\n    signaturePlaceHolder: \"Assine aqui\",\n    chooseFileCaption: \"Escolher arquivo\",\n    takePhotoCaption: \"Tirar foto\",\n    cameraPlaceHolder: \"Clique no botão abaixo para tirar uma foto usando a câmera.\",\n    fileCameraDragAreaPlaceHolder: \"Arraste e solte ou selecione um arquivo para carregar ou tirar uma foto usando a câmera.\",\n    replaceFileCaption: \"Substituir arquivo\",\n    removeFileCaption: \"Remover este arquivo\",\n    booleanCheckedLabel: \"Sim\",\n    booleanUncheckedLabel: \"Não\",\n    confirmRemoveFile: \"Tem certeza que deseja remover este arquivo: {0}?\",\n    confirmRemoveAllFiles: \"Tem certeza que deseja remover todos os arquivos?\",\n    questionTitlePatternText: \"Título da pergunta\",\n    modalCancelButtonText: \"Cancelar\",\n    modalApplyButtonText: \"Aplicar\",\n    filterStringPlaceholder: \"Digite para pesquisar...\",\n    emptyMessage: \"Nenhum dado a ser exibido\",\n    noEntriesText: \"Ainda não há inscrições.\\nClique no botão abaixo para adicionar uma nova entrada.\",\n    noEntriesReadonlyText: \"Não há entradas.\",\n    more: \"Mais\",\n    tagboxDoneButtonCaption: \"OKEY\",\n    selectToRankEmptyRankedAreaText: \"Todas as opções são classificadas\",\n    selectToRankEmptyUnrankedAreaText: \"Arraste e solte as opções aqui para classificá-las\"\n};\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"pt-br\"] = portugueseBrSurveyStrings;\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"pt-br\"] = \"português brasileiro\";\n// The following strings have been translated by a machine translation service\n// Remove those strings that you have corrected manually\n// pagePrevText: \"Previous\" => \"Anterior\"\n// pageNextText: \"Next\" => \"Próximo\"\n// completeText: \"Complete\" => \"Completar\"\n// previewText: \"Preview\" => \"Visualizar\"\n// editText: \"Edit\" => \"Editar\"\n// startSurveyText: \"Start\" => \"Começar\"\n// otherItemText: \"Other (describe)\" => \"Outros (descrever)\"\n// noneItemText: \"None\" => \"Nenhum\"\n// selectAllItemText: \"Select All\" => \"Selecionar tudo\"\n// progressText: \"Page {0} of {1}\" => \"Página {0} de {1}\"\n// indexText: \"{0} of {1}\" => \"{0} de {1}\"\n// panelDynamicProgressText: \"{0} of {1}\" => \"{0} de {1}\"\n// panelDynamicTabTextFormat: \"Panel {panelIndex}\" => \"Painel {panelIndex}\"\n// questionsProgressText: \"Answered {0}/{1} questions\" => \"Perguntas respondidas {0}/{1}\"\n// placeholder: \"Select...\" => \"Selecionar...\"\n// ratingOptionsCaption: \"Select...\" => \"Selecionar...\"\n// value: \"value\" => \"valor\"\n// numericError: \"The value should be numeric.\" => \"O valor deve ser numérico.\"\n// minError: \"The value should not be less than {0}\" => \"O valor não deve ser inferior a {0}\"\n// maxError: \"The value should not be greater than {0}\" => \"O valor não deve ser maior que {0}\"\n// textMinLength: \"Please enter at least {0} character(s).\" => \"Introduza pelo menos {0} caractere(s).\"\n// textMaxLength: \"Please enter no more than {0} character(s).\" => \"Introduza no máximo {0} caractere(s).\"\n// textMinMaxLength: \"Please enter at least {0} and no more than {1} characters.\" => \"Insira pelo menos {0} e não mais do que {1} caracteres.\"\n// minRowCountError: \"Please fill in at least {0} row(s).\" => \"Por favor, preencha pelo menos {0} linha(s).\"\n// minSelectError: \"Please select at least {0} variant(s).\" => \"Selecione pelo menos {0} variante(s).\"\n// numericMinMax: \"The '{0}' should be at least {1} and at most {2}\" => \"O \\\"{0}\\\" deve ser pelo menos {1} e no máximo {2}\"\n// numericMin: \"The '{0}' should be at least {1}\" => \"O \\\"{0}\\\" deve ser pelo menos {1}\"\n// numericMax: \"The '{0}' should be at most {1}\" => \"O \\\"{0}\\\" deve ser no máximo {1}\"\n// invalidExpression: \"The expression: {0} should return 'true'.\" => \"A expressão: {0} deve retornar 'verdadeiro'.\"\n// exceedMaxSize: \"The file size should not exceed {0}.\" => \"O tamanho do arquivo não deve exceder {0}.\"\n// chooseFile: \"Choose file(s)...\" => \"Escolha o(s) arquivo(s)...\"\n// fileDragAreaPlaceholder: \"Drag and drop a file here or click the button below and choose a file to upload.\" => \"Arraste e solte um arquivo aqui ou clique no botão abaixo e escolha um arquivo para carregar.\"\n// addColumn: \"Add Column\" => \"Adicionar coluna\"\n// addRow: \"Add Row\" => \"Adicionar linha\"\n// removeRow: \"Remove\" => \"Retirar\"\n// emptyRowsText: \"There are no rows.\" => \"Não há filas.\"\n// addPanel: \"Add new\" => \"Adicionar novo\"\n// removePanel: \"Remove\" => \"Retirar\"\n// choices_Item: \"item\" => \"item\"\n// matrix_column: \"Column\" => \"Coluna\"\n// matrix_row: \"Row\" => \"Remar\"\n// multipletext_itemname: \"text\" => \"Texto\"\n// saveAgainButton: \"Try again\" => \"Tentar novamente\"\n// timerMin: \"min\" => \"Min\"\n// timerSec: \"sec\" => \"segundo\"\n// timerSpentAll: \"You have spent {0} on this page and {1} in total.\" => \"Você gastou {0} nesta página e {1} no total.\"\n// timerSpentPage: \"You have spent {0} on this page.\" => \"Você passou {0} nesta página.\"\n// timerSpentSurvey: \"You have spent {0} in total.\" => \"Gastou {0} no total.\"\n// timerLimitAll: \"You have spent {0} of {1} on this page and {2} of {3} in total.\" => \"Você gastou {0} de {1} nesta página e {2} de {3} no total.\"\n// timerLimitPage: \"You have spent {0} of {1} on this page.\" => \"Você gastou {0} de {1} nesta página.\"\n// timerLimitSurvey: \"You have spent {0} of {1} in total.\" => \"Gastou {0} de {1} no total.\"\n// clearCaption: \"Clear\" => \"Claro\"\n// signaturePlaceHolder: \"Sign here\" => \"Assine aqui\"\n// booleanCheckedLabel: \"Yes\" => \"Sim\"\n// booleanUncheckedLabel: \"No\" => \"Não\"\n// questionTitlePatternText: \"Question Title\" => \"Título da pergunta\"\n// modalCancelButtonText: \"Cancel\" => \"Cancelar\"\n// modalApplyButtonText: \"Apply\" => \"Aplicar\"\n// filterStringPlaceholder: \"Type to search...\" => \"Digite para pesquisar...\"\n// emptyMessage: \"No data to display\" => \"Nenhum dado a ser exibido\"\n// noEntriesText: \"There are no entries yet.\\nClick the button below to add a new entry.\" => \"Ainda não há inscrições.\\nClique no botão abaixo para adicionar uma nova entrada.\"\n// noEntriesReadonlyText: \"There are no entries.\" => \"Não há entradas.\"\n// more: \"More\" => \"Mais\"\n// tagboxDoneButtonCaption: \"OK\" => \"OKEY\"\n// selectToRankEmptyRankedAreaText: \"All choices are ranked\" => \"Todas as opções são classificadas\"\n// selectToRankEmptyUnrankedAreaText: \"Drag and drop choices here to rank them\" => \"Arraste e solte as opções aqui para classificá-las\"// takePhotoCaption: \"Take Photo\" => \"Tirar foto\"\n// cameraPlaceHolder: \"Click the button below to take a photo using the camera.\" => \"Clique no botão abaixo para tirar uma foto usando a câmera.\"\n// fileCameraDragAreaPlaceHolder: \"Drag and drop or select a file to upload or take a photo using the camera.\" => \"Arraste e solte ou selecione um arquivo para carregar ou tirar uma foto usando a câmera.\"\n// replaceFileCaption: \"Replace file\" => \"Substituir arquivo\"\n\n\n/***/ }),\n\n/***/ \"./src/localization/portuguese.ts\":\n/*!****************************************!*\\\n  !*** ./src/localization/portuguese.ts ***!\n  \\****************************************/\n/*! exports provided: portugueseSurveyStrings */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_2074564__) {\n\n\"use strict\";\n__nested_webpack_require_2074564__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_2074564__.d(__nested_webpack_exports__, \"portugueseSurveyStrings\", function() { return portugueseSurveyStrings; });\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_2074564__(/*! survey-core */ \"./src/entries/core.ts\");\n\nvar portugueseSurveyStrings = {\n    pagePrevText: \"Anterior\",\n    pageNextText: \"Próximo\",\n    completeText: \"Finalizar\",\n    previewText: \"Pré-visualização\",\n    editText: \"Editar\",\n    startSurveyText: \"Começar\",\n    otherItemText: \"Outros (descrever)\",\n    noneItemText: \"Nenhum\",\n    selectAllItemText: \"Selecionar Todos\",\n    progressText: \"Página {0} de {1}\",\n    indexText: \"{0} de {1}\",\n    panelDynamicProgressText: \"Registo {0} de {1}\",\n    panelDynamicTabTextFormat: \"Painel {panelIndex}\",\n    questionsProgressText: \"Respostas {0}/{1} perguntas\",\n    emptySurvey: \"Não há página visível ou pergunta no questionário.\",\n    completingSurvey: \"Obrigado por finalizar o questionário!\",\n    completingSurveyBefore: \"Os nossos registos mostram que já finalizou o questionário.\",\n    loadingSurvey: \"O questionário está a carregar...\",\n    placeholder: \"Selecione...\",\n    ratingOptionsCaption: \"Selecione aqui para avaliar...\",\n    value: \"valor\",\n    requiredError: \"Por favor, responda à pergunta.\",\n    requiredErrorInPanel: \"Por favor, responda pelo menos a uma pergunta.\",\n    requiredInAllRowsError: \"Por favor, responda às perguntas em todas as linhas.\",\n    numericError: \"O valor deve ser numérico.\",\n    minError: \"O valor não deverá ser menor que {0}\",\n    maxError: \"O valor não deverá ser maior que {0}\",\n    textMinLength: \"Por favor, insira pelo menos {0} caracteres.\",\n    textMaxLength: \"Por favor, insira menos de {0} caracteres.\",\n    textMinMaxLength: \"Por favor, insira mais de {0} e menos de {1} caracteres.\",\n    minRowCountError: \"Preencha pelo menos {0} linhas.\",\n    minSelectError: \"Selecione pelo menos {0} opções.\",\n    maxSelectError: \"Por favor, selecione no máximo {0} opções.\",\n    numericMinMax: \"O '{0}' deve ser igual ou superior a {1} e igual ou menor que {2}\",\n    numericMin: \"O '{0}' deve ser igual ou superior a {1}\",\n    numericMax: \"O '{0}' deve ser igual ou inferior a {1}\",\n    invalidEmail: \"Por favor, insira um e-mail válido.\",\n    invalidExpression: \"A expressão: {0} deve retornar 'verdadeiro'.\",\n    urlRequestError: \"O pedido retornou o erro '{0}'. {1}\",\n    urlGetChoicesError: \"O pedido não retornou dados ou o 'caminho' do pedido não está correto\",\n    exceedMaxSize: \"O tamanho do arquivo não deve exceder {0}.\",\n    otherRequiredError: \"Por favor, insira o outro valor.\",\n    uploadingFile: \"O seu ficheiro está a carregar. Por favor, aguarde alguns segundos e tente novamente.\",\n    loadingFile: \"A carregar...\",\n    chooseFile: \"Selecione o(s) arquivo(s)...\",\n    noFileChosen: \"Nenhum ficheiro escolhido\",\n    fileDragAreaPlaceholder: \"Arraste um ficheiro aqui ou clique no botão abaixo para carregar o ficheiro.\",\n    confirmDelete: \"Tem a certeza que deseja apagar?\",\n    keyDuplicationError: \"Este valor deve ser único.\",\n    addColumn: \"Adicionar coluna\",\n    addRow: \"Adicionar linha\",\n    removeRow: \"Remover linha\",\n    emptyRowsText: \"Não existem linhas.\",\n    addPanel: \"Adicionar novo\",\n    removePanel: \"Remover\",\n    choices_Item: \"item\",\n    matrix_column: \"Coluna\",\n    matrix_row: \"Linha\",\n    multipletext_itemname: \"texto\",\n    savingData: \"Os resultados estão a ser guardados no servidor...\",\n    savingDataError: \"Ocorreu um erro e não foi possível guardar os resultados.\",\n    savingDataSuccess: \"Os resultados foram guardados com sucesso!\",\n    saveAgainButton: \"Tente novamente\",\n    timerMin: \"min\",\n    timerSec: \"seg\",\n    timerSpentAll: \"Você gastou {0} nesta página e {1} no total.\",\n    timerSpentPage: \"Você gastou {0} nesta página.\",\n    timerSpentSurvey: \"Você gastou {0} no total.\",\n    timerLimitAll: \"Você gastou {0} de {1} nesta página e {2} de {3} no total.\",\n    timerLimitPage: \"Você gastou {0} de {1} nesta página.\",\n    timerLimitSurvey: \"Você gastou {0} de {1} no total.\",\n    clearCaption: \"Limpar\",\n    signaturePlaceHolder: \"Assine aqui\",\n    chooseFileCaption: \"Escolher ficheiro\",\n    takePhotoCaption: \"Tirar foto\",\n    cameraPlaceHolder: \"Clique no botão abaixo para tirar uma foto usando a câmera.\",\n    fileCameraDragAreaPlaceHolder: \"Arraste e solte ou selecione um arquivo para carregar ou tirar uma foto usando a câmera.\",\n    replaceFileCaption: \"Substituir arquivo\",\n    removeFileCaption: \"Remover este ficheiro\",\n    booleanCheckedLabel: \"Sim\",\n    booleanUncheckedLabel: \"Não\",\n    confirmRemoveFile: \"Tem a certeza que deseja remover este ficheiro: {0}?\",\n    confirmRemoveAllFiles: \"Tem a certeza que deseja remover todos os ficheiros?\",\n    questionTitlePatternText: \"Título da questão\",\n    modalCancelButtonText: \"Cancelar\",\n    modalApplyButtonText: \"Aplicar\",\n    filterStringPlaceholder: \"Digite para pesquisar...\",\n    emptyMessage: \"Não existe informação a mostrar\",\n    noEntriesText: \"Ainda não existem registos.\\nClique no botão abaixo para adicionar um novo registo.\",\n    noEntriesReadonlyText: \"Não há entradas.\",\n    more: \"Mais\",\n    tagboxDoneButtonCaption: \"Terminado\",\n    selectToRankEmptyRankedAreaText: \"Todas as opções são classificadas\",\n    selectToRankEmptyUnrankedAreaText: \"Arraste e solte as opções aqui para classificá-las\"\n};\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"pt\"] = portugueseSurveyStrings;\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"pt\"] = \"português\";\n// The following strings have been translated by a machine translation service\n// Remove those strings that you have corrected manually\n// panelDynamicTabTextFormat: \"Panel {panelIndex}\" => \"Painel {panelIndex}\"\n// noEntriesReadonlyText: \"There are no entries.\" => \"Não há entradas.\"\n// selectToRankEmptyRankedAreaText: \"All choices are ranked\" => \"Todas as opções são classificadas\"\n// selectToRankEmptyUnrankedAreaText: \"Drag and drop choices here to rank them\" => \"Arraste e solte as opções aqui para classificá-las\"// takePhotoCaption: \"Take Photo\" => \"Tirar foto\"\n// cameraPlaceHolder: \"Click the button below to take a photo using the camera.\" => \"Clique no botão abaixo para tirar uma foto usando a câmera.\"\n// fileCameraDragAreaPlaceHolder: \"Drag and drop or select a file to upload or take a photo using the camera.\" => \"Arraste e solte ou selecione um arquivo para carregar ou tirar uma foto usando a câmera.\"\n// replaceFileCaption: \"Replace file\" => \"Substituir arquivo\"\n\n\n/***/ }),\n\n/***/ \"./src/localization/romanian.ts\":\n/*!**************************************!*\\\n  !*** ./src/localization/romanian.ts ***!\n  \\**************************************/\n/*! exports provided: romanianSurveyStrings */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_2081471__) {\n\n\"use strict\";\n__nested_webpack_require_2081471__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_2081471__.d(__nested_webpack_exports__, \"romanianSurveyStrings\", function() { return romanianSurveyStrings; });\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_2081471__(/*! survey-core */ \"./src/entries/core.ts\");\n\nvar romanianSurveyStrings = {\n    pagePrevText: \"Precedent\",\n    pageNextText: \"Următor\",\n    completeText: \"Finalizare\",\n    previewText: \"previzualizare\",\n    editText: \"Editați\",\n    startSurveyText: \"start\",\n    otherItemText: \"Altul(precizaţi)\",\n    noneItemText: \"Nici unul\",\n    selectAllItemText: \"Selectează tot\",\n    progressText: \"Pagina {0} din {1}\",\n    indexText: \"{0} de {1}\",\n    panelDynamicProgressText: \"Înregistrare {0} din {1}\",\n    panelDynamicTabTextFormat: \"Panou {panelIndex}\",\n    questionsProgressText: \"Răspunsuri la {0} / {1} întrebări\",\n    emptySurvey: \"Nu sunt întrebări pentru acest chestionar\",\n    completingSurvey: \"Vă mulţumim pentru timpul acordat!\",\n    completingSurveyBefore: \"Din înregistrările noastre reiese că ați completat deja acest chestionar.\",\n    loadingSurvey: \"Chestionarul se încarcă...\",\n    placeholder: \"Alegeţi...\",\n    ratingOptionsCaption: \"Alege...\",\n    value: \"valoare\",\n    requiredError: \"Răspunsul la această întrebare este obligatoriu.\",\n    requiredErrorInPanel: \"Vă rugăm să răspundeți la cel puțin o întrebare.\",\n    requiredInAllRowsError: \"Toate răspunsurile sunt obligatorii\",\n    numericError: \"Răspunsul trebuie să fie numeric.\",\n    minError: \"Valoarea nu trebuie să fie mai mică de {0}\",\n    maxError: \"Valoarea nu trebuie să fie mai mare de {0}\",\n    textMinLength: \"Trebuie să introduceți minim {0} caractere.\",\n    textMaxLength: \"Trebuie să introduceți maxim {0} caractere.\",\n    textMinMaxLength: \"Trebuie să introduceți mai mult de {0} și mai puțin de {1} caractere.\",\n    minRowCountError: \"Trebuie să completați minim {0} rânduri.\",\n    minSelectError: \"Trebuie să selectați minim {0} opţiuni.\",\n    maxSelectError: \"Trebuie să selectați maxim {0} opţiuni.\",\n    numericMinMax: \"Răspunsul '{0}' trebuie să fie mai mare sau egal ca {1} şî mai mic sau egal cu {2}\",\n    numericMin: \"Răspunsul '{0}' trebuie să fie mai mare sau egal ca {1}\",\n    numericMax: \"Răspunsul '{0}' trebuie să fie mai mic sau egal ca {1}\",\n    invalidEmail: \"Trebuie să introduceţi o adresa de email validă.\",\n    invalidExpression: \"Expresia: {0} ar trebui să returneze „adevărat”.\",\n    urlRequestError: \"Request-ul a returnat eroarea '{0}'. {1}\",\n    urlGetChoicesError: \"Request-ul nu a returnat date sau proprietatea 'path' este incorectă\",\n    exceedMaxSize: \"Dimensiunea fişierului nu trebuie să depăşească {0}.\",\n    otherRequiredError: \"Trebuie să completați câmpul 'Altul'.\",\n    uploadingFile: \"Fișierul dumneavoastră este în curs de încărcare. Vă rugăm așteptați câteva secunde și reveniți apoi.\",\n    loadingFile: \"Se încarcă...\",\n    chooseFile: \"Alege fisierele...\",\n    noFileChosen: \"Niciun fișier ales\",\n    fileDragAreaPlaceholder: \"Glisați și fixați un fișier aici sau faceți clic pe butonul de mai jos și alegeți un fișier de încărcat.\",\n    confirmDelete: \"Sunteți sigur că doriți să ștergeți înregistrarea?\",\n    keyDuplicationError: \"Valoarea trebuie să fie unică.\",\n    addColumn: \"Adăugați coloană\",\n    addRow: \"Adăugare rând\",\n    removeRow: \"Ștergere\",\n    emptyRowsText: \"Nu există rânduri.\",\n    addPanel: \"Adăugare\",\n    removePanel: \"Ștergere\",\n    choices_Item: \"opțiune\",\n    matrix_column: \"Coloană\",\n    matrix_row: \"Rând\",\n    multipletext_itemname: \"Text\",\n    savingData: \"Rezultatele sunt în curs de salvare...\",\n    savingDataError: \"A intervenit o eroare, rezultatele nu au putut fi salvate.\",\n    savingDataSuccess: \"Rezultatele au fost salvate cu succes!\",\n    saveAgainButton: \"Încercați din nou\",\n    timerMin: \"min\",\n    timerSec: \"sec\",\n    timerSpentAll: \"Ați petrecut {0} pe această pagină și {1} în total.\",\n    timerSpentPage: \"Ați petrecut {0} pe această pagină.\",\n    timerSpentSurvey: \"Ați petrecut {0} în total.\",\n    timerLimitAll: \"Ați petrecut {0} din {1} pe această pagină și {2} din {3} în total.\",\n    timerLimitPage: \"Ați petrecut {0} din {1} pe această pagină.\",\n    timerLimitSurvey: \"Ați petrecut {0} din {1} în total.\",\n    clearCaption: \"clar\",\n    signaturePlaceHolder: \"Semnează aici\",\n    chooseFileCaption: \"Alege fișierul\",\n    takePhotoCaption: \"Faceți o fotografie\",\n    cameraPlaceHolder: \"Faceți clic pe butonul de mai jos pentru a face o fotografie folosind camera.\",\n    fileCameraDragAreaPlaceHolder: \"Glisați și fixați sau selectați un fișier pentru a încărca sau a face o fotografie folosind camera.\",\n    replaceFileCaption: \"Înlocuire fișier\",\n    removeFileCaption: \"Eliminați acest fișier\",\n    booleanCheckedLabel: \"da\",\n    booleanUncheckedLabel: \"Nu\",\n    confirmRemoveFile: \"Sigur doriți să eliminați acest fișier: {0}?\",\n    confirmRemoveAllFiles: \"Sigur doriți să eliminați toate fișierele?\",\n    questionTitlePatternText: \"Titlul intrebarii\",\n    modalCancelButtonText: \"Anula\",\n    modalApplyButtonText: \"Aplica\",\n    filterStringPlaceholder: \"Tastați pentru a căuta...\",\n    emptyMessage: \"Nu există date de afișat\",\n    noEntriesText: \"Nu există încă intrări.\\nFaceți clic pe butonul de mai jos pentru a adăuga o intrare nouă.\",\n    noEntriesReadonlyText: \"Nu există intrări.\",\n    more: \"Mai mult\",\n    tagboxDoneButtonCaption: \"OK\",\n    selectToRankEmptyRankedAreaText: \"Toate opțiunile sunt clasificate\",\n    selectToRankEmptyUnrankedAreaText: \"Glisați și fixați opțiunile aici pentru a le clasifica\"\n};\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"ro\"] = romanianSurveyStrings;\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"ro\"] = \"română\";\n// The following strings have been translated by a machine translation service\n// Remove those strings that you have corrected manually\n// indexText: \"{0} of {1}\" => \"{0} de {1}\"\n// panelDynamicTabTextFormat: \"Panel {panelIndex}\" => \"Panou {panelIndex}\"\n// ratingOptionsCaption: \"Select...\" => \"Alege...\"\n// minError: \"The value should not be less than {0}\" => \"Valoarea nu trebuie să fie mai mică de {0}\"\n// maxError: \"The value should not be greater than {0}\" => \"Valoarea nu trebuie să fie mai mare de {0}\"\n// fileDragAreaPlaceholder: \"Drag and drop a file here or click the button below and choose a file to upload.\" => \"Glisați și fixați un fișier aici sau faceți clic pe butonul de mai jos și alegeți un fișier de încărcat.\"\n// emptyRowsText: \"There are no rows.\" => \"Nu există rânduri.\"\n// multipletext_itemname: \"text\" => \"Text\"\n// signaturePlaceHolder: \"Sign here\" => \"Semnează aici\"\n// modalCancelButtonText: \"Cancel\" => \"Anula\"\n// modalApplyButtonText: \"Apply\" => \"Aplica\"\n// filterStringPlaceholder: \"Type to search...\" => \"Tastați pentru a căuta...\"\n// emptyMessage: \"No data to display\" => \"Nu există date de afișat\"\n// noEntriesText: \"There are no entries yet.\\nClick the button below to add a new entry.\" => \"Nu există încă intrări.\\nFaceți clic pe butonul de mai jos pentru a adăuga o intrare nouă.\"\n// noEntriesReadonlyText: \"There are no entries.\" => \"Nu există intrări.\"\n// more: \"More\" => \"Mai mult\"\n// tagboxDoneButtonCaption: \"OK\" => \"OK\"\n// selectToRankEmptyRankedAreaText: \"All choices are ranked\" => \"Toate opțiunile sunt clasificate\"\n// selectToRankEmptyUnrankedAreaText: \"Drag and drop choices here to rank them\" => \"Glisați și fixați opțiunile aici pentru a le clasifica\"// takePhotoCaption: \"Take Photo\" => \"Faceți o fotografie\"\n// cameraPlaceHolder: \"Click the button below to take a photo using the camera.\" => \"Faceți clic pe butonul de mai jos pentru a face o fotografie folosind camera.\"\n// fileCameraDragAreaPlaceHolder: \"Drag and drop or select a file to upload or take a photo using the camera.\" => \"Glisați și fixați sau selectați un fișier pentru a încărca sau a face o fotografie folosind camera.\"\n// replaceFileCaption: \"Replace file\" => \"Înlocuire fișier\"\n\n\n/***/ }),\n\n/***/ \"./src/localization/russian.ts\":\n/*!*************************************!*\\\n  !*** ./src/localization/russian.ts ***!\n  \\*************************************/\n/*! exports provided: russianSurveyStrings */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_2089760__) {\n\n\"use strict\";\n__nested_webpack_require_2089760__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_2089760__.d(__nested_webpack_exports__, \"russianSurveyStrings\", function() { return russianSurveyStrings; });\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_2089760__(/*! survey-core */ \"./src/entries/core.ts\");\n\nvar russianSurveyStrings = {\n    pagePrevText: \"Назад\",\n    pageNextText: \"Далее\",\n    completeText: \"Готово\",\n    previewText: \"Предварительный просмотр\",\n    editText: \"Редактирование\",\n    startSurveyText: \"Начать\",\n    otherItemText: \"Другое (пожалуйста, опишите)\",\n    noneItemText: \"Нет\",\n    selectAllItemText: \"Выбрать всё\",\n    progressText: \"Страница {0} из {1}\",\n    indexText: \"{0} из {1}\",\n    panelDynamicProgressText: \"Запись {0} из {1}\",\n    panelDynamicTabTextFormat: \"Панель {panelIndex}\",\n    questionsProgressText: \"Oтвечено на {0}/{1} вопросов\",\n    emptySurvey: \"Нет ни одного вопроса.\",\n    completingSurvey: \"Благодарим Вас за заполнение анкеты!\",\n    completingSurveyBefore: \"Вы уже проходили этот опрос.\",\n    loadingSurvey: \"Загрузка с сервера...\",\n    placeholder: \"Выбрать...\",\n    ratingOptionsCaption: \"Нажмите здесь, чтобы оценить...\",\n    value: \"значение\",\n    requiredError: \"Пожалуйста, ответьте на вопрос.\",\n    requiredErrorInPanel: \"Пожалуйста, ответьте по крайней мере на один вопрос.\",\n    requiredInAllRowsError: \"Пожалуйста, ответьте на вопросы в каждой строке.\",\n    numericError: \"Ответ должен быть числом.\",\n    minError: \"Значение не должно быть меньше {0}.\",\n    maxError: \"Значение не должно превышать {0}.\",\n    textMinLength: \"Пожалуйста введите больше {0} символов.\",\n    textMaxLength: \"Пожалуйста введите меньше {0} символов.\",\n    textMinMaxLength: \"Пожалуйста введите больше {0} и меньше {1} символов.\",\n    minRowCountError: \"Пожалуйста, заполните не меньше {0} строк.\",\n    minSelectError: \"Пожалуйста, выберите хотя бы {0} вариантов.\",\n    maxSelectError: \"Пожалуйста, выберите не более {0} вариантов.\",\n    numericMinMax: \"'{0}' должно быть не меньше чем {1}, и не больше чем {2}\",\n    numericMin: \"'{0}' должно быть не меньше чем {1}\",\n    numericMax: \"'{0}' должно быть не больше чем {1}\",\n    invalidEmail: \"Пожалуйста, введите действительный адрес электронной почты.\",\n    invalidExpression: \"Выражение {0} должно возвращать 'true'.\",\n    urlRequestError: \"Запрос вернул ошибку '{0}'. {1}\",\n    urlGetChoicesError: \"Ответ на запрос пришел пустой или свойство 'path' указано неверно\",\n    exceedMaxSize: \"Размер файла не должен превышать {0}.\",\n    otherRequiredError: \"Пожалуйста, введите данные в поле 'Другое'\",\n    uploadingFile: \"Ваш файл загружается. Подождите несколько секунд и попробуйте снова.\",\n    loadingFile: \"Загрузка...\",\n    chooseFile: \"Выберите файл(ы)...\",\n    noFileChosen: \"Файл не выбран\",\n    fileDragAreaPlaceholder: \"Перетащите файл сюда или нажмите кнопку ниже, чтобы загрузить файл.\",\n    confirmDelete: \"Вы точно хотите удалить запись?\",\n    keyDuplicationError: \"Это значение должно быть уникальным.\",\n    addColumn: \"Добавить колонку\",\n    addRow: \"Добавить строку\",\n    removeRow: \"Удалить\",\n    emptyRowsText: \"Рядов нет.\",\n    addPanel: \"Добавить новую\",\n    removePanel: \"Удалить\",\n    choices_Item: \"Вариант\",\n    matrix_column: \"Колонка\",\n    matrix_row: \"Строка\",\n    multipletext_itemname: \"текст\",\n    savingData: \"Результаты сохраняются на сервер...\",\n    savingDataError: \"Произошла ошибка, результат не был сохранён.\",\n    savingDataSuccess: \"Результат успешно сохранён!\",\n    saveAgainButton: \"Попробовать снова\",\n    timerMin: \"мин\",\n    timerSec: \"сек\",\n    timerSpentAll: \"Вы потратили {0} на этой странице и {1} всего.\",\n    timerSpentPage: \"Вы потратили {0} на этой странице.\",\n    timerSpentSurvey: \"Вы потратили {0} в течение теста.\",\n    timerLimitAll: \"Вы потратили {0} из {1} на этой странице и {2} из {3} для всего теста.\",\n    timerLimitPage: \"Вы потратили {0} из {1} на этой странице.\",\n    timerLimitSurvey: \"Вы потратили {0} из {1} для всего теста.\",\n    clearCaption: \"Очистить\",\n    signaturePlaceHolder: \"Подпишите здесь\",\n    chooseFileCaption: \"Выберите файл\",\n    takePhotoCaption: \"Сделать фото\",\n    cameraPlaceHolder: \"Нажмите кнопку ниже, чтобы сделать снимок с помощью камеры.\",\n    fileCameraDragAreaPlaceHolder: \"Перетащите или выберите файл для загрузки или съемки с помощью камеры.\",\n    replaceFileCaption: \"Заменить файл\",\n    removeFileCaption: \"Удалить файл\",\n    booleanCheckedLabel: \"Да\",\n    booleanUncheckedLabel: \"Нет\",\n    confirmRemoveFile: \"Вы уверены, что хотите удалить этот файл: {0}?\",\n    confirmRemoveAllFiles: \"Вы уверены, что хотите удалить все файлы?\",\n    questionTitlePatternText: \"Название вопроса\",\n    modalCancelButtonText: \"Отменить\",\n    modalApplyButtonText: \"Применять\",\n    filterStringPlaceholder: \"Введите для поиска...\",\n    emptyMessage: \"Нет данных для отображения\",\n    noEntriesText: \"Пока нет записей.\\nНажмите кнопку ниже, чтобы добавить новую запись.\",\n    noEntriesReadonlyText: \"Записей нет.\",\n    more: \"Больше\",\n    tagboxDoneButtonCaption: \"ХОРОШО\",\n    selectToRankEmptyRankedAreaText: \"Все варианты ранжируются\",\n    selectToRankEmptyUnrankedAreaText: \"Перетащите сюда варианты, чтобы ранжировать их\"\n};\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"ru\"] = russianSurveyStrings;\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"ru\"] = \"русский\";\n// The following strings have been translated by a machine translation service\n// Remove those strings that you have corrected manually\n// panelDynamicTabTextFormat: \"Panel {panelIndex}\" => \"Панель {panelIndex}\"\n// emptyMessage: \"No data to display\" => \"Нет данных для отображения\"\n// noEntriesReadonlyText: \"There are no entries.\" => \"Записей нет.\"\n// more: \"More\" => \"Больше\"\n// tagboxDoneButtonCaption: \"OK\" => \"ХОРОШО\"\n// selectToRankEmptyRankedAreaText: \"All choices are ranked\" => \"Все варианты ранжируются\"\n// selectToRankEmptyUnrankedAreaText: \"Drag and drop choices here to rank them\" => \"Перетащите сюда варианты, чтобы ранжировать их\"// takePhotoCaption: \"Take Photo\" => \"Сделать фото\"\n// cameraPlaceHolder: \"Click the button below to take a photo using the camera.\" => \"Нажмите кнопку ниже, чтобы сделать снимок с помощью камеры.\"\n// fileCameraDragAreaPlaceHolder: \"Drag and drop or select a file to upload or take a photo using the camera.\" => \"Перетащите или выберите файл для загрузки или съемки с помощью камеры.\"\n// replaceFileCaption: \"Replace file\" => \"Заменить файл\"\n\n\n/***/ }),\n\n/***/ \"./src/localization/serbian.ts\":\n/*!*************************************!*\\\n  !*** ./src/localization/serbian.ts ***!\n  \\*************************************/\n/*! exports provided: serbianStrings */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_2096557__) {\n\n\"use strict\";\n__nested_webpack_require_2096557__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_2096557__.d(__nested_webpack_exports__, \"serbianStrings\", function() { return serbianStrings; });\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_2096557__(/*! survey-core */ \"./src/entries/core.ts\");\n\nvar serbianStrings = {\n    pagePrevText: \"Nazad\",\n    pageNextText: \"Dalje\",\n    completeText: \"Završi\",\n    previewText: \"Pregledaj\",\n    editText: \"Izmeni\",\n    startSurveyText: \"Započni\",\n    otherItemText: \"Drugo (upiši)\",\n    noneItemText: \"Ništa\",\n    selectAllItemText: \"Izaberi sve\",\n    progressText: \"Stranica {0} od {1}\",\n    indexText: \"{0} {1}\",\n    panelDynamicProgressText: \"Upis {0} od {1}\",\n    panelDynamicTabTextFormat: \"Panel {panelIndex}\",\n    questionsProgressText: \"Odgovoreno na {0}/{1} pitanja\",\n    emptySurvey: \"Nema vidljivih stranica ili pitanja u anketi.\",\n    completingSurvey: \"Hvala na popunjavanju ankete!\",\n    completingSurveyBefore: \"Prema našim podacima, već ste popunili ovu anketu.\",\n    loadingSurvey: \"Učitavam anketu...\",\n    placeholder: \"Izaberi...\",\n    ratingOptionsCaption: \"Izaberite...\",\n    value: \"vrednost\",\n    requiredError: \"Molimo odgovorite na ovo pitanje.\",\n    requiredErrorInPanel: \"Molimo odgovorite na bar jedno pitanje.\",\n    requiredInAllRowsError: \"Molimo odgovorite na pitanja u svim redovima.\",\n    numericError: \"Vrednost bi trebalo da bude numerička.\",\n    minError: \"Vrednost ne bi trebalo da bude manja od {0}\",\n    maxError: \"Vrednost ne bi trebalo da bude veća od {0}\",\n    textMinLength: \"Molimo unesite bar {0} znak(ov)a.\",\n    textMaxLength: \"Molimo unesite najviše {0} znak(ov)a.\",\n    textMinMaxLength: \"Molimo unesite najmanje {0} i ne više od {1} znak(ov)a.\",\n    minRowCountError: \"Molimo popunite najmanje {0} red(ova).\",\n    minSelectError: \"Molimo izaberite najmanje {0} opcija/e.\",\n    maxSelectError: \"Molimo izaberite najviše {0} opcija/e.\",\n    numericMinMax: \"'{0}' bi trebalo da bude najmanje {1} i najviše {2}\",\n    numericMin: \"'{0}' bi trebalo da bude najmanje {1}\",\n    numericMax: \"'{0}' bi trebalo da bude najviše {1}\",\n    invalidEmail: \"Molimo unesite ispravnu e-mail adresu.\",\n    invalidExpression: \"Izraz: {0} bi trebalo da bude tačan.\",\n    urlRequestError: \"Zahtev je naišao na grešku '{0}'. {1}\",\n    urlGetChoicesError: \"Zahtev nije pronašao podatke, ili je putanja netačna\",\n    exceedMaxSize: \"Veličina fajla ne bi trebalo da prelazi {0}.\",\n    otherRequiredError: \"Molimo unesite drugu vrednost.\",\n    uploadingFile: \"Fajl se šalje. Molimo sačekajte neko vreme i pokušajte ponovo.\",\n    loadingFile: \"Učitavanje...\",\n    chooseFile: \"Izaberite fajlove...\",\n    noFileChosen: \"Nije izabran nijedan fajl\",\n    fileDragAreaPlaceholder: \"Prevucite i otpustite datoteku ovde ili kliknite na dugme ispod i odaberite datoteku za otpremanje.\",\n    confirmDelete: \"Da li želite da izbrišete unos?\",\n    keyDuplicationError: \"Ova vrednost treba da bude jedinstvena.\",\n    addColumn: \"Dodaj kolonu\",\n    addRow: \"Dodaj red\",\n    removeRow: \"Ukloni\",\n    emptyRowsText: \"Nema redova.\",\n    addPanel: \"Dodaj novo\",\n    removePanel: \"Ukloni\",\n    choices_Item: \"stavka\",\n    matrix_column: \"Kolona\",\n    matrix_row: \"Red\",\n    multipletext_itemname: \"tekst\",\n    savingData: \"U toku je čuvanje podataka na serveru...\",\n    savingDataError: \"Došlo je do greške i rezultati nisu sačuvani.\",\n    savingDataSuccess: \"Rezultati su uspešno sačuvani!\",\n    saveAgainButton: \"Pokušajte ponovo\",\n    timerMin: \"min\",\n    timerSec: \"sek\",\n    timerSpentAll: \"Proveli ste {0} na ovoj stranici i {1} ukupno.\",\n    timerSpentPage: \"Proveli ste {0} na ovoj stranici.\",\n    timerSpentSurvey: \"Proveli ste {0} ukupno.\",\n    timerLimitAll: \"Proveli ste {0} od {1} na ovoj stranici i {2} od {3} ukupno.\",\n    timerLimitPage: \"Proveli ste {0} od {1} na ovoj stranici.\",\n    timerLimitSurvey: \"Proveli ste {0} od {1} ukupno.\",\n    clearCaption: \"Poništi\",\n    signaturePlaceHolder: \"Potpišite ovde\",\n    chooseFileCaption: \"Izaberi fajl\",\n    takePhotoCaption: \"Fotografisanje\",\n    cameraPlaceHolder: \"Kliknite na dugme ispod da biste snimili fotografiju pomoću fotoaparata.\",\n    fileCameraDragAreaPlaceHolder: \"Prevucite i otpustite ili izaberite datoteku za otpremanje ili snimanje fotografije pomoću fotoaparata.\",\n    replaceFileCaption: \"Zameni datoteku\",\n    removeFileCaption: \"Ukloni ovaj fajl\",\n    booleanCheckedLabel: \"Da\",\n    booleanUncheckedLabel: \"Ne\",\n    confirmRemoveFile: \"Da li ste sigurni da želite da uklonite ovaj fajl: {0}?\",\n    confirmRemoveAllFiles: \"Da li ste sigurni da želite da uklonite sve fajlove?\",\n    questionTitlePatternText: \"Naslov pitanja\",\n    modalCancelButtonText: \"Otkaži\",\n    modalApplyButtonText: \"Primeni\",\n    filterStringPlaceholder: \"Otkucajte da biste pretražili...\",\n    emptyMessage: \"Nema podataka za prikazivanje\",\n    noEntriesText: \"Još uvek nema stavki.\\nKliknite na dugme ispod da biste dodali novu stavku.\",\n    noEntriesReadonlyText: \"Nema stavki.\",\n    more: \"Viљe\",\n    tagboxDoneButtonCaption: \"U redu\",\n    selectToRankEmptyRankedAreaText: \"Svi izbori su rangirani\",\n    selectToRankEmptyUnrankedAreaText: \"Prevucite i otpustite izbor ovde da biste ih rangirali\"\n};\n//Uncomment these two lines on creating a translation file. You should replace \"en\" and enStrings with your locale (\"fr\", \"de\" and so on) and your variable.\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"rs\"] = serbianStrings;\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"rs\"] = \"Srpski\";\n// The following strings have been translated by a machine translation service\n// Remove those strings that you have corrected manually\n// indexText: \"{0} of {1}\" => \"{0} {1}\"\n// panelDynamicTabTextFormat: \"Panel {panelIndex}\" => \"Panel {panelIndex}\"\n// ratingOptionsCaption: \"Select...\" => \"Izaberite...\"\n// fileDragAreaPlaceholder: \"Drag and drop a file here or click the button below and choose a file to upload.\" => \"Prevucite i otpustite datoteku ovde ili kliknite na dugme ispod i odaberite datoteku za otpremanje.\"\n// signaturePlaceHolder: \"Sign here\" => \"Potpišite ovde\"\n// filterStringPlaceholder: \"Type to search...\" => \"Otkucajte da biste pretražili...\"\n// emptyMessage: \"No data to display\" => \"Nema podataka za prikazivanje\"\n// noEntriesText: \"There are no entries yet.\\nClick the button below to add a new entry.\" => \"Još uvek nema stavki.\\nKliknite na dugme ispod da biste dodali novu stavku.\"\n// noEntriesReadonlyText: \"There are no entries.\" => \"Nema stavki.\"\n// more: \"More\" => \"Viљe\"\n// tagboxDoneButtonCaption: \"OK\" => \"U redu\"\n// selectToRankEmptyRankedAreaText: \"All choices are ranked\" => \"Svi izbori su rangirani\"\n// selectToRankEmptyUnrankedAreaText: \"Drag and drop choices here to rank them\" => \"Prevucite i otpustite izbor ovde da biste ih rangirali\"// takePhotoCaption: \"Take Photo\" => \"Fotografisanje\"\n// cameraPlaceHolder: \"Click the button below to take a photo using the camera.\" => \"Kliknite na dugme ispod da biste snimili fotografiju pomoću fotoaparata.\"\n// fileCameraDragAreaPlaceHolder: \"Drag and drop or select a file to upload or take a photo using the camera.\" => \"Prevucite i otpustite ili izaberite datoteku za otpremanje ili snimanje fotografije pomoću fotoaparata.\"\n// replaceFileCaption: \"Replace file\" => \"Zameni datoteku\"\n\n\n/***/ }),\n\n/***/ \"./src/localization/simplified-chinese.ts\":\n/*!************************************************!*\\\n  !*** ./src/localization/simplified-chinese.ts ***!\n  \\************************************************/\n/*! exports provided: simplifiedChineseSurveyStrings */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_2104253__) {\n\n\"use strict\";\n__nested_webpack_require_2104253__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_2104253__.d(__nested_webpack_exports__, \"simplifiedChineseSurveyStrings\", function() { return simplifiedChineseSurveyStrings; });\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_2104253__(/*! survey-core */ \"./src/entries/core.ts\");\n\nvar simplifiedChineseSurveyStrings = {\n    pagePrevText: \"上一页\",\n    pageNextText: \"下一页\",\n    completeText: \"提交问卷\",\n    previewText: \"预览\",\n    editText: \"编辑\",\n    startSurveyText: \"开始问卷\",\n    otherItemText: \"填写其他答案\",\n    noneItemText: \"无\",\n    selectAllItemText: \"选择全部\",\n    progressText: \"第 {0} 页, 共 {1} 页\",\n    indexText: \"{1}{0}\",\n    panelDynamicProgressText: \"{0} of {1}\",\n    panelDynamicTabTextFormat: \"面板 {面板索引}\",\n    questionsProgressText: \"第 {0}/{1} 题\",\n    emptySurvey: \"问卷中没有问题或页面\",\n    completingSurvey: \"感谢您的参与!\",\n    completingSurveyBefore: \"你已完成问卷.\",\n    loadingSurvey: \"问卷正在加载中...\",\n    placeholder: \"请选择...\",\n    ratingOptionsCaption: \"选择。。。\",\n    value: \"值\",\n    requiredError: \"请填写此问题\",\n    requiredErrorInPanel: \"至少回答一题.\",\n    requiredInAllRowsError: \"请填写所有行中问题\",\n    numericError: \"答案必须是个数字\",\n    minError: \"该值不能小于 {0}\",\n    maxError: \"该值不能大于 {0}\",\n    textMinLength: \"答案长度至少 {0} 个字符\",\n    textMaxLength: \"答案长度不能超过 {0} 个字符\",\n    textMinMaxLength: \"答案长度必须在 {0} - {1} 个字符之间\",\n    minRowCountError: \"最少需要填写 {0} 行答案\",\n    minSelectError: \"最少需要选择 {0} 项答案\",\n    maxSelectError: \"最多只能选择 {0} 项答案\",\n    numericMinMax: \"答案 '{0}' 必须大于等于 {1} 且小于等于 {2}\",\n    numericMin: \"答案 '{0}' 必须大于等于 {1}\",\n    numericMax: \"答案 '{0}' 必须小于等于 {1}\",\n    invalidEmail: \"请输入有效的 Email 地址\",\n    invalidExpression: \"公式: {0} 无效.\",\n    urlRequestError: \"载入选项时发生错误 '{0}': {1}\",\n    urlGetChoicesError: \"未能载入有效的选项或请求参数路径有误\",\n    exceedMaxSize: \"文件大小不能超过 {0}\",\n    otherRequiredError: \"请完成其他问题\",\n    uploadingFile: \"文件上传中... 请耐心等待几秒后重试\",\n    loadingFile: \"加载...\",\n    chooseFile: \"选择文件...\",\n    noFileChosen: \"未选择文件\",\n    fileDragAreaPlaceholder: \"将文件拖放到此处或单击下面的按钮并选择要上传的文件。\",\n    confirmDelete: \"删除记录?\",\n    keyDuplicationError: \"主键不能重复\",\n    addColumn: \"添加列\",\n    addRow: \"添加行\",\n    removeRow: \"删除答案\",\n    emptyRowsText: \"无内容\",\n    addPanel: \"新添\",\n    removePanel: \"删除\",\n    choices_Item: \"选项\",\n    matrix_column: \"列\",\n    matrix_row: \"行\",\n    multipletext_itemname: \"文本\",\n    savingData: \"正在将结果保存到服务器...\",\n    savingDataError: \"在保存结果过程中发生了错误,结果未能保存\",\n    savingDataSuccess: \"结果保存成功!\",\n    saveAgainButton: \"请重试\",\n    timerMin: \"分\",\n    timerSec: \"秒\",\n    timerSpentAll: \"本页用时 {0} 总计用时{1} .\",\n    timerSpentPage: \"本页用时{0} .\",\n    timerSpentSurvey: \"总计用时 {0} .\",\n    timerLimitAll: \"本页用时 {0} 共 {1}, 总计用时 {2} 共 {3} .\",\n    timerLimitPage: \"本页用时 {0} 共 {1} .\",\n    timerLimitSurvey: \"总计用时 {0} 共 {1}.\",\n    clearCaption: \"清除\",\n    signaturePlaceHolder: \"在此签名\",\n    chooseFileCaption: \"选择文件\",\n    takePhotoCaption: \"拍照\",\n    cameraPlaceHolder: \"单击下面的按钮使用相机拍照。\",\n    fileCameraDragAreaPlaceHolder: \"拖放或选择要上传的文件或使用相机拍摄照片。\",\n    replaceFileCaption: \"替换文件\",\n    removeFileCaption: \"移除文件\",\n    booleanCheckedLabel: \"是\",\n    booleanUncheckedLabel: \"否\",\n    confirmRemoveFile: \"删除文件: {0}?\",\n    confirmRemoveAllFiles: \"删除所有文件?\",\n    questionTitlePatternText: \"标题\",\n    modalCancelButtonText: \"取消\",\n    modalApplyButtonText: \"确定\",\n    filterStringPlaceholder: \"键入以搜索...\",\n    emptyMessage: \"没有要显示的数据\",\n    noEntriesText: \"尚无条目。\\n单击下面的按钮以添加新条目。\",\n    noEntriesReadonlyText: \"没有条目。\",\n    more: \"更多\",\n    tagboxDoneButtonCaption: \"还行\",\n    selectToRankEmptyRankedAreaText: \"所有选择均已排名\",\n    selectToRankEmptyUnrankedAreaText: \"将选项拖放到此处进行排名\"\n};\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"zh-cn\"] = simplifiedChineseSurveyStrings;\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"zh-cn\"] = \"简体中文\";\n// The following strings have been translated by a machine translation service\n// Remove those strings that you have corrected manually\n// indexText: \"{0} of {1}\" => \"{1}{0}\"\n// panelDynamicTabTextFormat: \"Panel {panelIndex}\" => \"面板 {面板索引}\"\n// ratingOptionsCaption: \"Select...\" => \"选择。。。\"\n// fileDragAreaPlaceholder: \"Drag and drop a file here or click the button below and choose a file to upload.\" => \"将文件拖放到此处或单击下面的按钮并选择要上传的文件。\"\n// signaturePlaceHolder: \"Sign here\" => \"在此签名\"\n// filterStringPlaceholder: \"Type to search...\" => \"键入以搜索...\"\n// emptyMessage: \"No data to display\" => \"没有要显示的数据\"\n// noEntriesText: \"There are no entries yet.\\nClick the button below to add a new entry.\" => \"尚无条目。\\n单击下面的按钮以添加新条目。\"\n// noEntriesReadonlyText: \"There are no entries.\" => \"没有条目。\"\n// more: \"More\" => \"更多\"\n// tagboxDoneButtonCaption: \"OK\" => \"还行\"\n// selectToRankEmptyRankedAreaText: \"All choices are ranked\" => \"所有选择均已排名\"\n// selectToRankEmptyUnrankedAreaText: \"Drag and drop choices here to rank them\" => \"将选项拖放到此处进行排名\"// takePhotoCaption: \"Take Photo\" => \"拍照\"\n// cameraPlaceHolder: \"Click the button below to take a photo using the camera.\" => \"单击下面的按钮使用相机拍照。\"\n// fileCameraDragAreaPlaceHolder: \"Drag and drop or select a file to upload or take a photo using the camera.\" => \"拖放或选择要上传的文件或使用相机拍摄照片。\"\n// replaceFileCaption: \"Replace file\" => \"替换文件\"\n\n\n/***/ }),\n\n/***/ \"./src/localization/slovak.ts\":\n/*!************************************!*\\\n  !*** ./src/localization/slovak.ts ***!\n  \\************************************/\n/*! exports provided: slovakSurveyStrings */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_2109652__) {\n\n\"use strict\";\n__nested_webpack_require_2109652__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_2109652__.d(__nested_webpack_exports__, \"slovakSurveyStrings\", function() { return slovakSurveyStrings; });\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_2109652__(/*! survey-core */ \"./src/entries/core.ts\");\n\nvar slovakSurveyStrings = {\n    pagePrevText: \"Predchádzajúca\",\n    pageNextText: \"Ďalej\",\n    completeText: \"Dokončené\",\n    previewText: \"Ukážka\",\n    editText: \"Upraviť\",\n    startSurveyText: \"Spustiť\",\n    otherItemText: \"Iné (opíšte)\",\n    noneItemText: \"Žiadne\",\n    selectAllItemText: \"Vybrať všetky\",\n    progressText: \"Strana {0} z {1}\",\n    indexText: \"{0} {1}\",\n    panelDynamicProgressText: \"Záznam {0} z {1}\",\n    panelDynamicTabTextFormat: \"Panel {panelIndex}\",\n    questionsProgressText: \"Zodpovedané otázky {0}/{1}\",\n    emptySurvey: \"V prieskume nie je žiadna vidieľná stránka ani otázka.\",\n    completingSurvey: \"Ďakujeme vám za dokončenie prieskumu.\",\n    completingSurveyBefore: \"Podľa našich záznamov ste už tento prieskum dokončili.\",\n    loadingSurvey: \"Načítanie prieskumu...\",\n    placeholder: \"Vybrať...\",\n    ratingOptionsCaption: \"Vybrať...\",\n    value: \"hodnota\",\n    requiredError: \"Požaduje sa odozva.\",\n    requiredErrorInPanel: \"Požaduje sa odozva: zodpovedajte aspoň jednu otázku.\",\n    requiredInAllRowsError: \"Požaduje sa odozva: zodpovedajte otázky vo všetkých riadkoch.\",\n    numericError: \"Hodnota má byť číselná.\",\n    minError: \"Hodnota nemá byť nižšia než {0}\",\n    maxError: \"Hodnota nemá byť vyššia než {0}\",\n    textMinLength: \"Zadajte aspoň {0} znak(-y/-ov).\",\n    textMaxLength: \"Nezadávajte viac než {0} znak(-y/-ov).\",\n    textMinMaxLength: \"Zadajte aspoň {0} a nie viac než {1} znaky(-ov).\",\n    minRowCountError: \"Vyplňte aspoň {0} riadok(-y/-ov).\",\n    minSelectError: \"Vyberte aspoň {0} variant(-y/-ov).\",\n    maxSelectError: \"Nevyberajte viac než {0} variant(-y/-ov).\",\n    numericMinMax: \"„{0}“ má byť minimálne {1} a maximálne {2}\",\n    numericMin: \"„{0}“ má byť minimálne {1}\",\n    numericMax: \"„{0}“ má byť maximálne {1}\",\n    invalidEmail: \"Zadajte platnú e-mailovú adresu.\",\n    invalidExpression: \"Výraz: {0} má vrátiť hodnotu „true“.\",\n    urlRequestError: \"Požiadavky vrátila hodnotu „{0}“. {1}\",\n    urlGetChoicesError: \"Požiadavka vrátila prázdne údaje alebo je vlastnosť „cesta“ nesprávna\",\n    exceedMaxSize: \"Veľkosť súboru nemá prekročiť {0}.\",\n    otherRequiredError: \"Požaduje sa odozva: zadajte inú hodnotu.\",\n    uploadingFile: \"Súbor sa odovzdáva. Počkajte niekoľko sekúnd a skúste to znova.\",\n    loadingFile: \"Načítanie...\",\n    chooseFile: \"Vyberte súbor(-y)...\",\n    noFileChosen: \"Žiadny vybratý súbor\",\n    fileDragAreaPlaceholder: \"Presuňte súbor sem alebo kliknite na nasledujúce tlačidlo a načítajte súbor.\",\n    confirmDelete: \"Chcete záznam odstrániť?\",\n    keyDuplicationError: \"Táto hodnota má byť jedinečná.\",\n    addColumn: \"Pridať stĺpec\",\n    addRow: \"Pridať riadok\",\n    removeRow: \"Odstrániť\",\n    emptyRowsText: \"K dispozícii nie sú žiadne riadky.\",\n    addPanel: \"Pridať nové\",\n    removePanel: \"Odstrániť\",\n    choices_Item: \"položka\",\n    matrix_column: \"Stĺpec\",\n    matrix_row: \"Riadok\",\n    multipletext_itemname: \"text\",\n    savingData: \"Výsledky sa ukladajú na server...\",\n    savingDataError: \"V dôsledku chyby sa nepodarilo výsledky uložiť.\",\n    savingDataSuccess: \"Výsledky sa úspešne uložili.\",\n    saveAgainButton: \"Skúste to znova\",\n    timerMin: \"min\",\n    timerSec: \"s\",\n    timerSpentAll: \"Na tejto stránke ste strávili {0} a celkovo {1}.\",\n    timerSpentPage: \"Na tejto stránke ste strávili {0}.\",\n    timerSpentSurvey: \"Celkovo ste strávili {0}.\",\n    timerLimitAll: \"Na tejto stránke ste strávili {0} z {1} a celkovo {2} z {3}.\",\n    timerLimitPage: \"Na tejto stránke ste strávili {0} z {1}.\",\n    timerLimitSurvey: \"Celkovo ste strávili {0} z {1}.\",\n    clearCaption: \"Vymazať\",\n    signaturePlaceHolder: \"Podpísať tu\",\n    chooseFileCaption: \"Vybrať súbor\",\n    takePhotoCaption: \"Odfotiť\",\n    cameraPlaceHolder: \"Kliknutím na tlačidlo nižšie nasnímate fotografiu pomocou fotoaparátu.\",\n    fileCameraDragAreaPlaceHolder: \"Presuňte myšou alebo vyberte súbor, ktorý chcete nahrať alebo nasnímať fotografiu pomocou fotoaparátu.\",\n    replaceFileCaption: \"Nahradenie súboru\",\n    removeFileCaption: \"Odstrániť tento súbor\",\n    booleanCheckedLabel: \"Áno\",\n    booleanUncheckedLabel: \"Nie\",\n    confirmRemoveFile: \"Naozaj chcete odstrániť tento súbor: {0}?\",\n    confirmRemoveAllFiles: \"Naozaj chcete odstrániť všetky súbory?\",\n    questionTitlePatternText: \"Titul otázky\",\n    modalCancelButtonText: \"Zrušiť\",\n    modalApplyButtonText: \"Použiť\",\n    filterStringPlaceholder: \"Vyhľadávanie písaním...\",\n    emptyMessage: \"Žiadne údaje na zobrazenie\",\n    noEntriesText: \"K dispozícii ešte nie sú žiadne zadania.\\nKliknutím na nasledujúce tlačidlo pridajte nové zadanie.\",\n    noEntriesReadonlyText: \"Nie sú k dispozícii žiadne záznamy.\",\n    more: \"Viacej\",\n    tagboxDoneButtonCaption: \"OK\",\n    selectToRankEmptyRankedAreaText: \"Všetky možnosti sú zoradené\",\n    selectToRankEmptyUnrankedAreaText: \"Presuňte sem voľby, aby ste ich zoradili\"\n};\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"sk\"] = slovakSurveyStrings;\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"sk\"] = \"slovenčina\";\n// The following strings have been translated by a machine translation service\n// Remove those strings that you have corrected manually\n// indexText: \"{0} of {1}\" => \"{0} {1}\"\n// panelDynamicTabTextFormat: \"Panel {panelIndex}\" => \"Panel {panelIndex}\"\n// ratingOptionsCaption: \"Select...\" => \"Vybrať...\"\n// emptyMessage: \"No data to display\" => \"Žiadne údaje na zobrazenie\"\n// noEntriesReadonlyText: \"There are no entries.\" => \"Nie sú k dispozícii žiadne záznamy.\"\n// more: \"More\" => \"Viacej\"\n// tagboxDoneButtonCaption: \"OK\" => \"OK\"\n// selectToRankEmptyRankedAreaText: \"All choices are ranked\" => \"Všetky možnosti sú zoradené\"\n// selectToRankEmptyUnrankedAreaText: \"Drag and drop choices here to rank them\" => \"Presuňte sem voľby, aby ste ich zoradili\"// takePhotoCaption: \"Take Photo\" => \"Odfotiť\"\n// cameraPlaceHolder: \"Click the button below to take a photo using the camera.\" => \"Kliknutím na tlačidlo nižšie nasnímate fotografiu pomocou fotoaparátu.\"\n// fileCameraDragAreaPlaceHolder: \"Drag and drop or select a file to upload or take a photo using the camera.\" => \"Presuňte myšou alebo vyberte súbor, ktorý chcete nahrať alebo nasnímať fotografiu pomocou fotoaparátu.\"\n// replaceFileCaption: \"Replace file\" => \"Nahradenie súboru\"\n\n\n/***/ }),\n\n/***/ \"./src/localization/spanish.ts\":\n/*!*************************************!*\\\n  !*** ./src/localization/spanish.ts ***!\n  \\*************************************/\n/*! exports provided: spanishSurveyStrings */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_2116574__) {\n\n\"use strict\";\n__nested_webpack_require_2116574__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_2116574__.d(__nested_webpack_exports__, \"spanishSurveyStrings\", function() { return spanishSurveyStrings; });\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_2116574__(/*! survey-core */ \"./src/entries/core.ts\");\n\nvar spanishSurveyStrings = {\n    pagePrevText: \"Anterior\",\n    pageNextText: \"Siguiente\",\n    completeText: \"Completar\",\n    previewText: \"Vista previa\",\n    editText: \"Edita\",\n    startSurveyText: \"Comienza\",\n    otherItemText: \"Otro (describa)\",\n    noneItemText: \"Ninguno\",\n    selectAllItemText: \"Seleccionar todo\",\n    progressText: \"Página {0} de {1}\",\n    indexText: \"{0} de {1}\",\n    panelDynamicProgressText: \"Registro {0} de {1}\",\n    panelDynamicTabTextFormat: \"Panel {panelIndex}\",\n    questionsProgressText: \"Respondió a {0}/{1} preguntas\",\n    emptySurvey: \"No hay página visible o pregunta en la encuesta.\",\n    completingSurvey: \"¡Gracias por completar la encuesta!\",\n    completingSurveyBefore: \"Nuestros registros muestran que ya ha completado esta encuesta.\",\n    loadingSurvey: \"La encuesta está cargando...\",\n    placeholder: \"Seleccione...\",\n    ratingOptionsCaption: \"Toca aquí para calificar...\",\n    value: \"valor\",\n    requiredError: \"Por favor conteste la pregunta.\",\n    requiredErrorInPanel: \"Por favor, responda al menos una pregunta.\",\n    requiredInAllRowsError: \"Por favor conteste las preguntas en cada hilera.\",\n    numericError: \"La estimación debe ser numérica.\",\n    minError: \"La estimación no debe ser menor que {0}\",\n    maxError: \"La estimación no debe ser mayor que {0}\",\n    textMinLength: \"Por favor entre por lo menos {0} símbolos.\",\n    textMaxLength: \"Por favor entre menos de {0} símbolos.\",\n    textMinMaxLength: \"Por favor entre más de {0} y menos de {1} símbolos.\",\n    minRowCountError: \"Por favor llene por lo menos {0} hileras.\",\n    minSelectError: \"Por favor seleccione por lo menos {0} variantes.\",\n    maxSelectError: \"Por favor seleccione no más de {0} variantes.\",\n    numericMinMax: \"El '{0}' debe de ser igual o más de {1} y igual o menos de {2}\",\n    numericMin: \"El '{0}' debe ser igual o más de {1}\",\n    numericMax: \"El '{0}' debe ser igual o menos de {1}\",\n    invalidEmail: \"Por favor agregue un correo electrónico válido.\",\n    invalidExpression: \"La expresión: {0} debería devolver 'verdadero'.\",\n    urlRequestError: \"La solicitud regresó error '{0}'. {1}\",\n    urlGetChoicesError: \"La solicitud regresó vacío de data o la propiedad 'trayectoria' no es correcta\",\n    exceedMaxSize: \"El tamaño del archivo no debe de exceder {0}.\",\n    otherRequiredError: \"Por favor agregue la otra estimación.\",\n    uploadingFile: \"Su archivo se está subiendo. Por favor espere unos segundos e intente de nuevo.\",\n    loadingFile: \"Cargando...\",\n    chooseFile: \"Elija archivo(s)...\",\n    noFileChosen: \"No se ha elegido ningún archivo\",\n    fileDragAreaPlaceholder: \"Suelte un archivo aquí o haga clic en el botón de abajo para cargar el archivo\",\n    confirmDelete: \"¿Quieres borrar el registro?\",\n    keyDuplicationError: \"Este valor debe ser único.\",\n    addColumn: \"Añadir columna\",\n    addRow: \"Agregue una hilera\",\n    removeRow: \"Eliminar una hilera\",\n    emptyRowsText: \"No hay hileras.\",\n    addPanel: \"Añadir nuevo\",\n    removePanel: \"Retire\",\n    choices_Item: \"artículo\",\n    matrix_column: \"Columna\",\n    matrix_row: \"Hilera\",\n    multipletext_itemname: \"texto\",\n    savingData: \"Los resultados se están guardando en el servidor...\",\n    savingDataError: \"Los resultados se están guardando en el servidor...\",\n    savingDataSuccess: \"¡Los resultados se guardaron con éxito!\",\n    saveAgainButton: \"Inténtalo de nuevo.\",\n    timerMin: \"min\",\n    timerSec: \"sec\",\n    timerSpentAll: \"Has gastado {0} en esta página y {1} en total.\",\n    timerSpentPage: \"Usted ha pasado {0} en esta página.\",\n    timerSpentSurvey: \"Has gastado en total.\",\n    timerLimitAll: \"Has gastado {0} de {1} en esta página y {2} de {3} en total.\",\n    timerLimitPage: \"Has gastado {0} de {1} en esta página.\",\n    timerLimitSurvey: \"Usted ha gastado {0} de {1} en total.\",\n    clearCaption: \"Despejen\",\n    signaturePlaceHolder: \"Firma aqui\",\n    chooseFileCaption: \"Elija el archivo\",\n    takePhotoCaption: \"Tomar foto\",\n    cameraPlaceHolder: \"Haga clic en el botón de abajo para tomar una foto con la cámara.\",\n    fileCameraDragAreaPlaceHolder: \"Arrastre y suelte o seleccione un archivo para cargar o tomar una foto con la cámara.\",\n    replaceFileCaption: \"Reemplazar archivo\",\n    removeFileCaption: \"Elimina este archivo\",\n    booleanCheckedLabel: \"Sí\",\n    booleanUncheckedLabel: \"No\",\n    confirmRemoveFile: \"¿Estás seguro de que quieres eliminar este archivo: {0}?\",\n    confirmRemoveAllFiles: \"¿Estás seguro de que quieres eliminar todos los archivos?\",\n    questionTitlePatternText: \"Título de la pregunta\",\n    modalCancelButtonText: \"Anular\",\n    modalApplyButtonText: \"Aplicar\",\n    filterStringPlaceholder: \"Escribe para buscar...\",\n    emptyMessage: \"No hay datos para mostrar\",\n    noEntriesText: \"Aún no hay entradas.\\nHaga clic en el botón de abajo para agregar una nueva entrada.\",\n    noEntriesReadonlyText: \"No hay entradas.\",\n    more: \"Más\",\n    tagboxDoneButtonCaption: \"De acuerdo\",\n    selectToRankEmptyRankedAreaText: \"Todas las opciones están clasificadas\",\n    selectToRankEmptyUnrankedAreaText: \"Arrastra y suelta opciones aquí para clasificarlas\"\n};\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"es\"] = spanishSurveyStrings;\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"es\"] = \"español\";\n// The following strings have been translated by a machine translation service\n// Remove those strings that you have corrected manually\n// panelDynamicTabTextFormat: \"Panel {panelIndex}\" => \"Panel {panelIndex}\"\n// emptyMessage: \"No data to display\" => \"No hay datos para mostrar\"\n// noEntriesReadonlyText: \"There are no entries.\" => \"No hay entradas.\"\n// more: \"More\" => \"Más\"\n// tagboxDoneButtonCaption: \"OK\" => \"De acuerdo\"\n// selectToRankEmptyRankedAreaText: \"All choices are ranked\" => \"Todas las opciones están clasificadas\"\n// selectToRankEmptyUnrankedAreaText: \"Drag and drop choices here to rank them\" => \"Arrastra y suelta opciones aquí para clasificarlas\"// takePhotoCaption: \"Take Photo\" => \"Tomar foto\"\n// cameraPlaceHolder: \"Click the button below to take a photo using the camera.\" => \"Haga clic en el botón de abajo para tomar una foto con la cámara.\"\n// fileCameraDragAreaPlaceHolder: \"Drag and drop or select a file to upload or take a photo using the camera.\" => \"Arrastre y suelte o seleccione un archivo para cargar o tomar una foto con la cámara.\"\n// replaceFileCaption: \"Replace file\" => \"Reemplazar archivo\"\n\n\n/***/ }),\n\n/***/ \"./src/localization/swahili.ts\":\n/*!*************************************!*\\\n  !*** ./src/localization/swahili.ts ***!\n  \\*************************************/\n/*! exports provided: swahiliStrings */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_2123652__) {\n\n\"use strict\";\n__nested_webpack_require_2123652__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_2123652__.d(__nested_webpack_exports__, \"swahiliStrings\", function() { return swahiliStrings; });\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_2123652__(/*! survey-core */ \"./src/entries/core.ts\");\n\nvar swahiliStrings = {\n    pagePrevText: \"Iliyotangulia\",\n    pageNextText: \"Ifuatayo\",\n    completeText: \"Kamili\",\n    previewText: \"Hakiki\",\n    editText: \"Hariri\",\n    startSurveyText: \"Anza\",\n    otherItemText: \"Nyingine (eleza)\",\n    noneItemText: \"Hakuna\",\n    selectAllItemText: \"Chagua Zote\",\n    progressText: \"Ukurasa {0} wa {1}\",\n    indexText: \"{0} ya {1}\",\n    panelDynamicProgressText: \"Rekodi {0} ya {1}\",\n    panelDynamicTabTextFormat: \"Panel {panelIndex}\",\n    questionsProgressText: \"Yaliyojibiwa {0}/{1} maswali\",\n    emptySurvey: \"Hakuna ukurasa unaoonekana au swali katika utafiti.\",\n    completingSurvey: \"Asanti kwa kukamilisha utafiti!\",\n    completingSurveyBefore: \"Recodi zetu zinatuonyesha tayari umekamilisha utafiti.\",\n    loadingSurvey: \"Tunaandaa utafiti...\",\n    placeholder: \"Chagua...\",\n    ratingOptionsCaption: \"Teua...\",\n    value: \"thamani\",\n    requiredError: \"Tafadhali jibu hili swali.\",\n    requiredErrorInPanel: \"Tafadhali jibu swali angalau moja.\",\n    requiredInAllRowsError: \"Tafadhali jibu maswali katika safu zote.\",\n    numericError: \"Thamani inapaswa kuwa ya nambari.\",\n    minError: \"Thamani haipaswi kuwa chini ya {0}\",\n    maxError: \"Thamani haipaswi kuwa kubwa kuliko {0}\",\n    textMinLength: \"Tafadhali ingiza angalau{0} husika.\",\n    textMaxLength: \"Tafadhali ingiza isiozidi {0} husika.\",\n    textMinMaxLength: \"Tafadhali ingiza kiwango zaidi ya {0} na kisichopungua {1} husika.\",\n    minRowCountError: \"Tafadhali jaza isiopungua {0} safu.\",\n    minSelectError: \"Tafadhali chagua angalau {0} lahaja.\",\n    maxSelectError: \"Tafadhali changua isiozidi {0} lahaja.\",\n    numericMinMax: \" '{0}' inapaswa kuwa sawa au zaidi ya {1} na sawa au chini ya {2}\",\n    numericMin: \" '{0}'inapaswa kuwa sawa au zaidi ya {1}\",\n    numericMax: \" '{0}'inapaswa kuwa sawa au chini ya {1}\",\n    invalidEmail: \"Tafadhali ingiza anwani halali ya barua-pepe.\",\n    invalidExpression: \"Usemi:{0} inapaswa kurudi 'kweli'.\",\n    urlRequestError: \"Ombi lina kosa '{0}'. {1}\",\n    urlGetChoicesError: \"Ombi lilirudisha data tupu au the 'path' mali ya njia sio sahihi\",\n    exceedMaxSize: \"Saizi ya faili haipaswi kuzidi {0}.\",\n    otherRequiredError: \"Tafadhali ingiza thamani nyingine.\",\n    uploadingFile: \"Faili yako inapakia.Tafadhali subiri sekunde kadhaa na ujaribu tena.\",\n    loadingFile: \"Inapakia...\",\n    chooseFile: \"Chagua faili...\",\n    noFileChosen: \"Hujachagua faili\",\n    fileDragAreaPlaceholder: \"Buruta na udondoshe faili hapa au bofya kitufe hapa chini na uchague faili ya kupakia.\",\n    confirmDelete: \"Je! Unataka kufuta rekodi?\",\n    keyDuplicationError: \"Thamani hii inapaswa kuwa ya kipekee.\",\n    addColumn: \"Ongeza Kolamu\",\n    addRow: \"Ongeza safu\",\n    removeRow: \"Toa\",\n    emptyRowsText: \"Hakuna safu.\",\n    addPanel: \"Ongeza mpya\",\n    removePanel: \"Toa\",\n    choices_Item: \"kitu\",\n    matrix_column: \"Kolamu\",\n    matrix_row: \"Safu\",\n    multipletext_itemname: \"Ujumbe\",\n    savingData: \"Matokeo yamehifadhiwa kwa seva...\",\n    savingDataError: \"Kosa limetokea na hatukuweza kuhifadhi matokeo.\",\n    savingDataSuccess: \"Matokeo yamehifadhiwa!\",\n    saveAgainButton: \"Jaribu tena\",\n    timerMin: \"dakika\",\n    timerSec: \"sekunde\",\n    timerSpentAll: \"Umetumia {0} kwenye ukurasa huu na {1} kwa jumla.\",\n    timerSpentPage: \"Umetumia {0} kwenye ukurasa huu.\",\n    timerSpentSurvey: \"Umetumia {0} kwa jumla.\",\n    timerLimitAll: \"Umetumia {0} ya {1} kwenye ukurasa huu {2} wa {3} kwa jumla.\",\n    timerLimitPage: \"Umetumia {0} ya {1} kwenye ukurasa huu.\",\n    timerLimitSurvey: \"Umetumia {0} ya {1} kwa jumla.\",\n    clearCaption: \"Ondoa\",\n    signaturePlaceHolder: \"Ingia hapa\",\n    chooseFileCaption: \"Chagua faili\",\n    takePhotoCaption: \"Chukua Picha\",\n    cameraPlaceHolder: \"Bonyeza kitufe hapa chini ili kupiga picha kwa kutumia kamera.\",\n    fileCameraDragAreaPlaceHolder: \"Drag na kuacha au kuchagua faili kupakia au kuchukua picha kwa kutumia kamera.\",\n    replaceFileCaption: \"Badilisha faili\",\n    removeFileCaption: \"Ondoa faili\",\n    booleanCheckedLabel: \"Ndio\",\n    booleanUncheckedLabel: \"Hapana\",\n    confirmRemoveFile: \"Je! Una uhakika kuwa unataka kuondoa faili hii: {0}?\",\n    confirmRemoveAllFiles: \"Je! Una uhakika kuwa unataka kuondoa faili zote?\",\n    questionTitlePatternText: \"Kichwa cha Swali\",\n    modalCancelButtonText: \"Katisha\",\n    modalApplyButtonText: \"Tekeleza\",\n    filterStringPlaceholder: \"Andika ili kutafuta...\",\n    emptyMessage: \"Hakuna data ya kuonyesha\",\n    noEntriesText: \"Hakuna maingizo kwa sasa.\\nBofya kitufe hapa chini ili kuongeza ingizo jipya.\",\n    noEntriesReadonlyText: \"Hakuna viingilio.\",\n    more: \"Zaidi\",\n    tagboxDoneButtonCaption: \"Sawa kabisa\",\n    selectToRankEmptyRankedAreaText: \"Chaguzi zote zimeorodheshwa\",\n    selectToRankEmptyUnrankedAreaText: \"Buruta na uache uchaguzi hapa ili kuziorodhesha\"\n};\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"sw\"] = swahiliStrings;\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"sw\"] = \"swahili\";\n// The following strings have been translated by a machine translation service\n// Remove those strings that you have corrected manually\n// indexText: \"{0} of {1}\" => \"{0} ya {1}\"\n// panelDynamicTabTextFormat: \"Panel {panelIndex}\" => \"Panel {panelIndex}\"\n// ratingOptionsCaption: \"Select...\" => \"Teua...\"\n// minError: \"The value should not be less than {0}\" => \"Thamani haipaswi kuwa chini ya {0}\"\n// maxError: \"The value should not be greater than {0}\" => \"Thamani haipaswi kuwa kubwa kuliko {0}\"\n// fileDragAreaPlaceholder: \"Drag and drop a file here or click the button below and choose a file to upload.\" => \"Buruta na udondoshe faili hapa au bofya kitufe hapa chini na uchague faili ya kupakia.\"\n// emptyRowsText: \"There are no rows.\" => \"Hakuna safu.\"\n// multipletext_itemname: \"text\" => \"Ujumbe\"\n// signaturePlaceHolder: \"Sign here\" => \"Ingia hapa\"\n// modalCancelButtonText: \"Cancel\" => \"Katisha\"\n// modalApplyButtonText: \"Apply\" => \"Tekeleza\"\n// filterStringPlaceholder: \"Type to search...\" => \"Andika ili kutafuta...\"\n// emptyMessage: \"No data to display\" => \"Hakuna data ya kuonyesha\"\n// noEntriesText: \"There are no entries yet.\\nClick the button below to add a new entry.\" => \"Hakuna maingizo kwa sasa.\\nBofya kitufe hapa chini ili kuongeza ingizo jipya.\"\n// noEntriesReadonlyText: \"There are no entries.\" => \"Hakuna viingilio.\"\n// more: \"More\" => \"Zaidi\"\n// tagboxDoneButtonCaption: \"OK\" => \"Sawa kabisa\"\n// selectToRankEmptyRankedAreaText: \"All choices are ranked\" => \"Chaguzi zote zimeorodheshwa\"\n// selectToRankEmptyUnrankedAreaText: \"Drag and drop choices here to rank them\" => \"Buruta na uache uchaguzi hapa ili kuziorodhesha\"// takePhotoCaption: \"Take Photo\" => \"Chukua Picha\"\n// cameraPlaceHolder: \"Click the button below to take a photo using the camera.\" => \"Bonyeza kitufe hapa chini ili kupiga picha kwa kutumia kamera.\"\n// fileCameraDragAreaPlaceHolder: \"Drag and drop or select a file to upload or take a photo using the camera.\" => \"Drag na kuacha au kuchagua faili kupakia au kuchukua picha kwa kutumia kamera.\"\n// replaceFileCaption: \"Replace file\" => \"Badilisha faili\"\n\n\n/***/ }),\n\n/***/ \"./src/localization/swedish.ts\":\n/*!*************************************!*\\\n  !*** ./src/localization/swedish.ts ***!\n  \\*************************************/\n/*! exports provided: swedishSurveyStrings */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_2131387__) {\n\n\"use strict\";\n__nested_webpack_require_2131387__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_2131387__.d(__nested_webpack_exports__, \"swedishSurveyStrings\", function() { return swedishSurveyStrings; });\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_2131387__(/*! survey-core */ \"./src/entries/core.ts\");\n\nvar swedishSurveyStrings = {\n    pagePrevText: \"Föregående\",\n    pageNextText: \"Nästa\",\n    completeText: \"Slutför\",\n    previewText: \"Förhandsvisning\",\n    editText: \"Redigera\",\n    startSurveyText: \"Börja\",\n    otherItemText: \"Annat (beskriv)\",\n    noneItemText: \"Ingen\",\n    selectAllItemText: \"Välj alla\",\n    progressText: \"Sida {0} av {1}\",\n    indexText: \"{0} av {1}\",\n    panelDynamicProgressText: \"{0} av {1}\",\n    panelDynamicTabTextFormat: \"Panel {panelIndex}\",\n    questionsProgressText: \"{0} / {1} frågor besvarade\",\n    emptySurvey: \"Det finns ingen synlig sida eller fråga i enkäten.\",\n    completingSurvey: \"Tack för att du genomfört enkäten!!\",\n    completingSurveyBefore: \"Våra register visar att du redan har slutfört denna undersökning.\",\n    loadingSurvey: \"Enkäten laddas...\",\n    placeholder: \"Välj...\",\n    ratingOptionsCaption: \"Tryck här för att betygsätta...\",\n    value: \"värde\",\n    requiredError: \"Frågan är obligatorisk.\",\n    requiredErrorInPanel: \"Vänligen svara på minst en fråga.\",\n    requiredInAllRowsError: \"Var vänlig besvara frågorna på alla rader.\",\n    numericError: \"Värdet ska vara numeriskt.\",\n    minError: \"Värdet får inte vara mindre än {0}\",\n    maxError: \"Värdet får inte vara större än {0}\",\n    textMinLength: \"Ange minst {0} tecken.\",\n    textMaxLength: \"Ange färre än {0} tecken.\",\n    textMinMaxLength: \"Ange mer än {0} och färre än {1} tecken.\",\n    minRowCountError: \"Var vänlig fyll i minst {0} rader.\",\n    minSelectError: \"Var vänlig välj åtminstone {0} varianter.\",\n    maxSelectError: \"Var vänlig välj inte fler än {0} varianter.\",\n    numericMinMax: \"'{0}' ska vara lika med eller mer än {1} samt lika med eller mindre än {2}\",\n    numericMin: \"'{0}' ska vara lika med eller mer än {1}\",\n    numericMax: \"'{0}' ska vara lika med eller mindre än {1}\",\n    invalidEmail: \"Var vänlig ange en korrekt e-postadress.\",\n    invalidExpression: \"Uttrycket: {0} ska returnera 'true'.\",\n    urlRequestError: \"Förfrågan returnerade felet '{0}'. {1}\",\n    urlGetChoicesError: \"Antingen returnerade förfrågan ingen data eller så är egenskapen 'path' inte korrekt\",\n    exceedMaxSize: \"Filstorleken får ej överstiga {0}.\",\n    otherRequiredError: \"Var vänlig ange det andra värdet.\",\n    uploadingFile: \"Din fil laddas upp. Var vänlig vänta några sekunder och försök sedan igen.\",\n    loadingFile: \"Laddar...\",\n    chooseFile: \"Välj fil(er) ...\",\n    noFileChosen: \"Ingen fil vald\",\n    fileDragAreaPlaceholder: \"Dra och släpp en fil här eller klicka på knappen nedan och välj en fil att ladda upp.\",\n    confirmDelete: \"Vill du radera posten?\",\n    keyDuplicationError: \"Detta värde ska vara unikt.\",\n    addColumn: \"Lägg till kolumn\",\n    addRow: \"Lägg till rad\",\n    removeRow: \"Ta bort\",\n    emptyRowsText: \"Det finns inga rader.\",\n    addPanel: \"Lägg till ny\",\n    removePanel: \"Ta bort\",\n    choices_Item: \"Artikel\",\n    matrix_column: \"Kolumn\",\n    matrix_row: \"Rad\",\n    multipletext_itemname: \"text\",\n    savingData: \"Resultaten sparas på servern ...\",\n    savingDataError: \"Ett fel inträffade och vi kunde inte spara resultaten.\",\n    savingDataSuccess: \"Resultaten lyckades sparas!\",\n    saveAgainButton: \"Försök igen\",\n    timerMin: \"min\",\n    timerSec: \"sek\",\n    timerSpentAll: \"Du har spenderat {0} på den här sidan och {1} totalt.\",\n    timerSpentPage: \"Du har spenderat {0} på den här sidan.\",\n    timerSpentSurvey: \"Du har spenderat {0} totalt.\",\n    timerLimitAll: \"Du har spenderat {0} av {1} på den här sidan och {2} av {3} totalt.\",\n    timerLimitPage: \"Du har spenderat {0} av {1} på den här sidan.\",\n    timerLimitSurvey: \"Du har spenderat {0} av {1} totalt.\",\n    clearCaption: \"Klar\",\n    signaturePlaceHolder: \"Signera här\",\n    chooseFileCaption: \"Välj fil\",\n    takePhotoCaption: \"Ta foto\",\n    cameraPlaceHolder: \"Klicka på knappen nedan för att ta ett foto med kameran.\",\n    fileCameraDragAreaPlaceHolder: \"Dra och släpp eller välj en fil att ladda upp eller ta ett foto med kameran.\",\n    replaceFileCaption: \"Ersätt fil\",\n    removeFileCaption: \"Ta bort den här filen\",\n    booleanCheckedLabel: \"Ja\",\n    booleanUncheckedLabel: \"Nej\",\n    confirmRemoveFile: \"Är du säker på att du vill ta bort den här filen: {0}?\",\n    confirmRemoveAllFiles: \"Är du säker på att du vill ta bort alla filer?\",\n    questionTitlePatternText: \"Frågetitel\",\n    modalCancelButtonText: \"Avbryt\",\n    modalApplyButtonText: \"Spara\",\n    filterStringPlaceholder: \"Skriv för att söka...\",\n    emptyMessage: \"Ingen data finns\",\n    noEntriesText: \"Det finns inga värden än.\\nKlicka på knappen nedan för att lägga till nytt värde.\",\n    noEntriesReadonlyText: \"Det finns inga poster.\",\n    more: \"Mer\",\n    tagboxDoneButtonCaption: \"OKEJ\",\n    selectToRankEmptyRankedAreaText: \"Alla val rangordnas\",\n    selectToRankEmptyUnrankedAreaText: \"Dra och släpp val här för att rangordna dem\"\n};\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"sv\"] = swedishSurveyStrings;\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"sv\"] = \"svenska\";\n// The following strings have been translated by a machine translation service\n// Remove those strings that you have corrected manually\n// panelDynamicTabTextFormat: \"Panel {panelIndex}\" => \"Panel {panelIndex}\"\n// fileDragAreaPlaceholder: \"Drag and drop a file here or click the button below and choose a file to upload.\" => \"Dra och släpp en fil här eller klicka på knappen nedan och välj en fil att ladda upp.\"\n// emptyRowsText: \"There are no rows.\" => \"Det finns inga rader.\"\n// noEntriesReadonlyText: \"There are no entries.\" => \"Det finns inga poster.\"\n// tagboxDoneButtonCaption: \"OK\" => \"OKEJ\"\n// selectToRankEmptyRankedAreaText: \"All choices are ranked\" => \"Alla val rangordnas\"\n// selectToRankEmptyUnrankedAreaText: \"Drag and drop choices here to rank them\" => \"Dra och släpp val här för att rangordna dem\"// takePhotoCaption: \"Take Photo\" => \"Ta foto\"\n// cameraPlaceHolder: \"Click the button below to take a photo using the camera.\" => \"Klicka på knappen nedan för att ta ett foto med kameran.\"\n// fileCameraDragAreaPlaceHolder: \"Drag and drop or select a file to upload or take a photo using the camera.\" => \"Dra och släpp eller välj en fil att ladda upp eller ta ett foto med kameran.\"\n// replaceFileCaption: \"Replace file\" => \"Ersätt fil\"\n\n\n/***/ }),\n\n/***/ \"./src/localization/tajik.ts\":\n/*!***********************************!*\\\n  !*** ./src/localization/tajik.ts ***!\n  \\***********************************/\n/*! exports provided: tajikSurveyStrings */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_2138296__) {\n\n\"use strict\";\n__nested_webpack_require_2138296__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_2138296__.d(__nested_webpack_exports__, \"tajikSurveyStrings\", function() { return tajikSurveyStrings; });\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_2138296__(/*! survey-core */ \"./src/entries/core.ts\");\n// This dictionary contains 25 untranslated or inherited localization strings.\n// These strings are commented out. Uncomment and edit them if you want to add your translations.\n\nvar tajikSurveyStrings = {\n    pagePrevText: \"Бозгашт\",\n    pageNextText: \"Оянда\",\n    completeText: \"Иҷро шуд\",\n    // previewText: \"Preview\",\n    // editText: \"Edit\",\n    startSurveyText: \"Оғоз\",\n    otherItemText: \"Дигар (лутфан тавсиф кунед)\",\n    noneItemText: \"Не\",\n    selectAllItemText: \"Ҳамаро интихоб кардан\",\n    progressText: \"Саҳифаи {0} аз {1}\",\n    // indexText: \"{0} of {1}\",\n    // panelDynamicProgressText: \"{0} of {1}\",\n    // questionsProgressText: \"Answered {0}/{1} questions\",\n    emptySurvey: \"Ягон савол вуҷуд надорад.\",\n    completingSurvey: \"Ташаккур барои пур кардани саволнома!\",\n    completingSurveyBefore: \"Шумо аллакай ин пурсишро анҷом додаед.\",\n    loadingSurvey: \"Боргирӣ аз сервер...\",\n    placeholder: \"Интихоб кардан...\",\n    // ratingOptionsCaption: \"Select...\",\n    value: \"қиммат\",\n    requiredError: \"Илтимос, ба савол ҷавоб диҳед.\",\n    requiredErrorInPanel: \"Илтимос, ақалан ба як савол ҷавоб диҳед.\",\n    requiredInAllRowsError: \"Илтимос, ба ҳамаи саволҳо дар ҳамаи сатрҳо ҷавоб диҳед.\",\n    numericError: \"Ҷавоб бояд рақам бошад.\",\n    // minError: \"The value should not be less than {0}\",\n    // maxError: \"The value should not be greater than {0}\",\n    textMinLength: \"Илтимос, аз {0} зиёдтар рамз ворид кунед.\",\n    textMaxLength: \"Илтимос, аз {0} камтар рамз ворид кунед.\",\n    textMinMaxLength: \"Илтимос, аз {0} зиёдтар ва аз {1} камтар рамз ворид кунед.\",\n    minRowCountError: \"Илтимос, на камтар аз {0} сатр пур кунед.\",\n    minSelectError: \"Илтимос, ақалан {0} вариант интихоб кунед.\",\n    maxSelectError: \"Илтимос, на зиёдтар аз {0} вариант интихоб кунед.\",\n    numericMinMax: \"'{0}' бояд на кам аз {1} ва на бисёр аз {2} бошад\",\n    numericMin: \"'{0}' бояд на кам аз {1} бошад\",\n    numericMax: \"'{0}' бояд на зиёд аз {1} бошад\",\n    invalidEmail: \"Илтимос, почтаи электронии воқеиро ворид кунед.\",\n    invalidExpression: \"Ифодаи {0} бояд 'true' баргардонад.\",\n    urlRequestError: \"Дархост хатогӣ бозгардонд '{0}'. {1}\",\n    urlGetChoicesError: \"Ҷавоб ба дархост холӣ омад ё хосияти 'path' нодуруст муайян карда шудааст\",\n    exceedMaxSize: \"Андозаи файл бояд на калон аз {0} бошад.\",\n    otherRequiredError: \"Илтимос, ба майдони 'Дигар' додаҳоро ворид кунед\",\n    uploadingFile: \"Файли шумо бор шуда истодааст. Якчанд сония интизор шавед ва бори дигар кӯшиш кунед.\",\n    loadingFile: \"Боркунӣ...\",\n    chooseFile: \"Файл(ҳо)-ро интихоб кунед...\",\n    // noFileChosen: \"No file chosen\",\n    // fileDragAreaPlaceholder: \"Drop a file here or click the button below to load the file.\",\n    confirmDelete: \"Шумо мутмаин ҳастед, ки мехоҳед воридро тоза кунед?\",\n    keyDuplicationError: \"Ин арзиш бояд беназир бошад.\",\n    addColumn: \"Иловаи сутун\",\n    addRow: \"Иловаи сатр\",\n    removeRow: \"Нест кардан\",\n    // emptyRowsText: \"There are no rows.\",\n    addPanel: \"Илова кардан\",\n    removePanel: \"Нест кардан\",\n    choices_Item: \"Вариант\",\n    matrix_column: \"Сутун\",\n    matrix_row: \"Сатр\",\n    // multipletext_itemname: \"text\",\n    savingData: \"Натиҷа ба сервер сабт шуда истодаанд...\",\n    savingDataError: \"Хатогӣ ба амал омад, натиҷа сабт нашуд.\",\n    savingDataSuccess: \"Натиҷа бомуваффакият сабт шуд!\",\n    saveAgainButton: \"Бори дигар кӯшиш карданд\",\n    timerMin: \"дақ\",\n    timerSec: \"сон\",\n    timerSpentAll: \"Шумо {0} дар ин саҳифа ва {1} дар умум сарф кардед.\",\n    timerSpentPage: \"Шумо {0} дар ин саҳифа сарф кардед.\",\n    timerSpentSurvey: \"Шумо {0} дар ин тест сарф намудед.\",\n    timerLimitAll: \"Шумо {0} аз {1} дар ин саҳифа ва {2} аз {3} дар умум сарф кардед дар дохили ин тест.\",\n    timerLimitPage: \"Шумо {0} аз {1} дар ин саҳифа сарф кардед.\",\n    timerLimitSurvey: \"Шумо {0} аз {1} дар ҳамаи тест сарф кардед.\",\n    clearCaption: \"Тоза кардан\",\n    // signaturePlaceHolder: \"Sign here\",\n    // chooseFileCaption: \"Choose file\",\n    removeFileCaption: \"Файлро нест кардан\",\n    // booleanCheckedLabel: \"Yes\",\n    // booleanUncheckedLabel: \"No\",\n    // confirmRemoveFile: \"Are you sure that you want to remove this file: {0}?\",\n    // confirmRemoveAllFiles: \"Are you sure that you want to remove all files?\",\n    // questionTitlePatternText: \"Question Title\",\n    // modalCancelButtonText: \"Cancel\",\n    // modalApplyButtonText: \"Apply\",\n    // filterStringPlaceholder: \"Type to search...\",\n    // emptyMessage: \"No data to display\",\n    // noEntriesText: \"There are no entries yet.\\nClick the button below to add a new entry.\",\n    // more: \"More\"\n};\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"tg\"] = tajikSurveyStrings;\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"tg\"] = \"тоҷикӣ\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/telugu.ts\":\n/*!************************************!*\\\n  !*** ./src/localization/telugu.ts ***!\n  \\************************************/\n/*! exports provided: teluguStrings */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_2143708__) {\n\n\"use strict\";\n__nested_webpack_require_2143708__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_2143708__.d(__nested_webpack_exports__, \"teluguStrings\", function() { return teluguStrings; });\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_2143708__(/*! survey-core */ \"./src/entries/core.ts\");\n\nvar teluguStrings = {\n    pagePrevText: \"వెనకటి\",\n    pageNextText: \"తరువాయ\",\n    completeText: \"పూర్తి చేయండి\",\n    previewText: \"ముందుగా వీక్షించు\",\n    editText: \"మార్పులు చెయ్యి\",\n    startSurveyText: \"ప్రారంభించు\",\n    otherItemText: \"ఇతరమైన(వివరించండి)\",\n    noneItemText: \"ఎవరు కాదు\",\n    selectAllItemText: \"అన్ని ఎంచుకో\",\n    progressText: \"పేజీ{0}/{1}\",\n    indexText: \"{1} {0}[మార్చు]\",\n    panelDynamicProgressText: \"దాఖలాలు{0}/{1}\",\n    panelDynamicTabTextFormat: \"Panel {panelIndex}\",\n    questionsProgressText: \"{0}/{1} ప్రశ్నలకు జవాబు ఇవ్వడం అయినది\",\n    emptySurvey: \"ఈ సర్వేలో పేజీలు గాని ప్రశ్నలు గాని కనబడుట లేదు\",\n    completingSurvey: \"సర్వేను ముగించి నందుకు ధన్యవాదములు\",\n    completingSurveyBefore: \" మీరు ఇప్పటికే సర్వేను ముగించినట్లు మా రికార్డులు చూపిస్తున్నాయి\",\n    loadingSurvey: \"సర్వే లోడ్ అవుతుంది\",\n    placeholder: \"ఎన్నుకోండి\",\n    ratingOptionsCaption: \"ఎంచు...\",\n    value: \"విలువ\",\n    requiredError: \"దయచేసి ప్రశ్నకు జవాబు ఇవ్వండి\",\n    requiredErrorInPanel: \"దయచేసి కనీసం ఒక్క ప్రశ్నకైనా జవాబు ఇవ్వండి\",\n    requiredInAllRowsError: \"దయచేసి అన్ని వరుసలలో ఉన్న ప్రశ్నలకు జవాబు ఇవ్వండి\",\n    numericError: \"విలువను సంఖ్యలలో తెలియజేయండి\",\n    minError: \"విలువ {0} కంటే తక్కువగా ఉండకూడదు.\",\n    maxError: \"విలువ {0} కంటే ఎక్కువ ఉండకూడదు.\",\n    textMinLength: \"దయచేసి కనీసం {0} అక్షరాలను నమోదు చేయండి\",\n    textMaxLength: \"దయచేసి {0} కన్నా తక్కువ అక్షరాలను నమోదు చేయండి\",\n    textMinMaxLength: \"దయచేసి {0} కన్నా ఎక్కువ మరియు{1} కన్నా తక్కువ అక్షరాలను నమోదు చేయండి\",\n    minRowCountError: \"దయచేసి కనీసం {0}వరుసలను పూరించండి\",\n    minSelectError: \"దయచేసి కనీసం{0} రకాలను ఎన్నుకోండి\",\n    maxSelectError: \"దయచేసి {0} కన్నా ఎక్కువ రకాలను ఎన్నుకో కండి\",\n    numericMinMax: \"'{0}' {1}తొ సమానంగా లేదా {1} కన్నా ఎక్కువ గా మరియు  {2}కన్నా తక్కువ ఉండాలి లెదా {2}తొ సమానంగా ఉండాలి\",\n    numericMin: \"''{0}' {1}తొ  సమానంగా లేదా  {1}కన్నా ఎక్కువగా ఉండాలి\",\n    numericMax: \"'{0}'  {1}  తక్కువ లేదా సమానంగా ఉండాలి\",\n    invalidEmail: \"దయచేసి సరైన ఈమెయిల్  నమోదు చేయండి\",\n    invalidExpression: \"{0} 'నిజం' అని తిరిగివ్వాలి\",\n    urlRequestError: \"విన్నపము {0} ని తప్పుగా గుర్తించింది {1}\",\n    urlGetChoicesError: \"విన్నపము ఖాళీ డేటాని తిరిగిచ్చింది, లేదా path తప్పైన ది\",\n    exceedMaxSize: \"ఫైల్ పరిమాణం{0} కంటే పెద్దదిగా ఉండకూడదు\",\n    otherRequiredError: \"దయచేసి ఇతర విలువలను నమో దించండి\",\n    uploadingFile: \"మీ ఫైల్ అప్లోడ్ అవుతున్నది దయచేసి కొన్ని సెకండ్లు వేచి ఉండండి మరియు మళ్లీ ప్రయత్నించండి\",\n    loadingFile: \"లోడ్ అవుతున్నది\",\n    chooseFile: \"ఫైళ్లను ఎన్నుకోండి\",\n    noFileChosen: \"ఏ ఫైల్ ఎన్నుకో లేదు\",\n    fileDragAreaPlaceholder: \"ఇక్కడ ఒక ఫైల్ ను డ్రాగ్ చేసి డ్రాప్ చేయండి లేదా దిగువ బటన్ క్లిక్ చేయండి మరియు అప్ లోడ్ చేయడానికి ఫైల్ ఎంచుకోండి.\",\n    confirmDelete: \"మీరు రికార్డులను తొలగించాలని అనుకుంటున్నారా\",\n    keyDuplicationError: \"విలువ ప్రత్యేకంగా ఉండాలి\",\n    addColumn: \"కాలం చేర్పించండి\",\n    addRow: \"వరుసలు చేర్పించండి\",\n    removeRow: \"తీసేయండి\",\n    emptyRowsText: \"వరుసలు లేవు.\",\n    addPanel: \"కొత్త దాన్ని చేర్పించండి\",\n    removePanel: \"తీసేయండి\",\n    choices_Item: \"వస్తువులు\",\n    matrix_column: \"కాలం \",\n    matrix_row: \"వరుస\",\n    multipletext_itemname: \"వచనం\",\n    savingData: \"ఫలితాంశాలు సర్వర్లో సేవ్ అవుతున్నాయి\",\n    savingDataError: \"ఒక లోపము సంభవించినది అందుకని ఫలితాంశాలను సేవ్ చేయలేకపోయాము  \",\n    savingDataSuccess: \"ఫలితాంశాలను విజయవంతంగా సేవ్ చేసాము\",\n    saveAgainButton: \"మళ్లీ ప్రయత్నించు\",\n    timerMin: \"నిమిషాలు \",\n    timerSec: \"సెకండ్లు\",\n    timerSpentAll: \"ఈ పేజీ పైన మీరు{0}  ఉపయోగించారు మొత్తంగా  {1} ఉపయోగించారు\",\n    timerSpentPage: \"ఈ పేజీ పైన మీరు{0} ఉపయోగించారు\",\n    timerSpentSurvey: \"మీరు మొత్తంగా {0}  ఉపయోగించారు\",\n    timerLimitAll: \"ఈ పేజీ పైన మీరు {1}లో {0} భాగాన్ని ఉపయోగించారు. మోతంగా {3}లో {2} భాగాన్ని ఉపయోగించారు.\",\n    timerLimitPage: \"ఈ పేజీలో మీరు {1}లోని{0} ని ఉపయోగించారు\",\n    timerLimitSurvey: \" మొత్తంగా మీరు {1} లో {0} ని ఉపయోగించారు \",\n    clearCaption: \"స్పష్టమ్\",\n    signaturePlaceHolder: \"ఇక్కడ సంతకం చేయండి\",\n    chooseFileCaption: \"ఫైల్ ఎంచుకోండి\",\n    takePhotoCaption: \"ఫోటో తీసుకోండి\",\n    cameraPlaceHolder: \"కెమెరాను ఉపయోగించి ఫోటో తీయడానికి దిగువ బటన్ మీద క్లిక్ చేయండి.\",\n    fileCameraDragAreaPlaceHolder: \"కెమెరాను ఉపయోగించి ఫోటోను అప్ లోడ్ చేయడానికి లేదా తీయడానికి ఫైల్ ను డ్రాగ్ మరియు డ్రాప్ చేయండి లేదా ఎంచుకోండి.\",\n    replaceFileCaption: \"ఫైలు మార్చండి\",\n    removeFileCaption: \"ఈ ఫైల్ తీసేయండి\",\n    booleanCheckedLabel: \"అవును\",\n    booleanUncheckedLabel: \"లేదు\",\n    confirmRemoveFile: \" ఈ ఫైల్ని తీయించాలని మీరు ఖచ్చితంగా అనుకుంటున్నారా:{0} ?\",\n    confirmRemoveAllFiles: \"అన్ని ఫైళ్లను తీసేయాలని మీరు ఖచ్చితంగా అనుకుంటున్నారా\",\n    questionTitlePatternText: \"ప్రశ్న శీర్షిక\",\n    modalCancelButtonText: \"రద్దు\",\n    modalApplyButtonText: \"సరిపడు\",\n    filterStringPlaceholder: \"శోధించడానికి టైప్ చేయండి...\",\n    emptyMessage: \"డిస్ ప్లే చేయడానికి డేటా లేదు\",\n    noEntriesText: \"ఇంకా ఎలాంటి ఎంట్రీలు లేవు.\\nకొత్త ఎంట్రీని జోడించడం కొరకు దిగువ బటన్ మీద క్లిక్ చేయండి.\",\n    noEntriesReadonlyText: \"ఎలాంటి ఎంట్రీలు లేవు.\",\n    more: \"ఎక్కువ\",\n    tagboxDoneButtonCaption: \"సరే\",\n    selectToRankEmptyRankedAreaText: \"అన్ని ఎంపికలు ర్యాంక్ చేయబడతాయి\",\n    selectToRankEmptyUnrankedAreaText: \"వాటిని ర్యాంక్ చేయడం కొరకు ఎంపికలను ఇక్కడ డ్రాగ్ మరియు డ్రాప్ చేయండి\"\n};\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"tel\"] = teluguStrings;\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"tel\"] = \"Telugu\";\n// The following strings have been translated by a machine translation service\n// Remove those strings that you have corrected manually\n// noneItemText: \"None\" => \"ఎవరు కాదు\"\n// indexText: \"{0} of {1}\" => \"{1} {0}[మార్చు]\"\n// panelDynamicTabTextFormat: \"Panel {panelIndex}\" => \"Panel {panelIndex}\"\n// ratingOptionsCaption: \"Select...\" => \"ఎంచు...\"\n// minError: \"The value should not be less than {0}\" => \"విలువ {0} కంటే తక్కువగా ఉండకూడదు.\"\n// maxError: \"The value should not be greater than {0}\" => \"విలువ {0} కంటే ఎక్కువ ఉండకూడదు.\"\n// fileDragAreaPlaceholder: \"Drag and drop a file here or click the button below and choose a file to upload.\" => \"ఇక్కడ ఒక ఫైల్ ను డ్రాగ్ చేసి డ్రాప్ చేయండి లేదా దిగువ బటన్ క్లిక్ చేయండి మరియు అప్ లోడ్ చేయడానికి ఫైల్ ఎంచుకోండి.\"\n// emptyRowsText: \"There are no rows.\" => \"వరుసలు లేవు.\"\n// multipletext_itemname: \"text\" => \"వచనం\"\n// signaturePlaceHolder: \"Sign here\" => \"ఇక్కడ సంతకం చేయండి\"\n// modalCancelButtonText: \"Cancel\" => \"రద్దు\"\n// modalApplyButtonText: \"Apply\" => \"సరిపడు\"\n// filterStringPlaceholder: \"Type to search...\" => \"శోధించడానికి టైప్ చేయండి...\"\n// emptyMessage: \"No data to display\" => \"డిస్ ప్లే చేయడానికి డేటా లేదు\"\n// noEntriesText: \"There are no entries yet.\\nClick the button below to add a new entry.\" => \"ఇంకా ఎలాంటి ఎంట్రీలు లేవు.\\nకొత్త ఎంట్రీని జోడించడం కొరకు దిగువ బటన్ మీద క్లిక్ చేయండి.\"\n// noEntriesReadonlyText: \"There are no entries.\" => \"ఎలాంటి ఎంట్రీలు లేవు.\"\n// more: \"More\" => \"ఎక్కువ\"\n// tagboxDoneButtonCaption: \"OK\" => \"సరే\"\n// selectToRankEmptyRankedAreaText: \"All choices are ranked\" => \"అన్ని ఎంపికలు ర్యాంక్ చేయబడతాయి\"\n// selectToRankEmptyUnrankedAreaText: \"Drag and drop choices here to rank them\" => \"వాటిని ర్యాంక్ చేయడం కొరకు ఎంపికలను ఇక్కడ డ్రాగ్ మరియు డ్రాప్ చేయండి\"// takePhotoCaption: \"Take Photo\" => \"ఫోటో తీసుకోండి\"\n// cameraPlaceHolder: \"Click the button below to take a photo using the camera.\" => \"కెమెరాను ఉపయోగించి ఫోటో తీయడానికి దిగువ బటన్ మీద క్లిక్ చేయండి.\"\n// fileCameraDragAreaPlaceHolder: \"Drag and drop or select a file to upload or take a photo using the camera.\" => \"కెమెరాను ఉపయోగించి ఫోటోను అప్ లోడ్ చేయడానికి లేదా తీయడానికి ఫైల్ ను డ్రాగ్ మరియు డ్రాప్ చేయండి లేదా ఎంచుకోండి.\"\n// replaceFileCaption: \"Replace file\" => \"ఫైలు మార్చండి\"\n\n\n/***/ }),\n\n/***/ \"./src/localization/thai.ts\":\n/*!**********************************!*\\\n  !*** ./src/localization/thai.ts ***!\n  \\**********************************/\n/*! exports provided: thaiStrings */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_2151933__) {\n\n\"use strict\";\n__nested_webpack_require_2151933__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_2151933__.d(__nested_webpack_exports__, \"thaiStrings\", function() { return thaiStrings; });\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_2151933__(/*! survey-core */ \"./src/entries/core.ts\");\n\nvar thaiStrings = {\n    pagePrevText: \"ก่อนหน้า\",\n    pageNextText: \"ถัดไป\",\n    completeText: \"สำเร็จ\",\n    previewText: \"ดูตัวอย่าง\",\n    editText: \"แก้ไข\",\n    startSurveyText: \"เริ่ม\",\n    otherItemText: \"อื่นๆ (โปรดระบุ)\",\n    noneItemText: \"ไม่มี\",\n    selectAllItemText: \"เลือกทั้งหมด\",\n    progressText: \"หน้าที่ {0} จาก {1}\",\n    indexText: \"{0} of {1}\",\n    panelDynamicProgressText: \"รายการที่ {0} จาก {1}\",\n    panelDynamicTabTextFormat: \"แผง {panelIndex}\",\n    questionsProgressText: \"คำตอบที่ {0}/{1} จำนวนคำถาม\",\n    emptySurvey: \"ไม่มีหน้าเพจที่มองเห็น หรือ คำถามใน survey นี้\",\n    completingSurvey: \"ขอบคุณที่ทำ survey จนเสร็จ\",\n    completingSurveyBefore: \"รายการของเราแสดงว่าคุณได้ทำ survey เสร็จเรียบร้อยแล้ว\",\n    loadingSurvey: \"กำลังโหลด Survey...\",\n    placeholder: \"เลือก...\",\n    ratingOptionsCaption: \"เลือก   \",\n    value: \"ข้อมูล\",\n    requiredError: \"กรุณาตอบคำถาม\",\n    requiredErrorInPanel: \"กรุณาตอบขั้นต่ำหนึ่งคำถาม\",\n    requiredInAllRowsError: \"กรุณาตอบคำถามในทุกๆแถว\",\n    numericError: \"ข้อมูลที่ใส่ต้องเป็นตัวเลข\",\n    minError: \"ค่าไม่ควรน้อยกว่า {0}\",\n    maxError: \"ค่าไม่ควรเกิน{0}\",\n    textMinLength: \"กรุณาใส่ขั้นต่ำจำนวน {0} ตัวอักษร\",\n    textMaxLength: \"กรุณาใส่ไม่เกินจำนวน {0} ตัวอักษร\",\n    textMinMaxLength: \"กรุณาใส่ขั้นต่ำจำนวน {0} และไม่เกินจำนวน {1} ตัวอักษร\",\n    minRowCountError: \"กรุณาใส่ขั้นต่ำจำนวน {0} แถว\",\n    minSelectError: \"กรุณาเลือกอย่างน้อย {0} รายการ\",\n    maxSelectError: \"กรุณาเลือกไม่เกิน {0} รายการ\",\n    numericMinMax: \"'{0}' ต้องมากกว่าหรือเท่ากับ {1} และน้อยกว่าหรือเท่ากับ {2}\",\n    numericMin: \"'{0}' ต้องมากกว่าหรือเท่ากับ {1}\",\n    numericMax: \"'{0}' น้อยกว่าหรือเท่ากับ {1}\",\n    invalidEmail: \"กรุณาใส่อีเมล์แอดเดรสที่ถูกต้อง\",\n    invalidExpression: \"The expression: {0} ต้องรีเทิร์น 'true'.\",\n    urlRequestError: \"รีเควสรีเทิร์น error '{0}'. {1}\",\n    urlGetChoicesError: \"รีเควสรีเทิร์นข้อมูลว่างเปล่า หรือ 'path' property ไม่ถูกต้อง\",\n    exceedMaxSize: \"ขนาดไฟล์ต้องไม่เกิน {0}.\",\n    otherRequiredError: \"กรุณาใส่ค่าอื่น\",\n    uploadingFile: \"ไฟล์ของคุณกำลังอัพโหลดอยู่. กรุณารอสักครู่แล้วทำการลองอีกครั้ง\",\n    loadingFile: \"กำลังโหลด...\",\n    chooseFile: \"เลือกไฟล์...\",\n    noFileChosen: \"ไม่ไฟล์ที่เลือก\",\n    fileDragAreaPlaceholder: \"ลากและวางไฟล์ที่นี่หรือคลิกปุ่มด้านล่างและเลือกไฟล์ที่จะอัปโหลด\",\n    confirmDelete: \"คุณต้องการลบรายการนี้จริงหรือไม่?\",\n    keyDuplicationError: \"ข้อมูลนี้ต้องเป็น unique.\",\n    addColumn: \"เพิ่มคอลัมน์\",\n    addRow: \"เพิ่มแถว\",\n    removeRow: \"ลบ\",\n    emptyRowsText: \"ไม่มีแถว\",\n    addPanel: \"เพิ่ม\",\n    removePanel: \"ลบ\",\n    choices_Item: \"ชิ้น\",\n    matrix_column: \"คอลัมน์\",\n    matrix_row: \"แถว\",\n    multipletext_itemname: \"ข้อความ\",\n    savingData: \"ผลลัพท์กำลังบันทึกลงที่เซิร์ฟเวอร์...\",\n    savingDataError: \"มีความผิดพลาดเกิดขึ้นส่งผลให้ไม่สามารถบันทึกผลได้\",\n    savingDataSuccess: \"บันทึกสำเร็จแล้ว\",\n    saveAgainButton: \"รบกวนลองอีกครั้ง\",\n    timerMin: \"นาที\",\n    timerSec: \"วินาที\",\n    timerSpentAll: \"คุณใช้เวลา {0} บนหน้านี้และ {1} รวมทั้งหมด\",\n    timerSpentPage: \"คุณใช้เวลา {0} บนหน้านี้\",\n    timerSpentSurvey: \"คุณใช้เวลา {0} รวมทั้งหมด\",\n    timerLimitAll: \"คุณใช้เวลา {0} ของ {1} บนหน้านี้และ {2} ของ {3} รวมทั้งหมด\",\n    timerLimitPage: \"คุณใช้เวลา {0} ของ {1} บนหน้านี้\",\n    timerLimitSurvey: \"คุณใช้เวลา {0} ของ {1} รวมทั้งหมด\",\n    clearCaption: \"เคลียร์\",\n    signaturePlaceHolder: \"ลงชื่อที่นี่\",\n    chooseFileCaption: \"เลือกไฟล์\",\n    takePhotoCaption: \"ถ่ายรูป\",\n    cameraPlaceHolder: \"คลิกปุ่มด้านล่างเพื่อถ่ายภาพโดยใช้กล้อง\",\n    fileCameraDragAreaPlaceHolder: \"ลากและวางหรือเลือกไฟล์ที่จะอัปโหลดหรือถ่ายภาพโดยใช้กล้อง\",\n    replaceFileCaption: \"แทนที่ไฟล์\",\n    removeFileCaption: \"นำไฟล์นี้ออก\",\n    booleanCheckedLabel: \"ใช่\",\n    booleanUncheckedLabel: \"ไม่ใช่\",\n    confirmRemoveFile: \"คุณแน่ใจที่จะนำไฟล์นี้ออกใช่หรือไม่: {0}?\",\n    confirmRemoveAllFiles: \"คุณแน่ใจที่จะนำไฟล์ทั้งหมดออกใช่หรือไม่\",\n    questionTitlePatternText: \"ชื่อคำถาม\",\n    modalCancelButtonText: \"ยกเลิก\",\n    modalApplyButtonText: \"ใช้\",\n    filterStringPlaceholder: \"พิมพ์เพื่อค้นหา...\",\n    emptyMessage: \"ไม่มีข้อมูลที่จะแสดง\",\n    noEntriesText: \"ยังไม่มีรายการ\\nคลิกปุ่มด้านล่างเพื่อเพิ่มรายการใหม่\",\n    noEntriesReadonlyText: \"ไม่มีรายการ\",\n    more: \"อีก\",\n    tagboxDoneButtonCaption: \"ตกลง, ได้\",\n    selectToRankEmptyRankedAreaText: \"ตัวเลือกทั้งหมดจะถูกจัดอันดับ\",\n    selectToRankEmptyUnrankedAreaText: \"ลากและวางตัวเลือกที่นี่เพื่อจัดอันดับ\"\n};\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"th\"] = thaiStrings;\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"th\"] = \"ไทย\";\n// The following strings have been translated by a machine translation service\n// Remove those strings that you have corrected manually\n// indexText: \"{0} of {1}\" => \"{0} of {1}\"\n// panelDynamicTabTextFormat: \"Panel {panelIndex}\" => \"แผง {panelIndex}\"\n// ratingOptionsCaption: \"Select...\" => \"เลือก   \"\n// minError: \"The value should not be less than {0}\" => \"ค่าไม่ควรน้อยกว่า {0}\"\n// maxError: \"The value should not be greater than {0}\" => \"ค่าไม่ควรเกิน{0}\"\n// fileDragAreaPlaceholder: \"Drag and drop a file here or click the button below and choose a file to upload.\" => \"ลากและวางไฟล์ที่นี่หรือคลิกปุ่มด้านล่างและเลือกไฟล์ที่จะอัปโหลด\"\n// emptyRowsText: \"There are no rows.\" => \"ไม่มีแถว\"\n// multipletext_itemname: \"text\" => \"ข้อความ\"\n// signaturePlaceHolder: \"Sign here\" => \"ลงชื่อที่นี่\"\n// modalCancelButtonText: \"Cancel\" => \"ยกเลิก\"\n// modalApplyButtonText: \"Apply\" => \"ใช้\"\n// filterStringPlaceholder: \"Type to search...\" => \"พิมพ์เพื่อค้นหา...\"\n// emptyMessage: \"No data to display\" => \"ไม่มีข้อมูลที่จะแสดง\"\n// noEntriesText: \"There are no entries yet.\\nClick the button below to add a new entry.\" => \"ยังไม่มีรายการ\\nคลิกปุ่มด้านล่างเพื่อเพิ่มรายการใหม่\"\n// noEntriesReadonlyText: \"There are no entries.\" => \"ไม่มีรายการ\"\n// more: \"More\" => \"อีก\"\n// tagboxDoneButtonCaption: \"OK\" => \"ตกลง, ได้\"\n// selectToRankEmptyRankedAreaText: \"All choices are ranked\" => \"ตัวเลือกทั้งหมดจะถูกจัดอันดับ\"\n// selectToRankEmptyUnrankedAreaText: \"Drag and drop choices here to rank them\" => \"ลากและวางตัวเลือกที่นี่เพื่อจัดอันดับ\"// takePhotoCaption: \"Take Photo\" => \"ถ่ายรูป\"\n// cameraPlaceHolder: \"Click the button below to take a photo using the camera.\" => \"คลิกปุ่มด้านล่างเพื่อถ่ายภาพโดยใช้กล้อง\"\n// fileCameraDragAreaPlaceHolder: \"Drag and drop or select a file to upload or take a photo using the camera.\" => \"ลากและวางหรือเลือกไฟล์ที่จะอัปโหลดหรือถ่ายภาพโดยใช้กล้อง\"\n// replaceFileCaption: \"Replace file\" => \"แทนที่ไฟล์\"\n\n\n/***/ }),\n\n/***/ \"./src/localization/traditional-chinese.ts\":\n/*!*************************************************!*\\\n  !*** ./src/localization/traditional-chinese.ts ***!\n  \\*************************************************/\n/*! exports provided: traditionalChineseSurveyStrings */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_2159133__) {\n\n\"use strict\";\n__nested_webpack_require_2159133__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_2159133__.d(__nested_webpack_exports__, \"traditionalChineseSurveyStrings\", function() { return traditionalChineseSurveyStrings; });\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_2159133__(/*! survey-core */ \"./src/entries/core.ts\");\n\nvar traditionalChineseSurveyStrings = {\n    pagePrevText: \"上一頁\",\n    pageNextText: \"下一頁\",\n    completeText: \"提交問卷\",\n    previewText: \"預覽\",\n    editText: \"編輯\",\n    startSurveyText: \"開始\",\n    otherItemText: \"填寫其他答案\",\n    noneItemText: \"沒有\",\n    selectAllItemText: \"全選\",\n    progressText: \"第 {0} 頁, 共 {1} 頁\",\n    indexText: \"{1}{0}\",\n    panelDynamicProgressText: \"{1}{0}\",\n    panelDynamicTabTextFormat: \"面板 {面板索引}\",\n    questionsProgressText: \"回答了{0}/{1}問題\",\n    emptySurvey: \"問卷中沒有問題或頁面\",\n    completingSurvey: \"感謝您的參與!\",\n    completingSurveyBefore: \"我們的記錄顯示您已經完成了此調查。\",\n    loadingSurvey: \"問卷載入中...\",\n    placeholder: \"請選擇...\",\n    ratingOptionsCaption: \"選擇。。。\",\n    value: \"價值\",\n    requiredError: \"請填寫此問題\",\n    requiredErrorInPanel: \"需要回答:至少回答一個問題。\",\n    requiredInAllRowsError: \"請填寫所有行中問題\",\n    numericError: \"答案必須是個數字\",\n    minError: \"該值不應小於 {0}\",\n    maxError: \"該值不應大於 {0}\",\n    textMinLength: \"答案長度至少 {0} 個字元\",\n    textMaxLength: \"答案長度不能超過 {0} 個字元\",\n    textMinMaxLength: \"答案長度必須在 {0} - {1} 個字元之間\",\n    minRowCountError: \"最少需要填寫 {0} 行答案\",\n    minSelectError: \"最少需要選擇 {0} 項答案\",\n    maxSelectError: \"最多只能選擇 {0} 項答案\",\n    numericMinMax: \"答案 '{0}' 必須大於等於 {1} 且小於等於 {2}\",\n    numericMin: \"答案 '{0}' 必須大於等於 {1}\",\n    numericMax: \"答案 '{0}' 必須小於等於 {1}\",\n    invalidEmail: \"請輸入有效的 Email 地址\",\n    invalidExpression: \"表達式:{0}應返回「true」。\",\n    urlRequestError: \"載入選項時發生錯誤 '{0}': {1}\",\n    urlGetChoicesError: \"未能載入有效的選項或請求參數路徑有誤\",\n    exceedMaxSize: \"文件大小不能超過 {0}\",\n    otherRequiredError: \"請完成其他問題\",\n    uploadingFile: \"文件上傳中... 請耐心等待幾秒後重試\",\n    loadingFile: \"裝載。。。\",\n    chooseFile: \"選擇檔案...\",\n    noFileChosen: \"未選擇任何檔\",\n    fileDragAreaPlaceholder: \"將檔案拖放到此處或按下下面的按鈕並選擇要上傳的檔。\",\n    confirmDelete: \"是否要刪除記錄?\",\n    keyDuplicationError: \"此值應該是唯一的。\",\n    addColumn: \"添加列\",\n    addRow: \"添加答案\",\n    removeRow: \"刪除答案\",\n    emptyRowsText: \"沒有行。\",\n    addPanel: \"新增\",\n    removePanel: \"刪除\",\n    choices_Item: \"選項\",\n    matrix_column: \"列\",\n    matrix_row: \"行\",\n    multipletext_itemname: \"發簡訊\",\n    savingData: \"正在將結果保存到服務器...\",\n    savingDataError: \"在保存結果過程中發生了錯誤,結果未能保存\",\n    savingDataSuccess: \"結果保存成功!\",\n    saveAgainButton: \"請重試\",\n    timerMin: \"最小\",\n    timerSec: \"秒\",\n    timerSpentAll: \"您在此頁面上花費了{0},總共{1}。\",\n    timerSpentPage: \"您在此頁面上花費了{0}。\",\n    timerSpentSurvey: \"你總共花了{0}。\",\n    timerLimitAll: \"您在此頁面上花費了{0}{1},總共花費了{2}{3}。\",\n    timerLimitPage: \"您在此頁面上花費了{0}{1}。\",\n    timerLimitSurvey: \"您總共花費了{1}的{0}。\",\n    clearCaption: \"清楚\",\n    signaturePlaceHolder: \"在此簽名\",\n    chooseFileCaption: \"選擇檔案\",\n    takePhotoCaption: \"拍照\",\n    cameraPlaceHolder: \"按下下面的按鈕使用相機拍照。\",\n    fileCameraDragAreaPlaceHolder: \"拖放或選擇要上傳的檔或使用相機拍攝照片。\",\n    replaceFileCaption: \"替換檔\",\n    removeFileCaption: \"刪除此檔\",\n    booleanCheckedLabel: \"是的\",\n    booleanUncheckedLabel: \"不\",\n    confirmRemoveFile: \"是否確實要刪除此檔:{0}?\",\n    confirmRemoveAllFiles: \"是否確實要刪除所有檔?\",\n    questionTitlePatternText: \"問題標題\",\n    modalCancelButtonText: \"取消\",\n    modalApplyButtonText: \"應用\",\n    filterStringPlaceholder: \"鍵入以搜尋...\",\n    emptyMessage: \"沒有要顯示的數據\",\n    noEntriesText: \"尚無條目。\\n按下下面的按鈕以添加新條目。\",\n    noEntriesReadonlyText: \"沒有條目。\",\n    more: \"更多\",\n    tagboxDoneButtonCaption: \"還行\",\n    selectToRankEmptyRankedAreaText: \"所有選擇均已排名\",\n    selectToRankEmptyUnrankedAreaText: \"將選項拖放到此處進行排名\"\n};\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"zh-tw\"] = traditionalChineseSurveyStrings;\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"zh-tw\"] = \"繁體中文\";\n// The following strings have been translated by a machine translation service\n// Remove those strings that you have corrected manually\n// previewText: \"Preview\" => \"預覽\"\n// editText: \"Edit\" => \"編輯\"\n// startSurveyText: \"Start\" => \"開始\"\n// noneItemText: \"None\" => \"沒有\"\n// selectAllItemText: \"Select All\" => \"全選\"\n// indexText: \"{0} of {1}\" => \"{1}{0}\"\n// panelDynamicProgressText: \"{0} of {1}\" => \"{1}{0}\"\n// panelDynamicTabTextFormat: \"Panel {panelIndex}\" => \"面板 {面板索引}\"\n// questionsProgressText: \"Answered {0}/{1} questions\" => \"回答了{0}/{1}問題\"\n// completingSurveyBefore: \"Our records show that you have already completed this survey.\" => \"我們的記錄顯示您已經完成了此調查。\"\n// ratingOptionsCaption: \"Select...\" => \"選擇。。。\"\n// value: \"value\" => \"價值\"\n// requiredErrorInPanel: \"Response required: answer at least one question.\" => \"需要回答:至少回答一個問題。\"\n// minError: \"The value should not be less than {0}\" => \"該值不應小於 {0}\"\n// maxError: \"The value should not be greater than {0}\" => \"該值不應大於 {0}\"\n// invalidExpression: \"The expression: {0} should return 'true'.\" => \"表達式:{0}應返回「true」。\"\n// loadingFile: \"Loading...\" => \"裝載。。。\"\n// chooseFile: \"Choose file(s)...\" => \"選擇檔案...\"\n// noFileChosen: \"No file chosen\" => \"未選擇任何檔\"\n// fileDragAreaPlaceholder: \"Drag and drop a file here or click the button below and choose a file to upload.\" => \"將檔案拖放到此處或按下下面的按鈕並選擇要上傳的檔。\"\n// confirmDelete: \"Do you want to delete the record?\" => \"是否要刪除記錄?\"\n// keyDuplicationError: \"This value should be unique.\" => \"此值應該是唯一的。\"\n// addColumn: \"Add Column\" => \"添加列\"\n// emptyRowsText: \"There are no rows.\" => \"沒有行。\"\n// addPanel: \"Add new\" => \"新增\"\n// removePanel: \"Remove\" => \"刪除\"\n// multipletext_itemname: \"text\" => \"發簡訊\"\n// timerMin: \"min\" => \"最小\"\n// timerSec: \"sec\" => \"秒\"\n// timerSpentAll: \"You have spent {0} on this page and {1} in total.\" => \"您在此頁面上花費了{0},總共{1}。\"\n// timerSpentPage: \"You have spent {0} on this page.\" => \"您在此頁面上花費了{0}。\"\n// timerSpentSurvey: \"You have spent {0} in total.\" => \"你總共花了{0}。\"\n// timerLimitAll: \"You have spent {0} of {1} on this page and {2} of {3} in total.\" => \"您在此頁面上花費了{0}{1},總共花費了{2}{3}。\"\n// timerLimitPage: \"You have spent {0} of {1} on this page.\" => \"您在此頁面上花費了{0}{1}。\"\n// timerLimitSurvey: \"You have spent {0} of {1} in total.\" => \"您總共花費了{1}的{0}。\"\n// clearCaption: \"Clear\" => \"清楚\"\n// signaturePlaceHolder: \"Sign here\" => \"在此簽名\"\n// chooseFileCaption: \"Choose file\" => \"選擇檔案\"\n// removeFileCaption: \"Remove this file\" => \"刪除此檔\"\n// booleanCheckedLabel: \"Yes\" => \"是的\"\n// booleanUncheckedLabel: \"No\" => \"不\"\n// confirmRemoveFile: \"Are you sure that you want to remove this file: {0}?\" => \"是否確實要刪除此檔:{0}?\"\n// confirmRemoveAllFiles: \"Are you sure that you want to remove all files?\" => \"是否確實要刪除所有檔?\"\n// questionTitlePatternText: \"Question Title\" => \"問題標題\"\n// modalCancelButtonText: \"Cancel\" => \"取消\"\n// modalApplyButtonText: \"Apply\" => \"應用\"\n// filterStringPlaceholder: \"Type to search...\" => \"鍵入以搜尋...\"\n// emptyMessage: \"No data to display\" => \"沒有要顯示的數據\"\n// noEntriesText: \"There are no entries yet.\\nClick the button below to add a new entry.\" => \"尚無條目。\\n按下下面的按鈕以添加新條目。\"\n// noEntriesReadonlyText: \"There are no entries.\" => \"沒有條目。\"\n// more: \"More\" => \"更多\"\n// tagboxDoneButtonCaption: \"OK\" => \"還行\"\n// selectToRankEmptyRankedAreaText: \"All choices are ranked\" => \"所有選擇均已排名\"\n// selectToRankEmptyUnrankedAreaText: \"Drag and drop choices here to rank them\" => \"將選項拖放到此處進行排名\"// takePhotoCaption: \"Take Photo\" => \"拍照\"\n// cameraPlaceHolder: \"Click the button below to take a photo using the camera.\" => \"按下下面的按鈕使用相機拍照。\"\n// fileCameraDragAreaPlaceHolder: \"Drag and drop or select a file to upload or take a photo using the camera.\" => \"拖放或選擇要上傳的檔或使用相機拍攝照片。\"\n// replaceFileCaption: \"Replace file\" => \"替換檔\"\n\n\n/***/ }),\n\n/***/ \"./src/localization/turkish.ts\":\n/*!*************************************!*\\\n  !*** ./src/localization/turkish.ts ***!\n  \\*************************************/\n/*! exports provided: turkishSurveyStrings */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_2166905__) {\n\n\"use strict\";\n__nested_webpack_require_2166905__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_2166905__.d(__nested_webpack_exports__, \"turkishSurveyStrings\", function() { return turkishSurveyStrings; });\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_2166905__(/*! survey-core */ \"./src/entries/core.ts\");\n\nvar turkishSurveyStrings = {\n    pagePrevText: \"Önceki\",\n    pageNextText: \"Sonraki\",\n    completeText: \"Tamamla\",\n    previewText: \"Önizleme\",\n    editText: \"Düzenle\",\n    startSurveyText: \"Başlat\",\n    otherItemText: \"Diğer (açıklayınız)\",\n    noneItemText: \"Hiçbiri\",\n    selectAllItemText: \"Tümünü Seç\",\n    progressText: \"Sayfa {0}/{1}\",\n    indexText: \"{0}/{1}\",\n    panelDynamicProgressText: \"{0}/{1}\",\n    panelDynamicTabTextFormat: \"Panel {panelIndex}\",\n    questionsProgressText: \"{0}/{1} soru yanıtlandı\",\n    emptySurvey: \"Ankette görüntülenecek sayfa ya da soru mevcut değil.\",\n    completingSurvey: \"Anketi tamamladığınız için teşekkür ederiz\",\n    completingSurveyBefore: \"Kayıtlarımız bu anketi zaten tamamladığınızı gösteriyor.\",\n    loadingSurvey: \"Anket Yükleniyor...\",\n    placeholder: \"Seçiniz...\",\n    ratingOptionsCaption: \"Seçiniz...\",\n    value: \"değer\",\n    requiredError: \"Lütfen soruya cevap verin.\",\n    requiredErrorInPanel: \"Lütfen en az bir soruyu yanıtlayın.\",\n    requiredInAllRowsError: \"Lütfen tüm satırlardaki soruları cevaplayın.\",\n    numericError: \"Değer sayısal olmalıdır.\",\n    minError: \"Değer {0}'den küçük olmamalıdır\",\n    maxError: \"Değer {0}'dan büyük olmamalıdır\",\n    textMinLength: \"Lütfen en az {0} karakter girin.\",\n    textMaxLength: \"Lütfen en fazla {0} karakter girin.\",\n    textMinMaxLength: \"Lütfen {0}’den fazla ve {1}’den az karakter girin.\",\n    minRowCountError: \"Lütfen en az {0} satırı doldurun.\",\n    minSelectError: \"Lütfen en az {0} seçeneği seçin.\",\n    maxSelectError: \"Lütfen en fazla {0} seçeneği seçin.\",\n    numericMinMax: \"'{0}', {1}'e eşit veya daha büyük ve {2}'ye eşit veya daha küçük olmalıdır\",\n    numericMin: \"'{0}' değeri {1} değerine eşit veya büyük olmalıdır\",\n    numericMax: \"'{0}' değeri {1} değerine eşit ya da küçük olmalıdır.\",\n    invalidEmail: \"Lütfen geçerli bir e-posta adresi girin.\",\n    invalidExpression: \"İfade: {0} 'true' döndürmelidir.\",\n    urlRequestError: \"İstek '{0}' hatasını döndürdü. {1}\",\n    urlGetChoicesError: \"İstek boş veri döndürdü veya 'path' özelliği yanlış\",\n    exceedMaxSize: \"Dosya boyutu {0} değerini geçemez.\",\n    otherRequiredError: \"Lütfen diğer değerleri girin.\",\n    uploadingFile: \"Dosyanız yükleniyor. Lütfen birkaç saniye bekleyin ve tekrar deneyin.\",\n    loadingFile: \"Yükleniyor...\",\n    chooseFile: \"Dosyaları seçin...\",\n    noFileChosen: \"Dosya seçili değil\",\n    fileDragAreaPlaceholder: \"Buraya bir dosya bırakın veya dosyayı yüklemek için aşağıdaki düğmeyi tıklayın.\",\n    confirmDelete: \"Kaydı silmek istiyor musunuz?\",\n    keyDuplicationError: \"Bu değer benzersiz olmalıdır.\",\n    addColumn: \"Sütun Ekle\",\n    addRow: \"Satır Ekle\",\n    removeRow: \"Kaldır\",\n    emptyRowsText: \"Satır yok.\",\n    addPanel: \"Yeni ekle\",\n    removePanel: \"Kaldır\",\n    choices_Item: \"öğe\",\n    matrix_column: \"Sütun\",\n    matrix_row: \"Satır\",\n    multipletext_itemname: \"metin\",\n    savingData: \"Sonuçlar sunucuya kaydediliyor...\",\n    savingDataError: \"Bir hata oluştu ve sonuçlar kaydedilemedi.\",\n    savingDataSuccess: \"Sonuçlar başarıyla kaydedildi!\",\n    saveAgainButton: \"Tekrar deneyin\",\n    timerMin: \"dakika\",\n    timerSec: \"saniye\",\n    timerSpentAll: \"Bu sayfada {0} ve toplamda {1} harcadınız.\",\n    timerSpentPage: \"Bu sayfaya {0} harcadınız.\",\n    timerSpentSurvey: \"Toplamda {0} harcadınız.\",\n    timerLimitAll: \"Bu sayfaya {0}/{1} ve toplamda {2}/{3} harcadınız.\",\n    timerLimitPage: \"Bu sayfaya {0}/{1} harcadınız.\",\n    timerLimitSurvey: \"Toplamda {0}/{1} harcadınız.\",\n    clearCaption: \"Temizle\",\n    signaturePlaceHolder: \"Burayı imzalayın\",\n    chooseFileCaption: \"Dosya seçin\",\n    takePhotoCaption: \"Fotoğraf Çekin\",\n    cameraPlaceHolder: \"Kamerayı kullanarak fotoğraf çekmek için aşağıdaki düğmeyi tıklayın.\",\n    fileCameraDragAreaPlaceHolder: \"Kamerayı kullanarak fotoğraf yüklemek veya fotoğraf çekmek için bir dosyayı sürükleyip bırakın veya seçin.\",\n    replaceFileCaption: \"Dosyayı değiştir\",\n    removeFileCaption: \"Bu dosyayı kaldır\",\n    booleanCheckedLabel: \"Evet\",\n    booleanUncheckedLabel: \"Hayır\",\n    confirmRemoveFile: \"Bu dosyayı kaldırmak istediğinizden emin misiniz: {0}?\",\n    confirmRemoveAllFiles: \"Tüm dosyaları kaldırmak istediğinizden emin misiniz?\",\n    questionTitlePatternText: \"Soru Başlığı\",\n    modalCancelButtonText: \"İptal\",\n    modalApplyButtonText: \"Uygula\",\n    filterStringPlaceholder: \"Aramak için yazın...\",\n    emptyMessage: \"Görüntülenecek veri yok\",\n    noEntriesText: \"Henüz giriş yok.\\nYeni bir giriş eklemek için aşağıdaki düğmeyi tıklayın.\",\n    noEntriesReadonlyText: \"Giriş yok.\",\n    more: \"Daha fazla\",\n    tagboxDoneButtonCaption: \"TAMAM\",\n    selectToRankEmptyRankedAreaText: \"Tüm seçenekler sıralanmıştır\",\n    selectToRankEmptyUnrankedAreaText: \"Seçimleri sıralamak için buraya sürükleyip bırakın\"\n};\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"tr\"] = turkishSurveyStrings;\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"tr\"] = \"türkçe\";\n// The following strings have been translated by a machine translation service\n// Remove those strings that you have corrected manually\n// takePhotoCaption: \"Take Photo\" => \"Fotoğraf Çekin\"\n// cameraPlaceHolder: \"Click the button below to take a photo using the camera.\" => \"Kamerayı kullanarak fotoğraf çekmek için aşağıdaki düğmeyi tıklayın.\"\n// fileCameraDragAreaPlaceHolder: \"Drag and drop or select a file to upload or take a photo using the camera.\" => \"Kamerayı kullanarak fotoğraf yüklemek veya fotoğraf çekmek için bir dosyayı sürükleyip bırakın veya seçin.\"\n// replaceFileCaption: \"Replace file\" => \"Dosyayı değiştir\"\n\n\n/***/ }),\n\n/***/ \"./src/localization/ukrainian.ts\":\n/*!***************************************!*\\\n  !*** ./src/localization/ukrainian.ts ***!\n  \\***************************************/\n/*! exports provided: ukrainianSurveyStrings */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_2173169__) {\n\n\"use strict\";\n__nested_webpack_require_2173169__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_2173169__.d(__nested_webpack_exports__, \"ukrainianSurveyStrings\", function() { return ukrainianSurveyStrings; });\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_2173169__(/*! survey-core */ \"./src/entries/core.ts\");\n\nvar ukrainianSurveyStrings = {\n    pagePrevText: \"Назад\",\n    pageNextText: \"Далі\",\n    completeText: \"Завершити\",\n    previewText: \"Попередній перегляд\",\n    editText: \"Редагувати\",\n    startSurveyText: \"Почати\",\n    otherItemText: \"Інше (будь ласка, опишіть)\",\n    noneItemText: \"Жоден\",\n    selectAllItemText: \"Вибрати все\",\n    progressText: \"Сторінка {0} з {1}\",\n    indexText: \"{0} {1}\",\n    panelDynamicProgressText: \"Запис {0} із {1}\",\n    panelDynamicTabTextFormat: \"Панель {panelIndex}\",\n    questionsProgressText: \"Відповіли на {0}/{1} питань\",\n    emptySurvey: \"Немає жодного питання.\",\n    completingSurvey: \"Дякуємо Вам за заповнення анкети!\",\n    completingSurveyBefore: \"Ви вже проходили це опитування.\",\n    loadingSurvey: \"Завантаження опитування...\",\n    placeholder: \"Вибрати...\",\n    ratingOptionsCaption: \"Виберіть...\",\n    value: \"значення\",\n    requiredError: \"Будь ласка, дайте відповідь.\",\n    requiredErrorInPanel: \"Будь ласка, дайте відповідь хоча б на одне питання.\",\n    requiredInAllRowsError: \"Будь ласка, дайте відповідь на питання в кожному рядку.\",\n    numericError: \"Відповідь повинна бути числом.\",\n    minError: \"Значення не повинно бути менше {0}\",\n    maxError: \"Значення не повинно бути більше {0}\",\n    textMinLength: \"Будь ласка введіть більше {0} символів.\",\n    textMaxLength: \"Будь ласка введіть менше {0} символів.\",\n    textMinMaxLength: \"Будь ласка введіть більше {0} и менше {1} символів.\",\n    minRowCountError: \"Будь ласка, заповніть не менше {0} рядків.\",\n    minSelectError: \"Будь ласка, виберіть хоча б {0} варіантів.\",\n    maxSelectError: \"Будь ласка, виберіть не більше {0} варіантів.\",\n    numericMinMax: \"'{0}' повинно бути не менше ніж {1}, і не більше ніж {2}\",\n    numericMin: \"'{0}' повинно бути не менше ніж {1}\",\n    numericMax: \"'{0}' повинно бути не більше ніж {1}\",\n    invalidEmail: \"Будь ласка, введіть дійсну адресу електронної пошти.\",\n    invalidExpression: \"Вираз {0} повинен повертати 'true'.\",\n    urlRequestError: \"Запит повернув помилку '{0}'. {1}\",\n    urlGetChoicesError: \"Відповідь на запит повернулась порожньою або властивіть 'path' вказано невірно\",\n    exceedMaxSize: \"Розмір файлу не повинен перевищувати {0}.\",\n    otherRequiredError: \"Будь ласка, введіть дані в поле 'Інше'\",\n    uploadingFile: \"Ваш файл завантажується. Зачекайте декілька секунд і спробуйте знову.\",\n    loadingFile: \"Завантаження...\",\n    chooseFile: \"Виберіть файл(и)...\",\n    noFileChosen: \"Файл не вибрано\",\n    fileDragAreaPlaceholder: \"Перетягніть файл сюди або натисніть кнопку нижче та виберіть файл для завантаження.\",\n    confirmDelete: \"Ви хочете видалити запис?\",\n    keyDuplicationError: \"Це значення повинно бути унікальним.\",\n    addColumn: \"Додати колонку\",\n    addRow: \"Додати рядок\",\n    removeRow: \"Видалити\",\n    emptyRowsText: \"Рядів немає.\",\n    addPanel: \"Додати нову\",\n    removePanel: \"Видалити\",\n    choices_Item: \"Варіант\",\n    matrix_column: \"Колонка\",\n    matrix_row: \"Рядок\",\n    multipletext_itemname: \"Текст\",\n    savingData: \"Результати зберігаються на сервер...\",\n    savingDataError: \"Відбулася помилка, результат не був збережений.\",\n    savingDataSuccess: \"Резвультат успішно збережений!\",\n    saveAgainButton: \"Спробувати знову\",\n    timerMin: \"хв\",\n    timerSec: \"сек\",\n    timerSpentAll: \"Ви витратили {0} на цій сторінці і {1} загалом.\",\n    timerSpentPage: \"Ви витратили {0} на цій сторінці.\",\n    timerSpentSurvey: \"Ви витратили {0} протягом тесту.\",\n    timerLimitAll: \"Ви витратили {0} з {1} на цій сторінці і {2} з {3} для всього тесту.\",\n    timerLimitPage: \"Ви витратили {0} з {1} на цій сторінці.\",\n    timerLimitSurvey: \"Ви витратили {0} з {1} для всього тесту.\",\n    clearCaption: \"Очистити\",\n    signaturePlaceHolder: \"Підпишіться тут\",\n    chooseFileCaption: \"Виберіть файл\",\n    takePhotoCaption: \"Зробити фото\",\n    cameraPlaceHolder: \"Натисніть кнопку нижче, щоб зробити фото за допомогою камери.\",\n    fileCameraDragAreaPlaceHolder: \"Перетягніть або виберіть файл, щоб завантажити або зробити фотографію за допомогою камери.\",\n    replaceFileCaption: \"Замінити файл\",\n    removeFileCaption: \"Видалити файл\",\n    booleanCheckedLabel: \"Так\",\n    booleanUncheckedLabel: \"Ні\",\n    confirmRemoveFile: \"Ви впевнені, що хочете видалити цей файл: {0}?\",\n    confirmRemoveAllFiles: \"Ви впевнені, що хочете видалити всі файли?\",\n    questionTitlePatternText: \"Назва запитання\",\n    modalCancelButtonText: \"Скасувати\",\n    modalApplyButtonText: \"Застосовувати\",\n    filterStringPlaceholder: \"Введіть для пошуку...\",\n    emptyMessage: \"Немає даних для відображення\",\n    noEntriesText: \"Записів поки немає.\\nНатисніть кнопку нижче, щоб додати новий запис.\",\n    noEntriesReadonlyText: \"Записів немає.\",\n    more: \"Більше\",\n    tagboxDoneButtonCaption: \"ГАРАЗД\",\n    selectToRankEmptyRankedAreaText: \"Всі варіанти ранжуються\",\n    selectToRankEmptyUnrankedAreaText: \"Перетягніть варіанти тут, щоб оцінити їх\"\n};\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"ua\"] = ukrainianSurveyStrings;\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"ua\"] = \"українська\";\n// The following strings have been translated by a machine translation service\n// Remove those strings that you have corrected manually\n// indexText: \"{0} of {1}\" => \"{0} {1}\"\n// panelDynamicTabTextFormat: \"Panel {panelIndex}\" => \"Панель {panelIndex}\"\n// ratingOptionsCaption: \"Select...\" => \"Виберіть...\"\n// minError: \"The value should not be less than {0}\" => \"Значення не повинно бути менше {0}\"\n// maxError: \"The value should not be greater than {0}\" => \"Значення не повинно бути більше {0}\"\n// fileDragAreaPlaceholder: \"Drag and drop a file here or click the button below and choose a file to upload.\" => \"Перетягніть файл сюди або натисніть кнопку нижче та виберіть файл для завантаження.\"\n// emptyRowsText: \"There are no rows.\" => \"Рядів немає.\"\n// multipletext_itemname: \"text\" => \"Текст\"\n// signaturePlaceHolder: \"Sign here\" => \"Підпишіться тут\"\n// modalCancelButtonText: \"Cancel\" => \"Скасувати\"\n// modalApplyButtonText: \"Apply\" => \"Застосовувати\"\n// filterStringPlaceholder: \"Type to search...\" => \"Введіть для пошуку...\"\n// emptyMessage: \"No data to display\" => \"Немає даних для відображення\"\n// noEntriesText: \"There are no entries yet.\\nClick the button below to add a new entry.\" => \"Записів поки немає.\\nНатисніть кнопку нижче, щоб додати новий запис.\"\n// noEntriesReadonlyText: \"There are no entries.\" => \"Записів немає.\"\n// more: \"More\" => \"Більше\"\n// tagboxDoneButtonCaption: \"OK\" => \"ГАРАЗД\"\n// selectToRankEmptyRankedAreaText: \"All choices are ranked\" => \"Всі варіанти ранжуються\"\n// selectToRankEmptyUnrankedAreaText: \"Drag and drop choices here to rank them\" => \"Перетягніть варіанти тут, щоб оцінити їх\"// takePhotoCaption: \"Take Photo\" => \"Зробити фото\"\n// cameraPlaceHolder: \"Click the button below to take a photo using the camera.\" => \"Натисніть кнопку нижче, щоб зробити фото за допомогою камери.\"\n// fileCameraDragAreaPlaceHolder: \"Drag and drop or select a file to upload or take a photo using the camera.\" => \"Перетягніть або виберіть файл, щоб завантажити або зробити фотографію за допомогою камери.\"\n// replaceFileCaption: \"Replace file\" => \"Замінити файл\"\n\n\n/***/ }),\n\n/***/ \"./src/localization/vietnamese.ts\":\n/*!****************************************!*\\\n  !*** ./src/localization/vietnamese.ts ***!\n  \\****************************************/\n/*! exports provided: vietnameseSurveyStrings */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_2181021__) {\n\n\"use strict\";\n__nested_webpack_require_2181021__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_2181021__.d(__nested_webpack_exports__, \"vietnameseSurveyStrings\", function() { return vietnameseSurveyStrings; });\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_2181021__(/*! survey-core */ \"./src/entries/core.ts\");\n\nvar vietnameseSurveyStrings = {\n    pagePrevText: \"Trở về\",\n    pageNextText: \"Tiếp theo\",\n    completeText: \"Hoàn thành\",\n    previewText: \"Xem trước\",\n    editText: \"Chỉnh sửa\",\n    startSurveyText: \"Bắt đầu\",\n    otherItemText: \"Khác (mô tả)\",\n    noneItemText: \"Trống\",\n    selectAllItemText: \"Chọn tất cả\",\n    progressText: \"Trang {0} / {1}\",\n    indexText: \"{0} của {1}\",\n    panelDynamicProgressText: \"Dòng {0} / {1}\",\n    panelDynamicTabTextFormat: \"Bảng điều khiển {panelIndex}\",\n    questionsProgressText: \"Đã trả lời {0}/{1} câu hỏi\",\n    emptySurvey: \"Không có trang hoặc câu hỏi nào được hiển thị trong cuộc khảo sát này.\",\n    completingSurvey: \"Cảm ơn đã hoàn thành khảo sát!\",\n    completingSurveyBefore: \"Hồ sơ chúng tôi cho thấy rằng bạn đã hoàn thành cuộc khảo sát này.\",\n    loadingSurvey: \"Đang tải khảo sát...\",\n    placeholder: \"Chọn...\",\n    ratingOptionsCaption: \"Lựa...\",\n    value: \"Giá trị\",\n    requiredError: \"Vui lòng trả lời câu hỏi.\",\n    requiredErrorInPanel: \"Vui lòng trả lời ít nhất một câu hỏi.\",\n    requiredInAllRowsError: \"Vui lòng trả lời các câu hỏi trên tất cả các dòng.\",\n    numericError: \"Giá trị nên là kiểu số.\",\n    minError: \"Giá trị không được nhỏ hơn {0}\",\n    maxError: \"Giá trị không được lớn hơn {0}\",\n    textMinLength: \"Vui lòng nhập ít nhất {0} kí tự.\",\n    textMaxLength: \"Vui lòng nhập ít hơn {0} kí tự.\",\n    textMinMaxLength: \"Vui lòng nhập nhiều hơn {0} hoặc ít hơn {1} kí tự.\",\n    minRowCountError: \"Vui lòng nhập ít nhất {0} dòng.\",\n    minSelectError: \"Vui lòng chọn ít nhất {0} loại.\",\n    maxSelectError: \"Vui lòng không chọn nhiều hơn {0} loại.\",\n    numericMinMax: \"Giá trị '{0}' nên bằng hoặc lớn hơn {1} và bằng hoặc nhỏ hơn {2}\",\n    numericMin: \"Giá trị '{0}' nên bằng hoặc lớn hơn {1}\",\n    numericMax: \"Giá trị '{0}' nên bằng hoặc nhỏ hơn {1}\",\n    invalidEmail: \"Vui lòng điền địa chỉ email hợp lệ.\",\n    invalidExpression: \"Biểu thức: {0} nên trả về 'true'.\",\n    urlRequestError: \"Yêu cầu trả về lỗi '{0}'. {1}\",\n    urlGetChoicesError: \"Yêu cầu trả về dữ liệu trống hoặc thuộc tính 'path' không đúng\",\n    exceedMaxSize: \"Kích thước tập tin không nên vượt quá {0}.\",\n    otherRequiredError: \"Vui lòng điền giá trị khác.\",\n    uploadingFile: \"Tập tin đang được tải lên. Vui lòng chờ một lúc và thử lại.\",\n    loadingFile: \"Đang tải...\",\n    chooseFile: \"Chọn các tập tin...\",\n    noFileChosen: \"Không có tập tin nào được chọn\",\n    fileDragAreaPlaceholder: \"Kéo và thả tệp vào đây hoặc nhấp vào nút bên dưới và chọn tệp để tải lên.\",\n    confirmDelete: \"Bạn muốn xóa dòng này?\",\n    keyDuplicationError: \"Giá trị này không nên bị trùng lặp.\",\n    addColumn: \"Thêm cột\",\n    addRow: \"Thêm dòng\",\n    removeRow: \"Xóa\",\n    emptyRowsText: \"Không có hàng.\",\n    addPanel: \"Thêm mới\",\n    removePanel: \"Xóa\",\n    choices_Item: \"mục\",\n    matrix_column: \"Cột\",\n    matrix_row: \"Dòng\",\n    multipletext_itemname: \"Nhắn tin\",\n    savingData: \"Kết quả đang lưu lại trên hệ thống...\",\n    savingDataError: \"Có lỗi xảy ra và chúng ta không thể lưu kết quả.\",\n    savingDataSuccess: \"Kết quả đã được lưu thành công!\",\n    saveAgainButton: \"Thử lại\",\n    timerMin: \"phút\",\n    timerSec: \"giây\",\n    timerSpentAll: \"Bạn đã sử dụng {0} trên trang này và {1} trên toàn bộ.\",\n    timerSpentPage: \"Bạn đã sử dụng {0} trên trang.\",\n    timerSpentSurvey: \"Bạn đã sử dụng {0} trên toàn bộ.\",\n    timerLimitAll: \"Bạn đã sử dụng {0} / {1} trên trang này và {2} / {3} trên toàn bộ.\",\n    timerLimitPage: \"Bạn đã sử dụng {0} / {1} trên trang này.\",\n    timerLimitSurvey: \"Bạn đã sử dụng {0} / {1} trên toàn bộ.\",\n    clearCaption: \"Xóa\",\n    signaturePlaceHolder: \"Ký tên tại đây\",\n    chooseFileCaption: \"Chọn tập tin\",\n    takePhotoCaption: \"Chụp ảnh\",\n    cameraPlaceHolder: \"Nhấp vào nút bên dưới để chụp ảnh bằng máy ảnh.\",\n    fileCameraDragAreaPlaceHolder: \"Kéo và thả hoặc chọn tệp để tải lên hoặc chụp ảnh bằng máy ảnh.\",\n    replaceFileCaption: \"Thay thế tập tin\",\n    removeFileCaption: \"Xóa tập tin\",\n    booleanCheckedLabel: \"Có\",\n    booleanUncheckedLabel: \"Không\",\n    confirmRemoveFile: \"Bạn có chắc chắn muốn xóa tập tin này: {0}?\",\n    confirmRemoveAllFiles: \"Bạn có chắc chắn muốn xóa toàn bộ tập tin?\",\n    questionTitlePatternText: \"Tiêu đề câu hỏi\",\n    modalCancelButtonText: \"Hủy\",\n    modalApplyButtonText: \"Áp dụng\",\n    filterStringPlaceholder: \"Nhập để tìm kiếm...\",\n    emptyMessage: \"Không có dữ liệu để hiển thị\",\n    noEntriesText: \"Chưa có mục nào.\\nNhấp vào nút bên dưới để thêm mục nhập mới.\",\n    noEntriesReadonlyText: \"Không có mục.\",\n    more: \"Nhiều hơn\",\n    tagboxDoneButtonCaption: \"OK\",\n    selectToRankEmptyRankedAreaText: \"Tất cả các lựa chọn được xếp hạng\",\n    selectToRankEmptyUnrankedAreaText: \"Kéo và thả các lựa chọn vào đây để xếp hạng chúng\"\n};\n//Uncomment these two lines on creating a translation file. You should replace \"en\" and enStrings with your locale (\"fr\", \"de\" and so on) and your variable.\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"vi\"] = vietnameseSurveyStrings;\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"vi\"] = \"Việt Nam\";\n// The following strings have been translated by a machine translation service\n// Remove those strings that you have corrected manually\n// indexText: \"{0} of {1}\" => \"{0} của {1}\"\n// panelDynamicTabTextFormat: \"Panel {panelIndex}\" => \"Bảng điều khiển {panelIndex}\"\n// ratingOptionsCaption: \"Select...\" => \"Lựa...\"\n// minError: \"The value should not be less than {0}\" => \"Giá trị không được nhỏ hơn {0}\"\n// maxError: \"The value should not be greater than {0}\" => \"Giá trị không được lớn hơn {0}\"\n// fileDragAreaPlaceholder: \"Drag and drop a file here or click the button below and choose a file to upload.\" => \"Kéo và thả tệp vào đây hoặc nhấp vào nút bên dưới và chọn tệp để tải lên.\"\n// emptyRowsText: \"There are no rows.\" => \"Không có hàng.\"\n// multipletext_itemname: \"text\" => \"Nhắn tin\"\n// signaturePlaceHolder: \"Sign here\" => \"Ký tên tại đây\"\n// modalCancelButtonText: \"Cancel\" => \"Hủy\"\n// modalApplyButtonText: \"Apply\" => \"Áp dụng\"\n// filterStringPlaceholder: \"Type to search...\" => \"Nhập để tìm kiếm...\"\n// emptyMessage: \"No data to display\" => \"Không có dữ liệu để hiển thị\"\n// noEntriesText: \"There are no entries yet.\\nClick the button below to add a new entry.\" => \"Chưa có mục nào.\\nNhấp vào nút bên dưới để thêm mục nhập mới.\"\n// noEntriesReadonlyText: \"There are no entries.\" => \"Không có mục.\"\n// more: \"More\" => \"Nhiều hơn\"\n// tagboxDoneButtonCaption: \"OK\" => \"OK\"\n// selectToRankEmptyRankedAreaText: \"All choices are ranked\" => \"Tất cả các lựa chọn được xếp hạng\"\n// selectToRankEmptyUnrankedAreaText: \"Drag and drop choices here to rank them\" => \"Kéo và thả các lựa chọn vào đây để xếp hạng chúng\"// takePhotoCaption: \"Take Photo\" => \"Chụp ảnh\"\n// cameraPlaceHolder: \"Click the button below to take a photo using the camera.\" => \"Nhấp vào nút bên dưới để chụp ảnh bằng máy ảnh.\"\n// fileCameraDragAreaPlaceHolder: \"Drag and drop or select a file to upload or take a photo using the camera.\" => \"Kéo và thả hoặc chọn tệp để tải lên hoặc chụp ảnh bằng máy ảnh.\"\n// replaceFileCaption: \"Replace file\" => \"Thay thế tập tin\"\n\n\n/***/ }),\n\n/***/ \"./src/localization/welsh.ts\":\n/*!***********************************!*\\\n  !*** ./src/localization/welsh.ts ***!\n  \\***********************************/\n/*! exports provided: welshSurveyStrings */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_2188797__) {\n\n\"use strict\";\n__nested_webpack_require_2188797__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_2188797__.d(__nested_webpack_exports__, \"welshSurveyStrings\", function() { return welshSurveyStrings; });\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_2188797__(/*! survey-core */ \"./src/entries/core.ts\");\n\nvar welshSurveyStrings = {\n    pagePrevText: \"Blaenorol\",\n    pageNextText: \"Nesaf\",\n    completeText: \"Cwblhau\",\n    previewText: \"Rhagolwg\",\n    editText: \"Golygu\",\n    startSurveyText: \"Dechrau\",\n    otherItemText: \"Arall (disgrifiwch)\",\n    noneItemText: \"Dim\",\n    selectAllItemText: \"Dewis y Cyfan \",\n    progressText: \"Tudalen {0} o {1}\",\n    indexText: \"{0} o {1}\",\n    panelDynamicProgressText: \"Cofnod {0} o {1}\",\n    panelDynamicTabTextFormat: \"Panel {panelIndex}\",\n    questionsProgressText: \"Wedi ateb {0}/{1} cwestiwn\",\n    emptySurvey: \"Does dim modd gweld tudalen na chwestiwn yn yr arolwg.\",\n    completingSurvey: \"Diolch am lenwi’r holiadur!\",\n    completingSurveyBefore: \"Rydych chi wedi llenwi’r arolwg hwn yn barod yn ôl ein cofnodion.\",\n    loadingSurvey: \"Wrthi’n Llwytho’r Arolwg...\",\n    placeholder: \"Dewiswch...\",\n    ratingOptionsCaption: \"Dewis...\",\n    value: \"gwerth\",\n    requiredError: \"Atebwch y cwestiwn.\",\n    requiredErrorInPanel: \"Atebwch o leiaf un cwestiwn.\",\n    requiredInAllRowsError: \"Atebwch y cwestiynau ym mhob rhes.\",\n    numericError: \"Dylai’r gwerth fod yn rhif.\",\n    minError: \"Ni ddylai'r gwerth fod yn llai na {0}\",\n    maxError: \"Ni ddylai'r gwerth fod yn fwy na {0}\",\n    textMinLength: \"Rhowch o leiaf {0} nod.\",\n    textMaxLength: \"Rhowch lai na {0} nod.\",\n    textMinMaxLength: \"Rhowch o leiaf {0} nod ond dim mwy na {1}.\",\n    minRowCountError: \"Llenwch o leiaf {0} rhes.\",\n    minSelectError: \"Dewiswch o leiaf {0} amrywiolyn.\",\n    maxSelectError: \"Peidiwch â dewis mwy na {0} amrywiolyn.\",\n    numericMinMax: \"Dylai’r '{0}' fod yr un fath â {1} neu’n fwy, a’r fath â {2} neu’n llai\",\n    numericMin: \"Dylai’r '{0}' fod yr un fath â {1} neu’n fwy\",\n    numericMax: \"Dylai’r '{0}' fod yr un fath â {1} neu’n llai\",\n    invalidEmail: \"Rhowch gyfeiriad e-bost dilys.\",\n    invalidExpression: \"Dylai’r mynegiad {0} arwain at 'true'.\",\n    urlRequestError: \"Roedd y cais wedi arwain at y gwall '{0}'. {1}\",\n    urlGetChoicesError: \"Roedd y cais wedi arwain at ddata gwag neu mae priodwedd y ‘path’ yn anghywir \",\n    exceedMaxSize: \"Ddylai’r ffeil ddim bod yn fwy na {0}.\",\n    otherRequiredError: \"Rhowch y gwerth arall.\",\n    uploadingFile: \"Mae eich ffeil wrthi’n llwytho i fyny. Arhoswch ychydig o eiliadau a rhoi cynnig arall arni.\",\n    loadingFile: \"Wrthi’n llwytho...\",\n    chooseFile: \"Dewiswch ffeil(iau)...\",\n    noFileChosen: \"Heb ddewis ffeil \",\n    fileDragAreaPlaceholder: \"Llusgwch a gollwng ffeil yma neu cliciwch y botwm isod a dewiswch ffeil i'w lanlwytho.\",\n    confirmDelete: \"Ydych chi am ddileu’r cofnod?\",\n    keyDuplicationError: \"Dylai’r gwerth hwn fod yn unigryw.\",\n    addColumn: \"Ychwanegu colofn \",\n    addRow: \"Ychwanegu rhes\",\n    removeRow: \"Tynnu\",\n    emptyRowsText: \"Nid oes unrhyw ffraeau.\",\n    addPanel: \"Ychwanegu o’r newydd\",\n    removePanel: \"Tynnu\",\n    choices_Item: \"eitem\",\n    matrix_column: \"Colofn\",\n    matrix_row: \"Rhes\",\n    multipletext_itemname: \"Testun\",\n    savingData: \"Mae’r canlyniadau’n cael eu cadw ar y gweinydd...\",\n    savingDataError: \"Roedd gwall a doedd dim modd cadw’r canlyniadau.\",\n    savingDataSuccess: \"Wedi llwyddo i gadw’r canlyniadau!\",\n    saveAgainButton: \"Rhowch gynnig arall arni\",\n    timerMin: \"mun\",\n    timerSec: \"eil\",\n    timerSpentAll: \"Rydych chi wedi treulio {0} ar y dudalen hon a {1} gyda’i gilydd.\",\n    timerSpentPage: \"Rydych chi wedi treulio {0} ar y dudalen hon.\",\n    timerSpentSurvey: \"Rydych chi wedi treulio {0} gyda’i gilydd.\",\n    timerLimitAll: \"Rydych chi wedi treulio {0} o {1} ar y dudalen hon a {2} o {3} gyda’i gilydd.\",\n    timerLimitPage: \"Rydych chi wedi treulio {0} o {1} ar y dudalen hon.\",\n    timerLimitSurvey: \"Rydych chi wedi treulio {0} o {1} gyda’i gilydd.\",\n    clearCaption: \"Clirio\",\n    signaturePlaceHolder: \"Arwydd yma\",\n    chooseFileCaption: \"Dewiswch ffeil \",\n    takePhotoCaption: \"Tynnu Llun\",\n    cameraPlaceHolder: \"Cliciwch y botwm isod i dynnu llun gan ddefnyddio'r camera.\",\n    fileCameraDragAreaPlaceHolder: \"Llusgwch a gollwng neu dewiswch ffeil i lanlwytho neu dynnu llun gan ddefnyddio'r camera.\",\n    replaceFileCaption: \"Amnewid ffeil\",\n    removeFileCaption: \"Tynnu’r ffeil hon \",\n    booleanCheckedLabel: \"Iawn\",\n    booleanUncheckedLabel: \"Na\",\n    confirmRemoveFile: \"Ydych chi’n siŵr eich bod am dynnu’r ffeil hon: {0}?\",\n    confirmRemoveAllFiles: \"Ydych chi’n siŵr eich bod am dynnu pob ffeil?\",\n    questionTitlePatternText: \"Teitl y Cwestiwn \",\n    modalCancelButtonText: \"Canslo\",\n    modalApplyButtonText: \"Cynnig\",\n    filterStringPlaceholder: \"Teipiwch i chwilio...\",\n    emptyMessage: \"Dim data i'w arddangos\",\n    noEntriesText: \"Nid oes unrhyw gofnodion hyd yn hyn.\\nCliciwch y botwm isod i ychwanegu cofnod newydd.\",\n    noEntriesReadonlyText: \"Nid oes unrhyw gofnodion.\",\n    more: \"Rhagor\",\n    tagboxDoneButtonCaption: \"OCÊ\",\n    selectToRankEmptyRankedAreaText: \"Mae'r holl ddewisiadau yn cael eu rhestru\",\n    selectToRankEmptyUnrankedAreaText: \"Dewisiadau llusgo a gollwng yma i'w graddio\"\n};\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"cy\"] = welshSurveyStrings;\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"cy\"] = \"cymraeg\";\n// The following strings have been translated by a machine translation service\n// Remove those strings that you have corrected manually\n// indexText: \"{0} of {1}\" => \"{0} o {1}\"\n// panelDynamicTabTextFormat: \"Panel {panelIndex}\" => \"Panel {panelIndex}\"\n// ratingOptionsCaption: \"Select...\" => \"Dewis...\"\n// minError: \"The value should not be less than {0}\" => \"Ni ddylai'r gwerth fod yn llai na {0}\"\n// maxError: \"The value should not be greater than {0}\" => \"Ni ddylai'r gwerth fod yn fwy na {0}\"\n// fileDragAreaPlaceholder: \"Drag and drop a file here or click the button below and choose a file to upload.\" => \"Llusgwch a gollwng ffeil yma neu cliciwch y botwm isod a dewiswch ffeil i'w lanlwytho.\"\n// emptyRowsText: \"There are no rows.\" => \"Nid oes unrhyw ffraeau.\"\n// multipletext_itemname: \"text\" => \"Testun\"\n// signaturePlaceHolder: \"Sign here\" => \"Arwydd yma\"\n// modalCancelButtonText: \"Cancel\" => \"Canslo\"\n// modalApplyButtonText: \"Apply\" => \"Cynnig\"\n// filterStringPlaceholder: \"Type to search...\" => \"Teipiwch i chwilio...\"\n// emptyMessage: \"No data to display\" => \"Dim data i'w arddangos\"\n// noEntriesText: \"There are no entries yet.\\nClick the button below to add a new entry.\" => \"Nid oes unrhyw gofnodion hyd yn hyn.\\nCliciwch y botwm isod i ychwanegu cofnod newydd.\"\n// noEntriesReadonlyText: \"There are no entries.\" => \"Nid oes unrhyw gofnodion.\"\n// more: \"More\" => \"Rhagor\"\n// tagboxDoneButtonCaption: \"OK\" => \"OCÊ\"\n// selectToRankEmptyRankedAreaText: \"All choices are ranked\" => \"Mae'r holl ddewisiadau yn cael eu rhestru\"\n// selectToRankEmptyUnrankedAreaText: \"Drag and drop choices here to rank them\" => \"Dewisiadau llusgo a gollwng yma i'w graddio\"// takePhotoCaption: \"Take Photo\" => \"Tynnu Llun\"\n// cameraPlaceHolder: \"Click the button below to take a photo using the camera.\" => \"Cliciwch y botwm isod i dynnu llun gan ddefnyddio'r camera.\"\n// fileCameraDragAreaPlaceHolder: \"Drag and drop or select a file to upload or take a photo using the camera.\" => \"Llusgwch a gollwng neu dewiswch ffeil i lanlwytho neu dynnu llun gan ddefnyddio'r camera.\"\n// replaceFileCaption: \"Replace file\" => \"Amnewid ffeil\"\n\n\n/***/ }),\n\n/***/ \"./src/martixBase.ts\":\n/*!***************************!*\\\n  !*** ./src/martixBase.ts ***!\n  \\***************************/\n/*! exports provided: QuestionMatrixBaseModel */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_2196723__) {\n\n\"use strict\";\n__nested_webpack_require_2196723__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_2196723__.d(__nested_webpack_exports__, \"QuestionMatrixBaseModel\", function() { return QuestionMatrixBaseModel; });\n/* harmony import */ var _itemvalue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_2196723__(/*! ./itemvalue */ \"./src/itemvalue.ts\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_2196723__(/*! ./question */ \"./src/question.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_2196723__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _conditions__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_2196723__(/*! ./conditions */ \"./src/conditions.ts\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_2196723__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_2196723__(/*! ./utils/cssClassBuilder */ \"./src/utils/cssClassBuilder.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\n\n/**\n * A base class for all matrix question types.\n */\nvar QuestionMatrixBaseModel = /** @class */ (function (_super) {\n    __extends(QuestionMatrixBaseModel, _super);\n    function QuestionMatrixBaseModel(name) {\n        var _this = _super.call(this, name) || this;\n        _this.generatedVisibleRows = null;\n        _this.generatedTotalRow = null;\n        _this.filteredRows = null;\n        _this.filteredColumns = null;\n        _this.columns = _this.createColumnValues();\n        _this.rows = _this.createItemValues(\"rows\");\n        return _this;\n    }\n    QuestionMatrixBaseModel.prototype.createColumnValues = function () {\n        return this.createItemValues(\"columns\");\n    };\n    QuestionMatrixBaseModel.prototype.getType = function () {\n        return \"matrixbase\";\n    };\n    QuestionMatrixBaseModel.prototype.endLoadingFromJson = function () {\n        _super.prototype.endLoadingFromJson.call(this);\n        this.updateVisibilityBasedOnRows();\n    };\n    Object.defineProperty(QuestionMatrixBaseModel.prototype, \"isCompositeQuestion\", {\n        get: function () {\n            return true;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixBaseModel.prototype, \"showHeader\", {\n        /**\n         * Specifies whether to display the table header that contains column captions.\n         *\n         * Default value: `true`\n         */\n        get: function () {\n            return this.getPropertyValue(\"showHeader\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"showHeader\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixBaseModel.prototype, \"columns\", {\n        /**\n         * An array of matrix columns.\n         *\n         * This array can contain primitive values or objects with the `text` (display value) and `value` (value to be saved in survey results) properties.\n         *\n         * [View Demo](https://surveyjs.io/form-library/examples/single-selection-matrix-table-question/ (linkStyle))\n         */\n        get: function () {\n            return this.getPropertyValue(\"columns\");\n        },\n        set: function (newValue) {\n            this.setPropertyValue(\"columns\", newValue);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixBaseModel.prototype, \"visibleColumns\", {\n        get: function () {\n            return !!this.filteredColumns ? this.filteredColumns : this.columns;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixBaseModel.prototype, \"rows\", {\n        /**\n         * An array of matrix rows.\n         *\n         * This array can contain primitive values or objects with the `text` (display value) and `value` (value to be saved in survey results) properties.\n         *\n         * [View Demo](https://surveyjs.io/form-library/examples/single-selection-matrix-table-question/ (linkStyle))\n         */\n        get: function () {\n            return this.getPropertyValue(\"rows\");\n        },\n        set: function (newValue) {\n            var newRows = this.processRowsOnSet(newValue);\n            this.setPropertyValue(\"rows\", newRows);\n            this.filterItems();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionMatrixBaseModel.prototype.processRowsOnSet = function (newRows) {\n        return newRows;\n    };\n    QuestionMatrixBaseModel.prototype.getVisibleRows = function () {\n        return [];\n    };\n    Object.defineProperty(QuestionMatrixBaseModel.prototype, \"visibleRows\", {\n        /**\n         * Returns an array of visible matrix rows.\n         * @see rowsVisibleIf\n         */\n        get: function () {\n            return this.getVisibleRows();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixBaseModel.prototype, \"rowsVisibleIf\", {\n        /**\n         * A Boolean expression that is evaluated against each matrix row. If the expression evaluates to `false`, the row becomes hidden.\n         *\n         * A survey parses and runs all expressions on startup. If any values used in the expression change, the survey re-evaluates it.\n         *\n         * Use the `{item}` placeholder to reference the current row in the expression.\n         *\n         * Refer to the following help topic for more information: [Conditional Visibility](https://surveyjs.io/form-library/documentation/design-survey-conditional-logic#conditional-visibility).\n         * @see visibleRows\n         * @see columnsVisibleIf\n         */\n        get: function () {\n            return this.getPropertyValue(\"rowsVisibleIf\", \"\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"rowsVisibleIf\", val);\n            this.filterItems();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixBaseModel.prototype, \"columnsVisibleIf\", {\n        /**\n         * A Boolean expression that is evaluated against each matrix column. If the expression evaluates to `false`, the column becomes hidden.\n         *\n         * A survey parses and runs all expressions on startup. If any values used in the expression change, the survey re-evaluates it.\n         *\n         * Use the `{item}` placeholder to reference the current column in the expression.\n         *\n         * Refer to the following help topic for more information: [Conditional Visibility](https://surveyjs.io/form-library/documentation/design-survey-conditional-logic#conditional-visibility).\n         * @see rowsVisibleIf\n         */\n        get: function () {\n            return this.getPropertyValue(\"columnsVisibleIf\", \"\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"columnsVisibleIf\", val);\n            this.filterItems();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionMatrixBaseModel.prototype.runCondition = function (values, properties) {\n        _super.prototype.runCondition.call(this, values, properties);\n        this.runItemsCondition(values, properties);\n    };\n    QuestionMatrixBaseModel.prototype.filterItems = function () {\n        if (this.areInvisibleElementsShowing) {\n            this.onRowsChanged();\n            return false;\n        }\n        if (this.isLoadingFromJson || !this.data)\n            return false;\n        return this.runItemsCondition(this.getDataFilteredValues(), this.getDataFilteredProperties());\n    };\n    QuestionMatrixBaseModel.prototype.onColumnsChanged = function () { };\n    QuestionMatrixBaseModel.prototype.onRowsChanged = function () {\n        this.updateVisibilityBasedOnRows();\n        this.fireCallback(this.visibleRowsChangedCallback);\n    };\n    QuestionMatrixBaseModel.prototype.updateVisibilityBasedOnRows = function () {\n        if (this.hideIfRowsEmpty) {\n            this.visible =\n                this.rows.length > 0 &&\n                    (!this.filteredRows || this.filteredRows.length > 0);\n        }\n    };\n    QuestionMatrixBaseModel.prototype.shouldRunColumnExpression = function () {\n        return !this.survey || !this.survey.areInvisibleElementsShowing;\n    };\n    QuestionMatrixBaseModel.prototype.hasRowsAsItems = function () {\n        return true;\n    };\n    QuestionMatrixBaseModel.prototype.runItemsCondition = function (values, properties) {\n        var oldVisibleRows = null;\n        if (!!this.filteredRows && !_helpers__WEBPACK_IMPORTED_MODULE_4__[\"Helpers\"].isValueEmpty(this.defaultValue)) {\n            oldVisibleRows = [];\n            for (var i = 0; i < this.filteredRows.length; i++) {\n                oldVisibleRows.push(this.filteredRows[i]);\n            }\n        }\n        var hasChanges = this.hasRowsAsItems() && this.runConditionsForRows(values, properties);\n        var hasColumnsChanged = this.runConditionsForColumns(values, properties);\n        hasChanges = hasColumnsChanged || hasChanges;\n        if (hasChanges) {\n            if (this.isClearValueOnHidden && (!!this.filteredColumns || !!this.filteredRows)) {\n                this.clearIncorrectValues();\n            }\n            if (!!oldVisibleRows) {\n                this.restoreNewVisibleRowsValues(oldVisibleRows);\n            }\n            this.clearGeneratedRows();\n            if (hasColumnsChanged) {\n                this.onColumnsChanged();\n            }\n            this.onRowsChanged();\n        }\n        return hasChanges;\n    };\n    QuestionMatrixBaseModel.prototype.clearGeneratedRows = function () {\n        this.generatedVisibleRows = null;\n    };\n    QuestionMatrixBaseModel.prototype.runConditionsForRows = function (values, properties) {\n        var showInvisibile = !!this.survey && this.survey.areInvisibleElementsShowing;\n        var runner = !showInvisibile && !!this.rowsVisibleIf\n            ? new _conditions__WEBPACK_IMPORTED_MODULE_3__[\"ConditionRunner\"](this.rowsVisibleIf)\n            : null;\n        this.filteredRows = [];\n        var hasChanged = _itemvalue__WEBPACK_IMPORTED_MODULE_0__[\"ItemValue\"].runConditionsForItems(this.rows, this.filteredRows, runner, values, properties, !showInvisibile);\n        if (this.filteredRows.length === this.rows.length) {\n            this.filteredRows = null;\n        }\n        return hasChanged;\n    };\n    QuestionMatrixBaseModel.prototype.runConditionsForColumns = function (values, properties) {\n        var useColumnsExpression = !!this.survey && !this.survey.areInvisibleElementsShowing;\n        var runner = useColumnsExpression && !!this.columnsVisibleIf\n            ? new _conditions__WEBPACK_IMPORTED_MODULE_3__[\"ConditionRunner\"](this.columnsVisibleIf)\n            : null;\n        this.filteredColumns = [];\n        var hasChanged = _itemvalue__WEBPACK_IMPORTED_MODULE_0__[\"ItemValue\"].runConditionsForItems(this.columns, this.filteredColumns, runner, values, properties, this.shouldRunColumnExpression());\n        if (this.filteredColumns.length === this.columns.length) {\n            this.filteredColumns = null;\n        }\n        return hasChanged;\n    };\n    QuestionMatrixBaseModel.prototype.clearIncorrectValues = function () {\n        var val = this.value;\n        if (!val)\n            return;\n        var newVal = null;\n        var isChanged = false;\n        var rows = !!this.filteredRows ? this.filteredRows : this.rows;\n        var columns = !!this.filteredColumns ? this.filteredColumns : this.columns;\n        for (var key in val) {\n            if (_itemvalue__WEBPACK_IMPORTED_MODULE_0__[\"ItemValue\"].getItemByValue(rows, key) &&\n                _itemvalue__WEBPACK_IMPORTED_MODULE_0__[\"ItemValue\"].getItemByValue(columns, val[key])) {\n                if (newVal == null)\n                    newVal = {};\n                newVal[key] = val[key];\n            }\n            else {\n                isChanged = true;\n            }\n        }\n        if (isChanged) {\n            this.value = newVal;\n        }\n        _super.prototype.clearIncorrectValues.call(this);\n    };\n    QuestionMatrixBaseModel.prototype.clearInvisibleValuesInRows = function () {\n        if (this.isEmpty())\n            return;\n        var newData = this.getUnbindValue(this.value);\n        var rows = this.rows;\n        for (var i = 0; i < rows.length; i++) {\n            var key = rows[i].value;\n            if (!!newData[key] && !rows[i].isVisible) {\n                delete newData[key];\n            }\n        }\n        if (this.isTwoValueEquals(newData, this.value))\n            return;\n        this.value = newData;\n    };\n    QuestionMatrixBaseModel.prototype.restoreNewVisibleRowsValues = function (oldVisibleRows) {\n        var rows = !!this.filteredRows ? this.filteredRows : this.rows;\n        var val = this.defaultValue;\n        var newValue = this.getUnbindValue(this.value);\n        var isChanged = false;\n        for (var key in val) {\n            if (_itemvalue__WEBPACK_IMPORTED_MODULE_0__[\"ItemValue\"].getItemByValue(rows, key) &&\n                !_itemvalue__WEBPACK_IMPORTED_MODULE_0__[\"ItemValue\"].getItemByValue(oldVisibleRows, key)) {\n                if (newValue == null)\n                    newValue = {};\n                newValue[key] = val[key];\n                isChanged = true;\n            }\n        }\n        if (isChanged) {\n            this.value = newValue;\n        }\n    };\n    QuestionMatrixBaseModel.prototype.needResponsiveWidth = function () {\n        //TODO: make it mor intelligent\n        return true;\n    };\n    QuestionMatrixBaseModel.prototype.getTableCss = function () {\n        return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_5__[\"CssClassBuilder\"]()\n            .append(this.cssClasses.root)\n            .append(this.cssClasses.noHeader, !this.showHeader)\n            .append(this.cssClasses.rootAlternateRows, this.alternateRows)\n            .append(this.cssClasses.rootVerticalAlignTop, (this.verticalAlign === \"top\"))\n            .append(this.cssClasses.rootVerticalAlignMiddle, (this.verticalAlign === \"middle\")).toString();\n    };\n    Object.defineProperty(QuestionMatrixBaseModel.prototype, \"columnMinWidth\", {\n        /**\n         * Minimum column width in CSS values.\n         *\n         * @see width\n         */\n        get: function () {\n            return this.getPropertyValue(\"columnMinWidth\", \"\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"columnMinWidth\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixBaseModel.prototype, \"rowTitleWidth\", {\n        /**\n         * A width for the column that displays row titles (first column). Accepts CSS values.\n         */\n        get: function () {\n            return this.getPropertyValue(\"rowTitleWidth\", \"\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"rowTitleWidth\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"property\"])({ defaultValue: \"middle\" })\n    ], QuestionMatrixBaseModel.prototype, \"verticalAlign\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"property\"])()\n    ], QuestionMatrixBaseModel.prototype, \"alternateRows\", void 0);\n    return QuestionMatrixBaseModel;\n}(_question__WEBPACK_IMPORTED_MODULE_1__[\"Question\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"Serializer\"].addClass(\"matrixbase\", [\n    { name: \"showCommentArea:switch\", layout: \"row\", visible: true, category: \"general\" },\n    \"columnsVisibleIf:condition\",\n    \"rowsVisibleIf:condition\",\n    \"columnMinWidth\",\n    { name: \"showHeader:boolean\", default: true },\n    {\n        name: \"verticalAlign\",\n        choices: [\"top\", \"middle\"],\n        default: \"middle\",\n    },\n    { name: \"alternateRows:boolean\", default: false }\n], undefined, \"question\");\n\n\n/***/ }),\n\n/***/ \"./src/multiSelectListModel.ts\":\n/*!*************************************!*\\\n  !*** ./src/multiSelectListModel.ts ***!\n  \\*************************************/\n/*! exports provided: MultiSelectListModel */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_2214275__) {\n\n\"use strict\";\n__nested_webpack_require_2214275__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_2214275__.d(__nested_webpack_exports__, \"MultiSelectListModel\", function() { return MultiSelectListModel; });\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_2214275__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _list__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_2214275__(/*! ./list */ \"./src/list.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar MultiSelectListModel = /** @class */ (function (_super) {\n    __extends(MultiSelectListModel, _super);\n    function MultiSelectListModel(items, onSelectionChanged, allowSelection, selectedItems, onFilterStringChangedCallback, elementId) {\n        var _this = _super.call(this, items, onSelectionChanged, allowSelection, undefined, onFilterStringChangedCallback, elementId) || this;\n        _this.onItemClick = function (item) {\n            if (_this.isItemDisabled(item))\n                return;\n            _this.isExpanded = false;\n            if (_this.isItemSelected(item)) {\n                _this.selectedItems.splice(_this.selectedItems.indexOf(item), 1)[0];\n                !!_this.onSelectionChanged && (_this.onSelectionChanged(item, \"removed\"));\n            }\n            else {\n                _this.selectedItems.push(item);\n                !!_this.onSelectionChanged && (_this.onSelectionChanged(item, \"added\"));\n            }\n        };\n        _this.isItemDisabled = function (itemValue) {\n            return itemValue.enabled !== undefined && !itemValue.enabled;\n        };\n        _this.isItemSelected = function (itemValue) {\n            return !!_this.allowSelection && _this.selectedItems.filter(function (item) { return _this.areSameItems(item, itemValue); }).length > 0;\n        };\n        _this.setSelectedItems(selectedItems || []);\n        return _this;\n    }\n    MultiSelectListModel.prototype.updateItemState = function () {\n        var _this = this;\n        this.actions.forEach(function (action) {\n            var isSelected = _this.isItemSelected(action);\n            action.visible = _this.hideSelectedItems ? !isSelected : true;\n        });\n    };\n    MultiSelectListModel.prototype.updateState = function () {\n        var _this = this;\n        this.updateItemState();\n        this.isEmpty = this.renderedActions.filter(function (action) { return _this.isItemVisible(action); }).length === 0;\n    };\n    MultiSelectListModel.prototype.setSelectedItems = function (newItems) {\n        this.selectedItems = newItems;\n        this.updateState();\n    };\n    MultiSelectListModel.prototype.selectFocusedItem = function () {\n        _super.prototype.selectFocusedItem.call(this);\n        if (this.hideSelectedItems) {\n            this.focusNextVisibleItem();\n        }\n    };\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])()\n    ], MultiSelectListModel.prototype, \"hideSelectedItems\", void 0);\n    return MultiSelectListModel;\n}(_list__WEBPACK_IMPORTED_MODULE_1__[\"ListModel\"]));\n\n\n\n/***/ }),\n\n/***/ \"./src/notifier.ts\":\n/*!*************************!*\\\n  !*** ./src/notifier.ts ***!\n  \\*************************/\n/*! exports provided: Notifier */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_2218865__) {\n\n\"use strict\";\n__nested_webpack_require_2218865__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_2218865__.d(__nested_webpack_exports__, \"Notifier\", function() { return Notifier; });\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_2218865__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_2218865__(/*! ./settings */ \"./src/settings.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_2218865__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_2218865__(/*! ./utils/cssClassBuilder */ \"./src/utils/cssClassBuilder.ts\");\n/* harmony import */ var _actions_container__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_2218865__(/*! ./actions/container */ \"./src/actions/container.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\nvar Notifier = /** @class */ (function (_super) {\n    __extends(Notifier, _super);\n    function Notifier(cssClasses) {\n        var _this = _super.call(this) || this;\n        _this.cssClasses = cssClasses;\n        _this.timeout = _settings__WEBPACK_IMPORTED_MODULE_1__[\"settings\"].notifications.lifetime;\n        _this.timer = undefined;\n        _this.actionsVisibility = {};\n        _this.actionBar = new _actions_container__WEBPACK_IMPORTED_MODULE_4__[\"ActionContainer\"]();\n        _this.actionBar.updateCallback = function (isResetInitialized) {\n            _this.actionBar.actions.forEach(function (action) { return action.cssClasses = {}; });\n        };\n        _this.css = _this.cssClasses.root;\n        return _this;\n    }\n    Notifier.prototype.getCssClass = function (type) {\n        return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_3__[\"CssClassBuilder\"]()\n            .append(this.cssClasses.root)\n            .append(this.cssClasses.info, type !== \"error\" && type !== \"success\")\n            .append(this.cssClasses.error, type === \"error\")\n            .append(this.cssClasses.success, type === \"success\")\n            .append(this.cssClasses.shown, this.active)\n            .toString();\n    };\n    Notifier.prototype.updateActionsVisibility = function (type) {\n        var _this = this;\n        this.actionBar.actions.forEach(function (action) { return action.visible = (_this.actionsVisibility[action.id] === type); });\n    };\n    Notifier.prototype.notify = function (message, type, waitUserAction) {\n        var _this = this;\n        if (type === void 0) { type = \"info\"; }\n        if (waitUserAction === void 0) { waitUserAction = false; }\n        this.isDisplayed = true;\n        setTimeout(function () {\n            _this.updateActionsVisibility(type);\n            _this.message = message;\n            _this.active = true;\n            _this.css = _this.getCssClass(type);\n            if (!!_this.timer) {\n                clearTimeout(_this.timer);\n                _this.timer = undefined;\n            }\n            if (!waitUserAction) {\n                _this.timer = setTimeout(function () {\n                    _this.timer = undefined;\n                    _this.active = false;\n                    _this.css = _this.getCssClass(type);\n                }, _this.timeout);\n            }\n        }, 1);\n    };\n    Notifier.prototype.addAction = function (action, notificationType) {\n        action.visible = false;\n        action.innerCss = this.cssClasses.button;\n        var res = this.actionBar.addAction(action);\n        this.actionsVisibility[res.id] = notificationType;\n    };\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"property\"])({ defaultValue: false })\n    ], Notifier.prototype, \"active\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"property\"])({ defaultValue: false })\n    ], Notifier.prototype, \"isDisplayed\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"property\"])()\n    ], Notifier.prototype, \"message\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"property\"])()\n    ], Notifier.prototype, \"css\", void 0);\n    return Notifier;\n}(_base__WEBPACK_IMPORTED_MODULE_0__[\"Base\"]));\n\n\n\n/***/ }),\n\n/***/ \"./src/page.ts\":\n/*!*********************!*\\\n  !*** ./src/page.ts ***!\n  \\*********************/\n/*! exports provided: PageModel */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_2224575__) {\n\n\"use strict\";\n__nested_webpack_require_2224575__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_2224575__.d(__nested_webpack_exports__, \"PageModel\", function() { return PageModel; });\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_2224575__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _panel__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_2224575__(/*! ./panel */ \"./src/panel.ts\");\n/* harmony import */ var _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_2224575__(/*! ./utils/cssClassBuilder */ \"./src/utils/cssClassBuilder.ts\");\n/* harmony import */ var _drag_drop_page_helper_v1__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_2224575__(/*! ./drag-drop-page-helper-v1 */ \"./src/drag-drop-page-helper-v1.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n/**\n * The `PageModel` object describes a survey page and contains properties and methods that allow you to control the page and access its elements (panels and questions).\n *\n * [View Demo](https://surveyjs.io/form-library/examples/nps-question/ (linkStyle))\n */\nvar PageModel = /** @class */ (function (_super) {\n    __extends(PageModel, _super);\n    function PageModel(name) {\n        if (name === void 0) { name = \"\"; }\n        var _this = _super.call(this, name) || this;\n        _this.hasShownValue = false;\n        /**\n         * A time period that a respondent has spent on this page so far; measured in seconds. Applies only to [quiz surveys](https://surveyjs.io/form-library/documentation/design-survey-create-a-quiz).\n         * @see maxTimeToFinish\n         */\n        _this.timeSpent = 0;\n        _this.locTitle.onGetTextCallback = function (text) {\n            if (_this.canShowPageNumber() && text)\n                return _this.num + \". \" + text;\n            return text;\n        };\n        _this.createLocalizableString(\"navigationTitle\", _this, true);\n        _this.createLocalizableString(\"navigationDescription\", _this, true);\n        _this.dragDropPageHelper = new _drag_drop_page_helper_v1__WEBPACK_IMPORTED_MODULE_3__[\"DragDropPageHelperV1\"](_this);\n        return _this;\n    }\n    PageModel.prototype.getType = function () {\n        return \"page\";\n    };\n    PageModel.prototype.toString = function () {\n        return this.name;\n    };\n    Object.defineProperty(PageModel.prototype, \"isPage\", {\n        get: function () {\n            return true;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    PageModel.prototype.canShowPageNumber = function () {\n        return this.survey && this.survey.showPageNumbers;\n    };\n    PageModel.prototype.canShowTitle = function () {\n        return this.survey && this.survey.showPageTitles;\n    };\n    Object.defineProperty(PageModel.prototype, \"navigationTitle\", {\n        /**\n         * A caption displayed on a navigation button in the TOC or progress bar. Applies when [`showTOC`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#showTOC) is `true` or when [`showProgressBar`](https://surveyjs.io/form-library/documentation/surveymodel#showProgressBar) is `true` and [`progressBarType`](https://surveyjs.io/form-library/documentation/surveymodel#progressBarType) is `\"buttons\"`.\n         *\n         * If navigation titles are unspecified, the navigation buttons display page [titles](https://surveyjs.io/form-library/documentation/api-reference/page-model#title) or [names](https://surveyjs.io/form-library/documentation/pagemodel#name).\n         */\n        get: function () {\n            return this.getLocalizableStringText(\"navigationTitle\");\n        },\n        set: function (val) {\n            this.setLocalizableStringText(\"navigationTitle\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(PageModel.prototype, \"locNavigationTitle\", {\n        get: function () {\n            return this.getLocalizableString(\"navigationTitle\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(PageModel.prototype, \"navigationDescription\", {\n        get: function () {\n            return this.getLocalizableStringText(\"navigationDescription\");\n        },\n        set: function (val) {\n            this.setLocalizableStringText(\"navigationDescription\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(PageModel.prototype, \"locNavigationDescription\", {\n        get: function () {\n            return this.getLocalizableString(\"navigationDescription\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    PageModel.prototype.navigationLocStrChanged = function () {\n        this.locNavigationTitle.strChanged();\n        this.locNavigationDescription.strChanged();\n    };\n    Object.defineProperty(PageModel.prototype, \"renderedNavigationTitle\", {\n        get: function () {\n            return this.locNavigationTitle.renderedHtml || this.title || this.name;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(PageModel.prototype, \"passed\", {\n        get: function () {\n            return this.getPropertyValue(\"passed\", false);\n        },\n        set: function (val) {\n            this.setPropertyValue(\"passed\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    PageModel.prototype.removeFromParent = function () {\n        if (!!this.survey) {\n            this.removeSelfFromList(this.survey.pages);\n        }\n    };\n    PageModel.prototype.onFirstRendering = function () {\n        if (this.wasShown)\n            return;\n        _super.prototype.onFirstRendering.call(this);\n    };\n    Object.defineProperty(PageModel.prototype, \"visibleIndex\", {\n        /**\n         * The visible index of the page. It has values from 0 to visible page count - 1.\n         * @see SurveyModel.visiblePages\n         * @see SurveyModel.pages\n         */\n        get: function () {\n            return this.getPropertyValue(\"visibleIndex\", -1);\n        },\n        set: function (val) {\n            this.setPropertyValue(\"visibleIndex\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    PageModel.prototype.canRenderFirstRows = function () {\n        return !this.isDesignMode || this.visibleIndex == 0;\n    };\n    Object.defineProperty(PageModel.prototype, \"isStartPage\", {\n        /**\n         * Returns `true` if this page is a start page.\n         *\n         * Refer to the following help topic for more information on how to configure a start page: [Start Page](https://surveyjs.io/form-library/documentation/design-survey-create-a-multi-page-survey#start-page).\n         */\n        get: function () {\n            return this.survey && this.survey.isPageStarted(this);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(PageModel.prototype, \"isStarted\", {\n        get: function () { return this.isStartPage; },\n        enumerable: false,\n        configurable: true\n    });\n    PageModel.prototype.calcCssClasses = function (css) {\n        var classes = { page: {}, pageTitle: \"\", pageDescription: \"\", row: \"\", rowMultiple: \"\", pageRow: \"\", rowCompact: \"\" };\n        this.copyCssClasses(classes.page, css.page);\n        if (!!css.pageTitle) {\n            classes.pageTitle = css.pageTitle;\n        }\n        if (!!css.pageDescription) {\n            classes.pageDescription = css.pageDescription;\n        }\n        if (!!css.row) {\n            classes.row = css.row;\n        }\n        if (!!css.pageRow) {\n            classes.pageRow = css.pageRow;\n        }\n        if (!!css.rowMultiple) {\n            classes.rowMultiple = css.rowMultiple;\n        }\n        if (!!css.rowCompact) {\n            classes.rowCompact = css.rowCompact;\n        }\n        if (this.survey) {\n            this.survey.updatePageCssClasses(this, classes);\n        }\n        return classes;\n    };\n    Object.defineProperty(PageModel.prototype, \"cssTitle\", {\n        get: function () {\n            if (!this.cssClasses.page)\n                return \"\";\n            return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_2__[\"CssClassBuilder\"]()\n                .append(this.cssClasses.page.title)\n                .toString();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(PageModel.prototype, \"cssRoot\", {\n        get: function () {\n            if (!this.cssClasses.page || !this.survey)\n                return \"\";\n            return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_2__[\"CssClassBuilder\"]()\n                .append(this.cssClasses.page.root)\n                .append(this.cssClasses.page.emptyHeaderRoot, !this.survey.renderedHasHeader &&\n                !(this.survey.isShowProgressBarOnTop && !this.survey.isStaring))\n                .toString();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(PageModel.prototype, \"navigationButtonsVisibility\", {\n        /**\n         * Set this property to \"hide\" to make \"Prev\", \"Next\" and \"Complete\" buttons are invisible for this page. Set this property to \"show\" to make these buttons visible, even if survey showNavigationButtons property is false.\n         * @see SurveyMode.showNavigationButtons\n         */\n        get: function () {\n            return this.getPropertyValue(\"navigationButtonsVisibility\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"navigationButtonsVisibility\", val.toLowerCase());\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(PageModel.prototype, \"isActive\", {\n        /**\n         * Returns `true` if this is the current page.\n         * @see SurveyModel.currentPage\n         */\n        get: function () {\n            return !!this.survey && this.survey.currentPage === this;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(PageModel.prototype, \"wasShown\", {\n        /**\n         * Returns `true` if the respondent has already seen this page during the current session.\n         */\n        get: function () {\n            return this.hasShownValue;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(PageModel.prototype, \"hasShown\", {\n        get: function () {\n            return this.wasShown;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    PageModel.prototype.setWasShown = function (val) {\n        if (val == this.hasShownValue)\n            return;\n        this.hasShownValue = val;\n        if (this.isDesignMode || val !== true)\n            return;\n        var els = this.elements;\n        for (var i = 0; i < els.length; i++) {\n            if (els[i].isPanel) {\n                els[i].randomizeElements(this.areQuestionsRandomized);\n            }\n        }\n        this.randomizeElements(this.areQuestionsRandomized);\n    };\n    /**\n     * Scrolls this page to the top.\n     */\n    PageModel.prototype.scrollToTop = function () {\n        if (!!this.survey) {\n            this.survey.scrollElementToTop(this, null, this, this.id);\n        }\n    };\n    // public get timeSpent(): number {\n    //   return this.getPropertyValue(\"timeSpent\", 0);\n    // }\n    // public set timeSpent(val: number) {\n    //   this.setPropertyValue(\"timeSpent\", val);\n    // }\n    /**\n     * Returns a list of all panels on this page.\n     * @param visibleOnly A Boolean value that specifies whether to include only visible panels.\n     * @param includingDesignTime For internal use.\n     */\n    PageModel.prototype.getAllPanels = function (visibleOnly, includingDesignTime) {\n        if (visibleOnly === void 0) { visibleOnly = false; }\n        if (includingDesignTime === void 0) { includingDesignTime = false; }\n        var result = new Array();\n        this.addPanelsIntoList(result, visibleOnly, includingDesignTime);\n        return result;\n    };\n    PageModel.prototype.getPanels = function (visibleOnly, includingDesignTime) {\n        if (visibleOnly === void 0) { visibleOnly = false; }\n        if (includingDesignTime === void 0) { includingDesignTime = false; }\n        return this.getAllPanels(visibleOnly, includingDesignTime);\n    };\n    Object.defineProperty(PageModel.prototype, \"maxTimeToFinish\", {\n        /**\n         * A time period that a respondent has to complete this page; measured in seconds. Applies only to [quiz surveys](https://surveyjs.io/form-library/documentation/design-survey-create-a-quiz).\n         *\n         * A negative value or 0 sets an unlimited time period.\n         *\n         * Alternatively, you can use the `SurveyModel`'s [`maxTimeToFinishPage`](https://surveyjs.io/form-library/documentation/surveymodel#maxTimeToFinishPage) property to specify identical time periods for all survey pages.\n         * @see timeSpent\n         */\n        get: function () {\n            return this.getPropertyValue(\"maxTimeToFinish\", 0);\n        },\n        set: function (val) {\n            this.setPropertyValue(\"maxTimeToFinish\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    PageModel.prototype.onNumChanged = function (value) { };\n    PageModel.prototype.onVisibleChanged = function () {\n        if (this.isRandomizing)\n            return;\n        _super.prototype.onVisibleChanged.call(this);\n        if (this.survey != null) {\n            this.survey.pageVisibilityChanged(this, this.isVisible);\n        }\n    };\n    PageModel.prototype.getDragDropInfo = function () { return this.dragDropPageHelper.getDragDropInfo(); };\n    PageModel.prototype.dragDropStart = function (src, target, nestedPanelDepth) {\n        if (nestedPanelDepth === void 0) { nestedPanelDepth = -1; }\n        this.dragDropPageHelper.dragDropStart(src, target, nestedPanelDepth);\n    };\n    PageModel.prototype.dragDropMoveTo = function (destination, isBottom, isEdge) {\n        if (isBottom === void 0) { isBottom = false; }\n        if (isEdge === void 0) { isEdge = false; }\n        return this.dragDropPageHelper.dragDropMoveTo(destination, isBottom, isEdge);\n    };\n    PageModel.prototype.dragDropFinish = function (isCancel) {\n        if (isCancel === void 0) { isCancel = false; }\n        return this.dragDropPageHelper.dragDropFinish(isCancel);\n    };\n    PageModel.prototype.ensureRowsVisibility = function () {\n        _super.prototype.ensureRowsVisibility.call(this);\n        this.getPanels().forEach(function (panel) { return panel.ensureRowsVisibility(); });\n    };\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ defaultValue: -1, onSet: function (val, target) { return target.onNumChanged(val); } })\n    ], PageModel.prototype, \"num\", void 0);\n    return PageModel;\n}(_panel__WEBPACK_IMPORTED_MODULE_1__[\"PanelModelBase\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"page\", [\n    {\n        name: \"navigationButtonsVisibility\",\n        default: \"inherit\",\n        choices: [\"inherit\", \"show\", \"hide\"],\n    },\n    { name: \"maxTimeToFinish:number\", default: 0, minValue: 0 },\n    {\n        name: \"navigationTitle\",\n        visibleIf: function (obj) {\n            return !!obj.survey && (obj.survey.progressBarType === \"buttons\" || obj.survey.showTOC);\n        },\n        serializationProperty: \"locNavigationTitle\",\n    },\n    {\n        name: \"navigationDescription\",\n        visibleIf: function (obj) {\n            return !!obj.survey && obj.survey.progressBarType === \"buttons\";\n        },\n        serializationProperty: \"locNavigationDescription\",\n    },\n    { name: \"title:text\", serializationProperty: \"locTitle\" },\n    { name: \"description:text\", serializationProperty: \"locDescription\" },\n], function () {\n    return new PageModel();\n}, \"panelbase\");\n\n\n/***/ }),\n\n/***/ \"./src/panel.ts\":\n/*!**********************!*\\\n  !*** ./src/panel.ts ***!\n  \\**********************/\n/*! exports provided: QuestionRowModel, PanelModelBase, PanelModel */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_2241942__) {\n\n\"use strict\";\n__nested_webpack_require_2241942__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_2241942__.d(__nested_webpack_exports__, \"QuestionRowModel\", function() { return QuestionRowModel; });\n/* harmony export (binding) */ __nested_webpack_require_2241942__.d(__nested_webpack_exports__, \"PanelModelBase\", function() { return PanelModelBase; });\n/* harmony export (binding) */ __nested_webpack_require_2241942__.d(__nested_webpack_exports__, \"PanelModel\", function() { return PanelModel; });\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_2241942__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_2241942__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_2241942__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _survey_element__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_2241942__(/*! ./survey-element */ \"./src/survey-element.ts\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_2241942__(/*! ./question */ \"./src/question.ts\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_2241942__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\n/* harmony import */ var _error__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_2241942__(/*! ./error */ \"./src/error.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_2241942__(/*! ./settings */ \"./src/settings.ts\");\n/* harmony import */ var _utils_utils__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_2241942__(/*! ./utils/utils */ \"./src/utils/utils.ts\");\n/* harmony import */ var _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_9__ = __nested_webpack_require_2241942__(/*! ./utils/cssClassBuilder */ \"./src/utils/cssClassBuilder.ts\");\n/* harmony import */ var _drag_drop_panel_helper_v1__WEBPACK_IMPORTED_MODULE_10__ = __nested_webpack_require_2241942__(/*! ./drag-drop-panel-helper-v1 */ \"./src/drag-drop-panel-helper-v1.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\n\n\n\n\n\n\nvar QuestionRowModel = /** @class */ (function (_super) {\n    __extends(QuestionRowModel, _super);\n    function QuestionRowModel(panel) {\n        var _this = _super.call(this) || this;\n        _this.panel = panel;\n        _this._scrollableParent = undefined;\n        _this._updateVisibility = undefined;\n        _this.idValue = QuestionRowModel.getRowId();\n        _this.visible = panel.areInvisibleElementsShowing;\n        _this.createNewArray(\"elements\");\n        _this.createNewArray(\"visibleElements\");\n        return _this;\n    }\n    QuestionRowModel.getRowId = function () {\n        return \"pr_\" + QuestionRowModel.rowCounter++;\n    };\n    QuestionRowModel.prototype.startLazyRendering = function (rowContainerDiv, findScrollableContainer) {\n        var _this = this;\n        if (findScrollableContainer === void 0) { findScrollableContainer = _utils_utils__WEBPACK_IMPORTED_MODULE_8__[\"findScrollableParent\"]; }\n        this._scrollableParent = findScrollableContainer(rowContainerDiv);\n        // if  this._scrollableParent is html the scroll event isn't fired, so we should use window\n        if (this._scrollableParent === document.documentElement) {\n            this._scrollableParent = window;\n        }\n        var hasScroll = this._scrollableParent.scrollHeight > this._scrollableParent.clientHeight;\n        this.isNeedRender = !hasScroll;\n        if (hasScroll) {\n            this._updateVisibility = function () {\n                var isRowContainerDivVisible = Object(_utils_utils__WEBPACK_IMPORTED_MODULE_8__[\"isElementVisible\"])(rowContainerDiv, 50);\n                if (!_this.isNeedRender && isRowContainerDivVisible) {\n                    _this.isNeedRender = true;\n                    _this.stopLazyRendering();\n                }\n            };\n            setTimeout(function () {\n                if (!!_this._scrollableParent &&\n                    !!_this._scrollableParent.addEventListener) {\n                    _this._scrollableParent.addEventListener(\"scroll\", _this._updateVisibility);\n                }\n                _this.ensureVisibility();\n            }, 10);\n        }\n    };\n    QuestionRowModel.prototype.ensureVisibility = function () {\n        if (!!this._updateVisibility) {\n            this._updateVisibility();\n        }\n    };\n    QuestionRowModel.prototype.stopLazyRendering = function () {\n        if (!!this._scrollableParent &&\n            !!this._updateVisibility &&\n            !!this._scrollableParent.removeEventListener) {\n            this._scrollableParent.removeEventListener(\"scroll\", this._updateVisibility);\n        }\n        this._scrollableParent = undefined;\n        this._updateVisibility = undefined;\n    };\n    QuestionRowModel.prototype.setIsLazyRendering = function (val) {\n        this.isLazyRenderingValue = val;\n        this.isNeedRender = !val;\n    };\n    QuestionRowModel.prototype.isLazyRendering = function () {\n        return this.isLazyRenderingValue === true;\n    };\n    Object.defineProperty(QuestionRowModel.prototype, \"id\", {\n        get: function () {\n            return this.idValue;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionRowModel.prototype, \"elements\", {\n        get: function () {\n            return this.getPropertyValue(\"elements\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionRowModel.prototype, \"visibleElements\", {\n        get: function () {\n            return this.getPropertyValue(\"visibleElements\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionRowModel.prototype, \"visible\", {\n        get: function () {\n            return this.getPropertyValue(\"visible\", true);\n        },\n        set: function (val) {\n            this.setPropertyValue(\"visible\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionRowModel.prototype, \"isNeedRender\", {\n        get: function () {\n            return this.getPropertyValue(\"isneedrender\", true);\n        },\n        set: function (val) {\n            this.setPropertyValue(\"isneedrender\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionRowModel.prototype.updateVisible = function () {\n        var isVisible = this.calcVisible();\n        this.setWidth();\n        this.visible = isVisible;\n    };\n    QuestionRowModel.prototype.addElement = function (q) {\n        this.elements.push(q);\n        this.updateVisible();\n    };\n    Object.defineProperty(QuestionRowModel.prototype, \"index\", {\n        get: function () {\n            return this.panel.rows.indexOf(this);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionRowModel.prototype.setWidth = function () {\n        var _a;\n        var visCount = this.visibleElements.length;\n        if (visCount == 0)\n            return;\n        var isSingleInRow = this.visibleElements.length === 1;\n        var counter = 0;\n        var preSetWidthElements = [];\n        for (var i = 0; i < this.elements.length; i++) {\n            var el = this.elements[i];\n            if (el.isVisible) {\n                el.isSingleInRow = isSingleInRow;\n                var width = this.getElementWidth(el);\n                if (!!width) {\n                    el.renderWidth = this.getRenderedWidthFromWidth(width);\n                    preSetWidthElements.push(el);\n                }\n                if (counter < visCount - 1 && !(this.panel.isDefaultV2Theme || ((_a = this.panel.parentQuestion) === null || _a === void 0 ? void 0 : _a.isDefaultV2Theme))) {\n                    el.rightIndent = 1;\n                }\n                else {\n                    el.rightIndent = 0;\n                }\n                counter++;\n            }\n            else {\n                el.renderWidth = \"\";\n            }\n        }\n        for (var i = 0; i < this.elements.length; i++) {\n            var el = this.elements[i];\n            if (!el.isVisible || preSetWidthElements.indexOf(el) > -1)\n                continue;\n            if (preSetWidthElements.length == 0) {\n                el.renderWidth = Number.parseFloat((100 / visCount).toFixed(6)) + \"%\";\n            }\n            else {\n                el.renderWidth = this.getRenderedCalcWidth(el, preSetWidthElements, visCount);\n            }\n        }\n    };\n    QuestionRowModel.prototype.getRenderedCalcWidth = function (el, preSetWidthElements, visCount) {\n        var expression = \"100%\";\n        for (var i = 0; i < preSetWidthElements.length; i++) {\n            expression += \" - \" + preSetWidthElements[i].renderWidth;\n        }\n        var calcWidthEl = visCount - preSetWidthElements.length;\n        if (calcWidthEl > 1) {\n            expression = \"(\" + expression + \")/\" + calcWidthEl.toString();\n        }\n        return \"calc(\" + expression + \")\";\n    };\n    QuestionRowModel.prototype.getElementWidth = function (el) {\n        var width = el.width;\n        if (!width || typeof width !== \"string\")\n            return \"\";\n        return width.trim();\n    };\n    QuestionRowModel.prototype.getRenderedWidthFromWidth = function (width) {\n        return _helpers__WEBPACK_IMPORTED_MODULE_1__[\"Helpers\"].isNumber(width) ? width + \"px\" : width;\n    };\n    QuestionRowModel.prototype.calcVisible = function () {\n        var visElements = [];\n        for (var i = 0; i < this.elements.length; i++) {\n            if (this.elements[i].isVisible) {\n                visElements.push(this.elements[i]);\n            }\n        }\n        if (this.needToUpdateVisibleElements(visElements)) {\n            this.setPropertyValue(\"visibleElements\", visElements);\n        }\n        return visElements.length > 0;\n    };\n    QuestionRowModel.prototype.needToUpdateVisibleElements = function (visElements) {\n        if (visElements.length !== this.visibleElements.length)\n            return true;\n        for (var i = 0; i < visElements.length; i++) {\n            if (visElements[i] !== this.visibleElements[i])\n                return true;\n        }\n        return false;\n    };\n    QuestionRowModel.prototype.dispose = function () {\n        _super.prototype.dispose.call(this);\n        this.stopLazyRendering();\n    };\n    QuestionRowModel.prototype.getRowCss = function () {\n        return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_9__[\"CssClassBuilder\"]()\n            .append(this.panel.cssClasses.row)\n            .append(this.panel.cssClasses.rowCompact, this.panel[\"isCompact\"])\n            .append(this.panel.cssClasses.pageRow, this.panel.isPage || (!!this.panel.originalPage && !this.panel.survey.isShowingPreview))\n            .append(this.panel.cssClasses.rowMultiple, this.visibleElements.length > 1)\n            .toString();\n    };\n    QuestionRowModel.rowCounter = 100;\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ defaultValue: null })\n    ], QuestionRowModel.prototype, \"dragTypeOverMe\", void 0);\n    return QuestionRowModel;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"Base\"]));\n\n/**\n * A base class for the [PanelModel](https://surveyjs.io/form-library/documentation/panelmodel) and [PageModel](https://surveyjs.io/form-library/documentation/pagemodel) classes.\n */\nvar PanelModelBase = /** @class */ (function (_super) {\n    __extends(PanelModelBase, _super);\n    function PanelModelBase(name) {\n        if (name === void 0) { name = \"\"; }\n        var _this = _super.call(this, name) || this;\n        _this.isQuestionsReady = false;\n        _this.questionsValue = new Array();\n        _this.isRandomizing = false;\n        _this.createNewArray(\"rows\");\n        _this.elementsValue = _this.createNewArray(\"elements\", _this.onAddElement.bind(_this), _this.onRemoveElement.bind(_this));\n        _this.id = PanelModelBase.getPanelId();\n        _this.addExpressionProperty(\"visibleIf\", function (obj, res) { _this.visible = res === true; }, function (obj) { return !_this.areInvisibleElementsShowing; });\n        _this.addExpressionProperty(\"enableIf\", function (obj, res) { _this.readOnly = res === false; });\n        _this.addExpressionProperty(\"requiredIf\", function (obj, res) { _this.isRequired = res === true; });\n        _this.createLocalizableString(\"requiredErrorText\", _this);\n        _this.registerPropertyChangedHandlers([\"questionTitleLocation\"], function () {\n            _this.onVisibleChanged.bind(_this);\n            _this.updateElementCss(true);\n        });\n        _this.registerPropertyChangedHandlers([\"questionStartIndex\", \"showQuestionNumbers\"], function () {\n            _this.updateVisibleIndexes();\n        });\n        _this.dragDropPanelHelper = new _drag_drop_panel_helper_v1__WEBPACK_IMPORTED_MODULE_10__[\"DragDropPanelHelperV1\"](_this);\n        return _this;\n    }\n    PanelModelBase.getPanelId = function () {\n        return \"sp_\" + PanelModelBase.panelCounter++;\n    };\n    PanelModelBase.prototype.getType = function () {\n        return \"panelbase\";\n    };\n    PanelModelBase.prototype.setSurveyImpl = function (value, isLight) {\n        _super.prototype.setSurveyImpl.call(this, value, isLight);\n        if (this.isDesignMode)\n            this.onVisibleChanged();\n        for (var i = 0; i < this.elements.length; i++) {\n            this.elements[i].setSurveyImpl(value, isLight);\n        }\n    };\n    PanelModelBase.prototype.endLoadingFromJson = function () {\n        _super.prototype.endLoadingFromJson.call(this);\n        this.updateDescriptionVisibility(this.description);\n        this.markQuestionListDirty();\n        this.onRowsChanged();\n    };\n    Object.defineProperty(PanelModelBase.prototype, \"hasTitle\", {\n        get: function () {\n            return ((this.canShowTitle() && this.locTitle.textOrHtml.length > 0) ||\n                (this.showTitle && this.isDesignMode && _settings__WEBPACK_IMPORTED_MODULE_7__[\"settings\"].designMode.showEmptyTitles));\n        },\n        enumerable: false,\n        configurable: true\n    });\n    PanelModelBase.prototype.delete = function (doDispose) {\n        if (doDispose === void 0) { doDispose = true; }\n        this.removeFromParent();\n        if (doDispose) {\n            this.dispose();\n        }\n    };\n    PanelModelBase.prototype.removeFromParent = function () { };\n    PanelModelBase.prototype.canShowTitle = function () { return true; };\n    Object.defineProperty(PanelModelBase.prototype, \"_showDescription\", {\n        get: function () {\n            if (!this.hasTitle && this.isDesignMode)\n                return false;\n            return this.survey && this.survey.showPageTitles && this.hasDescription ||\n                (this.showDescription && this.isDesignMode &&\n                    _settings__WEBPACK_IMPORTED_MODULE_7__[\"settings\"].designMode.showEmptyDescriptions);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    PanelModelBase.prototype.localeChanged = function () {\n        _super.prototype.localeChanged.call(this);\n        for (var i = 0; i < this.elements.length; i++) {\n            this.elements[i].localeChanged();\n        }\n    };\n    PanelModelBase.prototype.locStrsChanged = function () {\n        _super.prototype.locStrsChanged.call(this);\n        for (var i = 0; i < this.elements.length; i++) {\n            this.elements[i].locStrsChanged();\n        }\n    };\n    Object.defineProperty(PanelModelBase.prototype, \"renderedNavigationTitle\", {\n        get: function () {\n            return this.title || this.name;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(PanelModelBase.prototype, \"requiredText\", {\n        /**\n         * Returns a character or text string that indicates a required panel/page.\n         * @see SurveyModel.requiredText\n         * @see isRequired\n         */\n        get: function () {\n            return !!this.survey && this.isRequired\n                ? this.survey.requiredText\n                : \"\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(PanelModelBase.prototype, \"titlePattern\", {\n        get: function () {\n            return !!this.survey ? this.survey.questionTitlePattern : \"numTitleRequire\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(PanelModelBase.prototype, \"isRequireTextOnStart\", {\n        get: function () {\n            return this.isRequired && this.titlePattern == \"requireNumTitle\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(PanelModelBase.prototype, \"isRequireTextBeforeTitle\", {\n        get: function () {\n            return this.isRequired && this.titlePattern == \"numRequireTitle\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(PanelModelBase.prototype, \"isRequireTextAfterTitle\", {\n        get: function () {\n            return this.isRequired && this.titlePattern == \"numTitleRequire\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(PanelModelBase.prototype, \"requiredErrorText\", {\n        /**\n         * Specifies a custom error message for a required panel/page.\n         * @see isRequired\n         * @see requiredIf\n         */\n        get: function () {\n            return this.getLocalizableStringText(\"requiredErrorText\");\n        },\n        set: function (val) {\n            this.setLocalizableStringText(\"requiredErrorText\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(PanelModelBase.prototype, \"locRequiredErrorText\", {\n        get: function () {\n            return this.getLocalizableString(\"requiredErrorText\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(PanelModelBase.prototype, \"questionsOrder\", {\n        /**\n         * Specifies the sort order of questions in the panel/page.\n         *\n         * Possible values:\n         *\n         * - `\"initial\"` - Preserves the original order of questions.\n         * - `\"random\"` - Displays questions in random order.\n         * - `\"default\"` (default) - Inherits the setting from the Survey's `questionsOrder` property.\n         * @see SurveyModel.questionsOrder\n         * @see areQuestionsRandomized\n         */\n        get: function () {\n            return this.getPropertyValue(\"questionsOrder\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"questionsOrder\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    PanelModelBase.prototype.canRandomize = function (isRandom) {\n        return isRandom && (this.questionsOrder !== \"initial\") || this.questionsOrder === \"random\";\n    };\n    PanelModelBase.prototype.randomizeElements = function (isRandom) {\n        if (!this.canRandomize(isRandom) || this.isRandomizing)\n            return;\n        this.isRandomizing = true;\n        var oldElements = [];\n        var elements = this.elements;\n        for (var i = 0; i < elements.length; i++) {\n            oldElements.push(elements[i]);\n        }\n        var newElements = _helpers__WEBPACK_IMPORTED_MODULE_1__[\"Helpers\"].randomizeArray(oldElements);\n        this.setArrayPropertyDirectly(\"elements\", newElements, false);\n        this.updateRows();\n        this.updateVisibleIndexes();\n        this.isRandomizing = false;\n    };\n    Object.defineProperty(PanelModelBase.prototype, \"areQuestionsRandomized\", {\n        /**\n         * Returns `true` if elements in this panel/page are arranged in random order.\n         * @see questionsOrder\n         */\n        get: function () {\n            var order = this.questionsOrder == \"default\" && this.survey\n                ? this.survey.questionsOrder\n                : this.questionsOrder;\n            return order == \"random\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(PanelModelBase.prototype, \"parent\", {\n        /**\n         * Returns a survey element (panel or page) that contains this panel and allows you to move this question to a different survey element.\n         *\n         * This property is always `null` for the `PageModel` object.\n         */\n        get: function () {\n            return this.getPropertyValue(\"parent\", null);\n        },\n        set: function (val) {\n            this.setPropertyValue(\"parent\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(PanelModelBase.prototype, \"depth\", {\n        get: function () {\n            if (this.parent == null)\n                return 0;\n            return this.parent.depth + 1;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(PanelModelBase.prototype, \"visibleIf\", {\n        /**\n         * A Boolean expression. If it evaluates to `false`, this panel/page becomes hidden.\n         *\n         * A survey parses and runs all expressions on startup. If any values used in the expression change, the survey re-evaluates it.\n         *\n         * Refer to the following help topic for more information: [Conditional Visibility](https://surveyjs.io/form-library/documentation/design-survey-conditional-logic#conditional-visibility)\n         * @see visible\n         * @see isVisible\n         */\n        get: function () {\n            return this.getPropertyValue(\"visibleIf\", \"\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"visibleIf\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    PanelModelBase.prototype.calcCssClasses = function (css) {\n        var classes = { panel: {}, error: {}, row: \"\", rowMultiple: \"\", pageRow: \"\", rowCompact: \"\" };\n        this.copyCssClasses(classes.panel, css.panel);\n        this.copyCssClasses(classes.error, css.error);\n        if (!!css.pageRow) {\n            classes.pageRow = css.pageRow;\n        }\n        if (!!css.rowCompact) {\n            classes.rowCompact = css.rowCompact;\n        }\n        if (!!css.row) {\n            classes.row = css.row;\n        }\n        if (!!css.rowMultiple) {\n            classes.rowMultiple = css.rowMultiple;\n        }\n        if (this.survey) {\n            this.survey.updatePanelCssClasses(this, classes);\n        }\n        return classes;\n    };\n    Object.defineProperty(PanelModelBase.prototype, \"id\", {\n        /**\n         * An auto-generated unique element identifier.\n         */\n        get: function () {\n            return this.getPropertyValue(\"id\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"id\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(PanelModelBase.prototype, \"isPanel\", {\n        /**\n         * Returns `true` if the survey element is a panel.\n         * @see Base.getType\n         */\n        get: function () {\n            return false;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    PanelModelBase.prototype.getPanel = function () {\n        return this;\n    };\n    PanelModelBase.prototype.getLayoutType = function () {\n        return \"row\";\n    };\n    PanelModelBase.prototype.isLayoutTypeSupported = function (layoutType) {\n        return layoutType !== \"flow\";\n    };\n    Object.defineProperty(PanelModelBase.prototype, \"questions\", {\n        /**\n         * An array of all questions within this panel/page. Includes questions within nested panels.\n         * @see elements\n         */\n        get: function () {\n            if (!this.isQuestionsReady) {\n                this.questionsValue = [];\n                for (var i = 0; i < this.elements.length; i++) {\n                    var el = this.elements[i];\n                    if (el.isPanel) {\n                        var qs = el.questions;\n                        for (var j = 0; j < qs.length; j++) {\n                            this.questionsValue.push(qs[j]);\n                        }\n                    }\n                    else {\n                        this.questionsValue.push(el);\n                    }\n                }\n                this.isQuestionsReady = true;\n            }\n            return this.questionsValue;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    PanelModelBase.prototype.getQuestions = function (includeNested) {\n        var res = this.questions;\n        if (!includeNested)\n            return res;\n        var res2 = [];\n        res.forEach(function (q) {\n            res2.push(q);\n            q.getNestedQuestions().forEach(function (nQ) { return res2.push(nQ); });\n        });\n        return res2;\n    };\n    PanelModelBase.prototype.getValidName = function (name) {\n        if (!!name)\n            return name.trim();\n        return name;\n    };\n    /**\n     * Returns a question with a specified `name`. This method does not find questions within nested panels.\n     * @param name A question name.\n     */\n    PanelModelBase.prototype.getQuestionByName = function (name) {\n        var questions = this.questions;\n        for (var i = 0; i < questions.length; i++) {\n            if (questions[i].name == name)\n                return questions[i];\n        }\n        return null;\n    };\n    /**\n     * Returns a survey element with a specified `name`. This method can find survey elements within nested elements.\n     * @param name An element name.\n     */\n    PanelModelBase.prototype.getElementByName = function (name) {\n        var elements = this.elements;\n        for (var i = 0; i < elements.length; i++) {\n            var el = elements[i];\n            if (el.name == name)\n                return el;\n            var pnl = el.getPanel();\n            if (!!pnl) {\n                var res = pnl.getElementByName(name);\n                if (!!res)\n                    return res;\n            }\n        }\n        return null;\n    };\n    PanelModelBase.prototype.getQuestionByValueName = function (valueName) {\n        var questions = this.questions;\n        for (var i = 0; i < questions.length; i++) {\n            if (questions[i].getValueName() == valueName)\n                return questions[i];\n        }\n        return null;\n    };\n    /**\n     * Returns a JSON object with question values nested in the panel/page.\n     * @see getDisplayValue\n     */\n    PanelModelBase.prototype.getValue = function () {\n        var data = {};\n        this.collectValues(data, 0);\n        return data;\n    };\n    PanelModelBase.prototype.collectValues = function (data, level) {\n        var elements = this.elements;\n        if (level === 0) {\n            elements = this.questions;\n        }\n        var hasValue = false;\n        for (var i = 0; i < elements.length; i++) {\n            var el = elements[i];\n            if (el.isPanel || el.isPage) {\n                var panelData = {};\n                if (el.collectValues(panelData, level - 1)) {\n                    data[el.name] = panelData;\n                    hasValue = true;\n                }\n            }\n            else {\n                var q = el;\n                if (!q.isEmpty()) {\n                    var valueName = q.getValueName();\n                    data[valueName] = q.value;\n                    if (!!this.data) {\n                        var comment = this.data.getComment(valueName);\n                        if (!!comment) {\n                            data[valueName + _base__WEBPACK_IMPORTED_MODULE_2__[\"Base\"].commentSuffix] = comment;\n                        }\n                    }\n                }\n                hasValue = true;\n            }\n        }\n        return true;\n    };\n    /**\n     * Returns a JSON object with display texts that correspond to question values nested in the panel/page.\n     * @param keysAsText Pass `true` if not only values in the object should be display texts, but also keys. Default value: `false`.\n     * @see getValue\n     */\n    PanelModelBase.prototype.getDisplayValue = function (keysAsText) {\n        var data = {};\n        var questions = this.questions;\n        for (var i = 0; i < questions.length; i++) {\n            var q = questions[i];\n            if (q.isEmpty())\n                continue;\n            var valueName = keysAsText ? q.title : q.getValueName();\n            data[valueName] = q.getDisplayValue(keysAsText);\n        }\n        return data;\n    };\n    /**\n     * Returns a JSON object with comments left to questions within this panel/page. Question names are used as keys.\n     */\n    PanelModelBase.prototype.getComments = function () {\n        var comments = {};\n        if (!this.data)\n            return comments;\n        var questions = this.questions;\n        for (var i = 0; i < questions.length; i++) {\n            var q = questions[i];\n            var comment = this.data.getComment(q.getValueName());\n            if (!!comment) {\n                comments[q.getValueName()] = comment;\n            }\n        }\n        return comments;\n    };\n    /**\n     * Removes values that cannot be assigned to nested questions, for example, choices unlisted in the `choices` array.\n     *\n     * Call this method after you assign new question values in code to ensure that they are acceptable.\n     *\n     * > This method does not remove values for invisible questions and values that fail validation. Call the `validate()` method to validate newly assigned values.\n     *\n     * @see validate\n     */\n    PanelModelBase.prototype.clearIncorrectValues = function () {\n        for (var i = 0; i < this.elements.length; i++) {\n            this.elements[i].clearIncorrectValues();\n        }\n    };\n    /**\n     * Empties the `errors` array for this panel/page and all its child elements (panels and questions).\n     * @see errors\n     */\n    PanelModelBase.prototype.clearErrors = function () {\n        for (var i = 0; i < this.elements.length; i++) {\n            this.elements[i].clearErrors();\n        }\n        this.errors = [];\n    };\n    PanelModelBase.prototype.markQuestionListDirty = function () {\n        this.isQuestionsReady = false;\n        if (this.parent)\n            this.parent.markQuestionListDirty();\n    };\n    Object.defineProperty(PanelModelBase.prototype, \"elements\", {\n        /**\n         * An array of all survey elements (questions or panels) within this panel/page. Does not include questions within nested panels.\n         * @see questions\n         */\n        get: function () {\n            return this.elementsValue;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    PanelModelBase.prototype.getElementsInDesign = function (includeHidden) {\n        if (includeHidden === void 0) { includeHidden = false; }\n        return this.elements;\n    };\n    /**\n     * Checks whether a given element belongs to this panel/page or nested panels.\n     * @param element A survey element to check.\n     */\n    PanelModelBase.prototype.containsElement = function (element) {\n        for (var i = 0; i < this.elements.length; i++) {\n            var el = this.elements[i];\n            if (el == element)\n                return true;\n            var pnl = el.getPanel();\n            if (!!pnl) {\n                if (pnl.containsElement(element))\n                    return true;\n            }\n        }\n        return false;\n    };\n    Object.defineProperty(PanelModelBase.prototype, \"isRequired\", {\n        /**\n         * Makes the panel/page require an answer at least in one nested question. If a respondent leaves the panel/page without any answers, the survey displays a validation error.\n         * @see requiredIf\n         * @see [Data Validation](https://surveyjs.io/form-library/documentation/data-validation)\n         */\n        get: function () {\n            return this.getPropertyValue(\"isRequired\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"isRequired\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(PanelModelBase.prototype, \"requiredIf\", {\n        /**\n         * A Boolean expression. If it evaluates to `true`, this panel/page becomes required (at least one question in the panel/page should have an answer).\n         *\n         * A survey parses and runs all expressions on startup. If any values used in the expression change, the survey re-evaluates it.\n         *\n         * Refer to the following help topic for more information: [Conditional Visibility](https://surveyjs.io/form-library/documentation/design-survey-conditional-logic#conditional-visibility)\n         * @see isRequired\n         */\n        get: function () {\n            return this.getPropertyValue(\"requiredIf\", \"\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"requiredIf\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    PanelModelBase.prototype.searchText = function (text, founded) {\n        _super.prototype.searchText.call(this, text, founded);\n        for (var i = 0; i < this.elements.length; i++) {\n            this.elements[i].searchText(text, founded);\n        }\n    };\n    PanelModelBase.prototype.hasErrors = function (fireCallback, focusOnFirstError, rec) {\n        if (fireCallback === void 0) { fireCallback = true; }\n        if (focusOnFirstError === void 0) { focusOnFirstError = false; }\n        if (rec === void 0) { rec = null; }\n        return !this.validate(fireCallback, focusOnFirstError, rec);\n    };\n    /**\n     * Validates questions within this panel or page and returns `false` if the validation fails.\n     * @param fireCallback *Optional.* Pass `false` if you do not want to show validation errors in the UI.\n     * @param focusOnFirstError *Optional.* Pass `true` if you want to focus the first question with a validation error.\n     * @see [Data Validation](https://surveyjs.io/form-library/documentation/data-validation)\n     */\n    PanelModelBase.prototype.validate = function (fireCallback, focusOnFirstError, rec) {\n        if (fireCallback === void 0) { fireCallback = true; }\n        if (focusOnFirstError === void 0) { focusOnFirstError = false; }\n        if (rec === void 0) { rec = null; }\n        rec = !!rec\n            ? rec\n            : {\n                fireCallback: fireCallback,\n                focuseOnFirstError: focusOnFirstError,\n                firstErrorQuestion: null,\n                result: false,\n            };\n        if (rec.result !== true)\n            rec.result = false;\n        this.hasErrorsCore(rec);\n        if (rec.firstErrorQuestion) {\n            rec.firstErrorQuestion.focus(true);\n        }\n        return !rec.result;\n    };\n    PanelModelBase.prototype.validateContainerOnly = function () {\n        this.hasErrorsInPanels({ fireCallback: true });\n        if (!!this.parent) {\n            this.parent.validateContainerOnly();\n        }\n    };\n    PanelModelBase.prototype.hasErrorsInPanels = function (rec) {\n        var errors = [];\n        this.hasRequiredError(rec, errors);\n        if (this.survey) {\n            var customError = this.survey.validatePanel(this);\n            if (customError) {\n                errors.push(customError);\n                rec.result = true;\n            }\n        }\n        if (!!rec.fireCallback) {\n            if (!!this.survey) {\n                this.survey.beforeSettingPanelErrors(this, errors);\n            }\n            this.errors = errors;\n        }\n    };\n    //ISurveyErrorOwner\n    PanelModelBase.prototype.getErrorCustomText = function (text, error) {\n        if (!!this.survey)\n            return this.survey.getSurveyErrorCustomText(this, text, error);\n        return text;\n    };\n    PanelModelBase.prototype.hasRequiredError = function (rec, errors) {\n        if (!this.isRequired)\n            return;\n        var visQuestions = [];\n        this.addQuestionsToList(visQuestions, true);\n        if (visQuestions.length == 0)\n            return;\n        for (var i = 0; i < visQuestions.length; i++) {\n            if (!visQuestions[i].isEmpty())\n                return;\n        }\n        rec.result = true;\n        errors.push(new _error__WEBPACK_IMPORTED_MODULE_6__[\"OneAnswerRequiredError\"](this.requiredErrorText, this));\n        if (rec.focuseOnFirstError && !rec.firstErrorQuestion) {\n            rec.firstErrorQuestion = visQuestions[0];\n        }\n    };\n    PanelModelBase.prototype.hasErrorsCore = function (rec) {\n        var elements = this.elements;\n        var element = null;\n        for (var i = 0; i < elements.length; i++) {\n            element = elements[i];\n            if (!element.isVisible)\n                continue;\n            if (element.isPanel) {\n                element.hasErrorsCore(rec);\n            }\n            else {\n                var question = element;\n                if (!question.validate(rec.fireCallback, rec)) {\n                    if (rec.focuseOnFirstError && rec.firstErrorQuestion == null) {\n                        rec.firstErrorQuestion = question;\n                    }\n                    rec.result = true;\n                }\n            }\n        }\n        this.hasErrorsInPanels(rec);\n        this.updateContainsErrors();\n    };\n    PanelModelBase.prototype.getContainsErrors = function () {\n        var res = _super.prototype.getContainsErrors.call(this);\n        if (res)\n            return res;\n        var elements = this.elements;\n        for (var i = 0; i < elements.length; i++) {\n            if (elements[i].containsErrors)\n                return true;\n        }\n        return false;\n    };\n    PanelModelBase.prototype.updateElementVisibility = function () {\n        for (var i = 0; i < this.elements.length; i++) {\n            var el = this.elements[i];\n            el.setPropertyValue(\"isVisible\", el.isVisible);\n            if (el.isPanel) {\n                el.updateElementVisibility();\n            }\n        }\n    };\n    PanelModelBase.prototype.getFirstQuestionToFocus = function (withError, ignoreCollapseState) {\n        if (withError === void 0) { withError = false; }\n        if (ignoreCollapseState === void 0) { ignoreCollapseState = false; }\n        if (!withError && !ignoreCollapseState && this.isCollapsed)\n            return null;\n        var elements = this.elements;\n        for (var i = 0; i < elements.length; i++) {\n            var el = elements[i];\n            if (!el.isVisible || !ignoreCollapseState && el.isCollapsed)\n                continue;\n            if (el.isPanel) {\n                var res = el.getFirstQuestionToFocus(withError, ignoreCollapseState);\n                if (!!res)\n                    return res;\n            }\n            else {\n                var q = el.getFirstQuestionToFocus(withError);\n                if (!!q)\n                    return q;\n            }\n        }\n        return null;\n    };\n    /**\n     * Focuses the first question in this panel/page.\n     * @see focusFirstErrorQuestion\n     */\n    PanelModelBase.prototype.focusFirstQuestion = function () {\n        var q = this.getFirstQuestionToFocus();\n        if (!!q) {\n            q.focus();\n        }\n    };\n    /**\n     * Focuses the first question with a validation error in this panel/page.\n     * @see validate\n     * @see focusFirstQuestion\n     */\n    PanelModelBase.prototype.focusFirstErrorQuestion = function () {\n        var q = this.getFirstQuestionToFocus(true);\n        if (!!q) {\n            q.focus();\n        }\n    };\n    PanelModelBase.prototype.addQuestionsToList = function (list, visibleOnly, includingDesignTime) {\n        if (visibleOnly === void 0) { visibleOnly = false; }\n        if (includingDesignTime === void 0) { includingDesignTime = false; }\n        this.addElementsToList(list, visibleOnly, includingDesignTime, false);\n    };\n    PanelModelBase.prototype.addPanelsIntoList = function (list, visibleOnly, includingDesignTime) {\n        if (visibleOnly === void 0) { visibleOnly = false; }\n        if (includingDesignTime === void 0) { includingDesignTime = false; }\n        this.addElementsToList(list, visibleOnly, includingDesignTime, true);\n    };\n    PanelModelBase.prototype.addElementsToList = function (list, visibleOnly, includingDesignTime, isPanel) {\n        if (visibleOnly && !this.visible)\n            return;\n        this.addElementsToListCore(list, this.elements, visibleOnly, includingDesignTime, isPanel);\n    };\n    PanelModelBase.prototype.addElementsToListCore = function (list, elements, visibleOnly, includingDesignTime, isPanel) {\n        for (var i = 0; i < elements.length; i++) {\n            var el = elements[i];\n            if (visibleOnly && !el.visible)\n                continue;\n            if ((isPanel && el.isPanel) || (!isPanel && !el.isPanel)) {\n                list.push(el);\n            }\n            if (el.isPanel) {\n                el.addElementsToListCore(list, el.elements, visibleOnly, includingDesignTime, isPanel);\n            }\n            else {\n                if (includingDesignTime) {\n                    this.addElementsToListCore(list, el.getElementsInDesign(false), visibleOnly, includingDesignTime, isPanel);\n                }\n            }\n        }\n    };\n    PanelModelBase.prototype.updateCustomWidgets = function () {\n        for (var i = 0; i < this.elements.length; i++) {\n            this.elements[i].updateCustomWidgets();\n        }\n    };\n    Object.defineProperty(PanelModelBase.prototype, \"questionTitleLocation\", {\n        /**\n         * Sets a title location relative to the input field for questions that belong to this panel/page.\n         *\n         * Use this property to override the `questionTitleLocation` property specified for the survey. You can also set the `titleLocation` property for individual questions.\n         *\n         * Possible values:\n         *\n         * - `\"default\"` (default) - Inherits the setting from the `questionTitleLocation` property specified for the survey.\n         * - `\"top\"` - Displays the title above the input field.\n         * - `\"bottom\"` - Displays the title below the input field.\n         * - `\"left\"` - Displays the title to the left of the input field.\n         * - `\"hidden\"` - Hides the question title.\n         *\n         * > Certain question types (Matrix, Multiple Text) do not support the `\"left\"` value. For them, the `\"top\"` value is used.\n         * @see SurveyModel.questionTitleLocation\n         */\n        get: function () {\n            return this.getPropertyValue(\"questionTitleLocation\");\n        },\n        set: function (value) {\n            this.setPropertyValue(\"questionTitleLocation\", value.toLowerCase());\n        },\n        enumerable: false,\n        configurable: true\n    });\n    PanelModelBase.prototype.getQuestionTitleLocation = function () {\n        if (this.onGetQuestionTitleLocation)\n            return this.onGetQuestionTitleLocation();\n        if (this.questionTitleLocation != \"default\")\n            return this.questionTitleLocation;\n        if (this.parent)\n            return this.parent.getQuestionTitleLocation();\n        return this.survey ? this.survey.questionTitleLocation : \"top\";\n    };\n    PanelModelBase.prototype.getStartIndex = function () {\n        if (!!this.parent)\n            return this.parent.getQuestionStartIndex();\n        if (!!this.survey)\n            return this.survey.questionStartIndex;\n        return \"\";\n    };\n    PanelModelBase.prototype.getQuestionStartIndex = function () {\n        return this.getStartIndex();\n    };\n    PanelModelBase.prototype.getChildrenLayoutType = function () {\n        return \"row\";\n    };\n    PanelModelBase.prototype.getProgressInfo = function () {\n        return _survey_element__WEBPACK_IMPORTED_MODULE_3__[\"SurveyElement\"].getProgressInfoByElements(this.elements, this.isRequired);\n    };\n    Object.defineProperty(PanelModelBase.prototype, \"root\", {\n        get: function () {\n            var res = this;\n            while (res.parent)\n                res = res.parent;\n            return res;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    PanelModelBase.prototype.childVisibilityChanged = function () {\n        var newIsVisibleValue = this.getIsPageVisible(null);\n        var oldIsVisibleValue = this.getPropertyValue(\"isVisible\", true);\n        if (newIsVisibleValue !== oldIsVisibleValue) {\n            this.onVisibleChanged();\n        }\n    };\n    PanelModelBase.prototype.createRowAndSetLazy = function (index) {\n        var row = this.createRow();\n        row.setIsLazyRendering(this.isLazyRenderInRow(index));\n        return row;\n    };\n    PanelModelBase.prototype.createRow = function () {\n        return new QuestionRowModel(this);\n    };\n    PanelModelBase.prototype.onSurveyLoad = function () {\n        for (var i = 0; i < this.elements.length; i++) {\n            this.elements[i].onSurveyLoad();\n        }\n        this.onElementVisibilityChanged(this);\n    };\n    PanelModelBase.prototype.onFirstRendering = function () {\n        _super.prototype.onFirstRendering.call(this);\n        for (var i = 0; i < this.elements.length; i++) {\n            this.elements[i].onFirstRendering();\n        }\n        this.onRowsChanged();\n    };\n    PanelModelBase.prototype.updateRows = function () {\n        if (this.isLoadingFromJson)\n            return;\n        for (var i = 0; i < this.elements.length; i++) {\n            if (this.elements[i].isPanel) {\n                this.elements[i].updateRows();\n            }\n        }\n        this.onRowsChanged();\n    };\n    Object.defineProperty(PanelModelBase.prototype, \"rows\", {\n        get: function () {\n            return this.getPropertyValue(\"rows\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    PanelModelBase.prototype.ensureRowsVisibility = function () {\n        this.rows.forEach(function (row) {\n            row.ensureVisibility();\n        });\n    };\n    PanelModelBase.prototype.onRowsChanged = function () {\n        if (this.isLoadingFromJson)\n            return;\n        this.setArrayPropertyDirectly(\"rows\", this.buildRows());\n    };\n    PanelModelBase.prototype.onAddElement = function (element, index) {\n        var _this = this;\n        element.setSurveyImpl(this.surveyImpl);\n        element.parent = this;\n        this.markQuestionListDirty();\n        if (this.canBuildRows()) {\n            var dragDropInfo = _settings__WEBPACK_IMPORTED_MODULE_7__[\"settings\"].supportCreatorV2 ? this.getDragDropInfo() : undefined;\n            this.dragDropPanelHelper.updateRowsOnElementAdded(element, index, dragDropInfo, this);\n        }\n        if (element.isPanel) {\n            var p = element;\n            if (this.survey) {\n                this.survey.panelAdded(p, index, this, this.root);\n            }\n        }\n        else {\n            if (this.survey) {\n                var q = element;\n                this.survey.questionAdded(q, index, this, this.root);\n            }\n        }\n        if (!!this.addElementCallback)\n            this.addElementCallback(element);\n        var self = this;\n        element.registerPropertyChangedHandlers([\"visible\", \"isVisible\"], function () {\n            _this.onElementVisibilityChanged(element);\n        }, this.id);\n        element.registerPropertyChangedHandlers([\"startWithNewLine\"], function () {\n            _this.onElementStartWithNewLineChanged(element);\n        }, this.id);\n        this.onElementVisibilityChanged(this);\n    };\n    PanelModelBase.prototype.onRemoveElement = function (element) {\n        element.parent = null;\n        this.markQuestionListDirty();\n        element.unregisterPropertyChangedHandlers([\"visible\", \"isVisible\", \"startWithNewLine\"], this.id);\n        this.updateRowsOnElementRemoved(element);\n        if (this.isRandomizing)\n            return;\n        if (!element.isPanel) {\n            if (this.survey)\n                this.survey.questionRemoved(element);\n        }\n        else {\n            if (this.survey)\n                this.survey.panelRemoved(element);\n        }\n        if (!!this.removeElementCallback)\n            this.removeElementCallback(element);\n        this.onElementVisibilityChanged(this);\n    };\n    PanelModelBase.prototype.onElementVisibilityChanged = function (element) {\n        if (this.isLoadingFromJson || this.isRandomizing)\n            return;\n        this.updateRowsVisibility(element);\n        this.childVisibilityChanged();\n        if (!!this.parent) {\n            this.parent.onElementVisibilityChanged(this);\n        }\n    };\n    PanelModelBase.prototype.onElementStartWithNewLineChanged = function (element) {\n        this.onRowsChanged();\n    };\n    PanelModelBase.prototype.updateRowsVisibility = function (element) {\n        var rows = this.rows;\n        for (var i = 0; i < rows.length; i++) {\n            var row = rows[i];\n            if (row.elements.indexOf(element) > -1) {\n                row.updateVisible();\n                if (row.visible && !row.isNeedRender) {\n                    row.isNeedRender = true;\n                }\n                break;\n            }\n        }\n    };\n    PanelModelBase.prototype.canBuildRows = function () {\n        return !this.isLoadingFromJson && this.getChildrenLayoutType() == \"row\";\n    };\n    PanelModelBase.prototype.buildRows = function () {\n        if (!this.canBuildRows())\n            return [];\n        var result = new Array();\n        for (var i = 0; i < this.elements.length; i++) {\n            var el = this.elements[i];\n            var isNewRow = i == 0 || el.startWithNewLine;\n            var row = isNewRow ? this.createRowAndSetLazy(result.length) : result[result.length - 1];\n            if (isNewRow)\n                result.push(row);\n            row.addElement(el);\n        }\n        for (var i = 0; i < result.length; i++) {\n            result[i].updateVisible();\n        }\n        return result;\n    };\n    PanelModelBase.prototype.isLazyRenderInRow = function (rowIndex) {\n        if (!this.survey || !this.survey.isLazyRendering)\n            return false;\n        return (rowIndex >= _settings__WEBPACK_IMPORTED_MODULE_7__[\"settings\"].lazyRender.firstBatchSize ||\n            !this.canRenderFirstRows());\n    };\n    PanelModelBase.prototype.canRenderFirstRows = function () {\n        return this.isPage;\n    };\n    PanelModelBase.prototype.getDragDropInfo = function () {\n        var page = this.getPage(this.parent);\n        return !!page ? page.getDragDropInfo() : undefined;\n    };\n    PanelModelBase.prototype.updateRowsOnElementRemoved = function (element) {\n        if (!this.canBuildRows())\n            return;\n        this.updateRowsRemoveElementFromRow(element, this.findRowByElement(element));\n    };\n    PanelModelBase.prototype.updateRowsRemoveElementFromRow = function (element, row) {\n        if (!row || !row.panel)\n            return;\n        var elIndex = row.elements.indexOf(element);\n        if (elIndex < 0)\n            return;\n        row.elements.splice(elIndex, 1);\n        if (row.elements.length > 0) {\n            row.elements[0].startWithNewLine = true;\n            row.updateVisible();\n        }\n        else {\n            if (row.index >= 0) {\n                row.panel.rows.splice(row.index, 1);\n            }\n        }\n    };\n    PanelModelBase.prototype.findRowByElement = function (el) {\n        var rows = this.rows;\n        for (var i = 0; i < rows.length; i++) {\n            if (rows[i].elements.indexOf(el) > -1)\n                return rows[i];\n        }\n        return null;\n    };\n    PanelModelBase.prototype.elementWidthChanged = function (el) {\n        if (this.isLoadingFromJson)\n            return;\n        var row = this.findRowByElement(el);\n        if (!!row) {\n            row.updateVisible();\n        }\n    };\n    Object.defineProperty(PanelModelBase.prototype, \"processedTitle\", {\n        get: function () {\n            return this.getRenderedTitle(this.locTitle.textOrHtml);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    PanelModelBase.prototype.getRenderedTitle = function (str) {\n        return this.textProcessor != null\n            ? this.textProcessor.processText(str, true)\n            : str;\n    };\n    Object.defineProperty(PanelModelBase.prototype, \"visible\", {\n        /**\n         * Gets or sets panel/page visibility.\n         *\n         * If you want to display or hide a survey element based on a condition, specify the `visibleIf` property. Refer to the following help topic for information: [Conditional Visibility](https://surveyjs.io/form-library/documentation/design-survey-conditional-logic#conditional-visibility).\n         * @see visibleIf\n         * @see isVisible\n         */\n        get: function () {\n            return this.getPropertyValue(\"visible\", true);\n        },\n        set: function (value) {\n            if (value === this.visible)\n                return;\n            this.setPropertyValue(\"visible\", value);\n            this.setPropertyValue(\"isVisible\", this.isVisible);\n            if (!this.isLoadingFromJson)\n                this.onVisibleChanged();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    PanelModelBase.prototype.onHidingContent = function () {\n        this.questions.forEach(function (q) { return q.onHidingContent(); });\n    };\n    PanelModelBase.prototype.onVisibleChanged = function () {\n        if (this.isRandomizing)\n            return;\n        this.setPropertyValue(\"isVisible\", this.isVisible);\n        if (!!this.survey && this.survey.getQuestionClearIfInvisible(\"default\") !== \"none\" &&\n            !this.isLoadingFromJson) {\n            var questions = this.questions;\n            var isVisible = this.isVisible;\n            for (var i = 0; i < questions.length; i++) {\n                var q = questions[i];\n                if (!isVisible) {\n                    q.clearValueIfInvisible(\"onHiddenContainer\");\n                    q.onHidingContent();\n                }\n                else {\n                    q.updateValueWithDefaults();\n                }\n            }\n        }\n    };\n    PanelModelBase.prototype.notifyStateChanged = function () {\n        _super.prototype.notifyStateChanged.call(this);\n        if (this.isCollapsed) {\n            this.questions.forEach(function (q) { return q.onHidingContent(); });\n        }\n    };\n    Object.defineProperty(PanelModelBase.prototype, \"isVisible\", {\n        /**\n         * Returns `true` if the panel/page is visible or the survey is currently in design mode.\n         *\n         * If you want to display or hide a question based on a condition, specify the `visibleIf` property. Refer to the following help topic for information: [Conditional Visibility](https://surveyjs.io/form-library/documentation/design-survey-conditional-logic#conditional-visibility).\n         * @see visibleIf\n         * @see visible\n         */\n        get: function () {\n            return this.areInvisibleElementsShowing || this.getIsPageVisible(null);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    PanelModelBase.prototype.getIsPageVisible = function (exceptionQuestion) {\n        if (!this.visible)\n            return false;\n        for (var i = 0; i < this.elements.length; i++) {\n            if (this.elements[i] == exceptionQuestion)\n                continue;\n            if (this.elements[i].isVisible)\n                return true;\n        }\n        return false;\n    };\n    PanelModelBase.prototype.setVisibleIndex = function (index) {\n        if (!this.isVisible || index < 0) {\n            this.resetVisibleIndexes();\n            return 0;\n        }\n        this.lastVisibleIndex = index;\n        var startIndex = index;\n        index += this.beforeSetVisibleIndex(index);\n        var panelStartIndex = this.getPanelStartIndex(index);\n        var panelIndex = panelStartIndex;\n        for (var i = 0; i < this.elements.length; i++) {\n            panelIndex += this.elements[i].setVisibleIndex(panelIndex);\n        }\n        if (this.isContinueNumbering()) {\n            index += panelIndex - panelStartIndex;\n        }\n        return index - startIndex;\n    };\n    PanelModelBase.prototype.updateVisibleIndexes = function () {\n        if (this.lastVisibleIndex === undefined)\n            return;\n        this.resetVisibleIndexes();\n        this.setVisibleIndex(this.lastVisibleIndex);\n    };\n    PanelModelBase.prototype.resetVisibleIndexes = function () {\n        for (var i = 0; i < this.elements.length; i++) {\n            this.elements[i].setVisibleIndex(-1);\n        }\n    };\n    PanelModelBase.prototype.beforeSetVisibleIndex = function (index) {\n        return 0;\n    };\n    PanelModelBase.prototype.getPanelStartIndex = function (index) {\n        return index;\n    };\n    PanelModelBase.prototype.isContinueNumbering = function () {\n        return true;\n    };\n    Object.defineProperty(PanelModelBase.prototype, \"isReadOnly\", {\n        get: function () {\n            var isParentReadOnly = !!this.parent && this.parent.isReadOnly;\n            var isSurveyReadOnly = !!this.survey && this.survey.isDisplayMode;\n            return this.readOnly || isParentReadOnly || isSurveyReadOnly;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    PanelModelBase.prototype.onReadOnlyChanged = function () {\n        for (var i = 0; i < this.elements.length; i++) {\n            var el = this.elements[i];\n            el.setPropertyValue(\"isReadOnly\", el.isReadOnly);\n        }\n        _super.prototype.onReadOnlyChanged.call(this);\n    };\n    PanelModelBase.prototype.updateElementCss = function (reNew) {\n        _super.prototype.updateElementCss.call(this, reNew);\n        for (var i = 0; i < this.elements.length; i++) {\n            var el = this.elements[i];\n            el.updateElementCss(reNew);\n        }\n    };\n    Object.defineProperty(PanelModelBase.prototype, \"enableIf\", {\n        /**\n         * A Boolean expression. If it evaluates to `false`, this panel/page becomes read-only.\n         *\n         * A survey parses and runs all expressions on startup. If any values used in the expression change, the survey re-evaluates it.\n         *\n         * Refer to the following help topic for more information: [Conditional Visibility](https://surveyjs.io/form-library/documentation/design-survey-conditional-logic#conditional-visibility)\n         * @see readOnly\n         * @see isReadOnly\n         */\n        get: function () {\n            return this.getPropertyValue(\"enableIf\", \"\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"enableIf\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    /**\n     * Adds a survey element (question or panel) to this panel/page. Returns `true` if the element was added successfully; `false` otherwise.\n     * @param element A survey element to add.\n     * @param index A desired index of this element in the `elements` array.\n     * @see addNewQuestion\n     * @see addNewPanel\n     */\n    PanelModelBase.prototype.addElement = function (element, index) {\n        if (index === void 0) { index = -1; }\n        if (!this.canAddElement(element))\n            return false;\n        if (index < 0 || index >= this.elements.length) {\n            this.elements.push(element);\n        }\n        else {\n            this.elements.splice(index, 0, element);\n        }\n        return true;\n    };\n    PanelModelBase.prototype.insertElementAfter = function (element, after) {\n        var index = this.elements.indexOf(after);\n        if (index >= 0)\n            this.addElement(element, index + 1);\n    };\n    PanelModelBase.prototype.insertElementBefore = function (element, before) {\n        var index = this.elements.indexOf(before);\n        if (index >= 0)\n            this.addElement(element, index);\n    };\n    PanelModelBase.prototype.canAddElement = function (element) {\n        return (!!element && element.isLayoutTypeSupported(this.getChildrenLayoutType()));\n    };\n    PanelModelBase.prototype.addQuestion = function (question, index) {\n        if (index === void 0) { index = -1; }\n        return this.addElement(question, index);\n    };\n    PanelModelBase.prototype.addPanel = function (panel, index) {\n        if (index === void 0) { index = -1; }\n        return this.addElement(panel, index);\n    };\n    /**\n     * Creates a new question of a given type and adds it to the `elements` array at a specified index.\n     *\n     * This method returns `null` if the question cannot be created or added to this panel/page; otherwise, the method returns the created question.\n     *\n     * @param questionType A [question type](https://surveyjs.io/form-library/documentation/question#getType).\n     * @param name A question name.\n     * @param index A desired index of the new question in the `elements` array.\n     * @see elements\n     * @see addElement\n     */\n    PanelModelBase.prototype.addNewQuestion = function (questionType, name, index) {\n        if (name === void 0) { name = null; }\n        if (index === void 0) { index = -1; }\n        var question = _questionfactory__WEBPACK_IMPORTED_MODULE_5__[\"QuestionFactory\"].Instance.createQuestion(questionType, name);\n        if (!this.addQuestion(question, index))\n            return null;\n        return question;\n    };\n    /**\n     * Creates a new panel and adds it to the end of the `elements` array.\n     *\n     * This method returns `null` if the panel cannot be created or added to this panel/page; otherwise, the method returns the created panel.\n     * @param name A panel name.\n     * @see elements\n     * @see addElement\n     */\n    PanelModelBase.prototype.addNewPanel = function (name) {\n        if (name === void 0) { name = null; }\n        var panel = this.createNewPanel(name);\n        if (!this.addPanel(panel))\n            return null;\n        return panel;\n    };\n    PanelModelBase.prototype.indexOf = function (element) {\n        return this.elements.indexOf(element);\n    };\n    PanelModelBase.prototype.createNewPanel = function (name) {\n        var res = _jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].createClass(\"panel\");\n        res.name = name;\n        return res;\n    };\n    /**\n     * Deletes a survey element (question or panel) from this panel/page. Returns `true` if the element was deleted successfully; `false` otherwise.\n     * @param element A survey element to delete.\n     * @see elements\n     */\n    PanelModelBase.prototype.removeElement = function (element) {\n        var index = this.elements.indexOf(element);\n        if (index < 0) {\n            for (var i = 0; i < this.elements.length; i++) {\n                if (this.elements[i].removeElement(element))\n                    return true;\n            }\n            return false;\n        }\n        this.elements.splice(index, 1);\n        return true;\n    };\n    PanelModelBase.prototype.removeQuestion = function (question) {\n        this.removeElement(question);\n    };\n    PanelModelBase.prototype.runCondition = function (values, properties) {\n        if (this.isDesignMode || this.isLoadingFromJson)\n            return;\n        var elements = this.elements.slice();\n        for (var i = 0; i < elements.length; i++) {\n            elements[i].runCondition(values, properties);\n        }\n        this.runConditionCore(values, properties);\n    };\n    PanelModelBase.prototype.onAnyValueChanged = function (name, questionName) {\n        var els = this.elements;\n        for (var i = 0; i < els.length; i++) {\n            els[i].onAnyValueChanged(name, questionName);\n        }\n    };\n    PanelModelBase.prototype.checkBindings = function (valueName, value) {\n        var els = this.elements;\n        for (var i = 0; i < els.length; i++) {\n            els[i].checkBindings(valueName, value);\n        }\n    };\n    PanelModelBase.prototype.dragDropAddTarget = function (dragDropInfo) {\n        this.dragDropPanelHelper.dragDropAddTarget(dragDropInfo);\n    };\n    PanelModelBase.prototype.dragDropFindRow = function (findElement) {\n        return this.dragDropPanelHelper.dragDropFindRow(findElement);\n    };\n    PanelModelBase.prototype.dragDropMoveElement = function (src, target, targetIndex) {\n        this.dragDropPanelHelper.dragDropMoveElement(src, target, targetIndex);\n    };\n    PanelModelBase.prototype.needResponsiveWidth = function () {\n        var result = false;\n        this.elements.forEach(function (e) {\n            if (e.needResponsiveWidth())\n                result = true;\n        });\n        this.rows.forEach(function (r) {\n            if (r.elements.length > 1)\n                result = true;\n        });\n        return result;\n    };\n    Object.defineProperty(PanelModelBase.prototype, \"hasDescriptionUnderTitle\", {\n        get: function () {\n            return this.hasDescription;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(PanelModelBase.prototype, \"cssHeader\", {\n        get: function () {\n            return this.cssClasses.panel.header;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(PanelModelBase.prototype, \"cssDescription\", {\n        get: function () {\n            return this.cssClasses.panel.description;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(PanelModelBase.prototype, \"questionErrorLocation\", {\n        /**\n         * Specifies the error message position for questions that belong to this page/panel.\n         *\n         * Use this property to override the [`questionErrorLocation`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#questionErrorLocation) property specified for the survey. You can also set the [`errorLocation`](https://surveyjs.io/form-library/documentation/question#errorLocation) property for individual questions.\n         *\n         * Possible values:\n         *\n         * - `\"default\"` (default) - Inherits the setting from the `questionErrorLocation` property specified for the survey.\n         * - `\"top\"` - Displays error messages above questions.\n         * - `\"bottom\"` - Displays error messages below questions.\n         */\n        get: function () {\n            return this.getPropertyValue(\"questionErrorLocation\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"questionErrorLocation\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    PanelModelBase.prototype.getQuestionErrorLocation = function () {\n        if (this.questionErrorLocation !== \"default\")\n            return this.questionErrorLocation;\n        if (this.parent)\n            return this.parent.getQuestionErrorLocation();\n        return this.survey ? this.survey.questionErrorLocation : \"top\";\n    };\n    Object.defineProperty(PanelModelBase.prototype, \"no\", {\n        //ITitleOwner\n        get: function () { return \"\"; },\n        enumerable: false,\n        configurable: true\n    });\n    PanelModelBase.prototype.dispose = function () {\n        _super.prototype.dispose.call(this);\n        if (this.rows) {\n            for (var i = 0; i < this.rows.length; i++) {\n                this.rows[i].dispose();\n            }\n            this.rows.splice(0, this.rows.length);\n        }\n        for (var i = 0; i < this.elements.length; i++) {\n            this.elements[i].dispose();\n        }\n        this.elements.splice(0, this.elements.length);\n    };\n    PanelModelBase.panelCounter = 100;\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ defaultValue: true })\n    ], PanelModelBase.prototype, \"showTitle\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ defaultValue: true })\n    ], PanelModelBase.prototype, \"showDescription\", void 0);\n    return PanelModelBase;\n}(_survey_element__WEBPACK_IMPORTED_MODULE_3__[\"SurveyElement\"]));\n\n/**\n * A class that describes the Panel container element.\n *\n * A panel can contain questions and other panels. Refer to the following help topic for an illustration: [Survey Structure](https://surveyjs.io/form-library/documentation/design-survey-create-a-simple-survey#survey-structure).\n *\n * [View Demo](https://surveyjs.io/form-library/examples/questiontype-panel/ (linkStyle))\n */\nvar PanelModel = /** @class */ (function (_super) {\n    __extends(PanelModel, _super);\n    function PanelModel(name) {\n        if (name === void 0) { name = \"\"; }\n        var _this = _super.call(this, name) || this;\n        _this.createNewArray(\"footerActions\");\n        _this.registerPropertyChangedHandlers([\"width\"], function () {\n            if (!!_this.parent) {\n                _this.parent.elementWidthChanged(_this);\n            }\n        });\n        _this.registerPropertyChangedHandlers([\"indent\", \"innerIndent\", \"rightIndent\"], function () { _this.onIndentChanged(); });\n        return _this;\n    }\n    PanelModel.prototype.getType = function () {\n        return \"panel\";\n    };\n    Object.defineProperty(PanelModel.prototype, \"contentId\", {\n        get: function () {\n            return this.id + \"_content\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    PanelModel.prototype.getSurvey = function (live) {\n        if (live === void 0) { live = false; }\n        if (live) {\n            return !!this.parent ? this.parent.getSurvey(live) : null;\n        }\n        return _super.prototype.getSurvey.call(this, live);\n    };\n    PanelModel.prototype.onSurveyLoad = function () {\n        _super.prototype.onSurveyLoad.call(this);\n        this.onIndentChanged();\n    };\n    PanelModel.prototype.onSetData = function () {\n        _super.prototype.onSetData.call(this);\n        this.onIndentChanged();\n    };\n    Object.defineProperty(PanelModel.prototype, \"isPanel\", {\n        get: function () {\n            return true;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(PanelModel.prototype, \"page\", {\n        /**\n         * Returns a page to which the panel belongs and allows you to move this panel to a different page.\n         * @see PanelModelBase.parent\n         */\n        get: function () {\n            return this.getPage(this.parent);\n        },\n        set: function (val) {\n            this.setPage(this.parent, val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    PanelModel.prototype.removeFromParent = function () {\n        if (!!this.parent) {\n            this.removeSelfFromList(this.parent.elements);\n        }\n    };\n    PanelModel.prototype.moveTo = function (container, insertBefore) {\n        if (insertBefore === void 0) { insertBefore = null; }\n        return this.moveToBase(this.parent, container, insertBefore);\n    };\n    Object.defineProperty(PanelModel.prototype, \"visibleIndex\", {\n        /**\n         * Returns the visible index of the panel in the survey. Commonly it is -1 and it doesn't show.\n         * You have to set showNumber to true to show index/numbering for the Panel\n         * @see showNumber\n         */\n        get: function () {\n            return this.getPropertyValue(\"visibleIndex\", -1);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    PanelModel.prototype.getTitleOwner = function () { return this; };\n    Object.defineProperty(PanelModel.prototype, \"showNumber\", {\n        /**\n         * Specifies whether to show the panel number in the title.\n         *\n         * Default value: `false`\n         * @see SurveyModel.showQuestionNumbers\n         * @see SurveyModel.questionTitlePattern\n         */\n        get: function () {\n            return this.getPropertyValue(\"showNumber\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"showNumber\", val);\n            this.notifySurveyOnVisibilityChanged();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(PanelModel.prototype, \"showQuestionNumbers\", {\n        /**\n         * Gets or sets a value that specifies how the elements numbers inside panel are displayed.\n         *\n         * The following options are available:\n         *\n         * - `default` - display questions numbers as defined in parent panel or survey\n         * - `onpanel` - display questions numbers, start numbering from beginning of this page\n         * - `off` - turn off the numbering for questions titles\n         * @see showNumber\n         */\n        get: function () {\n            return this.getPropertyValue(\"showQuestionNumbers\");\n        },\n        set: function (value) {\n            this.setPropertyValue(\"showQuestionNumbers\", value);\n            this.notifySurveyOnVisibilityChanged();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(PanelModel.prototype, \"questionStartIndex\", {\n        /**\n         * Specifies a number or letter used to start numbering of elements inside the panel.\n         *\n         * You can include desired prefixes and postfixes alongside the number or letter:\n         *\n         * ```js\n         * \"questionStartIndex\": \"a.\", // a., b., c., ...\n         * \"questionStartIndex\": \"#3\", // #3, #4, #5, ...\n         * \"questionStartIndex\": \"(B).\" // (B)., (C)., (D)., ...\n         * ```\n         * Default value: `\"1.\"` (inherited from `SurveyModel`'s `questionStartIndex` property)\n         * @see SurveyModel.questionStartIndex\n         * @see showQuestionNumbers\n         */\n        get: function () {\n            return this.getPropertyValue(\"questionStartIndex\", \"\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"questionStartIndex\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    PanelModel.prototype.getQuestionStartIndex = function () {\n        if (!!this.questionStartIndex)\n            return this.questionStartIndex;\n        return _super.prototype.getQuestionStartIndex.call(this);\n    };\n    Object.defineProperty(PanelModel.prototype, \"no\", {\n        /**\n         * A question number or letter (depends on the `questionStartIndex` property).\n         *\n         * When the question number, title, or the entire question is invisible, this property returns an empty string.\n         * @see questionStartIndex\n         * @see showNumber\n         * @see visibleIf\n         */\n        get: function () {\n            return this.getPropertyValue(\"no\", \"\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    PanelModel.prototype.setNo = function (visibleIndex) {\n        this.setPropertyValue(\"no\", _helpers__WEBPACK_IMPORTED_MODULE_1__[\"Helpers\"].getNumberByIndex(this.visibleIndex, this.getStartIndex()));\n    };\n    PanelModel.prototype.createLocTitleProperty = function () {\n        var _this = this;\n        var locTitleValue = _super.prototype.createLocTitleProperty.call(this);\n        locTitleValue.onGetTextCallback = function (text) {\n            if (!text && (_this.isExpanded || _this.isCollapsed)) {\n                text = _this.name;\n            }\n            return text;\n        };\n        return locTitleValue;\n    };\n    PanelModel.prototype.beforeSetVisibleIndex = function (index) {\n        var visibleIndex = -1;\n        if (this.showNumber && (this.isDesignMode || !this.locTitle.isEmpty)) {\n            visibleIndex = index;\n        }\n        this.setPropertyValue(\"visibleIndex\", visibleIndex);\n        this.setNo(visibleIndex);\n        return visibleIndex < 0 ? 0 : 1;\n    };\n    PanelModel.prototype.getPanelStartIndex = function (index) {\n        if (this.showQuestionNumbers == \"off\")\n            return -1;\n        if (this.showQuestionNumbers == \"onpanel\")\n            return 0;\n        return index;\n    };\n    PanelModel.prototype.isContinueNumbering = function () {\n        return (this.showQuestionNumbers != \"off\" && this.showQuestionNumbers != \"onpanel\");\n    };\n    PanelModel.prototype.notifySurveyOnVisibilityChanged = function () {\n        if (this.survey != null && !this.isLoadingFromJson) {\n            this.survey.panelVisibilityChanged(this, this.isVisible);\n        }\n    };\n    PanelModel.prototype.hasErrorsCore = function (rec) {\n        _super.prototype.hasErrorsCore.call(this, rec);\n        if (this.isCollapsed && rec.result && rec.fireCallback) {\n            this.expand();\n        }\n    };\n    PanelModel.prototype.getRenderedTitle = function (str) {\n        if (!str) {\n            if (this.isCollapsed || this.isExpanded)\n                return this.name;\n            if (this.isDesignMode)\n                return \"[\" + this.name + \"]\";\n        }\n        return _super.prototype.getRenderedTitle.call(this, str);\n    };\n    Object.defineProperty(PanelModel.prototype, \"innerIndent\", {\n        /**\n         * Increases or decreases an indent of panel content from the left edge. Accepts positive integer values and 0.\n         */\n        get: function () {\n            return this.getPropertyValue(\"innerIndent\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"innerIndent\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(PanelModel.prototype, \"startWithNewLine\", {\n        /**\n         * Disable this property if you want to render the current panel on the same line or row with the previous question or panel.\n         */\n        get: function () {\n            return this.getPropertyValue(\"startWithNewLine\");\n        },\n        set: function (value) {\n            this.setPropertyValue(\"startWithNewLine\", value);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(PanelModel.prototype, \"allowAdaptiveActions\", {\n        get: function () {\n            return this.getPropertyValue(\"allowAdaptiveActions\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"allowAdaptiveActions\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(PanelModel.prototype, \"innerPaddingLeft\", {\n        get: function () {\n            return this.getPropertyValue(\"innerPaddingLeft\", \"\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"innerPaddingLeft\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    PanelModel.prototype.onIndentChanged = function () {\n        if (!this.getSurvey())\n            return;\n        this.innerPaddingLeft = this.getIndentSize(this.innerIndent);\n        this.paddingLeft = this.getIndentSize(this.indent);\n        this.paddingRight = this.getIndentSize(this.rightIndent);\n    };\n    PanelModel.prototype.getIndentSize = function (indent) {\n        if (indent < 1)\n            return \"\";\n        var css = this.survey[\"css\"];\n        if (!css || !css.question.indent)\n            return \"\";\n        return indent * css.question.indent + \"px\";\n    };\n    PanelModel.prototype.clearOnDeletingContainer = function () {\n        this.elements.forEach(function (element) {\n            if (element instanceof _question__WEBPACK_IMPORTED_MODULE_4__[\"Question\"] || element instanceof PanelModel) {\n                element.clearOnDeletingContainer();\n            }\n        });\n    };\n    Object.defineProperty(PanelModel.prototype, \"footerActions\", {\n        get: function () {\n            return this.getPropertyValue(\"footerActions\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    PanelModel.prototype.getFooterToolbar = function () {\n        var _this = this;\n        var _a, _b;\n        if (!this.footerToolbarValue) {\n            var actions = this.footerActions;\n            if (this.hasEditButton) {\n                actions.push({\n                    id: \"cancel-preview\",\n                    locTitle: this.survey.locEditText,\n                    innerCss: this.survey.cssNavigationEdit,\n                    action: function () { _this.cancelPreview(); }\n                });\n            }\n            if (!!this.onGetFooterActionsCallback) {\n                actions = this.onGetFooterActionsCallback();\n            }\n            else {\n                actions = (_a = this.survey) === null || _a === void 0 ? void 0 : _a.getUpdatedPanelFooterActions(this, actions);\n            }\n            this.footerToolbarValue = this.createActionContainer(this.allowAdaptiveActions);\n            var footerCss = this.onGetFooterToolbarCssCallback ? this.onGetFooterToolbarCssCallback() : \"\";\n            if (!footerCss) {\n                footerCss = (_b = this.cssClasses.panel) === null || _b === void 0 ? void 0 : _b.footer;\n            }\n            if (footerCss) {\n                this.footerToolbarValue.containerCss = footerCss;\n            }\n            this.footerToolbarValue.setItems(actions);\n        }\n        return this.footerToolbarValue;\n    };\n    Object.defineProperty(PanelModel.prototype, \"hasEditButton\", {\n        get: function () {\n            if (this.survey && this.survey.state === \"preview\")\n                return this.depth === 1;\n            return false;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    PanelModel.prototype.cancelPreview = function () {\n        if (!this.hasEditButton)\n            return;\n        this.survey.cancelPreviewByPage(this);\n    };\n    Object.defineProperty(PanelModel.prototype, \"cssTitle\", {\n        get: function () {\n            return this.getCssTitle(this.cssClasses.panel);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(PanelModel.prototype, \"cssError\", {\n        get: function () {\n            return this.getCssError(this.cssClasses);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(PanelModel.prototype, \"showErrorsAbovePanel\", {\n        get: function () {\n            return this.isDefaultV2Theme;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    PanelModel.prototype.getCssError = function (cssClasses) {\n        var isDefaultV2Theme = this.isDefaultV2Theme;\n        var builder = new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_9__[\"CssClassBuilder\"]()\n            .append(this.cssClasses.error.root)\n            .append(this.cssClasses.error.outsideQuestion, isDefaultV2Theme)\n            .append(this.cssClasses.error.aboveQuestion, isDefaultV2Theme);\n        return builder.append(\"panel-error-root\", builder.isEmpty()).toString();\n    };\n    PanelModel.prototype.onVisibleChanged = function () {\n        _super.prototype.onVisibleChanged.call(this);\n        this.notifySurveyOnVisibilityChanged();\n    };\n    PanelModel.prototype.needResponsiveWidth = function () {\n        if (!this.startWithNewLine) {\n            return true;\n        }\n        else {\n            return _super.prototype.needResponsiveWidth.call(this);\n        }\n    };\n    PanelModel.prototype.focusIn = function () {\n        if (!this.survey)\n            return;\n        this.survey.whenPanelFocusIn(this);\n    };\n    PanelModel.prototype.getHasFrameV2 = function () {\n        return _super.prototype.getHasFrameV2.call(this) && (!this.originalPage || this.survey.isShowingPreview);\n    };\n    PanelModel.prototype.getIsNested = function () {\n        return _super.prototype.getIsNested.call(this) && this.parent !== undefined;\n    };\n    PanelModel.prototype.getCssRoot = function (cssClasses) {\n        return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_9__[\"CssClassBuilder\"]()\n            .append(_super.prototype.getCssRoot.call(this, cssClasses))\n            .append(cssClasses.container)\n            .append(cssClasses.asPage, !!this.originalPage && !this.survey.isShowingPreview)\n            .append(cssClasses.invisible, !this.isDesignMode && this.areInvisibleElementsShowing && !this.visible)\n            .toString();\n    };\n    PanelModel.prototype.getContainerCss = function () {\n        return this.getCssRoot(this.cssClasses.panel);\n    };\n    return PanelModel;\n}(PanelModelBase));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"panelbase\", [\n    \"name\",\n    {\n        name: \"elements\",\n        alternativeName: \"questions\",\n        baseClassName: \"question\",\n        visible: false,\n        isLightSerializable: false,\n    },\n    { name: \"visible:switch\", default: true, overridingProperty: \"visibleIf\" },\n    { name: \"readOnly:boolean\", overridingProperty: \"enableIf\" },\n    \"visibleIf:condition\",\n    \"enableIf:condition\",\n    \"requiredIf:condition\",\n    {\n        name: \"questionTitleLocation\",\n        default: \"default\",\n        choices: [\"default\", \"top\", \"bottom\", \"left\", \"hidden\"],\n    },\n    { name: \"title:text\", serializationProperty: \"locTitle\" },\n    { name: \"description:text\", serializationProperty: \"locDescription\" },\n    {\n        name: \"questionsOrder\",\n        default: \"default\",\n        choices: [\"default\", \"initial\", \"random\"],\n    },\n    { name: \"questionErrorLocation\", default: \"default\", choices: [\"default\", \"top\", \"bottom\"] }\n], function () {\n    return new PanelModelBase();\n});\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"panel\", [\n    {\n        name: \"state\",\n        default: \"default\",\n        choices: [\"default\", \"collapsed\", \"expanded\"],\n    },\n    { name: \"isRequired:switch\", overridingProperty: \"requiredIf\" },\n    {\n        name: \"requiredErrorText:text\",\n        serializationProperty: \"locRequiredErrorText\",\n    },\n    { name: \"startWithNewLine:boolean\", default: true },\n    \"width\",\n    { name: \"minWidth\", defaultFunc: function () { return \"auto\"; } },\n    { name: \"maxWidth\", defaultFunc: function () { return _settings__WEBPACK_IMPORTED_MODULE_7__[\"settings\"].maxWidth; } },\n    { name: \"innerIndent:number\", default: 0, choices: [0, 1, 2, 3] },\n    { name: \"indent:number\", default: 0, choices: [0, 1, 2, 3] },\n    {\n        name: \"page\",\n        isSerializable: false,\n        visibleIf: function (obj) {\n            var survey = obj ? obj.survey : null;\n            return !survey || !survey.pages || survey.pages.length > 1;\n        },\n        choices: function (obj) {\n            var survey = obj ? obj.survey : null;\n            return survey\n                ? survey.pages.map(function (p) {\n                    return { value: p.name, text: p.title };\n                })\n                : [];\n        },\n    },\n    \"showNumber:boolean\",\n    {\n        name: \"showQuestionNumbers\",\n        default: \"default\",\n        choices: [\"default\", \"onpanel\", \"off\"],\n    },\n    \"questionStartIndex\",\n    { name: \"allowAdaptiveActions:boolean\", default: true, visible: false },\n], function () {\n    return new PanelModel();\n}, \"panelbase\");\n_questionfactory__WEBPACK_IMPORTED_MODULE_5__[\"ElementFactory\"].Instance.registerElement(\"panel\", function (name) {\n    return new PanelModel(name);\n});\n\n\n/***/ }),\n\n/***/ \"./src/plugins/themes/bootstrap/cssbootstrap.ts\":\n/*!******************************************************!*\\\n  !*** ./src/plugins/themes/bootstrap/cssbootstrap.ts ***!\n  \\******************************************************/\n/*! exports provided: defaultCss */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_2330038__) {\n\n\"use strict\";\n__nested_webpack_require_2330038__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_2330038__.d(__nested_webpack_exports__, \"defaultCss\", function() { return defaultCss; });\nvar defaultCss = {\n    root: \"sv_main sv_bootstrap_css\",\n    container: \"sv_container\",\n    header: \"panel-heading card-header\",\n    body: \"panel-body card-block mt-4\",\n    bodyEmpty: \"panel-body card-block mt-4 sv_body_empty\",\n    footer: \"panel-footer card-footer\",\n    title: \"\",\n    description: \"\",\n    logo: \"sv_logo\",\n    logoImage: \"sv_logo__image\",\n    headerText: \"sv_header__text\",\n    navigationButton: \"btn sv_nav_btn\",\n    completedPage: \"\",\n    navigation: {\n        complete: \"sv_complete_btn\",\n        prev: \"sv_prev_btn\",\n        next: \"sv_next_btn\",\n        start: \"sv_start_btn\",\n        preview: \"sv_preview_btn\",\n        edit: \"sv_edit_btn\",\n    },\n    progress: \"progress center-block mx-auto mb-4\",\n    progressBar: \"progress-bar\",\n    progressTextUnderBar: \"sv-hidden\",\n    progressTextInBar: \"sv-hidden\",\n    progressButtonsContainerCenter: \"sv_progress-buttons__container-center\",\n    progressButtonsContainer: \"sv_progress-buttons__container\",\n    progressButtonsImageButtonLeft: \"sv_progress-buttons__image-button-left\",\n    progressButtonsImageButtonRight: \"sv_progress-buttons__image-button-right\",\n    progressButtonsImageButtonHidden: \"sv_progress-buttons__image-button--hidden\",\n    progressButtonsListContainer: \"sv_progress-buttons__list-container\",\n    progressButtonsList: \"sv_progress-buttons__list\",\n    progressButtonsListElementPassed: \"sv_progress-buttons__list-element--passed\",\n    progressButtonsListElementCurrent: \"sv_progress-buttons__list-element--current\",\n    progressButtonsListElementNonClickable: \"sv_progress-buttons__list-element--nonclickable\",\n    progressButtonsPageTitle: \"sv_progress-buttons__page-title\",\n    progressButtonsPageDescription: \"sv_progress-buttons__page-description\",\n    page: {\n        root: \"\",\n        title: \"\",\n        description: \"small\",\n    },\n    pageTitle: \"\",\n    pageDescription: \"small\",\n    row: \"sv_row\",\n    question: {\n        mainRoot: \"sv_qstn\",\n        flowRoot: \"sv_q_flow sv_qstn\",\n        header: \"\",\n        headerLeft: \"title-left\",\n        content: \"\",\n        contentLeft: \"content-left\",\n        titleLeftRoot: \"sv_qstn_left\",\n        title: \"\",\n        titleExpandable: \"sv_q_title_expandable\",\n        titleExpanded: \"sv_q_title_expanded\",\n        titleCollapsed: \"sv_q_title_collapsed\",\n        number: \"sv_q_num\",\n        description: \"small\",\n        descriptionUnderInput: \"small\",\n        requiredText: \"sv_q_required_text\",\n        comment: \"form-control\",\n        required: \"\",\n        titleRequired: \"\",\n        hasError: \"has-error\",\n        indent: 20,\n        formGroup: \"form-group\",\n        disabled: \"sv_q--disabled\",\n    },\n    panel: {\n        title: \"sv_p_title\",\n        titleExpandable: \"sv_p_title_expandable\",\n        titleExpanded: \"sv_p_title_expanded\",\n        titleCollapsed: \"sv_p_title_collapsed\",\n        titleOnError: \"\",\n        icon: \"sv_panel_icon\",\n        iconExpanded: \"sv_expanded\",\n        description: \"small sv_p_description\",\n        container: \"sv_p_container\",\n        footer: \"sv_p_footer\",\n        number: \"sv_q_num\",\n        requiredText: \"sv_q_required_text\",\n    },\n    error: {\n        root: \"alert alert-danger\",\n        icon: \"glyphicon glyphicon-exclamation-sign\",\n        item: \"\",\n        locationTop: \"sv_qstn_error_top\",\n        locationBottom: \"sv_qstn_error_bottom\",\n    },\n    boolean: {\n        root: \"sv_qbln form-inline checkbox\",\n        rootRadio: \"sv_qbln form-inline checkbox\",\n        item: \"sv-boolean\",\n        control: \"sv-visuallyhidden\",\n        controlCheckbox: \"sv-visuallyhidden\",\n        itemChecked: \"sv-boolean--checked checked\",\n        itemIndeterminate: \"sv-boolean--indeterminate\",\n        itemDisabled: \"sv-boolean--disabled\",\n        switch: \"sv-boolean__switch\",\n        slider: \"sv-boolean__slider\",\n        label: \"sv-boolean__label \",\n        disabledLabel: \"sv-boolean__label--disabled\",\n        sliderGhost: \"sv-boolean__thumb-ghost\",\n        materialDecorator: \"sv-item__decorator sv-boolean__decorator\",\n        itemDecorator: \"sv-item__svg sv-boolean__svg\",\n        checkedPath: \"sv-boolean__checked-path\",\n        uncheckedPath: \"sv-boolean__unchecked-path\",\n        indeterminatePath: \"sv-boolean__indeterminate-path\",\n    },\n    checkbox: {\n        root: \"sv_qcbc sv_qcbx form-inline\",\n        item: \"checkbox\",\n        itemChecked: \"checked\",\n        itemSelectAll: \"sv_q_checkbox_selectall\",\n        itemNone: \"sv_q_checkbox_none\",\n        itemInline: \"sv_q_checkbox_inline\",\n        itemControl: \"\",\n        itemDecorator: \"sv-hidden\",\n        label: \"\",\n        labelChecked: \"\",\n        controlLabel: \"\",\n        materialDecorator: \"checkbox-material\",\n        other: \"sv_q_checkbox_other form-control\",\n        column: \"sv_q_select_column\",\n    },\n    ranking: {\n        root: \"sv-ranking\",\n        rootMobileMod: \"sv-ranking--mobile\",\n        rootDragMod: \"sv-ranking--drag\",\n        rootDisabled: \"sv-ranking--disabled\",\n        rootDragHandleAreaIcon: \"sv-ranking--drag-handle-area-icon\",\n        rootSelectToRankMod: \"sv-ranking--select-to-rank\",\n        rootSelectToRankAlignVertical: \"sv-ranking--select-to-rank-vertical\",\n        rootSelectToRankAlignHorizontal: \"sv-ranking--select-to-rank-horizontal\",\n        item: \"sv-ranking-item\",\n        itemContent: \"sv-ranking-item__content\",\n        itemIndex: \"sv-ranking-item__index\",\n        itemIndexEmptyMode: \"sv-ranking-item__index--empty\",\n        // itemText: \"sv-ranking-item__text\",\n        controlLabel: \"sv-ranking-item__text\",\n        itemGhostNode: \"sv-ranking-item__ghost\",\n        itemIconContainer: \"sv-ranking-item__icon-container\",\n        itemIcon: \"sv-ranking-item__icon\",\n        itemIconHoverMod: \"sv-ranking-item__icon--hover\",\n        itemIconFocusMod: \"sv-ranking-item__icon--focus\",\n        itemGhostMod: \"sv-ranking-item--ghost\",\n        itemDragMod: \"sv-ranking-item--drag\",\n        container: \"sv-ranking__container\",\n        containerEmptyMode: \"sv-ranking__container--empty\",\n        containerFromMode: \"sv-ranking__container--from\",\n        containerToMode: \"sv-ranking__container--to\",\n        containerPlaceholder: \"sv-ranking__container-placeholder\",\n        containersDivider: \"sv-ranking__containers-divider\",\n    },\n    comment: \"form-control\",\n    dropdown: {\n        root: \"sv_q_dd_root\",\n        popup: \"sv-dropdown-popup\",\n        selectWrapper: \"sv_q_dd_select_wrapper\",\n        control: \"form-control sv_q_dd_control\",\n        controlValue: \"sv_q_dd_value\",\n        other: \"sv_q_dd_other form-control\",\n        cleanButton: \"sv_q_dd_clean-button\",\n        cleanButtonSvg: \"sv_q_dd_clean-button-svg\",\n        cleanButtonIconId: \"icon-clear_16x16\",\n        filterStringInput: \"sv_q_dd_filter-string-input\",\n        hintPrefix: \"sv_q_dd_hint-prefix\",\n        hintSuffix: \"sv_q_dd_hint-suffix\"\n    },\n    tagbox: {\n        root: \"sv_q_dd_root\",\n        popup: \"sv-dropdown-popup\",\n        selectWrapper: \"sv_q_dd_select_wrapper\",\n        control: \"form-control sv_q_dd_control\",\n        controlValue: \"sv_q_dd_value\",\n        other: \"sv_q_dd_other form-control\",\n        cleanButton: \"sv_q_dd_clean-button\",\n        cleanButtonSvg: \"sv_q_dd_clean-button-svg\",\n        cleanButtonIconId: \"icon-clear_16x16\",\n        filterStringInput: \"sv_q_dd_filter-string-input\",\n    },\n    html: { root: \"\" },\n    image: { root: \"sv_q_image\", image: \"sv_image_image\" },\n    matrix: {\n        root: \"table sv_q_matrix\",\n        label: \"sv_q_m_label\",\n        itemChecked: \"checked\",\n        itemDecorator: \"sv-hidden\",\n        cellText: \"sv_q_m_cell_text\",\n        cellTextSelected: \"sv_q_m_cell_selected bg-primary\",\n        cellLabel: \"sv_q_m_cell_label\",\n        cellResponsiveTitle: \"sv-hidden\"\n    },\n    matrixdropdown: {\n        root: \"table\",\n        cell: \"sv_matrix_cell\",\n        headerCell: \"sv_matrix_cell_header\",\n        row: \"sv_matrix_row\",\n        rowAdditional: \"sv-matrix__row--additional\",\n        detailRow: \"sv_matrix_detail_row\",\n        detailRowText: \"sv_matrix_cell_detail_rowtext\",\n        detailCell: \"sv_matrix_cell_detail\",\n        detailButton: \"sv_matrix_cell_detail_button\",\n        detailButtonExpanded: \"sv_matrix_cell_detail_button_expanded\",\n        detailIcon: \"sv_detail_panel_icon\",\n        detailIconExpanded: \"sv_detail_expanded\",\n        detailPanelCell: \"sv_matrix_cell_detail_panel\",\n        actionsCell: \"sv_matrix_cell sv_matrix_cell_actions\",\n    },\n    matrixdynamic: {\n        root: \"table\",\n        button: \"button\",\n        buttonAdd: \"\",\n        buttonRemove: \"\",\n        iconAdd: \"\",\n        iconRemove: \"\",\n        iconDrag: \"sv-matrixdynamic__drag-icon\",\n        headerCell: \"sv_matrix_cell_header\",\n        row: \"sv_matrix_row\",\n        detailRow: \"sv_matrix_detail_row\",\n        detailCell: \"sv_matrix_cell_detail\",\n        detailButton: \"sv_matrix_cell_detail_button\",\n        detailButtonExpanded: \"sv_matrix_cell_detail_button_expanded\",\n        detailIcon: \"sv_detail_panel_icon\",\n        detailIconExpanded: \"sv_detail_expanded\",\n        detailPanelCell: \"sv_matrix_cell_detail_panel\",\n        actionsCell: \"sv_matrix_cell sv_matrix_cell_actions\",\n        emptyRowsSection: \"sv_matrix_empty_rows_section\",\n        emptyRowsText: \"sv_matrix_empty_rows_text\",\n        emptyRowsButton: \"\",\n        ghostRow: \"sv-matrix-row--drag-drop-ghost-mod\"\n    },\n    paneldynamic: {\n        root: \"\",\n        navigation: \"sv-paneldynamic__navigation\",\n        progressTop: \"sv-paneldynamic__progress sv-paneldynamic__progress--top\",\n        progressBottom: \"sv-paneldynamic__progress sv-paneldynamic__progress--bottom\",\n        title: \"sv-title sv-question__title\",\n        button: \"button\",\n        buttonAdd: \"button sv-paneldynamic__add-btn\",\n        buttonRemove: \"sv_p_remove_btn\",\n        buttonRemoveRight: \"button sv-paneldynamic__remove-btn--right\",\n        buttonPrev: \"sv-paneldynamic__prev-btn\",\n        buttonNext: \"sv-paneldynamic__next-btn\",\n        buttonPrevDisabled: \"sv-paneldynamic__prev-btn--disabled\",\n        buttonNextDisabled: \"sv-paneldynamic__next-btn--disabled\",\n        progressContainer: \"sv-paneldynamic__progress-container\",\n        progress: \"sv-progress\",\n        progressBar: \"sv-progress__bar\",\n        progressText: \"sv-paneldynamic__progress-text\",\n        panelWrapper: \"sv_p_wrapper\",\n        panelWrapperInRow: \"sv_p_wrapper_in_row\",\n        footer: \"\",\n        progressBtnIcon: \"icon-progressbutton\"\n    },\n    multipletext: {\n        root: \"sv_q_mt table\",\n        itemTitle: \"sv_q_mt_title\",\n        item: \"sv_q_mt_item\",\n        itemLabel: \"sv_q_mt_label\",\n        row: \"form-group bmd-form-group\",\n        itemValue: \"sv_q_mt_item_value form-control\",\n    },\n    radiogroup: {\n        root: \"sv_qcbc form-inline\",\n        item: \"radio\",\n        itemChecked: \"checked\",\n        itemInline: \"sv_q_radiogroup_inline\",\n        label: \"\",\n        labelChecked: \"\",\n        itemControl: \"\",\n        itemDecorator: \"sv-hidden\",\n        controlLabel: \"\",\n        materialDecorator: \"circle\",\n        other: \"sv_q_radiogroup_other form-control\",\n        clearButton: \"sv_q_radiogroup_clear button\",\n        column: \"sv_q_select_column\",\n    },\n    buttongroup: {\n        root: \"sv-button-group\",\n        item: \"sv-button-group__item\",\n        itemIcon: \"sv-button-group__item-icon\",\n        itemDecorator: \"sv-button-group__item-decorator\",\n        itemCaption: \"sv-button-group__item-caption\",\n        itemHover: \"sv-button-group__item--hover\",\n        itemSelected: \"sv-button-group__item--selected\",\n        itemDisabled: \"sv-button-group__item--disabled\",\n        itemControl: \"sv-visuallyhidden\",\n    },\n    imagepicker: {\n        root: \"sv_imgsel\",\n        item: \"sv_q_imgsel\",\n        itemChecked: \"checked\",\n        itemInline: \"sv_q_imagepicker_inline\",\n        label: \"sv_q_imgsel_label\",\n        itemControl: \"sv_q_imgsel_control_item\",\n        image: \"sv_q_imgsel_image\",\n        itemText: \"sv_q_imgsel_text\",\n        clearButton: \"sv_q_radiogroup_clear\",\n    },\n    rating: {\n        root: \"btn-group\",\n        item: \"btn btn-default btn-secondary\",\n        selected: \"active\",\n        minText: \"sv_q_rating_min_text\",\n        itemText: \"sv_q_rating_item_text\",\n        maxText: \"sv_q_rating_max_text\",\n        disabled: \"\",\n    },\n    text: \"form-control\",\n    expression: \"form-control\",\n    file: {\n        root: \"sv_q_file\",\n        placeholderInput: \"sv_q_file_placeholder\",\n        preview: \"sv_q_file_preview\",\n        removeButton: \"sv_q_file_remove_button\",\n        fileInput: \"sv_q_file_input\",\n        removeFile: \"sv_q_file_remove\",\n        fileDecorator: \"sv-hidden\",\n        fileSign: \"sv_q_file_sign\",\n        removeButtonBottom: \"sv-hidden\",\n        dragAreaPlaceholder: \"sv-hidden\",\n        fileList: \"\",\n    },\n    signaturepad: {\n        root: \"sv_q_signaturepad sjs_sp_container\",\n        controls: \"sjs_sp_controls\",\n        placeholder: \"sjs_sp_placeholder\",\n        canvas: \"sjs_sp_canvas\",\n        backgroundImage: \"sjs_sp__background-image\",\n        clearButton: \"sjs_sp_clear\",\n    },\n    saveData: {\n        root: \"\",\n        info: \"alert alert-info\",\n        error: \"alert alert-danger\",\n        success: \"alert alert-success\",\n        button: \"\",\n    },\n    window: {\n        root: \"modal-content\",\n        body: \"modal-body\",\n        header: {\n            root: \"modal-header panel-title\",\n            title: \"pull-left\",\n            button: \"glyphicon pull-right\",\n            buttonExpanded: \"glyphicon pull-right glyphicon-chevron-up\",\n            buttonCollapsed: \"glyphicon pull-right glyphicon-chevron-down\",\n        },\n    },\n};\n\n\n/***/ }),\n\n/***/ \"./src/plugins/themes/bootstrap/theme-settings.ts\":\n/*!********************************************************!*\\\n  !*** ./src/plugins/themes/bootstrap/theme-settings.ts ***!\n  \\********************************************************/\n/*! exports provided: bootstrapThemeName, bootstrapThemeColors, bootstrapThemeCssRules */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_2344189__) {\n\n\"use strict\";\n__nested_webpack_require_2344189__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_2344189__.d(__nested_webpack_exports__, \"bootstrapThemeName\", function() { return bootstrapThemeName; });\n/* harmony export (binding) */ __nested_webpack_require_2344189__.d(__nested_webpack_exports__, \"bootstrapThemeColors\", function() { return bootstrapThemeColors; });\n/* harmony export (binding) */ __nested_webpack_require_2344189__.d(__nested_webpack_exports__, \"bootstrapThemeCssRules\", function() { return bootstrapThemeCssRules; });\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_2344189__(/*! survey-core */ \"./src/entries/core.ts\");\n/* harmony import */ var _common_theme_settings__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_2344189__(/*! ../common-theme-settings */ \"./src/plugins/themes/common-theme-settings.ts\");\n/* harmony import */ var _cssbootstrap__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_2344189__(/*! ./cssbootstrap */ \"./src/plugins/themes/bootstrap/cssbootstrap.ts\");\n\n\n\nvar bootstrapThemeName = \"bootstrap\";\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyCss\"][bootstrapThemeName] = _cssbootstrap__WEBPACK_IMPORTED_MODULE_2__[\"defaultCss\"];\nvar bootstrapThemeColors = {\n    \"$main-color\": \"#18a689\",\n    \"$text-color\": \"#404040;\",\n    \"$text-input-color\": \"#404040;\",\n    \"$progress-text-color\": \"#9d9d9d\",\n    \"$disable-color\": \"#dbdbdb\",\n    \"$header-background-color\": \"#e7e7e7\",\n    \"$disabled-label-color\": \"rgba(64, 64, 64, 0.5)\",\n    \"$slider-color\": \"white\",\n    \"$disabled-switch-color\": \"#9f9f9f\",\n    \"$disabled-slider-color\": \"#cfcfcf\",\n    \"$foreground-light\": \"#909090\",\n    \"$foreground-disabled\": \"#161616\",\n    \"$background-dim\": \"#f3f3f3\",\n    \"$progress-buttons-color\": \"#8dd6c7\",\n    \"$progress-buttons-line-color\": \"#d4d4d4\",\n};\nvar bootstrapThemeCssRules = {\n    \".sv_main .sv_q_imgsel.checked label>div\": \"background-color: $main-color\",\n    \".sv_main .sv_p_description\": \"padding-left: 1.66em;\",\n    \".sv_main .sv_qstn_error_bottom\": \"margin-top: 20px; margin-bottom: 0;\",\n    \".sv_main .progress\": \"width: 60%;\",\n    \".sv_main .progress-bar\": \"width: auto; margin-left: 2px; margin-right: 2px;\",\n    \".sv_main .table>tbody>tr>td\": \"min-width: 90px;\",\n    \".sv_main f-panel .sv_qstn\": \"padding: 0; vertical-align: middle;\",\n    \".sv_main .sv_q_image\": \"display: inline-block;\",\n    \".sv_main .sv_row .sv_qstn:first-child:last-child\": \"flex: none !important;\",\n    \".sv_main .sv_row .sv_p_container:first-child:last-child\": \"flex: none !important;\",\n    //progress bar\n    \".sv_main .sv-progress\": \"background-color: $header-background-color;\",\n    \".sv_main .sv-progress__bar\": \"background-color: $main-color;\",\n    //progress buttons\n    \".sv_main .sv_progress-buttons__list li:before\": \"border-color: $progress-buttons-color; background-color: $progress-buttons-color;\",\n    \".sv_main .sv_progress-buttons__list li:after\": \"background-color: $progress-buttons-line-color;\",\n    \".sv_main .sv_progress-buttons__list .sv_progress-buttons__page-title\": \"color: $text-color;\",\n    \".sv_main .sv_progress-buttons__list .sv_progress-buttons__page-description\": \"color: $text-color;\",\n    \".sv_main .sv_progress-buttons__list li.sv_progress-buttons__list-element--passed:before\": \"border-color: $main-color; background-color: $main-color;\",\n    \".sv_main .sv_progress-buttons__list li.sv_progress-buttons__list-element--passed + li:after\": \"background-color: $progress-buttons-color\",\n    \".sv_main .sv_progress-buttons__list li.sv_progress-buttons__list-element--current:before\": \"border-color: $main-color; background-color: white;\",\n    \".sv_main .sv_progress-buttons__list li.sv_progress-buttons__list-element--passed.sv_progress-buttons__list-element--current:before\": \"border-color: $main-color; background-color: white;\",\n    //paneldynamic\n    \".sv_main .sv-paneldynamic__prev-btn.sv-paneldynamic__prev-btn--disabled, .sv_main .sv-paneldynamic__next-btn.sv-paneldynamic__next-btn--disabled\": \"fill: $disable-color;\",\n    \".sv_main .sv-paneldynamic__progress-text\": \"color: $progress-text-color;\",\n    \".sv_main .sv-paneldynamic__prev-btn, .sv_main .sv-paneldynamic__next-btn\": \"fill: $text-color\",\n    //boolean\n    \".sv_main .sv-boolean__switch\": \"background-color: $main-color;\",\n    \".sv_main .sv-boolean__slider\": \"background-color: $slider-color;\",\n    \".sv_main .sv-boolean__label--disabled\": \"color: $disabled-label-color;\",\n    \".sv_main .sv-boolean--disabled .sv-boolean__switch\": \"background-color: $disabled-switch-color;\",\n    \".sv_main .sv-boolean--disabled  .sv-boolean__slider\": \"background-color: $disabled-slider-color;\",\n    //eo boolean\n    //signature pad\n    \".sv_main .sjs_sp_container\": \"border: 1px dashed $disable-color;\",\n    \".sv_main .sjs_sp_placeholder\": \"color: $foreground-light;\",\n    \".sv_main .sv_matrix_detail_row\": \"background-color: #ededed; border-top: 1px solid $header-background-color; border-bottom: 1px solid $header-background-color;\",\n    \".sv_main .sv-action-bar-item\": \"color: $text-color;\",\n    \".sv_main .sv-action-bar-item__icon use\": \"fill: $foreground-light;\",\n    \".sv_main .sv-action-bar-item:hover\": \"background-color: $background-dim;\",\n    \".sv-skeleton-element\": \"background-color: $background-dim;\",\n};\nObject(_common_theme_settings__WEBPACK_IMPORTED_MODULE_1__[\"setStyles\"])();\nObject(_common_theme_settings__WEBPACK_IMPORTED_MODULE_1__[\"setMediaStyles\"])();\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"StylesManager\"].ThemeColors[bootstrapThemeName] = bootstrapThemeColors;\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"StylesManager\"].ThemeCss[bootstrapThemeName] = bootstrapThemeCssRules;\n\n\n/***/ }),\n\n/***/ \"./src/plugins/themes/bootstrapmaterial/cssbootstrapmaterial.ts\":\n/*!**********************************************************************!*\\\n  !*** ./src/plugins/themes/bootstrapmaterial/cssbootstrapmaterial.ts ***!\n  \\**********************************************************************/\n/*! exports provided: defaultCss */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_2350180__) {\n\n\"use strict\";\n__nested_webpack_require_2350180__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_2350180__.d(__nested_webpack_exports__, \"defaultCss\", function() { return defaultCss; });\nvar defaultCss = {\n    root: \"sv_main sv_bootstrapmaterial_css\",\n    container: \"sv_container\",\n    header: \"card-heading\",\n    body: \"card-body\",\n    bodyEmpty: \"card-body sv_body_empty\",\n    footer: \"card-footer\",\n    title: \"\",\n    description: \"\",\n    logo: \"sv_logo\",\n    logoImage: \"sv_logo__image\",\n    headerText: \"sv_header__text\",\n    navigationButton: \"btn-primary sv_nav_btn\",\n    completedPage: \"\",\n    navigation: {\n        complete: \"sv_complete_btn\",\n        prev: \"sv_prev_btn\",\n        next: \"sv_next_btn\",\n        start: \"sv_start_btn\",\n        preview: \"sv_preview_btn\",\n        edit: \"sv_edit_btn\",\n    },\n    progress: \"progress center-block mx-auto mb-4\",\n    progressBar: \"progress-bar\",\n    progressTextUnderBar: \"sv-hidden\",\n    progressTextInBar: \"sv-hidden\",\n    progressButtonsContainerCenter: \"sv_progress-buttons__container-center\",\n    progressButtonsContainer: \"sv_progress-buttons__container\",\n    progressButtonsImageButtonLeft: \"sv_progress-buttons__image-button-left\",\n    progressButtonsImageButtonRight: \"sv_progress-buttons__image-button-right\",\n    progressButtonsImageButtonHidden: \"sv_progress-buttons__image-button--hidden\",\n    progressButtonsListContainer: \"sv_progress-buttons__list-container\",\n    progressButtonsList: \"sv_progress-buttons__list\",\n    progressButtonsListElementPassed: \"sv_progress-buttons__list-element--passed\",\n    progressButtonsListElementCurrent: \"sv_progress-buttons__list-element--current\",\n    progressButtonsListElementNonClickable: \"sv_progress-buttons__list-element--nonclickable\",\n    progressButtonsPageTitle: \"sv_progress-buttons__page-title\",\n    progressButtonsPageDescription: \"sv_progress-buttons__page-description\",\n    page: {\n        root: \"\",\n        title: \"\",\n        description: \"small\",\n    },\n    pageTitle: \"\",\n    pageDescription: \"small\",\n    row: \"sv_row\",\n    question: {\n        mainRoot: \"sv_qstn form-group bmd-form-group\",\n        flowRoot: \"sv_q_flow form-group bmd-form-group\",\n        header: \"\",\n        headerLeft: \"title-left\",\n        content: \"\",\n        contentLeft: \"content-left\",\n        titleLeftRoot: \"sv_qstn_left\",\n        requiredText: \"sv_q_required_text\",\n        title: \"\",\n        titleExpandable: \"sv_q_title_expandable\",\n        titleExpanded: \"sv_q_title_expanded\",\n        titleCollapsed: \"sv_q_title_collapsed\",\n        number: \"sv_q_num\",\n        description: \"small\",\n        descriptionUnderInput: \"small\",\n        comment: \"form-control\",\n        required: \"\",\n        titleRequired: \"\",\n        hasError: \"has-error\",\n        indent: 20,\n        formGroup: \"form-group bmd-form-group\",\n        disabled: \"sv_q--disabled\",\n    },\n    panel: {\n        title: \"sv_p_title\",\n        titleExpandable: \"sv_p_title_expandable\",\n        titleExpanded: \"sv_p_title_expanded\",\n        titleCollapsed: \"sv_p_title_collapsed\",\n        titleOnError: \"\",\n        icon: \"sv_panel_icon\",\n        iconExpanded: \"sv_expanded\",\n        description: \"small sv_p_description\",\n        container: \"sv_p_container\",\n        footer: \"sv_p_footer\",\n        number: \"sv_q_num\",\n        requiredText: \"sv_q_required_text\",\n    },\n    error: {\n        root: \"alert alert-danger\",\n        icon: \"glyphicon glyphicon-exclamation-sign\",\n        item: \"\",\n        locationTop: \"sv_qstn_error_top\",\n        locationBottom: \"sv_qstn_error_bottom\",\n    },\n    boolean: {\n        root: \"sv_qbln checkbox\",\n        rootRadio: \"sv_qbln form-inline checkbox\",\n        item: \"sv-boolean\",\n        control: \"sv-visuallyhidden\",\n        controlCheckbox: \"sv-visuallyhidden\",\n        itemChecked: \"sv-boolean--checked checked\",\n        itemIndeterminate: \"sv-boolean--indeterminate\",\n        itemDisabled: \"sv-boolean--disabled\",\n        switch: \"sv-boolean__switch\",\n        slider: \"sv-boolean__slider\",\n        label: \"sv-boolean__label \",\n        disabledLabel: \"sv-boolean__label--disabled\",\n        sliderGhost: \"sv-boolean__thumb-ghost\",\n        materialDecorator: \"sv-item__decorator sv-boolean__decorator\",\n        itemDecorator: \"sv-item__svg sv-boolean__svg\",\n        checkedPath: \"sv-boolean__checked-path\",\n        uncheckedPath: \"sv-boolean__unchecked-path\",\n        indeterminatePath: \"sv-boolean__indeterminate-path\",\n    },\n    checkbox: {\n        root: \"sv_qcbx\",\n        item: \"checkbox\",\n        itemChecked: \"checked\",\n        itemSelectAll: \"sv_q_checkbox_selectall\",\n        itemNone: \"sv_q_checkbox_none\",\n        itemInline: \"sv_q_checkbox_inline\",\n        itemDecorator: \"sv-hidden\",\n        itemControl: \"\",\n        label: \"\",\n        labelChecked: \"\",\n        controlLabel: \"\",\n        materialDecorator: \"checkbox-decorator\",\n        other: \"sv_q_checkbox_other form-control\",\n        column: \"sv_q_select_column\",\n    },\n    ranking: {\n        root: \"sv-ranking\",\n        rootMobileMod: \"sv-ranking--mobile\",\n        rootDragMod: \"sv-ranking--drag\",\n        rootDisabled: \"sv-ranking--disabled\",\n        rootDragHandleAreaIcon: \"sv-ranking--drag-handle-area-icon\",\n        rootSelectToRankMod: \"sv-ranking--select-to-rank\",\n        rootSelectToRankAlignVertical: \"sv-ranking--select-to-rank-vertical\",\n        rootSelectToRankAlignHorizontal: \"sv-ranking--select-to-rank-horizontal\",\n        item: \"sv-ranking-item\",\n        itemContent: \"sv-ranking-item__content\",\n        itemIndex: \"sv-ranking-item__index\",\n        itemIndexEmptyMode: \"sv-ranking-item__index--empty\",\n        // itemText: \"sv-ranking-item__text\",\n        controlLabel: \"sv-ranking-item__text\",\n        itemGhostNode: \"sv-ranking-item__ghost\",\n        itemIconContainer: \"sv-ranking-item__icon-container\",\n        itemIcon: \"sv-ranking-item__icon\",\n        itemIconHoverMod: \"sv-ranking-item__icon--hover\",\n        itemIconFocusMod: \"sv-ranking-item__icon--focus\",\n        itemGhostMod: \"sv-ranking-item--ghost\",\n        itemDragMod: \"sv-ranking-item--drag\",\n        container: \"sv-ranking__container\",\n        containerEmptyMode: \"sv-ranking__container--empty\",\n        containerFromMode: \"sv-ranking__container--from\",\n        containerToMode: \"sv-ranking__container--to\",\n        containerPlaceholder: \"sv-ranking__container-placeholder\",\n        containersDivider: \"sv-ranking__containers-divider\",\n    },\n    comment: \"form-control\",\n    dropdown: {\n        root: \"sv_q_dd_root\",\n        popup: \"sv-dropdown-popup\",\n        selectWrapper: \"sv_q_dd_select_wrapper\",\n        control: \"form-control sv_q_dd_control\",\n        controlValue: \"sv_q_dd_value\",\n        other: \"sv_q_dd_other form-control\",\n        cleanButton: \"sv_q_dd_clean-button\",\n        cleanButtonSvg: \"sv_q_dd_clean-button-svg\",\n        cleanButtonIconId: \"icon-clear_16x16\",\n        filterStringInput: \"sv_q_dd_filter-string-input\",\n    },\n    tagbox: {\n        root: \"sv_q_dd_root\",\n        popup: \"sv-dropdown-popup\",\n        selectWrapper: \"sv_q_dd_select_wrapper\",\n        control: \"form-control sv_q_dd_control\",\n        controlValue: \"sv_q_dd_value\",\n        other: \"sv_q_dd_other form-control\",\n        cleanButton: \"sv_q_dd_clean-button\",\n        cleanButtonSvg: \"sv_q_dd_clean-button-svg\",\n        cleanButtonIconId: \"icon-clear_16x16\",\n        filterStringInput: \"sv_q_dd_filter-string-input\",\n    },\n    html: { root: \"\" },\n    image: { root: \"sv_q_image\", image: \"sv_image_image\" },\n    matrix: {\n        root: \"table sv_q_matrix\",\n        row: \"form-group bmd-form-group\",\n        label: \"sv_q_m_label radio-inline\",\n        cellText: \"sv_q_m_cell_text\",\n        cellTextSelected: \"sv_q_m_cell_selected bg-primary\",\n        cellLabel: \"sv_q_m_cell_label\",\n        itemValue: \"form-control\",\n        itemChecked: \"checked\",\n        itemDecorator: \"sv-hidden\",\n        materialDecorator: \"bmd-radio\",\n        cellResponsiveTitle: \"sv-hidden\"\n    },\n    matrixdropdown: {\n        root: \"table\",\n        itemValue: \"form-group bmd-form-group\",\n        headerCell: \"sv_matrix_cell_header\",\n        row: \"sv_matrix_row\",\n        rowAdditional: \"sv-matrix__row--additional\",\n        detailRow: \"sv_matrix_detail_row\",\n        detailRowText: \"sv_matrix_cell_detail_rowtext\",\n        detailCell: \"sv_matrix_cell_detail\",\n        detailButton: \"sv_matrix_cell_detail_button\",\n        detailButtonExpanded: \"sv_matrix_cell_detail_button_expanded\",\n        detailIcon: \"sv_detail_panel_icon\",\n        detailIconExpanded: \"sv_detail_expanded\",\n        detailPanelCell: \"sv_matrix_cell_detail_panel\",\n        actionsCell: \"sv_matrix_cell sv_matrix_cell_actions\",\n    },\n    matrixdynamic: {\n        mainRoot: \"sv_qstn\",\n        flowRoot: \"sv_q_flow\",\n        root: \"table\",\n        button: \"btn btn-primary\",\n        itemValue: \"form-group bmd-form-group\",\n        buttonAdd: \"\",\n        buttonRemove: \"\",\n        iconAdd: \"\",\n        iconRemove: \"\",\n        iconDrag: \"sv-matrixdynamic__drag-icon\",\n        headerCell: \"sv_matrix_cell_header\",\n        row: \"sv_matrix_row\",\n        detailRow: \"sv_matrix_detail_row\",\n        detailCell: \"sv_matrix_cell_detail\",\n        detailButton: \"sv_matrix_cell_detail_button\",\n        detailButtonExpanded: \"sv_matrix_cell_detail_button_expanded\",\n        detailIcon: \"sv_detail_panel_icon\",\n        detailIconExpanded: \"sv_detail_expanded\",\n        detailPanelCell: \"sv_matrix_cell_detail_panel\",\n        actionsCell: \"sv_matrix_cell sv_matrix_cell_actions\",\n        emptyRowsSection: \"sv_matrix_empty_rows_section\",\n        emptyRowsText: \"sv_matrix_empty_rows_text\",\n        emptyRowsButton: \"\",\n        ghostRow: \"sv-matrix-row--drag-drop-ghost-mod\"\n    },\n    paneldynamic: {\n        root: \"\",\n        navigation: \"sv-paneldynamic__navigation\",\n        progressTop: \"sv-paneldynamic__progress sv-paneldynamic__progress--top\",\n        progressBottom: \"sv-paneldynamic__progress sv-paneldynamic__progress--bottom\",\n        title: \"sv-title sv-question__title\",\n        button: \"button\",\n        buttonAdd: \"button sv-paneldynamic__add-btn btn btn-primary\",\n        buttonRemove: \"button sv-paneldynamic__remove-btn btn btn-primary\",\n        buttonRemoveRight: \"sv-paneldynamic__remove-btn--right\",\n        buttonPrev: \"sv-paneldynamic__prev-btn\",\n        buttonNext: \"sv-paneldynamic__next-btn\",\n        buttonPrevDisabled: \"sv-paneldynamic__prev-btn--disabled\",\n        buttonNextDisabled: \"sv-paneldynamic__next-btn--disabled\",\n        progressContainer: \"sv-paneldynamic__progress-container\",\n        progress: \"sv-progress\",\n        progressBar: \"sv-progress__bar\",\n        progressText: \"sv-paneldynamic__progress-text\",\n        panelWrapper: \"sv_p_wrapper\",\n        panelWrapperInRow: \"sv_p_wrapper_in_row\",\n        progressBtnIcon: \"icon-progressbutton\",\n        footer: \"\"\n    },\n    multipletext: {\n        root: \"sv_q_mt table\",\n        itemTitle: \"sv_q_mt_title\",\n        item: \"sv_q_mt_item\",\n        itemLabel: \"sv_q_mt_label\",\n        row: \"form-group bmd-form-group\",\n        itemValue: \"sv_q_mt_item_value form-control\",\n    },\n    radiogroup: {\n        root: \"\",\n        item: \"radio\",\n        itemChecked: \"checked\",\n        itemInline: \"sv_q_radiogroup_inline\",\n        itemDecorator: \"sv-hidden\",\n        label: \"\",\n        labelChecked: \"\",\n        itemControl: \"\",\n        controlLabel: \"sv_q_radiogroup_control_label\",\n        materialDecorator: \"bmd-radio\",\n        other: \"sv_q_radiogroup_other form-control\",\n        clearButton: \"sv_q_radiogroup_clear button btn btn-primary\",\n        column: \"sv_q_select_column\",\n    },\n    buttongroup: {\n        root: \"sv-button-group\",\n        item: \"sv-button-group__item\",\n        itemIcon: \"sv-button-group__item-icon\",\n        itemDecorator: \"sv-button-group__item-decorator\",\n        itemCaption: \"sv-button-group__item-caption\",\n        itemSelected: \"sv-button-group__item--selected\",\n        itemHover: \"sv-button-group__item--hover\",\n        itemDisabled: \"sv-button-group__item--disabled\",\n        itemControl: \"sv-visuallyhidden\",\n    },\n    imagepicker: {\n        root: \"sv_imgsel\",\n        item: \"sv_q_imgsel\",\n        itemChecked: \"checked\",\n        itemInline: \"sv_q_imagepicker_inline\",\n        label: \"sv_q_imgsel_label\",\n        itemControl: \"sv_q_imgsel_control_item\",\n        image: \"sv_q_imgsel_image\",\n        itemText: \"sv_q_imgsel_text\",\n        clearButton: \"sv_q_radiogroup_clear\",\n    },\n    rating: {\n        root: \"btn-group\",\n        item: \"btn btn-default btn-secondary\",\n        selected: \"active\",\n        minText: \"sv_q_rating_min_text\",\n        itemText: \"sv_q_rating_item_text\",\n        maxText: \"sv_q_rating_max_text\",\n        disabled: \"\",\n    },\n    text: \"form-control\",\n    expression: \"form-control\",\n    file: {\n        root: \"form-group bmd-form-group is-fileinput sv_q_file\",\n        placeholderInput: \"\",\n        preview: \"sv_q_file_preview\",\n        removeButton: \"sv_q_file_remove_button\",\n        fileInput: \"sv_q_file_input\",\n        fileSign: \"sv_q_file_sign\",\n        removeFile: \"sv_q_file_remove\",\n        fileDecorator: \"sv-hidden\",\n        removeButtonBottom: \"sv-hidden\",\n        dragAreaPlaceholder: \"sv-hidden\",\n        fileList: \"\",\n    },\n    signaturepad: {\n        root: \"sv_q_signaturepad sjs_sp_container\",\n        controls: \"sjs_sp_controls\",\n        placeholder: \"sjs_sp_placeholder\",\n        canvas: \"sjs_sp_canvas\",\n        backgroundImage: \"sjs_sp__background-image\",\n        clearButton: \"sjs_sp_clear\",\n    },\n    saveData: {\n        root: \"\",\n        info: \"alert alert-info\",\n        error: \"alert alert-danger\",\n        success: \"alert alert-success\",\n        button: \"\",\n    },\n    window: {\n        root: \"modal-content\",\n        body: \"modal-body\",\n        header: {\n            root: \"modal-header card-title\",\n            title: \"pull-left\",\n            button: \"glyphicon pull-right\",\n            buttonExpanded: \"glyphicon pull-right glyphicon-chevron-up\",\n            buttonCollapsed: \"glyphicon pull-right glyphicon-chevron-down\",\n        },\n    },\n};\n\n\n/***/ }),\n\n/***/ \"./src/plugins/themes/bootstrapmaterial/theme-settings.ts\":\n/*!****************************************************************!*\\\n  !*** ./src/plugins/themes/bootstrapmaterial/theme-settings.ts ***!\n  \\****************************************************************/\n/*! exports provided: bootstrapMaterialThemeName, bootstrapMaterialThemeColors, bootstrapMaterialThemeCssRules */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_2364639__) {\n\n\"use strict\";\n__nested_webpack_require_2364639__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_2364639__.d(__nested_webpack_exports__, \"bootstrapMaterialThemeName\", function() { return bootstrapMaterialThemeName; });\n/* harmony export (binding) */ __nested_webpack_require_2364639__.d(__nested_webpack_exports__, \"bootstrapMaterialThemeColors\", function() { return bootstrapMaterialThemeColors; });\n/* harmony export (binding) */ __nested_webpack_require_2364639__.d(__nested_webpack_exports__, \"bootstrapMaterialThemeCssRules\", function() { return bootstrapMaterialThemeCssRules; });\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_2364639__(/*! survey-core */ \"./src/entries/core.ts\");\n/* harmony import */ var _common_theme_settings__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_2364639__(/*! ../common-theme-settings */ \"./src/plugins/themes/common-theme-settings.ts\");\n/* harmony import */ var _cssbootstrapmaterial__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_2364639__(/*! ./cssbootstrapmaterial */ \"./src/plugins/themes/bootstrapmaterial/cssbootstrapmaterial.ts\");\n\n\n\nvar bootstrapMaterialThemeName = \"bootstrapmaterial\";\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"surveyCss\"][bootstrapMaterialThemeName] = _cssbootstrapmaterial__WEBPACK_IMPORTED_MODULE_2__[\"defaultCss\"];\nvar bootstrapMaterialThemeColors = {\n    \"$main-color\": \"#18a689\",\n    \"$text-color\": \"#404040;\",\n    \"$text-input-color\": \"#404040;\",\n    \"$progress-text-color\": \"#9d9d9d\",\n    \"$disable-color\": \"#dbdbdb\",\n    \"$header-background-color\": \"#e7e7e7\",\n    \"$disabled-label-color\": \"rgba(64, 64, 64, 0.5)\",\n    \"$slider-color\": \"white\",\n    \"$disabled-switch-color\": \"#9f9f9f\",\n    \"$disabled-slider-color\": \"#cfcfcf\",\n    \"$body-background-color\": \"#ffffff\",\n    \"$foreground-light\": \"#909090\",\n    \"$foreground-disabled\": \"#161616\",\n    \"$background-dim\": \"#f3f3f3\",\n    \"$progress-buttons-color\": \"#8dd6c7\",\n    \"$progress-buttons-line-color\": \"#d4d4d4\",\n};\nvar bootstrapMaterialThemeCssRules = {\n    \".sv_main.sv_bootstrapmaterial_css .form-group.is-focused .form-control\": \"linear-gradient(0deg, $main-color 2px, $main-color 0),linear-gradient(0deg, #D2D2D2 1px, transparent 0);\",\n    \".sv_main.sv_bootstrapmaterial_css .sv_qstn\": \"margin-bottom: 1rem;\",\n    \".sv_main.sv_bootstrapmaterial_css .sv_qstn label.sv_q_m_label\": \"height: 100%;\",\n    \".sv_main.sv_bootstrapmaterial_css .sv_q_image\": \"display: inline-block;\",\n    \".sv_main .sv_row .sv_qstn:first-child:last-child\": \"flex: none !important;\",\n    \".sv_main .sv_row .sv_p_container:first-child:last-child\": \"flex: none !important;\",\n    \".sv_main.sv_bootstrapmaterial_css .checkbox input[type=checkbox]:checked + .checkbox-material .check\": \"border-color: $main-color;\",\n    \".sv_main.sv_bootstrapmaterial_css label.checkbox-inline input[type=checkbox]:checked + .checkbox-material .check\": \"border-color: $main-color;\",\n    \".sv_main.sv_bootstrapmaterial_css .checkbox input[type=checkbox]:checked + .checkbox-material .check:before\": \"color: $main-color;\",\n    \".sv_main.sv_bootstrapmaterial_css label.checkbox-inline input[type=checkbox]:checked + .checkbox-material .check:before\": \"color: $main-color;\",\n    \".sv_main.sv_bootstrapmaterial_css .radio input[type=radio]:checked ~ .circle\": \"border-color: $main-color;\",\n    \".sv_main.sv_bootstrapmaterial_css label.radio-inline input[type=radio]:checked ~ .circle\": \"border-color: $main-color;\",\n    \".sv_main.sv_bootstrapmaterial_css .radio input[type=radio]:checked ~ .check\": \"background-color: $main-color;\",\n    \".sv_main.sv_bootstrapmaterial_css label.radio-inline input[type=radio]:checked ~ .check\": \"background-color: $main-color;\",\n    \".sv_main.sv_bootstrapmaterial_css .btn-default.active\": \"background-color: $main-color; color: $body-background-color;\",\n    \".sv_main.sv_bootstrapmaterial_css .btn-default:active\": \"background-color: $main-color; color: $body-background-color;\",\n    \".sv_main.sv_bootstrapmaterial_css .btn-secondary.active\": \"background-color: $main-color; color: $body-background-color;\",\n    \".sv_main.sv_bootstrapmaterial_css .btn-secondary:active\": \"background-color: $main-color; color: $body-background-color;\",\n    \".sv_main.sv_bootstrapmaterial_css .open>.dropdown-toggle.btn-default\": \"background-color: $main-color; color: $body-background-color;\",\n    \".sv_main.sv_bootstrapmaterial_css input[type='button'].btn-primary, .sv_main.sv_bootstrapmaterial_css button.btn-primary\": \"color: $body-background-color; background-color: $main-color;\",\n    \".sv_main.sv_bootstrapmaterial_css input[type='button'].btn-primary:hover, .sv_main.sv_bootstrapmaterial_css button.btn-primary:hover\": \"background-color: $main-hover-color;\",\n    \".sv_main .sv_q_imgsel.checked label>div\": \"background-color: $main-color;\",\n    \".sv_main.sv_bootstrapmaterial_css .sv_q_file_remove:hover\": \"color: $main-color;\",\n    \".sv_main.sv_bootstrapmaterial_css .form-group input[type=file]\": \"position: relative; opacity: 1;\",\n    \".sv_main.sv_bootstrapmaterial_css .progress\": \"width: 60%; height: 1.5em;\",\n    \".sv_main.sv_bootstrapmaterial_css .progress-bar\": \"width: auto; margin-left: 2px; margin-right: 2px;\",\n    //progress bar\n    \".sv_main .sv-progress\": \"background-color: $header-background-color;\",\n    \".sv_main .sv-progress__bar\": \"background-color: $main-color;\",\n    //progress buttons\n    \".sv_main.sv_bootstrapmaterial_css .sv_progress-buttons__list li:before\": \"border-color: $progress-buttons-color; background-color: $progress-buttons-color;\",\n    \".sv_main.sv_bootstrapmaterial_css .sv_progress-buttons__list li:after\": \"background-color: $progress-buttons-line-color;\",\n    \".sv_main.sv_bootstrapmaterial_css .sv_progress-buttons__list .sv_progress-buttons__page-title\": \"color: $text-color;\",\n    \".sv_main.sv_bootstrapmaterial_css .sv_progress-buttons__list .sv_progress-buttons__page-description\": \"color: $text-color;\",\n    \".sv_main.sv_bootstrapmaterial_css .sv_progress-buttons__list li.sv_progress-buttons__list-element--passed:before\": \"border-color: $main-color; background-color: $main-color;\",\n    \".sv_main.sv_bootstrapmaterial_css .sv_progress-buttons__list li.sv_progress-buttons__list-element--passed + li:after\": \"background-color: $progress-buttons-color\",\n    \".sv_main.sv_bootstrapmaterial_css .sv_progress-buttons__list li.sv_progress-buttons__list-element--current:before\": \"border-color: $main-color; background-color: white;\",\n    \".sv_main.sv_bootstrapmaterial_css .sv_progress-buttons__list li.sv_progress-buttons__list-element--passed.sv_progress-buttons__list-element--current:before\": \"border-color: $main-color; background-color: white;\",\n    //paneldynamic\n    \".sv_main .sv-paneldynamic__prev-btn.sv-paneldynamic__prev-btn--disabled, .sv_main .sv-paneldynamic__next-btn.sv-paneldynamic__next-btn--disabled\": \"fill: $disable-color;\",\n    \".sv_main .sv-paneldynamic__progress-text\": \"color: $progress-text-color;\",\n    \".sv_main .sv-paneldynamic__prev-btn, .sv_main .sv-paneldynamic__next-btn\": \"fill: $text-color\",\n    //boolean\n    \".sv_main .sv-boolean .checkbox-decorator\": \"display: none;\",\n    \".sv_main .sv-boolean__switch\": \"background-color: $main-color;\",\n    \".sv_main .sv-boolean__slider\": \"background-color: $slider-color;\",\n    \".sv_main .sv-boolean__label.sv-boolean__label--disabled\": \"color: $disabled-label-color;\",\n    \".sv_main .sv-boolean__label\": \"color: $text-color;\",\n    \".sv_main .sv-boolean--disabled .sv-boolean__switch\": \"background-color: $disabled-switch-color;\",\n    \".sv_main .sv-boolean--disabled  .sv-boolean__slider\": \"background-color: $disabled-slider-color;\",\n    //eo boolean\n    \".sv_main .sv_matrix_detail_row\": \"background-color: #ededed; border-top: 1px solid $header-background-color; border-bottom: 1px solid $header-background-color;\",\n    //signature pad\n    \".sv_main .sjs_sp_container\": \"border: 1px dashed $disable-color;\",\n    \".sv_main .sjs_sp_placeholder\": \"color: $foreground-light;\",\n    \".sv_main .sv-action-bar-item\": \"color: $text-color;\",\n    \".sv_main .sv-action-bar-item__icon use\": \"fill: $foreground-light;\",\n    \".sv_main .sv-action-bar-item:hover\": \"background-color: $background-dim;\",\n    \".sv-skeleton-element\": \"background-color: $background-dim;\",\n};\nObject(_common_theme_settings__WEBPACK_IMPORTED_MODULE_1__[\"setStyles\"])();\nObject(_common_theme_settings__WEBPACK_IMPORTED_MODULE_1__[\"setMediaStyles\"])();\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"StylesManager\"].ThemeColors[bootstrapMaterialThemeName] = bootstrapMaterialThemeColors;\nsurvey_core__WEBPACK_IMPORTED_MODULE_0__[\"StylesManager\"].ThemeCss[bootstrapMaterialThemeName] = bootstrapMaterialThemeCssRules;\n\n\n/***/ }),\n\n/***/ \"./src/plugins/themes/common-theme-settings.ts\":\n/*!*****************************************************!*\\\n  !*** ./src/plugins/themes/common-theme-settings.ts ***!\n  \\*****************************************************/\n/*! exports provided: setMediaStyles, setStyles */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_2373571__) {\n\n\"use strict\";\n__nested_webpack_require_2373571__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_2373571__.d(__nested_webpack_exports__, \"setMediaStyles\", function() { return setMediaStyles; });\n/* harmony export (binding) */ __nested_webpack_require_2373571__.d(__nested_webpack_exports__, \"setStyles\", function() { return setStyles; });\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_2373571__(/*! survey-core */ \"./src/entries/core.ts\");\n\nfunction setMediaStyles() {\n    survey_core__WEBPACK_IMPORTED_MODULE_0__[\"StylesManager\"].Media = {\n        \".sv_qstn fieldset .sv-q-col-1\": {\n            style: \"width: 100%;\",\n            media: \"@media only screen and (max-width: 480px)\",\n        },\n        \".sv_qstn fieldset .sv-q-col-2\": {\n            style: \"width: 100%;\",\n            media: \"@media only screen and (max-width: 480px)\",\n        },\n        \".sv_qstn fieldset .sv-q-col-3\": {\n            style: \"width: 100%;\",\n            media: \"@media only screen and (max-width: 480px)\",\n        },\n        \".sv_qstn fieldset .sv-q-col-4\": {\n            style: \"width: 100%;\",\n            media: \"@media only screen and (max-width: 480px)\",\n        },\n        \".sv_qstn fieldset .sv-q-col-5\": {\n            style: \"width: 100%;\",\n            media: \"@media only screen and (max-width: 480px)\",\n        },\n        \".sv_main .sv_container .panel-body.card-block .sv_row .sv_qstn\": {\n            style: \"display: block; width: 100% !important;\",\n            media: \"@media (max-width: 600px)\",\n        },\n        \".sv_main .sv_container .panel-body.card-block .sv_row .sv_qstn .title-left\": {\n            style: \"float: none;\",\n            media: \"@media (max-width: 600px)\",\n        },\n        \".sv_main .sv_container .panel-body.card-block .sv_row .sv_qstn .sv_q_radiogroup_inline, .sv_main .sv_container .panel-body.card-block .sv_row .sv_qstn .sv_q_checkbox_inline, .sv_main .sv_container .panel-body.card-block .sv_row .sv_qstn .sv_q_imagepicker_inline\": {\n            style: \"display: block;\",\n            media: \"@media (max-width: 600px)\",\n        },\n        \".sv_main .sv_container .panel-body.card-block .sv_row .sv_qstn table.table\": {\n            style: \"display: block;\",\n            media: \"@media (max-width: 600px)\",\n        },\n        \".sv_main .sv_container .panel-body.card-block .sv_row .sv_qstn table.table thead\": {\n            style: \"display: none;\",\n            media: \"@media (max-width: 600px)\",\n        },\n        \".sv_main .sv_container .panel-body.card-block .sv_row .sv_qstn table.table tbody, .sv_main .sv_container .panel-body.card-block .sv_row .sv_qstn table.table tr, .sv_main .sv_container .panel-body.card-block .sv_row .sv_qstn table.table td\": {\n            style: \"display: block;\",\n            media: \"@media (max-width: 600px)\",\n        },\n        \".sv_main .sv_container .panel-body.card-block .sv_row .sv_qstn table.table:not(.sv_q_matrix) td:before\": {\n            style: \"content: attr(data-responsive-title);\",\n            media: \"@media (max-width: 600px)\",\n        },\n        \".sv_main .sv_container .panel-body.card-block .sv_row .sv_qstn table.sv_q_matrix td:after\": {\n            style: \"content: attr(data-responsive-title); padding-left: 1em\",\n            media: \"@media (max-width: 600px)\",\n        },\n        \".sv_main .sv_container .panel-body.card-block .sv_row .sv_qstn .radio label, .sv_main .sv_container .panel-body.card-block .sv_row .sv_qstn .checkbox label\": {\n            style: \"line-height: 12px; vertical-align: top;\",\n            media: \"@media (max-width: 600px)\",\n        },\n        \".sv_qstn label.sv_q_m_label\": {\n            style: \"display: inline;\",\n            media: \"@media (max-width: 600px)\",\n        },\n        \".sv_main .sv_custom_header\": {\n            style: \"display: none;\",\n            media: \"@media (max-width: 1300px)\",\n        },\n        \".sv_main .sv_container .sv_header h3\": {\n            style: \"font-size: 1.5em;\",\n            media: \"@media (max-width: 1300px)\",\n        },\n        \".sv_main .sv_container .sv_header h3 span\": {\n            style: \"font-size: 0.75em;\",\n            media: \"@media (max-width: 700px)\",\n        },\n        \".sv_main.sv_bootstrap_css .sv-progress__text\": {\n            style: \"margin-left: 8em;\",\n            media: \"@media (min-width: 768px)\",\n        },\n        \".sv_row\": {\n            style: \" display: flex; flex-wrap: wrap;\",\n            media: \"@supports (display: flex)\",\n        },\n        \".sv-row > .sv-row__panel, .sv-row__question:not(:last-child)\": {\n            style: \"float: left;\",\n            media: \"@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none)\",\n        },\n        \"[dir='rtl'],[style*='direction:rtl'] .sv-row__question:not(:last-child)\": {\n            style: \"float: right;\",\n            media: \"@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none)\",\n        },\n        \".sv-row > .sv-row__panel, .sv-row__question\": {\n            style: \"width: 100% !important; padding-right: 0 !important;\",\n            media: \"@media only screen and (max-width: 600px)\",\n        },\n    };\n}\nfunction setStyles() {\n    survey_core__WEBPACK_IMPORTED_MODULE_0__[\"StylesManager\"].Styles = {\n        // \".sv_bootstrap_css\": \"position: relative; width: 100%; background-color: #f4f4f4\",\n        // \".sv_bootstrap_css .sv_custom_header\": \"position: absolute; width: 100%; height: 275px; background-color: #e7e7e7;\",\n        // \".sv_bootstrap_css .sv_container\": \"max-width: 80%; margin: auto; position: relative; color: #6d7072; padding: 0 1em;\",\n        // \".sv_bootstrap_css .panel-body\": \"background-color: white; padding: 1em 1em 5em 1em; border-top: 2px solid lightgray;\",\n        \".sv_main span\": \"word-break: break-word;\",\n        \".sv_main legend\": \"border: none; margin: 0;\",\n        \".sv_bootstrap_css .sv_qstn\": \"padding: 0.5em var(--sv-element-add-padding-right, 1em) 1.5em var(--sv-element-add-padding-left, 1em);\",\n        \".sv_bootstrap_css .sv_qcbc input[type=checkbox], .sv_bootstrap_css .sv_qcbc input[type=radio]\": \"vertical-align: middle; margin-top: -1px\",\n        \".sv_bootstrap_css .sv_qstn fieldset\": \"display: block;\",\n        \".sv_bootstrap_css .sv_qstn  .sv_q_checkbox_inline, .sv_bootstrap_css .sv_qstn .sv_q_radiogroup_inline\": \"display: inline-block;\",\n        \".sv_bootstrap_css .sv-paneldynamic__progress-container \": \"position: relative; margin-right: 250px; margin-left: 40px; margin-top: 10px;\",\n        \".sv_main.sv_bootstrapmaterial_css .sv_q_radiogroup_control_label\": \"display: inline; position: static;\",\n        \".sv_main.sv_bootstrapmaterial_css .checkbox\": \"margin-top:10px;margin-bottom:10px;\",\n        \".sv_row\": \"clear: both; min-width:300px;\",\n        \".sv_row .sv_qstn\": \"float: left\",\n        \".sv_row .sv_qstn:last-child\": \"float: none\",\n        \".sv_qstn\": \"display: vertical-align: top; overflow: auto; min-width:300px;\",\n        \".sv_p_container\": \"display: vertical-align: top; min-width:300px;\",\n        \".sv_q_title .sv_question_icon\": \"float: right; margin-right: 1em;\",\n        \".sv_q_title .sv_question_icon::before\": \"content: ''; background-repeat: no-repeat; background-position: center; padding: 0.5em; display: inline-block; background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMi4wLjEsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiDQoJIHZpZXdCb3g9IjAgMCAxMCAxMCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMTAgMTA7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQoJLnN0MHtmaWxsOiM2RDcwNzI7fQ0KPC9zdHlsZT4NCjxwb2x5Z29uIGNsYXNzPSJzdDAiIHBvaW50cz0iMiwyIDAsNCA1LDkgMTAsNCA4LDIgNSw1ICIvPg0KPC9zdmc+DQo=);\",\n        \".sv_q_title .sv_question_icon.sv_expanded::before\": \"transform: rotate(180deg);\",\n        \".sv_qbln .checkbox-material\": \"margin-right: 3px;\",\n        \".sv_qcbx .checkbox-material\": \"margin-right: 5px;\",\n        \".sv_qcbx .checkbox label\": \"justify-content: left; display: inline-block;\",\n        \".sv_qstn .radio label\": \"justify-content: left; display: inline-block;\",\n        \".sv_qstn .sv_q_imgsel > label img\": \"pointer-events: none;\",\n        \".sv_qstn .sv_q_imgsel.sv_q_imagepicker_inline\": \"display: inline-block;\",\n        \".sv_qstn label.sv_q_m_label\": \"position: absolute; margin: 0; display: block; width: 100%;\",\n        \".sv_qstn td\": \"position: relative;\",\n        \".sv_q_mt\": \"table-layout: fixed;\",\n        \".sv_q_mt_label\": \"display: flex; align-items: center; font-weight: inherit;\",\n        \".sv_q_mt_title\": \"margin-right: 0.5em; width: 33%;\",\n        \".sv_q_mt_item\": \"flex: 1;\",\n        \".sv_q_mt_item_value\": \"float: left;\",\n        '[dir=\"rtl\"] .sv_q_mt_item_value': \"float: right;\",\n        \".sv_qstn.sv_qstn_left\": \"margin-top: 0.75em;\",\n        \".sv_qstn .title-left\": \"float: left; margin-right: 1em; max-width: 50%\",\n        '[dir=\"rtl\"] .sv_qstn .title-left': \"float: right; margin-left: 1em;\",\n        \".sv_qstn .content-left\": \"overflow: hidden\",\n        \".sv_q_radiogroup_inline .sv_q_radiogroup_other\": \"display: inline-block;\",\n        \".sv_q_checkbox_inline .sv_q_checkbox_other\": \"display: inline-block;\",\n        \".sv_q_checkbox_inline, .sv_q_radiogroup_inline, .sv_q_imagepicker_inline\": \"line-height: 2.5em;\",\n        \".form-inline .sv_q_checkbox_inline:not(:last-child)\": \"margin-right: 1em;\",\n        \".form-inline .sv_q_radiogroup_inline:not(:last-child)\": \"margin-right: 1em;\",\n        \".sv_imgsel .sv_q_imagepicker_inline:not(:last-child)\": \"margin-right: 1em;\",\n        \".sv_qstn fieldset\": \"border: none; margin: 0; padding: 0;\",\n        \".sv_qstn .sv_q_file_placeholder\": \"display:none\",\n        \".sv_p_title\": \"padding-left: 1em; padding-bottom: 0.3em;\",\n        \".sv_p_title_expandable, .sv_q_title_expandable\": \"cursor: pointer; position: relative; display: flex; align-items: center; padding-right: 24px;\",\n        \".sv_p_title_expandable::after, .sv_q_title_expandable::after\": \"content: \\\"\\\"; display: block;background-image: url(\\\"data:image/svg+xml,%3C%3Fxml version='1.0' encoding='utf-8'%3F%3E%3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E%3Csvg version='1.1' id='Layer_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 10 10' style='enable-background:new 0 0 10 10;' xml:space='preserve'%3E%3Cstyle type='text/css'%3E .st0%7Bfill:%23404040;%7D%0A%3C/style%3E%3Cpolygon class='st0' points='2,2 0,4 5,9 10,4 8,2 5,5 '/%3E%3C/svg%3E%0A\\\"); background-repeat: no-repeat; background-position: center center; background-size: 10px 12px; width: 24px; height: 24px; position: absolute; right: 0;\",\n        \".sv_p_title_expanded::after, .sv_q_title_expanded::after\": \"transform: rotate(180deg);\",\n        \".sv_p_title .sv_panel_icon\": \"float: right; margin-right: 1em;\",\n        \".sv_p_title .sv_panel_icon::before\": \"content: ''; background-repeat: no-repeat; background-position: center; padding: 0.5em; display: inline-block; background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMi4wLjEsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiDQoJIHZpZXdCb3g9IjAgMCAxMCAxMCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMTAgMTA7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQoJLnN0MHtmaWxsOiM2RDcwNzI7fQ0KPC9zdHlsZT4NCjxwb2x5Z29uIGNsYXNzPSJzdDAiIHBvaW50cz0iMiwyIDAsNCA1LDkgMTAsNCA4LDIgNSw1ICIvPg0KPC9zdmc+DQo=);\",\n        \".sv_p_title .sv_panel_icon.sv_expanded::before\": \"transform: rotate(180deg);\",\n        \".sv_p_footer\": \"padding-left: 1em; padding-bottom: 1em;padding-top: 1em;\",\n        \".sv_matrix_cell_detail_button\": \"position: relative\",\n        \".sv_detail_panel_icon\": \"display: block; position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); width: 14px; height: 14px;\",\n        \".sv_detail_panel_icon::before\": \"content: ''; background-repeat: no-repeat; background-position: center; width: 14px; height: 14px; display: block; transform: rotate(270deg); background-image: url(\\\"data:image/svg+xml,%3C%3Fxml version='1.0' encoding='utf-8'%3F%3E%3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E%3Csvg version='1.1' id='Layer_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 15 15' style='enable-background:new 0 0 15 15;' xml:space='preserve'%3E%3Cstyle type='text/css'%3E .st0%7Bfill:%23FFFFFF;%7D%0A%3C/style%3E%3Cpolygon class='st0' points='14,5.5 12.6,4.1 7.5,9.1 2.4,4.1 1,5.5 7.5,12 '/%3E%3C/svg%3E%0A\\\");\",\n        \".sv_detail_panel_icon.sv_detail_expanded::before\": \"transform: rotate(0deg)\",\n        \".sv_matrix_empty_rows_section\": \"text-align: center; vertical-align: middle;\",\n        \".sv_matrix_empty_rows_text\": \"padding:20px\",\n        \".sv_q_file > input[type=file], .sv_q_file > button\": \"display: inline-block;\",\n        \".sv_q_file_preview\": \"display: inline-block; vertical-align: top; border: 1px solid lightgray; padding: 5px; margin-top: 10px;\",\n        \".sv_q_file_preview > a\": \"display: block; overflow: hidden; vertical-align: top; white-space: nowrap; text-overflow: ellipsis;\",\n        \".sv_q_file_remove_button\": \"line-height: normal;\",\n        \".sv_q_file_remove\": \"display: block; cursor: pointer;\",\n        \".sv_q_m_cell_text\": \"cursor: pointer;\",\n        \".sv_q_dd_other\": \"margin-top: 1em;\",\n        \".sv_q_dd_other input\": \"width: 100%;\",\n        \".sv_q_dd_clean-button\": \"margin: 0.15em 3em;\",\n        \".sv_q_dd_clean-button-svg\": \"width: 1em; height: 1em;\",\n        \".sv_q_dd_control\": \"display: flex; justify-content: space-between; appearance: none;\",\n        \".sv_q_dd_value\": \"width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; position: relative;\",\n        \".sv_q_dd_hint-prefix span\": \"white-space: pre;\",\n        \".sv_q_dd_hint-suffix\": \"display: flex;\",\n        \".sv_q_dd_root\": \"position: relative;\",\n        \".sv_q_dd_select_wrapper\": \"position: relative;\",\n        \".sv_q_dd_select_wrapper::after\": \"content: \\\"\\\"; display: block;background-image: url(\\\"data:image/svg+xml,%3C%3Fxml version='1.0' encoding='utf-8'%3F%3E%3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E%3Csvg version='1.1' id='Layer_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 10 10' style='enable-background:new 0 0 10 10;' xml:space='preserve'%3E%3Cstyle type='text/css'%3E .st0%7Bfill:%23404040;%7D%0A%3C/style%3E%3Cpolygon class='st0' points='2,2 0,4 5,9 10,4 8,2 5,5 '/%3E%3C/svg%3E%0A\\\"); background-repeat: no-repeat; background-position: center center; background-size: 10px 12px; width: 34px; height: 100%; position: absolute; inset-inline-end: 0; top: 0;\",\n        \".sv_q_dd_filter-string-input\": \"outline: none; border: none; background-color: transparent; position: absolute; inset-inline-start: 0; inset-block-start: 0; width: 100%; max-width: 100%; padding: 0;\",\n        \".sv_q_dropdown_clean-button\": \"margin: auto 2em;\",\n        \".sv_q_tagbox__placeholder\": \"position: absolute; top: 0; inset-inline-start: 1em; max-width: 100%; width: auto; height: 100%; text-align: start; cursor: text; pointer-events: none;\",\n        \".sv_qstn .sv-q-col-1, .sv-question .sv-q-col-1\": \"width: 100%; display: inline-block; padding-right: 1em; box-sizing: border-box; word-break: break-word;\",\n        \".sv_qstn .sv-q-col-2, .sv-question .sv-q-col-2\": \"width: calc(50% - 1em); display: inline-block; padding-right: 1em; box-sizing: border-box; word-break: break-word;\",\n        \".sv_qstn .sv-q-col-3, .sv-question .sv-q-col-3\": \"width: calc(33.33333% - 1em); display: inline-block; padding-right: 1em; box-sizing: border-box; word-break: break-word;\",\n        \".sv_qstn .sv-q-col-4, .sv-question .sv-q-col-4\": \"width: calc(25% - 1em); display: inline-block; padding-right: 1em; box-sizing: border-box; word-break: break-word;\",\n        \".sv_qstn .sv-q-col-5, .sv-question .sv-q-col-5\": \"width: calc(20% - 1em); display: inline-block; padding-right: 1em; box-sizing: border-box; word-break: break-word;\",\n        \".sv_qstn .sv-q-column-1, .sv-question .sv-q-column-1\": \"width: 100%; max-width: 100%; display: inline-block; padding-right: 1em; box-sizing: border-box; word-break: break-word;\",\n        \".sv_qstn .sv-q-column-2, .sv-question .sv-q-column-2\": \"max-width: 50%; display: inline-block; padding-right: 1em; box-sizing: border-box; word-break: break-word;\",\n        \".sv_qstn .sv-q-column-3, .sv-question .sv-q-column-3\": \"max-width: 33.33333%; display: inline-block; padding-right: 1em; box-sizing: border-box; word-break: break-word;\",\n        \".sv_qstn .sv-q-column-4, .sv-question .sv-q-column-4\": \"max-width: 25%; display: inline-block; padding-right: 1em; box-sizing: border-box; word-break: break-word;\",\n        \".sv_qstn .sv-q-column-5, .sv-question .sv-q-column-5\": \"max-width: 20%; display: inline-block; padding-right: 1em; box-sizing: border-box; word-break: break-word;\",\n        \".sv_qstn .sv_q_file_input\": \"color: transparent;\",\n        \".sv_qstn .sv_q_imgsel label > div\": \"overflow: hidden; white-space: nowrap; text-overflow: ellipsis; padding: 4px; border: 1px solid lightgray; border-radius: 4px;\",\n        \".sv_qstn .sv_q_imgsel label > div > img, .sv_qstn .sv_q_imgsel label > div > embed\": \"display: block;\",\n        \".sv_qstn table tr td .sv_q_m_cell_label\": \"position: absolute; left: 0; right: 0; top: 0; bottom: 0;\",\n        \"f-panel\": \"padding: 0.5em 1em; display: inline-block; line-height: 2em;\",\n        \".sv_progress_bar > span\": \"white-space: nowrap;\",\n        //progress buttons\n        \".sv_progress-buttons__container-center\": \"text-align: center;\",\n        \".sv_progress-buttons__container\": \"display: inline-block; font-size: 0; width: 100%; max-width: 1100px; white-space: nowrap; overflow: hidden;\",\n        \".sv_progress-buttons__image-button-left\": \"display: inline-block; vertical-align: top; margin-top: 22px; font-size: 14px; width: 16px; height: 16px; cursor: pointer; background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMi4wLjEsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiDQoJIHZpZXdCb3g9IjAgMCAxNiAxNiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMTYgMTY7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxwb2x5Z29uIHBvaW50cz0iMTEsMTIgOSwxNCAzLDggOSwyIDExLDQgNyw4ICIvPg0KPC9zdmc+DQo=);\",\n        \".sv_progress-buttons__image-button-right\": \"display: inline-block; vertical-align: top; margin-top: 22px; font-size: 14px; width: 16px; height: 16px; cursor: pointer; background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMi4wLjEsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiDQoJIHZpZXdCb3g9IjAgMCAxNiAxNiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMTYgMTY7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxwb2x5Z29uIHBvaW50cz0iNSw0IDcsMiAxMyw4IDcsMTQgNSwxMiA5LDggIi8+DQo8L3N2Zz4NCg==);\",\n        \".sv_progress-buttons__image-button--hidden\": \"visibility: hidden;\",\n        \".sv_progress-buttons__list-container\": \"max-width: calc(100% - 36px); display: inline-block; overflow: hidden;\",\n        \".sv_progress-buttons__list\": \"display: inline-block; width: max-content; padding-left: 28px; padding-right: 28px; margin-top: 14px; margin-bottom: 14px;\",\n        \".sv_progress-buttons__list li\": \"width: 138px; font-size: 14px; font-family: var(--font-family, $font-family); position: relative; text-align: center; vertical-align: top; display: inline-block;\",\n        \".sv_progress-buttons__list li:before\": \"width: 24px; height: 24px; content: ''; line-height: 30px; display: block; margin: 0 auto 10px auto; border: 3px solid; border-radius: 50%; box-sizing: content-box; cursor: pointer;\",\n        \".sv_progress-buttons__list li:after\": \"width: 73%; height: 3px; content: ''; position: absolute; top: 15px; left: -36.5%;\",\n        \".sv_progress-buttons__list li:first-child:after\": \"content: none;\",\n        \".sv_progress-buttons__list .sv_progress-buttons__page-title\": \"width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-weight: bold;\",\n        \".sv_progress-buttons__list .sv_progress-buttons__page-description\": \"width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\",\n        \".sv_progress-buttons__list li.sv_progress-buttons__list-element--nonclickable:before\": \"cursor: not-allowed;\",\n        // ranking\n        \".sv-ranking\": \"outline: none; user-select: none;\",\n        \".sv-ranking-item\": \"cursor: pointer; position: relative;\",\n        \".sv-ranking-item:focus .sv-ranking-item__icon--hover\": \"visibility: hidden;\",\n        \".sv-ranking-item:hover .sv-ranking-item__icon--hover\": \"visibility: visible;\",\n        \".sv-question--disabled .sv-ranking-item:hover .sv-ranking-item__icon--hover\": \"visibility: hidden;\",\n        \".sv-ranking-item:focus\": \"outline: none;\",\n        \".sv-ranking-item:focus .sv-ranking-item__icon--focus\": \"visibility: visible; top: 15px;\",\n        \".sv-ranking-item:focus .sv-ranking-item__index\": \"background: white; border: 2px solid var(--primary, #19b394);\",\n        \".sv-ranking-item__content\": \"display: flex; align-items: center; line-height: 1em; padding: 5px 0px; border-radius: 100px;\",\n        \".sv-ranking-item__icon-container\": \"left: 0;top: 0;bottom: 0;width: calc(3 * var(--base-unit, 8px)); flex-shrink: 0;\",\n        \".sv-ranking-item__icon\": \"visibility: hidden;top:20px; fill: var(--primary, #19b394); position: absolute;\",\n        \".sv-ranking-item__index\": \"display: flex; flex-shrink: 0; align-items: center; justify-content: center; background: var(--primary-light, rgba(25, 179, 148, 0.1)); color: var(--foreground); border-radius: 100%; border:2px solid transparent; width: 40px; height: 40px; line-height: 1em;\",\n        \".sv-ranking-item__text\": \"display: inline-block; overflow:hidden; text-overflow: ellipsis; white-space: nowrap; margin: 0 calc(2 * var(--base-unit, 8px));\",\n        \".sv-ranking-item__ghost\": \"display: none; background-color: var(--background-dim, #f3f3f3); border-radius: 100px;width: 200px;height: 55px;z-index: 1;position: absolute;left: 25px;\",\n        \"[dir='rtl'] .sv-ranking-item__ghost\": \"left: initilal; right: 25px;\",\n        \".sv-ranking-item--ghost .sv-ranking-item__ghost\": \"display: block;\",\n        \".sv-ranking-item--ghost .sv-ranking-item__content\": \"visibility: hidden;\",\n        \".sv-ranking-item--drag .sv-ranking-item__content\": \"box-shadow: 0px 8px 16px rgba(0, 0, 0, 0.1);border-radius: 100px;\",\n        \".sv-ranking--drag .sv-ranking-item:hover .sv-ranking-item__icon\": \"visibility: hidden;\",\n        \".sv-ranking-item--drag .sv-ranking-item__icon--hover\": \"visibility: visible;\",\n        \".sv-ranking--mobile .sv-ranking-item__icon--hover\": \"visibility:visible; fill:#9f9f9f;\",\n        \".sv-ranking--mobile.sv-ranking--drag .sv-ranking-item--ghost .sv-ranking-item__icon.sv-ranking-item__icon--hover\": \"visibility:hidden;\",\n        \".sv-ranking--mobile.sv-ranking-shortcut\": \"max-width: 80%;\",\n        \".sv-ranking--design-mode .sv-ranking-item:hover .sv-ranking-item__icon\": \"visibility: hidden;\",\n        \".sv-ranking--disabled\": \"opacity: 0.8;\",\n        \".sv-ranking-shortcut .sv-ranking-item__icon\": \"fill: var(--primary, #19b394); \",\n        \".sv-ranking--drag-handle-area-icon .sv-ranking-item\": \"cursor: initial\",\n        \".sv-ranking--drag-handle-area-icon .sv-ranking-item__icon--hover\": \"cursor: pointer;\",\n        // EO ranking\n        // drag drop\n        \".sv-dragged-element-shortcut\": \"height: 24px; min-width: 100px; border-radius: 36px; background-color: white; padding: 16px; cursor: grabbing; position: absolute; z-index: 10000; box-shadow: 0px 8px 16px rgba(0, 0, 0, 0.1); font-family: var(--font-family, $font-family); font-size: 16px; padding-left: 20px;line-height: 24px;\",\n        \".sv-matrixdynamic__drag-icon\": \"padding-top:14px\",\n        \".sv-matrixdynamic__drag-icon:after\": \"content: ' '; display: block; height: 6px; width: 20px; border: 1px solid #e7e7e7; box-sizing: border-box; border-radius: 10px; cursor: move; margin-top: 12px;\",\n        \".sv-matrix-row--drag-drop-ghost-mod td\": \"background-color: #f3f3f3;\",\n        \".sv-matrix-row--drag-drop-ghost-mod td > *\": \"visibility: hidden\",\n        //eo drag-drop\n        \".sv_qstn .sv_q_select_column\": \"display: inline-block; vertical-align: top; min-width: 10%;\",\n        \".sv_qstn .sv_q_select_column > *:not(.sv_technical)\": \"display: block;\",\n        \".sv_main .sv_container .sv_body .sv_p_root .sv_qstn .sv_q_select_column textarea\": \"margin-left: 0; padding-left: 0; line-height: initial;\",\n        \".sv_main .sv-hidden\": \"display: none !important;\",\n        \".sv_main .sv-visuallyhidden\": \"position: absolute; height: 1px !important; width: 1px !important; overflow: hidden; clip: rect(1px 1px 1px 1px); clip: rect(1px, 1px, 1px, 1px);\",\n        // paneldynamic progress\n        \".sv_main .sv-progress\": \"height: 0.19em; background-color: $header-background-color; position: relative;\",\n        \".sv_main .sv-progress__bar\": \"background-color: $main-color; height: 100%; position: relative;\",\n        // EO paneldynamic progress\n        // paneldynamic\n        \".sv_main .sv-paneldynamic__progress-container\": \"position: relative; display: inline-block; width: calc(100% - 250px); margin-top: 20px;\",\n        \".sv_main .sv-paneldynamic__add-btn\": \"float: right;\",\n        \".sv_main .sv-paneldynamic__add-btn--list-mode\": \"float: none; margin-top: 0;\",\n        \".sv_main .sv-paneldynamic__remove-btn\": \"margin-top: 1.25em;\",\n        \".sv_main .sv-paneldynamic__remove-btn--right\": \"margin-top: 0; margin-left: 1.25em;\",\n        \".sv_main .sv-paneldynamic__prev-btn, .sv_main .sv-paneldynamic__next-btn\": \"box-sizing: border-box; display: inline-block; cursor: pointer; width: 0.7em; top: -0.28em; position: absolute;\",\n        \".sv_main .sv-paneldynamic__prev-btn svg, .sv_main .sv-paneldynamic__next-btn svg\": \"width: 0.7em; height: 0.7em; display: block;\",\n        \".sv_main .sv-paneldynamic__prev-btn\": \"left: -1.3em; transform: rotate(90deg);\",\n        \".sv_main .sv-paneldynamic__next-btn \": \"right: -1.3em; transform: rotate(270deg);\",\n        \".sv_main .sv-paneldynamic__prev-btn.sv-paneldynamic__prev-btn--disabled, .sv_main .sv-paneldynamic__next-btn.sv-paneldynamic__next-btn--disabled\": \"cursor: auto;\",\n        \".sv_main .sv-paneldynamic__progress-text\": \"font-weight: bold; font-size: 0.87em; margin-top: 0.69em; margin-left: 4em\",\n        // EO paneldynamic\n        //boolean\n        \".sv_main .sv-boolean__switch\": \"display: inline-block; box-sizing: border-box; width: 63px; height: 24px; margin-right: 17px; margin-left: 21px; padding: 2px 3px; vertical-align: middle; border-radius: 12px; cursor: pointer;\",\n        \".sv_main .sv-boolean__slider\": \"display: inline-block; width: 20px; height: 20px; transition-duration: .4s; transition-property: margin-left; border: none; border-radius: 100%;\",\n        \".sv_main .sv-boolean__label\": \"vertical-align: middle; cursor: pointer;\",\n        \".sv_main .sv-boolean--indeterminate  .sv-boolean__slider\": \"margin-left: calc(50% - 10px);\",\n        \".sv_main .sv-boolean input:focus ~ .sv-boolean__switch\": \"outline-width: 1px; outline-style: solid; outline-offset: 1px;\",\n        \".sv_main .sv-boolean--checked  .sv-boolean__slider\": \"margin-left: calc(100% - 20px);\",\n        \"[dir='rtl'] .sv-boolean__label \": \"float: right;\",\n        \"[dir='rtl'] .sv-boolean--indeterminate .sv-boolean__slider\": \"margin-right: calc(50% - 0.625em);\",\n        \"[dir='rtl'] .sv-boolean--checked .sv-boolean__slider\": \"margin-right: calc(100% - 1.25em);\",\n        \"[dir='rtl'] .sv-boolean__switch\": \"float: right;\",\n        \"[style*='direction:rtl'] .sv-boolean__label \": \"float: right;\",\n        \"[style*='direction:rtl'] .sv-boolean--indeterminate .sv-boolean__slider\": \"margin-right: calc(50% - 0.625em);\",\n        \"[style*='direction:rtl'] .sv-boolean--checked .sv-boolean__slider\": \"margin-right: calc(100% - 1.25em);\",\n        \"[style*='direction:rtl'] .sv-boolean__switch\": \"float: right;\",\n        // EO boolean\n        \".sv_main .sv_q_num\": \"\",\n        \".sv_main .sv_q_num + span\": \"\",\n        // SignaturePad\n        \".sv_main .sjs_sp_container\": \"position: relative; box-sizing: content-box;\",\n        \".sv_main .sjs_sp_controls\": \"position: absolute; left: 0; bottom: 0;\",\n        \".sv_main .sjs_sp_controls > button\": \"user-select: none;\",\n        \".sv_main .sjs_sp_container>div>canvas:focus\": \"outline: none;\",\n        \".sv_main .sjs_sp_placeholder\": \"display: flex;  align-items: center; justify-content: center; position: absolute; z-index: 0; user-select: none; pointer-events: none; width: 100%; height: 100%;\",\n        \".sv_main .sjs_sp_canvas\": \"position: absolute; top: 0; left: 0;\",\n        \".sv_main .sjs_sp__background-image\": \"position: absolute; top: 0; left: 0;\",\n        // logo\n        // \".sv_main .sv_header\": \"white-space: nowrap;\",\n        \".sv_main .sv_logo\": \"\",\n        \".sv_main .sv-logo--left\": \"display: inline-block; vertical-align: top; margin-right: 2em;\",\n        \".sv_main .sv-logo--right\": \"display: inline-block; vertical-align: top; margin-left: 2em; \",\n        \".sv_main .sv-logo--top\": \"display: block; width: 100%; text-align: center;\",\n        \".sv_main .sv-logo--bottom\": \"display: block; width: 100%; text-align: center;\",\n        \".sv_main .sv_header__text\": \"display: inline-block; vertical-align: top; max-width: 100%; width: 100%\",\n        \".sv_main .sv-expand-action:before\": \"content: \\\"\\\"; display: inline-block; background-image: url(\\\"data:image/svg+xml,%3C%3Fxml version='1.0' encoding='utf-8'%3F%3E%3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E%3Csvg version='1.1' id='Layer_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 10 10' style='enable-background:new 0 0 10 10;' xml:space='preserve'%3E%3Cstyle type='text/css'%3E .st0%7Bfill:%23404040;%7D%0A%3C/style%3E%3Cpolygon class='st0' points='2,2 0,4 5,9 10,4 8,2 5,5 '/%3E%3C/svg%3E%0A\\\"); background-repeat: no-repeat; background-position: center center; height: 10px; width: 12px; margin: auto 8px;\",\n        \".sv_main .sv-expand-action--expanded:before\": \"transform: rotate(180deg);\",\n        \".sv_main .sv-action-bar\": \"display: flex; position: relative; align-items: center; margin-left: auto; padding: 0 0 0 16px; overflow: hidden; white-space: nowrap;\",\n        \".sv_main .sv-action-bar-separator\": \"display: inline-block; width: 1px; height: 24px; vertical-align: middle; margin-right: 16px; background-color: #d6d6d6;\",\n        \".sv_main .sv-action-bar-item\": \"-webkit-appearance: none; -moz-appearance: none; appearance: none; display: flex; height: 40px; padding: 8px; box-sizing: border-box; margin-right: 16px; border: none; border-radius: 2px; background-color: transparent; cursor: pointer; line-height: 24px; font-size: 16px; overflow-x: hidden; white-space: nowrap; min-width: auto; font-weight: normal\",\n        \".sv_main .sv-action-bar-item__title\": \"vertical-align: middle; white-space: nowrap;\",\n        \".sv_main .sv-action-bar-item__title--with-icon\": \"margin-left: 8px;\",\n        \".sv_main .sv-action__content\": \"display: flex; flex-direction: row; align-items: center;\",\n        \".sv_main .sv-action__content > *\": \"flex: 0 0 auto;\",\n        \".sv_main .sv-action--hidden\": \"width: 0px; height: 0px; overflow: hidden;\",\n        \".sv_main .sv-action-bar-item__icon svg\": \"display: block;\",\n        \".sv_main .sv-action-bar-item:active\": \"opacity: 0.5;\",\n        \".sv_main .sv-action-bar-item:focus\": \"outline: none;\",\n        \".sv_main .sv-title-actions\": \"display: flex; align-items: center; width: 100%;\",\n        \".sv_main .sv-title-actions__title\": \"flex-wrap: wrap; max-width: 90%; min-width: 50%;\",\n        \".sv_main .sv-title-actions__bar\": \"min-width: 56px;\",\n        \".sv_main .sv-title-actions .sv-title-actions__title\": \"min-width: unset; max-width: unset; flex-wrap: wrap; flex: 0 0 auto;\",\n        \".sv_main .sv-title-actions .sv-action-title-bar\": \"min-width: unset; flex: 1 1 auto; justify-content: flex-end;\",\n        \".sv_main .sv_matrix_cell_actions .sv-action-bar\": \"margin-left: 0; padding-left: 0;\",\n        \".sv_main .sv_p_wrapper_in_row\": \"display: flex; flex-direction: row; align-items: center;\",\n        \".sv_main  .sv_p_remove_btn_right\": \"margin-left: 1em;\",\n        //button-group\n        \".sv_main .sv-button-group\": \"display: flex; align-items: center; flex-direction: row; font-size: 16px; height: 48px; overflow: auto;\",\n        \".sv_main .sv-button-group__item\": \"display: flex; box-sizing: border-box; flex-direction: row; justify-content: center; align-items: center; width: 100%; padding: 11px 16px; line-height: 24px; border-width: 1px; border-style: solid; outline: none; font-size: 16px; font-weight: 400; cursor: pointer; overflow: hidden;\",\n        \".sv_main .sv-button-group__item:not(:first-of-type)\": \"margin-left: -1px;\",\n        \".sv_main .sv-button-group__item-icon\": \"display: block; height: 24px;\",\n        \".sv_main .sv-button-group__item--selected\": \"font-weight: 600;\",\n        \".sv_main .sv-button-group__item-decorator\": \"display: flex; align-items: center; max-width: 100%;\",\n        \".sv_main  .sv-button-group__item-icon + .sv-button-group__item-caption\": \"margin-left: 8px\",\n        \".sv_main .sv-button-group__item-caption\": \"display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\",\n        \".sv_main .sv-button-group__item--disabled\": \"color: cursor: default;\",\n        //eo button-group\n        //popup\n        \"sv-popup\": \"display: block; position: absolute; z-index: -1;\",\n        \".sv-popup\": \"position: fixed; left: 0; top: 0; width: 100vw; height: 100vh; outline: none; z-index: 1500;\",\n        \".sv-popup.sv-dropdown-popup\": \"height: 0;\",\n        \".sv-popup__container\": \"box-shadow: 0px 2px 6px rgba(0, 0, 0, 0.1); position: absolute; padding: 0;\",\n        \".sv-popup__body-content\": \"background-color: var(--background, #fff); border-radius: calc(0.5 * var(--base-unit, 8px)); width: 100%; height: 100%; box-sizing: border-box; display: flex; flex-direction: column; max-height: 90vh; max-width: 100vw;\",\n        \".sv-popup--modal .sv-list__filter\": \"padding-top: 8px;\",\n        \".sv-popup--modal .sv-list__filter-icon\": \"top: 20px;\",\n        \".sv-popup--overlay .sv-list__filter\": \"padding-top: 8px;\",\n        \".sv-popup--overlay .sv-list__filter-icon\": \"top: 20px;\",\n        \".sv-popup--modal\": \"display: flex; align-items: center; justify-content: center;\",\n        \".sv-popup--modal .sv-popup__container\": \"position: static;\",\n        \".sv-popup--modal .sv-popup__body-content\": \"padding: calc(4 * var(--base-unit, 8px));\",\n        \".sv-popup--overlay\": \"width: 100%;\",\n        \".sv-popup--overlay .sv-popup__container\": \"background: rgba(144, 144, 144, 0.5); max-width: 100vw; max-height: calc(100vh - 1 * var(--base-unit, 8px)); height: calc(100vh - 1 * var(--base-unit, 8px)); width: 100%; padding-top: calc(2 * var(--base-unit, 8px)); border: unset;\",\n        \".sv-popup__shadow\": \"width: 100%; height: 100%; border-radius: calc(1 * var(--base-unit, 8px));\",\n        \".sv-popup--overlay .sv-popup__body-content\": \"border-radius: calc(2 * var(--base-unit, 8px)) calc(2 * var(--base-unit, 8px)) 0px 0px; background: var(--background, #fff); box-shadow: 0px calc(1 * var(--base-unit, 8px)) calc(2 * var(--base-unit, 8px)) rgba(0, 0, 0, 0.1); padding: calc(3 * var(--base-unit, 8px)) calc(2 * var(--base-unit, 8px)) calc(2 * var(--base-unit, 8px)); height: calc(100% - calc(1 * var(--base-unit, 8px))); max-height: 100vh; max-width: 100vw;\",\n        \".sv-popup--overlay .sv-popup__scrolling-content\": \"height: calc(100% - (10 * var(--base-unit, 8px)));\",\n        \".sv-popup--overlay .sv-popup__body-footer\": \"margin-top: calc(2 * var(--base-unit, 8px));\",\n        \".sv-popup--overlay .sv-popup__body-footer .sv-action\": \"width: 100%;\",\n        \".sv-popup--overlay .sv-popup__body-footer .sv-action-bar\": \"width: 100%;\",\n        \".sv-popup--overlay .sv-popup__body-footer-item\": \"width: 100%;\",\n        \".sv-popup--overlay .sv-popup__button\": \"background-color: var(--primary, #19b394); border: 2px solid var(--primary, #19b394); color: var(--primary-foreground, #fff);\",\n        \".sv-popup__scrolling-content\": \"height: 100%; overflow: auto; display: flex; flex-direction: column;\",\n        \".sv-popup__scrolling-content::-webkit-scrollbar\": \"height: 6px; width: 6px; background-color: var(--background-dim, #f3f3f3);\",\n        \".sv-popup__scrolling-content::-webkit-scrollbar-thumb\": \"background: var(--primary-light, rgba(25, 179, 148, 0.1));\",\n        \".sv-popup__content\": \"min-width: 100%; height: 100%; display: flex; flex-direction: column; min-height: 0;\",\n        \".sv-popup--show-pointer.sv-popup--top .sv-popup__pointer\": \"transform: translate(calc(-1 * var(--base-unit, 8px))) rotate(180deg);\",\n        \".sv-popup--show-pointer.sv-popup--bottom .sv-popup__pointer\": \"transform: translate(calc(-1 * var(--base-unit, 8px)), calc(-1 * var(--base-unit, 8px)));\",\n        \".sv-popup--show-pointer.sv-popup--right\": \"transform: translate(calc(1 * var(--base-unit, 8px)));\",\n        \".sv-popup--show-pointer.sv-popup--right .sv-popup__pointer\": \"transform: translate(-12px, -4px) rotate(-90deg);\",\n        \".sv-popup--show-pointer.sv-popup--left\": \"transform: translate(calc(-1 * var(--base-unit, 8px)));\",\n        \".sv-popup--show-pointer.sv-popup--left .sv-popup__pointer\": \"transform: translate(-4px, -4px) rotate(90deg);\",\n        \".sv-popup__pointer\": \"display: block; position: absolute;\",\n        \".sv-popup__pointer:after\": \"content: ' '; display: block; width: 0; height: 0; border-left: calc(1 * var(--base-unit, 8px)) solid transparent; border-right: calc(1 * var(--base-unit, 8px)) solid transparent; border-bottom: calc(1 * var(--base-unit, 8px)) solid var(--background, #fff); align-self: center;\",\n        \".sv-popup__body-header\": \"font-family: var(--font-family, $font-family); font-size: calc(3 * var(--base-unit, 8px)); line-height: calc(4 * var(--base-unit, 8px)); font-style: normal; font-weight: 700; margin-bottom: calc(2 * var(--base-unit, 8px)); color: var(--foreground, #161616);\",\n        \".sv-popup__body-footer\": \"display: flex; margin-top: calc(4 * var(--base-unit, 8px));\",\n        \".sv-popup__body-footer .sv-action-bar\": \"gap: calc(1.5 * var(--base-unit, 8px));\",\n        \".sv-popup__button\": \"padding: calc(2 * var(--base-unit, 8px)) calc(6 * var(--base-unit, 8px)); background: var(--background, #fff); box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.15); border-radius: 4px; margin: 2px; cursor: pointer; font-family: var(--font-family, $font-family); font-style: normal; font-weight: 600; font-size: calc(2 * var(--base-unit, 8px)); line-height: calc(3 * var(--base-unit, 8px)); text-align: center; color: var(--primary, #19b394); border: none; outline: none;\",\n        \".sv-popup__button:hover\": \"box-shadow: 0 0 0 2px var(--primary, #19b394);\",\n        \".sv-popup__button:disabled\": \"color: var(--foreground-disabled, rgba(#161616, 0.16)); cursor: default;\",\n        \".sv-popup__button:disabled:hover\": \"box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.15);\",\n        \".sv-popup__button.sv-popup__button--apply\": \"background-color: var(--primary, #19b394); color: var(--primary-foreground, #fff);\",\n        \".sv-popup__button.sv-popup__button--apply:disabled\": \"background-color: var(--background-dim, #f3f3f3);\",\n        //eo popup\n        //list\n        \".sv-list\": \"padding: 0; margin: 0; background: var(--background, #fff); list-style-type: none; overflow-y: auto;\",\n        \".sv-list__item--with-icon\": \"padding-top: 12px; padding-bottom: 12px;\",\n        \".sv-list__item\": \"width: 100%; box-sizing: border-box; cursor: pointer; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\",\n        \".sv-list__item-body\": \"width: 100%; box-sizing: border-box; font-size: calc(2 * var(--base-unit, 8px)); line-height: calc(3 * var(--base-unit, 8px)); padding-top: calc(1 * var(--base-unit, 8px)); padding-bottom: calc(1 * var(--base-unit, 8px)); padding-inline-end: calc(8 * var(--base-unit, 8px)); padding-inline-start: calc(2 * var(--base-unit, 8px)); cursor: pointer; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; display: flex; gap: calc(2 * 8px);\",\n        \".sv-list__item-icon\": \"float: left; width: calc(3 * 8px); height: calc(3 * 8px);\",\n        \".sv-list__item-icon svg\": \"display: block;\",\n        \".sv-list__item-icon use\": \"fill: #909090;\",\n        \".sv-list__item:hover .sv-list__item-body\": \"background-color: var(--background-dim, #f3f3f3);\",\n        \".sv-list__item.sv-list__item--focused .sv-list__item-body\": \"background-color: var(--background-dim, #f3f3f3);\",\n        \".sv-list__loading-indicator\": \"pointer-events: none;\",\n        \".sv-list__loading-indicator .sv-list__item-body\": \"background-color: transparent\",\n        // \".sv-list__item--selected\": \"background-color: var(--primary, #19b394); color: var(--primary-foreground, #fff);\",\n        \".sv-list__item--selected .sv-list__item-icon use\": \"fill: var(--primary-foreground, #fff);\",\n        \".sv-list__item.sv-list__item--disabled\": \"color: var(--foreground-light, #909090); cursor: default;\",\n        \".sv-list__item span\": \"white-space: nowrap;\",\n        \".sv-list__container\": \"position: relative; display: flex; flex-direction: column; height: 100%; display: flex; flex-direction: column; min-height: 0;\",\n        \".sv-list__filter\": \"border-bottom: 1px solid rgba(0, 0, 0, 0.16); background: var(--background, #fff); padding-bottom: calcSize(1);\",\n        \".sv-list__input\": \"-webkit-appearance: none; -moz-appearance: none; appearance: none; display: block; box-sizing: border-box; width: 100%; line-height: 24px; padding-left: 56px; padding-right: 24px; padding-top: 12px; padding-bottom: 12px; outline: none; font-size: 1em; border: none\",\n        \".sv-list__filter-icon\": \"display: block; position: absolute; top: 12px; left: 16px;\",\n        \".sv-list__filter-icon .sv-svg-icon\": \"width: 24px; height: 24px;\",\n        \".sv-list__empty-container\": \"width: 100%; box-sizing: border-box; padding: 12px 64px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\",\n        \".sv-list__empty-text\": \"line-height: 24px; font-size: 16px; font-weight: 400; text-align: center; color: var(--foreground-light, #909090);\",\n        //eo list\n        \".sv-skeleton-element\": \"min-height: 50px;\",\n    };\n}\n\n\n/***/ }),\n\n/***/ \"./src/popup-dropdown-view-model.ts\":\n/*!******************************************!*\\\n  !*** ./src/popup-dropdown-view-model.ts ***!\n  \\******************************************/\n/*! exports provided: PopupDropdownViewModel */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_2417206__) {\n\n\"use strict\";\n__nested_webpack_require_2417206__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_2417206__.d(__nested_webpack_exports__, \"PopupDropdownViewModel\", function() { return PopupDropdownViewModel; });\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_2417206__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _utils_popup__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_2417206__(/*! ./utils/popup */ \"./src/utils/popup.ts\");\n/* harmony import */ var _popup_view_model__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_2417206__(/*! ./popup-view-model */ \"./src/popup-view-model.ts\");\n/* harmony import */ var _utils_devices__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_2417206__(/*! ./utils/devices */ \"./src/utils/devices.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_2417206__(/*! ./settings */ \"./src/settings.ts\");\n/* harmony import */ var _survey__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_2417206__(/*! ./survey */ \"./src/survey.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\n\nvar PopupDropdownViewModel = /** @class */ (function (_super) {\n    __extends(PopupDropdownViewModel, _super);\n    function PopupDropdownViewModel(model, targetElement) {\n        var _this = _super.call(this, model) || this;\n        _this.targetElement = targetElement;\n        _this.scrollEventCallBack = function (event) {\n            if (_this.isOverlay && _utils_devices__WEBPACK_IMPORTED_MODULE_3__[\"IsTouch\"]) {\n                event.stopPropagation();\n                event.preventDefault();\n                return;\n            }\n            _this.hidePopup();\n        };\n        _this.resizeEventCallback = function () {\n            var visualViewport = window.visualViewport;\n            document.documentElement.style.setProperty(\"--sv-popup-overlay-height\", visualViewport.height * visualViewport.scale + \"px\");\n        };\n        _this.resizeWindowCallback = function () {\n            if (!_this.isOverlay) {\n                _this.updatePosition(true, _survey__WEBPACK_IMPORTED_MODULE_5__[\"SurveyModel\"].platform === \"vue\" || _survey__WEBPACK_IMPORTED_MODULE_5__[\"SurveyModel\"].platform === \"vue3\");\n            }\n        };\n        _this.clientY = 0;\n        _this.isTablet = false;\n        _this.touchStartEventCallback = function (event) {\n            _this.clientY = event.touches[0].clientY;\n        };\n        _this.touchMoveEventCallback = function (event) {\n            _this.preventScrollOuside(event, _this.clientY - event.changedTouches[0].clientY);\n        };\n        _this.model.onRecalculatePosition.add(_this.recalculatePositionHandler);\n        return _this;\n    }\n    PopupDropdownViewModel.prototype.calculateIsTablet = function (windowWidth, windowHeight) {\n        var width = Math.min(windowWidth, windowHeight);\n        this.isTablet = width >= PopupDropdownViewModel.tabletSizeBreakpoint;\n    };\n    PopupDropdownViewModel.prototype._updatePosition = function () {\n        var _a, _b, _c;\n        if (!this.targetElement)\n            return;\n        var targetElementRect = this.targetElement.getBoundingClientRect();\n        var popupContainer = (_a = this.container) === null || _a === void 0 ? void 0 : _a.querySelector(this.containerSelector);\n        if (!popupContainer)\n            return;\n        var fixedPopupContainer = (_b = this.container) === null || _b === void 0 ? void 0 : _b.querySelector(this.fixedPopupContainer);\n        var scrollContent = popupContainer.querySelector(this.scrollingContentSelector);\n        var popupComputedStyle = window.getComputedStyle(popupContainer);\n        var marginLeft = (parseFloat(popupComputedStyle.marginLeft) || 0);\n        var marginRight = (parseFloat(popupComputedStyle.marginRight) || 0);\n        var height = popupContainer.offsetHeight - scrollContent.offsetHeight + scrollContent.scrollHeight;\n        var width = popupContainer.getBoundingClientRect().width;\n        this.model.setWidthByTarget && (this.minWidth = targetElementRect.width + \"px\");\n        var verticalPosition = this.model.verticalPosition;\n        var actualHorizontalPosition = this.getActualHorizontalPosition();\n        if (!!window) {\n            var heightValues = [height, window.innerHeight * 0.9, (_c = window.visualViewport) === null || _c === void 0 ? void 0 : _c.height];\n            height = Math.ceil(Math.min.apply(Math, heightValues.filter(function (each) { return typeof each === \"number\"; })));\n            verticalPosition = _utils_popup__WEBPACK_IMPORTED_MODULE_1__[\"PopupUtils\"].updateVerticalPosition(targetElementRect, height, this.model.verticalPosition, this.model.showPointer, window.innerHeight);\n        }\n        this.popupDirection = _utils_popup__WEBPACK_IMPORTED_MODULE_1__[\"PopupUtils\"].calculatePopupDirection(verticalPosition, actualHorizontalPosition);\n        var pos = _utils_popup__WEBPACK_IMPORTED_MODULE_1__[\"PopupUtils\"].calculatePosition(targetElementRect, height, width + marginLeft + marginRight, verticalPosition, actualHorizontalPosition, this.showHeader, this.model.positionMode);\n        if (!!window) {\n            var newVerticalDimensions = _utils_popup__WEBPACK_IMPORTED_MODULE_1__[\"PopupUtils\"].getCorrectedVerticalDimensions(pos.top, height, window.innerHeight);\n            if (!!newVerticalDimensions.height) {\n                this.height = newVerticalDimensions.height + \"px\";\n                pos.top = newVerticalDimensions.top;\n            }\n            if (this.model.setWidthByTarget) {\n                this.width = targetElementRect.width + \"px\";\n                pos.left = targetElementRect.left;\n            }\n            else {\n                var newHorizontalDimensions = _utils_popup__WEBPACK_IMPORTED_MODULE_1__[\"PopupUtils\"].updateHorizontalDimensions(pos.left, width, window.innerWidth, actualHorizontalPosition, this.model.positionMode, { left: marginLeft, right: marginRight });\n                if (!!newHorizontalDimensions) {\n                    this.width = newHorizontalDimensions.width ? newHorizontalDimensions.width + \"px\" : undefined;\n                    pos.left = newHorizontalDimensions.left;\n                }\n            }\n        }\n        if (!!fixedPopupContainer) {\n            var rect = fixedPopupContainer.getBoundingClientRect();\n            pos.top -= rect.top;\n            pos.left -= rect.left;\n        }\n        this.left = pos.left + \"px\";\n        this.top = pos.top + \"px\";\n        if (this.showHeader) {\n            this.pointerTarget = _utils_popup__WEBPACK_IMPORTED_MODULE_1__[\"PopupUtils\"].calculatePointerTarget(targetElementRect, pos.top, pos.left, verticalPosition, actualHorizontalPosition, marginLeft, marginRight);\n            this.pointerTarget.top += \"px\";\n            this.pointerTarget.left += \"px\";\n        }\n    };\n    PopupDropdownViewModel.prototype.getActualHorizontalPosition = function () {\n        var actualHorizontalPosition = this.model.horizontalPosition;\n        var isRtl = !!document && document.defaultView.getComputedStyle(document.body).direction == \"rtl\";\n        if (isRtl) {\n            if (this.model.horizontalPosition === \"left\") {\n                actualHorizontalPosition = \"right\";\n            }\n            else if (this.model.horizontalPosition === \"right\") {\n                actualHorizontalPosition = \"left\";\n            }\n        }\n        return actualHorizontalPosition;\n    };\n    PopupDropdownViewModel.prototype.getStyleClass = function () {\n        return _super.prototype.getStyleClass.call(this)\n            .append(\"sv-popup--dropdown\", !this.isOverlay)\n            .append(\"sv-popup--tablet\", this.isTablet && this.isOverlay)\n            .append(\"sv-popup--show-pointer\", !this.isOverlay && this.showHeader)\n            .append(\"sv-popup--\" + this.popupDirection, !this.isOverlay && this.showHeader);\n    };\n    PopupDropdownViewModel.prototype.getShowHeader = function () {\n        return this.model.showPointer && !this.isOverlay;\n    };\n    PopupDropdownViewModel.prototype.getPopupHeaderTemplate = function () {\n        return \"popup-pointer\";\n    };\n    PopupDropdownViewModel.prototype.setComponentElement = function (componentRoot, targetElement) {\n        _super.prototype.setComponentElement.call(this, componentRoot);\n        if (!!componentRoot && !!componentRoot.parentElement && !this.isModal) {\n            this.targetElement = targetElement || componentRoot.parentElement;\n        }\n    };\n    PopupDropdownViewModel.prototype.resetComponentElement = function () {\n        _super.prototype.resetComponentElement.call(this);\n        this.targetElement = undefined;\n    };\n    PopupDropdownViewModel.prototype.updateOnShowing = function () {\n        var root = _settings__WEBPACK_IMPORTED_MODULE_4__[\"settings\"].environment.root;\n        this.prevActiveElement = root.activeElement;\n        if (this.isOverlay) {\n            this.resetDimensionsAndPositionStyleProperties();\n        }\n        else {\n            this.updatePosition(true, false);\n        }\n        this.switchFocus();\n        window.addEventListener(\"resize\", this.resizeWindowCallback);\n        if (this.shouldCreateResizeCallback) {\n            window.visualViewport.addEventListener(\"resize\", this.resizeEventCallback);\n            if (this.container) {\n                this.container.addEventListener(\"touchstart\", this.touchStartEventCallback);\n                this.container.addEventListener(\"touchmove\", this.touchMoveEventCallback);\n            }\n            this.calculateIsTablet(window.innerWidth, window.innerHeight);\n            this.resizeEventCallback();\n        }\n        window.addEventListener(\"scroll\", this.scrollEventCallBack);\n    };\n    Object.defineProperty(PopupDropdownViewModel.prototype, \"shouldCreateResizeCallback\", {\n        get: function () {\n            return !!window.visualViewport && this.isOverlay && _utils_devices__WEBPACK_IMPORTED_MODULE_3__[\"IsTouch\"];\n        },\n        enumerable: false,\n        configurable: true\n    });\n    PopupDropdownViewModel.prototype.updatePosition = function (isResetHeight, isDelayUpdating) {\n        var _this = this;\n        if (isDelayUpdating === void 0) { isDelayUpdating = true; }\n        if (isResetHeight) {\n            this.height = \"auto\";\n        }\n        if (isDelayUpdating) {\n            setTimeout(function () {\n                _this._updatePosition();\n            }, 1);\n        }\n        else {\n            this._updatePosition();\n        }\n    };\n    PopupDropdownViewModel.prototype.updateOnHiding = function () {\n        _super.prototype.updateOnHiding.call(this);\n        window.removeEventListener(\"resize\", this.resizeWindowCallback);\n        if (this.shouldCreateResizeCallback) {\n            window.visualViewport.removeEventListener(\"resize\", this.resizeEventCallback);\n            if (this.container) {\n                this.container.removeEventListener(\"touchstart\", this.touchStartEventCallback);\n                this.container.removeEventListener(\"touchmove\", this.touchMoveEventCallback);\n            }\n        }\n        window.removeEventListener(\"scroll\", this.scrollEventCallBack);\n        if (!this.isDisposed) {\n            this.top = undefined;\n            this.left = undefined;\n            this.height = undefined;\n            this.width = undefined;\n            this.minWidth = undefined;\n        }\n    };\n    PopupDropdownViewModel.prototype.onModelChanging = function (newModel) {\n        var _this = this;\n        if (!!this.model) {\n            this.model.onRecalculatePosition.remove(this.recalculatePositionHandler);\n        }\n        if (!this.recalculatePositionHandler) {\n            this.recalculatePositionHandler = function (_, options) {\n                if (!_this.isOverlay) {\n                    _this.updatePosition(options.isResetHeight);\n                }\n            };\n        }\n        _super.prototype.onModelChanging.call(this, newModel);\n        newModel.onRecalculatePosition.add(this.recalculatePositionHandler);\n    };\n    PopupDropdownViewModel.prototype.dispose = function () {\n        _super.prototype.dispose.call(this);\n        this.updateOnHiding();\n        if (!!this.model) {\n            this.model.onRecalculatePosition.remove(this.recalculatePositionHandler);\n            this.recalculatePositionHandler = undefined;\n        }\n        this.resetComponentElement();\n    };\n    PopupDropdownViewModel.tabletSizeBreakpoint = 600;\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])()\n    ], PopupDropdownViewModel.prototype, \"isTablet\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ defaultValue: \"left\" })\n    ], PopupDropdownViewModel.prototype, \"popupDirection\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ defaultValue: { left: \"0px\", top: \"0px\" } })\n    ], PopupDropdownViewModel.prototype, \"pointerTarget\", void 0);\n    return PopupDropdownViewModel;\n}(_popup_view_model__WEBPACK_IMPORTED_MODULE_2__[\"PopupBaseViewModel\"]));\n\n\n\n/***/ }),\n\n/***/ \"./src/popup-modal-view-model.ts\":\n/*!***************************************!*\\\n  !*** ./src/popup-modal-view-model.ts ***!\n  \\***************************************/\n/*! exports provided: PopupModalViewModel */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_2431798__) {\n\n\"use strict\";\n__nested_webpack_require_2431798__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_2431798__.d(__nested_webpack_exports__, \"PopupModalViewModel\", function() { return PopupModalViewModel; });\n/* harmony import */ var _popup_view_model__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_2431798__(/*! ./popup-view-model */ \"./src/popup-view-model.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n\nvar PopupModalViewModel = /** @class */ (function (_super) {\n    __extends(PopupModalViewModel, _super);\n    function PopupModalViewModel(model) {\n        var _this = _super.call(this, model) || this;\n        _this.onScrollOutsideCallback = function (event) {\n            _this.preventScrollOuside(event, event.deltaY);\n        };\n        return _this;\n    }\n    PopupModalViewModel.prototype.getStyleClass = function () {\n        return _super.prototype.getStyleClass.call(this)\n            .append(\"sv-popup--modal\", !this.isOverlay);\n    };\n    PopupModalViewModel.prototype.getShowFooter = function () {\n        return true;\n    };\n    PopupModalViewModel.prototype.createFooterActionBar = function () {\n        var _this = this;\n        _super.prototype.createFooterActionBar.call(this);\n        this.footerToolbarValue.addAction({\n            id: \"apply\",\n            visibleIndex: 20,\n            title: this.applyButtonText,\n            innerCss: \"sv-popup__body-footer-item sv-popup__button sv-popup__button--apply sd-btn sd-btn--action\",\n            action: function () { _this.apply(); }\n        });\n    };\n    Object.defineProperty(PopupModalViewModel.prototype, \"applyButtonText\", {\n        get: function () {\n            return this.getLocalizationString(\"modalApplyButtonText\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    PopupModalViewModel.prototype.apply = function () {\n        if (!!this.model.onApply && !this.model.onApply())\n            return;\n        this.hidePopup();\n    };\n    PopupModalViewModel.prototype.clickOutside = function () {\n        return;\n    };\n    PopupModalViewModel.prototype.onKeyDown = function (event) {\n        if (event.key === \"Escape\" || event.keyCode === 27) {\n            this.model.onCancel();\n        }\n        _super.prototype.onKeyDown.call(this, event);\n    };\n    PopupModalViewModel.prototype.updateOnShowing = function () {\n        if (this.container) {\n            this.container.addEventListener(\"wheel\", this.onScrollOutsideCallback, { passive: false });\n        }\n        _super.prototype.updateOnShowing.call(this);\n    };\n    PopupModalViewModel.prototype.updateOnHiding = function () {\n        if (this.container) {\n            this.container.removeEventListener(\"wheel\", this.onScrollOutsideCallback);\n        }\n        _super.prototype.updateOnHiding.call(this);\n    };\n    return PopupModalViewModel;\n}(_popup_view_model__WEBPACK_IMPORTED_MODULE_0__[\"PopupBaseViewModel\"]));\n\n\n\n/***/ }),\n\n/***/ \"./src/popup-survey.ts\":\n/*!*****************************!*\\\n  !*** ./src/popup-survey.ts ***!\n  \\*****************************/\n/*! exports provided: PopupSurveyModel, SurveyWindowModel */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_2435682__) {\n\n\"use strict\";\n__nested_webpack_require_2435682__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_2435682__.d(__nested_webpack_exports__, \"PopupSurveyModel\", function() { return PopupSurveyModel; });\n/* harmony export (binding) */ __nested_webpack_require_2435682__.d(__nested_webpack_exports__, \"SurveyWindowModel\", function() { return SurveyWindowModel; });\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_2435682__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _survey__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_2435682__(/*! ./survey */ \"./src/survey.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_2435682__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n/**\n * A class that renders a survey in a pop-up window.\n *\n * [View Demo](https://surveyjs.io/form-library/examples/popup-survey/ (linkStyle))\n */\nvar PopupSurveyModel = /** @class */ (function (_super) {\n    __extends(PopupSurveyModel, _super);\n    function PopupSurveyModel(jsonObj, initialModel) {\n        if (initialModel === void 0) { initialModel = null; }\n        var _this = _super.call(this) || this;\n        /**\n         * Specifies how many seconds the pop-up window should remain open after users complete the survey.\n         *\n         * Default value: 0 (the window is closed immediately)\n         *\n         * Set this property to a negative value (for instance, -1) to keep the pop-up window open without a time limit.\n         */\n        _this.closeOnCompleteTimeout = 0;\n        if (initialModel) {\n            _this.surveyValue = initialModel;\n        }\n        else {\n            _this.surveyValue = _this.createSurvey(jsonObj);\n        }\n        _this.surveyValue.showTitle = false;\n        if (\"undefined\" !== typeof document) {\n            _this.windowElement = document.createElement(\"div\");\n        }\n        _this.survey.onComplete.add(function (survey, options) {\n            _this.onSurveyComplete();\n        });\n        _this.registerPropertyChangedHandlers([\"isShowing\"], function () {\n            if (!!_this.showingChangedCallback)\n                _this.showingChangedCallback();\n        });\n        _this.registerPropertyChangedHandlers([\"isExpanded\"], function () {\n            _this.onExpandedChanged();\n        });\n        _this.width = new _base__WEBPACK_IMPORTED_MODULE_0__[\"ComputedUpdater\"](function () { return _this.survey.width; });\n        _this.width = _this.survey.width;\n        _this.updateCss();\n        _this.onCreating();\n        return _this;\n    }\n    PopupSurveyModel.prototype.onCreating = function () { };\n    PopupSurveyModel.prototype.getType = function () {\n        return \"popupsurvey\";\n    };\n    Object.defineProperty(PopupSurveyModel.prototype, \"survey\", {\n        /**\n         * A [`SurveyModel`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model) instance rendered in the pop-up window.\n         */\n        get: function () {\n            return this.surveyValue;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(PopupSurveyModel.prototype, \"isShowing\", {\n        /**\n         * Indicates whether the pop-up survey appears on the page, regardless of its [expand state](#isExpanded).\n         *\n         * You can set this property to `true` or `false` to control visibility of the pop-up survey. Alternatively, you can use the [`show()`](#show) and [`hide()`](#hide) methods.\n         */\n        get: function () {\n            return this.getPropertyValue(\"isShowing\", false);\n        },\n        set: function (val) {\n            this.setPropertyValue(\"isShowing\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    /**\n     * Shows the pop-up survey. The survey may appear [expanded or collapsed](#isExpanded).\n     *\n     * As an alternative to this method, you can set the [`isShowing`](#isShowing) property to `true`.\n     * @see hide\n     */\n    PopupSurveyModel.prototype.show = function () {\n        this.isShowing = true;\n    };\n    /**\n     * Hides the pop-up survey.\n     *\n     * As an alternative to this method, you can set the [`isShowing`](#isShowing) property to `false`.\n     * @see show\n     * @see expand\n     * @see collapse\n     */\n    PopupSurveyModel.prototype.hide = function () {\n        this.isShowing = false;\n    };\n    Object.defineProperty(PopupSurveyModel.prototype, \"isExpanded\", {\n        /**\n         * Indicates whether the pop-up window is expanded or collapsed.\n         *\n         * You can set this property to `true` or `false` to control the expand state of the pop-up survey. Alternatively, you can use the [`expand()`](#expand) and [`collapse()`](#collapse) methods.\n         */\n        get: function () {\n            return this.getPropertyValue(\"isExpanded\", false);\n        },\n        set: function (val) {\n            this.setPropertyValue(\"isExpanded\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    PopupSurveyModel.prototype.onExpandedChanged = function () {\n        if (!!this.expandedChangedCallback) {\n            this.expandedChangedCallback();\n        }\n        this.updateCssButton();\n    };\n    Object.defineProperty(PopupSurveyModel.prototype, \"title\", {\n        /**\n         * A title for the pop-up window. If this property is undefined, the title is taken from [`SurveyModel`](#survey)'s [`title`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#title) property.\n         */\n        get: function () {\n            return this.survey.title;\n        },\n        set: function (value) {\n            this.survey.title = value;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(PopupSurveyModel.prototype, \"locTitle\", {\n        get: function () {\n            return this.survey.locTitle;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    /**\n     * Expands the pop-up window.\n     *\n     * As an alternative to this method, you can set the [`isExpanded`](#isExpanded) property to `true`.\n     * @see collapse\n     */\n    PopupSurveyModel.prototype.expand = function () {\n        this.isExpanded = true;\n    };\n    /**\n     * Collapses the pop-up window, leaving only the survey title visible.\n     *\n     * As an alternative to this method, you can set the [`isExpanded`](#isExpanded) property to `false`.\n     * @see expand\n     */\n    PopupSurveyModel.prototype.collapse = function () {\n        this.isExpanded = false;\n    };\n    PopupSurveyModel.prototype.changeExpandCollapse = function () {\n        this.isExpanded = !this.isExpanded;\n    };\n    Object.defineProperty(PopupSurveyModel.prototype, \"allowClose\", {\n        /**\n         * Specifies whether to display a button that closes the pop-up window.\n         *\n         * Default value: `false`\n         *\n         * If you allow users to close the pop-up window, make sure to implement a UI element that opens it. This element should call the [`show()`](#show) method or enable the [`isShowing`](#isShowing) property.\n         * @see expand\n         * @see collapse\n         * @see hide\n         */\n        get: function () {\n            return this.getPropertyValue(\"allowClose\", false);\n        },\n        set: function (val) {\n            this.setPropertyValue(\"allowClose\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(PopupSurveyModel.prototype, \"css\", {\n        get: function () {\n            return this.survey.css;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(PopupSurveyModel.prototype, \"cssButton\", {\n        get: function () {\n            return this.getPropertyValue(\"cssButton\", \"\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(PopupSurveyModel.prototype, \"cssRoot\", {\n        get: function () {\n            return this.getPropertyValue(\"cssRoot\", \"\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(PopupSurveyModel.prototype, \"cssBody\", {\n        get: function () {\n            return this.getPropertyValue(\"cssBody\", \"\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(PopupSurveyModel.prototype, \"cssHeaderRoot\", {\n        get: function () {\n            return this.getPropertyValue(\"cssHeaderRoot\", \"\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(PopupSurveyModel.prototype, \"cssHeaderTitle\", {\n        get: function () {\n            return this.getPropertyValue(\"cssHeaderTitle\", \"\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(PopupSurveyModel.prototype, \"cssHeaderButton\", {\n        get: function () {\n            return this.getPropertyValue(\"cssHeaderButton\", \"\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(PopupSurveyModel.prototype, \"renderedWidth\", {\n        get: function () {\n            var width = this.getPropertyValue(\"width\", \"60%\");\n            if (width && !isNaN(width))\n                width = width + \"px\";\n            return width;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    PopupSurveyModel.prototype.updateCss = function () {\n        if (!this.css || !this.css.window)\n            return;\n        var cssWindow = this.css.window;\n        this.setPropertyValue(\"cssRoot\", cssWindow.root);\n        this.setPropertyValue(\"cssBody\", cssWindow.body);\n        var cssHeader = cssWindow.header;\n        if (!cssHeader)\n            return;\n        this.setPropertyValue(\"cssHeaderRoot\", cssHeader.root);\n        this.setPropertyValue(\"cssHeaderTitle\", cssHeader.title);\n        this.setPropertyValue(\"cssHeaderButton\", cssHeader.button);\n        this.updateCssButton();\n    };\n    PopupSurveyModel.prototype.updateCssButton = function () {\n        var cssHeader = !!this.css.window ? this.css.window.header : null;\n        if (!cssHeader)\n            return;\n        this.setCssButton(this.isExpanded ? cssHeader.buttonExpanded : cssHeader.buttonCollapsed);\n    };\n    PopupSurveyModel.prototype.setCssButton = function (val) {\n        if (!val)\n            return;\n        this.setPropertyValue(\"cssButton\", val);\n    };\n    PopupSurveyModel.prototype.createSurvey = function (jsonObj) {\n        return new _survey__WEBPACK_IMPORTED_MODULE_1__[\"SurveyModel\"](jsonObj);\n    };\n    PopupSurveyModel.prototype.onSurveyComplete = function () {\n        if (this.closeOnCompleteTimeout < 0)\n            return;\n        if (this.closeOnCompleteTimeout == 0) {\n            this.hide();\n        }\n        else {\n            var self = this;\n            var timerId = null;\n            var func = function () {\n                self.hide();\n                if (typeof window !== \"undefined\") {\n                    window.clearInterval(timerId);\n                }\n            };\n            timerId =\n                typeof window !== \"undefined\"\n                    ? window.setInterval(func, this.closeOnCompleteTimeout * 1000)\n                    : 0;\n        }\n    };\n    PopupSurveyModel.prototype.onScroll = function () {\n        this.survey.onScroll();\n    };\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"property\"])()\n    ], PopupSurveyModel.prototype, \"width\", void 0);\n    return PopupSurveyModel;\n}(_base__WEBPACK_IMPORTED_MODULE_0__[\"Base\"]));\n\n/**\n * Obsolete. Please use PopupSurvey\n */\nvar SurveyWindowModel = /** @class */ (function (_super) {\n    __extends(SurveyWindowModel, _super);\n    function SurveyWindowModel() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    return SurveyWindowModel;\n}(PopupSurveyModel));\n\n\n\n/***/ }),\n\n/***/ \"./src/popup-utils.ts\":\n/*!****************************!*\\\n  !*** ./src/popup-utils.ts ***!\n  \\****************************/\n/*! exports provided: createPopupModalViewModel, createPopupViewModel */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_2449156__) {\n\n\"use strict\";\n__nested_webpack_require_2449156__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_2449156__.d(__nested_webpack_exports__, \"createPopupModalViewModel\", function() { return createPopupModalViewModel; });\n/* harmony export (binding) */ __nested_webpack_require_2449156__.d(__nested_webpack_exports__, \"createPopupViewModel\", function() { return createPopupViewModel; });\n/* harmony import */ var _popup__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_2449156__(/*! ./popup */ \"./src/popup.ts\");\n/* harmony import */ var _popup_dropdown_view_model__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_2449156__(/*! ./popup-dropdown-view-model */ \"./src/popup-dropdown-view-model.ts\");\n/* harmony import */ var _popup_modal_view_model__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_2449156__(/*! ./popup-modal-view-model */ \"./src/popup-modal-view-model.ts\");\n\n\n\nfunction createPopupModalViewModel(options, rootElement) {\n    var popupModel = new _popup__WEBPACK_IMPORTED_MODULE_0__[\"PopupModel\"](options.componentName, options.data, \"top\", \"left\", false, true, options.onCancel, options.onApply, function () {\n        options.onHide();\n        if (!!container) {\n            popupViewModel.resetComponentElement();\n        }\n    }, options.onShow, options.cssClass, options.title);\n    popupModel.displayMode = options.displayMode || \"popup\";\n    var popupViewModel = new _popup_modal_view_model__WEBPACK_IMPORTED_MODULE_2__[\"PopupModalViewModel\"](popupModel);\n    if (!!rootElement && !!rootElement.appendChild) {\n        var container = document.createElement(\"div\");\n        rootElement.appendChild(container);\n        popupViewModel.setComponentElement(container);\n    }\n    if (!popupViewModel.container) {\n        popupViewModel.initializePopupContainer();\n    }\n    return popupViewModel;\n}\nfunction createPopupViewModel(model, targetElement) {\n    if (model.isModal) {\n        return new _popup_modal_view_model__WEBPACK_IMPORTED_MODULE_2__[\"PopupModalViewModel\"](model);\n    }\n    else {\n        return new _popup_dropdown_view_model__WEBPACK_IMPORTED_MODULE_1__[\"PopupDropdownViewModel\"](model, targetElement);\n    }\n}\n\n\n/***/ }),\n\n/***/ \"./src/popup-view-model.ts\":\n/*!*********************************!*\\\n  !*** ./src/popup-view-model.ts ***!\n  \\*********************************/\n/*! exports provided: FOCUS_INPUT_SELECTOR, PopupBaseViewModel */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_2451543__) {\n\n\"use strict\";\n__nested_webpack_require_2451543__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_2451543__.d(__nested_webpack_exports__, \"FOCUS_INPUT_SELECTOR\", function() { return FOCUS_INPUT_SELECTOR; });\n/* harmony export (binding) */ __nested_webpack_require_2451543__.d(__nested_webpack_exports__, \"PopupBaseViewModel\", function() { return PopupBaseViewModel; });\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_2451543__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_2451543__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_2451543__(/*! ./utils/cssClassBuilder */ \"./src/utils/cssClassBuilder.ts\");\n/* harmony import */ var _actions_container__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_2451543__(/*! ./actions/container */ \"./src/actions/container.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_2451543__(/*! ./settings */ \"./src/settings.ts\");\n/* harmony import */ var _utils_utils__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_2451543__(/*! ./utils/utils */ \"./src/utils/utils.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\n\nvar FOCUS_INPUT_SELECTOR = \"input:not(:disabled):not([readonly]):not([type=hidden]),select:not(:disabled):not([readonly]),textarea:not(:disabled):not([readonly]), button:not(:disabled):not([readonly]), [tabindex]:not([tabindex^=\\\"-\\\"])\";\nvar PopupBaseViewModel = /** @class */ (function (_super) {\n    __extends(PopupBaseViewModel, _super);\n    function PopupBaseViewModel(model) {\n        var _this = _super.call(this) || this;\n        _this.subscriptionId = PopupBaseViewModel.SubscriptionId++;\n        _this.popupSelector = \".sv-popup\";\n        _this.fixedPopupContainer = \".sv-popup\";\n        _this.containerSelector = \".sv-popup__container\";\n        _this.scrollingContentSelector = \".sv-popup__scrolling-content\";\n        _this.model = model;\n        return _this;\n    }\n    Object.defineProperty(PopupBaseViewModel.prototype, \"container\", {\n        get: function () {\n            return this.containerElement || this.createdContainer;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    PopupBaseViewModel.prototype.getLocale = function () {\n        if (!!this.locale)\n            return this.locale;\n        return _super.prototype.getLocale.call(this);\n    };\n    PopupBaseViewModel.prototype.hidePopup = function () {\n        this.model.isVisible = false;\n    };\n    PopupBaseViewModel.prototype.getStyleClass = function () {\n        return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_2__[\"CssClassBuilder\"]()\n            .append(this.model.cssClass)\n            .append(\"sv-popup--\" + this.model.displayMode, this.isOverlay);\n    };\n    PopupBaseViewModel.prototype.getShowFooter = function () {\n        return this.isOverlay;\n    };\n    PopupBaseViewModel.prototype.getShowHeader = function () {\n        return false;\n    };\n    PopupBaseViewModel.prototype.getPopupHeaderTemplate = function () {\n        return undefined;\n    };\n    PopupBaseViewModel.prototype.createFooterActionBar = function () {\n        var _this = this;\n        this.footerToolbarValue = new _actions_container__WEBPACK_IMPORTED_MODULE_3__[\"ActionContainer\"]();\n        this.footerToolbar.updateCallback = function (isResetInitialized) {\n            _this.footerToolbarValue.actions.forEach(function (action) { return action.cssClasses = {\n                item: \"sv-popup__body-footer-item sv-popup__button sd-btn\"\n            }; });\n        };\n        var footerActions = [{\n                id: \"cancel\",\n                visibleIndex: 10,\n                title: this.cancelButtonText,\n                innerCss: \"sv-popup__button--cancel sd-btn\",\n                action: function () { _this.cancel(); }\n            }];\n        footerActions = this.model.updateFooterActions(footerActions);\n        this.footerToolbarValue.setItems(footerActions);\n    };\n    PopupBaseViewModel.prototype.resetDimensionsAndPositionStyleProperties = function () {\n        var nullableValue = \"inherit\";\n        this.top = nullableValue;\n        this.left = nullableValue;\n        this.height = nullableValue;\n        this.width = nullableValue;\n        this.minWidth = nullableValue;\n    };\n    PopupBaseViewModel.prototype.onModelChanging = function (newModel) {\n    };\n    PopupBaseViewModel.prototype.setupModel = function (model) {\n        var _this = this;\n        if (!!this.model) {\n            this.model.unregisterPropertyChangedHandlers([\"isVisible\"], \"PopupBaseViewModel\" + this.subscriptionId);\n        }\n        this.onModelChanging(model);\n        this._model = model;\n        var onIsVisibleChangedHandler = function () {\n            if (!model.isVisible) {\n                _this.updateOnHiding();\n            }\n            _this.isVisible = model.isVisible;\n        };\n        model.registerPropertyChangedHandlers([\"isVisible\"], onIsVisibleChangedHandler, \"PopupBaseViewModel\" + this.subscriptionId);\n        onIsVisibleChangedHandler();\n    };\n    Object.defineProperty(PopupBaseViewModel.prototype, \"model\", {\n        get: function () {\n            return this._model;\n        },\n        set: function (model) {\n            this.setupModel(model);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(PopupBaseViewModel.prototype, \"title\", {\n        get: function () {\n            return this.model.title;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(PopupBaseViewModel.prototype, \"contentComponentName\", {\n        get: function () {\n            return this.model.contentComponentName;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(PopupBaseViewModel.prototype, \"contentComponentData\", {\n        get: function () {\n            return this.model.contentComponentData;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(PopupBaseViewModel.prototype, \"isModal\", {\n        get: function () {\n            return this.model.isModal;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(PopupBaseViewModel.prototype, \"isFocusedContent\", {\n        get: function () {\n            return this.model.isFocusedContent;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(PopupBaseViewModel.prototype, \"isFocusedContainer\", {\n        get: function () {\n            return this.model.isFocusedContainer;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(PopupBaseViewModel.prototype, \"showFooter\", {\n        get: function () {\n            return this.getShowFooter();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(PopupBaseViewModel.prototype, \"showHeader\", {\n        get: function () {\n            return this.getShowHeader();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(PopupBaseViewModel.prototype, \"popupHeaderTemplate\", {\n        get: function () {\n            return this.getPopupHeaderTemplate();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(PopupBaseViewModel.prototype, \"isOverlay\", {\n        get: function () {\n            return this.model.displayMode === \"overlay\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(PopupBaseViewModel.prototype, \"styleClass\", {\n        get: function () {\n            return this.getStyleClass().toString();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(PopupBaseViewModel.prototype, \"cancelButtonText\", {\n        get: function () {\n            return this.getLocalizationString(\"modalCancelButtonText\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(PopupBaseViewModel.prototype, \"footerToolbar\", {\n        get: function () {\n            if (!this.footerToolbarValue) {\n                this.createFooterActionBar();\n            }\n            return this.footerToolbarValue;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    PopupBaseViewModel.prototype.onKeyDown = function (event) {\n        if (event.key === \"Tab\" || event.keyCode === 9) {\n            this.trapFocus(event);\n        }\n        else if (event.key === \"Escape\" || event.keyCode === 27) {\n            this.hidePopup();\n        }\n    };\n    PopupBaseViewModel.prototype.trapFocus = function (event) {\n        var focusableElements = this.container.querySelectorAll(FOCUS_INPUT_SELECTOR);\n        var firstFocusableElement = focusableElements[0];\n        var lastFocusableElement = focusableElements[focusableElements.length - 1];\n        if (event.shiftKey) {\n            if (_settings__WEBPACK_IMPORTED_MODULE_4__[\"settings\"].environment.root.activeElement === firstFocusableElement) {\n                lastFocusableElement.focus();\n                event.preventDefault();\n            }\n        }\n        else {\n            if (_settings__WEBPACK_IMPORTED_MODULE_4__[\"settings\"].environment.root.activeElement === lastFocusableElement) {\n                firstFocusableElement.focus();\n                event.preventDefault();\n            }\n        }\n    };\n    PopupBaseViewModel.prototype.switchFocus = function () {\n        if (this.isFocusedContent) {\n            this.focusFirstInput();\n        }\n        else if (this.isFocusedContainer) {\n            this.focusContainer();\n        }\n    };\n    PopupBaseViewModel.prototype.updateOnShowing = function () {\n        this.prevActiveElement = _settings__WEBPACK_IMPORTED_MODULE_4__[\"settings\"].environment.root.activeElement;\n        if (this.isOverlay) {\n            this.resetDimensionsAndPositionStyleProperties();\n        }\n        this.switchFocus();\n    };\n    PopupBaseViewModel.prototype.updateOnHiding = function () {\n        if (this.isFocusedContent && this.prevActiveElement) {\n            this.prevActiveElement.focus();\n        }\n    };\n    PopupBaseViewModel.prototype.focusContainer = function () {\n        if (!this.container)\n            return;\n        var popup = this.container.querySelector(this.popupSelector);\n        popup === null || popup === void 0 ? void 0 : popup.focus();\n    };\n    PopupBaseViewModel.prototype.focusFirstInput = function () {\n        var _this = this;\n        setTimeout(function () {\n            if (!_this.container)\n                return;\n            var el = _this.container.querySelector(_this.model.focusFirstInputSelector || FOCUS_INPUT_SELECTOR);\n            if (!!el)\n                el.focus();\n            else\n                _this.focusContainer();\n        }, 100);\n    };\n    PopupBaseViewModel.prototype.clickOutside = function (event) {\n        this.hidePopup();\n        event === null || event === void 0 ? void 0 : event.stopPropagation();\n    };\n    PopupBaseViewModel.prototype.cancel = function () {\n        this.model.onCancel();\n        this.hidePopup();\n    };\n    PopupBaseViewModel.prototype.dispose = function () {\n        _super.prototype.dispose.call(this);\n        if (this.model) {\n            this.model.unregisterPropertyChangedHandlers([\"isVisible\"], \"PopupBaseViewModel\" + this.subscriptionId);\n        }\n        if (!!this.createdContainer) {\n            this.createdContainer.remove();\n            this.createdContainer = undefined;\n        }\n        if (!!this.footerToolbarValue) {\n            this.footerToolbarValue.dispose();\n        }\n        this.resetComponentElement();\n    };\n    PopupBaseViewModel.prototype.initializePopupContainer = function () {\n        if (!this.container) {\n            var container = document.createElement(\"div\");\n            this.createdContainer = container;\n            Object(_utils_utils__WEBPACK_IMPORTED_MODULE_5__[\"getElement\"])(_settings__WEBPACK_IMPORTED_MODULE_4__[\"settings\"].environment.popupMountContainer).appendChild(container);\n        }\n    };\n    PopupBaseViewModel.prototype.setComponentElement = function (componentRoot, targetElement) {\n        if (!!componentRoot) {\n            this.containerElement = componentRoot;\n        }\n    };\n    PopupBaseViewModel.prototype.resetComponentElement = function () {\n        this.containerElement = undefined;\n        this.prevActiveElement = undefined;\n    };\n    PopupBaseViewModel.prototype.preventScrollOuside = function (event, deltaY) {\n        var currentElement = event.target;\n        while (currentElement !== this.container) {\n            if (window.getComputedStyle(currentElement).overflowY === \"auto\" && currentElement.scrollHeight !== currentElement.offsetHeight) {\n                var scrollHeight = currentElement.scrollHeight, scrollTop = currentElement.scrollTop, clientHeight = currentElement.clientHeight;\n                if (!(deltaY > 0 && Math.abs(scrollHeight - clientHeight - scrollTop) < 1) && !(deltaY < 0 && scrollTop <= 0)) {\n                    return;\n                }\n            }\n            currentElement = currentElement.parentElement;\n        }\n        event.preventDefault();\n    };\n    PopupBaseViewModel.SubscriptionId = 0;\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: \"0px\" })\n    ], PopupBaseViewModel.prototype, \"top\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: \"0px\" })\n    ], PopupBaseViewModel.prototype, \"left\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: \"auto\" })\n    ], PopupBaseViewModel.prototype, \"height\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: \"auto\" })\n    ], PopupBaseViewModel.prototype, \"width\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: \"auto\" })\n    ], PopupBaseViewModel.prototype, \"minWidth\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: false })\n    ], PopupBaseViewModel.prototype, \"isVisible\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n    ], PopupBaseViewModel.prototype, \"locale\", void 0);\n    return PopupBaseViewModel;\n}(_base__WEBPACK_IMPORTED_MODULE_0__[\"Base\"]));\n\n\n\n/***/ }),\n\n/***/ \"./src/popup.ts\":\n/*!**********************!*\\\n  !*** ./src/popup.ts ***!\n  \\**********************/\n/*! exports provided: PopupModel, createDialogOptions */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_2467649__) {\n\n\"use strict\";\n__nested_webpack_require_2467649__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_2467649__.d(__nested_webpack_exports__, \"PopupModel\", function() { return PopupModel; });\n/* harmony export (binding) */ __nested_webpack_require_2467649__.d(__nested_webpack_exports__, \"createDialogOptions\", function() { return createDialogOptions; });\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_2467649__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_2467649__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar PopupModel = /** @class */ (function (_super) {\n    __extends(PopupModel, _super);\n    function PopupModel(contentComponentName, contentComponentData, verticalPosition, horizontalPosition, showPointer, isModal, onCancel, onApply, onHide, onShow, cssClass, title, onDispose) {\n        if (verticalPosition === void 0) { verticalPosition = \"bottom\"; }\n        if (horizontalPosition === void 0) { horizontalPosition = \"left\"; }\n        if (showPointer === void 0) { showPointer = true; }\n        if (isModal === void 0) { isModal = false; }\n        if (onCancel === void 0) { onCancel = function () { }; }\n        if (onApply === void 0) { onApply = function () { return true; }; }\n        if (onHide === void 0) { onHide = function () { }; }\n        if (onShow === void 0) { onShow = function () { }; }\n        if (cssClass === void 0) { cssClass = \"\"; }\n        if (title === void 0) { title = \"\"; }\n        if (onDispose === void 0) { onDispose = function () { }; }\n        var _this = _super.call(this) || this;\n        _this.onDispose = onDispose;\n        _this.focusFirstInputSelector = \"\";\n        _this.onVisibilityChanged = _this.addEvent();\n        _this.onFooterActionsCreated = _this.addEvent();\n        _this.onRecalculatePosition = _this.addEvent();\n        _this.contentComponentName = contentComponentName;\n        _this.contentComponentData = contentComponentData;\n        _this.verticalPosition = verticalPosition;\n        _this.horizontalPosition = horizontalPosition;\n        _this.showPointer = showPointer;\n        _this.isModal = isModal;\n        _this.onCancel = onCancel;\n        _this.onApply = onApply;\n        _this.onHide = onHide;\n        _this.onShow = onShow;\n        _this.cssClass = cssClass;\n        _this.title = title;\n        return _this;\n    }\n    PopupModel.prototype.refreshInnerModel = function () {\n        var innerModel = this.contentComponentData[\"model\"];\n        innerModel && innerModel.refresh && innerModel.refresh();\n    };\n    Object.defineProperty(PopupModel.prototype, \"isVisible\", {\n        get: function () {\n            return this.getPropertyValue(\"isVisible\", false);\n        },\n        set: function (value) {\n            if (this.isVisible === value) {\n                return;\n            }\n            this.setPropertyValue(\"isVisible\", value);\n            this.onVisibilityChanged.fire(this, { model: this, isVisible: value });\n            if (this.isVisible) {\n                this.onShow();\n            }\n            else {\n                this.refreshInnerModel();\n                this.onHide();\n            }\n        },\n        enumerable: false,\n        configurable: true\n    });\n    PopupModel.prototype.toggleVisibility = function () {\n        this.isVisible = !this.isVisible;\n    };\n    PopupModel.prototype.recalculatePosition = function (isResetHeight) {\n        this.onRecalculatePosition.fire(this, { isResetHeight: isResetHeight });\n    };\n    PopupModel.prototype.updateFooterActions = function (footerActions) {\n        var options = { actions: footerActions };\n        this.onFooterActionsCreated.fire(this, options);\n        return options.actions;\n    };\n    PopupModel.prototype.dispose = function () {\n        _super.prototype.dispose.call(this);\n        this.onDispose();\n    };\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n    ], PopupModel.prototype, \"contentComponentName\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n    ], PopupModel.prototype, \"contentComponentData\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: \"bottom\" })\n    ], PopupModel.prototype, \"verticalPosition\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: \"left\" })\n    ], PopupModel.prototype, \"horizontalPosition\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: false })\n    ], PopupModel.prototype, \"showPointer\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: false })\n    ], PopupModel.prototype, \"isModal\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: true })\n    ], PopupModel.prototype, \"isFocusedContent\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: true })\n    ], PopupModel.prototype, \"isFocusedContainer\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: function () { } })\n    ], PopupModel.prototype, \"onCancel\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: function () { return true; } })\n    ], PopupModel.prototype, \"onApply\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: function () { } })\n    ], PopupModel.prototype, \"onHide\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: function () { } })\n    ], PopupModel.prototype, \"onShow\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: \"\" })\n    ], PopupModel.prototype, \"cssClass\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: \"\" })\n    ], PopupModel.prototype, \"title\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: \"popup\" })\n    ], PopupModel.prototype, \"displayMode\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: \"flex\" })\n    ], PopupModel.prototype, \"positionMode\", void 0);\n    return PopupModel;\n}(_base__WEBPACK_IMPORTED_MODULE_0__[\"Base\"]));\n\nfunction createDialogOptions(componentName, data, onApply, onCancel, onHide, onShow, cssClass, title, displayMode) {\n    if (onHide === void 0) { onHide = function () { }; }\n    if (onShow === void 0) { onShow = function () { }; }\n    if (displayMode === void 0) { displayMode = \"popup\"; }\n    return {\n        componentName: componentName,\n        data: data,\n        onApply: onApply,\n        onCancel: onCancel,\n        onHide: onHide,\n        onShow: onShow,\n        cssClass: cssClass,\n        title: title,\n        displayMode: displayMode\n    };\n}\n\n\n/***/ }),\n\n/***/ \"./src/question.ts\":\n/*!*************************!*\\\n  !*** ./src/question.ts ***!\n  \\*************************/\n/*! exports provided: Question */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_2476350__) {\n\n\"use strict\";\n__nested_webpack_require_2476350__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_2476350__.d(__nested_webpack_exports__, \"Question\", function() { return Question; });\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_2476350__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_2476350__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _survey_element__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_2476350__(/*! ./survey-element */ \"./src/survey-element.ts\");\n/* harmony import */ var _error__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_2476350__(/*! ./error */ \"./src/error.ts\");\n/* harmony import */ var _validator__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_2476350__(/*! ./validator */ \"./src/validator.ts\");\n/* harmony import */ var _localizablestring__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_2476350__(/*! ./localizablestring */ \"./src/localizablestring.ts\");\n/* harmony import */ var _conditions__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_2476350__(/*! ./conditions */ \"./src/conditions.ts\");\n/* harmony import */ var _questionCustomWidgets__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_2476350__(/*! ./questionCustomWidgets */ \"./src/questionCustomWidgets.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_2476350__(/*! ./settings */ \"./src/settings.ts\");\n/* harmony import */ var _rendererFactory__WEBPACK_IMPORTED_MODULE_9__ = __nested_webpack_require_2476350__(/*! ./rendererFactory */ \"./src/rendererFactory.ts\");\n/* harmony import */ var _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_10__ = __nested_webpack_require_2476350__(/*! ./utils/cssClassBuilder */ \"./src/utils/cssClassBuilder.ts\");\n/* harmony import */ var _utils_utils__WEBPACK_IMPORTED_MODULE_11__ = __nested_webpack_require_2476350__(/*! ./utils/utils */ \"./src/utils/utils.ts\");\n/* harmony import */ var _console_warnings__WEBPACK_IMPORTED_MODULE_12__ = __nested_webpack_require_2476350__(/*! ./console-warnings */ \"./src/console-warnings.ts\");\n/* harmony import */ var _conditionProcessValue__WEBPACK_IMPORTED_MODULE_13__ = __nested_webpack_require_2476350__(/*! ./conditionProcessValue */ \"./src/conditionProcessValue.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * A base class for all questions.\n */\nvar Question = /** @class */ (function (_super) {\n    __extends(Question, _super);\n    function Question(name) {\n        var _this = _super.call(this, name) || this;\n        _this.customWidgetData = { isNeedRender: true };\n        _this.isReadyValue = true;\n        _this.dependedQuestions = [];\n        /**\n         * An event that is raised when the question's ready state has changed (expressions are evaluated, choices are loaded from a web resource specified by the `choicesByUrl` property, etc.).\n         *\n         * Parameters:\n         *\n         * - `sender`: `SurveyModel`\\\n         * A survey instance that contains the question whose ready state has changed.\n         * - `options.isReady`: `Boolean`\\\n         * Indicates whether the question is ready.\n         * - `options.oldIsReady`: `Boolean`\\\n         * Indicates the previous ready state.\n         */\n        _this.onReadyChanged = _this.addEvent();\n        _this.isRunningValidatorsValue = false;\n        _this.isValueChangedInSurvey = false;\n        _this.allowNotifyValueChanged = true;\n        _this.id = Question.getQuestionId();\n        _this.onCreating();\n        _this.createNewArray(\"validators\", function (validator) {\n            validator.errorOwner = _this;\n        });\n        _this.addExpressionProperty(\"visibleIf\", function (obj, res) { _this.visible = res === true; }, function (obj) { return !_this.areInvisibleElementsShowing; });\n        _this.addExpressionProperty(\"enableIf\", function (obj, res) { _this.readOnly = res === false; });\n        _this.addExpressionProperty(\"requiredIf\", function (obj, res) { _this.isRequired = res === true; });\n        _this.createLocalizableString(\"commentText\", _this, true, \"otherItemText\");\n        _this.locTitle.onGetDefaultTextCallback = function () {\n            return _this.name;\n        };\n        _this.locTitle.storeDefaultText = true;\n        _this.createLocalizableString(\"requiredErrorText\", _this);\n        _this.registerPropertyChangedHandlers([\"width\"], function () {\n            _this.updateQuestionCss();\n            if (!!_this.parent) {\n                _this.parent.elementWidthChanged(_this);\n            }\n        });\n        _this.registerPropertyChangedHandlers([\"isRequired\"], function () {\n            if (!_this.isRequired && _this.errors.length > 0) {\n                _this.validate();\n            }\n            _this.locTitle.strChanged();\n            _this.clearCssClasses();\n        });\n        _this.registerPropertyChangedHandlers([\"indent\", \"rightIndent\"], function () {\n            _this.onIndentChanged();\n        });\n        _this.registerPropertyChangedHandlers([\"showCommentArea\", \"showOtherItem\"], function () {\n            _this.initCommentFromSurvey();\n        });\n        _this.registerFunctionOnPropertiesValueChanged([\"no\", \"readOnly\"], function () {\n            _this.updateQuestionCss();\n        });\n        _this.registerPropertyChangedHandlers([\"isMobile\"], function () { _this.onMobileChanged(); });\n        return _this;\n    }\n    Question.getQuestionId = function () {\n        return \"sq_\" + Question.questionCounter++;\n    };\n    Question.prototype.isReadOnlyRenderDiv = function () {\n        return this.isReadOnly && _settings__WEBPACK_IMPORTED_MODULE_8__[\"settings\"].readOnly.commentRenderMode === \"div\";\n    };\n    Question.prototype.allowMobileInDesignMode = function () {\n        return false;\n    };\n    Question.prototype.updateIsMobileFromSurvey = function () {\n        this.setIsMobile(this.survey._isMobile);\n    };\n    Question.prototype.setIsMobile = function (val) {\n        this.isMobile = val && (this.allowMobileInDesignMode() || !this.isDesignMode);\n        this.renderMinWidth = !val;\n    };\n    Question.prototype.createLocTitleProperty = function () {\n        var _this = this;\n        var locTitleValue = _super.prototype.createLocTitleProperty.call(this);\n        locTitleValue.onGetTextCallback = function (text) {\n            if (!text) {\n                text = _this.name;\n            }\n            if (!_this.survey)\n                return text;\n            return _this.survey.getUpdatedQuestionTitle(_this, text);\n        };\n        this.locProcessedTitle = new _localizablestring__WEBPACK_IMPORTED_MODULE_5__[\"LocalizableString\"](this, true);\n        this.locProcessedTitle.sharedData = locTitleValue;\n        return locTitleValue;\n    };\n    Question.prototype.getSurvey = function (live) {\n        if (live === void 0) { live = false; }\n        if (live) {\n            return !!this.parent ? this.parent.getSurvey(live) : null;\n        }\n        if (!!this.onGetSurvey)\n            return this.onGetSurvey();\n        return _super.prototype.getSurvey.call(this);\n    };\n    Question.prototype.getValueName = function () {\n        if (!!this.valueName)\n            return this.valueName.toString();\n        return this.name;\n    };\n    Object.defineProperty(Question.prototype, \"valueName\", {\n        /**\n         * Specifies an object property that should store the question value.\n         *\n         * Refer to the [Merge Question Values](https://surveyjs.io/form-library/documentation/design-survey-merge-question-values) help topic for more information.\n         */\n        get: function () {\n            return this.getPropertyValue(\"valueName\", \"\");\n        },\n        set: function (val) {\n            var oldValueName = this.getValueName();\n            this.setPropertyValue(\"valueName\", val);\n            this.onValueNameChanged(oldValueName);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Question.prototype.onValueNameChanged = function (oldValue) {\n        if (!this.survey)\n            return;\n        this.survey.questionRenamed(this, this.name, !!oldValue ? oldValue : this.name);\n        this.initDataFromSurvey();\n    };\n    Question.prototype.onNameChanged = function (oldValue) {\n        this.locTitle.strChanged();\n        if (!this.survey)\n            return;\n        this.survey.questionRenamed(this, oldValue, this.valueName ? this.valueName : oldValue);\n    };\n    Object.defineProperty(Question.prototype, \"isReady\", {\n        get: function () {\n            return this.isReadyValue;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Question.prototype.onAsyncRunningChanged = function () {\n        this.updateIsReady();\n    };\n    Question.prototype.updateIsReady = function () {\n        var res = this.getIsQuestionReady();\n        if (res) {\n            var questions = this.getIsReadyDependsOn();\n            for (var i = 0; i < questions.length; i++) {\n                if (!questions[i].getIsQuestionReady()) {\n                    res = false;\n                    break;\n                }\n            }\n        }\n        this.setIsReady(res);\n    };\n    Question.prototype.getIsQuestionReady = function () {\n        return !this.isAsyncExpressionRunning && this.getAreNestedQuestionsReady();\n    };\n    Question.prototype.getAreNestedQuestionsReady = function () {\n        var questions = this.getIsReadyNestedQuestions();\n        if (!Array.isArray(questions))\n            return true;\n        for (var i = 0; i < questions.length; i++) {\n            if (!questions[i].isReady)\n                return false;\n        }\n        return true;\n    };\n    Question.prototype.getIsReadyNestedQuestions = function () {\n        return this.getNestedQuestions();\n    };\n    Question.prototype.setIsReady = function (val) {\n        var oldIsReady = this.isReadyValue;\n        this.isReadyValue = val;\n        if (oldIsReady != val) {\n            this.getIsReadyDependends().forEach(function (q) { return q.updateIsReady(); });\n            this.onReadyChanged.fire(this, {\n                question: this,\n                isReady: val,\n                oldIsReady: oldIsReady,\n            });\n        }\n    };\n    Question.prototype.getIsReadyDependsOn = function () {\n        return this.getIsReadyDependendCore(true);\n    };\n    Question.prototype.getIsReadyDependends = function () {\n        return this.getIsReadyDependendCore(false);\n    };\n    Question.prototype.getIsReadyDependendCore = function (isDependOn) {\n        var _this = this;\n        if (!this.survey)\n            return [];\n        var questions = this.survey.questionsByValueName(this.getValueName());\n        var res = new Array();\n        questions.forEach(function (q) { if (q !== _this)\n            res.push(q); });\n        if (!isDependOn) {\n            if (this.parentQuestion) {\n                res.push(this.parentQuestion);\n            }\n            if (this.dependedQuestions.length > 0) {\n                this.dependedQuestions.forEach(function (q) { return res.push(q); });\n            }\n        }\n        return res;\n    };\n    Question.prototype.choicesLoaded = function () { };\n    Object.defineProperty(Question.prototype, \"page\", {\n        /**\n         * Returns a page to which the question belongs and allows you to move this question to a different page.\n         */\n        get: function () {\n            if (!!this.parentQuestion)\n                return this.parentQuestion.page;\n            return this.getPage(this.parent);\n        },\n        set: function (val) {\n            this.setPage(this.parent, val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Question.prototype.getPanel = function () {\n        return null;\n    };\n    Question.prototype.delete = function (doDispose) {\n        if (doDispose === void 0) { doDispose = true; }\n        this.removeFromParent();\n        if (doDispose) {\n            this.dispose();\n        }\n        else {\n            this.resetDependedQuestions();\n        }\n    };\n    Question.prototype.removeFromParent = function () {\n        if (!!this.parent) {\n            this.removeSelfFromList(this.parent.elements);\n        }\n    };\n    Question.prototype.addDependedQuestion = function (question) {\n        if (!question || this.dependedQuestions.indexOf(question) > -1)\n            return;\n        this.dependedQuestions.push(question);\n    };\n    Question.prototype.removeDependedQuestion = function (question) {\n        if (!question)\n            return;\n        var index = this.dependedQuestions.indexOf(question);\n        if (index > -1) {\n            this.dependedQuestions.splice(index, 1);\n        }\n    };\n    Question.prototype.updateDependedQuestions = function () {\n        for (var i = 0; i < this.dependedQuestions.length; i++) {\n            this.dependedQuestions[i].updateDependedQuestion();\n        }\n    };\n    Question.prototype.updateDependedQuestion = function () { };\n    Question.prototype.resetDependedQuestion = function () { };\n    Object.defineProperty(Question.prototype, \"isFlowLayout\", {\n        get: function () {\n            return this.getLayoutType() === \"flow\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Question.prototype.getLayoutType = function () {\n        if (!!this.parent)\n            return this.parent.getChildrenLayoutType();\n        return \"row\";\n    };\n    Question.prototype.isLayoutTypeSupported = function (layoutType) {\n        return layoutType !== \"flow\";\n    };\n    Object.defineProperty(Question.prototype, \"visible\", {\n        /**\n         * Gets or sets question visibility.\n         *\n         * If you want to display or hide a question based on a condition, specify the [`visibleIf`](https://surveyjs.io/form-library/documentation/question#visibleIf) property. Refer to the following help topic for information: [Conditional Visibility](https://surveyjs.io/form-library/documentation/design-survey-conditional-logic#conditional-visibility).\n         * @see isVisible\n         * @see visibleIf\n         */\n        get: function () {\n            return this.getPropertyValue(\"visible\", true);\n        },\n        set: function (val) {\n            if (val == this.visible)\n                return;\n            this.setPropertyValue(\"visible\", val);\n            this.onVisibleChanged();\n            this.notifySurveyVisibilityChanged();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Question.prototype.onVisibleChanged = function () {\n        this.updateIsVisibleProp();\n        if (!this.isVisible && this.errors && this.errors.length > 0) {\n            this.errors = [];\n        }\n    };\n    Question.prototype.notifyStateChanged = function () {\n        _super.prototype.notifyStateChanged.call(this);\n        if (this.isCollapsed) {\n            this.onHidingContent();\n        }\n    };\n    Question.prototype.updateIsVisibleProp = function () {\n        var prev = this.getPropertyValue(\"isVisible\");\n        var val = this.isVisible;\n        if (prev !== val) {\n            this.setPropertyValue(\"isVisible\", val);\n            if (!val) {\n                this.onHidingContent();\n            }\n        }\n    };\n    Object.defineProperty(Question.prototype, \"useDisplayValuesInDynamicTexts\", {\n        /**\n         * Specifies whether to use display names for question values in placeholders.\n         *\n         * Default value: `true`\n         *\n         * This property applies to questions whose values are defined as objects with the `value` and `text` properties (for example, [choice items](https://surveyjs.io/form-library/documentation/questionradiogroupmodel#choices) in Radiogroup, Checkbox, and Dropdown questions).\n         *\n         * You can use question values as placeholders in the following places:\n         *\n         * - Survey element titles and descriptions\n         * - The [`html`](https://surveyjs.io/form-library/documentation/questionhtmlmodel#html) property of the [HTML](https://surveyjs.io/form-library/documentation/questionhtmlmodel) question\n         *\n         * To use a question value as a placeholder, specify the question `name` in curly brackets: `{questionName}`. Refer to the following help topic for more information: [Dynamic Texts - Question Values](https://surveyjs.io/form-library/documentation/design-survey-conditional-logic#question-values).\n         */\n        get: function () {\n            return this.getPropertyValue(\"useDisplayValuesInDynamicTexts\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"useDisplayValuesInDynamicTexts\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Question.prototype.getUseDisplayValuesInDynamicTexts = function () { return this.useDisplayValuesInDynamicTexts; };\n    Object.defineProperty(Question.prototype, \"visibleIf\", {\n        /**\n         * A Boolean expression. If it evaluates to `false`, this question becomes hidden.\n         *\n         * A survey parses and runs all expressions on startup. If any values used in the expression change, the survey re-evaluates it.\n         *\n         * Refer to the following help topic for more information: [Conditional Visibility](https://surveyjs.io/form-library/documentation/design-survey-conditional-logic#conditional-visibility)\n         * @see visible\n         * @see isVisible\n         */\n        get: function () {\n            return this.getPropertyValue(\"visibleIf\", \"\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"visibleIf\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Question.prototype, \"isVisible\", {\n        /**\n         * Returns `true` if the question is visible or the survey is currently in design mode.\n         *\n         * If you want to display or hide a question based on a condition, specify the [`visibleIf`](https://surveyjs.io/form-library/documentation/question#visibleIf) property. Refer to the following help topic for information: [Conditional Visibility](https://surveyjs.io/form-library/documentation/design-survey-conditional-logic#conditional-visibility).\n         * @see visibleIf\n         * @see visible\n         * @see isParentVisible\n         */\n        get: function () {\n            if (this.survey && this.survey.areEmptyElementsHidden && this.isEmpty())\n                return false;\n            if (this.areInvisibleElementsShowing)\n                return true;\n            return this.isVisibleCore();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Question.prototype, \"isVisibleInSurvey\", {\n        get: function () {\n            return this.isVisible && this.isParentVisible;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Question.prototype.isVisibleCore = function () {\n        return this.visible;\n    };\n    Object.defineProperty(Question.prototype, \"visibleIndex\", {\n        /**\n         * Returns the visible index of the question in the survey. It can be from 0 to all visible questions count - 1\n         * The visibleIndex is -1 if the title is 'hidden' or hideNumber is true\n         * @see titleLocation\n         * @see hideNumber\n         */\n        get: function () {\n            return this.getPropertyValue(\"visibleIndex\", -1);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Question.prototype.onHidingContent = function () { };\n    Object.defineProperty(Question.prototype, \"hideNumber\", {\n        /**\n         * Hides the question number from the title and excludes the question from numbering.\n         *\n         * If you want to disable question numbering in the entire survey, set `SurveyModel`'s `showQuestionNumbers` property to `false`.\n         * @see SurveyModel.showQuestionNumbers\n         */\n        get: function () {\n            return this.getPropertyValue(\"hideNumber\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"hideNumber\", val);\n            this.notifySurveyVisibilityChanged();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Question.prototype, \"isAllowTitleLeft\", {\n        /**\n         * Returns `true` if the question can display its title to the left of the input field.\n         * @see titleLocation\n         * @see getTitleLocation\n         * @see hasTitle\n         */\n        get: function () {\n            return true;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    /**\n     * Returns the question type.\n     * Possible values:\n     * - [*\"boolean\"*](https://surveyjs.io/Documentation/Library?id=questionbooleanmodel)\n     * - [*\"checkbox\"*](https://surveyjs.io/Documentation/Library?id=questioncheckboxmodel)\n     * - [*\"comment\"*](https://surveyjs.io/Documentation/Library?id=questioncommentmodel)\n     * - [*\"dropdown\"*](https://surveyjs.io/Documentation/Library?id=questiondropdownmodel)\n     * - [*\"tagbox\"*](https://surveyjs.io/form-library/documentation/questiontagboxmodel)\n     * - [*\"expression\"*](https://surveyjs.io/Documentation/Library?id=questionexpressionmodel)\n     * - [*\"file\"*](https://surveyjs.io/Documentation/Library?id=questionfilemodel)\n     * - [*\"html\"*](https://surveyjs.io/Documentation/Library?id=questionhtmlmodel)\n     * - [*\"image\"*](https://surveyjs.io/Documentation/Library?id=questionimagemodel)\n     * - [*\"imagepicker\"*](https://surveyjs.io/Documentation/Library?id=questionimagepickermodel)\n     * - [*\"matrix\"*](https://surveyjs.io/Documentation/Library?id=questionmatrixmodel)\n     * - [*\"matrixdropdown\"*](https://surveyjs.io/Documentation/Library?id=questionmatrixdropdownmodel)\n     * - [*\"matrixdynamic\"*](https://surveyjs.io/Documentation/Library?id=questionmatrixdynamicmodel)\n     * - [*\"multipletext\"*](https://surveyjs.io/Documentation/Library?id=questionmultipletextmodel)\n     * - [*\"panel\"*](https://surveyjs.io/Documentation/Library?id=panelmodel)\n     * - [*\"paneldynamic\"*](https://surveyjs.io/Documentation/Library?id=questionpaneldynamicmodel)\n     * - [*\"radiogroup\"*](https://surveyjs.io/Documentation/Library?id=questionradiogroupmodel)\n     * - [*\"rating\"*](https://surveyjs.io/Documentation/Library?id=questionratingmodel)\n     * - [*\"ranking\"*](https://surveyjs.io/Documentation/Library?id=questionrankingmodel)\n     * - [*\"signaturepad\"*](https://surveyjs.io/Documentation/Library?id=questionsignaturepadmodel)\n     * - [*\"text\"*](https://surveyjs.io/Documentation/Library?id=questiontextmodel)\n     */\n    Question.prototype.getType = function () {\n        return \"question\";\n    };\n    Object.defineProperty(Question.prototype, \"isQuestion\", {\n        get: function () {\n            return true;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Question.prototype.moveTo = function (container, insertBefore) {\n        if (insertBefore === void 0) { insertBefore = null; }\n        return this.moveToBase(this.parent, container, insertBefore);\n    };\n    Question.prototype.getProgressInfo = function () {\n        if (!this.hasInput)\n            return _super.prototype.getProgressInfo.call(this);\n        return {\n            questionCount: 1,\n            answeredQuestionCount: !this.isEmpty() ? 1 : 0,\n            requiredQuestionCount: this.isRequired ? 1 : 0,\n            requiredAnsweredQuestionCount: !this.isEmpty() && this.isRequired ? 1 : 0,\n        };\n    };\n    Question.prototype.runTriggers = function (name, value) {\n        var _this = this;\n        if (this.isRunningResetValueIf || !this.isVisible || this.isReadOnly || !this.resetValueIf || this.isEmpty())\n            return;\n        if (this.parentQuestion && this.parentQuestion.getValueName() === name)\n            return;\n        if (!this.resetValueIfExpression) {\n            this.resetValueIfExpression = new _conditions__WEBPACK_IMPORTED_MODULE_6__[\"ExpressionRunner\"](this.resetValueIf);\n            this.resetValueIfExpression.onRunComplete = function (res) {\n                _this.isRunningResetValueIf = false;\n                if (res === true) {\n                    _this.clearValue();\n                    _this.updateValueWithDefaults();\n                }\n            };\n        }\n        else {\n            this.resetValueIfExpression.expression = this.resetValueIf;\n        }\n        var keys = {};\n        keys[name] = value;\n        if (!new _conditionProcessValue__WEBPACK_IMPORTED_MODULE_13__[\"ProcessValue\"]().isAnyKeyChanged(keys, this.resetValueIfExpression.getVariables()))\n            return;\n        this.isRunningResetValueIf = true;\n        this.resetValueIfExpression.run(this.getDataFilteredValues(), this.getDataFilteredProperties());\n    };\n    Question.prototype.runConditions = function () {\n        if (this.data && !this.isLoadingFromJson) {\n            if (!this.isDesignMode) {\n                this.runCondition(this.getDataFilteredValues(), this.getDataFilteredProperties());\n            }\n            this.locStrsChanged();\n        }\n    };\n    Question.prototype.setSurveyImpl = function (value, isLight) {\n        _super.prototype.setSurveyImpl.call(this, value);\n        if (!this.survey)\n            return;\n        this.survey.questionCreated(this);\n        if (isLight !== true) {\n            this.runConditions();\n        }\n        this.calcRenderedCommentPlaceholder();\n        if (!this.visible) {\n            this.updateIsVisibleProp();\n        }\n        this.updateIsMobileFromSurvey();\n    };\n    Object.defineProperty(Question.prototype, \"parent\", {\n        /**\n         * Returns a survey element (panel or page) that contains the question and allows you to move this question to a different survey element.\n         */\n        get: function () {\n            return this.getPropertyValue(\"parent\", null);\n        },\n        set: function (val) {\n            if (this.parent === val)\n                return;\n            this.removeFromParent();\n            this.setPropertyValue(\"parent\", val);\n            this.updateQuestionCss();\n            this.onParentChanged();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Question.prototype.onParentChanged = function () { };\n    Object.defineProperty(Question.prototype, \"hasTitle\", {\n        /**\n         * Returns `false` if the `titleLocation` property is set to `\"hidden\"` or if the question cannot have a title (for example, an [HTML](https://surveyjs.io/form-library/documentation/questionhtmlmodel) question).\n         *\n         * If the `title` property is `undefined` or set to an empty string, the `hasTitle` property returns `true`, because the question uses its `name` as a title in this case.\n         * @see title\n         * @see titleLocation\n         */\n        get: function () {\n            return this.getTitleLocation() !== \"hidden\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Question.prototype, \"titleLocation\", {\n        /**\n         * Sets question title location relative to the input field. Overrides the `questionTitleLocation` property specified for the question's container (survey, page, or panel).\n         *\n         * Possible values:\n         *\n         * - `\"default\"` (default) - Inherits the setting from the `questionTitleLocation` property specified for the question's container.\n         * - `\"top\"` - Displays the title above the input field.\n         * - `\"bottom\"` - Displays the title below the input field.\n         * - `\"left\"` - Displays the title to the left of the input field.\n         * - `\"hidden\"` - Hides the question title.\n         *\n         * > Certain question types (Matrix, Multiple Text) do not support the `\"left\"` value. For them, the `\"top\"` value is used.\n         * @see SurveyModel.questionTitleLocation\n         * @see getTitleLocation\n         * @see isAllowTitleLeft\n         */\n        get: function () {\n            return this.getPropertyValue(\"titleLocation\");\n        },\n        set: function (value) {\n            var isVisibilityChanged = this.titleLocation == \"hidden\" || value == \"hidden\";\n            this.setPropertyValue(\"titleLocation\", value.toLowerCase());\n            this.updateQuestionCss();\n            if (isVisibilityChanged) {\n                this.notifySurveyVisibilityChanged();\n            }\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Question.prototype.getTitleOwner = function () { return this; };\n    Question.prototype.getIsTitleRenderedAsString = function () { return this.titleLocation === \"hidden\"; };\n    Question.prototype.notifySurveyVisibilityChanged = function () {\n        if (!this.survey || this.isLoadingFromJson)\n            return;\n        this.survey.questionVisibilityChanged(this, this.isVisible);\n        var isClearOnHidden = this.isClearValueOnHidden;\n        if (!this.visible) {\n            this.clearValueOnHidding(isClearOnHidden);\n        }\n        if (isClearOnHidden && this.isVisibleInSurvey) {\n            this.updateValueWithDefaults();\n        }\n    };\n    Question.prototype.clearValueOnHidding = function (isClearOnHidden) {\n        if (isClearOnHidden) {\n            this.clearValueIfInvisible();\n        }\n    };\n    /**\n     * Returns title location calculated based on the question's `titleLocation` property and the `questionTitleLocation` property of the question's containers (survey, page, or panel).\n     * @see titleLocation\n     * @see SurveyModel.questionTitleLocation\n     */\n    Question.prototype.getTitleLocation = function () {\n        if (this.isFlowLayout)\n            return \"hidden\";\n        var location = this.getTitleLocationCore();\n        if (location === \"left\" && !this.isAllowTitleLeft)\n            location = \"top\";\n        return location;\n    };\n    Question.prototype.getTitleLocationCore = function () {\n        if (this.titleLocation !== \"default\")\n            return this.titleLocation;\n        if (!!this.parent)\n            return this.parent.getQuestionTitleLocation();\n        if (!!this.survey)\n            return this.survey.questionTitleLocation;\n        return \"top\";\n    };\n    Object.defineProperty(Question.prototype, \"hasTitleOnLeft\", {\n        get: function () {\n            return this.hasTitle && this.getTitleLocation() === \"left\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Question.prototype, \"hasTitleOnTop\", {\n        get: function () {\n            return this.hasTitle && this.getTitleLocation() === \"top\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Question.prototype, \"hasTitleOnBottom\", {\n        get: function () {\n            return this.hasTitle && this.getTitleLocation() === \"bottom\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Question.prototype, \"hasTitleOnLeftTop\", {\n        get: function () {\n            if (!this.hasTitle)\n                return false;\n            var location = this.getTitleLocation();\n            return location === \"left\" || location === \"top\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Question.prototype, \"errorLocation\", {\n        /**\n         * Specifies the error message position. Overrides the `questionErrorLocation` property specified for the question's container ([survey](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#questionErrorLocation), [page](https://surveyjs.io/form-library/documentation/api-reference/page-model#questionErrorLocation), or [panel](https://surveyjs.io/form-library/documentation/api-reference/panel-model#questionErrorLocation)).\n         *\n         * Possible values:\n         *\n         * - `\"default\"` (default) - Inherits the setting from the `questionErrorLocation` property specified for the question's container.\n         * - `\"top\"` - Displays error messages above questions.\n         * - `\"bottom\"` - Displays error messages below questions.\n         */\n        get: function () {\n            return this.getPropertyValue(\"errorLocation\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"errorLocation\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Question.prototype.getErrorLocation = function () {\n        if (this.errorLocation !== \"default\")\n            return this.errorLocation;\n        if (this.parentQuestion)\n            return this.parentQuestion.getChildErrorLocation(this);\n        if (this.parent)\n            return this.parent.getQuestionErrorLocation();\n        return this.survey ? this.survey.questionErrorLocation : \"top\";\n    };\n    Question.prototype.getChildErrorLocation = function (child) {\n        return this.getErrorLocation();\n    };\n    Object.defineProperty(Question.prototype, \"hasInput\", {\n        /**\n         * Returns `false` if the question has no input fields ([HTML](https://surveyjs.io/form-library/documentation/questionhtmlmodel), [Image](https://surveyjs.io/form-library/documentation/questionimagemodel), and similar question types).\n         * @see hasSingleInput\n         */\n        get: function () {\n            return true;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Question.prototype, \"hasSingleInput\", {\n        /**\n         * Returns `false` if the question has no input fields ([HTML](https://surveyjs.io/form-library/documentation/questionhtmlmodel), [Image](https://surveyjs.io/form-library/documentation/questionimagemodel)) or has multiple input fields ([Matrix](https://surveyjs.io/form-library/documentation/questionmatrixmodel), [Multiple Text](https://surveyjs.io/form-library/documentation/questionmultipletextmodel)).\n         * @see hasInput\n         */\n        get: function () {\n            return this.hasInput;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Question.prototype, \"inputId\", {\n        get: function () {\n            return this.id + \"i\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Question.prototype.getDefaultTitleValue = function () { return this.name; };\n    Question.prototype.getDefaultTitleTagName = function () {\n        return _settings__WEBPACK_IMPORTED_MODULE_8__[\"settings\"].titleTags.question;\n    };\n    Object.defineProperty(Question.prototype, \"descriptionLocation\", {\n        /**\n         * Specifies where to display a question description.\n         *\n         * Possible values:\n         *\n         * - `\"default\"` (default) - Inherits the setting from the Survey's [`questionDescriptionLocation`](https://surveyjs.io/form-library/documentation/surveymodel#questionDescriptionLocation) property.\n         * - `\"underTitle\"` - Displays the description under the question title.\n         * - `\"underInput\"` - Displays the description under the interactive area.\n         * @see description\n         * @see hasDescription\n         */\n        get: function () {\n            return this.getPropertyValue(\"descriptionLocation\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"descriptionLocation\", val);\n            this.updateQuestionCss();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Question.prototype, \"hasDescriptionUnderTitle\", {\n        get: function () {\n            return this.getDescriptionLocation() == \"underTitle\" && this.hasDescription;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Question.prototype, \"hasDescriptionUnderInput\", {\n        get: function () {\n            return this.getDescriptionLocation() == \"underInput\" && this.hasDescription;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Question.prototype.getDescriptionLocation = function () {\n        if (this.descriptionLocation !== \"default\")\n            return this.descriptionLocation;\n        return !!this.survey\n            ? this.survey.questionDescriptionLocation\n            : \"underTitle\";\n    };\n    Question.prototype.needClickTitleFunction = function () {\n        return _super.prototype.needClickTitleFunction.call(this) || this.hasInput;\n    };\n    Question.prototype.processTitleClick = function () {\n        var _this = this;\n        _super.prototype.processTitleClick.call(this);\n        if (this.isCollapsed)\n            return;\n        setTimeout(function () {\n            _this.focus();\n        }, 1);\n        return true;\n    };\n    Object.defineProperty(Question.prototype, \"requiredErrorText\", {\n        /**\n         * Specifies a custom error message for a required form field.\n         * @see isRequired\n         */\n        get: function () {\n            return this.getLocalizableStringText(\"requiredErrorText\");\n        },\n        set: function (val) {\n            this.setLocalizableStringText(\"requiredErrorText\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Question.prototype, \"locRequiredErrorText\", {\n        get: function () {\n            return this.getLocalizableString(\"requiredErrorText\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Question.prototype, \"commentText\", {\n        /**\n         * Specifies a caption displayed above the comment area. Applies when the `showCommentArea` property is `true`.\n         * @see showCommentArea\n         * @see comment\n         */\n        get: function () {\n            return this.getLocalizableStringText(\"commentText\");\n        },\n        set: function (val) {\n            this.setLocalizableStringText(\"commentText\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Question.prototype, \"locCommentText\", {\n        get: function () {\n            return this.getLocalizableString(\"commentText\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Question.prototype, \"commentPlaceHolder\", {\n        get: function () {\n            return this.commentPlaceholder;\n        },\n        set: function (newValue) {\n            this.commentPlaceholder = newValue;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Question.prototype, \"renderedCommentPlaceholder\", {\n        get: function () {\n            return this.getPropertyValue(\"renderedCommentPlaceholder\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Question.prototype.calcRenderedCommentPlaceholder = function () {\n        var res = !this.isReadOnly ? this.commentPlaceHolder : undefined;\n        this.setPropertyValue(\"renderedCommentPlaceholder\", res);\n    };\n    Question.prototype.getAllErrors = function () {\n        return this.errors.slice();\n    };\n    Question.prototype.getErrorByType = function (errorType) {\n        for (var i = 0; i < this.errors.length; i++) {\n            if (this.errors[i].getErrorType() === errorType)\n                return this.errors[i];\n        }\n        return null;\n    };\n    Object.defineProperty(Question.prototype, \"customWidget\", {\n        get: function () {\n            if (!this.isCustomWidgetRequested && !this.customWidgetValue) {\n                this.isCustomWidgetRequested = true;\n                this.updateCustomWidget();\n            }\n            return this.customWidgetValue;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Question.prototype.updateCustomWidget = function () {\n        this.customWidgetValue = _questionCustomWidgets__WEBPACK_IMPORTED_MODULE_7__[\"CustomWidgetCollection\"].Instance.getCustomWidget(this);\n    };\n    Question.prototype.localeChanged = function () {\n        _super.prototype.localeChanged.call(this);\n        this.calcRenderedCommentPlaceholder();\n        if (!!this.localeChangedCallback) {\n            this.localeChangedCallback();\n        }\n    };\n    Object.defineProperty(Question.prototype, \"isCompositeQuestion\", {\n        get: function () {\n            return false;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Question.prototype, \"isContainer\", {\n        get: function () { return false; },\n        enumerable: false,\n        configurable: true\n    });\n    Question.prototype.updateCommentElements = function () {\n        if (!this.autoGrowComment || !Array.isArray(this.commentElements))\n            return;\n        for (var i = 0; i < this.commentElements.length; i++) {\n            var el = this.commentElements[i];\n            if (el)\n                Object(_utils_utils__WEBPACK_IMPORTED_MODULE_11__[\"increaseHeightByContent\"])(el);\n        }\n    };\n    Question.prototype.onCommentInput = function (event) {\n        if (this.isInputTextUpdate) {\n            if (event.target) {\n                this.comment = event.target.value;\n            }\n        }\n        else {\n            this.updateCommentElements();\n        }\n    };\n    Question.prototype.onCommentChange = function (event) {\n        this.comment = event.target.value;\n        if (this.comment !== event.target.value) {\n            event.target.value = this.comment;\n        }\n    };\n    Question.prototype.afterRenderQuestionElement = function (el) {\n        if (!this.survey || !this.hasSingleInput)\n            return;\n        this.survey.afterRenderQuestionInput(this, el);\n    };\n    Question.prototype.afterRender = function (el) {\n        var _this = this;\n        if (!this.survey)\n            return;\n        this.survey.afterRenderQuestion(this, el);\n        if (!!this.afterRenderQuestionCallback) {\n            this.afterRenderQuestionCallback(this, el);\n        }\n        if (this.supportComment() || this.supportOther()) {\n            this.commentElements = [];\n            this.getCommentElementsId().forEach(function (id) {\n                var root = _settings__WEBPACK_IMPORTED_MODULE_8__[\"settings\"].environment.root;\n                var el = root.getElementById(id);\n                if (el)\n                    _this.commentElements.push(el);\n            });\n            this.updateCommentElements();\n        }\n        this.checkForResponsiveness(el);\n    };\n    Question.prototype.getCommentElementsId = function () {\n        return [this.commentId];\n    };\n    Question.prototype.beforeDestroyQuestionElement = function (el) {\n        this.commentElements = undefined;\n    };\n    Object.defineProperty(Question.prototype, \"processedTitle\", {\n        get: function () {\n            var res = this.locProcessedTitle.textOrHtml;\n            return res ? res : this.name;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Question.prototype, \"fullTitle\", {\n        get: function () {\n            return this.locTitle.renderedHtml;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Question.prototype, \"titlePattern\", {\n        get: function () {\n            return !!this.survey ? this.survey.questionTitlePattern : \"numTitleRequire\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Question.prototype, \"isRequireTextOnStart\", {\n        get: function () {\n            return this.isRequired && this.titlePattern == \"requireNumTitle\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Question.prototype, \"isRequireTextBeforeTitle\", {\n        get: function () {\n            return this.isRequired && this.titlePattern == \"numRequireTitle\" && this.requiredText !== \"\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Question.prototype, \"isRequireTextAfterTitle\", {\n        get: function () {\n            return this.isRequired && this.titlePattern == \"numTitleRequire\" && this.requiredText !== \"\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Question.prototype, \"startWithNewLine\", {\n        /**\n         * Disable this property if you want to render the current question on the same line or row with the previous question or panel.\n         */\n        get: function () {\n            return this.getPropertyValue(\"startWithNewLine\");\n        },\n        set: function (val) {\n            if (this.startWithNewLine == val)\n                return;\n            this.setPropertyValue(\"startWithNewLine\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Question.prototype.calcCssClasses = function (css) {\n        var classes = { error: {} };\n        this.copyCssClasses(classes, css.question);\n        this.copyCssClasses(classes.error, css.error);\n        this.updateCssClasses(classes, css);\n        if (this.survey) {\n            this.survey.updateQuestionCssClasses(this, classes);\n        }\n        if (this.onUpdateCssClassesCallback) {\n            this.onUpdateCssClassesCallback(classes);\n        }\n        return classes;\n    };\n    Object.defineProperty(Question.prototype, \"cssRoot\", {\n        get: function () {\n            this.ensureElementCss();\n            return this.getPropertyValue(\"cssRoot\", \"\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Question.prototype.setCssRoot = function (val) {\n        this.setPropertyValue(\"cssRoot\", val);\n    };\n    Question.prototype.getCssRoot = function (cssClasses) {\n        return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_10__[\"CssClassBuilder\"]()\n            .append(_super.prototype.getCssRoot.call(this, cssClasses))\n            .append(this.isFlowLayout && !this.isDesignMode\n            ? cssClasses.flowRoot\n            : cssClasses.mainRoot)\n            .append(cssClasses.titleLeftRoot, !this.isFlowLayout && this.hasTitleOnLeft)\n            .append(cssClasses.hasError, this.errors.length > 0)\n            .append(cssClasses.small, !this.width)\n            .append(cssClasses.answered, this.isAnswered)\n            .toString();\n    };\n    Object.defineProperty(Question.prototype, \"cssHeader\", {\n        get: function () {\n            this.ensureElementCss();\n            return this.getPropertyValue(\"cssHeader\", \"\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Question.prototype.setCssHeader = function (val) {\n        this.setPropertyValue(\"cssHeader\", val);\n    };\n    Question.prototype.getCssHeader = function (cssClasses) {\n        return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_10__[\"CssClassBuilder\"]()\n            .append(cssClasses.header)\n            .append(cssClasses.headerTop, this.hasTitleOnTop)\n            .append(cssClasses.headerLeft, this.hasTitleOnLeft)\n            .append(cssClasses.headerBottom, this.hasTitleOnBottom)\n            .toString();\n    };\n    Object.defineProperty(Question.prototype, \"cssContent\", {\n        get: function () {\n            this.ensureElementCss();\n            return this.getPropertyValue(\"cssContent\", \"\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Question.prototype.setCssContent = function (val) {\n        this.setPropertyValue(\"cssContent\", val);\n    };\n    Question.prototype.getCssContent = function (cssClasses) {\n        return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_10__[\"CssClassBuilder\"]()\n            .append(cssClasses.content)\n            .append(cssClasses.contentLeft, this.hasTitleOnLeft)\n            .toString();\n    };\n    Object.defineProperty(Question.prototype, \"cssTitle\", {\n        get: function () {\n            this.ensureElementCss();\n            return this.getPropertyValue(\"cssTitle\", \"\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Question.prototype.setCssTitle = function (val) {\n        this.setPropertyValue(\"cssTitle\", val);\n    };\n    Question.prototype.getCssTitle = function (cssClasses) {\n        return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_10__[\"CssClassBuilder\"]()\n            .append(_super.prototype.getCssTitle.call(this, cssClasses))\n            .append(cssClasses.titleOnAnswer, !this.containsErrors && this.isAnswered)\n            .append(cssClasses.titleEmpty, !this.title.trim())\n            .toString();\n    };\n    Object.defineProperty(Question.prototype, \"cssDescription\", {\n        get: function () {\n            this.ensureElementCss();\n            return this.getPropertyValue(\"cssDescription\", \"\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Question.prototype.setCssDescription = function (val) {\n        this.setPropertyValue(\"cssDescription\", val);\n    };\n    Question.prototype.getCssDescription = function (cssClasses) {\n        return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_10__[\"CssClassBuilder\"]()\n            .append(cssClasses.description, this.hasDescriptionUnderTitle)\n            .append(cssClasses.descriptionUnderInput, this.hasDescriptionUnderInput)\n            .toString();\n    };\n    Question.prototype.showErrorOnCore = function (location) {\n        return !this.showErrorsAboveQuestion && !this.showErrorsBelowQuestion && this.getErrorLocation() === location;\n    };\n    Object.defineProperty(Question.prototype, \"showErrorOnTop\", {\n        get: function () {\n            return this.showErrorOnCore(\"top\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Question.prototype, \"showErrorOnBottom\", {\n        get: function () {\n            return this.showErrorOnCore(\"bottom\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Question.prototype, \"showErrorsOutsideQuestion\", {\n        get: function () {\n            return this.isDefaultV2Theme;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Question.prototype, \"showErrorsAboveQuestion\", {\n        get: function () {\n            return this.showErrorsOutsideQuestion && this.getErrorLocation() === \"top\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Question.prototype, \"showErrorsBelowQuestion\", {\n        get: function () {\n            return this.showErrorsOutsideQuestion && this.getErrorLocation() === \"bottom\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Question.prototype, \"cssError\", {\n        get: function () {\n            this.ensureElementCss();\n            return this.getPropertyValue(\"cssError\", \"\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Question.prototype.setCssError = function (val) {\n        this.setPropertyValue(\"cssError\", val);\n    };\n    Question.prototype.getCssError = function (cssClasses) {\n        return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_10__[\"CssClassBuilder\"]()\n            .append(cssClasses.error.root)\n            .append(cssClasses.error.outsideQuestion, this.showErrorsBelowQuestion || this.showErrorsAboveQuestion)\n            .append(cssClasses.error.belowQuestion, this.showErrorsBelowQuestion)\n            .append(cssClasses.error.aboveQuestion, this.showErrorsAboveQuestion)\n            .append(cssClasses.error.locationTop, this.showErrorOnTop)\n            .append(cssClasses.error.locationBottom, this.showErrorOnBottom)\n            .toString();\n    };\n    Question.prototype.getRootCss = function () {\n        return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_10__[\"CssClassBuilder\"]()\n            .append(this.cssRoot)\n            .append(this.cssClasses.disabled, this.isReadOnly)\n            .append(this.cssClasses.invisible, !this.isDesignMode && this.areInvisibleElementsShowing && !this.visible)\n            .toString();\n    };\n    Question.prototype.getQuestionRootCss = function () {\n        return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_10__[\"CssClassBuilder\"]()\n            .append(this.cssClasses.root)\n            .append(this.cssClasses.rootMobile, this.isMobile)\n            .toString();\n    };\n    Question.prototype.updateElementCss = function (reNew) {\n        _super.prototype.updateElementCss.call(this, reNew);\n        if (reNew) {\n            this.updateQuestionCss(true);\n        }\n        this.onIndentChanged();\n    };\n    Question.prototype.updateQuestionCss = function (reNew) {\n        if (this.isLoadingFromJson ||\n            !this.survey ||\n            (reNew !== true && !this.cssClassesValue))\n            return;\n        this.updateElementCssCore(this.cssClasses);\n    };\n    Question.prototype.ensureElementCss = function () {\n        if (!this.cssClassesValue) {\n            this.updateQuestionCss(true);\n        }\n    };\n    Question.prototype.updateElementCssCore = function (cssClasses) {\n        this.setCssRoot(this.getCssRoot(cssClasses));\n        this.setCssHeader(this.getCssHeader(cssClasses));\n        this.setCssContent(this.getCssContent(cssClasses));\n        this.setCssTitle(this.getCssTitle(cssClasses));\n        this.setCssDescription(this.getCssDescription(cssClasses));\n        this.setCssError(this.getCssError(cssClasses));\n    };\n    Question.prototype.updateCssClasses = function (res, css) {\n        if (!css.question)\n            return;\n        var objCss = css[this.getCssType()];\n        var titleBuilder = new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_10__[\"CssClassBuilder\"]().append(res.title)\n            .append(css.question.titleRequired, this.isRequired);\n        res.title = titleBuilder.toString();\n        var rootBuilder = new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_10__[\"CssClassBuilder\"]().append(res.root)\n            .append(objCss, this.isRequired && !!css.question.required);\n        if (objCss === undefined || objCss === null) {\n            res.root = rootBuilder.toString();\n        }\n        else if (typeof objCss === \"string\" || objCss instanceof String) {\n            res.root = rootBuilder.append(objCss.toString()).toString();\n        }\n        else {\n            res.root = rootBuilder.toString();\n            for (var key in objCss) {\n                res[key] = objCss[key];\n            }\n        }\n    };\n    Question.prototype.getCssType = function () {\n        return this.getType();\n    };\n    Object.defineProperty(Question.prototype, \"renderCssRoot\", {\n        get: function () {\n            return this.cssClasses.root || undefined;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Question.prototype.onIndentChanged = function () {\n        this.paddingLeft = this.getIndentSize(this.indent);\n        this.paddingRight = this.getIndentSize(this.rightIndent);\n    };\n    Question.prototype.getIndentSize = function (indent) {\n        if (indent < 1 || !this.getSurvey() || !this.cssClasses || !this.cssClasses.indent)\n            return \"\";\n        return indent * this.cssClasses.indent + \"px\";\n    };\n    /**\n     * Moves focus to the input field of this question.\n     * @param onError Pass `true` if you want to focus an input field with the first validation error. Default value: `false` (focuses the first input field). Applies to question types with multiple input fields.\n     */\n    Question.prototype.focus = function (onError, scrollIfVisible) {\n        if (onError === void 0) { onError = false; }\n        if (this.isDesignMode || !this.isVisible || !this.survey)\n            return;\n        var page = this.page;\n        var shouldChangePage = !!page && this.survey.activePage !== page;\n        if (shouldChangePage) {\n            this.survey.focusQuestionByInstance(this, onError);\n        }\n        else {\n            this.focuscore(onError, scrollIfVisible);\n        }\n    };\n    Question.prototype.focuscore = function (onError, scrollIfVisible) {\n        if (onError === void 0) { onError = false; }\n        if (!!this.survey) {\n            this.expandAllParents(this);\n            this.survey.scrollElementToTop(this, this, null, this.id, scrollIfVisible);\n        }\n        var id = !onError\n            ? this.getFirstInputElementId()\n            : this.getFirstErrorInputElementId();\n        if (_survey_element__WEBPACK_IMPORTED_MODULE_2__[\"SurveyElement\"].FocusElement(id)) {\n            this.fireCallback(this.focusCallback);\n        }\n    };\n    Question.prototype.expandAllParents = function (element) {\n        if (!element)\n            return;\n        if (element.isCollapsed) {\n            element.expand();\n        }\n        this.expandAllParents(element.parent);\n        this.expandAllParents(element.parentQuestion);\n    };\n    Question.prototype.focusIn = function () {\n        if (!this.survey || this.isDisposed || this.isContainer)\n            return;\n        this.survey.whenQuestionFocusIn(this);\n    };\n    Question.prototype.fireCallback = function (callback) {\n        if (callback)\n            callback();\n    };\n    Question.prototype.getOthersMaxLength = function () {\n        if (!this.survey)\n            return null;\n        return this.survey.maxOthersLength > 0 ? this.survey.maxOthersLength : null;\n    };\n    Question.prototype.onCreating = function () { };\n    Question.prototype.getFirstQuestionToFocus = function (withError) {\n        return this.hasInput && (!withError || this.currentErrorCount > 0) ? this : null;\n    };\n    Question.prototype.getFirstInputElementId = function () {\n        return this.inputId;\n    };\n    Question.prototype.getFirstErrorInputElementId = function () {\n        return this.getFirstInputElementId();\n    };\n    Question.prototype.getProcessedTextValue = function (textValue) {\n        var name = textValue.name.toLocaleLowerCase();\n        textValue.isExists =\n            Object.keys(Question.TextPreprocessorValuesMap).indexOf(name) !== -1 ||\n                this[textValue.name] !== undefined;\n        textValue.value = this[Question.TextPreprocessorValuesMap[name] || textValue.name];\n    };\n    Question.prototype.supportComment = function () {\n        var prop = this.getPropertyByName(\"showCommentArea\");\n        return !prop || prop.visible;\n    };\n    Question.prototype.supportOther = function () {\n        return false;\n    };\n    Object.defineProperty(Question.prototype, \"isRequired\", {\n        /**\n         * Makes the question required. If a respondent skips a required question, the survey displays a validation error.\n         * @see requiredIf\n         * @see [Data Validation](https://surveyjs.io/form-library/documentation/data-validation)\n         */\n        get: function () {\n            return this.getPropertyValue(\"isRequired\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"isRequired\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Question.prototype, \"requiredIf\", {\n        /**\n         * A Boolean expression. If it evaluates to `true`, this question becomes required.\n         *\n         * A survey parses and runs all expressions on startup. If any values used in the expression change, the survey re-evaluates it.\n         *\n         * Refer to the following help topic for more information: [Conditional Visibility](https://surveyjs.io/form-library/documentation/design-survey-conditional-logic#conditional-visibility)\n         * @see isRequired\n         */\n        get: function () {\n            return this.getPropertyValue(\"requiredIf\", \"\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"requiredIf\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Question.prototype, \"showCommentArea\", {\n        /**\n         * Specifies whether to display a comment area. Incompatible with the `showOtherItem` property.\n         * @see comment\n         * @see commentText\n         * @see showOtherItem\n         */\n        get: function () {\n            return this.getPropertyValue(\"showCommentArea\", false);\n        },\n        set: function (val) {\n            if (!this.supportComment())\n                return;\n            this.setPropertyValue(\"showCommentArea\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Question.prototype, \"hasComment\", {\n        get: function () {\n            return this.showCommentArea;\n        },\n        set: function (val) {\n            this.showCommentArea = val;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Question.prototype, \"id\", {\n        /**\n         * A value to assign to the `id` attribute of the rendered HTML element. A default `id` is generated automatically.\n         */\n        get: function () {\n            return this.getPropertyValue(\"id\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"id\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Question.prototype, \"ariaTitleId\", {\n        get: function () {\n            return this.id + \"_ariaTitle\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Question.prototype, \"commentId\", {\n        get: function () {\n            return this.id + \"_comment\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Question.prototype, \"showOtherItem\", {\n        /**\n         * Specifies whether to display the \"Other\" choice item. Incompatible with the `showCommentArea` property.\n         *\n         * @see otherText\n         * @see otherItem\n         * @see otherErrorText\n         * @see showCommentArea\n         */\n        get: function () {\n            return this.getPropertyValue(\"showOtherItem\", false);\n        },\n        set: function (val) {\n            if (!this.supportOther() || this.showOtherItem == val)\n                return;\n            this.setPropertyValue(\"showOtherItem\", val);\n            this.hasOtherChanged();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Question.prototype, \"hasOther\", {\n        get: function () {\n            return this.showOtherItem;\n        },\n        set: function (val) {\n            this.showOtherItem = val;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Question.prototype.hasOtherChanged = function () { };\n    Object.defineProperty(Question.prototype, \"requireUpdateCommentValue\", {\n        get: function () {\n            return this.hasComment || this.hasOther;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Question.prototype, \"isReadOnly\", {\n        get: function () {\n            var isParentReadOnly = !!this.parent && this.parent.isReadOnly;\n            var isPareQuestionReadOnly = !!this.parentQuestion && this.parentQuestion.isReadOnly;\n            var isSurveyReadOnly = !!this.survey && this.survey.isDisplayMode;\n            return this.readOnly || isParentReadOnly || isSurveyReadOnly || isPareQuestionReadOnly;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Question.prototype, \"isInputReadOnly\", {\n        get: function () {\n            if (this.forceIsInputReadOnly !== undefined) {\n                return this.forceIsInputReadOnly;\n            }\n            var isDesignModeV2 = _settings__WEBPACK_IMPORTED_MODULE_8__[\"settings\"].supportCreatorV2 && this.isDesignMode;\n            return this.isReadOnly || isDesignModeV2;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Question.prototype, \"renderedInputReadOnly\", {\n        get: function () {\n            return this.isInputReadOnly ? \"\" : undefined;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Question.prototype, \"renderedInputDisabled\", {\n        get: function () {\n            return this.isInputReadOnly ? \"\" : undefined;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Question.prototype.onReadOnlyChanged = function () {\n        this.setPropertyValue(\"isInputReadOnly\", this.isInputReadOnly);\n        _super.prototype.onReadOnlyChanged.call(this);\n        this.updateQuestionCss();\n        this.calcRenderedCommentPlaceholder();\n    };\n    Object.defineProperty(Question.prototype, \"enableIf\", {\n        /**\n         * A Boolean expression. If it evaluates to `false`, this question becomes read-only.\n         *\n         * A survey parses and runs all expressions on startup. If any values used in the expression change, the survey re-evaluates it.\n         *\n         * Refer to the following help topic for more information: [Conditional Visibility](https://surveyjs.io/form-library/documentation/design-survey-conditional-logic#conditional-visibility)\n         * @see readOnly\n         * @see isReadOnly\n         */\n        get: function () {\n            return this.getPropertyValue(\"enableIf\", \"\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"enableIf\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Question.prototype.surveyChoiceItemVisibilityChange = function () { };\n    Question.prototype.runCondition = function (values, properties) {\n        if (this.isDesignMode)\n            return;\n        if (!properties)\n            properties = {};\n        properties[\"question\"] = this;\n        this.runConditionCore(values, properties);\n        if (!this.isValueChangedDirectly && (!this.isClearValueOnHidden || this.isVisibleInSurvey)) {\n            this.defaultValueRunner = this.getDefaultRunner(this.defaultValueRunner, this.defaultValueExpression);\n            this.runDefaultValueExpression(this.defaultValueRunner, values, properties);\n        }\n    };\n    Object.defineProperty(Question.prototype, \"no\", {\n        /**\n         * A question number or letter (depends on the `questionStartIndex` property of the question container (panel, page, or survey)).\n         *\n         * When the question number, title, or the entire question is invisible, this property returns an empty string.\n         * @see SurveyModel.questionStartIndex\n         * @see hideNumber\n         * @see titleLocation\n         * @see visibleIf\n         */\n        get: function () {\n            return this.getPropertyValue(\"no\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Question.prototype.calcNo = function () {\n        if (!this.hasTitle || this.hideNumber)\n            return \"\";\n        var no = _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].getNumberByIndex(this.visibleIndex, this.getStartIndex());\n        if (!!this.survey) {\n            no = this.survey.getUpdatedQuestionNo(this, no);\n        }\n        return no;\n    };\n    Question.prototype.getStartIndex = function () {\n        if (!!this.parent)\n            return this.parent.getQuestionStartIndex();\n        if (!!this.survey)\n            return this.survey.questionStartIndex;\n        return \"\";\n    };\n    Question.prototype.onSurveyLoad = function () {\n        this.isCustomWidgetRequested = false;\n        this.fireCallback(this.surveyLoadCallback);\n        this.updateValueWithDefaults();\n        if (this.isEmpty()) {\n            this.initDataFromSurvey();\n        }\n        this.calcRenderedCommentPlaceholder();\n        this.onIndentChanged();\n    };\n    Question.prototype.onSetData = function () {\n        _super.prototype.onSetData.call(this);\n        if (!this.survey)\n            return;\n        this.initDataFromSurvey();\n        this.onSurveyValueChanged(this.value);\n        this.updateValueWithDefaults();\n        this.onIndentChanged();\n        this.updateQuestionCss();\n        this.updateIsAnswered();\n    };\n    Question.prototype.initDataFromSurvey = function () {\n        if (!!this.data) {\n            var val = this.data.getValue(this.getValueName());\n            if (!_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(val) || !this.isLoadingFromJson) {\n                this.updateValueFromSurvey(val);\n            }\n            this.initCommentFromSurvey();\n        }\n    };\n    Question.prototype.initCommentFromSurvey = function () {\n        if (!!this.data && this.requireUpdateCommentValue) {\n            this.updateCommentFromSurvey(this.data.getComment(this.getValueName()));\n        }\n        else {\n            this.updateCommentFromSurvey(\"\");\n        }\n    };\n    Question.prototype.runExpression = function (expression) {\n        if (!this.survey || !expression)\n            return undefined;\n        return this.survey.runExpression(expression);\n    };\n    Object.defineProperty(Question.prototype, \"autoGrowComment\", {\n        get: function () {\n            return this.survey && this.survey.autoGrowComment;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Question.prototype, \"allowResizeComment\", {\n        get: function () {\n            return this.survey && this.survey.allowResizeComment;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Question.prototype, \"questionValue\", {\n        get: function () {\n            return this.getPropertyValueWithoutDefault(\"value\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"value\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Question.prototype, \"questionComment\", {\n        get: function () {\n            return this.getPropertyValueWithoutDefault(\"comment\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"comment\", val);\n            this.fireCallback(this.commentChangedCallback);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Question.prototype, \"isValueArray\", {\n        get: function () { return false; },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Question.prototype, \"value\", {\n        /**\n         * Gets or sets the question value.\n         *\n         * The following table illustrates how the value type depends on the question type:\n         *\n         * | Question type | Value type(s) |\n         * | ------------- | ------------- |\n         * | Checkboxes | `Array<String \\| Number>` |\n         * | Dropdown | `String` \\| `Number` |\n         * | Dynamic Matrix | `Array<Object>` |\n         * | Dynamic Panel | `Array<Object>` |\n         * | Expression | `String` \\| `Number` \\| `Boolean` |\n         * | File Upload | `File` \\| `Array<File>` |\n         * | HTML | (no value) |\n         * | Image | (no value) |\n         * | Image Picker | `Array<String \\| Number>` |\n         * | Long Text | `String` |\n         * | Multi-Select Dropdown | `Object` |\n         * | Multi-Select Matrix | `Object` |\n         * | Multiple Textboxes | `Array<String>` |\n         * | Panel | (no value) |\n         * | Radio Button Group | `String` \\| `Number` |\n         * | Ranking | `Array<String \\| Number>` |\n         * | Rating Scale | `Number` \\| `String` |\n         * | Signature | `String` (base64-encoded image) |\n         * | Single-Line Input | `String` \\| `Number` \\| `Date` |\n         * | Single-Select Matrix | `Object` |\n         * | Yes/No (Boolean) | `Boolean` \\| `String` |\n         */\n        get: function () {\n            return this.getValueCore();\n        },\n        set: function (newValue) {\n            this.setNewValue(newValue);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Question.prototype, \"hasFilteredValue\", {\n        get: function () { return false; },\n        enumerable: false,\n        configurable: true\n    });\n    Question.prototype.getFilteredValue = function () { return this.value; };\n    Object.defineProperty(Question.prototype, \"valueForSurvey\", {\n        get: function () {\n            if (!!this.valueToDataCallback) {\n                return this.valueToDataCallback(this.value);\n            }\n            return this.value;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    /**\n     * Sets the question's `value` and `comment` properties to `undefined`.\n     * @see value\n     * @see comment\n     */\n    Question.prototype.clearValue = function () {\n        if (this.value !== undefined) {\n            this.value = undefined;\n        }\n        if (!!this.comment) {\n            this.comment = undefined;\n        }\n        this.isValueChangedDirectly = false;\n    };\n    Question.prototype.unbindValue = function () {\n        this.clearValue();\n    };\n    Question.prototype.createValueCopy = function () {\n        return this.getUnbindValue(this.value);\n    };\n    Question.prototype.initDataUI = function () { };\n    Question.prototype.getUnbindValue = function (value) {\n        if (this.isValueSurveyElement(value))\n            return value;\n        return _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].getUnbindValue(value);\n    };\n    Question.prototype.isValueSurveyElement = function (val) {\n        if (!val)\n            return false;\n        if (Array.isArray(val))\n            return val.length > 0 ? this.isValueSurveyElement(val[0]) : false;\n        return !!val.getType && !!val.onPropertyChanged;\n    };\n    Question.prototype.canClearValueAsInvisible = function (reason) {\n        if (reason === \"onHiddenContainer\" && !this.isParentVisible)\n            return true;\n        if (this.isVisibleInSurvey)\n            return false;\n        if (!!this.page && this.page.isStartPage)\n            return false;\n        if (!this.survey || !this.valueName)\n            return true;\n        return !this.survey.hasVisibleQuestionByValueName(this.valueName);\n    };\n    Object.defineProperty(Question.prototype, \"isParentVisible\", {\n        /**\n         * Returns `true` if a parent element (page or panel) is visible.\n         */\n        get: function () {\n            if (this.parentQuestion && !this.parentQuestion.isVisible)\n                return false;\n            var parent = this.parent;\n            while (parent) {\n                if (!parent.isVisible)\n                    return false;\n                parent = parent.parent;\n            }\n            return true;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Question.prototype.clearValueIfInvisible = function (reason) {\n        if (reason === void 0) { reason = \"onHidden\"; }\n        var clearIf = this.getClearIfInvisible();\n        if (clearIf === \"none\")\n            return;\n        if (reason === \"onHidden\" && clearIf === \"onComplete\")\n            return;\n        if (reason === \"onHiddenContainer\" && clearIf !== reason)\n            return;\n        this.clearValueIfInvisibleCore(reason);\n    };\n    Question.prototype.clearValueIfInvisibleCore = function (reason) {\n        if (this.canClearValueAsInvisible(reason)) {\n            this.clearValue();\n            this.isValueChangedDirectly = undefined;\n        }\n    };\n    Object.defineProperty(Question.prototype, \"clearIfInvisible\", {\n        /**\n         * Specifies when to clear the question value if the question becomes invisible.\n         *\n         * Possible values:\n         *\n         * - `\"default\"` (default) - Inherits the setting from the Survey's [`clearInvisibleValues`](https://surveyjs.io/form-library/documentation/surveymodel#clearInvisibleValues) property.\n         * - `\"onHidden\"` - Clears the value when the question becomes invisible. If a question is invisible on startup and has an initial value, this value will be cleared when the survey is complete.\n         * - `\"onHiddenContainer\"` - Clears the value when the question or its container (page or panel) becomes invisible. If a question is invisible on startup and has an initial value, this value will be cleared when the survey is complete.\n         * - `\"onComplete\"` - Clears the value when the survey is complete.\n         * - `\"none\"` - Never clears the value of an invisible question.\n         * @see SurveyModel.clearInvisibleValues\n         * @see visible\n         * @see SurveyModel.onComplete\n         */\n        get: function () {\n            return this.getPropertyValue(\"clearIfInvisible\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"clearIfInvisible\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Question.prototype.getClearIfInvisible = function () {\n        var res = this.clearIfInvisible;\n        if (!!this.survey)\n            return this.survey.getQuestionClearIfInvisible(res);\n        return res !== \"default\" ? res : \"onComplete\";\n    };\n    Object.defineProperty(Question.prototype, \"displayValue\", {\n        get: function () {\n            if (this.isLoadingFromJson)\n                return \"\";\n            return this.getDisplayValue(true);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    /**\n     * Returns a display text that corresponds to the question value. For example, if you call this method for a Dropdown question, it returns an item text instead of an item value.\n     * @param keysAsText Applies when the question value is an object (in Matrix, Multiple Text, and similar questions). Pass `true` if not only values in the object should be display texts, but also keys. Default value: `false`.\n     * @param value Specify this parameter to get a display text for a specific value, not for the current question value. If the question value is an object, this parameter should be a similar object.\n     */\n    Question.prototype.getDisplayValue = function (keysAsText, value) {\n        if (value === void 0) { value = undefined; }\n        var res = this.calcDisplayValue(keysAsText, value);\n        if (this.survey) {\n            res = this.survey.getQuestionDisplayValue(this, res);\n        }\n        return !!this.displayValueCallback ? this.displayValueCallback(res) : res;\n    };\n    Question.prototype.calcDisplayValue = function (keysAsText, value) {\n        if (value === void 0) { value = undefined; }\n        if (this.customWidget) {\n            var res = this.customWidget.getDisplayValue(this, value);\n            if (res)\n                return res;\n        }\n        value = value == undefined ? this.createValueCopy() : value;\n        if (this.isValueEmpty(value, !this.allowSpaceAsAnswer))\n            return this.getDisplayValueEmpty();\n        return this.getDisplayValueCore(keysAsText, value);\n    };\n    Question.prototype.getDisplayValueCore = function (keyAsText, value) {\n        return value;\n    };\n    Question.prototype.getDisplayValueEmpty = function () {\n        return \"\";\n    };\n    Object.defineProperty(Question.prototype, \"defaultValue\", {\n        /**\n         * A default value for the question. Ignored for question types that cannot have a [value](https://surveyjs.io/form-library/documentation/question#value) (for example, HTML).\n         *\n         * The default value is used as a question value in the following cases:\n         *\n         * - While the survey is being loaded from JSON.\n         * - The question is just added to the survey and does not yet have an answer.\n         * - The respondent left the answer empty.\n         * @see defaultValueExpression\n         */\n        get: function () {\n            return this.getPropertyValue(\"defaultValue\");\n        },\n        set: function (val) {\n            if (this.isValueExpression(val)) {\n                this.defaultValueExpression = val.substring(1);\n                return;\n            }\n            this.setPropertyValue(\"defaultValue\", this.convertDefaultValue(val));\n            this.updateValueWithDefaults();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Question.prototype, \"defaultValueExpression\", {\n        /**\n         * An expression used to calculate the [defaultValue](https://surveyjs.io/form-library/documentation/question#defaultValue).\n         *\n         * This expression applies until the question [value](https://surveyjs.io/form-library/documentation/question#value) is specified by an end user or programmatically.\n         *\n         * An expression can reference other questions as follows:\n         *\n         * - `{other_question_name}`\n         * - `{panel.other_question_name}` (to access questions inside the same dynamic panel)\n         * - `{row.other_question_name}` (to access questions inside the same dynamic matrix or multi-column dropdown)\n         *\n         * An expression can also include built-in and custom functions for advanced calculations. For example, if the `defaultValue` should be today's date, set the `defaultValueExpression` to `\"today()\"`, and the corresponding built-in function will be executed each time the survey is loaded. Refer to the following help topic for more information: [Built-In Functions](https://surveyjs.io/form-library/documentation/design-survey-conditional-logic#built-in-functions).\n         * @see defaultValue\n         */\n        get: function () {\n            return this.getPropertyValue(\"defaultValueExpression\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"defaultValueExpression\", val);\n            this.defaultValueRunner = undefined;\n            this.updateValueWithDefaults();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Question.prototype, \"resetValueIf\", {\n        /**\n         * A Boolean expression. If it evaluates to `true`, the question value is reset to [default](#defaultValue).\n         *\n         * A survey parses and runs all expressions on startup. If any values used in the expression change, the survey re-evaluates it.\n         *\n         * [Expressions](https://surveyjs.io/form-library/documentation/design-survey/conditional-logic#expressions (linkStyle))\n         */\n        get: function () {\n            return this.getPropertyValue(\"resetValueIf\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"resetValueIf\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Question.prototype, \"resizeStyle\", {\n        get: function () {\n            return this.allowResizeComment ? \"both\" : \"none\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    /**\n     * Returns the question value as an object in which the question name, title, value, and other parameters are stored as individual properties.\n     *\n     * If the question can have more than one value (Matrix, Multiple Text), the object enables the `isNode` flag and stores information about these values in the `data` property. Refer to the following help topic for more information: [Access Full Survey Results](https://surveyjs.io/form-library/documentation/handle-survey-results-access#access-full-survey-results).\n     *\n     * Pass an object with the `includeEmpty` property set to `false` if you want to skip empty answers.\n     */\n    Question.prototype.getPlainData = function (options) {\n        var _this = this;\n        if (!options) {\n            options = { includeEmpty: true, includeQuestionTypes: false };\n        }\n        if (options.includeEmpty || !this.isEmpty()) {\n            var questionPlainData = {\n                name: this.name,\n                title: this.locTitle.renderedHtml,\n                value: this.value,\n                displayValue: this.displayValue,\n                isNode: false,\n                getString: function (val) {\n                    return typeof val === \"object\" ? JSON.stringify(val) : val;\n                },\n            };\n            if (options.includeQuestionTypes === true) {\n                questionPlainData.questionType = this.getType();\n            }\n            (options.calculations || []).forEach(function (calculation) {\n                questionPlainData[calculation.propertyName] = _this.getPlainDataCalculatedValue(calculation.propertyName);\n            });\n            if (this.hasComment) {\n                questionPlainData.isNode = true;\n                questionPlainData.data = [\n                    {\n                        name: 0,\n                        isComment: true,\n                        title: \"Comment\",\n                        value: _settings__WEBPACK_IMPORTED_MODULE_8__[\"settings\"].commentSuffix,\n                        displayValue: this.comment,\n                        getString: function (val) {\n                            return typeof val === \"object\" ? JSON.stringify(val) : val;\n                        },\n                        isNode: false,\n                    },\n                ];\n            }\n            return questionPlainData;\n        }\n        return undefined;\n    };\n    Question.prototype.getPlainDataCalculatedValue = function (propName) {\n        return this[propName];\n    };\n    Object.defineProperty(Question.prototype, \"correctAnswer\", {\n        /**\n         * A correct answer to this question. Specify this property if you want to [create a quiz](https://surveyjs.io/form-library/documentation/design-survey-create-a-quiz).\n         * @see SurveyModel.getCorrectAnswerCount\n         * @see SurveyModel.getInCorrectAnswerCount\n         */\n        get: function () {\n            return this.getPropertyValue(\"correctAnswer\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"correctAnswer\", this.convertDefaultValue(val));\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Question.prototype.convertDefaultValue = function (val) {\n        return val;\n    };\n    Object.defineProperty(Question.prototype, \"quizQuestionCount\", {\n        /**\n         * The number of quiz questions. A question counts if it is visible, has an input field, and specifies `correctAnswer`.\n         * @see [Create a Quiz](https://surveyjs.io/form-library/documentation/design-survey-create-a-quiz)\n         * @see correctAnswer\n         * @see SurveyModel.getQuizQuestions\n         */\n        get: function () {\n            if (this.isVisible &&\n                this.hasInput &&\n                !this.isValueEmpty(this.correctAnswer))\n                return this.getQuizQuestionCount();\n            return 0;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Question.prototype, \"correctAnswerCount\", {\n        get: function () {\n            if (!this.isEmpty() && !this.isValueEmpty(this.correctAnswer))\n                return this.getCorrectAnswerCount();\n            return 0;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Question.prototype.getQuizQuestionCount = function () {\n        return 1;\n    };\n    Question.prototype.getCorrectAnswerCount = function () {\n        return this.checkIfAnswerCorrect() ? 1 : 0;\n    };\n    Question.prototype.checkIfAnswerCorrect = function () {\n        var isEqual = _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isTwoValueEquals(this.value, this.correctAnswer, this.getAnswerCorrectIgnoreOrder(), _settings__WEBPACK_IMPORTED_MODULE_8__[\"settings\"].comparator.caseSensitive, true);\n        var correct = isEqual ? 1 : 0;\n        var options = { result: isEqual, correctAnswer: correct, correctAnswers: correct, incorrectAnswers: this.quizQuestionCount - correct };\n        if (!!this.survey) {\n            this.survey.onCorrectQuestionAnswer(this, options);\n        }\n        return options.result;\n    };\n    Question.prototype.getAnswerCorrectIgnoreOrder = function () { return false; };\n    /**\n    * Returns `true` if a question answer matches the `correctAnswer` property value.\n    *\n    * [View Demo](https://surveyjs.io/form-library/examples/create-a-scored-quiz (linkStyle))\n    * @see correctAnswer\n    * @see SurveyModel.getQuizQuestions\n    */\n    Question.prototype.isAnswerCorrect = function () {\n        return this.correctAnswerCount == this.quizQuestionCount;\n    };\n    Question.prototype.updateValueWithDefaults = function () {\n        if (this.isLoadingFromJson || (!this.isDesignMode && this.isDefaultValueEmpty()))\n            return;\n        if (!this.isDesignMode && !this.isEmpty())\n            return;\n        if (this.isEmpty() && this.isDefaultValueEmpty())\n            return;\n        if (this.isClearValueOnHidden && !this.isVisible)\n            return;\n        if (this.isDesignMode && this.isContentElement && this.isDefaultValueEmpty())\n            return;\n        this.setDefaultValue();\n    };\n    Object.defineProperty(Question.prototype, \"isClearValueOnHidden\", {\n        get: function () {\n            var clearIf = this.getClearIfInvisible();\n            if (clearIf === \"none\" || clearIf === \"onComplete\")\n                return false;\n            return clearIf === \"onHidden\" || clearIf === \"onHiddenContainer\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Question.prototype.getQuestionFromArray = function (name, index) {\n        return null;\n    };\n    Question.prototype.getDefaultValue = function () {\n        return this.defaultValue;\n    };\n    Question.prototype.isDefaultValueEmpty = function () {\n        return !this.defaultValueExpression && this.isValueEmpty(this.defaultValue, !this.allowSpaceAsAnswer);\n    };\n    Question.prototype.getDefaultRunner = function (runner, expression) {\n        if (!runner && !!expression) {\n            runner = this.createExpressionRunner(expression);\n        }\n        if (!!runner) {\n            runner.expression = expression;\n        }\n        return runner;\n    };\n    Question.prototype.setDefaultValue = function () {\n        var _this = this;\n        this.defaultValueRunner = this.getDefaultRunner(this.defaultValueRunner, this.defaultValueExpression);\n        this.setValueAndRunExpression(this.defaultValueRunner, this.getUnbindValue(this.defaultValue), function (val) {\n            if (!_this.isTwoValueEquals(_this.value, val)) {\n                _this.value = val;\n            }\n        });\n    };\n    Question.prototype.isValueExpression = function (val) {\n        return !!val && typeof val == \"string\" && val.length > 0 && val[0] == \"=\";\n    };\n    Question.prototype.setValueAndRunExpression = function (runner, defaultValue, setFunc, values, properties) {\n        var _this = this;\n        if (values === void 0) { values = null; }\n        if (properties === void 0) { properties = null; }\n        var func = function (val) {\n            _this.runExpressionSetValue(val, setFunc);\n        };\n        if (!this.runDefaultValueExpression(runner, values, properties, func)) {\n            func(defaultValue);\n        }\n    };\n    Question.prototype.convertFuncValuetoQuestionValue = function (val) {\n        return _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].convertValToQuestionVal(val);\n    };\n    Question.prototype.runExpressionSetValue = function (val, setFunc) {\n        setFunc(this.convertFuncValuetoQuestionValue(val));\n    };\n    Question.prototype.runDefaultValueExpression = function (runner, values, properties, setFunc) {\n        var _this = this;\n        if (values === void 0) { values = null; }\n        if (properties === void 0) { properties = null; }\n        if (!runner || !this.data)\n            return false;\n        if (!setFunc) {\n            setFunc = function (val) {\n                _this.runExpressionSetValue(val, function (val) {\n                    if (!_this.isTwoValueEquals(_this.value, val)) {\n                        _this.value = val;\n                    }\n                });\n            };\n        }\n        if (!values)\n            values = this.data.getFilteredValues();\n        if (!properties)\n            properties = this.data.getFilteredProperties();\n        if (!!runner && runner.canRun) {\n            runner.onRunComplete = function (res) {\n                if (res == undefined)\n                    res = _this.defaultValue;\n                _this.isChangingViaDefaultValue = true;\n                setFunc(res);\n                _this.isChangingViaDefaultValue = false;\n            };\n            runner.run(values, properties);\n        }\n        return true;\n    };\n    Object.defineProperty(Question.prototype, \"comment\", {\n        /**\n         * A comment to the selected question value. Enable the `showCommentArea` property to allow users to leave comments.\n         * @see showCommentArea\n         * @see commentText\n         */\n        get: function () {\n            return this.getQuestionComment();\n        },\n        set: function (newValue) {\n            if (!!newValue) {\n                var trimmedValue = newValue.toString().trim();\n                if (trimmedValue !== newValue) {\n                    newValue = trimmedValue;\n                    if (newValue === this.comment) {\n                        this.setPropertyValueDirectly(\"comment\", newValue);\n                    }\n                }\n            }\n            if (this.comment == newValue)\n                return;\n            this.setQuestionComment(newValue);\n            this.updateCommentElements();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Question.prototype.getCommentAreaCss = function (isOther) {\n        if (isOther === void 0) { isOther = false; }\n        return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_10__[\"CssClassBuilder\"]()\n            .append(\"form-group\", isOther)\n            .append(this.cssClasses.formGroup, !isOther)\n            .append(this.cssClasses.commentArea)\n            .toString();\n    };\n    Question.prototype.getQuestionComment = function () {\n        return this.questionComment;\n    };\n    Question.prototype.setQuestionComment = function (newValue) {\n        this.setNewComment(newValue);\n    };\n    /**\n     * Returns `true` if the question value is an empty string, array, or object or if it equals `undefined` or `null`.\n     */\n    Question.prototype.isEmpty = function () {\n        return this.isValueEmpty(this.value, !this.allowSpaceAsAnswer);\n    };\n    Object.defineProperty(Question.prototype, \"isAnswered\", {\n        get: function () {\n            return this.getPropertyValue(\"isAnswered\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"isAnswered\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Question.prototype.updateIsAnswered = function () {\n        var oldVal = this.isAnswered;\n        this.setPropertyValue(\"isAnswered\", this.getIsAnswered());\n        if (oldVal !== this.isAnswered) {\n            this.updateQuestionCss();\n        }\n    };\n    Question.prototype.getIsAnswered = function () {\n        return !this.isEmpty();\n    };\n    Object.defineProperty(Question.prototype, \"validators\", {\n        /**\n         * Question validators.\n         * @see [Data Validation](https://surveyjs.io/form-library/documentation/data-validation)\n         */\n        get: function () {\n            return this.getPropertyValue(\"validators\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"validators\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Question.prototype.getValidators = function () {\n        return this.validators;\n    };\n    Question.prototype.getSupportedValidators = function () {\n        var res = [];\n        var className = this.getType();\n        while (!!className) {\n            var classValidators = _settings__WEBPACK_IMPORTED_MODULE_8__[\"settings\"].supportedValidators[className];\n            if (!!classValidators) {\n                for (var i = classValidators.length - 1; i >= 0; i--) {\n                    res.splice(0, 0, classValidators[i]);\n                }\n            }\n            var classInfo = _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].findClass(className);\n            className = classInfo.parentName;\n        }\n        return res;\n    };\n    Question.prototype.addConditionObjectsByContext = function (objects, context) {\n        objects.push({\n            name: this.getValueName(),\n            text: this.processedTitle,\n            question: this,\n        });\n    };\n    /**\n     * Returns an array of questions nested within the current question. Use this method to obtain questions within [Multiple Text](https://surveyjs.io/form-library/documentation/api-reference/multiple-text-entry-question-model), [Dynamic Panel](https://surveyjs.io/form-library/documentation/api-reference/dynamic-panel-model), and [Matrix](https://surveyjs.io/form-library/documentation/api-reference/matrix-table-question-model)-like questions.\n     * @param visibleOnly A Boolean value that specifies whether to include only visible nested questions.\n     * @returns An array of nested questions.\n     */\n    Question.prototype.getNestedQuestions = function (visibleOnly) {\n        if (visibleOnly === void 0) { visibleOnly = false; }\n        var res = [];\n        this.collectNestedQuestions(res, visibleOnly);\n        if (res.length === 1 && res[0] === this)\n            return [];\n        return res;\n    };\n    Question.prototype.collectNestedQuestions = function (questions, visibleOnly) {\n        if (visibleOnly === void 0) { visibleOnly = false; }\n        if (visibleOnly && !this.isVisible)\n            return;\n        this.collectNestedQuestionsCore(questions, visibleOnly);\n    };\n    Question.prototype.collectNestedQuestionsCore = function (questions, visibleOnly) {\n        questions.push(this);\n    };\n    Question.prototype.getConditionJson = function (operator, path) {\n        if (operator === void 0) { operator = null; }\n        if (path === void 0) { path = null; }\n        var json = new _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"JsonObject\"]().toJsonObject(this);\n        json[\"type\"] = this.getType();\n        return json;\n    };\n    Question.prototype.hasErrors = function (fireCallback, rec) {\n        if (fireCallback === void 0) { fireCallback = true; }\n        if (rec === void 0) { rec = null; }\n        var oldHasErrors = this.errors.length > 0;\n        var errors = this.checkForErrors(!!rec && rec.isOnValueChanged === true);\n        if (fireCallback) {\n            if (!!this.survey) {\n                this.survey.beforeSettingQuestionErrors(this, errors);\n            }\n            this.errors = errors;\n            if (this.errors !== errors) {\n                this.errors.forEach(function (er) { return er.locText.strChanged(); });\n            }\n        }\n        this.updateContainsErrors();\n        if (oldHasErrors != errors.length > 0) {\n            this.updateQuestionCss();\n        }\n        if (this.isCollapsed && rec && fireCallback && errors.length > 0) {\n            this.expand();\n        }\n        return errors.length > 0;\n    };\n    /**\n     * Validates this question and returns `false` if the validation fails.\n     * @param fireCallback *Optional.* Pass `false` if you do not want to show validation errors in the UI.\n     * @see [Data Validation](https://surveyjs.io/form-library/documentation/data-validation)\n     */\n    Question.prototype.validate = function (fireCallback, rec) {\n        if (fireCallback === void 0) { fireCallback = true; }\n        if (rec === void 0) { rec = null; }\n        if (!!rec && rec.isOnValueChanged) {\n            if (!!this.parent) {\n                this.parent.validateContainerOnly();\n            }\n        }\n        return !this.hasErrors(fireCallback, rec);\n    };\n    Object.defineProperty(Question.prototype, \"currentErrorCount\", {\n        get: function () {\n            return this.errors.length;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Question.prototype, \"requiredText\", {\n        /**\n         * Returns a character or text string that indicates a required question.\n         * @see SurveyModel.requiredText\n         * @see isRequired\n         */\n        get: function () {\n            return this.survey != null && this.isRequired\n                ? this.survey.requiredText\n                : \"\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Question.prototype.addError = function (error) {\n        if (!error)\n            return;\n        var newError = null;\n        if (typeof error === \"string\" || error instanceof String) {\n            newError = new _error__WEBPACK_IMPORTED_MODULE_3__[\"CustomError\"](error, this.survey);\n        }\n        else {\n            newError = error;\n        }\n        this.errors.push(newError);\n    };\n    Question.prototype.removeError = function (error) {\n        var errors = this.errors;\n        var index = errors.indexOf(error);\n        if (index !== -1)\n            errors.splice(index, 1);\n    };\n    Question.prototype.checkForErrors = function (isOnValueChanged) {\n        var qErrors = new Array();\n        if (this.isVisible && this.canCollectErrors()) {\n            this.collectErrors(qErrors, isOnValueChanged);\n        }\n        return qErrors;\n    };\n    Question.prototype.canCollectErrors = function () {\n        return !this.isReadOnly || _settings__WEBPACK_IMPORTED_MODULE_8__[\"settings\"].readOnly.enableValidation;\n    };\n    Question.prototype.collectErrors = function (qErrors, isOnValueChanged) {\n        this.onCheckForErrors(qErrors, isOnValueChanged);\n        if (qErrors.length > 0 || !this.canRunValidators(isOnValueChanged))\n            return;\n        var errors = this.runValidators();\n        if (errors.length > 0) {\n            //validators may change the question value.\n            qErrors.length = 0;\n            for (var i = 0; i < errors.length; i++) {\n                qErrors.push(errors[i]);\n            }\n        }\n        if (this.survey && qErrors.length == 0) {\n            var error = this.fireSurveyValidation();\n            if (error) {\n                qErrors.push(error);\n            }\n        }\n    };\n    Question.prototype.canRunValidators = function (isOnValueChanged) {\n        return true;\n    };\n    Question.prototype.fireSurveyValidation = function () {\n        if (this.validateValueCallback)\n            return this.validateValueCallback();\n        return this.survey ? this.survey.validateQuestion(this) : null;\n    };\n    Question.prototype.onCheckForErrors = function (errors, isOnValueChanged) {\n        var _this = this;\n        if ((!isOnValueChanged || this.isOldAnswered) && this.hasRequiredError()) {\n            var err = new _error__WEBPACK_IMPORTED_MODULE_3__[\"AnswerRequiredError\"](this.requiredErrorText, this);\n            err.onUpdateErrorTextCallback = function (err) { err.text = _this.requiredErrorText; };\n            errors.push(err);\n        }\n    };\n    Question.prototype.hasRequiredError = function () {\n        return this.isRequired && this.isEmpty();\n    };\n    Object.defineProperty(Question.prototype, \"isRunningValidators\", {\n        get: function () {\n            return this.getIsRunningValidators();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Question.prototype.getIsRunningValidators = function () {\n        return this.isRunningValidatorsValue;\n    };\n    Question.prototype.runValidators = function () {\n        var _this = this;\n        if (!!this.validatorRunner) {\n            this.validatorRunner.onAsyncCompleted = null;\n        }\n        this.validatorRunner = new _validator__WEBPACK_IMPORTED_MODULE_4__[\"ValidatorRunner\"]();\n        this.isRunningValidatorsValue = true;\n        this.validatorRunner.onAsyncCompleted = function (errors) {\n            _this.doOnAsyncCompleted(errors);\n        };\n        return this.validatorRunner.run(this);\n    };\n    Question.prototype.doOnAsyncCompleted = function (errors) {\n        for (var i = 0; i < errors.length; i++) {\n            this.errors.push(errors[i]);\n        }\n        this.isRunningValidatorsValue = false;\n        this.raiseOnCompletedAsyncValidators();\n    };\n    Question.prototype.raiseOnCompletedAsyncValidators = function () {\n        if (!!this.onCompletedAsyncValidators && !this.isRunningValidators) {\n            this.onCompletedAsyncValidators(this.getAllErrors().length > 0);\n            this.onCompletedAsyncValidators = null;\n        }\n    };\n    Question.prototype.setNewValue = function (newValue) {\n        if (this.isNewValueEqualsToValue(newValue))\n            return;\n        if (!this.checkIsValueCorrect(newValue))\n            return;\n        this.isOldAnswered = this.isAnswered;\n        this.setNewValueInData(newValue);\n        this.allowNotifyValueChanged && this.onValueChanged();\n        if (this.isAnswered !== this.isOldAnswered) {\n            this.updateQuestionCss();\n        }\n        this.isOldAnswered = undefined;\n    };\n    Question.prototype.checkIsValueCorrect = function (val) {\n        var res = this.isValueEmpty(val, !this.allowSpaceAsAnswer) || this.isNewValueCorrect(val);\n        if (!res) {\n            _console_warnings__WEBPACK_IMPORTED_MODULE_12__[\"ConsoleWarnings\"].inCorrectQuestionValue(this.name, val);\n        }\n        return res;\n    };\n    Question.prototype.isNewValueCorrect = function (val) {\n        return true;\n    };\n    Question.prototype.isNewValueEqualsToValue = function (newValue) {\n        var val = this.value;\n        if (!this.isTwoValueEquals(newValue, val, false, false))\n            return false;\n        var isObj = newValue === val && !!val && (Array.isArray(val) || typeof val === \"object\");\n        return !isObj;\n    };\n    Question.prototype.isTextValue = function () {\n        return false;\n    };\n    Object.defineProperty(Question.prototype, \"isSurveyInputTextUpdate\", {\n        get: function () {\n            return !!this.survey ? this.survey.isUpdateValueTextOnTyping : false;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Question.prototype, \"requireStrictCompare\", {\n        get: function () { return false; },\n        enumerable: false,\n        configurable: true\n    });\n    Question.prototype.getDataLocNotification = function () {\n        return this.isInputTextUpdate ? \"text\" : false;\n    };\n    Object.defineProperty(Question.prototype, \"isInputTextUpdate\", {\n        get: function () {\n            return this.isSurveyInputTextUpdate && this.isTextValue();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Question.prototype.setNewValueInData = function (newValue) {\n        newValue = this.valueToData(newValue);\n        if (!this.isValueChangedInSurvey) {\n            this.setValueCore(newValue);\n        }\n    };\n    Question.prototype.getValueCore = function () {\n        return this.questionValue;\n    };\n    Question.prototype.setValueCore = function (newValue) {\n        this.setQuestionValue(newValue);\n        if (this.data != null && this.canSetValueToSurvey()) {\n            newValue = this.valueForSurvey;\n            this.data.setValue(this.getValueName(), newValue, this.getDataLocNotification(), this.allowNotifyValueChanged, this.name);\n        }\n        this.isMouseDown = false;\n    };\n    Question.prototype.canSetValueToSurvey = function () {\n        return true;\n    };\n    Question.prototype.valueFromData = function (val) { return val; };\n    Question.prototype.valueToData = function (val) { return val; };\n    Question.prototype.convertToCorrectValue = function (val) { return val; };\n    Question.prototype.onValueChanged = function () { };\n    Question.prototype.onMouseDown = function () {\n        this.isMouseDown = true;\n    };\n    Question.prototype.setNewComment = function (newValue) {\n        if (this.questionComment === newValue)\n            return;\n        this.questionComment = newValue;\n        if (this.data != null) {\n            this.data.setComment(this.getValueName(), newValue, this.isSurveyInputTextUpdate ? \"text\" : false);\n        }\n    };\n    Question.prototype.getValidName = function (name) {\n        return makeNameValid(name);\n    };\n    //IQuestion\n    Question.prototype.updateValueFromSurvey = function (newValue) {\n        newValue = this.getUnbindValue(newValue);\n        if (!!this.valueFromDataCallback) {\n            newValue = this.valueFromDataCallback(newValue);\n        }\n        if (!this.checkIsValueCorrect(newValue))\n            return;\n        this.isChangingViaDefaultValue = this.isValueEmpty(newValue);\n        this.setQuestionValue(this.valueFromData(newValue));\n        this.isChangingViaDefaultValue = false;\n        this.updateDependedQuestions();\n        this.updateIsAnswered();\n    };\n    Question.prototype.updateCommentFromSurvey = function (newValue) {\n        this.questionComment = newValue;\n    };\n    Question.prototype.onChangeQuestionValue = function (newValue) { };\n    Question.prototype.setValueChangedDirectly = function () {\n        this.isValueChangedDirectly = true;\n    };\n    Question.prototype.setQuestionValue = function (newValue, updateIsAnswered) {\n        if (updateIsAnswered === void 0) { updateIsAnswered = true; }\n        newValue = this.convertToCorrectValue(newValue);\n        var isEqual = this.isTwoValueEquals(this.questionValue, newValue);\n        if (!isEqual && !this.isChangingViaDefaultValue) {\n            this.setValueChangedDirectly();\n        }\n        this.questionValue = newValue;\n        if (!isEqual) {\n            this.onChangeQuestionValue(newValue);\n        }\n        !isEqual && this.allowNotifyValueChanged &&\n            this.fireCallback(this.valueChangedCallback);\n        if (updateIsAnswered)\n            this.updateIsAnswered();\n    };\n    Question.prototype.onSurveyValueChanged = function (newValue) { };\n    Question.prototype.setVisibleIndex = function (val) {\n        if (!this.isVisible ||\n            (!this.hasTitle && !_settings__WEBPACK_IMPORTED_MODULE_8__[\"settings\"].numbering.includeQuestionsWithHiddenTitle) ||\n            (this.hideNumber && !_settings__WEBPACK_IMPORTED_MODULE_8__[\"settings\"].numbering.includeQuestionsWithHiddenNumber)) {\n            val = -1;\n        }\n        this.setPropertyValue(\"visibleIndex\", val);\n        this.setPropertyValue(\"no\", this.calcNo());\n        return val < 0 ? 0 : 1;\n    };\n    Question.prototype.removeElement = function (element) {\n        return false;\n    };\n    Question.prototype.supportGoNextPageAutomatic = function () {\n        return false;\n    };\n    Question.prototype.supportGoNextPageError = function () {\n        return true;\n    };\n    /**\n     * Removes values that cannot be assigned to this question, for example, choices unlisted in the `choices` array.\n     *\n     * Call this method after you assign new question values in code to ensure that they are acceptable.\n     *\n     * > This method does not remove values that fail validation. Call the `validate()` method to validate newly assigned values.\n     *\n     * @see validate\n     */\n    Question.prototype.clearIncorrectValues = function () { };\n    Question.prototype.clearOnDeletingContainer = function () { };\n    /**\n     * Empties the `errors` array.\n     * @see errors\n     */\n    Question.prototype.clearErrors = function () {\n        this.errors = [];\n    };\n    Question.prototype.clearUnusedValues = function () { };\n    Question.prototype.onAnyValueChanged = function (name, questionName) { };\n    Question.prototype.checkBindings = function (valueName, value) {\n        if (this.bindings.isEmpty() || !this.data)\n            return;\n        var props = this.bindings.getPropertiesByValueName(valueName);\n        for (var i = 0; i < props.length; i++) {\n            var propName = props[i];\n            if (this.isValueEmpty(value) && _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isNumber(this[propName])) {\n                value = 0;\n            }\n            this[propName] = value;\n        }\n    };\n    Question.prototype.getComponentName = function () {\n        return _rendererFactory__WEBPACK_IMPORTED_MODULE_9__[\"RendererFactory\"].Instance.getRendererByQuestion(this);\n    };\n    Question.prototype.isDefaultRendering = function () {\n        return (!!this.customWidget ||\n            this.renderAs === \"default\" ||\n            this.getComponentName() === \"default\");\n    };\n    //ISurveyErrorOwner\n    Question.prototype.getErrorCustomText = function (text, error) {\n        if (!!this.survey)\n            return this.survey.getSurveyErrorCustomText(this, text, error);\n        return text;\n    };\n    //IValidatorOwner\n    Question.prototype.getValidatorTitle = function () {\n        return null;\n    };\n    Object.defineProperty(Question.prototype, \"validatedValue\", {\n        get: function () {\n            return this.value;\n        },\n        set: function (val) {\n            this.value = val;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Question.prototype.getAllValues = function () {\n        return !!this.data ? this.data.getAllValues() : null;\n    };\n    Question.prototype.processPopupVisiblilityChanged = function (popupModel, visible) {\n        this.survey.processPopupVisiblityChanged(this, popupModel, visible);\n    };\n    Question.prototype.onTextKeyDownHandler = function (event) {\n        if (event.keyCode === 13) {\n            this.survey.questionEditFinishCallback(this, event);\n        }\n    };\n    Question.prototype.transformToMobileView = function () { };\n    Question.prototype.transformToDesktopView = function () { };\n    Question.prototype.needResponsiveWidth = function () {\n        return false;\n    };\n    //responsiveness methods\n    Question.prototype.supportResponsiveness = function () {\n        return false;\n    };\n    Question.prototype.needResponsiveness = function () {\n        return this.supportResponsiveness() && this.isDefaultV2Theme && !this.isDesignMode;\n    };\n    Question.prototype.checkForResponsiveness = function (el) {\n        var _this = this;\n        if (this.needResponsiveness()) {\n            if (this.isCollapsed) {\n                var onStateChanged = function () {\n                    if (_this.isExpanded) {\n                        _this.initResponsiveness(el);\n                        _this.unregisterPropertyChangedHandlers([\"state\"], \"for-responsiveness\");\n                    }\n                };\n                this.registerPropertyChangedHandlers([\"state\"], onStateChanged, \"for-responsiveness\");\n            }\n            else {\n                this.initResponsiveness(el);\n            }\n        }\n    };\n    Question.prototype.getObservedElementSelector = function () {\n        return \".sd-scrollable-container\";\n    };\n    Question.prototype.onMobileChanged = function () {\n        this.onMobileChangedCallback && this.onMobileChangedCallback();\n    };\n    Question.prototype.triggerResponsiveness = function (hard) {\n        if (hard === void 0) { hard = true; }\n        if (this.triggerResponsivenessCallback) {\n            this.triggerResponsivenessCallback(hard);\n        }\n    };\n    Question.prototype.initResponsiveness = function (el) {\n        var _this = this;\n        this.destroyResizeObserver();\n        if (!!el && this.isDefaultRendering()) {\n            var scrollableSelector_1 = this.getObservedElementSelector();\n            if (!scrollableSelector_1)\n                return;\n            var defaultRootEl = el.querySelector(scrollableSelector_1);\n            if (!defaultRootEl)\n                return;\n            var isProcessed_1 = false;\n            var requiredWidth_1 = undefined;\n            this.triggerResponsivenessCallback = function (hard) {\n                if (hard) {\n                    requiredWidth_1 = undefined;\n                    _this.renderAs = \"default\";\n                    isProcessed_1 = false;\n                }\n                var callback = function () {\n                    var rootEl = el.querySelector(scrollableSelector_1);\n                    if (!requiredWidth_1 && _this.isDefaultRendering()) {\n                        requiredWidth_1 = rootEl.scrollWidth;\n                    }\n                    if (isProcessed_1 || !Object(_utils_utils__WEBPACK_IMPORTED_MODULE_11__[\"isContainerVisible\"])(rootEl)) {\n                        isProcessed_1 = false;\n                    }\n                    else {\n                        isProcessed_1 = _this.processResponsiveness(requiredWidth_1, Object(_utils_utils__WEBPACK_IMPORTED_MODULE_11__[\"getElementWidth\"])(rootEl));\n                    }\n                };\n                if (hard) {\n                    setTimeout(callback, 1);\n                }\n                else {\n                    callback();\n                }\n            };\n            this.resizeObserver = new ResizeObserver(function (entries) {\n                window.requestAnimationFrame(function () {\n                    _this.triggerResponsiveness(false);\n                });\n            });\n            this.onMobileChangedCallback = function () {\n                setTimeout(function () {\n                    var rootEl = el.querySelector(scrollableSelector_1);\n                    _this.processResponsiveness(requiredWidth_1, Object(_utils_utils__WEBPACK_IMPORTED_MODULE_11__[\"getElementWidth\"])(rootEl));\n                }, 0);\n            };\n            this.resizeObserver.observe(el);\n        }\n    };\n    Question.prototype.getCompactRenderAs = function () {\n        return \"default\";\n    };\n    Question.prototype.getDesktopRenderAs = function () {\n        return \"default\";\n    };\n    Question.prototype.processResponsiveness = function (requiredWidth, availableWidth) {\n        availableWidth = Math.round(availableWidth);\n        if (Math.abs(requiredWidth - availableWidth) > 2) {\n            var oldRenderAs = this.renderAs;\n            if (requiredWidth > availableWidth) {\n                this.renderAs = this.getCompactRenderAs();\n            }\n            else {\n                this.renderAs = this.getDesktopRenderAs();\n            }\n            return oldRenderAs !== this.renderAs;\n        }\n        return false;\n    };\n    Question.prototype.destroyResizeObserver = function () {\n        if (!!this.resizeObserver) {\n            this.resizeObserver.disconnect();\n            this.resizeObserver = undefined;\n            this.onMobileChangedCallback = undefined;\n            this.triggerResponsivenessCallback = undefined;\n            this.renderAs = this.getDesktopRenderAs();\n        }\n    };\n    Question.prototype.dispose = function () {\n        _super.prototype.dispose.call(this);\n        this.resetDependedQuestions();\n        this.destroyResizeObserver();\n    };\n    Question.prototype.resetDependedQuestions = function () {\n        for (var i = 0; i < this.dependedQuestions.length; i++) {\n            this.dependedQuestions[i].resetDependedQuestion();\n        }\n    };\n    Object.defineProperty(Question.prototype, \"isNewA11yStructure\", {\n        //a11y\n        get: function () {\n            return false;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Question.prototype, \"ariaLabel\", {\n        get: function () {\n            if (this.isNewA11yStructure)\n                return null;\n            return this.locTitle.renderedHtml;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Question.prototype, \"ariaRole\", {\n        get: function () {\n            if (this.isNewA11yStructure)\n                return null;\n            return \"textbox\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Question.prototype, \"ariaRequired\", {\n        get: function () {\n            if (this.isNewA11yStructure)\n                return null;\n            return this.isRequired ? \"true\" : \"false\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Question.prototype, \"ariaInvalid\", {\n        get: function () {\n            if (this.isNewA11yStructure)\n                return null;\n            return this.errors.length > 0 ? \"true\" : \"false\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Question.prototype, \"ariaLabelledBy\", {\n        get: function () {\n            if (this.isNewA11yStructure)\n                return null;\n            if (this.hasTitle) {\n                return this.ariaTitleId;\n            }\n            else {\n                return null;\n            }\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Question.prototype, \"ariaExpanded\", {\n        get: function () {\n            return null;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Question.prototype, \"ariaDescribedBy\", {\n        get: function () {\n            if (this.isNewA11yStructure)\n                return null;\n            return this.errors.length > 0 ? this.id + \"_errors\" : null;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Question.prototype, \"a11y_input_ariaRole\", {\n        //EO a11y\n        //new a11y\n        get: function () {\n            return null;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Question.prototype, \"a11y_input_ariaRequired\", {\n        get: function () {\n            return this.isRequired ? \"true\" : \"false\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Question.prototype, \"a11y_input_ariaInvalid\", {\n        get: function () {\n            return this.errors.length > 0 ? \"true\" : \"false\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Question.prototype, \"a11y_input_ariaLabel\", {\n        get: function () {\n            if (this.hasTitle && !this.parentQuestion) {\n                return null;\n            }\n            else {\n                return this.locTitle.renderedHtml;\n            }\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Question.prototype, \"a11y_input_ariaLabelledBy\", {\n        get: function () {\n            if (this.hasTitle && !this.parentQuestion) {\n                return this.ariaTitleId;\n            }\n            else {\n                return null;\n            }\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Question.prototype, \"a11y_input_ariaDescribedBy\", {\n        get: function () {\n            return this.errors.length > 0 ? this.id + \"_errors\" : null;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Question.TextPreprocessorValuesMap = {\n        title: \"processedTitle\",\n        require: \"requiredText\",\n    };\n    Question.questionCounter = 100;\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: false })\n    ], Question.prototype, \"isMobile\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n    ], Question.prototype, \"forceIsInputReadOnly\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ localizable: true, onSet: function (val, target) { return target.calcRenderedCommentPlaceholder(); } })\n    ], Question.prototype, \"commentPlaceholder\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n    ], Question.prototype, \"renderAs\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: false })\n    ], Question.prototype, \"inMatrixMode\", void 0);\n    return Question;\n}(_survey_element__WEBPACK_IMPORTED_MODULE_2__[\"SurveyElement\"]));\n\nfunction makeNameValid(str) {\n    if (!str)\n        return str;\n    str = str.trim().replace(/[\\{\\}]+/g, \"\");\n    while (!!str && str[0] === _settings__WEBPACK_IMPORTED_MODULE_8__[\"settings\"].expressionDisableConversionChar) {\n        str = str.substring(1);\n    }\n    return str;\n}\n_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].addClass(\"question\", [\n    { name: \"!name\", onSettingValue: function (obj, val) { return makeNameValid(val); } },\n    {\n        name: \"state\",\n        default: \"default\",\n        choices: [\"default\", \"collapsed\", \"expanded\"],\n    },\n    { name: \"visible:switch\", default: true, overridingProperty: \"visibleIf\" },\n    { name: \"useDisplayValuesInDynamicTexts:boolean\", alternativeName: \"useDisplayValuesInTitle\", default: true, layout: \"row\" },\n    \"visibleIf:condition\",\n    { name: \"width\" },\n    { name: \"minWidth\", defaultFunc: function () { return _settings__WEBPACK_IMPORTED_MODULE_8__[\"settings\"].minWidth; } },\n    { name: \"maxWidth\", defaultFunc: function () { return _settings__WEBPACK_IMPORTED_MODULE_8__[\"settings\"].maxWidth; } },\n    { name: \"startWithNewLine:boolean\", default: true, layout: \"row\" },\n    { name: \"indent:number\", default: 0, choices: [0, 1, 2, 3], layout: \"row\" },\n    {\n        name: \"page\",\n        isSerializable: false,\n        visibleIf: function (obj) {\n            var survey = obj ? obj.survey : null;\n            return !survey || !survey.pages || survey.pages.length > 1;\n        },\n        choices: function (obj) {\n            var survey = obj ? obj.survey : null;\n            return survey\n                ? survey.pages.map(function (p) {\n                    return { value: p.name, text: p.title };\n                })\n                : [];\n        },\n    },\n    {\n        name: \"title:text\", serializationProperty: \"locTitle\", layout: \"row\", dependsOn: \"name\",\n        onPropertyEditorUpdate: function (obj, editor) {\n            if (!!obj && !!editor) {\n                editor.placeholder = obj.name;\n            }\n        }\n    },\n    {\n        name: \"titleLocation\",\n        default: \"default\",\n        choices: [\"default\", \"top\", \"bottom\", \"left\", \"hidden\"],\n        layout: \"row\",\n    },\n    {\n        name: \"description:text\",\n        serializationProperty: \"locDescription\",\n        layout: \"row\",\n    },\n    {\n        name: \"descriptionLocation\",\n        default: \"default\",\n        choices: [\"default\", \"underInput\", \"underTitle\"],\n    },\n    {\n        name: \"hideNumber:boolean\",\n        dependsOn: \"titleLocation\",\n        visibleIf: function (obj) {\n            if (!obj) {\n                return true;\n            }\n            if (obj.titleLocation === \"hidden\") {\n                return false;\n            }\n            var parent = obj ? obj.parent : null;\n            var numberingAllowedByParent = !parent || parent.showQuestionNumbers !== \"off\";\n            if (!numberingAllowedByParent) {\n                return false;\n            }\n            var survey = obj ? obj.survey : null;\n            return (!survey ||\n                survey.showQuestionNumbers !== \"off\" ||\n                (!!parent && parent.showQuestionNumbers === \"onpanel\"));\n        },\n    },\n    { name: \"valueName\", onSettingValue: function (obj, val) { return makeNameValid(val); } },\n    \"enableIf:condition\",\n    {\n        name: \"resetValueIf:condition\",\n        category: \"logic\", visible: false\n    },\n    \"defaultValue:value\",\n    {\n        name: \"defaultValueExpression:expression\",\n        category: \"logic\",\n    },\n    \"correctAnswer:value\",\n    {\n        name: \"clearIfInvisible\",\n        default: \"default\",\n        choices: [\"default\", \"none\", \"onComplete\", \"onHidden\", \"onHiddenContainer\"],\n    },\n    { name: \"isRequired:switch\", overridingProperty: \"requiredIf\" },\n    \"requiredIf:condition\",\n    {\n        name: \"requiredErrorText:text\",\n        serializationProperty: \"locRequiredErrorText\",\n    },\n    { name: \"errorLocation\", default: \"default\", choices: [\"default\", \"top\", \"bottom\"] },\n    { name: \"readOnly:switch\", overridingProperty: \"enableIf\" },\n    {\n        name: \"validators:validators\",\n        baseClassName: \"surveyvalidator\",\n        classNamePart: \"validator\",\n    },\n    {\n        name: \"bindings:bindings\",\n        serializationProperty: \"bindings\",\n        visibleIf: function (obj) {\n            return obj.bindings.getNames().length > 0;\n        },\n    },\n    { name: \"renderAs\", default: \"default\", visible: false },\n    { name: \"showCommentArea\", visible: false, default: false, alternativeName: \"hasComment\", category: \"general\" },\n    {\n        name: \"commentText\",\n        dependsOn: \"showCommentArea\",\n        visibleIf: function (obj) {\n            return obj.showCommentArea;\n        },\n        serializationProperty: \"locCommentText\",\n        layout: \"row\",\n    },\n    {\n        name: \"commentPlaceholder\",\n        alternativeName: \"commentPlaceHolder\",\n        serializationProperty: \"locCommentPlaceholder\",\n        dependsOn: \"showCommentArea\",\n        visibleIf: function (obj) {\n            return obj.hasComment;\n        }\n    }\n]);\n_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].addAlterNativeClassName(\"question\", \"questionbase\");\n\n\n/***/ }),\n\n/***/ \"./src/questionCustomWidgets.ts\":\n/*!**************************************!*\\\n  !*** ./src/questionCustomWidgets.ts ***!\n  \\**************************************/\n/*! exports provided: QuestionCustomWidget, CustomWidgetCollection */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_2606506__) {\n\n\"use strict\";\n__nested_webpack_require_2606506__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_2606506__.d(__nested_webpack_exports__, \"QuestionCustomWidget\", function() { return QuestionCustomWidget; });\n/* harmony export (binding) */ __nested_webpack_require_2606506__.d(__nested_webpack_exports__, \"CustomWidgetCollection\", function() { return CustomWidgetCollection; });\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_2606506__(/*! ./base */ \"./src/base.ts\");\n\nvar QuestionCustomWidget = /** @class */ (function () {\n    function QuestionCustomWidget(name, widgetJson) {\n        this.name = name;\n        this.widgetJson = widgetJson;\n        this.htmlTemplate = widgetJson.htmlTemplate ? widgetJson.htmlTemplate : \"\";\n    }\n    QuestionCustomWidget.prototype.afterRender = function (question, el) {\n        var _this = this;\n        if (!this.widgetJson.afterRender)\n            return;\n        question.localeChangedCallback = function () {\n            if (_this.widgetJson.willUnmount) {\n                _this.widgetJson.willUnmount(question, el);\n            }\n            _this.widgetJson.afterRender(question, el);\n        };\n        this.widgetJson.afterRender(question, el);\n    };\n    QuestionCustomWidget.prototype.willUnmount = function (question, el) {\n        if (this.widgetJson.willUnmount)\n            this.widgetJson.willUnmount(question, el);\n    };\n    QuestionCustomWidget.prototype.getDisplayValue = function (question, value) {\n        if (value === void 0) { value = undefined; }\n        if (this.widgetJson.getDisplayValue)\n            return this.widgetJson.getDisplayValue(question, value);\n        return null;\n    };\n    QuestionCustomWidget.prototype.isFit = function (question) {\n        if (this.isLibraryLoaded() && this.widgetJson.isFit)\n            return this.widgetJson.isFit(question);\n        return false;\n    };\n    Object.defineProperty(QuestionCustomWidget.prototype, \"canShowInToolbox\", {\n        get: function () {\n            if (this.widgetJson.showInToolbox === false)\n                return false;\n            if (CustomWidgetCollection.Instance.getActivatedBy(this.name) != \"customtype\")\n                return false;\n            return !this.widgetJson.widgetIsLoaded || this.widgetJson.widgetIsLoaded();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionCustomWidget.prototype, \"showInToolbox\", {\n        get: function () {\n            return this.widgetJson.showInToolbox !== false;\n        },\n        set: function (val) {\n            this.widgetJson.showInToolbox = val;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionCustomWidget.prototype.init = function () {\n        if (this.widgetJson.init) {\n            this.widgetJson.init();\n        }\n    };\n    QuestionCustomWidget.prototype.activatedByChanged = function (activatedBy) {\n        if (this.isLibraryLoaded() && this.widgetJson.activatedByChanged) {\n            this.widgetJson.activatedByChanged(activatedBy);\n        }\n    };\n    QuestionCustomWidget.prototype.isLibraryLoaded = function () {\n        if (this.widgetJson.widgetIsLoaded)\n            return this.widgetJson.widgetIsLoaded() == true;\n        return true;\n    };\n    Object.defineProperty(QuestionCustomWidget.prototype, \"isDefaultRender\", {\n        get: function () {\n            return this.widgetJson.isDefaultRender;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionCustomWidget.prototype, \"pdfQuestionType\", {\n        get: function () {\n            return this.widgetJson.pdfQuestionType;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionCustomWidget.prototype, \"pdfRender\", {\n        get: function () {\n            return this.widgetJson.pdfRender;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    return QuestionCustomWidget;\n}());\n\nvar CustomWidgetCollection = /** @class */ (function () {\n    function CustomWidgetCollection() {\n        this.widgetsValues = [];\n        this.widgetsActivatedBy = {};\n        this.onCustomWidgetAdded = new _base__WEBPACK_IMPORTED_MODULE_0__[\"Event\"]();\n    }\n    Object.defineProperty(CustomWidgetCollection.prototype, \"widgets\", {\n        get: function () {\n            return this.widgetsValues;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    CustomWidgetCollection.prototype.add = function (widgetJson, activatedBy) {\n        if (activatedBy === void 0) { activatedBy = \"property\"; }\n        this.addCustomWidget(widgetJson, activatedBy);\n    };\n    CustomWidgetCollection.prototype.addCustomWidget = function (widgetJson, activatedBy) {\n        if (activatedBy === void 0) { activatedBy = \"property\"; }\n        var name = widgetJson.name;\n        if (!name) {\n            name = \"widget_\" + this.widgets.length + 1;\n        }\n        var customWidget = new QuestionCustomWidget(name, widgetJson);\n        this.widgetsValues.push(customWidget);\n        customWidget.init();\n        this.widgetsActivatedBy[name] = activatedBy;\n        customWidget.activatedByChanged(activatedBy);\n        this.onCustomWidgetAdded.fire(customWidget, null);\n        return customWidget;\n    };\n    /**\n     * Returns the way the custom wiget is activated. It can be activated by a property (\"property\"), question type (\"type\") or by new/custom question type (\"customtype\").\n     * @param widgetName the custom widget name\n     * @see setActivatedBy\n     */\n    CustomWidgetCollection.prototype.getActivatedBy = function (widgetName) {\n        var res = this.widgetsActivatedBy[widgetName];\n        return res ? res : \"property\";\n    };\n    /**\n     * Sets the way the custom wiget is activated. The activation types are: property (\"property\"), question type (\"type\") or new/custom question type (\"customtype\"). A custom wiget may support all or only some of this activation types.\n     * @param widgetName\n     * @param activatedBy there are three possible variants: \"property\", \"type\" and \"customtype\"\n     */\n    CustomWidgetCollection.prototype.setActivatedBy = function (widgetName, activatedBy) {\n        if (!widgetName || !activatedBy)\n            return;\n        var widget = this.getCustomWidgetByName(widgetName);\n        if (!widget)\n            return;\n        this.widgetsActivatedBy[widgetName] = activatedBy;\n        widget.activatedByChanged(activatedBy);\n    };\n    CustomWidgetCollection.prototype.clear = function () {\n        this.widgetsValues = [];\n    };\n    CustomWidgetCollection.prototype.getCustomWidgetByName = function (name) {\n        for (var i = 0; i < this.widgets.length; i++) {\n            if (this.widgets[i].name == name)\n                return this.widgets[i];\n        }\n        return null;\n    };\n    CustomWidgetCollection.prototype.getCustomWidget = function (question) {\n        for (var i = 0; i < this.widgetsValues.length; i++) {\n            if (this.widgetsValues[i].isFit(question))\n                return this.widgetsValues[i];\n        }\n        return null;\n    };\n    CustomWidgetCollection.Instance = new CustomWidgetCollection();\n    return CustomWidgetCollection;\n}());\n\n\n\n/***/ }),\n\n/***/ \"./src/question_baseselect.ts\":\n/*!************************************!*\\\n  !*** ./src/question_baseselect.ts ***!\n  \\************************************/\n/*! exports provided: QuestionSelectBase, QuestionCheckboxBase */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_2614019__) {\n\n\"use strict\";\n__nested_webpack_require_2614019__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_2614019__.d(__nested_webpack_exports__, \"QuestionSelectBase\", function() { return QuestionSelectBase; });\n/* harmony export (binding) */ __nested_webpack_require_2614019__.d(__nested_webpack_exports__, \"QuestionCheckboxBase\", function() { return QuestionCheckboxBase; });\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_2614019__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _survey__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_2614019__(/*! ./survey */ \"./src/survey.ts\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_2614019__(/*! ./question */ \"./src/question.ts\");\n/* harmony import */ var _itemvalue__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_2614019__(/*! ./itemvalue */ \"./src/itemvalue.ts\");\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_2614019__(/*! ./surveyStrings */ \"./src/surveyStrings.ts\");\n/* harmony import */ var _error__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_2614019__(/*! ./error */ \"./src/error.ts\");\n/* harmony import */ var _choicesRestful__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_2614019__(/*! ./choicesRestful */ \"./src/choicesRestful.ts\");\n/* harmony import */ var _conditions__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_2614019__(/*! ./conditions */ \"./src/conditions.ts\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_2614019__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_9__ = __nested_webpack_require_2614019__(/*! ./settings */ \"./src/settings.ts\");\n/* harmony import */ var _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_10__ = __nested_webpack_require_2614019__(/*! ./utils/cssClassBuilder */ \"./src/utils/cssClassBuilder.ts\");\n/* harmony import */ var _utils_utils__WEBPACK_IMPORTED_MODULE_11__ = __nested_webpack_require_2614019__(/*! ./utils/utils */ \"./src/utils/utils.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * A base class for multiple-choice question types ([Checkboxes](https://surveyjs.io/form-library/documentation/questioncheckboxmodel), [Dropdown](https://surveyjs.io/form-library/documentation/questiondropdownmodel), [Radio Button Group](https://surveyjs.io/form-library/documentation/questionradiogroupmodel), etc.).\n */\nvar QuestionSelectBase = /** @class */ (function (_super) {\n    __extends(QuestionSelectBase, _super);\n    function QuestionSelectBase(name) {\n        var _this = _super.call(this, name) || this;\n        _this.otherItemValue = new _itemvalue__WEBPACK_IMPORTED_MODULE_3__[\"ItemValue\"](\"other\");\n        _this.noneItemValue = new _itemvalue__WEBPACK_IMPORTED_MODULE_3__[\"ItemValue\"](_settings__WEBPACK_IMPORTED_MODULE_9__[\"settings\"].noneItemValue);\n        _this.isSettingDefaultValue = false;\n        _this.isSettingComment = false;\n        _this.isRunningChoices = false;\n        _this.isFirstLoadChoicesFromUrl = true;\n        _this.isUpdatingChoicesDependedQuestions = false;\n        _this.prevIsOtherSelected = false;\n        var noneItemText = _this.createLocalizableString(\"noneText\", _this.noneItemValue, true, \"noneItemText\");\n        _this.noneItemValue.locOwner = _this;\n        _this.noneItemValue.setLocText(noneItemText);\n        _this.createItemValues(\"choices\");\n        _this.registerPropertyChangedHandlers([\"choices\"], function () {\n            if (!_this.filterItems()) {\n                _this.onVisibleChoicesChanged();\n            }\n        });\n        _this.registerPropertyChangedHandlers([\"choicesFromQuestion\", \"choicesFromQuestionMode\", \"choiceValuesFromQuestion\", \"choiceTextsFromQuestion\", \"showNoneItem\"], function () {\n            _this.onVisibleChoicesChanged();\n        });\n        _this.registerPropertyChangedHandlers([\"hideIfChoicesEmpty\"], function () {\n            _this.onVisibleChanged();\n        });\n        _this.createNewArray(\"visibleChoices\");\n        _this.setNewRestfulProperty();\n        var locOtherText = _this.createLocalizableString(\"otherText\", _this.otherItemValue, true, \"otherItemText\");\n        _this.createLocalizableString(\"otherErrorText\", _this, true, \"otherRequiredError\");\n        _this.otherItemValue.locOwner = _this;\n        _this.otherItemValue.setLocText(locOtherText);\n        _this.choicesByUrl.createItemValue = function (value) {\n            return _this.createItemValue(value);\n        };\n        _this.choicesByUrl.beforeSendRequestCallback = function () {\n            _this.onBeforeSendRequest();\n        };\n        _this.choicesByUrl.getResultCallback = function (items) {\n            _this.onLoadChoicesFromUrl(items);\n        };\n        _this.choicesByUrl.updateResultCallback = function (items, serverResult) {\n            if (_this.survey) {\n                return _this.survey.updateChoicesFromServer(_this, items, serverResult);\n            }\n            return items;\n        };\n        return _this;\n    }\n    Object.defineProperty(QuestionSelectBase.prototype, \"waitingChoicesByURL\", {\n        get: function () {\n            return !this.isChoicesLoaded && !this.choicesByUrl.isEmpty;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionSelectBase.prototype.getType = function () {\n        return \"selectbase\";\n    };\n    QuestionSelectBase.prototype.dispose = function () {\n        _super.prototype.dispose.call(this);\n        var q = this.getQuestionWithChoices();\n        if (!!q) {\n            q.removeDependedQuestion(this);\n        }\n    };\n    QuestionSelectBase.prototype.resetDependedQuestion = function () {\n        this.choicesFromQuestion = \"\";\n    };\n    Object.defineProperty(QuestionSelectBase.prototype, \"otherId\", {\n        get: function () {\n            return this.id + \"_other\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionSelectBase.prototype.getCommentElementsId = function () {\n        return [this.commentId, this.otherId];\n    };\n    QuestionSelectBase.prototype.getItemValueType = function () {\n        return \"itemvalue\";\n    };\n    QuestionSelectBase.prototype.createItemValue = function (value, text) {\n        var res = _jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].createClass(this.getItemValueType(), value);\n        res.locOwner = this;\n        if (!!text)\n            res.text = text;\n        return res;\n    };\n    Object.defineProperty(QuestionSelectBase.prototype, \"isUsingCarryForward\", {\n        get: function () {\n            return !!this.carryForwardQuestionType;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionSelectBase.prototype, \"carryForwardQuestionType\", {\n        get: function () {\n            return this.getPropertyValue(\"carryForwardQuestionType\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionSelectBase.prototype.setCarryForwardQuestionType = function (selBaseQuestion, arrayQuestion) {\n        var mode = selBaseQuestion ? \"select\" : (arrayQuestion ? \"array\" : undefined);\n        this.setPropertyValue(\"carryForwardQuestionType\", mode);\n    };\n    QuestionSelectBase.prototype.supportGoNextPageError = function () {\n        return !this.isOtherSelected || !!this.otherValue;\n    };\n    QuestionSelectBase.prototype.isLayoutTypeSupported = function (layoutType) {\n        return true;\n    };\n    QuestionSelectBase.prototype.localeChanged = function () {\n        _super.prototype.localeChanged.call(this);\n        if (this.choicesOrder !== \"none\") {\n            this.updateVisibleChoices();\n            this.onVisibleChoicesChanged();\n        }\n    };\n    QuestionSelectBase.prototype.locStrsChanged = function () {\n        _super.prototype.locStrsChanged.call(this);\n        if (!!this.choicesFromUrl) {\n            _itemvalue__WEBPACK_IMPORTED_MODULE_3__[\"ItemValue\"].locStrsChanged(this.choicesFromUrl);\n            _itemvalue__WEBPACK_IMPORTED_MODULE_3__[\"ItemValue\"].locStrsChanged(this.visibleChoices);\n        }\n    };\n    Object.defineProperty(QuestionSelectBase.prototype, \"otherValue\", {\n        get: function () {\n            if (!this.showCommentArea)\n                return this.comment;\n            return this.otherValueCore;\n        },\n        set: function (val) {\n            if (!this.showCommentArea) {\n                this.comment = val;\n            }\n            else {\n                this.setOtherValueInternally(val);\n            }\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionSelectBase.prototype, \"otherValueCore\", {\n        get: function () {\n            return this.getPropertyValue(\"otherValue\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"otherValue\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionSelectBase.prototype, \"otherItem\", {\n        /**\n         * Returns the \"Other\" choice item. Use this property to change the item's `value` or `text`.\n         * @see showOtherItem\n         */\n        get: function () {\n            return this.otherItemValue;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionSelectBase.prototype, \"isOtherSelected\", {\n        /**\n         * Returns `true` if the \"Other\" choice item is selected.\n         * @see showOtherItem\n         */\n        get: function () {\n            return this.hasOther && this.getHasOther(this.renderedValue);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionSelectBase.prototype, \"isNoneSelected\", {\n        get: function () {\n            return this.hasNone && this.getIsItemValue(this.renderedValue, this.noneItem);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionSelectBase.prototype, \"showNoneItem\", {\n        /**\n         * Specifies whether to display the \"None\" choice item.\n         *\n         * When users select the \"None\" item in multi-select questions, all other items become unselected.\n         * @see noneItem\n         * @see noneText\n         */\n        get: function () {\n            return this.getPropertyValue(\"showNoneItem\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"showNoneItem\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionSelectBase.prototype, \"hasNone\", {\n        get: function () {\n            return this.showNoneItem;\n        },\n        set: function (val) {\n            this.showNoneItem = val;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionSelectBase.prototype, \"noneItem\", {\n        /**\n         * Returns the \"None\" choice item. Use this property to change the item's `value` or `text`.\n         * @see showNoneItem\n         */\n        get: function () {\n            return this.noneItemValue;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionSelectBase.prototype, \"noneText\", {\n        /**\n         * Gets or sets a caption for the \"None\" choice item.\n         * @see showNoneItem\n         */\n        get: function () {\n            return this.getLocalizableStringText(\"noneText\");\n        },\n        set: function (val) {\n            this.setLocalizableStringText(\"noneText\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionSelectBase.prototype, \"locNoneText\", {\n        get: function () {\n            return this.getLocalizableString(\"noneText\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionSelectBase.prototype, \"choicesVisibleIf\", {\n        /**\n         * A Boolean expression that is evaluated against each choice item. If the expression evaluates to `false`, the choice item becomes hidden.\n         *\n         * A survey parses and runs all expressions on startup. If any values used in the expression change, the survey re-evaluates it.\n         *\n         * Use the `{item}` placeholder to reference the current choice item in the expression.\n         *\n         * Refer to the following help topic for more information: [Conditional Visibility](https://surveyjs.io/form-library/documentation/design-survey-conditional-logic#conditional-visibility).\n         * @see visibleIf\n         * @see choicesEnableIf\n         */\n        get: function () {\n            return this.getPropertyValue(\"choicesVisibleIf\", \"\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"choicesVisibleIf\", val);\n            this.filterItems();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionSelectBase.prototype, \"choicesEnableIf\", {\n        /**\n         * A Boolean expression that is evaluated against each choice item. If the expression evaluates to `false`, the choice item becomes read-only.\n         *\n         * A survey parses and runs all expressions on startup. If any values used in the expression change, the survey re-evaluates it.\n         *\n         * Use the `{item}` placeholder to reference the current choice item in the expression.\n         *\n         * Refer to the following help topic for more information: [Conditional Visibility](https://surveyjs.io/form-library/documentation/design-survey-conditional-logic#conditional-visibility).\n         * @see enableIf\n         * @see choicesVisibleIf\n         */\n        get: function () {\n            return this.getPropertyValue(\"choicesEnableIf\", \"\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"choicesEnableIf\", val);\n            this.filterItems();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionSelectBase.prototype.surveyChoiceItemVisibilityChange = function () {\n        this.filterItems();\n    };\n    QuestionSelectBase.prototype.runCondition = function (values, properties) {\n        _super.prototype.runCondition.call(this, values, properties);\n        if (this.isUsingCarryForward)\n            return;\n        this.runItemsEnableCondition(values, properties);\n        this.runItemsCondition(values, properties);\n    };\n    QuestionSelectBase.prototype.isTextValue = function () {\n        return true; //for comments and others\n    };\n    QuestionSelectBase.prototype.setDefaultValue = function () {\n        this.isSettingDefaultValue =\n            !this.isValueEmpty(this.defaultValue) &&\n                this.hasUnknownValue(this.defaultValue);\n        this.prevOtherValue = undefined;\n        _super.prototype.setDefaultValue.call(this);\n        this.isSettingDefaultValue = false;\n    };\n    QuestionSelectBase.prototype.getIsMultipleValue = function () {\n        return false;\n    };\n    QuestionSelectBase.prototype.convertDefaultValue = function (val) {\n        if (val == null || val == undefined)\n            return val;\n        if (this.getIsMultipleValue()) {\n            if (!Array.isArray(val))\n                return [val];\n        }\n        else {\n            if (Array.isArray(val) && val.length > 0)\n                return val[0];\n        }\n        return val;\n    };\n    QuestionSelectBase.prototype.filterItems = function () {\n        if (this.isLoadingFromJson ||\n            !this.data ||\n            this.areInvisibleElementsShowing)\n            return false;\n        var values = this.getDataFilteredValues();\n        var properties = this.getDataFilteredProperties();\n        this.runItemsEnableCondition(values, properties);\n        return this.runItemsCondition(values, properties);\n    };\n    QuestionSelectBase.prototype.runItemsCondition = function (values, properties) {\n        this.setConditionalChoicesRunner();\n        var hasChanges = this.runConditionsForItems(values, properties);\n        if (!!this.filteredChoicesValue &&\n            this.filteredChoicesValue.length === this.activeChoices.length) {\n            this.filteredChoicesValue = undefined;\n        }\n        if (hasChanges) {\n            this.onVisibleChoicesChanged();\n            this.clearIncorrectValues();\n        }\n        return hasChanges;\n    };\n    QuestionSelectBase.prototype.runItemsEnableCondition = function (values, properties) {\n        var _this = this;\n        this.setConditionalEnableChoicesRunner();\n        var hasChanged = _itemvalue__WEBPACK_IMPORTED_MODULE_3__[\"ItemValue\"].runEnabledConditionsForItems(this.activeChoices, this.conditionChoicesEnableIfRunner, values, properties, function (item, val) {\n            return val && _this.onEnableItemCallBack(item);\n        });\n        if (hasChanged) {\n            this.clearDisabledValues();\n        }\n        this.onAfterRunItemsEnableCondition();\n    };\n    QuestionSelectBase.prototype.onAfterRunItemsEnableCondition = function () { };\n    QuestionSelectBase.prototype.onEnableItemCallBack = function (item) {\n        return true;\n    };\n    QuestionSelectBase.prototype.onSelectedItemValuesChangedHandler = function (newValue) {\n        var _a;\n        (_a = this.survey) === null || _a === void 0 ? void 0 : _a.loadedChoicesFromServer(this);\n    };\n    QuestionSelectBase.prototype.getItemIfChoicesNotContainThisValue = function (value, text) {\n        if (this.waitingChoicesByURL) {\n            return this.createItemValue(value, text);\n        }\n        else {\n            return null;\n        }\n    };\n    QuestionSelectBase.prototype.getSingleSelectedItem = function () {\n        var selectedItemValues = this.selectedItemValues;\n        if (this.isEmpty())\n            return null;\n        var itemValue = _itemvalue__WEBPACK_IMPORTED_MODULE_3__[\"ItemValue\"].getItemByValue(this.visibleChoices, this.value);\n        this.onGetSingleSelectedItem(itemValue);\n        if (!itemValue && (!selectedItemValues || this.value != selectedItemValues.id)) {\n            this.updateSelectedItemValues();\n        }\n        return itemValue || selectedItemValues || (this.isOtherSelected ? this.otherItem : this.getItemIfChoicesNotContainThisValue(this.value));\n    };\n    QuestionSelectBase.prototype.onGetSingleSelectedItem = function (selectedItemByValue) { };\n    QuestionSelectBase.prototype.getMultipleSelectedItems = function () {\n        return [];\n    };\n    QuestionSelectBase.prototype.setConditionalChoicesRunner = function () {\n        if (this.choicesVisibleIf) {\n            if (!this.conditionChoicesVisibleIfRunner) {\n                this.conditionChoicesVisibleIfRunner = new _conditions__WEBPACK_IMPORTED_MODULE_7__[\"ConditionRunner\"](this.choicesVisibleIf);\n            }\n            this.conditionChoicesVisibleIfRunner.expression = this.choicesVisibleIf;\n        }\n        else {\n            this.conditionChoicesVisibleIfRunner = null;\n        }\n    };\n    QuestionSelectBase.prototype.setConditionalEnableChoicesRunner = function () {\n        if (this.choicesEnableIf) {\n            if (!this.conditionChoicesEnableIfRunner) {\n                this.conditionChoicesEnableIfRunner = new _conditions__WEBPACK_IMPORTED_MODULE_7__[\"ConditionRunner\"](this.choicesEnableIf);\n            }\n            this.conditionChoicesEnableIfRunner.expression = this.choicesEnableIf;\n        }\n        else {\n            this.conditionChoicesEnableIfRunner = null;\n        }\n    };\n    QuestionSelectBase.prototype.canSurveyChangeItemVisibility = function () {\n        return !!this.survey && this.survey.canChangeChoiceItemsVisibility();\n    };\n    QuestionSelectBase.prototype.changeItemVisisbility = function () {\n        var _this = this;\n        return this.canSurveyChangeItemVisibility() ?\n            function (item, val) { return _this.survey.getChoiceItemVisibility(_this, item, val); }\n            : null;\n    };\n    QuestionSelectBase.prototype.runConditionsForItems = function (values, properties) {\n        this.filteredChoicesValue = [];\n        var calcVisibility = this.changeItemVisisbility();\n        return _itemvalue__WEBPACK_IMPORTED_MODULE_3__[\"ItemValue\"].runConditionsForItems(this.activeChoices, this.getFilteredChoices(), this.areInvisibleElementsShowing\n            ? null\n            : this.conditionChoicesVisibleIfRunner, values, properties, !this.survey || !this.survey.areInvisibleElementsShowing, function (item, val) {\n            return !!calcVisibility ? calcVisibility(item, val) : val;\n        });\n    };\n    QuestionSelectBase.prototype.getHasOther = function (val) {\n        return this.getIsItemValue(val, this.otherItem);\n    };\n    QuestionSelectBase.prototype.getIsItemValue = function (val, item) {\n        return val === item.value;\n    };\n    Object.defineProperty(QuestionSelectBase.prototype, \"validatedValue\", {\n        get: function () {\n            return this.rendredValueToDataCore(this.value);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionSelectBase.prototype.createRestful = function () {\n        return new _choicesRestful__WEBPACK_IMPORTED_MODULE_6__[\"ChoicesRestful\"]();\n    };\n    QuestionSelectBase.prototype.setNewRestfulProperty = function () {\n        this.setPropertyValue(\"choicesByUrl\", this.createRestful());\n        this.choicesByUrl.owner = this;\n        this.choicesByUrl.loadingOwner = this;\n    };\n    Object.defineProperty(QuestionSelectBase.prototype, \"autoOtherMode\", {\n        get: function () {\n            return this.getPropertyValue(\"autoOtherMode\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"autoOtherMode\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionSelectBase.prototype.getQuestionComment = function () {\n        if (this.showCommentArea)\n            return _super.prototype.getQuestionComment.call(this);\n        if (!!this.otherValueCore)\n            return this.otherValueCore;\n        if (this.hasComment || this.getStoreOthersAsComment())\n            return _super.prototype.getQuestionComment.call(this);\n        return this.otherValueCore;\n    };\n    QuestionSelectBase.prototype.selectOtherValueFromComment = function (val) {\n        this.value = val ? this.otherItem.value : undefined;\n    };\n    QuestionSelectBase.prototype.setQuestionComment = function (newValue) {\n        if (this.showCommentArea) {\n            _super.prototype.setQuestionComment.call(this, newValue);\n            return;\n        }\n        this.onUpdateCommentOnAutoOtherMode(newValue);\n        if (this.getStoreOthersAsComment())\n            _super.prototype.setQuestionComment.call(this, newValue);\n        else {\n            this.setOtherValueInternally(newValue);\n        }\n        this.updateChoicesDependedQuestions();\n    };\n    QuestionSelectBase.prototype.onUpdateCommentOnAutoOtherMode = function (newValue) {\n        if (!this.autoOtherMode)\n            return;\n        this.prevOtherValue = undefined;\n        var isSelected = this.isOtherSelected;\n        if (!isSelected && !!newValue || isSelected && !newValue) {\n            this.selectOtherValueFromComment(!!newValue);\n        }\n    };\n    QuestionSelectBase.prototype.setOtherValueInternally = function (newValue) {\n        if (!this.isSettingComment && newValue != this.otherValueCore) {\n            this.isSettingComment = true;\n            this.otherValueCore = newValue;\n            if (this.isOtherSelected && !this.isRenderedValueSetting) {\n                this.value = this.rendredValueToData(this.renderedValue);\n            }\n            this.isSettingComment = false;\n        }\n    };\n    QuestionSelectBase.prototype.clearValue = function () {\n        _super.prototype.clearValue.call(this);\n        this.prevOtherValue = undefined;\n    };\n    QuestionSelectBase.prototype.updateCommentFromSurvey = function (newValue) {\n        _super.prototype.updateCommentFromSurvey.call(this, newValue);\n        this.prevOtherValue = undefined;\n    };\n    Object.defineProperty(QuestionSelectBase.prototype, \"renderedValue\", {\n        get: function () {\n            return this.getPropertyValue(\"renderedValue\", null);\n        },\n        set: function (val) {\n            this.setPropertyValue(\"renderedValue\", val);\n            var val = this.rendredValueToData(val);\n            if (!this.isTwoValueEquals(val, this.value)) {\n                this.value = val;\n            }\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionSelectBase.prototype.setQuestionValue = function (newValue, updateIsAnswered, updateComment) {\n        if (updateIsAnswered === void 0) { updateIsAnswered = true; }\n        if (updateComment === void 0) { updateComment = true; }\n        if (this.isLoadingFromJson ||\n            this.isTwoValueEquals(this.value, newValue))\n            return;\n        _super.prototype.setQuestionValue.call(this, newValue, updateIsAnswered);\n        this.setPropertyValue(\"renderedValue\", this.rendredValueFromData(newValue));\n        this.updateChoicesDependedQuestions();\n        if (this.hasComment || !updateComment)\n            return;\n        var isOtherSel = this.isOtherSelected;\n        if (isOtherSel && !!this.prevOtherValue) {\n            var oldOtherValue = this.prevOtherValue;\n            this.prevOtherValue = undefined;\n            this.otherValue = oldOtherValue;\n        }\n        if (!isOtherSel && !!this.otherValue) {\n            if (this.getStoreOthersAsComment() && !this.autoOtherMode) {\n                this.prevOtherValue = this.otherValue;\n            }\n            this.otherValue = \"\";\n        }\n    };\n    QuestionSelectBase.prototype.setNewValue = function (newValue) {\n        newValue = this.valueFromData(newValue);\n        if ((!this.choicesByUrl.isRunning &&\n            !this.choicesByUrl.isWaitingForParameters) ||\n            !this.isValueEmpty(newValue)) {\n            this.cachedValueForUrlRequests = newValue;\n        }\n        _super.prototype.setNewValue.call(this, newValue);\n    };\n    QuestionSelectBase.prototype.valueFromData = function (val) {\n        var choiceitem = _itemvalue__WEBPACK_IMPORTED_MODULE_3__[\"ItemValue\"].getItemByValue(this.activeChoices, val);\n        if (!!choiceitem) {\n            return choiceitem.value;\n        }\n        return _super.prototype.valueFromData.call(this, val);\n    };\n    QuestionSelectBase.prototype.rendredValueFromData = function (val) {\n        if (this.getStoreOthersAsComment())\n            return val;\n        return this.renderedValueFromDataCore(val);\n    };\n    QuestionSelectBase.prototype.rendredValueToData = function (val) {\n        if (this.getStoreOthersAsComment())\n            return val;\n        return this.rendredValueToDataCore(val);\n    };\n    QuestionSelectBase.prototype.renderedValueFromDataCore = function (val) {\n        if (!this.hasUnknownValue(val, true, false))\n            return this.valueFromData(val);\n        this.otherValue = val;\n        return this.otherItem.value;\n    };\n    QuestionSelectBase.prototype.rendredValueToDataCore = function (val) {\n        if (val == this.otherItem.value && this.needConvertRenderedOtherToDataValue()) {\n            val = this.otherValue;\n        }\n        return val;\n    };\n    QuestionSelectBase.prototype.needConvertRenderedOtherToDataValue = function () {\n        var val = this.otherValue;\n        if (!val)\n            return false;\n        val = val.trim();\n        if (!val)\n            return false;\n        return this.hasUnknownValue(val, true, false);\n    };\n    QuestionSelectBase.prototype.getIsQuestionReady = function () {\n        return _super.prototype.getIsQuestionReady.call(this) && !this.waitingChoicesByURL && !this.waitingGetChoiceDisplayValueResponse;\n    };\n    QuestionSelectBase.prototype.updateSelectedItemValues = function () {\n        var _this = this;\n        if (this.waitingGetChoiceDisplayValueResponse || !this.survey || this.isEmpty())\n            return;\n        var value = this.value;\n        var valueArray = Array.isArray(value) ? value : [value];\n        var hasItemWithoutValues = valueArray.some(function (val) { return !_itemvalue__WEBPACK_IMPORTED_MODULE_3__[\"ItemValue\"].getItemByValue(_this.choices, val); });\n        if (hasItemWithoutValues && (this.choicesLazyLoadEnabled || !this.choicesByUrl.isEmpty)) {\n            this.waitingGetChoiceDisplayValueResponse = true;\n            this.updateIsReady();\n            this.survey.getChoiceDisplayValue({\n                question: this,\n                values: valueArray,\n                setItems: function (displayValues) {\n                    var customValues = [];\n                    for (var _i = 1; _i < arguments.length; _i++) {\n                        customValues[_i - 1] = arguments[_i];\n                    }\n                    _this.waitingGetChoiceDisplayValueResponse = false;\n                    if (!displayValues || !displayValues.length)\n                        return;\n                    var items = displayValues.map(function (displayValue, index) { return _this.createItemValue(valueArray[index], displayValue); });\n                    _this.setCustomValuesIntoItems(items, customValues);\n                    if (Array.isArray(value)) {\n                        _this.selectedItemValues = items;\n                    }\n                    else {\n                        _this.selectedItemValues = items[0];\n                    }\n                    _this.updateIsReady();\n                }\n            });\n        }\n    };\n    QuestionSelectBase.prototype.setCustomValuesIntoItems = function (items, customValues) {\n        if (!Array.isArray(customValues) || customValues.length === 0)\n            return;\n        customValues.forEach(function (customValue) {\n            var vals = customValue.values;\n            var propName = customValue.propertyName;\n            if (Array.isArray(vals)) {\n                for (var i = 0; i < items.length && i < vals.length; i++) {\n                    items[i][propName] = vals[i];\n                }\n            }\n        });\n    };\n    QuestionSelectBase.prototype.hasUnknownValue = function (val, includeOther, isFilteredChoices, checkEmptyValue) {\n        if (includeOther === void 0) { includeOther = false; }\n        if (isFilteredChoices === void 0) { isFilteredChoices = true; }\n        if (checkEmptyValue === void 0) { checkEmptyValue = false; }\n        if (!checkEmptyValue && this.isValueEmpty(val))\n            return false;\n        if (includeOther && val == this.otherItem.value)\n            return false;\n        if (this.hasNone && val == this.noneItem.value)\n            return false;\n        var choices = isFilteredChoices\n            ? this.getFilteredChoices()\n            : this.activeChoices;\n        return _itemvalue__WEBPACK_IMPORTED_MODULE_3__[\"ItemValue\"].getItemByValue(choices, val) == null;\n    };\n    QuestionSelectBase.prototype.isValueDisabled = function (val) {\n        var itemValue = _itemvalue__WEBPACK_IMPORTED_MODULE_3__[\"ItemValue\"].getItemByValue(this.getFilteredChoices(), val);\n        return !!itemValue && !itemValue.isEnabled;\n    };\n    Object.defineProperty(QuestionSelectBase.prototype, \"choicesByUrl\", {\n        /**\n         * Configures access to a RESTful service that returns choice items. Refer to the [ChoicesRestful](https://surveyjs.io/form-library/documentation/choicesrestful) class description for more information.\n         *\n         * [View Demo](https://surveyjs.io/form-library/examples/questiontype-dropdownrestfull/ (linkStyle))\n         * @see choices\n         */\n        get: function () {\n            return this.getPropertyValue(\"choicesByUrl\");\n        },\n        set: function (val) {\n            if (!val)\n                return;\n            this.setNewRestfulProperty();\n            this.choicesByUrl.fromJSON(val.toJSON());\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionSelectBase.prototype, \"choices\", {\n        /**\n         * Gets or sets choice items. This property accepts an array of objects with the following structure:\n         *\n         * ```js\n         * {\n         *   \"value\": any, // A unique value to be saved in the survey results.\n         *   \"text\": String, // A display text. This property supports Markdown. When `text` is undefined, `value` is used.\n         *   \"imageLink\": String // A link to the image or video that represents this choice value. Applies only to Image Picker questions.\n         *   \"customProperty\": any // Any property that you find useful.\n         * }\n         * ```\n         *\n         * To enable Markdown support for the `text` property, implement Markdown-to-HTML conversion in the [onTextMarkdown](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#onTextMarkdown) event handler. For an example, refer to the following demo: [Convert Markdown to HTML with Showdown](https://surveyjs.io/form-library/examples/edit-survey-questions-markdown/).\n         *\n         * If you add custom properties, refer to the following help topic to learn how to serialize them into JSON: [Add Custom Properties to Property Grid](https://surveyjs.io/survey-creator/documentation/property-grid#add-custom-properties-to-the-property-grid).\n         *\n         * If you need to specify only the `value` property, you can set the `choices` property to an array of primitive values, for example, `[ \"item1\", \"item2\", \"item3\" ]`. These values are both saved in survey results and used as display text.\n         * @see choicesByUrl\n         * @see choicesFromQuestion\n         */\n        get: function () {\n            return this.getPropertyValue(\"choices\");\n        },\n        set: function (newValue) {\n            this.setPropertyValue(\"choices\", newValue);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionSelectBase.prototype, \"choicesFromQuestion\", {\n        /**\n         * Copies choice items from a specified question. Accepts a question name.\n         *\n         * If you specify this property, the `choices`, `choicesVisibleIf`, `choicesEnableIf`, and `choicesOrder` properties do not apply because their values are copied.\n         *\n         * In addition, you can specify the `choicesFromQuestionMode` property if you do not want to copy all choice items.\n         * @see choicesFromQuestionMode\n         * @see choices\n         */\n        get: function () {\n            return this.getPropertyValue(\"choicesFromQuestion\");\n        },\n        set: function (val) {\n            var question = this.getQuestionWithChoices();\n            this.isLockVisibleChoices = !!question && question.name === val;\n            if (!!question && question.name !== val) {\n                question.removeDependedQuestion(this);\n            }\n            this.setPropertyValue(\"choicesFromQuestion\", val);\n            this.isLockVisibleChoices = false;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionSelectBase.prototype, \"choicesFromQuestionMode\", {\n        /**\n         * Specifies which choice items to copy from another question. Applies only when the `choicesFromQuestion` property is specified.\n         *\n         * Possible values:\n         *\n         * - `\"all\"` (default) - Copies all choice items.\n         * - `\"selected\"` - Copies only selected choice items.\n         * - `\"unselected\"` - Copies only unselected choice items.\n         *\n         * Use the `visibleChoices` property to access copied choice items.\n         * @see choicesFromQuestion\n         * @see visibleChoices\n         */\n        get: function () {\n            return this.getPropertyValue(\"choicesFromQuestionMode\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"choicesFromQuestionMode\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionSelectBase.prototype, \"choiceValuesFromQuestion\", {\n        /**\n         * Specifies which matrix column or dynamic panel question supplies choice values. Use this property to construct choice items based on cell values in Dynamic Matrix and question values in Dynamic Panel.\n         *\n         * Each choice item consists of a value saved in survey results and a text displayed in the UI. To construct a choice item, assign the `name` of a Dynamic Matrix or Dynamic Panel to the [`choicesFromQuestion`](#choicesFromQuestion) property and specify which dynamic panel question or matrix column supplies values and which provides texts. Use the `choiceValuesFromQuestion` and [`choiceTextsFromQuestion`](#choiceTextsFromQuestion) properties for this purpose. If a choice text is empty, a choice value is used as a display text and saved in survey results.\n         */\n        get: function () {\n            return this.getPropertyValue(\"choiceValuesFromQuestion\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"choiceValuesFromQuestion\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionSelectBase.prototype, \"choiceTextsFromQuestion\", {\n        /**\n         * Specifies which matrix column or dynamic panel question supplies choice texts. Use this property to construct choice items based on cell values in Dynamic Matrix and question values in Dynamic Panel.\n         *\n         * Each choice item consists of a value saved in survey results and a text displayed in the UI. To construct a choice item, assign the `name` of a Dynamic Matrix or Dynamic Panel to the [`choicesFromQuestion`](#choicesFromQuestion) property and specify which dynamic panel question or matrix column supplies values and which provides texts. Use the [`choiceValuesFromQuestion`](#choiceValuesFromQuestion) and `choiceTextsFromQuestion` properties for this purpose. If a choice text is empty, a choice value is used as a display text and saved in survey results.\n         */\n        get: function () {\n            return this.getPropertyValue(\"choiceTextsFromQuestion\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"choiceTextsFromQuestion\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionSelectBase.prototype, \"hideIfChoicesEmpty\", {\n        /**\n         * Specifies whether to hide the question if no choice items are visible.\n         *\n         * This property is useful if you show or hide choice items at runtime based on a [condition](https://surveyjs.io/form-library/documentation/questionselectbase#choicesVisibleIf).\n         */\n        get: function () {\n            return this.getPropertyValue(\"hideIfChoicesEmpty\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"hideIfChoicesEmpty\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionSelectBase.prototype, \"keepIncorrectValues\", {\n        /**\n         * Specifies whether to keep values that cannot be assigned to this question, for example, choices unlisted in the `choices` array.\n         *\n         * > This property cannot be specified in the survey JSON schema. Use dot notation to specify it.\n         * @see clearIncorrectValues\n         */\n        get: function () {\n            return this.getPropertyValue(\"keepIncorrectValues\", false);\n        },\n        set: function (val) {\n            this.setPropertyValue(\"keepIncorrectValues\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionSelectBase.prototype, \"storeOthersAsComment\", {\n        get: function () {\n            return this.getPropertyValue(\"storeOthersAsComment\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"storeOthersAsComment\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionSelectBase.prototype.hasOtherChanged = function () {\n        this.onVisibleChoicesChanged();\n    };\n    Object.defineProperty(QuestionSelectBase.prototype, \"choicesOrder\", {\n        /**\n         * Specifies the sort order of choice items.\n         *\n         * Possible values:\n         *\n         * - `\"none\"` (default) - Preserves the original order of choice items.\n         * - `\"asc\"`- Sorts choice items in ascending order.\n         * - `\"desc\"`- Sorts choice items in ascending order.\n         * - `\"random\"` - Displays choice items in random order.\n         */\n        get: function () {\n            return this.getPropertyValue(\"choicesOrder\");\n        },\n        set: function (val) {\n            val = val.toLowerCase();\n            if (val == this.choicesOrder)\n                return;\n            this.setPropertyValue(\"choicesOrder\", val);\n            this.onVisibleChoicesChanged();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionSelectBase.prototype, \"otherText\", {\n        /**\n         * Gets or sets a caption for the \"Other\" choice item.\n         * @see showOtherItem\n         */\n        get: function () {\n            return this.getLocalizableStringText(\"otherText\");\n        },\n        set: function (val) {\n            this.setLocalizableStringText(\"otherText\", val);\n            this.onVisibleChoicesChanged();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionSelectBase.prototype, \"locOtherText\", {\n        get: function () {\n            return this.getLocalizableString(\"otherText\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionSelectBase.prototype, \"otherPlaceHolder\", {\n        get: function () {\n            return this.otherPlaceholder;\n        },\n        set: function (newValue) {\n            this.otherPlaceholder = newValue;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionSelectBase.prototype, \"otherErrorText\", {\n        /**\n         * Get or sets an error message displayed when users select the \"Other\" choice item but leave the comment area empty.\n         * @see showOtherItem\n         */\n        get: function () {\n            return this.getLocalizableStringText(\"otherErrorText\");\n        },\n        set: function (val) {\n            this.setLocalizableStringText(\"otherErrorText\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionSelectBase.prototype, \"locOtherErrorText\", {\n        get: function () {\n            return this.getLocalizableString(\"otherErrorText\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionSelectBase.prototype, \"visibleChoices\", {\n        /**\n         * An array of visible choice items. Includes the \"Select All\", \"Other\", and \"None\" choice items if they are visible. Items are sorted according to the `choicesOrder` value.\n         * @see showNoneItem\n         * @see showOtherItem\n         * @see choicesOrder\n         * @see choices\n         * @see enabledChoices\n         */\n        get: function () {\n            return this.getPropertyValue(\"visibleChoices\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionSelectBase.prototype, \"enabledChoices\", {\n        /**\n         * An array of choice items with which users can interact. Includes the \"Select All\", \"Other\", and \"None\" choice items if they are not disabled. Items are sorted according to the `choicesOrder` value.\n         * @see showNoneItem\n         * @see showOtherItem\n         * @see choicesOrder\n         * @see choices\n         * @see visibleChoices\n         */\n        get: function () {\n            var res = [];\n            var items = this.visibleChoices;\n            for (var i = 0; i < items.length; i++) {\n                if (items[i].isEnabled)\n                    res.push(items[i]);\n            }\n            return res;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionSelectBase.prototype.updateVisibleChoices = function () {\n        if (this.isLoadingFromJson)\n            return;\n        var newValue = new Array();\n        var calcValue = this.calcVisibleChoices();\n        if (!calcValue)\n            calcValue = [];\n        for (var i = 0; i < calcValue.length; i++) {\n            newValue.push(calcValue[i]);\n        }\n        this.setPropertyValue(\"visibleChoices\", newValue);\n    };\n    QuestionSelectBase.prototype.calcVisibleChoices = function () {\n        if (this.canUseFilteredChoices())\n            return this.getFilteredChoices();\n        var res = this.sortVisibleChoices(this.getFilteredChoices().slice());\n        this.addToVisibleChoices(res, this.isAddDefaultItems);\n        return res;\n    };\n    QuestionSelectBase.prototype.canUseFilteredChoices = function () {\n        return (!this.isAddDefaultItems &&\n            !this.hasNone &&\n            !this.hasOther &&\n            this.choicesOrder == \"none\");\n    };\n    QuestionSelectBase.prototype.setCanShowOptionItemCallback = function (func) {\n        this.canShowOptionItemCallback = func;\n        if (!!func) {\n            this.onVisibleChoicesChanged();\n        }\n    };\n    Object.defineProperty(QuestionSelectBase.prototype, \"newItem\", {\n        get: function () { return this.newItemValue; },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionSelectBase.prototype.addToVisibleChoices = function (items, isAddAll) {\n        if (isAddAll) {\n            if (!this.newItemValue) {\n                this.newItemValue = this.createItemValue(\"newitem\"); //TODO\n                this.newItemValue.isGhost = true;\n            }\n            if (!this.isUsingCarryForward && this.canShowOptionItem(this.newItemValue, isAddAll, false)) {\n                items.push(this.newItemValue);\n            }\n        }\n        if (this.supportNone() && this.canShowOptionItem(this.noneItem, isAddAll, this.hasNone)) {\n            items.push(this.noneItem);\n        }\n        if (this.supportOther() && this.canShowOptionItem(this.otherItem, isAddAll, this.hasOther)) {\n            items.push(this.otherItem);\n        }\n    };\n    QuestionSelectBase.prototype.canShowOptionItem = function (item, isAddAll, hasItem) {\n        var res = (isAddAll && (!!this.canShowOptionItemCallback ? this.canShowOptionItemCallback(item) : true)) || hasItem;\n        if (this.canSurveyChangeItemVisibility()) {\n            var calc = this.changeItemVisisbility();\n            return calc(item, res);\n        }\n        return res;\n    };\n    QuestionSelectBase.prototype.isItemInList = function (item) {\n        if (item === this.otherItem)\n            return this.hasOther;\n        if (item === this.noneItem)\n            return this.hasNone;\n        if (item === this.newItemValue)\n            return false;\n        return true;\n    };\n    Object.defineProperty(QuestionSelectBase.prototype, \"isAddDefaultItems\", {\n        get: function () {\n            return _settings__WEBPACK_IMPORTED_MODULE_9__[\"settings\"].supportCreatorV2 && _settings__WEBPACK_IMPORTED_MODULE_9__[\"settings\"].showDefaultItemsInCreatorV2 &&\n                this.isDesignMode && !this.customWidget && !this.isContentElement;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionSelectBase.prototype.getPlainData = function (options) {\n        var _this = this;\n        if (options === void 0) { options = {\n            includeEmpty: true,\n            includeQuestionTypes: false,\n        }; }\n        var questionPlainData = _super.prototype.getPlainData.call(this, options);\n        if (!!questionPlainData) {\n            var values = Array.isArray(this.value) ? this.value : [this.value];\n            questionPlainData.isNode = true;\n            questionPlainData.data = (questionPlainData.data || []).concat(values.map(function (dataValue, index) {\n                var choice = _itemvalue__WEBPACK_IMPORTED_MODULE_3__[\"ItemValue\"].getItemByValue(_this.visibleChoices, dataValue);\n                var choiceDataItem = {\n                    name: index,\n                    title: \"Choice\",\n                    value: dataValue,\n                    displayValue: _this.getChoicesDisplayValue(_this.visibleChoices, dataValue),\n                    getString: function (val) {\n                        return typeof val === \"object\" ? JSON.stringify(val) : val;\n                    },\n                    isNode: false,\n                };\n                if (!!choice) {\n                    (options.calculations || []).forEach(function (calculation) {\n                        choiceDataItem[calculation.propertyName] =\n                            choice[calculation.propertyName];\n                    });\n                }\n                if (_this.isOtherSelected && _this.otherItemValue === choice) {\n                    choiceDataItem.isOther = true;\n                    choiceDataItem.displayValue = _this.otherValue;\n                }\n                return choiceDataItem;\n            }));\n        }\n        return questionPlainData;\n    };\n    QuestionSelectBase.prototype.getDisplayValueCore = function (keysAsText, value) {\n        return this.getChoicesDisplayValue(this.visibleChoices, value);\n    };\n    QuestionSelectBase.prototype.getDisplayValueEmpty = function () {\n        return _itemvalue__WEBPACK_IMPORTED_MODULE_3__[\"ItemValue\"].getTextOrHtmlByValue(this.visibleChoices, undefined);\n    };\n    QuestionSelectBase.prototype.getChoicesDisplayValue = function (items, val) {\n        if (val == this.otherItemValue.value)\n            return this.otherValue ? this.otherValue : this.locOtherText.textOrHtml;\n        var selItem = this.getSingleSelectedItem();\n        if (!!selItem && this.isTwoValueEquals(selItem.value, val))\n            return selItem.locText.textOrHtml;\n        var str = _itemvalue__WEBPACK_IMPORTED_MODULE_3__[\"ItemValue\"].getTextOrHtmlByValue(items, val);\n        return str == \"\" && val ? val : str;\n    };\n    QuestionSelectBase.prototype.getDisplayArrayValue = function (keysAsText, value, onGetValueCallback) {\n        var _this = this;\n        var items = this.visibleChoices;\n        var strs = [];\n        var vals = [];\n        for (var i = 0; i < value.length; i++) {\n            vals.push(!onGetValueCallback ? value[i] : onGetValueCallback(i));\n        }\n        if (_helpers__WEBPACK_IMPORTED_MODULE_8__[\"Helpers\"].isTwoValueEquals(this.value, vals)) {\n            this.getMultipleSelectedItems().forEach(function (item) { return strs.push(_this.getItemDisplayValue(item)); });\n        }\n        if (strs.length === 0) {\n            for (var i = 0; i < vals.length; i++) {\n                var valStr = this.getChoicesDisplayValue(items, vals[i]);\n                if (valStr) {\n                    strs.push(valStr);\n                }\n            }\n        }\n        return strs.join(\", \");\n    };\n    QuestionSelectBase.prototype.getItemDisplayValue = function (item) {\n        if (item === this.otherItem && this.comment)\n            return this.comment;\n        return item.locText.textOrHtml;\n    };\n    QuestionSelectBase.prototype.getFilteredChoices = function () {\n        return this.filteredChoicesValue\n            ? this.filteredChoicesValue\n            : this.activeChoices;\n    };\n    Object.defineProperty(QuestionSelectBase.prototype, \"activeChoices\", {\n        get: function () {\n            var question = this.getCarryForwardQuestion();\n            if (this.carryForwardQuestionType === \"select\") {\n                question.addDependedQuestion(this);\n                return this.getChoicesFromSelectQuestion(question);\n            }\n            if (this.carryForwardQuestionType === \"array\") {\n                question.addDependedQuestion(this);\n                return this.getChoicesFromArrayQuestion(question);\n            }\n            return this.choicesFromUrl ? this.choicesFromUrl : this.getChoices();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionSelectBase.prototype.getCarryForwardQuestion = function (data) {\n        var question = this.findCarryForwardQuestion(data);\n        var selBaseQuestion = this.getQuestionWithChoicesCore(question);\n        var arrayQuestion = !selBaseQuestion ? this.getQuestionWithArrayValue(question) : null;\n        this.setCarryForwardQuestionType(!!selBaseQuestion, !!arrayQuestion);\n        return !!selBaseQuestion || !!arrayQuestion ? question : null;\n    };\n    QuestionSelectBase.prototype.getIsReadyDependsOn = function () {\n        var res = _super.prototype.getIsReadyDependsOn.call(this);\n        if (this.carryForwardQuestion) {\n            res.push(this.carryForwardQuestion);\n        }\n        return res;\n    };\n    QuestionSelectBase.prototype.getQuestionWithChoices = function () {\n        return this.getQuestionWithChoicesCore(this.findCarryForwardQuestion());\n    };\n    QuestionSelectBase.prototype.findCarryForwardQuestion = function (data) {\n        if (!data)\n            data = this.data;\n        this.carryForwardQuestion = null;\n        if (this.choicesFromQuestion && data) {\n            this.carryForwardQuestion = data.findQuestionByName(this.choicesFromQuestion);\n        }\n        return this.carryForwardQuestion;\n    };\n    QuestionSelectBase.prototype.getQuestionWithChoicesCore = function (question) {\n        if (!!question && !!question.visibleChoices && (_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].isDescendantOf(question.getType(), \"selectbase\")) && question !== this)\n            return question;\n        return null;\n    };\n    QuestionSelectBase.prototype.getQuestionWithArrayValue = function (question) {\n        return !!question && question.isValueArray ? question : null;\n    };\n    QuestionSelectBase.prototype.getChoicesFromArrayQuestion = function (question) {\n        if (this.isDesignMode)\n            return [];\n        var val = question.value;\n        if (!Array.isArray(val))\n            return [];\n        var res = [];\n        for (var i = 0; i < val.length; i++) {\n            var obj = val[i];\n            if (!_helpers__WEBPACK_IMPORTED_MODULE_8__[\"Helpers\"].isValueObject(obj))\n                continue;\n            var key = this.getValueKeyName(obj);\n            if (!!key && !this.isValueEmpty(obj[key])) {\n                var text = !!this.choiceTextsFromQuestion ? obj[this.choiceTextsFromQuestion] : undefined;\n                res.push(this.createItemValue(obj[key], text));\n            }\n        }\n        return res;\n    };\n    QuestionSelectBase.prototype.getValueKeyName = function (obj) {\n        if (this.choiceValuesFromQuestion)\n            return this.choiceValuesFromQuestion;\n        var keys = Object.keys(obj);\n        return keys.length > 0 ? keys[0] : undefined;\n    };\n    QuestionSelectBase.prototype.getChoicesFromSelectQuestion = function (question) {\n        if (this.isDesignMode)\n            return [];\n        var res = [];\n        var isSelected = this.choicesFromQuestionMode == \"selected\"\n            ? true\n            : this.choicesFromQuestionMode == \"unselected\"\n                ? false\n                : undefined;\n        var choices = question.visibleChoices;\n        for (var i = 0; i < choices.length; i++) {\n            if (this.isBuiltInChoice(choices[i], question))\n                continue;\n            if (isSelected === undefined) {\n                res.push(this.copyChoiceItem(choices[i]));\n                continue;\n            }\n            var itemsSelected = question.isItemSelected(choices[i]);\n            if ((itemsSelected && isSelected) || (!itemsSelected && !isSelected)) {\n                res.push(this.copyChoiceItem(choices[i]));\n            }\n        }\n        if (this.choicesFromQuestionMode === \"selected\" && !this.showOtherItem && question.isOtherSelected && !!question.comment) {\n            res.push(this.createItemValue(question.otherItem.value, question.comment));\n        }\n        return res;\n    };\n    QuestionSelectBase.prototype.copyChoiceItem = function (item) {\n        var res = this.createItemValue(item.value);\n        res.setData(item);\n        return res;\n    };\n    Object.defineProperty(QuestionSelectBase.prototype, \"hasActiveChoices\", {\n        get: function () {\n            var choices = this.visibleChoices;\n            if (!choices || choices.length == 0) {\n                this.onVisibleChoicesChanged();\n                choices = this.visibleChoices;\n            }\n            for (var i = 0; i < choices.length; i++) {\n                if (!this.isBuiltInChoice(choices[i], this))\n                    return true;\n            }\n            return false;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionSelectBase.prototype.isHeadChoice = function (item, question) {\n        return false;\n    };\n    QuestionSelectBase.prototype.isFootChoice = function (item, question) {\n        return (item === question.noneItem ||\n            item === question.otherItem ||\n            item === question.newItemValue);\n    };\n    QuestionSelectBase.prototype.isBuiltInChoice = function (item, question) {\n        return this.isHeadChoice(item, question) || this.isFootChoice(item, question);\n    };\n    QuestionSelectBase.prototype.getChoices = function () {\n        return this.choices;\n    };\n    QuestionSelectBase.prototype.supportOther = function () {\n        return this.isSupportProperty(\"showOtherItem\");\n    };\n    QuestionSelectBase.prototype.supportNone = function () {\n        return this.isSupportProperty(\"showNoneItem\");\n    };\n    QuestionSelectBase.prototype.isSupportProperty = function (propName) {\n        return (!this.isDesignMode ||\n            this.getPropertyByName(propName).visible);\n    };\n    QuestionSelectBase.prototype.onCheckForErrors = function (errors, isOnValueChanged) {\n        var _this = this;\n        _super.prototype.onCheckForErrors.call(this, errors, isOnValueChanged);\n        if (!this.hasOther || !this.isOtherSelected || this.otherValue)\n            return;\n        var otherEmptyError = new _error__WEBPACK_IMPORTED_MODULE_5__[\"OtherEmptyError\"](this.otherErrorText, this);\n        otherEmptyError.onUpdateErrorTextCallback = function (err) { err.text = _this.otherErrorText; };\n        errors.push(otherEmptyError);\n    };\n    QuestionSelectBase.prototype.setSurveyImpl = function (value, isLight) {\n        this.isRunningChoices = true;\n        _super.prototype.setSurveyImpl.call(this, value, isLight);\n        this.isRunningChoices = false;\n        this.runChoicesByUrl();\n        if (this.isAddDefaultItems) {\n            this.updateVisibleChoices();\n        }\n    };\n    QuestionSelectBase.prototype.setSurveyCore = function (value) {\n        _super.prototype.setSurveyCore.call(this, value);\n        if (!!value && !!this.choicesFromQuestion) {\n            this.onVisibleChoicesChanged();\n        }\n    };\n    QuestionSelectBase.prototype.getStoreOthersAsComment = function () {\n        if (this.isSettingDefaultValue)\n            return false;\n        if (this.showCommentArea)\n            return false;\n        return (this.storeOthersAsComment === true ||\n            (this.storeOthersAsComment == \"default\" &&\n                (this.survey != null ? this.survey.storeOthersAsComment : true)) ||\n            (!this.choicesByUrl.isEmpty && !this.choicesFromUrl));\n    };\n    QuestionSelectBase.prototype.onSurveyLoad = function () {\n        this.runChoicesByUrl();\n        this.onVisibleChoicesChanged();\n        _super.prototype.onSurveyLoad.call(this);\n    };\n    QuestionSelectBase.prototype.onAnyValueChanged = function (name, questionName) {\n        _super.prototype.onAnyValueChanged.call(this, name, questionName);\n        if (name != this.getValueName()) {\n            this.runChoicesByUrl();\n        }\n        var chQuestion = this.choicesFromQuestion;\n        if (!!name && chQuestion && (name === chQuestion || questionName === chQuestion)) {\n            this.onVisibleChoicesChanged();\n        }\n    };\n    QuestionSelectBase.prototype.updateValueFromSurvey = function (newValue) {\n        var newComment = \"\";\n        if (this.hasOther &&\n            !this.isRunningChoices &&\n            !this.choicesByUrl.isRunning &&\n            this.getStoreOthersAsComment()) {\n            if (this.hasUnknownValue(newValue) && !this.getHasOther(newValue)) {\n                newComment = this.getCommentFromValue(newValue);\n                newValue = this.setOtherValueIntoValue(newValue);\n            }\n            else {\n                newComment = this.data.getComment(this.getValueName());\n            }\n        }\n        _super.prototype.updateValueFromSurvey.call(this, newValue);\n        if ((this.isRunningChoices || this.choicesByUrl.isRunning) && !this.isEmpty()) {\n            this.cachedValueForUrlRequests = this.value;\n        }\n        if (!!newComment) {\n            this.setNewComment(newComment);\n        }\n    };\n    QuestionSelectBase.prototype.getCommentFromValue = function (newValue) {\n        return newValue;\n    };\n    QuestionSelectBase.prototype.setOtherValueIntoValue = function (newValue) {\n        return this.otherItem.value;\n    };\n    QuestionSelectBase.prototype.onOtherValueInput = function (event) {\n        if (this.isInputTextUpdate) {\n            if (event.target) {\n                this.otherValue = event.target.value;\n            }\n        }\n        else {\n            this.updateCommentElements();\n        }\n    };\n    QuestionSelectBase.prototype.onOtherValueChange = function (event) {\n        this.otherValue = event.target.value;\n        if (this.otherValue !== event.target.value) {\n            event.target.value = this.otherValue;\n        }\n    };\n    QuestionSelectBase.prototype.runChoicesByUrl = function () {\n        if (!this.choicesByUrl || this.isLoadingFromJson || this.isRunningChoices)\n            return;\n        var processor = this.surveyImpl\n            ? this.surveyImpl.getTextProcessor()\n            : this.textProcessor;\n        if (!processor)\n            processor = this.survey;\n        if (!processor)\n            return;\n        this.updateIsReady();\n        this.isRunningChoices = true;\n        this.choicesByUrl.run(processor);\n        this.isRunningChoices = false;\n    };\n    QuestionSelectBase.prototype.onBeforeSendRequest = function () {\n        if (_settings__WEBPACK_IMPORTED_MODULE_9__[\"settings\"].web.disableQuestionWhileLoadingChoices === true && !this.isReadOnly) {\n            this.enableOnLoadingChoices = true;\n            this.readOnly = true;\n        }\n    };\n    QuestionSelectBase.prototype.onLoadChoicesFromUrl = function (array) {\n        if (this.enableOnLoadingChoices) {\n            this.readOnly = false;\n        }\n        var errors = [];\n        if (!this.isReadOnly) {\n            if (this.choicesByUrl && this.choicesByUrl.error) {\n                errors.push(this.choicesByUrl.error);\n            }\n        }\n        var newChoices = null;\n        var checkCachedValuesOnExisting = true;\n        if (this.isFirstLoadChoicesFromUrl &&\n            !this.cachedValueForUrlRequests &&\n            this.defaultValue) {\n            this.cachedValueForUrlRequests = this.defaultValue;\n            checkCachedValuesOnExisting = false;\n        }\n        if (this.isValueEmpty(this.cachedValueForUrlRequests)) {\n            this.cachedValueForUrlRequests = this.value;\n        }\n        this.isFirstLoadChoicesFromUrl = false;\n        var cachedValues = this.createCachedValueForUrlRequests(this.cachedValueForUrlRequests, checkCachedValuesOnExisting);\n        if (array && (array.length > 0 || this.choicesByUrl.allowEmptyResponse)) {\n            newChoices = new Array();\n            _itemvalue__WEBPACK_IMPORTED_MODULE_3__[\"ItemValue\"].setData(newChoices, array);\n        }\n        if (!!newChoices) {\n            for (var i = 0; i < newChoices.length; i++) {\n                newChoices[i].locOwner = this;\n            }\n        }\n        this.choicesFromUrl = newChoices;\n        this.filterItems();\n        this.onVisibleChoicesChanged();\n        if (newChoices) {\n            var newValue = this.updateCachedValueForUrlRequests(cachedValues, newChoices);\n            if (!!newValue && !this.isReadOnly) {\n                var hasChanged = !this.isTwoValueEquals(this.value, newValue.value);\n                try {\n                    if (!this.isValueEmpty(newValue.value)) {\n                        this.allowNotifyValueChanged = false;\n                        this.setQuestionValue(undefined, true, false);\n                    }\n                    this.allowNotifyValueChanged = hasChanged;\n                    if (hasChanged) {\n                        this.value = newValue.value;\n                    }\n                    else {\n                        this.setQuestionValue(newValue.value);\n                    }\n                }\n                finally {\n                    this.allowNotifyValueChanged = true;\n                }\n            }\n        }\n        if (!this.isReadOnly && !newChoices && !this.isFirstLoadChoicesFromUrl) {\n            this.value = null;\n        }\n        this.errors = errors;\n        this.choicesLoaded();\n    };\n    QuestionSelectBase.prototype.createCachedValueForUrlRequests = function (val, checkOnExisting) {\n        if (this.isValueEmpty(val))\n            return null;\n        if (Array.isArray(val)) {\n            var res = [];\n            for (var i = 0; i < val.length; i++) {\n                res.push(this.createCachedValueForUrlRequests(val[i], true));\n            }\n            return res;\n        }\n        var isExists = checkOnExisting ? !this.hasUnknownValue(val) : true;\n        return { value: val, isExists: isExists };\n    };\n    QuestionSelectBase.prototype.updateCachedValueForUrlRequests = function (val, newChoices) {\n        if (this.isValueEmpty(val))\n            return null;\n        if (Array.isArray(val)) {\n            var res = [];\n            for (var i = 0; i < val.length; i++) {\n                var updatedValue = this.updateCachedValueForUrlRequests(val[i], newChoices);\n                if (updatedValue && !this.isValueEmpty(updatedValue.value)) {\n                    var newValue = updatedValue.value;\n                    var item = _itemvalue__WEBPACK_IMPORTED_MODULE_3__[\"ItemValue\"].getItemByValue(newChoices, updatedValue.value);\n                    if (!!item) {\n                        newValue = item.value;\n                    }\n                    res.push(newValue);\n                }\n            }\n            return { value: res };\n        }\n        var value = val.isExists && this.hasUnknownValue(val.value) ? null : val.value;\n        var item = _itemvalue__WEBPACK_IMPORTED_MODULE_3__[\"ItemValue\"].getItemByValue(newChoices, value);\n        if (!!item) {\n            value = item.value;\n        }\n        return { value: value };\n    };\n    QuestionSelectBase.prototype.updateChoicesDependedQuestions = function () {\n        if (this.isLoadingFromJson || this.isUpdatingChoicesDependedQuestions ||\n            !this.allowNotifyValueChanged || this.choicesByUrl.isRunning)\n            return;\n        this.isUpdatingChoicesDependedQuestions = true;\n        this.updateDependedQuestions();\n        this.isUpdatingChoicesDependedQuestions = false;\n    };\n    QuestionSelectBase.prototype.updateDependedQuestion = function () {\n        this.onVisibleChoicesChanged();\n        this.clearIncorrectValues();\n    };\n    QuestionSelectBase.prototype.onSurveyValueChanged = function (newValue) {\n        _super.prototype.onSurveyValueChanged.call(this, newValue);\n        this.updateChoicesDependedQuestions();\n    };\n    QuestionSelectBase.prototype.onVisibleChoicesChanged = function () {\n        if (this.isLoadingFromJson || this.isLockVisibleChoices)\n            return;\n        this.updateVisibleChoices();\n        this.onVisibleChanged();\n        if (!!this.visibleChoicesChangedCallback) {\n            this.visibleChoicesChangedCallback();\n        }\n        this.updateChoicesDependedQuestions();\n    };\n    QuestionSelectBase.prototype.isVisibleCore = function () {\n        var superVal = _super.prototype.isVisibleCore.call(this);\n        if (!this.hideIfChoicesEmpty || !superVal)\n            return superVal;\n        var filteredChoices = this.getFilteredChoices();\n        return !filteredChoices || filteredChoices.length > 0;\n    };\n    QuestionSelectBase.prototype.sortVisibleChoices = function (array) {\n        if (this.isDesignMode)\n            return array;\n        var order = this.choicesOrder.toLowerCase();\n        if (order == \"asc\")\n            return this.sortArray(array, 1);\n        if (order == \"desc\")\n            return this.sortArray(array, -1);\n        if (order == \"random\")\n            return this.randomizeArray(array);\n        return array;\n    };\n    QuestionSelectBase.prototype.sortArray = function (array, mult) {\n        return array.sort(function (a, b) {\n            return _helpers__WEBPACK_IMPORTED_MODULE_8__[\"Helpers\"].compareStrings(a.calculatedText, b.calculatedText) * mult;\n        });\n    };\n    QuestionSelectBase.prototype.randomizeArray = function (array) {\n        return _helpers__WEBPACK_IMPORTED_MODULE_8__[\"Helpers\"].randomizeArray(array);\n    };\n    QuestionSelectBase.prototype.clearIncorrectValues = function () {\n        if (!this.hasValueToClearIncorrectValues())\n            return;\n        if (this.carryForwardQuestion && !this.carryForwardQuestion.isReady)\n            return;\n        if (!!this.survey &&\n            this.survey.questionsByValueName(this.getValueName()).length > 1)\n            return;\n        if (!!this.choicesByUrl &&\n            !this.choicesByUrl.isEmpty &&\n            (!this.choicesFromUrl || this.choicesFromUrl.length == 0))\n            return;\n        if (this.clearIncorrectValuesCallback) {\n            this.clearIncorrectValuesCallback();\n        }\n        else {\n            this.clearIncorrectValuesCore();\n        }\n    };\n    QuestionSelectBase.prototype.hasValueToClearIncorrectValues = function () {\n        if (!!this.survey && this.survey.keepIncorrectValues)\n            return false;\n        return !this.keepIncorrectValues && !this.isEmpty();\n    };\n    QuestionSelectBase.prototype.clearValueIfInvisibleCore = function (reason) {\n        _super.prototype.clearValueIfInvisibleCore.call(this, reason);\n        this.clearIncorrectValues();\n    };\n    /**\n     * Returns `true` if a passed choice item is selected.\n     *\n     * To obtain a choice item to check, use the `noneItem` or `otherItem` property or the `choices` array.\n     * @param item A choice item.\n     * @see noneItem\n     * @see otherItem\n     * @see choices\n     */\n    QuestionSelectBase.prototype.isItemSelected = function (item) {\n        if (item === this.otherItem)\n            return this.isOtherSelected;\n        return this.isItemSelectedCore(item);\n    };\n    QuestionSelectBase.prototype.isItemSelectedCore = function (item) {\n        return item.value === this.value;\n    };\n    QuestionSelectBase.prototype.clearDisabledValues = function () {\n        if (!this.survey || !this.survey.clearValueOnDisableItems)\n            return;\n        this.clearDisabledValuesCore();\n    };\n    QuestionSelectBase.prototype.clearIncorrectValuesCore = function () {\n        var val = this.value;\n        if (this.canClearValueAnUnknown(val)) {\n            this.clearValue();\n        }\n    };\n    QuestionSelectBase.prototype.canClearValueAnUnknown = function (val) {\n        if (!this.getStoreOthersAsComment() && this.isOtherSelected)\n            return false;\n        return this.hasUnknownValue(val, true, true, true);\n    };\n    QuestionSelectBase.prototype.clearDisabledValuesCore = function () {\n        if (this.isValueDisabled(this.value)) {\n            this.clearValue();\n        }\n    };\n    QuestionSelectBase.prototype.clearUnusedValues = function () {\n        _super.prototype.clearUnusedValues.call(this);\n        if (!this.isOtherSelected) {\n            this.otherValue = \"\";\n        }\n        if (!this.showCommentArea && (!this.getStoreOthersAsComment() && !this.isOtherSelected)) {\n            this.comment = \"\";\n        }\n    };\n    QuestionSelectBase.prototype.getColumnClass = function () {\n        return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_10__[\"CssClassBuilder\"]()\n            .append(this.cssClasses.column)\n            .append(\"sv-q-column-\" + this.colCount, this.hasColumns)\n            .toString();\n    };\n    QuestionSelectBase.prototype.getItemIndex = function (item) {\n        return this.visibleChoices.indexOf(item);\n    };\n    QuestionSelectBase.prototype.getItemClass = function (item) {\n        var options = { item: item };\n        var res = this.getItemClassCore(item, options);\n        options.css = res;\n        if (!!this.survey) {\n            this.survey.updateChoiceItemCss(this, options);\n        }\n        return options.css;\n    };\n    QuestionSelectBase.prototype.getCurrentColCount = function () {\n        return this.colCount;\n    };\n    QuestionSelectBase.prototype.getItemClassCore = function (item, options) {\n        var builder = new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_10__[\"CssClassBuilder\"]()\n            .append(this.cssClasses.item)\n            .append(this.cssClasses.itemInline, !this.hasColumns && this.colCount === 0)\n            .append(\"sv-q-col-\" + this.getCurrentColCount(), !this.hasColumns && this.colCount !== 0)\n            .append(this.cssClasses.itemOnError, this.errors.length > 0);\n        var isDisabled = this.isReadOnly || !item.isEnabled;\n        var isChecked = this.isItemSelected(item) ||\n            (this.isOtherSelected && this.otherItem.value === item.value);\n        var allowHover = !isDisabled && !isChecked && !(!!this.survey && this.survey.isDesignMode);\n        var isNone = item === this.noneItem;\n        options.isDisabled = isDisabled;\n        options.isChecked = isChecked;\n        options.isNone = isNone;\n        return builder.append(this.cssClasses.itemDisabled, isDisabled)\n            .append(this.cssClasses.itemChecked, isChecked)\n            .append(this.cssClasses.itemHover, allowHover)\n            .append(this.cssClasses.itemNone, isNone)\n            .toString();\n    };\n    QuestionSelectBase.prototype.getLabelClass = function (item) {\n        return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_10__[\"CssClassBuilder\"]()\n            .append(this.cssClasses.label)\n            .append(this.cssClasses.labelChecked, this.isItemSelected(item))\n            .toString();\n    };\n    QuestionSelectBase.prototype.getControlLabelClass = function (item) {\n        return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_10__[\"CssClassBuilder\"]()\n            .append(this.cssClasses.controlLabel)\n            .append(this.cssClasses.controlLabelChecked, this.isItemSelected(item))\n            .toString() || undefined;\n    };\n    Object.defineProperty(QuestionSelectBase.prototype, \"headItems\", {\n        get: function () {\n            var _this = this;\n            return (this.separateSpecialChoices || this.isDesignMode) ?\n                this.visibleChoices.filter(function (choice) { return _this.isHeadChoice(choice, _this); }) : [];\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionSelectBase.prototype, \"footItems\", {\n        get: function () {\n            var _this = this;\n            return (this.separateSpecialChoices || this.isDesignMode) ?\n                this.visibleChoices.filter(function (choice) { return _this.isFootChoice(choice, _this); }) : [];\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionSelectBase.prototype, \"dataChoices\", {\n        get: function () {\n            var _this = this;\n            return this.visibleChoices.filter(function (item) { return !_this.isBuiltInChoice(item, _this); });\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionSelectBase.prototype, \"bodyItems\", {\n        get: function () {\n            return (this.hasHeadItems || this.hasFootItems) ? this.dataChoices : this.visibleChoices;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionSelectBase.prototype, \"hasHeadItems\", {\n        get: function () {\n            return this.headItems.length > 0;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionSelectBase.prototype, \"hasFootItems\", {\n        get: function () {\n            return this.footItems.length > 0;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionSelectBase.prototype, \"columns\", {\n        get: function () {\n            var columns = [];\n            var colCount = this.getCurrentColCount();\n            if (this.hasColumns && this.visibleChoices.length > 0) {\n                var choicesToBuildColumns = (!this.separateSpecialChoices && !this.isDesignMode) ?\n                    this.visibleChoices : this.dataChoices;\n                if (_settings__WEBPACK_IMPORTED_MODULE_9__[\"settings\"].showItemsInOrder == \"column\") {\n                    var prevIndex = 0;\n                    var leftElementsCount = choicesToBuildColumns.length % colCount;\n                    for (var i = 0; i < colCount; i++) {\n                        var column = [];\n                        for (var j = prevIndex; j < prevIndex + Math.floor(choicesToBuildColumns.length / colCount); j++) {\n                            column.push(choicesToBuildColumns[j]);\n                        }\n                        if (leftElementsCount > 0) {\n                            leftElementsCount--;\n                            column.push(choicesToBuildColumns[j]);\n                            j++;\n                        }\n                        prevIndex = j;\n                        columns.push(column);\n                    }\n                }\n                else {\n                    for (var i = 0; i < colCount; i++) {\n                        var column = [];\n                        for (var j = i; j < choicesToBuildColumns.length; j += colCount) {\n                            column.push(choicesToBuildColumns[j]);\n                        }\n                        columns.push(column);\n                    }\n                }\n            }\n            return columns;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionSelectBase.prototype, \"hasColumns\", {\n        get: function () {\n            return !this.isMobile &&\n                (this.getCurrentColCount() > 1);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionSelectBase.prototype, \"rowLayout\", {\n        get: function () {\n            return this.getCurrentColCount() == 0 && !(this.hasFootItems || this.hasHeadItems);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionSelectBase.prototype, \"blockedRow\", {\n        get: function () {\n            return this.getCurrentColCount() == 0 && (this.hasFootItems || this.hasHeadItems);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionSelectBase.prototype.choicesLoaded = function () {\n        this.isChoicesLoaded = true;\n        this.updateIsReady();\n        if (this.survey) {\n            this.survey.loadedChoicesFromServer(this);\n        }\n        if (this.loadedChoicesFromServerCallback) {\n            this.loadedChoicesFromServerCallback();\n        }\n    };\n    QuestionSelectBase.prototype.getItemValueWrapperComponentName = function (item) {\n        var survey = this.survey;\n        if (survey) {\n            return survey.getItemValueWrapperComponentName(item, this);\n        }\n        return _survey__WEBPACK_IMPORTED_MODULE_1__[\"SurveyModel\"].TemplateRendererComponentName;\n    };\n    QuestionSelectBase.prototype.getItemValueWrapperComponentData = function (item) {\n        var survey = this.survey;\n        if (survey) {\n            return survey.getItemValueWrapperComponentData(item, this);\n        }\n        return item;\n    };\n    QuestionSelectBase.prototype.ariaItemChecked = function (item) {\n        return this.renderedValue === item.value ? \"true\" : \"false\";\n    };\n    QuestionSelectBase.prototype.isOtherItem = function (item) {\n        return this.hasOther && item.value == this.otherItem.value;\n    };\n    Object.defineProperty(QuestionSelectBase.prototype, \"itemSvgIcon\", {\n        get: function () {\n            return this.cssClasses.itemSvgIconId;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionSelectBase.prototype.getSelectBaseRootCss = function () {\n        return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_10__[\"CssClassBuilder\"]()\n            .append(this.getQuestionRootCss())\n            .append(this.cssClasses.rootRow, this.rowLayout)\n            .toString();\n    };\n    QuestionSelectBase.prototype.allowMobileInDesignMode = function () {\n        return true;\n    };\n    QuestionSelectBase.prototype.getAriaItemLabel = function (item) {\n        return item.locText.renderedHtml;\n    };\n    QuestionSelectBase.prototype.getItemId = function (item) {\n        return this.inputId + \"_\" + this.getItemIndex(item);\n    };\n    Object.defineProperty(QuestionSelectBase.prototype, \"questionName\", {\n        get: function () {\n            return this.name + \"_\" + this.id;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionSelectBase.prototype.getItemEnabled = function (item) {\n        return !this.isInputReadOnly && item.isEnabled;\n    };\n    QuestionSelectBase.prototype.afterRender = function (el) {\n        _super.prototype.afterRender.call(this, el);\n        this.rootElement = el;\n    };\n    QuestionSelectBase.prototype.beforeDestroyQuestionElement = function (el) {\n        _super.prototype.beforeDestroyQuestionElement.call(this, el);\n        this.rootElement = undefined;\n    };\n    QuestionSelectBase.prototype.focusOtherComment = function () {\n        var _this = this;\n        if (!!this.rootElement) {\n            setTimeout(function () {\n                var commentEl = _this.rootElement.querySelector(\"textarea\");\n                if (!!commentEl) {\n                    commentEl.focus();\n                }\n            }, 10);\n        }\n    };\n    QuestionSelectBase.prototype.onValueChanged = function () {\n        _super.prototype.onValueChanged.call(this);\n        if (!this.isDesignMode && !this.prevIsOtherSelected && this.isOtherSelected) {\n            this.focusOtherComment();\n        }\n        this.prevIsOtherSelected = this.isOtherSelected;\n    };\n    QuestionSelectBase.prototype.getDefaultItemComponent = function () {\n        return \"\";\n    };\n    Object.defineProperty(QuestionSelectBase.prototype, \"itemComponent\", {\n        /**\n         * The name of a component used to render items.\n         */\n        get: function () {\n            return this.getPropertyValue(\"itemComponent\", this.getDefaultItemComponent());\n        },\n        set: function (value) {\n            this.setPropertyValue(\"itemComponent\", value);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionSelectBase.prototype.updateCssClasses = function (res, css) {\n        _super.prototype.updateCssClasses.call(this, res, css);\n        if (!!this.dropdownListModel) {\n            var listCssClasses = {};\n            Object(_utils_utils__WEBPACK_IMPORTED_MODULE_11__[\"mergeValues\"])(css.list, listCssClasses);\n            Object(_utils_utils__WEBPACK_IMPORTED_MODULE_11__[\"mergeValues\"])(res.list, listCssClasses);\n            res[\"list\"] = listCssClasses;\n        }\n    };\n    QuestionSelectBase.prototype.calcCssClasses = function (css) {\n        var classes = _super.prototype.calcCssClasses.call(this, css);\n        if (this.dropdownListModel) {\n            this.dropdownListModel.updateCssClasses(classes.popup, classes.list);\n        }\n        return classes;\n    };\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ onSet: function (newVal, target) {\n                target.onSelectedItemValuesChangedHandler(newVal);\n            } })\n    ], QuestionSelectBase.prototype, \"selectedItemValues\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])()\n    ], QuestionSelectBase.prototype, \"separateSpecialChoices\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ localizable: true })\n    ], QuestionSelectBase.prototype, \"otherPlaceholder\", void 0);\n    return QuestionSelectBase;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"Question\"]));\n\n/**\n * A base class for multiple-selection question types that can display choice items in multiple columns ([Checkbox](https://surveyjs.io/form-library/documentation/questioncheckboxmodel), [Radiogroup](https://surveyjs.io/form-library/documentation/questionradiogroupmodel), [Image Picker](https://surveyjs.io/form-library/documentation/questionimagepickermodel)).\n */\nvar QuestionCheckboxBase = /** @class */ (function (_super) {\n    __extends(QuestionCheckboxBase, _super);\n    function QuestionCheckboxBase(name) {\n        return _super.call(this, name) || this;\n    }\n    Object.defineProperty(QuestionCheckboxBase.prototype, \"colCount\", {\n        /**\n         * Get or sets the number of columns used to arrange choice items.\n         *\n         * Set this property to 0 if you want to display all items in one line. The default value depends on the available width.\n         * @see separateSpecialChoices\n         */\n        get: function () {\n            return this.getPropertyValue(\"colCount\", this.isFlowLayout ? 0 : 1);\n        },\n        set: function (value) {\n            if (value < 0 || value > 5 || this.isFlowLayout)\n                return;\n            this.setPropertyValue(\"colCount\", value);\n            this.fireCallback(this.colCountChangedCallback);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionCheckboxBase.prototype.clickItemHandler = function (item, checked) {\n        var newValue = [].concat(this.renderedValue || []);\n        var index = newValue.indexOf(item.value);\n        if (checked) {\n            if (index < 0) {\n                newValue.push(item.value);\n            }\n        }\n        else {\n            if (index > -1) {\n                newValue.splice(index, 1);\n            }\n        }\n        this.renderedValue = newValue;\n    };\n    QuestionCheckboxBase.prototype.onParentChanged = function () {\n        _super.prototype.onParentChanged.call(this);\n        if (this.isFlowLayout) {\n            this.setPropertyValue(\"colCount\", null);\n        }\n    };\n    QuestionCheckboxBase.prototype.onParentQuestionChanged = function () {\n        this.onVisibleChoicesChanged();\n    };\n    QuestionCheckboxBase.prototype.getSearchableItemValueKeys = function (keys) {\n        keys.push(\"choices\");\n    };\n    return QuestionCheckboxBase;\n}(QuestionSelectBase));\n\nfunction checkCopyPropVisibility(obj, mode) {\n    var _a;\n    if (!obj)\n        return false;\n    if (!!obj.templateQuestion) {\n        var data = (_a = obj.colOwner) === null || _a === void 0 ? void 0 : _a.data;\n        obj = obj.templateQuestion;\n        if (!obj.getCarryForwardQuestion(data))\n            return false;\n    }\n    return obj.carryForwardQuestionType === mode;\n}\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"selectbase\", [\n    { name: \"showCommentArea:switch\", layout: \"row\", visible: true, category: \"general\" },\n    \"choicesFromQuestion:question_carryforward\",\n    {\n        name: \"choices:itemvalue[]\", uniqueProperty: \"value\",\n        baseValue: function () {\n            return _surveyStrings__WEBPACK_IMPORTED_MODULE_4__[\"surveyLocalization\"].getString(\"choices_Item\");\n        },\n        dependsOn: \"choicesFromQuestion\",\n        visibleIf: function (obj) {\n            return !obj.choicesFromQuestion;\n        },\n    },\n    {\n        name: \"choicesFromQuestionMode\",\n        default: \"all\",\n        choices: [\"all\", \"selected\", \"unselected\"],\n        dependsOn: \"choicesFromQuestion\",\n        visibleIf: function (obj) {\n            return checkCopyPropVisibility(obj, \"select\");\n        },\n    },\n    {\n        name: \"choiceValuesFromQuestion\",\n        dependsOn: \"choicesFromQuestion\",\n        visibleIf: function (obj) {\n            return checkCopyPropVisibility(obj, \"array\");\n        },\n    },\n    {\n        name: \"choiceTextsFromQuestion\",\n        dependsOn: \"choicesFromQuestion\",\n        visibleIf: function (obj) {\n            return checkCopyPropVisibility(obj, \"array\");\n        },\n    },\n    {\n        name: \"choicesOrder\",\n        default: \"none\",\n        choices: [\"none\", \"asc\", \"desc\", \"random\"],\n        dependsOn: \"choicesFromQuestion\",\n        visibleIf: function (obj) {\n            return !obj.choicesFromQuestion;\n        },\n    },\n    {\n        name: \"choicesByUrl:restfull\",\n        className: \"choicesByUrl\",\n        onGetValue: function (obj) {\n            return obj.choicesByUrl.getData();\n        },\n        onSetValue: function (obj, value) {\n            obj.choicesByUrl.setData(value);\n        },\n    },\n    \"hideIfChoicesEmpty:boolean\",\n    {\n        name: \"choicesVisibleIf:condition\",\n        dependsOn: \"choicesFromQuestion\",\n        visibleIf: function (obj) {\n            return !obj.choicesFromQuestion;\n        },\n    },\n    {\n        name: \"choicesEnableIf:condition\",\n        dependsOn: \"choicesFromQuestion\",\n        visibleIf: function (obj) {\n            return !obj.choicesFromQuestion;\n        },\n    },\n    { name: \"separateSpecialChoices:boolean\", visible: false },\n    { name: \"showOtherItem:boolean\", alternativeName: \"hasOther\" },\n    { name: \"showNoneItem:boolean\", alternativeName: \"hasNone\" },\n    {\n        name: \"otherPlaceholder\",\n        alternativeName: \"otherPlaceHolder\",\n        serializationProperty: \"locOtherPlaceholder\",\n        dependsOn: \"showOtherItem\",\n        visibleIf: function (obj) {\n            return obj.hasOther;\n        },\n    },\n    {\n        name: \"noneText\",\n        serializationProperty: \"locNoneText\",\n        dependsOn: \"showNoneItem\",\n        visibleIf: function (obj) {\n            return obj.hasNone;\n        },\n    },\n    {\n        name: \"otherText\",\n        serializationProperty: \"locOtherText\",\n        dependsOn: \"showOtherItem\",\n        visibleIf: function (obj) {\n            return obj.hasOther;\n        },\n    },\n    {\n        name: \"otherErrorText\",\n        serializationProperty: \"locOtherErrorText\",\n        dependsOn: \"showOtherItem\",\n        visibleIf: function (obj) {\n            return obj.hasOther;\n        },\n    },\n    {\n        name: \"storeOthersAsComment\",\n        default: \"default\",\n        choices: [\"default\", true, false],\n        visible: false,\n    },\n    // { name: \"itemComponent\", visible: false }\n], null, \"question\");\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"checkboxbase\", [\n    {\n        name: \"colCount:number\",\n        default: 1,\n        choices: [0, 1, 2, 3, 4, 5],\n        layout: \"row\",\n    }\n], null, \"selectbase\");\n\n\n/***/ }),\n\n/***/ \"./src/question_boolean.ts\":\n/*!*********************************!*\\\n  !*** ./src/question_boolean.ts ***!\n  \\*********************************/\n/*! exports provided: QuestionBooleanModel */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_2706686__) {\n\n\"use strict\";\n__nested_webpack_require_2706686__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_2706686__.d(__nested_webpack_exports__, \"QuestionBooleanModel\", function() { return QuestionBooleanModel; });\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_2706686__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_2706686__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_2706686__(/*! ./question */ \"./src/question.ts\");\n/* harmony import */ var _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_2706686__(/*! ./utils/cssClassBuilder */ \"./src/utils/cssClassBuilder.ts\");\n/* harmony import */ var _utils_utils__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_2706686__(/*! ./utils/utils */ \"./src/utils/utils.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\n/**\n * A class that describes the Yes/No (Boolean) question type.\n *\n * [View Demo](https://surveyjs.io/form-library/examples/questiontype-boolean/ (linkStyle))\n */\nvar QuestionBooleanModel = /** @class */ (function (_super) {\n    __extends(QuestionBooleanModel, _super);\n    function QuestionBooleanModel(name) {\n        var _this = _super.call(this, name) || this;\n        _this.createLocalizableString(\"labelFalse\", _this, true, \"booleanUncheckedLabel\");\n        _this.createLocalizableString(\"labelTrue\", _this, true, \"booleanCheckedLabel\");\n        return _this;\n    }\n    QuestionBooleanModel.prototype.getType = function () {\n        return \"boolean\";\n    };\n    QuestionBooleanModel.prototype.isLayoutTypeSupported = function (layoutType) {\n        return true;\n    };\n    QuestionBooleanModel.prototype.supportGoNextPageAutomatic = function () {\n        return this.renderAs !== \"checkbox\";\n    };\n    Object.defineProperty(QuestionBooleanModel.prototype, \"isIndeterminate\", {\n        get: function () {\n            return this.isEmpty();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionBooleanModel.prototype, \"hasTitle\", {\n        get: function () {\n            return true;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionBooleanModel.prototype, \"booleanValue\", {\n        /**\n         * Gets or sets the question value as a Boolean value.\n         *\n         * If you set the `valueTrue` and `valueFalse` properties, the `value` property contains their values instead of Boolean values. This may be inconvenient when you operate the question value in code. To access the standard Boolean values, use the `booleanValue` property.\n         * @see valueTrue\n         * @see valueFalse\n         */\n        get: function () {\n            if (this.isEmpty())\n                return null;\n            return this.value == this.getValueTrue();\n        },\n        set: function (val) {\n            if (this.isReadOnly || this.isDesignMode) {\n                return;\n            }\n            this.setBooleanValue(val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionBooleanModel.prototype, \"checkedValue\", {\n        get: function () { return this.booleanValue; },\n        set: function (val) { this.booleanValue = val; },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionBooleanModel.prototype.setBooleanValue = function (val) {\n        if (this.isValueEmpty(val)) {\n            this.value = null;\n            this.booleanValueRendered = null;\n        }\n        else {\n            this.value = val == true ? this.getValueTrue() : this.getValueFalse();\n            this.booleanValueRendered = val;\n        }\n    };\n    Object.defineProperty(QuestionBooleanModel.prototype, \"defaultValue\", {\n        get: function () {\n            return this.getPropertyValue(\"defaultValue\");\n        },\n        set: function (val) {\n            if (val === true)\n                val = \"true\";\n            if (val === false)\n                val = \"false\";\n            if (val === undefined)\n                val = \"indeterminate\";\n            this.setPropertyValue(\"defaultValue\", val);\n            this.updateValueWithDefaults();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionBooleanModel.prototype.getDefaultValue = function () {\n        if (this.defaultValue == \"indeterminate\")\n            return null;\n        if (this.defaultValue === undefined)\n            return null;\n        return this.defaultValue == \"true\"\n            ? this.getValueTrue()\n            : this.getValueFalse();\n    };\n    Object.defineProperty(QuestionBooleanModel.prototype, \"locTitle\", {\n        get: function () {\n            var original = this.getLocalizableString(\"title\");\n            if (!this.isValueEmpty(this.locLabel.text) && (this.isValueEmpty(original.text) || this.isLabelRendered && !this.showTitle))\n                return this.locLabel;\n            return original;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionBooleanModel.prototype, \"labelRenderedAriaID\", {\n        get: function () {\n            return this.isLabelRendered ? this.ariaTitleId : null;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionBooleanModel.prototype, \"isLabelRendered\", {\n        get: function () {\n            return this.titleLocation === \"hidden\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionBooleanModel.prototype, \"canRenderLabelDescription\", {\n        get: function () {\n            return this.isLabelRendered && this.hasDescription && (this.hasDescriptionUnderTitle || this.hasDescriptionUnderInput);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionBooleanModel.prototype, \"labelTrue\", {\n        /**\n         * Gets or sets a text label that corresponds to a positive answer.\n         *\n         * Default value: \"Yes\"\n         * @see valueTrue\n         * @see valueFalse\n         */\n        get: function () {\n            return this.getLocalizableStringText(\"labelTrue\");\n        },\n        set: function (val) {\n            this.setLocalizableStringText(\"labelTrue\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionBooleanModel.prototype, \"locLabelTrue\", {\n        get: function () {\n            return this.getLocalizableString(\"labelTrue\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionBooleanModel.prototype, \"isDeterminated\", {\n        get: function () {\n            return this.booleanValue !== null;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionBooleanModel.prototype, \"labelFalse\", {\n        /**\n         * Gets or sets a text label that corresponds to a negative answer.\n         *\n         * Default value: \"No\"\n         * @see valueTrue\n         * @see valueFalse\n         */\n        get: function () {\n            return this.getLocalizableStringText(\"labelFalse\");\n        },\n        set: function (val) {\n            this.setLocalizableStringText(\"labelFalse\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionBooleanModel.prototype, \"locLabelFalse\", {\n        get: function () {\n            return this.getLocalizableString(\"labelFalse\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionBooleanModel.prototype.getValueTrue = function () {\n        return this.valueTrue !== undefined ? this.valueTrue : true;\n    };\n    QuestionBooleanModel.prototype.getValueFalse = function () {\n        return this.valueFalse !== undefined ? this.valueFalse : false;\n    };\n    QuestionBooleanModel.prototype.setDefaultValue = function () {\n        if (this.isDefaultValueSet(\"true\", this.valueTrue))\n            this.setBooleanValue(true);\n        if (this.isDefaultValueSet(\"false\", this.valueFalse))\n            this.setBooleanValue(false);\n        if (this.defaultValue == \"indeterminate\")\n            this.setBooleanValue(null);\n    };\n    QuestionBooleanModel.prototype.isDefaultValueSet = function (defaultValueCheck, valueTrueOrFalse) {\n        return this.defaultValue == defaultValueCheck || (valueTrueOrFalse !== undefined && this.defaultValue === valueTrueOrFalse);\n    };\n    QuestionBooleanModel.prototype.getDisplayValueCore = function (keysAsText, value) {\n        if (value == this.getValueTrue())\n            return this.locLabelTrue.textOrHtml;\n        return this.locLabelFalse.textOrHtml;\n    };\n    QuestionBooleanModel.prototype.getItemCssValue = function (css) {\n        return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_3__[\"CssClassBuilder\"]()\n            .append(css.item)\n            .append(css.itemOnError, this.errors.length > 0)\n            .append(css.itemDisabled, this.isReadOnly)\n            .append(css.itemHover, !this.isDesignMode)\n            .append(css.itemChecked, !!this.booleanValue)\n            .append(css.itemIndeterminate, this.booleanValue === null)\n            .toString();\n    };\n    QuestionBooleanModel.prototype.getItemCss = function () {\n        return this.getItemCssValue(this.cssClasses);\n    };\n    QuestionBooleanModel.prototype.getCheckboxItemCss = function () {\n        return this.getItemCssValue({\n            item: this.cssClasses.checkboxItem,\n            itemOnError: this.cssClasses.checkboxItemOnError,\n            itemDisabled: this.cssClasses.checkboxItemDisabled,\n            itemChecked: this.cssClasses.checkboxItemChecked,\n            itemIndeterminate: this.cssClasses.checkboxItemIndeterminate\n        });\n    };\n    QuestionBooleanModel.prototype.getLabelCss = function (checked) {\n        return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_3__[\"CssClassBuilder\"]()\n            .append(this.cssClasses.label)\n            .append(this.cssClasses.disabledLabel, this.booleanValue === !checked || this.isReadOnly)\n            .append(this.cssClasses.labelTrue, !this.isIndeterminate && checked === true)\n            .append(this.cssClasses.labelFalse, !this.isIndeterminate && checked === false)\n            .toString();\n    };\n    Object.defineProperty(QuestionBooleanModel.prototype, \"svgIcon\", {\n        get: function () {\n            if (this.booleanValue && this.cssClasses.svgIconCheckedId)\n                return this.cssClasses.svgIconCheckedId;\n            if (this.booleanValue === null && this.cssClasses.svgIconIndId)\n                return this.cssClasses.svgIconIndId;\n            if (!this.booleanValue && this.cssClasses.svgIconUncheckedId)\n                return this.cssClasses.svgIconUncheckedId;\n            return this.cssClasses.svgIconId;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionBooleanModel.prototype, \"allowClick\", {\n        get: function () {\n            return this.isIndeterminate && !this.isInputReadOnly;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionBooleanModel.prototype.getCheckedLabel = function () {\n        if (this.booleanValue === true) {\n            return this.locLabelTrue;\n        }\n        else if (this.booleanValue === false) {\n            return this.locLabelFalse;\n        }\n    };\n    QuestionBooleanModel.prototype.setQuestionValue = function (newValue, updateIsAnswered) {\n        if (updateIsAnswered === void 0) { updateIsAnswered = true; }\n        if (newValue === \"true\" && this.valueTrue !== \"true\")\n            newValue = true;\n        if (newValue === \"false\" && this.valueFalse !== \"false\")\n            newValue = false;\n        if (newValue === \"indeterminate\")\n            newValue = null;\n        _super.prototype.setQuestionValue.call(this, newValue, updateIsAnswered);\n    };\n    /* #region web-based methods */\n    QuestionBooleanModel.prototype.onLabelClick = function (event, value) {\n        if (this.allowClick) {\n            Object(_utils_utils__WEBPACK_IMPORTED_MODULE_4__[\"preventDefaults\"])(event);\n            this.booleanValue = value;\n        }\n        return true;\n    };\n    QuestionBooleanModel.prototype.calculateBooleanValueByEvent = function (event, isRightClick) {\n        var isRtl = document.defaultView.getComputedStyle(event.target).direction == \"rtl\";\n        this.booleanValue = isRtl ? !isRightClick : isRightClick;\n    };\n    QuestionBooleanModel.prototype.onSwitchClickModel = function (event) {\n        if (this.allowClick) {\n            Object(_utils_utils__WEBPACK_IMPORTED_MODULE_4__[\"preventDefaults\"])(event);\n            var isRightClick = event.offsetX / event.target.offsetWidth > 0.5;\n            this.calculateBooleanValueByEvent(event, isRightClick);\n            return;\n        }\n        return true;\n    };\n    QuestionBooleanModel.prototype.onKeyDownCore = function (event) {\n        if (event.key === \"ArrowLeft\" || event.key === \"ArrowRight\") {\n            event.stopPropagation();\n            this.calculateBooleanValueByEvent(event, event.key === \"ArrowRight\");\n        }\n        return true;\n    };\n    /* #endregion */\n    QuestionBooleanModel.prototype.getRadioItemClass = function (css, value) {\n        var className = undefined;\n        if (css.radioItem) {\n            className = css.radioItem;\n        }\n        if (css.radioItemChecked && value === this.booleanValue) {\n            className = (className ? className + \" \" : \"\") + css.radioItemChecked;\n        }\n        return className;\n    };\n    QuestionBooleanModel.prototype.supportResponsiveness = function () {\n        return true;\n    };\n    QuestionBooleanModel.prototype.getCompactRenderAs = function () {\n        return \"radio\";\n    };\n    QuestionBooleanModel.prototype.createActionContainer = function (allowAdaptiveActions) {\n        return _super.prototype.createActionContainer.call(this, this.renderAs !== \"checkbox\");\n    };\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n    ], QuestionBooleanModel.prototype, \"booleanValueRendered\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n    ], QuestionBooleanModel.prototype, \"showTitle\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ localizable: true })\n    ], QuestionBooleanModel.prototype, \"label\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n    ], QuestionBooleanModel.prototype, \"valueTrue\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n    ], QuestionBooleanModel.prototype, \"valueFalse\", void 0);\n    return QuestionBooleanModel;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"Question\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].addClass(\"boolean\", [\n    { name: \"showCommentArea:switch\", layout: \"row\", visible: true, category: \"general\" },\n    { name: \"label:text\", serializationProperty: \"locLabel\", isSerializable: false, visible: false },\n    {\n        name: \"labelTrue:text\",\n        serializationProperty: \"locLabelTrue\",\n    },\n    {\n        name: \"labelFalse:text\",\n        serializationProperty: \"locLabelFalse\",\n    },\n    \"valueTrue\",\n    \"valueFalse\",\n    { name: \"renderAs\", default: \"default\", visible: false },\n], function () {\n    return new QuestionBooleanModel(\"\");\n}, \"question\");\n_questionfactory__WEBPACK_IMPORTED_MODULE_0__[\"QuestionFactory\"].Instance.registerQuestion(\"boolean\", function (name) {\n    return new QuestionBooleanModel(name);\n});\n\n\n/***/ }),\n\n/***/ \"./src/question_buttongroup.ts\":\n/*!*************************************!*\\\n  !*** ./src/question_buttongroup.ts ***!\n  \\*************************************/\n/*! exports provided: ButtonGroupItemValue, QuestionButtonGroupModel, ButtonGroupItemModel */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_2724109__) {\n\n\"use strict\";\n__nested_webpack_require_2724109__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_2724109__.d(__nested_webpack_exports__, \"ButtonGroupItemValue\", function() { return ButtonGroupItemValue; });\n/* harmony export (binding) */ __nested_webpack_require_2724109__.d(__nested_webpack_exports__, \"QuestionButtonGroupModel\", function() { return QuestionButtonGroupModel; });\n/* harmony export (binding) */ __nested_webpack_require_2724109__.d(__nested_webpack_exports__, \"ButtonGroupItemModel\", function() { return ButtonGroupItemModel; });\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_2724109__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _itemvalue__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_2724109__(/*! ./itemvalue */ \"./src/itemvalue.ts\");\n/* harmony import */ var _question_baseselect__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_2724109__(/*! ./question_baseselect */ \"./src/question_baseselect.ts\");\n/* harmony import */ var _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_2724109__(/*! ./utils/cssClassBuilder */ \"./src/utils/cssClassBuilder.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\nvar ButtonGroupItemValue = /** @class */ (function (_super) {\n    __extends(ButtonGroupItemValue, _super);\n    function ButtonGroupItemValue(value, text, typeName) {\n        if (text === void 0) { text = null; }\n        if (typeName === void 0) { typeName = \"buttongroupitemvalue\"; }\n        var _this = _super.call(this, value, text, typeName) || this;\n        _this.typeName = typeName;\n        return _this;\n    }\n    ButtonGroupItemValue.prototype.getType = function () {\n        return !!this.typeName ? this.typeName : \"buttongroupitemvalue\";\n    };\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])()\n    ], ButtonGroupItemValue.prototype, \"iconName\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])()\n    ], ButtonGroupItemValue.prototype, \"iconSize\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])()\n    ], ButtonGroupItemValue.prototype, \"showCaption\", void 0);\n    return ButtonGroupItemValue;\n}(_itemvalue__WEBPACK_IMPORTED_MODULE_1__[\"ItemValue\"]));\n\n/**\n * A Model for a button group question.\n */\nvar QuestionButtonGroupModel = /** @class */ (function (_super) {\n    __extends(QuestionButtonGroupModel, _super);\n    function QuestionButtonGroupModel(name) {\n        return _super.call(this, name) || this;\n    }\n    QuestionButtonGroupModel.prototype.getType = function () {\n        return \"buttongroup\";\n    };\n    QuestionButtonGroupModel.prototype.getItemValueType = function () {\n        return \"buttongroupitemvalue\";\n    };\n    QuestionButtonGroupModel.prototype.supportOther = function () {\n        return false;\n    };\n    return QuestionButtonGroupModel;\n}(_question_baseselect__WEBPACK_IMPORTED_MODULE_2__[\"QuestionCheckboxBase\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"buttongroup\", [\n    {\n        name: \"choices:buttongroupitemvalue[]\",\n    },\n], function () {\n    return new QuestionButtonGroupModel(\"\");\n}, \"checkboxbase\");\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"buttongroupitemvalue\", [\n    { name: \"showCaption:boolean\", default: true },\n    { name: \"iconName:text\" },\n    { name: \"iconSize:number\" },\n], function (value) { return new ButtonGroupItemValue(value); }, \"itemvalue\");\n// QuestionFactory.Instance.registerQuestion(\"buttongroup\", name => {\n//   var q = new QuestionButtonGroupModel(name);\n//   q.choices = QuestionFactory.DefaultChoices;\n//   return q;\n// });\nvar ButtonGroupItemModel = /** @class */ (function () {\n    function ButtonGroupItemModel(question, item, index) {\n        this.question = question;\n        this.item = item;\n        this.index = index;\n    }\n    Object.defineProperty(ButtonGroupItemModel.prototype, \"value\", {\n        get: function () {\n            return this.item.value;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(ButtonGroupItemModel.prototype, \"iconName\", {\n        get: function () {\n            return this.item.iconName;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(ButtonGroupItemModel.prototype, \"iconSize\", {\n        get: function () {\n            return this.item.iconSize || 24;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(ButtonGroupItemModel.prototype, \"caption\", {\n        get: function () {\n            return this.item.locText;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(ButtonGroupItemModel.prototype, \"showCaption\", {\n        get: function () {\n            return this.item.showCaption || this.item.showCaption === undefined;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(ButtonGroupItemModel.prototype, \"isRequired\", {\n        get: function () {\n            return this.question.isRequired;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(ButtonGroupItemModel.prototype, \"selected\", {\n        get: function () {\n            return this.question.isItemSelected(this.item);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(ButtonGroupItemModel.prototype, \"readOnly\", {\n        get: function () {\n            return this.question.isInputReadOnly || !this.item.isEnabled;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(ButtonGroupItemModel.prototype, \"name\", {\n        get: function () {\n            return this.question.name + \"_\" + this.question.id;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(ButtonGroupItemModel.prototype, \"id\", {\n        get: function () {\n            return this.question.inputId + \"_\" + this.index;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(ButtonGroupItemModel.prototype, \"hasErrors\", {\n        get: function () {\n            return this.question.errors.length > 0;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(ButtonGroupItemModel.prototype, \"describedBy\", {\n        get: function () {\n            return this.question.errors.length > 0\n                ? this.question.id + \"_errors\"\n                : null;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(ButtonGroupItemModel.prototype, \"labelClass\", {\n        get: function () {\n            return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_3__[\"CssClassBuilder\"]()\n                .append(this.question.cssClasses.item)\n                .append(this.question.cssClasses.itemSelected, this.selected)\n                .append(this.question.cssClasses.itemHover, !this.readOnly && !this.selected)\n                .append(this.question.cssClasses.itemDisabled, this.question.isReadOnly || !this.item.isEnabled)\n                .toString();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(ButtonGroupItemModel.prototype, \"css\", {\n        get: function () {\n            return {\n                label: this.labelClass,\n                icon: this.question.cssClasses.itemIcon,\n                control: this.question.cssClasses.itemControl,\n                caption: this.question.cssClasses.itemCaption,\n                decorator: this.question.cssClasses.itemDecorator,\n            };\n        },\n        enumerable: false,\n        configurable: true\n    });\n    ButtonGroupItemModel.prototype.onChange = function () {\n        this.question.renderedValue = this.item.value;\n    };\n    return ButtonGroupItemModel;\n}());\n\n\n\n/***/ }),\n\n/***/ \"./src/question_checkbox.ts\":\n/*!**********************************!*\\\n  !*** ./src/question_checkbox.ts ***!\n  \\**********************************/\n/*! exports provided: QuestionCheckboxModel */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_2733603__) {\n\n\"use strict\";\n__nested_webpack_require_2733603__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_2733603__.d(__nested_webpack_exports__, \"QuestionCheckboxModel\", function() { return QuestionCheckboxModel; });\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_2733603__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_2733603__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\n/* harmony import */ var _question_baseselect__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_2733603__(/*! ./question_baseselect */ \"./src/question_baseselect.ts\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_2733603__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _itemvalue__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_2733603__(/*! ./itemvalue */ \"./src/itemvalue.ts\");\n/* harmony import */ var _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_2733603__(/*! ./utils/cssClassBuilder */ \"./src/utils/cssClassBuilder.ts\");\n/* harmony import */ var _error__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_2733603__(/*! ./error */ \"./src/error.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n\n\n\n\n\n\n\n/**\n * A class that describes the Checkboxes question type.\n *\n * [View Demo](https://surveyjs.io/form-library/examples/questiontype-checkbox/ (linkStyle))\n */\nvar QuestionCheckboxModel = /** @class */ (function (_super) {\n    __extends(QuestionCheckboxModel, _super);\n    function QuestionCheckboxModel(name) {\n        var _this = _super.call(this, name) || this;\n        _this.selectAllItemValue = new _itemvalue__WEBPACK_IMPORTED_MODULE_4__[\"ItemValue\"](\"selectall\");\n        _this.invisibleOldValues = {};\n        _this.isChangingValueOnClearIncorrect = false;\n        var selectAllItemText = _this.createLocalizableString(\"selectAllText\", _this.selectAllItem, true, \"selectAllItemText\");\n        _this.selectAllItem.locOwner = _this;\n        _this.selectAllItem.setLocText(selectAllItemText);\n        _this.registerPropertyChangedHandlers([\"showSelectAllItem\", \"selectAllText\"], function () {\n            _this.onVisibleChoicesChanged();\n        });\n        return _this;\n    }\n    QuestionCheckboxModel.prototype.getDefaultItemComponent = function () {\n        return \"survey-checkbox-item\";\n    };\n    QuestionCheckboxModel.prototype.getType = function () {\n        return \"checkbox\";\n    };\n    QuestionCheckboxModel.prototype.onCreating = function () {\n        _super.prototype.onCreating.call(this);\n        this.createNewArray(\"renderedValue\");\n        this.createNewArray(\"value\");\n    };\n    QuestionCheckboxModel.prototype.getFirstInputElementId = function () {\n        return this.inputId + \"_0\";\n    };\n    Object.defineProperty(QuestionCheckboxModel.prototype, \"valuePropertyName\", {\n        /**\n         * Specifies a property name used to store selected values.\n         *\n         * Set this property if you want to store selected values in an array of objects instead of an array of primitive values. For example, if you set `valuePropertyName` to `\"car\"`, the `value` property will contain an array of objects `[{ car: \"Ford\" }, { car: \"Tesla\" }]`, not an array of string values `[ \"Ford\", \"Tesla\" ]`.\n         */\n        get: function () {\n            return this.getPropertyValue(\"valuePropertyName\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"valuePropertyName\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionCheckboxModel.prototype.getQuestionFromArray = function (name, index) {\n        if (!!name && name === this.valuePropertyName) {\n            var v = this.value;\n            if (Array.isArray(v) && index < v.length)\n                return this;\n        }\n        return null;\n    };\n    Object.defineProperty(QuestionCheckboxModel.prototype, \"selectAllItem\", {\n        /**\n         * Returns the \"Select All\" choice item. Use this property to change the item's `value` or `text`.\n         * @see showSelectAllItem\n         */\n        get: function () {\n            return this.selectAllItemValue;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionCheckboxModel.prototype, \"selectAllText\", {\n        /**\n         * Gets or sets a caption for the \"Select All\" choice item.\n         * @see showSelectAllItem\n         */\n        get: function () {\n            return this.getLocalizableStringText(\"selectAllText\");\n        },\n        set: function (val) {\n            this.setLocalizableStringText(\"selectAllText\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionCheckboxModel.prototype, \"locSelectAllText\", {\n        get: function () {\n            return this.getLocalizableString(\"selectAllText\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionCheckboxModel.prototype, \"showSelectAllItem\", {\n        /**\n         * Enable this property to display a \"Select All\" item. When users select it, all other choice items, except \"Other\" and \"None\", also become selected.\n         * @see selectAll\n         * @see isAllSelected\n         * @see separateSpecialChoices\n         */\n        get: function () {\n            return this.getPropertyValue(\"showSelectAllItem\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"showSelectAllItem\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionCheckboxModel.prototype, \"hasSelectAll\", {\n        get: function () {\n            return this.showSelectAllItem;\n        },\n        set: function (val) {\n            this.showSelectAllItem = val;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionCheckboxModel.prototype, \"isAllSelected\", {\n        /**\n         * Returns `true` if all choice items, except \"Other\" and \"None\", are selected.\n         * @see showSelectAllItem\n         */\n        get: function () {\n            var val = this.value;\n            if (!val || !Array.isArray(val))\n                return false;\n            if (this.isItemSelected(this.noneItem))\n                return false;\n            var allItemCount = this.visibleChoices.length;\n            if (this.hasOther)\n                allItemCount--;\n            if (this.hasNone)\n                allItemCount--;\n            if (this.hasSelectAll)\n                allItemCount--;\n            var selectedCount = val.length;\n            if (this.isOtherSelected)\n                selectedCount--;\n            return selectedCount === allItemCount;\n        },\n        set: function (val) {\n            if (val) {\n                this.selectAll();\n            }\n            else {\n                this.clearValue();\n            }\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionCheckboxModel.prototype.toggleSelectAll = function () {\n        this.isAllSelected = !this.isAllSelected;\n    };\n    /**\n     * Selects all choice items, except \"Other\" and \"None\".\n     *\n     * To clear selection, call the `clearValue()` method.\n     * @see clearValue\n     */\n    QuestionCheckboxModel.prototype.selectAll = function () {\n        var val = [];\n        for (var i = 0; i < this.visibleChoices.length; i++) {\n            var item = this.visibleChoices[i];\n            if (item === this.noneItem ||\n                item === this.otherItem ||\n                item === this.selectAllItem)\n                continue;\n            val.push(item.value);\n        }\n        this.renderedValue = val;\n    };\n    QuestionCheckboxModel.prototype.isItemSelectedCore = function (item) {\n        if (item === this.selectAllItem)\n            return this.isAllSelected;\n        var val = this.renderedValue;\n        if (!val || !Array.isArray(val))\n            return false;\n        for (var i = 0; i < val.length; i++) {\n            if (this.isTwoValueEquals(val[i], item.value))\n                return true;\n        }\n        return false;\n    };\n    QuestionCheckboxModel.prototype.getRealValue = function (val) {\n        if (!val)\n            return val;\n        return !this.valuePropertyName ? val : val[this.valuePropertyName];\n    };\n    Object.defineProperty(QuestionCheckboxModel.prototype, \"isValueArray\", {\n        get: function () { return true; },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionCheckboxModel.prototype, \"maxSelectedChoices\", {\n        /**\n         * Specifies the maximum number of selected choices.\n         *\n         * Default value: 0 (unlimited)\n         *\n         * > This property only limits the number of choice items that can be selected by users. You can select any number of choice items in code, regardless of the `maxSelectedChoices` value.\n         * @see minSelectedChoices\n         */\n        get: function () {\n            return this.getPropertyValue(\"maxSelectedChoices\");\n        },\n        set: function (val) {\n            if (val < 0)\n                val = 0;\n            this.setPropertyValue(\"maxSelectedChoices\", val);\n            this.filterItems();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionCheckboxModel.prototype, \"minSelectedChoices\", {\n        /**\n         * Specifies the minimum number of selected choices.\n         *\n         * Default value: 0 (unlimited)\n         *\n         * > This property only limits the number of choice items that can be selected by users. You can select any number of choice items in code, regardless of the `minSelectedChoices` value.\n         * @see maxSelectedChoices\n         */\n        get: function () {\n            return this.getPropertyValue(\"minSelectedChoices\");\n        },\n        set: function (val) {\n            if (val < 0)\n                val = 0;\n            this.setPropertyValue(\"minSelectedChoices\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionCheckboxModel.prototype, \"selectedChoices\", {\n        /**\n         * An array of selected choice items. Includes the \"Other\" and \"None\" choice items if they are selected, but not \"Select All\". Items are sorted in the order they were selected.\n         * @see visibleChoices\n         * @see enabledChoices\n         */\n        get: function () {\n            if (this.isEmpty())\n                return [];\n            var val = this.renderedValue;\n            var allChoices = !!this.defaultSelectedItemValues ? [].concat(this.defaultSelectedItemValues, this.visibleChoices) : this.visibleChoices;\n            var itemValues = val.map(function (item) { return _itemvalue__WEBPACK_IMPORTED_MODULE_4__[\"ItemValue\"].getItemByValue(allChoices, item); }).filter(function (item) { return !!item; });\n            if (!itemValues.length && !this.selectedItemValues) {\n                this.updateSelectedItemValues();\n            }\n            return this.validateItemValues(itemValues);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionCheckboxModel.prototype, \"selectedItems\", {\n        get: function () { return this.selectedChoices; },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionCheckboxModel.prototype, \"hasFilteredValue\", {\n        get: function () { return !!this.valuePropertyName; },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionCheckboxModel.prototype.getFilteredValue = function () {\n        if (this.hasFilteredValue)\n            return this.renderedValue;\n        return _super.prototype.getFilteredValue.call(this);\n    };\n    QuestionCheckboxModel.prototype.getMultipleSelectedItems = function () {\n        return this.selectedChoices;\n    };\n    QuestionCheckboxModel.prototype.validateItemValues = function (itemValues) {\n        var _this = this;\n        if (!!itemValues.length)\n            return itemValues;\n        var selectedItemValues = this.selectedItemValues;\n        if (!!selectedItemValues && !!selectedItemValues.length) {\n            this.defaultSelectedItemValues = [].concat(selectedItemValues);\n            return selectedItemValues;\n        }\n        var val = this.renderedValue;\n        return val.map(function (item) { return _this.createItemValue(item); });\n    };\n    QuestionCheckboxModel.prototype.getAnswerCorrectIgnoreOrder = function () { return true; };\n    QuestionCheckboxModel.prototype.onCheckForErrors = function (errors, isOnValueChanged) {\n        _super.prototype.onCheckForErrors.call(this, errors, isOnValueChanged);\n        if (isOnValueChanged)\n            return;\n        if (this.minSelectedChoices > 0 && this.checkMinSelectedChoicesUnreached()) {\n            var minError = new _error__WEBPACK_IMPORTED_MODULE_6__[\"CustomError\"](this.getLocalizationFormatString(\"minSelectError\", this.minSelectedChoices), this);\n            errors.push(minError);\n        }\n    };\n    QuestionCheckboxModel.prototype.onEnableItemCallBack = function (item) {\n        if (!this.shouldCheckMaxSelectedChoices())\n            return true;\n        return this.isItemSelected(item);\n    };\n    QuestionCheckboxModel.prototype.onAfterRunItemsEnableCondition = function () {\n        if (this.maxSelectedChoices < 1) {\n            this.selectAllItem.setIsEnabled(true);\n            this.otherItem.setIsEnabled(true);\n            return;\n        }\n        if (this.hasSelectAll) {\n            this.selectAllItem.setIsEnabled(this.maxSelectedChoices >= this.activeChoices.length);\n        }\n        if (this.hasOther) {\n            this.otherItem.setIsEnabled(!this.shouldCheckMaxSelectedChoices() || this.isOtherSelected);\n        }\n    };\n    QuestionCheckboxModel.prototype.shouldCheckMaxSelectedChoices = function () {\n        if (this.maxSelectedChoices < 1)\n            return false;\n        var val = this.value;\n        var len = !Array.isArray(val) ? 0 : val.length;\n        return len >= this.maxSelectedChoices;\n    };\n    QuestionCheckboxModel.prototype.checkMinSelectedChoicesUnreached = function () {\n        if (this.minSelectedChoices < 1)\n            return false;\n        var val = this.value;\n        var len = !Array.isArray(val) ? 0 : val.length;\n        return len < this.minSelectedChoices;\n    };\n    QuestionCheckboxModel.prototype.getItemClassCore = function (item, options) {\n        var __dummy_value = this.value; //trigger dependencies from koValue for knockout\n        options.isSelectAllItem = item === this.selectAllItem;\n        return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_5__[\"CssClassBuilder\"]()\n            .append(_super.prototype.getItemClassCore.call(this, item, options))\n            .append(this.cssClasses.itemSelectAll, options.isSelectAllItem)\n            .toString();\n    };\n    QuestionCheckboxModel.prototype.updateValueFromSurvey = function (newValue) {\n        _super.prototype.updateValueFromSurvey.call(this, newValue);\n        this.invisibleOldValues = {};\n    };\n    QuestionCheckboxModel.prototype.setDefaultValue = function () {\n        _super.prototype.setDefaultValue.call(this);\n        var val = this.defaultValue;\n        if (Array.isArray(val)) {\n            for (var i = 0; i < val.length; i++) {\n                var rVal = this.getRealValue(val[i]);\n                if (this.canClearValueAnUnknown(rVal)) {\n                    this.addIntoInvisibleOldValues(rVal);\n                }\n            }\n        }\n    };\n    QuestionCheckboxModel.prototype.addIntoInvisibleOldValues = function (val) {\n        this.invisibleOldValues[val] = val;\n    };\n    QuestionCheckboxModel.prototype.hasValueToClearIncorrectValues = function () {\n        return _super.prototype.hasValueToClearIncorrectValues.call(this) || !_helpers__WEBPACK_IMPORTED_MODULE_3__[\"Helpers\"].isValueEmpty(this.invisibleOldValues);\n    };\n    QuestionCheckboxModel.prototype.setNewValue = function (newValue) {\n        if (!this.isChangingValueOnClearIncorrect) {\n            this.invisibleOldValues = {};\n        }\n        newValue = this.valueFromData(newValue);\n        var value = this.value;\n        if (!newValue)\n            newValue = [];\n        if (!value)\n            value = [];\n        if (this.isTwoValueEquals(value, newValue))\n            return;\n        if (this.hasNone) {\n            var prevNoneIndex = this.noneIndexInArray(value);\n            var newNoneIndex = this.noneIndexInArray(newValue);\n            if (prevNoneIndex > -1) {\n                if (newNoneIndex > -1 && newValue.length > 1) {\n                    newValue.splice(newNoneIndex, 1);\n                }\n            }\n            else {\n                if (newNoneIndex > -1) {\n                    newValue.splice(0, newValue.length);\n                    newValue.push(this.noneItem.value);\n                }\n            }\n        }\n        _super.prototype.setNewValue.call(this, newValue);\n    };\n    QuestionCheckboxModel.prototype.getIsMultipleValue = function () {\n        return true;\n    };\n    QuestionCheckboxModel.prototype.getCommentFromValue = function (newValue) {\n        var ind = this.getFirstUnknownIndex(newValue);\n        if (ind < 0)\n            return \"\";\n        return newValue[ind];\n    };\n    QuestionCheckboxModel.prototype.setOtherValueIntoValue = function (newValue) {\n        var ind = this.getFirstUnknownIndex(newValue);\n        if (ind < 0)\n            return newValue;\n        newValue.splice(ind, 1, this.otherItem.value);\n        return newValue;\n    };\n    QuestionCheckboxModel.prototype.getFirstUnknownIndex = function (newValue) {\n        if (!Array.isArray(newValue))\n            return -1;\n        for (var i = 0; i < newValue.length; i++) {\n            if (this.hasUnknownValue(newValue[i], false, false))\n                return i;\n        }\n        return -1;\n    };\n    QuestionCheckboxModel.prototype.noneIndexInArray = function (val) {\n        if (!val || !Array.isArray(val))\n            return -1;\n        var noneValue = this.noneItem.value;\n        for (var i = 0; i < val.length; i++) {\n            if (val[i] == noneValue)\n                return i;\n        }\n        return -1;\n    };\n    QuestionCheckboxModel.prototype.canUseFilteredChoices = function () {\n        return !this.hasSelectAll && _super.prototype.canUseFilteredChoices.call(this);\n    };\n    QuestionCheckboxModel.prototype.supportSelectAll = function () {\n        return this.isSupportProperty(\"showSelectAllItem\");\n    };\n    QuestionCheckboxModel.prototype.addToVisibleChoices = function (items, isAddAll) {\n        if (this.supportSelectAll() && this.canShowOptionItem(this.selectAllItem, isAddAll, this.hasSelectAll)) {\n            items.unshift(this.selectAllItem);\n        }\n        _super.prototype.addToVisibleChoices.call(this, items, isAddAll);\n    };\n    QuestionCheckboxModel.prototype.isHeadChoice = function (item, question) {\n        return (item === question.selectAllItem);\n    };\n    QuestionCheckboxModel.prototype.isItemInList = function (item) {\n        if (item == this.selectAllItem)\n            return this.hasSelectAll;\n        return _super.prototype.isItemInList.call(this, item);\n    };\n    QuestionCheckboxModel.prototype.getDisplayValueCore = function (keysAsText, value) {\n        if (!Array.isArray(value))\n            return _super.prototype.getDisplayValueCore.call(this, keysAsText, value);\n        var valuePropName = this.valuePropertyName;\n        var onGetValueCallback = function (index) {\n            var val = value[index];\n            if (!!valuePropName && !!val[valuePropName]) {\n                val = val[valuePropName];\n            }\n            return val;\n        };\n        return this.getDisplayArrayValue(keysAsText, value, onGetValueCallback);\n    };\n    QuestionCheckboxModel.prototype.clearIncorrectValuesCore = function () {\n        this.clearIncorrectAndDisabledValues(false);\n    };\n    QuestionCheckboxModel.prototype.clearDisabledValuesCore = function () {\n        this.clearIncorrectAndDisabledValues(true);\n    };\n    QuestionCheckboxModel.prototype.clearIncorrectAndDisabledValues = function (clearDisabled) {\n        var val = this.value;\n        var hasChanged = false;\n        var restoredValues = this.restoreValuesFromInvisible();\n        if (!val && restoredValues.length == 0)\n            return;\n        if (!Array.isArray(val) || val.length == 0) {\n            this.isChangingValueOnClearIncorrect = true;\n            if (!clearDisabled) {\n                if (this.hasComment) {\n                    this.value = null;\n                }\n                else {\n                    this.clearValue();\n                }\n            }\n            this.isChangingValueOnClearIncorrect = false;\n            if (restoredValues.length == 0)\n                return;\n            val = [];\n        }\n        var newValue = [];\n        for (var i = 0; i < val.length; i++) {\n            var rItemVal = this.getRealValue(val[i]);\n            var isUnkown = this.canClearValueAnUnknown(rItemVal);\n            if ((!clearDisabled && !isUnkown) ||\n                (clearDisabled && !this.isValueDisabled(rItemVal))) {\n                newValue.push(val[i]);\n            }\n            else {\n                hasChanged = true;\n                if (isUnkown) {\n                    this.addIntoInvisibleOldValues(val[i]);\n                }\n            }\n        }\n        for (var i = 0; i < restoredValues.length; i++) {\n            newValue.push(restoredValues[i]);\n            hasChanged = true;\n        }\n        if (!hasChanged)\n            return;\n        this.isChangingValueOnClearIncorrect = true;\n        if (newValue.length == 0) {\n            this.clearValue();\n        }\n        else {\n            this.value = newValue;\n        }\n        this.isChangingValueOnClearIncorrect = false;\n    };\n    QuestionCheckboxModel.prototype.restoreValuesFromInvisible = function () {\n        var res = [];\n        var visItems = this.visibleChoices;\n        for (var i = 0; i < visItems.length; i++) {\n            var val = visItems[i].value;\n            if (_helpers__WEBPACK_IMPORTED_MODULE_3__[\"Helpers\"].isTwoValueEquals(val, this.invisibleOldValues[val])) {\n                if (!this.isItemSelected(visItems[i])) {\n                    res.push(val);\n                }\n                delete this.invisibleOldValues[val];\n            }\n        }\n        return res;\n    };\n    QuestionCheckboxModel.prototype.getConditionJson = function (operator, path) {\n        if (operator === void 0) { operator = null; }\n        if (path === void 0) { path = null; }\n        var json = _super.prototype.getConditionJson.call(this);\n        if (operator == \"contains\" || operator == \"notcontains\") {\n            json[\"type\"] = \"radiogroup\";\n        }\n        json[\"maxSelectedChoices\"] = 0;\n        json[\"minSelectedChoices\"] = 0;\n        return json;\n    };\n    QuestionCheckboxModel.prototype.isAnswerCorrect = function () {\n        return _helpers__WEBPACK_IMPORTED_MODULE_3__[\"Helpers\"].isArrayContainsEqual(this.value, this.correctAnswer);\n    };\n    QuestionCheckboxModel.prototype.setDefaultValueWithOthers = function () {\n        this.value = this.renderedValueFromDataCore(this.defaultValue);\n    };\n    QuestionCheckboxModel.prototype.getIsItemValue = function (val, item) {\n        if (!val || !Array.isArray(val))\n            return false;\n        return val.indexOf(item.value) >= 0;\n    };\n    QuestionCheckboxModel.prototype.valueFromData = function (val) {\n        if (!val)\n            return val;\n        if (!Array.isArray(val))\n            return [_super.prototype.valueFromData.call(this, val)];\n        var value = [];\n        for (var i = 0; i < val.length; i++) {\n            var choiceitem = _itemvalue__WEBPACK_IMPORTED_MODULE_4__[\"ItemValue\"].getItemByValue(this.activeChoices, val[i]);\n            if (!!choiceitem) {\n                value.push(choiceitem.value);\n            }\n            else {\n                value.push(val[i]);\n            }\n        }\n        return value;\n    };\n    QuestionCheckboxModel.prototype.rendredValueFromData = function (val) {\n        val = this.convertValueFromObject(val);\n        return _super.prototype.rendredValueFromData.call(this, val);\n    };\n    QuestionCheckboxModel.prototype.rendredValueToData = function (val) {\n        val = _super.prototype.rendredValueToData.call(this, val);\n        return this.convertValueToObject(val);\n    };\n    QuestionCheckboxModel.prototype.convertValueFromObject = function (val) {\n        if (!this.valuePropertyName)\n            return val;\n        return _helpers__WEBPACK_IMPORTED_MODULE_3__[\"Helpers\"].convertArrayObjectToValue(val, this.valuePropertyName);\n    };\n    QuestionCheckboxModel.prototype.convertValueToObject = function (val) {\n        if (!this.valuePropertyName)\n            return val;\n        var dest = undefined;\n        if (!!this.survey && this.survey.questionsByValueName(this.getValueName()).length > 1) {\n            dest = this.data.getValue(this.getValueName());\n        }\n        return _helpers__WEBPACK_IMPORTED_MODULE_3__[\"Helpers\"].convertArrayValueToObject(val, this.valuePropertyName, dest);\n    };\n    QuestionCheckboxModel.prototype.renderedValueFromDataCore = function (val) {\n        if (!val || !Array.isArray(val))\n            val = [];\n        if (!this.hasActiveChoices)\n            return val;\n        for (var i = 0; i < val.length; i++) {\n            if (val[i] == this.otherItem.value)\n                return val;\n            if (this.hasUnknownValue(val[i], true, false)) {\n                this.otherValue = val[i];\n                var newVal = val.slice();\n                newVal[i] = this.otherItem.value;\n                return newVal;\n            }\n        }\n        return val;\n    };\n    QuestionCheckboxModel.prototype.rendredValueToDataCore = function (val) {\n        if (!val || !val.length)\n            return val;\n        for (var i = 0; i < val.length; i++) {\n            if (val[i] == this.otherItem.value) {\n                if (this.needConvertRenderedOtherToDataValue()) {\n                    var newVal = val.slice();\n                    newVal[i] = this.otherValue;\n                    return newVal;\n                }\n            }\n        }\n        return val;\n    };\n    QuestionCheckboxModel.prototype.selectOtherValueFromComment = function (val) {\n        var newVal = [];\n        var rendVal = this.renderedValue;\n        if (Array.isArray(rendVal)) {\n            for (var i = 0; i < rendVal.length; i++) {\n                if (rendVal[i] !== this.otherItem.value) {\n                    newVal.push(rendVal[i]);\n                }\n            }\n        }\n        if (val) {\n            newVal.push(this.otherItem.value);\n        }\n        this.value = newVal;\n    };\n    Object.defineProperty(QuestionCheckboxModel.prototype, \"checkBoxSvgPath\", {\n        get: function () {\n            return \"M5,13l2-2l3,3l7-7l2,2l-9,9L5,13z\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionCheckboxModel.prototype, \"isNewA11yStructure\", {\n        //a11y\n        get: function () {\n            return true;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionCheckboxModel.prototype, \"a11y_input_ariaRole\", {\n        get: function () {\n            return \"listbox\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    return QuestionCheckboxModel;\n}(_question_baseselect__WEBPACK_IMPORTED_MODULE_2__[\"QuestionCheckboxBase\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"checkbox\", [\n    { name: \"showSelectAllItem:boolean\", alternativeName: \"hasSelectAll\" },\n    { name: \"separateSpecialChoices\", visible: true },\n    { name: \"maxSelectedChoices:number\", default: 0 },\n    { name: \"minSelectedChoices:number\", default: 0 },\n    {\n        name: \"selectAllText\",\n        serializationProperty: \"locSelectAllText\",\n        dependsOn: \"showSelectAllItem\",\n        visibleIf: function (obj) {\n            return obj.hasSelectAll;\n        }\n    },\n    {\n        name: \"valuePropertyName\",\n        category: \"data\"\n    },\n    { name: \"itemComponent\", visible: false, default: \"survey-checkbox-item\" }\n], function () {\n    return new QuestionCheckboxModel(\"\");\n}, \"checkboxbase\");\n_questionfactory__WEBPACK_IMPORTED_MODULE_1__[\"QuestionFactory\"].Instance.registerQuestion(\"checkbox\", function (name) {\n    var q = new QuestionCheckboxModel(name);\n    q.choices = _questionfactory__WEBPACK_IMPORTED_MODULE_1__[\"QuestionFactory\"].DefaultChoices;\n    return q;\n});\n\n\n/***/ }),\n\n/***/ \"./src/question_comment.ts\":\n/*!*********************************!*\\\n  !*** ./src/question_comment.ts ***!\n  \\*********************************/\n/*! exports provided: QuestionCommentModel */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_2763266__) {\n\n\"use strict\";\n__nested_webpack_require_2763266__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_2763266__.d(__nested_webpack_exports__, \"QuestionCommentModel\", function() { return QuestionCommentModel; });\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_2763266__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_2763266__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\n/* harmony import */ var _question_textbase__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_2763266__(/*! ./question_textbase */ \"./src/question_textbase.ts\");\n/* harmony import */ var _utils_utils__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_2763266__(/*! ./utils/utils */ \"./src/utils/utils.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_2763266__(/*! ./settings */ \"./src/settings.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n\n\n\n\n\n/**\n * A class that describes the Long Text question type.\n *\n * [View Demo](https://surveyjs.io/form-library/examples/questiontype-comment/ (linkStyle))\n */\nvar QuestionCommentModel = /** @class */ (function (_super) {\n    __extends(QuestionCommentModel, _super);\n    function QuestionCommentModel() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Object.defineProperty(QuestionCommentModel.prototype, \"rows\", {\n        /**\n         * Specifies the visible height of the comment area, measured in lines.\n         *\n         * The value of this property is passed on to the `rows` attribute of the underlying `<textarea>` element.\n         */\n        get: function () {\n            return this.getPropertyValue(\"rows\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"rows\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionCommentModel.prototype, \"cols\", {\n        get: function () {\n            return this.getPropertyValue(\"cols\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"cols\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionCommentModel.prototype, \"acceptCarriageReturn\", {\n        /**\n         * Specifies whether the question allows line breaks.\n         *\n         * When this property is enabled, a user can press Enter to insert line breaks. They are saved as `\\n` in survey results. The Comment question also recognizes and interprets the `\\n` sequence as a line break when you set the question `value` in code.\n         */\n        get: function () {\n            return this.getPropertyValue(\"acceptCarriageReturn\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"acceptCarriageReturn\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionCommentModel.prototype, \"autoGrow\", {\n        /**\n         * Specifies whether the comment area automatically increases its height to accomodate multi-line content.\n         *\n         * Default value: `false` (inherited from `SurveyModel`'s [`autoGrowComment`](https://surveyjs.io/form-library/documentation/surveymodel#autoGrowComment) property)\n         * @see allowResize\n         */\n        get: function () {\n            return this.getPropertyValue(\"autoGrow\") || (this.survey && this.survey.autoGrowComment);\n        },\n        set: function (val) {\n            this.setPropertyValue(\"autoGrow\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionCommentModel.prototype, \"allowResize\", {\n        /**\n         * Specifies whether to display a resize handle for the comment area.\n         *\n         * Default value: `true` (inherited from `SurveyModel`'s [`allowResizeComment`](https://surveyjs.io/form-library/documentation/surveymodel#allowResizeComment) property)\n         * @see autoGrow\n         */\n        get: function () {\n            return this.getPropertyValue(\"allowResize\") && (this.survey && this.survey.allowResizeComment);\n        },\n        set: function (val) {\n            this.setPropertyValue(\"allowResize\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionCommentModel.prototype, \"resizeStyle\", {\n        get: function () {\n            return this.allowResize ? \"both\" : \"none\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionCommentModel.prototype.getType = function () {\n        return \"comment\";\n    };\n    QuestionCommentModel.prototype.afterRenderQuestionElement = function (el) {\n        var root = _settings__WEBPACK_IMPORTED_MODULE_4__[\"settings\"].environment.root;\n        this.element = root.getElementById(this.inputId) || el;\n        this.updateElement();\n        _super.prototype.afterRenderQuestionElement.call(this, el);\n    };\n    QuestionCommentModel.prototype.updateElement = function () {\n        var _this = this;\n        if (this.element && this.autoGrow) {\n            setTimeout(function () { return Object(_utils_utils__WEBPACK_IMPORTED_MODULE_3__[\"increaseHeightByContent\"])(_this.element); }, 1);\n        }\n    };\n    QuestionCommentModel.prototype.beforeDestroyQuestionElement = function (el) {\n        _super.prototype.beforeDestroyQuestionElement.call(this, el);\n        this.element = undefined;\n    };\n    QuestionCommentModel.prototype.onInput = function (event) {\n        if (this.isInputTextUpdate)\n            this.value = event.target.value;\n        else\n            this.updateElement();\n        this.updateRemainingCharacterCounter(event.target.value);\n    };\n    QuestionCommentModel.prototype.onKeyDown = function (event) {\n        this.checkForUndo(event);\n        if (!this.acceptCarriageReturn && (event.key === \"Enter\" || event.keyCode === 13)) {\n            event.preventDefault();\n            event.stopPropagation();\n        }\n    };\n    QuestionCommentModel.prototype.onValueChanged = function () {\n        _super.prototype.onValueChanged.call(this);\n        this.updateElement();\n    };\n    QuestionCommentModel.prototype.setNewValue = function (newValue) {\n        if (!this.acceptCarriageReturn && !!newValue) {\n            // eslint-disable-next-line no-control-regex\n            newValue = newValue.replace(new RegExp(\"(\\r\\n|\\n|\\r)\", \"gm\"), \"\");\n        }\n        _super.prototype.setNewValue.call(this, newValue);\n    };\n    QuestionCommentModel.prototype.getValueSeparator = function () { return \"\\n\"; };\n    Object.defineProperty(QuestionCommentModel.prototype, \"className\", {\n        get: function () {\n            return (this.cssClasses ? this.getControlClass() : \"panel-comment-root\") || undefined;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    return QuestionCommentModel;\n}(_question_textbase__WEBPACK_IMPORTED_MODULE_2__[\"QuestionTextBase\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"comment\", [\n    { name: \"maxLength:number\", default: -1 },\n    { name: \"cols:number\", default: 50, visible: false, isSerializable: false },\n    { name: \"rows:number\", default: 4 },\n    { name: \"placeholder\",\n        alternativeName: \"placeHolder\",\n        serializationProperty: \"locPlaceholder\" },\n    {\n        name: \"textUpdateMode\",\n        default: \"default\",\n        choices: [\"default\", \"onBlur\", \"onTyping\"],\n    },\n    { name: \"autoGrow:boolean\" },\n    { name: \"allowResize:boolean\", default: true },\n    { name: \"acceptCarriageReturn:boolean\", default: true, visible: false }\n], function () {\n    return new QuestionCommentModel(\"\");\n}, \"textbase\");\n_questionfactory__WEBPACK_IMPORTED_MODULE_1__[\"QuestionFactory\"].Instance.registerQuestion(\"comment\", function (name) {\n    return new QuestionCommentModel(name);\n});\n\n\n/***/ }),\n\n/***/ \"./src/question_custom.ts\":\n/*!********************************!*\\\n  !*** ./src/question_custom.ts ***!\n  \\********************************/\n/*! exports provided: ComponentQuestionJSON, ComponentCollection, QuestionCustomModelBase, QuestionCustomModel, QuestionCompositeModel */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_2772201__) {\n\n\"use strict\";\n__nested_webpack_require_2772201__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_2772201__.d(__nested_webpack_exports__, \"ComponentQuestionJSON\", function() { return ComponentQuestionJSON; });\n/* harmony export (binding) */ __nested_webpack_require_2772201__.d(__nested_webpack_exports__, \"ComponentCollection\", function() { return ComponentCollection; });\n/* harmony export (binding) */ __nested_webpack_require_2772201__.d(__nested_webpack_exports__, \"QuestionCustomModelBase\", function() { return QuestionCustomModelBase; });\n/* harmony export (binding) */ __nested_webpack_require_2772201__.d(__nested_webpack_exports__, \"QuestionCustomModel\", function() { return QuestionCustomModel; });\n/* harmony export (binding) */ __nested_webpack_require_2772201__.d(__nested_webpack_exports__, \"QuestionCompositeModel\", function() { return QuestionCompositeModel; });\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_2772201__(/*! ./question */ \"./src/question.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_2772201__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _survey_element__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_2772201__(/*! ./survey-element */ \"./src/survey-element.ts\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_2772201__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _textPreProcessor__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_2772201__(/*! ./textPreProcessor */ \"./src/textPreProcessor.ts\");\n/* harmony import */ var _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_2772201__(/*! ./utils/cssClassBuilder */ \"./src/utils/cssClassBuilder.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n\n\n\n\n\n\nvar ComponentQuestionJSON = /** @class */ (function () {\n    function ComponentQuestionJSON(name, json) {\n        this.name = name;\n        this.json = json;\n        var self = this;\n        _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].addClass(name, [], function (json) {\n            return ComponentCollection.Instance.createQuestion(!!json ? json.name : \"\", self);\n        }, \"question\");\n        this.onInit();\n    }\n    ComponentQuestionJSON.prototype.onInit = function () {\n        if (!this.json.onInit)\n            return;\n        this.json.onInit();\n    };\n    ComponentQuestionJSON.prototype.onCreated = function (question) {\n        if (!this.json.onCreated)\n            return;\n        this.json.onCreated(question);\n    };\n    ComponentQuestionJSON.prototype.onLoaded = function (question) {\n        if (!this.json.onLoaded)\n            return;\n        this.json.onLoaded(question);\n    };\n    ComponentQuestionJSON.prototype.onAfterRender = function (question, htmlElement) {\n        if (!this.json.onAfterRender)\n            return;\n        this.json.onAfterRender(question, htmlElement);\n    };\n    ComponentQuestionJSON.prototype.onAfterRenderContentElement = function (question, element, htmlElement) {\n        if (!this.json.onAfterRenderContentElement)\n            return;\n        this.json.onAfterRenderContentElement(question, element, htmlElement);\n    };\n    ComponentQuestionJSON.prototype.onUpdateQuestionCssClasses = function (question, element, css) {\n        if (!this.json.onUpdateQuestionCssClasses)\n            return;\n        this.json.onUpdateQuestionCssClasses(question, element, css);\n    };\n    ComponentQuestionJSON.prototype.onPropertyChanged = function (question, propertyName, newValue) {\n        if (!this.json.onPropertyChanged)\n            return;\n        this.json.onPropertyChanged(question, propertyName, newValue);\n    };\n    ComponentQuestionJSON.prototype.onValueChanged = function (question, name, newValue) {\n        if (!this.json.onValueChanged)\n            return;\n        this.json.onValueChanged(question, name, newValue);\n    };\n    ComponentQuestionJSON.prototype.onValueChanging = function (question, name, newValue) {\n        if (!this.json.onValueChanging)\n            return newValue;\n        return this.json.onValueChanging(question, name, newValue);\n    };\n    ComponentQuestionJSON.prototype.onItemValuePropertyChanged = function (question, item, propertyName, name, newValue) {\n        if (!this.json.onItemValuePropertyChanged)\n            return;\n        this.json.onItemValuePropertyChanged(question, {\n            obj: item,\n            propertyName: propertyName,\n            name: name,\n            newValue: newValue,\n        });\n    };\n    ComponentQuestionJSON.prototype.getDisplayValue = function (keyAsText, value, question) {\n        if (!this.json.getDisplayValue)\n            return question.getDisplayValue(keyAsText, value);\n        return this.json.getDisplayValue(question);\n    };\n    ComponentQuestionJSON.prototype.setValueToQuestion = function (val) {\n        var converter = this.json.valueToQuestion || this.json.setValue;\n        return !!converter ? converter(val) : val;\n    };\n    ComponentQuestionJSON.prototype.getValueFromQuestion = function (val) {\n        var converter = this.json.valueFromQuestion || this.json.getValue;\n        return !!converter ? converter(val) : val;\n    };\n    Object.defineProperty(ComponentQuestionJSON.prototype, \"isComposite\", {\n        get: function () {\n            return !!this.json.elementsJSON || !!this.json.createElements;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    return ComponentQuestionJSON;\n}());\n\nvar ComponentCollection = /** @class */ (function () {\n    function ComponentCollection() {\n        this.customQuestionValues = [];\n    }\n    ComponentCollection.prototype.add = function (json) {\n        if (!json)\n            return;\n        var name = json.name;\n        if (!name) {\n            throw \"Attribute name is missed\";\n        }\n        name = name.toLowerCase();\n        if (!!this.getCustomQuestionByName(name)) {\n            throw \"There is already registered custom question with name '\" +\n                name +\n                \"'\";\n        }\n        if (!!_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].findClass(name)) {\n            throw \"There is already class with name '\" + name + \"'\";\n        }\n        var customQuestion = new ComponentQuestionJSON(name, json);\n        if (!!this.onAddingJson)\n            this.onAddingJson(name, customQuestion.isComposite);\n        this.customQuestionValues.push(customQuestion);\n    };\n    Object.defineProperty(ComponentCollection.prototype, \"items\", {\n        get: function () {\n            return this.customQuestionValues;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    ComponentCollection.prototype.getCustomQuestionByName = function (name) {\n        for (var i = 0; i < this.customQuestionValues.length; i++) {\n            if (this.customQuestionValues[i].name == name)\n                return this.customQuestionValues[i];\n        }\n        return null;\n    };\n    ComponentCollection.prototype.clear = function () {\n        for (var i = 0; i < this.customQuestionValues.length; i++) {\n            _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].removeClass(this.customQuestionValues[i].name);\n        }\n        this.customQuestionValues = [];\n    };\n    ComponentCollection.prototype.createQuestion = function (name, questionJSON) {\n        if (!!questionJSON.isComposite)\n            return this.createCompositeModel(name, questionJSON);\n        return this.createCustomModel(name, questionJSON);\n    };\n    ComponentCollection.prototype.createCompositeModel = function (name, questionJSON) {\n        if (!!this.onCreateComposite)\n            return this.onCreateComposite(name, questionJSON);\n        return new QuestionCompositeModel(name, questionJSON);\n    };\n    ComponentCollection.prototype.createCustomModel = function (name, questionJSON) {\n        if (!!this.onCreateCustom)\n            return this.onCreateCustom(name, questionJSON);\n        return new QuestionCustomModel(name, questionJSON);\n    };\n    ComponentCollection.Instance = new ComponentCollection();\n    return ComponentCollection;\n}());\n\nvar QuestionCustomModelBase = /** @class */ (function (_super) {\n    __extends(QuestionCustomModelBase, _super);\n    function QuestionCustomModelBase(name, customQuestion) {\n        var _this = _super.call(this, name) || this;\n        _this.customQuestion = customQuestion;\n        _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"CustomPropertiesCollection\"].createProperties(_this);\n        _survey_element__WEBPACK_IMPORTED_MODULE_2__[\"SurveyElement\"].CreateDisabledDesignElements = true;\n        _this.createWrapper();\n        _survey_element__WEBPACK_IMPORTED_MODULE_2__[\"SurveyElement\"].CreateDisabledDesignElements = false;\n        if (!!_this.customQuestion) {\n            _this.customQuestion.onCreated(_this);\n        }\n        return _this;\n    }\n    QuestionCustomModelBase.prototype.getType = function () {\n        return !!this.customQuestion ? this.customQuestion.name : \"custom\";\n    };\n    QuestionCustomModelBase.prototype.locStrsChanged = function () {\n        _super.prototype.locStrsChanged.call(this);\n        if (!!this.getElement()) {\n            this.getElement().locStrsChanged();\n        }\n    };\n    QuestionCustomModelBase.prototype.createWrapper = function () { };\n    QuestionCustomModelBase.prototype.onPropertyValueChanged = function (name, oldValue, newValue) {\n        _super.prototype.onPropertyValueChanged.call(this, name, oldValue, newValue);\n        if (!!this.customQuestion && !this.isLoadingFromJson) {\n            this.customQuestion.onPropertyChanged(this, name, newValue);\n        }\n    };\n    QuestionCustomModelBase.prototype.itemValuePropertyChanged = function (item, name, oldValue, newValue) {\n        _super.prototype.itemValuePropertyChanged.call(this, item, name, oldValue, newValue);\n        if (!!this.customQuestion && !this.isLoadingFromJson) {\n            this.customQuestion.onItemValuePropertyChanged(this, item, item.ownerPropertyName, name, newValue);\n        }\n    };\n    QuestionCustomModelBase.prototype.onFirstRendering = function () {\n        var el = this.getElement();\n        if (!!el) {\n            el.onFirstRendering();\n        }\n        _super.prototype.onFirstRendering.call(this);\n    };\n    QuestionCustomModelBase.prototype.onHidingContent = function () {\n        _super.prototype.onHidingContent.call(this);\n        var el = this.getElement();\n        if (!!el) {\n            el.onHidingContent();\n        }\n    };\n    QuestionCustomModelBase.prototype.getProgressInfo = function () {\n        var res = _super.prototype.getProgressInfo.call(this);\n        if (!!this.getElement()) {\n            res = this.getElement().getProgressInfo();\n        }\n        if (this.isRequired && res.requiredQuestionCount == 0) {\n            res.requiredQuestionCount = 1;\n            if (!this.isEmpty()) {\n                res.answeredQuestionCount = 1;\n            }\n        }\n        return res;\n    };\n    QuestionCustomModelBase.prototype.initElement = function (el) {\n        if (!el)\n            return;\n        el.setSurveyImpl(this);\n        el.disableDesignActions = true;\n    };\n    QuestionCustomModelBase.prototype.setSurveyImpl = function (value, isLight) {\n        this.isSettingValOnLoading = true;\n        _super.prototype.setSurveyImpl.call(this, value, isLight);\n        this.initElement(this.getElement());\n        this.isSettingValOnLoading = false;\n    };\n    QuestionCustomModelBase.prototype.onSurveyLoad = function () {\n        _super.prototype.onSurveyLoad.call(this);\n        if (!!this.getElement()) {\n            this.getElement().onSurveyLoad();\n            this.customQuestion.onLoaded(this);\n        }\n    };\n    QuestionCustomModelBase.prototype.afterRenderQuestionElement = function (el) {\n        //Do nothing\n    };\n    QuestionCustomModelBase.prototype.afterRender = function (el) {\n        _super.prototype.afterRender.call(this, el);\n        if (!!this.customQuestion) {\n            this.customQuestion.onAfterRender(this, el);\n        }\n    };\n    QuestionCustomModelBase.prototype.onUpdateQuestionCssClasses = function (element, css) {\n        if (!!this.customQuestion) {\n            this.customQuestion.onUpdateQuestionCssClasses(this, element, css);\n        }\n    };\n    QuestionCustomModelBase.prototype.setQuestionValue = function (newValue, updateIsAnswered) {\n        if (updateIsAnswered === void 0) { updateIsAnswered = true; }\n        _super.prototype.setQuestionValue.call(this, newValue, updateIsAnswered);\n        this.updateElementCss();\n    };\n    QuestionCustomModelBase.prototype.setNewValue = function (newValue) {\n        _super.prototype.setNewValue.call(this, newValue);\n        this.updateElementCss();\n    };\n    //ISurveyImpl\n    QuestionCustomModelBase.prototype.getSurveyData = function () {\n        return this;\n    };\n    QuestionCustomModelBase.prototype.getTextProcessor = function () {\n        return this.textProcessor;\n    };\n    //ISurveyData\n    QuestionCustomModelBase.prototype.getValue = function (name) {\n        return this.value;\n    };\n    QuestionCustomModelBase.prototype.setValue = function (name, newValue, locNotification, allowNotifyValueChanged) {\n        if (!this.data)\n            return;\n        var newName = this.convertDataName(name);\n        var valueForSurvey = this.convertDataValue(name, newValue);\n        if (this.valueToDataCallback) {\n            valueForSurvey = this.valueToDataCallback(valueForSurvey);\n        }\n        this.data.setValue(newName, valueForSurvey, locNotification, allowNotifyValueChanged);\n        this.updateIsAnswered();\n        this.updateElementCss();\n        if (!!this.customQuestion) {\n            this.customQuestion.onValueChanged(this, name, newValue);\n        }\n    };\n    QuestionCustomModelBase.prototype.getQuestionByName = function (name) {\n        return undefined;\n    };\n    QuestionCustomModelBase.prototype.isValueChanging = function (name, newValue) {\n        if (!!this.customQuestion) {\n            var qValue = newValue;\n            newValue = this.customQuestion.onValueChanging(this, name, newValue);\n            if (!_helpers__WEBPACK_IMPORTED_MODULE_3__[\"Helpers\"].isTwoValueEquals(newValue, qValue)) {\n                var q = this.getQuestionByName(name);\n                if (!!q) {\n                    q.value = newValue;\n                    return true;\n                }\n            }\n        }\n        return false;\n    };\n    QuestionCustomModelBase.prototype.convertDataName = function (name) {\n        return this.getValueName();\n    };\n    QuestionCustomModelBase.prototype.convertDataValue = function (name, newValue) {\n        return newValue;\n    };\n    QuestionCustomModelBase.prototype.getVariable = function (name) {\n        return !!this.data ? this.data.getVariable(name) : null;\n    };\n    QuestionCustomModelBase.prototype.setVariable = function (name, newValue) {\n        if (!this.data)\n            return;\n        this.data.setVariable(name, newValue);\n    };\n    QuestionCustomModelBase.prototype.getComment = function (name) {\n        return !!this.data ? this.data.getComment(this.getValueName()) : \"\";\n    };\n    QuestionCustomModelBase.prototype.setComment = function (name, newValue, locNotification) {\n        if (!this.data)\n            return;\n        this.data.setComment(this.getValueName(), newValue, locNotification);\n    };\n    QuestionCustomModelBase.prototype.getAllValues = function () {\n        return !!this.data ? this.data.getAllValues() : {};\n    };\n    QuestionCustomModelBase.prototype.getFilteredValues = function () {\n        return !!this.data ? this.data.getFilteredValues() : {};\n    };\n    QuestionCustomModelBase.prototype.getFilteredProperties = function () {\n        return !!this.data ? this.data.getFilteredProperties() : {};\n    };\n    QuestionCustomModelBase.prototype.findQuestionByName = function (name) {\n        return !!this.data ? this.data.findQuestionByName(name) : null;\n    };\n    //IPanel\n    QuestionCustomModelBase.prototype.addElement = function (element, index) { };\n    QuestionCustomModelBase.prototype.removeElement = function (element) {\n        return false;\n    };\n    QuestionCustomModelBase.prototype.getQuestionTitleLocation = function () {\n        return \"left\";\n    };\n    QuestionCustomModelBase.prototype.getQuestionStartIndex = function () {\n        return this.getStartIndex();\n    };\n    QuestionCustomModelBase.prototype.getChildrenLayoutType = function () {\n        return \"row\";\n    };\n    QuestionCustomModelBase.prototype.elementWidthChanged = function (el) { };\n    Object.defineProperty(QuestionCustomModelBase.prototype, \"elements\", {\n        get: function () {\n            return [];\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionCustomModelBase.prototype.indexOf = function (el) {\n        return -1;\n    };\n    QuestionCustomModelBase.prototype.ensureRowsVisibility = function () {\n        // do nothing\n    };\n    QuestionCustomModelBase.prototype.validateContainerOnly = function () {\n        // do nothing\n    };\n    QuestionCustomModelBase.prototype.getQuestionErrorLocation = function () {\n        return this.getErrorLocation();\n    };\n    QuestionCustomModelBase.prototype.getContentDisplayValueCore = function (keyAsText, value, question) {\n        if (!question)\n            return _super.prototype.getDisplayValueCore.call(this, keyAsText, value);\n        return this.customQuestion.getDisplayValue(keyAsText, value, question);\n    };\n    return QuestionCustomModelBase;\n}(_question__WEBPACK_IMPORTED_MODULE_0__[\"Question\"]));\n\nvar QuestionCustomModel = /** @class */ (function (_super) {\n    __extends(QuestionCustomModel, _super);\n    function QuestionCustomModel() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    QuestionCustomModel.prototype.getTemplate = function () {\n        return \"custom\";\n    };\n    QuestionCustomModel.prototype.createWrapper = function () {\n        this.questionWrapper = this.createQuestion();\n    };\n    QuestionCustomModel.prototype.getElement = function () {\n        return this.contentQuestion;\n    };\n    QuestionCustomModel.prototype.onAnyValueChanged = function (name, questionName) {\n        _super.prototype.onAnyValueChanged.call(this, name, questionName);\n        if (!!this.contentQuestion) {\n            this.contentQuestion.onAnyValueChanged(name, questionName);\n        }\n    };\n    QuestionCustomModel.prototype.getQuestionByName = function (name) {\n        return this.contentQuestion;\n    };\n    QuestionCustomModel.prototype.setValue = function (name, newValue, locNotification, allowNotifyValueChanged) {\n        if (this.isValueChanging(name, newValue))\n            return;\n        _super.prototype.setValue.call(this, name, newValue, locNotification, allowNotifyValueChanged);\n    };\n    QuestionCustomModel.prototype.onSetData = function () {\n        _super.prototype.onSetData.call(this);\n        if (!!this.survey && !this.isEmpty()) {\n            this.setValue(this.name, this.value, false, this.allowNotifyValueChanged);\n        }\n    };\n    QuestionCustomModel.prototype.hasErrors = function (fireCallback, rec) {\n        if (fireCallback === void 0) { fireCallback = true; }\n        if (rec === void 0) { rec = null; }\n        if (!this.contentQuestion)\n            return false;\n        var res = this.contentQuestion.hasErrors(fireCallback, rec);\n        this.errors = [];\n        for (var i = 0; i < this.contentQuestion.errors.length; i++) {\n            this.errors.push(this.contentQuestion.errors[i]);\n        }\n        if (!res) {\n            res = _super.prototype.hasErrors.call(this, fireCallback, rec);\n        }\n        this.updateElementCss();\n        return res;\n    };\n    QuestionCustomModel.prototype.focus = function (onError) {\n        if (onError === void 0) { onError = false; }\n        if (!!this.contentQuestion) {\n            this.contentQuestion.focus(onError);\n        }\n        else {\n            _super.prototype.focus.call(this, onError);\n        }\n    };\n    QuestionCustomModel.prototype.afterRender = function (el) {\n        _super.prototype.afterRender.call(this, el);\n        if (!!this.contentQuestion) {\n            this.contentQuestion.afterRender(el);\n        }\n    };\n    Object.defineProperty(QuestionCustomModel.prototype, \"contentQuestion\", {\n        get: function () {\n            return this.questionWrapper;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionCustomModel.prototype.createQuestion = function () {\n        var _this = this;\n        var json = this.customQuestion.json;\n        var res = null;\n        if (!!json.questionJSON) {\n            var qType = json.questionJSON.type;\n            if (!qType || !_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].findClass(qType))\n                throw \"type attribute in questionJSON is empty or incorrect\";\n            res = _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].createClass(qType);\n            this.initElement(res);\n            res.fromJSON(json.questionJSON);\n        }\n        else {\n            if (!!json.createQuestion) {\n                res = json.createQuestion();\n                this.initElement(res);\n            }\n        }\n        if (!!res) {\n            res.isContentElement = true;\n            if (!res.name) {\n                res.name = \"question\";\n            }\n            res.onUpdateCssClassesCallback = function (css) {\n                _this.onUpdateQuestionCssClasses(res, css);\n            };\n        }\n        return res;\n    };\n    QuestionCustomModel.prototype.onSurveyLoad = function () {\n        _super.prototype.onSurveyLoad.call(this);\n        if (!this.contentQuestion)\n            return;\n        if (this.isEmpty() && !this.contentQuestion.isEmpty()) {\n            this.value = this.getContentQuestionValue();\n        }\n    };\n    QuestionCustomModel.prototype.runCondition = function (values, properties) {\n        _super.prototype.runCondition.call(this, values, properties);\n        if (!!this.contentQuestion) {\n            this.contentQuestion.runCondition(values, properties);\n        }\n    };\n    QuestionCustomModel.prototype.convertDataName = function (name) {\n        if (!this.contentQuestion)\n            return _super.prototype.convertDataName.call(this, name);\n        var newName = name.replace(this.contentQuestion.getValueName(), this.getValueName());\n        return newName.indexOf(this.getValueName()) == 0\n            ? newName\n            : _super.prototype.convertDataName.call(this, name);\n    };\n    QuestionCustomModel.prototype.convertDataValue = function (name, newValue) {\n        return this.convertDataName(name) == _super.prototype.convertDataName.call(this, name)\n            ? this.getContentQuestionValue()\n            : newValue;\n    };\n    QuestionCustomModel.prototype.getContentQuestionValue = function () {\n        if (!this.contentQuestion)\n            return undefined;\n        var val = this.contentQuestion.value;\n        if (!!this.customQuestion)\n            val = this.customQuestion.getValueFromQuestion(val);\n        return val;\n    };\n    QuestionCustomModel.prototype.setContentQuestionValue = function (val) {\n        if (!this.contentQuestion)\n            return;\n        if (!!this.customQuestion)\n            val = this.customQuestion.setValueToQuestion(val);\n        this.contentQuestion.value = val;\n    };\n    QuestionCustomModel.prototype.canSetValueToSurvey = function () {\n        return false;\n    };\n    QuestionCustomModel.prototype.setQuestionValue = function (newValue, updateIsAnswered) {\n        if (updateIsAnswered === void 0) { updateIsAnswered = true; }\n        _super.prototype.setQuestionValue.call(this, newValue, updateIsAnswered);\n        if (!this.isLoadingFromJson && !!this.contentQuestion &&\n            !this.isTwoValueEquals(this.getContentQuestionValue(), newValue)) {\n            this.setContentQuestionValue(this.getUnbindValue(newValue));\n        }\n    };\n    QuestionCustomModel.prototype.onSurveyValueChanged = function (newValue) {\n        _super.prototype.onSurveyValueChanged.call(this, newValue);\n        if (!!this.contentQuestion) {\n            this.contentQuestion.onSurveyValueChanged(newValue);\n        }\n    };\n    QuestionCustomModel.prototype.getValueCore = function () {\n        if (!!this.contentQuestion)\n            return this.getContentQuestionValue();\n        return _super.prototype.getValueCore.call(this);\n    };\n    QuestionCustomModel.prototype.initElement = function (el) {\n        var _this = this;\n        _super.prototype.initElement.call(this, el);\n        if (!!el) {\n            el.parent = this;\n            el.afterRenderQuestionCallback = function (question, element) {\n                if (!!_this.customQuestion) {\n                    _this.customQuestion.onAfterRenderContentElement(_this, question, element);\n                }\n            };\n        }\n    };\n    QuestionCustomModel.prototype.updateElementCss = function (reNew) {\n        if (!!this.contentQuestion) {\n            this.questionWrapper.updateElementCss(reNew);\n        }\n        _super.prototype.updateElementCss.call(this, reNew);\n    };\n    QuestionCustomModel.prototype.updateElementCssCore = function (cssClasses) {\n        if (!!this.contentQuestion) {\n            cssClasses = this.contentQuestion.cssClasses;\n        }\n        _super.prototype.updateElementCssCore.call(this, cssClasses);\n    };\n    QuestionCustomModel.prototype.getDisplayValueCore = function (keyAsText, value) {\n        return _super.prototype.getContentDisplayValueCore.call(this, keyAsText, value, this.contentQuestion);\n    };\n    return QuestionCustomModel;\n}(QuestionCustomModelBase));\n\nvar QuestionCompositeTextProcessor = /** @class */ (function (_super) {\n    __extends(QuestionCompositeTextProcessor, _super);\n    function QuestionCompositeTextProcessor(composite, variableName) {\n        var _this = _super.call(this, variableName) || this;\n        _this.composite = composite;\n        _this.variableName = variableName;\n        return _this;\n    }\n    Object.defineProperty(QuestionCompositeTextProcessor.prototype, \"survey\", {\n        get: function () {\n            return this.composite.survey;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionCompositeTextProcessor.prototype, \"panel\", {\n        get: function () {\n            return this.composite.contentPanel;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    return QuestionCompositeTextProcessor;\n}(_textPreProcessor__WEBPACK_IMPORTED_MODULE_4__[\"QuestionTextProcessor\"]));\nvar QuestionCompositeModel = /** @class */ (function (_super) {\n    __extends(QuestionCompositeModel, _super);\n    function QuestionCompositeModel(name, customQuestion) {\n        var _this = _super.call(this, name, customQuestion) || this;\n        _this.customQuestion = customQuestion;\n        _this.settingNewValue = false;\n        _this.textProcessing = new QuestionCompositeTextProcessor(_this, QuestionCompositeModel.ItemVariableName);\n        return _this;\n    }\n    QuestionCompositeModel.prototype.createWrapper = function () {\n        this.panelWrapper = this.createPanel();\n    };\n    QuestionCompositeModel.prototype.getTemplate = function () {\n        return \"composite\";\n    };\n    QuestionCompositeModel.prototype.getElement = function () {\n        return this.contentPanel;\n    };\n    QuestionCompositeModel.prototype.getCssRoot = function (cssClasses) {\n        return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_5__[\"CssClassBuilder\"]().append(_super.prototype.getCssRoot.call(this, cssClasses)).append(cssClasses.composite).toString();\n    };\n    Object.defineProperty(QuestionCompositeModel.prototype, \"contentPanel\", {\n        get: function () {\n            return this.panelWrapper;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionCompositeModel.prototype.hasErrors = function (fireCallback, rec) {\n        if (fireCallback === void 0) { fireCallback = true; }\n        if (rec === void 0) { rec = null; }\n        var res = _super.prototype.hasErrors.call(this, fireCallback, rec);\n        if (!this.contentPanel)\n            return res;\n        return this.contentPanel.hasErrors(fireCallback, false, rec) || res;\n    };\n    QuestionCompositeModel.prototype.updateElementCss = function (reNew) {\n        _super.prototype.updateElementCss.call(this, reNew);\n        if (this.contentPanel) {\n            this.contentPanel.updateElementCss(reNew);\n        }\n    };\n    QuestionCompositeModel.prototype.getTextProcessor = function () {\n        return this.textProcessing;\n    };\n    QuestionCompositeModel.prototype.findQuestionByName = function (name) {\n        var res = this.getQuestionByName(name);\n        if (!!res)\n            return res;\n        return _super.prototype.findQuestionByName.call(this, name);\n    };\n    QuestionCompositeModel.prototype.clearValueIfInvisibleCore = function (reason) {\n        _super.prototype.clearValueIfInvisibleCore.call(this, reason);\n        var questions = this.contentPanel.questions;\n        for (var i = 0; i < questions.length; i++) {\n            questions[i].clearValueIfInvisible(reason);\n        }\n    };\n    QuestionCompositeModel.prototype.onAnyValueChanged = function (name, questionName) {\n        _super.prototype.onAnyValueChanged.call(this, name, questionName);\n        var questions = this.contentPanel.questions;\n        for (var i = 0; i < questions.length; i++) {\n            questions[i].onAnyValueChanged(name, questionName);\n        }\n    };\n    Object.defineProperty(QuestionCompositeModel.prototype, \"hasSingleInput\", {\n        get: function () { return false; },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionCompositeModel.prototype, \"isContainer\", {\n        get: function () { return true; },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionCompositeModel.prototype.createPanel = function () {\n        var _this = this;\n        var res = _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].createClass(\"panel\");\n        res.showQuestionNumbers = \"off\";\n        res.renderWidth = \"100%\";\n        var json = this.customQuestion.json;\n        if (!!json.elementsJSON) {\n            res.fromJSON({ elements: json.elementsJSON });\n        }\n        if (!!json.createElements) {\n            json.createElements(res, this);\n        }\n        this.initElement(res);\n        res.readOnly = this.isReadOnly;\n        res.questions.forEach(function (q) { return q.onUpdateCssClassesCallback = function (css) {\n            _this.onUpdateQuestionCssClasses(q, css);\n        }; });\n        this.setAfterRenderCallbacks(res);\n        return res;\n    };\n    QuestionCompositeModel.prototype.onReadOnlyChanged = function () {\n        if (!!this.contentPanel) {\n            this.contentPanel.readOnly = this.isReadOnly;\n        }\n        _super.prototype.onReadOnlyChanged.call(this);\n    };\n    QuestionCompositeModel.prototype.onSurveyLoad = function () {\n        this.isSettingValOnLoading = true;\n        if (!!this.contentPanel) {\n            this.contentPanel.readOnly = this.isReadOnly;\n            this.setIsContentElement(this.contentPanel);\n        }\n        _super.prototype.onSurveyLoad.call(this);\n        if (!!this.contentPanel) {\n            var val = this.getContentPanelValue();\n            if (!_helpers__WEBPACK_IMPORTED_MODULE_3__[\"Helpers\"].isValueEmpty(val)) {\n                this.value = val;\n            }\n        }\n        this.isSettingValOnLoading = false;\n    };\n    QuestionCompositeModel.prototype.setIsContentElement = function (panel) {\n        panel.isContentElement = true;\n        var elements = panel.elements;\n        for (var i = 0; i < elements.length; i++) {\n            var el = elements[i];\n            if (el.isPanel) {\n                this.setIsContentElement(el);\n            }\n            else {\n                el.isContentElement = true;\n            }\n        }\n    };\n    QuestionCompositeModel.prototype.setVisibleIndex = function (val) {\n        var res = _super.prototype.setVisibleIndex.call(this, val);\n        if (this.isVisible && !!this.contentPanel) {\n            res += this.contentPanel.setVisibleIndex(val);\n        }\n        return res;\n    };\n    QuestionCompositeModel.prototype.runCondition = function (values, properties) {\n        _super.prototype.runCondition.call(this, values, properties);\n        if (!!this.contentPanel) {\n            var oldComposite = values[QuestionCompositeModel.ItemVariableName];\n            values[QuestionCompositeModel.ItemVariableName] = this.contentPanel.getValue();\n            this.contentPanel.runCondition(values, properties);\n            delete values[QuestionCompositeModel.ItemVariableName];\n            if (!!oldComposite) {\n                values[QuestionCompositeModel.ItemVariableName] = oldComposite;\n            }\n        }\n    };\n    QuestionCompositeModel.prototype.getValue = function (name) {\n        var val = this.value;\n        return !!val ? val[name] : null;\n    };\n    QuestionCompositeModel.prototype.getQuestionByName = function (name) {\n        return !!this.contentPanel ? this.contentPanel.getQuestionByName(name) : undefined;\n    };\n    QuestionCompositeModel.prototype.setValue = function (name, newValue, locNotification, allowNotifyValueChanged) {\n        if (this.settingNewValue) {\n            this.setNewValueIntoQuestion(name, newValue);\n            return;\n        }\n        if (this.isValueChanging(name, newValue))\n            return;\n        this.settingNewValue = true;\n        if (!this.isEditingSurveyElement && !!this.contentPanel) {\n            var index = 0;\n            var maxTimes = this.contentPanel.questions.length + 1;\n            while (index < maxTimes && this.updateValueCoreWithPanelValue())\n                index++;\n        }\n        this.setNewValueIntoQuestion(name, newValue);\n        _super.prototype.setValue.call(this, name, newValue, locNotification, allowNotifyValueChanged);\n        this.settingNewValue = false;\n    };\n    QuestionCompositeModel.prototype.updateValueCoreWithPanelValue = function () {\n        var panelValue = this.getContentPanelValue();\n        if (this.isTwoValueEquals(this.getValueCore(), panelValue))\n            return false;\n        this.setValueCore(panelValue);\n        return true;\n    };\n    QuestionCompositeModel.prototype.getContentPanelValue = function (val) {\n        if (!val)\n            val = this.contentPanel.getValue();\n        return this.customQuestion.setValueToQuestion(val);\n    };\n    QuestionCompositeModel.prototype.getValueForContentPanel = function (val) {\n        return this.customQuestion.getValueFromQuestion(val);\n    };\n    QuestionCompositeModel.prototype.setNewValueIntoQuestion = function (name, newValue) {\n        var q = this.getQuestionByName(name);\n        if (!!q && !this.isTwoValueEquals(newValue, q.value)) {\n            q.value = newValue;\n        }\n    };\n    QuestionCompositeModel.prototype.addConditionObjectsByContext = function (objects, context) {\n        if (!this.contentPanel)\n            return;\n        var questions = this.contentPanel.questions;\n        var prefixName = this.name;\n        var prefixText = this.title;\n        for (var i = 0; i < questions.length; i++) {\n            objects.push({\n                name: prefixName + \".\" + questions[i].name,\n                text: prefixText + \".\" + questions[i].title,\n                question: questions[i],\n            });\n        }\n    };\n    QuestionCompositeModel.prototype.collectNestedQuestionsCore = function (questions, visibleOnly) {\n        if (!this.contentPanel)\n            return;\n        this.contentPanel.questions.forEach(function (q) { return q.collectNestedQuestions(questions, visibleOnly); });\n    };\n    QuestionCompositeModel.prototype.convertDataValue = function (name, newValue) {\n        var val = this.getValueForContentPanel(this.value);\n        if (!val)\n            val = {};\n        if (this.isValueEmpty(newValue) && !this.isEditingSurveyElement) {\n            delete val[name];\n        }\n        else {\n            val[name] = newValue;\n        }\n        return this.getContentPanelValue(val);\n    };\n    QuestionCompositeModel.prototype.setQuestionValue = function (newValue, updateIsAnswered) {\n        if (updateIsAnswered === void 0) { updateIsAnswered = true; }\n        this.setValuesIntoQuestions(newValue);\n        if (!this.isEditingSurveyElement && !!this.contentPanel) {\n            newValue = this.getContentPanelValue();\n        }\n        _super.prototype.setQuestionValue.call(this, newValue, updateIsAnswered);\n    };\n    QuestionCompositeModel.prototype.setValuesIntoQuestions = function (newValue) {\n        if (!this.contentPanel)\n            return;\n        newValue = this.getValueForContentPanel(newValue);\n        var oldSettingNewValue = this.settingNewValue;\n        this.settingNewValue = true;\n        var questions = this.contentPanel.questions;\n        for (var i = 0; i < questions.length; i++) {\n            var key = questions[i].getValueName();\n            var val = !!newValue ? newValue[key] : undefined;\n            var q = questions[i];\n            if (!this.isTwoValueEquals(q.value, val)) {\n                q.value = val;\n            }\n        }\n        this.settingNewValue = oldSettingNewValue;\n    };\n    QuestionCompositeModel.prototype.getDisplayValueCore = function (keyAsText, value) {\n        return _super.prototype.getContentDisplayValueCore.call(this, keyAsText, value, this.contentPanel);\n    };\n    QuestionCompositeModel.prototype.setAfterRenderCallbacks = function (panel) {\n        var _this = this;\n        if (!panel || !this.customQuestion)\n            return;\n        var questions = panel.questions;\n        for (var i = 0; i < questions.length; i++) {\n            questions[i].afterRenderQuestionCallback = function (question, element) {\n                _this.customQuestion.onAfterRenderContentElement(_this, question, element);\n            };\n        }\n    };\n    QuestionCompositeModel.ItemVariableName = \"composite\";\n    return QuestionCompositeModel;\n}(QuestionCustomModelBase));\n\n\n\n/***/ }),\n\n/***/ \"./src/question_dropdown.ts\":\n/*!**********************************!*\\\n  !*** ./src/question_dropdown.ts ***!\n  \\**********************************/\n/*! exports provided: QuestionDropdownModel */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_2811322__) {\n\n\"use strict\";\n__nested_webpack_require_2811322__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_2811322__.d(__nested_webpack_exports__, \"QuestionDropdownModel\", function() { return QuestionDropdownModel; });\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_2811322__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_2811322__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\n/* harmony import */ var _question_baseselect__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_2811322__(/*! ./question_baseselect */ \"./src/question_baseselect.ts\");\n/* harmony import */ var _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_2811322__(/*! ./utils/cssClassBuilder */ \"./src/utils/cssClassBuilder.ts\");\n/* harmony import */ var _dropdownListModel__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_2811322__(/*! ./dropdownListModel */ \"./src/dropdownListModel.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_2811322__(/*! ./settings */ \"./src/settings.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\n\n/**\n * A class that describes the Dropdown question type.\n *\n * [View Demo](https://surveyjs.io/form-library/examples/questiontype-dropdown/ (linkStyle))\n */\nvar QuestionDropdownModel = /** @class */ (function (_super) {\n    __extends(QuestionDropdownModel, _super);\n    function QuestionDropdownModel(name) {\n        var _this = _super.call(this, name) || this;\n        _this.lastSelectedItemValue = null;\n        _this.minMaxChoices = [];\n        _this.onOpened = _this.addEvent();\n        _this.createLocalizableString(\"placeholder\", _this, false, true);\n        _this.createLocalizableString(\"clearCaption\", _this, false, true);\n        _this.registerPropertyChangedHandlers([\"choicesMin\", \"choicesMax\", \"choicesStep\"], function () {\n            _this.onVisibleChoicesChanged();\n        });\n        _this.registerPropertyChangedHandlers([\"value\", \"renderAs\", \"showOtherItem\", \"otherText\", \"placeholder\", \"choices\", \"visibleChoices\"], function () {\n            _this.updateReadOnlyText();\n        });\n        _this.updateReadOnlyText();\n        return _this;\n    }\n    QuestionDropdownModel.prototype.updateReadOnlyText = function () {\n        var result = !!this.selectedItem ? \"\" : this.placeholder;\n        if (this.renderAs == \"select\") {\n            if (this.isOtherSelected) {\n                result = this.otherText;\n            }\n            else if (this.isNoneSelected) {\n                result = this.noneText;\n            }\n            else if (!!this.selectedItem) {\n                result = this.selectedItemText;\n            }\n        }\n        this.readOnlyText = result;\n    };\n    QuestionDropdownModel.prototype.locStrsChanged = function () {\n        _super.prototype.locStrsChanged.call(this);\n        this.updateReadOnlyText();\n    };\n    Object.defineProperty(QuestionDropdownModel.prototype, \"showOptionsCaption\", {\n        get: function () {\n            return this.allowClear;\n        },\n        set: function (val) {\n            this.allowClear = val;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionDropdownModel.prototype, \"optionsCaption\", {\n        get: function () {\n            return this.placeholder;\n        },\n        set: function (val) {\n            this.placeholder = val;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionDropdownModel.prototype, \"placeholder\", {\n        /**\n         * A placeholder for the input field.\n         */\n        get: function () {\n            return this.getLocalizableStringText(\"placeholder\");\n        },\n        set: function (val) {\n            this.setLocalizableStringText(\"placeholder\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionDropdownModel.prototype, \"locPlaceholder\", {\n        get: function () {\n            return this.getLocalizableString(\"placeholder\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionDropdownModel.prototype, \"clearCaption\", {\n        get: function () {\n            return this.getLocalizableStringText(\"clearCaption\");\n        },\n        set: function (value) {\n            this.setLocalizableStringText(\"clearCaption\", value);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionDropdownModel.prototype, \"locClearCaption\", {\n        get: function () {\n            return this.getLocalizableString(\"clearCaption\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionDropdownModel.prototype.getType = function () {\n        return \"dropdown\";\n    };\n    Object.defineProperty(QuestionDropdownModel.prototype, \"ariaRole\", {\n        get: function () {\n            return \"combobox\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionDropdownModel.prototype, \"selectedItem\", {\n        get: function () { return this.getSingleSelectedItem(); },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionDropdownModel.prototype.onGetSingleSelectedItem = function (selectedItemByValue) {\n        if (!!selectedItemByValue) {\n            this.lastSelectedItemValue = selectedItemByValue;\n        }\n    };\n    QuestionDropdownModel.prototype.supportGoNextPageAutomatic = function () {\n        return true;\n    };\n    QuestionDropdownModel.prototype.getChoices = function () {\n        var items = _super.prototype.getChoices.call(this);\n        if (this.choicesMax <= this.choicesMin)\n            return items;\n        var res = [];\n        for (var i = 0; i < items.length; i++) {\n            res.push(items[i]);\n        }\n        if (this.minMaxChoices.length === 0 ||\n            this.minMaxChoices.length !==\n                (this.choicesMax - this.choicesMin) / this.choicesStep + 1) {\n            this.minMaxChoices = [];\n            for (var i = this.choicesMin; i <= this.choicesMax; i += this.choicesStep) {\n                this.minMaxChoices.push(this.createItemValue(i));\n            }\n        }\n        res = res.concat(this.minMaxChoices);\n        return res;\n    };\n    Object.defineProperty(QuestionDropdownModel.prototype, \"choicesMin\", {\n        /**\n         * Use the `choicesMin`, `choicesMax`, and `choicesStep` properties to generate choice items automatically. For example, the configuration below generates three choice items: [10, 20, 30].\n         *\n         * ```js\n         * \"choicesMin\": 10,\n         * \"choicesMax\": 30\n         * \"choicesStep\": 10\n         * ```\n         * @see choicesMax\n         * @see choicesStep\n         */\n        get: function () {\n            return this.getPropertyValue(\"choicesMin\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"choicesMin\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionDropdownModel.prototype, \"choicesMax\", {\n        /**\n         * Use the `choicesMin`, `choicesMax`, and `choicesStep` properties to generate choice items automatically. For example, the configuration below generates three choice items: [10, 20, 30].\n         *\n         * ```js\n         * \"choicesMin\": 10,\n         * \"choicesMax\": 30\n         * \"choicesStep\": 10\n         * ```\n         * @see choicesMin\n         * @see choicesStep\n         */\n        get: function () {\n            return this.getPropertyValue(\"choicesMax\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"choicesMax\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionDropdownModel.prototype, \"choicesStep\", {\n        /**\n         * Use the `choicesMin`, `choicesMax`, and `choicesStep` properties to generate choice items automatically. For example, the configuration below generates three choice items: [10, 20, 30].\n         *\n         * ```js\n         * \"choicesMin\": 10,\n         * \"choicesMax\": 30\n         * \"choicesStep\": 10\n         * ```\n         *\n         * The default value of the `choicesStep` property is 1.\n         * @see choicesMin\n         * @see choicesMax\n         */\n        get: function () {\n            return this.getPropertyValue(\"choicesStep\");\n        },\n        set: function (val) {\n            if (val < 1)\n                val = 1;\n            this.setPropertyValue(\"choicesStep\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionDropdownModel.prototype, \"autocomplete\", {\n        get: function () {\n            return this.getPropertyValue(\"autocomplete\", \"\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"autocomplete\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionDropdownModel.prototype.getControlClass = function () {\n        return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_3__[\"CssClassBuilder\"]()\n            .append(this.cssClasses.control)\n            .append(this.cssClasses.controlEmpty, this.isEmpty())\n            .append(this.cssClasses.onError, this.errors.length > 0)\n            .append(this.cssClasses.controlDisabled, this.isReadOnly)\n            .append(this.cssClasses.controlInputFieldComponent, !!this.inputFieldComponentName)\n            .toString();\n    };\n    Object.defineProperty(QuestionDropdownModel.prototype, \"selectedItemLocText\", {\n        get: function () {\n            var item = this.suggestedItem || this.selectedItem;\n            return item === null || item === void 0 ? void 0 : item.locText;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionDropdownModel.prototype, \"inputFieldComponentName\", {\n        get: function () {\n            return this.inputFieldComponent || this.itemComponent;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionDropdownModel.prototype, \"showSelectedItemLocText\", {\n        get: function () {\n            return !this.inputHasValue && !this.inputFieldComponentName && !!this.selectedItemLocText && this.dropdownListModel.canShowSelectedItem;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionDropdownModel.prototype, \"showInputFieldComponent\", {\n        get: function () {\n            return !this.inputHasValue && !!this.inputFieldComponentName && !this.isEmpty();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionDropdownModel.prototype, \"selectedItemText\", {\n        get: function () {\n            var item = this.selectedItem;\n            return !!item ? item.text : \"\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionDropdownModel.prototype, \"dropdownListModel\", {\n        get: function () {\n            if (this.renderAs !== \"select\" && !this.dropdownListModelValue) {\n                this.dropdownListModelValue = new _dropdownListModel__WEBPACK_IMPORTED_MODULE_4__[\"DropdownListModel\"](this);\n            }\n            return this.dropdownListModelValue;\n        },\n        set: function (val) {\n            this.dropdownListModelValue = val;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionDropdownModel.prototype, \"popupModel\", {\n        get: function () {\n            var _a;\n            return (_a = this.dropdownListModel) === null || _a === void 0 ? void 0 : _a.popupModel;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionDropdownModel.prototype, \"ariaExpanded\", {\n        get: function () {\n            var popupModel = this.popupModel;\n            return !!popupModel && popupModel.isVisible ? \"true\" : \"false\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionDropdownModel.prototype.onOpenedCallBack = function () {\n        this.onOpened.fire(this, { question: this, choices: this.choices });\n    };\n    QuestionDropdownModel.prototype.onSelectedItemValuesChangedHandler = function (newValue) {\n        var _a;\n        (_a = this.dropdownListModel) === null || _a === void 0 ? void 0 : _a.setInputStringFromSelectedItem(newValue);\n        _super.prototype.onSelectedItemValuesChangedHandler.call(this, newValue);\n    };\n    QuestionDropdownModel.prototype.hasUnknownValue = function (val, includeOther, isFilteredChoices, checkEmptyValue) {\n        if (this.choicesLazyLoadEnabled) {\n            return false;\n        }\n        return _super.prototype.hasUnknownValue.call(this, val, includeOther, isFilteredChoices, checkEmptyValue);\n    };\n    QuestionDropdownModel.prototype.needConvertRenderedOtherToDataValue = function () {\n        var _a;\n        var val = (_a = this.otherValue) === null || _a === void 0 ? void 0 : _a.trim();\n        if (!val)\n            return false;\n        return _super.prototype.hasUnknownValue.call(this, val, true, false);\n    };\n    QuestionDropdownModel.prototype.getItemIfChoicesNotContainThisValue = function (value, text) {\n        if (this.choicesLazyLoadEnabled && !this.dropdownListModel.isAllDataLoaded) {\n            return this.createItemValue(value, text);\n        }\n        else {\n            return _super.prototype.getItemIfChoicesNotContainThisValue.call(this, value, text);\n        }\n    };\n    QuestionDropdownModel.prototype.onVisibleChoicesChanged = function () {\n        _super.prototype.onVisibleChoicesChanged.call(this);\n        if (this.popupModel) {\n            this.dropdownListModel.updateItems();\n        }\n    };\n    QuestionDropdownModel.prototype.getFirstInputElementId = function () {\n        return this.inputId + (this.searchEnabled ? \"_0\" : \"\");\n    };\n    QuestionDropdownModel.prototype.getInputId = function () {\n        return this.inputId + \"_0\";\n    };\n    QuestionDropdownModel.prototype.clearValue = function () {\n        var _a;\n        _super.prototype.clearValue.call(this);\n        this.lastSelectedItemValue = null;\n        (_a = this.dropdownListModel) === null || _a === void 0 ? void 0 : _a.clear();\n    };\n    QuestionDropdownModel.prototype.onClick = function (e) {\n        !!this.onOpenedCallBack && this.onOpenedCallBack();\n    };\n    QuestionDropdownModel.prototype.onKeyUp = function (event) {\n        var char = event.which || event.keyCode;\n        if (char === 46) {\n            this.clearValue();\n            event.preventDefault();\n            event.stopPropagation();\n        }\n    };\n    QuestionDropdownModel.prototype.dispose = function () {\n        _super.prototype.dispose.call(this);\n        if (!!this.dropdownListModelValue) {\n            this.dropdownListModelValue.dispose();\n        }\n    };\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])()\n    ], QuestionDropdownModel.prototype, \"allowClear\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({\n            onSet: function (newValue, target) {\n                if (!!target.dropdownListModel) {\n                    target.dropdownListModel.setSearchEnabled(newValue);\n                }\n            }\n        })\n    ], QuestionDropdownModel.prototype, \"searchEnabled\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ defaultValue: false })\n    ], QuestionDropdownModel.prototype, \"inputHasValue\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ defaultValue: \"\" })\n    ], QuestionDropdownModel.prototype, \"readOnlyText\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])()\n    ], QuestionDropdownModel.prototype, \"choicesLazyLoadEnabled\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ defaultValue: 25 })\n    ], QuestionDropdownModel.prototype, \"choicesLazyLoadPageSize\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])()\n    ], QuestionDropdownModel.prototype, \"suggestedItem\", void 0);\n    return QuestionDropdownModel;\n}(_question_baseselect__WEBPACK_IMPORTED_MODULE_2__[\"QuestionSelectBase\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"dropdown\", [\n    { name: \"placeholder\", alternativeName: \"optionsCaption\", serializationProperty: \"locPlaceholder\" },\n    { name: \"allowClear:boolean\", alternativeName: \"showOptionsCaption\", default: true },\n    { name: \"choicesMin:number\", default: 0 },\n    { name: \"choicesMax:number\", default: 0 },\n    { name: \"choicesStep:number\", default: 1, minValue: 1 },\n    { name: \"autocomplete\", alternativeName: \"autoComplete\", choices: _settings__WEBPACK_IMPORTED_MODULE_5__[\"settings\"].questions.dataList, },\n    { name: \"renderAs\", default: \"default\", visible: false },\n    { name: \"searchEnabled:boolean\", default: true, visible: false },\n    { name: \"choicesLazyLoadEnabled:boolean\", default: false, visible: false },\n    { name: \"choicesLazyLoadPageSize:number\", default: 25, visible: false },\n    { name: \"inputFieldComponent\", visible: false },\n    { name: \"itemComponent\", visible: false, default: \"\" }\n], function () {\n    return new QuestionDropdownModel(\"\");\n}, \"selectbase\");\n_questionfactory__WEBPACK_IMPORTED_MODULE_1__[\"QuestionFactory\"].Instance.registerQuestion(\"dropdown\", function (name) {\n    var q = new QuestionDropdownModel(name);\n    q.choices = _questionfactory__WEBPACK_IMPORTED_MODULE_1__[\"QuestionFactory\"].DefaultChoices;\n    return q;\n});\n\n\n/***/ }),\n\n/***/ \"./src/question_empty.ts\":\n/*!*******************************!*\\\n  !*** ./src/question_empty.ts ***!\n  \\*******************************/\n/*! exports provided: QuestionEmptyModel */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_2830681__) {\n\n\"use strict\";\n__nested_webpack_require_2830681__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_2830681__.d(__nested_webpack_exports__, \"QuestionEmptyModel\", function() { return QuestionEmptyModel; });\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_2830681__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_2830681__(/*! ./question */ \"./src/question.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n\n\n/**\n * A Model for an question that renders empty \"div\" tag. It used as a base class for some custom widgets\n */\nvar QuestionEmptyModel = /** @class */ (function (_super) {\n    __extends(QuestionEmptyModel, _super);\n    function QuestionEmptyModel(name) {\n        return _super.call(this, name) || this;\n    }\n    QuestionEmptyModel.prototype.getType = function () {\n        return \"empty\";\n    };\n    return QuestionEmptyModel;\n}(_question__WEBPACK_IMPORTED_MODULE_1__[\"Question\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"empty\", [], function () {\n    return new QuestionEmptyModel(\"\");\n}, \"question\");\n\n\n/***/ }),\n\n/***/ \"./src/question_expression.ts\":\n/*!************************************!*\\\n  !*** ./src/question_expression.ts ***!\n  \\************************************/\n/*! exports provided: QuestionExpressionModel, getCurrecyCodes */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_2832855__) {\n\n\"use strict\";\n__nested_webpack_require_2832855__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_2832855__.d(__nested_webpack_exports__, \"QuestionExpressionModel\", function() { return QuestionExpressionModel; });\n/* harmony export (binding) */ __nested_webpack_require_2832855__.d(__nested_webpack_exports__, \"getCurrecyCodes\", function() { return getCurrecyCodes; });\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_2832855__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_2832855__(/*! ./question */ \"./src/question.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_2832855__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_2832855__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n\n\n\n\n/**\n * A class that describes the Expression question type. It is a read-only question type that calculates a value based on a specified expression.\n *\n * [View Demo](https://surveyjs.io/form-library/examples/questiontype-expression/ (linkStyle))\n */\nvar QuestionExpressionModel = /** @class */ (function (_super) {\n    __extends(QuestionExpressionModel, _super);\n    function QuestionExpressionModel(name) {\n        var _this = _super.call(this, name) || this;\n        _this.createLocalizableString(\"format\", _this);\n        _this.registerPropertyChangedHandlers([\"expression\"], function () {\n            if (_this.expressionRunner) {\n                _this.expressionRunner = _this.createRunner();\n            }\n        });\n        _this.registerPropertyChangedHandlers([\"format\", \"currency\", \"displayStyle\"], function () {\n            _this.updateFormatedValue();\n        });\n        return _this;\n    }\n    QuestionExpressionModel.prototype.getType = function () {\n        return \"expression\";\n    };\n    Object.defineProperty(QuestionExpressionModel.prototype, \"hasInput\", {\n        get: function () {\n            return false;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionExpressionModel.prototype, \"format\", {\n        /**\n         * A string that formats a question value. Use `{0}` to reference the question value in the format string.\n         * @see displayStyle\n         */\n        get: function () {\n            return this.getLocalizableStringText(\"format\", \"\");\n        },\n        set: function (val) {\n            this.setLocalizableStringText(\"format\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionExpressionModel.prototype, \"locFormat\", {\n        get: function () {\n            return this.getLocalizableString(\"format\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionExpressionModel.prototype, \"expression\", {\n        /**\n         * An expression used to calculate the question value.\n         *\n         * Refer to the following help topic for more information: [Expressions](https://surveyjs.io/form-library/documentation/design-survey-conditional-logic#expressions).\n         */\n        get: function () {\n            return this.getPropertyValue(\"expression\", \"\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"expression\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionExpressionModel.prototype.locCalculation = function () {\n        this.expressionIsRunning = true;\n    };\n    QuestionExpressionModel.prototype.unlocCalculation = function () {\n        this.expressionIsRunning = false;\n    };\n    QuestionExpressionModel.prototype.runCondition = function (values, properties) {\n        _super.prototype.runCondition.call(this, values, properties);\n        if (!this.expression ||\n            this.expressionIsRunning ||\n            (!this.runIfReadOnly && this.isReadOnly))\n            return;\n        this.locCalculation();\n        if (!this.expressionRunner) {\n            this.expressionRunner = this.createRunner();\n        }\n        this.expressionRunner.run(values, properties);\n    };\n    QuestionExpressionModel.prototype.canCollectErrors = function () {\n        return true;\n    };\n    QuestionExpressionModel.prototype.hasRequiredError = function () {\n        return false;\n    };\n    QuestionExpressionModel.prototype.createRunner = function () {\n        var _this = this;\n        var res = this.createExpressionRunner(this.expression);\n        res.onRunComplete = function (newValue) {\n            _this.value = _this.roundValue(newValue);\n            _this.unlocCalculation();\n        };\n        return res;\n    };\n    Object.defineProperty(QuestionExpressionModel.prototype, \"maximumFractionDigits\", {\n        /**\n         * The maximum number of fraction digits. Applies only if the `displayStyle` property is not `\"none\"`. Accepts values in the range from -1 to 20, where -1 disables the property.\n         *\n         * Default value: -1\n         * @see displayStyle\n         * @see minimumFractionDigits\n         * @see precision\n         */\n        get: function () {\n            return this.getPropertyValue(\"maximumFractionDigits\");\n        },\n        set: function (val) {\n            if (val < -1 || val > 20)\n                return;\n            this.setPropertyValue(\"maximumFractionDigits\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionExpressionModel.prototype, \"minimumFractionDigits\", {\n        /**\n         * The minimum number of fraction digits. Applies only if the `displayStyle` property is not `\"none\"`. Accepts values in the range from -1 to 20, where -1 disables the property.\n         *\n         * Default value: -1\n         * @see displayStyle\n         * @see maximumFractionDigits\n         */\n        get: function () {\n            return this.getPropertyValue(\"minimumFractionDigits\");\n        },\n        set: function (val) {\n            if (val < -1 || val > 20)\n                return;\n            this.setPropertyValue(\"minimumFractionDigits\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionExpressionModel.prototype, \"runIfReadOnly\", {\n        get: function () {\n            return this.runIfReadOnlyValue === true;\n        },\n        set: function (val) {\n            this.runIfReadOnlyValue = val;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionExpressionModel.prototype, \"formatedValue\", {\n        get: function () {\n            return this.getPropertyValue(\"formatedValue\", \"\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionExpressionModel.prototype.updateFormatedValue = function () {\n        this.setPropertyValue(\"formatedValue\", this.getDisplayValueCore(false, this.value));\n    };\n    QuestionExpressionModel.prototype.onValueChanged = function () {\n        this.updateFormatedValue();\n    };\n    QuestionExpressionModel.prototype.updateValueFromSurvey = function (newValue) {\n        _super.prototype.updateValueFromSurvey.call(this, newValue);\n        this.updateFormatedValue();\n    };\n    QuestionExpressionModel.prototype.getDisplayValueCore = function (keysAsText, value) {\n        var val = this.isValueEmpty(value) ? this.defaultValue : value;\n        var res = \"\";\n        if (!this.isValueEmpty(val)) {\n            var str = this.getValueAsStr(val);\n            res = !this.format ? str : this.format[\"format\"](str);\n        }\n        if (!!this.survey) {\n            res = this.survey.getExpressionDisplayValue(this, val, res);\n        }\n        return res;\n    };\n    Object.defineProperty(QuestionExpressionModel.prototype, \"displayStyle\", {\n        /**\n         * Specifies a display style for the question value.\n         *\n         * Possible values:\n         *\n         * - `\"decimal\"`\n         * - `\"currency\"`\n         * - `\"percent\"`\n         * - `\"date\"`\n         * - `\"none\"` (default)\n         *\n         * If you use the `\"currency\"` display style, you can also set the `currency` property to specify a currency other than USD.\n         * @see currency\n         * @see minimumFractionDigits\n         * @see maximumFractionDigits\n         * @see format\n         */\n        get: function () {\n            return this.getPropertyValue(\"displayStyle\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"displayStyle\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionExpressionModel.prototype, \"currency\", {\n        /**\n         * A three-letter currency code. Applies only if the `displayStyle` property is set to `\"currency\"`.\n         *\n         * Default value: \"USD\".\n         * @see displayStyle\n         * @see minimumFractionDigits\n         * @see maximumFractionDigits\n         * @see format\n         */\n        get: function () {\n            return this.getPropertyValue(\"currency\");\n        },\n        set: function (val) {\n            if (getCurrecyCodes().indexOf(val) < 0)\n                return;\n            this.setPropertyValue(\"currency\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionExpressionModel.prototype, \"useGrouping\", {\n        /**\n         * Specifies whether to use grouping separators in number representation. Separators depend on the selected [locale](https://surveyjs.io/form-library/documentation/surveymodel#locale).\n         *\n         * Default value: `true`\n         */\n        get: function () {\n            return this.getPropertyValue(\"useGrouping\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"useGrouping\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionExpressionModel.prototype, \"precision\", {\n        /**\n         * Specifies how many decimal digits to keep in the expression value.\n         *\n         * Default value: -1 (unlimited)\n         * @see maximumFractionDigits\n         */\n        get: function () {\n            return this.getPropertyValue(\"precision\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"precision\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionExpressionModel.prototype.roundValue = function (val) {\n        if (val === Infinity)\n            return undefined;\n        if (this.precision < 0)\n            return val;\n        if (!_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isNumber(val))\n            return val;\n        return parseFloat(val.toFixed(this.precision));\n    };\n    QuestionExpressionModel.prototype.getValueAsStr = function (val) {\n        if (this.displayStyle == \"date\") {\n            var d = new Date(val);\n            if (!!d && !!d.toLocaleDateString)\n                return d.toLocaleDateString();\n        }\n        if (this.displayStyle != \"none\" && _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isNumber(val)) {\n            var locale = this.getLocale();\n            if (!locale)\n                locale = \"en\";\n            var options = {\n                style: this.displayStyle,\n                currency: this.currency,\n                useGrouping: this.useGrouping,\n            };\n            if (this.maximumFractionDigits > -1) {\n                options[\"maximumFractionDigits\"] = this.maximumFractionDigits;\n            }\n            if (this.minimumFractionDigits > -1) {\n                options[\"minimumFractionDigits\"] = this.minimumFractionDigits;\n            }\n            return val.toLocaleString(locale, options);\n        }\n        return val.toString();\n    };\n    QuestionExpressionModel.prototype.convertToCorrectValue = function (val) {\n        if (Array.isArray(val))\n            return val.join(\", \");\n        return val;\n    };\n    return QuestionExpressionModel;\n}(_question__WEBPACK_IMPORTED_MODULE_1__[\"Question\"]));\n\nfunction getCurrecyCodes() {\n    return [\n        \"AED\",\n        \"AFN\",\n        \"ALL\",\n        \"AMD\",\n        \"ANG\",\n        \"AOA\",\n        \"ARS\",\n        \"AUD\",\n        \"AWG\",\n        \"AZN\",\n        \"BAM\",\n        \"BBD\",\n        \"BDT\",\n        \"BGN\",\n        \"BHD\",\n        \"BIF\",\n        \"BMD\",\n        \"BND\",\n        \"BOB\",\n        \"BOV\",\n        \"BRL\",\n        \"BSD\",\n        \"BTN\",\n        \"BWP\",\n        \"BYN\",\n        \"BZD\",\n        \"CAD\",\n        \"CDF\",\n        \"CHE\",\n        \"CHF\",\n        \"CHW\",\n        \"CLF\",\n        \"CLP\",\n        \"CNY\",\n        \"COP\",\n        \"COU\",\n        \"CRC\",\n        \"CUC\",\n        \"CUP\",\n        \"CVE\",\n        \"CZK\",\n        \"DJF\",\n        \"DKK\",\n        \"DOP\",\n        \"DZD\",\n        \"EGP\",\n        \"ERN\",\n        \"ETB\",\n        \"EUR\",\n        \"FJD\",\n        \"FKP\",\n        \"GBP\",\n        \"GEL\",\n        \"GHS\",\n        \"GIP\",\n        \"GMD\",\n        \"GNF\",\n        \"GTQ\",\n        \"GYD\",\n        \"HKD\",\n        \"HNL\",\n        \"HRK\",\n        \"HTG\",\n        \"HUF\",\n        \"IDR\",\n        \"ILS\",\n        \"INR\",\n        \"IQD\",\n        \"IRR\",\n        \"ISK\",\n        \"JMD\",\n        \"JOD\",\n        \"JPY\",\n        \"KES\",\n        \"KGS\",\n        \"KHR\",\n        \"KMF\",\n        \"KPW\",\n        \"KRW\",\n        \"KWD\",\n        \"KYD\",\n        \"KZT\",\n        \"LAK\",\n        \"LBP\",\n        \"LKR\",\n        \"LRD\",\n        \"LSL\",\n        \"LYD\",\n        \"MAD\",\n        \"MDL\",\n        \"MGA\",\n        \"MKD\",\n        \"MMK\",\n        \"MNT\",\n        \"MOP\",\n        \"MRO\",\n        \"MUR\",\n        \"MVR\",\n        \"MWK\",\n        \"MXN\",\n        \"MXV\",\n        \"MYR\",\n        \"MZN\",\n        \"NAD\",\n        \"NGN\",\n        \"NIO\",\n        \"NOK\",\n        \"NPR\",\n        \"NZD\",\n        \"OMR\",\n        \"PAB\",\n        \"PEN\",\n        \"PGK\",\n        \"PHP\",\n        \"PKR\",\n        \"PLN\",\n        \"PYG\",\n        \"QAR\",\n        \"RON\",\n        \"RSD\",\n        \"RUB\",\n        \"RWF\",\n        \"SAR\",\n        \"SBD\",\n        \"SCR\",\n        \"SDG\",\n        \"SEK\",\n        \"SGD\",\n        \"SHP\",\n        \"SLL\",\n        \"SOS\",\n        \"SRD\",\n        \"SSP\",\n        \"STD\",\n        \"SVC\",\n        \"SYP\",\n        \"SZL\",\n        \"THB\",\n        \"TJS\",\n        \"TMT\",\n        \"TND\",\n        \"TOP\",\n        \"TRY\",\n        \"TTD\",\n        \"TWD\",\n        \"TZS\",\n        \"UAH\",\n        \"UGX\",\n        \"USD\",\n        \"USN\",\n        \"UYI\",\n        \"UYU\",\n        \"UZS\",\n        \"VEF\",\n        \"VND\",\n        \"VUV\",\n        \"WST\",\n        \"XAF\",\n        \"XAG\",\n        \"XAU\",\n        \"XBA\",\n        \"XBB\",\n        \"XBC\",\n        \"XBD\",\n        \"XCD\",\n        \"XDR\",\n        \"XOF\",\n        \"XPD\",\n        \"XPF\",\n        \"XPT\",\n        \"XSU\",\n        \"XTS\",\n        \"XUA\",\n        \"XXX\",\n        \"YER\",\n        \"ZAR\",\n        \"ZMW\",\n        \"ZWL\",\n    ];\n}\n_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"Serializer\"].addClass(\"expression\", [\n    \"expression:expression\",\n    { name: \"format\", serializationProperty: \"locFormat\" },\n    {\n        name: \"displayStyle\",\n        default: \"none\",\n        choices: [\"none\", \"decimal\", \"currency\", \"percent\", \"date\"],\n    },\n    {\n        name: \"currency\",\n        choices: function () {\n            return getCurrecyCodes();\n        },\n        default: \"USD\",\n    },\n    { name: \"maximumFractionDigits:number\", default: -1 },\n    { name: \"minimumFractionDigits:number\", default: -1 },\n    { name: \"useGrouping:boolean\", default: true },\n    { name: \"precision:number\", default: -1, category: \"data\" },\n    { name: \"enableIf\", visible: false },\n    { name: \"isRequired\", visible: false },\n    { name: \"readOnly\", visible: false },\n    { name: \"requiredErrorText\", visible: false },\n    { name: \"defaultValueExpression\", visible: false },\n    { name: \"defaultValue\", visible: false },\n    { name: \"correctAnswer\", visible: false },\n    { name: \"requiredIf\", visible: false }\n], function () {\n    return new QuestionExpressionModel(\"\");\n}, \"question\");\n_questionfactory__WEBPACK_IMPORTED_MODULE_3__[\"QuestionFactory\"].Instance.registerQuestion(\"expression\", function (name) {\n    return new QuestionExpressionModel(name);\n});\n\n\n/***/ }),\n\n/***/ \"./src/question_file.ts\":\n/*!******************************!*\\\n  !*** ./src/question_file.ts ***!\n  \\******************************/\n/*! exports provided: QuestionFileModel, FileLoader */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_2849975__) {\n\n\"use strict\";\n__nested_webpack_require_2849975__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_2849975__.d(__nested_webpack_exports__, \"QuestionFileModel\", function() { return QuestionFileModel; });\n/* harmony export (binding) */ __nested_webpack_require_2849975__.d(__nested_webpack_exports__, \"FileLoader\", function() { return FileLoader; });\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_2849975__(/*! ./question */ \"./src/question.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_2849975__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_2849975__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_2849975__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _error__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_2849975__(/*! ./error */ \"./src/error.ts\");\n/* harmony import */ var _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_2849975__(/*! ./utils/cssClassBuilder */ \"./src/utils/cssClassBuilder.ts\");\n/* harmony import */ var _utils_utils__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_2849975__(/*! ./utils/utils */ \"./src/utils/utils.ts\");\n/* harmony import */ var _actions_container__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_2849975__(/*! ./actions/container */ \"./src/actions/container.ts\");\n/* harmony import */ var _actions_action__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_2849975__(/*! ./actions/action */ \"./src/actions/action.ts\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_9__ = __nested_webpack_require_2849975__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _utils_camera__WEBPACK_IMPORTED_MODULE_10__ = __nested_webpack_require_2849975__(/*! ./utils/camera */ \"./src/utils/camera.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\n\n\n\n\n\n\n/**\n * A class that describes the File Upload question type.\n *\n * [View Demo](https://surveyjs.io/form-library/examples/file-upload/ (linkStyle))\n */\nvar QuestionFileModel = /** @class */ (function (_super) {\n    __extends(QuestionFileModel, _super);\n    function QuestionFileModel(name) {\n        var _this = _super.call(this, name) || this;\n        _this.isUploading = false;\n        _this.isDragging = false;\n        /**\n         * An event that is raised after the upload state has changed.\n         *\n         * Parameters:\n         *\n         * - `sender`: `SurveyModel`\\\n         * A survey instance that raised the event.\n         * - `options.state`: `String`\\\n         * The current upload state: `\"empty\"`, `\"loading\"`, `\"loaded\"`, or `\"error\"`.\n         */\n        _this.onUploadStateChanged = _this.addEvent();\n        _this.onStateChanged = _this.addEvent();\n        _this.fileNavigator = new _actions_container__WEBPACK_IMPORTED_MODULE_7__[\"ActionContainer\"]();\n        _this.actionsContainer = new _actions_container__WEBPACK_IMPORTED_MODULE_7__[\"ActionContainer\"]();\n        _this.canFlipCameraValue = undefined;\n        _this.prevPreviewLength = 0;\n        _this.calcAvailableItemsCount = function (availableWidth, itemWidth, gap) {\n            var itemsCount = Math.floor(availableWidth / (itemWidth + gap));\n            if ((itemsCount + 1) * (itemWidth + gap) - gap <= availableWidth)\n                itemsCount++;\n            return itemsCount;\n        };\n        _this.dragCounter = 0;\n        _this.onDragEnter = function (event) {\n            if (_this.canDragDrop()) {\n                event.preventDefault();\n                _this.isDragging = true;\n                _this.dragCounter++;\n            }\n        };\n        _this.onDragOver = function (event) {\n            if (!_this.canDragDrop()) {\n                event.returnValue = false;\n                return false;\n            }\n            event.dataTransfer.dropEffect = \"copy\";\n            event.preventDefault();\n        };\n        _this.onDrop = function (event) {\n            if (_this.canDragDrop()) {\n                _this.isDragging = false;\n                _this.dragCounter = 0;\n                event.preventDefault();\n                var src = event.dataTransfer;\n                _this.onChange(src);\n            }\n        };\n        _this.onDragLeave = function (event) {\n            if (_this.canDragDrop()) {\n                _this.dragCounter--;\n                if (_this.dragCounter === 0) {\n                    _this.isDragging = false;\n                }\n            }\n        };\n        _this.doChange = function (event) {\n            var src = event.target || event.srcElement;\n            _this.onChange(src);\n        };\n        _this.doClean = function () {\n            if (_this.needConfirmRemoveFile) {\n                Object(_utils_utils__WEBPACK_IMPORTED_MODULE_6__[\"confirmActionAsync\"])(_this.confirmRemoveAllMessage, function () { _this.clearFilesCore(); });\n                return;\n            }\n            _this.clearFilesCore();\n        };\n        _this.doDownloadFile = function (event, data) {\n            if (Object(_utils_utils__WEBPACK_IMPORTED_MODULE_6__[\"detectIEOrEdge\"])()) {\n                event.preventDefault();\n                Object(_utils_utils__WEBPACK_IMPORTED_MODULE_6__[\"loadFileFromBase64\"])(data.content, data.name);\n            }\n        };\n        _this.fileIndexAction = new _actions_action__WEBPACK_IMPORTED_MODULE_8__[\"Action\"]({\n            id: \"fileIndex\",\n            title: _this.getFileIndexCaption(),\n            enabled: false\n        });\n        _this.prevFileAction = new _actions_action__WEBPACK_IMPORTED_MODULE_8__[\"Action\"]({\n            id: \"prevPage\",\n            iconSize: 16,\n            action: function () {\n                _this.indexToShow = _this.previewValue.length && ((_this.indexToShow - 1 + _this.pagesCount) % _this.pagesCount) || 0;\n                _this.fileIndexAction.title = _this.getFileIndexCaption();\n            }\n        });\n        _this.nextFileAction = new _actions_action__WEBPACK_IMPORTED_MODULE_8__[\"Action\"]({\n            id: \"nextPage\",\n            iconSize: 16,\n            action: function () {\n                _this.indexToShow = _this.previewValue.length && ((_this.indexToShow + 1) % _this.pagesCount) || 0;\n                _this.fileIndexAction.title = _this.getFileIndexCaption();\n            }\n        });\n        _this.takePictureAction = new _actions_action__WEBPACK_IMPORTED_MODULE_8__[\"Action\"]({\n            iconName: \"icon-takepicture\",\n            id: \"sv-file-take-picture\",\n            iconSize: \"auto\",\n            innerCss: new _base__WEBPACK_IMPORTED_MODULE_3__[\"ComputedUpdater\"](function () { return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_5__[\"CssClassBuilder\"]().append(_this.cssClasses.contextButton).append(_this.cssClasses.takePictureButton).toString(); }),\n            title: new _base__WEBPACK_IMPORTED_MODULE_3__[\"ComputedUpdater\"](function () { return _this.takePhotoCaption; }),\n            showTitle: false,\n            action: function () {\n                _this.snapPicture();\n            }\n        });\n        _this.closeCameraAction = new _actions_action__WEBPACK_IMPORTED_MODULE_8__[\"Action\"]({\n            iconName: \"icon-closecamera\",\n            id: \"sv-file-close-camera\",\n            iconSize: \"auto\",\n            innerCss: new _base__WEBPACK_IMPORTED_MODULE_3__[\"ComputedUpdater\"](function () { return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_5__[\"CssClassBuilder\"]().append(_this.cssClasses.contextButton).append(_this.cssClasses.closeCameraButton).toString(); }),\n            action: function () {\n                _this.stopVideo();\n            }\n        });\n        _this.changeCameraAction = new _actions_action__WEBPACK_IMPORTED_MODULE_8__[\"Action\"]({\n            iconName: \"icon-changecamera\",\n            id: \"sv-file-change-camera\",\n            iconSize: \"auto\",\n            innerCss: new _base__WEBPACK_IMPORTED_MODULE_3__[\"ComputedUpdater\"](function () { return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_5__[\"CssClassBuilder\"]().append(_this.cssClasses.contextButton).append(_this.cssClasses.changeCameraButton).toString(); }),\n            visible: new _base__WEBPACK_IMPORTED_MODULE_3__[\"ComputedUpdater\"](function () { return _this.canFlipCamera(); }),\n            action: function () {\n                _this.flipCamera();\n            }\n        });\n        _this.chooseFileAction = new _actions_action__WEBPACK_IMPORTED_MODULE_8__[\"Action\"]({\n            iconName: \"icon-choosefile\",\n            id: \"sv-file-choose-file\",\n            iconSize: \"auto\",\n            data: { question: _this },\n            component: \"sv-file-choose-btn\"\n        });\n        _this.startCameraAction = new _actions_action__WEBPACK_IMPORTED_MODULE_8__[\"Action\"]({\n            iconName: \"icon-takepicture_24x24\",\n            id: \"sv-file-start-camera\",\n            iconSize: \"auto\",\n            title: new _base__WEBPACK_IMPORTED_MODULE_3__[\"ComputedUpdater\"](function () { return _this.takePhotoCaption; }),\n            showTitle: new _base__WEBPACK_IMPORTED_MODULE_3__[\"ComputedUpdater\"](function () { return !_this.isAnswered; }),\n            action: function () {\n                _this.startVideo();\n            }\n        });\n        _this.cleanAction = new _actions_action__WEBPACK_IMPORTED_MODULE_8__[\"Action\"]({\n            iconName: \"icon-clear\",\n            id: \"sv-file-clean\",\n            iconSize: \"auto\",\n            title: new _base__WEBPACK_IMPORTED_MODULE_3__[\"ComputedUpdater\"](function () { return _this.clearButtonCaption; }),\n            showTitle: false,\n            innerCss: new _base__WEBPACK_IMPORTED_MODULE_3__[\"ComputedUpdater\"](function () { return _this.cssClasses.removeButton; }),\n            action: function () {\n                _this.doClean();\n            }\n        });\n        [_this.closeCameraAction, _this.changeCameraAction, _this.takePictureAction].forEach(function (action) {\n            action.cssClasses = {};\n        });\n        _this.registerFunctionOnPropertiesValueChanged([\"currentMode\", \"isAnswered\"], function () {\n            _this.updateActions();\n        });\n        _this.updateActions();\n        _this.actionsContainer.actions = [_this.chooseFileAction, _this.startCameraAction, _this.cleanAction];\n        _this.fileNavigator.actions = [_this.prevFileAction, _this.fileIndexAction, _this.nextFileAction];\n        return _this;\n    }\n    Object.defineProperty(QuestionFileModel.prototype, \"fileNavigatorVisible\", {\n        get: function () {\n            var isUploading = this.isUploading;\n            var isPlayingVideo = this.isPlayingVideo;\n            var containsMultipleFiles = this.containsMultiplyFiles;\n            var needToShowFileNavigator = this.pageSize < this.previewValue.length;\n            return !isUploading && !isPlayingVideo && containsMultipleFiles && needToShowFileNavigator && this.isDefaultV2Theme;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionFileModel.prototype, \"pagesCount\", {\n        get: function () {\n            return Math.ceil(this.previewValue.length / this.pageSize);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionFileModel.prototype, \"actionsContainerVisible\", {\n        get: function () {\n            var isUploading = this.isUploading;\n            var isPlayingVideo = this.isPlayingVideo;\n            var isDefaultV2Theme = this.isDefaultV2Theme;\n            var isReadOnly = this.isInputReadOnly;\n            return !isUploading && !isPlayingVideo && !isReadOnly && isDefaultV2Theme;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionFileModel.prototype, \"videoId\", {\n        get: function () { return this.id + \"_video\"; },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionFileModel.prototype, \"hasVideoUI\", {\n        get: function () { return this.currentMode !== \"file\"; },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionFileModel.prototype, \"hasFileUI\", {\n        get: function () { return this.currentMode !== \"camera\"; },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionFileModel.prototype.startVideo = function () {\n        var _this = this;\n        if (this.currentMode === \"file\" || this.isDesignMode || this.isPlayingVideo)\n            return;\n        this.setIsPlayingVideo(true);\n        setTimeout(function () {\n            _this.startVideoInCamera();\n        }, 0);\n    };\n    QuestionFileModel.prototype.startVideoInCamera = function () {\n        var _this = this;\n        this.camera.startVideo(this.videoId, function (stream) {\n            _this.videoStream = stream;\n            if (!stream) {\n                _this.stopVideo();\n            }\n        }, this.imageWidth, this.imageHeight);\n    };\n    QuestionFileModel.prototype.stopVideo = function () {\n        this.setIsPlayingVideo(false);\n        this.closeVideoStream();\n    };\n    QuestionFileModel.prototype.snapPicture = function () {\n        var _this = this;\n        if (!this.isPlayingVideo)\n            return;\n        var blobCallback = function (blob) {\n            if (blob) {\n                var file = new File([blob], \"snap_picture.png\", { type: \"image/png\" });\n                _this.loadFiles([file]);\n            }\n        };\n        this.camera.snap(this.videoId, blobCallback);\n        this.stopVideo();\n    };\n    QuestionFileModel.prototype.canFlipCamera = function () {\n        var _this = this;\n        if (this.canFlipCameraValue === undefined) {\n            this.canFlipCameraValue = this.camera.canFlip(function (res) {\n                _this.canFlipCameraValue = res;\n            });\n        }\n        return this.canFlipCameraValue;\n    };\n    QuestionFileModel.prototype.flipCamera = function () {\n        if (!this.canFlipCamera())\n            return;\n        this.closeVideoStream();\n        this.camera.flip();\n        this.startVideoInCamera();\n    };\n    QuestionFileModel.prototype.closeVideoStream = function () {\n        if (!!this.videoStream) {\n            this.videoStream.getTracks().forEach(function (track) {\n                track.stop();\n            });\n            this.videoStream = undefined;\n        }\n    };\n    QuestionFileModel.prototype.onHidingContent = function () {\n        _super.prototype.onHidingContent.call(this);\n        this.stopVideo();\n    };\n    QuestionFileModel.prototype.updateElementCssCore = function (cssClasses) {\n        _super.prototype.updateElementCssCore.call(this, cssClasses);\n        this.prevFileAction.iconName = this.cssClasses.leftIconId;\n        this.nextFileAction.iconName = this.cssClasses.rightIconId;\n        //this.mobileFileNavigator.cssClasses = this.survey.getCss().actionBar;\n    };\n    QuestionFileModel.prototype.getFileIndexCaption = function () {\n        return this.getLocalizationFormatString(\"indexText\", this.indexToShow + 1, this.pagesCount);\n    };\n    QuestionFileModel.prototype.updateFileNavigator = function () {\n        this.indexToShow = this.previewValue.length && ((this.indexToShow + this.pagesCount) % this.pagesCount) || 0;\n        this.fileIndexAction.title = this.getFileIndexCaption();\n    };\n    QuestionFileModel.prototype.previewValueChanged = function () {\n        var _this = this;\n        if (this.previewValue.length !== this.prevPreviewLength) {\n            if (this.previewValue.length > 0) {\n                if (this.prevPreviewLength > this.previewValue.length) {\n                    this.indexToShow = this.indexToShow >= this.pagesCount && this.indexToShow > 0 ? this.pagesCount - 1 : this.indexToShow;\n                }\n                else {\n                    this.indexToShow = Math.floor(this.prevPreviewLength / this.pageSize);\n                }\n            }\n            else {\n                this.indexToShow = 0;\n            }\n        }\n        this.fileIndexAction.title = this.getFileIndexCaption();\n        this.containsMultiplyFiles = this.previewValue.length > 1;\n        if (this.previewValue.length > 0 && !this.calculatedGapBetweenItems && !this.calculatedItemWidth) {\n            setTimeout(function () {\n                _this.processResponsiveness(0, _this._width);\n            });\n        }\n        this.prevPreviewLength = this.previewValue.length;\n    };\n    QuestionFileModel.prototype.isPreviewVisible = function (index) {\n        var isFileNavigatorVisible = this.fileNavigatorVisible;\n        var isPreviewVisible = (this.indexToShow * this.pageSize <= index && index < (this.indexToShow + 1) * this.pageSize);\n        return !isFileNavigatorVisible || isPreviewVisible;\n    };\n    QuestionFileModel.prototype.getType = function () {\n        return \"file\";\n    };\n    QuestionFileModel.prototype.clearValue = function () {\n        this.clearOnDeletingContainer();\n        _super.prototype.clearValue.call(this);\n    };\n    QuestionFileModel.prototype.clearOnDeletingContainer = function () {\n        if (!this.survey)\n            return;\n        this.survey.clearFiles(this, this.name, this.value, null, function () { });\n    };\n    Object.defineProperty(QuestionFileModel.prototype, \"showPreview\", {\n        /**\n         * Disable this property only to implement a custom preview.\n         *\n         * [View Demo](https://surveyjs.io/form-library/examples/file-custom-preview/ (linkStyle))\n         * @see allowImagesPreview\n         */\n        get: function () {\n            return this.getPropertyValue(\"showPreview\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"showPreview\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionFileModel.prototype, \"allowMultiple\", {\n        /**\n         * Specifies whether users can upload multiple files.\n         *\n         * Default value: `false`\n         */\n        get: function () {\n            return this.getPropertyValue(\"allowMultiple\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"allowMultiple\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionFileModel.prototype, \"imageHeight\", {\n        /**\n         * The image height.\n         */\n        get: function () {\n            return this.getPropertyValue(\"imageHeight\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"imageHeight\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionFileModel.prototype, \"imageWidth\", {\n        /**\n         * The image width.\n         */\n        get: function () {\n            return this.getPropertyValue(\"imageWidth\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"imageWidth\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionFileModel.prototype, \"acceptedTypes\", {\n        /**\n         * An [accept](https://www.w3schools.com/tags/att_input_accept.asp) attribute value for the underlying `<input>` element.\n         */\n        get: function () {\n            return this.getPropertyValue(\"acceptedTypes\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"acceptedTypes\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionFileModel.prototype, \"storeDataAsText\", {\n        /**\n         * Specifies whether to store file content as text in `SurveyModel`'s [`data`](https://surveyjs.io/form-library/documentation/surveymodel#data) property.\n         *\n         * If you disable this property, implement `SurveyModel`'s [`onUploadFiles`](https://surveyjs.io/form-library/documentation/surveymodel#onUploadFiles) event handler to specify how to store file content.\n         */\n        get: function () {\n            return this.getPropertyValue(\"storeDataAsText\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"storeDataAsText\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionFileModel.prototype, \"waitForUpload\", {\n        /**\n         * Enable this property if you want to wait until files are uploaded to complete the survey.\n         *\n         * Default value: `false`\n         */\n        get: function () {\n            return this.getPropertyValue(\"waitForUpload\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"waitForUpload\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionFileModel.prototype, \"allowImagesPreview\", {\n        /**\n         * Specifies whether to show a preview of image files.\n         */\n        get: function () {\n            return this.getPropertyValue(\"allowImagesPreview\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"allowImagesPreview\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionFileModel.prototype, \"maxSize\", {\n        /**\n         * Maximum allowed file size, measured in bytes.\n         *\n         * Default value: 0 (unlimited)\n         */\n        get: function () {\n            return this.getPropertyValue(\"maxSize\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"maxSize\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionFileModel.prototype, \"needConfirmRemoveFile\", {\n        /**\n         * Specifies whether users should confirm file deletion.\n         *\n         * Default value: `false`\n         */\n        get: function () {\n            return this.getPropertyValue(\"needConfirmRemoveFile\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"needConfirmRemoveFile\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionFileModel.prototype.getConfirmRemoveMessage = function (fileName) {\n        return this.confirmRemoveMessage.format(fileName);\n    };\n    Object.defineProperty(QuestionFileModel.prototype, \"renderedPlaceholder\", {\n        get: function () {\n            var _this = this;\n            if (this.renderedPlaceholderValue === undefined) {\n                this.renderedPlaceholderValue = (new _base__WEBPACK_IMPORTED_MODULE_3__[\"ComputedUpdater\"](function () {\n                    var dragAreaText = _this.dragAreaPlaceholder;\n                    var fileCameraDragAreaPlaceHolder = _this.fileCameraDragAreaPlaceholder;\n                    var cameraPlaceHolder = _this.cameraPlaceholder;\n                    var readOnlyText = _this.noFileChosenCaption;\n                    var isReadOnly = _this.isReadOnly;\n                    var hasFileUI = _this.hasFileUI;\n                    var hasVideoUI = _this.hasVideoUI;\n                    var renderedPlaceholder = \"\";\n                    if (isReadOnly) {\n                        renderedPlaceholder = readOnlyText;\n                    }\n                    else if (hasFileUI) {\n                        if (hasVideoUI) {\n                            renderedPlaceholder = fileCameraDragAreaPlaceHolder;\n                        }\n                        else {\n                            renderedPlaceholder = dragAreaText;\n                        }\n                    }\n                    else {\n                        renderedPlaceholder = cameraPlaceHolder;\n                    }\n                    return renderedPlaceholder;\n                }));\n            }\n            return this.renderedPlaceholderValue;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionFileModel.prototype, \"currentMode\", {\n        get: function () {\n            return this.getPropertyValue(\"currentMode\", this.sourceType);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionFileModel.prototype, \"isPlayingVideo\", {\n        get: function () {\n            return this.getPropertyValue(\"isPlayingVideo\", false);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionFileModel.prototype.setIsPlayingVideo = function (show) {\n        this.setPropertyValue(\"isPlayingVideo\", show);\n    };\n    QuestionFileModel.prototype.updateCurrentMode = function () {\n        var _this = this;\n        if (!this.isDesignMode) {\n            if (this.sourceType !== \"file\") {\n                this.camera.hasCamera(function (res) {\n                    _this.setPropertyValue(\"currentMode\", res && _this.isDefaultV2Theme ? _this.sourceType : \"file\");\n                });\n            }\n            else {\n                this.setPropertyValue(\"currentMode\", this.sourceType);\n            }\n        }\n    };\n    QuestionFileModel.prototype.updateActions = function () {\n        this.chooseFileAction.visible = this.hasFileUI;\n        this.startCameraAction.visible = this.hasVideoUI;\n        this.cleanAction.visible = !!this.isAnswered;\n    };\n    Object.defineProperty(QuestionFileModel.prototype, \"inputTitle\", {\n        get: function () {\n            if (this.isUploading)\n                return this.loadingFileTitle;\n            if (this.isEmpty())\n                return this.chooseFileTitle;\n            return \" \";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionFileModel.prototype, \"chooseButtonText\", {\n        get: function () {\n            return this.isEmpty() || this.allowMultiple ? this.chooseButtonCaption : this.replaceButtonCaption;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionFileModel.prototype.clear = function (doneCallback) {\n        var _this = this;\n        if (!this.survey)\n            return;\n        this.containsMultiplyFiles = false;\n        this.survey.clearFiles(this, this.name, this.value, null, function (status, data) {\n            if (status === \"success\") {\n                _this.value = undefined;\n                _this.errors = [];\n                !!doneCallback && doneCallback();\n                _this.indexToShow = 0;\n                _this.fileIndexAction.title = _this.getFileIndexCaption();\n            }\n        });\n    };\n    Object.defineProperty(QuestionFileModel.prototype, \"renderCapture\", {\n        get: function () {\n            return this.allowCameraAccess ? \"user\" : undefined;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionFileModel.prototype, \"multipleRendered\", {\n        get: function () {\n            return this.allowMultiple ? \"multiple\" : undefined;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionFileModel.prototype, \"showChooseButton\", {\n        //todo: remove it in V2\n        get: function () {\n            return !this.isReadOnly && !this.isDefaultV2Theme;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionFileModel.prototype, \"showFileDecorator\", {\n        //\n        get: function () {\n            var isPlayingVideo = this.isPlayingVideo;\n            var showLoadingIndicator = this.showLoadingIndicator;\n            return !isPlayingVideo && !showLoadingIndicator;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionFileModel.prototype, \"showLoadingIndicator\", {\n        get: function () {\n            return this.isUploading && this.isDefaultV2Theme;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionFileModel.prototype, \"allowShowPreview\", {\n        get: function () {\n            var isShowLoadingIndicator = this.showLoadingIndicator;\n            var isPlayingVideo = this.isPlayingVideo;\n            return this.previewValue && this.previewValue.length > 0 && !isShowLoadingIndicator && !isPlayingVideo;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionFileModel.prototype, \"showRemoveButtonCore\", {\n        //todo: remove in V2\n        get: function () {\n            var showLoadingIndicator = this.showLoadingIndicator;\n            var isReadOnly = this.isReadOnly;\n            var isEmpty = this.isEmpty();\n            return !isReadOnly && !isEmpty && !showLoadingIndicator && !this.isDefaultV2Theme;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionFileModel.prototype, \"showRemoveButton\", {\n        get: function () {\n            return this.showRemoveButtonCore && this.cssClasses.removeButton;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionFileModel.prototype, \"showRemoveButtonBottom\", {\n        get: function () {\n            var cssClasses = new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_5__[\"CssClassBuilder\"]().append(this.cssClasses.removeButtonBottom).append(this.cssClasses.contextButton).toString();\n            return this.showRemoveButtonCore && cssClasses;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    //\n    QuestionFileModel.prototype.defaultImage = function (data) {\n        return !this.canPreviewImage(data) && !!this.cssClasses.defaultImage;\n    };\n    /**\n     * Removes a file with a specified name.\n     */\n    QuestionFileModel.prototype.removeFile = function (name) {\n        this.removeFileByContent(this.value.filter(function (f) { return f.name === name; })[0]);\n    };\n    QuestionFileModel.prototype.removeFileByContent = function (content) {\n        var _this = this;\n        if (!this.survey)\n            return;\n        this.survey.clearFiles(this, this.name, this.value, content.name, function (status, data) {\n            if (status === \"success\") {\n                var oldValue = _this.value;\n                if (Array.isArray(oldValue)) {\n                    _this.value = oldValue.filter(function (f) { return !_helpers__WEBPACK_IMPORTED_MODULE_9__[\"Helpers\"].isTwoValueEquals(f, content, true, false, false); });\n                }\n                else {\n                    _this.value = undefined;\n                }\n            }\n        });\n    };\n    /**\n     * Loads multiple files into the question.\n     * @param files An array of [File](https://developer.mozilla.org/en-US/docs/Web/API/File) objects.\n     */\n    QuestionFileModel.prototype.loadFiles = function (files) {\n        var _this = this;\n        if (!this.survey) {\n            return;\n        }\n        this.errors = [];\n        if (!this.allFilesOk(files)) {\n            return;\n        }\n        var loadFilesProc = function () {\n            _this.stateChanged(\"loading\");\n            var content = [];\n            if (_this.storeDataAsText) {\n                files.forEach(function (file) {\n                    var fileReader = new FileReader();\n                    fileReader.onload = function (e) {\n                        content = content.concat([\n                            { name: file.name, type: file.type, content: fileReader.result },\n                        ]);\n                        if (content.length === files.length) {\n                            _this.value = (_this.value || []).concat(content);\n                        }\n                    };\n                    fileReader.readAsDataURL(file);\n                });\n            }\n            else {\n                if (_this.survey) {\n                    _this.survey.uploadFiles(_this, _this.name, files, function (status, data) {\n                        if (status === \"error\") {\n                            _this.stateChanged(\"error\");\n                        }\n                        if (status === \"success\") {\n                            _this.value = (_this.value || []).concat(data.map(function (r) {\n                                return {\n                                    name: r.file.name,\n                                    type: r.file.type,\n                                    content: r.content,\n                                };\n                            }));\n                        }\n                    });\n                }\n            }\n        };\n        if (this.allowMultiple) {\n            loadFilesProc();\n        }\n        else {\n            this.clear(loadFilesProc);\n        }\n    };\n    Object.defineProperty(QuestionFileModel.prototype, \"camera\", {\n        get: function () {\n            if (!this.cameraValue) {\n                this.cameraValue = new _utils_camera__WEBPACK_IMPORTED_MODULE_10__[\"Camera\"]();\n            }\n            return this.cameraValue;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionFileModel.prototype.canPreviewImage = function (fileItem) {\n        return this.allowImagesPreview && !!fileItem && this.isFileImage(fileItem);\n    };\n    QuestionFileModel.prototype.loadPreview = function (newValue) {\n        var _this = this;\n        this.previewValue.splice(0, this.previewValue.length);\n        if (!this.showPreview || !newValue)\n            return;\n        var newValues = Array.isArray(newValue)\n            ? newValue\n            : !!newValue\n                ? [newValue]\n                : [];\n        if (this.storeDataAsText) {\n            newValues.forEach(function (value) {\n                var content = value.content || value;\n                _this.previewValue.push({\n                    name: value.name,\n                    type: value.type,\n                    content: content,\n                });\n            });\n        }\n        else {\n            if (!!this._previewLoader) {\n                this._previewLoader.dispose();\n            }\n            this.isFileLoading = true;\n            this._previewLoader = new FileLoader(this, function (status, loaded) {\n                if (status === \"loaded\") {\n                    loaded.forEach(function (val) {\n                        _this.previewValue.push(val);\n                    });\n                    _this.previewValueChanged();\n                }\n                _this.isFileLoading = false;\n                _this._previewLoader.dispose();\n                _this._previewLoader = undefined;\n            });\n            this._previewLoader.load(newValues);\n        }\n        this.previewValueChanged();\n    };\n    Object.defineProperty(QuestionFileModel.prototype, \"isFileLoading\", {\n        get: function () { return this.isFileLoadingValue; },\n        set: function (val) {\n            this.isFileLoadingValue = val;\n            this.updateIsReady();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionFileModel.prototype.getIsQuestionReady = function () {\n        return _super.prototype.getIsQuestionReady.call(this) && !this.isFileLoading;\n    };\n    QuestionFileModel.prototype.onCheckForErrors = function (errors, isOnValueChanged) {\n        _super.prototype.onCheckForErrors.call(this, errors, isOnValueChanged);\n        if (this.isUploading && this.waitForUpload) {\n            errors.push(new _error__WEBPACK_IMPORTED_MODULE_4__[\"UploadingFileError\"](this.getLocalizationString(\"uploadingFile\"), this));\n        }\n    };\n    QuestionFileModel.prototype.stateChanged = function (state) {\n        if (this.currentState == state) {\n            return;\n        }\n        if (state === \"loading\") {\n            this.isUploading = true;\n        }\n        if (state === \"loaded\") {\n            this.isUploading = false;\n        }\n        if (state === \"error\") {\n            this.isUploading = false;\n        }\n        this.currentState = state;\n        this.onStateChanged.fire(this, { state: state });\n        this.onUploadStateChanged.fire(this, { state: state });\n    };\n    QuestionFileModel.prototype.allFilesOk = function (files) {\n        var _this = this;\n        var errorLength = this.errors ? this.errors.length : 0;\n        (files || []).forEach(function (file) {\n            if (_this.maxSize > 0 && file.size > _this.maxSize) {\n                _this.errors.push(new _error__WEBPACK_IMPORTED_MODULE_4__[\"ExceedSizeError\"](_this.maxSize, _this));\n            }\n        });\n        return errorLength === this.errors.length;\n    };\n    QuestionFileModel.prototype.isFileImage = function (file) {\n        if (!file || !file.content || !file.content.substring)\n            return false;\n        var imagePrefix = \"data:image\";\n        var subStr = file.content && file.content.substring(0, imagePrefix.length);\n        subStr = subStr && subStr.toLowerCase();\n        var result = subStr === imagePrefix ||\n            (!!file.type && file.type.toLowerCase().indexOf(\"image/\") === 0);\n        return result;\n    };\n    QuestionFileModel.prototype.getPlainData = function (options) {\n        if (options === void 0) { options = {\n            includeEmpty: true,\n        }; }\n        var questionPlainData = _super.prototype.getPlainData.call(this, options);\n        if (!!questionPlainData && !this.isEmpty()) {\n            questionPlainData.isNode = false;\n            var values = Array.isArray(this.value) ? this.value : [this.value];\n            questionPlainData.data = values.map(function (dataValue, index) {\n                return {\n                    name: index,\n                    title: \"File\",\n                    value: (dataValue.content && dataValue.content) || dataValue,\n                    displayValue: (dataValue.name && dataValue.name) || dataValue,\n                    getString: function (val) {\n                        return typeof val === \"object\" ? JSON.stringify(val) : val;\n                    },\n                    isNode: false,\n                };\n            });\n        }\n        return questionPlainData;\n    };\n    QuestionFileModel.prototype.getActionsContainerCss = function (css) {\n        return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_5__[\"CssClassBuilder\"]()\n            .append(css.actionsContainer)\n            .append(css.actionsContainerAnswered, this.isAnswered)\n            .toString();\n    };\n    QuestionFileModel.prototype.getRemoveButtonCss = function () {\n        return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_5__[\"CssClassBuilder\"]()\n            .append(this.cssClasses.removeFileButton)\n            .append(this.cssClasses.contextButton)\n            .toString();\n    };\n    QuestionFileModel.prototype.getChooseFileCss = function () {\n        var isAnswered = this.isAnswered;\n        return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_5__[\"CssClassBuilder\"]()\n            .append(this.cssClasses.chooseFile)\n            .append(this.cssClasses.controlDisabled, this.isReadOnly)\n            .append(this.cssClasses.chooseFileAsText, !isAnswered)\n            .append(this.cssClasses.chooseFileAsTextDisabled, !isAnswered && this.isInputReadOnly)\n            .append(this.cssClasses.contextButton, isAnswered)\n            .append(this.cssClasses.chooseFileAsIcon, isAnswered)\n            .toString();\n    };\n    QuestionFileModel.prototype.getReadOnlyFileCss = function () {\n        return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_5__[\"CssClassBuilder\"]()\n            .append(\"form-control\")\n            .append(this.cssClasses.placeholderInput)\n            .toString();\n    };\n    Object.defineProperty(QuestionFileModel.prototype, \"fileRootCss\", {\n        get: function () {\n            return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_5__[\"CssClassBuilder\"]()\n                .append(this.cssClasses.root)\n                .append(this.cssClasses.rootDragging, this.isDragging)\n                .append(this.cssClasses.rootAnswered, this.isAnswered)\n                .append(this.cssClasses.single, !this.allowMultiple)\n                .append(this.cssClasses.singleImage, !this.allowMultiple && this.isAnswered && this.canPreviewImage(this.value[0]))\n                .append(this.cssClasses.mobile, this.isMobile)\n                .toString();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionFileModel.prototype.getFileDecoratorCss = function () {\n        return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_5__[\"CssClassBuilder\"]()\n            .append(this.cssClasses.fileDecorator)\n            .append(this.cssClasses.onError, this.errors.length > 0)\n            .append(this.cssClasses.fileDecoratorDrag, this.isDragging)\n            .toString();\n    };\n    QuestionFileModel.prototype.onChange = function (src) {\n        if (!window[\"FileReader\"])\n            return;\n        if (!src || !src.files || src.files.length < 1)\n            return;\n        var files = [];\n        var allowCount = this.allowMultiple ? src.files.length : 1;\n        for (var i = 0; i < allowCount; i++) {\n            files.push(src.files[i]);\n        }\n        src.value = \"\";\n        this.loadFiles(files);\n    };\n    QuestionFileModel.prototype.onChangeQuestionValue = function (newValue) {\n        _super.prototype.onChangeQuestionValue.call(this, newValue);\n        this.stateChanged(this.isEmpty() ? \"empty\" : \"loaded\");\n        if (!this.isLoadingFromJson) {\n            this.loadPreview(newValue);\n        }\n    };\n    QuestionFileModel.prototype.calcCssClasses = function (css) {\n        var classes = _super.prototype.calcCssClasses.call(this, css);\n        this.actionsContainer.cssClasses = css.actionBar;\n        this.actionsContainer.cssClasses.itemWithTitle = this.actionsContainer.cssClasses.item;\n        this.actionsContainer.cssClasses.item = \"\";\n        this.actionsContainer.cssClasses.itemAsIcon = classes.contextButton;\n        this.actionsContainer.containerCss = classes.actionsContainer;\n        return classes;\n    };\n    //todo remove in v2\n    QuestionFileModel.prototype.updateElementCss = function (reNew) {\n        _super.prototype.updateElementCss.call(this, reNew);\n        this.updateCurrentMode();\n    };\n    QuestionFileModel.prototype.endLoadingFromJson = function () {\n        _super.prototype.endLoadingFromJson.call(this);\n        this.updateCurrentMode();\n        this.updateActions();\n        this.loadPreview(this.value);\n    };\n    QuestionFileModel.prototype.needResponsiveness = function () {\n        return this.supportResponsiveness() && this.isDefaultV2Theme;\n    };\n    QuestionFileModel.prototype.supportResponsiveness = function () {\n        return true;\n    };\n    QuestionFileModel.prototype.getObservedElementSelector = function () {\n        return Object(_utils_utils__WEBPACK_IMPORTED_MODULE_6__[\"classesToSelector\"])(this.cssClasses.dragArea);\n    };\n    QuestionFileModel.prototype.getFileListSelector = function () {\n        return Object(_utils_utils__WEBPACK_IMPORTED_MODULE_6__[\"classesToSelector\"])(this.cssClasses.fileList);\n    };\n    QuestionFileModel.prototype.triggerResponsiveness = function (hard) {\n        if (hard) {\n            this.calculatedGapBetweenItems = undefined;\n            this.calculatedItemWidth = undefined;\n        }\n        _super.prototype.triggerResponsiveness.call(this);\n    };\n    QuestionFileModel.prototype.processResponsiveness = function (_, availableWidth) {\n        var _this = this;\n        this._width = availableWidth;\n        if (this.rootElement) {\n            if ((!this.calculatedGapBetweenItems || !this.calculatedItemWidth) && this.allowMultiple) {\n                var fileListSelector = this.getFileListSelector();\n                var fileListElement = fileListSelector ? this.rootElement.querySelector(this.getFileListSelector()) : undefined;\n                if (fileListElement) {\n                    this.calculatedGapBetweenItems = Math.ceil(Number.parseFloat(window.getComputedStyle(fileListElement).gap));\n                    var firstVisibleItem = Array.from(fileListElement.children).filter(function (_, index) { return _this.isPreviewVisible(index); })[0];\n                    if (firstVisibleItem) {\n                        this.calculatedItemWidth = Math.ceil(Number.parseFloat(window.getComputedStyle(firstVisibleItem).width));\n                    }\n                }\n            }\n        }\n        if (this.calculatedGapBetweenItems && this.calculatedItemWidth) {\n            this.pageSize = this.calcAvailableItemsCount(availableWidth, this.calculatedItemWidth, this.calculatedGapBetweenItems);\n            return true;\n        }\n        return false;\n    };\n    QuestionFileModel.prototype.canDragDrop = function () { return !this.isInputReadOnly && this.currentMode !== \"camera\" && !this.isPlayingVideo; };\n    QuestionFileModel.prototype.afterRender = function (el) {\n        this.rootElement = el;\n        _super.prototype.afterRender.call(this, el);\n    };\n    QuestionFileModel.prototype.clearFilesCore = function () {\n        if (this.rootElement) {\n            var input = this.rootElement.querySelectorAll(\"input\")[0];\n            if (input) {\n                input.value = \"\";\n            }\n        }\n        this.clear();\n    };\n    QuestionFileModel.prototype.doRemoveFile = function (data) {\n        var _this = this;\n        if (this.needConfirmRemoveFile) {\n            Object(_utils_utils__WEBPACK_IMPORTED_MODULE_6__[\"confirmActionAsync\"])(this.getConfirmRemoveMessage(data.name), function () { _this.removeFileCore(data); });\n            return;\n        }\n        this.removeFileCore(data);\n    };\n    QuestionFileModel.prototype.removeFileCore = function (data) {\n        var previewIndex = this.previewValue.indexOf(data);\n        this.removeFileByContent(previewIndex === -1 ? data : this.value[previewIndex]);\n    };\n    //#endregion\n    QuestionFileModel.prototype.dispose = function () {\n        this.cameraValue = undefined;\n        this.closeVideoStream();\n        _super.prototype.dispose.call(this);\n    };\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n    ], QuestionFileModel.prototype, \"isUploading\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n    ], QuestionFileModel.prototype, \"isDragging\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"propertyArray\"])({})\n    ], QuestionFileModel.prototype, \"previewValue\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: \"empty\" })\n    ], QuestionFileModel.prototype, \"currentState\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: 0 })\n    ], QuestionFileModel.prototype, \"indexToShow\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: 1, onSet: function (_, target) {\n                target.updateFileNavigator();\n            } })\n    ], QuestionFileModel.prototype, \"pageSize\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: false })\n    ], QuestionFileModel.prototype, \"containsMultiplyFiles\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n    ], QuestionFileModel.prototype, \"allowCameraAccess\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ onSet: function (val, obj) {\n                if (!obj.isLoadingFromJson) {\n                    obj.updateCurrentMode();\n                }\n            } })\n    ], QuestionFileModel.prototype, \"sourceType\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n    ], QuestionFileModel.prototype, \"canFlipCameraValue\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ localizable: { defaultStr: \"confirmRemoveFile\" } })\n    ], QuestionFileModel.prototype, \"confirmRemoveMessage\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ localizable: { defaultStr: \"confirmRemoveAllFiles\" } })\n    ], QuestionFileModel.prototype, \"confirmRemoveAllMessage\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ localizable: { defaultStr: \"noFileChosen\" } })\n    ], QuestionFileModel.prototype, \"noFileChosenCaption\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ localizable: { defaultStr: \"chooseFileCaption\" } })\n    ], QuestionFileModel.prototype, \"chooseButtonCaption\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ localizable: { defaultStr: \"takePhotoCaption\" } })\n    ], QuestionFileModel.prototype, \"takePhotoCaption\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ localizable: { defaultStr: \"replaceFileCaption\" } })\n    ], QuestionFileModel.prototype, \"replaceButtonCaption\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ localizable: { defaultStr: \"clearCaption\" } })\n    ], QuestionFileModel.prototype, \"clearButtonCaption\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ localizable: { defaultStr: \"removeFileCaption\" } })\n    ], QuestionFileModel.prototype, \"removeFileCaption\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ localizable: { defaultStr: \"loadingFile\" } })\n    ], QuestionFileModel.prototype, \"loadingFileTitle\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ localizable: { defaultStr: \"chooseFile\" } })\n    ], QuestionFileModel.prototype, \"chooseFileTitle\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ localizable: { defaultStr: \"fileCameraDragAreaPlaceHolder\" } })\n    ], QuestionFileModel.prototype, \"fileCameraDragAreaPlaceholder\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ localizable: { defaultStr: \"cameraPlaceHolder\" } })\n    ], QuestionFileModel.prototype, \"cameraPlaceholder\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ localizable: { defaultStr: \"fileDragAreaPlaceholder\" } })\n    ], QuestionFileModel.prototype, \"dragAreaPlaceholder\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n    ], QuestionFileModel.prototype, \"renderedPlaceholderValue\", void 0);\n    return QuestionFileModel;\n}(_question__WEBPACK_IMPORTED_MODULE_0__[\"Question\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].addClass(\"file\", [\n    { name: \"showCommentArea:switch\", layout: \"row\", visible: true, category: \"general\" },\n    { name: \"showPreview:boolean\", default: true },\n    \"allowMultiple:boolean\",\n    { name: \"allowImagesPreview:boolean\", default: true },\n    \"imageHeight\",\n    \"imageWidth\",\n    \"acceptedTypes\",\n    { name: \"storeDataAsText:boolean\", default: true },\n    { name: \"waitForUpload:boolean\", default: false },\n    { name: \"maxSize:number\", default: 0 },\n    { name: \"defaultValue\", visible: false },\n    { name: \"correctAnswer\", visible: false },\n    { name: \"validators\", visible: false },\n    { name: \"needConfirmRemoveFile:boolean\" },\n    { name: \"allowCameraAccess:switch\", category: \"general\" },\n    { name: \"sourceType\", choices: [\"file\", \"camera\", \"file-camera\"], default: \"file\", category: \"general\", visible: true }\n], function () {\n    return new QuestionFileModel(\"\");\n}, \"question\");\n_questionfactory__WEBPACK_IMPORTED_MODULE_2__[\"QuestionFactory\"].Instance.registerQuestion(\"file\", function (name) {\n    return new QuestionFileModel(name);\n});\nvar FileLoader = /** @class */ (function () {\n    function FileLoader(fileQuestion, callback) {\n        this.fileQuestion = fileQuestion;\n        this.callback = callback;\n        this.loaded = [];\n    }\n    FileLoader.prototype.load = function (files) {\n        var _this = this;\n        var downloadedCount = 0;\n        this.loaded = new Array(files.length);\n        files.forEach(function (value, index) {\n            if (_this.fileQuestion.survey) {\n                _this.fileQuestion.survey.downloadFile(_this.fileQuestion, _this.fileQuestion.name, value, function (status, data) {\n                    if (!_this.fileQuestion || !_this.callback) {\n                        return;\n                    }\n                    if (status === \"success\") {\n                        _this.loaded[index] = {\n                            content: data,\n                            name: value.name,\n                            type: value.type,\n                        };\n                        downloadedCount++;\n                        if (downloadedCount === files.length) {\n                            _this.callback(\"loaded\", _this.loaded);\n                        }\n                    }\n                    else {\n                        _this.callback(\"error\", _this.loaded);\n                    }\n                });\n            }\n        });\n    };\n    FileLoader.prototype.dispose = function () {\n        this.fileQuestion = undefined;\n        this.callback = undefined;\n    };\n    return FileLoader;\n}());\n\n\n\n/***/ }),\n\n/***/ \"./src/question_html.ts\":\n/*!******************************!*\\\n  !*** ./src/question_html.ts ***!\n  \\******************************/\n/*! exports provided: QuestionHtmlModel */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_2904691__) {\n\n\"use strict\";\n__nested_webpack_require_2904691__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_2904691__.d(__nested_webpack_exports__, \"QuestionHtmlModel\", function() { return QuestionHtmlModel; });\n/* harmony import */ var _questionnonvalue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_2904691__(/*! ./questionnonvalue */ \"./src/questionnonvalue.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_2904691__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_2904691__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n\n\n\n/**\n  * A class that describes the HTML question type. Unlike other question types, HTML cannot have a title or value.\n *\n * [View Demo](https://surveyjs.io/form-library/examples/questiontype-html/ (linkStyle))\n */\nvar QuestionHtmlModel = /** @class */ (function (_super) {\n    __extends(QuestionHtmlModel, _super);\n    function QuestionHtmlModel(name) {\n        var _this = _super.call(this, name) || this;\n        var locHtml = _this.createLocalizableString(\"html\", _this);\n        locHtml.onGetTextCallback = function (str) {\n            return !!_this.survey && !_this.ignoreHtmlProgressing\n                ? _this.processHtml(str)\n                : str;\n        };\n        return _this;\n    }\n    QuestionHtmlModel.prototype.getType = function () {\n        return \"html\";\n    };\n    Object.defineProperty(QuestionHtmlModel.prototype, \"isCompositeQuestion\", {\n        get: function () {\n            return true;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionHtmlModel.prototype.getProcessedText = function (text) {\n        if (this.ignoreHtmlProgressing)\n            return text;\n        return _super.prototype.getProcessedText.call(this, text);\n    };\n    Object.defineProperty(QuestionHtmlModel.prototype, \"html\", {\n        /**\n         * HTML markup to display.\n         *\n         * > IMPORTANT: If you get the markup from a third party, ensure that it does not contain malicious code.\n         */\n        get: function () {\n            return this.getLocalizableStringText(\"html\", \"\");\n        },\n        set: function (val) {\n            this.setLocalizableStringText(\"html\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionHtmlModel.prototype, \"locHtml\", {\n        get: function () {\n            return this.getLocalizableString(\"html\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionHtmlModel.prototype, \"processedHtml\", {\n        get: function () {\n            return this.processHtml(this.html);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionHtmlModel.prototype.processHtml = function (html) {\n        return this.survey ? this.survey.processHtml(html, \"html-question\") : this.html;\n    };\n    return QuestionHtmlModel;\n}(_questionnonvalue__WEBPACK_IMPORTED_MODULE_0__[\"QuestionNonValue\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].addClass(\"html\", [{ name: \"html:html\", serializationProperty: \"locHtml\" }], function () {\n    return new QuestionHtmlModel(\"\");\n}, \"nonvalue\");\n_questionfactory__WEBPACK_IMPORTED_MODULE_2__[\"QuestionFactory\"].Instance.registerQuestion(\"html\", function (name) {\n    return new QuestionHtmlModel(name);\n});\n\n\n/***/ }),\n\n/***/ \"./src/question_image.ts\":\n/*!*******************************!*\\\n  !*** ./src/question_image.ts ***!\n  \\*******************************/\n/*! exports provided: QuestionImageModel */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_2909133__) {\n\n\"use strict\";\n__nested_webpack_require_2909133__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_2909133__.d(__nested_webpack_exports__, \"QuestionImageModel\", function() { return QuestionImageModel; });\n/* harmony import */ var _questionnonvalue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_2909133__(/*! ./questionnonvalue */ \"./src/questionnonvalue.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_2909133__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_2909133__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\n/* harmony import */ var _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_2909133__(/*! ./utils/cssClassBuilder */ \"./src/utils/cssClassBuilder.ts\");\n/* harmony import */ var _utils_utils__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_2909133__(/*! ./utils/utils */ \"./src/utils/utils.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\nvar youtubeTags = [\"youtube.com\", \"youtu.be\"];\nvar videoSuffics = [\".mp4\", \".mov\", \".wmv\", \".flv\", \".avi\", \".mkv\"];\nvar youtubeUrl = \"https://www.youtube.com/\";\nvar youtubeEmbed = \"embed\";\nfunction isUrlYoutubeVideo(url) {\n    if (!url)\n        return false;\n    url = url.toLowerCase();\n    for (var i = 0; i < youtubeTags.length; i++) {\n        if (url.indexOf(youtubeTags[i]) !== -1)\n            return true;\n    }\n    return false;\n}\n/**\n  * A class that describes the Image question type. Unlike other question types, Image cannot have a title or value.\n *\n * [View Demo](https://surveyjs.io/form-library/examples/questiontype-image/ (linkStyle))\n */\nvar QuestionImageModel = /** @class */ (function (_super) {\n    __extends(QuestionImageModel, _super);\n    function QuestionImageModel(name) {\n        var _this = _super.call(this, name) || this;\n        var locImageLink = _this.createLocalizableString(\"imageLink\", _this, false);\n        locImageLink.onGetTextCallback = function (text) {\n            return getCorrectImageLink(text);\n        };\n        _this.createLocalizableString(\"altText\", _this, false);\n        _this.registerPropertyChangedHandlers([\"contentMode\", \"imageLink\"], function () { return _this.calculateRenderedMode(); });\n        return _this;\n    }\n    QuestionImageModel.prototype.getType = function () {\n        return \"image\";\n    };\n    Object.defineProperty(QuestionImageModel.prototype, \"isCompositeQuestion\", {\n        get: function () {\n            return false;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionImageModel.prototype.onSurveyLoad = function () {\n        _super.prototype.onSurveyLoad.call(this);\n        this.calculateRenderedMode();\n    };\n    Object.defineProperty(QuestionImageModel.prototype, \"imageLink\", {\n        /**\n         * Specifies an image or video URL.\n         * @see contentMode\n         */\n        get: function () {\n            return this.getLocalizableStringText(\"imageLink\");\n        },\n        set: function (val) {\n            this.setLocalizableStringText(\"imageLink\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionImageModel.prototype, \"locImageLink\", {\n        get: function () {\n            return this.getLocalizableString(\"imageLink\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionImageModel.prototype, \"altText\", {\n        /**\n         * Specifies a value for the `alt` attribute of the underlying `<img>` element.\n         */\n        get: function () {\n            return this.getLocalizableStringText(\"altText\");\n        },\n        set: function (val) {\n            this.setLocalizableStringText(\"altText\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionImageModel.prototype, \"locAltText\", {\n        get: function () {\n            return this.getLocalizableString(\"altText\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionImageModel.prototype, \"imageHeight\", {\n        /**\n         * Specifies the height of a container for the image or video. Accepts positive numbers and CSS values.\n         *\n         * Default value: 150\n         *\n         * Use the `imageFit` property to specify how to fit the image or video into the container.\n         * @see imageWidth\n         * @see imageFit\n         */\n        get: function () {\n            return this.getPropertyValue(\"imageHeight\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"imageHeight\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionImageModel.prototype, \"renderedStyleHeight\", {\n        get: function () {\n            return this.imageHeight ? Object(_utils_utils__WEBPACK_IMPORTED_MODULE_4__[\"getRenderedStyleSize\"])(this.imageHeight) : undefined;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionImageModel.prototype, \"renderedHeight\", {\n        get: function () {\n            return this.imageHeight ? Object(_utils_utils__WEBPACK_IMPORTED_MODULE_4__[\"getRenderedSize\"])(this.imageHeight) : undefined;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionImageModel.prototype, \"imageWidth\", {\n        /**\n         * Specifies the width of a container for the image or video. Accepts positive numbers and CSS values.\n         *\n         * Default value: 200\n         *\n         * Use the `imageFit` property to specify how to fit the image or video into the container.\n         * @see imageHeight\n         * @see imageFit\n         */\n        get: function () {\n            return this.getPropertyValue(\"imageWidth\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"imageWidth\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionImageModel.prototype, \"renderedStyleWidth\", {\n        get: function () {\n            return this.imageWidth ? Object(_utils_utils__WEBPACK_IMPORTED_MODULE_4__[\"getRenderedStyleSize\"])(this.imageWidth) : undefined;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionImageModel.prototype, \"renderedWidth\", {\n        get: function () {\n            return this.imageWidth ? Object(_utils_utils__WEBPACK_IMPORTED_MODULE_4__[\"getRenderedSize\"])(this.imageWidth) : undefined;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionImageModel.prototype, \"imageFit\", {\n        /**\n         * Specifies how to resize the image or video to fit it into its container.\n         *\n         * Refer to the [`object-fit`](https://developer.mozilla.org/en-US/docs/Web/CSS/object-fit) CSS property description for information on accepted values.\n         * @see imageHeight\n         * @see imageWidth\n         */\n        get: function () {\n            return this.getPropertyValue(\"imageFit\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"imageFit\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionImageModel.prototype, \"contentMode\", {\n        /**\n         * Specifies the type of content that the Image question displays.\n         *\n         * Possible values:\n         *\n         * - `\"image\"` - An image in one of the following formats: JPEG, GIF, PNG, APNG, SVG, BMP, ICO.\n         * - `\"video\"` - A video in one of the following formats: MP4, MOV, WMV, FLV, AVI, MKV.\n         * - `\"youtube\"` - A link to a YouTube video.\n         * - `\"auto\"` (default) - Selects one of the above based on the [`imageLink`](https://surveyjs.io/form-library/documentation/questionimagemodel#imageLink) property.\n         */\n        get: function () {\n            return this.getPropertyValue(\"contentMode\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"contentMode\", val);\n            if (val === \"video\") {\n                this.showLabel = true;\n            }\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionImageModel.prototype, \"renderedMode\", {\n        /**\n         * Returns the type of content that the Image question displays: `\"image\"`, `\"video\"`, or `\"youtube\"`.\n         * @see contentMode\n         */\n        get: function () {\n            return this.getPropertyValue(\"renderedMode\", \"image\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionImageModel.prototype.getImageCss = function () {\n        var imageHeightProperty = this.getPropertyByName(\"imageHeight\");\n        var imageWidthProperty = this.getPropertyByName(\"imageWidth\");\n        var isDefaultSize = imageHeightProperty.isDefaultValue(this.imageHeight) && imageWidthProperty.isDefaultValue(this.imageWidth);\n        return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_3__[\"CssClassBuilder\"]()\n            .append(this.cssClasses.image)\n            .append(this.cssClasses.adaptive, isDefaultSize)\n            .toString();\n    };\n    QuestionImageModel.prototype.onLoadHandler = function () {\n        this.contentNotLoaded = false;\n    };\n    QuestionImageModel.prototype.onErrorHandler = function () {\n        this.contentNotLoaded = true;\n    };\n    QuestionImageModel.prototype.setRenderedMode = function (val) {\n        this.setPropertyValue(\"renderedMode\", val);\n    };\n    QuestionImageModel.prototype.calculateRenderedMode = function () {\n        if (this.contentMode !== \"auto\") {\n            this.setRenderedMode(this.contentMode);\n        }\n        else {\n            if (this.isYoutubeVideo()) {\n                this.setRenderedMode(\"youtube\");\n            }\n            else if (this.isVideo()) {\n                this.setRenderedMode(\"video\");\n            }\n            else {\n                this.setRenderedMode(\"image\");\n            }\n        }\n    };\n    QuestionImageModel.prototype.isYoutubeVideo = function () {\n        return isUrlYoutubeVideo(this.imageLink);\n    };\n    QuestionImageModel.prototype.isVideo = function () {\n        var link = this.imageLink;\n        if (!link)\n            return false;\n        link = link.toLowerCase();\n        for (var i = 0; i < videoSuffics.length; i++) {\n            if (link.endsWith(videoSuffics[i]))\n                return true;\n        }\n        return false;\n    };\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: false })\n    ], QuestionImageModel.prototype, \"contentNotLoaded\", void 0);\n    return QuestionImageModel;\n}(_questionnonvalue__WEBPACK_IMPORTED_MODULE_0__[\"QuestionNonValue\"]));\n\nfunction getCorrectImageLink(val) {\n    if (!val || !isUrlYoutubeVideo(val))\n        return val;\n    var res = val.toLocaleLowerCase();\n    if (res.indexOf(youtubeEmbed) > -1)\n        return val;\n    var id = \"\";\n    for (var i = val.length - 1; i >= 0; i--) {\n        if (val[i] === \"=\" || val[i] === \"/\")\n            break;\n        id = val[i] + id;\n    }\n    return youtubeUrl + youtubeEmbed + \"/\" + id;\n}\n_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].addClass(\"image\", [\n    { name: \"imageLink\", serializationProperty: \"locImageLink\" },\n    { name: \"altText\", serializationProperty: \"locAltText\", alternativeName: \"text\", category: \"general\" },\n    {\n        name: \"contentMode\",\n        default: \"auto\",\n        choices: [\"auto\", \"image\", \"video\", \"youtube\"],\n    },\n    {\n        name: \"imageFit\",\n        default: \"contain\",\n        choices: [\"none\", \"contain\", \"cover\", \"fill\"],\n    },\n    { name: \"imageHeight\", default: \"150\" },\n    { name: \"imageWidth\", default: \"200\" },\n], function () {\n    return new QuestionImageModel(\"\");\n}, \"nonvalue\");\n_questionfactory__WEBPACK_IMPORTED_MODULE_2__[\"QuestionFactory\"].Instance.registerQuestion(\"image\", function (name) {\n    return new QuestionImageModel(name);\n});\n\n\n/***/ }),\n\n/***/ \"./src/question_imagepicker.ts\":\n/*!*************************************!*\\\n  !*** ./src/question_imagepicker.ts ***!\n  \\*************************************/\n/*! exports provided: ImageItemValue, QuestionImagePickerModel */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_2922824__) {\n\n\"use strict\";\n__nested_webpack_require_2922824__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_2922824__.d(__nested_webpack_exports__, \"ImageItemValue\", function() { return ImageItemValue; });\n/* harmony export (binding) */ __nested_webpack_require_2922824__.d(__nested_webpack_exports__, \"QuestionImagePickerModel\", function() { return QuestionImagePickerModel; });\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_2922824__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_2922824__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\n/* harmony import */ var _question_baseselect__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_2922824__(/*! ./question_baseselect */ \"./src/question_baseselect.ts\");\n/* harmony import */ var _itemvalue__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_2922824__(/*! ./itemvalue */ \"./src/itemvalue.ts\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_2922824__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_2922824__(/*! ./utils/cssClassBuilder */ \"./src/utils/cssClassBuilder.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_2922824__(/*! ./settings */ \"./src/settings.ts\");\n/* harmony import */ var _utils_utils__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_2922824__(/*! ./utils/utils */ \"./src/utils/utils.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\n\n\n\nvar ImageItemValue = /** @class */ (function (_super) {\n    __extends(ImageItemValue, _super);\n    function ImageItemValue(value, text, typeName) {\n        if (text === void 0) { text = null; }\n        if (typeName === void 0) { typeName = \"imageitemvalue\"; }\n        var _this = _super.call(this, value, text, typeName) || this;\n        _this.typeName = typeName;\n        _this.createLocalizableString(\"imageLink\", _this, false);\n        return _this;\n    }\n    ImageItemValue.prototype.getType = function () {\n        return !!this.typeName ? this.typeName : \"itemvalue\";\n    };\n    Object.defineProperty(ImageItemValue.prototype, \"imageLink\", {\n        /**\n         * The image or video link property.\n         */\n        get: function () {\n            return this.getLocalizableStringText(\"imageLink\");\n        },\n        set: function (val) {\n            this.setLocalizableStringText(\"imageLink\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(ImageItemValue.prototype, \"locImageLink\", {\n        get: function () {\n            return this.getLocalizableString(\"imageLink\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    ImageItemValue.prototype.getLocale = function () {\n        return !!this.locOwner ? this.locOwner.getLocale() : \"\";\n    };\n    ImageItemValue.prototype.getMarkdownHtml = function (text, name) {\n        return !!this.locOwner ? this.locOwner.getMarkdownHtml(text, name) : undefined;\n    };\n    ImageItemValue.prototype.getRenderer = function (name) {\n        return !!this.locOwner ? this.locOwner.getRenderer(name) : null;\n    };\n    ImageItemValue.prototype.getRendererContext = function (locStr) {\n        return !!this.locOwner ? this.locOwner.getRendererContext(locStr) : locStr;\n    };\n    ImageItemValue.prototype.getProcessedText = function (text) {\n        return !!this.locOwner ? this.locOwner.getProcessedText(text) : text;\n    };\n    ImageItemValue.prototype.onErrorHandler = function () {\n        this.contentNotLoaded = true;\n    };\n    Object.defineProperty(ImageItemValue.prototype, \"contentNotLoaded\", {\n        get: function () {\n            return this.locOwner instanceof QuestionImagePickerModel && this.locOwner.contentMode == \"video\" ? this.videoNotLoaded : this.imageNotLoaded;\n        },\n        set: function (val) {\n            if (this.locOwner instanceof QuestionImagePickerModel && this.locOwner.contentMode == \"video\") {\n                this.videoNotLoaded = val;\n            }\n            else {\n                this.imageNotLoaded = val;\n            }\n        },\n        enumerable: false,\n        configurable: true\n    });\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ defaultValue: false })\n    ], ImageItemValue.prototype, \"videoNotLoaded\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ defaultValue: false })\n    ], ImageItemValue.prototype, \"imageNotLoaded\", void 0);\n    return ImageItemValue;\n}(_itemvalue__WEBPACK_IMPORTED_MODULE_3__[\"ItemValue\"]));\n\n/**\n  * A class that describes the Image Picker question type.\n *\n * [View Demo](https://surveyjs.io/form-library/examples/image-picker-question/ (linkStyle))\n */\nvar QuestionImagePickerModel = /** @class */ (function (_super) {\n    __extends(QuestionImagePickerModel, _super);\n    function QuestionImagePickerModel(name) {\n        var _this = _super.call(this, name) || this;\n        //responsive mode\n        _this.isResponsiveValue = false;\n        _this.onContentLoaded = function (item, event) {\n            item.contentNotLoaded = false;\n            var content = event.target;\n            if (_this.contentMode == \"video\") {\n                item[\"aspectRatio\"] = content.videoWidth / content.videoHeight;\n            }\n            else {\n                item[\"aspectRatio\"] = content.naturalWidth / content.naturalHeight;\n            }\n            _this._width && _this.processResponsiveness(0, _this._width);\n        };\n        _this.colCount = 0;\n        _this.registerPropertyChangedHandlers([\"minImageWidth\", \"maxImageWidth\", \"minImageHeight\", \"maxImageHeight\", \"visibleChoices\", \"colCount\", \"isResponsiveValue\"], function () {\n            if (!!_this._width) {\n                _this.processResponsiveness(0, _this._width);\n            }\n        });\n        _this.registerPropertyChangedHandlers([\"imageWidth\", \"imageHeight\"], function () {\n            _this.calcIsResponsive();\n        });\n        _this.calcIsResponsive();\n        return _this;\n    }\n    QuestionImagePickerModel.prototype.getType = function () {\n        return \"imagepicker\";\n    };\n    QuestionImagePickerModel.prototype.supportGoNextPageAutomatic = function () {\n        return !this.multiSelect;\n    };\n    Object.defineProperty(QuestionImagePickerModel.prototype, \"hasSingleInput\", {\n        get: function () {\n            return false;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionImagePickerModel.prototype.getItemValueType = function () {\n        return \"imageitemvalue\";\n    };\n    Object.defineProperty(QuestionImagePickerModel.prototype, \"isCompositeQuestion\", {\n        get: function () {\n            return true;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionImagePickerModel.prototype.supportOther = function () {\n        return false;\n    };\n    QuestionImagePickerModel.prototype.supportNone = function () {\n        return false;\n    };\n    QuestionImagePickerModel.prototype.isAnswerCorrect = function () {\n        if (!this.multiSelect)\n            return _super.prototype.isAnswerCorrect.call(this);\n        return _helpers__WEBPACK_IMPORTED_MODULE_4__[\"Helpers\"].isArrayContainsEqual(this.value, this.correctAnswer);\n    };\n    Object.defineProperty(QuestionImagePickerModel.prototype, \"multiSelect\", {\n        /**\n         * Specifies whether users can select multiple images or videos.\n         *\n         * Default value: `false`\n         */\n        get: function () {\n            return this.getPropertyValue(\"multiSelect\");\n        },\n        set: function (newValue) {\n            this.setPropertyValue(\"multiSelect\", newValue);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionImagePickerModel.prototype.isItemSelected = function (item) {\n        var val = this.value;\n        var imageItemValue = item;\n        if (this.isValueEmpty(val))\n            return false;\n        if (!imageItemValue.imageLink || imageItemValue.contentNotLoaded)\n            return false;\n        if (!this.multiSelect)\n            return this.isTwoValueEquals(val, item.value);\n        if (!Array.isArray(val))\n            return false;\n        for (var i = 0; i < val.length; i++) {\n            if (this.isTwoValueEquals(val[i], item.value))\n                return true;\n        }\n        return false;\n    };\n    QuestionImagePickerModel.prototype.getItemEnabled = function (item) {\n        var imageItemValue = item;\n        if (!imageItemValue.imageLink || imageItemValue.contentNotLoaded)\n            return false;\n        return _super.prototype.getItemEnabled.call(this, item);\n    };\n    QuestionImagePickerModel.prototype.clearIncorrectValues = function () {\n        if (this.multiSelect) {\n            var val = this.value;\n            if (!val)\n                return;\n            if (!Array.isArray(val) || val.length == 0) {\n                this.clearValue();\n                return;\n            }\n            var newValue = [];\n            for (var i = 0; i < val.length; i++) {\n                if (!this.hasUnknownValue(val[i], true)) {\n                    newValue.push(val[i]);\n                }\n            }\n            if (newValue.length == val.length)\n                return;\n            if (newValue.length == 0) {\n                this.clearValue();\n            }\n            else {\n                this.value = newValue;\n            }\n        }\n        else {\n            _super.prototype.clearIncorrectValues.call(this);\n        }\n    };\n    QuestionImagePickerModel.prototype.getDisplayValueCore = function (keysAsText, value) {\n        if (!this.multiSelect && !Array.isArray(value))\n            return _super.prototype.getDisplayValueCore.call(this, keysAsText, value);\n        return this.getDisplayArrayValue(keysAsText, value);\n    };\n    Object.defineProperty(QuestionImagePickerModel.prototype, \"showLabel\", {\n        /**\n         * Specifies whether to display labels under images or videos. Labels text are taken from the `text` property of each object in the `choices` array.\n         * @see choices\n         */\n        get: function () {\n            return this.getPropertyValue(\"showLabel\");\n        },\n        set: function (newValue) {\n            this.setPropertyValue(\"showLabel\", newValue);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionImagePickerModel.prototype.endLoadingFromJson = function () {\n        _super.prototype.endLoadingFromJson.call(this);\n        if (!this.isDesignMode && this.multiSelect) {\n            this.createNewArray(\"renderedValue\");\n            this.createNewArray(\"value\");\n        }\n        this.calcIsResponsive();\n    };\n    QuestionImagePickerModel.prototype.getValueCore = function () {\n        var value = _super.prototype.getValueCore.call(this);\n        if (value !== undefined) {\n            return value;\n        }\n        if (this.multiSelect) {\n            return [];\n        }\n        return value;\n    };\n    QuestionImagePickerModel.prototype.convertValToArrayForMultSelect = function (val) {\n        if (!this.multiSelect)\n            return val;\n        if (this.isValueEmpty(val) || Array.isArray(val))\n            return val;\n        return [val];\n    };\n    QuestionImagePickerModel.prototype.renderedValueFromDataCore = function (val) {\n        return this.convertValToArrayForMultSelect(val);\n    };\n    QuestionImagePickerModel.prototype.rendredValueToDataCore = function (val) {\n        return this.convertValToArrayForMultSelect(val);\n    };\n    Object.defineProperty(QuestionImagePickerModel.prototype, \"imageHeight\", {\n        /**\n         * Specifies the height of containers for images or videos. Accepts positive numbers and CSS values.\n         *\n         * Default value: undefined\n         *\n         * Use the `imageFit` property to specify how to fit the images or videos into their containers.\n         * @see imageWidth\n         * @see imageFit\n         */\n        get: function () {\n            return this.getPropertyValue(\"imageHeight\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"imageHeight\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionImagePickerModel.prototype, \"renderedImageHeight\", {\n        get: function () {\n            var height = this.isResponsive ? Math.floor(this.responsiveImageHeight) : this.imageHeight;\n            return (height ? height : 150);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionImagePickerModel.prototype, \"imageWidth\", {\n        /**\n         * Specifies the width of containers for images or videos. Accepts positive numbers and CSS values.\n         *\n         * Default value: 200\n         *\n         * Use the `imageFit` property to specify how to fit the images or videos into their containers.\n         * @see imageHeight\n         * @see imageFit\n         */\n        get: function () {\n            return this.getPropertyValue(\"imageWidth\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"imageWidth\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionImagePickerModel.prototype, \"renderedImageWidth\", {\n        get: function () {\n            var width = this.isResponsive ? Math.floor(this.responsiveImageWidth) : this.imageWidth;\n            return (width ? width : 200);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionImagePickerModel.prototype, \"imageFit\", {\n        /**\n         * Specifies how to resize images or videos to fit them into their containers.\n         *\n         * Refer to the [`object-fit`](https://developer.mozilla.org/en-US/docs/Web/CSS/object-fit) CSS property description for information on accepted values.\n         * @see imageHeight\n         * @see imageWidth\n         */\n        get: function () {\n            return this.getPropertyValue(\"imageFit\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"imageFit\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionImagePickerModel.prototype, \"contentMode\", {\n        /**\n         * Specifies the type of content that choice items display.\n         *\n         * Possible values:\n         *\n         * - `\"image\"` - Images in one of the following formats: JPEG, GIF, PNG, APNG, SVG, BMP, ICO.\n         * - `\"video\"` - Videos in one of the following formats: MP4, MOV, WMV, FLV, AVI, MKV.\n         * - `\"youtube\"` - Links to YouTube videos.\n         * - `\"auto\"` (default) - Selects one of the above based on the `imageLink` property value of each choice item.\n         */\n        get: function () {\n            return this.getPropertyValue(\"contentMode\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"contentMode\", val);\n            if (val === \"video\") {\n                this.showLabel = true;\n            }\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionImagePickerModel.prototype.convertDefaultValue = function (val) {\n        return val;\n    };\n    Object.defineProperty(QuestionImagePickerModel.prototype, \"inputType\", {\n        get: function () {\n            return this.multiSelect ? \"checkbox\" : \"radio\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionImagePickerModel.prototype.isFootChoice = function (_item, _question) {\n        return false;\n    };\n    QuestionImagePickerModel.prototype.getSelectBaseRootCss = function () {\n        return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_5__[\"CssClassBuilder\"]().append(_super.prototype.getSelectBaseRootCss.call(this)).append(this.cssClasses.rootColumn, this.getCurrentColCount() == 1).toString();\n    };\n    Object.defineProperty(QuestionImagePickerModel.prototype, \"isResponsive\", {\n        get: function () {\n            return this.isResponsiveValue && this.isDefaultV2Theme;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionImagePickerModel.prototype, \"exactSizesAreEmpty\", {\n        get: function () {\n            var _this = this;\n            return !([\"imageHeight\", \"imageWidth\"].some(function (propName) { return _this[propName] !== undefined && _this[propName] !== null; }));\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionImagePickerModel.prototype.calcIsResponsive = function () {\n        this.isResponsiveValue = this.exactSizesAreEmpty;\n    };\n    QuestionImagePickerModel.prototype.getObservedElementSelector = function () {\n        return Object(_utils_utils__WEBPACK_IMPORTED_MODULE_7__[\"classesToSelector\"])(this.cssClasses.root);\n    };\n    QuestionImagePickerModel.prototype.supportResponsiveness = function () {\n        return true;\n    };\n    QuestionImagePickerModel.prototype.needResponsiveness = function () {\n        return this.supportResponsiveness() && this.isDefaultV2Theme;\n    };\n    QuestionImagePickerModel.prototype.getCurrentColCount = function () {\n        if (this.responsiveColCount === undefined || this.colCount === 0) {\n            return this.colCount;\n        }\n        return this.responsiveColCount;\n    };\n    QuestionImagePickerModel.prototype.processResponsiveness = function (_, availableWidth) {\n        this._width = availableWidth = Math.floor(availableWidth);\n        var calcAvailableColumnsCount = function (availableWidth, minWidth, gap) {\n            var itemsInRow = Math.floor(availableWidth / (minWidth + gap));\n            if ((itemsInRow + 1) * (minWidth + gap) - gap <= availableWidth)\n                itemsInRow++;\n            return itemsInRow;\n        };\n        if (this.isResponsive) {\n            var itemsCount = this.choices.length + (this.isDesignMode ? 1 : 0);\n            var gap = this.gapBetweenItems || 0;\n            var minWidth = this.minImageWidth;\n            var maxWidth = this.maxImageWidth;\n            var maxHeight = this.maxImageHeight;\n            var minHeight = this.minImageHeight;\n            var colCount = this.colCount;\n            var width_1;\n            if (colCount === 0) {\n                if ((gap + minWidth) * itemsCount - gap > availableWidth) {\n                    var itemsInRow = calcAvailableColumnsCount(availableWidth, minWidth, gap);\n                    width_1 = Math.floor((availableWidth - gap * (itemsInRow - 1)) / itemsInRow);\n                }\n                else {\n                    width_1 = Math.floor(((availableWidth - gap * (itemsCount - 1)) / itemsCount));\n                }\n            }\n            else {\n                var availableColumnsCount = calcAvailableColumnsCount(availableWidth, minWidth, gap);\n                if (availableColumnsCount < colCount) {\n                    this.responsiveColCount = availableColumnsCount >= 1 ? availableColumnsCount : 1;\n                    colCount = this.responsiveColCount;\n                }\n                else {\n                    this.responsiveColCount = colCount;\n                }\n                width_1 = Math.floor((availableWidth - gap * (colCount - 1)) / colCount);\n            }\n            width_1 = Math.max(minWidth, Math.min(width_1, maxWidth));\n            var height_1 = Number.MIN_VALUE;\n            this.choices.forEach(function (item) {\n                var tempHeight = width_1 / item[\"aspectRatio\"];\n                height_1 = tempHeight > height_1 ? tempHeight : height_1;\n            });\n            if (height_1 > maxHeight) {\n                height_1 = maxHeight;\n            }\n            else if (height_1 < minHeight) {\n                height_1 = minHeight;\n            }\n            var oldResponsiveImageWidth = this.responsiveImageWidth;\n            var oldResponsiveImageHeight = this.responsiveImageHeight;\n            this.responsiveImageWidth = width_1;\n            this.responsiveImageHeight = height_1;\n            return oldResponsiveImageWidth !== this.responsiveImageWidth || oldResponsiveImageHeight !== this.responsiveImageHeight;\n        }\n        return false;\n    };\n    QuestionImagePickerModel.prototype.triggerResponsiveness = function (hard) {\n        if (hard === void 0) { hard = true; }\n        if (hard && this.reCalcGapBetweenItemsCallback) {\n            this.reCalcGapBetweenItemsCallback();\n        }\n        _super.prototype.triggerResponsiveness.call(this, hard);\n    };\n    QuestionImagePickerModel.prototype.afterRender = function (el) {\n        var _this = this;\n        _super.prototype.afterRender.call(this, el);\n        var selector = this.getObservedElementSelector();\n        var observedElement = el && selector ? el.querySelector(selector) : undefined;\n        if (!!observedElement) {\n            this.reCalcGapBetweenItemsCallback = function () {\n                _this.gapBetweenItems = Math.ceil(Number.parseFloat(window.getComputedStyle(observedElement).gap)) || 16;\n            };\n            this.reCalcGapBetweenItemsCallback();\n        }\n    };\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({})\n    ], QuestionImagePickerModel.prototype, \"responsiveImageHeight\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({})\n    ], QuestionImagePickerModel.prototype, \"responsiveImageWidth\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({})\n    ], QuestionImagePickerModel.prototype, \"isResponsiveValue\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({})\n    ], QuestionImagePickerModel.prototype, \"maxImageWidth\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({})\n    ], QuestionImagePickerModel.prototype, \"minImageWidth\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({})\n    ], QuestionImagePickerModel.prototype, \"maxImageHeight\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({})\n    ], QuestionImagePickerModel.prototype, \"minImageHeight\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({})\n    ], QuestionImagePickerModel.prototype, \"responsiveColCount\", void 0);\n    return QuestionImagePickerModel;\n}(_question_baseselect__WEBPACK_IMPORTED_MODULE_2__[\"QuestionCheckboxBase\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"imageitemvalue\", [{ name: \"imageLink\", serializationProperty: \"locImageLink\" }], function (value) { return new ImageItemValue(value); }, \"itemvalue\");\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"responsiveImageSize\", [], undefined, \"number\");\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"imagepicker\", [\n    { name: \"showOtherItem\", visible: false },\n    { name: \"otherText\", visible: false },\n    { name: \"showNoneItem\", visible: false },\n    { name: \"noneText\", visible: false },\n    { name: \"optionsCaption\", visible: false },\n    { name: \"otherErrorText\", visible: false },\n    { name: \"storeOthersAsComment\", visible: false },\n    {\n        name: \"contentMode\",\n        default: \"image\",\n        choices: [\"image\", \"video\"],\n    },\n    {\n        name: \"imageFit\",\n        default: \"contain\",\n        choices: [\"none\", \"contain\", \"cover\", \"fill\"],\n    },\n    { name: \"imageHeight:number\", minValue: 0 },\n    { name: \"imageWidth:number\", minValue: 0 },\n    { name: \"minImageWidth:responsiveImageSize\", default: 200, minValue: 0, visibleIf: function () { return _settings__WEBPACK_IMPORTED_MODULE_6__[\"settings\"].supportCreatorV2; } },\n    { name: \"minImageHeight:responsiveImageSize\", default: 133, minValue: 0, visibleIf: function () { return _settings__WEBPACK_IMPORTED_MODULE_6__[\"settings\"].supportCreatorV2; } },\n    { name: \"maxImageWidth:responsiveImageSize\", default: 400, minValue: 0, visibleIf: function () { return _settings__WEBPACK_IMPORTED_MODULE_6__[\"settings\"].supportCreatorV2; } },\n    { name: \"maxImageHeight:responsiveImageSize\", default: 266, minValue: 0, visibleIf: function () { return _settings__WEBPACK_IMPORTED_MODULE_6__[\"settings\"].supportCreatorV2; } },\n], function () {\n    return new QuestionImagePickerModel(\"\");\n}, \"checkboxbase\");\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addProperty(\"imagepicker\", {\n    name: \"showLabel:boolean\",\n    default: false,\n});\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addProperty(\"imagepicker\", {\n    name: \"colCount:number\",\n    default: 0,\n    choices: [0, 1, 2, 3, 4, 5],\n});\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addProperty(\"imagepicker\", {\n    name: \"multiSelect:boolean\",\n    default: false,\n});\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addProperty(\"imagepicker\", {\n    name: \"choices:imageitemvalue[]\",\n});\n_questionfactory__WEBPACK_IMPORTED_MODULE_1__[\"QuestionFactory\"].Instance.registerQuestion(\"imagepicker\", function (name) {\n    var q = new QuestionImagePickerModel(name);\n    //q.choices = QuestionFactory.DefaultChoices;\n    return q;\n});\n\n\n/***/ }),\n\n/***/ \"./src/question_matrix.ts\":\n/*!********************************!*\\\n  !*** ./src/question_matrix.ts ***!\n  \\********************************/\n/*! exports provided: MatrixRowModel, MatrixCells, QuestionMatrixModel */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_2949696__) {\n\n\"use strict\";\n__nested_webpack_require_2949696__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_2949696__.d(__nested_webpack_exports__, \"MatrixRowModel\", function() { return MatrixRowModel; });\n/* harmony export (binding) */ __nested_webpack_require_2949696__.d(__nested_webpack_exports__, \"MatrixCells\", function() { return MatrixCells; });\n/* harmony export (binding) */ __nested_webpack_require_2949696__.d(__nested_webpack_exports__, \"QuestionMatrixModel\", function() { return QuestionMatrixModel; });\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_2949696__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _itemvalue__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_2949696__(/*! ./itemvalue */ \"./src/itemvalue.ts\");\n/* harmony import */ var _martixBase__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_2949696__(/*! ./martixBase */ \"./src/martixBase.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_2949696__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_2949696__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_2949696__(/*! ./surveyStrings */ \"./src/surveyStrings.ts\");\n/* harmony import */ var _error__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_2949696__(/*! ./error */ \"./src/error.ts\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_2949696__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\n/* harmony import */ var _localizablestring__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_2949696__(/*! ./localizablestring */ \"./src/localizablestring.ts\");\n/* harmony import */ var _question_dropdown__WEBPACK_IMPORTED_MODULE_9__ = __nested_webpack_require_2949696__(/*! ./question_dropdown */ \"./src/question_dropdown.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_10__ = __nested_webpack_require_2949696__(/*! ./settings */ \"./src/settings.ts\");\n/* harmony import */ var _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_11__ = __nested_webpack_require_2949696__(/*! ./utils/cssClassBuilder */ \"./src/utils/cssClassBuilder.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n\n\n\n\n\n\n\n\n\n\n\n\nvar MatrixRowModel = /** @class */ (function (_super) {\n    __extends(MatrixRowModel, _super);\n    function MatrixRowModel(item, fullName, data, value) {\n        var _this = _super.call(this) || this;\n        _this.fullName = fullName;\n        _this.item = item;\n        _this.data = data;\n        _this.value = value;\n        _this.cellClick = function (column) {\n            _this.value = column.value;\n        };\n        _this.registerPropertyChangedHandlers([\"value\"], function () {\n            if (_this.data)\n                _this.data.onMatrixRowChanged(_this);\n        });\n        return _this;\n    }\n    Object.defineProperty(MatrixRowModel.prototype, \"name\", {\n        get: function () {\n            return this.item.value;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MatrixRowModel.prototype, \"text\", {\n        get: function () {\n            return this.item.text;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MatrixRowModel.prototype, \"locText\", {\n        get: function () {\n            return this.item.locText;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MatrixRowModel.prototype, \"value\", {\n        get: function () {\n            return this.getPropertyValue(\"value\");\n        },\n        set: function (newValue) {\n            newValue = this.data.getCorrectedRowValue(newValue);\n            this.setPropertyValue(\"value\", newValue);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MatrixRowModel.prototype, \"rowClasses\", {\n        get: function () {\n            var cssClasses = this.data.cssClasses;\n            var hasError = !!this.data.getErrorByType(\"requiredinallrowserror\");\n            return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_11__[\"CssClassBuilder\"]().append(cssClasses.row)\n                .append(cssClasses.rowError, hasError && this.isValueEmpty(this.value))\n                .toString();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    return MatrixRowModel;\n}(_base__WEBPACK_IMPORTED_MODULE_4__[\"Base\"]));\n\nvar MatrixCells = /** @class */ (function () {\n    function MatrixCells(cellsOwner) {\n        this.cellsOwner = cellsOwner;\n        this.values = {};\n    }\n    Object.defineProperty(MatrixCells.prototype, \"isEmpty\", {\n        get: function () {\n            return Object.keys(this.values).length == 0;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    MatrixCells.prototype.valuesChanged = function () {\n        if (!!this.onValuesChanged) {\n            this.onValuesChanged();\n        }\n    };\n    MatrixCells.prototype.setCellText = function (row, column, val) {\n        row = this.getCellRowColumnValue(row, this.rows);\n        column = this.getCellRowColumnValue(column, this.columns);\n        if (!row || !column)\n            return;\n        if (val) {\n            if (!this.values[row])\n                this.values[row] = {};\n            if (!this.values[row][column])\n                this.values[row][column] = this.createString();\n            this.values[row][column].text = val;\n        }\n        else {\n            if (this.values[row] && this.values[row][column]) {\n                var loc = this.values[row][column];\n                loc.text = \"\";\n                if (loc.isEmpty) {\n                    delete this.values[row][column];\n                    if (Object.keys(this.values[row]).length == 0) {\n                        delete this.values[row];\n                    }\n                }\n            }\n        }\n        this.valuesChanged();\n    };\n    MatrixCells.prototype.setDefaultCellText = function (column, val) {\n        this.setCellText(_settings__WEBPACK_IMPORTED_MODULE_10__[\"settings\"].matrix.defaultRowName, column, val);\n    };\n    MatrixCells.prototype.getCellLocText = function (row, column) {\n        row = this.getCellRowColumnValue(row, this.rows);\n        column = this.getCellRowColumnValue(column, this.columns);\n        if (!row || !column)\n            return null;\n        if (!this.values[row])\n            return null;\n        if (!this.values[row][column])\n            return null;\n        return this.values[row][column];\n    };\n    MatrixCells.prototype.getDefaultCellLocText = function (column, val) {\n        return this.getCellLocText(_settings__WEBPACK_IMPORTED_MODULE_10__[\"settings\"].matrix.defaultRowName, column);\n    };\n    MatrixCells.prototype.getCellDisplayLocText = function (row, column) {\n        var cellText = this.getCellLocText(row, column);\n        if (cellText && !cellText.isEmpty)\n            return cellText;\n        cellText = this.getCellLocText(_settings__WEBPACK_IMPORTED_MODULE_10__[\"settings\"].matrix.defaultRowName, column);\n        if (cellText && !cellText.isEmpty)\n            return cellText;\n        if (typeof column == \"number\") {\n            column =\n                column >= 0 && column < this.columns.length\n                    ? this.columns[column]\n                    : null;\n        }\n        if (column && column.locText)\n            return column.locText;\n        return null;\n    };\n    MatrixCells.prototype.getCellText = function (row, column) {\n        var loc = this.getCellLocText(row, column);\n        return loc ? loc.calculatedText : null;\n    };\n    MatrixCells.prototype.getDefaultCellText = function (column) {\n        var loc = this.getCellLocText(_settings__WEBPACK_IMPORTED_MODULE_10__[\"settings\"].matrix.defaultRowName, column);\n        return loc ? loc.calculatedText : null;\n    };\n    MatrixCells.prototype.getCellDisplayText = function (row, column) {\n        var loc = this.getCellDisplayLocText(row, column);\n        return loc ? loc.calculatedText : null;\n    };\n    Object.defineProperty(MatrixCells.prototype, \"rows\", {\n        get: function () {\n            return this.cellsOwner ? this.cellsOwner.getRows() : [];\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MatrixCells.prototype, \"columns\", {\n        get: function () {\n            return this.cellsOwner ? this.cellsOwner.getColumns() : [];\n        },\n        enumerable: false,\n        configurable: true\n    });\n    MatrixCells.prototype.getCellRowColumnValue = function (val, values) {\n        if (val === null || val === undefined)\n            return null;\n        if (typeof val == \"number\") {\n            if (val < 0 || val >= values.length)\n                return null;\n            val = values[val].value;\n        }\n        if (val.value)\n            return val.value;\n        return val;\n    };\n    MatrixCells.prototype.getJson = function () {\n        if (this.isEmpty)\n            return null;\n        var res = {};\n        for (var row in this.values) {\n            var resRow = {};\n            var rowValues = this.values[row];\n            for (var col in rowValues) {\n                resRow[col] = rowValues[col].getJson();\n            }\n            res[row] = resRow;\n        }\n        return res;\n    };\n    MatrixCells.prototype.setJson = function (value) {\n        this.values = {};\n        if (!!value) {\n            for (var row in value) {\n                if (row == \"pos\")\n                    continue;\n                var rowValues = value[row];\n                this.values[row] = {};\n                for (var col in rowValues) {\n                    if (col == \"pos\")\n                        continue;\n                    var loc = this.createString();\n                    loc.setJson(rowValues[col]);\n                    this.values[row][col] = loc;\n                }\n            }\n        }\n        this.valuesChanged();\n    };\n    MatrixCells.prototype.locStrsChanged = function () {\n        if (this.isEmpty)\n            return;\n        for (var row in this.values) {\n            var rowValues = this.values[row];\n            for (var col in rowValues) {\n                rowValues[col].strChanged();\n            }\n        }\n    };\n    MatrixCells.prototype.createString = function () {\n        return new _localizablestring__WEBPACK_IMPORTED_MODULE_8__[\"LocalizableString\"](this.cellsOwner, true);\n    };\n    return MatrixCells;\n}());\n\n/**\n  * A class that describes the Single-Select Matrix question type.\n  *\n  * [View Demo](https://surveyjs.io/form-library/examples/single-selection-matrix-table-question/ (linkStyle))\n  */\nvar QuestionMatrixModel = /** @class */ (function (_super) {\n    __extends(QuestionMatrixModel, _super);\n    function QuestionMatrixModel(name) {\n        var _this = _super.call(this, name) || this;\n        _this.isRowChanging = false;\n        _this.emptyLocalizableString = new _localizablestring__WEBPACK_IMPORTED_MODULE_8__[\"LocalizableString\"](_this);\n        _this.cellsValue = new MatrixCells(_this);\n        _this.cellsValue.onValuesChanged = function () {\n            _this.updateHasCellText();\n            _this.propertyValueChanged(\"cells\", _this.cells, _this.cells);\n        };\n        _this.registerPropertyChangedHandlers([\"columns\"], function () {\n            _this.onColumnsChanged();\n        });\n        _this.registerPropertyChangedHandlers([\"rows\"], function () {\n            if (!_this.filterItems()) {\n                _this.onRowsChanged();\n            }\n        });\n        _this.registerPropertyChangedHandlers([\"hideIfRowsEmpty\"], function () {\n            _this.updateVisibilityBasedOnRows();\n        });\n        return _this;\n    }\n    QuestionMatrixModel.prototype.getType = function () {\n        return \"matrix\";\n    };\n    Object.defineProperty(QuestionMatrixModel.prototype, \"hasSingleInput\", {\n        get: function () {\n            return false;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixModel.prototype, \"isAllRowRequired\", {\n        /**\n         * Specifies whether each row requires an answer. If a respondent skips a row, the question displays a validation error.\n         * @see isRequired\n         */\n        get: function () {\n            return this.getPropertyValue(\"isAllRowRequired\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"isAllRowRequired\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixModel.prototype, \"hasRows\", {\n        get: function () {\n            return this.rows.length > 0;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixModel.prototype, \"rowsOrder\", {\n        /**\n         * Specifies a sort order for matrix rows.\n         *\n         * Possible values:\n         *\n         * - \"initial\" (default) - Preserves the original order of the `rows` array.\n         * - \"random\" - Arranges matrix rows in random order each time the question is displayed.\n         * @see rows\n         */\n        get: function () {\n            return this.getPropertyValue(\"rowsOrder\");\n        },\n        set: function (val) {\n            val = val.toLowerCase();\n            if (val == this.rowsOrder)\n                return;\n            this.setPropertyValue(\"rowsOrder\", val);\n            this.onRowsChanged();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixModel.prototype, \"hideIfRowsEmpty\", {\n        /**\n         * Specifies whether to hide the question when the matrix has no visible rows.\n         * @see rowsVisibleIf\n         */\n        get: function () {\n            return this.getPropertyValue(\"hideIfRowsEmpty\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"hideIfRowsEmpty\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionMatrixModel.prototype.getRows = function () {\n        return this.rows;\n    };\n    QuestionMatrixModel.prototype.getColumns = function () {\n        return this.visibleColumns;\n    };\n    QuestionMatrixModel.prototype.addColumn = function (value, text) {\n        var col = new _itemvalue__WEBPACK_IMPORTED_MODULE_1__[\"ItemValue\"](value, text);\n        this.columns.push(col);\n        return col;\n    };\n    QuestionMatrixModel.prototype.getItemClass = function (row, column) {\n        var isChecked = row.value == column.value;\n        var isDisabled = this.isReadOnly;\n        var allowHover = !isChecked && !isDisabled;\n        return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_11__[\"CssClassBuilder\"]()\n            .append(this.cssClasses.cell, this.hasCellText)\n            .append(this.hasCellText ? this.cssClasses.cellText : this.cssClasses.label)\n            .append(this.cssClasses.itemOnError, !this.hasCellText && this.errors.length > 0)\n            .append(this.hasCellText ? this.cssClasses.cellTextSelected : this.cssClasses.itemChecked, isChecked)\n            .append(this.hasCellText ? this.cssClasses.cellTextDisabled : this.cssClasses.itemDisabled, isDisabled)\n            .append(this.cssClasses.itemHover, allowHover && !this.hasCellText)\n            .toString();\n    };\n    Object.defineProperty(QuestionMatrixModel.prototype, \"itemSvgIcon\", {\n        get: function () {\n            return this.cssClasses.itemSvgIconId;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionMatrixModel.prototype.locStrsChanged = function () {\n        _super.prototype.locStrsChanged.call(this);\n        this.cells.locStrsChanged();\n    };\n    QuestionMatrixModel.prototype.getQuizQuestionCount = function () {\n        var res = 0;\n        for (var i = 0; i < this.rows.length; i++) {\n            if (!this.isValueEmpty(this.correctAnswer[this.rows[i].value]))\n                res++;\n        }\n        return res;\n    };\n    QuestionMatrixModel.prototype.getCorrectAnswerCount = function () {\n        var res = 0;\n        var value = this.value;\n        for (var i = 0; i < this.rows.length; i++) {\n            var row = this.rows[i].value;\n            if (!this.isValueEmpty(value[row]) &&\n                this.isTwoValueEquals(this.correctAnswer[row], value[row]))\n                res++;\n        }\n        return res;\n    };\n    QuestionMatrixModel.prototype.getVisibleRows = function () {\n        var result = new Array();\n        var val = this.value;\n        if (!val)\n            val = {};\n        var rows = !!this.filteredRows ? this.filteredRows : this.rows;\n        for (var i = 0; i < rows.length; i++) {\n            var row = rows[i];\n            if (this.isValueEmpty(row.value))\n                continue;\n            result.push(this.createMatrixRow(row, this.id + \"_\" + row.value.toString().replace(/\\s/g, \"_\"), val[row.value]));\n        }\n        this.generatedVisibleRows = result;\n        return result;\n    };\n    QuestionMatrixModel.prototype.sortVisibleRows = function (array) {\n        if (!!this.survey && this.survey.isDesignMode)\n            return array;\n        var order = this.rowsOrder.toLowerCase();\n        if (order === \"random\")\n            return _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].randomizeArray(array);\n        return array;\n    };\n    QuestionMatrixModel.prototype.endLoadingFromJson = function () {\n        _super.prototype.endLoadingFromJson.call(this);\n        this.rows = this.sortVisibleRows(this.rows);\n    };\n    QuestionMatrixModel.prototype.isNewValueCorrect = function (val) {\n        return _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueObject(val, true);\n    };\n    QuestionMatrixModel.prototype.processRowsOnSet = function (newRows) {\n        return this.sortVisibleRows(newRows);\n    };\n    Object.defineProperty(QuestionMatrixModel.prototype, \"visibleRows\", {\n        get: function () {\n            return this.getVisibleRows();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixModel.prototype, \"cells\", {\n        get: function () {\n            return this.cellsValue;\n        },\n        set: function (value) {\n            this.cells.setJson(value && value.getJson ? value.getJson() : null);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixModel.prototype, \"hasCellText\", {\n        get: function () {\n            return this.getPropertyValue(\"hasCellText\", false);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionMatrixModel.prototype.updateHasCellText = function () {\n        this.setPropertyValue(\"hasCellText\", !this.cells.isEmpty);\n    };\n    QuestionMatrixModel.prototype.setCellText = function (row, column, val) {\n        this.cells.setCellText(row, column, val);\n    };\n    QuestionMatrixModel.prototype.getCellText = function (row, column) {\n        return this.cells.getCellText(row, column);\n    };\n    QuestionMatrixModel.prototype.setDefaultCellText = function (column, val) {\n        this.cells.setDefaultCellText(column, val);\n    };\n    QuestionMatrixModel.prototype.getDefaultCellText = function (column) {\n        return this.cells.getDefaultCellText(column);\n    };\n    QuestionMatrixModel.prototype.getCellDisplayText = function (row, column) {\n        return this.cells.getCellDisplayText(row, column);\n    };\n    QuestionMatrixModel.prototype.getCellDisplayLocText = function (row, column) {\n        var loc = this.cells.getCellDisplayLocText(row, column);\n        return loc ? loc : this.emptyLocalizableString;\n    };\n    QuestionMatrixModel.prototype.supportGoNextPageAutomatic = function () {\n        return this.isMouseDown === true && this.hasValuesInAllRows();\n    };\n    QuestionMatrixModel.prototype.onCheckForErrors = function (errors, isOnValueChanged) {\n        _super.prototype.onCheckForErrors.call(this, errors, isOnValueChanged);\n        if ((!isOnValueChanged || this.errors.length > 0) &&\n            this.hasErrorInRows()) {\n            errors.push(new _error__WEBPACK_IMPORTED_MODULE_6__[\"RequiredInAllRowsError\"](null, this));\n        }\n    };\n    QuestionMatrixModel.prototype.hasErrorInRows = function () {\n        if (!this.isAllRowRequired)\n            return false;\n        return !this.hasValuesInAllRows();\n    };\n    QuestionMatrixModel.prototype.hasValuesInAllRows = function () {\n        var rows = this.generatedVisibleRows;\n        if (!rows)\n            rows = this.visibleRows;\n        if (!rows)\n            return true;\n        for (var i = 0; i < rows.length; i++) {\n            if (this.isValueEmpty(rows[i].value))\n                return false;\n        }\n        return true;\n    };\n    QuestionMatrixModel.prototype.getIsAnswered = function () {\n        return _super.prototype.getIsAnswered.call(this) && this.hasValuesInAllRows();\n    };\n    QuestionMatrixModel.prototype.createMatrixRow = function (item, fullName, value) {\n        var row = new MatrixRowModel(item, fullName, this, value);\n        this.onMatrixRowCreated(row);\n        return row;\n    };\n    QuestionMatrixModel.prototype.onMatrixRowCreated = function (row) { };\n    QuestionMatrixModel.prototype.setQuestionValue = function (newValue, updateIsAnswered) {\n        if (updateIsAnswered === void 0) { updateIsAnswered = true; }\n        _super.prototype.setQuestionValue.call(this, newValue, this.isRowChanging || updateIsAnswered);\n        if (!this.generatedVisibleRows || this.generatedVisibleRows.length == 0)\n            return;\n        this.isRowChanging = true;\n        var val = this.value;\n        if (!val)\n            val = {};\n        if (this.rows.length == 0) {\n            this.generatedVisibleRows[0].value = val;\n        }\n        else {\n            for (var i = 0; i < this.generatedVisibleRows.length; i++) {\n                var row = this.generatedVisibleRows[i];\n                var rowVal = val[row.name];\n                if (this.isValueEmpty(rowVal))\n                    rowVal = null;\n                this.generatedVisibleRows[i].value = rowVal;\n            }\n        }\n        this.updateIsAnswered();\n        this.isRowChanging = false;\n    };\n    QuestionMatrixModel.prototype.getDisplayValueCore = function (keysAsText, value) {\n        var res = {};\n        for (var key in value) {\n            var newKey = keysAsText\n                ? _itemvalue__WEBPACK_IMPORTED_MODULE_1__[\"ItemValue\"].getTextOrHtmlByValue(this.rows, key)\n                : key;\n            if (!newKey)\n                newKey = key;\n            var newValue = _itemvalue__WEBPACK_IMPORTED_MODULE_1__[\"ItemValue\"].getTextOrHtmlByValue(this.columns, value[key]);\n            if (!newValue)\n                newValue = value[key];\n            res[newKey] = newValue;\n        }\n        return res;\n    };\n    QuestionMatrixModel.prototype.getPlainData = function (options) {\n        var _this = this;\n        if (options === void 0) { options = {\n            includeEmpty: true,\n        }; }\n        var questionPlainData = _super.prototype.getPlainData.call(this, options);\n        if (!!questionPlainData) {\n            var values = this.createValueCopy();\n            questionPlainData.isNode = true;\n            questionPlainData.data = Object.keys(values || {}).map(function (rowName) {\n                var row = _this.rows.filter(function (r) { return r.value === rowName; })[0];\n                var rowDataItem = {\n                    name: rowName,\n                    title: !!row ? row.text : \"row\",\n                    value: values[rowName],\n                    displayValue: _itemvalue__WEBPACK_IMPORTED_MODULE_1__[\"ItemValue\"].getTextOrHtmlByValue(_this.visibleColumns, values[rowName]),\n                    getString: function (val) {\n                        return typeof val === \"object\" ? JSON.stringify(val) : val;\n                    },\n                    isNode: false,\n                };\n                var item = _itemvalue__WEBPACK_IMPORTED_MODULE_1__[\"ItemValue\"].getItemByValue(_this.visibleColumns, values[rowName]);\n                if (!!item) {\n                    (options.calculations || []).forEach(function (calculation) {\n                        rowDataItem[calculation.propertyName] =\n                            item[calculation.propertyName];\n                    });\n                }\n                return rowDataItem;\n            });\n        }\n        return questionPlainData;\n    };\n    QuestionMatrixModel.prototype.addConditionObjectsByContext = function (objects, context) {\n        for (var i = 0; i < this.rows.length; i++) {\n            var row = this.rows[i];\n            if (!!row.value) {\n                objects.push({\n                    name: this.getValueName() + \".\" + row.value,\n                    text: this.processedTitle + \".\" + row.calculatedText,\n                    question: this,\n                });\n            }\n        }\n    };\n    QuestionMatrixModel.prototype.getConditionJson = function (operator, path) {\n        if (operator === void 0) { operator = null; }\n        if (path === void 0) { path = null; }\n        if (!path)\n            return _super.prototype.getConditionJson.call(this);\n        var question = new _question_dropdown__WEBPACK_IMPORTED_MODULE_9__[\"QuestionDropdownModel\"](path);\n        question.choices = this.columns;\n        var json = new _jsonobject__WEBPACK_IMPORTED_MODULE_3__[\"JsonObject\"]().toJsonObject(question);\n        json[\"type\"] = question.getType();\n        return json;\n    };\n    QuestionMatrixModel.prototype.clearValueIfInvisibleCore = function (reason) {\n        _super.prototype.clearValueIfInvisibleCore.call(this, reason);\n        if (this.hasRows) {\n            this.clearInvisibleValuesInRows();\n        }\n    };\n    QuestionMatrixModel.prototype.getFirstInputElementId = function () {\n        var rows = this.generatedVisibleRows;\n        if (!rows)\n            rows = this.visibleRows;\n        if (rows.length > 0 && this.visibleColumns.length > 0) {\n            return this.inputId + \"_\" + rows[0].name + \"_\" + 0;\n        }\n        return _super.prototype.getFirstInputElementId.call(this);\n    };\n    //IMatrixData\n    QuestionMatrixModel.prototype.onMatrixRowChanged = function (row) {\n        if (this.isRowChanging)\n            return;\n        this.isRowChanging = true;\n        if (!this.hasRows) {\n            this.setNewValue(row.value);\n        }\n        else {\n            var newValue = this.value;\n            if (!newValue) {\n                newValue = {};\n            }\n            newValue[row.name] = row.value;\n            this.setNewValue(newValue);\n        }\n        this.isRowChanging = false;\n    };\n    QuestionMatrixModel.prototype.getCorrectedRowValue = function (value) {\n        for (var i = 0; i < this.columns.length; i++) {\n            if (value === this.columns[i].value)\n                return value;\n        }\n        for (var i = 0; i < this.columns.length; i++) {\n            if (this.isTwoValueEquals(value, this.columns[i].value))\n                return this.columns[i].value;\n        }\n        return value;\n    };\n    QuestionMatrixModel.prototype.getSearchableItemValueKeys = function (keys) {\n        keys.push(\"columns\");\n        keys.push(\"rows\");\n    };\n    Object.defineProperty(QuestionMatrixModel.prototype, \"SurveyModel\", {\n        get: function () {\n            return this.survey;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionMatrixModel.prototype.getColumnHeaderWrapperComponentName = function (cell) {\n        return this.SurveyModel.getElementWrapperComponentName({ column: cell }, \"column-header\");\n    };\n    QuestionMatrixModel.prototype.getColumnHeaderWrapperComponentData = function (cell) {\n        return this.SurveyModel.getElementWrapperComponentData({ column: cell }, \"column-header\");\n    };\n    QuestionMatrixModel.prototype.getRowHeaderWrapperComponentName = function (cell) {\n        return this.SurveyModel.getElementWrapperComponentName({ row: cell }, \"row-header\");\n    };\n    QuestionMatrixModel.prototype.getRowHeaderWrapperComponentData = function (cell) {\n        return this.SurveyModel.getElementWrapperComponentData({ row: cell }, \"row-header\");\n    };\n    return QuestionMatrixModel;\n}(_martixBase__WEBPACK_IMPORTED_MODULE_2__[\"QuestionMatrixBaseModel\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_3__[\"Serializer\"].addClass(\"matrix\", [\n    \"rowTitleWidth\",\n    {\n        name: \"columns:itemvalue[]\", uniqueProperty: \"value\",\n        baseValue: function () {\n            return _surveyStrings__WEBPACK_IMPORTED_MODULE_5__[\"surveyLocalization\"].getString(\"matrix_column\");\n        },\n    },\n    {\n        name: \"rows:itemvalue[]\", uniqueProperty: \"value\",\n        baseValue: function () {\n            return _surveyStrings__WEBPACK_IMPORTED_MODULE_5__[\"surveyLocalization\"].getString(\"matrix_row\");\n        },\n    },\n    { name: \"cells:cells\", serializationProperty: \"cells\" },\n    {\n        name: \"rowsOrder\",\n        default: \"initial\",\n        choices: [\"initial\", \"random\"],\n    },\n    \"isAllRowRequired:boolean\",\n    \"hideIfRowsEmpty:boolean\",\n], function () {\n    return new QuestionMatrixModel(\"\");\n}, \"matrixbase\");\n_questionfactory__WEBPACK_IMPORTED_MODULE_7__[\"QuestionFactory\"].Instance.registerQuestion(\"matrix\", function (name) {\n    var q = new QuestionMatrixModel(name);\n    q.rows = _questionfactory__WEBPACK_IMPORTED_MODULE_7__[\"QuestionFactory\"].DefaultRows;\n    q.columns = _questionfactory__WEBPACK_IMPORTED_MODULE_7__[\"QuestionFactory\"].DefaultColums;\n    return q;\n});\n\n\n/***/ }),\n\n/***/ \"./src/question_matrixdropdown.ts\":\n/*!****************************************!*\\\n  !*** ./src/question_matrixdropdown.ts ***!\n  \\****************************************/\n/*! exports provided: MatrixDropdownRowModel, QuestionMatrixDropdownModel */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_2980220__) {\n\n\"use strict\";\n__nested_webpack_require_2980220__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_2980220__.d(__nested_webpack_exports__, \"MatrixDropdownRowModel\", function() { return MatrixDropdownRowModel; });\n/* harmony export (binding) */ __nested_webpack_require_2980220__.d(__nested_webpack_exports__, \"QuestionMatrixDropdownModel\", function() { return QuestionMatrixDropdownModel; });\n/* harmony import */ var _question_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_2980220__(/*! ./question_matrixdropdownbase */ \"./src/question_matrixdropdownbase.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_2980220__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _itemvalue__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_2980220__(/*! ./itemvalue */ \"./src/itemvalue.ts\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_2980220__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_2980220__(/*! ./helpers */ \"./src/helpers.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n\n\n\n\n\nvar MatrixDropdownRowModel = /** @class */ (function (_super) {\n    __extends(MatrixDropdownRowModel, _super);\n    function MatrixDropdownRowModel(name, item, data, value) {\n        var _this = _super.call(this, data, value) || this;\n        _this.name = name;\n        _this.item = item;\n        _this.buildCells(value);\n        return _this;\n    }\n    Object.defineProperty(MatrixDropdownRowModel.prototype, \"rowName\", {\n        get: function () {\n            return this.name;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MatrixDropdownRowModel.prototype, \"text\", {\n        get: function () {\n            return this.item.text;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MatrixDropdownRowModel.prototype, \"locText\", {\n        get: function () {\n            return this.item.locText;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    return MatrixDropdownRowModel;\n}(_question_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_0__[\"MatrixDropdownRowModelBase\"]));\n\n/**\n  * A class that describes the Multi-Select Matrix question type. Multi-Select Matrix allows you to use the [Dropdown](https://surveyjs.io/form-library/documentation/questiondropdownmodel), [Checkbox](https://surveyjs.io/form-library/documentation/questioncheckboxmodel), [Radiogroup](https://surveyjs.io/form-library/documentation/questionradiogroupmodel), [Text](https://surveyjs.io/form-library/documentation/questiontextmodel), and [Comment](https://surveyjs.io/form-library/documentation/questioncommentmodel) question types as cell editors.\n *\n * [View Demo](https://surveyjs.io/form-library/examples/questiontype-matrixdropdown/ (linkStyle))\n */\nvar QuestionMatrixDropdownModel = /** @class */ (function (_super) {\n    __extends(QuestionMatrixDropdownModel, _super);\n    function QuestionMatrixDropdownModel(name) {\n        var _this = _super.call(this, name) || this;\n        _this.createLocalizableString(\"totalText\", _this, true);\n        _this.registerPropertyChangedHandlers([\"rows\"], function () {\n            _this.clearGeneratedRows();\n            _this.resetRenderedTable();\n            if (!_this.filterItems()) {\n                _this.onRowsChanged();\n            }\n            _this.clearIncorrectValues();\n        });\n        _this.registerPropertyChangedHandlers([\"hideIfRowsEmpty\"], function () {\n            _this.updateVisibilityBasedOnRows();\n        });\n        return _this;\n    }\n    QuestionMatrixDropdownModel.prototype.getType = function () {\n        return \"matrixdropdown\";\n    };\n    Object.defineProperty(QuestionMatrixDropdownModel.prototype, \"totalText\", {\n        /**\n         * A title for the total row. Applies if at least one column displays total values.\n         * @see rowTitleWidth\n         * @see columns\n         */\n        get: function () {\n            return this.getLocalizableStringText(\"totalText\", \"\");\n        },\n        set: function (val) {\n            this.setLocalizableStringText(\"totalText\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixDropdownModel.prototype, \"locTotalText\", {\n        get: function () {\n            return this.getLocalizableString(\"totalText\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionMatrixDropdownModel.prototype.getFooterText = function () {\n        return this.locTotalText;\n    };\n    QuestionMatrixDropdownModel.prototype.getRowTitleWidth = function () {\n        return this.rowTitleWidth;\n    };\n    Object.defineProperty(QuestionMatrixDropdownModel.prototype, \"hideIfRowsEmpty\", {\n        /**\n         * Specifies whether to hide the question when the matrix has no visible rows.\n         * @see rowsVisibleIf\n         */\n        get: function () {\n            return this.getPropertyValue(\"hideIfRowsEmpty\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"hideIfRowsEmpty\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionMatrixDropdownModel.prototype.getDisplayValueCore = function (keysAsText, value) {\n        if (!value)\n            return value;\n        var rows = this.visibleRows;\n        var res = {};\n        if (!rows)\n            return res;\n        for (var i = 0; i < rows.length; i++) {\n            var rowValue = rows[i].rowName;\n            var val = value[rowValue];\n            if (!val)\n                continue;\n            if (keysAsText) {\n                var displayRowValue = _itemvalue__WEBPACK_IMPORTED_MODULE_2__[\"ItemValue\"].getTextOrHtmlByValue(this.rows, rowValue);\n                if (!!displayRowValue) {\n                    rowValue = displayRowValue;\n                }\n            }\n            res[rowValue] = this.getRowDisplayValue(keysAsText, rows[i], val);\n        }\n        return res;\n    };\n    QuestionMatrixDropdownModel.prototype.getConditionObjectRowName = function (index) {\n        return \".\" + this.rows[index].value;\n    };\n    QuestionMatrixDropdownModel.prototype.getConditionObjectRowText = function (index) {\n        return \".\" + this.rows[index].calculatedText;\n    };\n    QuestionMatrixDropdownModel.prototype.getConditionObjectsRowIndeces = function () {\n        var res = [];\n        for (var i = 0; i < this.rows.length; i++)\n            res.push(i);\n        return res;\n    };\n    QuestionMatrixDropdownModel.prototype.isNewValueCorrect = function (val) {\n        return _helpers__WEBPACK_IMPORTED_MODULE_4__[\"Helpers\"].isValueObject(val, true);\n    };\n    QuestionMatrixDropdownModel.prototype.clearIncorrectValues = function () {\n        var val = this.value;\n        if (!val)\n            return;\n        var newVal = null;\n        var isChanged = false;\n        var rows = !!this.filteredRows ? this.filteredRows : this.rows;\n        for (var key in val) {\n            if (_itemvalue__WEBPACK_IMPORTED_MODULE_2__[\"ItemValue\"].getItemByValue(rows, key)) {\n                if (newVal == null)\n                    newVal = {};\n                newVal[key] = val[key];\n            }\n            else {\n                isChanged = true;\n            }\n        }\n        if (isChanged) {\n            this.value = newVal;\n        }\n        _super.prototype.clearIncorrectValues.call(this);\n    };\n    QuestionMatrixDropdownModel.prototype.clearValueIfInvisibleCore = function (reason) {\n        _super.prototype.clearValueIfInvisibleCore.call(this, reason);\n        this.clearInvisibleValuesInRows();\n    };\n    QuestionMatrixDropdownModel.prototype.generateRows = function () {\n        var result = new Array();\n        var rows = !!this.filteredRows ? this.filteredRows : this.rows;\n        if (!rows || rows.length === 0)\n            return result;\n        var val = this.value;\n        if (!val)\n            val = {};\n        for (var i = 0; i < rows.length; i++) {\n            if (this.isValueEmpty(rows[i].value))\n                continue;\n            result.push(this.createMatrixRow(rows[i], val[rows[i].value]));\n        }\n        return result;\n    };\n    QuestionMatrixDropdownModel.prototype.createMatrixRow = function (item, value) {\n        return new MatrixDropdownRowModel(item.value, item, this, value);\n    };\n    QuestionMatrixDropdownModel.prototype.getSearchableItemValueKeys = function (keys) {\n        keys.push(\"rows\");\n    };\n    QuestionMatrixDropdownModel.prototype.updateProgressInfoByValues = function (res) {\n        var val = this.value;\n        if (!val)\n            val = {};\n        for (var i = 0; i < this.rows.length; i++) {\n            var row = this.rows[i];\n            var rowValue = val[row.value];\n            this.updateProgressInfoByRow(res, !!rowValue ? rowValue : {});\n        }\n    };\n    return QuestionMatrixDropdownModel;\n}(_question_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixDropdownModelBase\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].addClass(\"matrixdropdown\", [\n    {\n        name: \"rows:itemvalue[]\", uniqueProperty: \"value\"\n    },\n    \"rowsVisibleIf:condition\",\n    \"rowTitleWidth\",\n    { name: \"totalText\", serializationProperty: \"locTotalText\" },\n    \"hideIfRowsEmpty:boolean\"\n], function () {\n    return new QuestionMatrixDropdownModel(\"\");\n}, \"matrixdropdownbase\");\n_questionfactory__WEBPACK_IMPORTED_MODULE_3__[\"QuestionFactory\"].Instance.registerQuestion(\"matrixdropdown\", function (name) {\n    var q = new QuestionMatrixDropdownModel(name);\n    q.choices = [1, 2, 3, 4, 5];\n    q.rows = _questionfactory__WEBPACK_IMPORTED_MODULE_3__[\"QuestionFactory\"].DefaultRows;\n    _question_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixDropdownModelBase\"].addDefaultColumns(q);\n    return q;\n});\n\n\n/***/ }),\n\n/***/ \"./src/question_matrixdropdownbase.ts\":\n/*!********************************************!*\\\n  !*** ./src/question_matrixdropdownbase.ts ***!\n  \\********************************************/\n/*! exports provided: MatrixDropdownCell, MatrixDropdownTotalCell, MatrixDropdownRowModelBase, MatrixDropdownTotalRowModel, QuestionMatrixDropdownModelBase */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_2991256__) {\n\n\"use strict\";\n__nested_webpack_require_2991256__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_2991256__.d(__nested_webpack_exports__, \"MatrixDropdownCell\", function() { return MatrixDropdownCell; });\n/* harmony export (binding) */ __nested_webpack_require_2991256__.d(__nested_webpack_exports__, \"MatrixDropdownTotalCell\", function() { return MatrixDropdownTotalCell; });\n/* harmony export (binding) */ __nested_webpack_require_2991256__.d(__nested_webpack_exports__, \"MatrixDropdownRowModelBase\", function() { return MatrixDropdownRowModelBase; });\n/* harmony export (binding) */ __nested_webpack_require_2991256__.d(__nested_webpack_exports__, \"MatrixDropdownTotalRowModel\", function() { return MatrixDropdownTotalRowModel; });\n/* harmony export (binding) */ __nested_webpack_require_2991256__.d(__nested_webpack_exports__, \"QuestionMatrixDropdownModelBase\", function() { return QuestionMatrixDropdownModelBase; });\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_2991256__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _martixBase__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_2991256__(/*! ./martixBase */ \"./src/martixBase.ts\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_2991256__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_2991256__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _survey_element__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_2991256__(/*! ./survey-element */ \"./src/survey-element.ts\");\n/* harmony import */ var _textPreProcessor__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_2991256__(/*! ./textPreProcessor */ \"./src/textPreProcessor.ts\");\n/* harmony import */ var _itemvalue__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_2991256__(/*! ./itemvalue */ \"./src/itemvalue.ts\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_2991256__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\n/* harmony import */ var _functionsfactory__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_2991256__(/*! ./functionsfactory */ \"./src/functionsfactory.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_9__ = __nested_webpack_require_2991256__(/*! ./settings */ \"./src/settings.ts\");\n/* harmony import */ var _error__WEBPACK_IMPORTED_MODULE_10__ = __nested_webpack_require_2991256__(/*! ./error */ \"./src/error.ts\");\n/* harmony import */ var _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_11__ = __nested_webpack_require_2991256__(/*! ./utils/cssClassBuilder */ \"./src/utils/cssClassBuilder.ts\");\n/* harmony import */ var _question_matrixdropdowncolumn__WEBPACK_IMPORTED_MODULE_12__ = __nested_webpack_require_2991256__(/*! ./question_matrixdropdowncolumn */ \"./src/question_matrixdropdowncolumn.ts\");\n/* harmony import */ var _question_matrixdropdownrendered__WEBPACK_IMPORTED_MODULE_13__ = __nested_webpack_require_2991256__(/*! ./question_matrixdropdownrendered */ \"./src/question_matrixdropdownrendered.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar MatrixDropdownCell = /** @class */ (function () {\n    function MatrixDropdownCell(column, row, data) {\n        this.column = column;\n        this.row = row;\n        this.data = data;\n        this.questionValue = this.createQuestion(column, row, data);\n        this.questionValue.updateCustomWidget();\n    }\n    MatrixDropdownCell.prototype.locStrsChanged = function () {\n        this.question.locStrsChanged();\n    };\n    MatrixDropdownCell.prototype.createQuestion = function (column, row, data) {\n        var res = data.createQuestion(this.row, this.column);\n        res.validateValueCallback = function () {\n            return data.validateCell(row, column.name, row.value);\n        };\n        _jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"CustomPropertiesCollection\"].getProperties(column.getType()).forEach(function (property) {\n            var propertyName = property.name;\n            if (column[propertyName] !== undefined) {\n                res[propertyName] = column[propertyName];\n            }\n        });\n        return res;\n    };\n    Object.defineProperty(MatrixDropdownCell.prototype, \"question\", {\n        get: function () {\n            return this.questionValue;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MatrixDropdownCell.prototype, \"value\", {\n        get: function () {\n            return this.question.value;\n        },\n        set: function (value) {\n            this.question.value = value;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    MatrixDropdownCell.prototype.runCondition = function (values, properties) {\n        this.question.runCondition(values, properties);\n    };\n    return MatrixDropdownCell;\n}());\n\nvar MatrixDropdownTotalCell = /** @class */ (function (_super) {\n    __extends(MatrixDropdownTotalCell, _super);\n    function MatrixDropdownTotalCell(column, row, data) {\n        var _this = _super.call(this, column, row, data) || this;\n        _this.column = column;\n        _this.row = row;\n        _this.data = data;\n        _this.updateCellQuestion();\n        return _this;\n    }\n    MatrixDropdownTotalCell.prototype.createQuestion = function (column, row, data) {\n        var res = _jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].createClass(\"expression\");\n        res.setSurveyImpl(row);\n        return res;\n    };\n    MatrixDropdownTotalCell.prototype.locStrsChanged = function () {\n        this.updateCellQuestion();\n        _super.prototype.locStrsChanged.call(this);\n    };\n    MatrixDropdownTotalCell.prototype.updateCellQuestion = function () {\n        this.question.locCalculation();\n        this.column.updateCellQuestion(this.question, null, function (json) {\n            delete json[\"defaultValue\"];\n        });\n        this.question.expression = this.getTotalExpression();\n        this.question.format = this.column.totalFormat;\n        this.question.currency = this.column.totalCurrency;\n        this.question.displayStyle = this.column.totalDisplayStyle;\n        this.question.maximumFractionDigits = this.column.totalMaximumFractionDigits;\n        this.question.minimumFractionDigits = this.column.totalMinimumFractionDigits;\n        this.question.unlocCalculation();\n        this.question.runIfReadOnly = true;\n    };\n    MatrixDropdownTotalCell.prototype.getTotalExpression = function () {\n        if (!!this.column.totalExpression)\n            return this.column.totalExpression;\n        if (this.column.totalType == \"none\")\n            return \"''\";\n        var funName = this.column.totalType + \"InArray\";\n        if (!_functionsfactory__WEBPACK_IMPORTED_MODULE_8__[\"FunctionFactory\"].Instance.hasFunction(funName))\n            return \"\";\n        return funName + \"({self}, '\" + this.column.name + \"')\";\n    };\n    return MatrixDropdownTotalCell;\n}(MatrixDropdownCell));\n\nvar MatrixDropdownRowTextProcessor = /** @class */ (function (_super) {\n    __extends(MatrixDropdownRowTextProcessor, _super);\n    function MatrixDropdownRowTextProcessor(row, variableName, parentTextProcessor) {\n        var _this = _super.call(this, variableName) || this;\n        _this.row = row;\n        _this.variableName = variableName;\n        _this.parentTextProcessor = parentTextProcessor;\n        return _this;\n    }\n    MatrixDropdownRowTextProcessor.prototype.getParentTextProcessor = function () { return this.parentTextProcessor; };\n    Object.defineProperty(MatrixDropdownRowTextProcessor.prototype, \"survey\", {\n        get: function () {\n            return this.row.getSurvey();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    MatrixDropdownRowTextProcessor.prototype.getValues = function () {\n        return this.row.value;\n    };\n    MatrixDropdownRowTextProcessor.prototype.getQuestionByName = function (name) {\n        return this.row.getQuestionByName(name);\n    };\n    MatrixDropdownRowTextProcessor.prototype.onCustomProcessText = function (textValue) {\n        if (textValue.name == MatrixDropdownRowModelBase.IndexVariableName) {\n            textValue.isExists = true;\n            textValue.value = this.row.rowIndex;\n            return true;\n        }\n        if (textValue.name == MatrixDropdownRowModelBase.RowValueVariableName) {\n            textValue.isExists = true;\n            textValue.value = this.row.rowName;\n            return true;\n        }\n        return false;\n    };\n    return MatrixDropdownRowTextProcessor;\n}(_textPreProcessor__WEBPACK_IMPORTED_MODULE_5__[\"QuestionTextProcessor\"]));\nvar MatrixDropdownRowModelBase = /** @class */ (function () {\n    function MatrixDropdownRowModelBase(data, value) {\n        var _this = this;\n        this.isSettingValue = false;\n        this.detailPanelValue = null;\n        this.cells = [];\n        this.isCreatingDetailPanel = false;\n        this.data = data;\n        this.subscribeToChanges(value);\n        this.textPreProcessor = new MatrixDropdownRowTextProcessor(this, MatrixDropdownRowModelBase.RowVariableName, !!data ? data.getParentTextProcessor() : null);\n        this.showHideDetailPanelClick = function () {\n            if (_this.getSurvey().isDesignMode)\n                return true;\n            _this.showHideDetailPanel();\n        };\n        this.idValue = MatrixDropdownRowModelBase.getId();\n    }\n    MatrixDropdownRowModelBase.getId = function () {\n        return \"srow_\" + MatrixDropdownRowModelBase.idCounter++;\n    };\n    Object.defineProperty(MatrixDropdownRowModelBase.prototype, \"id\", {\n        get: function () {\n            return this.idValue;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MatrixDropdownRowModelBase.prototype, \"rowName\", {\n        get: function () {\n            return null;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MatrixDropdownRowModelBase.prototype, \"text\", {\n        get: function () {\n            return this.rowName;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MatrixDropdownRowModelBase.prototype, \"value\", {\n        get: function () {\n            var result = {};\n            var questions = this.questions;\n            for (var i = 0; i < questions.length; i++) {\n                var question = questions[i];\n                if (!question.isEmpty()) {\n                    result[question.getValueName()] = question.value;\n                }\n                if (!!question.comment &&\n                    !!this.getSurvey() &&\n                    this.getSurvey().storeOthersAsComment) {\n                    result[question.getValueName() + _base__WEBPACK_IMPORTED_MODULE_3__[\"Base\"].commentSuffix] =\n                        question.comment;\n                }\n            }\n            return result;\n        },\n        set: function (value) {\n            this.isSettingValue = true;\n            this.subscribeToChanges(value);\n            var questions = this.questions;\n            for (var i = 0; i < questions.length; i++) {\n                var question = questions[i];\n                var val = this.getCellValue(value, question.getValueName());\n                var oldComment = question.comment;\n                var comment = !!value\n                    ? value[question.getValueName() + _base__WEBPACK_IMPORTED_MODULE_3__[\"Base\"].commentSuffix]\n                    : \"\";\n                if (comment == undefined)\n                    comment = \"\";\n                question.updateValueFromSurvey(val);\n                if (!!comment || this.isTwoValueEquals(oldComment, question.comment)) {\n                    question.updateCommentFromSurvey(comment);\n                }\n                question.onSurveyValueChanged(val);\n            }\n            this.isSettingValue = false;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MatrixDropdownRowModelBase.prototype, \"locText\", {\n        get: function () {\n            return null;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MatrixDropdownRowModelBase.prototype, \"hasPanel\", {\n        get: function () {\n            if (!this.data)\n                return false;\n            return this.data.hasDetailPanel(this);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MatrixDropdownRowModelBase.prototype, \"detailPanel\", {\n        get: function () {\n            return this.detailPanelValue;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MatrixDropdownRowModelBase.prototype, \"detailPanelId\", {\n        get: function () {\n            return !!this.detailPanel ? this.detailPanel.id : \"\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MatrixDropdownRowModelBase.prototype, \"isDetailPanelShowing\", {\n        get: function () {\n            return !!this.data ? this.data.getIsDetailPanelShowing(this) : false;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    MatrixDropdownRowModelBase.prototype.setIsDetailPanelShowing = function (val) {\n        if (!val && this.detailPanel) {\n            this.detailPanel.onHidingContent();\n        }\n        if (!!this.data) {\n            this.data.setIsDetailPanelShowing(this, val);\n        }\n        if (!!this.onDetailPanelShowingChanged) {\n            this.onDetailPanelShowingChanged();\n        }\n    };\n    MatrixDropdownRowModelBase.prototype.showHideDetailPanel = function () {\n        if (this.isDetailPanelShowing) {\n            this.hideDetailPanel();\n        }\n        else {\n            this.showDetailPanel();\n        }\n    };\n    MatrixDropdownRowModelBase.prototype.showDetailPanel = function () {\n        this.ensureDetailPanel();\n        if (!this.detailPanelValue)\n            return;\n        this.setIsDetailPanelShowing(true);\n    };\n    MatrixDropdownRowModelBase.prototype.hideDetailPanel = function (destroyPanel) {\n        if (destroyPanel === void 0) { destroyPanel = false; }\n        this.setIsDetailPanelShowing(false);\n        if (destroyPanel) {\n            this.detailPanelValue = null;\n        }\n    };\n    MatrixDropdownRowModelBase.prototype.ensureDetailPanel = function () {\n        if (this.isCreatingDetailPanel)\n            return;\n        if (!!this.detailPanelValue || !this.hasPanel || !this.data)\n            return;\n        this.isCreatingDetailPanel = true;\n        this.detailPanelValue = this.data.createRowDetailPanel(this);\n        var questions = this.detailPanelValue.questions;\n        var value = this.data.getRowValue(this.data.getRowIndex(this));\n        if (!_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(value)) {\n            for (var i = 0; i < questions.length; i++) {\n                var key = questions[i].getValueName();\n                if (!_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(value[key])) {\n                    questions[i].value = value[key];\n                }\n            }\n        }\n        this.detailPanelValue.setSurveyImpl(this);\n        this.isCreatingDetailPanel = false;\n    };\n    MatrixDropdownRowModelBase.prototype.getAllValues = function () {\n        return this.value;\n    };\n    MatrixDropdownRowModelBase.prototype.getFilteredValues = function () {\n        var res = this.data ? this.data.getDataFilteredValues() : {};\n        var values = this.validationValues;\n        if (values) {\n            for (var key in values) {\n                res[key] = values[key];\n            }\n        }\n        res.row = this.getAllValues();\n        return res;\n    };\n    MatrixDropdownRowModelBase.prototype.getFilteredProperties = function () {\n        return { survey: this.getSurvey(), row: this };\n    };\n    MatrixDropdownRowModelBase.prototype.runCondition = function (values, properties) {\n        if (!!this.data) {\n            values[MatrixDropdownRowModelBase.OwnerVariableName] = this.data.value;\n        }\n        values[MatrixDropdownRowModelBase.IndexVariableName] = this.rowIndex;\n        values[MatrixDropdownRowModelBase.RowValueVariableName] = this.rowName;\n        var newProps = _helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].createCopy(properties);\n        newProps[MatrixDropdownRowModelBase.RowVariableName] = this;\n        for (var i = 0; i < this.cells.length; i++) {\n            values[MatrixDropdownRowModelBase.RowVariableName] = this.value;\n            this.cells[i].runCondition(values, newProps);\n        }\n        if (!!this.detailPanel) {\n            this.detailPanel.runCondition(values, newProps);\n        }\n    };\n    MatrixDropdownRowModelBase.prototype.clearValue = function () {\n        var questions = this.questions;\n        for (var i = 0; i < questions.length; i++) {\n            questions[i].clearValue();\n        }\n    };\n    MatrixDropdownRowModelBase.prototype.onAnyValueChanged = function (name, questionName) {\n        var questions = this.questions;\n        for (var i = 0; i < questions.length; i++) {\n            questions[i].onAnyValueChanged(name, questionName);\n        }\n    };\n    MatrixDropdownRowModelBase.prototype.getDataValueCore = function (valuesHash, key) {\n        var survey = this.getSurvey();\n        if (!!survey) {\n            return survey.getDataValueCore(valuesHash, key);\n        }\n        else {\n            return valuesHash[key];\n        }\n    };\n    MatrixDropdownRowModelBase.prototype.getValue = function (name) {\n        var question = this.getQuestionByName(name);\n        return !!question ? question.value : null;\n    };\n    MatrixDropdownRowModelBase.prototype.setValue = function (name, newColumnValue) {\n        this.setValueCore(name, newColumnValue, false);\n    };\n    MatrixDropdownRowModelBase.prototype.getVariable = function (name) {\n        return undefined;\n    };\n    MatrixDropdownRowModelBase.prototype.setVariable = function (name, newValue) { };\n    MatrixDropdownRowModelBase.prototype.getComment = function (name) {\n        var question = this.getQuestionByName(name);\n        return !!question ? question.comment : \"\";\n    };\n    MatrixDropdownRowModelBase.prototype.setComment = function (name, newValue, locNotification) {\n        this.setValueCore(name, newValue, true);\n    };\n    MatrixDropdownRowModelBase.prototype.findQuestionByName = function (name) {\n        if (!name)\n            return undefined;\n        var prefix = MatrixDropdownRowModelBase.RowVariableName + \".\";\n        if (name.indexOf(prefix) === 0) {\n            return this.getQuestionByName(name.substring(prefix.length));\n        }\n        var survey = this.getSurvey();\n        return !!survey ? survey.getQuestionByName(name) : null;\n    };\n    MatrixDropdownRowModelBase.prototype.setValueCore = function (name, newColumnValue, isComment) {\n        if (this.isSettingValue)\n            return;\n        this.updateQuestionsValue(name, newColumnValue, isComment);\n        var newValue = this.value;\n        var changedName = isComment ? name + _base__WEBPACK_IMPORTED_MODULE_3__[\"Base\"].commentSuffix : name;\n        var changedValue = newColumnValue;\n        var changedQuestion = this.getQuestionByName(name);\n        var changingValue = this.data.onRowChanging(this, changedName, newValue);\n        if (!!changedQuestion &&\n            !this.isTwoValueEquals(changingValue, changedValue)) {\n            this.isSettingValue = true;\n            if (isComment) {\n                changedQuestion.comment = changingValue;\n            }\n            else {\n                changedQuestion.value = changingValue;\n            }\n            this.isSettingValue = false;\n            newValue = this.value;\n        }\n        if (this.data.isValidateOnValueChanging && this.hasQuestonError(changedQuestion))\n            return;\n        var isDeleting = newColumnValue == null && !changedQuestion ||\n            isComment && !newColumnValue && !!changedQuestion && changedQuestion.autoOtherMode;\n        this.data.onRowChanged(this, changedName, newValue, isDeleting);\n        if (changedName) {\n            this.runTriggers(MatrixDropdownTotalRowModel.RowVariableName + \".\" + changedName, newValue);\n        }\n        this.onAnyValueChanged(MatrixDropdownRowModelBase.RowVariableName, \"\");\n    };\n    MatrixDropdownRowModelBase.prototype.updateQuestionsValue = function (name, newColumnValue, isComment) {\n        if (!this.detailPanel)\n            return;\n        var colQuestion = this.getQuestionByColumnName(name);\n        var detailQuestion = this.detailPanel.getQuestionByName(name);\n        if (!colQuestion || !detailQuestion)\n            return;\n        var isColQuestion = this.isTwoValueEquals(newColumnValue, isComment ? colQuestion.comment : colQuestion.value);\n        var question = isColQuestion ? detailQuestion : colQuestion;\n        this.isSettingValue = true;\n        if (!isComment) {\n            question.value = newColumnValue;\n        }\n        else {\n            question.comment = newColumnValue;\n        }\n        this.isSettingValue = false;\n    };\n    MatrixDropdownRowModelBase.prototype.runTriggers = function (name, value) {\n        if (!name)\n            return;\n        this.questions.forEach(function (q) { return q.runTriggers(name, value); });\n    };\n    MatrixDropdownRowModelBase.prototype.hasQuestonError = function (question) {\n        if (!question)\n            return false;\n        if (question.hasErrors(true, {\n            isOnValueChanged: !this.data.isValidateOnValueChanging,\n        }))\n            return true;\n        if (question.isEmpty())\n            return false;\n        var cell = this.getCellByColumnName(question.name);\n        if (!cell || !cell.column || !cell.column.isUnique)\n            return false;\n        return this.data.checkIfValueInRowDuplicated(this, question);\n    };\n    Object.defineProperty(MatrixDropdownRowModelBase.prototype, \"isEmpty\", {\n        get: function () {\n            var val = this.value;\n            if (_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(val))\n                return true;\n            for (var key in val) {\n                if (val[key] !== undefined && val[key] !== null)\n                    return false;\n            }\n            return true;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    MatrixDropdownRowModelBase.prototype.getQuestionByColumn = function (column) {\n        var cell = this.getCellByColumn(column);\n        return !!cell ? cell.question : null;\n    };\n    MatrixDropdownRowModelBase.prototype.getCellByColumn = function (column) {\n        for (var i = 0; i < this.cells.length; i++) {\n            if (this.cells[i].column == column)\n                return this.cells[i];\n        }\n        return null;\n    };\n    MatrixDropdownRowModelBase.prototype.getCellByColumnName = function (columnName) {\n        for (var i = 0; i < this.cells.length; i++) {\n            if (this.cells[i].column.name == columnName)\n                return this.cells[i];\n        }\n        return null;\n    };\n    MatrixDropdownRowModelBase.prototype.getQuestionByColumnName = function (columnName) {\n        var cell = this.getCellByColumnName(columnName);\n        return !!cell ? cell.question : null;\n    };\n    Object.defineProperty(MatrixDropdownRowModelBase.prototype, \"questions\", {\n        get: function () {\n            var res = [];\n            for (var i = 0; i < this.cells.length; i++) {\n                res.push(this.cells[i].question);\n            }\n            var detailQuestions = !!this.detailPanel ? this.detailPanel.questions : [];\n            for (var i = 0; i < detailQuestions.length; i++) {\n                res.push(detailQuestions[i]);\n            }\n            return res;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    MatrixDropdownRowModelBase.prototype.getQuestionByName = function (name) {\n        var res = this.getQuestionByColumnName(name);\n        if (!!res)\n            return res;\n        return !!this.detailPanel ? this.detailPanel.getQuestionByName(name) : null;\n    };\n    MatrixDropdownRowModelBase.prototype.getQuestionsByName = function (name) {\n        var res = [];\n        var q = this.getQuestionByColumnName(name);\n        if (!!q)\n            res.push(q);\n        if (!!this.detailPanel) {\n            q = this.detailPanel.getQuestionByName(name);\n            if (!!q)\n                res.push(q);\n        }\n        return res;\n    };\n    MatrixDropdownRowModelBase.prototype.getSharedQuestionByName = function (columnName) {\n        return !!this.data\n            ? this.data.getSharedQuestionByName(columnName, this)\n            : null;\n    };\n    MatrixDropdownRowModelBase.prototype.clearIncorrectValues = function (val) {\n        for (var key in val) {\n            var question = this.getQuestionByName(key);\n            if (question) {\n                var qVal = question.value;\n                question.clearIncorrectValues();\n                if (!this.isTwoValueEquals(qVal, question.value)) {\n                    this.setValue(key, question.value);\n                }\n            }\n            else {\n                if (!this.getSharedQuestionByName(key) &&\n                    key.indexOf(_settings__WEBPACK_IMPORTED_MODULE_9__[\"settings\"].matrix.totalsSuffix) < 0) {\n                    this.setValue(key, null);\n                }\n            }\n        }\n    };\n    MatrixDropdownRowModelBase.prototype.getLocale = function () {\n        return this.data ? this.data.getLocale() : \"\";\n    };\n    MatrixDropdownRowModelBase.prototype.getMarkdownHtml = function (text, name) {\n        return this.data ? this.data.getMarkdownHtml(text, name) : undefined;\n    };\n    MatrixDropdownRowModelBase.prototype.getRenderer = function (name) {\n        return this.data ? this.data.getRenderer(name) : null;\n    };\n    MatrixDropdownRowModelBase.prototype.getRendererContext = function (locStr) {\n        return this.data ? this.data.getRendererContext(locStr) : locStr;\n    };\n    MatrixDropdownRowModelBase.prototype.getProcessedText = function (text) {\n        return this.data ? this.data.getProcessedText(text) : text;\n    };\n    MatrixDropdownRowModelBase.prototype.locStrsChanged = function () {\n        for (var i = 0; i < this.cells.length; i++) {\n            this.cells[i].locStrsChanged();\n        }\n        if (!!this.detailPanel) {\n            this.detailPanel.locStrsChanged();\n        }\n    };\n    MatrixDropdownRowModelBase.prototype.updateCellQuestionOnColumnChanged = function (column, name, newValue) {\n        var cell = this.getCellByColumn(column);\n        if (!cell)\n            return;\n        this.updateCellOnColumnChanged(cell, name, newValue);\n    };\n    MatrixDropdownRowModelBase.prototype.updateCellQuestionOnColumnItemValueChanged = function (column, propertyName, obj, name, newValue, oldValue) {\n        var cell = this.getCellByColumn(column);\n        if (!cell)\n            return;\n        this.updateCellOnColumnItemValueChanged(cell, propertyName, obj, name, newValue, oldValue);\n    };\n    MatrixDropdownRowModelBase.prototype.onQuestionReadOnlyChanged = function (parentIsReadOnly) {\n        var questions = this.questions;\n        for (var i = 0; i < questions.length; i++) {\n            var q = questions[i];\n            q.setPropertyValue(\"isReadOnly\", q.isReadOnly);\n        }\n        if (!!this.detailPanel) {\n            this.detailPanel.readOnly = parentIsReadOnly;\n        }\n    };\n    MatrixDropdownRowModelBase.prototype.hasErrors = function (fireCallback, rec, raiseOnCompletedAsyncValidators) {\n        var res = false;\n        var cells = this.cells;\n        if (!cells)\n            return res;\n        this.validationValues = rec.validationValues;\n        for (var colIndex = 0; colIndex < cells.length; colIndex++) {\n            if (!cells[colIndex])\n                continue;\n            var question = cells[colIndex].question;\n            if (!question || !question.visible)\n                continue;\n            question.onCompletedAsyncValidators = function (hasErrors) {\n                raiseOnCompletedAsyncValidators();\n            };\n            if (!!rec && rec.isOnValueChanged === true && question.isEmpty())\n                continue;\n            res = question.hasErrors(fireCallback, rec) || res;\n        }\n        if (this.hasPanel) {\n            this.ensureDetailPanel();\n            var panelHasError = this.detailPanel.hasErrors(fireCallback, false, rec);\n            if (!rec.hideErroredPanel && panelHasError && fireCallback) {\n                if (rec.isSingleDetailPanel) {\n                    rec.hideErroredPanel = true;\n                }\n                this.showDetailPanel();\n            }\n            res = panelHasError || res;\n        }\n        this.validationValues = undefined;\n        return res;\n    };\n    MatrixDropdownRowModelBase.prototype.updateCellOnColumnChanged = function (cell, name, newValue) {\n        cell.question[name] = newValue;\n    };\n    MatrixDropdownRowModelBase.prototype.updateCellOnColumnItemValueChanged = function (cell, propertyName, obj, name, newValue, oldValue) {\n        var items = cell.question[propertyName];\n        if (!Array.isArray(items))\n            return;\n        var val = name === \"value\" ? oldValue : obj[\"value\"];\n        var item = _itemvalue__WEBPACK_IMPORTED_MODULE_6__[\"ItemValue\"].getItemByValue(items, val);\n        if (!item)\n            return;\n        item[name] = newValue;\n    };\n    MatrixDropdownRowModelBase.prototype.buildCells = function (value) {\n        this.isSettingValue = true;\n        var columns = this.data.columns;\n        for (var i = 0; i < columns.length; i++) {\n            var column = columns[i];\n            var cell = this.createCell(column);\n            this.cells.push(cell);\n            var cellValue = this.getCellValue(value, column.name);\n            if (!_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(cellValue)) {\n                cell.question.value = cellValue;\n                var commentKey = column.name + _base__WEBPACK_IMPORTED_MODULE_3__[\"Base\"].commentSuffix;\n                if (!!value && !_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(value[commentKey])) {\n                    cell.question.comment = value[commentKey];\n                }\n            }\n        }\n        this.isSettingValue = false;\n    };\n    MatrixDropdownRowModelBase.prototype.isTwoValueEquals = function (val1, val2) {\n        return _helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isTwoValueEquals(val1, val2, false, true, false);\n    };\n    MatrixDropdownRowModelBase.prototype.getCellValue = function (value, name) {\n        if (!!this.editingObj)\n            return _jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].getObjPropertyValue(this.editingObj, name);\n        return !!value ? value[name] : undefined;\n    };\n    MatrixDropdownRowModelBase.prototype.createCell = function (column) {\n        return new MatrixDropdownCell(column, this, this.data);\n    };\n    MatrixDropdownRowModelBase.prototype.getSurveyData = function () {\n        return this;\n    };\n    MatrixDropdownRowModelBase.prototype.getSurvey = function () {\n        return this.data ? this.data.getSurvey() : null;\n    };\n    MatrixDropdownRowModelBase.prototype.getTextProcessor = function () {\n        return this.textPreProcessor;\n    };\n    Object.defineProperty(MatrixDropdownRowModelBase.prototype, \"rowIndex\", {\n        get: function () {\n            return !!this.data ? this.data.getRowIndex(this) + 1 : -1;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MatrixDropdownRowModelBase.prototype, \"editingObj\", {\n        get: function () {\n            return this.editingObjValue;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    MatrixDropdownRowModelBase.prototype.dispose = function () {\n        if (!!this.editingObj) {\n            this.editingObj.onPropertyChanged.remove(this.onEditingObjPropertyChanged);\n            this.editingObjValue = null;\n        }\n    };\n    MatrixDropdownRowModelBase.prototype.subscribeToChanges = function (value) {\n        var _this = this;\n        if (!value || !value.getType || !value.onPropertyChanged)\n            return;\n        if (value === this.editingObj)\n            return;\n        this.editingObjValue = value;\n        this.onEditingObjPropertyChanged = function (sender, options) {\n            _this.updateOnSetValue(options.name, options.newValue);\n        };\n        this.editingObj.onPropertyChanged.add(this.onEditingObjPropertyChanged);\n    };\n    MatrixDropdownRowModelBase.prototype.updateOnSetValue = function (name, newValue) {\n        this.isSettingValue = true;\n        var questions = this.getQuestionsByName(name);\n        for (var i = 0; i < questions.length; i++) {\n            questions[i].value = newValue;\n        }\n        this.isSettingValue = false;\n    };\n    MatrixDropdownRowModelBase.RowVariableName = \"row\";\n    MatrixDropdownRowModelBase.OwnerVariableName = \"self\";\n    MatrixDropdownRowModelBase.IndexVariableName = \"rowIndex\";\n    MatrixDropdownRowModelBase.RowValueVariableName = \"rowValue\";\n    MatrixDropdownRowModelBase.idCounter = 1;\n    return MatrixDropdownRowModelBase;\n}());\n\nvar MatrixDropdownTotalRowModel = /** @class */ (function (_super) {\n    __extends(MatrixDropdownTotalRowModel, _super);\n    function MatrixDropdownTotalRowModel(data) {\n        var _this = _super.call(this, data, null) || this;\n        _this.buildCells(null);\n        return _this;\n    }\n    MatrixDropdownTotalRowModel.prototype.createCell = function (column) {\n        return new MatrixDropdownTotalCell(column, this, this.data);\n    };\n    MatrixDropdownTotalRowModel.prototype.setValue = function (name, newValue) {\n        if (!!this.data && !this.isSettingValue) {\n            this.data.onTotalValueChanged();\n        }\n    };\n    MatrixDropdownTotalRowModel.prototype.runCondition = function (values, properties) {\n        var counter = 0;\n        var prevValue;\n        do {\n            prevValue = _helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].getUnbindValue(this.value);\n            _super.prototype.runCondition.call(this, values, properties);\n            counter++;\n        } while (!_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isTwoValueEquals(prevValue, this.value) && counter < 3);\n    };\n    MatrixDropdownTotalRowModel.prototype.updateCellOnColumnChanged = function (cell, name, newValue) {\n        cell.updateCellQuestion();\n    };\n    return MatrixDropdownTotalRowModel;\n}(MatrixDropdownRowModelBase));\n\n/**\n * A base class for the [QuestionMatrixDropdownModel](https://surveyjs.io/form-library/documentation/questionmatrixdropdownmodel) and [QuestionMatrixDynamicModel](https://surveyjs.io/form-library/documentation/questionmatrixdynamicmodel) classes.\n */\nvar QuestionMatrixDropdownModelBase = /** @class */ (function (_super) {\n    __extends(QuestionMatrixDropdownModelBase, _super);\n    function QuestionMatrixDropdownModelBase(name) {\n        var _this = _super.call(this, name) || this;\n        _this.isRowChanging = false;\n        _this.lockResetRenderedTable = false;\n        _this.isDoingonAnyValueChanged = false;\n        _this.createItemValues(\"choices\");\n        _this.createLocalizableString(\"placeholder\", _this, false, true);\n        _this.createLocalizableString(\"keyDuplicationError\", _this, false, true);\n        _this.detailPanelValue = _this.createNewDetailPanel();\n        _this.detailPanel.selectedElementInDesign = _this;\n        _this.detailPanel.renderWidth = \"100%\";\n        _this.detailPanel.isInteractiveDesignElement = false;\n        _this.detailPanel.showTitle = false;\n        _this.registerPropertyChangedHandlers([\"columns\", \"cellType\"], function () { _this.updateColumnsAndRows(); });\n        _this.registerPropertyChangedHandlers([\"placeholder\", \"columnColCount\", \"rowTitleWidth\", \"choices\"], function () {\n            _this.clearRowsAndResetRenderedTable();\n        });\n        _this.registerPropertyChangedHandlers([\n            \"columnLayout\",\n            \"addRowLocation\",\n            \"hideColumnsIfEmpty\",\n            \"showHeader\",\n            \"minRowCount\",\n            \"isReadOnly\",\n            \"rowCount\",\n            \"hasFooter\",\n            \"detailPanelMode\",\n        ], function () {\n            _this.resetRenderedTable();\n        });\n        _this.registerPropertyChangedHandlers([\"isMobile\"], function () {\n            _this.resetRenderedTable();\n        });\n        return _this;\n    }\n    Object.defineProperty(QuestionMatrixDropdownModelBase, \"defaultCellType\", {\n        get: function () {\n            return _settings__WEBPACK_IMPORTED_MODULE_9__[\"settings\"].matrix.defaultCellType;\n        },\n        set: function (val) {\n            _settings__WEBPACK_IMPORTED_MODULE_9__[\"settings\"].matrix.defaultCellType = val;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionMatrixDropdownModelBase.addDefaultColumns = function (matrix) {\n        var colNames = _questionfactory__WEBPACK_IMPORTED_MODULE_7__[\"QuestionFactory\"].DefaultColums;\n        for (var i = 0; i < colNames.length; i++)\n            matrix.addColumn(colNames[i]);\n    };\n    QuestionMatrixDropdownModelBase.prototype.createColumnValues = function () {\n        var _this = this;\n        return this.createNewArray(\"columns\", function (item) {\n            item.colOwner = _this;\n            if (_this.onAddColumn)\n                _this.onAddColumn(item);\n            if (_this.survey) {\n                _this.survey.matrixColumnAdded(_this, item);\n            }\n        }, function (item) {\n            item.colOwner = null;\n            if (_this.onRemoveColumn)\n                _this.onRemoveColumn(item);\n        });\n    };\n    QuestionMatrixDropdownModelBase.prototype.getType = function () {\n        return \"matrixdropdownbase\";\n    };\n    QuestionMatrixDropdownModelBase.prototype.dispose = function () {\n        _super.prototype.dispose.call(this);\n        this.clearGeneratedRows();\n    };\n    Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"hasSingleInput\", {\n        get: function () { return false; },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"isContainer\", {\n        get: function () { return true; },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"isRowsDynamic\", {\n        get: function () {\n            return false;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"isUpdateLocked\", {\n        get: function () {\n            return this.isLoadingFromJson || this.isUpdating;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionMatrixDropdownModelBase.prototype.beginUpdate = function () {\n        this.isUpdating = true;\n    };\n    QuestionMatrixDropdownModelBase.prototype.endUpdate = function () {\n        this.isUpdating = false;\n        this.updateColumnsAndRows();\n    };\n    QuestionMatrixDropdownModelBase.prototype.updateColumnsAndRows = function () {\n        this.updateColumnsIndexes(this.columns);\n        this.updateColumnsCellType();\n        this.generatedTotalRow = null;\n        this.clearRowsAndResetRenderedTable();\n    };\n    QuestionMatrixDropdownModelBase.prototype.itemValuePropertyChanged = function (item, name, oldValue, newValue) {\n        _super.prototype.itemValuePropertyChanged.call(this, item, name, oldValue, newValue);\n        if (item.ownerPropertyName === \"choices\") {\n            this.clearRowsAndResetRenderedTable();\n        }\n    };\n    Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"columnLayout\", {\n        /**\n         * Specifies the matrix layout. Set this property to `\"vertical\"` if you want to display columns instead of rows and rows instead of columns.\n         *\n         * Default value: `\"horizontal\"`\n         * @see columns\n         * @see rows\n         * @see isColumnLayoutHorizontal\n         */\n        get: function () {\n            return this.getPropertyValue(\"columnLayout\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"columnLayout\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"columnsLocation\", {\n        get: function () {\n            return this.columnLayout;\n        },\n        set: function (val) {\n            this.columnLayout = val;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"detailErrorLocation\", {\n        /**\n         * Specifies the error message position for questions within detail sections.\n         *\n         * Possible values:\n         *\n         * - `\"default\"` (default) - Inherits the setting from the [`errorLocation`](#errorLocation) property.\n         * - `\"top\"` - Displays error messages above questions.\n         * - `\"bottom\"` - Displays error messages below questions.\n         * @see cellErrorLocation\n         */\n        get: function () {\n            return this.getPropertyValue(\"detailErrorLocation\");\n        },\n        set: function (value) {\n            this.setPropertyValue(\"detailErrorLocation\", value.toLowerCase());\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"cellErrorLocation\", {\n        /**\n         * Specifies the error message position relative to matrix cells.\n         *\n         * Possible values:\n         *\n         * - `\"default\"` (default) - Inherits the setting from the [`errorLocation`](#errorLocation) property.\n         * - `\"top\"` - Displays error messages above matrix cells.\n         * - `\"bottom\"` - Displays error messages below matrix cells.\n         * @see detailErrorLocation\n         */\n        get: function () {\n            return this.getPropertyValue(\"cellErrorLocation\");\n        },\n        set: function (value) {\n            this.setPropertyValue(\"cellErrorLocation\", value.toLowerCase());\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionMatrixDropdownModelBase.prototype.getChildErrorLocation = function (child) {\n        var errLocation = !!child.parent ? this.detailErrorLocation : this.cellErrorLocation;\n        if (errLocation !== \"default\")\n            return errLocation;\n        return _super.prototype.getChildErrorLocation.call(this, child);\n    };\n    Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"isColumnLayoutHorizontal\", {\n        /**\n         * Returns `true` if columns are placed in the horizontal direction and rows in the vertical direction.\n         *\n         * To specify the layout, use the `columnLayout` property. If you set it to `\"vertical\"`, the survey applies it only when the screen has enough space. Otherwise, the survey falls back to the horizontal layout, but the `columnLayout` property remains set to `\"vertical\"`. Unlike `columnLayout`, the `isColumnLayoutHorizontal` property always indicates the current layout.\n         * @see columnLayout\n         */\n        get: function () {\n            if (this.isMobile)\n                return true;\n            return this.columnLayout != \"vertical\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"isUniqueCaseSensitive\", {\n        /**\n         * Enables case-sensitive comparison in columns with the `isUnique` property set to `true`.\n         *\n         * When this property is `true`, `\"ABC\"` and `\"abc\"` are considered different values.\n         *\n         * Default value: `false`\n         * @see keyDuplicationError\n         */\n        get: function () {\n            return this.isUniqueCaseSensitiveValue !== undefined ? this.isUniqueCaseSensitiveValue : _settings__WEBPACK_IMPORTED_MODULE_9__[\"settings\"].comparator.caseSensitive;\n        },\n        set: function (val) {\n            this.isUniqueCaseSensitiveValue = val;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"detailPanelMode\", {\n        /**\n         * Specifies the location of detail sections.\n         *\n         * Possible values:\n         *\n         * - `\"underRow\"` - Displays detail sections under their respective rows. Users can expand any number of detail sections.\n         * - `\"underRowSingle\"` - Displays detail sections under their respective rows, but only one detail section can be expanded at a time.\n         * - `\"none\"` (default) - Hides detail sections.\n         *\n         * Use the `detailElements` property to specify content of detail sections.\n         * @see detailElements\n         * @see detailPanel\n         */\n        get: function () {\n            return this.getPropertyValue(\"detailPanelMode\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"detailPanelMode\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"detailPanel\", {\n        /**\n         * Contains a [`PanelModel`](https://surveyjs.io/form-library/documentation/panelmodel) instance that represents a detail section template.\n         * @see detailElements\n         * @see detailPanelMode\n         */\n        get: function () {\n            return this.detailPanelValue;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionMatrixDropdownModelBase.prototype.getPanel = function () {\n        return this.detailPanel;\n    };\n    Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"detailElements\", {\n        /**\n         * An array of survey elements (questions and panels) to be displayed in detail sections.\n         *\n         * Detail sections are expandable panels displayed under each matrix row. You can use them to display questions that do not fit into the row.\n         *\n         * Set the `detailPanelMode` property to `\"underRow\"` or `\"underRowSingle\"` to display detail sections.\n         * @see detailPanelMode\n         * @see detailPanel\n         */\n        get: function () {\n            return this.detailPanel.elements;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionMatrixDropdownModelBase.prototype.createNewDetailPanel = function () {\n        return _jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].createClass(\"panel\");\n    };\n    Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"hasRowText\", {\n        get: function () {\n            return true;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionMatrixDropdownModelBase.prototype.getFooterText = function () {\n        return null;\n    };\n    Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"canAddRow\", {\n        get: function () {\n            return false;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"canRemoveRows\", {\n        get: function () {\n            return false;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionMatrixDropdownModelBase.prototype.canRemoveRow = function (row) {\n        return true;\n    };\n    QuestionMatrixDropdownModelBase.prototype.onPointerDown = function (pointerDownEvent, row) { };\n    QuestionMatrixDropdownModelBase.prototype.onRowsChanged = function () {\n        this.resetRenderedTable();\n        _super.prototype.onRowsChanged.call(this);\n    };\n    QuestionMatrixDropdownModelBase.prototype.onStartRowAddingRemoving = function () {\n        this.lockResetRenderedTable = true;\n        this.setValueChangedDirectly();\n    };\n    QuestionMatrixDropdownModelBase.prototype.onEndRowAdding = function () {\n        this.lockResetRenderedTable = false;\n        if (!this.renderedTable)\n            return;\n        if (this.renderedTable.isRequireReset()) {\n            this.resetRenderedTable();\n        }\n        else {\n            var index = this.visibleRows.length - 1;\n            this.renderedTable.onAddedRow(this.visibleRows[index], index);\n        }\n    };\n    QuestionMatrixDropdownModelBase.prototype.onEndRowRemoving = function (row) {\n        this.lockResetRenderedTable = false;\n        if (this.renderedTable.isRequireReset()) {\n            this.resetRenderedTable();\n        }\n        else {\n            if (!!row) {\n                this.renderedTable.onRemovedRow(row);\n            }\n        }\n    };\n    Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"renderedTableValue\", {\n        get: function () {\n            return this.getPropertyValue(\"renderedTable\", null);\n        },\n        set: function (val) {\n            this.setPropertyValue(\"renderedTable\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionMatrixDropdownModelBase.prototype.clearRowsAndResetRenderedTable = function () {\n        this.clearGeneratedRows();\n        this.resetRenderedTable();\n        this.fireCallback(this.columnsChangedCallback);\n    };\n    QuestionMatrixDropdownModelBase.prototype.resetRenderedTable = function () {\n        if (this.lockResetRenderedTable || this.isUpdateLocked)\n            return;\n        this.renderedTableValue = null;\n        this.fireCallback(this.onRenderedTableResetCallback);\n    };\n    QuestionMatrixDropdownModelBase.prototype.clearGeneratedRows = function () {\n        if (!this.generatedVisibleRows)\n            return;\n        for (var i = 0; i < this.generatedVisibleRows.length; i++) {\n            this.generatedVisibleRows[i].dispose();\n        }\n        _super.prototype.clearGeneratedRows.call(this);\n    };\n    Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"isRendredTableCreated\", {\n        get: function () {\n            return !!this.renderedTableValue;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"renderedTable\", {\n        get: function () {\n            if (!this.renderedTableValue) {\n                this.renderedTableValue = this.createRenderedTable();\n                if (!!this.onRenderedTableCreatedCallback) {\n                    this.onRenderedTableCreatedCallback(this.renderedTableValue);\n                }\n            }\n            return this.renderedTableValue;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionMatrixDropdownModelBase.prototype.createRenderedTable = function () {\n        return new _question_matrixdropdownrendered__WEBPACK_IMPORTED_MODULE_13__[\"QuestionMatrixDropdownRenderedTable\"](this);\n    };\n    QuestionMatrixDropdownModelBase.prototype.onMatrixRowCreated = function (row) {\n        if (!this.survey)\n            return;\n        var options = {\n            rowValue: row.value,\n            row: row,\n            column: null,\n            columnName: null,\n            cell: null,\n            cellQuestion: null,\n            value: null,\n        };\n        for (var i = 0; i < this.visibleColumns.length; i++) {\n            options.column = this.visibleColumns[i];\n            options.columnName = options.column.name;\n            var cell = row.cells[i];\n            options.cell = cell;\n            options.cellQuestion = cell.question;\n            options.value = cell.value;\n            if (!!this.onCellCreatedCallback) {\n                this.onCellCreatedCallback(options);\n            }\n            this.survey.matrixCellCreated(this, options);\n        }\n    };\n    Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"cellType\", {\n        /**\n         * Specifies the type of matrix cells. You can override this property for individual columns.\n         *\n         * Possible values:\n         *\n         * - `\"dropdown\"`\n         * - `\"checkbox\"`\n         * - `\"radiogroup\"`\n         * - `\"text\"`\n         * - `\"comment\"`\n         * - `\"boolean\"`\n         * - `\"expression\"`\n         * - `\"rating\"`\n         *\n         * Default value: `\"dropdown\"` (inherited from [`settings.matrix.defaultCellType`](https://surveyjs.io/form-library/documentation/settings#matrixDefaultCellType))\n         */\n        get: function () {\n            return this.getPropertyValue(\"cellType\", _settings__WEBPACK_IMPORTED_MODULE_9__[\"settings\"].matrix.defaultCellType);\n        },\n        set: function (val) {\n            val = val.toLowerCase();\n            this.setPropertyValue(\"cellType\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionMatrixDropdownModelBase.prototype.updateColumnsCellType = function () {\n        for (var i = 0; i < this.columns.length; i++) {\n            this.columns[i].defaultCellTypeChanged();\n        }\n    };\n    QuestionMatrixDropdownModelBase.prototype.updateColumnsIndexes = function (cols) {\n        for (var i = 0; i < cols.length; i++) {\n            cols[i].setIndex(i);\n        }\n    };\n    Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"columnColCount\", {\n        /**\n         * Specifies the number of columns in Radiogroup and Checkbox cells.\n         *\n         * Default value: 0 (the number of columns is selected automatically based on the available column width)\n         * @see cellType\n         */\n        get: function () {\n            return this.getPropertyValue(\"columnColCount\");\n        },\n        set: function (value) {\n            if (value < 0 || value > 4)\n                return;\n            this.setPropertyValue(\"columnColCount\", value);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"horizontalScroll\", {\n        get: function () {\n            return this.getPropertyValue(\"horizontalScroll\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"horizontalScroll\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"allowAdaptiveActions\", {\n        get: function () {\n            return this.getPropertyValue(\"allowAdaptiveActions\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"allowAdaptiveActions\", val);\n            if (!!this.detailPanel) {\n                this.detailPanel.allowAdaptiveActions = val;\n            }\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionMatrixDropdownModelBase.prototype.getRequiredText = function () {\n        return this.survey ? this.survey.requiredText : \"\";\n    };\n    QuestionMatrixDropdownModelBase.prototype.hasChoices = function () {\n        return this.choices.length > 0;\n    };\n    QuestionMatrixDropdownModelBase.prototype.onColumnPropertyChanged = function (column, name, newValue) {\n        this.updateHasFooter();\n        if (!this.generatedVisibleRows)\n            return;\n        for (var i = 0; i < this.generatedVisibleRows.length; i++) {\n            this.generatedVisibleRows[i].updateCellQuestionOnColumnChanged(column, name, newValue);\n        }\n        if (!!this.generatedTotalRow) {\n            this.generatedTotalRow.updateCellQuestionOnColumnChanged(column, name, newValue);\n        }\n        this.onColumnsChanged();\n        if (name == \"isRequired\") {\n            this.resetRenderedTable();\n        }\n    };\n    QuestionMatrixDropdownModelBase.prototype.onColumnItemValuePropertyChanged = function (column, propertyName, obj, name, newValue, oldValue) {\n        if (!this.generatedVisibleRows)\n            return;\n        for (var i = 0; i < this.generatedVisibleRows.length; i++) {\n            this.generatedVisibleRows[i].updateCellQuestionOnColumnItemValueChanged(column, propertyName, obj, name, newValue, oldValue);\n        }\n    };\n    QuestionMatrixDropdownModelBase.prototype.onShowInMultipleColumnsChanged = function (column) {\n        this.resetTableAndRows();\n    };\n    QuestionMatrixDropdownModelBase.prototype.onColumnVisibilityChanged = function (column) {\n        this.resetTableAndRows();\n    };\n    QuestionMatrixDropdownModelBase.prototype.onColumnCellTypeChanged = function (column) {\n        this.resetTableAndRows();\n    };\n    QuestionMatrixDropdownModelBase.prototype.resetTableAndRows = function () {\n        this.clearGeneratedRows();\n        this.resetRenderedTable();\n    };\n    QuestionMatrixDropdownModelBase.prototype.getRowTitleWidth = function () {\n        return \"\";\n    };\n    Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"hasFooter\", {\n        get: function () {\n            return this.getPropertyValue(\"hasFooter\", false);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionMatrixDropdownModelBase.prototype.getAddRowLocation = function () {\n        return \"default\";\n    };\n    QuestionMatrixDropdownModelBase.prototype.getShowColumnsIfEmpty = function () {\n        return false;\n    };\n    QuestionMatrixDropdownModelBase.prototype.updateShowTableAndAddRow = function () {\n        if (!!this.renderedTable) {\n            this.renderedTable.updateShowTableAndAddRow();\n        }\n    };\n    QuestionMatrixDropdownModelBase.prototype.updateHasFooter = function () {\n        this.setPropertyValue(\"hasFooter\", this.hasTotal);\n    };\n    Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"hasTotal\", {\n        get: function () {\n            for (var i = 0; i < this.columns.length; i++) {\n                if (this.columns[i].hasTotal)\n                    return true;\n            }\n            return false;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionMatrixDropdownModelBase.prototype.getCellType = function () {\n        return this.cellType;\n    };\n    QuestionMatrixDropdownModelBase.prototype.getCustomCellType = function (column, row, cellType) {\n        if (!this.survey)\n            return cellType;\n        var options = {\n            rowValue: row.value,\n            row: row,\n            column: column,\n            columnName: column.name,\n            cellType: cellType\n        };\n        this.survey.matrixCellCreating(this, options);\n        return options.cellType;\n    };\n    QuestionMatrixDropdownModelBase.prototype.getConditionJson = function (operator, path) {\n        if (operator === void 0) { operator = null; }\n        if (path === void 0) { path = null; }\n        if (!path)\n            return _super.prototype.getConditionJson.call(this);\n        var columnName = \"\";\n        for (var i = path.length - 1; i >= 0; i--) {\n            if (path[i] == \".\")\n                break;\n            columnName = path[i] + columnName;\n        }\n        var column = this.getColumnByName(columnName);\n        if (!column)\n            return null;\n        var question = column.createCellQuestion(null);\n        if (!question)\n            return null;\n        return question.getConditionJson(operator);\n    };\n    QuestionMatrixDropdownModelBase.prototype.clearIncorrectValues = function () {\n        var rows = this.visibleRows;\n        if (!rows)\n            return;\n        for (var i = 0; i < rows.length; i++) {\n            rows[i].clearIncorrectValues(this.getRowValue(i));\n        }\n    };\n    QuestionMatrixDropdownModelBase.prototype.clearErrors = function () {\n        _super.prototype.clearErrors.call(this);\n        this.runFuncForCellQuestions(function (q) { q.clearErrors(); });\n    };\n    QuestionMatrixDropdownModelBase.prototype.localeChanged = function () {\n        _super.prototype.localeChanged.call(this);\n        this.runFuncForCellQuestions(function (q) { q.localeChanged(); });\n    };\n    QuestionMatrixDropdownModelBase.prototype.runFuncForCellQuestions = function (func) {\n        if (!!this.generatedVisibleRows) {\n            for (var i = 0; i < this.generatedVisibleRows.length; i++) {\n                var row = this.generatedVisibleRows[i];\n                for (var j = 0; j < row.cells.length; j++) {\n                    func(row.cells[j].question);\n                }\n            }\n        }\n    };\n    QuestionMatrixDropdownModelBase.prototype.runCondition = function (values, properties) {\n        _super.prototype.runCondition.call(this, values, properties);\n        var counter = 0;\n        var prevTotalValue;\n        do {\n            prevTotalValue = _helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].getUnbindValue(this.totalValue);\n            this.runCellsCondition(values, properties);\n            this.runTotalsCondition(values, properties);\n            counter++;\n        } while (!_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isTwoValueEquals(prevTotalValue, this.totalValue) &&\n            counter < 3);\n    };\n    QuestionMatrixDropdownModelBase.prototype.runTriggers = function (name, value) {\n        _super.prototype.runTriggers.call(this, name, value);\n        this.runFuncForCellQuestions(function (q) { q.runTriggers(name, value); });\n    };\n    QuestionMatrixDropdownModelBase.prototype.shouldRunColumnExpression = function () {\n        return false;\n    };\n    QuestionMatrixDropdownModelBase.prototype.runCellsCondition = function (values, properties) {\n        if (!this.generatedVisibleRows)\n            return;\n        var newValues = this.getRowConditionValues(values);\n        var rows = this.generatedVisibleRows;\n        for (var i = 0; i < rows.length; i++) {\n            rows[i].runCondition(newValues, properties);\n        }\n        this.checkColumnsVisibility();\n        this.checkColumnsRenderedRequired();\n    };\n    QuestionMatrixDropdownModelBase.prototype.checkColumnsVisibility = function () {\n        if (this.isDesignMode)\n            return;\n        var hasChanged = false;\n        for (var i = 0; i < this.visibleColumns.length; i++) {\n            var column = this.visibleColumns[i];\n            if (!column.visibleIf && !column.isFilteredMultipleColumns)\n                continue;\n            hasChanged = this.isColumnVisibilityChanged(column) || hasChanged;\n        }\n        if (hasChanged) {\n            this.resetRenderedTable();\n        }\n    };\n    QuestionMatrixDropdownModelBase.prototype.checkColumnsRenderedRequired = function () {\n        var rows = this.generatedVisibleRows;\n        for (var i = 0; i < this.visibleColumns.length; i++) {\n            var column = this.visibleColumns[i];\n            if (!column.requiredIf)\n                continue;\n            var required = rows.length > 0;\n            for (var j = 0; j < rows.length; j++) {\n                if (!rows[j].cells[i].question.isRequired) {\n                    required = false;\n                    break;\n                }\n            }\n            column.updateIsRenderedRequired(required);\n        }\n    };\n    QuestionMatrixDropdownModelBase.prototype.isColumnVisibilityChanged = function (column) {\n        var curVis = column.isColumnVisible;\n        var isMultipleColumnsVisibility = column.isFilteredMultipleColumns;\n        var curVisibleChoices = isMultipleColumnsVisibility ? column.getVisibleChoicesInCell : [];\n        var newVisibleChoices = new Array();\n        var hasVisCell = false;\n        var rows = this.generatedVisibleRows;\n        for (var i = 0; i < rows.length; i++) {\n            var cell = rows[i].cells[column.index];\n            var q = cell === null || cell === void 0 ? void 0 : cell.question;\n            if (!!q && q.isVisible) {\n                hasVisCell = true;\n                if (isMultipleColumnsVisibility) {\n                    this.updateNewVisibleChoices(q, newVisibleChoices);\n                }\n                else\n                    break;\n            }\n        }\n        column.hasVisibleCell = hasVisCell;\n        if (isMultipleColumnsVisibility) {\n            column.setVisibleChoicesInCell(newVisibleChoices);\n            if (!_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isArraysEqual(curVisibleChoices, newVisibleChoices, true, false, false))\n                return true;\n        }\n        return curVis != column.isVisible;\n    };\n    QuestionMatrixDropdownModelBase.prototype.updateNewVisibleChoices = function (q, dest) {\n        var choices = q.visibleChoices;\n        if (!Array.isArray(choices))\n            return;\n        for (var i = 0; i < choices.length; i++) {\n            var ch = choices[i];\n            if (dest.indexOf(ch.value) < 0)\n                dest.push(ch.value);\n        }\n    };\n    QuestionMatrixDropdownModelBase.prototype.runTotalsCondition = function (values, properties) {\n        if (!this.generatedTotalRow)\n            return;\n        this.generatedTotalRow.runCondition(this.getRowConditionValues(values), properties);\n    };\n    QuestionMatrixDropdownModelBase.prototype.getRowConditionValues = function (values) {\n        var newValues = values;\n        if (!newValues)\n            newValues = {};\n        /*\n        var newValues: { [index: string]: any } = {};\n        if (values && values instanceof Object) {\n          newValues = JSON.parse(JSON.stringify(values));\n        }\n        */\n        var totalRow = {};\n        if (!this.isValueEmpty(this.totalValue)) {\n            totalRow = JSON.parse(JSON.stringify(this.totalValue));\n        }\n        newValues[\"row\"] = {};\n        newValues[\"totalRow\"] = totalRow;\n        return newValues;\n    };\n    QuestionMatrixDropdownModelBase.prototype.IsMultiplyColumn = function (column) {\n        return column.isShowInMultipleColumns && !this.isMobile;\n    };\n    QuestionMatrixDropdownModelBase.prototype.locStrsChanged = function () {\n        _super.prototype.locStrsChanged.call(this);\n        var columns = this.columns;\n        for (var i = 0; i < columns.length; i++) {\n            columns[i].locStrsChanged();\n        }\n        var rows = this.generatedVisibleRows;\n        if (!rows)\n            return;\n        for (var i = 0; i < rows.length; i++) {\n            rows[i].locStrsChanged();\n        }\n        if (!!this.generatedTotalRow) {\n            this.generatedTotalRow.locStrsChanged();\n        }\n    };\n    /**\n     * Returns a matrix column with a given `name` or `null` if a column with this is not found.\n     * @param columnName A column name.\n     */\n    QuestionMatrixDropdownModelBase.prototype.getColumnByName = function (columnName) {\n        for (var i = 0; i < this.columns.length; i++) {\n            if (this.columns[i].name == columnName)\n                return this.columns[i];\n        }\n        return null;\n    };\n    QuestionMatrixDropdownModelBase.prototype.getColumnName = function (columnName) {\n        return this.getColumnByName(columnName);\n    };\n    QuestionMatrixDropdownModelBase.prototype.getColumnWidth = function (column) {\n        var _a;\n        return column.minWidth ? column.minWidth : this.columnMinWidth ? this.columnMinWidth : (((_a = _settings__WEBPACK_IMPORTED_MODULE_9__[\"settings\"].matrix.columnWidthsByType[column.cellType]) === null || _a === void 0 ? void 0 : _a.minWidth) || \"\");\n    };\n    Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"choices\", {\n        /**\n         * Gets or sets choice items for Dropdown, Checkbox, and Radiogroup matrix cells. You can override this property for individual columns.\n         *\n         * This property accepts an array of objects with the following structure:\n         *\n         * ```js\n         * {\n         *   \"value\": any, // A value to be saved in survey results\n         *   \"text\": String, // A display text. This property supports Markdown. When `text` is undefined, `value` is used.\n         *   \"customProperty\": any // Any property that you find useful.\n         * }\n         * ```\n         *\n         * To enable Markdown support for the `text` property, implement Markdown-to-HTML conversion in the [onTextMarkdown](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#onTextMarkdown) event handler. For an example, refer to the following demo: [Convert Markdown to HTML with Showdown](https://surveyjs.io/form-library/examples/edit-survey-questions-markdown/).\n         *\n         * If you add custom properties, refer to the following help topic to learn how to serialize them into JSON: [Add Custom Properties to Property Grid](https://surveyjs.io/survey-creator/documentation/property-grid#add-custom-properties-to-the-property-grid).\n         *\n         * If you need to specify only the `value` property, you can set the `choices` property to an array of primitive values, for example, `[ \"item1\", \"item2\", \"item3\" ]`. These values are both saved in survey results and used as display text.\n         * @see cellType\n         */\n        get: function () {\n            return this.getPropertyValue(\"choices\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"choices\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"placeholder\", {\n        /**\n         * A placeholder for Dropdown matrix cells.\n         * @see cellType\n         */\n        get: function () {\n            return this.getLocalizableStringText(\"placeholder\");\n        },\n        set: function (val) {\n            this.setLocalizableStringText(\"placeholder\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"locPlaceholder\", {\n        get: function () {\n            return this.getLocalizableString(\"placeholder\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"optionsCaption\", {\n        get: function () {\n            return this.placeholder;\n        },\n        set: function (val) {\n            this.placeholder = val;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"keyDuplicationError\", {\n        /**\n         * An error message displayed when users enter a duplicate value into a column that accepts only unique values (`isUnique` is set to `true` or `keyName` is specified).\n         *\n         * A default value for this property is taken from a [localization dictionary](https://github.com/surveyjs/survey-library/tree/master/src/localization). Refer to the following help topic for more information: [Localization & Globalization](https://surveyjs.io/form-library/documentation/localization).\n         * @see isUniqueCaseSensitive\n         */\n        get: function () {\n            return this.getLocalizableStringText(\"keyDuplicationError\");\n        },\n        set: function (val) {\n            this.setLocalizableStringText(\"keyDuplicationError\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"locKeyDuplicationError\", {\n        get: function () {\n            return this.getLocalizableString(\"keyDuplicationError\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"storeOthersAsComment\", {\n        get: function () {\n            return !!this.survey ? this.survey.storeOthersAsComment : false;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionMatrixDropdownModelBase.prototype.addColumn = function (name, title) {\n        if (title === void 0) { title = null; }\n        var column = new _question_matrixdropdowncolumn__WEBPACK_IMPORTED_MODULE_12__[\"MatrixDropdownColumn\"](name, title);\n        this.columns.push(column);\n        return column;\n    };\n    QuestionMatrixDropdownModelBase.prototype.getVisibleRows = function () {\n        var _this = this;\n        if (this.isUpdateLocked)\n            return null;\n        if (!this.generatedVisibleRows) {\n            this.generatedVisibleRows = this.generateRows();\n            this.generatedVisibleRows.forEach(function (row) { return _this.onMatrixRowCreated(row); });\n            if (this.data) {\n                this.runCellsCondition(this.data.getFilteredValues(), this.data.getFilteredProperties());\n            }\n            this.updateValueOnRowsGeneration(this.generatedVisibleRows);\n            this.updateIsAnswered();\n        }\n        return this.generatedVisibleRows;\n    };\n    QuestionMatrixDropdownModelBase.prototype.updateValueOnRowsGeneration = function (rows) {\n        var oldValue = this.createNewValue(true);\n        var newValue = this.createNewValue();\n        for (var i = 0; i < rows.length; i++) {\n            var row = rows[i];\n            if (!!row.editingObj)\n                continue;\n            var rowValue = this.getRowValue(i);\n            var rValue = row.value;\n            if (this.isTwoValueEquals(rowValue, rValue))\n                continue;\n            newValue = this.getNewValueOnRowChanged(row, \"\", rValue, false, newValue)\n                .value;\n        }\n        if (this.isTwoValueEquals(oldValue, newValue))\n            return;\n        this.isRowChanging = true;\n        this.setNewValue(newValue);\n        this.isRowChanging = false;\n    };\n    Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"totalValue\", {\n        get: function () {\n            if (!this.hasTotal || !this.visibleTotalRow)\n                return {};\n            return this.visibleTotalRow.value;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionMatrixDropdownModelBase.prototype.getVisibleTotalRow = function () {\n        if (this.isUpdateLocked)\n            return null;\n        if (this.hasTotal) {\n            if (!this.generatedTotalRow) {\n                this.generatedTotalRow = this.generateTotalRow();\n                if (this.data) {\n                    var properties = { survey: this.survey };\n                    this.runTotalsCondition(this.data.getAllValues(), properties);\n                }\n            }\n        }\n        else {\n            this.generatedTotalRow = null;\n        }\n        return this.generatedTotalRow;\n    };\n    Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"visibleTotalRow\", {\n        get: function () {\n            return this.getVisibleTotalRow();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionMatrixDropdownModelBase.prototype.onSurveyLoad = function () {\n        _super.prototype.onSurveyLoad.call(this);\n        this.updateColumnsIndexes(this.columns);\n        this.clearGeneratedRows();\n        this.generatedTotalRow = null;\n        this.updateHasFooter();\n    };\n    /**\n     * Returns an object with row values. If a row has no answers, this method returns an empty object.\n     * @param rowIndex A zero-based row index.\n     * @see setRowValue\n     */\n    QuestionMatrixDropdownModelBase.prototype.getRowValue = function (rowIndex) {\n        if (rowIndex < 0)\n            return null;\n        var visRows = this.visibleRows;\n        if (rowIndex >= visRows.length)\n            return null;\n        var newValue = this.createNewValue();\n        return this.getRowValueCore(visRows[rowIndex], newValue);\n    };\n    QuestionMatrixDropdownModelBase.prototype.checkIfValueInRowDuplicated = function (checkedRow, cellQuestion) {\n        if (!this.generatedVisibleRows)\n            return false;\n        var res = false;\n        for (var i = 0; i < this.generatedVisibleRows.length; i++) {\n            var row = this.generatedVisibleRows[i];\n            if (checkedRow === row)\n                continue;\n            if (_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isTwoValueEquals(row.getValue(cellQuestion.name), cellQuestion.value, true, this.isUniqueCaseSensitive)) {\n                res = true;\n                break;\n            }\n        }\n        if (res) {\n            this.addDuplicationError(cellQuestion);\n        }\n        else {\n            cellQuestion.clearErrors();\n        }\n        return res;\n    };\n    /**\n     * Assigns values to a row.\n     * @param rowIndex A zero-based row index.\n     * @param rowValue An object with the following structure: `{ \"column_name\": columnValue, ... }`\n     * @see getRowValue\n     */\n    QuestionMatrixDropdownModelBase.prototype.setRowValue = function (rowIndex, rowValue) {\n        if (rowIndex < 0)\n            return null;\n        var visRows = this.visibleRows;\n        if (rowIndex >= visRows.length)\n            return null;\n        visRows[rowIndex].value = rowValue;\n        this.onRowChanged(visRows[rowIndex], \"\", rowValue, false);\n    };\n    QuestionMatrixDropdownModelBase.prototype.generateRows = function () {\n        return null;\n    };\n    QuestionMatrixDropdownModelBase.prototype.generateTotalRow = function () {\n        return new MatrixDropdownTotalRowModel(this);\n    };\n    QuestionMatrixDropdownModelBase.prototype.createNewValue = function (nullOnEmpty) {\n        if (nullOnEmpty === void 0) { nullOnEmpty = false; }\n        var res = !this.value ? {} : this.createValueCopy();\n        if (nullOnEmpty && this.isMatrixValueEmpty(res))\n            return null;\n        return res;\n    };\n    QuestionMatrixDropdownModelBase.prototype.getRowValueCore = function (row, questionValue, create) {\n        if (create === void 0) { create = false; }\n        var result = !!questionValue && !!questionValue[row.rowName]\n            ? questionValue[row.rowName]\n            : null;\n        if (!result && create) {\n            result = {};\n            if (!!questionValue) {\n                questionValue[row.rowName] = result;\n            }\n        }\n        return result;\n    };\n    QuestionMatrixDropdownModelBase.prototype.getRowObj = function (row) {\n        var obj = this.getRowValueCore(row, this.value);\n        return !!obj && !!obj.getType ? obj : null;\n    };\n    QuestionMatrixDropdownModelBase.prototype.getRowDisplayValue = function (keysAsText, row, rowValue) {\n        if (!rowValue)\n            return rowValue;\n        if (!!row.editingObj)\n            return rowValue;\n        var keys = Object.keys(rowValue);\n        for (var i = 0; i < keys.length; i++) {\n            var key = keys[i];\n            var question = row.getQuestionByName(key);\n            if (!question) {\n                question = this.getSharedQuestionByName(key, row);\n            }\n            if (!!question) {\n                var displayvalue = question.getDisplayValue(keysAsText, rowValue[key]);\n                if (keysAsText && !!question.title && question.title !== key) {\n                    rowValue[question.title] = displayvalue;\n                    delete rowValue[key];\n                }\n                else {\n                    rowValue[key] = displayvalue;\n                }\n            }\n        }\n        return rowValue;\n    };\n    QuestionMatrixDropdownModelBase.prototype.getPlainData = function (options) {\n        var _this = this;\n        if (options === void 0) { options = { includeEmpty: true }; }\n        var questionPlainData = _super.prototype.getPlainData.call(this, options);\n        if (!!questionPlainData) {\n            questionPlainData.isNode = true;\n            questionPlainData.data = this.visibleRows.map(function (row) {\n                var rowDataItem = {\n                    name: row.rowName,\n                    title: row.text,\n                    value: row.value,\n                    displayValue: _this.getRowDisplayValue(false, row, row.value),\n                    getString: function (val) {\n                        return typeof val === \"object\" ? JSON.stringify(val) : val;\n                    },\n                    isNode: true,\n                    data: row.cells\n                        .map(function (cell) {\n                        return cell.question.getPlainData(options);\n                    })\n                        .filter(function (d) { return !!d; }),\n                };\n                (options.calculations || []).forEach(function (calculation) {\n                    rowDataItem[calculation.propertyName] = row[calculation.propertyName];\n                });\n                return rowDataItem;\n            });\n        }\n        return questionPlainData;\n    };\n    QuestionMatrixDropdownModelBase.prototype.addConditionObjectsByContext = function (objects, context) {\n        var hasContext = !!context ? context === true || this.columns.indexOf(context) > -1 : false;\n        var rowsIndeces = this.getConditionObjectsRowIndeces();\n        if (hasContext) {\n            rowsIndeces.push(-1);\n        }\n        for (var i = 0; i < rowsIndeces.length; i++) {\n            var index = rowsIndeces[i];\n            var rowName = index > -1 ? this.getConditionObjectRowName(index) : \"row\";\n            if (!rowName)\n                continue;\n            var rowText = index > -1 ? this.getConditionObjectRowText(index) : \"row\";\n            var hasQuestionPrefix = index > -1 || context === true;\n            var dot = hasQuestionPrefix && index === -1 ? \".\" : \"\";\n            var prefixName = (hasQuestionPrefix ? this.getValueName() : \"\") + dot + rowName + \".\";\n            var prefixTitle = (hasQuestionPrefix ? this.processedTitle : \"\") + dot + rowText + \".\";\n            for (var j = 0; j < this.columns.length; j++) {\n                var column = this.columns[j];\n                if (index === -1 && context === column)\n                    continue;\n                var obj = {\n                    name: prefixName + column.name,\n                    text: prefixTitle + column.fullTitle,\n                    question: this\n                };\n                if (index === -1 && context === true) {\n                    obj.context = this;\n                }\n                objects.push(obj);\n            }\n        }\n    };\n    QuestionMatrixDropdownModelBase.prototype.onHidingContent = function () {\n        _super.prototype.onHidingContent.call(this);\n        var questions = [];\n        this.collectNestedQuestions(questions, true);\n        questions.forEach(function (q) { return q.onHidingContent(); });\n    };\n    QuestionMatrixDropdownModelBase.prototype.getIsReadyNestedQuestions = function () {\n        if (!this.generatedVisibleRows)\n            return [];\n        var res = new Array();\n        this.collectNestedQuestonsInRows(this.generatedVisibleRows, res, false);\n        if (!!this.generatedTotalRow) {\n            this.collectNestedQuestonsInRows([this.generatedTotalRow], res, false);\n        }\n        return res;\n    };\n    QuestionMatrixDropdownModelBase.prototype.collectNestedQuestionsCore = function (questions, visibleOnly) {\n        this.collectNestedQuestonsInRows(this.visibleRows, questions, visibleOnly);\n    };\n    QuestionMatrixDropdownModelBase.prototype.collectNestedQuestonsInRows = function (rows, questions, visibleOnly) {\n        rows.forEach(function (row) {\n            row.questions.forEach(function (q) { return q.collectNestedQuestions(questions, visibleOnly); });\n        });\n    };\n    QuestionMatrixDropdownModelBase.prototype.getConditionObjectRowName = function (index) {\n        return \"\";\n    };\n    QuestionMatrixDropdownModelBase.prototype.getConditionObjectRowText = function (index) {\n        return this.getConditionObjectRowName(index);\n    };\n    QuestionMatrixDropdownModelBase.prototype.getConditionObjectsRowIndeces = function () {\n        return [];\n    };\n    QuestionMatrixDropdownModelBase.prototype.getProgressInfo = function () {\n        if (!!this.generatedVisibleRows)\n            return _survey_element__WEBPACK_IMPORTED_MODULE_4__[\"SurveyElement\"].getProgressInfoByElements(this.getCellQuestions(), this.isRequired);\n        var res = _base__WEBPACK_IMPORTED_MODULE_3__[\"Base\"].createProgressInfo();\n        this.updateProgressInfoByValues(res);\n        if (res.requiredQuestionCount === 0 && this.isRequired) {\n            res.requiredQuestionCount = 1;\n            res.requiredAnsweredQuestionCount = !this.isEmpty() ? 1 : 0;\n        }\n        return res;\n    };\n    QuestionMatrixDropdownModelBase.prototype.updateProgressInfoByValues = function (res) { };\n    QuestionMatrixDropdownModelBase.prototype.updateProgressInfoByRow = function (res, rowValue) {\n        for (var i = 0; i < this.columns.length; i++) {\n            var col = this.columns[i];\n            if (!col.templateQuestion.hasInput)\n                continue;\n            res.questionCount += 1;\n            res.requiredQuestionCount += col.isRequired;\n            var hasValue = !_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(rowValue[col.name]);\n            res.answeredQuestionCount += hasValue ? 1 : 0;\n            res.requiredAnsweredQuestionCount += hasValue && col.isRequired ? 1 : 0;\n        }\n    };\n    QuestionMatrixDropdownModelBase.prototype.getCellQuestions = function () {\n        var res = [];\n        this.runFuncForCellQuestions(function (q) { res.push(q); });\n        return res;\n    };\n    QuestionMatrixDropdownModelBase.prototype.onBeforeValueChanged = function (val) { };\n    QuestionMatrixDropdownModelBase.prototype.onSetQuestionValue = function () {\n        if (this.isRowChanging)\n            return;\n        this.onBeforeValueChanged(this.value);\n        if (!this.generatedVisibleRows || this.generatedVisibleRows.length == 0)\n            return;\n        this.isRowChanging = true;\n        var val = this.createNewValue();\n        for (var i = 0; i < this.generatedVisibleRows.length; i++) {\n            var row = this.generatedVisibleRows[i];\n            this.generatedVisibleRows[i].value = this.getRowValueCore(row, val);\n        }\n        this.isRowChanging = false;\n    };\n    QuestionMatrixDropdownModelBase.prototype.setQuestionValue = function (newValue) {\n        _super.prototype.setQuestionValue.call(this, newValue, false);\n        this.onSetQuestionValue();\n        this.updateIsAnswered();\n    };\n    QuestionMatrixDropdownModelBase.prototype.supportGoNextPageAutomatic = function () {\n        var rows = this.generatedVisibleRows;\n        if (!rows)\n            rows = this.visibleRows;\n        if (!rows)\n            return true;\n        for (var i = 0; i < rows.length; i++) {\n            var cells = this.generatedVisibleRows[i].cells;\n            if (!cells)\n                continue;\n            for (var colIndex = 0; colIndex < cells.length; colIndex++) {\n                var question = cells[colIndex].question;\n                if (question &&\n                    (!question.supportGoNextPageAutomatic() || !question.value))\n                    return false;\n            }\n        }\n        return true;\n    };\n    QuestionMatrixDropdownModelBase.prototype.getContainsErrors = function () {\n        return (_super.prototype.getContainsErrors.call(this) ||\n            this.checkForAnswersOrErrors(function (question) { return question.containsErrors; }, false));\n    };\n    QuestionMatrixDropdownModelBase.prototype.getIsAnswered = function () {\n        return (_super.prototype.getIsAnswered.call(this) &&\n            this.checkForAnswersOrErrors(function (question) { return question.isAnswered; }, true));\n    };\n    QuestionMatrixDropdownModelBase.prototype.checkForAnswersOrErrors = function (predicate, every) {\n        if (every === void 0) { every = false; }\n        var rows = this.generatedVisibleRows;\n        if (!rows)\n            return false;\n        for (var i = 0; i < rows.length; i++) {\n            var cells = rows[i].cells;\n            if (!cells)\n                continue;\n            for (var colIndex = 0; colIndex < cells.length; colIndex++) {\n                if (!cells[colIndex])\n                    continue;\n                var question = cells[colIndex].question;\n                if (question && question.isVisible)\n                    if (predicate(question)) {\n                        if (!every)\n                            return true;\n                    }\n                    else {\n                        if (every)\n                            return false;\n                    }\n            }\n        }\n        return every ? true : false;\n    };\n    QuestionMatrixDropdownModelBase.prototype.hasErrors = function (fireCallback, rec) {\n        if (fireCallback === void 0) { fireCallback = true; }\n        if (rec === void 0) { rec = null; }\n        var errosInRows = this.hasErrorInRows(fireCallback, rec);\n        var isDuplicated = this.isValueDuplicated();\n        return _super.prototype.hasErrors.call(this, fireCallback, rec) || errosInRows || isDuplicated;\n    };\n    QuestionMatrixDropdownModelBase.prototype.getIsRunningValidators = function () {\n        if (_super.prototype.getIsRunningValidators.call(this))\n            return true;\n        if (!this.generatedVisibleRows)\n            return false;\n        for (var i = 0; i < this.generatedVisibleRows.length; i++) {\n            var cells = this.generatedVisibleRows[i].cells;\n            if (!cells)\n                continue;\n            for (var colIndex = 0; colIndex < cells.length; colIndex++) {\n                if (!cells[colIndex])\n                    continue;\n                var question = cells[colIndex].question;\n                if (!!question && question.isRunningValidators)\n                    return true;\n            }\n        }\n        return false;\n    };\n    QuestionMatrixDropdownModelBase.prototype.getAllErrors = function () {\n        var result = _super.prototype.getAllErrors.call(this);\n        var rows = this.generatedVisibleRows;\n        if (rows === null)\n            return result;\n        for (var i = 0; i < rows.length; i++) {\n            var row = rows[i];\n            for (var j = 0; j < row.cells.length; j++) {\n                var errors = row.cells[j].question.getAllErrors();\n                if (errors && errors.length > 0) {\n                    result = result.concat(errors);\n                }\n            }\n        }\n        return result;\n    };\n    QuestionMatrixDropdownModelBase.prototype.hasErrorInRows = function (fireCallback, rec) {\n        var _this = this;\n        var rows = this.generatedVisibleRows;\n        if (!this.generatedVisibleRows) {\n            rows = this.visibleRows;\n        }\n        var res = false;\n        if (!rec)\n            rec = {};\n        if (!rows)\n            return rec;\n        rec.validationValues = this.getDataFilteredValues();\n        rec.isSingleDetailPanel = this.detailPanelMode === \"underRowSingle\";\n        for (var i = 0; i < rows.length; i++) {\n            res = rows[i].hasErrors(fireCallback, rec, function () {\n                _this.raiseOnCompletedAsyncValidators();\n            }) || res;\n        }\n        return res;\n    };\n    QuestionMatrixDropdownModelBase.prototype.isValueDuplicated = function () {\n        if (!this.generatedVisibleRows)\n            return false;\n        var columns = this.getUniqueColumns();\n        var res = false;\n        for (var i = 0; i < columns.length; i++) {\n            res = this.isValueInColumnDuplicated(columns[i]) || res;\n        }\n        return res;\n    };\n    QuestionMatrixDropdownModelBase.prototype.isValueInColumnDuplicated = function (column) {\n        var keyValues = [];\n        var res = false;\n        for (var i = 0; i < this.generatedVisibleRows.length; i++) {\n            res =\n                this.isValueDuplicatedInRow(this.generatedVisibleRows[i], column, keyValues) || res;\n        }\n        return res;\n    };\n    QuestionMatrixDropdownModelBase.prototype.getUniqueColumns = function () {\n        var res = new Array();\n        for (var i = 0; i < this.columns.length; i++) {\n            if (this.columns[i].isUnique) {\n                res.push(this.columns[i]);\n            }\n        }\n        return res;\n    };\n    QuestionMatrixDropdownModelBase.prototype.isValueDuplicatedInRow = function (row, column, keyValues) {\n        var question = row.getQuestionByColumn(column);\n        if (!question || question.isEmpty())\n            return false;\n        var value = question.value;\n        for (var i = 0; i < keyValues.length; i++) {\n            if (_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isTwoValueEquals(value, keyValues[i], true, this.isUniqueCaseSensitive)) {\n                this.addDuplicationError(question);\n                return true;\n            }\n        }\n        keyValues.push(value);\n        return false;\n    };\n    QuestionMatrixDropdownModelBase.prototype.addDuplicationError = function (question) {\n        question.addError(new _error__WEBPACK_IMPORTED_MODULE_10__[\"KeyDuplicationError\"](this.keyDuplicationError, this));\n    };\n    QuestionMatrixDropdownModelBase.prototype.getFirstQuestionToFocus = function (withError) {\n        return this.getFirstCellQuestion(withError);\n    };\n    QuestionMatrixDropdownModelBase.prototype.getFirstInputElementId = function () {\n        var question = this.getFirstCellQuestion(false);\n        return question ? question.inputId : _super.prototype.getFirstInputElementId.call(this);\n    };\n    QuestionMatrixDropdownModelBase.prototype.getFirstErrorInputElementId = function () {\n        var question = this.getFirstCellQuestion(true);\n        return question ? question.inputId : _super.prototype.getFirstErrorInputElementId.call(this);\n    };\n    QuestionMatrixDropdownModelBase.prototype.getFirstCellQuestion = function (onError) {\n        if (!this.generatedVisibleRows)\n            return null;\n        for (var i = 0; i < this.generatedVisibleRows.length; i++) {\n            var cells = this.generatedVisibleRows[i].cells;\n            for (var colIndex = 0; colIndex < cells.length; colIndex++) {\n                if (!onError)\n                    return cells[colIndex].question;\n                if (cells[colIndex].question.currentErrorCount > 0)\n                    return cells[colIndex].question;\n            }\n        }\n        return null;\n    };\n    QuestionMatrixDropdownModelBase.prototype.onReadOnlyChanged = function () {\n        _super.prototype.onReadOnlyChanged.call(this);\n        if (!this.generateRows)\n            return;\n        for (var i = 0; i < this.visibleRows.length; i++) {\n            this.visibleRows[i].onQuestionReadOnlyChanged(this.isReadOnly);\n        }\n    };\n    //IMatrixDropdownData\n    QuestionMatrixDropdownModelBase.prototype.createQuestion = function (row, column) {\n        return this.createQuestionCore(row, column);\n    };\n    QuestionMatrixDropdownModelBase.prototype.createQuestionCore = function (row, column) {\n        var question = column.createCellQuestion(row);\n        question.setSurveyImpl(row);\n        question.setParentQuestion(this);\n        question.inMatrixMode = true;\n        return question;\n    };\n    QuestionMatrixDropdownModelBase.prototype.deleteRowValue = function (newValue, row) {\n        if (!newValue)\n            return newValue;\n        delete newValue[row.rowName];\n        return this.isObject(newValue) && Object.keys(newValue).length == 0\n            ? null\n            : newValue;\n    };\n    QuestionMatrixDropdownModelBase.prototype.onAnyValueChanged = function (name, questionName) {\n        if (this.isUpdateLocked ||\n            this.isDoingonAnyValueChanged ||\n            !this.generatedVisibleRows)\n            return;\n        this.isDoingonAnyValueChanged = true;\n        var rows = this.visibleRows;\n        for (var i = 0; i < rows.length; i++) {\n            rows[i].onAnyValueChanged(name, questionName);\n        }\n        var totalRow = this.visibleTotalRow;\n        if (!!totalRow) {\n            totalRow.onAnyValueChanged(name, questionName);\n        }\n        this.isDoingonAnyValueChanged = false;\n    };\n    QuestionMatrixDropdownModelBase.prototype.isObject = function (value) {\n        return value !== null && typeof value === \"object\";\n    };\n    QuestionMatrixDropdownModelBase.prototype.getOnCellValueChangedOptions = function (row, columnName, rowValue) {\n        var getQuestion = function (colName) {\n            return row.getQuestionByName(colName);\n        };\n        return {\n            row: row,\n            columnName: columnName,\n            rowValue: rowValue,\n            value: !!rowValue ? rowValue[columnName] : null,\n            getCellQuestion: getQuestion,\n            cellQuestion: row.getQuestionByName(columnName),\n            column: this.getColumnByName(columnName)\n        };\n    };\n    QuestionMatrixDropdownModelBase.prototype.onCellValueChanged = function (row, columnName, rowValue) {\n        if (!this.survey)\n            return;\n        var options = this.getOnCellValueChangedOptions(row, columnName, rowValue);\n        if (!!this.onCellValueChangedCallback) {\n            this.onCellValueChangedCallback(options);\n        }\n        this.survey.matrixCellValueChanged(this, options);\n    };\n    QuestionMatrixDropdownModelBase.prototype.validateCell = function (row, columnName, rowValue) {\n        if (!this.survey)\n            return;\n        var options = this.getOnCellValueChangedOptions(row, columnName, rowValue);\n        return this.survey.matrixCellValidate(this, options);\n    };\n    Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"isValidateOnValueChanging\", {\n        get: function () {\n            return !!this.survey ? this.survey.isValidateOnValueChanging : false;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionMatrixDropdownModelBase.prototype.onRowChanging = function (row, columnName, rowValue) {\n        if (!this.survey && !this.cellValueChangingCallback)\n            return !!rowValue ? rowValue[columnName] : null;\n        var options = this.getOnCellValueChangedOptions(row, columnName, rowValue);\n        var oldRowValue = this.getRowValueCore(row, this.createNewValue(), true);\n        options.oldValue = !!oldRowValue ? oldRowValue[columnName] : null;\n        if (!!this.cellValueChangingCallback) {\n            options.value = this.cellValueChangingCallback(row, columnName, options.value, options.oldValue);\n        }\n        if (!!this.survey) {\n            this.survey.matrixCellValueChanging(this, options);\n        }\n        return options.value;\n    };\n    QuestionMatrixDropdownModelBase.prototype.onRowChanged = function (row, columnName, newRowValue, isDeletingValue) {\n        var rowObj = !!columnName ? this.getRowObj(row) : null;\n        if (!!rowObj) {\n            var columnValue = null;\n            if (!!newRowValue && !isDeletingValue) {\n                columnValue = newRowValue[columnName];\n            }\n            this.isRowChanging = true;\n            rowObj[columnName] = columnValue;\n            this.isRowChanging = false;\n            this.onCellValueChanged(row, columnName, rowObj);\n        }\n        else {\n            var oldValue = this.createNewValue(true);\n            var combine = this.getNewValueOnRowChanged(row, columnName, newRowValue, isDeletingValue, this.createNewValue());\n            if (this.isTwoValueEquals(oldValue, combine.value))\n                return;\n            this.isRowChanging = true;\n            this.setNewValue(combine.value);\n            this.isRowChanging = false;\n            if (columnName) {\n                this.onCellValueChanged(row, columnName, combine.rowValue);\n            }\n        }\n    };\n    QuestionMatrixDropdownModelBase.prototype.getNewValueOnRowChanged = function (row, columnName, newRowValue, isDeletingValue, newValue) {\n        var rowValue = this.getRowValueCore(row, newValue, true);\n        if (isDeletingValue) {\n            delete rowValue[columnName];\n        }\n        for (var i = 0; i < row.cells.length; i++) {\n            var key = row.cells[i].question.getValueName();\n            delete rowValue[key];\n        }\n        if (newRowValue) {\n            newRowValue = JSON.parse(JSON.stringify(newRowValue));\n            for (var key in newRowValue) {\n                if (!this.isValueEmpty(newRowValue[key])) {\n                    rowValue[key] = newRowValue[key];\n                }\n            }\n        }\n        if (this.isObject(rowValue) && Object.keys(rowValue).length === 0) {\n            newValue = this.deleteRowValue(newValue, row);\n        }\n        return { value: newValue, rowValue: rowValue };\n    };\n    QuestionMatrixDropdownModelBase.prototype.getRowIndex = function (row) {\n        if (!this.generatedVisibleRows)\n            return -1;\n        return this.visibleRows.indexOf(row);\n    };\n    QuestionMatrixDropdownModelBase.prototype.getElementsInDesign = function (includeHidden) {\n        if (includeHidden === void 0) { includeHidden = false; }\n        var elements;\n        if (this.detailPanelMode == \"none\") {\n            elements = _super.prototype.getElementsInDesign.call(this, includeHidden);\n        }\n        else {\n            elements = includeHidden ? [this.detailPanel] : this.detailElements;\n        }\n        return this.columns.concat(elements);\n    };\n    QuestionMatrixDropdownModelBase.prototype.hasDetailPanel = function (row) {\n        if (this.detailPanelMode == \"none\")\n            return false;\n        if (this.isDesignMode)\n            return true;\n        if (!!this.onHasDetailPanelCallback)\n            return this.onHasDetailPanelCallback(row);\n        return this.detailElements.length > 0;\n    };\n    QuestionMatrixDropdownModelBase.prototype.getIsDetailPanelShowing = function (row) {\n        if (this.detailPanelMode == \"none\")\n            return false;\n        if (this.isDesignMode) {\n            var res = this.visibleRows.indexOf(row) == 0;\n            if (res) {\n                if (!row.detailPanel) {\n                    row.showDetailPanel();\n                }\n            }\n            return res;\n        }\n        return this.getPropertyValue(\"isRowShowing\" + row.id, false);\n    };\n    QuestionMatrixDropdownModelBase.prototype.setIsDetailPanelShowing = function (row, val) {\n        if (val == this.getIsDetailPanelShowing(row))\n            return;\n        this.setPropertyValue(\"isRowShowing\" + row.id, val);\n        this.updateDetailPanelButtonCss(row);\n        if (!!this.renderedTable) {\n            this.renderedTable.onDetailPanelChangeVisibility(row, val);\n        }\n        if (val && this.detailPanelMode === \"underRowSingle\") {\n            var rows = this.visibleRows;\n            for (var i = 0; i < rows.length; i++) {\n                if (rows[i].id !== row.id && rows[i].isDetailPanelShowing) {\n                    rows[i].hideDetailPanel();\n                }\n            }\n        }\n    };\n    QuestionMatrixDropdownModelBase.prototype.getDetailPanelButtonCss = function (row) {\n        var builder = new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_11__[\"CssClassBuilder\"]().append(this.getPropertyValue(\"detailButtonCss\" + row.id));\n        return builder.append(this.cssClasses.detailButton, builder.toString() === \"\").toString();\n    };\n    QuestionMatrixDropdownModelBase.prototype.getDetailPanelIconCss = function (row) {\n        var builder = new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_11__[\"CssClassBuilder\"]().append(this.getPropertyValue(\"detailIconCss\" + row.id));\n        return builder.append(this.cssClasses.detailIcon, builder.toString() === \"\").toString();\n    };\n    QuestionMatrixDropdownModelBase.prototype.getDetailPanelIconId = function (row) {\n        return this.getIsDetailPanelShowing(row) ? this.cssClasses.detailIconExpandedId : this.cssClasses.detailIconId;\n    };\n    QuestionMatrixDropdownModelBase.prototype.updateDetailPanelButtonCss = function (row) {\n        var classes = this.cssClasses;\n        var isPanelShowing = this.getIsDetailPanelShowing(row);\n        var iconBuilder = new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_11__[\"CssClassBuilder\"]().append(classes.detailIcon)\n            .append(classes.detailIconExpanded, isPanelShowing);\n        this.setPropertyValue(\"detailIconCss\" + row.id, iconBuilder.toString());\n        var buttonBuilder = new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_11__[\"CssClassBuilder\"]().append(classes.detailButton)\n            .append(classes.detailButtonExpanded, isPanelShowing);\n        this.setPropertyValue(\"detailButtonCss\" + row.id, buttonBuilder.toString());\n    };\n    QuestionMatrixDropdownModelBase.prototype.createRowDetailPanel = function (row) {\n        var _this = this;\n        if (this.isDesignMode)\n            return this.detailPanel;\n        var panel = this.createNewDetailPanel();\n        panel.readOnly = this.isReadOnly;\n        panel.setSurveyImpl(row);\n        var json = this.detailPanel.toJSON();\n        new _jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"JsonObject\"]().toObject(json, panel);\n        panel.renderWidth = \"100%\";\n        panel.updateCustomWidgets();\n        if (!!this.onCreateDetailPanelCallback) {\n            this.onCreateDetailPanelCallback(row, panel);\n        }\n        panel.questions.forEach(function (q) { return q.setParentQuestion(_this); });\n        return panel;\n    };\n    QuestionMatrixDropdownModelBase.prototype.getSharedQuestionByName = function (columnName, row) {\n        if (!this.survey || !this.valueName)\n            return null;\n        var index = this.getRowIndex(row);\n        if (index < 0)\n            return null;\n        return (this.survey.getQuestionByValueNameFromArray(this.valueName, columnName, index));\n    };\n    QuestionMatrixDropdownModelBase.prototype.onTotalValueChanged = function () {\n        if (!!this.data &&\n            !!this.visibleTotalRow &&\n            !this.isUpdateLocked &&\n            !this.isSett) {\n            this.data.setValue(this.getValueName() + _settings__WEBPACK_IMPORTED_MODULE_9__[\"settings\"].matrix.totalsSuffix, this.totalValue, false);\n        }\n    };\n    QuestionMatrixDropdownModelBase.prototype.getDataFilteredValues = function () {\n        return this.data ? this.data.getFilteredValues() : {};\n    };\n    QuestionMatrixDropdownModelBase.prototype.getParentTextProcessor = function () {\n        if (!this.parentQuestion || !this.parent)\n            return null;\n        var data = this.parent.data;\n        if (!!data && !!data.getTextProcessor)\n            return data.getTextProcessor();\n        return null;\n    };\n    QuestionMatrixDropdownModelBase.prototype.getQuestionFromArray = function (name, index) {\n        if (index >= this.visibleRows.length)\n            return null;\n        return this.visibleRows[index].getQuestionByName(name);\n    };\n    QuestionMatrixDropdownModelBase.prototype.isMatrixValueEmpty = function (val) {\n        if (!val)\n            return;\n        if (Array.isArray(val)) {\n            for (var i = 0; i < val.length; i++) {\n                if (this.isObject(val[i]) && Object.keys(val[i]).length > 0)\n                    return false;\n            }\n            return true;\n        }\n        return Object.keys(val).length == 0;\n    };\n    Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"SurveyModel\", {\n        get: function () {\n            return this.survey;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionMatrixDropdownModelBase.prototype.getCellTemplateData = function (cell) {\n        // return cell.cell.column.templateQuestion;\n        return this.SurveyModel.getMatrixCellTemplateData(cell);\n    };\n    QuestionMatrixDropdownModelBase.prototype.getCellWrapperComponentName = function (cell) {\n        return this.SurveyModel.getElementWrapperComponentName(cell, cell.row instanceof MatrixDropdownTotalRowModel ? \"row-footer\" : \"cell\");\n    };\n    QuestionMatrixDropdownModelBase.prototype.getCellWrapperComponentData = function (cell) {\n        return this.SurveyModel.getElementWrapperComponentData(cell, cell.row instanceof MatrixDropdownTotalRowModel ? \"row-footer\" : \"cell\");\n    };\n    QuestionMatrixDropdownModelBase.prototype.getColumnHeaderWrapperComponentName = function (cell) {\n        return this.SurveyModel.getElementWrapperComponentName(cell, \"column-header\");\n    };\n    QuestionMatrixDropdownModelBase.prototype.getColumnHeaderWrapperComponentData = function (cell) {\n        return this.SurveyModel.getElementWrapperComponentData(cell, \"column-header\");\n    };\n    QuestionMatrixDropdownModelBase.prototype.getRowHeaderWrapperComponentName = function (cell) {\n        return this.SurveyModel.getElementWrapperComponentName(cell, \"row-header\");\n    };\n    QuestionMatrixDropdownModelBase.prototype.getRowHeaderWrapperComponentData = function (cell) {\n        return this.SurveyModel.getElementWrapperComponentData(cell, \"row-header\");\n    };\n    Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"showHorizontalScroll\", {\n        get: function () {\n            return !this.isDefaultV2Theme && this.horizontalScroll;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionMatrixDropdownModelBase.prototype.getRootCss = function () {\n        return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_11__[\"CssClassBuilder\"]().append(_super.prototype.getRootCss.call(this)).append(this.cssClasses.rootScroll, this.horizontalScroll).toString();\n    };\n    return QuestionMatrixDropdownModelBase;\n}(_martixBase__WEBPACK_IMPORTED_MODULE_1__[\"QuestionMatrixBaseModel\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"matrixdropdownbase\", [\n    {\n        name: \"columns:matrixdropdowncolumns\",\n        className: \"matrixdropdowncolumn\",\n    },\n    {\n        name: \"columnLayout\",\n        alternativeName: \"columnsLocation\",\n        default: \"horizontal\",\n        choices: [\"horizontal\", \"vertical\"],\n    },\n    {\n        name: \"detailElements\",\n        visible: false,\n        isLightSerializable: false,\n    },\n    {\n        name: \"detailPanelMode\",\n        choices: [\"none\", \"underRow\", \"underRowSingle\"],\n        default: \"none\",\n    },\n    { name: \"cellErrorLocation\", default: \"default\", choices: [\"default\", \"top\", \"bottom\"] },\n    { name: \"detailErrorLocation\", default: \"default\", choices: [\"default\", \"top\", \"bottom\"], visibleIf: function (obj) { return !!obj && obj.detailPanelMode != \"none\"; }\n    },\n    \"horizontalScroll:boolean\",\n    {\n        name: \"choices:itemvalue[]\", uniqueProperty: \"value\",\n    },\n    { name: \"placeholder\", alternativeName: \"optionsCaption\", serializationProperty: \"locPlaceholder\" },\n    {\n        name: \"keyDuplicationError\",\n        serializationProperty: \"locKeyDuplicationError\",\n    },\n    {\n        name: \"cellType\",\n        default: \"dropdown\",\n        choices: function () {\n            return _question_matrixdropdowncolumn__WEBPACK_IMPORTED_MODULE_12__[\"MatrixDropdownColumn\"].getColumnTypes();\n        },\n    },\n    { name: \"columnColCount\", default: 0, choices: [0, 1, 2, 3, 4] },\n    \"columnMinWidth\",\n    { name: \"allowAdaptiveActions:boolean\", default: false, visible: false },\n], function () {\n    return new QuestionMatrixDropdownModelBase(\"\");\n}, \"matrixbase\");\n\n\n/***/ }),\n\n/***/ \"./src/question_matrixdropdowncolumn.ts\":\n/*!**********************************************!*\\\n  !*** ./src/question_matrixdropdowncolumn.ts ***!\n  \\**********************************************/\n/*! exports provided: matrixDropdownColumnTypes, MatrixDropdownColumn */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_3102893__) {\n\n\"use strict\";\n__nested_webpack_require_3102893__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_3102893__.d(__nested_webpack_exports__, \"matrixDropdownColumnTypes\", function() { return matrixDropdownColumnTypes; });\n/* harmony export (binding) */ __nested_webpack_require_3102893__.d(__nested_webpack_exports__, \"MatrixDropdownColumn\", function() { return MatrixDropdownColumn; });\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_3102893__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_3102893__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _question_expression__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_3102893__(/*! ./question_expression */ \"./src/question_expression.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_3102893__(/*! ./settings */ \"./src/settings.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n\n\n\n\nfunction onUpdateSelectBaseCellQuestion(cellQuestion, column, question, data) {\n    cellQuestion.storeOthersAsComment = !!question\n        ? question.storeOthersAsComment\n        : false;\n    if ((!cellQuestion.choices || cellQuestion.choices.length == 0) &&\n        cellQuestion.choicesByUrl.isEmpty) {\n        cellQuestion.choices = question.choices;\n    }\n    if (!cellQuestion.choicesByUrl.isEmpty) {\n        cellQuestion.choicesByUrl.run(data.getTextProcessor());\n    }\n}\nvar matrixDropdownColumnTypes = {\n    dropdown: {\n        onCellQuestionUpdate: function (cellQuestion, column, question, data) {\n            onUpdateSelectBaseCellQuestion(cellQuestion, column, question, data);\n            if (!!cellQuestion.locPlaceholder &&\n                cellQuestion.locPlaceholder.isEmpty &&\n                !question.locPlaceholder.isEmpty) {\n                cellQuestion.optionsCaption = question.optionsCaption;\n            }\n        },\n    },\n    checkbox: {\n        onCellQuestionUpdate: function (cellQuestion, column, question, data) {\n            onUpdateSelectBaseCellQuestion(cellQuestion, column, question, data);\n            cellQuestion.colCount =\n                column.colCount > -1 ? column.colCount : question.columnColCount;\n        },\n    },\n    radiogroup: {\n        onCellQuestionUpdate: function (cellQuestion, column, question, data) {\n            onUpdateSelectBaseCellQuestion(cellQuestion, column, question, data);\n            cellQuestion.colCount =\n                column.colCount > -1 ? column.colCount : question.columnColCount;\n        },\n    },\n    tagbox: {},\n    text: {},\n    comment: {},\n    boolean: {\n        onCellQuestionUpdate: function (cellQuestion, column, question, data) {\n            cellQuestion.renderAs = column.renderAs;\n        },\n    },\n    expression: {},\n    rating: {},\n};\nvar MatrixDropdownColumn = /** @class */ (function (_super) {\n    __extends(MatrixDropdownColumn, _super);\n    function MatrixDropdownColumn(name, title) {\n        if (title === void 0) { title = null; }\n        var _this = _super.call(this) || this;\n        _this.colOwnerValue = null;\n        _this.indexValue = -1;\n        _this._hasVisibleCell = true;\n        _this.previousChoicesId = undefined;\n        _this.createLocalizableString(\"totalFormat\", _this);\n        _this.createLocalizableString(\"cellHint\", _this);\n        _this.registerPropertyChangedHandlers([\"showInMultipleColumns\"], function () { _this.doShowInMultipleColumnsChanged(); });\n        _this.registerPropertyChangedHandlers([\"visible\"], function () { _this.doColumnVisibilityChanged(); });\n        _this.updateTemplateQuestion();\n        _this.name = name;\n        if (title) {\n            _this.title = title;\n        }\n        else {\n            _this.templateQuestion.locTitle.strChanged();\n        }\n        return _this;\n    }\n    MatrixDropdownColumn.getColumnTypes = function () {\n        var res = [];\n        for (var key in matrixDropdownColumnTypes) {\n            res.push(key);\n        }\n        return res;\n    };\n    MatrixDropdownColumn.prototype.getOriginalObj = function () {\n        return this.templateQuestion;\n    };\n    MatrixDropdownColumn.prototype.getClassNameProperty = function () {\n        return \"cellType\";\n    };\n    MatrixDropdownColumn.prototype.getSurvey = function (live) {\n        if (live === void 0) { live = false; }\n        return !!this.colOwner ? this.colOwner.survey : null;\n    };\n    MatrixDropdownColumn.prototype.endLoadingFromJson = function () {\n        var _this = this;\n        _super.prototype.endLoadingFromJson.call(this);\n        this.templateQuestion.autoOtherMode = this.isShowInMultipleColumns;\n        this.templateQuestion.endLoadingFromJson();\n        this.templateQuestion.onGetSurvey = function () {\n            return _this.getSurvey();\n        };\n    };\n    MatrixDropdownColumn.prototype.getDynamicPropertyName = function () {\n        return \"cellType\";\n    };\n    MatrixDropdownColumn.prototype.getDynamicType = function () {\n        if (this.cellType === \"default\")\n            return \"question\";\n        return this.calcCellQuestionType(null);\n    };\n    Object.defineProperty(MatrixDropdownColumn.prototype, \"colOwner\", {\n        get: function () {\n            return this.colOwnerValue;\n        },\n        set: function (value) {\n            this.colOwnerValue = value;\n            if (!!value) {\n                this.updateTemplateQuestion();\n                this.setParentQuestionToTemplate(this.templateQuestion);\n            }\n        },\n        enumerable: false,\n        configurable: true\n    });\n    MatrixDropdownColumn.prototype.locStrsChanged = function () {\n        _super.prototype.locStrsChanged.call(this);\n        this.locTitle.strChanged();\n    };\n    MatrixDropdownColumn.prototype.addUsedLocales = function (locales) {\n        _super.prototype.addUsedLocales.call(this, locales);\n        this.templateQuestion.addUsedLocales(locales);\n    };\n    Object.defineProperty(MatrixDropdownColumn.prototype, \"index\", {\n        get: function () {\n            return this.indexValue;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    MatrixDropdownColumn.prototype.setIndex = function (val) {\n        this.indexValue = val;\n    };\n    MatrixDropdownColumn.prototype.getType = function () {\n        return \"matrixdropdowncolumn\";\n    };\n    Object.defineProperty(MatrixDropdownColumn.prototype, \"cellType\", {\n        get: function () {\n            return this.getPropertyValue(\"cellType\");\n        },\n        set: function (val) {\n            val = val.toLocaleLowerCase();\n            this.updateTemplateQuestion(val);\n            this.setPropertyValue(\"cellType\", val);\n            if (!!this.colOwner) {\n                this.colOwner.onColumnCellTypeChanged(this);\n            }\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MatrixDropdownColumn.prototype, \"templateQuestion\", {\n        get: function () {\n            return this.templateQuestionValue;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MatrixDropdownColumn.prototype, \"value\", {\n        get: function () {\n            return this.templateQuestion.name;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MatrixDropdownColumn.prototype, \"isVisible\", {\n        //For filtering columns\n        get: function () {\n            return true;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MatrixDropdownColumn.prototype, \"isColumnVisible\", {\n        get: function () {\n            if (this.isDesignMode)\n                return true;\n            return this.visible && this.hasVisibleCell;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MatrixDropdownColumn.prototype, \"visible\", {\n        get: function () { return this.getPropertyValue(\"visible\"); },\n        set: function (val) {\n            this.setPropertyValue(\"visible\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MatrixDropdownColumn.prototype, \"hasVisibleCell\", {\n        get: function () {\n            return this._hasVisibleCell;\n        },\n        set: function (newVal) {\n            this._hasVisibleCell = newVal;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    MatrixDropdownColumn.prototype.getVisibleMultipleChoices = function () {\n        var choices = this.templateQuestion.visibleChoices;\n        if (!Array.isArray(choices))\n            return [];\n        if (!Array.isArray(this._visiblechoices))\n            return choices;\n        var res = new Array();\n        for (var i = 0; i < choices.length; i++) {\n            var item = choices[i];\n            if (this._visiblechoices.indexOf(item.value) > -1)\n                res.push(item);\n        }\n        return res;\n    };\n    Object.defineProperty(MatrixDropdownColumn.prototype, \"getVisibleChoicesInCell\", {\n        get: function () {\n            if (Array.isArray(this._visiblechoices))\n                return this._visiblechoices;\n            var res = this.templateQuestion.visibleChoices;\n            return Array.isArray(res) ? res : [];\n        },\n        enumerable: false,\n        configurable: true\n    });\n    MatrixDropdownColumn.prototype.setVisibleChoicesInCell = function (val) {\n        this._visiblechoices = val;\n    };\n    Object.defineProperty(MatrixDropdownColumn.prototype, \"isFilteredMultipleColumns\", {\n        get: function () {\n            if (!this.showInMultipleColumns)\n                return false;\n            var choices = this.templateQuestion.choices;\n            if (!Array.isArray(choices))\n                return false;\n            for (var i = 0; i < choices.length; i++) {\n                if (choices[i].visibleIf)\n                    return true;\n            }\n            return false;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MatrixDropdownColumn.prototype, \"name\", {\n        get: function () {\n            return this.templateQuestion.name;\n        },\n        set: function (val) {\n            this.templateQuestion.name = val;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MatrixDropdownColumn.prototype, \"title\", {\n        get: function () {\n            return this.templateQuestion.title;\n        },\n        set: function (val) {\n            this.templateQuestion.title = val;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MatrixDropdownColumn.prototype, \"locTitle\", {\n        get: function () {\n            return this.templateQuestion.locTitle;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MatrixDropdownColumn.prototype, \"fullTitle\", {\n        get: function () {\n            return this.locTitle.textOrHtml;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MatrixDropdownColumn.prototype, \"isRequired\", {\n        get: function () {\n            return this.templateQuestion.isRequired;\n        },\n        set: function (val) {\n            this.templateQuestion.isRequired = val;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MatrixDropdownColumn.prototype, \"isRenderedRequired\", {\n        get: function () {\n            return this.getPropertyValue(\"isRenderedRequired\", this.isRequired);\n        },\n        set: function (val) {\n            this.setPropertyValue(\"isRenderedRequired\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    MatrixDropdownColumn.prototype.updateIsRenderedRequired = function (val) {\n        this.isRenderedRequired = val || this.isRequired;\n    };\n    Object.defineProperty(MatrixDropdownColumn.prototype, \"requiredText\", {\n        get: function () {\n            return this.isRenderedRequired && this.getSurvey() ? this.getSurvey().requiredText : this.templateQuestion.requiredText;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MatrixDropdownColumn.prototype, \"requiredErrorText\", {\n        get: function () {\n            return this.templateQuestion.requiredErrorText;\n        },\n        set: function (val) {\n            this.templateQuestion.requiredErrorText = val;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MatrixDropdownColumn.prototype, \"locRequiredErrorText\", {\n        get: function () {\n            return this.templateQuestion.locRequiredErrorText;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MatrixDropdownColumn.prototype, \"readOnly\", {\n        get: function () {\n            return this.templateQuestion.readOnly;\n        },\n        set: function (val) {\n            this.templateQuestion.readOnly = val;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MatrixDropdownColumn.prototype, \"hasOther\", {\n        get: function () {\n            return this.templateQuestion.hasOther;\n        },\n        set: function (val) {\n            this.templateQuestion.hasOther = val;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MatrixDropdownColumn.prototype, \"visibleIf\", {\n        get: function () {\n            return this.templateQuestion.visibleIf;\n        },\n        set: function (val) {\n            this.templateQuestion.visibleIf = val;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MatrixDropdownColumn.prototype, \"enableIf\", {\n        get: function () {\n            return this.templateQuestion.enableIf;\n        },\n        set: function (val) {\n            this.templateQuestion.enableIf = val;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MatrixDropdownColumn.prototype, \"requiredIf\", {\n        get: function () {\n            return this.templateQuestion.requiredIf;\n        },\n        set: function (val) {\n            this.templateQuestion.requiredIf = val;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MatrixDropdownColumn.prototype, \"resetValueIf\", {\n        get: function () {\n            return this.templateQuestion.resetValueIf;\n        },\n        set: function (val) {\n            this.templateQuestion.resetValueIf = val;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MatrixDropdownColumn.prototype, \"defaultValueExpression\", {\n        get: function () {\n            return this.templateQuestion.defaultValueExpression;\n        },\n        set: function (val) {\n            this.templateQuestion.defaultValueExpression = val;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MatrixDropdownColumn.prototype, \"isUnique\", {\n        get: function () {\n            return this.getPropertyValue(\"isUnique\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"isUnique\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MatrixDropdownColumn.prototype, \"showInMultipleColumns\", {\n        get: function () {\n            return this.getPropertyValue(\"showInMultipleColumns\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"showInMultipleColumns\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MatrixDropdownColumn.prototype, \"isSupportMultipleColumns\", {\n        get: function () {\n            return [\"checkbox\", \"radiogroup\"].indexOf(this.cellType) > -1;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MatrixDropdownColumn.prototype, \"isShowInMultipleColumns\", {\n        get: function () {\n            return this.showInMultipleColumns && this.isSupportMultipleColumns;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MatrixDropdownColumn.prototype, \"validators\", {\n        get: function () {\n            return this.templateQuestion.validators;\n        },\n        set: function (val) {\n            this.templateQuestion.validators = val;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MatrixDropdownColumn.prototype, \"totalType\", {\n        get: function () {\n            return this.getPropertyValue(\"totalType\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"totalType\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MatrixDropdownColumn.prototype, \"totalExpression\", {\n        get: function () {\n            return this.getPropertyValue(\"totalExpression\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"totalExpression\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MatrixDropdownColumn.prototype, \"hasTotal\", {\n        get: function () {\n            return this.totalType != \"none\" || !!this.totalExpression;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MatrixDropdownColumn.prototype, \"totalFormat\", {\n        get: function () {\n            return this.getLocalizableStringText(\"totalFormat\", \"\");\n        },\n        set: function (val) {\n            this.setLocalizableStringText(\"totalFormat\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MatrixDropdownColumn.prototype, \"locTotalFormat\", {\n        get: function () {\n            return this.getLocalizableString(\"totalFormat\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MatrixDropdownColumn.prototype, \"cellHint\", {\n        get: function () {\n            return this.getLocalizableStringText(\"cellHint\", \"\");\n        },\n        set: function (val) {\n            this.setLocalizableStringText(\"cellHint\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MatrixDropdownColumn.prototype, \"locCellHint\", {\n        get: function () {\n            return this.getLocalizableString(\"cellHint\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MatrixDropdownColumn.prototype, \"renderAs\", {\n        get: function () {\n            return this.getPropertyValue(\"renderAs\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"renderAs\", val);\n            if (!!this.templateQuestion) {\n                this.templateQuestion.renderAs = val;\n            }\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MatrixDropdownColumn.prototype, \"totalMaximumFractionDigits\", {\n        get: function () {\n            return this.getPropertyValue(\"totalMaximumFractionDigits\");\n        },\n        set: function (val) {\n            if (val < -1 || val > 20)\n                return;\n            this.setPropertyValue(\"totalMaximumFractionDigits\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MatrixDropdownColumn.prototype, \"totalMinimumFractionDigits\", {\n        get: function () {\n            return this.getPropertyValue(\"totalMinimumFractionDigits\");\n        },\n        set: function (val) {\n            if (val < -1 || val > 20)\n                return;\n            this.setPropertyValue(\"totalMinimumFractionDigits\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MatrixDropdownColumn.prototype, \"totalDisplayStyle\", {\n        get: function () {\n            return this.getPropertyValue(\"totalDisplayStyle\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"totalDisplayStyle\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MatrixDropdownColumn.prototype, \"totalCurrency\", {\n        get: function () {\n            return this.getPropertyValue(\"totalCurrency\");\n        },\n        set: function (val) {\n            if (Object(_question_expression__WEBPACK_IMPORTED_MODULE_2__[\"getCurrecyCodes\"])().indexOf(val) < 0)\n                return;\n            this.setPropertyValue(\"totalCurrency\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MatrixDropdownColumn.prototype, \"minWidth\", {\n        get: function () {\n            return this.getPropertyValue(\"minWidth\", \"\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"minWidth\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MatrixDropdownColumn.prototype, \"width\", {\n        get: function () {\n            return this.templateQuestion.width;\n        },\n        set: function (val) {\n            this.templateQuestion.width = val;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MatrixDropdownColumn.prototype, \"colCount\", {\n        get: function () {\n            return this.getPropertyValue(\"colCount\");\n        },\n        set: function (val) {\n            if (val < -1 || val > 4)\n                return;\n            this.setPropertyValue(\"colCount\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    MatrixDropdownColumn.prototype.getLocale = function () {\n        return this.colOwner ? this.colOwner.getLocale() : \"\";\n    };\n    MatrixDropdownColumn.prototype.getMarkdownHtml = function (text, name) {\n        return this.colOwner ? this.colOwner.getMarkdownHtml(text, name) : undefined;\n    };\n    MatrixDropdownColumn.prototype.getRenderer = function (name) {\n        return !!this.colOwner ? this.colOwner.getRenderer(name) : null;\n    };\n    MatrixDropdownColumn.prototype.getRendererContext = function (locStr) {\n        return !!this.colOwner ? this.colOwner.getRendererContext(locStr) : locStr;\n    };\n    MatrixDropdownColumn.prototype.getProcessedText = function (text) {\n        return this.colOwner ? this.colOwner.getProcessedText(text) : text;\n    };\n    MatrixDropdownColumn.prototype.createCellQuestion = function (row) {\n        var qType = this.calcCellQuestionType(row);\n        var cellQuestion = this.createNewQuestion(qType);\n        this.callOnCellQuestionUpdate(cellQuestion, row);\n        return cellQuestion;\n    };\n    MatrixDropdownColumn.prototype.startLoadingFromJson = function (json) {\n        _super.prototype.startLoadingFromJson.call(this, json);\n        if (!!json && !json.cellType && !!json.choices) {\n            json.cellType = this.colOwner.getCellType();\n        }\n    };\n    MatrixDropdownColumn.prototype.updateCellQuestion = function (cellQuestion, data, onUpdateJson) {\n        if (onUpdateJson === void 0) { onUpdateJson = null; }\n        this.setQuestionProperties(cellQuestion, onUpdateJson);\n    };\n    MatrixDropdownColumn.prototype.callOnCellQuestionUpdate = function (cellQuestion, data) {\n        var qType = cellQuestion.getType();\n        var qDefinition = matrixDropdownColumnTypes[qType];\n        if (qDefinition && qDefinition[\"onCellQuestionUpdate\"]) {\n            qDefinition[\"onCellQuestionUpdate\"](cellQuestion, this, this.colOwner, data);\n        }\n    };\n    MatrixDropdownColumn.prototype.defaultCellTypeChanged = function () {\n        this.updateTemplateQuestion();\n    };\n    MatrixDropdownColumn.prototype.calcCellQuestionType = function (row) {\n        var cellType = this.getDefaultCellQuestionType();\n        if (!!row && !!this.colOwner) {\n            cellType = this.colOwner.getCustomCellType(this, row, cellType);\n        }\n        return cellType;\n    };\n    MatrixDropdownColumn.prototype.getDefaultCellQuestionType = function (cellType) {\n        if (!cellType)\n            cellType = this.cellType;\n        if (cellType !== \"default\")\n            return cellType;\n        if (this.colOwner)\n            return this.colOwner.getCellType();\n        return _settings__WEBPACK_IMPORTED_MODULE_3__[\"settings\"].matrix.defaultCellType;\n    };\n    MatrixDropdownColumn.prototype.updateTemplateQuestion = function (newCellType) {\n        var _this = this;\n        var curCellType = this.getDefaultCellQuestionType(newCellType);\n        var prevCellType = this.templateQuestion\n            ? this.templateQuestion.getType()\n            : \"\";\n        if (curCellType === prevCellType)\n            return;\n        if (this.templateQuestion) {\n            this.removeProperties(prevCellType);\n        }\n        this.templateQuestionValue = this.createNewQuestion(curCellType);\n        this.templateQuestion.locOwner = this;\n        this.addProperties(curCellType);\n        this.templateQuestion.onPropertyChanged.add(function (sender, options) {\n            _this.propertyValueChanged(options.name, options.oldValue, options.newValue);\n        });\n        this.templateQuestion.onItemValuePropertyChanged.add(function (sender, options) {\n            _this.doItemValuePropertyChanged(options.propertyName, options.obj, options.name, options.newValue, options.oldValue);\n        });\n        this.templateQuestion.isContentElement = true;\n        if (!this.isLoadingFromJson) {\n            this.templateQuestion.onGetSurvey = function () {\n                return _this.getSurvey();\n            };\n        }\n        this.templateQuestion.locTitle.strChanged();\n    };\n    MatrixDropdownColumn.prototype.createNewQuestion = function (cellType) {\n        var question = _jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].createClass(cellType);\n        if (!question) {\n            question = _jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].createClass(\"text\");\n        }\n        question.loadingOwner = this;\n        question.isEditableTemplateElement = true;\n        question.autoOtherMode = this.isShowInMultipleColumns;\n        this.setQuestionProperties(question);\n        this.setParentQuestionToTemplate(question);\n        return question;\n    };\n    MatrixDropdownColumn.prototype.setParentQuestionToTemplate = function (question) {\n        if (!!this.colOwner && this.colOwner.isQuestion) {\n            question.setParentQuestion(this.colOwner);\n        }\n    };\n    MatrixDropdownColumn.prototype.setQuestionProperties = function (question, onUpdateJson) {\n        var _this = this;\n        if (onUpdateJson === void 0) { onUpdateJson = null; }\n        if (this.templateQuestion) {\n            var json = new _jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"JsonObject\"]().toJsonObject(this.templateQuestion, true);\n            if (onUpdateJson) {\n                onUpdateJson(json);\n            }\n            json.type = question.getType();\n            if (this.cellType === \"default\" && !!this.colOwner && this.colOwner.hasChoices()) {\n                delete json[\"choices\"];\n            }\n            delete json[\"itemComponent\"];\n            if (this.jsonObj) {\n                Object.keys(this.jsonObj).forEach(function (prop) {\n                    json[prop] = _this.jsonObj[prop];\n                });\n            }\n            new _jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"JsonObject\"]().toObject(json, question);\n            question.isContentElement = this.templateQuestion.isContentElement;\n            this.previousChoicesId = undefined;\n            question.loadedChoicesFromServerCallback = function () {\n                if (!_this.isShowInMultipleColumns)\n                    return;\n                if (!!_this.previousChoicesId && _this.previousChoicesId !== question.id)\n                    return;\n                _this.previousChoicesId = question.id;\n                var choices = question.visibleChoices;\n                _this.templateQuestion.choices = choices;\n                _this.propertyValueChanged(\"choices\", choices, choices);\n            };\n        }\n    };\n    MatrixDropdownColumn.prototype.propertyValueChanged = function (name, oldValue, newValue) {\n        _super.prototype.propertyValueChanged.call(this, name, oldValue, newValue);\n        if (name === \"isRequired\") {\n            this.updateIsRenderedRequired(newValue);\n        }\n        if (!this.colOwner || this.isLoadingFromJson)\n            return;\n        if (this.isShowInMultipleColumns && [\"visibleChoices\", \"choices\"].indexOf(name) > -1) {\n            this.colOwner.onShowInMultipleColumnsChanged(this);\n        }\n        if (!_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].hasOriginalProperty(this, name))\n            return;\n        this.colOwner.onColumnPropertyChanged(this, name, newValue);\n    };\n    MatrixDropdownColumn.prototype.doItemValuePropertyChanged = function (propertyName, obj, name, newValue, oldValue) {\n        if (!_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].hasOriginalProperty(obj, name))\n            return;\n        if (this.colOwner != null && !this.isLoadingFromJson) {\n            this.colOwner.onColumnItemValuePropertyChanged(this, propertyName, obj, name, newValue, oldValue);\n        }\n    };\n    MatrixDropdownColumn.prototype.doShowInMultipleColumnsChanged = function () {\n        if (this.colOwner != null) {\n            this.colOwner.onShowInMultipleColumnsChanged(this);\n        }\n        if (this.templateQuestion) {\n            this.templateQuestion.autoOtherMode = this.isShowInMultipleColumns;\n        }\n    };\n    MatrixDropdownColumn.prototype.doColumnVisibilityChanged = function () {\n        if (this.colOwner != null && !this.isDesignMode) {\n            this.colOwner.onColumnVisibilityChanged(this);\n        }\n    };\n    MatrixDropdownColumn.prototype.getProperties = function (curCellType) {\n        return _jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].getDynamicPropertiesByObj(this, curCellType);\n    };\n    MatrixDropdownColumn.prototype.removeProperties = function (curCellType) {\n        var properties = this.getProperties(curCellType);\n        for (var i = 0; i < properties.length; i++) {\n            var prop = properties[i];\n            delete this[prop.name];\n            if (prop.serializationProperty) {\n                delete this[prop.serializationProperty];\n            }\n        }\n    };\n    MatrixDropdownColumn.prototype.addProperties = function (curCellType) {\n        var question = this.templateQuestion;\n        var properties = this.getProperties(curCellType);\n        for (var i = 0; i < properties.length; i++) {\n            var prop = properties[i];\n            this.addProperty(question, prop.name, false);\n            if (prop.serializationProperty) {\n                this.addProperty(question, prop.serializationProperty, true);\n            }\n            if (prop.alternativeName) {\n                this.addProperty(question, prop.alternativeName, false);\n            }\n        }\n    };\n    MatrixDropdownColumn.prototype.addProperty = function (question, propName, isReadOnly) {\n        var desc = {\n            configurable: true,\n            get: function () {\n                return question[propName];\n            },\n        };\n        if (!isReadOnly) {\n            desc[\"set\"] = function (v) {\n                question[propName] = v;\n            };\n        }\n        Object.defineProperty(this, propName, desc);\n    };\n    return MatrixDropdownColumn;\n}(_base__WEBPACK_IMPORTED_MODULE_1__[\"Base\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"matrixdropdowncolumn\", [\n    { name: \"!name\", isUnique: true },\n    {\n        name: \"title\", serializationProperty: \"locTitle\", dependsOn: \"name\",\n        onPropertyEditorUpdate: function (obj, editor) {\n            if (!!obj && !!editor) {\n                editor.placeholder = obj.name;\n            }\n        }\n    },\n    { name: \"cellHint\", serializationProperty: \"locCellHint\", visible: false },\n    {\n        name: \"cellType\",\n        default: \"default\",\n        choices: function () {\n            var res = MatrixDropdownColumn.getColumnTypes();\n            res.splice(0, 0, \"default\");\n            return res;\n        },\n    },\n    { name: \"colCount\", default: -1, choices: [-1, 0, 1, 2, 3, 4] },\n    \"isRequired:boolean\",\n    \"isUnique:boolean\",\n    {\n        name: \"requiredErrorText:text\",\n        serializationProperty: \"locRequiredErrorText\",\n    },\n    \"readOnly:boolean\",\n    {\n        name: \"minWidth\",\n        onPropertyEditorUpdate: function (obj, editor) {\n            if (!!obj && !!editor) {\n                editor.value = obj.minWidth;\n            }\n        }\n    },\n    \"width\",\n    { name: \"visible:switch\", default: true, overridingProperty: \"visibleIf\" },\n    \"visibleIf:condition\",\n    \"enableIf:condition\",\n    \"requiredIf:condition\",\n    {\n        name: \"showInMultipleColumns:boolean\",\n        dependsOn: \"cellType\",\n        visibleIf: function (obj) {\n            if (!obj)\n                return false;\n            return obj.isSupportMultipleColumns;\n        },\n    },\n    {\n        name: \"validators:validators\",\n        baseClassName: \"surveyvalidator\",\n        classNamePart: \"validator\",\n    },\n    {\n        name: \"totalType\",\n        default: \"none\",\n        choices: [\"none\", \"sum\", \"count\", \"min\", \"max\", \"avg\"],\n    },\n    \"totalExpression:expression\",\n    { name: \"totalFormat\", serializationProperty: \"locTotalFormat\" },\n    {\n        name: \"totalDisplayStyle\",\n        default: \"none\",\n        choices: [\"none\", \"decimal\", \"currency\", \"percent\"],\n    },\n    {\n        name: \"totalCurrency\",\n        choices: function () {\n            return Object(_question_expression__WEBPACK_IMPORTED_MODULE_2__[\"getCurrecyCodes\"])();\n        },\n        default: \"USD\",\n    },\n    { name: \"totalMaximumFractionDigits:number\", default: -1 },\n    { name: \"totalMinimumFractionDigits:number\", default: -1 },\n    { name: \"renderAs\", default: \"default\", visible: false },\n], function () {\n    return new MatrixDropdownColumn(\"\");\n});\n\n\n/***/ }),\n\n/***/ \"./src/question_matrixdropdownrendered.ts\":\n/*!************************************************!*\\\n  !*** ./src/question_matrixdropdownrendered.ts ***!\n  \\************************************************/\n/*! exports provided: QuestionMatrixDropdownRenderedCell, QuestionMatrixDropdownRenderedRow, QuestionMatrixDropdownRenderedErrorRow, QuestionMatrixDropdownRenderedTable */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_3138229__) {\n\n\"use strict\";\n__nested_webpack_require_3138229__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_3138229__.d(__nested_webpack_exports__, \"QuestionMatrixDropdownRenderedCell\", function() { return QuestionMatrixDropdownRenderedCell; });\n/* harmony export (binding) */ __nested_webpack_require_3138229__.d(__nested_webpack_exports__, \"QuestionMatrixDropdownRenderedRow\", function() { return QuestionMatrixDropdownRenderedRow; });\n/* harmony export (binding) */ __nested_webpack_require_3138229__.d(__nested_webpack_exports__, \"QuestionMatrixDropdownRenderedErrorRow\", function() { return QuestionMatrixDropdownRenderedErrorRow; });\n/* harmony export (binding) */ __nested_webpack_require_3138229__.d(__nested_webpack_exports__, \"QuestionMatrixDropdownRenderedTable\", function() { return QuestionMatrixDropdownRenderedTable; });\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_3138229__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_3138229__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _itemvalue__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_3138229__(/*! ./itemvalue */ \"./src/itemvalue.ts\");\n/* harmony import */ var _actions_action__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_3138229__(/*! ./actions/action */ \"./src/actions/action.ts\");\n/* harmony import */ var _actions_adaptive_container__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_3138229__(/*! ./actions/adaptive-container */ \"./src/actions/adaptive-container.ts\");\n/* harmony import */ var _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_3138229__(/*! ./utils/cssClassBuilder */ \"./src/utils/cssClassBuilder.ts\");\n/* harmony import */ var _actions_container__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_3138229__(/*! ./actions/container */ \"./src/actions/container.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_3138229__(/*! ./settings */ \"./src/settings.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __spreadArray = ( false) || function (to, from) {\n    for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\n        to[j] = from[i];\n    return to;\n};\n\n\n\n\n\n\n\n\nvar QuestionMatrixDropdownRenderedCell = /** @class */ (function () {\n    function QuestionMatrixDropdownRenderedCell() {\n        this.minWidth = \"\";\n        this.width = \"\";\n        this.colSpans = 1;\n        this.isActionsCell = false;\n        this.isErrorsCell = false;\n        this.isDragHandlerCell = false;\n        this.classNameValue = \"\";\n        this.idValue = QuestionMatrixDropdownRenderedCell.counter++;\n    }\n    Object.defineProperty(QuestionMatrixDropdownRenderedCell.prototype, \"hasQuestion\", {\n        get: function () {\n            return !!this.question && !this.isErrorsCell;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixDropdownRenderedCell.prototype, \"hasTitle\", {\n        get: function () {\n            return !!this.locTitle;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixDropdownRenderedCell.prototype, \"hasPanel\", {\n        get: function () {\n            return !!this.panel;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixDropdownRenderedCell.prototype, \"id\", {\n        get: function () {\n            return this.idValue;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixDropdownRenderedCell.prototype, \"item\", {\n        get: function () {\n            return this.itemValue;\n        },\n        set: function (val) {\n            this.itemValue = val;\n            if (!!val) {\n                val.hideCaption = true;\n            }\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixDropdownRenderedCell.prototype, \"isChoice\", {\n        get: function () {\n            return !!this.item;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixDropdownRenderedCell.prototype, \"isItemChoice\", {\n        get: function () {\n            return this.isChoice && !this.isOtherChoice;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixDropdownRenderedCell.prototype, \"choiceValue\", {\n        get: function () {\n            return this.isChoice ? this.item.value : null;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixDropdownRenderedCell.prototype, \"isCheckbox\", {\n        get: function () {\n            return this.isItemChoice && this.question.isDescendantOf(\"checkbox\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixDropdownRenderedCell.prototype, \"isRadio\", {\n        get: function () {\n            return this.isItemChoice && this.question.isDescendantOf(\"radiogroup\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixDropdownRenderedCell.prototype, \"isFirstChoice\", {\n        get: function () {\n            return this.choiceIndex === 0;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixDropdownRenderedCell.prototype, \"className\", {\n        get: function () {\n            var builder = new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_5__[\"CssClassBuilder\"]().append(this.classNameValue);\n            if (this.hasQuestion) {\n                builder\n                    .append(this.question.cssClasses.hasError, this.question.errors.length > 0)\n                    .append(this.question.cssClasses.answered, this.question.isAnswered);\n            }\n            return builder.toString();\n        },\n        set: function (val) {\n            this.classNameValue = val;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixDropdownRenderedCell.prototype, \"headers\", {\n        get: function () {\n            if (this.cell && this.cell.column) {\n                if (this.cell.column.cellHint === \" \") {\n                    return \"\";\n                }\n                if (!!this.cell.column.cellHint) {\n                    return this.cell.column.locCellHint.renderedHtml;\n                }\n                if (this.matrix.IsMultiplyColumn(this.cell.column)) {\n                    if (!!this.item) {\n                        return this.item.locText.renderedHtml;\n                    }\n                    else {\n                        return \"\";\n                    }\n                }\n            }\n            if (this.hasQuestion && this.question.isVisible) {\n                return this.question.locTitle.renderedHtml;\n            }\n            if (this.hasTitle) {\n                return this.locTitle.renderedHtml || \"\";\n            }\n            return \"\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionMatrixDropdownRenderedCell.prototype.getTitle = function () {\n        return (this.matrix && this.matrix.showHeader) ? this.headers : \"\";\n    };\n    QuestionMatrixDropdownRenderedCell.prototype.calculateFinalClassName = function (matrixCssClasses) {\n        var questionCss = this.cell.question.cssClasses;\n        // 'text-align': $data.isChoice ? 'center':\n        var builder = new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_5__[\"CssClassBuilder\"]()\n            .append(questionCss.itemValue, !!questionCss)\n            .append(questionCss.asCell, !!questionCss);\n        return builder.append(matrixCssClasses.cell, builder.isEmpty() && !!matrixCssClasses)\n            .append(matrixCssClasses.choiceCell, this.isChoice)\n            .toString();\n    };\n    QuestionMatrixDropdownRenderedCell.prototype.focusIn = function () {\n        if (this.question) {\n            this.question.focusIn();\n        }\n    };\n    QuestionMatrixDropdownRenderedCell.counter = 1;\n    return QuestionMatrixDropdownRenderedCell;\n}());\n\nvar QuestionMatrixDropdownRenderedRow = /** @class */ (function (_super) {\n    __extends(QuestionMatrixDropdownRenderedRow, _super);\n    function QuestionMatrixDropdownRenderedRow(cssClasses, isDetailRow) {\n        if (isDetailRow === void 0) { isDetailRow = false; }\n        var _this = _super.call(this) || this;\n        _this.cssClasses = cssClasses;\n        _this.isDetailRow = isDetailRow;\n        _this.isErrorsRow = false;\n        _this.cells = [];\n        _this.idValue = QuestionMatrixDropdownRenderedRow.counter++;\n        return _this;\n    }\n    Object.defineProperty(QuestionMatrixDropdownRenderedRow.prototype, \"id\", {\n        get: function () {\n            return this.idValue;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixDropdownRenderedRow.prototype, \"attributes\", {\n        get: function () {\n            if (!this.row)\n                return {};\n            return { \"data-sv-drop-target-matrix-row\": this.row.id };\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixDropdownRenderedRow.prototype, \"className\", {\n        get: function () {\n            return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_5__[\"CssClassBuilder\"]()\n                .append(this.cssClasses.row)\n                .append(this.cssClasses.detailRow, this.isDetailRow)\n                .append(this.cssClasses.ghostRow, this.isGhostRow)\n                .append(this.cssClasses.rowAdditional, this.isAdditionalClasses)\n                .toString();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionMatrixDropdownRenderedRow.counter = 1;\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ defaultValue: false })\n    ], QuestionMatrixDropdownRenderedRow.prototype, \"isGhostRow\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ defaultValue: false })\n    ], QuestionMatrixDropdownRenderedRow.prototype, \"isAdditionalClasses\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ defaultValue: true })\n    ], QuestionMatrixDropdownRenderedRow.prototype, \"visible\", void 0);\n    return QuestionMatrixDropdownRenderedRow;\n}(_base__WEBPACK_IMPORTED_MODULE_1__[\"Base\"]));\n\nvar QuestionMatrixDropdownRenderedErrorRow = /** @class */ (function (_super) {\n    __extends(QuestionMatrixDropdownRenderedErrorRow, _super);\n    function QuestionMatrixDropdownRenderedErrorRow(cssClasses) {\n        var _this = _super.call(this, cssClasses) || this;\n        _this.isErrorsRow = true;\n        return _this;\n    }\n    Object.defineProperty(QuestionMatrixDropdownRenderedErrorRow.prototype, \"attributes\", {\n        get: function () {\n            return {};\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixDropdownRenderedErrorRow.prototype, \"className\", {\n        get: function () {\n            return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_5__[\"CssClassBuilder\"]()\n                .append(this.cssClasses.row)\n                .append(this.cssClasses.errorRow)\n                .toString();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionMatrixDropdownRenderedErrorRow.prototype.onAfterCreated = function () {\n        var _this = this;\n        var callback = function () {\n            _this.visible = _this.cells.some(function (cell) { return cell.question && cell.question.hasVisibleErrors; });\n        };\n        this.cells.forEach(function (cell) {\n            if (cell.question) {\n                cell.question.registerFunctionOnPropertyValueChanged(\"hasVisibleErrors\", callback);\n            }\n        });\n        callback();\n    };\n    return QuestionMatrixDropdownRenderedErrorRow;\n}(QuestionMatrixDropdownRenderedRow));\n\nvar QuestionMatrixDropdownRenderedTable = /** @class */ (function (_super) {\n    __extends(QuestionMatrixDropdownRenderedTable, _super);\n    function QuestionMatrixDropdownRenderedTable(matrix) {\n        var _this = _super.call(this) || this;\n        _this.matrix = matrix;\n        _this.renderedRowsChangedCallback = function () { };\n        _this.hasActionCellInRowsValues = {};\n        _this.build();\n        return _this;\n    }\n    Object.defineProperty(QuestionMatrixDropdownRenderedTable.prototype, \"showTable\", {\n        get: function () {\n            return this.getPropertyValue(\"showTable\", true);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixDropdownRenderedTable.prototype, \"showHeader\", {\n        get: function () {\n            return this.getPropertyValue(\"showHeader\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixDropdownRenderedTable.prototype, \"showAddRow\", {\n        get: function () {\n            return this.getPropertyValue(\"showAddRow\", false);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixDropdownRenderedTable.prototype, \"showAddRowOnTop\", {\n        get: function () {\n            return this.getPropertyValue(\"showAddRowOnTop\", false);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixDropdownRenderedTable.prototype, \"showAddRowOnBottom\", {\n        get: function () {\n            return this.getPropertyValue(\"showAddRowOnBottom\", false);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixDropdownRenderedTable.prototype, \"showFooter\", {\n        get: function () {\n            return this.matrix.hasFooter && this.matrix.isColumnLayoutHorizontal;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixDropdownRenderedTable.prototype, \"hasFooter\", {\n        get: function () {\n            return !!this.footerRow;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixDropdownRenderedTable.prototype, \"hasRemoveRows\", {\n        get: function () {\n            return this.hasRemoveRowsValue;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionMatrixDropdownRenderedTable.prototype.isRequireReset = function () {\n        return (this.hasRemoveRows != this.matrix.canRemoveRows ||\n            !this.matrix.isColumnLayoutHorizontal);\n    };\n    Object.defineProperty(QuestionMatrixDropdownRenderedTable.prototype, \"headerRow\", {\n        get: function () {\n            return this.headerRowValue;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixDropdownRenderedTable.prototype, \"footerRow\", {\n        get: function () {\n            return this.footerRowValue;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixDropdownRenderedTable.prototype, \"allowRowsDragAndDrop\", {\n        get: function () {\n            return this.matrix.allowRowsDragAndDrop && this.matrix.isColumnLayoutHorizontal;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixDropdownRenderedTable.prototype, \"showCellErrorsTop\", {\n        get: function () {\n            //todo\n            return this.matrix.getErrorLocation() === \"top\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixDropdownRenderedTable.prototype, \"showCellErrorsBottom\", {\n        get: function () {\n            //todo\n            return this.matrix.getErrorLocation() === \"bottom\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionMatrixDropdownRenderedTable.prototype.build = function () {\n        this.hasRemoveRowsValue = this.matrix.canRemoveRows;\n        //build rows now\n        var rows = this.matrix.visibleRows;\n        this.cssClasses = this.matrix.cssClasses;\n        this.buildRowsActions();\n        this.buildHeader();\n        this.buildRows();\n        this.buildFooter();\n        this.updateShowTableAndAddRow();\n    };\n    QuestionMatrixDropdownRenderedTable.prototype.updateShowTableAndAddRow = function () {\n        var showTable = this.rows.length > 0 ||\n            this.matrix.isDesignMode ||\n            !this.matrix.getShowColumnsIfEmpty();\n        this.setPropertyValue(\"showTable\", showTable);\n        var showAddRow = this.matrix.canAddRow && showTable;\n        var showAddRowOnTop = showAddRow;\n        var showAddRowOnBottom = showAddRow;\n        if (showAddRowOnTop) {\n            if (this.matrix.getAddRowLocation() === \"default\") {\n                showAddRowOnTop = !this.matrix.isColumnLayoutHorizontal;\n            }\n            else {\n                showAddRowOnTop = this.matrix.getAddRowLocation() !== \"bottom\";\n            }\n        }\n        if (showAddRowOnBottom && this.matrix.getAddRowLocation() !== \"topBottom\") {\n            showAddRowOnBottom = !showAddRowOnTop;\n        }\n        this.setPropertyValue(\"showAddRow\", this.matrix.canAddRow);\n        this.setPropertyValue(\"showAddRowOnTop\", showAddRowOnTop);\n        this.setPropertyValue(\"showAddRowOnBottom\", showAddRowOnBottom);\n    };\n    QuestionMatrixDropdownRenderedTable.prototype.onAddedRow = function (row, index) {\n        if (this.getRenderedDataRowCount() >= this.matrix.visibleRows.length)\n            return;\n        var rowIndex = this.getRenderedRowIndexByIndex(index);\n        this.rowsActions.splice(index, 0, this.buildRowActions(row));\n        this.addHorizontalRow(this.rows, row, this.matrix.visibleRows.length == 1 && !this.matrix.showHeader, rowIndex);\n        this.updateShowTableAndAddRow();\n    };\n    QuestionMatrixDropdownRenderedTable.prototype.getRenderedRowIndexByIndex = function (index) {\n        var res = 0;\n        var dataRowIndex = 0;\n        for (var i = 0; i < this.rows.length; i++) {\n            if (dataRowIndex === index) {\n                if (this.rows[i].isErrorsRow || this.rows[i].isDetailRow)\n                    res++;\n                break;\n            }\n            res++;\n            if (!(this.rows[i].isErrorsRow) && !this.rows[i].isDetailRow)\n                dataRowIndex++;\n        }\n        if (dataRowIndex < index)\n            return this.rows.length;\n        return res;\n    };\n    QuestionMatrixDropdownRenderedTable.prototype.getRenderedDataRowCount = function () {\n        var res = 0;\n        for (var i = 0; i < this.rows.length; i++) {\n            if (!(this.rows[i].isErrorsRow) && !this.rows[i].isDetailRow)\n                res++;\n        }\n        return res;\n    };\n    QuestionMatrixDropdownRenderedTable.prototype.onRemovedRow = function (row) {\n        var rowIndex = this.getRenderedRowIndex(row);\n        if (rowIndex < 0)\n            return;\n        this.rowsActions.splice(rowIndex, 1);\n        var removeCount = 1;\n        if (rowIndex < this.rows.length - 1 && this.showCellErrorsBottom &&\n            this.rows[rowIndex + 1].isErrorsRow) {\n            removeCount++;\n        }\n        if (rowIndex < this.rows.length - 1 &&\n            (this.rows[rowIndex + 1].isDetailRow ||\n                this.showCellErrorsBottom && rowIndex + 1 < this.rows.length - 1 && this.rows[rowIndex + 2].isDetailRow)) {\n            removeCount++;\n        }\n        if (rowIndex > 0 && this.showCellErrorsTop && this.rows[rowIndex - 1].isErrorsRow) {\n            rowIndex--;\n            removeCount++;\n        }\n        this.rows.splice(rowIndex, removeCount);\n        this.updateShowTableAndAddRow();\n    };\n    QuestionMatrixDropdownRenderedTable.prototype.onDetailPanelChangeVisibility = function (row, isShowing) {\n        var rowIndex = this.getRenderedRowIndex(row);\n        if (rowIndex < 0)\n            return;\n        var currentIndex = rowIndex;\n        if (this.showCellErrorsBottom)\n            currentIndex++;\n        var panelRowIndex = currentIndex < this.rows.length - 1 && this.rows[currentIndex + 1].isDetailRow\n            ? currentIndex + 1\n            : -1;\n        if ((isShowing && panelRowIndex > -1) || (!isShowing && panelRowIndex < 0))\n            return;\n        if (isShowing) {\n            var detailRow = this.createDetailPanelRow(row, this.rows[rowIndex]);\n            this.rows.splice(currentIndex + 1, 0, detailRow);\n        }\n        else {\n            this.rows.splice(panelRowIndex, 1);\n        }\n    };\n    QuestionMatrixDropdownRenderedTable.prototype.getRenderedRowIndex = function (row) {\n        for (var i = 0; i < this.rows.length; i++) {\n            if (this.rows[i].row == row)\n                return i;\n        }\n        return -1;\n    };\n    QuestionMatrixDropdownRenderedTable.prototype.buildRowsActions = function () {\n        this.rowsActions = [];\n        var rows = this.matrix.visibleRows;\n        for (var i = 0; i < rows.length; i++) {\n            this.rowsActions.push(this.buildRowActions(rows[i]));\n        }\n    };\n    QuestionMatrixDropdownRenderedTable.prototype.createRenderedRow = function (cssClasses, isDetailRow) {\n        if (isDetailRow === void 0) { isDetailRow = false; }\n        return new QuestionMatrixDropdownRenderedRow(cssClasses, isDetailRow);\n    };\n    QuestionMatrixDropdownRenderedTable.prototype.createErrorRenderedRow = function (cssClasses) {\n        return new QuestionMatrixDropdownRenderedErrorRow(cssClasses);\n    };\n    QuestionMatrixDropdownRenderedTable.prototype.buildHeader = function () {\n        var colHeaders = this.matrix.isColumnLayoutHorizontal && this.matrix.showHeader;\n        var isShown = colHeaders ||\n            (this.matrix.hasRowText && !this.matrix.isColumnLayoutHorizontal);\n        this.setPropertyValue(\"showHeader\", isShown);\n        if (!isShown)\n            return;\n        this.headerRowValue = this.createRenderedRow(this.cssClasses);\n        if (this.allowRowsDragAndDrop) {\n            this.headerRow.cells.push(this.createHeaderCell(null, \"action\"));\n        }\n        if (this.hasActionCellInRows(\"start\")) {\n            this.headerRow.cells.push(this.createHeaderCell(null, \"action\"));\n        }\n        if (this.matrix.hasRowText && this.matrix.showHeader) {\n            this.headerRow.cells.push(this.createHeaderCell(null));\n        }\n        if (this.matrix.isColumnLayoutHorizontal) {\n            for (var i = 0; i < this.matrix.visibleColumns.length; i++) {\n                var column = this.matrix.visibleColumns[i];\n                if (!column.isColumnVisible)\n                    continue;\n                if (this.matrix.IsMultiplyColumn(column)) {\n                    this.createMutlipleColumnsHeader(column);\n                }\n                else {\n                    this.headerRow.cells.push(this.createHeaderCell(column));\n                }\n            }\n        }\n        else {\n            var rows = this.matrix.visibleRows;\n            for (var i = 0; i < rows.length; i++) {\n                var cell = this.createTextCell(rows[i].locText);\n                this.setHeaderCellCssClasses(cell);\n                cell.row = rows[i];\n                this.headerRow.cells.push(cell);\n            }\n            if (this.matrix.hasFooter) {\n                var cell = this.createTextCell(this.matrix.getFooterText());\n                this.setHeaderCellCssClasses(cell);\n                this.headerRow.cells.push(cell);\n            }\n        }\n        if (this.hasActionCellInRows(\"end\")) {\n            this.headerRow.cells.push(this.createHeaderCell(null, \"action\"));\n        }\n    };\n    QuestionMatrixDropdownRenderedTable.prototype.buildFooter = function () {\n        if (!this.showFooter)\n            return;\n        this.footerRowValue = this.createRenderedRow(this.cssClasses);\n        if (this.allowRowsDragAndDrop) {\n            this.footerRow.cells.push(this.createHeaderCell(null));\n        }\n        if (this.hasActionCellInRows(\"start\")) {\n            this.footerRow.cells.push(this.createHeaderCell(null));\n        }\n        if (this.matrix.hasRowText) {\n            this.footerRow.cells.push(this.createTextCell(this.matrix.getFooterText()));\n        }\n        var cells = this.matrix.visibleTotalRow.cells;\n        for (var i = 0; i < cells.length; i++) {\n            var cell = cells[i];\n            if (!cell.column.isColumnVisible)\n                continue;\n            if (this.matrix.IsMultiplyColumn(cell.column)) {\n                this.createMutlipleColumnsFooter(this.footerRow, cell);\n            }\n            else {\n                var editCell = this.createEditCell(cell);\n                if (cell.column) {\n                    this.setHeaderCellWidth(cell.column, editCell);\n                }\n                this.footerRow.cells.push(editCell);\n            }\n        }\n        if (this.hasActionCellInRows(\"end\")) {\n            this.footerRow.cells.push(this.createHeaderCell(null));\n        }\n    };\n    QuestionMatrixDropdownRenderedTable.prototype.buildRows = function () {\n        var rows = this.matrix.isColumnLayoutHorizontal\n            ? this.buildHorizontalRows()\n            : this.buildVerticalRows();\n        this.rows = rows;\n    };\n    QuestionMatrixDropdownRenderedTable.prototype.hasActionCellInRows = function (location) {\n        if (this.hasActionCellInRowsValues[location] === undefined) {\n            this.hasActionCellInRowsValues[location] = this.hasActionsCellInLocaltion(location);\n        }\n        return this.hasActionCellInRowsValues[location];\n    };\n    QuestionMatrixDropdownRenderedTable.prototype.hasActionsCellInLocaltion = function (location) {\n        var _this = this;\n        if (location == \"end\" && this.hasRemoveRows)\n            return true;\n        return this.matrix.visibleRows.some(function (row, index) { return !_this.isValueEmpty(_this.getRowActions(index, location)); });\n    };\n    QuestionMatrixDropdownRenderedTable.prototype.canRemoveRow = function (row) {\n        return this.matrix.canRemoveRow(row);\n    };\n    QuestionMatrixDropdownRenderedTable.prototype.buildHorizontalRows = function () {\n        var rows = this.matrix.visibleRows;\n        var renderedRows = [];\n        for (var i = 0; i < rows.length; i++) {\n            this.addHorizontalRow(renderedRows, rows[i], i == 0 && !this.matrix.showHeader);\n        }\n        return renderedRows;\n    };\n    QuestionMatrixDropdownRenderedTable.prototype.addHorizontalRow = function (renderedRows, row, useAsHeader, index) {\n        if (index === void 0) { index = -1; }\n        var renderedRow = this.createHorizontalRow(row, useAsHeader);\n        var errorRow = this.createErrorRow(renderedRow);\n        renderedRow.row = row;\n        if (index < 0) {\n            index = renderedRows.length;\n        }\n        if (this.matrix.isMobile) {\n            var cells = [];\n            for (var i = 0; i < renderedRow.cells.length; i++) {\n                if (this.showCellErrorsTop && !errorRow.cells[i].isEmpty) {\n                    cells.push(errorRow.cells[i]);\n                }\n                cells.push(renderedRow.cells[i]);\n                if (this.showCellErrorsBottom && !errorRow.cells[i].isEmpty) {\n                    cells.push(errorRow.cells[i]);\n                }\n            }\n            renderedRow.cells = cells;\n            renderedRows.splice(index, 0, renderedRow);\n        }\n        else {\n            renderedRows.splice.apply(renderedRows, __spreadArray([index, 0], (this.showCellErrorsTop ? [errorRow, renderedRow] : [renderedRow, errorRow])));\n            index++;\n        }\n        if (row.isDetailPanelShowing) {\n            renderedRows.splice(index + 1, 0, this.createDetailPanelRow(row, renderedRow));\n        }\n    };\n    QuestionMatrixDropdownRenderedTable.prototype.getRowDragCell = function (rowIndex) {\n        var cell = new QuestionMatrixDropdownRenderedCell();\n        cell.isDragHandlerCell = true;\n        cell.className = this.getActionsCellClassName(cell);\n        cell.row = this.matrix.visibleRows[rowIndex];\n        return cell;\n    };\n    QuestionMatrixDropdownRenderedTable.prototype.getActionsCellClassName = function (cell) {\n        if (cell === void 0) { cell = null; }\n        return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_5__[\"CssClassBuilder\"]().append(this.cssClasses.actionsCell).append(this.cssClasses.actionsCellDrag, cell === null || cell === void 0 ? void 0 : cell.isDragHandlerCell).append(this.cssClasses.verticalCell, !this.matrix.isColumnLayoutHorizontal).toString();\n    };\n    QuestionMatrixDropdownRenderedTable.prototype.getRowActionsCell = function (rowIndex, location) {\n        var rowActions = this.getRowActions(rowIndex, location);\n        if (!this.isValueEmpty(rowActions)) {\n            var cell = new QuestionMatrixDropdownRenderedCell();\n            var actionContainer = this.matrix.allowAdaptiveActions ? new _actions_adaptive_container__WEBPACK_IMPORTED_MODULE_4__[\"AdaptiveActionContainer\"]() : new _actions_container__WEBPACK_IMPORTED_MODULE_6__[\"ActionContainer\"]();\n            if (!!this.matrix.survey && this.matrix.survey.getCss().actionBar) {\n                actionContainer.cssClasses = this.matrix.survey.getCss().actionBar;\n            }\n            actionContainer.setItems(rowActions);\n            var itemValue = new _itemvalue__WEBPACK_IMPORTED_MODULE_2__[\"ItemValue\"](actionContainer);\n            cell.item = itemValue;\n            cell.isActionsCell = true;\n            cell.isDragHandlerCell = false;\n            cell.className = this.getActionsCellClassName(cell);\n            cell.row = this.matrix.visibleRows[rowIndex];\n            return cell;\n        }\n        return null;\n    };\n    QuestionMatrixDropdownRenderedTable.prototype.getRowActions = function (rowIndex, location) {\n        var actions = this.rowsActions[rowIndex];\n        if (!Array.isArray(actions))\n            return [];\n        return actions.filter(function (action) {\n            if (!action.location) {\n                action.location = \"start\";\n            }\n            return action.location === location;\n        });\n    };\n    QuestionMatrixDropdownRenderedTable.prototype.buildRowActions = function (row) {\n        var actions = [];\n        this.setDefaultRowActions(row, actions);\n        if (!!this.matrix.survey) {\n            actions = this.matrix.survey.getUpdatedMatrixRowActions(this.matrix, row, actions);\n        }\n        return actions;\n    };\n    Object.defineProperty(QuestionMatrixDropdownRenderedTable.prototype, \"showRemoveButtonAsIcon\", {\n        get: function () {\n            return (_settings__WEBPACK_IMPORTED_MODULE_7__[\"settings\"].matrix.renderRemoveAsIcon && this.matrix.survey && this.matrix.survey.css.root === \"sd-root-modern\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionMatrixDropdownRenderedTable.prototype.setDefaultRowActions = function (row, actions) {\n        var matrix = this.matrix;\n        if (this.hasRemoveRows && this.canRemoveRow(row)) {\n            if (!this.showRemoveButtonAsIcon) {\n                actions.push(new _actions_action__WEBPACK_IMPORTED_MODULE_3__[\"Action\"]({\n                    id: \"remove-row\",\n                    location: \"end\",\n                    enabled: !this.matrix.isInputReadOnly,\n                    component: \"sv-matrix-remove-button\",\n                    data: { row: row, question: this.matrix },\n                }));\n            }\n            else {\n                actions.push(new _actions_action__WEBPACK_IMPORTED_MODULE_3__[\"Action\"]({\n                    id: \"remove-row\",\n                    iconName: \"icon-delete\",\n                    iconSize: \"auto\",\n                    component: \"sv-action-bar-item\",\n                    innerCss: new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_5__[\"CssClassBuilder\"]().append(this.matrix.cssClasses.button).append(this.matrix.cssClasses.buttonRemove).toString(),\n                    location: \"end\",\n                    showTitle: false,\n                    title: matrix.removeRowText,\n                    enabled: !matrix.isInputReadOnly,\n                    data: { row: row, question: matrix },\n                    action: function () {\n                        matrix.removeRowUI(row);\n                    },\n                }));\n            }\n        }\n        if (row.hasPanel) {\n            actions.push(new _actions_action__WEBPACK_IMPORTED_MODULE_3__[\"Action\"]({\n                id: \"show-detail\",\n                title: this.matrix.getLocalizationString(\"editText\"),\n                showTitle: false,\n                location: \"start\",\n                component: \"sv-matrix-detail-button\",\n                data: { row: row, question: this.matrix },\n            }));\n        }\n    };\n    QuestionMatrixDropdownRenderedTable.prototype.createErrorRow = function (row) {\n        var res = this.createErrorRenderedRow(this.cssClasses);\n        for (var i = 0; i < row.cells.length; i++) {\n            var cell = row.cells[i];\n            if (!cell.hasQuestion) {\n                res.cells.push(this.createEmptyCell(true));\n            }\n            else if (this.matrix.IsMultiplyColumn(cell.cell.column)) {\n                if (cell.isFirstChoice) {\n                    res.cells.push(this.createErrorCell(cell.cell));\n                }\n                else {\n                    res.cells.push(this.createEmptyCell(true));\n                }\n            }\n            else {\n                res.cells.push(this.createErrorCell(cell.cell));\n            }\n        }\n        res.onAfterCreated();\n        return res;\n    };\n    QuestionMatrixDropdownRenderedTable.prototype.createHorizontalRow = function (row, useAsHeader) {\n        var res = this.createRenderedRow(this.cssClasses);\n        if (this.allowRowsDragAndDrop) {\n            var rowIndex = this.matrix.visibleRows.indexOf(row);\n            res.cells.push(this.getRowDragCell(rowIndex));\n        }\n        this.addRowActionsCell(row, res, \"start\");\n        if (this.matrix.hasRowText) {\n            var renderedCell = this.createTextCell(row.locText);\n            renderedCell.row = row;\n            res.cells.push(renderedCell);\n            if (useAsHeader) {\n                this.setHeaderCellWidth(null, renderedCell);\n            }\n            renderedCell.className = new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_5__[\"CssClassBuilder\"]()\n                .append(renderedCell.className)\n                .append(this.cssClasses.rowTextCell)\n                .append(this.cssClasses.columnTitleCell, !this.matrix.isColumnLayoutHorizontal)\n                .append(this.cssClasses.detailRowText, row.hasPanel)\n                .toString();\n        }\n        for (var i = 0; i < row.cells.length; i++) {\n            var cell = row.cells[i];\n            if (!cell.column.isColumnVisible)\n                continue;\n            if (this.matrix.IsMultiplyColumn(cell.column)) {\n                this.createMutlipleEditCells(res, cell);\n            }\n            else {\n                if (cell.column.isShowInMultipleColumns) {\n                    cell.question.visibleChoices.map(function (c) { return c.hideCaption = false; });\n                }\n                var renderedCell = this.createEditCell(cell);\n                res.cells.push(renderedCell);\n                if (useAsHeader) {\n                    this.setHeaderCellWidth(cell.column, renderedCell);\n                }\n            }\n        }\n        this.addRowActionsCell(row, res, \"end\");\n        return res;\n    };\n    QuestionMatrixDropdownRenderedTable.prototype.addRowActionsCell = function (row, renderedRow, location) {\n        var rowIndex = this.matrix.visibleRows.indexOf(row);\n        if (this.hasActionCellInRows(location)) {\n            var actions = this.getRowActionsCell(rowIndex, location);\n            if (!!actions) {\n                renderedRow.cells.push(actions);\n            }\n            else {\n                var cell = new QuestionMatrixDropdownRenderedCell();\n                cell.isEmpty = true;\n                renderedRow.cells.push(cell);\n            }\n        }\n    };\n    QuestionMatrixDropdownRenderedTable.prototype.createDetailPanelRow = function (row, renderedRow) {\n        var panelFullWidth = this.matrix.isDesignMode;\n        var res = this.createRenderedRow(this.cssClasses, true);\n        res.row = row;\n        var buttonCell = new QuestionMatrixDropdownRenderedCell();\n        if (this.matrix.hasRowText) {\n            buttonCell.colSpans = 2;\n        }\n        buttonCell.isEmpty = true;\n        if (!panelFullWidth)\n            res.cells.push(buttonCell);\n        var actionsCell = null;\n        if (this.hasActionCellInRows(\"end\")) {\n            actionsCell = new QuestionMatrixDropdownRenderedCell();\n            actionsCell.isEmpty = true;\n        }\n        var cell = new QuestionMatrixDropdownRenderedCell();\n        cell.panel = row.detailPanel;\n        cell.colSpans =\n            renderedRow.cells.length -\n                (!panelFullWidth ? buttonCell.colSpans : 0) -\n                (!!actionsCell ? actionsCell.colSpans : 0);\n        cell.className = this.cssClasses.detailPanelCell;\n        res.cells.push(cell);\n        if (!!actionsCell) {\n            res.cells.push(actionsCell);\n        }\n        if (typeof this.matrix.onCreateDetailPanelRenderedRowCallback === \"function\") {\n            this.matrix.onCreateDetailPanelRenderedRowCallback(res);\n        }\n        return res;\n    };\n    QuestionMatrixDropdownRenderedTable.prototype.buildVerticalRows = function () {\n        var columns = this.matrix.columns;\n        var renderedRows = [];\n        for (var i = 0; i < columns.length; i++) {\n            var col = columns[i];\n            if (col.isColumnVisible) {\n                if (this.matrix.IsMultiplyColumn(col)) {\n                    this.createMutlipleVerticalRows(renderedRows, col, i);\n                }\n                else {\n                    var renderedRow = this.createVerticalRow(col, i);\n                    var errorRow = this.createErrorRow(renderedRow);\n                    if (this.showCellErrorsTop) {\n                        renderedRows.push(errorRow);\n                        renderedRows.push(renderedRow);\n                    }\n                    else {\n                        renderedRows.push(renderedRow);\n                        renderedRows.push(errorRow);\n                    }\n                }\n            }\n        }\n        if (this.hasActionCellInRows(\"end\")) {\n            renderedRows.push(this.createEndVerticalActionRow());\n        }\n        return renderedRows;\n    };\n    QuestionMatrixDropdownRenderedTable.prototype.createMutlipleVerticalRows = function (renderedRows, column, index) {\n        var choices = this.getMultipleColumnChoices(column);\n        if (!choices)\n            return;\n        for (var i = 0; i < choices.length; i++) {\n            var renderedRow = this.createVerticalRow(column, index, choices[i], i);\n            var errorRow = this.createErrorRow(renderedRow);\n            if (this.showCellErrorsTop) {\n                renderedRows.push(errorRow);\n                renderedRows.push(renderedRow);\n            }\n            else {\n                renderedRows.push(renderedRow);\n                renderedRows.push(errorRow);\n            }\n        }\n    };\n    QuestionMatrixDropdownRenderedTable.prototype.createVerticalRow = function (column, index, choice, choiceIndex) {\n        if (choice === void 0) { choice = null; }\n        if (choiceIndex === void 0) { choiceIndex = -1; }\n        var res = this.createRenderedRow(this.cssClasses);\n        if (this.matrix.showHeader) {\n            var lTitle = !!choice ? choice.locText : column.locTitle;\n            var hCell = this.createTextCell(lTitle);\n            hCell.column = column;\n            hCell.className = new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_5__[\"CssClassBuilder\"]()\n                .append(hCell.className)\n                .append(this.cssClasses.rowTextCell)\n                .append(this.cssClasses.columnTitleCell).toString();\n            if (!choice) {\n                this.setRequriedToHeaderCell(column, hCell);\n            }\n            res.cells.push(hCell);\n        }\n        var rows = this.matrix.visibleRows;\n        for (var i = 0; i < rows.length; i++) {\n            var rChoice = choice;\n            var rChoiceIndex = choiceIndex >= 0 ? choiceIndex : i;\n            var cell = rows[i].cells[index];\n            var visChoices = !!choice ? cell.question.visibleChoices : undefined;\n            if (!!visChoices && rChoiceIndex < visChoices.length) {\n                rChoice = visChoices[rChoiceIndex];\n            }\n            var rCell = this.createEditCell(cell, rChoice);\n            rCell.item = rChoice;\n            rCell.choiceIndex = rChoiceIndex;\n            res.cells.push(rCell);\n        }\n        if (this.matrix.hasTotal) {\n            res.cells.push(this.createEditCell(this.matrix.visibleTotalRow.cells[index]));\n        }\n        return res;\n    };\n    QuestionMatrixDropdownRenderedTable.prototype.createEndVerticalActionRow = function () {\n        var res = this.createRenderedRow(this.cssClasses);\n        if (this.matrix.showHeader) {\n            res.cells.push(this.createEmptyCell());\n        }\n        var rows = this.matrix.visibleRows;\n        for (var i = 0; i < rows.length; i++) {\n            res.cells.push(this.getRowActionsCell(i, \"end\"));\n        }\n        if (this.matrix.hasTotal) {\n            res.cells.push(this.createEmptyCell());\n        }\n        return res;\n    };\n    QuestionMatrixDropdownRenderedTable.prototype.createMutlipleEditCells = function (rRow, cell, isFooter) {\n        if (isFooter === void 0) { isFooter = false; }\n        var choices = isFooter\n            ? this.getMultipleColumnChoices(cell.column)\n            : cell.question.visibleChoices;\n        if (!choices)\n            return;\n        for (var i = 0; i < choices.length; i++) {\n            var rCell = this.createEditCell(cell, !isFooter ? choices[i] : undefined);\n            if (!isFooter) {\n                //rCell.item = choices[i];\n                this.setItemCellCssClasses(rCell);\n                rCell.choiceIndex = i;\n            }\n            rRow.cells.push(rCell);\n        }\n    };\n    QuestionMatrixDropdownRenderedTable.prototype.setItemCellCssClasses = function (cell) {\n        cell.className = new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_5__[\"CssClassBuilder\"]()\n            .append(this.cssClasses.itemCell)\n            .append(this.cssClasses.radioCell, cell.isRadio)\n            .append(this.cssClasses.checkboxCell, cell.isCheckbox)\n            .toString();\n    };\n    QuestionMatrixDropdownRenderedTable.prototype.createEditCell = function (cell, choiceItem) {\n        if (choiceItem === void 0) { choiceItem = undefined; }\n        var res = new QuestionMatrixDropdownRenderedCell();\n        res.cell = cell;\n        res.row = cell.row;\n        res.question = cell.question;\n        res.matrix = this.matrix;\n        res.item = choiceItem;\n        res.isOtherChoice = !!choiceItem && !!cell.question && cell.question.otherItem === choiceItem;\n        res.className = res.calculateFinalClassName(this.cssClasses);\n        return res;\n    };\n    QuestionMatrixDropdownRenderedTable.prototype.createErrorCell = function (cell, choiceItem) {\n        if (choiceItem === void 0) { choiceItem = undefined; }\n        var res = new QuestionMatrixDropdownRenderedCell();\n        res.question = cell.question;\n        res.row = cell.row;\n        res.matrix = this.matrix;\n        res.isErrorsCell = true;\n        res.className = new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_5__[\"CssClassBuilder\"]()\n            .append(this.cssClasses.cell)\n            .append(this.cssClasses.errorsCell)\n            .append(this.cssClasses.errorsCellTop, this.showCellErrorsTop)\n            .append(this.cssClasses.errorsCellBottom, this.showCellErrorsBottom)\n            .toString();\n        return res;\n    };\n    QuestionMatrixDropdownRenderedTable.prototype.createMutlipleColumnsFooter = function (rRow, cell) {\n        this.createMutlipleEditCells(rRow, cell, true);\n    };\n    QuestionMatrixDropdownRenderedTable.prototype.createMutlipleColumnsHeader = function (column) {\n        var choices = this.getMultipleColumnChoices(column);\n        if (!choices)\n            return;\n        for (var i = 0; i < choices.length; i++) {\n            var cell = this.createTextCell(choices[i].locText);\n            this.setHeaderCell(column, cell);\n            this.setHeaderCellCssClasses(cell);\n            this.headerRow.cells.push(cell);\n        }\n    };\n    QuestionMatrixDropdownRenderedTable.prototype.getMultipleColumnChoices = function (column) {\n        var choices = column.templateQuestion.choices;\n        if (!!choices && Array.isArray(choices) && choices.length == 0)\n            return this.matrix.choices;\n        choices = column.getVisibleMultipleChoices();\n        if (!choices || !Array.isArray(choices))\n            return null;\n        return choices;\n    };\n    QuestionMatrixDropdownRenderedTable.prototype.setHeaderCellCssClasses = function (cell, cellType) {\n        cell.className = new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_5__[\"CssClassBuilder\"]()\n            .append(this.cssClasses.headerCell)\n            .append(this.cssClasses.columnTitleCell, this.matrix.isColumnLayoutHorizontal)\n            .append(this.cssClasses.emptyCell, !!cell.isEmpty)\n            .append(this.cssClasses.cell + \"--\" + cellType, !!cellType)\n            .toString();\n    };\n    QuestionMatrixDropdownRenderedTable.prototype.createHeaderCell = function (column, cellType) {\n        if (cellType === void 0) { cellType = null; }\n        var cell = !!column ? this.createTextCell(column.locTitle) : this.createEmptyCell();\n        cell.column = column;\n        this.setHeaderCell(column, cell);\n        if (!cellType)\n            cellType = (!!column && column.cellType !== \"default\") ? column.cellType : this.matrix.cellType;\n        this.setHeaderCellCssClasses(cell, cellType);\n        return cell;\n    };\n    QuestionMatrixDropdownRenderedTable.prototype.setHeaderCell = function (column, cell) {\n        this.setHeaderCellWidth(column, cell);\n        this.setRequriedToHeaderCell(column, cell);\n    };\n    QuestionMatrixDropdownRenderedTable.prototype.setHeaderCellWidth = function (column, cell) {\n        cell.minWidth = column != null ? this.matrix.getColumnWidth(column) : this.matrix.getRowTitleWidth();\n        cell.width = column != null ? column.width : this.matrix.getRowTitleWidth();\n    };\n    QuestionMatrixDropdownRenderedTable.prototype.setRequriedToHeaderCell = function (column, cell) {\n        if (!!column && column.isRequired && this.matrix.survey) {\n            cell.requiredText = this.matrix.survey.requiredText;\n        }\n    };\n    QuestionMatrixDropdownRenderedTable.prototype.createRemoveRowCell = function (row) {\n        var res = new QuestionMatrixDropdownRenderedCell();\n        res.row = row;\n        res.isRemoveRow = this.canRemoveRow(row);\n        if (!!this.cssClasses.cell) {\n            res.className = this.cssClasses.cell;\n        }\n        return res;\n    };\n    QuestionMatrixDropdownRenderedTable.prototype.createTextCell = function (locTitle) {\n        var cell = new QuestionMatrixDropdownRenderedCell();\n        cell.locTitle = locTitle;\n        if (!!locTitle) {\n            locTitle.strChanged();\n        }\n        if (!!this.cssClasses.cell) {\n            cell.className = this.cssClasses.cell;\n        }\n        return cell;\n    };\n    QuestionMatrixDropdownRenderedTable.prototype.createEmptyCell = function (isError) {\n        if (isError === void 0) { isError = false; }\n        var res = this.createTextCell(null);\n        res.isEmpty = true;\n        res.className = new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_5__[\"CssClassBuilder\"]()\n            .append(this.cssClasses.cell)\n            .append(this.cssClasses.emptyCell)\n            .append(this.cssClasses.errorsCell, isError)\n            .toString();\n        return res;\n    };\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"propertyArray\"])({\n            onPush: function (_, i, target) {\n                target.renderedRowsChangedCallback();\n            },\n        })\n    ], QuestionMatrixDropdownRenderedTable.prototype, \"rows\", void 0);\n    return QuestionMatrixDropdownRenderedTable;\n}(_base__WEBPACK_IMPORTED_MODULE_1__[\"Base\"]));\n\n\n\n/***/ }),\n\n/***/ \"./src/question_matrixdynamic.ts\":\n/*!***************************************!*\\\n  !*** ./src/question_matrixdynamic.ts ***!\n  \\***************************************/\n/*! exports provided: MatrixDynamicRowModel, QuestionMatrixDynamicModel */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_3188420__) {\n\n\"use strict\";\n__nested_webpack_require_3188420__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_3188420__.d(__nested_webpack_exports__, \"MatrixDynamicRowModel\", function() { return MatrixDynamicRowModel; });\n/* harmony export (binding) */ __nested_webpack_require_3188420__.d(__nested_webpack_exports__, \"QuestionMatrixDynamicModel\", function() { return QuestionMatrixDynamicModel; });\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_3188420__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_3188420__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\n/* harmony import */ var _question_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_3188420__(/*! ./question_matrixdropdownbase */ \"./src/question_matrixdropdownbase.ts\");\n/* harmony import */ var _error__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_3188420__(/*! ./error */ \"./src/error.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_3188420__(/*! ./settings */ \"./src/settings.ts\");\n/* harmony import */ var _utils_utils__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_3188420__(/*! ./utils/utils */ \"./src/utils/utils.ts\");\n/* harmony import */ var _dragdrop_matrix_rows__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_3188420__(/*! ./dragdrop/matrix-rows */ \"./src/dragdrop/matrix-rows.ts\");\n/* harmony import */ var _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_3188420__(/*! ./utils/cssClassBuilder */ \"./src/utils/cssClassBuilder.ts\");\n/* harmony import */ var _question_matrixdropdownrendered__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_3188420__(/*! ./question_matrixdropdownrendered */ \"./src/question_matrixdropdownrendered.ts\");\n/* harmony import */ var _utils_dragOrClickHelper__WEBPACK_IMPORTED_MODULE_9__ = __nested_webpack_require_3188420__(/*! ./utils/dragOrClickHelper */ \"./src/utils/dragOrClickHelper.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n\n\n\n\n\n\n\n\n\n\nvar MatrixDynamicRowModel = /** @class */ (function (_super) {\n    __extends(MatrixDynamicRowModel, _super);\n    function MatrixDynamicRowModel(index, data, value) {\n        var _this = _super.call(this, data, value) || this;\n        _this.index = index;\n        _this.buildCells(value);\n        return _this;\n    }\n    Object.defineProperty(MatrixDynamicRowModel.prototype, \"rowName\", {\n        get: function () {\n            return this.id;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MatrixDynamicRowModel.prototype, \"shortcutText\", {\n        get: function () {\n            var matrix = this.data;\n            var index = matrix.visibleRows.indexOf(this) + 1;\n            var questionValue1 = this.cells.length > 1 ? this.cells[1][\"questionValue\"] : undefined;\n            var questionValue0 = this.cells.length > 0 ? this.cells[0][\"questionValue\"] : undefined;\n            return (questionValue1 && questionValue1.value ||\n                questionValue0 && questionValue0.value ||\n                \"\" + index);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    return MatrixDynamicRowModel;\n}(_question_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_2__[\"MatrixDropdownRowModelBase\"]));\n\n/**\n  * A class that describes the Dynamic Matrix question type.\n  *\n  * Dynamic Matrix allows respondents to add and delete matrix rows. You can use the [Dropdown](https://surveyjs.io/form-library/documentation/questiondropdownmodel), [Checkbox](https://surveyjs.io/form-library/documentation/questioncheckboxmodel), [Radiogroup](https://surveyjs.io/form-library/documentation/questionradiogroupmodel), [Text](https://surveyjs.io/form-library/documentation/questiontextmodel), and [Comment](https://surveyjs.io/form-library/documentation/questioncommentmodel) question types as cell editors.\n  *\n  * [View Demo](https://surveyjs.io/form-library/examples/questiontype-matrixdynamic/ (linkStyle))\n  */\nvar QuestionMatrixDynamicModel = /** @class */ (function (_super) {\n    __extends(QuestionMatrixDynamicModel, _super);\n    function QuestionMatrixDynamicModel(name) {\n        var _this = _super.call(this, name) || this;\n        _this.rowCounter = 0;\n        _this.initialRowCount = 2;\n        _this.setRowCountValueFromData = false;\n        _this.startDragMatrixRow = function (event, currentTarget) {\n            _this.dragDropMatrixRows.startDrag(event, _this.draggedRow, _this, event.target);\n        };\n        _this.createLocalizableString(\"confirmDeleteText\", _this, false, \"confirmDelete\");\n        var locAddRowText = _this.createLocalizableString(\"addRowText\", _this);\n        locAddRowText.onGetTextCallback = function (text) {\n            return !!text ? text : _this.defaultAddRowText;\n        };\n        _this.createLocalizableString(\"removeRowText\", _this, false, \"removeRow\");\n        _this.createLocalizableString(\"emptyRowsText\", _this, false, true);\n        _this.registerPropertyChangedHandlers([\"hideColumnsIfEmpty\", \"allowAddRows\"], function () {\n            _this.updateShowTableAndAddRow();\n        });\n        _this.registerPropertyChangedHandlers([\"allowRowsDragAndDrop\"], function () { _this.clearRowsAndResetRenderedTable(); });\n        _this.dragOrClickHelper = new _utils_dragOrClickHelper__WEBPACK_IMPORTED_MODULE_9__[\"DragOrClickHelper\"](_this.startDragMatrixRow);\n        return _this;\n    }\n    QuestionMatrixDynamicModel.prototype.setSurveyImpl = function (value, isLight) {\n        _super.prototype.setSurveyImpl.call(this, value, isLight);\n        this.dragDropMatrixRows = new _dragdrop_matrix_rows__WEBPACK_IMPORTED_MODULE_6__[\"DragDropMatrixRows\"](this.survey, null, true);\n    };\n    QuestionMatrixDynamicModel.prototype.isBanStartDrag = function (pointerDownEvent) {\n        var target = pointerDownEvent.target;\n        return target.getAttribute(\"contenteditable\") === \"true\" || target.nodeName === \"INPUT\" || !this.isDragHandleAreaValid(target);\n    };\n    QuestionMatrixDynamicModel.prototype.isDragHandleAreaValid = function (node) {\n        if (this.survey.matrixDragHandleArea === \"icon\") {\n            return node.classList.contains(this.cssClasses.dragElementDecorator);\n        }\n        return true;\n    };\n    QuestionMatrixDynamicModel.prototype.onPointerDown = function (pointerDownEvent, row) {\n        if (!row || !this.allowRowsDragAndDrop)\n            return;\n        if (this.isBanStartDrag(pointerDownEvent))\n            return;\n        if (row.isDetailPanelShowing)\n            return;\n        this.draggedRow = row;\n        this.dragOrClickHelper.onPointerDown(pointerDownEvent);\n    };\n    QuestionMatrixDynamicModel.prototype.getType = function () {\n        return \"matrixdynamic\";\n    };\n    Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"isRowsDynamic\", {\n        get: function () {\n            return true;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"confirmDelete\", {\n        /**\n         * Specifies whether to display a confirmation dialog when a respondent wants to delete a row.\n         *\n         * Default value: `false`\n         * @see confirmDeleteText\n         */\n        get: function () {\n            return this.getPropertyValue(\"confirmDelete\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"confirmDelete\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"isValueArray\", {\n        get: function () { return true; },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"keyName\", {\n        /**\n         * Specifies a key column. Set this property to a column name, and the question will display `keyDuplicationError` if a user tries to enter a duplicate value in this column.\n         * @see keyDuplicationError\n         */\n        get: function () {\n            return this.getPropertyValue(\"keyName\", \"\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"keyName\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"defaultRowValue\", {\n        /**\n         * If it is not empty, then this value is set to every new row, including rows created initially, unless the defaultValue is not empty\n         * @see defaultValue\n         * @see defaultValueFromLastRow\n         */\n        get: function () {\n            return this.getPropertyValue(\"defaultRowValue\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"defaultRowValue\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"defaultValueFromLastRow\", {\n        /**\n         * Specifies whether default values for a new row/column should be copied from the last row/column.\n         *\n         * If you also specify `defaultValue`, it will be merged with the copied values.\n         * @see defaultValue\n         */\n        get: function () {\n            return this.getPropertyValue(\"defaultValueFromLastRow\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"defaultValueFromLastRow\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionMatrixDynamicModel.prototype.isDefaultValueEmpty = function () {\n        return (_super.prototype.isDefaultValueEmpty.call(this) && this.isValueEmpty(this.defaultRowValue));\n    };\n    QuestionMatrixDynamicModel.prototype.valueFromData = function (val) {\n        if (this.minRowCount < 1)\n            return _super.prototype.valueFromData.call(this, val);\n        if (!Array.isArray(val))\n            val = [];\n        for (var i = val.length; i < this.minRowCount; i++)\n            val.push({});\n        return val;\n    };\n    QuestionMatrixDynamicModel.prototype.isNewValueCorrect = function (val) {\n        return Array.isArray(val);\n    };\n    QuestionMatrixDynamicModel.prototype.setDefaultValue = function () {\n        if (this.isValueEmpty(this.defaultRowValue) ||\n            !this.isValueEmpty(this.defaultValue)) {\n            _super.prototype.setDefaultValue.call(this);\n            return;\n        }\n        if (!this.isEmpty() || this.rowCount == 0)\n            return;\n        var newValue = [];\n        for (var i = 0; i < this.rowCount; i++) {\n            newValue.push(this.defaultRowValue);\n        }\n        this.value = newValue;\n    };\n    QuestionMatrixDynamicModel.prototype.moveRowByIndex = function (fromIndex, toIndex) {\n        var value = this.createNewValue();\n        if (!Array.isArray(value) && Math.max(fromIndex, toIndex) >= value.length)\n            return;\n        var movableRow = value[fromIndex];\n        value.splice(fromIndex, 1);\n        value.splice(toIndex, 0, movableRow);\n        this.value = value;\n    };\n    QuestionMatrixDynamicModel.prototype.clearOnDrop = function () {\n        if (!this.isEditingSurveyElement) {\n            this.resetRenderedTable();\n        }\n    };\n    QuestionMatrixDynamicModel.prototype.initDataUI = function () {\n        if (!this.generatedVisibleRows) {\n            this.visibleRows;\n        }\n    };\n    Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"rowCount\", {\n        /**\n         * The number of rows in the matrix.\n         * @see minRowCount\n         * @see maxRowCount\n         */\n        get: function () {\n            return this.rowCountValue;\n        },\n        set: function (val) {\n            if (val < 0 || val > _settings__WEBPACK_IMPORTED_MODULE_4__[\"settings\"].matrix.maxRowCount)\n                return;\n            this.setRowCountValueFromData = false;\n            var prevValue = this.rowCountValue;\n            this.rowCountValue = val;\n            if (this.value && this.value.length > val) {\n                var qVal = this.value;\n                qVal.splice(val);\n                this.value = qVal;\n            }\n            if (this.isUpdateLocked) {\n                this.initialRowCount = val;\n                return;\n            }\n            if (this.generatedVisibleRows || prevValue == 0) {\n                if (!this.generatedVisibleRows) {\n                    this.generatedVisibleRows = [];\n                }\n                this.generatedVisibleRows.splice(val);\n                for (var i = prevValue; i < val; i++) {\n                    var newRow = this.createMatrixRow(this.getValueForNewRow());\n                    this.generatedVisibleRows.push(newRow);\n                    this.onMatrixRowCreated(newRow);\n                }\n                this.runCondition(this.getDataFilteredValues(), this.getDataFilteredProperties());\n            }\n            this.onRowsChanged();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionMatrixDynamicModel.prototype.updateProgressInfoByValues = function (res) {\n        var val = this.value;\n        if (!Array.isArray(val))\n            val = [];\n        for (var i = 0; i < this.rowCount; i++) {\n            var rowValue = i < val.length ? val[i] : {};\n            this.updateProgressInfoByRow(res, rowValue);\n        }\n    };\n    QuestionMatrixDynamicModel.prototype.getValueForNewRow = function () {\n        var res = null;\n        if (!!this.onGetValueForNewRowCallBack) {\n            res = this.onGetValueForNewRowCallBack(this);\n        }\n        return res;\n    };\n    Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"allowRowsDragAndDrop\", {\n        /**\n         * Specifies whether users can drag and drop matrix rows to reorder them.\n         *\n         * Default value: `false`\n         */\n        get: function () {\n            if (this.readOnly)\n                return false;\n            return this.getPropertyValue(\"allowRowsDragAndDrop\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"allowRowsDragAndDrop\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"iconDragElement\", {\n        get: function () {\n            return this.cssClasses.iconDragElement;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionMatrixDynamicModel.prototype.createRenderedTable = function () {\n        return new QuestionMatrixDynamicRenderedTable(this);\n    };\n    Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"rowCountValue\", {\n        get: function () {\n            return this.getPropertyValue(\"rowCount\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"rowCount\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"minRowCount\", {\n        /**\n         * A minimum number of rows in the matrix. Users cannot delete rows if `rowCount` equals `minRowCount`.\n         *\n         * Default value: 0\n         * @see rowCount\n         * @see maxRowCount\n         * @see allowRemoveRows\n         */\n        get: function () {\n            return this.getPropertyValue(\"minRowCount\");\n        },\n        set: function (val) {\n            if (val < 0)\n                val = 0;\n            this.setPropertyValue(\"minRowCount\", val);\n            if (val > this.maxRowCount)\n                this.maxRowCount = val;\n            if (this.rowCount < val)\n                this.rowCount = val;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"maxRowCount\", {\n        /**\n         * A maximum number of rows in the matrix. Users cannot add new rows if `rowCount` equals `maxRowCount`.\n         *\n         * Default value: 1000 (inherited from [`settings.matrix.maxRowCount`](https://surveyjs.io/form-library/documentation/settings#matrixMaximumRowCount))\n         * @see rowCount\n         * @see minRowCount\n         * @see allowAddRows\n         */\n        get: function () {\n            return this.getPropertyValue(\"maxRowCount\");\n        },\n        set: function (val) {\n            if (val <= 0)\n                return;\n            if (val > _settings__WEBPACK_IMPORTED_MODULE_4__[\"settings\"].matrix.maxRowCount)\n                val = _settings__WEBPACK_IMPORTED_MODULE_4__[\"settings\"].matrix.maxRowCount;\n            if (val == this.maxRowCount)\n                return;\n            this.setPropertyValue(\"maxRowCount\", val);\n            if (val < this.minRowCount)\n                this.minRowCount = val;\n            if (this.rowCount > val)\n                this.rowCount = val;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"allowAddRows\", {\n        /**\n         * Specifies whether users are allowed to add new rows.\n         *\n         * Default value: `true`\n         * @see canAddRow\n         * @see allowRemoveRows\n         */\n        get: function () {\n            return this.getPropertyValue(\"allowAddRows\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"allowAddRows\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"allowRemoveRows\", {\n        /**\n         * Specifies whether users are allowed to delete rows.\n         *\n         * Default value: `true`\n         * @see canRemoveRows\n         * @see allowAddRows\n         */\n        get: function () {\n            return this.getPropertyValue(\"allowRemoveRows\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"allowRemoveRows\", val);\n            if (!this.isUpdateLocked) {\n                this.resetRenderedTable();\n            }\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"canAddRow\", {\n        /**\n         * Indicates whether it is possible to add a new row.\n         *\n         * This property returns `true` when all of the following conditions apply:\n         *\n         * - Users are allowed to add new rows (`allowAddRows` is `true`).\n         * - The question, its parent panel, or survey is not in read-only state.\n         * - `rowCount` is less than `maxRowCount`.\n         * @see allowAddRows\n         * @see isReadOnly\n         * @see rowCount\n         * @see maxRowCount\n         * @see canRemoveRows\n         */\n        get: function () {\n            return (this.allowAddRows && !this.isReadOnly && this.rowCount < this.maxRowCount);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"canRemoveRows\", {\n        /**\n         * Indicates whether it is possible to delete rows.\n         *\n         * This property returns `true` when all of the following conditions apply:\n         *\n         * - Users are allowed to delete rows (`allowRemoveRows` is `true`).\n         * - The question, its parent panel, or survey is not in read-only state.\n         * - `rowCount` exceeds `minRowCount`.\n         * @see allowRemoveRows\n         * @see isReadOnly\n         * @see rowCount\n         * @see minRowCount\n         * @see canAddRow\n         */\n        get: function () {\n            var res = this.allowRemoveRows &&\n                !this.isReadOnly &&\n                this.rowCount > this.minRowCount;\n            return !!this.canRemoveRowsCallback ? this.canRemoveRowsCallback(res) : res;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionMatrixDynamicModel.prototype.canRemoveRow = function (row) {\n        if (!this.survey)\n            return true;\n        return this.survey.matrixAllowRemoveRow(this, row.index, row);\n    };\n    QuestionMatrixDynamicModel.prototype.addRowUI = function () {\n        this.addRow(true);\n    };\n    QuestionMatrixDynamicModel.prototype.getQuestionToFocusOnAddingRow = function () {\n        var row = this.visibleRows[this.visibleRows.length - 1];\n        for (var i = 0; i < row.cells.length; i++) {\n            var q = row.cells[i].question;\n            if (!!q && q.isVisible && !q.isReadOnly) {\n                return q;\n            }\n        }\n        return null;\n    };\n    /**\n     * Creates and adds a new row to the matrix.\n     * @param setFocus *Optional.* Pass `true` to focus the cell in the first column.\n     */\n    QuestionMatrixDynamicModel.prototype.addRow = function (setFocus) {\n        var oldRowCount = this.rowCount;\n        var allow = this.canAddRow;\n        var options = { question: this, canAddRow: allow, allow: allow };\n        if (!!this.survey) {\n            this.survey.matrixBeforeRowAdded(options);\n        }\n        var newAllow = allow !== options.allow ? options.allow :\n            (allow !== options.canAddRow ? options.canAddRow : allow);\n        if (!newAllow)\n            return;\n        this.onStartRowAddingRemoving();\n        this.addRowCore();\n        this.onEndRowAdding();\n        if (this.detailPanelShowOnAdding && this.visibleRows.length > 0) {\n            this.visibleRows[this.visibleRows.length - 1].showDetailPanel();\n        }\n        if (setFocus && oldRowCount !== this.rowCount) {\n            var q = this.getQuestionToFocusOnAddingRow();\n            if (!!q) {\n                q.focus();\n            }\n        }\n    };\n    Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"detailPanelShowOnAdding\", {\n        /**\n         * Specifies whether to expand the detail section immediately when a respondent adds a new row.\n         * @see detailPanelMode\n         */\n        get: function () {\n            return this.getPropertyValue(\"detailPanelShowOnAdding\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"detailPanelShowOnAdding\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionMatrixDynamicModel.prototype.hasRowsAsItems = function () {\n        return false;\n    };\n    QuestionMatrixDynamicModel.prototype.unbindValue = function () {\n        this.clearGeneratedRows();\n        this.clearPropertyValue(\"value\");\n        this.rowCountValue = 0;\n        _super.prototype.unbindValue.call(this);\n    };\n    QuestionMatrixDynamicModel.prototype.isValueSurveyElement = function (val) {\n        return this.isEditingSurveyElement || _super.prototype.isValueSurveyElement.call(this, val);\n    };\n    QuestionMatrixDynamicModel.prototype.addRowCore = function () {\n        var prevRowCount = this.rowCount;\n        this.rowCount = this.rowCount + 1;\n        var defaultValue = this.getDefaultRowValue(true);\n        var newValue = null;\n        if (!this.isValueEmpty(defaultValue)) {\n            newValue = this.createNewValue();\n            if (newValue.length == this.rowCount) {\n                newValue[newValue.length - 1] = defaultValue;\n                this.value = newValue;\n            }\n        }\n        if (this.data) {\n            this.runCellsCondition(this.getDataFilteredValues(), this.getDataFilteredProperties());\n            if (this.isValueEmpty(defaultValue)) {\n                var row = this.visibleRows[this.rowCount - 1];\n                if (!this.isValueEmpty(row.value)) {\n                    if (!newValue) {\n                        newValue = this.createNewValue();\n                    }\n                    if (!this.isValueSurveyElement(newValue) &&\n                        !this.isTwoValueEquals(newValue[newValue.length - 1], row.value)) {\n                        newValue[newValue.length - 1] = row.value;\n                        this.value = newValue;\n                    }\n                }\n            }\n        }\n        if (this.survey) {\n            if (prevRowCount + 1 == this.rowCount) {\n                this.survey.matrixRowAdded(this, this.visibleRows[this.visibleRows.length - 1]);\n                this.onRowsChanged();\n            }\n        }\n    };\n    QuestionMatrixDynamicModel.prototype.getDefaultRowValue = function (isRowAdded) {\n        var res = null;\n        for (var i = 0; i < this.columns.length; i++) {\n            var q = this.columns[i].templateQuestion;\n            if (!!q && !this.isValueEmpty(q.getDefaultValue())) {\n                res = res || {};\n                res[this.columns[i].name] = q.getDefaultValue();\n            }\n        }\n        if (!this.isValueEmpty(this.defaultRowValue)) {\n            for (var key in this.defaultRowValue) {\n                res = res || {};\n                res[key] = this.defaultRowValue[key];\n            }\n        }\n        if (isRowAdded && this.defaultValueFromLastRow) {\n            var val = this.value;\n            if (!!val && Array.isArray(val) && val.length >= this.rowCount - 1) {\n                var rowValue = val[this.rowCount - 2];\n                for (var key in rowValue) {\n                    res = res || {};\n                    res[key] = rowValue[key];\n                }\n            }\n        }\n        return res;\n    };\n    QuestionMatrixDynamicModel.prototype.removeRowUI = function (value) {\n        if (!!value && !!value.rowName) {\n            var index = this.visibleRows.indexOf(value);\n            if (index < 0)\n                return;\n            value = index;\n        }\n        this.removeRow(value);\n    };\n    QuestionMatrixDynamicModel.prototype.isRequireConfirmOnRowDelete = function (index) {\n        if (!this.confirmDelete)\n            return false;\n        if (index < 0 || index >= this.rowCount)\n            return false;\n        var value = this.createNewValue();\n        if (this.isValueEmpty(value) || !Array.isArray(value))\n            return false;\n        if (index >= value.length)\n            return false;\n        return !this.isValueEmpty(value[index]);\n    };\n    /**\n     * Removes a matrix row with a specified index.\n     * @param index A zero-based row index.\n     * @param confirmDelete *Optional.* A Boolean value that specifies whether to display a confirmation dialog. If you do not specify this parameter, the [`confirmDelete`](https://surveyjs.io/form-library/documentation/api-reference/dynamic-matrix-table-question-model#confirmDelete) property value is used.\n     */\n    QuestionMatrixDynamicModel.prototype.removeRow = function (index, confirmDelete) {\n        var _this = this;\n        if (!this.canRemoveRows)\n            return;\n        if (index < 0 || index >= this.rowCount)\n            return;\n        var row = !!this.visibleRows && index < this.visibleRows.length\n            ? this.visibleRows[index]\n            : null;\n        if (confirmDelete === undefined) {\n            confirmDelete = this.isRequireConfirmOnRowDelete(index);\n        }\n        if (confirmDelete) {\n            Object(_utils_utils__WEBPACK_IMPORTED_MODULE_5__[\"confirmActionAsync\"])(this.confirmDeleteText, function () { _this.removeRowAsync(index, row); });\n            return;\n        }\n        this.removeRowAsync(index, row);\n    };\n    QuestionMatrixDynamicModel.prototype.removeRowAsync = function (index, row) {\n        if (!!row && !!this.survey && !this.survey.matrixRowRemoving(this, index, row))\n            return;\n        this.onStartRowAddingRemoving();\n        this.removeRowCore(index);\n        this.onEndRowRemoving(row);\n    };\n    QuestionMatrixDynamicModel.prototype.removeRowCore = function (index) {\n        var row = this.generatedVisibleRows\n            ? this.generatedVisibleRows[index]\n            : null;\n        if (this.generatedVisibleRows && index < this.generatedVisibleRows.length) {\n            this.generatedVisibleRows.splice(index, 1);\n        }\n        this.rowCountValue--;\n        if (this.value) {\n            var val = [];\n            if (Array.isArray(this.value) && index < this.value.length) {\n                val = this.createValueCopy();\n            }\n            else {\n                val = this.createNewValue();\n            }\n            val.splice(index, 1);\n            val = this.deleteRowValue(val, null);\n            this.isRowChanging = true;\n            this.value = val;\n            this.isRowChanging = false;\n        }\n        this.onRowsChanged();\n        if (this.survey) {\n            this.survey.matrixRowRemoved(this, index, row);\n        }\n    };\n    Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"confirmDeleteText\", {\n        /**\n         * A message displayed in a confirmation dialog that appears when a respondent wants to delete a row.\n         * @see confirmDelete\n         */\n        get: function () {\n            return this.getLocalizableStringText(\"confirmDeleteText\");\n        },\n        set: function (val) {\n            this.setLocalizableStringText(\"confirmDeleteText\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"locConfirmDeleteText\", {\n        get: function () {\n            return this.getLocalizableString(\"confirmDeleteText\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"addRowText\", {\n        /**\n         * A caption for the Add Row button.\n         * @see addRowLocation\n         */\n        get: function () {\n            return this.getLocalizableStringText(\"addRowText\", this.defaultAddRowText);\n        },\n        set: function (val) {\n            this.setLocalizableStringText(\"addRowText\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"locAddRowText\", {\n        get: function () {\n            return this.getLocalizableString(\"addRowText\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"defaultAddRowText\", {\n        get: function () {\n            return this.getLocalizationString(this.isColumnLayoutHorizontal ? \"addRow\" : \"addColumn\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"addRowLocation\", {\n        /**\n         * Specifies the location of the Add Row button.\n         *\n         * Possible values:\n         *\n         * - `\"top\"` - Displays the Add Row button at the top of the matrix.\n         * - `\"bottom\"` - Displays the Add Row button at the bottom of the matrix.\n         * - `\"topBottom\"` - Displays the Add Row button at the top and bottom of the matrix.\n         *\n         * Default value: `\"top\"` if `columnLayout` is `vertical`; `\"bottom\"` if `columnLayout` is `\"horizontal\"` or the matrix is in compact mode.\n         * @see columnLayout\n         * @see addRowText\n         */\n        get: function () {\n            return this.getPropertyValue(\"addRowLocation\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"addRowLocation\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionMatrixDynamicModel.prototype.getAddRowLocation = function () {\n        return this.addRowLocation;\n    };\n    Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"hideColumnsIfEmpty\", {\n        /**\n         * Specifies whether to hide columns when the matrix does not contain any rows. If you enable this property, the matrix displays the `emptyRowsText` message and the Add Row button.\n         *\n         * Default value: `false`\n         * @see emptyRowsText\n         */\n        get: function () {\n            return this.getPropertyValue(\"hideColumnsIfEmpty\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"hideColumnsIfEmpty\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionMatrixDynamicModel.prototype.getShowColumnsIfEmpty = function () {\n        return this.hideColumnsIfEmpty;\n    };\n    Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"removeRowText\", {\n        /**\n         * Use this property to change the default value of remove row button text.\n         */\n        get: function () {\n            return this.getLocalizableStringText(\"removeRowText\");\n        },\n        set: function (val) {\n            this.setLocalizableStringText(\"removeRowText\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"locRemoveRowText\", {\n        get: function () {\n            return this.getLocalizableString(\"removeRowText\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"emptyRowsText\", {\n        /**\n         * A message displayed when the matrix does not contain any rows. Applies only if `hideColumnsIfEmpty` is enabled.\n         * @see hideColumnsIfEmpty\n         */\n        get: function () {\n            return this.getLocalizableStringText(\"emptyRowsText\");\n        },\n        set: function (val) {\n            this.setLocalizableStringText(\"emptyRowsText\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"locEmptyRowsText\", {\n        get: function () {\n            return this.getLocalizableString(\"emptyRowsText\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionMatrixDynamicModel.prototype.getDisplayValueCore = function (keysAsText, value) {\n        if (!value || !Array.isArray(value))\n            return value;\n        var values = this.getUnbindValue(value);\n        var rows = this.visibleRows;\n        for (var i = 0; i < rows.length && i < values.length; i++) {\n            var val = values[i];\n            if (!val)\n                continue;\n            values[i] = this.getRowDisplayValue(keysAsText, rows[i], val);\n        }\n        return values;\n    };\n    QuestionMatrixDynamicModel.prototype.getConditionObjectRowName = function (index) {\n        return \"[\" + index.toString() + \"]\";\n    };\n    QuestionMatrixDynamicModel.prototype.getConditionObjectsRowIndeces = function () {\n        var res = [];\n        var rowCount = Math.max(this.rowCount, 1);\n        for (var i = 0; i < Math.min(_settings__WEBPACK_IMPORTED_MODULE_4__[\"settings\"].matrix.maxRowCountInCondition, rowCount); i++) {\n            res.push(i);\n        }\n        return res;\n    };\n    QuestionMatrixDynamicModel.prototype.supportGoNextPageAutomatic = function () {\n        return false;\n    };\n    Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"hasRowText\", {\n        get: function () {\n            return false;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionMatrixDynamicModel.prototype.onCheckForErrors = function (errors, isOnValueChanged) {\n        _super.prototype.onCheckForErrors.call(this, errors, isOnValueChanged);\n        if (!isOnValueChanged && this.hasErrorInMinRows()) {\n            errors.push(new _error__WEBPACK_IMPORTED_MODULE_3__[\"MinRowCountError\"](this.minRowCount, this));\n        }\n    };\n    QuestionMatrixDynamicModel.prototype.hasErrorInMinRows = function () {\n        if (this.minRowCount <= 0 || !this.isRequired || !this.generatedVisibleRows)\n            return false;\n        var setRowCount = 0;\n        for (var rowIndex = 0; rowIndex < this.generatedVisibleRows.length; rowIndex++) {\n            var row = this.generatedVisibleRows[rowIndex];\n            if (!row.isEmpty)\n                setRowCount++;\n        }\n        return setRowCount < this.minRowCount;\n    };\n    QuestionMatrixDynamicModel.prototype.getUniqueColumns = function () {\n        var res = _super.prototype.getUniqueColumns.call(this);\n        if (!!this.keyName) {\n            var column = this.getColumnByName(this.keyName);\n            if (!!column && res.indexOf(column) < 0) {\n                res.push(column);\n            }\n        }\n        return res;\n    };\n    QuestionMatrixDynamicModel.prototype.generateRows = function () {\n        var result = new Array();\n        if (this.rowCount === 0)\n            return result;\n        var val = this.createNewValue();\n        for (var i = 0; i < this.rowCount; i++) {\n            result.push(this.createMatrixRow(this.getRowValueByIndex(val, i)));\n        }\n        if (!this.isValueEmpty(this.getDefaultRowValue(false))) {\n            this.value = val;\n        }\n        return result;\n    };\n    QuestionMatrixDynamicModel.prototype.createMatrixRow = function (value) {\n        return new MatrixDynamicRowModel(this.rowCounter++, this, value);\n    };\n    QuestionMatrixDynamicModel.prototype.getInsertedDeletedIndex = function (rows, val) {\n        var len = Math.min(rows.length, val.length);\n        for (var i = 0; i < len; i++) {\n            if (val[i] !== rows[i].editingObj)\n                return i;\n        }\n        return len;\n    };\n    QuestionMatrixDynamicModel.prototype.isEditingObjectValueChanged = function () {\n        var val = this.value;\n        if (!this.generatedVisibleRows || !this.isValueSurveyElement(val))\n            return false;\n        var lastDelRow = this.lastDeletedRow;\n        this.lastDeletedRow = undefined;\n        var rows = this.generatedVisibleRows;\n        if (!Array.isArray(val) || Math.abs(rows.length - val.length) > 1)\n            return false;\n        var index = this.getInsertedDeletedIndex(rows, val);\n        if (rows.length > val.length) {\n            this.lastDeletedRow = rows[index];\n            var row = rows[index];\n            rows.splice(index, 1);\n            if (this.isRendredTableCreated) {\n                this.renderedTable.onRemovedRow(row);\n            }\n        }\n        else {\n            var newRow = undefined;\n            if (!!lastDelRow && lastDelRow.editingObj === val[index]) {\n                newRow = lastDelRow;\n            }\n            else {\n                newRow = this.createMatrixRow(val[index]);\n            }\n            rows.splice(index, 0, newRow);\n            if (!lastDelRow) {\n                this.onMatrixRowCreated(newRow);\n            }\n            if (this.isRendredTableCreated) {\n                this.renderedTable.onAddedRow(newRow, index);\n            }\n        }\n        this.setPropertyValueDirectly(\"rowCount\", val.length);\n        return true;\n    };\n    QuestionMatrixDynamicModel.prototype.onBeforeValueChanged = function (val) {\n        if (!val || !Array.isArray(val))\n            return;\n        var newRowCount = val.length;\n        if (newRowCount == this.rowCount)\n            return;\n        if (!this.setRowCountValueFromData && newRowCount < this.initialRowCount)\n            return;\n        if (this.isEditingObjectValueChanged())\n            return;\n        this.setRowCountValueFromData = true;\n        this.rowCountValue = newRowCount;\n        if (!this.generatedVisibleRows)\n            return;\n        if (newRowCount == this.generatedVisibleRows.length + 1) {\n            this.onStartRowAddingRemoving();\n            var newValue = this.getRowValueByIndex(val, newRowCount - 1);\n            var newRow = this.createMatrixRow(newValue);\n            this.generatedVisibleRows.push(newRow);\n            this.onMatrixRowCreated(newRow);\n            this.onEndRowAdding();\n        }\n        else {\n            this.clearGeneratedRows();\n            this.generatedVisibleRows = this.visibleRows;\n            this.onRowsChanged();\n        }\n        this.setRowCountValueFromData = false;\n    };\n    QuestionMatrixDynamicModel.prototype.createNewValue = function () {\n        var result = this.createValueCopy();\n        if (!result || !Array.isArray(result))\n            result = [];\n        if (result.length > this.rowCount)\n            result.splice(this.rowCount);\n        var rowValue = this.getDefaultRowValue(false);\n        rowValue = rowValue || {};\n        for (var i = result.length; i < this.rowCount; i++) {\n            result.push(this.getUnbindValue(rowValue));\n        }\n        return result;\n    };\n    QuestionMatrixDynamicModel.prototype.deleteRowValue = function (newValue, row) {\n        var isEmpty = true;\n        for (var i = 0; i < newValue.length; i++) {\n            if (this.isObject(newValue[i]) && Object.keys(newValue[i]).length > 0) {\n                isEmpty = false;\n                break;\n            }\n        }\n        return isEmpty ? null : newValue;\n    };\n    QuestionMatrixDynamicModel.prototype.getRowValueByIndex = function (questionValue, index) {\n        return Array.isArray(questionValue) &&\n            index >= 0 &&\n            index < questionValue.length\n            ? questionValue[index]\n            : null;\n    };\n    QuestionMatrixDynamicModel.prototype.getRowValueCore = function (row, questionValue, create) {\n        if (create === void 0) { create = false; }\n        if (!this.generatedVisibleRows)\n            return {};\n        var res = this.getRowValueByIndex(questionValue, this.generatedVisibleRows.indexOf(row));\n        if (!res && create)\n            res = {};\n        return res;\n    };\n    QuestionMatrixDynamicModel.prototype.getAddRowButtonCss = function (isEmptySection) {\n        if (isEmptySection === void 0) { isEmptySection = false; }\n        return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_7__[\"CssClassBuilder\"]()\n            .append(this.cssClasses.button)\n            .append(this.cssClasses.buttonAdd)\n            .append(this.cssClasses.emptyRowsButton, isEmptySection)\n            .toString();\n    };\n    QuestionMatrixDynamicModel.prototype.getRemoveRowButtonCss = function () {\n        return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_7__[\"CssClassBuilder\"]()\n            .append(this.cssClasses.button)\n            .append(this.cssClasses.buttonRemove)\n            .toString();\n    };\n    QuestionMatrixDynamicModel.prototype.getRootCss = function () {\n        var _a;\n        return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_7__[\"CssClassBuilder\"]().append(_super.prototype.getRootCss.call(this)).append(this.cssClasses.empty, !((_a = this.renderedTable) === null || _a === void 0 ? void 0 : _a.showTable)).toString();\n    };\n    return QuestionMatrixDynamicModel;\n}(_question_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_2__[\"QuestionMatrixDropdownModelBase\"]));\n\nvar QuestionMatrixDynamicRenderedTable = /** @class */ (function (_super) {\n    __extends(QuestionMatrixDynamicRenderedTable, _super);\n    function QuestionMatrixDynamicRenderedTable() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    QuestionMatrixDynamicRenderedTable.prototype.setDefaultRowActions = function (row, actions) {\n        _super.prototype.setDefaultRowActions.call(this, row, actions);\n    };\n    return QuestionMatrixDynamicRenderedTable;\n}(_question_matrixdropdownrendered__WEBPACK_IMPORTED_MODULE_8__[\"QuestionMatrixDropdownRenderedTable\"]));\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"matrixdynamic\", [\n    { name: \"rowsVisibleIf:condition\", visible: false },\n    { name: \"allowAddRows:boolean\", default: true },\n    { name: \"allowRemoveRows:boolean\", default: true },\n    { name: \"rowCount:number\", default: 2, minValue: 0, isBindable: true },\n    { name: \"minRowCount:number\", default: 0, minValue: 0 },\n    {\n        name: \"maxRowCount:number\",\n        default: _settings__WEBPACK_IMPORTED_MODULE_4__[\"settings\"].matrix.maxRowCount,\n    },\n    { name: \"keyName\" },\n    \"defaultRowValue:rowvalue\",\n    \"defaultValueFromLastRow:boolean\",\n    { name: \"confirmDelete:boolean\" },\n    {\n        name: \"confirmDeleteText\",\n        dependsOn: \"confirmDelete\",\n        visibleIf: function (obj) {\n            return !obj || obj.confirmDelete;\n        },\n        serializationProperty: \"locConfirmDeleteText\",\n    },\n    {\n        name: \"addRowLocation\",\n        default: \"default\",\n        choices: [\"default\", \"top\", \"bottom\", \"topBottom\"],\n    },\n    { name: \"addRowText\", serializationProperty: \"locAddRowText\" },\n    { name: \"removeRowText\", serializationProperty: \"locRemoveRowText\" },\n    \"hideColumnsIfEmpty:boolean\",\n    {\n        name: \"emptyRowsText:text\",\n        serializationProperty: \"locEmptyRowsText\",\n        dependsOn: \"hideColumnsIfEmpty\",\n        visibleIf: function (obj) {\n            return !obj || obj.hideColumnsIfEmpty;\n        },\n    },\n    {\n        name: \"detailPanelShowOnAdding:boolean\",\n        dependsOn: \"detailPanelMode\",\n        visibleIf: function (obj) {\n            return obj.detailPanelMode !== \"none\";\n        },\n    },\n    \"allowRowsDragAndDrop:switch\"\n], function () {\n    return new QuestionMatrixDynamicModel(\"\");\n}, \"matrixdropdownbase\");\n_questionfactory__WEBPACK_IMPORTED_MODULE_1__[\"QuestionFactory\"].Instance.registerQuestion(\"matrixdynamic\", function (name) {\n    var q = new QuestionMatrixDynamicModel(name);\n    q.choices = [1, 2, 3, 4, 5];\n    _question_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_2__[\"QuestionMatrixDropdownModelBase\"].addDefaultColumns(q);\n    return q;\n});\n\n\n/***/ }),\n\n/***/ \"./src/question_multipletext.ts\":\n/*!**************************************!*\\\n  !*** ./src/question_multipletext.ts ***!\n  \\**************************************/\n/*! exports provided: MultipleTextEditorModel, MultipleTextItemModel, QuestionMultipleTextModel, MutlipleTextRow, MutlipleTextErrorRow, MultipleTextCell, MultipleTextErrorCell */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_3234534__) {\n\n\"use strict\";\n__nested_webpack_require_3234534__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_3234534__.d(__nested_webpack_exports__, \"MultipleTextEditorModel\", function() { return MultipleTextEditorModel; });\n/* harmony export (binding) */ __nested_webpack_require_3234534__.d(__nested_webpack_exports__, \"MultipleTextItemModel\", function() { return MultipleTextItemModel; });\n/* harmony export (binding) */ __nested_webpack_require_3234534__.d(__nested_webpack_exports__, \"QuestionMultipleTextModel\", function() { return QuestionMultipleTextModel; });\n/* harmony export (binding) */ __nested_webpack_require_3234534__.d(__nested_webpack_exports__, \"MutlipleTextRow\", function() { return MutlipleTextRow; });\n/* harmony export (binding) */ __nested_webpack_require_3234534__.d(__nested_webpack_exports__, \"MutlipleTextErrorRow\", function() { return MutlipleTextErrorRow; });\n/* harmony export (binding) */ __nested_webpack_require_3234534__.d(__nested_webpack_exports__, \"MultipleTextCell\", function() { return MultipleTextCell; });\n/* harmony export (binding) */ __nested_webpack_require_3234534__.d(__nested_webpack_exports__, \"MultipleTextErrorCell\", function() { return MultipleTextErrorCell; });\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_3234534__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _survey_element__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_3234534__(/*! ./survey-element */ \"./src/survey-element.ts\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_3234534__(/*! ./question */ \"./src/question.ts\");\n/* harmony import */ var _question_text__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_3234534__(/*! ./question_text */ \"./src/question_text.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_3234534__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_3234534__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_3234534__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_3234534__(/*! ./utils/cssClassBuilder */ \"./src/utils/cssClassBuilder.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_3234534__(/*! ./settings */ \"./src/settings.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\n\n\n\n\nvar MultipleTextEditorModel = /** @class */ (function (_super) {\n    __extends(MultipleTextEditorModel, _super);\n    function MultipleTextEditorModel() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Object.defineProperty(MultipleTextEditorModel.prototype, \"a11y_input_ariaLabel\", {\n        get: function () {\n            return this.locTitle.renderedHtml;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MultipleTextEditorModel.prototype, \"a11y_input_ariaLabelledBy\", {\n        get: function () {\n            return null;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    return MultipleTextEditorModel;\n}(_question_text__WEBPACK_IMPORTED_MODULE_3__[\"QuestionTextModel\"]));\n\n/**\n * A class that describes an item in a [Multiple Textboxes](https://surveyjs.io/form-library/documentation/api-reference/multiple-text-entry-question-model) question.\n *\n * [View Demo](/form-library/examples/multiple-text-box-question/)\n */\nvar MultipleTextItemModel = /** @class */ (function (_super) {\n    __extends(MultipleTextItemModel, _super);\n    function MultipleTextItemModel(name, title) {\n        if (name === void 0) { name = null; }\n        if (title === void 0) { title = null; }\n        var _this = _super.call(this) || this;\n        _this.focusIn = function () {\n            _this.editor.focusIn();\n        };\n        _this.editorValue = _this.createEditor(name);\n        _this.editor.questionTitleTemplateCallback = function () {\n            return \"\";\n        };\n        _this.editor.titleLocation = \"left\";\n        if (title) {\n            _this.title = title;\n        }\n        return _this;\n    }\n    MultipleTextItemModel.prototype.getType = function () {\n        return \"multipletextitem\";\n    };\n    Object.defineProperty(MultipleTextItemModel.prototype, \"id\", {\n        get: function () {\n            return this.editor.id;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    MultipleTextItemModel.prototype.getOriginalObj = function () {\n        return this.editor;\n    };\n    Object.defineProperty(MultipleTextItemModel.prototype, \"name\", {\n        /**\n         * The item name.\n         */\n        get: function () {\n            return this.editor.name;\n        },\n        set: function (val) {\n            this.editor.name = val;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MultipleTextItemModel.prototype, \"question\", {\n        get: function () {\n            return this.data;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MultipleTextItemModel.prototype, \"editor\", {\n        get: function () {\n            return this.editorValue;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    MultipleTextItemModel.prototype.createEditor = function (name) {\n        return new MultipleTextEditorModel(name);\n    };\n    MultipleTextItemModel.prototype.addUsedLocales = function (locales) {\n        _super.prototype.addUsedLocales.call(this, locales);\n        this.editor.addUsedLocales(locales);\n    };\n    MultipleTextItemModel.prototype.localeChanged = function () {\n        _super.prototype.localeChanged.call(this);\n        this.editor.localeChanged();\n    };\n    MultipleTextItemModel.prototype.locStrsChanged = function () {\n        _super.prototype.locStrsChanged.call(this);\n        this.editor.locStrsChanged();\n    };\n    MultipleTextItemModel.prototype.setData = function (data) {\n        this.data = data;\n        if (!!data) {\n            this.editor.defaultValue = data.getItemDefaultValue(this.name);\n            this.editor.setSurveyImpl(this);\n            this.editor.parent = data;\n            this.editor.setParentQuestion(data);\n        }\n    };\n    Object.defineProperty(MultipleTextItemModel.prototype, \"isRequired\", {\n        /**\n         * Set this property to true, to make the item a required. If a user doesn't fill the item then a validation error will be generated.\n         */\n        get: function () {\n            return this.editor.isRequired;\n        },\n        set: function (val) {\n            this.editor.isRequired = val;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MultipleTextItemModel.prototype, \"inputType\", {\n        /**\n         * Use this property to change the default input type.\n         */\n        get: function () {\n            return this.editor.inputType;\n        },\n        set: function (val) {\n            this.editor.inputType = val;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MultipleTextItemModel.prototype, \"title\", {\n        /**\n         * Item title. If it is empty, the item name is rendered as title. This property supports markdown.\n         * @see name\n         */\n        get: function () {\n            return this.editor.title;\n        },\n        set: function (val) {\n            this.editor.title = val;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MultipleTextItemModel.prototype, \"locTitle\", {\n        get: function () {\n            return this.editor.locTitle;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MultipleTextItemModel.prototype, \"fullTitle\", {\n        get: function () {\n            return this.editor.fullTitle;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MultipleTextItemModel.prototype, \"maxLength\", {\n        /**\n         * The maximum text length. If it is -1, defaul value, then the survey maxTextLength property will be used.\n         * If it is 0, then the value is unlimited\n         * @see SurveyModel.maxTextLength\n         */\n        get: function () {\n            return this.editor.maxLength;\n        },\n        set: function (val) {\n            this.editor.maxLength = val;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    MultipleTextItemModel.prototype.getMaxLength = function () {\n        var survey = this.getSurvey();\n        return _helpers__WEBPACK_IMPORTED_MODULE_6__[\"Helpers\"].getMaxLength(this.maxLength, survey ? survey.maxTextLength : -1);\n    };\n    Object.defineProperty(MultipleTextItemModel.prototype, \"placeholder\", {\n        /**\n         * The input place holder.\n         */\n        get: function () {\n            return this.editor.placeholder;\n        },\n        set: function (val) {\n            this.editor.placeholder = val;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MultipleTextItemModel.prototype, \"locPlaceholder\", {\n        get: function () {\n            return this.editor.locPlaceholder;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MultipleTextItemModel.prototype, \"placeHolder\", {\n        get: function () {\n            return this.placeholder;\n        },\n        set: function (val) {\n            this.placeholder = val;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MultipleTextItemModel.prototype, \"locPlaceHolder\", {\n        get: function () {\n            return this.locPlaceholder;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MultipleTextItemModel.prototype, \"requiredErrorText\", {\n        /**\n         * The custom text that will be shown on required error. Use this property, if you do not want to show the default text.\n         */\n        get: function () {\n            return this.editor.requiredErrorText;\n        },\n        set: function (val) {\n            this.editor.requiredErrorText = val;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MultipleTextItemModel.prototype, \"locRequiredErrorText\", {\n        get: function () {\n            return this.editor.locRequiredErrorText;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MultipleTextItemModel.prototype, \"size\", {\n        /**\n         * The input size.\n         */\n        get: function () {\n            return this.editor.size;\n        },\n        set: function (val) {\n            this.editor.size = val;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MultipleTextItemModel.prototype, \"validators\", {\n        /**\n         * The list of question validators.\n         */\n        get: function () {\n            return this.editor.validators;\n        },\n        set: function (val) {\n            this.editor.validators = val;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    MultipleTextItemModel.prototype.getValidators = function () {\n        return this.validators;\n    };\n    Object.defineProperty(MultipleTextItemModel.prototype, \"value\", {\n        /**\n         * The item value.\n         */\n        get: function () {\n            return this.data ? this.data.getMultipleTextValue(this.name) : null;\n        },\n        set: function (value) {\n            if (this.data != null) {\n                this.data.setMultipleTextValue(this.name, value);\n            }\n        },\n        enumerable: false,\n        configurable: true\n    });\n    MultipleTextItemModel.prototype.isEmpty = function () {\n        return this.editor.isEmpty();\n    };\n    MultipleTextItemModel.prototype.onValueChanged = function (newValue) {\n        if (this.valueChangedCallback)\n            this.valueChangedCallback(newValue);\n    };\n    //ISurveyImpl\n    MultipleTextItemModel.prototype.getSurveyData = function () {\n        return this;\n    };\n    MultipleTextItemModel.prototype.getSurvey = function () {\n        return this.data ? this.data.getSurvey() : null;\n    };\n    MultipleTextItemModel.prototype.getTextProcessor = function () {\n        return this.data ? this.data.getTextProcessor() : null;\n    };\n    //ISurveyData\n    MultipleTextItemModel.prototype.getValue = function (name) {\n        if (!this.data)\n            return null;\n        return this.data.getMultipleTextValue(name);\n    };\n    MultipleTextItemModel.prototype.setValue = function (name, value) {\n        if (this.data) {\n            this.data.setMultipleTextValue(name, value);\n        }\n    };\n    MultipleTextItemModel.prototype.getVariable = function (name) {\n        return undefined;\n    };\n    MultipleTextItemModel.prototype.setVariable = function (name, newValue) { };\n    MultipleTextItemModel.prototype.getComment = function (name) {\n        return null;\n    };\n    MultipleTextItemModel.prototype.setComment = function (name, newValue) { };\n    MultipleTextItemModel.prototype.getAllValues = function () {\n        if (this.data)\n            return this.data.getAllValues();\n        return this.value;\n    };\n    MultipleTextItemModel.prototype.getFilteredValues = function () {\n        return this.getAllValues();\n    };\n    MultipleTextItemModel.prototype.getFilteredProperties = function () {\n        return { survey: this.getSurvey() };\n    };\n    MultipleTextItemModel.prototype.findQuestionByName = function (name) {\n        var survey = this.getSurvey();\n        return !!survey ? survey.getQuestionByName(name) : null;\n    };\n    //IValidatorOwner\n    MultipleTextItemModel.prototype.getValidatorTitle = function () {\n        return this.title;\n    };\n    Object.defineProperty(MultipleTextItemModel.prototype, \"validatedValue\", {\n        get: function () {\n            return this.value;\n        },\n        set: function (val) {\n            this.value = val;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    MultipleTextItemModel.prototype.getDataFilteredValues = function () {\n        return this.getFilteredValues();\n    };\n    MultipleTextItemModel.prototype.getDataFilteredProperties = function () {\n        return this.getFilteredProperties();\n    };\n    return MultipleTextItemModel;\n}(_base__WEBPACK_IMPORTED_MODULE_0__[\"Base\"]));\n\n/**\n * A class that describes the Multiple Text question type.\n *\n * [View Demo](https://surveyjs.io/form-library/examples/questiontype-multipletext/ (linkStyle))\n */\nvar QuestionMultipleTextModel = /** @class */ (function (_super) {\n    __extends(QuestionMultipleTextModel, _super);\n    function QuestionMultipleTextModel(name) {\n        var _this = _super.call(this, name) || this;\n        _this.isMultipleItemValueChanging = false;\n        _this.createNewArray(\"items\", function (item) {\n            item.setData(_this);\n            if (_this.survey) {\n                _this.survey.multipleTextItemAdded(_this, item);\n            }\n        });\n        _this.registerPropertyChangedHandlers([\"items\", \"colCount\", \"itemErrorLocation\"], function () {\n            _this.calcVisibleRows();\n        });\n        _this.registerPropertyChangedHandlers([\"itemSize\"], function () { _this.updateItemsSize(); });\n        return _this;\n    }\n    QuestionMultipleTextModel.addDefaultItems = function (question) {\n        var names = _questionfactory__WEBPACK_IMPORTED_MODULE_5__[\"QuestionFactory\"].DefaultMutlipleTextItems;\n        for (var i = 0; i < names.length; i++)\n            question.addItem(names[i]);\n    };\n    QuestionMultipleTextModel.prototype.getType = function () {\n        return \"multipletext\";\n    };\n    QuestionMultipleTextModel.prototype.setSurveyImpl = function (value, isLight) {\n        _super.prototype.setSurveyImpl.call(this, value, isLight);\n        for (var i = 0; i < this.items.length; i++) {\n            this.items[i].setData(this);\n        }\n    };\n    Object.defineProperty(QuestionMultipleTextModel.prototype, \"isAllowTitleLeft\", {\n        get: function () {\n            return false;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMultipleTextModel.prototype, \"hasSingleInput\", {\n        get: function () { return false; },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMultipleTextModel.prototype, \"isContainer\", {\n        get: function () { return true; },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMultipleTextModel.prototype, \"id\", {\n        get: function () {\n            return this.getPropertyValue(\"id\");\n        },\n        set: function (val) {\n            var _a;\n            (_a = this.items) === null || _a === void 0 ? void 0 : _a.map(function (item, index) { return item.editor.id = val + \"_\" + index; });\n            this.setPropertyValue(\"id\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionMultipleTextModel.prototype.onSurveyLoad = function () {\n        this.editorsOnSurveyLoad();\n        _super.prototype.onSurveyLoad.call(this);\n    };\n    QuestionMultipleTextModel.prototype.setQuestionValue = function (newValue, updateIsAnswered) {\n        if (updateIsAnswered === void 0) { updateIsAnswered = true; }\n        _super.prototype.setQuestionValue.call(this, newValue, updateIsAnswered);\n        this.performForEveryEditor(function (item) {\n            item.editor.updateValueFromSurvey(item.value);\n        });\n        this.updateIsAnswered();\n    };\n    QuestionMultipleTextModel.prototype.onSurveyValueChanged = function (newValue) {\n        _super.prototype.onSurveyValueChanged.call(this, newValue);\n        this.performForEveryEditor(function (item) {\n            item.editor.onSurveyValueChanged(item.value);\n        });\n    };\n    QuestionMultipleTextModel.prototype.updateItemsSize = function () {\n        this.performForEveryEditor(function (item) {\n            item.editor.updateInputSize();\n        });\n    };\n    QuestionMultipleTextModel.prototype.editorsOnSurveyLoad = function () {\n        this.performForEveryEditor(function (item) {\n            item.editor.onSurveyLoad();\n        });\n    };\n    QuestionMultipleTextModel.prototype.performForEveryEditor = function (func) {\n        for (var i = 0; i < this.items.length; i++) {\n            var item = this.items[i];\n            if (item.editor) {\n                func(item);\n            }\n        }\n    };\n    Object.defineProperty(QuestionMultipleTextModel.prototype, \"items\", {\n        /**\n         * Gets or sets an array of `MultipleTextItemModel` objects that represent input items.\n         *\n         * This property accepts an array of objects with the following structure:\n         *\n         * ```js\n         * {\n         *   \"name\": any, // A unique value used to identify an input item and save an item value to survey results.\n         *   \"title\": String // An item caption. When `title` is undefined, `name` is used. This property supports Markdown.\n         * }\n         * ```\n         *\n         * To enable Markdown support for the `title` property, implement Markdown-to-HTML conversion in the [onTextMarkdown](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#onTextMarkdown) event handler. For an example, refer to the following demo: [Convert Markdown to HTML with Showdown](https://surveyjs.io/form-library/examples/edit-survey-questions-markdown/).\n         * @see addItem\n         */\n        get: function () {\n            return this.getPropertyValue(\"items\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"items\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    /**\n     * Adds a new input item.\n     * @param name An item name\n     * @param title (Optional) An item title\n     * @see items\n     */\n    QuestionMultipleTextModel.prototype.addItem = function (name, title) {\n        if (title === void 0) { title = null; }\n        var item = this.createTextItem(name, title);\n        this.items.push(item);\n        return item;\n    };\n    QuestionMultipleTextModel.prototype.getItemByName = function (name) {\n        for (var i = 0; i < this.items.length; i++) {\n            if (this.items[i].name == name)\n                return this.items[i];\n        }\n        return null;\n    };\n    QuestionMultipleTextModel.prototype.addConditionObjectsByContext = function (objects, context) {\n        for (var i = 0; i < this.items.length; i++) {\n            var item = this.items[i];\n            objects.push({\n                name: this.getValueName() + \".\" + item.name,\n                text: this.processedTitle + \".\" + item.fullTitle,\n                question: this,\n            });\n        }\n    };\n    QuestionMultipleTextModel.prototype.collectNestedQuestionsCore = function (questions, visibleOnly) {\n        this.items.forEach(function (item) { return item.editor.collectNestedQuestions(questions, visibleOnly); });\n    };\n    QuestionMultipleTextModel.prototype.getConditionJson = function (operator, path) {\n        if (operator === void 0) { operator = null; }\n        if (path === void 0) { path = null; }\n        if (!path)\n            return _super.prototype.getConditionJson.call(this);\n        var item = this.getItemByName(path);\n        if (!item)\n            return null;\n        var json = new _jsonobject__WEBPACK_IMPORTED_MODULE_4__[\"JsonObject\"]().toJsonObject(item);\n        json[\"type\"] = \"text\";\n        return json;\n    };\n    QuestionMultipleTextModel.prototype.locStrsChanged = function () {\n        _super.prototype.locStrsChanged.call(this);\n        for (var i = 0; i < this.items.length; i++) {\n            this.items[i].locStrsChanged();\n        }\n    };\n    QuestionMultipleTextModel.prototype.localeChanged = function () {\n        _super.prototype.localeChanged.call(this);\n        for (var i = 0; i < this.items.length; i++) {\n            this.items[i].localeChanged();\n        }\n    };\n    Object.defineProperty(QuestionMultipleTextModel.prototype, \"itemErrorLocation\", {\n        /**\n         * Specifies the error message position relative to individual input fields.\n         *\n         * Possible values:\n         *\n         * - `\"default\"` (default) - Inherits the setting from the [`errorLocation`](#errorLocation) property.\n         * - `\"top\"` - Displays error messages above input fields.\n         * - `\"bottom\"` - Displays error messages below input fields.\n         */\n        get: function () {\n            return this.getPropertyValue(\"itemErrorLocation\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"itemErrorLocation\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionMultipleTextModel.prototype.getQuestionErrorLocation = function () {\n        if (this.itemErrorLocation !== \"default\")\n            return this.itemErrorLocation;\n        return this.getErrorLocation();\n    };\n    Object.defineProperty(QuestionMultipleTextModel.prototype, \"showItemErrorOnTop\", {\n        get: function () {\n            return this.getQuestionErrorLocation() == \"top\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMultipleTextModel.prototype, \"showItemErrorOnBottom\", {\n        get: function () {\n            return this.getQuestionErrorLocation() == \"bottom\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionMultipleTextModel.prototype.getChildErrorLocation = function (child) {\n        return this.getQuestionErrorLocation();\n    };\n    QuestionMultipleTextModel.prototype.isNewValueCorrect = function (val) {\n        return _helpers__WEBPACK_IMPORTED_MODULE_6__[\"Helpers\"].isValueObject(val, true);\n    };\n    QuestionMultipleTextModel.prototype.supportGoNextPageAutomatic = function () {\n        for (var i = 0; i < this.items.length; i++) {\n            if (this.items[i].isEmpty())\n                return false;\n        }\n        return true;\n    };\n    Object.defineProperty(QuestionMultipleTextModel.prototype, \"colCount\", {\n        /**\n         * The number of columns used to arrange input items. Accepts the following values: 1, 2, 3, 4, 5.\n         *\n         * Default value: 1\n         */\n        get: function () {\n            return this.getPropertyValue(\"colCount\");\n        },\n        set: function (val) {\n            if (val < 1 || val > 5)\n                return;\n            this.setPropertyValue(\"colCount\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionMultipleTextModel.prototype, \"itemSize\", {\n        /**\n         * A value passed on to the [`size`](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/size) attribute of the underlying `<input>` elements.\n         */\n        get: function () {\n            return this.getPropertyValue(\"itemSize\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"itemSize\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionMultipleTextModel.prototype.onRowCreated = function (row) {\n        return row;\n    };\n    QuestionMultipleTextModel.prototype.calcVisibleRows = function () {\n        var colCount = this.colCount;\n        var items = this.items;\n        var index = 0;\n        var row;\n        var errorRow;\n        var rows = [];\n        for (var i = 0; i < items.length; i++) {\n            if (index == 0) {\n                row = this.onRowCreated(new MutlipleTextRow());\n                errorRow = this.onRowCreated(new MutlipleTextErrorRow());\n                if (this.showItemErrorOnTop) {\n                    rows.push(errorRow);\n                    rows.push(row);\n                }\n                else {\n                    rows.push(row);\n                    rows.push(errorRow);\n                }\n            }\n            row.cells.push(new MultipleTextCell(items[i], this));\n            errorRow.cells.push(new MultipleTextErrorCell(items[i], this));\n            index++;\n            if (index >= colCount || i == items.length - 1) {\n                index = 0;\n                errorRow.onAfterCreated();\n            }\n        }\n        this.rows = rows;\n    };\n    QuestionMultipleTextModel.prototype.getRows = function () {\n        if (_helpers__WEBPACK_IMPORTED_MODULE_6__[\"Helpers\"].isValueEmpty(this.rows)) {\n            this.calcVisibleRows();\n        }\n        return this.rows;\n    };\n    QuestionMultipleTextModel.prototype.onValueChanged = function () {\n        _super.prototype.onValueChanged.call(this);\n        this.onItemValueChanged();\n    };\n    QuestionMultipleTextModel.prototype.createTextItem = function (name, title) {\n        return new MultipleTextItemModel(name, title);\n    };\n    QuestionMultipleTextModel.prototype.onItemValueChanged = function () {\n        if (this.isMultipleItemValueChanging)\n            return;\n        for (var i = 0; i < this.items.length; i++) {\n            var itemValue = null;\n            if (this.value && this.items[i].name in this.value) {\n                itemValue = this.value[this.items[i].name];\n            }\n            this.items[i].onValueChanged(itemValue);\n        }\n    };\n    QuestionMultipleTextModel.prototype.getIsRunningValidators = function () {\n        if (_super.prototype.getIsRunningValidators.call(this))\n            return true;\n        for (var i = 0; i < this.items.length; i++) {\n            if (this.items[i].editor.isRunningValidators)\n                return true;\n        }\n        return false;\n    };\n    QuestionMultipleTextModel.prototype.hasErrors = function (fireCallback, rec) {\n        var _this = this;\n        if (fireCallback === void 0) { fireCallback = true; }\n        if (rec === void 0) { rec = null; }\n        var res = false;\n        for (var i = 0; i < this.items.length; i++) {\n            this.items[i].editor.onCompletedAsyncValidators = function (hasErrors) {\n                _this.raiseOnCompletedAsyncValidators();\n            };\n            if (!!rec &&\n                rec.isOnValueChanged === true &&\n                this.items[i].editor.isEmpty())\n                continue;\n            res = this.items[i].editor.hasErrors(fireCallback, rec) || res;\n        }\n        return _super.prototype.hasErrors.call(this, fireCallback) || res;\n    };\n    QuestionMultipleTextModel.prototype.getAllErrors = function () {\n        var result = _super.prototype.getAllErrors.call(this);\n        for (var i = 0; i < this.items.length; i++) {\n            var errors = this.items[i].editor.getAllErrors();\n            if (errors && errors.length > 0) {\n                result = result.concat(errors);\n            }\n        }\n        return result;\n    };\n    QuestionMultipleTextModel.prototype.clearErrors = function () {\n        _super.prototype.clearErrors.call(this);\n        for (var i = 0; i < this.items.length; i++) {\n            this.items[i].editor.clearErrors();\n        }\n    };\n    QuestionMultipleTextModel.prototype.getContainsErrors = function () {\n        var res = _super.prototype.getContainsErrors.call(this);\n        if (res)\n            return res;\n        var items = this.items;\n        for (var i = 0; i < items.length; i++) {\n            if (items[i].editor.containsErrors)\n                return true;\n        }\n        return false;\n    };\n    QuestionMultipleTextModel.prototype.getIsAnswered = function () {\n        if (!_super.prototype.getIsAnswered.call(this))\n            return false;\n        for (var i = 0; i < this.items.length; i++) {\n            var editor = this.items[i].editor;\n            if (editor.isVisible && !editor.isAnswered)\n                return false;\n        }\n        return true;\n    };\n    QuestionMultipleTextModel.prototype.getProgressInfo = function () {\n        var elements = [];\n        for (var i = 0; i < this.items.length; i++) {\n            elements.push(this.items[i].editor);\n        }\n        return _survey_element__WEBPACK_IMPORTED_MODULE_1__[\"SurveyElement\"].getProgressInfoByElements(elements, this.isRequired);\n    };\n    QuestionMultipleTextModel.prototype.getDisplayValueCore = function (keysAsText, value) {\n        if (!value)\n            return value;\n        var res = {};\n        for (var i = 0; i < this.items.length; i++) {\n            var item = this.items[i];\n            var val = value[item.name];\n            if (_helpers__WEBPACK_IMPORTED_MODULE_6__[\"Helpers\"].isValueEmpty(val))\n                continue;\n            var itemName = item.name;\n            if (keysAsText && !!item.title) {\n                itemName = item.title;\n            }\n            res[itemName] = item.editor.getDisplayValue(keysAsText, val);\n        }\n        return res;\n    };\n    QuestionMultipleTextModel.prototype.allowMobileInDesignMode = function () {\n        return true;\n    };\n    //IMultipleTextData\n    QuestionMultipleTextModel.prototype.getMultipleTextValue = function (name) {\n        if (!this.value)\n            return null;\n        return this.value[name];\n    };\n    QuestionMultipleTextModel.prototype.setMultipleTextValue = function (name, value) {\n        this.isMultipleItemValueChanging = true;\n        if (this.isValueEmpty(value)) {\n            value = undefined;\n        }\n        var newValue = this.value;\n        if (!newValue) {\n            newValue = {};\n        }\n        newValue[name] = value;\n        this.setNewValue(newValue);\n        this.isMultipleItemValueChanging = false;\n    };\n    QuestionMultipleTextModel.prototype.getItemDefaultValue = function (name) {\n        return !!this.defaultValue ? this.defaultValue[name] : null;\n    };\n    QuestionMultipleTextModel.prototype.getTextProcessor = function () {\n        return this.textProcessor;\n    };\n    QuestionMultipleTextModel.prototype.getAllValues = function () {\n        return this.data ? this.data.getAllValues() : null;\n    };\n    QuestionMultipleTextModel.prototype.getIsRequiredText = function () {\n        return this.survey ? this.survey.requiredText : \"\";\n    };\n    //IPanel\n    QuestionMultipleTextModel.prototype.addElement = function (element, index) { };\n    QuestionMultipleTextModel.prototype.removeElement = function (element) {\n        return false;\n    };\n    QuestionMultipleTextModel.prototype.getQuestionTitleLocation = function () {\n        return \"left\";\n    };\n    QuestionMultipleTextModel.prototype.getQuestionStartIndex = function () {\n        return this.getStartIndex();\n    };\n    QuestionMultipleTextModel.prototype.getChildrenLayoutType = function () {\n        return \"row\";\n    };\n    QuestionMultipleTextModel.prototype.elementWidthChanged = function (el) { };\n    Object.defineProperty(QuestionMultipleTextModel.prototype, \"elements\", {\n        get: function () {\n            return [];\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionMultipleTextModel.prototype.indexOf = function (el) {\n        return -1;\n    };\n    QuestionMultipleTextModel.prototype.ensureRowsVisibility = function () {\n        // do nothing\n    };\n    QuestionMultipleTextModel.prototype.validateContainerOnly = function () {\n        // do nothing\n    };\n    QuestionMultipleTextModel.prototype.getItemLabelCss = function (item) {\n        return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_7__[\"CssClassBuilder\"]()\n            .append(this.cssClasses.itemLabel)\n            .append(this.cssClasses.itemLabelAnswered, item.editor.isAnswered)\n            .append(this.cssClasses.itemLabelAllowFocus, !this.isDesignMode)\n            .append(this.cssClasses.itemLabelOnError, item.editor.errors.length > 0)\n            .toString();\n    };\n    QuestionMultipleTextModel.prototype.getItemCss = function () {\n        return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_7__[\"CssClassBuilder\"]().append(this.cssClasses.item).toString();\n    };\n    QuestionMultipleTextModel.prototype.getItemTitleCss = function () {\n        return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_7__[\"CssClassBuilder\"]().append(this.cssClasses.itemTitle).toString();\n    };\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_4__[\"propertyArray\"])()\n    ], QuestionMultipleTextModel.prototype, \"rows\", void 0);\n    return QuestionMultipleTextModel;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"Question\"]));\n\nvar MutlipleTextRow = /** @class */ (function (_super) {\n    __extends(MutlipleTextRow, _super);\n    function MutlipleTextRow() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.isVisible = true;\n        _this.cells = [];\n        return _this;\n    }\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_4__[\"property\"])()\n    ], MutlipleTextRow.prototype, \"isVisible\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_4__[\"propertyArray\"])()\n    ], MutlipleTextRow.prototype, \"cells\", void 0);\n    return MutlipleTextRow;\n}(_base__WEBPACK_IMPORTED_MODULE_0__[\"Base\"]));\n\nvar MutlipleTextErrorRow = /** @class */ (function (_super) {\n    __extends(MutlipleTextErrorRow, _super);\n    function MutlipleTextErrorRow() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    MutlipleTextErrorRow.prototype.onAfterCreated = function () {\n        var _this = this;\n        var callback = function () {\n            _this.isVisible = _this.cells.some(function (cell) { var _a, _b; return ((_a = cell.item) === null || _a === void 0 ? void 0 : _a.editor) && ((_b = cell.item) === null || _b === void 0 ? void 0 : _b.editor.hasVisibleErrors); });\n        };\n        this.cells.forEach(function (cell) {\n            var _a, _b;\n            if ((_a = cell.item) === null || _a === void 0 ? void 0 : _a.editor) {\n                (_b = cell.item) === null || _b === void 0 ? void 0 : _b.editor.registerFunctionOnPropertyValueChanged(\"hasVisibleErrors\", callback);\n            }\n        });\n        callback();\n    };\n    return MutlipleTextErrorRow;\n}(MutlipleTextRow));\n\nvar MultipleTextCell = /** @class */ (function () {\n    function MultipleTextCell(item, question) {\n        this.item = item;\n        this.question = question;\n        this.isErrorsCell = false;\n    }\n    MultipleTextCell.prototype.getClassName = function () {\n        return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_7__[\"CssClassBuilder\"]().append(this.question.cssClasses.cell).toString();\n    };\n    Object.defineProperty(MultipleTextCell.prototype, \"className\", {\n        get: function () {\n            return this.getClassName();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    return MultipleTextCell;\n}());\n\nvar MultipleTextErrorCell = /** @class */ (function (_super) {\n    __extends(MultipleTextErrorCell, _super);\n    function MultipleTextErrorCell() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.isErrorsCell = true;\n        return _this;\n    }\n    MultipleTextErrorCell.prototype.getClassName = function () {\n        return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_7__[\"CssClassBuilder\"]()\n            .append(_super.prototype.getClassName.call(this))\n            .append(this.question.cssClasses.cellError)\n            .append(this.question.cssClasses.cellErrorTop, this.question.showItemErrorOnTop)\n            .append(this.question.cssClasses.cellErrorBottom, this.question.showItemErrorOnBottom)\n            .toString();\n    };\n    return MultipleTextErrorCell;\n}(MultipleTextCell));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_4__[\"Serializer\"].addClass(\"multipletextitem\", [\n    { name: \"!name\", isUnique: true },\n    \"isRequired:boolean\",\n    { name: \"placeholder\", alternativeName: \"placeHolder\", serializationProperty: \"locPlaceholder\" },\n    {\n        name: \"inputType\",\n        default: \"text\",\n        choices: _settings__WEBPACK_IMPORTED_MODULE_8__[\"settings\"].questions.inputTypes,\n    },\n    { name: \"title\", serializationProperty: \"locTitle\" },\n    { name: \"maxLength:number\", default: -1 },\n    { name: \"size:number\", minValue: 0 },\n    {\n        name: \"requiredErrorText:text\",\n        serializationProperty: \"locRequiredErrorText\",\n    },\n    {\n        name: \"validators:validators\",\n        baseClassName: \"surveyvalidator\",\n        classNamePart: \"validator\",\n    },\n], function () {\n    return new MultipleTextItemModel(\"\");\n});\n_jsonobject__WEBPACK_IMPORTED_MODULE_4__[\"Serializer\"].addClass(\"multipletext\", [\n    { name: \"!items:textitems\", className: \"multipletextitem\" },\n    { name: \"itemSize:number\", minValue: 0 },\n    { name: \"colCount:number\", default: 1, choices: [1, 2, 3, 4, 5] },\n    { name: \"itemErrorLocation\", default: \"default\", choices: [\"default\", \"top\", \"bottom\"], visible: false }\n], function () {\n    return new QuestionMultipleTextModel(\"\");\n}, \"question\");\n_questionfactory__WEBPACK_IMPORTED_MODULE_5__[\"QuestionFactory\"].Instance.registerQuestion(\"multipletext\", function (name) {\n    var q = new QuestionMultipleTextModel(name);\n    QuestionMultipleTextModel.addDefaultItems(q);\n    return q;\n});\n\n\n/***/ }),\n\n/***/ \"./src/question_paneldynamic.ts\":\n/*!**************************************!*\\\n  !*** ./src/question_paneldynamic.ts ***!\n  \\**************************************/\n/*! exports provided: QuestionPanelDynamicItem, QuestionPanelDynamicTemplateSurveyImpl, QuestionPanelDynamicModel */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_3275388__) {\n\n\"use strict\";\n__nested_webpack_require_3275388__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_3275388__.d(__nested_webpack_exports__, \"QuestionPanelDynamicItem\", function() { return QuestionPanelDynamicItem; });\n/* harmony export (binding) */ __nested_webpack_require_3275388__.d(__nested_webpack_exports__, \"QuestionPanelDynamicTemplateSurveyImpl\", function() { return QuestionPanelDynamicTemplateSurveyImpl; });\n/* harmony export (binding) */ __nested_webpack_require_3275388__.d(__nested_webpack_exports__, \"QuestionPanelDynamicModel\", function() { return QuestionPanelDynamicModel; });\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_3275388__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _survey_element__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_3275388__(/*! ./survey-element */ \"./src/survey-element.ts\");\n/* harmony import */ var _localizablestring__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_3275388__(/*! ./localizablestring */ \"./src/localizablestring.ts\");\n/* harmony import */ var _textPreProcessor__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_3275388__(/*! ./textPreProcessor */ \"./src/textPreProcessor.ts\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_3275388__(/*! ./question */ \"./src/question.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_3275388__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_3275388__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\n/* harmony import */ var _error__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_3275388__(/*! ./error */ \"./src/error.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_3275388__(/*! ./settings */ \"./src/settings.ts\");\n/* harmony import */ var _utils_utils__WEBPACK_IMPORTED_MODULE_9__ = __nested_webpack_require_3275388__(/*! ./utils/utils */ \"./src/utils/utils.ts\");\n/* harmony import */ var _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_10__ = __nested_webpack_require_3275388__(/*! ./utils/cssClassBuilder */ \"./src/utils/cssClassBuilder.ts\");\n/* harmony import */ var _actions_action__WEBPACK_IMPORTED_MODULE_11__ = __nested_webpack_require_3275388__(/*! ./actions/action */ \"./src/actions/action.ts\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_12__ = __nested_webpack_require_3275388__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _actions_adaptive_container__WEBPACK_IMPORTED_MODULE_13__ = __nested_webpack_require_3275388__(/*! ./actions/adaptive-container */ \"./src/actions/adaptive-container.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __spreadArray = ( false) || function (to, from) {\n    for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\n        to[j] = from[i];\n    return to;\n};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar QuestionPanelDynamicItemTextProcessor = /** @class */ (function (_super) {\n    __extends(QuestionPanelDynamicItemTextProcessor, _super);\n    function QuestionPanelDynamicItemTextProcessor(data, panelItem, variableName) {\n        var _this = _super.call(this, variableName) || this;\n        _this.data = data;\n        _this.panelItem = panelItem;\n        _this.variableName = variableName;\n        _this.sharedQuestions = {};\n        return _this;\n    }\n    Object.defineProperty(QuestionPanelDynamicItemTextProcessor.prototype, \"survey\", {\n        get: function () {\n            return this.panelItem.getSurvey();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionPanelDynamicItemTextProcessor.prototype, \"panel\", {\n        get: function () {\n            return this.panelItem.panel;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionPanelDynamicItemTextProcessor.prototype, \"panelIndex\", {\n        get: function () {\n            return !!this.data ? this.data.getItemIndex(this.panelItem) : -1;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionPanelDynamicItemTextProcessor.prototype, \"visiblePanelIndex\", {\n        get: function () {\n            return !!this.data ? this.data.getVisibleItemIndex(this.panelItem) : -1;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionPanelDynamicItemTextProcessor.prototype.getValues = function () {\n        return this.panelItem.getAllValues();\n    };\n    QuestionPanelDynamicItemTextProcessor.prototype.getQuestionByName = function (name) {\n        var res = _super.prototype.getQuestionByName.call(this, name);\n        if (!!res)\n            return res;\n        var index = this.panelIndex;\n        res = index > -1 ? this.data.getSharedQuestionFromArray(name, index) : undefined;\n        var qName = !!res ? res.name : name;\n        this.sharedQuestions[qName] = name;\n        return res;\n    };\n    QuestionPanelDynamicItemTextProcessor.prototype.getQuestionDisplayText = function (question) {\n        var name = this.sharedQuestions[question.name];\n        if (!name)\n            return _super.prototype.getQuestionDisplayText.call(this, question);\n        var val = this.panelItem.getValue(name);\n        return question.getDisplayValue(true, val);\n    };\n    QuestionPanelDynamicItemTextProcessor.prototype.onCustomProcessText = function (textValue) {\n        if (textValue.name == QuestionPanelDynamicItem.IndexVariableName) {\n            var index = this.panelIndex;\n            if (index > -1) {\n                textValue.isExists = true;\n                textValue.value = index + 1;\n                return true;\n            }\n        }\n        if (textValue.name == QuestionPanelDynamicItem.VisibleIndexVariableName) {\n            var index = this.visiblePanelIndex;\n            if (index > -1) {\n                textValue.isExists = true;\n                textValue.value = index + 1;\n                return true;\n            }\n        }\n        if (textValue.name.toLowerCase().indexOf(QuestionPanelDynamicItem.ParentItemVariableName + \".\") == 0) {\n            var q = this.data;\n            if (!!q && !!q.parentQuestion && !!q.parent && !!q.parent.data) {\n                var processor = new QuestionPanelDynamicItemTextProcessor(q.parentQuestion, q.parent.data, QuestionPanelDynamicItem.ItemVariableName);\n                var text = QuestionPanelDynamicItem.ItemVariableName +\n                    textValue.name.substring(QuestionPanelDynamicItem.ParentItemVariableName.length);\n                var res = processor.processValue(text, textValue.returnDisplayValue);\n                textValue.isExists = res.isExists;\n                textValue.value = res.value;\n            }\n            return true;\n        }\n        return false;\n    };\n    return QuestionPanelDynamicItemTextProcessor;\n}(_textPreProcessor__WEBPACK_IMPORTED_MODULE_3__[\"QuestionTextProcessor\"]));\nvar QuestionPanelDynamicItem = /** @class */ (function () {\n    function QuestionPanelDynamicItem(data, panel) {\n        this.data = data;\n        this.panelValue = panel;\n        this.textPreProcessor = new QuestionPanelDynamicItemTextProcessor(data, this, QuestionPanelDynamicItem.ItemVariableName);\n        this.setSurveyImpl();\n    }\n    Object.defineProperty(QuestionPanelDynamicItem.prototype, \"panel\", {\n        get: function () {\n            return this.panelValue;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionPanelDynamicItem.prototype.setSurveyImpl = function () {\n        this.panel.setSurveyImpl(this);\n    };\n    QuestionPanelDynamicItem.prototype.getValue = function (name) {\n        var values = this.getAllValues();\n        return values[name];\n    };\n    QuestionPanelDynamicItem.prototype.setValue = function (name, newValue) {\n        var oldItemData = this.data.getPanelItemData(this);\n        var oldValue = !!oldItemData ? oldItemData[name] : undefined;\n        if (_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isTwoValueEquals(newValue, oldValue, false, true, false))\n            return;\n        this.data.setPanelItemData(this, name, _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].getUnbindValue(newValue));\n        var questions = this.panel.questions;\n        var triggerName = QuestionPanelDynamicItem.ItemVariableName + \".\" + name;\n        for (var i = 0; i < questions.length; i++) {\n            var q = questions[i];\n            if (q.getValueName() !== name) {\n                q.checkBindings(name, newValue);\n            }\n            q.runTriggers(triggerName, newValue);\n        }\n    };\n    QuestionPanelDynamicItem.prototype.getVariable = function (name) {\n        return undefined;\n    };\n    QuestionPanelDynamicItem.prototype.setVariable = function (name, newValue) { };\n    QuestionPanelDynamicItem.prototype.getComment = function (name) {\n        var result = this.getValue(name + _settings__WEBPACK_IMPORTED_MODULE_8__[\"settings\"].commentSuffix);\n        return result ? result : \"\";\n    };\n    QuestionPanelDynamicItem.prototype.setComment = function (name, newValue, locNotification) {\n        this.setValue(name + _settings__WEBPACK_IMPORTED_MODULE_8__[\"settings\"].commentSuffix, newValue);\n    };\n    QuestionPanelDynamicItem.prototype.findQuestionByName = function (name) {\n        if (!name)\n            return undefined;\n        var prefix = QuestionPanelDynamicItem.ItemVariableName + \".\";\n        if (name.indexOf(prefix) === 0) {\n            return this.panel.getQuestionByName(name.substring(prefix.length));\n        }\n        var survey = this.getSurvey();\n        return !!survey ? survey.getQuestionByName(name) : null;\n    };\n    QuestionPanelDynamicItem.prototype.getAllValues = function () {\n        return this.data.getPanelItemData(this);\n    };\n    QuestionPanelDynamicItem.prototype.getFilteredValues = function () {\n        var values = {};\n        var surveyValues = !!this.data && !!this.data.getRootData()\n            ? this.data.getRootData().getFilteredValues()\n            : {};\n        for (var key in surveyValues) {\n            values[key] = surveyValues[key];\n        }\n        values[QuestionPanelDynamicItem.ItemVariableName] = this.getAllValues();\n        if (!!this.data) {\n            var indexStr = QuestionPanelDynamicItem.IndexVariableName;\n            var visibleIndexStr = QuestionPanelDynamicItem.VisibleIndexVariableName;\n            delete values[indexStr];\n            delete values[visibleIndexStr];\n            values[indexStr.toLowerCase()] = this.data.getItemIndex(this);\n            values[visibleIndexStr.toLowerCase()] = this.data.getVisibleItemIndex(this);\n            var q = this.data;\n            if (!!q && !!q.parentQuestion && !!q.parent) {\n                values[QuestionPanelDynamicItem.ParentItemVariableName] = q.parent.getValue();\n            }\n        }\n        return values;\n    };\n    QuestionPanelDynamicItem.prototype.getFilteredProperties = function () {\n        if (!!this.data && !!this.data.getRootData())\n            return this.data.getRootData().getFilteredProperties();\n        return { survey: this.getSurvey() };\n    };\n    QuestionPanelDynamicItem.prototype.getSurveyData = function () {\n        return this;\n    };\n    QuestionPanelDynamicItem.prototype.getSurvey = function () {\n        return this.data ? this.data.getSurvey() : null;\n    };\n    QuestionPanelDynamicItem.prototype.getTextProcessor = function () {\n        return this.textPreProcessor;\n    };\n    QuestionPanelDynamicItem.ItemVariableName = \"panel\";\n    QuestionPanelDynamicItem.ParentItemVariableName = \"parentpanel\";\n    QuestionPanelDynamicItem.IndexVariableName = \"panelIndex\";\n    QuestionPanelDynamicItem.VisibleIndexVariableName = \"visiblePanelIndex\";\n    return QuestionPanelDynamicItem;\n}());\n\nvar QuestionPanelDynamicTemplateSurveyImpl = /** @class */ (function () {\n    function QuestionPanelDynamicTemplateSurveyImpl(data) {\n        this.data = data;\n    }\n    QuestionPanelDynamicTemplateSurveyImpl.prototype.getSurveyData = function () {\n        return null;\n    };\n    QuestionPanelDynamicTemplateSurveyImpl.prototype.getSurvey = function () {\n        return this.data.getSurvey();\n    };\n    QuestionPanelDynamicTemplateSurveyImpl.prototype.getTextProcessor = function () {\n        return null;\n    };\n    return QuestionPanelDynamicTemplateSurveyImpl;\n}());\n\n/**\n  * A class that describes the Dynamic Panel question type.\n  *\n  * Dynamic Panel allows respondents to add panels based on a panel template and delete them. Specify the [`templateElements`](https://surveyjs.io/form-library/documentation/questionpaneldynamicmodel#templateElements) property to configure panel template elements.\n  *\n  * [View Demo](https://surveyjs.io/form-library/examples/questiontype-paneldynamic/ (linkStyle))\n  */\nvar QuestionPanelDynamicModel = /** @class */ (function (_super) {\n    __extends(QuestionPanelDynamicModel, _super);\n    function QuestionPanelDynamicModel(name) {\n        var _this = _super.call(this, name) || this;\n        _this.isAddingNewPanels = false;\n        _this.isSetPanelItemData = {};\n        _this.createNewArray(\"panels\", function (panel) { _this.onPanelAdded(panel); }, function (panel) { _this.onPanelRemoved(panel); });\n        _this.createNewArray(\"visiblePanels\");\n        _this.templateValue = _this.createAndSetupNewPanelObject();\n        _this.template.renderWidth = \"100%\";\n        _this.template.selectedElementInDesign = _this;\n        _this.template.addElementCallback = function (element) {\n            _this.addOnPropertyChangedCallback(element);\n            _this.rebuildPanels();\n        };\n        _this.template.removeElementCallback = function () {\n            _this.rebuildPanels();\n        };\n        _this.createLocalizableString(\"confirmDeleteText\", _this, false, \"confirmDelete\");\n        _this.createLocalizableString(\"keyDuplicationError\", _this, false, true);\n        _this.createLocalizableString(\"panelAddText\", _this, false, \"addPanel\");\n        _this.createLocalizableString(\"panelRemoveText\", _this, false, \"removePanel\");\n        _this.createLocalizableString(\"panelPrevText\", _this, false, \"pagePrevText\");\n        _this.createLocalizableString(\"panelNextText\", _this, false, \"pageNextText\");\n        _this.createLocalizableString(\"noEntriesText\", _this, false, \"noEntriesText\");\n        _this.createLocalizableString(\"templateTabTitle\", _this, true, \"panelDynamicTabTextFormat\");\n        _this.registerPropertyChangedHandlers([\"panelsState\"], function () {\n            _this.setPanelsState();\n        });\n        _this.registerPropertyChangedHandlers([\"isMobile\"], function () {\n            _this.updateFooterActions();\n        });\n        _this.registerPropertyChangedHandlers([\"allowAddPanel\"], function () { _this.updateNoEntriesTextDefaultLoc(); });\n        return _this;\n    }\n    Object.defineProperty(QuestionPanelDynamicModel.prototype, \"isCompositeQuestion\", {\n        get: function () { return true; },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionPanelDynamicModel.prototype, \"hasSingleInput\", {\n        get: function () { return false; },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionPanelDynamicModel.prototype, \"isContainer\", {\n        get: function () { return true; },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionPanelDynamicModel.prototype.getFirstQuestionToFocus = function (withError) {\n        for (var i = 0; i < this.visiblePanels.length; i++) {\n            var res = this.visiblePanels[i].getFirstQuestionToFocus(withError);\n            if (!!res)\n                return res;\n        }\n        return null;\n    };\n    QuestionPanelDynamicModel.prototype.setSurveyImpl = function (value, isLight) {\n        _super.prototype.setSurveyImpl.call(this, value, isLight);\n        this.setTemplatePanelSurveyImpl();\n        this.setPanelsSurveyImpl();\n    };\n    QuestionPanelDynamicModel.prototype.assignOnPropertyChangedToTemplate = function () {\n        var elements = this.template.elements;\n        for (var i = 0; i < elements.length; i++) {\n            this.addOnPropertyChangedCallback(elements[i]);\n        }\n    };\n    QuestionPanelDynamicModel.prototype.addOnPropertyChangedCallback = function (element) {\n        var _this = this;\n        if (element.isQuestion) {\n            element.setParentQuestion(this);\n        }\n        element.onPropertyChanged.add(function (element, options) {\n            _this.onTemplateElementPropertyChanged(element, options);\n        });\n        if (element.isPanel) {\n            element.addElementCallback = function (element) {\n                _this.addOnPropertyChangedCallback(element);\n            };\n        }\n    };\n    QuestionPanelDynamicModel.prototype.onTemplateElementPropertyChanged = function (element, options) {\n        if (this.isLoadingFromJson || this.useTemplatePanel || this.panels.length == 0)\n            return;\n        var property = _jsonobject__WEBPACK_IMPORTED_MODULE_5__[\"Serializer\"].findProperty(element.getType(), options.name);\n        if (!property)\n            return;\n        var panels = this.panels;\n        for (var i = 0; i < panels.length; i++) {\n            var question = panels[i].getQuestionByName(element.name);\n            if (!!question && question[options.name] !== options.newValue) {\n                question[options.name] = options.newValue;\n            }\n        }\n    };\n    Object.defineProperty(QuestionPanelDynamicModel.prototype, \"useTemplatePanel\", {\n        get: function () {\n            return this.isDesignMode && !this.isContentElement;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionPanelDynamicModel.prototype.getType = function () {\n        return \"paneldynamic\";\n    };\n    QuestionPanelDynamicModel.prototype.clearOnDeletingContainer = function () {\n        this.panels.forEach(function (panel) {\n            panel.clearOnDeletingContainer();\n        });\n    };\n    Object.defineProperty(QuestionPanelDynamicModel.prototype, \"isAllowTitleLeft\", {\n        get: function () {\n            return false;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionPanelDynamicModel.prototype.removeElement = function (element) {\n        return this.template.removeElement(element);\n    };\n    Object.defineProperty(QuestionPanelDynamicModel.prototype, \"template\", {\n        /**\n         * A `PanelModel` object used as a template to create dynamic panels.\n         * @see PanelModel\n         * @see templateElements\n         * @see templateTitle\n         * @see panels\n         * @see panelCount\n         */\n        get: function () {\n            return this.templateValue;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionPanelDynamicModel.prototype.getPanel = function () {\n        return this.template;\n    };\n    Object.defineProperty(QuestionPanelDynamicModel.prototype, \"templateElements\", {\n        /**\n         * An array of questions and panels included in a panel template.\n         * @see template\n         * @see panels\n         * @see panelCount\n         */\n        get: function () {\n            return this.template.elements;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionPanelDynamicModel.prototype, \"templateTitle\", {\n        /**\n         * A template for panel titles.\n         *\n         * The template can contain the following placeholders:\n         *\n         * - `{panelIndex}` - A zero-based index of a panel in the [`panels`](https://surveyjs.io/form-library/documentation/api-reference/dynamic-panel-model#panels) array.\n         * - `{visiblePanelIndex}` - A zero-based index of a panel in the [`visiblePanels`](https://surveyjs.io/form-library/documentation/api-reference/dynamic-panel-model#visiblePanels) array.\n         * @see template\n         * @see templateDescription\n         * @see templateElements\n         * @see panels\n         * @see panelCount\n         */\n        get: function () {\n            return this.template.title;\n        },\n        set: function (newValue) {\n            this.template.title = newValue;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionPanelDynamicModel.prototype, \"locTemplateTitle\", {\n        get: function () {\n            return this.template.locTitle;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionPanelDynamicModel.prototype, \"templateTabTitle\", {\n        /**\n         * A template for tab titles. Applies when [`renderMode`](https://surveyjs.io/form-library/documentation/api-reference/dynamic-panel-model#renderMode) is `\"tab\"`.\n         *\n         * The template can contain the following placeholders:\n         *\n         * - `{panelIndex}` - A zero-based index of a panel in the [`panels`](https://surveyjs.io/form-library/documentation/api-reference/dynamic-panel-model#panels) array.\n         * - `{visiblePanelIndex}` - A zero-based index of a panel in the [`visiblePanels`](https://surveyjs.io/form-library/documentation/api-reference/dynamic-panel-model#visiblePanels) array.\n         * @see templateTitle\n         * @see renderMode\n         */\n        get: function () {\n            return this.locTemplateTabTitle.text;\n        },\n        set: function (newValue) {\n            this.locTemplateTabTitle.text = newValue;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionPanelDynamicModel.prototype, \"locTemplateTabTitle\", {\n        get: function () {\n            return this.getLocalizableString(\"templateTabTitle\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionPanelDynamicModel.prototype, \"templateDescription\", {\n        /**\n         * A template for panel descriptions.\n         * @see template\n         * @see templateTitle\n         * @see templateElements\n         * @see panels\n         * @see panelCount\n         */\n        get: function () {\n            return this.template.description;\n        },\n        set: function (newValue) {\n            this.template.description = newValue;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionPanelDynamicModel.prototype, \"locTemplateDescription\", {\n        get: function () {\n            return this.template.locDescription;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionPanelDynamicModel.prototype, \"templateVisibleIf\", {\n        /**\n         * A Boolean expression that is evaluated against each panel. If the expression evaluates to `false`, the panel becomes hidden.\n         *\n         * A survey parses and runs all expressions on startup. If any values used in the expression change, the survey re-evaluates it.\n         *\n         * Use the `{panel}` placeholder to reference the current panel in the expression.\n         *\n         * Refer to the following help topic for more information: [Conditional Visibility](https://surveyjs.io/form-library/documentation/design-survey/conditional-logic#conditional-visibility).\n         * @see visibleIf\n         * @see visiblePanels\n         */\n        get: function () {\n            return this.template.visibleIf;\n        },\n        set: function (val) {\n            this.template.visibleIf = val;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionPanelDynamicModel.prototype, \"items\", {\n        get: function () {\n            var res = [];\n            for (var i = 0; i < this.panels.length; i++) {\n                res.push(this.panels[i].data);\n            }\n            return res;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionPanelDynamicModel.prototype, \"panels\", {\n        /**\n         * An array of `PanelModel` objects created based on a panel template.\n         * @see PanelModel\n         * @see template\n         * @see panelCount\n         */\n        get: function () {\n            return this.getPropertyValue(\"panels\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionPanelDynamicModel.prototype, \"visiblePanels\", {\n        /**\n         * An array of currently visible panels ([`PanelModel`](https://surveyjs.io/form-library/documentation/api-reference/panel-model) objects).\n         * @see templateVisibleIf\n         */\n        get: function () {\n            return this.getPropertyValue(\"visiblePanels\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionPanelDynamicModel.prototype.onPanelAdded = function (panel) {\n        this.onPanelRemovedCore(panel);\n        if (!panel.visible)\n            return;\n        var index = 0;\n        var panels = this.panels;\n        for (var i = 0; i < panels.length; i++) {\n            if (panels[i] === panel)\n                break;\n            if (panels[i].visible)\n                index++;\n        }\n        this.visiblePanels.splice(index, 0, panel);\n        this.addTabFromToolbar(panel, index);\n        if (!this.currentPanel) {\n            this.currentPanel = panel;\n        }\n    };\n    QuestionPanelDynamicModel.prototype.onPanelRemoved = function (panel) {\n        var index = this.onPanelRemovedCore(panel);\n        if (this.currentPanel === panel) {\n            var visPanels = this.visiblePanels;\n            if (index >= visPanels.length)\n                index = visPanels.length - 1;\n            this.currentPanel = index >= 0 ? visPanels[index] : null;\n        }\n    };\n    QuestionPanelDynamicModel.prototype.onPanelRemovedCore = function (panel) {\n        var visPanels = this.visiblePanels;\n        var index = visPanels.indexOf(panel);\n        if (index > -1) {\n            visPanels.splice(index, 1);\n            this.removeTabFromToolbar(panel);\n        }\n        return index;\n    };\n    Object.defineProperty(QuestionPanelDynamicModel.prototype, \"currentIndex\", {\n        /**\n         * A zero-based index of the currently displayed panel.\n         *\n         * When `renderMode` is `\"list\"` or Dynamic Panel is empty (`panelCount` is 0), this property contains -1.\n         * @see currentPanel\n         * @see panels\n         * @see panelCount\n         * @see renderMode\n         */\n        get: function () {\n            if (this.isRenderModeList)\n                return -1;\n            if (this.useTemplatePanel)\n                return 0;\n            return this.visiblePanels.indexOf(this.currentPanel);\n        },\n        set: function (val) {\n            if (val < 0 || this.visiblePanelCount < 1)\n                return;\n            if (val >= this.visiblePanelCount)\n                val = this.visiblePanelCount - 1;\n            this.currentPanel = this.visiblePanels[val];\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionPanelDynamicModel.prototype, \"currentPanel\", {\n        /**\n         * A `PanelModel` object that is the currently displayed panel.\n         *\n         * When `renderMode` is `\"list\"` or Dynamic Panel is empty (`panelCount` is 0), this property contains `null`.\n         * @see currentIndex\n         * @see panels\n         * @see panelCount\n         * @see renderMode\n         */\n        get: function () {\n            if (this.isDesignMode)\n                return this.template;\n            if (this.isRenderModeList || this.useTemplatePanel)\n                return null;\n            var res = this.getPropertyValue(\"currentPanel\", null);\n            if (!res && this.visiblePanelCount > 0) {\n                res = this.visiblePanels[0];\n                this.currentPanel = res;\n            }\n            return res;\n        },\n        set: function (val) {\n            if (this.isRenderModeList || this.useTemplatePanel)\n                return;\n            var curPanel = this.getPropertyValue(\"currentPanel\");\n            if (!!val && this.visiblePanels.indexOf(val) < 0 || val === curPanel)\n                return;\n            if (curPanel) {\n                curPanel.onHidingContent();\n            }\n            this.setPropertyValue(\"currentPanel\", val);\n            this.updateFooterActions();\n            this.updateTabToolbarItemsPressedState();\n            this.fireCallback(this.currentIndexChangedCallback);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionPanelDynamicModel.prototype.onHidingContent = function () {\n        _super.prototype.onHidingContent.call(this);\n        if (this.currentPanel) {\n            this.currentPanel.onHidingContent();\n        }\n        else {\n            this.visiblePanels.forEach(function (panel) { return panel.onHidingContent(); });\n        }\n    };\n    Object.defineProperty(QuestionPanelDynamicModel.prototype, \"confirmDelete\", {\n        /**\n         * Specifies whether to display a confirmation dialog when a respondent wants to delete a panel.\n         * @see confirmDeleteText\n         */\n        get: function () {\n            return this.getPropertyValue(\"confirmDelete\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"confirmDelete\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionPanelDynamicModel.prototype, \"keyName\", {\n        /**\n         * Specifies a key question. Set this property to the name of a question used in the template, and Dynamic Panel will display `keyDuplicationError` if a user tries to enter a duplicate value in this question.\n         * @see keyDuplicationError\n         */\n        get: function () {\n            return this.getPropertyValue(\"keyName\", \"\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"keyName\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionPanelDynamicModel.prototype, \"confirmDeleteText\", {\n        /**\n         * A message displayed in a confirmation dialog that appears when a respondent wants to delete a panel.\n         * @see confirmDelete\n         */\n        get: function () {\n            return this.getLocalizableStringText(\"confirmDeleteText\");\n        },\n        set: function (val) {\n            this.setLocalizableStringText(\"confirmDeleteText\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionPanelDynamicModel.prototype, \"locConfirmDeleteText\", {\n        get: function () {\n            return this.getLocalizableString(\"confirmDeleteText\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionPanelDynamicModel.prototype, \"keyDuplicationError\", {\n        /**\n         * An error message displayed when users enter a duplicate value into a question that accepts only unique values (`isUnique` is set to `true` or `keyName` is specified).\n         *\n         * A default value for this property is taken from a [localization dictionary](https://github.com/surveyjs/survey-library/tree/master/src/localization). Refer to the following help topic for more information: [Localization & Globalization](https://surveyjs.io/form-library/documentation/localization).\n         * @see keyName\n         */\n        get: function () {\n            return this.getLocalizableStringText(\"keyDuplicationError\");\n        },\n        set: function (val) {\n            this.setLocalizableStringText(\"keyDuplicationError\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionPanelDynamicModel.prototype, \"locKeyDuplicationError\", {\n        get: function () {\n            return this.getLocalizableString(\"keyDuplicationError\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionPanelDynamicModel.prototype, \"panelPrevText\", {\n        /**\n         * A caption for the Previous button. Applies only if `renderMode` is different from `\"list\"`.\n         * @see renderMode\n         * @see isPrevButtonVisible\n         */\n        get: function () {\n            return this.getLocalizableStringText(\"panelPrevText\");\n        },\n        set: function (val) {\n            this.setLocalizableStringText(\"panelPrevText\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionPanelDynamicModel.prototype, \"locPanelPrevText\", {\n        get: function () {\n            return this.getLocalizableString(\"panelPrevText\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionPanelDynamicModel.prototype, \"panelNextText\", {\n        /**\n         * A caption for the Next button. Applies only if `renderMode` is different from `\"list\"`.\n         * @see renderMode\n         * @see isNextButtonVisible\n         */\n        get: function () {\n            return this.getLocalizableStringText(\"panelNextText\");\n        },\n        set: function (val) {\n            this.setLocalizableStringText(\"panelNextText\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionPanelDynamicModel.prototype, \"locPanelNextText\", {\n        get: function () {\n            return this.getLocalizableString(\"panelNextText\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionPanelDynamicModel.prototype, \"panelAddText\", {\n        /**\n         * A caption for the Add Panel button.\n         */\n        get: function () {\n            return this.getLocalizableStringText(\"panelAddText\");\n        },\n        set: function (value) {\n            this.setLocalizableStringText(\"panelAddText\", value);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionPanelDynamicModel.prototype, \"locPanelAddText\", {\n        get: function () {\n            return this.getLocalizableString(\"panelAddText\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionPanelDynamicModel.prototype, \"panelRemoveText\", {\n        /**\n         * A caption for the Delete Panel button.\n         * @see panelRemoveButtonLocation\n         */\n        get: function () {\n            return this.getLocalizableStringText(\"panelRemoveText\");\n        },\n        set: function (val) {\n            this.setLocalizableStringText(\"panelRemoveText\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionPanelDynamicModel.prototype, \"locPanelRemoveText\", {\n        get: function () {\n            return this.getLocalizableString(\"panelRemoveText\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionPanelDynamicModel.prototype, \"isProgressTopShowing\", {\n        /**\n         * Returns true when the renderMode equals to \"progressTop\" or \"progressTopBottom\"\n         */\n        get: function () {\n            return this.renderMode === \"progressTop\" || this.renderMode === \"progressTopBottom\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionPanelDynamicModel.prototype, \"isProgressBottomShowing\", {\n        /**\n         * Returns true when the renderMode equals to \"progressBottom\" or \"progressTopBottom\"\n         */\n        get: function () {\n            return this.renderMode === \"progressBottom\" || this.renderMode === \"progressTopBottom\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionPanelDynamicModel.prototype, \"isPrevButtonVisible\", {\n        /**\n         * Indicates whether the Previous button is visible.\n         * @see currentIndex\n         * @see currentPanel\n         * @see panelPrevText\n         */\n        get: function () { return this.currentIndex > 0; },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionPanelDynamicModel.prototype, \"isPrevButtonShowing\", {\n        get: function () { return this.isPrevButtonVisible; },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionPanelDynamicModel.prototype, \"isNextButtonVisible\", {\n        /**\n         * Indicates whether the Next button is visible.\n         * @see currentIndex\n         * @see currentPanel\n         * @see panelNextText\n         */\n        get: function () {\n            return this.currentIndex >= 0 && this.currentIndex < this.visiblePanelCount - 1;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionPanelDynamicModel.prototype, \"isNextButtonShowing\", {\n        get: function () { return this.isNextButtonVisible; },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionPanelDynamicModel.prototype, \"isRangeShowing\", {\n        /**\n         * Returns true when showRangeInProgress equals to true, renderMode doesn't equal to \"list\" and visiblePanelCount is >= 2.\n         */\n        get: function () {\n            return (this.showRangeInProgress && this.currentIndex >= 0 && this.visiblePanelCount > 1);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionPanelDynamicModel.prototype.getElementsInDesign = function (includeHidden) {\n        if (includeHidden === void 0) { includeHidden = false; }\n        return includeHidden ? [this.template] : this.templateElements;\n    };\n    QuestionPanelDynamicModel.prototype.prepareValueForPanelCreating = function () {\n        this.addingNewPanelsValue = this.value;\n        this.isAddingNewPanels = true;\n        this.isNewPanelsValueChanged = false;\n    };\n    QuestionPanelDynamicModel.prototype.setValueAfterPanelsCreating = function () {\n        this.isAddingNewPanels = false;\n        if (this.isNewPanelsValueChanged) {\n            this.isValueChangingInternally = true;\n            this.value = this.addingNewPanelsValue;\n            this.isValueChangingInternally = false;\n        }\n    };\n    QuestionPanelDynamicModel.prototype.getValueCore = function () {\n        return this.isAddingNewPanels\n            ? this.addingNewPanelsValue\n            : _super.prototype.getValueCore.call(this);\n    };\n    QuestionPanelDynamicModel.prototype.setValueCore = function (newValue) {\n        if (this.isAddingNewPanels) {\n            this.isNewPanelsValueChanged = true;\n            this.addingNewPanelsValue = newValue;\n        }\n        else {\n            _super.prototype.setValueCore.call(this, newValue);\n        }\n    };\n    QuestionPanelDynamicModel.prototype.setIsMobile = function (val) {\n        _super.prototype.setIsMobile.call(this, val);\n        (this.panels || []).forEach(function (panel) { return panel.elements.forEach(function (element) {\n            if (element instanceof _question__WEBPACK_IMPORTED_MODULE_4__[\"Question\"]) {\n                element.isMobile = val;\n            }\n        }); });\n    };\n    Object.defineProperty(QuestionPanelDynamicModel.prototype, \"panelCount\", {\n        /**\n         * The number of panels in Dynamic Panel.\n         * @see minPanelCount\n         * @see maxPanelCount\n         */\n        get: function () {\n            return this.isLoadingFromJson || this.useTemplatePanel\n                ? this.getPropertyValue(\"panelCount\")\n                : this.panels.length;\n        },\n        set: function (val) {\n            if (val < 0)\n                return;\n            if (this.isLoadingFromJson || this.useTemplatePanel) {\n                this.setPropertyValue(\"panelCount\", val);\n                return;\n            }\n            if (val == this.panels.length || this.useTemplatePanel)\n                return;\n            this.updateBindings(\"panelCount\", val);\n            this.prepareValueForPanelCreating();\n            for (var i = this.panelCount; i < val; i++) {\n                var panel = this.createNewPanel();\n                this.panels.push(panel);\n                if (this.renderMode == \"list\" && this.panelsState != \"default\") {\n                    if (this.panelsState === \"expand\") {\n                        panel.expand();\n                    }\n                    else {\n                        if (!!panel.title) {\n                            panel.collapse();\n                        }\n                    }\n                }\n            }\n            var removedPanels = [];\n            if (val < this.panelCount) {\n                removedPanels = this.panels.splice(val, this.panelCount - val);\n            }\n            this.setValueAfterPanelsCreating();\n            this.setValueBasedOnPanelCount();\n            this.reRunCondition();\n            this.updateFooterActions();\n            this.fireCallback(this.panelCountChangedCallback);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionPanelDynamicModel.prototype, \"visiblePanelCount\", {\n        /**\n         * Returns the number of visible panels in Dynamic Panel.\n         * @see templateVisibleIf\n         */\n        get: function () { return this.visiblePanels.length; },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionPanelDynamicModel.prototype, \"panelsState\", {\n        /**\n         * Specifies whether users can expand and collapse panels. Applies if `renderMode` is `\"list\"` and the `templateTitle` property is specified.\n         *\n         * Possible values:\n         *\n         * - `\"default\"` (default) - All panels are displayed in full and cannot be collapsed.\n         * - `\"expanded\"` - All panels are displayed in full and can be collapsed in the UI.\n         * - `\"collapsed\"` - All panels display only their titles and descriptions and can be expanded in the UI.\n         * - `\"firstExpanded\"` - Only the first panel is displayed in full; other panels are collapsed and can be expanded in the UI.\n         * @see renderMode\n         * @see templateTitle\n         */\n        get: function () {\n            return this.getPropertyValue(\"panelsState\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"panelsState\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionPanelDynamicModel.prototype.setTemplatePanelSurveyImpl = function () {\n        this.template.setSurveyImpl(this.useTemplatePanel\n            ? this.surveyImpl\n            : new QuestionPanelDynamicTemplateSurveyImpl(this));\n    };\n    QuestionPanelDynamicModel.prototype.setPanelsSurveyImpl = function () {\n        for (var i = 0; i < this.panels.length; i++) {\n            var panel = this.panels[i];\n            if (panel == this.template)\n                continue;\n            panel.setSurveyImpl(panel.data);\n        }\n    };\n    QuestionPanelDynamicModel.prototype.setPanelsState = function () {\n        if (this.useTemplatePanel || this.renderMode != \"list\" || !this.templateTitle)\n            return;\n        for (var i = 0; i < this.panels.length; i++) {\n            var state = this.panelsState;\n            if (state === \"firstExpanded\") {\n                state = i === 0 ? \"expanded\" : \"collapsed\";\n            }\n            this.panels[i].state = state;\n        }\n    };\n    QuestionPanelDynamicModel.prototype.setValueBasedOnPanelCount = function () {\n        var value = this.value;\n        if (!value || !Array.isArray(value))\n            value = [];\n        if (value.length == this.panelCount)\n            return;\n        for (var i = value.length; i < this.panelCount; i++)\n            value.push({});\n        if (value.length > this.panelCount) {\n            value.splice(this.panelCount, value.length - this.panelCount);\n        }\n        this.isValueChangingInternally = true;\n        this.value = value;\n        this.isValueChangingInternally = false;\n    };\n    Object.defineProperty(QuestionPanelDynamicModel.prototype, \"minPanelCount\", {\n        /**\n         * A minimum number of panels in Dynamic Panel. Users cannot delete panels if `panelCount` equals `minPanelCount`.\n         *\n         * Default value: 0\n         * @see panelCount\n         * @see maxPanelCount\n         * @see allowRemovePanel\n         */\n        get: function () {\n            return this.getPropertyValue(\"minPanelCount\");\n        },\n        set: function (val) {\n            if (val < 0)\n                val = 0;\n            if (val == this.minPanelCount)\n                return;\n            this.setPropertyValue(\"minPanelCount\", val);\n            if (val > this.maxPanelCount)\n                this.maxPanelCount = val;\n            if (this.panelCount < val)\n                this.panelCount = val;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionPanelDynamicModel.prototype, \"maxPanelCount\", {\n        /**\n         * A maximum number of panels in Dynamic Panel. Users cannot add new panels if `panelCount` equals `maxPanelCount`.\n         *\n         * Default value: 100 (inherited from [`settings.panel.maxPanelCount`](https://surveyjs.io/form-library/documentation/settings#panelMaximumPanelCount))\n         * @see panelCount\n         * @see minPanelCount\n         * @see allowAddPanel\n         */\n        get: function () {\n            return this.getPropertyValue(\"maxPanelCount\");\n        },\n        set: function (val) {\n            if (val <= 0)\n                return;\n            if (val > _settings__WEBPACK_IMPORTED_MODULE_8__[\"settings\"].panel.maxPanelCount)\n                val = _settings__WEBPACK_IMPORTED_MODULE_8__[\"settings\"].panel.maxPanelCount;\n            if (val == this.maxPanelCount)\n                return;\n            this.setPropertyValue(\"maxPanelCount\", val);\n            if (val < this.minPanelCount)\n                this.minPanelCount = val;\n            if (this.panelCount > val)\n                this.panelCount = val;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionPanelDynamicModel.prototype, \"allowAddPanel\", {\n        /**\n         * Specifies whether users are allowed to add new panels.\n         *\n         * Default value: `true`\n         * @see canAddPanel\n         * @see allowRemovePanel\n         */\n        get: function () {\n            return this.getPropertyValue(\"allowAddPanel\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"allowAddPanel\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionPanelDynamicModel.prototype, \"allowRemovePanel\", {\n        /**\n         * Specifies whether users are allowed to delete panels.\n         *\n         * Default value: `true`\n         * @see canRemovePanel\n         * @see allowAddPanel\n         */\n        get: function () {\n            return this.getPropertyValue(\"allowRemovePanel\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"allowRemovePanel\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionPanelDynamicModel.prototype, \"templateTitleLocation\", {\n        /**\n         * Gets or sets the location of question titles relative to their input fields.\n         *\n         * - `\"default\"` (default) - Inherits the setting from the Dynamic Panel's `titleLocation` property, which in turn inherits the [`questionTitleLocation`](https://surveyjs.io/form-library/documentation/surveymodel#questionTitleLocation) property value specified for the Dynamic Panel's container (page or survey).\n         * - `\"top\"` - Displays question titles above input fields.\n         * - `\"bottom\"` - Displays question titles below input fields.\n         * - `\"left\"` - Displays question titles to the left of input fields.\n         * - `\"hidden\"` - Hides question titles.\n         * @see titleLocation\n         */\n        get: function () {\n            return this.getPropertyValue(\"templateTitleLocation\");\n        },\n        set: function (value) {\n            this.setPropertyValue(\"templateTitleLocation\", value.toLowerCase());\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionPanelDynamicModel.prototype, \"templateErrorLocation\", {\n        /**\n         * Specifies the error message position.\n         *\n         * Possible values:\n         *\n         * - `\"default\"` (default) - Inherits the setting from the [`errorLocation`](#errorLocation) property.\n         * - `\"top\"` - Displays error messages above questions.\n         * - `\"bottom\"` - Displays error messages below questions.\n         */\n        get: function () {\n            return this.getPropertyValue(\"templateErrorLocation\");\n        },\n        set: function (value) {\n            this.setPropertyValue(\"templateErrorLocation\", value.toLowerCase());\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionPanelDynamicModel.prototype, \"showQuestionNumbers\", {\n        /**\n         * Use this property to show/hide the numbers in titles in questions inside a dynamic panel.\n         * By default the value is \"off\". You may set it to \"onPanel\" and the first question inside a dynamic panel will start with 1 or \"onSurvey\" to include nested questions in dymamic panels into global survey question numbering.\n         */\n        get: function () {\n            return this.getPropertyValue(\"showQuestionNumbers\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"showQuestionNumbers\", val);\n            if (!this.isLoadingFromJson && this.survey) {\n                this.survey.questionVisibilityChanged(this, this.visible);\n            }\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionPanelDynamicModel.prototype, \"panelRemoveButtonLocation\", {\n        /**\n         * Specifies the location of the Delete Panel button relative to panel content.\n         *\n         * Possible values:\n         *\n         * - `\"bottom\"` (default) - Displays the Delete Panel button below panel content.\n         * - `\"right\"` - Displays the Delete Panel button to the right of panel content.\n         * @see panelRemoveText\n         */\n        get: function () {\n            return this.getPropertyValue(\"panelRemoveButtonLocation\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"panelRemoveButtonLocation\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionPanelDynamicModel.prototype, \"showRangeInProgress\", {\n        /**\n         * Shows the range from 1 to panelCount when renderMode doesn't equal to \"list\". Set to false to hide this element.\n         * @see panelCount\n         * @see renderMode\n         */\n        get: function () {\n            return this.getPropertyValue(\"showRangeInProgress\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"showRangeInProgress\", val);\n            this.updateFooterActions();\n            this.fireCallback(this.currentIndexChangedCallback);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionPanelDynamicModel.prototype, \"renderMode\", {\n        /**\n         * Specifies how to render panels.\n         *\n         * Possible values:\n         *\n         * - `\"list\"` - Renders panels one under the other. [View Demo](https://surveyjs.io/form-library/examples/how-to-use-expressions-in-dynamic-panel/)\n         * - `\"progressTop\"` - Renders each panel as a card and displays a progress bar at the top. [View Demo](https://surveyjs.io/form-library/examples/questiontype-paneldynamic/)\n         * - `\"progressBottom\"` - Renders each panel panel as a card and displays a progress bar at the bottom.\n         * - `\"progressTopBottom\"` - Renders each panel as a card and displays a progress bar at the top and bottom.\n         * - `\"tab\"` - Renders each panel within a tab. Use the [`templateTabTitle`](https://surveyjs.io/form-library/documentation/api-reference/dynamic-panel-model#templateTabTitle) to specify a template for tab titles.\n         */\n        get: function () {\n            return this.getPropertyValue(\"renderMode\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"renderMode\", val);\n            this.updateFooterActions();\n            this.fireCallback(this.renderModeChangedCallback);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionPanelDynamicModel.prototype, \"tabAlign\", {\n        get: function () {\n            return this.getPropertyValue(\"tabAlign\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"tabAlign\", val);\n            if (this.isRenderModeTab) {\n                this.additionalTitleToolbar.containerCss = this.getAdditionalTitleToolbarCss();\n            }\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionPanelDynamicModel.prototype, \"isRenderModeList\", {\n        get: function () {\n            return this.renderMode === \"list\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionPanelDynamicModel.prototype, \"isRenderModeTab\", {\n        get: function () {\n            return this.renderMode === \"tab\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionPanelDynamicModel.prototype, \"hasTitleOnLeftTop\", {\n        get: function () {\n            if (this.isRenderModeTab && this.visiblePanelCount > 0)\n                return true;\n            if (!this.hasTitle)\n                return false;\n            var location = this.getTitleLocation();\n            return location === \"left\" || location === \"top\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionPanelDynamicModel.prototype.setVisibleIndex = function (value) {\n        if (!this.isVisible)\n            return 0;\n        var startIndex = this.showQuestionNumbers == \"onSurvey\" ? value : 0;\n        for (var i = 0; i < this.visiblePanels.length; i++) {\n            var counter = this.setPanelVisibleIndex(this.visiblePanels[i], startIndex, this.showQuestionNumbers != \"off\");\n            if (this.showQuestionNumbers == \"onSurvey\") {\n                startIndex += counter;\n            }\n        }\n        _super.prototype.setVisibleIndex.call(this, this.showQuestionNumbers != \"onSurvey\" ? value : -1);\n        return this.showQuestionNumbers != \"onSurvey\" ? 1 : startIndex - value;\n    };\n    QuestionPanelDynamicModel.prototype.setPanelVisibleIndex = function (panel, index, showIndex) {\n        if (!showIndex) {\n            panel.setVisibleIndex(-1);\n            return 0;\n        }\n        return panel.setVisibleIndex(index);\n    };\n    Object.defineProperty(QuestionPanelDynamicModel.prototype, \"canAddPanel\", {\n        /**\n         * Indicates whether it is possible to add a new panel.\n         *\n         * This property returns `true` when all of the following conditions apply:\n         *\n         * - Users are allowed to add new panels (`allowAddPanel` is `true`).\n         * - Dynamic Panel or its parent survey is not in read-only state.\n         * - `panelCount` is less than `maxPanelCount`.\n         * @see allowAddPanel\n         * @see isReadOnly\n         * @see panelCount\n         * @see maxPanelCount\n         * @see canRemovePanel\n         */\n        get: function () {\n            if (this.isDesignMode)\n                return false;\n            if (this.isDefaultV2Theme && !this.legacyNavigation && !this.isRenderModeList && this.currentIndex < this.visiblePanelCount - 1) {\n                return false;\n            }\n            return (this.allowAddPanel &&\n                !this.isReadOnly &&\n                this.panelCount < this.maxPanelCount);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionPanelDynamicModel.prototype, \"canRemovePanel\", {\n        /**\n         * Indicates whether it is possible to delete panels.\n         *\n         * This property returns `true` when all of the following conditions apply:\n         *\n         * - Users are allowed to delete panels (`allowRemovePanel` is `true`).\n         * - Dynamic Panel or its parent survey is not in read-only state.\n         * - `panelCount` exceeds `minPanelCount`.\n         * @see allowRemovePanel\n         * @see isReadOnly\n         * @see panelCount\n         * @see minPanelCount\n         * @see canAddPanel\n         */\n        get: function () {\n            if (this.isDesignMode)\n                return false;\n            return (this.allowRemovePanel &&\n                !this.isReadOnly &&\n                this.panelCount > this.minPanelCount);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionPanelDynamicModel.prototype.rebuildPanels = function () {\n        var _a;\n        if (this.isLoadingFromJson)\n            return;\n        this.prepareValueForPanelCreating();\n        var panels = [];\n        var panel;\n        if (this.useTemplatePanel) {\n            panel = new QuestionPanelDynamicItem(this, this.template);\n            panels.push(this.template);\n        }\n        else {\n            for (var i = 0; i < this.panelCount; i++) {\n                panel = this.createNewPanel();\n                panels.push(this.createNewPanel());\n            }\n        }\n        (_a = this.panels).splice.apply(_a, __spreadArray([0, this.panels.length], panels));\n        this.setValueAfterPanelsCreating();\n        this.setPanelsState();\n        this.reRunCondition();\n        this.updateFooterActions();\n        this.fireCallback(this.panelCountChangedCallback);\n        this.updateTabToolbar();\n    };\n    Object.defineProperty(QuestionPanelDynamicModel.prototype, \"defaultPanelValue\", {\n        /**\n         * If it is not empty, then this value is set to every new panel, including panels created initially, unless the defaultValue is not empty\n         * @see defaultValue\n         * @see defaultValueFromLastPanel\n         */\n        get: function () {\n            return this.getPropertyValue(\"defaultPanelValue\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"defaultPanelValue\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionPanelDynamicModel.prototype, \"defaultValueFromLastPanel\", {\n        /**\n         * Specifies whether default values for a new panel should be copied from the last panel.\n         *\n         * If you also specify `defaultValue`, it will be merged with the copied values.\n         * @see defaultValue\n         */\n        get: function () {\n            return this.getPropertyValue(\"defaultValueFromLastPanel\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"defaultValueFromLastPanel\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionPanelDynamicModel.prototype.isDefaultValueEmpty = function () {\n        return (_super.prototype.isDefaultValueEmpty.call(this) && this.isValueEmpty(this.defaultPanelValue));\n    };\n    QuestionPanelDynamicModel.prototype.setDefaultValue = function () {\n        if (this.isValueEmpty(this.defaultPanelValue) ||\n            !this.isValueEmpty(this.defaultValue)) {\n            _super.prototype.setDefaultValue.call(this);\n            return;\n        }\n        if (!this.isEmpty() || this.panelCount == 0)\n            return;\n        var newValue = [];\n        for (var i = 0; i < this.panelCount; i++) {\n            newValue.push(this.defaultPanelValue);\n        }\n        this.value = newValue;\n    };\n    Object.defineProperty(QuestionPanelDynamicModel.prototype, \"isValueArray\", {\n        get: function () { return true; },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionPanelDynamicModel.prototype.isEmpty = function () {\n        var val = this.value;\n        if (!val || !Array.isArray(val))\n            return true;\n        for (var i = 0; i < val.length; i++) {\n            if (!this.isRowEmpty(val[i]))\n                return false;\n        }\n        return true;\n    };\n    QuestionPanelDynamicModel.prototype.getProgressInfo = function () {\n        return _survey_element__WEBPACK_IMPORTED_MODULE_1__[\"SurveyElement\"].getProgressInfoByElements(this.visiblePanels, this.isRequired);\n    };\n    QuestionPanelDynamicModel.prototype.isRowEmpty = function (val) {\n        for (var prop in val) {\n            if (val.hasOwnProperty(prop))\n                return false;\n        }\n        return true;\n    };\n    /**\n     * Add a new dynamic panel based on the template Panel. It checks if canAddPanel returns true and then calls addPanel method.\n     * If a renderMode is different from \"list\" and the current panel has erros, then\n     * @see template\n     * @see panelCount\n     * @see panels\n     * @see canAddPanel\n     */\n    QuestionPanelDynamicModel.prototype.addPanelUI = function () {\n        if (!this.canAddPanel)\n            return null;\n        if (!this.canLeaveCurrentPanel())\n            return null;\n        var newPanel = this.addPanel();\n        if (this.renderMode === \"list\" && this.panelsState !== \"default\") {\n            newPanel.expand();\n        }\n        return newPanel;\n    };\n    /**\n     * Add a new dynamic panel based on the template Panel.\n     * @see template\n     * @see panelCount\n     * @see panels\n     * @see renderMode\n     */\n    QuestionPanelDynamicModel.prototype.addPanel = function () {\n        this.panelCount++;\n        if (!this.isRenderModeList) {\n            this.currentIndex = this.panelCount - 1;\n        }\n        var newValue = this.value;\n        var hasModified = false;\n        if (!this.isValueEmpty(this.defaultPanelValue)) {\n            if (!!newValue &&\n                Array.isArray(newValue) &&\n                newValue.length == this.panelCount) {\n                hasModified = true;\n                this.copyValue(newValue[newValue.length - 1], this.defaultPanelValue);\n            }\n        }\n        if (this.defaultValueFromLastPanel &&\n            !!newValue &&\n            Array.isArray(newValue) &&\n            newValue.length > 1 &&\n            newValue.length == this.panelCount) {\n            hasModified = true;\n            this.copyValue(newValue[newValue.length - 1], newValue[newValue.length - 2]);\n        }\n        if (hasModified) {\n            this.value = newValue;\n        }\n        if (this.survey)\n            this.survey.dynamicPanelAdded(this);\n        return this.panels[this.panelCount - 1];\n    };\n    QuestionPanelDynamicModel.prototype.canLeaveCurrentPanel = function () {\n        return !(this.renderMode !== \"list\" && this.currentPanel && this.currentPanel.hasErrors(true, true));\n    };\n    QuestionPanelDynamicModel.prototype.copyValue = function (src, dest) {\n        for (var key in dest) {\n            src[key] = dest[key];\n        }\n    };\n    /**\n     * Call removePanel function. Do nothing is canRemovePanel returns false. If confirmDelete set to true, it shows the confirmation dialog first.\n     * @param value a panel or panel index\n     * @see removePanel\n     * @see confirmDelete\n     * @see confirmDeleteText\n     * @see canRemovePanel\n     *\n     */\n    QuestionPanelDynamicModel.prototype.removePanelUI = function (value) {\n        var _this = this;\n        if (!this.canRemovePanel)\n            return;\n        if (this.confirmDelete) {\n            Object(_utils_utils__WEBPACK_IMPORTED_MODULE_9__[\"confirmActionAsync\"])(this.confirmDeleteText, function () { _this.removePanel(value); });\n        }\n        else {\n            this.removePanel(value);\n        }\n    };\n    /**\n     * Switches Dynamic Panel to the next panel. Returns `true` in case of success, or `false` if `renderMode` is `\"list\"` or the current panel contains validation errors.\n     * @see renderMode\n     */\n    QuestionPanelDynamicModel.prototype.goToNextPanel = function () {\n        if (this.currentIndex < 0)\n            return false;\n        if (!this.canLeaveCurrentPanel())\n            return false;\n        this.currentIndex++;\n        return true;\n    };\n    /**\n     * Switches Dynamic Panel to the previous panel.\n     */\n    QuestionPanelDynamicModel.prototype.goToPrevPanel = function () {\n        if (this.currentIndex < 0)\n            return;\n        this.currentIndex--;\n    };\n    /**\n     * Removes a dynamic panel from the panels array.\n     * @param value a panel or panel index\n     * @see panels\n     * @see template\n     */\n    QuestionPanelDynamicModel.prototype.removePanel = function (value) {\n        var visIndex = this.getVisualPanelIndex(value);\n        if (visIndex < 0 || visIndex >= this.visiblePanelCount)\n            return;\n        var panel = this.visiblePanels[visIndex];\n        var index = this.panels.indexOf(panel);\n        if (index < 0)\n            return;\n        if (this.survey && !this.survey.dynamicPanelRemoving(this, index, panel))\n            return;\n        this.panels.splice(index, 1);\n        this.updateBindings(\"panelCount\", this.panelCount);\n        var value = this.value;\n        if (!value || !Array.isArray(value) || index >= value.length)\n            return;\n        this.isValueChangingInternally = true;\n        value.splice(index, 1);\n        this.value = value;\n        this.updateFooterActions();\n        this.fireCallback(this.panelCountChangedCallback);\n        if (this.survey)\n            this.survey.dynamicPanelRemoved(this, index, panel);\n        this.isValueChangingInternally = false;\n    };\n    QuestionPanelDynamicModel.prototype.getVisualPanelIndex = function (val) {\n        if (_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isNumber(val))\n            return val;\n        var visPanels = this.visiblePanels;\n        for (var i = 0; i < visPanels.length; i++) {\n            if (visPanels[i] === val || visPanels[i].data === val)\n                return i;\n        }\n        return -1;\n    };\n    QuestionPanelDynamicModel.prototype.getPanelIndexById = function (id) {\n        for (var i = 0; i < this.panels.length; i++) {\n            if (this.panels[i].id === id)\n                return i;\n        }\n        return -1;\n    };\n    QuestionPanelDynamicModel.prototype.locStrsChanged = function () {\n        _super.prototype.locStrsChanged.call(this);\n        var panels = this.panels;\n        for (var i = 0; i < panels.length; i++) {\n            panels[i].locStrsChanged();\n        }\n        if (this.additionalTitleToolbar) {\n            this.additionalTitleToolbar.locStrsChanged();\n        }\n    };\n    QuestionPanelDynamicModel.prototype.clearIncorrectValues = function () {\n        for (var i = 0; i < this.panels.length; i++) {\n            this.clearIncorrectValuesInPanel(i);\n        }\n    };\n    QuestionPanelDynamicModel.prototype.clearErrors = function () {\n        _super.prototype.clearErrors.call(this);\n        for (var i = 0; i < this.panels.length; i++) {\n            this.panels[i].clearErrors();\n        }\n    };\n    QuestionPanelDynamicModel.prototype.getQuestionFromArray = function (name, index) {\n        if (index >= this.panelCount)\n            return null;\n        return this.panels[index].getQuestionByName(name);\n    };\n    QuestionPanelDynamicModel.prototype.clearIncorrectValuesInPanel = function (index) {\n        var panel = this.panels[index];\n        panel.clearIncorrectValues();\n        var val = this.value;\n        var values = !!val && index < val.length ? val[index] : null;\n        if (!values)\n            return;\n        var isChanged = false;\n        for (var key in values) {\n            if (this.getSharedQuestionFromArray(key, index))\n                continue;\n            var q = panel.getQuestionByName(key);\n            if (!!q)\n                continue;\n            if (this.iscorrectValueWithPostPrefix(panel, key, _settings__WEBPACK_IMPORTED_MODULE_8__[\"settings\"].commentSuffix) ||\n                this.iscorrectValueWithPostPrefix(panel, key, _settings__WEBPACK_IMPORTED_MODULE_8__[\"settings\"].matrix.totalsSuffix))\n                continue;\n            delete values[key];\n            isChanged = true;\n        }\n        if (isChanged) {\n            val[index] = values;\n            this.value = val;\n        }\n    };\n    QuestionPanelDynamicModel.prototype.iscorrectValueWithPostPrefix = function (panel, key, postPrefix) {\n        if (key.indexOf(postPrefix) !== key.length - postPrefix.length)\n            return false;\n        return !!panel.getQuestionByName(key.substring(0, key.indexOf(postPrefix)));\n    };\n    QuestionPanelDynamicModel.prototype.getSharedQuestionFromArray = function (name, panelIndex) {\n        return !!this.survey && !!this.valueName\n            ? (this.survey.getQuestionByValueNameFromArray(this.valueName, name, panelIndex))\n            : null;\n    };\n    QuestionPanelDynamicModel.prototype.addConditionObjectsByContext = function (objects, context) {\n        var hasContext = !!context\n            ? context === true || this.template.questions.indexOf(context) > -1\n            : false;\n        var panelObjs = new Array();\n        var questions = this.template.questions;\n        for (var i = 0; i < questions.length; i++) {\n            questions[i].addConditionObjectsByContext(panelObjs, context);\n        }\n        for (var index = 0; index < _settings__WEBPACK_IMPORTED_MODULE_8__[\"settings\"].panel.maxPanelCountInCondition; index++) {\n            var indexStr = \"[\" + index + \"].\";\n            var prefixName = this.getValueName() + indexStr;\n            var prefixText = this.processedTitle + indexStr;\n            for (var i = 0; i < panelObjs.length; i++) {\n                objects.push({\n                    name: prefixName + panelObjs[i].name,\n                    text: prefixText + panelObjs[i].text,\n                    question: panelObjs[i].question,\n                });\n            }\n        }\n        if (hasContext) {\n            var prefixName = context === true ? this.getValueName() + \".\" : \"\";\n            var prefixText = context === true ? this.processedTitle + \".\" : \"\";\n            for (var i = 0; i < panelObjs.length; i++) {\n                if (panelObjs[i].question == context)\n                    continue;\n                var obj = {\n                    name: prefixName + QuestionPanelDynamicItem.ItemVariableName + \".\" + panelObjs[i].name,\n                    text: prefixText + QuestionPanelDynamicItem.ItemVariableName + \".\" + panelObjs[i].text,\n                    question: panelObjs[i].question\n                };\n                if (context === true) {\n                    obj.context = this;\n                }\n                objects.push(obj);\n            }\n        }\n    };\n    QuestionPanelDynamicModel.prototype.collectNestedQuestionsCore = function (questions, visibleOnly) {\n        var panels = visibleOnly ? this.visiblePanels : this.panels;\n        if (!Array.isArray(panels))\n            return;\n        panels.forEach(function (panel) {\n            panel.questions.forEach(function (q) { return q.collectNestedQuestions(questions, visibleOnly); });\n        });\n    };\n    QuestionPanelDynamicModel.prototype.getConditionJson = function (operator, path) {\n        if (operator === void 0) { operator = null; }\n        if (path === void 0) { path = null; }\n        if (!path)\n            return _super.prototype.getConditionJson.call(this, operator, path);\n        var questionName = path;\n        var pos = path.indexOf(\".\");\n        if (pos > -1) {\n            questionName = path.substring(0, pos);\n            path = path.substring(pos + 1);\n        }\n        var question = this.template.getQuestionByName(questionName);\n        if (!question)\n            return null;\n        return question.getConditionJson(operator, path);\n    };\n    QuestionPanelDynamicModel.prototype.onReadOnlyChanged = function () {\n        var readOnly = this.isReadOnly;\n        this.template.readOnly = readOnly;\n        for (var i = 0; i < this.panels.length; i++) {\n            this.panels[i].readOnly = readOnly;\n        }\n        this.updateNoEntriesTextDefaultLoc();\n        this.updateFooterActions();\n        _super.prototype.onReadOnlyChanged.call(this);\n    };\n    QuestionPanelDynamicModel.prototype.updateNoEntriesTextDefaultLoc = function () {\n        var loc = this.getLocalizableString(\"noEntriesText\");\n        if (!loc)\n            return;\n        loc.localizationName = (this.isReadOnly || !this.allowAddPanel) ? \"noEntriesReadonlyText\" : \"noEntriesText\";\n        loc.strChanged();\n    };\n    QuestionPanelDynamicModel.prototype.onSurveyLoad = function () {\n        this.template.readOnly = this.isReadOnly;\n        this.template.onSurveyLoad();\n        if (this.getPropertyValue(\"panelCount\") > 0) {\n            this.panelCount = this.getPropertyValue(\"panelCount\");\n        }\n        if (this.useTemplatePanel) {\n            this.rebuildPanels();\n        }\n        this.setPanelsSurveyImpl();\n        this.setPanelsState();\n        this.assignOnPropertyChangedToTemplate();\n        if (!!this.survey) {\n            for (var i = 0; i < this.panelCount; i++) {\n                this.survey.dynamicPanelAdded(this);\n            }\n        }\n        this.updateIsReady();\n        if (this.isReadOnly || !this.allowAddPanel) {\n            this.updateNoEntriesTextDefaultLoc();\n        }\n        _super.prototype.onSurveyLoad.call(this);\n    };\n    QuestionPanelDynamicModel.prototype.onFirstRendering = function () {\n        this.template.onFirstRendering();\n        for (var i = 0; i < this.panels.length; i++) {\n            this.panels[i].onFirstRendering();\n        }\n        _super.prototype.onFirstRendering.call(this);\n    };\n    QuestionPanelDynamicModel.prototype.localeChanged = function () {\n        _super.prototype.localeChanged.call(this);\n        for (var i = 0; i < this.panels.length; i++) {\n            this.panels[i].localeChanged();\n        }\n    };\n    QuestionPanelDynamicModel.prototype.runCondition = function (values, properties) {\n        _super.prototype.runCondition.call(this, values, properties);\n        this.runPanelsCondition(this.panels, values, properties);\n    };\n    QuestionPanelDynamicModel.prototype.runTriggers = function (name, value) {\n        _super.prototype.runTriggers.call(this, name, value);\n        this.visiblePanels.forEach(function (p) {\n            p.questions.forEach(function (q) { return q.runTriggers(name, value); });\n        });\n    };\n    QuestionPanelDynamicModel.prototype.reRunCondition = function () {\n        if (!this.data)\n            return;\n        this.runCondition(this.getDataFilteredValues(), this.getDataFilteredProperties());\n    };\n    QuestionPanelDynamicModel.prototype.runPanelsCondition = function (panels, values, properties) {\n        var cachedValues = {};\n        if (values && values instanceof Object) {\n            cachedValues = JSON.parse(JSON.stringify(values));\n        }\n        if (!!this.parentQuestion && !!this.parent) {\n            cachedValues[QuestionPanelDynamicItem.ParentItemVariableName] = this.parent.getValue();\n        }\n        this.isValueChangingInternally = true;\n        for (var i = 0; i < panels.length; i++) {\n            var panel = panels[i];\n            var panelValues = this.getPanelItemData(panel.data);\n            //Should be unique for every panel due async expression support\n            var newValues = _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].createCopy(cachedValues);\n            var panelName = QuestionPanelDynamicItem.ItemVariableName;\n            newValues[panelName] = panelValues;\n            newValues[QuestionPanelDynamicItem.IndexVariableName.toLowerCase()] = i;\n            var newProps = _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].createCopy(properties);\n            newProps[panelName] = panel;\n            panel.runCondition(newValues, newProps);\n        }\n        this.isValueChangingInternally = false;\n    };\n    QuestionPanelDynamicModel.prototype.onAnyValueChanged = function (name, questionName) {\n        _super.prototype.onAnyValueChanged.call(this, name, questionName);\n        for (var i = 0; i < this.panels.length; i++) {\n            this.panels[i].onAnyValueChanged(name, questionName);\n            this.panels[i].onAnyValueChanged(QuestionPanelDynamicItem.ItemVariableName, \"\");\n        }\n    };\n    QuestionPanelDynamicModel.prototype.hasKeysDuplicated = function (fireCallback, rec) {\n        if (rec === void 0) { rec = null; }\n        var keyValues = [];\n        var res;\n        for (var i = 0; i < this.panels.length; i++) {\n            res =\n                this.isValueDuplicated(this.panels[i], keyValues, rec, fireCallback) ||\n                    res;\n        }\n        return res;\n    };\n    QuestionPanelDynamicModel.prototype.updatePanelsContainsErrors = function () {\n        var question = this.changingValueQuestion;\n        var parent = question.parent;\n        while (!!parent) {\n            parent.updateContainsErrors();\n            parent = parent.parent;\n        }\n        this.updateContainsErrors();\n    };\n    QuestionPanelDynamicModel.prototype.hasErrors = function (fireCallback, rec) {\n        if (fireCallback === void 0) { fireCallback = true; }\n        if (rec === void 0) { rec = null; }\n        if (this.isValueChangingInternally)\n            return false;\n        var res = false;\n        if (!!this.changingValueQuestion) {\n            var res = this.changingValueQuestion.hasErrors(fireCallback, rec);\n            res = this.hasKeysDuplicated(fireCallback, rec) || res;\n            this.updatePanelsContainsErrors();\n        }\n        else {\n            res = this.hasErrorInPanels(fireCallback, rec);\n        }\n        return _super.prototype.hasErrors.call(this, fireCallback, rec) || res;\n    };\n    QuestionPanelDynamicModel.prototype.getContainsErrors = function () {\n        var res = _super.prototype.getContainsErrors.call(this);\n        if (res)\n            return res;\n        var panels = this.panels;\n        for (var i = 0; i < panels.length; i++) {\n            if (panels[i].containsErrors)\n                return true;\n        }\n        return false;\n    };\n    QuestionPanelDynamicModel.prototype.getIsAnswered = function () {\n        if (!_super.prototype.getIsAnswered.call(this))\n            return false;\n        var panels = this.visiblePanels;\n        for (var i = 0; i < panels.length; i++) {\n            var visibleQuestions = [];\n            panels[i].addQuestionsToList(visibleQuestions, true);\n            for (var j = 0; j < visibleQuestions.length; j++) {\n                if (!visibleQuestions[j].isAnswered)\n                    return false;\n            }\n        }\n        return true;\n    };\n    QuestionPanelDynamicModel.prototype.clearValueOnHidding = function (isClearOnHidden) {\n        if (!isClearOnHidden) {\n            if (!!this.survey && this.survey.getQuestionClearIfInvisible(\"onHidden\") === \"none\")\n                return;\n            this.clearValueInPanelsIfInvisible(\"onHiddenContainer\");\n        }\n        _super.prototype.clearValueOnHidding.call(this, isClearOnHidden);\n    };\n    QuestionPanelDynamicModel.prototype.clearValueIfInvisible = function (reason) {\n        if (reason === void 0) { reason = \"onHidden\"; }\n        var panelReason = reason === \"onHidden\" ? \"onHiddenContainer\" : reason;\n        this.clearValueInPanelsIfInvisible(panelReason);\n        _super.prototype.clearValueIfInvisible.call(this, reason);\n    };\n    QuestionPanelDynamicModel.prototype.clearValueInPanelsIfInvisible = function (reason) {\n        for (var i = 0; i < this.panels.length; i++) {\n            var questions = this.panels[i].questions;\n            this.isSetPanelItemData = {};\n            for (var j = 0; j < questions.length; j++) {\n                var q = questions[j];\n                q.clearValueIfInvisible(reason);\n                this.isSetPanelItemData[q.getValueName()] = this.maxCheckCount + 1;\n            }\n        }\n        this.isSetPanelItemData = {};\n    };\n    QuestionPanelDynamicModel.prototype.getIsRunningValidators = function () {\n        if (_super.prototype.getIsRunningValidators.call(this))\n            return true;\n        for (var i = 0; i < this.panels.length; i++) {\n            var questions = this.panels[i].questions;\n            for (var j = 0; j < questions.length; j++) {\n                if (questions[j].isRunningValidators)\n                    return true;\n            }\n        }\n        return false;\n    };\n    QuestionPanelDynamicModel.prototype.getAllErrors = function () {\n        var result = _super.prototype.getAllErrors.call(this);\n        var panels = this.visiblePanels;\n        for (var i = 0; i < panels.length; i++) {\n            var questions = panels[i].questions;\n            for (var j = 0; j < questions.length; j++) {\n                var errors = questions[j].getAllErrors();\n                if (errors && errors.length > 0) {\n                    result = result.concat(errors);\n                }\n            }\n        }\n        return result;\n    };\n    QuestionPanelDynamicModel.prototype.getDisplayValueCore = function (keysAsText, value) {\n        var values = this.getUnbindValue(value);\n        if (!values || !Array.isArray(values))\n            return values;\n        for (var i = 0; i < this.panels.length && i < values.length; i++) {\n            var val = values[i];\n            if (!val)\n                continue;\n            values[i] = this.getPanelDisplayValue(i, val, keysAsText);\n        }\n        return values;\n    };\n    QuestionPanelDynamicModel.prototype.getPanelDisplayValue = function (panelIndex, val, keysAsText) {\n        if (!val)\n            return val;\n        var panel = this.panels[panelIndex];\n        var keys = Object.keys(val);\n        for (var i = 0; i < keys.length; i++) {\n            var key = keys[i];\n            var question = panel.getQuestionByValueName(key);\n            if (!question) {\n                question = this.getSharedQuestionFromArray(key, panelIndex);\n            }\n            if (!!question) {\n                var qValue = question.getDisplayValue(keysAsText, val[key]);\n                val[key] = qValue;\n                if (keysAsText && !!question.title && question.title !== key) {\n                    val[question.title] = qValue;\n                    delete val[key];\n                }\n            }\n        }\n        return val;\n    };\n    QuestionPanelDynamicModel.prototype.hasErrorInPanels = function (fireCallback, rec) {\n        var res = false;\n        var panels = this.visiblePanels;\n        var keyValues = [];\n        for (var i = 0; i < panels.length; i++) {\n            this.setOnCompleteAsyncInPanel(panels[i]);\n        }\n        for (var i = 0; i < panels.length; i++) {\n            var pnlError = panels[i].hasErrors(fireCallback, !!rec && rec.focuseOnFirstError, rec);\n            pnlError = this.isValueDuplicated(panels[i], keyValues, rec, fireCallback) || pnlError;\n            if (!this.isRenderModeList && pnlError && !res) {\n                this.currentIndex = i;\n            }\n            res = pnlError || res;\n        }\n        return res;\n    };\n    QuestionPanelDynamicModel.prototype.setOnCompleteAsyncInPanel = function (panel) {\n        var _this = this;\n        var questions = panel.questions;\n        for (var i = 0; i < questions.length; i++) {\n            questions[i].onCompletedAsyncValidators = function (hasErrors) {\n                _this.raiseOnCompletedAsyncValidators();\n            };\n        }\n    };\n    QuestionPanelDynamicModel.prototype.isValueDuplicated = function (panel, keyValues, rec, fireCallback) {\n        if (!this.keyName)\n            return false;\n        var question = panel.getQuestionByValueName(this.keyName);\n        if (!question || question.isEmpty())\n            return false;\n        var value = question.value;\n        if (!!this.changingValueQuestion &&\n            question != this.changingValueQuestion) {\n            question.hasErrors(fireCallback, rec);\n        }\n        for (var i = 0; i < keyValues.length; i++) {\n            if (value == keyValues[i]) {\n                if (fireCallback) {\n                    question.addError(new _error__WEBPACK_IMPORTED_MODULE_7__[\"KeyDuplicationError\"](this.keyDuplicationError, this));\n                }\n                if (!!rec && !rec.firstErrorQuestion) {\n                    rec.firstErrorQuestion = question;\n                }\n                return true;\n            }\n        }\n        keyValues.push(value);\n        return false;\n    };\n    QuestionPanelDynamicModel.prototype.getPanelActions = function (panel) {\n        var _this = this;\n        var actions = panel.footerActions;\n        if (this.panelRemoveButtonLocation !== \"right\") {\n            actions.push(new _actions_action__WEBPACK_IMPORTED_MODULE_11__[\"Action\"]({\n                id: \"remove-panel-\" + panel.id,\n                component: \"sv-paneldynamic-remove-btn\",\n                visible: new _base__WEBPACK_IMPORTED_MODULE_12__[\"ComputedUpdater\"](function () { return [_this.canRemovePanel, panel.state !== \"collapsed\", _this.panelRemoveButtonLocation !== \"right\"].every(function (val) { return val === true; }); }),\n                data: { question: this, panel: panel }\n            }));\n        }\n        if (!!this.survey) {\n            actions = this.survey.getUpdatedPanelFooterActions(panel, actions, this);\n        }\n        return actions;\n    };\n    QuestionPanelDynamicModel.prototype.createNewPanel = function () {\n        var _this = this;\n        var panel = this.createAndSetupNewPanelObject();\n        var json = this.template.toJSON();\n        new _jsonobject__WEBPACK_IMPORTED_MODULE_5__[\"JsonObject\"]().toObject(json, panel);\n        panel.renderWidth = \"100%\";\n        panel.updateCustomWidgets();\n        new QuestionPanelDynamicItem(this, panel);\n        if (!this.isDesignMode && !this.isReadOnly && !this.isValueEmpty(panel.getValue())) {\n            this.runPanelsCondition([panel], this.getDataFilteredValues(), this.getDataFilteredProperties());\n        }\n        panel.onFirstRendering();\n        var questions = panel.questions;\n        for (var i = 0; i < questions.length; i++) {\n            questions[i].setParentQuestion(this);\n        }\n        panel.locStrsChanged();\n        panel.onGetFooterActionsCallback = function () {\n            return _this.getPanelActions(panel);\n        };\n        panel.onGetFooterToolbarCssCallback = function () { return _this.cssClasses.panelFooter; };\n        panel.registerPropertyChangedHandlers([\"visible\"], function () {\n            if (panel.visible)\n                _this.onPanelAdded(panel);\n            else\n                _this.onPanelRemoved(panel);\n            _this.updateFooterActions();\n        });\n        return panel;\n    };\n    QuestionPanelDynamicModel.prototype.createAndSetupNewPanelObject = function () {\n        var _this = this;\n        var panel = this.createNewPanelObject();\n        panel.isInteractiveDesignElement = false;\n        panel.setParentQuestion(this);\n        panel.onGetQuestionTitleLocation = function () { return _this.getTemplateQuestionTitleLocation(); };\n        return panel;\n    };\n    QuestionPanelDynamicModel.prototype.getTemplateQuestionTitleLocation = function () {\n        return this.templateTitleLocation != \"default\"\n            ? this.templateTitleLocation\n            : this.getTitleLocationCore();\n    };\n    QuestionPanelDynamicModel.prototype.getChildErrorLocation = function (child) {\n        if (this.templateErrorLocation !== \"default\")\n            return this.templateErrorLocation;\n        return _super.prototype.getChildErrorLocation.call(this, child);\n    };\n    QuestionPanelDynamicModel.prototype.createNewPanelObject = function () {\n        return _jsonobject__WEBPACK_IMPORTED_MODULE_5__[\"Serializer\"].createClass(\"panel\");\n    };\n    QuestionPanelDynamicModel.prototype.setPanelCountBasedOnValue = function () {\n        if (this.isValueChangingInternally || this.useTemplatePanel)\n            return;\n        var val = this.value;\n        var newPanelCount = val && Array.isArray(val) ? val.length : 0;\n        if (newPanelCount == 0 && this.getPropertyValue(\"panelCount\") > 0) {\n            newPanelCount = this.getPropertyValue(\"panelCount\");\n        }\n        this.settingPanelCountBasedOnValue = true;\n        this.panelCount = newPanelCount;\n        this.settingPanelCountBasedOnValue = false;\n    };\n    QuestionPanelDynamicModel.prototype.setQuestionValue = function (newValue) {\n        if (this.settingPanelCountBasedOnValue)\n            return;\n        _super.prototype.setQuestionValue.call(this, newValue, false);\n        this.setPanelCountBasedOnValue();\n        for (var i = 0; i < this.panels.length; i++) {\n            this.panelUpdateValueFromSurvey(this.panels[i]);\n        }\n        this.updateIsAnswered();\n    };\n    QuestionPanelDynamicModel.prototype.onSurveyValueChanged = function (newValue) {\n        if (newValue === undefined && this.isAllPanelsEmpty())\n            return;\n        _super.prototype.onSurveyValueChanged.call(this, newValue);\n        for (var i = 0; i < this.panels.length; i++) {\n            this.panelSurveyValueChanged(this.panels[i]);\n        }\n        if (newValue === undefined) {\n            this.setValueBasedOnPanelCount();\n        }\n        this.updateIsReady();\n    };\n    QuestionPanelDynamicModel.prototype.isAllPanelsEmpty = function () {\n        for (var i = 0; i < this.panels.length; i++) {\n            if (!_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(this.panels[i].getValue()))\n                return false;\n        }\n        return true;\n    };\n    QuestionPanelDynamicModel.prototype.panelUpdateValueFromSurvey = function (panel) {\n        var questions = panel.questions;\n        var values = this.getPanelItemData(panel.data);\n        for (var i = 0; i < questions.length; i++) {\n            var q = questions[i];\n            q.updateValueFromSurvey(values[q.getValueName()]);\n            q.updateCommentFromSurvey(values[q.getValueName() + _settings__WEBPACK_IMPORTED_MODULE_8__[\"settings\"].commentSuffix]);\n            q.initDataUI();\n        }\n    };\n    QuestionPanelDynamicModel.prototype.panelSurveyValueChanged = function (panel) {\n        var questions = panel.questions;\n        var values = this.getPanelItemData(panel.data);\n        for (var i = 0; i < questions.length; i++) {\n            var q = questions[i];\n            q.onSurveyValueChanged(values[q.getValueName()]);\n        }\n    };\n    QuestionPanelDynamicModel.prototype.onSetData = function () {\n        _super.prototype.onSetData.call(this);\n        if (this.useTemplatePanel) {\n            this.setTemplatePanelSurveyImpl();\n            this.rebuildPanels();\n        }\n    };\n    QuestionPanelDynamicModel.prototype.isNewValueCorrect = function (val) {\n        return Array.isArray(val);\n    };\n    //IQuestionPanelDynamicData\n    QuestionPanelDynamicModel.prototype.getItemIndex = function (item) {\n        var res = this.items.indexOf(item);\n        return res > -1 ? res : this.items.length;\n    };\n    QuestionPanelDynamicModel.prototype.getVisibleItemIndex = function (item) {\n        var visPanels = this.visiblePanels;\n        for (var i = 0; i < visPanels.length; i++) {\n            if (visPanels[i].data === item)\n                return i;\n        }\n        return visPanels.length;\n    };\n    QuestionPanelDynamicModel.prototype.getPanelItemData = function (item) {\n        var items = this.items;\n        var index = items.indexOf(item);\n        var qValue = this.value;\n        if (index < 0 && Array.isArray(qValue) && qValue.length > items.length) {\n            index = items.length;\n        }\n        if (index < 0)\n            return {};\n        if (!qValue || !Array.isArray(qValue) || qValue.length <= index)\n            return {};\n        return qValue[index];\n    };\n    QuestionPanelDynamicModel.prototype.setPanelItemData = function (item, name, val) {\n        if (this.isSetPanelItemData[name] > this.maxCheckCount)\n            return;\n        if (!this.isSetPanelItemData[name]) {\n            this.isSetPanelItemData[name] = 0;\n        }\n        this.isSetPanelItemData[name]++;\n        var items = this.items;\n        var index = items.indexOf(item);\n        if (index < 0)\n            index = items.length;\n        var qValue = this.getUnbindValue(this.value);\n        if (!qValue || !Array.isArray(qValue)) {\n            qValue = [];\n        }\n        if (qValue.length <= index) {\n            for (var i = qValue.length; i <= index; i++) {\n                qValue.push({});\n            }\n        }\n        if (!qValue[index])\n            qValue[index] = {};\n        if (!this.isValueEmpty(val)) {\n            qValue[index][name] = val;\n        }\n        else {\n            delete qValue[index][name];\n        }\n        if (index >= 0 && index < this.panels.length) {\n            this.changingValueQuestion = this.panels[index].getQuestionByValueName(name);\n        }\n        this.value = qValue;\n        this.changingValueQuestion = null;\n        if (this.survey) {\n            var options = {\n                question: this,\n                panel: item.panel,\n                name: name,\n                itemIndex: index,\n                itemValue: qValue[index],\n                value: val,\n            };\n            this.survey.dynamicPanelItemValueChanged(this, options);\n        }\n        this.isSetPanelItemData[name]--;\n        if (this.isSetPanelItemData[name] - 1) {\n            delete this.isSetPanelItemData[name];\n        }\n    };\n    QuestionPanelDynamicModel.prototype.getRootData = function () {\n        return this.data;\n    };\n    QuestionPanelDynamicModel.prototype.getPlainData = function (options) {\n        if (options === void 0) { options = { includeEmpty: true }; }\n        var questionPlainData = _super.prototype.getPlainData.call(this, options);\n        if (!!questionPlainData) {\n            questionPlainData.isNode = true;\n            questionPlainData.data = this.panels.map(function (panel, index) {\n                var panelDataItem = {\n                    name: panel.name || index,\n                    title: panel.title || \"Panel\",\n                    value: panel.getValue(),\n                    displayValue: panel.getValue(),\n                    getString: function (val) {\n                        return typeof val === \"object\" ? JSON.stringify(val) : val;\n                    },\n                    isNode: true,\n                    data: panel.questions\n                        .map(function (question) { return question.getPlainData(options); })\n                        .filter(function (d) { return !!d; }),\n                };\n                (options.calculations || []).forEach(function (calculation) {\n                    panelDataItem[calculation.propertyName] = panel[calculation.propertyName];\n                });\n                return panelDataItem;\n            });\n        }\n        return questionPlainData;\n    };\n    QuestionPanelDynamicModel.prototype.updateElementCss = function (reNew) {\n        _super.prototype.updateElementCss.call(this, reNew);\n        for (var i = 0; i < this.panels.length; i++) {\n            var el = this.panels[i];\n            el.updateElementCss(reNew);\n        }\n    };\n    Object.defineProperty(QuestionPanelDynamicModel.prototype, \"progressText\", {\n        get: function () {\n            var rangeMax = this.visiblePanelCount;\n            return this.getLocalizationFormatString(\"panelDynamicProgressText\", this.currentIndex + 1, rangeMax);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionPanelDynamicModel.prototype, \"progress\", {\n        get: function () {\n            return ((this.currentIndex + 1) / this.visiblePanelCount) * 100 + \"%\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionPanelDynamicModel.prototype.getRootCss = function () {\n        return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_10__[\"CssClassBuilder\"]().append(_super.prototype.getRootCss.call(this)).append(this.cssClasses.empty, this.getShowNoEntriesPlaceholder()).toString();\n    };\n    Object.defineProperty(QuestionPanelDynamicModel.prototype, \"cssHeader\", {\n        get: function () {\n            var showTab = this.isRenderModeTab && !!this.panelCount;\n            return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_10__[\"CssClassBuilder\"]()\n                .append(this.cssClasses.header)\n                .append(this.cssClasses.headerTop, this.hasTitleOnTop || showTab)\n                .append(this.cssClasses.headerTab, showTab)\n                .toString();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionPanelDynamicModel.prototype.getPanelWrapperCss = function () {\n        return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_10__[\"CssClassBuilder\"]()\n            .append(this.cssClasses.panelWrapper)\n            .append(this.cssClasses.panelWrapperInRow, this.panelRemoveButtonLocation === \"right\")\n            .toString();\n    };\n    QuestionPanelDynamicModel.prototype.getPanelRemoveButtonCss = function () {\n        return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_10__[\"CssClassBuilder\"]()\n            .append(this.cssClasses.button)\n            .append(this.cssClasses.buttonRemove)\n            .append(this.cssClasses.buttonRemoveRight, this.panelRemoveButtonLocation === \"right\")\n            .toString();\n    };\n    QuestionPanelDynamicModel.prototype.getAddButtonCss = function () {\n        return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_10__[\"CssClassBuilder\"]()\n            .append(this.cssClasses.button)\n            .append(this.cssClasses.buttonAdd)\n            .append(this.cssClasses.buttonAdd + \"--list-mode\", this.renderMode === \"list\")\n            .toString();\n    };\n    QuestionPanelDynamicModel.prototype.getPrevButtonCss = function () {\n        return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_10__[\"CssClassBuilder\"]()\n            .append(this.cssClasses.buttonPrev)\n            .append(this.cssClasses.buttonPrevDisabled, !this.isPrevButtonVisible)\n            .toString();\n    };\n    QuestionPanelDynamicModel.prototype.getNextButtonCss = function () {\n        return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_10__[\"CssClassBuilder\"]()\n            .append(this.cssClasses.buttonNext)\n            .append(this.cssClasses.buttonNextDisabled, !this.isNextButtonVisible)\n            .toString();\n    };\n    Object.defineProperty(QuestionPanelDynamicModel.prototype, \"noEntriesText\", {\n        /**\n         * A text displayed when Dynamic Panel contains no entries. Applies only in the Default V2 theme.\n         */\n        get: function () {\n            return this.getLocalizableStringText(\"noEntriesText\");\n        },\n        set: function (val) {\n            this.setLocalizableStringText(\"noEntriesText\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionPanelDynamicModel.prototype, \"locNoEntriesText\", {\n        get: function () {\n            return this.getLocalizableString(\"noEntriesText\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionPanelDynamicModel.prototype.getShowNoEntriesPlaceholder = function () {\n        return !!this.cssClasses.noEntriesPlaceholder && !this.isDesignMode && this.visiblePanelCount === 0;\n    };\n    QuestionPanelDynamicModel.prototype.needResponsiveWidth = function () {\n        var panel = this.getPanel();\n        if (!!panel && panel.needResponsiveWidth())\n            return true;\n        return false;\n    };\n    QuestionPanelDynamicModel.prototype.getAdditionalTitleToolbar = function () {\n        if (!this.isRenderModeTab)\n            return null;\n        if (!this.additionalTitleToolbarValue) {\n            this.additionalTitleToolbarValue = new _actions_adaptive_container__WEBPACK_IMPORTED_MODULE_13__[\"AdaptiveActionContainer\"]();\n            this.additionalTitleToolbarValue.dotsItem.popupModel.showPointer = false;\n            this.additionalTitleToolbarValue.dotsItem.popupModel.verticalPosition = \"bottom\";\n            this.additionalTitleToolbarValue.dotsItem.popupModel.horizontalPosition = \"center\";\n            this.updateElementCss(false);\n        }\n        return this.additionalTitleToolbarValue;\n    };\n    Object.defineProperty(QuestionPanelDynamicModel.prototype, \"footerToolbar\", {\n        get: function () {\n            if (!this.footerToolbarValue) {\n                this.initFooterToolbar();\n            }\n            return this.footerToolbarValue;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionPanelDynamicModel.prototype.updateFooterActions = function () {\n        if (!!this.updateFooterActionsCallback) {\n            this.updateFooterActionsCallback();\n        }\n    };\n    QuestionPanelDynamicModel.prototype.initFooterToolbar = function () {\n        var _this = this;\n        this.footerToolbarValue = this.createActionContainer();\n        var items = [];\n        var prevTextBtn = new _actions_action__WEBPACK_IMPORTED_MODULE_11__[\"Action\"]({\n            id: \"sv-pd-prev-btn\",\n            title: this.panelPrevText,\n            action: function () {\n                _this.goToPrevPanel();\n            }\n        });\n        var nextTextBtn = new _actions_action__WEBPACK_IMPORTED_MODULE_11__[\"Action\"]({\n            id: \"sv-pd-next-btn\",\n            title: this.panelNextText,\n            action: function () {\n                _this.goToNextPanel();\n            }\n        });\n        var addBtn = new _actions_action__WEBPACK_IMPORTED_MODULE_11__[\"Action\"]({\n            id: \"sv-pd-add-btn\",\n            component: \"sv-paneldynamic-add-btn\",\n            data: { question: this }\n        });\n        var prevBtnIcon = new _actions_action__WEBPACK_IMPORTED_MODULE_11__[\"Action\"]({\n            id: \"sv-prev-btn-icon\",\n            component: \"sv-paneldynamic-prev-btn\",\n            data: { question: this }\n        });\n        var progressText = new _actions_action__WEBPACK_IMPORTED_MODULE_11__[\"Action\"]({\n            id: \"sv-pd-progress-text\",\n            component: \"sv-paneldynamic-progress-text\",\n            data: { question: this }\n        });\n        var nextBtnIcon = new _actions_action__WEBPACK_IMPORTED_MODULE_11__[\"Action\"]({\n            id: \"sv-pd-next-btn-icon\",\n            component: \"sv-paneldynamic-next-btn\",\n            data: { question: this }\n        });\n        items.push(prevTextBtn, nextTextBtn, addBtn, prevBtnIcon, progressText, nextBtnIcon);\n        this.updateFooterActionsCallback = function () {\n            var isLegacyNavigation = _this.legacyNavigation;\n            var isRenderModeList = _this.isRenderModeList;\n            var isMobile = _this.isMobile;\n            var showNavigation = !isLegacyNavigation && !isRenderModeList;\n            prevTextBtn.visible = showNavigation && _this.currentIndex > 0;\n            nextTextBtn.visible = showNavigation && _this.currentIndex < _this.visiblePanelCount - 1;\n            nextTextBtn.needSpace = isMobile && nextTextBtn.visible && prevTextBtn.visible;\n            addBtn.visible = _this.canAddPanel;\n            addBtn.needSpace = _this.isMobile && !nextTextBtn.visible && prevTextBtn.visible;\n            progressText.visible = !_this.isRenderModeList && !isMobile;\n            progressText.needSpace = !isLegacyNavigation && !_this.isMobile;\n            var showLegacyNavigation = isLegacyNavigation && !isRenderModeList;\n            prevBtnIcon.visible = showLegacyNavigation;\n            nextBtnIcon.visible = showLegacyNavigation;\n            prevBtnIcon.needSpace = showLegacyNavigation;\n        };\n        this.updateFooterActionsCallback();\n        this.footerToolbarValue.setItems(items);\n    };\n    QuestionPanelDynamicModel.prototype.createTabByPanel = function (panel, visPanelIndex) {\n        var _this = this;\n        if (!this.isRenderModeTab)\n            return;\n        var locTitle = new _localizablestring__WEBPACK_IMPORTED_MODULE_2__[\"LocalizableString\"](panel, true);\n        locTitle.onGetTextCallback = function (str) {\n            if (!_this.survey)\n                return str;\n            var options = {\n                title: str,\n                panel: panel,\n                visiblePanelIndex: visPanelIndex\n            };\n            _this.survey.dynamicPanelGetTabTitle(_this, options);\n            return options.title;\n        };\n        locTitle.sharedData = this.locTemplateTabTitle;\n        var isActive = this.getPanelIndexById(panel.id) === this.currentIndex;\n        var newItem = new _actions_action__WEBPACK_IMPORTED_MODULE_11__[\"Action\"]({\n            id: panel.id,\n            pressed: isActive,\n            locTitle: locTitle,\n            disableHide: isActive,\n            action: function () {\n                _this.currentIndex = _this.getPanelIndexById(newItem.id);\n            }\n        });\n        return newItem;\n    };\n    QuestionPanelDynamicModel.prototype.getAdditionalTitleToolbarCss = function (cssClasses) {\n        var css = cssClasses !== null && cssClasses !== void 0 ? cssClasses : this.cssClasses;\n        return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_10__[\"CssClassBuilder\"]()\n            .append(css.tabsRoot)\n            .append(css.tabsLeft, this.tabAlign === \"left\")\n            .append(css.tabsRight, this.tabAlign === \"right\")\n            .append(css.tabsCenter, this.tabAlign === \"center\")\n            .toString();\n    };\n    QuestionPanelDynamicModel.prototype.updateTabToolbarItemsPressedState = function () {\n        if (!this.isRenderModeTab)\n            return;\n        if (this.currentIndex < 0 || this.currentIndex >= this.visiblePanelCount)\n            return;\n        var panel = this.visiblePanels[this.currentIndex];\n        this.additionalTitleToolbar.renderedActions.forEach(function (action) {\n            var isActive = action.id === panel.id;\n            action.pressed = isActive;\n            action.disableHide = isActive;\n            //should raise update if dimensions are not changed but action is active now\n            if (action.mode === \"popup\" && action.disableHide) {\n                action[\"raiseUpdate\"]();\n            }\n        });\n    };\n    QuestionPanelDynamicModel.prototype.updateTabToolbar = function () {\n        var _this = this;\n        if (!this.isRenderModeTab)\n            return;\n        var items = [];\n        var visPanels = this.visiblePanels;\n        var _loop_1 = function (i) {\n            this_1.visiblePanels.forEach(function (panel) { return items.push(_this.createTabByPanel(visPanels[i], i)); });\n        };\n        var this_1 = this;\n        for (var i = 0; i < visPanels.length; i++) {\n            _loop_1(i);\n        }\n        this.additionalTitleToolbar.setItems(items);\n    };\n    QuestionPanelDynamicModel.prototype.addTabFromToolbar = function (panel, index) {\n        if (!this.isRenderModeTab)\n            return;\n        var newItem = this.createTabByPanel(panel, index);\n        this.additionalTitleToolbar.actions.splice(index, 0, newItem);\n        this.updateTabToolbarItemsPressedState();\n    };\n    QuestionPanelDynamicModel.prototype.removeTabFromToolbar = function (panel) {\n        if (!this.isRenderModeTab)\n            return;\n        var removedItem = this.additionalTitleToolbar.getActionById(panel.id);\n        if (!removedItem)\n            return;\n        this.additionalTitleToolbar.actions.splice(this.additionalTitleToolbar.actions.indexOf(removedItem), 1);\n        this.updateTabToolbarItemsPressedState();\n    };\n    Object.defineProperty(QuestionPanelDynamicModel.prototype, \"showLegacyNavigation\", {\n        get: function () {\n            return !this.isDefaultV2Theme;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionPanelDynamicModel.prototype, \"showNavigation\", {\n        get: function () {\n            return this.visiblePanelCount > 0 && !this.showLegacyNavigation && !!this.cssClasses.footer;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionPanelDynamicModel.prototype.showSeparator = function (index) {\n        return this.isRenderModeList && index < this.visiblePanelCount - 1;\n    };\n    QuestionPanelDynamicModel.prototype.calcCssClasses = function (css) {\n        var classes = _super.prototype.calcCssClasses.call(this, css);\n        var additionalTitleToolbar = this.additionalTitleToolbar;\n        if (!!additionalTitleToolbar) {\n            additionalTitleToolbar.containerCss = this.getAdditionalTitleToolbarCss(classes);\n            additionalTitleToolbar.cssClasses = classes.tabs;\n            additionalTitleToolbar.dotsItem.cssClasses = classes.tabs;\n            additionalTitleToolbar.dotsItem.popupModel.contentComponentData.model.cssClasses = css.list;\n        }\n        return classes;\n    };\n    QuestionPanelDynamicModel.maxCheckCount = 3;\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_5__[\"property\"])({ defaultValue: false, onSet: function (_, target) { target.updateFooterActions(); } })\n    ], QuestionPanelDynamicModel.prototype, \"legacyNavigation\", void 0);\n    return QuestionPanelDynamicModel;\n}(_question__WEBPACK_IMPORTED_MODULE_4__[\"Question\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_5__[\"Serializer\"].addClass(\"paneldynamic\", [\n    { name: \"showCommentArea:switch\", layout: \"row\", visible: true, category: \"general\" },\n    {\n        name: \"templateElements\",\n        alternativeName: \"questions\",\n        baseClassName: \"question\",\n        visible: false,\n        isLightSerializable: false\n    },\n    { name: \"templateTitle:text\", serializationProperty: \"locTemplateTitle\" },\n    { name: \"templateTabTitle\", serializationProperty: \"locTemplateTabTitle\", visibleIf: function (obj) { return obj.renderMode === \"tab\"; } },\n    {\n        name: \"templateDescription:text\",\n        serializationProperty: \"locTemplateDescription\",\n    },\n    { name: \"minWidth\", defaultFunc: function () { return \"auto\"; } },\n    { name: \"noEntriesText:text\", serializationProperty: \"locNoEntriesText\" },\n    { name: \"allowAddPanel:boolean\", default: true },\n    { name: \"allowRemovePanel:boolean\", default: true },\n    {\n        name: \"panelCount:number\",\n        isBindable: true,\n        default: 0,\n        choices: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10],\n    },\n    { name: \"minPanelCount:number\", default: 0, minValue: 0 },\n    {\n        name: \"maxPanelCount:number\",\n        default: _settings__WEBPACK_IMPORTED_MODULE_8__[\"settings\"].panel.maxPanelCount,\n    },\n    \"defaultPanelValue:panelvalue\",\n    \"defaultValueFromLastPanel:boolean\",\n    {\n        name: \"panelsState\",\n        default: \"default\",\n        choices: [\"default\", \"collapsed\", \"expanded\", \"firstExpanded\"],\n    },\n    { name: \"keyName\" },\n    {\n        name: \"keyDuplicationError\",\n        serializationProperty: \"locKeyDuplicationError\",\n    },\n    { name: \"confirmDelete:boolean\" },\n    {\n        name: \"confirmDeleteText\",\n        serializationProperty: \"locConfirmDeleteText\",\n    },\n    { name: \"panelAddText\", serializationProperty: \"locPanelAddText\" },\n    { name: \"panelRemoveText\", serializationProperty: \"locPanelRemoveText\" },\n    { name: \"panelPrevText\", serializationProperty: \"locPanelPrevText\" },\n    { name: \"panelNextText\", serializationProperty: \"locPanelNextText\" },\n    {\n        name: \"showQuestionNumbers\",\n        default: \"off\",\n        choices: [\"off\", \"onPanel\", \"onSurvey\"],\n    },\n    { name: \"showRangeInProgress:boolean\", default: true },\n    {\n        name: \"renderMode\",\n        default: \"list\",\n        choices: [\"list\", \"progressTop\", \"progressBottom\", \"progressTopBottom\", \"tab\"],\n    },\n    {\n        name: \"tabAlign\", default: \"center\", choices: [\"center\", \"left\", \"right\"],\n        visibleIf: function (obj) { return obj.renderMode === \"tab\"; }\n    },\n    {\n        name: \"templateTitleLocation\",\n        default: \"default\",\n        choices: [\"default\", \"top\", \"bottom\", \"left\"],\n    },\n    { name: \"templateErrorLocation\", default: \"default\", choices: [\"default\", \"top\", \"bottom\"] },\n    {\n        name: \"templateVisibleIf:expression\",\n        category: \"logic\"\n    },\n    {\n        name: \"panelRemoveButtonLocation\",\n        default: \"bottom\",\n        choices: [\"bottom\", \"right\"],\n    },\n], function () {\n    return new QuestionPanelDynamicModel(\"\");\n}, \"question\");\n_questionfactory__WEBPACK_IMPORTED_MODULE_6__[\"QuestionFactory\"].Instance.registerQuestion(\"paneldynamic\", function (name) {\n    return new QuestionPanelDynamicModel(name);\n});\n\n\n/***/ }),\n\n/***/ \"./src/question_radiogroup.ts\":\n/*!************************************!*\\\n  !*** ./src/question_radiogroup.ts ***!\n  \\************************************/\n/*! exports provided: QuestionRadiogroupModel */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_3389602__) {\n\n\"use strict\";\n__nested_webpack_require_3389602__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_3389602__.d(__nested_webpack_exports__, \"QuestionRadiogroupModel\", function() { return QuestionRadiogroupModel; });\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_3389602__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_3389602__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\n/* harmony import */ var _question_baseselect__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_3389602__(/*! ./question_baseselect */ \"./src/question_baseselect.ts\");\n/* harmony import */ var _actions_action__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_3389602__(/*! ./actions/action */ \"./src/actions/action.ts\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_3389602__(/*! ./base */ \"./src/base.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n\n\n\n\n\n/**\n * A class that describes the Radio Button Group question type.\n *\n * [View Demo](https://surveyjs.io/form-library/examples/questiontype-radiogroup/ (linkStyle))\n */\nvar QuestionRadiogroupModel = /** @class */ (function (_super) {\n    __extends(QuestionRadiogroupModel, _super);\n    function QuestionRadiogroupModel(name) {\n        return _super.call(this, name) || this;\n    }\n    QuestionRadiogroupModel.prototype.getDefaultItemComponent = function () {\n        return \"survey-radiogroup-item\";\n    };\n    QuestionRadiogroupModel.prototype.getType = function () {\n        return \"radiogroup\";\n    };\n    QuestionRadiogroupModel.prototype.getFirstInputElementId = function () {\n        return this.inputId + \"_0\";\n    };\n    Object.defineProperty(QuestionRadiogroupModel.prototype, \"selectedItem\", {\n        /**\n         * Returns the selected choice item. If no item is selected, returns `null`.\n         */\n        get: function () { return this.getSingleSelectedItem(); },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionRadiogroupModel.prototype, \"showClearButton\", {\n        /**\n         * Specifies whether to display a button that clears the question value.\n         *\n         * Default value: `false`\n         */\n        get: function () {\n            return this.getPropertyValue(\"showClearButton\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"showClearButton\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionRadiogroupModel.prototype, \"canShowClearButton\", {\n        get: function () {\n            return this.showClearButton && !this.isReadOnly;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionRadiogroupModel.prototype, \"clearButtonCaption\", {\n        get: function () {\n            return this.getLocalizationString(\"clearCaption\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionRadiogroupModel.prototype.supportGoNextPageAutomatic = function () {\n        return this.isMouseDown === true;\n    };\n    QuestionRadiogroupModel.prototype.setNewComment = function (newValue) {\n        this.isMouseDown = true;\n        _super.prototype.setNewComment.call(this, newValue);\n        this.isMouseDown = false;\n    };\n    Object.defineProperty(QuestionRadiogroupModel.prototype, \"showClearButtonInContent\", {\n        get: function () {\n            return !this.isDefaultV2Theme && this.canShowClearButton;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionRadiogroupModel.prototype.clickItemHandler = function (item) {\n        this.renderedValue = item.value;\n    };\n    QuestionRadiogroupModel.prototype.getDefaultTitleActions = function () {\n        var _this = this;\n        var actions = [];\n        if (this.isDefaultV2Theme && !this.isDesignMode) {\n            var clearAction = new _actions_action__WEBPACK_IMPORTED_MODULE_3__[\"Action\"]({\n                title: this.clearButtonCaption,\n                id: \"sv-clr-btn-\" + this.id,\n                action: function () { _this.clearValue(); },\n                innerCss: this.cssClasses.clearButton,\n                visible: new _base__WEBPACK_IMPORTED_MODULE_4__[\"ComputedUpdater\"](function () { return _this.canShowClearButton; })\n            });\n            actions.push(clearAction);\n        }\n        return actions;\n    };\n    Object.defineProperty(QuestionRadiogroupModel.prototype, \"isNewA11yStructure\", {\n        //a11y\n        get: function () {\n            return true;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionRadiogroupModel.prototype, \"a11y_input_ariaRole\", {\n        get: function () {\n            return \"radiogroup\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    return QuestionRadiogroupModel;\n}(_question_baseselect__WEBPACK_IMPORTED_MODULE_2__[\"QuestionCheckboxBase\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"radiogroup\", [{ name: \"showClearButton:boolean\", default: false },\n    { name: \"separateSpecialChoices\", visible: true },\n    { name: \"itemComponent\", visible: false, default: \"survey-radiogroup-item\" }\n], function () {\n    return new QuestionRadiogroupModel(\"\");\n}, \"checkboxbase\");\n_questionfactory__WEBPACK_IMPORTED_MODULE_1__[\"QuestionFactory\"].Instance.registerQuestion(\"radiogroup\", function (name) {\n    var q = new QuestionRadiogroupModel(name);\n    q.choices = _questionfactory__WEBPACK_IMPORTED_MODULE_1__[\"QuestionFactory\"].DefaultChoices;\n    return q;\n});\n\n\n/***/ }),\n\n/***/ \"./src/question_ranking.ts\":\n/*!*********************************!*\\\n  !*** ./src/question_ranking.ts ***!\n  \\*********************************/\n/*! exports provided: QuestionRankingModel */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_3396229__) {\n\n\"use strict\";\n__nested_webpack_require_3396229__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_3396229__.d(__nested_webpack_exports__, \"QuestionRankingModel\", function() { return QuestionRankingModel; });\n/* harmony import */ var _dragdrop_ranking_choices__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_3396229__(/*! ./dragdrop/ranking-choices */ \"./src/dragdrop/ranking-choices.ts\");\n/* harmony import */ var _dragdrop_ranking_select_to_rank__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_3396229__(/*! ./dragdrop/ranking-select-to-rank */ \"./src/dragdrop/ranking-select-to-rank.ts\");\n/* harmony import */ var _itemvalue__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_3396229__(/*! ./itemvalue */ \"./src/itemvalue.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_3396229__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_3396229__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\n/* harmony import */ var _question_checkbox__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_3396229__(/*! ./question_checkbox */ \"./src/question_checkbox.ts\");\n/* harmony import */ var _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_3396229__(/*! ./utils/cssClassBuilder */ \"./src/utils/cssClassBuilder.ts\");\n/* harmony import */ var _utils_devices__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_3396229__(/*! ./utils/devices */ \"./src/utils/devices.ts\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_3396229__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _src_settings__WEBPACK_IMPORTED_MODULE_9__ = __nested_webpack_require_3396229__(/*! ../src/settings */ \"./src/settings.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\n\n\n\n\n\n/**\n * A class that describes the Ranking question type.\n *\n * [View Demo](https://surveyjs.io/form-library/examples/questiontype-ranking/ (linkStyle))\n */\nvar QuestionRankingModel = /** @class */ (function (_super) {\n    __extends(QuestionRankingModel, _super);\n    function QuestionRankingModel(name) {\n        var _this = _super.call(this, name) || this;\n        _this.domNode = null;\n        _this.onVisibleChoicesChanged = function () {\n            _super.prototype.onVisibleChoicesChanged.call(_this);\n            // ranking question with only one choice doesn't make sense\n            if (_this.visibleChoices.length === 1) {\n                _this.value = [];\n                _this.value.push(_this.visibleChoices[0].value);\n                _this.updateRankingChoices();\n                return;\n            }\n            if (_this.isEmpty()) {\n                _this.updateRankingChoices();\n                return;\n            }\n            if (_this.selectToRankEnabled) {\n                _this.updateRankingChoices();\n                return;\n            }\n            if (_this.visibleChoices.length > _this.value.length)\n                _this.addToValueByVisibleChoices();\n            if (_this.visibleChoices.length < _this.value.length)\n                _this.removeFromValueByVisibleChoices();\n            _this.updateRankingChoices();\n        };\n        _this.localeChanged = function () {\n            _super.prototype.localeChanged.call(_this);\n            _this.updateRankingChoices();\n        };\n        _this.handlePointerDown = function (event, choice, node) {\n            var target = event.target;\n            if (!_this.isDragStartNodeValid(target))\n                return;\n            if (_this.allowStartDrag &&\n                _this.canStartDragDueMaxSelectedChoices(target) &&\n                _this.canStartDragDueItemEnabled(choice)) {\n                _this.dragDropRankingChoices.startDrag(event, choice, _this, node);\n            }\n        };\n        _this.handleKeydown = function (event, choice) {\n            if (!_this.isDesignMode) {\n                var key = event.key;\n                var index = _this.rankingChoices.indexOf(choice);\n                if (_this.selectToRankEnabled) {\n                    _this.handleKeydownSelectToRank(event, choice);\n                    return;\n                }\n                if (key === \"ArrowUp\" && index) {\n                    _this.handleArrowUp(index, choice);\n                    event.preventDefault();\n                }\n                if (key === \"ArrowDown\" && index !== _this.rankingChoices.length - 1) {\n                    _this.handleArrowDown(index, choice);\n                    event.preventDefault();\n                }\n            }\n        };\n        _this.handleArrowUp = function (index, choice) {\n            var choices = _this.rankingChoices;\n            choices.splice(index, 1);\n            choices.splice(index - 1, 0, choice);\n            _this.setValue();\n            setTimeout(function () {\n                _this.focusItem(index - 1);\n            }, 1);\n        };\n        _this.handleArrowDown = function (index, choice) {\n            var choices = _this.rankingChoices;\n            choices.splice(index, 1);\n            choices.splice(index + 1, 0, choice);\n            _this.setValue();\n            setTimeout(function () {\n                _this.focusItem(index + 1);\n            }, 1);\n        };\n        _this.focusItem = function (index, container) {\n            if (_this.selectToRankEnabled && container) {\n                var containerSelector = \"[data-ranking='\" + container + \"']\";\n                var itemsNodes = _this.domNode.querySelectorAll(containerSelector + \" \" + \".\" + _this.cssClasses.item);\n                itemsNodes[index].focus();\n            }\n            else {\n                var itemsNodes = _this.domNode.querySelectorAll(\".\" + _this.cssClasses.item);\n                itemsNodes[index].focus();\n            }\n        };\n        _this.setValue = function () {\n            var value = [];\n            _this.rankingChoices.forEach(function (choice) {\n                value.push(choice.value);\n            });\n            _this.value = value;\n        };\n        _this.createNewArray(\"rankingChoices\");\n        _this.registerFunctionOnPropertyValueChanged(\"selectToRankEnabled\", function () {\n            _this.clearValue();\n            _this.setDragDropRankingChoices();\n            _this.updateRankingChoices();\n        });\n        return _this;\n    }\n    QuestionRankingModel.prototype.getDefaultItemComponent = function () {\n        return \"\";\n    };\n    QuestionRankingModel.prototype.getType = function () {\n        return \"ranking\";\n    };\n    QuestionRankingModel.prototype.getItemTabIndex = function (item) {\n        if (this.isDesignMode || item.disabled)\n            return undefined;\n        return 0;\n    };\n    Object.defineProperty(QuestionRankingModel.prototype, \"rootClass\", {\n        get: function () {\n            return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_6__[\"CssClassBuilder\"]()\n                .append(this.cssClasses.root)\n                .append(this.cssClasses.rootMobileMod, _utils_devices__WEBPACK_IMPORTED_MODULE_7__[\"IsMobile\"])\n                .append(this.cssClasses.rootDisabled, this.isReadOnly)\n                .append(this.cssClasses.rootDesignMode, !!this.isDesignMode)\n                .append(this.cssClasses.itemOnError, this.errors.length > 0)\n                .append(this.cssClasses.rootDragHandleAreaIcon, _src_settings__WEBPACK_IMPORTED_MODULE_9__[\"settings\"].rankingDragHandleArea === \"icon\")\n                .append(this.cssClasses.rootSelectToRankMod, this.selectToRankEnabled)\n                .append(this.cssClasses.rootSelectToRankAlignHorizontal, this.selectToRankEnabled && this.selectToRankAreasLayout === \"horizontal\")\n                .append(this.cssClasses.rootSelectToRankAlignVertical, this.selectToRankEnabled && this.selectToRankAreasLayout === \"vertical\")\n                .toString();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionRankingModel.prototype.getItemClassCore = function (item, options) {\n        var itemIndex = this.rankingChoices.indexOf(item);\n        var dropTargetIndex = this.rankingChoices.indexOf(this.currentDropTarget);\n        return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_6__[\"CssClassBuilder\"]()\n            .append(_super.prototype.getItemClassCore.call(this, item, options))\n            .append(this.cssClasses.itemGhostMod, this.currentDropTarget === item)\n            .append(\"sv-dragdrop-movedown\", itemIndex === dropTargetIndex + 1 && this.dropTargetNodeMove === \"down\")\n            .append(\"sv-dragdrop-moveup\", itemIndex === dropTargetIndex - 1 && this.dropTargetNodeMove === \"up\")\n            .toString();\n    };\n    QuestionRankingModel.prototype.getContainerClasses = function (containerType) {\n        var isEmpty = false;\n        var isToContainer = containerType === \"to\";\n        var isFromContainer = containerType === \"from\";\n        if (isToContainer) {\n            isEmpty = this.rankingChoices.length === 0;\n        }\n        else if (isFromContainer) {\n            isEmpty = this.unRankingChoices.length === 0;\n        }\n        return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_6__[\"CssClassBuilder\"]()\n            .append(this.cssClasses.container)\n            .append(this.cssClasses.containerToMode, isToContainer)\n            .append(this.cssClasses.containerFromMode, isFromContainer)\n            .append(this.cssClasses.containerEmptyMode, isEmpty)\n            .toString();\n    };\n    QuestionRankingModel.prototype.isItemCurrentDropTarget = function (item) {\n        return this.dragDropRankingChoices.dropTarget === item;\n    };\n    Object.defineProperty(QuestionRankingModel.prototype, \"ghostPositionCssClass\", {\n        get: function () {\n            if (this.ghostPosition === \"top\")\n                return this.cssClasses.dragDropGhostPositionTop;\n            if (this.ghostPosition === \"bottom\")\n                return this.cssClasses.dragDropGhostPositionBottom;\n            return \"\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionRankingModel.prototype.getItemIndexClasses = function (item) {\n        var noNumber;\n        if (this.selectToRankEnabled) {\n            noNumber = this.unRankingChoices.indexOf(item) !== -1;\n        }\n        else {\n            noNumber = this.isEmpty();\n        }\n        return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_6__[\"CssClassBuilder\"]()\n            .append(this.cssClasses.itemIndex)\n            .append(this.cssClasses.itemIndexEmptyMode, noNumber)\n            .toString();\n    };\n    QuestionRankingModel.prototype.getNumberByIndex = function (index) {\n        return this.isEmpty() ? \"\" : index + 1 + \"\";\n    };\n    QuestionRankingModel.prototype.setSurveyImpl = function (value, isLight) {\n        _super.prototype.setSurveyImpl.call(this, value, isLight);\n        this.setDragDropRankingChoices();\n        this.updateRankingChoices();\n    };\n    QuestionRankingModel.prototype.isAnswerCorrect = function () {\n        return _helpers__WEBPACK_IMPORTED_MODULE_8__[\"Helpers\"].isArraysEqual(this.value, this.correctAnswer, false);\n    };\n    Object.defineProperty(QuestionRankingModel.prototype, \"requireStrictCompare\", {\n        get: function () { return true; },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionRankingModel.prototype.onSurveyValueChanged = function (newValue) {\n        _super.prototype.onSurveyValueChanged.call(this, newValue);\n        if (this.isLoadingFromJson)\n            return;\n        this.updateRankingChoices();\n    };\n    QuestionRankingModel.prototype.addToValueByVisibleChoices = function () {\n        var newValue = this.value.slice();\n        this.visibleChoices.forEach(function (choice) {\n            if (newValue.indexOf(choice.value) === -1) {\n                newValue.push(choice.value);\n            }\n        });\n        this.value = newValue;\n    };\n    QuestionRankingModel.prototype.removeFromValueByVisibleChoices = function () {\n        var newValue = this.value.slice();\n        var choices = this.visibleChoices;\n        for (var i = this.value.length - 1; i >= 0; i--) {\n            if (!_itemvalue__WEBPACK_IMPORTED_MODULE_2__[\"ItemValue\"].getItemByValue(choices, this.value[i])) {\n                newValue.splice(i, 1);\n            }\n        }\n        this.value = newValue;\n    };\n    Object.defineProperty(QuestionRankingModel.prototype, \"rankingChoices\", {\n        get: function () {\n            return this.getPropertyValue(\"rankingChoices\", []);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionRankingModel.prototype, \"unRankingChoices\", {\n        get: function () {\n            var unRankingChoices = [];\n            var rankingChoices = this.rankingChoices;\n            this.visibleChoices.forEach(function (choice) {\n                unRankingChoices.push(choice);\n            });\n            rankingChoices.forEach(function (rankingChoice) {\n                unRankingChoices.forEach(function (choice, index) {\n                    if (choice.value === rankingChoice.value)\n                        unRankingChoices.splice(index, 1);\n                });\n            });\n            return unRankingChoices;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionRankingModel.prototype.updateRankingChoices = function (forceUpdate) {\n        var _this = this;\n        if (forceUpdate === void 0) { forceUpdate = false; }\n        if (this.selectToRankEnabled) {\n            this.updateRankingChoicesSelectToRankMode(forceUpdate);\n            return;\n        }\n        var newRankingChoices = [];\n        // ranking question with only one choice doesn't make sense\n        // if (this.visibleChoices.length === 1) {\n        //   this.setPropertyValue(\"rankingChoices\", newRankingChoices);\n        //   return;\n        // }\n        if (forceUpdate)\n            this.setPropertyValue(\"rankingChoices\", []);\n        if (this.isEmpty()) {\n            this.setPropertyValue(\"rankingChoices\", this.visibleChoices);\n            return;\n        }\n        this.value.forEach(function (valueItem) {\n            _this.visibleChoices.forEach(function (choice) {\n                if (choice.value === valueItem)\n                    newRankingChoices.push(choice);\n            });\n        });\n        this.setPropertyValue(\"rankingChoices\", newRankingChoices);\n    };\n    QuestionRankingModel.prototype.updateRankingChoicesSelectToRankMode = function (forceUpdate) {\n        var _this = this;\n        if (this.isEmpty()) {\n            this.setPropertyValue(\"rankingChoices\", []);\n            return;\n        }\n        var newRankingChoices = [];\n        this.value.forEach(function (valueItem) {\n            _this.visibleChoices.forEach(function (choice) {\n                if (choice.value === valueItem)\n                    newRankingChoices.push(choice);\n            });\n        });\n        this.setPropertyValue(\"rankingChoices\", newRankingChoices);\n    };\n    QuestionRankingModel.prototype.endLoadingFromJson = function () {\n        _super.prototype.endLoadingFromJson.call(this);\n        this.setDragDropRankingChoices();\n    };\n    QuestionRankingModel.prototype.setDragDropRankingChoices = function () {\n        this.dragDropRankingChoices = this.createDragDropRankingChoices();\n    };\n    QuestionRankingModel.prototype.createDragDropRankingChoices = function () {\n        if (this.selectToRankEnabled)\n            return new _dragdrop_ranking_select_to_rank__WEBPACK_IMPORTED_MODULE_1__[\"DragDropRankingSelectToRank\"](this.survey, null, this.longTap);\n        return new _dragdrop_ranking_choices__WEBPACK_IMPORTED_MODULE_0__[\"DragDropRankingChoices\"](this.survey, null, this.longTap);\n    };\n    QuestionRankingModel.prototype.isDragStartNodeValid = function (target) {\n        if (_src_settings__WEBPACK_IMPORTED_MODULE_9__[\"settings\"].rankingDragHandleArea === \"icon\") {\n            return target.classList.contains(this.cssClasses.itemIconHoverMod);\n        }\n        return true;\n    };\n    Object.defineProperty(QuestionRankingModel.prototype, \"allowStartDrag\", {\n        get: function () {\n            return !this.isReadOnly && !this.isDesignMode;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionRankingModel.prototype.canStartDragDueMaxSelectedChoices = function (target) {\n        if (!this.selectToRankEnabled)\n            return true;\n        var fromContainer = target.closest(\"[data-ranking='from-container']\");\n        if (fromContainer) {\n            return this.checkMaxSelectedChoicesUnreached();\n        }\n        return true;\n    };\n    QuestionRankingModel.prototype.canStartDragDueItemEnabled = function (item) {\n        return item.enabled;\n    };\n    QuestionRankingModel.prototype.checkMaxSelectedChoicesUnreached = function () {\n        if (this.maxSelectedChoices < 1)\n            return true;\n        var val = this.value;\n        var len = !Array.isArray(val) ? 0 : val.length;\n        return len < this.maxSelectedChoices;\n    };\n    //cross framework initialization\n    QuestionRankingModel.prototype.afterRenderQuestionElement = function (el) {\n        this.domNode = el;\n        _super.prototype.afterRenderQuestionElement.call(this, el);\n    };\n    //cross framework destroy\n    QuestionRankingModel.prototype.beforeDestroyQuestionElement = function (el) {\n        _super.prototype.beforeDestroyQuestionElement.call(this, el);\n    };\n    QuestionRankingModel.prototype.supportSelectAll = function () {\n        return false;\n    };\n    QuestionRankingModel.prototype.supportOther = function () {\n        return false;\n    };\n    QuestionRankingModel.prototype.supportNone = function () {\n        return false;\n    };\n    QuestionRankingModel.prototype.handleKeydownSelectToRank = function (event, movedElement) {\n        if (this.isDesignMode)\n            return;\n        var dnd = this.dragDropRankingChoices; //????\n        var key = event.key;\n        var rankingChoices = this.rankingChoices;\n        var unRankingChoices = this.unRankingChoices;\n        var isMovedElementRanked = rankingChoices.indexOf(movedElement) !== -1;\n        var isMovedElementUnRanked = !isMovedElementRanked;\n        var fromIndex;\n        var toIndex;\n        if ((key === \" \" || key === \"Enter\") && isMovedElementUnRanked) {\n            fromIndex = unRankingChoices.indexOf(movedElement);\n            toIndex = 0;\n            dnd.selectToRank(this, fromIndex, toIndex);\n            this.setValueAfterKeydown(toIndex, \"to-container\");\n            return;\n        }\n        if ((key === \" \" || key === \"Enter\") && isMovedElementRanked) {\n            fromIndex = rankingChoices.indexOf(movedElement);\n            dnd.unselectFromRank(this, fromIndex);\n            toIndex = this.unRankingChoices.indexOf(movedElement); //'this.' leads to actual array after the 'unselectFromRank' method\n            this.setValueAfterKeydown(toIndex, \"from-container\");\n            return;\n        }\n        if (key === \"ArrowUp\" && isMovedElementRanked) {\n            fromIndex = rankingChoices.indexOf(movedElement);\n            toIndex = fromIndex - 1;\n            if (fromIndex < 0)\n                return;\n            dnd.reorderRankedItem(this, fromIndex, toIndex);\n            this.setValueAfterKeydown(toIndex, \"to-container\");\n            return;\n        }\n        if (key === \"ArrowDown\" && isMovedElementRanked) {\n            fromIndex = rankingChoices.indexOf(movedElement);\n            toIndex = fromIndex + 1;\n            if (toIndex >= rankingChoices.length)\n                return;\n            dnd.reorderRankedItem(this, fromIndex, toIndex);\n            this.setValueAfterKeydown(toIndex, \"to-container\");\n            return;\n        }\n    };\n    QuestionRankingModel.prototype.setValueAfterKeydown = function (index, container) {\n        var _this = this;\n        this.setValue();\n        setTimeout(function () {\n            _this.focusItem(index, container);\n        }, 1);\n        event.preventDefault();\n    };\n    QuestionRankingModel.prototype.getIconHoverCss = function () {\n        return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_6__[\"CssClassBuilder\"]()\n            .append(this.cssClasses.itemIcon)\n            .append(this.cssClasses.itemIconHoverMod)\n            .toString();\n    };\n    QuestionRankingModel.prototype.getIconFocusCss = function () {\n        return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_6__[\"CssClassBuilder\"]()\n            .append(this.cssClasses.itemIcon)\n            .append(this.cssClasses.itemIconFocusMod)\n            .toString();\n    };\n    Object.defineProperty(QuestionRankingModel.prototype, \"longTap\", {\n        /**\n         * Specifies whether to use a long tap (press and hold) gesture to start dragging.\n         *\n         * Default value: `true`\n         *\n         * Disable this property if you want to start dragging when users perform a scroll gesture.\n        */\n        get: function () {\n            return this.getPropertyValue(\"longTap\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"longTap\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionRankingModel.prototype, \"selectToRankEnabled\", {\n        /**\n         * Specifies whether users can select choices they want to rank.\n         *\n         * When you enable this property, the Ranking question displays two areas for ranked and unranked choices. To order choices, users should first drag them from the unranked to the ranked area. Use this mode if you want to let users order only the choices they select.\n         *\n         * Default value: `false`\n         * @see selectToRankAreasLayout\n        */\n        get: function () {\n            return this.getPropertyValue(\"selectToRankEnabled\", false);\n        },\n        set: function (val) {\n            this.setPropertyValue(\"selectToRankEnabled\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionRankingModel.prototype, \"selectToRankAreasLayout\", {\n        /**\n         * Specifies the layout of the ranked and unranked areas. Applies when [`selectToRankEnabled`](https://surveyjs.io/form-library/documentation/api-reference/ranking-question-model#selectToRankEnabled) is `true`.\n         *\n         * Possible values:\n         *\n         * - `\"horizontal\"` (default) - The ranked and unranked areas are positioned next to each other. Users drag and drop choices between them in the horizontal direction.\n         * - `\"vertical\"`- The ranked area is positioned above the unranked area. Users drag and drop choices between them in the vertical direction.\n         * @see selectToRankAreasLayout\n        */\n        get: function () {\n            if (_utils_devices__WEBPACK_IMPORTED_MODULE_7__[\"IsMobile\"])\n                return \"vertical\";\n            return this.getPropertyValue(\"selectToRankAreasLayout\", \"horizontal\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"selectToRankAreasLayout\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionRankingModel.prototype, \"useFullItemSizeForShortcut\", {\n        get: function () {\n            return this.getPropertyValue(\"useFullItemSizeForShortcut\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"useFullItemSizeForShortcut\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionRankingModel.prototype, \"isNewA11yStructure\", {\n        //a11y\n        get: function () {\n            return false;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_3__[\"property\"])({ defaultValue: null })\n    ], QuestionRankingModel.prototype, \"currentDropTarget\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_3__[\"property\"])({ defaultValue: null })\n    ], QuestionRankingModel.prototype, \"dropTargetNodeMove\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_3__[\"property\"])({ localizable: { defaultStr: \"selectToRankEmptyRankedAreaText\" } })\n    ], QuestionRankingModel.prototype, \"selectToRankEmptyRankedAreaText\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_3__[\"property\"])({ localizable: { defaultStr: \"selectToRankEmptyUnrankedAreaText\" } })\n    ], QuestionRankingModel.prototype, \"selectToRankEmptyUnrankedAreaText\", void 0);\n    return QuestionRankingModel;\n}(_question_checkbox__WEBPACK_IMPORTED_MODULE_5__[\"QuestionCheckboxModel\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_3__[\"Serializer\"].addClass(\"ranking\", [\n    { name: \"showOtherItem\", visible: false, isSerializable: false },\n    { name: \"otherText\", visible: false, isSerializable: false },\n    { name: \"otherErrorText\", visible: false, isSerializable: false },\n    { name: \"storeOthersAsComment\", visible: false, isSerializable: false },\n    { name: \"showNoneItem\", visible: false, isSerializable: false },\n    { name: \"noneText\", visible: false, isSerializable: false },\n    { name: \"showSelectAllItem\", visible: false, isSerializable: false },\n    { name: \"selectAllText\", visible: false, isSerializable: false },\n    { name: \"colCount:number\", visible: false, isSerializable: false },\n    { name: \"separateSpecialChoices\", visible: false, isSerializable: false },\n    {\n        name: \"longTap\",\n        default: true,\n        visible: false,\n        isSerializable: false,\n    },\n    {\n        name: \"selectToRankEnabled:switch\",\n        default: false,\n        visible: true,\n        isSerializable: true,\n    },\n    {\n        name: \"selectToRankAreasLayout\",\n        default: \"horizontal\",\n        choices: [\"horizontal\", \"vertical\"],\n        dependsOn: \"selectToRankEnabled\",\n        visibleIf: function (obj) {\n            return !!obj.selectToRankEnabled;\n        },\n        visible: true,\n        isSerializable: true,\n    },\n    {\n        name: \"maxSelectedChoices:number\",\n        visible: true,\n        default: 0,\n        dependsOn: \"selectToRankEnabled\",\n        visibleIf: function (obj) {\n            return !!obj.selectToRankEnabled;\n        },\n        isSerializable: true\n    },\n    { name: \"minSelectedChoices:number\",\n        visible: true,\n        default: 0,\n        dependsOn: \"selectToRankEnabled\", visibleIf: function (obj) {\n            return !!obj.selectToRankEnabled;\n        }, isSerializable: true },\n    { name: \"itemComponent\", visible: false, default: \"\" }\n], function () {\n    return new QuestionRankingModel(\"\");\n}, \"checkbox\");\n_questionfactory__WEBPACK_IMPORTED_MODULE_4__[\"QuestionFactory\"].Instance.registerQuestion(\"ranking\", function (name) {\n    var q = new QuestionRankingModel(name);\n    q.choices = _questionfactory__WEBPACK_IMPORTED_MODULE_4__[\"QuestionFactory\"].DefaultChoices;\n    return q;\n});\n\n\n/***/ }),\n\n/***/ \"./src/question_rating.ts\":\n/*!********************************!*\\\n  !*** ./src/question_rating.ts ***!\n  \\********************************/\n/*! exports provided: RenderedRatingItem, QuestionRatingModel */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_3424682__) {\n\n\"use strict\";\n__nested_webpack_require_3424682__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_3424682__.d(__nested_webpack_exports__, \"RenderedRatingItem\", function() { return RenderedRatingItem; });\n/* harmony export (binding) */ __nested_webpack_require_3424682__.d(__nested_webpack_exports__, \"QuestionRatingModel\", function() { return QuestionRatingModel; });\n/* harmony import */ var _itemvalue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_3424682__(/*! ./itemvalue */ \"./src/itemvalue.ts\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_3424682__(/*! ./question */ \"./src/question.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_3424682__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_3424682__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_3424682__(/*! ./settings */ \"./src/settings.ts\");\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_3424682__(/*! ./surveyStrings */ \"./src/surveyStrings.ts\");\n/* harmony import */ var _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_3424682__(/*! ./utils/cssClassBuilder */ \"./src/utils/cssClassBuilder.ts\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_3424682__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _utils_utils__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_3424682__(/*! ./utils/utils */ \"./src/utils/utils.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\n\n\n\n\nvar RenderedRatingItem = /** @class */ (function (_super) {\n    __extends(RenderedRatingItem, _super);\n    function RenderedRatingItem(itemValue, locString) {\n        if (locString === void 0) { locString = null; }\n        var _this = _super.call(this) || this;\n        _this.itemValue = itemValue;\n        _this.locString = locString;\n        _this.locText.onStringChanged.add(_this.onStringChangedCallback.bind(_this));\n        _this.onStringChangedCallback();\n        return _this;\n    }\n    RenderedRatingItem.prototype.onStringChangedCallback = function () {\n        this.text = this.itemValue.text;\n    };\n    Object.defineProperty(RenderedRatingItem.prototype, \"value\", {\n        get: function () {\n            return this.itemValue.getPropertyValue(\"value\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(RenderedRatingItem.prototype, \"locText\", {\n        get: function () {\n            return this.locString || this.itemValue.locText;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"property\"])({ defaultValue: \"\" })\n    ], RenderedRatingItem.prototype, \"highlight\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"property\"])({ defaultValue: \"\" })\n    ], RenderedRatingItem.prototype, \"text\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"property\"])()\n    ], RenderedRatingItem.prototype, \"style\", void 0);\n    return RenderedRatingItem;\n}(_base__WEBPACK_IMPORTED_MODULE_7__[\"Base\"]));\n\n/**\n * A class that describes the Rating Scale question type.\n *\n * [View Demo](https://surveyjs.io/form-library/examples/rating-scale/ (linkStyle))\n */\nvar QuestionRatingModel = /** @class */ (function (_super) {\n    __extends(QuestionRatingModel, _super);\n    function QuestionRatingModel(name) {\n        var _this = _super.call(this, name) || this;\n        _this._syncPropertiesChanging = false;\n        _this.createItemValues(\"rateValues\");\n        _this.createRenderedRateItems();\n        _this.createLocalizableString(\"ratingOptionsCaption\", _this, false, true);\n        _this.registerFunctionOnPropertiesValueChanged([\"rateMin\", \"rateMax\",\n            \"minRateDescription\", \"maxRateDescription\", \"rateStep\", \"displayRateDescriptionsAsExtremeItems\"], function () { return _this.createRenderedRateItems(); });\n        _this.registerFunctionOnPropertiesValueChanged([\"rateType\"], function () {\n            _this.setIconsToRateValues();\n            _this.createRenderedRateItems();\n            _this.updateRateCount();\n        });\n        _this.registerFunctionOnPropertiesValueChanged([\"rateValues\"], function () {\n            _this.autoGenerate = false;\n            _this.setIconsToRateValues();\n            _this.createRenderedRateItems();\n        });\n        _this.registerFunctionOnPropertiesValueChanged([\"rateColorMode\", \"scaleColorMode\"], function () {\n            _this.updateColors(_this.survey.themeVariables);\n        });\n        _this.registerFunctionOnPropertiesValueChanged([\"autoGenerate\"], function () {\n            if (!_this.autoGenerate && _this.rateValues.length === 0) {\n                _this.setPropertyValue(\"rateValues\", _this.visibleRateValues);\n            }\n            if (_this.autoGenerate) {\n                _this.rateValues.length = 0;\n                _this.updateRateMax();\n            }\n            _this.createRenderedRateItems();\n        });\n        _this.createLocalizableString(\"minRateDescription\", _this, true);\n        _this.createLocalizableString(\"maxRateDescription\", _this, true);\n        _this.initPropertyDependencies();\n        return _this;\n    }\n    QuestionRatingModel.prototype.setIconsToRateValues = function () {\n        var _this = this;\n        if (this.rateType == \"smileys\") {\n            this.rateValues.map(function (item) { return item.icon = _this.getItemSmiley(item); });\n        }\n    };\n    QuestionRatingModel.prototype.endLoadingFromJson = function () {\n        _super.prototype.endLoadingFromJson.call(this);\n        this.hasMinRateDescription = !!this.minRateDescription;\n        this.hasMaxRateDescription = !!this.maxRateDescription;\n        if (this.jsonObj.rateMin !== undefined && this.jsonObj.rateCount !== undefined && this.jsonObj.rateMax === undefined) {\n            this.updateRateMax();\n        }\n        if (this.jsonObj.rateMax !== undefined && this.jsonObj.rateCount !== undefined && this.jsonObj.rateMin === undefined) {\n            this.updateRateMin();\n        }\n        if (this.jsonObj.autoGenerate === undefined && this.jsonObj.rateValues !== undefined)\n            this.autoGenerate = !this.jsonObj.rateValues.length;\n        this.updateRateCount();\n        this.setIconsToRateValues();\n        this.createRenderedRateItems();\n    };\n    QuestionRatingModel.prototype.registerSychProperties = function (names, func) {\n        var _this = this;\n        this.registerFunctionOnPropertiesValueChanged(names, function () {\n            if (!_this._syncPropertiesChanging) {\n                _this._syncPropertiesChanging = true;\n                func();\n                _this._syncPropertiesChanging = false;\n            }\n        });\n    };\n    QuestionRatingModel.prototype.useRateValues = function () {\n        return !!this.rateValues.length && !this.autoGenerate;\n    };\n    QuestionRatingModel.prototype.updateRateMax = function () {\n        this.rateMax = this.rateMin + this.rateStep * (this.rateCount - 1);\n    };\n    QuestionRatingModel.prototype.updateRateMin = function () {\n        this.rateMin = this.rateMax - this.rateStep * (this.rateCount - 1);\n    };\n    QuestionRatingModel.prototype.updateRateCount = function () {\n        var newCount = 0;\n        if (this.useRateValues()) {\n            newCount = this.rateValues.length;\n        }\n        else {\n            newCount = Math.trunc((this.rateMax - this.rateMin) / (this.rateStep || 1)) + 1;\n        }\n        if (newCount > 10 && this.rateDisplayMode == \"smileys\") {\n            newCount = 10;\n        }\n        this.rateCount = newCount;\n        if (this.rateValues.length > newCount)\n            this.rateValues.splice(newCount, this.rateValues.length - newCount);\n    };\n    QuestionRatingModel.prototype.initPropertyDependencies = function () {\n        var _this = this;\n        this.registerSychProperties([\"rateCount\"], function () {\n            if (!_this.useRateValues()) {\n                _this.rateMax = _this.rateMin + _this.rateStep * (_this.rateCount - 1);\n            }\n            else {\n                if (_this.rateCount < _this.rateValues.length) {\n                    if (_this.rateCount >= 10 && _this.rateDisplayMode == \"smileys\")\n                        return;\n                    _this.rateValues.splice(_this.rateCount, _this.rateValues.length - _this.rateCount);\n                }\n                else {\n                    for (var i = _this.rateValues.length; i < _this.rateCount; i++) {\n                        _this.rateValues.push(new _itemvalue__WEBPACK_IMPORTED_MODULE_0__[\"ItemValue\"](_surveyStrings__WEBPACK_IMPORTED_MODULE_5__[\"surveyLocalization\"].getString(\"choices_Item\") + (i + 1)));\n                    }\n                }\n            }\n        });\n        this.registerSychProperties([\"rateMin\", \"rateMax\", \"rateStep\", \"rateValues\"], function () {\n            _this.updateRateCount();\n        });\n    };\n    Object.defineProperty(QuestionRatingModel.prototype, \"showSelectedItemLocText\", {\n        get: function () {\n            return !this.readOnly && !this.inputHasValue && !!this.selectedItemLocText;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionRatingModel.prototype, \"selectedItemLocText\", {\n        get: function () {\n            var _this = this;\n            var _a;\n            return !this.readOnly && ((_a = this.visibleRateValues.filter(function (v) { return v.value == _this.value; })[0]) === null || _a === void 0 ? void 0 : _a.locText);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionRatingModel.prototype, \"rateValues\", {\n        /**\n         * A list of rate values.\n         *\n         * This property accepts an array of objects with the following structure:\n         *\n         * ```js\n         * {\n         *   \"value\": any, // A value to be saved in survey results\n         *   \"text\": String, // A display text. This property supports Markdown. When `text` is undefined, `value` is used.\n         *   \"customProperty\": any // Any property that you find useful.\n         * }\n         * ```\n         *\n         * If you add custom properties, refer to the following help topic to learn how to serialize them into JSON: [Add Custom Properties to Property Grid](https://surveyjs.io/survey-creator/documentation/property-grid#add-custom-properties-to-the-property-grid).\n         *\n         * To enable Markdown support for the `text` property, implement Markdown-to-HTML conversion in the [onTextMarkdown](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#onTextMarkdown) event handler. For an example, refer to the following demo: [Convert Markdown to HTML with Showdown](https://surveyjs.io/form-library/examples/edit-survey-questions-markdown/).\n         *\n         * If you need to specify only the `value` property, you can set the `rateValues` property to an array of numbers, for example, `[ 3, 6, 10 ]`. These values are both saved in survey results and used as display text.\n         *\n         * If you do not specify the `rateValues` property, rate values are generated automatically based upon the [`rateMin`](https://surveyjs.io/form-library/documentation/api-reference/rating-scale-question-model#rateMin), [`rateMax`](https://surveyjs.io/form-library/documentation/api-reference/rating-scale-question-model#rateMax), [`rateStep`](https://surveyjs.io/form-library/documentation/api-reference/rating-scale-question-model#rateStep), and [`rateCount`](https://surveyjs.io/form-library/documentation/api-reference/rating-scale-question-model#rateCount) property values.\n         *\n         * [View Demo](/form-library/examples/rating-scale/ (linkStyle))\n         */\n        get: function () {\n            return this.getPropertyValue(\"rateValues\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"rateValues\", val);\n            this.createRenderedRateItems();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionRatingModel.prototype, \"rateMin\", {\n        /**\n         * Specifies the first rate value in the generated sequence of rate values. Applies if the [`rateValues`](https://surveyjs.io/form-library/documentation/api-reference/rating-scale-question-model#rateValues) array is empty.\n         *\n         * Default value: 1\n         *\n         * [View Demo](/form-library/examples/rating-scale/ (linkStyle))\n         * @see rateMax\n         * @see rateStep\n         * @see rateCount\n         */\n        get: function () {\n            return this.getPropertyValue(\"rateMin\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"rateMin\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionRatingModel.prototype, \"rateMax\", {\n        /**\n         * Specifies the last rate value in the generated sequence of rate values. Applies if the [`rateValues`](https://surveyjs.io/form-library/documentation/api-reference/rating-scale-question-model#rateValues) array is empty.\n         *\n         * Default value: 5\n         *\n         * [View Demo](/form-library/examples/rating-scale/ (linkStyle))\n         * @see rateMin\n         * @see rateStep\n         * @see rateCount\n         */\n        get: function () {\n            return this.getPropertyValue(\"rateMax\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"rateMax\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionRatingModel.prototype, \"rateStep\", {\n        /**\n         * Specifies a step with which to generate rate values. Applies if the [`rateValues`](https://surveyjs.io/form-library/documentation/api-reference/rating-scale-question-model#rateValues) array is empty.\n         *\n         * Default value: 1\n         *\n         * [View Demo](/form-library/examples/rating-scale/ (linkStyle))\n         * @see rateMin\n         * @see rateMax\n         * @see rateCount\n         */\n        get: function () {\n            return this.getPropertyValue(\"rateStep\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"rateStep\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionRatingModel.prototype.updateColors = function (themeVariables) {\n        if (this.colorMode === \"monochrome\")\n            return;\n        if (typeof document === \"undefined\" || !document)\n            return;\n        if (QuestionRatingModel.colorsCalculated)\n            return;\n        function getRGBColor(colorName, varName) {\n            var str = !!themeVariables && themeVariables[colorName];\n            if (!str) {\n                var style = getComputedStyle(document.documentElement);\n                str = style.getPropertyValue && style.getPropertyValue(varName);\n            }\n            if (!str)\n                return null;\n            var ctx = document.createElement(\"canvas\").getContext(\"2d\");\n            ctx.fillStyle = str;\n            var newStr = ctx.fillStyle;\n            if (newStr.startsWith(\"rgba\")) {\n                return newStr.substring(5, newStr.length - 1).split(\",\").map(function (c) { return +(c.trim()); });\n            }\n            var result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(newStr);\n            return result ? [\n                parseInt(result[1], 16),\n                parseInt(result[2], 16),\n                parseInt(result[3], 16),\n                1\n            ] : null;\n        }\n        QuestionRatingModel.badColor = getRGBColor(\"--sjs-special-red\", \"--sd-rating-bad-color\");\n        QuestionRatingModel.normalColor = getRGBColor(\"--sjs-special-yellow\", \"--sd-rating-normal-color\");\n        QuestionRatingModel.goodColor = getRGBColor(\"--sjs-special-green\", \"--sd-rating-good-color\");\n        QuestionRatingModel.badColorLight = getRGBColor(\"--sjs-special-red-light\", \"--sd-rating-bad-color-light\");\n        QuestionRatingModel.normalColorLight = getRGBColor(\"--sjs-special-yellow-light\", \"--sd-rating-normal-color-light\");\n        QuestionRatingModel.goodColorLight = getRGBColor(\"--sjs-special-green-light\", \"--sd-rating-good-color-light\");\n        this.colorsCalculated = true;\n    };\n    QuestionRatingModel.prototype.getDisplayValueCore = function (keysAsText, value) {\n        if (!this.useRateValues)\n            return _super.prototype.getDisplayValueCore.call(this, keysAsText, value);\n        var res = _itemvalue__WEBPACK_IMPORTED_MODULE_0__[\"ItemValue\"].getTextOrHtmlByValue(this.visibleRateValues, value);\n        return !!res ? res : value;\n    };\n    Object.defineProperty(QuestionRatingModel.prototype, \"visibleRateValues\", {\n        get: function () {\n            return this.renderedRateItems.map(function (i) { return i.itemValue; });\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionRatingModel.prototype.itemValuePropertyChanged = function (item, name, oldValue, newValue) {\n        if (!this.useRateValues() && newValue !== undefined)\n            this.autoGenerate = false;\n        _super.prototype.itemValuePropertyChanged.call(this, item, name, oldValue, newValue);\n    };\n    QuestionRatingModel.prototype.createRenderedRateItems = function () {\n        var _this = this;\n        var rateValues = [];\n        if (this.useRateValues()) {\n            rateValues = this.rateValues;\n        }\n        else {\n            var res = [];\n            var value = this.rateMin;\n            var step = this.rateStep;\n            while (value <= this.rateMax &&\n                res.length < _settings__WEBPACK_IMPORTED_MODULE_4__[\"settings\"].ratingMaximumRateValueCount) {\n                var item = new _itemvalue__WEBPACK_IMPORTED_MODULE_0__[\"ItemValue\"](value);\n                item.locOwner = this;\n                item.ownerPropertyName = \"rateValues\";\n                res.push(item);\n                value = this.correctValue(value + step, step);\n            }\n            rateValues = res;\n        }\n        if (this.rateType == \"smileys\" && rateValues.length > 10)\n            rateValues = rateValues.slice(0, 10);\n        this.renderedRateItems = rateValues.map(function (v, i) {\n            var renderedItem = null;\n            if (_this.displayRateDescriptionsAsExtremeItems) {\n                if (i == 0)\n                    renderedItem = new RenderedRatingItem(v, _this.minRateDescription && _this.locMinRateDescription || v.locText);\n                if (i == rateValues.length - 1)\n                    renderedItem = new RenderedRatingItem(v, _this.maxRateDescription && _this.locMaxRateDescription || v.locText);\n            }\n            if (!renderedItem)\n                renderedItem = new RenderedRatingItem(v);\n            return renderedItem;\n        });\n    };\n    QuestionRatingModel.prototype.correctValue = function (value, step) {\n        if (!value)\n            return value;\n        if (Math.round(value) == value)\n            return value;\n        var fr = 0;\n        while (Math.round(step) != step) {\n            step *= 10;\n            fr++;\n        }\n        return parseFloat(value.toFixed(fr));\n    };\n    QuestionRatingModel.prototype.getType = function () {\n        return \"rating\";\n    };\n    QuestionRatingModel.prototype.getFirstInputElementId = function () {\n        return this.inputId + \"_0\";\n    };\n    QuestionRatingModel.prototype.getInputId = function (index) {\n        return this.inputId + \"_\" + index;\n    };\n    QuestionRatingModel.prototype.supportGoNextPageAutomatic = function () {\n        return this.isMouseDown === true;\n    };\n    QuestionRatingModel.prototype.supportOther = function () {\n        return false;\n    };\n    QuestionRatingModel.prototype.getPlainDataCalculatedValue = function (propName) {\n        var res = _super.prototype.getPlainDataCalculatedValue.call(this, propName);\n        if (res !== undefined || !this.useRateValues || this.isEmpty())\n            return res;\n        var item = _itemvalue__WEBPACK_IMPORTED_MODULE_0__[\"ItemValue\"].getItemByValue(this.visibleRateValues, this.value);\n        return item ? item[propName] : undefined;\n    };\n    Object.defineProperty(QuestionRatingModel.prototype, \"minRateDescription\", {\n        /**\n         * Specifies a description for the minimum (first) rate value.\n         * @see rateValues\n         * @see rateMin\n         * @see displayRateDescriptionsAsExtremeItems\n         */\n        get: function () {\n            return this.getLocalizableStringText(\"minRateDescription\");\n        },\n        set: function (val) {\n            this.setLocalizableStringText(\"minRateDescription\", val);\n            this.hasMinRateDescription = !!this.minRateDescription;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionRatingModel.prototype, \"locMinRateDescription\", {\n        get: function () {\n            return this.getLocalizableString(\"minRateDescription\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionRatingModel.prototype, \"maxRateDescription\", {\n        /**\n         * Specifies a description for the maximum (last) rate value.\n         * @see rateValues\n         * @see rateMax\n         * @see displayRateDescriptionsAsExtremeItems\n         */\n        get: function () {\n            return this.getLocalizableStringText(\"maxRateDescription\");\n        },\n        set: function (val) {\n            this.setLocalizableStringText(\"maxRateDescription\", val);\n            this.hasMaxRateDescription = !!this.maxRateDescription;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionRatingModel.prototype, \"locMaxRateDescription\", {\n        get: function () {\n            return this.getLocalizableString(\"maxRateDescription\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionRatingModel.prototype, \"hasMinLabel\", {\n        get: function () {\n            return !this.displayRateDescriptionsAsExtremeItems && !!this.hasMinRateDescription;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionRatingModel.prototype, \"hasMaxLabel\", {\n        get: function () {\n            return !this.displayRateDescriptionsAsExtremeItems && !!this.hasMaxRateDescription;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionRatingModel.prototype, \"rateDisplayMode\", {\n        get: function () {\n            return this.rateType;\n        },\n        set: function (val) {\n            this.rateType = val;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionRatingModel.prototype, \"isStar\", {\n        get: function () {\n            return this.rateType == \"stars\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionRatingModel.prototype, \"isSmiley\", {\n        get: function () {\n            return this.rateType == \"smileys\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionRatingModel.prototype, \"itemComponentName\", {\n        get: function () {\n            if (this.isStar)\n                return \"sv-rating-item-star\";\n            if (this.isSmiley)\n                return \"sv-rating-item-smiley\";\n            return \"sv-rating-item\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionRatingModel.prototype.valueToData = function (val) {\n        if (this.useRateValues()) {\n            var item = _itemvalue__WEBPACK_IMPORTED_MODULE_0__[\"ItemValue\"].getItemByValue(this.rateValues, val);\n            return !!item ? item.value : val;\n        }\n        return !isNaN(val) ? parseFloat(val) : val;\n    };\n    QuestionRatingModel.prototype.setValueFromClick = function (value) {\n        if (this.value === parseFloat(value)) {\n            this.clearValue();\n        }\n        else {\n            this.value = value;\n        }\n        for (var i = 0; i < this.renderedRateItems.length; i++) {\n            this.renderedRateItems[i].highlight = \"none\";\n        }\n    };\n    QuestionRatingModel.prototype.onItemMouseIn = function (item) {\n        if (this.isReadOnly || !item.itemValue.isEnabled || this.isDesignMode)\n            return;\n        var high = true;\n        var selected = this.value != null;\n        if (this.rateType !== \"stars\") {\n            item.highlight = \"highlighted\";\n            return;\n        }\n        for (var i = 0; i < this.renderedRateItems.length; i++) {\n            this.renderedRateItems[i].highlight = high && !selected && \"highlighted\" || !high && selected && \"unhighlighted\" || \"none\";\n            if (this.renderedRateItems[i] == item)\n                high = false;\n            if (this.renderedRateItems[i].itemValue.value == this.value)\n                selected = false;\n        }\n    };\n    QuestionRatingModel.prototype.onItemMouseOut = function (item) {\n        this.renderedRateItems.forEach(function (item) { return item.highlight = \"none\"; });\n    };\n    Object.defineProperty(QuestionRatingModel.prototype, \"itemSmallMode\", {\n        get: function () {\n            return this.inMatrixMode && _settings__WEBPACK_IMPORTED_MODULE_4__[\"settings\"].matrix.rateSize == \"small\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionRatingModel.prototype, \"ratingRootCss\", {\n        get: function () {\n            var baseClass = ((this.displayMode == \"buttons\" || (!!this.survey && this.survey.isDesignMode)) && this.cssClasses.rootWrappable) ?\n                this.cssClasses.rootWrappable : this.cssClasses.root;\n            return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_6__[\"CssClassBuilder\"]()\n                .append(baseClass)\n                .append(this.cssClasses.itemSmall, this.itemSmallMode && this.rateType != \"labels\")\n                .toString();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionRatingModel.prototype, \"itemStarIcon\", {\n        get: function () {\n            return this.itemSmallMode ? \"icon-rating-star-small\" : \"icon-rating-star\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionRatingModel.prototype, \"itemStarIconAlt\", {\n        get: function () {\n            return this.itemStarIcon + \"-2\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionRatingModel.prototype.getItemSmiley = function (item) {\n        var icons = [\"terrible\", \"very-poor\", \"poor\", \"not-good\", \"average\", \"normal\", \"good\", \"very-good\", \"excellent\", \"perfect\"];\n        var priority = [\"very-good\", \"not-good\", \"normal\", \"good\", \"average\", \"excellent\", \"poor\", \"perfect\", \"very-poor\", \"terrible\"];\n        var count = this.useRateValues() ? this.rateValues.length : this.rateMax - this.rateMin + 1;\n        var selectedPriority = priority.slice(0, count);\n        var selectedIcons = icons.filter(function (i) { return selectedPriority.indexOf(i) != -1; });\n        if (!this.useRateValues()) {\n            return selectedIcons[item.value - this.rateMin];\n        }\n        else {\n            return selectedIcons[this.rateValues.indexOf(item)];\n        }\n    };\n    QuestionRatingModel.prototype.getItemSmileyIconName = function (item) {\n        return \"icon-\" + this.getItemSmiley(item);\n    };\n    QuestionRatingModel.prototype.getItemClassByText = function (item, text) {\n        return this.getItemClass(item);\n    };\n    QuestionRatingModel.prototype.getRenderedItemColor = function (index, light) {\n        var startColor = light ? QuestionRatingModel.badColorLight : QuestionRatingModel.badColor;\n        var endColor = light ? QuestionRatingModel.goodColorLight : QuestionRatingModel.goodColor;\n        var normalIndex = (this.rateCount - 1) / 2.0;\n        var middleColor = light ? QuestionRatingModel.normalColorLight : QuestionRatingModel.normalColor;\n        if (index < normalIndex) {\n            endColor = middleColor;\n        }\n        else {\n            startColor = middleColor;\n            index -= normalIndex;\n        }\n        if (!startColor || !endColor)\n            return null;\n        var curColor = [0, 0, 0, 0];\n        for (var i = 0; i < 4; i++) {\n            curColor[i] = startColor[i] + (endColor[i] - startColor[i]) * index / normalIndex;\n            if (i < 3)\n                curColor[i] = Math.trunc(curColor[i]);\n        }\n        return \"rgba(\" + curColor[0] + \", \" + curColor[1] + \", \" + curColor[2] + \", \" + curColor[3] + \")\";\n    };\n    QuestionRatingModel.prototype.getItemStyle = function (item, highlight) {\n        if (highlight === void 0) { highlight = \"none\"; }\n        if (this.scaleColorMode === \"monochrome\" && this.rateColorMode == \"default\")\n            return { borderColor: null, fill: null, backgroundColor: null };\n        var index = this.visibleRateValues.indexOf(item);\n        var color = this.getRenderedItemColor(index, false);\n        if (this.value != this.renderedRateItems[index].value) {\n            var colorLight = this.getRenderedItemColor(index, true);\n            if (highlight == \"highlighted\" && this.scaleColorMode === \"colored\")\n                return { borderColor: color, fill: color, backgroundColor: colorLight };\n            if (this.scaleColorMode === \"colored\" && this.errors.length == 0)\n                return { borderColor: color, fill: color, backgroundColor: null };\n            return { borderColor: null, fill: null, backgroundColor: null };\n        }\n        else {\n            return { borderColor: color, fill: null, backgroundColor: color };\n        }\n    };\n    QuestionRatingModel.prototype.getItemClass = function (item, highlight) {\n        var _this = this;\n        if (highlight === void 0) { highlight = \"none\"; }\n        var isSelected = this.value == item.value;\n        if (this.isStar) {\n            if (!this.useRateValues()) {\n                isSelected = this.value >= item.value;\n            }\n            else {\n                isSelected = this.rateValues.indexOf(this.rateValues.filter(function (i) { return i.value == _this.value; })[0]) >= this.rateValues.indexOf(item);\n            }\n        }\n        var isDisabled = this.isReadOnly || !item.isEnabled;\n        var allowHover = !isDisabled && (this.value != item.value) && !(!!this.survey && this.survey.isDesignMode);\n        var renderedItem = this.renderedRateItems.filter(function (i) { return i.itemValue == item; })[0];\n        var isHighlighted = this.isStar && (renderedItem === null || renderedItem === void 0 ? void 0 : renderedItem.highlight) == \"highlighted\";\n        var isUnhighlighted = this.isStar && (renderedItem === null || renderedItem === void 0 ? void 0 : renderedItem.highlight) == \"unhighlighted\";\n        var itemClass = this.cssClasses.item;\n        var itemSelectedClass = this.cssClasses.selected;\n        var itemDisabledClass = this.cssClasses.itemDisabled;\n        var itemHoverClass = this.cssClasses.itemHover;\n        var itemitemOnErrorClass = this.cssClasses.itemOnError;\n        var itemHighlightedClass = null;\n        var itemUnhighlightedClass = null;\n        var itemScaleColoredClass = null;\n        var itemRateColoredClass = null;\n        var itemSmallClass = null;\n        if (this.isStar) {\n            itemClass = this.cssClasses.itemStar;\n            itemSelectedClass = this.cssClasses.itemStarSelected;\n            itemDisabledClass = this.cssClasses.itemStarDisabled;\n            itemHoverClass = this.cssClasses.itemStarHover;\n            itemitemOnErrorClass = this.cssClasses.itemStarOnError;\n            itemHighlightedClass = this.cssClasses.itemStarHighlighted;\n            itemUnhighlightedClass = this.cssClasses.itemStarUnhighlighted;\n            itemSmallClass = this.cssClasses.itemStarSmall;\n        }\n        if (this.isSmiley) {\n            itemClass = this.cssClasses.itemSmiley;\n            itemSelectedClass = this.cssClasses.itemSmileySelected;\n            itemDisabledClass = this.cssClasses.itemSmileyDisabled;\n            itemHoverClass = this.cssClasses.itemSmileyHover;\n            itemitemOnErrorClass = this.cssClasses.itemSmileyOnError;\n            itemHighlightedClass = this.cssClasses.itemSmileyHighlighted;\n            itemScaleColoredClass = this.cssClasses.itemSmileyScaleColored;\n            itemRateColoredClass = this.cssClasses.itemSmileyRateColored;\n            itemSmallClass = this.cssClasses.itemSmileySmall;\n        }\n        var hasFixedSize = !this.isStar &&\n            !this.isSmiley &&\n            (!this.displayRateDescriptionsAsExtremeItems ||\n                this.useRateValues() && item != this.rateValues[0] && item != this.rateValues[this.rateValues.length - 1] ||\n                !this.useRateValues() && item.value != this.rateMin && item.value != this.rateMax) &&\n            item.locText.calculatedText.length <= 2 &&\n            Number.isInteger(Number(item.locText.calculatedText));\n        return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_6__[\"CssClassBuilder\"]()\n            .append(itemClass)\n            .append(itemSelectedClass, isSelected)\n            .append(itemDisabledClass, this.isReadOnly)\n            .append(itemHoverClass, allowHover)\n            .append(itemHighlightedClass, isHighlighted)\n            .append(itemScaleColoredClass, this.scaleColorMode == \"colored\")\n            .append(itemRateColoredClass, this.rateColorMode == \"scale\" && isSelected)\n            .append(itemUnhighlightedClass, isUnhighlighted)\n            .append(itemitemOnErrorClass, this.errors.length > 0)\n            .append(itemSmallClass, this.itemSmallMode)\n            .append(this.cssClasses.itemFixedSize, hasFixedSize)\n            .toString();\n    };\n    //methods for mobile view\n    QuestionRatingModel.prototype.getControlClass = function () {\n        this.isEmpty();\n        return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_6__[\"CssClassBuilder\"]()\n            .append(this.cssClasses.control)\n            .append(this.cssClasses.controlEmpty, this.isEmpty())\n            .append(this.cssClasses.onError, this.errors.length > 0)\n            .append(this.cssClasses.controlDisabled, this.isReadOnly)\n            .toString();\n    };\n    Object.defineProperty(QuestionRatingModel.prototype, \"placeholder\", {\n        get: function () {\n            return this.getLocalizableStringText(\"ratingOptionsCaption\");\n        },\n        set: function (val) {\n            this.setLocalizableStringText(\"ratingOptionsCaption\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionRatingModel.prototype, \"locPlaceholder\", {\n        get: function () {\n            return this.getLocalizableString(\"ratingOptionsCaption\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionRatingModel.prototype, \"allowClear\", {\n        get: function () {\n            return true;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionRatingModel.prototype, \"searchEnabled\", {\n        get: function () {\n            return false;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionRatingModel.prototype, \"renderedValue\", {\n        get: function () {\n            return this.value;\n        },\n        set: function (val) {\n            this.value = val;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionRatingModel.prototype.isItemSelected = function (item) {\n        return item.value == this.value;\n    };\n    Object.defineProperty(QuestionRatingModel.prototype, \"visibleChoices\", {\n        get: function () {\n            return this.visibleRateValues;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionRatingModel.prototype, \"readOnlyText\", {\n        get: function () {\n            if (this.readOnly)\n                return (this.displayValue || this.placeholder);\n            return this.isEmpty() ? this.placeholder : \"\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionRatingModel.prototype.needResponsiveWidth = function () {\n        var rateValues = this.getPropertyValue(\"rateValues\");\n        var rateStep = this.getPropertyValue(\"rateStep\");\n        var rateMax = this.getPropertyValue(\"rateMax\");\n        var rateMin = this.getPropertyValue(\"rateMin\");\n        return this.displayMode != \"dropdown\" && !!(this.hasMinRateDescription ||\n            this.hasMaxRateDescription ||\n            (rateStep && (rateMax - rateMin) / rateStep > 9));\n    };\n    // TODO: return responsiveness after design improvement\n    QuestionRatingModel.prototype.supportResponsiveness = function () {\n        return true;\n    };\n    QuestionRatingModel.prototype.getCompactRenderAs = function () {\n        return (this.displayMode == \"buttons\") ? \"default\" : \"dropdown\";\n    };\n    QuestionRatingModel.prototype.getDesktopRenderAs = function () {\n        return (this.displayMode == \"dropdown\") ? \"dropdown\" : \"default\";\n    };\n    Object.defineProperty(QuestionRatingModel.prototype, \"ariaExpanded\", {\n        get: function () {\n            var _a;\n            var popupModel = (_a = this.dropdownListModel) === null || _a === void 0 ? void 0 : _a.popupModel;\n            if (!popupModel)\n                return null;\n            return popupModel.isVisible ? \"true\" : \"false\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionRatingModel.prototype, \"dropdownListModel\", {\n        get: function () {\n            return this.dropdownListModelValue;\n        },\n        set: function (val) {\n            this.dropdownListModelValue = val;\n            this.updateElementCss();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionRatingModel.prototype.updateCssClasses = function (res, css) {\n        _super.prototype.updateCssClasses.call(this, res, css);\n        if (!!this.dropdownListModel) {\n            var listCssClasses = {};\n            Object(_utils_utils__WEBPACK_IMPORTED_MODULE_8__[\"mergeValues\"])(css.list, listCssClasses);\n            Object(_utils_utils__WEBPACK_IMPORTED_MODULE_8__[\"mergeValues\"])(res.list, listCssClasses);\n            res[\"list\"] = listCssClasses;\n        }\n    };\n    QuestionRatingModel.prototype.calcCssClasses = function (css) {\n        var classes = _super.prototype.calcCssClasses.call(this, css);\n        if (this.dropdownListModel) {\n            this.dropdownListModel.updateCssClasses(classes.popup, classes.list);\n        }\n        return classes;\n    };\n    QuestionRatingModel.prototype.setSurveyImpl = function (value, isLight) {\n        var _this = this;\n        _super.prototype.setSurveyImpl.call(this, value, isLight);\n        if (!this.survey)\n            return;\n        this.updateColors(this.survey.themeVariables);\n        this.survey.onThemeApplied.add(function (survey, options) {\n            _this.colorsCalculated = false;\n            _this.updateColors(options.theme.cssVariables);\n            _this.createRenderedRateItems();\n        });\n    };\n    QuestionRatingModel.prototype.dispose = function () {\n        _super.prototype.dispose.call(this);\n        if (!!this.dropdownListModelValue) {\n            this.dropdownListModelValue.dispose();\n        }\n    };\n    QuestionRatingModel.colorsCalculated = false;\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"property\"])({ defaultValue: false })\n    ], QuestionRatingModel.prototype, \"inputHasValue\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"property\"])({ defaultValue: true })\n    ], QuestionRatingModel.prototype, \"autoGenerate\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"property\"])({ defaultValue: 5 })\n    ], QuestionRatingModel.prototype, \"rateCount\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"propertyArray\"])()\n    ], QuestionRatingModel.prototype, \"renderedRateItems\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"property\"])({ defaultValue: false })\n    ], QuestionRatingModel.prototype, \"hasMinRateDescription\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"property\"])({ defaultValue: false })\n    ], QuestionRatingModel.prototype, \"hasMaxRateDescription\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"property\"])({ defaultValue: false })\n    ], QuestionRatingModel.prototype, \"displayRateDescriptionsAsExtremeItems\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"property\"])({\n            defaultValue: \"auto\",\n            onSet: function (val, target) {\n                if (!target.isDesignMode) {\n                    if (val === \"dropdown\") {\n                        target.renderAs = \"dropdown\";\n                    }\n                    else {\n                        target.renderAs = \"default\";\n                    }\n                }\n            }\n        })\n    ], QuestionRatingModel.prototype, \"displayMode\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"property\"])({ defaultValue: \"labels\" })\n    ], QuestionRatingModel.prototype, \"rateType\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"property\"])({ defaultValue: \"monochrome\" })\n    ], QuestionRatingModel.prototype, \"scaleColorMode\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"property\"])({ defaultValue: \"scale\" })\n    ], QuestionRatingModel.prototype, \"rateColorMode\", void 0);\n    return QuestionRatingModel;\n}(_question__WEBPACK_IMPORTED_MODULE_1__[\"Question\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"Serializer\"].addClass(\"rating\", [\n    { name: \"showCommentArea:switch\", layout: \"row\", visible: true, category: \"general\" },\n    {\n        name: \"rateType\",\n        alternativeName: \"rateDisplayMode\",\n        default: \"labels\",\n        category: \"rateValues\",\n        choices: [\"labels\", \"stars\", \"smileys\"],\n        visibleIndex: 0\n    },\n    {\n        name: \"scaleColorMode\",\n        category: \"rateValues\",\n        default: \"monochrome\",\n        choices: [\"monochrome\", \"colored\"],\n        visibleIf: function (obj) {\n            return obj.rateDisplayMode == \"smileys\";\n        },\n        visibleIndex: 1\n    },\n    {\n        name: \"rateColorMode\",\n        category: \"rateValues\",\n        default: \"scale\",\n        choices: [\"default\", \"scale\"],\n        visibleIf: function (obj) {\n            return obj.rateDisplayMode == \"smileys\" && obj.scaleColorMode == \"monochrome\";\n        },\n        visibleIndex: 2\n    },\n    {\n        name: \"autoGenerate\",\n        category: \"rateValues\",\n        default: true,\n        choices: [true, false],\n        visibleIndex: 4\n    },\n    {\n        name: \"rateCount:number\",\n        default: 5,\n        category: \"rateValues\",\n        visibleIndex: 3,\n        onSettingValue: function (obj, val) {\n            if (val < 2)\n                return 2;\n            if (val > _settings__WEBPACK_IMPORTED_MODULE_4__[\"settings\"].ratingMaximumRateValueCount && val > obj.rateValues.length)\n                return _settings__WEBPACK_IMPORTED_MODULE_4__[\"settings\"].ratingMaximumRateValueCount;\n            if (val > 10 && obj.rateDisplayMode == \"smileys\")\n                return 10;\n            return val;\n        },\n    },\n    {\n        name: \"rateValues:itemvalue[]\",\n        baseValue: function () {\n            return _surveyStrings__WEBPACK_IMPORTED_MODULE_5__[\"surveyLocalization\"].getString(\"choices_Item\");\n        },\n        category: \"rateValues\",\n        visibleIf: function (obj) {\n            return !obj.autoGenerate;\n        },\n        visibleIndex: 5\n    },\n    {\n        name: \"rateMin:number\", default: 1,\n        onSettingValue: function (obj, val) {\n            return val > obj.rateMax - obj.rateStep ? obj.rateMax - obj.rateStep : val;\n        },\n        visibleIf: function (obj) {\n            return !!obj.autoGenerate;\n        },\n        visibleIndex: 6\n    },\n    {\n        name: \"rateMax:number\", default: 5,\n        onSettingValue: function (obj, val) {\n            return val < obj.rateMin + obj.rateStep ? obj.rateMin + obj.rateStep : val;\n        },\n        visibleIf: function (obj) {\n            return !!obj.autoGenerate;\n        },\n        visibleIndex: 7\n    },\n    {\n        name: \"rateStep:number\", default: 1, minValue: 0.1,\n        onSettingValue: function (obj, val) {\n            if (val <= 0)\n                val = 1;\n            if (val > obj.rateMax - obj.rateMin)\n                val = obj.rateMax - obj.rateMin;\n            return val;\n        },\n        visibleIf: function (obj) {\n            return !!obj.autoGenerate;\n        },\n        visibleIndex: 8\n    },\n    {\n        name: \"minRateDescription\",\n        alternativeName: \"mininumRateDescription\",\n        serializationProperty: \"locMinRateDescription\",\n        visibleIndex: 17\n    },\n    {\n        name: \"maxRateDescription\",\n        alternativeName: \"maximumRateDescription\",\n        serializationProperty: \"locMaxRateDescription\",\n        visibleIndex: 18\n    },\n    {\n        name: \"displayRateDescriptionsAsExtremeItems:boolean\",\n        default: false,\n        visibleIndex: 19,\n        visibleIf: function (obj) {\n            return obj.rateType == \"labels\";\n        }\n    },\n    {\n        name: \"displayMode\",\n        default: \"auto\",\n        choices: [\"auto\", \"buttons\", \"dropdown\"],\n        visibleIndex: 20\n    }\n], function () {\n    return new QuestionRatingModel(\"\");\n}, \"question\");\n_questionfactory__WEBPACK_IMPORTED_MODULE_3__[\"QuestionFactory\"].Instance.registerQuestion(\"rating\", function (name) {\n    return new QuestionRatingModel(name);\n});\n\n\n/***/ }),\n\n/***/ \"./src/question_signaturepad.ts\":\n/*!**************************************!*\\\n  !*** ./src/question_signaturepad.ts ***!\n  \\**************************************/\n/*! exports provided: QuestionSignaturePadModel */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_3472512__) {\n\n\"use strict\";\n__nested_webpack_require_3472512__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_3472512__.d(__nested_webpack_exports__, \"QuestionSignaturePadModel\", function() { return QuestionSignaturePadModel; });\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_3472512__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_3472512__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_3472512__(/*! ./question */ \"./src/question.ts\");\n/* harmony import */ var signature_pad__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_3472512__(/*! signature_pad */ \"./node_modules/signature_pad/dist/signature_pad.js\");\n/* harmony import */ var _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_3472512__(/*! ./utils/cssClassBuilder */ \"./src/utils/cssClassBuilder.ts\");\n/* harmony import */ var _console_warnings__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_3472512__(/*! ./console-warnings */ \"./src/console-warnings.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\n\nvar defaultWidth = 300;\nvar defaultHeight = 200;\nfunction resizeCanvas(canvas) {\n    var context = canvas.getContext(\"2d\");\n    var devicePixelRatio = window.devicePixelRatio || 1;\n    var backingStoreRatio = context.webkitBackingStorePixelRatio ||\n        context.mozBackingStorePixelRatio ||\n        context.msBackingStorePixelRatio ||\n        context.oBackingStorePixelRatio ||\n        context.backingStorePixelRatio ||\n        1;\n    var ratio = devicePixelRatio / backingStoreRatio;\n    var oldWidth = canvas.width;\n    var oldHeight = canvas.height;\n    canvas.width = oldWidth * ratio;\n    canvas.height = oldHeight * ratio;\n    canvas.style.width = oldWidth + \"px\";\n    canvas.style.height = oldHeight + \"px\";\n    context.scale(ratio, ratio);\n}\n/**\n * A class that describes the Signature question type.\n *\n * [View Demo](https://surveyjs.io/form-library/examples/signature-pad-widget-javascript/ (linkStyle))\n */\nvar QuestionSignaturePadModel = /** @class */ (function (_super) {\n    __extends(QuestionSignaturePadModel, _super);\n    function QuestionSignaturePadModel(name) {\n        return _super.call(this, name) || this;\n    }\n    QuestionSignaturePadModel.prototype.getPenColorFromTheme = function () {\n        var _survey = this.survey;\n        return !!_survey && !!_survey.themeVariables && _survey.themeVariables[\"--sjs-primary-backcolor\"];\n    };\n    QuestionSignaturePadModel.prototype.updateColors = function (signaturePad) {\n        var penColorFromTheme = this.getPenColorFromTheme();\n        var penColorProperty = this.getPropertyByName(\"penColor\");\n        signaturePad.penColor = this.penColor || penColorFromTheme || penColorProperty.defaultValue || \"#1ab394\";\n        var backgroundColorProperty = this.getPropertyByName(\"backgroundColor\");\n        var backgroundColorFromTheme = penColorFromTheme ? \"transparent\" : undefined;\n        var background = !!this.backgroundImage ? \"transparent\" : this.backgroundColor;\n        signaturePad.backgroundColor = background || backgroundColorFromTheme || backgroundColorProperty.defaultValue || \"#ffffff\";\n    };\n    QuestionSignaturePadModel.prototype.getCssRoot = function (cssClasses) {\n        return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_4__[\"CssClassBuilder\"]()\n            .append(_super.prototype.getCssRoot.call(this, cssClasses))\n            .append(cssClasses.small, this.signatureWidth.toString() === \"300\")\n            .toString();\n    };\n    QuestionSignaturePadModel.prototype.updateValue = function () {\n        if (this.signaturePad) {\n            var format = this.dataFormat === \"jpeg\" ? \"image/jpeg\" :\n                (this.dataFormat === \"svg\" ? \"image/svg+xml\" : \"\");\n            var data = this.signaturePad.toDataURL(format);\n            this.value = data;\n        }\n    };\n    QuestionSignaturePadModel.prototype.getType = function () {\n        return \"signaturepad\";\n    };\n    QuestionSignaturePadModel.prototype.afterRenderQuestionElement = function (el) {\n        if (!!el) {\n            this.initSignaturePad(el);\n        }\n        _super.prototype.afterRenderQuestionElement.call(this, el);\n    };\n    QuestionSignaturePadModel.prototype.beforeDestroyQuestionElement = function (el) {\n        if (!!el) {\n            this.destroySignaturePad(el);\n        }\n    };\n    QuestionSignaturePadModel.prototype.setSurveyImpl = function (value, isLight) {\n        var _this = this;\n        _super.prototype.setSurveyImpl.call(this, value, isLight);\n        if (!this.survey)\n            return;\n        this.survey.onThemeApplied.add(function (survey, options) {\n            if (!!_this.signaturePad) {\n                _this.updateColors(_this.signaturePad);\n            }\n        });\n    };\n    QuestionSignaturePadModel.prototype.initSignaturePad = function (el) {\n        var _this = this;\n        var canvas = el.getElementsByTagName(\"canvas\")[0];\n        var signaturePad = new signature_pad__WEBPACK_IMPORTED_MODULE_3__[\"default\"](canvas, { backgroundColor: \"#ffffff\" });\n        if (this.isInputReadOnly) {\n            signaturePad.off();\n        }\n        this.readOnlyChangedCallback = function () {\n            if (_this.isInputReadOnly) {\n                signaturePad.off();\n            }\n            else {\n                signaturePad.on();\n            }\n        };\n        this.updateColors(signaturePad);\n        signaturePad.addEventListener(\"beginStroke\", function () {\n            _this.isDrawingValue = true;\n            canvas.focus();\n        }, { once: false });\n        signaturePad.addEventListener(\"endStroke\", function () {\n            _this.isDrawingValue = false;\n            _this.updateValue();\n        }, { once: false });\n        var updateValueHandler = function () {\n            var data = _this.value;\n            canvas.width = _this.signatureWidth || defaultWidth;\n            canvas.height = _this.signatureHeight || defaultHeight;\n            resizeCanvas(canvas);\n            if (!data) {\n                signaturePad.clear();\n            }\n            else {\n                signaturePad.fromDataURL(data);\n            }\n        };\n        updateValueHandler();\n        this.readOnlyChangedCallback();\n        this.signaturePad = signaturePad;\n        var propertyChangedHandler = function (sender, options) {\n            if (options.name === \"signatureWidth\" || options.name === \"signatureHeight\" || options.name === \"value\") {\n                updateValueHandler();\n            }\n        };\n        this.onPropertyChanged.add(propertyChangedHandler);\n        this.signaturePad.propertyChangedHandler = propertyChangedHandler;\n    };\n    QuestionSignaturePadModel.prototype.destroySignaturePad = function (el) {\n        if (this.signaturePad) {\n            this.onPropertyChanged.remove(this.signaturePad.propertyChangedHandler);\n            this.signaturePad.off();\n        }\n        this.readOnlyChangedCallback = null;\n        this.signaturePad = null;\n    };\n    Object.defineProperty(QuestionSignaturePadModel.prototype, \"dataFormat\", {\n        /**\n         * Specifies the format in which to store the signature image.\n         *\n         * Possible values:\n         *\n         * - `\"png\"` (default)\n         * - `\"jpeg\"`\n         * - `\"svg\"`\n         */\n        get: function () {\n            return this.getPropertyValue(\"dataFormat\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"dataFormat\", correctFormatData(val));\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionSignaturePadModel.prototype, \"signatureWidth\", {\n        /**\n         * Specifies the width of the signature area. Accepts positive integer numbers.\n         */\n        get: function () {\n            return this.getPropertyValue(\"signatureWidth\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"signatureWidth\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionSignaturePadModel.prototype, \"signatureHeight\", {\n        /**\n         * Specifies the height of the signature area. Accepts positive integer numbers.\n         */\n        get: function () {\n            return this.getPropertyValue(\"signatureHeight\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"signatureHeight\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionSignaturePadModel.prototype, \"height\", {\n        //todo: need to remove this property\n        get: function () {\n            return this.getPropertyValue(\"height\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"height\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionSignaturePadModel.prototype, \"allowClear\", {\n        /**\n         * Specifies whether to display a button that clears the signature area.\n         *\n         * Default value: `true`\n         */\n        get: function () {\n            return this.getPropertyValue(\"allowClear\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"allowClear\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionSignaturePadModel.prototype, \"canShowClearButton\", {\n        get: function () {\n            return !this.isInputReadOnly && this.allowClear;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionSignaturePadModel.prototype, \"penColor\", {\n        /**\n         * Specifies a color for the pen.\n         *\n         * This property accepts color values in the following formats:\n         *\n         * - Hexadecimal colors (`\"#FF0000\"`)\n         * - RGB colors (`\"rgb(255,0,0)\"`)\n         * - Color names (`\"red\"`)\n         * @see backgroundColor\n         */\n        get: function () {\n            return this.getPropertyValue(\"penColor\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"penColor\", val);\n            !!this.signaturePad && this.updateColors(this.signaturePad);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionSignaturePadModel.prototype, \"backgroundColor\", {\n        /**\n         * Specifies a color for the signature area background. Ignored if [`backgroundImage`](#backgroundImage) is set.\n         *\n         * This property accepts color values in the following formats:\n         *\n         * - Hexadecimal colors (`\"#FF0000\"`)\n         * - RGB colors (`\"rgb(255,0,0)\"`)\n         * - Color names (`\"red\"`)\n         * @see penColor\n         */\n        get: function () {\n            return this.getPropertyValue(\"backgroundColor\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"backgroundColor\", val);\n            !!this.signaturePad && this.updateColors(this.signaturePad);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionSignaturePadModel.prototype, \"backgroundImage\", {\n        /**\n         * An image to display in the background of the signature area. Accepts a base64 or URL string value.\n         * @see backgroundColor\n         */\n        get: function () {\n            return this.getPropertyValue(\"backgroundImage\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"backgroundImage\", val);\n            !!this.signaturePad && this.updateColors(this.signaturePad);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionSignaturePadModel.prototype, \"clearButtonCaption\", {\n        get: function () {\n            return this.getLocalizationString(\"clearCaption\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionSignaturePadModel.prototype.needShowPlaceholder = function () {\n        return !this.isDrawingValue && this.isEmpty();\n    };\n    Object.defineProperty(QuestionSignaturePadModel.prototype, \"placeHolderText\", {\n        get: function () {\n            return this.getLocalizationString(\"signaturePlaceHolder\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionSignaturePadModel.prototype.endLoadingFromJson = function () {\n        _super.prototype.endLoadingFromJson.call(this);\n        //todo: need to remove this code\n        if (this.signatureWidth === 300 && !!this.width && typeof this.width === \"number\" && this.width) {\n            _console_warnings__WEBPACK_IMPORTED_MODULE_5__[\"ConsoleWarnings\"].warn(\"Use signatureWidth property to set width for the signature pad\");\n            this.signatureWidth = this.width;\n            this.width = undefined;\n        }\n        if (this.signatureHeight === 200 && !!this.height) {\n            _console_warnings__WEBPACK_IMPORTED_MODULE_5__[\"ConsoleWarnings\"].warn(\"Use signatureHeight property to set width for the signature pad\");\n            this.signatureHeight = this.height;\n            this.height = undefined;\n        }\n    };\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ defaultValue: false })\n    ], QuestionSignaturePadModel.prototype, \"isDrawingValue\", void 0);\n    return QuestionSignaturePadModel;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"Question\"]));\n\nfunction correctFormatData(val) {\n    if (!val)\n        val = \"png\";\n    val = val.replace(\"image/\", \"\").replace(\"+xml\", \"\");\n    if (val !== \"jpeg\" && val !== \"svg\")\n        val = \"png\";\n    return val;\n}\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"signaturepad\", [\n    {\n        name: \"signatureWidth:number\",\n        category: \"general\",\n        default: 300,\n    },\n    {\n        name: \"signatureHeight:number\",\n        category: \"general\",\n        default: 200,\n    },\n    //need to remove this property\n    {\n        name: \"height:number\",\n        category: \"general\",\n        visible: false\n    },\n    {\n        name: \"allowClear:boolean\",\n        category: \"general\",\n        default: true,\n    },\n    {\n        name: \"backgroundImage\",\n        category: \"general\",\n    },\n    {\n        name: \"penColor:color\",\n        category: \"general\",\n    },\n    {\n        name: \"backgroundColor:color\",\n        category: \"general\",\n    },\n    {\n        name: \"dataFormat\",\n        category: \"general\",\n        default: \"png\",\n        choices: [\n            { value: \"png\", text: \"PNG\" },\n            { value: \"image/jpeg\", text: \"JPEG\" },\n            { value: \"image/svg+xml\", text: \"SVG\" },\n        ],\n        onSettingValue: function (obj, val) {\n            return correctFormatData(val);\n        }\n    },\n    { name: \"defaultValue\", visible: false },\n    { name: \"correctAnswer\", visible: false },\n], function () {\n    return new QuestionSignaturePadModel(\"\");\n}, \"question\");\n_questionfactory__WEBPACK_IMPORTED_MODULE_1__[\"QuestionFactory\"].Instance.registerQuestion(\"signaturepad\", function (name) {\n    return new QuestionSignaturePadModel(name);\n});\n\n\n/***/ }),\n\n/***/ \"./src/question_tagbox.ts\":\n/*!********************************!*\\\n  !*** ./src/question_tagbox.ts ***!\n  \\********************************/\n/*! exports provided: QuestionTagboxModel */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_3489260__) {\n\n\"use strict\";\n__nested_webpack_require_3489260__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_3489260__.d(__nested_webpack_exports__, \"QuestionTagboxModel\", function() { return QuestionTagboxModel; });\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_3489260__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_3489260__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\n/* harmony import */ var _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_3489260__(/*! ./utils/cssClassBuilder */ \"./src/utils/cssClassBuilder.ts\");\n/* harmony import */ var _question_checkbox__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_3489260__(/*! ./question_checkbox */ \"./src/question_checkbox.ts\");\n/* harmony import */ var _dropdownMultiSelectListModel__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_3489260__(/*! ./dropdownMultiSelectListModel */ \"./src/dropdownMultiSelectListModel.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_3489260__(/*! ./settings */ \"./src/settings.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\n\n/**\n * A class that describes the Multi-Select Dropdown (Tag Box) question type.\n *\n * [View Demo](https://surveyjs.io/form-library/examples/how-to-create-multiselect-tag-box/ (linkStyle))\n */\nvar QuestionTagboxModel = /** @class */ (function (_super) {\n    __extends(QuestionTagboxModel, _super);\n    function QuestionTagboxModel(name) {\n        var _this = _super.call(this, name) || this;\n        _this.itemDisplayNameMap = {};\n        _this.onOpened = _this.addEvent();\n        _this.createLocalizableString(\"placeholder\", _this, false, true);\n        _this.createLocalizableString(\"clearCaption\", _this, false, true);\n        _this.registerPropertyChangedHandlers([\"value\", \"renderAs\", \"showOtherItem\", \"otherText\", \"placeholder\", \"choices\", \"visibleChoices\"], function () {\n            _this.updateReadOnlyText();\n        });\n        _this.updateReadOnlyText();\n        return _this;\n    }\n    QuestionTagboxModel.prototype.locStrsChanged = function () {\n        var _a;\n        _super.prototype.locStrsChanged.call(this);\n        this.updateReadOnlyText();\n        (_a = this.dropdownListModel) === null || _a === void 0 ? void 0 : _a.locStrsChanged();\n    };\n    QuestionTagboxModel.prototype.updateReadOnlyText = function () {\n        this.readOnlyText = this.displayValue || this.placeholder;\n    };\n    QuestionTagboxModel.prototype.getDefaultItemComponent = function () {\n        return \"\";\n    };\n    QuestionTagboxModel.prototype.onSurveyLoad = function () {\n        _super.prototype.onSurveyLoad.call(this);\n        if (!this.dropdownListModel) {\n            this.dropdownListModel = new _dropdownMultiSelectListModel__WEBPACK_IMPORTED_MODULE_4__[\"DropdownMultiSelectListModel\"](this);\n        }\n    };\n    Object.defineProperty(QuestionTagboxModel.prototype, \"placeholder\", {\n        /**\n         * A text displayed in the input field when it doesn't have a value.\n         */\n        get: function () {\n            return this.getLocalizableStringText(\"placeholder\");\n        },\n        set: function (val) {\n            this.setLocalizableStringText(\"placeholder\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionTagboxModel.prototype, \"locPlaceholder\", {\n        get: function () {\n            return this.getLocalizableString(\"placeholder\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionTagboxModel.prototype, \"clearCaption\", {\n        get: function () {\n            return this.getLocalizableStringText(\"clearCaption\");\n        },\n        set: function (value) {\n            this.setLocalizableStringText(\"clearCaption\", value);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionTagboxModel.prototype, \"locClearCaption\", {\n        get: function () {\n            return this.getLocalizableString(\"clearCaption\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionTagboxModel.prototype.getType = function () {\n        return \"tagbox\";\n    };\n    Object.defineProperty(QuestionTagboxModel.prototype, \"ariaRole\", {\n        get: function () {\n            return \"combobox\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionTagboxModel.prototype, \"popupModel\", {\n        get: function () {\n            var _a;\n            return (_a = this.dropdownListModel) === null || _a === void 0 ? void 0 : _a.popupModel;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionTagboxModel.prototype, \"ariaExpanded\", {\n        get: function () {\n            var popupModel = this.popupModel;\n            return !!popupModel && popupModel.isVisible ? \"true\" : \"false\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionTagboxModel.prototype.getControlClass = function () {\n        return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_2__[\"CssClassBuilder\"]()\n            .append(this.cssClasses.control)\n            .append(this.cssClasses.controlEmpty, this.isEmpty())\n            .append(this.cssClasses.onError, this.errors.length > 0)\n            .append(this.cssClasses.controlDisabled, this.isReadOnly)\n            .toString();\n    };\n    QuestionTagboxModel.prototype.onOpenedCallBack = function () {\n        this.onOpened.fire(this, { question: this, choices: this.choices });\n    };\n    QuestionTagboxModel.prototype.hasUnknownValue = function (val, includeOther, isFilteredChoices, checkEmptyValue) {\n        if (this.choicesLazyLoadEnabled) {\n            return false;\n        }\n        return _super.prototype.hasUnknownValue.call(this, val, includeOther, isFilteredChoices, checkEmptyValue);\n    };\n    QuestionTagboxModel.prototype.needConvertRenderedOtherToDataValue = function () {\n        var _a;\n        var val = (_a = this.otherValue) === null || _a === void 0 ? void 0 : _a.trim();\n        if (!val)\n            return false;\n        return _super.prototype.hasUnknownValue.call(this, val, true, false);\n    };\n    QuestionTagboxModel.prototype.onVisibleChoicesChanged = function () {\n        _super.prototype.onVisibleChoicesChanged.call(this);\n        if (this.popupModel) {\n            this.dropdownListModel.updateItems();\n        }\n    };\n    QuestionTagboxModel.prototype.getItemIfChoicesNotContainThisValue = function (value, text) {\n        var _a;\n        if (this.choicesLazyLoadEnabled && !((_a = this.dropdownListModel) === null || _a === void 0 ? void 0 : _a.isAllDataLoaded)) {\n            return this.createItemValue(value, text);\n        }\n        else {\n            return _super.prototype.getItemIfChoicesNotContainThisValue.call(this, value, text);\n        }\n    };\n    QuestionTagboxModel.prototype.validateItemValues = function (itemValues) {\n        var _this = this;\n        this.updateItemDisplayNameMap();\n        var val = this.renderedValue;\n        if (!!itemValues.length && itemValues.length === val.length)\n            return itemValues;\n        var selectedItemValues = this.selectedItemValues;\n        if (!itemValues.length && !!selectedItemValues && !!selectedItemValues.length) {\n            this.defaultSelectedItemValues = [].concat(selectedItemValues);\n            return selectedItemValues;\n        }\n        var itemValueValues = itemValues.map(function (iV) { return iV.value; });\n        val.filter(function (item) { return itemValueValues.indexOf(item) === -1; }).forEach(function (item) {\n            var newItem = _this.getItemIfChoicesNotContainThisValue(item, _this.itemDisplayNameMap[item]);\n            if (newItem) {\n                itemValues.push(newItem);\n            }\n        });\n        itemValues.sort(function (a, b) { return val.indexOf(a.value) - val.indexOf(b.value); });\n        return itemValues;\n    };\n    QuestionTagboxModel.prototype.updateItemDisplayNameMap = function () {\n        var _this = this;\n        var func = function (item) { _this.itemDisplayNameMap[item.value] = item.text; };\n        (this.defaultSelectedItemValues || []).forEach(func);\n        (this.selectedItemValues || []).forEach(func);\n        this.visibleChoices.forEach(func);\n    };\n    QuestionTagboxModel.prototype.getFirstInputElementId = function () {\n        return this.inputId + (this.searchEnabled ? \"_0\" : \"\");\n    };\n    QuestionTagboxModel.prototype.getInputId = function () {\n        return this.inputId + \"_0\";\n    };\n    QuestionTagboxModel.prototype.dispose = function () {\n        _super.prototype.dispose.call(this);\n        if (!!this.dropdownListModelValue) {\n            this.dropdownListModelValue.dispose();\n        }\n    };\n    QuestionTagboxModel.prototype.clearValue = function () {\n        _super.prototype.clearValue.call(this);\n        this.dropdownListModel.clear();\n    };\n    Object.defineProperty(QuestionTagboxModel.prototype, \"isNewA11yStructure\", {\n        //a11y\n        get: function () {\n            return false;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ defaultValue: \"\" })\n    ], QuestionTagboxModel.prototype, \"readOnlyText\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])()\n    ], QuestionTagboxModel.prototype, \"allowClear\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({\n            defaultValue: true,\n            onSet: function (newValue, target) {\n                if (!!target.dropdownListModel) {\n                    target.dropdownListModel.setSearchEnabled(newValue);\n                }\n            }\n        })\n    ], QuestionTagboxModel.prototype, \"searchEnabled\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({\n            onSet: function (newValue, target) {\n                if (!!target.dropdownListModel) {\n                    target.dropdownListModel.setHideSelectedItems(newValue);\n                }\n            }\n        })\n    ], QuestionTagboxModel.prototype, \"hideSelectedItems\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])()\n    ], QuestionTagboxModel.prototype, \"choicesLazyLoadEnabled\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ defaultValue: 25 })\n    ], QuestionTagboxModel.prototype, \"choicesLazyLoadPageSize\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ getDefaultValue: function () { return _settings__WEBPACK_IMPORTED_MODULE_5__[\"settings\"].tagboxCloseOnSelect; } })\n    ], QuestionTagboxModel.prototype, \"closeOnSelect\", void 0);\n    return QuestionTagboxModel;\n}(_question_checkbox__WEBPACK_IMPORTED_MODULE_3__[\"QuestionCheckboxModel\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"tagbox\", [\n    { name: \"placeholder\", serializationProperty: \"locPlaceholder\" },\n    { name: \"allowClear:boolean\", default: true },\n    { name: \"searchEnabled:boolean\", default: true },\n    { name: \"choicesLazyLoadEnabled:boolean\", default: false, visible: false },\n    { name: \"choicesLazyLoadPageSize:number\", default: 25, visible: false },\n    { name: \"hideSelectedItems:boolean\", default: false },\n    { name: \"closeOnSelect:boolean\" },\n    { name: \"itemComponent\", visible: false, default: \"\" }\n], function () {\n    return new QuestionTagboxModel(\"\");\n}, \"checkbox\");\n_questionfactory__WEBPACK_IMPORTED_MODULE_1__[\"QuestionFactory\"].Instance.registerQuestion(\"tagbox\", function (name) {\n    var q = new QuestionTagboxModel(name);\n    q.choices = _questionfactory__WEBPACK_IMPORTED_MODULE_1__[\"QuestionFactory\"].DefaultChoices;\n    return q;\n});\n\n\n/***/ }),\n\n/***/ \"./src/question_text.ts\":\n/*!******************************!*\\\n  !*** ./src/question_text.ts ***!\n  \\******************************/\n/*! exports provided: QuestionTextModel */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_3502785__) {\n\n\"use strict\";\n__nested_webpack_require_3502785__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_3502785__.d(__nested_webpack_exports__, \"QuestionTextModel\", function() { return QuestionTextModel; });\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_3502785__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_3502785__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _localizablestring__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_3502785__(/*! ./localizablestring */ \"./src/localizablestring.ts\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_3502785__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _validator__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_3502785__(/*! ./validator */ \"./src/validator.ts\");\n/* harmony import */ var _error__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_3502785__(/*! ./error */ \"./src/error.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_3502785__(/*! ./settings */ \"./src/settings.ts\");\n/* harmony import */ var _question_textbase__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_3502785__(/*! ./question_textbase */ \"./src/question_textbase.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n\n\n\n\n\n\n\n\n/**\n * A class that describes the Single-Line Input question type.\n *\n * [View Demo](https://surveyjs.io/form-library/examples/questiontype-text/ (linkStyle))\n */\nvar QuestionTextModel = /** @class */ (function (_super) {\n    __extends(QuestionTextModel, _super);\n    function QuestionTextModel(name) {\n        var _this = _super.call(this, name) || this;\n        //web-based methods\n        _this._isWaitingForEnter = false;\n        _this.onCompositionUpdate = function (event) {\n            if (_this.isInputTextUpdate) {\n                setTimeout(function () {\n                    _this.updateValueOnEvent(event);\n                }, 1);\n            }\n            _this.updateRemainingCharacterCounter(event.target.value);\n        };\n        _this.onKeyUp = function (event) {\n            if (_this.isInputTextUpdate) {\n                if (!_this._isWaitingForEnter || event.keyCode === 13) {\n                    _this.updateValueOnEvent(event);\n                    _this._isWaitingForEnter = false;\n                }\n            }\n            else {\n                if (event.keyCode === 13) {\n                    _this.updateValueOnEvent(event);\n                }\n            }\n            _this.updateRemainingCharacterCounter(event.target.value);\n        };\n        _this.onKeyDown = function (event) {\n            _this.checkForUndo(event);\n            if (_this.isInputTextUpdate) {\n                _this._isWaitingForEnter = event.keyCode === 229;\n            }\n            _this.onTextKeyDownHandler(event);\n        };\n        _this.onChange = function (event) {\n            if (event.target === _settings__WEBPACK_IMPORTED_MODULE_6__[\"settings\"].environment.root.activeElement) {\n                if (_this.isInputTextUpdate) {\n                    _this.updateValueOnEvent(event);\n                }\n            }\n            else {\n                _this.updateValueOnEvent(event);\n            }\n            _this.updateRemainingCharacterCounter(event.target.value);\n        };\n        _this.onBlur = function (event) {\n            _this.updateValueOnEvent(event);\n            _this.updateRemainingCharacterCounter(event.target.value);\n        };\n        _this.onFocus = function (event) {\n            _this.updateRemainingCharacterCounter(event.target.value);\n        };\n        _this.createLocalizableString(\"minErrorText\", _this, true, \"minError\");\n        _this.createLocalizableString(\"maxErrorText\", _this, true, \"maxError\");\n        _this.locDataListValue = new _localizablestring__WEBPACK_IMPORTED_MODULE_2__[\"LocalizableStrings\"](_this);\n        _this.locDataListValue.onValueChanged = function (oldValue, newValue) {\n            _this.propertyValueChanged(\"dataList\", oldValue, newValue);\n        };\n        _this.registerPropertyChangedHandlers([\"min\", \"max\", \"inputType\", \"minValueExpression\", \"maxValueExpression\"], function () {\n            _this.setRenderedMinMax();\n        });\n        _this.registerPropertyChangedHandlers([\"inputType\", \"size\"], function () {\n            _this.updateInputSize();\n            _this.calcRenderedPlaceholder();\n        });\n        return _this;\n    }\n    QuestionTextModel.prototype.isTextValue = function () {\n        return [\"text\", \"number\", \"password\"].indexOf(this.inputType) > -1;\n    };\n    QuestionTextModel.prototype.getType = function () {\n        return \"text\";\n    };\n    QuestionTextModel.prototype.onSurveyLoad = function () {\n        _super.prototype.onSurveyLoad.call(this);\n        this.setRenderedMinMax();\n        this.updateInputSize();\n    };\n    Object.defineProperty(QuestionTextModel.prototype, \"inputType\", {\n        /**\n         * A value passed on to the [`type`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#input_types) attribute of the underlying `<input>` element.\n         */\n        get: function () {\n            return this.getPropertyValue(\"inputType\");\n        },\n        set: function (val) {\n            val = val.toLowerCase();\n            if (val === \"datetime_local\" || val === \"datetime\")\n                val = \"datetime-local\";\n            this.setPropertyValue(\"inputType\", val.toLowerCase());\n            if (!this.isLoadingFromJson) {\n                this.min = undefined;\n                this.max = undefined;\n                this.step = undefined;\n            }\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionTextModel.prototype.getMaxLength = function () {\n        if (this.inputType !== \"text\")\n            return null;\n        return _super.prototype.getMaxLength.call(this);\n    };\n    QuestionTextModel.prototype.runCondition = function (values, properties) {\n        _super.prototype.runCondition.call(this, values, properties);\n        if (!!this.minValueExpression || !!this.maxValueExpression) {\n            this.setRenderedMinMax(values, properties);\n        }\n    };\n    QuestionTextModel.prototype.isLayoutTypeSupported = function (layoutType) {\n        return true;\n    };\n    Object.defineProperty(QuestionTextModel.prototype, \"size\", {\n        /**\n         * A value passed on to the [`size`](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/size) attribute of the underlying `<input>` element.\n         */\n        get: function () {\n            return this.getPropertyValue(\"size\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"size\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionTextModel.prototype, \"isTextInput\", {\n        get: function () {\n            return ([\"text\", \"search\", \"tel\", \"url\", \"email\", \"password\"].indexOf(this.inputType) > -1);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionTextModel.prototype, \"inputSize\", {\n        get: function () {\n            return this.getPropertyValue(\"inputSize\", 0);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionTextModel.prototype, \"renderedInputSize\", {\n        get: function () {\n            return this.getPropertyValue(\"inputSize\") || null;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionTextModel.prototype, \"inputWidth\", {\n        get: function () {\n            return this.getPropertyValue(\"inputWidth\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionTextModel.prototype.updateInputSize = function () {\n        var size = this.isTextInput && this.size > 0 ? this.size : 0;\n        if (this.isTextInput &&\n            size < 1 &&\n            this.parent &&\n            !!this.parent[\"itemSize\"]) {\n            size = this.parent[\"itemSize\"];\n        }\n        this.setPropertyValue(\"inputSize\", size);\n        this.setPropertyValue(\"inputWidth\", size > 0 ? \"auto\" : \"\");\n    };\n    Object.defineProperty(QuestionTextModel.prototype, \"autocomplete\", {\n        /**\n         * A value passed on to the [`autocomplete`](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/autocomplete) attribute of the underlying `<input>` element.\n         */\n        get: function () {\n            return this.getPropertyValue(\"autocomplete\", null);\n        },\n        set: function (val) {\n            this.setPropertyValue(\"autocomplete\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionTextModel.prototype, \"min\", {\n        /**\n         * A value passed on to the [`min`](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/min) attribute of the underlying `<input>` element.\n         * @see minValueExpression\n         */\n        get: function () {\n            return this.getPropertyValue(\"min\");\n        },\n        set: function (val) {\n            if (this.isValueExpression(val)) {\n                this.minValueExpression = val.substring(1);\n                return;\n            }\n            this.setPropertyValue(\"min\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionTextModel.prototype, \"max\", {\n        /**\n         * A value passed on to the [`max`](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/max) attribute of the underlying `<input>` element.\n         * @see maxValueExpression\n         */\n        get: function () {\n            return this.getPropertyValue(\"max\");\n        },\n        set: function (val) {\n            if (this.isValueExpression(val)) {\n                this.maxValueExpression = val.substring(1);\n                return;\n            }\n            this.setPropertyValue(\"max\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionTextModel.prototype, \"minValueExpression\", {\n        /**\n         * The minimum value specified as an expression. For example, `\"minValueExpression\": \"today(-1)\"` sets the minimum value to yesterday.\n         * @see min\n         */\n        get: function () {\n            return this.getPropertyValue(\"minValueExpression\", \"\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"minValueExpression\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionTextModel.prototype, \"maxValueExpression\", {\n        /**\n         * The maximum value specified as an expression. For example, `\"maxValueExpression\": \"today(1)\"` sets the maximum value to tomorrow.\n         * @see max\n         */\n        get: function () {\n            return this.getPropertyValue(\"maxValueExpression\", \"\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"maxValueExpression\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionTextModel.prototype, \"renderedMin\", {\n        get: function () {\n            return this.getPropertyValue(\"renderedMin\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionTextModel.prototype, \"renderedMax\", {\n        get: function () {\n            return this.getPropertyValue(\"renderedMax\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionTextModel.prototype, \"minErrorText\", {\n        /**\n         * An error message to display when the question value is less than the minimum accepted value.\n         * @see min\n         * @see minValueExpression\n         */\n        get: function () {\n            return this.getLocalizableStringText(\"minErrorText\");\n        },\n        set: function (val) {\n            this.setLocalizableStringText(\"minErrorText\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionTextModel.prototype, \"locMinErrorText\", {\n        get: function () {\n            return this.getLocalizableString(\"minErrorText\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionTextModel.prototype, \"maxErrorText\", {\n        /**\n         * An error message to display when the question value exceeds the maximum accepted value.\n         * @see max\n         * @see maxValueExpression\n         */\n        get: function () {\n            return this.getLocalizableStringText(\"maxErrorText\");\n        },\n        set: function (val) {\n            this.setLocalizableStringText(\"maxErrorText\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionTextModel.prototype, \"locMaxErrorText\", {\n        get: function () {\n            return this.getLocalizableString(\"maxErrorText\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionTextModel.prototype, \"isMinMaxType\", {\n        /**\n         * Returns `true` if the specified `inputType` supports the `min` and `max` properties.\n         * @see inputType\n         * @see min\n         * @see max\n         */\n        get: function () {\n            return isMinMaxType(this);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionTextModel.prototype.onCheckForErrors = function (errors, isOnValueChanged) {\n        var _this = this;\n        _super.prototype.onCheckForErrors.call(this, errors, isOnValueChanged);\n        if (isOnValueChanged)\n            return;\n        if (this.isValueLessMin) {\n            var minError = new _error__WEBPACK_IMPORTED_MODULE_5__[\"CustomError\"](this.getMinMaxErrorText(this.minErrorText, this.getCalculatedMinMax(this.renderedMin)), this);\n            minError.onUpdateErrorTextCallback = function (err) {\n                err.text = _this.getMinMaxErrorText(_this.minErrorText, _this.getCalculatedMinMax(_this.renderedMin));\n            };\n            errors.push(minError);\n        }\n        if (this.isValueGreaterMax) {\n            var maxError = new _error__WEBPACK_IMPORTED_MODULE_5__[\"CustomError\"](this.getMinMaxErrorText(this.maxErrorText, this.getCalculatedMinMax(this.renderedMax)), this);\n            maxError.onUpdateErrorTextCallback = function (err) {\n                err.text = _this.getMinMaxErrorText(_this.maxErrorText, _this.getCalculatedMinMax(_this.renderedMax));\n            };\n            errors.push(maxError);\n        }\n        var valName = this.getValidatorTitle();\n        var emailValidator = new _validator__WEBPACK_IMPORTED_MODULE_4__[\"EmailValidator\"]();\n        if (this.inputType === \"email\" &&\n            !this.validators.some(function (v) { return v.getType() === \"emailvalidator\"; })) {\n            var validateResult = emailValidator.validate(this.value, valName);\n            if (!!validateResult && !!validateResult.error) {\n                errors.push(validateResult.error);\n            }\n        }\n    };\n    QuestionTextModel.prototype.canSetValueToSurvey = function () {\n        if (!this.isMinMaxType)\n            return true;\n        var isValid = !this.isValueLessMin && !this.isValueGreaterMax;\n        if (this.inputType === \"number\" && !!this.survey &&\n            (this.survey.isValidateOnValueChanging || this.survey.isValidateOnValueChanged)) {\n            this.hasErrors();\n        }\n        return isValid;\n    };\n    QuestionTextModel.prototype.convertFuncValuetoQuestionValue = function (val) {\n        return _helpers__WEBPACK_IMPORTED_MODULE_3__[\"Helpers\"].convertValToQuestionVal(val, this.inputType);\n    };\n    QuestionTextModel.prototype.getMinMaxErrorText = function (errorText, value) {\n        if (_helpers__WEBPACK_IMPORTED_MODULE_3__[\"Helpers\"].isValueEmpty(value))\n            return errorText;\n        var errorValue = value.toString();\n        if (this.inputType === \"date\" && !!value.toDateString) {\n            errorValue = value.toDateString();\n        }\n        return errorText.replace(\"{0}\", errorValue);\n    };\n    Object.defineProperty(QuestionTextModel.prototype, \"isValueLessMin\", {\n        get: function () {\n            return (!this.isValueEmpty(this.renderedMin) && !this.isEmpty() &&\n                this.getCalculatedMinMax(this.value) <\n                    this.getCalculatedMinMax(this.renderedMin));\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionTextModel.prototype, \"isValueGreaterMax\", {\n        get: function () {\n            return (!this.isValueEmpty(this.renderedMax) && !this.isEmpty() &&\n                this.getCalculatedMinMax(this.value) >\n                    this.getCalculatedMinMax(this.renderedMax));\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionTextModel.prototype, \"isDateInputType\", {\n        get: function () {\n            return this.inputType === \"date\" || this.inputType === \"datetime-local\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionTextModel.prototype.getCalculatedMinMax = function (minMax) {\n        if (this.isValueEmpty(minMax))\n            return minMax;\n        return this.isDateInputType ? new Date(minMax) : minMax;\n    };\n    QuestionTextModel.prototype.setRenderedMinMax = function (values, properties) {\n        var _this = this;\n        if (values === void 0) { values = null; }\n        if (properties === void 0) { properties = null; }\n        this.minValueRunner = this.getDefaultRunner(this.minValueRunner, this.minValueExpression);\n        this.setValueAndRunExpression(this.minValueRunner, this.min, function (val) {\n            if (!val && _this.isDateInputType && !!_settings__WEBPACK_IMPORTED_MODULE_6__[\"settings\"].minDate) {\n                val = _settings__WEBPACK_IMPORTED_MODULE_6__[\"settings\"].minDate;\n            }\n            _this.setPropertyValue(\"renderedMin\", val);\n        }, values, properties);\n        this.maxValueRunner = this.getDefaultRunner(this.maxValueRunner, this.maxValueExpression);\n        this.setValueAndRunExpression(this.maxValueRunner, this.max, function (val) {\n            if (!val && _this.isDateInputType) {\n                val = !!_settings__WEBPACK_IMPORTED_MODULE_6__[\"settings\"].maxDate ? _settings__WEBPACK_IMPORTED_MODULE_6__[\"settings\"].maxDate : \"2999-12-31\";\n            }\n            _this.setPropertyValue(\"renderedMax\", val);\n        }, values, properties);\n    };\n    Object.defineProperty(QuestionTextModel.prototype, \"step\", {\n        /**\n         * A value passed on to the [`step`](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/step) attribute of the underlying `<input>` element.\n         */\n        get: function () {\n            return this.getPropertyValue(\"step\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"step\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionTextModel.prototype, \"renderedStep\", {\n        get: function () {\n            if (this.isValueEmpty(this.step)) {\n                return this.inputType !== \"number\" ? undefined : \"any\";\n            }\n            return this.step;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionTextModel.prototype.supportGoNextPageAutomatic = function () {\n        return !this.isSurveyInputTextUpdate &&\n            [\"date\", \"datetime-local\"].indexOf(this.inputType) < 0;\n    };\n    QuestionTextModel.prototype.supportGoNextPageError = function () {\n        return [\"date\", \"datetime-local\"].indexOf(this.inputType) < 0;\n    };\n    Object.defineProperty(QuestionTextModel.prototype, \"dataList\", {\n        /**\n         * An array of predefined options from which users can select. This property configures an HTML [`<datalist>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/datalist) element and associates it with the underlying `input` element.\n         */\n        get: function () {\n            return this.locDataList.value;\n        },\n        set: function (val) {\n            this.locDataList.value = val;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionTextModel.prototype, \"locDataList\", {\n        get: function () {\n            return this.locDataListValue;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionTextModel.prototype, \"dataListId\", {\n        get: function () {\n            return this.locDataList.hasValue() ? this.id + \"_datalist\" : undefined;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionTextModel.prototype.canRunValidators = function (isOnValueChanged) {\n        return (this.errors.length > 0 ||\n            !isOnValueChanged ||\n            this.supportGoNextPageError());\n    };\n    QuestionTextModel.prototype.setNewValue = function (newValue) {\n        newValue = this.correctValueType(newValue);\n        _super.prototype.setNewValue.call(this, newValue);\n    };\n    QuestionTextModel.prototype.correctValueType = function (newValue) {\n        if (!newValue)\n            return newValue;\n        if (this.inputType == \"number\" || this.inputType == \"range\") {\n            return _helpers__WEBPACK_IMPORTED_MODULE_3__[\"Helpers\"].isNumber(newValue) ? _helpers__WEBPACK_IMPORTED_MODULE_3__[\"Helpers\"].getNumber(newValue) : \"\";\n        }\n        return newValue;\n    };\n    QuestionTextModel.prototype.hasPlaceholder = function () {\n        return !this.isReadOnly && this.inputType !== \"range\";\n    };\n    QuestionTextModel.prototype.isReadOnlyRenderDiv = function () {\n        return this.isReadOnly && _settings__WEBPACK_IMPORTED_MODULE_6__[\"settings\"].readOnly.textRenderMode === \"div\";\n    };\n    Object.defineProperty(QuestionTextModel.prototype, \"inputStyle\", {\n        get: function () {\n            var style = {};\n            style.width = this.inputWidth;\n            return style;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionTextModel.prototype.updateValueOnEvent = function (event) {\n        var newValue = event.target.value;\n        if (!this.isTwoValueEquals(this.value, newValue)) {\n            this.value = newValue;\n        }\n    };\n    return QuestionTextModel;\n}(_question_textbase__WEBPACK_IMPORTED_MODULE_7__[\"QuestionTextBase\"]));\n\nvar minMaxTypes = [\n    \"number\",\n    \"range\",\n    \"date\",\n    \"datetime-local\",\n    \"month\",\n    \"time\",\n    \"week\",\n];\nfunction isMinMaxType(obj) {\n    var t = !!obj ? obj.inputType : \"\";\n    if (!t)\n        return false;\n    return minMaxTypes.indexOf(t) > -1;\n}\nfunction getWeekTimeNumber(str, delimiter) {\n    var strs = str.split(delimiter);\n    if (strs.length !== 2)\n        return -1;\n    if (!_helpers__WEBPACK_IMPORTED_MODULE_3__[\"Helpers\"].isNumber(strs[0]) || !_helpers__WEBPACK_IMPORTED_MODULE_3__[\"Helpers\"].isNumber(strs[1]))\n        return -1;\n    return parseFloat(strs[0]) * 60 + parseFloat(strs[1]);\n}\nfunction isMinBiggerWeekTime(minStr, maxStr, delimiter) {\n    var min = getWeekTimeNumber(minStr, delimiter);\n    var max = getWeekTimeNumber(maxStr, delimiter);\n    if (min < 0 || max < 0)\n        return false;\n    return min > max;\n}\nfunction getCorrectMinMax(obj, min, max, isMax) {\n    var val = isMax ? max : min;\n    if (!isMinMaxType(obj))\n        return val;\n    if (_helpers__WEBPACK_IMPORTED_MODULE_3__[\"Helpers\"].isValueEmpty(min) || _helpers__WEBPACK_IMPORTED_MODULE_3__[\"Helpers\"].isValueEmpty(max))\n        return val;\n    if (obj.inputType.indexOf(\"date\") === 0 || obj.inputType === \"month\") {\n        var isMonth = obj.inputType === \"month\";\n        var dMin = new Date(isMonth ? min + \"-1\" : min);\n        var dMax = new Date(isMonth ? max + \"-1\" : max);\n        if (!dMin || !dMax)\n            return val;\n        if (dMin > dMax)\n            return isMax ? min : max;\n    }\n    if (obj.inputType === \"week\" || obj.inputType === \"time\") {\n        var delimiter = obj.inputType === \"week\" ? \"-W\" : \":\";\n        if (isMinBiggerWeekTime(min, max, delimiter))\n            return isMax ? min : max;\n        return val;\n    }\n    if (obj.inputType === \"number\") {\n        if (!_helpers__WEBPACK_IMPORTED_MODULE_3__[\"Helpers\"].isNumber(min) || !_helpers__WEBPACK_IMPORTED_MODULE_3__[\"Helpers\"].isNumber(max))\n            return val;\n        if (_helpers__WEBPACK_IMPORTED_MODULE_3__[\"Helpers\"].getNumber(min) > _helpers__WEBPACK_IMPORTED_MODULE_3__[\"Helpers\"].getNumber(max))\n            return isMax ? min : max;\n    }\n    if (typeof min === \"string\" || typeof max === \"string\")\n        return val;\n    if (min > max)\n        return isMax ? min : max;\n    return val;\n}\nfunction propertyEditorMinMaxUpdate(obj, propertyEditor) {\n    if (!!obj && !!obj.inputType) {\n        propertyEditor.inputType = obj.inputType !== \"range\" ? obj.inputType : \"number\";\n        propertyEditor.textUpdateMode = \"onBlur\";\n    }\n}\n_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].addClass(\"text\", [\n    {\n        name: \"inputType\",\n        default: \"text\",\n        choices: _settings__WEBPACK_IMPORTED_MODULE_6__[\"settings\"].questions.inputTypes,\n    },\n    {\n        name: \"size:number\",\n        minValue: 0,\n        dependsOn: \"inputType\",\n        visibleIf: function (obj) {\n            if (!obj)\n                return false;\n            return obj.isTextInput;\n        },\n    },\n    {\n        name: \"textUpdateMode\",\n        default: \"default\",\n        choices: [\"default\", \"onBlur\", \"onTyping\"],\n        dependsOn: \"inputType\",\n        visibleIf: function (obj) {\n            if (!obj)\n                return false;\n            return obj.isTextInput;\n        },\n    },\n    {\n        name: \"autocomplete\",\n        alternativeName: \"autoComplete\",\n        choices: _settings__WEBPACK_IMPORTED_MODULE_6__[\"settings\"].questions.dataList,\n    },\n    {\n        name: \"min\",\n        dependsOn: \"inputType\",\n        visibleIf: function (obj) {\n            return isMinMaxType(obj);\n        },\n        onPropertyEditorUpdate: function (obj, propertyEditor) {\n            propertyEditorMinMaxUpdate(obj, propertyEditor);\n        },\n        onSettingValue: function (obj, val) {\n            return getCorrectMinMax(obj, val, obj.max, false);\n        },\n    },\n    {\n        name: \"max\",\n        dependsOn: \"inputType\",\n        nextToProperty: \"*min\",\n        visibleIf: function (obj) {\n            return isMinMaxType(obj);\n        },\n        onSettingValue: function (obj, val) {\n            return getCorrectMinMax(obj, obj.min, val, true);\n        },\n        onPropertyEditorUpdate: function (obj, propertyEditor) {\n            propertyEditorMinMaxUpdate(obj, propertyEditor);\n        },\n    },\n    {\n        name: \"minValueExpression:expression\",\n        category: \"logic\",\n        dependsOn: \"inputType\",\n        visibleIf: function (obj) {\n            return isMinMaxType(obj);\n        },\n    },\n    {\n        name: \"maxValueExpression:expression\",\n        category: \"logic\",\n        dependsOn: \"inputType\",\n        visibleIf: function (obj) {\n            return isMinMaxType(obj);\n        },\n    },\n    {\n        name: \"minErrorText\",\n        serializationProperty: \"locMinErrorText\",\n        dependsOn: \"inputType\",\n        visibleIf: function (obj) {\n            return isMinMaxType(obj);\n        },\n    },\n    {\n        name: \"maxErrorText\",\n        serializationProperty: \"locMaxErrorText\",\n        dependsOn: \"inputType\",\n        visibleIf: function (obj) {\n            return isMinMaxType(obj);\n        },\n    },\n    {\n        name: \"step:number\",\n        dependsOn: \"inputType\",\n        visibleIf: function (obj) {\n            if (!obj)\n                return false;\n            return obj.inputType === \"number\" || obj.inputType === \"range\";\n        },\n    },\n    {\n        name: \"maxLength:number\",\n        default: -1,\n        dependsOn: \"inputType\",\n        visibleIf: function (obj) {\n            if (!obj)\n                return false;\n            return obj.isTextInput;\n        },\n    },\n    {\n        name: \"placeholder\",\n        alternativeName: \"placeHolder\",\n        serializationProperty: \"locPlaceholder\",\n        dependsOn: \"inputType\",\n        visibleIf: function (obj) {\n            if (!obj)\n                return false;\n            return obj.isTextInput;\n        },\n    },\n    {\n        name: \"dataList:string[]\",\n        serializationProperty: \"locDataList\",\n        dependsOn: \"inputType\",\n        visibleIf: function (obj) {\n            if (!obj)\n                return false;\n            return obj.inputType === \"text\";\n        },\n    },\n], function () {\n    return new QuestionTextModel(\"\");\n}, \"textbase\");\n_questionfactory__WEBPACK_IMPORTED_MODULE_0__[\"QuestionFactory\"].Instance.registerQuestion(\"text\", function (name) {\n    return new QuestionTextModel(name);\n});\n\n\n/***/ }),\n\n/***/ \"./src/question_textbase.ts\":\n/*!**********************************!*\\\n  !*** ./src/question_textbase.ts ***!\n  \\**********************************/\n/*! exports provided: CharacterCounter, QuestionTextBase */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_3532790__) {\n\n\"use strict\";\n__nested_webpack_require_3532790__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_3532790__.d(__nested_webpack_exports__, \"CharacterCounter\", function() { return CharacterCounter; });\n/* harmony export (binding) */ __nested_webpack_require_3532790__.d(__nested_webpack_exports__, \"QuestionTextBase\", function() { return QuestionTextBase; });\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_3532790__(/*! ./question */ \"./src/question.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_3532790__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_3532790__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_3532790__(/*! ./utils/cssClassBuilder */ \"./src/utils/cssClassBuilder.ts\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_3532790__(/*! ./base */ \"./src/base.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\nvar CharacterCounter = /** @class */ (function (_super) {\n    __extends(CharacterCounter, _super);\n    function CharacterCounter() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    CharacterCounter.prototype.updateRemainingCharacterCounter = function (newValue, maxLength) {\n        this.remainingCharacterCounter = _helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].getRemainingCharacterCounterText(newValue, maxLength);\n    };\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n    ], CharacterCounter.prototype, \"remainingCharacterCounter\", void 0);\n    return CharacterCounter;\n}(_base__WEBPACK_IMPORTED_MODULE_4__[\"Base\"]));\n\n/**\n * A base class for the [Single-Line Input](https://surveyjs.io/form-library/documentation/questiontextmodel) and [Long Text](https://surveyjs.io/form-library/documentation/questioncommentmodel) question types.\n */\nvar QuestionTextBase = /** @class */ (function (_super) {\n    __extends(QuestionTextBase, _super);\n    function QuestionTextBase(name) {\n        var _this = _super.call(this, name) || this;\n        _this.characterCounter = new CharacterCounter();\n        _this.disableNativeUndoRedo = false;\n        return _this;\n    }\n    QuestionTextBase.prototype.isTextValue = function () {\n        return true;\n    };\n    Object.defineProperty(QuestionTextBase.prototype, \"maxLength\", {\n        /**\n         * The maximum text length measured in characters. Assign 0 if the length should be unlimited.\n         *\n         * Default value: -1 (inherits the actual value from the `SurveyModel`'s [`maxTextLength`](https://surveyjs.io/form-library/documentation/surveymodel#maxTextLength) property).\n         */\n        get: function () {\n            return this.getPropertyValue(\"maxLength\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"maxLength\", val);\n            this.updateRemainingCharacterCounter(this.value);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionTextBase.prototype.getMaxLength = function () {\n        return _helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].getMaxLength(this.maxLength, this.survey ? this.survey.maxTextLength : -1);\n    };\n    QuestionTextBase.prototype.updateRemainingCharacterCounter = function (newValue) {\n        this.characterCounter.updateRemainingCharacterCounter(newValue, this.getMaxLength());\n    };\n    Object.defineProperty(QuestionTextBase.prototype, \"placeHolder\", {\n        get: function () { return this.placeholder; },\n        set: function (val) { this.placeholder = val; },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionTextBase.prototype, \"locPlaceHolder\", {\n        get: function () { return this.locPlaceholder; },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionTextBase.prototype.getType = function () {\n        return \"textbase\";\n    };\n    QuestionTextBase.prototype.isEmpty = function () {\n        return _super.prototype.isEmpty.call(this) || this.value === \"\";\n    };\n    Object.defineProperty(QuestionTextBase.prototype, \"textUpdateMode\", {\n        /**\n         * Specifies when to update the question value.\n         *\n         * Possible values:\n         *\n         * - `\"onBlur\"` - Updates the value after the input field loses focus.\n         * - `\"onTyping\"` - Updates the value on every key press.\n         * - `\"default\"` (default) - Inherits the value from the `SurveyModel`'s [`textUpdateMode`](https://surveyjs.io/form-library/documentation/surveymodel#textUpdateMode) property.\n         *\n         * > Do not use the `\"onTyping\"` mode if your survey contains many expressions. Expressions are reevaluated each time a question value is changed. In `\"onTyping\"` mode, the question value changes frequently. This may cause performance degradation.\n         */\n        get: function () {\n            return this.getPropertyValue(\"textUpdateMode\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"textUpdateMode\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionTextBase.prototype, \"isSurveyInputTextUpdate\", {\n        get: function () {\n            if (this.textUpdateMode == \"default\")\n                return !!this.survey ? this.survey.isUpdateValueTextOnTyping : false;\n            return this.textUpdateMode == \"onTyping\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionTextBase.prototype, \"renderedPlaceholder\", {\n        get: function () {\n            return this.getPropertyValue(\"renderedPlaceholder\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionTextBase.prototype.setRenderedPlaceholder = function (val) {\n        this.setPropertyValue(\"renderedPlaceholder\", val);\n    };\n    QuestionTextBase.prototype.onReadOnlyChanged = function () {\n        _super.prototype.onReadOnlyChanged.call(this);\n        this.calcRenderedPlaceholder();\n    };\n    QuestionTextBase.prototype.onSurveyLoad = function () {\n        this.calcRenderedPlaceholder();\n        _super.prototype.onSurveyLoad.call(this);\n    };\n    QuestionTextBase.prototype.localeChanged = function () {\n        _super.prototype.localeChanged.call(this);\n        this.calcRenderedPlaceholder();\n    };\n    QuestionTextBase.prototype.setSurveyImpl = function (value, isLight) {\n        _super.prototype.setSurveyImpl.call(this, value, isLight);\n        this.calcRenderedPlaceholder();\n    };\n    QuestionTextBase.prototype.calcRenderedPlaceholder = function () {\n        var res = this.placeHolder;\n        if (!!res && !this.hasPlaceholder()) {\n            res = undefined;\n        }\n        this.setRenderedPlaceholder(res);\n    };\n    QuestionTextBase.prototype.hasPlaceholder = function () {\n        return !this.isReadOnly;\n    };\n    QuestionTextBase.prototype.setNewValue = function (newValue) {\n        _super.prototype.setNewValue.call(this, newValue);\n        this.updateRemainingCharacterCounter(newValue);\n    };\n    QuestionTextBase.prototype.setQuestionValue = function (newValue, updateIsAnswered) {\n        if (updateIsAnswered === void 0) { updateIsAnswered = true; }\n        _super.prototype.setQuestionValue.call(this, newValue, updateIsAnswered);\n        this.updateRemainingCharacterCounter(newValue);\n    };\n    QuestionTextBase.prototype.convertToCorrectValue = function (val) {\n        if (Array.isArray(val))\n            return val.join(this.getValueSeparator());\n        return val;\n    };\n    QuestionTextBase.prototype.getValueSeparator = function () { return \", \"; };\n    QuestionTextBase.prototype.checkForUndo = function (event) {\n        if (this.disableNativeUndoRedo && this.isInputTextUpdate && (event.ctrlKey || event.metaKey)) {\n            if ([89, 90].indexOf(event.keyCode) !== -1) {\n                event.preventDefault();\n            }\n        }\n    };\n    QuestionTextBase.prototype.getControlClass = function () {\n        return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_3__[\"CssClassBuilder\"]()\n            .append(this.cssClasses.root)\n            .append(this.cssClasses.onError, this.errors.length > 0)\n            .append(this.cssClasses.controlDisabled, this.isReadOnly)\n            .toString();\n    };\n    Object.defineProperty(QuestionTextBase.prototype, \"isNewA11yStructure\", {\n        //a11y\n        get: function () {\n            return true;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ localizable: true, onSet: function (val, target) { return target.calcRenderedPlaceholder(); } })\n    ], QuestionTextBase.prototype, \"placeholder\", void 0);\n    return QuestionTextBase;\n}(_question__WEBPACK_IMPORTED_MODULE_0__[\"Question\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].addClass(\"textbase\", [], function () {\n    return new QuestionTextBase(\"\");\n}, \"question\");\n\n\n/***/ }),\n\n/***/ \"./src/questionfactory.ts\":\n/*!********************************!*\\\n  !*** ./src/questionfactory.ts ***!\n  \\********************************/\n/*! exports provided: QuestionFactory, ElementFactory */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_3543467__) {\n\n\"use strict\";\n__nested_webpack_require_3543467__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_3543467__.d(__nested_webpack_exports__, \"QuestionFactory\", function() { return QuestionFactory; });\n/* harmony export (binding) */ __nested_webpack_require_3543467__.d(__nested_webpack_exports__, \"ElementFactory\", function() { return ElementFactory; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_3543467__(/*! ./surveyStrings */ \"./src/surveyStrings.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_3543467__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n\n\nvar QuestionFactory = /** @class */ (function () {\n    function QuestionFactory() {\n    }\n    Object.defineProperty(QuestionFactory, \"DefaultChoices\", {\n        get: function () {\n            return [\n                _surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].getString(\"choices_Item\") + \"1\",\n                _surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].getString(\"choices_Item\") + \"2\",\n                _surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].getString(\"choices_Item\") + \"3\",\n            ];\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionFactory, \"DefaultColums\", {\n        get: function () {\n            var colName = _surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].getString(\"matrix_column\") + \" \";\n            return [colName + \"1\", colName + \"2\", colName + \"3\"];\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionFactory, \"DefaultRows\", {\n        get: function () {\n            var rowName = _surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].getString(\"matrix_row\") + \" \";\n            return [rowName + \"1\", rowName + \"2\"];\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionFactory, \"DefaultMutlipleTextItems\", {\n        get: function () {\n            var itemName = _surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].getString(\"multipletext_itemname\");\n            return [itemName + \"1\", itemName + \"2\"];\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionFactory.prototype.registerQuestion = function (questionType, questionCreator) {\n        ElementFactory.Instance.registerElement(questionType, questionCreator);\n    };\n    QuestionFactory.prototype.registerCustomQuestion = function (questionType) {\n        ElementFactory.Instance.registerCustomQuestion(questionType);\n    };\n    QuestionFactory.prototype.unregisterElement = function (elementType, removeFromSerializer) {\n        if (removeFromSerializer === void 0) { removeFromSerializer = false; }\n        ElementFactory.Instance.unregisterElement(elementType, removeFromSerializer);\n    };\n    QuestionFactory.prototype.clear = function () {\n        ElementFactory.Instance.clear();\n    };\n    QuestionFactory.prototype.getAllTypes = function () {\n        return ElementFactory.Instance.getAllTypes();\n    };\n    QuestionFactory.prototype.createQuestion = function (questionType, name) {\n        return ElementFactory.Instance.createElement(questionType, name);\n    };\n    QuestionFactory.Instance = new QuestionFactory();\n    return QuestionFactory;\n}());\n\nvar ElementFactory = /** @class */ (function () {\n    function ElementFactory() {\n        var _this = this;\n        this.creatorHash = {};\n        this.registerCustomQuestion = function (questionType) {\n            var creator = function (name) {\n                var el = _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].createClass(questionType);\n                if (!!el)\n                    el.name = name;\n                return el;\n            };\n            _this.registerElement(questionType, creator);\n        };\n    }\n    ElementFactory.prototype.registerElement = function (elementType, elementCreator) {\n        this.creatorHash[elementType] = elementCreator;\n    };\n    ElementFactory.prototype.clear = function () {\n        this.creatorHash = {};\n    };\n    ElementFactory.prototype.unregisterElement = function (elementType, removeFromSerializer) {\n        if (removeFromSerializer === void 0) { removeFromSerializer = false; }\n        delete this.creatorHash[elementType];\n        if (removeFromSerializer) {\n            _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].removeClass(elementType);\n        }\n    };\n    ElementFactory.prototype.getAllTypes = function () {\n        var result = new Array();\n        for (var key in this.creatorHash) {\n            result.push(key);\n        }\n        return result.sort();\n    };\n    ElementFactory.prototype.createElement = function (elementType, name) {\n        var creator = this.creatorHash[elementType];\n        if (!!creator)\n            return creator(name);\n        return null;\n    };\n    ElementFactory.Instance = new ElementFactory();\n    return ElementFactory;\n}());\n\n\n\n/***/ }),\n\n/***/ \"./src/questionnonvalue.ts\":\n/*!*********************************!*\\\n  !*** ./src/questionnonvalue.ts ***!\n  \\*********************************/\n/*! exports provided: QuestionNonValue */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_3548744__) {\n\n\"use strict\";\n__nested_webpack_require_3548744__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_3548744__.d(__nested_webpack_exports__, \"QuestionNonValue\", function() { return QuestionNonValue; });\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_3548744__(/*! ./question */ \"./src/question.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_3548744__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n\n\n/**\n * A base class for question types that cannot have a value ([Html](https://surveyjs.io/form-library/documentation/questionhtmlmodel), [Image](https://surveyjs.io/form-library/documentation/questionimagemodel)).\n *\n * This class does not implement new functionality&mdash;it only redefines default values of certain properties inherited from the [`Question`](https://surveyjs.io/form-library/documentation/question) class.\n */\nvar QuestionNonValue = /** @class */ (function (_super) {\n    __extends(QuestionNonValue, _super);\n    function QuestionNonValue(name) {\n        return _super.call(this, name) || this;\n    }\n    QuestionNonValue.prototype.getType = function () {\n        return \"nonvalue\";\n    };\n    Object.defineProperty(QuestionNonValue.prototype, \"hasInput\", {\n        get: function () {\n            return false;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionNonValue.prototype, \"hasTitle\", {\n        get: function () {\n            return false;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionNonValue.prototype.getTitleLocation = function () {\n        return \"\";\n    };\n    Object.defineProperty(QuestionNonValue.prototype, \"hasComment\", {\n        get: function () {\n            return false;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionNonValue.prototype.hasErrors = function (fireCallback, rec) {\n        if (fireCallback === void 0) { fireCallback = true; }\n        if (rec === void 0) { rec = null; }\n        return false;\n    };\n    QuestionNonValue.prototype.getAllErrors = function () {\n        return [];\n    };\n    QuestionNonValue.prototype.supportGoNextPageAutomatic = function () {\n        return false;\n    };\n    QuestionNonValue.prototype.addConditionObjectsByContext = function (objects, context) { };\n    QuestionNonValue.prototype.getConditionJson = function (operator, path) {\n        if (operator === void 0) { operator = null; }\n        if (path === void 0) { path = null; }\n        return null;\n    };\n    return QuestionNonValue;\n}(_question__WEBPACK_IMPORTED_MODULE_0__[\"Question\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].addClass(\"nonvalue\", [\n    { name: \"title\", visible: false },\n    { name: \"description\", visible: false },\n    { name: \"valueName\", visible: false },\n    { name: \"enableIf\", visible: false },\n    { name: \"defaultValue\", visible: false },\n    { name: \"correctAnswer\", visible: false },\n    { name: \"clearIfInvisible\", visible: false },\n    { name: \"isRequired\", visible: false, isSerializable: false },\n    { name: \"requiredErrorText\", visible: false },\n    { name: \"readOnly\", visible: false },\n    { name: \"requiredIf\", visible: false },\n    { name: \"validators\", visible: false },\n    { name: \"titleLocation\", visible: false },\n    { name: \"showCommentArea\", visible: false },\n    { name: \"useDisplayValuesInDynamicTexts\", alternativeName: \"useDisplayValuesInTitle\", visible: false },\n], function () {\n    return new QuestionNonValue(\"\");\n}, \"question\");\n\n\n/***/ }),\n\n/***/ \"./src/rendererFactory.ts\":\n/*!********************************!*\\\n  !*** ./src/rendererFactory.ts ***!\n  \\********************************/\n/*! exports provided: RendererFactory */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_3553323__) {\n\n\"use strict\";\n__nested_webpack_require_3553323__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_3553323__.d(__nested_webpack_exports__, \"RendererFactory\", function() { return RendererFactory; });\nvar RendererFactory = /** @class */ (function () {\n    function RendererFactory() {\n        this.renderersHash = {};\n    }\n    RendererFactory.prototype.unregisterRenderer = function (questionType, rendererAs) {\n        delete this.renderersHash[questionType][rendererAs];\n    };\n    RendererFactory.prototype.registerRenderer = function (questionType, renderAs, renderer) {\n        if (!this.renderersHash[questionType]) {\n            this.renderersHash[questionType] = {};\n        }\n        this.renderersHash[questionType][renderAs] = renderer;\n    };\n    RendererFactory.prototype.getRenderer = function (questionType, renderAs) {\n        return ((this.renderersHash[questionType] &&\n            this.renderersHash[questionType][renderAs]) ||\n            \"default\");\n    };\n    RendererFactory.prototype.getRendererByQuestion = function (question) {\n        return this.getRenderer(question.getType(), question.renderAs);\n    };\n    RendererFactory.prototype.clear = function () {\n        this.renderersHash = {};\n    };\n    RendererFactory.Instance = new RendererFactory();\n    return RendererFactory;\n}());\n\n\n\n/***/ }),\n\n/***/ \"./src/settings.ts\":\n/*!*************************!*\\\n  !*** ./src/settings.ts ***!\n  \\*************************/\n/*! exports provided: settings */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_3554864__) {\n\n\"use strict\";\n__nested_webpack_require_3554864__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_3554864__.d(__nested_webpack_exports__, \"settings\", function() { return settings; });\nvar document = globalThis.document;\nvar defaultEnvironment = (!!document ? {\n    root: document,\n    _rootElement: document.body,\n    get rootElement() {\n        var _a;\n        return (_a = this._rootElement) !== null && _a !== void 0 ? _a : document.body;\n    },\n    set rootElement(rootElement) {\n        this._rootElement = rootElement;\n    },\n    _popupMountContainer: document.body,\n    get popupMountContainer() {\n        var _a;\n        return (_a = this._popupMountContainer) !== null && _a !== void 0 ? _a : document.body;\n    },\n    set popupMountContainer(popupMountContainer) {\n        this._popupMountContainer = popupMountContainer;\n    },\n    svgMountContainer: document.head,\n    stylesSheetsMountContainer: document.head,\n} : undefined);\nvar columnWidthsByType = {\n    \"file\": { minWidth: \"240px\" },\n    \"comment\": { minWidth: \"200px\" }\n};\n/**\n * Global settings that apply to all surveys on the page. To specify one of the settings, use the code below:\n *\n * ```js\n * import { settings } from \"survey-core\";\n *\n * settings.settingName = \"value\";\n * ```\n */\nvar settings = {\n    /**\n     * An object that configures survey appearance when the survey is being designed in Survey Creator.\n     *\n     * Nested properties:\n     *\n     * - `showEmptyDescriptions`: `Boolean`\\\n     * Specifies whether to display an empty description for pages and panels. Default value: `true`.\n     *\n     * - `showEmptyTitles`: `Boolean`\\\n     * Specifies whether to display an empty title for pages and panels. Default value: `true`.\n     */\n    designMode: {\n        showEmptyDescriptions: true,\n        showEmptyTitles: true\n    },\n    //#region designMode section, Obsolete properties\n    /**\n     * This property is obsolete. Use the [`settings.designMode.showEmptyDescriptions`](https://surveyjs.io/form-library/documentation/api-reference/settings#designMode) property instead.\n     */\n    get allowShowEmptyDescriptionInDesignMode() { return this.designMode.showEmptyDescriptions; },\n    set allowShowEmptyDescriptionInDesignMode(val) { this.designMode.showEmptyDescriptions = val; },\n    /**\n     * This property is obsolete. Use the [`settings.designMode.showEmptyTitles`](https://surveyjs.io/form-library/documentation/api-reference/settings#designMode) property instead.\n     */\n    get allowShowEmptyTitleInDesignMode() { return this.designMode.showEmptyTitles; },\n    set allowShowEmptyTitleInDesignMode(val) { this.designMode.showEmptyTitles = val; },\n    //#endregion\n    /**\n     * An object that contains properties related to localization.\n     *\n     * Nested properties:\n     *\n     * - `useLocalTimeZone`: `Boolean`\\\n     * Disable this property if you want internal SurveyJS functions to use methods that work with UTC date and time (`setUTCDate()` `setUTCHours()`, etc.) instead of methods that work with local date and time (`setYear`, `setHours()`, etc.). Default value: `true`.\n     *\n     * - `defaultLocaleName`: `String`\\\n     * A property key that stores a translation for the default locale. Default value: `\"default\"`.\n     *\n     * - `storeDuplicatedTranslations`: `Boolean`\\\n     * Specifies whether surveys should store translation strings that equal the translation strings in the default locale. Default value: `false`.\n     */\n    localization: {\n        useLocalTimeZone: true,\n        storeDuplicatedTranslations: false,\n        defaultLocaleName: \"default\"\n    },\n    //#region localization section, obsolete properties\n    /**\n     * This property is obsolete. Use the [`settings.localization.useLocalTimeZone`](https://surveyjs.io/form-library/documentation/api-reference/settings#localization) property instead.\n     */\n    get useLocalTimeZone() { return this.localization.useLocalTimeZone; },\n    set useLocalTimeZone(val) { this.localization.useLocalTimeZone = val; },\n    /**\n     * This property is obsolete. Use the [`settings.localization.storeDuplicatedTranslations`](https://surveyjs.io/form-library/documentation/api-reference/settings#localization) property instead.\n     */\n    get storeDuplicatedTranslations() { return this.localization.storeDuplicatedTranslations; },\n    set storeDuplicatedTranslations(val) { this.localization.storeDuplicatedTranslations = val; },\n    /**\n     * This property is obsolete. Use the [`settings.localization.defaultLocaleName`](https://surveyjs.io/form-library/documentation/api-reference/settings#localization) property instead.\n     */\n    get defaultLocaleName() { return this.localization.defaultLocaleName; },\n    set defaultLocaleName(val) { this.localization.defaultLocaleName = val; },\n    //#endregion\n    /**\n     * An object with properties that configure surveys when they work with a web service.\n     *\n     * Nested properties:\n     *\n     * - `encodeUrlParams`: `Boolean`\\\n     * Specifies whether to encode URL parameters when you access a web service. Default value: `true`.\n     *\n     * - `cacheLoadedChoices`: `Boolean`\\\n     * Specifies whether to cache [choices](https://surveyjs.io/form-library/documentation/api-reference/checkbox-question-model#choicesByUrl) loaded from a web service. Default value: `true`.\n     *\n     * - `disableQuestionWhileLoadingChoices`: `Boolean`\\\n     * Disables a question while its choices are being loaded from a web service. Default value: `false`.\n     *\n     * - `surveyServiceUrl`: `String`\\\n     * The URL of the SurveyJS Service API endpoint.\n     */\n    web: {\n        encodeUrlParams: true,\n        cacheLoadedChoices: true,\n        disableQuestionWhileLoadingChoices: false,\n        surveyServiceUrl: \"https://api.surveyjs.io/public/v1/Survey\"\n    },\n    //#region web section, obsolete properties\n    /**\n     * This property is obsolete. Use the [`settings.web.encodeUrlParams`](https://surveyjs.io/form-library/documentation/api-reference/settings#web) property instead.\n     */\n    get webserviceEncodeParameters() { return this.web.encodeUrlParams; },\n    set webserviceEncodeParameters(val) { this.web.encodeUrlParams = val; },\n    /**\n     * This property is obsolete. Use the [`settings.web.cacheLoadedChoices`](https://surveyjs.io/form-library/documentation/api-reference/settings#web) property instead.\n     */\n    get useCachingForChoicesRestful() { return this.web.cacheLoadedChoices; },\n    set useCachingForChoicesRestful(val) { this.web.cacheLoadedChoices = val; },\n    get useCachingForChoicesRestfull() { return this.web.cacheLoadedChoices; },\n    set useCachingForChoicesRestfull(val) { this.web.cacheLoadedChoices = val; },\n    /**\n     * This property is obsolete. Use the [`settings.web.disableQuestionWhileLoadingChoices`](https://surveyjs.io/form-library/documentation/api-reference/settings#web) property instead.\n     */\n    get disableOnGettingChoicesFromWeb() { return this.web.disableQuestionWhileLoadingChoices; },\n    set disableOnGettingChoicesFromWeb(val) { this.web.disableQuestionWhileLoadingChoices = val; },\n    /**\n     * This property is obsolete. Use the [`settings.web.surveyServiceUrl`](https://surveyjs.io/form-library/documentation/api-reference/settings#web) property instead.\n     */\n    get surveyServiceUrl() { return this.web.surveyServiceUrl; },\n    set surveyServiceUrl(val) { this.web.surveyServiceUrl = val; },\n    //#endregion\n    /**\n     * An object that contains properties related to [triggers](https://surveyjs.io/form-library/documentation/design-survey/conditional-logic#conditional-survey-logic-triggers).\n     *\n     * Nested properties:\n     *\n     * - `changeNavigationButtonsOnComplete`: `Boolean`\\\n     * Specifies whether to re-evaluate an expression associated with the [Complete trigger](https://surveyjs.io/form-library/documentation/design-survey/conditional-logic#complete) immediately when a question value changes. If the expression evaluates to `true`, the trigger is executed. Default value: `false`.\\\n     * Keep this property set to `false` if you want to re-evaluate the Complete trigger's expression only when the respondents navigate to another page.\n     *\n     * - `executeCompleteOnValueChanged`: `Boolean`\\\n     * Specifies whether to replace the Next button with the Complete button when the [Complete trigger](https://surveyjs.io/form-library/documentation/design-survey/conditional-logic#complete) is going to be executed. Default value: `true`.\n     *\n     * - `executeSkipOnValueChanged`: `Boolean`\\\n     * Specifies whether to re-evaluate an expression associated with the [Skip trigger](https://surveyjs.io/form-library/documentation/design-survey/conditional-logic#skip) immediately when a question value changes. If the expression evaluates to `true`, the trigger is executed. Default value: `true`.\\\n     * Disable this property if you want to re-evaluate the Skip trigger's expression only when respondents navigate to another page.\n     */\n    triggers: {\n        changeNavigationButtonsOnComplete: true,\n        executeCompleteOnValueChanged: false,\n        executeSkipOnValueChanged: true\n    },\n    //#region triggers section, Obsolete properties\n    /**\n     * This property is obsolete. Use the [`settings.triggers.executeCompleteOnValueChanged`](https://surveyjs.io/form-library/documentation/api-reference/settings#triggers) property instead.\n     */\n    get executeCompleteTriggerOnValueChanged() { return this.triggers.executeCompleteOnValueChanged; },\n    set executeCompleteTriggerOnValueChanged(val) { this.triggers.executeCompleteOnValueChanged = val; },\n    /**\n     * This property is obsolete. Use the [`settings.triggers.changeNavigationButtonsOnComplete`](https://surveyjs.io/form-library/documentation/api-reference/settings#triggers) property instead.\n     */\n    get changeNavigationButtonsOnCompleteTrigger() { return this.triggers.changeNavigationButtonsOnComplete; },\n    set changeNavigationButtonsOnCompleteTrigger(val) { this.triggers.changeNavigationButtonsOnComplete = val; },\n    /**\n     * This property is obsolete. Use the [`settings.triggers.executeSkipOnValueChanged`](https://surveyjs.io/form-library/documentation/api-reference/settings#triggers) property instead.\n     */\n    get executeSkipTriggerOnValueChanged() { return this.triggers.executeSkipOnValueChanged; },\n    set executeSkipTriggerOnValueChanged(val) { this.triggers.executeSkipOnValueChanged = val; },\n    //#endregion\n    /**\n     * An object that contains properties related to JSON serialization.\n     *\n     * Nested properties:\n     *\n     * - `itemValueSerializeAsObject`: `Boolean`\\\n     * Enable this property if you want to serialize [`ItemValue`](https://surveyjs.io/form-library/documentation/api-reference/itemvalue) instances as objects even when they include only the `value` property. Default value: `false`. View an example below.\n     *\n     * - `itemValueSerializeDisplayText`: `Boolean`\\\n     * Enable this property if you want to serialize the `text` property of [`ItemValue`](https://surveyjs.io/form-library/documentation/api-reference/itemvalue) objects even when it is empty or equal to the `value` property. Default value: `false`. View an example below.\n     *\n     * - `localizableStringSerializeAsObject`: `Boolean`\\\n     * Enable this property if you want to serialize [`LocalizableString`](https://surveyjs.io/form-library/documentation/api-reference/localizablestring) instances as objects even when they include only a translation string for the default locale. For example, `\"Custom String\"` will be serialized as `{ default: \"Custom String\" }`. Default value: `false`.\n     *\n     * ```js\n     * import { ItemValue, settings } from \"survey-core\";\n     *\n     * // `itemValueSerializeAsObject` example\n     * settings.localization.itemValueSerializeAsObject = true;\n     * const item = new ItemValue(5);\n     * const itemString = item.toJSON(); // Produces { value: 5 } instead of 5\n     *\n     * // `itemValueSerializeDisplayText` example\n     * settings.localization.itemValueSerializeDisplayText = true;\n     * const item = new ItemValue(\"item1\");\n     * const itemString = item.toJSON(); // Produces { value: \"item1\", text: \"item1\" } instead of \"item1\"\n     * ```\n     */\n    serialization: {\n        itemValueSerializeAsObject: false,\n        itemValueSerializeDisplayText: false,\n        localizableStringSerializeAsObject: false\n    },\n    //#region serialization section, Obsolete properties\n    /**\n     * This property is obsolete. Use the [`settings.serialization.itemValueSerializeAsObject`](https://surveyjs.io/form-library/documentation/api-reference/settings#serialization) property instead.\n     */\n    get itemValueAlwaysSerializeAsObject() { return this.serialization.itemValueSerializeAsObject; },\n    set itemValueAlwaysSerializeAsObject(val) { this.serialization.itemValueSerializeAsObject = val; },\n    /**\n     * This property is obsolete. Use the [`settings.serialization.itemValueSerializeDisplayText`](https://surveyjs.io/form-library/documentation/api-reference/settings#serialization) property instead.\n     */\n    get itemValueAlwaysSerializeText() { return this.serialization.itemValueSerializeDisplayText; },\n    set itemValueAlwaysSerializeText(val) { this.serialization.itemValueSerializeDisplayText = val; },\n    /**\n     * This property is obsolete. Use the [`settings.serialization.localizableStringSerializeAsObject`](https://surveyjs.io/form-library/documentation/api-reference/settings#serialization) property instead.\n     */\n    get serializeLocalizableStringAsObject() { return this.serialization.localizableStringSerializeAsObject; },\n    set serializeLocalizableStringAsObject(val) { this.serialization.localizableStringSerializeAsObject = val; },\n    //#endregion\n    /**\n     * An object that configures lazy rendering.\n     *\n     * Nested properties:\n     *\n     * - `enabled`: `Boolean`\\\n     * Specifies whether to add questions to the DOM only when they get into the viewport. Default value: `false`.\n     *\n     * > Lazy rendering is an experimental feature that may not work as expected in all use cases.\n     */\n    lazyRender: {\n        enabled: false,\n        firstBatchSize: 3\n    },\n    //#region lazyRender section, Obsolete properties\n    /**\n     * This property is obsolete. Use the [`settings.lazyRender.enabled`](https://surveyjs.io/form-library/documentation/api-reference/settings#lazyRender) property instead.\n     */\n    get lazyRowsRendering() { return this.lazyRender.enabled; },\n    set lazyRowsRendering(val) { this.lazyRender.enabled = val; },\n    get lazyRowsRenderingStartRow() { return this.lazyRender.firstBatchSize; },\n    set lazyRowsRenderingStartRow(val) { this.lazyRender.firstBatchSize = val; },\n    //#endregion\n    /**\n     * An object with properties that apply to [Single-Choice](https://surveyjs.io/form-library/documentation/api-reference/matrix-table-question-model), [Multiple-Choice](https://surveyjs.io/form-library/documentation/api-reference/matrix-table-with-dropdown-list), and [Dynamic Matrix](https://surveyjs.io/form-library/documentation/api-reference/dynamic-matrix-table-question-model) questions.\n     *\n     * Nested properties:\n     *\n     * - `defaultRowName`: `String`\\\n     * A property key that stores an object with default cell values. Default value: \"default\".\n     *\n     * - `defaultCellType`: `String`\\\n     * The default type of matrix cells. Default value: `\"dropdown\"`.\\\n     * You can specify this setting for individual questions or matrix columns: [`cellType`](https://surveyjs.io/form-library/documentation/api-reference/dynamic-matrix-table-question-model#cellType). Refer to the `cellType` property description for information on possible values.\n     *\n     * - `totalsSuffix`: `String`\\\n     * A suffix added to the name of the property that stores total values. The resulting property name consists of the matrix name and the suffix. Default value: `\"-total\"`.\n     *\n     * - `maxRowCount`: `Number`\\\n     * A maximum number of rows in a Dynamic Matrix. Default value: 1000.\\\n     * You can specify this setting for an individual Dynamic Matrix: [`maxRowCount`](https://surveyjs.io/form-library/documentation/api-reference/dynamic-matrix-table-question-model#maxRowCount).\n     *\n     * - `maxRowCountInCondition`: `Number`\\\n     * A maximum number of matrix rows included in the Condition drop-down menu in Survey Creator. This menu is used to configure conditional survey logic. Default value: 1.\\\n     * If you set this property to 0, the Condition menu does not include any matrix rows. Users still can specify conditions that use matrix rows but only with Manual Entry.\n     *\n     * - `renderRemoveAsIcon`: `Boolean`\\\n     * Disable this property if you want to render the Remove action in Dynamic Matrix as a button. Otherwise, the action is rendered as an icon. Default value: `true`.\n     *\n     * - `columnWidthsByType`: `Object`\\\n     * An object that specifies fixed and minimum column width based on the column type.\\\n     * Example: `settings.matrix.columnWidthsByType = { \"tagbox\": { minWidth: \"240px\", width: \"300px\" } }`\n     *\n     * - `rateSize`: `\"small\"` (default) | `\"normal\"`\\\n     * Specifies the size of rate values. Applies to [Rating Scale](https://surveyjs.io/form-library/examples/rating-scale/) questions within matrixes.\n     */\n    matrix: {\n        defaultCellType: \"dropdown\",\n        defaultRowName: \"default\",\n        totalsSuffix: \"-total\",\n        maxRowCount: 1000,\n        maxRowCountInCondition: 1,\n        renderRemoveAsIcon: true,\n        columnWidthsByType: columnWidthsByType,\n        rateSize: \"small\",\n    },\n    //#region matrix section, Obsolete properties\n    /**\n     * This property is obsolete. Use the [`settings.matrix.defaultRowName`](https://surveyjs.io/form-library/documentation/api-reference/settings#matrix) property instead.\n     */\n    get matrixDefaultRowName() { return this.matrix.defaultRowName; },\n    set matrixDefaultRowName(val) { this.matrix.defaultRowName = val; },\n    /**\n     * This property is obsolete. Use the [`settings.matrix.defaultCellType`](https://surveyjs.io/form-library/documentation/api-reference/settings#matrix) property instead.\n     */\n    get matrixDefaultCellType() { return this.matrix.defaultCellType; },\n    set matrixDefaultCellType(val) { this.matrix.defaultCellType = val; },\n    /**\n     * This property is obsolete. Use the [`settings.matrix.totalsSuffix`](https://surveyjs.io/form-library/documentation/api-reference/settings#matrix) property instead.\n     */\n    get matrixTotalValuePostFix() { return this.matrix.totalsSuffix; },\n    set matrixTotalValuePostFix(val) { this.matrix.totalsSuffix = val; },\n    /**\n     * This property is obsolete. Use the [`settings.matrix.maxRowCount`](https://surveyjs.io/form-library/documentation/api-reference/settings#matrix) property instead.\n     */\n    get matrixMaximumRowCount() { return this.matrix.maxRowCount; },\n    set matrixMaximumRowCount(val) { this.matrix.maxRowCount = val; },\n    /**\n     * This property is obsolete. Use the [`settings.matrix.maxRowCountInCondition`](https://surveyjs.io/form-library/documentation/api-reference/settings#matrix) property instead.\n     */\n    get matrixMaxRowCountInCondition() { return this.matrix.maxRowCountInCondition; },\n    set matrixMaxRowCountInCondition(val) { this.matrix.maxRowCountInCondition = val; },\n    /**\n     * This property is obsolete. Use the [`settings.matrix.renderRemoveAsIcon`](https://surveyjs.io/form-library/documentation/api-reference/settings#matrix) property instead.\n     */\n    get matrixRenderRemoveAsIcon() { return this.matrix.renderRemoveAsIcon; },\n    set matrixRenderRemoveAsIcon(val) { this.matrix.renderRemoveAsIcon = val; },\n    //#endregion\n    /**\n     * An object with properties that apply to [Dynamic Panel](https://surveyjs.io/form-library/documentation/api-reference/dynamic-panel-model) questions.\n     *\n     * Nested properties:\n     *\n     * - `maxPanelCount`: `Number`\\\n     * A maximum number of panels in Dynamic Panel. Default value: 100.\\\n     * You can specify this setting for an individual Dynamic Panel: [`maxPanelCount`](https://surveyjs.io/form-library/documentation/api-reference/dynamic-panel-model#maxPanelCount).\n     *\n     * - `maxPanelCountInCondition`: `Number`\\\n     * A maximum number of Dynamic Panel panels included in the Condition drop-down menu in Survey Creator. This menu is used to configure conditional survey logic. Default value: 1.\\\n     * If you set this property to 0, the Condition menu does not include any panel questions. Users still can specify conditions that use panel questions but only with Manual Entry.\n     */\n    panel: {\n        maxPanelCount: 100,\n        maxPanelCountInCondition: 1\n    },\n    //#region panel section, Obsolete properties\n    /**\n     * This property is obsolete. Use the [`settings.panel.maxPanelCountInCondition`](https://surveyjs.io/form-library/documentation/api-reference/settings#panel) property instead.\n     */\n    get panelDynamicMaxPanelCountInCondition() { return this.panel.maxPanelCountInCondition; },\n    set panelDynamicMaxPanelCountInCondition(val) { this.panel.maxPanelCountInCondition = val; },\n    /**\n     * This property is obsolete. Use the [`settings.panel.maxPanelCount`](https://surveyjs.io/form-library/documentation/api-reference/settings#panel) property instead.\n     */\n    get panelMaximumPanelCount() { return this.panel.maxPanelCount; },\n    set panelMaximumPanelCount(val) { this.panel.maxPanelCount = val; },\n    //#endregion\n    /**\n     * An object with properties that configure questions in read-only mode.\n     *\n     * Nested properties:\n     *\n     * - `commentRenderMode`: `\"textarea\"` (default) | `\"div\"`\\\n     * Specifies how to render the input field of [Comment](https://surveyjs.io/form-library/documentation/api-reference/comment-field-model) questions in [read-only](https://surveyjs.io/form-library/documentation/api-reference/comment-field-model#readOnly) mode: as a disabled `<textarea>` element or as a `<div>` element with a non-editable question value within it.\n     *\n     * - `textRenderMode`: `\"input\"` (default) | `\"div\"`\\\n     * Specifies how to render the input field of [Text](https://surveyjs.io/form-library/documentation/api-reference/text-entry-question-model) questions in [read-only](https://surveyjs.io/form-library/documentation/api-reference/text-entry-question-model#readOnly) mode: as a disabled `<input>` element or as a `<div>` element with a non-editable question value within it.\n     */\n    readOnly: {\n        enableValidation: false,\n        commentRenderMode: \"textarea\",\n        textRenderMode: \"input\"\n    },\n    //#region readOnly section, Obsolete properties\n    /**\n     * This property is obsolete. Use the [`settings.readOnly.commentRenderMode`](https://surveyjs.io/form-library/documentation/api-reference/settings#readOnly) property instead.\n     */\n    get readOnlyCommentRenderMode() { return this.readOnly.commentRenderMode; },\n    set readOnlyCommentRenderMode(val) { this.readOnly.commentRenderMode = val; },\n    /**\n     * This property is obsolete. Use the [`settings.readOnly.textRenderMode`](https://surveyjs.io/form-library/documentation/api-reference/settings#readOnly) property instead.\n     */\n    get readOnlyTextRenderMode() { return this.readOnly.textRenderMode; },\n    set readOnlyTextRenderMode(val) { this.readOnly.textRenderMode = val; },\n    //#endregion\n    /**\n     * An object with properties that configure question numbering.\n     *\n     * Nested properties:\n     *\n     * - `includeQuestionsWithHiddenNumber`: `Boolean`\\\n     * Specifies whether to number questions whose [`hideNumber`](https://surveyjs.io/form-library/documentation/api-reference/question#hideNumber) property is enabled. Default value: `false`.\n     *\n     * - `includeQuestionsWithHiddenTitle`: `Boolean`\\\n     * Specifies whether to number questions whose [`titleLocation`](https://surveyjs.io/form-library/documentation/api-reference/question#titleLocation) property is set to `\"hidden\"`. Default value: `false`.\n     */\n    numbering: {\n        includeQuestionsWithHiddenNumber: false,\n        includeQuestionsWithHiddenTitle: false\n    },\n    //#region numbering section, Obsolete properties\n    /**\n     * This property is obsolete. Use the [`settings.numbering.includeQuestionsWithHiddenTitle`](https://surveyjs.io/form-library/documentation/api-reference/settings#numbering) property instead.\n     */\n    get setQuestionVisibleIndexForHiddenTitle() { return this.numbering.includeQuestionsWithHiddenTitle; },\n    set setQuestionVisibleIndexForHiddenTitle(val) { this.numbering.includeQuestionsWithHiddenTitle = val; },\n    /**\n     * This property is obsolete. Use the [`settings.numbering.includeQuestionsWithHiddenNumber`](https://surveyjs.io/form-library/documentation/api-reference/settings#numbering) property instead.\n     */\n    get setQuestionVisibleIndexForHiddenNumber() { return this.numbering.includeQuestionsWithHiddenNumber; },\n    set setQuestionVisibleIndexForHiddenNumber(val) { this.numbering.includeQuestionsWithHiddenNumber = val; },\n    //#endregion\n    /**\n     * Specifies an action to perform when users press the Enter key within a survey.\n     *\n     * Possible values:\n     *\n     * - `\"moveToNextEditor\"` - Moves focus to the next editor.\n     * - `\"loseFocus\"` - Removes focus from the current editor.\n     * - `\"default\"` - Behaves as a standard `<input>` element.\n     */\n    enterKeyAction: \"default\",\n    /**\n     * An object that configures string comparison.\n     *\n     * Nested properties:\n     *\n     * - `trimStrings`: `Boolean`\\\n     * Specifies whether to remove whitespace from both ends of a string before the comparison. Default value: `true`.\n     *\n     * - `caseSensitive`: `Boolean`\\\n     * Specifies whether to differentiate between capital and lower-case letters. Default value: `false`.\n     */\n    comparator: {\n        trimStrings: true,\n        caseSensitive: false,\n        normalizeTextCallback: function (str, reason) { return str; }\n    },\n    expressionDisableConversionChar: \"#\",\n    get commentPrefix() { return settings.commentSuffix; },\n    set commentPrefix(val) { settings.commentSuffix = val; },\n    /**\n     * A suffix added to the name of the property that stores comments.\n     *\n     * Default value: \"-Comment\"\n     *\n     * You can specify this setting for an individual survey: [`commentSuffix`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#commentSuffix).\n     */\n    commentSuffix: \"-Comment\",\n    /**\n     * A separator used in a shorthand notation that specifies a value and display text for an [`ItemValue`](https://surveyjs.io/form-library/documentation/api-reference/itemvalue) object: `\"value|text\"`.\n     *\n     * Default value: `\"|\"`\n     */\n    itemValueSeparator: \"|\",\n    /**\n     * A maximum number of rate values in a [Rating](https://surveyjs.io/form-library/documentation/api-reference/rating-scale-question-model) question.\n     *\n     * Default value: 20\n     */\n    ratingMaximumRateValueCount: 20,\n    /**\n     * Specifies whether to close the drop-down menu of a [TagBox](https://surveyjs.io/form-library/examples/how-to-create-multiselect-tag-box/) question after a user selects a value.\n     *\n     * This setting applies to all TagBox questions on a page. You can use the [closeOnSelect](https://surveyjs.io/form-library/documentation/api-reference/dropdown-tag-box-model#closeOnSelect) property to specify the same setting for an individual TagBox question.\n     */\n    tagboxCloseOnSelect: false,\n    /**\n     * A property that allows you to display a custom confirm dialog instead of the standard browser dialog.\n     *\n     * Set this property to a function that renders your custom dialog window. This function should return `true` if a user confirms an action or `false` otherwise.\n     * @param message A message to be displayed in the confirm dialog window.\n     */\n    confirmActionFunc: function (message) {\n        return confirm(message);\n    },\n    /**\n     * A property that allows you to display a custom confirm dialog instead of the standard browser dialog in async mode.\n     *\n     * Set this property to a function that renders your custom dialog window. This function should return `true` to be enabled; otherwise, a survey executes the [`confirmActionFunc`](#confirmActionFunc) function. Pass the dialog result as the `callback` parameter: `true` if a user confirms an action, `false` otherwise.\n     * @param message A message to be displayed in the confirm dialog window.\n     * @param callback A callback function that should be called with `true` if a user confirms an action or `false` otherwise.\n     */\n    confirmActionAsync: function (message, callback) {\n        return false;\n    },\n    /**\n     * A minimum width value for all survey elements.\n     *\n     * Default value: `\"300px\"`\n     *\n     * You can override this setting for individual elements: [`minWidth`](https://surveyjs.io/form-library/documentation/api-reference/surveyelement#minWidth).\n     */\n    minWidth: \"300px\",\n    /**\n     * A maximum width value for all survey elements.\n     *\n     * Default value: `\"100%\"`\n     *\n     * You can override this setting for individual elements: [`maxWidth`](https://surveyjs.io/form-library/documentation/api-reference/surveyelement#maxWidth).\n     */\n    maxWidth: \"100%\",\n    /**\n     * Specifies how many times surveys can re-evaluate expressions when a question value changes. This limit helps avoid recursions in expressions.\n     *\n     * Default value: 10\n     */\n    maxConditionRunCountOnValueChanged: 10,\n    /**\n     * An object that configures notifications.\n     *\n     * Nested properties:\n     *\n     * - `lifetime`: `Number`\\\n     * Specifies a time period during which a notification is displayed; measured in milliseconds.\n     */\n    notifications: {\n        lifetime: 2000\n    },\n    /**\n     * Specifies the direction in which to lay out Checkbox and Radiogroup items. This setting affects the resulting UI when items are arranged in [more than one column](https://surveyjs.io/form-library/documentation/api-reference/checkbox-question-model#colCount).\n     *\n     * Possible values:\n     *\n     * - `\"row\"` (default) - Items fill the current row, then move on to the next row.\n     * - `\"column\"` - Items fill the current column, then move on to the next column.\n     */\n    showItemsInOrder: \"default\",\n    /**\n     * A value to save in survey results when respondents select the None choice item.\n     *\n     * Default value: `\"none\"`\n     */\n    noneItemValue: \"none\",\n    /**\n     * A list of supported validators by question type.\n     */\n    supportedValidators: {\n        question: [\"expression\"],\n        comment: [\"text\", \"regex\"],\n        text: [\"numeric\", \"text\", \"regex\", \"email\"],\n        checkbox: [\"answercount\"],\n        imagepicker: [\"answercount\"],\n    },\n    /**\n     * Specifies a minimum date that users can enter into a [Text](https://surveyjs.io/form-library/documentation/api-reference/text-entry-question-model) question with [`inputType`](https://surveyjs.io/form-library/documentation/api-reference/text-entry-question-model#inputType) set to `\"date\"` or `\"datetime-local\"`. Set this property to a string with the folllowing format: `\"yyyy-mm-dd\"`.\n     */\n    minDate: \"\",\n    /**\n     * Specifies a maximum date that users can enter into a [Text](https://surveyjs.io/form-library/documentation/api-reference/text-entry-question-model) question with [`inputType`](https://surveyjs.io/form-library/documentation/api-reference/text-entry-question-model#inputType) set to `\"date\"` or `\"datetime-local\"`. Set this property to a string with the folllowing format: `\"yyyy-mm-dd\"`.\n     */\n    maxDate: \"\",\n    showModal: undefined,\n    showDialog: undefined,\n    supportCreatorV2: false,\n    showDefaultItemsInCreatorV2: true,\n    /**\n     * An object that specifies icon replacements. Object keys are built-in icon names. To use a custom icon, assign its name to the key of the icon you want to replace:\n     *\n     * ```js\n     * import { settings } from \"survey-core\";\n     *\n     * settings.customIcons[\"icon-redo\"] = \"custom-redo-icon\";\n     * ```\n     *\n     * For more information about icons in SurveyJS, refer to the following help topic: [UI Icons](https://surveyjs.io/form-library/documentation/icons).\n     */\n    customIcons: {},\n    /**\n     * Specifies which part of a choice item responds to a drag gesture in Ranking questions.\n     *\n     * Possible values:\n     *\n     * - `\"entireItem\"` (default) - Users can use the entire choice item as a drag handle.\n     * - `\"icon\"` - Users can only use the choice item icon as a drag handle.\n     */\n    rankingDragHandleArea: \"entireItem\",\n    environment: defaultEnvironment,\n    /**\n     * Allows you to hide the maximum length indicator in text input questions.\n     *\n     * If you specify a question's [`maxLength`](https://surveyjs.io/form-library/documentation/api-reference/text-entry-question-model#maxLength) property or a survey's [`maxTextLength`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#maxTextLength) property, text input questions indicate the number of entered characters and the character limit. Assign `false` to the `settings.showMaxLengthIndicator` property if you want to hide this indicator.\n     *\n     * Default value: `true`\n     */\n    showMaxLengthIndicator: true,\n    /**\n     * An object that specifies heading levels (`<h1>`, `<h2>`, etc.) to use when rendering survey, page, panel, and question titles.\n     *\n     * Default value: `{ survey: \"h3\", page: \"h4\", panel: \"h4\", question: \"h5\" }`\n     *\n     * If you want to modify heading levels for individual titles, handle `SurveyModel`'s [`onGetTitleTagName`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#onGetTitleTagName) event.\n     */\n    titleTags: {\n        survey: \"h3\",\n        page: \"h4\",\n        panel: \"h4\",\n        question: \"h5\",\n    },\n    questions: {\n        inputTypes: [\n            \"color\",\n            \"date\",\n            \"datetime-local\",\n            \"email\",\n            \"month\",\n            \"number\",\n            \"password\",\n            \"range\",\n            \"tel\",\n            \"text\",\n            \"time\",\n            \"url\",\n            \"week\",\n        ],\n        dataList: [\n            \"\",\n            \"name\",\n            \"honorific-prefix\",\n            \"given-name\",\n            \"additional-name\",\n            \"family-name\",\n            \"honorific-suffix\",\n            \"nickname\",\n            \"organization-title\",\n            \"username\",\n            \"new-password\",\n            \"current-password\",\n            \"organization\",\n            \"street-address\",\n            \"address-line1\",\n            \"address-line2\",\n            \"address-line3\",\n            \"address-level4\",\n            \"address-level3\",\n            \"address-level2\",\n            \"address-level1\",\n            \"country\",\n            \"country-name\",\n            \"postal-code\",\n            \"cc-name\",\n            \"cc-given-name\",\n            \"cc-additional-name\",\n            \"cc-family-name\",\n            \"cc-number\",\n            \"cc-exp\",\n            \"cc-exp-month\",\n            \"cc-exp-year\",\n            \"cc-csc\",\n            \"cc-type\",\n            \"transaction-currency\",\n            \"transaction-amount\",\n            \"language\",\n            \"bday\",\n            \"bday-day\",\n            \"bday-month\",\n            \"bday-year\",\n            \"sex\",\n            \"url\",\n            \"photo\",\n            \"tel\",\n            \"tel-country-code\",\n            \"tel-national\",\n            \"tel-area-code\",\n            \"tel-local\",\n            \"tel-local-prefix\",\n            \"tel-local-suffix\",\n            \"tel-extension\",\n            \"email\",\n            \"impp\",\n        ]\n    }\n};\n\n\n/***/ }),\n\n/***/ \"./src/stylesmanager.ts\":\n/*!******************************!*\\\n  !*** ./src/stylesmanager.ts ***!\n  \\******************************/\n/*! exports provided: modernThemeColors, defaultThemeColors, orangeThemeColors, darkblueThemeColors, darkroseThemeColors, stoneThemeColors, winterThemeColors, winterstoneThemeColors, StylesManager */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_3591188__) {\n\n\"use strict\";\n__nested_webpack_require_3591188__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_3591188__.d(__nested_webpack_exports__, \"modernThemeColors\", function() { return modernThemeColors; });\n/* harmony export (binding) */ __nested_webpack_require_3591188__.d(__nested_webpack_exports__, \"defaultThemeColors\", function() { return defaultThemeColors; });\n/* harmony export (binding) */ __nested_webpack_require_3591188__.d(__nested_webpack_exports__, \"orangeThemeColors\", function() { return orangeThemeColors; });\n/* harmony export (binding) */ __nested_webpack_require_3591188__.d(__nested_webpack_exports__, \"darkblueThemeColors\", function() { return darkblueThemeColors; });\n/* harmony export (binding) */ __nested_webpack_require_3591188__.d(__nested_webpack_exports__, \"darkroseThemeColors\", function() { return darkroseThemeColors; });\n/* harmony export (binding) */ __nested_webpack_require_3591188__.d(__nested_webpack_exports__, \"stoneThemeColors\", function() { return stoneThemeColors; });\n/* harmony export (binding) */ __nested_webpack_require_3591188__.d(__nested_webpack_exports__, \"winterThemeColors\", function() { return winterThemeColors; });\n/* harmony export (binding) */ __nested_webpack_require_3591188__.d(__nested_webpack_exports__, \"winterstoneThemeColors\", function() { return winterstoneThemeColors; });\n/* harmony export (binding) */ __nested_webpack_require_3591188__.d(__nested_webpack_exports__, \"StylesManager\", function() { return StylesManager; });\n/* harmony import */ var _defaultCss_defaultV2Css__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_3591188__(/*! ./defaultCss/defaultV2Css */ \"./src/defaultCss/defaultV2Css.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_3591188__(/*! ./settings */ \"./src/settings.ts\");\n/* harmony import */ var _utils_utils__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_3591188__(/*! ./utils/utils */ \"./src/utils/utils.ts\");\n\n\n\nvar modernThemeColors = {\n    \"$main-color\": \"#1ab394\",\n    \"$add-button-color\": \"#1948b3\",\n    \"$remove-button-color\": \"#ff1800\",\n    \"$disable-color\": \"#dbdbdb\",\n    \"$progress-text-color\": \"#9d9d9d\",\n    \"$disabled-label-color\": \"rgba(64, 64, 64, 0.5)\",\n    \"$slider-color\": \"white\",\n    \"$disabled-slider-color\": \"#cfcfcf\",\n    \"$error-color\": \"#d52901\",\n    \"$text-color\": \"#404040\",\n    \"$light-text-color\": \"#fff\",\n    \"$checkmark-color\": \"#fff\",\n    \"$progress-buttons-color\": \"#8dd9ca\",\n    \"$inputs-background-color\": \"transparent\",\n    \"$main-hover-color\": \"#9f9f9f\",\n    \"$body-container-background-color\": \"#f4f4f4\",\n    \"$text-border-color\": \"#d4d4d4\",\n    \"$disabled-text-color\": \"rgba(64, 64, 64, 0.5)\",\n    \"$border-color\": \"rgb(64, 64, 64, 0.5)\",\n    \"$header-background-color\": \"#e7e7e7\",\n    \"$answer-background-color\": \"rgba(26, 179, 148, 0.2)\",\n    \"$error-background-color\": \"rgba(213, 41, 1, 0.2)\",\n    \"$radio-checked-color\": \"#404040\",\n    \"$clean-button-color\": \"#1948b3\",\n    \"$body-background-color\": \"#ffffff\",\n    \"$foreground-light\": \"#909090\",\n    \"$font-family\": \"Raleway\",\n};\nvar defaultThemeColors = {\n    \"$header-background-color\": \"#e7e7e7\",\n    \"$body-container-background-color\": \"#f4f4f4\",\n    \"$main-color\": \"#1ab394\",\n    \"$main-hover-color\": \"#0aa384\",\n    \"$body-background-color\": \"white\",\n    \"$inputs-background-color\": \"white\",\n    \"$text-color\": \"#6d7072\",\n    \"$text-input-color\": \"#6d7072\",\n    \"$header-color\": \"#6d7072\",\n    \"$border-color\": \"#e7e7e7\",\n    \"$error-color\": \"#ed5565\",\n    \"$error-background-color\": \"#fcdfe2\",\n    \"$progress-text-color\": \"#9d9d9d\",\n    \"$disable-color\": \"#dbdbdb\",\n    \"$disabled-label-color\": \"rgba(64, 64, 64, 0.5)\",\n    \"$slider-color\": \"white\",\n    \"$disabled-switch-color\": \"#9f9f9f\",\n    \"$disabled-slider-color\": \"#cfcfcf\",\n    \"$foreground-light\": \"#909090\",\n    \"$foreground-disabled\": \"#161616\",\n    \"$background-dim\": \"#f3f3f3\",\n    \"$progress-buttons-color\": \"#8dd9ca\",\n    \"$progress-buttons-line-color\": \"#d4d4d4\"\n};\nvar orangeThemeColors = {\n    \"$header-background-color\": \"#4a4a4a\",\n    \"$body-container-background-color\": \"#f8f8f8\",\n    \"$main-color\": \"#f78119\",\n    \"$main-hover-color\": \"#e77109\",\n    \"$body-background-color\": \"white\",\n    \"$inputs-background-color\": \"white\",\n    \"$text-color\": \"#4a4a4a\",\n    \"$text-input-color\": \"#4a4a4a\",\n    \"$header-color\": \"#f78119\",\n    \"$border-color\": \"#e7e7e7\",\n    \"$error-color\": \"#ed5565\",\n    \"$error-background-color\": \"#fcdfe2\",\n    \"$progress-text-color\": \"#9d9d9d\",\n    \"$disable-color\": \"#dbdbdb\",\n    \"$disabled-label-color\": \"rgba(64, 64, 64, 0.5)\",\n    \"$slider-color\": \"white\",\n    \"$disabled-switch-color\": \"#9f9f9f\",\n    \"$disabled-slider-color\": \"#cfcfcf\",\n    \"$foreground-light\": \"#909090\",\n    \"$foreground-disabled\": \"#161616\",\n    \"$background-dim\": \"#f3f3f3\",\n    \"$progress-buttons-color\": \"#f7b781\",\n    \"$progress-buttons-line-color\": \"#d4d4d4\"\n};\nvar darkblueThemeColors = {\n    \"$header-background-color\": \"#d9d8dd\",\n    \"$body-container-background-color\": \"#f6f7f2\",\n    \"$main-color\": \"#3c4f6d\",\n    \"$main-hover-color\": \"#2c3f5d\",\n    \"$body-background-color\": \"white\",\n    \"$inputs-background-color\": \"white\",\n    \"$text-color\": \"#4a4a4a\",\n    \"$text-input-color\": \"#4a4a4a\",\n    \"$header-color\": \"#6d7072\",\n    \"$border-color\": \"#e7e7e7\",\n    \"$error-color\": \"#ed5565\",\n    \"$error-background-color\": \"#fcdfe2\",\n    \"$progress-text-color\": \"#9d9d9d\",\n    \"$disable-color\": \"#dbdbdb\",\n    \"$disabled-label-color\": \"rgba(64, 64, 64, 0.5)\",\n    \"$slider-color\": \"white\",\n    \"$disabled-switch-color\": \"#9f9f9f\",\n    \"$disabled-slider-color\": \"#cfcfcf\",\n    \"$foreground-light\": \"#909090\",\n    \"$foreground-disabled\": \"#161616\",\n    \"$background-dim\": \"#f3f3f3\",\n    \"$progress-buttons-color\": \"#839ec9\",\n    \"$progress-buttons-line-color\": \"#d4d4d4\"\n};\nvar darkroseThemeColors = {\n    \"$header-background-color\": \"#ddd2ce\",\n    \"$body-container-background-color\": \"#f7efed\",\n    \"$main-color\": \"#68656e\",\n    \"$main-hover-color\": \"#58555e\",\n    \"$body-background-color\": \"white\",\n    \"$inputs-background-color\": \"white\",\n    \"$text-color\": \"#4a4a4a\",\n    \"$text-input-color\": \"#4a4a4a\",\n    \"$header-color\": \"#6d7072\",\n    \"$border-color\": \"#e7e7e7\",\n    \"$error-color\": \"#ed5565\",\n    \"$error-background-color\": \"#fcdfe2\",\n    \"$progress-text-color\": \"#9d9d9d\",\n    \"$disable-color\": \"#dbdbdb\",\n    \"$disabled-label-color\": \"rgba(64, 64, 64, 0.5)\",\n    \"$slider-color\": \"white\",\n    \"$disabled-switch-color\": \"#9f9f9f\",\n    \"$disabled-slider-color\": \"#cfcfcf\",\n    \"$foreground-light\": \"#909090\",\n    \"$foreground-disabled\": \"#161616\",\n    \"$background-dim\": \"#f3f3f3\",\n    \"$progress-buttons-color\": \"#c6bed4\",\n    \"$progress-buttons-line-color\": \"#d4d4d4\"\n};\nvar stoneThemeColors = {\n    \"$header-background-color\": \"#cdccd2\",\n    \"$body-container-background-color\": \"#efedf4\",\n    \"$main-color\": \"#0f0f33\",\n    \"$main-hover-color\": \"#191955\",\n    \"$body-background-color\": \"white\",\n    \"$inputs-background-color\": \"white\",\n    \"$text-color\": \"#0f0f33\",\n    \"$text-input-color\": \"#0f0f33\",\n    \"$header-color\": \"#0f0f33\",\n    \"$border-color\": \"#e7e7e7\",\n    \"$error-color\": \"#ed5565\",\n    \"$error-background-color\": \"#fcdfe2\",\n    \"$progress-text-color\": \"#9d9d9d\",\n    \"$disable-color\": \"#dbdbdb\",\n    \"$disabled-label-color\": \"rgba(64, 64, 64, 0.5)\",\n    \"$slider-color\": \"white\",\n    \"$disabled-switch-color\": \"#9f9f9f\",\n    \"$disabled-slider-color\": \"#cfcfcf\",\n    \"$foreground-light\": \"#909090\",\n    \"$foreground-disabled\": \"#161616\",\n    \"$background-dim\": \"#f3f3f3\",\n    \"$progress-buttons-color\": \"#747491\",\n    \"$progress-buttons-line-color\": \"#d4d4d4\"\n};\nvar winterThemeColors = {\n    \"$header-background-color\": \"#82b8da\",\n    \"$body-container-background-color\": \"#dae1e7\",\n    \"$main-color\": \"#3c3b40\",\n    \"$main-hover-color\": \"#1e1d20\",\n    \"$body-background-color\": \"white\",\n    \"$inputs-background-color\": \"white\",\n    \"$text-color\": \"#000\",\n    \"$text-input-color\": \"#000\",\n    \"$header-color\": \"#000\",\n    \"$border-color\": \"#e7e7e7\",\n    \"$error-color\": \"#ed5565\",\n    \"$error-background-color\": \"#fcdfe2\",\n    \"$disable-color\": \"#dbdbdb\",\n    \"$progress-text-color\": \"#9d9d9d\",\n    \"$disabled-label-color\": \"rgba(64, 64, 64, 0.5)\",\n    \"$slider-color\": \"white\",\n    \"$disabled-switch-color\": \"#9f9f9f\",\n    \"$disabled-slider-color\": \"#cfcfcf\",\n    \"$foreground-light\": \"#909090\",\n    \"$foreground-disabled\": \"#161616\",\n    \"$background-dim\": \"#f3f3f3\",\n    \"$progress-buttons-color\": \"#d1c9f5\",\n    \"$progress-buttons-line-color\": \"#d4d4d4\"\n};\nvar winterstoneThemeColors = {\n    \"$header-background-color\": \"#323232\",\n    \"$body-container-background-color\": \"#f8f8f8\",\n    \"$main-color\": \"#5ac8fa\",\n    \"$main-hover-color\": \"#06a1e7\",\n    \"$body-background-color\": \"white\",\n    \"$inputs-background-color\": \"white\",\n    \"$text-color\": \"#000\",\n    \"$text-input-color\": \"#000\",\n    \"$header-color\": \"#000\",\n    \"$border-color\": \"#e7e7e7\",\n    \"$error-color\": \"#ed5565\",\n    \"$error-background-color\": \"#fcdfe2\",\n    \"$disable-color\": \"#dbdbdb\",\n    \"$progress-text-color\": \"#9d9d9d\",\n    \"$disabled-label-color\": \"rgba(64, 64, 64, 0.5)\",\n    \"$slider-color\": \"white\",\n    \"$disabled-switch-color\": \"#9f9f9f\",\n    \"$disabled-slider-color\": \"#cfcfcf\",\n    \"$foreground-light\": \"#909090\",\n    \"$foreground-disabled\": \"#161616\",\n    \"$background-dim\": \"#f3f3f3\",\n    \"$progress-buttons-color\": \"#acdcf2\",\n    \"$progress-buttons-line-color\": \"#d4d4d4\"\n};\nfunction setCssVariables(vars, element) {\n    Object.keys(vars || {}).forEach(function (sassVarName) {\n        var name = sassVarName.substring(1);\n        element.style.setProperty(\"--\" + name, vars[sassVarName]);\n    });\n}\nvar StylesManager = /** @class */ (function () {\n    function StylesManager() {\n        StylesManager.autoApplyTheme();\n    }\n    StylesManager.autoApplyTheme = function () {\n        if (_defaultCss_defaultV2Css__WEBPACK_IMPORTED_MODULE_0__[\"surveyCss\"].currentType === \"bootstrap\" || _defaultCss_defaultV2Css__WEBPACK_IMPORTED_MODULE_0__[\"surveyCss\"].currentType === \"bootstrapmaterial\") {\n            return;\n        }\n        var includedThemeCss = StylesManager.getIncludedThemeCss();\n        if (includedThemeCss.length === 1) {\n            StylesManager.applyTheme(includedThemeCss[0].name);\n        }\n    };\n    StylesManager.getAvailableThemes = function () {\n        var themeMapper = _defaultCss_defaultV2Css__WEBPACK_IMPORTED_MODULE_0__[\"surveyCss\"].getAvailableThemes()\n            .filter(function (themeName) { return [\"defaultV2\", \"default\", \"modern\"].indexOf(themeName) !== -1; })\n            .map(function (themeName) { return { name: themeName, theme: _defaultCss_defaultV2Css__WEBPACK_IMPORTED_MODULE_0__[\"surveyCss\"][themeName] }; });\n        return themeMapper;\n    };\n    StylesManager.getIncludedThemeCss = function () {\n        if (typeof _settings__WEBPACK_IMPORTED_MODULE_1__[\"settings\"].environment === \"undefined\")\n            return [];\n        var rootElement = _settings__WEBPACK_IMPORTED_MODULE_1__[\"settings\"].environment.rootElement;\n        var themeMapper = StylesManager.getAvailableThemes();\n        var element = Object(_utils_utils__WEBPACK_IMPORTED_MODULE_2__[\"isShadowDOM\"])(rootElement) ? rootElement.host : rootElement;\n        if (!!element) {\n            var styles_1 = getComputedStyle(element);\n            if (styles_1.length) {\n                return themeMapper.filter(function (item) { return item.theme.variables && styles_1.getPropertyValue(item.theme.variables.themeMark); });\n            }\n        }\n        return [];\n    };\n    StylesManager.findSheet = function (styleSheetId) {\n        if (typeof _settings__WEBPACK_IMPORTED_MODULE_1__[\"settings\"].environment === \"undefined\")\n            return null;\n        var styleSheets = _settings__WEBPACK_IMPORTED_MODULE_1__[\"settings\"].environment.root.styleSheets;\n        for (var i = 0; i < styleSheets.length; i++) {\n            if (!!styleSheets[i].ownerNode && styleSheets[i].ownerNode[\"id\"] === styleSheetId) {\n                return styleSheets[i];\n            }\n        }\n        return null;\n    };\n    StylesManager.createSheet = function (styleSheetId) {\n        var stylesSheetsMountContainer = _settings__WEBPACK_IMPORTED_MODULE_1__[\"settings\"].environment.stylesSheetsMountContainer;\n        var style = document.createElement(\"style\");\n        style.id = styleSheetId;\n        // Add a media (and/or media query) here if you'd like!\n        // style.setAttribute(\"media\", \"screen\")\n        // style.setAttribute(\"media\", \"only screen and (max-width : 1024px)\")\n        style.appendChild(document.createTextNode(\"\"));\n        Object(_utils_utils__WEBPACK_IMPORTED_MODULE_2__[\"getElement\"])(stylesSheetsMountContainer).appendChild(style);\n        if (!!StylesManager.Logger) {\n            StylesManager.Logger.log(\"style sheet \" + styleSheetId + \" created\");\n        }\n        return style.sheet;\n    };\n    StylesManager.applyTheme = function (themeName, themeSelector) {\n        if (themeName === void 0) { themeName = \"default\"; }\n        if (typeof _settings__WEBPACK_IMPORTED_MODULE_1__[\"settings\"].environment === \"undefined\")\n            return;\n        var rootElement = _settings__WEBPACK_IMPORTED_MODULE_1__[\"settings\"].environment.rootElement;\n        var element = Object(_utils_utils__WEBPACK_IMPORTED_MODULE_2__[\"isShadowDOM\"])(rootElement) ? rootElement.host : rootElement;\n        _defaultCss_defaultV2Css__WEBPACK_IMPORTED_MODULE_0__[\"surveyCss\"].currentType = themeName;\n        if (StylesManager.Enabled) {\n            if (themeName !== \"bootstrap\" && themeName !== \"bootstrapmaterial\") {\n                setCssVariables(StylesManager.ThemeColors[themeName], element);\n                if (!!StylesManager.Logger) {\n                    StylesManager.Logger.log(\"apply theme \" + themeName + \" completed\");\n                }\n                return;\n            }\n            var themeCss_1 = StylesManager.ThemeCss[themeName];\n            if (!themeCss_1) {\n                _defaultCss_defaultV2Css__WEBPACK_IMPORTED_MODULE_0__[\"surveyCss\"].currentType = \"defaultV2\";\n                return;\n            }\n            StylesManager.insertStylesRulesIntoDocument();\n            var currentThemeSelector_1 = themeSelector || StylesManager.ThemeSelector[themeName] || StylesManager.ThemeSelector[\"default\"];\n            var styleSheetId = (themeName + currentThemeSelector_1).trim();\n            var sheet_1 = StylesManager.findSheet(styleSheetId);\n            if (!sheet_1) {\n                sheet_1 = StylesManager.createSheet(styleSheetId);\n                var themeColors_1 = StylesManager.ThemeColors[themeName] || StylesManager.ThemeColors[\"default\"];\n                Object.keys(themeCss_1).forEach(function (selector) {\n                    var cssRuleText = themeCss_1[selector];\n                    Object.keys(themeColors_1 || {}).forEach(function (colorVariableName) { return (cssRuleText = cssRuleText.replace(new RegExp(\"\\\\\" + colorVariableName, \"g\"), themeColors_1[colorVariableName])); });\n                    try {\n                        if (selector.indexOf(\"body\") === 0) {\n                            sheet_1.insertRule(selector + \" { \" + cssRuleText + \" }\", 0);\n                        }\n                        else {\n                            sheet_1.insertRule(currentThemeSelector_1 + selector + \" { \" + cssRuleText + \" }\", 0);\n                        }\n                    }\n                    catch (e) { }\n                });\n            }\n        }\n        if (!!StylesManager.Logger) {\n            StylesManager.Logger.log(\"apply theme \" + themeName + \" completed\");\n        }\n    };\n    StylesManager.insertStylesRulesIntoDocument = function () {\n        if (StylesManager.Enabled) {\n            var sheet_2 = StylesManager.findSheet(StylesManager.SurveyJSStylesSheetId);\n            if (!sheet_2) {\n                sheet_2 = StylesManager.createSheet(StylesManager.SurveyJSStylesSheetId);\n            }\n            if (Object.keys(StylesManager.Styles).length) {\n                Object.keys(StylesManager.Styles).forEach(function (selector) {\n                    try {\n                        sheet_2.insertRule(selector + \" { \" + StylesManager.Styles[selector] + \" }\", 0);\n                    }\n                    catch (e) { }\n                });\n            }\n            if (Object.keys(StylesManager.Media).length) {\n                Object.keys(StylesManager.Media).forEach(function (selector) {\n                    try {\n                        sheet_2.insertRule(StylesManager.Media[selector].media +\n                            \" { \" +\n                            selector +\n                            \" { \" +\n                            StylesManager.Media[selector].style +\n                            \" } }\", 0);\n                    }\n                    catch (e) { }\n                });\n            }\n        }\n    };\n    StylesManager.SurveyJSStylesSheetId = \"surveyjs-styles\";\n    StylesManager.Styles = {};\n    StylesManager.Media = {};\n    StylesManager.ThemeColors = {\n        \"modern\": modernThemeColors,\n        \"default\": defaultThemeColors,\n        \"orange\": orangeThemeColors,\n        \"darkblue\": darkblueThemeColors,\n        \"darkrose\": darkroseThemeColors,\n        \"stone\": stoneThemeColors,\n        \"winter\": winterThemeColors,\n        \"winterstone\": winterstoneThemeColors,\n    };\n    StylesManager.ThemeCss = {};\n    StylesManager.ThemeSelector = {\n        \"default\": \".sv_main \",\n        \"modern\": \".sv-root-modern \"\n    };\n    StylesManager.Enabled = true;\n    return StylesManager;\n}());\n\n\n\n/***/ }),\n\n/***/ \"./src/survey-element.ts\":\n/*!*******************************!*\\\n  !*** ./src/survey-element.ts ***!\n  \\*******************************/\n/*! exports provided: SurveyElementCore, DragTypeOverMeEnum, SurveyElement */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_3608799__) {\n\n\"use strict\";\n__nested_webpack_require_3608799__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_3608799__.d(__nested_webpack_exports__, \"SurveyElementCore\", function() { return SurveyElementCore; });\n/* harmony export (binding) */ __nested_webpack_require_3608799__.d(__nested_webpack_exports__, \"DragTypeOverMeEnum\", function() { return DragTypeOverMeEnum; });\n/* harmony export (binding) */ __nested_webpack_require_3608799__.d(__nested_webpack_exports__, \"SurveyElement\", function() { return SurveyElement; });\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_3608799__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_3608799__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _actions_adaptive_container__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_3608799__(/*! ./actions/adaptive-container */ \"./src/actions/adaptive-container.ts\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_3608799__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_3608799__(/*! ./settings */ \"./src/settings.ts\");\n/* harmony import */ var _actions_container__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_3608799__(/*! ./actions/container */ \"./src/actions/container.ts\");\n/* harmony import */ var _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_3608799__(/*! ./utils/cssClassBuilder */ \"./src/utils/cssClassBuilder.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\n\n\n/**\n * A base class for the [`SurveyElement`](https://surveyjs.io/form-library/documentation/surveyelement) and [`SurveyModel`](https://surveyjs.io/form-library/documentation/surveymodel) classes.\n */\nvar SurveyElementCore = /** @class */ (function (_super) {\n    __extends(SurveyElementCore, _super);\n    function SurveyElementCore() {\n        var _this = _super.call(this) || this;\n        _this.createLocTitleProperty();\n        return _this;\n    }\n    SurveyElementCore.prototype.createLocTitleProperty = function () {\n        return this.createLocalizableString(\"title\", this, true);\n    };\n    Object.defineProperty(SurveyElementCore.prototype, \"title\", {\n        /**\n         * A title for the survey element. If `title` is undefined, the `name` property value is displayed instead.\n         *\n         * Empty pages and panels do not display their titles or names.\n         *\n         * @see [Configure Question Titles](https://surveyjs.io/form-library/documentation/design-survey-question-titles)\n        */\n        get: function () {\n            return this.getLocalizableStringText(\"title\", this.getDefaultTitleValue());\n        },\n        set: function (val) {\n            this.setLocalizableStringText(\"title\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyElementCore.prototype, \"locTitle\", {\n        get: function () {\n            return this.getLocalizableString(\"title\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyElementCore.prototype.getDefaultTitleValue = function () { return undefined; };\n    SurveyElementCore.prototype.updateDescriptionVisibility = function (newDescription) {\n        var showPlaceholder = false;\n        if (this.isDesignMode) {\n            var property_1 = _jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].findProperty(this.getType(), \"description\");\n            showPlaceholder = !!(property_1 === null || property_1 === void 0 ? void 0 : property_1.placeholder);\n        }\n        this.hasDescription = !!newDescription || (showPlaceholder && this.isDesignMode);\n    };\n    Object.defineProperty(SurveyElementCore.prototype, \"locDescription\", {\n        get: function () {\n            return this.getLocalizableString(\"description\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyElementCore.prototype, \"titleTagName\", {\n        get: function () {\n            var titleTagName = this.getDefaultTitleTagName();\n            var survey = this.getSurvey();\n            return !!survey ? survey.getElementTitleTagName(this, titleTagName) : titleTagName;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyElementCore.prototype.getDefaultTitleTagName = function () {\n        return _settings__WEBPACK_IMPORTED_MODULE_4__[\"settings\"].titleTags[this.getType()];\n    };\n    Object.defineProperty(SurveyElementCore.prototype, \"hasTitle\", {\n        get: function () { return this.title.length > 0; },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyElementCore.prototype, \"hasTitleActions\", {\n        get: function () { return false; },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyElementCore.prototype, \"hasTitleEvents\", {\n        get: function () {\n            return this.hasTitleActions;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyElementCore.prototype.getTitleToolbar = function () { return null; };\n    SurveyElementCore.prototype.getTitleOwner = function () { return undefined; };\n    Object.defineProperty(SurveyElementCore.prototype, \"isTitleOwner\", {\n        get: function () { return !!this.getTitleOwner(); },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyElementCore.prototype, \"isTitleRenderedAsString\", {\n        get: function () { return this.getIsTitleRenderedAsString(); },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyElementCore.prototype.toggleState = function () { return undefined; };\n    Object.defineProperty(SurveyElementCore.prototype, \"cssClasses\", {\n        get: function () { return {}; },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyElementCore.prototype, \"cssTitle\", {\n        get: function () { return \"\"; },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyElementCore.prototype, \"ariaTitleId\", {\n        get: function () { return undefined; },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyElementCore.prototype, \"titleTabIndex\", {\n        get: function () { return undefined; },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyElementCore.prototype, \"titleAriaExpanded\", {\n        get: function () { return undefined; },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyElementCore.prototype, \"titleAriaRole\", {\n        get: function () { return undefined; },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyElementCore.prototype, \"ariaLabel\", {\n        get: function () {\n            return this.locTitle.renderedHtml;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyElementCore.prototype, \"titleAriaLabel\", {\n        get: function () {\n            return this.ariaLabel;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyElementCore.prototype.getIsTitleRenderedAsString = function () { return !this.isTitleOwner; };\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])()\n    ], SurveyElementCore.prototype, \"hasDescription\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({\n            localizable: true,\n            onSet: function (newDescription, self) {\n                self.updateDescriptionVisibility(newDescription);\n            }\n        })\n    ], SurveyElementCore.prototype, \"description\", void 0);\n    return SurveyElementCore;\n}(_base__WEBPACK_IMPORTED_MODULE_1__[\"Base\"]));\n\n// TODO: rename\nvar DragTypeOverMeEnum;\n(function (DragTypeOverMeEnum) {\n    DragTypeOverMeEnum[DragTypeOverMeEnum[\"InsideEmptyPanel\"] = 1] = \"InsideEmptyPanel\";\n    DragTypeOverMeEnum[DragTypeOverMeEnum[\"MultilineRight\"] = 2] = \"MultilineRight\";\n    DragTypeOverMeEnum[DragTypeOverMeEnum[\"MultilineLeft\"] = 3] = \"MultilineLeft\";\n    DragTypeOverMeEnum[DragTypeOverMeEnum[\"Top\"] = 4] = \"Top\";\n    DragTypeOverMeEnum[DragTypeOverMeEnum[\"Right\"] = 5] = \"Right\";\n    DragTypeOverMeEnum[DragTypeOverMeEnum[\"Bottom\"] = 6] = \"Bottom\";\n    DragTypeOverMeEnum[DragTypeOverMeEnum[\"Left\"] = 7] = \"Left\";\n})(DragTypeOverMeEnum || (DragTypeOverMeEnum = {}));\n/**\n * A base class for all survey elements.\n */\nvar SurveyElement = /** @class */ (function (_super) {\n    __extends(SurveyElement, _super);\n    function SurveyElement(name) {\n        var _this = _super.call(this) || this;\n        _this.selectedElementInDesignValue = _this;\n        _this.disableDesignActions = SurveyElement.CreateDisabledDesignElements;\n        _this.parentQuestionValue = null;\n        _this.isContentElement = false;\n        _this.isEditableTemplateElement = false;\n        _this.isInteractiveDesignElement = true;\n        _this.isSingleInRow = true;\n        _this.name = name;\n        _this.createNewArray(\"errors\");\n        _this.createNewArray(\"titleActions\");\n        _this.registerPropertyChangedHandlers([\"isReadOnly\"], function () { _this.onReadOnlyChanged(); });\n        _this.registerPropertyChangedHandlers([\"errors\"], function () { _this.updateVisibleErrors(); });\n        _this.registerPropertyChangedHandlers([\"isSingleInRow\"], function () { _this.updateElementCss(false); });\n        return _this;\n    }\n    SurveyElement.getProgressInfoByElements = function (children, isRequired) {\n        var info = _base__WEBPACK_IMPORTED_MODULE_1__[\"Base\"].createProgressInfo();\n        for (var i = 0; i < children.length; i++) {\n            if (!children[i].isVisible)\n                continue;\n            var childInfo = children[i].getProgressInfo();\n            info.questionCount += childInfo.questionCount;\n            info.answeredQuestionCount += childInfo.answeredQuestionCount;\n            info.requiredQuestionCount += childInfo.requiredQuestionCount;\n            info.requiredAnsweredQuestionCount +=\n                childInfo.requiredAnsweredQuestionCount;\n        }\n        if (isRequired && info.questionCount > 0) {\n            if (info.requiredQuestionCount == 0)\n                info.requiredQuestionCount = 1;\n            if (info.answeredQuestionCount > 0)\n                info.requiredAnsweredQuestionCount = 1;\n        }\n        return info;\n    };\n    SurveyElement.ScrollElementToTop = function (elementId, scrollIfVisible) {\n        var root = _settings__WEBPACK_IMPORTED_MODULE_4__[\"settings\"].environment.root;\n        if (!elementId || typeof root === \"undefined\")\n            return false;\n        var el = root.getElementById(elementId);\n        if (!el || !el.scrollIntoView)\n            return false;\n        var elemTop = scrollIfVisible ? -1 : el.getBoundingClientRect().top;\n        if (elemTop < 0)\n            el.scrollIntoView();\n        return elemTop < 0;\n    };\n    SurveyElement.GetFirstNonTextElement = function (elements, removeSpaces) {\n        if (removeSpaces === void 0) { removeSpaces = false; }\n        if (!elements || !elements.length || elements.length == 0)\n            return null;\n        if (removeSpaces) {\n            var tEl = elements[0];\n            if (tEl.nodeName === \"#text\")\n                tEl.data = \"\";\n            tEl = elements[elements.length - 1];\n            if (tEl.nodeName === \"#text\")\n                tEl.data = \"\";\n        }\n        for (var i = 0; i < elements.length; i++) {\n            if (elements[i].nodeName != \"#text\" && elements[i].nodeName != \"#comment\")\n                return elements[i];\n        }\n        return null;\n    };\n    SurveyElement.FocusElement = function (elementId) {\n        if (!elementId || typeof document === \"undefined\")\n            return false;\n        var res = SurveyElement.focusElementCore(elementId);\n        if (!res) {\n            setTimeout(function () {\n                SurveyElement.focusElementCore(elementId);\n            }, 10);\n        }\n        return res;\n    };\n    SurveyElement.focusElementCore = function (elementId) {\n        var root = _settings__WEBPACK_IMPORTED_MODULE_4__[\"settings\"].environment.root;\n        if (!root)\n            return false;\n        var el = root.getElementById(elementId);\n        // https://stackoverflow.com/questions/19669786/check-if-element-is-visible-in-dom\n        if (el && !el[\"disabled\"] && el.style.display !== \"none\" && el.offsetParent !== null) {\n            el.focus();\n            return true;\n        }\n        return false;\n    };\n    SurveyElement.prototype.onPropertyValueChanged = function (name, oldValue, newValue) {\n        _super.prototype.onPropertyValueChanged.call(this, name, oldValue, newValue);\n        if (name === \"state\") {\n            this.updateElementCss(false);\n            if (this.stateChangedCallback)\n                this.stateChangedCallback();\n        }\n    };\n    SurveyElement.prototype.getSkeletonComponentNameCore = function () {\n        if (this.survey) {\n            return this.survey.getSkeletonComponentName(this);\n        }\n        return \"\";\n    };\n    Object.defineProperty(SurveyElement.prototype, \"parentQuestion\", {\n        /**\n         * A Dynamic Panel, Dynamic Matrix, or Dropdown Matrix that includes the current question.\n         *\n         * This property is `null` for standalone questions.\n         */\n        get: function () {\n            return this.parentQuestionValue;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyElement.prototype.setParentQuestion = function (val) {\n        this.parentQuestionValue = val;\n        this.onParentQuestionChanged();\n    };\n    SurveyElement.prototype.onParentQuestionChanged = function () { };\n    Object.defineProperty(SurveyElement.prototype, \"skeletonComponentName\", {\n        get: function () {\n            return this.getSkeletonComponentNameCore();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyElement.prototype, \"state\", {\n        /**\n         * Gets and sets the survey element's expand state.\n         *\n         * Possible values:\n         *\n         * - `\"default\"` (default) - The survey element is displayed in full and cannot be collapsed in the UI.\n         * - `\"expanded\"` - The survey element is displayed in full and can be collapsed in the UI.\n         * - `\"collapsed\"` - The survey element displays only `title` and `description` and can be expanded in the UI.\n         *\n         * @see toggleState\n         * @see collapse\n         * @see expand\n         * @see isCollapsed\n         * @see isExpanded\n         */\n        get: function () {\n            return this.getPropertyValue(\"state\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"state\", val);\n            this.notifyStateChanged();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyElement.prototype.notifyStateChanged = function () {\n        if (this.survey) {\n            this.survey.elementContentVisibilityChanged(this);\n        }\n    };\n    Object.defineProperty(SurveyElement.prototype, \"isCollapsed\", {\n        /**\n         * Returns `true` if the survey element is collapsed.\n         * @see state\n         * @see toggleState\n         * @see collapse\n         * @see expand\n         * @see isExpanded\n         */\n        get: function () {\n            if (this.isDesignMode)\n                return;\n            return this.state === \"collapsed\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyElement.prototype, \"isExpanded\", {\n        /**\n         * Returns `true` if the survey element is expanded.\n         * @see state\n         * @see toggleState\n         * @see collapse\n         * @see expand\n         * @see isCollapsed\n         */\n        get: function () {\n            return this.state === \"expanded\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    /**\n     * Collapses the survey element.\n     *\n     * In collapsed state, the element displays only `title` and `description`.\n     * @see title\n     * @see description\n     * @see state\n     * @see toggleState\n     * @see expand\n     * @see isCollapsed\n     * @see isExpanded\n     */\n    SurveyElement.prototype.collapse = function () {\n        if (this.isDesignMode)\n            return;\n        this.state = \"collapsed\";\n    };\n    /**\n     * Expands the survey element.\n     * @see state\n     * @see toggleState\n     * @see collapse\n     * @see isCollapsed\n     * @see isExpanded\n     */\n    SurveyElement.prototype.expand = function () {\n        this.state = \"expanded\";\n    };\n    /**\n     * Toggles the survey element's `state` between collapsed and expanded.\n     * @see state\n     * @see collapse\n     * @see expand\n     * @see isCollapsed\n     * @see isExpanded\n     */\n    SurveyElement.prototype.toggleState = function () {\n        if (this.isCollapsed) {\n            this.expand();\n            return true;\n        }\n        if (this.isExpanded) {\n            this.collapse();\n            return false;\n        }\n        return true;\n    };\n    Object.defineProperty(SurveyElement.prototype, \"hasStateButton\", {\n        get: function () {\n            return this.isExpanded || this.isCollapsed;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyElement.prototype, \"shortcutText\", {\n        get: function () {\n            return this.title || this.name;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyElement.prototype.getTitleToolbar = function () {\n        if (!this.titleToolbarValue) {\n            this.titleToolbarValue = this.createActionContainer(true);\n            this.titleToolbarValue.containerCss = (this.isPanel ? this.cssClasses.panel.titleBar : this.cssClasses.titleBar) || \"sv-action-title-bar\";\n            this.titleToolbarValue.setItems(this.getTitleActions());\n        }\n        return this.titleToolbarValue;\n    };\n    SurveyElement.prototype.createActionContainer = function (allowAdaptiveActions) {\n        var actionContainer = allowAdaptiveActions ? new _actions_adaptive_container__WEBPACK_IMPORTED_MODULE_2__[\"AdaptiveActionContainer\"]() : new _actions_container__WEBPACK_IMPORTED_MODULE_5__[\"ActionContainer\"]();\n        if (this.survey && !!this.survey.getCss().actionBar) {\n            actionContainer.cssClasses = this.survey.getCss().actionBar;\n        }\n        return actionContainer;\n    };\n    Object.defineProperty(SurveyElement.prototype, \"titleActions\", {\n        get: function () {\n            return this.getPropertyValue(\"titleActions\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyElement.prototype.getTitleActions = function () {\n        if (!this.isTitleActionRequested) {\n            this.updateTitleActions();\n            this.isTitleActionRequested = true;\n        }\n        return this.titleActions;\n    };\n    SurveyElement.prototype.getDefaultTitleActions = function () {\n        return [];\n    };\n    SurveyElement.prototype.updateTitleActions = function () {\n        var actions = this.getDefaultTitleActions();\n        if (!!this.survey) {\n            actions = this.survey.getUpdatedElementTitleActions(this, actions);\n        }\n        this.setPropertyValue(\"titleActions\", actions);\n    };\n    Object.defineProperty(SurveyElement.prototype, \"hasTitleActions\", {\n        get: function () {\n            return this.getTitleActions().length > 0;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyElement.prototype, \"hasTitleEvents\", {\n        get: function () {\n            return this.state !== undefined && this.state !== \"default\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyElement.prototype, \"titleTabIndex\", {\n        get: function () {\n            return !this.isPage && this.state !== \"default\" ? 0 : undefined;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyElement.prototype, \"titleAriaExpanded\", {\n        get: function () {\n            if (this.isPage || this.state === \"default\")\n                return undefined;\n            return this.state === \"expanded\" ? \"true\" : \"false\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyElement.prototype, \"titleAriaRole\", {\n        get: function () {\n            if (this.isPage || this.state === \"default\")\n                return undefined;\n            return \"button\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyElement.prototype.setSurveyImpl = function (value, isLight) {\n        this.surveyImplValue = value;\n        if (!this.surveyImplValue) {\n            this.setSurveyCore(null);\n            this.surveyDataValue = null;\n        }\n        else {\n            this.surveyDataValue = this.surveyImplValue.getSurveyData();\n            this.setSurveyCore(this.surveyImplValue.getSurvey());\n            this.textProcessorValue = this.surveyImplValue.getTextProcessor();\n            this.onSetData();\n        }\n        if (!!this.survey) {\n            this.updateDescriptionVisibility(this.description);\n            this.clearCssClasses();\n        }\n    };\n    SurveyElement.prototype.canRunConditions = function () {\n        return _super.prototype.canRunConditions.call(this) && !!this.data;\n    };\n    SurveyElement.prototype.getDataFilteredValues = function () {\n        return !!this.data ? this.data.getFilteredValues() : {};\n    };\n    SurveyElement.prototype.getDataFilteredProperties = function () {\n        var props = !!this.data ? this.data.getFilteredProperties() : {};\n        props.question = this;\n        return props;\n    };\n    Object.defineProperty(SurveyElement.prototype, \"surveyImpl\", {\n        get: function () {\n            return this.surveyImplValue;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    /* You shouldn't use this method ever */\n    SurveyElement.prototype.__setData = function (data) {\n        if (_settings__WEBPACK_IMPORTED_MODULE_4__[\"settings\"].supportCreatorV2) {\n            this.surveyDataValue = data;\n        }\n    };\n    Object.defineProperty(SurveyElement.prototype, \"data\", {\n        get: function () {\n            return this.surveyDataValue;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyElement.prototype, \"survey\", {\n        /**\n         * Returns the survey object.\n         */\n        get: function () {\n            return this.getSurvey();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyElement.prototype.getSurvey = function (live) {\n        if (live === void 0) { live = false; }\n        if (!!this.surveyValue)\n            return this.surveyValue;\n        if (!!this.surveyImplValue) {\n            this.setSurveyCore(this.surveyImplValue.getSurvey());\n        }\n        return this.surveyValue;\n    };\n    SurveyElement.prototype.setSurveyCore = function (value) {\n        this.surveyValue = value;\n        if (!!this.surveyChangedCallback) {\n            this.surveyChangedCallback();\n        }\n    };\n    Object.defineProperty(SurveyElement.prototype, \"isInternal\", {\n        get: function () {\n            return this.isContentElement;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyElement.prototype, \"areInvisibleElementsShowing\", {\n        get: function () {\n            return (!!this.survey &&\n                this.survey.areInvisibleElementsShowing &&\n                !this.isContentElement);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyElement.prototype, \"isVisible\", {\n        get: function () {\n            return true;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyElement.prototype, \"isReadOnly\", {\n        /**\n         * Returns `true` if the survey element or its parent element is read-only.\n         *\n         * If you want to switch a survey element to the read-only state based on a condition, specify the [`enableIf`](https://surveyjs.io/form-library/documentation/question#enableIf) property. Refer to the following help topic for information: [Conditional Visibility](https://surveyjs.io/form-library/documentation/design-survey-conditional-logic#conditional-visibility).\n         * @see readOnly\n         */\n        get: function () {\n            return this.readOnly;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyElement.prototype, \"readOnly\", {\n        /**\n         * Makes the survey element read-only.\n         *\n         * If you want to switch a survey element to the read-only state based on a condition, specify the [`enableIf`](https://surveyjs.io/form-library/documentation/question#enableIf) property. Refer to the following help topic for information: [Conditional Visibility](https://surveyjs.io/form-library/documentation/design-survey-conditional-logic#conditional-visibility).\n         * @see isReadOnly\n         */\n        get: function () {\n            return this.getPropertyValue(\"readOnly\");\n        },\n        set: function (val) {\n            if (this.readOnly == val)\n                return;\n            this.setPropertyValue(\"readOnly\", val);\n            if (!this.isLoadingFromJson) {\n                this.setPropertyValue(\"isReadOnly\", this.isReadOnly);\n            }\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyElement.prototype.onReadOnlyChanged = function () {\n        if (!!this.readOnlyChangedCallback) {\n            this.readOnlyChangedCallback();\n        }\n    };\n    Object.defineProperty(SurveyElement.prototype, \"css\", {\n        get: function () {\n            return !!this.survey ? this.survey.getCss() : {};\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyElement.prototype.ensureCssClassesValue = function () {\n        if (!this.cssClassesValue) {\n            this.cssClassesValue = this.calcCssClasses(this.css);\n            this.updateElementCssCore(this.cssClassesValue);\n        }\n    };\n    Object.defineProperty(SurveyElement.prototype, \"cssClasses\", {\n        /**\n         * Returns an object in which keys are UI elements and values are CSS classes applied to them.\n         *\n         * Use the following events of the [`SurveyModel`](https://surveyjs.io/form-library/documentation/surveymodel) object to override CSS classes:\n         *\n         * - [`onUpdateQuestionCssClasses`](https://surveyjs.io/form-library/documentation/surveymodel#onUpdateQuestionCssClasses)\n         * - [`onUpdatePanelCssClasses`](https://surveyjs.io/form-library/documentation/surveymodel#onUpdatePanelCssClasses)\n         * - [`onUpdatePageCssClasses`](https://surveyjs.io/form-library/documentation/surveymodel#onUpdatePageCssClasses)\n         * - [`onUpdateChoiceItemCss`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#onUpdateChoiceItemCss)\n         */\n        get: function () {\n            var _dummy = this.cssClassesValue;\n            if (!this.survey)\n                return this.calcCssClasses(this.css);\n            this.ensureCssClassesValue();\n            return this.cssClassesValue;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyElement.prototype, \"cssTitleNumber\", {\n        get: function () {\n            var css = this.cssClasses;\n            if (css.number)\n                return css.number;\n            return css.panel ? css.panel.number : undefined;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyElement.prototype.calcCssClasses = function (css) { return undefined; };\n    SurveyElement.prototype.updateElementCssCore = function (cssClasses) { };\n    Object.defineProperty(SurveyElement.prototype, \"cssError\", {\n        get: function () { return \"\"; },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyElement.prototype.updateElementCss = function (reNew) {\n        this.clearCssClasses();\n    };\n    SurveyElement.prototype.clearCssClasses = function () {\n        this.cssClassesValue = undefined;\n    };\n    SurveyElement.prototype.getIsLoadingFromJson = function () {\n        if (_super.prototype.getIsLoadingFromJson.call(this))\n            return true;\n        return this.survey ? this.survey.isLoadingFromJson : false;\n    };\n    Object.defineProperty(SurveyElement.prototype, \"name\", {\n        /**\n         * A survey element identifier.\n         *\n         * > Question names must be unique.\n         */\n        get: function () {\n            return this.getPropertyValue(\"name\", \"\");\n        },\n        set: function (val) {\n            var oldValue = this.name;\n            this.setPropertyValue(\"name\", this.getValidName(val));\n            if (!this.isLoadingFromJson && !!oldValue) {\n                this.onNameChanged(oldValue);\n            }\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyElement.prototype.getValidName = function (name) {\n        return name;\n    };\n    SurveyElement.prototype.onNameChanged = function (oldValue) { };\n    SurveyElement.prototype.updateBindingValue = function (valueName, value) {\n        if (!!this.data &&\n            !this.isTwoValueEquals(value, this.data.getValue(valueName))) {\n            this.data.setValue(valueName, value, false);\n        }\n    };\n    Object.defineProperty(SurveyElement.prototype, \"errors\", {\n        /**\n         * Validation errors. Call the `validate()` method to validate survey element data.\n         * @see validate\n         */\n        get: function () {\n            return this.getPropertyValue(\"errors\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"errors\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyElement.prototype.updateVisibleErrors = function () {\n        var counter = 0;\n        for (var i = 0; i < this.errors.length; i++) {\n            if (this.errors[i].visible)\n                counter++;\n        }\n        this.hasVisibleErrors = counter > 0;\n    };\n    Object.defineProperty(SurveyElement.prototype, \"containsErrors\", {\n        /**\n         * Returns `true` if the survey element or its child elements have validation errors.\n         *\n         * This property contains the result of the most recent validation. This result may be outdated. Call the `validate` method to get an up-to-date value.\n         * @see errors\n         */\n        get: function () {\n            return this.getPropertyValue(\"containsErrors\", false);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyElement.prototype.updateContainsErrors = function () {\n        this.setPropertyValue(\"containsErrors\", this.getContainsErrors());\n    };\n    SurveyElement.prototype.getContainsErrors = function () {\n        return this.errors.length > 0;\n    };\n    Object.defineProperty(SurveyElement.prototype, \"selectedElementInDesign\", {\n        get: function () {\n            return this.selectedElementInDesignValue;\n        },\n        set: function (val) {\n            this.selectedElementInDesignValue = val;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyElement.prototype.updateCustomWidgets = function () { };\n    SurveyElement.prototype.onSurveyLoad = function () { };\n    SurveyElement.prototype.onFirstRendering = function () {\n        this.ensureCssClassesValue();\n    };\n    SurveyElement.prototype.endLoadingFromJson = function () {\n        _super.prototype.endLoadingFromJson.call(this);\n        if (!this.survey) {\n            this.onSurveyLoad();\n        }\n        this.updateDescriptionVisibility(this.description);\n    };\n    SurveyElement.prototype.setVisibleIndex = function (index) {\n        return 0;\n    };\n    Object.defineProperty(SurveyElement.prototype, \"isPage\", {\n        /**\n         * Returns `true` if the survey element is a page.\n         * @see Base.getType\n         */\n        get: function () {\n            return false;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyElement.prototype, \"isPanel\", {\n        /**\n         * Returns `true` if the survey element is a panel.\n         * @see Base.getType\n         */\n        get: function () {\n            return false;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyElement.prototype, \"isQuestion\", {\n        /**\n         * Returns `true` if the survey element is a question.\n         * @see Base.getType\n         */\n        get: function () {\n            return false;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyElement.prototype.delete = function (doDispose) { };\n    /**\n     * Returns the survey's [locale](https://surveyjs.io/form-library/documentation/surveymodel#locale).\n     *\n     * If a default locale is used, this method returns an empty string. To get the applied locale in this case, use the following code:\n     *\n     * ```js\n     * import { surveyLocalization } from 'survey-core';\n     * const defaultLocale = surveyLocalization.defaultLocale;\n     * ```\n     *\n     * @see [Localization & Globalization](https://surveyjs.io/form-library/documentation/localization)\n     */\n    SurveyElement.prototype.getLocale = function () {\n        return this.survey\n            ? this.survey.getLocale()\n            : this.locOwner\n                ? this.locOwner.getLocale()\n                : \"\";\n    };\n    SurveyElement.prototype.getMarkdownHtml = function (text, name) {\n        return this.survey\n            ? this.survey.getSurveyMarkdownHtml(this, text, name)\n            : this.locOwner\n                ? this.locOwner.getMarkdownHtml(text, name)\n                : undefined;\n    };\n    SurveyElement.prototype.getRenderer = function (name) {\n        return this.survey && typeof this.survey.getRendererForString === \"function\"\n            ? this.survey.getRendererForString(this, name)\n            : this.locOwner && typeof this.locOwner.getRenderer === \"function\"\n                ? this.locOwner.getRenderer(name)\n                : null;\n    };\n    SurveyElement.prototype.getRendererContext = function (locStr) {\n        return this.survey && typeof this.survey.getRendererContextForString === \"function\"\n            ? this.survey.getRendererContextForString(this, locStr)\n            : this.locOwner && typeof this.locOwner.getRendererContext === \"function\"\n                ? this.locOwner.getRendererContext(locStr)\n                : locStr;\n    };\n    SurveyElement.prototype.getProcessedText = function (text) {\n        if (this.isLoadingFromJson)\n            return text;\n        if (this.textProcessor)\n            return this.textProcessor.processText(text, this.getUseDisplayValuesInDynamicTexts());\n        if (this.locOwner)\n            return this.locOwner.getProcessedText(text);\n        return text;\n    };\n    SurveyElement.prototype.getUseDisplayValuesInDynamicTexts = function () { return true; };\n    SurveyElement.prototype.removeSelfFromList = function (list) {\n        if (!list || !Array.isArray(list))\n            return;\n        var index = list.indexOf(this);\n        if (index > -1) {\n            list.splice(index, 1);\n        }\n    };\n    Object.defineProperty(SurveyElement.prototype, \"textProcessor\", {\n        get: function () {\n            return this.textProcessorValue;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyElement.prototype.getProcessedHtml = function (html) {\n        if (!html || !this.textProcessor)\n            return html;\n        return this.textProcessor.processText(html, true);\n    };\n    SurveyElement.prototype.onSetData = function () { };\n    Object.defineProperty(SurveyElement.prototype, \"parent\", {\n        get: function () {\n            return this.getPropertyValue(\"parent\", null);\n        },\n        set: function (val) {\n            this.setPropertyValue(\"parent\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyElement.prototype.getPage = function (parent) {\n        while (parent && parent.parent)\n            parent = parent.parent;\n        if (parent && parent.getType() == \"page\")\n            return parent;\n        return null;\n    };\n    SurveyElement.prototype.moveToBase = function (parent, container, insertBefore) {\n        if (insertBefore === void 0) { insertBefore = null; }\n        if (!container)\n            return false;\n        parent.removeElement(this);\n        var index = -1;\n        if (_helpers__WEBPACK_IMPORTED_MODULE_3__[\"Helpers\"].isNumber(insertBefore)) {\n            index = parseInt(insertBefore);\n        }\n        if (index == -1 && !!insertBefore && !!insertBefore.getType) {\n            index = container.indexOf(insertBefore);\n        }\n        container.addElement(this, index);\n        return true;\n    };\n    SurveyElement.prototype.setPage = function (parent, newPage) {\n        var oldPage = this.getPage(parent);\n        //fix for the creator v1: https://github.com/surveyjs/survey-creator/issues/1744\n        if (typeof newPage === \"string\") {\n            var survey = this.getSurvey();\n            survey.pages.forEach(function (page) {\n                if (newPage === page.name)\n                    newPage = page;\n            });\n        }\n        if (oldPage === newPage)\n            return;\n        if (parent)\n            parent.removeElement(this);\n        if (newPage) {\n            newPage.addElement(this, -1);\n        }\n    };\n    SurveyElement.prototype.getSearchableLocKeys = function (keys) {\n        keys.push(\"title\");\n        keys.push(\"description\");\n    };\n    Object.defineProperty(SurveyElement.prototype, \"isDefaultV2Theme\", {\n        get: function () {\n            return this.survey && this.survey.getCss().root == \"sd-root-modern\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyElement.prototype, \"hasParent\", {\n        get: function () {\n            return (this.parent && !this.parent.isPage && (!this.parent.originalPage || this.survey.isShowingPreview)) || (this.parent === undefined);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyElement.prototype.shouldAddRunnerStyles = function () {\n        return !this.isDesignMode && this.isDefaultV2Theme;\n    };\n    Object.defineProperty(SurveyElement.prototype, \"isCompact\", {\n        get: function () {\n            return this.survey && this.survey[\"isCompact\"];\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyElement.prototype.getHasFrameV2 = function () {\n        return this.shouldAddRunnerStyles() && (!this.hasParent);\n    };\n    SurveyElement.prototype.getIsNested = function () {\n        return this.shouldAddRunnerStyles() && (this.hasParent);\n    };\n    SurveyElement.prototype.getCssRoot = function (cssClasses) {\n        return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_6__[\"CssClassBuilder\"]()\n            .append(cssClasses.withFrame, this.getHasFrameV2() && !this.isCompact)\n            .append(cssClasses.compact, this.isCompact && this.getHasFrameV2())\n            .append(cssClasses.collapsed, !!this.isCollapsed)\n            .append(cssClasses.expanded, !!this.isExpanded)\n            .append(cssClasses.nested, this.getIsNested())\n            .toString();\n    };\n    Object.defineProperty(SurveyElement.prototype, \"width\", {\n        /**\n         * Sets survey element width in CSS values.\n         *\n         * Default value: \"\"\n         * @see minWidth\n         * @see maxWidth\n        */\n        get: function () {\n            return this.getPropertyValue(\"width\", \"\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"width\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyElement.prototype, \"minWidth\", {\n        /**\n         * Gets or sets minimum survey element width in CSS values.\n         *\n         * Default value: \"300px\" (taken from [`settings.minWidth`](https://surveyjs.io/form-library/documentation/settings#minWidth))\n         * @see maxWidth\n         * @see renderWidth\n         * @see width\n         */\n        get: function () {\n            return this.getPropertyValue(\"minWidth\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"minWidth\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyElement.prototype, \"maxWidth\", {\n        /**\n         * Gets or sets maximum survey element width in CSS values.\n         *\n         * Default value: \"100%\" (taken from [`settings.maxWidth`](https://surveyjs.io/form-library/documentation/settings#maxWidth))\n         * @see minWidth\n         * @see renderWidth\n         * @see width\n         */\n        get: function () {\n            return this.getPropertyValue(\"maxWidth\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"maxWidth\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyElement.prototype, \"renderWidth\", {\n        /**\n         * Returns a calculated width of the rendered survey element in CSS values.\n         * @see width\n         * @see minWidth\n         * @see maxWidth\n         */\n        get: function () {\n            return this.getPropertyValue(\"renderWidth\", \"\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"renderWidth\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyElement.prototype, \"indent\", {\n        /**\n         * Increases or decreases an indent of survey element content from the left edge. Accepts positive integer values and 0. Does not apply in the Default V2 theme.\n         * @see rightIndent\n         */\n        get: function () {\n            return this.getPropertyValue(\"indent\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"indent\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyElement.prototype, \"rightIndent\", {\n        /**\n         * Increases or decreases an indent of survey element content from the right edge. Accepts positive integer values and 0. Does not apply in the Default V2 theme.\n         * @see indent\n         */\n        get: function () {\n            return this.getPropertyValue(\"rightIndent\", 0);\n        },\n        set: function (val) {\n            this.setPropertyValue(\"rightIndent\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyElement.prototype.getRootStyle = function () {\n        var style = {};\n        if (!!this.paddingLeft) {\n            style[\"--sv-element-add-padding-left\"] = this.paddingLeft;\n        }\n        if (!!this.paddingRight) {\n            style[\"--sv-element-add-padding-right\"] = this.paddingRight;\n        }\n        return style;\n    };\n    Object.defineProperty(SurveyElement.prototype, \"paddingLeft\", {\n        get: function () {\n            return this.getPropertyValue(\"paddingLeft\", \"\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"paddingLeft\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyElement.prototype, \"paddingRight\", {\n        get: function () {\n            return this.getPropertyValue(\"paddingRight\", \"\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"paddingRight\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyElement.prototype, \"rootStyle\", {\n        get: function () {\n            var style = {};\n            var minWidth = this.renderMinWidth ? this.minWidth : \"min(100%, \" + this.minWidth + \")\";\n            if (this.allowRootStyle && this.renderWidth) {\n                // style[\"width\"] = this.renderWidth;\n                style[\"flexGrow\"] = 1;\n                style[\"flexShrink\"] = 1;\n                style[\"flexBasis\"] = this.renderWidth;\n                style[\"minWidth\"] = minWidth;\n                style[\"maxWidth\"] = this.maxWidth;\n            }\n            return style;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyElement.prototype.isContainsSelection = function (el) {\n        var elementWithSelection = undefined;\n        if (document[\"selection\"]) {\n            elementWithSelection = document[\"selection\"].createRange().parentElement();\n        }\n        else {\n            var selection = window.getSelection();\n            if (selection.rangeCount > 0) {\n                var range = selection.getRangeAt(0);\n                if (range.startOffset !== range.endOffset) {\n                    elementWithSelection = range.startContainer.parentNode;\n                }\n            }\n        }\n        return elementWithSelection == el;\n    };\n    Object.defineProperty(SurveyElement.prototype, \"clickTitleFunction\", {\n        get: function () {\n            var _this = this;\n            if (this.needClickTitleFunction()) {\n                return function (event) {\n                    if (!!event && _this.isContainsSelection(event.target)) {\n                        return;\n                    }\n                    return _this.processTitleClick();\n                };\n            }\n            return undefined;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyElement.prototype.needClickTitleFunction = function () {\n        return this.state !== \"default\";\n    };\n    SurveyElement.prototype.processTitleClick = function () {\n        if (this.state !== \"default\") {\n            this.toggleState();\n        }\n    };\n    Object.defineProperty(SurveyElement.prototype, \"additionalTitleToolbar\", {\n        get: function () {\n            return this.getAdditionalTitleToolbar();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyElement.prototype.getAdditionalTitleToolbar = function () {\n        return null;\n    };\n    SurveyElement.prototype.getCssTitle = function (cssClasses) {\n        var isExpandable = this.state !== \"default\";\n        var numInlineLimit = 4;\n        return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_6__[\"CssClassBuilder\"]()\n            .append(cssClasses.title)\n            .append(cssClasses.titleNumInline, (this.no || \"\").length > numInlineLimit || isExpandable)\n            .append(cssClasses.titleExpandable, isExpandable)\n            .append(cssClasses.titleExpanded, this.isExpanded)\n            .append(cssClasses.titleCollapsed, this.isCollapsed)\n            .append(cssClasses.titleDisabled, this.isReadOnly)\n            .append(cssClasses.titleOnError, this.containsErrors).toString();\n    };\n    SurveyElement.prototype.localeChanged = function () {\n        _super.prototype.localeChanged.call(this);\n        this.updateDescriptionVisibility(this.description);\n        if (this.errors.length > 0) {\n            this.errors.forEach(function (err) {\n                err.updateText();\n            });\n        }\n    };\n    SurveyElement.prototype.dispose = function () {\n        _super.prototype.dispose.call(this);\n        if (this.titleToolbarValue) {\n            this.titleToolbarValue.dispose();\n        }\n    };\n    SurveyElement.CreateDisabledDesignElements = false;\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ defaultValue: null })\n    ], SurveyElement.prototype, \"dragTypeOverMe\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ defaultValue: false })\n    ], SurveyElement.prototype, \"isDragMe\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])()\n    ], SurveyElement.prototype, \"cssClassesValue\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ defaultValue: false })\n    ], SurveyElement.prototype, \"hasVisibleErrors\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ defaultValue: true })\n    ], SurveyElement.prototype, \"isSingleInRow\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ defaultValue: true })\n    ], SurveyElement.prototype, \"allowRootStyle\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ defaultValue: true })\n    ], SurveyElement.prototype, \"renderMinWidth\", void 0);\n    return SurveyElement;\n}(SurveyElementCore));\n\n\n\n/***/ }),\n\n/***/ \"./src/survey-error.ts\":\n/*!*****************************!*\\\n  !*** ./src/survey-error.ts ***!\n  \\*****************************/\n/*! exports provided: SurveyError */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_3659436__) {\n\n\"use strict\";\n__nested_webpack_require_3659436__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_3659436__.d(__nested_webpack_exports__, \"SurveyError\", function() { return SurveyError; });\n/* harmony import */ var _localizablestring__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_3659436__(/*! ./localizablestring */ \"./src/localizablestring.ts\");\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_3659436__(/*! ./surveyStrings */ \"./src/surveyStrings.ts\");\n\n\nvar SurveyError = /** @class */ (function () {\n    function SurveyError(text, errorOwner) {\n        if (text === void 0) { text = null; }\n        if (errorOwner === void 0) { errorOwner = null; }\n        this.text = text;\n        this.errorOwner = errorOwner;\n        this.visible = true;\n        this.onUpdateErrorTextCallback = undefined;\n    }\n    SurveyError.prototype.equalsTo = function (error) {\n        if (!error || !error.getErrorType)\n            return false;\n        if (this.getErrorType() !== error.getErrorType())\n            return false;\n        return this.text === error.text && this.visible === error.visible;\n    };\n    Object.defineProperty(SurveyError.prototype, \"locText\", {\n        get: function () {\n            if (!this.locTextValue) {\n                this.locTextValue = new _localizablestring__WEBPACK_IMPORTED_MODULE_0__[\"LocalizableString\"](this.errorOwner, true);\n                this.locTextValue.storeDefaultText = true;\n                this.locTextValue.text = this.getText();\n            }\n            return this.locTextValue;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyError.prototype.getText = function () {\n        var res = this.text;\n        if (!res)\n            res = this.getDefaultText();\n        if (!!this.errorOwner) {\n            res = this.errorOwner.getErrorCustomText(res, this);\n        }\n        return res;\n    };\n    SurveyError.prototype.getErrorType = function () {\n        return \"base\";\n    };\n    SurveyError.prototype.getDefaultText = function () {\n        return \"\";\n    };\n    SurveyError.prototype.getLocale = function () {\n        return !!this.errorOwner ? this.errorOwner.getLocale() : \"\";\n    };\n    SurveyError.prototype.getLocalizationString = function (locStrName) {\n        return _surveyStrings__WEBPACK_IMPORTED_MODULE_1__[\"surveyLocalization\"].getString(locStrName, this.getLocale());\n    };\n    SurveyError.prototype.updateText = function () {\n        if (this.onUpdateErrorTextCallback) {\n            this.onUpdateErrorTextCallback(this);\n        }\n        this.locText.text = this.getText();\n    };\n    return SurveyError;\n}());\n\n\n\n/***/ }),\n\n/***/ \"./src/survey-events-api.ts\":\n/*!**********************************!*\\\n  !*** ./src/survey-events-api.ts ***!\n  \\**********************************/\n/*! no exports provided */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_3662332__) {\n\n\"use strict\";\n__nested_webpack_require_3662332__.r(__nested_webpack_exports__);\n\n\n\n/***/ }),\n\n/***/ \"./src/survey.ts\":\n/*!***********************!*\\\n  !*** ./src/survey.ts ***!\n  \\***********************/\n/*! exports provided: SurveyModel */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_3662621__) {\n\n\"use strict\";\n__nested_webpack_require_3662621__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_3662621__.d(__nested_webpack_exports__, \"SurveyModel\", function() { return SurveyModel; });\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_3662621__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_3662621__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_3662621__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _survey_element__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_3662621__(/*! ./survey-element */ \"./src/survey-element.ts\");\n/* harmony import */ var _defaultCss_defaultV2Css__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_3662621__(/*! ./defaultCss/defaultV2Css */ \"./src/defaultCss/defaultV2Css.ts\");\n/* harmony import */ var _textPreProcessor__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_3662621__(/*! ./textPreProcessor */ \"./src/textPreProcessor.ts\");\n/* harmony import */ var _conditionProcessValue__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_3662621__(/*! ./conditionProcessValue */ \"./src/conditionProcessValue.ts\");\n/* harmony import */ var _dxSurveyService__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_3662621__(/*! ./dxSurveyService */ \"./src/dxSurveyService.ts\");\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_3662621__(/*! ./surveyStrings */ \"./src/surveyStrings.ts\");\n/* harmony import */ var _error__WEBPACK_IMPORTED_MODULE_9__ = __nested_webpack_require_3662621__(/*! ./error */ \"./src/error.ts\");\n/* harmony import */ var _localizablestring__WEBPACK_IMPORTED_MODULE_10__ = __nested_webpack_require_3662621__(/*! ./localizablestring */ \"./src/localizablestring.ts\");\n/* harmony import */ var _stylesmanager__WEBPACK_IMPORTED_MODULE_11__ = __nested_webpack_require_3662621__(/*! ./stylesmanager */ \"./src/stylesmanager.ts\");\n/* harmony import */ var _surveyTimerModel__WEBPACK_IMPORTED_MODULE_12__ = __nested_webpack_require_3662621__(/*! ./surveyTimerModel */ \"./src/surveyTimerModel.ts\");\n/* harmony import */ var _conditions__WEBPACK_IMPORTED_MODULE_13__ = __nested_webpack_require_3662621__(/*! ./conditions */ \"./src/conditions.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_14__ = __nested_webpack_require_3662621__(/*! ./settings */ \"./src/settings.ts\");\n/* harmony import */ var _utils_utils__WEBPACK_IMPORTED_MODULE_15__ = __nested_webpack_require_3662621__(/*! ./utils/utils */ \"./src/utils/utils.ts\");\n/* harmony import */ var _actions_action__WEBPACK_IMPORTED_MODULE_16__ = __nested_webpack_require_3662621__(/*! ./actions/action */ \"./src/actions/action.ts\");\n/* harmony import */ var _actions_container__WEBPACK_IMPORTED_MODULE_17__ = __nested_webpack_require_3662621__(/*! ./actions/container */ \"./src/actions/container.ts\");\n/* harmony import */ var _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_18__ = __nested_webpack_require_3662621__(/*! ./utils/cssClassBuilder */ \"./src/utils/cssClassBuilder.ts\");\n/* harmony import */ var _notifier__WEBPACK_IMPORTED_MODULE_19__ = __nested_webpack_require_3662621__(/*! ./notifier */ \"./src/notifier.ts\");\n/* harmony import */ var _cover__WEBPACK_IMPORTED_MODULE_20__ = __nested_webpack_require_3662621__(/*! ./cover */ \"./src/cover.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * The `SurveyModel` object contains properties and methods that allow you to control the survey and access its elements.\n *\n * [View Demo](https://surveyjs.io/form-library/examples/nps-question/ (linkStyle))\n */\nvar SurveyModel = /** @class */ (function (_super) {\n    __extends(SurveyModel, _super);\n    //#endregion\n    function SurveyModel(jsonObj, renderedElement) {\n        if (jsonObj === void 0) { jsonObj = null; }\n        if (renderedElement === void 0) { renderedElement = null; }\n        var _this = _super.call(this) || this;\n        _this.valuesHash = {};\n        _this.variablesHash = {};\n        _this.onThemeApplying = new _base__WEBPACK_IMPORTED_MODULE_2__[\"EventBase\"]();\n        _this.onThemeApplied = new _base__WEBPACK_IMPORTED_MODULE_2__[\"EventBase\"]();\n        //#region Event declarations\n        /**\n         * An event that is raised after a [trigger](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#triggers) is executed.\n         *\n         * For information on event handler parameters, refer to descriptions within the interface.\n         *\n         * [Conditional Survey Logic (Triggers)](https://surveyjs.io/form-library/documentation/design-survey/conditional-logic#conditional-survey-logic-triggers (linkStyle)).\n         * @see triggers\n         * @see runTriggers\n         */\n        _this.onTriggerExecuted = _this.addEvent();\n        /**\n         * An event that is raised before the survey is completed. Use this event to prevent survey completion.\n         * @see onComplete\n         * @see doComplete\n         * @see allowCompleteSurveyAutomatic\n         */\n        _this.onCompleting = _this.addEvent();\n        /**\n         * An event that is raised after the survey is completed. Use this event to send survey results to the server.\n         *\n         * For information on event handler parameters, refer to descriptions within the interface.\n         *\n         * For an example of how to use the methods described above, refer to the following help topic: [Store Survey Results in Your Own Database](https://surveyjs.io/form-library/documentation/handle-survey-results-store#store-survey-results-in-your-own-database).\n         *\n         * > Do not disable the [`showCompletedPage`](https://surveyjs.io/form-library/documentation/surveymodel#showCompletedPage) property if you call one of the `options.showSave...` methods. This is required because the UI that indicates data saving progress is integrated into the complete page. If you hide the complete page, the UI also becomes invisible.\n         * @see onPartialSend\n         * @see doComplete\n         * @see allowCompleteSurveyAutomatic\n         */\n        _this.onComplete = _this.addEvent();\n        /**\n         * An event that is raised before the survey displays a [preview of given answers](https://surveyjs.io/form-library/documentation/design-survey/create-a-multi-page-survey#preview-page). Use this event to cancel the preview.\n         * @see showPreviewBeforeComplete\n         * @see showPreview\n         * @see cancelPreview\n         */\n        _this.onShowingPreview = _this.addEvent();\n        /**\n         * An event that is raised before the survey navigates to a specified URL. Use this event to change the URL or cancel the navigation.\n         * @see navigateToUrl\n         * @see navigateToUrlOnCondition\n         */\n        _this.onNavigateToUrl = _this.addEvent();\n        /**\n         * An event that is raised when the survey [`state`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#state) changes to `\"running\"`.\n         * @see firstPageIsStarted\n         */\n        _this.onStarted = _this.addEvent();\n        /**\n         * An event that is raised to save incomplete survey results. Enable the [`sendResultOnPageNext`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#sendResultOnPageNext) property for this event to occur.\n         *\n         * For information on event handler parameters, refer to descriptions within the interface.\n         *\n         * Alternatively, you can handle the [`onCurrentPageChanged`](#onCurrentPageChanged) and [`onValueChanged`](#onValueChanged) events, as shown in the following demo: [Continue an Incomplete Survey](https://surveyjs.io/form-library/examples/survey-editprevious/).\n         */\n        _this.onPartialSend = _this.addEvent();\n        /**\n         * An event that is raised before the current page is switched.\n         *\n         * @see currentPageNo\n         * @see nextPage\n         * @see prevPage\n         **/\n        _this.onCurrentPageChanging = _this.addEvent();\n        /**\n         * An event that is raised after the current page is switched.\n         *\n         * @see currentPageNo\n         * @see nextPage\n         * @see prevPage\n         */\n        _this.onCurrentPageChanged = _this.addEvent();\n        /**\n         * An event that is raised before a question value is changed.\n         * @see setValue\n         */\n        _this.onValueChanging = _this.addEvent();\n        /**\n         * An event that is raised after a question value is changed.\n         *\n         * For information on event handler parameters, refer to descriptions within the interface.\n         *\n         * To handle value changes in matrix cells or panels within a [Dynamic Panel](https://surveyjs.io/form-library/documentation/api-reference/dynamic-panel-model), use the [`onMatrixCellValueChanged`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#onMatrixCellValueChanged) or [`onDynamicPanelItemValueChanged`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#onDynamicPanelItemValueChanged) event.\n         * @see setValue\n         */\n        _this.onValueChanged = _this.addEvent();\n        /**\n         * An event that is raised after a [variable](https://surveyjs.io/form-library/documentation/design-survey/conditional-logic#variables) or [calculated value](https://surveyjs.io/form-library/documentation/design-survey/conditional-logic#calculated-values) is changed.\n         *\n         * @see setVariable\n         * @see calculatedValues\n         */\n        _this.onVariableChanged = _this.addEvent();\n        /**\n         * An event that is raised after question visibility is changed.\n         *\n         * For information on event handler parameters, refer to descriptions within the interface.\n         *\n         * Refer to the following help topic for information on how to implement conditional visibility: [Conditional Visibility](https://surveyjs.io/form-library/documentation/design-survey/conditional-logic#conditional-visibility).\n         */\n        _this.onQuestionVisibleChanged = _this.addEvent();\n        _this.onVisibleChanged = _this.onQuestionVisibleChanged;\n        /**\n         * An event that is raised after page visibility is changed.\n         *\n         * For information on event handler parameters, refer to descriptions within the interface.\n         *\n         * Refer to the following help topic for information on how to implement conditional visibility: [Conditional Visibility](https://surveyjs.io/form-library/documentation/design-survey/conditional-logic#conditional-visibility).\n         */\n        _this.onPageVisibleChanged = _this.addEvent();\n        /**\n         * An event that is raised after page visibility is changed.\n         *\n         * For information on event handler parameters, refer to descriptions within the interface.\n         *\n         * Refer to the following help topic for information on how to implement conditional visibility: [Conditional Visibility](https://surveyjs.io/form-library/documentation/design-survey/conditional-logic#conditional-visibility).\n         */\n        _this.onPanelVisibleChanged = _this.addEvent();\n        /**\n         * An event that is raised when the survey creates any new object derived from [`Question`](https://surveyjs.io/form-library/documentation/api-reference/question).\n         *\n         * In a survey, complex elements ([Dynamic Matrix](https://surveyjs.io/form-library/examples/questiontype-matrixdynamic/), [Multiple Text](https://surveyjs.io/form-library/examples/questiontype-multipletext/), and [Dynamic Panel](https://surveyjs.io/form-library/examples/questiontype-paneldynamic/)) are composed of questions. Use this event to customize any question regardless of which survey element it belongs to.\n         *\n         * For information on event handler parameters, refer to descriptions within the interface.\n         *\n         * To use this event for questions loaded from JSON, create an empty survey model, add an event handler, and only then populate the model from the JSON object:\n         *\n         * ```js\n         * import { Model } from \"survey-core\";\n         *\n         * const surveyJson = {\n         *    // ...\n         * };\n         * // Create an empty model\n         * const survey = new Model();\n         * // Add an event handler\n         * survey.onQuestionCreated.add((sender, options) => {\n         *   //...\n         * });\n         * // Load the survey JSON schema\n         * survey.fromJSON(surveyJson);\n         * ```\n         * @see onQuestionAdded\n         */\n        _this.onQuestionCreated = _this.addEvent();\n        /**\n         * An event that is raised when a new question is added to a panel or page.\n         *\n         * For information on event handler parameters, refer to descriptions within the interface.\n         *\n         * To use this event for questions loaded from JSON, create an empty survey model, add an event handler, and only then populate the model from the JSON object:\n         *\n         * ```js\n         * import { Model } from \"survey-core\";\n         *\n         * const surveyJson = {\n         *    // ...\n         * };\n         * // Create an empty model\n         * const survey = new Model();\n         * // Add an event handler\n         * survey.onQuestionAdded.add((sender, options) => {\n         *   //...\n         * });\n         * // Load the survey JSON schema\n         * survey.fromJSON(surveyJson);\n         * ```\n         * @see onQuestionCreated\n         */\n        _this.onQuestionAdded = _this.addEvent();\n        /**\n         * An event that is raised after a question is deleted from the survey.\n         */\n        _this.onQuestionRemoved = _this.addEvent();\n        /**\n         * An event that is raised when a new panel is added to a page.\n         */\n        _this.onPanelAdded = _this.addEvent();\n        /**\n         * An event that is raised after a panel is deleted from the survey.\n         */\n        _this.onPanelRemoved = _this.addEvent();\n        /**\n         * An event that is raised when a new page is added to the survey.\n         * @see PanelModel\n         */\n        _this.onPageAdded = _this.addEvent();\n        /**\n         * An event that is raised when a question value is being validated. Use this event to specify a custom error message.\n         *\n         * For information on event handler parameters, refer to descriptions within the interface.\n         *\n         * [View Demo](https://surveyjs.io/form-library/examples/add-custom-input-validation/ (linkStyle))\n         * @see onServerValidateQuestions\n         * @see onValidatePanel\n         * @see onMatrixCellValidate\n         * @see onSettingQuestionErrors\n         */\n        _this.onValidateQuestion = _this.addEvent();\n        /**\n         * An event that is raised before errors are assigned to a question. Use this event to add/remove/modify errors.\n         * @see onValidateQuestion\n         */\n        _this.onSettingQuestionErrors = _this.addEvent();\n        /**\n         * Use this event to validate data on your server.\n         *\n         * For information on event handler parameters, refer to descriptions within the interface.\n         *\n         * [View Demo](https://surveyjs.io/form-library/examples/javascript-server-side-form-validation/ (linkStyle))\n         * @see onValidateQuestion\n         * @see onValidatePanel\n         * @see isValidatingOnServer\n         */\n        _this.onServerValidateQuestions = _this.addEvent();\n        /**\n         * An event that is raised when a panel is being validated. Use this event to specify a custom error message.\n         *\n         * For information on event handler parameters, refer to descriptions within the interface.\n         *\n         * [View Demo](https://surveyjs.io/form-library/examples/add-custom-input-validation/ (linkStyle))\n         * @see onValidateQuestion\n         * @see onServerValidateQuestions\n         */\n        _this.onValidatePanel = _this.addEvent();\n        /**\n         * An event that is raised to change default error messages.\n         */\n        _this.onErrorCustomText = _this.addEvent();\n        /**\n         * An event that is raised when the [current page](#currentPage) is being validated. Handle this event to be notified of current page validation.\n         */\n        _this.onValidatedErrorsOnCurrentPage = _this.addEvent();\n        /**\n         * An event that is raised when the survey processes HTML content. Handle this event to modify HTML content before displaying.\n         * @see completedHtml\n         * @see loadingHtml\n         * @see QuestionHtmlModel.html\n         */\n        _this.onProcessHtml = _this.addEvent();\n        /**\n         * Use this event to change a question's display text.\n         */\n        _this.onGetQuestionDisplayValue = _this.addEvent();\n        /**\n         * An event that is raised before the survey displays a question title. Handle this event to modify question titles.\n         *\n         * For information on event handler parameters, refer to descriptions within the interface.\n         *\n         * If you want to modify question numbers, handle the [`onGetQuestionNo`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#onGetQuestionNo) event.\n         * @see requiredText\n         */\n        _this.onGetQuestionTitle = _this.addEvent();\n        /**\n         * An event that is raised when the survey calculates heading levels (`<h1>`, `<h2>`, etc.) for a survey, page, panel, and question title. Handle this event to change the heading level of individual titles.\n         *\n         * For information on event handler parameters, refer to descriptions within the interface.\n         *\n         * If you want to specify heading levels for all titles, use the [`titleTags`](https://surveyjs.io/form-library/documentation/api-reference/settings#titleTags) object in [global settings](https://surveyjs.io/form-library/documentation/api-reference/settings).\n         * @see onGetQuestionTitle\n         * @see onGetQuestionNo\n         */\n        _this.onGetTitleTagName = _this.addEvent();\n        /**\n         * An event that is raised before the survey calculates a question number. Handle this event to modify question numbers.\n         *\n         * For information on event handler parameters, refer to descriptions within the interface.\n         *\n         * If you want to hide question numbers, disable the [`showQuestionNumbers`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#showQuestionNumbers) property.\n         * @see onGetQuestionTitle\n         * @see questionStartIndex\n         */\n        _this.onGetQuestionNo = _this.addEvent();\n        /**\n         * An event that is raised before the survey displays progress text. Handle this event to change the progress text in code.\n         * @see showProgressBar\n         * @see progressBarType\n         */\n        _this.onProgressText = _this.addEvent();\n        /**\n         * An event that is raised to convert Markdown content to HTML.\n         *\n         * For information on event handler parameters, refer to descriptions within the interface.\n         *\n         * [View Demo](https://surveyjs.io/form-library/examples/edit-survey-questions-markdown/ (linkStyle))\n         */\n        _this.onTextMarkdown = _this.addEvent();\n        _this.onTextRenderAs = _this.addEvent();\n        /**\n         * An event that is raised after a request to save survey results on [SurveyJS Service](https://api.surveyjs.io/) has been completed. Use this event to find out if the results have been saved successfully.\n         */\n        _this.onSendResult = _this.addEvent();\n        /**\n         * An event that is raised when the [`getResult(resultId, questionName)`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#getResult) method is called. Use this event to obtain answers to an individual question from [SurveyJS Service](https://api.surveyjs.io/).\n         * @see getResult\n         */\n        _this.onGetResult = _this.addEvent();\n        /**\n         * An event that is raised when a File Upload question starts to upload a file. Applies only if [`storeDataAsText`](https://surveyjs.io/form-library/documentation/api-reference/file-model#storeDataAsText) is `false`. Use this event to upload files to your server.\n         *\n         * For information on event handler parameters, refer to descriptions within the interface.\n         *\n         * [View Demo](https://surveyjs.io/form-library/examples/file-upload/ (linkStyle))\n         * @see uploadFiles\n         * @see onDownloadFile\n         * @see onClearFiles\n         */\n        _this.onUploadFiles = _this.addEvent();\n        /**\n         * An event that is raised when a File Upload question starts to download a file. Use this event to implement file preview when your server stores only file names.\n         *\n         * For information on event handler parameters, refer to descriptions within the interface.\n         *\n         * [View Demo](https://surveyjs.io/form-library/examples/store-file-names-in-survey-results/ (linkStyle))\n         * @see downloadFile\n         * @see onClearFiles\n         * @see onUploadFiles\n         */\n        _this.onDownloadFile = _this.addEvent();\n        /**\n         * An event that is raised when users clear files in a [File Upload](https://surveyjs.io/form-library/documentation/api-reference/file-model) question. Use this event to delete files from your server.\n         *\n         * For information on event handler parameters, refer to descriptions within the interface.\n         *\n         * [View Demo](https://surveyjs.io/form-library/examples/file-delayed-upload/ (linkStyle))\n         * @see clearFiles\n         * @see onDownloadFile\n         * @see onUploadFiles\n         */\n        _this.onClearFiles = _this.addEvent();\n        /**\n         * An event that is raised after choices are loaded from a server but before they are assigned to a choice-based question, such as [Dropdown](https://surveyjs.io/form-library/documentation/api-reference/dropdown-menu-model) or [Checkboxes](https://surveyjs.io/form-library/documentation/api-reference/checkbox-question-model). Handle this event if you need to modify the loaded choices.\n         */\n        _this.onLoadChoicesFromServer = _this.addEvent();\n        /**\n         * An event that is raised after a survey JSON schema is loaded from the [SurveyJS Service](https://api.surveyjs.io). Use this event to modify the loaded schema.\n         * @see surveyId\n         * @see clientId\n         * @see loadSurveyFromService\n         */\n        _this.onLoadedSurveyFromService = _this.addEvent();\n        /**\n         * An event that is raised when the survey processes [dynamic texts](https://surveyjs.io/form-library/documentation/design-survey/conditional-logic#dynamic-texts) and any text in curly brackets. Use this event, for instance, to substitute parameters in a RESTful URL with real values when you [load choices by URL](https://surveyjs.io/form-library/documentation/api-reference/checkbox-question-model#choicesByUrl).\n         */\n        _this.onProcessTextValue = _this.addEvent();\n        /**\n         * An event that is raised before rendering a question. Use it to override default question CSS classes.\n         *\n         * For information on event handler parameters, refer to descriptions within the interface.\n         *\n         * [View Demo](/form-library/examples/customize-survey-with-css/ (linkStyle))\n         * @see css\n         */\n        _this.onUpdateQuestionCssClasses = _this.addEvent();\n        /**\n         * An event that is raised before rendering a standalone panel and panels within [Dynamic Panel](/form-library/examples/duplicate-group-of-fields-in-form/). Use it to override default panel CSS classes.\n         *\n         * For information on event handler parameters, refer to descriptions within the interface.\n         *\n         * [View Demo](/form-library/examples/customize-survey-with-css/ (linkStyle))\n         * @see css\n         */\n        _this.onUpdatePanelCssClasses = _this.addEvent();\n        /**\n         * An event that is raised before rendering a page. Use it to override default page CSS classes.\n         *\n         * For information on event handler parameters, refer to descriptions within the interface.\n         *\n         * [View Demo](/form-library/examples/customize-survey-with-css/ (linkStyle))\n         * @see css\n         */\n        _this.onUpdatePageCssClasses = _this.addEvent();\n        /**\n         * An event that is raised before rendering a choice item in Radio Button Group, Checkboxes, and Dropdown questions. Use it to override default CSS classes applied to choice items.\n         *\n         * For information on event handler parameters, refer to descriptions within the interface.\n         *\n         * [View Demo](/form-library/examples/customize-survey-with-css/ (linkStyle))\n         * @see css\n         */\n        _this.onUpdateChoiceItemCss = _this.addEvent();\n        /**\n         * An event that is raised after the survey is rendered to the DOM. Use this event to modify survey markup.\n         *\n         * For information on event handler parameters, refer to descriptions within the interface.\n         *\n         * [View Demo](https://surveyjs.io/form-library/examples/survey-animation/ (linkStyle))\n         */\n        _this.onAfterRenderSurvey = _this.addEvent();\n        _this.onAfterRenderHeader = _this.addEvent();\n        /**\n         * An event that is raised after a page is rendered to the DOM. Use it to modify page markup.\n         *\n         * For information on event handler parameters, refer to descriptions within the interface.\n         *\n         * [View Demo](https://surveyjs.io/form-library/examples/survey-afterrender/ (linkStyle))\n         */\n        _this.onAfterRenderPage = _this.addEvent();\n        /**\n         * An event that is raised after a question is rendered to the DOM. Use it to modify question markup.\n         *\n         * For information on event handler parameters, refer to descriptions within the interface.\n         *\n         * [View Demo](https://surveyjs.io/form-library/examples/survey-afterrender/ (linkStyle))\n         */\n        _this.onAfterRenderQuestion = _this.addEvent();\n        /**\n         * An event that is raised after a question with a single input field is rendered to the DOM. Use it to modify question markup.\n         *\n         * For information on event handler parameters, refer to descriptions within the interface.\n         *\n         * > This event is not raised for questions without input fields ([HTML](https://surveyjs.io/form-library/documentation/questionhtmlmodel), [Image](https://surveyjs.io/form-library/documentation/questionimagemodel)) or questions with multiple input fields ([Matrix](https://surveyjs.io/form-library/documentation/questionmatrixmodel), [Multiple Text](https://surveyjs.io/form-library/documentation/questionmultipletextmodel)).\n         */\n        _this.onAfterRenderQuestionInput = _this.addEvent();\n        /**\n         * An event that is raised after a panel is rendered to the DOM. Use it to modify panel markup.\n         *\n         * For information on event handler parameters, refer to descriptions within the interface.\n         *\n         * > This event is raised for static [Panels](https://surveyjs.io/form-library/examples/set-properties-on-multiple-questions-using-panel/) as well as panels within a [Dynamic Panel](https://surveyjs.io/form-library/examples/duplicate-group-of-fields-in-form/).\n         */\n        _this.onAfterRenderPanel = _this.addEvent();\n        /**\n         * An event that is raised when an element (input field, checkbox, radio button) within a question gets focus.\n         * @see onFocusInPanel\n         * @see focusFirstQuestionAutomatic\n         * @see focusQuestion\n         */\n        _this.onFocusInQuestion = _this.addEvent();\n        /**\n         * An event that is raised when an element within a panel gets focus.\n         * @see onFocusInQuestion\n         * @see focusFirstQuestionAutomatic\n         * @see focusQuestion\n         */\n        _this.onFocusInPanel = _this.addEvent();\n        /**\n         * An event that is raised before a [choice item](https://surveyjs.io/form-library/documentation/api-reference/questionselectbase#choices) is displayed. Use this event to change the visibility of individual choice items in [Checkboxes](https://surveyjs.io/form-library/documentation/api-reference/checkbox-question-model), [Dropdown](https://surveyjs.io/form-library/documentation/api-reference/dropdown-menu-model), [Radio Button Group](https://surveyjs.io/form-library/documentation/api-reference/radio-button-question-model), and other similar question types.\n         */\n        _this.onShowingChoiceItem = _this.addEvent();\n        /**\n         * Use this event to load choice items in [Dropdown](https://surveyjs.io/form-library/documentation/questiondropdownmodel) and [Tag Box](https://surveyjs.io/form-library/documentation/questiontagboxmodel) questions on demand.\n         *\n         * This event is raised only for those questions that have the [`choicesLazyLoadEnabled`](https://surveyjs.io/form-library/documentation/questiondropdownmodel#choicesLazyLoadEnabled) property set to `true`.\n         *\n         * For information on event handler parameters, refer to descriptions within the interface.\n         *\n         * [View Demo](https://surveyjs.io/form-library/examples/lazy-loading-dropdown/ (linkStyle))\n         */\n        _this.onChoicesLazyLoad = _this.addEvent();\n        /**\n         * Use this event to load a display text for the [default choice item](https://surveyjs.io/form-library/documentation/questiondropdownmodel#defaultValue) in [Dropdown](https://surveyjs.io/form-library/documentation/questiondropdownmodel) and [Tag Box](https://surveyjs.io/form-library/documentation/questiontagboxmodel) questions.\n         *\n         * If you load choices from a server (use [`choicesByUrl`](https://surveyjs.io/form-library/documentation/questiondropdownmodel#choicesByUrl) or [`onChoicesLazyLoad`](https://surveyjs.io/form-library/documentation/surveymodel#onChoicesLazyLoad)), display texts become available only when data is loaded, which does not happen until a user opens the drop-down menu. However, a display text for a default choice item is required before that. In this case, you can load data individually for the default item within the `onGetChoiceDisplayValue` event handler.\n         *\n         * For information on event handler parameters, refer to descriptions within the interface.\n         *\n         * [View Demo](https://surveyjs.io/form-library/examples/lazy-loading-dropdown/ (linkStyle))\n         */\n        _this.onGetChoiceDisplayValue = _this.addEvent();\n        /**\n         * An event that is raised after a new row is added to a [Dynamic Matrix](https://surveyjs.io/form-library/examples/questiontype-matrixdynamic/).\n         */\n        _this.onMatrixRowAdded = _this.addEvent();\n        /**\n         * An event that is raised before a new row is added to a [Dynamic Matrix](https://surveyjs.io/form-library/examples/questiontype-matrixdynamic/).\n         */\n        _this.onMatrixRowAdding = _this.addEvent();\n        /**\n         * This event is obsolete. Use the [`onMatrixRowAdding`](/form-library/documentation/api-reference/survey-data-model#onMatrixRowAdding) event instead.\n         */\n        _this.onMatrixBeforeRowAdded = _this.onMatrixRowAdding;\n        /**\n         * An event that is raised before a row is deleted from a [Dynamic Matrix](https://surveyjs.io/form-library/examples/questiontype-matrixdynamic/). You can cancel row deletion and clear row data instead.\n         * @see onMatrixRenderRemoveButton\n         */\n        _this.onMatrixRowRemoving = _this.addEvent();\n        /**\n         * An event that is raised after a row is deleted from a [Dynamic Matrix](https://surveyjs.io/form-library/examples/questiontype-matrixdynamic/).\n         * @see onMatrixRenderRemoveButton\n         */\n        _this.onMatrixRowRemoved = _this.addEvent();\n        /**\n         * An event that is raised before rendering the Remove button in a row of a [Dynamic Matrix](https://surveyjs.io/form-library/examples/questiontype-matrixdynamic/). Use this event to hide the Remove button for individual matrix rows.\n         * @see onMatrixRowRemoving\n         * @see onMatrixRowRemoved\n         */\n        _this.onMatrixRenderRemoveButton = _this.addEvent();\n        /**\n         * This event is obsolete. Use the [`onMatrixRenderRemoveButton`](/form-library/documentation/api-reference/survey-data-model#onMatrixRenderRemoveButton) event instead.\n         */\n        _this.onMatrixAllowRemoveRow = _this.onMatrixRenderRemoveButton;\n        /**\n         * An event that is raised before a cell in a [Multi-Select Matrix](https://surveyjs.io/form-library/examples/questiontype-matrixdropdown/) or [Dynamic Matrix](https://surveyjs.io/form-library/examples/questiontype-matrixdynamic/) is created. Use this event to change the type of individual matrix cells.\n         * @see onAfterRenderMatrixCell\n         */\n        _this.onMatrixCellCreating = _this.addEvent();\n        /**\n          * An event that is raised after a cell in a [Multi-Select Matrix](https://surveyjs.io/form-library/examples/questiontype-matrixdropdown/) or [Dynamic Matrix](https://surveyjs.io/form-library/examples/questiontype-matrixdynamic/) is created.\n          * @see onAfterRenderMatrixCell\n          */\n        _this.onMatrixCellCreated = _this.addEvent();\n        /**\n         * An event that is raised for every matrix cell after it is rendered to the DOM.\n         * @see onMatrixCellCreated\n         */\n        _this.onAfterRenderMatrixCell = _this.addEvent();\n        /**\n         * This event is obsolete. Use the [`onAfterRenderMatrixCell`](/form-library/documentation/api-reference/survey-data-model#onAfterRenderMatrixCell) event instead.\n         */\n        _this.onMatrixAfterCellRender = _this.onAfterRenderMatrixCell;\n        /**\n         * An event that is raised after a cell value is changed in a [Multi-Select Matrix](https://surveyjs.io/form-library/examples/questiontype-matrixdropdown/) or [Dynamic Matrix](https://surveyjs.io/form-library/examples/questiontype-matrixdynamic/).\n         * @see onMatrixRowAdding\n         */\n        _this.onMatrixCellValueChanged = _this.addEvent();\n        /**\n         * An event that is raised before a cell value is changed in a [Multi-Select Matrix](https://surveyjs.io/form-library/examples/questiontype-matrixdropdown/) or [Dynamic Matrix](https://surveyjs.io/form-library/examples/questiontype-matrixdynamic/). Use this event to change the cell value.\n         * @see onMatrixRowAdding\n         */\n        _this.onMatrixCellValueChanging = _this.addEvent();\n        /**\n         * An event that is raised for [Multi-Select Matrix](https://surveyjs.io/form-library/examples/questiontype-matrixdropdown/) and [Dynamic Matrix](https://surveyjs.io/form-library/examples/questiontype-matrixdynamic/) questions when they validate a cell value. Use this event to display a custom error message based on a condition.\n         * @see onMatrixRowAdding\n         */\n        _this.onMatrixCellValidate = _this.addEvent();\n        /**\n         * An event that is raised after a new column is added to a [Multi-Select Matrix](https://surveyjs.io/form-library/examples/questiontype-matrixdropdown/) or [Dynamic Matrix](https://surveyjs.io/form-library/examples/questiontype-matrixdynamic/).\n         */\n        _this.onMatrixColumnAdded = _this.addEvent();\n        /**\n         * An event that is raised on adding a new item in Multiple Text question.\n         */\n        _this.onMultipleTextItemAdded = _this.addEvent();\n        /**\n         * An event that is raised after a new panel is added to a [Dynamic Panel](https://surveyjs.io/form-library/examples/questiontype-paneldynamic/) question.\n         */\n        _this.onDynamicPanelAdded = _this.addEvent();\n        /**\n         * An event that is raised after a panel is deleted from a [Dynamic Panel](https://surveyjs.io/form-library/examples/questiontype-paneldynamic/) question.\n         */\n        _this.onDynamicPanelRemoved = _this.addEvent();\n        /**\n         * An event that is raised before a panel is deleted from a [Dynamic Panel](https://surveyjs.io/form-library/examples/questiontype-paneldynamic/) question. Use this event to cancel the deletion.\n         */\n        _this.onDynamicPanelRemoving = _this.addEvent();\n        /**\n        * An event that is raised every second while the timer is running.\n        *\n        * Use the [`timeSpent`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#timeSpent) property to find out how many seconds have elapsed.\n        * @see maxTimeToFinish\n        * @see maxTimeToFinishPage\n        * @see showTimerPanel\n        * @see startTimer\n        */\n        _this.onTimer = _this.addEvent();\n        _this.onTimerPanelInfoText = _this.addEvent();\n        /**\n         * An event that is raised after an item value is changed in a panel within a [Dynamic Panel](https://surveyjs.io/form-library/examples/questiontype-paneldynamic/) question.\n         */\n        _this.onDynamicPanelItemValueChanged = _this.addEvent();\n        /**\n         * An event that is raised before a [Dynamic Panel](https://surveyjs.io/form-library/examples/questiontype-paneldynamic/) renders [tab titles](https://surveyjs.io/form-library/documentation/api-reference/dynamic-panel-model#templateTabTitle). Use this event to change individual tab titles.\n         */\n        _this.onGetDynamicPanelTabTitle = _this.addEvent();\n        /**\n         * An event that is raised to define whether a question answer is correct. Applies only to [quiz surveys](https://surveyjs.io/form-library/documentation/design-survey/create-a-quiz).\n         */\n        _this.onIsAnswerCorrect = _this.addEvent();\n        /**\n         * An event that is raised when users drag and drop survey elements while designing the survey in [Survey Creator](https://surveyjs.io/survey-creator/documentation/overview). Use this event to control drag and drop operations.\n         * @see isDesignMode\n         */\n        _this.onDragDropAllow = _this.addEvent();\n        /**\n         * An event this is raised before a survey element (usually page) is scrolled to the top. Use this event to cancel the scroll operation.\n         */\n        _this.onScrollingElementToTop = _this.addEvent();\n        _this.onLocaleChangedEvent = _this.addEvent();\n        /**\n         * An event that allows you to add, delete, or modify actions in a question title.\n         *\n         * For information on event handler parameters, refer to descriptions within the interface.\n         *\n         * [View Demo](https://surveyjs.io/form-library/examples/survey-titleactions/ (linkStyle))\n        */\n        _this.onGetQuestionTitleActions = _this.addEvent();\n        /**\n         * An event that allows you to add, delete, or modify actions in a panel title.\n         */\n        _this.onGetPanelTitleActions = _this.addEvent();\n        /**\n         * An event that allows you to add, delete, or modify actions in a page title.\n         *\n         * For information on event handler parameters, refer to descriptions within the interface.\n         *\n         * [View Demo](https://surveyjs.io/form-library/examples/modify-titles-of-survey-elements/ (linkStyle))\n         */\n        _this.onGetPageTitleActions = _this.addEvent();\n        /**\n         * An event that allows you to add, delete, or modify actions in the footer of a [Panel](https://surveyjs.io/form-library/documentation/panelmodel).\n         */\n        _this.onGetPanelFooterActions = _this.addEvent();\n        /**\n         * An event that allows you to add, delete, or modify actions in rows of a [Dynamic Matrix](https://surveyjs.io/form-library/examples/questiontype-matrixdynamic/).\n         *\n         * For information on event handler parameters, refer to descriptions within the interface.\n         *\n         * [View Demo](https://surveyjs.io/form-library/examples/employee-information-form/ (linkStyle))\n         * @see IAction\n         */\n        _this.onGetMatrixRowActions = _this.addEvent();\n        /**\n         * An event that is raised after a survey element is [expanded or collapsed](https://surveyjs.io/form-library/documentation/api-reference/question#state).\n         */\n        _this.onElementContentVisibilityChanged = _this.addEvent();\n        /**\n         * An event that is raised before an [Expression](https://surveyjs.io/form-library/documentation/api-reference/expression-model) question displays a value. Use this event to override the display value.\n         */\n        _this.onGetExpressionDisplayValue = _this.addEvent();\n        /**\n         * An event that is raised after the visibility of a popup is changed. This event can be raised for [Single-](https://surveyjs.io/form-library/documentation/api-reference/dropdown-menu-model) and [Multi-Select Dropdown](https://surveyjs.io/form-library/documentation/api-reference/dropdown-tag-box-model) questions and [Rating](https://surveyjs.io/form-library/documentation/api-reference/rating-scale-question-model) questions [rendered as drop-down menus](https://surveyjs.io/form-library/documentation/api-reference/rating-scale-question-model#displayMode).\n         */\n        _this.onPopupVisibleChanged = _this.addEvent();\n        /**\n         * A list of errors in a survey JSON schema.\n         * @see ensureUniqueNames\n         */\n        _this.jsonErrors = null;\n        _this.cssValue = null;\n        /**\n         * Specifies whether to hide validation errors thrown by the Required validation in the UI.\n         *\n         * [Built-In Client-Side Validators](https://surveyjs.io/form-library/documentation/data-validation#built-in-client-side-validators (linkStyle))\n         * @see ignoreValidation\n         */\n        _this.hideRequiredErrors = false;\n        //#endregion\n        _this.cssVariables = {};\n        _this._isMobile = false;\n        _this._isCompact = false;\n        _this._isDesignMode = false;\n        /**\n         * Specifies whether to skip validation when you switch between pages or complete the survey programmatically or when users do that in the UI.\n         *\n         * Default value: `false`\n         * @see hideRequiredErrors\n         * @see nextPage\n         * @see isPrevPage\n         * @see completeLastPage\n         */\n        _this.ignoreValidation = false;\n        _this.isNavigationButtonPressed = false;\n        _this.mouseDownPage = null;\n        _this.isCalculatingProgressText = false;\n        _this.isFirstPageRendering = true;\n        _this.isCurrentPageRendering = true;\n        _this.isTriggerIsRunning = false;\n        _this.triggerValues = null;\n        _this.triggerKeys = null;\n        _this.conditionValues = null;\n        _this.isValueChangedOnRunningCondition = false;\n        _this.conditionRunnerCounter = 0;\n        _this.conditionUpdateVisibleIndexes = false;\n        _this.conditionNotifyElementsOnAnyValueOrVariableChanged = false;\n        _this.isEndLoadingFromJson = null;\n        _this.questionHashes = {\n            names: {},\n            namesInsensitive: {},\n            valueNames: {},\n            valueNamesInsensitive: {},\n        };\n        _this.needRenderIcons = true;\n        _this.skippedPages = [];\n        _this.skeletonComponentName = \"sv-skeleton\";\n        if (typeof document !== \"undefined\") {\n            SurveyModel.stylesManager = new _stylesmanager__WEBPACK_IMPORTED_MODULE_11__[\"StylesManager\"]();\n        }\n        var htmlCallBack = function (str) { return \"<h3>\" + str + \"</h3>\"; };\n        _this.createHtmlLocString(\"completedHtml\", \"completingSurvey\", htmlCallBack);\n        _this.createHtmlLocString(\"completedBeforeHtml\", \"completingSurveyBefore\", htmlCallBack, \"completed-before\");\n        _this.createHtmlLocString(\"loadingHtml\", \"loadingSurvey\", htmlCallBack, \"loading\");\n        _this.createLocalizableString(\"logo\", _this, false);\n        _this.createLocalizableString(\"startSurveyText\", _this, false, true);\n        _this.createLocalizableString(\"pagePrevText\", _this, false, true);\n        _this.createLocalizableString(\"pageNextText\", _this, false, true);\n        _this.createLocalizableString(\"completeText\", _this, false, true);\n        _this.createLocalizableString(\"previewText\", _this, false, true);\n        _this.createLocalizableString(\"editText\", _this, false, true);\n        _this.createLocalizableString(\"questionTitleTemplate\", _this, true);\n        _this.timerModelValue = new _surveyTimerModel__WEBPACK_IMPORTED_MODULE_12__[\"SurveyTimerModel\"](_this);\n        _this.timerModelValue.onTimer = function (page) {\n            _this.doTimer(page);\n        };\n        _this.createNewArray(\"pages\", function (value) {\n            _this.doOnPageAdded(value);\n        }, function (value) {\n            _this.doOnPageRemoved(value);\n        });\n        _this.createNewArray(\"triggers\", function (value) {\n            value.setOwner(_this);\n        });\n        _this.createNewArray(\"calculatedValues\", function (value) {\n            value.setOwner(_this);\n        });\n        _this.createNewArray(\"completedHtmlOnCondition\", function (value) {\n            value.locOwner = _this;\n        });\n        _this.createNewArray(\"navigateToUrlOnCondition\", function (value) {\n            value.locOwner = _this;\n        });\n        _this.registerPropertyChangedHandlers([\"locale\"], function () {\n            _this.onSurveyLocaleChanged();\n        });\n        _this.registerPropertyChangedHandlers([\"firstPageIsStarted\"], function () {\n            _this.onFirstPageIsStartedChanged();\n        });\n        _this.registerPropertyChangedHandlers([\"mode\"], function () {\n            _this.onModeChanged();\n        });\n        _this.registerPropertyChangedHandlers([\"progressBarType\"], function () {\n            _this.updateProgressText();\n        });\n        _this.registerPropertyChangedHandlers([\"questionStartIndex\", \"requiredText\", \"questionTitlePattern\"], function () {\n            _this.resetVisibleIndexes();\n        });\n        _this.registerPropertyChangedHandlers([\"isLoading\", \"isCompleted\", \"isCompletedBefore\", \"mode\", \"isStartedState\", \"currentPage\"], function () { _this.updateState(); });\n        _this.registerPropertyChangedHandlers([\"state\", \"currentPage\", \"showPreviewBeforeComplete\"], function () { _this.onStateAndCurrentPageChanged(); });\n        _this.registerPropertyChangedHandlers([\"logo\", \"logoPosition\"], function () { _this.updateHasLogo(); });\n        _this.registerPropertyChangedHandlers([\"backgroundImage\"], function () { _this.updateRenderBackgroundImage(); });\n        _this.onGetQuestionNo.onCallbacksChanged = function () {\n            _this.resetVisibleIndexes();\n        };\n        _this.onProgressText.onCallbacksChanged = function () {\n            _this.updateProgressText();\n        };\n        _this.onTextMarkdown.onCallbacksChanged = function () {\n            _this.locStrsChanged();\n        };\n        _this.onProcessHtml.onCallbacksChanged = function () {\n            _this.locStrsChanged();\n        };\n        _this.onGetQuestionTitle.onCallbacksChanged = function () {\n            _this.locStrsChanged();\n        };\n        _this.onUpdatePageCssClasses.onCallbacksChanged = function () {\n            _this.currentPage && _this.currentPage.updateElementCss();\n        };\n        _this.onUpdatePanelCssClasses.onCallbacksChanged = function () {\n            _this.currentPage && _this.currentPage.updateElementCss();\n        };\n        _this.onUpdateQuestionCssClasses.onCallbacksChanged = function () {\n            _this.currentPage && _this.currentPage.updateElementCss();\n        };\n        _this.onShowingChoiceItem.onCallbacksChanged = function () {\n            _this.rebuildQuestionChoices();\n        };\n        _this.navigationBarValue = _this.createNavigationBar();\n        _this.navigationBar.locOwner = _this;\n        _this.onBeforeCreating();\n        if (jsonObj) {\n            if (typeof jsonObj === \"string\" || jsonObj instanceof String) {\n                jsonObj = JSON.parse(jsonObj);\n            }\n            if (jsonObj && jsonObj.clientId) {\n                _this.clientId = jsonObj.clientId;\n            }\n            _this.fromJSON(jsonObj);\n            if (_this.surveyId) {\n                _this.loadSurveyFromService(_this.surveyId, _this.clientId);\n            }\n        }\n        _this.onCreating();\n        if (!!renderedElement) {\n            _this.render(renderedElement);\n        }\n        _this.updateCss();\n        _this.setCalculatedWidthModeUpdater();\n        _this.notifier = new _notifier__WEBPACK_IMPORTED_MODULE_19__[\"Notifier\"](_this.css.saveData);\n        _this.notifier.addAction(_this.createTryAgainAction(), \"error\");\n        _this.onPopupVisibleChanged.add(function (_, opt) {\n            if (opt.visible) {\n                _this.onScrollCallback = function () {\n                    opt.popup.toggleVisibility();\n                };\n            }\n            else {\n                _this.onScrollCallback = undefined;\n            }\n        });\n        _this.layoutElements.push({\n            id: \"timerpanel\",\n            template: \"survey-timerpanel\",\n            component: \"sv-timerpanel\",\n            data: _this.timerModel\n        });\n        _this.layoutElements.push({\n            id: \"progress-buttons\",\n            component: \"sv-progress-buttons\",\n            data: _this\n        });\n        _this.layoutElements.push({\n            id: \"progress-questions\",\n            component: \"sv-progress-questions\",\n            data: _this\n        });\n        _this.layoutElements.push({\n            id: \"progress-pages\",\n            component: \"sv-progress-pages\",\n            data: _this\n        });\n        _this.layoutElements.push({\n            id: \"progress-correctquestions\",\n            component: \"sv-progress-correctquestions\",\n            data: _this\n        });\n        _this.layoutElements.push({\n            id: \"progress-requiredquestions\",\n            component: \"sv-progress-requiredquestions\",\n            data: _this\n        });\n        _this.addLayoutElement({\n            id: \"toc-navigation\",\n            component: \"sv-progress-toc\",\n            data: _this\n        });\n        _this.layoutElements.push({\n            id: \"navigationbuttons\",\n            component: \"sv-action-bar\",\n            data: _this.navigationBar\n        });\n        return _this;\n    }\n    Object.defineProperty(SurveyModel, \"cssType\", {\n        get: function () {\n            return _defaultCss_defaultV2Css__WEBPACK_IMPORTED_MODULE_4__[\"surveyCss\"].currentType;\n        },\n        set: function (value) {\n            _stylesmanager__WEBPACK_IMPORTED_MODULE_11__[\"StylesManager\"].applyTheme(value);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"platformName\", {\n        get: function () {\n            return SurveyModel.platform;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"commentSuffix\", {\n        /**\n         * A suffix added to the name of the property that stores comments.\n         *\n         * Default value: \"-Comment\"\n         *\n         * Many question types allow respondents to leave comments. To enable this functionality, set a question's [`showCommentArea`](https://surveyjs.io/form-library/documentation/api-reference/checkbox-question-model#showCommentArea) property to `true`. Comment values are saved in a separate property. The property name is composed of the question `name` and `commentSuffix`.\n         *\n         * Respondents can also leave comments when they select \"Other\" in choice-based questions, such as Dropdown or Checkboxes. The property name for the comment value is composed according to the same rules. However, you can use the question `name` as a key to store the comment value instead. Disable the [`storeOthersAsComment`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#storeOthersAsComment) property in this case.\n         *\n         * [View Demo](https://surveyjs.io/form-library/examples/create-checkboxes-question-in-javascript/ (linkStyle))\n         */\n        get: function () {\n            return _settings__WEBPACK_IMPORTED_MODULE_14__[\"settings\"].commentSuffix;\n        },\n        set: function (val) {\n            _settings__WEBPACK_IMPORTED_MODULE_14__[\"settings\"].commentSuffix = val;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"commentPrefix\", {\n        get: function () {\n            return this.commentSuffix;\n        },\n        set: function (val) {\n            this.commentSuffix = val;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyModel.prototype.processClosedPopup = function (question, popupModel) {\n        throw new Error(\"Method not implemented.\");\n    };\n    SurveyModel.prototype.createTryAgainAction = function () {\n        var _this = this;\n        return {\n            id: \"save-again\",\n            title: this.getLocalizationString(\"saveAgainButton\"),\n            action: function () {\n                if (_this.isCompleted) {\n                    _this.saveDataOnComplete();\n                }\n                else {\n                    _this.doComplete();\n                }\n            }\n        };\n    };\n    SurveyModel.prototype.createHtmlLocString = function (name, locName, func, reason) {\n        var _this = this;\n        var res = this.createLocalizableString(name, this, false, locName);\n        res.onGetLocalizationTextCallback = func;\n        if (reason) {\n            res.onGetTextCallback = function (str) { return _this.processHtml(str, reason); };\n        }\n    };\n    SurveyModel.prototype.getType = function () {\n        return \"survey\";\n    };\n    SurveyModel.prototype.onPropertyValueChanged = function (name, oldValue, newValue) {\n        if (name === \"questionsOnPageMode\") {\n            this.onQuestionsOnPageModeChanged(oldValue);\n        }\n    };\n    Object.defineProperty(SurveyModel.prototype, \"pages\", {\n        /**\n         * Returns an array of all pages in the survey.\n         *\n         * To get an array of only visible pages, use the [`visiblePages`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#visiblePages) array.\n         * @see PageModel\n         */\n        get: function () {\n            return this.getPropertyValue(\"pages\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyModel.prototype.render = function (element) {\n        if (element === void 0) { element = null; }\n        if (this.renderCallback) {\n            this.renderCallback();\n        }\n    };\n    SurveyModel.prototype.updateSurvey = function (newProps, oldProps) {\n        var _loop_1 = function () {\n            if (key == \"model\" || key == \"children\")\n                return \"continue\";\n            if (key.indexOf(\"on\") == 0 && this_1[key] && this_1[key].add) {\n                var funcBody_1 = newProps[key];\n                var func = function (sender, options) {\n                    funcBody_1(sender, options);\n                };\n                this_1[key].add(func);\n            }\n            else {\n                this_1[key] = newProps[key];\n            }\n        };\n        var this_1 = this;\n        for (var key in newProps) {\n            _loop_1();\n        }\n        if (newProps && newProps.data)\n            this.onValueChanged.add(function (sender, options) {\n                newProps.data[options.name] = options.value;\n            });\n    };\n    SurveyModel.prototype.getCss = function () {\n        return this.css;\n    };\n    SurveyModel.prototype.updateCompletedPageCss = function () {\n        this.containerCss = this.css.container;\n        this.completedCss = new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_18__[\"CssClassBuilder\"]().append(this.css.body)\n            .append(this.css.completedPage).toString(); // for completed page\n        this.completedBeforeCss = new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_18__[\"CssClassBuilder\"]()\n            .append(this.css.body)\n            .append(this.css.completedBeforePage)\n            .toString();\n        this.loadingBodyCss = new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_18__[\"CssClassBuilder\"]()\n            .append(this.css.body)\n            .append(this.css.bodyLoading)\n            .toString();\n    };\n    SurveyModel.prototype.updateCss = function () {\n        this.rootCss = this.getRootCss();\n        this.updateNavigationCss();\n        this.updateCompletedPageCss();\n    };\n    Object.defineProperty(SurveyModel.prototype, \"css\", {\n        /**\n         * Gets or sets an object in which keys are UI elements and values are CSS classes applied to them.\n         *\n         * [View Demo](/form-library/examples/customize-survey-with-css/ (linkStyle))\n         */\n        get: function () {\n            if (!this.cssValue) {\n                this.cssValue = {};\n                this.copyCssClasses(this.cssValue, _defaultCss_defaultV2Css__WEBPACK_IMPORTED_MODULE_4__[\"surveyCss\"].getCss());\n            }\n            return this.cssValue;\n        },\n        set: function (value) {\n            this.setCss(value);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyModel.prototype.setCss = function (value, needMerge) {\n        if (needMerge === void 0) { needMerge = true; }\n        if (needMerge) {\n            this.mergeValues(value, this.css);\n        }\n        else {\n            this.cssValue = value;\n        }\n        this.updateCss();\n        this.updateElementCss(false);\n    };\n    Object.defineProperty(SurveyModel.prototype, \"cssTitle\", {\n        get: function () {\n            return this.css.title;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"cssNavigationComplete\", {\n        get: function () {\n            return this.getNavigationCss(this.cssSurveyNavigationButton, this.css.navigation.complete);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"cssNavigationPreview\", {\n        get: function () {\n            return this.getNavigationCss(this.cssSurveyNavigationButton, this.css.navigation.preview);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"cssNavigationEdit\", {\n        get: function () {\n            return this.getNavigationCss(this.css.navigationButton, this.css.navigation.edit);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"cssNavigationPrev\", {\n        get: function () {\n            return this.getNavigationCss(this.cssSurveyNavigationButton, this.css.navigation.prev);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"cssNavigationStart\", {\n        get: function () {\n            return this.getNavigationCss(this.cssSurveyNavigationButton, this.css.navigation.start);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"cssNavigationNext\", {\n        get: function () {\n            return this.getNavigationCss(this.cssSurveyNavigationButton, this.css.navigation.next);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"cssSurveyNavigationButton\", {\n        get: function () {\n            return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_18__[\"CssClassBuilder\"]().append(this.css.navigationButton).append(this.css.bodyNavigationButton).toString();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"bodyCss\", {\n        get: function () {\n            return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_18__[\"CssClassBuilder\"]().append(this.css.body)\n                .append(this.css.bodyWithTimer, this.showTimerPanel != \"none\" && this.state === \"running\")\n                .append(this.css.body + \"--\" + this.calculatedWidthMode).toString();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"bodyContainerCss\", {\n        get: function () {\n            return this.css.bodyContainer;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyModel.prototype.getNavigationCss = function (main, btn) {\n        return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_18__[\"CssClassBuilder\"]().append(main)\n            .append(btn).toString();\n    };\n    Object.defineProperty(SurveyModel.prototype, \"lazyRendering\", {\n        /**\n         * Specifies whether to enable lazy rendering.\n         *\n         * In default mode, a survey renders the entire current page. With lazy rendering, the survey renders the page gradually as a user scrolls it. This helps reduce survey startup time and oprimizes large surveys for low-end devices.\n         *\n         * Default value: `false`\n         *\n         * [View Demo](https://surveyjs.io/form-library/examples/survey-lazy/ (linkStyle))\n         *\n         * > This is an experimental feature that may not work properly in certain cases.\n         */\n        get: function () {\n            return this.lazyRenderingValue === true;\n        },\n        set: function (val) {\n            if (this.lazyRendering === val)\n                return;\n            this.lazyRenderingValue = val;\n            var page = this.currentPage;\n            if (!!page) {\n                page.updateRows();\n            }\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"isLazyRendering\", {\n        get: function () {\n            return this.lazyRendering || _settings__WEBPACK_IMPORTED_MODULE_14__[\"settings\"].lazyRender.enabled;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyModel.prototype.updateLazyRenderingRowsOnRemovingElements = function () {\n        if (!this.isLazyRendering)\n            return;\n        var page = this.currentPage;\n        if (!!page) {\n            Object(_utils_utils__WEBPACK_IMPORTED_MODULE_15__[\"scrollElementByChildId\"])(page.id);\n        }\n    };\n    Object.defineProperty(SurveyModel.prototype, \"triggers\", {\n        /**\n         * A list of triggers in the survey.\n         *\n         * [Conditional Survey Logic (Triggers)](https://surveyjs.io/form-library/documentation/design-survey/conditional-logic#conditional-survey-logic-triggers (linkStyle))\n         * @see runTriggers\n         * @see onTriggerExecuted\n         */\n        get: function () {\n            return this.getPropertyValue(\"triggers\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"triggers\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"calculatedValues\", {\n        /**\n         * An array of [calculated values](https://surveyjs.io/form-library/documentation/design-survey-conditional-logic#calculated-values).\n         */\n        get: function () {\n            return this.getPropertyValue(\"calculatedValues\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"calculatedValues\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"surveyId\", {\n        /**\n         * The identifier of a survey JSON schema to load from [SurveyJS Service](https://api.surveyjs.io).\n         *\n         * Refer to the following help topic for more information: [Store Survey Results in the SurveyJS Service](https://surveyjs.io/form-library/documentation/handle-survey-results-store#store-survey-results-in-the-surveyjs-service).\n         * @see loadSurveyFromService\n         * @see onLoadedSurveyFromService\n         */\n        get: function () {\n            return this.getPropertyValue(\"surveyId\", \"\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"surveyId\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"surveyPostId\", {\n        /**\n         * An identifier used to save survey results to [SurveyJS Service](https://api.surveyjs.io).\n         *\n         * Refer to the following help topic for more information: [Store Survey Results in the SurveyJS Service](https://surveyjs.io/form-library/documentation/handle-survey-results-store#store-survey-results-in-the-surveyjs-service).\n         * @see onComplete\n         * @see surveyShowDataSaving\n         */\n        get: function () {\n            return this.getPropertyValue(\"surveyPostId\", \"\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"surveyPostId\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"clientId\", {\n        /**\n         * A user identifier (e-mail or other unique ID).\n         *\n         * If your application works with [SurveyJS Service](https://api.surveyjs.io), the ID ensures that users do not pass the same survey twice. On the second run, they will see the [Completed Before page](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#completedBeforeHtml).\n         * @see cookieName\n         */\n        get: function () {\n            return this.getPropertyValue(\"clientId\", \"\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"clientId\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"cookieName\", {\n        /**\n         * A cookie name used to save information about survey completion.\n         *\n         * When this property has a value, the survey creates a cookie with the specified name on completion. This cookie helps ensure that users do not pass the same survey twice. On the second run, they will see the [Completed Before page](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#completedBeforeHtml).\n         * @see clientId\n         */\n        get: function () {\n            return this.getPropertyValue(\"cookieName\", \"\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"cookieName\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"sendResultOnPageNext\", {\n        /**\n         * Specifies whether to save survey results when respondents switch between pages. Handle the [`onPartialSend`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#onPartialSend) event to implement the save operation.\n         *\n         * Alternatively, you can handle the [`onCurrentPageChanged`](#onCurrentPageChanged) and [`onValueChanged`](#onValueChanged) events, as shown in the following demo: [Continue an Incomplete Survey](https://surveyjs.io/form-library/examples/survey-editprevious/).\n         */\n        get: function () {\n            return this.getPropertyValue(\"sendResultOnPageNext\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"sendResultOnPageNext\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"surveyShowDataSaving\", {\n        /**\n         * Specifies whether to show progress when the survey sends data to [SurveyJS Service](https://api.surveyjs.io).\n         *\n         * [View Demo](https://surveyjs.io/form-library/examples/save-survey-results-and-load-surveys-from-surveyjs-service/ (linkStyle))\n         * @see surveyPostId\n         */\n        get: function () {\n            return this.getPropertyValue(\"surveyShowDataSaving\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"surveyShowDataSaving\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"focusFirstQuestionAutomatic\", {\n        /**\n         * Specifies whether to focus the first question on the page on survey startup or when users switch between pages.\n         *\n         * Default value: `true`\n         * @see focusOnFirstError\n         * @see focusFirstQuestion\n         * @see focusQuestion\n         */\n        get: function () {\n            return this.getPropertyValue(\"focusFirstQuestionAutomatic\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"focusFirstQuestionAutomatic\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"focusOnFirstError\", {\n        /**\n         * Specifies whether to focus the first question with a validation error on the current page.\n         *\n         * Default value: `true`\n         * @see validate\n         * @see focusFirstQuestionAutomatic\n         */\n        get: function () {\n            return this.getPropertyValue(\"focusOnFirstError\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"focusOnFirstError\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"showNavigationButtons\", {\n        /**\n         * Gets or sets the position of the Start, Next, Previous, and Complete navigation buttons and controls their visibility.\n         *\n         * Possible values:\n         *\n         * - `\"bottom\"` (default) - Displays the navigation buttons below survey content.\n         * - `\"top\"` - Displays the navigation buttons above survey content.\n         * - `\"both\"` - Displays the navigation buttons above and below survey content.\n         * - `\"none\"` - Hides the navigation buttons. This setting may be useful if you [implement custom external navigation](https://surveyjs.io/form-library/examples/external-form-navigation-system/).\n         * @see goNextPageAutomatic\n         * @see showPrevButton\n         */\n        get: function () {\n            return this.getPropertyValue(\"showNavigationButtons\");\n        },\n        set: function (val) {\n            if (val === true || val === undefined) {\n                val = \"bottom\";\n            }\n            if (val === false) {\n                val = \"none\";\n            }\n            this.setPropertyValue(\"showNavigationButtons\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"showPrevButton\", {\n        /**\n         * Specifies whether to display the Previous button. Set this property to `false` if respondents should not move backward along the survey.\n         * @see showNavigationButtons\n         */\n        get: function () {\n            return this.getPropertyValue(\"showPrevButton\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"showPrevButton\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"showTOC\", {\n        /**\n         * Gets or sets the visibility of the table of contents.\n         *\n         * Default value: `false`\n         *\n         * [View Demo](https://surveyjs.io/form-library/examples/toc-feature/ (linkStyle))\n         * @see tocLocation\n         */\n        get: function () {\n            return this.getPropertyValue(\"showTOC\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"showTOC\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"tocLocation\", {\n        /**\n         * Gets or sets the position of the table of contents. Applies only when the table of contents is visible.\n         *\n         * Possible values:\n         *\n         * - `\"left\"` (default)\n         * - `\"right\"`\n         *\n         * [View Demo](https://surveyjs.io/form-library/examples/toc-feature/ (linkStyle))\n         * @see showTOC\n         */\n        get: function () {\n            return this.getPropertyValue(\"tocLocation\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"tocLocation\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"showTitle\", {\n        /**\n         * Specifies whether to display the [survey title](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#title).\n         *\n         * [View Demo](https://surveyjs.io/form-library/examples/brand-your-survey-header/ (linkStyle))\n         * @see title\n         */\n        get: function () {\n            return this.getPropertyValue(\"showTitle\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"showTitle\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"showPageTitles\", {\n        /**\n         * Specifies whether to display [page titles](https://surveyjs.io/form-library/documentation/api-reference/page-model#title).\n         */\n        get: function () {\n            return this.getPropertyValue(\"showPageTitles\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"showPageTitles\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"showCompletedPage\", {\n        /**\n         * Specifies whether to show the [complete page](https://surveyjs.io/form-library/documentation/design-survey/create-a-multi-page-survey#complete-page).\n         * @see onComplete\n         * @see navigateToUrl\n         */\n        get: function () {\n            return this.getPropertyValue(\"showCompletedPage\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"showCompletedPage\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"navigateToUrl\", {\n        /**\n         * A URL to which respondents should be navigated after survey completion.\n         * @see onNavigateToUrl\n         * @see navigateToUrlOnCondition\n         */\n        get: function () {\n            return this.getPropertyValue(\"navigateToUrl\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"navigateToUrl\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"navigateToUrlOnCondition\", {\n        /**\n         * An array of objects that allows you to navigate respondents to different URLs after survey completion.\n         *\n         * Each object should include the [`expression`](https://surveyjs.io/form-library/documentation/api-reference/urlconditionitem#url) and [`url`](https://surveyjs.io/form-library/documentation/api-reference/urlconditionitem#expression) properties. When `expression` evaluates to `true`, the survey navigates to the corresponding `url`. Refer to the following help topic for more information about expressions: [Expressions](https://surveyjs.io/form-library/documentation/design-survey/conditional-logic#expressions).\n         * @see onNavigateToUrl\n         * @see navigateToUrl\n         */\n        get: function () {\n            return this.getPropertyValue(\"navigateToUrlOnCondition\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"navigateToUrlOnCondition\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyModel.prototype.getNavigateToUrl = function () {\n        var item = this.getExpressionItemOnRunCondition(this.navigateToUrlOnCondition);\n        var url = !!item ? item.url : this.navigateToUrl;\n        if (!!url) {\n            url = this.processText(url, false);\n        }\n        return url;\n    };\n    SurveyModel.prototype.navigateTo = function () {\n        var url = this.getNavigateToUrl();\n        var options = { url: url, allow: true };\n        this.onNavigateToUrl.fire(this, options);\n        if (!options.url || !options.allow)\n            return;\n        Object(_utils_utils__WEBPACK_IMPORTED_MODULE_15__[\"navigateToUrl\"])(options.url);\n    };\n    Object.defineProperty(SurveyModel.prototype, \"requiredText\", {\n        /**\n         * Specifies one or multiple characters that designate required questions.\n         *\n         * Default value: `*`\n         *\n         * [View Demo](https://surveyjs.io/form-library/examples/modify-question-title/ (linkStyle))\n         */\n        get: function () {\n            return this.getPropertyValue(\"requiredText\", \"*\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"requiredText\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyModel.prototype.beforeSettingQuestionErrors = function (question, errors) {\n        this.makeRequiredErrorsInvisible(errors);\n        this.onSettingQuestionErrors.fire(this, {\n            question: question,\n            errors: errors,\n        });\n    };\n    SurveyModel.prototype.beforeSettingPanelErrors = function (question, errors) {\n        this.makeRequiredErrorsInvisible(errors);\n    };\n    SurveyModel.prototype.makeRequiredErrorsInvisible = function (errors) {\n        if (!this.hideRequiredErrors)\n            return;\n        for (var i = 0; i < errors.length; i++) {\n            var erType = errors[i].getErrorType();\n            if (erType == \"required\" || erType == \"requireoneanswer\") {\n                errors[i].visible = false;\n            }\n        }\n    };\n    Object.defineProperty(SurveyModel.prototype, \"questionStartIndex\", {\n        /**\n         * Specifies the initial number or letter from which to start question numbering.\n         *\n         * [Question Numbers](https://surveyjs.io/form-library/documentation/design-survey/configure-question-titles#question-numbers (linkStyle))\n         */\n        get: function () {\n            return this.getPropertyValue(\"questionStartIndex\", \"\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"questionStartIndex\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"storeOthersAsComment\", {\n        /**\n         * Specifies whether to store the \"Other\" option response in a separate property.\n         *\n         * Default value: `true`\n         *\n         * Respondents can leave comments when they select \"Other\" in choice-based questions, such as Dropdown or Checkboxes. Comment values are saved in a separate property. The property name is composed of the question `name` and [`commentSuffix`](#commentSuffix). However, you can use the question `name` as a key to store the comment value instead. Disable the `storeOthersAsComment` property in this case.\n         * @see maxOthersLength\n         */\n        get: function () {\n            return this.getPropertyValue(\"storeOthersAsComment\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"storeOthersAsComment\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"maxTextLength\", {\n        /**\n         * Specifies the maximum text length in textual questions ([Single-Line Input](https://surveyjs.io/form-library/examples/text-entry-question/), [Long Text](https://surveyjs.io/form-library/examples/add-open-ended-question-to-a-form/), [Multiple Textboxes](https://surveyjs.io/form-library/examples/multiple-text-box-question/)), measured in characters.\n         *\n         * Default value: 0 (unlimited)\n         *\n         * You can override this setting for individual questions if you specify their [`maxLength`](https://surveyjs.io/form-library/documentation/api-reference/text-entry-question-model#maxLength) property.\n         * @see maxOthersLength\n         */\n        get: function () {\n            return this.getPropertyValue(\"maxTextLength\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"maxTextLength\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"maxOthersLength\", {\n        /**\n         * Specifies the maximum text length for question comments. Applies to questions with the [`showCommentArea`](https://surveyjs.io/form-library/documentation/api-reference/question#showCommentArea) or [`showOtherItem`](https://surveyjs.io/form-library/documentation/api-reference/question#showOtherItem) property set to `true`.\n         *\n         * Default value: 0 (unlimited)\n         * @see maxTextLength\n         */\n        get: function () {\n            return this.getPropertyValue(\"maxOthersLength\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"maxOthersLength\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"goNextPageAutomatic\", {\n        /**\n         * Specifies whether the survey switches to the next page automatically after a user answers all questions on the current page.\n         *\n         * Default value: `false`\n         *\n         * If you enable this property, the survey is also completed automatically. Set the [`allowCompleteSurveyAutomatic`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#allowCompleteSurveyAutomatic) property to `false` if you want to disable this behavior.\n         *\n         * > If any of the following questions is answered last, the survey does not switch to the next page: Checkboxes, Yes/No (Boolean) (rendered as Checkbox), Long Text, Signature, Image Picker (with Multi Select), File Upload, Single-Select Matrix (not all rows are answered), Dynamic Matrix, Dynamic Panel.\n         *\n         * [View Demo](https://surveyjs.io/form-library/examples/automatically-move-to-next-page-if-answer-selected/ (linkStyle))\n         */\n        get: function () {\n            return this.getPropertyValue(\"goNextPageAutomatic\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"goNextPageAutomatic\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"allowCompleteSurveyAutomatic\", {\n        /**\n         * Specifies whether to complete the survey automatically after a user answers all questions on the last page. Applies only if the [`goNextPageAutomatic`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#goNextPageAutomatic) property is `true`.\n         *\n         * Default value: `true`\n         */\n        get: function () {\n            return this.getPropertyValue(\"allowCompleteSurveyAutomatic\", true);\n        },\n        set: function (val) {\n            this.setPropertyValue(\"allowCompleteSurveyAutomatic\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"checkErrorsMode\", {\n        /**\n         * Specifies when the survey validates answers.\n         *\n         * Possible values:\n         *\n         * - `\"onNextPage\"` (default) - Triggers validation before the survey is switched to the next page or completed.\n         * - `\"onValueChanged\"` - Triggers validation each time a question value is changed.\n         * - `\"onComplete\"` - Triggers validation when a user clicks the Complete button. If previous pages contain errors, the survey switches to the page with the first error.\n         *\n         * Refer to the following help topic for more information: [Data Validation](https://surveyjs.io/form-library/documentation/data-validation).\n         */\n        get: function () {\n            return this.getPropertyValue(\"checkErrorsMode\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"checkErrorsMode\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"autoGrowComment\", {\n        /**\n         * Specifies whether to increase the height of [Long Text](https://surveyjs.io/form-library/examples/add-open-ended-question-to-a-form/) questions and other text areas to accommodate multi-line text content.\n         *\n         * Default value: `false`\n         *\n         * You can override this property for individual Long Text questions: [`autoGrow`](https://surveyjs.io/form-library/documentation/api-reference/comment-field-model#autoGrow).\n         * @see allowResizeComment\n         */\n        get: function () {\n            return this.getPropertyValue(\"autoGrowComment\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"autoGrowComment\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"allowResizeComment\", {\n        /**\n         * Specifies whether to display a resize handle for [Long Text](https://surveyjs.io/form-library/examples/add-open-ended-question-to-a-form/) questions and other text areas intended for multi-line text content.\n         *\n         * Default value: `true`\n         *\n         * You can override this property for individual Long Text questions: [`allowResize`](https://surveyjs.io/form-library/documentation/api-reference/comment-field-model#allowResize).\n         * @see autoGrowComment\n         */\n        get: function () {\n            return this.getPropertyValue(\"allowResizeComment\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"allowResizeComment\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"textUpdateMode\", {\n        /**\n         * Specifies when to update the question value in questions with a text input field.\n         *\n         * Possible values:\n         *\n         * - `\"onBlur\"` (default) - Updates the value after the input field loses focus.\n         * - `\"onTyping\"` - Updates the value on every key press.\n         *\n         * > Do not use the `\"onTyping\"` mode if your survey contains many expressions. Expressions are reevaluated each time a question value is changed. In `\"onTyping\"` mode, the question value changes frequently. This may cause performance degradation.\n         *\n         * You can override this setting for individual questions: [`textUpdateMode`](https://surveyjs.io/form-library/documentation/api-reference/text-entry-question-model#textUpdateMode).\n         */\n        get: function () {\n            return this.getPropertyValue(\"textUpdateMode\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"textUpdateMode\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"clearInvisibleValues\", {\n        /**\n         * Specifies when to remove values of invisible questions from [survey results](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#data).\n         *\n         * Possible values:\n         *\n         * - `\"onComplete\"` (default) - Clears invisible question values when the survey is complete.\n         * - `\"onHidden\"` - Clears a question value when the question becomes invisible. If the question is invisible initially, its value is removed on survey completion.\n         * - `\"onHiddenContainer\"` - Clears a question value when the question or its containter (page or panel) becomes invisible. If the question is invisible initially, its value is removed on survey completion.\n         * - `\"none\"` - Keeps invisible values in survey results.\n         * - `true` - Equivalent to `\"onComplete\"`.\n         * - `false` - Equivalent to `\"none\"`.\n         * @see [Conditional Visibility](https://surveyjs.io/form-library/documentation/design-survey/conditional-logic#conditional-visibility)\n         * @see onComplete\n         */\n        get: function () {\n            return this.getPropertyValue(\"clearInvisibleValues\");\n        },\n        set: function (val) {\n            if (val === true)\n                val = \"onComplete\";\n            if (val === false)\n                val = \"none\";\n            this.setPropertyValue(\"clearInvisibleValues\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    /**\n     * Removes values that cannot be assigned to a question, for example, choices unlisted in the `choices` array.\n     *\n     * Call this method after you assign new question values in code to ensure that they are acceptable.\n     *\n     * > This method does not remove values that fail validation. Call the [`validate()`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#validate) method to validate newly assigned values.\n     * @param removeNonExistingRootKeys Pass `true` to remove values that do not correspond to any question or [calculated value](https://surveyjs.io/form-library/documentation/design-survey/conditional-logic#calculated-values).\n     */\n    SurveyModel.prototype.clearIncorrectValues = function (removeNonExistingRootKeys) {\n        if (removeNonExistingRootKeys === void 0) { removeNonExistingRootKeys = false; }\n        for (var i = 0; i < this.pages.length; i++) {\n            this.pages[i].clearIncorrectValues();\n        }\n        if (!removeNonExistingRootKeys)\n            return;\n        var data = this.data;\n        var hasChanges = false;\n        for (var key in data) {\n            if (!!this.getQuestionByValueName(key))\n                continue;\n            if (this.iscorrectValueWithPostPrefix(key, _settings__WEBPACK_IMPORTED_MODULE_14__[\"settings\"].commentSuffix) ||\n                this.iscorrectValueWithPostPrefix(key, _settings__WEBPACK_IMPORTED_MODULE_14__[\"settings\"].matrix.totalsSuffix))\n                continue;\n            var calcValue = this.getCalculatedValueByName(key);\n            if (!!calcValue && calcValue.includeIntoResult)\n                continue;\n            hasChanges = true;\n            delete data[key];\n        }\n        if (hasChanges) {\n            this.data = data;\n        }\n    };\n    SurveyModel.prototype.iscorrectValueWithPostPrefix = function (key, postPrefix) {\n        if (key.indexOf(postPrefix) !== key.length - postPrefix.length)\n            return false;\n        return !!this.getQuestionByValueName(key.substring(0, key.indexOf(postPrefix)));\n    };\n    Object.defineProperty(SurveyModel.prototype, \"keepIncorrectValues\", {\n        /**\n         * Specifies whether to keep values that cannot be assigned to questions, for example, choices unlisted in the `choices` array.\n         *\n         * > This property cannot be specified in the survey JSON schema. Use dot notation to specify it.\n         * @see clearIncorrectValues\n         */\n        get: function () {\n            return this.getPropertyValue(\"keepIncorrectValues\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"keepIncorrectValues\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"locale\", {\n        /**\n         * Specifies the survey's locale.\n         *\n         * Default value: `\"\"` (a default locale is used)\n         *\n         * [Localization & Globalization help topic](https://surveyjs.io/form-library/documentation/survey-localization (linkStyle))\n         *\n         * [Survey Localization demo](https://surveyjs.io/form-library/examples/survey-localization/ (linkStyle))\n         */\n        get: function () {\n            return this.getPropertyValue(\"locale\", _surveyStrings__WEBPACK_IMPORTED_MODULE_8__[\"surveyLocalization\"].currentLocale);\n        },\n        set: function (value) {\n            if (value === _surveyStrings__WEBPACK_IMPORTED_MODULE_8__[\"surveyLocalization\"].defaultLocale && !_surveyStrings__WEBPACK_IMPORTED_MODULE_8__[\"surveyLocalization\"].currentLocale) {\n                value = \"\";\n            }\n            this.setPropertyValue(\"locale\", value);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyModel.prototype.onSurveyLocaleChanged = function () {\n        this.notifyElementsOnAnyValueOrVariableChanged(\"locale\");\n        this.localeChanged();\n        this.onLocaleChangedEvent.fire(this, this.locale);\n    };\n    /**\n     * Returns an array of locales whose translations are used in the survey.\n     *\n     * [Localization & Globalization help topic](https://surveyjs.io/form-library/documentation/survey-localization (linkStyle))\n     *\n     * [Survey Localization demo](https://surveyjs.io/form-library/examples/survey-localization/ (linkStyle))\n     */\n    SurveyModel.prototype.getUsedLocales = function () {\n        var locs = new Array();\n        this.addUsedLocales(locs);\n        //Replace the default locale with the real one\n        var index = locs.indexOf(\"default\");\n        if (index > -1) {\n            var defaultLoc = _surveyStrings__WEBPACK_IMPORTED_MODULE_8__[\"surveyLocalization\"].defaultLocale;\n            //Remove the defaultLoc\n            var defIndex = locs.indexOf(defaultLoc);\n            if (defIndex > -1) {\n                locs.splice(defIndex, 1);\n            }\n            index = locs.indexOf(\"default\");\n            locs[index] = defaultLoc;\n        }\n        return locs;\n    };\n    SurveyModel.prototype.localeChanged = function () {\n        for (var i = 0; i < this.pages.length; i++) {\n            this.pages[i].localeChanged();\n        }\n    };\n    //ILocalizableOwner\n    SurveyModel.prototype.getLocale = function () {\n        return this.locale;\n    };\n    SurveyModel.prototype.locStrsChanged = function () {\n        _super.prototype.locStrsChanged.call(this);\n        if (!this.currentPage)\n            return;\n        if (this.isDesignMode) {\n            this.pages.forEach(function (page) { return page.locStrsChanged(); });\n        }\n        else {\n            var page = this.activePage;\n            if (!!page) {\n                page.locStrsChanged();\n            }\n            var visPages = this.visiblePages;\n            for (var i = 0; i < visPages.length; i++) {\n                visPages[i].navigationLocStrChanged();\n            }\n        }\n        if (!this.isShowStartingPage) {\n            this.updateProgressText();\n        }\n        this.navigationBar.locStrsChanged();\n    };\n    SurveyModel.prototype.getMarkdownHtml = function (text, name) {\n        return this.getSurveyMarkdownHtml(this, text, name);\n    };\n    SurveyModel.prototype.getRenderer = function (name) {\n        return this.getRendererForString(this, name);\n    };\n    SurveyModel.prototype.getRendererContext = function (locStr) {\n        return this.getRendererContextForString(this, locStr);\n    };\n    SurveyModel.prototype.getRendererForString = function (element, name) {\n        var renderAs = this.getBuiltInRendererForString(element, name);\n        var options = { element: element, name: name, renderAs: renderAs };\n        this.onTextRenderAs.fire(this, options);\n        return options.renderAs;\n    };\n    SurveyModel.prototype.getRendererContextForString = function (element, locStr) {\n        return locStr;\n    };\n    SurveyModel.prototype.getExpressionDisplayValue = function (question, value, displayValue) {\n        var options = {\n            question: question,\n            value: value,\n            displayValue: displayValue,\n        };\n        this.onGetExpressionDisplayValue.fire(this, options);\n        return options.displayValue;\n    };\n    SurveyModel.prototype.getBuiltInRendererForString = function (element, name) {\n        if (this.isDesignMode)\n            return _localizablestring__WEBPACK_IMPORTED_MODULE_10__[\"LocalizableString\"].editableRenderer;\n        return undefined;\n    };\n    SurveyModel.prototype.getProcessedText = function (text) {\n        return this.processText(text, true);\n    };\n    SurveyModel.prototype.getLocString = function (str) {\n        return this.getLocalizationString(str);\n    };\n    //ISurveyErrorOwner\n    SurveyModel.prototype.getErrorCustomText = function (text, error) {\n        return this.getSurveyErrorCustomText(this, text, error);\n    };\n    SurveyModel.prototype.getSurveyErrorCustomText = function (obj, text, error) {\n        var options = {\n            text: text,\n            name: error.getErrorType(),\n            obj: obj,\n            error: error\n        };\n        this.onErrorCustomText.fire(this, options);\n        return options.text;\n    };\n    SurveyModel.prototype.getQuestionDisplayValue = function (question, displayValue) {\n        var options = { question: question, displayValue: displayValue };\n        this.onGetQuestionDisplayValue.fire(this, options);\n        return options.displayValue;\n    };\n    Object.defineProperty(SurveyModel.prototype, \"emptySurveyText\", {\n        /**\n         * Returns a message that is displayed when a survey does not contain visible pages or questions.\n         * @see [Localization & Globalization](https://surveyjs.io/form-library/documentation/survey-localization)\n         */\n        get: function () {\n            return this.getLocalizationString(\"emptySurvey\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"logo\", {\n        //#region Title/Header options\n        /**\n         * An image URL or a Base64-encoded image to use as a survey logo.\n         *\n         * [View Demo](https://surveyjs.io/form-library/examples/survey-logo/ (linkStyle))\n         * @see logoPosition\n         * @see logoFit\n         */\n        get: function () {\n            return this.getLocalizableStringText(\"logo\");\n        },\n        set: function (value) {\n            this.setLocalizableStringText(\"logo\", value);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"locLogo\", {\n        get: function () {\n            return this.getLocalizableString(\"logo\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"logoWidth\", {\n        /**\n         * A logo width in CSS-accepted values.\n         *\n         * Default value: `300px`\n         *\n         * [View Demo](https://surveyjs.io/form-library/examples/survey-logo/ (linkStyle))\n         * @see logoHeight\n         * @see logo\n         * @see logoPosition\n         * @see logoFit\n         */\n        get: function () {\n            return this.getPropertyValue(\"logoWidth\");\n        },\n        set: function (value) {\n            this.setPropertyValue(\"logoWidth\", value);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"renderedLogoWidth\", {\n        get: function () {\n            return this.logoWidth ? Object(_utils_utils__WEBPACK_IMPORTED_MODULE_15__[\"getRenderedSize\"])(this.logoWidth) : undefined;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"renderedStyleLogoWidth\", {\n        get: function () {\n            return this.logoWidth ? Object(_utils_utils__WEBPACK_IMPORTED_MODULE_15__[\"getRenderedStyleSize\"])(this.logoWidth) : undefined;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"logoHeight\", {\n        /**\n         * A logo height in CSS-accepted values.\n         *\n         * Default value: `200px`\n         *\n         * [View Demo](https://surveyjs.io/form-library/examples/survey-logo/ (linkStyle))\n         * @see logoHeight\n         * @see logo\n         * @see logoPosition\n         * @see logoFit\n         */\n        get: function () {\n            return this.getPropertyValue(\"logoHeight\");\n        },\n        set: function (value) {\n            this.setPropertyValue(\"logoHeight\", value);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"renderedLogoHeight\", {\n        get: function () {\n            return this.logoHeight ? Object(_utils_utils__WEBPACK_IMPORTED_MODULE_15__[\"getRenderedSize\"])(this.logoHeight) : undefined;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"renderedStyleLogoHeight\", {\n        get: function () {\n            return this.logoHeight ? Object(_utils_utils__WEBPACK_IMPORTED_MODULE_15__[\"getRenderedStyleSize\"])(this.logoHeight) : undefined;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"logoPosition\", {\n        /**\n         * A logo position relative to the [survey title](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#title).\n         *\n         * Possible values:\n         *\n         * - `\"left\"` (default) - Places the logo to the left of the survey title.\n         * - `\"right\"` - Places the logo to the right of the survey title.\n         * - `\"none\"` - Hides the logo.\n         *\n         * [View Demo](https://surveyjs.io/form-library/examples/survey-logo/ (linkStyle))\n         * @see logo\n         * @see logoFit\n         */\n        get: function () {\n            return this.getPropertyValue(\"logoPosition\");\n        },\n        set: function (value) {\n            this.setPropertyValue(\"logoPosition\", value);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"hasLogo\", {\n        get: function () {\n            return this.getPropertyValue(\"hasLogo\", false);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyModel.prototype.updateHasLogo = function () {\n        this.setPropertyValue(\"hasLogo\", !!this.logo && this.logoPosition !== \"none\");\n    };\n    Object.defineProperty(SurveyModel.prototype, \"isLogoBefore\", {\n        get: function () {\n            if (this.isDesignMode)\n                return false;\n            return (this.renderedHasLogo &&\n                (this.logoPosition === \"left\" || this.logoPosition === \"top\"));\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"isLogoAfter\", {\n        get: function () {\n            if (this.isDesignMode)\n                return this.renderedHasLogo;\n            return (this.renderedHasLogo &&\n                (this.logoPosition === \"right\" || this.logoPosition === \"bottom\"));\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"logoClassNames\", {\n        get: function () {\n            var logoClasses = {\n                left: \"sv-logo--left\",\n                right: \"sv-logo--right\",\n                top: \"sv-logo--top\",\n                bottom: \"sv-logo--bottom\",\n            };\n            return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_18__[\"CssClassBuilder\"]().append(this.css.logo)\n                .append(logoClasses[this.logoPosition]).toString();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"renderedHasTitle\", {\n        get: function () {\n            if (this.isDesignMode)\n                return this.isPropertyVisible(\"title\");\n            return !this.locTitle.isEmpty && this.showTitle;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"renderedHasDescription\", {\n        get: function () {\n            if (this.isDesignMode)\n                return this.isPropertyVisible(\"description\");\n            return !!this.hasDescription;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"hasTitle\", {\n        get: function () {\n            return this.renderedHasTitle;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"renderedHasLogo\", {\n        get: function () {\n            if (this.isDesignMode)\n                return this.isPropertyVisible(\"logo\");\n            return this.hasLogo;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"renderedHasHeader\", {\n        get: function () {\n            return this.renderedHasTitle || this.renderedHasLogo;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"logoFit\", {\n        /**\n         * Specifies how to resize a logo to fit it into its container.\n         *\n         * Possible values:\n         *\n         * - `\"contain\"` (default)\n         * - `\"cover\"`\n         * - `\"fill\"`\n         * - `\"none\"`\n         *\n         * Refer to the [`object-fit`](https://developer.mozilla.org/en-US/docs/Web/CSS/object-fit) CSS property description for information on the possible values.\n         *\n         * [View Demo](https://surveyjs.io/form-library/examples/survey-logo/ (linkStyle))\n         * @see logo\n         * @see logoPosition\n         */\n        get: function () {\n            return this.getPropertyValue(\"logoFit\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"logoFit\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"themeVariables\", {\n        get: function () {\n            return Object.assign({}, this.cssVariables);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyModel.prototype.setIsMobile = function (newVal) {\n        if (newVal === void 0) { newVal = true; }\n        if (this._isMobile !== newVal) {\n            this._isMobile = newVal;\n            this.updateCss();\n            this.getAllQuestions().map(function (q) { return q.setIsMobile(newVal); });\n        }\n    };\n    Object.defineProperty(SurveyModel.prototype, \"isMobile\", {\n        get: function () {\n            return this._isMobile && !this.isDesignMode;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"isCompact\", {\n        get: function () {\n            return this._isCompact;\n        },\n        set: function (newVal) {\n            if (newVal !== this._isCompact) {\n                this._isCompact = newVal;\n                this.updateElementCss();\n            }\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyModel.prototype.isLogoImageChoosen = function () {\n        return this.locLogo.renderedHtml;\n    };\n    Object.defineProperty(SurveyModel.prototype, \"titleMaxWidth\", {\n        get: function () {\n            if (!(Object(_utils_utils__WEBPACK_IMPORTED_MODULE_15__[\"isMobile\"])() || this.isMobile) &&\n                !this.isValueEmpty(this.isLogoImageChoosen()) &&\n                !_settings__WEBPACK_IMPORTED_MODULE_14__[\"settings\"].supportCreatorV2) {\n                var logoWidth = this.logoWidth;\n                if (this.logoPosition === \"left\" || this.logoPosition === \"right\") {\n                    return \"calc(100% - 5px - 2em - \" + logoWidth + \")\";\n                }\n            }\n            return \"\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyModel.prototype.updateRenderBackgroundImage = function () {\n        var path = this.backgroundImage;\n        this.renderBackgroundImage = Object(_utils_utils__WEBPACK_IMPORTED_MODULE_15__[\"wrapUrlForBackgroundImage\"])(path);\n    };\n    Object.defineProperty(SurveyModel.prototype, \"backgroundOpacity\", {\n        /**\n         * A value from 0 to 1 that specifies how transparent the [background image](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#backgroundImage) should be: 0 makes the image completely transparent, and 1 makes it opaque.\n         */\n        get: function () {\n            return this.getPropertyValue(\"backgroundOpacity\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"backgroundOpacity\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"backgroundImageStyle\", {\n        get: function () {\n            return {\n                opacity: this.backgroundOpacity,\n                backgroundImage: this.renderBackgroundImage,\n                backgroundSize: this.backgroundImageFit,\n                backgroundAttachment: this.backgroundImageAttachment\n            };\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"completedHtml\", {\n        /**\n         * HTML content displayed on the [complete page](https://surveyjs.io/form-library/documentation/design-survey/create-a-multi-page-survey#complete-page).\n         *\n         * [View Demo](https://surveyjs.io/form-library/examples/modify-survey-navigation-settings/ (linkStyle))\n         * @see showCompletedPage\n         * @see completedHtmlOnCondition\n         */\n        get: function () {\n            return this.getLocalizableStringText(\"completedHtml\");\n        },\n        set: function (value) {\n            this.setLocalizableStringText(\"completedHtml\", value);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"locCompletedHtml\", {\n        get: function () {\n            return this.getLocalizableString(\"completedHtml\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"completedHtmlOnCondition\", {\n        /**\n         * An array of objects that allows you to specify different HTML content for the [complete page](https://surveyjs.io/form-library/documentation/design-survey/create-a-multi-page-survey#complete-page).\n         *\n         * Each object should include the [`expression`](https://surveyjs.io/form-library/documentation/api-reference/htmlconditionitem#expression) and [`html`](https://surveyjs.io/form-library/documentation/api-reference/htmlconditionitem#html) properties. When `expression` evaluates to `true`, the survey uses the corresponding HTML markup instead of [`completedHtml`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#completedHtml). Refer to the following help topic for more information about expressions: [Expressions](https://surveyjs.io/form-library/documentation/design-survey/conditional-logic#expressions).\n         *\n         * [View Demo](https://surveyjs.io/form-library/examples/nps-question/ (linkStyle))\n         */\n        get: function () {\n            return this.getPropertyValue(\"completedHtmlOnCondition\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"completedHtmlOnCondition\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    /**\n     * Calculates a given [expression](https://surveyjs.io/form-library/documentation/design-survey/conditional-logic#expressions) and returns a result value.\n     * @param expression An expression to calculate.\n     */\n    SurveyModel.prototype.runExpression = function (expression) {\n        if (!expression)\n            return null;\n        var values = this.getFilteredValues();\n        var properties = this.getFilteredProperties();\n        return new _conditions__WEBPACK_IMPORTED_MODULE_13__[\"ExpressionRunner\"](expression).run(values, properties);\n    };\n    /**\n     * Calculates a given [expression](https://surveyjs.io/form-library/documentation/design-survey/conditional-logic#expressions) and returns `true` or `false`.\n     * @param expression An expression to calculate.\n     */\n    SurveyModel.prototype.runCondition = function (expression) {\n        if (!expression)\n            return false;\n        var values = this.getFilteredValues();\n        var properties = this.getFilteredProperties();\n        return new _conditions__WEBPACK_IMPORTED_MODULE_13__[\"ConditionRunner\"](expression).run(values, properties);\n    };\n    /**\n     * Executes [all triggers](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#triggers), except [\"complete\"](https://surveyjs.io/form-library/documentation/design-survey/conditional-logic#complete).\n     *\n     * [Conditional Survey Logic (Triggers)](https://surveyjs.io/form-library/documentation/design-survey/conditional-logic#conditional-survey-logic-triggers (linkStyle))\n     * @see onTriggerExecuted\n     */\n    SurveyModel.prototype.runTriggers = function () {\n        this.checkTriggers(this.getFilteredValues(), false);\n    };\n    Object.defineProperty(SurveyModel.prototype, \"renderedCompletedHtml\", {\n        get: function () {\n            var item = this.getExpressionItemOnRunCondition(this.completedHtmlOnCondition);\n            return !!item ? item.html : this.completedHtml;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyModel.prototype.getExpressionItemOnRunCondition = function (items) {\n        if (items.length == 0)\n            return null;\n        var values = this.getFilteredValues();\n        var properties = this.getFilteredProperties();\n        for (var i = 0; i < items.length; i++) {\n            if (items[i].runCondition(values, properties)) {\n                return items[i];\n            }\n        }\n        return null;\n    };\n    Object.defineProperty(SurveyModel.prototype, \"completedBeforeHtml\", {\n        /**\n         * HTML content displayed to a user who has completed the survey before. To identify such users, the survey uses a [cookie name](#cookieName) or [client ID](#clientId).\n         * @see processedCompletedBeforeHtml\n         */\n        get: function () {\n            return this.getLocalizableStringText(\"completedBeforeHtml\");\n        },\n        set: function (value) {\n            this.setLocalizableStringText(\"completedBeforeHtml\", value);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"locCompletedBeforeHtml\", {\n        get: function () {\n            return this.getLocalizableString(\"completedBeforeHtml\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"loadingHtml\", {\n        /**\n         * HTML content displayed while a survey JSON schema is being loaded from [SurveyJS Service](https://api.surveyjs.io).\n         * @see surveyId\n         * @see processedLoadingHtml\n         */\n        get: function () {\n            return this.getLocalizableStringText(\"loadingHtml\");\n        },\n        set: function (value) {\n            this.setLocalizableStringText(\"loadingHtml\", value);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"locLoadingHtml\", {\n        get: function () {\n            return this.getLocalizableString(\"loadingHtml\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"defaultLoadingHtml\", {\n        get: function () {\n            return \"<h3>\" + this.getLocalizationString(\"loadingSurvey\") + \"</h3>\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"navigationBar\", {\n        get: function () {\n            return this.navigationBarValue;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    /**\n     * Adds a custom navigation item similar to the Previous Page, Next Page, and Complete buttons.\n     * Accepts an object described in the [IAction](https://surveyjs.io/Documentation/Library?id=IAction) help section.\n     *\n     * [View Demo](https://surveyjs.io/form-library/examples/survey-changenavigation/ (linkStyle))\n    */\n    SurveyModel.prototype.addNavigationItem = function (val) {\n        if (!val.component) {\n            val.component = \"sv-nav-btn\";\n        }\n        if (!val.innerCss) {\n            val.innerCss = this.cssSurveyNavigationButton;\n        }\n        return this.navigationBar.addAction(val);\n    };\n    Object.defineProperty(SurveyModel.prototype, \"startSurveyText\", {\n        /**\n         * Gets or sets a caption for the Start button.\n         * @see firstPageIsStarted\n         * @see [Localization & Globalization](https://surveyjs.io/form-library/documentation/survey-localization)\n         */\n        get: function () {\n            return this.getLocalizableStringText(\"startSurveyText\");\n        },\n        set: function (newValue) {\n            this.setLocalizableStringText(\"startSurveyText\", newValue);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"locStartSurveyText\", {\n        get: function () {\n            return this.getLocalizableString(\"startSurveyText\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"pagePrevText\", {\n        /**\n         * Gets or sets a caption for the Previous button.\n         * @see [Localization & Globalization](https://surveyjs.io/form-library/documentation/survey-localization)\n         */\n        get: function () {\n            return this.getLocalizableStringText(\"pagePrevText\");\n        },\n        set: function (newValue) {\n            this.setLocalizableStringText(\"pagePrevText\", newValue);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"locPagePrevText\", {\n        get: function () {\n            return this.getLocalizableString(\"pagePrevText\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"pageNextText\", {\n        /**\n         * Gets or sets a caption for the Next button.\n         * @see [Localization & Globalization](https://surveyjs.io/form-library/documentation/survey-localization)\n         */\n        get: function () {\n            return this.getLocalizableStringText(\"pageNextText\");\n        },\n        set: function (newValue) {\n            this.setLocalizableStringText(\"pageNextText\", newValue);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"locPageNextText\", {\n        get: function () {\n            return this.getLocalizableString(\"pageNextText\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"completeText\", {\n        /**\n         * Gets or sets a caption for the Complete button.\n         * @see [Localization & Globalization](https://surveyjs.io/form-library/documentation/survey-localization)\n         */\n        get: function () {\n            return this.getLocalizableStringText(\"completeText\");\n        },\n        set: function (newValue) {\n            this.setLocalizableStringText(\"completeText\", newValue);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"locCompleteText\", {\n        get: function () {\n            return this.getLocalizableString(\"completeText\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"previewText\", {\n        /**\n         * Gets or sets a caption for the Preview button.\n         * @see showPreviewBeforeComplete\n         * @see showPreview\n         * @see editText\n         */\n        get: function () {\n            return this.getLocalizableStringText(\"previewText\");\n        },\n        set: function (newValue) {\n            this.setLocalizableStringText(\"previewText\", newValue);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"locPreviewText\", {\n        get: function () {\n            return this.getLocalizableString(\"previewText\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"editText\", {\n        /**\n         * Gets or sets a caption for the Edit button displayed when the survey shows a [preview of given answers](https://surveyjs.io/form-library/documentation/design-survey/create-a-multi-page-survey#preview-page).\n         * @see showPreviewBeforeComplete\n         * @see cancelPreview\n         * @see previewText\n         */\n        get: function () {\n            return this.getLocalizableStringText(\"editText\");\n        },\n        set: function (newValue) {\n            this.setLocalizableStringText(\"editText\", newValue);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"locEditText\", {\n        get: function () {\n            return this.getLocalizableString(\"editText\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyModel.prototype.getElementTitleTagName = function (element, tagName) {\n        if (this.onGetTitleTagName.isEmpty)\n            return tagName;\n        var options = { element: element, tagName: tagName };\n        this.onGetTitleTagName.fire(this, options);\n        return options.tagName;\n    };\n    Object.defineProperty(SurveyModel.prototype, \"questionTitlePattern\", {\n        /**\n         * Specifies a pattern for question titles.\n         *\n         * Refer to the following help topic for more information: [Title Pattern](https://surveyjs.io/form-library/documentation/design-survey/configure-question-titles#title-pattern).\n         */\n        get: function () {\n            return this.getPropertyValue(\"questionTitlePattern\", \"numTitleRequire\");\n        },\n        set: function (val) {\n            if (val !== \"numRequireTitle\" &&\n                val !== \"requireNumTitle\" &&\n                val != \"numTitle\") {\n                val = \"numTitleRequire\";\n            }\n            this.setPropertyValue(\"questionTitlePattern\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyModel.prototype.getQuestionTitlePatternOptions = function () {\n        var res = new Array();\n        var title = this.getLocalizationString(\"questionTitlePatternText\");\n        var num = !!this.questionStartIndex ? this.questionStartIndex : \"1.\";\n        res.push({\n            value: \"numTitleRequire\",\n            text: num + \" \" + title + \" \" + this.requiredText\n        });\n        res.push({\n            value: \"numRequireTitle\",\n            text: num + \" \" + this.requiredText + \" \" + title\n        });\n        res.push({\n            value: \"requireNumTitle\",\n            text: this.requiredText + \" \" + num + \" \" + title\n        });\n        res.push({\n            value: \"numTitle\",\n            text: num + \" \" + title\n        });\n        return res;\n    };\n    Object.defineProperty(SurveyModel.prototype, \"questionTitleTemplate\", {\n        get: function () {\n            return this.getLocalizableStringText(\"questionTitleTemplate\");\n        },\n        set: function (value) {\n            this.setLocalizableStringText(\"questionTitleTemplate\", value);\n            this.questionTitlePattern = this.getNewTitlePattern(value);\n            this.questionStartIndex = this.getNewQuestionTitleElement(value, \"no\", this.questionStartIndex, \"1\");\n            this.requiredText = this.getNewQuestionTitleElement(value, \"require\", this.requiredText, \"*\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyModel.prototype.getNewTitlePattern = function (template) {\n        if (!!template) {\n            var strs = [];\n            while (template.indexOf(\"{\") > -1) {\n                template = template.substring(template.indexOf(\"{\") + 1);\n                var ind = template.indexOf(\"}\");\n                if (ind < 0)\n                    break;\n                strs.push(template.substring(0, ind));\n                template = template.substring(ind + 1);\n            }\n            if (strs.length > 1) {\n                if (strs[0] == \"require\")\n                    return \"requireNumTitle\";\n                if (strs[1] == \"require\" && strs.length == 3)\n                    return \"numRequireTitle\";\n                if (strs.indexOf(\"require\") < 0)\n                    return \"numTitle\";\n            }\n            if (strs.length == 1 && strs[0] == \"title\") {\n                return \"numTitle\";\n            }\n        }\n        return \"numTitleRequire\";\n    };\n    SurveyModel.prototype.getNewQuestionTitleElement = function (template, name, currentValue, defaultValue) {\n        name = \"{\" + name + \"}\";\n        if (!template || template.indexOf(name) < 0)\n            return currentValue;\n        var ind = template.indexOf(name);\n        var prefix = \"\";\n        var postfix = \"\";\n        var i = ind - 1;\n        for (; i >= 0; i--) {\n            if (template[i] == \"}\")\n                break;\n        }\n        if (i < ind - 1) {\n            prefix = template.substring(i + 1, ind);\n        }\n        ind += name.length;\n        i = ind;\n        for (; i < template.length; i++) {\n            if (template[i] == \"{\")\n                break;\n        }\n        if (i > ind) {\n            postfix = template.substring(ind, i);\n        }\n        i = 0;\n        while (i < prefix.length && prefix.charCodeAt(i) < 33)\n            i++;\n        prefix = prefix.substring(i);\n        i = postfix.length - 1;\n        while (i >= 0 && postfix.charCodeAt(i) < 33)\n            i--;\n        postfix = postfix.substring(0, i + 1);\n        if (!prefix && !postfix)\n            return currentValue;\n        var value = !!currentValue ? currentValue : defaultValue;\n        return prefix + value + postfix;\n    };\n    Object.defineProperty(SurveyModel.prototype, \"locQuestionTitleTemplate\", {\n        get: function () {\n            return this.getLocalizableString(\"questionTitleTemplate\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyModel.prototype.getUpdatedQuestionTitle = function (question, title) {\n        if (this.onGetQuestionTitle.isEmpty)\n            return title;\n        var options = { question: question, title: title };\n        this.onGetQuestionTitle.fire(this, options);\n        return options.title;\n    };\n    SurveyModel.prototype.getUpdatedQuestionNo = function (question, no) {\n        if (this.onGetQuestionNo.isEmpty)\n            return no;\n        var options = { question: question, no: no };\n        this.onGetQuestionNo.fire(this, options);\n        return options.no;\n    };\n    Object.defineProperty(SurveyModel.prototype, \"showPageNumbers\", {\n        /**\n         * Specifies whether page titles contain page numbers.\n         *\n         * [View Demo](https://surveyjs.io/form-library/examples/how-to-number-pages-and-questions/ (linkStyle))\n         */\n        get: function () {\n            return this.getPropertyValue(\"showPageNumbers\");\n        },\n        set: function (value) {\n            if (value === this.showPageNumbers)\n                return;\n            this.setPropertyValue(\"showPageNumbers\", value);\n            this.updateVisibleIndexes();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"showQuestionNumbers\", {\n        /**\n         * Specifies whether to display question numbers and how to calculate them.\n         *\n         * Possible values:\n         *\n         * - `true` or `\"on\"` - Displays question numbers.\n         * - `\"onpage\"` - Displays question numbers and starts numbering on each page from scratch.\n         * - `false` or `\"off\"` - Hides question numbers.\n         *\n         * [View Demo](https://surveyjs.io/form-library/examples/how-to-number-pages-and-questions/ (linkStyle))\n         *\n         * If you want to hide the number of an individual question, enable its [`hideNumber`](https://surveyjs.io/form-library/documentation/api-reference/question#hideNumber) property.\n         */\n        get: function () {\n            return this.getPropertyValue(\"showQuestionNumbers\");\n        },\n        set: function (value) {\n            if (value === true) {\n                value = \"on\";\n            }\n            if (value === false) {\n                value = \"off\";\n            }\n            value = value.toLowerCase();\n            value = value === \"onpage\" ? \"onPage\" : value;\n            if (value === this.showQuestionNumbers)\n                return;\n            this.setPropertyValue(\"showQuestionNumbers\", value);\n            this.updateVisibleIndexes();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"showProgressBar\", {\n        /**\n         * Controls the visibility of the progress bar and specifies its position.\n         *\n         * Possible values:\n         *\n         * - `\"off\"` (default) - Hides the progress bar.\n         * - `\"top\"` - Displays the progress bar above survey content.\n         * - `\"bottom\"` - Displays the progress bar below survey content.\n         * - `\"both\"` - Displays the progress bar above and below survey content.\n         *\n         * [View Demo](https://surveyjs.io/form-library/examples/navigation-default/ (linkStyle))\n         * @see progressBarType\n         * @see progressValue\n         */\n        get: function () {\n            return this.getPropertyValue(\"showProgressBar\");\n        },\n        set: function (newValue) {\n            this.setPropertyValue(\"showProgressBar\", newValue.toLowerCase());\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"progressBarType\", {\n        /**\n         * Specifies the type of information displayed by the progress bar. Applies only when [`showProgressBar`](#showProgressBar) is not `\"off\"`.\n         *\n         * Possible values:\n         *\n         * - `\"pages\"` (default) - The number of completed pages.\n         * - `\"questions\"` - The number of answered questions.\n         * - `\"requiredQuestions\"` - The number of answered [required questions](https://surveyjs.io/form-library/documentation/api-reference/question#isRequired).\n         * - `\"correctQuestions\"` - The number of correct questions in a [quiz](https://surveyjs.io/form-library/documentation/design-survey/create-a-quiz).\n         * - `\"buttons\"` - Adds jump links to the progress bar.\n         *\n         * [View Demo](https://surveyjs.io/form-library/examples/navigation-buttons/ (linkStyle))\n         * @see progressValue\n         */\n        get: function () {\n            return this.getPropertyValue(\"progressBarType\");\n        },\n        set: function (newValue) {\n            if (newValue === \"correctquestion\")\n                newValue = \"correctQuestion\";\n            if (newValue === \"requiredquestion\")\n                newValue = \"requiredQuestion\";\n            this.setPropertyValue(\"progressBarType\", newValue);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"isShowProgressBarOnTop\", {\n        get: function () {\n            if (!this.canShowProresBar())\n                return false;\n            return this.showProgressBar === \"top\" || this.showProgressBar === \"both\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"isShowProgressBarOnBottom\", {\n        get: function () {\n            if (!this.canShowProresBar())\n                return false;\n            return this.showProgressBar === \"bottom\" || this.showProgressBar === \"both\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyModel.prototype.getProgressTypeComponent = function () {\n        return \"sv-progress-\" + this.progressBarType.toLowerCase();\n    };\n    SurveyModel.prototype.getProgressCssClasses = function (container) {\n        if (container === void 0) { container = \"\"; }\n        return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_18__[\"CssClassBuilder\"]()\n            .append(this.css.progress)\n            .append(this.css.progressTop, this.isShowProgressBarOnTop && (!container || container == \"header\"))\n            .append(this.css.progressBottom, this.isShowProgressBarOnBottom && (!container || container == \"footer\"))\n            .toString();\n    };\n    SurveyModel.prototype.canShowProresBar = function () {\n        return (!this.isShowingPreview ||\n            this.showPreviewBeforeComplete != \"showAllQuestions\");\n    };\n    Object.defineProperty(SurveyModel.prototype, \"processedTitle\", {\n        get: function () {\n            return this.locTitle.renderedHtml;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"questionTitleLocation\", {\n        /**\n         * Gets or sets question title location relative to the input field: `\"top\"`, `\"bottom\"`, or `\"left\"`.\n         *\n         * > Certain question types (Matrix, Multiple Text) do not support the `\"left\"` value. For them, the `\"top\"` value is used.\n         *\n         * You can override this setting if you specify the `questionTitleLocation` property for an [individual page](https://surveyjs.io/form-library/documentation/pagemodel#questionTitleLocation) or [panel](https://surveyjs.io/form-library/documentation/panelmodel#questionTitleLocation) or set the `titleLocation` property for a [specific question](https://surveyjs.io/form-library/documentation/question#titleLocation).\n         */\n        get: function () {\n            return this.getPropertyValue(\"questionTitleLocation\");\n        },\n        set: function (value) {\n            this.setPropertyValue(\"questionTitleLocation\", value.toLowerCase());\n            if (!this.isLoadingFromJson) {\n                this.updateElementCss(true);\n            }\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyModel.prototype.updateElementCss = function (reNew) {\n        if (!!this.startedPage) {\n            this.startedPage.updateElementCss(reNew);\n        }\n        var pages = this.visiblePages;\n        for (var i = 0; i < pages.length; i++) {\n            pages[i].updateElementCss(reNew);\n        }\n        this.updateCss();\n    };\n    Object.defineProperty(SurveyModel.prototype, \"questionErrorLocation\", {\n        /**\n         * Specifies the error message position.\n         *\n         * Possible values:\n         *\n         * - `\"top\"` (default) - Displays error messages above questions.\n         * - `\"bottom\"` - Displays error messages below questions.\n         *\n         * You can override this setting if you specify the `questionErrorLocation` property for an [individual page](https://surveyjs.io/form-library/documentation/pagemodel#questionErrorLocation) or [panel](https://surveyjs.io/form-library/documentation/panelmodel#questionErrorLocation) or set the `errorLocation` property for a [specific question](https://surveyjs.io/form-library/documentation/question#errorLocation).\n         */\n        get: function () {\n            return this.getPropertyValue(\"questionErrorLocation\");\n        },\n        set: function (value) {\n            this.setPropertyValue(\"questionErrorLocation\", value.toLowerCase());\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"questionDescriptionLocation\", {\n        /**\n         * Specifies where to display question descriptions.\n         *\n         * Possible values:\n         *\n         * - `\"underTitle\"` (default) - Displays descriptions under question titles.\n         * - `\"underInput\"` - Displays descriptions under the interactive area.\n         *\n         * You can override this setting for individual questions if you specify their [`descriptionLocation`](https://surveyjs.io/form-library/documentation/api-reference/question#descriptionLocation) property.\n         *\n         */\n        get: function () {\n            return this.getPropertyValue(\"questionDescriptionLocation\");\n        },\n        set: function (value) {\n            this.setPropertyValue(\"questionDescriptionLocation\", value);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"mode\", {\n        /**\n         * Specifies whether users can take the survey or only view it.\n         *\n         * Possible values:\n         *\n         * - `\"edit\"` (default) - Allows users to take the survey.\n         * - `\"display\"` - Makes the survey read-only.\n         *\n         * [View Demo](https://surveyjs.io/form-library/examples/survey-displaymode/ (linkStyle))\n         */\n        get: function () {\n            return this.getPropertyValue(\"mode\");\n        },\n        set: function (value) {\n            value = value.toLowerCase();\n            if (value == this.mode)\n                return;\n            if (value != \"edit\" && value != \"display\")\n                return;\n            this.setPropertyValue(\"mode\", value);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyModel.prototype.onModeChanged = function () {\n        for (var i = 0; i < this.pages.length; i++) {\n            var page = this.pages[i];\n            page.setPropertyValue(\"isReadOnly\", page.isReadOnly);\n        }\n        this.updateButtonsVisibility();\n        this.updateCss();\n    };\n    Object.defineProperty(SurveyModel.prototype, \"data\", {\n        /**\n         * Gets or sets an object with survey results. You can set this property with an object of the following structure:\n         *\n         * ```js\n         * {\n         *   question1Name: question1Value,\n         *   question2Name: question2Value,\n         *   // ...\n         * }\n         * ```\n         *\n         * When you set this property in code, the new object overrides the old object that may contain default question values and entered data. If you want to *merge* the new and old objects, call the [`mergeData(newDataObj)`](https://surveyjs.io/form-library/documentation/surveymodel#mergeData) method.\n         *\n         * If you assign a new object while a respondent takes the survey, set the [`currentPageNo`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#currentPageNo) property to 0 to start the survey from the beginning. This will also cause the survey to re-evaluate the [`visibleIf`](https://surveyjs.io/form-library/documentation/api-reference/question#visibleIf), [`enableIf`](https://surveyjs.io/form-library/documentation/api-reference/question#enableIf), and other [expressions](https://surveyjs.io/form-library/documentation/design-survey/conditional-logic#expressions).\n         * @see setValue\n         * @see getValue\n         */\n        get: function () {\n            var result = {};\n            var keys = this.getValuesKeys();\n            for (var i = 0; i < keys.length; i++) {\n                var key = keys[i];\n                var dataValue = this.getDataValueCore(this.valuesHash, key);\n                if (dataValue !== undefined) {\n                    result[key] = dataValue;\n                }\n            }\n            this.setCalculatedValuesIntoResult(result);\n            return result;\n        },\n        set: function (data) {\n            this.valuesHash = {};\n            this.setDataCore(data);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    /**\n     * Merges a specified data object with the object from the [`data`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#data) property.\n     *\n     * Refer to the following help topic for more information: [Merge Question Values](https://surveyjs.io/form-library/documentation/design-survey/merge-question-values).\n     *\n     * @param data A data object to merge. It should have the following structure: `{ questionName: questionValue, ... }`\n     * @see setValue\n     */\n    SurveyModel.prototype.mergeData = function (data) {\n        if (!data)\n            return;\n        var newData = this.data;\n        this.mergeValues(data, newData);\n        this.setDataCore(newData);\n    };\n    SurveyModel.prototype.setDataCore = function (data) {\n        if (data) {\n            for (var key in data) {\n                this.setDataValueCore(this.valuesHash, key, data[key]);\n            }\n        }\n        this.updateAllQuestionsValue();\n        this.notifyAllQuestionsOnValueChanged();\n        this.notifyElementsOnAnyValueOrVariableChanged(\"\");\n        this.runConditions();\n        this.updateAllQuestionsValue();\n    };\n    SurveyModel.prototype.getStructuredData = function (includePages, level) {\n        if (includePages === void 0) { includePages = true; }\n        if (level === void 0) { level = -1; }\n        if (level === 0)\n            return this.data;\n        var data = {};\n        this.pages.forEach(function (p) {\n            if (includePages) {\n                var pageValues = {};\n                if (p.collectValues(pageValues, level - 1)) {\n                    data[p.name] = pageValues;\n                }\n            }\n            else {\n                p.collectValues(data, level);\n            }\n        });\n        return data;\n    };\n    SurveyModel.prototype.setStructuredData = function (data, doMerge) {\n        if (doMerge === void 0) { doMerge = false; }\n        if (!data)\n            return;\n        var res = {};\n        for (var key in data) {\n            var q = this.getQuestionByValueName(key);\n            if (q) {\n                res[key] = data[key];\n            }\n            else {\n                var panel = this.getPageByName(key);\n                if (!panel) {\n                    panel = this.getPanelByName(key);\n                }\n                if (panel) {\n                    this.collectDataFromPanel(panel, res, data[key]);\n                }\n            }\n        }\n        if (doMerge) {\n            this.mergeData(res);\n        }\n        else {\n            this.data = res;\n        }\n    };\n    SurveyModel.prototype.collectDataFromPanel = function (panel, output, data) {\n        for (var key in data) {\n            var el = panel.getElementByName(key);\n            if (!el)\n                continue;\n            if (el.isPanel) {\n                this.collectDataFromPanel(el, output, data[key]);\n            }\n            else {\n                output[key] = data[key];\n            }\n        }\n    };\n    Object.defineProperty(SurveyModel.prototype, \"editingObj\", {\n        get: function () {\n            return this.editingObjValue;\n        },\n        set: function (val) {\n            var _this = this;\n            if (this.editingObj == val)\n                return;\n            if (!!this.editingObj) {\n                this.editingObj.onPropertyChanged.remove(this.onEditingObjPropertyChanged);\n            }\n            this.editingObjValue = val;\n            if (this.isDisposed)\n                return;\n            if (!val) {\n                var questions = this.getAllQuestions();\n                for (var i = 0; i < questions.length; i++) {\n                    questions[i].unbindValue();\n                }\n            }\n            if (!!this.editingObj) {\n                this.setDataCore({});\n                this.onEditingObjPropertyChanged = function (sender, options) {\n                    if (!_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].hasOriginalProperty(_this.editingObj, options.name))\n                        return;\n                    _this.updateOnSetValue(options.name, _this.editingObj[options.name], options.oldValue);\n                };\n                this.editingObj.onPropertyChanged.add(this.onEditingObjPropertyChanged);\n            }\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"isEditingSurveyElement\", {\n        get: function () {\n            return !!this.editingObj;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyModel.prototype.setCalculatedValuesIntoResult = function (result) {\n        for (var i = 0; i < this.calculatedValues.length; i++) {\n            var calValue = this.calculatedValues[i];\n            if (calValue.includeIntoResult &&\n                !!calValue.name &&\n                this.getVariable(calValue.name) !== undefined) {\n                result[calValue.name] = this.getVariable(calValue.name);\n            }\n        }\n    };\n    SurveyModel.prototype.getAllValues = function () {\n        return this.data;\n    };\n    /**\n     * Returns survey results as an array of objects in which the question name, title, value, and other parameters are stored as individual properties.\n     *\n     * If a question can have more than one value (Matrix, Multiple Text), its object enables the `isNode` flag and stores information about these values in the `data` property. Refer to the following help topic for more information: [Access Full Survey Results](https://surveyjs.io/form-library/documentation/handle-survey-results-access#access-full-survey-results).\n     *\n     * If you want to skip empty answers, pass an object with the `includeEmpty` property set to `false`.\n     */\n    SurveyModel.prototype.getPlainData = function (options) {\n        if (!options) {\n            options = { includeEmpty: true, includeQuestionTypes: false, includeValues: false };\n        }\n        var result = [];\n        var questionValueNames = [];\n        this.getAllQuestions().forEach(function (question) {\n            var resultItem = question.getPlainData(options);\n            if (!!resultItem) {\n                result.push(resultItem);\n                questionValueNames.push(question.valueName || question.name);\n            }\n        });\n        if (!!options.includeValues) {\n            var keys = this.getValuesKeys();\n            for (var i = 0; i < keys.length; i++) {\n                var key = keys[i];\n                if (questionValueNames.indexOf(key) == -1) {\n                    var dataValue = this.getDataValueCore(this.valuesHash, key);\n                    if (!!dataValue) {\n                        result.push({\n                            name: key,\n                            title: key,\n                            value: dataValue,\n                            displayValue: dataValue,\n                            isNode: false,\n                            getString: function (val) {\n                                return typeof val === \"object\" ? JSON.stringify(val) : val;\n                            },\n                        });\n                    }\n                }\n            }\n        }\n        return result;\n    };\n    SurveyModel.prototype.getFilteredValues = function () {\n        var values = {};\n        for (var key in this.variablesHash)\n            values[key] = this.variablesHash[key];\n        this.addCalculatedValuesIntoFilteredValues(values);\n        var keys = this.getValuesKeys();\n        for (var i = 0; i < keys.length; i++) {\n            var key = keys[i];\n            values[key] = this.getDataValueCore(this.valuesHash, key);\n        }\n        this.getAllQuestions().forEach(function (q) {\n            if (q.hasFilteredValue) {\n                values[q.getValueName()] = q.getFilteredValue();\n            }\n        });\n        return values;\n    };\n    SurveyModel.prototype.addCalculatedValuesIntoFilteredValues = function (values) {\n        var caclValues = this.calculatedValues;\n        for (var i = 0; i < caclValues.length; i++)\n            values[caclValues[i].name] = caclValues[i].value;\n    };\n    SurveyModel.prototype.getFilteredProperties = function () {\n        return { survey: this };\n    };\n    SurveyModel.prototype.getValuesKeys = function () {\n        if (!this.editingObj)\n            return Object.keys(this.valuesHash);\n        var props = _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].getPropertiesByObj(this.editingObj);\n        var res = [];\n        for (var i = 0; i < props.length; i++) {\n            res.push(props[i].name);\n        }\n        return res;\n    };\n    SurveyModel.prototype.getDataValueCore = function (valuesHash, key) {\n        if (!!this.editingObj)\n            return _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].getObjPropertyValue(this.editingObj, key);\n        return this.getDataFromValueHash(valuesHash, key);\n    };\n    SurveyModel.prototype.setDataValueCore = function (valuesHash, key, value) {\n        if (!!this.editingObj) {\n            _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].setObjPropertyValue(this.editingObj, key, value);\n        }\n        else {\n            this.setDataToValueHash(valuesHash, key, value);\n        }\n    };\n    SurveyModel.prototype.deleteDataValueCore = function (valuesHash, key) {\n        if (!!this.editingObj) {\n            this.editingObj[key] = null;\n        }\n        else {\n            this.deleteDataFromValueHash(valuesHash, key);\n        }\n    };\n    SurveyModel.prototype.getDataFromValueHash = function (valuesHash, key) {\n        if (!!this.valueHashGetDataCallback)\n            return this.valueHashGetDataCallback(valuesHash, key);\n        return valuesHash[key];\n    };\n    SurveyModel.prototype.setDataToValueHash = function (valuesHash, key, value) {\n        if (!!this.valueHashSetDataCallback) {\n            this.valueHashSetDataCallback(valuesHash, key, value);\n        }\n        else {\n            valuesHash[key] = value;\n        }\n    };\n    SurveyModel.prototype.deleteDataFromValueHash = function (valuesHash, key) {\n        if (!!this.valueHashDeleteDataCallback) {\n            this.valueHashDeleteDataCallback(valuesHash, key);\n        }\n        else {\n            delete valuesHash[key];\n        }\n    };\n    Object.defineProperty(SurveyModel.prototype, \"comments\", {\n        /**\n         * An object with all comment values.\n         * @see Question.showCommentArea\n         * @see storeOthersAsComment\n         */\n        get: function () {\n            var result = {};\n            var keys = this.getValuesKeys();\n            for (var i = 0; i < keys.length; i++) {\n                var key = keys[i];\n                if (key.indexOf(this.commentSuffix) > 0) {\n                    result[key] = this.getDataValueCore(this.valuesHash, key);\n                }\n            }\n            return result;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"visiblePages\", {\n        /**\n         * Returns an array of visible pages without the start page.\n         *\n         * To get an array of all pages, use the [`pages`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#pages) property. If all pages are visible, the `pages` and `visiblePages` arrays are identical.\n         * @see [Conditional Visibility](https://surveyjs.io/form-library/documentation/design-survey/conditional-logic#conditional-visibility)\n         */\n        get: function () {\n            if (this.isDesignMode)\n                return this.pages;\n            var result = new Array();\n            for (var i = 0; i < this.pages.length; i++) {\n                if (this.isPageInVisibleList(this.pages[i])) {\n                    result.push(this.pages[i]);\n                }\n            }\n            return result;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyModel.prototype.isPageInVisibleList = function (page) {\n        return this.isDesignMode || page.isVisible && !page.isStartPage;\n    };\n    Object.defineProperty(SurveyModel.prototype, \"isEmpty\", {\n        /**\n         * Returns `true` if the survey contains zero pages.\n         * @see emptySurveyText\n         */\n        get: function () {\n            return this.pages.length == 0;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"PageCount\", {\n        get: function () {\n            return this.pageCount;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"pageCount\", {\n        /**\n         * Returns a total number of survey pages.\n         *\n         * To get the number of visible pages, use the [`visiblePageCount`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#visiblePageCount) property.\n         * @see pages\n         */\n        get: function () {\n            return this.pages.length;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"visiblePageCount\", {\n        /**\n         * Returns the number of visible survey pages.\n         *\n         * To get a total number of survey pages, use the [`pageCount`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#pageCount) property.\n         * @see visiblePages\n         * @see [Conditional Visibility](https://surveyjs.io/form-library/documentation/design-survey/conditional-logic#conditional-visibility)\n         */\n        get: function () {\n            return this.visiblePages.length;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"startedPage\", {\n        /**\n         * Returns the start page. Applies only if the [`firstPageIsStarted`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#firstPageIsStarted) property is set to `true`.\n         *\n         * Refer to the following help topic for more information: [Start Page](https://surveyjs.io/form-library/documentation/design-survey/create-a-multi-page-survey#start-page).\n         * @see firstPageIsStarted\n         * @see activePage\n         */\n        get: function () {\n            var page = this.firstPageIsStarted && this.pages.length > 1 ? this.pages[0] : null;\n            if (!!page) {\n                page.onFirstRendering();\n                page.setWasShown(true);\n            }\n            return page;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"currentPage\", {\n        /**\n         * Gets or sets the current page.\n         *\n         * If you want to change the current page, set this property to a `PageModel` object. You can get this object in different ways. For example, you can call the [`getPageByName()`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#getPageByName) method to obtain a `PageModel` object with a specific name:\n         *\n         * ```js\n         * survey.currentPage = survey.getPageByName(\"my-page-name\");\n         * ```\n         *\n         * Alternatively, you can change the current page if you set the [`currentPageNo`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#currentPageNo) property to the index of the required page.\n         *\n         * The `currentPage` property does not return the start page even if it is current. Use the [`activePage`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#activePage) property instead if your survey contains a start page.\n         */\n        get: function () {\n            return this.getPropertyValue(\"currentPage\", null);\n        },\n        set: function (value) {\n            if (this.isLoadingFromJson)\n                return;\n            var newPage = this.getPageByObject(value);\n            if (!!value && !newPage)\n                return;\n            if (!newPage && this.isCurrentPageAvailable)\n                return;\n            var vPages = this.visiblePages;\n            if (newPage != null && vPages.indexOf(newPage) < 0)\n                return;\n            if (newPage == this.currentPage)\n                return;\n            var oldValue = this.currentPage;\n            if (!this.isShowingPreview && !this.currentPageChanging(newPage, oldValue))\n                return;\n            this.setPropertyValue(\"currentPage\", newPage);\n            if (!!newPage) {\n                newPage.onFirstRendering();\n                newPage.updateCustomWidgets();\n                newPage.setWasShown(true);\n            }\n            this.locStrsChanged();\n            if (!this.isShowingPreview) {\n                this.currentPageChanged(newPage, oldValue);\n            }\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyModel.prototype.updateCurrentPage = function () {\n        if (this.isCurrentPageAvailable)\n            return;\n        this.currentPage = this.firstVisiblePage;\n    };\n    Object.defineProperty(SurveyModel.prototype, \"isCurrentPageAvailable\", {\n        get: function () {\n            var page = this.currentPage;\n            return !!page && this.isPageInVisibleList(page) && this.isPageExistsInSurvey(page);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyModel.prototype.isPageExistsInSurvey = function (page) {\n        if (this.pages.indexOf(page) > -1)\n            return true;\n        return !!this.onContainsPageCallback && this.onContainsPageCallback(page);\n    };\n    Object.defineProperty(SurveyModel.prototype, \"activePage\", {\n        /**\n         * Returns [`startedPage`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#startedPage) if the survey currently displays a start page; otherwise, returns [`currentPage`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#currentPage).\n         * @see startedPage\n         * @see currentPage\n         * @see firstPageIsStarted\n         */\n        get: function () {\n            return this.getPropertyValue(\"activePage\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"isShowStartingPage\", {\n        /**\n         * A Boolean value that indicates whether the [start page](https://surveyjs.io/form-library/documentation/design-survey/create-a-multi-page-survey#start-page) is currently displayed.\n         */\n        get: function () {\n            return this.state === \"starting\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"matrixDragHandleArea\", {\n        /**\n         * Specifies which part of a matrix row responds to a drag gesture in [Dynamic Matrix](https://surveyjs.io/form-library/examples/questiontype-matrixdynamic/) questions.\n         *\n         * Possible values:\n         *\n         * - `\"entireItem\"` (default) - Users can use the entire matrix row as a drag handle.\n         * - `\"icon\"` - Users can only use a drag icon as a drag handle.\n         */\n        get: function () {\n            return this.getPropertyValue(\"matrixDragHandleArea\", \"entireItem\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"matrixDragHandleArea\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"isShowingPage\", {\n        get: function () {\n            return this.state == \"running\" || this.state == \"preview\" || this.isShowStartingPage;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyModel.prototype.updateActivePage = function () {\n        var newPage = this.isShowStartingPage ? this.startedPage : this.currentPage;\n        this.setPropertyValue(\"activePage\", newPage);\n    };\n    SurveyModel.prototype.onStateAndCurrentPageChanged = function () {\n        this.updateActivePage();\n        this.updateButtonsVisibility();\n    };\n    SurveyModel.prototype.getPageByObject = function (value) {\n        if (!value)\n            return null;\n        if (value.getType && value.getType() == \"page\")\n            return value;\n        if (typeof value === \"string\" || value instanceof String)\n            return this.getPageByName(String(value));\n        if (!isNaN(value)) {\n            var index = Number(value);\n            var vPages = this.visiblePages;\n            if (value < 0 || value >= vPages.length)\n                return null;\n            return vPages[index];\n        }\n        return value;\n    };\n    Object.defineProperty(SurveyModel.prototype, \"currentPageNo\", {\n        /**\n         * A zero-based index of the current page in the [`visiblePages`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#visiblePages) array.\n         *\n         * [View Demo](https://surveyjs.io/form-library/examples/survey-editprevious/ (linkStyle))\n         * @see visiblePages\n         */\n        get: function () {\n            return this.visiblePages.indexOf(this.currentPage);\n        },\n        set: function (value) {\n            var vPages = this.visiblePages;\n            if (value < 0 || value >= vPages.length)\n                return;\n            this.currentPage = vPages[value];\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"questionsOrder\", {\n        /**\n         * Specifies the sort order of questions in the survey.\n         *\n         * Possible values:\n         *\n         * - `\"initial\"` (default) - Preserves the original order of questions.\n         * - `\"random\"` - Displays questions in random order.\n         *\n         * You can override this property for individual pages and panels.\n         * @see PageModel.questionsOrder\n         * @see PanelModel.questionsOrder\n         */\n        get: function () {\n            return this.getPropertyValue(\"questionsOrder\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"questionsOrder\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    /**\n     * Focuses the first question on the current page.\n     * @see focusQuestion\n     * @see focusFirstQuestionAutomatic\n     */\n    SurveyModel.prototype.focusFirstQuestion = function () {\n        if (this.focusingQuestionInfo)\n            return;\n        var page = this.activePage;\n        if (page) {\n            page.scrollToTop();\n            page.focusFirstQuestion();\n        }\n    };\n    SurveyModel.prototype.scrollToTopOnPageChange = function (doScroll) {\n        if (doScroll === void 0) { doScroll = true; }\n        var page = this.activePage;\n        if (!page)\n            return;\n        if (doScroll) {\n            page.scrollToTop();\n        }\n        if (this.isCurrentPageRendering && this.focusFirstQuestionAutomatic && !this.focusingQuestionInfo) {\n            page.focusFirstQuestion();\n            this.isCurrentPageRendering = false;\n        }\n    };\n    Object.defineProperty(SurveyModel.prototype, \"state\", {\n        /**\n         * Returns the current survey state.\n         *\n         * Possible values:\n         *\n         * - `\"loading\"` - The survey is being loaded from a JSON schema.\n         * - `\"empty\"` - The survey has no elements to display.\n         * - `\"starting\"` - The survey displays a [start page](https://surveyjs.io/form-library/documentation/design-survey/create-a-multi-page-survey#start-page).\n         * - `\"running\"` - A respondent is taking the survey.\n         * - `\"preview\"` - A respondent is [previewing](https://surveyjs.io/form-library/examples/survey-showpreview/) answers before submitting them.\n         * - `\"completed\"` - A respondent has completed the survey and submitted the results.\n         */\n        get: function () {\n            return this.getPropertyValue(\"state\", \"empty\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyModel.prototype.updateState = function () {\n        this.setPropertyValue(\"state\", this.calcState());\n    };\n    SurveyModel.prototype.calcState = function () {\n        if (this.isLoading)\n            return \"loading\";\n        if (this.isCompleted)\n            return \"completed\";\n        if (this.isCompletedBefore)\n            return \"completedbefore\";\n        if (!this.isDesignMode &&\n            this.isEditMode &&\n            this.isStartedState &&\n            this.startedPage)\n            return \"starting\";\n        if (this.isShowingPreview)\n            return this.currentPage ? \"preview\" : \"empty\";\n        return this.currentPage ? \"running\" : \"empty\";\n    };\n    Object.defineProperty(SurveyModel.prototype, \"isCompleted\", {\n        get: function () {\n            return this.getPropertyValue(\"isCompleted\", false);\n        },\n        set: function (val) {\n            this.setPropertyValue(\"isCompleted\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"isShowingPreview\", {\n        get: function () {\n            return this.getPropertyValue(\"isShowingPreview\", false);\n        },\n        set: function (val) {\n            if (this.isShowingPreview == val)\n                return;\n            this.setPropertyValue(\"isShowingPreview\", val);\n            this.onShowingPreviewChanged();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"isStartedState\", {\n        get: function () {\n            return this.getPropertyValue(\"isStartedState\", false);\n        },\n        set: function (val) {\n            this.setPropertyValue(\"isStartedState\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"isCompletedBefore\", {\n        get: function () {\n            return this.getPropertyValue(\"isCompletedBefore\", false);\n        },\n        set: function (val) {\n            this.setPropertyValue(\"isCompletedBefore\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"isLoading\", {\n        get: function () {\n            return this.getPropertyValue(\"isLoading\", false);\n        },\n        set: function (val) {\n            this.setPropertyValue(\"isLoading\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"completedState\", {\n        get: function () {\n            return this.getPropertyValue(\"completedState\", \"\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"completedStateText\", {\n        get: function () {\n            return this.getPropertyValue(\"completedStateText\", \"\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyModel.prototype.setCompletedState = function (value, text) {\n        this.setPropertyValue(\"completedState\", value);\n        if (!text) {\n            if (value == \"saving\")\n                text = this.getLocalizationString(\"savingData\");\n            if (value == \"error\")\n                text = this.getLocalizationString(\"savingDataError\");\n            if (value == \"success\")\n                text = this.getLocalizationString(\"savingDataSuccess\");\n        }\n        this.setPropertyValue(\"completedStateText\", text);\n        if (this.state === \"completed\" && this.showCompletedPage && !!this.completedState) {\n            this.notify(this.completedStateText, this.completedState);\n        }\n    };\n    SurveyModel.prototype.notify = function (message, type) {\n        this.notifier.notify(message, type, type === \"error\");\n    };\n    /**\n     * Resets the survey [`state`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#state) and, optionally, [`data`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#data). If `state` is `\"completed\"`, it becomes `\"running\"`.\n     * @param clearData *Optional.* Specifies whether to clear survey data. Default value: `true`.\n     * @param goToFirstPage *Optional.* Specifies whether to switch the survey to the first page. Default value: `true`.\n     */\n    SurveyModel.prototype.clear = function (clearData, goToFirstPage) {\n        if (clearData === void 0) { clearData = true; }\n        if (goToFirstPage === void 0) { goToFirstPage = true; }\n        this.isCompleted = false;\n        this.isCompletedBefore = false;\n        this.isLoading = false;\n        this.completedByTriggers = undefined;\n        if (clearData) {\n            this.data = null;\n            this.variablesHash = {};\n        }\n        this.timerModel.spent = 0;\n        for (var i = 0; i < this.pages.length; i++) {\n            this.pages[i].timeSpent = 0;\n            this.pages[i].setWasShown(false);\n            this.pages[i].passed = false;\n        }\n        this.onFirstPageIsStartedChanged();\n        if (goToFirstPage) {\n            this.currentPage = this.firstVisiblePage;\n        }\n        if (clearData) {\n            this.updateValuesWithDefaults();\n        }\n    };\n    SurveyModel.prototype.mergeValues = function (src, dest) {\n        Object(_utils_utils__WEBPACK_IMPORTED_MODULE_15__[\"mergeValues\"])(src, dest);\n    };\n    SurveyModel.prototype.updateValuesWithDefaults = function () {\n        if (this.isDesignMode || this.isLoading)\n            return;\n        for (var i = 0; i < this.pages.length; i++) {\n            var questions = this.pages[i].questions;\n            for (var j = 0; j < questions.length; j++) {\n                questions[j].updateValueWithDefaults();\n            }\n        }\n    };\n    SurveyModel.prototype.updateCustomWidgets = function (page) {\n        if (!page)\n            return;\n        page.updateCustomWidgets();\n    };\n    SurveyModel.prototype.currentPageChanging = function (newValue, oldValue) {\n        var options = this.createPageChangeEventOptions(newValue, oldValue);\n        options.allow = true;\n        options.allowChanging = true;\n        this.onCurrentPageChanging.fire(this, options);\n        var allow = options.allowChanging && options.allow;\n        if (allow) {\n            this.isCurrentPageRendering = true;\n        }\n        return allow;\n    };\n    SurveyModel.prototype.currentPageChanged = function (newValue, oldValue) {\n        this.notifyQuestionsOnHidingContent(oldValue);\n        var options = this.createPageChangeEventOptions(newValue, oldValue);\n        if (options.isNextPage) {\n            oldValue.passed = true;\n        }\n        this.onCurrentPageChanged.fire(this, options);\n    };\n    SurveyModel.prototype.notifyQuestionsOnHidingContent = function (page) {\n        if (!page)\n            return;\n        page.questions.forEach(function (q) { return q.onHidingContent(); });\n    };\n    SurveyModel.prototype.createPageChangeEventOptions = function (newValue, oldValue) {\n        var diff = !!newValue && !!oldValue ? newValue.visibleIndex - oldValue.visibleIndex : 0;\n        return {\n            oldCurrentPage: oldValue,\n            newCurrentPage: newValue,\n            isNextPage: diff === 1,\n            isPrevPage: diff === -1,\n            isGoingForward: diff > 0,\n            isGoingBackward: diff < 0,\n            isAfterPreview: this.changeCurrentPageFromPreview === true\n        };\n    };\n    SurveyModel.prototype.getProgress = function () {\n        if (this.currentPage == null)\n            return 0;\n        if (this.progressBarType !== \"pages\") {\n            var info = this.getProgressInfo();\n            if (this.progressBarType === \"requiredQuestions\") {\n                return info.requiredQuestionCount >= 1\n                    ? Math.ceil((info.requiredAnsweredQuestionCount * 100) /\n                        info.requiredQuestionCount)\n                    : 100;\n            }\n            return info.questionCount >= 1\n                ? Math.ceil((info.answeredQuestionCount * 100) / info.questionCount)\n                : 100;\n        }\n        var visPages = this.visiblePages;\n        var index = visPages.indexOf(this.currentPage);\n        return Math.ceil((index * 100) / visPages.length);\n    };\n    Object.defineProperty(SurveyModel.prototype, \"progressValue\", {\n        /**\n         * Returns a percentage value that indicates user progress in the survey.\n         * @see showProgressBar\n         * @see progressBarType\n         * @see progressText\n         */\n        get: function () {\n            return this.getPropertyValue(\"progressValue\", 0);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"isNavigationButtonsShowing\", {\n        get: function () {\n            if (this.isDesignMode)\n                return \"none\";\n            var page = this.currentPage;\n            if (!page)\n                return \"none\";\n            if (page.navigationButtonsVisibility === \"show\") {\n                return this.showNavigationButtons === \"none\" ? \"bottom\" : this.showNavigationButtons;\n            }\n            if (page.navigationButtonsVisibility === \"hide\") {\n                return \"none\";\n            }\n            return this.showNavigationButtons;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"isNavigationButtonsShowingOnTop\", {\n        get: function () {\n            return this.getIsNavigationButtonsShowingOn(\"top\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"isNavigationButtonsShowingOnBottom\", {\n        get: function () {\n            return this.getIsNavigationButtonsShowingOn(\"bottom\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyModel.prototype.getIsNavigationButtonsShowingOn = function (buttonPosition) {\n        var res = this.isNavigationButtonsShowing;\n        return res == \"both\" || res == buttonPosition;\n    };\n    Object.defineProperty(SurveyModel.prototype, \"isEditMode\", {\n        get: function () {\n            return this.mode == \"edit\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"isDisplayMode\", {\n        get: function () {\n            return this.mode == \"display\" || this.state == \"preview\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"isUpdateValueTextOnTyping\", {\n        get: function () {\n            return this.textUpdateMode == \"onTyping\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"isDesignMode\", {\n        /**\n         * Indicates whether the survey is being designed in [Survey Creator](https://surveyjs.io/survey-creator/documentation/overview).\n         */\n        get: function () {\n            return this._isDesignMode;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyModel.prototype.setDesignMode = function (value) {\n        if (!!this._isDesignMode != !!value) {\n            this._isDesignMode = !!value;\n            this.onQuestionsOnPageModeChanged(\"standard\");\n        }\n    };\n    Object.defineProperty(SurveyModel.prototype, \"showInvisibleElements\", {\n        /**\n         * Specifies whether to show all survey elements, regardless of their visibility.\n         *\n         * Default value: `false`\n         */\n        get: function () {\n            return this.getPropertyValue(\"showInvisibleElements\", false);\n        },\n        set: function (val) {\n            var visPages = this.visiblePages;\n            this.setPropertyValue(\"showInvisibleElements\", val);\n            if (this.isLoadingFromJson)\n                return;\n            this.runConditions();\n            this.updateAllElementsVisibility(visPages);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyModel.prototype.updateAllElementsVisibility = function (visPages) {\n        for (var i = 0; i < this.pages.length; i++) {\n            var page = this.pages[i];\n            page.updateElementVisibility();\n            if (visPages.indexOf(page) > -1 != page.isVisible) {\n                this.onPageVisibleChanged.fire(this, {\n                    page: page,\n                    visible: page.isVisible,\n                });\n            }\n        }\n    };\n    Object.defineProperty(SurveyModel.prototype, \"areInvisibleElementsShowing\", {\n        get: function () {\n            return this.isDesignMode || this.showInvisibleElements;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"areEmptyElementsHidden\", {\n        get: function () {\n            return (this.isShowingPreview &&\n                this.showPreviewBeforeComplete == \"showAnsweredQuestions\" && this.isAnyQuestionAnswered);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"isAnyQuestionAnswered\", {\n        get: function () {\n            var questions = this.getAllQuestions(true);\n            for (var i = 0; i < questions.length; i++) {\n                if (!questions[i].isEmpty())\n                    return true;\n            }\n            return false;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"hasCookie\", {\n        /**\n         * Indicates whether the browser has a cookie with a specified [`cookieName`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#cookieName). If this property's value is `true`, the respondent has passed the survey previously.\n         * @see setCookie\n         * @see deleteCookie\n         */\n        get: function () {\n            if (!this.cookieName || typeof document === \"undefined\")\n                return false;\n            var cookies = document.cookie;\n            return cookies && cookies.indexOf(this.cookieName + \"=true\") > -1;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    /**\n     * Sets a cookie with a specified [`cookieName`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#cookieName) in the browser. If the `cookieName` property value is defined, this method is automatically called on survey completion.\n     * @see hasCookie\n     * @see deleteCookie\n     */\n    SurveyModel.prototype.setCookie = function () {\n        if (!this.cookieName || typeof document === \"undefined\")\n            return;\n        document.cookie =\n            this.cookieName + \"=true; expires=Fri, 31 Dec 9999 0:0:0 GMT\";\n    };\n    /**\n     * Deletes a cookie with a specified [`cookieName`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#cookieName) from the browser.\n     * @see hasCookie\n     * @see setCookie\n     */\n    SurveyModel.prototype.deleteCookie = function () {\n        if (!this.cookieName)\n            return;\n        document.cookie = this.cookieName + \"=;\";\n    };\n    /**\n     * Switches the survey to the next page.\n     *\n     * This method returns a Boolean value that indicates whether the page was successfully switched. `false` is returned if the current page is the last page or if it contains validation errors.\n     * @returns `true` if the page was successfully switched; `false` otherwise.\n     * @see isLastPage\n     * @see prevPage\n     * @see completeLastPage\n     */\n    SurveyModel.prototype.nextPage = function () {\n        if (this.isLastPage)\n            return false;\n        return this.doCurrentPageComplete(false);\n    };\n    SurveyModel.prototype.hasErrorsOnNavigate = function (doComplete) {\n        var _this = this;\n        if (this.ignoreValidation || !this.isEditMode)\n            return false;\n        var func = function (hasErrors) {\n            if (!hasErrors) {\n                _this.doCurrentPageCompleteCore(doComplete);\n            }\n        };\n        if (this.isValidateOnComplete) {\n            if (!this.isLastPage)\n                return false;\n            return this.validate(true, true, func) !== true;\n        }\n        return this.validateCurrentPage(func) !== true;\n    };\n    SurveyModel.prototype.checkForAsyncQuestionValidation = function (questions, func) {\n        var _this = this;\n        this.clearAsyncValidationQuesitons();\n        var _loop_2 = function () {\n            if (questions[i].isRunningValidators) {\n                var q_1 = questions[i];\n                q_1.onCompletedAsyncValidators = function (hasErrors) {\n                    _this.onCompletedAsyncQuestionValidators(q_1, func, hasErrors);\n                };\n                this_2.asyncValidationQuesitons.push(questions[i]);\n            }\n        };\n        var this_2 = this;\n        for (var i = 0; i < questions.length; i++) {\n            _loop_2();\n        }\n        return this.asyncValidationQuesitons.length > 0;\n    };\n    SurveyModel.prototype.clearAsyncValidationQuesitons = function () {\n        if (!!this.asyncValidationQuesitons) {\n            var asynQuestions = this.asyncValidationQuesitons;\n            for (var i = 0; i < asynQuestions.length; i++) {\n                asynQuestions[i].onCompletedAsyncValidators = null;\n            }\n        }\n        this.asyncValidationQuesitons = [];\n    };\n    SurveyModel.prototype.onCompletedAsyncQuestionValidators = function (question, func, hasErrors) {\n        if (hasErrors) {\n            this.clearAsyncValidationQuesitons();\n            func(true);\n            if (this.focusOnFirstError && !!question && !!question.page && question.page === this.currentPage) {\n                var questions = this.currentPage.questions;\n                for (var i_1 = 0; i_1 < questions.length; i_1++) {\n                    if (questions[i_1] !== question && questions[i_1].errors.length > 0)\n                        return;\n                }\n                question.focus(true);\n            }\n            return;\n        }\n        var asynQuestions = this.asyncValidationQuesitons;\n        for (var i = 0; i < asynQuestions.length; i++) {\n            if (asynQuestions[i].isRunningValidators)\n                return;\n        }\n        func(false);\n    };\n    Object.defineProperty(SurveyModel.prototype, \"isCurrentPageHasErrors\", {\n        get: function () {\n            return this.checkIsCurrentPageHasErrors();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"isCurrentPageValid\", {\n        /**\n         * Returns `true` if the current page does not contain errors.\n         * @see currentPage\n         */\n        get: function () {\n            return !this.checkIsCurrentPageHasErrors();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyModel.prototype.hasCurrentPageErrors = function (onAsyncValidation) {\n        return this.hasPageErrors(undefined, onAsyncValidation);\n    };\n    /**\n     * Validates all questions on the current page and returns `false` if the validation fails.\n     *\n     * If you use validation expressions and at least one of them calls an async function, the `validateCurrentPage` method returns `undefined`. In this case, you should pass a callback function as the `onAsyncValidation` parameter. The function's `hasErrors` Boolean parameter will contain the validation result.\n     * @param onAsyncValidation *Optional.* Pass a callback function. It accepts a Boolean `hasErrors` parameter that equals `true` if the validation fails or `false` otherwise.\n     * @see currentPage\n     * @see validate\n     * @see validateCurrentPage\n     */\n    SurveyModel.prototype.validateCurrentPage = function (onAsyncValidation) {\n        return this.validatePage(undefined, onAsyncValidation);\n    };\n    SurveyModel.prototype.hasPageErrors = function (page, onAsyncValidation) {\n        var res = this.validatePage(page, onAsyncValidation);\n        if (res === undefined)\n            return res;\n        return !res;\n    };\n    /**\n     * Validates all questions on a specified page and returns `false` if the validation fails.\n     *\n     * If you use validation expressions and at least one of them calls an async function, the `validatePage` method returns `undefined`. In this case, you should pass a callback function as the `onAsyncValidation` parameter. The function's `hasErrors` Boolean parameter will contain the validation result.\n     * @param page Pass the `PageModel` that you want to validate. You can pass `undefined` to validate the [`activePage`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#activePage).\n     * @param onAsyncValidation *Optional.* Pass a callback function. It accepts a Boolean `hasErrors` parameter that equals `true` if the validation fails or `false` otherwise.\n     * @see validate\n     * @see validateCurrentPage\n     */\n    SurveyModel.prototype.validatePage = function (page, onAsyncValidation) {\n        if (!page) {\n            page = this.activePage;\n        }\n        if (!page)\n            return true;\n        if (this.checkIsPageHasErrors(page))\n            return false;\n        if (!onAsyncValidation)\n            return true;\n        return this.checkForAsyncQuestionValidation(page.questions, function (hasErrors) { return onAsyncValidation(hasErrors); })\n            ? undefined\n            : true;\n    };\n    SurveyModel.prototype.hasErrors = function (fireCallback, focusOnFirstError, onAsyncValidation) {\n        if (fireCallback === void 0) { fireCallback = true; }\n        if (focusOnFirstError === void 0) { focusOnFirstError = false; }\n        var res = this.validate(fireCallback, focusOnFirstError, onAsyncValidation);\n        if (res === undefined)\n            return res;\n        return !res;\n    };\n    /**\n     * Validates all questions and returns `false` if the validation fails.\n     *\n     * If you use validation expressions and at least one of them calls an async function, the `validate` method returns `undefined`. In this case, you should pass a callback function as the `onAsyncValidation` parameter. The function's `hasErrors` Boolean parameter will contain the validation result.\n     * @param fireCallback *Optional.* Pass `false` if you do not want to show validation errors in the UI.\n     * @param focusOnFirstError *Optional.* Pass `true` if you want to focus the first question with a validation error. The survey will be switched to the page that contains this question if required.\n     * @param onAsyncValidation *Optional.* Pass a callback function. It accepts a Boolean `hasErrors` parameter that equals `true` if the validation fails or `false` otherwise.\n     * @see validateCurrentPage\n     * @see validatePage\n     */\n    SurveyModel.prototype.validate = function (fireCallback, focusOnFirstError, onAsyncValidation) {\n        if (fireCallback === void 0) { fireCallback = true; }\n        if (focusOnFirstError === void 0) { focusOnFirstError = false; }\n        if (!!onAsyncValidation) {\n            fireCallback = true;\n        }\n        var visPages = this.visiblePages;\n        var firstErrorPage = null;\n        var res = true;\n        for (var i = 0; i < visPages.length; i++) {\n            if (!visPages[i].validate(fireCallback, false)) {\n                if (!firstErrorPage)\n                    firstErrorPage = visPages[i];\n                res = false;\n            }\n        }\n        if (focusOnFirstError && !!firstErrorPage) {\n            var questions = firstErrorPage.getQuestions(true);\n            for (var i_2 = 0; i_2 < questions.length; i_2++) {\n                if (questions[i_2].errors.length > 0) {\n                    questions[i_2].focus(true);\n                    break;\n                }\n            }\n        }\n        if (!res || !onAsyncValidation)\n            return res;\n        return this.checkForAsyncQuestionValidation(this.getAllQuestions(), function (hasErrors) { return onAsyncValidation(hasErrors); })\n            ? undefined\n            : true;\n    };\n    SurveyModel.prototype.ensureUniqueNames = function (element) {\n        if (element === void 0) { element = null; }\n        if (element == null) {\n            for (var i = 0; i < this.pages.length; i++) {\n                this.ensureUniqueName(this.pages[i]);\n            }\n        }\n        else {\n            this.ensureUniqueName(element);\n        }\n    };\n    SurveyModel.prototype.ensureUniqueName = function (element) {\n        if (element.isPage) {\n            this.ensureUniquePageName(element);\n        }\n        if (element.isPanel) {\n            this.ensureUniquePanelName(element);\n        }\n        if (element.isPage || element.isPanel) {\n            var elements = element.elements;\n            for (var i = 0; i < elements.length; i++) {\n                this.ensureUniqueNames(elements[i]);\n            }\n        }\n        else {\n            this.ensureUniqueQuestionName(element);\n        }\n    };\n    SurveyModel.prototype.ensureUniquePageName = function (element) {\n        var _this = this;\n        return this.ensureUniqueElementName(element, function (name) {\n            return _this.getPageByName(name);\n        });\n    };\n    SurveyModel.prototype.ensureUniquePanelName = function (element) {\n        var _this = this;\n        return this.ensureUniqueElementName(element, function (name) {\n            return _this.getPanelByName(name);\n        });\n    };\n    SurveyModel.prototype.ensureUniqueQuestionName = function (element) {\n        var _this = this;\n        return this.ensureUniqueElementName(element, function (name) {\n            return _this.getQuestionByName(name);\n        });\n    };\n    SurveyModel.prototype.ensureUniqueElementName = function (element, getElementByName) {\n        var existingElement = getElementByName(element.name);\n        if (!existingElement || existingElement == element)\n            return;\n        var newName = this.getNewName(element.name);\n        while (!!getElementByName(newName)) {\n            var newName = this.getNewName(element.name);\n        }\n        element.name = newName;\n    };\n    SurveyModel.prototype.getNewName = function (name) {\n        var pos = name.length;\n        while (pos > 0 && name[pos - 1] >= \"0\" && name[pos - 1] <= \"9\") {\n            pos--;\n        }\n        var base = name.substring(0, pos);\n        var num = 0;\n        if (pos < name.length) {\n            num = parseInt(name.substring(pos));\n        }\n        num++;\n        return base + num;\n    };\n    SurveyModel.prototype.checkIsCurrentPageHasErrors = function (isFocuseOnFirstError) {\n        if (isFocuseOnFirstError === void 0) { isFocuseOnFirstError = undefined; }\n        return this.checkIsPageHasErrors(this.activePage, isFocuseOnFirstError);\n    };\n    SurveyModel.prototype.checkIsPageHasErrors = function (page, isFocuseOnFirstError) {\n        if (isFocuseOnFirstError === void 0) { isFocuseOnFirstError = undefined; }\n        if (isFocuseOnFirstError === undefined) {\n            isFocuseOnFirstError = this.focusOnFirstError;\n        }\n        if (!page)\n            return true;\n        var res = !page.validate(true, isFocuseOnFirstError);\n        this.fireValidatedErrorsOnPage(page);\n        return res;\n    };\n    SurveyModel.prototype.fireValidatedErrorsOnPage = function (page) {\n        if (this.onValidatedErrorsOnCurrentPage.isEmpty || !page)\n            return;\n        var questionsOnPage = page.questions;\n        var questions = new Array();\n        var errors = new Array();\n        for (var i = 0; i < questionsOnPage.length; i++) {\n            var q = questionsOnPage[i];\n            if (q.errors.length > 0) {\n                questions.push(q);\n                for (var j = 0; j < q.errors.length; j++) {\n                    errors.push(q.errors[j]);\n                }\n            }\n        }\n        this.onValidatedErrorsOnCurrentPage.fire(this, {\n            questions: questions,\n            errors: errors,\n            page: page,\n        });\n    };\n    /**\n     * Switches the survey to the previous page.\n     *\n     * This method returns a Boolean value that indicates whether the page was successfully switched. `false` is returned if the current page is the first page.\n     * @returns `true` if the page was successfully switched; `false` otherwise.\n     * @see isFirstPage\n     * @see nextPage\n     */\n    SurveyModel.prototype.prevPage = function () {\n        var _this = this;\n        if (this.isFirstPage || this.state === \"starting\")\n            return false;\n        this.resetNavigationButton();\n        var skipped = this.skippedPages.find(function (sp) { return sp.to == _this.currentPage; });\n        if (skipped) {\n            this.currentPage = skipped.from;\n            this.skippedPages.splice(this.skippedPages.indexOf(skipped), 1);\n        }\n        else {\n            var vPages = this.visiblePages;\n            var index = vPages.indexOf(this.currentPage);\n            this.currentPage = vPages[index - 1];\n        }\n        return true;\n    };\n    /**\n     * Completes the survey if it currently displays the last page and the page contains no validation errors. If both these conditions are met, this method returns `true`; otherwise, `false`.\n     *\n     * If you want to complete the survey regardless of the current page and validation errors, use the [`doComplete()`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#completeLastPage) event.\n     * @see isCurrentPageValid\n     * @see nextPage\n     */\n    SurveyModel.prototype.completeLastPage = function () {\n        if (this.isValidateOnComplete) {\n            this.cancelPreview();\n        }\n        var res = this.doCurrentPageComplete(true);\n        if (res) {\n            this.cancelPreview();\n        }\n        return res;\n    };\n    SurveyModel.prototype.navigationMouseDown = function () {\n        this.isNavigationButtonPressed = true;\n        return true;\n    };\n    SurveyModel.prototype.resetNavigationButton = function () {\n        this.isNavigationButtonPressed = false;\n    };\n    SurveyModel.prototype.nextPageUIClick = function () {\n        if (!!this.mouseDownPage && this.mouseDownPage !== this.activePage)\n            return;\n        this.mouseDownPage = null;\n        return this.nextPage();\n    };\n    SurveyModel.prototype.nextPageMouseDown = function () {\n        this.mouseDownPage = this.activePage;\n        return this.navigationMouseDown();\n    };\n    /**\n     * Displays a [preview of given answers](https://surveyjs.io/form-library/documentation/design-survey/create-a-multi-page-survey#preview-page). Returns `false` if the preview cannot be displayed because of validation errors.\n     * @see cancelPreview\n     * @see showPreviewBeforeComplete\n     * @see onShowingPreview\n     * @see state\n     */\n    SurveyModel.prototype.showPreview = function () {\n        this.resetNavigationButton();\n        if (!this.isValidateOnComplete) {\n            if (this.hasErrorsOnNavigate(true))\n                return false;\n            if (this.doServerValidation(true, true))\n                return false;\n        }\n        this.showPreviewCore();\n        return true;\n    };\n    SurveyModel.prototype.showPreviewCore = function () {\n        var options = { allowShowPreview: true, allow: true };\n        this.onShowingPreview.fire(this, options);\n        this.isShowingPreview = options.allowShowPreview && options.allow;\n    };\n    /**\n     * Cancels a [preview of given answers](https://surveyjs.io/form-library/documentation/design-survey/create-a-multi-page-survey#preview-page) and switches the survey to the page specified by the `currentPage` parameter.\n     * @param currentPage A new current page. If you do not specify this parameter, the survey displays the last page.\n     * @see showPreview\n     * @see showPreviewBeforeComplete\n     * @see state\n     */\n    SurveyModel.prototype.cancelPreview = function (currentPage) {\n        if (currentPage === void 0) { currentPage = null; }\n        if (!this.isShowingPreview)\n            return;\n        this.gotoPageFromPreview = currentPage;\n        this.isShowingPreview = false;\n    };\n    SurveyModel.prototype.cancelPreviewByPage = function (panel) {\n        this.cancelPreview(panel[\"originalPage\"]);\n    };\n    SurveyModel.prototype.doCurrentPageComplete = function (doComplete) {\n        if (this.isValidatingOnServer)\n            return false;\n        this.resetNavigationButton();\n        if (this.hasErrorsOnNavigate(doComplete))\n            return false;\n        return this.doCurrentPageCompleteCore(doComplete);\n    };\n    SurveyModel.prototype.doCurrentPageCompleteCore = function (doComplete) {\n        if (this.doServerValidation(doComplete))\n            return false;\n        if (doComplete) {\n            this.currentPage.passed = true;\n            return this.doComplete(this.canBeCompletedByTrigger, this.completedTrigger);\n        }\n        this.doNextPage();\n        return true;\n    };\n    Object.defineProperty(SurveyModel.prototype, \"isSinglePage\", {\n        get: function () {\n            return this.questionsOnPageMode == \"singlePage\";\n        },\n        set: function (val) {\n            this.questionsOnPageMode = val ? \"singlePage\" : \"standard\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"questionsOnPageMode\", {\n        /**\n         * Specifies how to distribute survey elements between pages.\n         *\n         * Possible values:\n         *\n         * - `\"singlePage\"` - Combines all survey pages into a single page.\n         * - `\"questionPerPage\"` - Creates a separate page for every question.\n         * - `\"standard\"` (default) - Retains the original structure specified in the JSON schema.\n         */\n        get: function () {\n            return this.getPropertyValue(\"questionsOnPageMode\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"questionsOnPageMode\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"firstPageIsStarted\", {\n        /**\n         * Gets or sets a Boolean value that specifies whether the first page is a start page.\n         *\n         * Refer to the following help topic for more information: [Start Page](https://surveyjs.io/form-library/documentation/design-survey/create-a-multi-page-survey#start-page).\n         * @see startedPage\n         * @see activePage\n         */\n        get: function () {\n            return this.getPropertyValue(\"firstPageIsStarted\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"firstPageIsStarted\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyModel.prototype.isPageStarted = function (page) {\n        return (this.firstPageIsStarted && this.pages.length > 1 && this.pages[0] === page);\n    };\n    Object.defineProperty(SurveyModel.prototype, \"showPreviewBeforeComplete\", {\n        /**\n         * Allows respondents to preview answers before they are submitted.\n         *\n         * Possible values:\n         *\n         * - `\"showAllQuestions\"` - Displays all questions in the preview.\n         * - `\"showAnsweredQuestions\"` - Displays only answered questions in the preview.\n         * - `\"noPreview\"` (default) - Hides the preview.\n         *\n         * [View Demo](https://surveyjs.io/form-library/examples/survey-showpreview/ (linkStyle))\n         * @see showPreview\n         * @see cancelPreview\n         */\n        get: function () {\n            return this.getPropertyValue(\"showPreviewBeforeComplete\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"showPreviewBeforeComplete\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"isShowPreviewBeforeComplete\", {\n        get: function () {\n            var preview = this.showPreviewBeforeComplete;\n            return preview == \"showAllQuestions\" || preview == \"showAnsweredQuestions\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyModel.prototype.onFirstPageIsStartedChanged = function () {\n        this.isStartedState = this.firstPageIsStarted && this.pages.length > 1;\n        this.pageVisibilityChanged(this.pages[0], !this.isStartedState);\n    };\n    SurveyModel.prototype.onShowingPreviewChanged = function () {\n        if (this.isDesignMode)\n            return;\n        if (this.isShowingPreview) {\n            this.runningPages = this.pages.slice(0, this.pages.length);\n            this.setupPagesForPageModes(true);\n        }\n        else {\n            if (this.runningPages) {\n                this.restoreOrigionalPages(this.runningPages);\n            }\n            this.runningPages = undefined;\n        }\n        this.runConditions();\n        this.updateAllElementsVisibility(this.pages);\n        this.updateVisibleIndexes();\n        if (this.isShowingPreview) {\n            this.currentPageNo = 0;\n        }\n        else {\n            var curPage = this.gotoPageFromPreview;\n            this.gotoPageFromPreview = null;\n            if (_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(curPage) && this.visiblePageCount > 0) {\n                curPage = this.visiblePages[this.visiblePageCount - 1];\n            }\n            if (!!curPage) {\n                this.changeCurrentPageFromPreview = true;\n                this.currentPage = curPage;\n                this.changeCurrentPageFromPreview = false;\n            }\n        }\n    };\n    SurveyModel.prototype.onQuestionsOnPageModeChanged = function (oldValue) {\n        if (this.isShowingPreview)\n            return;\n        if (this.questionsOnPageMode == \"standard\" || this.isDesignMode) {\n            if (this.origionalPages) {\n                this.restoreOrigionalPages(this.origionalPages);\n            }\n            this.origionalPages = undefined;\n        }\n        else {\n            if (!oldValue || oldValue == \"standard\") {\n                this.origionalPages = this.pages.slice(0, this.pages.length);\n            }\n            this.setupPagesForPageModes(this.isSinglePage);\n        }\n        this.runConditions();\n        this.updateVisibleIndexes();\n    };\n    SurveyModel.prototype.restoreOrigionalPages = function (originalPages) {\n        this.questionHashesClear();\n        this.pages.splice(0, this.pages.length);\n        for (var i = 0; i < originalPages.length; i++) {\n            this.pages.push(originalPages[i]);\n        }\n    };\n    SurveyModel.prototype.getPageStartIndex = function () {\n        return this.firstPageIsStarted && this.pages.length > 0 ? 1 : 0;\n    };\n    SurveyModel.prototype.setupPagesForPageModes = function (isSinglePage) {\n        this.questionHashesClear();\n        var startIndex = this.getPageStartIndex();\n        _super.prototype.startLoadingFromJson.call(this);\n        var newPages = this.createPagesForQuestionOnPageMode(isSinglePage, startIndex);\n        var deletedLen = this.pages.length - startIndex;\n        this.pages.splice(startIndex, deletedLen);\n        for (var i = 0; i < newPages.length; i++) {\n            this.pages.push(newPages[i]);\n        }\n        _super.prototype.endLoadingFromJson.call(this);\n        for (var i = 0; i < newPages.length; i++) {\n            newPages[i].setSurveyImpl(this, true);\n        }\n        this.doElementsOnLoad();\n        this.updateCurrentPage();\n    };\n    SurveyModel.prototype.createPagesForQuestionOnPageMode = function (isSinglePage, startIndex) {\n        if (isSinglePage) {\n            return [this.createSinglePage(startIndex)];\n        }\n        return this.createPagesForEveryQuestion(startIndex);\n    };\n    SurveyModel.prototype.createSinglePage = function (startIndex) {\n        var single = this.createNewPage(\"all\");\n        single.setSurveyImpl(this);\n        for (var i = startIndex; i < this.pages.length; i++) {\n            var page = this.pages[i];\n            var panel = _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].createClass(\"panel\");\n            panel.originalPage = page;\n            single.addPanel(panel);\n            var json = new _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"JsonObject\"]().toJsonObject(page);\n            new _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"JsonObject\"]().toObject(json, panel);\n            if (!this.showPageTitles) {\n                panel.title = \"\";\n            }\n        }\n        return single;\n    };\n    SurveyModel.prototype.createPagesForEveryQuestion = function (startIndex) {\n        var res = [];\n        for (var i = startIndex; i < this.pages.length; i++) {\n            var originalPage = this.pages[i];\n            // Initialize randomization\n            originalPage.setWasShown(true);\n            for (var j = 0; j < originalPage.elements.length; j++) {\n                var originalElement = originalPage.elements[j];\n                var element = _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].createClass(originalElement.getType());\n                if (!element)\n                    continue;\n                var jsonObj = new _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"JsonObject\"]();\n                //Deserialize page properties only, excluding elements\n                jsonObj.lightSerializing = true;\n                var pageJson = jsonObj.toJsonObject(originalPage);\n                var page = _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].createClass(originalPage.getType());\n                page.fromJSON(pageJson);\n                page.name = originalElement.name;\n                page.setSurveyImpl(this);\n                res.push(page);\n                var json = new _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"JsonObject\"]().toJsonObject(originalElement);\n                page.addElement(element);\n                new _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"JsonObject\"]().toObject(json, element);\n                for (var k = 0; k < page.questions.length; k++) {\n                    this.questionHashesAdded(page.questions[k]);\n                }\n            }\n        }\n        return res;\n    };\n    Object.defineProperty(SurveyModel.prototype, \"isFirstPage\", {\n        /**\n         * Indicates whether the [current page](#currentPage) is the first page.\n         *\n         * > If the survey displays the [start page](https://surveyjs.io/form-library/documentation/design-survey/create-a-multi-page-survey#start-page), this property contains `false`. Use the [`isShowStartingPage`](#isShowStartingPage) property to find out whether the start page is currently displayed.\n         */\n        get: function () {\n            return this.getPropertyValue(\"isFirstPage\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"isLastPage\", {\n        /**\n         * Indicates whether the [current page](#currentPage) is the last page.\n         */\n        get: function () {\n            return this.getPropertyValue(\"isLastPage\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyModel.prototype.updateButtonsVisibility = function () {\n        this.updateIsFirstLastPageState();\n        this.setPropertyValue(\"isShowPrevButton\", this.calcIsShowPrevButton());\n        this.setPropertyValue(\"isShowNextButton\", this.calcIsShowNextButton());\n        this.setPropertyValue(\"isCompleteButtonVisible\", this.calcIsCompleteButtonVisible());\n        this.setPropertyValue(\"isPreviewButtonVisible\", this.calcIsPreviewButtonVisible());\n        this.setPropertyValue(\"isCancelPreviewButtonVisible\", this.calcIsCancelPreviewButtonVisible());\n    };\n    Object.defineProperty(SurveyModel.prototype, \"isShowPrevButton\", {\n        get: function () {\n            return this.getPropertyValue(\"isShowPrevButton\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"isShowNextButton\", {\n        get: function () {\n            return this.getPropertyValue(\"isShowNextButton\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"isCompleteButtonVisible\", {\n        get: function () {\n            return this.getPropertyValue(\"isCompleteButtonVisible\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"isPreviewButtonVisible\", {\n        get: function () {\n            return this.getPropertyValue(\"isPreviewButtonVisible\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"isCancelPreviewButtonVisible\", {\n        get: function () {\n            return this.getPropertyValue(\"isCancelPreviewButtonVisible\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyModel.prototype.updateIsFirstLastPageState = function () {\n        var curPage = this.currentPage;\n        this.setPropertyValue(\"isFirstPage\", !!curPage && curPage === this.firstVisiblePage);\n        this.setPropertyValue(\"isLastPage\", !!curPage && curPage === this.lastVisiblePage);\n    };\n    SurveyModel.prototype.calcIsShowPrevButton = function () {\n        if (this.isFirstPage || !this.showPrevButton || this.state !== \"running\")\n            return false;\n        var page = this.visiblePages[this.currentPageNo - 1];\n        return this.getPageMaxTimeToFinish(page) <= 0;\n    };\n    SurveyModel.prototype.calcIsShowNextButton = function () {\n        return this.state === \"running\" && !this.isLastPage && !this.canBeCompletedByTrigger;\n    };\n    SurveyModel.prototype.calcIsCompleteButtonVisible = function () {\n        var state = this.state;\n        return this.isEditMode && (this.state === \"running\" &&\n            (this.isLastPage && !this.isShowPreviewBeforeComplete || this.canBeCompletedByTrigger)\n            || state === \"preview\");\n    };\n    SurveyModel.prototype.calcIsPreviewButtonVisible = function () {\n        return (this.isEditMode &&\n            this.isShowPreviewBeforeComplete &&\n            this.state == \"running\" && this.isLastPage);\n    };\n    SurveyModel.prototype.calcIsCancelPreviewButtonVisible = function () {\n        return (this.isEditMode &&\n            this.isShowPreviewBeforeComplete &&\n            this.state == \"preview\");\n    };\n    Object.defineProperty(SurveyModel.prototype, \"firstVisiblePage\", {\n        get: function () {\n            var pages = this.pages;\n            for (var i = 0; i < pages.length; i++) {\n                if (this.isPageInVisibleList(pages[i]))\n                    return pages[i];\n            }\n            return null;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"lastVisiblePage\", {\n        get: function () {\n            var pages = this.pages;\n            for (var i = pages.length - 1; i >= 0; i--) {\n                if (this.isPageInVisibleList(pages[i]))\n                    return pages[i];\n            }\n            return null;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    /**\n     * Completes the survey.\n     *\n     * When you call this method, Form Library performs the following actions:\n     *\n     * 1. Saves a cookie if the [`cookieName`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#cookieName) property is set.\n     * 1. Switches the survey [`state`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#state) to `\"completed\"`.\n     * 1. Raises the [`onComplete`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#onComplete) event.\n     * 1. Navigates the user to a URL specified by the [`navigateToUrl`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#navigateToUrl) or [`navigateToUrlOnCondition`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#navigateToUrlOnCondition) property.\n     * 1. Calls the [`sendResult()`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#sendResult) method if Form Library works with [SurveyJS Service](https://api.surveyjs.io/).\n     *\n     * The `doComplete()` method completes the survey regardless of validation errors and the current page. If you need to ensure that survey results are valid and full, call the [`completeLastPage()`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#completeLastPage) method instead.\n     *\n     * @param isCompleteOnTrigger For internal use.\n     * @param completeTrigger For internal use.\n     * @returns `false` if survey completion is cancelled within the [`onCompleting`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#onCompleting) event handler; otherwise, `true`.\n     * @see surveyPostId\n     */\n    SurveyModel.prototype.doComplete = function (isCompleteOnTrigger, completeTrigger) {\n        if (isCompleteOnTrigger === void 0) { isCompleteOnTrigger = false; }\n        if (this.isCompleted)\n            return;\n        if (!this.checkOnCompletingEvent(isCompleteOnTrigger, completeTrigger)) {\n            this.isCompleted = false;\n            return false;\n        }\n        this.checkOnPageTriggers(true);\n        this.stopTimer();\n        this.notifyQuestionsOnHidingContent(this.currentPage);\n        this.isCompleted = true;\n        this.clearUnusedValues();\n        this.saveDataOnComplete(isCompleteOnTrigger, completeTrigger);\n        this.setCookie();\n        return true;\n    };\n    SurveyModel.prototype.saveDataOnComplete = function (isCompleteOnTrigger, completeTrigger) {\n        var _this = this;\n        if (isCompleteOnTrigger === void 0) { isCompleteOnTrigger = false; }\n        var previousCookie = this.hasCookie;\n        var showSaveInProgress = function (text) {\n            savingDataStarted = true;\n            _this.setCompletedState(\"saving\", text);\n        };\n        var showSaveError = function (text) {\n            _this.setCompletedState(\"error\", text);\n        };\n        var showSaveSuccess = function (text) {\n            _this.setCompletedState(\"success\", text);\n            _this.navigateTo();\n        };\n        var clearSaveMessages = function (text) {\n            _this.setCompletedState(\"\", \"\");\n        };\n        var savingDataStarted = false;\n        var onCompleteOptions = {\n            isCompleteOnTrigger: isCompleteOnTrigger,\n            completeTrigger: completeTrigger,\n            showSaveInProgress: showSaveInProgress,\n            showSaveError: showSaveError,\n            showSaveSuccess: showSaveSuccess,\n            clearSaveMessages: clearSaveMessages,\n            //Obsolete functions\n            showDataSaving: showSaveInProgress,\n            showDataSavingError: showSaveError,\n            showDataSavingSuccess: showSaveSuccess,\n            showDataSavingClear: clearSaveMessages\n        };\n        this.onComplete.fire(this, onCompleteOptions);\n        if (!previousCookie && this.surveyPostId) {\n            this.sendResult();\n        }\n        if (!savingDataStarted) {\n            this.navigateTo();\n        }\n    };\n    SurveyModel.prototype.checkOnCompletingEvent = function (isCompleteOnTrigger, completeTrigger) {\n        var options = {\n            allowComplete: true,\n            allow: true,\n            isCompleteOnTrigger: isCompleteOnTrigger,\n            completeTrigger: completeTrigger\n        };\n        this.onCompleting.fire(this, options);\n        return options.allowComplete && options.allow;\n    };\n    /**\n     * Starts the survey. Applies only if the survey has a [start page](https://surveyjs.io/form-library/documentation/design-survey/create-a-multi-page-survey#start-page).\n     * @see firstPageIsStarted\n     * @see completeLastPage\n     */\n    SurveyModel.prototype.start = function () {\n        if (!this.firstPageIsStarted)\n            return false;\n        this.isCurrentPageRendering = true;\n        if (this.checkIsPageHasErrors(this.startedPage, true))\n            return false;\n        this.isStartedState = false;\n        this.notifyQuestionsOnHidingContent(this.pages[0]);\n        this.startTimerFromUI();\n        this.onStarted.fire(this, {});\n        this.updateVisibleIndexes();\n        if (!!this.currentPage) {\n            this.currentPage.locStrsChanged();\n        }\n        return true;\n    };\n    Object.defineProperty(SurveyModel.prototype, \"isValidatingOnServer\", {\n        /**\n         * Indicates whether the current page is being [validated on a server](#onServerValidateQuestions).\n         */\n        get: function () {\n            return this.getPropertyValue(\"isValidatingOnServer\", false);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyModel.prototype.setIsValidatingOnServer = function (val) {\n        if (val == this.isValidatingOnServer)\n            return;\n        this.setPropertyValue(\"isValidatingOnServer\", val);\n        this.onIsValidatingOnServerChanged();\n    };\n    SurveyModel.prototype.createServerValidationOptions = function (doComplete, isPreview) {\n        var self = this;\n        var options = {\n            data: {},\n            errors: {},\n            survey: this,\n            complete: function () {\n                self.completeServerValidation(options, isPreview);\n            },\n        };\n        if (doComplete && this.isValidateOnComplete) {\n            options.data = this.data;\n        }\n        else {\n            var questions = this.activePage.questions;\n            for (var i = 0; i < questions.length; i++) {\n                var question = questions[i];\n                if (!question.visible)\n                    continue;\n                var value = this.getValue(question.getValueName());\n                if (!this.isValueEmpty(value))\n                    options.data[question.getValueName()] = value;\n            }\n        }\n        return options;\n    };\n    SurveyModel.prototype.onIsValidatingOnServerChanged = function () { };\n    SurveyModel.prototype.doServerValidation = function (doComplete, isPreview) {\n        var _this = this;\n        if (isPreview === void 0) { isPreview = false; }\n        if (!this.onServerValidateQuestions ||\n            this.onServerValidateQuestions.isEmpty)\n            return false;\n        if (!doComplete && this.isValidateOnComplete)\n            return false;\n        this.setIsValidatingOnServer(true);\n        var isFunc = typeof this.onServerValidateQuestions === \"function\";\n        this.serverValidationEventCount = !isFunc ? this.onServerValidateQuestions.length : 1;\n        if (isFunc) {\n            this.onServerValidateQuestions(this, this.createServerValidationOptions(doComplete, isPreview));\n        }\n        else {\n            this.onServerValidateQuestions.fireByCreatingOptions(this, function () { return _this.createServerValidationOptions(doComplete, isPreview); });\n        }\n        return true;\n    };\n    SurveyModel.prototype.completeServerValidation = function (options, isPreview) {\n        if (this.serverValidationEventCount > 1) {\n            this.serverValidationEventCount--;\n            if (!!options && !!options.errors && Object.keys(options.errors).length === 0)\n                return;\n        }\n        this.serverValidationEventCount = 0;\n        this.setIsValidatingOnServer(false);\n        if (!options && !options.survey)\n            return;\n        var self = options.survey;\n        var hasErrors = false;\n        if (options.errors) {\n            var hasToFocus = this.focusOnFirstError;\n            for (var name in options.errors) {\n                var question = self.getQuestionByName(name);\n                if (question && question[\"errors\"]) {\n                    hasErrors = true;\n                    question.addError(new _error__WEBPACK_IMPORTED_MODULE_9__[\"CustomError\"](options.errors[name], this));\n                    if (hasToFocus) {\n                        hasToFocus = false;\n                        if (!!question.page) {\n                            this.currentPage = question.page;\n                        }\n                        question.focus(true);\n                    }\n                }\n            }\n            this.fireValidatedErrorsOnPage(this.currentPage);\n        }\n        if (!hasErrors) {\n            if (isPreview) {\n                this.showPreviewCore();\n            }\n            else {\n                if (self.isLastPage)\n                    self.doComplete();\n                else\n                    self.doNextPage();\n            }\n        }\n    };\n    SurveyModel.prototype.doNextPage = function () {\n        var curPage = this.currentPage;\n        this.checkOnPageTriggers(false);\n        if (!this.isCompleted) {\n            if (this.sendResultOnPageNext) {\n                this.sendResult(this.surveyPostId, this.clientId, true);\n            }\n            if (curPage === this.currentPage) {\n                var vPages = this.visiblePages;\n                var index = vPages.indexOf(this.currentPage);\n                this.currentPage = vPages[index + 1];\n            }\n        }\n        else {\n            this.doComplete(true);\n        }\n    };\n    SurveyModel.prototype.setCompleted = function (trigger) {\n        this.doComplete(true, trigger);\n    };\n    SurveyModel.prototype.canBeCompleted = function (trigger, isCompleted) {\n        var _a;\n        if (!_settings__WEBPACK_IMPORTED_MODULE_14__[\"settings\"].triggers.changeNavigationButtonsOnComplete)\n            return;\n        var prevCanBeCompleted = this.canBeCompletedByTrigger;\n        if (!this.completedByTriggers)\n            this.completedByTriggers = {};\n        if (isCompleted) {\n            this.completedByTriggers[trigger.id] = { trigger: trigger, pageId: (_a = this.currentPage) === null || _a === void 0 ? void 0 : _a.id };\n        }\n        else {\n            delete this.completedByTriggers[trigger.id];\n        }\n        if (prevCanBeCompleted !== this.canBeCompletedByTrigger) {\n            this.updateButtonsVisibility();\n        }\n    };\n    Object.defineProperty(SurveyModel.prototype, \"canBeCompletedByTrigger\", {\n        get: function () {\n            var _a;\n            if (!this.completedByTriggers)\n                return false;\n            var keys = Object.keys(this.completedByTriggers);\n            if (keys.length === 0)\n                return false;\n            var id = (_a = this.currentPage) === null || _a === void 0 ? void 0 : _a.id;\n            if (!id)\n                return true;\n            for (var i = 0; i < keys.length; i++) {\n                if (id === this.completedByTriggers[keys[i]].pageId)\n                    return true;\n            }\n            return false;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"completedTrigger\", {\n        get: function () {\n            if (!this.canBeCompletedByTrigger)\n                return undefined;\n            var key = Object.keys(this.completedByTriggers)[0];\n            return this.completedByTriggers[key].trigger;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"processedCompletedHtml\", {\n        /**\n         * Returns HTML content displayed on the [complete page](https://surveyjs.io/form-library/documentation/design-survey/create-a-multi-page-survey#complete-page).\n         *\n         * To specify HTML content, use the [`completedHtml`](#completedHtml) property.\n         */\n        get: function () {\n            var html = this.renderedCompletedHtml;\n            return !!html ? this.processHtml(html, \"completed\") : \"\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"processedCompletedBeforeHtml\", {\n        /**\n         * Returns HTML content displayed to a user who has completed the survey before. To identify such users, the survey uses a [cookie name](#cookieName) or [client ID](#clientId).\n         *\n         * To specify HTML content, use the [`completedBeforeHtml`](#completedBeforeHtml) property.\n         */\n        get: function () {\n            return this.locCompletedBeforeHtml.textOrHtml;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"processedLoadingHtml\", {\n        /**\n         * Returns HTML content displayed while a survey JSON schema is being loaded from [SurveyJS Service](https://api.surveyjs.io).\n         *\n         * To specify HTML content, use the [`loadingHtml`](#loadingHtml) property.\n         */\n        get: function () {\n            return this.locLoadingHtml.textOrHtml;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyModel.prototype.getProgressInfo = function () {\n        var pages = this.isDesignMode ? this.pages : this.visiblePages;\n        return _survey_element__WEBPACK_IMPORTED_MODULE_3__[\"SurveyElement\"].getProgressInfoByElements(pages, false);\n    };\n    Object.defineProperty(SurveyModel.prototype, \"progressText\", {\n        /**\n         * Returns text displayed by the progress bar (for instance, \"Page 2 of 3\" or \"Answered 3/8 questions\"). Handle the [`onProgressText`](#onProgressText) event to change this text.\n         * @see progressValue\n         * @see showProgressBar\n         * @see progressBarType\n         */\n        get: function () {\n            var res = this.getPropertyValue(\"progressText\", \"\");\n            if (!res) {\n                this.updateProgressText();\n                res = this.getPropertyValue(\"progressText\", \"\");\n            }\n            return res;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyModel.prototype.updateProgressText = function (onValueChanged) {\n        if (onValueChanged === void 0) { onValueChanged = false; }\n        if (this.isCalculatingProgressText)\n            return;\n        if (onValueChanged &&\n            this.progressBarType == \"pages\" &&\n            this.onProgressText.isEmpty)\n            return;\n        this.isCalculatingProgressText = true;\n        this.setPropertyValue(\"progressText\", this.getProgressText());\n        this.setPropertyValue(\"progressValue\", this.getProgress());\n        this.isCalculatingProgressText = false;\n    };\n    SurveyModel.prototype.getProgressText = function () {\n        if (!this.isDesignMode && this.currentPage == null)\n            return \"\";\n        var options = {\n            questionCount: 0,\n            answeredQuestionCount: 0,\n            requiredQuestionCount: 0,\n            requiredAnsweredQuestionCount: 0,\n            text: \"\",\n        };\n        var type = this.progressBarType.toLowerCase();\n        if (type === \"questions\" ||\n            type === \"requiredquestions\" ||\n            type === \"correctquestions\" ||\n            !this.onProgressText.isEmpty) {\n            var info = this.getProgressInfo();\n            options.questionCount = info.questionCount;\n            options.answeredQuestionCount = info.answeredQuestionCount;\n            options.requiredQuestionCount = info.requiredQuestionCount;\n            options.requiredAnsweredQuestionCount =\n                info.requiredAnsweredQuestionCount;\n        }\n        options.text = this.getProgressTextCore(options);\n        this.onProgressText.fire(this, options);\n        return options.text;\n    };\n    SurveyModel.prototype.getProgressTextCore = function (info) {\n        var type = this.progressBarType.toLowerCase();\n        if (type === \"questions\") {\n            return this.getLocalizationFormatString(\"questionsProgressText\", info.answeredQuestionCount, info.questionCount);\n        }\n        if (type === \"requiredquestions\") {\n            return this.getLocalizationFormatString(\"questionsProgressText\", info.requiredAnsweredQuestionCount, info.requiredQuestionCount);\n        }\n        if (type === \"correctquestions\") {\n            var correctAnswersCount = this.getCorrectedAnswerCount();\n            return this.getLocalizationFormatString(\"questionsProgressText\", correctAnswersCount, info.questionCount);\n        }\n        var vPages = this.isDesignMode ? this.pages : this.visiblePages;\n        var index = vPages.indexOf(this.currentPage) + 1;\n        return this.getLocalizationFormatString(\"progressText\", index, vPages.length);\n    };\n    SurveyModel.prototype.getRootCss = function () {\n        return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_18__[\"CssClassBuilder\"]()\n            .append(this.css.root)\n            .append(this.css.rootMobile, this.isMobile)\n            .append(this.css.rootReadOnly, this.mode === \"display\")\n            .append(this.css.rootCompact, this.isCompact)\n            .append(this.css.rootFitToContainer, this.fitToContainer)\n            .toString();\n    };\n    SurveyModel.prototype.afterRenderSurvey = function (htmlElement) {\n        var _this = this;\n        this.destroyResizeObserver();\n        if (Array.isArray(htmlElement)) {\n            htmlElement = _survey_element__WEBPACK_IMPORTED_MODULE_3__[\"SurveyElement\"].GetFirstNonTextElement(htmlElement);\n        }\n        var observedElement = htmlElement;\n        var cssVariables = this.css.variables;\n        if (!!cssVariables) {\n            var mobileWidth_1 = Number.parseFloat(window.getComputedStyle(observedElement).getPropertyValue(cssVariables.mobileWidth));\n            if (!!mobileWidth_1) {\n                var isProcessed_1 = false;\n                this.resizeObserver = new ResizeObserver(function (entries) {\n                    window.requestAnimationFrame(function () {\n                        if (isProcessed_1 || !Object(_utils_utils__WEBPACK_IMPORTED_MODULE_15__[\"isContainerVisible\"])(observedElement)) {\n                            isProcessed_1 = false;\n                        }\n                        else {\n                            isProcessed_1 = _this.processResponsiveness(observedElement.offsetWidth, mobileWidth_1);\n                        }\n                    });\n                });\n                this.resizeObserver.observe(observedElement);\n            }\n        }\n        this.onAfterRenderSurvey.fire(this, {\n            survey: this,\n            htmlElement: htmlElement,\n        });\n        this.rootElement = htmlElement;\n        this.addScrollEventListener();\n    };\n    SurveyModel.prototype.processResponsiveness = function (width, mobileWidth) {\n        var isMobile = width < mobileWidth;\n        if (this.isMobile === isMobile) {\n            return false;\n        }\n        else {\n            this.setIsMobile(isMobile);\n            return true;\n        }\n    };\n    SurveyModel.prototype.triggerResponsiveness = function (hard) {\n        this.getAllQuestions().forEach(function (question) {\n            question.triggerResponsiveness(hard);\n        });\n    };\n    SurveyModel.prototype.destroyResizeObserver = function () {\n        if (!!this.resizeObserver) {\n            this.resizeObserver.disconnect();\n            this.resizeObserver = undefined;\n        }\n    };\n    SurveyModel.prototype.updateQuestionCssClasses = function (question, cssClasses) {\n        this.onUpdateQuestionCssClasses.fire(this, {\n            question: question,\n            cssClasses: cssClasses,\n        });\n    };\n    SurveyModel.prototype.updatePanelCssClasses = function (panel, cssClasses) {\n        this.onUpdatePanelCssClasses.fire(this, {\n            panel: panel,\n            cssClasses: cssClasses,\n        });\n    };\n    SurveyModel.prototype.updatePageCssClasses = function (page, cssClasses) {\n        this.onUpdatePageCssClasses.fire(this, {\n            page: page,\n            cssClasses: cssClasses,\n        });\n    };\n    SurveyModel.prototype.updateChoiceItemCss = function (question, options) {\n        options.question = question;\n        this.onUpdateChoiceItemCss.fire(this, options);\n    };\n    SurveyModel.prototype.afterRenderPage = function (htmlElement) {\n        var _this = this;\n        if (!this.isDesignMode && !this.focusingQuestionInfo) {\n            setTimeout(function () { return _this.scrollToTopOnPageChange(!_this.isFirstPageRendering); }, 1);\n        }\n        this.focusQuestionInfo();\n        this.isFirstPageRendering = false;\n        if (this.onAfterRenderPage.isEmpty)\n            return;\n        this.onAfterRenderPage.fire(this, {\n            page: this.activePage,\n            htmlElement: htmlElement,\n        });\n    };\n    SurveyModel.prototype.afterRenderHeader = function (htmlElement) {\n        if (this.onAfterRenderHeader.isEmpty)\n            return;\n        this.onAfterRenderHeader.fire(this, {\n            htmlElement: htmlElement,\n        });\n    };\n    SurveyModel.prototype.afterRenderQuestion = function (question, htmlElement) {\n        this.onAfterRenderQuestion.fire(this, {\n            question: question,\n            htmlElement: htmlElement,\n        });\n    };\n    SurveyModel.prototype.afterRenderQuestionInput = function (question, htmlElement) {\n        if (this.onAfterRenderQuestionInput.isEmpty)\n            return;\n        var id = question.inputId;\n        var root = _settings__WEBPACK_IMPORTED_MODULE_14__[\"settings\"].environment.root;\n        if (!!id && htmlElement.id !== id && typeof root !== \"undefined\") {\n            var el = root.getElementById(id);\n            if (!!el) {\n                htmlElement = el;\n            }\n        }\n        this.onAfterRenderQuestionInput.fire(this, {\n            question: question,\n            htmlElement: htmlElement,\n        });\n    };\n    SurveyModel.prototype.afterRenderPanel = function (panel, htmlElement) {\n        this.onAfterRenderPanel.fire(this, {\n            panel: panel,\n            htmlElement: htmlElement,\n        });\n    };\n    SurveyModel.prototype.whenQuestionFocusIn = function (question) {\n        this.onFocusInQuestion.fire(this, {\n            question: question\n        });\n    };\n    SurveyModel.prototype.whenPanelFocusIn = function (panel) {\n        this.onFocusInPanel.fire(this, {\n            panel: panel\n        });\n    };\n    SurveyModel.prototype.rebuildQuestionChoices = function () {\n        this.getAllQuestions().forEach(function (q) { return q.surveyChoiceItemVisibilityChange(); });\n    };\n    SurveyModel.prototype.canChangeChoiceItemsVisibility = function () {\n        return !this.onShowingChoiceItem.isEmpty;\n    };\n    SurveyModel.prototype.getChoiceItemVisibility = function (question, item, val) {\n        var options = { question: question, item: item, visible: val };\n        this.onShowingChoiceItem.fire(this, options);\n        return options.visible;\n    };\n    SurveyModel.prototype.loadQuestionChoices = function (options) {\n        this.onChoicesLazyLoad.fire(this, options);\n    };\n    SurveyModel.prototype.getChoiceDisplayValue = function (options) {\n        if (this.onGetChoiceDisplayValue.isEmpty) {\n            options.setItems(null);\n        }\n        else {\n            this.onGetChoiceDisplayValue.fire(this, options);\n        }\n    };\n    SurveyModel.prototype.matrixBeforeRowAdded = function (options) {\n        this.onMatrixRowAdding.fire(this, options);\n    };\n    SurveyModel.prototype.matrixRowAdded = function (question, row) {\n        this.onMatrixRowAdded.fire(this, { question: question, row: row });\n    };\n    SurveyModel.prototype.matrixColumnAdded = function (question, column) {\n        this.onMatrixColumnAdded.fire(this, { question: question, column: column });\n    };\n    SurveyModel.prototype.multipleTextItemAdded = function (question, item) {\n        this.onMultipleTextItemAdded.fire(this, { question: question, item: item });\n    };\n    SurveyModel.prototype.getQuestionByValueNameFromArray = function (valueName, name, index) {\n        var questions = this.getQuestionsByValueName(valueName);\n        if (!questions)\n            return;\n        for (var i = 0; i < questions.length; i++) {\n            var res = questions[i].getQuestionFromArray(name, index);\n            if (!!res)\n                return res;\n        }\n        return null;\n    };\n    SurveyModel.prototype.matrixRowRemoved = function (question, rowIndex, row) {\n        this.onMatrixRowRemoved.fire(this, {\n            question: question,\n            rowIndex: rowIndex,\n            row: row,\n        });\n    };\n    SurveyModel.prototype.matrixRowRemoving = function (question, rowIndex, row) {\n        var options = {\n            question: question,\n            rowIndex: rowIndex,\n            row: row,\n            allow: true,\n        };\n        this.onMatrixRowRemoving.fire(this, options);\n        return options.allow;\n    };\n    SurveyModel.prototype.matrixAllowRemoveRow = function (question, rowIndex, row) {\n        var options = {\n            question: question,\n            rowIndex: rowIndex,\n            row: row,\n            allow: true,\n        };\n        this.onMatrixRenderRemoveButton.fire(this, options);\n        return options.allow;\n    };\n    SurveyModel.prototype.matrixCellCreating = function (question, options) {\n        options.question = question;\n        this.onMatrixCellCreating.fire(this, options);\n    };\n    SurveyModel.prototype.matrixCellCreated = function (question, options) {\n        options.question = question;\n        this.onMatrixCellCreated.fire(this, options);\n    };\n    SurveyModel.prototype.matrixAfterCellRender = function (question, options) {\n        options.question = question;\n        this.onAfterRenderMatrixCell.fire(this, options);\n    };\n    SurveyModel.prototype.matrixCellValueChanged = function (question, options) {\n        options.question = question;\n        this.onMatrixCellValueChanged.fire(this, options);\n    };\n    SurveyModel.prototype.matrixCellValueChanging = function (question, options) {\n        options.question = question;\n        this.onMatrixCellValueChanging.fire(this, options);\n    };\n    Object.defineProperty(SurveyModel.prototype, \"isValidateOnValueChanging\", {\n        get: function () {\n            return this.checkErrorsMode === \"onValueChanging\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"isValidateOnValueChanged\", {\n        get: function () {\n            return this.checkErrorsMode === \"onValueChanged\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"isValidateOnComplete\", {\n        get: function () {\n            return this.checkErrorsMode === \"onComplete\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyModel.prototype.matrixCellValidate = function (question, options) {\n        options.question = question;\n        this.onMatrixCellValidate.fire(this, options);\n        return options.error ? new _error__WEBPACK_IMPORTED_MODULE_9__[\"CustomError\"](options.error, this) : null;\n    };\n    SurveyModel.prototype.dynamicPanelAdded = function (question, panelIndex, panel) {\n        if (!this.isLoadingFromJson) {\n            this.updateVisibleIndexes();\n        }\n        if (this.onDynamicPanelAdded.isEmpty)\n            return;\n        var panels = question.panels;\n        if (panelIndex === undefined) {\n            panelIndex = panels.length - 1;\n            panel = panels[panelIndex];\n        }\n        this.onDynamicPanelAdded.fire(this, { question: question, panel: panel, panelIndex: panelIndex });\n    };\n    SurveyModel.prototype.dynamicPanelRemoved = function (question, panelIndex, panel) {\n        var questions = !!panel ? panel.questions : [];\n        for (var i = 0; i < questions.length; i++) {\n            questions[i].clearOnDeletingContainer();\n        }\n        this.updateVisibleIndexes();\n        this.onDynamicPanelRemoved.fire(this, {\n            question: question,\n            panelIndex: panelIndex,\n            panel: panel,\n        });\n    };\n    SurveyModel.prototype.dynamicPanelRemoving = function (question, panelIndex, panel) {\n        var options = {\n            question: question,\n            panelIndex: panelIndex,\n            panel: panel,\n            allow: true\n        };\n        this.onDynamicPanelRemoving.fire(this, options);\n        return options.allow;\n    };\n    SurveyModel.prototype.dynamicPanelItemValueChanged = function (question, options) {\n        options.question = question;\n        options.panelIndex = options.itemIndex;\n        options.panelData = options.itemValue;\n        this.onDynamicPanelItemValueChanged.fire(this, options);\n    };\n    SurveyModel.prototype.dynamicPanelGetTabTitle = function (question, options) {\n        options.question = question;\n        this.onGetDynamicPanelTabTitle.fire(this, options);\n    };\n    SurveyModel.prototype.dragAndDropAllow = function (options) {\n        this.onDragDropAllow.fire(this, options);\n        return options.allow;\n    };\n    SurveyModel.prototype.elementContentVisibilityChanged = function (element) {\n        if (this.currentPage) {\n            this.currentPage.ensureRowsVisibility();\n        }\n        this.onElementContentVisibilityChanged.fire(this, { element: element });\n    };\n    SurveyModel.prototype.getUpdatedPanelFooterActions = function (panel, actions, question) {\n        var options = {\n            question: question,\n            panel: panel,\n            actions: actions,\n        };\n        this.onGetPanelFooterActions.fire(this, options);\n        return options.actions;\n    };\n    SurveyModel.prototype.getUpdatedElementTitleActions = function (element, titleActions) {\n        if (element.isPage)\n            return this.getUpdatedPageTitleActions(element, titleActions);\n        if (element.isPanel)\n            return this.getUpdatedPanelTitleActions(element, titleActions);\n        return this.getUpdatedQuestionTitleActions(element, titleActions);\n    };\n    SurveyModel.prototype.getUpdatedQuestionTitleActions = function (question, titleActions) {\n        var options = {\n            question: question,\n            titleActions: titleActions,\n        };\n        this.onGetQuestionTitleActions.fire(this, options);\n        return options.titleActions;\n    };\n    SurveyModel.prototype.getUpdatedPanelTitleActions = function (panel, titleActions) {\n        var options = {\n            panel: panel,\n            titleActions: titleActions,\n        };\n        this.onGetPanelTitleActions.fire(this, options);\n        return options.titleActions;\n    };\n    SurveyModel.prototype.getUpdatedPageTitleActions = function (page, titleActions) {\n        var options = {\n            page: page,\n            titleActions: titleActions,\n        };\n        this.onGetPageTitleActions.fire(this, options);\n        return options.titleActions;\n    };\n    SurveyModel.prototype.getUpdatedMatrixRowActions = function (question, row, actions) {\n        var options = {\n            question: question,\n            actions: actions,\n            row: row,\n        };\n        this.onGetMatrixRowActions.fire(this, options);\n        return options.actions;\n    };\n    SurveyModel.prototype.scrollElementToTop = function (element, question, page, id, scrollIfVisible) {\n        var options = {\n            element: element,\n            question: question,\n            page: page,\n            elementId: id,\n            cancel: false,\n        };\n        this.onScrollingElementToTop.fire(this, options);\n        if (!options.cancel) {\n            _survey_element__WEBPACK_IMPORTED_MODULE_3__[\"SurveyElement\"].ScrollElementToTop(options.elementId, scrollIfVisible);\n        }\n    };\n    /**\n     * Uploads a file to server.\n     *\n     * The following code shows how to call this method:\n     *\n     * ```js\n     * const question = survey.getQuestionByName(\"myFileQuestion\");\n     * survey.uploadFiles(\n     *   question,\n     *   question.name,\n     *   question.value,\n     *   (status, data) => {\n     *     if (status === \"success\") {\n     *       // Handle success\n     *     }\n     *     if (status === \"error\") {\n     *       // Handle error\n     *     }\n     *   }\n     * );\n     * ```\n     * @param question A [File Upload question instance](https://surveyjs.io/form-library/documentation/api-reference/file-model).\n     * @param name The File Upload question's [`name`](https://surveyjs.io/form-library/documentation/api-reference/file-model#name).\n     * @param files An array of JavaScript <a href=\"https://developer.mozilla.org/en-US/docs/Web/API/File\" target=\"_blank\">File</a> objects that represent files to upload.\n     * @param callback A callback function that allows you to get the upload status (`\"success\"` or `\"error\"`) and file data.\n     * @see onUploadFiles\n     * @see downloadFile\n     */\n    SurveyModel.prototype.uploadFiles = function (question, name, files, callback) {\n        if (this.onUploadFiles.isEmpty) {\n            callback(\"error\", files);\n        }\n        else {\n            this.onUploadFiles.fire(this, {\n                question: question,\n                name: name,\n                files: files || [],\n                callback: callback,\n            });\n        }\n        if (this.surveyPostId) {\n            this.uploadFilesCore(name, files, callback);\n        }\n    };\n    /**\n     * Downloads a file from a server.\n     *\n     * The following code shows how to call this method:\n     *\n     * ```js\n     * const question = survey.getQuestionByName(\"myFileQuestion\");\n     * survey.downloadFile(\n     *   question,\n     *   question.name,\n     *   // Download the first uploaded file\n     *   question.value[0],\n     *   (status, data) => {\n     *     if (status === \"success\") {\n     *       // Use `data` to retrieve the file\n     *     }\n     *     if (status === \"error\") {\n     *       // Handle error\n     *     }\n     *   }\n     * );\n     * ```\n     *\n     * @param question A [File Upload question instance](https://surveyjs.io/form-library/documentation/api-reference/file-model).\n     * @param questionName The File Upload question's [`name`](https://surveyjs.io/form-library/documentation/api-reference/file-model#name).\n     * @param fileValue An object from File Upload's [`value`](https://surveyjs.io/form-library/documentation/api-reference/file-model#value) array. This object contains metadata about the file you want to download.\n     * @param callback A callback function that allows you to get the download status (`\"success\"` or `\"error\"`) and the file identifier (URL, file name, etc.) that you can use to retrieve the file.\n     * @see onDownloadFile\n     * @see uploadFiles\n     */\n    SurveyModel.prototype.downloadFile = function (question, questionName, fileValue, callback) {\n        if (this.onDownloadFile.isEmpty) {\n            !!callback && callback(\"success\", fileValue.content || fileValue);\n        }\n        this.onDownloadFile.fire(this, {\n            question: question,\n            name: questionName,\n            content: fileValue.content || fileValue,\n            fileValue: fileValue,\n            callback: callback,\n        });\n    };\n    SurveyModel.prototype.clearFiles = function (question, name, value, fileName, callback) {\n        if (this.onClearFiles.isEmpty) {\n            !!callback && callback(\"success\", value);\n        }\n        this.onClearFiles.fire(this, {\n            question: question,\n            name: name,\n            value: value,\n            fileName: fileName,\n            callback: callback,\n        });\n    };\n    SurveyModel.prototype.updateChoicesFromServer = function (question, choices, serverResult) {\n        var options = {\n            question: question,\n            choices: choices,\n            serverResult: serverResult,\n        };\n        this.onLoadChoicesFromServer.fire(this, options);\n        return options.choices;\n    };\n    SurveyModel.prototype.loadedChoicesFromServer = function (question) {\n        this.locStrsChanged();\n    };\n    SurveyModel.prototype.createSurveyService = function () {\n        return new _dxSurveyService__WEBPACK_IMPORTED_MODULE_7__[\"dxSurveyService\"]();\n    };\n    SurveyModel.prototype.uploadFilesCore = function (name, files, uploadingCallback) {\n        var _this = this;\n        var responses = [];\n        files.forEach(function (file) {\n            if (uploadingCallback)\n                uploadingCallback(\"uploading\", file);\n            _this.createSurveyService().sendFile(_this.surveyPostId, file, function (success, response) {\n                if (success) {\n                    responses.push({ content: response, file: file });\n                    if (responses.length === files.length) {\n                        if (uploadingCallback)\n                            uploadingCallback(\"success\", responses);\n                    }\n                }\n                else {\n                    if (uploadingCallback)\n                        uploadingCallback(\"error\", {\n                            response: response,\n                            file: file,\n                        });\n                }\n            });\n        });\n    };\n    SurveyModel.prototype.getPage = function (index) {\n        return this.pages[index];\n    };\n    /**\n     * Adds an existing page to the survey.\n     * @param page A page to add.\n     * @param index An index at which to insert the page. If you do not specify this parameter, the page will be added to the end.\n     * @see addNewPage\n     * @see createNewPage\n     */\n    SurveyModel.prototype.addPage = function (page, index) {\n        if (index === void 0) { index = -1; }\n        if (page == null)\n            return;\n        if (index < 0 || index >= this.pages.length) {\n            this.pages.push(page);\n        }\n        else {\n            this.pages.splice(index, 0, page);\n        }\n    };\n    /**\n     * Creates a new page and adds it to the survey.\n     *\n     * If you want to switch a survey to the newly added page, assign its index to the [`currentPageNo`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#currentPageNo) property or assign the entire page to the [`currentPage`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#currentPage) property.\n     *\n     * @param name A page name. If you do not specify this parameter, it will be generated automatically.\n     * @param index An index at which to insert the page. If you do not specify this parameter, the page will be added to the end.\n     * @returns The created and added page.\n     * @see addPage\n     * @see createNewPage\n     */\n    SurveyModel.prototype.addNewPage = function (name, index) {\n        if (name === void 0) { name = null; }\n        if (index === void 0) { index = -1; }\n        var page = this.createNewPage(name);\n        this.addPage(page, index);\n        return page;\n    };\n    /**\n     * Removes a page from the survey.\n     *\n     * Pass a `PageModel` object to this method. You can get this object in different ways. For example, you can call the [`getPageByName()`](#getPageByName) method to obtain a `PageModel` object with a specific name or use the [`currentPage`](#currentPage) property to access and delete the current page, as shown in the code below.\n     *\n     * ```js\n     * // Delete the current page\n     * survey.removePage(survey.currentPage);\n     * ```\n     * @param page A page to remove.\n     * @see addNewPage\n     */\n    SurveyModel.prototype.removePage = function (page) {\n        var index = this.pages.indexOf(page);\n        if (index < 0)\n            return;\n        this.pages.splice(index, 1);\n        if (this.currentPage == page) {\n            this.currentPage = this.pages.length > 0 ? this.pages[0] : null;\n        }\n    };\n    /**\n     * Returns a question with a specified [`name`](https://surveyjs.io/form-library/documentation/api-reference/question#name).\n     * @param name A question name\n     * @param caseInsensitive (Optional) A Boolean value that specifies case sensitivity when searching for the question. Default value: `false` (uppercase and lowercase letters are treated as distinct).\n     * @returns A question with a specified name.\n     * @see getAllQuestions\n     * @see getQuestionByValueName\n     */\n    SurveyModel.prototype.getQuestionByName = function (name, caseInsensitive) {\n        if (caseInsensitive === void 0) { caseInsensitive = false; }\n        if (!name)\n            return null;\n        if (caseInsensitive) {\n            name = name.toLowerCase();\n        }\n        var hash = !!caseInsensitive\n            ? this.questionHashes.namesInsensitive\n            : this.questionHashes.names;\n        var res = hash[name];\n        if (!res)\n            return null;\n        return res[0];\n    };\n    SurveyModel.prototype.findQuestionByName = function (name) {\n        return this.getQuestionByName(name);\n    };\n    /**\n     * Returns a question with a specified [`valueName`](https://surveyjs.io/form-library/documentation/api-reference/question#valueName).\n     *\n     * > Since `valueName` does not have to be unique, multiple questions can have the same `valueName` value. In this case, the `getQuestionByValueName()` method returns the first such question. If you need to get all questions with the same `valueName`, call the `getQuestionsByValueName()` method.\n     * @param valueName A question's `valueName` property value.\n     * @param caseInsensitive (Optional) A Boolean value that specifies case sensitivity when searching for the question. Default value: `false` (uppercase and lowercase letters are treated as distinct).\n     * @returns A question with a specified `valueName`.\n     * @see getAllQuestions\n     * @see getQuestionByName\n     */\n    SurveyModel.prototype.getQuestionByValueName = function (valueName, caseInsensitive) {\n        if (caseInsensitive === void 0) { caseInsensitive = false; }\n        var res = this.getQuestionsByValueName(valueName, caseInsensitive);\n        return !!res ? res[0] : null;\n    };\n    /**\n     * Returns all questions with a specified [`valueName`](https://surveyjs.io/form-library/documentation/api-reference/question#valueName). If a question's `valueName` is undefined, its [`name`](https://surveyjs.io/form-library/documentation/api-reference/question#name) property is used.\n     * @param valueName A question's `valueName` property value.\n     * @param caseInsensitive (Optional) A Boolean value that specifies case sensitivity when searching for the questions. Default value: `false` (uppercase and lowercase letters are treated as distinct).\n     * @returns An array of questions with a specified `valueName`.\n     * @see getAllQuestions\n     * @see getQuestionByName\n     */\n    SurveyModel.prototype.getQuestionsByValueName = function (valueName, caseInsensitive) {\n        if (caseInsensitive === void 0) { caseInsensitive = false; }\n        var hash = !!caseInsensitive\n            ? this.questionHashes.valueNamesInsensitive\n            : this.questionHashes.valueNames;\n        var res = hash[valueName];\n        if (!res)\n            return null;\n        return res;\n    };\n    SurveyModel.prototype.getCalculatedValueByName = function (name) {\n        for (var i = 0; i < this.calculatedValues.length; i++) {\n            if (name == this.calculatedValues[i].name)\n                return this.calculatedValues[i];\n        }\n        return null;\n    };\n    /**\n     * Returns an array of questions with specified [names](https://surveyjs.io/form-library/documentation/api-reference/question#name).\n     * @param names An array of question names.\n     * @param caseInsensitive (Optional) A Boolean value that specifies case sensitivity when searching for the questions. Default value: `false` (uppercase and lowercase letters are treated as distinct).\n     * @returns An array of questions with specified names\n     * @see getAllQuestions\n     */\n    SurveyModel.prototype.getQuestionsByNames = function (names, caseInsensitive) {\n        if (caseInsensitive === void 0) { caseInsensitive = false; }\n        var result = [];\n        if (!names)\n            return result;\n        for (var i = 0; i < names.length; i++) {\n            if (!names[i])\n                continue;\n            var question = this.getQuestionByName(names[i], caseInsensitive);\n            if (question)\n                result.push(question);\n        }\n        return result;\n    };\n    /**\n     * Returns a page to which a specified survey element (question or panel) belongs.\n     * @param element A question or panel instance.\n     */\n    SurveyModel.prototype.getPageByElement = function (element) {\n        for (var i = 0; i < this.pages.length; i++) {\n            var page = this.pages[i];\n            if (page.containsElement(element))\n                return page;\n        }\n        return null;\n    };\n    /**\n     * Returns a page to which a specified question belongs.\n     * @param question A question instance.\n     */\n    SurveyModel.prototype.getPageByQuestion = function (question) {\n        return this.getPageByElement(question);\n    };\n    /**\n     * Returns a page with a specified name.\n     * @param name A page [name](https://surveyjs.io/form-library/documentation/api-reference/page-model#name).\n     */\n    SurveyModel.prototype.getPageByName = function (name) {\n        for (var i = 0; i < this.pages.length; i++) {\n            if (this.pages[i].name == name)\n                return this.pages[i];\n        }\n        return null;\n    };\n    /**\n     * Returns an array of pages with specified names.\n     * @param names An array of page names.\n     */\n    SurveyModel.prototype.getPagesByNames = function (names) {\n        var result = [];\n        if (!names)\n            return result;\n        for (var i = 0; i < names.length; i++) {\n            if (!names[i])\n                continue;\n            var page = this.getPageByName(names[i]);\n            if (page)\n                result.push(page);\n        }\n        return result;\n    };\n    /**\n     * Returns a list of all [questions](https://surveyjs.io/form-library/documentation/api-reference/question) in the survey.\n     * @param visibleOnly A Boolean value that specifies whether to include only visible questions.\n     * @param includeDesignTime For internal use.\n     * @param includeNested A Boolean value that specifies whether to include nested questions, such as questions within matrix cells.\n     * @returns An array of questions.\n     * @see getQuestionByName\n     */\n    SurveyModel.prototype.getAllQuestions = function (visibleOnly, includeDesignTime, includeNested) {\n        if (visibleOnly === void 0) { visibleOnly = false; }\n        if (includeDesignTime === void 0) { includeDesignTime = false; }\n        if (includeNested === void 0) { includeNested = false; }\n        if (includeNested)\n            includeDesignTime = false;\n        var res = [];\n        for (var i = 0; i < this.pages.length; i++) {\n            this.pages[i].addQuestionsToList(res, visibleOnly, includeDesignTime);\n        }\n        if (!includeNested)\n            return res;\n        var res2 = [];\n        res.forEach(function (q) {\n            res2.push(q);\n            q.getNestedQuestions(visibleOnly).forEach(function (nQ) { return res2.push(nQ); });\n        });\n        return res2;\n    };\n    /**\n     * Returns an array of quiz questions. A question counts if it is visible, has an input field, and specifies [`correctAnswer`](https://surveyjs.io/form-library/documentation/api-reference/checkbox-question-model#correctAnswer).\n     *\n     * For more information about quizzes, refer to the following tutorial: [Create a Quiz](https://surveyjs.io/form-library/documentation/design-survey/create-a-quiz).\n     * @returns An array of quiz questions.\n     * @see getQuizQuestionCount\n     */\n    SurveyModel.prototype.getQuizQuestions = function () {\n        var result = new Array();\n        var startIndex = this.getPageStartIndex();\n        for (var i = startIndex; i < this.pages.length; i++) {\n            if (!this.pages[i].isVisible)\n                continue;\n            var questions = this.pages[i].questions;\n            for (var j = 0; j < questions.length; j++) {\n                var q = questions[j];\n                if (q.quizQuestionCount > 0) {\n                    result.push(q);\n                }\n            }\n        }\n        return result;\n    };\n    /**\n     * Returns a [panel](https://surveyjs.io/form-library/documentation/api-reference/panel-model) with a specified [`name`](https://surveyjs.io/form-library/documentation/api-reference/panel-model#name).\n     * @param name A panel name.\n     * @param caseInsensitive (Optional) A Boolean value that specifies case sensitivity when searching for the panel. Default value: `false` (uppercase and lowercase letters are treated as distinct).\n     * @returns A panel with a specified name.\n     * @see getAllPanels\n     */\n    SurveyModel.prototype.getPanelByName = function (name, caseInsensitive) {\n        if (caseInsensitive === void 0) { caseInsensitive = false; }\n        var panels = this.getAllPanels();\n        if (caseInsensitive)\n            name = name.toLowerCase();\n        for (var i = 0; i < panels.length; i++) {\n            var panelName = panels[i].name;\n            if (caseInsensitive)\n                panelName = panelName.toLowerCase();\n            if (panelName == name)\n                return panels[i];\n        }\n        return null;\n    };\n    /**\n     * Returns a list of all [panels](https://surveyjs.io/form-library/documentation/api-reference/panel-model) in the survey.\n     * @param visibleOnly A Boolean value that specifies whether to include only visible panels.\n     * @param includeDesignTime For internal use.\n     * @returns An array of panels.\n     * @see getPanelByName\n     */\n    SurveyModel.prototype.getAllPanels = function (visibleOnly, includeDesignTime) {\n        if (visibleOnly === void 0) { visibleOnly = false; }\n        if (includeDesignTime === void 0) { includeDesignTime = false; }\n        var result = new Array();\n        for (var i = 0; i < this.pages.length; i++) {\n            this.pages[i].addPanelsIntoList(result, visibleOnly, includeDesignTime);\n        }\n        return result;\n    };\n    /**\n     * Creates and returns a new page but does not add it to the survey.\n     *\n     * Call the [`addPage(page)`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#addPage) method to add the created page to the survey later or the [`addNewPage(name, index)`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#addNewPage) method to create _and_ add a page to the survey.\n     * @see addPage\n     * @see addNewPage\n     */\n    SurveyModel.prototype.createNewPage = function (name) {\n        var page = _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].createClass(\"page\");\n        page.name = name;\n        return page;\n    };\n    SurveyModel.prototype.questionOnValueChanging = function (valueName, newValue) {\n        if (!!this.editingObj) {\n            var prop = _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].findProperty(this.editingObj.getType(), valueName);\n            if (!!prop)\n                newValue = prop.settingValue(this.editingObj, newValue);\n        }\n        if (this.onValueChanging.isEmpty)\n            return newValue;\n        var options = {\n            name: valueName,\n            question: this.getQuestionByValueName(valueName),\n            value: this.getUnbindValue(newValue),\n            oldValue: this.getValue(valueName),\n        };\n        this.onValueChanging.fire(this, options);\n        return options.value;\n    };\n    SurveyModel.prototype.updateQuestionValue = function (valueName, newValue) {\n        if (this.isLoadingFromJson)\n            return;\n        var questions = this.getQuestionsByValueName(valueName);\n        if (!!questions) {\n            for (var i = 0; i < questions.length; i++) {\n                var qValue = questions[i].value;\n                if ((qValue === newValue && Array.isArray(qValue) && !!this.editingObj) ||\n                    !this.isTwoValueEquals(qValue, newValue)) {\n                    questions[i].updateValueFromSurvey(newValue);\n                }\n            }\n        }\n    };\n    SurveyModel.prototype.checkQuestionErrorOnValueChanged = function (question) {\n        if (!this.isNavigationButtonPressed &&\n            (this.isValidateOnValueChanged ||\n                question.getAllErrors().length > 0)) {\n            this.checkQuestionErrorOnValueChangedCore(question);\n        }\n    };\n    SurveyModel.prototype.checkQuestionErrorOnValueChangedCore = function (question) {\n        var oldErrorCount = question.getAllErrors().length;\n        var res = !question.validate(true, {\n            isOnValueChanged: !this.isValidateOnValueChanging,\n        });\n        var isCheckErrorOnChanged = this.checkErrorsMode.indexOf(\"Value\") > -1;\n        if (!!question.page && isCheckErrorOnChanged &&\n            (oldErrorCount > 0 || question.getAllErrors().length > 0)) {\n            this.fireValidatedErrorsOnPage(question.page);\n        }\n        return res;\n    };\n    SurveyModel.prototype.checkErrorsOnValueChanging = function (valueName, newValue) {\n        if (this.isLoadingFromJson)\n            return false;\n        var questions = this.getQuestionsByValueName(valueName);\n        if (!questions)\n            return false;\n        var res = false;\n        for (var i = 0; i < questions.length; i++) {\n            var q = questions[i];\n            if (!this.isTwoValueEquals(q.valueForSurvey, newValue)) {\n                q.value = newValue;\n            }\n            if (this.checkQuestionErrorOnValueChangedCore(q))\n                res = true;\n            res = res || q.errors.length > 0;\n        }\n        return res;\n    };\n    SurveyModel.prototype.notifyQuestionOnValueChanged = function (valueName, newValue, questionName) {\n        if (this.isLoadingFromJson)\n            return;\n        var questions = this.getQuestionsByValueName(valueName);\n        if (!!questions) {\n            for (var i = 0; i < questions.length; i++) {\n                var question = questions[i];\n                this.checkQuestionErrorOnValueChanged(question);\n                question.onSurveyValueChanged(newValue);\n                this.onValueChanged.fire(this, {\n                    name: valueName,\n                    question: question,\n                    value: newValue,\n                });\n            }\n        }\n        else {\n            this.onValueChanged.fire(this, {\n                name: valueName,\n                question: null,\n                value: newValue,\n            });\n        }\n        if (this.isDisposed)\n            return;\n        this.checkElementsBindings(valueName, newValue);\n        this.notifyElementsOnAnyValueOrVariableChanged(valueName, questionName);\n    };\n    SurveyModel.prototype.checkElementsBindings = function (valueName, newValue) {\n        this.isRunningElementsBindings = true;\n        for (var i = 0; i < this.pages.length; i++) {\n            this.pages[i].checkBindings(valueName, newValue);\n        }\n        this.isRunningElementsBindings = false;\n        if (this.updateVisibleIndexAfterBindings) {\n            this.updateVisibleIndexes();\n            this.updateVisibleIndexAfterBindings = false;\n        }\n    };\n    SurveyModel.prototype.notifyElementsOnAnyValueOrVariableChanged = function (name, questionName) {\n        if (this.isEndLoadingFromJson === \"processing\")\n            return;\n        if (this.isRunningConditions) {\n            this.conditionNotifyElementsOnAnyValueOrVariableChanged = true;\n            return;\n        }\n        for (var i = 0; i < this.pages.length; i++) {\n            this.pages[i].onAnyValueChanged(name, questionName);\n        }\n        if (!this.isEndLoadingFromJson) {\n            this.locStrsChanged();\n        }\n    };\n    SurveyModel.prototype.updateAllQuestionsValue = function () {\n        var questions = this.getAllQuestions();\n        for (var i = 0; i < questions.length; i++) {\n            var q = questions[i];\n            var valName = q.getValueName();\n            q.updateValueFromSurvey(this.getValue(valName));\n            if (q.requireUpdateCommentValue) {\n                q.updateCommentFromSurvey(this.getComment(valName));\n            }\n        }\n    };\n    SurveyModel.prototype.notifyAllQuestionsOnValueChanged = function () {\n        var questions = this.getAllQuestions();\n        for (var i = 0; i < questions.length; i++) {\n            questions[i].onSurveyValueChanged(this.getValue(questions[i].getValueName()));\n        }\n    };\n    SurveyModel.prototype.checkOnPageTriggers = function (isOnComplete) {\n        var questions = this.getCurrentPageQuestions(true);\n        var values = {};\n        for (var i = 0; i < questions.length; i++) {\n            var question = questions[i];\n            var name = question.getValueName();\n            values[name] = this.getValue(name);\n        }\n        this.addCalculatedValuesIntoFilteredValues(values);\n        this.checkTriggers(values, true, isOnComplete);\n    };\n    SurveyModel.prototype.getCurrentPageQuestions = function (includeInvsible) {\n        if (includeInvsible === void 0) { includeInvsible = false; }\n        var result = [];\n        var page = this.currentPage;\n        if (!page)\n            return result;\n        for (var i = 0; i < page.questions.length; i++) {\n            var question = page.questions[i];\n            if ((!includeInvsible && !question.visible) || !question.name)\n                continue;\n            result.push(question);\n        }\n        return result;\n    };\n    SurveyModel.prototype.checkTriggers = function (key, isOnNextPage, isOnComplete, name) {\n        if (isOnComplete === void 0) { isOnComplete = false; }\n        if (this.isCompleted || this.triggers.length == 0 || this.isDisplayMode)\n            return;\n        if (this.isTriggerIsRunning) {\n            this.triggerValues = this.getFilteredValues();\n            for (var k in key) {\n                this.triggerKeys[k] = key[k];\n            }\n            return;\n        }\n        var isQuestionInvalid = false;\n        if (!isOnComplete && name && this.hasRequiredValidQuestionTrigger) {\n            var question = this.getQuestionByValueName(name);\n            isQuestionInvalid = question && !question.validate(false);\n        }\n        this.isTriggerIsRunning = true;\n        this.triggerKeys = key;\n        this.triggerValues = this.getFilteredValues();\n        var properties = this.getFilteredProperties();\n        var prevCanBeCompleted = this.canBeCompletedByTrigger;\n        for (var i = 0; i < this.triggers.length; i++) {\n            var trigger = this.triggers[i];\n            if (isQuestionInvalid && trigger.requireValidQuestion)\n                continue;\n            trigger.checkExpression(isOnNextPage, isOnComplete, this.triggerKeys, this.triggerValues, properties);\n        }\n        if (prevCanBeCompleted !== this.canBeCompletedByTrigger) {\n            this.updateButtonsVisibility();\n        }\n        this.isTriggerIsRunning = false;\n    };\n    Object.defineProperty(SurveyModel.prototype, \"hasRequiredValidQuestionTrigger\", {\n        get: function () {\n            for (var i = 0; i < this.triggers.length; i++) {\n                if (this.triggers[i].requireValidQuestion)\n                    return true;\n            }\n            return false;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyModel.prototype.doElementsOnLoad = function () {\n        for (var i = 0; i < this.pages.length; i++) {\n            this.pages[i].onSurveyLoad();\n        }\n    };\n    Object.defineProperty(SurveyModel.prototype, \"isRunningConditions\", {\n        get: function () {\n            return !!this.conditionValues;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyModel.prototype.runConditions = function () {\n        if (this.isCompleted ||\n            this.isEndLoadingFromJson === \"processing\" ||\n            this.isRunningConditions)\n            return;\n        this.conditionValues = this.getFilteredValues();\n        var properties = this.getFilteredProperties();\n        var oldCurrentPageIndex = this.pages.indexOf(this.currentPage);\n        this.runConditionsCore(properties);\n        this.checkIfNewPagesBecomeVisible(oldCurrentPageIndex);\n        this.conditionValues = null;\n        if (this.isValueChangedOnRunningCondition &&\n            this.conditionRunnerCounter <\n                _settings__WEBPACK_IMPORTED_MODULE_14__[\"settings\"].maxConditionRunCountOnValueChanged) {\n            this.isValueChangedOnRunningCondition = false;\n            this.conditionRunnerCounter++;\n            this.runConditions();\n        }\n        else {\n            this.isValueChangedOnRunningCondition = false;\n            this.conditionRunnerCounter = 0;\n            if (this.conditionUpdateVisibleIndexes) {\n                this.conditionUpdateVisibleIndexes = false;\n                this.updateVisibleIndexes();\n            }\n            if (this.conditionNotifyElementsOnAnyValueOrVariableChanged) {\n                this.conditionNotifyElementsOnAnyValueOrVariableChanged = false;\n                this.notifyElementsOnAnyValueOrVariableChanged(\"\");\n            }\n        }\n    };\n    SurveyModel.prototype.runConditionOnValueChanged = function (name, value) {\n        if (this.isRunningConditions) {\n            this.conditionValues[name] = value;\n            this.isValueChangedOnRunningCondition = true;\n        }\n        else {\n            this.runConditions();\n            this.runQuestionsTriggers(name, value);\n        }\n    };\n    SurveyModel.prototype.runConditionsCore = function (properties) {\n        var pages = this.pages;\n        for (var i = 0; i < this.calculatedValues.length; i++) {\n            this.calculatedValues[i].resetCalculation();\n        }\n        for (var i = 0; i < this.calculatedValues.length; i++) {\n            this.calculatedValues[i].doCalculation(this.calculatedValues, this.conditionValues, properties);\n        }\n        _super.prototype.runConditionCore.call(this, this.conditionValues, properties);\n        for (var i_3 = 0; i_3 < pages.length; i_3++) {\n            pages[i_3].runCondition(this.conditionValues, properties);\n        }\n    };\n    SurveyModel.prototype.runQuestionsTriggers = function (name, value) {\n        if (this.isDisplayMode || this.isDesignMode)\n            return;\n        var questions = this.getAllQuestions(true);\n        questions.forEach(function (q) { return q.runTriggers(name, value); });\n    };\n    SurveyModel.prototype.checkIfNewPagesBecomeVisible = function (oldCurrentPageIndex) {\n        var newCurrentPageIndex = this.pages.indexOf(this.currentPage);\n        if (newCurrentPageIndex <= oldCurrentPageIndex + 1)\n            return;\n        for (var i = oldCurrentPageIndex + 1; i < newCurrentPageIndex; i++) {\n            if (this.pages[i].isVisible) {\n                this.currentPage = this.pages[i];\n                break;\n            }\n        }\n    };\n    /**\n     * Posts a survey result to [SurveyJS Service](https://api.surveyjs.io/).\n     * @param postId An identifier used to save survey results. You can find it on the [My Surveys](https://surveyjs.io/service/mysurveys) page. If you do not specify this parameter, the survey uses the [`surveyPostId`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#surveyPostId) property value.\n     * @param clientId A respondent identifier (e-mail or other unique ID). This ID ensures that the respondent does not pass the same survey twice.\n     * @param isPartial Pass `true` to save partial survey results (see [Continue an Incomplete Survey](https://surveyjs.io/form-library/documentation/handle-survey-results-continue-incomplete)).\n     */\n    SurveyModel.prototype.sendResult = function (postId, clientId, isPartial) {\n        if (postId === void 0) { postId = null; }\n        if (clientId === void 0) { clientId = null; }\n        if (isPartial === void 0) { isPartial = false; }\n        if (!this.isEditMode)\n            return;\n        if (isPartial && this.onPartialSend) {\n            this.onPartialSend.fire(this, null);\n        }\n        if (!postId && this.surveyPostId) {\n            postId = this.surveyPostId;\n        }\n        if (!postId)\n            return;\n        if (clientId) {\n            this.clientId = clientId;\n        }\n        if (isPartial && !this.clientId)\n            return;\n        var self = this;\n        if (this.surveyShowDataSaving) {\n            this.setCompletedState(\"saving\", \"\");\n        }\n        this.createSurveyService().sendResult(postId, this.data, function (success, response, request) {\n            if (self.surveyShowDataSaving) {\n                if (success) {\n                    self.setCompletedState(\"success\", \"\");\n                }\n                else {\n                    self.setCompletedState(\"error\", response);\n                }\n            }\n            self.onSendResult.fire(self, {\n                success: success,\n                response: response,\n                request: request,\n            });\n        }, this.clientId, isPartial);\n    };\n    /**\n     * Requests [SurveyJS Service](https://api.surveyjs.io/) to retrieve all answers to a specified question. Handle the [`onGetResult`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#onGetResult) event to access the answers.\n     * @param resultId A result ID that identifies the required survey. You can find it on the [My Surveys](https://surveyjs.io/service/mysurveys) page.\n     * @param questionName A question name.\n     */\n    SurveyModel.prototype.getResult = function (resultId, questionName) {\n        var self = this;\n        this.createSurveyService().getResult(resultId, questionName, function (success, data, dataList, response) {\n            self.onGetResult.fire(self, {\n                success: success,\n                data: data,\n                dataList: dataList,\n                response: response,\n            });\n        });\n    };\n    /**\n     * Loads a survey JSON schema from the [SurveyJS Service](https://api.surveyjs.io). You can handle the [`onLoadedSurveyFromService`](#onLoadedSurveyFromService) event to modify the schema after loading if required.\n     * @param surveyId The identifier of a survey JSON schema to load. Refer to the following help topic for more information: [Store Survey Results in the SurveyJS Service](https://surveyjs.io/form-library/documentation/handle-survey-results-store#store-survey-results-in-the-surveyjs-service).\n     * @param clientId A user identifier (e-mail or other unique ID) used to determine whether the user has already taken the survey.\n     */\n    SurveyModel.prototype.loadSurveyFromService = function (surveyId, clientId) {\n        if (surveyId === void 0) { surveyId = null; }\n        if (clientId === void 0) { clientId = null; }\n        if (surveyId) {\n            this.surveyId = surveyId;\n        }\n        if (clientId) {\n            this.clientId = clientId;\n        }\n        var self = this;\n        this.isLoading = true;\n        this.onLoadingSurveyFromService();\n        if (clientId) {\n            this.createSurveyService().getSurveyJsonAndIsCompleted(this.surveyId, this.clientId, function (success, json, isCompleted, response) {\n                self.isLoading = false;\n                if (success) {\n                    self.isCompletedBefore = isCompleted == \"completed\";\n                    self.loadSurveyFromServiceJson(json);\n                }\n            });\n        }\n        else {\n            this.createSurveyService().loadSurvey(this.surveyId, function (success, result, response) {\n                self.isLoading = false;\n                if (success) {\n                    self.loadSurveyFromServiceJson(result);\n                }\n            });\n        }\n    };\n    SurveyModel.prototype.loadSurveyFromServiceJson = function (json) {\n        if (!json)\n            return;\n        this.fromJSON(json);\n        this.notifyAllQuestionsOnValueChanged();\n        this.onLoadSurveyFromService();\n        this.onLoadedSurveyFromService.fire(this, {});\n    };\n    SurveyModel.prototype.onLoadingSurveyFromService = function () { };\n    SurveyModel.prototype.onLoadSurveyFromService = function () { };\n    SurveyModel.prototype.resetVisibleIndexes = function () {\n        var questions = this.getAllQuestions(true);\n        for (var i = 0; i < questions.length; i++) {\n            questions[i].setVisibleIndex(-1);\n        }\n        this.updateVisibleIndexes();\n    };\n    SurveyModel.prototype.updateVisibleIndexes = function () {\n        if (this.isLoadingFromJson || !!this.isEndLoadingFromJson)\n            return;\n        if (this.isRunningConditions &&\n            this.onQuestionVisibleChanged.isEmpty &&\n            this.onPageVisibleChanged.isEmpty) {\n            //Run update visible index only one time on finishing running conditions\n            this.conditionUpdateVisibleIndexes = true;\n            return;\n        }\n        if (this.isRunningElementsBindings) {\n            this.updateVisibleIndexAfterBindings = true;\n            return;\n        }\n        this.updatePageVisibleIndexes(this.showPageNumbers);\n        if (this.showQuestionNumbers == \"onPage\") {\n            var visPages = this.visiblePages;\n            for (var i = 0; i < visPages.length; i++) {\n                visPages[i].setVisibleIndex(0);\n            }\n        }\n        else {\n            var index = this.showQuestionNumbers == \"on\" ? 0 : -1;\n            for (var i = 0; i < this.pages.length; i++) {\n                index += this.pages[i].setVisibleIndex(index);\n            }\n        }\n        this.updateProgressText(true);\n    };\n    SurveyModel.prototype.updatePageVisibleIndexes = function (showIndex) {\n        this.updateButtonsVisibility();\n        var index = 0;\n        for (var i = 0; i < this.pages.length; i++) {\n            var page = this.pages[i];\n            var isPageVisible = page.isVisible && (i > 0 || !page.isStartPage);\n            page.visibleIndex = isPageVisible ? index++ : -1;\n            page.num = isPageVisible ? page.visibleIndex + 1 : -1;\n        }\n    };\n    SurveyModel.prototype.fromJSON = function (json) {\n        if (!json)\n            return;\n        this.questionHashesClear();\n        this.jsonErrors = null;\n        var jsonConverter = new _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"JsonObject\"]();\n        jsonConverter.toObject(json, this);\n        if (jsonConverter.errors.length > 0) {\n            this.jsonErrors = jsonConverter.errors;\n        }\n        this.onStateAndCurrentPageChanged();\n        this.updateState();\n    };\n    SurveyModel.prototype.setJsonObject = function (jsonObj) {\n        this.fromJSON(jsonObj);\n    };\n    SurveyModel.prototype.endLoadingFromJson = function () {\n        this.isEndLoadingFromJson = \"processing\";\n        this.onFirstPageIsStartedChanged();\n        this.onQuestionsOnPageModeChanged(\"standard\");\n        _super.prototype.endLoadingFromJson.call(this);\n        if (this.hasCookie) {\n            this.isCompletedBefore = true;\n        }\n        this.doElementsOnLoad();\n        this.isEndLoadingFromJson = \"conditions\";\n        this.runConditions();\n        this.notifyElementsOnAnyValueOrVariableChanged(\"\");\n        this.isEndLoadingFromJson = null;\n        this.updateVisibleIndexes();\n        this.updateHasLogo();\n        this.updateRenderBackgroundImage();\n        this.updateCurrentPage();\n        this.hasDescription = !!this.description;\n        this.setCalculatedWidthModeUpdater();\n    };\n    SurveyModel.prototype.updateNavigationCss = function () {\n        if (!!this.navigationBar) {\n            this.updateNavigationBarCss();\n            !!this.updateNavigationItemCssCallback && this.updateNavigationItemCssCallback();\n        }\n    };\n    SurveyModel.prototype.updateNavigationBarCss = function () {\n        var val = this.navigationBar;\n        val.cssClasses = this.css.actionBar;\n        val.containerCss = this.css.footer;\n    };\n    SurveyModel.prototype.createNavigationBar = function () {\n        var res = new _actions_container__WEBPACK_IMPORTED_MODULE_17__[\"ActionContainer\"]();\n        res.setItems(this.createNavigationActions());\n        return res;\n    };\n    SurveyModel.prototype.createNavigationActions = function () {\n        var _this = this;\n        var defaultComponent = \"sv-nav-btn\";\n        var navStart = new _actions_action__WEBPACK_IMPORTED_MODULE_16__[\"Action\"]({\n            id: \"sv-nav-start\",\n            visible: new _base__WEBPACK_IMPORTED_MODULE_2__[\"ComputedUpdater\"](function () { return _this.isShowStartingPage; }),\n            visibleIndex: 10,\n            locTitle: this.locStartSurveyText,\n            action: function () { return _this.start(); },\n            component: defaultComponent\n        });\n        var navPrev = new _actions_action__WEBPACK_IMPORTED_MODULE_16__[\"Action\"]({\n            id: \"sv-nav-prev\",\n            visible: new _base__WEBPACK_IMPORTED_MODULE_2__[\"ComputedUpdater\"](function () { return _this.isShowPrevButton; }),\n            visibleIndex: 20,\n            data: {\n                mouseDown: function () { return _this.navigationMouseDown(); },\n            },\n            locTitle: this.locPagePrevText,\n            action: function () { return _this.prevPage(); },\n            component: defaultComponent\n        });\n        var navNext = new _actions_action__WEBPACK_IMPORTED_MODULE_16__[\"Action\"]({\n            id: \"sv-nav-next\",\n            visible: new _base__WEBPACK_IMPORTED_MODULE_2__[\"ComputedUpdater\"](function () { return _this.isShowNextButton; }),\n            visibleIndex: 30,\n            data: {\n                mouseDown: function () { return _this.nextPageMouseDown(); },\n            },\n            locTitle: this.locPageNextText,\n            action: function () { return _this.nextPageUIClick(); },\n            component: defaultComponent\n        });\n        var navPreview = new _actions_action__WEBPACK_IMPORTED_MODULE_16__[\"Action\"]({\n            id: \"sv-nav-preview\",\n            visible: new _base__WEBPACK_IMPORTED_MODULE_2__[\"ComputedUpdater\"](function () { return _this.isPreviewButtonVisible; }),\n            visibleIndex: 40,\n            data: {\n                mouseDown: function () { return _this.navigationMouseDown(); },\n            },\n            locTitle: this.locPreviewText,\n            action: function () { return _this.showPreview(); },\n            component: defaultComponent\n        });\n        var navComplete = new _actions_action__WEBPACK_IMPORTED_MODULE_16__[\"Action\"]({\n            id: \"sv-nav-complete\",\n            visible: new _base__WEBPACK_IMPORTED_MODULE_2__[\"ComputedUpdater\"](function () { return _this.isCompleteButtonVisible; }),\n            visibleIndex: 50,\n            data: {\n                mouseDown: function () { return _this.navigationMouseDown(); },\n            },\n            locTitle: this.locCompleteText,\n            action: function () { return _this.completeLastPage(); },\n            component: defaultComponent\n        });\n        this.updateNavigationItemCssCallback = function () {\n            navStart.innerCss = _this.cssNavigationStart;\n            navPrev.innerCss = _this.cssNavigationPrev;\n            navNext.innerCss = _this.cssNavigationNext;\n            navPreview.innerCss = _this.cssNavigationPreview;\n            navComplete.innerCss = _this.cssNavigationComplete;\n        };\n        return [navStart, navPrev, navNext, navPreview, navComplete];\n    };\n    SurveyModel.prototype.onBeforeCreating = function () { };\n    SurveyModel.prototype.onCreating = function () { };\n    SurveyModel.prototype.getProcessedTextValue = function (textValue) {\n        this.getProcessedTextValueCore(textValue);\n        if (!this.onProcessTextValue.isEmpty) {\n            var wasEmpty = this.isValueEmpty(textValue.value);\n            this.onProcessTextValue.fire(this, textValue);\n            textValue.isExists =\n                textValue.isExists || (wasEmpty && !this.isValueEmpty(textValue.value));\n        }\n    };\n    SurveyModel.prototype.getBuiltInVariableValue = function (name) {\n        if (name === \"pageno\") {\n            var page = this.currentPage;\n            return page != null ? this.visiblePages.indexOf(page) + 1 : 0;\n        }\n        if (name === \"pagecount\") {\n            return this.visiblePageCount;\n        }\n        if (name === \"correctedanswers\" || name === \"correctanswers\" || name === \"correctedanswercount\") {\n            return this.getCorrectedAnswerCount();\n        }\n        if (name === \"incorrectedanswers\" || name === \"incorrectanswers\" || name === \"incorrectedanswercount\") {\n            return this.getInCorrectedAnswerCount();\n        }\n        if (name === \"questioncount\") {\n            return this.getQuizQuestionCount();\n        }\n        return undefined;\n    };\n    SurveyModel.prototype.getProcessedTextValueCore = function (textValue) {\n        var name = textValue.name.toLocaleLowerCase();\n        if ([\"no\", \"require\", \"title\"].indexOf(name) !== -1) {\n            return;\n        }\n        var builtInVar = this.getBuiltInVariableValue(name);\n        if (builtInVar !== undefined) {\n            textValue.isExists = true;\n            textValue.value = builtInVar;\n            return;\n        }\n        if (name === \"locale\") {\n            textValue.isExists = true;\n            textValue.value = !!this.locale\n                ? this.locale\n                : _surveyStrings__WEBPACK_IMPORTED_MODULE_8__[\"surveyLocalization\"].defaultLocale;\n            return;\n        }\n        var variable = this.getVariable(name);\n        if (variable !== undefined) {\n            textValue.isExists = true;\n            textValue.value = variable;\n            return;\n        }\n        var question = this.getFirstName(name);\n        if (question) {\n            var questionUseDisplayText = question.useDisplayValuesInDynamicTexts;\n            textValue.isExists = true;\n            var firstName = question.getValueName().toLowerCase();\n            name = firstName + name.substring(firstName.length);\n            name = name.toLocaleLowerCase();\n            var values = {};\n            values[firstName] = textValue.returnDisplayValue && questionUseDisplayText\n                ? question.getDisplayValue(false, undefined)\n                : question.value;\n            textValue.value = new _conditionProcessValue__WEBPACK_IMPORTED_MODULE_6__[\"ProcessValue\"]().getValue(name, values);\n            return;\n        }\n        this.getProcessedValuesWithoutQuestion(textValue);\n    };\n    SurveyModel.prototype.getProcessedValuesWithoutQuestion = function (textValue) {\n        var value = this.getValue(textValue.name);\n        if (value !== undefined) {\n            textValue.isExists = true;\n            textValue.value = value;\n            return;\n        }\n        var processor = new _conditionProcessValue__WEBPACK_IMPORTED_MODULE_6__[\"ProcessValue\"]();\n        var firstName = processor.getFirstName(textValue.name);\n        if (firstName === textValue.name)\n            return;\n        var data = {};\n        var val = this.getValue(firstName);\n        if (_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(val)) {\n            val = this.getVariable(firstName);\n        }\n        if (_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(val))\n            return;\n        data[firstName] = val;\n        textValue.value = processor.getValue(textValue.name, data);\n        textValue.isExists = processor.hasValue(textValue.name, data);\n    };\n    SurveyModel.prototype.getFirstName = function (name) {\n        name = name.toLowerCase();\n        var question;\n        do {\n            question = this.getQuestionByValueName(name, true);\n            name = this.reduceFirstName(name);\n        } while (!question && !!name);\n        return question;\n    };\n    SurveyModel.prototype.reduceFirstName = function (name) {\n        var pos1 = name.lastIndexOf(\".\");\n        var pos2 = name.lastIndexOf(\"[\");\n        if (pos1 < 0 && pos2 < 0)\n            return \"\";\n        var pos = Math.max(pos1, pos2);\n        return name.substring(0, pos);\n    };\n    SurveyModel.prototype.clearUnusedValues = function () {\n        var questions = this.getAllQuestions();\n        for (var i = 0; i < questions.length; i++) {\n            questions[i].clearUnusedValues();\n        }\n        this.clearInvisibleQuestionValues();\n    };\n    SurveyModel.prototype.hasVisibleQuestionByValueName = function (valueName) {\n        var questions = this.getQuestionsByValueName(valueName);\n        if (!questions)\n            return false;\n        for (var i = 0; i < questions.length; i++) {\n            var q = questions[i];\n            if (q.isVisible && q.isParentVisible && !q.parentQuestion)\n                return true;\n        }\n        return false;\n    };\n    SurveyModel.prototype.questionsByValueName = function (valueName) {\n        var questions = this.getQuestionsByValueName(valueName);\n        return !!questions ? questions : [];\n    };\n    SurveyModel.prototype.clearInvisibleQuestionValues = function () {\n        var reason = this.clearInvisibleValues === \"none\" ? \"none\" : \"onComplete\";\n        var questions = this.getAllQuestions();\n        for (var i = 0; i < questions.length; i++) {\n            questions[i].clearValueIfInvisible(reason);\n        }\n    };\n    /**\n     * Returns a variable value.\n     *\n     * [Variables help topic](https://surveyjs.io/form-library/documentation/design-survey/conditional-logic#variables (linkStyle))\n     * @param name A variable name.\n     * @return A variable value.\n     * @see setVariable\n     * @see getVariableNames\n     */\n    SurveyModel.prototype.getVariable = function (name) {\n        if (!name)\n            return null;\n        name = name.toLowerCase();\n        var res = this.variablesHash[name];\n        if (!this.isValueEmpty(res))\n            return res;\n        if (name.indexOf(\".\") > -1 || name.indexOf(\"[\") > -1) {\n            if (new _conditionProcessValue__WEBPACK_IMPORTED_MODULE_6__[\"ProcessValue\"]().hasValue(name, this.variablesHash))\n                return new _conditionProcessValue__WEBPACK_IMPORTED_MODULE_6__[\"ProcessValue\"]().getValue(name, this.variablesHash);\n        }\n        return res;\n    };\n    /**\n     * Sets a variable value.\n     *\n     * [Variables help topic](https://surveyjs.io/form-library/documentation/design-survey/conditional-logic#variables (linkStyle))\n     * @param name A variable name.\n     * @param newValue A new variable value.\n     * @see getVariable\n     * @see getVariableNames\n     */\n    SurveyModel.prototype.setVariable = function (name, newValue) {\n        if (!name)\n            return;\n        if (!!this.valuesHash) {\n            delete this.valuesHash[name];\n        }\n        name = name.toLowerCase();\n        this.variablesHash[name] = newValue;\n        this.notifyElementsOnAnyValueOrVariableChanged(name);\n        this.runConditionOnValueChanged(name, newValue);\n        this.onVariableChanged.fire(this, { name: name, value: newValue });\n    };\n    /**\n     * Returns the names of all variables in the survey.\n     *\n     * [Variables help topic](https://surveyjs.io/form-library/documentation/design-survey/conditional-logic#variables (linkStyle))\n     * @returns An array of variable names.\n     * @see getVariable\n     * @see setVariable\n     */\n    SurveyModel.prototype.getVariableNames = function () {\n        var res = [];\n        for (var key in this.variablesHash) {\n            res.push(key);\n        }\n        return res;\n    };\n    //ISurvey data\n    SurveyModel.prototype.getUnbindValue = function (value) {\n        if (!!this.editingObj)\n            return value;\n        return _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].getUnbindValue(value);\n    };\n    /**\n     * Returns a value (answer) for a question with a specified `name`.\n     * @param name A question name.\n     * @returns A question value (answer).\n     * @see data\n     * @see setValue\n     */\n    SurveyModel.prototype.getValue = function (name) {\n        if (!name || name.length == 0)\n            return null;\n        var value = this.getDataValueCore(this.valuesHash, name);\n        return this.getUnbindValue(value);\n    };\n    /**\n     * Sets a question value (answer).\n     *\n     * > This method executes all triggers and reevaluates conditions (`visibleIf`, `requiredId`, and others). It also switches the survey to the next page if the [`goNextPageAutomatic`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#goNextPageAutomatic) property is enabled and all questions on the current page have correct answers.\n     * @param name A question name.\n     * @param newValue A new question value.\n     * @param locNotification For internal use.\n     * @param allowNotifyValueChanged For internal use.\n     * @see data\n     * @see getValue\n     */\n    SurveyModel.prototype.setValue = function (name, newQuestionValue, locNotification, allowNotifyValueChanged, questionName) {\n        if (locNotification === void 0) { locNotification = false; }\n        if (allowNotifyValueChanged === void 0) { allowNotifyValueChanged = true; }\n        var newValue = newQuestionValue;\n        if (allowNotifyValueChanged) {\n            newValue = this.questionOnValueChanging(name, newQuestionValue);\n        }\n        if (this.isValidateOnValueChanging &&\n            this.checkErrorsOnValueChanging(name, newValue))\n            return;\n        if (!this.editingObj &&\n            this.isValueEqual(name, newValue) &&\n            this.isTwoValueEquals(newValue, newQuestionValue))\n            return;\n        var oldValue = this.getValue(name);\n        if (this.isValueEmpyOnSetValue(name, newValue)) {\n            this.deleteDataValueCore(this.valuesHash, name);\n        }\n        else {\n            newValue = this.getUnbindValue(newValue);\n            this.setDataValueCore(this.valuesHash, name, newValue);\n        }\n        this.updateOnSetValue(name, newValue, oldValue, locNotification, allowNotifyValueChanged, questionName);\n    };\n    SurveyModel.prototype.isValueEmpyOnSetValue = function (name, val) {\n        if (!this.isValueEmpty(val, false))\n            return false;\n        if (!this.editingObj || val === null || val === undefined)\n            return true;\n        return this.editingObj.getDefaultPropertyValue(name) === val;\n    };\n    SurveyModel.prototype.updateOnSetValue = function (name, newValue, oldValue, locNotification, allowNotifyValueChanged, questionName) {\n        if (locNotification === void 0) { locNotification = false; }\n        if (allowNotifyValueChanged === void 0) { allowNotifyValueChanged = true; }\n        this.updateQuestionValue(name, newValue);\n        if (locNotification === true || this.isDisposed || this.isRunningElementsBindings)\n            return;\n        questionName = questionName || name;\n        var triggerKeys = {};\n        triggerKeys[name] = { newValue: newValue, oldValue: oldValue };\n        this.runConditionOnValueChanged(name, newValue);\n        this.checkTriggers(triggerKeys, false, false, name);\n        if (allowNotifyValueChanged)\n            this.notifyQuestionOnValueChanged(name, newValue, questionName);\n        if (locNotification !== \"text\") {\n            this.tryGoNextPageAutomatic(name);\n        }\n    };\n    SurveyModel.prototype.isValueEqual = function (name, newValue) {\n        if (newValue === \"\" || newValue === undefined)\n            newValue = null;\n        var oldValue = this.getValue(name);\n        if (oldValue === \"\" || oldValue === undefined)\n            oldValue = null;\n        if (newValue === null || oldValue === null)\n            return newValue === oldValue;\n        return this.isTwoValueEquals(newValue, oldValue);\n    };\n    SurveyModel.prototype.doOnPageAdded = function (page) {\n        page.setSurveyImpl(this);\n        if (!page.name)\n            page.name = this.generateNewName(this.pages, \"page\");\n        this.questionHashesPanelAdded(page);\n        this.updateVisibleIndexes();\n        if (!!this.runningPages)\n            return;\n        if (!this.isLoadingFromJson) {\n            this.updateProgressText();\n            this.updateCurrentPage();\n        }\n        var options = { page: page };\n        this.onPageAdded.fire(this, options);\n    };\n    SurveyModel.prototype.doOnPageRemoved = function (page) {\n        page.setSurveyImpl(null);\n        if (!!this.runningPages)\n            return;\n        if (page === this.currentPage) {\n            this.updateCurrentPage();\n        }\n        this.updateVisibleIndexes();\n        this.updateProgressText();\n        this.updateLazyRenderingRowsOnRemovingElements();\n    };\n    SurveyModel.prototype.generateNewName = function (elements, baseName) {\n        var keys = {};\n        for (var i = 0; i < elements.length; i++)\n            keys[elements[i][\"name\"]] = true;\n        var index = 1;\n        while (keys[baseName + index])\n            index++;\n        return baseName + index;\n    };\n    SurveyModel.prototype.tryGoNextPageAutomatic = function (name) {\n        if (!!this.isEndLoadingFromJson ||\n            !this.goNextPageAutomatic ||\n            !this.currentPage)\n            return;\n        var question = this.getQuestionByValueName(name);\n        if (!question ||\n            (!!question &&\n                (!question.visible || !question.supportGoNextPageAutomatic())))\n            return;\n        if (!question.validate(false) && !question.supportGoNextPageError())\n            return;\n        var questions = this.getCurrentPageQuestions();\n        if (questions.indexOf(question) < 0)\n            return;\n        for (var i = 0; i < questions.length; i++) {\n            if (questions[i].hasInput && questions[i].isEmpty())\n                return;\n        }\n        if (!this.checkIsCurrentPageHasErrors(false)) {\n            if (!this.isLastPage) {\n                this.nextPage();\n            }\n            else {\n                if (this.goNextPageAutomatic === true &&\n                    this.allowCompleteSurveyAutomatic) {\n                    if (this.isShowPreviewBeforeComplete) {\n                        this.showPreview();\n                    }\n                    else {\n                        this.completeLastPage();\n                    }\n                }\n            }\n        }\n    };\n    /**\n     * Returns a comment value from a question with a specified `name`.\n     * @param name A question name.\n     * @returns A comment.\n     * @see setComment\n     */\n    SurveyModel.prototype.getComment = function (name) {\n        var res = this.getValue(name + this.commentSuffix);\n        return res || \"\";\n    };\n    /**\n     * Sets a comment value to a question with a specified `name`.\n     * @param name A question name.\n     * @param newValue A new comment value.\n     * @param locNotification For internal use.\n     * @see getComment\n     */\n    SurveyModel.prototype.setComment = function (name, newValue, locNotification) {\n        if (locNotification === void 0) { locNotification = false; }\n        if (!newValue)\n            newValue = \"\";\n        if (this.isTwoValueEquals(newValue, this.getComment(name)))\n            return;\n        var commentName = name + this.commentSuffix;\n        if (this.isValueEmpty(newValue)) {\n            this.deleteDataValueCore(this.valuesHash, commentName);\n        }\n        else {\n            this.setDataValueCore(this.valuesHash, commentName, newValue);\n        }\n        var questions = this.getQuestionsByValueName(name);\n        if (!!questions) {\n            for (var i = 0; i < questions.length; i++) {\n                questions[i].updateCommentFromSurvey(newValue);\n                this.checkQuestionErrorOnValueChanged(questions[i]);\n            }\n        }\n        if (!locNotification) {\n            this.runConditionOnValueChanged(name, this.getValue(name));\n        }\n        if (locNotification !== \"text\") {\n            this.tryGoNextPageAutomatic(name);\n        }\n        var question = this.getQuestionByName(name);\n        if (question) {\n            this.onValueChanged.fire(this, {\n                name: commentName,\n                question: question,\n                value: newValue,\n            });\n        }\n    };\n    /**\n     * Deletes an answer from survey results.\n     * @param {string} name An object property that stores the answer to delete. Pass a question's [`valueName`](https://surveyjs.io/form-library/documentation/api-reference/question#valueName) or [`name`](https://surveyjs.io/form-library/documentation/api-reference/question#name).\n     */\n    SurveyModel.prototype.clearValue = function (name) {\n        this.setValue(name, null);\n        this.setComment(name, null);\n    };\n    Object.defineProperty(SurveyModel.prototype, \"clearValueOnDisableItems\", {\n        /**\n         * Specifies whether to remove disabled choices from the value in [Dropdown](https://surveyjs.io/form-library/documentation/api-reference/dropdown-menu-model), [Checkboxes](https://surveyjs.io/form-library/documentation/api-reference/checkbox-question-model), and [Radio Button Group](https://surveyjs.io/form-library/documentation/api-reference/radio-button-question-model) questions.\n         *\n         * Default value: `false`\n         *\n         * > This property cannot be specified in the survey JSON schema. Use dot notation to specify it.\n         */\n        get: function () {\n            return this.getPropertyValue(\"clearValueOnDisableItems\", false);\n        },\n        set: function (val) {\n            this.setPropertyValue(\"clearValueOnDisableItems\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyModel.prototype.getQuestionClearIfInvisible = function (questionClearIf) {\n        if (this.isShowingPreview || this.runningPages)\n            return \"none\";\n        if (questionClearIf !== \"default\")\n            return questionClearIf;\n        return this.clearInvisibleValues;\n    };\n    SurveyModel.prototype.questionVisibilityChanged = function (question, newValue) {\n        this.updateVisibleIndexes();\n        this.onQuestionVisibleChanged.fire(this, {\n            question: question,\n            name: question.name,\n            visible: newValue,\n        });\n    };\n    SurveyModel.prototype.pageVisibilityChanged = function (page, newValue) {\n        if (this.isLoadingFromJson)\n            return;\n        if (newValue && !this.currentPage || page === this.currentPage) {\n            this.updateCurrentPage();\n        }\n        this.updateVisibleIndexes();\n        this.onPageVisibleChanged.fire(this, {\n            page: page,\n            visible: newValue,\n        });\n    };\n    SurveyModel.prototype.panelVisibilityChanged = function (panel, newValue) {\n        this.updateVisibleIndexes();\n        this.onPanelVisibleChanged.fire(this, {\n            panel: panel,\n            visible: newValue,\n        });\n    };\n    SurveyModel.prototype.questionCreated = function (question) {\n        this.onQuestionCreated.fire(this, { question: question });\n    };\n    SurveyModel.prototype.questionAdded = function (question, index, parentPanel, rootPanel) {\n        if (!question.name) {\n            question.name = this.generateNewName(this.getAllQuestions(false, true), \"question\");\n        }\n        if (!!question.page) {\n            this.questionHashesAdded(question);\n        }\n        if (!this.currentPage) {\n            this.updateCurrentPage();\n        }\n        this.updateVisibleIndexes();\n        this.setCalculatedWidthModeUpdater();\n        if (!this.isMovingQuestion || this.isDesignMode && !_settings__WEBPACK_IMPORTED_MODULE_14__[\"settings\"].supportCreatorV2) {\n            this.onQuestionAdded.fire(this, {\n                question: question,\n                name: question.name,\n                index: index,\n                parent: parentPanel,\n                page: rootPanel,\n                parentPanel: parentPanel,\n                rootPanel: rootPanel,\n            });\n        }\n    };\n    SurveyModel.prototype.questionRemoved = function (question) {\n        this.questionHashesRemoved(question, question.name, question.getValueName());\n        this.updateVisibleIndexes();\n        this.onQuestionRemoved.fire(this, {\n            question: question,\n            name: question.name,\n        });\n        this.updateLazyRenderingRowsOnRemovingElements();\n    };\n    SurveyModel.prototype.questionRenamed = function (question, oldName, oldValueName) {\n        this.questionHashesRemoved(question, oldName, oldValueName);\n        this.questionHashesAdded(question);\n    };\n    SurveyModel.prototype.questionHashesClear = function () {\n        this.questionHashes.names = {};\n        this.questionHashes.namesInsensitive = {};\n        this.questionHashes.valueNames = {};\n        this.questionHashes.valueNamesInsensitive = {};\n    };\n    SurveyModel.prototype.questionHashesPanelAdded = function (panel) {\n        if (this.isLoadingFromJson)\n            return;\n        var questions = panel.questions;\n        for (var i = 0; i < questions.length; i++) {\n            this.questionHashesAdded(questions[i]);\n        }\n    };\n    SurveyModel.prototype.questionHashesAdded = function (question) {\n        this.questionHashAddedCore(this.questionHashes.names, question, question.name);\n        this.questionHashAddedCore(this.questionHashes.namesInsensitive, question, question.name.toLowerCase());\n        this.questionHashAddedCore(this.questionHashes.valueNames, question, question.getValueName());\n        this.questionHashAddedCore(this.questionHashes.valueNamesInsensitive, question, question.getValueName().toLowerCase());\n    };\n    SurveyModel.prototype.questionHashesRemoved = function (question, name, valueName) {\n        if (!!name) {\n            this.questionHashRemovedCore(this.questionHashes.names, question, name);\n            this.questionHashRemovedCore(this.questionHashes.namesInsensitive, question, name.toLowerCase());\n        }\n        if (!!valueName) {\n            this.questionHashRemovedCore(this.questionHashes.valueNames, question, valueName);\n            this.questionHashRemovedCore(this.questionHashes.valueNamesInsensitive, question, valueName.toLowerCase());\n        }\n    };\n    SurveyModel.prototype.questionHashAddedCore = function (hash, question, name) {\n        var res = hash[name];\n        if (!!res) {\n            var res = hash[name];\n            if (res.indexOf(question) < 0) {\n                res.push(question);\n            }\n        }\n        else {\n            hash[name] = [question];\n        }\n    };\n    SurveyModel.prototype.questionHashRemovedCore = function (hash, question, name) {\n        var res = hash[name];\n        if (!res)\n            return;\n        var index = res.indexOf(question);\n        if (index > -1) {\n            res.splice(index, 1);\n        }\n        if (res.length == 0) {\n            delete hash[name];\n        }\n    };\n    SurveyModel.prototype.panelAdded = function (panel, index, parentPanel, rootPanel) {\n        if (!panel.name) {\n            panel.name = this.generateNewName(this.getAllPanels(false, true), \"panel\");\n        }\n        this.questionHashesPanelAdded(panel);\n        this.updateVisibleIndexes();\n        this.onPanelAdded.fire(this, {\n            panel: panel,\n            name: panel.name,\n            index: index,\n            parent: parentPanel,\n            page: rootPanel,\n            parentPanel: parentPanel,\n            rootPanel: rootPanel,\n        });\n    };\n    SurveyModel.prototype.panelRemoved = function (panel) {\n        this.updateVisibleIndexes();\n        this.onPanelRemoved.fire(this, { panel: panel, name: panel.name });\n        this.updateLazyRenderingRowsOnRemovingElements();\n    };\n    SurveyModel.prototype.validateQuestion = function (question) {\n        if (this.onValidateQuestion.isEmpty)\n            return null;\n        var options = {\n            name: question.name,\n            question: question,\n            value: question.value,\n            error: null,\n        };\n        this.onValidateQuestion.fire(this, options);\n        return options.error ? new _error__WEBPACK_IMPORTED_MODULE_9__[\"CustomError\"](options.error, this) : null;\n    };\n    SurveyModel.prototype.validatePanel = function (panel) {\n        if (this.onValidatePanel.isEmpty)\n            return null;\n        var options = {\n            name: panel.name,\n            panel: panel,\n            error: null,\n        };\n        this.onValidatePanel.fire(this, options);\n        return options.error ? new _error__WEBPACK_IMPORTED_MODULE_9__[\"CustomError\"](options.error, this) : null;\n    };\n    SurveyModel.prototype.processHtml = function (html, reason) {\n        if (!reason)\n            reason = \"\";\n        var options = { html: html, reason: reason };\n        this.onProcessHtml.fire(this, options);\n        return this.processText(options.html, true);\n    };\n    SurveyModel.prototype.processText = function (text, returnDisplayValue) {\n        return this.processTextEx(text, returnDisplayValue, false).text;\n    };\n    SurveyModel.prototype.processTextEx = function (text, returnDisplayValue, doEncoding) {\n        var res = {\n            text: this.processTextCore(text, returnDisplayValue, doEncoding),\n            hasAllValuesOnLastRun: true,\n        };\n        res.hasAllValuesOnLastRun = this.textPreProcessor.hasAllValuesOnLastRun;\n        return res;\n    };\n    Object.defineProperty(SurveyModel.prototype, \"textPreProcessor\", {\n        get: function () {\n            var _this = this;\n            if (!this.textPreProcessorValue) {\n                this.textPreProcessorValue = new _textPreProcessor__WEBPACK_IMPORTED_MODULE_5__[\"TextPreProcessor\"]();\n                this.textPreProcessorValue.onProcess = function (textValue) {\n                    _this.getProcessedTextValue(textValue);\n                };\n            }\n            return this.textPreProcessorValue;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyModel.prototype.processTextCore = function (text, returnDisplayValue, doEncoding) {\n        if (doEncoding === void 0) { doEncoding = false; }\n        if (this.isDesignMode)\n            return text;\n        return this.textPreProcessor.process(text, returnDisplayValue, doEncoding);\n    };\n    SurveyModel.prototype.getSurveyMarkdownHtml = function (element, text, name) {\n        var options = {\n            element: element,\n            text: text,\n            name: name,\n            html: null,\n        };\n        this.onTextMarkdown.fire(this, options);\n        return options.html;\n    };\n    SurveyModel.prototype.getCorrectedAnswerCount = function () {\n        return this.getCorrectAnswerCount();\n    };\n    /**\n     * Returns the number of correct answers in a quiz.\n     *\n     * For more information about quizzes, refer to the following tutorial: [Create a Quiz](https://surveyjs.io/form-library/documentation/design-survey/create-a-quiz).\n     * @returns The number of correct answers in a quiz.\n     * @see getQuizQuestionCount\n     * @see getInCorrectAnswerCount\n     */\n    SurveyModel.prototype.getCorrectAnswerCount = function () {\n        return this.getCorrectedAnswerCountCore(true);\n    };\n    /**\n     * Returns the number of quiz questions. A question counts if it is visible, has an input field, and specifies [`correctAnswer`](https://surveyjs.io/form-library/documentation/api-reference/checkbox-question-model#correctAnswer).\n     *\n     * This number may be different from `getQuizQuestions().length` because certain question types (for instance, matrix-like types) include more than one question.\n     *\n     * For more information about quizzes, refer to the following tutorial: [Create a Quiz](https://surveyjs.io/form-library/documentation/design-survey/create-a-quiz).\n     * @returns The number of quiz questions.\n     * @see getQuizQuestions\n     */\n    SurveyModel.prototype.getQuizQuestionCount = function () {\n        var questions = this.getQuizQuestions();\n        var res = 0;\n        for (var i = 0; i < questions.length; i++) {\n            res += questions[i].quizQuestionCount;\n        }\n        return res;\n    };\n    SurveyModel.prototype.getInCorrectedAnswerCount = function () {\n        return this.getInCorrectAnswerCount();\n    };\n    /**\n     * Returns the number of incorrect answers in a quiz.\n     *\n     * For more information about quizzes, refer to the following tutorial: [Create a Quiz](https://surveyjs.io/form-library/documentation/design-survey/create-a-quiz).\n     * @returns The number of incorrect answers in a quiz.\n     * @see getCorrectAnswerCount\n     */\n    SurveyModel.prototype.getInCorrectAnswerCount = function () {\n        return this.getCorrectedAnswerCountCore(false);\n    };\n    SurveyModel.prototype.onCorrectQuestionAnswer = function (question, options) {\n        if (this.onIsAnswerCorrect.isEmpty)\n            return;\n        options.question = question;\n        this.onIsAnswerCorrect.fire(this, options);\n    };\n    SurveyModel.prototype.getCorrectedAnswerCountCore = function (isCorrect) {\n        var questions = this.getQuizQuestions();\n        var counter = 0;\n        for (var i = 0; i < questions.length; i++) {\n            var q = questions[i];\n            var correctCount = q.correctAnswerCount;\n            if (isCorrect) {\n                counter += correctCount;\n            }\n            else {\n                counter += q.quizQuestionCount - correctCount;\n            }\n        }\n        return counter;\n    };\n    SurveyModel.prototype.getCorrectedAnswers = function () {\n        return this.getCorrectedAnswerCount();\n    };\n    SurveyModel.prototype.getInCorrectedAnswers = function () {\n        return this.getInCorrectedAnswerCount();\n    };\n    Object.defineProperty(SurveyModel.prototype, \"showTimerPanel\", {\n        /**\n         * Displays the timer panel and specifies its position. Applies only to [quiz surveys](https://surveyjs.io/form-library/documentation/design-survey-create-a-quiz).\n         *\n         * Possible values:\n         *\n         * - `\"top\"` - Displays the timer panel at the top of the survey.\n         * - `\"bottom\"` - Displays the timer panel at the bottom of the survey.\n         * - `\"none\"` (default) - Hides the timer panel.\n         *\n         * If the timer panel is displayed, the timer starts automatically when the survey begins. To specify time limits, use the [`maxTimeToFinish`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#maxTimeToFinish) and [`maxTimeToFinishPage`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#maxTimeToFinishPage) properties.\n         *\n         * The timer panel displays information about time spent on an individual page and the entire survey. If you want to display only the page timer or the survey timer, set the [`showTimerPanelMode`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#showTimerPanelMode) property to `\"page\"` or `\"survey\"`.\n         * @see startTimer\n         * @see stopTimer\n         * @see timeSpent\n         * @see onTimer\n         */\n        get: function () {\n            return this.getPropertyValue(\"showTimerPanel\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"showTimerPanel\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"isTimerPanelShowingOnTop\", {\n        get: function () {\n            return this.showTimerPanel == \"top\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"isTimerPanelShowingOnBottom\", {\n        get: function () {\n            return this.showTimerPanel == \"bottom\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"showTimerPanelMode\", {\n        /**\n         * Specifies whether the timer panel displays timers for the current page, the entire survey, or both. Applies only if the timer panel is [visible](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#showTimerPanel).\n         *\n         * Possible values:\n         *\n         * - `\"survey\"` - Displays only the survey timer.\n         * - `\"page\"` - Displays only the page timer.\n         * - `\"all\"` (default) - Displays both the survey and page timers.\n         * @see timeSpent\n         * @see onTimer\n         * @see startTimer\n         * @see stopTimer\n         */\n        get: function () {\n            return this.getPropertyValue(\"showTimerPanelMode\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"showTimerPanelMode\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"widthMode\", {\n        /**\n          * Specifies how to calculate the survey width.\n          *\n          * Possible values:\n          *\n          * - `\"static\"` - A survey has a [fixed width](#width).\n          * - `\"responsive\"` - A survey occupies all available horizontal space and stretches or shrinks horizontally to fit in the screen size.\n          * - `\"auto\"` (default) - Survey width depends on a question type and corresponds to the `\"static\"` or `\"responsive\"` mode.\n        */\n        // `custom/precise` - The survey width is specified by the width property. // in-future\n        get: function () {\n            return this.getPropertyValue(\"widthMode\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"widthMode\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyModel.prototype.setCalculatedWidthModeUpdater = function () {\n        var _this = this;\n        if (this.calculatedWidthModeUpdater)\n            this.calculatedWidthModeUpdater.dispose();\n        this.calculatedWidthModeUpdater = new _base__WEBPACK_IMPORTED_MODULE_2__[\"ComputedUpdater\"](function () { return _this.calculateWidthMode(); });\n        this.calculatedWidthMode = this.calculatedWidthModeUpdater;\n    };\n    SurveyModel.prototype.calculateWidthMode = function () {\n        if (this.widthMode == \"auto\") {\n            var isResponsive_1 = false;\n            this.pages.forEach(function (page) {\n                if (page.needResponsiveWidth())\n                    isResponsive_1 = true;\n            });\n            return isResponsive_1 ? \"responsive\" : \"static\";\n        }\n        return this.widthMode;\n    };\n    Object.defineProperty(SurveyModel.prototype, \"width\", {\n        /**\n         * A survey width in CSS values.\n         *\n         * Default value: `undefined` (the survey inherits the width from its container)\n         */\n        get: function () {\n            return this.getPropertyValue(\"width\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"width\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"renderedWidth\", {\n        get: function () {\n            var width = this.getPropertyValue(\"width\");\n            if (width && !isNaN(width))\n                width = width + \"px\";\n            return this.getPropertyValue(\"calculatedWidthMode\") == \"static\" && width || undefined;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"timerInfo\", {\n        get: function () {\n            return this.getTimerInfo();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"timerClock\", {\n        get: function () {\n            var major;\n            var minor;\n            if (!!this.currentPage) {\n                var _a = this.getTimerInfo(), spent = _a.spent, limit = _a.limit, minorSpent = _a.minorSpent, minorLimit = _a.minorLimit;\n                if (limit > 0)\n                    major = this.getDisplayClockTime(limit - spent);\n                else {\n                    major = this.getDisplayClockTime(spent);\n                }\n                if (minorSpent !== undefined) {\n                    if (minorLimit > 0) {\n                        minor = this.getDisplayClockTime(minorLimit - minorSpent);\n                    }\n                    else {\n                        minor = this.getDisplayClockTime(minorSpent);\n                    }\n                }\n            }\n            return { majorText: major, minorText: minor };\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"timerInfoText\", {\n        get: function () {\n            var options = { text: this.getTimerInfoText() };\n            this.onTimerPanelInfoText.fire(this, options);\n            var loc = new _localizablestring__WEBPACK_IMPORTED_MODULE_10__[\"LocalizableString\"](this, true);\n            loc.text = options.text;\n            return loc.textOrHtml;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyModel.prototype.getTimerInfo = function () {\n        var page = this.currentPage;\n        if (!page)\n            return { spent: 0, limit: 0 };\n        var pageSpent = page.timeSpent;\n        var surveySpent = this.timeSpent;\n        var pageLimitSec = this.getPageMaxTimeToFinish(page);\n        var surveyLimit = this.maxTimeToFinish;\n        if (this.showTimerPanelMode == \"page\") {\n            return { spent: pageSpent, limit: pageLimitSec };\n        }\n        if (this.showTimerPanelMode == \"survey\") {\n            return { spent: surveySpent, limit: surveyLimit };\n        }\n        else {\n            if (pageLimitSec > 0 && surveyLimit > 0) {\n                return { spent: pageSpent, limit: pageLimitSec, minorSpent: surveySpent, minorLimit: surveyLimit };\n            }\n            else if (pageLimitSec > 0) {\n                return { spent: pageSpent, limit: pageLimitSec, minorSpent: surveySpent };\n            }\n            else if (surveyLimit > 0) {\n                return { spent: surveySpent, limit: surveyLimit, minorSpent: pageSpent };\n            }\n            else {\n                return { spent: pageSpent, minorSpent: surveySpent };\n            }\n        }\n    };\n    SurveyModel.prototype.getTimerInfoText = function () {\n        var page = this.currentPage;\n        if (!page)\n            return \"\";\n        var pageSpent = this.getDisplayTime(page.timeSpent);\n        var surveySpent = this.getDisplayTime(this.timeSpent);\n        var pageLimitSec = this.getPageMaxTimeToFinish(page);\n        var pageLimit = this.getDisplayTime(pageLimitSec);\n        var surveyLimit = this.getDisplayTime(this.maxTimeToFinish);\n        if (this.showTimerPanelMode == \"page\")\n            return this.getTimerInfoPageText(page, pageSpent, pageLimit);\n        if (this.showTimerPanelMode == \"survey\")\n            return this.getTimerInfoSurveyText(surveySpent, surveyLimit);\n        if (this.showTimerPanelMode == \"all\") {\n            if (pageLimitSec <= 0 && this.maxTimeToFinish <= 0) {\n                return this.getLocalizationFormatString(\"timerSpentAll\", pageSpent, surveySpent);\n            }\n            if (pageLimitSec > 0 && this.maxTimeToFinish > 0) {\n                return this.getLocalizationFormatString(\"timerLimitAll\", pageSpent, pageLimit, surveySpent, surveyLimit);\n            }\n            var pageText = this.getTimerInfoPageText(page, pageSpent, pageLimit);\n            var surveyText = this.getTimerInfoSurveyText(surveySpent, surveyLimit);\n            return pageText + \" \" + surveyText;\n        }\n        return \"\";\n    };\n    SurveyModel.prototype.getTimerInfoPageText = function (page, pageSpent, pageLimit) {\n        return this.getPageMaxTimeToFinish(page) > 0\n            ? this.getLocalizationFormatString(\"timerLimitPage\", pageSpent, pageLimit)\n            : this.getLocalizationFormatString(\"timerSpentPage\", pageSpent, pageLimit);\n    };\n    SurveyModel.prototype.getTimerInfoSurveyText = function (surveySpent, surveyLimit) {\n        var strName = this.maxTimeToFinish > 0 ? \"timerLimitSurvey\" : \"timerSpentSurvey\";\n        return this.getLocalizationFormatString(strName, surveySpent, surveyLimit);\n    };\n    SurveyModel.prototype.getDisplayClockTime = function (val) {\n        var min = Math.floor(val / 60);\n        var sec = val % 60;\n        var secStr = sec.toString();\n        if (sec < 10) {\n            secStr = \"0\" + secStr;\n        }\n        return min + \":\" + secStr;\n    };\n    SurveyModel.prototype.getDisplayTime = function (val) {\n        var min = Math.floor(val / 60);\n        var sec = val % 60;\n        var res = \"\";\n        if (min > 0) {\n            res += min + \" \" + this.getLocalizationString(\"timerMin\");\n        }\n        if (res && sec == 0)\n            return res;\n        if (res)\n            res += \" \";\n        return res + sec + \" \" + this.getLocalizationString(\"timerSec\");\n    };\n    Object.defineProperty(SurveyModel.prototype, \"timerModel\", {\n        get: function () { return this.timerModelValue; },\n        enumerable: false,\n        configurable: true\n    });\n    /**\n     * Starts a timer that calculates how many seconds a respondent has spent on the survey. Applies only to [quiz surveys](https://surveyjs.io/form-library/documentation/design-survey-create-a-quiz).\n     * @see stopTimer\n     * @see maxTimeToFinish\n     * @see maxTimeToFinishPage\n     * @see timeSpent\n     * @see onTimer\n     */\n    SurveyModel.prototype.startTimer = function () {\n        this.timerModel.start();\n    };\n    SurveyModel.prototype.startTimerFromUI = function () {\n        if (this.showTimerPanel != \"none\" && this.state === \"running\") {\n            this.startTimer();\n        }\n    };\n    /**\n     * Stops the timer. Applies only to [quiz surveys](https://surveyjs.io/form-library/documentation/design-survey-create-a-quiz).\n     * @see startTimer\n     * @see maxTimeToFinish\n     * @see maxTimeToFinishPage\n     * @see timeSpent\n     * @see onTimer\n     */\n    SurveyModel.prototype.stopTimer = function () {\n        this.timerModel.stop();\n    };\n    Object.defineProperty(SurveyModel.prototype, \"timeSpent\", {\n        /**\n         * A time period that a respondent has spent on the survey so far; measured in seconds. Applies only to [quiz surveys](https://surveyjs.io/form-library/documentation/design-survey-create-a-quiz).\n         *\n         * Assign a number to this property if you need to start the quiz timer from a specific time (for instance, if you want to continue an interrupted quiz).\n         *\n         * You can also find out how many seconds a respondent has spent on an individual survey page. To do this, use the [`timeSpent`](https://surveyjs.io/form-library/documentation/api-reference/page-model#timeSpent) property of a [`PageModel`](https://surveyjs.io/form-library/documentation/api-reference/page-model) object.\n         * @see maxTimeToFinish\n         * @see maxTimeToFinishPage\n         * @see startTimer\n         */\n        get: function () { return this.timerModel.spent; },\n        set: function (val) { this.timerModel.spent = val; },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"maxTimeToFinish\", {\n        /**\n         * A time period that a respondent has to complete the survey; measured in seconds. Applies only to [quiz surveys](https://surveyjs.io/form-library/documentation/design-survey-create-a-quiz).\n         *\n         * A negative value or 0 sets an unlimited time period.\n         *\n         * [View Demo](https://surveyjs.io/form-library/examples/make-quiz-javascript/ (linkStyle))\n         * @see maxTimeToFinishPage\n         * @see startTimer\n         * @see timeSpent\n         */\n        get: function () {\n            return this.getPropertyValue(\"maxTimeToFinish\", 0);\n        },\n        set: function (val) {\n            this.setPropertyValue(\"maxTimeToFinish\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyModel.prototype, \"maxTimeToFinishPage\", {\n        /**\n         * A time period that a respondent has to complete each survey page; measured in seconds. Applies only to [quiz surveys](https://surveyjs.io/form-library/documentation/design-survey-create-a-quiz).\n         *\n         * A negative value or 0 sets an unlimited time period.\n         *\n         * You can also use `PageModel`'s [`maxTimeToFinish`](https://surveyjs.io/form-library/documentation/api-reference/page-model#maxTimeToFinish) property to specify a time period for an individual survey page.\n         *\n         * [View Demo](https://surveyjs.io/form-library/examples/make-quiz-javascript/ (linkStyle))\n         * @see maxTimeToFinish\n         * @see startTimer\n         * @see timeSpent\n         */\n        get: function () {\n            return this.getPropertyValue(\"maxTimeToFinishPage\", 0);\n        },\n        set: function (val) {\n            this.setPropertyValue(\"maxTimeToFinishPage\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyModel.prototype.getPageMaxTimeToFinish = function (page) {\n        if (!page || page.maxTimeToFinish < 0)\n            return 0;\n        return page.maxTimeToFinish > 0\n            ? page.maxTimeToFinish\n            : this.maxTimeToFinishPage;\n    };\n    SurveyModel.prototype.doTimer = function (page) {\n        this.onTimer.fire(this, {});\n        if (this.maxTimeToFinish > 0 && this.maxTimeToFinish == this.timeSpent) {\n            this.completeLastPage();\n        }\n        if (page) {\n            var pageLimit = this.getPageMaxTimeToFinish(page);\n            if (pageLimit > 0 && pageLimit == page.timeSpent) {\n                if (this.isLastPage) {\n                    this.completeLastPage();\n                }\n                else {\n                    this.nextPage();\n                }\n            }\n        }\n    };\n    Object.defineProperty(SurveyModel.prototype, \"inSurvey\", {\n        get: function () {\n            return true;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    //ISurveyImplementor\n    SurveyModel.prototype.getSurveyData = function () {\n        return this;\n    };\n    SurveyModel.prototype.getSurvey = function () {\n        return this;\n    };\n    SurveyModel.prototype.getTextProcessor = function () {\n        return this;\n    };\n    //ISurveyTriggerOwner\n    SurveyModel.prototype.getObjects = function (pages, questions) {\n        var result = [];\n        Array.prototype.push.apply(result, this.getPagesByNames(pages));\n        Array.prototype.push.apply(result, this.getQuestionsByNames(questions));\n        return result;\n    };\n    SurveyModel.prototype.setTriggerValue = function (name, value, isVariable) {\n        if (!name)\n            return;\n        if (isVariable) {\n            this.setVariable(name, value);\n        }\n        else {\n            var question = this.getQuestionByName(name);\n            if (!!question) {\n                question.value = value;\n            }\n            else {\n                var processor = new _conditionProcessValue__WEBPACK_IMPORTED_MODULE_6__[\"ProcessValue\"]();\n                var firstName = processor.getFirstName(name);\n                if (firstName == name) {\n                    this.setValue(name, value);\n                }\n                else {\n                    if (!this.getQuestionByName(firstName))\n                        return;\n                    var data = this.getUnbindValue(this.getFilteredValues());\n                    processor.setValue(data, name, value);\n                    this.setValue(firstName, data[firstName]);\n                }\n            }\n        }\n    };\n    SurveyModel.prototype.copyTriggerValue = function (name, fromName, copyDisplayValue) {\n        if (!name || !fromName)\n            return;\n        var value;\n        if (copyDisplayValue) {\n            value = this.processText(\"{\" + fromName + \"}\", true);\n        }\n        else {\n            var processor = new _conditionProcessValue__WEBPACK_IMPORTED_MODULE_6__[\"ProcessValue\"]();\n            value = processor.getValue(fromName, this.getFilteredValues());\n        }\n        this.setTriggerValue(name, value, false);\n    };\n    SurveyModel.prototype.triggerExecuted = function (trigger) {\n        this.onTriggerExecuted.fire(this, { trigger: trigger });\n    };\n    SurveyModel.prototype.startMovingQuestion = function () {\n        this.isMovingQuestion = true;\n    };\n    SurveyModel.prototype.stopMovingQuestion = function () {\n        this.isMovingQuestion = false;\n    };\n    /**\n     * Focuses a question with a specified name. Switches the current page if needed.\n     * @param name A question name.\n     * @returns `false` if the survey does not contain a question with a specified name or this question is hidden; otherwise, `true`.\n     * @see focusFirstQuestion\n     * @see focusFirstQuestionAutomatic\n     */\n    SurveyModel.prototype.focusQuestion = function (name) {\n        return this.focusQuestionByInstance(this.getQuestionByName(name, true));\n    };\n    SurveyModel.prototype.focusQuestionByInstance = function (question, onError) {\n        var _a;\n        if (onError === void 0) { onError = false; }\n        if (!question || !question.isVisible || !question.page)\n            return false;\n        var oldQuestion = (_a = this.focusingQuestionInfo) === null || _a === void 0 ? void 0 : _a.question;\n        if (oldQuestion === question)\n            return false;\n        this.focusingQuestionInfo = { question: question, onError: onError };\n        this.skippedPages.push({ from: this.currentPage, to: question.page });\n        var isNeedWaitForPageRendered = this.activePage !== question.page && !question.page.isStartPage;\n        if (isNeedWaitForPageRendered) {\n            this.currentPage = question.page;\n        }\n        if (!isNeedWaitForPageRendered) {\n            this.focusQuestionInfo();\n        }\n        return true;\n    };\n    SurveyModel.prototype.focusQuestionInfo = function () {\n        var _a;\n        var question = (_a = this.focusingQuestionInfo) === null || _a === void 0 ? void 0 : _a.question;\n        if (!!question && !question.isDisposed) {\n            question.focus(this.focusingQuestionInfo.onError);\n        }\n        this.focusingQuestionInfo = undefined;\n    };\n    SurveyModel.prototype.questionEditFinishCallback = function (question, event) {\n        var enterKeyAction = this.enterKeyAction || _settings__WEBPACK_IMPORTED_MODULE_14__[\"settings\"].enterKeyAction;\n        if (enterKeyAction == \"loseFocus\")\n            event.target.blur();\n        if (enterKeyAction == \"moveToNextEditor\") {\n            var allQuestions = this.currentPage.questions;\n            var questionIndex = allQuestions.indexOf(question);\n            if (questionIndex > -1 && questionIndex < allQuestions.length - 1) {\n                allQuestions[questionIndex + 1].focus();\n            }\n            else {\n                event.target.blur();\n            }\n        }\n    };\n    SurveyModel.prototype.getElementWrapperComponentName = function (element, reason) {\n        if (reason === \"logo-image\") {\n            return \"sv-logo-image\";\n        }\n        return SurveyModel.TemplateRendererComponentName;\n    };\n    SurveyModel.prototype.getQuestionContentWrapperComponentName = function (element) {\n        return SurveyModel.TemplateRendererComponentName;\n    };\n    SurveyModel.prototype.getRowWrapperComponentName = function (row) {\n        return SurveyModel.TemplateRendererComponentName;\n    };\n    SurveyModel.prototype.getElementWrapperComponentData = function (element, reason) {\n        return element;\n    };\n    SurveyModel.prototype.getRowWrapperComponentData = function (row) {\n        return row;\n    };\n    SurveyModel.prototype.getItemValueWrapperComponentName = function (item, question) {\n        return SurveyModel.TemplateRendererComponentName;\n    };\n    SurveyModel.prototype.getItemValueWrapperComponentData = function (item, question) {\n        return item;\n    };\n    SurveyModel.prototype.getMatrixCellTemplateData = function (cell) {\n        return cell.question;\n    };\n    SurveyModel.prototype.searchText = function (text) {\n        if (!!text)\n            text = text.toLowerCase();\n        var res = [];\n        for (var i = 0; i < this.pages.length; i++) {\n            this.pages[i].searchText(text, res);\n        }\n        return res;\n    };\n    SurveyModel.prototype.getSkeletonComponentName = function (element) {\n        return this.skeletonComponentName;\n    };\n    /**\n     * Adds an element to the survey layout.\n     *\n     * This method accepts an object with the following layout element properties:\n     *\n     * - `id`: `String` | `\"timerpanel\"` | `\"progress-buttons\"` | `\"progress-questions\"` | `\"progress-pages\"` | `\"progress-correctquestions\"` | `\"progress-requiredquestions\"` | `\"toc-navigation\"` | `\"navigationbuttons\"`\\\n     * A layout element identifier. You can use possible values to access and relocate or customize predefined layout elements.\n     *\n     * - `container`: `\"header\"` | `\"footer\"` | `\"left\"` | `\"right\"` | `\"contentTop\"` | `\"contentBottom\"`\\\n     * A layout container that holds the element. If you want to display the element within multiple containers, set this property to an array of possible values.\n     *\n     * - `component`: `String`\\\n     * The name of the component that renders the layout element.\n     *\n     * - `data`: `any`\\\n     * Data passed as props to `component`.\n     *\n     * [View Demo](https://surveyjs.io/form-library/examples/progress-bar-with-percentage/ (linkStyle))\n     * @param layoutElement A layout element configuration.\n     * @returns The configuration of the previous layout element with the same `id`.\n     */\n    SurveyModel.prototype.addLayoutElement = function (layoutElement) {\n        var existingLayoutElement = this.removeLayoutElement(layoutElement.id);\n        this.layoutElements.push(layoutElement);\n        return existingLayoutElement;\n    };\n    SurveyModel.prototype.removeLayoutElement = function (layoutElementId) {\n        var layoutElement = this.layoutElements.filter(function (a) { return a.id === layoutElementId; })[0];\n        if (!!layoutElement) {\n            var layoutElementIndex = this.layoutElements.indexOf(layoutElement);\n            this.layoutElements.splice(layoutElementIndex, 1);\n        }\n        return layoutElement;\n    };\n    SurveyModel.prototype.getContainerContent = function (container) {\n        var containerLayoutElements = [];\n        for (var _i = 0, _a = this.layoutElements; _i < _a.length; _i++) {\n            var layoutElement = _a[_i];\n            if (isStrCiEqual(layoutElement.id, \"timerpanel\")) {\n                if (container === \"header\") {\n                    if (this.isTimerPanelShowingOnTop && !this.isShowStartingPage) {\n                        containerLayoutElements.push(layoutElement);\n                    }\n                }\n                if (container === \"footer\") {\n                    if (this.isTimerPanelShowingOnBottom && !this.isShowStartingPage) {\n                        containerLayoutElements.push(layoutElement);\n                    }\n                }\n            }\n            else if (this.state === \"running\" && isStrCiEqual(layoutElement.id, \"progress-\" + this.progressBarType)) {\n                if (container === \"header\") {\n                    if (this.isShowProgressBarOnTop && !this.isShowStartingPage) {\n                        containerLayoutElements.push(layoutElement);\n                    }\n                }\n                if (container === \"footer\") {\n                    if (this.isShowProgressBarOnBottom && !this.isShowStartingPage) {\n                        containerLayoutElements.push(layoutElement);\n                    }\n                }\n            }\n            else if (isStrCiEqual(layoutElement.id, \"navigationbuttons\")) {\n                if (container === \"contentTop\") {\n                    if ([\"top\", \"both\"].indexOf(this.isNavigationButtonsShowing) !== -1) {\n                        containerLayoutElements.push(layoutElement);\n                    }\n                }\n                if (container === \"contentBottom\") {\n                    if ([\"bottom\", \"both\"].indexOf(this.isNavigationButtonsShowing) !== -1) {\n                        containerLayoutElements.push(layoutElement);\n                    }\n                }\n            }\n            else if (this.state === \"running\" && isStrCiEqual(layoutElement.id, \"toc-navigation\") && this.showTOC) {\n                if (container === \"left\") {\n                    if ([\"left\", \"both\"].indexOf(this.tocLocation) !== -1) {\n                        containerLayoutElements.push(layoutElement);\n                    }\n                }\n                if (container === \"right\") {\n                    if ([\"right\", \"both\"].indexOf(this.tocLocation) !== -1) {\n                        containerLayoutElements.push(layoutElement);\n                    }\n                }\n            }\n            else {\n                if (Array.isArray(layoutElement.container) && layoutElement.container.indexOf(container) !== -1 || layoutElement.container === container) {\n                    containerLayoutElements.push(layoutElement);\n                }\n            }\n        }\n        return containerLayoutElements;\n    };\n    SurveyModel.prototype.processPopupVisiblityChanged = function (question, popup, visible) {\n        this.onPopupVisibleChanged.fire(this, { question: question, popup: popup, visible: visible });\n    };\n    SurveyModel.prototype.applyTheme = function (theme) {\n        var _this = this;\n        if (!theme)\n            return;\n        Object.keys(theme).forEach(function (key) {\n            if (key === \"cover\") {\n                _this.removeLayoutElement(\"cover\");\n                var newCoverModel = new _cover__WEBPACK_IMPORTED_MODULE_20__[\"Cover\"]();\n                newCoverModel.fromJSON(theme[key]);\n                _this.layoutElements.push({\n                    id: \"cover\",\n                    container: \"header\",\n                    component: \"sv-cover\",\n                    data: newCoverModel\n                });\n            }\n            if (key === \"isPanelless\") {\n                _this.isCompact = theme[key];\n            }\n            else {\n                _this[key] = theme[key];\n            }\n        });\n        this.onThemeApplied.fire(this, { theme: theme });\n    };\n    /**\n     * Disposes of the survey model.\n     *\n     * Call this method to release resources if your application contains multiple survey models or if you re-create a survey model at runtime.\n     */\n    SurveyModel.prototype.dispose = function () {\n        this.removeScrollEventListener();\n        this.destroyResizeObserver();\n        this.rootElement = undefined;\n        _super.prototype.dispose.call(this);\n        this.editingObj = null;\n        if (!this.pages)\n            return;\n        this.currentPage = null;\n        for (var i = 0; i < this.pages.length; i++) {\n            this.pages[i].setSurveyImpl(undefined);\n            this.pages[i].dispose();\n        }\n        this.pages.splice(0, this.pages.length);\n        if (this.disposeCallback) {\n            this.disposeCallback();\n        }\n    };\n    SurveyModel.prototype.onScroll = function () {\n        if (this.onScrollCallback) {\n            this.onScrollCallback();\n        }\n    };\n    SurveyModel.prototype.addScrollEventListener = function () {\n        var _this = this;\n        this.scrollHandler = function () { _this.onScroll(); };\n        this.rootElement.addEventListener(\"scroll\", this.scrollHandler);\n    };\n    SurveyModel.prototype.removeScrollEventListener = function () {\n        if (!!this.rootElement && !!this.scrollHandler) {\n            this.rootElement.removeEventListener(\"scroll\", this.scrollHandler);\n        }\n    };\n    SurveyModel.TemplateRendererComponentName = \"sv-template-renderer\";\n    SurveyModel.stylesManager = null;\n    SurveyModel.platform = \"unknown\";\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n    ], SurveyModel.prototype, \"completedCss\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n    ], SurveyModel.prototype, \"completedBeforeCss\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n    ], SurveyModel.prototype, \"loadingBodyCss\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n    ], SurveyModel.prototype, \"containerCss\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ onSet: function (newValue, target) { target.updateCss(); } })\n    ], SurveyModel.prototype, \"fitToContainer\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({\n            onSet: function (newValue, target) {\n                if (newValue === \"cover\") {\n                    var layoutElement = target.layoutElements.filter(function (a) { return a.id === newValue; })[0];\n                    if (!layoutElement) {\n                        var cover = new _cover__WEBPACK_IMPORTED_MODULE_20__[\"Cover\"]();\n                        cover.logoPositionX = target.logoPosition === \"right\" ? \"right\" : \"left\";\n                        cover.logoPositionY = \"middle\";\n                        cover.titlePositionX = target.logoPosition === \"right\" ? \"left\" : \"right\";\n                        cover.titlePositionY = \"middle\";\n                        cover.descriptionPositionX = target.logoPosition === \"right\" ? \"left\" : \"right\";\n                        cover.descriptionPositionY = \"middle\";\n                        cover.survey = target;\n                        target.layoutElements.unshift({\n                            id: \"cover\",\n                            container: \"header\",\n                            component: \"sv-cover\",\n                            data: cover\n                        });\n                    }\n                }\n                else {\n                    target.removeLayoutElement(\"cover\");\n                }\n            }\n        })\n    ], SurveyModel.prototype, \"titleView\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n    ], SurveyModel.prototype, \"showBrandInfo\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n    ], SurveyModel.prototype, \"enterKeyAction\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: {} })\n    ], SurveyModel.prototype, \"cssVariables\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n    ], SurveyModel.prototype, \"_isMobile\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n    ], SurveyModel.prototype, \"_isCompact\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n    ], SurveyModel.prototype, \"backgroundImage\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n    ], SurveyModel.prototype, \"renderBackgroundImage\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n    ], SurveyModel.prototype, \"backgroundImageFit\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n    ], SurveyModel.prototype, \"backgroundImageAttachment\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n    ], SurveyModel.prototype, \"rootCss\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n    ], SurveyModel.prototype, \"calculatedWidthMode\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"propertyArray\"])()\n    ], SurveyModel.prototype, \"layoutElements\", void 0);\n    return SurveyModel;\n}(_survey_element__WEBPACK_IMPORTED_MODULE_3__[\"SurveyElementCore\"]));\n\nfunction isStrCiEqual(a, b) {\n    if (!a)\n        return false;\n    if (!b)\n        return false;\n    return a.toUpperCase() === b.toUpperCase();\n}\n_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].addClass(\"survey\", [\n    {\n        name: \"locale\",\n        choices: function () {\n            return _surveyStrings__WEBPACK_IMPORTED_MODULE_8__[\"surveyLocalization\"].getLocales(true);\n        },\n        onGetValue: function (obj) {\n            return obj.locale == _surveyStrings__WEBPACK_IMPORTED_MODULE_8__[\"surveyLocalization\"].defaultLocale ? null : obj.locale;\n        },\n    },\n    { name: \"title\", serializationProperty: \"locTitle\", dependsOn: \"locale\" },\n    {\n        name: \"description:text\",\n        serializationProperty: \"locDescription\",\n        dependsOn: \"locale\",\n    },\n    { name: \"logo\", serializationProperty: \"locLogo\" },\n    { name: \"logoWidth\", default: \"300px\", minValue: 0 },\n    { name: \"logoHeight\", default: \"200px\", minValue: 0 },\n    {\n        name: \"logoFit\",\n        default: \"contain\",\n        choices: [\"none\", \"contain\", \"cover\", \"fill\"],\n    },\n    {\n        name: \"logoPosition\",\n        default: \"left\",\n        choices: [\"none\", \"left\", \"right\", \"top\", \"bottom\"],\n    },\n    { name: \"focusFirstQuestionAutomatic:boolean\", default: true },\n    { name: \"focusOnFirstError:boolean\", default: true },\n    { name: \"completedHtml:html\", serializationProperty: \"locCompletedHtml\" },\n    {\n        name: \"completedBeforeHtml:html\",\n        serializationProperty: \"locCompletedBeforeHtml\",\n    },\n    {\n        name: \"completedHtmlOnCondition:htmlconditions\",\n        className: \"htmlconditionitem\",\n    },\n    { name: \"loadingHtml:html\", serializationProperty: \"locLoadingHtml\" },\n    { name: \"pages:surveypages\", className: \"page\" },\n    {\n        name: \"questions\",\n        alternativeName: \"elements\",\n        baseClassName: \"question\",\n        visible: false,\n        isLightSerializable: false,\n        onGetValue: function (obj) {\n            return null;\n        },\n        onSetValue: function (obj, value, jsonConverter) {\n            obj.pages.splice(0, obj.pages.length);\n            var page = obj.addNewPage(\"\");\n            jsonConverter.toObject({ questions: value }, page);\n        },\n    },\n    {\n        name: \"triggers:triggers\",\n        baseClassName: \"surveytrigger\",\n        classNamePart: \"trigger\",\n    },\n    {\n        name: \"calculatedValues:calculatedvalues\",\n        className: \"calculatedvalue\",\n    },\n    { name: \"surveyId\", visible: false },\n    { name: \"surveyPostId\", visible: false },\n    { name: \"surveyShowDataSaving:boolean\", visible: false },\n    \"cookieName\",\n    \"sendResultOnPageNext:boolean\",\n    {\n        name: \"showNavigationButtons\",\n        default: \"bottom\",\n        choices: [\"none\", \"top\", \"bottom\", \"both\"],\n    },\n    { name: \"showPrevButton:boolean\", default: true },\n    { name: \"showTitle:boolean\", default: true },\n    { name: \"showPageTitles:boolean\", default: true },\n    { name: \"showCompletedPage:boolean\", default: true },\n    \"navigateToUrl\",\n    {\n        name: \"navigateToUrlOnCondition:urlconditions\",\n        className: \"urlconditionitem\",\n    },\n    {\n        name: \"questionsOrder\",\n        default: \"initial\",\n        choices: [\"initial\", \"random\"],\n    },\n    {\n        name: \"matrixDragHandleArea\",\n        visible: false,\n        default: \"entireItem\",\n        choices: [\"entireItem\", \"icon\"]\n    },\n    \"showPageNumbers:boolean\",\n    {\n        name: \"showQuestionNumbers\",\n        default: \"on\",\n        choices: [\"on\", \"onPage\", \"off\"],\n    },\n    {\n        name: \"questionTitleLocation\",\n        default: \"top\",\n        choices: [\"top\", \"bottom\", \"left\"],\n    },\n    {\n        name: \"questionDescriptionLocation\",\n        default: \"underTitle\",\n        choices: [\"underInput\", \"underTitle\"],\n    },\n    { name: \"questionErrorLocation\", default: \"top\", choices: [\"top\", \"bottom\"] },\n    {\n        name: \"showProgressBar\",\n        default: \"off\",\n        choices: [\"off\", \"top\", \"bottom\", \"both\"],\n    },\n    {\n        name: \"progressBarType\",\n        default: \"pages\",\n        choices: [\n            \"pages\",\n            \"questions\",\n            \"requiredQuestions\",\n            \"correctQuestions\",\n            \"buttons\",\n        ],\n    },\n    {\n        name: \"showTOC:switch\",\n        default: false\n    },\n    {\n        name: \"tocLocation\", default: \"left\", choices: [\"left\", \"right\"],\n        dependsOn: [\"showTOC\"],\n        visibleIf: function (survey) { return !!survey && survey.showTOC; }\n    },\n    { name: \"mode\", default: \"edit\", choices: [\"edit\", \"display\"] },\n    { name: \"storeOthersAsComment:boolean\", default: true },\n    { name: \"maxTextLength:number\", default: 0, minValue: 0 },\n    { name: \"maxOthersLength:number\", default: 0, minValue: 0 },\n    {\n        name: \"goNextPageAutomatic:boolean\",\n        onSetValue: function (obj, value) {\n            if (value !== \"autogonext\") {\n                value = _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isTwoValueEquals(value, true);\n            }\n            obj.setPropertyValue(\"goNextPageAutomatic\", value);\n        }\n    },\n    {\n        name: \"clearInvisibleValues\",\n        default: \"onComplete\",\n        choices: [\"none\", \"onComplete\", \"onHidden\", \"onHiddenContainer\"],\n    },\n    {\n        name: \"checkErrorsMode\",\n        default: \"onNextPage\",\n        choices: [\"onNextPage\", \"onValueChanged\", \"onValueChanging\", \"onComplete\"],\n    },\n    {\n        name: \"textUpdateMode\",\n        default: \"onBlur\",\n        choices: [\"onBlur\", \"onTyping\"],\n    },\n    { name: \"autoGrowComment:boolean\", default: false },\n    { name: \"allowResizeComment:boolean\", default: true },\n    { name: \"startSurveyText\", serializationProperty: \"locStartSurveyText\" },\n    { name: \"pagePrevText\", serializationProperty: \"locPagePrevText\" },\n    { name: \"pageNextText\", serializationProperty: \"locPageNextText\" },\n    { name: \"completeText\", serializationProperty: \"locCompleteText\" },\n    { name: \"previewText\", serializationProperty: \"locPreviewText\" },\n    { name: \"editText\", serializationProperty: \"locEditText\" },\n    { name: \"requiredText\", default: \"*\" },\n    {\n        name: \"questionStartIndex\",\n        dependsOn: [\"showQuestionNumbers\"],\n        visibleIf: function (survey) { return !survey || survey.showQuestionNumbers !== \"off\"; }\n    },\n    {\n        name: \"questionTitlePattern\",\n        default: \"numTitleRequire\",\n        dependsOn: [\"questionStartIndex\", \"requiredText\"],\n        choices: function (obj) {\n            if (!obj)\n                return [];\n            return obj.getQuestionTitlePatternOptions();\n        },\n    },\n    {\n        name: \"questionTitleTemplate\",\n        visible: false,\n        isSerializable: false,\n        serializationProperty: \"locQuestionTitleTemplate\",\n    },\n    { name: \"firstPageIsStarted:boolean\", default: false },\n    {\n        name: \"isSinglePage:boolean\",\n        default: false,\n        visible: false,\n        isSerializable: false,\n    },\n    {\n        name: \"questionsOnPageMode\",\n        default: \"standard\",\n        choices: [\"singlePage\", \"standard\", \"questionPerPage\"],\n    },\n    {\n        name: \"showPreviewBeforeComplete\",\n        default: \"noPreview\",\n        choices: [\"noPreview\", \"showAllQuestions\", \"showAnsweredQuestions\"],\n    },\n    { name: \"maxTimeToFinish:number\", default: 0, minValue: 0 },\n    { name: \"maxTimeToFinishPage:number\", default: 0, minValue: 0 },\n    {\n        name: \"showTimerPanel\",\n        default: \"none\",\n        choices: [\"none\", \"top\", \"bottom\"],\n    },\n    {\n        name: \"showTimerPanelMode\",\n        default: \"all\",\n        choices: [\"all\", \"page\", \"survey\"],\n    },\n    {\n        name: \"widthMode\",\n        default: \"auto\",\n        choices: [\"auto\", \"static\", \"responsive\"],\n    },\n    { name: \"width\", visibleIf: function (obj) { return obj.widthMode === \"static\"; } },\n    { name: \"fitToContainer:boolean\", default: false },\n    { name: \"titleView\", default: \"title\", choices: [\"title\", \"cover\"], visible: false },\n    { name: \"backgroundImage\", visible: false },\n    { name: \"backgroundImageFit\", default: \"cover\", choices: [\"auto\", \"contain\", \"cover\"], visible: false },\n    { name: \"backgroundImageAttachment\", default: \"scroll\", choices: [\"scroll\", \"fixed\"], visible: false },\n    { name: \"backgroundOpacity:number\", minValue: 0, maxValue: 1, default: 1, visible: false },\n    { name: \"showBrandInfo:boolean\", default: false, visible: false }\n]);\n\n\n/***/ }),\n\n/***/ \"./src/surveyProgress.ts\":\n/*!*******************************!*\\\n  !*** ./src/surveyProgress.ts ***!\n  \\*******************************/\n/*! exports provided: SurveyProgressModel */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4024502__) {\n\n\"use strict\";\n__nested_webpack_require_4024502__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_4024502__.d(__nested_webpack_exports__, \"SurveyProgressModel\", function() { return SurveyProgressModel; });\n/* harmony import */ var _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4024502__(/*! ./utils/cssClassBuilder */ \"./src/utils/cssClassBuilder.ts\");\n\nvar SurveyProgressModel = /** @class */ (function () {\n    function SurveyProgressModel() {\n    }\n    SurveyProgressModel.getProgressTextInBarCss = function (css) {\n        return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_0__[\"CssClassBuilder\"]()\n            .append(css.progressText)\n            .append(css.progressTextInBar)\n            .toString();\n    };\n    SurveyProgressModel.getProgressTextUnderBarCss = function (css) {\n        return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_0__[\"CssClassBuilder\"]()\n            .append(css.progressText)\n            .append(css.progressTextUnderBar)\n            .toString();\n    };\n    return SurveyProgressModel;\n}());\n\n\n\n/***/ }),\n\n/***/ \"./src/surveyProgressButtons.ts\":\n/*!**************************************!*\\\n  !*** ./src/surveyProgressButtons.ts ***!\n  \\**************************************/\n/*! exports provided: SurveyProgressButtonsModel */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4025860__) {\n\n\"use strict\";\n__nested_webpack_require_4025860__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_4025860__.d(__nested_webpack_exports__, \"SurveyProgressButtonsModel\", function() { return SurveyProgressButtonsModel; });\n/* harmony import */ var _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4025860__(/*! ./utils/cssClassBuilder */ \"./src/utils/cssClassBuilder.ts\");\n\nvar SurveyProgressButtonsModel = /** @class */ (function () {\n    function SurveyProgressButtonsModel(survey) {\n        this.survey = survey;\n    }\n    SurveyProgressButtonsModel.prototype.isListElementClickable = function (index) {\n        if (!this.survey.onServerValidateQuestions ||\n            this.survey.onServerValidateQuestions.isEmpty ||\n            this.survey.checkErrorsMode === \"onComplete\") {\n            return true;\n        }\n        return index <= this.survey.currentPageNo + 1;\n    };\n    SurveyProgressButtonsModel.prototype.getListElementCss = function (index) {\n        if (index >= this.survey.visiblePages.length)\n            return;\n        return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_0__[\"CssClassBuilder\"]()\n            .append(this.survey.css.progressButtonsListElementPassed, this.survey.visiblePages[index].passed)\n            .append(this.survey.css.progressButtonsListElementCurrent, this.survey.currentPageNo === index)\n            .append(this.survey.css.progressButtonsListElementNonClickable, !this.isListElementClickable(index))\n            .toString();\n    };\n    SurveyProgressButtonsModel.prototype.getScrollButtonCss = function (hasScroller, isLeftScroll) {\n        return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_0__[\"CssClassBuilder\"]()\n            .append(this.survey.css.progressButtonsImageButtonLeft, isLeftScroll)\n            .append(this.survey.css.progressButtonsImageButtonRight, !isLeftScroll)\n            .append(this.survey.css.progressButtonsImageButtonHidden, !hasScroller)\n            .toString();\n    };\n    SurveyProgressButtonsModel.prototype.clickListElement = function (index) {\n        if (this.survey.isDesignMode)\n            return;\n        if (index < this.survey.currentPageNo) {\n            this.survey.currentPageNo = index;\n        }\n        else if (index > this.survey.currentPageNo) {\n            for (var i = this.survey.currentPageNo; i < index; i++) {\n                if (!this.survey.nextPage())\n                    break;\n            }\n        }\n    };\n    return SurveyProgressButtonsModel;\n}());\n\n\n\n/***/ }),\n\n/***/ \"./src/surveyStrings.ts\":\n/*!******************************!*\\\n  !*** ./src/surveyStrings.ts ***!\n  \\******************************/\n/*! exports provided: surveyLocalization, surveyStrings */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4028625__) {\n\n\"use strict\";\n__nested_webpack_require_4028625__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_4028625__.d(__nested_webpack_exports__, \"surveyLocalization\", function() { return surveyLocalization; });\n/* harmony export (binding) */ __nested_webpack_require_4028625__.d(__nested_webpack_exports__, \"surveyStrings\", function() { return surveyStrings; });\n/* harmony import */ var _localization_english__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4028625__(/*! ./localization/english */ \"./src/localization/english.ts\");\n\nvar surveyLocalization = {\n    currentLocaleValue: \"\",\n    defaultLocaleValue: \"en\",\n    locales: {},\n    localeNames: {},\n    supportedLocales: [],\n    get currentLocale() {\n        return this.currentLocaleValue === this.defaultLocaleValue ? \"\" : this.currentLocaleValue;\n    },\n    set currentLocale(val) {\n        if (val === \"cz\")\n            val = \"cs\";\n        this.currentLocaleValue = val;\n    },\n    get defaultLocale() {\n        return this.defaultLocaleValue;\n    },\n    set defaultLocale(val) {\n        if (val === \"cz\")\n            val = \"cs\";\n        this.defaultLocaleValue = val;\n    },\n    getLocaleStrings: function (loc) {\n        return this.locales[loc];\n    },\n    getString: function (strName, locale) {\n        var _this = this;\n        if (locale === void 0) { locale = null; }\n        var locs = new Array();\n        var addLocaleCore = function (locName) {\n            var strs = _this.locales[locName];\n            if (!!strs)\n                locs.push(strs);\n        };\n        var addLocale = function (locName) {\n            if (!locName)\n                return;\n            addLocaleCore(locName);\n            var index = locName.indexOf(\"-\");\n            if (index < 1)\n                return;\n            locName = locName.substring(0, index);\n            addLocaleCore(locName);\n        };\n        addLocale(locale);\n        addLocale(this.currentLocale);\n        addLocale(this.defaultLocale);\n        if (this.defaultLocale !== \"en\") {\n            addLocaleCore(\"en\");\n        }\n        for (var i = 0; i < locs.length; i++) {\n            var res = locs[i][strName];\n            if (res !== undefined)\n                return res;\n        }\n        return this.onGetExternalString(strName, locale);\n    },\n    getLocales: function (removeDefaultLoc) {\n        if (removeDefaultLoc === void 0) { removeDefaultLoc = false; }\n        var res = [];\n        res.push(\"\");\n        var locs = this.locales;\n        if (this.supportedLocales && this.supportedLocales.length > 0) {\n            locs = {};\n            for (var i = 0; i < this.supportedLocales.length; i++) {\n                locs[this.supportedLocales[i]] = true;\n            }\n        }\n        for (var key in locs) {\n            if (removeDefaultLoc && key == this.defaultLocale)\n                continue;\n            res.push(key);\n        }\n        var locName = function (loc) {\n            if (!loc)\n                return \"\";\n            var res = surveyLocalization.localeNames[loc];\n            if (!res)\n                res = loc;\n            return res.toLowerCase();\n        };\n        res.sort(function (a, b) {\n            var str1 = locName(a);\n            var str2 = locName(b);\n            if (str1 === str2)\n                return 0;\n            return str1 < str2 ? -1 : 1;\n        });\n        return res;\n    },\n    onGetExternalString: function (name, locale) { return undefined; }\n};\nvar surveyStrings = _localization_english__WEBPACK_IMPORTED_MODULE_0__[\"englishStrings\"];\nsurveyLocalization.locales[\"en\"] = _localization_english__WEBPACK_IMPORTED_MODULE_0__[\"englishStrings\"];\nsurveyLocalization.localeNames[\"en\"] = \"english\";\n\n\n/***/ }),\n\n/***/ \"./src/surveyTimerModel.ts\":\n/*!*********************************!*\\\n  !*** ./src/surveyTimerModel.ts ***!\n  \\*********************************/\n/*! exports provided: SurveyTimerModel */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4032536__) {\n\n\"use strict\";\n__nested_webpack_require_4032536__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_4032536__.d(__nested_webpack_exports__, \"SurveyTimerModel\", function() { return SurveyTimerModel; });\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4032536__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _surveytimer__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4032536__(/*! ./surveytimer */ \"./src/surveytimer.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4032536__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_4032536__(/*! ./utils/cssClassBuilder */ \"./src/utils/cssClassBuilder.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\nvar SurveyTimerModel = /** @class */ (function (_super) {\n    __extends(SurveyTimerModel, _super);\n    function SurveyTimerModel(survey) {\n        var _this = _super.call(this) || this;\n        _this.timerFunc = null;\n        _this.surveyValue = survey;\n        _this.onCreating();\n        return _this;\n    }\n    Object.defineProperty(SurveyTimerModel.prototype, \"survey\", {\n        get: function () { return this.surveyValue; },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyTimerModel.prototype.onCreating = function () { };\n    SurveyTimerModel.prototype.start = function () {\n        var _this = this;\n        if (!this.survey)\n            return;\n        if (this.isRunning || this.isDesignMode)\n            return;\n        this.survey.onCurrentPageChanged.add(function () {\n            _this.update();\n        });\n        this.timerFunc = function () { _this.doTimer(); };\n        this.setIsRunning(true);\n        this.update();\n        _surveytimer__WEBPACK_IMPORTED_MODULE_1__[\"SurveyTimer\"].instance.start(this.timerFunc);\n    };\n    SurveyTimerModel.prototype.stop = function () {\n        if (!this.isRunning)\n            return;\n        this.setIsRunning(false);\n        _surveytimer__WEBPACK_IMPORTED_MODULE_1__[\"SurveyTimer\"].instance.stop(this.timerFunc);\n    };\n    Object.defineProperty(SurveyTimerModel.prototype, \"isRunning\", {\n        get: function () {\n            return this.getPropertyValue(\"isRunning\", false);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyTimerModel.prototype.setIsRunning = function (val) {\n        this.setPropertyValue(\"isRunning\", val);\n    };\n    SurveyTimerModel.prototype.update = function () {\n        this.updateText();\n        this.updateProgress();\n    };\n    SurveyTimerModel.prototype.doTimer = function () {\n        var page = this.survey.currentPage;\n        if (page) {\n            page.timeSpent = page.timeSpent + 1;\n        }\n        this.spent = this.spent + 1;\n        this.update();\n        if (this.onTimer) {\n            this.onTimer(page);\n        }\n    };\n    SurveyTimerModel.prototype.updateProgress = function () {\n        var _this = this;\n        var _a = this.survey.timerInfo, spent = _a.spent, limit = _a.limit;\n        if (!limit) {\n            this.progress = undefined;\n        }\n        else {\n            if (spent == 0) {\n                this.progress = 0;\n                setTimeout(function () {\n                    _this.progress = Math.floor((spent + 1) / limit * 100) / 100;\n                }, 0);\n            }\n            else if (spent !== limit) {\n                this.progress = Math.floor((spent + 1) / limit * 100) / 100;\n            }\n        }\n    };\n    SurveyTimerModel.prototype.updateText = function () {\n        var timerClock = this.survey.timerClock;\n        this.clockMajorText = timerClock.majorText;\n        this.clockMinorText = timerClock.minorText;\n        this.text = this.survey.timerInfoText;\n    };\n    Object.defineProperty(SurveyTimerModel.prototype, \"showProgress\", {\n        get: function () {\n            return this.progress !== undefined;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyTimerModel.prototype, \"showTimerAsClock\", {\n        get: function () {\n            return !!this.survey.getCss().clockTimerRoot;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyTimerModel.prototype, \"rootCss\", {\n        get: function () {\n            return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_3__[\"CssClassBuilder\"]()\n                .append(this.survey.getCss().clockTimerRoot)\n                .append(this.survey.getCss().clockTimerRootTop, this.survey.isTimerPanelShowingOnTop)\n                .append(this.survey.getCss().clockTimerRootBottom, this.survey.isTimerPanelShowingOnBottom)\n                .toString();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyTimerModel.prototype.getProgressCss = function () {\n        return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_3__[\"CssClassBuilder\"]()\n            .append(this.survey.getCss().clockTimerProgress)\n            .append(this.survey.getCss().clockTimerProgressAnimation, this.progress > 0)\n            .toString();\n    };\n    Object.defineProperty(SurveyTimerModel.prototype, \"textContainerCss\", {\n        get: function () {\n            return this.survey.getCss().clockTimerTextContainer;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyTimerModel.prototype, \"minorTextCss\", {\n        get: function () {\n            return this.survey.getCss().clockTimerMinorText;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyTimerModel.prototype, \"majorTextCss\", {\n        get: function () {\n            return this.survey.getCss().clockTimerMajorText;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"property\"])()\n    ], SurveyTimerModel.prototype, \"text\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"property\"])()\n    ], SurveyTimerModel.prototype, \"progress\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"property\"])()\n    ], SurveyTimerModel.prototype, \"clockMajorText\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"property\"])()\n    ], SurveyTimerModel.prototype, \"clockMinorText\", void 0);\n    __decorate([\n        Object(_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"property\"])({ defaultValue: 0 })\n    ], SurveyTimerModel.prototype, \"spent\", void 0);\n    return SurveyTimerModel;\n}(_base__WEBPACK_IMPORTED_MODULE_0__[\"Base\"]));\n\n\n\n/***/ }),\n\n/***/ \"./src/surveyToc.ts\":\n/*!**************************!*\\\n  !*** ./src/surveyToc.ts ***!\n  \\**************************/\n/*! exports provided: tryNavigateToPage, tryFocusPage, createTOCListModel, getTocRootCss, TOCModel */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4040800__) {\n\n\"use strict\";\n__nested_webpack_require_4040800__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_4040800__.d(__nested_webpack_exports__, \"tryNavigateToPage\", function() { return tryNavigateToPage; });\n/* harmony export (binding) */ __nested_webpack_require_4040800__.d(__nested_webpack_exports__, \"tryFocusPage\", function() { return tryFocusPage; });\n/* harmony export (binding) */ __nested_webpack_require_4040800__.d(__nested_webpack_exports__, \"createTOCListModel\", function() { return createTOCListModel; });\n/* harmony export (binding) */ __nested_webpack_require_4040800__.d(__nested_webpack_exports__, \"getTocRootCss\", function() { return getTocRootCss; });\n/* harmony export (binding) */ __nested_webpack_require_4040800__.d(__nested_webpack_exports__, \"TOCModel\", function() { return TOCModel; });\n/* harmony import */ var _actions_action__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4040800__(/*! ./actions/action */ \"./src/actions/action.ts\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4040800__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _list__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4040800__(/*! ./list */ \"./src/list.ts\");\n/* harmony import */ var _page__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_4040800__(/*! ./page */ \"./src/page.ts\");\n/* harmony import */ var _popup__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_4040800__(/*! ./popup */ \"./src/popup.ts\");\n/* harmony import */ var _utils_devices__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_4040800__(/*! ./utils/devices */ \"./src/utils/devices.ts\");\n\n\n\n\n\n\nfunction tryNavigateToPage(survey, page) {\n    if (survey.isDesignMode)\n        return;\n    var index = survey.visiblePages.indexOf(page);\n    if (index < survey.currentPageNo) {\n        survey.currentPageNo = index;\n    }\n    else if (index > survey.currentPageNo) {\n        for (var i = survey.currentPageNo; i < index; i++) {\n            if (!survey.nextPageUIClick())\n                return false;\n        }\n    }\n    return true;\n}\nfunction tryFocusPage(survey, panel) {\n    if (survey.isDesignMode)\n        return true;\n    panel.focusFirstQuestion();\n    return true;\n}\nfunction createTOCListModel(survey, onAction) {\n    var _a;\n    var pagesSource = survey.questionsOnPageMode === \"singlePage\" ? (_a = survey.pages[0]) === null || _a === void 0 ? void 0 : _a.elements : survey.pages;\n    var items = (pagesSource || []).map(function (page) {\n        var _a, _b;\n        return new _actions_action__WEBPACK_IMPORTED_MODULE_0__[\"Action\"]({\n            id: page.name,\n            locTitle: ((_a = page.locNavigationTitle) === null || _a === void 0 ? void 0 : _a.text) ? page.locNavigationTitle : (((_b = page.locTitle) === null || _b === void 0 ? void 0 : _b.text) ? page.locTitle : undefined),\n            title: page.renderedNavigationTitle,\n            action: function () {\n                if (typeof document !== undefined && !!document.activeElement) {\n                    !!document.activeElement.blur && document.activeElement.blur();\n                }\n                !!onAction && onAction();\n                if (page instanceof _page__WEBPACK_IMPORTED_MODULE_3__[\"PageModel\"]) {\n                    return tryNavigateToPage(survey, page);\n                }\n                return tryFocusPage(survey, page);\n            },\n            visible: new _base__WEBPACK_IMPORTED_MODULE_1__[\"ComputedUpdater\"](function () { return page.isVisible && !(page[\"isStartPage\"]); })\n        });\n    });\n    var listModel = new _list__WEBPACK_IMPORTED_MODULE_2__[\"ListModel\"](items, function (item) {\n        if (!!item.action()) {\n            listModel.selectedItem = item;\n        }\n    }, true, items.filter(function (i) { return i.id === survey.currentPage.name; })[0] || items.filter(function (i) { return i.id === pagesSource[0].name; })[0]);\n    listModel.allowSelection = false;\n    listModel.locOwner = survey;\n    survey.onCurrentPageChanged.add(function (s, o) {\n        listModel.selectedItem = items.filter(function (i) { return i.id === survey.currentPage.name; })[0];\n    });\n    return listModel;\n}\nfunction getTocRootCss(survey, isMobile) {\n    if (isMobile === void 0) { isMobile = false; }\n    if (isMobile) {\n        return \"sv_progress-toc sv_progress-toc--mobile\";\n    }\n    return \"sv_progress-toc\" + (\" sv_progress-toc--\" + (survey.tocLocation || \"\").toLowerCase());\n}\nvar TOCModel = /** @class */ (function () {\n    function TOCModel(survey) {\n        var _this = this;\n        this.survey = survey;\n        this.isMobile = _utils_devices__WEBPACK_IMPORTED_MODULE_5__[\"IsTouch\"];\n        this.icon = \"icon-navmenu_24x24\";\n        this.togglePopup = function () {\n            _this.popupModel.toggleVisibility();\n        };\n        this.listModel = createTOCListModel(survey, function () { _this.popupModel.isVisible = false; });\n        this.popupModel = new _popup__WEBPACK_IMPORTED_MODULE_4__[\"PopupModel\"](\"sv-list\", { model: this.listModel });\n        this.popupModel.displayMode = this.isMobile ? \"overlay\" : \"popup\";\n    }\n    Object.defineProperty(TOCModel.prototype, \"containerCss\", {\n        get: function () {\n            return getTocRootCss(this.survey, this.isMobile);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    return TOCModel;\n}());\n\n\n\n/***/ }),\n\n/***/ \"./src/surveytimer.ts\":\n/*!****************************!*\\\n  !*** ./src/surveytimer.ts ***!\n  \\****************************/\n/*! exports provided: surveyTimerFunctions, SurveyTimer */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4046245__) {\n\n\"use strict\";\n__nested_webpack_require_4046245__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_4046245__.d(__nested_webpack_exports__, \"surveyTimerFunctions\", function() { return surveyTimerFunctions; });\n/* harmony export (binding) */ __nested_webpack_require_4046245__.d(__nested_webpack_exports__, \"SurveyTimer\", function() { return SurveyTimer; });\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4046245__(/*! ./base */ \"./src/base.ts\");\n\nvar surveyTimerFunctions = {\n    setTimeout: function (func) {\n        if (typeof window === \"undefined\")\n            return 0;\n        return window.setTimeout(func, 1000);\n    },\n    clearTimeout: function (timerId) {\n        if (typeof window === \"undefined\")\n            return;\n        window.clearTimeout(timerId);\n    },\n};\nvar SurveyTimer = /** @class */ (function () {\n    function SurveyTimer() {\n        this.listenerCounter = 0;\n        this.timerId = -1;\n        this.onTimer = new _base__WEBPACK_IMPORTED_MODULE_0__[\"Event\"]();\n    }\n    Object.defineProperty(SurveyTimer, \"instance\", {\n        get: function () {\n            if (!SurveyTimer.instanceValue) {\n                SurveyTimer.instanceValue = new SurveyTimer();\n            }\n            return SurveyTimer.instanceValue;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyTimer.prototype.start = function (func) {\n        var _this = this;\n        if (func === void 0) { func = null; }\n        if (func) {\n            this.onTimer.add(func);\n        }\n        if (this.timerId < 0) {\n            this.timerId = surveyTimerFunctions.setTimeout(function () {\n                _this.doTimer();\n            });\n        }\n        this.listenerCounter++;\n    };\n    SurveyTimer.prototype.stop = function (func) {\n        if (func === void 0) { func = null; }\n        if (func) {\n            this.onTimer.remove(func);\n        }\n        this.listenerCounter--;\n        if (this.listenerCounter == 0 && this.timerId > -1) {\n            surveyTimerFunctions.clearTimeout(this.timerId);\n            this.timerId = -1;\n        }\n    };\n    SurveyTimer.prototype.doTimer = function () {\n        var _this = this;\n        if (this.onTimer.isEmpty || this.listenerCounter == 0) {\n            this.timerId = -1;\n        }\n        if (this.timerId < 0)\n            return;\n        var prevItem = this.timerId;\n        this.onTimer.fire(this, {});\n        //We have to check that we have the same timerId\n        //It could be changed during events execution and it will lead to double timer events\n        if (prevItem !== this.timerId)\n            return;\n        this.timerId = surveyTimerFunctions.setTimeout(function () {\n            _this.doTimer();\n        });\n    };\n    SurveyTimer.instanceValue = null;\n    return SurveyTimer;\n}());\n\n\n\n/***/ }),\n\n/***/ \"./src/svgbundle.ts\":\n/*!**************************!*\\\n  !*** ./src/svgbundle.ts ***!\n  \\**************************/\n/*! exports provided: SvgIconRegistry, SvgRegistry, SvgBundleViewModel */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4049301__) {\n\n\"use strict\";\n__nested_webpack_require_4049301__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_4049301__.d(__nested_webpack_exports__, \"SvgIconRegistry\", function() { return SvgIconRegistry; });\n/* harmony export (binding) */ __nested_webpack_require_4049301__.d(__nested_webpack_exports__, \"SvgRegistry\", function() { return SvgRegistry; });\n/* harmony export (binding) */ __nested_webpack_require_4049301__.d(__nested_webpack_exports__, \"SvgBundleViewModel\", function() { return SvgBundleViewModel; });\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4049301__(/*! ./settings */ \"./src/settings.ts\");\n/* harmony import */ var _utils_utils__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4049301__(/*! ./utils/utils */ \"./src/utils/utils.ts\");\n\n\nvar SvgIconData = /** @class */ (function () {\n    function SvgIconData() {\n    }\n    return SvgIconData;\n}());\nvar SvgIconRegistry = /** @class */ (function () {\n    function SvgIconRegistry() {\n        this.icons = {};\n        this.iconPrefix = \"icon-\";\n    }\n    SvgIconRegistry.prototype.processId = function (iconId, iconPrefix) {\n        if (iconId.indexOf(iconPrefix) == 0)\n            iconId = iconId.substring(iconPrefix.length);\n        return iconId;\n    };\n    SvgIconRegistry.prototype.registerIconFromSymbol = function (iconId, iconSymbolSvg) {\n        this.icons[iconId] = iconSymbolSvg;\n    };\n    SvgIconRegistry.prototype.registerIconFromSvgViaElement = function (iconId, iconSvg, iconPrefix) {\n        if (iconPrefix === void 0) { iconPrefix = this.iconPrefix; }\n        iconId = this.processId(iconId, iconPrefix);\n        var divSvg = document.createElement(\"div\");\n        divSvg.innerHTML = iconSvg;\n        var symbol = document.createElement(\"symbol\");\n        var svg = divSvg.querySelector(\"svg\");\n        symbol.innerHTML = svg.innerHTML;\n        for (var i = 0; i < svg.attributes.length; i++) {\n            symbol.setAttributeNS(\"http://www.w3.org/2000/svg\", svg.attributes[i].name, svg.attributes[i].value);\n        }\n        symbol.id = iconPrefix + iconId;\n        this.registerIconFromSymbol(iconId, symbol.outerHTML);\n    };\n    SvgIconRegistry.prototype.registerIconFromSvg = function (iconId, iconSvg, iconPrefix) {\n        if (iconPrefix === void 0) { iconPrefix = this.iconPrefix; }\n        iconId = this.processId(iconId, iconPrefix);\n        var startStr = \"<svg \";\n        var endStr = \"</svg>\";\n        iconSvg = iconSvg.trim();\n        var str = iconSvg.toLowerCase();\n        if (str.substring(0, startStr.length) === startStr &&\n            str.substring(str.length - endStr.length, str.length) === endStr) {\n            this.registerIconFromSymbol(iconId, \"<symbol \" +\n                \"id=\\\"\" + iconPrefix + iconId + \"\\\" \" +\n                iconSvg.substring(startStr.length, str.length - endStr.length) +\n                \"</symbol>\");\n            return true;\n        }\n        else {\n            return false;\n        }\n    };\n    SvgIconRegistry.prototype.registerIconsFromFolder = function (r) {\n        var _this = this;\n        r.keys().forEach(function (key) {\n            _this.registerIconFromSvg(key.substring(2, key.length - 4).toLowerCase(), r(key));\n        });\n    };\n    SvgIconRegistry.prototype.iconsRenderedHtml = function () {\n        var _this = this;\n        return Object.keys(this.icons).map(function (icon) { return _this.icons[icon]; }).join(\"\");\n    };\n    SvgIconRegistry.prototype.renderIcons = function () {\n        var containerId = \"sv-icon-holder-global-container\";\n        if (!!_settings__WEBPACK_IMPORTED_MODULE_0__[\"settings\"].environment && !_settings__WEBPACK_IMPORTED_MODULE_0__[\"settings\"].environment.root.getElementById(containerId)) {\n            var iconsDiv = document.createElement(\"div\");\n            iconsDiv.id = containerId;\n            iconsDiv.innerHTML = \"<svg>\" + this.iconsRenderedHtml() + \"</svg>\";\n            iconsDiv.style.display = \"none\";\n            Object(_utils_utils__WEBPACK_IMPORTED_MODULE_1__[\"getElement\"])(_settings__WEBPACK_IMPORTED_MODULE_0__[\"settings\"].environment.svgMountContainer).appendChild(iconsDiv);\n        }\n    };\n    return SvgIconRegistry;\n}());\n\nvar SvgRegistry = new SvgIconRegistry();\nvar SvgBundleViewModel;\nvar path = __nested_webpack_require_4049301__(\"./src/images sync \\\\.svg$\");\nvar pathSmiley = __nested_webpack_require_4049301__(\"./src/images/smiley sync \\\\.svg$\");\nSvgRegistry.registerIconsFromFolder(path);\nSvgRegistry.registerIconsFromFolder(pathSmiley);\n\n\n/***/ }),\n\n/***/ \"./src/template-renderer.ts\":\n/*!**********************************!*\\\n  !*** ./src/template-renderer.ts ***!\n  \\**********************************/\n/*! no exports provided */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4053958__) {\n\n\"use strict\";\n__nested_webpack_require_4053958__.r(__nested_webpack_exports__);\n\n\n\n/***/ }),\n\n/***/ \"./src/textPreProcessor.ts\":\n/*!*********************************!*\\\n  !*** ./src/textPreProcessor.ts ***!\n  \\*********************************/\n/*! exports provided: TextPreProcessorItem, TextPreProcessorValue, TextPreProcessor, QuestionTextProcessor */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4054360__) {\n\n\"use strict\";\n__nested_webpack_require_4054360__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_4054360__.d(__nested_webpack_exports__, \"TextPreProcessorItem\", function() { return TextPreProcessorItem; });\n/* harmony export (binding) */ __nested_webpack_require_4054360__.d(__nested_webpack_exports__, \"TextPreProcessorValue\", function() { return TextPreProcessorValue; });\n/* harmony export (binding) */ __nested_webpack_require_4054360__.d(__nested_webpack_exports__, \"TextPreProcessor\", function() { return TextPreProcessor; });\n/* harmony export (binding) */ __nested_webpack_require_4054360__.d(__nested_webpack_exports__, \"QuestionTextProcessor\", function() { return QuestionTextProcessor; });\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4054360__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _conditionProcessValue__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4054360__(/*! ./conditionProcessValue */ \"./src/conditionProcessValue.ts\");\n\n\nvar TextPreProcessorItem = /** @class */ (function () {\n    function TextPreProcessorItem() {\n    }\n    return TextPreProcessorItem;\n}());\n\nvar TextPreProcessorValue = /** @class */ (function () {\n    function TextPreProcessorValue(name, returnDisplayValue) {\n        this.name = name;\n        this.returnDisplayValue = returnDisplayValue;\n        this.isExists = false;\n        this.canProcess = true;\n    }\n    return TextPreProcessorValue;\n}());\n\nvar TextPreProcessor = /** @class */ (function () {\n    function TextPreProcessor() {\n        this._unObservableValues = [undefined];\n    }\n    Object.defineProperty(TextPreProcessor.prototype, \"hasAllValuesOnLastRunValue\", {\n        get: function () {\n            return this._unObservableValues[0];\n        },\n        set: function (val) {\n            this._unObservableValues[0] = val;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    TextPreProcessor.prototype.process = function (text, returnDisplayValue, doEncoding) {\n        if (returnDisplayValue === void 0) { returnDisplayValue = false; }\n        if (doEncoding === void 0) { doEncoding = false; }\n        this.hasAllValuesOnLastRunValue = true;\n        if (!text)\n            return text;\n        if (!this.onProcess)\n            return text;\n        var items = this.getItems(text);\n        for (var i = items.length - 1; i >= 0; i--) {\n            var item = items[i];\n            var name = this.getName(text.substring(item.start + 1, item.end));\n            if (!name)\n                continue;\n            var textValue = new TextPreProcessorValue(name, returnDisplayValue);\n            this.onProcess(textValue);\n            if (!textValue.isExists) {\n                if (textValue.canProcess) {\n                    this.hasAllValuesOnLastRunValue = false;\n                }\n                continue;\n            }\n            if (_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(textValue.value)) {\n                this.hasAllValuesOnLastRunValue = false;\n            }\n            var replacedValue = !_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(textValue.value)\n                ? textValue.value\n                : \"\";\n            if (doEncoding) {\n                replacedValue = encodeURIComponent(replacedValue);\n            }\n            text =\n                text.substring(0, item.start) + replacedValue + text.substring(item.end + 1);\n        }\n        return text;\n    };\n    TextPreProcessor.prototype.processValue = function (name, returnDisplayValue) {\n        var textValue = new TextPreProcessorValue(name, returnDisplayValue);\n        if (!!this.onProcess) {\n            this.onProcess(textValue);\n        }\n        return textValue;\n    };\n    Object.defineProperty(TextPreProcessor.prototype, \"hasAllValuesOnLastRun\", {\n        get: function () {\n            return !!this.hasAllValuesOnLastRunValue;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    TextPreProcessor.prototype.getItems = function (text) {\n        var items = [];\n        var length = text.length;\n        var start = -1;\n        var ch = \"\";\n        for (var i = 0; i < length; i++) {\n            ch = text[i];\n            if (ch == \"{\")\n                start = i;\n            if (ch == \"}\") {\n                if (start > -1) {\n                    var item = new TextPreProcessorItem();\n                    item.start = start;\n                    item.end = i;\n                    items.push(item);\n                }\n                start = -1;\n            }\n        }\n        return items;\n    };\n    TextPreProcessor.prototype.getName = function (name) {\n        if (!name)\n            return;\n        return name.trim();\n    };\n    return TextPreProcessor;\n}());\n\nvar QuestionTextProcessor = /** @class */ (function () {\n    function QuestionTextProcessor(variableName) {\n        var _this = this;\n        this.variableName = variableName;\n        this.textPreProcessor = new TextPreProcessor();\n        this.textPreProcessor.onProcess = function (textValue) {\n            _this.getProcessedTextValue(textValue);\n        };\n    }\n    QuestionTextProcessor.prototype.processValue = function (name, returnDisplayValue) {\n        return this.textPreProcessor.processValue(name, returnDisplayValue);\n    };\n    Object.defineProperty(QuestionTextProcessor.prototype, \"survey\", {\n        get: function () {\n            return null;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(QuestionTextProcessor.prototype, \"panel\", {\n        get: function () {\n            return null;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    QuestionTextProcessor.prototype.getValues = function () {\n        return !!this.panel ? this.panel.getValue() : null;\n    };\n    QuestionTextProcessor.prototype.getQuestionByName = function (name) {\n        return !!this.panel\n            ? this.panel.getQuestionByValueName(name)\n            : null;\n    };\n    QuestionTextProcessor.prototype.getParentTextProcessor = function () { return null; };\n    QuestionTextProcessor.prototype.onCustomProcessText = function (textValue) {\n        return false;\n    };\n    QuestionTextProcessor.prototype.getQuestionDisplayText = function (question) {\n        return question.displayValue;\n    };\n    //ITextProcessor\n    QuestionTextProcessor.prototype.getProcessedTextValue = function (textValue) {\n        if (!textValue)\n            return;\n        if (this.onCustomProcessText(textValue))\n            return;\n        var firstName = new _conditionProcessValue__WEBPACK_IMPORTED_MODULE_1__[\"ProcessValue\"]().getFirstName(textValue.name);\n        textValue.isExists = firstName == this.variableName;\n        textValue.canProcess = textValue.isExists;\n        if (!textValue.canProcess)\n            return;\n        //name should start with the variable name\n        textValue.name = textValue.name.replace(this.variableName + \".\", \"\");\n        var firstName = new _conditionProcessValue__WEBPACK_IMPORTED_MODULE_1__[\"ProcessValue\"]().getFirstName(textValue.name);\n        var question = this.getQuestionByName(firstName);\n        var values = {};\n        if (question) {\n            values[firstName] = textValue.returnDisplayValue\n                ? this.getQuestionDisplayText(question)\n                : question.value;\n        }\n        else {\n            var allValues = !!this.panel ? this.getValues() : null;\n            if (allValues) {\n                values[firstName] = allValues[firstName];\n            }\n        }\n        textValue.value = new _conditionProcessValue__WEBPACK_IMPORTED_MODULE_1__[\"ProcessValue\"]().getValue(textValue.name, values);\n    };\n    QuestionTextProcessor.prototype.processText = function (text, returnDisplayValue) {\n        if (this.survey && this.survey.isDesignMode)\n            return text;\n        text = this.textPreProcessor.process(text, returnDisplayValue);\n        text = this.processTextCore(this.getParentTextProcessor(), text, returnDisplayValue);\n        return this.processTextCore(this.survey, text, returnDisplayValue);\n    };\n    QuestionTextProcessor.prototype.processTextEx = function (text, returnDisplayValue) {\n        text = this.processText(text, returnDisplayValue);\n        var hasAllValuesOnLastRun = this.textPreProcessor.hasAllValuesOnLastRun;\n        var res = { hasAllValuesOnLastRun: true, text: text };\n        if (this.survey) {\n            res = this.survey.processTextEx(text, returnDisplayValue, false);\n        }\n        res.hasAllValuesOnLastRun =\n            res.hasAllValuesOnLastRun && hasAllValuesOnLastRun;\n        return res;\n    };\n    QuestionTextProcessor.prototype.processTextCore = function (textProcessor, text, returnDisplayValue) {\n        if (!textProcessor)\n            return text;\n        return textProcessor.processText(text, returnDisplayValue);\n    };\n    return QuestionTextProcessor;\n}());\n\n\n\n/***/ }),\n\n/***/ \"./src/themes.ts\":\n/*!***********************!*\\\n  !*** ./src/themes.ts ***!\n  \\***********************/\n/*! no exports provided */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4063427__) {\n\n\"use strict\";\n__nested_webpack_require_4063427__.r(__nested_webpack_exports__);\n\n\n\n/***/ }),\n\n/***/ \"./src/trigger.ts\":\n/*!************************!*\\\n  !*** ./src/trigger.ts ***!\n  \\************************/\n/*! exports provided: Trigger, SurveyTrigger, SurveyTriggerVisible, SurveyTriggerComplete, SurveyTriggerSetValue, SurveyTriggerSkip, SurveyTriggerRunExpression, SurveyTriggerCopyValue */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4063870__) {\n\n\"use strict\";\n__nested_webpack_require_4063870__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_4063870__.d(__nested_webpack_exports__, \"Trigger\", function() { return Trigger; });\n/* harmony export (binding) */ __nested_webpack_require_4063870__.d(__nested_webpack_exports__, \"SurveyTrigger\", function() { return SurveyTrigger; });\n/* harmony export (binding) */ __nested_webpack_require_4063870__.d(__nested_webpack_exports__, \"SurveyTriggerVisible\", function() { return SurveyTriggerVisible; });\n/* harmony export (binding) */ __nested_webpack_require_4063870__.d(__nested_webpack_exports__, \"SurveyTriggerComplete\", function() { return SurveyTriggerComplete; });\n/* harmony export (binding) */ __nested_webpack_require_4063870__.d(__nested_webpack_exports__, \"SurveyTriggerSetValue\", function() { return SurveyTriggerSetValue; });\n/* harmony export (binding) */ __nested_webpack_require_4063870__.d(__nested_webpack_exports__, \"SurveyTriggerSkip\", function() { return SurveyTriggerSkip; });\n/* harmony export (binding) */ __nested_webpack_require_4063870__.d(__nested_webpack_exports__, \"SurveyTriggerRunExpression\", function() { return SurveyTriggerRunExpression; });\n/* harmony export (binding) */ __nested_webpack_require_4063870__.d(__nested_webpack_exports__, \"SurveyTriggerCopyValue\", function() { return SurveyTriggerCopyValue; });\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4063870__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4063870__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4063870__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _conditions__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_4063870__(/*! ./conditions */ \"./src/conditions.ts\");\n/* harmony import */ var _expressions_expressions__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_4063870__(/*! ./expressions/expressions */ \"./src/expressions/expressions.ts\");\n/* harmony import */ var _conditionProcessValue__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_4063870__(/*! ./conditionProcessValue */ \"./src/conditionProcessValue.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_4063870__(/*! ./settings */ \"./src/settings.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n\n\n\n\n\n\n\n/**\n * A base class for all triggers.\n * A trigger calls a method when the expression change the result: from false to true or from true to false.\n * Please note, it runs only one changing the expression result.\n */\nvar Trigger = /** @class */ (function (_super) {\n    __extends(Trigger, _super);\n    function Trigger() {\n        var _this = _super.call(this) || this;\n        _this.idValue = (Trigger.idCounter++);\n        _this.registerPropertyChangedHandlers([\"operator\", \"value\", \"name\"], function () {\n            _this.oldPropertiesChanged();\n        });\n        _this.registerPropertyChangedHandlers([\"expression\"], function () { _this.onExpressionChanged(); });\n        return _this;\n    }\n    Object.defineProperty(Trigger, \"operators\", {\n        get: function () {\n            if (Trigger.operatorsValue != null)\n                return Trigger.operatorsValue;\n            Trigger.operatorsValue = {\n                empty: function (value, expectedValue) {\n                    return !value;\n                },\n                notempty: function (value, expectedValue) {\n                    return !!value;\n                },\n                equal: function (value, expectedValue) {\n                    return value == expectedValue;\n                },\n                notequal: function (value, expectedValue) {\n                    return value != expectedValue;\n                },\n                contains: function (value, expectedValue) {\n                    return value && value[\"indexOf\"] && value.indexOf(expectedValue) > -1;\n                },\n                notcontains: function (value, expectedValue) {\n                    return (!value || !value[\"indexOf\"] || value.indexOf(expectedValue) == -1);\n                },\n                greater: function (value, expectedValue) {\n                    return value > expectedValue;\n                },\n                less: function (value, expectedValue) {\n                    return value < expectedValue;\n                },\n                greaterorequal: function (value, expectedValue) {\n                    return value >= expectedValue;\n                },\n                lessorequal: function (value, expectedValue) {\n                    return value <= expectedValue;\n                },\n            };\n            return Trigger.operatorsValue;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Trigger.prototype, \"id\", {\n        get: function () { return this.idValue; },\n        enumerable: false,\n        configurable: true\n    });\n    Trigger.prototype.getType = function () {\n        return \"triggerbase\";\n    };\n    Trigger.prototype.toString = function () {\n        var res = this.getType().replace(\"trigger\", \"\");\n        var exp = !!this.expression ? this.expression : this.buildExpression();\n        if (exp) {\n            res += \", \" + exp;\n        }\n        return res;\n    };\n    Object.defineProperty(Trigger.prototype, \"operator\", {\n        get: function () {\n            return this.getPropertyValue(\"operator\", \"equal\");\n        },\n        set: function (value) {\n            if (!value)\n                return;\n            value = value.toLowerCase();\n            if (!Trigger.operators[value])\n                return;\n            this.setPropertyValue(\"operator\", value);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Trigger.prototype, \"value\", {\n        get: function () {\n            return this.getPropertyValue(\"value\", null);\n        },\n        set: function (val) {\n            this.setPropertyValue(\"value\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Trigger.prototype, \"name\", {\n        get: function () {\n            return this.getPropertyValue(\"name\", \"\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"name\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Trigger.prototype, \"expression\", {\n        get: function () {\n            return this.getPropertyValue(\"expression\", \"\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"expression\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Trigger.prototype.canBeExecuted = function (isOnNextPage) {\n        return true;\n    };\n    Trigger.prototype.canBeExecutedOnComplete = function () {\n        return false;\n    };\n    Trigger.prototype.checkExpression = function (isOnNextPage, isOnComplete, keys, values, properties) {\n        if (properties === void 0) { properties = null; }\n        this.isExecutingOnNextPage = isOnNextPage;\n        if (!this.canBeExecuted(isOnNextPage))\n            return;\n        if (isOnComplete && !this.canBeExecutedOnComplete())\n            return;\n        if (!this.isCheckRequired(keys))\n            return;\n        if (!!this.conditionRunner) {\n            this.perform(values, properties);\n        }\n    };\n    Trigger.prototype.check = function (value) {\n        var triggerResult = Trigger.operators[this.operator](value, this.value);\n        if (triggerResult) {\n            this.onSuccess({}, null);\n        }\n        else {\n            this.onFailure();\n        }\n    };\n    Object.defineProperty(Trigger.prototype, \"requireValidQuestion\", {\n        get: function () { return false; },\n        enumerable: false,\n        configurable: true\n    });\n    Trigger.prototype.perform = function (values, properties) {\n        var _this = this;\n        this.conditionRunner.onRunComplete = function (res) {\n            _this.triggerResult(res, values, properties);\n        };\n        this.conditionRunner.run(values, properties);\n    };\n    Trigger.prototype.triggerResult = function (res, values, properties) {\n        if (res) {\n            this.onSuccess(values, properties);\n            this.onSuccessExecuted();\n        }\n        else {\n            this.onFailure();\n        }\n    };\n    Trigger.prototype.onSuccess = function (values, properties) { };\n    Trigger.prototype.onFailure = function () { };\n    Trigger.prototype.onSuccessExecuted = function () { };\n    Trigger.prototype.endLoadingFromJson = function () {\n        _super.prototype.endLoadingFromJson.call(this);\n        this.oldPropertiesChanged();\n    };\n    Trigger.prototype.oldPropertiesChanged = function () {\n        this.onExpressionChanged();\n    };\n    Trigger.prototype.onExpressionChanged = function () {\n        this.conditionRunner = null;\n    };\n    Trigger.prototype.buildExpression = function () {\n        if (!this.name)\n            return \"\";\n        if (this.isValueEmpty(this.value) && this.isRequireValue)\n            return \"\";\n        return (\"{\" +\n            this.name +\n            \"} \" +\n            this.operator +\n            \" \" +\n            _expressions_expressions__WEBPACK_IMPORTED_MODULE_4__[\"OperandMaker\"].toOperandString(this.value));\n    };\n    Trigger.prototype.isCheckRequired = function (keys) {\n        if (!keys)\n            return false;\n        this.createConditionRunner();\n        if (this.conditionRunner.hasFunction() === true)\n            return true;\n        return new _conditionProcessValue__WEBPACK_IMPORTED_MODULE_5__[\"ProcessValue\"]().isAnyKeyChanged(keys, this.conditionRunner.getVariables());\n    };\n    Trigger.prototype.createConditionRunner = function () {\n        if (!!this.conditionRunner)\n            return;\n        var expression = this.expression;\n        if (!expression) {\n            expression = this.buildExpression();\n        }\n        if (!expression)\n            return;\n        this.conditionRunner = new _conditions__WEBPACK_IMPORTED_MODULE_3__[\"ConditionRunner\"](expression);\n    };\n    Object.defineProperty(Trigger.prototype, \"isRequireValue\", {\n        get: function () {\n            return this.operator !== \"empty\" && this.operator != \"notempty\";\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Trigger.idCounter = 1;\n    Trigger.operatorsValue = null;\n    return Trigger;\n}(_base__WEBPACK_IMPORTED_MODULE_1__[\"Base\"]));\n\n/**\n * It extends the Trigger base class and add properties required for SurveyJS classes.\n */\nvar SurveyTrigger = /** @class */ (function (_super) {\n    __extends(SurveyTrigger, _super);\n    function SurveyTrigger() {\n        var _this = _super.call(this) || this;\n        _this.ownerValue = null;\n        return _this;\n    }\n    Object.defineProperty(SurveyTrigger.prototype, \"owner\", {\n        get: function () {\n            return this.ownerValue;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyTrigger.prototype.setOwner = function (owner) {\n        this.ownerValue = owner;\n    };\n    SurveyTrigger.prototype.getSurvey = function (live) {\n        if (live === void 0) { live = false; }\n        return !!this.owner && !!this.owner[\"getSurvey\"]\n            ? this.owner.getSurvey()\n            : null;\n    };\n    SurveyTrigger.prototype.isRealExecution = function () {\n        return true;\n    };\n    SurveyTrigger.prototype.onSuccessExecuted = function () {\n        if (!!this.owner && this.isRealExecution()) {\n            this.owner.triggerExecuted(this);\n        }\n    };\n    return SurveyTrigger;\n}(Trigger));\n\n/**\n * If expression returns true, it makes questions/pages visible.\n * Ohterwise it makes them invisible.\n */\nvar SurveyTriggerVisible = /** @class */ (function (_super) {\n    __extends(SurveyTriggerVisible, _super);\n    function SurveyTriggerVisible() {\n        var _this = _super.call(this) || this;\n        _this.pages = [];\n        _this.questions = [];\n        return _this;\n    }\n    SurveyTriggerVisible.prototype.getType = function () {\n        return \"visibletrigger\";\n    };\n    SurveyTriggerVisible.prototype.onSuccess = function (values, properties) {\n        this.onTrigger(this.onItemSuccess);\n    };\n    SurveyTriggerVisible.prototype.onFailure = function () {\n        this.onTrigger(this.onItemFailure);\n    };\n    SurveyTriggerVisible.prototype.onTrigger = function (func) {\n        if (!this.owner)\n            return;\n        var objects = this.owner.getObjects(this.pages, this.questions);\n        for (var i = 0; i < objects.length; i++) {\n            func(objects[i]);\n        }\n    };\n    SurveyTriggerVisible.prototype.onItemSuccess = function (item) {\n        item.visible = true;\n    };\n    SurveyTriggerVisible.prototype.onItemFailure = function (item) {\n        item.visible = false;\n    };\n    return SurveyTriggerVisible;\n}(SurveyTrigger));\n\n/**\n * If expression returns true, it completes the survey.\n */\nvar SurveyTriggerComplete = /** @class */ (function (_super) {\n    __extends(SurveyTriggerComplete, _super);\n    function SurveyTriggerComplete() {\n        return _super.call(this) || this;\n    }\n    SurveyTriggerComplete.prototype.getType = function () {\n        return \"completetrigger\";\n    };\n    Object.defineProperty(SurveyTriggerComplete.prototype, \"requireValidQuestion\", {\n        get: function () { return true; },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyTriggerComplete.prototype.isRealExecution = function () {\n        return !_settings__WEBPACK_IMPORTED_MODULE_6__[\"settings\"].triggers.executeCompleteOnValueChanged === this.isExecutingOnNextPage;\n    };\n    SurveyTriggerComplete.prototype.onSuccess = function (values, properties) {\n        if (!this.owner)\n            return;\n        if (this.isRealExecution()) {\n            this.owner.setCompleted(this);\n        }\n        else {\n            this.owner.canBeCompleted(this, true);\n        }\n    };\n    SurveyTriggerComplete.prototype.onFailure = function () {\n        this.owner.canBeCompleted(this, false);\n    };\n    return SurveyTriggerComplete;\n}(SurveyTrigger));\n\n/**\n * If expression returns true, the value from property **setValue** will be set to **setToName**\n */\nvar SurveyTriggerSetValue = /** @class */ (function (_super) {\n    __extends(SurveyTriggerSetValue, _super);\n    function SurveyTriggerSetValue() {\n        return _super.call(this) || this;\n    }\n    SurveyTriggerSetValue.prototype.getType = function () {\n        return \"setvaluetrigger\";\n    };\n    SurveyTriggerSetValue.prototype.canBeExecuted = function (isOnNextPage) {\n        return !isOnNextPage && !!this.setToName;\n    };\n    SurveyTriggerSetValue.prototype.onPropertyValueChanged = function (name, oldValue, newValue) {\n        _super.prototype.onPropertyValueChanged.call(this, name, oldValue, newValue);\n        if (name !== \"setToName\")\n            return;\n        var survey = this.getSurvey();\n        if (survey && !survey.isLoadingFromJson && survey.isDesignMode) {\n            this.setValue = undefined;\n        }\n    };\n    Object.defineProperty(SurveyTriggerSetValue.prototype, \"setToName\", {\n        get: function () {\n            return this.getPropertyValue(\"setToName\", \"\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"setToName\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyTriggerSetValue.prototype, \"setValue\", {\n        get: function () {\n            return this.getPropertyValue(\"setValue\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"setValue\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyTriggerSetValue.prototype, \"isVariable\", {\n        get: function () {\n            return this.getPropertyValue(\"isVariable\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"isVariable\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyTriggerSetValue.prototype.onSuccess = function (values, properties) {\n        if (!this.setToName || !this.owner)\n            return;\n        this.owner.setTriggerValue(this.setToName, this.setValue, this.isVariable);\n    };\n    return SurveyTriggerSetValue;\n}(SurveyTrigger));\n\n/**\n * If expression returns true, the survey go to question **gotoName** and focus it.\n */\nvar SurveyTriggerSkip = /** @class */ (function (_super) {\n    __extends(SurveyTriggerSkip, _super);\n    function SurveyTriggerSkip() {\n        return _super.call(this) || this;\n    }\n    SurveyTriggerSkip.prototype.getType = function () {\n        return \"skiptrigger\";\n    };\n    Object.defineProperty(SurveyTriggerSkip.prototype, \"requireValidQuestion\", {\n        get: function () { return this.canBeExecuted(false); },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyTriggerSkip.prototype, \"gotoName\", {\n        get: function () {\n            return this.getPropertyValue(\"gotoName\", \"\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"gotoName\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyTriggerSkip.prototype.canBeExecuted = function (isOnNextPage) {\n        return isOnNextPage === !_settings__WEBPACK_IMPORTED_MODULE_6__[\"settings\"].triggers.executeSkipOnValueChanged;\n    };\n    SurveyTriggerSkip.prototype.onSuccess = function (values, properties) {\n        if (!this.gotoName || !this.owner)\n            return;\n        this.owner.focusQuestion(this.gotoName);\n    };\n    return SurveyTriggerSkip;\n}(SurveyTrigger));\n\n/**\n * If expression returns true, the **runExpression** will be run. If **setToName** property is not empty then the result of **runExpression** will be set to it.\n */\nvar SurveyTriggerRunExpression = /** @class */ (function (_super) {\n    __extends(SurveyTriggerRunExpression, _super);\n    function SurveyTriggerRunExpression() {\n        return _super.call(this) || this;\n    }\n    SurveyTriggerRunExpression.prototype.getType = function () {\n        return \"runexpressiontrigger\";\n    };\n    Object.defineProperty(SurveyTriggerRunExpression.prototype, \"setToName\", {\n        get: function () {\n            return this.getPropertyValue(\"setToName\", \"\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"setToName\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyTriggerRunExpression.prototype, \"runExpression\", {\n        get: function () {\n            return this.getPropertyValue(\"runExpression\", \"\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"runExpression\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyTriggerRunExpression.prototype.onSuccess = function (values, properties) {\n        var _this = this;\n        if (!this.owner || !this.runExpression)\n            return;\n        var expression = new _conditions__WEBPACK_IMPORTED_MODULE_3__[\"ExpressionRunner\"](this.runExpression);\n        if (expression.canRun) {\n            expression.onRunComplete = function (res) {\n                _this.onCompleteRunExpression(res);\n            };\n            expression.run(values, properties);\n        }\n    };\n    SurveyTriggerRunExpression.prototype.onCompleteRunExpression = function (newValue) {\n        if (!!this.setToName && newValue !== undefined) {\n            this.owner.setTriggerValue(this.setToName, _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].convertValToQuestionVal(newValue), false);\n        }\n    };\n    return SurveyTriggerRunExpression;\n}(SurveyTrigger));\n\n/**\n * If expression returns true, the value from question **fromName** will be set into **setToName**.\n */\nvar SurveyTriggerCopyValue = /** @class */ (function (_super) {\n    __extends(SurveyTriggerCopyValue, _super);\n    function SurveyTriggerCopyValue() {\n        return _super.call(this) || this;\n    }\n    SurveyTriggerCopyValue.prototype.canBeExecuted = function (isOnNextPage) {\n        return !isOnNextPage && !!this.setToName && !!this.fromName;\n    };\n    Object.defineProperty(SurveyTriggerCopyValue.prototype, \"setToName\", {\n        get: function () {\n            return this.getPropertyValue(\"setToName\", \"\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"setToName\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyTriggerCopyValue.prototype, \"fromName\", {\n        get: function () {\n            return this.getPropertyValue(\"fromName\", \"\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"fromName\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyTriggerCopyValue.prototype, \"copyDisplayValue\", {\n        get: function () {\n            return this.getPropertyValue(\"copyDisplayValue\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"copyDisplayValue\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyTriggerCopyValue.prototype.getType = function () {\n        return \"copyvaluetrigger\";\n    };\n    SurveyTriggerCopyValue.prototype.onSuccess = function (values, properties) {\n        if (!this.setToName || !this.owner)\n            return;\n        this.owner.copyTriggerValue(this.setToName, this.fromName, this.copyDisplayValue);\n    };\n    return SurveyTriggerCopyValue;\n}(SurveyTrigger));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"Serializer\"].addClass(\"trigger\", [\n    { name: \"operator\", default: \"equal\", visible: false },\n    { name: \"value\", visible: false },\n    \"expression:condition\",\n]);\n_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"Serializer\"].addClass(\"surveytrigger\", [{ name: \"name\", visible: false }], null, \"trigger\");\n_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"Serializer\"].addClass(\"visibletrigger\", [\"pages:pages\", \"questions:questions\"], function () {\n    return new SurveyTriggerVisible();\n}, \"surveytrigger\");\n_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"Serializer\"].addClass(\"completetrigger\", [], function () {\n    return new SurveyTriggerComplete();\n}, \"surveytrigger\");\n_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"Serializer\"].addClass(\"setvaluetrigger\", [\n    { name: \"!setToName:questionvalue\" },\n    {\n        name: \"setValue:triggervalue\",\n        dependsOn: \"setToName\",\n        visibleIf: function (obj) {\n            return !!obj && !!obj[\"setToName\"];\n        },\n    },\n    { name: \"isVariable:boolean\", visible: false },\n], function () {\n    return new SurveyTriggerSetValue();\n}, \"surveytrigger\");\n_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"Serializer\"].addClass(\"copyvaluetrigger\", [{ name: \"!fromName:questionvalue\" }, { name: \"!setToName:questionvalue\" },\n    { name: \"copyDisplayValue:boolean\", visible: false }], function () {\n    return new SurveyTriggerCopyValue();\n}, \"surveytrigger\");\n_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"Serializer\"].addClass(\"skiptrigger\", [{ name: \"!gotoName:question\" }], function () {\n    return new SurveyTriggerSkip();\n}, \"surveytrigger\");\n_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"Serializer\"].addClass(\"runexpressiontrigger\", [{ name: \"setToName:questionvalue\" }, \"runExpression:expression\"], function () {\n    return new SurveyTriggerRunExpression();\n}, \"surveytrigger\");\n\n\n/***/ }),\n\n/***/ \"./src/utils/camera.ts\":\n/*!*****************************!*\\\n  !*** ./src/utils/camera.ts ***!\n  \\*****************************/\n/*! exports provided: Camera */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4088127__) {\n\n\"use strict\";\n__nested_webpack_require_4088127__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_4088127__.d(__nested_webpack_exports__, \"Camera\", function() { return Camera; });\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4088127__(/*! survey-core */ \"./src/entries/core.ts\");\n\nvar Camera = /** @class */ (function () {\n    function Camera() {\n        this.canFlipValue = undefined;\n    }\n    Camera.clear = function () {\n        Camera.cameraList = undefined;\n        Camera.cameraIndex = -1;\n    };\n    Camera.setCameraList = function (list) {\n        var getDeviceType = function (device) {\n            var lbl = device.label.toLocaleLowerCase();\n            if (lbl.indexOf(\"user\") > -1)\n                return \"user\";\n            if (lbl.indexOf(\"enviroment\") > -1)\n                return \"enviroment\";\n            return \"\";\n        };\n        Camera.clear();\n        if (Array.isArray(list) && list.length > 0) {\n            Camera.cameraIndex = -1;\n            list.sort(function (a, b) {\n                if (a === b)\n                    return 0;\n                if (a.label !== b.label) {\n                    var lblA = getDeviceType(a);\n                    var lblB = getDeviceType(b);\n                    if (lblA !== lblB) {\n                        if (lblA === \"user\")\n                            return -1;\n                        if (lblB === \"user\")\n                            return 1;\n                        if (lblA === \"enviroment\")\n                            return -1;\n                        if (lblB === \"enviroment\")\n                            return 1;\n                    }\n                }\n                var iA = list.indexOf(a);\n                var iB = list.indexOf(b);\n                return iA < iB ? -1 : 1;\n            });\n        }\n        Camera.cameraList = list;\n    };\n    Camera.prototype.hasCamera = function (callback) {\n        var _this = this;\n        if (Camera.cameraList !== undefined) {\n            this.hasCameraCallback(callback);\n            return;\n        }\n        if (Camera.mediaDevicesCallback) {\n            var devicesCallback = function (devices) {\n                _this.setVideoInputs(devices);\n                _this.hasCameraCallback(callback);\n            };\n            Camera.mediaDevicesCallback(devicesCallback);\n            return;\n        }\n        if (typeof navigator !== \"undefined\" && navigator.mediaDevices) {\n            navigator.mediaDevices.enumerateDevices()\n                .then(function (devices) {\n                _this.setVideoInputs(devices);\n                _this.hasCameraCallback(callback);\n                _this.updateCanFlipValue();\n            })\n                .catch(function (error) {\n                Camera.cameraList = null;\n                _this.hasCameraCallback(callback);\n            });\n        }\n        else {\n            Camera.cameraList = null;\n            this.hasCameraCallback(callback);\n        }\n    };\n    Camera.prototype.getMediaConstraints = function (videoEl) {\n        var devices = Camera.cameraList;\n        if (!Array.isArray(devices) || devices.length < 1)\n            return undefined;\n        if (Camera.cameraIndex < 0)\n            Camera.cameraIndex = 0;\n        var selDevice = devices[Camera.cameraIndex];\n        var videoConstraints = {};\n        if (selDevice && selDevice.deviceId) {\n            videoConstraints.deviceId = { exact: selDevice.deviceId };\n        }\n        else {\n            videoConstraints.facingMode = Camera.cameraFacingMode;\n        }\n        if (videoEl) {\n            videoConstraints.width = { exact: videoEl.width ? videoEl.width : videoEl.scrollWidth };\n            videoConstraints.height = { exact: videoEl.height ? videoEl.height : videoEl.scrollHeight };\n        }\n        return {\n            video: videoConstraints,\n            audio: false\n        };\n    };\n    Camera.prototype.startVideo = function (videoElementId, callback, imageWidth, imageHeight) {\n        var _this = this;\n        var _a;\n        var videoEl = (_a = survey_core__WEBPACK_IMPORTED_MODULE_0__[\"settings\"].environment.root) === null || _a === void 0 ? void 0 : _a.getElementById(videoElementId);\n        if (!videoEl) {\n            callback(undefined);\n            return;\n        }\n        if (imageWidth) {\n            videoEl.width = imageWidth;\n        }\n        else {\n            videoEl.style.width = \"100%\";\n        }\n        if (imageHeight) {\n            videoEl.height = imageHeight;\n        }\n        else {\n            videoEl.style.height = \"100%\";\n        }\n        var mediaConstraints = this.getMediaConstraints(videoEl);\n        navigator.mediaDevices.getUserMedia(mediaConstraints).then(function (stream) {\n            var _a;\n            videoEl.srcObject = stream;\n            if (!((_a = Camera.cameraList[Camera.cameraIndex]) === null || _a === void 0 ? void 0 : _a.deviceId) && !!stream.getTracks()[0].getCapabilities().facingMode) {\n                Camera.canSwitchFacingMode = true;\n                _this.updateCanFlipValue();\n            }\n            videoEl.play();\n            callback(stream);\n        })\n            .catch(function (error) {\n            callback(undefined);\n        });\n    };\n    Camera.prototype.snap = function (videoElementId, callback) {\n        if (\"undefined\" === typeof document)\n            return false;\n        var root = document;\n        var videoEl = root.getElementById(videoElementId);\n        if (!videoEl)\n            return false;\n        var canvasEl = root.createElement(\"canvas\");\n        canvasEl.height = videoEl.scrollHeight;\n        canvasEl.width = videoEl.scrollWidth;\n        var context = canvasEl.getContext(\"2d\");\n        /*\n        if(this._facingMode == 'user'){\n          context.translate(canvasEl.width, 0);\n          context.scale(-1, 1);\n        }\n        */\n        context.clearRect(0, 0, canvasEl.width, canvasEl.height);\n        context.drawImage(videoEl, 0, 0, canvasEl.width, canvasEl.height);\n        canvasEl.toBlob(callback, \"image/png\");\n        return true;\n    };\n    Camera.prototype.updateCanFlipValue = function () {\n        var list = Camera.cameraList;\n        this.canFlipValue = Array.isArray(list) && list.length > 1 || Camera.canSwitchFacingMode;\n        if (this.onCanFlipChangedCallback)\n            this.onCanFlipChangedCallback(this.canFlipValue);\n    };\n    Camera.prototype.canFlip = function (onCanFlipChangedCallback) {\n        if (this.canFlipValue === undefined) {\n            this.updateCanFlipValue();\n        }\n        if (onCanFlipChangedCallback) {\n            this.onCanFlipChangedCallback = onCanFlipChangedCallback;\n        }\n        return this.canFlipValue;\n    };\n    Camera.prototype.flip = function () {\n        if (!this.canFlip())\n            return;\n        if (Camera.canSwitchFacingMode) {\n            Camera.cameraFacingMode = Camera.cameraFacingMode === \"user\" ? \"environment\" : \"user\";\n        }\n        else if (Camera.cameraIndex >= Camera.cameraList.length - 1) {\n            Camera.cameraIndex = 0;\n        }\n        else {\n            Camera.cameraIndex++;\n        }\n    };\n    Camera.prototype.hasCameraCallback = function (callback) {\n        callback(Array.isArray(Camera.cameraList));\n    };\n    Camera.prototype.setVideoInputs = function (devices) {\n        var list = [];\n        devices.forEach(function (device) {\n            if (device.kind === \"videoinput\") {\n                list.push(device);\n            }\n        });\n        Camera.setCameraList(list.length > 0 ? list : null);\n    };\n    Camera.cameraIndex = -1;\n    Camera.cameraFacingMode = \"user\";\n    Camera.canSwitchFacingMode = false;\n    return Camera;\n}());\n\n\n\n/***/ }),\n\n/***/ \"./src/utils/cssClassBuilder.ts\":\n/*!**************************************!*\\\n  !*** ./src/utils/cssClassBuilder.ts ***!\n  \\**************************************/\n/*! exports provided: CssClassBuilder */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4096076__) {\n\n\"use strict\";\n__nested_webpack_require_4096076__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_4096076__.d(__nested_webpack_exports__, \"CssClassBuilder\", function() { return CssClassBuilder; });\nvar CssClassBuilder = /** @class */ (function () {\n    function CssClassBuilder() {\n        this.classes = [];\n    }\n    CssClassBuilder.prototype.isEmpty = function () {\n        return this.toString() === \"\";\n    };\n    CssClassBuilder.prototype.append = function (value, condition) {\n        if (condition === void 0) { condition = true; }\n        if (!!value && condition) {\n            if (typeof value === \"string\") {\n                value = value.trim();\n            }\n            this.classes.push(value);\n        }\n        return this;\n    };\n    CssClassBuilder.prototype.toString = function () {\n        return this.classes.join(\" \");\n    };\n    return CssClassBuilder;\n}());\n\n\n\n/***/ }),\n\n/***/ \"./src/utils/devices.ts\":\n/*!******************************!*\\\n  !*** ./src/utils/devices.ts ***!\n  \\******************************/\n/*! exports provided: IsMobile, IsTouch, _setIsTouch */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4097232__) {\n\n\"use strict\";\n__nested_webpack_require_4097232__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_4097232__.d(__nested_webpack_exports__, \"IsMobile\", function() { return IsMobile; });\n/* harmony export (binding) */ __nested_webpack_require_4097232__.d(__nested_webpack_exports__, \"IsTouch\", function() { return IsTouch; });\n/* harmony export (binding) */ __nested_webpack_require_4097232__.d(__nested_webpack_exports__, \"_setIsTouch\", function() { return _setIsTouch; });\n// isMobile\nvar _isMobile = false;\nvar vendor = null;\nif (typeof navigator !== \"undefined\" &&\n    typeof window !== \"undefined\" &&\n    navigator &&\n    window) {\n    vendor = navigator.userAgent || navigator.vendor || window.opera;\n}\n(function (a) {\n    if (!a)\n        return;\n    if ((navigator.platform === \"MacIntel\" && navigator.maxTouchPoints > 0) || navigator.platform === \"iPad\") {\n        _isMobile = true;\n    }\n    else if (/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a) ||\n        /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(a.substring(0, 4)))\n        _isMobile = true;\n})(vendor);\nvar _IPad = false;\nvar IsMobile = _isMobile || _IPad;\n// isTouch\nvar _isTouch = false;\nif (typeof window !== \"undefined\") {\n    _isTouch = \"ontouchstart\" in window || navigator.maxTouchPoints > 0;\n}\nvar IsTouch = IsMobile && _isTouch;\n//for tests\nfunction _setIsTouch(val) {\n    IsTouch = val;\n}\n\n\n/***/ }),\n\n/***/ \"./src/utils/dragOrClickHelper.ts\":\n/*!****************************************!*\\\n  !*** ./src/utils/dragOrClickHelper.ts ***!\n  \\****************************************/\n/*! exports provided: DragOrClickHelper */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4100696__) {\n\n\"use strict\";\n__nested_webpack_require_4100696__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_4100696__.d(__nested_webpack_exports__, \"DragOrClickHelper\", function() { return DragOrClickHelper; });\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4100696__(/*! survey-core */ \"./src/entries/core.ts\");\n\nvar DragOrClickHelper = /** @class */ (function () {\n    function DragOrClickHelper(dragHandler) {\n        var _this = this;\n        this.dragHandler = dragHandler;\n        this.onPointerUp = function (pointerUpEvent) {\n            _this.clearListeners();\n        };\n        this.tryToStartDrag = function (pointerMoveEvent) {\n            _this.currentX = pointerMoveEvent.pageX;\n            _this.currentY = pointerMoveEvent.pageY;\n            if (_this.isMicroMovement)\n                return;\n            _this.clearListeners();\n            _this.dragHandler(_this.pointerDownEvent, _this.currentTarget, _this.itemModel);\n            return true;\n        };\n    }\n    DragOrClickHelper.prototype.onPointerDown = function (pointerDownEvent, itemModel) {\n        if (survey_core__WEBPACK_IMPORTED_MODULE_0__[\"IsTouch\"]) {\n            this.dragHandler(pointerDownEvent, pointerDownEvent.currentTarget, itemModel); //TODO handle inside in the library's drag drop core, need refactoring\n            return;\n        }\n        this.pointerDownEvent = pointerDownEvent;\n        this.currentTarget = pointerDownEvent.currentTarget;\n        this.startX = pointerDownEvent.pageX;\n        this.startY = pointerDownEvent.pageY;\n        document.addEventListener(\"pointermove\", this.tryToStartDrag);\n        this.currentTarget.addEventListener(\"pointerup\", this.onPointerUp);\n        this.itemModel = itemModel;\n    };\n    Object.defineProperty(DragOrClickHelper.prototype, \"isMicroMovement\", {\n        // see https://stackoverflow.com/questions/6042202/how-to-distinguish-mouse-click-and-drag\n        get: function () {\n            var delta = 10;\n            var diffX = Math.abs(this.currentX - this.startX);\n            var diffY = Math.abs(this.currentY - this.startY);\n            return diffX < delta && diffY < delta;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    DragOrClickHelper.prototype.clearListeners = function () {\n        if (!this.pointerDownEvent)\n            return;\n        document.removeEventListener(\"pointermove\", this.tryToStartDrag);\n        this.currentTarget.removeEventListener(\"pointerup\", this.onPointerUp);\n    };\n    return DragOrClickHelper;\n}());\n\n\n\n/***/ }),\n\n/***/ \"./src/utils/popup.ts\":\n/*!****************************!*\\\n  !*** ./src/utils/popup.ts ***!\n  \\****************************/\n/*! exports provided: PopupUtils */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4103479__) {\n\n\"use strict\";\n__nested_webpack_require_4103479__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_4103479__.d(__nested_webpack_exports__, \"PopupUtils\", function() { return PopupUtils; });\nvar PopupUtils = /** @class */ (function () {\n    function PopupUtils() {\n    }\n    PopupUtils.calculatePosition = function (targetRect, height, width, verticalPosition, horizontalPosition, showPointer, positionMode) {\n        if (positionMode === void 0) { positionMode = \"flex\"; }\n        var currentLeft = targetRect.left;\n        var currentTop = targetRect.top;\n        if (positionMode === \"flex\") {\n            if (horizontalPosition == \"center\")\n                currentLeft = (targetRect.left + targetRect.right - width) / 2;\n            else if (horizontalPosition == \"left\")\n                currentLeft = targetRect.left - width;\n            else\n                currentLeft = targetRect.right;\n        }\n        if (verticalPosition == \"middle\")\n            currentTop = (targetRect.top + targetRect.bottom - height) / 2;\n        else if (verticalPosition == \"top\")\n            currentTop = targetRect.top - height;\n        else\n            currentTop = targetRect.bottom;\n        if (showPointer) {\n            if (horizontalPosition != \"center\" && verticalPosition != \"middle\") {\n                if (verticalPosition == \"top\") {\n                    currentTop = currentTop + targetRect.height;\n                }\n                else {\n                    currentTop = currentTop - targetRect.height;\n                }\n            }\n        }\n        return { left: Math.round(currentLeft), top: Math.round(currentTop) };\n    };\n    PopupUtils.getCorrectedVerticalDimensions = function (top, height, windowHeight) {\n        var result = { height: height, top: top };\n        if (top < 0) {\n            result = { height: height + top, top: 0 };\n        }\n        else if (height + top > windowHeight) {\n            var newHeight = Math.min(height, windowHeight - top - PopupUtils.bottomIndent);\n            result = { height: newHeight, top: top };\n        }\n        return result;\n    };\n    PopupUtils.updateHorizontalDimensions = function (left, width, windowWidth, horizontalPosition, positionMode, margins) {\n        if (positionMode === void 0) { positionMode = \"flex\"; }\n        if (margins === void 0) { margins = { left: 0, right: 0 }; }\n        width += (margins.left + margins.right);\n        var newWidth = undefined, newLeft = left;\n        if (horizontalPosition === \"center\") {\n            if (positionMode === \"fixed\") {\n                if (left + width > windowWidth) {\n                    newWidth = windowWidth - left;\n                }\n                newLeft -= margins.left;\n            }\n            else {\n                if (left < 0) {\n                    newLeft = margins.left;\n                    newWidth = Math.min(width, windowWidth);\n                }\n                else if (width + left > windowWidth) {\n                    newLeft = windowWidth - width;\n                    newLeft = Math.max(newLeft, margins.left);\n                    newWidth = Math.min(width, windowWidth);\n                }\n            }\n        }\n        if (horizontalPosition === \"left\") {\n            if (left < 0) {\n                newLeft = margins.left;\n                newWidth = Math.min(width, windowWidth);\n            }\n        }\n        if (horizontalPosition === \"right\") {\n            if (width + left > windowWidth) {\n                newWidth = windowWidth - left;\n            }\n        }\n        return { width: newWidth - margins.left - margins.right, left: newLeft };\n    };\n    PopupUtils.updateVerticalPosition = function (targetRect, height, verticalPosition, showPointer, windowHeight) {\n        var deltaTop = height - (targetRect.top + (showPointer ? targetRect.height : 0));\n        var deltaBottom = height +\n            targetRect.bottom -\n            (showPointer ? targetRect.height : 0) -\n            windowHeight;\n        if (deltaTop > 0 && deltaBottom <= 0 && verticalPosition == \"top\") {\n            verticalPosition = \"bottom\";\n        }\n        else if (deltaBottom > 0 &&\n            deltaTop <= 0 &&\n            verticalPosition == \"bottom\") {\n            verticalPosition = \"top\";\n        }\n        else if (deltaBottom > 0 && deltaTop > 0) {\n            verticalPosition = deltaTop < deltaBottom ? \"top\" : \"bottom\";\n        }\n        return verticalPosition;\n    };\n    PopupUtils.calculatePopupDirection = function (verticalPosition, horizontalPosition) {\n        var popupDirection;\n        if (horizontalPosition == \"center\" && verticalPosition != \"middle\") {\n            popupDirection = verticalPosition;\n        }\n        else if (horizontalPosition != \"center\") {\n            popupDirection = horizontalPosition;\n        }\n        return popupDirection;\n    };\n    //called when showPointer  is true\n    PopupUtils.calculatePointerTarget = function (targetRect, top, left, verticalPosition, horizontalPosition, marginLeft, marginRight) {\n        if (marginLeft === void 0) { marginLeft = 0; }\n        if (marginRight === void 0) { marginRight = 0; }\n        var targetPos = {};\n        if (horizontalPosition != \"center\") {\n            targetPos.top = targetRect.top + targetRect.height / 2;\n            targetPos.left = targetRect[horizontalPosition];\n        }\n        else if (verticalPosition != \"middle\") {\n            targetPos.top = targetRect[verticalPosition];\n            targetPos.left = targetRect.left + targetRect.width / 2;\n        }\n        targetPos.left = Math.round(targetPos.left - left);\n        targetPos.top = Math.round(targetPos.top - top);\n        if (horizontalPosition == \"left\") {\n            targetPos.left -= marginLeft + marginRight;\n        }\n        if (horizontalPosition === \"center\") {\n            targetPos.left -= marginLeft;\n        }\n        return targetPos;\n    };\n    PopupUtils.bottomIndent = 16;\n    return PopupUtils;\n}());\n\n\n\n/***/ }),\n\n/***/ \"./src/utils/responsivity-manager.ts\":\n/*!*******************************************!*\\\n  !*** ./src/utils/responsivity-manager.ts ***!\n  \\*******************************************/\n/*! exports provided: ResponsivityManager, VerticalResponsivityManager */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4109749__) {\n\n\"use strict\";\n__nested_webpack_require_4109749__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_4109749__.d(__nested_webpack_exports__, \"ResponsivityManager\", function() { return ResponsivityManager; });\n/* harmony export (binding) */ __nested_webpack_require_4109749__.d(__nested_webpack_exports__, \"VerticalResponsivityManager\", function() { return VerticalResponsivityManager; });\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4109749__(/*! ./utils */ \"./src/utils/utils.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n\nvar ResponsivityManager = /** @class */ (function () {\n    function ResponsivityManager(container, model, itemsSelector, dotsItemSize) {\n        var _this = this;\n        if (dotsItemSize === void 0) { dotsItemSize = null; }\n        this.container = container;\n        this.model = model;\n        this.itemsSelector = itemsSelector;\n        this.dotsItemSize = dotsItemSize;\n        this.resizeObserver = undefined;\n        this.isInitialized = false;\n        this.minDimensionConst = 56;\n        this.separatorSize = 17;\n        this.separatorAddConst = 1;\n        this.paddingSizeConst = 8;\n        this.dotsSizeConst = 48;\n        this.recalcMinDimensionConst = true;\n        this.getComputedStyle = window.getComputedStyle.bind(window);\n        this.model.updateCallback = function (isResetInitialized) {\n            if (isResetInitialized)\n                _this.isInitialized = false;\n            setTimeout(function () { _this.process(); }, 1);\n        };\n        if (typeof ResizeObserver !== \"undefined\") {\n            this.resizeObserver = new ResizeObserver(function (entries) {\n                window.requestAnimationFrame(function () {\n                    _this.process();\n                });\n            });\n            this.resizeObserver.observe(this.container.parentElement);\n        }\n    }\n    ResponsivityManager.prototype.getDimensions = function (element) {\n        return {\n            scroll: element.scrollWidth,\n            offset: element.offsetWidth,\n        };\n    };\n    ResponsivityManager.prototype.getAvailableSpace = function () {\n        var style = this.getComputedStyle(this.container);\n        var space = this.container.offsetWidth;\n        if (style.boxSizing === \"border-box\") {\n            space -= parseFloat(style.paddingLeft) + parseFloat(style.paddingRight);\n        }\n        return space;\n    };\n    ResponsivityManager.prototype.calcItemSize = function (item) {\n        return item.offsetWidth;\n    };\n    ResponsivityManager.prototype.calcMinDimension = function (currentAction) {\n        var minDimensionConst = this.minDimensionConst;\n        if (currentAction.iconSize && this.recalcMinDimensionConst) {\n            minDimensionConst = 2 * currentAction.iconSize + this.paddingSizeConst;\n        }\n        return currentAction.canShrink\n            ? minDimensionConst +\n                (currentAction.needSeparator ? this.separatorSize : 0)\n            : currentAction.maxDimension;\n    };\n    ResponsivityManager.prototype.calcItemsSizes = function () {\n        var _this = this;\n        var actions = this.model.actions;\n        var _items = this.container.querySelectorAll(this.itemsSelector);\n        (_items || []).forEach(function (item, index) {\n            var currentAction = actions[index];\n            _this.calcActionDimensions(currentAction, item);\n        });\n    };\n    ResponsivityManager.prototype.calcActionDimensions = function (currentAction, item) {\n        currentAction.maxDimension = this.calcItemSize(item);\n        currentAction.minDimension = this.calcMinDimension(currentAction);\n    };\n    Object.defineProperty(ResponsivityManager.prototype, \"isContainerVisible\", {\n        get: function () {\n            return Object(_utils__WEBPACK_IMPORTED_MODULE_0__[\"isContainerVisible\"])(this.container);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    ResponsivityManager.prototype.process = function () {\n        var _a;\n        if (this.isContainerVisible && !this.model.isResponsivenessDisabled) {\n            if (!this.isInitialized) {\n                this.model.setActionsMode(\"large\");\n                this.calcItemsSizes();\n                this.isInitialized = true;\n            }\n            var dotsItemSize = this.dotsItemSize;\n            if (!this.dotsItemSize) {\n                var dotsItemElement = (_a = this.container) === null || _a === void 0 ? void 0 : _a.querySelector(\".sv-dots\");\n                dotsItemSize = dotsItemElement && this.calcItemSize(dotsItemElement) || this.dotsSizeConst;\n            }\n            this.model.fit(this.getAvailableSpace(), dotsItemSize);\n        }\n    };\n    ResponsivityManager.prototype.dispose = function () {\n        this.model.updateCallback = undefined;\n        if (!!this.resizeObserver) {\n            this.resizeObserver.disconnect();\n        }\n    };\n    return ResponsivityManager;\n}());\n\nvar VerticalResponsivityManager = /** @class */ (function (_super) {\n    __extends(VerticalResponsivityManager, _super);\n    function VerticalResponsivityManager(container, model, itemsSelector, dotsItemSize, minDimension) {\n        if (minDimension === void 0) { minDimension = 40; }\n        var _this = _super.call(this, container, model, itemsSelector, dotsItemSize) || this;\n        _this.minDimensionConst = minDimension;\n        _this.recalcMinDimensionConst = false;\n        return _this;\n    }\n    VerticalResponsivityManager.prototype.getDimensions = function () {\n        return {\n            scroll: this.container.scrollHeight,\n            offset: this.container.offsetHeight,\n        };\n    };\n    VerticalResponsivityManager.prototype.getAvailableSpace = function () {\n        var style = this.getComputedStyle(this.container);\n        var space = this.container.offsetHeight;\n        if (style.boxSizing === \"border-box\") {\n            space -= parseFloat(style.paddingTop) + parseFloat(style.paddingBottom);\n        }\n        return space;\n    };\n    VerticalResponsivityManager.prototype.calcItemSize = function (item) {\n        return item.offsetHeight;\n    };\n    VerticalResponsivityManager.prototype.calcActionDimensions = function (currentAction, item) {\n        currentAction.maxDimension = this.calcItemSize(item);\n        currentAction.minDimension = this.calcItemSize(item);\n    };\n    return VerticalResponsivityManager;\n}(ResponsivityManager));\n\n\n\n/***/ }),\n\n/***/ \"./src/utils/utils.ts\":\n/*!****************************!*\\\n  !*** ./src/utils/utils.ts ***!\n  \\****************************/\n/*! exports provided: unwrap, getRenderedSize, getRenderedStyleSize, doKey2ClickBlur, doKey2ClickUp, doKey2ClickDown, sanitizeEditableContent, Logger, mergeValues, getElementWidth, isContainerVisible, classesToSelector, compareVersions, confirmAction, confirmActionAsync, detectIEOrEdge, detectIEBrowser, loadFileFromBase64, isMobile, isShadowDOM, getElement, isElementVisible, findScrollableParent, scrollElementByChildId, navigateToUrl, wrapUrlForBackgroundImage, createSvg, getIconNameFromProxy, increaseHeightByContent, getOriginalEvent, preventDefaults, findParentByClassNames, getFirstVisibleChild */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4117655__) {\n\n\"use strict\";\n__nested_webpack_require_4117655__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_4117655__.d(__nested_webpack_exports__, \"unwrap\", function() { return unwrap; });\n/* harmony export (binding) */ __nested_webpack_require_4117655__.d(__nested_webpack_exports__, \"getRenderedSize\", function() { return getRenderedSize; });\n/* harmony export (binding) */ __nested_webpack_require_4117655__.d(__nested_webpack_exports__, \"getRenderedStyleSize\", function() { return getRenderedStyleSize; });\n/* harmony export (binding) */ __nested_webpack_require_4117655__.d(__nested_webpack_exports__, \"doKey2ClickBlur\", function() { return doKey2ClickBlur; });\n/* harmony export (binding) */ __nested_webpack_require_4117655__.d(__nested_webpack_exports__, \"doKey2ClickUp\", function() { return doKey2ClickUp; });\n/* harmony export (binding) */ __nested_webpack_require_4117655__.d(__nested_webpack_exports__, \"doKey2ClickDown\", function() { return doKey2ClickDown; });\n/* harmony export (binding) */ __nested_webpack_require_4117655__.d(__nested_webpack_exports__, \"sanitizeEditableContent\", function() { return sanitizeEditableContent; });\n/* harmony export (binding) */ __nested_webpack_require_4117655__.d(__nested_webpack_exports__, \"Logger\", function() { return Logger; });\n/* harmony export (binding) */ __nested_webpack_require_4117655__.d(__nested_webpack_exports__, \"mergeValues\", function() { return mergeValues; });\n/* harmony export (binding) */ __nested_webpack_require_4117655__.d(__nested_webpack_exports__, \"getElementWidth\", function() { return getElementWidth; });\n/* harmony export (binding) */ __nested_webpack_require_4117655__.d(__nested_webpack_exports__, \"isContainerVisible\", function() { return isContainerVisible; });\n/* harmony export (binding) */ __nested_webpack_require_4117655__.d(__nested_webpack_exports__, \"classesToSelector\", function() { return classesToSelector; });\n/* harmony export (binding) */ __nested_webpack_require_4117655__.d(__nested_webpack_exports__, \"compareVersions\", function() { return compareVersions; });\n/* harmony export (binding) */ __nested_webpack_require_4117655__.d(__nested_webpack_exports__, \"confirmAction\", function() { return confirmAction; });\n/* harmony export (binding) */ __nested_webpack_require_4117655__.d(__nested_webpack_exports__, \"confirmActionAsync\", function() { return confirmActionAsync; });\n/* harmony export (binding) */ __nested_webpack_require_4117655__.d(__nested_webpack_exports__, \"detectIEOrEdge\", function() { return detectIEOrEdge; });\n/* harmony export (binding) */ __nested_webpack_require_4117655__.d(__nested_webpack_exports__, \"detectIEBrowser\", function() { return detectIEBrowser; });\n/* harmony export (binding) */ __nested_webpack_require_4117655__.d(__nested_webpack_exports__, \"loadFileFromBase64\", function() { return loadFileFromBase64; });\n/* harmony export (binding) */ __nested_webpack_require_4117655__.d(__nested_webpack_exports__, \"isMobile\", function() { return isMobile; });\n/* harmony export (binding) */ __nested_webpack_require_4117655__.d(__nested_webpack_exports__, \"isShadowDOM\", function() { return isShadowDOM; });\n/* harmony export (binding) */ __nested_webpack_require_4117655__.d(__nested_webpack_exports__, \"getElement\", function() { return getElement; });\n/* harmony export (binding) */ __nested_webpack_require_4117655__.d(__nested_webpack_exports__, \"isElementVisible\", function() { return isElementVisible; });\n/* harmony export (binding) */ __nested_webpack_require_4117655__.d(__nested_webpack_exports__, \"findScrollableParent\", function() { return findScrollableParent; });\n/* harmony export (binding) */ __nested_webpack_require_4117655__.d(__nested_webpack_exports__, \"scrollElementByChildId\", function() { return scrollElementByChildId; });\n/* harmony export (binding) */ __nested_webpack_require_4117655__.d(__nested_webpack_exports__, \"navigateToUrl\", function() { return navigateToUrl; });\n/* harmony export (binding) */ __nested_webpack_require_4117655__.d(__nested_webpack_exports__, \"wrapUrlForBackgroundImage\", function() { return wrapUrlForBackgroundImage; });\n/* harmony export (binding) */ __nested_webpack_require_4117655__.d(__nested_webpack_exports__, \"createSvg\", function() { return createSvg; });\n/* harmony export (binding) */ __nested_webpack_require_4117655__.d(__nested_webpack_exports__, \"getIconNameFromProxy\", function() { return getIconNameFromProxy; });\n/* harmony export (binding) */ __nested_webpack_require_4117655__.d(__nested_webpack_exports__, \"increaseHeightByContent\", function() { return increaseHeightByContent; });\n/* harmony export (binding) */ __nested_webpack_require_4117655__.d(__nested_webpack_exports__, \"getOriginalEvent\", function() { return getOriginalEvent; });\n/* harmony export (binding) */ __nested_webpack_require_4117655__.d(__nested_webpack_exports__, \"preventDefaults\", function() { return preventDefaults; });\n/* harmony export (binding) */ __nested_webpack_require_4117655__.d(__nested_webpack_exports__, \"findParentByClassNames\", function() { return findParentByClassNames; });\n/* harmony export (binding) */ __nested_webpack_require_4117655__.d(__nested_webpack_exports__, \"getFirstVisibleChild\", function() { return getFirstVisibleChild; });\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4117655__(/*! ./../settings */ \"./src/settings.ts\");\n\nfunction compareVersions(a, b) {\n    var regExStrip0 = /(\\.0+)+$/;\n    var segmentsA = a.replace(regExStrip0, \"\").split(\".\");\n    var segmentsB = b.replace(regExStrip0, \"\").split(\".\");\n    var len = Math.min(segmentsA.length, segmentsB.length);\n    for (var i = 0; i < len; i++) {\n        var diff = parseInt(segmentsA[i], 10) - parseInt(segmentsB[i], 10);\n        if (diff) {\n            return diff;\n        }\n    }\n    return segmentsA.length - segmentsB.length;\n}\nfunction confirmAction(message) {\n    if (!!_settings__WEBPACK_IMPORTED_MODULE_0__[\"settings\"] && !!_settings__WEBPACK_IMPORTED_MODULE_0__[\"settings\"].confirmActionFunc)\n        return _settings__WEBPACK_IMPORTED_MODULE_0__[\"settings\"].confirmActionFunc(message);\n    return confirm(message);\n}\nfunction confirmActionAsync(message, funcOnYes, funcOnNo) {\n    var callbackFunc = function (res) {\n        if (res)\n            funcOnYes();\n        else if (!!funcOnNo)\n            funcOnNo();\n    };\n    if (!!_settings__WEBPACK_IMPORTED_MODULE_0__[\"settings\"] && !!_settings__WEBPACK_IMPORTED_MODULE_0__[\"settings\"].confirmActionAsync) {\n        if (_settings__WEBPACK_IMPORTED_MODULE_0__[\"settings\"].confirmActionAsync(message, callbackFunc))\n            return;\n    }\n    callbackFunc(confirmAction(message));\n}\nfunction detectIEBrowser() {\n    if (typeof window === \"undefined\")\n        return false;\n    var ua = window.navigator.userAgent;\n    var oldIe = ua.indexOf(\"MSIE \");\n    var elevenIe = ua.indexOf(\"Trident/\");\n    return oldIe > -1 || elevenIe > -1;\n}\nfunction detectIEOrEdge() {\n    if (typeof window === \"undefined\")\n        return false;\n    if (typeof detectIEOrEdge.isIEOrEdge === \"undefined\") {\n        var ua = window.navigator.userAgent;\n        var msie = ua.indexOf(\"MSIE \");\n        var trident = ua.indexOf(\"Trident/\");\n        var edge = ua.indexOf(\"Edge/\");\n        detectIEOrEdge.isIEOrEdge = edge > 0 || trident > 0 || msie > 0;\n    }\n    return detectIEOrEdge.isIEOrEdge;\n}\nfunction loadFileFromBase64(b64Data, fileName) {\n    try {\n        var byteString = atob(b64Data.split(\",\")[1]);\n        // separate out the mime component\n        var mimeString = b64Data\n            .split(\",\")[0]\n            .split(\":\")[1]\n            .split(\";\")[0];\n        // write the bytes of the string to an ArrayBuffer\n        var ab = new ArrayBuffer(byteString.length);\n        var ia = new Uint8Array(ab);\n        for (var i = 0; i < byteString.length; i++) {\n            ia[i] = byteString.charCodeAt(i);\n        }\n        // write the ArrayBuffer to a blob, and you're done\n        var bb = new Blob([ab], { type: mimeString });\n        if (typeof window !== \"undefined\" &&\n            window.navigator &&\n            window.navigator[\"msSaveBlob\"]) {\n            window.navigator[\"msSaveOrOpenBlob\"](bb, fileName);\n        }\n    }\n    catch (err) { }\n}\nfunction isMobile() {\n    return (typeof window !== \"undefined\" && typeof window.orientation !== \"undefined\");\n}\nvar isShadowDOM = function (rootElement) {\n    return !!rootElement && !!(\"host\" in rootElement && rootElement.host);\n};\nvar getElement = function (element) {\n    var root = _settings__WEBPACK_IMPORTED_MODULE_0__[\"settings\"].environment.root;\n    return typeof element === \"string\" ? root.getElementById(element) : element;\n};\nfunction isElementVisible(element, threshold) {\n    if (threshold === void 0) { threshold = 0; }\n    if (typeof _settings__WEBPACK_IMPORTED_MODULE_0__[\"settings\"].environment === \"undefined\") {\n        return false;\n    }\n    var root = _settings__WEBPACK_IMPORTED_MODULE_0__[\"settings\"].environment.root;\n    var clientHeight = isShadowDOM(root)\n        ? root.host.clientHeight\n        : root.documentElement.clientHeight;\n    var elementRect = element.getBoundingClientRect();\n    var viewHeight = Math.max(clientHeight, window.innerHeight);\n    var topWin = -threshold;\n    var bottomWin = viewHeight + threshold;\n    var topEl = elementRect.top;\n    var bottomEl = elementRect.bottom;\n    var maxTop = Math.max(topWin, topEl);\n    var minBottom = Math.min(bottomWin, bottomEl);\n    return maxTop <= minBottom;\n}\nfunction findScrollableParent(element) {\n    var root = _settings__WEBPACK_IMPORTED_MODULE_0__[\"settings\"].environment.root;\n    if (!element) {\n        return isShadowDOM(root)\n            ? root.host\n            : root.documentElement;\n    }\n    if (element.scrollHeight > element.clientHeight &&\n        (getComputedStyle(element).overflowY === \"scroll\" ||\n            getComputedStyle(element).overflowY === \"auto\")) {\n        return element;\n    }\n    if (element.scrollWidth > element.clientWidth &&\n        (getComputedStyle(element).overflowX === \"scroll\" ||\n            getComputedStyle(element).overflowX === \"auto\")) {\n        return element;\n    }\n    return findScrollableParent(element.parentElement);\n}\nfunction scrollElementByChildId(id) {\n    var environment = _settings__WEBPACK_IMPORTED_MODULE_0__[\"settings\"].environment;\n    if (!environment)\n        return;\n    var root = environment.root;\n    var el = root.getElementById(id);\n    if (!el)\n        return;\n    var scrollableEl = findScrollableParent(el);\n    if (!!scrollableEl) {\n        scrollableEl.dispatchEvent(new CustomEvent(\"scroll\"));\n    }\n}\nfunction navigateToUrl(url) {\n    if (!url || typeof window === \"undefined\" || !window.location)\n        return;\n    window.location.href = url;\n}\nfunction wrapUrlForBackgroundImage(url) {\n    return !!url ? [\"url(\", url, \")\"].join(\"\") : \"\";\n}\nfunction getIconNameFromProxy(iconName) {\n    if (!iconName)\n        return iconName;\n    var proxyName = _settings__WEBPACK_IMPORTED_MODULE_0__[\"settings\"].customIcons[iconName];\n    return !!proxyName ? proxyName : iconName;\n}\nfunction createSvg(size, width, height, iconName, svgElem, title) {\n    if (!svgElem)\n        return;\n    if (size !== \"auto\") {\n        svgElem.style.width = (size || width || 16) + \"px\";\n        svgElem.style.height = (size || height || 16) + \"px\";\n    }\n    var node = svgElem.childNodes[0];\n    var realIconName = getIconNameFromProxy(iconName);\n    node.setAttributeNS(\"http://www.w3.org/1999/xlink\", \"xlink:href\", \"#\" + realIconName);\n    var titleElement = svgElem.getElementsByTagName(\"title\")[0];\n    if (!title) {\n        if (!!titleElement) {\n            svgElem.removeChild(titleElement);\n        }\n        return;\n    }\n    else {\n        if (!titleElement) {\n            titleElement = document.createElementNS(\"http://www.w3.org/2000/svg\", \"title\");\n            svgElem.appendChild(titleElement);\n        }\n    }\n    titleElement.textContent = title;\n}\nfunction unwrap(value) {\n    if (typeof value !== \"function\") {\n        return value;\n    }\n    else {\n        return value();\n    }\n}\n// export function getSize(value: any): number {\n//   if (typeof value === \"number\") {\n//     return value;\n//   }\n//   if (typeof value === \"string\" && value.includes(\"px\")) {\n//     return parseInt(value);\n//   }\n//   if (!!value && typeof value === \"string\" && value.length > 0) {\n//     const lastSymbol: string = value[value.length - 1];\n//     if ((lastSymbol >= \"0\" && lastSymbol <= \"9\") || lastSymbol == \".\") {\n//       try {\n//         const num: number = parseInt(value);\n//         return num;\n//       } catch { }\n//     }\n//   }\n//   return value;\n// }\nfunction getRenderedSize(val) {\n    if (typeof val == \"string\") {\n        if (!isNaN(Number(val))) {\n            return Number(val);\n        }\n        else if (val.includes(\"px\")) {\n            return parseFloat(val);\n        }\n    }\n    if (typeof val == \"number\") {\n        return val;\n    }\n    return undefined;\n}\nfunction getRenderedStyleSize(val) {\n    if (getRenderedSize(val) !== undefined) {\n        return undefined;\n    }\n    return val;\n}\nvar keyFocusedClassName = \"sv-focused--by-key\";\nfunction doKey2ClickBlur(evt) {\n    var element = evt.target;\n    if (!element || !element.classList)\n        return;\n    element.classList.remove(keyFocusedClassName);\n}\nfunction doKey2ClickUp(evt, options) {\n    if (!!evt.target && evt.target[\"contentEditable\"] === \"true\") {\n        return;\n    }\n    var element = evt.target;\n    if (!element)\n        return;\n    var char = evt.which || evt.keyCode;\n    if (char === 9) {\n        if (!!element.classList && !element.classList.contains(keyFocusedClassName)) {\n            element.classList.add(keyFocusedClassName);\n        }\n        return;\n    }\n    if (options) {\n        if (!options.__keyDownReceived)\n            return;\n        options.__keyDownReceived = false;\n    }\n    if (char === 13 || char === 32) {\n        if (element.click)\n            element.click();\n    }\n    else if ((!options || options.processEsc) && char === 27) {\n        if (element.blur)\n            element.blur();\n    }\n}\nfunction doKey2ClickDown(evt, options) {\n    if (options === void 0) { options = { processEsc: true }; }\n    if (options)\n        options.__keyDownReceived = true;\n    if (!!evt.target && evt.target[\"contentEditable\"] === \"true\") {\n        return;\n    }\n    var char = evt.which || evt.keyCode;\n    var supportedCodes = [13, 32];\n    if (options.processEsc) {\n        supportedCodes.push(27);\n    }\n    if (supportedCodes.indexOf(char) !== -1) {\n        evt.preventDefault();\n    }\n}\nfunction increaseHeightByContent(element, getComputedStyle) {\n    if (!element)\n        return;\n    if (!getComputedStyle)\n        getComputedStyle = function (elt) { return window.getComputedStyle(elt); };\n    var style = getComputedStyle(element);\n    element.style.height = \"auto\";\n    element.style.height = (element.scrollHeight + parseFloat(style.borderTopWidth) + parseFloat(style.borderBottomWidth)) + \"px\";\n}\nfunction getOriginalEvent(event) {\n    return event.originalEvent || event;\n}\nfunction preventDefaults(event) {\n    event.preventDefault();\n    event.stopPropagation();\n}\nfunction classesToSelector(str) {\n    var re = /\\s*?([\\w-]+)\\s*?/g;\n    return str.replace(re, \".$1\");\n}\nfunction getElementWidth(el) {\n    return !!getComputedStyle ? Number.parseFloat(getComputedStyle(el).width) : el.offsetWidth;\n}\nfunction isContainerVisible(el) {\n    return !!(el.offsetWidth ||\n        el.offsetHeight ||\n        el.getClientRects().length);\n}\nfunction getFirstVisibleChild(el) {\n    var result;\n    for (var index = 0; index < el.children.length; index++) {\n        if (!result && getComputedStyle(el.children[index]).display !== \"none\") {\n            result = el.children[index];\n        }\n    }\n    return result;\n}\nfunction findParentByClassNames(element, classNames) {\n    if (!!element) {\n        if (classNames.every(function (className) { return !className || element.classList.contains(className); })) {\n            return element;\n        }\n        else {\n            return findParentByClassNames(element.parentElement, classNames);\n        }\n    }\n}\nfunction sanitizeEditableContent(element) {\n    if (window.getSelection && document.createRange && element.childNodes.length > 0) {\n        var selection = document.getSelection();\n        var range = selection.getRangeAt(0);\n        range.setStart(range.endContainer, range.endOffset);\n        range.setEndAfter(element.lastChild);\n        selection.removeAllRanges();\n        selection.addRange(range);\n        var tail_len = selection.toString().replace(/\\n/g, \"\").length;\n        element.innerText = element.innerText.replace(/\\n/g, \"\");\n        range = document.createRange();\n        range.setStart(element.childNodes[0], element.innerText.length - tail_len);\n        range.collapse(true);\n        selection.removeAllRanges();\n        selection.addRange(range);\n    }\n}\nfunction mergeValues(src, dest) {\n    if (!dest || !src)\n        return;\n    if (typeof dest !== \"object\")\n        return;\n    for (var key in src) {\n        var value = src[key];\n        if (!Array.isArray(value) && value && typeof value === \"object\") {\n            if (!dest[key] || typeof dest[key] !== \"object\")\n                dest[key] = {};\n            mergeValues(value, dest[key]);\n        }\n        else {\n            dest[key] = value;\n        }\n    }\n}\nvar Logger = /** @class */ (function () {\n    function Logger() {\n        this._result = \"\";\n    }\n    Logger.prototype.log = function (action) {\n        this._result += \"->\" + action;\n    };\n    Object.defineProperty(Logger.prototype, \"result\", {\n        get: function () {\n            return this._result;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    return Logger;\n}());\n\n\n\n\n/***/ }),\n\n/***/ \"./src/validator.ts\":\n/*!**************************!*\\\n  !*** ./src/validator.ts ***!\n  \\**************************/\n/*! exports provided: ValidatorResult, SurveyValidator, ValidatorRunner, NumericValidator, TextValidator, AnswerCountValidator, RegexValidator, EmailValidator, ExpressionValidator */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4135125__) {\n\n\"use strict\";\n__nested_webpack_require_4135125__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_4135125__.d(__nested_webpack_exports__, \"ValidatorResult\", function() { return ValidatorResult; });\n/* harmony export (binding) */ __nested_webpack_require_4135125__.d(__nested_webpack_exports__, \"SurveyValidator\", function() { return SurveyValidator; });\n/* harmony export (binding) */ __nested_webpack_require_4135125__.d(__nested_webpack_exports__, \"ValidatorRunner\", function() { return ValidatorRunner; });\n/* harmony export (binding) */ __nested_webpack_require_4135125__.d(__nested_webpack_exports__, \"NumericValidator\", function() { return NumericValidator; });\n/* harmony export (binding) */ __nested_webpack_require_4135125__.d(__nested_webpack_exports__, \"TextValidator\", function() { return TextValidator; });\n/* harmony export (binding) */ __nested_webpack_require_4135125__.d(__nested_webpack_exports__, \"AnswerCountValidator\", function() { return AnswerCountValidator; });\n/* harmony export (binding) */ __nested_webpack_require_4135125__.d(__nested_webpack_exports__, \"RegexValidator\", function() { return RegexValidator; });\n/* harmony export (binding) */ __nested_webpack_require_4135125__.d(__nested_webpack_exports__, \"EmailValidator\", function() { return EmailValidator; });\n/* harmony export (binding) */ __nested_webpack_require_4135125__.d(__nested_webpack_exports__, \"ExpressionValidator\", function() { return ExpressionValidator; });\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4135125__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _error__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4135125__(/*! ./error */ \"./src/error.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4135125__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _conditions__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_4135125__(/*! ./conditions */ \"./src/conditions.ts\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_4135125__(/*! ./helpers */ \"./src/helpers.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n\n\n\n\n\nvar ValidatorResult = /** @class */ (function () {\n    function ValidatorResult(value, error) {\n        if (error === void 0) { error = null; }\n        this.value = value;\n        this.error = error;\n    }\n    return ValidatorResult;\n}());\n\n/**\n * Base SurveyJS validator class.\n */\nvar SurveyValidator = /** @class */ (function (_super) {\n    __extends(SurveyValidator, _super);\n    function SurveyValidator() {\n        var _this = _super.call(this) || this;\n        _this.createLocalizableString(\"text\", _this, true);\n        return _this;\n    }\n    SurveyValidator.prototype.getSurvey = function (live) {\n        if (live === void 0) { live = false; }\n        return !!this.errorOwner && !!this.errorOwner[\"getSurvey\"]\n            ? this.errorOwner.getSurvey()\n            : null;\n    };\n    Object.defineProperty(SurveyValidator.prototype, \"text\", {\n        get: function () {\n            return this.getLocalizableStringText(\"text\");\n        },\n        set: function (value) {\n            this.setLocalizableStringText(\"text\", value);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyValidator.prototype, \"isValidateAllValues\", {\n        get: function () {\n            return false;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyValidator.prototype, \"locText\", {\n        get: function () {\n            return this.getLocalizableString(\"text\");\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyValidator.prototype.getErrorText = function (name) {\n        if (this.text)\n            return this.text;\n        return this.getDefaultErrorText(name);\n    };\n    SurveyValidator.prototype.getDefaultErrorText = function (name) {\n        return \"\";\n    };\n    SurveyValidator.prototype.validate = function (value, name, values, properties) {\n        if (name === void 0) { name = null; }\n        if (values === void 0) { values = null; }\n        if (properties === void 0) { properties = null; }\n        return null;\n    };\n    Object.defineProperty(SurveyValidator.prototype, \"isRunning\", {\n        get: function () {\n            return false;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(SurveyValidator.prototype, \"isAsync\", {\n        get: function () {\n            return false;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    SurveyValidator.prototype.getLocale = function () {\n        return !!this.errorOwner ? this.errorOwner.getLocale() : \"\";\n    };\n    SurveyValidator.prototype.getMarkdownHtml = function (text, name) {\n        return !!this.errorOwner\n            ? this.errorOwner.getMarkdownHtml(text, name)\n            : undefined;\n    };\n    SurveyValidator.prototype.getRenderer = function (name) {\n        return !!this.errorOwner ? this.errorOwner.getRenderer(name) : null;\n    };\n    SurveyValidator.prototype.getRendererContext = function (locStr) {\n        return !!this.errorOwner ? this.errorOwner.getRendererContext(locStr) : locStr;\n    };\n    SurveyValidator.prototype.getProcessedText = function (text) {\n        return !!this.errorOwner ? this.errorOwner.getProcessedText(text) : text;\n    };\n    SurveyValidator.prototype.createCustomError = function (name) {\n        var _this = this;\n        var err = new _error__WEBPACK_IMPORTED_MODULE_1__[\"CustomError\"](this.getErrorText(name), this.errorOwner);\n        err.onUpdateErrorTextCallback = (function (err) { return err.text = _this.getErrorText(name); });\n        return err;\n    };\n    SurveyValidator.prototype.toString = function () {\n        var res = this.getType().replace(\"validator\", \"\");\n        if (!!this.text) {\n            res += \", \" + this.text;\n        }\n        return res;\n    };\n    return SurveyValidator;\n}(_base__WEBPACK_IMPORTED_MODULE_0__[\"Base\"]));\n\nvar ValidatorRunner = /** @class */ (function () {\n    function ValidatorRunner() {\n    }\n    ValidatorRunner.prototype.run = function (owner) {\n        var _this = this;\n        var res = [];\n        var values = null;\n        var properties = null;\n        this.prepareAsyncValidators();\n        var asyncResults = [];\n        var validators = owner.getValidators();\n        for (var i = 0; i < validators.length; i++) {\n            var validator = validators[i];\n            if (!values && validator.isValidateAllValues) {\n                values = owner.getDataFilteredValues();\n                properties = owner.getDataFilteredProperties();\n            }\n            if (validator.isAsync) {\n                this.asyncValidators.push(validator);\n                validator.onAsyncCompleted = function (result) {\n                    if (!!result && !!result.error)\n                        asyncResults.push(result.error);\n                    if (!_this.onAsyncCompleted)\n                        return;\n                    for (var i = 0; i < _this.asyncValidators.length; i++) {\n                        if (_this.asyncValidators[i].isRunning)\n                            return;\n                    }\n                    _this.onAsyncCompleted(asyncResults);\n                };\n            }\n        }\n        validators = owner.getValidators();\n        for (var i = 0; i < validators.length; i++) {\n            var validator = validators[i];\n            var validatorResult = validator.validate(owner.validatedValue, owner.getValidatorTitle(), values, properties);\n            if (!!validatorResult && !!validatorResult.error) {\n                res.push(validatorResult.error);\n            }\n        }\n        if (this.asyncValidators.length == 0 && !!this.onAsyncCompleted)\n            this.onAsyncCompleted([]);\n        return res;\n    };\n    ValidatorRunner.prototype.prepareAsyncValidators = function () {\n        if (!!this.asyncValidators) {\n            for (var i = 0; i < this.asyncValidators.length; i++) {\n                this.asyncValidators[i].onAsyncCompleted = null;\n            }\n        }\n        this.asyncValidators = [];\n    };\n    return ValidatorRunner;\n}());\n\n/**\n * Validate numeric values.\n */\nvar NumericValidator = /** @class */ (function (_super) {\n    __extends(NumericValidator, _super);\n    function NumericValidator(minValue, maxValue) {\n        if (minValue === void 0) { minValue = null; }\n        if (maxValue === void 0) { maxValue = null; }\n        var _this = _super.call(this) || this;\n        _this.minValue = minValue;\n        _this.maxValue = maxValue;\n        return _this;\n    }\n    NumericValidator.prototype.getType = function () {\n        return \"numericvalidator\";\n    };\n    NumericValidator.prototype.validate = function (value, name, values, properties) {\n        if (name === void 0) { name = null; }\n        if (values === void 0) { values = null; }\n        if (properties === void 0) { properties = null; }\n        if (this.isValueEmpty(value))\n            return null;\n        if (!_helpers__WEBPACK_IMPORTED_MODULE_4__[\"Helpers\"].isNumber(value)) {\n            return new ValidatorResult(null, new _error__WEBPACK_IMPORTED_MODULE_1__[\"RequreNumericError\"](this.text, this.errorOwner));\n        }\n        var result = new ValidatorResult(_helpers__WEBPACK_IMPORTED_MODULE_4__[\"Helpers\"].getNumber(value));\n        if (this.minValue !== null && this.minValue > result.value) {\n            result.error = this.createCustomError(name);\n            return result;\n        }\n        if (this.maxValue !== null && this.maxValue < result.value) {\n            result.error = this.createCustomError(name);\n            return result;\n        }\n        return typeof value === \"number\" ? null : result;\n    };\n    NumericValidator.prototype.getDefaultErrorText = function (name) {\n        var vName = name ? name : this.getLocalizationString(\"value\");\n        if (this.minValue !== null && this.maxValue !== null) {\n            return this.getLocalizationFormatString(\"numericMinMax\", vName, this.minValue, this.maxValue);\n        }\n        else {\n            if (this.minValue !== null) {\n                return this.getLocalizationFormatString(\"numericMin\", vName, this.minValue);\n            }\n            return this.getLocalizationFormatString(\"numericMax\", vName, this.maxValue);\n        }\n    };\n    Object.defineProperty(NumericValidator.prototype, \"minValue\", {\n        /**\n         * The minValue property.\n         */\n        get: function () {\n            return this.getPropertyValue(\"minValue\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"minValue\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(NumericValidator.prototype, \"maxValue\", {\n        /**\n         * The maxValue property.\n         */\n        get: function () {\n            return this.getPropertyValue(\"maxValue\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"maxValue\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    return NumericValidator;\n}(SurveyValidator));\n\n/**\n * Validate text values.\n */\nvar TextValidator = /** @class */ (function (_super) {\n    __extends(TextValidator, _super);\n    function TextValidator() {\n        return _super.call(this) || this;\n    }\n    TextValidator.prototype.getType = function () {\n        return \"textvalidator\";\n    };\n    TextValidator.prototype.validate = function (value, name, values, properties) {\n        if (name === void 0) { name = null; }\n        if (values === void 0) { values = null; }\n        if (properties === void 0) { properties = null; }\n        if (this.isValueEmpty(value))\n            return null;\n        if (!this.allowDigits) {\n            var reg = /^[A-Za-z\\s\\.]*$/;\n            if (!reg.test(value)) {\n                return new ValidatorResult(null, this.createCustomError(name));\n            }\n        }\n        if (this.minLength > 0 && value.length < this.minLength) {\n            return new ValidatorResult(null, this.createCustomError(name));\n        }\n        if (this.maxLength > 0 && value.length > this.maxLength) {\n            return new ValidatorResult(null, this.createCustomError(name));\n        }\n        return null;\n    };\n    TextValidator.prototype.getDefaultErrorText = function (name) {\n        if (this.minLength > 0 && this.maxLength > 0)\n            return this.getLocalizationFormatString(\"textMinMaxLength\", this.minLength, this.maxLength);\n        if (this.minLength > 0)\n            return this.getLocalizationFormatString(\"textMinLength\", this.minLength);\n        return this.getLocalizationFormatString(\"textMaxLength\", this.maxLength);\n    };\n    Object.defineProperty(TextValidator.prototype, \"minLength\", {\n        /**\n         * The minLength property.\n         */\n        get: function () {\n            return this.getPropertyValue(\"minLength\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"minLength\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(TextValidator.prototype, \"maxLength\", {\n        /**\n         * The maxLength property.\n         */\n        get: function () {\n            return this.getPropertyValue(\"maxLength\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"maxLength\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(TextValidator.prototype, \"allowDigits\", {\n        /**\n         * The allowDigits property.\n         */\n        get: function () {\n            return this.getPropertyValue(\"allowDigits\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"allowDigits\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    return TextValidator;\n}(SurveyValidator));\n\n/**\n * Validates the number of answers.\n */\nvar AnswerCountValidator = /** @class */ (function (_super) {\n    __extends(AnswerCountValidator, _super);\n    function AnswerCountValidator(minCount, maxCount) {\n        if (minCount === void 0) { minCount = null; }\n        if (maxCount === void 0) { maxCount = null; }\n        var _this = _super.call(this) || this;\n        _this.minCount = minCount;\n        _this.maxCount = maxCount;\n        return _this;\n    }\n    AnswerCountValidator.prototype.getType = function () {\n        return \"answercountvalidator\";\n    };\n    AnswerCountValidator.prototype.validate = function (value, name, values, properties) {\n        if (name === void 0) { name = null; }\n        if (values === void 0) { values = null; }\n        if (properties === void 0) { properties = null; }\n        if (value == null || value.constructor != Array)\n            return null;\n        var count = value.length;\n        if (count == 0)\n            return null;\n        if (this.minCount && count < this.minCount) {\n            return new ValidatorResult(null, this.createCustomError(this.getLocalizationFormatString(\"minSelectError\", this.minCount)));\n        }\n        if (this.maxCount && count > this.maxCount) {\n            return new ValidatorResult(null, this.createCustomError(this.getLocalizationFormatString(\"maxSelectError\", this.maxCount)));\n        }\n        return null;\n    };\n    AnswerCountValidator.prototype.getDefaultErrorText = function (name) {\n        return name;\n    };\n    Object.defineProperty(AnswerCountValidator.prototype, \"minCount\", {\n        /**\n         * The minCount property.\n         */\n        get: function () {\n            return this.getPropertyValue(\"minCount\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"minCount\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(AnswerCountValidator.prototype, \"maxCount\", {\n        /**\n         * The maxCount property.\n         */\n        get: function () {\n            return this.getPropertyValue(\"maxCount\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"maxCount\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    return AnswerCountValidator;\n}(SurveyValidator));\n\n/**\n * Use it to validate the text by regular expressions.\n *\n * [View Demo](https://surveyjs.io/form-library/examples/javascript-form-validation/ (linkStyle))\n */\nvar RegexValidator = /** @class */ (function (_super) {\n    __extends(RegexValidator, _super);\n    function RegexValidator(regex) {\n        if (regex === void 0) { regex = null; }\n        var _this = _super.call(this) || this;\n        _this.regex = regex;\n        return _this;\n    }\n    RegexValidator.prototype.getType = function () {\n        return \"regexvalidator\";\n    };\n    RegexValidator.prototype.validate = function (value, name, values, properties) {\n        if (name === void 0) { name = null; }\n        if (values === void 0) { values = null; }\n        if (properties === void 0) { properties = null; }\n        if (!this.regex || this.isValueEmpty(value))\n            return null;\n        var re = new RegExp(this.regex);\n        if (Array.isArray(value)) {\n            for (var i = 0; i < value.length; i++) {\n                var res = this.hasError(re, value[i], name);\n                if (res)\n                    return res;\n            }\n        }\n        return this.hasError(re, value, name);\n    };\n    RegexValidator.prototype.hasError = function (re, value, name) {\n        if (re.test(value))\n            return null;\n        return new ValidatorResult(value, this.createCustomError(name));\n    };\n    Object.defineProperty(RegexValidator.prototype, \"regex\", {\n        /**\n         * The regex property.\n         */\n        get: function () {\n            return this.getPropertyValue(\"regex\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"regex\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    return RegexValidator;\n}(SurveyValidator));\n\n/**\n * Validate e-mail address in the text input\n */\nvar EmailValidator = /** @class */ (function (_super) {\n    __extends(EmailValidator, _super);\n    function EmailValidator() {\n        var _this = _super.call(this) || this;\n        _this.re = /^(([^<>()\\[\\]\\.,;:\\s@\\\"]+(\\.[^<>()\\[\\]\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@(([^<>()=[\\]\\.,;:\\s@\\\"]+\\.)+[^<>()=[\\]\\.,;:\\s@\\\"]{2,})$/i;\n        return _this;\n    }\n    EmailValidator.prototype.getType = function () {\n        return \"emailvalidator\";\n    };\n    EmailValidator.prototype.validate = function (value, name, values, properties) {\n        if (name === void 0) { name = null; }\n        if (values === void 0) { values = null; }\n        if (properties === void 0) { properties = null; }\n        if (!value)\n            return null;\n        if (this.re.test(value))\n            return null;\n        return new ValidatorResult(value, this.createCustomError(name));\n    };\n    EmailValidator.prototype.getDefaultErrorText = function (name) {\n        return this.getLocalizationString(\"invalidEmail\");\n    };\n    return EmailValidator;\n}(SurveyValidator));\n\n/**\n * Show error if expression returns false\n */\nvar ExpressionValidator = /** @class */ (function (_super) {\n    __extends(ExpressionValidator, _super);\n    function ExpressionValidator(expression) {\n        if (expression === void 0) { expression = null; }\n        var _this = _super.call(this) || this;\n        _this.conditionRunner = null;\n        _this.isRunningValue = false;\n        _this.expression = expression;\n        return _this;\n    }\n    ExpressionValidator.prototype.getType = function () {\n        return \"expressionvalidator\";\n    };\n    Object.defineProperty(ExpressionValidator.prototype, \"isValidateAllValues\", {\n        get: function () {\n            return true;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(ExpressionValidator.prototype, \"isAsync\", {\n        get: function () {\n            if (!this.ensureConditionRunner())\n                return false;\n            return this.conditionRunner.isAsync;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(ExpressionValidator.prototype, \"isRunning\", {\n        get: function () {\n            return this.isRunningValue;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    ExpressionValidator.prototype.validate = function (value, name, values, properties) {\n        var _this = this;\n        if (name === void 0) { name = null; }\n        if (values === void 0) { values = null; }\n        if (properties === void 0) { properties = null; }\n        if (!this.ensureConditionRunner())\n            return null;\n        this.conditionRunner.onRunComplete = function (res) {\n            _this.isRunningValue = false;\n            if (!!_this.onAsyncCompleted) {\n                _this.onAsyncCompleted(_this.generateError(res, value, name));\n            }\n        };\n        this.isRunningValue = true;\n        var res = this.conditionRunner.run(values, properties);\n        if (this.conditionRunner.isAsync)\n            return null;\n        this.isRunningValue = false;\n        return this.generateError(res, value, name);\n    };\n    ExpressionValidator.prototype.generateError = function (res, value, name) {\n        if (!res) {\n            return new ValidatorResult(value, this.createCustomError(name));\n        }\n        return null;\n    };\n    ExpressionValidator.prototype.getDefaultErrorText = function (name) {\n        return this.getLocalizationFormatString(\"invalidExpression\", this.expression);\n    };\n    ExpressionValidator.prototype.ensureConditionRunner = function () {\n        if (!!this.conditionRunner) {\n            this.conditionRunner.expression = this.expression;\n            return true;\n        }\n        if (!this.expression)\n            return false;\n        this.conditionRunner = new _conditions__WEBPACK_IMPORTED_MODULE_3__[\"ConditionRunner\"](this.expression);\n        return true;\n    };\n    Object.defineProperty(ExpressionValidator.prototype, \"expression\", {\n        /**\n         * The expression property.\n         */\n        get: function () {\n            return this.getPropertyValue(\"expression\");\n        },\n        set: function (val) {\n            this.setPropertyValue(\"expression\", val);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    return ExpressionValidator;\n}(SurveyValidator));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"Serializer\"].addClass(\"surveyvalidator\", [\n    { name: \"text\", serializationProperty: \"locText\" },\n]);\n_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"Serializer\"].addClass(\"numericvalidator\", [\"minValue:number\", \"maxValue:number\"], function () {\n    return new NumericValidator();\n}, \"surveyvalidator\");\n_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"Serializer\"].addClass(\"textvalidator\", [{ name: \"minLength:number\", default: 0 },\n    { name: \"maxLength:number\", default: 0 },\n    { name: \"allowDigits:boolean\", default: true }], function () {\n    return new TextValidator();\n}, \"surveyvalidator\");\n_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"Serializer\"].addClass(\"answercountvalidator\", [\"minCount:number\", \"maxCount:number\"], function () {\n    return new AnswerCountValidator();\n}, \"surveyvalidator\");\n_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"Serializer\"].addClass(\"regexvalidator\", [\"regex\"], function () {\n    return new RegexValidator();\n}, \"surveyvalidator\");\n_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"Serializer\"].addClass(\"emailvalidator\", [], function () {\n    return new EmailValidator();\n}, \"surveyvalidator\");\n_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"Serializer\"].addClass(\"expressionvalidator\", [\"expression:condition\"], function () {\n    return new ExpressionValidator();\n}, \"surveyvalidator\");\n\n\n/***/ }),\n\n/***/ \"./src/vue/base.ts\":\n/*!*************************!*\\\n  !*** ./src/vue/base.ts ***!\n  \\*************************/\n/*! exports provided: BaseVue, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4159732__) {\n\n\"use strict\";\n__nested_webpack_require_4159732__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_4159732__.d(__nested_webpack_exports__, \"BaseVue\", function() { return BaseVue; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4159732__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_4159732__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4159732__(/*! survey-core */ \"./src/entries/core.ts\");\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4159732__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __assign = ( false) || function () {\n    __assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar BaseVue = /** @class */ (function (_super) {\n    __extends(BaseVue, _super);\n    function BaseVue() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    BaseVue.prototype.getModel = function () {\n        return null;\n    };\n    BaseVue.prototype.setIsRendering = function (val) {\n        var model = this.getModel();\n        if (!!model) {\n            model.isRendering = val;\n        }\n    };\n    BaseVue.prototype.getIsRendering = function () {\n        var model = this.getModel();\n        return !!model && !!model.isRendering;\n    };\n    BaseVue.prototype.onMounted = function () { };\n    BaseVue.prototype.onUpdated = function () { };\n    BaseVue.prototype.onDestroyed = function () { };\n    BaseVue.prototype.onCreated = function () {\n        var _this = this;\n        var model = this.getModel();\n        if (!model)\n            return;\n        model.iteratePropertiesHash(function (propertiesHash, name) {\n            vue__WEBPACK_IMPORTED_MODULE_0___default.a.util.defineReactive(propertiesHash, name, propertiesHash[name]);\n        });\n        model.getPropertyValueCoreHandler = function (propertiesHash, name) {\n            if (!propertiesHash.hasOwnProperty(name)) {\n                vue__WEBPACK_IMPORTED_MODULE_0___default.a.util.defineReactive(propertiesHash, name, propertiesHash[name]);\n            }\n            return propertiesHash[name];\n        };\n        model.setPropertyValueCoreHandler = function (propertiesHash, name, val) {\n            if (!propertiesHash.hasOwnProperty(name) || !_this.getIsRendering())\n                vue__WEBPACK_IMPORTED_MODULE_0___default.a.set(propertiesHash, name, val);\n            else\n                propertiesHash[name] = val;\n        };\n    };\n    BaseVue.prototype.created = function () {\n        this.onCreated();\n    };\n    BaseVue.prototype.beforeMount = function () {\n        this.setIsRendering(true);\n    };\n    BaseVue.prototype.beforeUpdate = function () {\n        this.setIsRendering(true);\n    };\n    BaseVue.prototype.mounted = function () {\n        this.setIsRendering(false);\n        this.onMounted();\n    };\n    BaseVue.prototype.updated = function () {\n        this.setIsRendering(false);\n        this.onUpdated();\n    };\n    BaseVue.prototype.destroyed = function () {\n        this.onDestroyed();\n    };\n    BaseVue = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_2__[\"Component\"]\n    ], BaseVue);\n    return BaseVue;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.directive(\"key2click\", {\n    // When the bound element is inserted into the DOM...\n    inserted: function (el, binding) {\n        var options = __assign({}, binding.value) || { processEsc: true };\n        if (!options.disableTabStop)\n            el.tabIndex = 0;\n        el.addEventListener(\"keyup\", function (evt) {\n            evt.preventDefault();\n            evt.stopPropagation();\n            Object(survey_core__WEBPACK_IMPORTED_MODULE_1__[\"doKey2ClickUp\"])(evt, options);\n            return false;\n        });\n        el.addEventListener(\"keydown\", function (evt) {\n            Object(survey_core__WEBPACK_IMPORTED_MODULE_1__[\"doKey2ClickDown\"])(evt, options);\n        });\n        el.addEventListener(\"blur\", function (evt) {\n            Object(survey_core__WEBPACK_IMPORTED_MODULE_1__[\"doKey2ClickBlur\"])(evt);\n        });\n    }\n});\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (BaseVue);\n\n\n/***/ }),\n\n/***/ \"./src/vue/boolean-checkbox.vue\":\n/*!**************************************!*\\\n  !*** ./src/vue/boolean-checkbox.vue ***!\n  \\**************************************/\n/*! exports provided: BooleanCheckbox, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4165976__) {\n\n\"use strict\";\n__nested_webpack_require_4165976__.r(__nested_webpack_exports__);\n/* harmony import */ var _boolean_checkbox_vue_vue_type_template_id_5ccd340a___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4165976__(/*! ./boolean-checkbox.vue?vue&type=template&id=5ccd340a& */ \"./src/vue/boolean-checkbox.vue?vue&type=template&id=5ccd340a&\");\n/* harmony import */ var _boolean_checkbox_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4165976__(/*! ./boolean-checkbox.vue?vue&type=script&lang=ts& */ \"./src/vue/boolean-checkbox.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4165976__.d(__nested_webpack_exports__, \"BooleanCheckbox\", function() { return _boolean_checkbox_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"BooleanCheckbox\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4165976__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _boolean_checkbox_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _boolean_checkbox_vue_vue_type_template_id_5ccd340a___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _boolean_checkbox_vue_vue_type_template_id_5ccd340a___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/boolean-checkbox.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/boolean-checkbox.vue?vue&type=script&lang=ts&\":\n/*!***************************************************************!*\\\n  !*** ./src/vue/boolean-checkbox.vue?vue&type=script&lang=ts& ***!\n  \\***************************************************************/\n/*! exports provided: default, BooleanCheckbox */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4168082__) {\n\n\"use strict\";\n__nested_webpack_require_4168082__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_boolean_checkbox_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4168082__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./boolean-checkbox.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/boolean-checkbox.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4168082__.d(__nested_webpack_exports__, \"BooleanCheckbox\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_boolean_checkbox_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"BooleanCheckbox\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_boolean_checkbox_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/boolean-checkbox.vue?vue&type=template&id=5ccd340a&\":\n/*!*********************************************************************!*\\\n  !*** ./src/vue/boolean-checkbox.vue?vue&type=template&id=5ccd340a& ***!\n  \\*********************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4169620__) {\n\n\"use strict\";\n__nested_webpack_require_4169620__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_boolean_checkbox_vue_vue_type_template_id_5ccd340a___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4169620__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./boolean-checkbox.vue?vue&type=template&id=5ccd340a& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/boolean-checkbox.vue?vue&type=template&id=5ccd340a&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4169620__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_boolean_checkbox_vue_vue_type_template_id_5ccd340a___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4169620__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_boolean_checkbox_vue_vue_type_template_id_5ccd340a___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/boolean-radio-item.vue\":\n/*!****************************************!*\\\n  !*** ./src/vue/boolean-radio-item.vue ***!\n  \\****************************************/\n/*! exports provided: BooleanRadioItem, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4171286__) {\n\n\"use strict\";\n__nested_webpack_require_4171286__.r(__nested_webpack_exports__);\n/* harmony import */ var _boolean_radio_item_vue_vue_type_template_id_7889d5a8___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4171286__(/*! ./boolean-radio-item.vue?vue&type=template&id=7889d5a8& */ \"./src/vue/boolean-radio-item.vue?vue&type=template&id=7889d5a8&\");\n/* harmony import */ var _boolean_radio_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4171286__(/*! ./boolean-radio-item.vue?vue&type=script&lang=ts& */ \"./src/vue/boolean-radio-item.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4171286__.d(__nested_webpack_exports__, \"BooleanRadioItem\", function() { return _boolean_radio_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"BooleanRadioItem\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4171286__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _boolean_radio_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _boolean_radio_item_vue_vue_type_template_id_7889d5a8___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _boolean_radio_item_vue_vue_type_template_id_7889d5a8___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/boolean-radio-item.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/boolean-radio-item.vue?vue&type=script&lang=ts&\":\n/*!*****************************************************************!*\\\n  !*** ./src/vue/boolean-radio-item.vue?vue&type=script&lang=ts& ***!\n  \\*****************************************************************/\n/*! exports provided: default, BooleanRadioItem */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4173425__) {\n\n\"use strict\";\n__nested_webpack_require_4173425__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_boolean_radio_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4173425__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./boolean-radio-item.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/boolean-radio-item.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4173425__.d(__nested_webpack_exports__, \"BooleanRadioItem\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_boolean_radio_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"BooleanRadioItem\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_boolean_radio_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/boolean-radio-item.vue?vue&type=template&id=7889d5a8&\":\n/*!***********************************************************************!*\\\n  !*** ./src/vue/boolean-radio-item.vue?vue&type=template&id=7889d5a8& ***!\n  \\***********************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4174983__) {\n\n\"use strict\";\n__nested_webpack_require_4174983__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_boolean_radio_item_vue_vue_type_template_id_7889d5a8___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4174983__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./boolean-radio-item.vue?vue&type=template&id=7889d5a8& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/boolean-radio-item.vue?vue&type=template&id=7889d5a8&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4174983__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_boolean_radio_item_vue_vue_type_template_id_7889d5a8___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4174983__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_boolean_radio_item_vue_vue_type_template_id_7889d5a8___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/boolean-radio.vue\":\n/*!***********************************!*\\\n  !*** ./src/vue/boolean-radio.vue ***!\n  \\***********************************/\n/*! exports provided: BooleanRadio, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4176635__) {\n\n\"use strict\";\n__nested_webpack_require_4176635__.r(__nested_webpack_exports__);\n/* harmony import */ var _boolean_radio_vue_vue_type_template_id_4a238f78___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4176635__(/*! ./boolean-radio.vue?vue&type=template&id=4a238f78& */ \"./src/vue/boolean-radio.vue?vue&type=template&id=4a238f78&\");\n/* harmony import */ var _boolean_radio_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4176635__(/*! ./boolean-radio.vue?vue&type=script&lang=ts& */ \"./src/vue/boolean-radio.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4176635__.d(__nested_webpack_exports__, \"BooleanRadio\", function() { return _boolean_radio_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"BooleanRadio\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4176635__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _boolean_radio_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _boolean_radio_vue_vue_type_template_id_4a238f78___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _boolean_radio_vue_vue_type_template_id_4a238f78___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/boolean-radio.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/boolean-radio.vue?vue&type=script&lang=ts&\":\n/*!************************************************************!*\\\n  !*** ./src/vue/boolean-radio.vue?vue&type=script&lang=ts& ***!\n  \\************************************************************/\n/*! exports provided: default, BooleanRadio */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4178687__) {\n\n\"use strict\";\n__nested_webpack_require_4178687__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_boolean_radio_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4178687__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./boolean-radio.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/boolean-radio.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4178687__.d(__nested_webpack_exports__, \"BooleanRadio\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_boolean_radio_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"BooleanRadio\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_boolean_radio_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/boolean-radio.vue?vue&type=template&id=4a238f78&\":\n/*!******************************************************************!*\\\n  !*** ./src/vue/boolean-radio.vue?vue&type=template&id=4a238f78& ***!\n  \\******************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4180192__) {\n\n\"use strict\";\n__nested_webpack_require_4180192__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_boolean_radio_vue_vue_type_template_id_4a238f78___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4180192__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./boolean-radio.vue?vue&type=template&id=4a238f78& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/boolean-radio.vue?vue&type=template&id=4a238f78&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4180192__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_boolean_radio_vue_vue_type_template_id_4a238f78___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4180192__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_boolean_radio_vue_vue_type_template_id_4a238f78___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/boolean-switch.vue\":\n/*!************************************!*\\\n  !*** ./src/vue/boolean-switch.vue ***!\n  \\************************************/\n/*! exports provided: BooleanSwitch, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4181824__) {\n\n\"use strict\";\n__nested_webpack_require_4181824__.r(__nested_webpack_exports__);\n/* harmony import */ var _boolean_switch_vue_vue_type_template_id_70e4aebb___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4181824__(/*! ./boolean-switch.vue?vue&type=template&id=70e4aebb& */ \"./src/vue/boolean-switch.vue?vue&type=template&id=70e4aebb&\");\n/* harmony import */ var _boolean_switch_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4181824__(/*! ./boolean-switch.vue?vue&type=script&lang=ts& */ \"./src/vue/boolean-switch.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4181824__.d(__nested_webpack_exports__, \"BooleanSwitch\", function() { return _boolean_switch_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"BooleanSwitch\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4181824__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _boolean_switch_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _boolean_switch_vue_vue_type_template_id_70e4aebb___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _boolean_switch_vue_vue_type_template_id_70e4aebb___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/boolean-switch.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/boolean-switch.vue?vue&type=script&lang=ts&\":\n/*!*************************************************************!*\\\n  !*** ./src/vue/boolean-switch.vue?vue&type=script&lang=ts& ***!\n  \\*************************************************************/\n/*! exports provided: default, BooleanSwitch */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4183894__) {\n\n\"use strict\";\n__nested_webpack_require_4183894__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_boolean_switch_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4183894__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./boolean-switch.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/boolean-switch.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4183894__.d(__nested_webpack_exports__, \"BooleanSwitch\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_boolean_switch_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"BooleanSwitch\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_boolean_switch_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/boolean-switch.vue?vue&type=template&id=70e4aebb&\":\n/*!*******************************************************************!*\\\n  !*** ./src/vue/boolean-switch.vue?vue&type=template&id=70e4aebb& ***!\n  \\*******************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4185410__) {\n\n\"use strict\";\n__nested_webpack_require_4185410__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_boolean_switch_vue_vue_type_template_id_70e4aebb___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4185410__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./boolean-switch.vue?vue&type=template&id=70e4aebb& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/boolean-switch.vue?vue&type=template&id=70e4aebb&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4185410__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_boolean_switch_vue_vue_type_template_id_70e4aebb___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4185410__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_boolean_switch_vue_vue_type_template_id_70e4aebb___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/boolean.ts\":\n/*!****************************!*\\\n  !*** ./src/vue/boolean.ts ***!\n  \\****************************/\n/*! exports provided: Boolean */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4187000__) {\n\n\"use strict\";\n__nested_webpack_require_4187000__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_4187000__.d(__nested_webpack_exports__, \"Boolean\", function() { return Boolean; });\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4187000__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4187000__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar Boolean = /** @class */ (function (_super) {\n    __extends(Boolean, _super);\n    function Boolean() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Boolean.prototype.onSwitchClick = function (event) {\n        this.question.onSwitchClickModel(event);\n    };\n    Boolean.prototype.onLabelClick = function (event, value) {\n        this.question.onLabelClick(event, value);\n    };\n    Boolean = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Component\"]\n    ], Boolean);\n    return Boolean;\n}(_question__WEBPACK_IMPORTED_MODULE_1__[\"QuestionVue\"]));\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/buttongroup.vue\":\n/*!*********************************!*\\\n  !*** ./src/vue/buttongroup.vue ***!\n  \\*********************************/\n/*! exports provided: ButtonGroup, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4189741__) {\n\n\"use strict\";\n__nested_webpack_require_4189741__.r(__nested_webpack_exports__);\n/* harmony import */ var _buttongroup_vue_vue_type_template_id_6bdc7abb___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4189741__(/*! ./buttongroup.vue?vue&type=template&id=6bdc7abb& */ \"./src/vue/buttongroup.vue?vue&type=template&id=6bdc7abb&\");\n/* harmony import */ var _buttongroup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4189741__(/*! ./buttongroup.vue?vue&type=script&lang=ts& */ \"./src/vue/buttongroup.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4189741__.d(__nested_webpack_exports__, \"ButtonGroup\", function() { return _buttongroup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"ButtonGroup\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4189741__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _buttongroup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _buttongroup_vue_vue_type_template_id_6bdc7abb___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _buttongroup_vue_vue_type_template_id_6bdc7abb___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/buttongroup.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/buttongroup.vue?vue&type=script&lang=ts&\":\n/*!**********************************************************!*\\\n  !*** ./src/vue/buttongroup.vue?vue&type=script&lang=ts& ***!\n  \\**********************************************************/\n/*! exports provided: default, ButtonGroup */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4191760__) {\n\n\"use strict\";\n__nested_webpack_require_4191760__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_buttongroup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4191760__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./buttongroup.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/buttongroup.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4191760__.d(__nested_webpack_exports__, \"ButtonGroup\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_buttongroup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"ButtonGroup\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_buttongroup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/buttongroup.vue?vue&type=template&id=6bdc7abb&\":\n/*!****************************************************************!*\\\n  !*** ./src/vue/buttongroup.vue?vue&type=template&id=6bdc7abb& ***!\n  \\****************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4193245__) {\n\n\"use strict\";\n__nested_webpack_require_4193245__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_buttongroup_vue_vue_type_template_id_6bdc7abb___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4193245__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./buttongroup.vue?vue&type=template&id=6bdc7abb& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/buttongroup.vue?vue&type=template&id=6bdc7abb&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4193245__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_buttongroup_vue_vue_type_template_id_6bdc7abb___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4193245__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_buttongroup_vue_vue_type_template_id_6bdc7abb___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/buttongroupitem.vue\":\n/*!*************************************!*\\\n  !*** ./src/vue/buttongroupitem.vue ***!\n  \\*************************************/\n/*! exports provided: ButtonGroupItem, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4194873__) {\n\n\"use strict\";\n__nested_webpack_require_4194873__.r(__nested_webpack_exports__);\n/* harmony import */ var _buttongroupitem_vue_vue_type_template_id_4bad6ace___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4194873__(/*! ./buttongroupitem.vue?vue&type=template&id=4bad6ace& */ \"./src/vue/buttongroupitem.vue?vue&type=template&id=4bad6ace&\");\n/* harmony import */ var _buttongroupitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4194873__(/*! ./buttongroupitem.vue?vue&type=script&lang=ts& */ \"./src/vue/buttongroupitem.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4194873__.d(__nested_webpack_exports__, \"ButtonGroupItem\", function() { return _buttongroupitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"ButtonGroupItem\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4194873__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _buttongroupitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _buttongroupitem_vue_vue_type_template_id_4bad6ace___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _buttongroupitem_vue_vue_type_template_id_4bad6ace___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/buttongroupitem.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/buttongroupitem.vue?vue&type=script&lang=ts&\":\n/*!**************************************************************!*\\\n  !*** ./src/vue/buttongroupitem.vue?vue&type=script&lang=ts& ***!\n  \\**************************************************************/\n/*! exports provided: default, ButtonGroupItem */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4196964__) {\n\n\"use strict\";\n__nested_webpack_require_4196964__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_buttongroupitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4196964__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./buttongroupitem.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/buttongroupitem.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4196964__.d(__nested_webpack_exports__, \"ButtonGroupItem\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_buttongroupitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"ButtonGroupItem\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_buttongroupitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/buttongroupitem.vue?vue&type=template&id=4bad6ace&\":\n/*!********************************************************************!*\\\n  !*** ./src/vue/buttongroupitem.vue?vue&type=template&id=4bad6ace& ***!\n  \\********************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4198493__) {\n\n\"use strict\";\n__nested_webpack_require_4198493__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_buttongroupitem_vue_vue_type_template_id_4bad6ace___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4198493__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./buttongroupitem.vue?vue&type=template&id=4bad6ace& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/buttongroupitem.vue?vue&type=template&id=4bad6ace&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4198493__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_buttongroupitem_vue_vue_type_template_id_4bad6ace___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4198493__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_buttongroupitem_vue_vue_type_template_id_4bad6ace___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/checkbox.vue\":\n/*!******************************!*\\\n  !*** ./src/vue/checkbox.vue ***!\n  \\******************************/\n/*! exports provided: Checkbox, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4200106__) {\n\n\"use strict\";\n__nested_webpack_require_4200106__.r(__nested_webpack_exports__);\n/* harmony import */ var _checkbox_vue_vue_type_template_id_cad276f6___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4200106__(/*! ./checkbox.vue?vue&type=template&id=cad276f6& */ \"./src/vue/checkbox.vue?vue&type=template&id=cad276f6&\");\n/* harmony import */ var _checkbox_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4200106__(/*! ./checkbox.vue?vue&type=script&lang=ts& */ \"./src/vue/checkbox.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4200106__.d(__nested_webpack_exports__, \"Checkbox\", function() { return _checkbox_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Checkbox\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4200106__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _checkbox_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _checkbox_vue_vue_type_template_id_cad276f6___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _checkbox_vue_vue_type_template_id_cad276f6___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/checkbox.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/checkbox.vue?vue&type=script&lang=ts&\":\n/*!*******************************************************!*\\\n  !*** ./src/vue/checkbox.vue?vue&type=script&lang=ts& ***!\n  \\*******************************************************/\n/*! exports provided: default, Checkbox */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4202071__) {\n\n\"use strict\";\n__nested_webpack_require_4202071__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_checkbox_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4202071__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./checkbox.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/checkbox.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4202071__.d(__nested_webpack_exports__, \"Checkbox\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_checkbox_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Checkbox\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_checkbox_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/checkbox.vue?vue&type=template&id=cad276f6&\":\n/*!*************************************************************!*\\\n  !*** ./src/vue/checkbox.vue?vue&type=template&id=cad276f6& ***!\n  \\*************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4203523__) {\n\n\"use strict\";\n__nested_webpack_require_4203523__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_checkbox_vue_vue_type_template_id_cad276f6___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4203523__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./checkbox.vue?vue&type=template&id=cad276f6& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/checkbox.vue?vue&type=template&id=cad276f6&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4203523__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_checkbox_vue_vue_type_template_id_cad276f6___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4203523__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_checkbox_vue_vue_type_template_id_cad276f6___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/checkboxitem.vue\":\n/*!**********************************!*\\\n  !*** ./src/vue/checkboxitem.vue ***!\n  \\**********************************/\n/*! exports provided: CheckboxItem, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4205121__) {\n\n\"use strict\";\n__nested_webpack_require_4205121__.r(__nested_webpack_exports__);\n/* harmony import */ var _checkboxitem_vue_vue_type_template_id_c58c80d0___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4205121__(/*! ./checkboxitem.vue?vue&type=template&id=c58c80d0& */ \"./src/vue/checkboxitem.vue?vue&type=template&id=c58c80d0&\");\n/* harmony import */ var _checkboxitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4205121__(/*! ./checkboxitem.vue?vue&type=script&lang=ts& */ \"./src/vue/checkboxitem.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4205121__.d(__nested_webpack_exports__, \"CheckboxItem\", function() { return _checkboxitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"CheckboxItem\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4205121__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _checkboxitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _checkboxitem_vue_vue_type_template_id_c58c80d0___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _checkboxitem_vue_vue_type_template_id_c58c80d0___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/checkboxitem.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/checkboxitem.vue?vue&type=script&lang=ts&\":\n/*!***********************************************************!*\\\n  !*** ./src/vue/checkboxitem.vue?vue&type=script&lang=ts& ***!\n  \\***********************************************************/\n/*! exports provided: default, CheckboxItem */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4207158__) {\n\n\"use strict\";\n__nested_webpack_require_4207158__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_checkboxitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4207158__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./checkboxitem.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/checkboxitem.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4207158__.d(__nested_webpack_exports__, \"CheckboxItem\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_checkboxitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"CheckboxItem\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_checkboxitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/checkboxitem.vue?vue&type=template&id=c58c80d0&\":\n/*!*****************************************************************!*\\\n  !*** ./src/vue/checkboxitem.vue?vue&type=template&id=c58c80d0& ***!\n  \\*****************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4208654__) {\n\n\"use strict\";\n__nested_webpack_require_4208654__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_checkboxitem_vue_vue_type_template_id_c58c80d0___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4208654__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./checkboxitem.vue?vue&type=template&id=c58c80d0& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/checkboxitem.vue?vue&type=template&id=c58c80d0&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4208654__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_checkboxitem_vue_vue_type_template_id_c58c80d0___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4208654__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_checkboxitem_vue_vue_type_template_id_c58c80d0___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/comment.vue\":\n/*!*****************************!*\\\n  !*** ./src/vue/comment.vue ***!\n  \\*****************************/\n/*! exports provided: Comment, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4210247__) {\n\n\"use strict\";\n__nested_webpack_require_4210247__.r(__nested_webpack_exports__);\n/* harmony import */ var _comment_vue_vue_type_template_id_099c2c8d___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4210247__(/*! ./comment.vue?vue&type=template&id=099c2c8d& */ \"./src/vue/comment.vue?vue&type=template&id=099c2c8d&\");\n/* harmony import */ var _comment_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4210247__(/*! ./comment.vue?vue&type=script&lang=ts& */ \"./src/vue/comment.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4210247__.d(__nested_webpack_exports__, \"Comment\", function() { return _comment_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Comment\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4210247__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _comment_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _comment_vue_vue_type_template_id_099c2c8d___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _comment_vue_vue_type_template_id_099c2c8d___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/comment.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/comment.vue?vue&type=script&lang=ts&\":\n/*!******************************************************!*\\\n  !*** ./src/vue/comment.vue?vue&type=script&lang=ts& ***!\n  \\******************************************************/\n/*! exports provided: default, Comment */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4212194__) {\n\n\"use strict\";\n__nested_webpack_require_4212194__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_comment_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4212194__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./comment.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/comment.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4212194__.d(__nested_webpack_exports__, \"Comment\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_comment_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Comment\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_comment_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/comment.vue?vue&type=template&id=099c2c8d&\":\n/*!************************************************************!*\\\n  !*** ./src/vue/comment.vue?vue&type=template&id=099c2c8d& ***!\n  \\************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4213635__) {\n\n\"use strict\";\n__nested_webpack_require_4213635__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_comment_vue_vue_type_template_id_099c2c8d___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4213635__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./comment.vue?vue&type=template&id=099c2c8d& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/comment.vue?vue&type=template&id=099c2c8d&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4213635__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_comment_vue_vue_type_template_id_099c2c8d___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4213635__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_comment_vue_vue_type_template_id_099c2c8d___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/action-bar/action-bar-item-dropdown.vue\":\n/*!********************************************************************!*\\\n  !*** ./src/vue/components/action-bar/action-bar-item-dropdown.vue ***!\n  \\********************************************************************/\n/*! exports provided: ActionBarItemDropdownViewModel, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4215382__) {\n\n\"use strict\";\n__nested_webpack_require_4215382__.r(__nested_webpack_exports__);\n/* harmony import */ var _action_bar_item_dropdown_vue_vue_type_template_id_4ca4f276___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4215382__(/*! ./action-bar-item-dropdown.vue?vue&type=template&id=4ca4f276& */ \"./src/vue/components/action-bar/action-bar-item-dropdown.vue?vue&type=template&id=4ca4f276&\");\n/* harmony import */ var _action_bar_item_dropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4215382__(/*! ./action-bar-item-dropdown.vue?vue&type=script&lang=ts& */ \"./src/vue/components/action-bar/action-bar-item-dropdown.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4215382__.d(__nested_webpack_exports__, \"ActionBarItemDropdownViewModel\", function() { return _action_bar_item_dropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"ActionBarItemDropdownViewModel\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4215382__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _action_bar_item_dropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _action_bar_item_dropdown_vue_vue_type_template_id_4ca4f276___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _action_bar_item_dropdown_vue_vue_type_template_id_4ca4f276___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/action-bar/action-bar-item-dropdown.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/action-bar/action-bar-item-dropdown.vue?vue&type=script&lang=ts&\":\n/*!*********************************************************************************************!*\\\n  !*** ./src/vue/components/action-bar/action-bar-item-dropdown.vue?vue&type=script&lang=ts& ***!\n  \\*********************************************************************************************/\n/*! exports provided: default, ActionBarItemDropdownViewModel */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4217813__) {\n\n\"use strict\";\n__nested_webpack_require_4217813__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_item_dropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4217813__(/*! -!../../../../node_modules/ts-loader??ref--0!../../../../node_modules/vue-loader/lib??vue-loader-options!./action-bar-item-dropdown.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action-bar-item-dropdown.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4217813__.d(__nested_webpack_exports__, \"ActionBarItemDropdownViewModel\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_item_dropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"ActionBarItemDropdownViewModel\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_item_dropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/action-bar/action-bar-item-dropdown.vue?vue&type=template&id=4ca4f276&\":\n/*!***************************************************************************************************!*\\\n  !*** ./src/vue/components/action-bar/action-bar-item-dropdown.vue?vue&type=template&id=4ca4f276& ***!\n  \\***************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4219575__) {\n\n\"use strict\";\n__nested_webpack_require_4219575__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_item_dropdown_vue_vue_type_template_id_4ca4f276___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4219575__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./action-bar-item-dropdown.vue?vue&type=template&id=4ca4f276& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action-bar-item-dropdown.vue?vue&type=template&id=4ca4f276&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4219575__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_item_dropdown_vue_vue_type_template_id_4ca4f276___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4219575__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_item_dropdown_vue_vue_type_template_id_4ca4f276___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/action-bar/action-bar-item.vue\":\n/*!***********************************************************!*\\\n  !*** ./src/vue/components/action-bar/action-bar-item.vue ***!\n  \\***********************************************************/\n/*! exports provided: ActionBarItemViewModel, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4221397__) {\n\n\"use strict\";\n__nested_webpack_require_4221397__.r(__nested_webpack_exports__);\n/* harmony import */ var _action_bar_item_vue_vue_type_template_id_40a056f8___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4221397__(/*! ./action-bar-item.vue?vue&type=template&id=40a056f8& */ \"./src/vue/components/action-bar/action-bar-item.vue?vue&type=template&id=40a056f8&\");\n/* harmony import */ var _action_bar_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4221397__(/*! ./action-bar-item.vue?vue&type=script&lang=ts& */ \"./src/vue/components/action-bar/action-bar-item.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4221397__.d(__nested_webpack_exports__, \"ActionBarItemViewModel\", function() { return _action_bar_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"ActionBarItemViewModel\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4221397__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _action_bar_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _action_bar_item_vue_vue_type_template_id_40a056f8___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _action_bar_item_vue_vue_type_template_id_40a056f8___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/action-bar/action-bar-item.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/action-bar/action-bar-item.vue?vue&type=script&lang=ts&\":\n/*!************************************************************************************!*\\\n  !*** ./src/vue/components/action-bar/action-bar-item.vue?vue&type=script&lang=ts& ***!\n  \\************************************************************************************/\n/*! exports provided: default, ActionBarItemViewModel */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4223669__) {\n\n\"use strict\";\n__nested_webpack_require_4223669__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4223669__(/*! -!../../../../node_modules/ts-loader??ref--0!../../../../node_modules/vue-loader/lib??vue-loader-options!./action-bar-item.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action-bar-item.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4223669__.d(__nested_webpack_exports__, \"ActionBarItemViewModel\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"ActionBarItemViewModel\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/action-bar/action-bar-item.vue?vue&type=template&id=40a056f8&\":\n/*!******************************************************************************************!*\\\n  !*** ./src/vue/components/action-bar/action-bar-item.vue?vue&type=template&id=40a056f8& ***!\n  \\******************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4225334__) {\n\n\"use strict\";\n__nested_webpack_require_4225334__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_item_vue_vue_type_template_id_40a056f8___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4225334__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./action-bar-item.vue?vue&type=template&id=40a056f8& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action-bar-item.vue?vue&type=template&id=40a056f8&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4225334__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_item_vue_vue_type_template_id_40a056f8___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4225334__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_item_vue_vue_type_template_id_40a056f8___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/action-bar/action-bar-separator.vue\":\n/*!****************************************************************!*\\\n  !*** ./src/vue/components/action-bar/action-bar-separator.vue ***!\n  \\****************************************************************/\n/*! exports provided: ActionBarSeparatorViewModel, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4227136__) {\n\n\"use strict\";\n__nested_webpack_require_4227136__.r(__nested_webpack_exports__);\n/* harmony import */ var _action_bar_separator_vue_vue_type_template_id_1aab6850___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4227136__(/*! ./action-bar-separator.vue?vue&type=template&id=1aab6850& */ \"./src/vue/components/action-bar/action-bar-separator.vue?vue&type=template&id=1aab6850&\");\n/* harmony import */ var _action_bar_separator_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4227136__(/*! ./action-bar-separator.vue?vue&type=script&lang=ts& */ \"./src/vue/components/action-bar/action-bar-separator.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4227136__.d(__nested_webpack_exports__, \"ActionBarSeparatorViewModel\", function() { return _action_bar_separator_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"ActionBarSeparatorViewModel\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4227136__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _action_bar_separator_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _action_bar_separator_vue_vue_type_template_id_1aab6850___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _action_bar_separator_vue_vue_type_template_id_1aab6850___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/action-bar/action-bar-separator.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/action-bar/action-bar-separator.vue?vue&type=script&lang=ts&\":\n/*!*****************************************************************************************!*\\\n  !*** ./src/vue/components/action-bar/action-bar-separator.vue?vue&type=script&lang=ts& ***!\n  \\*****************************************************************************************/\n/*! exports provided: default, ActionBarSeparatorViewModel */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4229498__) {\n\n\"use strict\";\n__nested_webpack_require_4229498__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_separator_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4229498__(/*! -!../../../../node_modules/ts-loader??ref--0!../../../../node_modules/vue-loader/lib??vue-loader-options!./action-bar-separator.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action-bar-separator.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4229498__.d(__nested_webpack_exports__, \"ActionBarSeparatorViewModel\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_separator_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"ActionBarSeparatorViewModel\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_separator_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/action-bar/action-bar-separator.vue?vue&type=template&id=1aab6850&\":\n/*!***********************************************************************************************!*\\\n  !*** ./src/vue/components/action-bar/action-bar-separator.vue?vue&type=template&id=1aab6850& ***!\n  \\***********************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4231218__) {\n\n\"use strict\";\n__nested_webpack_require_4231218__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_separator_vue_vue_type_template_id_1aab6850___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4231218__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./action-bar-separator.vue?vue&type=template&id=1aab6850& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action-bar-separator.vue?vue&type=template&id=1aab6850&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4231218__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_separator_vue_vue_type_template_id_1aab6850___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4231218__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_separator_vue_vue_type_template_id_1aab6850___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/action-bar/action-bar.vue\":\n/*!******************************************************!*\\\n  !*** ./src/vue/components/action-bar/action-bar.vue ***!\n  \\******************************************************/\n/*! exports provided: ActionViewModel, ActionBarItemViewModel, ActionBarItemDropdownViewModel, ActionBarSeparatorViewModel, ActionBarViewModel, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4233098__) {\n\n\"use strict\";\n__nested_webpack_require_4233098__.r(__nested_webpack_exports__);\n/* harmony import */ var _action_bar_vue_vue_type_template_id_313bf210___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4233098__(/*! ./action-bar.vue?vue&type=template&id=313bf210& */ \"./src/vue/components/action-bar/action-bar.vue?vue&type=template&id=313bf210&\");\n/* harmony import */ var _action_bar_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4233098__(/*! ./action-bar.vue?vue&type=script&lang=ts& */ \"./src/vue/components/action-bar/action-bar.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4233098__.d(__nested_webpack_exports__, \"ActionViewModel\", function() { return _action_bar_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"ActionViewModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4233098__.d(__nested_webpack_exports__, \"ActionBarItemViewModel\", function() { return _action_bar_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"ActionBarItemViewModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4233098__.d(__nested_webpack_exports__, \"ActionBarItemDropdownViewModel\", function() { return _action_bar_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"ActionBarItemDropdownViewModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4233098__.d(__nested_webpack_exports__, \"ActionBarSeparatorViewModel\", function() { return _action_bar_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"ActionBarSeparatorViewModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4233098__.d(__nested_webpack_exports__, \"ActionBarViewModel\", function() { return _action_bar_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"ActionBarViewModel\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4233098__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _action_bar_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _action_bar_vue_vue_type_template_id_313bf210___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _action_bar_vue_vue_type_template_id_313bf210___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/action-bar/action-bar.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/action-bar/action-bar.vue?vue&type=script&lang=ts&\":\n/*!*******************************************************************************!*\\\n  !*** ./src/vue/components/action-bar/action-bar.vue?vue&type=script&lang=ts& ***!\n  \\*******************************************************************************/\n/*! exports provided: default, ActionViewModel, ActionBarItemViewModel, ActionBarItemDropdownViewModel, ActionBarSeparatorViewModel, ActionBarViewModel */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4236281__) {\n\n\"use strict\";\n__nested_webpack_require_4236281__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4236281__(/*! -!../../../../node_modules/ts-loader??ref--0!../../../../node_modules/vue-loader/lib??vue-loader-options!./action-bar.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action-bar.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4236281__.d(__nested_webpack_exports__, \"ActionViewModel\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"ActionViewModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4236281__.d(__nested_webpack_exports__, \"ActionBarItemViewModel\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"ActionBarItemViewModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4236281__.d(__nested_webpack_exports__, \"ActionBarItemDropdownViewModel\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"ActionBarItemDropdownViewModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4236281__.d(__nested_webpack_exports__, \"ActionBarSeparatorViewModel\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"ActionBarSeparatorViewModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4236281__.d(__nested_webpack_exports__, \"ActionBarViewModel\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"ActionBarViewModel\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/action-bar/action-bar.vue?vue&type=template&id=313bf210&\":\n/*!*************************************************************************************!*\\\n  !*** ./src/vue/components/action-bar/action-bar.vue?vue&type=template&id=313bf210& ***!\n  \\*************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4239165__) {\n\n\"use strict\";\n__nested_webpack_require_4239165__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_vue_vue_type_template_id_313bf210___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4239165__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./action-bar.vue?vue&type=template&id=313bf210& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action-bar.vue?vue&type=template&id=313bf210&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4239165__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_vue_vue_type_template_id_313bf210___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4239165__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_vue_vue_type_template_id_313bf210___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/action-bar/action.vue\":\n/*!**************************************************!*\\\n  !*** ./src/vue/components/action-bar/action.vue ***!\n  \\**************************************************/\n/*! exports provided: ActionViewModel, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4240874__) {\n\n\"use strict\";\n__nested_webpack_require_4240874__.r(__nested_webpack_exports__);\n/* harmony import */ var _action_vue_vue_type_template_id_2fe54632___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4240874__(/*! ./action.vue?vue&type=template&id=2fe54632& */ \"./src/vue/components/action-bar/action.vue?vue&type=template&id=2fe54632&\");\n/* harmony import */ var _action_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4240874__(/*! ./action.vue?vue&type=script&lang=ts& */ \"./src/vue/components/action-bar/action.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4240874__.d(__nested_webpack_exports__, \"ActionViewModel\", function() { return _action_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"ActionViewModel\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4240874__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _action_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _action_vue_vue_type_template_id_2fe54632___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _action_vue_vue_type_template_id_2fe54632___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/action-bar/action.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/action-bar/action.vue?vue&type=script&lang=ts&\":\n/*!***************************************************************************!*\\\n  !*** ./src/vue/components/action-bar/action.vue?vue&type=script&lang=ts& ***!\n  \\***************************************************************************/\n/*! exports provided: default, ActionViewModel */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4242990__) {\n\n\"use strict\";\n__nested_webpack_require_4242990__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4242990__(/*! -!../../../../node_modules/ts-loader??ref--0!../../../../node_modules/vue-loader/lib??vue-loader-options!./action.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4242990__.d(__nested_webpack_exports__, \"ActionViewModel\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"ActionViewModel\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/action-bar/action.vue?vue&type=template&id=2fe54632&\":\n/*!*********************************************************************************!*\\\n  !*** ./src/vue/components/action-bar/action.vue?vue&type=template&id=2fe54632& ***!\n  \\*********************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4244560__) {\n\n\"use strict\";\n__nested_webpack_require_4244560__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_action_vue_vue_type_template_id_2fe54632___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4244560__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./action.vue?vue&type=template&id=2fe54632& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action.vue?vue&type=template&id=2fe54632&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4244560__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_action_vue_vue_type_template_id_2fe54632___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4244560__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_action_vue_vue_type_template_id_2fe54632___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/brand-info.vue\":\n/*!*******************************************!*\\\n  !*** ./src/vue/components/brand-info.vue ***!\n  \\*******************************************/\n/*! exports provided: BrandInfo, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4246215__) {\n\n\"use strict\";\n__nested_webpack_require_4246215__.r(__nested_webpack_exports__);\n/* harmony import */ var _brand_info_vue_vue_type_template_id_2616b47b___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4246215__(/*! ./brand-info.vue?vue&type=template&id=2616b47b& */ \"./src/vue/components/brand-info.vue?vue&type=template&id=2616b47b&\");\n/* harmony import */ var _brand_info_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4246215__(/*! ./brand-info.vue?vue&type=script&lang=ts& */ \"./src/vue/components/brand-info.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4246215__.d(__nested_webpack_exports__, \"BrandInfo\", function() { return _brand_info_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"BrandInfo\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4246215__(/*! ../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _brand_info_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _brand_info_vue_vue_type_template_id_2616b47b___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _brand_info_vue_vue_type_template_id_2616b47b___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/brand-info.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/brand-info.vue?vue&type=script&lang=ts&\":\n/*!********************************************************************!*\\\n  !*** ./src/vue/components/brand-info.vue?vue&type=script&lang=ts& ***!\n  \\********************************************************************/\n/*! exports provided: default, BrandInfo */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4248293__) {\n\n\"use strict\";\n__nested_webpack_require_4248293__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_brand_info_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4248293__(/*! -!../../../node_modules/ts-loader??ref--0!../../../node_modules/vue-loader/lib??vue-loader-options!./brand-info.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/brand-info.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4248293__.d(__nested_webpack_exports__, \"BrandInfo\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_brand_info_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"BrandInfo\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_brand_info_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/brand-info.vue?vue&type=template&id=2616b47b&\":\n/*!**************************************************************************!*\\\n  !*** ./src/vue/components/brand-info.vue?vue&type=template&id=2616b47b& ***!\n  \\**************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4249826__) {\n\n\"use strict\";\n__nested_webpack_require_4249826__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_brand_info_vue_vue_type_template_id_2616b47b___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4249826__(/*! -!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/vue-loader/lib??vue-loader-options!./brand-info.vue?vue&type=template&id=2616b47b& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/brand-info.vue?vue&type=template&id=2616b47b&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4249826__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_brand_info_vue_vue_type_template_id_2616b47b___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4249826__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_brand_info_vue_vue_type_template_id_2616b47b___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/character-counter.vue\":\n/*!**************************************************!*\\\n  !*** ./src/vue/components/character-counter.vue ***!\n  \\**************************************************/\n/*! exports provided: CharacterCounterComponent, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4251528__) {\n\n\"use strict\";\n__nested_webpack_require_4251528__.r(__nested_webpack_exports__);\n/* harmony import */ var _character_counter_vue_vue_type_template_id_7c80ca61___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4251528__(/*! ./character-counter.vue?vue&type=template&id=7c80ca61& */ \"./src/vue/components/character-counter.vue?vue&type=template&id=7c80ca61&\");\n/* harmony import */ var _character_counter_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4251528__(/*! ./character-counter.vue?vue&type=script&lang=ts& */ \"./src/vue/components/character-counter.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4251528__.d(__nested_webpack_exports__, \"CharacterCounterComponent\", function() { return _character_counter_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"CharacterCounterComponent\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4251528__(/*! ../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _character_counter_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _character_counter_vue_vue_type_template_id_7c80ca61___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _character_counter_vue_vue_type_template_id_7c80ca61___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/character-counter.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/character-counter.vue?vue&type=script&lang=ts&\":\n/*!***************************************************************************!*\\\n  !*** ./src/vue/components/character-counter.vue?vue&type=script&lang=ts& ***!\n  \\***************************************************************************/\n/*! exports provided: default, CharacterCounterComponent */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4253759__) {\n\n\"use strict\";\n__nested_webpack_require_4253759__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_character_counter_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4253759__(/*! -!../../../node_modules/ts-loader??ref--0!../../../node_modules/vue-loader/lib??vue-loader-options!./character-counter.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/character-counter.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4253759__.d(__nested_webpack_exports__, \"CharacterCounterComponent\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_character_counter_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"CharacterCounterComponent\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_character_counter_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/character-counter.vue?vue&type=template&id=7c80ca61&\":\n/*!*********************************************************************************!*\\\n  !*** ./src/vue/components/character-counter.vue?vue&type=template&id=7c80ca61& ***!\n  \\*********************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4255387__) {\n\n\"use strict\";\n__nested_webpack_require_4255387__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_character_counter_vue_vue_type_template_id_7c80ca61___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4255387__(/*! -!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/vue-loader/lib??vue-loader-options!./character-counter.vue?vue&type=template&id=7c80ca61& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/character-counter.vue?vue&type=template&id=7c80ca61&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4255387__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_character_counter_vue_vue_type_template_id_7c80ca61___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4255387__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_character_counter_vue_vue_type_template_id_7c80ca61___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/container.vue\":\n/*!******************************************!*\\\n  !*** ./src/vue/components/container.vue ***!\n  \\******************************************/\n/*! exports provided: ComponentsContainer, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4257086__) {\n\n\"use strict\";\n__nested_webpack_require_4257086__.r(__nested_webpack_exports__);\n/* harmony import */ var _container_vue_vue_type_template_id_2b44a00a___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4257086__(/*! ./container.vue?vue&type=template&id=2b44a00a& */ \"./src/vue/components/container.vue?vue&type=template&id=2b44a00a&\");\n/* harmony import */ var _container_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4257086__(/*! ./container.vue?vue&type=script&lang=ts& */ \"./src/vue/components/container.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4257086__.d(__nested_webpack_exports__, \"ComponentsContainer\", function() { return _container_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"ComponentsContainer\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4257086__(/*! ../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _container_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _container_vue_vue_type_template_id_2b44a00a___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _container_vue_vue_type_template_id_2b44a00a___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/container.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/container.vue?vue&type=script&lang=ts&\":\n/*!*******************************************************************!*\\\n  !*** ./src/vue/components/container.vue?vue&type=script&lang=ts& ***!\n  \\*******************************************************************/\n/*! exports provided: default, ComponentsContainer */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4259179__) {\n\n\"use strict\";\n__nested_webpack_require_4259179__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_container_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4259179__(/*! -!../../../node_modules/ts-loader??ref--0!../../../node_modules/vue-loader/lib??vue-loader-options!./container.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/container.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4259179__.d(__nested_webpack_exports__, \"ComponentsContainer\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_container_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"ComponentsContainer\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_container_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/container.vue?vue&type=template&id=2b44a00a&\":\n/*!*************************************************************************!*\\\n  !*** ./src/vue/components/container.vue?vue&type=template&id=2b44a00a& ***!\n  \\*************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4260723__) {\n\n\"use strict\";\n__nested_webpack_require_4260723__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_container_vue_vue_type_template_id_2b44a00a___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4260723__(/*! -!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/vue-loader/lib??vue-loader-options!./container.vue?vue&type=template&id=2b44a00a& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/container.vue?vue&type=template&id=2b44a00a&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4260723__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_container_vue_vue_type_template_id_2b44a00a___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4260723__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_container_vue_vue_type_template_id_2b44a00a___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/cover/cover-cell.vue\":\n/*!*************************************************!*\\\n  !*** ./src/vue/components/cover/cover-cell.vue ***!\n  \\*************************************************/\n/*! exports provided: CoverCellViewModel, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4262409__) {\n\n\"use strict\";\n__nested_webpack_require_4262409__.r(__nested_webpack_exports__);\n/* harmony import */ var _cover_cell_vue_vue_type_template_id_36297717___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4262409__(/*! ./cover-cell.vue?vue&type=template&id=36297717& */ \"./src/vue/components/cover/cover-cell.vue?vue&type=template&id=36297717&\");\n/* harmony import */ var _cover_cell_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4262409__(/*! ./cover-cell.vue?vue&type=script&lang=ts& */ \"./src/vue/components/cover/cover-cell.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4262409__.d(__nested_webpack_exports__, \"CoverCellViewModel\", function() { return _cover_cell_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"CoverCellViewModel\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4262409__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _cover_cell_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _cover_cell_vue_vue_type_template_id_36297717___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _cover_cell_vue_vue_type_template_id_36297717___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/cover/cover-cell.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/cover/cover-cell.vue?vue&type=script&lang=ts&\":\n/*!**************************************************************************!*\\\n  !*** ./src/vue/components/cover/cover-cell.vue?vue&type=script&lang=ts& ***!\n  \\**************************************************************************/\n/*! exports provided: default, CoverCellViewModel */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4264559__) {\n\n\"use strict\";\n__nested_webpack_require_4264559__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_cover_cell_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4264559__(/*! -!../../../../node_modules/ts-loader??ref--0!../../../../node_modules/vue-loader/lib??vue-loader-options!./cover-cell.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/cover/cover-cell.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4264559__.d(__nested_webpack_exports__, \"CoverCellViewModel\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_cover_cell_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"CoverCellViewModel\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_cover_cell_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/cover/cover-cell.vue?vue&type=template&id=36297717&\":\n/*!********************************************************************************!*\\\n  !*** ./src/vue/components/cover/cover-cell.vue?vue&type=template&id=36297717& ***!\n  \\********************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4266146__) {\n\n\"use strict\";\n__nested_webpack_require_4266146__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_cover_cell_vue_vue_type_template_id_36297717___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4266146__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./cover-cell.vue?vue&type=template&id=36297717& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/cover/cover-cell.vue?vue&type=template&id=36297717&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4266146__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_cover_cell_vue_vue_type_template_id_36297717___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4266146__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_cover_cell_vue_vue_type_template_id_36297717___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/cover/cover.vue\":\n/*!********************************************!*\\\n  !*** ./src/vue/components/cover/cover.vue ***!\n  \\********************************************/\n/*! exports provided: CoverCellViewModel, CoverViewModel, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4267845__) {\n\n\"use strict\";\n__nested_webpack_require_4267845__.r(__nested_webpack_exports__);\n/* harmony import */ var _cover_vue_vue_type_template_id_4e62b8b0___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4267845__(/*! ./cover.vue?vue&type=template&id=4e62b8b0& */ \"./src/vue/components/cover/cover.vue?vue&type=template&id=4e62b8b0&\");\n/* harmony import */ var _cover_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4267845__(/*! ./cover.vue?vue&type=script&lang=ts& */ \"./src/vue/components/cover/cover.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4267845__.d(__nested_webpack_exports__, \"CoverCellViewModel\", function() { return _cover_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"CoverCellViewModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4267845__.d(__nested_webpack_exports__, \"CoverViewModel\", function() { return _cover_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"CoverViewModel\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4267845__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _cover_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _cover_vue_vue_type_template_id_4e62b8b0___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _cover_vue_vue_type_template_id_4e62b8b0___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/cover/cover.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/cover/cover.vue?vue&type=script&lang=ts&\":\n/*!*********************************************************************!*\\\n  !*** ./src/vue/components/cover/cover.vue?vue&type=script&lang=ts& ***!\n  \\*********************************************************************/\n/*! exports provided: default, CoverCellViewModel, CoverViewModel */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4270136__) {\n\n\"use strict\";\n__nested_webpack_require_4270136__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_cover_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4270136__(/*! -!../../../../node_modules/ts-loader??ref--0!../../../../node_modules/vue-loader/lib??vue-loader-options!./cover.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/cover/cover.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4270136__.d(__nested_webpack_exports__, \"CoverCellViewModel\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_cover_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"CoverCellViewModel\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4270136__.d(__nested_webpack_exports__, \"CoverViewModel\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_cover_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"CoverViewModel\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_cover_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/cover/cover.vue?vue&type=template&id=4e62b8b0&\":\n/*!***************************************************************************!*\\\n  !*** ./src/vue/components/cover/cover.vue?vue&type=template&id=4e62b8b0& ***!\n  \\***************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4271972__) {\n\n\"use strict\";\n__nested_webpack_require_4271972__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_cover_vue_vue_type_template_id_4e62b8b0___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4271972__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./cover.vue?vue&type=template&id=4e62b8b0& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/cover/cover.vue?vue&type=template&id=4e62b8b0&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4271972__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_cover_vue_vue_type_template_id_4e62b8b0___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4271972__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_cover_vue_vue_type_template_id_4e62b8b0___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/dropdown/dropdown.vue\":\n/*!**************************************************!*\\\n  !*** ./src/vue/components/dropdown/dropdown.vue ***!\n  \\**************************************************/\n/*! exports provided: DropdownComponent, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4273653__) {\n\n\"use strict\";\n__nested_webpack_require_4273653__.r(__nested_webpack_exports__);\n/* harmony import */ var _dropdown_vue_vue_type_template_id_361fc050___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4273653__(/*! ./dropdown.vue?vue&type=template&id=361fc050& */ \"./src/vue/components/dropdown/dropdown.vue?vue&type=template&id=361fc050&\");\n/* harmony import */ var _dropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4273653__(/*! ./dropdown.vue?vue&type=script&lang=ts& */ \"./src/vue/components/dropdown/dropdown.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4273653__.d(__nested_webpack_exports__, \"DropdownComponent\", function() { return _dropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"DropdownComponent\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4273653__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _dropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _dropdown_vue_vue_type_template_id_361fc050___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _dropdown_vue_vue_type_template_id_361fc050___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/dropdown/dropdown.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/dropdown/dropdown.vue?vue&type=script&lang=ts&\":\n/*!***************************************************************************!*\\\n  !*** ./src/vue/components/dropdown/dropdown.vue?vue&type=script&lang=ts& ***!\n  \\***************************************************************************/\n/*! exports provided: default, DropdownComponent */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4275791__) {\n\n\"use strict\";\n__nested_webpack_require_4275791__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_dropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4275791__(/*! -!../../../../node_modules/ts-loader??ref--0!../../../../node_modules/vue-loader/lib??vue-loader-options!./dropdown.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/dropdown/dropdown.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4275791__.d(__nested_webpack_exports__, \"DropdownComponent\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_dropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"DropdownComponent\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_dropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/dropdown/dropdown.vue?vue&type=template&id=361fc050&\":\n/*!*********************************************************************************!*\\\n  !*** ./src/vue/components/dropdown/dropdown.vue?vue&type=template&id=361fc050& ***!\n  \\*********************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4277373__) {\n\n\"use strict\";\n__nested_webpack_require_4277373__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_dropdown_vue_vue_type_template_id_361fc050___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4277373__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./dropdown.vue?vue&type=template&id=361fc050& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/dropdown/dropdown.vue?vue&type=template&id=361fc050&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4277373__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_dropdown_vue_vue_type_template_id_361fc050___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4277373__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_dropdown_vue_vue_type_template_id_361fc050___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/dropdown/option-item.vue\":\n/*!*****************************************************!*\\\n  !*** ./src/vue/components/dropdown/option-item.vue ***!\n  \\*****************************************************/\n/*! exports provided: DropdownComponent, DropdownOptionItem, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4279104__) {\n\n\"use strict\";\n__nested_webpack_require_4279104__.r(__nested_webpack_exports__);\n/* harmony import */ var _option_item_vue_vue_type_template_id_36b56e74___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4279104__(/*! ./option-item.vue?vue&type=template&id=36b56e74& */ \"./src/vue/components/dropdown/option-item.vue?vue&type=template&id=36b56e74&\");\n/* harmony import */ var _option_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4279104__(/*! ./option-item.vue?vue&type=script&lang=ts& */ \"./src/vue/components/dropdown/option-item.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4279104__.d(__nested_webpack_exports__, \"DropdownComponent\", function() { return _option_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"DropdownComponent\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4279104__.d(__nested_webpack_exports__, \"DropdownOptionItem\", function() { return _option_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"DropdownOptionItem\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4279104__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _option_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _option_item_vue_vue_type_template_id_36b56e74___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _option_item_vue_vue_type_template_id_36b56e74___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/dropdown/option-item.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/dropdown/option-item.vue?vue&type=script&lang=ts&\":\n/*!******************************************************************************!*\\\n  !*** ./src/vue/components/dropdown/option-item.vue?vue&type=script&lang=ts& ***!\n  \\******************************************************************************/\n/*! exports provided: default, DropdownComponent, DropdownOptionItem */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4281521__) {\n\n\"use strict\";\n__nested_webpack_require_4281521__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_option_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4281521__(/*! -!../../../../node_modules/ts-loader??ref--0!../../../../node_modules/vue-loader/lib??vue-loader-options!./option-item.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/dropdown/option-item.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4281521__.d(__nested_webpack_exports__, \"DropdownComponent\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_option_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"DropdownComponent\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4281521__.d(__nested_webpack_exports__, \"DropdownOptionItem\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_option_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"DropdownOptionItem\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_option_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/dropdown/option-item.vue?vue&type=template&id=36b56e74&\":\n/*!************************************************************************************!*\\\n  !*** ./src/vue/components/dropdown/option-item.vue?vue&type=template&id=36b56e74& ***!\n  \\************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4283438__) {\n\n\"use strict\";\n__nested_webpack_require_4283438__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_option_item_vue_vue_type_template_id_36b56e74___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4283438__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./option-item.vue?vue&type=template&id=36b56e74& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/dropdown/option-item.vue?vue&type=template&id=36b56e74&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4283438__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_option_item_vue_vue_type_template_id_36b56e74___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4283438__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_option_item_vue_vue_type_template_id_36b56e74___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/file-actions/file-choose-button.vue\":\n/*!****************************************************************!*\\\n  !*** ./src/vue/components/file-actions/file-choose-button.vue ***!\n  \\****************************************************************/\n/*! exports provided: FileChooseButton, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4285207__) {\n\n\"use strict\";\n__nested_webpack_require_4285207__.r(__nested_webpack_exports__);\n/* harmony import */ var _file_choose_button_vue_vue_type_template_id_729d1aa3___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4285207__(/*! ./file-choose-button.vue?vue&type=template&id=729d1aa3& */ \"./src/vue/components/file-actions/file-choose-button.vue?vue&type=template&id=729d1aa3&\");\n/* harmony import */ var _file_choose_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4285207__(/*! ./file-choose-button.vue?vue&type=script&lang=ts& */ \"./src/vue/components/file-actions/file-choose-button.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4285207__.d(__nested_webpack_exports__, \"FileChooseButton\", function() { return _file_choose_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"FileChooseButton\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4285207__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _file_choose_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _file_choose_button_vue_vue_type_template_id_729d1aa3___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _file_choose_button_vue_vue_type_template_id_729d1aa3___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/file-actions/file-choose-button.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/file-actions/file-choose-button.vue?vue&type=script&lang=ts&\":\n/*!*****************************************************************************************!*\\\n  !*** ./src/vue/components/file-actions/file-choose-button.vue?vue&type=script&lang=ts& ***!\n  \\*****************************************************************************************/\n/*! exports provided: default, FileChooseButton */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4287520__) {\n\n\"use strict\";\n__nested_webpack_require_4287520__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_file_choose_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4287520__(/*! -!../../../../node_modules/ts-loader??ref--0!../../../../node_modules/vue-loader/lib??vue-loader-options!./file-choose-button.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/file-actions/file-choose-button.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4287520__.d(__nested_webpack_exports__, \"FileChooseButton\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_file_choose_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"FileChooseButton\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_file_choose_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/file-actions/file-choose-button.vue?vue&type=template&id=729d1aa3&\":\n/*!***********************************************************************************************!*\\\n  !*** ./src/vue/components/file-actions/file-choose-button.vue?vue&type=template&id=729d1aa3& ***!\n  \\***********************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4289210__) {\n\n\"use strict\";\n__nested_webpack_require_4289210__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_file_choose_button_vue_vue_type_template_id_729d1aa3___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4289210__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./file-choose-button.vue?vue&type=template&id=729d1aa3& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/file-actions/file-choose-button.vue?vue&type=template&id=729d1aa3&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4289210__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_file_choose_button_vue_vue_type_template_id_729d1aa3___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4289210__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_file_choose_button_vue_vue_type_template_id_729d1aa3___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/list/list-item.vue\":\n/*!***********************************************!*\\\n  !*** ./src/vue/components/list/list-item.vue ***!\n  \\***********************************************/\n/*! exports provided: List, ListItem, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4290948__) {\n\n\"use strict\";\n__nested_webpack_require_4290948__.r(__nested_webpack_exports__);\n/* harmony import */ var _list_item_vue_vue_type_template_id_4fffcdf8___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4290948__(/*! ./list-item.vue?vue&type=template&id=4fffcdf8& */ \"./src/vue/components/list/list-item.vue?vue&type=template&id=4fffcdf8&\");\n/* harmony import */ var _list_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4290948__(/*! ./list-item.vue?vue&type=script&lang=ts& */ \"./src/vue/components/list/list-item.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4290948__.d(__nested_webpack_exports__, \"List\", function() { return _list_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"List\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4290948__.d(__nested_webpack_exports__, \"ListItem\", function() { return _list_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"ListItem\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4290948__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _list_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _list_item_vue_vue_type_template_id_4fffcdf8___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _list_item_vue_vue_type_template_id_4fffcdf8___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/list/list-item.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/list/list-item.vue?vue&type=script&lang=ts&\":\n/*!************************************************************************!*\\\n  !*** ./src/vue/components/list/list-item.vue?vue&type=script&lang=ts& ***!\n  \\************************************************************************/\n/*! exports provided: default, List, ListItem */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4293236__) {\n\n\"use strict\";\n__nested_webpack_require_4293236__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_list_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4293236__(/*! -!../../../../node_modules/ts-loader??ref--0!../../../../node_modules/vue-loader/lib??vue-loader-options!./list-item.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/list/list-item.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4293236__.d(__nested_webpack_exports__, \"List\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_list_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"List\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4293236__.d(__nested_webpack_exports__, \"ListItem\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_list_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"ListItem\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_list_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/list/list-item.vue?vue&type=template&id=4fffcdf8&\":\n/*!******************************************************************************!*\\\n  !*** ./src/vue/components/list/list-item.vue?vue&type=template&id=4fffcdf8& ***!\n  \\******************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4295067__) {\n\n\"use strict\";\n__nested_webpack_require_4295067__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_list_item_vue_vue_type_template_id_4fffcdf8___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4295067__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./list-item.vue?vue&type=template&id=4fffcdf8& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/list/list-item.vue?vue&type=template&id=4fffcdf8&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4295067__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_list_item_vue_vue_type_template_id_4fffcdf8___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4295067__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_list_item_vue_vue_type_template_id_4fffcdf8___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/list/list.vue\":\n/*!******************************************!*\\\n  !*** ./src/vue/components/list/list.vue ***!\n  \\******************************************/\n/*! exports provided: ListItem, List, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4296732__) {\n\n\"use strict\";\n__nested_webpack_require_4296732__.r(__nested_webpack_exports__);\n/* harmony import */ var _list_vue_vue_type_template_id_cc17a010___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4296732__(/*! ./list.vue?vue&type=template&id=cc17a010& */ \"./src/vue/components/list/list.vue?vue&type=template&id=cc17a010&\");\n/* harmony import */ var _list_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4296732__(/*! ./list.vue?vue&type=script&lang=ts& */ \"./src/vue/components/list/list.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4296732__.d(__nested_webpack_exports__, \"ListItem\", function() { return _list_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"ListItem\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4296732__.d(__nested_webpack_exports__, \"List\", function() { return _list_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"List\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4296732__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _list_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _list_vue_vue_type_template_id_cc17a010___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _list_vue_vue_type_template_id_cc17a010___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/list/list.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/list/list.vue?vue&type=script&lang=ts&\":\n/*!*******************************************************************!*\\\n  !*** ./src/vue/components/list/list.vue?vue&type=script&lang=ts& ***!\n  \\*******************************************************************/\n/*! exports provided: default, ListItem, List */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4298940__) {\n\n\"use strict\";\n__nested_webpack_require_4298940__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_list_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4298940__(/*! -!../../../../node_modules/ts-loader??ref--0!../../../../node_modules/vue-loader/lib??vue-loader-options!./list.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/list/list.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4298940__.d(__nested_webpack_exports__, \"ListItem\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_list_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"ListItem\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4298940__.d(__nested_webpack_exports__, \"List\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_list_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"List\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_list_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/list/list.vue?vue&type=template&id=cc17a010&\":\n/*!*************************************************************************!*\\\n  !*** ./src/vue/components/list/list.vue?vue&type=template&id=cc17a010& ***!\n  \\*************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4300721__) {\n\n\"use strict\";\n__nested_webpack_require_4300721__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_list_vue_vue_type_template_id_cc17a010___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4300721__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./list.vue?vue&type=template&id=cc17a010& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/list/list.vue?vue&type=template&id=cc17a010&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4300721__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_list_vue_vue_type_template_id_cc17a010___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4300721__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_list_vue_vue_type_template_id_cc17a010___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/loading-indicator.vue\":\n/*!**************************************************!*\\\n  !*** ./src/vue/components/loading-indicator.vue ***!\n  \\**************************************************/\n/*! exports provided: LoadingIndicatorComponent, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4302404__) {\n\n\"use strict\";\n__nested_webpack_require_4302404__.r(__nested_webpack_exports__);\n/* harmony import */ var _loading_indicator_vue_vue_type_template_id_e887da72___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4302404__(/*! ./loading-indicator.vue?vue&type=template&id=e887da72& */ \"./src/vue/components/loading-indicator.vue?vue&type=template&id=e887da72&\");\n/* harmony import */ var _loading_indicator_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4302404__(/*! ./loading-indicator.vue?vue&type=script&lang=ts& */ \"./src/vue/components/loading-indicator.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4302404__.d(__nested_webpack_exports__, \"LoadingIndicatorComponent\", function() { return _loading_indicator_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"LoadingIndicatorComponent\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4302404__(/*! ../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _loading_indicator_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _loading_indicator_vue_vue_type_template_id_e887da72___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _loading_indicator_vue_vue_type_template_id_e887da72___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/loading-indicator.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/loading-indicator.vue?vue&type=script&lang=ts&\":\n/*!***************************************************************************!*\\\n  !*** ./src/vue/components/loading-indicator.vue?vue&type=script&lang=ts& ***!\n  \\***************************************************************************/\n/*! exports provided: default, LoadingIndicatorComponent */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4304635__) {\n\n\"use strict\";\n__nested_webpack_require_4304635__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_loading_indicator_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4304635__(/*! -!../../../node_modules/ts-loader??ref--0!../../../node_modules/vue-loader/lib??vue-loader-options!./loading-indicator.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/loading-indicator.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4304635__.d(__nested_webpack_exports__, \"LoadingIndicatorComponent\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_loading_indicator_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"LoadingIndicatorComponent\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_loading_indicator_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/loading-indicator.vue?vue&type=template&id=e887da72&\":\n/*!*********************************************************************************!*\\\n  !*** ./src/vue/components/loading-indicator.vue?vue&type=template&id=e887da72& ***!\n  \\*********************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4306263__) {\n\n\"use strict\";\n__nested_webpack_require_4306263__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_loading_indicator_vue_vue_type_template_id_e887da72___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4306263__(/*! -!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/vue-loader/lib??vue-loader-options!./loading-indicator.vue?vue&type=template&id=e887da72& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/loading-indicator.vue?vue&type=template&id=e887da72&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4306263__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_loading_indicator_vue_vue_type_template_id_e887da72___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4306263__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_loading_indicator_vue_vue_type_template_id_e887da72___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/matrix-actions/detail-button/detail-button.vue\":\n/*!***************************************************************************!*\\\n  !*** ./src/vue/components/matrix-actions/detail-button/detail-button.vue ***!\n  \\***************************************************************************/\n/*! exports provided: SurveyQuestionMatrixDetailButton, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4308107__) {\n\n\"use strict\";\n__nested_webpack_require_4308107__.r(__nested_webpack_exports__);\n/* harmony import */ var _detail_button_vue_vue_type_template_id_5b4e69b6___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4308107__(/*! ./detail-button.vue?vue&type=template&id=5b4e69b6& */ \"./src/vue/components/matrix-actions/detail-button/detail-button.vue?vue&type=template&id=5b4e69b6&\");\n/* harmony import */ var _detail_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4308107__(/*! ./detail-button.vue?vue&type=script&lang=ts& */ \"./src/vue/components/matrix-actions/detail-button/detail-button.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4308107__.d(__nested_webpack_exports__, \"SurveyQuestionMatrixDetailButton\", function() { return _detail_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"SurveyQuestionMatrixDetailButton\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4308107__(/*! ../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _detail_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _detail_button_vue_vue_type_template_id_5b4e69b6___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _detail_button_vue_vue_type_template_id_5b4e69b6___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/matrix-actions/detail-button/detail-button.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/matrix-actions/detail-button/detail-button.vue?vue&type=script&lang=ts&\":\n/*!****************************************************************************************************!*\\\n  !*** ./src/vue/components/matrix-actions/detail-button/detail-button.vue?vue&type=script&lang=ts& ***!\n  \\****************************************************************************************************/\n/*! exports provided: default, SurveyQuestionMatrixDetailButton */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4310508__) {\n\n\"use strict\";\n__nested_webpack_require_4310508__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_detail_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4310508__(/*! -!../../../../../node_modules/ts-loader??ref--0!../../../../../node_modules/vue-loader/lib??vue-loader-options!./detail-button.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/matrix-actions/detail-button/detail-button.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4310508__.d(__nested_webpack_exports__, \"SurveyQuestionMatrixDetailButton\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_detail_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"SurveyQuestionMatrixDetailButton\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_detail_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/matrix-actions/detail-button/detail-button.vue?vue&type=template&id=5b4e69b6&\":\n/*!**********************************************************************************************************!*\\\n  !*** ./src/vue/components/matrix-actions/detail-button/detail-button.vue?vue&type=template&id=5b4e69b6& ***!\n  \\**********************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4312271__) {\n\n\"use strict\";\n__nested_webpack_require_4312271__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_detail_button_vue_vue_type_template_id_5b4e69b6___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4312271__(/*! -!../../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../../node_modules/vue-loader/lib??vue-loader-options!./detail-button.vue?vue&type=template&id=5b4e69b6& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/matrix-actions/detail-button/detail-button.vue?vue&type=template&id=5b4e69b6&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4312271__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_detail_button_vue_vue_type_template_id_5b4e69b6___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4312271__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_detail_button_vue_vue_type_template_id_5b4e69b6___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/matrix-actions/drag-drop-icon/drag-drop-icon.vue\":\n/*!*****************************************************************************!*\\\n  !*** ./src/vue/components/matrix-actions/drag-drop-icon/drag-drop-icon.vue ***!\n  \\*****************************************************************************/\n/*! exports provided: SurveyQuestionMatrixDynamicDragDropIcon, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4314151__) {\n\n\"use strict\";\n__nested_webpack_require_4314151__.r(__nested_webpack_exports__);\n/* harmony import */ var _drag_drop_icon_vue_vue_type_template_id_4f55d298___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4314151__(/*! ./drag-drop-icon.vue?vue&type=template&id=4f55d298& */ \"./src/vue/components/matrix-actions/drag-drop-icon/drag-drop-icon.vue?vue&type=template&id=4f55d298&\");\n/* harmony import */ var _drag_drop_icon_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4314151__(/*! ./drag-drop-icon.vue?vue&type=script&lang=ts& */ \"./src/vue/components/matrix-actions/drag-drop-icon/drag-drop-icon.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4314151__.d(__nested_webpack_exports__, \"SurveyQuestionMatrixDynamicDragDropIcon\", function() { return _drag_drop_icon_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"SurveyQuestionMatrixDynamicDragDropIcon\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4314151__(/*! ../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _drag_drop_icon_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _drag_drop_icon_vue_vue_type_template_id_4f55d298___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _drag_drop_icon_vue_vue_type_template_id_4f55d298___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/matrix-actions/drag-drop-icon/drag-drop-icon.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/matrix-actions/drag-drop-icon/drag-drop-icon.vue?vue&type=script&lang=ts&\":\n/*!******************************************************************************************************!*\\\n  !*** ./src/vue/components/matrix-actions/drag-drop-icon/drag-drop-icon.vue?vue&type=script&lang=ts& ***!\n  \\******************************************************************************************************/\n/*! exports provided: default, SurveyQuestionMatrixDynamicDragDropIcon */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4316595__) {\n\n\"use strict\";\n__nested_webpack_require_4316595__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_drag_drop_icon_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4316595__(/*! -!../../../../../node_modules/ts-loader??ref--0!../../../../../node_modules/vue-loader/lib??vue-loader-options!./drag-drop-icon.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/matrix-actions/drag-drop-icon/drag-drop-icon.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4316595__.d(__nested_webpack_exports__, \"SurveyQuestionMatrixDynamicDragDropIcon\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_drag_drop_icon_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"SurveyQuestionMatrixDynamicDragDropIcon\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_drag_drop_icon_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/matrix-actions/drag-drop-icon/drag-drop-icon.vue?vue&type=template&id=4f55d298&\":\n/*!************************************************************************************************************!*\\\n  !*** ./src/vue/components/matrix-actions/drag-drop-icon/drag-drop-icon.vue?vue&type=template&id=4f55d298& ***!\n  \\************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4318386__) {\n\n\"use strict\";\n__nested_webpack_require_4318386__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_drag_drop_icon_vue_vue_type_template_id_4f55d298___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4318386__(/*! -!../../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../../node_modules/vue-loader/lib??vue-loader-options!./drag-drop-icon.vue?vue&type=template&id=4f55d298& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/matrix-actions/drag-drop-icon/drag-drop-icon.vue?vue&type=template&id=4f55d298&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4318386__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_drag_drop_icon_vue_vue_type_template_id_4f55d298___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4318386__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_drag_drop_icon_vue_vue_type_template_id_4f55d298___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/matrix-actions/remove-button/remove-button.vue\":\n/*!***************************************************************************!*\\\n  !*** ./src/vue/components/matrix-actions/remove-button/remove-button.vue ***!\n  \\***************************************************************************/\n/*! exports provided: SurveyQuestionMatrixDynamicRemoveButton, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4320264__) {\n\n\"use strict\";\n__nested_webpack_require_4320264__.r(__nested_webpack_exports__);\n/* harmony import */ var _remove_button_vue_vue_type_template_id_c8a7aa60___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4320264__(/*! ./remove-button.vue?vue&type=template&id=c8a7aa60& */ \"./src/vue/components/matrix-actions/remove-button/remove-button.vue?vue&type=template&id=c8a7aa60&\");\n/* harmony import */ var _remove_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4320264__(/*! ./remove-button.vue?vue&type=script&lang=ts& */ \"./src/vue/components/matrix-actions/remove-button/remove-button.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4320264__.d(__nested_webpack_exports__, \"SurveyQuestionMatrixDynamicRemoveButton\", function() { return _remove_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"SurveyQuestionMatrixDynamicRemoveButton\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4320264__(/*! ../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _remove_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _remove_button_vue_vue_type_template_id_c8a7aa60___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _remove_button_vue_vue_type_template_id_c8a7aa60___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/matrix-actions/remove-button/remove-button.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/matrix-actions/remove-button/remove-button.vue?vue&type=script&lang=ts&\":\n/*!****************************************************************************************************!*\\\n  !*** ./src/vue/components/matrix-actions/remove-button/remove-button.vue?vue&type=script&lang=ts& ***!\n  \\****************************************************************************************************/\n/*! exports provided: default, SurveyQuestionMatrixDynamicRemoveButton */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4322686__) {\n\n\"use strict\";\n__nested_webpack_require_4322686__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_remove_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4322686__(/*! -!../../../../../node_modules/ts-loader??ref--0!../../../../../node_modules/vue-loader/lib??vue-loader-options!./remove-button.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/matrix-actions/remove-button/remove-button.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4322686__.d(__nested_webpack_exports__, \"SurveyQuestionMatrixDynamicRemoveButton\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_remove_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"SurveyQuestionMatrixDynamicRemoveButton\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_remove_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/matrix-actions/remove-button/remove-button.vue?vue&type=template&id=c8a7aa60&\":\n/*!**********************************************************************************************************!*\\\n  !*** ./src/vue/components/matrix-actions/remove-button/remove-button.vue?vue&type=template&id=c8a7aa60& ***!\n  \\**********************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4324463__) {\n\n\"use strict\";\n__nested_webpack_require_4324463__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_remove_button_vue_vue_type_template_id_c8a7aa60___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4324463__(/*! -!../../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../../node_modules/vue-loader/lib??vue-loader-options!./remove-button.vue?vue&type=template&id=c8a7aa60& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/matrix-actions/remove-button/remove-button.vue?vue&type=template&id=c8a7aa60&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4324463__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_remove_button_vue_vue_type_template_id_c8a7aa60___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4324463__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_remove_button_vue_vue_type_template_id_c8a7aa60___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/notifier.vue\":\n/*!*****************************************!*\\\n  !*** ./src/vue/components/notifier.vue ***!\n  \\*****************************************/\n/*! exports provided: NotifierComponent, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4326177__) {\n\n\"use strict\";\n__nested_webpack_require_4326177__.r(__nested_webpack_exports__);\n/* harmony import */ var _notifier_vue_vue_type_template_id_2d93edad___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4326177__(/*! ./notifier.vue?vue&type=template&id=2d93edad& */ \"./src/vue/components/notifier.vue?vue&type=template&id=2d93edad&\");\n/* harmony import */ var _notifier_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4326177__(/*! ./notifier.vue?vue&type=script&lang=ts& */ \"./src/vue/components/notifier.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4326177__.d(__nested_webpack_exports__, \"NotifierComponent\", function() { return _notifier_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"NotifierComponent\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4326177__(/*! ../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _notifier_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _notifier_vue_vue_type_template_id_2d93edad___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _notifier_vue_vue_type_template_id_2d93edad___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/notifier.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/notifier.vue?vue&type=script&lang=ts&\":\n/*!******************************************************************!*\\\n  !*** ./src/vue/components/notifier.vue?vue&type=script&lang=ts& ***!\n  \\******************************************************************/\n/*! exports provided: default, NotifierComponent */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4328249__) {\n\n\"use strict\";\n__nested_webpack_require_4328249__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_notifier_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4328249__(/*! -!../../../node_modules/ts-loader??ref--0!../../../node_modules/vue-loader/lib??vue-loader-options!./notifier.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/notifier.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4328249__.d(__nested_webpack_exports__, \"NotifierComponent\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_notifier_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"NotifierComponent\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_notifier_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/notifier.vue?vue&type=template&id=2d93edad&\":\n/*!************************************************************************!*\\\n  !*** ./src/vue/components/notifier.vue?vue&type=template&id=2d93edad& ***!\n  \\************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4329780__) {\n\n\"use strict\";\n__nested_webpack_require_4329780__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_notifier_vue_vue_type_template_id_2d93edad___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4329780__(/*! -!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/vue-loader/lib??vue-loader-options!./notifier.vue?vue&type=template&id=2d93edad& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/notifier.vue?vue&type=template&id=2d93edad&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4329780__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_notifier_vue_vue_type_template_id_2d93edad___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4329780__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_notifier_vue_vue_type_template_id_2d93edad___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/paneldynamic-actions/paneldynamic-add-btn.vue\":\n/*!**************************************************************************!*\\\n  !*** ./src/vue/components/paneldynamic-actions/paneldynamic-add-btn.vue ***!\n  \\**************************************************************************/\n/*! exports provided: PaneldynamicAction, PanelDynamicAddBtn, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4331581__) {\n\n\"use strict\";\n__nested_webpack_require_4331581__.r(__nested_webpack_exports__);\n/* harmony import */ var _paneldynamic_add_btn_vue_vue_type_template_id_247e54cb___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4331581__(/*! ./paneldynamic-add-btn.vue?vue&type=template&id=247e54cb& */ \"./src/vue/components/paneldynamic-actions/paneldynamic-add-btn.vue?vue&type=template&id=247e54cb&\");\n/* harmony import */ var _paneldynamic_add_btn_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4331581__(/*! ./paneldynamic-add-btn.vue?vue&type=script&lang=ts& */ \"./src/vue/components/paneldynamic-actions/paneldynamic-add-btn.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4331581__.d(__nested_webpack_exports__, \"PaneldynamicAction\", function() { return _paneldynamic_add_btn_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"PaneldynamicAction\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4331581__.d(__nested_webpack_exports__, \"PanelDynamicAddBtn\", function() { return _paneldynamic_add_btn_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"PanelDynamicAddBtn\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4331581__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _paneldynamic_add_btn_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _paneldynamic_add_btn_vue_vue_type_template_id_247e54cb___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _paneldynamic_add_btn_vue_vue_type_template_id_247e54cb___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/paneldynamic-actions/paneldynamic-add-btn.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/paneldynamic-actions/paneldynamic-add-btn.vue?vue&type=script&lang=ts&\":\n/*!***************************************************************************************************!*\\\n  !*** ./src/vue/components/paneldynamic-actions/paneldynamic-add-btn.vue?vue&type=script&lang=ts& ***!\n  \\***************************************************************************************************/\n/*! exports provided: default, PaneldynamicAction, PanelDynamicAddBtn */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4334229__) {\n\n\"use strict\";\n__nested_webpack_require_4334229__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamic_add_btn_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4334229__(/*! -!../../../../node_modules/ts-loader??ref--0!../../../../node_modules/vue-loader/lib??vue-loader-options!./paneldynamic-add-btn.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/paneldynamic-actions/paneldynamic-add-btn.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4334229__.d(__nested_webpack_exports__, \"PaneldynamicAction\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamic_add_btn_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"PaneldynamicAction\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4334229__.d(__nested_webpack_exports__, \"PanelDynamicAddBtn\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamic_add_btn_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"PanelDynamicAddBtn\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamic_add_btn_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/paneldynamic-actions/paneldynamic-add-btn.vue?vue&type=template&id=247e54cb&\":\n/*!*********************************************************************************************************!*\\\n  !*** ./src/vue/components/paneldynamic-actions/paneldynamic-add-btn.vue?vue&type=template&id=247e54cb& ***!\n  \\*********************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4336298__) {\n\n\"use strict\";\n__nested_webpack_require_4336298__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamic_add_btn_vue_vue_type_template_id_247e54cb___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4336298__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./paneldynamic-add-btn.vue?vue&type=template&id=247e54cb& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/paneldynamic-actions/paneldynamic-add-btn.vue?vue&type=template&id=247e54cb&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4336298__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamic_add_btn_vue_vue_type_template_id_247e54cb___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4336298__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamic_add_btn_vue_vue_type_template_id_247e54cb___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/paneldynamic-actions/paneldynamic-next-btn.vue\":\n/*!***************************************************************************!*\\\n  !*** ./src/vue/components/paneldynamic-actions/paneldynamic-next-btn.vue ***!\n  \\***************************************************************************/\n/*! exports provided: PanelDynamicNextBtn, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4338171__) {\n\n\"use strict\";\n__nested_webpack_require_4338171__.r(__nested_webpack_exports__);\n/* harmony import */ var _paneldynamic_next_btn_vue_vue_type_template_id_6cc1c777___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4338171__(/*! ./paneldynamic-next-btn.vue?vue&type=template&id=6cc1c777& */ \"./src/vue/components/paneldynamic-actions/paneldynamic-next-btn.vue?vue&type=template&id=6cc1c777&\");\n/* harmony import */ var _paneldynamic_next_btn_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4338171__(/*! ./paneldynamic-next-btn.vue?vue&type=script&lang=ts& */ \"./src/vue/components/paneldynamic-actions/paneldynamic-next-btn.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4338171__.d(__nested_webpack_exports__, \"PanelDynamicNextBtn\", function() { return _paneldynamic_next_btn_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"PanelDynamicNextBtn\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4338171__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _paneldynamic_next_btn_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _paneldynamic_next_btn_vue_vue_type_template_id_6cc1c777___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _paneldynamic_next_btn_vue_vue_type_template_id_6cc1c777___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/paneldynamic-actions/paneldynamic-next-btn.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/paneldynamic-actions/paneldynamic-next-btn.vue?vue&type=script&lang=ts&\":\n/*!****************************************************************************************************!*\\\n  !*** ./src/vue/components/paneldynamic-actions/paneldynamic-next-btn.vue?vue&type=script&lang=ts& ***!\n  \\****************************************************************************************************/\n/*! exports provided: default, PanelDynamicNextBtn */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4340594__) {\n\n\"use strict\";\n__nested_webpack_require_4340594__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamic_next_btn_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4340594__(/*! -!../../../../node_modules/ts-loader??ref--0!../../../../node_modules/vue-loader/lib??vue-loader-options!./paneldynamic-next-btn.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/paneldynamic-actions/paneldynamic-next-btn.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4340594__.d(__nested_webpack_exports__, \"PanelDynamicNextBtn\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamic_next_btn_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"PanelDynamicNextBtn\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamic_next_btn_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/paneldynamic-actions/paneldynamic-next-btn.vue?vue&type=template&id=6cc1c777&\":\n/*!**********************************************************************************************************!*\\\n  !*** ./src/vue/components/paneldynamic-actions/paneldynamic-next-btn.vue?vue&type=template&id=6cc1c777& ***!\n  \\**********************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4342357__) {\n\n\"use strict\";\n__nested_webpack_require_4342357__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamic_next_btn_vue_vue_type_template_id_6cc1c777___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4342357__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./paneldynamic-next-btn.vue?vue&type=template&id=6cc1c777& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/paneldynamic-actions/paneldynamic-next-btn.vue?vue&type=template&id=6cc1c777&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4342357__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamic_next_btn_vue_vue_type_template_id_6cc1c777___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4342357__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamic_next_btn_vue_vue_type_template_id_6cc1c777___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/paneldynamic-actions/paneldynamic-prev-btn.vue\":\n/*!***************************************************************************!*\\\n  !*** ./src/vue/components/paneldynamic-actions/paneldynamic-prev-btn.vue ***!\n  \\***************************************************************************/\n/*! exports provided: PanelDynamicPrevBtn, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4344235__) {\n\n\"use strict\";\n__nested_webpack_require_4344235__.r(__nested_webpack_exports__);\n/* harmony import */ var _paneldynamic_prev_btn_vue_vue_type_template_id_12d79eb7___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4344235__(/*! ./paneldynamic-prev-btn.vue?vue&type=template&id=12d79eb7& */ \"./src/vue/components/paneldynamic-actions/paneldynamic-prev-btn.vue?vue&type=template&id=12d79eb7&\");\n/* harmony import */ var _paneldynamic_prev_btn_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4344235__(/*! ./paneldynamic-prev-btn.vue?vue&type=script&lang=ts& */ \"./src/vue/components/paneldynamic-actions/paneldynamic-prev-btn.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4344235__.d(__nested_webpack_exports__, \"PanelDynamicPrevBtn\", function() { return _paneldynamic_prev_btn_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"PanelDynamicPrevBtn\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4344235__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _paneldynamic_prev_btn_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _paneldynamic_prev_btn_vue_vue_type_template_id_12d79eb7___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _paneldynamic_prev_btn_vue_vue_type_template_id_12d79eb7___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/paneldynamic-actions/paneldynamic-prev-btn.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/paneldynamic-actions/paneldynamic-prev-btn.vue?vue&type=script&lang=ts&\":\n/*!****************************************************************************************************!*\\\n  !*** ./src/vue/components/paneldynamic-actions/paneldynamic-prev-btn.vue?vue&type=script&lang=ts& ***!\n  \\****************************************************************************************************/\n/*! exports provided: default, PanelDynamicPrevBtn */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4346658__) {\n\n\"use strict\";\n__nested_webpack_require_4346658__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamic_prev_btn_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4346658__(/*! -!../../../../node_modules/ts-loader??ref--0!../../../../node_modules/vue-loader/lib??vue-loader-options!./paneldynamic-prev-btn.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/paneldynamic-actions/paneldynamic-prev-btn.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4346658__.d(__nested_webpack_exports__, \"PanelDynamicPrevBtn\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamic_prev_btn_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"PanelDynamicPrevBtn\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamic_prev_btn_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/paneldynamic-actions/paneldynamic-prev-btn.vue?vue&type=template&id=12d79eb7&\":\n/*!**********************************************************************************************************!*\\\n  !*** ./src/vue/components/paneldynamic-actions/paneldynamic-prev-btn.vue?vue&type=template&id=12d79eb7& ***!\n  \\**********************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4348421__) {\n\n\"use strict\";\n__nested_webpack_require_4348421__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamic_prev_btn_vue_vue_type_template_id_12d79eb7___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4348421__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./paneldynamic-prev-btn.vue?vue&type=template&id=12d79eb7& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/paneldynamic-actions/paneldynamic-prev-btn.vue?vue&type=template&id=12d79eb7&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4348421__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamic_prev_btn_vue_vue_type_template_id_12d79eb7___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4348421__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamic_prev_btn_vue_vue_type_template_id_12d79eb7___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/paneldynamic-actions/paneldynamic-progress-text.vue\":\n/*!********************************************************************************!*\\\n  !*** ./src/vue/components/paneldynamic-actions/paneldynamic-progress-text.vue ***!\n  \\********************************************************************************/\n/*! exports provided: PanelDynamicProgressText, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4350324__) {\n\n\"use strict\";\n__nested_webpack_require_4350324__.r(__nested_webpack_exports__);\n/* harmony import */ var _paneldynamic_progress_text_vue_vue_type_template_id_3d8075a8___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4350324__(/*! ./paneldynamic-progress-text.vue?vue&type=template&id=3d8075a8& */ \"./src/vue/components/paneldynamic-actions/paneldynamic-progress-text.vue?vue&type=template&id=3d8075a8&\");\n/* harmony import */ var _paneldynamic_progress_text_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4350324__(/*! ./paneldynamic-progress-text.vue?vue&type=script&lang=ts& */ \"./src/vue/components/paneldynamic-actions/paneldynamic-progress-text.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4350324__.d(__nested_webpack_exports__, \"PanelDynamicProgressText\", function() { return _paneldynamic_progress_text_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"PanelDynamicProgressText\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4350324__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _paneldynamic_progress_text_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _paneldynamic_progress_text_vue_vue_type_template_id_3d8075a8___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _paneldynamic_progress_text_vue_vue_type_template_id_3d8075a8___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/paneldynamic-actions/paneldynamic-progress-text.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/paneldynamic-actions/paneldynamic-progress-text.vue?vue&type=script&lang=ts&\":\n/*!*********************************************************************************************************!*\\\n  !*** ./src/vue/components/paneldynamic-actions/paneldynamic-progress-text.vue?vue&type=script&lang=ts& ***!\n  \\*********************************************************************************************************/\n/*! exports provided: default, PanelDynamicProgressText */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4352837__) {\n\n\"use strict\";\n__nested_webpack_require_4352837__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamic_progress_text_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4352837__(/*! -!../../../../node_modules/ts-loader??ref--0!../../../../node_modules/vue-loader/lib??vue-loader-options!./paneldynamic-progress-text.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/paneldynamic-actions/paneldynamic-progress-text.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4352837__.d(__nested_webpack_exports__, \"PanelDynamicProgressText\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamic_progress_text_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"PanelDynamicProgressText\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamic_progress_text_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/paneldynamic-actions/paneldynamic-progress-text.vue?vue&type=template&id=3d8075a8&\":\n/*!***************************************************************************************************************!*\\\n  !*** ./src/vue/components/paneldynamic-actions/paneldynamic-progress-text.vue?vue&type=template&id=3d8075a8& ***!\n  \\***************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4354655__) {\n\n\"use strict\";\n__nested_webpack_require_4354655__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamic_progress_text_vue_vue_type_template_id_3d8075a8___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4354655__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./paneldynamic-progress-text.vue?vue&type=template&id=3d8075a8& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/paneldynamic-actions/paneldynamic-progress-text.vue?vue&type=template&id=3d8075a8&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4354655__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamic_progress_text_vue_vue_type_template_id_3d8075a8___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4354655__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamic_progress_text_vue_vue_type_template_id_3d8075a8___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/paneldynamic-actions/paneldynamic-remove-btn.vue\":\n/*!*****************************************************************************!*\\\n  !*** ./src/vue/components/paneldynamic-actions/paneldynamic-remove-btn.vue ***!\n  \\*****************************************************************************/\n/*! exports provided: PanelDynamicRemoveButton, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4356571__) {\n\n\"use strict\";\n__nested_webpack_require_4356571__.r(__nested_webpack_exports__);\n/* harmony import */ var _paneldynamic_remove_btn_vue_vue_type_template_id_202e30c8___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4356571__(/*! ./paneldynamic-remove-btn.vue?vue&type=template&id=202e30c8& */ \"./src/vue/components/paneldynamic-actions/paneldynamic-remove-btn.vue?vue&type=template&id=202e30c8&\");\n/* harmony import */ var _paneldynamic_remove_btn_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4356571__(/*! ./paneldynamic-remove-btn.vue?vue&type=script&lang=ts& */ \"./src/vue/components/paneldynamic-actions/paneldynamic-remove-btn.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4356571__.d(__nested_webpack_exports__, \"PanelDynamicRemoveButton\", function() { return _paneldynamic_remove_btn_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"PanelDynamicRemoveButton\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4356571__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _paneldynamic_remove_btn_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _paneldynamic_remove_btn_vue_vue_type_template_id_202e30c8___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _paneldynamic_remove_btn_vue_vue_type_template_id_202e30c8___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/paneldynamic-actions/paneldynamic-remove-btn.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/paneldynamic-actions/paneldynamic-remove-btn.vue?vue&type=script&lang=ts&\":\n/*!******************************************************************************************************!*\\\n  !*** ./src/vue/components/paneldynamic-actions/paneldynamic-remove-btn.vue?vue&type=script&lang=ts& ***!\n  \\******************************************************************************************************/\n/*! exports provided: default, PanelDynamicRemoveButton */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4359039__) {\n\n\"use strict\";\n__nested_webpack_require_4359039__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamic_remove_btn_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4359039__(/*! -!../../../../node_modules/ts-loader??ref--0!../../../../node_modules/vue-loader/lib??vue-loader-options!./paneldynamic-remove-btn.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/paneldynamic-actions/paneldynamic-remove-btn.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4359039__.d(__nested_webpack_exports__, \"PanelDynamicRemoveButton\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamic_remove_btn_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"PanelDynamicRemoveButton\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamic_remove_btn_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/paneldynamic-actions/paneldynamic-remove-btn.vue?vue&type=template&id=202e30c8&\":\n/*!************************************************************************************************************!*\\\n  !*** ./src/vue/components/paneldynamic-actions/paneldynamic-remove-btn.vue?vue&type=template&id=202e30c8& ***!\n  \\************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4360830__) {\n\n\"use strict\";\n__nested_webpack_require_4360830__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamic_remove_btn_vue_vue_type_template_id_202e30c8___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4360830__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./paneldynamic-remove-btn.vue?vue&type=template&id=202e30c8& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/paneldynamic-actions/paneldynamic-remove-btn.vue?vue&type=template&id=202e30c8&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4360830__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamic_remove_btn_vue_vue_type_template_id_202e30c8___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4360830__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamic_remove_btn_vue_vue_type_template_id_202e30c8___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/popup/popup-container.vue\":\n/*!******************************************************!*\\\n  !*** ./src/vue/components/popup/popup-container.vue ***!\n  \\******************************************************/\n/*! exports provided: PopupContainer, showModal, showDialog, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4362652__) {\n\n\"use strict\";\n__nested_webpack_require_4362652__.r(__nested_webpack_exports__);\n/* harmony import */ var _popup_container_vue_vue_type_template_id_c18dfd74___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4362652__(/*! ./popup-container.vue?vue&type=template&id=c18dfd74& */ \"./src/vue/components/popup/popup-container.vue?vue&type=template&id=c18dfd74&\");\n/* harmony import */ var _popup_container_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4362652__(/*! ./popup-container.vue?vue&type=script&lang=ts& */ \"./src/vue/components/popup/popup-container.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4362652__.d(__nested_webpack_exports__, \"PopupContainer\", function() { return _popup_container_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"PopupContainer\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4362652__.d(__nested_webpack_exports__, \"showModal\", function() { return _popup_container_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"showModal\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4362652__.d(__nested_webpack_exports__, \"showDialog\", function() { return _popup_container_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"showDialog\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4362652__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _popup_container_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _popup_container_vue_vue_type_template_id_c18dfd74___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _popup_container_vue_vue_type_template_id_c18dfd74___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/popup/popup-container.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/popup/popup-container.vue?vue&type=script&lang=ts&\":\n/*!*******************************************************************************!*\\\n  !*** ./src/vue/components/popup/popup-container.vue?vue&type=script&lang=ts& ***!\n  \\*******************************************************************************/\n/*! exports provided: default, PopupContainer, showModal, showDialog */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4365290__) {\n\n\"use strict\";\n__nested_webpack_require_4365290__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_container_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4365290__(/*! -!../../../../node_modules/ts-loader??ref--0!../../../../node_modules/vue-loader/lib??vue-loader-options!./popup-container.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/popup/popup-container.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4365290__.d(__nested_webpack_exports__, \"PopupContainer\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_container_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"PopupContainer\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4365290__.d(__nested_webpack_exports__, \"showModal\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_container_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"showModal\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4365290__.d(__nested_webpack_exports__, \"showDialog\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_container_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"showDialog\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_container_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/popup/popup-container.vue?vue&type=template&id=c18dfd74&\":\n/*!*************************************************************************************!*\\\n  !*** ./src/vue/components/popup/popup-container.vue?vue&type=template&id=c18dfd74& ***!\n  \\*************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4367504__) {\n\n\"use strict\";\n__nested_webpack_require_4367504__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_container_vue_vue_type_template_id_c18dfd74___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4367504__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./popup-container.vue?vue&type=template&id=c18dfd74& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/popup/popup-container.vue?vue&type=template&id=c18dfd74&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4367504__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_container_vue_vue_type_template_id_c18dfd74___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4367504__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_container_vue_vue_type_template_id_c18dfd74___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/popup/popup-pointer.vue\":\n/*!****************************************************!*\\\n  !*** ./src/vue/components/popup/popup-pointer.vue ***!\n  \\****************************************************/\n/*! exports provided: PopupPointer, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4369238__) {\n\n\"use strict\";\n__nested_webpack_require_4369238__.r(__nested_webpack_exports__);\n/* harmony import */ var _popup_pointer_vue_vue_type_template_id_00847c42___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4369238__(/*! ./popup-pointer.vue?vue&type=template&id=00847c42& */ \"./src/vue/components/popup/popup-pointer.vue?vue&type=template&id=00847c42&\");\n/* harmony import */ var _popup_pointer_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4369238__(/*! ./popup-pointer.vue?vue&type=script&lang=ts& */ \"./src/vue/components/popup/popup-pointer.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4369238__.d(__nested_webpack_exports__, \"PopupPointer\", function() { return _popup_pointer_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"PopupPointer\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4369238__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _popup_pointer_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _popup_pointer_vue_vue_type_template_id_00847c42___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _popup_pointer_vue_vue_type_template_id_00847c42___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/popup/popup-pointer.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/popup/popup-pointer.vue?vue&type=script&lang=ts&\":\n/*!*****************************************************************************!*\\\n  !*** ./src/vue/components/popup/popup-pointer.vue?vue&type=script&lang=ts& ***!\n  \\*****************************************************************************/\n/*! exports provided: default, PopupPointer */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4371415__) {\n\n\"use strict\";\n__nested_webpack_require_4371415__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_pointer_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4371415__(/*! -!../../../../node_modules/ts-loader??ref--0!../../../../node_modules/vue-loader/lib??vue-loader-options!./popup-pointer.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/popup/popup-pointer.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4371415__.d(__nested_webpack_exports__, \"PopupPointer\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_pointer_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"PopupPointer\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_pointer_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/popup/popup-pointer.vue?vue&type=template&id=00847c42&\":\n/*!***********************************************************************************!*\\\n  !*** ./src/vue/components/popup/popup-pointer.vue?vue&type=template&id=00847c42& ***!\n  \\***********************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4373017__) {\n\n\"use strict\";\n__nested_webpack_require_4373017__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_pointer_vue_vue_type_template_id_00847c42___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4373017__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./popup-pointer.vue?vue&type=template&id=00847c42& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/popup/popup-pointer.vue?vue&type=template&id=00847c42&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4373017__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_pointer_vue_vue_type_template_id_00847c42___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4373017__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_pointer_vue_vue_type_template_id_00847c42___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/popup/popup.vue\":\n/*!********************************************!*\\\n  !*** ./src/vue/components/popup/popup.vue ***!\n  \\********************************************/\n/*! exports provided: Popup, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4374702__) {\n\n\"use strict\";\n__nested_webpack_require_4374702__.r(__nested_webpack_exports__);\n/* harmony import */ var _popup_vue_vue_type_template_id_ef11265c___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4374702__(/*! ./popup.vue?vue&type=template&id=ef11265c& */ \"./src/vue/components/popup/popup.vue?vue&type=template&id=ef11265c&\");\n/* harmony import */ var _popup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4374702__(/*! ./popup.vue?vue&type=script&lang=ts& */ \"./src/vue/components/popup/popup.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4374702__.d(__nested_webpack_exports__, \"Popup\", function() { return _popup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Popup\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4374702__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _popup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _popup_vue_vue_type_template_id_ef11265c___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _popup_vue_vue_type_template_id_ef11265c___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/popup/popup.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/popup/popup.vue?vue&type=script&lang=ts&\":\n/*!*********************************************************************!*\\\n  !*** ./src/vue/components/popup/popup.vue?vue&type=script&lang=ts& ***!\n  \\*********************************************************************/\n/*! exports provided: default, Popup */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4376738__) {\n\n\"use strict\";\n__nested_webpack_require_4376738__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4376738__(/*! -!../../../../node_modules/ts-loader??ref--0!../../../../node_modules/vue-loader/lib??vue-loader-options!./popup.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/popup/popup.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4376738__.d(__nested_webpack_exports__, \"Popup\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Popup\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/popup/popup.vue?vue&type=template&id=ef11265c&\":\n/*!***************************************************************************!*\\\n  !*** ./src/vue/components/popup/popup.vue?vue&type=template&id=ef11265c& ***!\n  \\***************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4378254__) {\n\n\"use strict\";\n__nested_webpack_require_4378254__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_vue_vue_type_template_id_ef11265c___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4378254__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./popup.vue?vue&type=template&id=ef11265c& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/popup/popup.vue?vue&type=template&id=ef11265c&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4378254__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_vue_vue_type_template_id_ef11265c___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4378254__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_vue_vue_type_template_id_ef11265c___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/rating/rating-item-smiley.vue\":\n/*!**********************************************************!*\\\n  !*** ./src/vue/components/rating/rating-item-smiley.vue ***!\n  \\**********************************************************/\n/*! exports provided: RatingItemSmiley, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4379966__) {\n\n\"use strict\";\n__nested_webpack_require_4379966__.r(__nested_webpack_exports__);\n/* harmony import */ var _rating_item_smiley_vue_vue_type_template_id_7da6a776___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4379966__(/*! ./rating-item-smiley.vue?vue&type=template&id=7da6a776& */ \"./src/vue/components/rating/rating-item-smiley.vue?vue&type=template&id=7da6a776&\");\n/* harmony import */ var _rating_item_smiley_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4379966__(/*! ./rating-item-smiley.vue?vue&type=script&lang=ts& */ \"./src/vue/components/rating/rating-item-smiley.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4379966__.d(__nested_webpack_exports__, \"RatingItemSmiley\", function() { return _rating_item_smiley_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"RatingItemSmiley\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4379966__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _rating_item_smiley_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _rating_item_smiley_vue_vue_type_template_id_7da6a776___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _rating_item_smiley_vue_vue_type_template_id_7da6a776___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/rating/rating-item-smiley.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/rating/rating-item-smiley.vue?vue&type=script&lang=ts&\":\n/*!***********************************************************************************!*\\\n  !*** ./src/vue/components/rating/rating-item-smiley.vue?vue&type=script&lang=ts& ***!\n  \\***********************************************************************************/\n/*! exports provided: default, RatingItemSmiley */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4382237__) {\n\n\"use strict\";\n__nested_webpack_require_4382237__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_rating_item_smiley_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4382237__(/*! -!../../../../node_modules/ts-loader??ref--0!../../../../node_modules/vue-loader/lib??vue-loader-options!./rating-item-smiley.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/rating/rating-item-smiley.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4382237__.d(__nested_webpack_exports__, \"RatingItemSmiley\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_rating_item_smiley_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"RatingItemSmiley\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_rating_item_smiley_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/rating/rating-item-smiley.vue?vue&type=template&id=7da6a776&\":\n/*!*****************************************************************************************!*\\\n  !*** ./src/vue/components/rating/rating-item-smiley.vue?vue&type=template&id=7da6a776& ***!\n  \\*****************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4383897__) {\n\n\"use strict\";\n__nested_webpack_require_4383897__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_rating_item_smiley_vue_vue_type_template_id_7da6a776___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4383897__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./rating-item-smiley.vue?vue&type=template&id=7da6a776& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/rating/rating-item-smiley.vue?vue&type=template&id=7da6a776&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4383897__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_rating_item_smiley_vue_vue_type_template_id_7da6a776___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4383897__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_rating_item_smiley_vue_vue_type_template_id_7da6a776___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/rating/rating-item-star.vue\":\n/*!********************************************************!*\\\n  !*** ./src/vue/components/rating/rating-item-star.vue ***!\n  \\********************************************************/\n/*! exports provided: RatingItemStar, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4385665__) {\n\n\"use strict\";\n__nested_webpack_require_4385665__.r(__nested_webpack_exports__);\n/* harmony import */ var _rating_item_star_vue_vue_type_template_id_5d03fe17___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4385665__(/*! ./rating-item-star.vue?vue&type=template&id=5d03fe17& */ \"./src/vue/components/rating/rating-item-star.vue?vue&type=template&id=5d03fe17&\");\n/* harmony import */ var _rating_item_star_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4385665__(/*! ./rating-item-star.vue?vue&type=script&lang=ts& */ \"./src/vue/components/rating/rating-item-star.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4385665__.d(__nested_webpack_exports__, \"RatingItemStar\", function() { return _rating_item_star_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"RatingItemStar\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4385665__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _rating_item_star_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _rating_item_star_vue_vue_type_template_id_5d03fe17___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _rating_item_star_vue_vue_type_template_id_5d03fe17___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/rating/rating-item-star.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/rating/rating-item-star.vue?vue&type=script&lang=ts&\":\n/*!*********************************************************************************!*\\\n  !*** ./src/vue/components/rating/rating-item-star.vue?vue&type=script&lang=ts& ***!\n  \\*********************************************************************************/\n/*! exports provided: default, RatingItemStar */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4387900__) {\n\n\"use strict\";\n__nested_webpack_require_4387900__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_rating_item_star_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4387900__(/*! -!../../../../node_modules/ts-loader??ref--0!../../../../node_modules/vue-loader/lib??vue-loader-options!./rating-item-star.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/rating/rating-item-star.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4387900__.d(__nested_webpack_exports__, \"RatingItemStar\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_rating_item_star_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"RatingItemStar\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_rating_item_star_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/rating/rating-item-star.vue?vue&type=template&id=5d03fe17&\":\n/*!***************************************************************************************!*\\\n  !*** ./src/vue/components/rating/rating-item-star.vue?vue&type=template&id=5d03fe17& ***!\n  \\***************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4389538__) {\n\n\"use strict\";\n__nested_webpack_require_4389538__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_rating_item_star_vue_vue_type_template_id_5d03fe17___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4389538__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./rating-item-star.vue?vue&type=template&id=5d03fe17& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/rating/rating-item-star.vue?vue&type=template&id=5d03fe17&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4389538__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_rating_item_star_vue_vue_type_template_id_5d03fe17___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4389538__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_rating_item_star_vue_vue_type_template_id_5d03fe17___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/rating/rating-item.vue\":\n/*!***************************************************!*\\\n  !*** ./src/vue/components/rating/rating-item.vue ***!\n  \\***************************************************/\n/*! exports provided: RatingItem, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4391272__) {\n\n\"use strict\";\n__nested_webpack_require_4391272__.r(__nested_webpack_exports__);\n/* harmony import */ var _rating_item_vue_vue_type_template_id_38c2d0d0___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4391272__(/*! ./rating-item.vue?vue&type=template&id=38c2d0d0& */ \"./src/vue/components/rating/rating-item.vue?vue&type=template&id=38c2d0d0&\");\n/* harmony import */ var _rating_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4391272__(/*! ./rating-item.vue?vue&type=script&lang=ts& */ \"./src/vue/components/rating/rating-item.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4391272__.d(__nested_webpack_exports__, \"RatingItem\", function() { return _rating_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"RatingItem\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4391272__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _rating_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _rating_item_vue_vue_type_template_id_38c2d0d0___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _rating_item_vue_vue_type_template_id_38c2d0d0___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/rating/rating-item.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/rating/rating-item.vue?vue&type=script&lang=ts&\":\n/*!****************************************************************************!*\\\n  !*** ./src/vue/components/rating/rating-item.vue?vue&type=script&lang=ts& ***!\n  \\****************************************************************************/\n/*! exports provided: default, RatingItem */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4393420__) {\n\n\"use strict\";\n__nested_webpack_require_4393420__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_rating_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4393420__(/*! -!../../../../node_modules/ts-loader??ref--0!../../../../node_modules/vue-loader/lib??vue-loader-options!./rating-item.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/rating/rating-item.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4393420__.d(__nested_webpack_exports__, \"RatingItem\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_rating_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"RatingItem\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_rating_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/rating/rating-item.vue?vue&type=template&id=38c2d0d0&\":\n/*!**********************************************************************************!*\\\n  !*** ./src/vue/components/rating/rating-item.vue?vue&type=template&id=38c2d0d0& ***!\n  \\**********************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4395005__) {\n\n\"use strict\";\n__nested_webpack_require_4395005__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_rating_item_vue_vue_type_template_id_38c2d0d0___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4395005__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./rating-item.vue?vue&type=template&id=38c2d0d0& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/rating/rating-item.vue?vue&type=template&id=38c2d0d0&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4395005__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_rating_item_vue_vue_type_template_id_38c2d0d0___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4395005__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_rating_item_vue_vue_type_template_id_38c2d0d0___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/skeleton.vue\":\n/*!*****************************************!*\\\n  !*** ./src/vue/components/skeleton.vue ***!\n  \\*****************************************/\n/*! exports provided: Skeleton, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4396672__) {\n\n\"use strict\";\n__nested_webpack_require_4396672__.r(__nested_webpack_exports__);\n/* harmony import */ var _skeleton_vue_vue_type_template_id_5bd480d4___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4396672__(/*! ./skeleton.vue?vue&type=template&id=5bd480d4& */ \"./src/vue/components/skeleton.vue?vue&type=template&id=5bd480d4&\");\n/* harmony import */ var _skeleton_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4396672__(/*! ./skeleton.vue?vue&type=script&lang=ts& */ \"./src/vue/components/skeleton.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4396672__.d(__nested_webpack_exports__, \"Skeleton\", function() { return _skeleton_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Skeleton\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4396672__(/*! ../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _skeleton_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _skeleton_vue_vue_type_template_id_5bd480d4___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _skeleton_vue_vue_type_template_id_5bd480d4___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/skeleton.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/skeleton.vue?vue&type=script&lang=ts&\":\n/*!******************************************************************!*\\\n  !*** ./src/vue/components/skeleton.vue?vue&type=script&lang=ts& ***!\n  \\******************************************************************/\n/*! exports provided: default, Skeleton */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4398717__) {\n\n\"use strict\";\n__nested_webpack_require_4398717__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_skeleton_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4398717__(/*! -!../../../node_modules/ts-loader??ref--0!../../../node_modules/vue-loader/lib??vue-loader-options!./skeleton.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/skeleton.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4398717__.d(__nested_webpack_exports__, \"Skeleton\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_skeleton_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Skeleton\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_skeleton_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/skeleton.vue?vue&type=template&id=5bd480d4&\":\n/*!************************************************************************!*\\\n  !*** ./src/vue/components/skeleton.vue?vue&type=template&id=5bd480d4& ***!\n  \\************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4400230__) {\n\n\"use strict\";\n__nested_webpack_require_4400230__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_skeleton_vue_vue_type_template_id_5bd480d4___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4400230__(/*! -!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/vue-loader/lib??vue-loader-options!./skeleton.vue?vue&type=template&id=5bd480d4& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/skeleton.vue?vue&type=template&id=5bd480d4&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4400230__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_skeleton_vue_vue_type_template_id_5bd480d4___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4400230__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_skeleton_vue_vue_type_template_id_5bd480d4___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/survey-actions/survey-nav-button.vue\":\n/*!*****************************************************************!*\\\n  !*** ./src/vue/components/survey-actions/survey-nav-button.vue ***!\n  \\*****************************************************************/\n/*! exports provided: SurveyNavigationButton, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4401979__) {\n\n\"use strict\";\n__nested_webpack_require_4401979__.r(__nested_webpack_exports__);\n/* harmony import */ var _survey_nav_button_vue_vue_type_template_id_3760119e___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4401979__(/*! ./survey-nav-button.vue?vue&type=template&id=3760119e& */ \"./src/vue/components/survey-actions/survey-nav-button.vue?vue&type=template&id=3760119e&\");\n/* harmony import */ var _survey_nav_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4401979__(/*! ./survey-nav-button.vue?vue&type=script&lang=ts& */ \"./src/vue/components/survey-actions/survey-nav-button.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4401979__.d(__nested_webpack_exports__, \"SurveyNavigationButton\", function() { return _survey_nav_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"SurveyNavigationButton\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4401979__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _survey_nav_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _survey_nav_button_vue_vue_type_template_id_3760119e___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _survey_nav_button_vue_vue_type_template_id_3760119e___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/survey-actions/survey-nav-button.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/survey-actions/survey-nav-button.vue?vue&type=script&lang=ts&\":\n/*!******************************************************************************************!*\\\n  !*** ./src/vue/components/survey-actions/survey-nav-button.vue?vue&type=script&lang=ts& ***!\n  \\******************************************************************************************/\n/*! exports provided: default, SurveyNavigationButton */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4404309__) {\n\n\"use strict\";\n__nested_webpack_require_4404309__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_survey_nav_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4404309__(/*! -!../../../../node_modules/ts-loader??ref--0!../../../../node_modules/vue-loader/lib??vue-loader-options!./survey-nav-button.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/survey-actions/survey-nav-button.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4404309__.d(__nested_webpack_exports__, \"SurveyNavigationButton\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_survey_nav_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"SurveyNavigationButton\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_survey_nav_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/survey-actions/survey-nav-button.vue?vue&type=template&id=3760119e&\":\n/*!************************************************************************************************!*\\\n  !*** ./src/vue/components/survey-actions/survey-nav-button.vue?vue&type=template&id=3760119e& ***!\n  \\************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4406012__) {\n\n\"use strict\";\n__nested_webpack_require_4406012__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_survey_nav_button_vue_vue_type_template_id_3760119e___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4406012__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./survey-nav-button.vue?vue&type=template&id=3760119e& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/survey-actions/survey-nav-button.vue?vue&type=template&id=3760119e&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4406012__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_survey_nav_button_vue_vue_type_template_id_3760119e___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4406012__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_survey_nav_button_vue_vue_type_template_id_3760119e___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/svg-icon/svg-icon.vue\":\n/*!**************************************************!*\\\n  !*** ./src/vue/components/svg-icon/svg-icon.vue ***!\n  \\**************************************************/\n/*! exports provided: SvgIcon, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4407752__) {\n\n\"use strict\";\n__nested_webpack_require_4407752__.r(__nested_webpack_exports__);\n/* harmony import */ var _svg_icon_vue_vue_type_template_id_684776f8___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4407752__(/*! ./svg-icon.vue?vue&type=template&id=684776f8& */ \"./src/vue/components/svg-icon/svg-icon.vue?vue&type=template&id=684776f8&\");\n/* harmony import */ var _svg_icon_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4407752__(/*! ./svg-icon.vue?vue&type=script&lang=ts& */ \"./src/vue/components/svg-icon/svg-icon.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4407752__.d(__nested_webpack_exports__, \"SvgIcon\", function() { return _svg_icon_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"SvgIcon\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4407752__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _svg_icon_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _svg_icon_vue_vue_type_template_id_684776f8___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _svg_icon_vue_vue_type_template_id_684776f8___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/svg-icon/svg-icon.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/svg-icon/svg-icon.vue?vue&type=script&lang=ts&\":\n/*!***************************************************************************!*\\\n  !*** ./src/vue/components/svg-icon/svg-icon.vue?vue&type=script&lang=ts& ***!\n  \\***************************************************************************/\n/*! exports provided: default, SvgIcon */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4409860__) {\n\n\"use strict\";\n__nested_webpack_require_4409860__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_svg_icon_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4409860__(/*! -!../../../../node_modules/ts-loader??ref--0!../../../../node_modules/vue-loader/lib??vue-loader-options!./svg-icon.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/svg-icon/svg-icon.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4409860__.d(__nested_webpack_exports__, \"SvgIcon\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_svg_icon_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"SvgIcon\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_svg_icon_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/svg-icon/svg-icon.vue?vue&type=template&id=684776f8&\":\n/*!*********************************************************************************!*\\\n  !*** ./src/vue/components/svg-icon/svg-icon.vue?vue&type=template&id=684776f8& ***!\n  \\*********************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4411422__) {\n\n\"use strict\";\n__nested_webpack_require_4411422__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_svg_icon_vue_vue_type_template_id_684776f8___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4411422__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./svg-icon.vue?vue&type=template&id=684776f8& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/svg-icon/svg-icon.vue?vue&type=template&id=684776f8&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4411422__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_svg_icon_vue_vue_type_template_id_684776f8___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4411422__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_svg_icon_vue_vue_type_template_id_684776f8___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/tagbox/tagbox-filter.vue\":\n/*!*****************************************************!*\\\n  !*** ./src/vue/components/tagbox/tagbox-filter.vue ***!\n  \\*****************************************************/\n/*! exports provided: TagboxFilterComponent, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4413137__) {\n\n\"use strict\";\n__nested_webpack_require_4413137__.r(__nested_webpack_exports__);\n/* harmony import */ var _tagbox_filter_vue_vue_type_template_id_dc2bc686___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4413137__(/*! ./tagbox-filter.vue?vue&type=template&id=dc2bc686& */ \"./src/vue/components/tagbox/tagbox-filter.vue?vue&type=template&id=dc2bc686&\");\n/* harmony import */ var _tagbox_filter_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4413137__(/*! ./tagbox-filter.vue?vue&type=script&lang=ts& */ \"./src/vue/components/tagbox/tagbox-filter.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4413137__.d(__nested_webpack_exports__, \"TagboxFilterComponent\", function() { return _tagbox_filter_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"TagboxFilterComponent\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4413137__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _tagbox_filter_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _tagbox_filter_vue_vue_type_template_id_dc2bc686___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _tagbox_filter_vue_vue_type_template_id_dc2bc686___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/tagbox/tagbox-filter.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/tagbox/tagbox-filter.vue?vue&type=script&lang=ts&\":\n/*!******************************************************************************!*\\\n  !*** ./src/vue/components/tagbox/tagbox-filter.vue?vue&type=script&lang=ts& ***!\n  \\******************************************************************************/\n/*! exports provided: default, TagboxFilterComponent */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4415348__) {\n\n\"use strict\";\n__nested_webpack_require_4415348__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_tagbox_filter_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4415348__(/*! -!../../../../node_modules/ts-loader??ref--0!../../../../node_modules/vue-loader/lib??vue-loader-options!./tagbox-filter.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/tagbox/tagbox-filter.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4415348__.d(__nested_webpack_exports__, \"TagboxFilterComponent\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_tagbox_filter_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"TagboxFilterComponent\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_tagbox_filter_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/tagbox/tagbox-filter.vue?vue&type=template&id=dc2bc686&\":\n/*!************************************************************************************!*\\\n  !*** ./src/vue/components/tagbox/tagbox-filter.vue?vue&type=template&id=dc2bc686& ***!\n  \\************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4416973__) {\n\n\"use strict\";\n__nested_webpack_require_4416973__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_tagbox_filter_vue_vue_type_template_id_dc2bc686___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4416973__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./tagbox-filter.vue?vue&type=template&id=dc2bc686& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/tagbox/tagbox-filter.vue?vue&type=template&id=dc2bc686&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4416973__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_tagbox_filter_vue_vue_type_template_id_dc2bc686___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4416973__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_tagbox_filter_vue_vue_type_template_id_dc2bc686___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/tagbox/tagbox-item.vue\":\n/*!***************************************************!*\\\n  !*** ./src/vue/components/tagbox/tagbox-item.vue ***!\n  \\***************************************************/\n/*! exports provided: TagboxItem, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4418692__) {\n\n\"use strict\";\n__nested_webpack_require_4418692__.r(__nested_webpack_exports__);\n/* harmony import */ var _tagbox_item_vue_vue_type_template_id_46c763d0___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4418692__(/*! ./tagbox-item.vue?vue&type=template&id=46c763d0& */ \"./src/vue/components/tagbox/tagbox-item.vue?vue&type=template&id=46c763d0&\");\n/* harmony import */ var _tagbox_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4418692__(/*! ./tagbox-item.vue?vue&type=script&lang=ts& */ \"./src/vue/components/tagbox/tagbox-item.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4418692__.d(__nested_webpack_exports__, \"TagboxItem\", function() { return _tagbox_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"TagboxItem\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4418692__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _tagbox_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _tagbox_item_vue_vue_type_template_id_46c763d0___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _tagbox_item_vue_vue_type_template_id_46c763d0___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/tagbox/tagbox-item.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/tagbox/tagbox-item.vue?vue&type=script&lang=ts&\":\n/*!****************************************************************************!*\\\n  !*** ./src/vue/components/tagbox/tagbox-item.vue?vue&type=script&lang=ts& ***!\n  \\****************************************************************************/\n/*! exports provided: default, TagboxItem */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4420840__) {\n\n\"use strict\";\n__nested_webpack_require_4420840__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_tagbox_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4420840__(/*! -!../../../../node_modules/ts-loader??ref--0!../../../../node_modules/vue-loader/lib??vue-loader-options!./tagbox-item.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/tagbox/tagbox-item.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4420840__.d(__nested_webpack_exports__, \"TagboxItem\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_tagbox_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"TagboxItem\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_tagbox_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/tagbox/tagbox-item.vue?vue&type=template&id=46c763d0&\":\n/*!**********************************************************************************!*\\\n  !*** ./src/vue/components/tagbox/tagbox-item.vue?vue&type=template&id=46c763d0& ***!\n  \\**********************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4422425__) {\n\n\"use strict\";\n__nested_webpack_require_4422425__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_tagbox_item_vue_vue_type_template_id_46c763d0___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4422425__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./tagbox-item.vue?vue&type=template&id=46c763d0& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/tagbox/tagbox-item.vue?vue&type=template&id=46c763d0&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4422425__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_tagbox_item_vue_vue_type_template_id_46c763d0___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4422425__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_tagbox_item_vue_vue_type_template_id_46c763d0___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/tagbox/tagbox.vue\":\n/*!**********************************************!*\\\n  !*** ./src/vue/components/tagbox/tagbox.vue ***!\n  \\**********************************************/\n/*! exports provided: TagboxComponent, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4424119__) {\n\n\"use strict\";\n__nested_webpack_require_4424119__.r(__nested_webpack_exports__);\n/* harmony import */ var _tagbox_vue_vue_type_template_id_a15fc850___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4424119__(/*! ./tagbox.vue?vue&type=template&id=a15fc850& */ \"./src/vue/components/tagbox/tagbox.vue?vue&type=template&id=a15fc850&\");\n/* harmony import */ var _tagbox_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4424119__(/*! ./tagbox.vue?vue&type=script&lang=ts& */ \"./src/vue/components/tagbox/tagbox.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4424119__.d(__nested_webpack_exports__, \"TagboxComponent\", function() { return _tagbox_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"TagboxComponent\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4424119__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _tagbox_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _tagbox_vue_vue_type_template_id_a15fc850___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _tagbox_vue_vue_type_template_id_a15fc850___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/tagbox/tagbox.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/tagbox/tagbox.vue?vue&type=script&lang=ts&\":\n/*!***********************************************************************!*\\\n  !*** ./src/vue/components/tagbox/tagbox.vue?vue&type=script&lang=ts& ***!\n  \\***********************************************************************/\n/*! exports provided: default, TagboxComponent */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4426207__) {\n\n\"use strict\";\n__nested_webpack_require_4426207__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_tagbox_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4426207__(/*! -!../../../../node_modules/ts-loader??ref--0!../../../../node_modules/vue-loader/lib??vue-loader-options!./tagbox.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/tagbox/tagbox.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4426207__.d(__nested_webpack_exports__, \"TagboxComponent\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_tagbox_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"TagboxComponent\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_tagbox_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/tagbox/tagbox.vue?vue&type=template&id=a15fc850&\":\n/*!*****************************************************************************!*\\\n  !*** ./src/vue/components/tagbox/tagbox.vue?vue&type=template&id=a15fc850& ***!\n  \\*****************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4427757__) {\n\n\"use strict\";\n__nested_webpack_require_4427757__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_tagbox_vue_vue_type_template_id_a15fc850___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4427757__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./tagbox.vue?vue&type=template&id=a15fc850& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/tagbox/tagbox.vue?vue&type=template&id=a15fc850&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4427757__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_tagbox_vue_vue_type_template_id_a15fc850___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4427757__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_tagbox_vue_vue_type_template_id_a15fc850___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/title/title-actions.vue\":\n/*!****************************************************!*\\\n  !*** ./src/vue/components/title/title-actions.vue ***!\n  \\****************************************************/\n/*! exports provided: TitleActions, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4429447__) {\n\n\"use strict\";\n__nested_webpack_require_4429447__.r(__nested_webpack_exports__);\n/* harmony import */ var _title_actions_vue_vue_type_template_id_c938554c___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4429447__(/*! ./title-actions.vue?vue&type=template&id=c938554c& */ \"./src/vue/components/title/title-actions.vue?vue&type=template&id=c938554c&\");\n/* harmony import */ var _title_actions_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4429447__(/*! ./title-actions.vue?vue&type=script&lang=ts& */ \"./src/vue/components/title/title-actions.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4429447__.d(__nested_webpack_exports__, \"TitleActions\", function() { return _title_actions_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"TitleActions\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4429447__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _title_actions_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _title_actions_vue_vue_type_template_id_c938554c___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _title_actions_vue_vue_type_template_id_c938554c___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/title/title-actions.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/title/title-actions.vue?vue&type=script&lang=ts&\":\n/*!*****************************************************************************!*\\\n  !*** ./src/vue/components/title/title-actions.vue?vue&type=script&lang=ts& ***!\n  \\*****************************************************************************/\n/*! exports provided: default, TitleActions */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4431624__) {\n\n\"use strict\";\n__nested_webpack_require_4431624__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_title_actions_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4431624__(/*! -!../../../../node_modules/ts-loader??ref--0!../../../../node_modules/vue-loader/lib??vue-loader-options!./title-actions.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/title/title-actions.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4431624__.d(__nested_webpack_exports__, \"TitleActions\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_title_actions_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"TitleActions\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_title_actions_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/title/title-actions.vue?vue&type=template&id=c938554c&\":\n/*!***********************************************************************************!*\\\n  !*** ./src/vue/components/title/title-actions.vue?vue&type=template&id=c938554c& ***!\n  \\***********************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4433226__) {\n\n\"use strict\";\n__nested_webpack_require_4433226__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_title_actions_vue_vue_type_template_id_c938554c___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4433226__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./title-actions.vue?vue&type=template&id=c938554c& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/title/title-actions.vue?vue&type=template&id=c938554c&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4433226__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_title_actions_vue_vue_type_template_id_c938554c___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4433226__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_title_actions_vue_vue_type_template_id_c938554c___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/title/title-content.vue\":\n/*!****************************************************!*\\\n  !*** ./src/vue/components/title/title-content.vue ***!\n  \\****************************************************/\n/*! exports provided: TitleContent, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4434950__) {\n\n\"use strict\";\n__nested_webpack_require_4434950__.r(__nested_webpack_exports__);\n/* harmony import */ var _title_content_vue_vue_type_template_id_24c0a2d6___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4434950__(/*! ./title-content.vue?vue&type=template&id=24c0a2d6& */ \"./src/vue/components/title/title-content.vue?vue&type=template&id=24c0a2d6&\");\n/* harmony import */ var _title_content_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4434950__(/*! ./title-content.vue?vue&type=script&lang=ts& */ \"./src/vue/components/title/title-content.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4434950__.d(__nested_webpack_exports__, \"TitleContent\", function() { return _title_content_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"TitleContent\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4434950__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _title_content_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _title_content_vue_vue_type_template_id_24c0a2d6___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _title_content_vue_vue_type_template_id_24c0a2d6___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/title/title-content.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/title/title-content.vue?vue&type=script&lang=ts&\":\n/*!*****************************************************************************!*\\\n  !*** ./src/vue/components/title/title-content.vue?vue&type=script&lang=ts& ***!\n  \\*****************************************************************************/\n/*! exports provided: default, TitleContent */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4437127__) {\n\n\"use strict\";\n__nested_webpack_require_4437127__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_title_content_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4437127__(/*! -!../../../../node_modules/ts-loader??ref--0!../../../../node_modules/vue-loader/lib??vue-loader-options!./title-content.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/title/title-content.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4437127__.d(__nested_webpack_exports__, \"TitleContent\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_title_content_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"TitleContent\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_title_content_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/title/title-content.vue?vue&type=template&id=24c0a2d6&\":\n/*!***********************************************************************************!*\\\n  !*** ./src/vue/components/title/title-content.vue?vue&type=template&id=24c0a2d6& ***!\n  \\***********************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4438729__) {\n\n\"use strict\";\n__nested_webpack_require_4438729__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_title_content_vue_vue_type_template_id_24c0a2d6___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4438729__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./title-content.vue?vue&type=template&id=24c0a2d6& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/title/title-content.vue?vue&type=template&id=24c0a2d6&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4438729__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_title_content_vue_vue_type_template_id_24c0a2d6___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4438729__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_title_content_vue_vue_type_template_id_24c0a2d6___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/title/title-element.vue\":\n/*!****************************************************!*\\\n  !*** ./src/vue/components/title/title-element.vue ***!\n  \\****************************************************/\n/*! exports provided: TitleElement, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4440453__) {\n\n\"use strict\";\n__nested_webpack_require_4440453__.r(__nested_webpack_exports__);\n/* harmony import */ var _title_element_vue_vue_type_template_id_641d93d9___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4440453__(/*! ./title-element.vue?vue&type=template&id=641d93d9& */ \"./src/vue/components/title/title-element.vue?vue&type=template&id=641d93d9&\");\n/* harmony import */ var _title_element_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4440453__(/*! ./title-element.vue?vue&type=script&lang=ts& */ \"./src/vue/components/title/title-element.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4440453__.d(__nested_webpack_exports__, \"TitleElement\", function() { return _title_element_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"TitleElement\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4440453__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _title_element_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _title_element_vue_vue_type_template_id_641d93d9___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _title_element_vue_vue_type_template_id_641d93d9___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/title/title-element.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/title/title-element.vue?vue&type=script&lang=ts&\":\n/*!*****************************************************************************!*\\\n  !*** ./src/vue/components/title/title-element.vue?vue&type=script&lang=ts& ***!\n  \\*****************************************************************************/\n/*! exports provided: default, TitleElement */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4442630__) {\n\n\"use strict\";\n__nested_webpack_require_4442630__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_title_element_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4442630__(/*! -!../../../../node_modules/ts-loader??ref--0!../../../../node_modules/vue-loader/lib??vue-loader-options!./title-element.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/title/title-element.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4442630__.d(__nested_webpack_exports__, \"TitleElement\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_title_element_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"TitleElement\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_title_element_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/title/title-element.vue?vue&type=template&id=641d93d9&\":\n/*!***********************************************************************************!*\\\n  !*** ./src/vue/components/title/title-element.vue?vue&type=template&id=641d93d9& ***!\n  \\***********************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4444232__) {\n\n\"use strict\";\n__nested_webpack_require_4444232__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_title_element_vue_vue_type_template_id_641d93d9___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4444232__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./title-element.vue?vue&type=template&id=641d93d9& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/title/title-element.vue?vue&type=template&id=641d93d9&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4444232__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_title_element_vue_vue_type_template_id_641d93d9___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4444232__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_title_element_vue_vue_type_template_id_641d93d9___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/composite.vue\":\n/*!*******************************!*\\\n  !*** ./src/vue/composite.vue ***!\n  \\*******************************/\n/*! exports provided: Composite, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4445869__) {\n\n\"use strict\";\n__nested_webpack_require_4445869__.r(__nested_webpack_exports__);\n/* harmony import */ var _composite_vue_vue_type_template_id_1a9e2196___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4445869__(/*! ./composite.vue?vue&type=template&id=1a9e2196& */ \"./src/vue/composite.vue?vue&type=template&id=1a9e2196&\");\n/* harmony import */ var _composite_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4445869__(/*! ./composite.vue?vue&type=script&lang=ts& */ \"./src/vue/composite.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4445869__.d(__nested_webpack_exports__, \"Composite\", function() { return _composite_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Composite\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4445869__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _composite_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _composite_vue_vue_type_template_id_1a9e2196___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _composite_vue_vue_type_template_id_1a9e2196___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/composite.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/composite.vue?vue&type=script&lang=ts&\":\n/*!********************************************************!*\\\n  !*** ./src/vue/composite.vue?vue&type=script&lang=ts& ***!\n  \\********************************************************/\n/*! exports provided: default, Composite */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4447852__) {\n\n\"use strict\";\n__nested_webpack_require_4447852__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_composite_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4447852__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./composite.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/composite.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4447852__.d(__nested_webpack_exports__, \"Composite\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_composite_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Composite\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_composite_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/composite.vue?vue&type=template&id=1a9e2196&\":\n/*!**************************************************************!*\\\n  !*** ./src/vue/composite.vue?vue&type=template&id=1a9e2196& ***!\n  \\**************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4449315__) {\n\n\"use strict\";\n__nested_webpack_require_4449315__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_composite_vue_vue_type_template_id_1a9e2196___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4449315__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./composite.vue?vue&type=template&id=1a9e2196& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/composite.vue?vue&type=template&id=1a9e2196&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4449315__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_composite_vue_vue_type_template_id_1a9e2196___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4449315__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_composite_vue_vue_type_template_id_1a9e2196___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/custom.vue\":\n/*!****************************!*\\\n  !*** ./src/vue/custom.vue ***!\n  \\****************************/\n/*! exports provided: Custom, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4450888__) {\n\n\"use strict\";\n__nested_webpack_require_4450888__.r(__nested_webpack_exports__);\n/* harmony import */ var _custom_vue_vue_type_template_id_d4aae09a___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4450888__(/*! ./custom.vue?vue&type=template&id=d4aae09a& */ \"./src/vue/custom.vue?vue&type=template&id=d4aae09a&\");\n/* harmony import */ var _custom_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4450888__(/*! ./custom.vue?vue&type=script&lang=ts& */ \"./src/vue/custom.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4450888__.d(__nested_webpack_exports__, \"Custom\", function() { return _custom_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Custom\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4450888__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _custom_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _custom_vue_vue_type_template_id_d4aae09a___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _custom_vue_vue_type_template_id_d4aae09a___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/custom.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/custom.vue?vue&type=script&lang=ts&\":\n/*!*****************************************************!*\\\n  !*** ./src/vue/custom.vue?vue&type=script&lang=ts& ***!\n  \\*****************************************************/\n/*! exports provided: default, Custom */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4452817__) {\n\n\"use strict\";\n__nested_webpack_require_4452817__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_custom_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4452817__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./custom.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/custom.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4452817__.d(__nested_webpack_exports__, \"Custom\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_custom_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Custom\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_custom_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/custom.vue?vue&type=template&id=d4aae09a&\":\n/*!***********************************************************!*\\\n  !*** ./src/vue/custom.vue?vue&type=template&id=d4aae09a& ***!\n  \\***********************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4454247__) {\n\n\"use strict\";\n__nested_webpack_require_4454247__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_custom_vue_vue_type_template_id_d4aae09a___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4454247__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./custom.vue?vue&type=template&id=d4aae09a& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/custom.vue?vue&type=template&id=d4aae09a&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4454247__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_custom_vue_vue_type_template_id_d4aae09a___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4454247__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_custom_vue_vue_type_template_id_d4aae09a___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/customwidget.vue\":\n/*!**********************************!*\\\n  !*** ./src/vue/customwidget.vue ***!\n  \\**********************************/\n/*! exports provided: CustomWidget, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4455835__) {\n\n\"use strict\";\n__nested_webpack_require_4455835__.r(__nested_webpack_exports__);\n/* harmony import */ var _customwidget_vue_vue_type_template_id_1e61a7b7___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4455835__(/*! ./customwidget.vue?vue&type=template&id=1e61a7b7& */ \"./src/vue/customwidget.vue?vue&type=template&id=1e61a7b7&\");\n/* harmony import */ var _customwidget_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4455835__(/*! ./customwidget.vue?vue&type=script&lang=ts& */ \"./src/vue/customwidget.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4455835__.d(__nested_webpack_exports__, \"CustomWidget\", function() { return _customwidget_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"CustomWidget\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4455835__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _customwidget_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _customwidget_vue_vue_type_template_id_1e61a7b7___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _customwidget_vue_vue_type_template_id_1e61a7b7___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/customwidget.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/customwidget.vue?vue&type=script&lang=ts&\":\n/*!***********************************************************!*\\\n  !*** ./src/vue/customwidget.vue?vue&type=script&lang=ts& ***!\n  \\***********************************************************/\n/*! exports provided: default, CustomWidget */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4457872__) {\n\n\"use strict\";\n__nested_webpack_require_4457872__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_customwidget_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4457872__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./customwidget.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/customwidget.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4457872__.d(__nested_webpack_exports__, \"CustomWidget\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_customwidget_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"CustomWidget\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_customwidget_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/customwidget.vue?vue&type=template&id=1e61a7b7&\":\n/*!*****************************************************************!*\\\n  !*** ./src/vue/customwidget.vue?vue&type=template&id=1e61a7b7& ***!\n  \\*****************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4459368__) {\n\n\"use strict\";\n__nested_webpack_require_4459368__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_customwidget_vue_vue_type_template_id_1e61a7b7___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4459368__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./customwidget.vue?vue&type=template&id=1e61a7b7& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/customwidget.vue?vue&type=template&id=1e61a7b7&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4459368__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_customwidget_vue_vue_type_template_id_1e61a7b7___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4459368__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_customwidget_vue_vue_type_template_id_1e61a7b7___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/dropdown-select.vue\":\n/*!*************************************!*\\\n  !*** ./src/vue/dropdown-select.vue ***!\n  \\*************************************/\n/*! exports provided: DropdownSelect, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4461000__) {\n\n\"use strict\";\n__nested_webpack_require_4461000__.r(__nested_webpack_exports__);\n/* harmony import */ var _dropdown_select_vue_vue_type_template_id_8199ec34___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4461000__(/*! ./dropdown-select.vue?vue&type=template&id=8199ec34& */ \"./src/vue/dropdown-select.vue?vue&type=template&id=8199ec34&\");\n/* harmony import */ var _dropdown_select_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4461000__(/*! ./dropdown-select.vue?vue&type=script&lang=ts& */ \"./src/vue/dropdown-select.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4461000__.d(__nested_webpack_exports__, \"DropdownSelect\", function() { return _dropdown_select_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"DropdownSelect\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4461000__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _dropdown_select_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _dropdown_select_vue_vue_type_template_id_8199ec34___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _dropdown_select_vue_vue_type_template_id_8199ec34___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/dropdown-select.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/dropdown-select.vue?vue&type=script&lang=ts&\":\n/*!**************************************************************!*\\\n  !*** ./src/vue/dropdown-select.vue?vue&type=script&lang=ts& ***!\n  \\**************************************************************/\n/*! exports provided: default, DropdownSelect */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4463088__) {\n\n\"use strict\";\n__nested_webpack_require_4463088__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_dropdown_select_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4463088__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./dropdown-select.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/dropdown-select.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4463088__.d(__nested_webpack_exports__, \"DropdownSelect\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_dropdown_select_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"DropdownSelect\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_dropdown_select_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/dropdown-select.vue?vue&type=template&id=8199ec34&\":\n/*!********************************************************************!*\\\n  !*** ./src/vue/dropdown-select.vue?vue&type=template&id=8199ec34& ***!\n  \\********************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4464615__) {\n\n\"use strict\";\n__nested_webpack_require_4464615__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_dropdown_select_vue_vue_type_template_id_8199ec34___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4464615__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./dropdown-select.vue?vue&type=template&id=8199ec34& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/dropdown-select.vue?vue&type=template&id=8199ec34&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4464615__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_dropdown_select_vue_vue_type_template_id_8199ec34___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4464615__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_dropdown_select_vue_vue_type_template_id_8199ec34___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/dropdown.vue\":\n/*!******************************!*\\\n  !*** ./src/vue/dropdown.vue ***!\n  \\******************************/\n/*! exports provided: Dropdown, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4466228__) {\n\n\"use strict\";\n__nested_webpack_require_4466228__.r(__nested_webpack_exports__);\n/* harmony import */ var _dropdown_vue_vue_type_template_id_6b3215d3___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4466228__(/*! ./dropdown.vue?vue&type=template&id=6b3215d3& */ \"./src/vue/dropdown.vue?vue&type=template&id=6b3215d3&\");\n/* harmony import */ var _dropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4466228__(/*! ./dropdown.vue?vue&type=script&lang=ts& */ \"./src/vue/dropdown.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4466228__.d(__nested_webpack_exports__, \"Dropdown\", function() { return _dropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Dropdown\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4466228__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _dropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _dropdown_vue_vue_type_template_id_6b3215d3___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _dropdown_vue_vue_type_template_id_6b3215d3___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/dropdown.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/dropdown.vue?vue&type=script&lang=ts&\":\n/*!*******************************************************!*\\\n  !*** ./src/vue/dropdown.vue?vue&type=script&lang=ts& ***!\n  \\*******************************************************/\n/*! exports provided: default, Dropdown */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4468193__) {\n\n\"use strict\";\n__nested_webpack_require_4468193__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_dropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4468193__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./dropdown.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/dropdown.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4468193__.d(__nested_webpack_exports__, \"Dropdown\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_dropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Dropdown\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_dropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/dropdown.vue?vue&type=template&id=6b3215d3&\":\n/*!*************************************************************!*\\\n  !*** ./src/vue/dropdown.vue?vue&type=template&id=6b3215d3& ***!\n  \\*************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4469645__) {\n\n\"use strict\";\n__nested_webpack_require_4469645__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_dropdown_vue_vue_type_template_id_6b3215d3___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4469645__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./dropdown.vue?vue&type=template&id=6b3215d3& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/dropdown.vue?vue&type=template&id=6b3215d3&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4469645__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_dropdown_vue_vue_type_template_id_6b3215d3___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4469645__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_dropdown_vue_vue_type_template_id_6b3215d3___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/element.vue\":\n/*!*****************************!*\\\n  !*** ./src/vue/element.vue ***!\n  \\*****************************/\n/*! exports provided: SurveyElementVue, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4471227__) {\n\n\"use strict\";\n__nested_webpack_require_4471227__.r(__nested_webpack_exports__);\n/* harmony import */ var _element_vue_vue_type_template_id_973472ac___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4471227__(/*! ./element.vue?vue&type=template&id=973472ac& */ \"./src/vue/element.vue?vue&type=template&id=973472ac&\");\n/* harmony import */ var _element_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4471227__(/*! ./element.vue?vue&type=script&lang=ts& */ \"./src/vue/element.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4471227__.d(__nested_webpack_exports__, \"SurveyElementVue\", function() { return _element_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"SurveyElementVue\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4471227__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _element_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _element_vue_vue_type_template_id_973472ac___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _element_vue_vue_type_template_id_973472ac___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/element.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/element.vue?vue&type=script&lang=ts&\":\n/*!******************************************************!*\\\n  !*** ./src/vue/element.vue?vue&type=script&lang=ts& ***!\n  \\******************************************************/\n/*! exports provided: default, SurveyElementVue */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4473201__) {\n\n\"use strict\";\n__nested_webpack_require_4473201__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_element_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4473201__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./element.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/element.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4473201__.d(__nested_webpack_exports__, \"SurveyElementVue\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_element_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"SurveyElementVue\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_element_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/element.vue?vue&type=template&id=973472ac&\":\n/*!************************************************************!*\\\n  !*** ./src/vue/element.vue?vue&type=template&id=973472ac& ***!\n  \\************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4474660__) {\n\n\"use strict\";\n__nested_webpack_require_4474660__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_element_vue_vue_type_template_id_973472ac___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4474660__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./element.vue?vue&type=template&id=973472ac& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/element.vue?vue&type=template&id=973472ac&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4474660__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_element_vue_vue_type_template_id_973472ac___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4474660__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_element_vue_vue_type_template_id_973472ac___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/elementheader.vue\":\n/*!***********************************!*\\\n  !*** ./src/vue/elementheader.vue ***!\n  \\***********************************/\n/*! exports provided: ElementHeader, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4476258__) {\n\n\"use strict\";\n__nested_webpack_require_4476258__.r(__nested_webpack_exports__);\n/* harmony import */ var _elementheader_vue_vue_type_template_id_27adc537___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4476258__(/*! ./elementheader.vue?vue&type=template&id=27adc537& */ \"./src/vue/elementheader.vue?vue&type=template&id=27adc537&\");\n/* harmony import */ var _elementheader_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4476258__(/*! ./elementheader.vue?vue&type=script&lang=ts& */ \"./src/vue/elementheader.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4476258__.d(__nested_webpack_exports__, \"ElementHeader\", function() { return _elementheader_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"ElementHeader\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4476258__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _elementheader_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _elementheader_vue_vue_type_template_id_27adc537___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _elementheader_vue_vue_type_template_id_27adc537___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/elementheader.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/elementheader.vue?vue&type=script&lang=ts&\":\n/*!************************************************************!*\\\n  !*** ./src/vue/elementheader.vue?vue&type=script&lang=ts& ***!\n  \\************************************************************/\n/*! exports provided: default, ElementHeader */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4478313__) {\n\n\"use strict\";\n__nested_webpack_require_4478313__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_elementheader_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4478313__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./elementheader.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/elementheader.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4478313__.d(__nested_webpack_exports__, \"ElementHeader\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_elementheader_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"ElementHeader\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_elementheader_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/elementheader.vue?vue&type=template&id=27adc537&\":\n/*!******************************************************************!*\\\n  !*** ./src/vue/elementheader.vue?vue&type=template&id=27adc537& ***!\n  \\******************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4479820__) {\n\n\"use strict\";\n__nested_webpack_require_4479820__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_elementheader_vue_vue_type_template_id_27adc537___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4479820__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./elementheader.vue?vue&type=template&id=27adc537& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/elementheader.vue?vue&type=template&id=27adc537&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4479820__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_elementheader_vue_vue_type_template_id_27adc537___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4479820__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_elementheader_vue_vue_type_template_id_27adc537___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/empty.vue\":\n/*!***************************!*\\\n  !*** ./src/vue/empty.vue ***!\n  \\***************************/\n/*! exports provided: Empty, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4481408__) {\n\n\"use strict\";\n__nested_webpack_require_4481408__.r(__nested_webpack_exports__);\n/* harmony import */ var _empty_vue_vue_type_template_id_05052c0a___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4481408__(/*! ./empty.vue?vue&type=template&id=05052c0a& */ \"./src/vue/empty.vue?vue&type=template&id=05052c0a&\");\n/* harmony import */ var _empty_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4481408__(/*! ./empty.vue?vue&type=script&lang=ts& */ \"./src/vue/empty.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4481408__.d(__nested_webpack_exports__, \"Empty\", function() { return _empty_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Empty\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4481408__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _empty_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _empty_vue_vue_type_template_id_05052c0a___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _empty_vue_vue_type_template_id_05052c0a___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/empty.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/empty.vue?vue&type=script&lang=ts&\":\n/*!****************************************************!*\\\n  !*** ./src/vue/empty.vue?vue&type=script&lang=ts& ***!\n  \\****************************************************/\n/*! exports provided: default, Empty */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4483319__) {\n\n\"use strict\";\n__nested_webpack_require_4483319__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_empty_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4483319__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./empty.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/empty.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4483319__.d(__nested_webpack_exports__, \"Empty\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_empty_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Empty\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_empty_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/empty.vue?vue&type=template&id=05052c0a&\":\n/*!**********************************************************!*\\\n  !*** ./src/vue/empty.vue?vue&type=template&id=05052c0a& ***!\n  \\**********************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4484738__) {\n\n\"use strict\";\n__nested_webpack_require_4484738__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_empty_vue_vue_type_template_id_05052c0a___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4484738__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./empty.vue?vue&type=template&id=05052c0a& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/empty.vue?vue&type=template&id=05052c0a&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4484738__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_empty_vue_vue_type_template_id_05052c0a___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4484738__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_empty_vue_vue_type_template_id_05052c0a___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/errors.vue\":\n/*!****************************!*\\\n  !*** ./src/vue/errors.vue ***!\n  \\****************************/\n/*! exports provided: Errors, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4486291__) {\n\n\"use strict\";\n__nested_webpack_require_4486291__.r(__nested_webpack_exports__);\n/* harmony import */ var _errors_vue_vue_type_template_id_5682e6ad___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4486291__(/*! ./errors.vue?vue&type=template&id=5682e6ad& */ \"./src/vue/errors.vue?vue&type=template&id=5682e6ad&\");\n/* harmony import */ var _errors_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4486291__(/*! ./errors.vue?vue&type=script&lang=ts& */ \"./src/vue/errors.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4486291__.d(__nested_webpack_exports__, \"Errors\", function() { return _errors_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Errors\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4486291__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _errors_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _errors_vue_vue_type_template_id_5682e6ad___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _errors_vue_vue_type_template_id_5682e6ad___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/errors.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/errors.vue?vue&type=script&lang=ts&\":\n/*!*****************************************************!*\\\n  !*** ./src/vue/errors.vue?vue&type=script&lang=ts& ***!\n  \\*****************************************************/\n/*! exports provided: default, Errors */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4488220__) {\n\n\"use strict\";\n__nested_webpack_require_4488220__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_errors_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4488220__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./errors.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/errors.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4488220__.d(__nested_webpack_exports__, \"Errors\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_errors_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Errors\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_errors_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/errors.vue?vue&type=template&id=5682e6ad&\":\n/*!***********************************************************!*\\\n  !*** ./src/vue/errors.vue?vue&type=template&id=5682e6ad& ***!\n  \\***********************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4489650__) {\n\n\"use strict\";\n__nested_webpack_require_4489650__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_errors_vue_vue_type_template_id_5682e6ad___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4489650__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./errors.vue?vue&type=template&id=5682e6ad& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/errors.vue?vue&type=template&id=5682e6ad&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4489650__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_errors_vue_vue_type_template_id_5682e6ad___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4489650__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_errors_vue_vue_type_template_id_5682e6ad___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/expression.vue\":\n/*!********************************!*\\\n  !*** ./src/vue/expression.vue ***!\n  \\********************************/\n/*! exports provided: Expression, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4491228__) {\n\n\"use strict\";\n__nested_webpack_require_4491228__.r(__nested_webpack_exports__);\n/* harmony import */ var _expression_vue_vue_type_template_id_1d20865a___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4491228__(/*! ./expression.vue?vue&type=template&id=1d20865a& */ \"./src/vue/expression.vue?vue&type=template&id=1d20865a&\");\n/* harmony import */ var _expression_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4491228__(/*! ./expression.vue?vue&type=script&lang=ts& */ \"./src/vue/expression.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4491228__.d(__nested_webpack_exports__, \"Expression\", function() { return _expression_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Expression\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4491228__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _expression_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _expression_vue_vue_type_template_id_1d20865a___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _expression_vue_vue_type_template_id_1d20865a___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/expression.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/expression.vue?vue&type=script&lang=ts&\":\n/*!*********************************************************!*\\\n  !*** ./src/vue/expression.vue?vue&type=script&lang=ts& ***!\n  \\*********************************************************/\n/*! exports provided: default, Expression */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4493229__) {\n\n\"use strict\";\n__nested_webpack_require_4493229__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_expression_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4493229__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./expression.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/expression.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4493229__.d(__nested_webpack_exports__, \"Expression\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_expression_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Expression\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_expression_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/expression.vue?vue&type=template&id=1d20865a&\":\n/*!***************************************************************!*\\\n  !*** ./src/vue/expression.vue?vue&type=template&id=1d20865a& ***!\n  \\***************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4494703__) {\n\n\"use strict\";\n__nested_webpack_require_4494703__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_expression_vue_vue_type_template_id_1d20865a___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4494703__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./expression.vue?vue&type=template&id=1d20865a& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/expression.vue?vue&type=template&id=1d20865a&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4494703__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_expression_vue_vue_type_template_id_1d20865a___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4494703__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_expression_vue_vue_type_template_id_1d20865a___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/file-clean-button.vue\":\n/*!***************************************!*\\\n  !*** ./src/vue/file-clean-button.vue ***!\n  \\***************************************/\n/*! exports provided: FileCleanButton, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4496334__) {\n\n\"use strict\";\n__nested_webpack_require_4496334__.r(__nested_webpack_exports__);\n/* harmony import */ var _file_clean_button_vue_vue_type_template_id_29c892d6___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4496334__(/*! ./file-clean-button.vue?vue&type=template&id=29c892d6& */ \"./src/vue/file-clean-button.vue?vue&type=template&id=29c892d6&\");\n/* harmony import */ var _file_clean_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4496334__(/*! ./file-clean-button.vue?vue&type=script&lang=ts& */ \"./src/vue/file-clean-button.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4496334__.d(__nested_webpack_exports__, \"FileCleanButton\", function() { return _file_clean_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"FileCleanButton\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4496334__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _file_clean_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _file_clean_button_vue_vue_type_template_id_29c892d6___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _file_clean_button_vue_vue_type_template_id_29c892d6___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/file-clean-button.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/file-clean-button.vue?vue&type=script&lang=ts&\":\n/*!****************************************************************!*\\\n  !*** ./src/vue/file-clean-button.vue?vue&type=script&lang=ts& ***!\n  \\****************************************************************/\n/*! exports provided: default, FileCleanButton */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4498455__) {\n\n\"use strict\";\n__nested_webpack_require_4498455__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_file_clean_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4498455__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./file-clean-button.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/file-clean-button.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4498455__.d(__nested_webpack_exports__, \"FileCleanButton\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_file_clean_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"FileCleanButton\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_file_clean_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/file-clean-button.vue?vue&type=template&id=29c892d6&\":\n/*!**********************************************************************!*\\\n  !*** ./src/vue/file-clean-button.vue?vue&type=template&id=29c892d6& ***!\n  \\**********************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4500002__) {\n\n\"use strict\";\n__nested_webpack_require_4500002__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_file_clean_button_vue_vue_type_template_id_29c892d6___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4500002__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./file-clean-button.vue?vue&type=template&id=29c892d6& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/file-clean-button.vue?vue&type=template&id=29c892d6&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4500002__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_file_clean_button_vue_vue_type_template_id_29c892d6___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4500002__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_file_clean_button_vue_vue_type_template_id_29c892d6___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/file-preview.vue\":\n/*!**********************************!*\\\n  !*** ./src/vue/file-preview.vue ***!\n  \\**********************************/\n/*! exports provided: FilePreview, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4501644__) {\n\n\"use strict\";\n__nested_webpack_require_4501644__.r(__nested_webpack_exports__);\n/* harmony import */ var _file_preview_vue_vue_type_template_id_6b866b8e___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4501644__(/*! ./file-preview.vue?vue&type=template&id=6b866b8e& */ \"./src/vue/file-preview.vue?vue&type=template&id=6b866b8e&\");\n/* harmony import */ var _file_preview_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4501644__(/*! ./file-preview.vue?vue&type=script&lang=ts& */ \"./src/vue/file-preview.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4501644__.d(__nested_webpack_exports__, \"FilePreview\", function() { return _file_preview_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"FilePreview\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4501644__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _file_preview_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _file_preview_vue_vue_type_template_id_6b866b8e___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _file_preview_vue_vue_type_template_id_6b866b8e___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/file-preview.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/file-preview.vue?vue&type=script&lang=ts&\":\n/*!***********************************************************!*\\\n  !*** ./src/vue/file-preview.vue?vue&type=script&lang=ts& ***!\n  \\***********************************************************/\n/*! exports provided: default, FilePreview */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4503678__) {\n\n\"use strict\";\n__nested_webpack_require_4503678__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_file_preview_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4503678__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./file-preview.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/file-preview.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4503678__.d(__nested_webpack_exports__, \"FilePreview\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_file_preview_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"FilePreview\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_file_preview_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/file-preview.vue?vue&type=template&id=6b866b8e&\":\n/*!*****************************************************************!*\\\n  !*** ./src/vue/file-preview.vue?vue&type=template&id=6b866b8e& ***!\n  \\*****************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4505172__) {\n\n\"use strict\";\n__nested_webpack_require_4505172__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_file_preview_vue_vue_type_template_id_6b866b8e___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4505172__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./file-preview.vue?vue&type=template&id=6b866b8e& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/file-preview.vue?vue&type=template&id=6b866b8e&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4505172__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_file_preview_vue_vue_type_template_id_6b866b8e___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4505172__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_file_preview_vue_vue_type_template_id_6b866b8e___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/file-video.vue\":\n/*!********************************!*\\\n  !*** ./src/vue/file-video.vue ***!\n  \\********************************/\n/*! exports provided: FileVideo, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4506779__) {\n\n\"use strict\";\n__nested_webpack_require_4506779__.r(__nested_webpack_exports__);\n/* harmony import */ var _file_video_vue_vue_type_template_id_7b5c8bac___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4506779__(/*! ./file-video.vue?vue&type=template&id=7b5c8bac& */ \"./src/vue/file-video.vue?vue&type=template&id=7b5c8bac&\");\n/* harmony import */ var _file_video_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4506779__(/*! ./file-video.vue?vue&type=script&lang=ts& */ \"./src/vue/file-video.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4506779__.d(__nested_webpack_exports__, \"FileVideo\", function() { return _file_video_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"FileVideo\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4506779__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _file_video_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _file_video_vue_vue_type_template_id_7b5c8bac___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _file_video_vue_vue_type_template_id_7b5c8bac___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/file-video.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/file-video.vue?vue&type=script&lang=ts&\":\n/*!*********************************************************!*\\\n  !*** ./src/vue/file-video.vue?vue&type=script&lang=ts& ***!\n  \\*********************************************************/\n/*! exports provided: default, FileVideo */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4508777__) {\n\n\"use strict\";\n__nested_webpack_require_4508777__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_file_video_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4508777__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./file-video.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/file-video.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4508777__.d(__nested_webpack_exports__, \"FileVideo\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_file_video_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"FileVideo\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_file_video_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/file-video.vue?vue&type=template&id=7b5c8bac&\":\n/*!***************************************************************!*\\\n  !*** ./src/vue/file-video.vue?vue&type=template&id=7b5c8bac& ***!\n  \\***************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4510249__) {\n\n\"use strict\";\n__nested_webpack_require_4510249__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_file_video_vue_vue_type_template_id_7b5c8bac___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4510249__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./file-video.vue?vue&type=template&id=7b5c8bac& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/file-video.vue?vue&type=template&id=7b5c8bac&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4510249__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_file_video_vue_vue_type_template_id_7b5c8bac___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4510249__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_file_video_vue_vue_type_template_id_7b5c8bac___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/file.vue\":\n/*!**************************!*\\\n  !*** ./src/vue/file.vue ***!\n  \\**************************/\n/*! exports provided: File, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4511817__) {\n\n\"use strict\";\n__nested_webpack_require_4511817__.r(__nested_webpack_exports__);\n/* harmony import */ var _file_vue_vue_type_template_id_20f70284___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4511817__(/*! ./file.vue?vue&type=template&id=20f70284& */ \"./src/vue/file.vue?vue&type=template&id=20f70284&\");\n/* harmony import */ var _file_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4511817__(/*! ./file.vue?vue&type=script&lang=ts& */ \"./src/vue/file.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4511817__.d(__nested_webpack_exports__, \"File\", function() { return _file_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"File\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4511817__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _file_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _file_vue_vue_type_template_id_20f70284___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _file_vue_vue_type_template_id_20f70284___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/file.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/file.vue?vue&type=script&lang=ts&\":\n/*!***************************************************!*\\\n  !*** ./src/vue/file.vue?vue&type=script&lang=ts& ***!\n  \\***************************************************/\n/*! exports provided: default, File */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4513710__) {\n\n\"use strict\";\n__nested_webpack_require_4513710__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_file_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4513710__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./file.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/file.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4513710__.d(__nested_webpack_exports__, \"File\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_file_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"File\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_file_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/file.vue?vue&type=template&id=20f70284&\":\n/*!*********************************************************!*\\\n  !*** ./src/vue/file.vue?vue&type=template&id=20f70284& ***!\n  \\*********************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4515118__) {\n\n\"use strict\";\n__nested_webpack_require_4515118__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_file_vue_vue_type_template_id_20f70284___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4515118__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./file.vue?vue&type=template&id=20f70284& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/file.vue?vue&type=template&id=20f70284&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4515118__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_file_vue_vue_type_template_id_20f70284___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4515118__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_file_vue_vue_type_template_id_20f70284___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/flowpanel.vue\":\n/*!*******************************!*\\\n  !*** ./src/vue/flowpanel.vue ***!\n  \\*******************************/\n/*! exports provided: FlowPanel, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4516681__) {\n\n\"use strict\";\n__nested_webpack_require_4516681__.r(__nested_webpack_exports__);\n/* harmony import */ var _flowpanel_vue_vue_type_template_id_96ae1a78___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4516681__(/*! ./flowpanel.vue?vue&type=template&id=96ae1a78& */ \"./src/vue/flowpanel.vue?vue&type=template&id=96ae1a78&\");\n/* harmony import */ var _flowpanel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4516681__(/*! ./flowpanel.vue?vue&type=script&lang=ts& */ \"./src/vue/flowpanel.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4516681__.d(__nested_webpack_exports__, \"FlowPanel\", function() { return _flowpanel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"FlowPanel\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4516681__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _flowpanel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _flowpanel_vue_vue_type_template_id_96ae1a78___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _flowpanel_vue_vue_type_template_id_96ae1a78___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/flowpanel.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/flowpanel.vue?vue&type=script&lang=ts&\":\n/*!********************************************************!*\\\n  !*** ./src/vue/flowpanel.vue?vue&type=script&lang=ts& ***!\n  \\********************************************************/\n/*! exports provided: default, FlowPanel */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4518664__) {\n\n\"use strict\";\n__nested_webpack_require_4518664__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_flowpanel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4518664__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./flowpanel.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/flowpanel.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4518664__.d(__nested_webpack_exports__, \"FlowPanel\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_flowpanel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"FlowPanel\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_flowpanel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/flowpanel.vue?vue&type=template&id=96ae1a78&\":\n/*!**************************************************************!*\\\n  !*** ./src/vue/flowpanel.vue?vue&type=template&id=96ae1a78& ***!\n  \\**************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4520127__) {\n\n\"use strict\";\n__nested_webpack_require_4520127__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_flowpanel_vue_vue_type_template_id_96ae1a78___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4520127__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./flowpanel.vue?vue&type=template&id=96ae1a78& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/flowpanel.vue?vue&type=template&id=96ae1a78&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4520127__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_flowpanel_vue_vue_type_template_id_96ae1a78___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4520127__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_flowpanel_vue_vue_type_template_id_96ae1a78___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/flowpanelelement.vue\":\n/*!**************************************!*\\\n  !*** ./src/vue/flowpanelelement.vue ***!\n  \\**************************************/\n/*! exports provided: FlowPanelElement, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4521750__) {\n\n\"use strict\";\n__nested_webpack_require_4521750__.r(__nested_webpack_exports__);\n/* harmony import */ var _flowpanelelement_vue_vue_type_template_id_9d992c30___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4521750__(/*! ./flowpanelelement.vue?vue&type=template&id=9d992c30& */ \"./src/vue/flowpanelelement.vue?vue&type=template&id=9d992c30&\");\n/* harmony import */ var _flowpanelelement_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4521750__(/*! ./flowpanelelement.vue?vue&type=script&lang=ts& */ \"./src/vue/flowpanelelement.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4521750__.d(__nested_webpack_exports__, \"FlowPanelElement\", function() { return _flowpanelelement_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"FlowPanelElement\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4521750__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _flowpanelelement_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _flowpanelelement_vue_vue_type_template_id_9d992c30___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _flowpanelelement_vue_vue_type_template_id_9d992c30___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/flowpanelelement.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/flowpanelelement.vue?vue&type=script&lang=ts&\":\n/*!***************************************************************!*\\\n  !*** ./src/vue/flowpanelelement.vue?vue&type=script&lang=ts& ***!\n  \\***************************************************************/\n/*! exports provided: default, FlowPanelElement */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4523859__) {\n\n\"use strict\";\n__nested_webpack_require_4523859__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_flowpanelelement_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4523859__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./flowpanelelement.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/flowpanelelement.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4523859__.d(__nested_webpack_exports__, \"FlowPanelElement\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_flowpanelelement_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"FlowPanelElement\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_flowpanelelement_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/flowpanelelement.vue?vue&type=template&id=9d992c30&\":\n/*!*********************************************************************!*\\\n  !*** ./src/vue/flowpanelelement.vue?vue&type=template&id=9d992c30& ***!\n  \\*********************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4525399__) {\n\n\"use strict\";\n__nested_webpack_require_4525399__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_flowpanelelement_vue_vue_type_template_id_9d992c30___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4525399__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./flowpanelelement.vue?vue&type=template&id=9d992c30& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/flowpanelelement.vue?vue&type=template&id=9d992c30&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4525399__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_flowpanelelement_vue_vue_type_template_id_9d992c30___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4525399__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_flowpanelelement_vue_vue_type_template_id_9d992c30___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/header.vue\":\n/*!****************************!*\\\n  !*** ./src/vue/header.vue ***!\n  \\****************************/\n/*! exports provided: SurveyHeader, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4527013__) {\n\n\"use strict\";\n__nested_webpack_require_4527013__.r(__nested_webpack_exports__);\n/* harmony import */ var _header_vue_vue_type_template_id_69cff8cf___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4527013__(/*! ./header.vue?vue&type=template&id=69cff8cf& */ \"./src/vue/header.vue?vue&type=template&id=69cff8cf&\");\n/* harmony import */ var _header_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4527013__(/*! ./header.vue?vue&type=script&lang=ts& */ \"./src/vue/header.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4527013__.d(__nested_webpack_exports__, \"SurveyHeader\", function() { return _header_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"SurveyHeader\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4527013__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _header_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _header_vue_vue_type_template_id_69cff8cf___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _header_vue_vue_type_template_id_69cff8cf___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/header.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/header.vue?vue&type=script&lang=ts&\":\n/*!*****************************************************!*\\\n  !*** ./src/vue/header.vue?vue&type=script&lang=ts& ***!\n  \\*****************************************************/\n/*! exports provided: default, SurveyHeader */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4528960__) {\n\n\"use strict\";\n__nested_webpack_require_4528960__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_header_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4528960__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./header.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/header.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4528960__.d(__nested_webpack_exports__, \"SurveyHeader\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_header_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"SurveyHeader\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_header_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/header.vue?vue&type=template&id=69cff8cf&\":\n/*!***********************************************************!*\\\n  !*** ./src/vue/header.vue?vue&type=template&id=69cff8cf& ***!\n  \\***********************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4530402__) {\n\n\"use strict\";\n__nested_webpack_require_4530402__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_header_vue_vue_type_template_id_69cff8cf___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4530402__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./header.vue?vue&type=template&id=69cff8cf& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/header.vue?vue&type=template&id=69cff8cf&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4530402__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_header_vue_vue_type_template_id_69cff8cf___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4530402__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_header_vue_vue_type_template_id_69cff8cf___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/html.vue\":\n/*!**************************!*\\\n  !*** ./src/vue/html.vue ***!\n  \\**************************/\n/*! exports provided: Html, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4531950__) {\n\n\"use strict\";\n__nested_webpack_require_4531950__.r(__nested_webpack_exports__);\n/* harmony import */ var _html_vue_vue_type_template_id_0742e16d___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4531950__(/*! ./html.vue?vue&type=template&id=0742e16d& */ \"./src/vue/html.vue?vue&type=template&id=0742e16d&\");\n/* harmony import */ var _html_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4531950__(/*! ./html.vue?vue&type=script&lang=ts& */ \"./src/vue/html.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4531950__.d(__nested_webpack_exports__, \"Html\", function() { return _html_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Html\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4531950__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _html_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _html_vue_vue_type_template_id_0742e16d___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _html_vue_vue_type_template_id_0742e16d___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/html.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/html.vue?vue&type=script&lang=ts&\":\n/*!***************************************************!*\\\n  !*** ./src/vue/html.vue?vue&type=script&lang=ts& ***!\n  \\***************************************************/\n/*! exports provided: default, Html */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4533843__) {\n\n\"use strict\";\n__nested_webpack_require_4533843__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_html_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4533843__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./html.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/html.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4533843__.d(__nested_webpack_exports__, \"Html\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_html_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Html\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_html_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/html.vue?vue&type=template&id=0742e16d&\":\n/*!*********************************************************!*\\\n  !*** ./src/vue/html.vue?vue&type=template&id=0742e16d& ***!\n  \\*********************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4535251__) {\n\n\"use strict\";\n__nested_webpack_require_4535251__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_html_vue_vue_type_template_id_0742e16d___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4535251__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./html.vue?vue&type=template&id=0742e16d& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/html.vue?vue&type=template&id=0742e16d&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4535251__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_html_vue_vue_type_template_id_0742e16d___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4535251__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_html_vue_vue_type_template_id_0742e16d___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/image.vue\":\n/*!***************************!*\\\n  !*** ./src/vue/image.vue ***!\n  \\***************************/\n/*! exports provided: QuestionImage, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4536802__) {\n\n\"use strict\";\n__nested_webpack_require_4536802__.r(__nested_webpack_exports__);\n/* harmony import */ var _image_vue_vue_type_template_id_1dc8d709___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4536802__(/*! ./image.vue?vue&type=template&id=1dc8d709& */ \"./src/vue/image.vue?vue&type=template&id=1dc8d709&\");\n/* harmony import */ var _image_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4536802__(/*! ./image.vue?vue&type=script&lang=ts& */ \"./src/vue/image.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4536802__.d(__nested_webpack_exports__, \"QuestionImage\", function() { return _image_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"QuestionImage\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4536802__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _image_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _image_vue_vue_type_template_id_1dc8d709___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _image_vue_vue_type_template_id_1dc8d709___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/image.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/image.vue?vue&type=script&lang=ts&\":\n/*!****************************************************!*\\\n  !*** ./src/vue/image.vue?vue&type=script&lang=ts& ***!\n  \\****************************************************/\n/*! exports provided: default, QuestionImage */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4538737__) {\n\n\"use strict\";\n__nested_webpack_require_4538737__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_image_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4538737__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./image.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/image.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4538737__.d(__nested_webpack_exports__, \"QuestionImage\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_image_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"QuestionImage\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_image_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/image.vue?vue&type=template&id=1dc8d709&\":\n/*!**********************************************************!*\\\n  !*** ./src/vue/image.vue?vue&type=template&id=1dc8d709& ***!\n  \\**********************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4540172__) {\n\n\"use strict\";\n__nested_webpack_require_4540172__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_image_vue_vue_type_template_id_1dc8d709___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4540172__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./image.vue?vue&type=template&id=1dc8d709& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/image.vue?vue&type=template&id=1dc8d709&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4540172__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_image_vue_vue_type_template_id_1dc8d709___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4540172__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_image_vue_vue_type_template_id_1dc8d709___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/imagepicker-item.vue\":\n/*!**************************************!*\\\n  !*** ./src/vue/imagepicker-item.vue ***!\n  \\**************************************/\n/*! exports provided: ImagePickerItem, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4541774__) {\n\n\"use strict\";\n__nested_webpack_require_4541774__.r(__nested_webpack_exports__);\n/* harmony import */ var _imagepicker_item_vue_vue_type_template_id_64b00179___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4541774__(/*! ./imagepicker-item.vue?vue&type=template&id=64b00179& */ \"./src/vue/imagepicker-item.vue?vue&type=template&id=64b00179&\");\n/* harmony import */ var _imagepicker_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4541774__(/*! ./imagepicker-item.vue?vue&type=script&lang=ts& */ \"./src/vue/imagepicker-item.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4541774__.d(__nested_webpack_exports__, \"ImagePickerItem\", function() { return _imagepicker_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"ImagePickerItem\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4541774__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _imagepicker_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _imagepicker_item_vue_vue_type_template_id_64b00179___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _imagepicker_item_vue_vue_type_template_id_64b00179___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/imagepicker-item.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/imagepicker-item.vue?vue&type=script&lang=ts&\":\n/*!***************************************************************!*\\\n  !*** ./src/vue/imagepicker-item.vue?vue&type=script&lang=ts& ***!\n  \\***************************************************************/\n/*! exports provided: default, ImagePickerItem */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4543880__) {\n\n\"use strict\";\n__nested_webpack_require_4543880__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_imagepicker_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4543880__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./imagepicker-item.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/imagepicker-item.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4543880__.d(__nested_webpack_exports__, \"ImagePickerItem\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_imagepicker_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"ImagePickerItem\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_imagepicker_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/imagepicker-item.vue?vue&type=template&id=64b00179&\":\n/*!*********************************************************************!*\\\n  !*** ./src/vue/imagepicker-item.vue?vue&type=template&id=64b00179& ***!\n  \\*********************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4545418__) {\n\n\"use strict\";\n__nested_webpack_require_4545418__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_imagepicker_item_vue_vue_type_template_id_64b00179___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4545418__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./imagepicker-item.vue?vue&type=template&id=64b00179& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/imagepicker-item.vue?vue&type=template&id=64b00179&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4545418__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_imagepicker_item_vue_vue_type_template_id_64b00179___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4545418__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_imagepicker_item_vue_vue_type_template_id_64b00179___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/imagepicker.vue\":\n/*!*********************************!*\\\n  !*** ./src/vue/imagepicker.vue ***!\n  \\*********************************/\n/*! exports provided: ImagePicker, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4547051__) {\n\n\"use strict\";\n__nested_webpack_require_4547051__.r(__nested_webpack_exports__);\n/* harmony import */ var _imagepicker_vue_vue_type_template_id_153fe052___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4547051__(/*! ./imagepicker.vue?vue&type=template&id=153fe052& */ \"./src/vue/imagepicker.vue?vue&type=template&id=153fe052&\");\n/* harmony import */ var _imagepicker_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4547051__(/*! ./imagepicker.vue?vue&type=script&lang=ts& */ \"./src/vue/imagepicker.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4547051__.d(__nested_webpack_exports__, \"ImagePicker\", function() { return _imagepicker_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"ImagePicker\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4547051__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _imagepicker_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _imagepicker_vue_vue_type_template_id_153fe052___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _imagepicker_vue_vue_type_template_id_153fe052___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/imagepicker.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/imagepicker.vue?vue&type=script&lang=ts&\":\n/*!**********************************************************!*\\\n  !*** ./src/vue/imagepicker.vue?vue&type=script&lang=ts& ***!\n  \\**********************************************************/\n/*! exports provided: default, ImagePicker */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4549070__) {\n\n\"use strict\";\n__nested_webpack_require_4549070__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_imagepicker_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4549070__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./imagepicker.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/imagepicker.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4549070__.d(__nested_webpack_exports__, \"ImagePicker\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_imagepicker_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"ImagePicker\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_imagepicker_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/imagepicker.vue?vue&type=template&id=153fe052&\":\n/*!****************************************************************!*\\\n  !*** ./src/vue/imagepicker.vue?vue&type=template&id=153fe052& ***!\n  \\****************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4550555__) {\n\n\"use strict\";\n__nested_webpack_require_4550555__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_imagepicker_vue_vue_type_template_id_153fe052___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4550555__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./imagepicker.vue?vue&type=template&id=153fe052& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/imagepicker.vue?vue&type=template&id=153fe052&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4550555__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_imagepicker_vue_vue_type_template_id_153fe052___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4550555__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_imagepicker_vue_vue_type_template_id_153fe052___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/matrix.vue\":\n/*!****************************!*\\\n  !*** ./src/vue/matrix.vue ***!\n  \\****************************/\n/*! exports provided: Matrix, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4552138__) {\n\n\"use strict\";\n__nested_webpack_require_4552138__.r(__nested_webpack_exports__);\n/* harmony import */ var _matrix_vue_vue_type_template_id_7fa2f403___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4552138__(/*! ./matrix.vue?vue&type=template&id=7fa2f403& */ \"./src/vue/matrix.vue?vue&type=template&id=7fa2f403&\");\n/* harmony import */ var _matrix_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4552138__(/*! ./matrix.vue?vue&type=script&lang=ts& */ \"./src/vue/matrix.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4552138__.d(__nested_webpack_exports__, \"Matrix\", function() { return _matrix_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Matrix\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4552138__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _matrix_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _matrix_vue_vue_type_template_id_7fa2f403___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _matrix_vue_vue_type_template_id_7fa2f403___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/matrix.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/matrix.vue?vue&type=script&lang=ts&\":\n/*!*****************************************************!*\\\n  !*** ./src/vue/matrix.vue?vue&type=script&lang=ts& ***!\n  \\*****************************************************/\n/*! exports provided: default, Matrix */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4554067__) {\n\n\"use strict\";\n__nested_webpack_require_4554067__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrix_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4554067__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./matrix.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrix.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4554067__.d(__nested_webpack_exports__, \"Matrix\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrix_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Matrix\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrix_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/matrix.vue?vue&type=template&id=7fa2f403&\":\n/*!***********************************************************!*\\\n  !*** ./src/vue/matrix.vue?vue&type=template&id=7fa2f403& ***!\n  \\***********************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4555497__) {\n\n\"use strict\";\n__nested_webpack_require_4555497__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrix_vue_vue_type_template_id_7fa2f403___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4555497__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./matrix.vue?vue&type=template&id=7fa2f403& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrix.vue?vue&type=template&id=7fa2f403&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4555497__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrix_vue_vue_type_template_id_7fa2f403___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4555497__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrix_vue_vue_type_template_id_7fa2f403___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/matrixcell.vue\":\n/*!********************************!*\\\n  !*** ./src/vue/matrixcell.vue ***!\n  \\********************************/\n/*! exports provided: MatrixCell, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4557075__) {\n\n\"use strict\";\n__nested_webpack_require_4557075__.r(__nested_webpack_exports__);\n/* harmony import */ var _matrixcell_vue_vue_type_template_id_3ca54ee5___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4557075__(/*! ./matrixcell.vue?vue&type=template&id=3ca54ee5& */ \"./src/vue/matrixcell.vue?vue&type=template&id=3ca54ee5&\");\n/* harmony import */ var _matrixcell_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4557075__(/*! ./matrixcell.vue?vue&type=script&lang=ts& */ \"./src/vue/matrixcell.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4557075__.d(__nested_webpack_exports__, \"MatrixCell\", function() { return _matrixcell_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"MatrixCell\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4557075__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _matrixcell_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _matrixcell_vue_vue_type_template_id_3ca54ee5___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _matrixcell_vue_vue_type_template_id_3ca54ee5___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/matrixcell.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/matrixcell.vue?vue&type=script&lang=ts&\":\n/*!*********************************************************!*\\\n  !*** ./src/vue/matrixcell.vue?vue&type=script&lang=ts& ***!\n  \\*********************************************************/\n/*! exports provided: default, MatrixCell */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4559076__) {\n\n\"use strict\";\n__nested_webpack_require_4559076__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixcell_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4559076__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./matrixcell.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrixcell.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4559076__.d(__nested_webpack_exports__, \"MatrixCell\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixcell_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"MatrixCell\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixcell_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/matrixcell.vue?vue&type=template&id=3ca54ee5&\":\n/*!***************************************************************!*\\\n  !*** ./src/vue/matrixcell.vue?vue&type=template&id=3ca54ee5& ***!\n  \\***************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4560550__) {\n\n\"use strict\";\n__nested_webpack_require_4560550__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixcell_vue_vue_type_template_id_3ca54ee5___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4560550__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./matrixcell.vue?vue&type=template&id=3ca54ee5& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrixcell.vue?vue&type=template&id=3ca54ee5&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4560550__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixcell_vue_vue_type_template_id_3ca54ee5___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4560550__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixcell_vue_vue_type_template_id_3ca54ee5___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/matrixdropdown.vue\":\n/*!************************************!*\\\n  !*** ./src/vue/matrixdropdown.vue ***!\n  \\************************************/\n/*! exports provided: MatrixDropdown, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4562168__) {\n\n\"use strict\";\n__nested_webpack_require_4562168__.r(__nested_webpack_exports__);\n/* harmony import */ var _matrixdropdown_vue_vue_type_template_id_0b4da6d8___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4562168__(/*! ./matrixdropdown.vue?vue&type=template&id=0b4da6d8& */ \"./src/vue/matrixdropdown.vue?vue&type=template&id=0b4da6d8&\");\n/* harmony import */ var _matrixdropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4562168__(/*! ./matrixdropdown.vue?vue&type=script&lang=ts& */ \"./src/vue/matrixdropdown.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4562168__.d(__nested_webpack_exports__, \"MatrixDropdown\", function() { return _matrixdropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"MatrixDropdown\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4562168__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _matrixdropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _matrixdropdown_vue_vue_type_template_id_0b4da6d8___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _matrixdropdown_vue_vue_type_template_id_0b4da6d8___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/matrixdropdown.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/matrixdropdown.vue?vue&type=script&lang=ts&\":\n/*!*************************************************************!*\\\n  !*** ./src/vue/matrixdropdown.vue?vue&type=script&lang=ts& ***!\n  \\*************************************************************/\n/*! exports provided: default, MatrixDropdown */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4564241__) {\n\n\"use strict\";\n__nested_webpack_require_4564241__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixdropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4564241__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./matrixdropdown.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrixdropdown.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4564241__.d(__nested_webpack_exports__, \"MatrixDropdown\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixdropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"MatrixDropdown\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixdropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/matrixdropdown.vue?vue&type=template&id=0b4da6d8&\":\n/*!*******************************************************************!*\\\n  !*** ./src/vue/matrixdropdown.vue?vue&type=template&id=0b4da6d8& ***!\n  \\*******************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4565759__) {\n\n\"use strict\";\n__nested_webpack_require_4565759__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixdropdown_vue_vue_type_template_id_0b4da6d8___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4565759__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./matrixdropdown.vue?vue&type=template&id=0b4da6d8& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrixdropdown.vue?vue&type=template&id=0b4da6d8&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4565759__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixdropdown_vue_vue_type_template_id_0b4da6d8___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4565759__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixdropdown_vue_vue_type_template_id_0b4da6d8___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/matrixdynamic.vue\":\n/*!***********************************!*\\\n  !*** ./src/vue/matrixdynamic.vue ***!\n  \\***********************************/\n/*! exports provided: MatrixDynamic, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4567392__) {\n\n\"use strict\";\n__nested_webpack_require_4567392__.r(__nested_webpack_exports__);\n/* harmony import */ var _matrixdynamic_vue_vue_type_template_id_9a0b88e8___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4567392__(/*! ./matrixdynamic.vue?vue&type=template&id=9a0b88e8& */ \"./src/vue/matrixdynamic.vue?vue&type=template&id=9a0b88e8&\");\n/* harmony import */ var _matrixdynamic_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4567392__(/*! ./matrixdynamic.vue?vue&type=script&lang=ts& */ \"./src/vue/matrixdynamic.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4567392__.d(__nested_webpack_exports__, \"MatrixDynamic\", function() { return _matrixdynamic_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"MatrixDynamic\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4567392__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _matrixdynamic_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _matrixdynamic_vue_vue_type_template_id_9a0b88e8___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _matrixdynamic_vue_vue_type_template_id_9a0b88e8___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/matrixdynamic.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/matrixdynamic.vue?vue&type=script&lang=ts&\":\n/*!************************************************************!*\\\n  !*** ./src/vue/matrixdynamic.vue?vue&type=script&lang=ts& ***!\n  \\************************************************************/\n/*! exports provided: default, MatrixDynamic */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4569447__) {\n\n\"use strict\";\n__nested_webpack_require_4569447__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixdynamic_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4569447__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./matrixdynamic.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrixdynamic.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4569447__.d(__nested_webpack_exports__, \"MatrixDynamic\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixdynamic_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"MatrixDynamic\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixdynamic_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/matrixdynamic.vue?vue&type=template&id=9a0b88e8&\":\n/*!******************************************************************!*\\\n  !*** ./src/vue/matrixdynamic.vue?vue&type=template&id=9a0b88e8& ***!\n  \\******************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4570954__) {\n\n\"use strict\";\n__nested_webpack_require_4570954__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixdynamic_vue_vue_type_template_id_9a0b88e8___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4570954__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./matrixdynamic.vue?vue&type=template&id=9a0b88e8& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrixdynamic.vue?vue&type=template&id=9a0b88e8&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4570954__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixdynamic_vue_vue_type_template_id_9a0b88e8___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4570954__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixdynamic_vue_vue_type_template_id_9a0b88e8___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/matrixheaderrequired.vue\":\n/*!******************************************!*\\\n  !*** ./src/vue/matrixheaderrequired.vue ***!\n  \\******************************************/\n/*! exports provided: MatrixHeaderRequired, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4572617__) {\n\n\"use strict\";\n__nested_webpack_require_4572617__.r(__nested_webpack_exports__);\n/* harmony import */ var _matrixheaderrequired_vue_vue_type_template_id_5d995022___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4572617__(/*! ./matrixheaderrequired.vue?vue&type=template&id=5d995022& */ \"./src/vue/matrixheaderrequired.vue?vue&type=template&id=5d995022&\");\n/* harmony import */ var _matrixheaderrequired_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4572617__(/*! ./matrixheaderrequired.vue?vue&type=script&lang=ts& */ \"./src/vue/matrixheaderrequired.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4572617__.d(__nested_webpack_exports__, \"MatrixHeaderRequired\", function() { return _matrixheaderrequired_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"MatrixHeaderRequired\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4572617__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _matrixheaderrequired_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _matrixheaderrequired_vue_vue_type_template_id_5d995022___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _matrixheaderrequired_vue_vue_type_template_id_5d995022___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/matrixheaderrequired.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/matrixheaderrequired.vue?vue&type=script&lang=ts&\":\n/*!*******************************************************************!*\\\n  !*** ./src/vue/matrixheaderrequired.vue?vue&type=script&lang=ts& ***!\n  \\*******************************************************************/\n/*! exports provided: default, MatrixHeaderRequired */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4574798__) {\n\n\"use strict\";\n__nested_webpack_require_4574798__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixheaderrequired_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4574798__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./matrixheaderrequired.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrixheaderrequired.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4574798__.d(__nested_webpack_exports__, \"MatrixHeaderRequired\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixheaderrequired_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"MatrixHeaderRequired\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixheaderrequired_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/matrixheaderrequired.vue?vue&type=template&id=5d995022&\":\n/*!*************************************************************************!*\\\n  !*** ./src/vue/matrixheaderrequired.vue?vue&type=template&id=5d995022& ***!\n  \\*************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4576382__) {\n\n\"use strict\";\n__nested_webpack_require_4576382__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixheaderrequired_vue_vue_type_template_id_5d995022___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4576382__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./matrixheaderrequired.vue?vue&type=template&id=5d995022& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrixheaderrequired.vue?vue&type=template&id=5d995022&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4576382__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixheaderrequired_vue_vue_type_template_id_5d995022___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4576382__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixheaderrequired_vue_vue_type_template_id_5d995022___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/matrixtable.vue\":\n/*!*********************************!*\\\n  !*** ./src/vue/matrixtable.vue ***!\n  \\*********************************/\n/*! exports provided: MatrixTable, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4578035__) {\n\n\"use strict\";\n__nested_webpack_require_4578035__.r(__nested_webpack_exports__);\n/* harmony import */ var _matrixtable_vue_vue_type_template_id_fa197e4a___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4578035__(/*! ./matrixtable.vue?vue&type=template&id=fa197e4a& */ \"./src/vue/matrixtable.vue?vue&type=template&id=fa197e4a&\");\n/* harmony import */ var _matrixtable_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4578035__(/*! ./matrixtable.vue?vue&type=script&lang=ts& */ \"./src/vue/matrixtable.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4578035__.d(__nested_webpack_exports__, \"MatrixTable\", function() { return _matrixtable_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"MatrixTable\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4578035__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _matrixtable_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _matrixtable_vue_vue_type_template_id_fa197e4a___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _matrixtable_vue_vue_type_template_id_fa197e4a___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/matrixtable.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/matrixtable.vue?vue&type=script&lang=ts&\":\n/*!**********************************************************!*\\\n  !*** ./src/vue/matrixtable.vue?vue&type=script&lang=ts& ***!\n  \\**********************************************************/\n/*! exports provided: default, MatrixTable */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4580054__) {\n\n\"use strict\";\n__nested_webpack_require_4580054__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixtable_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4580054__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./matrixtable.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrixtable.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4580054__.d(__nested_webpack_exports__, \"MatrixTable\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixtable_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"MatrixTable\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixtable_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/matrixtable.vue?vue&type=template&id=fa197e4a&\":\n/*!****************************************************************!*\\\n  !*** ./src/vue/matrixtable.vue?vue&type=template&id=fa197e4a& ***!\n  \\****************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4581539__) {\n\n\"use strict\";\n__nested_webpack_require_4581539__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixtable_vue_vue_type_template_id_fa197e4a___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4581539__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./matrixtable.vue?vue&type=template&id=fa197e4a& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrixtable.vue?vue&type=template&id=fa197e4a&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4581539__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixtable_vue_vue_type_template_id_fa197e4a___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4581539__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixtable_vue_vue_type_template_id_fa197e4a___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/multipletext.vue\":\n/*!**********************************!*\\\n  !*** ./src/vue/multipletext.vue ***!\n  \\**********************************/\n/*! exports provided: MultipleText, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4583152__) {\n\n\"use strict\";\n__nested_webpack_require_4583152__.r(__nested_webpack_exports__);\n/* harmony import */ var _multipletext_vue_vue_type_template_id_93fe4c02___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4583152__(/*! ./multipletext.vue?vue&type=template&id=93fe4c02& */ \"./src/vue/multipletext.vue?vue&type=template&id=93fe4c02&\");\n/* harmony import */ var _multipletext_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4583152__(/*! ./multipletext.vue?vue&type=script&lang=ts& */ \"./src/vue/multipletext.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4583152__.d(__nested_webpack_exports__, \"MultipleText\", function() { return _multipletext_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"MultipleText\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4583152__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _multipletext_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _multipletext_vue_vue_type_template_id_93fe4c02___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _multipletext_vue_vue_type_template_id_93fe4c02___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/multipletext.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/multipletext.vue?vue&type=script&lang=ts&\":\n/*!***********************************************************!*\\\n  !*** ./src/vue/multipletext.vue?vue&type=script&lang=ts& ***!\n  \\***********************************************************/\n/*! exports provided: default, MultipleText */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4585189__) {\n\n\"use strict\";\n__nested_webpack_require_4585189__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_multipletext_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4585189__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./multipletext.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/multipletext.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4585189__.d(__nested_webpack_exports__, \"MultipleText\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_multipletext_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"MultipleText\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_multipletext_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/multipletext.vue?vue&type=template&id=93fe4c02&\":\n/*!*****************************************************************!*\\\n  !*** ./src/vue/multipletext.vue?vue&type=template&id=93fe4c02& ***!\n  \\*****************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4586685__) {\n\n\"use strict\";\n__nested_webpack_require_4586685__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_multipletext_vue_vue_type_template_id_93fe4c02___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4586685__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./multipletext.vue?vue&type=template&id=93fe4c02& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/multipletext.vue?vue&type=template&id=93fe4c02&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4586685__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_multipletext_vue_vue_type_template_id_93fe4c02___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4586685__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_multipletext_vue_vue_type_template_id_93fe4c02___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/multipletextitem.vue\":\n/*!**************************************!*\\\n  !*** ./src/vue/multipletextitem.vue ***!\n  \\**************************************/\n/*! exports provided: MultipleTextItem, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4588323__) {\n\n\"use strict\";\n__nested_webpack_require_4588323__.r(__nested_webpack_exports__);\n/* harmony import */ var _multipletextitem_vue_vue_type_template_id_22488812___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4588323__(/*! ./multipletextitem.vue?vue&type=template&id=22488812& */ \"./src/vue/multipletextitem.vue?vue&type=template&id=22488812&\");\n/* harmony import */ var _multipletextitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4588323__(/*! ./multipletextitem.vue?vue&type=script&lang=ts& */ \"./src/vue/multipletextitem.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4588323__.d(__nested_webpack_exports__, \"MultipleTextItem\", function() { return _multipletextitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"MultipleTextItem\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4588323__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _multipletextitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _multipletextitem_vue_vue_type_template_id_22488812___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _multipletextitem_vue_vue_type_template_id_22488812___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/multipletextitem.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/multipletextitem.vue?vue&type=script&lang=ts&\":\n/*!***************************************************************!*\\\n  !*** ./src/vue/multipletextitem.vue?vue&type=script&lang=ts& ***!\n  \\***************************************************************/\n/*! exports provided: default, MultipleTextItem */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4590432__) {\n\n\"use strict\";\n__nested_webpack_require_4590432__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_multipletextitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4590432__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./multipletextitem.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/multipletextitem.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4590432__.d(__nested_webpack_exports__, \"MultipleTextItem\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_multipletextitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"MultipleTextItem\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_multipletextitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/multipletextitem.vue?vue&type=template&id=22488812&\":\n/*!*********************************************************************!*\\\n  !*** ./src/vue/multipletextitem.vue?vue&type=template&id=22488812& ***!\n  \\*********************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4591972__) {\n\n\"use strict\";\n__nested_webpack_require_4591972__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_multipletextitem_vue_vue_type_template_id_22488812___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4591972__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./multipletextitem.vue?vue&type=template&id=22488812& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/multipletextitem.vue?vue&type=template&id=22488812&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4591972__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_multipletextitem_vue_vue_type_template_id_22488812___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4591972__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_multipletextitem_vue_vue_type_template_id_22488812___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/page.vue\":\n/*!**************************!*\\\n  !*** ./src/vue/page.vue ***!\n  \\**************************/\n/*! exports provided: Page, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4593570__) {\n\n\"use strict\";\n__nested_webpack_require_4593570__.r(__nested_webpack_exports__);\n/* harmony import */ var _page_vue_vue_type_template_id_4e962a51___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4593570__(/*! ./page.vue?vue&type=template&id=4e962a51& */ \"./src/vue/page.vue?vue&type=template&id=4e962a51&\");\n/* harmony import */ var _page_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4593570__(/*! ./page.vue?vue&type=script&lang=ts& */ \"./src/vue/page.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4593570__.d(__nested_webpack_exports__, \"Page\", function() { return _page_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Page\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4593570__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _page_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _page_vue_vue_type_template_id_4e962a51___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _page_vue_vue_type_template_id_4e962a51___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/page.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/page.vue?vue&type=script&lang=ts&\":\n/*!***************************************************!*\\\n  !*** ./src/vue/page.vue?vue&type=script&lang=ts& ***!\n  \\***************************************************/\n/*! exports provided: default, Page */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4595463__) {\n\n\"use strict\";\n__nested_webpack_require_4595463__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_page_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4595463__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./page.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/page.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4595463__.d(__nested_webpack_exports__, \"Page\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_page_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Page\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_page_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/page.vue?vue&type=template&id=4e962a51&\":\n/*!*********************************************************!*\\\n  !*** ./src/vue/page.vue?vue&type=template&id=4e962a51& ***!\n  \\*********************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4596871__) {\n\n\"use strict\";\n__nested_webpack_require_4596871__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_page_vue_vue_type_template_id_4e962a51___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4596871__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./page.vue?vue&type=template&id=4e962a51& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/page.vue?vue&type=template&id=4e962a51&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4596871__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_page_vue_vue_type_template_id_4e962a51___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4596871__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_page_vue_vue_type_template_id_4e962a51___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/panel.vue\":\n/*!***************************!*\\\n  !*** ./src/vue/panel.vue ***!\n  \\***************************/\n/*! exports provided: Panel, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4598414__) {\n\n\"use strict\";\n__nested_webpack_require_4598414__.r(__nested_webpack_exports__);\n/* harmony import */ var _panel_vue_vue_type_template_id_0c78899c___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4598414__(/*! ./panel.vue?vue&type=template&id=0c78899c& */ \"./src/vue/panel.vue?vue&type=template&id=0c78899c&\");\n/* harmony import */ var _panel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4598414__(/*! ./panel.vue?vue&type=script&lang=ts& */ \"./src/vue/panel.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4598414__.d(__nested_webpack_exports__, \"Panel\", function() { return _panel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Panel\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4598414__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _panel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _panel_vue_vue_type_template_id_0c78899c___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _panel_vue_vue_type_template_id_0c78899c___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/panel.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/panel.vue?vue&type=script&lang=ts&\":\n/*!****************************************************!*\\\n  !*** ./src/vue/panel.vue?vue&type=script&lang=ts& ***!\n  \\****************************************************/\n/*! exports provided: default, Panel */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4600325__) {\n\n\"use strict\";\n__nested_webpack_require_4600325__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_panel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4600325__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./panel.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/panel.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4600325__.d(__nested_webpack_exports__, \"Panel\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_panel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Panel\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_panel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/panel.vue?vue&type=template&id=0c78899c&\":\n/*!**********************************************************!*\\\n  !*** ./src/vue/panel.vue?vue&type=template&id=0c78899c& ***!\n  \\**********************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4601744__) {\n\n\"use strict\";\n__nested_webpack_require_4601744__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_panel_vue_vue_type_template_id_0c78899c___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4601744__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./panel.vue?vue&type=template&id=0c78899c& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/panel.vue?vue&type=template&id=0c78899c&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4601744__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_panel_vue_vue_type_template_id_0c78899c___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4601744__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_panel_vue_vue_type_template_id_0c78899c___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/paneldynamic.vue\":\n/*!**********************************!*\\\n  !*** ./src/vue/paneldynamic.vue ***!\n  \\**********************************/\n/*! exports provided: PanelDynamic, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4603327__) {\n\n\"use strict\";\n__nested_webpack_require_4603327__.r(__nested_webpack_exports__);\n/* harmony import */ var _paneldynamic_vue_vue_type_template_id_9dda5d06___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4603327__(/*! ./paneldynamic.vue?vue&type=template&id=9dda5d06& */ \"./src/vue/paneldynamic.vue?vue&type=template&id=9dda5d06&\");\n/* harmony import */ var _paneldynamic_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4603327__(/*! ./paneldynamic.vue?vue&type=script&lang=ts& */ \"./src/vue/paneldynamic.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4603327__.d(__nested_webpack_exports__, \"PanelDynamic\", function() { return _paneldynamic_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"PanelDynamic\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4603327__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _paneldynamic_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _paneldynamic_vue_vue_type_template_id_9dda5d06___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _paneldynamic_vue_vue_type_template_id_9dda5d06___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/paneldynamic.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/paneldynamic.vue?vue&type=script&lang=ts&\":\n/*!***********************************************************!*\\\n  !*** ./src/vue/paneldynamic.vue?vue&type=script&lang=ts& ***!\n  \\***********************************************************/\n/*! exports provided: default, PanelDynamic */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4605364__) {\n\n\"use strict\";\n__nested_webpack_require_4605364__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamic_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4605364__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./paneldynamic.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/paneldynamic.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4605364__.d(__nested_webpack_exports__, \"PanelDynamic\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamic_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"PanelDynamic\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamic_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/paneldynamic.vue?vue&type=template&id=9dda5d06&\":\n/*!*****************************************************************!*\\\n  !*** ./src/vue/paneldynamic.vue?vue&type=template&id=9dda5d06& ***!\n  \\*****************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4606860__) {\n\n\"use strict\";\n__nested_webpack_require_4606860__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamic_vue_vue_type_template_id_9dda5d06___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4606860__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./paneldynamic.vue?vue&type=template&id=9dda5d06& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/paneldynamic.vue?vue&type=template&id=9dda5d06&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4606860__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamic_vue_vue_type_template_id_9dda5d06___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4606860__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamic_vue_vue_type_template_id_9dda5d06___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/paneldynamicprogress.vue\":\n/*!******************************************!*\\\n  !*** ./src/vue/paneldynamicprogress.vue ***!\n  \\******************************************/\n/*! exports provided: PanelDynamicProgress, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4608518__) {\n\n\"use strict\";\n__nested_webpack_require_4608518__.r(__nested_webpack_exports__);\n/* harmony import */ var _paneldynamicprogress_vue_vue_type_template_id_742bffac___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4608518__(/*! ./paneldynamicprogress.vue?vue&type=template&id=742bffac& */ \"./src/vue/paneldynamicprogress.vue?vue&type=template&id=742bffac&\");\n/* harmony import */ var _paneldynamicprogress_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4608518__(/*! ./paneldynamicprogress.vue?vue&type=script&lang=ts& */ \"./src/vue/paneldynamicprogress.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4608518__.d(__nested_webpack_exports__, \"PanelDynamicProgress\", function() { return _paneldynamicprogress_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"PanelDynamicProgress\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4608518__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _paneldynamicprogress_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _paneldynamicprogress_vue_vue_type_template_id_742bffac___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _paneldynamicprogress_vue_vue_type_template_id_742bffac___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/paneldynamicprogress.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/paneldynamicprogress.vue?vue&type=script&lang=ts&\":\n/*!*******************************************************************!*\\\n  !*** ./src/vue/paneldynamicprogress.vue?vue&type=script&lang=ts& ***!\n  \\*******************************************************************/\n/*! exports provided: default, PanelDynamicProgress */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4610699__) {\n\n\"use strict\";\n__nested_webpack_require_4610699__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamicprogress_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4610699__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./paneldynamicprogress.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/paneldynamicprogress.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4610699__.d(__nested_webpack_exports__, \"PanelDynamicProgress\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamicprogress_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"PanelDynamicProgress\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamicprogress_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/paneldynamicprogress.vue?vue&type=template&id=742bffac&\":\n/*!*************************************************************************!*\\\n  !*** ./src/vue/paneldynamicprogress.vue?vue&type=template&id=742bffac& ***!\n  \\*************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4612283__) {\n\n\"use strict\";\n__nested_webpack_require_4612283__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamicprogress_vue_vue_type_template_id_742bffac___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4612283__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./paneldynamicprogress.vue?vue&type=template&id=742bffac& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/paneldynamicprogress.vue?vue&type=template&id=742bffac&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4612283__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamicprogress_vue_vue_type_template_id_742bffac___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4612283__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamicprogress_vue_vue_type_template_id_742bffac___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/paneldynamicprogressV2.vue\":\n/*!********************************************!*\\\n  !*** ./src/vue/paneldynamicprogressV2.vue ***!\n  \\********************************************/\n/*! exports provided: PanelDynamicProgressV2, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4613991__) {\n\n\"use strict\";\n__nested_webpack_require_4613991__.r(__nested_webpack_exports__);\n/* harmony import */ var _paneldynamicprogressV2_vue_vue_type_template_id_33ce4046___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4613991__(/*! ./paneldynamicprogressV2.vue?vue&type=template&id=33ce4046& */ \"./src/vue/paneldynamicprogressV2.vue?vue&type=template&id=33ce4046&\");\n/* harmony import */ var _paneldynamicprogressV2_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4613991__(/*! ./paneldynamicprogressV2.vue?vue&type=script&lang=ts& */ \"./src/vue/paneldynamicprogressV2.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4613991__.d(__nested_webpack_exports__, \"PanelDynamicProgressV2\", function() { return _paneldynamicprogressV2_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"PanelDynamicProgressV2\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4613991__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _paneldynamicprogressV2_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _paneldynamicprogressV2_vue_vue_type_template_id_33ce4046___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _paneldynamicprogressV2_vue_vue_type_template_id_33ce4046___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/paneldynamicprogressV2.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/paneldynamicprogressV2.vue?vue&type=script&lang=ts&\":\n/*!*********************************************************************!*\\\n  !*** ./src/vue/paneldynamicprogressV2.vue?vue&type=script&lang=ts& ***!\n  \\*********************************************************************/\n/*! exports provided: default, PanelDynamicProgressV2 */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4616208__) {\n\n\"use strict\";\n__nested_webpack_require_4616208__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamicprogressV2_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4616208__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./paneldynamicprogressV2.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/paneldynamicprogressV2.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4616208__.d(__nested_webpack_exports__, \"PanelDynamicProgressV2\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamicprogressV2_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"PanelDynamicProgressV2\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamicprogressV2_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/paneldynamicprogressV2.vue?vue&type=template&id=33ce4046&\":\n/*!***************************************************************************!*\\\n  !*** ./src/vue/paneldynamicprogressV2.vue?vue&type=template&id=33ce4046& ***!\n  \\***************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4617814__) {\n\n\"use strict\";\n__nested_webpack_require_4617814__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamicprogressV2_vue_vue_type_template_id_33ce4046___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4617814__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./paneldynamicprogressV2.vue?vue&type=template&id=33ce4046& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/paneldynamicprogressV2.vue?vue&type=template&id=33ce4046&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4617814__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamicprogressV2_vue_vue_type_template_id_33ce4046___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4617814__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamicprogressV2_vue_vue_type_template_id_33ce4046___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/popup-survey.vue\":\n/*!**********************************!*\\\n  !*** ./src/vue/popup-survey.vue ***!\n  \\**********************************/\n/*! exports provided: PopupSurvey, SurveyWindow, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4619495__) {\n\n\"use strict\";\n__nested_webpack_require_4619495__.r(__nested_webpack_exports__);\n/* harmony import */ var _popup_survey_vue_vue_type_template_id_7937df5d___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4619495__(/*! ./popup-survey.vue?vue&type=template&id=7937df5d& */ \"./src/vue/popup-survey.vue?vue&type=template&id=7937df5d&\");\n/* harmony import */ var _popup_survey_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4619495__(/*! ./popup-survey.vue?vue&type=script&lang=ts& */ \"./src/vue/popup-survey.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4619495__.d(__nested_webpack_exports__, \"PopupSurvey\", function() { return _popup_survey_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"PopupSurvey\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4619495__.d(__nested_webpack_exports__, \"SurveyWindow\", function() { return _popup_survey_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"SurveyWindow\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4619495__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _popup_survey_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _popup_survey_vue_vue_type_template_id_7937df5d___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _popup_survey_vue_vue_type_template_id_7937df5d___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/popup-survey.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/popup-survey.vue?vue&type=script&lang=ts&\":\n/*!***********************************************************!*\\\n  !*** ./src/vue/popup-survey.vue?vue&type=script&lang=ts& ***!\n  \\***********************************************************/\n/*! exports provided: default, PopupSurvey, SurveyWindow */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4621746__) {\n\n\"use strict\";\n__nested_webpack_require_4621746__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_survey_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4621746__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./popup-survey.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/popup-survey.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4621746__.d(__nested_webpack_exports__, \"PopupSurvey\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_survey_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"PopupSurvey\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4621746__.d(__nested_webpack_exports__, \"SurveyWindow\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_survey_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"SurveyWindow\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_survey_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/popup-survey.vue?vue&type=template&id=7937df5d&\":\n/*!*****************************************************************!*\\\n  !*** ./src/vue/popup-survey.vue?vue&type=template&id=7937df5d& ***!\n  \\*****************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4623537__) {\n\n\"use strict\";\n__nested_webpack_require_4623537__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_survey_vue_vue_type_template_id_7937df5d___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4623537__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./popup-survey.vue?vue&type=template&id=7937df5d& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/popup-survey.vue?vue&type=template&id=7937df5d&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4623537__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_survey_vue_vue_type_template_id_7937df5d___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4623537__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_survey_vue_vue_type_template_id_7937df5d___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/progress.vue\":\n/*!******************************!*\\\n  !*** ./src/vue/progress.vue ***!\n  \\******************************/\n/*! exports provided: Progress, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4625135__) {\n\n\"use strict\";\n__nested_webpack_require_4625135__.r(__nested_webpack_exports__);\n/* harmony import */ var _progress_vue_vue_type_template_id_27e325ef___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4625135__(/*! ./progress.vue?vue&type=template&id=27e325ef& */ \"./src/vue/progress.vue?vue&type=template&id=27e325ef&\");\n/* harmony import */ var _progress_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4625135__(/*! ./progress.vue?vue&type=script&lang=ts& */ \"./src/vue/progress.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4625135__.d(__nested_webpack_exports__, \"Progress\", function() { return _progress_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Progress\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4625135__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _progress_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _progress_vue_vue_type_template_id_27e325ef___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _progress_vue_vue_type_template_id_27e325ef___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/progress.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/progress.vue?vue&type=script&lang=ts&\":\n/*!*******************************************************!*\\\n  !*** ./src/vue/progress.vue?vue&type=script&lang=ts& ***!\n  \\*******************************************************/\n/*! exports provided: default, Progress */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4627100__) {\n\n\"use strict\";\n__nested_webpack_require_4627100__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_progress_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4627100__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./progress.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/progress.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4627100__.d(__nested_webpack_exports__, \"Progress\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_progress_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Progress\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_progress_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/progress.vue?vue&type=template&id=27e325ef&\":\n/*!*************************************************************!*\\\n  !*** ./src/vue/progress.vue?vue&type=template&id=27e325ef& ***!\n  \\*************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4628552__) {\n\n\"use strict\";\n__nested_webpack_require_4628552__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_progress_vue_vue_type_template_id_27e325ef___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4628552__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./progress.vue?vue&type=template&id=27e325ef& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/progress.vue?vue&type=template&id=27e325ef&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4628552__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_progress_vue_vue_type_template_id_27e325ef___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4628552__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_progress_vue_vue_type_template_id_27e325ef___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/progressButtons.vue\":\n/*!*************************************!*\\\n  !*** ./src/vue/progressButtons.vue ***!\n  \\*************************************/\n/*! exports provided: ProgressButtons, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4630165__) {\n\n\"use strict\";\n__nested_webpack_require_4630165__.r(__nested_webpack_exports__);\n/* harmony import */ var _progressButtons_vue_vue_type_template_id_2ae7de42___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4630165__(/*! ./progressButtons.vue?vue&type=template&id=2ae7de42& */ \"./src/vue/progressButtons.vue?vue&type=template&id=2ae7de42&\");\n/* harmony import */ var _progressButtons_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4630165__(/*! ./progressButtons.vue?vue&type=script&lang=ts& */ \"./src/vue/progressButtons.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4630165__.d(__nested_webpack_exports__, \"ProgressButtons\", function() { return _progressButtons_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"ProgressButtons\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4630165__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _progressButtons_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _progressButtons_vue_vue_type_template_id_2ae7de42___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _progressButtons_vue_vue_type_template_id_2ae7de42___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/progressButtons.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/progressButtons.vue?vue&type=script&lang=ts&\":\n/*!**************************************************************!*\\\n  !*** ./src/vue/progressButtons.vue?vue&type=script&lang=ts& ***!\n  \\**************************************************************/\n/*! exports provided: default, ProgressButtons */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4632256__) {\n\n\"use strict\";\n__nested_webpack_require_4632256__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_progressButtons_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4632256__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./progressButtons.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/progressButtons.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4632256__.d(__nested_webpack_exports__, \"ProgressButtons\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_progressButtons_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"ProgressButtons\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_progressButtons_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/progressButtons.vue?vue&type=template&id=2ae7de42&\":\n/*!********************************************************************!*\\\n  !*** ./src/vue/progressButtons.vue?vue&type=template&id=2ae7de42& ***!\n  \\********************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4633785__) {\n\n\"use strict\";\n__nested_webpack_require_4633785__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_progressButtons_vue_vue_type_template_id_2ae7de42___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4633785__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./progressButtons.vue?vue&type=template&id=2ae7de42& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/progressButtons.vue?vue&type=template&id=2ae7de42&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4633785__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_progressButtons_vue_vue_type_template_id_2ae7de42___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4633785__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_progressButtons_vue_vue_type_template_id_2ae7de42___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/progressToc.vue\":\n/*!*********************************!*\\\n  !*** ./src/vue/progressToc.vue ***!\n  \\*********************************/\n/*! exports provided: ProgressToc, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4635413__) {\n\n\"use strict\";\n__nested_webpack_require_4635413__.r(__nested_webpack_exports__);\n/* harmony import */ var _progressToc_vue_vue_type_template_id_f0bd3dee___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4635413__(/*! ./progressToc.vue?vue&type=template&id=f0bd3dee& */ \"./src/vue/progressToc.vue?vue&type=template&id=f0bd3dee&\");\n/* harmony import */ var _progressToc_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4635413__(/*! ./progressToc.vue?vue&type=script&lang=ts& */ \"./src/vue/progressToc.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4635413__.d(__nested_webpack_exports__, \"ProgressToc\", function() { return _progressToc_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"ProgressToc\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4635413__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _progressToc_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _progressToc_vue_vue_type_template_id_f0bd3dee___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _progressToc_vue_vue_type_template_id_f0bd3dee___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/progressToc.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/progressToc.vue?vue&type=script&lang=ts&\":\n/*!**********************************************************!*\\\n  !*** ./src/vue/progressToc.vue?vue&type=script&lang=ts& ***!\n  \\**********************************************************/\n/*! exports provided: default, ProgressToc */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4637432__) {\n\n\"use strict\";\n__nested_webpack_require_4637432__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_progressToc_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4637432__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./progressToc.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/progressToc.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4637432__.d(__nested_webpack_exports__, \"ProgressToc\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_progressToc_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"ProgressToc\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_progressToc_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/progressToc.vue?vue&type=template&id=f0bd3dee&\":\n/*!****************************************************************!*\\\n  !*** ./src/vue/progressToc.vue?vue&type=template&id=f0bd3dee& ***!\n  \\****************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4638917__) {\n\n\"use strict\";\n__nested_webpack_require_4638917__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_progressToc_vue_vue_type_template_id_f0bd3dee___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4638917__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./progressToc.vue?vue&type=template&id=f0bd3dee& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/progressToc.vue?vue&type=template&id=f0bd3dee&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4638917__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_progressToc_vue_vue_type_template_id_f0bd3dee___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4638917__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_progressToc_vue_vue_type_template_id_f0bd3dee___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/question-comment.vue\":\n/*!**************************************!*\\\n  !*** ./src/vue/question-comment.vue ***!\n  \\**************************************/\n/*! exports provided: OtherComment, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4640546__) {\n\n\"use strict\";\n__nested_webpack_require_4640546__.r(__nested_webpack_exports__);\n/* harmony import */ var _question_comment_vue_vue_type_template_id_0c35788c___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4640546__(/*! ./question-comment.vue?vue&type=template&id=0c35788c& */ \"./src/vue/question-comment.vue?vue&type=template&id=0c35788c&\");\n/* harmony import */ var _question_comment_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4640546__(/*! ./question-comment.vue?vue&type=script&lang=ts& */ \"./src/vue/question-comment.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4640546__.d(__nested_webpack_exports__, \"OtherComment\", function() { return _question_comment_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"OtherComment\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4640546__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _question_comment_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _question_comment_vue_vue_type_template_id_0c35788c___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _question_comment_vue_vue_type_template_id_0c35788c___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/question-comment.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/question-comment.vue?vue&type=script&lang=ts&\":\n/*!***************************************************************!*\\\n  !*** ./src/vue/question-comment.vue?vue&type=script&lang=ts& ***!\n  \\***************************************************************/\n/*! exports provided: default, OtherComment */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4642643__) {\n\n\"use strict\";\n__nested_webpack_require_4642643__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_question_comment_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4642643__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./question-comment.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/question-comment.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4642643__.d(__nested_webpack_exports__, \"OtherComment\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_question_comment_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"OtherComment\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_question_comment_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/question-comment.vue?vue&type=template&id=0c35788c&\":\n/*!*********************************************************************!*\\\n  !*** ./src/vue/question-comment.vue?vue&type=template&id=0c35788c& ***!\n  \\*********************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4644175__) {\n\n\"use strict\";\n__nested_webpack_require_4644175__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_question_comment_vue_vue_type_template_id_0c35788c___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4644175__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./question-comment.vue?vue&type=template&id=0c35788c& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/question-comment.vue?vue&type=template&id=0c35788c&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4644175__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_question_comment_vue_vue_type_template_id_0c35788c___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4644175__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_question_comment_vue_vue_type_template_id_0c35788c___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/question-other.vue\":\n/*!************************************!*\\\n  !*** ./src/vue/question-other.vue ***!\n  \\************************************/\n/*! exports provided: OtherChoice, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4645820__) {\n\n\"use strict\";\n__nested_webpack_require_4645820__.r(__nested_webpack_exports__);\n/* harmony import */ var _question_other_vue_vue_type_template_id_d3986eaa___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4645820__(/*! ./question-other.vue?vue&type=template&id=d3986eaa& */ \"./src/vue/question-other.vue?vue&type=template&id=d3986eaa&\");\n/* harmony import */ var _question_other_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4645820__(/*! ./question-other.vue?vue&type=script&lang=ts& */ \"./src/vue/question-other.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4645820__.d(__nested_webpack_exports__, \"OtherChoice\", function() { return _question_other_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"OtherChoice\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4645820__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _question_other_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _question_other_vue_vue_type_template_id_d3986eaa___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _question_other_vue_vue_type_template_id_d3986eaa___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/question-other.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/question-other.vue?vue&type=script&lang=ts&\":\n/*!*************************************************************!*\\\n  !*** ./src/vue/question-other.vue?vue&type=script&lang=ts& ***!\n  \\*************************************************************/\n/*! exports provided: default, OtherChoice */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4647884__) {\n\n\"use strict\";\n__nested_webpack_require_4647884__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_question_other_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4647884__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./question-other.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/question-other.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4647884__.d(__nested_webpack_exports__, \"OtherChoice\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_question_other_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"OtherChoice\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_question_other_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/question-other.vue?vue&type=template&id=d3986eaa&\":\n/*!*******************************************************************!*\\\n  !*** ./src/vue/question-other.vue?vue&type=template&id=d3986eaa& ***!\n  \\*******************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4649396__) {\n\n\"use strict\";\n__nested_webpack_require_4649396__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_question_other_vue_vue_type_template_id_d3986eaa___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4649396__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./question-other.vue?vue&type=template&id=d3986eaa& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/question-other.vue?vue&type=template&id=d3986eaa&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4649396__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_question_other_vue_vue_type_template_id_d3986eaa___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4649396__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_question_other_vue_vue_type_template_id_d3986eaa___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/question.ts\":\n/*!*****************************!*\\\n  !*** ./src/vue/question.ts ***!\n  \\*****************************/\n/*! exports provided: QuestionVue, getComponentName, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4651021__) {\n\n\"use strict\";\n__nested_webpack_require_4651021__.r(__nested_webpack_exports__);\n/* harmony export (binding) */ __nested_webpack_require_4651021__.d(__nested_webpack_exports__, \"QuestionVue\", function() { return QuestionVue; });\n/* harmony export (binding) */ __nested_webpack_require_4651021__.d(__nested_webpack_exports__, \"getComponentName\", function() { return getComponentName; });\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4651021__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4651021__(/*! ./base */ \"./src/vue/base.ts\");\nvar __extends = ( false) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = ( false) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar QuestionVue = /** @class */ (function (_super) {\n    __extends(QuestionVue, _super);\n    function QuestionVue() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.innerValue = null;\n        return _this;\n    }\n    QuestionVue.prototype.changeQuestion = function (new_val, old_val) {\n        this.innerValue = null;\n    };\n    QuestionVue.prototype.getModel = function () {\n        return this.question;\n    };\n    QuestionVue.prototype.onMounted = function () {\n        if (this.question) {\n            this.question.afterRenderQuestionElement(this.$el);\n        }\n    };\n    QuestionVue.prototype.beforeDestroy = function () {\n        if (this.question) {\n            this.question.beforeDestroyQuestionElement(this.$el);\n        }\n    };\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Prop\"])()\n    ], QuestionVue.prototype, \"question\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Prop\"])()\n    ], QuestionVue.prototype, \"css\", void 0);\n    __decorate([\n        Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Watch\"])(\"question\")\n    ], QuestionVue.prototype, \"changeQuestion\", null);\n    QuestionVue = __decorate([\n        vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Component\"]\n    ], QuestionVue);\n    return QuestionVue;\n}(_base__WEBPACK_IMPORTED_MODULE_1__[\"BaseVue\"]));\n\nfunction getComponentName(question) {\n    if (question.customWidget)\n        return \"survey-customwidget\";\n    if (question.isDefaultRendering && question.isDefaultRendering() || question.isPanel)\n        return \"survey-\" + question.getTemplate();\n    return question.getComponentName();\n}\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (QuestionVue);\n\n\n/***/ }),\n\n/***/ \"./src/vue/radiogroup.vue\":\n/*!********************************!*\\\n  !*** ./src/vue/radiogroup.vue ***!\n  \\********************************/\n/*! exports provided: Radiogroup, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4655077__) {\n\n\"use strict\";\n__nested_webpack_require_4655077__.r(__nested_webpack_exports__);\n/* harmony import */ var _radiogroup_vue_vue_type_template_id_06c6d526___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4655077__(/*! ./radiogroup.vue?vue&type=template&id=06c6d526& */ \"./src/vue/radiogroup.vue?vue&type=template&id=06c6d526&\");\n/* harmony import */ var _radiogroup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4655077__(/*! ./radiogroup.vue?vue&type=script&lang=ts& */ \"./src/vue/radiogroup.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4655077__.d(__nested_webpack_exports__, \"Radiogroup\", function() { return _radiogroup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Radiogroup\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4655077__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _radiogroup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _radiogroup_vue_vue_type_template_id_06c6d526___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _radiogroup_vue_vue_type_template_id_06c6d526___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/radiogroup.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/radiogroup.vue?vue&type=script&lang=ts&\":\n/*!*********************************************************!*\\\n  !*** ./src/vue/radiogroup.vue?vue&type=script&lang=ts& ***!\n  \\*********************************************************/\n/*! exports provided: default, Radiogroup */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4657078__) {\n\n\"use strict\";\n__nested_webpack_require_4657078__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_radiogroup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4657078__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./radiogroup.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/radiogroup.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4657078__.d(__nested_webpack_exports__, \"Radiogroup\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_radiogroup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Radiogroup\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_radiogroup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/radiogroup.vue?vue&type=template&id=06c6d526&\":\n/*!***************************************************************!*\\\n  !*** ./src/vue/radiogroup.vue?vue&type=template&id=06c6d526& ***!\n  \\***************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4658552__) {\n\n\"use strict\";\n__nested_webpack_require_4658552__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_radiogroup_vue_vue_type_template_id_06c6d526___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4658552__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./radiogroup.vue?vue&type=template&id=06c6d526& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/radiogroup.vue?vue&type=template&id=06c6d526&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4658552__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_radiogroup_vue_vue_type_template_id_06c6d526___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4658552__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_radiogroup_vue_vue_type_template_id_06c6d526___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/radiogroupitem.vue\":\n/*!************************************!*\\\n  !*** ./src/vue/radiogroupitem.vue ***!\n  \\************************************/\n/*! exports provided: RadiogroupItem, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4660170__) {\n\n\"use strict\";\n__nested_webpack_require_4660170__.r(__nested_webpack_exports__);\n/* harmony import */ var _radiogroupitem_vue_vue_type_template_id_5bbe97b9___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4660170__(/*! ./radiogroupitem.vue?vue&type=template&id=5bbe97b9& */ \"./src/vue/radiogroupitem.vue?vue&type=template&id=5bbe97b9&\");\n/* harmony import */ var _radiogroupitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4660170__(/*! ./radiogroupitem.vue?vue&type=script&lang=ts& */ \"./src/vue/radiogroupitem.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4660170__.d(__nested_webpack_exports__, \"RadiogroupItem\", function() { return _radiogroupitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"RadiogroupItem\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4660170__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _radiogroupitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _radiogroupitem_vue_vue_type_template_id_5bbe97b9___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _radiogroupitem_vue_vue_type_template_id_5bbe97b9___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/radiogroupitem.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/radiogroupitem.vue?vue&type=script&lang=ts&\":\n/*!*************************************************************!*\\\n  !*** ./src/vue/radiogroupitem.vue?vue&type=script&lang=ts& ***!\n  \\*************************************************************/\n/*! exports provided: default, RadiogroupItem */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4662243__) {\n\n\"use strict\";\n__nested_webpack_require_4662243__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_radiogroupitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4662243__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./radiogroupitem.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/radiogroupitem.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4662243__.d(__nested_webpack_exports__, \"RadiogroupItem\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_radiogroupitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"RadiogroupItem\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_radiogroupitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/radiogroupitem.vue?vue&type=template&id=5bbe97b9&\":\n/*!*******************************************************************!*\\\n  !*** ./src/vue/radiogroupitem.vue?vue&type=template&id=5bbe97b9& ***!\n  \\*******************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4663761__) {\n\n\"use strict\";\n__nested_webpack_require_4663761__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_radiogroupitem_vue_vue_type_template_id_5bbe97b9___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4663761__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./radiogroupitem.vue?vue&type=template&id=5bbe97b9& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/radiogroupitem.vue?vue&type=template&id=5bbe97b9&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4663761__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_radiogroupitem_vue_vue_type_template_id_5bbe97b9___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4663761__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_radiogroupitem_vue_vue_type_template_id_5bbe97b9___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/ranking/ranking-item.vue\":\n/*!******************************************!*\\\n  !*** ./src/vue/ranking/ranking-item.vue ***!\n  \\******************************************/\n/*! exports provided: RankingItem, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4665420__) {\n\n\"use strict\";\n__nested_webpack_require_4665420__.r(__nested_webpack_exports__);\n/* harmony import */ var _ranking_item_vue_vue_type_template_id_2faded76___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4665420__(/*! ./ranking-item.vue?vue&type=template&id=2faded76& */ \"./src/vue/ranking/ranking-item.vue?vue&type=template&id=2faded76&\");\n/* harmony import */ var _ranking_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4665420__(/*! ./ranking-item.vue?vue&type=script&lang=ts& */ \"./src/vue/ranking/ranking-item.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4665420__.d(__nested_webpack_exports__, \"RankingItem\", function() { return _ranking_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"RankingItem\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4665420__(/*! ../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _ranking_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _ranking_item_vue_vue_type_template_id_2faded76___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _ranking_item_vue_vue_type_template_id_2faded76___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/ranking/ranking-item.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/ranking/ranking-item.vue?vue&type=script&lang=ts&\":\n/*!*******************************************************************!*\\\n  !*** ./src/vue/ranking/ranking-item.vue?vue&type=script&lang=ts& ***!\n  \\*******************************************************************/\n/*! exports provided: default, RankingItem */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4667513__) {\n\n\"use strict\";\n__nested_webpack_require_4667513__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_ranking_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4667513__(/*! -!../../../node_modules/ts-loader??ref--0!../../../node_modules/vue-loader/lib??vue-loader-options!./ranking-item.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/ranking/ranking-item.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4667513__.d(__nested_webpack_exports__, \"RankingItem\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_ranking_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"RankingItem\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_ranking_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/ranking/ranking-item.vue?vue&type=template&id=2faded76&\":\n/*!*************************************************************************!*\\\n  !*** ./src/vue/ranking/ranking-item.vue?vue&type=template&id=2faded76& ***!\n  \\*************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4669053__) {\n\n\"use strict\";\n__nested_webpack_require_4669053__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_ranking_item_vue_vue_type_template_id_2faded76___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4669053__(/*! -!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/vue-loader/lib??vue-loader-options!./ranking-item.vue?vue&type=template&id=2faded76& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/ranking/ranking-item.vue?vue&type=template&id=2faded76&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4669053__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_ranking_item_vue_vue_type_template_id_2faded76___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4669053__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_ranking_item_vue_vue_type_template_id_2faded76___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/ranking/ranking.vue\":\n/*!*************************************!*\\\n  !*** ./src/vue/ranking/ranking.vue ***!\n  \\*************************************/\n/*! exports provided: Ranking, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4670692__) {\n\n\"use strict\";\n__nested_webpack_require_4670692__.r(__nested_webpack_exports__);\n/* harmony import */ var _ranking_vue_vue_type_template_id_19074eea___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4670692__(/*! ./ranking.vue?vue&type=template&id=19074eea& */ \"./src/vue/ranking/ranking.vue?vue&type=template&id=19074eea&\");\n/* harmony import */ var _ranking_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4670692__(/*! ./ranking.vue?vue&type=script&lang=ts& */ \"./src/vue/ranking/ranking.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4670692__.d(__nested_webpack_exports__, \"Ranking\", function() { return _ranking_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Ranking\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4670692__(/*! ../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _ranking_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _ranking_vue_vue_type_template_id_19074eea___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _ranking_vue_vue_type_template_id_19074eea___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/ranking/ranking.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/ranking/ranking.vue?vue&type=script&lang=ts&\":\n/*!**************************************************************!*\\\n  !*** ./src/vue/ranking/ranking.vue?vue&type=script&lang=ts& ***!\n  \\**************************************************************/\n/*! exports provided: default, Ranking */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4672698__) {\n\n\"use strict\";\n__nested_webpack_require_4672698__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_ranking_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4672698__(/*! -!../../../node_modules/ts-loader??ref--0!../../../node_modules/vue-loader/lib??vue-loader-options!./ranking.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/ranking/ranking.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4672698__.d(__nested_webpack_exports__, \"Ranking\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_ranking_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Ranking\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_ranking_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/ranking/ranking.vue?vue&type=template&id=19074eea&\":\n/*!********************************************************************!*\\\n  !*** ./src/vue/ranking/ranking.vue?vue&type=template&id=19074eea& ***!\n  \\********************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4674185__) {\n\n\"use strict\";\n__nested_webpack_require_4674185__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_ranking_vue_vue_type_template_id_19074eea___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4674185__(/*! -!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/vue-loader/lib??vue-loader-options!./ranking.vue?vue&type=template&id=19074eea& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/ranking/ranking.vue?vue&type=template&id=19074eea&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4674185__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_ranking_vue_vue_type_template_id_19074eea___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4674185__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_ranking_vue_vue_type_template_id_19074eea___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/rating-dropdown.vue\":\n/*!*************************************!*\\\n  !*** ./src/vue/rating-dropdown.vue ***!\n  \\*************************************/\n/*! exports provided: RatingDropdown, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4675806__) {\n\n\"use strict\";\n__nested_webpack_require_4675806__.r(__nested_webpack_exports__);\n/* harmony import */ var _rating_dropdown_vue_vue_type_template_id_312c9d6f___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4675806__(/*! ./rating-dropdown.vue?vue&type=template&id=312c9d6f& */ \"./src/vue/rating-dropdown.vue?vue&type=template&id=312c9d6f&\");\n/* harmony import */ var _rating_dropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4675806__(/*! ./rating-dropdown.vue?vue&type=script&lang=ts& */ \"./src/vue/rating-dropdown.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4675806__.d(__nested_webpack_exports__, \"RatingDropdown\", function() { return _rating_dropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"RatingDropdown\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4675806__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _rating_dropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _rating_dropdown_vue_vue_type_template_id_312c9d6f___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _rating_dropdown_vue_vue_type_template_id_312c9d6f___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/rating-dropdown.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/rating-dropdown.vue?vue&type=script&lang=ts&\":\n/*!**************************************************************!*\\\n  !*** ./src/vue/rating-dropdown.vue?vue&type=script&lang=ts& ***!\n  \\**************************************************************/\n/*! exports provided: default, RatingDropdown */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4677894__) {\n\n\"use strict\";\n__nested_webpack_require_4677894__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_rating_dropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4677894__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./rating-dropdown.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/rating-dropdown.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4677894__.d(__nested_webpack_exports__, \"RatingDropdown\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_rating_dropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"RatingDropdown\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_rating_dropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/rating-dropdown.vue?vue&type=template&id=312c9d6f&\":\n/*!********************************************************************!*\\\n  !*** ./src/vue/rating-dropdown.vue?vue&type=template&id=312c9d6f& ***!\n  \\********************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4679421__) {\n\n\"use strict\";\n__nested_webpack_require_4679421__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_rating_dropdown_vue_vue_type_template_id_312c9d6f___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4679421__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./rating-dropdown.vue?vue&type=template&id=312c9d6f& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/rating-dropdown.vue?vue&type=template&id=312c9d6f&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4679421__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_rating_dropdown_vue_vue_type_template_id_312c9d6f___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4679421__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_rating_dropdown_vue_vue_type_template_id_312c9d6f___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/rating.vue\":\n/*!****************************!*\\\n  !*** ./src/vue/rating.vue ***!\n  \\****************************/\n/*! exports provided: Rating, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4681024__) {\n\n\"use strict\";\n__nested_webpack_require_4681024__.r(__nested_webpack_exports__);\n/* harmony import */ var _rating_vue_vue_type_template_id_7092bfdf___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4681024__(/*! ./rating.vue?vue&type=template&id=7092bfdf& */ \"./src/vue/rating.vue?vue&type=template&id=7092bfdf&\");\n/* harmony import */ var _rating_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4681024__(/*! ./rating.vue?vue&type=script&lang=ts& */ \"./src/vue/rating.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4681024__.d(__nested_webpack_exports__, \"Rating\", function() { return _rating_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Rating\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4681024__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _rating_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _rating_vue_vue_type_template_id_7092bfdf___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _rating_vue_vue_type_template_id_7092bfdf___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/rating.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/rating.vue?vue&type=script&lang=ts&\":\n/*!*****************************************************!*\\\n  !*** ./src/vue/rating.vue?vue&type=script&lang=ts& ***!\n  \\*****************************************************/\n/*! exports provided: default, Rating */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4682953__) {\n\n\"use strict\";\n__nested_webpack_require_4682953__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_rating_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4682953__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./rating.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/rating.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4682953__.d(__nested_webpack_exports__, \"Rating\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_rating_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Rating\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_rating_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/rating.vue?vue&type=template&id=7092bfdf&\":\n/*!***********************************************************!*\\\n  !*** ./src/vue/rating.vue?vue&type=template&id=7092bfdf& ***!\n  \\***********************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4684383__) {\n\n\"use strict\";\n__nested_webpack_require_4684383__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_rating_vue_vue_type_template_id_7092bfdf___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4684383__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./rating.vue?vue&type=template&id=7092bfdf& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/rating.vue?vue&type=template&id=7092bfdf&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4684383__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_rating_vue_vue_type_template_id_7092bfdf___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4684383__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_rating_vue_vue_type_template_id_7092bfdf___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/row-element.vue\":\n/*!*********************************!*\\\n  !*** ./src/vue/row-element.vue ***!\n  \\*********************************/\n/*! exports provided: SurveyRowElement, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4685971__) {\n\n\"use strict\";\n__nested_webpack_require_4685971__.r(__nested_webpack_exports__);\n/* harmony import */ var _row_element_vue_vue_type_template_id_617c2037___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4685971__(/*! ./row-element.vue?vue&type=template&id=617c2037& */ \"./src/vue/row-element.vue?vue&type=template&id=617c2037&\");\n/* harmony import */ var _row_element_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4685971__(/*! ./row-element.vue?vue&type=script&lang=ts& */ \"./src/vue/row-element.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4685971__.d(__nested_webpack_exports__, \"SurveyRowElement\", function() { return _row_element_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"SurveyRowElement\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4685971__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _row_element_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _row_element_vue_vue_type_template_id_617c2037___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _row_element_vue_vue_type_template_id_617c2037___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/row-element.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/row-element.vue?vue&type=script&lang=ts&\":\n/*!**********************************************************!*\\\n  !*** ./src/vue/row-element.vue?vue&type=script&lang=ts& ***!\n  \\**********************************************************/\n/*! exports provided: default, SurveyRowElement */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4688005__) {\n\n\"use strict\";\n__nested_webpack_require_4688005__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_row_element_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4688005__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./row-element.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/row-element.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4688005__.d(__nested_webpack_exports__, \"SurveyRowElement\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_row_element_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"SurveyRowElement\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_row_element_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/row-element.vue?vue&type=template&id=617c2037&\":\n/*!****************************************************************!*\\\n  !*** ./src/vue/row-element.vue?vue&type=template&id=617c2037& ***!\n  \\****************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4689500__) {\n\n\"use strict\";\n__nested_webpack_require_4689500__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_row_element_vue_vue_type_template_id_617c2037___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4689500__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./row-element.vue?vue&type=template&id=617c2037& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/row-element.vue?vue&type=template&id=617c2037&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4689500__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_row_element_vue_vue_type_template_id_617c2037___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4689500__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_row_element_vue_vue_type_template_id_617c2037___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/row.vue\":\n/*!*************************!*\\\n  !*** ./src/vue/row.vue ***!\n  \\*************************/\n/*! exports provided: Row, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4691068__) {\n\n\"use strict\";\n__nested_webpack_require_4691068__.r(__nested_webpack_exports__);\n/* harmony import */ var _row_vue_vue_type_template_id_7cc0bd88___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4691068__(/*! ./row.vue?vue&type=template&id=7cc0bd88& */ \"./src/vue/row.vue?vue&type=template&id=7cc0bd88&\");\n/* harmony import */ var _row_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4691068__(/*! ./row.vue?vue&type=script&lang=ts& */ \"./src/vue/row.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4691068__.d(__nested_webpack_exports__, \"Row\", function() { return _row_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Row\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4691068__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _row_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _row_vue_vue_type_template_id_7cc0bd88___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _row_vue_vue_type_template_id_7cc0bd88___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/row.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/row.vue?vue&type=script&lang=ts&\":\n/*!**************************************************!*\\\n  !*** ./src/vue/row.vue?vue&type=script&lang=ts& ***!\n  \\**************************************************/\n/*! exports provided: default, Row */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4692943__) {\n\n\"use strict\";\n__nested_webpack_require_4692943__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_row_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4692943__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./row.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/row.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4692943__.d(__nested_webpack_exports__, \"Row\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_row_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Row\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_row_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/row.vue?vue&type=template&id=7cc0bd88&\":\n/*!********************************************************!*\\\n  !*** ./src/vue/row.vue?vue&type=template&id=7cc0bd88& ***!\n  \\********************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4694340__) {\n\n\"use strict\";\n__nested_webpack_require_4694340__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_row_vue_vue_type_template_id_7cc0bd88___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4694340__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./row.vue?vue&type=template&id=7cc0bd88& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/row.vue?vue&type=template&id=7cc0bd88&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4694340__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_row_vue_vue_type_template_id_7cc0bd88___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4694340__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_row_vue_vue_type_template_id_7cc0bd88___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/signaturepad.vue\":\n/*!**********************************!*\\\n  !*** ./src/vue/signaturepad.vue ***!\n  \\**********************************/\n/*! exports provided: SignaturePad, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4695913__) {\n\n\"use strict\";\n__nested_webpack_require_4695913__.r(__nested_webpack_exports__);\n/* harmony import */ var _signaturepad_vue_vue_type_template_id_0462349d___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4695913__(/*! ./signaturepad.vue?vue&type=template&id=0462349d& */ \"./src/vue/signaturepad.vue?vue&type=template&id=0462349d&\");\n/* harmony import */ var _signaturepad_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4695913__(/*! ./signaturepad.vue?vue&type=script&lang=ts& */ \"./src/vue/signaturepad.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4695913__.d(__nested_webpack_exports__, \"SignaturePad\", function() { return _signaturepad_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"SignaturePad\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4695913__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _signaturepad_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _signaturepad_vue_vue_type_template_id_0462349d___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _signaturepad_vue_vue_type_template_id_0462349d___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/signaturepad.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/signaturepad.vue?vue&type=script&lang=ts&\":\n/*!***********************************************************!*\\\n  !*** ./src/vue/signaturepad.vue?vue&type=script&lang=ts& ***!\n  \\***********************************************************/\n/*! exports provided: default, SignaturePad */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4697950__) {\n\n\"use strict\";\n__nested_webpack_require_4697950__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_signaturepad_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4697950__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./signaturepad.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/signaturepad.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4697950__.d(__nested_webpack_exports__, \"SignaturePad\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_signaturepad_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"SignaturePad\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_signaturepad_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/signaturepad.vue?vue&type=template&id=0462349d&\":\n/*!*****************************************************************!*\\\n  !*** ./src/vue/signaturepad.vue?vue&type=template&id=0462349d& ***!\n  \\*****************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4699446__) {\n\n\"use strict\";\n__nested_webpack_require_4699446__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_signaturepad_vue_vue_type_template_id_0462349d___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4699446__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./signaturepad.vue?vue&type=template&id=0462349d& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/signaturepad.vue?vue&type=template&id=0462349d&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4699446__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_signaturepad_vue_vue_type_template_id_0462349d___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4699446__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_signaturepad_vue_vue_type_template_id_0462349d___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/string-editor.vue\":\n/*!***********************************!*\\\n  !*** ./src/vue/string-editor.vue ***!\n  \\***********************************/\n/*! exports provided: SurveyStringEditor, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4701074__) {\n\n\"use strict\";\n__nested_webpack_require_4701074__.r(__nested_webpack_exports__);\n/* harmony import */ var _string_editor_vue_vue_type_template_id_9639f152___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4701074__(/*! ./string-editor.vue?vue&type=template&id=9639f152& */ \"./src/vue/string-editor.vue?vue&type=template&id=9639f152&\");\n/* harmony import */ var _string_editor_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4701074__(/*! ./string-editor.vue?vue&type=script&lang=ts& */ \"./src/vue/string-editor.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4701074__.d(__nested_webpack_exports__, \"SurveyStringEditor\", function() { return _string_editor_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"SurveyStringEditor\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4701074__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _string_editor_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _string_editor_vue_vue_type_template_id_9639f152___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _string_editor_vue_vue_type_template_id_9639f152___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/string-editor.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/string-editor.vue?vue&type=script&lang=ts&\":\n/*!************************************************************!*\\\n  !*** ./src/vue/string-editor.vue?vue&type=script&lang=ts& ***!\n  \\************************************************************/\n/*! exports provided: default, SurveyStringEditor */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4703144__) {\n\n\"use strict\";\n__nested_webpack_require_4703144__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_string_editor_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4703144__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./string-editor.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/string-editor.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4703144__.d(__nested_webpack_exports__, \"SurveyStringEditor\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_string_editor_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"SurveyStringEditor\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_string_editor_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/string-editor.vue?vue&type=template&id=9639f152&\":\n/*!******************************************************************!*\\\n  !*** ./src/vue/string-editor.vue?vue&type=template&id=9639f152& ***!\n  \\******************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4704661__) {\n\n\"use strict\";\n__nested_webpack_require_4704661__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_string_editor_vue_vue_type_template_id_9639f152___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4704661__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./string-editor.vue?vue&type=template&id=9639f152& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/string-editor.vue?vue&type=template&id=9639f152&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4704661__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_string_editor_vue_vue_type_template_id_9639f152___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4704661__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_string_editor_vue_vue_type_template_id_9639f152___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/string-viewer.vue\":\n/*!***********************************!*\\\n  !*** ./src/vue/string-viewer.vue ***!\n  \\***********************************/\n/*! exports provided: SurveyStringViewer, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4706294__) {\n\n\"use strict\";\n__nested_webpack_require_4706294__.r(__nested_webpack_exports__);\n/* harmony import */ var _string_viewer_vue_vue_type_template_id_7d918508___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4706294__(/*! ./string-viewer.vue?vue&type=template&id=7d918508& */ \"./src/vue/string-viewer.vue?vue&type=template&id=7d918508&\");\n/* harmony import */ var _string_viewer_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4706294__(/*! ./string-viewer.vue?vue&type=script&lang=ts& */ \"./src/vue/string-viewer.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4706294__.d(__nested_webpack_exports__, \"SurveyStringViewer\", function() { return _string_viewer_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"SurveyStringViewer\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4706294__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _string_viewer_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _string_viewer_vue_vue_type_template_id_7d918508___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _string_viewer_vue_vue_type_template_id_7d918508___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/string-viewer.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/string-viewer.vue?vue&type=script&lang=ts&\":\n/*!************************************************************!*\\\n  !*** ./src/vue/string-viewer.vue?vue&type=script&lang=ts& ***!\n  \\************************************************************/\n/*! exports provided: default, SurveyStringViewer */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4708364__) {\n\n\"use strict\";\n__nested_webpack_require_4708364__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_string_viewer_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4708364__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./string-viewer.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/string-viewer.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4708364__.d(__nested_webpack_exports__, \"SurveyStringViewer\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_string_viewer_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"SurveyStringViewer\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_string_viewer_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/string-viewer.vue?vue&type=template&id=7d918508&\":\n/*!******************************************************************!*\\\n  !*** ./src/vue/string-viewer.vue?vue&type=template&id=7d918508& ***!\n  \\******************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4709881__) {\n\n\"use strict\";\n__nested_webpack_require_4709881__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_string_viewer_vue_vue_type_template_id_7d918508___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4709881__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./string-viewer.vue?vue&type=template&id=7d918508& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/string-viewer.vue?vue&type=template&id=7d918508&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4709881__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_string_viewer_vue_vue_type_template_id_7d918508___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4709881__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_string_viewer_vue_vue_type_template_id_7d918508___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/string.vue\":\n/*!****************************!*\\\n  !*** ./src/vue/string.vue ***!\n  \\****************************/\n/*! exports provided: SurveyString, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4711480__) {\n\n\"use strict\";\n__nested_webpack_require_4711480__.r(__nested_webpack_exports__);\n/* harmony import */ var _string_vue_vue_type_template_id_d3a3d75a___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4711480__(/*! ./string.vue?vue&type=template&id=d3a3d75a& */ \"./src/vue/string.vue?vue&type=template&id=d3a3d75a&\");\n/* harmony import */ var _string_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4711480__(/*! ./string.vue?vue&type=script&lang=ts& */ \"./src/vue/string.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4711480__.d(__nested_webpack_exports__, \"SurveyString\", function() { return _string_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"SurveyString\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4711480__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _string_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _string_vue_vue_type_template_id_d3a3d75a___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _string_vue_vue_type_template_id_d3a3d75a___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/string.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/string.vue?vue&type=script&lang=ts&\":\n/*!*****************************************************!*\\\n  !*** ./src/vue/string.vue?vue&type=script&lang=ts& ***!\n  \\*****************************************************/\n/*! exports provided: default, SurveyString */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4713427__) {\n\n\"use strict\";\n__nested_webpack_require_4713427__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_string_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4713427__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./string.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/string.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4713427__.d(__nested_webpack_exports__, \"SurveyString\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_string_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"SurveyString\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_string_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/string.vue?vue&type=template&id=d3a3d75a&\":\n/*!***********************************************************!*\\\n  !*** ./src/vue/string.vue?vue&type=template&id=d3a3d75a& ***!\n  \\***********************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4714869__) {\n\n\"use strict\";\n__nested_webpack_require_4714869__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_string_vue_vue_type_template_id_d3a3d75a___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4714869__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./string.vue?vue&type=template&id=d3a3d75a& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/string.vue?vue&type=template&id=d3a3d75a&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4714869__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_string_vue_vue_type_template_id_d3a3d75a___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4714869__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_string_vue_vue_type_template_id_d3a3d75a___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/survey.vue\":\n/*!****************************!*\\\n  !*** ./src/vue/survey.vue ***!\n  \\****************************/\n/*! exports provided: Survey, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4716427__) {\n\n\"use strict\";\n__nested_webpack_require_4716427__.r(__nested_webpack_exports__);\n/* harmony import */ var _survey_vue_vue_type_template_id_6874e1c8___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4716427__(/*! ./survey.vue?vue&type=template&id=6874e1c8& */ \"./src/vue/survey.vue?vue&type=template&id=6874e1c8&\");\n/* harmony import */ var _survey_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4716427__(/*! ./survey.vue?vue&type=script&lang=ts& */ \"./src/vue/survey.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4716427__.d(__nested_webpack_exports__, \"Survey\", function() { return _survey_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Survey\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4716427__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _survey_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _survey_vue_vue_type_template_id_6874e1c8___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _survey_vue_vue_type_template_id_6874e1c8___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/survey.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/survey.vue?vue&type=script&lang=ts&\":\n/*!*****************************************************!*\\\n  !*** ./src/vue/survey.vue?vue&type=script&lang=ts& ***!\n  \\*****************************************************/\n/*! exports provided: default, Survey */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4718356__) {\n\n\"use strict\";\n__nested_webpack_require_4718356__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_survey_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4718356__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./survey.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/survey.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4718356__.d(__nested_webpack_exports__, \"Survey\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_survey_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Survey\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_survey_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/survey.vue?vue&type=template&id=6874e1c8&\":\n/*!***********************************************************!*\\\n  !*** ./src/vue/survey.vue?vue&type=template&id=6874e1c8& ***!\n  \\***********************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4719786__) {\n\n\"use strict\";\n__nested_webpack_require_4719786__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_survey_vue_vue_type_template_id_6874e1c8___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4719786__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./survey.vue?vue&type=template&id=6874e1c8& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/survey.vue?vue&type=template&id=6874e1c8&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4719786__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_survey_vue_vue_type_template_id_6874e1c8___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4719786__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_survey_vue_vue_type_template_id_6874e1c8___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/tagbox.vue\":\n/*!****************************!*\\\n  !*** ./src/vue/tagbox.vue ***!\n  \\****************************/\n/*! exports provided: Tagbox, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4721344__) {\n\n\"use strict\";\n__nested_webpack_require_4721344__.r(__nested_webpack_exports__);\n/* harmony import */ var _tagbox_vue_vue_type_template_id_b9e1b79a___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4721344__(/*! ./tagbox.vue?vue&type=template&id=b9e1b79a& */ \"./src/vue/tagbox.vue?vue&type=template&id=b9e1b79a&\");\n/* harmony import */ var _tagbox_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4721344__(/*! ./tagbox.vue?vue&type=script&lang=ts& */ \"./src/vue/tagbox.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4721344__.d(__nested_webpack_exports__, \"Tagbox\", function() { return _tagbox_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Tagbox\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4721344__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _tagbox_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _tagbox_vue_vue_type_template_id_b9e1b79a___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _tagbox_vue_vue_type_template_id_b9e1b79a___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/tagbox.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/tagbox.vue?vue&type=script&lang=ts&\":\n/*!*****************************************************!*\\\n  !*** ./src/vue/tagbox.vue?vue&type=script&lang=ts& ***!\n  \\*****************************************************/\n/*! exports provided: default, Tagbox */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4723273__) {\n\n\"use strict\";\n__nested_webpack_require_4723273__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_tagbox_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4723273__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./tagbox.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/tagbox.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4723273__.d(__nested_webpack_exports__, \"Tagbox\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_tagbox_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Tagbox\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_tagbox_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/tagbox.vue?vue&type=template&id=b9e1b79a&\":\n/*!***********************************************************!*\\\n  !*** ./src/vue/tagbox.vue?vue&type=template&id=b9e1b79a& ***!\n  \\***********************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4724703__) {\n\n\"use strict\";\n__nested_webpack_require_4724703__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_tagbox_vue_vue_type_template_id_b9e1b79a___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4724703__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./tagbox.vue?vue&type=template&id=b9e1b79a& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/tagbox.vue?vue&type=template&id=b9e1b79a&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4724703__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_tagbox_vue_vue_type_template_id_b9e1b79a___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4724703__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_tagbox_vue_vue_type_template_id_b9e1b79a___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/text-input.vue\":\n/*!********************************!*\\\n  !*** ./src/vue/text-input.vue ***!\n  \\********************************/\n/*! exports provided: QuestionTextInput, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4726288__) {\n\n\"use strict\";\n__nested_webpack_require_4726288__.r(__nested_webpack_exports__);\n/* harmony import */ var _text_input_vue_vue_type_template_id_4776b5ec___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4726288__(/*! ./text-input.vue?vue&type=template&id=4776b5ec& */ \"./src/vue/text-input.vue?vue&type=template&id=4776b5ec&\");\n/* harmony import */ var _text_input_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4726288__(/*! ./text-input.vue?vue&type=script&lang=ts& */ \"./src/vue/text-input.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4726288__.d(__nested_webpack_exports__, \"QuestionTextInput\", function() { return _text_input_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"QuestionTextInput\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4726288__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _text_input_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _text_input_vue_vue_type_template_id_4776b5ec___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _text_input_vue_vue_type_template_id_4776b5ec___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/text-input.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/text-input.vue?vue&type=script&lang=ts&\":\n/*!*********************************************************!*\\\n  !*** ./src/vue/text-input.vue?vue&type=script&lang=ts& ***!\n  \\*********************************************************/\n/*! exports provided: default, QuestionTextInput */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4728310__) {\n\n\"use strict\";\n__nested_webpack_require_4728310__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_text_input_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4728310__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./text-input.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/text-input.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4728310__.d(__nested_webpack_exports__, \"QuestionTextInput\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_text_input_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"QuestionTextInput\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_text_input_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/text-input.vue?vue&type=template&id=4776b5ec&\":\n/*!***************************************************************!*\\\n  !*** ./src/vue/text-input.vue?vue&type=template&id=4776b5ec& ***!\n  \\***************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4729798__) {\n\n\"use strict\";\n__nested_webpack_require_4729798__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_text_input_vue_vue_type_template_id_4776b5ec___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4729798__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./text-input.vue?vue&type=template&id=4776b5ec& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/text-input.vue?vue&type=template&id=4776b5ec&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4729798__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_text_input_vue_vue_type_template_id_4776b5ec___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4729798__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_text_input_vue_vue_type_template_id_4776b5ec___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/text.vue\":\n/*!**************************!*\\\n  !*** ./src/vue/text.vue ***!\n  \\**************************/\n/*! exports provided: QuestionText, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4731374__) {\n\n\"use strict\";\n__nested_webpack_require_4731374__.r(__nested_webpack_exports__);\n/* harmony import */ var _text_vue_vue_type_template_id_40ece422___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4731374__(/*! ./text.vue?vue&type=template&id=40ece422& */ \"./src/vue/text.vue?vue&type=template&id=40ece422&\");\n/* harmony import */ var _text_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4731374__(/*! ./text.vue?vue&type=script&lang=ts& */ \"./src/vue/text.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4731374__.d(__nested_webpack_exports__, \"QuestionText\", function() { return _text_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"QuestionText\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4731374__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _text_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _text_vue_vue_type_template_id_40ece422___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _text_vue_vue_type_template_id_40ece422___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/text.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/text.vue?vue&type=script&lang=ts&\":\n/*!***************************************************!*\\\n  !*** ./src/vue/text.vue?vue&type=script&lang=ts& ***!\n  \\***************************************************/\n/*! exports provided: default, QuestionText */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4733291__) {\n\n\"use strict\";\n__nested_webpack_require_4733291__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_text_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4733291__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./text.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/text.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4733291__.d(__nested_webpack_exports__, \"QuestionText\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_text_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"QuestionText\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_text_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/text.vue?vue&type=template&id=40ece422&\":\n/*!*********************************************************!*\\\n  !*** ./src/vue/text.vue?vue&type=template&id=40ece422& ***!\n  \\*********************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4734715__) {\n\n\"use strict\";\n__nested_webpack_require_4734715__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_text_vue_vue_type_template_id_40ece422___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4734715__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./text.vue?vue&type=template&id=40ece422& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/text.vue?vue&type=template&id=40ece422&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4734715__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_text_vue_vue_type_template_id_40ece422___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4734715__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_text_vue_vue_type_template_id_40ece422___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/timerpanel.vue\":\n/*!********************************!*\\\n  !*** ./src/vue/timerpanel.vue ***!\n  \\********************************/\n/*! exports provided: TimerPanel, default */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4736283__) {\n\n\"use strict\";\n__nested_webpack_require_4736283__.r(__nested_webpack_exports__);\n/* harmony import */ var _timerpanel_vue_vue_type_template_id_0d2abe21___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4736283__(/*! ./timerpanel.vue?vue&type=template&id=0d2abe21& */ \"./src/vue/timerpanel.vue?vue&type=template&id=0d2abe21&\");\n/* harmony import */ var _timerpanel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_4736283__(/*! ./timerpanel.vue?vue&type=script&lang=ts& */ \"./src/vue/timerpanel.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4736283__.d(__nested_webpack_exports__, \"TimerPanel\", function() { return _timerpanel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"TimerPanel\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_4736283__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _timerpanel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _timerpanel_vue_vue_type_template_id_0d2abe21___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _timerpanel_vue_vue_type_template_id_0d2abe21___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/timerpanel.vue\"\n/* harmony default export */ __nested_webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/timerpanel.vue?vue&type=script&lang=ts&\":\n/*!*********************************************************!*\\\n  !*** ./src/vue/timerpanel.vue?vue&type=script&lang=ts& ***!\n  \\*********************************************************/\n/*! exports provided: default, TimerPanel */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4738284__) {\n\n\"use strict\";\n__nested_webpack_require_4738284__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_timerpanel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4738284__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./timerpanel.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/timerpanel.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4738284__.d(__nested_webpack_exports__, \"TimerPanel\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_timerpanel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"TimerPanel\"]; });\n\n /* harmony default export */ __nested_webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_timerpanel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/timerpanel.vue?vue&type=template&id=0d2abe21&\":\n/*!***************************************************************!*\\\n  !*** ./src/vue/timerpanel.vue?vue&type=template&id=0d2abe21& ***!\n  \\***************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __nested_webpack_exports__, __nested_webpack_require_4739758__) {\n\n\"use strict\";\n__nested_webpack_require_4739758__.r(__nested_webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_timerpanel_vue_vue_type_template_id_0d2abe21___WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_4739758__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./timerpanel.vue?vue&type=template&id=0d2abe21& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/timerpanel.vue?vue&type=template&id=0d2abe21&\");\n/* harmony reexport (safe) */ __nested_webpack_require_4739758__.d(__nested_webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_timerpanel_vue_vue_type_template_id_0d2abe21___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __nested_webpack_require_4739758__.d(__nested_webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_timerpanel_vue_vue_type_template_id_0d2abe21___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"vue\":\n/*!******************************************************************************!*\\\n  !*** external {\"root\":\"Vue\",\"commonjs2\":\"vue\",\"commonjs\":\"vue\",\"amd\":\"vue\"} ***!\n  \\******************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_vue__;\n\n/***/ })\n\n/******/ });\n});\n//# sourceMappingURL=survey.vue.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3VydmV5LXZ1ZS9zdXJ2ZXktdnVlLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksSUFBeUQ7QUFDN0QsMkJBQTJCLG1CQUFPLENBQUMsK0NBQUs7QUFDeEMsTUFBTSxFQUtrQztBQUN4QyxDQUFDO0FBQ0QscUNBQXFDO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLDhCQUFtQjtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBFQUEwRSw4QkFBbUI7QUFDN0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLDhCQUFtQjtBQUM3QjtBQUNBO0FBQ0EsVUFBVSw4QkFBbUI7QUFDN0I7QUFDQTtBQUNBLFVBQVUsOEJBQW1CO0FBQzdCLGVBQWUsOEJBQW1CO0FBQ2xDLG1EQUFtRCwrQkFBK0I7QUFDbEY7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLDhCQUFtQjtBQUM3QjtBQUNBLGlFQUFpRSxpQkFBaUI7QUFDbEY7QUFDQSwwREFBMEQsYUFBYTtBQUN2RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsOEJBQW1CO0FBQzdCLGdDQUFnQyw4QkFBbUI7QUFDbkQ7QUFDQTtBQUNBO0FBQ0EsV0FBVyw4QkFBbUI7QUFDOUIsa0RBQWtELGdDQUFnQztBQUNsRiwwRUFBMEUsOEJBQW1CLDRCQUE0QixvQkFBb0I7QUFDN0k7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLDhCQUFtQjtBQUM3QjtBQUNBLG9DQUFvQyw0QkFBNEI7QUFDaEUsMENBQTBDO0FBQzFDLFdBQVcsOEJBQW1CO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSw4QkFBbUIsa0NBQWtDO0FBQy9EO0FBQ0E7QUFDQSxVQUFVLDhCQUFtQjtBQUM3QjtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsOEJBQW1CLENBQUMsOEJBQW1CO0FBQ3hELFVBQVU7QUFDVjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsK0JBQW1COztBQUVoRTtBQUNBLCtCQUFtQixHQUFHLDBCQUFtQjtBQUN6QywrQkFBK0IsK0JBQW1CLEdBQUcsMEJBQW1CLDBCQUEwQixzQkFBc0I7QUFDeEg7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0RBQWtELEVBQUUsSUFBSSxFQUFFO0FBQzFEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQixxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsWUFBWTtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQ0FBb0M7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDLFNBQVMsaUNBQWlDO0FBQ3JGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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QVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUVBQXVFLHVCQUF1QjtBQUM5RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUVBQXVFLHFCQUFxQjtBQUM1RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUVBQXVFLHdCQUF3QjtBQUMvRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkNBQTZDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtDQUErQztBQUMvQywrREFBK0Q7QUFDL0QsMERBQTBEO0FBQzFELHFEQUFxRDtBQUNyRCw4REFBOEQ7QUFDOUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7O0FBSUQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGlDQUFtQjs7QUFFaEU7QUFDQSxpQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsK0JBQStCLGlDQUFtQixHQUFHLDBCQUFtQiwwQ0FBMEMsaUNBQWlDO0FBQ25KLG9GQUFvRixpQ0FBbUI7QUFDdkcsZ0VBQWdFLGlDQUFtQjtBQUNuRixtRUFBbUUsaUNBQW1CO0FBQ3RGLHVFQUF1RSxpQ0FBbUI7QUFDMUYsaUJBQWlCLE1BQWdDO0FBQ2pEO0FBQ0E7QUFDQSxlQUFlLGdCQUFnQixzQ0FBc0Msa0JBQWtCO0FBQ3ZGLDhCQUE4QjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBLENBQUM7Ozs7O0FBS0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsOERBQThELDZCQUE2Qix5QkFBeUIsdURBQXVEO0FBQzNLO0FBQ0E7QUFDQSx1REFBdUQsNEJBQTRCLDhCQUE4Qiw4Q0FBOEM7QUFDL0osdUVBQXVFLDJCQUEyQjtBQUNsRztBQUNBLHdCQUF3Qix1QkFBdUI7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQyxZQUFZO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlFQUF5RSwwQkFBMEI7QUFDbkcsZ0RBQWdELDZDQUE2QztBQUM3RixnQ0FBZ0MsNkJBQTZCO0FBQzdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpREFBaUQsK0RBQStELGtEQUFrRDtBQUNsSztBQUNBO0FBQ0E7QUFDQTtBQUNBLDhEQUE4RDtBQUM5RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7Ozs7QUFJRCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsaUNBQW1COztBQUVoRTtBQUNBLGlDQUFtQixHQUFHLDBCQUFtQjtBQUN6QywrQkFBK0IsaUNBQW1CLEdBQUcsMEJBQW1CLHNDQUFzQyw2QkFBNkI7QUFDM0ksK0JBQStCLGlDQUFtQixHQUFHLDBCQUFtQixrQ0FBa0MseUJBQXlCO0FBQ25JLG9FQUFvRSxpQ0FBbUI7QUFDdkYsOERBQThELGlDQUFtQjtBQUNqRixnRUFBZ0UsaUNBQW1CO0FBQ25GLCtFQUErRSxpQ0FBbUI7QUFDbEcscUVBQXFFLGlDQUFtQjtBQUN4RixpQkFBaUIsTUFBZ0M7QUFDakQ7QUFDQTtBQUNBLGVBQWUsZ0JBQWdCLHNDQUFzQyxrQkFBa0I7QUFDdkYsOEJBQThCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QjtBQUN4QjtBQUNBO0FBQ0EsQ0FBQztBQUNELGtCQUFrQixNQUFpQztBQUNuRDtBQUNBO0FBQ0EsNkNBQTZDLFFBQVE7QUFDckQ7QUFDQTs7Ozs7O0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsOERBQThELHdCQUF3QjtBQUN0RjtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtDQUErQyxrQ0FBa0M7QUFDakY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSwyREFBMkQsa0NBQWtDO0FBQzdGLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZDQUE2QztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBEQUEwRCxtRUFBbUU7QUFDN0g7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkM7QUFDN0MsbURBQW1ELGtDQUFrQztBQUNyRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IseUJBQXlCO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaURBQWlELDBCQUEwQjtBQUMzRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLHVFQUF1RTtBQUN2RTtBQUNBO0FBQ0EsdUVBQXVFLHFCQUFxQjtBQUM1RjtBQUNBO0FBQ0EsQ0FBQzs7OztBQUlELE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxpQ0FBbUI7O0FBRWhFO0FBQ0EsaUNBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLCtCQUErQixpQ0FBbUIsR0FBRywwQkFBbUIsMkJBQTJCLGtCQUFrQjtBQUNySCwrQkFBK0IsaUNBQW1CLEdBQUcsMEJBQW1CLCtCQUErQixzQkFBc0I7QUFDN0gsK0JBQStCLGlDQUFtQixHQUFHLDBCQUFtQixrQ0FBa0MseUJBQXlCO0FBQ25JLCtCQUErQixpQ0FBbUIsR0FBRywwQkFBbUIsdUJBQXVCLGNBQWM7QUFDN0csK0JBQStCLGlDQUFtQixHQUFHLDBCQUFtQiwrQkFBK0Isc0JBQXNCO0FBQzdILCtCQUErQixpQ0FBbUIsR0FBRywwQkFBbUIsd0JBQXdCLGVBQWU7QUFDL0csK0JBQStCLGlDQUFtQixHQUFHLDBCQUFtQiw0QkFBNEIsbUJBQW1CO0FBQ3ZILDJFQUEyRSxpQ0FBbUI7QUFDOUYsaUVBQWlFLGlDQUFtQjtBQUNwRixvRUFBb0UsaUNBQW1CO0FBQ3ZGLGtFQUFrRSxpQ0FBbUI7QUFDckYsb0VBQW9FLGlDQUFtQjtBQUN2Rix1RUFBdUUsaUNBQW1CO0FBQzFGLDBFQUEwRSxpQ0FBbUI7QUFDN0YsaUJBQWlCLE1BQWdDO0FBQ2pEO0FBQ0E7QUFDQSxlQUFlLGdCQUFnQixzQ0FBc0Msa0JBQWtCO0FBQ3ZGLDhCQUE4QjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBLENBQUM7QUFDRCxxQkFBcUIsTUFBb0M7QUFDekQscURBQXFELFFBQVE7QUFDN0Q7QUFDQTtBQUNBOzs7Ozs7OztBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3Qiw0QkFBNEI7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDRCQUE0QjtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQTBCO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyREFBMkQsbUVBQW1FO0FBQzlIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMkJBQTJCO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0VBQWdFLDJDQUEyQztBQUMzRztBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUM7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QztBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQyx1Q0FBdUM7QUFDN0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLHVDQUF1QztBQUMvRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQztBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsK0NBQStDO0FBQy9DLDhDQUE4QztBQUM5QztBQUNBO0FBQ0E7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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QyxxQkFBcUI7QUFDN0QsMkNBQTJDLGFBQWE7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLHVCQUF1QjtBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3Qix1QkFBdUI7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3Qix1QkFBdUI7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3Qix1QkFBdUI7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0VBQWtFLE9BQU87QUFDekU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLGdHQUFnRztBQUNoRztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3Qix1QkFBdUI7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QztBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsMEJBQTBCO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLHVCQUF1QjtBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixtQkFBbUI7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QztBQUN6Qyx1Q0FBdUM7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhFQUE4RSxzRUFBc0U7QUFDcEosU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBLE1BQU0sa0RBQWtEO0FBQ3hELE1BQU0sc0NBQXNDO0FBQzVDLE1BQU0scURBQXFEO0FBQzNELE1BQU0sNEJBQTRCO0FBQ2xDLE1BQU0sMEJBQTBCO0FBQ2hDLE1BQU0seUJBQXlCO0FBQy9CLE1BQU0seUJBQXlCO0FBQy9CLE1BQU0seUJBQXlCO0FBQy9CLE1BQU0sNkVBQTZFO0FBQ25GLE1BQU0scUZBQXFGO0FBQzNGLE1BQU0seUNBQXlDO0FBQy9DLE1BQU0sdUNBQXVDO0FBQzdDLE1BQU0seUNBQXlDO0FBQy9DLE1BQU0sMkNBQTJDO0FBQ2pELE1BQU0sK0NBQStDO0FBQ3JELE1BQU07QUFDTjtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0QsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGlDQUFtQjs7QUFFaEU7QUFDQSxpQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsK0JBQStCLGlDQUFtQixHQUFHLDBCQUFtQiw0QkFBNEIsbUJBQW1CO0FBQ3ZILHNFQUFzRSxpQ0FBbUI7O0FBRXpGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGFBQWEsMkNBQTJDO0FBQ3hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsK0JBQStCLGtDQUFtQixHQUFHLDBCQUFtQixxQ0FBcUMsNEJBQTRCO0FBQ3pJLHNFQUFzRSxrQ0FBbUI7O0FBRXpGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxZQUFZLFVBQVU7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QywrQkFBK0Isa0NBQW1CLEdBQUcsMEJBQW1CLDRCQUE0QixtQkFBbUI7QUFDdkgsK0JBQStCLGtDQUFtQixHQUFHLDBCQUFtQiwrQkFBK0Isc0JBQXNCO0FBQzdILCtCQUErQixrQ0FBbUIsR0FBRywwQkFBbUIscUNBQXFDLDRCQUE0QjtBQUN6STtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLGtFQUFrRSxzRkFBc0Y7QUFDeEo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOzs7QUFHQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QywrQkFBK0Isa0NBQW1CLEdBQUcsMEJBQW1CLG9DQUFvQywyQkFBMkI7QUFDdkksK0VBQStFLGtDQUFtQjs7QUFFbEc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7O0FBSUQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsK0JBQStCLGtDQUFtQixHQUFHLDBCQUFtQiwrQkFBK0Isc0JBQXNCO0FBQzdIO0FBQ0E7QUFDQSwyQ0FBMkM7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7Ozs7QUFJRCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QywrQkFBK0Isa0NBQW1CLEdBQUcsMEJBQW1CLHVDQUF1Qyw4QkFBOEI7QUFDN0ksNkVBQTZFLGtDQUFtQjtBQUNoRyxrRUFBa0Usa0NBQW1COzs7QUFHckY7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtRUFBbUU7QUFDbkU7QUFDQSwyQ0FBMkM7QUFDM0M7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DO0FBQ25DLGlDQUFpQztBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkMsNEJBQTRCO0FBQ3pFLCtDQUErQyw2QkFBNkI7QUFDNUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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O0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdEQUF3RDtBQUN4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBEQUEwRDtBQUMxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnREFBZ0Q7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7O0FBSUQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbURBQW1EO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0M7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0M7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0M7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0M7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0M7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Es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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0I7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLHFEQUFxRCwrQkFBK0I7QUFDcEY7QUFDQTtBQUNBLHFEQUFxRCxvQ0FBb0M7QUFDekY7QUFDQTtBQUNBLGlEQUFpRCxzQ0FBc0M7QUFDdkY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3Qix3QkFBd0I7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSwyQkFBMkIsZUFBZTtBQUMxQztBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQiw0RkFBNEY7QUFDdkgsOEJBQThCLDJGQUEyRjtBQUN6SDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixtQ0FBbUM7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLGtCQUFrQjtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLGtCQUFrQjtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsNEJBQTRCO0FBQzdEO0FBQ0E7QUFDQSx1QkFBdUIsaUJBQWlCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7OztBQUlELE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLCtCQUErQixrQ0FBbUIsR0FBRywwQkFBbUIsaUNBQWlDLHdCQUF3QjtBQUNqSSxvRUFBb0Usa0NBQW1CO0FBQ3ZGLCtEQUErRCxrQ0FBbUI7QUFDbEYsaUJBQWlCLE1BQWdDO0FBQ2pEO0FBQ0E7QUFDQSxlQUFlLGdCQUFnQixzQ0FBc0Msa0JBQWtCO0FBQ3ZGLDhCQUE4QjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBLENBQUM7OztBQUdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsdUJBQXVCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLCtEQUErRDtBQUNoRjtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVELGdGQUFnRiwyREFBMkQ7QUFDM0k7QUFDQSxDQUFDOzs7QUFHRCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QywrQkFBK0Isa0NBQW1CLEdBQUcsMEJBQW1CLGtDQUFrQyx5QkFBeUI7QUFDbkksK0JBQStCLGtDQUFtQixHQUFHLDBCQUFtQixtQ0FBbUMsMEJBQTBCO0FBQ3JJLGlFQUFpRSxrQ0FBbUI7QUFDcEYsa0VBQWtFLGtDQUFtQjs7O0FBR3JGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0Isa0JBQWtCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsZ0JBQWdCO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixnQkFBZ0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0M7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixtQkFBbUI7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLHNCQUFzQjtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsNEJBQTRCO0FBQ3hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsaUJBQWlCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsK0JBQStCLGtDQUFtQixHQUFHLDBCQUFtQiwwQkFBMEIsaUJBQWlCO0FBQ25ILGtFQUFrRSxrQ0FBbUI7O0FBRXJGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixjQUFjO0FBQ3RDO0FBQ0EsbUJBQW1CLGNBQWM7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLGNBQWM7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixjQUFjO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsOEJBQThCO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLE9BQU87QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsa0JBQWtCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsZ0JBQWdCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0MsZ0JBQWdCO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsZ0JBQWdCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGdCQUFnQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsZ0JBQWdCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsTUFBTTtBQUNwQztBQUNBLFNBQVM7QUFDVDtBQUNBOzs7QUFHQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsa0NBQW1COztBQUVwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0EsUUFBUSxrQ0FBbUI7QUFDM0I7QUFDQTtBQUNBLEtBQUssa0NBQW1CO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxrTUFBa007O0FBRWxNLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQyxrQ0FBbUI7O0FBRXBEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBLFFBQVEsa0NBQW1CO0FBQzNCO0FBQ0E7QUFDQSxLQUFLLGtDQUFtQjtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsK0JBQStCLGtDQUFtQixHQUFHLDBCQUFtQiw0QkFBNEIsbUJBQW1CO0FBQ3ZILDJFQUEyRSxrQ0FBbUI7QUFDOUYsb0VBQW9FLGtDQUFtQjtBQUN2RixpRUFBaUUsa0NBQW1CO0FBQ3BGLG9FQUFvRSxrQ0FBbUI7QUFDdkYsOERBQThELGtDQUFtQjtBQUNqRixrRUFBa0Usa0NBQW1CO0FBQ3JGLHdFQUF3RSxrQ0FBbUI7QUFDM0Ysa0VBQWtFLGtDQUFtQjtBQUNyRixpQkFBaUIsTUFBZ0M7QUFDakQ7QUFDQTtBQUNBLGVBQWUsZ0JBQWdCLHNDQUFzQyxrQkFBa0I7QUFDdkYsOEJBQThCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QjtBQUN4QjtBQUNBO0FBQ0EsQ0FBQztBQUNELGtCQUFrQixNQUFpQztBQUNuRDtBQUNBO0FBQ0EsNkNBQTZDLFFBQVE7QUFDckQ7QUFDQTs7Ozs7Ozs7O0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQjtBQUMvQixtQ0FBbUM7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixtQkFBbUI7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGtCQUFrQjtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGtCQUFrQjtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0Isa0JBQWtCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNENBQTRDO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QztBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0Isa0JBQWtCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLGdEQUFnRDtBQUNoRCxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsdUJBQXVCO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEdBQThHLHdDQUF3QztBQUN0SjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVFQUF1RSxvQkFBb0I7QUFDM0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0EsbUdBQW1HO0FBQ25HO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxnQ0FBZ0M7QUFDdEM7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLE1BQU0sK0NBQStDO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxzQkFBc0IsOEJBQThCOzs7QUFHcEQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsK0JBQStCLGtDQUFtQixHQUFHLDBCQUFtQiwyQkFBMkIsa0JBQWtCO0FBQ3JILCtCQUErQixrQ0FBbUIsR0FBRywwQkFBbUIsZ0NBQWdDLHVCQUF1QjtBQUMvSCwrQkFBK0Isa0NBQW1CLEdBQUcsMEJBQW1CLHFDQUFxQyw0QkFBNEI7QUFDekksK0JBQStCLGtDQUFtQixHQUFHLDBCQUFtQiw2Q0FBNkMsb0NBQW9DO0FBQ3pKLCtCQUErQixrQ0FBbUIsR0FBRywwQkFBbUIsb0NBQW9DLDJCQUEyQjtBQUN2SSwrQkFBK0Isa0NBQW1CLEdBQUcsMEJBQW1CLCtCQUErQixzQkFBc0I7QUFDN0gsK0JBQStCLGtDQUFtQixHQUFHLDBCQUFtQiw0QkFBNEIsbUJBQW1CO0FBQ3ZILCtCQUErQixrQ0FBbUIsR0FBRywwQkFBbUIsMkNBQTJDLGtDQUFrQztBQUNySiwrQkFBK0Isa0NBQW1CLEdBQUcsMEJBQW1CLDJDQUEyQyxrQ0FBa0M7QUFDckosK0JBQStCLGtDQUFtQixHQUFHLDBCQUFtQix1Q0FBdUMsOEJBQThCO0FBQzdJLCtCQUErQixrQ0FBbUIsR0FBRywwQkFBbUIseUNBQXlDLGdDQUFnQztBQUNqSiwrQkFBK0Isa0NBQW1CLEdBQUcsMEJBQW1CLDRDQUE0QyxtQ0FBbUM7QUFDdkosK0JBQStCLGtDQUFtQixHQUFHLDBCQUFtQiw2QkFBNkIsb0JBQW9CO0FBQ3pILCtCQUErQixrQ0FBbUIsR0FBRywwQkFBbUIsNkJBQTZCLG9CQUFvQjtBQUN6SCx1RUFBdUUsa0NBQW1CO0FBQzFGLDhEQUE4RCxrQ0FBbUI7QUFDakYsaUVBQWlFLGtDQUFtQjtBQUNwRixpQkFBaUIsTUFBZ0M7QUFDakQ7QUFDQTtBQUNBLGVBQWUsZ0JBQWdCLHNDQUFzQyxrQkFBa0I7QUFDdkYsOEJBQThCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QjtBQUN4QjtBQUNBO0FBQ0EsQ0FBQztBQUNELHFCQUFxQixNQUFvQztBQUN6RCxxREFBcUQsUUFBUTtBQUM3RDtBQUNBO0FBQ0E7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtHQUFrRyxrQ0FBa0M7QUFDcEk7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQixhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQixhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQixhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSwwQ0FBMEM7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0M7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsOEJBQThCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLHdCQUF3Qix3QkFBd0I7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQztBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsc0JBQXNCO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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LHVEQUF1RDtBQUNqRyxpQkFBaUI7QUFDakI7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkNBQTZDO0FBQzdDO0FBQ0E7QUFDQSw2REFBNkQsaURBQWlEO0FBQzlHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkM7QUFDM0M7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNFQUFzRSxvREFBb0Q7QUFDMUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsdUVBQXVFLHFCQUFxQjtBQUM1RjtBQUNBO0FBQ0EsdUVBQXVFLHFCQUFxQjtBQUM1RjtBQUNBO0FBQ0EsdUVBQXVFLHFCQUFxQjtBQUM1RjtBQUNBO0FBQ0EsdUVBQXVFO0FBQ3ZFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsdUVBQXVFLHFCQUFxQjtBQUM1RjtBQUNBO0FBQ0EsdUVBQXVFLG9CQUFvQjtBQUMzRjtBQUNBO0FBQ0EsdUVBQXVFLHFCQUFxQjtBQUM1RjtBQUNBO0FBQ0EsdUVBQXVFLG9CQUFvQjtBQUMzRjtBQUNBO0FBQ0EsQ0FBQzs7OztBQUlELE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLCtCQUErQixrQ0FBbUIsR0FBRywwQkFBbUIsb0NBQW9DLDJCQUEyQjtBQUN2SSwrQkFBK0Isa0NBQW1CLEdBQUcsMEJBQW1CLHFDQUFxQyw0QkFBNEI7QUFDekksaUVBQWlFLGtDQUFtQjtBQUNwRix1RUFBdUUsa0NBQW1CO0FBQzFGLGtFQUFrRSxrQ0FBbUI7QUFDckYsOERBQThELGtDQUFtQjs7Ozs7QUFLakY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsOERBQThEO0FBQzlEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQztBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEI7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsaUJBQWlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrREFBK0Q7QUFDL0Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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QSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLEtBQUs7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsOEJBQThCO0FBQzFEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsaUJBQWlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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Q1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLDJCQUEyQiwwQkFBMEI7QUFDckQ7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLHdCQUF3QixRQUFRO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFT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QWtEO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQTBCO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQTBCO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGdDQUFnQztBQUN4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBMEI7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLHdCQUF3QjtBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVFQUF1RSxvQkFBb0I7QUFDM0Y7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUVBQXVFLCtCQUErQixtQkFBbUIsNENBQTRDO0FBQ3JLLHNFQUFzRSxpQ0FBaUM7QUFDdkcsd0VBQXdFLGtDQUFrQztBQUMxRztBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUEwQjtBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0Esb0NBQW9DO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBEQUEwRDtBQUMxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQTBCO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQTBCO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLHFCQUFxQjtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLHdCQUF3QixTQUFTLFdBQVc7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQywwQkFBMEI7QUFDMUQ7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDLGVBQWU7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJEQUEyRCx1QkFBdUI7QUFDbEYsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLHNCQUFzQjtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLHFCQUFxQjtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLHNCQUFzQjtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLHFCQUFxQjtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0Isc0JBQXNCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLHNCQUFzQjtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQTBCO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQTBCO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSx3Q0FBd0M7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQTBCO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0Esd0JBQXdCLDBCQUEwQjtBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QztBQUN2Qyw0Q0FBNEM7QUFDNUMsOEJBQThCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QztBQUN2Qyw0Q0FBNEM7QUFDNUMsOEJBQThCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsb0JBQW9CO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLHlCQUF5QjtBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IscUJBQXFCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixxQkFBcUI7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUEwQjtBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DO0FBQ3BDLDhDQUE4QztBQUM5QztBQUNBO0FBQ0E7QUFDQSx3QkFBd0IscUJBQXFCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0M7QUFDdEMsOENBQThDO0FBQzlDO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQztBQUN0Qyw4Q0FBOEM7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixxQkFBcUI7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBMEI7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQTBCO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBMEI7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQTBCO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixpQkFBaUI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBMEI7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsbUJBQW1CO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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O0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLCtCQUErQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUM7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTCx1REFBdUQ7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEM7QUFDMUMsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNM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QTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLFlBQVksVUFBVTtBQUN0QixhQUFhLDZDQUE2QztBQUMxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsWUFBWSxVQUFVO0FBQ3RCLGFBQWEsNkNBQTZDO0FBQzFEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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QUFDQTtBQUNBLFNBQVM7QUFDVCw4RkFBOEYsNEJBQTRCO0FBQzFIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7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QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0M7QUFDdEMsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0dBQXNHLGFBQWE7QUFDbkg7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTCx5RUFBeUU7QUFDekU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMLHFEQUFxRDtBQUNyRCxrRUFBa0U7QUFDbEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsNERBQTREO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3Qix3QkFBd0I7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLDJCQUEyQixlQUFlO0FBQzFDO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGlDQUFpQztBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLHdCQUF3QjtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0M7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLDJCQUEyQixlQUFlO0FBQzFDO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSwyQkFBMkIsZUFBZTtBQUMxQztBQUNBO0FBQ0EsS0FBSztBQUNMLHdEQUF3RDtBQUN4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0M7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0M7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFD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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QztBQUN2Qyw4QkFBOEI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixtQkFBbUI7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2REFBNkQ7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsbUJBQW1CO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLDJCQUEyQixlQUFlO0FBQzFDO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdEQUF3RDtBQUN4RCxzREFBc0Q7QUFDdEQsZ0VBQWdFO0FBQ2hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGtCQUFrQjtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsbUNBQW1DO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVFQUF1RSxxQkFBcUI7QUFDNUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVFQUF1RSxtREFBbUQsbURBQW1EO0FBQzdLO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1RUFBdUUs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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsS0FBSztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsS0FBSztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUM7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSwyQ0FBMkM7QUFDM0Msd0NBQXdDO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvRUFBb0Usa0dBQWtHO0FBQ3RLO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUMsdUJBQXVCO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtRkFBbUYsZ0VBQWdFO0FBQ25KO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MscUNBQXFDO0FBQ3JFO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsdUNBQXVDO0FBQ3ZDLDRDQUE0QztBQUM1QywwQ0FBMEM7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFD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QUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUVBQXFFO0FBQ3JFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0Qix1QkFBdUI7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLGdCQUFnQjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixnQkFBZ0I7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrREFBK0QsMkNBQTJDO0FBQzFHLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0RBQStELDJDQUEyQztBQUMxRyxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxnRUFBZ0UsNkNBQTZDO0FBQzdHLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DLGNBQWM7QUFDbEQ7QUFDQSxnREFBZ0QscUVBQXFFO0FBQ3JIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQyxjQUFjO0FBQ2xEO0FBQ0Esd0NBQXdDLGtDQUFrQztBQUMxRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUVBQXVFO0FBQ3ZFO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1RUFBdUUsbUJBQW1CO0FBQzFGO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sbUZBQW1GO0FBQ3pGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7QUFDTCxNQUFNLHdEQUF3RDtBQUM5RCxNQUFNLDREQUE0RDtBQUNsRSxNQUFNLDBEQUEwRDtBQUNoRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QywrQkFBK0Isa0NBQW1CLEdBQUcsMEJBQW1CLHVDQUF1Qyw4QkFBOEI7QUFDN0kseUVBQXlFLGtDQUFtQjtBQUM1RixvRUFBb0Usa0NBQW1CO0FBQ3ZGLGtFQUFrRSxrQ0FBbUI7QUFDckYsK0VBQStFLGtDQUFtQjtBQUNsRyxxRUFBcUUsa0NBQW1CO0FBQ3hGLGlCQUFpQixNQUFnQztBQUNqRDtBQUNBO0FBQ0EsZUFBZSxnQkFBZ0Isc0NBQXNDLGtCQUFrQjtBQUN2Riw4QkFBOEI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCO0FBQ3hCO0FBQ0E7QUFDQSxDQUFDO0FBQ0Qsa0JBQWtCLE1BQWlDO0FBQ25EO0FBQ0E7QUFDQSw2Q0FBNkMsUUFBUTtBQUNyRDtBQUNBOzs7Ozs7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSwyQkFBMkIsMkJBQTJCO0FBQ3RELDhCQUE4QiwwQkFBMEI7QUFDeEQ7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkM7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUVBQXVFLG1CQUFtQjtBQUMxRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBLE1BQU0sbUZBQW1GO0FBQ3pGLE1BQU0sOEZBQThGO0FBQ3BHO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLE1BQU0sc0RBQXNEO0FBQzVEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7OztBQUdELE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLCtCQUErQixrQ0FBbUIsR0FBRywwQkFBbUIsdUNBQXVDLDhCQUE4QjtBQUM3SSwrQkFBK0Isa0NBQW1CLEdBQUcsMEJBQW1CLDJDQUEyQyxrQ0FBa0M7QUFDckosK0JBQStCLGtDQUFtQixHQUFHLDBCQUFtQix1Q0FBdUMsOEJBQThCO0FBQzdJLG9FQUFvRSxrQ0FBbUI7QUFDdkYsbUVBQW1FLGtDQUFtQjtBQUN0Riw2RUFBNkUsa0NBQW1CO0FBQ2hHLCtFQUErRSxrQ0FBbUI7QUFDbEcsaUJBQWlCLE1BQWdDO0FBQ2pEO0FBQ0E7QUFDQSxlQUFlLGdCQUFnQixzQ0FBc0Msa0JBQWtCO0FBQ3ZGLDhCQUE4QjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBLENBQUM7QUFDRCxrQkFBa0IsTUFBaUM7QUFDbkQ7QUFDQTtBQUNBLDZDQUE2QyxRQUFRO0FBQ3JEO0FBQ0E7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCO0FBQy9CLG1DQUFtQztBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsTUFBTSw0Q0FBNEM7QUFDbEQsTUFBTSx1QkFBdUI7QUFDN0IsTUFBTSx5QkFBeUI7QUFDL0Isc0JBQXNCLHlDQUF5QztBQUMvRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7OztBQUlELE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLCtCQUErQixrQ0FBbUIsR0FBRywwQkFBbUIsd0NBQXdDLCtCQUErQjtBQUMvSSxvRUFBb0Usa0NBQW1CO0FBQ3ZGLHlFQUF5RSxrQ0FBbUI7QUFDNUYsNkVBQTZFLGtDQUFtQjtBQUNoRyxpRUFBaUUsa0NBQW1CO0FBQ3BGLG1FQUFtRSxrQ0FBbUI7QUFDdEYsK0VBQStFLGtDQUFtQjtBQUNsRywrREFBK0Qsa0NBQW1CO0FBQ2xGLGlCQUFpQixNQUFnQztBQUNqRDtBQUNBO0FBQ0EsZUFBZSxnQkFBZ0Isc0NBQXNDLGtCQUFrQjtBQUN2Riw4QkFBOEI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCO0FBQ3hCO0FBQ0E7QUFDQSxDQUFDOzs7Ozs7OztBQVFEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9QQUFvUCxhQUFhLElBQUksY0FBYztBQUNuUjtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGdDQUFnQztBQUN4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsZ0JBQWdCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsY0FBYztBQUN6QztBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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Q0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLHNDQUFzQztBQUM5RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QztBQUN2Qyw4QkFBOEI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0Isd0NBQXdDO0FBQ2hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQztBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLHVDQUF1QztBQUN2Qyw4QkFBOEI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLDJCQUEyQixzQ0FBc0M7QUFDakU7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixrQkFBa0I7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMENBQTBDLHNCQUFzQjtBQUNoRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsbUNBQW1DLHVDQUF1QztBQUMxRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxvREFBb0Q7QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0wsTUFBTSxtREFBbUQ7QUFDekQsTUFBTSxtREFBbUQ7QUFDekQsTUFBTSw0Q0FBNEM7QUFDbEQsTUFBTSx5REFBeUQ7QUFDL0QsTUFBTSxrQ0FBa0M7QUFDeEMsTUFBTSxvQ0FBb0M7QUFDMUMsTUFBTSxrQ0FBa0M7QUFDeEMsTUFBTSwyQ0FBMkM7QUFDakQsTUFBTSxnREFBZ0Q7QUFDdEQsTUFBTSxzQ0FBc0M7QUFDNUMsTUFBTSx1Q0FBdUM7QUFDN0MsTUFBTTtBQUNOO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFD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Q0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0VBQWtFLHlCQUF5QjtBQUMzRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpRUFBaUUsNEdBQTRHO0FBQzdLO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsOERBQThEO0FBQzVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQixhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLGlDQUFpQztBQUM1RDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDLGNBQWM7QUFDdkQsK0NBQStDLGNBQWM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixnQkFBZ0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkdBQTZHLHVDQUF1QztBQUNwSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0REFBNEQ7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwySUFBMkksNkJBQTZCO0FBQ3hLO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRFQUE0RTtBQUM1RTtBQUNBO0FBQ0EsdUVBQXVFLHVCQUF1QjtBQUM5RjtBQUNBO0FBQ0EsdUVBQXVFLGlCQUFpQjtBQUN4RjtBQUNBO0FBQ0EsdUVBQXVFO0FBQ3ZFO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQSx1RUFBdUUscUJBQXFCO0FBQzVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1RUFBdUU7QUFDdkU7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1RUFBdUUsZUFBZSxtQ0FBbUM7QUFDekg7QUFDQTtBQUNBLHVFQUF1RSxlQUFlLHVDQUF1QztBQUM3SDtBQUNBO0FBQ0EsdUVBQXVFLGVBQWUsOEJBQThCO0FBQ3BIO0FBQ0E7QUFDQSx1RUFBdUUsZUFBZSxtQ0FBbUM7QUFDekg7QUFDQTtBQUNBLHVFQUF1RSxlQUFlLGtDQUFrQztBQUN4SDtBQUNBO0FBQ0EsdUVBQXVFLGVBQWUsb0NBQW9DO0FBQzFIO0FBQ0E7QUFDQSx1RUFBdUUsZUFBZSw4QkFBOEI7QUFDcEg7QUFDQTtBQUNBLHVFQUF1RSxlQUFlLG1DQUFtQztBQUN6SDtBQUNBO0FBQ0EsdUVBQXVFLGVBQWUsNkJBQTZCO0FBQ25IO0FBQ0E7QUFDQSx1RUFBdUUsZUFBZSw0QkFBNEI7QUFDbEg7QUFDQTtBQUNBLHVFQUF1RSxlQUFlLCtDQUErQztBQUNySTtBQUNBO0FBQ0EsdUVBQXVFLGVBQWUsbUNBQW1DO0FBQ3pIO0FBQ0E7QUFDQSx1RUFBdUUsZUFBZSx5Q0FBeUM7QUFDL0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQSxNQUFNLG1GQUFtRjtBQUN6RixNQUFNLDRDQUE0QztBQUNsRDtBQUNBLE1BQU0sbURBQW1EO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBLE1BQU0sZ0RBQWdEO0FBQ3RELE1BQU0sK0NBQStDO0FBQ3JELE1BQU0sb0NBQW9DO0FBQzFDLE1BQU0sc0NBQXNDO0FBQzVDLE1BQU0sdUNBQXVDO0FBQzdDLE1BQU0sb0NBQW9DO0FBQzFDLE1BQU0sdUNBQXVDO0FBQzdDLE1BQU0sdURBQXVEO0FBQzdELE1BQU07QUFDTjtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7Ozs7QUFJRCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QywrQkFBK0Isa0NBQW1CLEdBQUcsMEJBQW1CLG9DQUFvQywyQkFBMkI7QUFDdkksMEVBQTBFLGtDQUFtQjtBQUM3RixvRUFBb0Usa0NBQW1CO0FBQ3ZGLHlFQUF5RSxrQ0FBbUI7QUFDNUYsaUJBQWlCLE1BQWdDO0FBQ2pEO0FBQ0E7QUFDQSxlQUFlLGdCQUFnQixzQ0FBc0Msa0JBQWtCO0FBQ3ZGLDhCQUE4QjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBLENBQUM7Ozs7QUFJRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCwyRUFBMkUscURBQXFEO0FBQ2hJO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QywrQkFBK0Isa0NBQW1CLEdBQUcsMEJBQW1CLHFDQUFxQyw0QkFBNEI7QUFDekksMEVBQTBFLGtDQUFtQjtBQUM3RixvRUFBb0Usa0NBQW1CO0FBQ3ZGLHlFQUF5RSxrQ0FBbUI7QUFDNUYsK0VBQStFLGtDQUFtQjtBQUNsRyxxRUFBcUUsa0NBQW1CO0FBQ3hGLGlCQUFpQixNQUFnQztBQUNqRDtBQUNBO0FBQ0EsZUFBZSxnQkFBZ0Isc0NBQXNDLGtCQUFrQjtBQUN2Riw4QkFBOEI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCO0FBQ3hCO0FBQ0E7QUFDQSxDQUFDO0FBQ0Qsa0JBQWtCLE1BQWlDO0FBQ25EO0FBQ0E7QUFDQSw2Q0FBNkMsUUFBUTtBQUNyRDtBQUNBOzs7Ozs7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLHdCQUF3QjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBGQUEwRix1Q0FBdUM7QUFDakk7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IseUJBQXlCO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVFQUF1RSxxQkFBcUI7QUFDNUY7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsUUFBUTtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sMERBQTBEO0FBQ2hFLE1BQU0sb0dBQW9HO0FBQzFHO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLE1BQU0scUNBQXFDO0FBQzNDLE1BQU0sb0NBQW9DO0FBQzFDO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7OztBQUdELE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLCtCQUErQixrQ0FBbUIsR0FBRywwQkFBbUIsaUNBQWlDLHdCQUF3QjtBQUNqSSwrQkFBK0Isa0NBQW1CLEdBQUcsMEJBQW1CLDJDQUEyQyxrQ0FBa0M7QUFDckosb0VBQW9FLGtDQUFtQjtBQUN2Rix5RUFBeUUsa0NBQW1CO0FBQzVGLDZFQUE2RSxrQ0FBbUI7QUFDaEcsbUVBQW1FLGtDQUFtQjtBQUN0RixpRUFBaUUsa0NBQW1CO0FBQ3BGLCtFQUErRSxrQ0FBbUI7QUFDbEcsa0VBQWtFLGtDQUFtQjtBQUNyRixxRUFBcUUsa0NBQW1CO0FBQ3hGLGlCQUFpQixNQUFnQztBQUNqRDtBQUNBO0FBQ0EsZUFBZSxnQkFBZ0Isc0NBQXNDLGtCQUFrQjtBQUN2Riw4QkFBOEI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCO0FBQ3hCO0FBQ0E7QUFDQSxDQUFDO0FBQ0Qsa0JBQWtCLE1BQWlDO0FBQ25EO0FBQ0E7QUFDQSw2Q0FBNkMsUUFBUTtBQUNyRDtBQUNBOzs7Ozs7Ozs7QUFTQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0I7QUFDL0IsbUNBQW1DO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsdUVBQXVFLHFCQUFxQjtBQUM1RjtBQUNBO0FBQ0EsdUVBQXVFLHFCQUFxQjtBQUM1RjtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixnQkFBZ0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLGdCQUFnQjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSw4RUFBOEUsbUVBQW1FO0FBQ2pKLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0I7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUVBQXVFO0FBQ3ZFO0FBQ0E7QUFDQSx1RUFBdUU7QUFDdkU7QUFDQTtBQUNBLHVFQUF1RTtBQUN2RTtBQUNBO0FBQ0EsdUVBQXVFO0FBQ3ZFO0FBQ0E7QUFDQSx1RUFBdUU7QUFDdkU7QUFDQTtBQUNBLHVFQUF1RTtBQUN2RTtBQUNBO0FBQ0EsdUVBQXVFO0FBQ3ZFO0FBQ0E7QUFDQSx1RUFBdUU7QUFDdkU7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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0Isc0JBQXNCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0Isc0JBQXNCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGlCQUFpQjtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFD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LENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0ZBQW9GO0FBQ3BGO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLHNCQUFzQjtBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsc0JBQXNCO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixzQkFBc0I7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3Qix1QkFBdUI7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLHNCQUFzQjtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLHNCQUFzQjtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLG9DQUFvQztBQUNsRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3Qix1QkFBdUI7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLHVCQUF1QjtBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsdUJBQXVCO0FBQ25EO0FBQ0E7QUFDQTtBQUNBLDRCQUE0Qiw0QkFBNEI7QUFDeEQ7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLHVCQUF1QjtBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLHNCQUFzQjtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQix5QkFBeUI7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLG9CQUFvQjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixzQkFBc0I7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFGQUFxRiwrQkFBK0I7QUFDcEg7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0Esd0JBQXdCLHFCQUFxQjtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsZUFBZTtBQUMxQztBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsMkJBQTJCLGNBQWM7QUFDekM7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLHNDQUFzQztBQUM5RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixnQ0FBZ0M7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztB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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsdUJBQXVCO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixvQkFBb0I7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixpQkFBaUI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3Qix5QkFBeUI7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLGdDQUFnQztBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtEQUErRCx1Q0FBdUM7QUFDdEc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixpQkFBaUI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUM7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0Isc0NBQXNDO0FBQzlEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0VBQWtFLGlDQUFpQztBQUNuRztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0M7QUFDdEMsbUNBQW1DO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUM7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGlCQUFpQjtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLFlBQVk7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQiwrQ0FBK0MsYUFBYTtBQUM1RDtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLHdCQUF3QjtBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIseUJBQXlCO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDLDZCQUE2QjtBQUN0RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlEQUFpRCwwREFBMEQ7QUFDM0csU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IseUJBQXlCO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9EQUFvRCxjQUFjO0FBQ2xFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0Isc0NBQXNDO0FBQzlEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGlCQUFpQjtBQUN6QztBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMseUJBQXlCO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0RBQStELGlDQUFpQztBQUNoRztBQUNBO0FBQ0E7QUFDQSwrREFBK0QsNkJBQTZCO0FBQzVGO0FBQ0E7QUFDQSxnQ0FBZ0M7QUFDaEM7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGlCQUFpQjtBQUN6QztBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMseUJBQXlCO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUM7QUFDdkMsOEJBQThCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixzQ0FBc0M7QUFDOUQ7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLHlCQUF5QjtBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGlCQUFpQjtBQUN6QztBQUNBLDRCQUE0QixzQkFBc0I7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGlCQUFpQjtBQUN6QztBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0Isb0JBQW9CO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLHNDQUFzQztBQUM5RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3Qix5QkFBeUI7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixzQkFBc0I7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0Isc0NBQXNDO0FBQzlEO0FBQ0EsbUNBQW1DLHlCQUF5QjtBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsNkJBQTZCO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsaUJBQWlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixzQkFBc0I7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QztBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsaUJBQWlCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQ0FBK0Msb0NBQW9DO0FBQ25GO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsZ0JBQWdCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxNQUFNLHNGQUFzRjtBQUM1RixNQUFNLG9IQUFvSDtBQUMxSCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLE1BQU0saUdBQWlHO0FBQ3ZHO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7QUFDTCxNQUFNLDhEQUE4RDtBQUNwRTtBQUNBLE1BQU0sc0VBQXNFO0FBQzVFO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QywrQkFBK0Isa0NBQW1CLEdBQUcsMEJBQW1CLDRDQUE0QyxtQ0FBbUM7QUFDdkosK0JBQStCLGtDQUFtQixHQUFHLDBCQUFtQix1Q0FBdUMsOEJBQThCO0FBQzdJLG9FQUFvRSxrQ0FBbUI7QUFDdkYsOERBQThELGtDQUFtQjtBQUNqRiw2RUFBNkUsa0NBQW1CO0FBQ2hHLGtFQUFrRSxrQ0FBbUI7QUFDckYsaUJBQWlCLE1BQWdDO0FBQ2pEO0FBQ0E7QUFDQSxlQUFlLGdCQUFnQixzQ0FBc0Msa0JBQWtCO0FBQ3ZGLDhCQUE4QjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBLENBQUM7Ozs7O0FBS0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7QUFDTCxjQUFjO0FBQ2QsWUFBWTtBQUNaLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSztBQUNMLGtCQUFrQjtBQUNsQixjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0M7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1RkFBdUYseUNBQXlDO0FBQ2hJLHlFQUF5RSxvQ0FBb0M7QUFDN0c7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLDJCQUEyQiwwQ0FBMEM7QUFDckU7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0Isb0JBQW9CO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLG9CQUFvQjtBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QztBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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LENBQUM7QUFDRCxrQkFBa0IsTUFBaUM7QUFDbkQ7QUFDQTtBQUNBLDZDQUE2QyxRQUFRO0FBQ3JEO0FBQ0E7QUFDQSxxQkFBcUIsTUFBb0M7QUFDekQscURBQXFELFFBQVE7QUFDN0Q7QUFDQTtBQUNBOzs7Ozs7Ozs7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQixTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLHVFQUF1RSxxQkFBcUI7QUFDNUY7QUFDQTtBQUNBLHVFQUF1RSxxQkFBcUI7QUFDNUY7QUFDQTtBQUNBLHVFQUF1RSxvQkFBb0I7QUFDM0Y7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSwrREFBK0QseURBQXlEO0FBQ3hIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixzQkFBc0I7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLHNCQUFzQjtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0MsU0FBUztBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLG1CQUFtQjtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0Isc0JBQXNCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3Qix5QkFBeUI7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEhBQTBILG1DQUFtQztBQUM3SjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1FQUFtRTtBQUNuRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0Isc0NBQXNDO0FBQzlEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBHQUEwRztBQUNsSTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLDZDQUE2QztBQUM1RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNULDBFQUEwRSwwQkFBMEI7QUFDcEc7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0Isa0JBQWtCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLHVCQUF1QjtBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLDJCQUEyQixlQUFlO0FBQzFDO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSwyQkFBMkIsY0FBYztBQUN6QztBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsbUdBQW1HLDRDQUE0QztBQUMvSTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkM7QUFDM0M7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0Esd0JBQXdCLHVCQUF1QjtBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsdUJBQXVCO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3Qix1QkFBdUI7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkMsb0VBQW9FO0FBQ2pIO0FBQ0E7QUFDQSxtQ0FBbUM7QUFDbkMsK0JBQStCO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsdUJBQXVCO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsdUJBQXVCO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLHVCQUF1QjtBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0Isa0JBQWtCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsdUJBQXVCO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLHVCQUF1QjtBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QztBQUN2Qyw4QkFBOEI7QUFDOUI7QUFDQSx3QkFBd0IsdUJBQXVCO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLHVCQUF1QjtBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsdUJBQXVCO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0Isa0JBQWtCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsdUJBQXVCO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsdUJBQXVCO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsdUJBQXVCO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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QUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0Isc0JBQXNCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMERBQTBELDRCQUE0QixxQkFBcUIsOEJBQThCO0FBQ3pJO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNULCtFQUErRSx3Q0FBd0M7QUFDdkg7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLGNBQWM7QUFDekM7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLDJCQUEyQixlQUFlO0FBQzFDO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSwyQkFBMkIsY0FBYztBQUN6QztBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0Esd0JBQXdCLCtCQUErQjtBQUN2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixxQkFBcUI7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsbUJBQW1CO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFdBQVc7QUFDMUIsZUFBZSxrQkFBa0I7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxXQUFXO0FBQzFCLGVBQWUsa0JBQWtCO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixNQUFNO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsd0JBQXdCO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLG1CQUFtQjtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMERBQTBELGlDQUFpQztBQUMzRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLCtCQUErQjtBQUN2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIscUJBQXFCO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLHFCQUFxQjtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLGNBQWM7QUFDekM7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixnQkFBZ0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEhBQTBILDJCQUEyQjtBQUNySjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLHNCQUFzQjtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0Isd0JBQXdCO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsbUJBQW1CO0FBQzND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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixzQkFBc0I7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNERBQTREO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlEQUF5RDtBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLHdCQUF3QjtBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLHdCQUF3QjtBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLHdCQUF3QjtBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLHNCQUFzQjtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0Isc0JBQXNCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixzQkFBc0I7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0MsWUFBWTtBQUNwRCw4QkFBOEI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxZQUFZO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBLG1EQUFtRCx3Q0FBd0M7QUFDM0YsK0NBQStDLGFBQWE7QUFDNUQ7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0Isd0JBQXdCO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEIsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQixTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEIsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FB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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCO0FBQ3hCO0FBQ0E7QUFDQSxDQUFDO0FBQ0Qsa0JBQWtCLE1BQWlDO0FBQ25EO0FBQ0E7QUFDQSw2Q0FBNkMsUUFBUTtBQUNyRDtBQUNBOzs7Ozs7Ozs7OztBQVdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLGNBQWM7QUFDekM7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QyxRQUFRO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQixhQUFhO0FBQ2I7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQ0FBK0M7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1FQUFtRTtBQUNuRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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VDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRGQUE0RixxQkFBcUI7QUFDakg7QUFDQSxzQ0FBc0MsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFO0FBQ2hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2REFBNkQscUJBQXFCO0FBQ2xGLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsbUNBQW1DO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixtQ0FBbUM7QUFDM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlEQUF5RCxpQ0FBaUM7QUFDMUY7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdEQUF3RCwyQ0FBMkM7QUFDbkc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsT0FBTztBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQztBQUNwQztBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0EseUJBQXlCO0FBQ3pCLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJGQUEyRixnQ0FBZ0M7QUFDM0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3RUFBd0UsNkJBQTZCO0FBQ3JHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtGQUErRiw0QkFBNEI7QUFDM0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxJQUFJLGFBQWE7QUFDMUI7QUFDQTtBQUNBO0FBQ0EsU0FBUyxJQUFJLGFBQWE7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUVBQXVFLHFCQUFxQjtBQUM1RjtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLDJCQUEyQjtBQUN6QyxjQUFjLG1DQUFtQztBQUNqRCxjQUFjLHFDQUFxQztBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxNQUFNLHNDQUFzQztBQUM1QyxNQUFNLHVDQUF1QztBQUM3QztBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QywrQkFBK0Isa0NBQW1CLEdBQUcsMEJBQW1CLHNDQUFzQyw2QkFBNkI7QUFDM0ksb0VBQW9FLGtDQUFtQjtBQUN2Rix5RUFBeUUsa0NBQW1CO0FBQzVGLCtFQUErRSxrQ0FBbUI7QUFDbEcsMkVBQTJFLGtDQUFtQjtBQUM5RixzRkFBc0Ysa0NBQW1CO0FBQ3pHLGtFQUFrRSxrQ0FBbUI7QUFDckYsaUJBQWlCLE1BQWdDO0FBQ2pEO0FBQ0E7QUFDQSxlQUFlLGdCQUFnQixzQ0FBc0Msa0JBQWtCO0FBQ3ZGLDhCQUE4QjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBLENBQUM7QUFDRCxrQkFBa0IsTUFBaUM7QUFDbkQ7QUFDQTtBQUNBLDZDQUE2QyxRQUFRO0FBQ3JEO0FBQ0E7Ozs7Ozs7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsdUNBQXVDO0FBQzFFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkRBQTZELGtCQUFrQjtBQUMvRSxxQ0FBcUMsOENBQThDO0FBQ25GO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULDBDQUEwQyxxREFBcUQ7QUFDL0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSx1RUFBdUUsa0JBQWtCO0FBQ3pGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1RUFBdUUsa0JBQWtCO0FBQ3pGO0FBQ0E7QUFDQSx1RUFBdUUsK0JBQStCLGtGQUFrRjtBQUN4TDtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBLE1BQU0sOERBQThEO0FBQ3BFLE1BQU0sMkNBQTJDO0FBQ2pELE1BQU0sOENBQThDO0FBQ3BELE1BQU0sd0VBQXdFO0FBQzlFLE1BQU0scUVBQXFFO0FBQzNFLE1BQU0sbURBQW1EO0FBQ3pELE1BQU0sK0JBQStCO0FBQ3JDLE1BQU07QUFDTjtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0QsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsK0JBQStCLGtDQUFtQixHQUFHLDBCQUFtQixvQ0FBb0MsMkJBQTJCO0FBQ3ZJLHlFQUF5RSxrQ0FBbUI7QUFDNUYsb0VBQW9FLGtDQUFtQjtBQUN2RiwyRUFBMkUsa0NBQW1CO0FBQzlGLGlFQUFpRSxrQ0FBbUI7QUFDcEYsbUVBQW1FLGtDQUFtQjtBQUN0RiwrREFBK0Qsa0NBQW1CO0FBQ2xGLGtFQUFrRSxrQ0FBbUI7QUFDckYsMkVBQTJFLGtDQUFtQjtBQUM5RixpQkFBaUIsTUFBZ0M7QUFDakQ7QUFDQTtBQUNBLGVBQWUsZ0JBQWdCLHNDQUFzQyxrQkFBa0I7QUFDdkYsOEJBQThCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QjtBQUN4QjtBQUNBO0FBQ0EsQ0FBQzs7Ozs7Ozs7O0FBU0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlEQUFpRCwwQ0FBMEM7QUFDM0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyxFQUFFO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQztBQUNqQyxxQ0FBcUM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFD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QUFDQSx5RUFBeUU7QUFDekU7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixXQUFXO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsdURBQXVEO0FBQ2hGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsK0JBQStCLGtDQUFtQixHQUFHLDBCQUFtQixvQ0FBb0MsMkJBQTJCO0FBQ3ZJLCtCQUErQixrQ0FBbUIsR0FBRywwQkFBbUIscUNBQXFDLDRCQUE0QjtBQUN6SSwrQkFBK0Isa0NBQW1CLEdBQUcsMEJBQW1CLG9DQUFvQywyQkFBMkI7QUFDdkksK0JBQStCLGtDQUFtQixHQUFHLDBCQUFtQixzQ0FBc0MsNkJBQTZCO0FBQzNJLCtCQUErQixrQ0FBbUIsR0FBRywwQkFBbUIsc0NBQXNDLDZCQUE2QjtBQUMzSSwrQkFBK0Isa0NBQW1CLEdBQUcsMEJBQW1CLG1DQUFtQywwQkFBMEI7QUFDckksK0JBQStCLGtDQUFtQixHQUFHLDBCQUFtQixvQ0FBb0MsMkJBQTJCO0FBQ3ZJLCtCQUErQixrQ0FBbUIsR0FBRywwQkFBbUIseUNBQXlDLGdDQUFnQztBQUNqSiwrQkFBK0Isa0NBQW1CLEdBQUcsMEJBQW1CLGdDQUFnQyx1QkFBdUI7QUFDL0gsaUZBQWlGLGtDQUFtQjtBQUNwRyxrRUFBa0Usa0NBQW1CO0FBQ3JGLHFFQUFxRSxrQ0FBbUI7Ozs7QUFJeEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEI7QUFDMUI7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQyxzRUFBc0U7QUFDakgsd0NBQXdDLFNBQVMsMEdBQTBHO0FBQzNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0REFBNEQsMkZBQTJGO0FBQ3ZKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0Isd0JBQXdCO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQztBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtREFBbUQseUNBQXlDLDBIQUEwSDtBQUN0TjtBQUNBO0FBQ0EsOERBQThELHFCQUFxQjtBQUNuRjtBQUNBO0FBQ0EsdUZBQXVGLHFCQUFxQjtBQUM1RztBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMERBQTBELHdDQUF3QztBQUNsRztBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0M7QUFDaEM7QUFDQSxnQ0FBZ0M7QUFDaEM7QUFDQSxpQ0FBaUM7QUFDakM7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7OztBQUlELE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLCtCQUErQixrQ0FBbUIsR0FBRywwQkFBbUIsb0NBQW9DLDJCQUEyQjtBQUN2SSwrQkFBK0Isa0NBQW1CLEdBQUcsMEJBQW1CLHFDQUFxQyw0QkFBNEI7QUFDekksK0JBQStCLGtDQUFtQixHQUFHLDBCQUFtQixnQ0FBZ0MsdUJBQXVCO0FBQy9ILG9FQUFvRSxrQ0FBbUI7QUFDdkYsOERBQThELGtDQUFtQjtBQUNqRixvRkFBb0Ysa0NBQW1CO0FBQ3ZHLGlFQUFpRSxrQ0FBbUI7QUFDcEYsa0VBQWtFLGtDQUFtQjtBQUNyRiwyRUFBMkUsa0NBQW1CO0FBQzlGLCtFQUErRSxrQ0FBbUI7QUFDbEcsaUJBQWlCLE1BQWdDO0FBQ2pEO0FBQ0E7QUFDQSxlQUFlLGdCQUFnQixzQ0FBc0Msa0JBQWtCO0FBQ3ZGLDhCQUE4QjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBLENBQUM7QUFDRCxrQkFBa0IsTUFBaUM7QUFDbkQ7QUFDQTtBQUNBLDZDQUE2QyxRQUFRO0FBQ3JEO0FBQ0E7Ozs7Ozs7O0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0wscUVBQXFFO0FBQ3JFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsK0JBQStCO0FBQzFEO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSwyQkFBMkIsZUFBZTtBQUMxQztBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMLGdFQUFnRTtBQUNoRSw4REFBOEQ7QUFDOUQ7QUFDQSwyQkFBMkIsZ0NBQWdDO0FBQzNEO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSwyQkFBMkIsMkNBQTJDO0FBQ3RFO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsNERBQTREO0FBQzVEO0FBQ0EsMkJBQTJCLFlBQVk7QUFDdkM7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLDJCQUEyQixZQUFZO0FBQ3ZDO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSwyQkFBMkIsbUJBQW1CO0FBQzlDO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSwyQkFBMkIsbUJBQW1CO0FBQzlDO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSwyQkFBMkIsbUJBQW1CO0FBQzlDO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSwyQkFBMkIsbUJBQW1CO0FBQzlDO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsMkVBQTJFO0FBQzNFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsZ0RBQWdEO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0RUFBNEUsNEJBQTRCO0FBQ3hHLHdFQUF3RSw4QkFBOEI7QUFDdEcsK0VBQStFLGdDQUFnQztBQUMvRztBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixxQkFBcUI7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLHFCQUFxQjtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLCtCQUErQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMLDhEQUE4RDtBQUM5RDtBQUNBO0FBQ0EsMkJBQTJCLFlBQVk7QUFDdkM7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0Esd0JBQXdCLHdCQUF3QjtBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixxQkFBcUI7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEVBQThFO0FBQzlFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUM7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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UUFBUTtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixRQUFRO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCLGdDQUFnQztBQUNoQywwQkFBMEI7QUFDMUIscUNBQXFDO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNENBQTRDO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsd0pBQXdKLHNCQUFzQjtBQUM5SyxtSEFBbUgsdUNBQXVDO0FBQzFKLHNGQUFzRix3QkFBd0I7QUFDOUcsaUZBQWlGLHNDQUFzQztBQUN2SDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscURBQXFEO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxrQ0FBa0M7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdEQUF3RDtBQUN4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLG9DQUFvQztBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QjtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsbUJBQW1CO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9EQUFvRDtBQUNwRCx3QkFBd0IsdUJBQXVCO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsdUJBQXVCO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlEQUFpRCwrQkFBK0I7QUFDaEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIscUJBQXFCO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLG1DQUFtQztBQUNuQyxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLGlDQUFpQztBQUNqQztBQUNBO0FBQ0E7QUFDQSxzREFBc0QsK0JBQStCO0FBQ3JGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0Isa0JBQWtCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0M7QUFDdEMsaUVBQWlFO0FBQ2pFLDZDQUE2QztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLGFBQWE7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGlDQUFpQztBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUscUJBQXFCO0FBQ3BDLGlDQUFpQztBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0Isa0JBQWtCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSx3QkFBd0IsdUJBQXVCO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixpQkFBaUI7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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QTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhLQUE4SztBQUM5SztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0M7QUFDcEMsd0NBQXdDO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3Qix1QkFBdUI7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLHVCQUF1QjtBQUMvQztBQUNBLDRCQUE0QixzQkFBc0I7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsNkJBQTZCO0FBQzNFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSx3QkFBd0IsdUJBQXVCO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixzQkFBc0I7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtDQUErQztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOERBQThEO0FBQzlEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0Isc0JBQXNCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLDBCQUEwQjtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLHdCQUF3QjtBQUMxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUEwQjtBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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QUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBMEI7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IscUJBQXFCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixxQkFBcUI7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQyx1QkFBdUI7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQyx1QkFBdUI7QUFDeEQ7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLGtDQUFrQztBQUM5RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQywyQkFBMkI7QUFDM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsa0JBQWtCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDLFFBQVE7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrTUFBa007QUFDbE07QUFDQTtBQUNBO0FBQ0EsOENBQThDO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEM7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0M7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCLHNCQUFzQjtBQUN0QjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLHNCQUFzQjtBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQztBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxRkFBcUYsb0VBQW9FO0FBQ3pKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscURBQXFEO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLGlCQUFpQjtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckIsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLG9FQUFvRTtBQUN6RztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxzREFBc0QsOENBQThDO0FBQ3BHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDLDhCQUE4QjtBQUN6RTtBQUNBO0FBQ0EsOENBQThDLG9DQUFvQztBQUNsRjtBQUNBO0FBQ0Esa0RBQWtELGdDQUFnQztBQUNsRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLHNCQUFzQjtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QywwREFBMEQ7QUFDeEc7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLHNCQUFzQjtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNERBQTRELGtCQUFrQjtBQUM5RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQywrQkFBK0I7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQztBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0I7QUFDL0IsZ0NBQWdDO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMENBQTBDO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQztBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEM7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGtDQUFrQztBQUMxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQztBQUMxQztBQUNBO0FBQ0E7QUFDQSx3QkFBd0Isa0JBQWtCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLHVCQUF1QjtBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsdUJBQXVCO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGtCQUFrQjtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDLDRDQUE0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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0Isc0JBQXNCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0Isc0JBQXNCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLHNCQUFzQjtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNENBQTRDLDZCQUE2QjtBQUN6RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMENBQTBDO0FBQzFDLGtEQUFrRDtBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMENBQTBDO0FBQzFDLGtEQUFrRDtBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QjtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IscUJBQXFCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixzQkFBc0I7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQztBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixzQkFBc0I7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsNENBQTRDLG9CQUFvQjtBQUNoRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLHNCQUFzQjtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EseUNBQXlDLGdDQUFnQztBQUN6RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QjtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLHFDQUFxQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixzQkFBc0I7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixzQkFBc0I7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrSEFBa0gsb0NBQW9DO0FBQ3RKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSw0QkFBNEI7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNB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QUFDQSwyQkFBMkIsc0JBQXNCO0FBQ2pEO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLGVBQWU7QUFDMUM7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixvQkFBb0I7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQixjQUFjO0FBQ3pDO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLG1DQUFtQztBQUM5RDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLFlBQVk7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNENBQTRDO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDRCQUE0QjtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0RBQW9ELDZEQUE2RDtBQUNqSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLENBQUM7Ozs7O0FBS0QsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsK0JBQStCLGtDQUFtQixHQUFHLDBCQUFtQixrQ0FBa0MseUJBQXlCO0FBQ25JLCtCQUErQixrQ0FBbUIsR0FBRywwQkFBbUIsa0NBQWtDLHlCQUF5QjtBQUNuSSwrQkFBK0Isa0NBQW1CLEdBQUcsMEJBQW1CLGtDQUFrQyx5QkFBeUI7QUFDbkksK0JBQStCLGtDQUFtQixHQUFHLDBCQUFtQixtQ0FBbUMsMEJBQTBCO0FBQ3JJLCtCQUErQixrQ0FBbUIsR0FBRywwQkFBbUIsZ0NBQWdDLHVCQUF1QjtBQUMvSCwrQkFBK0Isa0NBQW1CLEdBQUcsMEJBQW1CLHVDQUF1Qyw4QkFBOEI7QUFDN0ksK0JBQStCLGtDQUFtQixHQUFHLDBCQUFtQixpQ0FBaUMsd0JBQXdCO0FBQ2pJLCtCQUErQixrQ0FBbUIsR0FBRywwQkFBbUIsaUNBQWlDLHdCQUF3QjtBQUNqSSwrQkFBK0Isa0NBQW1CLEdBQUcsMEJBQW1CLHNDQUFzQyw2QkFBNkI7QUFDM0ksOERBQThELGtDQUFtQjtBQUNqRiwrREFBK0Qsa0NBQW1CO0FBQ2xGLG9FQUFvRSxrQ0FBbUI7QUFDdkYsb0VBQW9FLGtDQUFtQjtBQUN2RixpRUFBaUUsa0NBQW1CO0FBQ3BGLGlCQUFpQixNQUFnQztBQUNqRDtBQUNBO0FBQ0EsZUFBZSxnQkFBZ0Isc0NBQXNDLGtCQUFrQjtBQUN2Riw4QkFBOEI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCO0FBQ3hCO0FBQ0E7QUFDQSxDQUFDOzs7Ozs7QUFNRDtBQUNBO0FBQ0EsZ0NBQWdDO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0I7QUFDL0IsaUNBQWlDO0FBQ2pDLHFDQUFxQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBEQUEwRCw2Q0FBNkM7QUFDdkc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsdUJBQXVCO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQyxrQ0FBa0M7QUFDdEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3Qix1QkFBdUI7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLGlDQUFpQztBQUM3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQztBQUNuQyxtQ0FBbUM7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCO0FBQy9CLGlDQUFpQztBQUNqQyxxQ0FBcUM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQjtBQUMvQixpQ0FBaUM7QUFDakMscUNBQXFDO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DO0FBQ25DLG1DQUFtQztBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0I7QUFDL0IsaUNBQWlDO0FBQ2pDLHFDQUFxQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQztBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCO0FBQy9CLGlDQUFpQztBQUNqQyxxQ0FBcUM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsa0JBQWtCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLHlCQUF5QixzQ0FBc0MsMEJBQTBCLFFBQVEsR0FBRztBQUN6STtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0I7QUFDL0IsaUNBQWlDO0FBQ2pDLHFDQUFxQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsK0JBQStCO0FBQy9CLGlDQUFpQztBQUNqQyxxQ0FBcUM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBLE1BQU0sZ0RBQWdEO0FBQ3REO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxvRkFBb0Ysc0NBQXNDO0FBQzFILE1BQU0sc0NBQXNDO0FBQzVDLE1BQU0sNENBQTRDO0FBQ2xEO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QywrQkFBK0Isa0NBQW1CLEdBQUcsMEJBQW1CLDBCQUEwQixpQkFBaUI7QUFDbkgsNERBQTRELGtDQUFtQjtBQUMvRSxpRkFBaUYsa0NBQW1CO0FBQ3BHLG9FQUFvRSxrQ0FBbUI7QUFDdkYsK0VBQStFLGtDQUFtQjtBQUNsRyxpQkFBaUIsTUFBZ0M7QUFDakQ7QUFDQTtBQUNBLGVBQWUsZ0JBQWdCLHNDQUFzQyxrQkFBa0I7QUFDdkYsOEJBQThCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QjtBQUN4QjtBQUNBO0FBQ0EsQ0FBQztBQUNELGdCQUFnQixNQUErQjtBQUMvQztBQUNBLGlEQUFpRCxPQUFPO0FBQ3hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsTUFBaUM7QUFDbkQ7QUFDQTtBQUNBLDZDQUE2QyxRQUFRO0FBQ3JEO0FBQ0E7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDLHNCQUFzQjtBQUN2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxDQUFDO0FBQ0QsNkJBQTZCLDBCQUFtQjs7O0FBR2hELE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLDZHQUE2RyxrQ0FBbUI7QUFDaEksdUdBQXVHLGtDQUFtQjtBQUMxSCw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLGtDQUFrQyx3R0FBd0c7O0FBRWpOLG9IQUFvSCxrQ0FBbUI7Ozs7OztBQU12STs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksS0FBSyxFQUFFLFlBQVk7QUFDdkI7QUFDQSw2QkFBNkIsMEJBQW1COztBQUVoRCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QyxxTUFBcU0sa0NBQW1CO0FBQ3hOLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsa0NBQWtDLHNNQUFzTTs7QUFFL1MsOEJBQThCLDBCQUFtQjs7QUFFakQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsOE9BQThPLGtDQUFtQjtBQUNqUSw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLHlCQUF5QixzT0FBc087O0FBRXRVLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsa0NBQWtDLCtPQUErTzs7OztBQUl4VixPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QywrR0FBK0csa0NBQW1CO0FBQ2xJLHlHQUF5RyxrQ0FBbUI7QUFDNUgsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQixtQ0FBbUMsMkdBQTJHOztBQUVyTixvSEFBb0gsa0NBQW1COzs7Ozs7QUFNdkk7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLEtBQUssRUFBRSxZQUFZO0FBQ3ZCO0FBQ0EsNkJBQTZCLDBCQUFtQjs7QUFFaEQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsdU1BQXVNLGtDQUFtQjtBQUMxTiw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLG1DQUFtQyx5TUFBeU07O0FBRW5ULDhCQUE4QiwwQkFBbUI7O0FBRWpELE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLGdQQUFnUCxrQ0FBbUI7QUFDblEsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQix5QkFBeUIsd09BQXdPOztBQUV4VSw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLGtDQUFrQyxpUEFBaVA7Ozs7QUFJMVYsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsMEdBQTBHLGtDQUFtQjtBQUM3SCxvR0FBb0csa0NBQW1CO0FBQ3ZILDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsK0JBQStCLGtHQUFrRzs7QUFFeE0sb0hBQW9ILGtDQUFtQjs7Ozs7O0FBTXZJOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSSxLQUFLLEVBQUUsWUFBWTtBQUN2QjtBQUNBLDZCQUE2QiwwQkFBbUI7O0FBRWhELE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLGtNQUFrTSxrQ0FBbUI7QUFDck4sOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQiwrQkFBK0IsZ01BQWdNOztBQUV0Uyw4QkFBOEIsMEJBQW1COztBQUVqRCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QywyT0FBMk8sa0NBQW1CO0FBQzlQLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIseUJBQXlCLG1PQUFtTzs7QUFFblUsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQixrQ0FBa0MsNE9BQTRPOzs7O0FBSXJWLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLDJHQUEyRyxrQ0FBbUI7QUFDOUgscUdBQXFHLGtDQUFtQjtBQUN4SCw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLGdDQUFnQyxvR0FBb0c7O0FBRTNNLG9IQUFvSCxrQ0FBbUI7Ozs7OztBQU12STs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksS0FBSyxFQUFFLFlBQVk7QUFDdkI7QUFDQSw2QkFBNkIsMEJBQW1COztBQUVoRCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QyxtTUFBbU0sa0NBQW1CO0FBQ3ROLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsZ0NBQWdDLGtNQUFrTTs7QUFFelMsOEJBQThCLDBCQUFtQjs7QUFFakQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsNE9BQTRPLGtDQUFtQjtBQUMvUCw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLHlCQUF5QixvT0FBb087O0FBRXBVLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsa0NBQWtDLDZPQUE2Tzs7OztBQUl0VixPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QywrQkFBK0Isa0NBQW1CLEdBQUcsMEJBQW1CLDBCQUEwQixpQkFBaUI7QUFDbkgsK0VBQStFLGtDQUFtQjtBQUNsRyxrRUFBa0Usa0NBQW1CO0FBQ3JGLGlCQUFpQixNQUFnQztBQUNqRDtBQUNBO0FBQ0EsZUFBZSxnQkFBZ0Isc0NBQXNDLGtCQUFrQjtBQUN2Riw4QkFBOEI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCO0FBQ3hCO0FBQ0E7QUFDQSxDQUFDO0FBQ0Qsa0JBQWtCLE1BQWlDO0FBQ25EO0FBQ0E7QUFDQSw2Q0FBNkMsUUFBUTtBQUNyRDtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7O0FBSUQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsd0dBQXdHLGtDQUFtQjtBQUMzSCxrR0FBa0csa0NBQW1CO0FBQ3JILDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsOEJBQThCLCtGQUErRjs7QUFFcE0sb0hBQW9ILGtDQUFtQjs7Ozs7O0FBTXZJOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSSxLQUFLLEVBQUUsWUFBWTtBQUN2QjtBQUNBLDZCQUE2QiwwQkFBbUI7O0FBRWhELE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLGdNQUFnTSxrQ0FBbUI7QUFDbk4sOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQiw4QkFBOEIsNkxBQTZMOztBQUVsUyw4QkFBOEIsMEJBQW1COztBQUVqRCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6Qyx5T0FBeU8sa0NBQW1CO0FBQzVQLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIseUJBQXlCLGlPQUFpTzs7QUFFalUsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQixrQ0FBa0MsME9BQTBPOzs7O0FBSW5WLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLDRHQUE0RyxrQ0FBbUI7QUFDL0gsc0dBQXNHLGtDQUFtQjtBQUN6SCw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLGtDQUFrQyx1R0FBdUc7O0FBRWhOLG9IQUFvSCxrQ0FBbUI7Ozs7OztBQU12STs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksS0FBSyxFQUFFLFlBQVk7QUFDdkI7QUFDQSw2QkFBNkIsMEJBQW1COztBQUVoRCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QyxvTUFBb00sa0NBQW1CO0FBQ3ZOLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsa0NBQWtDLHFNQUFxTTs7QUFFOVMsOEJBQThCLDBCQUFtQjs7QUFFakQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsNk9BQTZPLGtDQUFtQjtBQUNoUSw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLHlCQUF5QixxT0FBcU87O0FBRXJVLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsa0NBQWtDLDhPQUE4Tzs7OztBQUl2VixPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QyxxR0FBcUcsa0NBQW1CO0FBQ3hILCtGQUErRixrQ0FBbUI7QUFDbEgsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQiwyQkFBMkIseUZBQXlGOztBQUUzTCxvSEFBb0gsa0NBQW1COzs7Ozs7QUFNdkk7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLEtBQUssRUFBRSxZQUFZO0FBQ3ZCO0FBQ0EsNkJBQTZCLDBCQUFtQjs7QUFFaEQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsNkxBQTZMLGtDQUFtQjtBQUNoTiw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLDJCQUEyQix1TEFBdUw7O0FBRXpSLDhCQUE4QiwwQkFBbUI7O0FBRWpELE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLHNPQUFzTyxrQ0FBbUI7QUFDelAsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQix5QkFBeUIsOE5BQThOOztBQUU5VCw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLGtDQUFrQyx1T0FBdU87Ozs7QUFJaFYsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMseUdBQXlHLGtDQUFtQjtBQUM1SCxtR0FBbUcsa0NBQW1CO0FBQ3RILDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsK0JBQStCLGlHQUFpRzs7QUFFdk0sb0hBQW9ILGtDQUFtQjs7Ozs7O0FBTXZJOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSSxLQUFLLEVBQUUsWUFBWTtBQUN2QjtBQUNBLDZCQUE2QiwwQkFBbUI7O0FBRWhELE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLGlNQUFpTSxrQ0FBbUI7QUFDcE4sOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQiwrQkFBK0IsK0xBQStMOztBQUVyUyw4QkFBOEIsMEJBQW1COztBQUVqRCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QywwT0FBME8sa0NBQW1CO0FBQzdQLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIseUJBQXlCLGtPQUFrTzs7QUFFbFUsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQixrQ0FBa0MsMk9BQTJPOzs7O0FBSXBWLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLG9HQUFvRyxrQ0FBbUI7QUFDdkgsOEZBQThGLGtDQUFtQjtBQUNqSCw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLDBCQUEwQix1RkFBdUY7O0FBRXhMLG9IQUFvSCxrQ0FBbUI7Ozs7OztBQU12STs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksS0FBSyxFQUFFLFlBQVk7QUFDdkI7QUFDQSw2QkFBNkIsMEJBQW1COztBQUVoRCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6Qyw0TEFBNEwsa0NBQW1CO0FBQy9NLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsMEJBQTBCLHFMQUFxTDs7QUFFdFIsOEJBQThCLDBCQUFtQjs7QUFFakQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMscU9BQXFPLGtDQUFtQjtBQUN4UCw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLHlCQUF5Qiw2TkFBNk47O0FBRTdULDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsa0NBQWtDLHNPQUFzTzs7OztBQUkvVSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QyxxSEFBcUgsa0NBQW1CO0FBQ3hJLCtHQUErRyxrQ0FBbUI7QUFDbEksOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQixpREFBaUQsK0hBQStIOztBQUV2UCxvSEFBb0gsa0NBQW1COzs7Ozs7QUFNdkk7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLEtBQUssRUFBRSxZQUFZO0FBQ3ZCO0FBQ0EsNkJBQTZCLDBCQUFtQjs7QUFFaEQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsNk1BQTZNLGtDQUFtQjtBQUNoTyw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLGlEQUFpRCw2TkFBNk47O0FBRXJWLDhCQUE4QiwwQkFBbUI7O0FBRWpELE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLHNQQUFzUCxrQ0FBbUI7QUFDelEsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQix5QkFBeUIsOE9BQThPOztBQUU5VSw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLGtDQUFrQyx1UEFBdVA7Ozs7QUFJaFcsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsNEdBQTRHLGtDQUFtQjtBQUMvSCxzR0FBc0csa0NBQW1CO0FBQ3pILDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIseUNBQXlDLDhHQUE4Rzs7QUFFOU4sb0hBQW9ILGtDQUFtQjs7Ozs7O0FBTXZJOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSSxLQUFLLEVBQUUsWUFBWTtBQUN2QjtBQUNBLDZCQUE2QiwwQkFBbUI7O0FBRWhELE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLG9NQUFvTSxrQ0FBbUI7QUFDdk4sOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQix5Q0FBeUMsNE1BQTRNOztBQUU1VCw4QkFBOEIsMEJBQW1COztBQUVqRCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6Qyw2T0FBNk8sa0NBQW1CO0FBQ2hRLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIseUJBQXlCLHFPQUFxTzs7QUFFclUsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQixrQ0FBa0MsOE9BQThPOzs7O0FBSXZWLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLGlIQUFpSCxrQ0FBbUI7QUFDcEksMkdBQTJHLGtDQUFtQjtBQUM5SCw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLDhDQUE4Qyx3SEFBd0g7O0FBRTdPLG9IQUFvSCxrQ0FBbUI7Ozs7OztBQU12STs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksS0FBSyxFQUFFLFlBQVk7QUFDdkI7QUFDQSw2QkFBNkIsMEJBQW1COztBQUVoRCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6Qyx5TUFBeU0sa0NBQW1CO0FBQzVOLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsOENBQThDLHNOQUFzTjs7QUFFM1UsOEJBQThCLDBCQUFtQjs7QUFFakQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsa1BBQWtQLGtDQUFtQjtBQUNyUSw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLHlCQUF5QiwwT0FBME87O0FBRTFVLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsa0NBQWtDLG1QQUFtUDs7OztBQUk1VixPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6Qyx1R0FBdUcsa0NBQW1CO0FBQzFILGlHQUFpRyxrQ0FBbUI7QUFDcEgsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQixrQ0FBa0Msa0dBQWtHOztBQUUzTSw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLHlDQUF5Qyx5R0FBeUc7O0FBRXpOLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsaURBQWlELGlIQUFpSDs7QUFFek8sOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQiw4Q0FBOEMsOEdBQThHOztBQUVuTyw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLHFDQUFxQyxxR0FBcUc7O0FBRWpOLG9IQUFvSCxrQ0FBbUI7Ozs7OztBQU12STs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksS0FBSyxFQUFFLFlBQVk7QUFDdkI7QUFDQSw2QkFBNkIsMEJBQW1COztBQUVoRCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QywrTEFBK0wsa0NBQW1CO0FBQ2xOLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsa0NBQWtDLGdNQUFnTTs7QUFFelMsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQix5Q0FBeUMsdU1BQXVNOztBQUV2VCw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLGlEQUFpRCwrTUFBK007O0FBRXZVLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsOENBQThDLDRNQUE0TTs7QUFFalUsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQixxQ0FBcUMsbU1BQW1NOztBQUUvUyw4QkFBOEIsMEJBQW1COztBQUVqRCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6Qyx3T0FBd08sa0NBQW1CO0FBQzNQLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIseUJBQXlCLGdPQUFnTzs7QUFFaFUsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQixrQ0FBa0MseU9BQXlPOzs7O0FBSWxWLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLG1HQUFtRyxrQ0FBbUI7QUFDdEgsNkZBQTZGLGtDQUFtQjtBQUNoSCw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLGtDQUFrQyw4RkFBOEY7O0FBRXZNLG9IQUFvSCxrQ0FBbUI7Ozs7OztBQU12STs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksS0FBSyxFQUFFLFlBQVk7QUFDdkI7QUFDQSw2QkFBNkIsMEJBQW1COztBQUVoRCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QywyTEFBMkwsa0NBQW1CO0FBQzlNLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsa0NBQWtDLDRMQUE0TDs7QUFFclMsOEJBQThCLDBCQUFtQjs7QUFFakQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsb09BQW9PLGtDQUFtQjtBQUN2UCw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLHlCQUF5Qiw0TkFBNE47O0FBRTVULDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsa0NBQWtDLHFPQUFxTzs7OztBQUk5VSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6Qyx1R0FBdUcsa0NBQW1CO0FBQzFILGlHQUFpRyxrQ0FBbUI7QUFDcEgsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQiw0QkFBNEIsNEZBQTRGOztBQUUvTCxvSEFBb0gsa0NBQW1COzs7Ozs7QUFNdkk7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLEtBQUssRUFBRSxZQUFZO0FBQ3ZCO0FBQ0EsNkJBQTZCLDBCQUFtQjs7QUFFaEQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsK0xBQStMLGtDQUFtQjtBQUNsTiw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLDRCQUE0QiwwTEFBMEw7O0FBRTdSLDhCQUE4QiwwQkFBbUI7O0FBRWpELE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLHdPQUF3TyxrQ0FBbUI7QUFDM1AsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQix5QkFBeUIsZ09BQWdPOztBQUVoVSw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLGtDQUFrQyx5T0FBeU87Ozs7QUFJbFYsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsOEdBQThHLGtDQUFtQjtBQUNqSSx3R0FBd0csa0NBQW1CO0FBQzNILDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsNENBQTRDLG1IQUFtSDs7QUFFdE8sb0hBQW9ILGtDQUFtQjs7Ozs7O0FBTXZJOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSSxLQUFLLEVBQUUsWUFBWTtBQUN2QjtBQUNBLDZCQUE2QiwwQkFBbUI7O0FBRWhELE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLHNNQUFzTSxrQ0FBbUI7QUFDek4sOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQiw0Q0FBNEMsaU5BQWlOOztBQUVwVSw4QkFBOEIsMEJBQW1COztBQUVqRCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QywrT0FBK08sa0NBQW1CO0FBQ2xRLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIseUJBQXlCLHVPQUF1Tzs7QUFFdlUsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQixrQ0FBa0MsZ1BBQWdQOzs7O0FBSXpWLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLHNHQUFzRyxrQ0FBbUI7QUFDekgsZ0dBQWdHLGtDQUFtQjtBQUNuSCw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLHNDQUFzQyxxR0FBcUc7O0FBRWxOLG9IQUFvSCxrQ0FBbUI7Ozs7OztBQU12STs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksS0FBSyxFQUFFLFlBQVk7QUFDdkI7QUFDQSw2QkFBNkIsMEJBQW1COztBQUVoRCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6Qyw4TEFBOEwsa0NBQW1CO0FBQ2pOLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsc0NBQXNDLG1NQUFtTTs7QUFFaFQsOEJBQThCLDBCQUFtQjs7QUFFakQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsdU9BQXVPLGtDQUFtQjtBQUMxUCw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLHlCQUF5QiwrTkFBK047O0FBRS9ULDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsa0NBQWtDLHdPQUF3Tzs7OztBQUlqVixPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6Qyx1R0FBdUcsa0NBQW1CO0FBQzFILGlHQUFpRyxrQ0FBbUI7QUFDcEgsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQixxQ0FBcUMscUdBQXFHOztBQUVqTixvSEFBb0gsa0NBQW1COzs7Ozs7QUFNdkk7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLEtBQUssRUFBRSxZQUFZO0FBQ3ZCO0FBQ0EsNkJBQTZCLDBCQUFtQjs7QUFFaEQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsK0xBQStMLGtDQUFtQjtBQUNsTiw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLHFDQUFxQyxtTUFBbU07O0FBRS9TLDhCQUE4QiwwQkFBbUI7O0FBRWpELE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLHdPQUF3TyxrQ0FBbUI7QUFDM1AsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQix5QkFBeUIsZ09BQWdPOztBQUVoVSw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLGtDQUFrQyx5T0FBeU87Ozs7QUFJbFYsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsa0dBQWtHLGtDQUFtQjtBQUNySCw0RkFBNEYsa0NBQW1CO0FBQy9HLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIscUNBQXFDLGdHQUFnRzs7QUFFNU0sOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQixpQ0FBaUMsNEZBQTRGOztBQUVwTSxvSEFBb0gsa0NBQW1COzs7Ozs7QUFNdkk7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLEtBQUssRUFBRSxZQUFZO0FBQ3ZCO0FBQ0EsNkJBQTZCLDBCQUFtQjs7QUFFaEQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsMExBQTBMLGtDQUFtQjtBQUM3TSw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLHFDQUFxQyw4TEFBOEw7O0FBRTFTLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsaUNBQWlDLDBMQUEwTDs7QUFFbFMsOEJBQThCLDBCQUFtQjs7QUFFakQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsbU9BQW1PLGtDQUFtQjtBQUN0UCw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLHlCQUF5QiwyTkFBMk47O0FBRTNULDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsa0NBQWtDLG9PQUFvTzs7OztBQUk3VSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QyxxR0FBcUcsa0NBQW1CO0FBQ3hILCtGQUErRixrQ0FBbUI7QUFDbEgsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQixvQ0FBb0Msa0dBQWtHOztBQUU3TSxvSEFBb0gsa0NBQW1COzs7Ozs7QUFNdkk7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLEtBQUssRUFBRSxZQUFZO0FBQ3ZCO0FBQ0EsNkJBQTZCLDBCQUFtQjs7QUFFaEQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsNkxBQTZMLGtDQUFtQjtBQUNoTiw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLG9DQUFvQyxnTUFBZ007O0FBRTNTLDhCQUE4QiwwQkFBbUI7O0FBRWpELE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLHNPQUFzTyxrQ0FBbUI7QUFDelAsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQix5QkFBeUIsOE5BQThOOztBQUU5VCw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLGtDQUFrQyx1T0FBdU87Ozs7QUFJaFYsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsd0dBQXdHLGtDQUFtQjtBQUMzSCxrR0FBa0csa0NBQW1CO0FBQ3JILDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsb0NBQW9DLHFHQUFxRzs7QUFFaE4sOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQixxQ0FBcUMsc0dBQXNHOztBQUVsTixvSEFBb0gsa0NBQW1COzs7Ozs7QUFNdkk7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLEtBQUssRUFBRSxZQUFZO0FBQ3ZCO0FBQ0EsNkJBQTZCLDBCQUFtQjs7QUFFaEQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsZ01BQWdNLGtDQUFtQjtBQUNuTiw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLG9DQUFvQyxtTUFBbU07O0FBRTlTLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIscUNBQXFDLG9NQUFvTTs7QUFFaFQsOEJBQThCLDBCQUFtQjs7QUFFakQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMseU9BQXlPLGtDQUFtQjtBQUM1UCw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLHlCQUF5QixpT0FBaU87O0FBRWpVLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsa0NBQWtDLDBPQUEwTzs7OztBQUluVixPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QywrR0FBK0csa0NBQW1CO0FBQ2xJLHlHQUF5RyxrQ0FBbUI7QUFDNUgsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQixtQ0FBbUMsMkdBQTJHOztBQUVyTixvSEFBb0gsa0NBQW1COzs7Ozs7QUFNdkk7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLEtBQUssRUFBRSxZQUFZO0FBQ3ZCO0FBQ0EsNkJBQTZCLDBCQUFtQjs7QUFFaEQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsdU1BQXVNLGtDQUFtQjtBQUMxTiw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLG1DQUFtQyx5TUFBeU07O0FBRW5ULDhCQUE4QiwwQkFBbUI7O0FBRWpELE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLGdQQUFnUCxrQ0FBbUI7QUFDblEsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQix5QkFBeUIsd09BQXdPOztBQUV4VSw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLGtDQUFrQyxpUEFBaVA7Ozs7QUFJMVYsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsc0dBQXNHLGtDQUFtQjtBQUN6SCxnR0FBZ0csa0NBQW1CO0FBQ25ILDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsdUJBQXVCLHNGQUFzRjs7QUFFcEwsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQiwyQkFBMkIsMEZBQTBGOztBQUU1TCxvSEFBb0gsa0NBQW1COzs7Ozs7QUFNdkk7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLEtBQUssRUFBRSxZQUFZO0FBQ3ZCO0FBQ0EsNkJBQTZCLDBCQUFtQjs7QUFFaEQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsOExBQThMLGtDQUFtQjtBQUNqTiw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLHVCQUF1QixvTEFBb0w7O0FBRWxSLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsMkJBQTJCLHdMQUF3TDs7QUFFMVIsOEJBQThCLDBCQUFtQjs7QUFFakQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsdU9BQXVPLGtDQUFtQjtBQUMxUCw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLHlCQUF5QiwrTkFBK047O0FBRS9ULDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsa0NBQWtDLHdPQUF3Tzs7OztBQUlqVixPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QyxpR0FBaUcsa0NBQW1CO0FBQ3BILDJGQUEyRixrQ0FBbUI7QUFDOUcsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQiwyQkFBMkIscUZBQXFGOztBQUV2TCw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLHVCQUF1QixpRkFBaUY7O0FBRS9LLG9IQUFvSCxrQ0FBbUI7Ozs7OztBQU12STs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksS0FBSyxFQUFFLFlBQVk7QUFDdkI7QUFDQSw2QkFBNkIsMEJBQW1COztBQUVoRCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6Qyx5TEFBeUwsa0NBQW1CO0FBQzVNLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsMkJBQTJCLG1MQUFtTDs7QUFFclIsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQix1QkFBdUIsK0tBQStLOztBQUU3USw4QkFBOEIsMEJBQW1COztBQUVqRCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QyxrT0FBa08sa0NBQW1CO0FBQ3JQLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIseUJBQXlCLDBOQUEwTjs7QUFFMVQsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQixrQ0FBa0MsbU9BQW1POzs7O0FBSTVVLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLDhHQUE4RyxrQ0FBbUI7QUFDakksd0dBQXdHLGtDQUFtQjtBQUMzSCw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLDRDQUE0QyxtSEFBbUg7O0FBRXRPLG9IQUFvSCxrQ0FBbUI7Ozs7OztBQU12STs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksS0FBSyxFQUFFLFlBQVk7QUFDdkI7QUFDQSw2QkFBNkIsMEJBQW1COztBQUVoRCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QyxzTUFBc00sa0NBQW1CO0FBQ3pOLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsNENBQTRDLGlOQUFpTjs7QUFFcFUsOEJBQThCLDBCQUFtQjs7QUFFakQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsK09BQStPLGtDQUFtQjtBQUNsUSw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLHlCQUF5Qix1T0FBdU87O0FBRXZVLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsa0NBQWtDLGdQQUFnUDs7OztBQUl6VixPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QywwR0FBMEcsa0NBQW1CO0FBQzdILG9HQUFvRyxrQ0FBbUI7QUFDdkgsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQixtREFBbUQsc0hBQXNIOztBQUVoUCxvSEFBb0gsa0NBQW1COzs7Ozs7QUFNdkk7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLEtBQUssRUFBRSxZQUFZO0FBQ3ZCO0FBQ0EsNkJBQTZCLDBCQUFtQjs7QUFFaEQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsa01BQWtNLGtDQUFtQjtBQUNyTiw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLG1EQUFtRCxvTkFBb047O0FBRTlVLDhCQUE4QiwwQkFBbUI7O0FBRWpELE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLDJPQUEyTyxrQ0FBbUI7QUFDOVAsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQix5QkFBeUIsbU9BQW1POztBQUVuVSw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLGtDQUFrQyw0T0FBNE87Ozs7QUFJclYsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsMkdBQTJHLGtDQUFtQjtBQUM5SCxxR0FBcUcsa0NBQW1CO0FBQ3hILDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsMERBQTBELDhIQUE4SDs7QUFFL1Asb0hBQW9ILGtDQUFtQjs7Ozs7O0FBTXZJOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSSxLQUFLLEVBQUUsWUFBWTtBQUN2QjtBQUNBLDZCQUE2QiwwQkFBbUI7O0FBRWhELE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLG1NQUFtTSxrQ0FBbUI7QUFDdE4sOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQiwwREFBMEQsNE5BQTROOztBQUU3Viw4QkFBOEIsMEJBQW1COztBQUVqRCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6Qyw0T0FBNE8sa0NBQW1CO0FBQy9QLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIseUJBQXlCLG9PQUFvTzs7QUFFcFUsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQixrQ0FBa0MsNk9BQTZPOzs7O0FBSXRWLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLDBHQUEwRyxrQ0FBbUI7QUFDN0gsb0dBQW9HLGtDQUFtQjtBQUN2SCw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLDBEQUEwRCw2SEFBNkg7O0FBRTlQLG9IQUFvSCxrQ0FBbUI7Ozs7OztBQU12STs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksS0FBSyxFQUFFLFlBQVk7QUFDdkI7QUFDQSw2QkFBNkIsMEJBQW1COztBQUVoRCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QyxrTUFBa00sa0NBQW1CO0FBQ3JOLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsMERBQTBELDJOQUEyTjs7QUFFNVYsOEJBQThCLDBCQUFtQjs7QUFFakQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsMk9BQTJPLGtDQUFtQjtBQUM5UCw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLHlCQUF5QixtT0FBbU87O0FBRW5VLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsa0NBQWtDLDRPQUE0Tzs7OztBQUlyVixPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QyxxR0FBcUcsa0NBQW1CO0FBQ3hILCtGQUErRixrQ0FBbUI7QUFDbEgsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQixvQ0FBb0Msa0dBQWtHOztBQUU3TSxvSEFBb0gsa0NBQW1COzs7Ozs7QUFNdkk7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLEtBQUssRUFBRSxZQUFZO0FBQ3ZCO0FBQ0EsNkJBQTZCLDBCQUFtQjs7QUFFaEQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsNkxBQTZMLGtDQUFtQjtBQUNoTiw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLG9DQUFvQyxnTUFBZ007O0FBRTNTLDhCQUE4QiwwQkFBbUI7O0FBRWpELE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLHNPQUFzTyxrQ0FBbUI7QUFDelAsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQix5QkFBeUIsOE5BQThOOztBQUU5VCw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLGtDQUFrQyx1T0FBdU87Ozs7QUFJaFYsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsaUhBQWlILGtDQUFtQjtBQUNwSSwyR0FBMkcsa0NBQW1CO0FBQzlILDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIscUNBQXFDLCtHQUErRzs7QUFFM04sOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQixxQ0FBcUMsK0dBQStHOztBQUUzTixvSEFBb0gsa0NBQW1COzs7Ozs7QUFNdkk7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLEtBQUssRUFBRSxZQUFZO0FBQ3ZCO0FBQ0EsNkJBQTZCLDBCQUFtQjs7QUFFaEQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMseU1BQXlNLGtDQUFtQjtBQUM1Tiw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLHFDQUFxQyw2TUFBNk07O0FBRXpULDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIscUNBQXFDLDZNQUE2TTs7QUFFelQsOEJBQThCLDBCQUFtQjs7QUFFakQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsa1BBQWtQLGtDQUFtQjtBQUNyUSw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLHlCQUF5QiwwT0FBME87O0FBRTFVLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsa0NBQWtDLG1QQUFtUDs7OztBQUk1VixPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QyxrSEFBa0gsa0NBQW1CO0FBQ3JJLDRHQUE0RyxrQ0FBbUI7QUFDL0gsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQixzQ0FBc0MsaUhBQWlIOztBQUU5TixvSEFBb0gsa0NBQW1COzs7Ozs7QUFNdkk7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLEtBQUssRUFBRSxZQUFZO0FBQ3ZCO0FBQ0EsNkJBQTZCLDBCQUFtQjs7QUFFaEQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsME1BQTBNLGtDQUFtQjtBQUM3Tiw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLHNDQUFzQywrTUFBK007O0FBRTVULDhCQUE4QiwwQkFBbUI7O0FBRWpELE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLG1QQUFtUCxrQ0FBbUI7QUFDdFEsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQix5QkFBeUIsMk9BQTJPOztBQUUzVSw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLGtDQUFrQyxvUEFBb1A7Ozs7QUFJN1YsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsa0hBQWtILGtDQUFtQjtBQUNySSw0R0FBNEcsa0NBQW1CO0FBQy9ILDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsc0NBQXNDLGlIQUFpSDs7QUFFOU4sb0hBQW9ILGtDQUFtQjs7Ozs7O0FBTXZJOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSSxLQUFLLEVBQUUsWUFBWTtBQUN2QjtBQUNBLDZCQUE2QiwwQkFBbUI7O0FBRWhELE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLDBNQUEwTSxrQ0FBbUI7QUFDN04sOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQixzQ0FBc0MsK01BQStNOztBQUU1VCw4QkFBOEIsMEJBQW1COztBQUVqRCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QyxtUEFBbVAsa0NBQW1CO0FBQ3RRLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIseUJBQXlCLDJPQUEyTzs7QUFFM1UsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQixrQ0FBa0Msb1BBQW9QOzs7O0FBSTdWLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLHVIQUF1SCxrQ0FBbUI7QUFDMUksaUhBQWlILGtDQUFtQjtBQUNwSSw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLDJDQUEyQywySEFBMkg7O0FBRTdPLG9IQUFvSCxrQ0FBbUI7Ozs7OztBQU12STs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksS0FBSyxFQUFFLFlBQVk7QUFDdkI7QUFDQSw2QkFBNkIsMEJBQW1COztBQUVoRCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QywrTUFBK00sa0NBQW1CO0FBQ2xPLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsMkNBQTJDLHlOQUF5Tjs7QUFFM1UsOEJBQThCLDBCQUFtQjs7QUFFakQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsd1BBQXdQLGtDQUFtQjtBQUMzUSw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLHlCQUF5QixnUEFBZ1A7O0FBRWhWLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsa0NBQWtDLHlQQUF5UDs7OztBQUlsVyxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QyxvSEFBb0gsa0NBQW1CO0FBQ3ZJLDhHQUE4RyxrQ0FBbUI7QUFDakksOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQiwyQ0FBMkMsd0hBQXdIOztBQUUxTyxvSEFBb0gsa0NBQW1COzs7Ozs7QUFNdkk7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLEtBQUssRUFBRSxZQUFZO0FBQ3ZCO0FBQ0EsNkJBQTZCLDBCQUFtQjs7QUFFaEQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsNE1BQTRNLGtDQUFtQjtBQUMvTiw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLDJDQUEyQyxzTkFBc047O0FBRXhVLDhCQUE4QiwwQkFBbUI7O0FBRWpELE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLHFQQUFxUCxrQ0FBbUI7QUFDeFEsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQix5QkFBeUIsNk9BQTZPOztBQUU3VSw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLGtDQUFrQyxzUEFBc1A7Ozs7QUFJL1YsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsNEdBQTRHLGtDQUFtQjtBQUMvSCxzR0FBc0csa0NBQW1CO0FBQ3pILDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsaUNBQWlDLHNHQUFzRzs7QUFFOU0sOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQiw0QkFBNEIsaUdBQWlHOztBQUVwTSw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLDZCQUE2QixrR0FBa0c7O0FBRXRNLG9IQUFvSCxrQ0FBbUI7Ozs7OztBQU12STs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksS0FBSyxFQUFFLFlBQVk7QUFDdkI7QUFDQSw2QkFBNkIsMEJBQW1COztBQUVoRCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QyxvTUFBb00sa0NBQW1CO0FBQ3ZOLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsaUNBQWlDLG9NQUFvTTs7QUFFNVMsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQiw0QkFBNEIsK0xBQStMOztBQUVsUyw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLDZCQUE2QixnTUFBZ007O0FBRXBTLDhCQUE4QiwwQkFBbUI7O0FBRWpELE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLDZPQUE2TyxrQ0FBbUI7QUFDaFEsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQix5QkFBeUIscU9BQXFPOztBQUVyVSw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLGtDQUFrQyw4T0FBOE87Ozs7QUFJdlYsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsMEdBQTBHLGtDQUFtQjtBQUM3SCxvR0FBb0csa0NBQW1CO0FBQ3ZILDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsK0JBQStCLGtHQUFrRzs7QUFFeE0sb0hBQW9ILGtDQUFtQjs7Ozs7O0FBTXZJOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSSxLQUFLLEVBQUUsWUFBWTtBQUN2QjtBQUNBLDZCQUE2QiwwQkFBbUI7O0FBRWhELE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLGtNQUFrTSxrQ0FBbUI7QUFDck4sOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQiwrQkFBK0IsZ01BQWdNOztBQUV0Uyw4QkFBOEIsMEJBQW1COztBQUVqRCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QywyT0FBMk8sa0NBQW1CO0FBQzlQLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIseUJBQXlCLG1PQUFtTzs7QUFFblUsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQixrQ0FBa0MsNE9BQTRPOzs7O0FBSXJWLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLGtHQUFrRyxrQ0FBbUI7QUFDckgsNEZBQTRGLGtDQUFtQjtBQUMvRyw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLHdCQUF3QixtRkFBbUY7O0FBRWxMLG9IQUFvSCxrQ0FBbUI7Ozs7OztBQU12STs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksS0FBSyxFQUFFLFlBQVk7QUFDdkI7QUFDQSw2QkFBNkIsMEJBQW1COztBQUVoRCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QywwTEFBMEwsa0NBQW1CO0FBQzdNLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsd0JBQXdCLGlMQUFpTDs7QUFFaFIsOEJBQThCLDBCQUFtQjs7QUFFakQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsbU9BQW1PLGtDQUFtQjtBQUN0UCw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLHlCQUF5QiwyTkFBMk47O0FBRTNULDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsa0NBQWtDLG9PQUFvTzs7OztBQUk3VSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QywrR0FBK0csa0NBQW1CO0FBQ2xJLHlHQUF5RyxrQ0FBbUI7QUFDNUgsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQixtQ0FBbUMsMkdBQTJHOztBQUVyTixvSEFBb0gsa0NBQW1COzs7Ozs7QUFNdkk7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLEtBQUssRUFBRSxZQUFZO0FBQ3ZCO0FBQ0EsNkJBQTZCLDBCQUFtQjs7QUFFaEQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsdU1BQXVNLGtDQUFtQjtBQUMxTiw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLG1DQUFtQyx5TUFBeU07O0FBRW5ULDhCQUE4QiwwQkFBbUI7O0FBRWpELE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLGdQQUFnUCxrQ0FBbUI7QUFDblEsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQix5QkFBeUIsd09BQXdPOztBQUV4VSw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLGtDQUFrQyxpUEFBaVA7Ozs7QUFJMVYsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsNkdBQTZHLGtDQUFtQjtBQUNoSSx1R0FBdUcsa0NBQW1CO0FBQzFILDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsaUNBQWlDLHVHQUF1Rzs7QUFFL00sb0hBQW9ILGtDQUFtQjs7Ozs7O0FBTXZJOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSSxLQUFLLEVBQUUsWUFBWTtBQUN2QjtBQUNBLDZCQUE2QiwwQkFBbUI7O0FBRWhELE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLHFNQUFxTSxrQ0FBbUI7QUFDeE4sOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQixpQ0FBaUMscU1BQXFNOztBQUU3Uyw4QkFBOEIsMEJBQW1COztBQUVqRCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6Qyw4T0FBOE8sa0NBQW1CO0FBQ2pRLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIseUJBQXlCLHNPQUFzTzs7QUFFdFUsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQixrQ0FBa0MsK09BQStPOzs7O0FBSXhWLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLHdHQUF3RyxrQ0FBbUI7QUFDM0gsa0dBQWtHLGtDQUFtQjtBQUNySCw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLDZCQUE2Qiw4RkFBOEY7O0FBRWxNLG9IQUFvSCxrQ0FBbUI7Ozs7OztBQU12STs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksS0FBSyxFQUFFLFlBQVk7QUFDdkI7QUFDQSw2QkFBNkIsMEJBQW1COztBQUVoRCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QyxnTUFBZ00sa0NBQW1CO0FBQ25OLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsNkJBQTZCLDRMQUE0TDs7QUFFaFMsOEJBQThCLDBCQUFtQjs7QUFFakQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMseU9BQXlPLGtDQUFtQjtBQUM1UCw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLHlCQUF5QixpT0FBaU87O0FBRWpVLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsa0NBQWtDLDBPQUEwTzs7OztBQUluVixPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QyxxR0FBcUcsa0NBQW1CO0FBQ3hILCtGQUErRixrQ0FBbUI7QUFDbEgsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQiwyQkFBMkIseUZBQXlGOztBQUUzTCxvSEFBb0gsa0NBQW1COzs7Ozs7QUFNdkk7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLEtBQUssRUFBRSxZQUFZO0FBQ3ZCO0FBQ0EsNkJBQTZCLDBCQUFtQjs7QUFFaEQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsNkxBQTZMLGtDQUFtQjtBQUNoTiw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLDJCQUEyQix1TEFBdUw7O0FBRXpSLDhCQUE4QiwwQkFBbUI7O0FBRWpELE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLHNPQUFzTyxrQ0FBbUI7QUFDelAsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQix5QkFBeUIsOE5BQThOOztBQUU5VCw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLGtDQUFrQyx1T0FBdU87Ozs7QUFJaFYsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsOEdBQThHLGtDQUFtQjtBQUNqSSx3R0FBd0csa0NBQW1CO0FBQzNILDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIseUNBQXlDLGdIQUFnSDs7QUFFaE8sb0hBQW9ILGtDQUFtQjs7Ozs7O0FBTXZJOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSSxLQUFLLEVBQUUsWUFBWTtBQUN2QjtBQUNBLDZCQUE2QiwwQkFBbUI7O0FBRWhELE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLHNNQUFzTSxrQ0FBbUI7QUFDek4sOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQix5Q0FBeUMsOE1BQThNOztBQUU5VCw4QkFBOEIsMEJBQW1COztBQUVqRCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QywrT0FBK08sa0NBQW1CO0FBQ2xRLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIseUJBQXlCLHVPQUF1Tzs7QUFFdlUsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQixrQ0FBa0MsZ1BBQWdQOzs7O0FBSXpWLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLHFHQUFxRyxrQ0FBbUI7QUFDeEgsK0ZBQStGLGtDQUFtQjtBQUNsSCw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLDBCQUEwQix3RkFBd0Y7O0FBRXpMLG9IQUFvSCxrQ0FBbUI7Ozs7OztBQU12STs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksS0FBSyxFQUFFLFlBQVk7QUFDdkI7QUFDQSw2QkFBNkIsMEJBQW1COztBQUVoRCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6Qyw2TEFBNkwsa0NBQW1CO0FBQ2hOLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsMEJBQTBCLHNMQUFzTDs7QUFFdlIsOEJBQThCLDBCQUFtQjs7QUFFakQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsc09BQXNPLGtDQUFtQjtBQUN6UCw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLHlCQUF5Qiw4TkFBOE47O0FBRTlULDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsa0NBQWtDLHVPQUF1Tzs7OztBQUloVixPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QywwR0FBMEcsa0NBQW1CO0FBQzdILG9HQUFvRyxrQ0FBbUI7QUFDdkgsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQix3Q0FBd0MsMkdBQTJHOztBQUUxTixvSEFBb0gsa0NBQW1COzs7Ozs7QUFNdkk7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLEtBQUssRUFBRSxZQUFZO0FBQ3ZCO0FBQ0EsNkJBQTZCLDBCQUFtQjs7QUFFaEQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsa01BQWtNLGtDQUFtQjtBQUNyTiw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLHdDQUF3Qyx5TUFBeU07O0FBRXhULDhCQUE4QiwwQkFBbUI7O0FBRWpELE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLDJPQUEyTyxrQ0FBbUI7QUFDOVAsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQix5QkFBeUIsbU9BQW1POztBQUVuVSw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLGtDQUFrQyw0T0FBNE87Ozs7QUFJclYsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsd0dBQXdHLGtDQUFtQjtBQUMzSCxrR0FBa0csa0NBQW1CO0FBQ3JILDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsNkJBQTZCLDhGQUE4Rjs7QUFFbE0sb0hBQW9ILGtDQUFtQjs7Ozs7O0FBTXZJOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSSxLQUFLLEVBQUUsWUFBWTtBQUN2QjtBQUNBLDZCQUE2QiwwQkFBbUI7O0FBRWhELE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLGdNQUFnTSxrQ0FBbUI7QUFDbk4sOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQiw2QkFBNkIsNExBQTRMOztBQUVoUyw4QkFBOEIsMEJBQW1COztBQUVqRCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6Qyx5T0FBeU8sa0NBQW1CO0FBQzVQLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIseUJBQXlCLGlPQUFpTzs7QUFFalUsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQixrQ0FBa0MsME9BQTBPOzs7O0FBSW5WLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLG1HQUFtRyxrQ0FBbUI7QUFDdEgsNkZBQTZGLGtDQUFtQjtBQUNoSCw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLGtDQUFrQyw4RkFBOEY7O0FBRXZNLG9IQUFvSCxrQ0FBbUI7Ozs7OztBQU12STs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksS0FBSyxFQUFFLFlBQVk7QUFDdkI7QUFDQSw2QkFBNkIsMEJBQW1COztBQUVoRCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QywyTEFBMkwsa0NBQW1CO0FBQzlNLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsa0NBQWtDLDRMQUE0TDs7QUFFclMsOEJBQThCLDBCQUFtQjs7QUFFakQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsb09BQW9PLGtDQUFtQjtBQUN2UCw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLHlCQUF5Qiw0TkFBNE47O0FBRTVULDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsa0NBQWtDLHFPQUFxTzs7OztBQUk5VSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QywwR0FBMEcsa0NBQW1CO0FBQzdILG9HQUFvRyxrQ0FBbUI7QUFDdkgsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQiwrQkFBK0Isa0dBQWtHOztBQUV4TSxvSEFBb0gsa0NBQW1COzs7Ozs7QUFNdkk7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLEtBQUssRUFBRSxZQUFZO0FBQ3ZCO0FBQ0EsNkJBQTZCLDBCQUFtQjs7QUFFaEQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsa01BQWtNLGtDQUFtQjtBQUNyTiw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLCtCQUErQixnTUFBZ007O0FBRXRTLDhCQUE4QiwwQkFBbUI7O0FBRWpELE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLDJPQUEyTyxrQ0FBbUI7QUFDOVAsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQix5QkFBeUIsbU9BQW1POztBQUVuVSw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLGtDQUFrQyw0T0FBNE87Ozs7QUFJclYsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsMEdBQTBHLGtDQUFtQjtBQUM3SCxvR0FBb0csa0NBQW1CO0FBQ3ZILDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsK0JBQStCLGtHQUFrRzs7QUFFeE0sb0hBQW9ILGtDQUFtQjs7Ozs7O0FBTXZJOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSSxLQUFLLEVBQUUsWUFBWTtBQUN2QjtBQUNBLDZCQUE2QiwwQkFBbUI7O0FBRWhELE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLGtNQUFrTSxrQ0FBbUI7QUFDck4sOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQiwrQkFBK0IsZ01BQWdNOztBQUV0Uyw4QkFBOEIsMEJBQW1COztBQUVqRCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QywyT0FBMk8sa0NBQW1CO0FBQzlQLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIseUJBQXlCLG1PQUFtTzs7QUFFblUsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQixrQ0FBa0MsNE9BQTRPOzs7O0FBSXJWLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLDBHQUEwRyxrQ0FBbUI7QUFDN0gsb0dBQW9HLGtDQUFtQjtBQUN2SCw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLCtCQUErQixrR0FBa0c7O0FBRXhNLG9IQUFvSCxrQ0FBbUI7Ozs7OztBQU12STs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksS0FBSyxFQUFFLFlBQVk7QUFDdkI7QUFDQSw2QkFBNkIsMEJBQW1COztBQUVoRCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QyxrTUFBa00sa0NBQW1CO0FBQ3JOLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsK0JBQStCLGdNQUFnTTs7QUFFdFMsOEJBQThCLDBCQUFtQjs7QUFFakQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsMk9BQTJPLGtDQUFtQjtBQUM5UCw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLHlCQUF5QixtT0FBbU87O0FBRW5VLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsa0NBQWtDLDRPQUE0Tzs7OztBQUlyVixPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QyxzR0FBc0csa0NBQW1CO0FBQ3pILGdHQUFnRyxrQ0FBbUI7QUFDbkgsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQiw0QkFBNEIsMkZBQTJGOztBQUU5TCxvSEFBb0gsa0NBQW1COzs7Ozs7QUFNdkk7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLEtBQUssRUFBRSxZQUFZO0FBQ3ZCO0FBQ0EsNkJBQTZCLDBCQUFtQjs7QUFFaEQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsOExBQThMLGtDQUFtQjtBQUNqTiw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLDRCQUE0Qix5TEFBeUw7O0FBRTVSLDhCQUE4QiwwQkFBbUI7O0FBRWpELE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLHVPQUF1TyxrQ0FBbUI7QUFDMVAsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQix5QkFBeUIsK05BQStOOztBQUUvVCw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLGtDQUFrQyx3T0FBd087Ozs7QUFJalYsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsbUdBQW1HLGtDQUFtQjtBQUN0SCw2RkFBNkYsa0NBQW1CO0FBQ2hILDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIseUJBQXlCLHFGQUFxRjs7QUFFckwsb0hBQW9ILGtDQUFtQjs7Ozs7O0FBTXZJOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSSxLQUFLLEVBQUUsWUFBWTtBQUN2QjtBQUNBLDZCQUE2QiwwQkFBbUI7O0FBRWhELE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLDJMQUEyTCxrQ0FBbUI7QUFDOU0sOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQix5QkFBeUIsbUxBQW1MOztBQUVuUiw4QkFBOEIsMEJBQW1COztBQUVqRCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QyxvT0FBb08sa0NBQW1CO0FBQ3ZQLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIseUJBQXlCLDROQUE0Tjs7QUFFNVQsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQixrQ0FBa0MscU9BQXFPOzs7O0FBSTlVLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLHlHQUF5RyxrQ0FBbUI7QUFDNUgsbUdBQW1HLGtDQUFtQjtBQUN0SCw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLCtCQUErQixpR0FBaUc7O0FBRXZNLG9IQUFvSCxrQ0FBbUI7Ozs7OztBQU12STs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksS0FBSyxFQUFFLFlBQVk7QUFDdkI7QUFDQSw2QkFBNkIsMEJBQW1COztBQUVoRCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QyxpTUFBaU0sa0NBQW1CO0FBQ3BOLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsK0JBQStCLCtMQUErTDs7QUFFclMsOEJBQThCLDBCQUFtQjs7QUFFakQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsME9BQTBPLGtDQUFtQjtBQUM3UCw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLHlCQUF5QixrT0FBa087O0FBRWxVLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsa0NBQWtDLDJPQUEyTzs7OztBQUlwVixPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6Qyw0R0FBNEcsa0NBQW1CO0FBQy9ILHNHQUFzRyxrQ0FBbUI7QUFDekgsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQixpQ0FBaUMsc0dBQXNHOztBQUU5TSxvSEFBb0gsa0NBQW1COzs7Ozs7QUFNdkk7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLEtBQUssRUFBRSxZQUFZO0FBQ3ZCO0FBQ0EsNkJBQTZCLDBCQUFtQjs7QUFFaEQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsb01BQW9NLGtDQUFtQjtBQUN2Tiw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLGlDQUFpQyxvTUFBb007O0FBRTVTLDhCQUE4QiwwQkFBbUI7O0FBRWpELE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLDZPQUE2TyxrQ0FBbUI7QUFDaFEsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQix5QkFBeUIscU9BQXFPOztBQUVyVSw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLGtDQUFrQyw4T0FBOE87Ozs7QUFJdlYsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMscUdBQXFHLGtDQUFtQjtBQUN4SCwrRkFBK0Ysa0NBQW1CO0FBQ2xILDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsMkJBQTJCLHlGQUF5Rjs7QUFFM0wsb0hBQW9ILGtDQUFtQjs7Ozs7O0FBTXZJOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSSxLQUFLLEVBQUUsWUFBWTtBQUN2QjtBQUNBLDZCQUE2QiwwQkFBbUI7O0FBRWhELE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLDZMQUE2TCxrQ0FBbUI7QUFDaE4sOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQiwyQkFBMkIsdUxBQXVMOztBQUV6Uiw4QkFBOEIsMEJBQW1COztBQUVqRCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QyxzT0FBc08sa0NBQW1CO0FBQ3pQLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIseUJBQXlCLDhOQUE4Tjs7QUFFOVQsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQixrQ0FBa0MsdU9BQXVPOzs7O0FBSWhWLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLG9HQUFvRyxrQ0FBbUI7QUFDdkgsOEZBQThGLGtDQUFtQjtBQUNqSCw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLG1DQUFtQyxnR0FBZ0c7O0FBRTFNLG9IQUFvSCxrQ0FBbUI7Ozs7OztBQU12STs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksS0FBSyxFQUFFLFlBQVk7QUFDdkI7QUFDQSw2QkFBNkIsMEJBQW1COztBQUVoRCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6Qyw0TEFBNEwsa0NBQW1CO0FBQy9NLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsbUNBQW1DLDhMQUE4TDs7QUFFeFMsOEJBQThCLDBCQUFtQjs7QUFFakQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMscU9BQXFPLGtDQUFtQjtBQUN4UCw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLHlCQUF5Qiw2TkFBNk47O0FBRTdULDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsa0NBQWtDLHNPQUFzTzs7OztBQUkvVSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QywwR0FBMEcsa0NBQW1CO0FBQzdILG9HQUFvRyxrQ0FBbUI7QUFDdkgsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQixnQ0FBZ0MsbUdBQW1HOztBQUUxTSxvSEFBb0gsa0NBQW1COzs7Ozs7QUFNdkk7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLEtBQUssRUFBRSxZQUFZO0FBQ3ZCO0FBQ0EsNkJBQTZCLDBCQUFtQjs7QUFFaEQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsa01BQWtNLGtDQUFtQjtBQUNyTiw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLGdDQUFnQyxpTUFBaU07O0FBRXhTLDhCQUE4QiwwQkFBbUI7O0FBRWpELE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLDJPQUEyTyxrQ0FBbUI7QUFDOVAsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQix5QkFBeUIsbU9BQW1POztBQUVuVSw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLGtDQUFrQyw0T0FBNE87Ozs7QUFJclYsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsa0dBQWtHLGtDQUFtQjtBQUNySCw0RkFBNEYsa0NBQW1CO0FBQy9HLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsd0JBQXdCLG1GQUFtRjs7QUFFbEwsb0hBQW9ILGtDQUFtQjs7Ozs7O0FBTXZJOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSSxLQUFLLEVBQUUsWUFBWTtBQUN2QjtBQUNBLDZCQUE2QiwwQkFBbUI7O0FBRWhELE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLDBMQUEwTCxrQ0FBbUI7QUFDN00sOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQix3QkFBd0IsaUxBQWlMOztBQUVoUiw4QkFBOEIsMEJBQW1COztBQUVqRCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QyxtT0FBbU8sa0NBQW1CO0FBQ3RQLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIseUJBQXlCLDJOQUEyTjs7QUFFM1QsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQixrQ0FBa0Msb09BQW9POzs7O0FBSTdVLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLG1HQUFtRyxrQ0FBbUI7QUFDdEgsNkZBQTZGLGtDQUFtQjtBQUNoSCw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLHlCQUF5QixxRkFBcUY7O0FBRXJMLG9IQUFvSCxrQ0FBbUI7Ozs7OztBQU12STs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksS0FBSyxFQUFFLFlBQVk7QUFDdkI7QUFDQSw2QkFBNkIsMEJBQW1COztBQUVoRCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QywyTEFBMkwsa0NBQW1CO0FBQzlNLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIseUJBQXlCLG1MQUFtTDs7QUFFblIsOEJBQThCLDBCQUFtQjs7QUFFakQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsb09BQW9PLGtDQUFtQjtBQUN2UCw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLHlCQUF5Qiw0TkFBNE47O0FBRTVULDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsa0NBQWtDLHFPQUFxTzs7OztBQUk5VSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6Qyx1R0FBdUcsa0NBQW1CO0FBQzFILGlHQUFpRyxrQ0FBbUI7QUFDcEgsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQiw2QkFBNkIsNkZBQTZGOztBQUVqTSxvSEFBb0gsa0NBQW1COzs7Ozs7QUFNdkk7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLEtBQUssRUFBRSxZQUFZO0FBQ3ZCO0FBQ0EsNkJBQTZCLDBCQUFtQjs7QUFFaEQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsK0xBQStMLGtDQUFtQjtBQUNsTiw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLDZCQUE2QiwyTEFBMkw7O0FBRS9SLDhCQUE4QiwwQkFBbUI7O0FBRWpELE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLHdPQUF3TyxrQ0FBbUI7QUFDM1AsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQix5QkFBeUIsZ09BQWdPOztBQUVoVSw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLGtDQUFrQyx5T0FBeU87Ozs7QUFJbFYsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsOEdBQThHLGtDQUFtQjtBQUNqSSx3R0FBd0csa0NBQW1CO0FBQzNILDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsa0NBQWtDLHlHQUF5Rzs7QUFFbE4sb0hBQW9ILGtDQUFtQjs7Ozs7O0FBTXZJOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSSxLQUFLLEVBQUUsWUFBWTtBQUN2QjtBQUNBLDZCQUE2QiwwQkFBbUI7O0FBRWhELE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLHNNQUFzTSxrQ0FBbUI7QUFDek4sOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQixrQ0FBa0MsdU1BQXVNOztBQUVoVCw4QkFBOEIsMEJBQW1COztBQUVqRCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QywrT0FBK08sa0NBQW1CO0FBQ2xRLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIseUJBQXlCLHVPQUF1Tzs7QUFFdlUsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQixrQ0FBa0MsZ1BBQWdQOzs7O0FBSXpWLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLHlHQUF5RyxrQ0FBbUI7QUFDNUgsbUdBQW1HLGtDQUFtQjtBQUN0SCw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLDhCQUE4QixnR0FBZ0c7O0FBRXJNLG9IQUFvSCxrQ0FBbUI7Ozs7OztBQU12STs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksS0FBSyxFQUFFLFlBQVk7QUFDdkI7QUFDQSw2QkFBNkIsMEJBQW1COztBQUVoRCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QyxpTUFBaU0sa0NBQW1CO0FBQ3BOLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsOEJBQThCLDhMQUE4TDs7QUFFblMsOEJBQThCLDBCQUFtQjs7QUFFakQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsME9BQTBPLGtDQUFtQjtBQUM3UCw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLHlCQUF5QixrT0FBa087O0FBRWxVLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsa0NBQWtDLDJPQUEyTzs7OztBQUlwVixPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6Qyx1R0FBdUcsa0NBQW1CO0FBQzFILGlHQUFpRyxrQ0FBbUI7QUFDcEgsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQiw0QkFBNEIsNEZBQTRGOztBQUUvTCxvSEFBb0gsa0NBQW1COzs7Ozs7QUFNdkk7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLEtBQUssRUFBRSxZQUFZO0FBQ3ZCO0FBQ0EsNkJBQTZCLDBCQUFtQjs7QUFFaEQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsK0xBQStMLGtDQUFtQjtBQUNsTiw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLDRCQUE0QiwwTEFBMEw7O0FBRTdSLDhCQUE4QiwwQkFBbUI7O0FBRWpELE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLHdPQUF3TyxrQ0FBbUI7QUFDM1AsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQix5QkFBeUIsZ09BQWdPOztBQUVoVSw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLGtDQUFrQyx5T0FBeU87Ozs7QUFJbFYsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsaUdBQWlHLGtDQUFtQjtBQUNwSCwyRkFBMkYsa0NBQW1CO0FBQzlHLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsdUJBQXVCLGlGQUFpRjs7QUFFL0ssb0hBQW9ILGtDQUFtQjs7Ozs7O0FBTXZJOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSSxLQUFLLEVBQUUsWUFBWTtBQUN2QjtBQUNBLDZCQUE2QiwwQkFBbUI7O0FBRWhELE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLHlMQUF5TCxrQ0FBbUI7QUFDNU0sOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQix1QkFBdUIsK0tBQStLOztBQUU3USw4QkFBOEIsMEJBQW1COztBQUVqRCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QyxrT0FBa08sa0NBQW1CO0FBQ3JQLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIseUJBQXlCLDBOQUEwTjs7QUFFMVQsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQixrQ0FBa0MsbU9BQW1POzs7O0FBSTVVLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLHNHQUFzRyxrQ0FBbUI7QUFDekgsZ0dBQWdHLGtDQUFtQjtBQUNuSCw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLDRCQUE0QiwyRkFBMkY7O0FBRTlMLG9IQUFvSCxrQ0FBbUI7Ozs7OztBQU12STs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksS0FBSyxFQUFFLFlBQVk7QUFDdkI7QUFDQSw2QkFBNkIsMEJBQW1COztBQUVoRCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6Qyw4TEFBOEwsa0NBQW1CO0FBQ2pOLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsNEJBQTRCLHlMQUF5TDs7QUFFNVIsOEJBQThCLDBCQUFtQjs7QUFFakQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsdU9BQXVPLGtDQUFtQjtBQUMxUCw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLHlCQUF5QiwrTkFBK047O0FBRS9ULDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsa0NBQWtDLHdPQUF3Tzs7OztBQUlqVixPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6Qyw2R0FBNkcsa0NBQW1CO0FBQ2hJLHVHQUF1RyxrQ0FBbUI7QUFDMUgsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQixtQ0FBbUMseUdBQXlHOztBQUVuTixvSEFBb0gsa0NBQW1COzs7Ozs7QUFNdkk7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLEtBQUssRUFBRSxZQUFZO0FBQ3ZCO0FBQ0EsNkJBQTZCLDBCQUFtQjs7QUFFaEQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMscU1BQXFNLGtDQUFtQjtBQUN4Tiw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLG1DQUFtQyx1TUFBdU07O0FBRWpULDhCQUE4QiwwQkFBbUI7O0FBRWpELE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLDhPQUE4TyxrQ0FBbUI7QUFDalEsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQix5QkFBeUIsc09BQXNPOztBQUV0VSw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLGtDQUFrQywrT0FBK087Ozs7QUFJeFYsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsbUdBQW1HLGtDQUFtQjtBQUN0SCw2RkFBNkYsa0NBQW1CO0FBQ2hILDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsK0JBQStCLDJGQUEyRjs7QUFFak0sb0hBQW9ILGtDQUFtQjs7Ozs7O0FBTXZJOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSSxLQUFLLEVBQUUsWUFBWTtBQUN2QjtBQUNBLDZCQUE2QiwwQkFBbUI7O0FBRWhELE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLDJMQUEyTCxrQ0FBbUI7QUFDOU0sOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQiwrQkFBK0IseUxBQXlMOztBQUUvUiw4QkFBOEIsMEJBQW1COztBQUVqRCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QyxvT0FBb08sa0NBQW1CO0FBQ3ZQLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIseUJBQXlCLDROQUE0Tjs7QUFFNVQsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQixrQ0FBa0MscU9BQXFPOzs7O0FBSTlVLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLGlHQUFpRyxrQ0FBbUI7QUFDcEgsMkZBQTJGLGtDQUFtQjtBQUM5Ryw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLHVCQUF1QixpRkFBaUY7O0FBRS9LLG9IQUFvSCxrQ0FBbUI7Ozs7OztBQU12STs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksS0FBSyxFQUFFLFlBQVk7QUFDdkI7QUFDQSw2QkFBNkIsMEJBQW1COztBQUVoRCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6Qyx5TEFBeUwsa0NBQW1CO0FBQzVNLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsdUJBQXVCLCtLQUErSzs7QUFFN1EsOEJBQThCLDBCQUFtQjs7QUFFakQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsa09BQWtPLGtDQUFtQjtBQUNyUCw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLHlCQUF5QiwwTkFBME47O0FBRTFULDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsa0NBQWtDLG1PQUFtTzs7OztBQUk1VSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QyxrR0FBa0csa0NBQW1CO0FBQ3JILDRGQUE0RixrQ0FBbUI7QUFDL0csOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQixnQ0FBZ0MsMkZBQTJGOztBQUVsTSxvSEFBb0gsa0NBQW1COzs7Ozs7QUFNdkk7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLEtBQUssRUFBRSxZQUFZO0FBQ3ZCO0FBQ0EsNkJBQTZCLDBCQUFtQjs7QUFFaEQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsMExBQTBMLGtDQUFtQjtBQUM3TSw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLGdDQUFnQyx5TEFBeUw7O0FBRWhTLDhCQUE4QiwwQkFBbUI7O0FBRWpELE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLG1PQUFtTyxrQ0FBbUI7QUFDdFAsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQix5QkFBeUIsMk5BQTJOOztBQUUzVCw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLGtDQUFrQyxvT0FBb087Ozs7QUFJN1UsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsNkdBQTZHLGtDQUFtQjtBQUNoSSx1R0FBdUcsa0NBQW1CO0FBQzFILDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsa0NBQWtDLHdHQUF3Rzs7QUFFak4sb0hBQW9ILGtDQUFtQjs7Ozs7O0FBTXZJOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSSxLQUFLLEVBQUUsWUFBWTtBQUN2QjtBQUNBLDZCQUE2QiwwQkFBbUI7O0FBRWhELE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLHFNQUFxTSxrQ0FBbUI7QUFDeE4sOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQixrQ0FBa0Msc01BQXNNOztBQUUvUyw4QkFBOEIsMEJBQW1COztBQUVqRCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6Qyw4T0FBOE8sa0NBQW1CO0FBQ2pRLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIseUJBQXlCLHNPQUFzTzs7QUFFdFUsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQixrQ0FBa0MsK09BQStPOzs7O0FBSXhWLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLHdHQUF3RyxrQ0FBbUI7QUFDM0gsa0dBQWtHLGtDQUFtQjtBQUNySCw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLDhCQUE4QiwrRkFBK0Y7O0FBRXBNLG9IQUFvSCxrQ0FBbUI7Ozs7OztBQU12STs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksS0FBSyxFQUFFLFlBQVk7QUFDdkI7QUFDQSw2QkFBNkIsMEJBQW1COztBQUVoRCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QyxnTUFBZ00sa0NBQW1CO0FBQ25OLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsOEJBQThCLDZMQUE2TDs7QUFFbFMsOEJBQThCLDBCQUFtQjs7QUFFakQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMseU9BQXlPLGtDQUFtQjtBQUM1UCw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLHlCQUF5QixpT0FBaU87O0FBRWpVLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsa0NBQWtDLDBPQUEwTzs7OztBQUluVixPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QyxtR0FBbUcsa0NBQW1CO0FBQ3RILDZGQUE2RixrQ0FBbUI7QUFDaEgsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQix5QkFBeUIscUZBQXFGOztBQUVyTCxvSEFBb0gsa0NBQW1COzs7Ozs7QUFNdkk7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLEtBQUssRUFBRSxZQUFZO0FBQ3ZCO0FBQ0EsNkJBQTZCLDBCQUFtQjs7QUFFaEQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsMkxBQTJMLGtDQUFtQjtBQUM5TSw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLHlCQUF5QixtTEFBbUw7O0FBRW5SLDhCQUE4QiwwQkFBbUI7O0FBRWpELE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLG9PQUFvTyxrQ0FBbUI7QUFDdlAsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQix5QkFBeUIsNE5BQTROOztBQUU1VCw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLGtDQUFrQyxxT0FBcU87Ozs7QUFJOVUsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsdUdBQXVHLGtDQUFtQjtBQUMxSCxpR0FBaUcsa0NBQW1CO0FBQ3BILDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsNkJBQTZCLDZGQUE2Rjs7QUFFak0sb0hBQW9ILGtDQUFtQjs7Ozs7O0FBTXZJOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSSxLQUFLLEVBQUUsWUFBWTtBQUN2QjtBQUNBLDZCQUE2QiwwQkFBbUI7O0FBRWhELE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLCtMQUErTCxrQ0FBbUI7QUFDbE4sOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQiw2QkFBNkIsMkxBQTJMOztBQUUvUiw4QkFBOEIsMEJBQW1COztBQUVqRCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6Qyx3T0FBd08sa0NBQW1CO0FBQzNQLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIseUJBQXlCLGdPQUFnTzs7QUFFaFUsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQixrQ0FBa0MseU9BQXlPOzs7O0FBSWxWLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLDJHQUEyRyxrQ0FBbUI7QUFDOUgscUdBQXFHLGtDQUFtQjtBQUN4SCw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLGlDQUFpQyxxR0FBcUc7O0FBRTdNLG9IQUFvSCxrQ0FBbUI7Ozs7OztBQU12STs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksS0FBSyxFQUFFLFlBQVk7QUFDdkI7QUFDQSw2QkFBNkIsMEJBQW1COztBQUVoRCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QyxtTUFBbU0sa0NBQW1CO0FBQ3ROLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsaUNBQWlDLG1NQUFtTTs7QUFFM1MsOEJBQThCLDBCQUFtQjs7QUFFakQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsNE9BQTRPLGtDQUFtQjtBQUMvUCw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLHlCQUF5QixvT0FBb087O0FBRXBVLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsa0NBQWtDLDZPQUE2Tzs7OztBQUl0VixPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QywwR0FBMEcsa0NBQW1CO0FBQzdILG9HQUFvRyxrQ0FBbUI7QUFDdkgsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQixnQ0FBZ0MsbUdBQW1HOztBQUUxTSxvSEFBb0gsa0NBQW1COzs7Ozs7QUFNdkk7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLEtBQUssRUFBRSxZQUFZO0FBQ3ZCO0FBQ0EsNkJBQTZCLDBCQUFtQjs7QUFFaEQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsa01BQWtNLGtDQUFtQjtBQUNyTiw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLGdDQUFnQyxpTUFBaU07O0FBRXhTLDhCQUE4QiwwQkFBbUI7O0FBRWpELE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLDJPQUEyTyxrQ0FBbUI7QUFDOVAsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQix5QkFBeUIsbU9BQW1POztBQUVuVSw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLGtDQUFrQyw0T0FBNE87Ozs7QUFJclYsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsaUhBQWlILGtDQUFtQjtBQUNwSSwyR0FBMkcsa0NBQW1CO0FBQzlILDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsdUNBQXVDLGlIQUFpSDs7QUFFL04sb0hBQW9ILGtDQUFtQjs7Ozs7O0FBTXZJOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSSxLQUFLLEVBQUUsWUFBWTtBQUN2QjtBQUNBLDZCQUE2QiwwQkFBbUI7O0FBRWhELE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLHlNQUF5TSxrQ0FBbUI7QUFDNU4sOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQix1Q0FBdUMsK01BQStNOztBQUU3VCw4QkFBOEIsMEJBQW1COztBQUVqRCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QyxrUEFBa1Asa0NBQW1CO0FBQ3JRLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIseUJBQXlCLDBPQUEwTzs7QUFFMVUsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQixrQ0FBa0MsbVBBQW1QOzs7O0FBSTVWLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLHdHQUF3RyxrQ0FBbUI7QUFDM0gsa0dBQWtHLGtDQUFtQjtBQUNySCw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLDhCQUE4QiwrRkFBK0Y7O0FBRXBNLG9IQUFvSCxrQ0FBbUI7Ozs7OztBQU12STs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksS0FBSyxFQUFFLFlBQVk7QUFDdkI7QUFDQSw2QkFBNkIsMEJBQW1COztBQUVoRCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QyxnTUFBZ00sa0NBQW1CO0FBQ25OLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsOEJBQThCLDZMQUE2TDs7QUFFbFMsOEJBQThCLDBCQUFtQjs7QUFFakQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMseU9BQXlPLGtDQUFtQjtBQUM1UCw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLHlCQUF5QixpT0FBaU87O0FBRWpVLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsa0NBQWtDLDBPQUEwTzs7OztBQUluVixPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6Qyx5R0FBeUcsa0NBQW1CO0FBQzVILG1HQUFtRyxrQ0FBbUI7QUFDdEgsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQiwrQkFBK0IsaUdBQWlHOztBQUV2TSxvSEFBb0gsa0NBQW1COzs7Ozs7QUFNdkk7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLEtBQUssRUFBRSxZQUFZO0FBQ3ZCO0FBQ0EsNkJBQTZCLDBCQUFtQjs7QUFFaEQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsaU1BQWlNLGtDQUFtQjtBQUNwTiw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLCtCQUErQiwrTEFBK0w7O0FBRXJTLDhCQUE4QiwwQkFBbUI7O0FBRWpELE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLDBPQUEwTyxrQ0FBbUI7QUFDN1AsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQix5QkFBeUIsa09BQWtPOztBQUVsVSw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLGtDQUFrQywyT0FBMk87Ozs7QUFJcFYsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsNkdBQTZHLGtDQUFtQjtBQUNoSSx1R0FBdUcsa0NBQW1CO0FBQzFILDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsbUNBQW1DLHlHQUF5Rzs7QUFFbk4sb0hBQW9ILGtDQUFtQjs7Ozs7O0FBTXZJOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSSxLQUFLLEVBQUUsWUFBWTtBQUN2QjtBQUNBLDZCQUE2QiwwQkFBbUI7O0FBRWhELE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLHFNQUFxTSxrQ0FBbUI7QUFDeE4sOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQixtQ0FBbUMsdU1BQXVNOztBQUVqVCw4QkFBOEIsMEJBQW1COztBQUVqRCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6Qyw4T0FBOE8sa0NBQW1CO0FBQ2pRLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIseUJBQXlCLHNPQUFzTzs7QUFFdFUsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQixrQ0FBa0MsK09BQStPOzs7O0FBSXhWLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLGlHQUFpRyxrQ0FBbUI7QUFDcEgsMkZBQTJGLGtDQUFtQjtBQUM5Ryw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLHVCQUF1QixpRkFBaUY7O0FBRS9LLG9IQUFvSCxrQ0FBbUI7Ozs7OztBQU12STs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksS0FBSyxFQUFFLFlBQVk7QUFDdkI7QUFDQSw2QkFBNkIsMEJBQW1COztBQUVoRCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6Qyx5TEFBeUwsa0NBQW1CO0FBQzVNLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsdUJBQXVCLCtLQUErSzs7QUFFN1EsOEJBQThCLDBCQUFtQjs7QUFFakQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsa09BQWtPLGtDQUFtQjtBQUNyUCw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLHlCQUF5QiwwTkFBME47O0FBRTFULDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsa0NBQWtDLG1PQUFtTzs7OztBQUk1VSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QyxrR0FBa0csa0NBQW1CO0FBQ3JILDRGQUE0RixrQ0FBbUI7QUFDL0csOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQix3QkFBd0IsbUZBQW1GOztBQUVsTCxvSEFBb0gsa0NBQW1COzs7Ozs7QUFNdkk7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLEtBQUssRUFBRSxZQUFZO0FBQ3ZCO0FBQ0EsNkJBQTZCLDBCQUFtQjs7QUFFaEQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsMExBQTBMLGtDQUFtQjtBQUM3TSw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLHdCQUF3QixpTEFBaUw7O0FBRWhSLDhCQUE4QiwwQkFBbUI7O0FBRWpELE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLG1PQUFtTyxrQ0FBbUI7QUFDdFAsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQix5QkFBeUIsMk5BQTJOOztBQUUzVCw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLGtDQUFrQyxvT0FBb087Ozs7QUFJN1UsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMseUdBQXlHLGtDQUFtQjtBQUM1SCxtR0FBbUcsa0NBQW1CO0FBQ3RILDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsK0JBQStCLGlHQUFpRzs7QUFFdk0sb0hBQW9ILGtDQUFtQjs7Ozs7O0FBTXZJOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSSxLQUFLLEVBQUUsWUFBWTtBQUN2QjtBQUNBLDZCQUE2QiwwQkFBbUI7O0FBRWhELE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLGlNQUFpTSxrQ0FBbUI7QUFDcE4sOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQiwrQkFBK0IsK0xBQStMOztBQUVyUyw4QkFBOEIsMEJBQW1COztBQUVqRCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QywwT0FBME8sa0NBQW1CO0FBQzdQLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIseUJBQXlCLGtPQUFrTzs7QUFFbFUsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQixrQ0FBa0MsMk9BQTJPOzs7O0FBSXBWLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLGlIQUFpSCxrQ0FBbUI7QUFDcEksMkdBQTJHLGtDQUFtQjtBQUM5SCw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLHVDQUF1QyxpSEFBaUg7O0FBRS9OLG9IQUFvSCxrQ0FBbUI7Ozs7OztBQU12STs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksS0FBSyxFQUFFLFlBQVk7QUFDdkI7QUFDQSw2QkFBNkIsMEJBQW1COztBQUVoRCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6Qyx5TUFBeU0sa0NBQW1CO0FBQzVOLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsdUNBQXVDLCtNQUErTTs7QUFFN1QsOEJBQThCLDBCQUFtQjs7QUFFakQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsa1BBQWtQLGtDQUFtQjtBQUNyUSw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLHlCQUF5QiwwT0FBME87O0FBRTFVLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsa0NBQWtDLG1QQUFtUDs7OztBQUk1VixPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QyxtSEFBbUgsa0NBQW1CO0FBQ3RJLDZHQUE2RyxrQ0FBbUI7QUFDaEksOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQix5Q0FBeUMscUhBQXFIOztBQUVyTyxvSEFBb0gsa0NBQW1COzs7Ozs7QUFNdkk7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLEtBQUssRUFBRSxZQUFZO0FBQ3ZCO0FBQ0EsNkJBQTZCLDBCQUFtQjs7QUFFaEQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsMk1BQTJNLGtDQUFtQjtBQUM5Tiw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLHlDQUF5QyxtTkFBbU47O0FBRW5VLDhCQUE4QiwwQkFBbUI7O0FBRWpELE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLG9QQUFvUCxrQ0FBbUI7QUFDdlEsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQix5QkFBeUIsNE9BQTRPOztBQUU1VSw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLGtDQUFrQyxxUEFBcVA7Ozs7QUFJOVYsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMseUdBQXlHLGtDQUFtQjtBQUM1SCxtR0FBbUcsa0NBQW1CO0FBQ3RILDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsOEJBQThCLGdHQUFnRzs7QUFFck0sOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQiwrQkFBK0IsaUdBQWlHOztBQUV2TSxvSEFBb0gsa0NBQW1COzs7Ozs7QUFNdkk7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLEtBQUssRUFBRSxZQUFZO0FBQ3ZCO0FBQ0EsNkJBQTZCLDBCQUFtQjs7QUFFaEQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsaU1BQWlNLGtDQUFtQjtBQUNwTiw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLDhCQUE4Qiw4TEFBOEw7O0FBRW5TLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsK0JBQStCLCtMQUErTDs7QUFFclMsOEJBQThCLDBCQUFtQjs7QUFFakQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsME9BQTBPLGtDQUFtQjtBQUM3UCw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLHlCQUF5QixrT0FBa087O0FBRWxVLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsa0NBQWtDLDJPQUEyTzs7OztBQUlwVixPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QyxxR0FBcUcsa0NBQW1CO0FBQ3hILCtGQUErRixrQ0FBbUI7QUFDbEgsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQiwyQkFBMkIseUZBQXlGOztBQUUzTCxvSEFBb0gsa0NBQW1COzs7Ozs7QUFNdkk7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLEtBQUssRUFBRSxZQUFZO0FBQ3ZCO0FBQ0EsNkJBQTZCLDBCQUFtQjs7QUFFaEQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsNkxBQTZMLGtDQUFtQjtBQUNoTiw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLDJCQUEyQix1TEFBdUw7O0FBRXpSLDhCQUE4QiwwQkFBbUI7O0FBRWpELE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLHNPQUFzTyxrQ0FBbUI7QUFDelAsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQix5QkFBeUIsOE5BQThOOztBQUU5VCw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLGtDQUFrQyx1T0FBdU87Ozs7QUFJaFYsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsNEdBQTRHLGtDQUFtQjtBQUMvSCxzR0FBc0csa0NBQW1CO0FBQ3pILDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsa0NBQWtDLHVHQUF1Rzs7QUFFaE4sb0hBQW9ILGtDQUFtQjs7Ozs7O0FBTXZJOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSSxLQUFLLEVBQUUsWUFBWTtBQUN2QjtBQUNBLDZCQUE2QiwwQkFBbUI7O0FBRWhELE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLG9NQUFvTSxrQ0FBbUI7QUFDdk4sOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQixrQ0FBa0MscU1BQXFNOztBQUU5Uyw4QkFBOEIsMEJBQW1COztBQUVqRCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6Qyw2T0FBNk8sa0NBQW1CO0FBQ2hRLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIseUJBQXlCLHFPQUFxTzs7QUFFclUsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQixrQ0FBa0MsOE9BQThPOzs7O0FBSXZWLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLHdHQUF3RyxrQ0FBbUI7QUFDM0gsa0dBQWtHLGtDQUFtQjtBQUNySCw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLDhCQUE4QiwrRkFBK0Y7O0FBRXBNLG9IQUFvSCxrQ0FBbUI7Ozs7OztBQU12STs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksS0FBSyxFQUFFLFlBQVk7QUFDdkI7QUFDQSw2QkFBNkIsMEJBQW1COztBQUVoRCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QyxnTUFBZ00sa0NBQW1CO0FBQ25OLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsOEJBQThCLDZMQUE2TDs7QUFFbFMsOEJBQThCLDBCQUFtQjs7QUFFakQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMseU9BQXlPLGtDQUFtQjtBQUM1UCw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLHlCQUF5QixpT0FBaU87O0FBRWpVLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsa0NBQWtDLDBPQUEwTzs7OztBQUluVixPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6Qyw2R0FBNkcsa0NBQW1CO0FBQ2hJLHVHQUF1RyxrQ0FBbUI7QUFDMUgsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQiwrQkFBK0IscUdBQXFHOztBQUUzTSxvSEFBb0gsa0NBQW1COzs7Ozs7QUFNdkk7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLEtBQUssRUFBRSxZQUFZO0FBQ3ZCO0FBQ0EsNkJBQTZCLDBCQUFtQjs7QUFFaEQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMscU1BQXFNLGtDQUFtQjtBQUN4Tiw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLCtCQUErQixtTUFBbU07O0FBRXpTLDhCQUE4QiwwQkFBbUI7O0FBRWpELE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLDhPQUE4TyxrQ0FBbUI7QUFDalEsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQix5QkFBeUIsc09BQXNPOztBQUV0VSw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLGtDQUFrQywrT0FBK087Ozs7QUFJeFYsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsMkdBQTJHLGtDQUFtQjtBQUM5SCxxR0FBcUcsa0NBQW1CO0FBQ3hILDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsOEJBQThCLGtHQUFrRzs7QUFFdk0sb0hBQW9ILGtDQUFtQjs7Ozs7O0FBTXZJOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSSxLQUFLLEVBQUUsWUFBWTtBQUN2QjtBQUNBLDZCQUE2QiwwQkFBbUI7O0FBRWhELE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLG1NQUFtTSxrQ0FBbUI7QUFDdE4sOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQiw4QkFBOEIsZ01BQWdNOztBQUVyUyw4QkFBOEIsMEJBQW1COztBQUVqRCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6Qyw0T0FBNE8sa0NBQW1CO0FBQy9QLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIseUJBQXlCLG9PQUFvTzs7QUFFcFUsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQixrQ0FBa0MsNk9BQTZPOzs7O0FBSXRWLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLCtCQUErQixrQ0FBbUIsR0FBRywwQkFBbUIsOEJBQThCLHFCQUFxQjtBQUMzSCwrQkFBK0Isa0NBQW1CLEdBQUcsMEJBQW1CLG1DQUFtQywwQkFBMEI7QUFDckksK0VBQStFLGtDQUFtQjtBQUNsRyw4REFBOEQsa0NBQW1CO0FBQ2pGLGlCQUFpQixNQUFnQztBQUNqRDtBQUNBO0FBQ0EsZUFBZSxnQkFBZ0Isc0NBQXNDLGtCQUFrQjtBQUN2Riw4QkFBOEI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCO0FBQ3hCO0FBQ0E7QUFDQSxDQUFDO0FBQ0Qsa0JBQWtCLE1BQWlDO0FBQ25EO0FBQ0E7QUFDQSw2Q0FBNkMsUUFBUTtBQUNyRDtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCLDBCQUFtQjs7O0FBR2hELE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLHVHQUF1RyxrQ0FBbUI7QUFDMUgsaUdBQWlHLGtDQUFtQjtBQUNwSCw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLDZCQUE2Qiw2RkFBNkY7O0FBRWpNLG9IQUFvSCxrQ0FBbUI7Ozs7OztBQU12STs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksS0FBSyxFQUFFLFlBQVk7QUFDdkI7QUFDQSw2QkFBNkIsMEJBQW1COztBQUVoRCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QywrTEFBK0wsa0NBQW1CO0FBQ2xOLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsNkJBQTZCLDJMQUEyTDs7QUFFL1IsOEJBQThCLDBCQUFtQjs7QUFFakQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsd09BQXdPLGtDQUFtQjtBQUMzUCw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLHlCQUF5QixnT0FBZ087O0FBRWhVLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsa0NBQWtDLHlPQUF5Tzs7OztBQUlsVixPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QywyR0FBMkcsa0NBQW1CO0FBQzlILHFHQUFxRyxrQ0FBbUI7QUFDeEgsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQixpQ0FBaUMscUdBQXFHOztBQUU3TSxvSEFBb0gsa0NBQW1COzs7Ozs7QUFNdkk7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLEtBQUssRUFBRSxZQUFZO0FBQ3ZCO0FBQ0EsNkJBQTZCLDBCQUFtQjs7QUFFaEQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsbU1BQW1NLGtDQUFtQjtBQUN0Tiw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLGlDQUFpQyxtTUFBbU07O0FBRTNTLDhCQUE4QiwwQkFBbUI7O0FBRWpELE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLDRPQUE0TyxrQ0FBbUI7QUFDL1AsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQix5QkFBeUIsb09BQW9POztBQUVwVSw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLGtDQUFrQyw2T0FBNk87Ozs7QUFJdFYsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMseUdBQXlHLGtDQUFtQjtBQUM1SCxtR0FBbUcsa0NBQW1CO0FBQ3RILDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsOEJBQThCLGdHQUFnRzs7QUFFck0sb0hBQW9ILGtDQUFtQjs7Ozs7O0FBTXZJOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSSxLQUFLLEVBQUUsWUFBWTtBQUN2QjtBQUNBLDZCQUE2QiwwQkFBbUI7O0FBRWhELE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLGlNQUFpTSxrQ0FBbUI7QUFDcE4sOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQiw4QkFBOEIsOExBQThMOztBQUVuUyw4QkFBOEIsMEJBQW1COztBQUVqRCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QywwT0FBME8sa0NBQW1CO0FBQzdQLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIseUJBQXlCLGtPQUFrTzs7QUFFbFUsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQixrQ0FBa0MsMk9BQTJPOzs7O0FBSXBWLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLG9HQUFvRyxrQ0FBbUI7QUFDdkgsOEZBQThGLGtDQUFtQjtBQUNqSCw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLDBCQUEwQix1RkFBdUY7O0FBRXhMLG9IQUFvSCxrQ0FBbUI7Ozs7OztBQU12STs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksS0FBSyxFQUFFLFlBQVk7QUFDdkI7QUFDQSw2QkFBNkIsMEJBQW1COztBQUVoRCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6Qyw0TEFBNEwsa0NBQW1CO0FBQy9NLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsMEJBQTBCLHFMQUFxTDs7QUFFdFIsOEJBQThCLDBCQUFtQjs7QUFFakQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMscU9BQXFPLGtDQUFtQjtBQUN4UCw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLHlCQUF5Qiw2TkFBNk47O0FBRTdULDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsa0NBQWtDLHNPQUFzTzs7OztBQUkvVSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6Qyw0R0FBNEcsa0NBQW1CO0FBQy9ILHNHQUFzRyxrQ0FBbUI7QUFDekgsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQixpQ0FBaUMsc0dBQXNHOztBQUU5TSxvSEFBb0gsa0NBQW1COzs7Ozs7QUFNdkk7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLEtBQUssRUFBRSxZQUFZO0FBQ3ZCO0FBQ0EsNkJBQTZCLDBCQUFtQjs7QUFFaEQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsb01BQW9NLGtDQUFtQjtBQUN2Tiw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLGlDQUFpQyxvTUFBb007O0FBRTVTLDhCQUE4QiwwQkFBbUI7O0FBRWpELE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLDZPQUE2TyxrQ0FBbUI7QUFDaFEsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQix5QkFBeUIscU9BQXFPOztBQUVyVSw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLGtDQUFrQyw4T0FBOE87Ozs7QUFJdlYsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsbUdBQW1HLGtDQUFtQjtBQUN0SCw2RkFBNkYsa0NBQW1CO0FBQ2hILDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIseUJBQXlCLHFGQUFxRjs7QUFFckwsb0hBQW9ILGtDQUFtQjs7Ozs7O0FBTXZJOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSSxLQUFLLEVBQUUsWUFBWTtBQUN2QjtBQUNBLDZCQUE2QiwwQkFBbUI7O0FBRWhELE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLDJMQUEyTCxrQ0FBbUI7QUFDOU0sOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQix5QkFBeUIsbUxBQW1MOztBQUVuUiw4QkFBOEIsMEJBQW1COztBQUVqRCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QyxvT0FBb08sa0NBQW1CO0FBQ3ZQLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIseUJBQXlCLDROQUE0Tjs7QUFFNVQsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQixrQ0FBa0MscU9BQXFPOzs7O0FBSTlVLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLHdHQUF3RyxrQ0FBbUI7QUFDM0gsa0dBQWtHLGtDQUFtQjtBQUNySCw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLG1DQUFtQyxvR0FBb0c7O0FBRTlNLG9IQUFvSCxrQ0FBbUI7Ozs7OztBQU12STs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksS0FBSyxFQUFFLFlBQVk7QUFDdkI7QUFDQSw2QkFBNkIsMEJBQW1COztBQUVoRCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QyxnTUFBZ00sa0NBQW1CO0FBQ25OLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsbUNBQW1DLGtNQUFrTTs7QUFFNVMsOEJBQThCLDBCQUFtQjs7QUFFakQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMseU9BQXlPLGtDQUFtQjtBQUM1UCw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLHlCQUF5QixpT0FBaU87O0FBRWpVLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsa0NBQWtDLDBPQUEwTzs7OztBQUluVixPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QyxnR0FBZ0csa0NBQW1CO0FBQ25ILDBGQUEwRixrQ0FBbUI7QUFDN0csOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQixzQkFBc0IsK0VBQStFOztBQUU1SyxvSEFBb0gsa0NBQW1COzs7Ozs7QUFNdkk7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLEtBQUssRUFBRSxZQUFZO0FBQ3ZCO0FBQ0EsNkJBQTZCLDBCQUFtQjs7QUFFaEQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsd0xBQXdMLGtDQUFtQjtBQUMzTSw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLHNCQUFzQiw2S0FBNks7O0FBRTFRLDhCQUE4QiwwQkFBbUI7O0FBRWpELE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLGlPQUFpTyxrQ0FBbUI7QUFDcFAsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQix5QkFBeUIseU5BQXlOOztBQUV6VCw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLGtDQUFrQyxrT0FBa087Ozs7QUFJM1UsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMseUdBQXlHLGtDQUFtQjtBQUM1SCxtR0FBbUcsa0NBQW1CO0FBQ3RILDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsK0JBQStCLGlHQUFpRzs7QUFFdk0sb0hBQW9ILGtDQUFtQjs7Ozs7O0FBTXZJOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSSxLQUFLLEVBQUUsWUFBWTtBQUN2QjtBQUNBLDZCQUE2QiwwQkFBbUI7O0FBRWhELE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLGlNQUFpTSxrQ0FBbUI7QUFDcE4sOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQiwrQkFBK0IsK0xBQStMOztBQUVyUyw4QkFBOEIsMEJBQW1COztBQUVqRCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QywwT0FBME8sa0NBQW1CO0FBQzdQLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIseUJBQXlCLGtPQUFrTzs7QUFFbFUsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQixrQ0FBa0MsMk9BQTJPOzs7O0FBSXBWLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLDBHQUEwRyxrQ0FBbUI7QUFDN0gsb0dBQW9HLGtDQUFtQjtBQUN2SCw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLHFDQUFxQyx3R0FBd0c7O0FBRXBOLG9IQUFvSCxrQ0FBbUI7Ozs7OztBQU12STs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksS0FBSyxFQUFFLFlBQVk7QUFDdkI7QUFDQSw2QkFBNkIsMEJBQW1COztBQUVoRCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QyxrTUFBa00sa0NBQW1CO0FBQ3JOLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIscUNBQXFDLHNNQUFzTTs7QUFFbFQsOEJBQThCLDBCQUFtQjs7QUFFakQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsMk9BQTJPLGtDQUFtQjtBQUM5UCw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLHlCQUF5QixtT0FBbU87O0FBRW5VLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsa0NBQWtDLDRPQUE0Tzs7OztBQUlyVixPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QywwR0FBMEcsa0NBQW1CO0FBQzdILG9HQUFvRyxrQ0FBbUI7QUFDdkgsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQixxQ0FBcUMsd0dBQXdHOztBQUVwTixvSEFBb0gsa0NBQW1COzs7Ozs7QUFNdkk7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLEtBQUssRUFBRSxZQUFZO0FBQ3ZCO0FBQ0EsNkJBQTZCLDBCQUFtQjs7QUFFaEQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsa01BQWtNLGtDQUFtQjtBQUNyTiw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLHFDQUFxQyxzTUFBc007O0FBRWxULDhCQUE4QiwwQkFBbUI7O0FBRWpELE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLDJPQUEyTyxrQ0FBbUI7QUFDOVAsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQix5QkFBeUIsbU9BQW1POztBQUVuVSw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLGtDQUFrQyw0T0FBNE87Ozs7QUFJclYsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsbUdBQW1HLGtDQUFtQjtBQUN0SCw2RkFBNkYsa0NBQW1CO0FBQ2hILDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsK0JBQStCLDJGQUEyRjs7QUFFak0sb0hBQW9ILGtDQUFtQjs7Ozs7O0FBTXZJOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSSxLQUFLLEVBQUUsWUFBWTtBQUN2QjtBQUNBLDZCQUE2QiwwQkFBbUI7O0FBRWhELE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLDJMQUEyTCxrQ0FBbUI7QUFDOU0sOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQiwrQkFBK0IseUxBQXlMOztBQUUvUiw4QkFBOEIsMEJBQW1COztBQUVqRCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QyxvT0FBb08sa0NBQW1CO0FBQ3ZQLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIseUJBQXlCLDROQUE0Tjs7QUFFNVQsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQixrQ0FBa0MscU9BQXFPOzs7O0FBSTlVLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLG1HQUFtRyxrQ0FBbUI7QUFDdEgsNkZBQTZGLGtDQUFtQjtBQUNoSCw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLHlCQUF5QixxRkFBcUY7O0FBRXJMLG9IQUFvSCxrQ0FBbUI7Ozs7OztBQU12STs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksS0FBSyxFQUFFLFlBQVk7QUFDdkI7QUFDQSw2QkFBNkIsMEJBQW1COztBQUVoRCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QywyTEFBMkwsa0NBQW1CO0FBQzlNLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIseUJBQXlCLG1MQUFtTDs7QUFFblIsOEJBQThCLDBCQUFtQjs7QUFFakQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsb09BQW9PLGtDQUFtQjtBQUN2UCw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLHlCQUF5Qiw0TkFBNE47O0FBRTVULDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsa0NBQWtDLHFPQUFxTzs7OztBQUk5VSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6QyxtR0FBbUcsa0NBQW1CO0FBQ3RILDZGQUE2RixrQ0FBbUI7QUFDaEgsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQix5QkFBeUIscUZBQXFGOztBQUVyTCxvSEFBb0gsa0NBQW1COzs7Ozs7QUFNdkk7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLEtBQUssRUFBRSxZQUFZO0FBQ3ZCO0FBQ0EsNkJBQTZCLDBCQUFtQjs7QUFFaEQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsMkxBQTJMLGtDQUFtQjtBQUM5TSw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLHlCQUF5QixtTEFBbUw7O0FBRW5SLDhCQUE4QiwwQkFBbUI7O0FBRWpELE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLG9PQUFvTyxrQ0FBbUI7QUFDdlAsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQix5QkFBeUIsNE5BQTROOztBQUU1VCw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLGtDQUFrQyxxT0FBcU87Ozs7QUFJOVUsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsdUdBQXVHLGtDQUFtQjtBQUMxSCxpR0FBaUcsa0NBQW1CO0FBQ3BILDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsb0NBQW9DLG9HQUFvRzs7QUFFL00sb0hBQW9ILGtDQUFtQjs7Ozs7O0FBTXZJOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSSxLQUFLLEVBQUUsWUFBWTtBQUN2QjtBQUNBLDZCQUE2QiwwQkFBbUI7O0FBRWhELE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLCtMQUErTCxrQ0FBbUI7QUFDbE4sOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQixvQ0FBb0Msa01BQWtNOztBQUU3Uyw4QkFBOEIsMEJBQW1COztBQUVqRCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6Qyx3T0FBd08sa0NBQW1CO0FBQzNQLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIseUJBQXlCLGdPQUFnTzs7QUFFaFUsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQixrQ0FBa0MseU9BQXlPOzs7O0FBSWxWLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLGlHQUFpRyxrQ0FBbUI7QUFDcEgsMkZBQTJGLGtDQUFtQjtBQUM5Ryw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLCtCQUErQix5RkFBeUY7O0FBRS9MLG9IQUFvSCxrQ0FBbUI7Ozs7OztBQU12STs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksS0FBSyxFQUFFLFlBQVk7QUFDdkI7QUFDQSw2QkFBNkIsMEJBQW1COztBQUVoRCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6Qyx5TEFBeUwsa0NBQW1CO0FBQzVNLDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsK0JBQStCLHVMQUF1TDs7QUFFN1IsOEJBQThCLDBCQUFtQjs7QUFFakQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsa09BQWtPLGtDQUFtQjtBQUNyUCw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLHlCQUF5QiwwTkFBME47O0FBRTFULDhCQUE4QixrQ0FBbUIsR0FBRywwQkFBbUIsa0NBQWtDLG1PQUFtTzs7OztBQUk1VSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMEJBQW1CLEVBQUUsa0NBQW1COztBQUVoRTtBQUNBLGtDQUFtQixHQUFHLDBCQUFtQjtBQUN6Qyx1R0FBdUcsa0NBQW1CO0FBQzFILGlHQUFpRyxrQ0FBbUI7QUFDcEgsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQiw2QkFBNkIsNkZBQTZGOztBQUVqTSxvSEFBb0gsa0NBQW1COzs7Ozs7QUFNdkk7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLEtBQUssRUFBRSxZQUFZO0FBQ3ZCO0FBQ0EsNkJBQTZCLDBCQUFtQjs7QUFFaEQsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUFtQixFQUFFLGtDQUFtQjs7QUFFaEU7QUFDQSxrQ0FBbUIsR0FBRywwQkFBbUI7QUFDekMsK0xBQStMLGtDQUFtQjtBQUNsTiw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLDZCQUE2QiwyTEFBMkw7O0FBRS9SLDhCQUE4QiwwQkFBbUI7O0FBRWpELE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBbUIsRUFBRSxrQ0FBbUI7O0FBRWhFO0FBQ0Esa0NBQW1CLEdBQUcsMEJBQW1CO0FBQ3pDLHdPQUF3TyxrQ0FBbUI7QUFDM1AsOEJBQThCLGtDQUFtQixHQUFHLDBCQUFtQix5QkFBeUIsZ09BQWdPOztBQUVoVSw4QkFBOEIsa0NBQW1CLEdBQUcsMEJBQW1CLGtDQUFrQyx5T0FBeU87Ozs7QUFJbFYsT0FBTzs7QUFFUDtBQUNBO0FBQ0EsaUJBQWlCLDZEQUE2RDtBQUM5RTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsT0FBTzs7QUFFUCxVQUFVO0FBQ1YsQ0FBQztBQUNEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3N1cnZleS12dWUvc3VydmV5LXZ1ZS5qcz9mOWJlIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogc3VydmV5anMgLSBTdXJ2ZXkgSmF2YVNjcmlwdCBsaWJyYXJ5IHYxLjkuMTEwXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUtMjAyMyBEZXZzb2Z0IEJhbHRpYyBPw5wgIC0gaHR0cDovL3N1cnZleWpzLmlvL1xuICogTGljZW5zZTogTUlUIChodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocClcbiAqL1xuKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwidnVlXCIpKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFwic3VydmV5LXZ1ZVwiLCBbXCJ2dWVcIl0sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wic3VydmV5LXZ1ZVwiXSA9IGZhY3RvcnkocmVxdWlyZShcInZ1ZVwiKSk7XG5cdGVsc2Vcblx0XHRyb290W1wiU3VydmV5XCJdID0gZmFjdG9yeShyb290W1wiVnVlXCJdKTtcbn0pKHRoaXMsIGZ1bmN0aW9uKF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfdnVlX18pIHtcbnJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwXG4vKioqKioqLyBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4vKioqKioqLyBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4vKioqKioqLyBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbi8qKioqKiovIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuLyoqKioqKi8gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbi8qKioqKiovIFx0XHRcdGk6IG1vZHVsZUlkLFxuLyoqKioqKi8gXHRcdFx0bDogZmFsc2UsXG4vKioqKioqLyBcdFx0XHRleHBvcnRzOiB7fVxuLyoqKioqKi8gXHRcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuLyoqKioqKi8gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4vKioqKioqLyBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuLyoqKioqKi8gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbi8qKioqKiovIFx0fVxuLyoqKioqKi9cbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuLyoqKioqKi8gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbi8qKioqKiovIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuLyoqKioqKi8gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3Rcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4vKioqKioqLyBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuLyoqKioqKi8gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3Rcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4vKioqKioqLyBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbi8qKioqKiovIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4vKioqKioqLyBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbi8qKioqKiovIFx0XHRyZXR1cm4gbnM7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbi8qKioqKiovIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbi8qKioqKiovIFx0XHRyZXR1cm4gZ2V0dGVyO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG4vKioqKioqL1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vKioqKioqLyBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IFwiLi9zcmMvZW50cmllcy92dWUudHNcIik7XG4vKioqKioqLyB9KVxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKioqKiovICh7XG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvc2lnbmF0dXJlX3BhZC9kaXN0L3NpZ25hdHVyZV9wYWQuanNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvc2lnbmF0dXJlX3BhZC9kaXN0L3NpZ25hdHVyZV9wYWQuanMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogZGVmYXVsdCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJkZWZhdWx0XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU2lnbmF0dXJlUGFkOyB9KTtcbi8qIVxuICogU2lnbmF0dXJlIFBhZCB2NC4xLjYgfCBodHRwczovL2dpdGh1Yi5jb20vc3ppbWVrL3NpZ25hdHVyZV9wYWRcbiAqIChjKSAyMDIzIFN6eW1vbiBOb3dhayB8IFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxuICovXG5cbmNsYXNzIFBvaW50IHtcbiAgICBjb25zdHJ1Y3Rvcih4LCB5LCBwcmVzc3VyZSwgdGltZSkge1xuICAgICAgICBpZiAoaXNOYU4oeCkgfHwgaXNOYU4oeSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUG9pbnQgaXMgaW52YWxpZDogKCR7eH0sICR7eX0pYCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy54ID0gK3g7XG4gICAgICAgIHRoaXMueSA9ICt5O1xuICAgICAgICB0aGlzLnByZXNzdXJlID0gcHJlc3N1cmUgfHwgMDtcbiAgICAgICAgdGhpcy50aW1lID0gdGltZSB8fCBEYXRlLm5vdygpO1xuICAgIH1cbiAgICBkaXN0YW5jZVRvKHN0YXJ0KSB7XG4gICAgICAgIHJldHVybiBNYXRoLnNxcnQoTWF0aC5wb3codGhpcy54IC0gc3RhcnQueCwgMikgKyBNYXRoLnBvdyh0aGlzLnkgLSBzdGFydC55LCAyKSk7XG4gICAgfVxuICAgIGVxdWFscyhvdGhlcikge1xuICAgICAgICByZXR1cm4gKHRoaXMueCA9PT0gb3RoZXIueCAmJlxuICAgICAgICAgICAgdGhpcy55ID09PSBvdGhlci55ICYmXG4gICAgICAgICAgICB0aGlzLnByZXNzdXJlID09PSBvdGhlci5wcmVzc3VyZSAmJlxuICAgICAgICAgICAgdGhpcy50aW1lID09PSBvdGhlci50aW1lKTtcbiAgICB9XG4gICAgdmVsb2NpdHlGcm9tKHN0YXJ0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRpbWUgIT09IHN0YXJ0LnRpbWVcbiAgICAgICAgICAgID8gdGhpcy5kaXN0YW5jZVRvKHN0YXJ0KSAvICh0aGlzLnRpbWUgLSBzdGFydC50aW1lKVxuICAgICAgICAgICAgOiAwO1xuICAgIH1cbn1cblxuY2xhc3MgQmV6aWVyIHtcbiAgICBjb25zdHJ1Y3RvcihzdGFydFBvaW50LCBjb250cm9sMiwgY29udHJvbDEsIGVuZFBvaW50LCBzdGFydFdpZHRoLCBlbmRXaWR0aCkge1xuICAgICAgICB0aGlzLnN0YXJ0UG9pbnQgPSBzdGFydFBvaW50O1xuICAgICAgICB0aGlzLmNvbnRyb2wyID0gY29udHJvbDI7XG4gICAgICAgIHRoaXMuY29udHJvbDEgPSBjb250cm9sMTtcbiAgICAgICAgdGhpcy5lbmRQb2ludCA9IGVuZFBvaW50O1xuICAgICAgICB0aGlzLnN0YXJ0V2lkdGggPSBzdGFydFdpZHRoO1xuICAgICAgICB0aGlzLmVuZFdpZHRoID0gZW5kV2lkdGg7XG4gICAgfVxuICAgIHN0YXRpYyBmcm9tUG9pbnRzKHBvaW50cywgd2lkdGhzKSB7XG4gICAgICAgIGNvbnN0IGMyID0gdGhpcy5jYWxjdWxhdGVDb250cm9sUG9pbnRzKHBvaW50c1swXSwgcG9pbnRzWzFdLCBwb2ludHNbMl0pLmMyO1xuICAgICAgICBjb25zdCBjMyA9IHRoaXMuY2FsY3VsYXRlQ29udHJvbFBvaW50cyhwb2ludHNbMV0sIHBvaW50c1syXSwgcG9pbnRzWzNdKS5jMTtcbiAgICAgICAgcmV0dXJuIG5ldyBCZXppZXIocG9pbnRzWzFdLCBjMiwgYzMsIHBvaW50c1syXSwgd2lkdGhzLnN0YXJ0LCB3aWR0aHMuZW5kKTtcbiAgICB9XG4gICAgc3RhdGljIGNhbGN1bGF0ZUNvbnRyb2xQb2ludHMoczEsIHMyLCBzMykge1xuICAgICAgICBjb25zdCBkeDEgPSBzMS54IC0gczIueDtcbiAgICAgICAgY29uc3QgZHkxID0gczEueSAtIHMyLnk7XG4gICAgICAgIGNvbnN0IGR4MiA9IHMyLnggLSBzMy54O1xuICAgICAgICBjb25zdCBkeTIgPSBzMi55IC0gczMueTtcbiAgICAgICAgY29uc3QgbTEgPSB7IHg6IChzMS54ICsgczIueCkgLyAyLjAsIHk6IChzMS55ICsgczIueSkgLyAyLjAgfTtcbiAgICAgICAgY29uc3QgbTIgPSB7IHg6IChzMi54ICsgczMueCkgLyAyLjAsIHk6IChzMi55ICsgczMueSkgLyAyLjAgfTtcbiAgICAgICAgY29uc3QgbDEgPSBNYXRoLnNxcnQoZHgxICogZHgxICsgZHkxICogZHkxKTtcbiAgICAgICAgY29uc3QgbDIgPSBNYXRoLnNxcnQoZHgyICogZHgyICsgZHkyICogZHkyKTtcbiAgICAgICAgY29uc3QgZHhtID0gbTEueCAtIG0yLng7XG4gICAgICAgIGNvbnN0IGR5bSA9IG0xLnkgLSBtMi55O1xuICAgICAgICBjb25zdCBrID0gbDIgLyAobDEgKyBsMik7XG4gICAgICAgIGNvbnN0IGNtID0geyB4OiBtMi54ICsgZHhtICogaywgeTogbTIueSArIGR5bSAqIGsgfTtcbiAgICAgICAgY29uc3QgdHggPSBzMi54IC0gY20ueDtcbiAgICAgICAgY29uc3QgdHkgPSBzMi55IC0gY20ueTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGMxOiBuZXcgUG9pbnQobTEueCArIHR4LCBtMS55ICsgdHkpLFxuICAgICAgICAgICAgYzI6IG5ldyBQb2ludChtMi54ICsgdHgsIG0yLnkgKyB0eSksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGxlbmd0aCgpIHtcbiAgICAgICAgY29uc3Qgc3RlcHMgPSAxMDtcbiAgICAgICAgbGV0IGxlbmd0aCA9IDA7XG4gICAgICAgIGxldCBweDtcbiAgICAgICAgbGV0IHB5O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8PSBzdGVwczsgaSArPSAxKSB7XG4gICAgICAgICAgICBjb25zdCB0ID0gaSAvIHN0ZXBzO1xuICAgICAgICAgICAgY29uc3QgY3ggPSB0aGlzLnBvaW50KHQsIHRoaXMuc3RhcnRQb2ludC54LCB0aGlzLmNvbnRyb2wxLngsIHRoaXMuY29udHJvbDIueCwgdGhpcy5lbmRQb2ludC54KTtcbiAgICAgICAgICAgIGNvbnN0IGN5ID0gdGhpcy5wb2ludCh0LCB0aGlzLnN0YXJ0UG9pbnQueSwgdGhpcy5jb250cm9sMS55LCB0aGlzLmNvbnRyb2wyLnksIHRoaXMuZW5kUG9pbnQueSk7XG4gICAgICAgICAgICBpZiAoaSA+IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCB4ZGlmZiA9IGN4IC0gcHg7XG4gICAgICAgICAgICAgICAgY29uc3QgeWRpZmYgPSBjeSAtIHB5O1xuICAgICAgICAgICAgICAgIGxlbmd0aCArPSBNYXRoLnNxcnQoeGRpZmYgKiB4ZGlmZiArIHlkaWZmICogeWRpZmYpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcHggPSBjeDtcbiAgICAgICAgICAgIHB5ID0gY3k7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxlbmd0aDtcbiAgICB9XG4gICAgcG9pbnQodCwgc3RhcnQsIGMxLCBjMiwgZW5kKSB7XG4gICAgICAgIHJldHVybiAoc3RhcnQgKiAoMS4wIC0gdCkgKiAoMS4wIC0gdCkgKiAoMS4wIC0gdCkpXG4gICAgICAgICAgICArICgzLjAgKiBjMSAqICgxLjAgLSB0KSAqICgxLjAgLSB0KSAqIHQpXG4gICAgICAgICAgICArICgzLjAgKiBjMiAqICgxLjAgLSB0KSAqIHQgKiB0KVxuICAgICAgICAgICAgKyAoZW5kICogdCAqIHQgKiB0KTtcbiAgICB9XG59XG5cbmNsYXNzIFNpZ25hdHVyZUV2ZW50VGFyZ2V0IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuX2V0ID0gbmV3IEV2ZW50VGFyZ2V0KCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLl9ldCA9IGRvY3VtZW50O1xuICAgICAgICB9XG4gICAgfVxuICAgIGFkZEV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5fZXQuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lciwgb3B0aW9ucyk7XG4gICAgfVxuICAgIGRpc3BhdGNoRXZlbnQoZXZlbnQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V0LmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuICAgIH1cbiAgICByZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGNhbGxiYWNrLCBvcHRpb25zKSB7XG4gICAgICAgIHRoaXMuX2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgY2FsbGJhY2ssIG9wdGlvbnMpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gdGhyb3R0bGUoZm4sIHdhaXQgPSAyNTApIHtcbiAgICBsZXQgcHJldmlvdXMgPSAwO1xuICAgIGxldCB0aW1lb3V0ID0gbnVsbDtcbiAgICBsZXQgcmVzdWx0O1xuICAgIGxldCBzdG9yZWRDb250ZXh0O1xuICAgIGxldCBzdG9yZWRBcmdzO1xuICAgIGNvbnN0IGxhdGVyID0gKCkgPT4ge1xuICAgICAgICBwcmV2aW91cyA9IERhdGUubm93KCk7XG4gICAgICAgIHRpbWVvdXQgPSBudWxsO1xuICAgICAgICByZXN1bHQgPSBmbi5hcHBseShzdG9yZWRDb250ZXh0LCBzdG9yZWRBcmdzKTtcbiAgICAgICAgaWYgKCF0aW1lb3V0KSB7XG4gICAgICAgICAgICBzdG9yZWRDb250ZXh0ID0gbnVsbDtcbiAgICAgICAgICAgIHN0b3JlZEFyZ3MgPSBbXTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHdyYXBwZXIoLi4uYXJncykge1xuICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgICBjb25zdCByZW1haW5pbmcgPSB3YWl0IC0gKG5vdyAtIHByZXZpb3VzKTtcbiAgICAgICAgc3RvcmVkQ29udGV4dCA9IHRoaXM7XG4gICAgICAgIHN0b3JlZEFyZ3MgPSBhcmdzO1xuICAgICAgICBpZiAocmVtYWluaW5nIDw9IDAgfHwgcmVtYWluaW5nID4gd2FpdCkge1xuICAgICAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwcmV2aW91cyA9IG5vdztcbiAgICAgICAgICAgIHJlc3VsdCA9IGZuLmFwcGx5KHN0b3JlZENvbnRleHQsIHN0b3JlZEFyZ3MpO1xuICAgICAgICAgICAgaWYgKCF0aW1lb3V0KSB7XG4gICAgICAgICAgICAgICAgc3RvcmVkQ29udGV4dCA9IG51bGw7XG4gICAgICAgICAgICAgICAgc3RvcmVkQXJncyA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCF0aW1lb3V0KSB7XG4gICAgICAgICAgICB0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQobGF0ZXIsIHJlbWFpbmluZyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xufVxuXG5jbGFzcyBTaWduYXR1cmVQYWQgZXh0ZW5kcyBTaWduYXR1cmVFdmVudFRhcmdldCB7XG4gICAgY29uc3RydWN0b3IoY2FudmFzLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5jYW52YXMgPSBjYW52YXM7XG4gICAgICAgIHRoaXMuX2RyYXduaW5nU3Ryb2tlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2lzRW1wdHkgPSB0cnVlO1xuICAgICAgICB0aGlzLl9sYXN0UG9pbnRzID0gW107XG4gICAgICAgIHRoaXMuX2RhdGEgPSBbXTtcbiAgICAgICAgdGhpcy5fbGFzdFZlbG9jaXR5ID0gMDtcbiAgICAgICAgdGhpcy5fbGFzdFdpZHRoID0gMDtcbiAgICAgICAgdGhpcy5faGFuZGxlTW91c2VEb3duID0gKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBpZiAoZXZlbnQuYnV0dG9ucyA9PT0gMSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2RyYXduaW5nU3Ryb2tlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdHJva2VCZWdpbihldmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuX2hhbmRsZU1vdXNlTW92ZSA9IChldmVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2RyYXduaW5nU3Ryb2tlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3Ryb2tlTW92ZVVwZGF0ZShldmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuX2hhbmRsZU1vdXNlVXAgPSAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGlmIChldmVudC5idXR0b25zID09PSAxICYmIHRoaXMuX2RyYXduaW5nU3Ryb2tlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZHJhd25pbmdTdHJva2UgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdHJva2VFbmQoZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLl9oYW5kbGVUb3VjaFN0YXJ0ID0gKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBpZiAoZXZlbnQuY2FuY2VsYWJsZSkge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXZlbnQudGFyZ2V0VG91Y2hlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0b3VjaCA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdO1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0cm9rZUJlZ2luKHRvdWNoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5faGFuZGxlVG91Y2hNb3ZlID0gKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBpZiAoZXZlbnQuY2FuY2VsYWJsZSkge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB0b3VjaCA9IGV2ZW50LnRhcmdldFRvdWNoZXNbMF07XG4gICAgICAgICAgICB0aGlzLl9zdHJva2VNb3ZlVXBkYXRlKHRvdWNoKTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5faGFuZGxlVG91Y2hFbmQgPSAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHdhc0NhbnZhc1RvdWNoZWQgPSBldmVudC50YXJnZXQgPT09IHRoaXMuY2FudmFzO1xuICAgICAgICAgICAgaWYgKHdhc0NhbnZhc1RvdWNoZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQuY2FuY2VsYWJsZSkge1xuICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCB0b3VjaCA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdO1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0cm9rZUVuZCh0b3VjaCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuX2hhbmRsZVBvaW50ZXJTdGFydCA9IChldmVudCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fZHJhd25pbmdTdHJva2UgPSB0cnVlO1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHRoaXMuX3N0cm9rZUJlZ2luKGV2ZW50KTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5faGFuZGxlUG9pbnRlck1vdmUgPSAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9kcmF3bmluZ1N0cm9rZSkge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3Ryb2tlTW92ZVVwZGF0ZShldmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuX2hhbmRsZVBvaW50ZXJFbmQgPSAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9kcmF3bmluZ1N0cm9rZSkge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZHJhd25pbmdTdHJva2UgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdHJva2VFbmQoZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnZlbG9jaXR5RmlsdGVyV2VpZ2h0ID0gb3B0aW9ucy52ZWxvY2l0eUZpbHRlcldlaWdodCB8fCAwLjc7XG4gICAgICAgIHRoaXMubWluV2lkdGggPSBvcHRpb25zLm1pbldpZHRoIHx8IDAuNTtcbiAgICAgICAgdGhpcy5tYXhXaWR0aCA9IG9wdGlvbnMubWF4V2lkdGggfHwgMi41O1xuICAgICAgICB0aGlzLnRocm90dGxlID0gKCd0aHJvdHRsZScgaW4gb3B0aW9ucyA/IG9wdGlvbnMudGhyb3R0bGUgOiAxNik7XG4gICAgICAgIHRoaXMubWluRGlzdGFuY2UgPSAoJ21pbkRpc3RhbmNlJyBpbiBvcHRpb25zID8gb3B0aW9ucy5taW5EaXN0YW5jZSA6IDUpO1xuICAgICAgICB0aGlzLmRvdFNpemUgPSBvcHRpb25zLmRvdFNpemUgfHwgMDtcbiAgICAgICAgdGhpcy5wZW5Db2xvciA9IG9wdGlvbnMucGVuQ29sb3IgfHwgJ2JsYWNrJztcbiAgICAgICAgdGhpcy5iYWNrZ3JvdW5kQ29sb3IgPSBvcHRpb25zLmJhY2tncm91bmRDb2xvciB8fCAncmdiYSgwLDAsMCwwKSc7XG4gICAgICAgIHRoaXMuY29tcG9zaXRlT3BlcmF0aW9uID0gb3B0aW9ucy5jb21wb3NpdGVPcGVyYXRpb24gfHwgJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgdGhpcy5fc3Ryb2tlTW92ZVVwZGF0ZSA9IHRoaXMudGhyb3R0bGVcbiAgICAgICAgICAgID8gdGhyb3R0bGUoU2lnbmF0dXJlUGFkLnByb3RvdHlwZS5fc3Ryb2tlVXBkYXRlLCB0aGlzLnRocm90dGxlKVxuICAgICAgICAgICAgOiBTaWduYXR1cmVQYWQucHJvdG90eXBlLl9zdHJva2VVcGRhdGU7XG4gICAgICAgIHRoaXMuX2N0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgICB0aGlzLmNsZWFyKCk7XG4gICAgICAgIHRoaXMub24oKTtcbiAgICB9XG4gICAgY2xlYXIoKSB7XG4gICAgICAgIGNvbnN0IHsgX2N0eDogY3R4LCBjYW52YXMgfSA9IHRoaXM7XG4gICAgICAgIGN0eC5maWxsU3R5bGUgPSB0aGlzLmJhY2tncm91bmRDb2xvcjtcbiAgICAgICAgY3R4LmNsZWFyUmVjdCgwLCAwLCBjYW52YXMud2lkdGgsIGNhbnZhcy5oZWlnaHQpO1xuICAgICAgICBjdHguZmlsbFJlY3QoMCwgMCwgY2FudmFzLndpZHRoLCBjYW52YXMuaGVpZ2h0KTtcbiAgICAgICAgdGhpcy5fZGF0YSA9IFtdO1xuICAgICAgICB0aGlzLl9yZXNldCh0aGlzLl9nZXRQb2ludEdyb3VwT3B0aW9ucygpKTtcbiAgICAgICAgdGhpcy5faXNFbXB0eSA9IHRydWU7XG4gICAgfVxuICAgIGZyb21EYXRhVVJMKGRhdGFVcmwsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW1hZ2UgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgICAgIGNvbnN0IHJhdGlvID0gb3B0aW9ucy5yYXRpbyB8fCB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyB8fCAxO1xuICAgICAgICAgICAgY29uc3Qgd2lkdGggPSBvcHRpb25zLndpZHRoIHx8IHRoaXMuY2FudmFzLndpZHRoIC8gcmF0aW87XG4gICAgICAgICAgICBjb25zdCBoZWlnaHQgPSBvcHRpb25zLmhlaWdodCB8fCB0aGlzLmNhbnZhcy5oZWlnaHQgLyByYXRpbztcbiAgICAgICAgICAgIGNvbnN0IHhPZmZzZXQgPSBvcHRpb25zLnhPZmZzZXQgfHwgMDtcbiAgICAgICAgICAgIGNvbnN0IHlPZmZzZXQgPSBvcHRpb25zLnlPZmZzZXQgfHwgMDtcbiAgICAgICAgICAgIHRoaXMuX3Jlc2V0KHRoaXMuX2dldFBvaW50R3JvdXBPcHRpb25zKCkpO1xuICAgICAgICAgICAgaW1hZ2Uub25sb2FkID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2N0eC5kcmF3SW1hZ2UoaW1hZ2UsIHhPZmZzZXQsIHlPZmZzZXQsIHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpbWFnZS5vbmVycm9yID0gKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpbWFnZS5jcm9zc09yaWdpbiA9ICdhbm9ueW1vdXMnO1xuICAgICAgICAgICAgaW1hZ2Uuc3JjID0gZGF0YVVybDtcbiAgICAgICAgICAgIHRoaXMuX2lzRW1wdHkgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRvRGF0YVVSTCh0eXBlID0gJ2ltYWdlL3BuZycsIGVuY29kZXJPcHRpb25zKSB7XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnaW1hZ2Uvc3ZnK3htbCc6XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBlbmNvZGVyT3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgZW5jb2Rlck9wdGlvbnMgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBgZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCwke2J0b2EodGhpcy50b1NWRyhlbmNvZGVyT3B0aW9ucykpfWA7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZW5jb2Rlck9wdGlvbnMgIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgICAgIGVuY29kZXJPcHRpb25zID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jYW52YXMudG9EYXRhVVJMKHR5cGUsIGVuY29kZXJPcHRpb25zKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBvbigpIHtcbiAgICAgICAgdGhpcy5jYW52YXMuc3R5bGUudG91Y2hBY3Rpb24gPSAnbm9uZSc7XG4gICAgICAgIHRoaXMuY2FudmFzLnN0eWxlLm1zVG91Y2hBY3Rpb24gPSAnbm9uZSc7XG4gICAgICAgIHRoaXMuY2FudmFzLnN0eWxlLnVzZXJTZWxlY3QgPSAnbm9uZSc7XG4gICAgICAgIGNvbnN0IGlzSU9TID0gL01hY2ludG9zaC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSAmJiAnb250b3VjaHN0YXJ0JyBpbiBkb2N1bWVudDtcbiAgICAgICAgaWYgKHdpbmRvdy5Qb2ludGVyRXZlbnQgJiYgIWlzSU9TKSB7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVQb2ludGVyRXZlbnRzKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVNb3VzZUV2ZW50cygpO1xuICAgICAgICAgICAgaWYgKCdvbnRvdWNoc3RhcnQnIGluIHdpbmRvdykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2hhbmRsZVRvdWNoRXZlbnRzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgb2ZmKCkge1xuICAgICAgICB0aGlzLmNhbnZhcy5zdHlsZS50b3VjaEFjdGlvbiA9ICdhdXRvJztcbiAgICAgICAgdGhpcy5jYW52YXMuc3R5bGUubXNUb3VjaEFjdGlvbiA9ICdhdXRvJztcbiAgICAgICAgdGhpcy5jYW52YXMuc3R5bGUudXNlclNlbGVjdCA9ICdhdXRvJztcbiAgICAgICAgdGhpcy5jYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9pbnRlcmRvd24nLCB0aGlzLl9oYW5kbGVQb2ludGVyU3RhcnQpO1xuICAgICAgICB0aGlzLmNhbnZhcy5yZW1vdmVFdmVudExpc3RlbmVyKCdwb2ludGVybW92ZScsIHRoaXMuX2hhbmRsZVBvaW50ZXJNb3ZlKTtcbiAgICAgICAgdGhpcy5jYW52YXMub3duZXJEb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdwb2ludGVydXAnLCB0aGlzLl9oYW5kbGVQb2ludGVyRW5kKTtcbiAgICAgICAgdGhpcy5jYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5faGFuZGxlTW91c2VEb3duKTtcbiAgICAgICAgdGhpcy5jYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5faGFuZGxlTW91c2VNb3ZlKTtcbiAgICAgICAgdGhpcy5jYW52YXMub3duZXJEb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5faGFuZGxlTW91c2VVcCk7XG4gICAgICAgIHRoaXMuY2FudmFzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCB0aGlzLl9oYW5kbGVUb3VjaFN0YXJ0KTtcbiAgICAgICAgdGhpcy5jYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgdGhpcy5faGFuZGxlVG91Y2hNb3ZlKTtcbiAgICAgICAgdGhpcy5jYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCB0aGlzLl9oYW5kbGVUb3VjaEVuZCk7XG4gICAgfVxuICAgIGlzRW1wdHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc0VtcHR5O1xuICAgIH1cbiAgICBmcm9tRGF0YShwb2ludEdyb3VwcywgeyBjbGVhciA9IHRydWUgfSA9IHt9KSB7XG4gICAgICAgIGlmIChjbGVhcikge1xuICAgICAgICAgICAgdGhpcy5jbGVhcigpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2Zyb21EYXRhKHBvaW50R3JvdXBzLCB0aGlzLl9kcmF3Q3VydmUuYmluZCh0aGlzKSwgdGhpcy5fZHJhd0RvdC5iaW5kKHRoaXMpKTtcbiAgICAgICAgdGhpcy5fZGF0YSA9IHRoaXMuX2RhdGEuY29uY2F0KHBvaW50R3JvdXBzKTtcbiAgICB9XG4gICAgdG9EYXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YTtcbiAgICB9XG4gICAgX2dldFBvaW50R3JvdXBPcHRpb25zKGdyb3VwKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwZW5Db2xvcjogZ3JvdXAgJiYgJ3BlbkNvbG9yJyBpbiBncm91cCA/IGdyb3VwLnBlbkNvbG9yIDogdGhpcy5wZW5Db2xvcixcbiAgICAgICAgICAgIGRvdFNpemU6IGdyb3VwICYmICdkb3RTaXplJyBpbiBncm91cCA/IGdyb3VwLmRvdFNpemUgOiB0aGlzLmRvdFNpemUsXG4gICAgICAgICAgICBtaW5XaWR0aDogZ3JvdXAgJiYgJ21pbldpZHRoJyBpbiBncm91cCA/IGdyb3VwLm1pbldpZHRoIDogdGhpcy5taW5XaWR0aCxcbiAgICAgICAgICAgIG1heFdpZHRoOiBncm91cCAmJiAnbWF4V2lkdGgnIGluIGdyb3VwID8gZ3JvdXAubWF4V2lkdGggOiB0aGlzLm1heFdpZHRoLFxuICAgICAgICAgICAgdmVsb2NpdHlGaWx0ZXJXZWlnaHQ6IGdyb3VwICYmICd2ZWxvY2l0eUZpbHRlcldlaWdodCcgaW4gZ3JvdXBcbiAgICAgICAgICAgICAgICA/IGdyb3VwLnZlbG9jaXR5RmlsdGVyV2VpZ2h0XG4gICAgICAgICAgICAgICAgOiB0aGlzLnZlbG9jaXR5RmlsdGVyV2VpZ2h0LFxuICAgICAgICAgICAgY29tcG9zaXRlT3BlcmF0aW9uOiBncm91cCAmJiAnY29tcG9zaXRlT3BlcmF0aW9uJyBpbiBncm91cFxuICAgICAgICAgICAgICAgID8gZ3JvdXAuY29tcG9zaXRlT3BlcmF0aW9uXG4gICAgICAgICAgICAgICAgOiB0aGlzLmNvbXBvc2l0ZU9wZXJhdGlvbixcbiAgICAgICAgfTtcbiAgICB9XG4gICAgX3N0cm9rZUJlZ2luKGV2ZW50KSB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2JlZ2luU3Ryb2tlJywgeyBkZXRhaWw6IGV2ZW50IH0pKTtcbiAgICAgICAgY29uc3QgcG9pbnRHcm91cE9wdGlvbnMgPSB0aGlzLl9nZXRQb2ludEdyb3VwT3B0aW9ucygpO1xuICAgICAgICBjb25zdCBuZXdQb2ludEdyb3VwID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBwb2ludEdyb3VwT3B0aW9ucyksIHsgcG9pbnRzOiBbXSB9KTtcbiAgICAgICAgdGhpcy5fZGF0YS5wdXNoKG5ld1BvaW50R3JvdXApO1xuICAgICAgICB0aGlzLl9yZXNldChwb2ludEdyb3VwT3B0aW9ucyk7XG4gICAgICAgIHRoaXMuX3N0cm9rZVVwZGF0ZShldmVudCk7XG4gICAgfVxuICAgIF9zdHJva2VVcGRhdGUoZXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuX2RhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLl9zdHJva2VCZWdpbihldmVudCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnYmVmb3JlVXBkYXRlU3Ryb2tlJywgeyBkZXRhaWw6IGV2ZW50IH0pKTtcbiAgICAgICAgY29uc3QgeCA9IGV2ZW50LmNsaWVudFg7XG4gICAgICAgIGNvbnN0IHkgPSBldmVudC5jbGllbnRZO1xuICAgICAgICBjb25zdCBwcmVzc3VyZSA9IGV2ZW50LnByZXNzdXJlICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gZXZlbnQucHJlc3N1cmVcbiAgICAgICAgICAgIDogZXZlbnQuZm9yY2UgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgID8gZXZlbnQuZm9yY2VcbiAgICAgICAgICAgICAgICA6IDA7XG4gICAgICAgIGNvbnN0IHBvaW50ID0gdGhpcy5fY3JlYXRlUG9pbnQoeCwgeSwgcHJlc3N1cmUpO1xuICAgICAgICBjb25zdCBsYXN0UG9pbnRHcm91cCA9IHRoaXMuX2RhdGFbdGhpcy5fZGF0YS5sZW5ndGggLSAxXTtcbiAgICAgICAgY29uc3QgbGFzdFBvaW50cyA9IGxhc3RQb2ludEdyb3VwLnBvaW50cztcbiAgICAgICAgY29uc3QgbGFzdFBvaW50ID0gbGFzdFBvaW50cy5sZW5ndGggPiAwICYmIGxhc3RQb2ludHNbbGFzdFBvaW50cy5sZW5ndGggLSAxXTtcbiAgICAgICAgY29uc3QgaXNMYXN0UG9pbnRUb29DbG9zZSA9IGxhc3RQb2ludFxuICAgICAgICAgICAgPyBwb2ludC5kaXN0YW5jZVRvKGxhc3RQb2ludCkgPD0gdGhpcy5taW5EaXN0YW5jZVxuICAgICAgICAgICAgOiBmYWxzZTtcbiAgICAgICAgY29uc3QgcG9pbnRHcm91cE9wdGlvbnMgPSB0aGlzLl9nZXRQb2ludEdyb3VwT3B0aW9ucyhsYXN0UG9pbnRHcm91cCk7XG4gICAgICAgIGlmICghbGFzdFBvaW50IHx8ICEobGFzdFBvaW50ICYmIGlzTGFzdFBvaW50VG9vQ2xvc2UpKSB7XG4gICAgICAgICAgICBjb25zdCBjdXJ2ZSA9IHRoaXMuX2FkZFBvaW50KHBvaW50LCBwb2ludEdyb3VwT3B0aW9ucyk7XG4gICAgICAgICAgICBpZiAoIWxhc3RQb2ludCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2RyYXdEb3QocG9pbnQsIHBvaW50R3JvdXBPcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGN1cnZlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZHJhd0N1cnZlKGN1cnZlLCBwb2ludEdyb3VwT3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsYXN0UG9pbnRzLnB1c2goe1xuICAgICAgICAgICAgICAgIHRpbWU6IHBvaW50LnRpbWUsXG4gICAgICAgICAgICAgICAgeDogcG9pbnQueCxcbiAgICAgICAgICAgICAgICB5OiBwb2ludC55LFxuICAgICAgICAgICAgICAgIHByZXNzdXJlOiBwb2ludC5wcmVzc3VyZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2FmdGVyVXBkYXRlU3Ryb2tlJywgeyBkZXRhaWw6IGV2ZW50IH0pKTtcbiAgICB9XG4gICAgX3N0cm9rZUVuZChldmVudCkge1xuICAgICAgICB0aGlzLl9zdHJva2VVcGRhdGUoZXZlbnQpO1xuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdlbmRTdHJva2UnLCB7IGRldGFpbDogZXZlbnQgfSkpO1xuICAgIH1cbiAgICBfaGFuZGxlUG9pbnRlckV2ZW50cygpIHtcbiAgICAgICAgdGhpcy5fZHJhd25pbmdTdHJva2UgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcmRvd24nLCB0aGlzLl9oYW5kbGVQb2ludGVyU3RhcnQpO1xuICAgICAgICB0aGlzLmNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVybW92ZScsIHRoaXMuX2hhbmRsZVBvaW50ZXJNb3ZlKTtcbiAgICAgICAgdGhpcy5jYW52YXMub3duZXJEb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVydXAnLCB0aGlzLl9oYW5kbGVQb2ludGVyRW5kKTtcbiAgICB9XG4gICAgX2hhbmRsZU1vdXNlRXZlbnRzKCkge1xuICAgICAgICB0aGlzLl9kcmF3bmluZ1N0cm9rZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLl9oYW5kbGVNb3VzZURvd24pO1xuICAgICAgICB0aGlzLmNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLl9oYW5kbGVNb3VzZU1vdmUpO1xuICAgICAgICB0aGlzLmNhbnZhcy5vd25lckRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLl9oYW5kbGVNb3VzZVVwKTtcbiAgICB9XG4gICAgX2hhbmRsZVRvdWNoRXZlbnRzKCkge1xuICAgICAgICB0aGlzLmNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgdGhpcy5faGFuZGxlVG91Y2hTdGFydCk7XG4gICAgICAgIHRoaXMuY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIHRoaXMuX2hhbmRsZVRvdWNoTW92ZSk7XG4gICAgICAgIHRoaXMuY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgdGhpcy5faGFuZGxlVG91Y2hFbmQpO1xuICAgIH1cbiAgICBfcmVzZXQob3B0aW9ucykge1xuICAgICAgICB0aGlzLl9sYXN0UG9pbnRzID0gW107XG4gICAgICAgIHRoaXMuX2xhc3RWZWxvY2l0eSA9IDA7XG4gICAgICAgIHRoaXMuX2xhc3RXaWR0aCA9IChvcHRpb25zLm1pbldpZHRoICsgb3B0aW9ucy5tYXhXaWR0aCkgLyAyO1xuICAgICAgICB0aGlzLl9jdHguZmlsbFN0eWxlID0gb3B0aW9ucy5wZW5Db2xvcjtcbiAgICAgICAgdGhpcy5fY3R4Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cbiAgICBfY3JlYXRlUG9pbnQoeCwgeSwgcHJlc3N1cmUpIHtcbiAgICAgICAgY29uc3QgcmVjdCA9IHRoaXMuY2FudmFzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICByZXR1cm4gbmV3IFBvaW50KHggLSByZWN0LmxlZnQsIHkgLSByZWN0LnRvcCwgcHJlc3N1cmUsIG5ldyBEYXRlKCkuZ2V0VGltZSgpKTtcbiAgICB9XG4gICAgX2FkZFBvaW50KHBvaW50LCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHsgX2xhc3RQb2ludHMgfSA9IHRoaXM7XG4gICAgICAgIF9sYXN0UG9pbnRzLnB1c2gocG9pbnQpO1xuICAgICAgICBpZiAoX2xhc3RQb2ludHMubGVuZ3RoID4gMikge1xuICAgICAgICAgICAgaWYgKF9sYXN0UG9pbnRzLmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgICAgIF9sYXN0UG9pbnRzLnVuc2hpZnQoX2xhc3RQb2ludHNbMF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgd2lkdGhzID0gdGhpcy5fY2FsY3VsYXRlQ3VydmVXaWR0aHMoX2xhc3RQb2ludHNbMV0sIF9sYXN0UG9pbnRzWzJdLCBvcHRpb25zKTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnZlID0gQmV6aWVyLmZyb21Qb2ludHMoX2xhc3RQb2ludHMsIHdpZHRocyk7XG4gICAgICAgICAgICBfbGFzdFBvaW50cy5zaGlmdCgpO1xuICAgICAgICAgICAgcmV0dXJuIGN1cnZlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBfY2FsY3VsYXRlQ3VydmVXaWR0aHMoc3RhcnRQb2ludCwgZW5kUG9pbnQsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgdmVsb2NpdHkgPSBvcHRpb25zLnZlbG9jaXR5RmlsdGVyV2VpZ2h0ICogZW5kUG9pbnQudmVsb2NpdHlGcm9tKHN0YXJ0UG9pbnQpICtcbiAgICAgICAgICAgICgxIC0gb3B0aW9ucy52ZWxvY2l0eUZpbHRlcldlaWdodCkgKiB0aGlzLl9sYXN0VmVsb2NpdHk7XG4gICAgICAgIGNvbnN0IG5ld1dpZHRoID0gdGhpcy5fc3Ryb2tlV2lkdGgodmVsb2NpdHksIG9wdGlvbnMpO1xuICAgICAgICBjb25zdCB3aWR0aHMgPSB7XG4gICAgICAgICAgICBlbmQ6IG5ld1dpZHRoLFxuICAgICAgICAgICAgc3RhcnQ6IHRoaXMuX2xhc3RXaWR0aCxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5fbGFzdFZlbG9jaXR5ID0gdmVsb2NpdHk7XG4gICAgICAgIHRoaXMuX2xhc3RXaWR0aCA9IG5ld1dpZHRoO1xuICAgICAgICByZXR1cm4gd2lkdGhzO1xuICAgIH1cbiAgICBfc3Ryb2tlV2lkdGgodmVsb2NpdHksIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KG9wdGlvbnMubWF4V2lkdGggLyAodmVsb2NpdHkgKyAxKSwgb3B0aW9ucy5taW5XaWR0aCk7XG4gICAgfVxuICAgIF9kcmF3Q3VydmVTZWdtZW50KHgsIHksIHdpZHRoKSB7XG4gICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuX2N0eDtcbiAgICAgICAgY3R4Lm1vdmVUbyh4LCB5KTtcbiAgICAgICAgY3R4LmFyYyh4LCB5LCB3aWR0aCwgMCwgMiAqIE1hdGguUEksIGZhbHNlKTtcbiAgICAgICAgdGhpcy5faXNFbXB0eSA9IGZhbHNlO1xuICAgIH1cbiAgICBfZHJhd0N1cnZlKGN1cnZlLCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuX2N0eDtcbiAgICAgICAgY29uc3Qgd2lkdGhEZWx0YSA9IGN1cnZlLmVuZFdpZHRoIC0gY3VydmUuc3RhcnRXaWR0aDtcbiAgICAgICAgY29uc3QgZHJhd1N0ZXBzID0gTWF0aC5jZWlsKGN1cnZlLmxlbmd0aCgpKSAqIDI7XG4gICAgICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICAgICAgY3R4LmZpbGxTdHlsZSA9IG9wdGlvbnMucGVuQ29sb3I7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZHJhd1N0ZXBzOyBpICs9IDEpIHtcbiAgICAgICAgICAgIGNvbnN0IHQgPSBpIC8gZHJhd1N0ZXBzO1xuICAgICAgICAgICAgY29uc3QgdHQgPSB0ICogdDtcbiAgICAgICAgICAgIGNvbnN0IHR0dCA9IHR0ICogdDtcbiAgICAgICAgICAgIGNvbnN0IHUgPSAxIC0gdDtcbiAgICAgICAgICAgIGNvbnN0IHV1ID0gdSAqIHU7XG4gICAgICAgICAgICBjb25zdCB1dXUgPSB1dSAqIHU7XG4gICAgICAgICAgICBsZXQgeCA9IHV1dSAqIGN1cnZlLnN0YXJ0UG9pbnQueDtcbiAgICAgICAgICAgIHggKz0gMyAqIHV1ICogdCAqIGN1cnZlLmNvbnRyb2wxLng7XG4gICAgICAgICAgICB4ICs9IDMgKiB1ICogdHQgKiBjdXJ2ZS5jb250cm9sMi54O1xuICAgICAgICAgICAgeCArPSB0dHQgKiBjdXJ2ZS5lbmRQb2ludC54O1xuICAgICAgICAgICAgbGV0IHkgPSB1dXUgKiBjdXJ2ZS5zdGFydFBvaW50Lnk7XG4gICAgICAgICAgICB5ICs9IDMgKiB1dSAqIHQgKiBjdXJ2ZS5jb250cm9sMS55O1xuICAgICAgICAgICAgeSArPSAzICogdSAqIHR0ICogY3VydmUuY29udHJvbDIueTtcbiAgICAgICAgICAgIHkgKz0gdHR0ICogY3VydmUuZW5kUG9pbnQueTtcbiAgICAgICAgICAgIGNvbnN0IHdpZHRoID0gTWF0aC5taW4oY3VydmUuc3RhcnRXaWR0aCArIHR0dCAqIHdpZHRoRGVsdGEsIG9wdGlvbnMubWF4V2lkdGgpO1xuICAgICAgICAgICAgdGhpcy5fZHJhd0N1cnZlU2VnbWVudCh4LCB5LCB3aWR0aCk7XG4gICAgICAgIH1cbiAgICAgICAgY3R4LmNsb3NlUGF0aCgpO1xuICAgICAgICBjdHguZmlsbCgpO1xuICAgIH1cbiAgICBfZHJhd0RvdChwb2ludCwgb3B0aW9ucykge1xuICAgICAgICBjb25zdCBjdHggPSB0aGlzLl9jdHg7XG4gICAgICAgIGNvbnN0IHdpZHRoID0gb3B0aW9ucy5kb3RTaXplID4gMFxuICAgICAgICAgICAgPyBvcHRpb25zLmRvdFNpemVcbiAgICAgICAgICAgIDogKG9wdGlvbnMubWluV2lkdGggKyBvcHRpb25zLm1heFdpZHRoKSAvIDI7XG4gICAgICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICAgICAgdGhpcy5fZHJhd0N1cnZlU2VnbWVudChwb2ludC54LCBwb2ludC55LCB3aWR0aCk7XG4gICAgICAgIGN0eC5jbG9zZVBhdGgoKTtcbiAgICAgICAgY3R4LmZpbGxTdHlsZSA9IG9wdGlvbnMucGVuQ29sb3I7XG4gICAgICAgIGN0eC5maWxsKCk7XG4gICAgfVxuICAgIF9mcm9tRGF0YShwb2ludEdyb3VwcywgZHJhd0N1cnZlLCBkcmF3RG90KSB7XG4gICAgICAgIGZvciAoY29uc3QgZ3JvdXAgb2YgcG9pbnRHcm91cHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgcG9pbnRzIH0gPSBncm91cDtcbiAgICAgICAgICAgIGNvbnN0IHBvaW50R3JvdXBPcHRpb25zID0gdGhpcy5fZ2V0UG9pbnRHcm91cE9wdGlvbnMoZ3JvdXApO1xuICAgICAgICAgICAgaWYgKHBvaW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBwb2ludHMubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYmFzaWNQb2ludCA9IHBvaW50c1tqXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcG9pbnQgPSBuZXcgUG9pbnQoYmFzaWNQb2ludC54LCBiYXNpY1BvaW50LnksIGJhc2ljUG9pbnQucHJlc3N1cmUsIGJhc2ljUG9pbnQudGltZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChqID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZXNldChwb2ludEdyb3VwT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VydmUgPSB0aGlzLl9hZGRQb2ludChwb2ludCwgcG9pbnRHcm91cE9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY3VydmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRyYXdDdXJ2ZShjdXJ2ZSwgcG9pbnRHcm91cE9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVzZXQocG9pbnRHcm91cE9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIGRyYXdEb3QocG9pbnRzWzBdLCBwb2ludEdyb3VwT3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgdG9TVkcoeyBpbmNsdWRlQmFja2dyb3VuZENvbG9yID0gZmFsc2UgfSA9IHt9KSB7XG4gICAgICAgIGNvbnN0IHBvaW50R3JvdXBzID0gdGhpcy5fZGF0YTtcbiAgICAgICAgY29uc3QgcmF0aW8gPSBNYXRoLm1heCh3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyB8fCAxLCAxKTtcbiAgICAgICAgY29uc3QgbWluWCA9IDA7XG4gICAgICAgIGNvbnN0IG1pblkgPSAwO1xuICAgICAgICBjb25zdCBtYXhYID0gdGhpcy5jYW52YXMud2lkdGggLyByYXRpbztcbiAgICAgICAgY29uc3QgbWF4WSA9IHRoaXMuY2FudmFzLmhlaWdodCAvIHJhdGlvO1xuICAgICAgICBjb25zdCBzdmcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ3N2ZycpO1xuICAgICAgICBzdmcuc2V0QXR0cmlidXRlKCd4bWxucycsICdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycpO1xuICAgICAgICBzdmcuc2V0QXR0cmlidXRlKCd4bWxuczp4bGluaycsICdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJyk7XG4gICAgICAgIHN2Zy5zZXRBdHRyaWJ1dGUoJ3ZpZXdCb3gnLCBgJHttaW5YfSAke21pbll9ICR7bWF4WH0gJHttYXhZfWApO1xuICAgICAgICBzdmcuc2V0QXR0cmlidXRlKCd3aWR0aCcsIG1heFgudG9TdHJpbmcoKSk7XG4gICAgICAgIHN2Zy5zZXRBdHRyaWJ1dGUoJ2hlaWdodCcsIG1heFkudG9TdHJpbmcoKSk7XG4gICAgICAgIGlmIChpbmNsdWRlQmFja2dyb3VuZENvbG9yICYmIHRoaXMuYmFja2dyb3VuZENvbG9yKSB7XG4gICAgICAgICAgICBjb25zdCByZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncmVjdCcpO1xuICAgICAgICAgICAgcmVjdC5zZXRBdHRyaWJ1dGUoJ3dpZHRoJywgJzEwMCUnKTtcbiAgICAgICAgICAgIHJlY3Quc2V0QXR0cmlidXRlKCdoZWlnaHQnLCAnMTAwJScpO1xuICAgICAgICAgICAgcmVjdC5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCB0aGlzLmJhY2tncm91bmRDb2xvcik7XG4gICAgICAgICAgICBzdmcuYXBwZW5kQ2hpbGQocmVjdCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZnJvbURhdGEocG9pbnRHcm91cHMsIChjdXJ2ZSwgeyBwZW5Db2xvciB9KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXRoID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncGF0aCcpO1xuICAgICAgICAgICAgaWYgKCFpc05hTihjdXJ2ZS5jb250cm9sMS54KSAmJlxuICAgICAgICAgICAgICAgICFpc05hTihjdXJ2ZS5jb250cm9sMS55KSAmJlxuICAgICAgICAgICAgICAgICFpc05hTihjdXJ2ZS5jb250cm9sMi54KSAmJlxuICAgICAgICAgICAgICAgICFpc05hTihjdXJ2ZS5jb250cm9sMi55KSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGF0dHIgPSBgTSAke2N1cnZlLnN0YXJ0UG9pbnQueC50b0ZpeGVkKDMpfSwke2N1cnZlLnN0YXJ0UG9pbnQueS50b0ZpeGVkKDMpfSBgICtcbiAgICAgICAgICAgICAgICAgICAgYEMgJHtjdXJ2ZS5jb250cm9sMS54LnRvRml4ZWQoMyl9LCR7Y3VydmUuY29udHJvbDEueS50b0ZpeGVkKDMpfSBgICtcbiAgICAgICAgICAgICAgICAgICAgYCR7Y3VydmUuY29udHJvbDIueC50b0ZpeGVkKDMpfSwke2N1cnZlLmNvbnRyb2wyLnkudG9GaXhlZCgzKX0gYCArXG4gICAgICAgICAgICAgICAgICAgIGAke2N1cnZlLmVuZFBvaW50LngudG9GaXhlZCgzKX0sJHtjdXJ2ZS5lbmRQb2ludC55LnRvRml4ZWQoMyl9YDtcbiAgICAgICAgICAgICAgICBwYXRoLnNldEF0dHJpYnV0ZSgnZCcsIGF0dHIpO1xuICAgICAgICAgICAgICAgIHBhdGguc2V0QXR0cmlidXRlKCdzdHJva2Utd2lkdGgnLCAoY3VydmUuZW5kV2lkdGggKiAyLjI1KS50b0ZpeGVkKDMpKTtcbiAgICAgICAgICAgICAgICBwYXRoLnNldEF0dHJpYnV0ZSgnc3Ryb2tlJywgcGVuQ29sb3IpO1xuICAgICAgICAgICAgICAgIHBhdGguc2V0QXR0cmlidXRlKCdmaWxsJywgJ25vbmUnKTtcbiAgICAgICAgICAgICAgICBwYXRoLnNldEF0dHJpYnV0ZSgnc3Ryb2tlLWxpbmVjYXAnLCAncm91bmQnKTtcbiAgICAgICAgICAgICAgICBzdmcuYXBwZW5kQ2hpbGQocGF0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIChwb2ludCwgeyBwZW5Db2xvciwgZG90U2l6ZSwgbWluV2lkdGgsIG1heFdpZHRoIH0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNpcmNsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NpcmNsZScpO1xuICAgICAgICAgICAgY29uc3Qgc2l6ZSA9IGRvdFNpemUgPiAwID8gZG90U2l6ZSA6IChtaW5XaWR0aCArIG1heFdpZHRoKSAvIDI7XG4gICAgICAgICAgICBjaXJjbGUuc2V0QXR0cmlidXRlKCdyJywgc2l6ZS50b1N0cmluZygpKTtcbiAgICAgICAgICAgIGNpcmNsZS5zZXRBdHRyaWJ1dGUoJ2N4JywgcG9pbnQueC50b1N0cmluZygpKTtcbiAgICAgICAgICAgIGNpcmNsZS5zZXRBdHRyaWJ1dGUoJ2N5JywgcG9pbnQueS50b1N0cmluZygpKTtcbiAgICAgICAgICAgIGNpcmNsZS5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCBwZW5Db2xvcik7XG4gICAgICAgICAgICBzdmcuYXBwZW5kQ2hpbGQoY2lyY2xlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBzdmcub3V0ZXJIVE1MO1xuICAgIH1cbn1cblxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1zaWduYXR1cmVfcGFkLmpzLm1hcFxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9ib29sZWFuLWNoZWNrYm94LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL2Jvb2xlYW4tY2hlY2tib3gudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogQm9vbGVhbkNoZWNrYm94LCBkZWZhdWx0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkJvb2xlYW5DaGVja2JveFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEJvb2xlYW5DaGVja2JveDsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB2dWUgKi8gXCJ2dWVcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4odnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9pbmRleC5qc1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYm9vbGVhbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9ib29sZWFuICovIFwiLi9zcmMvdnVlL2Jvb2xlYW4udHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHN1cnZleS1jb3JlICovIFwiLi9zcmMvZW50cmllcy9jb3JlLnRzXCIpO1xudmFyIF9fZXh0ZW5kcyA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG52YXIgX19kZWNvcmF0ZSA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xuXG5cblxuXG52YXIgQm9vbGVhbkNoZWNrYm94ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhCb29sZWFuQ2hlY2tib3gsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQm9vbGVhbkNoZWNrYm94KCkge1xuICAgICAgICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgfVxuICAgIEJvb2xlYW5DaGVja2JveCA9IF9fZGVjb3JhdGUoW1xuICAgICAgICB2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJDb21wb25lbnRcIl1cbiAgICBdLCBCb29sZWFuQ2hlY2tib3gpO1xuICAgIHJldHVybiBCb29sZWFuQ2hlY2tib3g7XG59KF9ib29sZWFuX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJCb29sZWFuXCJdKSk7XG5cbnZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jb21wb25lbnQoXCJzdi1ib29sZWFuLWNoZWNrYm94XCIsIEJvb2xlYW5DaGVja2JveCk7XG5zdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiUmVuZGVyZXJGYWN0b3J5XCJdLkluc3RhbmNlLnJlZ2lzdGVyUmVuZGVyZXIoXCJib29sZWFuXCIsIFwiY2hlY2tib3hcIiwgXCJzdi1ib29sZWFuLWNoZWNrYm94XCIpO1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChCb29sZWFuQ2hlY2tib3gpO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9ib29sZWFuLXJhZGlvLWl0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy90cy1sb2FkZXI/P3JlZi0tMCEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL3Z1ZS9ib29sZWFuLXJhZGlvLWl0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBCb29sZWFuUmFkaW9JdGVtLCBkZWZhdWx0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkJvb2xlYW5SYWRpb0l0ZW1cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBCb29sZWFuUmFkaW9JdGVtOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZSAqLyBcInZ1ZVwiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubih2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlLXByb3BlcnR5LWRlY29yYXRvciAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IvbGliL2luZGV4LmpzXCIpO1xudmFyIF9fZXh0ZW5kcyA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG52YXIgX19kZWNvcmF0ZSA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xuXG5cbnZhciBCb29sZWFuUmFkaW9JdGVtID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhCb29sZWFuUmFkaW9JdGVtLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEJvb2xlYW5SYWRpb0l0ZW0oKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5oYW5kbGVDaGFuZ2UgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgIF90aGlzLnF1ZXN0aW9uLmJvb2xlYW5WYWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZSA9PSBcInRydWVcIjtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlByb3BcIl0pKClcbiAgICBdLCBCb29sZWFuUmFkaW9JdGVtLnByb3RvdHlwZSwgXCJxdWVzdGlvblwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QodnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiUHJvcFwiXSkoKVxuICAgIF0sIEJvb2xlYW5SYWRpb0l0ZW0ucHJvdG90eXBlLCBcImxvY1RleHRcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlByb3BcIl0pKClcbiAgICBdLCBCb29sZWFuUmFkaW9JdGVtLnByb3RvdHlwZSwgXCJ2YWx1ZVwiLCB2b2lkIDApO1xuICAgIEJvb2xlYW5SYWRpb0l0ZW0gPSBfX2RlY29yYXRlKFtcbiAgICAgICAgdnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiQ29tcG9uZW50XCJdXG4gICAgXSwgQm9vbGVhblJhZGlvSXRlbSk7XG4gICAgcmV0dXJuIEJvb2xlYW5SYWRpb0l0ZW07XG59KHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYSkpO1xuXG52dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY29tcG9uZW50KFwic3YtYm9vbGVhbi1yYWRpby1pdGVtXCIsIEJvb2xlYW5SYWRpb0l0ZW0pO1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChCb29sZWFuUmFkaW9JdGVtKTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvYm9vbGVhbi1yYWRpby52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy90cy1sb2FkZXI/P3JlZi0tMCEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL3Z1ZS9ib29sZWFuLXJhZGlvLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEJvb2xlYW5SYWRpbywgZGVmYXVsdCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJCb29sZWFuUmFkaW9cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBCb29sZWFuUmFkaW87IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlICovIFwidnVlXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB2dWUtcHJvcGVydHktZGVjb3JhdG9yICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLXByb3BlcnR5LWRlY29yYXRvci9saWIvaW5kZXguanNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Jvb2xlYW5fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYm9vbGVhbiAqLyBcIi4vc3JjL3Z1ZS9ib29sZWFuLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHN1cnZleV9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBzdXJ2ZXktY29yZSAqLyBcIi4vc3JjL2VudHJpZXMvY29yZS50c1wiKTtcbnZhciBfX2V4dGVuZHMgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xudmFyIF9fZGVjb3JhdGUgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufTtcblxuXG5cblxudmFyIEJvb2xlYW5SYWRpbyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQm9vbGVhblJhZGlvLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEJvb2xlYW5SYWRpbygpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIH1cbiAgICBCb29sZWFuUmFkaW8gPSBfX2RlY29yYXRlKFtcbiAgICAgICAgdnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiQ29tcG9uZW50XCJdXG4gICAgXSwgQm9vbGVhblJhZGlvKTtcbiAgICByZXR1cm4gQm9vbGVhblJhZGlvO1xufShfYm9vbGVhbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiQm9vbGVhblwiXSkpO1xuXG52dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY29tcG9uZW50KFwic3YtYm9vbGVhbi1yYWRpb1wiLCBCb29sZWFuUmFkaW8pO1xuc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcIlJlbmRlcmVyRmFjdG9yeVwiXS5JbnN0YW5jZS5yZWdpc3RlclJlbmRlcmVyKFwiYm9vbGVhblwiLCBcInJhZGlvXCIsIFwic3YtYm9vbGVhbi1yYWRpb1wiKTtcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoQm9vbGVhblJhZGlvKTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvYm9vbGVhbi1zd2l0Y2gudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL2Jvb2xlYW4tc3dpdGNoLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBCb29sZWFuU3dpdGNoLCBkZWZhdWx0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkJvb2xlYW5Td2l0Y2hcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBCb29sZWFuU3dpdGNoOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZSAqLyBcInZ1ZVwiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubih2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlLXByb3BlcnR5LWRlY29yYXRvciAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IvbGliL2luZGV4LmpzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ib29sZWFuX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2Jvb2xlYW4gKi8gXCIuL3NyYy92dWUvYm9vbGVhbi50c1wiKTtcbnZhciBfX2V4dGVuZHMgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xudmFyIF9fZGVjb3JhdGUgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufTtcblxuXG5cbnZhciBCb29sZWFuU3dpdGNoID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhCb29sZWFuU3dpdGNoLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEJvb2xlYW5Td2l0Y2goKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICB9XG4gICAgQm9vbGVhblN3aXRjaCA9IF9fZGVjb3JhdGUoW1xuICAgICAgICB2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJDb21wb25lbnRcIl1cbiAgICBdLCBCb29sZWFuU3dpdGNoKTtcbiAgICByZXR1cm4gQm9vbGVhblN3aXRjaDtcbn0oX2Jvb2xlYW5fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIkJvb2xlYW5cIl0pKTtcblxudnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNvbXBvbmVudChcInN1cnZleS1ib29sZWFuXCIsIEJvb2xlYW5Td2l0Y2gpO1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChCb29sZWFuU3dpdGNoKTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvYnV0dG9uZ3JvdXAudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL2J1dHRvbmdyb3VwLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBCdXR0b25Hcm91cCwgZGVmYXVsdCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJCdXR0b25Hcm91cFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEJ1dHRvbkdyb3VwOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB2dWUtcHJvcGVydHktZGVjb3JhdG9yICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLXByb3BlcnR5LWRlY29yYXRvci9saWIvaW5kZXguanNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3F1ZXN0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3F1ZXN0aW9uICovIFwiLi9zcmMvdnVlL3F1ZXN0aW9uLnRzXCIpO1xudmFyIF9fZXh0ZW5kcyA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG52YXIgX19kZWNvcmF0ZSA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xuXG5cbnZhciBCdXR0b25Hcm91cCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQnV0dG9uR3JvdXAsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQnV0dG9uR3JvdXAoKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICB9XG4gICAgQnV0dG9uR3JvdXAucHJvdG90eXBlLmdldE1vZGVsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5xdWVzdGlvbjtcbiAgICB9O1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QodnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiUHJvcFwiXSkoKVxuICAgIF0sIEJ1dHRvbkdyb3VwLnByb3RvdHlwZSwgXCJxdWVzdGlvblwiLCB2b2lkIDApO1xuICAgIEJ1dHRvbkdyb3VwID0gX19kZWNvcmF0ZShbXG4gICAgICAgIHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkNvbXBvbmVudFwiXVxuICAgIF0sIEJ1dHRvbkdyb3VwKTtcbiAgICByZXR1cm4gQnV0dG9uR3JvdXA7XG59KF9xdWVzdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiUXVlc3Rpb25WdWVcIl0pKTtcblxuLy8gVnVlLmNvbXBvbmVudChcInN1cnZleS1idXR0b25ncm91cFwiLCBCdXR0b25Hcm91cCk7XG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKEJ1dHRvbkdyb3VwKTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvYnV0dG9uZ3JvdXBpdGVtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyPz9yZWYtLTAhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NyYy92dWUvYnV0dG9uZ3JvdXBpdGVtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogQnV0dG9uR3JvdXBJdGVtLCBkZWZhdWx0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkJ1dHRvbkdyb3VwSXRlbVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEJ1dHRvbkdyb3VwSXRlbTsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlLXByb3BlcnR5LWRlY29yYXRvciAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IvbGliL2luZGV4LmpzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlICovIFwidnVlXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBzdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgc3VydmV5LWNvcmUgKi8gXCIuL3NyYy9lbnRyaWVzL2NvcmUudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Jhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYmFzZSAqLyBcIi4vc3JjL3Z1ZS9iYXNlLnRzXCIpO1xudmFyIF9fZXh0ZW5kcyA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG52YXIgX19kZWNvcmF0ZSA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xuXG5cblxuXG52YXIgQnV0dG9uR3JvdXBJdGVtID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhCdXR0b25Hcm91cEl0ZW0sIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQnV0dG9uR3JvdXBJdGVtKHByb3BzKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHByb3BzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5tb2RlbCA9IG5ldyBzdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiQnV0dG9uR3JvdXBJdGVtTW9kZWxcIl0oX3RoaXMucXVlc3Rpb24sIF90aGlzLml0ZW0sIF90aGlzLmluZGV4KTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBCdXR0b25Hcm91cEl0ZW0ucHJvdG90eXBlLmdldE1vZGVsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pdGVtO1xuICAgIH07XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdCh2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJQcm9wXCJdKSgpXG4gICAgXSwgQnV0dG9uR3JvdXBJdGVtLnByb3RvdHlwZSwgXCJpdGVtXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdCh2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJQcm9wXCJdKSgpXG4gICAgXSwgQnV0dG9uR3JvdXBJdGVtLnByb3RvdHlwZSwgXCJxdWVzdGlvblwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QodnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiUHJvcFwiXSkoKVxuICAgIF0sIEJ1dHRvbkdyb3VwSXRlbS5wcm90b3R5cGUsIFwiaW5kZXhcIiwgdm9pZCAwKTtcbiAgICBCdXR0b25Hcm91cEl0ZW0gPSBfX2RlY29yYXRlKFtcbiAgICAgICAgdnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiQ29tcG9uZW50XCJdXG4gICAgXSwgQnV0dG9uR3JvdXBJdGVtKTtcbiAgICByZXR1cm4gQnV0dG9uR3JvdXBJdGVtO1xufShfYmFzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiQmFzZVZ1ZVwiXSkpO1xuXG52dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0LmEuY29tcG9uZW50KFwic3YtYnV0dG9uLWdyb3VwLWl0ZW1cIiwgQnV0dG9uR3JvdXBJdGVtKTtcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoQnV0dG9uR3JvdXBJdGVtKTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvY2hlY2tib3gudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL2NoZWNrYm94LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBDaGVja2JveCwgZGVmYXVsdCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJDaGVja2JveFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIENoZWNrYm94OyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZSAqLyBcInZ1ZVwiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubih2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlLXByb3BlcnR5LWRlY29yYXRvciAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IvbGliL2luZGV4LmpzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9xdWVzdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9xdWVzdGlvbiAqLyBcIi4vc3JjL3Z1ZS9xdWVzdGlvbi50c1wiKTtcbnZhciBfX2V4dGVuZHMgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xudmFyIF9fZGVjb3JhdGUgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufTtcblxuXG5cbnZhciBDaGVja2JveCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQ2hlY2tib3gsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQ2hlY2tib3goKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICB9XG4gICAgQ2hlY2tib3ggPSBfX2RlY29yYXRlKFtcbiAgICAgICAgdnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiQ29tcG9uZW50XCJdXG4gICAgXSwgQ2hlY2tib3gpO1xuICAgIHJldHVybiBDaGVja2JveDtcbn0oX3F1ZXN0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJkZWZhdWx0XCJdKSk7XG5cbnZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jb21wb25lbnQoXCJzdXJ2ZXktY2hlY2tib3hcIiwgQ2hlY2tib3gpO1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChDaGVja2JveCk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2NoZWNrYm94aXRlbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL2NoZWNrYm94aXRlbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IENoZWNrYm94SXRlbSwgZGVmYXVsdCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJDaGVja2JveEl0ZW1cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBDaGVja2JveEl0ZW07IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlICovIFwidnVlXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB2dWUtcHJvcGVydHktZGVjb3JhdG9yICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLXByb3BlcnR5LWRlY29yYXRvci9saWIvaW5kZXguanNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Jhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYmFzZSAqLyBcIi4vc3JjL3Z1ZS9iYXNlLnRzXCIpO1xudmFyIF9fZXh0ZW5kcyA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG52YXIgX19kZWNvcmF0ZSA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xuXG5cblxudmFyIENoZWNrYm94SXRlbSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQ2hlY2tib3hJdGVtLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIENoZWNrYm94SXRlbSgpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIH1cbiAgICBDaGVja2JveEl0ZW0ucHJvdG90eXBlLmdldE1vZGVsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pdGVtO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENoZWNrYm94SXRlbS5wcm90b3R5cGUsIFwiaXNBbGxTZWxlY3RlZFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucXVlc3Rpb24uaXNBbGxTZWxlY3RlZCB8fCBcIlwiO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb24uaXNBbGxTZWxlY3RlZCA9IHZhbDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QodnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiUHJvcFwiXSkoKVxuICAgIF0sIENoZWNrYm94SXRlbS5wcm90b3R5cGUsIFwicXVlc3Rpb25cIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlByb3BcIl0pKClcbiAgICBdLCBDaGVja2JveEl0ZW0ucHJvdG90eXBlLCBcIml0ZW1cIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlByb3BcIl0pKClcbiAgICBdLCBDaGVja2JveEl0ZW0ucHJvdG90eXBlLCBcImluZGV4XCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdCh2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJQcm9wXCJdKSgpXG4gICAgXSwgQ2hlY2tib3hJdGVtLnByb3RvdHlwZSwgXCJoaWRlTGFiZWxcIiwgdm9pZCAwKTtcbiAgICBDaGVja2JveEl0ZW0gPSBfX2RlY29yYXRlKFtcbiAgICAgICAgdnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiQ29tcG9uZW50XCJdXG4gICAgXSwgQ2hlY2tib3hJdGVtKTtcbiAgICByZXR1cm4gQ2hlY2tib3hJdGVtO1xufShfYmFzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiQmFzZVZ1ZVwiXSkpO1xuXG52dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY29tcG9uZW50KFwic3VydmV5LWNoZWNrYm94LWl0ZW1cIiwgQ2hlY2tib3hJdGVtKTtcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoQ2hlY2tib3hJdGVtKTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvY29tbWVudC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy90cy1sb2FkZXI/P3JlZi0tMCEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL3Z1ZS9jb21tZW50LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IENvbW1lbnQsIGRlZmF1bHQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQ29tbWVudFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIENvbW1lbnQ7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlICovIFwidnVlXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB2dWUtcHJvcGVydHktZGVjb3JhdG9yICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLXByb3BlcnR5LWRlY29yYXRvci9saWIvaW5kZXguanNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3F1ZXN0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3F1ZXN0aW9uICovIFwiLi9zcmMvdnVlL3F1ZXN0aW9uLnRzXCIpO1xudmFyIF9fZXh0ZW5kcyA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG52YXIgX19kZWNvcmF0ZSA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xuXG5cblxudmFyIENvbW1lbnQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKENvbW1lbnQsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQ29tbWVudCgpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIH1cbiAgICBDb21tZW50LnByb3RvdHlwZS5jaGFuZ2UgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5xdWVzdGlvbi52YWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICB9O1xuICAgIENvbW1lbnQgPSBfX2RlY29yYXRlKFtcbiAgICAgICAgdnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiQ29tcG9uZW50XCJdXG4gICAgXSwgQ29tbWVudCk7XG4gICAgcmV0dXJuIENvbW1lbnQ7XG59KF9xdWVzdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiZGVmYXVsdFwiXSkpO1xuXG52dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY29tcG9uZW50KFwic3VydmV5LWNvbW1lbnRcIiwgQ29tbWVudCk7XG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKENvbW1lbnQpO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLWJhci1pdGVtLWRyb3Bkb3duLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24tYmFyLWl0ZW0tZHJvcGRvd24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogQWN0aW9uQmFySXRlbURyb3Bkb3duVmlld01vZGVsLCBkZWZhdWx0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkFjdGlvbkJhckl0ZW1Ecm9wZG93blZpZXdNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEFjdGlvbkJhckl0ZW1Ecm9wZG93blZpZXdNb2RlbDsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlLXByb3BlcnR5LWRlY29yYXRvciAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IvbGliL2luZGV4LmpzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlICovIFwidnVlXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYWN0aW9uX2Jhcl9pdGVtX3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9hY3Rpb24tYmFyLWl0ZW0udnVlICovIFwiLi9zcmMvdnVlL2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24tYmFyLWl0ZW0udnVlXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHN1cnZleV9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBzdXJ2ZXktY29yZSAqLyBcIi4vc3JjL2VudHJpZXMvY29yZS50c1wiKTtcbnZhciBfX2V4dGVuZHMgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xudmFyIF9fZGVjb3JhdGUgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufTtcblxuXG5cblxudmFyIEFjdGlvbkJhckl0ZW1Ecm9wZG93blZpZXdNb2RlbCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQWN0aW9uQmFySXRlbURyb3Bkb3duVmlld01vZGVsLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFjdGlvbkJhckl0ZW1Ecm9wZG93blZpZXdNb2RlbCgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuZ2V0VGFyZ2V0ID0gc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcImdldEFjdGlvbkRyb3Bkb3duQnV0dG9uVGFyZ2V0XCJdO1xuICAgICAgICBfdGhpcy52aWV3TW9kZWwgPSBuZXcgc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcIkFjdGlvbkRyb3Bkb3duVmlld01vZGVsXCJdKF90aGlzLml0ZW0pO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIEFjdGlvbkJhckl0ZW1Ecm9wZG93blZpZXdNb2RlbC5wcm90b3R5cGUub25EZXN0cm95ZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMudmlld01vZGVsLmRpc3Bvc2UoKTtcbiAgICB9O1xuICAgIEFjdGlvbkJhckl0ZW1Ecm9wZG93blZpZXdNb2RlbCA9IF9fZGVjb3JhdGUoW1xuICAgICAgICB2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJDb21wb25lbnRcIl1cbiAgICBdLCBBY3Rpb25CYXJJdGVtRHJvcGRvd25WaWV3TW9kZWwpO1xuICAgIHJldHVybiBBY3Rpb25CYXJJdGVtRHJvcGRvd25WaWV3TW9kZWw7XG59KF9hY3Rpb25fYmFyX2l0ZW1fdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJkZWZhdWx0XCJdKSk7XG5cbnZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQuYS5jb21wb25lbnQoXCJzdi1hY3Rpb24tYmFyLWl0ZW0tZHJvcGRvd25cIiwgQWN0aW9uQmFySXRlbURyb3Bkb3duVmlld01vZGVsKTtcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoQWN0aW9uQmFySXRlbURyb3Bkb3duVmlld01vZGVsKTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXItaXRlbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy90cy1sb2FkZXI/P3JlZi0tMCEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL3Z1ZS9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLWJhci1pdGVtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEFjdGlvbkJhckl0ZW1WaWV3TW9kZWwsIGRlZmF1bHQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQWN0aW9uQmFySXRlbVZpZXdNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEFjdGlvbkJhckl0ZW1WaWV3TW9kZWw7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlICovIFwidnVlXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB2dWUtcHJvcGVydHktZGVjb3JhdG9yICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLXByb3BlcnR5LWRlY29yYXRvci9saWIvaW5kZXguanNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Jhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL2Jhc2UgKi8gXCIuL3NyYy92dWUvYmFzZS50c1wiKTtcbnZhciBfX2V4dGVuZHMgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xudmFyIF9fZGVjb3JhdGUgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufTtcblxuXG5cbnZhciBBY3Rpb25CYXJJdGVtVmlld01vZGVsID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBY3Rpb25CYXJJdGVtVmlld01vZGVsLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFjdGlvbkJhckl0ZW1WaWV3TW9kZWwoKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICB9XG4gICAgQWN0aW9uQmFySXRlbVZpZXdNb2RlbC5wcm90b3R5cGUuZ2V0TW9kZWwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLml0ZW07XG4gICAgfTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlByb3BcIl0pKClcbiAgICBdLCBBY3Rpb25CYXJJdGVtVmlld01vZGVsLnByb3RvdHlwZSwgXCJpdGVtXCIsIHZvaWQgMCk7XG4gICAgQWN0aW9uQmFySXRlbVZpZXdNb2RlbCA9IF9fZGVjb3JhdGUoW1xuICAgICAgICB2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJDb21wb25lbnRcIl1cbiAgICBdLCBBY3Rpb25CYXJJdGVtVmlld01vZGVsKTtcbiAgICByZXR1cm4gQWN0aW9uQmFySXRlbVZpZXdNb2RlbDtcbn0oX2Jhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcImRlZmF1bHRcIl0pKTtcblxudnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNvbXBvbmVudChcInN2LWFjdGlvbi1iYXItaXRlbVwiLCBBY3Rpb25CYXJJdGVtVmlld01vZGVsKTtcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoQWN0aW9uQmFySXRlbVZpZXdNb2RlbCk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24tYmFyLXNlcGFyYXRvci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24tYmFyLXNlcGFyYXRvci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEFjdGlvbkJhclNlcGFyYXRvclZpZXdNb2RlbCwgZGVmYXVsdCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJBY3Rpb25CYXJTZXBhcmF0b3JWaWV3TW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBBY3Rpb25CYXJTZXBhcmF0b3JWaWV3TW9kZWw7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlICovIFwidnVlXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB2dWUtcHJvcGVydHktZGVjb3JhdG9yICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLXByb3BlcnR5LWRlY29yYXRvci9saWIvaW5kZXguanNcIik7XG52YXIgX19leHRlbmRzID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbnZhciBfX2RlY29yYXRlID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn07XG5cblxudmFyIEFjdGlvbkJhclNlcGFyYXRvclZpZXdNb2RlbCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQWN0aW9uQmFyU2VwYXJhdG9yVmlld01vZGVsLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFjdGlvbkJhclNlcGFyYXRvclZpZXdNb2RlbCgpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQWN0aW9uQmFyU2VwYXJhdG9yVmlld01vZGVsLnByb3RvdHlwZSwgXCJpbm5lckNzc1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXRlbSAmJiB0aGlzLml0ZW0uaW5uZXJDc3M7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlByb3BcIl0pKClcbiAgICBdLCBBY3Rpb25CYXJTZXBhcmF0b3JWaWV3TW9kZWwucHJvdG90eXBlLCBcIml0ZW1cIiwgdm9pZCAwKTtcbiAgICBBY3Rpb25CYXJTZXBhcmF0b3JWaWV3TW9kZWwgPSBfX2RlY29yYXRlKFtcbiAgICAgICAgdnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiQ29tcG9uZW50XCJdXG4gICAgXSwgQWN0aW9uQmFyU2VwYXJhdG9yVmlld01vZGVsKTtcbiAgICByZXR1cm4gQWN0aW9uQmFyU2VwYXJhdG9yVmlld01vZGVsO1xufSh2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEpKTtcblxudnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNvbXBvbmVudChcInN2LWFjdGlvbi1iYXItc2VwYXJhdG9yXCIsIEFjdGlvbkJhclNlcGFyYXRvclZpZXdNb2RlbCk7XG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKEFjdGlvbkJhclNlcGFyYXRvclZpZXdNb2RlbCk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24tYmFyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy90cy1sb2FkZXI/P3JlZi0tMCEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL3Z1ZS9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLWJhci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogQWN0aW9uVmlld01vZGVsLCBBY3Rpb25CYXJJdGVtVmlld01vZGVsLCBBY3Rpb25CYXJJdGVtRHJvcGRvd25WaWV3TW9kZWwsIEFjdGlvbkJhclNlcGFyYXRvclZpZXdNb2RlbCwgQWN0aW9uQmFyVmlld01vZGVsLCBkZWZhdWx0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkFjdGlvbkJhclZpZXdNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEFjdGlvbkJhclZpZXdNb2RlbDsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlLXByb3BlcnR5LWRlY29yYXRvciAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IvbGliL2luZGV4LmpzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlICovIFwidnVlXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYmFzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vYmFzZSAqLyBcIi4vc3JjL3Z1ZS9iYXNlLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9hY3Rpb25fdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2FjdGlvbi52dWUgKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi52dWVcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJBY3Rpb25WaWV3TW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfYWN0aW9uX3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiQWN0aW9uVmlld01vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9hY3Rpb25fYmFyX2l0ZW1fdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2FjdGlvbi1iYXItaXRlbS52dWUgKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXItaXRlbS52dWVcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJBY3Rpb25CYXJJdGVtVmlld01vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2FjdGlvbl9iYXJfaXRlbV92dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1tcIkFjdGlvbkJhckl0ZW1WaWV3TW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2FjdGlvbl9iYXJfaXRlbV9kcm9wZG93bl92dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYWN0aW9uLWJhci1pdGVtLWRyb3Bkb3duLnZ1ZSAqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLWJhci1pdGVtLWRyb3Bkb3duLnZ1ZVwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkFjdGlvbkJhckl0ZW1Ecm9wZG93blZpZXdNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9hY3Rpb25fYmFyX2l0ZW1fZHJvcGRvd25fdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bXCJBY3Rpb25CYXJJdGVtRHJvcGRvd25WaWV3TW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2FjdGlvbl9iYXJfc2VwYXJhdG9yX3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9hY3Rpb24tYmFyLXNlcGFyYXRvci52dWUgKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXItc2VwYXJhdG9yLnZ1ZVwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkFjdGlvbkJhclNlcGFyYXRvclZpZXdNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9hY3Rpb25fYmFyX3NlcGFyYXRvcl92dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1tcIkFjdGlvbkJhclNlcGFyYXRvclZpZXdNb2RlbFwiXTsgfSk7XG5cbnZhciBfX2V4dGVuZHMgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xudmFyIF9fZGVjb3JhdGUgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufTtcblxuXG5cblxuXG5cblxudmFyIEFjdGlvbkJhclZpZXdNb2RlbCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQWN0aW9uQmFyVmlld01vZGVsLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFjdGlvbkJhclZpZXdNb2RlbChwcm9wcykge1xuICAgICAgICByZXR1cm4gX3N1cGVyLmNhbGwodGhpcywgcHJvcHMpIHx8IHRoaXM7XG4gICAgfVxuICAgIEFjdGlvbkJhclZpZXdNb2RlbC5wcm90b3R5cGUuZ2V0TW9kZWwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICAgIH07XG4gICAgQWN0aW9uQmFyVmlld01vZGVsLnByb3RvdHlwZS5tb3VudGVkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMubW9kZWwuaGFzQWN0aW9ucylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIGNvbnRhaW5lciA9IHRoaXMuJGVsO1xuICAgICAgICB0aGlzLm1vZGVsLmluaXRSZXNwb25zaXZpdHlNYW5hZ2VyKGNvbnRhaW5lcik7XG4gICAgfTtcbiAgICBBY3Rpb25CYXJWaWV3TW9kZWwucHJvdG90eXBlLmJlZm9yZURlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMubW9kZWwucmVzZXRSZXNwb25zaXZpdHlNYW5hZ2VyKCk7XG4gICAgfTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlByb3BcIl0pKClcbiAgICBdLCBBY3Rpb25CYXJWaWV3TW9kZWwucHJvdG90eXBlLCBcIm1vZGVsXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdCh2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJQcm9wXCJdKSgpXG4gICAgXSwgQWN0aW9uQmFyVmlld01vZGVsLnByb3RvdHlwZSwgXCJjb250YWluZXJcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlByb3BcIl0pKClcbiAgICBdLCBBY3Rpb25CYXJWaWV3TW9kZWwucHJvdG90eXBlLCBcImhhbmRsZUNsaWNrXCIsIHZvaWQgMCk7XG4gICAgQWN0aW9uQmFyVmlld01vZGVsID0gX19kZWNvcmF0ZShbXG4gICAgICAgIHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkNvbXBvbmVudFwiXVxuICAgIF0sIEFjdGlvbkJhclZpZXdNb2RlbCk7XG4gICAgcmV0dXJuIEFjdGlvbkJhclZpZXdNb2RlbDtcbn0oX2Jhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIkJhc2VWdWVcIl0pKTtcblxudnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdC5hLmNvbXBvbmVudChcInN2LWFjdGlvbi1iYXJcIiwgQWN0aW9uQmFyVmlld01vZGVsKTtcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoQWN0aW9uQmFyVmlld01vZGVsKTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy90cy1sb2FkZXI/P3JlZi0tMCEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL3Z1ZS9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEFjdGlvblZpZXdNb2RlbCwgZGVmYXVsdCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJBY3Rpb25WaWV3TW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBBY3Rpb25WaWV3TW9kZWw7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlICovIFwidnVlXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB2dWUtcHJvcGVydHktZGVjb3JhdG9yICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLXByb3BlcnR5LWRlY29yYXRvci9saWIvaW5kZXguanNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Jhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL2Jhc2UgKi8gXCIuL3NyYy92dWUvYmFzZS50c1wiKTtcbnZhciBfX2V4dGVuZHMgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xudmFyIF9fZGVjb3JhdGUgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufTtcblxuXG5cbnZhciBBY3Rpb25WaWV3TW9kZWwgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEFjdGlvblZpZXdNb2RlbCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBBY3Rpb25WaWV3TW9kZWwocHJvcHMpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlci5jYWxsKHRoaXMsIHByb3BzKSB8fCB0aGlzO1xuICAgIH1cbiAgICBBY3Rpb25WaWV3TW9kZWwucHJvdG90eXBlLmdldE1vZGVsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pdGVtO1xuICAgIH07XG4gICAgQWN0aW9uVmlld01vZGVsLnByb3RvdHlwZS5nZXRDb21wb25lbnROYW1lID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pdGVtLmNvbXBvbmVudCB8fCBcInN2LWFjdGlvbi1iYXItaXRlbVwiO1xuICAgIH07XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdCh2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJQcm9wXCJdKSgpXG4gICAgXSwgQWN0aW9uVmlld01vZGVsLnByb3RvdHlwZSwgXCJpdGVtXCIsIHZvaWQgMCk7XG4gICAgQWN0aW9uVmlld01vZGVsID0gX19kZWNvcmF0ZShbXG4gICAgICAgIHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIkNvbXBvbmVudFwiXVxuICAgIF0sIEFjdGlvblZpZXdNb2RlbCk7XG4gICAgcmV0dXJuIEFjdGlvblZpZXdNb2RlbDtcbn0oX2Jhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcImRlZmF1bHRcIl0pKTtcblxudnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNvbXBvbmVudChcInN2LWFjdGlvblwiLCBBY3Rpb25WaWV3TW9kZWwpO1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChBY3Rpb25WaWV3TW9kZWwpO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9jb21wb25lbnRzL2JyYW5kLWluZm8udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy90cy1sb2FkZXI/P3JlZi0tMCEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL3Z1ZS9jb21wb25lbnRzL2JyYW5kLWluZm8udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBCcmFuZEluZm8sIGRlZmF1bHQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQnJhbmRJbmZvXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQnJhbmRJbmZvOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZSAqLyBcInZ1ZVwiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubih2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlLXByb3BlcnR5LWRlY29yYXRvciAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IvbGliL2luZGV4LmpzXCIpO1xudmFyIF9fZXh0ZW5kcyA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG52YXIgX19kZWNvcmF0ZSA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xuXG5cbnZhciBCcmFuZEluZm8gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEJyYW5kSW5mbywgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBCcmFuZEluZm8oKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIH1cbiAgICBCcmFuZEluZm8gPSBfX2RlY29yYXRlKFtcbiAgICAgICAgdnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiQ29tcG9uZW50XCJdXG4gICAgXSwgQnJhbmRJbmZvKTtcbiAgICByZXR1cm4gQnJhbmRJbmZvO1xufSh2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEpKTtcblxudnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNvbXBvbmVudChcInN2LWJyYW5kLWluZm9cIiwgQnJhbmRJbmZvKTtcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoQnJhbmRJbmZvKTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvY29tcG9uZW50cy9jaGFyYWN0ZXItY291bnRlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy90cy1sb2FkZXI/P3JlZi0tMCEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL3Z1ZS9jb21wb25lbnRzL2NoYXJhY3Rlci1jb3VudGVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IENoYXJhY3RlckNvdW50ZXJDb21wb25lbnQsIGRlZmF1bHQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQ2hhcmFjdGVyQ291bnRlckNvbXBvbmVudFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIENoYXJhY3RlckNvdW50ZXJDb21wb25lbnQ7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlICovIFwidnVlXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB2dWUtcHJvcGVydHktZGVjb3JhdG9yICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLXByb3BlcnR5LWRlY29yYXRvci9saWIvaW5kZXguanNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Jhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2Jhc2UgKi8gXCIuL3NyYy92dWUvYmFzZS50c1wiKTtcbnZhciBfX2V4dGVuZHMgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xudmFyIF9fZGVjb3JhdGUgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufTtcblxuXG5cbnZhciBDaGFyYWN0ZXJDb3VudGVyQ29tcG9uZW50ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhDaGFyYWN0ZXJDb3VudGVyQ29tcG9uZW50LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIENoYXJhY3RlckNvdW50ZXJDb21wb25lbnQoKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIH1cbiAgICBDaGFyYWN0ZXJDb3VudGVyQ29tcG9uZW50LnByb3RvdHlwZS5nZXRNb2RlbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY291bnRlcjtcbiAgICB9O1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QodnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiUHJvcFwiXSkoKVxuICAgIF0sIENoYXJhY3RlckNvdW50ZXJDb21wb25lbnQucHJvdG90eXBlLCBcImNvdW50ZXJcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlByb3BcIl0pKClcbiAgICBdLCBDaGFyYWN0ZXJDb3VudGVyQ29tcG9uZW50LnByb3RvdHlwZSwgXCJyZW1haW5pbmdDaGFyYWN0ZXJDb3VudGVyXCIsIHZvaWQgMCk7XG4gICAgQ2hhcmFjdGVyQ291bnRlckNvbXBvbmVudCA9IF9fZGVjb3JhdGUoW1xuICAgICAgICB2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJDb21wb25lbnRcIl1cbiAgICBdLCBDaGFyYWN0ZXJDb3VudGVyQ29tcG9uZW50KTtcbiAgICByZXR1cm4gQ2hhcmFjdGVyQ291bnRlckNvbXBvbmVudDtcbn0oX2Jhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIkJhc2VWdWVcIl0pKTtcblxudnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNvbXBvbmVudChcInN2LWNoYXJhY3Rlci1jb3VudGVyXCIsIENoYXJhY3RlckNvdW50ZXJDb21wb25lbnQpO1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChDaGFyYWN0ZXJDb3VudGVyQ29tcG9uZW50KTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvY29tcG9uZW50cy9jb250YWluZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL2NvbXBvbmVudHMvY29udGFpbmVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBDb21wb25lbnRzQ29udGFpbmVyLCBkZWZhdWx0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkNvbXBvbmVudHNDb250YWluZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBDb21wb25lbnRzQ29udGFpbmVyOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZSAqLyBcInZ1ZVwiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubih2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlLXByb3BlcnR5LWRlY29yYXRvciAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IvbGliL2luZGV4LmpzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9iYXNlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9iYXNlICovIFwiLi9zcmMvdnVlL2Jhc2UudHNcIik7XG52YXIgX19leHRlbmRzID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbnZhciBfX2RlY29yYXRlID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn07XG5cblxuXG52YXIgQ29tcG9uZW50c0NvbnRhaW5lciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQ29tcG9uZW50c0NvbnRhaW5lciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBDb21wb25lbnRzQ29udGFpbmVyKCkge1xuICAgICAgICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb21wb25lbnRzQ29udGFpbmVyLnByb3RvdHlwZSwgXCJjb21wb25lbnRzXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdXJ2ZXkuZ2V0Q29udGFpbmVyQ29udGVudCh0aGlzLmNvbnRhaW5lcik7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlByb3BcIl0pKClcbiAgICBdLCBDb21wb25lbnRzQ29udGFpbmVyLnByb3RvdHlwZSwgXCJzdXJ2ZXlcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlByb3BcIl0pKClcbiAgICBdLCBDb21wb25lbnRzQ29udGFpbmVyLnByb3RvdHlwZSwgXCJjb250YWluZXJcIiwgdm9pZCAwKTtcbiAgICBDb21wb25lbnRzQ29udGFpbmVyID0gX19kZWNvcmF0ZShbXG4gICAgICAgIHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIkNvbXBvbmVudFwiXVxuICAgIF0sIENvbXBvbmVudHNDb250YWluZXIpO1xuICAgIHJldHVybiBDb21wb25lbnRzQ29udGFpbmVyO1xufShfYmFzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiQmFzZVZ1ZVwiXSkpO1xuXG52dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY29tcG9uZW50KFwic3YtY29tcG9uZW50cy1jb250YWluZXJcIiwgQ29tcG9uZW50c0NvbnRhaW5lcik7XG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKENvbXBvbmVudHNDb250YWluZXIpO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9jb21wb25lbnRzL2NvdmVyL2NvdmVyLWNlbGwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy90cy1sb2FkZXI/P3JlZi0tMCEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL3Z1ZS9jb21wb25lbnRzL2NvdmVyL2NvdmVyLWNlbGwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBDb3ZlckNlbGxWaWV3TW9kZWwsIGRlZmF1bHQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQ292ZXJDZWxsVmlld01vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQ292ZXJDZWxsVmlld01vZGVsOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZSAqLyBcInZ1ZVwiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubih2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlLXByb3BlcnR5LWRlY29yYXRvciAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IvbGliL2luZGV4LmpzXCIpO1xudmFyIF9fZXh0ZW5kcyA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG52YXIgX19kZWNvcmF0ZSA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xuXG5cbnZhciBDb3ZlckNlbGxWaWV3TW9kZWwgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKENvdmVyQ2VsbFZpZXdNb2RlbCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBDb3ZlckNlbGxWaWV3TW9kZWwocHJvcHMpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlci5jYWxsKHRoaXMsIHByb3BzKSB8fCB0aGlzO1xuICAgIH1cbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlByb3BcIl0pKClcbiAgICBdLCBDb3ZlckNlbGxWaWV3TW9kZWwucHJvdG90eXBlLCBcIm1vZGVsXCIsIHZvaWQgMCk7XG4gICAgQ292ZXJDZWxsVmlld01vZGVsID0gX19kZWNvcmF0ZShbXG4gICAgICAgIHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIkNvbXBvbmVudFwiXVxuICAgIF0sIENvdmVyQ2VsbFZpZXdNb2RlbCk7XG4gICAgcmV0dXJuIENvdmVyQ2VsbFZpZXdNb2RlbDtcbn0odnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hKSk7XG5cbnZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jb21wb25lbnQoXCJzdi1jb3Zlci1jZWxsXCIsIENvdmVyQ2VsbFZpZXdNb2RlbCk7XG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKENvdmVyQ2VsbFZpZXdNb2RlbCk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2NvbXBvbmVudHMvY292ZXIvY292ZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyPz9yZWYtLTAhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NyYy92dWUvY29tcG9uZW50cy9jb3Zlci9jb3Zlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBDb3ZlckNlbGxWaWV3TW9kZWwsIENvdmVyVmlld01vZGVsLCBkZWZhdWx0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkNvdmVyVmlld01vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQ292ZXJWaWV3TW9kZWw7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9pbmRleC5qc1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZSAqLyBcInZ1ZVwiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubih2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Jhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL2Jhc2UgKi8gXCIuL3NyYy92dWUvYmFzZS50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfY292ZXJfY2VsbF92dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vY292ZXItY2VsbC52dWUgKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9jb3Zlci9jb3Zlci1jZWxsLnZ1ZVwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkNvdmVyQ2VsbFZpZXdNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3Zlcl9jZWxsX3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiQ292ZXJDZWxsVmlld01vZGVsXCJdOyB9KTtcblxudmFyIF9fZXh0ZW5kcyA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG52YXIgX19kZWNvcmF0ZSA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xuXG5cblxuXG52YXIgQ292ZXJWaWV3TW9kZWwgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKENvdmVyVmlld01vZGVsLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIENvdmVyVmlld01vZGVsKHByb3BzKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIuY2FsbCh0aGlzLCBwcm9wcykgfHwgdGhpcztcbiAgICB9XG4gICAgQ292ZXJWaWV3TW9kZWwucHJvdG90eXBlLmdldE1vZGVsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLm1vZGVsLnN1cnZleSA9IHRoaXMuc3VydmV5O1xuICAgICAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgICB9O1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QodnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiUHJvcFwiXSkoKVxuICAgIF0sIENvdmVyVmlld01vZGVsLnByb3RvdHlwZSwgXCJtb2RlbFwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QodnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiUHJvcFwiXSkoKVxuICAgIF0sIENvdmVyVmlld01vZGVsLnByb3RvdHlwZSwgXCJzdXJ2ZXlcIiwgdm9pZCAwKTtcbiAgICBDb3ZlclZpZXdNb2RlbCA9IF9fZGVjb3JhdGUoW1xuICAgICAgICB2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJDb21wb25lbnRcIl1cbiAgICBdLCBDb3ZlclZpZXdNb2RlbCk7XG4gICAgcmV0dXJuIENvdmVyVmlld01vZGVsO1xufShfYmFzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiQmFzZVZ1ZVwiXSkpO1xuXG52dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0LmEuY29tcG9uZW50KFwic3YtY292ZXJcIiwgQ292ZXJWaWV3TW9kZWwpO1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChDb3ZlclZpZXdNb2RlbCk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2NvbXBvbmVudHMvZHJvcGRvd24vZHJvcGRvd24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyPz9yZWYtLTAhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NyYy92dWUvY29tcG9uZW50cy9kcm9wZG93bi9kcm9wZG93bi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBEcm9wZG93bkNvbXBvbmVudCwgZGVmYXVsdCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJEcm9wZG93bkNvbXBvbmVudFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIERyb3Bkb3duQ29tcG9uZW50OyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZSAqLyBcInZ1ZVwiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubih2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlLXByb3BlcnR5LWRlY29yYXRvciAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IvbGliL2luZGV4LmpzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHN1cnZleV9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBzdXJ2ZXktY29yZSAqLyBcIi4vc3JjL2VudHJpZXMvY29yZS50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYmFzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vYmFzZSAqLyBcIi4vc3JjL3Z1ZS9iYXNlLnRzXCIpO1xudmFyIF9fZXh0ZW5kcyA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG52YXIgX19kZWNvcmF0ZSA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xuXG5cblxuXG52YXIgRHJvcGRvd25Db21wb25lbnQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKERyb3Bkb3duQ29tcG9uZW50LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIERyb3Bkb3duQ29tcG9uZW50KCkge1xuICAgICAgICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShEcm9wZG93bkNvbXBvbmVudC5wcm90b3R5cGUsIFwibW9kZWxcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLmRyb3Bkb3duTGlzdE1vZGVsO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgRHJvcGRvd25Db21wb25lbnQucHJvdG90eXBlLmdldE1vZGVsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMucXVlc3Rpb24uZHJvcGRvd25MaXN0TW9kZWwpIHtcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb24uZHJvcGRvd25MaXN0TW9kZWwgPSBuZXcgc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIkRyb3Bkb3duTGlzdE1vZGVsXCJdKHRoaXMucXVlc3Rpb24pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICAgIH07XG4gICAgRHJvcGRvd25Db21wb25lbnQucHJvdG90eXBlLmlucHV0Q2hhbmdlID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHRoaXMubW9kZWwuaW5wdXRTdHJpbmdSZW5kZXJlZCA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICB9O1xuICAgIERyb3Bkb3duQ29tcG9uZW50LnByb3RvdHlwZS5jbGljayA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIChfYSA9IHRoaXMubW9kZWwpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5vbkNsaWNrKGV2ZW50KTtcbiAgICB9O1xuICAgIERyb3Bkb3duQ29tcG9uZW50LnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIChfYSA9IHRoaXMubW9kZWwpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5vbkNsZWFyKGV2ZW50KTtcbiAgICB9O1xuICAgIERyb3Bkb3duQ29tcG9uZW50LnByb3RvdHlwZS5rZXloYW5kbGVyID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgKF9hID0gdGhpcy5tb2RlbCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmtleUhhbmRsZXIoZXZlbnQpO1xuICAgIH07XG4gICAgRHJvcGRvd25Db21wb25lbnQucHJvdG90eXBlLmJsdXIgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICAoX2EgPSB0aGlzLm1vZGVsKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eub25CbHVyKGV2ZW50KTtcbiAgICAgICAgdGhpcy51cGRhdGVJbnB1dERvbUVsZW1lbnQoKTtcbiAgICB9O1xuICAgIERyb3Bkb3duQ29tcG9uZW50LnByb3RvdHlwZS5mb2N1cyA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIChfYSA9IHRoaXMubW9kZWwpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5vbkZvY3VzKGV2ZW50KTtcbiAgICB9O1xuICAgIERyb3Bkb3duQ29tcG9uZW50LnByb3RvdHlwZS5vbk1vdW50ZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuaW5wdXRFbGVtZW50ID0gdGhpcy4kcmVmc1tcImlucHV0RWxlbWVudFwiXTtcbiAgICAgICAgdGhpcy51cGRhdGVJbnB1dERvbUVsZW1lbnQoKTtcbiAgICB9O1xuICAgIERyb3Bkb3duQ29tcG9uZW50LnByb3RvdHlwZS5vblVwZGF0ZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMudXBkYXRlSW5wdXREb21FbGVtZW50KCk7XG4gICAgfTtcbiAgICBEcm9wZG93bkNvbXBvbmVudC5wcm90b3R5cGUudXBkYXRlSW5wdXREb21FbGVtZW50ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoISF0aGlzLmlucHV0RWxlbWVudCkge1xuICAgICAgICAgICAgdmFyIGNvbnRyb2wgPSB0aGlzLmlucHV0RWxlbWVudDtcbiAgICAgICAgICAgIHZhciBuZXdWYWx1ZSA9IHRoaXMubW9kZWwuaW5wdXRTdHJpbmdSZW5kZXJlZDtcbiAgICAgICAgICAgIGlmICghc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIkhlbHBlcnNcIl0uaXNUd29WYWx1ZUVxdWFscyhuZXdWYWx1ZSwgY29udHJvbC52YWx1ZSwgZmFsc2UsIHRydWUsIGZhbHNlKSkge1xuICAgICAgICAgICAgICAgIGNvbnRyb2wudmFsdWUgPSB0aGlzLm1vZGVsLmlucHV0U3RyaW5nUmVuZGVyZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QodnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiUHJvcFwiXSkoKVxuICAgIF0sIERyb3Bkb3duQ29tcG9uZW50LnByb3RvdHlwZSwgXCJxdWVzdGlvblwiLCB2b2lkIDApO1xuICAgIERyb3Bkb3duQ29tcG9uZW50ID0gX19kZWNvcmF0ZShbXG4gICAgICAgIHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIkNvbXBvbmVudFwiXVxuICAgIF0sIERyb3Bkb3duQ29tcG9uZW50KTtcbiAgICByZXR1cm4gRHJvcGRvd25Db21wb25lbnQ7XG59KF9iYXNlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJkZWZhdWx0XCJdKSk7XG5cbnZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jb21wb25lbnQoXCJzdi1kcm9wZG93blwiLCBEcm9wZG93bkNvbXBvbmVudCk7XG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKERyb3Bkb3duQ29tcG9uZW50KTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvY29tcG9uZW50cy9kcm9wZG93bi9vcHRpb24taXRlbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy90cy1sb2FkZXI/P3JlZi0tMCEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL3Z1ZS9jb21wb25lbnRzL2Ryb3Bkb3duL29wdGlvbi1pdGVtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IERyb3Bkb3duQ29tcG9uZW50LCBEcm9wZG93bk9wdGlvbkl0ZW0sIGRlZmF1bHQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiRHJvcGRvd25PcHRpb25JdGVtXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRHJvcGRvd25PcHRpb25JdGVtOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZSAqLyBcInZ1ZVwiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubih2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlLXByb3BlcnR5LWRlY29yYXRvciAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IvbGliL2luZGV4LmpzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9iYXNlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9iYXNlICovIFwiLi9zcmMvdnVlL2Jhc2UudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Ryb3Bkb3duX3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9kcm9wZG93bi52dWUgKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9kcm9wZG93bi9kcm9wZG93bi52dWVcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJEcm9wZG93bkNvbXBvbmVudFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9kcm9wZG93bl92dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcIkRyb3Bkb3duQ29tcG9uZW50XCJdOyB9KTtcblxudmFyIF9fZXh0ZW5kcyA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG52YXIgX19kZWNvcmF0ZSA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xuXG5cblxuXG52YXIgRHJvcGRvd25PcHRpb25JdGVtID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhEcm9wZG93bk9wdGlvbkl0ZW0sIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gRHJvcGRvd25PcHRpb25JdGVtKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICBpZiAoIV90aGlzLml0ZW0ubG9jVGV4dClcbiAgICAgICAgICAgIHJldHVybiBfdGhpcztcbiAgICAgICAgdmFyIHNlbGYgPSBfdGhpcztcbiAgICAgICAgX3RoaXMuaXRlbS5sb2NUZXh0Lm9uQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHNlbGYuJGZvcmNlVXBkYXRlKCk7XG4gICAgICAgIH07XG4gICAgICAgIF90aGlzLml0ZW0ubG9jVGV4dC5vbkNoYW5nZWQoKTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBEcm9wZG93bk9wdGlvbkl0ZW0ucHJvdG90eXBlLmdldE1vZGVsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pdGVtO1xuICAgIH07XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdCh2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJQcm9wXCJdKSgpXG4gICAgXSwgRHJvcGRvd25PcHRpb25JdGVtLnByb3RvdHlwZSwgXCJpdGVtXCIsIHZvaWQgMCk7XG4gICAgRHJvcGRvd25PcHRpb25JdGVtID0gX19kZWNvcmF0ZShbXG4gICAgICAgIHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIkNvbXBvbmVudFwiXVxuICAgIF0sIERyb3Bkb3duT3B0aW9uSXRlbSk7XG4gICAgcmV0dXJuIERyb3Bkb3duT3B0aW9uSXRlbTtcbn0oX2Jhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIkJhc2VWdWVcIl0pKTtcblxudnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNvbXBvbmVudChcInN2LWRyb3Bkb3duLW9wdGlvbi1pdGVtXCIsIERyb3Bkb3duT3B0aW9uSXRlbSk7XG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKERyb3Bkb3duT3B0aW9uSXRlbSk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2NvbXBvbmVudHMvZmlsZS1hY3Rpb25zL2ZpbGUtY2hvb3NlLWJ1dHRvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL2NvbXBvbmVudHMvZmlsZS1hY3Rpb25zL2ZpbGUtY2hvb3NlLWJ1dHRvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEZpbGVDaG9vc2VCdXR0b24sIGRlZmF1bHQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiRmlsZUNob29zZUJ1dHRvblwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEZpbGVDaG9vc2VCdXR0b247IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlICovIFwidnVlXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB2dWUtcHJvcGVydHktZGVjb3JhdG9yICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLXByb3BlcnR5LWRlY29yYXRvci9saWIvaW5kZXguanNcIik7XG52YXIgX19leHRlbmRzID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbnZhciBfX2RlY29yYXRlID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn07XG5cblxudmFyIEZpbGVDaG9vc2VCdXR0b24gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEZpbGVDaG9vc2VCdXR0b24sIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gRmlsZUNob29zZUJ1dHRvbigpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRmlsZUNob29zZUJ1dHRvbi5wcm90b3R5cGUsIFwicXVlc3Rpb25cIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAodGhpcy5pdGVtICYmIHRoaXMuaXRlbS5kYXRhLnF1ZXN0aW9uKSB8fCB0aGlzLmRhdGEucXVlc3Rpb247XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlByb3BcIl0pKClcbiAgICBdLCBGaWxlQ2hvb3NlQnV0dG9uLnByb3RvdHlwZSwgXCJkYXRhXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdCh2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJQcm9wXCJdKSgpXG4gICAgXSwgRmlsZUNob29zZUJ1dHRvbi5wcm90b3R5cGUsIFwiaXRlbVwiLCB2b2lkIDApO1xuICAgIEZpbGVDaG9vc2VCdXR0b24gPSBfX2RlY29yYXRlKFtcbiAgICAgICAgdnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiQ29tcG9uZW50XCJdXG4gICAgXSwgRmlsZUNob29zZUJ1dHRvbik7XG4gICAgcmV0dXJuIEZpbGVDaG9vc2VCdXR0b247XG59KHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYSkpO1xuXG52dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY29tcG9uZW50KFwic3YtZmlsZS1jaG9vc2UtYnRuXCIsIEZpbGVDaG9vc2VCdXR0b24pO1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChGaWxlQ2hvb3NlQnV0dG9uKTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvY29tcG9uZW50cy9saXN0L2xpc3QtaXRlbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy90cy1sb2FkZXI/P3JlZi0tMCEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL3Z1ZS9jb21wb25lbnRzL2xpc3QvbGlzdC1pdGVtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IExpc3QsIExpc3RJdGVtLCBkZWZhdWx0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkxpc3RJdGVtXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gTGlzdEl0ZW07IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlICovIFwidnVlXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB2dWUtcHJvcGVydHktZGVjb3JhdG9yICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLXByb3BlcnR5LWRlY29yYXRvci9saWIvaW5kZXguanNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Jhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL2Jhc2UgKi8gXCIuL3NyYy92dWUvYmFzZS50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbGlzdF92dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vbGlzdC52dWUgKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9saXN0L2xpc3QudnVlXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiTGlzdFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9saXN0X3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiTGlzdFwiXTsgfSk7XG5cbnZhciBfX2V4dGVuZHMgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xudmFyIF9fZGVjb3JhdGUgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufTtcblxuXG5cblxudmFyIExpc3RJdGVtID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhMaXN0SXRlbSwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBMaXN0SXRlbSgpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgfVxuICAgIExpc3RJdGVtLnByb3RvdHlwZS5nZXRNb2RlbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlbTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShMaXN0SXRlbS5wcm90b3R5cGUsIFwiZWxlbWVudElkXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gKF9hID0gdGhpcy5pdGVtKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZWxlbWVudElkO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgTGlzdEl0ZW0ucHJvdG90eXBlLmNsaWNrID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHRoaXMubW9kZWwub25JdGVtQ2xpY2sodGhpcy5pdGVtKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfTtcbiAgICBMaXN0SXRlbS5wcm90b3R5cGUub25Nb3VudGVkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLm1vZGVsLm9uTGFzdEl0ZW1SZW5kZWQodGhpcy5pdGVtKTtcbiAgICB9O1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QodnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiUHJvcFwiXSkoKVxuICAgIF0sIExpc3RJdGVtLnByb3RvdHlwZSwgXCJpdGVtXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdCh2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJQcm9wXCJdKSgpXG4gICAgXSwgTGlzdEl0ZW0ucHJvdG90eXBlLCBcIm1vZGVsXCIsIHZvaWQgMCk7XG4gICAgTGlzdEl0ZW0gPSBfX2RlY29yYXRlKFtcbiAgICAgICAgdnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiQ29tcG9uZW50XCJdXG4gICAgXSwgTGlzdEl0ZW0pO1xuICAgIHJldHVybiBMaXN0SXRlbTtcbn0oX2Jhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIkJhc2VWdWVcIl0pKTtcblxudnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNvbXBvbmVudChcInN2LWxpc3QtaXRlbVwiLCBMaXN0SXRlbSk7XG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKExpc3RJdGVtKTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvY29tcG9uZW50cy9saXN0L2xpc3QudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL2NvbXBvbmVudHMvbGlzdC9saXN0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBMaXN0SXRlbSwgTGlzdCwgZGVmYXVsdCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJMaXN0XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gTGlzdDsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB2dWUgKi8gXCJ2dWVcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4odnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9pbmRleC5qc1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYmFzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vYmFzZSAqLyBcIi4vc3JjL3Z1ZS9iYXNlLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9saXN0X2l0ZW1fdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2xpc3QtaXRlbS52dWUgKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9saXN0L2xpc3QtaXRlbS52dWVcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJMaXN0SXRlbVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9saXN0X2l0ZW1fdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJMaXN0SXRlbVwiXTsgfSk7XG5cbnZhciBfX2V4dGVuZHMgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xudmFyIF9fZGVjb3JhdGUgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufTtcblxuXG5cblxudmFyIExpc3QgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKExpc3QsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gTGlzdCgpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgfVxuICAgIExpc3QucHJvdG90eXBlLmdldE1vZGVsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgICB9O1xuICAgIExpc3QucHJvdG90eXBlLmNoYW5nZSA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICB0aGlzLm1vZGVsLmZpbHRlclN0cmluZyA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICB9O1xuICAgIExpc3QucHJvdG90eXBlLmtleXVwID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHRoaXMubW9kZWwuZmlsdGVyU3RyaW5nID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgICAgICB0aGlzLm1vZGVsLmdvVG9JdGVtcyhldmVudCk7XG4gICAgfTtcbiAgICBMaXN0LnByb3RvdHlwZS5tb3VzZU1vdmUgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5tb2RlbC5vbk1vdXNlTW92ZShldmVudCk7XG4gICAgfTtcbiAgICBMaXN0LnByb3RvdHlwZS5vbk1vdW50ZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBsaXN0Q29udGFpbmVyRWxlbWVudCA9IHRoaXMuJHJlZnNbXCJsaXN0Q29udGFpbmVyRWxlbWVudFwiXTtcbiAgICAgICAgdGhpcy5tb2RlbC5pbml0TGlzdENvbnRhaW5lckh0bWxFbGVtZW50KGxpc3RDb250YWluZXJFbGVtZW50KTtcbiAgICB9O1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QodnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiUHJvcFwiXSkoKVxuICAgIF0sIExpc3QucHJvdG90eXBlLCBcIm1vZGVsXCIsIHZvaWQgMCk7XG4gICAgTGlzdCA9IF9fZGVjb3JhdGUoW1xuICAgICAgICB2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJDb21wb25lbnRcIl1cbiAgICBdLCBMaXN0KTtcbiAgICByZXR1cm4gTGlzdDtcbn0oX2Jhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIkJhc2VWdWVcIl0pKTtcblxudnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNvbXBvbmVudChcInN2LWxpc3RcIiwgTGlzdCk7XG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKExpc3QpO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9jb21wb25lbnRzL2xvYWRpbmctaW5kaWNhdG9yLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL2NvbXBvbmVudHMvbG9hZGluZy1pbmRpY2F0b3IudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogTG9hZGluZ0luZGljYXRvckNvbXBvbmVudCwgZGVmYXVsdCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJMb2FkaW5nSW5kaWNhdG9yQ29tcG9uZW50XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gTG9hZGluZ0luZGljYXRvckNvbXBvbmVudDsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlLXByb3BlcnR5LWRlY29yYXRvciAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IvbGliL2luZGV4LmpzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlICovIFwidnVlXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fKTtcbnZhciBfX2V4dGVuZHMgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xudmFyIF9fZGVjb3JhdGUgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufTtcblxuXG52YXIgTG9hZGluZ0luZGljYXRvckNvbXBvbmVudCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoTG9hZGluZ0luZGljYXRvckNvbXBvbmVudCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBMb2FkaW5nSW5kaWNhdG9yQ29tcG9uZW50KCkge1xuICAgICAgICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgfVxuICAgIExvYWRpbmdJbmRpY2F0b3JDb21wb25lbnQgPSBfX2RlY29yYXRlKFtcbiAgICAgICAgdnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiQ29tcG9uZW50XCJdXG4gICAgXSwgTG9hZGluZ0luZGljYXRvckNvbXBvbmVudCk7XG4gICAgcmV0dXJuIExvYWRpbmdJbmRpY2F0b3JDb21wb25lbnQ7XG59KHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQuYSkpO1xuXG52dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0LmEuY29tcG9uZW50KFwic3YtbG9hZGluZy1pbmRpY2F0b3JcIiwgTG9hZGluZ0luZGljYXRvckNvbXBvbmVudCk7XG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKExvYWRpbmdJbmRpY2F0b3JDb21wb25lbnQpO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9jb21wb25lbnRzL21hdHJpeC1hY3Rpb25zL2RldGFpbC1idXR0b24vZGV0YWlsLWJ1dHRvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyPz9yZWYtLTAhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NyYy92dWUvY29tcG9uZW50cy9tYXRyaXgtYWN0aW9ucy9kZXRhaWwtYnV0dG9uL2RldGFpbC1idXR0b24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFN1cnZleVF1ZXN0aW9uTWF0cml4RGV0YWlsQnV0dG9uLCBkZWZhdWx0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlN1cnZleVF1ZXN0aW9uTWF0cml4RGV0YWlsQnV0dG9uXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU3VydmV5UXVlc3Rpb25NYXRyaXhEZXRhaWxCdXR0b247IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlICovIFwidnVlXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB2dWUtcHJvcGVydHktZGVjb3JhdG9yICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLXByb3BlcnR5LWRlY29yYXRvci9saWIvaW5kZXguanNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Jhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uL2Jhc2UgKi8gXCIuL3NyYy92dWUvYmFzZS50c1wiKTtcbnZhciBfX2V4dGVuZHMgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xudmFyIF9fZGVjb3JhdGUgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufTtcblxuXG5cbnZhciBTdXJ2ZXlRdWVzdGlvbk1hdHJpeERldGFpbEJ1dHRvbiA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoU3VydmV5UXVlc3Rpb25NYXRyaXhEZXRhaWxCdXR0b24sIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gU3VydmV5UXVlc3Rpb25NYXRyaXhEZXRhaWxCdXR0b24oKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleVF1ZXN0aW9uTWF0cml4RGV0YWlsQnV0dG9uLnByb3RvdHlwZSwgXCJxdWVzdGlvblwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXRlbS5kYXRhLnF1ZXN0aW9uO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleVF1ZXN0aW9uTWF0cml4RGV0YWlsQnV0dG9uLnByb3RvdHlwZSwgXCJyb3dcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLml0ZW0uZGF0YS5yb3c7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBTdXJ2ZXlRdWVzdGlvbk1hdHJpeERldGFpbEJ1dHRvbi5wcm90b3R5cGUuZ2V0TW9kZWwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLml0ZW07XG4gICAgfTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlByb3BcIl0pKClcbiAgICBdLCBTdXJ2ZXlRdWVzdGlvbk1hdHJpeERldGFpbEJ1dHRvbi5wcm90b3R5cGUsIFwiaXRlbVwiLCB2b2lkIDApO1xuICAgIFN1cnZleVF1ZXN0aW9uTWF0cml4RGV0YWlsQnV0dG9uID0gX19kZWNvcmF0ZShbXG4gICAgICAgIHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIkNvbXBvbmVudFwiXVxuICAgIF0sIFN1cnZleVF1ZXN0aW9uTWF0cml4RGV0YWlsQnV0dG9uKTtcbiAgICByZXR1cm4gU3VydmV5UXVlc3Rpb25NYXRyaXhEZXRhaWxCdXR0b247XG59KF9iYXNlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJkZWZhdWx0XCJdKSk7XG5cbnZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jb21wb25lbnQoXCJzdi1tYXRyaXgtZGV0YWlsLWJ1dHRvblwiLCBTdXJ2ZXlRdWVzdGlvbk1hdHJpeERldGFpbEJ1dHRvbik7XG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKFN1cnZleVF1ZXN0aW9uTWF0cml4RGV0YWlsQnV0dG9uKTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvY29tcG9uZW50cy9tYXRyaXgtYWN0aW9ucy9kcmFnLWRyb3AtaWNvbi9kcmFnLWRyb3AtaWNvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy90cy1sb2FkZXI/P3JlZi0tMCEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL3Z1ZS9jb21wb25lbnRzL21hdHJpeC1hY3Rpb25zL2RyYWctZHJvcC1pY29uL2RyYWctZHJvcC1pY29uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFN1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pY0RyYWdEcm9wSWNvbiwgZGVmYXVsdCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJTdXJ2ZXlRdWVzdGlvbk1hdHJpeER5bmFtaWNEcmFnRHJvcEljb25cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBTdXJ2ZXlRdWVzdGlvbk1hdHJpeER5bmFtaWNEcmFnRHJvcEljb247IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlICovIFwidnVlXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB2dWUtcHJvcGVydHktZGVjb3JhdG9yICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLXByb3BlcnR5LWRlY29yYXRvci9saWIvaW5kZXguanNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Jhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uL2Jhc2UgKi8gXCIuL3NyYy92dWUvYmFzZS50c1wiKTtcbnZhciBfX2V4dGVuZHMgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xudmFyIF9fZGVjb3JhdGUgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufTtcblxuXG5cbnZhciBTdXJ2ZXlRdWVzdGlvbk1hdHJpeER5bmFtaWNEcmFnRHJvcEljb24gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFN1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pY0RyYWdEcm9wSWNvbiwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTdXJ2ZXlRdWVzdGlvbk1hdHJpeER5bmFtaWNEcmFnRHJvcEljb24oKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pY0RyYWdEcm9wSWNvbi5wcm90b3R5cGUsIFwicXVlc3Rpb25cIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLml0ZW0uZGF0YS5xdWVzdGlvbjtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFN1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pY0RyYWdEcm9wSWNvbi5wcm90b3R5cGUuZ2V0TW9kZWwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLml0ZW07XG4gICAgfTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlByb3BcIl0pKClcbiAgICBdLCBTdXJ2ZXlRdWVzdGlvbk1hdHJpeER5bmFtaWNEcmFnRHJvcEljb24ucHJvdG90eXBlLCBcIml0ZW1cIiwgdm9pZCAwKTtcbiAgICBTdXJ2ZXlRdWVzdGlvbk1hdHJpeER5bmFtaWNEcmFnRHJvcEljb24gPSBfX2RlY29yYXRlKFtcbiAgICAgICAgdnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiQ29tcG9uZW50XCJdXG4gICAgXSwgU3VydmV5UXVlc3Rpb25NYXRyaXhEeW5hbWljRHJhZ0Ryb3BJY29uKTtcbiAgICByZXR1cm4gU3VydmV5UXVlc3Rpb25NYXRyaXhEeW5hbWljRHJhZ0Ryb3BJY29uO1xufShfYmFzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiZGVmYXVsdFwiXSkpO1xuXG52dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY29tcG9uZW50KFwic3YtbWF0cml4LWRyYWctZHJvcC1pY29uXCIsIFN1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pY0RyYWdEcm9wSWNvbik7XG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKFN1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pY0RyYWdEcm9wSWNvbik7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2NvbXBvbmVudHMvbWF0cml4LWFjdGlvbnMvcmVtb3ZlLWJ1dHRvbi9yZW1vdmUtYnV0dG9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy90cy1sb2FkZXI/P3JlZi0tMCEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL3Z1ZS9jb21wb25lbnRzL21hdHJpeC1hY3Rpb25zL3JlbW92ZS1idXR0b24vcmVtb3ZlLWJ1dHRvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogU3VydmV5UXVlc3Rpb25NYXRyaXhEeW5hbWljUmVtb3ZlQnV0dG9uLCBkZWZhdWx0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlN1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pY1JlbW92ZUJ1dHRvblwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFN1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pY1JlbW92ZUJ1dHRvbjsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB2dWUgKi8gXCJ2dWVcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4odnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9pbmRleC5qc1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYmFzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vLi4vYmFzZSAqLyBcIi4vc3JjL3Z1ZS9iYXNlLnRzXCIpO1xudmFyIF9fZXh0ZW5kcyA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG52YXIgX19kZWNvcmF0ZSA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xuXG5cblxudmFyIFN1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pY1JlbW92ZUJ1dHRvbiA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoU3VydmV5UXVlc3Rpb25NYXRyaXhEeW5hbWljUmVtb3ZlQnV0dG9uLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFN1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pY1JlbW92ZUJ1dHRvbigpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5UXVlc3Rpb25NYXRyaXhEeW5hbWljUmVtb3ZlQnV0dG9uLnByb3RvdHlwZSwgXCJxdWVzdGlvblwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXRlbS5kYXRhLnF1ZXN0aW9uO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pY1JlbW92ZUJ1dHRvbi5wcm90b3R5cGUsIFwicm93XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pdGVtLmRhdGEucm93O1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgU3VydmV5UXVlc3Rpb25NYXRyaXhEeW5hbWljUmVtb3ZlQnV0dG9uLnByb3RvdHlwZS5nZXRNb2RlbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlbTtcbiAgICB9O1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QodnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiUHJvcFwiXSkoKVxuICAgIF0sIFN1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pY1JlbW92ZUJ1dHRvbi5wcm90b3R5cGUsIFwiaXRlbVwiLCB2b2lkIDApO1xuICAgIFN1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pY1JlbW92ZUJ1dHRvbiA9IF9fZGVjb3JhdGUoW1xuICAgICAgICB2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJDb21wb25lbnRcIl1cbiAgICBdLCBTdXJ2ZXlRdWVzdGlvbk1hdHJpeER5bmFtaWNSZW1vdmVCdXR0b24pO1xuICAgIHJldHVybiBTdXJ2ZXlRdWVzdGlvbk1hdHJpeER5bmFtaWNSZW1vdmVCdXR0b247XG59KF9iYXNlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJkZWZhdWx0XCJdKSk7XG5cbnZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jb21wb25lbnQoXCJzdi1tYXRyaXgtcmVtb3ZlLWJ1dHRvblwiLCBTdXJ2ZXlRdWVzdGlvbk1hdHJpeER5bmFtaWNSZW1vdmVCdXR0b24pO1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChTdXJ2ZXlRdWVzdGlvbk1hdHJpeER5bmFtaWNSZW1vdmVCdXR0b24pO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9jb21wb25lbnRzL25vdGlmaWVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL2NvbXBvbmVudHMvbm90aWZpZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogTm90aWZpZXJDb21wb25lbnQsIGRlZmF1bHQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiTm90aWZpZXJDb21wb25lbnRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBOb3RpZmllckNvbXBvbmVudDsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB2dWUgKi8gXCJ2dWVcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4odnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9pbmRleC5qc1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYmFzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vYmFzZSAqLyBcIi4vc3JjL3Z1ZS9iYXNlLnRzXCIpO1xudmFyIF9fZXh0ZW5kcyA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG52YXIgX19kZWNvcmF0ZSA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xuXG5cblxudmFyIE5vdGlmaWVyQ29tcG9uZW50ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhOb3RpZmllckNvbXBvbmVudCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBOb3RpZmllckNvbXBvbmVudCgpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgfVxuICAgIE5vdGlmaWVyQ29tcG9uZW50LnByb3RvdHlwZS5nZXRNb2RlbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gICAgfTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlByb3BcIl0pKClcbiAgICBdLCBOb3RpZmllckNvbXBvbmVudC5wcm90b3R5cGUsIFwibW9kZWxcIiwgdm9pZCAwKTtcbiAgICBOb3RpZmllckNvbXBvbmVudCA9IF9fZGVjb3JhdGUoW1xuICAgICAgICB2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJDb21wb25lbnRcIl1cbiAgICBdLCBOb3RpZmllckNvbXBvbmVudCk7XG4gICAgcmV0dXJuIE5vdGlmaWVyQ29tcG9uZW50O1xufShfYmFzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiQmFzZVZ1ZVwiXSkpO1xuXG52dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY29tcG9uZW50KFwic3Ytbm90aWZpZXJcIiwgTm90aWZpZXJDb21wb25lbnQpO1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChOb3RpZmllckNvbXBvbmVudCk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2NvbXBvbmVudHMvcGFuZWxkeW5hbWljLWFjdGlvbnMvcGFuZWxkeW5hbWljLWFkZC1idG4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyPz9yZWYtLTAhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NyYy92dWUvY29tcG9uZW50cy9wYW5lbGR5bmFtaWMtYWN0aW9ucy9wYW5lbGR5bmFtaWMtYWRkLWJ0bi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBQYW5lbGR5bmFtaWNBY3Rpb24sIFBhbmVsRHluYW1pY0FkZEJ0biwgZGVmYXVsdCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJQYW5lbGR5bmFtaWNBY3Rpb25cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBQYW5lbGR5bmFtaWNBY3Rpb247IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlBhbmVsRHluYW1pY0FkZEJ0blwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFBhbmVsRHluYW1pY0FkZEJ0bjsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB2dWUgKi8gXCJ2dWVcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4odnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9pbmRleC5qc1wiKTtcbnZhciBfX2V4dGVuZHMgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xudmFyIF9fZGVjb3JhdGUgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufTtcblxuXG52YXIgUGFuZWxkeW5hbWljQWN0aW9uID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhQYW5lbGR5bmFtaWNBY3Rpb24sIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gUGFuZWxkeW5hbWljQWN0aW9uKCkge1xuICAgICAgICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQYW5lbGR5bmFtaWNBY3Rpb24ucHJvdG90eXBlLCBcInF1ZXN0aW9uXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gKHRoaXMuaXRlbSAmJiB0aGlzLml0ZW0uZGF0YS5xdWVzdGlvbikgfHwgdGhpcy5kYXRhLnF1ZXN0aW9uO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdCh2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJQcm9wXCJdKSgpXG4gICAgXSwgUGFuZWxkeW5hbWljQWN0aW9uLnByb3RvdHlwZSwgXCJkYXRhXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdCh2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJQcm9wXCJdKSgpXG4gICAgXSwgUGFuZWxkeW5hbWljQWN0aW9uLnByb3RvdHlwZSwgXCJpdGVtXCIsIHZvaWQgMCk7XG4gICAgcmV0dXJuIFBhbmVsZHluYW1pY0FjdGlvbjtcbn0odnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hKSk7XG5cbnZhciBQYW5lbER5bmFtaWNBZGRCdG4gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFBhbmVsRHluYW1pY0FkZEJ0biwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBQYW5lbER5bmFtaWNBZGRCdG4oKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICB9XG4gICAgUGFuZWxEeW5hbWljQWRkQnRuLnByb3RvdHlwZS5hZGRQYW5lbENsaWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnF1ZXN0aW9uLmFkZFBhbmVsVUkoKTtcbiAgICB9O1xuICAgIFBhbmVsRHluYW1pY0FkZEJ0biA9IF9fZGVjb3JhdGUoW1xuICAgICAgICB2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJDb21wb25lbnRcIl1cbiAgICBdLCBQYW5lbER5bmFtaWNBZGRCdG4pO1xuICAgIHJldHVybiBQYW5lbER5bmFtaWNBZGRCdG47XG59KFBhbmVsZHluYW1pY0FjdGlvbikpO1xuXG52dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY29tcG9uZW50KFwic3YtcGFuZWxkeW5hbWljLWFkZC1idG5cIiwgUGFuZWxEeW5hbWljQWRkQnRuKTtcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoUGFuZWxEeW5hbWljQWRkQnRuKTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvY29tcG9uZW50cy9wYW5lbGR5bmFtaWMtYWN0aW9ucy9wYW5lbGR5bmFtaWMtbmV4dC1idG4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL2NvbXBvbmVudHMvcGFuZWxkeW5hbWljLWFjdGlvbnMvcGFuZWxkeW5hbWljLW5leHQtYnRuLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBQYW5lbER5bmFtaWNOZXh0QnRuLCBkZWZhdWx0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlBhbmVsRHluYW1pY05leHRCdG5cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBQYW5lbER5bmFtaWNOZXh0QnRuOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZSAqLyBcInZ1ZVwiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubih2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlLXByb3BlcnR5LWRlY29yYXRvciAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IvbGliL2luZGV4LmpzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9wYW5lbGR5bmFtaWNfYWRkX2J0bl92dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcGFuZWxkeW5hbWljLWFkZC1idG4udnVlICovIFwiLi9zcmMvdnVlL2NvbXBvbmVudHMvcGFuZWxkeW5hbWljLWFjdGlvbnMvcGFuZWxkeW5hbWljLWFkZC1idG4udnVlXCIpO1xudmFyIF9fZXh0ZW5kcyA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG52YXIgX19kZWNvcmF0ZSA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xuXG5cblxudmFyIFBhbmVsRHluYW1pY05leHRCdG4gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFBhbmVsRHluYW1pY05leHRCdG4sIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gUGFuZWxEeW5hbWljTmV4dEJ0bigpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIH1cbiAgICBQYW5lbER5bmFtaWNOZXh0QnRuLnByb3RvdHlwZS5uZXh0UGFuZWxDbGljayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5xdWVzdGlvbi5nb1RvTmV4dFBhbmVsKCk7XG4gICAgfTtcbiAgICBQYW5lbER5bmFtaWNOZXh0QnRuID0gX19kZWNvcmF0ZShbXG4gICAgICAgIHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIkNvbXBvbmVudFwiXVxuICAgIF0sIFBhbmVsRHluYW1pY05leHRCdG4pO1xuICAgIHJldHVybiBQYW5lbER5bmFtaWNOZXh0QnRuO1xufShfcGFuZWxkeW5hbWljX2FkZF9idG5fdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJQYW5lbGR5bmFtaWNBY3Rpb25cIl0pKTtcblxudnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNvbXBvbmVudChcInN2LXBhbmVsZHluYW1pYy1uZXh0LWJ0blwiLCBQYW5lbER5bmFtaWNOZXh0QnRuKTtcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoUGFuZWxEeW5hbWljTmV4dEJ0bik7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2NvbXBvbmVudHMvcGFuZWxkeW5hbWljLWFjdGlvbnMvcGFuZWxkeW5hbWljLXByZXYtYnRuLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy90cy1sb2FkZXI/P3JlZi0tMCEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL3Z1ZS9jb21wb25lbnRzL3BhbmVsZHluYW1pYy1hY3Rpb25zL3BhbmVsZHluYW1pYy1wcmV2LWJ0bi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogUGFuZWxEeW5hbWljUHJldkJ0biwgZGVmYXVsdCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJQYW5lbER5bmFtaWNQcmV2QnRuXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUGFuZWxEeW5hbWljUHJldkJ0bjsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB2dWUgKi8gXCJ2dWVcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4odnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9pbmRleC5qc1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcGFuZWxkeW5hbWljX2FkZF9idG5fdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3BhbmVsZHluYW1pYy1hZGQtYnRuLnZ1ZSAqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL3BhbmVsZHluYW1pYy1hY3Rpb25zL3BhbmVsZHluYW1pYy1hZGQtYnRuLnZ1ZVwiKTtcbnZhciBfX2V4dGVuZHMgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xudmFyIF9fZGVjb3JhdGUgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufTtcblxuXG5cbnZhciBQYW5lbER5bmFtaWNQcmV2QnRuID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhQYW5lbER5bmFtaWNQcmV2QnRuLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFBhbmVsRHluYW1pY1ByZXZCdG4oKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICB9XG4gICAgUGFuZWxEeW5hbWljUHJldkJ0bi5wcm90b3R5cGUucHJldlBhbmVsQ2xpY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMucXVlc3Rpb24uZ29Ub1ByZXZQYW5lbCgpO1xuICAgIH07XG4gICAgUGFuZWxEeW5hbWljUHJldkJ0biA9IF9fZGVjb3JhdGUoW1xuICAgICAgICB2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJDb21wb25lbnRcIl1cbiAgICBdLCBQYW5lbER5bmFtaWNQcmV2QnRuKTtcbiAgICByZXR1cm4gUGFuZWxEeW5hbWljUHJldkJ0bjtcbn0oX3BhbmVsZHluYW1pY19hZGRfYnRuX3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiUGFuZWxkeW5hbWljQWN0aW9uXCJdKSk7XG5cbnZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jb21wb25lbnQoXCJzdi1wYW5lbGR5bmFtaWMtcHJldi1idG5cIiwgUGFuZWxEeW5hbWljUHJldkJ0bik7XG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKFBhbmVsRHluYW1pY1ByZXZCdG4pO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9jb21wb25lbnRzL3BhbmVsZHluYW1pYy1hY3Rpb25zL3BhbmVsZHluYW1pYy1wcm9ncmVzcy10ZXh0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL2NvbXBvbmVudHMvcGFuZWxkeW5hbWljLWFjdGlvbnMvcGFuZWxkeW5hbWljLXByb2dyZXNzLXRleHQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogUGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0LCBkZWZhdWx0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB2dWUgKi8gXCJ2dWVcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4odnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9pbmRleC5qc1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcGFuZWxkeW5hbWljX2FkZF9idG5fdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3BhbmVsZHluYW1pYy1hZGQtYnRuLnZ1ZSAqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL3BhbmVsZHluYW1pYy1hY3Rpb25zL3BhbmVsZHluYW1pYy1hZGQtYnRuLnZ1ZVwiKTtcbnZhciBfX2V4dGVuZHMgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xudmFyIF9fZGVjb3JhdGUgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufTtcblxuXG5cbnZhciBQYW5lbER5bmFtaWNQcm9ncmVzc1RleHQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBQYW5lbER5bmFtaWNQcm9ncmVzc1RleHQoKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICB9XG4gICAgUGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0ID0gX19kZWNvcmF0ZShbXG4gICAgICAgIHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIkNvbXBvbmVudFwiXVxuICAgIF0sIFBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dCk7XG4gICAgcmV0dXJuIFBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDtcbn0oX3BhbmVsZHluYW1pY19hZGRfYnRuX3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiUGFuZWxkeW5hbWljQWN0aW9uXCJdKSk7XG5cbnZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jb21wb25lbnQoXCJzdi1wYW5lbGR5bmFtaWMtcHJvZ3Jlc3MtdGV4dFwiLCBQYW5lbER5bmFtaWNQcm9ncmVzc1RleHQpO1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChQYW5lbER5bmFtaWNQcm9ncmVzc1RleHQpO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9jb21wb25lbnRzL3BhbmVsZHluYW1pYy1hY3Rpb25zL3BhbmVsZHluYW1pYy1yZW1vdmUtYnRuLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL2NvbXBvbmVudHMvcGFuZWxkeW5hbWljLWFjdGlvbnMvcGFuZWxkeW5hbWljLXJlbW92ZS1idG4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogUGFuZWxEeW5hbWljUmVtb3ZlQnV0dG9uLCBkZWZhdWx0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlBhbmVsRHluYW1pY1JlbW92ZUJ1dHRvblwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFBhbmVsRHluYW1pY1JlbW92ZUJ1dHRvbjsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB2dWUgKi8gXCJ2dWVcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4odnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9pbmRleC5qc1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcGFuZWxkeW5hbWljX2FkZF9idG5fdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3BhbmVsZHluYW1pYy1hZGQtYnRuLnZ1ZSAqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL3BhbmVsZHluYW1pYy1hY3Rpb25zL3BhbmVsZHluYW1pYy1hZGQtYnRuLnZ1ZVwiKTtcbnZhciBfX2V4dGVuZHMgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xudmFyIF9fZGVjb3JhdGUgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufTtcblxuXG5cbnZhciBQYW5lbER5bmFtaWNSZW1vdmVCdXR0b24gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFBhbmVsRHluYW1pY1JlbW92ZUJ1dHRvbiwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBQYW5lbER5bmFtaWNSZW1vdmVCdXR0b24oKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBhbmVsRHluYW1pY1JlbW92ZUJ1dHRvbi5wcm90b3R5cGUsIFwicGFuZWxcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAodGhpcy5pdGVtICYmIHRoaXMuaXRlbS5kYXRhLnBhbmVsKSB8fCB0aGlzLmRhdGEucGFuZWw7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBQYW5lbER5bmFtaWNSZW1vdmVCdXR0b24ucHJvdG90eXBlLnJlbW92ZVBhbmVsQ2xpY2sgPSBmdW5jdGlvbiAocGFuZWwpIHtcbiAgICAgICAgaWYgKCF0aGlzLnF1ZXN0aW9uLmlzSW5wdXRSZWFkT25seSkge1xuICAgICAgICAgICAgdGhpcy5xdWVzdGlvbi5yZW1vdmVQYW5lbFVJKHBhbmVsKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgUGFuZWxEeW5hbWljUmVtb3ZlQnV0dG9uID0gX19kZWNvcmF0ZShbXG4gICAgICAgIHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIkNvbXBvbmVudFwiXVxuICAgIF0sIFBhbmVsRHluYW1pY1JlbW92ZUJ1dHRvbik7XG4gICAgcmV0dXJuIFBhbmVsRHluYW1pY1JlbW92ZUJ1dHRvbjtcbn0oX3BhbmVsZHluYW1pY19hZGRfYnRuX3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiUGFuZWxkeW5hbWljQWN0aW9uXCJdKSk7XG5cbnZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jb21wb25lbnQoXCJzdi1wYW5lbGR5bmFtaWMtcmVtb3ZlLWJ0blwiLCBQYW5lbER5bmFtaWNSZW1vdmVCdXR0b24pO1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChQYW5lbER5bmFtaWNSZW1vdmVCdXR0b24pO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9jb21wb25lbnRzL3BvcHVwL3BvcHVwLWNvbnRhaW5lci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyPz9yZWYtLTAhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NyYy92dWUvY29tcG9uZW50cy9wb3B1cC9wb3B1cC1jb250YWluZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFBvcHVwQ29udGFpbmVyLCBzaG93TW9kYWwsIHNob3dEaWFsb2csIGRlZmF1bHQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUG9wdXBDb250YWluZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBQb3B1cENvbnRhaW5lcjsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic2hvd01vZGFsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc2hvd01vZGFsOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzaG93RGlhbG9nXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc2hvd0RpYWxvZzsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB2dWUgKi8gXCJ2dWVcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4odnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9pbmRleC5qc1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBzdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgc3VydmV5LWNvcmUgKi8gXCIuL3NyYy9lbnRyaWVzL2NvcmUudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Jhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL2Jhc2UgKi8gXCIuL3NyYy92dWUvYmFzZS50c1wiKTtcbnZhciBfX2V4dGVuZHMgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xudmFyIF9fZGVjb3JhdGUgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufTtcblxuXG5cblxudmFyIFBvcHVwQ29udGFpbmVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhQb3B1cENvbnRhaW5lciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBQb3B1cENvbnRhaW5lcigpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIH1cbiAgICBQb3B1cENvbnRhaW5lci5wcm90b3R5cGUuZ2V0TW9kZWwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICAgIH07XG4gICAgUG9wdXBDb250YWluZXIucHJvdG90eXBlLmNsaWNrSW5zaWRlID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH07XG4gICAgUG9wdXBDb250YWluZXIucHJvdG90eXBlLm9uVXBkYXRlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnByZXZJc1Zpc2libGUgJiYgdGhpcy5tb2RlbC5pc1Zpc2libGUpIHtcbiAgICAgICAgICAgIHRoaXMubW9kZWwudXBkYXRlT25TaG93aW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcmV2SXNWaXNpYmxlID0gdGhpcy5tb2RlbC5pc1Zpc2libGU7XG4gICAgfTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlByb3BcIl0pKClcbiAgICBdLCBQb3B1cENvbnRhaW5lci5wcm90b3R5cGUsIFwibW9kZWxcIiwgdm9pZCAwKTtcbiAgICBQb3B1cENvbnRhaW5lciA9IF9fZGVjb3JhdGUoW1xuICAgICAgICB2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJDb21wb25lbnRcIl1cbiAgICBdLCBQb3B1cENvbnRhaW5lcik7XG4gICAgcmV0dXJuIFBvcHVwQ29udGFpbmVyO1xufShfYmFzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiQmFzZVZ1ZVwiXSkpO1xuXG4vLyByZXBsYWNlIHRvIHNob3dEaWFsb2cgdGhlbiBkZWxldGVcbmZ1bmN0aW9uIHNob3dNb2RhbChjb21wb25lbnROYW1lLCBkYXRhLCBvbkFwcGx5LCBvbkNhbmNlbCwgY3NzQ2xhc3MsIHRpdGxlLCBkaXNwbGF5TW9kZSkge1xuICAgIGlmIChkaXNwbGF5TW9kZSA9PT0gdm9pZCAwKSB7IGRpc3BsYXlNb2RlID0gXCJwb3B1cFwiOyB9XG4gICAgdmFyIG9wdGlvbnMgPSBPYmplY3Qoc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcImNyZWF0ZURpYWxvZ09wdGlvbnNcIl0pKGNvbXBvbmVudE5hbWUsIGRhdGEsIG9uQXBwbHksIG9uQ2FuY2VsLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgY3NzQ2xhc3MsIHRpdGxlLCBkaXNwbGF5TW9kZSk7XG4gICAgcmV0dXJuIHNob3dEaWFsb2cob3B0aW9ucyk7XG59XG5mdW5jdGlvbiBzaG93RGlhbG9nKGRpYWxvZ09wdGlvbnMsIHJvb3RFbGVtZW50KSB7XG4gICAgZGlhbG9nT3B0aW9ucy5vbkhpZGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHBvcHVwLiRkZXN0cm95KCk7XG4gICAgICAgIHBvcHVwVmlld01vZGVsLmRpc3Bvc2UoKTtcbiAgICB9O1xuICAgIHZhciBwb3B1cFZpZXdNb2RlbCA9IE9iamVjdChzdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiY3JlYXRlUG9wdXBNb2RhbFZpZXdNb2RlbFwiXSkoZGlhbG9nT3B0aW9ucywgcm9vdEVsZW1lbnQpO1xuICAgIHZhciBwb3B1cCA9IG5ldyBQb3B1cENvbnRhaW5lcih7XG4gICAgICAgIGVsOiBwb3B1cFZpZXdNb2RlbC5jb250YWluZXIuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSksXG4gICAgICAgIHByb3BzRGF0YTogeyBtb2RlbDogcG9wdXBWaWV3TW9kZWwgfSxcbiAgICB9KTtcbiAgICBwb3B1cFZpZXdNb2RlbC5tb2RlbC5pc1Zpc2libGUgPSB0cnVlO1xuICAgIHJldHVybiBwb3B1cFZpZXdNb2RlbDtcbn1cbnN1cnZleV9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJzZXR0aW5nc1wiXS5zaG93TW9kYWwgPSBzaG93TW9kYWw7XG5zdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wic2V0dGluZ3NcIl0uc2hvd0RpYWxvZyA9IHNob3dEaWFsb2c7XG52dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY29tcG9uZW50KFwic3YtcG9wdXAtY29udGFpbmVyXCIsIFBvcHVwQ29udGFpbmVyKTtcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoUG9wdXBDb250YWluZXIpO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9jb21wb25lbnRzL3BvcHVwL3BvcHVwLXBvaW50ZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy90cy1sb2FkZXI/P3JlZi0tMCEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL3Z1ZS9jb21wb25lbnRzL3BvcHVwL3BvcHVwLXBvaW50ZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBQb3B1cFBvaW50ZXIsIGRlZmF1bHQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUG9wdXBQb2ludGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUG9wdXBQb2ludGVyOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZSAqLyBcInZ1ZVwiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubih2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlLXByb3BlcnR5LWRlY29yYXRvciAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IvbGliL2luZGV4LmpzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9iYXNlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9iYXNlICovIFwiLi9zcmMvdnVlL2Jhc2UudHNcIik7XG52YXIgX19leHRlbmRzID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbnZhciBfX2RlY29yYXRlID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn07XG5cblxuXG52YXIgUG9wdXBQb2ludGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhQb3B1cFBvaW50ZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gUG9wdXBQb2ludGVyKCkge1xuICAgICAgICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgfVxuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QodnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiUHJvcFwiXSkoKVxuICAgIF0sIFBvcHVwUG9pbnRlci5wcm90b3R5cGUsIFwibW9kZWxcIiwgdm9pZCAwKTtcbiAgICBQb3B1cFBvaW50ZXIgPSBfX2RlY29yYXRlKFtcbiAgICAgICAgdnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiQ29tcG9uZW50XCJdXG4gICAgXSwgUG9wdXBQb2ludGVyKTtcbiAgICByZXR1cm4gUG9wdXBQb2ludGVyO1xufShfYmFzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiQmFzZVZ1ZVwiXSkpO1xuXG52dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY29tcG9uZW50KFwicG9wdXAtcG9pbnRlclwiLCBQb3B1cFBvaW50ZXIpO1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChQb3B1cFBvaW50ZXIpO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9jb21wb25lbnRzL3BvcHVwL3BvcHVwLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL2NvbXBvbmVudHMvcG9wdXAvcG9wdXAudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogUG9wdXAsIGRlZmF1bHQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUG9wdXBcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBQb3B1cDsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB2dWUgKi8gXCJ2dWVcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4odnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9pbmRleC5qc1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBzdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgc3VydmV5LWNvcmUgKi8gXCIuL3NyYy9lbnRyaWVzL2NvcmUudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Jhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL2Jhc2UgKi8gXCIuL3NyYy92dWUvYmFzZS50c1wiKTtcbnZhciBfX2V4dGVuZHMgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xudmFyIF9fZGVjb3JhdGUgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufTtcblxuXG5cblxudmFyIFBvcHVwID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhQb3B1cCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBQb3B1cChwcm9wcykge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBwcm9wcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMucG9wdXBWaWV3TW9kZWwgPSBPYmplY3Qoc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcImNyZWF0ZVBvcHVwVmlld01vZGVsXCJdKShfdGhpcy5tb2RlbCwgdW5kZWZpbmVkKTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBQb3B1cC5wcm90b3R5cGUuZ2V0TW9kZWwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICAgIH07XG4gICAgUG9wdXAucHJvdG90eXBlLm9uTW91bnRlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGNvbnRhaW5lciA9IHRoaXMuJGVsO1xuICAgICAgICB0aGlzLnBvcHVwVmlld01vZGVsLnNldENvbXBvbmVudEVsZW1lbnQoY29udGFpbmVyLCB0aGlzLmdldFRhcmdldCA/IHRoaXMuZ2V0VGFyZ2V0KGNvbnRhaW5lcikgOiB1bmRlZmluZWQpO1xuICAgIH07XG4gICAgUG9wdXAucHJvdG90eXBlLmRlc3Ryb3llZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5wb3B1cFZpZXdNb2RlbC5kaXNwb3NlKCk7XG4gICAgfTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlByb3BcIl0pKClcbiAgICBdLCBQb3B1cC5wcm90b3R5cGUsIFwibW9kZWxcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlByb3BcIl0pKClcbiAgICBdLCBQb3B1cC5wcm90b3R5cGUsIFwiZ2V0VGFyZ2V0XCIsIHZvaWQgMCk7XG4gICAgUG9wdXAgPSBfX2RlY29yYXRlKFtcbiAgICAgICAgdnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiQ29tcG9uZW50XCJdXG4gICAgXSwgUG9wdXApO1xuICAgIHJldHVybiBQb3B1cDtcbn0oX2Jhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcIkJhc2VWdWVcIl0pKTtcblxudnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNvbXBvbmVudChcInN2LXBvcHVwXCIsIFBvcHVwKTtcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoUG9wdXApO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9jb21wb25lbnRzL3JhdGluZy9yYXRpbmctaXRlbS1zbWlsZXkudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy90cy1sb2FkZXI/P3JlZi0tMCEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL3Z1ZS9jb21wb25lbnRzL3JhdGluZy9yYXRpbmctaXRlbS1zbWlsZXkudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBSYXRpbmdJdGVtU21pbGV5LCBkZWZhdWx0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlJhdGluZ0l0ZW1TbWlsZXlcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBSYXRpbmdJdGVtU21pbGV5OyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZSAqLyBcInZ1ZVwiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubih2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlLXByb3BlcnR5LWRlY29yYXRvciAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IvbGliL2luZGV4LmpzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9iYXNlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9iYXNlICovIFwiLi9zcmMvdnVlL2Jhc2UudHNcIik7XG52YXIgX19leHRlbmRzID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbnZhciBfX2RlY29yYXRlID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn07XG5cblxuXG52YXIgUmF0aW5nSXRlbVNtaWxleSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoUmF0aW5nSXRlbVNtaWxleSwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBSYXRpbmdJdGVtU21pbGV5KCkge1xuICAgICAgICByZXR1cm4gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICB9XG4gICAgUmF0aW5nSXRlbVNtaWxleS5wcm90b3R5cGUuZ2V0TW9kZWwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLml0ZW07XG4gICAgfTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlByb3BcIl0pKClcbiAgICBdLCBSYXRpbmdJdGVtU21pbGV5LnByb3RvdHlwZSwgXCJpdGVtXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdCh2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJQcm9wXCJdKSgpXG4gICAgXSwgUmF0aW5nSXRlbVNtaWxleS5wcm90b3R5cGUsIFwicXVlc3Rpb25cIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlByb3BcIl0pKClcbiAgICBdLCBSYXRpbmdJdGVtU21pbGV5LnByb3RvdHlwZSwgXCJpbmRleFwiLCB2b2lkIDApO1xuICAgIFJhdGluZ0l0ZW1TbWlsZXkgPSBfX2RlY29yYXRlKFtcbiAgICAgICAgdnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiQ29tcG9uZW50XCJdXG4gICAgXSwgUmF0aW5nSXRlbVNtaWxleSk7XG4gICAgcmV0dXJuIFJhdGluZ0l0ZW1TbWlsZXk7XG59KF9iYXNlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJCYXNlVnVlXCJdKSk7XG5cbnZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jb21wb25lbnQoXCJzdi1yYXRpbmctaXRlbS1zbWlsZXlcIiwgUmF0aW5nSXRlbVNtaWxleSk7XG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKFJhdGluZ0l0ZW1TbWlsZXkpO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9jb21wb25lbnRzL3JhdGluZy9yYXRpbmctaXRlbS1zdGFyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL2NvbXBvbmVudHMvcmF0aW5nL3JhdGluZy1pdGVtLXN0YXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogUmF0aW5nSXRlbVN0YXIsIGRlZmF1bHQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUmF0aW5nSXRlbVN0YXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBSYXRpbmdJdGVtU3RhcjsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB2dWUgKi8gXCJ2dWVcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4odnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9pbmRleC5qc1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYmFzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vYmFzZSAqLyBcIi4vc3JjL3Z1ZS9iYXNlLnRzXCIpO1xudmFyIF9fZXh0ZW5kcyA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG52YXIgX19kZWNvcmF0ZSA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xuXG5cblxudmFyIFJhdGluZ0l0ZW1TdGFyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhSYXRpbmdJdGVtU3RhciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBSYXRpbmdJdGVtU3RhcigpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgfVxuICAgIFJhdGluZ0l0ZW1TdGFyLnByb3RvdHlwZS5nZXRNb2RlbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlbTtcbiAgICB9O1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QodnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiUHJvcFwiXSkoKVxuICAgIF0sIFJhdGluZ0l0ZW1TdGFyLnByb3RvdHlwZSwgXCJpdGVtXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdCh2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJQcm9wXCJdKSgpXG4gICAgXSwgUmF0aW5nSXRlbVN0YXIucHJvdG90eXBlLCBcInF1ZXN0aW9uXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdCh2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJQcm9wXCJdKSgpXG4gICAgXSwgUmF0aW5nSXRlbVN0YXIucHJvdG90eXBlLCBcImluZGV4XCIsIHZvaWQgMCk7XG4gICAgUmF0aW5nSXRlbVN0YXIgPSBfX2RlY29yYXRlKFtcbiAgICAgICAgdnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiQ29tcG9uZW50XCJdXG4gICAgXSwgUmF0aW5nSXRlbVN0YXIpO1xuICAgIHJldHVybiBSYXRpbmdJdGVtU3Rhcjtcbn0oX2Jhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIkJhc2VWdWVcIl0pKTtcblxudnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNvbXBvbmVudChcInN2LXJhdGluZy1pdGVtLXN0YXJcIiwgUmF0aW5nSXRlbVN0YXIpO1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChSYXRpbmdJdGVtU3Rhcik7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2NvbXBvbmVudHMvcmF0aW5nL3JhdGluZy1pdGVtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy90cy1sb2FkZXI/P3JlZi0tMCEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL3Z1ZS9jb21wb25lbnRzL3JhdGluZy9yYXRpbmctaXRlbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogUmF0aW5nSXRlbSwgZGVmYXVsdCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJSYXRpbmdJdGVtXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUmF0aW5nSXRlbTsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB2dWUgKi8gXCJ2dWVcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4odnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9pbmRleC5qc1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYmFzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vYmFzZSAqLyBcIi4vc3JjL3Z1ZS9iYXNlLnRzXCIpO1xudmFyIF9fZXh0ZW5kcyA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG52YXIgX19kZWNvcmF0ZSA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xuXG5cblxudmFyIFJhdGluZ0l0ZW0gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFJhdGluZ0l0ZW0sIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gUmF0aW5nSXRlbSgpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgfVxuICAgIFJhdGluZ0l0ZW0ucHJvdG90eXBlLmdldE1vZGVsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pdGVtO1xuICAgIH07XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdCh2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJQcm9wXCJdKSgpXG4gICAgXSwgUmF0aW5nSXRlbS5wcm90b3R5cGUsIFwiaXRlbVwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QodnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiUHJvcFwiXSkoKVxuICAgIF0sIFJhdGluZ0l0ZW0ucHJvdG90eXBlLCBcInF1ZXN0aW9uXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdCh2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJQcm9wXCJdKSgpXG4gICAgXSwgUmF0aW5nSXRlbS5wcm90b3R5cGUsIFwiaW5kZXhcIiwgdm9pZCAwKTtcbiAgICBSYXRpbmdJdGVtID0gX19kZWNvcmF0ZShbXG4gICAgICAgIHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIkNvbXBvbmVudFwiXVxuICAgIF0sIFJhdGluZ0l0ZW0pO1xuICAgIHJldHVybiBSYXRpbmdJdGVtO1xufShfYmFzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiQmFzZVZ1ZVwiXSkpO1xuXG52dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY29tcG9uZW50KFwic3YtcmF0aW5nLWl0ZW1cIiwgUmF0aW5nSXRlbSk7XG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKFJhdGluZ0l0ZW0pO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9jb21wb25lbnRzL3NrZWxldG9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL2NvbXBvbmVudHMvc2tlbGV0b24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogU2tlbGV0b24sIGRlZmF1bHQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiU2tlbGV0b25cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBTa2VsZXRvbjsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB2dWUgKi8gXCJ2dWVcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4odnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9pbmRleC5qc1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYmFzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vYmFzZSAqLyBcIi4vc3JjL3Z1ZS9iYXNlLnRzXCIpO1xudmFyIF9fZXh0ZW5kcyA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG52YXIgX19kZWNvcmF0ZSA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xuXG5cblxudmFyIFNrZWxldG9uID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhTa2VsZXRvbiwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTa2VsZXRvbigpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgfVxuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QodnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiUHJvcFwiXSkoKVxuICAgIF0sIFNrZWxldG9uLnByb3RvdHlwZSwgXCJlbGVtZW50XCIsIHZvaWQgMCk7XG4gICAgU2tlbGV0b24gPSBfX2RlY29yYXRlKFtcbiAgICAgICAgdnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiQ29tcG9uZW50XCJdXG4gICAgXSwgU2tlbGV0b24pO1xuICAgIHJldHVybiBTa2VsZXRvbjtcbn0oX2Jhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIkJhc2VWdWVcIl0pKTtcblxudnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNvbXBvbmVudChcInN2LXNrZWxldG9uXCIsIFNrZWxldG9uKTtcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoU2tlbGV0b24pO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9jb21wb25lbnRzL3N1cnZleS1hY3Rpb25zL3N1cnZleS1uYXYtYnV0dG9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL2NvbXBvbmVudHMvc3VydmV5LWFjdGlvbnMvc3VydmV5LW5hdi1idXR0b24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogU3VydmV5TmF2aWdhdGlvbkJ1dHRvbiwgZGVmYXVsdCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJTdXJ2ZXlOYXZpZ2F0aW9uQnV0dG9uXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU3VydmV5TmF2aWdhdGlvbkJ1dHRvbjsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB2dWUgKi8gXCJ2dWVcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4odnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9pbmRleC5qc1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYmFzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vYmFzZSAqLyBcIi4vc3JjL3Z1ZS9iYXNlLnRzXCIpO1xudmFyIF9fZXh0ZW5kcyA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG52YXIgX19kZWNvcmF0ZSA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xuXG5cblxudmFyIFN1cnZleU5hdmlnYXRpb25CdXR0b24gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFN1cnZleU5hdmlnYXRpb25CdXR0b24sIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gU3VydmV5TmF2aWdhdGlvbkJ1dHRvbigpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIH1cbiAgICBTdXJ2ZXlOYXZpZ2F0aW9uQnV0dG9uLnByb3RvdHlwZS5nZXRNb2RlbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlbTtcbiAgICB9O1xuICAgIFN1cnZleU5hdmlnYXRpb25CdXR0b24ucHJvdG90eXBlLmJ1dHRvbk1vdXNlRG93biA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlbS5kYXRhICYmIHRoaXMuaXRlbS5kYXRhLm1vdXNlRG93bigpO1xuICAgIH07XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdCh2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJQcm9wXCJdKSgpXG4gICAgXSwgU3VydmV5TmF2aWdhdGlvbkJ1dHRvbi5wcm90b3R5cGUsIFwiaXRlbVwiLCB2b2lkIDApO1xuICAgIFN1cnZleU5hdmlnYXRpb25CdXR0b24gPSBfX2RlY29yYXRlKFtcbiAgICAgICAgdnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiQ29tcG9uZW50XCJdXG4gICAgXSwgU3VydmV5TmF2aWdhdGlvbkJ1dHRvbik7XG4gICAgcmV0dXJuIFN1cnZleU5hdmlnYXRpb25CdXR0b247XG59KF9iYXNlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJCYXNlVnVlXCJdKSk7XG5cbnZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jb21wb25lbnQoXCJzdi1uYXYtYnRuXCIsIFN1cnZleU5hdmlnYXRpb25CdXR0b24pO1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChTdXJ2ZXlOYXZpZ2F0aW9uQnV0dG9uKTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvY29tcG9uZW50cy9zdmctaWNvbi9zdmctaWNvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy90cy1sb2FkZXI/P3JlZi0tMCEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL3Z1ZS9jb21wb25lbnRzL3N2Zy1pY29uL3N2Zy1pY29uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFN2Z0ljb24sIGRlZmF1bHQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiU3ZnSWNvblwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFN2Z0ljb247IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlICovIFwidnVlXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB2dWUtcHJvcGVydHktZGVjb3JhdG9yICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLXByb3BlcnR5LWRlY29yYXRvci9saWIvaW5kZXguanNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHN1cnZleS1jb3JlICovIFwiLi9zcmMvZW50cmllcy9jb3JlLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9iYXNlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9iYXNlICovIFwiLi9zcmMvdnVlL2Jhc2UudHNcIik7XG52YXIgX19leHRlbmRzID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbnZhciBfX2RlY29yYXRlID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn07XG5cblxuXG5cbnZhciBTdmdJY29uID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhTdmdJY29uLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFN2Z0ljb24oKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIH1cbiAgICBTdmdJY29uLnByb3RvdHlwZS5vblNpemVQcm9wZXJ0eUNoYW5nZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMub25VcGRhdGVkKCk7XG4gICAgfTtcbiAgICBTdmdJY29uLnByb3RvdHlwZS5vbldpZHRoUHJvcGVydHlDaGFuZ2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLm9uVXBkYXRlZCgpO1xuICAgIH07XG4gICAgU3ZnSWNvbi5wcm90b3R5cGUub25IZWlnaHRQcm9wZXJ0eUNoYW5nZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMub25VcGRhdGVkKCk7XG4gICAgfTtcbiAgICBTdmdJY29uLnByb3RvdHlwZS5vbkljb25OYW1lUHJvcGVydHlDaGFuZ2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLm9uVXBkYXRlZCgpO1xuICAgIH07XG4gICAgU3ZnSWNvbi5wcm90b3R5cGUub25VcGRhdGVkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBPYmplY3Qoc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcImNyZWF0ZVN2Z1wiXSkodGhpcy5zaXplLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgdGhpcy5pY29uTmFtZSwgdGhpcy5zdmdJY29uRWxlbWVudCwgdGhpcy50aXRsZSk7XG4gICAgfTtcbiAgICBTdmdJY29uLnByb3RvdHlwZS5vbk1vdW50ZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuc3ZnSWNvbkVsZW1lbnQgPSB0aGlzLiRyZWZzW1wic3ZnSWNvblwiXTtcbiAgICAgICAgdGhpcy5vblVwZGF0ZWQoKTtcbiAgICB9O1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QodnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiUHJvcFwiXSkoKVxuICAgIF0sIFN2Z0ljb24ucHJvdG90eXBlLCBcInNpemVcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlByb3BcIl0pKClcbiAgICBdLCBTdmdJY29uLnByb3RvdHlwZSwgXCJ3aWR0aFwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QodnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiUHJvcFwiXSkoKVxuICAgIF0sIFN2Z0ljb24ucHJvdG90eXBlLCBcImhlaWdodFwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QodnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiUHJvcFwiXSkoKVxuICAgIF0sIFN2Z0ljb24ucHJvdG90eXBlLCBcImljb25OYW1lXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdCh2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJQcm9wXCJdKSgpXG4gICAgXSwgU3ZnSWNvbi5wcm90b3R5cGUsIFwidGl0bGVcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIldhdGNoXCJdKShcInNpemVcIilcbiAgICBdLCBTdmdJY29uLnByb3RvdHlwZSwgXCJvblNpemVQcm9wZXJ0eUNoYW5nZWRcIiwgbnVsbCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdCh2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJXYXRjaFwiXSkoXCJ3aWR0aFwiKVxuICAgIF0sIFN2Z0ljb24ucHJvdG90eXBlLCBcIm9uV2lkdGhQcm9wZXJ0eUNoYW5nZWRcIiwgbnVsbCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdCh2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJXYXRjaFwiXSkoXCJoZWlnaHRcIilcbiAgICBdLCBTdmdJY29uLnByb3RvdHlwZSwgXCJvbkhlaWdodFByb3BlcnR5Q2hhbmdlZFwiLCBudWxsKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIldhdGNoXCJdKShcImljb25OYW1lXCIpXG4gICAgXSwgU3ZnSWNvbi5wcm90b3R5cGUsIFwib25JY29uTmFtZVByb3BlcnR5Q2hhbmdlZFwiLCBudWxsKTtcbiAgICBTdmdJY29uID0gX19kZWNvcmF0ZShbXG4gICAgICAgIHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIkNvbXBvbmVudFwiXVxuICAgIF0sIFN2Z0ljb24pO1xuICAgIHJldHVybiBTdmdJY29uO1xufShfYmFzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiQmFzZVZ1ZVwiXSkpO1xuXG52dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY29tcG9uZW50KFwic3Ytc3ZnLWljb25cIiwgU3ZnSWNvbik7XG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKFN2Z0ljb24pO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9jb21wb25lbnRzL3RhZ2JveC90YWdib3gtZmlsdGVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL2NvbXBvbmVudHMvdGFnYm94L3RhZ2JveC1maWx0ZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogVGFnYm94RmlsdGVyQ29tcG9uZW50LCBkZWZhdWx0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlRhZ2JveEZpbHRlckNvbXBvbmVudFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFRhZ2JveEZpbHRlckNvbXBvbmVudDsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB2dWUgKi8gXCJ2dWVcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4odnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9pbmRleC5qc1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYmFzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vYmFzZSAqLyBcIi4vc3JjL3Z1ZS9iYXNlLnRzXCIpO1xudmFyIF9fZXh0ZW5kcyA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG52YXIgX19kZWNvcmF0ZSA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xuXG5cblxudmFyIFRhZ2JveEZpbHRlckNvbXBvbmVudCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoVGFnYm94RmlsdGVyQ29tcG9uZW50LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFRhZ2JveEZpbHRlckNvbXBvbmVudCgpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIH1cbiAgICBUYWdib3hGaWx0ZXJDb21wb25lbnQucHJvdG90eXBlLmdldE1vZGVsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgICB9O1xuICAgIFRhZ2JveEZpbHRlckNvbXBvbmVudC5wcm90b3R5cGUuaW5wdXRDaGFuZ2UgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5tb2RlbC5pbnB1dFN0cmluZ1JlbmRlcmVkID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgIH07XG4gICAgVGFnYm94RmlsdGVyQ29tcG9uZW50LnByb3RvdHlwZS5pbnB1dEtleUhhbmRsZXIgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5tb2RlbC5pbnB1dEtleUhhbmRsZXIoZXZlbnQpO1xuICAgIH07XG4gICAgVGFnYm94RmlsdGVyQ29tcG9uZW50LnByb3RvdHlwZS5ibHVyID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHRoaXMubW9kZWwub25CbHVyKGV2ZW50KTtcbiAgICB9O1xuICAgIFRhZ2JveEZpbHRlckNvbXBvbmVudC5wcm90b3R5cGUuZm9jdXMgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5tb2RlbC5vbkZvY3VzKGV2ZW50KTtcbiAgICB9O1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QodnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiUHJvcFwiXSkoKVxuICAgIF0sIFRhZ2JveEZpbHRlckNvbXBvbmVudC5wcm90b3R5cGUsIFwibW9kZWxcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlByb3BcIl0pKClcbiAgICBdLCBUYWdib3hGaWx0ZXJDb21wb25lbnQucHJvdG90eXBlLCBcInF1ZXN0aW9uXCIsIHZvaWQgMCk7XG4gICAgVGFnYm94RmlsdGVyQ29tcG9uZW50ID0gX19kZWNvcmF0ZShbXG4gICAgICAgIHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIkNvbXBvbmVudFwiXVxuICAgIF0sIFRhZ2JveEZpbHRlckNvbXBvbmVudCk7XG4gICAgcmV0dXJuIFRhZ2JveEZpbHRlckNvbXBvbmVudDtcbn0oX2Jhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcImRlZmF1bHRcIl0pKTtcblxudnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNvbXBvbmVudChcInN2LXRhZ2JveC1maWx0ZXJcIiwgVGFnYm94RmlsdGVyQ29tcG9uZW50KTtcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoVGFnYm94RmlsdGVyQ29tcG9uZW50KTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvY29tcG9uZW50cy90YWdib3gvdGFnYm94LWl0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL2NvbXBvbmVudHMvdGFnYm94L3RhZ2JveC1pdGVtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBUYWdib3hJdGVtLCBkZWZhdWx0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlRhZ2JveEl0ZW1cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBUYWdib3hJdGVtOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZSAqLyBcInZ1ZVwiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubih2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlLXByb3BlcnR5LWRlY29yYXRvciAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IvbGliL2luZGV4LmpzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9iYXNlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9iYXNlICovIFwiLi9zcmMvdnVlL2Jhc2UudHNcIik7XG52YXIgX19leHRlbmRzID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbnZhciBfX2RlY29yYXRlID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn07XG5cblxuXG52YXIgVGFnYm94SXRlbSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoVGFnYm94SXRlbSwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBUYWdib3hJdGVtKCkge1xuICAgICAgICByZXR1cm4gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICB9XG4gICAgVGFnYm94SXRlbS5wcm90b3R5cGUuZ2V0TW9kZWwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLml0ZW07XG4gICAgfTtcbiAgICBUYWdib3hJdGVtLnByb3RvdHlwZS5yZW1vdmVJdGVtID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHRoaXMucXVlc3Rpb24uZHJvcGRvd25MaXN0TW9kZWwuZGVzZWxlY3RJdGVtKHRoaXMuaXRlbS52YWx1ZSk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH07XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdCh2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJQcm9wXCJdKSgpXG4gICAgXSwgVGFnYm94SXRlbS5wcm90b3R5cGUsIFwiaXRlbVwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QodnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiUHJvcFwiXSkoKVxuICAgIF0sIFRhZ2JveEl0ZW0ucHJvdG90eXBlLCBcInF1ZXN0aW9uXCIsIHZvaWQgMCk7XG4gICAgVGFnYm94SXRlbSA9IF9fZGVjb3JhdGUoW1xuICAgICAgICB2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJDb21wb25lbnRcIl1cbiAgICBdLCBUYWdib3hJdGVtKTtcbiAgICByZXR1cm4gVGFnYm94SXRlbTtcbn0oX2Jhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIkJhc2VWdWVcIl0pKTtcblxudnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNvbXBvbmVudChcInN2LXRhZ2JveC1pdGVtXCIsIFRhZ2JveEl0ZW0pO1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChUYWdib3hJdGVtKTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvY29tcG9uZW50cy90YWdib3gvdGFnYm94LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyPz9yZWYtLTAhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NyYy92dWUvY29tcG9uZW50cy90YWdib3gvdGFnYm94LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogVGFnYm94Q29tcG9uZW50LCBkZWZhdWx0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlRhZ2JveENvbXBvbmVudFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFRhZ2JveENvbXBvbmVudDsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB2dWUgKi8gXCJ2dWVcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4odnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9pbmRleC5qc1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBzdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgc3VydmV5LWNvcmUgKi8gXCIuL3NyYy9lbnRyaWVzL2NvcmUudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Jhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL2Jhc2UgKi8gXCIuL3NyYy92dWUvYmFzZS50c1wiKTtcbnZhciBfX2V4dGVuZHMgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xudmFyIF9fZGVjb3JhdGUgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufTtcblxuXG5cblxudmFyIFRhZ2JveENvbXBvbmVudCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoVGFnYm94Q29tcG9uZW50LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFRhZ2JveENvbXBvbmVudCgpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVGFnYm94Q29tcG9uZW50LnByb3RvdHlwZSwgXCJtb2RlbFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucXVlc3Rpb24uZHJvcGRvd25MaXN0TW9kZWw7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBUYWdib3hDb21wb25lbnQucHJvdG90eXBlLmdldE1vZGVsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgICB9O1xuICAgIFRhZ2JveENvbXBvbmVudC5wcm90b3R5cGUuaW5wdXRDaGFuZ2UgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5tb2RlbC5maWx0ZXJTdHJpbmcgPSBldmVudC50YXJnZXQudmFsdWU7XG4gICAgfTtcbiAgICBUYWdib3hDb21wb25lbnQucHJvdG90eXBlLmNsaWNrID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgKF9hID0gdGhpcy5xdWVzdGlvbi5kcm9wZG93bkxpc3RNb2RlbCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm9uQ2xpY2soZXZlbnQpO1xuICAgIH07XG4gICAgVGFnYm94Q29tcG9uZW50LnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIChfYSA9IHRoaXMucXVlc3Rpb24uZHJvcGRvd25MaXN0TW9kZWwpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5vbkNsZWFyKGV2ZW50KTtcbiAgICB9O1xuICAgIFRhZ2JveENvbXBvbmVudC5wcm90b3R5cGUua2V5aGFuZGxlciA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIChfYSA9IHRoaXMucXVlc3Rpb24uZHJvcGRvd25MaXN0TW9kZWwpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5rZXlIYW5kbGVyKGV2ZW50KTtcbiAgICB9O1xuICAgIFRhZ2JveENvbXBvbmVudC5wcm90b3R5cGUuYmx1ciA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIChfYSA9IHRoaXMucXVlc3Rpb24uZHJvcGRvd25MaXN0TW9kZWwpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5vbkJsdXIoZXZlbnQpO1xuICAgIH07XG4gICAgVGFnYm94Q29tcG9uZW50LnByb3RvdHlwZS5vbkNyZWF0ZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5xdWVzdGlvbi5kcm9wZG93bkxpc3RNb2RlbCkge1xuICAgICAgICAgICAgdGhpcy5xdWVzdGlvbi5kcm9wZG93bkxpc3RNb2RlbCA9IG5ldyBzdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiRHJvcGRvd25NdWx0aVNlbGVjdExpc3RNb2RlbFwiXSh0aGlzLnF1ZXN0aW9uKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdCh2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJQcm9wXCJdKSgpXG4gICAgXSwgVGFnYm94Q29tcG9uZW50LnByb3RvdHlwZSwgXCJxdWVzdGlvblwiLCB2b2lkIDApO1xuICAgIFRhZ2JveENvbXBvbmVudCA9IF9fZGVjb3JhdGUoW1xuICAgICAgICB2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJDb21wb25lbnRcIl1cbiAgICBdLCBUYWdib3hDb21wb25lbnQpO1xuICAgIHJldHVybiBUYWdib3hDb21wb25lbnQ7XG59KF9iYXNlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJkZWZhdWx0XCJdKSk7XG5cbnZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jb21wb25lbnQoXCJzdi10YWdib3hcIiwgVGFnYm94Q29tcG9uZW50KTtcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoVGFnYm94Q29tcG9uZW50KTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvY29tcG9uZW50cy90aXRsZS90aXRsZS1hY3Rpb25zLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyPz9yZWYtLTAhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NyYy92dWUvY29tcG9uZW50cy90aXRsZS90aXRsZS1hY3Rpb25zLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogVGl0bGVBY3Rpb25zLCBkZWZhdWx0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlRpdGxlQWN0aW9uc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFRpdGxlQWN0aW9uczsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB2dWUgKi8gXCJ2dWVcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4odnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9pbmRleC5qc1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBzdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgc3VydmV5LWNvcmUgKi8gXCIuL3NyYy9lbnRyaWVzL2NvcmUudHNcIik7XG52YXIgX19leHRlbmRzID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbnZhciBfX2RlY29yYXRlID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn07XG5cblxuXG52YXIgVGl0bGVBY3Rpb25zID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhUaXRsZUFjdGlvbnMsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gVGl0bGVBY3Rpb25zKCkge1xuICAgICAgICByZXR1cm4gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRpdGxlQWN0aW9ucy5wcm90b3R5cGUsIFwidG9vbGJhclwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5nZXRUaXRsZVRvb2xiYXIoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QodnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiUHJvcFwiXSkoKVxuICAgIF0sIFRpdGxlQWN0aW9ucy5wcm90b3R5cGUsIFwiZWxlbWVudFwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QodnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiUHJvcFwiXSkoKVxuICAgIF0sIFRpdGxlQWN0aW9ucy5wcm90b3R5cGUsIFwiY3NzXCIsIHZvaWQgMCk7XG4gICAgVGl0bGVBY3Rpb25zID0gX19kZWNvcmF0ZShbXG4gICAgICAgIHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIkNvbXBvbmVudFwiXVxuICAgIF0sIFRpdGxlQWN0aW9ucyk7XG4gICAgcmV0dXJuIFRpdGxlQWN0aW9ucztcbn0odnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hKSk7XG5cbnN1cnZleV9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJSZW5kZXJlckZhY3RvcnlcIl0uSW5zdGFuY2UucmVnaXN0ZXJSZW5kZXJlcihcImVsZW1lbnRcIiwgXCJ0aXRsZS1hY3Rpb25zXCIsIFwic3YtdGl0bGUtYWN0aW9uc1wiKTtcbnZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jb21wb25lbnQoXCJzdi10aXRsZS1hY3Rpb25zXCIsIFRpdGxlQWN0aW9ucyk7XG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKFRpdGxlQWN0aW9ucyk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2NvbXBvbmVudHMvdGl0bGUvdGl0bGUtY29udGVudC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL2NvbXBvbmVudHMvdGl0bGUvdGl0bGUtY29udGVudC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFRpdGxlQ29udGVudCwgZGVmYXVsdCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJUaXRsZUNvbnRlbnRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBUaXRsZUNvbnRlbnQ7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9pbmRleC5qc1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZSAqLyBcInZ1ZVwiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubih2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyk7XG52YXIgX19leHRlbmRzID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbnZhciBfX2RlY29yYXRlID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn07XG5cblxudmFyIFRpdGxlQ29udGVudCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoVGl0bGVDb250ZW50LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFRpdGxlQ29udGVudCgpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIH1cbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlByb3BcIl0pKClcbiAgICBdLCBUaXRsZUNvbnRlbnQucHJvdG90eXBlLCBcImVsZW1lbnRcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlByb3BcIl0pKClcbiAgICBdLCBUaXRsZUNvbnRlbnQucHJvdG90eXBlLCBcImNzc1wiLCB2b2lkIDApO1xuICAgIFRpdGxlQ29udGVudCA9IF9fZGVjb3JhdGUoW1xuICAgICAgICB2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJDb21wb25lbnRcIl1cbiAgICBdLCBUaXRsZUNvbnRlbnQpO1xuICAgIHJldHVybiBUaXRsZUNvbnRlbnQ7XG59KHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQuYSkpO1xuXG52dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0LmEuY29tcG9uZW50KFwic3VydmV5LWVsZW1lbnQtdGl0bGUtY29udGVudFwiLCBUaXRsZUNvbnRlbnQpO1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChUaXRsZUNvbnRlbnQpO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9jb21wb25lbnRzL3RpdGxlL3RpdGxlLWVsZW1lbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy90cy1sb2FkZXI/P3JlZi0tMCEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL3Z1ZS9jb21wb25lbnRzL3RpdGxlL3RpdGxlLWVsZW1lbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBUaXRsZUVsZW1lbnQsIGRlZmF1bHQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiVGl0bGVFbGVtZW50XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gVGl0bGVFbGVtZW50OyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZSAqLyBcInZ1ZVwiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubih2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlLXByb3BlcnR5LWRlY29yYXRvciAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IvbGliL2luZGV4LmpzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHN1cnZleV9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBzdXJ2ZXktY29yZSAqLyBcIi4vc3JjL2VudHJpZXMvY29yZS50c1wiKTtcbnZhciBfX2V4dGVuZHMgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xudmFyIF9fZGVjb3JhdGUgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufTtcblxuXG5cbnZhciBUaXRsZUVsZW1lbnQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFRpdGxlRWxlbWVudCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBUaXRsZUVsZW1lbnQoKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICB9XG4gICAgVGl0bGVFbGVtZW50LnByb3RvdHlwZS5rZXl1cCA9IGZ1bmN0aW9uIChldnQpIHtcbiAgICAgICAgT2JqZWN0KHN1cnZleV9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJkb0tleTJDbGlja1VwXCJdKShldnQpO1xuICAgIH07XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdCh2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJQcm9wXCJdKSgpXG4gICAgXSwgVGl0bGVFbGVtZW50LnByb3RvdHlwZSwgXCJlbGVtZW50XCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdCh2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJQcm9wXCJdKSgpXG4gICAgXSwgVGl0bGVFbGVtZW50LnByb3RvdHlwZSwgXCJjc3NcIiwgdm9pZCAwKTtcbiAgICBUaXRsZUVsZW1lbnQgPSBfX2RlY29yYXRlKFtcbiAgICAgICAgdnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiQ29tcG9uZW50XCJdXG4gICAgXSwgVGl0bGVFbGVtZW50KTtcbiAgICByZXR1cm4gVGl0bGVFbGVtZW50O1xufSh2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEpKTtcblxudnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNvbXBvbmVudChcInN1cnZleS1lbGVtZW50LXRpdGxlXCIsIFRpdGxlRWxlbWVudCk7XG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKFRpdGxlRWxlbWVudCk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2NvbXBvc2l0ZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL2NvbXBvc2l0ZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IENvbXBvc2l0ZSwgZGVmYXVsdCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJDb21wb3NpdGVcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBDb21wb3NpdGU7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlICovIFwidnVlXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB2dWUtcHJvcGVydHktZGVjb3JhdG9yICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLXByb3BlcnR5LWRlY29yYXRvci9saWIvaW5kZXguanNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3F1ZXN0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3F1ZXN0aW9uICovIFwiLi9zcmMvdnVlL3F1ZXN0aW9uLnRzXCIpO1xudmFyIF9fZXh0ZW5kcyA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG52YXIgX19kZWNvcmF0ZSA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xuXG5cblxudmFyIENvbXBvc2l0ZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQ29tcG9zaXRlLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIENvbXBvc2l0ZSgpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29tcG9zaXRlLnByb3RvdHlwZSwgXCJjb250ZW50UGFuZWxcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLmNvbnRlbnRQYW5lbDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIENvbXBvc2l0ZSA9IF9fZGVjb3JhdGUoW1xuICAgICAgICB2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJDb21wb25lbnRcIl1cbiAgICBdLCBDb21wb3NpdGUpO1xuICAgIHJldHVybiBDb21wb3NpdGU7XG59KF9xdWVzdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiZGVmYXVsdFwiXSkpO1xuXG52dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY29tcG9uZW50KFwic3VydmV5LWNvbXBvc2l0ZVwiLCBDb21wb3NpdGUpO1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChDb21wb3NpdGUpO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9jdXN0b20udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy90cy1sb2FkZXI/P3JlZi0tMCEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL3Z1ZS9jdXN0b20udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBDdXN0b20sIGRlZmF1bHQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQ3VzdG9tXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQ3VzdG9tOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZSAqLyBcInZ1ZVwiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubih2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlLXByb3BlcnR5LWRlY29yYXRvciAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IvbGliL2luZGV4LmpzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9xdWVzdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9xdWVzdGlvbiAqLyBcIi4vc3JjL3Z1ZS9xdWVzdGlvbi50c1wiKTtcbnZhciBfX2V4dGVuZHMgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xudmFyIF9fZGVjb3JhdGUgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufTtcblxuXG5cbnZhciBDdXN0b20gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEN1c3RvbSwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBDdXN0b20oKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEN1c3RvbS5wcm90b3R5cGUsIFwiY29udGVudFF1ZXN0aW9uXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5jb250ZW50UXVlc3Rpb247XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBDdXN0b20ucHJvdG90eXBlLmdldENvbXBvbmVudE5hbWUgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gT2JqZWN0KF9xdWVzdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiZ2V0Q29tcG9uZW50TmFtZVwiXSkoZWxlbWVudCk7XG4gICAgfTtcbiAgICBDdXN0b20gPSBfX2RlY29yYXRlKFtcbiAgICAgICAgdnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiQ29tcG9uZW50XCJdXG4gICAgXSwgQ3VzdG9tKTtcbiAgICByZXR1cm4gQ3VzdG9tO1xufShfcXVlc3Rpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcImRlZmF1bHRcIl0pKTtcblxudnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNvbXBvbmVudChcInN1cnZleS1jdXN0b21cIiwgQ3VzdG9tKTtcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoQ3VzdG9tKTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvY3VzdG9td2lkZ2V0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyPz9yZWYtLTAhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NyYy92dWUvY3VzdG9td2lkZ2V0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogQ3VzdG9tV2lkZ2V0LCBkZWZhdWx0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkN1c3RvbVdpZGdldFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEN1c3RvbVdpZGdldDsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB2dWUgKi8gXCJ2dWVcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4odnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9pbmRleC5qc1wiKTtcbnZhciBfX2V4dGVuZHMgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xudmFyIF9fZGVjb3JhdGUgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufTtcblxuXG52YXIgQ3VzdG9tV2lkZ2V0ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhDdXN0b21XaWRnZXQsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQ3VzdG9tV2lkZ2V0KCkge1xuICAgICAgICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDdXN0b21XaWRnZXQucHJvdG90eXBlLCBcImhhc0RlZmF1bHRSZW5kZXJcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLmN1c3RvbVdpZGdldC5pc0RlZmF1bHRSZW5kZXIgfHwgdGhpcy5oYXNWdWVDb21wb25lbnQ7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ3VzdG9tV2lkZ2V0LnByb3RvdHlwZSwgXCJoYXNIdG1sXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5jdXN0b21XaWRnZXQuaHRtbFRlbXBsYXRlID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEN1c3RvbVdpZGdldC5wcm90b3R5cGUsIFwiY3VzdG9tSHRtbFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucXVlc3Rpb24uY3VzdG9tV2lkZ2V0Lmh0bWxUZW1wbGF0ZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDdXN0b21XaWRnZXQucHJvdG90eXBlLCBcImhhc1Z1ZUNvbXBvbmVudFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIG9wdGlvbnMgPSB2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmFbXCJvcHRpb25zXCJdO1xuICAgICAgICAgICAgaWYgKCFvcHRpb25zKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiAob3B0aW9ucy5jb21wb25lbnRzICYmIG9wdGlvbnMuY29tcG9uZW50c1t0aGlzLnF1ZXN0aW9uLmN1c3RvbVdpZGdldC5uYW1lXSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ3VzdG9tV2lkZ2V0LnByb3RvdHlwZSwgXCJjb21wb25lbnROYW1lXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5oYXNWdWVDb21wb25lbnQpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucXVlc3Rpb24uY3VzdG9tV2lkZ2V0Lm5hbWU7XG4gICAgICAgICAgICByZXR1cm4gXCJzdXJ2ZXktXCIgKyB0aGlzLnF1ZXN0aW9uLmdldFRlbXBsYXRlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBDdXN0b21XaWRnZXQucHJvdG90eXBlLm1vdW50ZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMucXVlc3Rpb24uY3VzdG9tV2lkZ2V0LmFmdGVyUmVuZGVyKHRoaXMucXVlc3Rpb24sIHRoaXMuJGVsKTtcbiAgICB9O1xuICAgIEN1c3RvbVdpZGdldC5wcm90b3R5cGUudXBkYXRlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy90aGlzLnF1ZXN0aW9uLmN1c3RvbVdpZGdldC5hZnRlclJlbmRlcih0aGlzLnF1ZXN0aW9uLCB0aGlzLiRlbCk7XG4gICAgfTtcbiAgICBDdXN0b21XaWRnZXQucHJvdG90eXBlLmJlZm9yZURlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMucXVlc3Rpb24uY3VzdG9tV2lkZ2V0LndpbGxVbm1vdW50KHRoaXMucXVlc3Rpb24sIHRoaXMuJGVsKTtcbiAgICB9O1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QodnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiUHJvcFwiXSkoKVxuICAgIF0sIEN1c3RvbVdpZGdldC5wcm90b3R5cGUsIFwiY3NzXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdCh2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJQcm9wXCJdKSgpXG4gICAgXSwgQ3VzdG9tV2lkZ2V0LnByb3RvdHlwZSwgXCJxdWVzdGlvblwiLCB2b2lkIDApO1xuICAgIEN1c3RvbVdpZGdldCA9IF9fZGVjb3JhdGUoW1xuICAgICAgICB2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJDb21wb25lbnRcIl1cbiAgICBdLCBDdXN0b21XaWRnZXQpO1xuICAgIHJldHVybiBDdXN0b21XaWRnZXQ7XG59KHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYSkpO1xuXG52dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY29tcG9uZW50KFwic3VydmV5LWN1c3RvbXdpZGdldFwiLCBDdXN0b21XaWRnZXQpO1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChDdXN0b21XaWRnZXQpO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9kcm9wZG93bi1zZWxlY3QudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy90cy1sb2FkZXI/P3JlZi0tMCEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL3Z1ZS9kcm9wZG93bi1zZWxlY3QudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBEcm9wZG93blNlbGVjdCwgZGVmYXVsdCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJEcm9wZG93blNlbGVjdFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIERyb3Bkb3duU2VsZWN0OyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZSAqLyBcInZ1ZVwiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubih2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlLXByb3BlcnR5LWRlY29yYXRvciAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IvbGliL2luZGV4LmpzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9xdWVzdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9xdWVzdGlvbiAqLyBcIi4vc3JjL3Z1ZS9xdWVzdGlvbi50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBzdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgc3VydmV5LWNvcmUgKi8gXCIuL3NyYy9lbnRyaWVzL2NvcmUudHNcIik7XG52YXIgX19leHRlbmRzID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbnZhciBfX2RlY29yYXRlID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn07XG5cblxuXG5cbnZhciBEcm9wZG93blNlbGVjdCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoRHJvcGRvd25TZWxlY3QsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gRHJvcGRvd25TZWxlY3QoKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICB9XG4gICAgRHJvcGRvd25TZWxlY3QucHJvdG90eXBlLmNsaWNrID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHRoaXMucXVlc3Rpb24ub25DbGljayhldmVudCk7XG4gICAgfTtcbiAgICBEcm9wZG93blNlbGVjdC5wcm90b3R5cGUua2V5VXAgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5xdWVzdGlvbi5vbktleVVwKGV2ZW50KTtcbiAgICB9O1xuICAgIERyb3Bkb3duU2VsZWN0ID0gX19kZWNvcmF0ZShbXG4gICAgICAgIHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIkNvbXBvbmVudFwiXVxuICAgIF0sIERyb3Bkb3duU2VsZWN0KTtcbiAgICByZXR1cm4gRHJvcGRvd25TZWxlY3Q7XG59KF9xdWVzdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiZGVmYXVsdFwiXSkpO1xuXG52dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY29tcG9uZW50KFwic3YtZHJvcGRvd24tc2VsZWN0XCIsIERyb3Bkb3duU2VsZWN0KTtcbnN1cnZleV9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJSZW5kZXJlckZhY3RvcnlcIl0uSW5zdGFuY2UucmVnaXN0ZXJSZW5kZXJlcihcImRyb3Bkb3duXCIsIFwic2VsZWN0XCIsIFwic3YtZHJvcGRvd24tc2VsZWN0XCIpO1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChEcm9wZG93blNlbGVjdCk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2Ryb3Bkb3duLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy90cy1sb2FkZXI/P3JlZi0tMCEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL3Z1ZS9kcm9wZG93bi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogRHJvcGRvd24sIGRlZmF1bHQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiRHJvcGRvd25cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBEcm9wZG93bjsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB2dWUgKi8gXCJ2dWVcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4odnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9pbmRleC5qc1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcXVlc3Rpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcXVlc3Rpb24gKi8gXCIuL3NyYy92dWUvcXVlc3Rpb24udHNcIik7XG52YXIgX19leHRlbmRzID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbnZhciBfX2RlY29yYXRlID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn07XG5cblxuXG52YXIgRHJvcGRvd24gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKERyb3Bkb3duLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIERyb3Bkb3duKCkge1xuICAgICAgICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgfVxuICAgIERyb3Bkb3duID0gX19kZWNvcmF0ZShbXG4gICAgICAgIHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIkNvbXBvbmVudFwiXVxuICAgIF0sIERyb3Bkb3duKTtcbiAgICByZXR1cm4gRHJvcGRvd247XG59KF9xdWVzdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiZGVmYXVsdFwiXSkpO1xuXG52dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY29tcG9uZW50KFwic3VydmV5LWRyb3Bkb3duXCIsIERyb3Bkb3duKTtcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoRHJvcGRvd24pO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9lbGVtZW50LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL2VsZW1lbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogU3VydmV5RWxlbWVudFZ1ZSwgZGVmYXVsdCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJTdXJ2ZXlFbGVtZW50VnVlXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU3VydmV5RWxlbWVudFZ1ZTsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB2dWUgKi8gXCJ2dWVcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4odnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9pbmRleC5qc1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcXVlc3Rpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcXVlc3Rpb24gKi8gXCIuL3NyYy92dWUvcXVlc3Rpb24udHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Jhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYmFzZSAqLyBcIi4vc3JjL3Z1ZS9iYXNlLnRzXCIpO1xudmFyIF9fZXh0ZW5kcyA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG52YXIgX19kZWNvcmF0ZSA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xuXG5cblxuXG52YXIgU3VydmV5RWxlbWVudFZ1ZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoU3VydmV5RWxlbWVudFZ1ZSwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTdXJ2ZXlFbGVtZW50VnVlKCkge1xuICAgICAgICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgfVxuICAgIFN1cnZleUVsZW1lbnRWdWUucHJvdG90eXBlLmdldE1vZGVsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50O1xuICAgIH07XG4gICAgU3VydmV5RWxlbWVudFZ1ZS5wcm90b3R5cGUuZ2V0Q29tcG9uZW50TmFtZSA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICAgIHJldHVybiBPYmplY3QoX3F1ZXN0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJnZXRDb21wb25lbnROYW1lXCJdKShlbGVtZW50KTtcbiAgICB9O1xuICAgIFN1cnZleUVsZW1lbnRWdWUucHJvdG90eXBlLmdldENvbnRlbnRDbGFzcyA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICAgIHJldHVybiBlbGVtZW50LmNzc0NvbnRlbnQ7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5RWxlbWVudFZ1ZS5wcm90b3R5cGUsIFwiaGFzRXJyb3JzT25Ub3BcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAhdGhpcy5lbGVtZW50LmlzUGFuZWwgJiYgdGhpcy5lbGVtZW50LnNob3dFcnJvck9uVG9wO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleUVsZW1lbnRWdWUucHJvdG90eXBlLCBcImhhc0Vycm9yc09uQm90dG9tXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gIXRoaXMuZWxlbWVudC5pc1BhbmVsICYmIHRoaXMuZWxlbWVudC5zaG93RXJyb3JPbkJvdHRvbTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFN1cnZleUVsZW1lbnRWdWUucHJvdG90eXBlLm1vdW50ZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5lbGVtZW50LmlzUGFuZWwpIHtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hZnRlclJlbmRlcih0aGlzLiRlbCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QodnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiUHJvcFwiXSkoKVxuICAgIF0sIFN1cnZleUVsZW1lbnRWdWUucHJvdG90eXBlLCBcImNzc1wiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QodnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiUHJvcFwiXSkoKVxuICAgIF0sIFN1cnZleUVsZW1lbnRWdWUucHJvdG90eXBlLCBcInN1cnZleVwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QodnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiUHJvcFwiXSkoKVxuICAgIF0sIFN1cnZleUVsZW1lbnRWdWUucHJvdG90eXBlLCBcImVsZW1lbnRcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlByb3BcIl0pKClcbiAgICBdLCBTdXJ2ZXlFbGVtZW50VnVlLnByb3RvdHlwZSwgXCJyb3dcIiwgdm9pZCAwKTtcbiAgICBTdXJ2ZXlFbGVtZW50VnVlID0gX19kZWNvcmF0ZShbXG4gICAgICAgIHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIkNvbXBvbmVudFwiXVxuICAgIF0sIFN1cnZleUVsZW1lbnRWdWUpO1xuICAgIHJldHVybiBTdXJ2ZXlFbGVtZW50VnVlO1xufShfYmFzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiQmFzZVZ1ZVwiXSkpO1xuXG52dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY29tcG9uZW50KFwic3VydmV5LWVsZW1lbnRcIiwgU3VydmV5RWxlbWVudFZ1ZSk7XG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKFN1cnZleUVsZW1lbnRWdWUpO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9lbGVtZW50aGVhZGVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL2VsZW1lbnRoZWFkZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogRWxlbWVudEhlYWRlciwgZGVmYXVsdCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJFbGVtZW50SGVhZGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRWxlbWVudEhlYWRlcjsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB2dWUgKi8gXCJ2dWVcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4odnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9pbmRleC5qc1wiKTtcbnZhciBfX2V4dGVuZHMgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xudmFyIF9fZGVjb3JhdGUgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufTtcblxuXG52YXIgRWxlbWVudEhlYWRlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoRWxlbWVudEhlYWRlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBFbGVtZW50SGVhZGVyKCkge1xuICAgICAgICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgfVxuICAgIEVsZW1lbnRIZWFkZXIucHJvdG90eXBlLmNsaWNrVGl0bGVGdW5jdGlvbiA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5lbGVtZW50LmNsaWNrVGl0bGVGdW5jdGlvbiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xpY2tUaXRsZUZ1bmN0aW9uKGUpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlByb3BcIl0pKClcbiAgICBdLCBFbGVtZW50SGVhZGVyLnByb3RvdHlwZSwgXCJlbGVtZW50XCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdCh2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJQcm9wXCJdKSgpXG4gICAgXSwgRWxlbWVudEhlYWRlci5wcm90b3R5cGUsIFwiY3NzXCIsIHZvaWQgMCk7XG4gICAgRWxlbWVudEhlYWRlciA9IF9fZGVjb3JhdGUoW1xuICAgICAgICB2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJDb21wb25lbnRcIl1cbiAgICBdLCBFbGVtZW50SGVhZGVyKTtcbiAgICByZXR1cm4gRWxlbWVudEhlYWRlcjtcbn0odnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hKSk7XG5cbnZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jb21wb25lbnQoXCJzdXJ2ZXktZWxlbWVudC1oZWFkZXJcIiwgRWxlbWVudEhlYWRlcik7XG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKEVsZW1lbnRIZWFkZXIpO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9lbXB0eS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyPz9yZWYtLTAhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NyYy92dWUvZW1wdHkudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEVtcHR5LCBkZWZhdWx0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkVtcHR5XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRW1wdHk7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlICovIFwidnVlXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB2dWUtcHJvcGVydHktZGVjb3JhdG9yICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLXByb3BlcnR5LWRlY29yYXRvci9saWIvaW5kZXguanNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3F1ZXN0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3F1ZXN0aW9uICovIFwiLi9zcmMvdnVlL3F1ZXN0aW9uLnRzXCIpO1xudmFyIF9fZXh0ZW5kcyA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG52YXIgX19kZWNvcmF0ZSA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xuXG5cblxudmFyIEVtcHR5ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhFbXB0eSwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBFbXB0eSgpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIH1cbiAgICBFbXB0eSA9IF9fZGVjb3JhdGUoW1xuICAgICAgICB2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJDb21wb25lbnRcIl1cbiAgICBdLCBFbXB0eSk7XG4gICAgcmV0dXJuIEVtcHR5O1xufShfcXVlc3Rpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcImRlZmF1bHRcIl0pKTtcblxudnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNvbXBvbmVudChcInN1cnZleS1lbXB0eVwiLCBFbXB0eSk7XG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKEVtcHR5KTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvZXJyb3JzLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyPz9yZWYtLTAhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NyYy92dWUvZXJyb3JzLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogRXJyb3JzLCBkZWZhdWx0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkVycm9yc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEVycm9yczsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB2dWUgKi8gXCJ2dWVcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4odnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9iYXNlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2Jhc2UgKi8gXCIuL3NyYy92dWUvYmFzZS50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB2dWUtcHJvcGVydHktZGVjb3JhdG9yICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLXByb3BlcnR5LWRlY29yYXRvci9saWIvaW5kZXguanNcIik7XG52YXIgX19leHRlbmRzID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbnZhciBfX2RlY29yYXRlID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn07XG5cblxuXG52YXIgRXJyb3JzID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhFcnJvcnMsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gRXJyb3JzKCkge1xuICAgICAgICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgfVxuICAgIEVycm9ycy5wcm90b3R5cGUuZ2V0TW9kZWwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQ7XG4gICAgfTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIlByb3BcIl0pKClcbiAgICBdLCBFcnJvcnMucHJvdG90eXBlLCBcImVsZW1lbnRcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIlByb3BcIl0pKClcbiAgICBdLCBFcnJvcnMucHJvdG90eXBlLCBcImxvY2F0aW9uXCIsIHZvaWQgMCk7XG4gICAgRXJyb3JzID0gX19kZWNvcmF0ZShbXG4gICAgICAgIHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIkNvbXBvbmVudFwiXVxuICAgIF0sIEVycm9ycyk7XG4gICAgcmV0dXJuIEVycm9ycztcbn0oX2Jhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIkJhc2VWdWVcIl0pKTtcblxudnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNvbXBvbmVudChcInN1cnZleS1lcnJvcnNcIiwgRXJyb3JzKTtcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoRXJyb3JzKTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvZXhwcmVzc2lvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy90cy1sb2FkZXI/P3JlZi0tMCEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL3Z1ZS9leHByZXNzaW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEV4cHJlc3Npb24sIGRlZmF1bHQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiRXhwcmVzc2lvblwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEV4cHJlc3Npb247IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlICovIFwidnVlXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB2dWUtcHJvcGVydHktZGVjb3JhdG9yICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLXByb3BlcnR5LWRlY29yYXRvci9saWIvaW5kZXguanNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3F1ZXN0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3F1ZXN0aW9uICovIFwiLi9zcmMvdnVlL3F1ZXN0aW9uLnRzXCIpO1xudmFyIF9fZXh0ZW5kcyA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG52YXIgX19kZWNvcmF0ZSA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xuXG5cblxudmFyIEV4cHJlc3Npb24gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEV4cHJlc3Npb24sIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gRXhwcmVzc2lvbigpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIH1cbiAgICBFeHByZXNzaW9uID0gX19kZWNvcmF0ZShbXG4gICAgICAgIHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIkNvbXBvbmVudFwiXVxuICAgIF0sIEV4cHJlc3Npb24pO1xuICAgIHJldHVybiBFeHByZXNzaW9uO1xufShfcXVlc3Rpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcImRlZmF1bHRcIl0pKTtcblxudnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNvbXBvbmVudChcInN1cnZleS1leHByZXNzaW9uXCIsIEV4cHJlc3Npb24pO1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChFeHByZXNzaW9uKTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvZmlsZS1jbGVhbi1idXR0b24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL2ZpbGUtY2xlYW4tYnV0dG9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBGaWxlQ2xlYW5CdXR0b24sIGRlZmF1bHQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiRmlsZUNsZWFuQnV0dG9uXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRmlsZUNsZWFuQnV0dG9uOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZSAqLyBcInZ1ZVwiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubih2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlLXByb3BlcnR5LWRlY29yYXRvciAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IvbGliL2luZGV4LmpzXCIpO1xudmFyIF9fZXh0ZW5kcyA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG52YXIgX19kZWNvcmF0ZSA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xuXG5cbnZhciBGaWxlQ2xlYW5CdXR0b24gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEZpbGVDbGVhbkJ1dHRvbiwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBGaWxlQ2xlYW5CdXR0b24oKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICB9XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdCh2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJQcm9wXCJdKSgpXG4gICAgXSwgRmlsZUNsZWFuQnV0dG9uLnByb3RvdHlwZSwgXCJxdWVzdGlvblwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QodnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiUHJvcFwiXSkoKVxuICAgIF0sIEZpbGVDbGVhbkJ1dHRvbi5wcm90b3R5cGUsIFwiY3NzXCIsIHZvaWQgMCk7XG4gICAgRmlsZUNsZWFuQnV0dG9uID0gX19kZWNvcmF0ZShbXG4gICAgICAgIHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIkNvbXBvbmVudFwiXVxuICAgIF0sIEZpbGVDbGVhbkJ1dHRvbik7XG4gICAgcmV0dXJuIEZpbGVDbGVhbkJ1dHRvbjtcbn0odnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hKSk7XG5cbnZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jb21wb25lbnQoXCJzdi1maWxlLWNsZWFuLWJ0blwiLCBGaWxlQ2xlYW5CdXR0b24pO1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChGaWxlQ2xlYW5CdXR0b24pO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9maWxlLXByZXZpZXcudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy90cy1sb2FkZXI/P3JlZi0tMCEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL3Z1ZS9maWxlLXByZXZpZXcudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBGaWxlUHJldmlldywgZGVmYXVsdCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJGaWxlUHJldmlld1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEZpbGVQcmV2aWV3OyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZSAqLyBcInZ1ZVwiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubih2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlLXByb3BlcnR5LWRlY29yYXRvciAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IvbGliL2luZGV4LmpzXCIpO1xudmFyIF9fZXh0ZW5kcyA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG52YXIgX19kZWNvcmF0ZSA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xuXG5cbnZhciBGaWxlUHJldmlldyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoRmlsZVByZXZpZXcsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gRmlsZVByZXZpZXcoKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICB9XG4gICAgRmlsZVByZXZpZXcucHJvdG90eXBlLmlzUHJldmlld1Zpc2libGUgPSBmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucXVlc3Rpb24uaXNQcmV2aWV3VmlzaWJsZShpbmRleCk7XG4gICAgfTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlByb3BcIl0pKClcbiAgICBdLCBGaWxlUHJldmlldy5wcm90b3R5cGUsIFwicXVlc3Rpb25cIiwgdm9pZCAwKTtcbiAgICBGaWxlUHJldmlldyA9IF9fZGVjb3JhdGUoW1xuICAgICAgICB2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJDb21wb25lbnRcIl1cbiAgICBdLCBGaWxlUHJldmlldyk7XG4gICAgcmV0dXJuIEZpbGVQcmV2aWV3O1xufSh2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEpKTtcblxudnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNvbXBvbmVudChcInN2LWZpbGUtcHJldmlld1wiLCBGaWxlUHJldmlldyk7XG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKEZpbGVQcmV2aWV3KTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvZmlsZS12aWRlby52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy90cy1sb2FkZXI/P3JlZi0tMCEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL3Z1ZS9maWxlLXZpZGVvLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEZpbGVWaWRlbywgZGVmYXVsdCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJGaWxlVmlkZW9cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBGaWxlVmlkZW87IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlICovIFwidnVlXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB2dWUtcHJvcGVydHktZGVjb3JhdG9yICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLXByb3BlcnR5LWRlY29yYXRvci9saWIvaW5kZXguanNcIik7XG52YXIgX19leHRlbmRzID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbnZhciBfX2RlY29yYXRlID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn07XG5cblxudmFyIEZpbGVWaWRlbyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoRmlsZVZpZGVvLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEZpbGVWaWRlbygpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIH1cbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlByb3BcIl0pKClcbiAgICBdLCBGaWxlVmlkZW8ucHJvdG90eXBlLCBcInF1ZXN0aW9uXCIsIHZvaWQgMCk7XG4gICAgRmlsZVZpZGVvID0gX19kZWNvcmF0ZShbXG4gICAgICAgIHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIkNvbXBvbmVudFwiXVxuICAgIF0sIEZpbGVWaWRlbyk7XG4gICAgcmV0dXJuIEZpbGVWaWRlbztcbn0odnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hKSk7XG5cbnZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jb21wb25lbnQoXCJzdi1maWxlLXZpZGVvXCIsIEZpbGVWaWRlbyk7XG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKEZpbGVWaWRlbyk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2ZpbGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyPz9yZWYtLTAhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NyYy92dWUvZmlsZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBGaWxlLCBkZWZhdWx0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkZpbGVcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBGaWxlOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZSAqLyBcInZ1ZVwiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubih2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlLXByb3BlcnR5LWRlY29yYXRvciAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IvbGliL2luZGV4LmpzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9xdWVzdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9xdWVzdGlvbiAqLyBcIi4vc3JjL3Z1ZS9xdWVzdGlvbi50c1wiKTtcbnZhciBfX2V4dGVuZHMgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xudmFyIF9fZGVjb3JhdGUgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufTtcblxuXG5cbnZhciBGaWxlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhGaWxlLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEZpbGUoKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICB9XG4gICAgRmlsZSA9IF9fZGVjb3JhdGUoW1xuICAgICAgICB2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJDb21wb25lbnRcIl1cbiAgICBdLCBGaWxlKTtcbiAgICByZXR1cm4gRmlsZTtcbn0oX3F1ZXN0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJkZWZhdWx0XCJdKSk7XG5cbnZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jb21wb25lbnQoXCJzdXJ2ZXktZmlsZVwiLCBGaWxlKTtcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoRmlsZSk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2Zsb3dwYW5lbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL2Zsb3dwYW5lbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEZsb3dQYW5lbCwgZGVmYXVsdCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJGbG93UGFuZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBGbG93UGFuZWw7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlICovIFwidnVlXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB2dWUtcHJvcGVydHktZGVjb3JhdG9yICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLXByb3BlcnR5LWRlY29yYXRvci9saWIvaW5kZXguanNcIik7XG52YXIgX19leHRlbmRzID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbnZhciBfX2RlY29yYXRlID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn07XG5cblxudmFyIEZsb3dQYW5lbCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoRmxvd1BhbmVsLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEZsb3dQYW5lbCgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmlzQ29sbGFwc2VkVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRmxvd1BhbmVsLnByb3RvdHlwZSwgXCJyb290Tm9kZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucm9vdE5vZGVWYWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIEZsb3dQYW5lbC5wcm90b3R5cGUuYmVmb3JlTW91bnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5xdWVzdGlvbilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgICB0aGlzLnF1ZXN0aW9uLm9uQ3VzdG9tSHRtbFByb2R1Y2luZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLnF1ZXN0aW9uLm9uR2V0SHRtbEZvclF1ZXN0aW9uID0gc2VsZi5yZW5kZXJRdWVzdGlvbjtcbiAgICAgICAgdGhpcy5zZXRSb290Tm9kZSgpO1xuICAgIH07XG4gICAgRmxvd1BhbmVsLnByb3RvdHlwZS5zZXRSb290Tm9kZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGh0bWwgPSBcIjxzcGFuPlwiICsgdGhpcy5xdWVzdGlvbi5wcm9kdWNlSHRtbCgpICsgXCI8L3NwYW4+XCI7XG4gICAgICAgIHZhciBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKGh0bWwsIFwidGV4dC94bWxcIik7XG4gICAgICAgIHRoaXMucm9vdE5vZGVWYWx1ZSA9XG4gICAgICAgICAgICAhIWRvYyAmJiBkb2MuY2hpbGROb2Rlcy5sZW5ndGggPiAwID8gZG9jLmNoaWxkTm9kZXNbMF0gOiBudWxsO1xuICAgIH07XG4gICAgRmxvd1BhbmVsLnByb3RvdHlwZS5yZW5kZXJRdWVzdGlvbiA9IGZ1bmN0aW9uIChxdWVzdGlvbikge1xuICAgICAgICByZXR1cm4gXCI8cXVlc3Rpb24+XCIgKyBxdWVzdGlvbi5uYW1lICsgXCI8L3F1ZXN0aW9uPlwiO1xuICAgIH07XG4gICAgRmxvd1BhbmVsLnByb3RvdHlwZS5tb3VudGVkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBpZiAodGhpcy5xdWVzdGlvbi5zdXJ2ZXkpIHtcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb24uc3VydmV5LmFmdGVyUmVuZGVyUGFuZWwodGhpcy5xdWVzdGlvbiwgdGhpcy4kZWwpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNDb2xsYXBzZWQgPSB0aGlzLnF1ZXN0aW9uLmlzQ29sbGFwc2VkO1xuICAgICAgICB0aGlzLnF1ZXN0aW9uLnJlZ2lzdGVyUHJvcGVydHlDaGFuZ2VkSGFuZGxlcnMoW1wic3RhdGVcIl0sIGZ1bmN0aW9uICh2YWwpIHsgX3RoaXMuaXNDb2xsYXBzZWQgPSBfdGhpcy5xdWVzdGlvbi5pc0NvbGxhcHNlZDsgfSk7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRmxvd1BhbmVsLnByb3RvdHlwZSwgXCJyb290U3R5bGVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICAgICAgICAgIGlmICh0aGlzLnF1ZXN0aW9uLnJlbmRlcldpZHRoKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0W1wiZmxleEJhc2lzXCJdID0gdGhpcy5xdWVzdGlvbi5yZW5kZXJXaWR0aDtcbiAgICAgICAgICAgICAgICByZXN1bHRbXCJmbGV4R3Jvd1wiXSA9IDE7XG4gICAgICAgICAgICAgICAgcmVzdWx0W1wiZmxleFNocmlua1wiXSA9IDE7XG4gICAgICAgICAgICAgICAgcmVzdWx0W1wid2lkdGhcIl0gPSB0aGlzLnF1ZXN0aW9uLnJlbmRlcldpZHRoO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtcIm1pbldpZHRoXCJdID0gdGhpcy5xdWVzdGlvbi5taW5XaWR0aDtcbiAgICAgICAgICAgICAgICByZXN1bHRbXCJtYXhXaWR0aFwiXSA9IHRoaXMucXVlc3Rpb24ubWF4V2lkdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEZsb3dQYW5lbC5wcm90b3R5cGUsIFwic2hvd0ljb25cIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAodGhpcy5xdWVzdGlvbiAmJiAodGhpcy5xdWVzdGlvbi5pc0V4cGFuZGVkIHx8IHRoaXMucXVlc3Rpb24uaXNDb2xsYXBzZWQpKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGbG93UGFuZWwucHJvdG90eXBlLCBcInJvd3NcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLnJvd3M7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRmxvd1BhbmVsLnByb3RvdHlwZSwgXCJoYXNUaXRsZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucXVlc3Rpb24udGl0bGUubGVuZ3RoID4gMDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGbG93UGFuZWwucHJvdG90eXBlLCBcInN1cnZleVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucXVlc3Rpb24uc3VydmV5O1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEZsb3dQYW5lbC5wcm90b3R5cGUsIFwiaWNvbkNzc1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgLy9yZWZhY3RvclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IFwic3ZfcGFuZWxfaWNvblwiO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlzQ29sbGFwc2VkKVxuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBcIiBzdl9leHBhbmRlZFwiO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGbG93UGFuZWwucHJvdG90eXBlLCBcImlzQ29sbGFwc2VkXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pc0NvbGxhcHNlZFZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuaXNDb2xsYXBzZWRWYWx1ZSA9IHZhbDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIEZsb3dQYW5lbC5wcm90b3R5cGUuY2hhbmdlRXhwYW5kZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLnF1ZXN0aW9uLmlzQ29sbGFwc2VkIHx8IHRoaXMucXVlc3Rpb24uaXNFeHBhbmRlZCkge1xuICAgICAgICAgICAgaWYgKHRoaXMucXVlc3Rpb24uaXNDb2xsYXBzZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnF1ZXN0aW9uLmV4cGFuZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbi5jb2xsYXBzZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlByb3BcIl0pKClcbiAgICBdLCBGbG93UGFuZWwucHJvdG90eXBlLCBcInF1ZXN0aW9uXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdCh2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJQcm9wXCJdKSgpXG4gICAgXSwgRmxvd1BhbmVsLnByb3RvdHlwZSwgXCJpc0VkaXRNb2RlXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdCh2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJQcm9wXCJdKSgpXG4gICAgXSwgRmxvd1BhbmVsLnByb3RvdHlwZSwgXCJjc3NcIiwgdm9pZCAwKTtcbiAgICBGbG93UGFuZWwgPSBfX2RlY29yYXRlKFtcbiAgICAgICAgdnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiQ29tcG9uZW50XCJdXG4gICAgXSwgRmxvd1BhbmVsKTtcbiAgICByZXR1cm4gRmxvd1BhbmVsO1xufSh2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEpKTtcblxudnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNvbXBvbmVudChcInN1cnZleS1mbG93cGFuZWxcIiwgRmxvd1BhbmVsKTtcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoRmxvd1BhbmVsKTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvZmxvd3BhbmVsZWxlbWVudC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy90cy1sb2FkZXI/P3JlZi0tMCEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL3Z1ZS9mbG93cGFuZWxlbGVtZW50LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEZsb3dQYW5lbEVsZW1lbnQsIGRlZmF1bHQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiRmxvd1BhbmVsRWxlbWVudFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEZsb3dQYW5lbEVsZW1lbnQ7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlICovIFwidnVlXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB2dWUtcHJvcGVydHktZGVjb3JhdG9yICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLXByb3BlcnR5LWRlY29yYXRvci9saWIvaW5kZXguanNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3F1ZXN0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3F1ZXN0aW9uICovIFwiLi9zcmMvdnVlL3F1ZXN0aW9uLnRzXCIpO1xudmFyIF9fZXh0ZW5kcyA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG52YXIgX19kZWNvcmF0ZSA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xuXG5cblxudmFyIEZsb3dQYW5lbEVsZW1lbnQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEZsb3dQYW5lbEVsZW1lbnQsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gRmxvd1BhbmVsRWxlbWVudCgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLnF1ZXN0aW9uID0gbnVsbDtcbiAgICAgICAgX3RoaXMudGFnTmFtZSA9IFwic3BhblwiO1xuICAgICAgICBfdGhpcy5ub2RlcyA9IFtdO1xuICAgICAgICBfdGhpcy50ZXh0ID0gXCJcIjtcbiAgICAgICAgX3RoaXMuc3R5bGUgPSB7fTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBGbG93UGFuZWxFbGVtZW50XzEgPSBGbG93UGFuZWxFbGVtZW50O1xuICAgIEZsb3dQYW5lbEVsZW1lbnQucHJvdG90eXBlLmdldFN0eWxlID0gZnVuY3Rpb24gKG5vZGVUeXBlKSB7XG4gICAgICAgIHZhciBzdHlsZSA9IHt9O1xuICAgICAgICBpZiAobm9kZVR5cGUudG9Mb3dlckNhc2UoKSA9PT0gXCJiXCIpIHtcbiAgICAgICAgICAgIHN0eWxlLmZvbnRXZWlnaHQgPSBcImJvbGRcIjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZVR5cGUudG9Mb3dlckNhc2UoKSA9PT0gXCJpXCIpIHtcbiAgICAgICAgICAgIHN0eWxlLmZvbnRTdHlsZSA9IFwiaXRhbGljXCI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGVUeXBlLnRvTG93ZXJDYXNlKCkgPT09IFwidVwiKSB7XG4gICAgICAgICAgICBzdHlsZS50ZXh0RGVjb3JhdGlvbiA9IFwidW5kZXJsaW5lXCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0eWxlO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEZsb3dQYW5lbEVsZW1lbnQucHJvdG90eXBlLCBcImVsZW1lbnRJZFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmVsZW1lbnRJZFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFGbG93UGFuZWxFbGVtZW50XzEuaWRWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBGbG93UGFuZWxFbGVtZW50XzEuaWRWYWx1ZSA9IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEZsb3dQYW5lbEVsZW1lbnRfMS5pZFZhbHVlKys7XG4gICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50SWRWYWx1ZSA9IFwiZnBfZWxcIiArIEZsb3dQYW5lbEVsZW1lbnRfMS5pZFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudElkVmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRmxvd1BhbmVsRWxlbWVudC5wcm90b3R5cGUsIFwic3VydmV5XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wYW5lbC5zdXJ2ZXk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBGbG93UGFuZWxFbGVtZW50LnByb3RvdHlwZS5iZWZvcmVNb3VudCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnBhbmVsIHx8ICF0aGlzLm5vZGUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciBub2RlVHlwZSA9IHRoaXMubm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAoIXRoaXMuaGFzVGV4dENoaWxkTm9kZXNPbmx5KHRoaXMubm9kZSkpIHtcbiAgICAgICAgICAgIHRoaXMubm9kZXMgPSB0aGlzLmdldENoaWxkRG9tTm9kZXModGhpcy5ub2RlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChub2RlVHlwZSA9PSBcInF1ZXN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnF1ZXN0aW9uID0gdGhpcy5wYW5lbC5nZXRRdWVzdGlvbkJ5TmFtZSh0aGlzLm5vZGUudGV4dENvbnRlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy50ZXh0ID0gdGhpcy5ub2RlLnRleHRDb250ZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlVHlwZSA9PSBcImRpdlwiICYmICF0aGlzLnF1ZXN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnRhZ05hbWUgPSBcImRpdlwiO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3R5bGUgPSB0aGlzLmdldFN0eWxlKG5vZGVUeXBlKTtcbiAgICB9O1xuICAgIC8vZHVwbGljYXRlZCBjb2RlIGZyb20gZWxlbWVudC52dWVcbiAgICBGbG93UGFuZWxFbGVtZW50LnByb3RvdHlwZS5nZXRDb21wb25lbnROYW1lID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdChfcXVlc3Rpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcImdldENvbXBvbmVudE5hbWVcIl0pKGVsZW1lbnQpO1xuICAgIH07XG4gICAgLy8gZHVwbGljYXRlZCBjb2RlIGZyb20gcmVhY3RwYWdlcy50c3hcbiAgICBGbG93UGFuZWxFbGVtZW50LnByb3RvdHlwZS5oYXNUZXh0Q2hpbGROb2Rlc09ubHkgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICB2YXIgbm9kZXMgPSBub2RlLmNoaWxkTm9kZXM7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChub2Rlc1tpXS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpICE9PSBcIiN0ZXh0XCIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG4gICAgRmxvd1BhbmVsRWxlbWVudC5wcm90b3R5cGUuZ2V0Q2hpbGREb21Ob2RlcyA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgIHZhciBkb21Ob2RlcyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUuY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgZG9tTm9kZXMucHVzaChub2RlLmNoaWxkTm9kZXNbaV0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkb21Ob2RlcztcbiAgICB9O1xuICAgIHZhciBGbG93UGFuZWxFbGVtZW50XzE7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdCh2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJQcm9wXCJdKSgpXG4gICAgXSwgRmxvd1BhbmVsRWxlbWVudC5wcm90b3R5cGUsIFwibm9kZVwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QodnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiUHJvcFwiXSkoKVxuICAgIF0sIEZsb3dQYW5lbEVsZW1lbnQucHJvdG90eXBlLCBcInBhbmVsXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdCh2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJQcm9wXCJdKSgpXG4gICAgXSwgRmxvd1BhbmVsRWxlbWVudC5wcm90b3R5cGUsIFwiY3NzXCIsIHZvaWQgMCk7XG4gICAgRmxvd1BhbmVsRWxlbWVudCA9IEZsb3dQYW5lbEVsZW1lbnRfMSA9IF9fZGVjb3JhdGUoW1xuICAgICAgICB2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJDb21wb25lbnRcIl1cbiAgICBdLCBGbG93UGFuZWxFbGVtZW50KTtcbiAgICByZXR1cm4gRmxvd1BhbmVsRWxlbWVudDtcbn0odnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hKSk7XG5cbnZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jb21wb25lbnQoXCJzdXJ2ZXktZmxvd3BhbmVsZWxlbWVudFwiLCBGbG93UGFuZWxFbGVtZW50KTtcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoRmxvd1BhbmVsRWxlbWVudCk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2hlYWRlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL2hlYWRlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFN1cnZleUhlYWRlciwgZGVmYXVsdCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJTdXJ2ZXlIZWFkZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBTdXJ2ZXlIZWFkZXI7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlICovIFwidnVlXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB2dWUtcHJvcGVydHktZGVjb3JhdG9yICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLXByb3BlcnR5LWRlY29yYXRvci9saWIvaW5kZXguanNcIik7XG52YXIgX19leHRlbmRzID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbnZhciBfX2RlY29yYXRlID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn07XG5cblxudmFyIFN1cnZleUhlYWRlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoU3VydmV5SGVhZGVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFN1cnZleUhlYWRlcigpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIH1cbiAgICBTdXJ2ZXlIZWFkZXIucHJvdG90eXBlLm1vdW50ZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBlbCA9IHRoaXMuJGVsO1xuICAgICAgICBpZiAoZWwgJiYgdGhpcy5zdXJ2ZXkpXG4gICAgICAgICAgICB0aGlzLnN1cnZleS5hZnRlclJlbmRlckhlYWRlcihlbCk7XG4gICAgfTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlByb3BcIl0pKClcbiAgICBdLCBTdXJ2ZXlIZWFkZXIucHJvdG90eXBlLCBcInN1cnZleVwiLCB2b2lkIDApO1xuICAgIFN1cnZleUhlYWRlciA9IF9fZGVjb3JhdGUoW1xuICAgICAgICB2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJDb21wb25lbnRcIl1cbiAgICBdLCBTdXJ2ZXlIZWFkZXIpO1xuICAgIHJldHVybiBTdXJ2ZXlIZWFkZXI7XG59KHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYSkpO1xuXG52dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY29tcG9uZW50KFwic3VydmV5LWhlYWRlclwiLCBTdXJ2ZXlIZWFkZXIpO1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChTdXJ2ZXlIZWFkZXIpO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9odG1sLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL2h0bWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogSHRtbCwgZGVmYXVsdCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJIdG1sXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gSHRtbDsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB2dWUgKi8gXCJ2dWVcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4odnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9pbmRleC5qc1wiKTtcbnZhciBfX2V4dGVuZHMgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xudmFyIF9fZGVjb3JhdGUgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufTtcblxuXG52YXIgSHRtbCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoSHRtbCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBIdG1sKCkge1xuICAgICAgICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgfVxuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QodnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiUHJvcFwiXSkoKVxuICAgIF0sIEh0bWwucHJvdG90eXBlLCBcInF1ZXN0aW9uXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdCh2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJQcm9wXCJdKSgpXG4gICAgXSwgSHRtbC5wcm90b3R5cGUsIFwiY3NzXCIsIHZvaWQgMCk7XG4gICAgSHRtbCA9IF9fZGVjb3JhdGUoW1xuICAgICAgICB2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJDb21wb25lbnRcIl1cbiAgICBdLCBIdG1sKTtcbiAgICByZXR1cm4gSHRtbDtcbn0odnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hKSk7XG5cbnZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jb21wb25lbnQoXCJzdXJ2ZXktaHRtbFwiLCBIdG1sKTtcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoSHRtbCk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2ltYWdlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy90cy1sb2FkZXI/P3JlZi0tMCEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL3Z1ZS9pbWFnZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogUXVlc3Rpb25JbWFnZSwgZGVmYXVsdCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJRdWVzdGlvbkltYWdlXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUXVlc3Rpb25JbWFnZTsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB2dWUgKi8gXCJ2dWVcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4odnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9pbmRleC5qc1wiKTtcbnZhciBfX2V4dGVuZHMgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xudmFyIF9fZGVjb3JhdGUgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufTtcblxuXG52YXIgUXVlc3Rpb25JbWFnZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoUXVlc3Rpb25JbWFnZSwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBRdWVzdGlvbkltYWdlKCkge1xuICAgICAgICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgfVxuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QodnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiUHJvcFwiXSkoKVxuICAgIF0sIFF1ZXN0aW9uSW1hZ2UucHJvdG90eXBlLCBcInF1ZXN0aW9uXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdCh2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJQcm9wXCJdKSgpXG4gICAgXSwgUXVlc3Rpb25JbWFnZS5wcm90b3R5cGUsIFwiY3NzXCIsIHZvaWQgMCk7XG4gICAgUXVlc3Rpb25JbWFnZSA9IF9fZGVjb3JhdGUoW1xuICAgICAgICB2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJDb21wb25lbnRcIl1cbiAgICBdLCBRdWVzdGlvbkltYWdlKTtcbiAgICByZXR1cm4gUXVlc3Rpb25JbWFnZTtcbn0odnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hKSk7XG5cbnZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jb21wb25lbnQoXCJzdXJ2ZXktaW1hZ2VcIiwgUXVlc3Rpb25JbWFnZSk7XG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKFF1ZXN0aW9uSW1hZ2UpO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9pbWFnZXBpY2tlci1pdGVtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL2ltYWdlcGlja2VyLWl0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogSW1hZ2VQaWNrZXJJdGVtLCBkZWZhdWx0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkltYWdlUGlja2VySXRlbVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEltYWdlUGlja2VySXRlbTsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB2dWUgKi8gXCJ2dWVcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4odnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9pbmRleC5qc1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcXVlc3Rpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcXVlc3Rpb24gKi8gXCIuL3NyYy92dWUvcXVlc3Rpb24udHNcIik7XG52YXIgX19leHRlbmRzID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbnZhciBfX2RlY29yYXRlID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn07XG5cblxuXG52YXIgSW1hZ2VQaWNrZXJJdGVtID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhJbWFnZVBpY2tlckl0ZW0sIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gSW1hZ2VQaWNrZXJJdGVtKCkge1xuICAgICAgICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgfVxuICAgIEltYWdlUGlja2VySXRlbS5wcm90b3R5cGUuZ2V0SXRlbUNsYXNzID0gZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucXVlc3Rpb24uZ2V0SXRlbUNsYXNzKGl0ZW0pO1xuICAgIH07XG4gICAgSW1hZ2VQaWNrZXJJdGVtLnByb3RvdHlwZS5nZXRNb2RlbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlbTtcbiAgICB9O1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QodnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiUHJvcFwiXSkoKVxuICAgIF0sIEltYWdlUGlja2VySXRlbS5wcm90b3R5cGUsIFwicXVlc3Rpb25cIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlByb3BcIl0pKClcbiAgICBdLCBJbWFnZVBpY2tlckl0ZW0ucHJvdG90eXBlLCBcIml0ZW1cIiwgdm9pZCAwKTtcbiAgICBJbWFnZVBpY2tlckl0ZW0gPSBfX2RlY29yYXRlKFtcbiAgICAgICAgdnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiQ29tcG9uZW50XCJdXG4gICAgXSwgSW1hZ2VQaWNrZXJJdGVtKTtcbiAgICByZXR1cm4gSW1hZ2VQaWNrZXJJdGVtO1xufShfcXVlc3Rpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcImRlZmF1bHRcIl0pKTtcblxudnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNvbXBvbmVudChcInN1cnZleS1pbWFnZXBpY2tlci1pdGVtXCIsIEltYWdlUGlja2VySXRlbSk7XG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKEltYWdlUGlja2VySXRlbSk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2ltYWdlcGlja2VyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy90cy1sb2FkZXI/P3JlZi0tMCEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL3Z1ZS9pbWFnZXBpY2tlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogSW1hZ2VQaWNrZXIsIGRlZmF1bHQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiSW1hZ2VQaWNrZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBJbWFnZVBpY2tlcjsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB2dWUgKi8gXCJ2dWVcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4odnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9pbmRleC5qc1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcXVlc3Rpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcXVlc3Rpb24gKi8gXCIuL3NyYy92dWUvcXVlc3Rpb24udHNcIik7XG52YXIgX19leHRlbmRzID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbnZhciBfX2RlY29yYXRlID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn07XG5cblxuXG52YXIgSW1hZ2VQaWNrZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEltYWdlUGlja2VyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEltYWdlUGlja2VyKCkge1xuICAgICAgICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgfVxuICAgIEltYWdlUGlja2VyLnByb3RvdHlwZS5nZXRJdGVtQ2xhc3MgPSBmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5nZXRJdGVtQ2xhc3MoaXRlbSk7XG4gICAgfTtcbiAgICBJbWFnZVBpY2tlciA9IF9fZGVjb3JhdGUoW1xuICAgICAgICB2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJDb21wb25lbnRcIl1cbiAgICBdLCBJbWFnZVBpY2tlcik7XG4gICAgcmV0dXJuIEltYWdlUGlja2VyO1xufShfcXVlc3Rpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcImRlZmF1bHRcIl0pKTtcblxudnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNvbXBvbmVudChcInN1cnZleS1pbWFnZXBpY2tlclwiLCBJbWFnZVBpY2tlcik7XG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKEltYWdlUGlja2VyKTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvbWF0cml4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyPz9yZWYtLTAhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NyYy92dWUvbWF0cml4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogTWF0cml4LCBkZWZhdWx0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIk1hdHJpeFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIE1hdHJpeDsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB2dWUgKi8gXCJ2dWVcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4odnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9pbmRleC5qc1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcXVlc3Rpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcXVlc3Rpb24gKi8gXCIuL3NyYy92dWUvcXVlc3Rpb24udHNcIik7XG52YXIgX19leHRlbmRzID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbnZhciBfX2RlY29yYXRlID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn07XG5cblxuXG52YXIgTWF0cml4ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhNYXRyaXgsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gTWF0cml4KCkge1xuICAgICAgICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgfVxuICAgIE1hdHJpeC5wcm90b3R5cGUuY2VsbENsaWNrID0gZnVuY3Rpb24gKHJvdywgY29sdW1uKSB7XG4gICAgICAgIGlmICh0aGlzLnF1ZXN0aW9uLmlzSW5wdXRSZWFkT25seSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgcm93LnZhbHVlID0gY29sdW1uLnZhbHVlO1xuICAgIH07XG4gICAgTWF0cml4ID0gX19kZWNvcmF0ZShbXG4gICAgICAgIHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIkNvbXBvbmVudFwiXVxuICAgIF0sIE1hdHJpeCk7XG4gICAgcmV0dXJuIE1hdHJpeDtcbn0oX3F1ZXN0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJkZWZhdWx0XCJdKSk7XG5cbnZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jb21wb25lbnQoXCJzdXJ2ZXktbWF0cml4XCIsIE1hdHJpeCk7XG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKE1hdHJpeCk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL21hdHJpeGNlbGwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyPz9yZWYtLTAhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NyYy92dWUvbWF0cml4Y2VsbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBNYXRyaXhDZWxsLCBkZWZhdWx0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIk1hdHJpeENlbGxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBNYXRyaXhDZWxsOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZSAqLyBcInZ1ZVwiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubih2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlLXByb3BlcnR5LWRlY29yYXRvciAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IvbGliL2luZGV4LmpzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9xdWVzdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9xdWVzdGlvbiAqLyBcIi4vc3JjL3Z1ZS9xdWVzdGlvbi50c1wiKTtcbnZhciBfX2V4dGVuZHMgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xudmFyIF9fZGVjb3JhdGUgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufTtcblxuXG5cbnZhciBNYXRyaXhDZWxsID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhNYXRyaXhDZWxsLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIE1hdHJpeENlbGwoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5pc1Zpc2libGUgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBNYXRyaXhDZWxsLnByb3RvdHlwZS5nZXRDb21wb25lbnROYW1lID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdChfcXVlc3Rpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcImdldENvbXBvbmVudE5hbWVcIl0pKGVsZW1lbnQpO1xuICAgIH07XG4gICAgTWF0cml4Q2VsbC5wcm90b3R5cGUuZ2V0SGVhZGVycyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2VsbC5oZWFkZXJzO1xuICAgIH07XG4gICAgTWF0cml4Q2VsbC5wcm90b3R5cGUuZ2V0Q2VsbFN0eWxlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoISF0aGlzLmNlbGwud2lkdGggfHwgISF0aGlzLmNlbGwubWluV2lkdGgpXG4gICAgICAgICAgICByZXR1cm4geyB3aWR0aDogdGhpcy5jZWxsLndpZHRoLCBtaW5XaWR0aDogdGhpcy5jZWxsLm1pbldpZHRoIH07XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gICAgTWF0cml4Q2VsbC5wcm90b3R5cGUuZ2V0Q2VsbEluZGV4ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jZWxsLmluZGV4IHx8IFwiXCI7XG4gICAgfTtcbiAgICBNYXRyaXhDZWxsLnByb3RvdHlwZS5tb3VudGVkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBpZiAoIXRoaXMuY2VsbC5oYXNRdWVzdGlvbiB8fCAhdGhpcy5xdWVzdGlvbiB8fCAhdGhpcy5xdWVzdGlvbi5zdXJ2ZXkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMub25WaXNpYmlsaXR5Q2hhbmdlZCgpO1xuICAgICAgICB0aGlzLmNlbGwucXVlc3Rpb24ucmVnaXN0ZXJQcm9wZXJ0eUNoYW5nZWRIYW5kbGVycyhbXCJpc1Zpc2libGVcIl0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLm9uVmlzaWJpbGl0eUNoYW5nZWQoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgICAgICAgY2VsbDogdGhpcy5jZWxsLmNlbGwsXG4gICAgICAgICAgICBjZWxsUXVlc3Rpb246IHRoaXMuY2VsbC5xdWVzdGlvbixcbiAgICAgICAgICAgIGh0bWxFbGVtZW50OiB0aGlzLiRlbCxcbiAgICAgICAgICAgIHJvdzogdGhpcy5jZWxsLnJvdyxcbiAgICAgICAgICAgIGNvbHVtbjogdGhpcy5jZWxsLmNlbGwuY29sdW1uLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnF1ZXN0aW9uLnN1cnZleS5tYXRyaXhBZnRlckNlbGxSZW5kZXIodGhpcy5xdWVzdGlvbiwgb3B0aW9ucyk7XG4gICAgfTtcbiAgICBNYXRyaXhDZWxsLnByb3RvdHlwZS5vblZpc2liaWxpdHlDaGFuZ2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmlzVmlzaWJsZSA9IHRoaXMuY2VsbC5xdWVzdGlvbi5pc1Zpc2libGU7XG4gICAgfTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlByb3BcIl0pKClcbiAgICBdLCBNYXRyaXhDZWxsLnByb3RvdHlwZSwgXCJxdWVzdGlvblwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QodnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiUHJvcFwiXSkoKVxuICAgIF0sIE1hdHJpeENlbGwucHJvdG90eXBlLCBcImNlbGxcIiwgdm9pZCAwKTtcbiAgICBNYXRyaXhDZWxsID0gX19kZWNvcmF0ZShbXG4gICAgICAgIHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIkNvbXBvbmVudFwiXVxuICAgIF0sIE1hdHJpeENlbGwpO1xuICAgIHJldHVybiBNYXRyaXhDZWxsO1xufSh2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEpKTtcblxudnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNvbXBvbmVudChcInN1cnZleS1tYXRyaXhjZWxsXCIsIE1hdHJpeENlbGwpO1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChNYXRyaXhDZWxsKTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvbWF0cml4ZHJvcGRvd24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL21hdHJpeGRyb3Bkb3duLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBNYXRyaXhEcm9wZG93biwgZGVmYXVsdCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJNYXRyaXhEcm9wZG93blwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIE1hdHJpeERyb3Bkb3duOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZSAqLyBcInZ1ZVwiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubih2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlLXByb3BlcnR5LWRlY29yYXRvciAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IvbGliL2luZGV4LmpzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9xdWVzdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9xdWVzdGlvbiAqLyBcIi4vc3JjL3Z1ZS9xdWVzdGlvbi50c1wiKTtcbnZhciBfX2V4dGVuZHMgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xudmFyIF9fZGVjb3JhdGUgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufTtcblxuXG5cbnZhciBNYXRyaXhEcm9wZG93biA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoTWF0cml4RHJvcGRvd24sIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gTWF0cml4RHJvcGRvd24oKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICB9XG4gICAgTWF0cml4RHJvcGRvd24gPSBfX2RlY29yYXRlKFtcbiAgICAgICAgdnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiQ29tcG9uZW50XCJdXG4gICAgXSwgTWF0cml4RHJvcGRvd24pO1xuICAgIHJldHVybiBNYXRyaXhEcm9wZG93bjtcbn0oX3F1ZXN0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJkZWZhdWx0XCJdKSk7XG5cbnZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jb21wb25lbnQoXCJzdXJ2ZXktbWF0cml4ZHJvcGRvd25cIiwgTWF0cml4RHJvcGRvd24pO1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChNYXRyaXhEcm9wZG93bik7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL21hdHJpeGR5bmFtaWMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyPz9yZWYtLTAhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NyYy92dWUvbWF0cml4ZHluYW1pYy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBNYXRyaXhEeW5hbWljLCBkZWZhdWx0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIk1hdHJpeER5bmFtaWNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBNYXRyaXhEeW5hbWljOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZSAqLyBcInZ1ZVwiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubih2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlLXByb3BlcnR5LWRlY29yYXRvciAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IvbGliL2luZGV4LmpzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9xdWVzdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9xdWVzdGlvbiAqLyBcIi4vc3JjL3Z1ZS9xdWVzdGlvbi50c1wiKTtcbnZhciBfX2V4dGVuZHMgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xudmFyIF9fZGVjb3JhdGUgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufTtcblxuXG5cbnZhciBNYXRyaXhEeW5hbWljID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhNYXRyaXhEeW5hbWljLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIE1hdHJpeER5bmFtaWMoKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICB9XG4gICAgTWF0cml4RHluYW1pYy5wcm90b3R5cGUuYWRkUm93Q2xpY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMucXVlc3Rpb24uYWRkUm93VUkoKTtcbiAgICB9O1xuICAgIE1hdHJpeER5bmFtaWMgPSBfX2RlY29yYXRlKFtcbiAgICAgICAgdnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiQ29tcG9uZW50XCJdXG4gICAgXSwgTWF0cml4RHluYW1pYyk7XG4gICAgcmV0dXJuIE1hdHJpeER5bmFtaWM7XG59KF9xdWVzdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiZGVmYXVsdFwiXSkpO1xuXG52dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY29tcG9uZW50KFwic3VydmV5LW1hdHJpeGR5bmFtaWNcIiwgTWF0cml4RHluYW1pYyk7XG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKE1hdHJpeER5bmFtaWMpO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9tYXRyaXhoZWFkZXJyZXF1aXJlZC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyPz9yZWYtLTAhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NyYy92dWUvbWF0cml4aGVhZGVycmVxdWlyZWQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IE1hdHJpeEhlYWRlclJlcXVpcmVkLCBkZWZhdWx0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIk1hdHJpeEhlYWRlclJlcXVpcmVkXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gTWF0cml4SGVhZGVyUmVxdWlyZWQ7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlICovIFwidnVlXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB2dWUtcHJvcGVydHktZGVjb3JhdG9yICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLXByb3BlcnR5LWRlY29yYXRvci9saWIvaW5kZXguanNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Jhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYmFzZSAqLyBcIi4vc3JjL3Z1ZS9iYXNlLnRzXCIpO1xudmFyIF9fZXh0ZW5kcyA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG52YXIgX19kZWNvcmF0ZSA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xuXG5cblxudmFyIE1hdHJpeEhlYWRlclJlcXVpcmVkID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhNYXRyaXhIZWFkZXJSZXF1aXJlZCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBNYXRyaXhIZWFkZXJSZXF1aXJlZCgpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIH1cbiAgICBNYXRyaXhIZWFkZXJSZXF1aXJlZC5wcm90b3R5cGUuZ2V0TW9kZWwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtbjtcbiAgICB9O1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QodnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiUHJvcFwiXSkoKVxuICAgIF0sIE1hdHJpeEhlYWRlclJlcXVpcmVkLnByb3RvdHlwZSwgXCJxdWVzdGlvblwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QodnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiUHJvcFwiXSkoKVxuICAgIF0sIE1hdHJpeEhlYWRlclJlcXVpcmVkLnByb3RvdHlwZSwgXCJjb2x1bW5cIiwgdm9pZCAwKTtcbiAgICBNYXRyaXhIZWFkZXJSZXF1aXJlZCA9IF9fZGVjb3JhdGUoW1xuICAgICAgICB2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJDb21wb25lbnRcIl1cbiAgICBdLCBNYXRyaXhIZWFkZXJSZXF1aXJlZCk7XG4gICAgcmV0dXJuIE1hdHJpeEhlYWRlclJlcXVpcmVkO1xufShfYmFzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiQmFzZVZ1ZVwiXSkpO1xuXG52dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY29tcG9uZW50KFwic3VydmV5LW1hdHJpeGhlYWRlcnJlcXVpcmVkXCIsIE1hdHJpeEhlYWRlclJlcXVpcmVkKTtcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoTWF0cml4SGVhZGVyUmVxdWlyZWQpO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9tYXRyaXh0YWJsZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyPz9yZWYtLTAhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NyYy92dWUvbWF0cml4dGFibGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IE1hdHJpeFRhYmxlLCBkZWZhdWx0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIk1hdHJpeFRhYmxlXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gTWF0cml4VGFibGU7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlICovIFwidnVlXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB2dWUtcHJvcGVydHktZGVjb3JhdG9yICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLXByb3BlcnR5LWRlY29yYXRvci9saWIvaW5kZXguanNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Jhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYmFzZSAqLyBcIi4vc3JjL3Z1ZS9iYXNlLnRzXCIpO1xudmFyIF9fZXh0ZW5kcyA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG52YXIgX19kZWNvcmF0ZSA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xuXG5cblxudmFyIE1hdHJpeFRhYmxlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhNYXRyaXhUYWJsZSwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBNYXRyaXhUYWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTWF0cml4VGFibGUucHJvdG90eXBlLCBcInRhYmxlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5yZW5kZXJlZFRhYmxlO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgTWF0cml4VGFibGUucHJvdG90eXBlLmdldE1vZGVsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5yZW5kZXJlZFRhYmxlO1xuICAgIH07XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdCh2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJQcm9wXCJdKSgpXG4gICAgXSwgTWF0cml4VGFibGUucHJvdG90eXBlLCBcInF1ZXN0aW9uXCIsIHZvaWQgMCk7XG4gICAgTWF0cml4VGFibGUgPSBfX2RlY29yYXRlKFtcbiAgICAgICAgdnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiQ29tcG9uZW50XCJdXG4gICAgXSwgTWF0cml4VGFibGUpO1xuICAgIHJldHVybiBNYXRyaXhUYWJsZTtcbn0oX2Jhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIkJhc2VWdWVcIl0pKTtcblxudnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNvbXBvbmVudChcInN1cnZleS1tYXRyaXh0YWJsZVwiLCBNYXRyaXhUYWJsZSk7XG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKE1hdHJpeFRhYmxlKTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvbXVsdGlwbGV0ZXh0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyPz9yZWYtLTAhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NyYy92dWUvbXVsdGlwbGV0ZXh0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogTXVsdGlwbGVUZXh0LCBkZWZhdWx0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIk11bHRpcGxlVGV4dFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIE11bHRpcGxlVGV4dDsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB2dWUgKi8gXCJ2dWVcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4odnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9pbmRleC5qc1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcXVlc3Rpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcXVlc3Rpb24gKi8gXCIuL3NyYy92dWUvcXVlc3Rpb24udHNcIik7XG52YXIgX19leHRlbmRzID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbnZhciBfX2RlY29yYXRlID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn07XG5cblxuXG52YXIgTXVsdGlwbGVUZXh0ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhNdWx0aXBsZVRleHQsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gTXVsdGlwbGVUZXh0KCkge1xuICAgICAgICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgfVxuICAgIE11bHRpcGxlVGV4dCA9IF9fZGVjb3JhdGUoW1xuICAgICAgICB2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJDb21wb25lbnRcIl1cbiAgICBdLCBNdWx0aXBsZVRleHQpO1xuICAgIHJldHVybiBNdWx0aXBsZVRleHQ7XG59KF9xdWVzdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiZGVmYXVsdFwiXSkpO1xuXG52dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY29tcG9uZW50KFwic3VydmV5LW11bHRpcGxldGV4dFwiLCBNdWx0aXBsZVRleHQpO1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChNdWx0aXBsZVRleHQpO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9tdWx0aXBsZXRleHRpdGVtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL211bHRpcGxldGV4dGl0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogTXVsdGlwbGVUZXh0SXRlbSwgZGVmYXVsdCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJNdWx0aXBsZVRleHRJdGVtXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gTXVsdGlwbGVUZXh0SXRlbTsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB2dWUgKi8gXCJ2dWVcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4odnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9pbmRleC5qc1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYmFzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9iYXNlICovIFwiLi9zcmMvdnVlL2Jhc2UudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3F1ZXN0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3F1ZXN0aW9uICovIFwiLi9zcmMvdnVlL3F1ZXN0aW9uLnRzXCIpO1xudmFyIF9fZXh0ZW5kcyA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG52YXIgX19kZWNvcmF0ZSA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xuXG5cblxuXG52YXIgTXVsdGlwbGVUZXh0SXRlbSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoTXVsdGlwbGVUZXh0SXRlbSwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBNdWx0aXBsZVRleHRJdGVtKCkge1xuICAgICAgICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgfVxuICAgIE11bHRpcGxlVGV4dEl0ZW0ucHJvdG90eXBlLmdldE1vZGVsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jZWxsLml0ZW0uZWRpdG9yO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE11bHRpcGxlVGV4dEl0ZW0ucHJvdG90eXBlLCBcIml0ZW1cIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNlbGwuaXRlbTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE11bHRpcGxlVGV4dEl0ZW0ucHJvdG90eXBlLmdldENvbXBvbmVudE5hbWUgPSBmdW5jdGlvbiAocXVlc3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdChfcXVlc3Rpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcImdldENvbXBvbmVudE5hbWVcIl0pKHF1ZXN0aW9uKTtcbiAgICB9O1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QodnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiUHJvcFwiXSkoKVxuICAgIF0sIE11bHRpcGxlVGV4dEl0ZW0ucHJvdG90eXBlLCBcInF1ZXN0aW9uXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdCh2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJQcm9wXCJdKSgpXG4gICAgXSwgTXVsdGlwbGVUZXh0SXRlbS5wcm90b3R5cGUsIFwiY2VsbFwiLCB2b2lkIDApO1xuICAgIE11bHRpcGxlVGV4dEl0ZW0gPSBfX2RlY29yYXRlKFtcbiAgICAgICAgdnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiQ29tcG9uZW50XCJdXG4gICAgXSwgTXVsdGlwbGVUZXh0SXRlbSk7XG4gICAgcmV0dXJuIE11bHRpcGxlVGV4dEl0ZW07XG59KF9iYXNlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJkZWZhdWx0XCJdKSk7XG5cbnZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jb21wb25lbnQoXCJzdXJ2ZXktbXVsdGlwbGV0ZXh0LWl0ZW1cIiwgTXVsdGlwbGVUZXh0SXRlbSk7XG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKE11bHRpcGxlVGV4dEl0ZW0pO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9wYWdlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL3BhZ2UudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogUGFnZSwgZGVmYXVsdCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJQYWdlXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUGFnZTsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB2dWUgKi8gXCJ2dWVcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4odnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9pbmRleC5qc1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYmFzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9iYXNlICovIFwiLi9zcmMvdnVlL2Jhc2UudHNcIik7XG52YXIgX19leHRlbmRzID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbnZhciBfX2RlY29yYXRlID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn07XG5cblxuXG52YXIgUGFnZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoUGFnZSwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBQYWdlKCkge1xuICAgICAgICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgfVxuICAgIFBhZ2UucHJvdG90eXBlLmdldE1vZGVsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wYWdlO1xuICAgIH07XG4gICAgUGFnZS5wcm90b3R5cGUub25Nb3VudGVkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5zdXJ2ZXkpIHtcbiAgICAgICAgICAgIHRoaXMuc3VydmV5LmFmdGVyUmVuZGVyUGFnZSh0aGlzLiRlbCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQYWdlLnByb3RvdHlwZSwgXCJzaG93RGVzY3JpcHRpb25cIiwge1xuICAgICAgICAvL3Byb3RlY3RlZCBvblVwZGF0ZWQoKSB7XG4gICAgICAgIC8vICB0aGlzLnN1cnZleS5hZnRlclJlbmRlclBhZ2UodGhpcy4kZWwgYXMgSFRNTEVsZW1lbnQpO1xuICAgICAgICAvL31cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wYWdlLl9zaG93RGVzY3JpcHRpb247XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUGFnZS5wcm90b3R5cGUsIFwibnVtXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wYWdlLm51bSA+IDAgPyB0aGlzLnBhZ2UubnVtICsgXCIuIFwiIDogXCJcIjtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQYWdlLnByb3RvdHlwZSwgXCJyb3dzXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wYWdlLnJvd3M7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlByb3BcIl0pKClcbiAgICBdLCBQYWdlLnByb3RvdHlwZSwgXCJzdXJ2ZXlcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlByb3BcIl0pKClcbiAgICBdLCBQYWdlLnByb3RvdHlwZSwgXCJwYWdlXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdCh2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJQcm9wXCJdKSgpXG4gICAgXSwgUGFnZS5wcm90b3R5cGUsIFwiY3NzXCIsIHZvaWQgMCk7XG4gICAgUGFnZSA9IF9fZGVjb3JhdGUoW1xuICAgICAgICB2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJDb21wb25lbnRcIl1cbiAgICBdLCBQYWdlKTtcbiAgICByZXR1cm4gUGFnZTtcbn0oX2Jhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIkJhc2VWdWVcIl0pKTtcblxudnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNvbXBvbmVudChcInN1cnZleS1wYWdlXCIsIFBhZ2UpO1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChQYWdlKTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvcGFuZWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL3BhbmVsLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBQYW5lbCwgZGVmYXVsdCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJQYW5lbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFBhbmVsOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZSAqLyBcInZ1ZVwiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubih2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlLXByb3BlcnR5LWRlY29yYXRvciAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IvbGliL2luZGV4LmpzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9iYXNlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2Jhc2UgKi8gXCIuL3NyYy92dWUvYmFzZS50c1wiKTtcbnZhciBfX2V4dGVuZHMgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xudmFyIF9fZGVjb3JhdGUgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufTtcblxuXG5cbnZhciBQYW5lbCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoUGFuZWwsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gUGFuZWwoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5pc0NvbGxhcHNlZFZhbHVlID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgUGFuZWwucHJvdG90eXBlLmdldE1vZGVsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5xdWVzdGlvbjtcbiAgICB9O1xuICAgIFBhbmVsLnByb3RvdHlwZS5vbk1vdW50ZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGlmICh0aGlzLnF1ZXN0aW9uLnN1cnZleSkge1xuICAgICAgICAgICAgdGhpcy5xdWVzdGlvbi5zdXJ2ZXkuYWZ0ZXJSZW5kZXJQYW5lbCh0aGlzLnF1ZXN0aW9uLCB0aGlzLiRlbCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc0NvbGxhcHNlZFZhbHVlID0gdGhpcy5xdWVzdGlvbi5pc0NvbGxhcHNlZDtcbiAgICAgICAgdGhpcy5xdWVzdGlvbi5zdGF0ZUNoYW5nZWRDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLmlzQ29sbGFwc2VkVmFsdWUgPSBfdGhpcy5xdWVzdGlvbi5pc0NvbGxhcHNlZDtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIFBhbmVsLnByb3RvdHlwZS5iZWZvcmVEZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnF1ZXN0aW9uLnN0YXRlQ2hhbmdlZENhbGxiYWNrID0gbnVsbDtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQYW5lbC5wcm90b3R5cGUsIFwicm9vdFN0eWxlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgICAgICAgICBpZiAodGhpcy5xdWVzdGlvbi5yZW5kZXJXaWR0aCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdFtcImZsZXhCYXNpc1wiXSA9IHRoaXMucXVlc3Rpb24ucmVuZGVyV2lkdGg7XG4gICAgICAgICAgICAgICAgcmVzdWx0W1wiZmxleEdyb3dcIl0gPSAxO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtcImZsZXhTaHJpbmtcIl0gPSAxO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtcIndpZHRoXCJdID0gdGhpcy5xdWVzdGlvbi5yZW5kZXJXaWR0aDtcbiAgICAgICAgICAgICAgICByZXN1bHRbXCJtaW5XaWR0aFwiXSA9IHRoaXMucXVlc3Rpb24ubWluV2lkdGg7XG4gICAgICAgICAgICAgICAgcmVzdWx0W1wibWF4V2lkdGhcIl0gPSB0aGlzLnF1ZXN0aW9uLm1heFdpZHRoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQYW5lbC5wcm90b3R5cGUsIFwic2hvd0ljb25cIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLmlzRXhwYW5kZWQgfHwgdGhpcy5xdWVzdGlvbi5pc0NvbGxhcHNlZDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQYW5lbC5wcm90b3R5cGUsIFwicm93c1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucXVlc3Rpb24ucm93cztcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQYW5lbC5wcm90b3R5cGUsIFwic3VydmV5XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5zdXJ2ZXk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUGFuZWwucHJvdG90eXBlLCBcImlzQ29sbGFwc2VkXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pc0NvbGxhcHNlZFZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUGFuZWwucHJvdG90eXBlLmNhbmNlbFByZXZpZXcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMucXVlc3Rpb24uY2FuY2VsUHJldmlldygpO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBhbmVsLnByb3RvdHlwZSwgXCJyZXF1aXJlZFRleHRDc3NcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAodGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnJlcXVpcmVkVGV4dCB8fCB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucGFuZWwucmVxdWlyZWRUZXh0KTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QodnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiUHJvcFwiXSkoKVxuICAgIF0sIFBhbmVsLnByb3RvdHlwZSwgXCJxdWVzdGlvblwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QodnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiUHJvcFwiXSkoKVxuICAgIF0sIFBhbmVsLnByb3RvdHlwZSwgXCJpc0VkaXRNb2RlXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdCh2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJQcm9wXCJdKSgpXG4gICAgXSwgUGFuZWwucHJvdG90eXBlLCBcImNzc1wiLCB2b2lkIDApO1xuICAgIFBhbmVsID0gX19kZWNvcmF0ZShbXG4gICAgICAgIHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIkNvbXBvbmVudFwiXVxuICAgIF0sIFBhbmVsKTtcbiAgICByZXR1cm4gUGFuZWw7XG59KF9iYXNlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJCYXNlVnVlXCJdKSk7XG5cbnZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jb21wb25lbnQoXCJzdXJ2ZXktcGFuZWxcIiwgUGFuZWwpO1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChQYW5lbCk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL3BhbmVsZHluYW1pYy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL3BhbmVsZHluYW1pYy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFBhbmVsRHluYW1pYywgZGVmYXVsdCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJQYW5lbER5bmFtaWNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBQYW5lbER5bmFtaWM7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlICovIFwidnVlXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB2dWUtcHJvcGVydHktZGVjb3JhdG9yICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLXByb3BlcnR5LWRlY29yYXRvci9saWIvaW5kZXguanNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3F1ZXN0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3F1ZXN0aW9uICovIFwiLi9zcmMvdnVlL3F1ZXN0aW9uLnRzXCIpO1xudmFyIF9fZXh0ZW5kcyA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG52YXIgX19kZWNvcmF0ZSA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xuXG5cblxudmFyIFBhbmVsRHluYW1pYyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoUGFuZWxEeW5hbWljLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFBhbmVsRHluYW1pYygpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUGFuZWxEeW5hbWljLnByb3RvdHlwZSwgXCJyZW5kZXJlZFBhbmVsc1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKHRoaXMucXVlc3Rpb24uaXNSZW5kZXJNb2RlTGlzdClcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5wYW5lbHM7XG4gICAgICAgICAgICB2YXIgcGFuZWxzID0gW107XG4gICAgICAgICAgICBpZiAodGhpcy5xdWVzdGlvbi5jdXJyZW50UGFuZWwpIHtcbiAgICAgICAgICAgICAgICBwYW5lbHMucHVzaCh0aGlzLnF1ZXN0aW9uLmN1cnJlbnRQYW5lbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcGFuZWxzO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBhbmVsRHluYW1pYy5wcm90b3R5cGUsIFwic2hvd0xlZ2FjeU5hdmlnYXRpb25cIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uW1wic2hvd0xlZ2FjeU5hdmlnYXRpb25cIl07XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBQYW5lbER5bmFtaWMgPSBfX2RlY29yYXRlKFtcbiAgICAgICAgdnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiQ29tcG9uZW50XCJdXG4gICAgXSwgUGFuZWxEeW5hbWljKTtcbiAgICByZXR1cm4gUGFuZWxEeW5hbWljO1xufShfcXVlc3Rpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcImRlZmF1bHRcIl0pKTtcblxudnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNvbXBvbmVudChcInN1cnZleS1wYW5lbGR5bmFtaWNcIiwgUGFuZWxEeW5hbWljKTtcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoUGFuZWxEeW5hbWljKTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvcGFuZWxkeW5hbWljcHJvZ3Jlc3MudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL3BhbmVsZHluYW1pY3Byb2dyZXNzLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBQYW5lbER5bmFtaWNQcm9ncmVzcywgZGVmYXVsdCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJQYW5lbER5bmFtaWNQcm9ncmVzc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFBhbmVsRHluYW1pY1Byb2dyZXNzOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZSAqLyBcInZ1ZVwiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubih2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlLXByb3BlcnR5LWRlY29yYXRvciAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IvbGliL2luZGV4LmpzXCIpO1xudmFyIF9fZXh0ZW5kcyA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG52YXIgX19kZWNvcmF0ZSA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xuXG5cbnZhciBQYW5lbER5bmFtaWNQcm9ncmVzcyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoUGFuZWxEeW5hbWljUHJvZ3Jlc3MsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gUGFuZWxEeW5hbWljUHJvZ3Jlc3MoKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBhbmVsRHluYW1pY1Byb2dyZXNzLnByb3RvdHlwZSwgXCJjc3NDbGFzc1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucXVlc3Rpb24uaXNQcm9ncmVzc1RvcFNob3dpbmdcbiAgICAgICAgICAgICAgICA/IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5wcm9ncmVzc1RvcFxuICAgICAgICAgICAgICAgIDogdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnByb2dyZXNzQm90dG9tO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdCh2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJQcm9wXCJdKSgpXG4gICAgXSwgUGFuZWxEeW5hbWljUHJvZ3Jlc3MucHJvdG90eXBlLCBcInF1ZXN0aW9uXCIsIHZvaWQgMCk7XG4gICAgUGFuZWxEeW5hbWljUHJvZ3Jlc3MgPSBfX2RlY29yYXRlKFtcbiAgICAgICAgdnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiQ29tcG9uZW50XCJdXG4gICAgXSwgUGFuZWxEeW5hbWljUHJvZ3Jlc3MpO1xuICAgIHJldHVybiBQYW5lbER5bmFtaWNQcm9ncmVzcztcbn0odnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hKSk7XG5cbnZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jb21wb25lbnQoXCJzdXJ2ZXktcGFuZWxkeW5hbWljcHJvZ3Jlc3NcIiwgUGFuZWxEeW5hbWljUHJvZ3Jlc3MpO1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChQYW5lbER5bmFtaWNQcm9ncmVzcyk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL3BhbmVsZHluYW1pY3Byb2dyZXNzVjIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyPz9yZWYtLTAhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NyYy92dWUvcGFuZWxkeW5hbWljcHJvZ3Jlc3NWMi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBQYW5lbER5bmFtaWNQcm9ncmVzc1YyLCBkZWZhdWx0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlBhbmVsRHluYW1pY1Byb2dyZXNzVjJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBQYW5lbER5bmFtaWNQcm9ncmVzc1YyOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZSAqLyBcInZ1ZVwiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubih2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlLXByb3BlcnR5LWRlY29yYXRvciAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IvbGliL2luZGV4LmpzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9wYW5lbGR5bmFtaWNwcm9ncmVzc192dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcGFuZWxkeW5hbWljcHJvZ3Jlc3MudnVlICovIFwiLi9zcmMvdnVlL3BhbmVsZHluYW1pY3Byb2dyZXNzLnZ1ZVwiKTtcbnZhciBfX2V4dGVuZHMgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xudmFyIF9fZGVjb3JhdGUgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufTtcblxuXG5cbnZhciBQYW5lbER5bmFtaWNQcm9ncmVzc1YyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhQYW5lbER5bmFtaWNQcm9ncmVzc1YyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFBhbmVsRHluYW1pY1Byb2dyZXNzVjIoKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICB9XG4gICAgUGFuZWxEeW5hbWljUHJvZ3Jlc3NWMiA9IF9fZGVjb3JhdGUoW1xuICAgICAgICB2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJDb21wb25lbnRcIl1cbiAgICBdLCBQYW5lbER5bmFtaWNQcm9ncmVzc1YyKTtcbiAgICByZXR1cm4gUGFuZWxEeW5hbWljUHJvZ3Jlc3NWMjtcbn0oX3BhbmVsZHluYW1pY3Byb2dyZXNzX3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiUGFuZWxEeW5hbWljUHJvZ3Jlc3NcIl0pKTtcblxudnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNvbXBvbmVudChcInN1cnZleS1wYW5lbGR5bmFtaWNwcm9ncmVzcy12MlwiLCBQYW5lbER5bmFtaWNQcm9ncmVzc1YyKTtcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoUGFuZWxEeW5hbWljUHJvZ3Jlc3NWMik7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL3BvcHVwLXN1cnZleS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL3BvcHVwLXN1cnZleS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFBvcHVwU3VydmV5LCBTdXJ2ZXlXaW5kb3csIGRlZmF1bHQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUG9wdXBTdXJ2ZXlcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBQb3B1cFN1cnZleTsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiU3VydmV5V2luZG93XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU3VydmV5V2luZG93OyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZSAqLyBcInZ1ZVwiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubih2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlLXByb3BlcnR5LWRlY29yYXRvciAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IvbGliL2luZGV4LmpzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHN1cnZleV9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBzdXJ2ZXktY29yZSAqLyBcIi4vc3JjL2VudHJpZXMvY29yZS50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYmFzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9iYXNlICovIFwiLi9zcmMvdnVlL2Jhc2UudHNcIik7XG52YXIgX19leHRlbmRzID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbnZhciBfX2RlY29yYXRlID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn07XG5cblxuXG5cbnZhciBQb3B1cFN1cnZleSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoUG9wdXBTdXJ2ZXksIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gUG9wdXBTdXJ2ZXkoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIGlmIChfdGhpcy53aW5kb3cpIHtcbiAgICAgICAgICAgIF90aGlzLnN1cnZleVdpbmRvdyA9IF90aGlzLndpbmRvdztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIF90aGlzLnN1cnZleVdpbmRvdyA9IG5ldyBzdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiUG9wdXBTdXJ2ZXlNb2RlbFwiXShudWxsLCBfdGhpcy5zdXJ2ZXkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChfdGhpcy5pc2V4cGFuZGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIF90aGlzLnN1cnZleVdpbmRvdy5pc0V4cGFuZGVkID0gX3RoaXMuaXNleHBhbmRlZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoX3RoaXMuaXNFeHBhbmRlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBfdGhpcy5zdXJ2ZXlXaW5kb3cuaXNFeHBhbmRlZCA9IF90aGlzLmlzRXhwYW5kZWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKF90aGlzLmNsb3NlT25Db21wbGV0ZVRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgX3RoaXMuc3VydmV5V2luZG93LmNsb3NlT25Db21wbGV0ZVRpbWVvdXQgPSBfdGhpcy5jbG9zZU9uQ29tcGxldGVUaW1lb3V0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChfdGhpcy5hbGxvd0Nsb3NlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIF90aGlzLnN1cnZleVdpbmRvdy5hbGxvd0Nsb3NlID0gX3RoaXMuYWxsb3dDbG9zZTtcbiAgICAgICAgfVxuICAgICAgICBfdGhpcy5zdXJ2ZXlXaW5kb3cuaXNTaG93aW5nID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBQb3B1cFN1cnZleS5wcm90b3R5cGUuZ2V0TW9kZWwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN1cnZleVdpbmRvdztcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQb3B1cFN1cnZleS5wcm90b3R5cGUsIFwid2luZG93U3VydmV5XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdXJ2ZXlXaW5kb3cuc3VydmV5O1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBvcHVwU3VydmV5LnByb3RvdHlwZSwgXCJjc3NcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAhIXRoaXMuc3VydmV5ID8gdGhpcy5zdXJ2ZXkuZ2V0Q3NzKCkgOiB7fTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQb3B1cFN1cnZleS5wcm90b3R5cGUsIFwiZXhwYW5kZWRDc3NcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN1cnZleVdpbmRvdy5pc0V4cGFuZGVkXG4gICAgICAgICAgICAgICAgPyB0aGlzLmNzcy53aW5kb3cuaGVhZGVyLmJ1dHRvbkNvbGxhcHNlZFxuICAgICAgICAgICAgICAgIDogdGhpcy5jc3Mud2luZG93LmhlYWRlci5idXR0b25FeHBhbmRlZDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQb3B1cFN1cnZleS5wcm90b3R5cGUsIFwiaXNFeHBhbmRlZFN1cnZleVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3VydmV5V2luZG93LmlzRXhwYW5kZWQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zdXJ2ZXlXaW5kb3cuaXNFeHBhbmRlZCA9IHZhbDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFBvcHVwU3VydmV5LnByb3RvdHlwZS5kb0V4cGFuZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5zdXJ2ZXlXaW5kb3cuY2hhbmdlRXhwYW5kQ29sbGFwc2UoKTtcbiAgICB9O1xuICAgIFBvcHVwU3VydmV5LnByb3RvdHlwZS5kb0hpZGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuc3VydmV5V2luZG93LmhpZGUoKTtcbiAgICB9O1xuICAgIFBvcHVwU3VydmV5LnByb3RvdHlwZS5nZXRTdXJ2ZXlDb21wb25lbnROYW1lID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gXCJzdXJ2ZXlcIjtcbiAgICB9O1xuICAgIFBvcHVwU3VydmV5LnByb3RvdHlwZS5kb1Njcm9sbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5zdXJ2ZXlXaW5kb3cub25TY3JvbGwoKTtcbiAgICB9O1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QodnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiUHJvcFwiXSkoKVxuICAgIF0sIFBvcHVwU3VydmV5LnByb3RvdHlwZSwgXCJ3aW5kb3dcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlByb3BcIl0pKClcbiAgICBdLCBQb3B1cFN1cnZleS5wcm90b3R5cGUsIFwic3VydmV5XCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdCh2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJQcm9wXCJdKSgpXG4gICAgXSwgUG9wdXBTdXJ2ZXkucHJvdG90eXBlLCBcImlzRXhwYW5kZWRcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlByb3BcIl0pKClcbiAgICBdLCBQb3B1cFN1cnZleS5wcm90b3R5cGUsIFwiaXNleHBhbmRlZFwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QodnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiUHJvcFwiXSkoKVxuICAgIF0sIFBvcHVwU3VydmV5LnByb3RvdHlwZSwgXCJhbGxvd0Nsb3NlXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdCh2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJQcm9wXCJdKSgpXG4gICAgXSwgUG9wdXBTdXJ2ZXkucHJvdG90eXBlLCBcImNsb3NlT25Db21wbGV0ZVRpbWVvdXRcIiwgdm9pZCAwKTtcbiAgICBQb3B1cFN1cnZleSA9IF9fZGVjb3JhdGUoW1xuICAgICAgICB2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJDb21wb25lbnRcIl1cbiAgICBdLCBQb3B1cFN1cnZleSk7XG4gICAgcmV0dXJuIFBvcHVwU3VydmV5O1xufShfYmFzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiQmFzZVZ1ZVwiXSkpO1xuXG4vKipcbiAqIE9ic29sZXRlLCBwbGVhc2UgdXNlIFBvcHVwU3VydmV5XG4gKi9cbnZhciBTdXJ2ZXlXaW5kb3cgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFN1cnZleVdpbmRvdywgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTdXJ2ZXlXaW5kb3coKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICB9XG4gICAgcmV0dXJuIFN1cnZleVdpbmRvdztcbn0oUG9wdXBTdXJ2ZXkpKTtcblxudnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNvbXBvbmVudChcInN1cnZleS13aW5kb3dcIiwgU3VydmV5V2luZG93KTtcbnZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jb21wb25lbnQoXCJwb3B1cC1zdXJ2ZXlcIiwgUG9wdXBTdXJ2ZXkpO1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChQb3B1cFN1cnZleSk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL3Byb2dyZXNzLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy90cy1sb2FkZXI/P3JlZi0tMCEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL3Z1ZS9wcm9ncmVzcy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogUHJvZ3Jlc3MsIGRlZmF1bHQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUHJvZ3Jlc3NcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBQcm9ncmVzczsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB2dWUgKi8gXCJ2dWVcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4odnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9pbmRleC5qc1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBzdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgc3VydmV5LWNvcmUgKi8gXCIuL3NyYy9lbnRyaWVzL2NvcmUudHNcIik7XG52YXIgX19leHRlbmRzID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbnZhciBfX2RlY29yYXRlID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn07XG5cblxuXG52YXIgUHJvZ3Jlc3MgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFByb2dyZXNzLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFByb2dyZXNzKCkge1xuICAgICAgICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQcm9ncmVzcy5wcm90b3R5cGUsIFwicHJvZ3Jlc3NcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN1cnZleS5wcm9ncmVzc1ZhbHVlICsgXCIlXCI7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBQcm9ncmVzcy5wcm90b3R5cGUuZ2V0UHJvZ3Jlc3NUZXh0SW5CYXJDc3MgPSBmdW5jdGlvbiAoY3NzKSB7XG4gICAgICAgIHJldHVybiBzdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiU3VydmV5UHJvZ3Jlc3NNb2RlbFwiXS5nZXRQcm9ncmVzc1RleHRJbkJhckNzcyhjc3MpO1xuICAgIH07XG4gICAgUHJvZ3Jlc3MucHJvdG90eXBlLmdldFByb2dyZXNzVGV4dFVuZGVyQmFyQ3NzID0gZnVuY3Rpb24gKGNzcykge1xuICAgICAgICByZXR1cm4gc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIlN1cnZleVByb2dyZXNzTW9kZWxcIl0uZ2V0UHJvZ3Jlc3NUZXh0VW5kZXJCYXJDc3MoY3NzKTtcbiAgICB9O1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QodnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiUHJvcFwiXSkoKVxuICAgIF0sIFByb2dyZXNzLnByb3RvdHlwZSwgXCJzdXJ2ZXlcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlByb3BcIl0pKClcbiAgICBdLCBQcm9ncmVzcy5wcm90b3R5cGUsIFwiY29udGFpbmVyXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdCh2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJQcm9wXCJdKSgpXG4gICAgXSwgUHJvZ3Jlc3MucHJvdG90eXBlLCBcImNzc1wiLCB2b2lkIDApO1xuICAgIFByb2dyZXNzID0gX19kZWNvcmF0ZShbXG4gICAgICAgIHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIkNvbXBvbmVudFwiXVxuICAgIF0sIFByb2dyZXNzKTtcbiAgICByZXR1cm4gUHJvZ3Jlc3M7XG59KHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYSkpO1xuXG52dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY29tcG9uZW50KFwic3YtcHJvZ3Jlc3MtcGFnZXNcIiwgUHJvZ3Jlc3MpO1xudnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNvbXBvbmVudChcInN2LXByb2dyZXNzLXF1ZXN0aW9uc1wiLCBQcm9ncmVzcyk7XG52dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY29tcG9uZW50KFwic3YtcHJvZ3Jlc3MtY29ycmVjdHF1ZXN0aW9uc1wiLCBQcm9ncmVzcyk7XG52dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY29tcG9uZW50KFwic3YtcHJvZ3Jlc3MtcmVxdWlyZWRxdWVzdGlvbnNcIiwgUHJvZ3Jlc3MpO1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChQcm9ncmVzcyk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL3Byb2dyZXNzQnV0dG9ucy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL3Byb2dyZXNzQnV0dG9ucy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFByb2dyZXNzQnV0dG9ucywgZGVmYXVsdCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJQcm9ncmVzc0J1dHRvbnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBQcm9ncmVzc0J1dHRvbnM7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlICovIFwidnVlXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB2dWUtcHJvcGVydHktZGVjb3JhdG9yICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLXByb3BlcnR5LWRlY29yYXRvci9saWIvaW5kZXguanNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHN1cnZleS1jb3JlICovIFwiLi9zcmMvZW50cmllcy9jb3JlLnRzXCIpO1xudmFyIF9fZXh0ZW5kcyA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG52YXIgX19kZWNvcmF0ZSA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xuXG5cblxudmFyIFByb2dyZXNzQnV0dG9ucyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoUHJvZ3Jlc3NCdXR0b25zLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFByb2dyZXNzQnV0dG9ucygpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuaGFzU2Nyb2xsZXIgPSBmYWxzZTtcbiAgICAgICAgX3RoaXMudXBkYXRlU2Nyb2xsZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgIF90aGlzLnByb2dyZXNzQnV0dG9uc01vZGVsID0gbmV3IHN1cnZleV9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJTdXJ2ZXlQcm9ncmVzc0J1dHRvbnNNb2RlbFwiXShfdGhpcy5zdXJ2ZXkpO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQcm9ncmVzc0J1dHRvbnMucHJvdG90eXBlLCBcImNzc1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3VydmV5LmNzcztcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFByb2dyZXNzQnV0dG9ucy5wcm90b3R5cGUubW91bnRlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIGxpc3RDb250YWluZXJFbGVtZW50ID0gdGhpcy4kcmVmc1tcInByb2dyZXNzQnV0dG9uc0xpc3RDb250YWluZXJcIl07XG4gICAgICAgIHRoaXMudXBkYXRlU2Nyb2xsZXIgPSBzZXRJbnRlcnZhbChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5oYXNTY3JvbGxlciA9XG4gICAgICAgICAgICAgICAgbGlzdENvbnRhaW5lckVsZW1lbnQuc2Nyb2xsV2lkdGggPiBsaXN0Q29udGFpbmVyRWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgICAgICAgfSwgMTAwKTtcbiAgICB9O1xuICAgIFByb2dyZXNzQnV0dG9ucy5wcm90b3R5cGUuaXNMaXN0RWxlbWVudENsaWNrYWJsZSA9IGZ1bmN0aW9uIChpbmRleCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9ncmVzc0J1dHRvbnNNb2RlbC5pc0xpc3RFbGVtZW50Q2xpY2thYmxlKGluZGV4KTtcbiAgICB9O1xuICAgIFByb2dyZXNzQnV0dG9ucy5wcm90b3R5cGUuZ2V0TGlzdEVsZW1lbnRDc3MgPSBmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvZ3Jlc3NCdXR0b25zTW9kZWwuZ2V0TGlzdEVsZW1lbnRDc3MoaW5kZXgpO1xuICAgIH07XG4gICAgUHJvZ3Jlc3NCdXR0b25zLnByb3RvdHlwZS5jbGlja0xpc3RFbGVtZW50ID0gZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgIHRoaXMucHJvZ3Jlc3NCdXR0b25zTW9kZWwuY2xpY2tMaXN0RWxlbWVudChpbmRleCk7XG4gICAgfTtcbiAgICBQcm9ncmVzc0J1dHRvbnMucHJvdG90eXBlLmdldFNjcm9sbEJ1dHRvbkNzcyA9IGZ1bmN0aW9uIChoYXNTY3JvbGxlciwgaXNMZWZ0U2Nyb2xsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb2dyZXNzQnV0dG9uc01vZGVsLmdldFNjcm9sbEJ1dHRvbkNzcyhoYXNTY3JvbGxlciwgaXNMZWZ0U2Nyb2xsKTtcbiAgICB9O1xuICAgIFByb2dyZXNzQnV0dG9ucy5wcm90b3R5cGUuY2xpY2tTY3JvbGxCdXR0b24gPSBmdW5jdGlvbiAoaXNMZWZ0U2Nyb2xsKSB7XG4gICAgICAgIHZhciBsaXN0Q29udGFpbmVyRWxlbWVudCA9IHRoaXMuJHJlZnNbXCJwcm9ncmVzc0J1dHRvbnNMaXN0Q29udGFpbmVyXCJdO1xuICAgICAgICBsaXN0Q29udGFpbmVyRWxlbWVudC5zY3JvbGxMZWZ0ICs9IChpc0xlZnRTY3JvbGwgPyAtMSA6IDEpICogNzA7XG4gICAgfTtcbiAgICBQcm9ncmVzc0J1dHRvbnMucHJvdG90eXBlLmJlZm9yZURlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy51cGRhdGVTY3JvbGxlciAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLnVwZGF0ZVNjcm9sbGVyKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU2Nyb2xsZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QodnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiUHJvcFwiXSkoKVxuICAgIF0sIFByb2dyZXNzQnV0dG9ucy5wcm90b3R5cGUsIFwic3VydmV5XCIsIHZvaWQgMCk7XG4gICAgUHJvZ3Jlc3NCdXR0b25zID0gX19kZWNvcmF0ZShbXG4gICAgICAgIHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIkNvbXBvbmVudFwiXVxuICAgIF0sIFByb2dyZXNzQnV0dG9ucyk7XG4gICAgcmV0dXJuIFByb2dyZXNzQnV0dG9ucztcbn0odnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hKSk7XG5cbnZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jb21wb25lbnQoXCJzdi1wcm9ncmVzcy1idXR0b25zXCIsIFByb2dyZXNzQnV0dG9ucyk7XG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKFByb2dyZXNzQnV0dG9ucyk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL3Byb2dyZXNzVG9jLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy90cy1sb2FkZXI/P3JlZi0tMCEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL3Z1ZS9wcm9ncmVzc1RvYy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogUHJvZ3Jlc3NUb2MsIGRlZmF1bHQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUHJvZ3Jlc3NUb2NcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBQcm9ncmVzc1RvYzsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB2dWUgKi8gXCJ2dWVcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4odnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9pbmRleC5qc1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBzdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgc3VydmV5LWNvcmUgKi8gXCIuL3NyYy9lbnRyaWVzL2NvcmUudHNcIik7XG52YXIgX19leHRlbmRzID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbnZhciBfX2RlY29yYXRlID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn07XG5cblxuXG52YXIgUHJvZ3Jlc3NUb2MgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFByb2dyZXNzVG9jLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFByb2dyZXNzVG9jKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy50b2NNb2RlbCA9IHVuZGVmaW5lZDtcbiAgICAgICAgX3RoaXMudG9jTW9kZWwgPSBuZXcgc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIlRPQ01vZGVsXCJdKF90aGlzLnN1cnZleSk7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdCh2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJQcm9wXCJdKSgpXG4gICAgXSwgUHJvZ3Jlc3NUb2MucHJvdG90eXBlLCBcInN1cnZleVwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QodnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiUHJvcFwiXSkoKVxuICAgIF0sIFByb2dyZXNzVG9jLnByb3RvdHlwZSwgXCJjc3NcIiwgdm9pZCAwKTtcbiAgICBQcm9ncmVzc1RvYyA9IF9fZGVjb3JhdGUoW1xuICAgICAgICB2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJDb21wb25lbnRcIl1cbiAgICBdLCBQcm9ncmVzc1RvYyk7XG4gICAgcmV0dXJuIFByb2dyZXNzVG9jO1xufSh2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEpKTtcblxudnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNvbXBvbmVudChcInN2LXByb2dyZXNzLXRvY1wiLCBQcm9ncmVzc1RvYyk7XG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKFByb2dyZXNzVG9jKTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvcXVlc3Rpb24tY29tbWVudC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy90cy1sb2FkZXI/P3JlZi0tMCEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL3Z1ZS9xdWVzdGlvbi1jb21tZW50LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IE90aGVyQ29tbWVudCwgZGVmYXVsdCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJPdGhlckNvbW1lbnRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBPdGhlckNvbW1lbnQ7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlICovIFwidnVlXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB2dWUtcHJvcGVydHktZGVjb3JhdG9yICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLXByb3BlcnR5LWRlY29yYXRvci9saWIvaW5kZXguanNcIik7XG52YXIgX19leHRlbmRzID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbnZhciBfX2RlY29yYXRlID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn07XG5cblxudmFyIE90aGVyQ29tbWVudCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoT3RoZXJDb21tZW50LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIE90aGVyQ29tbWVudCgpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIH1cbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlByb3BcIl0pKClcbiAgICBdLCBPdGhlckNvbW1lbnQucHJvdG90eXBlLCBcInF1ZXN0aW9uXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdCh2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJQcm9wXCJdKSgpXG4gICAgXSwgT3RoZXJDb21tZW50LnByb3RvdHlwZSwgXCJjb21tZW50Q2xhc3NcIiwgdm9pZCAwKTtcbiAgICBPdGhlckNvbW1lbnQgPSBfX2RlY29yYXRlKFtcbiAgICAgICAgdnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiQ29tcG9uZW50XCJdXG4gICAgXSwgT3RoZXJDb21tZW50KTtcbiAgICByZXR1cm4gT3RoZXJDb21tZW50O1xufSh2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEpKTtcblxudnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNvbXBvbmVudChcInN1cnZleS1xdWVzdGlvbi1jb21tZW50XCIsIE90aGVyQ29tbWVudCk7XG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKE90aGVyQ29tbWVudCk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL3F1ZXN0aW9uLW90aGVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy90cy1sb2FkZXI/P3JlZi0tMCEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL3Z1ZS9xdWVzdGlvbi1vdGhlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogT3RoZXJDaG9pY2UsIGRlZmF1bHQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiT3RoZXJDaG9pY2VcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBPdGhlckNob2ljZTsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB2dWUgKi8gXCJ2dWVcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4odnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9pbmRleC5qc1wiKTtcbnZhciBfX2V4dGVuZHMgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xudmFyIF9fZGVjb3JhdGUgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufTtcblxuXG52YXIgT3RoZXJDaG9pY2UgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKE90aGVyQ2hvaWNlLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIE90aGVyQ2hvaWNlKCkge1xuICAgICAgICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgfVxuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QodnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiUHJvcFwiXSkoKVxuICAgIF0sIE90aGVyQ2hvaWNlLnByb3RvdHlwZSwgXCJxdWVzdGlvblwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QodnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiUHJvcFwiXSkoKVxuICAgIF0sIE90aGVyQ2hvaWNlLnByb3RvdHlwZSwgXCJjb21tZW50Q2xhc3NcIiwgdm9pZCAwKTtcbiAgICBPdGhlckNob2ljZSA9IF9fZGVjb3JhdGUoW1xuICAgICAgICB2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJDb21wb25lbnRcIl1cbiAgICBdLCBPdGhlckNob2ljZSk7XG4gICAgcmV0dXJuIE90aGVyQ2hvaWNlO1xufSh2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEpKTtcblxudnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNvbXBvbmVudChcInN1cnZleS1vdGhlci1jaG9pY2VcIiwgT3RoZXJDaG9pY2UpO1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChPdGhlckNob2ljZSk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL3JhZGlvZ3JvdXAudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyPz9yZWYtLTAhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NyYy92dWUvcmFkaW9ncm91cC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBSYWRpb2dyb3VwLCBkZWZhdWx0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlJhZGlvZ3JvdXBcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBSYWRpb2dyb3VwOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZSAqLyBcInZ1ZVwiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubih2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlLXByb3BlcnR5LWRlY29yYXRvciAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IvbGliL2luZGV4LmpzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9xdWVzdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9xdWVzdGlvbiAqLyBcIi4vc3JjL3Z1ZS9xdWVzdGlvbi50c1wiKTtcbnZhciBfX2V4dGVuZHMgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xudmFyIF9fZGVjb3JhdGUgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufTtcblxuXG5cbnZhciBSYWRpb2dyb3VwID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhSYWRpb2dyb3VwLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFJhZGlvZ3JvdXAoKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFJhZGlvZ3JvdXAucHJvdG90eXBlLCBcImNob2ljZXNDb3VudFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucXVlc3Rpb24udmlzaWJsZUNob2ljZXMubGVuZ3RoIC0gMTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFJhZGlvZ3JvdXAucHJvdG90eXBlLmdldEl0ZW1DbGFzcyA9IGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLmdldEl0ZW1DbGFzcyhpdGVtKTtcbiAgICB9O1xuICAgIFJhZGlvZ3JvdXAgPSBfX2RlY29yYXRlKFtcbiAgICAgICAgdnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiQ29tcG9uZW50XCJdXG4gICAgXSwgUmFkaW9ncm91cCk7XG4gICAgcmV0dXJuIFJhZGlvZ3JvdXA7XG59KF9xdWVzdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiZGVmYXVsdFwiXSkpO1xuXG52dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY29tcG9uZW50KFwic3VydmV5LXJhZGlvZ3JvdXBcIiwgUmFkaW9ncm91cCk7XG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKFJhZGlvZ3JvdXApO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9yYWRpb2dyb3VwaXRlbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyPz9yZWYtLTAhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NyYy92dWUvcmFkaW9ncm91cGl0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFJhZGlvZ3JvdXBJdGVtLCBkZWZhdWx0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlJhZGlvZ3JvdXBJdGVtXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUmFkaW9ncm91cEl0ZW07IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlICovIFwidnVlXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB2dWUtcHJvcGVydHktZGVjb3JhdG9yICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLXByb3BlcnR5LWRlY29yYXRvci9saWIvaW5kZXguanNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Jhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYmFzZSAqLyBcIi4vc3JjL3Z1ZS9iYXNlLnRzXCIpO1xudmFyIF9fZXh0ZW5kcyA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG52YXIgX19kZWNvcmF0ZSA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xuXG5cblxudmFyIFJhZGlvZ3JvdXBJdGVtID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhSYWRpb2dyb3VwSXRlbSwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBSYWRpb2dyb3VwSXRlbSgpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIH1cbiAgICBSYWRpb2dyb3VwSXRlbS5wcm90b3R5cGUuZ2V0TW9kZWwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLml0ZW07XG4gICAgfTtcbiAgICBSYWRpb2dyb3VwSXRlbS5wcm90b3R5cGUuZ2V0TGFiZWxDbGFzcyA9IGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLmdldExhYmVsQ2xhc3MoaXRlbSk7XG4gICAgfTtcbiAgICBSYWRpb2dyb3VwSXRlbS5wcm90b3R5cGUuZ2V0Q29udHJvbExhYmVsQ2xhc3MgPSBmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5nZXRDb250cm9sTGFiZWxDbGFzcyhpdGVtKTtcbiAgICB9O1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QodnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiUHJvcFwiXSkoKVxuICAgIF0sIFJhZGlvZ3JvdXBJdGVtLnByb3RvdHlwZSwgXCJxdWVzdGlvblwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QodnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiUHJvcFwiXSkoKVxuICAgIF0sIFJhZGlvZ3JvdXBJdGVtLnByb3RvdHlwZSwgXCJpdGVtXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdCh2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJQcm9wXCJdKSgpXG4gICAgXSwgUmFkaW9ncm91cEl0ZW0ucHJvdG90eXBlLCBcImluZGV4XCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdCh2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJQcm9wXCJdKSgpXG4gICAgXSwgUmFkaW9ncm91cEl0ZW0ucHJvdG90eXBlLCBcImhpZGVMYWJlbFwiLCB2b2lkIDApO1xuICAgIFJhZGlvZ3JvdXBJdGVtID0gX19kZWNvcmF0ZShbXG4gICAgICAgIHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIkNvbXBvbmVudFwiXVxuICAgIF0sIFJhZGlvZ3JvdXBJdGVtKTtcbiAgICByZXR1cm4gUmFkaW9ncm91cEl0ZW07XG59KF9iYXNlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJCYXNlVnVlXCJdKSk7XG5cbnZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jb21wb25lbnQoXCJzdXJ2ZXktcmFkaW9ncm91cC1pdGVtXCIsIFJhZGlvZ3JvdXBJdGVtKTtcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoUmFkaW9ncm91cEl0ZW0pO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9yYW5raW5nL3JhbmtpbmctaXRlbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyPz9yZWYtLTAhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NyYy92dWUvcmFua2luZy9yYW5raW5nLWl0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFJhbmtpbmdJdGVtLCBkZWZhdWx0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlJhbmtpbmdJdGVtXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUmFua2luZ0l0ZW07IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlICovIFwidnVlXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB2dWUtcHJvcGVydHktZGVjb3JhdG9yICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLXByb3BlcnR5LWRlY29yYXRvci9saWIvaW5kZXguanNcIik7XG52YXIgX19leHRlbmRzID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbnZhciBfX2RlY29yYXRlID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn07XG5cblxudmFyIFJhbmtpbmdJdGVtID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhSYW5raW5nSXRlbSwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBSYW5raW5nSXRlbSgpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIH1cbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlByb3BcIl0pKClcbiAgICBdLCBSYW5raW5nSXRlbS5wcm90b3R5cGUsIFwiaW5kZXhcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlByb3BcIl0pKClcbiAgICBdLCBSYW5raW5nSXRlbS5wcm90b3R5cGUsIFwiaW5kZXhUZXh0XCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdCh2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJQcm9wXCJdKSgpXG4gICAgXSwgUmFua2luZ0l0ZW0ucHJvdG90eXBlLCBcInRleHRcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlByb3BcIl0pKClcbiAgICBdLCBSYW5raW5nSXRlbS5wcm90b3R5cGUsIFwiaGFuZGxlS2V5ZG93blwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QodnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiUHJvcFwiXSkoKVxuICAgIF0sIFJhbmtpbmdJdGVtLnByb3RvdHlwZSwgXCJjc3NDbGFzc2VzXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdCh2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJQcm9wXCJdKSgpXG4gICAgXSwgUmFua2luZ0l0ZW0ucHJvdG90eXBlLCBcInF1ZXN0aW9uXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdCh2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJQcm9wXCJdKSgpXG4gICAgXSwgUmFua2luZ0l0ZW0ucHJvdG90eXBlLCBcIml0ZW1cIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlByb3BcIl0pKClcbiAgICBdLCBSYW5raW5nSXRlbS5wcm90b3R5cGUsIFwidW5yYW5rZWRJdGVtXCIsIHZvaWQgMCk7XG4gICAgUmFua2luZ0l0ZW0gPSBfX2RlY29yYXRlKFtcbiAgICAgICAgdnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiQ29tcG9uZW50XCJdXG4gICAgXSwgUmFua2luZ0l0ZW0pO1xuICAgIHJldHVybiBSYW5raW5nSXRlbTtcbn0odnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hKSk7XG5cbnZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jb21wb25lbnQoXCJzdXJ2ZXktcmFua2luZy1pdGVtXCIsIFJhbmtpbmdJdGVtKTtcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoUmFua2luZ0l0ZW0pO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9yYW5raW5nL3JhbmtpbmcudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy90cy1sb2FkZXI/P3JlZi0tMCEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL3Z1ZS9yYW5raW5nL3JhbmtpbmcudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBSYW5raW5nLCBkZWZhdWx0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlJhbmtpbmdcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBSYW5raW5nOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZSAqLyBcInZ1ZVwiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubih2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlLXByb3BlcnR5LWRlY29yYXRvciAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IvbGliL2luZGV4LmpzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9xdWVzdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vcXVlc3Rpb24gKi8gXCIuL3NyYy92dWUvcXVlc3Rpb24udHNcIik7XG52YXIgX19leHRlbmRzID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbnZhciBfX2RlY29yYXRlID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn07XG5cblxuXG52YXIgUmFua2luZyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoUmFua2luZywgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBSYW5raW5nKCkge1xuICAgICAgICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgfVxuICAgIFJhbmtpbmcucHJvdG90eXBlLmdldE51bWJlckJ5SW5kZXggPSBmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucXVlc3Rpb24uZ2V0TnVtYmVyQnlJbmRleChpbmRleCk7XG4gICAgfTtcbiAgICBSYW5raW5nID0gX19kZWNvcmF0ZShbXG4gICAgICAgIHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIkNvbXBvbmVudFwiXVxuICAgIF0sIFJhbmtpbmcpO1xuICAgIHJldHVybiBSYW5raW5nO1xufShfcXVlc3Rpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcImRlZmF1bHRcIl0pKTtcblxudnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNvbXBvbmVudChcInN1cnZleS1yYW5raW5nXCIsIFJhbmtpbmcpO1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChSYW5raW5nKTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvcmF0aW5nLWRyb3Bkb3duLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyPz9yZWYtLTAhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NyYy92dWUvcmF0aW5nLWRyb3Bkb3duLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogUmF0aW5nRHJvcGRvd24sIGRlZmF1bHQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUmF0aW5nRHJvcGRvd25cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBSYXRpbmdEcm9wZG93bjsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB2dWUgKi8gXCJ2dWVcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4odnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9pbmRleC5qc1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcXVlc3Rpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcXVlc3Rpb24gKi8gXCIuL3NyYy92dWUvcXVlc3Rpb24udHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHN1cnZleS1jb3JlICovIFwiLi9zcmMvZW50cmllcy9jb3JlLnRzXCIpO1xudmFyIF9fZXh0ZW5kcyA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG52YXIgX19kZWNvcmF0ZSA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xuXG5cblxuXG52YXIgUmF0aW5nRHJvcGRvd24gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFJhdGluZ0Ryb3Bkb3duLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFJhdGluZ0Ryb3Bkb3duKCkge1xuICAgICAgICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgfVxuICAgIFJhdGluZ0Ryb3Bkb3duID0gX19kZWNvcmF0ZShbXG4gICAgICAgIHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIkNvbXBvbmVudFwiXVxuICAgIF0sIFJhdGluZ0Ryb3Bkb3duKTtcbiAgICByZXR1cm4gUmF0aW5nRHJvcGRvd247XG59KF9xdWVzdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiZGVmYXVsdFwiXSkpO1xuXG5zdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiUmVuZGVyZXJGYWN0b3J5XCJdLkluc3RhbmNlLnJlZ2lzdGVyUmVuZGVyZXIoXCJyYXRpbmdcIiwgXCJkcm9wZG93blwiLCBcInN2LXJhdGluZy1kcm9wZG93blwiKTtcbnZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jb21wb25lbnQoXCJzdi1yYXRpbmctZHJvcGRvd25cIiwgUmF0aW5nRHJvcGRvd24pO1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChSYXRpbmdEcm9wZG93bik7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL3JhdGluZy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL3JhdGluZy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFJhdGluZywgZGVmYXVsdCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJSYXRpbmdcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBSYXRpbmc7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlICovIFwidnVlXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB2dWUtcHJvcGVydHktZGVjb3JhdG9yICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLXByb3BlcnR5LWRlY29yYXRvci9saWIvaW5kZXguanNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3F1ZXN0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3F1ZXN0aW9uICovIFwiLi9zcmMvdnVlL3F1ZXN0aW9uLnRzXCIpO1xudmFyIF9fZXh0ZW5kcyA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG52YXIgX19kZWNvcmF0ZSA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xuXG5cblxudmFyIFJhdGluZyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoUmF0aW5nLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFJhdGluZygpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIH1cbiAgICBSYXRpbmcucHJvdG90eXBlLmdldElucHV0SWQgPSBmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucXVlc3Rpb24uZ2V0SW5wdXRJZChpbmRleCk7XG4gICAgfTtcbiAgICBSYXRpbmcgPSBfX2RlY29yYXRlKFtcbiAgICAgICAgdnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiQ29tcG9uZW50XCJdXG4gICAgXSwgUmF0aW5nKTtcbiAgICByZXR1cm4gUmF0aW5nO1xufShfcXVlc3Rpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcImRlZmF1bHRcIl0pKTtcblxudnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNvbXBvbmVudChcInN1cnZleS1yYXRpbmdcIiwgUmF0aW5nKTtcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoUmF0aW5nKTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvcm93LWVsZW1lbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL3Jvdy1lbGVtZW50LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBTdXJ2ZXlSb3dFbGVtZW50LCBkZWZhdWx0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlN1cnZleVJvd0VsZW1lbnRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBTdXJ2ZXlSb3dFbGVtZW50OyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZSAqLyBcInZ1ZVwiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubih2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlLXByb3BlcnR5LWRlY29yYXRvciAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IvbGliL2luZGV4LmpzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9iYXNlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2Jhc2UgKi8gXCIuL3NyYy92dWUvYmFzZS50c1wiKTtcbnZhciBfX2V4dGVuZHMgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xudmFyIF9fZGVjb3JhdGUgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufTtcblxuXG5cbnZhciBTdXJ2ZXlSb3dFbGVtZW50ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhTdXJ2ZXlSb3dFbGVtZW50LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFN1cnZleVJvd0VsZW1lbnQoKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICB9XG4gICAgU3VydmV5Um93RWxlbWVudC5wcm90b3R5cGUuZ2V0TW9kZWwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQ7XG4gICAgfTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlByb3BcIl0pKClcbiAgICBdLCBTdXJ2ZXlSb3dFbGVtZW50LnByb3RvdHlwZSwgXCJlbGVtZW50XCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdCh2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJQcm9wXCJdKSgpXG4gICAgXSwgU3VydmV5Um93RWxlbWVudC5wcm90b3R5cGUsIFwicm93XCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdCh2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJQcm9wXCJdKSgpXG4gICAgXSwgU3VydmV5Um93RWxlbWVudC5wcm90b3R5cGUsIFwiY3NzXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdCh2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJQcm9wXCJdKSgpXG4gICAgXSwgU3VydmV5Um93RWxlbWVudC5wcm90b3R5cGUsIFwic3VydmV5XCIsIHZvaWQgMCk7XG4gICAgU3VydmV5Um93RWxlbWVudCA9IF9fZGVjb3JhdGUoW1xuICAgICAgICB2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJDb21wb25lbnRcIl1cbiAgICBdLCBTdXJ2ZXlSb3dFbGVtZW50KTtcbiAgICByZXR1cm4gU3VydmV5Um93RWxlbWVudDtcbn0oX2Jhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIkJhc2VWdWVcIl0pKTtcblxudnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNvbXBvbmVudChcInN1cnZleS1yb3ctZWxlbWVudFwiLCBTdXJ2ZXlSb3dFbGVtZW50KTtcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoU3VydmV5Um93RWxlbWVudCk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL3Jvdy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL3Jvdy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFJvdywgZGVmYXVsdCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJSb3dcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBSb3c7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlICovIFwidnVlXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB2dWUtcHJvcGVydHktZGVjb3JhdG9yICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLXByb3BlcnR5LWRlY29yYXRvci9saWIvaW5kZXguanNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Jhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYmFzZSAqLyBcIi4vc3JjL3Z1ZS9iYXNlLnRzXCIpO1xudmFyIF9fZXh0ZW5kcyA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG52YXIgX19kZWNvcmF0ZSA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xuXG5cblxudmFyIFJvdyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoUm93LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFJvdygpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUm93LnByb3RvdHlwZSwgXCJlbGVtZW50c1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucm93LnZpc2libGVFbGVtZW50cztcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFJvdy5wcm90b3R5cGUuZ2V0TW9kZWwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJvdztcbiAgICB9O1xuICAgIFJvdy5wcm90b3R5cGUub25Nb3VudGVkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBpZiAoISF0aGlzLnJvdykge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnJvdy5pc05lZWRSZW5kZXIpIHtcbiAgICAgICAgICAgICAgICB2YXIgcm93Q29udGFpbmVyRGl2ID0gdGhpcy4kZWw7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIF90aGlzLnJvdy5zdGFydExhenlSZW5kZXJpbmcocm93Q29udGFpbmVyRGl2KTtcbiAgICAgICAgICAgICAgICB9LCAxMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFJvdy5wcm90b3R5cGUuYmVmb3JlRGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCEhdGhpcy5yb3cpIHtcbiAgICAgICAgICAgIHRoaXMucm93LmlzTmVlZFJlbmRlciA9ICF0aGlzLnJvdy5pc0xhenlSZW5kZXJpbmcoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdCh2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJQcm9wXCJdKSgpXG4gICAgXSwgUm93LnByb3RvdHlwZSwgXCJyb3dcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlByb3BcIl0pKClcbiAgICBdLCBSb3cucHJvdG90eXBlLCBcImNzc1wiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QodnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiUHJvcFwiXSkoKVxuICAgIF0sIFJvdy5wcm90b3R5cGUsIFwic3VydmV5XCIsIHZvaWQgMCk7XG4gICAgUm93ID0gX19kZWNvcmF0ZShbXG4gICAgICAgIHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIkNvbXBvbmVudFwiXVxuICAgIF0sIFJvdyk7XG4gICAgcmV0dXJuIFJvdztcbn0oX2Jhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIkJhc2VWdWVcIl0pKTtcblxudnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNvbXBvbmVudChcInN1cnZleS1yb3dcIiwgUm93KTtcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoUm93KTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvc2lnbmF0dXJlcGFkLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyPz9yZWYtLTAhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NyYy92dWUvc2lnbmF0dXJlcGFkLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogU2lnbmF0dXJlUGFkLCBkZWZhdWx0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlNpZ25hdHVyZVBhZFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFNpZ25hdHVyZVBhZDsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB2dWUgKi8gXCJ2dWVcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4odnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9pbmRleC5qc1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcXVlc3Rpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcXVlc3Rpb24gKi8gXCIuL3NyYy92dWUvcXVlc3Rpb24udHNcIik7XG52YXIgX19leHRlbmRzID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbnZhciBfX2RlY29yYXRlID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn07XG5cblxuXG52YXIgU2lnbmF0dXJlUGFkID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhTaWduYXR1cmVQYWQsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gU2lnbmF0dXJlUGFkKCkge1xuICAgICAgICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgfVxuICAgIFNpZ25hdHVyZVBhZCA9IF9fZGVjb3JhdGUoW1xuICAgICAgICB2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJDb21wb25lbnRcIl1cbiAgICBdLCBTaWduYXR1cmVQYWQpO1xuICAgIHJldHVybiBTaWduYXR1cmVQYWQ7XG59KF9xdWVzdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiZGVmYXVsdFwiXSkpO1xuXG52dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY29tcG9uZW50KFwic3VydmV5LXNpZ25hdHVyZXBhZFwiLCBTaWduYXR1cmVQYWQpO1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChTaWduYXR1cmVQYWQpO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9zdHJpbmctZWRpdG9yLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL3N0cmluZy1lZGl0b3IudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogU3VydmV5U3RyaW5nRWRpdG9yLCBkZWZhdWx0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlN1cnZleVN0cmluZ0VkaXRvclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFN1cnZleVN0cmluZ0VkaXRvcjsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB2dWUgKi8gXCJ2dWVcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4odnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9pbmRleC5qc1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBzdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgc3VydmV5LWNvcmUgKi8gXCIuL3NyYy9lbnRyaWVzL2NvcmUudHNcIik7XG52YXIgX19leHRlbmRzID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbnZhciBfX2RlY29yYXRlID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn07XG5cblxuXG52YXIgU3VydmV5U3RyaW5nRWRpdG9yID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhTdXJ2ZXlTdHJpbmdFZGl0b3IsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gU3VydmV5U3RyaW5nRWRpdG9yKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMub25JbnB1dCA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgX3RoaXMubG9jU3RyaW5nLnRleHQgPSBldmVudC50YXJnZXQuaW5uZXJUZXh0O1xuICAgICAgICB9O1xuICAgICAgICBfdGhpcy5vbkNsaWNrID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdCh2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJQcm9wXCJdKSgpXG4gICAgXSwgU3VydmV5U3RyaW5nRWRpdG9yLnByb3RvdHlwZSwgXCJsb2NTdHJpbmdcIiwgdm9pZCAwKTtcbiAgICBTdXJ2ZXlTdHJpbmdFZGl0b3IgPSBfX2RlY29yYXRlKFtcbiAgICAgICAgdnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiQ29tcG9uZW50XCJdXG4gICAgXSwgU3VydmV5U3RyaW5nRWRpdG9yKTtcbiAgICByZXR1cm4gU3VydmV5U3RyaW5nRWRpdG9yO1xufSh2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEpKTtcblxudnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNvbXBvbmVudChzdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiTG9jYWxpemFibGVTdHJpbmdcIl0uZWRpdGFibGVSZW5kZXJlciwgU3VydmV5U3RyaW5nRWRpdG9yKTtcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoU3VydmV5U3RyaW5nRWRpdG9yKTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvc3RyaW5nLXZpZXdlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy90cy1sb2FkZXI/P3JlZi0tMCEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL3Z1ZS9zdHJpbmctdmlld2VyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFN1cnZleVN0cmluZ1ZpZXdlciwgZGVmYXVsdCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJTdXJ2ZXlTdHJpbmdWaWV3ZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBTdXJ2ZXlTdHJpbmdWaWV3ZXI7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlICovIFwidnVlXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB2dWUtcHJvcGVydHktZGVjb3JhdG9yICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLXByb3BlcnR5LWRlY29yYXRvci9saWIvaW5kZXguanNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHN1cnZleS1jb3JlICovIFwiLi9zcmMvZW50cmllcy9jb3JlLnRzXCIpO1xudmFyIF9fZXh0ZW5kcyA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG52YXIgX19kZWNvcmF0ZSA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xuXG5cblxudmFyIFN1cnZleVN0cmluZ1ZpZXdlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoU3VydmV5U3RyaW5nVmlld2VyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFN1cnZleVN0cmluZ1ZpZXdlcigpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgaWYgKCFfdGhpcy5sb2NTdHJpbmcpXG4gICAgICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgICAgIHZhciBzZWxmID0gX3RoaXM7XG4gICAgICAgIF90aGlzLmxvY1N0cmluZy5vbkNoYW5nZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBzZWxmLiRmb3JjZVVwZGF0ZSgpO1xuICAgICAgICB9O1xuICAgICAgICBfdGhpcy5sb2NTdHJpbmcub25DaGFuZ2VkKCk7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdCh2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJQcm9wXCJdKSgpXG4gICAgXSwgU3VydmV5U3RyaW5nVmlld2VyLnByb3RvdHlwZSwgXCJsb2NTdHJpbmdcIiwgdm9pZCAwKTtcbiAgICBTdXJ2ZXlTdHJpbmdWaWV3ZXIgPSBfX2RlY29yYXRlKFtcbiAgICAgICAgdnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiQ29tcG9uZW50XCJdXG4gICAgXSwgU3VydmV5U3RyaW5nVmlld2VyKTtcbiAgICByZXR1cm4gU3VydmV5U3RyaW5nVmlld2VyO1xufSh2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEpKTtcblxudnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNvbXBvbmVudChzdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiTG9jYWxpemFibGVTdHJpbmdcIl0uZGVmYXVsdFJlbmRlcmVyLCBTdXJ2ZXlTdHJpbmdWaWV3ZXIpO1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChTdXJ2ZXlTdHJpbmdWaWV3ZXIpO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9zdHJpbmcudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy90cy1sb2FkZXI/P3JlZi0tMCEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL3Z1ZS9zdHJpbmcudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBTdXJ2ZXlTdHJpbmcsIGRlZmF1bHQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiU3VydmV5U3RyaW5nXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU3VydmV5U3RyaW5nOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZSAqLyBcInZ1ZVwiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubih2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlLXByb3BlcnR5LWRlY29yYXRvciAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IvbGliL2luZGV4LmpzXCIpO1xudmFyIF9fZXh0ZW5kcyA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG52YXIgX19kZWNvcmF0ZSA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xuXG5cbnZhciBTdXJ2ZXlTdHJpbmcgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFN1cnZleVN0cmluZywgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTdXJ2ZXlTdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICB9XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdCh2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJQcm9wXCJdKSgpXG4gICAgXSwgU3VydmV5U3RyaW5nLnByb3RvdHlwZSwgXCJsb2NTdHJpbmdcIiwgdm9pZCAwKTtcbiAgICBTdXJ2ZXlTdHJpbmcgPSBfX2RlY29yYXRlKFtcbiAgICAgICAgdnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiQ29tcG9uZW50XCJdXG4gICAgXSwgU3VydmV5U3RyaW5nKTtcbiAgICByZXR1cm4gU3VydmV5U3RyaW5nO1xufSh2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEpKTtcblxudnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNvbXBvbmVudChcInN1cnZleS1zdHJpbmdcIiwgU3VydmV5U3RyaW5nKTtcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoU3VydmV5U3RyaW5nKTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvc3VydmV5LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyPz9yZWYtLTAhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NyYy92dWUvc3VydmV5LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogU3VydmV5LCBkZWZhdWx0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlN1cnZleVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFN1cnZleTsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB2dWUgKi8gXCJ2dWVcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4odnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9pbmRleC5qc1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBzdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgc3VydmV5LWNvcmUgKi8gXCIuL3NyYy9lbnRyaWVzL2NvcmUudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Jhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYmFzZSAqLyBcIi4vc3JjL3Z1ZS9iYXNlLnRzXCIpO1xudmFyIF9fZXh0ZW5kcyA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG52YXIgX19kZWNvcmF0ZSA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xuXG5cblxuXG52YXIgU3VydmV5ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhTdXJ2ZXksIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gU3VydmV5KCkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy51cGRhdGVyID0gMTtcbiAgICAgICAgaWYgKF90aGlzLnZ1ZVN1cnZleVtcIm5lZWRSZW5kZXJJY29uc1wiXSkge1xuICAgICAgICAgICAgc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIlN2Z1JlZ2lzdHJ5XCJdLnJlbmRlckljb25zKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5LnByb3RvdHlwZSwgXCJwYWdlS2V5XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJwYWdlXCIgKyB0aGlzLmdldEFjdGl2ZVBhZ2VJZCgpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleS5wcm90b3R5cGUsIFwibmF2SWRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBcIm5hdlwiICsgdGhpcy5nZXRBY3RpdmVQYWdlSWQoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFN1cnZleS5wcm90b3R5cGUuZ2V0TW9kZWwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZ1ZVN1cnZleTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXkucHJvdG90eXBlLCBcInZ1ZVN1cnZleVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuICEhdGhpcy5zdXJ2ZXkgPyB0aGlzLnN1cnZleSA6IHRoaXMubW9kZWw7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBTdXJ2ZXkucHJvdG90eXBlLm9uUHJvcGVydHlDaGFuZ2VkID0gZnVuY3Rpb24gKHZhbHVlLCBvbGRWYWx1ZSkge1xuICAgICAgICB0aGlzLm9uQ3JlYXRlZCgpO1xuICAgICAgICB0aGlzLnN1cnZleU9uTW91bnRlZCgpO1xuICAgIH07XG4gICAgU3VydmV5LnByb3RvdHlwZS5mb3JjZVVwZGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy51cGRhdGVyICs9IDE7XG4gICAgICAgIHRoaXMuJGZvcmNlVXBkYXRlKCk7XG4gICAgfTtcbiAgICBTdXJ2ZXkucHJvdG90eXBlLm9uTW91bnRlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5zdXJ2ZXlPbk1vdW50ZWQoKTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXkucHJvdG90eXBlLCBcInBhZ2VJZFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuICEhdGhpcy52dWVTdXJ2ZXkuYWN0aXZlUGFnZSA/IHRoaXMudnVlU3VydmV5LmFjdGl2ZVBhZ2UuaWQgOiBcIlwiO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgU3VydmV5LnByb3RvdHlwZS5nZXRBY3RpdmVQYWdlSWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBwYWdlSWQgPSB0aGlzLnBhZ2VJZDtcbiAgICAgICAgcmV0dXJuICEhdGhpcy52dWVTdXJ2ZXkgJiYgcGFnZUlkICsgdGhpcy51cGRhdGVyLnRvU3RyaW5nKCk7XG4gICAgfTtcbiAgICBTdXJ2ZXkucHJvdG90eXBlLnN1cnZleU9uTW91bnRlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnZ1ZVN1cnZleSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIGVsID0gdGhpcy4kZWw7XG4gICAgICAgIGlmIChlbClcbiAgICAgICAgICAgIHRoaXMudnVlU3VydmV5LmFmdGVyUmVuZGVyU3VydmV5KGVsKTtcbiAgICAgICAgdGhpcy52dWVTdXJ2ZXkudmFsdWVIYXNoU2V0RGF0YUNhbGxiYWNrID0gZnVuY3Rpb24gKHZhbHVlc0hhc2gsIGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgIHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5zZXQodmFsdWVzSGFzaCwga2V5LCB2YWx1ZSk7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMudnVlU3VydmV5LnZhbHVlSGFzaERlbGV0ZURhdGFDYWxsYmFjayA9IGZ1bmN0aW9uICh2YWx1ZXNIYXNoLCBrZXkpIHtcbiAgICAgICAgICAgIHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5kZWxldGUodmFsdWVzSGFzaCwga2V5KTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy52dWVTdXJ2ZXkucmVuZGVyQ2FsbGJhY2sgPSB0aGlzLmZvcmNlVXBkYXRlO1xuICAgICAgICB0aGlzLnZ1ZVN1cnZleS5zdGFydFRpbWVyRnJvbVVJKCk7XG4gICAgfTtcbiAgICBTdXJ2ZXkucHJvdG90eXBlLmJlZm9yZURlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMudnVlU3VydmV5LnN0b3BUaW1lcigpO1xuICAgICAgICB0aGlzLnZ1ZVN1cnZleS5yZW5kZXJDYWxsYmFjayA9IHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXkucHJvdG90eXBlLCBcImhhc1RpdGxlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gISF0aGlzLnZ1ZVN1cnZleS50aXRsZSAmJiB0aGlzLnZ1ZVN1cnZleS5zaG93VGl0bGU7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5LnByb3RvdHlwZSwgXCJoYXNDb21wbGV0ZWRQYWdlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52dWVTdXJ2ZXkuc2hvd0NvbXBsZXRlZFBhZ2UgJiYgdGhpcy52dWVTdXJ2ZXkuc3RhdGUgPT09IFwiY29tcGxldGVkXCI7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5LnByb3RvdHlwZSwgXCJjc3NcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZ1ZVN1cnZleS5jc3M7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBTdXJ2ZXkucHJvdG90eXBlLmdldFByb2Nlc3NlZENvbXBsZXRlZEh0bWwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5oYXNDb21wbGV0ZWRQYWdlKVxuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIGlmICghdGhpcy5wcm9jZXNzZWRDb21wbGV0ZWRIdG1sVmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc2VkQ29tcGxldGVkSHRtbFZhbHVlID0gdGhpcy52dWVTdXJ2ZXkucHJvY2Vzc2VkQ29tcGxldGVkSHRtbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzZWRDb21wbGV0ZWRIdG1sVmFsdWU7XG4gICAgfTtcbiAgICBTdXJ2ZXkucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnZ1ZVN1cnZleS5zdGFydCgpO1xuICAgIH07XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdCh2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJQcm9wXCJdKSgpXG4gICAgXSwgU3VydmV5LnByb3RvdHlwZSwgXCJzdXJ2ZXlcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlByb3BcIl0pKClcbiAgICBdLCBTdXJ2ZXkucHJvdG90eXBlLCBcIm1vZGVsXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdCh2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJXYXRjaFwiXSkoXCJtb2RlbFwiKSxcbiAgICAgICAgT2JqZWN0KHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIldhdGNoXCJdKShcInN1cnZleVwiKVxuICAgIF0sIFN1cnZleS5wcm90b3R5cGUsIFwib25Qcm9wZXJ0eUNoYW5nZWRcIiwgbnVsbCk7XG4gICAgU3VydmV5ID0gX19kZWNvcmF0ZShbXG4gICAgICAgIHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIkNvbXBvbmVudFwiXVxuICAgIF0sIFN1cnZleSk7XG4gICAgcmV0dXJuIFN1cnZleTtcbn0oX2Jhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcIkJhc2VWdWVcIl0pKTtcblxuLy8gVE9ETzogbWFrZSB0aGlzIGZ1bmN0aW9uYWxpdHkgYXZhaWxhYmxlIHZpYSBzdXJ2ZXlDc3MgaW4gYWxsIGV4YW1wbGVzXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5LCBcImNzc1R5cGVcIiwge1xuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcInN1cnZleUNzc1wiXS5jdXJyZW50VHlwZTtcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gKG5ld1R5cGUpIHtcbiAgICAgICAgc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIlN0eWxlc01hbmFnZXJcIl0uYXBwbHlUaGVtZShuZXdUeXBlKTtcbiAgICB9LFxuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbn0pO1xudnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNvbXBvbmVudChcInN1cnZleVwiLCBTdXJ2ZXkpO1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChTdXJ2ZXkpO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS90YWdib3gudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy90cy1sb2FkZXI/P3JlZi0tMCEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL3Z1ZS90YWdib3gudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBUYWdib3gsIGRlZmF1bHQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiVGFnYm94XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gVGFnYm94OyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZSAqLyBcInZ1ZVwiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubih2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlLXByb3BlcnR5LWRlY29yYXRvciAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IvbGliL2luZGV4LmpzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9xdWVzdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9xdWVzdGlvbiAqLyBcIi4vc3JjL3Z1ZS9xdWVzdGlvbi50c1wiKTtcbnZhciBfX2V4dGVuZHMgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xudmFyIF9fZGVjb3JhdGUgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufTtcblxuXG5cbnZhciBUYWdib3ggPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFRhZ2JveCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBUYWdib3goKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICB9XG4gICAgVGFnYm94ID0gX19kZWNvcmF0ZShbXG4gICAgICAgIHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIkNvbXBvbmVudFwiXVxuICAgIF0sIFRhZ2JveCk7XG4gICAgcmV0dXJuIFRhZ2JveDtcbn0oX3F1ZXN0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJkZWZhdWx0XCJdKSk7XG5cbnZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jb21wb25lbnQoXCJzdXJ2ZXktdGFnYm94XCIsIFRhZ2JveCk7XG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKFRhZ2JveCk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL3RleHQtaW5wdXQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyPz9yZWYtLTAhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NyYy92dWUvdGV4dC1pbnB1dC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBRdWVzdGlvblRleHRJbnB1dCwgZGVmYXVsdCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJRdWVzdGlvblRleHRJbnB1dFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFF1ZXN0aW9uVGV4dElucHV0OyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZSAqLyBcInZ1ZVwiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubih2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlLXByb3BlcnR5LWRlY29yYXRvciAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IvbGliL2luZGV4LmpzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9iYXNlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2Jhc2UgKi8gXCIuL3NyYy92dWUvYmFzZS50c1wiKTtcbnZhciBfX2V4dGVuZHMgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xudmFyIF9fZGVjb3JhdGUgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufTtcblxuXG5cbnZhciBRdWVzdGlvblRleHRJbnB1dCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoUXVlc3Rpb25UZXh0SW5wdXQsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gUXVlc3Rpb25UZXh0SW5wdXQoKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uVGV4dElucHV0LnByb3RvdHlwZSwgXCJpbnB1dFN0eWxlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5pbnB1dFN0eWxlO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUXVlc3Rpb25UZXh0SW5wdXQucHJvdG90eXBlLmdldE1vZGVsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5xdWVzdGlvbjtcbiAgICB9O1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QodnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiUHJvcFwiXSkoKVxuICAgIF0sIFF1ZXN0aW9uVGV4dElucHV0LnByb3RvdHlwZSwgXCJxdWVzdGlvblwiLCB2b2lkIDApO1xuICAgIFF1ZXN0aW9uVGV4dElucHV0ID0gX19kZWNvcmF0ZShbXG4gICAgICAgIHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIkNvbXBvbmVudFwiXVxuICAgIF0sIFF1ZXN0aW9uVGV4dElucHV0KTtcbiAgICByZXR1cm4gUXVlc3Rpb25UZXh0SW5wdXQ7XG59KF9iYXNlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJCYXNlVnVlXCJdKSk7XG5cbnZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jb21wb25lbnQoXCJzdXJ2ZXktdGV4dC1pbnB1dFwiLCBRdWVzdGlvblRleHRJbnB1dCk7XG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKFF1ZXN0aW9uVGV4dElucHV0KTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvdGV4dC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy90cy1sb2FkZXI/P3JlZi0tMCEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL3Z1ZS90ZXh0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFF1ZXN0aW9uVGV4dCwgZGVmYXVsdCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJRdWVzdGlvblRleHRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBRdWVzdGlvblRleHQ7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlICovIFwidnVlXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB2dWUtcHJvcGVydHktZGVjb3JhdG9yICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLXByb3BlcnR5LWRlY29yYXRvci9saWIvaW5kZXguanNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3F1ZXN0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3F1ZXN0aW9uICovIFwiLi9zcmMvdnVlL3F1ZXN0aW9uLnRzXCIpO1xudmFyIF9fZXh0ZW5kcyA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG52YXIgX19kZWNvcmF0ZSA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xuXG5cblxudmFyIFF1ZXN0aW9uVGV4dCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoUXVlc3Rpb25UZXh0LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFF1ZXN0aW9uVGV4dCgpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIH1cbiAgICBRdWVzdGlvblRleHQgPSBfX2RlY29yYXRlKFtcbiAgICAgICAgdnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiQ29tcG9uZW50XCJdXG4gICAgXSwgUXVlc3Rpb25UZXh0KTtcbiAgICByZXR1cm4gUXVlc3Rpb25UZXh0O1xufShfcXVlc3Rpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcImRlZmF1bHRcIl0pKTtcblxudnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNvbXBvbmVudChcInN1cnZleS10ZXh0XCIsIFF1ZXN0aW9uVGV4dCk7XG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKFF1ZXN0aW9uVGV4dCk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL3RpbWVycGFuZWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyPz9yZWYtLTAhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NyYy92dWUvdGltZXJwYW5lbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBUaW1lclBhbmVsLCBkZWZhdWx0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlRpbWVyUGFuZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBUaW1lclBhbmVsOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZSAqLyBcInZ1ZVwiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubih2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlLXByb3BlcnR5LWRlY29yYXRvciAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IvbGliL2luZGV4LmpzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9iYXNlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2Jhc2UgKi8gXCIuL3NyYy92dWUvYmFzZS50c1wiKTtcbnZhciBfX2V4dGVuZHMgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xudmFyIF9fZGVjb3JhdGUgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufTtcblxuXG5cbnZhciBUaW1lclBhbmVsID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhUaW1lclBhbmVsLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFRpbWVyUGFuZWwoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5jaXJjbGVSYWRpdXMgPSA0NDA7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRpbWVyUGFuZWwucHJvdG90eXBlLCBcInByb2dyZXNzXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gLXRoaXMuY2lyY2xlUmFkaXVzICogdGhpcy5tb2RlbC5wcm9ncmVzcztcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUaW1lclBhbmVsLnByb3RvdHlwZSwgXCJ0ZXh0XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb2RlbC50ZXh0O1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgVGltZXJQYW5lbC5wcm90b3R5cGUuZ2V0TW9kZWwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICAgIH07XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdCh2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJQcm9wXCJdKSgpXG4gICAgXSwgVGltZXJQYW5lbC5wcm90b3R5cGUsIFwibW9kZWxcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlByb3BcIl0pKClcbiAgICBdLCBUaW1lclBhbmVsLnByb3RvdHlwZSwgXCJjc3NcIiwgdm9pZCAwKTtcbiAgICBUaW1lclBhbmVsID0gX19kZWNvcmF0ZShbXG4gICAgICAgIHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIkNvbXBvbmVudFwiXVxuICAgIF0sIFRpbWVyUGFuZWwpO1xuICAgIHJldHVybiBUaW1lclBhbmVsO1xufShfYmFzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiQmFzZVZ1ZVwiXSkpO1xuXG52dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY29tcG9uZW50KFwic3YtdGltZXJwYW5lbFwiLCBUaW1lclBhbmVsKTtcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoVGltZXJQYW5lbCk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWNsYXNzLWNvbXBvbmVudC9kaXN0L3Z1ZS1jbGFzcy1jb21wb25lbnQuZXNtLmpzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy92dWUtY2xhc3MtY29tcG9uZW50L2Rpc3QvdnVlLWNsYXNzLWNvbXBvbmVudC5lc20uanMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGRlZmF1bHQsIGNyZWF0ZURlY29yYXRvciwgbWl4aW5zICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImNyZWF0ZURlY29yYXRvclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZURlY29yYXRvcjsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwibWl4aW5zXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gbWl4aW5zOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZSAqLyBcInZ1ZVwiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubih2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyk7XG4vKipcbiAgKiB2dWUtY2xhc3MtY29tcG9uZW50IHY3LjIuNlxuICAqIChjKSAyMDE1LXByZXNlbnQgRXZhbiBZb3VcbiAgKiBAbGljZW5zZSBNSVRcbiAgKi9cblxuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHtcbiAgICBfdHlwZW9mID0gZnVuY3Rpb24gKG9iaikge1xuICAgICAgcmV0dXJuIHR5cGVvZiBvYmo7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBfdHlwZW9mID0gZnVuY3Rpb24gKG9iaikge1xuICAgICAgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBfdHlwZW9mKG9iaik7XG59XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHtcbiAgaWYgKGtleSBpbiBvYmopIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9ialtrZXldID0gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gb2JqO1xufVxuXG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7XG4gIHJldHVybiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5KGFycikgfHwgX25vbkl0ZXJhYmxlU3ByZWFkKCk7XG59XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkge1xuICAgIGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGFyci5sZW5ndGgpOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSBhcnIyW2ldID0gYXJyW2ldO1xuXG4gICAgcmV0dXJuIGFycjI7XG4gIH1cbn1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7XG4gIGlmIChTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGl0ZXIpIHx8IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpdGVyKSA9PT0gXCJbb2JqZWN0IEFyZ3VtZW50c11cIikgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7XG59XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlXCIpO1xufVxuXG4vLyBUaGUgcmF0aW9uYWwgYmVoaW5kIHRoZSB2ZXJib3NlIFJlZmxlY3QtZmVhdHVyZSBjaGVjayBiZWxvdyBpcyB0aGUgZmFjdCB0aGF0IHRoZXJlIGFyZSBwb2x5ZmlsbHNcbi8vIHdoaWNoIGFkZCBhbiBpbXBsZW1lbnRhdGlvbiBmb3IgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YSBidXQgbm90IGZvciBSZWZsZWN0LmdldE93bk1ldGFkYXRhS2V5cy5cbi8vIFdpdGhvdXQgdGhpcyBjaGVjayBjb25zdW1lcnMgd2lsbCBlbmNvdW50ZXIgaGFyZCB0byB0cmFjayBkb3duIHJ1bnRpbWUgZXJyb3JzLlxuZnVuY3Rpb24gcmVmbGVjdGlvbklzU3VwcG9ydGVkKCkge1xuICByZXR1cm4gdHlwZW9mIFJlZmxlY3QgIT09ICd1bmRlZmluZWQnICYmIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEgJiYgUmVmbGVjdC5nZXRPd25NZXRhZGF0YUtleXM7XG59XG5mdW5jdGlvbiBjb3B5UmVmbGVjdGlvbk1ldGFkYXRhKHRvLCBmcm9tKSB7XG4gIGZvcndhcmRNZXRhZGF0YSh0bywgZnJvbSk7XG4gIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGZyb20ucHJvdG90eXBlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICBmb3J3YXJkTWV0YWRhdGEodG8ucHJvdG90eXBlLCBmcm9tLnByb3RvdHlwZSwga2V5KTtcbiAgfSk7XG4gIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGZyb20pLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIGZvcndhcmRNZXRhZGF0YSh0bywgZnJvbSwga2V5KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGZvcndhcmRNZXRhZGF0YSh0bywgZnJvbSwgcHJvcGVydHlLZXkpIHtcbiAgdmFyIG1ldGFLZXlzID0gcHJvcGVydHlLZXkgPyBSZWZsZWN0LmdldE93bk1ldGFkYXRhS2V5cyhmcm9tLCBwcm9wZXJ0eUtleSkgOiBSZWZsZWN0LmdldE93bk1ldGFkYXRhS2V5cyhmcm9tKTtcbiAgbWV0YUtleXMuZm9yRWFjaChmdW5jdGlvbiAobWV0YUtleSkge1xuICAgIHZhciBtZXRhZGF0YSA9IHByb3BlcnR5S2V5ID8gUmVmbGVjdC5nZXRPd25NZXRhZGF0YShtZXRhS2V5LCBmcm9tLCBwcm9wZXJ0eUtleSkgOiBSZWZsZWN0LmdldE93bk1ldGFkYXRhKG1ldGFLZXksIGZyb20pO1xuXG4gICAgaWYgKHByb3BlcnR5S2V5KSB7XG4gICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKG1ldGFLZXksIG1ldGFkYXRhLCB0bywgcHJvcGVydHlLZXkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKG1ldGFLZXksIG1ldGFkYXRhLCB0byk7XG4gICAgfVxuICB9KTtcbn1cblxudmFyIGZha2VBcnJheSA9IHtcbiAgX19wcm90b19fOiBbXVxufTtcbnZhciBoYXNQcm90byA9IGZha2VBcnJheSBpbnN0YW5jZW9mIEFycmF5O1xuZnVuY3Rpb24gY3JlYXRlRGVjb3JhdG9yKGZhY3RvcnkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSwgaW5kZXgpIHtcbiAgICB2YXIgQ3RvciA9IHR5cGVvZiB0YXJnZXQgPT09ICdmdW5jdGlvbicgPyB0YXJnZXQgOiB0YXJnZXQuY29uc3RydWN0b3I7XG5cbiAgICBpZiAoIUN0b3IuX19kZWNvcmF0b3JzX18pIHtcbiAgICAgIEN0b3IuX19kZWNvcmF0b3JzX18gPSBbXTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluZGV4ICE9PSAnbnVtYmVyJykge1xuICAgICAgaW5kZXggPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgQ3Rvci5fX2RlY29yYXRvcnNfXy5wdXNoKGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICByZXR1cm4gZmFjdG9yeShvcHRpb25zLCBrZXksIGluZGV4KTtcbiAgICB9KTtcbiAgfTtcbn1cbmZ1bmN0aW9uIG1peGlucygpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIEN0b3JzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIEN0b3JzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgcmV0dXJuIHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5leHRlbmQoe1xuICAgIG1peGluczogQ3RvcnNcbiAgfSk7XG59XG5mdW5jdGlvbiBpc1ByaW1pdGl2ZSh2YWx1ZSkge1xuICB2YXIgdHlwZSA9IF90eXBlb2YodmFsdWUpO1xuXG4gIHJldHVybiB2YWx1ZSA9PSBudWxsIHx8IHR5cGUgIT09ICdvYmplY3QnICYmIHR5cGUgIT09ICdmdW5jdGlvbic7XG59XG5mdW5jdGlvbiB3YXJuKG1lc3NhZ2UpIHtcbiAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgIGNvbnNvbGUud2FybignW3Z1ZS1jbGFzcy1jb21wb25lbnRdICcgKyBtZXNzYWdlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb2xsZWN0RGF0YUZyb21Db25zdHJ1Y3Rvcih2bSwgQ29tcG9uZW50KSB7XG4gIC8vIG92ZXJyaWRlIF9pbml0IHRvIHByZXZlbnQgdG8gaW5pdCBhcyBWdWUgaW5zdGFuY2VcbiAgdmFyIG9yaWdpbmFsSW5pdCA9IENvbXBvbmVudC5wcm90b3R5cGUuX2luaXQ7XG5cbiAgQ29tcG9uZW50LnByb3RvdHlwZS5faW5pdCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgLy8gcHJveHkgdG8gYWN0dWFsIHZtXG4gICAgdmFyIGtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh2bSk7IC8vIDIuMi4wIGNvbXBhdCAocHJvcHMgYXJlIG5vIGxvbmdlciBleHBvc2VkIGFzIHNlbGYgcHJvcGVydGllcylcblxuICAgIGlmICh2bS4kb3B0aW9ucy5wcm9wcykge1xuICAgICAgZm9yICh2YXIga2V5IGluIHZtLiRvcHRpb25zLnByb3BzKSB7XG4gICAgICAgIGlmICghdm0uaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgIGtleXMucHVzaChrZXkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfdGhpcywga2V5LCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgIHJldHVybiB2bVtrZXldO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIHNldCh2YWx1ZSkge1xuICAgICAgICAgIHZtW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTsgLy8gc2hvdWxkIGJlIGFjcXVpcmVkIGNsYXNzIHByb3BlcnR5IHZhbHVlc1xuXG5cbiAgdmFyIGRhdGEgPSBuZXcgQ29tcG9uZW50KCk7IC8vIHJlc3RvcmUgb3JpZ2luYWwgX2luaXQgdG8gYXZvaWQgbWVtb3J5IGxlYWsgKCMyMDkpXG5cbiAgQ29tcG9uZW50LnByb3RvdHlwZS5faW5pdCA9IG9yaWdpbmFsSW5pdDsgLy8gY3JlYXRlIHBsYWluIGRhdGEgb2JqZWN0XG5cbiAgdmFyIHBsYWluRGF0YSA9IHt9O1xuICBPYmplY3Qua2V5cyhkYXRhKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICBpZiAoZGF0YVtrZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHBsYWluRGF0YVtrZXldID0gZGF0YVtrZXldO1xuICAgIH1cbiAgfSk7XG5cbiAgaWYgKHRydWUpIHtcbiAgICBpZiAoIShDb21wb25lbnQucHJvdG90eXBlIGluc3RhbmNlb2YgdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hKSAmJiBPYmplY3Qua2V5cyhwbGFpbkRhdGEpLmxlbmd0aCA+IDApIHtcbiAgICAgIHdhcm4oJ0NvbXBvbmVudCBjbGFzcyBtdXN0IGluaGVyaXQgVnVlIG9yIGl0cyBkZXNjZW5kYW50IGNsYXNzICcgKyAnd2hlbiBjbGFzcyBwcm9wZXJ0eSBpcyB1c2VkLicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwbGFpbkRhdGE7XG59XG5cbnZhciAkaW50ZXJuYWxIb29rcyA9IFsnZGF0YScsICdiZWZvcmVDcmVhdGUnLCAnY3JlYXRlZCcsICdiZWZvcmVNb3VudCcsICdtb3VudGVkJywgJ2JlZm9yZURlc3Ryb3knLCAnZGVzdHJveWVkJywgJ2JlZm9yZVVwZGF0ZScsICd1cGRhdGVkJywgJ2FjdGl2YXRlZCcsICdkZWFjdGl2YXRlZCcsICdyZW5kZXInLCAnZXJyb3JDYXB0dXJlZCcsICdzZXJ2ZXJQcmVmZXRjaCcgLy8gMi42XG5dO1xuZnVuY3Rpb24gY29tcG9uZW50RmFjdG9yeShDb21wb25lbnQpIHtcbiAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICBvcHRpb25zLm5hbWUgPSBvcHRpb25zLm5hbWUgfHwgQ29tcG9uZW50Ll9jb21wb25lbnRUYWcgfHwgQ29tcG9uZW50Lm5hbWU7IC8vIHByb3RvdHlwZSBwcm9wcy5cblxuICB2YXIgcHJvdG8gPSBDb21wb25lbnQucHJvdG90eXBlO1xuICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhwcm90bykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKGtleSA9PT0gJ2NvbnN0cnVjdG9yJykge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gaG9va3NcblxuXG4gICAgaWYgKCRpbnRlcm5hbEhvb2tzLmluZGV4T2Yoa2V5KSA+IC0xKSB7XG4gICAgICBvcHRpb25zW2tleV0gPSBwcm90b1trZXldO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwcm90bywga2V5KTtcblxuICAgIGlmIChkZXNjcmlwdG9yLnZhbHVlICE9PSB2b2lkIDApIHtcbiAgICAgIC8vIG1ldGhvZHNcbiAgICAgIGlmICh0eXBlb2YgZGVzY3JpcHRvci52YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAob3B0aW9ucy5tZXRob2RzIHx8IChvcHRpb25zLm1ldGhvZHMgPSB7fSkpW2tleV0gPSBkZXNjcmlwdG9yLnZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdHlwZXNjcmlwdCBkZWNvcmF0ZWQgZGF0YVxuICAgICAgICAob3B0aW9ucy5taXhpbnMgfHwgKG9wdGlvbnMubWl4aW5zID0gW10pKS5wdXNoKHtcbiAgICAgICAgICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgICAgICAgICAgcmV0dXJuIF9kZWZpbmVQcm9wZXJ0eSh7fSwga2V5LCBkZXNjcmlwdG9yLnZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZGVzY3JpcHRvci5nZXQgfHwgZGVzY3JpcHRvci5zZXQpIHtcbiAgICAgIC8vIGNvbXB1dGVkIHByb3BlcnRpZXNcbiAgICAgIChvcHRpb25zLmNvbXB1dGVkIHx8IChvcHRpb25zLmNvbXB1dGVkID0ge30pKVtrZXldID0ge1xuICAgICAgICBnZXQ6IGRlc2NyaXB0b3IuZ2V0LFxuICAgICAgICBzZXQ6IGRlc2NyaXB0b3Iuc2V0XG4gICAgICB9O1xuICAgIH1cbiAgfSk7XG4gIChvcHRpb25zLm1peGlucyB8fCAob3B0aW9ucy5taXhpbnMgPSBbXSkpLnB1c2goe1xuICAgIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgICByZXR1cm4gY29sbGVjdERhdGFGcm9tQ29uc3RydWN0b3IodGhpcywgQ29tcG9uZW50KTtcbiAgICB9XG4gIH0pOyAvLyBkZWNvcmF0ZSBvcHRpb25zXG5cbiAgdmFyIGRlY29yYXRvcnMgPSBDb21wb25lbnQuX19kZWNvcmF0b3JzX187XG5cbiAgaWYgKGRlY29yYXRvcnMpIHtcbiAgICBkZWNvcmF0b3JzLmZvckVhY2goZnVuY3Rpb24gKGZuKSB7XG4gICAgICByZXR1cm4gZm4ob3B0aW9ucyk7XG4gICAgfSk7XG4gICAgZGVsZXRlIENvbXBvbmVudC5fX2RlY29yYXRvcnNfXztcbiAgfSAvLyBmaW5kIHN1cGVyXG5cblxuICB2YXIgc3VwZXJQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihDb21wb25lbnQucHJvdG90eXBlKTtcbiAgdmFyIFN1cGVyID0gc3VwZXJQcm90byBpbnN0YW5jZW9mIHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYSA/IHN1cGVyUHJvdG8uY29uc3RydWN0b3IgOiB2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmE7XG4gIHZhciBFeHRlbmRlZCA9IFN1cGVyLmV4dGVuZChvcHRpb25zKTtcbiAgZm9yd2FyZFN0YXRpY01lbWJlcnMoRXh0ZW5kZWQsIENvbXBvbmVudCwgU3VwZXIpO1xuXG4gIGlmIChyZWZsZWN0aW9uSXNTdXBwb3J0ZWQoKSkge1xuICAgIGNvcHlSZWZsZWN0aW9uTWV0YWRhdGEoRXh0ZW5kZWQsIENvbXBvbmVudCk7XG4gIH1cblxuICByZXR1cm4gRXh0ZW5kZWQ7XG59XG52YXIgcmVzZXJ2ZWRQcm9wZXJ0eU5hbWVzID0gWy8vIFVuaXF1ZSBpZFxuJ2NpZCcsIC8vIFN1cGVyIFZ1ZSBjb25zdHJ1Y3RvclxuJ3N1cGVyJywgLy8gQ29tcG9uZW50IG9wdGlvbnMgdGhhdCB3aWxsIGJlIHVzZWQgYnkgdGhlIGNvbXBvbmVudFxuJ29wdGlvbnMnLCAnc3VwZXJPcHRpb25zJywgJ2V4dGVuZE9wdGlvbnMnLCAnc2VhbGVkT3B0aW9ucycsIC8vIFByaXZhdGUgYXNzZXRzXG4nY29tcG9uZW50JywgJ2RpcmVjdGl2ZScsICdmaWx0ZXInXTtcbnZhciBzaG91bGRJZ25vcmUgPSB7XG4gIHByb3RvdHlwZTogdHJ1ZSxcbiAgYXJndW1lbnRzOiB0cnVlLFxuICBjYWxsZWU6IHRydWUsXG4gIGNhbGxlcjogdHJ1ZVxufTtcblxuZnVuY3Rpb24gZm9yd2FyZFN0YXRpY01lbWJlcnMoRXh0ZW5kZWQsIE9yaWdpbmFsLCBTdXBlcikge1xuICAvLyBXZSBoYXZlIHRvIHVzZSBnZXRPd25Qcm9wZXJ0eU5hbWVzIHNpbmNlIEJhYmVsIHJlZ2lzdGVycyBtZXRob2RzIGFzIG5vbi1lbnVtZXJhYmxlXG4gIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKE9yaWdpbmFsKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAvLyBTa2lwIHRoZSBwcm9wZXJ0aWVzIHRoYXQgc2hvdWxkIG5vdCBiZSBvdmVyd3JpdHRlblxuICAgIGlmIChzaG91bGRJZ25vcmVba2V5XSkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gU29tZSBicm93c2VycyBkb2VzIG5vdCBhbGxvdyByZWNvbmZpZ3VyZSBidWlsdC1pbiBwcm9wZXJ0aWVzXG5cblxuICAgIHZhciBleHRlbmRlZERlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEV4dGVuZGVkLCBrZXkpO1xuXG4gICAgaWYgKGV4dGVuZGVkRGVzY3JpcHRvciAmJiAhZXh0ZW5kZWREZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPcmlnaW5hbCwga2V5KTsgLy8gSWYgdGhlIHVzZXIgYWdlbnQgZG9lcyBub3Qgc3VwcG9ydCBgX19wcm90b19fYCBvciBpdHMgZmFtaWx5IChJRSA8PSAxMCksXG4gICAgLy8gdGhlIHN1YiBjbGFzcyBwcm9wZXJ0aWVzIG1heSBiZSBpbmhlcml0ZWQgcHJvcGVydGllcyBmcm9tIHRoZSBzdXBlciBjbGFzcyBpbiBUeXBlU2NyaXB0LlxuICAgIC8vIFdlIG5lZWQgdG8gZXhjbHVkZSBzdWNoIHByb3BlcnRpZXMgdG8gcHJldmVudCB0byBvdmVyd3JpdGVcbiAgICAvLyB0aGUgY29tcG9uZW50IG9wdGlvbnMgb2JqZWN0IHdoaWNoIHN0b3JlZCBvbiB0aGUgZXh0ZW5kZWQgY29uc3RydWN0b3IgKFNlZSAjMTkyKS5cbiAgICAvLyBJZiB0aGUgdmFsdWUgaXMgYSByZWZlcmVuY2VkIHZhbHVlIChvYmplY3Qgb3IgZnVuY3Rpb24pLFxuICAgIC8vIHdlIGNhbiBjaGVjayBlcXVhbGl0eSBvZiB0aGVtIGFuZCBleGNsdWRlIGl0IGlmIHRoZXkgaGF2ZSB0aGUgc2FtZSByZWZlcmVuY2UuXG4gICAgLy8gSWYgaXQgaXMgYSBwcmltaXRpdmUgdmFsdWUsIGl0IHdpbGwgYmUgZm9yd2FyZGVkIGZvciBzYWZldHkuXG5cbiAgICBpZiAoIWhhc1Byb3RvKSB7XG4gICAgICAvLyBPbmx5IGBjaWRgIGlzIGV4cGxpY2l0bHkgZXhsdWRlZCBmcm9tIHByb3BlcnR5IGZvcndhcmRpbmdcbiAgICAgIC8vIGJlY2F1c2Ugd2UgY2Fubm90IGRldGVjdCB3aGV0aGVyIGl0IGlzIGEgaW5oZXJpdGVkIHByb3BlcnR5IG9yIG5vdFxuICAgICAgLy8gb24gdGhlIG5vIGBfX3Byb3RvX19gIGVudmlyb25tZW50IGV2ZW4gdGhvdWdoIHRoZSBwcm9wZXJ0eSBpcyByZXNlcnZlZC5cbiAgICAgIGlmIChrZXkgPT09ICdjaWQnKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIHN1cGVyRGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoU3VwZXIsIGtleSk7XG5cbiAgICAgIGlmICghaXNQcmltaXRpdmUoZGVzY3JpcHRvci52YWx1ZSkgJiYgc3VwZXJEZXNjcmlwdG9yICYmIHN1cGVyRGVzY3JpcHRvci52YWx1ZSA9PT0gZGVzY3JpcHRvci52YWx1ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSAvLyBXYXJuIGlmIHRoZSB1c2VycyBtYW51YWxseSBkZWNsYXJlIHJlc2VydmVkIHByb3BlcnRpZXNcblxuXG4gICAgaWYgKCB0cnVlICYmIHJlc2VydmVkUHJvcGVydHlOYW1lcy5pbmRleE9mKGtleSkgPj0gMCkge1xuICAgICAgd2FybihcIlN0YXRpYyBwcm9wZXJ0eSBuYW1lICdcIi5jb25jYXQoa2V5LCBcIicgZGVjbGFyZWQgb24gY2xhc3MgJ1wiKS5jb25jYXQoT3JpZ2luYWwubmFtZSwgXCInIFwiKSArICdjb25mbGljdHMgd2l0aCByZXNlcnZlZCBwcm9wZXJ0eSBuYW1lIG9mIFZ1ZSBpbnRlcm5hbC4gJyArICdJdCBtYXkgY2F1c2UgdW5leHBlY3RlZCBiZWhhdmlvciBvZiB0aGUgY29tcG9uZW50LiBDb25zaWRlciByZW5hbWluZyB0aGUgcHJvcGVydHkuJyk7XG4gICAgfVxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEV4dGVuZGVkLCBrZXksIGRlc2NyaXB0b3IpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gQ29tcG9uZW50KG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGNvbXBvbmVudEZhY3Rvcnkob3B0aW9ucyk7XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKENvbXBvbmVudCkge1xuICAgIHJldHVybiBjb21wb25lbnRGYWN0b3J5KENvbXBvbmVudCwgb3B0aW9ucyk7XG4gIH07XG59XG5cbkNvbXBvbmVudC5yZWdpc3Rlckhvb2tzID0gZnVuY3Rpb24gcmVnaXN0ZXJIb29rcyhrZXlzKSB7XG4gICRpbnRlcm5hbEhvb2tzLnB1c2guYXBwbHkoJGludGVybmFsSG9va3MsIF90b0NvbnN1bWFibGVBcnJheShrZXlzKSk7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKENvbXBvbmVudCk7XG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2Jvb2xlYW4tY2hlY2tib3gudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTVjY2QzNDBhJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL3Z1ZS9ib29sZWFuLWNoZWNrYm94LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01Y2NkMzQwYSYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiByZW5kZXI7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0YXRpY1JlbmRlckZuczsgfSk7XG52YXIgcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yb290Q2hlY2tib3ggfSwgW1xuICAgIF9jKFwiZGl2XCIsIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5nZXRDaGVja2JveEl0ZW1Dc3MoKSB9LCBbXG4gICAgICBfYyhcImxhYmVsXCIsIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmNoZWNrYm94TGFiZWwgfSwgW1xuICAgICAgICBfYyhcImlucHV0XCIsIHtcbiAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6IFwibW9kZWxcIixcbiAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LW1vZGVsXCIsXG4gICAgICAgICAgICAgIHZhbHVlOiBfdm0ucXVlc3Rpb24uYm9vbGVhblZhbHVlLFxuICAgICAgICAgICAgICBleHByZXNzaW9uOiBcInF1ZXN0aW9uLmJvb2xlYW5WYWx1ZVwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jb250cm9sQ2hlY2tib3gsXG4gICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgIHR5cGU6IFwiY2hlY2tib3hcIixcbiAgICAgICAgICAgIG5hbWU6IF92bS5xdWVzdGlvbi5uYW1lLFxuICAgICAgICAgICAgaWQ6IF92bS5xdWVzdGlvbi5pbnB1dElkLFxuICAgICAgICAgICAgZGlzYWJsZWQ6IF92bS5xdWVzdGlvbi5pc0lucHV0UmVhZE9ubHksXG4gICAgICAgICAgICBcImFyaWEtcmVxdWlyZWRcIjogX3ZtLnF1ZXN0aW9uLmFyaWFSZXF1aXJlZCxcbiAgICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBfdm0ucXVlc3Rpb24uYXJpYUxhYmVsLFxuICAgICAgICAgICAgXCJhcmlhLWludmFsaWRcIjogX3ZtLnF1ZXN0aW9uLmFyaWFJbnZhbGlkLFxuICAgICAgICAgICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6IF92bS5xdWVzdGlvbi5hcmlhRGVzY3JpYmVkQnksXG4gICAgICAgICAgfSxcbiAgICAgICAgICBkb21Qcm9wczoge1xuICAgICAgICAgICAgdmFsdWU6IF92bS5xdWVzdGlvbi5ib29sZWFuVmFsdWUsXG4gICAgICAgICAgICBpbmRldGVybWluYXRlOiBfdm0ucXVlc3Rpb24uaXNJbmRldGVybWluYXRlLFxuICAgICAgICAgICAgY2hlY2tlZDogQXJyYXkuaXNBcnJheShfdm0ucXVlc3Rpb24uYm9vbGVhblZhbHVlKVxuICAgICAgICAgICAgICA/IF92bS5faShfdm0ucXVlc3Rpb24uYm9vbGVhblZhbHVlLCBfdm0ucXVlc3Rpb24uYm9vbGVhblZhbHVlKSA+XG4gICAgICAgICAgICAgICAgLTFcbiAgICAgICAgICAgICAgOiBfdm0ucXVlc3Rpb24uYm9vbGVhblZhbHVlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgb246IHtcbiAgICAgICAgICAgIGNoYW5nZTogZnVuY3Rpb24gKCRldmVudCkge1xuICAgICAgICAgICAgICB2YXIgJCRhID0gX3ZtLnF1ZXN0aW9uLmJvb2xlYW5WYWx1ZSxcbiAgICAgICAgICAgICAgICAkJGVsID0gJGV2ZW50LnRhcmdldCxcbiAgICAgICAgICAgICAgICAkJGMgPSAkJGVsLmNoZWNrZWQgPyB0cnVlIDogZmFsc2VcbiAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoJCRhKSkge1xuICAgICAgICAgICAgICAgIHZhciAkJHYgPSBfdm0ucXVlc3Rpb24uYm9vbGVhblZhbHVlLFxuICAgICAgICAgICAgICAgICAgJCRpID0gX3ZtLl9pKCQkYSwgJCR2KVxuICAgICAgICAgICAgICAgIGlmICgkJGVsLmNoZWNrZWQpIHtcbiAgICAgICAgICAgICAgICAgICQkaSA8IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgX3ZtLiRzZXQoX3ZtLnF1ZXN0aW9uLCBcImJvb2xlYW5WYWx1ZVwiLCAkJGEuY29uY2F0KFskJHZdKSlcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgJCRpID4gLTEgJiZcbiAgICAgICAgICAgICAgICAgICAgX3ZtLiRzZXQoXG4gICAgICAgICAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgIFwiYm9vbGVhblZhbHVlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgJCRhLnNsaWNlKDAsICQkaSkuY29uY2F0KCQkYS5zbGljZSgkJGkgKyAxKSlcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBfdm0uJHNldChfdm0ucXVlc3Rpb24sIFwiYm9vbGVhblZhbHVlXCIsICQkYylcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgICAgX2MoXG4gICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuY2hlY2tib3hNYXRlcmlhbERlY29yYXRvciB9LFxuICAgICAgICAgIFtcbiAgICAgICAgICAgIF92bS5xdWVzdGlvbi5zdmdJY29uXG4gICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICBcInN2Z1wiLFxuICAgICAgICAgICAgICAgICAgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuY2hlY2tib3hJdGVtRGVjb3JhdG9yIH0sXG4gICAgICAgICAgICAgICAgICBbX2MoXCJ1c2VcIiwgeyBhdHRyczogeyBcInhsaW5rOmhyZWZcIjogX3ZtLnF1ZXN0aW9uLnN2Z0ljb24gfSB9KV1cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICBfYyhcInNwYW5cIiwgeyBzdGF0aWNDbGFzczogXCJjaGVja1wiIH0pLFxuICAgICAgICAgIF1cbiAgICAgICAgKSxcbiAgICAgICAgX3ZtLnF1ZXN0aW9uLmlzTGFiZWxSZW5kZXJlZFxuICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmNoZWNrYm94Q29udHJvbExhYmVsLFxuICAgICAgICAgICAgICAgIGF0dHJzOiB7IGlkOiBfdm0ucXVlc3Rpb24ubGFiZWxSZW5kZXJlZEFyaWFJRCB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgIV92bS5xdWVzdGlvbi5oYXNUaXRsZUFjdGlvbnNcbiAgICAgICAgICAgICAgICAgID8gX2MoXCJzdXJ2ZXktZWxlbWVudC10aXRsZS1jb250ZW50XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBlbGVtZW50OiBfdm0ucXVlc3Rpb24sIGNzczogX3ZtLmNzcyB9LFxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgIF92bS5xdWVzdGlvbi5oYXNUaXRsZUFjdGlvbnNcbiAgICAgICAgICAgICAgICAgID8gX2MoXCJzdi10aXRsZS1hY3Rpb25zXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBlbGVtZW50OiBfdm0ucXVlc3Rpb24sIGNzczogX3ZtLmNzcyB9LFxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBdKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfdm0ucXVlc3Rpb24uY2FuUmVuZGVyTGFiZWxEZXNjcmlwdGlvblxuICAgICAgICA/IF9jKFxuICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NEZXNjcmlwdGlvbiB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfYyhcInN1cnZleS1zdHJpbmdcIiwge1xuICAgICAgICAgICAgICAgIGF0dHJzOiB7IGxvY1N0cmluZzogX3ZtLnF1ZXN0aW9uLmxvY0Rlc2NyaXB0aW9uIH0sXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIDFcbiAgICAgICAgICApXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgXSksXG4gIF0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9ib29sZWFuLXJhZGlvLWl0ZW0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTc4ODlkNWE4JlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL2Jvb2xlYW4tcmFkaW8taXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9Nzg4OWQ1YTgmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiByZW5kZXI7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0YXRpY1JlbmRlckZuczsgfSk7XG52YXIgcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHtcbiAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uZ2V0UmFkaW9JdGVtQ2xhc3MoX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMsIF92bS52YWx1ZSksXG4gICAgICBhdHRyczogeyByb2xlOiBcInByZXNlbnRhdGlvblwiIH0sXG4gICAgfSxcbiAgICBbXG4gICAgICBfYyhcImxhYmVsXCIsIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLnJhZGlvTGFiZWwgfSwgW1xuICAgICAgICBfYyhcImlucHV0XCIsIHtcbiAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaXRlbVJhZGlvQ29udHJvbCxcbiAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgdHlwZTogXCJyYWRpb1wiLFxuICAgICAgICAgICAgbmFtZTogX3ZtLnF1ZXN0aW9uLm5hbWUsXG4gICAgICAgICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjogX3ZtLnF1ZXN0aW9uLmFyaWFEZXNjcmliZWRCeSxcbiAgICAgICAgICAgIGRpc2FibGVkOiBfdm0ucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZG9tUHJvcHM6IHtcbiAgICAgICAgICAgIHZhbHVlOiBfdm0udmFsdWUsXG4gICAgICAgICAgICBjaGVja2VkOiBfdm0udmFsdWUgPT09IF92bS5xdWVzdGlvbi5ib29sZWFuVmFsdWVSZW5kZXJlZCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uOiB7IGNoYW5nZTogX3ZtLmhhbmRsZUNoYW5nZSB9LFxuICAgICAgICB9KSxcbiAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMubWF0ZXJpYWxSYWRpb0RlY29yYXRvclxuICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgICB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5tYXRlcmlhbFJhZGlvRGVjb3JhdG9yIH0sXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24uaXRlbVN2Z0ljb25cbiAgICAgICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICAgICAgXCJzdmdcIixcbiAgICAgICAgICAgICAgICAgICAgICB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pdGVtUmFkaW9EZWNvcmF0b3IgfSxcbiAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICBfYyhcInVzZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IFwieGxpbms6aHJlZlwiOiBfdm0ucXVlc3Rpb24uaXRlbVN2Z0ljb24gfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgIF9jKFxuICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLnJhZGlvQ29udHJvbExhYmVsIH0sXG4gICAgICAgICAgW19jKFwic3VydmV5LXN0cmluZ1wiLCB7IGF0dHJzOiB7IGxvY1N0cmluZzogX3ZtLmxvY1RleHQgfSB9KV0sXG4gICAgICAgICAgMVxuICAgICAgICApLFxuICAgICAgXSksXG4gICAgXVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9ib29sZWFuLXJhZGlvLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00YTIzOGY3OCZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NyYy92dWUvYm9vbGVhbi1yYWRpby52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NGEyMzhmNzgmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwicmVuZGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVuZGVyOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzdGF0aWNSZW5kZXJGbnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdGF0aWNSZW5kZXJGbnM7IH0pO1xudmFyIHJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMucm9vdFJhZGlvIH0sIFtcbiAgICBfYyhcbiAgICAgIFwiZmllbGRzZXRcIixcbiAgICAgIHtcbiAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLnJhZGlvRmllbGRzZXQsXG4gICAgICAgIGF0dHJzOiB7IHJvbGU6IFwicHJlc2VudGF0aW9uXCIgfSxcbiAgICAgIH0sXG4gICAgICBbXG4gICAgICAgIF9jKFwic3YtYm9vbGVhbi1yYWRpby1pdGVtXCIsIHtcbiAgICAgICAgICBrZXk6IGZhbHNlLFxuICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICBxdWVzdGlvbjogX3ZtLnF1ZXN0aW9uLFxuICAgICAgICAgICAgbG9jVGV4dDogX3ZtLnF1ZXN0aW9uLmxvY0xhYmVsRmFsc2UsXG4gICAgICAgICAgICB2YWx1ZTogZmFsc2UsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgIF9jKFwic3YtYm9vbGVhbi1yYWRpby1pdGVtXCIsIHtcbiAgICAgICAgICBrZXk6IHRydWUsXG4gICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgIHF1ZXN0aW9uOiBfdm0ucXVlc3Rpb24sXG4gICAgICAgICAgICBsb2NUZXh0OiBfdm0ucXVlc3Rpb24ubG9jTGFiZWxUcnVlLFxuICAgICAgICAgICAgdmFsdWU6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICBdLFxuICAgICAgMVxuICAgICksXG4gIF0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9ib29sZWFuLXN3aXRjaC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NzBlNGFlYmImXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL3Z1ZS9ib29sZWFuLXN3aXRjaC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NzBlNGFlYmImICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInJlbmRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHJlbmRlcjsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic3RhdGljUmVuZGVyRm5zXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc3RhdGljUmVuZGVyRm5zOyB9KTtcbnZhciByZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAge1xuICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLnJvb3QsXG4gICAgICBvbjoge1xuICAgICAgICBrZXlkb3duOiBmdW5jdGlvbiAoJGV2ZW50KSB7XG4gICAgICAgICAgcmV0dXJuIF92bS5xdWVzdGlvbi5vbktleURvd25Db3JlKCRldmVudClcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBbXG4gICAgICBfYyhcImxhYmVsXCIsIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5nZXRJdGVtQ3NzKCkgfSwgW1xuICAgICAgICBfYyhcImlucHV0XCIsIHtcbiAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6IFwibW9kZWxcIixcbiAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LW1vZGVsXCIsXG4gICAgICAgICAgICAgIHZhbHVlOiBfdm0ucXVlc3Rpb24uYm9vbGVhblZhbHVlLFxuICAgICAgICAgICAgICBleHByZXNzaW9uOiBcInF1ZXN0aW9uLmJvb2xlYW5WYWx1ZVwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jb250cm9sLFxuICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICB0eXBlOiBcImNoZWNrYm94XCIsXG4gICAgICAgICAgICBuYW1lOiBfdm0ucXVlc3Rpb24ubmFtZSxcbiAgICAgICAgICAgIGlkOiBfdm0ucXVlc3Rpb24uaW5wdXRJZCxcbiAgICAgICAgICAgIGRpc2FibGVkOiBfdm0ucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5LFxuICAgICAgICAgICAgXCJhcmlhLXJlcXVpcmVkXCI6IF92bS5xdWVzdGlvbi5hcmlhUmVxdWlyZWQsXG4gICAgICAgICAgICBcImFyaWEtbGFiZWxcIjogX3ZtLnF1ZXN0aW9uLmFyaWFMYWJlbCxcbiAgICAgICAgICAgIFwiYXJpYS1pbnZhbGlkXCI6IF92bS5xdWVzdGlvbi5hcmlhSW52YWxpZCxcbiAgICAgICAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOiBfdm0ucXVlc3Rpb24uYXJpYURlc2NyaWJlZEJ5LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZG9tUHJvcHM6IHtcbiAgICAgICAgICAgIHZhbHVlOiBfdm0ucXVlc3Rpb24uYm9vbGVhblZhbHVlLFxuICAgICAgICAgICAgaW5kZXRlcm1pbmF0ZTogX3ZtLnF1ZXN0aW9uLmlzSW5kZXRlcm1pbmF0ZSxcbiAgICAgICAgICAgIGNoZWNrZWQ6IEFycmF5LmlzQXJyYXkoX3ZtLnF1ZXN0aW9uLmJvb2xlYW5WYWx1ZSlcbiAgICAgICAgICAgICAgPyBfdm0uX2koX3ZtLnF1ZXN0aW9uLmJvb2xlYW5WYWx1ZSwgX3ZtLnF1ZXN0aW9uLmJvb2xlYW5WYWx1ZSkgPlxuICAgICAgICAgICAgICAgIC0xXG4gICAgICAgICAgICAgIDogX3ZtLnF1ZXN0aW9uLmJvb2xlYW5WYWx1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICBjaGFuZ2U6IGZ1bmN0aW9uICgkZXZlbnQpIHtcbiAgICAgICAgICAgICAgdmFyICQkYSA9IF92bS5xdWVzdGlvbi5ib29sZWFuVmFsdWUsXG4gICAgICAgICAgICAgICAgJCRlbCA9ICRldmVudC50YXJnZXQsXG4gICAgICAgICAgICAgICAgJCRjID0gJCRlbC5jaGVja2VkID8gdHJ1ZSA6IGZhbHNlXG4gICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KCQkYSkpIHtcbiAgICAgICAgICAgICAgICB2YXIgJCR2ID0gX3ZtLnF1ZXN0aW9uLmJvb2xlYW5WYWx1ZSxcbiAgICAgICAgICAgICAgICAgICQkaSA9IF92bS5faSgkJGEsICQkdilcbiAgICAgICAgICAgICAgICBpZiAoJCRlbC5jaGVja2VkKSB7XG4gICAgICAgICAgICAgICAgICAkJGkgPCAwICYmXG4gICAgICAgICAgICAgICAgICAgIF92bS4kc2V0KF92bS5xdWVzdGlvbiwgXCJib29sZWFuVmFsdWVcIiwgJCRhLmNvbmNhdChbJCR2XSkpXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICQkaSA+IC0xICYmXG4gICAgICAgICAgICAgICAgICAgIF92bS4kc2V0KFxuICAgICAgICAgICAgICAgICAgICAgIF92bS5xdWVzdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICBcImJvb2xlYW5WYWx1ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICQkYS5zbGljZSgwLCAkJGkpLmNvbmNhdCgkJGEuc2xpY2UoJCRpICsgMSkpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgX3ZtLiRzZXQoX3ZtLnF1ZXN0aW9uLCBcImJvb2xlYW5WYWx1ZVwiLCAkJGMpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgIF9jKFxuICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLnNsaWRlckdob3N0LFxuICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uICgkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLm9uTGFiZWxDbGljaygkZXZlbnQsIGZhbHNlKVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIFtcbiAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmdldExhYmVsQ3NzKGZhbHNlKSB9LFxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHtcbiAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IGxvY1N0cmluZzogX3ZtLnF1ZXN0aW9uLmxvY0xhYmVsRmFsc2UgfSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICBdXG4gICAgICAgICksXG4gICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgIF9jKFxuICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLnN3aXRjaCxcbiAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAoJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF92bS5vblN3aXRjaENsaWNrKCRldmVudClcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBbXG4gICAgICAgICAgICBfYyhcInNwYW5cIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuc2xpZGVyIH0sIFtcbiAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuc2xpZGVyVGV4dCAmJiBfdm0ucXVlc3Rpb24uaXNEZXRlcm1pbmF0ZWRcbiAgICAgICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAgICAgICAgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuc2xpZGVyVGV4dCB9LFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IGxvY1N0cmluZzogX3ZtLnF1ZXN0aW9uLmdldENoZWNrZWRMYWJlbCgpIH0sXG4gICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgXVxuICAgICAgICApLFxuICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICBfYyhcbiAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5zbGlkZXJHaG9zdCxcbiAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAoJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF92bS5vbkxhYmVsQ2xpY2soJGV2ZW50LCB0cnVlKVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIFtcbiAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmdldExhYmVsQ3NzKHRydWUpIH0sXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBfYyhcInN1cnZleS1zdHJpbmdcIiwge1xuICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgbG9jU3RyaW5nOiBfdm0ucXVlc3Rpb24ubG9jTGFiZWxUcnVlIH0sXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICksXG4gICAgICAgICAgXVxuICAgICAgICApLFxuICAgICAgXSksXG4gICAgXVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9idXR0b25ncm91cC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NmJkYzdhYmImXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL3Z1ZS9idXR0b25ncm91cC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NmJkYzdhYmImICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInJlbmRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHJlbmRlcjsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic3RhdGljUmVuZGVyRm5zXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc3RhdGljUmVuZGVyRm5zOyB9KTtcbnZhciByZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMucm9vdCwgYXR0cnM6IHsgcm9sZTogXCJncm91cFwiIH0gfSxcbiAgICBbXG4gICAgICBfdm0uX2woX3ZtLnF1ZXN0aW9uLnZpc2libGVDaG9pY2VzLCBmdW5jdGlvbiAoaXRlbSwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICBfYyhcInN2LWJ1dHRvbi1ncm91cC1pdGVtXCIsIHtcbiAgICAgICAgICAgIGtleTogX3ZtLnF1ZXN0aW9uLmlucHV0SWQgKyBcIl9cIiArIGluZGV4LFxuICAgICAgICAgICAgYXR0cnM6IHsgaXRlbTogaXRlbSwgcXVlc3Rpb246IF92bS5xdWVzdGlvbiwgaW5kZXg6IGluZGV4IH0sXG4gICAgICAgICAgfSksXG4gICAgICAgIF1cbiAgICAgIH0pLFxuICAgIF0sXG4gICAgMlxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9idXR0b25ncm91cGl0ZW0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTRiYWQ2YWNlJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL2J1dHRvbmdyb3VwaXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NGJhZDZhY2UmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiByZW5kZXI7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0YXRpY1JlbmRlckZuczsgfSk7XG52YXIgcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImxhYmVsXCIsXG4gICAge1xuICAgICAgY2xhc3M6IF92bS5tb2RlbC5jc3MubGFiZWwsXG4gICAgICBhdHRyczogeyB0aXRsZTogX3ZtLm1vZGVsLmNhcHRpb24ucmVuZGVyZWRIdG1sIH0sXG4gICAgfSxcbiAgICBbXG4gICAgICBfYyhcImlucHV0XCIsIHtcbiAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwibW9kZWxcIixcbiAgICAgICAgICAgIHJhd05hbWU6IFwidi1tb2RlbFwiLFxuICAgICAgICAgICAgdmFsdWU6IF92bS5tb2RlbC5xdWVzdGlvbi5yZW5kZXJlZFZhbHVlLFxuICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJtb2RlbC5xdWVzdGlvbi5yZW5kZXJlZFZhbHVlXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgY2xhc3M6IF92bS5tb2RlbC5jc3MuY29udHJvbCxcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICB0eXBlOiBcInJhZGlvXCIsXG4gICAgICAgICAgbmFtZTogX3ZtLm1vZGVsLm5hbWUsXG4gICAgICAgICAgaWQ6IF92bS5tb2RlbC5pZCxcbiAgICAgICAgICByb2xlOiBcInJhZGlvXCIsXG4gICAgICAgICAgXCJhcmlhLXJlcXVpcmVkXCI6IF92bS5tb2RlbC5pc1JlcXVpcmVkLFxuICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBfdm0ubW9kZWwuY2FwdGlvbi5yZW5kZXJlZEh0bWwsXG4gICAgICAgICAgXCJhcmlhLWludmFsaWRcIjogX3ZtLm1vZGVsLmhhc0Vycm9ycyxcbiAgICAgICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjogX3ZtLm1vZGVsLmRlc2NyaWJlZEJ5LFxuICAgICAgICAgIGRpc2FibGVkOiBfdm0ubW9kZWwucmVhZE9ubHksXG4gICAgICAgIH0sXG4gICAgICAgIGRvbVByb3BzOiB7XG4gICAgICAgICAgdmFsdWU6IF92bS5tb2RlbC52YWx1ZSxcbiAgICAgICAgICBjaGVja2VkOiBfdm0uX3EoX3ZtLm1vZGVsLnF1ZXN0aW9uLnJlbmRlcmVkVmFsdWUsIF92bS5tb2RlbC52YWx1ZSksXG4gICAgICAgIH0sXG4gICAgICAgIG9uOiB7XG4gICAgICAgICAgY2hhbmdlOiBmdW5jdGlvbiAoJGV2ZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gX3ZtLiRzZXQoXG4gICAgICAgICAgICAgIF92bS5tb2RlbC5xdWVzdGlvbixcbiAgICAgICAgICAgICAgXCJyZW5kZXJlZFZhbHVlXCIsXG4gICAgICAgICAgICAgIF92bS5tb2RlbC52YWx1ZVxuICAgICAgICAgICAgKVxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcbiAgICAgICAgXCJkaXZcIixcbiAgICAgICAgeyBjbGFzczogX3ZtLm1vZGVsLmNzcy5kZWNvcmF0b3IgfSxcbiAgICAgICAgW1xuICAgICAgICAgICEhX3ZtLm1vZGVsLmljb25OYW1lXG4gICAgICAgICAgICA/IF9jKFwic3Ytc3ZnLWljb25cIiwge1xuICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0ubW9kZWwuY3NzLmljb24sXG4gICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgIGljb25OYW1lOiBfdm0ubW9kZWwuaWNvbk5hbWUsXG4gICAgICAgICAgICAgICAgICBzaXplOiBfdm0ubW9kZWwuaWNvblNpemUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICBfdm0ubW9kZWwuc2hvd0NhcHRpb25cbiAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICAgICAgeyBjbGFzczogX3ZtLm1vZGVsLmNzcy5jYXB0aW9uIH0sXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgbG9jU3RyaW5nOiBfdm0ubW9kZWwuY2FwdGlvbiB9LFxuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgIF0sXG4gICAgICAgIDFcbiAgICAgICksXG4gICAgXVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9jaGVja2JveC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9Y2FkMjc2ZjYmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL3Z1ZS9jaGVja2JveC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9Y2FkMjc2ZjYmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInJlbmRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHJlbmRlcjsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic3RhdGljUmVuZGVyRm5zXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc3RhdGljUmVuZGVyRm5zOyB9KTtcbnZhciByZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZmllbGRzZXRcIixcbiAgICB7XG4gICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmdldFNlbGVjdEJhc2VSb290Q3NzKCksXG4gICAgICBhdHRyczoge1xuICAgICAgICByb2xlOiBfdm0ucXVlc3Rpb24uYTExeV9pbnB1dF9hcmlhUm9sZSxcbiAgICAgICAgXCJhcmlhLXJlcXVpcmVkXCI6IF92bS5xdWVzdGlvbi5hMTF5X2lucHV0X2FyaWFSZXF1aXJlZCxcbiAgICAgICAgXCJhcmlhLWxhYmVsXCI6IF92bS5xdWVzdGlvbi5hMTF5X2lucHV0X2FyaWFMYWJlbCxcbiAgICAgICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogX3ZtLnF1ZXN0aW9uLmExMXlfaW5wdXRfYXJpYUxhYmVsbGVkQnksXG4gICAgICAgIFwiYXJpYS1pbnZhbGlkXCI6IF92bS5xdWVzdGlvbi5hMTF5X2lucHV0X2FyaWFJbnZhbGlkLFxuICAgICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjogX3ZtLnF1ZXN0aW9uLmExMXlfaW5wdXRfYXJpYURlc2NyaWJlZEJ5LFxuICAgICAgfSxcbiAgICB9LFxuICAgIFtcbiAgICAgIF9jKFwibGVnZW5kXCIsIHtcbiAgICAgICAgc3RhdGljQ2xhc3M6IFwic3YtaGlkZGVuXCIsXG4gICAgICAgIGF0dHJzOiB7IHJvbGU6IFwicHJlc2VudGF0aW9uXCIgfSxcbiAgICAgIH0pLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF92bS5fbChfdm0ucXVlc3Rpb24uaGVhZEl0ZW1zLCBmdW5jdGlvbiAoaXRlbSwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIF92bS5xdWVzdGlvbi5oYXNIZWFkSXRlbXNcbiAgICAgICAgICA/IF9jKFwic3VydmV5LWNoZWNrYm94LWl0ZW1cIiwge1xuICAgICAgICAgICAgICBrZXk6IGl0ZW0udmFsdWUsXG4gICAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uZ2V0SXRlbUNsYXNzKGl0ZW0pLFxuICAgICAgICAgICAgICBhdHRyczogeyBxdWVzdGlvbjogX3ZtLnF1ZXN0aW9uLCBpdGVtOiBpdGVtLCBpbmRleDogXCJcIiArIGluZGV4IH0sXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgIH0pLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF92bS5fbChfdm0ucXVlc3Rpb24uYm9keUl0ZW1zLCBmdW5jdGlvbiAoaXRlbSwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuICFfdm0ucXVlc3Rpb24uaGFzQ29sdW1ucyAmJiAhX3ZtLnF1ZXN0aW9uLmJsb2NrZWRSb3dcbiAgICAgICAgICA/IF9jKFwic3VydmV5LWNoZWNrYm94LWl0ZW1cIiwge1xuICAgICAgICAgICAgICBrZXk6IGl0ZW0udmFsdWUsXG4gICAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uZ2V0SXRlbUNsYXNzKGl0ZW0pLFxuICAgICAgICAgICAgICBhdHRyczogeyBxdWVzdGlvbjogX3ZtLnF1ZXN0aW9uLCBpdGVtOiBpdGVtLCBpbmRleDogaW5kZXggfSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgfSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLnF1ZXN0aW9uLmJsb2NrZWRSb3dcbiAgICAgICAgPyBfYyhcbiAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yb290Um93IH0sXG4gICAgICAgICAgICBfdm0uX2woX3ZtLnF1ZXN0aW9uLmRhdGFDaG9pY2VzLCBmdW5jdGlvbiAoaXRlbSwgaW5kZXgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuICFfdm0ucXVlc3Rpb24uaGFzQ29sdW1ucyAmJiBfdm0ucXVlc3Rpb24uYmxvY2tlZFJvd1xuICAgICAgICAgICAgICAgID8gX2MoXCJzdXJ2ZXktY2hlY2tib3gtaXRlbVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIGtleTogaXRlbS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5nZXRJdGVtQ2xhc3MoaXRlbSksXG4gICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHF1ZXN0aW9uOiBfdm0ucXVlc3Rpb24sIGl0ZW06IGl0ZW0sIGluZGV4OiBpbmRleCB9LFxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIDFcbiAgICAgICAgICApXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLnF1ZXN0aW9uLmhhc0NvbHVtbnNcbiAgICAgICAgPyBfYyhcbiAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yb290TXVsdGlDb2x1bW4gfSxcbiAgICAgICAgICAgIF92bS5fbChfdm0ucXVlc3Rpb24uY29sdW1ucywgZnVuY3Rpb24gKGNvbHVtbiwgY29sSW5kZXgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIF9jKFxuICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5nZXRDb2x1bW5DbGFzcygpLFxuICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgcm9sZTogXCJwcmVzZW50YXRpb25cIiB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgX3ZtLl9sKGNvbHVtbiwgZnVuY3Rpb24gKGl0ZW0sIGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gX2MoXCJzdXJ2ZXktY2hlY2tib3gtaXRlbVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIGtleTogaXRlbS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5nZXRJdGVtQ2xhc3MoaXRlbSksXG4gICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb246IF92bS5xdWVzdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICBpdGVtOiBpdGVtLFxuICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBcIlwiICsgY29sSW5kZXggKyBpbmRleCxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIDBcbiAgICAgICAgICApXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLl9sKF92bS5xdWVzdGlvbi5mb290SXRlbXMsIGZ1bmN0aW9uIChpdGVtLCBpbmRleCkge1xuICAgICAgICByZXR1cm4gX3ZtLnF1ZXN0aW9uLmhhc0Zvb3RJdGVtc1xuICAgICAgICAgID8gX2MoXCJzdXJ2ZXktY2hlY2tib3gtaXRlbVwiLCB7XG4gICAgICAgICAgICAgIGtleTogaXRlbS52YWx1ZSxcbiAgICAgICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5nZXRJdGVtQ2xhc3MoaXRlbSksXG4gICAgICAgICAgICAgIGF0dHJzOiB7IHF1ZXN0aW9uOiBfdm0ucXVlc3Rpb24sIGl0ZW06IGl0ZW0sIGluZGV4OiBcIlwiICsgaW5kZXggfSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgfSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLnF1ZXN0aW9uLnJlbmRlcmVkVmFsdWUgJiYgX3ZtLnF1ZXN0aW9uLmlzT3RoZXJTZWxlY3RlZFxuICAgICAgICA/IF9jKFwic3VydmV5LW90aGVyLWNob2ljZVwiLCB7IGF0dHJzOiB7IHF1ZXN0aW9uOiBfdm0ucXVlc3Rpb24gfSB9KVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgIF0sXG4gICAgMlxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9jaGVja2JveGl0ZW0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWM1OGM4MGQwJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL2NoZWNrYm94aXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9YzU4YzgwZDAmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiByZW5kZXI7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0YXRpY1JlbmRlckZuczsgfSk7XG52YXIgcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcImRpdlwiLCB7IGF0dHJzOiB7IHJvbGU6IFwicHJlc2VudGF0aW9uXCIgfSB9LCBbXG4gICAgX2MoXCJsYWJlbFwiLCB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uZ2V0TGFiZWxDbGFzcyhfdm0uaXRlbSkgfSwgW1xuICAgICAgX3ZtLml0ZW0gPT0gX3ZtLnF1ZXN0aW9uLnNlbGVjdEFsbEl0ZW1cbiAgICAgICAgPyBfYyhcImlucHV0XCIsIHtcbiAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6IFwibW9kZWxcIixcbiAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtbW9kZWxcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLmlzQWxsU2VsZWN0ZWQsXG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJpc0FsbFNlbGVjdGVkXCIsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLml0ZW1Db250cm9sLFxuICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgdHlwZTogXCJjaGVja2JveFwiLFxuICAgICAgICAgICAgICBuYW1lOiBfdm0ucXVlc3Rpb24ubmFtZSxcbiAgICAgICAgICAgICAgaWQ6IF92bS5xdWVzdGlvbi5nZXRJdGVtSWQoX3ZtLml0ZW0pLFxuICAgICAgICAgICAgICBkaXNhYmxlZDogIV92bS5xdWVzdGlvbi5nZXRJdGVtRW5hYmxlZChfdm0uaXRlbSksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZG9tUHJvcHM6IHtcbiAgICAgICAgICAgICAgdmFsdWU6IF92bS5pc0FsbFNlbGVjdGVkLFxuICAgICAgICAgICAgICBjaGVja2VkOiBBcnJheS5pc0FycmF5KF92bS5pc0FsbFNlbGVjdGVkKVxuICAgICAgICAgICAgICAgID8gX3ZtLl9pKF92bS5pc0FsbFNlbGVjdGVkLCBfdm0uaXNBbGxTZWxlY3RlZCkgPiAtMVxuICAgICAgICAgICAgICAgIDogX3ZtLmlzQWxsU2VsZWN0ZWQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgY2hhbmdlOiBmdW5jdGlvbiAoJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgdmFyICQkYSA9IF92bS5pc0FsbFNlbGVjdGVkLFxuICAgICAgICAgICAgICAgICAgJCRlbCA9ICRldmVudC50YXJnZXQsXG4gICAgICAgICAgICAgICAgICAkJGMgPSAkJGVsLmNoZWNrZWQgPyB0cnVlIDogZmFsc2VcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSgkJGEpKSB7XG4gICAgICAgICAgICAgICAgICB2YXIgJCR2ID0gX3ZtLmlzQWxsU2VsZWN0ZWQsXG4gICAgICAgICAgICAgICAgICAgICQkaSA9IF92bS5faSgkJGEsICQkdilcbiAgICAgICAgICAgICAgICAgIGlmICgkJGVsLmNoZWNrZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgJCRpIDwgMCAmJiAoX3ZtLmlzQWxsU2VsZWN0ZWQgPSAkJGEuY29uY2F0KFskJHZdKSlcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICQkaSA+IC0xICYmXG4gICAgICAgICAgICAgICAgICAgICAgKF92bS5pc0FsbFNlbGVjdGVkID0gJCRhXG4gICAgICAgICAgICAgICAgICAgICAgICAuc2xpY2UoMCwgJCRpKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdCgkJGEuc2xpY2UoJCRpICsgMSkpKVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBfdm0uaXNBbGxTZWxlY3RlZCA9ICQkY1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfdm0uaXRlbSAhPSBfdm0ucXVlc3Rpb24uc2VsZWN0QWxsSXRlbVxuICAgICAgICA/IF9jKFwiaW5wdXRcIiwge1xuICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJtb2RlbFwiLFxuICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1tb2RlbFwiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0ucXVlc3Rpb24ucmVuZGVyZWRWYWx1ZSxcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcInF1ZXN0aW9uLnJlbmRlcmVkVmFsdWVcIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaXRlbUNvbnRyb2wsXG4gICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICB0eXBlOiBcImNoZWNrYm94XCIsXG4gICAgICAgICAgICAgIG5hbWU6IF92bS5xdWVzdGlvbi5uYW1lLFxuICAgICAgICAgICAgICBpZDogX3ZtLnF1ZXN0aW9uLmdldEl0ZW1JZChfdm0uaXRlbSksXG4gICAgICAgICAgICAgIGRpc2FibGVkOiAhX3ZtLnF1ZXN0aW9uLmdldEl0ZW1FbmFibGVkKF92bS5pdGVtKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkb21Qcm9wczoge1xuICAgICAgICAgICAgICB2YWx1ZTogX3ZtLml0ZW0udmFsdWUsXG4gICAgICAgICAgICAgIGNoZWNrZWQ6IEFycmF5LmlzQXJyYXkoX3ZtLnF1ZXN0aW9uLnJlbmRlcmVkVmFsdWUpXG4gICAgICAgICAgICAgICAgPyBfdm0uX2koX3ZtLnF1ZXN0aW9uLnJlbmRlcmVkVmFsdWUsIF92bS5pdGVtLnZhbHVlKSA+IC0xXG4gICAgICAgICAgICAgICAgOiBfdm0ucXVlc3Rpb24ucmVuZGVyZWRWYWx1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICBjaGFuZ2U6IGZ1bmN0aW9uICgkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICB2YXIgJCRhID0gX3ZtLnF1ZXN0aW9uLnJlbmRlcmVkVmFsdWUsXG4gICAgICAgICAgICAgICAgICAkJGVsID0gJGV2ZW50LnRhcmdldCxcbiAgICAgICAgICAgICAgICAgICQkYyA9ICQkZWwuY2hlY2tlZCA/IHRydWUgOiBmYWxzZVxuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KCQkYSkpIHtcbiAgICAgICAgICAgICAgICAgIHZhciAkJHYgPSBfdm0uaXRlbS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgJCRpID0gX3ZtLl9pKCQkYSwgJCR2KVxuICAgICAgICAgICAgICAgICAgaWYgKCQkZWwuY2hlY2tlZCkge1xuICAgICAgICAgICAgICAgICAgICAkJGkgPCAwICYmXG4gICAgICAgICAgICAgICAgICAgICAgX3ZtLiRzZXQoX3ZtLnF1ZXN0aW9uLCBcInJlbmRlcmVkVmFsdWVcIiwgJCRhLmNvbmNhdChbJCR2XSkpXG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAkJGkgPiAtMSAmJlxuICAgICAgICAgICAgICAgICAgICAgIF92bS4kc2V0KFxuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJyZW5kZXJlZFZhbHVlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAkJGEuc2xpY2UoMCwgJCRpKS5jb25jYXQoJCRhLnNsaWNlKCQkaSArIDEpKVxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgX3ZtLiRzZXQoX3ZtLnF1ZXN0aW9uLCBcInJlbmRlcmVkVmFsdWVcIiwgJCRjKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgIF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLm1hdGVyaWFsRGVjb3JhdG9yXG4gICAgICAgID8gX2MoXCJzcGFuXCIsIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLm1hdGVyaWFsRGVjb3JhdG9yIH0sIFtcbiAgICAgICAgICAgIF92bS5xdWVzdGlvbi5pdGVtU3ZnSWNvblxuICAgICAgICAgICAgICA/IF9jKFwic3ZnXCIsIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLml0ZW1EZWNvcmF0b3IgfSwgW1xuICAgICAgICAgICAgICAgICAgX2MoXCJ1c2VcIiwge1xuICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBcInhsaW5rOmhyZWZcIjogX3ZtLnF1ZXN0aW9uLml0ZW1TdmdJY29uIH0sXG4gICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgIF0pXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAhX3ZtLmhpZGVMYWJlbFxuICAgICAgICA/IF9jKFxuICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jb250cm9sTGFiZWwgfSxcbiAgICAgICAgICAgIFtfYyhcInN1cnZleS1zdHJpbmdcIiwgeyBhdHRyczogeyBsb2NTdHJpbmc6IF92bS5pdGVtLmxvY1RleHQgfSB9KV0sXG4gICAgICAgICAgICAxXG4gICAgICAgICAgKVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgIF0pLFxuICBdKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvY29tbWVudC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MDk5YzJjOGQmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL2NvbW1lbnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTA5OWMyYzhkJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInJlbmRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHJlbmRlcjsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic3RhdGljUmVuZGVyRm5zXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc3RhdGljUmVuZGVyRm5zOyB9KTtcbnZhciByZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuICFfdm0ucXVlc3Rpb24uaXNSZWFkT25seVJlbmRlckRpdigpICYmICFfdm0ucXVlc3Rpb24uZ2V0TWF4TGVuZ3RoKClcbiAgICA/IF9jKFwidGV4dGFyZWFcIiwge1xuICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNsYXNzTmFtZSxcbiAgICAgICAgc3R5bGU6IHsgcmVzaXplOiBfdm0ucXVlc3Rpb24ucmVzaXplU3R5bGUgfSxcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICByZWFkb25seTogX3ZtLnF1ZXN0aW9uLmlzSW5wdXRSZWFkT25seSxcbiAgICAgICAgICBkaXNhYmxlZDogX3ZtLnF1ZXN0aW9uLnJlbmRlcmVkSW5wdXREaXNhYmxlZCxcbiAgICAgICAgICBpZDogX3ZtLnF1ZXN0aW9uLmlucHV0SWQsXG4gICAgICAgICAgbWF4bGVuZ3RoOiBfdm0ucXVlc3Rpb24uZ2V0TWF4TGVuZ3RoKCksXG4gICAgICAgICAgY29sczogX3ZtLnF1ZXN0aW9uLmNvbHMsXG4gICAgICAgICAgcm93czogX3ZtLnF1ZXN0aW9uLnJvd3MsXG4gICAgICAgICAgcGxhY2Vob2xkZXI6IF92bS5xdWVzdGlvbi5yZW5kZXJlZFBsYWNlaG9sZGVyLFxuICAgICAgICAgIFwiYXJpYS1yZXF1aXJlZFwiOiBfdm0ucXVlc3Rpb24uYTExeV9pbnB1dF9hcmlhUmVxdWlyZWQsXG4gICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IF92bS5xdWVzdGlvbi5hMTF5X2lucHV0X2FyaWFMYWJlbCxcbiAgICAgICAgICBcImFyaWEtbGFiZWxsZWRieVwiOiBfdm0ucXVlc3Rpb24uYTExeV9pbnB1dF9hcmlhTGFiZWxsZWRCeSxcbiAgICAgICAgICBcImFyaWEtaW52YWxpZFwiOiBfdm0ucXVlc3Rpb24uYTExeV9pbnB1dF9hcmlhSW52YWxpZCxcbiAgICAgICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjogX3ZtLnF1ZXN0aW9uLmExMXlfaW5wdXRfYXJpYURlc2NyaWJlZEJ5LFxuICAgICAgICB9LFxuICAgICAgICBkb21Qcm9wczogeyB2YWx1ZTogX3ZtLnF1ZXN0aW9uLnZhbHVlIH0sXG4gICAgICAgIG9uOiB7XG4gICAgICAgICAgY2hhbmdlOiBfdm0uY2hhbmdlLFxuICAgICAgICAgIGlucHV0OiBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLm9uSW5wdXQoZSlcbiAgICAgICAgICB9LFxuICAgICAgICAgIGtleWRvd246IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICBfdm0ucXVlc3Rpb24ub25LZXlEb3duKGUpXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgOiAhX3ZtLnF1ZXN0aW9uLmlzUmVhZE9ubHlSZW5kZXJEaXYoKSAmJiBfdm0ucXVlc3Rpb24uZ2V0TWF4TGVuZ3RoKClcbiAgICA/IF9jKFxuICAgICAgICBcImRpdlwiLFxuICAgICAgICBbXG4gICAgICAgICAgX2MoXCJ0ZXh0YXJlYVwiLCB7XG4gICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNsYXNzTmFtZSxcbiAgICAgICAgICAgIHN0eWxlOiB7IHJlc2l6ZTogX3ZtLnF1ZXN0aW9uLnJlc2l6ZVN0eWxlIH0sXG4gICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICByZWFkb25seTogX3ZtLnF1ZXN0aW9uLmlzSW5wdXRSZWFkT25seSxcbiAgICAgICAgICAgICAgZGlzYWJsZWQ6IF92bS5xdWVzdGlvbi5yZW5kZXJlZElucHV0RGlzYWJsZWQsXG4gICAgICAgICAgICAgIGlkOiBfdm0ucXVlc3Rpb24uaW5wdXRJZCxcbiAgICAgICAgICAgICAgbWF4bGVuZ3RoOiBfdm0ucXVlc3Rpb24uZ2V0TWF4TGVuZ3RoKCksXG4gICAgICAgICAgICAgIGNvbHM6IF92bS5xdWVzdGlvbi5jb2xzLFxuICAgICAgICAgICAgICByb3dzOiBfdm0ucXVlc3Rpb24ucm93cyxcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IF92bS5xdWVzdGlvbi5yZW5kZXJlZFBsYWNlaG9sZGVyLFxuICAgICAgICAgICAgICBcImFyaWEtcmVxdWlyZWRcIjogX3ZtLnF1ZXN0aW9uLmExMXlfaW5wdXRfYXJpYVJlcXVpcmVkLFxuICAgICAgICAgICAgICBcImFyaWEtbGFiZWxcIjogX3ZtLnF1ZXN0aW9uLmExMXlfaW5wdXRfYXJpYUxhYmVsLFxuICAgICAgICAgICAgICBcImFyaWEtbGFiZWxsZWRieVwiOiBfdm0ucXVlc3Rpb24uYTExeV9pbnB1dF9hcmlhTGFiZWxsZWRCeSxcbiAgICAgICAgICAgICAgXCJhcmlhLWludmFsaWRcIjogX3ZtLnF1ZXN0aW9uLmExMXlfaW5wdXRfYXJpYUludmFsaWQsXG4gICAgICAgICAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOiBfdm0ucXVlc3Rpb24uYTExeV9pbnB1dF9hcmlhRGVzY3JpYmVkQnksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZG9tUHJvcHM6IHsgdmFsdWU6IF92bS5xdWVzdGlvbi52YWx1ZSB9LFxuICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgY2hhbmdlOiBfdm0uY2hhbmdlLFxuICAgICAgICAgICAgICBpbnB1dDogZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24ub25JbnB1dChlKVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBrZXlkb3duOiBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgIF92bS5xdWVzdGlvbi5vbktleURvd24oZSlcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICBfYyhcInN2LWNoYXJhY3Rlci1jb3VudGVyXCIsIHtcbiAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgIGNvdW50ZXI6IF92bS5xdWVzdGlvbi5jaGFyYWN0ZXJDb3VudGVyLFxuICAgICAgICAgICAgICByZW1haW5pbmdDaGFyYWN0ZXJDb3VudGVyOlxuICAgICAgICAgICAgICAgIF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLnJlbWFpbmluZ0NoYXJhY3RlckNvdW50ZXIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pLFxuICAgICAgICBdLFxuICAgICAgICAxXG4gICAgICApXG4gICAgOiBfYyhcImRpdlwiLCBbX3ZtLl92KF92bS5fcyhfdm0ucXVlc3Rpb24udmFsdWUpKV0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLWJhci1pdGVtLWRyb3Bkb3duLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00Y2E0ZjI3NiZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NyYy92dWUvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXItaXRlbS1kcm9wZG93bi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NGNhNGYyNzYmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwicmVuZGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVuZGVyOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzdGF0aWNSZW5kZXJGbnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdGF0aWNSZW5kZXJGbnM7IH0pO1xudmFyIHJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICB7IHN0YXRpY1N0eWxlOiB7IHdpZHRoOiBcIjEwMCVcIiB9IH0sXG4gICAgW1xuICAgICAgX2MoXG4gICAgICAgIFwiYnV0dG9uXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBjbGFzczogX3ZtLml0ZW0uZ2V0QWN0aW9uQmFySXRlbUNzcygpLFxuICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgICAgICAgZGlzYWJsZWQ6IF92bS5pdGVtLmVuYWJsZWQgIT09IHVuZGVmaW5lZCAmJiBfdm0uaXRlbS5lbmFibGVkLFxuICAgICAgICAgICAgdGl0bGU6IF92bS5pdGVtLnRvb2x0aXAgfHwgX3ZtLml0ZW0udGl0bGUsXG4gICAgICAgICAgICByb2xlOiBfdm0uaXRlbS5hcmlhUm9sZSxcbiAgICAgICAgICAgIHRhYmluZGV4OiBfdm0uaXRlbS5kaXNhYmxlVGFiU3RvcCA/IC0xIDogMCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKGFyZ3MpIHtcbiAgICAgICAgICAgICAgX3ZtLml0ZW0uYWN0aW9uKF92bS5pdGVtLCAhIWFyZ3MucG9pbnRlclR5cGUpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAga2V5dXA6IGZ1bmN0aW9uIChldnQpIHtcbiAgICAgICAgICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIFtcbiAgICAgICAgICBfdm0uaXRlbS5pY29uTmFtZVxuICAgICAgICAgICAgPyBfYyhcInN2LXN2Zy1pY29uXCIsIHtcbiAgICAgICAgICAgICAgICBjbGFzczogX3ZtLml0ZW0uY3NzQ2xhc3Nlcy5pdGVtSWNvbixcbiAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgaWNvbk5hbWU6IF92bS5pdGVtLmljb25OYW1lLFxuICAgICAgICAgICAgICAgICAgc2l6ZTogX3ZtLml0ZW0uaWNvblNpemUsXG4gICAgICAgICAgICAgICAgICB0aXRsZTogX3ZtLml0ZW0udG9vbHRpcCB8fCBfdm0uaXRlbS50aXRsZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgIF92bS5pdGVtLmhhc1RpdGxlXG4gICAgICAgICAgICA/IF9jKFwic3BhblwiLCB7IGNsYXNzOiBfdm0uaXRlbS5nZXRBY3Rpb25CYXJJdGVtVGl0bGVDc3MoKSB9LCBbXG4gICAgICAgICAgICAgICAgX3ZtLl92KF92bS5fcyhfdm0uaXRlbS50aXRsZSkpLFxuICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgXSxcbiAgICAgICAgMVxuICAgICAgKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcInN2LXBvcHVwXCIsIHtcbiAgICAgICAgYXR0cnM6IHsgbW9kZWw6IF92bS5pdGVtLnBvcHVwTW9kZWwsIGdldFRhcmdldDogX3ZtLmdldFRhcmdldCB9LFxuICAgICAgfSksXG4gICAgXSxcbiAgICAxXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24tYmFyLWl0ZW0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTQwYTA1NmY4JlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL3Z1ZS9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLWJhci1pdGVtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00MGEwNTZmOCYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiByZW5kZXI7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0YXRpY1JlbmRlckZuczsgfSk7XG52YXIgcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImJ1dHRvblwiLFxuICAgIHtcbiAgICAgIGNsYXNzOiBfdm0uaXRlbS5nZXRBY3Rpb25CYXJJdGVtQ3NzKCksXG4gICAgICBhdHRyczoge1xuICAgICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgICBkaXNhYmxlZDogX3ZtLml0ZW0uZW5hYmxlZCAhPT0gdW5kZWZpbmVkICYmICFfdm0uaXRlbS5lbmFibGVkLFxuICAgICAgICB0aXRsZTogX3ZtLml0ZW0udG9vbHRpcCB8fCBfdm0uaXRlbS50aXRsZSxcbiAgICAgICAgXCJhcmlhLWNoZWNrZWRcIjogX3ZtLml0ZW0uYXJpYUNoZWNrZWQsXG4gICAgICAgIFwiYXJpYS1leHBhbmRlZFwiOiBfdm0uaXRlbS5hcmlhRXhwYW5kZWQsXG4gICAgICAgIHJvbGU6IF92bS5pdGVtLmFyaWFSb2xlLFxuICAgICAgICB0YWJpbmRleDogX3ZtLml0ZW0uZGlzYWJsZVRhYlN0b3AgPyAtMSA6IDAsXG4gICAgICB9LFxuICAgICAgb246IHtcbiAgICAgICAgY2xpY2s6IGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgX3ZtLml0ZW0uYWN0aW9uKF92bS5pdGVtLCAhIWFyZ3MucG9pbnRlclR5cGUpXG4gICAgICAgIH0sXG4gICAgICAgIGtleXVwOiBmdW5jdGlvbiAoZXZ0KSB7XG4gICAgICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gICAgW1xuICAgICAgX3ZtLml0ZW0uaWNvbk5hbWVcbiAgICAgICAgPyBfYyhcInN2LXN2Zy1pY29uXCIsIHtcbiAgICAgICAgICAgIGNsYXNzOiBfdm0uaXRlbS5jc3NDbGFzc2VzLml0ZW1JY29uLFxuICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgaWNvbk5hbWU6IF92bS5pdGVtLmljb25OYW1lLFxuICAgICAgICAgICAgICBzaXplOiBfdm0uaXRlbS5pY29uU2l6ZSxcbiAgICAgICAgICAgICAgdGl0bGU6IF92bS5pdGVtLnRvb2x0aXAgfHwgX3ZtLml0ZW0udGl0bGUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLml0ZW0uaGFzVGl0bGVcbiAgICAgICAgPyBfYyhcInNwYW5cIiwgeyBjbGFzczogX3ZtLml0ZW0uZ2V0QWN0aW9uQmFySXRlbVRpdGxlQ3NzKCkgfSwgW1xuICAgICAgICAgICAgX3ZtLl92KF92bS5fcyhfdm0uaXRlbS50aXRsZSkpLFxuICAgICAgICAgIF0pXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgXSxcbiAgICAxXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24tYmFyLXNlcGFyYXRvci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MWFhYjY4NTAmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NyYy92dWUvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXItc2VwYXJhdG9yLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xYWFiNjg1MCYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInJlbmRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHJlbmRlcjsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic3RhdGljUmVuZGVyRm5zXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc3RhdGljUmVuZGVyRm5zOyB9KTtcbnZhciByZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFwiZGl2XCIsIHtcbiAgICBzdGF0aWNDbGFzczogXCJzdi1hY3Rpb24tYmFyLXNlcGFyYXRvclwiLFxuICAgIGNsYXNzOiBfdm0uaW5uZXJDc3MsXG4gIH0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLWJhci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MzEzYmYyMTAmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL3Z1ZS9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLWJhci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MzEzYmYyMTAmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInJlbmRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHJlbmRlcjsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic3RhdGljUmVuZGVyRm5zXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc3RhdGljUmVuZGVyRm5zOyB9KTtcbnZhciByZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF92bS5tb2RlbC5oYXNBY3Rpb25zXG4gICAgPyBfYyhcbiAgICAgICAgXCJkaXZcIixcbiAgICAgICAge1xuICAgICAgICAgIHJlZjogXCJjb250YWluZXJcIixcbiAgICAgICAgICBjbGFzczogX3ZtLm1vZGVsLmdldFJvb3RDc3MoKSxcbiAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBfdm0uX2woX3ZtLm1vZGVsLnJlbmRlcmVkQWN0aW9ucywgZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICByZXR1cm4gX2MoXCJzdi1hY3Rpb25cIiwgeyBrZXk6IGl0ZW0uaWQsIGF0dHJzOiB7IGl0ZW06IGl0ZW0gfSB9KVxuICAgICAgICB9KSxcbiAgICAgICAgMVxuICAgICAgKVxuICAgIDogX3ZtLl9lKClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTJmZTU0NjMyJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL3Z1ZS9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yZmU1NDYzMiYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiByZW5kZXI7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0YXRpY1JlbmRlckZuczsgfSk7XG52YXIgcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHsgY2xhc3M6IF92bS5pdGVtLmdldEFjdGlvblJvb3RDc3MoKSwgYXR0cnM6IHsgaWQ6IF92bS5pdGVtLmlkIH0gfSxcbiAgICBbXG4gICAgICBfYyhcbiAgICAgICAgXCJkaXZcIixcbiAgICAgICAgeyBzdGF0aWNDbGFzczogXCJzdi1hY3Rpb25fX2NvbnRlbnRcIiB9LFxuICAgICAgICBbXG4gICAgICAgICAgX3ZtLml0ZW0ubmVlZFNlcGFyYXRvciA/IF9jKFwic3YtYWN0aW9uLWJhci1zZXBhcmF0b3JcIikgOiBfdm0uX2UoKSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgIF9jKF92bS5nZXRDb21wb25lbnROYW1lKCksIHtcbiAgICAgICAgICAgIHRhZzogXCJjb21wb25lbnRcIixcbiAgICAgICAgICAgIGF0dHJzOiB7IGl0ZW06IF92bS5pdGVtIH0sXG4gICAgICAgICAgfSksXG4gICAgICAgIF0sXG4gICAgICAgIDFcbiAgICAgICksXG4gICAgXVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9jb21wb25lbnRzL2JyYW5kLWluZm8udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTI2MTZiNDdiJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL2NvbXBvbmVudHMvYnJhbmQtaW5mby52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MjYxNmI0N2ImICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiByZW5kZXI7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0YXRpY1JlbmRlckZuczsgfSk7XG52YXIgcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfdm0uX20oMClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXG4gIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgX3ZtID0gdGhpc1xuICAgIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICAgIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICAgIHJldHVybiBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcInN2LWJyYW5kLWluZm9cIiB9LCBbXG4gICAgICBfYyhcbiAgICAgICAgXCJhXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdGF0aWNDbGFzczogXCJzdi1icmFuZC1pbmZvX19sb2dvXCIsXG4gICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgIGhyZWY6IFwiaHR0cHM6Ly9zdXJ2ZXlqcy5pby8/dXRtX3NvdXJjZT1idWlsdC1pbl9saW5rcyZ1dG1fbWVkaXVtPW9ubGluZV9zdXJ2ZXlfdG9vbCZ1dG1fY2FtcGFpZ249bGFuZGluZ19wYWdlXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF9jKFwiaW1nXCIsIHtcbiAgICAgICAgICAgIGF0dHJzOiB7IHNyYzogXCJodHRwczovL3N1cnZleWpzLmlvL0NvbnRlbnQvSW1hZ2VzL3Bvd2VyZWRieS5zdmdcIiB9LFxuICAgICAgICAgIH0pLFxuICAgICAgICBdXG4gICAgICApLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwic3YtYnJhbmQtaW5mb19fdGV4dFwiIH0sIFtcbiAgICAgICAgX3ZtLl92KFwiVHJ5IGFuZCBzZWUgaG93IGVhc3kgaXQgaXMgdG8gXCIpLFxuICAgICAgICBfYyhcbiAgICAgICAgICBcImFcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICBocmVmOiBcImh0dHBzOi8vc3VydmV5anMuaW8vY3JlYXRlLXN1cnZleT91dG1fc291cmNlPWJ1aWx0LWluX2xpbmtzJnV0bV9tZWRpdW09b25saW5lX3N1cnZleV90b29sJnV0bV9jYW1wYWlnbj1jcmVhdGVfc3VydmV5XCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgW192bS5fdihcImNyZWF0ZSBhIHN1cnZleVwiKV1cbiAgICAgICAgKSxcbiAgICAgIF0pLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwic3YtYnJhbmQtaW5mb19fdGVybXNcIiB9LCBbXG4gICAgICAgIF9jKFwiYVwiLCB7IGF0dHJzOiB7IGhyZWY6IFwiaHR0cHM6Ly9zdXJ2ZXlqcy5pby9UZXJtc09mVXNlXCIgfSB9LCBbXG4gICAgICAgICAgX3ZtLl92KFwiVGVybXMgb2YgVXNlICYgUHJpdmFjeSBTdGF0ZW1lbnRcIiksXG4gICAgICAgIF0pLFxuICAgICAgXSksXG4gICAgXSlcbiAgfSxcbl1cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9jb21wb25lbnRzL2NoYXJhY3Rlci1jb3VudGVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03YzgwY2E2MSZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NyYy92dWUvY29tcG9uZW50cy9jaGFyYWN0ZXItY291bnRlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9N2M4MGNhNjEmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwicmVuZGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVuZGVyOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzdGF0aWNSZW5kZXJGbnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdGF0aWNSZW5kZXJGbnM7IH0pO1xudmFyIHJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLnJlbWFpbmluZ0NoYXJhY3RlckNvdW50ZXIgfSwgW1xuICAgIF92bS5fdihfdm0uX3MoX3ZtLmNvdW50ZXIucmVtYWluaW5nQ2hhcmFjdGVyQ291bnRlcikpLFxuICBdKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvY29tcG9uZW50cy9jb250YWluZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTJiNDRhMDBhJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NyYy92dWUvY29tcG9uZW50cy9jb250YWluZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTJiNDRhMDBhJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiByZW5kZXI7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0YXRpY1JlbmRlckZuczsgfSk7XG52YXIgcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfdm0uY29tcG9uZW50cy5sZW5ndGggPiAwXG4gICAgPyBfYyhcbiAgICAgICAgXCJkaXZcIixcbiAgICAgICAgeyBzdGF0aWNDbGFzczogXCJzdi1jb21wb25lbnRzLWNvbHVtblwiIH0sXG4gICAgICAgIFtcbiAgICAgICAgICBfdm0uX2woX3ZtLmNvbXBvbmVudHMsIGZ1bmN0aW9uIChjb21wb25lbnQsIGluZGV4KSB7XG4gICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICBfYyhjb21wb25lbnQuY29tcG9uZW50LCB7XG4gICAgICAgICAgICAgICAgdGFnOiBcImNvbXBvbmVudFwiLFxuICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICBzdXJ2ZXk6IF92bS5zdXJ2ZXksXG4gICAgICAgICAgICAgICAgICBjb250YWluZXI6IF92bS5jb250YWluZXIsXG4gICAgICAgICAgICAgICAgICBtb2RlbDogY29tcG9uZW50LmRhdGEsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSksXG4gICAgICAgIF0sXG4gICAgICAgIDJcbiAgICAgIClcbiAgICA6IF92bS5fZSgpXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9jb21wb25lbnRzL2NvdmVyL2NvdmVyLWNlbGwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTM2Mjk3NzE3JlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL2NvbXBvbmVudHMvY292ZXIvY292ZXItY2VsbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MzYyOTc3MTcmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiByZW5kZXI7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0YXRpY1JlbmRlckZuczsgfSk7XG52YXIgcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0ubW9kZWwuY3NzLCBzdHlsZTogX3ZtLm1vZGVsLnN0eWxlIH0sIFtcbiAgICBfYyhcbiAgICAgIFwiZGl2XCIsXG4gICAgICB7IHN0YXRpY0NsYXNzOiBcInN2LWNvdmVyX19jZWxsLWNvbnRlbnRcIiwgc3R5bGU6IF92bS5tb2RlbC5jb250ZW50U3R5bGUgfSxcbiAgICAgIFtcbiAgICAgICAgX3ZtLm1vZGVsLnNob3dMb2dvXG4gICAgICAgICAgPyBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcInN2LWNvdmVyX19sb2dvXCIgfSwgW1xuICAgICAgICAgICAgICBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0ubW9kZWwuc3VydmV5LmxvZ29DbGFzc05hbWVzIH0sIFtcbiAgICAgICAgICAgICAgICBfYyhcImltZ1wiLCB7XG4gICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLm1vZGVsLnN1cnZleS5jc3MubG9nb0ltYWdlLFxuICAgICAgICAgICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0Rml0OiBfdm0ubW9kZWwuc3VydmV5LmxvZ29GaXQsXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBfdm0ubW9kZWwuc3VydmV5LnJlbmRlcmVkU3R5bGVMb2dvV2lkdGgsXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogX3ZtLm1vZGVsLnN1cnZleS5yZW5kZXJlZFN0eWxlTG9nb0hlaWdodCxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICBzcmM6IF92bS5tb2RlbC5zdXJ2ZXkubG9jTG9nby5yZW5kZXJlZEh0bWwsXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBfdm0ubW9kZWwuc3VydmV5LnJlbmRlcmVkTG9nb1dpZHRoLFxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IF92bS5tb2RlbC5zdXJ2ZXkucmVuZGVyZWRMb2dvSGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgICBhbHQ6IF92bS5tb2RlbC5zdXJ2ZXkubG9jVGl0bGUucmVuZGVyZWRIdG1sLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICBdKVxuICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgIF92bS5tb2RlbC5zaG93VGl0bGVcbiAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwic3YtY292ZXJfX3RpdGxlXCIsXG4gICAgICAgICAgICAgICAgc3R5bGU6IHsgbWF4V2lkdGg6IF92bS5tb2RlbC50ZXh0V2lkdGggfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIF9jKFwic3VydmV5LWVsZW1lbnQtdGl0bGVcIiwge1xuICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDogX3ZtLm1vZGVsLnN1cnZleSxcbiAgICAgICAgICAgICAgICAgICAgY3NzOiBfdm0ubW9kZWwuc3VydmV5LmNzcyxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICBfdm0ubW9kZWwuc2hvd0Rlc2NyaXB0aW9uXG4gICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcInN2LWNvdmVyX19kZXNjcmlwdGlvblwiLFxuICAgICAgICAgICAgICAgIHN0eWxlOiB7IG1heFdpZHRoOiBfdm0ubW9kZWwudGV4dFdpZHRoIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBfdm0ubW9kZWwuc3VydmV5LnJlbmRlcmVkSGFzRGVzY3JpcHRpb25cbiAgICAgICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICAgICAgXCJoNVwiLFxuICAgICAgICAgICAgICAgICAgICAgIHsgY2xhc3M6IF92bS5tb2RlbC5zdXJ2ZXkuY3NzLmRlc2NyaXB0aW9uIH0sXG4gICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgbG9jU3RyaW5nOiBfdm0ubW9kZWwuc3VydmV5LmxvY0Rlc2NyaXB0aW9uIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBdXG4gICAgKSxcbiAgXSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2NvbXBvbmVudHMvY292ZXIvY292ZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTRlNjJiOGIwJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL3Z1ZS9jb21wb25lbnRzL2NvdmVyL2NvdmVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00ZTYyYjhiMCYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiByZW5kZXI7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0YXRpY1JlbmRlckZuczsgfSk7XG52YXIgcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHtcbiAgICAgIGNsYXNzOiBfdm0ubW9kZWwuY292ZXJDbGFzc2VzLFxuICAgICAgc3R5bGU6IHtcbiAgICAgICAgaGVpZ2h0OiBfdm0ubW9kZWwucmVuZGVyZWRIZWlnaHQsXG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogX3ZtLm1vZGVsLmJhY2tncm91bmRDb2xvcixcbiAgICAgIH0sXG4gICAgfSxcbiAgICBbXG4gICAgICAhIV92bS5tb2RlbC5iYWNrZ3JvdW5kSW1hZ2VcbiAgICAgICAgPyBfYyhcImRpdlwiLCB7XG4gICAgICAgICAgICBjbGFzczogX3ZtLm1vZGVsLmJhY2tncm91bmRJbWFnZUNsYXNzZXMsXG4gICAgICAgICAgICBzdHlsZTogX3ZtLm1vZGVsLmJhY2tncm91bmRJbWFnZVN0eWxlLFxuICAgICAgICAgIH0pXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXG4gICAgICAgIFwiZGl2XCIsXG4gICAgICAgIHsgY2xhc3M6IF92bS5tb2RlbC5jb250ZW50Q2xhc3NlcyB9LFxuICAgICAgICBfdm0uX2woX3ZtLm1vZGVsLmNlbGxzLCBmdW5jdGlvbiAoY2VsbCkge1xuICAgICAgICAgIHJldHVybiBfYyhcInN2LWNvdmVyLWNlbGxcIiwgeyBhdHRyczogeyBtb2RlbDogY2VsbCB9IH0pXG4gICAgICAgIH0pLFxuICAgICAgICAxXG4gICAgICApLFxuICAgIF1cbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvY29tcG9uZW50cy9kcm9wZG93bi9kcm9wZG93bi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MzYxZmMwNTAmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL2NvbXBvbmVudHMvZHJvcGRvd24vZHJvcGRvd24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTM2MWZjMDUwJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInJlbmRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHJlbmRlcjsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic3RhdGljUmVuZGVyRm5zXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc3RhdGljUmVuZGVyRm5zOyB9KTtcbnZhciByZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuc2VsZWN0V3JhcHBlciwgb246IHsgY2xpY2s6IF92bS5jbGljayB9IH0sXG4gICAgW1xuICAgICAgIV92bS5xdWVzdGlvbi5pc1JlYWRPbmx5XG4gICAgICAgID8gX2MoXG4gICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmdldENvbnRyb2xDbGFzcygpLFxuICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgIGlkOiBfdm0ucXVlc3Rpb24uaW5wdXRJZCxcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogX3ZtLnF1ZXN0aW9uLmlzSW5wdXRSZWFkT25seSxcbiAgICAgICAgICAgICAgICB0YWJpbmRleDogX3ZtLm1vZGVsLmlucHV0UmVhZE9ubHkgPyB1bmRlZmluZWQgOiAwLFxuICAgICAgICAgICAgICAgIHJvbGU6IF92bS5xdWVzdGlvbi5hcmlhUm9sZSxcbiAgICAgICAgICAgICAgICBcImFyaWEtcmVxdWlyZWRcIjogX3ZtLnF1ZXN0aW9uLmFyaWFSZXF1aXJlZCxcbiAgICAgICAgICAgICAgICBcImFyaWEtbGFiZWxcIjogX3ZtLnF1ZXN0aW9uLmFyaWFMYWJlbCxcbiAgICAgICAgICAgICAgICBcImFyaWEtaW52YWxpZFwiOiBfdm0ucXVlc3Rpb24uYXJpYUludmFsaWQsXG4gICAgICAgICAgICAgICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6IF92bS5xdWVzdGlvbi5hcmlhRGVzY3JpYmVkQnksXG4gICAgICAgICAgICAgICAgXCJhcmlhLWV4cGFuZGVkXCI6IF92bS5xdWVzdGlvbi5hcmlhRXhwYW5kZWQsXG4gICAgICAgICAgICAgICAgXCJhcmlhLWNvbnRyb2xzXCI6IF92bS5tb2RlbC5saXN0RWxlbWVudElkLFxuICAgICAgICAgICAgICAgIFwiYXJpYS1hY3RpdmVkZXNjZW5kYW50XCI6IF92bS5tb2RlbC5hcmlhQWN0aXZlZGVzY2VuZGFudCxcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogX3ZtLnF1ZXN0aW9uLmlzUmVxdWlyZWQsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIG9uOiB7IGtleWRvd246IF92bS5rZXloYW5kbGVyLCBibHVyOiBfdm0uYmx1ciB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX3ZtLm1vZGVsLnNob3dIaW50UHJlZml4XG4gICAgICAgICAgICAgICAgPyBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5oaW50UHJlZml4IH0sIFtcbiAgICAgICAgICAgICAgICAgICAgX2MoXCJzcGFuXCIsIFtfdm0uX3YoX3ZtLl9zKF92bS5tb2RlbC5oaW50U3RyaW5nUHJlZml4KSldKSxcbiAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jb250cm9sVmFsdWUgfSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24uc2hvd1NlbGVjdGVkSXRlbUxvY1RleHRcbiAgICAgICAgICAgICAgICAgICAgPyBfYyhcInN1cnZleS1zdHJpbmdcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgbG9jU3RyaW5nOiBfdm0ucXVlc3Rpb24uc2VsZWN0ZWRJdGVtTG9jVGV4dCB9LFxuICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgX3ZtLm1vZGVsLnNob3dIaW50U3RyaW5nXG4gICAgICAgICAgICAgICAgICAgID8gX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaGludFN1ZmZpeCB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgICBfYyhcInNwYW5cIiwgeyBzdGF0aWNTdHlsZTogeyB2aXNpYmlsaXR5OiBcImhpZGRlblwiIH0gfSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoX3ZtLl9zKF92bS5tb2RlbC5pbnB1dFN0cmluZ1JlbmRlcmVkKSksXG4gICAgICAgICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBfYyhcInNwYW5cIiwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoX3ZtLl9zKF92bS5tb2RlbC5oaW50U3RyaW5nU3VmZml4KSksXG4gICAgICAgICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgIF92bS5xdWVzdGlvbi5zaG93SW5wdXRGaWVsZENvbXBvbmVudFxuICAgICAgICAgICAgICAgICAgICA/IF9jKF92bS5xdWVzdGlvbi5pbnB1dEZpZWxkQ29tcG9uZW50TmFtZSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFnOiBcImNvbXBvbmVudFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbTogX3ZtLm1vZGVsLmdldFNlbGVjdGVkQWN0aW9uKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uOiBfdm0ucXVlc3Rpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgX2MoXCJpbnB1dFwiLCB7XG4gICAgICAgICAgICAgICAgICAgIHJlZjogXCJpbnB1dEVsZW1lbnRcIixcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmZpbHRlclN0cmluZ0lucHV0LFxuICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBfdm0ucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5LFxuICAgICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZTogXCJvZmZcIixcbiAgICAgICAgICAgICAgICAgICAgICBpbnB1dG1vZGU6IF92bS5tb2RlbC5pbnB1dE1vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgcm9sZTogX3ZtLm1vZGVsLmZpbHRlclN0cmluZ0VuYWJsZWRcbiAgICAgICAgICAgICAgICAgICAgICAgID8gX3ZtLnF1ZXN0aW9uLmFyaWFSb2xlXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgaWQ6IF92bS5xdWVzdGlvbi5nZXRJbnB1dElkKCksXG4gICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg6IF92bS5tb2RlbC5pbnB1dFJlYWRPbmx5ID8gdW5kZWZpbmVkIDogLTEsXG4gICAgICAgICAgICAgICAgICAgICAgcmVhZG9ubHk6ICFfdm0ubW9kZWwuc2VhcmNoRW5hYmxlZCA/IHRydWUgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBfdm0ucXVlc3Rpb24ucGxhY2Vob2xkZXIsXG4gICAgICAgICAgICAgICAgICAgICAgXCJhcmlhLWV4cGFuZGVkXCI6IF92bS5xdWVzdGlvbi5hcmlhRXhwYW5kZWQsXG4gICAgICAgICAgICAgICAgICAgICAgXCJhcmlhLWNvbnRyb2xzXCI6IF92bS5tb2RlbC5saXN0RWxlbWVudElkLFxuICAgICAgICAgICAgICAgICAgICAgIFwiYXJpYS1hY3RpdmVkZXNjZW5kYW50XCI6IF92bS5tb2RlbC5hcmlhQWN0aXZlZGVzY2VuZGFudCxcbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogX3ZtLm1vZGVsLnBsYWNlaG9sZGVyUmVuZGVyZWQsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgaW5wdXQ6IF92bS5pbnB1dENoYW5nZSxcbiAgICAgICAgICAgICAgICAgICAgICBibHVyOiBfdm0uYmx1cixcbiAgICAgICAgICAgICAgICAgICAgICBmb2N1czogX3ZtLmZvY3VzLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgIF92bS5xdWVzdGlvbi5hbGxvd0NsZWFyICYmXG4gICAgICAgICAgICAgIF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmNsZWFuQnV0dG9uSWNvbklkXG4gICAgICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAhX3ZtLnF1ZXN0aW9uLmlzRW1wdHkoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCIhcXVlc3Rpb24uaXNFbXB0eSgpXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmNsZWFuQnV0dG9uLFxuICAgICAgICAgICAgICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0uY2xlYXIgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgIF9jKFwic3Ytc3ZnLWljb25cIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmNsZWFuQnV0dG9uU3ZnLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbk5hbWU6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmNsZWFuQnV0dG9uSWNvbklkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogX3ZtLnF1ZXN0aW9uLmNsZWFyQ2FwdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZTogXCJhdXRvXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgIF1cbiAgICAgICAgICApXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgIV92bS5xdWVzdGlvbi5pc1JlYWRPbmx5XG4gICAgICAgID8gX2MoXCJzdi1wb3B1cFwiLCB7XG4gICAgICAgICAgICBhdHRyczogeyBtb2RlbDogX3ZtLnF1ZXN0aW9uLmRyb3Bkb3duTGlzdE1vZGVsLnBvcHVwTW9kZWwgfSxcbiAgICAgICAgICB9KVxuICAgICAgICA6IF9jKFxuICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5nZXRDb250cm9sQ2xhc3MoKSxcbiAgICAgICAgICAgICAgYXR0cnM6IHsgZGlzYWJsZWQ6IFwiXCIsIGlkOiBfdm0ucXVlc3Rpb24uaW5wdXRJZCB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLnNlbGVjdGVkSXRlbUxvY1RleHRcbiAgICAgICAgICAgICAgICA/IF9jKFwic3VydmV5LXN0cmluZ1wiLCB7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IGxvY1N0cmluZzogX3ZtLnF1ZXN0aW9uLnNlbGVjdGVkSXRlbUxvY1RleHQgfSxcbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgX2MoXCJkaXZcIiwgW192bS5fdihfdm0uX3MoX3ZtLnF1ZXN0aW9uLnJlYWRPbmx5VGV4dCkpXSksXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgMVxuICAgICAgICAgICksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuY2hldnJvbkJ1dHRvbkljb25JZFxuICAgICAgICA/IF9jKFxuICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmNoZXZyb25CdXR0b24gfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX2MoXCJzdi1zdmctaWNvblwiLCB7XG4gICAgICAgICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmNoZXZyb25CdXR0b25TdmcsXG4gICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgIGljb25OYW1lOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jaGV2cm9uQnV0dG9uSWNvbklkLFxuICAgICAgICAgICAgICAgICAgc2l6ZTogXCJhdXRvXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgMVxuICAgICAgICAgIClcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICBdLFxuICAgIDFcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvY29tcG9uZW50cy9kcm9wZG93bi9vcHRpb24taXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MzZiNTZlNzQmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL2NvbXBvbmVudHMvZHJvcGRvd24vb3B0aW9uLWl0ZW0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTM2YjU2ZTc0JiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInJlbmRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHJlbmRlcjsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic3RhdGljUmVuZGVyRm5zXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc3RhdGljUmVuZGVyRm5zOyB9KTtcbnZhciByZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwib3B0aW9uXCIsXG4gICAge1xuICAgICAgYXR0cnM6IHsgZGlzYWJsZWQ6ICFfdm0uaXRlbS5pc0VuYWJsZWQgfSxcbiAgICAgIGRvbVByb3BzOiB7IHZhbHVlOiBfdm0uaXRlbS52YWx1ZSB9LFxuICAgIH0sXG4gICAgW192bS5fdihfdm0uX3MoX3ZtLml0ZW0udGV4dCkpXVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9jb21wb25lbnRzL2ZpbGUtYWN0aW9ucy9maWxlLWNob29zZS1idXR0b24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTcyOWQxYWEzJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL2NvbXBvbmVudHMvZmlsZS1hY3Rpb25zL2ZpbGUtY2hvb3NlLWJ1dHRvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NzI5ZDFhYTMmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiByZW5kZXI7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0YXRpY1JlbmRlckZuczsgfSk7XG52YXIgcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiAhX3ZtLnF1ZXN0aW9uLmlzUmVhZE9ubHlcbiAgICA/IF9jKFxuICAgICAgICBcImxhYmVsXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBkaXJlY3RpdmVzOiBbeyBuYW1lOiBcImtleTJjbGlja1wiLCByYXdOYW1lOiBcInYta2V5MmNsaWNrXCIgfV0sXG4gICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5nZXRDaG9vc2VGaWxlQ3NzKCksXG4gICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgIHJvbGU6IFwiYnV0dG9uXCIsXG4gICAgICAgICAgICB0YWJpbmRleDogXCIwXCIsXG4gICAgICAgICAgICBmb3I6IF92bS5xdWVzdGlvbi5pbnB1dElkLFxuICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IF92bS5xdWVzdGlvbi5jaG9vc2VCdXR0b25UZXh0LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIFtcbiAgICAgICAgICBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jaG9vc2VGaWxlSWNvbklkXG4gICAgICAgICAgICA/IF9jKFwic3Ytc3ZnLWljb25cIiwge1xuICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICB0aXRsZTogX3ZtLnF1ZXN0aW9uLmNob29zZUJ1dHRvblRleHQsXG4gICAgICAgICAgICAgICAgICBpY29uTmFtZTogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuY2hvb3NlRmlsZUljb25JZCxcbiAgICAgICAgICAgICAgICAgIHNpemU6IFwiYXV0b1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgX2MoXCJzcGFuXCIsIFtfdm0uX3YoX3ZtLl9zKF92bS5xdWVzdGlvbi5jaG9vc2VCdXR0b25UZXh0KSldKSxcbiAgICAgICAgXSxcbiAgICAgICAgMVxuICAgICAgKVxuICAgIDogX3ZtLl9lKClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2NvbXBvbmVudHMvbGlzdC9saXN0LWl0ZW0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTRmZmZjZGY4JlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL3Z1ZS9jb21wb25lbnRzL2xpc3QvbGlzdC1pdGVtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00ZmZmY2RmOCYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiByZW5kZXI7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0YXRpY1JlbmRlckZuczsgfSk7XG52YXIgcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImxpXCIsXG4gICAge1xuICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICB2YWx1ZTogX3ZtLm1vZGVsLmlzSXRlbVZpc2libGUoX3ZtLml0ZW0pLFxuICAgICAgICAgIGV4cHJlc3Npb246IFwibW9kZWwuaXNJdGVtVmlzaWJsZShpdGVtKVwiLFxuICAgICAgICB9LFxuICAgICAgICB7IG5hbWU6IFwia2V5MmNsaWNrXCIsIHJhd05hbWU6IFwidi1rZXkyY2xpY2tcIiB9LFxuICAgICAgXSxcbiAgICAgIGtleTogX3ZtLml0ZW0uaWQsXG4gICAgICBjbGFzczogX3ZtLm1vZGVsLmdldEl0ZW1DbGFzcyhfdm0uaXRlbSksXG4gICAgICBhdHRyczoge1xuICAgICAgICB0YWJpbmRleDogXCIwXCIsXG4gICAgICAgIHJvbGU6IFwib3B0aW9uXCIsXG4gICAgICAgIGlkOiBfdm0uZWxlbWVudElkLFxuICAgICAgICBcImFyaWEtc2VsZWN0ZWRcIjogX3ZtLm1vZGVsLmlzSXRlbVNlbGVjdGVkKF92bS5pdGVtKSA/IFwidHJ1ZVwiIDogXCJmYWxzZVwiLFxuICAgICAgfSxcbiAgICAgIG9uOiB7IGNsaWNrOiBfdm0uY2xpY2sgfSxcbiAgICB9LFxuICAgIFtcbiAgICAgIF92bS5pdGVtLm5lZWRTZXBhcmF0b3JcbiAgICAgICAgPyBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0ubW9kZWwuY3NzQ2xhc3Nlcy5pdGVtU2VwYXJhdG9yIH0pXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXG4gICAgICAgIFwiZGl2XCIsXG4gICAgICAgIHtcbiAgICAgICAgICBjbGFzczogX3ZtLm1vZGVsLmNzc0NsYXNzZXMuaXRlbUJvZHksXG4gICAgICAgICAgc3R5bGU6IHsgcGFkZGluZ0lubGluZVN0YXJ0OiBfdm0ubW9kZWwuZ2V0SXRlbUluZGVudChfdm0uaXRlbSkgfSxcbiAgICAgICAgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF92bS5pdGVtLmljb25OYW1lICYmICFfdm0uaXRlbS5jb21wb25lbnRcbiAgICAgICAgICAgID8gX2MoXCJzdi1zdmctaWNvblwiLCB7XG4gICAgICAgICAgICAgICAgY2xhc3M6IF92bS5tb2RlbC5jc3NDbGFzc2VzLml0ZW1JY29uLFxuICAgICAgICAgICAgICAgIGF0dHJzOiB7IGljb25OYW1lOiBfdm0uaXRlbS5pY29uTmFtZSwgc2l6ZTogX3ZtLml0ZW0uaWNvblNpemUgfSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAhX3ZtLml0ZW0uY29tcG9uZW50XG4gICAgICAgICAgICA/IF9jKFwic3VydmV5LXN0cmluZ1wiLCB7IGF0dHJzOiB7IGxvY1N0cmluZzogX3ZtLml0ZW0ubG9jVGl0bGUgfSB9KVxuICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgIF92bS5pdGVtLmNvbXBvbmVudFxuICAgICAgICAgICAgPyBfYyhfdm0uaXRlbS5jb21wb25lbnQsIHtcbiAgICAgICAgICAgICAgICB0YWc6IFwiY29tcG9uZW50XCIsXG4gICAgICAgICAgICAgICAgYXR0cnM6IHsgaXRlbTogX3ZtLml0ZW0gfSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgIF0sXG4gICAgICAgIDFcbiAgICAgICksXG4gICAgXVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9jb21wb25lbnRzL2xpc3QvbGlzdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9Y2MxN2EwMTAmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL3Z1ZS9jb21wb25lbnRzL2xpc3QvbGlzdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9Y2MxN2EwMTAmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInJlbmRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHJlbmRlcjsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic3RhdGljUmVuZGVyRm5zXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc3RhdGljUmVuZGVyRm5zOyB9KTtcbnZhciByZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAgeyByZWY6IFwibGlzdENvbnRhaW5lckVsZW1lbnRcIiwgY2xhc3M6IF92bS5tb2RlbC5jc3NDbGFzc2VzLnJvb3QgfSxcbiAgICBbXG4gICAgICBfdm0ubW9kZWwuc2hvd0ZpbHRlclxuICAgICAgICA/IF9jKFwiZGl2XCIsIHsgY2xhc3M6IF92bS5tb2RlbC5jc3NDbGFzc2VzLmZpbHRlciB9LCBbXG4gICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgeyBjbGFzczogX3ZtLm1vZGVsLmNzc0NsYXNzZXMuZmlsdGVySWNvbiB9LFxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgX2MoXCJzdi1zdmctaWNvblwiLCB7XG4gICAgICAgICAgICAgICAgICBhdHRyczogeyBpY29uTmFtZTogXCJpY29uLXNlYXJjaFwiLCBzaXplOiBcImF1dG9cIiB9LFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAxXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgIF9jKFwiaW5wdXRcIiwge1xuICAgICAgICAgICAgICBjbGFzczogX3ZtLm1vZGVsLmNzc0NsYXNzZXMuZmlsdGVySW5wdXQsXG4gICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IF92bS5tb2RlbC5maWx0ZXJTdHJpbmdQbGFjZWhvbGRlcixcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogX3ZtLm1vZGVsLmZpbHRlclN0cmluZ1BsYWNlaG9sZGVyLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBkb21Qcm9wczogeyB2YWx1ZTogX3ZtLm1vZGVsLmZpbHRlclN0cmluZyB9LFxuICAgICAgICAgICAgICBvbjogeyBjaGFuZ2U6IF92bS5jaGFuZ2UsIGtleXVwOiBfdm0ua2V5dXAgfSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgIF92bS5tb2RlbC5zaG93U2VhcmNoQ2xlYXJCdXR0b24gJiYgISFfdm0ubW9kZWwuZmlsdGVyU3RyaW5nXG4gICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLm1vZGVsLmNzc0NsYXNzZXMuc2VhcmNoQ2xlYXJCdXR0b25JY29uLFxuICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS5tb2RlbC5vbkNsaWNrU2VhcmNoQ2xlYXJCdXR0b24oZXZlbnQpXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIF9jKFwic3Ytc3ZnLWljb25cIiwge1xuICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IGljb25OYW1lOiBcImljb24tc2VhcmNoY2xlYXJcIiwgc2l6ZTogXCJhdXRvXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICBdKVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFxuICAgICAgICBcImRpdlwiLFxuICAgICAgICB7XG4gICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgICAgdmFsdWU6IF92bS5tb2RlbC5pc0VtcHR5LFxuICAgICAgICAgICAgICBleHByZXNzaW9uOiBcIm1vZGVsLmlzRW1wdHlcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICBjbGFzczogX3ZtLm1vZGVsLmNzc0NsYXNzZXMuZW1wdHlDb250YWluZXIsXG4gICAgICAgIH0sXG4gICAgICAgIFtcbiAgICAgICAgICBfYyhcbiAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNsYXNzOiBfdm0ubW9kZWwuY3NzQ2xhc3Nlcy5lbXB0eVRleHQsXG4gICAgICAgICAgICAgIGF0dHJzOiB7IFwiYXJpYS1sYWJlbFwiOiBfdm0ubW9kZWwuZW1wdHlNZXNzYWdlIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW192bS5fdihfdm0uX3MoX3ZtLm1vZGVsLmVtcHR5TWVzc2FnZSkpXVxuICAgICAgICAgICksXG4gICAgICAgIF1cbiAgICAgICksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLm1vZGVsLnJlbmRlckVsZW1lbnRzXG4gICAgICAgID8gX2MoXG4gICAgICAgICAgICBcInVsXCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogIV92bS5tb2RlbC5pc0VtcHR5LFxuICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCIhbW9kZWwuaXNFbXB0eVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIGNsYXNzOiBfdm0ubW9kZWwuZ2V0TGlzdENsYXNzKCksXG4gICAgICAgICAgICAgIGF0dHJzOiB7IHJvbGU6IFwibGlzdGJveFwiLCBpZDogX3ZtLm1vZGVsLmVsZW1lbnRJZCB9LFxuICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgIG1vdXNlZG93bjogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBtb3VzZW1vdmU6IF92bS5tb3VzZU1vdmUsXG4gICAgICAgICAgICAgICAga2V5ZG93bjogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICBfdm0ubW9kZWwub25LZXlEb3duKGV2ZW50KVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgX3ZtLl9sKF92bS5tb2RlbC5yZW5kZXJlZEFjdGlvbnMsIGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgICAgIHJldHVybiBfYyhcInN2LWxpc3QtaXRlbVwiLCB7XG4gICAgICAgICAgICAgICAga2V5OiBpdGVtLmlkLFxuICAgICAgICAgICAgICAgIGF0dHJzOiB7IGl0ZW06IGl0ZW0sIG1vZGVsOiBfdm0ubW9kZWwgfSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgMVxuICAgICAgICAgIClcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICBdXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2NvbXBvbmVudHMvbG9hZGluZy1pbmRpY2F0b3IudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWU4ODdkYTcyJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL3Z1ZS9jb21wb25lbnRzL2xvYWRpbmctaW5kaWNhdG9yLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1lODg3ZGE3MiYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiByZW5kZXI7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0YXRpY1JlbmRlckZuczsgfSk7XG52YXIgcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHsgc3RhdGljQ2xhc3M6IFwic2QtbG9hZGluZy1pbmRpY2F0b3JcIiB9LFxuICAgIFtcbiAgICAgIF9jKFwic3Ytc3ZnLWljb25cIiwge1xuICAgICAgICBhdHRyczogeyBpY29uTmFtZTogXCJpY29uLWxvYWRpbmdcIiwgc2l6ZTogXCInYXV0bydcIiB9LFxuICAgICAgfSksXG4gICAgXSxcbiAgICAxXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2NvbXBvbmVudHMvbWF0cml4LWFjdGlvbnMvZGV0YWlsLWJ1dHRvbi9kZXRhaWwtYnV0dG9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01YjRlNjliNiZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL2NvbXBvbmVudHMvbWF0cml4LWFjdGlvbnMvZGV0YWlsLWJ1dHRvbi9kZXRhaWwtYnV0dG9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01YjRlNjliNiYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwicmVuZGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVuZGVyOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzdGF0aWNSZW5kZXJGbnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdGF0aWNSZW5kZXJGbnM7IH0pO1xudmFyIHJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJidXR0b25cIixcbiAgICB7XG4gICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmdldERldGFpbFBhbmVsQnV0dG9uQ3NzKF92bS5yb3cpLFxuICAgICAgYXR0cnM6IHtcbiAgICAgICAgdHlwZTogXCJidXR0b25cIixcbiAgICAgICAgXCJhcmlhLWV4cGFuZGVkXCI6IF92bS5xdWVzdGlvbi5nZXRJc0RldGFpbFBhbmVsU2hvd2luZyhfdm0ucm93KVxuICAgICAgICAgID8gXCJ0cnVlXCJcbiAgICAgICAgICA6IFwiZmFsc2VcIixcbiAgICAgICAgXCJhcmlhLWNvbnRyb2xzXCI6IF92bS5xdWVzdGlvbi5nZXRJc0RldGFpbFBhbmVsU2hvd2luZyhfdm0ucm93KVxuICAgICAgICAgID8gX3ZtLnJvdy5kZXRhaWxQYW5lbElkXG4gICAgICAgICAgOiBudWxsLFxuICAgICAgfSxcbiAgICAgIG9uOiB7XG4gICAgICAgIGNsaWNrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIF92bS5yb3cuc2hvd0hpZGVEZXRhaWxQYW5lbENsaWNrKClcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBbXG4gICAgICBfYyhcInN2LXN2Zy1pY29uXCIsIHtcbiAgICAgICAgY2xhc3M6IHRoaXMucXVlc3Rpb24uZ2V0RGV0YWlsUGFuZWxJY29uQ3NzKHRoaXMucm93KSxcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICBpY29uTmFtZTogdGhpcy5xdWVzdGlvbi5nZXREZXRhaWxQYW5lbEljb25JZCh0aGlzLnJvdyksXG4gICAgICAgICAgc2l6ZTogXCJhdXRvXCIsXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICBdLFxuICAgIDFcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvY29tcG9uZW50cy9tYXRyaXgtYWN0aW9ucy9kcmFnLWRyb3AtaWNvbi9kcmFnLWRyb3AtaWNvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NGY1NWQyOTgmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL2NvbXBvbmVudHMvbWF0cml4LWFjdGlvbnMvZHJhZy1kcm9wLWljb24vZHJhZy1kcm9wLWljb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTRmNTVkMjk4JiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInJlbmRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHJlbmRlcjsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic3RhdGljUmVuZGVyRm5zXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc3RhdGljUmVuZGVyRm5zOyB9KTtcbnZhciByZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFwic3BhblwiLCB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pY29uRHJhZyB9KVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvY29tcG9uZW50cy9tYXRyaXgtYWN0aW9ucy9yZW1vdmUtYnV0dG9uL3JlbW92ZS1idXR0b24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWM4YTdhYTYwJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NyYy92dWUvY29tcG9uZW50cy9tYXRyaXgtYWN0aW9ucy9yZW1vdmUtYnV0dG9uL3JlbW92ZS1idXR0b24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWM4YTdhYTYwJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiByZW5kZXI7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0YXRpY1JlbmRlckZuczsgfSk7XG52YXIgcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImJ1dHRvblwiLFxuICAgIHtcbiAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uZ2V0UmVtb3ZlUm93QnV0dG9uQ3NzKCksXG4gICAgICBhdHRyczogeyB0eXBlOiBcImJ1dHRvblwiLCBkaXNhYmxlZDogX3ZtLnF1ZXN0aW9uLmlzSW5wdXRSZWFkT25seSB9LFxuICAgICAgb246IHtcbiAgICAgICAgY2xpY2s6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gX3ZtLnF1ZXN0aW9uLnJlbW92ZVJvd1VJKF92bS5yb3cpXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gICAgW1xuICAgICAgX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHtcbiAgICAgICAgYXR0cnM6IHsgbG9jU3RyaW5nOiBfdm0ucXVlc3Rpb24ubG9jUmVtb3ZlUm93VGV4dCB9LFxuICAgICAgfSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXCJzcGFuXCIsIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmljb25SZW1vdmUgfSksXG4gICAgXSxcbiAgICAxXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2NvbXBvbmVudHMvbm90aWZpZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTJkOTNlZGFkJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL3Z1ZS9jb21wb25lbnRzL25vdGlmaWVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yZDkzZWRhZCYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiByZW5kZXI7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0YXRpY1JlbmRlckZuczsgfSk7XG52YXIgcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfdm0ubW9kZWwuaXNEaXNwbGF5ZWRcbiAgICA/IF9jKFxuICAgICAgICBcImRpdlwiLFxuICAgICAgICB7XG4gICAgICAgICAgY2xhc3M6IF92bS5tb2RlbC5jc3MsXG4gICAgICAgICAgc3R5bGU6IHsgdmlzaWJpbGl0eTogX3ZtLm1vZGVsLmFjdGl2ZSA/IFwidmlzaWJsZVwiIDogXCJoaWRkZW5cIiB9LFxuICAgICAgICAgIGF0dHJzOiB7IHJvbGU6IFwiYWxlcnRcIiwgXCJhcmlhLWxpdmVcIjogXCJwb2xpdGVcIiB9LFxuICAgICAgICB9LFxuICAgICAgICBbXG4gICAgICAgICAgX2MoXCJzcGFuXCIsIFtfdm0uX3YoX3ZtLl9zKF92bS5tb2RlbC5tZXNzYWdlKSldKSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgIF9jKFwic3YtYWN0aW9uLWJhclwiLCB7IGF0dHJzOiB7IG1vZGVsOiBfdm0ubW9kZWwuYWN0aW9uQmFyIH0gfSksXG4gICAgICAgIF0sXG4gICAgICAgIDFcbiAgICAgIClcbiAgICA6IF92bS5fZSgpXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9jb21wb25lbnRzL3BhbmVsZHluYW1pYy1hY3Rpb25zL3BhbmVsZHluYW1pYy1hZGQtYnRuLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yNDdlNTRjYiZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NyYy92dWUvY29tcG9uZW50cy9wYW5lbGR5bmFtaWMtYWN0aW9ucy9wYW5lbGR5bmFtaWMtYWRkLWJ0bi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MjQ3ZTU0Y2ImICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwicmVuZGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVuZGVyOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzdGF0aWNSZW5kZXJGbnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdGF0aWNSZW5kZXJGbnM7IH0pO1xudmFyIHJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX3ZtLnF1ZXN0aW9uLmNhbkFkZFBhbmVsXG4gICAgPyBfYyhcbiAgICAgICAgXCJidXR0b25cIixcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uZ2V0QWRkQnV0dG9uQ3NzKCksXG4gICAgICAgICAgYXR0cnM6IHsgdHlwZTogXCJidXR0b25cIiB9LFxuICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0uYWRkUGFuZWxDbGljayB9LFxuICAgICAgICB9LFxuICAgICAgICBbXG4gICAgICAgICAgX2MoXCJzcGFuXCIsIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmJ1dHRvbkFkZFRleHQgfSwgW1xuICAgICAgICAgICAgX3ZtLl92KF92bS5fcyhfdm0ucXVlc3Rpb24ucGFuZWxBZGRUZXh0KSksXG4gICAgICAgICAgXSksXG4gICAgICAgIF1cbiAgICAgIClcbiAgICA6IF92bS5fZSgpXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9jb21wb25lbnRzL3BhbmVsZHluYW1pYy1hY3Rpb25zL3BhbmVsZHluYW1pYy1uZXh0LWJ0bi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NmNjMWM3NzcmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL3Z1ZS9jb21wb25lbnRzL3BhbmVsZHluYW1pYy1hY3Rpb25zL3BhbmVsZHluYW1pYy1uZXh0LWJ0bi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NmNjMWM3NzcmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInJlbmRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHJlbmRlcjsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic3RhdGljUmVuZGVyRm5zXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc3RhdGljUmVuZGVyRm5zOyB9KTtcbnZhciByZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAge1xuICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5nZXROZXh0QnV0dG9uQ3NzKCksXG4gICAgICBhdHRyczogeyB0aXRsZTogX3ZtLnF1ZXN0aW9uLnBhbmVsTmV4dFRleHQgfSxcbiAgICAgIG9uOiB7IGNsaWNrOiBfdm0ubmV4dFBhbmVsQ2xpY2sgfSxcbiAgICB9LFxuICAgIFtcbiAgICAgIF9jKFwic3Ytc3ZnLWljb25cIiwge1xuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIGljb25OYW1lOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5wcm9ncmVzc0J0bkljb24sXG4gICAgICAgICAgc2l6ZTogXCJhdXRvXCIsXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICBdLFxuICAgIDFcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvY29tcG9uZW50cy9wYW5lbGR5bmFtaWMtYWN0aW9ucy9wYW5lbGR5bmFtaWMtcHJldi1idG4udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTEyZDc5ZWI3JlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NyYy92dWUvY29tcG9uZW50cy9wYW5lbGR5bmFtaWMtYWN0aW9ucy9wYW5lbGR5bmFtaWMtcHJldi1idG4udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTEyZDc5ZWI3JiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiByZW5kZXI7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0YXRpY1JlbmRlckZuczsgfSk7XG52YXIgcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHtcbiAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uZ2V0UHJldkJ1dHRvbkNzcygpLFxuICAgICAgYXR0cnM6IHsgdGl0bGU6IF92bS5xdWVzdGlvbi5wYW5lbFByZXZUZXh0IH0sXG4gICAgICBvbjogeyBjbGljazogX3ZtLnByZXZQYW5lbENsaWNrIH0sXG4gICAgfSxcbiAgICBbXG4gICAgICBfYyhcInN2LXN2Zy1pY29uXCIsIHtcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICBpY29uTmFtZTogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMucHJvZ3Jlc3NCdG5JY29uLFxuICAgICAgICAgIHNpemU6IFwiYXV0b1wiLFxuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgXSxcbiAgICAxXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2NvbXBvbmVudHMvcGFuZWxkeW5hbWljLWFjdGlvbnMvcGFuZWxkeW5hbWljLXByb2dyZXNzLXRleHQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTNkODA3NWE4JlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL3Z1ZS9jb21wb25lbnRzL3BhbmVsZHluYW1pYy1hY3Rpb25zL3BhbmVsZHluYW1pYy1wcm9ncmVzcy10ZXh0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zZDgwNzVhOCYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiByZW5kZXI7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0YXRpY1JlbmRlckZuczsgfSk7XG52YXIgcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5wcm9ncmVzc1RleHQgfSwgW1xuICAgIF92bS5fdihfdm0uX3MoX3ZtLnF1ZXN0aW9uLnByb2dyZXNzVGV4dCkpLFxuICBdKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvY29tcG9uZW50cy9wYW5lbGR5bmFtaWMtYWN0aW9ucy9wYW5lbGR5bmFtaWMtcmVtb3ZlLWJ0bi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MjAyZTMwYzgmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL2NvbXBvbmVudHMvcGFuZWxkeW5hbWljLWFjdGlvbnMvcGFuZWxkeW5hbWljLXJlbW92ZS1idG4udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTIwMmUzMGM4JiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInJlbmRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHJlbmRlcjsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic3RhdGljUmVuZGVyRm5zXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc3RhdGljUmVuZGVyRm5zOyB9KTtcbnZhciByZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiYnV0dG9uXCIsXG4gICAge1xuICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5nZXRQYW5lbFJlbW92ZUJ1dHRvbkNzcygpLFxuICAgICAgYXR0cnM6IHsgdHlwZTogXCJidXR0b25cIiB9LFxuICAgICAgb246IHtcbiAgICAgICAgY2xpY2s6IGZ1bmN0aW9uICgkZXZlbnQpIHtcbiAgICAgICAgICByZXR1cm4gX3ZtLnJlbW92ZVBhbmVsQ2xpY2soX3ZtLnBhbmVsKVxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICAgIFtcbiAgICAgIF9jKFwic3BhblwiLCB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5idXR0b25SZW1vdmVUZXh0IH0sIFtcbiAgICAgICAgX3ZtLl92KF92bS5fcyhfdm0ucXVlc3Rpb24ucGFuZWxSZW1vdmVUZXh0KSksXG4gICAgICBdKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcInNwYW5cIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaWNvblJlbW92ZSB9KSxcbiAgICBdXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2NvbXBvbmVudHMvcG9wdXAvcG9wdXAtY29udGFpbmVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1jMThkZmQ3NCZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL2NvbXBvbmVudHMvcG9wdXAvcG9wdXAtY29udGFpbmVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1jMThkZmQ3NCYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwicmVuZGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVuZGVyOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzdGF0aWNSZW5kZXJGbnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdGF0aWNSZW5kZXJGbnM7IH0pO1xudmFyIHJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICB7XG4gICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgIHZhbHVlOiBfdm0ubW9kZWwuaXNWaXNpYmxlLFxuICAgICAgICAgIGV4cHJlc3Npb246IFwibW9kZWwuaXNWaXNpYmxlXCIsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgc3RhdGljQ2xhc3M6IFwic3YtcG9wdXBcIixcbiAgICAgIGNsYXNzOiBfdm0ubW9kZWwuc3R5bGVDbGFzcyxcbiAgICAgIGF0dHJzOiB7IHRhYmluZGV4OiBcIi0xXCIgfSxcbiAgICAgIG9uOiB7XG4gICAgICAgIGtleWRvd246IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgIF92bS5tb2RlbC5vbktleURvd24oZXZlbnQpXG4gICAgICAgIH0sXG4gICAgICAgIGNsaWNrOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICBfdm0ubW9kZWwuY2xpY2tPdXRzaWRlKGV2ZW50KVxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICAgIFtcbiAgICAgIF9jKFxuICAgICAgICBcImRpdlwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3RhdGljQ2xhc3M6IFwic3YtcG9wdXBfX2NvbnRhaW5lclwiLFxuICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICBsZWZ0OiBfdm0ubW9kZWwubGVmdCxcbiAgICAgICAgICAgIHRvcDogX3ZtLm1vZGVsLnRvcCxcbiAgICAgICAgICAgIGhlaWdodDogX3ZtLm1vZGVsLmhlaWdodCxcbiAgICAgICAgICAgIHdpZHRoOiBfdm0ubW9kZWwud2lkdGgsXG4gICAgICAgICAgICBtaW5XaWR0aDogX3ZtLm1vZGVsLm1pbldpZHRoLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgb246IHsgY2xpY2s6IF92bS5jbGlja0luc2lkZSB9LFxuICAgICAgICB9LFxuICAgICAgICBbXG4gICAgICAgICAgX2MoXG4gICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJzdi1wb3B1cF9fc2hhZG93XCIgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX3ZtLm1vZGVsLnNob3dIZWFkZXJcbiAgICAgICAgICAgICAgICA/IF9jKF92bS5tb2RlbC5wb3B1cEhlYWRlclRlbXBsYXRlLCB7XG4gICAgICAgICAgICAgICAgICAgIHRhZzogXCJjb21wb25lbnRcIixcbiAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgbW9kZWw6IF92bS5tb2RlbCB9LFxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcInN2LXBvcHVwX19ib2R5LWNvbnRlbnRcIiB9LCBbXG4gICAgICAgICAgICAgICAgISFfdm0ubW9kZWwudGl0bGVcbiAgICAgICAgICAgICAgICAgID8gX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJzdi1wb3B1cF9fYm9keS1oZWFkZXJcIiB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KF92bS5fcyhfdm0ubW9kZWwudGl0bGUpKSxcbiAgICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcInN2LXBvcHVwX19zY3JvbGxpbmctY29udGVudFwiIH0sIFtcbiAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiBcInN2LXBvcHVwX19jb250ZW50XCIgfSxcbiAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLm1vZGVsLmNvbnRlbnRDb21wb25lbnROYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl9iKFxuICAgICAgICAgICAgICAgICAgICAgICAgICB7IHRhZzogXCJjb21wb25lbnRcIiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvbXBvbmVudFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0ubW9kZWwuY29udGVudENvbXBvbmVudERhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgIF92bS5tb2RlbC5zaG93Rm9vdGVyXG4gICAgICAgICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJzdi1wb3B1cF9fYm9keS1mb290ZXJcIiB9LFxuICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9jKFwic3YtYWN0aW9uLWJhclwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IG1vZGVsOiBfdm0ubW9kZWwuZm9vdGVyVG9vbGJhciB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIDFcbiAgICAgICAgICApLFxuICAgICAgICBdXG4gICAgICApLFxuICAgIF1cbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvY29tcG9uZW50cy9wb3B1cC9wb3B1cC1wb2ludGVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wMDg0N2M0MiZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL3Z1ZS9jb21wb25lbnRzL3BvcHVwL3BvcHVwLXBvaW50ZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTAwODQ3YzQyJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwicmVuZGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVuZGVyOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzdGF0aWNSZW5kZXJGbnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdGF0aWNSZW5kZXJGbnM7IH0pO1xudmFyIHJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJzcGFuXCIsIHtcbiAgICBzdGF0aWNDbGFzczogXCJzdi1wb3B1cF9fcG9pbnRlclwiLFxuICAgIHN0eWxlOiB7XG4gICAgICBsZWZ0OiBfdm0ubW9kZWwucG9pbnRlclRhcmdldC5sZWZ0LFxuICAgICAgdG9wOiBfdm0ubW9kZWwucG9pbnRlclRhcmdldC50b3AsXG4gICAgfSxcbiAgfSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2NvbXBvbmVudHMvcG9wdXAvcG9wdXAudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWVmMTEyNjVjJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL3Z1ZS9jb21wb25lbnRzL3BvcHVwL3BvcHVwLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1lZjExMjY1YyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiByZW5kZXI7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0YXRpY1JlbmRlckZuczsgfSk7XG52YXIgcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIFtfYyhcInN2LXBvcHVwLWNvbnRhaW5lclwiLCB7IGF0dHJzOiB7IG1vZGVsOiBfdm0ucG9wdXBWaWV3TW9kZWwgfSB9KV0sXG4gICAgMVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9jb21wb25lbnRzL3JhdGluZy9yYXRpbmctaXRlbS1zbWlsZXkudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTdkYTZhNzc2JlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL2NvbXBvbmVudHMvcmF0aW5nL3JhdGluZy1pdGVtLXNtaWxleS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9N2RhNmE3NzYmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiByZW5kZXI7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0YXRpY1JlbmRlckZuczsgfSk7XG52YXIgcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImxhYmVsXCIsXG4gICAge1xuICAgICAga2V5OiBfdm0uaXRlbS52YWx1ZSxcbiAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uZ2V0SXRlbUNsYXNzKF92bS5pdGVtLml0ZW1WYWx1ZSwgX3ZtLml0ZW0uaGlnaGxpZ2h0KSxcbiAgICAgIHN0eWxlOiBfdm0ucXVlc3Rpb24uZ2V0SXRlbVN0eWxlKF92bS5pdGVtLml0ZW1WYWx1ZSwgX3ZtLml0ZW0uaGlnaGxpZ2h0KSxcbiAgICAgIG9uOiB7XG4gICAgICAgIG1vdXNlZG93bjogZnVuY3Rpb24gKCRldmVudCkge1xuICAgICAgICAgIHJldHVybiBfdm0ucXVlc3Rpb24ub25Nb3VzZURvd24oKVxuICAgICAgICB9LFxuICAgICAgICBtb3VzZW92ZXI6IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgcmV0dXJuIF92bS5xdWVzdGlvbi5vbkl0ZW1Nb3VzZUluKF92bS5pdGVtKVxuICAgICAgICB9LFxuICAgICAgICBtb3VzZWxlYXZlOiBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgIHJldHVybiBfdm0ucXVlc3Rpb24ub25JdGVtTW91c2VPdXQoX3ZtLml0ZW0pXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gICAgW1xuICAgICAgX2MoXCJpbnB1dFwiLCB7XG4gICAgICAgIHN0YXRpY0NsYXNzOiBcInN2LXZpc3VhbGx5aGlkZGVuXCIsXG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgdHlwZTogXCJyYWRpb1wiLFxuICAgICAgICAgIG5hbWU6IF92bS5xdWVzdGlvbi5uYW1lLFxuICAgICAgICAgIGlkOiBfdm0ucXVlc3Rpb24uZ2V0SW5wdXRJZChfdm0uaW5kZXgpLFxuICAgICAgICAgIGRpc2FibGVkOiBfdm0ucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5LFxuICAgICAgICAgIFwiYXJpYS1yZXF1aXJlZFwiOiBfdm0ucXVlc3Rpb24uYXJpYVJlcXVpcmVkLFxuICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBfdm0ucXVlc3Rpb24uYXJpYUxhYmVsLFxuICAgICAgICAgIFwiYXJpYS1pbnZhbGlkXCI6IF92bS5xdWVzdGlvbi5hcmlhSW52YWxpZCxcbiAgICAgICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjogX3ZtLnF1ZXN0aW9uLmFyaWFEZXNjcmliZWRCeSxcbiAgICAgICAgfSxcbiAgICAgICAgZG9tUHJvcHM6IHsgdmFsdWU6IF92bS5pdGVtLnZhbHVlIH0sXG4gICAgICAgIG9uOiB7XG4gICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICByZXR1cm4gX3ZtLnF1ZXN0aW9uLnNldFZhbHVlRnJvbUNsaWNrKGUudGFyZ2V0LnZhbHVlKVxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcInN2LXN2Zy1pY29uXCIsIHtcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICBpY29uTmFtZTogX3ZtLnF1ZXN0aW9uLmdldEl0ZW1TbWlsZXlJY29uTmFtZShfdm0uaXRlbS5pdGVtVmFsdWUpLFxuICAgICAgICAgIHNpemU6IFwiYXV0b1wiLFxuICAgICAgICAgIHRpdGxlOiBfdm0uaXRlbS50ZXh0LFxuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgXSxcbiAgICAxXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2NvbXBvbmVudHMvcmF0aW5nL3JhdGluZy1pdGVtLXN0YXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTVkMDNmZTE3JlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL3Z1ZS9jb21wb25lbnRzL3JhdGluZy9yYXRpbmctaXRlbS1zdGFyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01ZDAzZmUxNyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiByZW5kZXI7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0YXRpY1JlbmRlckZuczsgfSk7XG52YXIgcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImxhYmVsXCIsXG4gICAge1xuICAgICAga2V5OiBfdm0uaXRlbS52YWx1ZSxcbiAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uZ2V0SXRlbUNsYXNzKF92bS5pdGVtLml0ZW1WYWx1ZSksXG4gICAgICBvbjoge1xuICAgICAgICBtb3VzZWRvd246IGZ1bmN0aW9uICgkZXZlbnQpIHtcbiAgICAgICAgICByZXR1cm4gX3ZtLnF1ZXN0aW9uLm9uTW91c2VEb3duKClcbiAgICAgICAgfSxcbiAgICAgICAgbW91c2VvdmVyOiBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgIHJldHVybiBfdm0ucXVlc3Rpb24ub25JdGVtTW91c2VJbihfdm0uaXRlbSlcbiAgICAgICAgfSxcbiAgICAgICAgbW91c2VsZWF2ZTogZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICByZXR1cm4gX3ZtLnF1ZXN0aW9uLm9uSXRlbU1vdXNlT3V0KF92bS5pdGVtKVxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICAgIFtcbiAgICAgIF9jKFwiaW5wdXRcIiwge1xuICAgICAgICBzdGF0aWNDbGFzczogXCJzdi12aXN1YWxseWhpZGRlblwiLFxuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIHR5cGU6IFwicmFkaW9cIixcbiAgICAgICAgICBuYW1lOiBfdm0ucXVlc3Rpb24ubmFtZSxcbiAgICAgICAgICBpZDogX3ZtLnF1ZXN0aW9uLmdldElucHV0SWQoX3ZtLmluZGV4KSxcbiAgICAgICAgICBkaXNhYmxlZDogX3ZtLnF1ZXN0aW9uLmlzSW5wdXRSZWFkT25seSxcbiAgICAgICAgICBcImFyaWEtcmVxdWlyZWRcIjogX3ZtLnF1ZXN0aW9uLmFyaWFSZXF1aXJlZCxcbiAgICAgICAgICBcImFyaWEtbGFiZWxcIjogX3ZtLnF1ZXN0aW9uLmFyaWFMYWJlbCxcbiAgICAgICAgICBcImFyaWEtaW52YWxpZFwiOiBfdm0ucXVlc3Rpb24uYXJpYUludmFsaWQsXG4gICAgICAgICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6IF92bS5xdWVzdGlvbi5hcmlhRGVzY3JpYmVkQnksXG4gICAgICAgIH0sXG4gICAgICAgIGRvbVByb3BzOiB7IHZhbHVlOiBfdm0uaXRlbS52YWx1ZSB9LFxuICAgICAgICBvbjoge1xuICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIF92bS5xdWVzdGlvbi5zZXRWYWx1ZUZyb21DbGljayhlLnRhcmdldC52YWx1ZSlcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXCJzdi1zdmctaWNvblwiLCB7XG4gICAgICAgIGNsYXNzOiBcInN2LXN0YXJcIixcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICBpY29uTmFtZTogX3ZtLnF1ZXN0aW9uLml0ZW1TdGFySWNvbixcbiAgICAgICAgICBzaXplOiBcImF1dG9cIixcbiAgICAgICAgICB0aXRsZTogX3ZtLml0ZW0udGV4dCxcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFwic3Ytc3ZnLWljb25cIiwge1xuICAgICAgICBjbGFzczogXCJzdi1zdGFyLTJcIixcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICBpY29uTmFtZTogX3ZtLnF1ZXN0aW9uLml0ZW1TdGFySWNvbkFsdCxcbiAgICAgICAgICBzaXplOiBcImF1dG9cIixcbiAgICAgICAgICB0aXRsZTogX3ZtLml0ZW0udGV4dCxcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgIF0sXG4gICAgMVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9jb21wb25lbnRzL3JhdGluZy9yYXRpbmctaXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MzhjMmQwZDAmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL3Z1ZS9jb21wb25lbnRzL3JhdGluZy9yYXRpbmctaXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MzhjMmQwZDAmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInJlbmRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHJlbmRlcjsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic3RhdGljUmVuZGVyRm5zXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc3RhdGljUmVuZGVyRm5zOyB9KTtcbnZhciByZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwibGFiZWxcIixcbiAgICB7XG4gICAgICBrZXk6IF92bS5pdGVtLnZhbHVlLFxuICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5nZXRJdGVtQ2xhc3NCeVRleHQoX3ZtLml0ZW0uaXRlbVZhbHVlLCBfdm0uaXRlbS50ZXh0KSxcbiAgICAgIG9uOiB7XG4gICAgICAgIG1vdXNlZG93bjogZnVuY3Rpb24gKCRldmVudCkge1xuICAgICAgICAgIHJldHVybiBfdm0ucXVlc3Rpb24ub25Nb3VzZURvd24oKVxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICAgIFtcbiAgICAgIF9jKFwiaW5wdXRcIiwge1xuICAgICAgICBzdGF0aWNDbGFzczogXCJzdi12aXN1YWxseWhpZGRlblwiLFxuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIHR5cGU6IFwicmFkaW9cIixcbiAgICAgICAgICBuYW1lOiBfdm0ucXVlc3Rpb24ubmFtZSxcbiAgICAgICAgICBpZDogX3ZtLnF1ZXN0aW9uLmdldElucHV0SWQoX3ZtLmluZGV4KSxcbiAgICAgICAgICBkaXNhYmxlZDogX3ZtLnF1ZXN0aW9uLmlzSW5wdXRSZWFkT25seSxcbiAgICAgICAgICBcImFyaWEtcmVxdWlyZWRcIjogX3ZtLnF1ZXN0aW9uLmFyaWFSZXF1aXJlZCxcbiAgICAgICAgICBcImFyaWEtbGFiZWxcIjogX3ZtLnF1ZXN0aW9uLmFyaWFMYWJlbCxcbiAgICAgICAgICBcImFyaWEtaW52YWxpZFwiOiBfdm0ucXVlc3Rpb24uYXJpYUludmFsaWQsXG4gICAgICAgICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6IF92bS5xdWVzdGlvbi5hcmlhRGVzY3JpYmVkQnksXG4gICAgICAgIH0sXG4gICAgICAgIGRvbVByb3BzOiB7IHZhbHVlOiBfdm0uaXRlbS52YWx1ZSB9LFxuICAgICAgICBvbjoge1xuICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIF92bS5xdWVzdGlvbi5zZXRWYWx1ZUZyb21DbGljayhlLnRhcmdldC52YWx1ZSlcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXG4gICAgICAgIFwic3BhblwiLFxuICAgICAgICB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pdGVtVGV4dCB9LFxuICAgICAgICBbX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHsgYXR0cnM6IHsgbG9jU3RyaW5nOiBfdm0uaXRlbS5sb2NUZXh0IH0gfSldLFxuICAgICAgICAxXG4gICAgICApLFxuICAgIF1cbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvY29tcG9uZW50cy9za2VsZXRvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NWJkNDgwZDQmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL2NvbXBvbmVudHMvc2tlbGV0b24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTViZDQ4MGQ0JiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInJlbmRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHJlbmRlcjsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic3RhdGljUmVuZGVyRm5zXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc3RhdGljUmVuZGVyRm5zOyB9KTtcbnZhciByZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFwiZGl2XCIsIHtcbiAgICBzdGF0aWNDbGFzczogXCJzdi1za2VsZXRvbi1lbGVtZW50XCIsXG4gICAgYXR0cnM6IHsgaWQ6IF92bS5lbGVtZW50LmlkIH0sXG4gIH0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9jb21wb25lbnRzL3N1cnZleS1hY3Rpb25zL3N1cnZleS1uYXYtYnV0dG9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zNzYwMTE5ZSZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NyYy92dWUvY29tcG9uZW50cy9zdXJ2ZXktYWN0aW9ucy9zdXJ2ZXktbmF2LWJ1dHRvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9Mzc2MDExOWUmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwicmVuZGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVuZGVyOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzdGF0aWNSZW5kZXJGbnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdGF0aWNSZW5kZXJGbnM7IH0pO1xudmFyIHJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX3ZtLml0ZW0udmlzaWJsZVxuICAgID8gX2MoXCJpbnB1dFwiLCB7XG4gICAgICAgIGNsYXNzOiBfdm0uaXRlbS5pbm5lckNzcyxcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgICAgIGRpc2FibGVkOiBfdm0uaXRlbS5kaXNhYmxlZCxcbiAgICAgICAgICB2YWx1ZTogX3ZtLml0ZW0udGl0bGUsXG4gICAgICAgICAgdGl0bGU6IF92bS5pdGVtLmdldFRvb2x0aXAoKSxcbiAgICAgICAgfSxcbiAgICAgICAgb246IHsgbW91c2Vkb3duOiBfdm0uYnV0dG9uTW91c2VEb3duLCBjbGljazogX3ZtLml0ZW0uYWN0aW9uIH0sXG4gICAgICB9KVxuICAgIDogX3ZtLl9lKClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2NvbXBvbmVudHMvc3ZnLWljb24vc3ZnLWljb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTY4NDc3NmY4JlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL3Z1ZS9jb21wb25lbnRzL3N2Zy1pY29uL3N2Zy1pY29uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02ODQ3NzZmOCYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiByZW5kZXI7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0YXRpY1JlbmRlckZuczsgfSk7XG52YXIgcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcInN2Z1wiLFxuICAgIHtcbiAgICAgIHJlZjogXCJzdmdJY29uXCIsXG4gICAgICBzdGF0aWNDbGFzczogXCJzdi1zdmctaWNvblwiLFxuICAgICAgYXR0cnM6IHsgcm9sZTogXCJpbWdcIiwgXCJhcmlhLWxhYmVsXCI6IF92bS50aXRsZSB9LFxuICAgIH0sXG4gICAgW19jKFwidXNlXCIpXVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9jb21wb25lbnRzL3RhZ2JveC90YWdib3gtZmlsdGVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1kYzJiYzY4NiZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NyYy92dWUvY29tcG9uZW50cy90YWdib3gvdGFnYm94LWZpbHRlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZGMyYmM2ODYmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwicmVuZGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVuZGVyOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzdGF0aWNSZW5kZXJGbnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdGF0aWNSZW5kZXJGbnM7IH0pO1xudmFyIHJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaGludCB9LCBbXG4gICAgX3ZtLm1vZGVsLnNob3dIaW50UHJlZml4XG4gICAgICA/IF9jKFwiZGl2XCIsIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmhpbnRQcmVmaXggfSwgW1xuICAgICAgICAgIF9jKFwic3BhblwiLCBbX3ZtLl92KF92bS5fcyhfdm0ubW9kZWwuaGludFN0cmluZ1ByZWZpeCkpXSksXG4gICAgICAgIF0pXG4gICAgICA6IF92bS5fZSgpLFxuICAgIF92bS5fdihcIiBcIiksXG4gICAgX2MoXG4gICAgICBcImRpdlwiLFxuICAgICAgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaGludFN1ZmZpeFdyYXBwZXIgfSxcbiAgICAgIFtcbiAgICAgICAgX3ZtLnF1ZXN0aW9uLnNob3dTZWxlY3RlZEl0ZW1Mb2NUZXh0XG4gICAgICAgICAgPyBfYyhcInN1cnZleS1zdHJpbmdcIiwge1xuICAgICAgICAgICAgICBhdHRyczogeyBsb2NTdHJpbmc6IF92bS5xdWVzdGlvbi5zZWxlY3RlZEl0ZW1Mb2NUZXh0IH0sXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgIF92bS5tb2RlbC5zaG93SGludFN0cmluZ1xuICAgICAgICAgID8gX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaGludFN1ZmZpeCB9LCBbXG4gICAgICAgICAgICAgIF9jKFwic3BhblwiLCB7IHN0YXRpY1N0eWxlOiB7IHZpc2liaWxpdHk6IFwiaGlkZGVuXCIgfSB9LCBbXG4gICAgICAgICAgICAgICAgX3ZtLl92KF92bS5fcyhfdm0ubW9kZWwuaW5wdXRTdHJpbmdSZW5kZXJlZCkpLFxuICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgX2MoXCJzcGFuXCIsIFtfdm0uX3YoX3ZtLl9zKF92bS5tb2RlbC5oaW50U3RyaW5nU3VmZml4KSldKSxcbiAgICAgICAgICAgIF0pXG4gICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgX2MoXCJpbnB1dFwiLCB7XG4gICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiBcIm1vZGVsXCIsXG4gICAgICAgICAgICAgIHJhd05hbWU6IFwidi1tb2RlbFwiLFxuICAgICAgICAgICAgICB2YWx1ZTogX3ZtLm1vZGVsLmlucHV0U3RyaW5nUmVuZGVyZWQsXG4gICAgICAgICAgICAgIGV4cHJlc3Npb246IFwibW9kZWwuaW5wdXRTdHJpbmdSZW5kZXJlZFwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5maWx0ZXJTdHJpbmdJbnB1dCxcbiAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICBhdXRvY29tcGxldGU6IFwib2ZmXCIsXG4gICAgICAgICAgICBwbGFjZWhvbGRlcjogX3ZtLm1vZGVsLmZpbHRlclN0cmluZ1BsYWNlaG9sZGVyLFxuICAgICAgICAgICAgZGlzYWJsZWQ6IF92bS5xdWVzdGlvbi5pc0lucHV0UmVhZE9ubHksXG4gICAgICAgICAgICBpbnB1dG1vZGU6IF92bS5tb2RlbC5pbnB1dE1vZGUsXG4gICAgICAgICAgICByb2xlOiBfdm0ubW9kZWwuZmlsdGVyU3RyaW5nRW5hYmxlZCA/IF92bS5xdWVzdGlvbi5hcmlhUm9sZSA6IG51bGwsXG4gICAgICAgICAgICBcImFyaWEtbGFiZWxcIjogX3ZtLnF1ZXN0aW9uLnBsYWNlaG9sZGVyLFxuICAgICAgICAgICAgXCJhcmlhLWV4cGFuZGVkXCI6IF92bS5xdWVzdGlvbi5hcmlhRXhwYW5kZWQsXG4gICAgICAgICAgICBcImFyaWEtY29udHJvbHNcIjogX3ZtLm1vZGVsLmxpc3RFbGVtZW50SWQsXG4gICAgICAgICAgICBcImFyaWEtYWN0aXZlZGVzY2VuZGFudFwiOiBfdm0ubW9kZWwuYXJpYUFjdGl2ZWRlc2NlbmRhbnQsXG4gICAgICAgICAgICBpZDogX3ZtLnF1ZXN0aW9uLmdldElucHV0SWQoKSxcbiAgICAgICAgICAgIHJlYWRvbmx5OiAhX3ZtLm1vZGVsLnNlYXJjaEVuYWJsZWQgPyB0cnVlIDogbnVsbCxcbiAgICAgICAgICAgIHNpemU6ICFfdm0ubW9kZWwuaW5wdXRTdHJpbmdSZW5kZXJlZCA/IDEgOiBudWxsLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZG9tUHJvcHM6IHsgdmFsdWU6IF92bS5tb2RlbC5pbnB1dFN0cmluZ1JlbmRlcmVkIH0sXG4gICAgICAgICAgb246IHtcbiAgICAgICAgICAgIGNoYW5nZTogX3ZtLmlucHV0Q2hhbmdlLFxuICAgICAgICAgICAga2V5ZG93bjogX3ZtLmlucHV0S2V5SGFuZGxlcixcbiAgICAgICAgICAgIGJsdXI6IF92bS5ibHVyLFxuICAgICAgICAgICAgZm9jdXM6IF92bS5mb2N1cyxcbiAgICAgICAgICAgIGlucHV0OiBmdW5jdGlvbiAoJGV2ZW50KSB7XG4gICAgICAgICAgICAgIGlmICgkZXZlbnQudGFyZ2V0LmNvbXBvc2luZykge1xuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIF92bS4kc2V0KF92bS5tb2RlbCwgXCJpbnB1dFN0cmluZ1JlbmRlcmVkXCIsICRldmVudC50YXJnZXQudmFsdWUpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgXSxcbiAgICAgIDFcbiAgICApLFxuICBdKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvY29tcG9uZW50cy90YWdib3gvdGFnYm94LWl0ZW0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTQ2Yzc2M2QwJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NyYy92dWUvY29tcG9uZW50cy90YWdib3gvdGFnYm94LWl0ZW0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTQ2Yzc2M2QwJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiByZW5kZXI7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0YXRpY1JlbmRlckZuczsgfSk7XG52YXIgcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcImRpdlwiLCB7IGtleTogX3ZtLml0ZW0ua2V5LCBzdGF0aWNDbGFzczogXCJzdi10YWdib3hfX2l0ZW1cIiB9LCBbXG4gICAgX2MoXG4gICAgICBcImRpdlwiLFxuICAgICAgeyBzdGF0aWNDbGFzczogXCJzdi10YWdib3hfX2l0ZW0tdGV4dFwiIH0sXG4gICAgICBbX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHsgYXR0cnM6IHsgbG9jU3RyaW5nOiBfdm0uaXRlbS5sb2NUZXh0IH0gfSldLFxuICAgICAgMVxuICAgICksXG4gICAgX3ZtLl92KFwiIFwiKSxcbiAgICBfYyhcbiAgICAgIFwiZGl2XCIsXG4gICAgICB7XG4gICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jbGVhbkl0ZW1CdXR0b24sXG4gICAgICAgIG9uOiB7IGNsaWNrOiBfdm0ucmVtb3ZlSXRlbSB9LFxuICAgICAgfSxcbiAgICAgIFtcbiAgICAgICAgX2MoXCJzdi1zdmctaWNvblwiLCB7XG4gICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmNsZWFuSXRlbUJ1dHRvblN2ZyxcbiAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgaWNvbk5hbWU6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmNsZWFuSXRlbUJ1dHRvbkljb25JZCxcbiAgICAgICAgICAgIHNpemU6IFwiYXV0b1wiLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgXSxcbiAgICAgIDFcbiAgICApLFxuICBdKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvY29tcG9uZW50cy90YWdib3gvdGFnYm94LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1hMTVmYzg1MCZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL3Z1ZS9jb21wb25lbnRzL3RhZ2JveC90YWdib3gudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWExNWZjODUwJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwicmVuZGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVuZGVyOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzdGF0aWNSZW5kZXJGbnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdGF0aWNSZW5kZXJGbnM7IH0pO1xudmFyIHJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5zZWxlY3RXcmFwcGVyLCBvbjogeyBjbGljazogX3ZtLmNsaWNrIH0gfSxcbiAgICBbXG4gICAgICAhX3ZtLnF1ZXN0aW9uLmlzUmVhZE9ubHlcbiAgICAgICAgPyBfYyhcbiAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uZ2V0Q29udHJvbENsYXNzKCksXG4gICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgaWQ6IF92bS5xdWVzdGlvbi5pbnB1dElkLFxuICAgICAgICAgICAgICAgIHRhYmluZGV4OiBfdm0ubW9kZWwuaW5wdXRSZWFkT25seSA/IHVuZGVmaW5lZCA6IDAsXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ6IF92bS5xdWVzdGlvbi5pc0lucHV0UmVhZE9ubHksXG4gICAgICAgICAgICAgICAgcm9sZTogX3ZtLnF1ZXN0aW9uLmFyaWFSb2xlLFxuICAgICAgICAgICAgICAgIFwiYXJpYS1yZXF1aXJlZFwiOiBfdm0ucXVlc3Rpb24uYXJpYVJlcXVpcmVkLFxuICAgICAgICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBfdm0ucXVlc3Rpb24uYXJpYUxhYmVsLFxuICAgICAgICAgICAgICAgIFwiYXJpYS1pbnZhbGlkXCI6IF92bS5xdWVzdGlvbi5hcmlhSW52YWxpZCxcbiAgICAgICAgICAgICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjogX3ZtLnF1ZXN0aW9uLmFyaWFEZXNjcmliZWRCeSxcbiAgICAgICAgICAgICAgICBcImFyaWEtZXhwYW5kZWRcIjogX3ZtLnF1ZXN0aW9uLmFyaWFFeHBhbmRlZCxcbiAgICAgICAgICAgICAgICBcImFyaWEtY29udHJvbHNcIjogX3ZtLm1vZGVsLmxpc3RFbGVtZW50SWQsXG4gICAgICAgICAgICAgICAgXCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnRcIjogX3ZtLm1vZGVsLmFyaWFBY3RpdmVkZXNjZW5kYW50LFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiBfdm0ucXVlc3Rpb24uaXNSZXF1aXJlZCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgb246IHsga2V5ZG93bjogX3ZtLmtleWhhbmRsZXIsIGJsdXI6IF92bS5ibHVyIH0sXG4gICAgICAgICAgICAgIG1vZGVsOiB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IF92bS5xdWVzdGlvbi5yZW5kZXJlZFZhbHVlLFxuICAgICAgICAgICAgICAgIGNhbGxiYWNrOiBmdW5jdGlvbiAoJCR2KSB7XG4gICAgICAgICAgICAgICAgICBfdm0uJHNldChfdm0ucXVlc3Rpb24sIFwicmVuZGVyZWRWYWx1ZVwiLCAkJHYpXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcInF1ZXN0aW9uLnJlbmRlcmVkVmFsdWVcIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuY29udHJvbFZhbHVlIH0sXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgX3ZtLl9sKF92bS5xdWVzdGlvbi5zZWxlY3RlZENob2ljZXMsIGZ1bmN0aW9uIChpdGVtLCBpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2MoXCJzdi10YWdib3gtaXRlbVwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAga2V5OiBcIml0ZW1cIiArIGluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IGl0ZW06IGl0ZW0sIHF1ZXN0aW9uOiBfdm0ucXVlc3Rpb24gfSxcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgIF9jKFwic3YtdGFnYm94LWZpbHRlclwiLCB7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IG1vZGVsOiBfdm0ubW9kZWwsIHF1ZXN0aW9uOiBfdm0ucXVlc3Rpb24gfSxcbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24uYWxsb3dDbGVhciAmJlxuICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jbGVhbkJ1dHRvbkljb25JZFxuICAgICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogIV92bS5xdWVzdGlvbi5pc0VtcHR5KCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwiIXF1ZXN0aW9uLmlzRW1wdHkoKVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jbGVhbkJ1dHRvbixcbiAgICAgICAgICAgICAgICAgICAgICBvbjogeyBjbGljazogX3ZtLmNsZWFyIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICBfYyhcInN2LXN2Zy1pY29uXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jbGVhbkJ1dHRvblN2ZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGljb25OYW1lOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jbGVhbkJ1dHRvbkljb25JZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IF92bS5xdWVzdGlvbi5jbGVhckNhcHRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU6IFwiYXV0b1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICBdXG4gICAgICAgICAgKVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICFfdm0ucXVlc3Rpb24uaXNSZWFkT25seVxuICAgICAgICA/IF9jKFwic3YtcG9wdXBcIiwgeyBhdHRyczogeyBtb2RlbDogX3ZtLm1vZGVsLnBvcHVwTW9kZWwgfSB9KVxuICAgICAgICA6IF9jKFxuICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5nZXRDb250cm9sQ2xhc3MoKSxcbiAgICAgICAgICAgICAgYXR0cnM6IHsgZGlzYWJsZWQ6IFwiXCIsIGlkOiBfdm0ucXVlc3Rpb24uaW5wdXRJZCB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtfYyhcImRpdlwiLCBbX3ZtLl92KF92bS5fcyhfdm0ucXVlc3Rpb24ucmVhZE9ubHlUZXh0KSldKV1cbiAgICAgICAgICApLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmNoZXZyb25CdXR0b25JY29uSWRcbiAgICAgICAgPyBfYyhcbiAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jaGV2cm9uQnV0dG9uIH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF9jKFwic3Ytc3ZnLWljb25cIiwge1xuICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jaGV2cm9uQnV0dG9uU3ZnLFxuICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICBpY29uTmFtZTogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuY2hldnJvbkJ1dHRvbkljb25JZCxcbiAgICAgICAgICAgICAgICAgIHNpemU6IFwiYXV0b1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIDFcbiAgICAgICAgICApXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgXSxcbiAgICAxXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2NvbXBvbmVudHMvdGl0bGUvdGl0bGUtYWN0aW9ucy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9YzkzODU1NGMmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NyYy92dWUvY29tcG9uZW50cy90aXRsZS90aXRsZS1hY3Rpb25zLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1jOTM4NTU0YyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInJlbmRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHJlbmRlcjsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic3RhdGljUmVuZGVyRm5zXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc3RhdGljUmVuZGVyRm5zOyB9KTtcbnZhciByZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAgeyBzdGF0aWNDbGFzczogXCJzdi10aXRsZS1hY3Rpb25zXCIgfSxcbiAgICBbXG4gICAgICBfYyhcbiAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgIHsgc3RhdGljQ2xhc3M6IFwic3YtdGl0bGUtYWN0aW9uc19fdGl0bGVcIiB9LFxuICAgICAgICBbXG4gICAgICAgICAgX3ZtLmVsZW1lbnQuaXNQYWdlXG4gICAgICAgICAgICA/IF9jKFwic3VydmV5LXN0cmluZ1wiLCB7XG4gICAgICAgICAgICAgICAgYXR0cnM6IHsgbG9jU3RyaW5nOiBfdm0uZWxlbWVudC5sb2NUaXRsZSB9LFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICFfdm0uZWxlbWVudC5pc1BhZ2VcbiAgICAgICAgICAgID8gX2MoXCJzdXJ2ZXktZWxlbWVudC10aXRsZS1jb250ZW50XCIsIHtcbiAgICAgICAgICAgICAgICBhdHRyczogeyBlbGVtZW50OiBfdm0uZWxlbWVudCwgY3NzOiBfdm0uY3NzIH0sXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICBdLFxuICAgICAgICAxXG4gICAgICApLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFwic3YtYWN0aW9uLWJhclwiLCB7IGF0dHJzOiB7IG1vZGVsOiBfdm0udG9vbGJhciB9IH0pLFxuICAgIF0sXG4gICAgMVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9jb21wb25lbnRzL3RpdGxlL3RpdGxlLWNvbnRlbnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTI0YzBhMmQ2JlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL2NvbXBvbmVudHMvdGl0bGUvdGl0bGUtY29udGVudC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MjRjMGEyZDYmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiByZW5kZXI7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0YXRpY1JlbmRlckZuczsgfSk7XG52YXIgcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHsgc3RhdGljQ2xhc3M6IFwic3YtdnVlLXRpdGxlLWFkZGl0aW9uYWwtZGl2XCIgfSxcbiAgICBbXG4gICAgICBfdm0uZWxlbWVudC5pc1RpdGxlUmVuZGVyZWRBc1N0cmluZ1xuICAgICAgICA/IF9jKFwic3VydmV5LXN0cmluZ1wiLCB7IGF0dHJzOiB7IGxvY1N0cmluZzogX3ZtLmVsZW1lbnQubG9jVGl0bGUgfSB9KVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICFfdm0uZWxlbWVudC5pc1RpdGxlUmVuZGVyZWRBc1N0cmluZyAmJiBfdm0uZWxlbWVudC5pc1JlcXVpcmVUZXh0T25TdGFydFxuICAgICAgICA/IF9jKFxuICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNsYXNzOiBfdm0uZWxlbWVudC5jc3NDbGFzc2VzLnJlcXVpcmVkVGV4dCxcbiAgICAgICAgICAgICAgYXR0cnM6IHsgXCJhcmlhLWhpZGRlblwiOiB0cnVlIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW192bS5fdihfdm0uX3MoX3ZtLmVsZW1lbnQucmVxdWlyZWRUZXh0KSldXG4gICAgICAgICAgKVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICFfdm0uZWxlbWVudC5pc1RpdGxlUmVuZGVyZWRBc1N0cmluZyAmJiBfdm0uZWxlbWVudC5ub1xuICAgICAgICA/IF9jKFxuICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNsYXNzOiBfdm0uZWxlbWVudC5jc3NUaXRsZU51bWJlcixcbiAgICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsgcG9zaXRpb246IFwic3RhdGljXCIgfSxcbiAgICAgICAgICAgICAgYXR0cnM6IHsgXCJhcmlhLWhpZGRlblwiOiB0cnVlIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW192bS5fdihfdm0uX3MoX3ZtLmVsZW1lbnQubm8pKV1cbiAgICAgICAgICApXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgIV92bS5lbGVtZW50LmlzVGl0bGVSZW5kZXJlZEFzU3RyaW5nICYmIF92bS5lbGVtZW50Lm5vXG4gICAgICAgID8gX2MoXCJzcGFuXCIsIFtfdm0uX3YoXCLCoFwiKV0pXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgIV92bS5lbGVtZW50LmlzVGl0bGVSZW5kZXJlZEFzU3RyaW5nICYmXG4gICAgICBfdm0uZWxlbWVudC5pc1JlcXVpcmVUZXh0QmVmb3JlVGl0bGVcbiAgICAgICAgPyBfYyhcbiAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjbGFzczogX3ZtLmVsZW1lbnQuY3NzQ2xhc3Nlcy5yZXF1aXJlZFRleHQsXG4gICAgICAgICAgICAgIGF0dHJzOiB7IFwiYXJpYS1oaWRkZW5cIjogdHJ1ZSB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtfdm0uX3YoX3ZtLl9zKF92bS5lbGVtZW50LnJlcXVpcmVkVGV4dCkpXVxuICAgICAgICAgIClcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAhX3ZtLmVsZW1lbnQuaXNUaXRsZVJlbmRlcmVkQXNTdHJpbmcgJiZcbiAgICAgIF92bS5lbGVtZW50LmlzUmVxdWlyZVRleHRCZWZvcmVUaXRsZVxuICAgICAgICA/IF9jKFwic3BhblwiLCBbX3ZtLl92KFwiwqBcIildKVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICFfdm0uZWxlbWVudC5pc1RpdGxlUmVuZGVyZWRBc1N0cmluZ1xuICAgICAgICA/IF9jKFwic3VydmV5LXN0cmluZ1wiLCB7IGF0dHJzOiB7IGxvY1N0cmluZzogX3ZtLmVsZW1lbnQubG9jVGl0bGUgfSB9KVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICFfdm0uZWxlbWVudC5pc1RpdGxlUmVuZGVyZWRBc1N0cmluZyAmJlxuICAgICAgX3ZtLmVsZW1lbnQuaXNSZXF1aXJlVGV4dEFmdGVyVGl0bGVcbiAgICAgICAgPyBfYyhcInNwYW5cIiwgW192bS5fdihcIsKgXCIpXSlcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAhX3ZtLmVsZW1lbnQuaXNUaXRsZVJlbmRlcmVkQXNTdHJpbmcgJiZcbiAgICAgIF92bS5lbGVtZW50LmlzUmVxdWlyZVRleHRBZnRlclRpdGxlXG4gICAgICAgID8gX2MoXG4gICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY2xhc3M6IF92bS5lbGVtZW50LmNzc0NsYXNzZXMucmVxdWlyZWRUZXh0LFxuICAgICAgICAgICAgICBhdHRyczogeyBcImFyaWEtaGlkZGVuXCI6IHRydWUgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbX3ZtLl92KF92bS5fcyhfdm0uZWxlbWVudC5yZXF1aXJlZFRleHQpKV1cbiAgICAgICAgICApXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgXSxcbiAgICAxXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2NvbXBvbmVudHMvdGl0bGUvdGl0bGUtZWxlbWVudC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NjQxZDkzZDkmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NyYy92dWUvY29tcG9uZW50cy90aXRsZS90aXRsZS1lbGVtZW50LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02NDFkOTNkOSYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInJlbmRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHJlbmRlcjsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic3RhdGljUmVuZGVyRm5zXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc3RhdGljUmVuZGVyRm5zOyB9KTtcbnZhciByZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF92bS5lbGVtZW50Lmhhc1RpdGxlXG4gICAgPyBfYyhcbiAgICAgICAgX3ZtLmVsZW1lbnQudGl0bGVUYWdOYW1lLFxuICAgICAgICB7XG4gICAgICAgICAgdGFnOiBcImNvbXBvbmVudFwiLFxuICAgICAgICAgIGNsYXNzOiBfdm0uZWxlbWVudC5jc3NUaXRsZSxcbiAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IF92bS5lbGVtZW50LnRpdGxlQXJpYUxhYmVsLFxuICAgICAgICAgICAgaWQ6IF92bS5lbGVtZW50LmFyaWFUaXRsZUlkLFxuICAgICAgICAgICAgdGFiaW5kZXg6IF92bS5lbGVtZW50LnRpdGxlVGFiSW5kZXgsXG4gICAgICAgICAgICBcImFyaWEtZXhwYW5kZWRcIjogX3ZtLmVsZW1lbnQudGl0bGVBcmlhRXhwYW5kZWQsXG4gICAgICAgICAgICByb2xlOiBfdm0uZWxlbWVudC50aXRsZUFyaWFSb2xlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgb246IHtcbiAgICAgICAgICAgIGtleXVwOiBmdW5jdGlvbiAoJGV2ZW50KSB7XG4gICAgICAgICAgICAgIF92bS5rZXl1cCgkZXZlbnQpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIFtcbiAgICAgICAgICAhX3ZtLmVsZW1lbnQuaGFzVGl0bGVBY3Rpb25zXG4gICAgICAgICAgICA/IF9jKFwic3VydmV5LWVsZW1lbnQtdGl0bGUtY29udGVudFwiLCB7XG4gICAgICAgICAgICAgICAgYXR0cnM6IHsgZWxlbWVudDogX3ZtLmVsZW1lbnQsIGNzczogX3ZtLmNzcyB9LFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgIF92bS5lbGVtZW50Lmhhc1RpdGxlQWN0aW9uc1xuICAgICAgICAgICAgPyBfYyhcInN2LXRpdGxlLWFjdGlvbnNcIiwge1xuICAgICAgICAgICAgICAgIGF0dHJzOiB7IGVsZW1lbnQ6IF92bS5lbGVtZW50LCBjc3M6IF92bS5jc3MgfSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgIF0sXG4gICAgICAgIDFcbiAgICAgIClcbiAgICA6IF92bS5fZSgpXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9jb21wb3NpdGUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTFhOWUyMTk2JlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL2NvbXBvc2l0ZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MWE5ZTIxOTYmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiByZW5kZXI7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0YXRpY1JlbmRlckZuczsgfSk7XG52YXIgcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcInN1cnZleS1wYW5lbFwiLCB7XG4gICAgYXR0cnM6IHsgcXVlc3Rpb246IF92bS5jb250ZW50UGFuZWwsIGNzczogX3ZtLmNzcyB9LFxuICB9KVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvY3VzdG9tLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1kNGFhZTA5YSZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL3Z1ZS9jdXN0b20udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWQ0YWFlMDlhJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwicmVuZGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVuZGVyOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzdGF0aWNSZW5kZXJGbnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdGF0aWNSZW5kZXJGbnM7IH0pO1xudmFyIHJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoX3ZtLmdldENvbXBvbmVudE5hbWUoX3ZtLmNvbnRlbnRRdWVzdGlvbiksIHtcbiAgICB0YWc6IFwiY29tcG9uZW50XCIsXG4gICAgYXR0cnM6IHsgcXVlc3Rpb246IF92bS5jb250ZW50UXVlc3Rpb24sIGNzczogX3ZtLmNzcyB9LFxuICB9KVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvY3VzdG9td2lkZ2V0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xZTYxYTdiNyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL3Z1ZS9jdXN0b213aWRnZXQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTFlNjFhN2I3JiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwicmVuZGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVuZGVyOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzdGF0aWNSZW5kZXJGbnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdGF0aWNSZW5kZXJGbnM7IH0pO1xudmFyIHJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICBbXG4gICAgICBfdm0uaGFzSHRtbFxuICAgICAgICA/IF9jKFwiZGl2XCIsIHsgZG9tUHJvcHM6IHsgaW5uZXJIVE1MOiBfdm0uX3MoX3ZtLmN1c3RvbUh0bWwpIH0gfSlcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfdm0uaGFzRGVmYXVsdFJlbmRlclxuICAgICAgICA/IF9jKF92bS5jb21wb25lbnROYW1lLCB7XG4gICAgICAgICAgICB0YWc6IFwiY29tcG9uZW50XCIsXG4gICAgICAgICAgICBhdHRyczogeyBxdWVzdGlvbjogX3ZtLnF1ZXN0aW9uLCBjc3M6IF92bS5jc3MgfSxcbiAgICAgICAgICB9KVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgIF0sXG4gICAgMVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9kcm9wZG93bi1zZWxlY3QudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTgxOTllYzM0JlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL2Ryb3Bkb3duLXNlbGVjdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ODE5OWVjMzQmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiByZW5kZXI7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0YXRpY1JlbmRlckZuczsgfSk7XG52YXIgcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5yZW5kZXJDc3NSb290IH0sXG4gICAgW1xuICAgICAgX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuc2VsZWN0V3JhcHBlciB9LCBbXG4gICAgICAgICFfdm0ucXVlc3Rpb24uaXNSZWFkT25seVxuICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgIFwic2VsZWN0XCIsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwibW9kZWxcIixcbiAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LW1vZGVsXCIsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0ucXVlc3Rpb24ucmVuZGVyZWRWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJxdWVzdGlvbi5yZW5kZXJlZFZhbHVlXCIsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5nZXRDb250cm9sQ2xhc3MoKSxcbiAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgaWQ6IF92bS5xdWVzdGlvbi5pbnB1dElkLFxuICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlOiBfdm0ucXVlc3Rpb24uYXV0b2NvbXBsZXRlLFxuICAgICAgICAgICAgICAgICAgXCJhcmlhLXJlcXVpcmVkXCI6IF92bS5xdWVzdGlvbi5hcmlhUmVxdWlyZWQsXG4gICAgICAgICAgICAgICAgICBcImFyaWEtbGFiZWxcIjogX3ZtLnF1ZXN0aW9uLmFyaWFMYWJlbCxcbiAgICAgICAgICAgICAgICAgIFwiYXJpYS1pbnZhbGlkXCI6IF92bS5xdWVzdGlvbi5hcmlhSW52YWxpZCxcbiAgICAgICAgICAgICAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOiBfdm0ucXVlc3Rpb24uYXJpYURlc2NyaWJlZEJ5LFxuICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6IF92bS5xdWVzdGlvbi5pc1JlcXVpcmVkLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgIGNsaWNrOiBfdm0uY2xpY2ssXG4gICAgICAgICAgICAgICAgICBrZXl1cDogX3ZtLmtleVVwLFxuICAgICAgICAgICAgICAgICAgY2hhbmdlOiBmdW5jdGlvbiAoJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciAkJHNlbGVjdGVkVmFsID0gQXJyYXkucHJvdG90eXBlLmZpbHRlclxuICAgICAgICAgICAgICAgICAgICAgIC5jYWxsKCRldmVudC50YXJnZXQub3B0aW9ucywgZnVuY3Rpb24gKG8pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvLnNlbGVjdGVkXG4gICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAubWFwKGZ1bmN0aW9uIChvKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsID0gXCJfdmFsdWVcIiBpbiBvID8gby5fdmFsdWUgOiBvLnZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsXG4gICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgX3ZtLiRzZXQoXG4gICAgICAgICAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgIFwicmVuZGVyZWRWYWx1ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICRldmVudC50YXJnZXQubXVsdGlwbGUgPyAkJHNlbGVjdGVkVmFsIDogJCRzZWxlY3RlZFZhbFswXVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24uYWxsb3dDbGVhclxuICAgICAgICAgICAgICAgICAgPyBfYyhcIm9wdGlvblwiLCB7IGRvbVByb3BzOiB7IHZhbHVlOiB1bmRlZmluZWQgfSB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KF92bS5fcyhfdm0ucXVlc3Rpb24ucGxhY2Vob2xkZXIpKSxcbiAgICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICBfdm0uX2woX3ZtLnF1ZXN0aW9uLnZpc2libGVDaG9pY2VzLCBmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jKFwic3YtZHJvcGRvd24tb3B0aW9uLWl0ZW1cIiwge1xuICAgICAgICAgICAgICAgICAgICBrZXk6IGl0ZW0uaWQsXG4gICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IGl0ZW06IGl0ZW0gfSxcbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IF9jKFxuICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5nZXRDb250cm9sQ2xhc3MoKSxcbiAgICAgICAgICAgICAgICBhdHRyczogeyBkaXNhYmxlZDogXCJcIiwgaWQ6IF92bS5xdWVzdGlvbi5pbnB1dElkIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFtfdm0uX3YoX3ZtLl9zKF92bS5xdWVzdGlvbi5yZWFkT25seVRleHQpKV1cbiAgICAgICAgICAgICksXG4gICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgIF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmNoZXZyb25CdXR0b25JY29uSWRcbiAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jaGV2cm9uQnV0dG9uIH0sXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBfYyhcInN2LXN2Zy1pY29uXCIsIHtcbiAgICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jaGV2cm9uQnV0dG9uU3ZnLFxuICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgaWNvbk5hbWU6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmNoZXZyb25CdXR0b25JY29uSWQsXG4gICAgICAgICAgICAgICAgICAgIHNpemU6IFwiYXV0b1wiLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBdKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfdm0ucXVlc3Rpb24uaXNPdGhlclNlbGVjdGVkXG4gICAgICAgID8gX2MoXCJzdXJ2ZXktb3RoZXItY2hvaWNlXCIsIHsgYXR0cnM6IHsgcXVlc3Rpb246IF92bS5xdWVzdGlvbiB9IH0pXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgXSxcbiAgICAxXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2Ryb3Bkb3duLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02YjMyMTVkMyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL2Ryb3Bkb3duLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02YjMyMTVkMyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwicmVuZGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVuZGVyOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzdGF0aWNSZW5kZXJGbnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdGF0aWNSZW5kZXJGbnM7IH0pO1xudmFyIHJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICB7IGNsYXNzOiBfdm0ucXVlc3Rpb24ucmVuZGVyQ3NzUm9vdCB9LFxuICAgIFtcbiAgICAgIF9jKFwic3YtZHJvcGRvd25cIiwgeyBhdHRyczogeyBxdWVzdGlvbjogX3ZtLnF1ZXN0aW9uIH0gfSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLnF1ZXN0aW9uLmlzT3RoZXJTZWxlY3RlZFxuICAgICAgICA/IF9jKFwic3VydmV5LW90aGVyLWNob2ljZVwiLCB7IGF0dHJzOiB7IHF1ZXN0aW9uOiBfdm0ucXVlc3Rpb24gfSB9KVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgIF0sXG4gICAgMVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9lbGVtZW50LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD05NzM0NzJhYyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NyYy92dWUvZWxlbWVudC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9OTczNDcyYWMmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwicmVuZGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVuZGVyOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzdGF0aWNSZW5kZXJGbnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdGF0aWNSZW5kZXJGbnM7IH0pO1xudmFyIHJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX3ZtLnJvdy5pc05lZWRSZW5kZXJcbiAgICA/IF9jKFxuICAgICAgICBcImRpdlwiLFxuICAgICAgICB7XG4gICAgICAgICAgY2xhc3M6ICFfdm0uZWxlbWVudC5pc1BhbmVsID8gX3ZtLmVsZW1lbnQuZ2V0Um9vdENzcygpIDogbnVsbCxcbiAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgaWQ6IF92bS5lbGVtZW50LmlkLFxuICAgICAgICAgICAgcm9sZTogX3ZtLmVsZW1lbnQuYXJpYVJvbGUsXG4gICAgICAgICAgICBcImFyaWEtcmVxdWlyZWRcIjogX3ZtLmVsZW1lbnQuYXJpYVJlcXVpcmVkLFxuICAgICAgICAgICAgXCJhcmlhLWludmFsaWRcIjogX3ZtLmVsZW1lbnQuYXJpYUludmFsaWQsXG4gICAgICAgICAgICBcImFyaWEtbGFiZWxsZWRieVwiOiBfdm0uZWxlbWVudC5hcmlhTGFiZWxsZWRCeSxcbiAgICAgICAgICAgIFwiYXJpYS1leHBhbmRlZFwiOiBfdm0uZWxlbWVudC5hcmlhRXhwYW5kZWQsXG4gICAgICAgICAgICBcImRhdGEtbmFtZVwiOiBfdm0uZWxlbWVudC5uYW1lLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgb246IHtcbiAgICAgICAgICAgIGZvY3VzaW46IGZ1bmN0aW9uICgkZXZlbnQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIF92bS5lbGVtZW50LmZvY3VzSW4oKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBbXG4gICAgICAgICAgIV92bS5lbGVtZW50LmlzUGFuZWwgJiYgX3ZtLmVsZW1lbnQuc2hvd0Vycm9yc0Fib3ZlUXVlc3Rpb25cbiAgICAgICAgICAgID8gX2MoXCJzdXJ2ZXktZXJyb3JzXCIsIHtcbiAgICAgICAgICAgICAgICBhdHRyczogeyBlbGVtZW50OiBfdm0uZWxlbWVudCwgbG9jYXRpb246IFwidG9wXCIgfSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAhX3ZtLmVsZW1lbnQuaXNQYW5lbCAmJiBfdm0uZWxlbWVudC5oYXNUaXRsZU9uTGVmdFRvcFxuICAgICAgICAgICAgPyBfYyhcInN1cnZleS1lbGVtZW50LWhlYWRlclwiLCB7XG4gICAgICAgICAgICAgICAgYXR0cnM6IHsgZWxlbWVudDogX3ZtLmVsZW1lbnQsIGNzczogX3ZtLmNzcyB9LFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0uZWxlbWVudC5pc1BhbmVsIHx8ICFfdm0uZWxlbWVudC5pc0NvbGxhcHNlZCxcbiAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwiZWxlbWVudC5pc1BhbmVsIHx8ICFlbGVtZW50LmlzQ29sbGFwc2VkXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgY2xhc3M6IF92bS5nZXRDb250ZW50Q2xhc3MoX3ZtLmVsZW1lbnQpIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgYXR0cnM6IHsgcm9sZTogXCJwcmVzZW50YXRpb25cIiB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX3ZtLmhhc0Vycm9yc09uVG9wXG4gICAgICAgICAgICAgICAgPyBfYyhcInN1cnZleS1lcnJvcnNcIiwge1xuICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBlbGVtZW50OiBfdm0uZWxlbWVudCwgbG9jYXRpb246IFwidG9wXCIgfSxcbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgX3ZtLmVsZW1lbnQuaXNQYW5lbCB8fCAhX3ZtLmVsZW1lbnQuaXNDb2xsYXBzZWRcbiAgICAgICAgICAgICAgICA/IF9jKF92bS5nZXRDb21wb25lbnROYW1lKF92bS5lbGVtZW50KSwge1xuICAgICAgICAgICAgICAgICAgICB0YWc6IFwiY29tcG9uZW50XCIsXG4gICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHF1ZXN0aW9uOiBfdm0uZWxlbWVudCwgY3NzOiBfdm0uY3NzIH0sXG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgIF92bS5lbGVtZW50Lmhhc0NvbW1lbnRcbiAgICAgICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgICAgICB7IGNsYXNzOiBfdm0uZWxlbWVudC5nZXRDb21tZW50QXJlYUNzcygpIH0sXG4gICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFwic3VydmV5LXN0cmluZ1wiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgbG9jU3RyaW5nOiBfdm0uZWxlbWVudC5sb2NDb21tZW50VGV4dCB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICAgIF9jKFwic3VydmV5LXF1ZXN0aW9uLWNvbW1lbnRcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudENsYXNzOiBfdm0uY3NzLmNvbW1lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uOiBfdm0uZWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICBfdm0uaGFzRXJyb3JzT25Cb3R0b21cbiAgICAgICAgICAgICAgICA/IF9jKFwic3VydmV5LWVycm9yc1wiLCB7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IGVsZW1lbnQ6IF92bS5lbGVtZW50LCBsb2NhdGlvbjogXCJib3R0b21cIiB9LFxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAhX3ZtLmVsZW1lbnQuaXNQYW5lbCAmJiBfdm0uZWxlbWVudC5oYXNEZXNjcmlwdGlvblVuZGVySW5wdXRcbiAgICAgICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgICAgICB7IGNsYXNzOiBfdm0uZWxlbWVudC5jc3NDbGFzc2VzLmRlc2NyaXB0aW9uVW5kZXJJbnB1dCB9LFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IGxvY1N0cmluZzogX3ZtLmVsZW1lbnQubG9jRGVzY3JpcHRpb24gfSxcbiAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgMVxuICAgICAgICAgICksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAhX3ZtLmVsZW1lbnQuaXNQYW5lbCAmJiBfdm0uZWxlbWVudC5oYXNUaXRsZU9uQm90dG9tXG4gICAgICAgICAgICA/IF9jKFwic3VydmV5LWVsZW1lbnQtaGVhZGVyXCIsIHtcbiAgICAgICAgICAgICAgICBhdHRyczogeyBlbGVtZW50OiBfdm0uZWxlbWVudCwgY3NzOiBfdm0uY3NzIH0sXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgIV92bS5lbGVtZW50LmlzUGFuZWwgJiYgX3ZtLmVsZW1lbnQuc2hvd0Vycm9yc0JlbG93UXVlc3Rpb25cbiAgICAgICAgICAgID8gX2MoXCJzdXJ2ZXktZXJyb3JzXCIsIHtcbiAgICAgICAgICAgICAgICBhdHRyczogeyBlbGVtZW50OiBfdm0uZWxlbWVudCwgbG9jYXRpb246IFwiYm90dG9tXCIgfSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgIF0sXG4gICAgICAgIDFcbiAgICAgIClcbiAgICA6ICEhX3ZtLmVsZW1lbnQuc2tlbGV0b25Db21wb25lbnROYW1lXG4gICAgPyBfYyhfdm0uZWxlbWVudC5za2VsZXRvbkNvbXBvbmVudE5hbWUsIHtcbiAgICAgICAgdGFnOiBcImNvbXBvbmVudFwiLFxuICAgICAgICBhdHRyczogeyBlbGVtZW50OiBfdm0uZWxlbWVudCwgY3NzOiBfdm0uY3NzIH0sXG4gICAgICB9KVxuICAgIDogX3ZtLl9lKClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2VsZW1lbnRoZWFkZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTI3YWRjNTM3JlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL3Z1ZS9lbGVtZW50aGVhZGVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yN2FkYzUzNyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiByZW5kZXI7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0YXRpY1JlbmRlckZuczsgfSk7XG52YXIgcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHsgY2xhc3M6IF92bS5lbGVtZW50LmNzc0hlYWRlciwgb246IHsgY2xpY2s6IF92bS5jbGlja1RpdGxlRnVuY3Rpb24gfSB9LFxuICAgIFtcbiAgICAgIF9jKFwic3VydmV5LWVsZW1lbnQtdGl0bGVcIiwge1xuICAgICAgICBhdHRyczogeyBlbGVtZW50OiBfdm0uZWxlbWVudCwgY3NzOiBfdm0uY3NzIH0sXG4gICAgICB9KSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfdm0uZWxlbWVudC5oYXNEZXNjcmlwdGlvblVuZGVyVGl0bGVcbiAgICAgICAgPyBfYyhcbiAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLmVsZW1lbnQuaGFzRGVzY3JpcHRpb24sXG4gICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcImVsZW1lbnQuaGFzRGVzY3JpcHRpb25cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICBjbGFzczogX3ZtLmVsZW1lbnQuY3NzRGVzY3JpcHRpb24sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfYyhcInN1cnZleS1zdHJpbmdcIiwge1xuICAgICAgICAgICAgICAgIGF0dHJzOiB7IGxvY1N0cmluZzogX3ZtLmVsZW1lbnQubG9jRGVzY3JpcHRpb24gfSxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgMVxuICAgICAgICAgIClcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAhIV92bS5lbGVtZW50LmFkZGl0aW9uYWxUaXRsZVRvb2xiYXJcbiAgICAgICAgPyBfYyhcInN2LWFjdGlvbi1iYXJcIiwge1xuICAgICAgICAgICAgYXR0cnM6IHsgbW9kZWw6IF92bS5lbGVtZW50LmFkZGl0aW9uYWxUaXRsZVRvb2xiYXIgfSxcbiAgICAgICAgICB9KVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgIF0sXG4gICAgMVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9lbXB0eS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MDUwNTJjMGEmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL3Z1ZS9lbXB0eS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MDUwNTJjMGEmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInJlbmRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHJlbmRlcjsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic3RhdGljUmVuZGVyRm5zXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc3RhdGljUmVuZGVyRm5zOyB9KTtcbnZhciByZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFwiZGl2XCIpXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9lcnJvcnMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTU2ODJlNmFkJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL2Vycm9ycy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NTY4MmU2YWQmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiByZW5kZXI7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0YXRpY1JlbmRlckZuczsgfSk7XG52YXIgcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfdm0uZWxlbWVudC5oYXNWaXNpYmxlRXJyb3JzXG4gICAgPyBfYyhcbiAgICAgICAgXCJkaXZcIixcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzOiBfdm0uZWxlbWVudC5jc3NFcnJvcixcbiAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgcm9sZTogXCJhbGVydFwiLFxuICAgICAgICAgICAgXCJhcmlhLWxpdmVcIjogXCJwb2xpdGVcIixcbiAgICAgICAgICAgIGlkOiBfdm0uZWxlbWVudC5pZCArIFwiX2Vycm9yc1wiLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIF92bS5fbChfdm0uZWxlbWVudC5lcnJvcnMsIGZ1bmN0aW9uIChlcnJvciwgaW5kZXgpIHtcbiAgICAgICAgICByZXR1cm4gX2MoXCJkaXZcIiwgeyBrZXk6IFwiZXJyb3JfXCIgKyBpbmRleCB9LCBbXG4gICAgICAgICAgICBfYyhcInNwYW5cIiwge1xuICAgICAgICAgICAgICBjbGFzczogX3ZtLmVsZW1lbnQuY3NzQ2xhc3Nlc1xuICAgICAgICAgICAgICAgID8gX3ZtLmVsZW1lbnQuY3NzQ2xhc3Nlcy5lcnJvci5pY29uIHx8IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgIDogXCJwYW5lbC1lcnJvci1pY29uXCIsXG4gICAgICAgICAgICAgIGF0dHJzOiB7IFwiYXJpYS1oaWRkZW5cIjogXCJ0cnVlXCIgfSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0uZWxlbWVudC5jc3NDbGFzc2VzXG4gICAgICAgICAgICAgICAgICA/IF92bS5lbGVtZW50LmNzc0NsYXNzZXMuZXJyb3IuaXRlbSB8fCB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgIDogXCJwYW5lbC1lcnJvci1pdGVtXCIsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFtfYyhcInN1cnZleS1zdHJpbmdcIiwgeyBhdHRyczogeyBsb2NTdHJpbmc6IGVycm9yLmxvY1RleHQgfSB9KV0sXG4gICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICksXG4gICAgICAgICAgXSlcbiAgICAgICAgfSksXG4gICAgICAgIDBcbiAgICAgIClcbiAgICA6IF92bS5fZSgpXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9leHByZXNzaW9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xZDIwODY1YSZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NyYy92dWUvZXhwcmVzc2lvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MWQyMDg2NWEmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwicmVuZGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVuZGVyOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzdGF0aWNSZW5kZXJGbnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdGF0aWNSZW5kZXJGbnM7IH0pO1xudmFyIHJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMudGV4dCB9LCBbXG4gICAgX3ZtLl92KF92bS5fcyhfdm0ucXVlc3Rpb24uZm9ybWF0ZWRWYWx1ZSkpLFxuICBdKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvZmlsZS1jbGVhbi1idXR0b24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTI5Yzg5MmQ2JlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NyYy92dWUvZmlsZS1jbGVhbi1idXR0b24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTI5Yzg5MmQ2JiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiByZW5kZXI7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0YXRpY1JlbmRlckZuczsgfSk7XG52YXIgcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImJ1dHRvblwiLFxuICAgIHtcbiAgICAgIGNsYXNzOiBfdm0uY3NzLFxuICAgICAgYXR0cnM6IHsgdHlwZTogXCJidXR0b25cIiB9LFxuICAgICAgb246IHsgY2xpY2s6IF92bS5xdWVzdGlvbi5kb0NsZWFuIH0sXG4gICAgfSxcbiAgICBbXG4gICAgICBfYyhcInNwYW5cIiwgW192bS5fdihfdm0uX3MoX3ZtLnF1ZXN0aW9uLmNsZWFyQnV0dG9uQ2FwdGlvbikpXSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMucmVtb3ZlQnV0dG9uSWNvbklkXG4gICAgICAgID8gX2MoXCJzdi1zdmctaWNvblwiLCB7XG4gICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICBpY29uTmFtZTogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMucmVtb3ZlQnV0dG9uSWNvbklkLFxuICAgICAgICAgICAgICBzaXplOiBcImF1dG9cIixcbiAgICAgICAgICAgICAgdGl0bGU6IF92bS5xdWVzdGlvbi5jbGVhckJ1dHRvbkNhcHRpb24sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgXSxcbiAgICAxXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2ZpbGUtcHJldmlldy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NmI4NjZiOGUmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NyYy92dWUvZmlsZS1wcmV2aWV3LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02Yjg2NmI4ZSYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInJlbmRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHJlbmRlcjsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic3RhdGljUmVuZGVyRm5zXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc3RhdGljUmVuZGVyRm5zOyB9KTtcbnZhciByZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuZmlsZUxpc3QgfHwgdW5kZWZpbmVkIH0sXG4gICAgX3ZtLl9sKF92bS5xdWVzdGlvbi5wcmV2aWV3VmFsdWUsIGZ1bmN0aW9uICh2YWwsIGluZGV4KSB7XG4gICAgICByZXR1cm4gX2MoXG4gICAgICAgIFwic3BhblwiLFxuICAgICAgICB7XG4gICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgICAgdmFsdWU6IHZhbCAmJiBfdm0uaXNQcmV2aWV3VmlzaWJsZShpbmRleCksXG4gICAgICAgICAgICAgIGV4cHJlc3Npb246IFwidmFsICYmIGlzUHJldmlld1Zpc2libGUoaW5kZXgpXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAga2V5OiBfdm0ucXVlc3Rpb24uaW5wdXRJZCArIFwiX1wiICsgaW5kZXgsXG4gICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLnByZXZpZXcsXG4gICAgICAgIH0sXG4gICAgICAgIFtcbiAgICAgICAgICB2YWwubmFtZSAmJiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5maWxlU2lnblxuICAgICAgICAgICAgPyBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5maWxlU2lnbiB9LCBbXG4gICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICBcImFcIixcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU6IHsgd2lkdGg6IF92bS5xdWVzdGlvbi5pbWFnZVdpZHRoIH0sXG4gICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgaHJlZjogdmFsLmNvbnRlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHZhbC5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgIGRvd25sb2FkOiB2YWwubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS5xdWVzdGlvbi5kb0Rvd25sb2FkRmlsZSgkZXZlbnQsIHZhbClcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIFtfdm0uX3YoX3ZtLl9zKHZhbC5uYW1lKSldXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICBfYyhcbiAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pbWFnZVdyYXBwZXIgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLmNhblByZXZpZXdJbWFnZSh2YWwpXG4gICAgICAgICAgICAgICAgPyBfYyhcImltZ1wiLCB7XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBfdm0ucXVlc3Rpb24uaW1hZ2VIZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IF92bS5xdWVzdGlvbi5pbWFnZVdpZHRoLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBzcmM6IHZhbC5jb250ZW50LCBhbHQ6IFwiRmlsZSBwcmV2aWV3XCIgfSxcbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLmRlZmF1bHRJbWFnZSh2YWwpXG4gICAgICAgICAgICAgICAgPyBfYyhcInN2LXN2Zy1pY29uXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmRlZmF1bHRJbWFnZSxcbiAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICBpY29uTmFtZTogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuZGVmYXVsdEltYWdlSWNvbklkLFxuICAgICAgICAgICAgICAgICAgICAgIHNpemU6IFwiYXV0b1wiLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICB2YWwubmFtZSAmJiAhX3ZtLnF1ZXN0aW9uLmlzUmVhZE9ubHlcbiAgICAgICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5nZXRSZW1vdmVCdXR0b25Dc3MoKSxcbiAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uICgkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS5xdWVzdGlvbi5kb1JlbW92ZUZpbGUodmFsKVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLnJlbW92ZUZpbGUgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtfdm0uX3YoX3ZtLl9zKF92bS5xdWVzdGlvbi5yZW1vdmVGaWxlQ2FwdGlvbikpXVxuICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yZW1vdmVGaWxlU3ZnSWNvbklkXG4gICAgICAgICAgICAgICAgICAgICAgICA/IF9jKFwic3Ytc3ZnLWljb25cIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yZW1vdmVGaWxlU3ZnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogX3ZtLnF1ZXN0aW9uLnJlbW92ZUZpbGVDYXB0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbk5hbWU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLnJlbW92ZUZpbGVTdmdJY29uSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplOiBcImF1dG9cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgMVxuICAgICAgICAgICksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICB2YWwubmFtZSAmJiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5maWxlU2lnbkJvdHRvbVxuICAgICAgICAgICAgPyBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5maWxlU2lnbkJvdHRvbSB9LCBbXG4gICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICBcImFcIixcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU6IHsgd2lkdGg6IF92bS5xdWVzdGlvbi5pbWFnZVdpZHRoIH0sXG4gICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgaHJlZjogdmFsLmNvbnRlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHZhbC5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgIGRvd25sb2FkOiB2YWwubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS5xdWVzdGlvbi5kb0Rvd25sb2FkRmlsZSgkZXZlbnQsIHZhbClcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIFtfdm0uX3YoX3ZtLl9zKHZhbC5uYW1lKSldXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgIF1cbiAgICAgIClcbiAgICB9KSxcbiAgICAwXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2ZpbGUtdmlkZW8udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTdiNWM4YmFjJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL3Z1ZS9maWxlLXZpZGVvLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03YjVjOGJhYyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiByZW5kZXI7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0YXRpY1JlbmRlckZuczsgfSk7XG52YXIgcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLnZpZGVvQ29udGFpbmVyIH0sXG4gICAgW1xuICAgICAgX2MoXCJzdi1hY3Rpb25cIiwgeyBhdHRyczogeyBpdGVtOiBfdm0ucXVlc3Rpb24uY2hhbmdlQ2FtZXJhQWN0aW9uIH0gfSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXCJzdi1hY3Rpb25cIiwgeyBhdHRyczogeyBpdGVtOiBfdm0ucXVlc3Rpb24uY2xvc2VDYW1lcmFBY3Rpb24gfSB9KSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcInZpZGVvXCIsIHtcbiAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLnZpZGVvLFxuICAgICAgICBhdHRyczogeyBhdXRvcGxheTogXCJcIiwgcGxheXNpbmxpbmU6IFwiXCIsIGlkOiBfdm0ucXVlc3Rpb24udmlkZW9JZCB9LFxuICAgICAgfSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXCJzdi1hY3Rpb25cIiwgeyBhdHRyczogeyBpdGVtOiBfdm0ucXVlc3Rpb24udGFrZVBpY3R1cmVBY3Rpb24gfSB9KSxcbiAgICBdLFxuICAgIDFcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvZmlsZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MjBmNzAyODQmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL2ZpbGUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTIwZjcwMjg0JiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInJlbmRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHJlbmRlcjsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic3RhdGljUmVuZGVyRm5zXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc3RhdGljUmVuZGVyRm5zOyB9KTtcbnZhciByZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFwiZGl2XCIsIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5maWxlUm9vdENzcyB9LCBbXG4gICAgIV92bS5xdWVzdGlvbi5pc1JlYWRPbmx5ICYmIF92bS5xdWVzdGlvbi5oYXNGaWxlVUlcbiAgICAgID8gX2MoXCJpbnB1dFwiLCB7XG4gICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmZpbGVJbnB1dCxcbiAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgdGFiaW5kZXg6IFwiLTFcIixcbiAgICAgICAgICAgIHR5cGU6IFwiZmlsZVwiLFxuICAgICAgICAgICAgaWQ6IF92bS5xdWVzdGlvbi5pbnB1dElkLFxuICAgICAgICAgICAgXCJhcmlhLXJlcXVpcmVkXCI6IF92bS5xdWVzdGlvbi5hcmlhUmVxdWlyZWQsXG4gICAgICAgICAgICBcImFyaWEtbGFiZWxcIjogX3ZtLnF1ZXN0aW9uLmFyaWFMYWJlbCxcbiAgICAgICAgICAgIFwiYXJpYS1pbnZhbGlkXCI6IF92bS5xdWVzdGlvbi5hcmlhSW52YWxpZCxcbiAgICAgICAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOiBfdm0ucXVlc3Rpb24uYXJpYURlc2NyaWJlZEJ5LFxuICAgICAgICAgICAgbXVsdGlwbGU6IF92bS5xdWVzdGlvbi5hbGxvd011bHRpcGxlLFxuICAgICAgICAgICAgdGl0bGU6IF92bS5xdWVzdGlvbi5pbnB1dFRpdGxlLFxuICAgICAgICAgICAgYWNjZXB0OiBfdm0ucXVlc3Rpb24uYWNjZXB0ZWRUeXBlcyxcbiAgICAgICAgICAgIGNhcHR1cmU6IF92bS5xdWVzdGlvbi5yZW5kZXJDYXB0dXJlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgb246IHsgY2hhbmdlOiBfdm0ucXVlc3Rpb24uZG9DaGFuZ2UgfSxcbiAgICAgICAgfSlcbiAgICAgIDogX3ZtLl9lKCksXG4gICAgX3ZtLl92KFwiIFwiKSxcbiAgICBfdm0ucXVlc3Rpb24uaXNSZWFkT25seVxuICAgICAgPyBfYyhcImlucHV0XCIsIHtcbiAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmdldFJlYWRPbmx5RmlsZUNzcygpLFxuICAgICAgICAgIHN0YXRpY1N0eWxlOiB7IGNvbG9yOiBcInRyYW5zcGFyZW50XCIgfSxcbiAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgdHlwZTogXCJmaWxlXCIsXG4gICAgICAgICAgICBkaXNhYmxlZDogXCJcIixcbiAgICAgICAgICAgIGlkOiBfdm0ucXVlc3Rpb24uaW5wdXRJZCxcbiAgICAgICAgICAgIG11bHRpcGxlOiBfdm0ucXVlc3Rpb24uYWxsb3dNdWx0aXBsZSxcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBfdm0ucXVlc3Rpb24udGl0bGUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgIDogX3ZtLl9lKCksXG4gICAgX3ZtLl92KFwiIFwiKSxcbiAgICBfYyhcbiAgICAgIFwiZGl2XCIsXG4gICAgICB7XG4gICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5kcmFnQXJlYSxcbiAgICAgICAgb246IHtcbiAgICAgICAgICBkcm9wOiBfdm0ucXVlc3Rpb24ub25Ecm9wLFxuICAgICAgICAgIGRyYWdvdmVyOiBfdm0ucXVlc3Rpb24ub25EcmFnT3ZlcixcbiAgICAgICAgICBkcmFnbGVhdmU6IF92bS5xdWVzdGlvbi5vbkRyYWdMZWF2ZSxcbiAgICAgICAgICBkcmFnZW50ZXI6IF92bS5xdWVzdGlvbi5vbkRyYWdFbnRlcixcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBbXG4gICAgICAgIF92bS5xdWVzdGlvbi5zaG93RmlsZURlY29yYXRvclxuICAgICAgICAgID8gX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmdldEZpbGVEZWNvcmF0b3JDc3MoKSB9LCBbXG4gICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgICAgIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmRyYWdBcmVhUGxhY2Vob2xkZXIgfSxcbiAgICAgICAgICAgICAgICBbX3ZtLl92KF92bS5fcyhfdm0ucXVlc3Rpb24ucmVuZGVyZWRQbGFjZWhvbGRlcikpXVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLndyYXBwZXIgfSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24uc2hvd0Nob29zZUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICA/IF9jKFwic3YtZmlsZS1jaG9vc2UtYnRuXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IGRhdGE6IHsgcXVlc3Rpb246IF92bS5xdWVzdGlvbiB9IH0sXG4gICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24uYWN0aW9uc0NvbnRhaW5lclZpc2libGVcbiAgICAgICAgICAgICAgICAgICAgPyBfYyhcInN2LWFjdGlvbi1iYXJcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgbW9kZWw6IF92bS5xdWVzdGlvbi5hY3Rpb25zQ29udGFpbmVyIH0sXG4gICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24uaXNFbXB0eSgpXG4gICAgICAgICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLm5vRmlsZUNob3NlbiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgW192bS5fdihfdm0uX3MoX3ZtLnF1ZXN0aW9uLm5vRmlsZUNob3NlbkNhcHRpb24pKV1cbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICBdKVxuICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgIF92bS5xdWVzdGlvbi5zaG93UmVtb3ZlQnV0dG9uXG4gICAgICAgICAgPyBfYyhcInN2LWZpbGUtY2xlYW4tYnRuXCIsIHtcbiAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICBxdWVzdGlvbjogX3ZtLnF1ZXN0aW9uLFxuICAgICAgICAgICAgICAgIGNzczogX3ZtLnF1ZXN0aW9uLnNob3dSZW1vdmVCdXR0b24sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgIF92bS5xdWVzdGlvbi5zaG93TG9hZGluZ0luZGljYXRvclxuICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmxvYWRpbmdJbmRpY2F0b3IgfSxcbiAgICAgICAgICAgICAgW19jKFwic3YtbG9hZGluZy1pbmRpY2F0b3JcIildLFxuICAgICAgICAgICAgICAxXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgX3ZtLnF1ZXN0aW9uLmlzUGxheWluZ1ZpZGVvXG4gICAgICAgICAgPyBfYyhcInN2LWZpbGUtdmlkZW9cIiwgeyBhdHRyczogeyBxdWVzdGlvbjogX3ZtLnF1ZXN0aW9uIH0gfSlcbiAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICBfdm0ucXVlc3Rpb24uYWxsb3dTaG93UHJldmlld1xuICAgICAgICAgID8gW19jKFwic3YtZmlsZS1wcmV2aWV3XCIsIHsgYXR0cnM6IHsgcXVlc3Rpb246IF92bS5xdWVzdGlvbiB9IH0pXVxuICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgIF92bS5xdWVzdGlvbi5zaG93UmVtb3ZlQnV0dG9uQm90dG9tXG4gICAgICAgICAgPyBfYyhcInN2LWZpbGUtY2xlYW4tYnRuXCIsIHtcbiAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICBxdWVzdGlvbjogX3ZtLnF1ZXN0aW9uLFxuICAgICAgICAgICAgICAgIGNzczogX3ZtLnF1ZXN0aW9uLnNob3dSZW1vdmVCdXR0b25Cb3R0b20sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgIF92bS5xdWVzdGlvbi5maWxlTmF2aWdhdG9yVmlzaWJsZVxuICAgICAgICAgID8gX2MoXCJzdi1hY3Rpb24tYmFyXCIsIHtcbiAgICAgICAgICAgICAgYXR0cnM6IHsgbW9kZWw6IF92bS5xdWVzdGlvbi5maWxlTmF2aWdhdG9yIH0sXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBdLFxuICAgICAgMlxuICAgICksXG4gIF0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9mbG93cGFuZWwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTk2YWUxYTc4JlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL2Zsb3dwYW5lbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9OTZhZTFhNzgmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiByZW5kZXI7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0YXRpY1JlbmRlckZuczsgfSk7XG52YXIgcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfdm0ucXVlc3Rpb24uaXNWaXNpYmxlXG4gICAgPyBfYyhcbiAgICAgICAgXCJkaXZcIixcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5wYW5lbC5jb250YWluZXIsXG4gICAgICAgICAgc3R5bGU6IF92bS5yb290U3R5bGUsXG4gICAgICAgIH0sXG4gICAgICAgIFtcbiAgICAgICAgICBfYyhcbiAgICAgICAgICAgIFwiaDRcIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0uaGFzVGl0bGUsXG4gICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcImhhc1RpdGxlXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NUaXRsZSxcbiAgICAgICAgICAgICAgb246IHsgY2xpY2s6IF92bS5jaGFuZ2VFeHBhbmRlZCB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHtcbiAgICAgICAgICAgICAgICBhdHRyczogeyBsb2NTdHJpbmc6IF92bS5xdWVzdGlvbi5sb2NUaXRsZSB9LFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgX2MoXCJzcGFuXCIsIHtcbiAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLnNob3dJY29uLFxuICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcInNob3dJY29uXCIsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgY2xhc3M6IF92bS5pY29uQ3NzLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAxXG4gICAgICAgICAgKSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLnBhbmVsLmRlc2NyaXB0aW9uIH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF9jKFwic3VydmV5LXN0cmluZ1wiLCB7XG4gICAgICAgICAgICAgICAgYXR0cnM6IHsgbG9jU3RyaW5nOiBfdm0ucXVlc3Rpb24ubG9jRGVzY3JpcHRpb24gfSxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgMVxuICAgICAgICAgICksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICBfYyhcInN1cnZleS1lcnJvcnNcIiwgeyBhdHRyczogeyBlbGVtZW50OiBfdm0ucXVlc3Rpb24gfSB9KSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJmLXBhbmVsXCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogIV92bS5pc0NvbGxhcHNlZCxcbiAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwiIWlzQ29sbGFwc2VkXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgc3R5bGU6IHsgcGFkZGluZ0xlZnQ6IF92bS5xdWVzdGlvbi5pbm5lclBhZGRpbmdMZWZ0IH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfYyhcInN1cnZleS1mbG93cGFuZWxlbGVtZW50XCIsIHtcbiAgICAgICAgICAgICAgICBhdHRyczogeyBub2RlOiBfdm0ucm9vdE5vZGUsIHBhbmVsOiBfdm0ucXVlc3Rpb24sIGNzczogXCJjc3NcIiB9LFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAxXG4gICAgICAgICAgKSxcbiAgICAgICAgXSxcbiAgICAgICAgMVxuICAgICAgKVxuICAgIDogX3ZtLl9lKClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2Zsb3dwYW5lbGVsZW1lbnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTlkOTkyYzMwJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL3Z1ZS9mbG93cGFuZWxlbGVtZW50LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD05ZDk5MmMzMCYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiByZW5kZXI7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0YXRpY1JlbmRlckZuczsgfSk7XG52YXIgcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcInNwYW5cIixcbiAgICB7IHN0eWxlOiBfdm0uc3R5bGUgfSxcbiAgICBbXG4gICAgICAhX3ZtLnF1ZXN0aW9uXG4gICAgICAgID8gX2MoXG4gICAgICAgICAgICBfdm0udGFnTmFtZSxcbiAgICAgICAgICAgIHsgdGFnOiBcImNvbXBvbmVudFwiIH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF92bS5fbChfdm0ubm9kZXMsIGZ1bmN0aW9uIChlbE5vZGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX2MoXCJzdXJ2ZXktZmxvd3BhbmVsZWxlbWVudFwiLCB7XG4gICAgICAgICAgICAgICAgICBrZXk6IF92bS5lbGVtZW50SWQsXG4gICAgICAgICAgICAgICAgICBhdHRyczogeyBub2RlOiBlbE5vZGUsIHBhbmVsOiBfdm0ucGFuZWwsIGNzczogXCJjc3NcIiB9LFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBfdm0uX3YoXCJcXG4gICAgXCIgKyBfdm0uX3MoX3ZtLnRleHQpICsgXCJcXG4gIFwiKSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAyXG4gICAgICAgICAgKVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICEhX3ZtLnF1ZXN0aW9uXG4gICAgICAgID8gX2MoXG4gICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX2MoXCJzdXJ2ZXktZWxlbWVudFwiLCB7XG4gICAgICAgICAgICAgICAga2V5OiBfdm0ucXVlc3Rpb24uaWRWYWx1ZSxcbiAgICAgICAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgICAgICAgZmxleEJhc2lzOiBfdm0ucXVlc3Rpb24ucmVuZGVyV2lkdGgsXG4gICAgICAgICAgICAgICAgICBmbGV4R3JvdzogMSxcbiAgICAgICAgICAgICAgICAgIGZsZXhTaHJpbms6IDEsXG4gICAgICAgICAgICAgICAgICB3aWR0aDogX3ZtLnF1ZXN0aW9uLnJlbmRlcldpZHRoLFxuICAgICAgICAgICAgICAgICAgbWluV2lkdGg6IF92bS5xdWVzdGlvbi5taW5XaWR0aCxcbiAgICAgICAgICAgICAgICAgIG1heFdpZHRoOiBfdm0ucXVlc3Rpb24ubWF4V2lkdGgsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgaWQ6IF92bS5xdWVzdGlvbi5pZCxcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IF92bS5xdWVzdGlvbixcbiAgICAgICAgICAgICAgICAgIHN1cnZleTogX3ZtLnN1cnZleSxcbiAgICAgICAgICAgICAgICAgIGNzczogX3ZtLmNzcyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAxXG4gICAgICAgICAgKVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgIF0sXG4gICAgMVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9oZWFkZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTY5Y2ZmOGNmJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL2hlYWRlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NjljZmY4Y2YmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiByZW5kZXI7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0YXRpY1JlbmRlckZuczsgfSk7XG52YXIgcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfdm0uc3VydmV5LnJlbmRlcmVkSGFzSGVhZGVyXG4gICAgPyBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0uc3VydmV5LmNzcy5oZWFkZXIgfSwgW1xuICAgICAgICBfdm0uc3VydmV5LmlzTG9nb0JlZm9yZVxuICAgICAgICAgID8gX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLnN1cnZleS5sb2dvQ2xhc3NOYW1lcyB9LCBbXG4gICAgICAgICAgICAgIF9jKFwiaW1nXCIsIHtcbiAgICAgICAgICAgICAgICBjbGFzczogX3ZtLnN1cnZleS5jc3MubG9nb0ltYWdlLFxuICAgICAgICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICAgICAgICBvYmplY3RGaXQ6IF92bS5zdXJ2ZXkubG9nb0ZpdCxcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiBfdm0uc3VydmV5LnJlbmRlcmVkU3R5bGVMb2dvV2lkdGgsXG4gICAgICAgICAgICAgICAgICBoZWlnaHQ6IF92bS5zdXJ2ZXkucmVuZGVyZWRTdHlsZUxvZ29IZWlnaHQsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgc3JjOiBfdm0uc3VydmV5LmxvY0xvZ28ucmVuZGVyZWRIdG1sLFxuICAgICAgICAgICAgICAgICAgd2lkdGg6IF92bS5zdXJ2ZXkucmVuZGVyZWRMb2dvV2lkdGgsXG4gICAgICAgICAgICAgICAgICBoZWlnaHQ6IF92bS5zdXJ2ZXkucmVuZGVyZWRMb2dvSGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgYWx0OiBfdm0uc3VydmV5LmxvY1RpdGxlLnJlbmRlcmVkSHRtbCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIF0pXG4gICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgX3ZtLnN1cnZleS5yZW5kZXJlZEhhc1RpdGxlXG4gICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0uc3VydmV5LmNzcy5oZWFkZXJUZXh0LFxuICAgICAgICAgICAgICAgIHN0eWxlOiB7IG1heFdpZHRoOiBfdm0uc3VydmV5LnRpdGxlTWF4V2lkdGggfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIF9jKFwic3VydmV5LWVsZW1lbnQtdGl0bGVcIiwge1xuICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgZWxlbWVudDogX3ZtLnN1cnZleSwgY3NzOiBfdm0uc3VydmV5LmNzcyB9LFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgX3ZtLnN1cnZleS5yZW5kZXJlZEhhc0Rlc2NyaXB0aW9uXG4gICAgICAgICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgICAgICAgIFwiaDVcIixcbiAgICAgICAgICAgICAgICAgICAgICB7IGNsYXNzOiBfdm0uc3VydmV5LmNzcy5kZXNjcmlwdGlvbiB9LFxuICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9jKFwic3VydmV5LXN0cmluZ1wiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IGxvY1N0cmluZzogX3ZtLnN1cnZleS5sb2NEZXNjcmlwdGlvbiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICBfdm0uc3VydmV5LmlzTG9nb0FmdGVyXG4gICAgICAgICAgPyBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0uc3VydmV5LmxvZ29DbGFzc05hbWVzIH0sIFtcbiAgICAgICAgICAgICAgX2MoXCJpbWdcIiwge1xuICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0uc3VydmV5LmNzcy5sb2dvSW1hZ2UsXG4gICAgICAgICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgICAgICAgIG9iamVjdEZpdDogX3ZtLnN1cnZleS5sb2dvRml0LFxuICAgICAgICAgICAgICAgICAgd2lkdGg6IF92bS5zdXJ2ZXkucmVuZGVyZWRTdHlsZUxvZ29XaWR0aCxcbiAgICAgICAgICAgICAgICAgIGhlaWdodDogX3ZtLnN1cnZleS5yZW5kZXJlZFN0eWxlTG9nb0hlaWdodCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICBzcmM6IF92bS5zdXJ2ZXkubG9jTG9nby5yZW5kZXJlZEh0bWwsXG4gICAgICAgICAgICAgICAgICB3aWR0aDogX3ZtLnN1cnZleS5yZW5kZXJlZExvZ29XaWR0aCxcbiAgICAgICAgICAgICAgICAgIGhlaWdodDogX3ZtLnN1cnZleS5yZW5kZXJlZExvZ29IZWlnaHQsXG4gICAgICAgICAgICAgICAgICBhbHQ6IF92bS5zdXJ2ZXkubG9jVGl0bGUucmVuZGVyZWRIdG1sLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgXSlcbiAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0uc3VydmV5LmNzcy5oZWFkZXJDbG9zZSB9KSxcbiAgICAgIF0pXG4gICAgOiBfdm0uX2UoKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvaHRtbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MDc0MmUxNmQmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL2h0bWwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTA3NDJlMTZkJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInJlbmRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHJlbmRlcjsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic3RhdGljUmVuZGVyRm5zXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc3RhdGljUmVuZGVyRm5zOyB9KTtcbnZhciByZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFwiZGl2XCIsIHtcbiAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLnJlbmRlckNzc1Jvb3QsXG4gICAgZG9tUHJvcHM6IHsgaW5uZXJIVE1MOiBfdm0uX3MoX3ZtLnF1ZXN0aW9uLmxvY0h0bWwucmVuZGVyZWRIdG1sKSB9LFxuICB9KVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvaW1hZ2UudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTFkYzhkNzA5JlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NyYy92dWUvaW1hZ2UudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTFkYzhkNzA5JiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiByZW5kZXI7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0YXRpY1JlbmRlckZuczsgfSk7XG52YXIgcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yb290IH0sIFtcbiAgICBfdm0ucXVlc3Rpb24ucmVuZGVyZWRNb2RlID09PSBcImltYWdlXCJcbiAgICAgID8gX2MoXCJpbWdcIiwge1xuICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgIHZhbHVlOiBfdm0ucXVlc3Rpb24uaW1hZ2VMaW5rICYmICFfdm0ucXVlc3Rpb24uY29udGVudE5vdExvYWRlZCxcbiAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJxdWVzdGlvbi5pbWFnZUxpbmsgJiYgIXF1ZXN0aW9uLmNvbnRlbnROb3RMb2FkZWRcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmdldEltYWdlQ3NzKCksXG4gICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgIG9iamVjdEZpdDogX3ZtLnF1ZXN0aW9uLmltYWdlRml0LFxuICAgICAgICAgICAgd2lkdGg6IF92bS5xdWVzdGlvbi5yZW5kZXJlZFN0eWxlV2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ6IF92bS5xdWVzdGlvbi5yZW5kZXJlZFN0eWxlSGVpZ2h0LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgIHNyYzogX3ZtLnF1ZXN0aW9uLmxvY0ltYWdlTGluay5yZW5kZXJlZEh0bWwsXG4gICAgICAgICAgICBhbHQ6IF92bS5xdWVzdGlvbi5hbHRUZXh0IHx8IF92bS5xdWVzdGlvbi50aXRsZSxcbiAgICAgICAgICAgIHdpZHRoOiBfdm0ucXVlc3Rpb24ucmVuZGVyZWRXaWR0aCxcbiAgICAgICAgICAgIGhlaWdodDogX3ZtLnF1ZXN0aW9uLnJlbmRlcmVkSGVpZ2h0LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgb246IHtcbiAgICAgICAgICAgIGxvYWQ6IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24ub25Mb2FkSGFuZGxlcigpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24ub25FcnJvckhhbmRsZXIoKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgOiBfdm0uX2UoKSxcbiAgICBfdm0ucXVlc3Rpb24ucmVuZGVyZWRNb2RlID09PSBcInZpZGVvXCJcbiAgICAgID8gX2MoXCJ2aWRlb1wiLCB7XG4gICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgICAgdmFsdWU6IF92bS5xdWVzdGlvbi5pbWFnZUxpbmsgJiYgIV92bS5xdWVzdGlvbi5jb250ZW50Tm90TG9hZGVkLFxuICAgICAgICAgICAgICBleHByZXNzaW9uOiBcInF1ZXN0aW9uLmltYWdlTGluayAmJiAhcXVlc3Rpb24uY29udGVudE5vdExvYWRlZFwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uZ2V0SW1hZ2VDc3MoKSxcbiAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgb2JqZWN0Rml0OiBfdm0ucXVlc3Rpb24uaW1hZ2VGaXQsXG4gICAgICAgICAgICB3aWR0aDogX3ZtLnF1ZXN0aW9uLnJlbmRlcmVkU3R5bGVXaWR0aCxcbiAgICAgICAgICAgIGhlaWdodDogX3ZtLnF1ZXN0aW9uLnJlbmRlcmVkU3R5bGVIZWlnaHQsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgY29udHJvbHM6IFwiXCIsXG4gICAgICAgICAgICBzcmM6IF92bS5xdWVzdGlvbi5sb2NJbWFnZUxpbmsucmVuZGVyZWRIdG1sLFxuICAgICAgICAgICAgd2lkdGg6IF92bS5xdWVzdGlvbi5yZW5kZXJlZFdpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0OiBfdm0ucXVlc3Rpb24ucmVuZGVyZWRIZWlnaHQsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgbG9hZGVkbWV0YWRhdGE6IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24ub25Mb2FkSGFuZGxlcigpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24ub25FcnJvckhhbmRsZXIoKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgOiBfdm0uX2UoKSxcbiAgICBfdm0uX3YoXCIgXCIpLFxuICAgIF92bS5xdWVzdGlvbi5yZW5kZXJlZE1vZGUgPT09IFwieW91dHViZVwiXG4gICAgICA/IF9jKFwiaWZyYW1lXCIsIHtcbiAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmdldEltYWdlQ3NzKCksXG4gICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgIG9iamVjdEZpdDogX3ZtLnF1ZXN0aW9uLmltYWdlRml0LFxuICAgICAgICAgICAgd2lkdGg6IF92bS5xdWVzdGlvbi5yZW5kZXJlZFN0eWxlV2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ6IF92bS5xdWVzdGlvbi5yZW5kZXJlZFN0eWxlSGVpZ2h0LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgIHNyYzogX3ZtLnF1ZXN0aW9uLmxvY0ltYWdlTGluay5yZW5kZXJlZEh0bWwsXG4gICAgICAgICAgICB3aWR0aDogX3ZtLnF1ZXN0aW9uLnJlbmRlcmVkV2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ6IF92bS5xdWVzdGlvbi5yZW5kZXJlZEhlaWdodCxcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgOiBfdm0uX2UoKSxcbiAgICBfdm0uX3YoXCIgXCIpLFxuICAgICFfdm0ucXVlc3Rpb24uaW1hZ2VMaW5rIHx8IF92bS5xdWVzdGlvbi5jb250ZW50Tm90TG9hZGVkXG4gICAgICA/IF9jKFxuICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMubm9JbWFnZSB9LFxuICAgICAgICAgIFtcbiAgICAgICAgICAgIF9jKFwic3Ytc3ZnLWljb25cIiwge1xuICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgIGljb25OYW1lOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5ub0ltYWdlU3ZnSWNvbklkLFxuICAgICAgICAgICAgICAgIHNpemU6IDQ4LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgXSxcbiAgICAgICAgICAxXG4gICAgICAgIClcbiAgICAgIDogX3ZtLl9lKCksXG4gIF0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9pbWFnZXBpY2tlci1pdGVtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02NGIwMDE3OSZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NyYy92dWUvaW1hZ2VwaWNrZXItaXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NjRiMDAxNzkmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwicmVuZGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVuZGVyOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzdGF0aWNSZW5kZXJGbnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdGF0aWNSZW5kZXJGbnM7IH0pO1xudmFyIHJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLmdldEl0ZW1DbGFzcyhfdm0uaXRlbSkgfSwgW1xuICAgIF9jKFwibGFiZWxcIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMubGFiZWwgfSwgW1xuICAgICAgX3ZtLnF1ZXN0aW9uLm11bHRpU2VsZWN0XG4gICAgICAgID8gX2MoXCJpbnB1dFwiLCB7XG4gICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcIm1vZGVsXCIsXG4gICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LW1vZGVsXCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IF92bS5xdWVzdGlvbi52YWx1ZSxcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcInF1ZXN0aW9uLnZhbHVlXCIsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLml0ZW1Db250cm9sLFxuICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgdHlwZTogXCJjaGVja2JveFwiLFxuICAgICAgICAgICAgICBuYW1lOiBfdm0ucXVlc3Rpb24ucXVlc3Rpb25OYW1lLFxuICAgICAgICAgICAgICBpZDogX3ZtLnF1ZXN0aW9uLmdldEl0ZW1JZChfdm0uaXRlbSksXG4gICAgICAgICAgICAgIGRpc2FibGVkOiAhX3ZtLnF1ZXN0aW9uLmdldEl0ZW1FbmFibGVkKF92bS5pdGVtKSxcbiAgICAgICAgICAgICAgXCJhcmlhLXJlcXVpcmVkXCI6IF92bS5xdWVzdGlvbi5hcmlhUmVxdWlyZWQsXG4gICAgICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBfdm0ucXVlc3Rpb24uYXJpYUxhYmVsLFxuICAgICAgICAgICAgICBcImFyaWEtaW52YWxpZFwiOiBfdm0ucXVlc3Rpb24uYXJpYUludmFsaWQsXG4gICAgICAgICAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOiBfdm0ucXVlc3Rpb24uYXJpYURlc2NyaWJlZEJ5LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRvbVByb3BzOiB7XG4gICAgICAgICAgICAgIHZhbHVlOiBfdm0uaXRlbS52YWx1ZSxcbiAgICAgICAgICAgICAgY2hlY2tlZDogQXJyYXkuaXNBcnJheShfdm0ucXVlc3Rpb24udmFsdWUpXG4gICAgICAgICAgICAgICAgPyBfdm0uX2koX3ZtLnF1ZXN0aW9uLnZhbHVlLCBfdm0uaXRlbS52YWx1ZSkgPiAtMVxuICAgICAgICAgICAgICAgIDogX3ZtLnF1ZXN0aW9uLnZhbHVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgIGNoYW5nZTogZnVuY3Rpb24gKCRldmVudCkge1xuICAgICAgICAgICAgICAgIHZhciAkJGEgPSBfdm0ucXVlc3Rpb24udmFsdWUsXG4gICAgICAgICAgICAgICAgICAkJGVsID0gJGV2ZW50LnRhcmdldCxcbiAgICAgICAgICAgICAgICAgICQkYyA9ICQkZWwuY2hlY2tlZCA/IHRydWUgOiBmYWxzZVxuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KCQkYSkpIHtcbiAgICAgICAgICAgICAgICAgIHZhciAkJHYgPSBfdm0uaXRlbS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgJCRpID0gX3ZtLl9pKCQkYSwgJCR2KVxuICAgICAgICAgICAgICAgICAgaWYgKCQkZWwuY2hlY2tlZCkge1xuICAgICAgICAgICAgICAgICAgICAkJGkgPCAwICYmXG4gICAgICAgICAgICAgICAgICAgICAgX3ZtLiRzZXQoX3ZtLnF1ZXN0aW9uLCBcInZhbHVlXCIsICQkYS5jb25jYXQoWyQkdl0pKVxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgJCRpID4gLTEgJiZcbiAgICAgICAgICAgICAgICAgICAgICBfdm0uJHNldChcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS5xdWVzdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwidmFsdWVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICQkYS5zbGljZSgwLCAkJGkpLmNvbmNhdCgkJGEuc2xpY2UoJCRpICsgMSkpXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBfdm0uJHNldChfdm0ucXVlc3Rpb24sIFwidmFsdWVcIiwgJCRjKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgOiBfYyhcImlucHV0XCIsIHtcbiAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6IFwibW9kZWxcIixcbiAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtbW9kZWxcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLnF1ZXN0aW9uLnZhbHVlLFxuICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwicXVlc3Rpb24udmFsdWVcIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaXRlbUNvbnRyb2wsXG4gICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICB0eXBlOiBcInJhZGlvXCIsXG4gICAgICAgICAgICAgIG5hbWU6IF92bS5xdWVzdGlvbi5xdWVzdGlvbk5hbWUsXG4gICAgICAgICAgICAgIGlkOiBfdm0ucXVlc3Rpb24uZ2V0SXRlbUlkKF92bS5pdGVtKSxcbiAgICAgICAgICAgICAgZGlzYWJsZWQ6ICFfdm0ucXVlc3Rpb24uZ2V0SXRlbUVuYWJsZWQoX3ZtLml0ZW0pLFxuICAgICAgICAgICAgICBcImFyaWEtcmVxdWlyZWRcIjogX3ZtLnF1ZXN0aW9uLmFyaWFSZXF1aXJlZCxcbiAgICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IF92bS5xdWVzdGlvbi5hcmlhTGFiZWwsXG4gICAgICAgICAgICAgIFwiYXJpYS1pbnZhbGlkXCI6IF92bS5xdWVzdGlvbi5hcmlhSW52YWxpZCxcbiAgICAgICAgICAgICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6IF92bS5xdWVzdGlvbi5hcmlhRGVzY3JpYmVkQnksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZG9tUHJvcHM6IHtcbiAgICAgICAgICAgICAgdmFsdWU6IF92bS5pdGVtLnZhbHVlLFxuICAgICAgICAgICAgICBjaGVja2VkOiBfdm0uX3EoX3ZtLnF1ZXN0aW9uLnZhbHVlLCBfdm0uaXRlbS52YWx1ZSksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgY2hhbmdlOiBmdW5jdGlvbiAoJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF92bS4kc2V0KF92bS5xdWVzdGlvbiwgXCJ2YWx1ZVwiLCBfdm0uaXRlbS52YWx1ZSlcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSksXG4gICAgICBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pdGVtRGVjb3JhdG9yIH0sIFtcbiAgICAgICAgX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaW1hZ2VDb250YWluZXIgfSwgW1xuICAgICAgICAgIF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmNoZWNrZWRJdGVtRGVjb3JhdG9yXG4gICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgICAgIHsgY2xhc3M6IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jaGVja2VkSXRlbURlY29yYXRvciB9LFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgIF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmNoZWNrZWRJdGVtU3ZnSWNvbklkXG4gICAgICAgICAgICAgICAgICAgID8gX2MoXCJzdi1zdmctaWNvblwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuY2hlY2tlZEl0ZW1TdmdJY29uLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZTogXCJhdXRvXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGljb25OYW1lOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmNoZWNrZWRJdGVtU3ZnSWNvbklkLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgX3ZtLml0ZW0uaW1hZ2VMaW5rICYmXG4gICAgICAgICAgIV92bS5pdGVtLmNvbnRlbnROb3RMb2FkZWQgJiZcbiAgICAgICAgICBfdm0ucXVlc3Rpb24uY29udGVudE1vZGUgPT09IFwiaW1hZ2VcIlxuICAgICAgICAgICAgPyBfYyhcImltZ1wiLCB7XG4gICAgICAgICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmltYWdlLFxuICAgICAgICAgICAgICAgIHN0eWxlOiB7IG9iamVjdEZpdDogX3ZtLnF1ZXN0aW9uLmltYWdlRml0IH0sXG4gICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgIHNyYzogX3ZtLml0ZW0uaW1hZ2VMaW5rLFxuICAgICAgICAgICAgICAgICAgd2lkdGg6IF92bS5xdWVzdGlvbi5yZW5kZXJlZEltYWdlV2lkdGgsXG4gICAgICAgICAgICAgICAgICBoZWlnaHQ6IF92bS5xdWVzdGlvbi5yZW5kZXJlZEltYWdlSGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgYWx0OiBfdm0uaXRlbS5sb2NUZXh0LnJlbmRlcmVkSHRtbCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICBsb2FkOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLm9uQ29udGVudExvYWRlZChfdm0uaXRlbSwgZXZlbnQpXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgICAgICAgICBfdm0uaXRlbS5vbkVycm9ySGFuZGxlcigpXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgIF92bS5pdGVtLmltYWdlTGluayAmJlxuICAgICAgICAgICFfdm0uaXRlbS5jb250ZW50Tm90TG9hZGVkICYmXG4gICAgICAgICAgX3ZtLnF1ZXN0aW9uLmNvbnRlbnRNb2RlID09PSBcInZpZGVvXCJcbiAgICAgICAgICAgID8gX2MoXCJ2aWRlb1wiLCB7XG4gICAgICAgICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmltYWdlLFxuICAgICAgICAgICAgICAgIHN0eWxlOiB7IG9iamVjdEZpdDogX3ZtLnF1ZXN0aW9uLmltYWdlRml0IH0sXG4gICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgIGNvbnRyb2xzOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgc3JjOiBfdm0uaXRlbS5pbWFnZUxpbmssXG4gICAgICAgICAgICAgICAgICB3aWR0aDogX3ZtLnF1ZXN0aW9uLnJlbmRlcmVkSW1hZ2VXaWR0aCxcbiAgICAgICAgICAgICAgICAgIGhlaWdodDogX3ZtLnF1ZXN0aW9uLnJlbmRlcmVkSW1hZ2VIZWlnaHQsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgbG9hZGVkbWV0YWRhdGE6IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24ub25Db250ZW50TG9hZGVkKF92bS5pdGVtLCBldmVudClcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIF92bS5pdGVtLm9uRXJyb3JIYW5kbGVyKClcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAhX3ZtLml0ZW0uaW1hZ2VMaW5rIHx8IF92bS5pdGVtLmNvbnRlbnROb3RMb2FkZWRcbiAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaXRlbU5vSW1hZ2UsXG4gICAgICAgICAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgICAgICAgICB3aWR0aDogX3ZtLnF1ZXN0aW9uLnJlbmRlcmVkSW1hZ2VXaWR0aCArIFwicHhcIixcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBfdm0ucXVlc3Rpb24ucmVuZGVyZWRJbWFnZUhlaWdodCArIFwicHhcIixcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0Rml0OiBfdm0ucXVlc3Rpb24uaW1hZ2VGaXQsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgX2MoXCJzdi1zdmctaWNvblwiLCB7XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pdGVtTm9JbWFnZVN2Z0ljb24sXG4gICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgaWNvbk5hbWU6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLml0ZW1Ob0ltYWdlU3ZnSWNvbklkLFxuICAgICAgICAgICAgICAgICAgICAgIHNpemU6IDQ4LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgIF0pLFxuICAgICAgICBfdm0ucXVlc3Rpb24uc2hvd0xhYmVsXG4gICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICAgIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLml0ZW1UZXh0IH0sXG4gICAgICAgICAgICAgIFtfYyhcInN1cnZleS1zdHJpbmdcIiwgeyBhdHRyczogeyBsb2NTdHJpbmc6IF92bS5pdGVtLmxvY1RleHQgfSB9KV0sXG4gICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgXSksXG4gICAgXSksXG4gIF0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9pbWFnZXBpY2tlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MTUzZmUwNTImXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL3Z1ZS9pbWFnZXBpY2tlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MTUzZmUwNTImICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInJlbmRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHJlbmRlcjsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic3RhdGljUmVuZGVyRm5zXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc3RhdGljUmVuZGVyRm5zOyB9KTtcbnZhciByZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZmllbGRzZXRcIixcbiAgICB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uZ2V0U2VsZWN0QmFzZVJvb3RDc3MoKSB9LFxuICAgIFtcbiAgICAgIF9jKFwibGVnZW5kXCIsIHtcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICByb2xlOiBcInJhZGlvXCIsXG4gICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IF92bS5xdWVzdGlvbi5sb2NUaXRsZS5yZW5kZXJlZEh0bWwsXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfdm0uX2woX3ZtLnF1ZXN0aW9uLnZpc2libGVDaG9pY2VzLCBmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICByZXR1cm4gIV92bS5xdWVzdGlvbi5oYXNDb2x1bW5zXG4gICAgICAgICAgPyBfYyhcInN1cnZleS1pbWFnZXBpY2tlci1pdGVtXCIsIHtcbiAgICAgICAgICAgICAga2V5OiBpdGVtLnZhbHVlLFxuICAgICAgICAgICAgICBhdHRyczogeyBxdWVzdGlvbjogX3ZtLnF1ZXN0aW9uLCBpdGVtOiBpdGVtIH0sXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgIH0pLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF92bS5fbChfdm0ucXVlc3Rpb24uY29sdW1ucywgZnVuY3Rpb24gKGNvbHVtbiwgY29sSW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIF92bS5xdWVzdGlvbi5oYXNDb2x1bW5zXG4gICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGtleTogY29sSW5kZXgsXG4gICAgICAgICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5nZXRDb2x1bW5DbGFzcygpLFxuICAgICAgICAgICAgICAgIGF0dHJzOiB7IHJvbGU6IFwicHJlc2VudGF0aW9uXCIgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgX3ZtLl9sKGNvbHVtbiwgZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX2MoXCJzdXJ2ZXktaW1hZ2VwaWNrZXItaXRlbVwiLCB7XG4gICAgICAgICAgICAgICAgICBrZXk6IGl0ZW0udmFsdWUsXG4gICAgICAgICAgICAgICAgICBhdHRyczogeyBxdWVzdGlvbjogX3ZtLnF1ZXN0aW9uLCBpdGVtOiBpdGVtIH0sXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICB9KSxcbiAgICBdLFxuICAgIDJcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvbWF0cml4LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03ZmEyZjQwMyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL3Z1ZS9tYXRyaXgudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTdmYTJmNDAzJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwicmVuZGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVuZGVyOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzdGF0aWNSZW5kZXJGbnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdGF0aWNSZW5kZXJGbnM7IH0pO1xudmFyIHJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMudGFibGVXcmFwcGVyIH0sIFtcbiAgICBfYyhcImZpZWxkc2V0XCIsIFtcbiAgICAgIF9jKFwibGVnZW5kXCIsIHtcbiAgICAgICAgYXR0cnM6IHsgXCJhcmlhLWxhYmVsXCI6IF92bS5xdWVzdGlvbi5sb2NUaXRsZS5yZW5kZXJlZEh0bWwgfSxcbiAgICAgIH0pLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFwidGFibGVcIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmdldFRhYmxlQ3NzKCkgfSwgW1xuICAgICAgICBfdm0ucXVlc3Rpb24uc2hvd0hlYWRlclxuICAgICAgICAgID8gX2MoXCJ0aGVhZFwiLCBbXG4gICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgIFwidHJcIixcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24uaGFzUm93cyA/IF9jKFwidGRcIikgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICBfdm0uX2woXG4gICAgICAgICAgICAgICAgICAgIF92bS5xdWVzdGlvbi52aXNpYmxlQ29sdW1ucyxcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKGNvbHVtbiwgY29sdW1uSW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICBcInRoXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogY29sdW1uSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5oZWFkZXJDZWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbldpZHRoOiBfdm0ucXVlc3Rpb24uY29sdW1uTWluV2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IF92bS5xdWVzdGlvbi5jb2x1bW5NaW5XaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFwic3VydmV5LXN0cmluZ1wiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgbG9jU3RyaW5nOiBjb2x1bW4ubG9jVGV4dCB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgXSlcbiAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICBfYyhcbiAgICAgICAgICBcInRib2R5XCIsXG4gICAgICAgICAgX3ZtLl9sKF92bS5xdWVzdGlvbi52aXNpYmxlUm93cywgZnVuY3Rpb24gKHJvdywgcm93SW5kZXgpIHtcbiAgICAgICAgICAgIHJldHVybiBfYyhcbiAgICAgICAgICAgICAgXCJ0clwiLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAga2V5OiBcInJvd19cIiArIHJvdy5uYW1lICsgXCJfXCIgKyByb3dJbmRleCxcbiAgICAgICAgICAgICAgICBjbGFzczogcm93LnJvd0NsYXNzZXMgfHwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICBcInRkXCIsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLnF1ZXN0aW9uLmhhc1Jvd3MsXG4gICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcInF1ZXN0aW9uLmhhc1Jvd3NcIixcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMucm93VGV4dENlbGwsXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgbWluV2lkdGg6IF92bS5xdWVzdGlvbi5yb3dUaXRsZVdpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBfdm0ucXVlc3Rpb24ucm93VGl0bGVXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBbX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHsgYXR0cnM6IHsgbG9jU3RyaW5nOiByb3cubG9jVGV4dCB9IH0pXSxcbiAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgX3ZtLl9sKFxuICAgICAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLnZpc2libGVDb2x1bW5zLFxuICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKGNvbHVtbiwgY29sdW1uSW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS5xdWVzdGlvbi5oYXNDZWxsVGV4dFxuICAgICAgICAgICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwidGRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogY29sdW1uSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5nZXRJdGVtQ2xhc3Mocm93LCBjb2x1bW4pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLmNlbGxDbGljayhyb3csIGNvbHVtbilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFwic3VydmV5LXN0cmluZ1wiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NTdHJpbmc6IF92bS5xdWVzdGlvbi5nZXRDZWxsRGlzcGxheUxvY1RleHQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93Lm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICBfdm0uX2woXG4gICAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24udmlzaWJsZUNvbHVtbnMsXG4gICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoY29sdW1uLCBjb2x1bW5JbmRleCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gIV92bS5xdWVzdGlvbi5oYXNDZWxsVGV4dFxuICAgICAgICAgICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwidGRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogY29sdW1uSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmNlbGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGF0YS1yZXNwb25zaXZlLXRpdGxlXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5sb2NUZXh0LnJlbmRlcmVkSHRtbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLmNlbGxDbGljayhyb3csIGNvbHVtbilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJsYWJlbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmdldEl0ZW1DbGFzcyhyb3csIGNvbHVtbiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW91c2Vkb3duOiBmdW5jdGlvbiAoJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLnF1ZXN0aW9uLm9uTW91c2VEb3duKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJpbnB1dFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIm1vZGVsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1tb2RlbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcm93LnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcInJvdy52YWx1ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pdGVtVmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwicmFkaW9cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHJvdy5mdWxsTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBfdm0ucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5xdWVzdGlvbi5pbnB1dElkICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJfXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3cubmFtZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiX1wiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImFyaWEtcmVxdWlyZWRcIjogX3ZtLnF1ZXN0aW9uLmFyaWFSZXF1aXJlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBjb2x1bW4ubG9jVGV4dC5yZW5kZXJlZEh0bWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImFyaWEtaW52YWxpZFwiOiBfdm0ucXVlc3Rpb24uYXJpYUludmFsaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLmFyaWFEZXNjcmliZWRCeSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbVByb3BzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogY29sdW1uLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZDogX3ZtLl9xKHJvdy52YWx1ZSwgY29sdW1uLnZhbHVlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2U6IGZ1bmN0aW9uICgkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS4kc2V0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInZhbHVlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uLnZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5tYXRlcmlhbERlY29yYXRvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5xdWVzdGlvbi5pdGVtU3ZnSWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzdmdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5pdGVtRGVjb3JhdG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJ1c2VcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInhsaW5rOmhyZWZcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLml0ZW1TdmdJY29uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IF92bS5xdWVzdGlvbi5pc01vYmlsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcInF1ZXN0aW9uLmlzTW9iaWxlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNlbGxSZXNwb25zaXZlVGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcInN1cnZleS1zdHJpbmdcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBsb2NTdHJpbmc6IGNvbHVtbi5sb2NUZXh0IH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9KSxcbiAgICAgICAgICAwXG4gICAgICAgICksXG4gICAgICBdKSxcbiAgICBdKSxcbiAgXSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL21hdHJpeGNlbGwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTNjYTU0ZWU1JlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL3Z1ZS9tYXRyaXhjZWxsLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zY2E1NGVlNSYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiByZW5kZXI7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0YXRpY1JlbmRlckZuczsgfSk7XG52YXIgcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcInRkXCIsXG4gICAge1xuICAgICAgY2xhc3M6IF92bS5jZWxsLmNsYXNzTmFtZSxcbiAgICAgIHN0eWxlOiBfdm0uZ2V0Q2VsbFN0eWxlKCksXG4gICAgICBhdHRyczoge1xuICAgICAgICBcImRhdGEtcmVzcG9uc2l2ZS10aXRsZVwiOiBfdm0uZ2V0SGVhZGVycygpLFxuICAgICAgICB0aXRsZTogX3ZtLmNlbGwuZ2V0VGl0bGUoKSxcbiAgICAgICAgY29sc3BhbjogX3ZtLmNlbGwuY29sU3BhbnMsXG4gICAgICB9LFxuICAgICAgb246IHtcbiAgICAgICAgZm9jdXNpbjogZnVuY3Rpb24gKCRldmVudCkge1xuICAgICAgICAgIHJldHVybiBfdm0uY2VsbC5mb2N1c0luKClcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBbXG4gICAgICBfdm0uY2VsbC5pc0Vycm9yc0NlbGxcbiAgICAgICAgPyBfYyhcInN1cnZleS1lcnJvcnNcIiwgeyBhdHRyczogeyBlbGVtZW50OiBfdm0uY2VsbC5xdWVzdGlvbiB9IH0pXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLmNlbGwuaXNBY3Rpb25zQ2VsbFxuICAgICAgICA/IF9jKFwic3YtYWN0aW9uLWJhclwiLCB7XG4gICAgICAgICAgICBhdHRyczogeyBtb2RlbDogX3ZtLmNlbGwuaXRlbS5nZXREYXRhKCksIGhhbmRsZUNsaWNrOiBmYWxzZSB9LFxuICAgICAgICAgIH0pXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLmNlbGwuaGFzUGFuZWxcbiAgICAgICAgPyBfYyhfdm0uZ2V0Q29tcG9uZW50TmFtZShfdm0uY2VsbC5wYW5lbCksIHtcbiAgICAgICAgICAgIHRhZzogXCJjb21wb25lbnRcIixcbiAgICAgICAgICAgIGF0dHJzOiB7IHF1ZXN0aW9uOiBfdm0uY2VsbC5wYW5lbCwgY3NzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3NlcyB9LFxuICAgICAgICAgIH0pXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLmNlbGwuaGFzUXVlc3Rpb25cbiAgICAgICAgPyBfYyhcbiAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jZWxsUXVlc3Rpb25XcmFwcGVyIH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICFfdm0uY2VsbC5pc0Nob2ljZSAmJiBfdm0uY2VsbC5xdWVzdGlvbi5pc0RlZmF1bHRSZW5kZXJpbmcoKVxuICAgICAgICAgICAgICAgID8gX2MoX3ZtLmdldENvbXBvbmVudE5hbWUoX3ZtLmNlbGwucXVlc3Rpb24pLCB7XG4gICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLmlzVmlzaWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwiaXNWaXNpYmxlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgdGFnOiBcImNvbXBvbmVudFwiLFxuICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBxdWVzdGlvbjogX3ZtLmNlbGwucXVlc3Rpb24gfSxcbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgIV92bS5jZWxsLmlzQ2hvaWNlICYmICFfdm0uY2VsbC5xdWVzdGlvbi5pc0RlZmF1bHRSZW5kZXJpbmcoKVxuICAgICAgICAgICAgICAgID8gX2MoX3ZtLmNlbGwucXVlc3Rpb24uZ2V0Q29tcG9uZW50TmFtZSgpLCB7XG4gICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLmlzVmlzaWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwiaXNWaXNpYmxlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgdGFnOiBcImNvbXBvbmVudFwiLFxuICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBxdWVzdGlvbjogX3ZtLmNlbGwucXVlc3Rpb24gfSxcbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgX3ZtLmNlbGwuaXNSYWRpb1xuICAgICAgICAgICAgICAgID8gX2MoXCJzdXJ2ZXktcmFkaW9ncm91cC1pdGVtXCIsIHtcbiAgICAgICAgICAgICAgICAgICAga2V5OiBfdm0uY2VsbC5pdGVtLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLmNlbGwucXVlc3Rpb24uZ2V0SXRlbUNsYXNzKF92bS5jZWxsLml0ZW0pLFxuICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uOiBfdm0uY2VsbC5xdWVzdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICBpdGVtOiBfdm0uY2VsbC5pdGVtLFxuICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBfdm0uZ2V0Q2VsbEluZGV4KCksXG4gICAgICAgICAgICAgICAgICAgICAgaGlkZUxhYmVsOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICBfdm0uY2VsbC5pc0NoZWNrYm94XG4gICAgICAgICAgICAgICAgPyBfYyhcInN1cnZleS1jaGVja2JveC1pdGVtXCIsIHtcbiAgICAgICAgICAgICAgICAgICAga2V5OiBfdm0uY2VsbC5pdGVtLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLmNlbGwucXVlc3Rpb24uZ2V0SXRlbUNsYXNzKF92bS5jZWxsLml0ZW0pLFxuICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uOiBfdm0uY2VsbC5xdWVzdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICBpdGVtOiBfdm0uY2VsbC5pdGVtLFxuICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBfdm0uZ2V0Q2VsbEluZGV4KCksXG4gICAgICAgICAgICAgICAgICAgICAgaGlkZUxhYmVsOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICBfdm0uY2VsbC5pc090aGVyQ2hvaWNlXG4gICAgICAgICAgICAgICAgPyBfYyhcInN1cnZleS1vdGhlci1jaG9pY2VcIiwge1xuICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBxdWVzdGlvbjogX3ZtLmNlbGwucXVlc3Rpb24gfSxcbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAxXG4gICAgICAgICAgKVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF92bS5jZWxsLmhhc1RpdGxlXG4gICAgICAgID8gX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHsgYXR0cnM6IHsgbG9jU3RyaW5nOiBfdm0uY2VsbC5sb2NUaXRsZSB9IH0pXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgISFfdm0uY2VsbC5yZXF1aXJlZFRleHRcbiAgICAgICAgPyBfYyhcInNwYW5cIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuY2VsbFJlcXVpcmVkVGV4dCB9LCBbXG4gICAgICAgICAgICBfdm0uX3YoX3ZtLl9zKF92bS5jZWxsLnJlcXVpcmVkVGV4dCkpLFxuICAgICAgICAgIF0pXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgXSxcbiAgICAxXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL21hdHJpeGRyb3Bkb3duLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wYjRkYTZkOCZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL21hdHJpeGRyb3Bkb3duLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wYjRkYTZkOCYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwicmVuZGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVuZGVyOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzdGF0aWNSZW5kZXJGbnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdGF0aWNSZW5kZXJGbnM7IH0pO1xudmFyIHJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJzdXJ2ZXktbWF0cml4dGFibGVcIiwgeyBhdHRyczogeyBxdWVzdGlvbjogX3ZtLnF1ZXN0aW9uIH0gfSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL21hdHJpeGR5bmFtaWMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTlhMGI4OGU4JlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL3Z1ZS9tYXRyaXhkeW5hbWljLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD05YTBiODhlOCYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiByZW5kZXI7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0YXRpY1JlbmRlckZuczsgfSk7XG52YXIgcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIFtcbiAgICAgIF92bS5xdWVzdGlvbi5yZW5kZXJlZFRhYmxlLnNob3dBZGRSb3dPblRvcFxuICAgICAgICA/IF9jKFwiZGl2XCIsIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmZvb3RlciB9LCBbXG4gICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgXCJidXR0b25cIixcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uZ2V0QWRkUm93QnV0dG9uQ3NzKCksXG4gICAgICAgICAgICAgICAgYXR0cnM6IHsgdHlwZTogXCJidXR0b25cIiB9LFxuICAgICAgICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0uYWRkUm93Q2xpY2sgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIF9jKFwic3VydmV5LXN0cmluZ1wiLCB7XG4gICAgICAgICAgICAgICAgICBhdHRyczogeyBsb2NTdHJpbmc6IF92bS5xdWVzdGlvbi5sb2NBZGRSb3dUZXh0IH0sXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICBfYyhcInNwYW5cIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaWNvbkFkZCB9KSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICBdKVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF92bS5xdWVzdGlvbi5yZW5kZXJlZFRhYmxlLnNob3dUYWJsZVxuICAgICAgICA/IF9jKFwic3VydmV5LW1hdHJpeHRhYmxlXCIsIHsgYXR0cnM6IHsgcXVlc3Rpb246IF92bS5xdWVzdGlvbiB9IH0pXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgIV92bS5xdWVzdGlvbi5yZW5kZXJlZFRhYmxlLnNob3dUYWJsZVxuICAgICAgICA/IF9jKFwiZGl2XCIsIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmVtcHR5Um93c1NlY3Rpb24gfSwgW1xuICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmVtcHR5Um93c1RleHQgfSxcbiAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIF9jKFwic3VydmV5LXN0cmluZ1wiLCB7XG4gICAgICAgICAgICAgICAgICBhdHRyczogeyBsb2NTdHJpbmc6IF92bS5xdWVzdGlvbi5sb2NFbXB0eVJvd3NUZXh0IH0sXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLnJlbmRlcmVkVGFibGUuc2hvd0FkZFJvd1xuICAgICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgICAgXCJidXR0b25cIixcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5nZXRBZGRSb3dCdXR0b25Dc3ModHJ1ZSksXG4gICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHR5cGU6IFwiYnV0dG9uXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgb246IHsgY2xpY2s6IF92bS5hZGRSb3dDbGljayB9LFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBsb2NTdHJpbmc6IF92bS5xdWVzdGlvbi5sb2NBZGRSb3dUZXh0IH0sXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICBfYyhcInNwYW5cIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaWNvbkFkZCB9KSxcbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgIF0pXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLnF1ZXN0aW9uLnJlbmRlcmVkVGFibGUuc2hvd0FkZFJvd09uQm90dG9tXG4gICAgICAgID8gX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuZm9vdGVyIH0sIFtcbiAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICBcImJ1dHRvblwiLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5nZXRBZGRSb3dCdXR0b25Dc3MoKSxcbiAgICAgICAgICAgICAgICBhdHRyczogeyB0eXBlOiBcImJ1dHRvblwiIH0sXG4gICAgICAgICAgICAgICAgb246IHsgY2xpY2s6IF92bS5hZGRSb3dDbGljayB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHtcbiAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IGxvY1N0cmluZzogX3ZtLnF1ZXN0aW9uLmxvY0FkZFJvd1RleHQgfSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgIF9jKFwic3BhblwiLCB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pY29uQWRkIH0pLFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAxXG4gICAgICAgICAgICApLFxuICAgICAgICAgIF0pXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgXSxcbiAgICAxXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL21hdHJpeGhlYWRlcnJlcXVpcmVkLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01ZDk5NTAyMiZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL21hdHJpeGhlYWRlcnJlcXVpcmVkLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01ZDk5NTAyMiYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwicmVuZGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVuZGVyOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzdGF0aWNSZW5kZXJGbnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdGF0aWNSZW5kZXJGbnM7IH0pO1xudmFyIHJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX3ZtLmNvbHVtbi5pc1JlbmRlcmVkUmVxdWlyZWRcbiAgICA/IF9jKFwic3BhblwiLCB7IHN0YXRpY0NsYXNzOiBcInN2LXZ1ZS10aXRsZS1hZGRpdGlvbmFsLWRpdlwiIH0sIFtcbiAgICAgICAgX2MoXCJzcGFuXCIsIFtfdm0uX3YoXCLCoFwiKV0pLFxuICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICBfYyhcInNwYW5cIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuY2VsbFJlcXVpcmVkVGV4dCB9LCBbXG4gICAgICAgICAgX3ZtLl92KF92bS5fcyhfdm0uY29sdW1uLnJlcXVpcmVkVGV4dCkpLFxuICAgICAgICBdKSxcbiAgICAgIF0pXG4gICAgOiBfdm0uX2UoKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvbWF0cml4dGFibGUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWZhMTk3ZTRhJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NyYy92dWUvbWF0cml4dGFibGUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWZhMTk3ZTRhJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiByZW5kZXI7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0YXRpY1JlbmRlckZuczsgfSk7XG52YXIgcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHtcbiAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy50YWJsZVdyYXBwZXIsXG4gICAgICBzdHlsZTogeyBvdmVyZmxvd1g6IF92bS5xdWVzdGlvbi5zaG93SG9yaXpvbnRhbFNjcm9sbCA/IFwic2Nyb2xsXCIgOiBcIlwiIH0sXG4gICAgfSxcbiAgICBbXG4gICAgICBfYyhcInRhYmxlXCIsIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5nZXRUYWJsZUNzcygpIH0sIFtcbiAgICAgICAgX3ZtLnRhYmxlLnNob3dIZWFkZXJcbiAgICAgICAgICA/IF9jKFwidGhlYWRcIiwgW1xuICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICBcInRyXCIsXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgX3ZtLl9sKF92bS50YWJsZS5oZWFkZXJSb3cuY2VsbHMsIGZ1bmN0aW9uIChjZWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICAgICAgY2VsbC5oYXNUaXRsZVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInRoXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImhlYWRlcl9cIiArIGNlbGwuaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogY2VsbC5jbGFzc05hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5XaWR0aDogY2VsbC5taW5XaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGNlbGwud2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgbG9jU3RyaW5nOiBjZWxsLmxvY1RpdGxlIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhIWNlbGwuY29sdW1uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gX2MoXCJzdXJ2ZXktbWF0cml4aGVhZGVycmVxdWlyZWRcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uOiBjZWxsLmNvbHVtbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb246IF92bS5xdWVzdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICFjZWxsLmhhc1RpdGxlXG4gICAgICAgICAgICAgICAgICAgICAgICA/IF9jKFwidGRcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJoZWFkZXJfXCIgKyBjZWxsLmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBjZWxsLmNsYXNzTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluV2lkdGg6IGNlbGwubWluV2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogY2VsbC53aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICBdKVxuICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgIF9jKFxuICAgICAgICAgIFwidGJvZHlcIixcbiAgICAgICAgICBbXG4gICAgICAgICAgICBfdm0uX2woX3ZtLnRhYmxlLnJvd3MsIGZ1bmN0aW9uIChyb3cpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICByb3cudmlzaWJsZVxuICAgICAgICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICAgICAgICBcInRyXCIsXG4gICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBfdm0ucXVlc3Rpb24uaW5wdXRJZCArIFwiX1wiICsgcm93LmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IHJvdy5jbGFzc05hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBcImRhdGEtc3YtZHJvcC10YXJnZXQtbWF0cml4LXJvd1wiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdy5yb3cgJiYgcm93LnJvdy5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICBfdm0uX2wocm93LmNlbGxzLCBmdW5jdGlvbiAoY2VsbCwgY2VsbEluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2MoXCJzdXJ2ZXktbWF0cml4Y2VsbFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogcm93LmlkICsgXCJfXCIgKyBjZWxsSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IGNlbGw6IGNlbGwsIHF1ZXN0aW9uOiBfdm0ucXVlc3Rpb24gfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIDJcbiAgICAgICAgKSxcbiAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgX3ZtLnRhYmxlLnNob3dGb290ZXJcbiAgICAgICAgICA/IF9jKFwidGZvb3RcIiwgW1xuICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICBcInRyXCIsXG4gICAgICAgICAgICAgICAgX3ZtLl9sKF92bS50YWJsZS5mb290ZXJSb3cuY2VsbHMsIGZ1bmN0aW9uIChjZWxsLCBjZWxsSW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBfYyhcInN1cnZleS1tYXRyaXhjZWxsXCIsIHtcbiAgICAgICAgICAgICAgICAgICAga2V5OiBcImZvb3Rlcl9cIiArIGNlbGxJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgY2VsbDogY2VsbCwgcXVlc3Rpb246IF92bS5xdWVzdGlvbiB9LFxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICBdKVxuICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBdKSxcbiAgICBdXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL211bHRpcGxldGV4dC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9OTNmZTRjMDImXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NyYy92dWUvbXVsdGlwbGV0ZXh0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD05M2ZlNGMwMiYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInJlbmRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHJlbmRlcjsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic3RhdGljUmVuZGVyRm5zXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc3RhdGljUmVuZGVyRm5zOyB9KTtcbnZhciByZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFwidGFibGVcIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmdldFF1ZXN0aW9uUm9vdENzcygpIH0sIFtcbiAgICBfYyhcbiAgICAgIFwidGJvZHlcIixcbiAgICAgIFtcbiAgICAgICAgX3ZtLl9sKF92bS5xdWVzdGlvbi5nZXRSb3dzKCksIGZ1bmN0aW9uIChyb3csIHJvd0luZGV4KSB7XG4gICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHJvdy5pc1Zpc2libGVcbiAgICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICAgIFwidHJcIixcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAga2V5OiBfdm0ucXVlc3Rpb24uaW5wdXRJZCArIFwicm93a2V5XCIgKyByb3dJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLnJvdyxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBfdm0uX2wocm93LmNlbGxzLCBmdW5jdGlvbiAoY2VsbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2MoXG4gICAgICAgICAgICAgICAgICAgICAgXCJ0ZFwiLFxuICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJpdGVtXCIgKyBjZWxsLml0ZW0uZWRpdG9yLmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IGNlbGwuY2xhc3NOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJzdXJ2ZXktbXVsdGlwbGV0ZXh0LWl0ZW1cIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBxdWVzdGlvbjogX3ZtLnF1ZXN0aW9uLCBjZWxsOiBjZWxsIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgIF1cbiAgICAgICAgfSksXG4gICAgICBdLFxuICAgICAgMlxuICAgICksXG4gIF0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9tdWx0aXBsZXRleHRpdGVtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yMjQ4ODgxMiZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NyYy92dWUvbXVsdGlwbGV0ZXh0aXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MjI0ODg4MTImICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwicmVuZGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVuZGVyOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzdGF0aWNSZW5kZXJGbnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdGF0aWNSZW5kZXJGbnM7IH0pO1xudmFyIHJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gIV92bS5jZWxsLmlzRXJyb3JzQ2VsbFxuICAgID8gX2MoXCJsYWJlbFwiLCB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uZ2V0SXRlbUxhYmVsQ3NzKF92bS5pdGVtKSB9LCBbXG4gICAgICAgIF9jKFxuICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5nZXRJdGVtVGl0bGVDc3MoKSB9LFxuICAgICAgICAgIFtcbiAgICAgICAgICAgIF92bS5pdGVtLmVkaXRvci5pc1JlcXVpcmVUZXh0QmVmb3JlVGl0bGUgfHxcbiAgICAgICAgICAgIF92bS5pdGVtLmVkaXRvci5pc1JlcXVpcmVUZXh0T25TdGFydFxuICAgICAgICAgICAgICA/IF9jKFwic3BhblwiLCB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yZXF1aXJlZFRleHQgfSwgW1xuICAgICAgICAgICAgICAgICAgX3ZtLl92KF92bS5fcyhfdm0uaXRlbS5lZGl0b3IucmVxdWlyZWRUZXh0KSksXG4gICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICBfYyhcInN1cnZleS1zdHJpbmdcIiwgeyBhdHRyczogeyBsb2NTdHJpbmc6IF92bS5pdGVtLmxvY1RpdGxlIH0gfSksXG4gICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgX3ZtLml0ZW0uZWRpdG9yLmlzUmVxdWlyZVRleHRBZnRlclRpdGxlXG4gICAgICAgICAgICAgID8gX2MoXCJzcGFuXCIsIFtfdm0uX3YoXCLCoFwiKV0pXG4gICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgX3ZtLml0ZW0uZWRpdG9yLmlzUmVxdWlyZVRleHRBZnRlclRpdGxlXG4gICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLnJlcXVpcmVkVGV4dCxcbiAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgXCJhcmlhLWhpZGRlblwiOiBcInRydWVcIiB9LFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIFtfdm0uX3YoX3ZtLl9zKF92bS5pdGVtLmVkaXRvci5yZXF1aXJlZFRleHQpKV1cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgXSxcbiAgICAgICAgICAxXG4gICAgICAgICksXG4gICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgIF9jKFxuICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAga2V5OiBfdm0uaXRlbS5lZGl0b3IuaWQsXG4gICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmdldEl0ZW1Dc3MoKSxcbiAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgIGZvY3VzaW46IGZ1bmN0aW9uICgkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLml0ZW0uZm9jdXNJbigpXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgW1xuICAgICAgICAgICAgX2MoX3ZtLmdldENvbXBvbmVudE5hbWUoX3ZtLml0ZW0uZWRpdG9yKSwge1xuICAgICAgICAgICAgICB0YWc6IFwiY29tcG9uZW50XCIsXG4gICAgICAgICAgICAgIGF0dHJzOiB7IHF1ZXN0aW9uOiBfdm0uaXRlbS5lZGl0b3IgfSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIF0sXG4gICAgICAgICAgMVxuICAgICAgICApLFxuICAgICAgXSlcbiAgICA6IF9jKFwic3VydmV5LWVycm9yc1wiLCB7IGF0dHJzOiB7IGVsZW1lbnQ6IF92bS5pdGVtLmVkaXRvciB9IH0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9wYWdlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00ZTk2MmE1MSZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NyYy92dWUvcGFnZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NGU5NjJhNTEmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwicmVuZGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVuZGVyOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzdGF0aWNSZW5kZXJGbnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdGF0aWNSZW5kZXJGbnM7IH0pO1xudmFyIHJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICB7IGNsYXNzOiBfdm0ucGFnZS5jc3NSb290IH0sXG4gICAgW1xuICAgICAgX2MoXCJzdXJ2ZXktZWxlbWVudC10aXRsZVwiLCB7XG4gICAgICAgIGF0dHJzOiB7IGVsZW1lbnQ6IF92bS5wYWdlLCBjc3M6IF92bS5jc3MgfSxcbiAgICAgIH0pLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF92bS5zaG93RGVzY3JpcHRpb25cbiAgICAgICAgPyBfYyhcbiAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICB7IGNsYXNzOiBfdm0ucGFnZS5jc3NDbGFzc2VzLnBhZ2UuZGVzY3JpcHRpb24gfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHtcbiAgICAgICAgICAgICAgICBhdHRyczogeyBsb2NTdHJpbmc6IF92bS5wYWdlLmxvY0Rlc2NyaXB0aW9uIH0sXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIDFcbiAgICAgICAgICApXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLl9sKF92bS5yb3dzLCBmdW5jdGlvbiAocm93LCBpbmRleCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIHJvdy52aXNpYmxlXG4gICAgICAgICAgICA/IF9jKFwic3VydmV5LXJvd1wiLCB7XG4gICAgICAgICAgICAgICAga2V5OiBfdm0ucGFnZS5pZCArIFwiX1wiICsgaW5kZXgsXG4gICAgICAgICAgICAgICAgYXR0cnM6IHsgcm93OiByb3csIHN1cnZleTogX3ZtLnN1cnZleSwgY3NzOiBfdm0uY3NzIH0sXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICBdXG4gICAgICB9KSxcbiAgICBdLFxuICAgIDJcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvcGFuZWwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTBjNzg4OTljJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NyYy92dWUvcGFuZWwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTBjNzg4OTljJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiByZW5kZXI7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0YXRpY1JlbmRlckZuczsgfSk7XG52YXIgcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfdm0ucXVlc3Rpb24uaXNWaXNpYmxlXG4gICAgPyBfYyhcbiAgICAgICAgXCJkaXZcIixcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uZ2V0Q29udGFpbmVyQ3NzKCksXG4gICAgICAgICAgYXR0cnM6IHsgaWQ6IF92bS5xdWVzdGlvbi5pZCB9LFxuICAgICAgICB9LFxuICAgICAgICBbXG4gICAgICAgICAgX3ZtLnF1ZXN0aW9uLnNob3dFcnJvcnNBYm92ZVBhbmVsXG4gICAgICAgICAgICA/IF9jKFwic3VydmV5LWVycm9yc1wiLCB7IGF0dHJzOiB7IGVsZW1lbnQ6IF92bS5xdWVzdGlvbiB9IH0pXG4gICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgX3ZtLnF1ZXN0aW9uLmhhc1RpdGxlIHx8IF92bS5xdWVzdGlvbi5oYXNEZXNjcmlwdGlvblxuICAgICAgICAgICAgPyBfYyhcInN1cnZleS1lbGVtZW50LWhlYWRlclwiLCB7XG4gICAgICAgICAgICAgICAgYXR0cnM6IHsgZWxlbWVudDogX3ZtLnF1ZXN0aW9uLCBjc3M6IF92bS5jc3MgfSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAhX3ZtLnF1ZXN0aW9uLnNob3dFcnJvcnNBYm92ZVBhbmVsXG4gICAgICAgICAgICA/IF9jKFwic3VydmV5LWVycm9yc1wiLCB7IGF0dHJzOiB7IGVsZW1lbnQ6IF92bS5xdWVzdGlvbiB9IH0pXG4gICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgIV92bS5pc0NvbGxhcHNlZFxuICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5wYW5lbC5jb250ZW50LFxuICAgICAgICAgICAgICAgICAgc3R5bGU6IHsgcGFkZGluZ0xlZnQ6IF92bS5xdWVzdGlvbi5pbm5lclBhZGRpbmdMZWZ0IH0sXG4gICAgICAgICAgICAgICAgICBhdHRyczogeyBpZDogX3ZtLnF1ZXN0aW9uLmNvbnRlbnRJZCB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgX3ZtLl9sKF92bS5yb3dzLCBmdW5jdGlvbiAocm93LCBpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICAgIHJvdy52aXNpYmxlXG4gICAgICAgICAgICAgICAgICAgICAgICA/IF9jKFwic3VydmV5LXJvd1wiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBfdm0ucXVlc3Rpb24uaWQgKyBcIl9cIiArIGluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3c6IHJvdyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cnZleTogX3ZtLnN1cnZleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzczogX3ZtLmNzcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgX2MoXCJzdi1hY3Rpb24tYmFyXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgbW9kZWw6IF92bS5xdWVzdGlvbi5nZXRGb290ZXJUb29sYmFyKCkgfSxcbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICBdLFxuICAgICAgICAxXG4gICAgICApXG4gICAgOiBfdm0uX2UoKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvcGFuZWxkeW5hbWljLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD05ZGRhNWQwNiZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL3Z1ZS9wYW5lbGR5bmFtaWMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTlkZGE1ZDA2JiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwicmVuZGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVuZGVyOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzdGF0aWNSZW5kZXJGbnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdGF0aWNSZW5kZXJGbnM7IH0pO1xudmFyIHJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yb290IH0sXG4gICAgW1xuICAgICAgX3ZtLnF1ZXN0aW9uLmdldFNob3dOb0VudHJpZXNQbGFjZWhvbGRlcigpXG4gICAgICAgID8gX2MoXG4gICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMubm9FbnRyaWVzUGxhY2Vob2xkZXIgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgbG9jU3RyaW5nOiBfdm0ucXVlc3Rpb24ubG9jTm9FbnRyaWVzVGV4dCB9LFxuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgIF9jKFwic3YtcGFuZWxkeW5hbWljLWFkZC1idG5cIiwge1xuICAgICAgICAgICAgICAgIGF0dHJzOiB7IGRhdGE6IHsgcXVlc3Rpb246IF92bS5xdWVzdGlvbiB9IH0sXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIDFcbiAgICAgICAgICApXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgIV92bS5zaG93TGVnYWN5TmF2aWdhdGlvbiAmJlxuICAgICAgX3ZtLnF1ZXN0aW9uLmlzUHJvZ3Jlc3NUb3BTaG93aW5nICYmXG4gICAgICBfdm0ucXVlc3Rpb24uaXNSYW5nZVNob3dpbmdcbiAgICAgICAgPyBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5wcm9ncmVzcyB9LCBbXG4gICAgICAgICAgICBfYyhcImRpdlwiLCB7XG4gICAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5wcm9ncmVzc0JhcixcbiAgICAgICAgICAgICAgc3R5bGU6IHsgd2lkdGg6IF92bS5xdWVzdGlvbi5wcm9ncmVzcyB9LFxuICAgICAgICAgICAgICBhdHRyczogeyByb2xlOiBcInByb2dyZXNzYmFyXCIgfSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIF0pXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLnNob3dMZWdhY3lOYXZpZ2F0aW9uICYmIF92bS5xdWVzdGlvbi5pc1Byb2dyZXNzVG9wU2hvd2luZ1xuICAgICAgICA/IF9jKFwic3VydmV5LXBhbmVsZHluYW1pY3Byb2dyZXNzXCIsIHtcbiAgICAgICAgICAgIGF0dHJzOiB7IHF1ZXN0aW9uOiBfdm0ucXVlc3Rpb24gfSxcbiAgICAgICAgICB9KVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF92bS5fbChfdm0ucmVuZGVyZWRQYW5lbHMsIGZ1bmN0aW9uIChwYW5lbCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICBfYyhcbiAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICB7IGtleTogcGFuZWwuaWQsIGNsYXNzOiBfdm0ucXVlc3Rpb24uZ2V0UGFuZWxXcmFwcGVyQ3NzKCkgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX2MoXCJzdXJ2ZXktcGFuZWxcIiwgeyBhdHRyczogeyBxdWVzdGlvbjogcGFuZWwsIGNzczogX3ZtLmNzcyB9IH0pLFxuICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24ucGFuZWxSZW1vdmVCdXR0b25Mb2NhdGlvbiA9PT0gXCJyaWdodFwiICYmXG4gICAgICAgICAgICAgIF92bS5xdWVzdGlvbi5jYW5SZW1vdmVQYW5lbCAmJlxuICAgICAgICAgICAgICBwYW5lbC5zdGF0ZSAhPT0gXCJjb2xsYXBzZWRcIlxuICAgICAgICAgICAgICAgID8gX2MoXCJzdi1wYW5lbGR5bmFtaWMtcmVtb3ZlLWJ0blwiLCB7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IGRhdGE6IHsgcXVlc3Rpb246IF92bS5xdWVzdGlvbiwgcGFuZWw6IHBhbmVsIH0gfSxcbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAxXG4gICAgICAgICAgKSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgIF92bS5xdWVzdGlvbi5pc1JlbmRlck1vZGVMaXN0ICYmXG4gICAgICAgICAgaW5kZXggPCBfdm0ucXVlc3Rpb24udmlzaWJsZVBhbmVsQ291bnQgLSAxXG4gICAgICAgICAgICA/IF9jKFwiaHJcIiwge1xuICAgICAgICAgICAgICAgIGtleTogXCJzZXBhcmF0b3JcIiArIHBhbmVsLmlkLFxuICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5zZXBhcmF0b3IsXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICBdXG4gICAgICB9KSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfdm0uc2hvd0xlZ2FjeU5hdmlnYXRpb24gJiYgX3ZtLnF1ZXN0aW9uLmlzUHJvZ3Jlc3NCb3R0b21TaG93aW5nXG4gICAgICAgID8gX2MoXCJzdXJ2ZXktcGFuZWxkeW5hbWljcHJvZ3Jlc3NcIiwge1xuICAgICAgICAgICAgYXR0cnM6IHsgcXVlc3Rpb246IF92bS5xdWVzdGlvbiB9LFxuICAgICAgICAgIH0pXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLnNob3dMZWdhY3lOYXZpZ2F0aW9uICYmIF92bS5xdWVzdGlvbi5pc1JlbmRlck1vZGVMaXN0XG4gICAgICAgID8gX2MoXCJzdi1wYW5lbGR5bmFtaWMtYWRkLWJ0blwiLCB7XG4gICAgICAgICAgICBhdHRyczogeyBkYXRhOiB7IHF1ZXN0aW9uOiBfdm0ucXVlc3Rpb24gfSB9LFxuICAgICAgICAgIH0pXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLnF1ZXN0aW9uLnNob3dOYXZpZ2F0aW9uXG4gICAgICAgID8gX2MoXCJzdXJ2ZXktcGFuZWxkeW5hbWljcHJvZ3Jlc3MtdjJcIiwge1xuICAgICAgICAgICAgYXR0cnM6IHsgcXVlc3Rpb246IF92bS5xdWVzdGlvbiB9LFxuICAgICAgICAgIH0pXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgXSxcbiAgICAyXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL3BhbmVsZHluYW1pY3Byb2dyZXNzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03NDJiZmZhYyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL3BhbmVsZHluYW1pY3Byb2dyZXNzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03NDJiZmZhYyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwicmVuZGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVuZGVyOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzdGF0aWNSZW5kZXJGbnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdGF0aWNSZW5kZXJGbnM7IH0pO1xudmFyIHJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJkaXZcIiwgeyBjbGFzczogdGhpcy5jc3NDbGFzcyB9LCBbXG4gICAgX2MoXG4gICAgICBcImRpdlwiLFxuICAgICAgeyBjbGFzczogdGhpcy5jc3NDbGFzcywgc3RhdGljU3R5bGU6IHsgY2xlYXI6IFwiYm90aFwiIH0gfSxcbiAgICAgIFtcbiAgICAgICAgX2MoXG4gICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5wcm9ncmVzc0NvbnRhaW5lciB9LFxuICAgICAgICAgIFtcbiAgICAgICAgICAgIF9jKFwic3YtcGFuZWxkeW5hbWljLXByZXYtYnRuXCIsIHtcbiAgICAgICAgICAgICAgYXR0cnM6IHsgZGF0YTogeyBxdWVzdGlvbjogX3ZtLnF1ZXN0aW9uIH0gfSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgIF92bS5xdWVzdGlvbi5pc1JhbmdlU2hvd2luZ1xuICAgICAgICAgICAgICA/IF9jKFwiZGl2XCIsIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLnByb2dyZXNzIH0sIFtcbiAgICAgICAgICAgICAgICAgIF9jKFwiZGl2XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLnByb2dyZXNzQmFyLFxuICAgICAgICAgICAgICAgICAgICBzdHlsZTogeyB3aWR0aDogX3ZtLnF1ZXN0aW9uLnByb2dyZXNzIH0sXG4gICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHJvbGU6IFwicHJvZ3Jlc3NiYXJcIiB9LFxuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICBfYyhcInN2LXBhbmVsZHluYW1pYy1uZXh0LWJ0blwiLCB7XG4gICAgICAgICAgICAgIGF0dHJzOiB7IGRhdGE6IHsgcXVlc3Rpb246IF92bS5xdWVzdGlvbiB9IH0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIDFcbiAgICAgICAgKSxcbiAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgX2MoXCJzdi1wYW5lbGR5bmFtaWMtYWRkLWJ0blwiLCB7XG4gICAgICAgICAgYXR0cnM6IHsgZGF0YTogeyBxdWVzdGlvbjogX3ZtLnF1ZXN0aW9uIH0gfSxcbiAgICAgICAgfSksXG4gICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgIF9jKFwic3YtcGFuZWxkeW5hbWljLXByb2dyZXNzLXRleHRcIiwge1xuICAgICAgICAgIGF0dHJzOiB7IGRhdGE6IHsgcXVlc3Rpb246IF92bS5xdWVzdGlvbiB9IH0sXG4gICAgICAgIH0pLFxuICAgICAgXSxcbiAgICAgIDFcbiAgICApLFxuICBdKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvcGFuZWxkeW5hbWljcHJvZ3Jlc3NWMi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MzNjZTQwNDYmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL3BhbmVsZHluYW1pY3Byb2dyZXNzVjIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTMzY2U0MDQ2JiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInJlbmRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHJlbmRlcjsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic3RhdGljUmVuZGVyRm5zXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc3RhdGljUmVuZGVyRm5zOyB9KTtcbnZhciByZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuICEhX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuZm9vdGVyXG4gICAgPyBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5mb290ZXIgfSwgW1xuICAgICAgICBfYyhcImhyXCIsIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLnNlcGFyYXRvciB9KSxcbiAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgX3ZtLnF1ZXN0aW9uLmlzUmFuZ2VTaG93aW5nICYmIF92bS5xdWVzdGlvbi5pc1Byb2dyZXNzQm90dG9tU2hvd2luZ1xuICAgICAgICAgID8gX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMucHJvZ3Jlc3MgfSwgW1xuICAgICAgICAgICAgICBfYyhcImRpdlwiLCB7XG4gICAgICAgICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLnByb2dyZXNzQmFyLFxuICAgICAgICAgICAgICAgIHN0eWxlOiB7IHdpZHRoOiBfdm0ucXVlc3Rpb24ucHJvZ3Jlc3MgfSxcbiAgICAgICAgICAgICAgICBhdHRyczogeyByb2xlOiBcInByb2dyZXNzYmFyXCIgfSxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBdKVxuICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgIF92bS5xdWVzdGlvbi5mb290ZXJUb29sYmFyLnZpc2libGVBY3Rpb25zLmxlbmd0aFxuICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmZvb3RlckJ1dHRvbnNDb250YWluZXIgfSxcbiAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIF9jKFwic3YtYWN0aW9uLWJhclwiLCB7XG4gICAgICAgICAgICAgICAgICBhdHRyczogeyBtb2RlbDogX3ZtLnF1ZXN0aW9uLmZvb3RlclRvb2xiYXIgfSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBdKVxuICAgIDogX3ZtLl9lKClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL3BvcHVwLXN1cnZleS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NzkzN2RmNWQmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NyYy92dWUvcG9wdXAtc3VydmV5LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03OTM3ZGY1ZCYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInJlbmRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHJlbmRlcjsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic3RhdGljUmVuZGVyRm5zXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc3RhdGljUmVuZGVyRm5zOyB9KTtcbnZhciByZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF92bS5zdXJ2ZXlXaW5kb3cuaXNTaG93aW5nXG4gICAgPyBfYyhcbiAgICAgICAgXCJkaXZcIixcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzOiBfdm0uc3VydmV5V2luZG93LmNzc1Jvb3QsXG4gICAgICAgICAgc3RhdGljU3R5bGU6IHsgcG9zaXRpb246IFwiZml4ZWRcIiwgYm90dG9tOiBcIjNweFwiLCByaWdodDogXCIxMHB4XCIgfSxcbiAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgbWF4V2lkdGg6IF92bS5zdXJ2ZXlXaW5kb3cucmVuZGVyZWRXaWR0aCxcbiAgICAgICAgICAgIHdpZHRoOiBfdm0uc3VydmV5V2luZG93LnJlbmRlcmVkV2lkdGgsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF9jKFwiZGl2XCIsIHsgY2xhc3M6IF92bS5zdXJ2ZXlXaW5kb3cuY3NzSGVhZGVyUm9vdCB9LCBbXG4gICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdGF0aWNTdHlsZToge1xuICAgICAgICAgICAgICAgICAgd2lkdGg6IFwiMTAwJVwiLFxuICAgICAgICAgICAgICAgICAgY3Vyc29yOiBcInBvaW50ZXJcIixcbiAgICAgICAgICAgICAgICAgIFwidXNlci1zZWxlY3RcIjogXCJub25lXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBvbjogeyBjbGljazogX3ZtLmRvRXhwYW5kIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLnN1cnZleVdpbmRvdy5jc3NIZWFkZXJUaXRsZSxcbiAgICAgICAgICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsgXCJwYWRkaW5nLXJpZ2h0XCI6IFwiMTBweFwiIH0sXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICBfYyhcInN1cnZleS1zdHJpbmdcIiwge1xuICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IGxvY1N0cmluZzogX3ZtLndpbmRvd1N1cnZleS5sb2NUaXRsZSB9LFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgIF9jKFwic3BhblwiLCB7XG4gICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLmV4cGFuZGVkQ3NzLFxuICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgXCJhcmlhLWhpZGRlblwiOiBcInRydWVcIiB9LFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgIF92bS5zdXJ2ZXlXaW5kb3cuYWxsb3dDbG9zZVxuICAgICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0uc3VydmV5V2luZG93LmNzc0hlYWRlckJ1dHRvbixcbiAgICAgICAgICAgICAgICAgICAgc3RhdGljU3R5bGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IFwicm90YXRlKDQ1ZGVnKVwiLFxuICAgICAgICAgICAgICAgICAgICAgIGZsb2F0OiBcInJpZ2h0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgY3Vyc29yOiBcInBvaW50ZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICBcInVzZXItc2VsZWN0XCI6IFwibm9uZVwiLFxuICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBcIjI0cHhcIixcbiAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IFwiMjRweFwiLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBvbjogeyBjbGljazogX3ZtLmRvSGlkZSB9LFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgX2MoXCJzdi1zdmctaWNvblwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgaWNvbk5hbWU6IFwiaWNvbi1leHBhbmRkZXRhaWxcIiwgc2l6ZTogMTYgfSxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICBfdm0uaXNFeHBhbmRlZFN1cnZleVxuICAgICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0uc3VydmV5V2luZG93LmNzc0hlYWRlckJ1dHRvbixcbiAgICAgICAgICAgICAgICAgICAgc3RhdGljU3R5bGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICBmbG9hdDogXCJyaWdodFwiLFxuICAgICAgICAgICAgICAgICAgICAgIGN1cnNvcjogXCJwb2ludGVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgXCJ1c2VyLXNlbGVjdFwiOiBcIm5vbmVcIixcbiAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogXCIyNHB4XCIsXG4gICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBcIjI0cHhcIixcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgb246IHsgY2xpY2s6IF92bS5kb0V4cGFuZCB9LFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgX2MoXCJzdi1zdmctaWNvblwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgaWNvbk5hbWU6IFwiaWNvbi1jb2xsYXBzZWRldGFpbFwiLCBzaXplOiAxNiB9LFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgIF0pLFxuICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgX3ZtLmlzRXhwYW5kZWRTdXJ2ZXlcbiAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLnN1cnZleVdpbmRvdy5jc3NCb2R5LFxuICAgICAgICAgICAgICAgICAgb246IHsgc2Nyb2xsOiBfdm0uZG9TY3JvbGwgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgIF9jKF92bS5nZXRTdXJ2ZXlDb21wb25lbnROYW1lKCksIHtcbiAgICAgICAgICAgICAgICAgICAgdGFnOiBcImNvbXBvbmVudFwiLFxuICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBzdXJ2ZXk6IF92bS53aW5kb3dTdXJ2ZXkgfSxcbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICBdXG4gICAgICApXG4gICAgOiBfdm0uX2UoKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvcHJvZ3Jlc3MudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTI3ZTMyNWVmJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NyYy92dWUvcHJvZ3Jlc3MudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTI3ZTMyNWVmJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiByZW5kZXI7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0YXRpY1JlbmRlckZuczsgfSk7XG52YXIgcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0uc3VydmV5LmdldFByb2dyZXNzQ3NzQ2xhc3Nlcyhfdm0uY29udGFpbmVyKSB9LCBbXG4gICAgX2MoXG4gICAgICBcImRpdlwiLFxuICAgICAge1xuICAgICAgICBjbGFzczogX3ZtLnN1cnZleS5jc3MucHJvZ3Jlc3NCYXIsXG4gICAgICAgIHN0eWxlOiB7IHdpZHRoOiBfdm0ucHJvZ3Jlc3MgfSxcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICByb2xlOiBcInByb2dyZXNzYmFyXCIsXG4gICAgICAgICAgXCJhcmlhLXZhbHVlbWluXCI6IFwiMFwiLFxuICAgICAgICAgIFwiYXJpYS12YWx1ZW1heFwiOiBcIjEwMFwiLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIFtcbiAgICAgICAgX2MoXCJzcGFuXCIsIHsgY2xhc3M6IF92bS5nZXRQcm9ncmVzc1RleHRJbkJhckNzcyhfdm0uc3VydmV5LmNzcykgfSwgW1xuICAgICAgICAgIF92bS5fdihfdm0uX3MoX3ZtLnN1cnZleS5wcm9ncmVzc1RleHQpKSxcbiAgICAgICAgXSksXG4gICAgICBdXG4gICAgKSxcbiAgICBfdm0uX3YoXCIgXCIpLFxuICAgIF9jKFwic3BhblwiLCB7IGNsYXNzOiBfdm0uZ2V0UHJvZ3Jlc3NUZXh0VW5kZXJCYXJDc3MoX3ZtLnN1cnZleS5jc3MpIH0sIFtcbiAgICAgIF92bS5fdihfdm0uX3MoX3ZtLnN1cnZleS5wcm9ncmVzc1RleHQpKSxcbiAgICBdKSxcbiAgXSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL3Byb2dyZXNzQnV0dG9ucy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MmFlN2RlNDImXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NyYy92dWUvcHJvZ3Jlc3NCdXR0b25zLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yYWU3ZGU0MiYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInJlbmRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHJlbmRlcjsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic3RhdGljUmVuZGVyRm5zXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc3RhdGljUmVuZGVyRm5zOyB9KTtcbnZhciByZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFwiZGl2XCIsIHsgY2xhc3M6IF92bS5jc3MucHJvZ3Jlc3NCdXR0b25zQ29udGFpbmVyQ2VudGVyIH0sIFtcbiAgICBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0uY3NzLnByb2dyZXNzQnV0dG9uc0NvbnRhaW5lciB9LCBbXG4gICAgICBfYyhcImRpdlwiLCB7XG4gICAgICAgIGNsYXNzOiBfdm0uZ2V0U2Nyb2xsQnV0dG9uQ3NzKF92bS5oYXNTY3JvbGxlciwgdHJ1ZSksXG4gICAgICAgIGF0dHJzOiB7IHJvbGU6IFwiYnV0dG9uXCIgfSxcbiAgICAgICAgb246IHtcbiAgICAgICAgICBjbGljazogZnVuY3Rpb24gKCRldmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIF92bS5jbGlja1Njcm9sbEJ1dHRvbih0cnVlKVxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcbiAgICAgICAgXCJkaXZcIixcbiAgICAgICAge1xuICAgICAgICAgIHJlZjogXCJwcm9ncmVzc0J1dHRvbnNMaXN0Q29udGFpbmVyXCIsXG4gICAgICAgICAgY2xhc3M6IF92bS5jc3MucHJvZ3Jlc3NCdXR0b25zTGlzdENvbnRhaW5lcixcbiAgICAgICAgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJ1bFwiLFxuICAgICAgICAgICAgeyBjbGFzczogX3ZtLmNzcy5wcm9ncmVzc0J1dHRvbnNMaXN0IH0sXG4gICAgICAgICAgICBfdm0uX2woX3ZtLnN1cnZleS52aXNpYmxlUGFnZXMsIGZ1bmN0aW9uIChwYWdlLCBpbmRleCkge1xuICAgICAgICAgICAgICByZXR1cm4gX2MoXG4gICAgICAgICAgICAgICAgXCJsaVwiLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGtleTogXCJsaXN0ZWxlbWVudFwiICsgaW5kZXgsXG4gICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLmdldExpc3RFbGVtZW50Q3NzKGluZGV4KSxcbiAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAoJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgX3ZtLmlzTGlzdEVsZW1lbnRDbGlja2FibGUoaW5kZXgpXG4gICAgICAgICAgICAgICAgICAgICAgICA/IF92bS5jbGlja0xpc3RFbGVtZW50KGluZGV4KVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLmNzcy5wcm9ncmVzc0J1dHRvbnNQYWdlVGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgdGl0bGU6IHBhZ2UucmVuZGVyZWROYXZpZ2F0aW9uVGl0bGUgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICAgICAgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3MocGFnZS5yZW5kZXJlZE5hdmlnYXRpb25UaXRsZSkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLmNzcy5wcm9ncmVzc0J1dHRvbnNQYWdlRGVzY3JpcHRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBwYWdlLmxvY05hdmlnYXRpb25EZXNjcmlwdGlvbi5yZW5kZXJlZEh0bWwsXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICAgICAgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3MocGFnZS5sb2NOYXZpZ2F0aW9uRGVzY3JpcHRpb24ucmVuZGVyZWRIdG1sKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgMFxuICAgICAgICAgICksXG4gICAgICAgIF1cbiAgICAgICksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXCJkaXZcIiwge1xuICAgICAgICBjbGFzczogX3ZtLmdldFNjcm9sbEJ1dHRvbkNzcyhfdm0uaGFzU2Nyb2xsZXIsIGZhbHNlKSxcbiAgICAgICAgYXR0cnM6IHsgcm9sZTogXCJidXR0b25cIiB9LFxuICAgICAgICBvbjoge1xuICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAoJGV2ZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gX3ZtLmNsaWNrU2Nyb2xsQnV0dG9uKGZhbHNlKVxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICBdKSxcbiAgXSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL3Byb2dyZXNzVG9jLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1mMGJkM2RlZSZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL3Byb2dyZXNzVG9jLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1mMGJkM2RlZSYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwicmVuZGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVuZGVyOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzdGF0aWNSZW5kZXJGbnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdGF0aWNSZW5kZXJGbnM7IH0pO1xudmFyIHJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICB7IGNsYXNzOiBfdm0udG9jTW9kZWwuY29udGFpbmVyQ3NzIH0sXG4gICAgW1xuICAgICAgX3ZtLnRvY01vZGVsLmlzTW9iaWxlXG4gICAgICAgID8gX2MoXG4gICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbeyBuYW1lOiBcImtleTJjbGlja1wiLCByYXdOYW1lOiBcInYta2V5MmNsaWNrXCIgfV0sXG4gICAgICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0udG9jTW9kZWwudG9nZ2xlUG9wdXAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF9jKFwic3Ytc3ZnLWljb25cIiwge1xuICAgICAgICAgICAgICAgIGF0dHJzOiB7IGljb25OYW1lOiBfdm0udG9jTW9kZWwuaWNvbiwgc2l6ZTogMjQgfSxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgIF9jKFwic3YtcG9wdXBcIiwgeyBhdHRyczogeyBtb2RlbDogX3ZtLnRvY01vZGVsLnBvcHVwTW9kZWwgfSB9KSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAxXG4gICAgICAgICAgKVxuICAgICAgICA6IF9jKFwic3YtbGlzdFwiLCB7IGF0dHJzOiB7IG1vZGVsOiBfdm0udG9jTW9kZWwubGlzdE1vZGVsIH0gfSksXG4gICAgXSxcbiAgICAxXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL3F1ZXN0aW9uLWNvbW1lbnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTBjMzU3ODhjJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL3Z1ZS9xdWVzdGlvbi1jb21tZW50LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wYzM1Nzg4YyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiByZW5kZXI7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0YXRpY1JlbmRlckZuczsgfSk7XG52YXIgcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfdm0ucXVlc3Rpb24uaXNSZWFkT25seVJlbmRlckRpdigpXG4gICAgPyBfYyhcImRpdlwiLCBbX3ZtLl92KF92bS5fcyhfdm0ucXVlc3Rpb24uY29tbWVudCkpXSlcbiAgICA6IF9jKFwidGV4dGFyZWFcIiwge1xuICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMub3RoZXIgfHwgX3ZtLmNvbW1lbnRDbGFzcyxcbiAgICAgICAgc3R5bGU6IHsgcmVzaXplOiBfdm0ucXVlc3Rpb24ucmVzaXplU3R5bGUgfSxcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICBpZDogX3ZtLnF1ZXN0aW9uLmNvbW1lbnRJZCxcbiAgICAgICAgICByZWFkb25seTogX3ZtLnF1ZXN0aW9uLmlzSW5wdXRSZWFkT25seSxcbiAgICAgICAgICBkaXNhYmxlZDogX3ZtLnF1ZXN0aW9uLmlzSW5wdXRSZWFkT25seSxcbiAgICAgICAgICBtYXhsZW5ndGg6IF92bS5xdWVzdGlvbi5nZXRPdGhlcnNNYXhMZW5ndGgoKSxcbiAgICAgICAgICBwbGFjZWhvbGRlcjogX3ZtLnF1ZXN0aW9uLnJlbmRlcmVkQ29tbWVudFBsYWNlaG9sZGVyLFxuICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOlxuICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLmFyaWFMYWJlbCB8fCBfdm0ucXVlc3Rpb24uYTExeV9pbnB1dF9hcmlhTGFiZWwsXG4gICAgICAgICAgXCJhcmlhLXJlcXVpcmVkXCI6XG4gICAgICAgICAgICBfdm0ucXVlc3Rpb24uYXJpYVJlcXVpcmVkIHx8IF92bS5xdWVzdGlvbi5hMTF5X2lucHV0X2FyaWFSZXF1aXJlZCxcbiAgICAgICAgfSxcbiAgICAgICAgZG9tUHJvcHM6IHsgdmFsdWU6IF92bS5xdWVzdGlvbi5jb21tZW50IH0sXG4gICAgICAgIG9uOiB7XG4gICAgICAgICAgY2hhbmdlOiBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLm9uQ29tbWVudENoYW5nZShlKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgaW5wdXQ6IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICBfdm0ucXVlc3Rpb24ub25Db21tZW50SW5wdXQoZSlcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL3F1ZXN0aW9uLW90aGVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1kMzk4NmVhYSZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL3F1ZXN0aW9uLW90aGVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1kMzk4NmVhYSYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwicmVuZGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVuZGVyOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzdGF0aWNSZW5kZXJGbnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdGF0aWNSZW5kZXJGbnM7IH0pO1xudmFyIHJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmdldENvbW1lbnRBcmVhQ3NzKHRydWUpIH0sIFtcbiAgICAhX3ZtLnF1ZXN0aW9uLmlzUmVhZE9ubHlSZW5kZXJEaXYoKVxuICAgICAgPyBfYyhcInRleHRhcmVhXCIsIHtcbiAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMub3RoZXIgfHwgX3ZtLmNvbW1lbnRDbGFzcyxcbiAgICAgICAgICBzdHlsZTogeyByZXNpemU6IF92bS5xdWVzdGlvbi5yZXNpemVTdHlsZSB9LFxuICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICBpZDogX3ZtLnF1ZXN0aW9uLm90aGVySWQsXG4gICAgICAgICAgICByZWFkb25seTogX3ZtLnF1ZXN0aW9uLmlzSW5wdXRSZWFkT25seSxcbiAgICAgICAgICAgIGRpc2FibGVkOiBfdm0ucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5LFxuICAgICAgICAgICAgbWF4bGVuZ3RoOiBfdm0ucXVlc3Rpb24uZ2V0T3RoZXJzTWF4TGVuZ3RoKCksXG4gICAgICAgICAgICBwbGFjZWhvbGRlcjogX3ZtLnF1ZXN0aW9uLm90aGVyUGxhY2Vob2xkZXIsXG4gICAgICAgICAgICBcImFyaWEtbGFiZWxcIjpcbiAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLmFyaWFMYWJlbCB8fCBfdm0ucXVlc3Rpb24uYTExeV9pbnB1dF9hcmlhTGFiZWwsXG4gICAgICAgICAgICBcImFyaWEtcmVxdWlyZWRcIjpcbiAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLmFyaWFSZXF1aXJlZCB8fCBfdm0ucXVlc3Rpb24uYTExeV9pbnB1dF9hcmlhUmVxdWlyZWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBkb21Qcm9wczogeyB2YWx1ZTogX3ZtLnF1ZXN0aW9uLm90aGVyVmFsdWUgfSxcbiAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgY2hhbmdlOiBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24ub25PdGhlclZhbHVlQ2hhbmdlKGUpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW5wdXQ6IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgIF92bS5xdWVzdGlvbi5vbk90aGVyVmFsdWVJbnB1dChlKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgOiBfdm0uX2UoKSxcbiAgICBfdm0ucXVlc3Rpb24uaXNSZWFkT25seVJlbmRlckRpdigpXG4gICAgICA/IF9jKFwiZGl2XCIsIFtfdm0uX3YoX3ZtLl9zKF92bS5xdWVzdGlvbi5vdGhlclZhbHVlKSldKVxuICAgICAgOiBfdm0uX2UoKSxcbiAgXSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL3JhZGlvZ3JvdXAudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTA2YzZkNTI2JlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL3Z1ZS9yYWRpb2dyb3VwLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wNmM2ZDUyNiYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiByZW5kZXI7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0YXRpY1JlbmRlckZuczsgfSk7XG52YXIgcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImZpZWxkc2V0XCIsXG4gICAge1xuICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5nZXRTZWxlY3RCYXNlUm9vdENzcygpLFxuICAgICAgYXR0cnM6IHtcbiAgICAgICAgcm9sZTogX3ZtLnF1ZXN0aW9uLmExMXlfaW5wdXRfYXJpYVJvbGUsXG4gICAgICAgIFwiYXJpYS1yZXF1aXJlZFwiOiBfdm0ucXVlc3Rpb24uYTExeV9pbnB1dF9hcmlhUmVxdWlyZWQsXG4gICAgICAgIFwiYXJpYS1sYWJlbFwiOiBfdm0ucXVlc3Rpb24uYTExeV9pbnB1dF9hcmlhTGFiZWwsXG4gICAgICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IF92bS5xdWVzdGlvbi5hMTF5X2lucHV0X2FyaWFMYWJlbGxlZEJ5LFxuICAgICAgICBcImFyaWEtaW52YWxpZFwiOiBfdm0ucXVlc3Rpb24uYTExeV9pbnB1dF9hcmlhSW52YWxpZCxcbiAgICAgICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6IF92bS5xdWVzdGlvbi5hMTF5X2lucHV0X2FyaWFEZXNjcmliZWRCeSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBbXG4gICAgICBfdm0uX2woX3ZtLnF1ZXN0aW9uLnZpc2libGVDaG9pY2VzLCBmdW5jdGlvbiAoaXRlbSwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuICFfdm0ucXVlc3Rpb24uaGFzQ29sdW1ucyAmJiAhX3ZtLnF1ZXN0aW9uLmJsb2NrZWRSb3dcbiAgICAgICAgICA/IF9jKFwic3VydmV5LXJhZGlvZ3JvdXAtaXRlbVwiLCB7XG4gICAgICAgICAgICAgIGtleTogaXRlbS52YWx1ZSxcbiAgICAgICAgICAgICAgY2xhc3M6IF92bS5nZXRJdGVtQ2xhc3MoaXRlbSksXG4gICAgICAgICAgICAgIGF0dHJzOiB7IHF1ZXN0aW9uOiBfdm0ucXVlc3Rpb24sIGl0ZW06IGl0ZW0sIGluZGV4OiBpbmRleCB9LFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICB9KSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfdm0ucXVlc3Rpb24uYmxvY2tlZFJvd1xuICAgICAgICA/IF9jKFxuICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLnJvb3RSb3cgfSxcbiAgICAgICAgICAgIF92bS5fbChfdm0ucXVlc3Rpb24uZGF0YUNob2ljZXMsIGZ1bmN0aW9uIChpdGVtLCBpbmRleCkge1xuICAgICAgICAgICAgICByZXR1cm4gIV92bS5xdWVzdGlvbi5oYXNDb2x1bW5zICYmIF92bS5xdWVzdGlvbi5ibG9ja2VkUm93XG4gICAgICAgICAgICAgICAgPyBfYyhcInN1cnZleS1yYWRpb2dyb3VwLWl0ZW1cIiwge1xuICAgICAgICAgICAgICAgICAgICBrZXk6IGl0ZW0udmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uZ2V0SXRlbUNsYXNzKGl0ZW0pLFxuICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBxdWVzdGlvbjogX3ZtLnF1ZXN0aW9uLCBpdGVtOiBpdGVtLCBpbmRleDogaW5kZXggfSxcbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAxXG4gICAgICAgICAgKVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF92bS5xdWVzdGlvbi5oYXNDb2x1bW5zXG4gICAgICAgID8gX2MoXG4gICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMucm9vdE11bHRpQ29sdW1uIH0sXG4gICAgICAgICAgICBfdm0uX2woX3ZtLnF1ZXN0aW9uLmNvbHVtbnMsIGZ1bmN0aW9uIChjb2x1bW4sIGNvbEluZGV4KSB7XG4gICAgICAgICAgICAgIHJldHVybiBfdm0ucXVlc3Rpb24uaGFzQ29sdW1uc1xuICAgICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmdldENvbHVtbkNsYXNzKCksXG4gICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgcm9sZTogXCJwcmVzZW50YXRpb25cIiB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBfdm0uX2woY29sdW1uLCBmdW5jdGlvbiAoaXRlbSwgaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2MoXCJzdXJ2ZXktcmFkaW9ncm91cC1pdGVtXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleTogaXRlbS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0uZ2V0SXRlbUNsYXNzKGl0ZW0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb246IF92bS5xdWVzdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbTogaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IFwiXCIgKyBjb2xJbmRleCArIGluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgMFxuICAgICAgICAgIClcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfdm0uX2woX3ZtLnF1ZXN0aW9uLmZvb3RJdGVtcywgZnVuY3Rpb24gKGl0ZW0sIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBfdm0ucXVlc3Rpb24uaGFzRm9vdEl0ZW1zXG4gICAgICAgICAgPyBfYyhcInN1cnZleS1yYWRpb2dyb3VwLWl0ZW1cIiwge1xuICAgICAgICAgICAgICBrZXk6IGl0ZW0udmFsdWUsXG4gICAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uZ2V0SXRlbUNsYXNzKGl0ZW0pLFxuICAgICAgICAgICAgICBhdHRyczogeyBxdWVzdGlvbjogX3ZtLnF1ZXN0aW9uLCBpdGVtOiBpdGVtLCBpbmRleDogXCJcIiArIGluZGV4IH0sXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgIH0pLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF92bS5xdWVzdGlvbi5yZW5kZXJlZFZhbHVlICYmIF92bS5xdWVzdGlvbi5pc090aGVyU2VsZWN0ZWRcbiAgICAgICAgPyBfYyhcInN1cnZleS1vdGhlci1jaG9pY2VcIiwgeyBhdHRyczogeyBxdWVzdGlvbjogX3ZtLnF1ZXN0aW9uIH0gfSlcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfdm0ucXVlc3Rpb24uc2hvd0NsZWFyQnV0dG9uSW5Db250ZW50XG4gICAgICAgID8gX2MoXCJkaXZcIiwgW1xuICAgICAgICAgICAgX2MoXCJpbnB1dFwiLCB7XG4gICAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jbGVhckJ1dHRvbixcbiAgICAgICAgICAgICAgYXR0cnM6IHsgdHlwZTogXCJidXR0b25cIiwgdmFsdWU6IF92bS5xdWVzdGlvbi5jbGVhckJ1dHRvbkNhcHRpb24gfSxcbiAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLmNsZWFyVmFsdWUoKVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICBdKVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgIF0sXG4gICAgMlxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9yYWRpb2dyb3VwaXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NWJiZTk3YjkmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL3Z1ZS9yYWRpb2dyb3VwaXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NWJiZTk3YjkmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInJlbmRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHJlbmRlcjsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic3RhdGljUmVuZGVyRm5zXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc3RhdGljUmVuZGVyRm5zOyB9KTtcbnZhciByZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFwiZGl2XCIsIHsgYXR0cnM6IHsgcm9sZTogXCJwcmVzZW50YXRpb25cIiB9IH0sIFtcbiAgICBfYyhcbiAgICAgIFwibGFiZWxcIixcbiAgICAgIHtcbiAgICAgICAgY2xhc3M6IF92bS5nZXRMYWJlbENsYXNzKF92bS5pdGVtKSxcbiAgICAgICAgb246IHtcbiAgICAgICAgICBtb3VzZWRvd246IGZ1bmN0aW9uICgkZXZlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBfdm0ucXVlc3Rpb24ub25Nb3VzZURvd24oKVxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgW1xuICAgICAgICBfYyhcImlucHV0XCIsIHtcbiAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6IFwibW9kZWxcIixcbiAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LW1vZGVsXCIsXG4gICAgICAgICAgICAgIHZhbHVlOiBfdm0ucXVlc3Rpb24ucmVuZGVyZWRWYWx1ZSxcbiAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJxdWVzdGlvbi5yZW5kZXJlZFZhbHVlXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLml0ZW1Db250cm9sLFxuICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICB0eXBlOiBcInJhZGlvXCIsXG4gICAgICAgICAgICBuYW1lOiBfdm0ucXVlc3Rpb24ucXVlc3Rpb25OYW1lLFxuICAgICAgICAgICAgaWQ6IF92bS5xdWVzdGlvbi5nZXRJdGVtSWQoX3ZtLml0ZW0pLFxuICAgICAgICAgICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6IF92bS5xdWVzdGlvbi5hcmlhRGVzY3JpYmVkQnksXG4gICAgICAgICAgICBkaXNhYmxlZDogIV92bS5xdWVzdGlvbi5nZXRJdGVtRW5hYmxlZChfdm0uaXRlbSksXG4gICAgICAgICAgfSxcbiAgICAgICAgICBkb21Qcm9wczoge1xuICAgICAgICAgICAgdmFsdWU6IF92bS5pdGVtLnZhbHVlLFxuICAgICAgICAgICAgY2hlY2tlZDogX3ZtLl9xKF92bS5xdWVzdGlvbi5yZW5kZXJlZFZhbHVlLCBfdm0uaXRlbS52YWx1ZSksXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgY2hhbmdlOiBmdW5jdGlvbiAoJGV2ZW50KSB7XG4gICAgICAgICAgICAgIHJldHVybiBfdm0uJHNldChfdm0ucXVlc3Rpb24sIFwicmVuZGVyZWRWYWx1ZVwiLCBfdm0uaXRlbS52YWx1ZSlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICAgIF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLm1hdGVyaWFsRGVjb3JhdG9yXG4gICAgICAgICAgPyBfYyhcInNwYW5cIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMubWF0ZXJpYWxEZWNvcmF0b3IgfSwgW1xuICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24uaXRlbVN2Z0ljb25cbiAgICAgICAgICAgICAgICA/IF9jKFwic3ZnXCIsIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLml0ZW1EZWNvcmF0b3IgfSwgW1xuICAgICAgICAgICAgICAgICAgICBfYyhcInVzZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgXCJ4bGluazpocmVmXCI6IF92bS5xdWVzdGlvbi5pdGVtU3ZnSWNvbiB9LFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgIF0pXG4gICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgIV92bS5oaWRlTGFiZWxcbiAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAgeyBjbGFzczogX3ZtLmdldENvbnRyb2xMYWJlbENsYXNzKF92bS5pdGVtKSB9LFxuICAgICAgICAgICAgICBbX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHsgYXR0cnM6IHsgbG9jU3RyaW5nOiBfdm0uaXRlbS5sb2NUZXh0IH0gfSldLFxuICAgICAgICAgICAgICAxXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgIF1cbiAgICApLFxuICBdKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvcmFua2luZy9yYW5raW5nLWl0ZW0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTJmYWRlZDc2JlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NyYy92dWUvcmFua2luZy9yYW5raW5nLWl0ZW0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTJmYWRlZDc2JiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiByZW5kZXI7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0YXRpY1JlbmRlckZuczsgfSk7XG52YXIgcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHtcbiAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uZ2V0SXRlbUNsYXNzKF92bS5pdGVtKSxcbiAgICAgIGF0dHJzOiB7XG4gICAgICAgIHRhYmluZGV4OiBfdm0ucXVlc3Rpb24uZ2V0SXRlbVRhYkluZGV4KF92bS5pdGVtKSxcbiAgICAgICAgXCJkYXRhLXN2LWRyb3AtdGFyZ2V0LXJhbmtpbmctaXRlbVwiOiBfdm0uaW5kZXgsXG4gICAgICB9LFxuICAgICAgb246IHtcbiAgICAgICAga2V5ZG93bjogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgX3ZtLnF1ZXN0aW9uLmhhbmRsZUtleWRvd24uY2FsbChfdm0ucXVlc3Rpb24sIGV2ZW50LCBfdm0uaXRlbSlcbiAgICAgICAgfSxcbiAgICAgICAgcG9pbnRlcmRvd246IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgIF92bS5xdWVzdGlvbi5oYW5kbGVQb2ludGVyRG93bi5jYWxsKFxuICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLFxuICAgICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgICBfdm0uaXRlbSxcbiAgICAgICAgICAgIGV2ZW50LmN1cnJlbnRUYXJnZXRcbiAgICAgICAgICApXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gICAgW1xuICAgICAgX2MoXG4gICAgICAgIFwiZGl2XCIsXG4gICAgICAgIHsgc3RhdGljU3R5bGU6IHsgb3V0bGluZTogXCJub25lXCIgfSwgYXR0cnM6IHsgdGFiaW5kZXg6IFwiLTFcIiB9IH0sXG4gICAgICAgIFtcbiAgICAgICAgICBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0uY3NzQ2xhc3Nlcy5pdGVtR2hvc3ROb2RlIH0pLFxuICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLmNzc0NsYXNzZXMuaXRlbUNvbnRlbnQgfSwgW1xuICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLmNzc0NsYXNzZXMuaXRlbUljb25Db250YWluZXIgfSwgW1xuICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICBcInN2Z1wiLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uZ2V0SWNvbkhvdmVyQ3NzKCksXG4gICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICB3aWR0aDogXCIxMFwiLFxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IFwiMTZcIixcbiAgICAgICAgICAgICAgICAgICAgdmlld0JveDogXCIwIDAgMTAgMTZcIixcbiAgICAgICAgICAgICAgICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBfYyhcInBhdGhcIiwge1xuICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgIGQ6IFwiTTYgMkM2IDAuOSA2LjkgMCA4IDBDOS4xIDAgMTAgMC45IDEwIDJDMTAgMy4xIDkuMSA0IDggNEM2LjkgNCA2IDMuMSA2IDJaTTIgMEMwLjkgMCAwIDAuOSAwIDJDMCAzLjEgMC45IDQgMiA0QzMuMSA0IDQgMy4xIDQgMkM0IDAuOSAzLjEgMCAyIDBaTTggNkM2LjkgNiA2IDYuOSA2IDhDNiA5LjEgNi45IDEwIDggMTBDOS4xIDEwIDEwIDkuMSAxMCA4QzEwIDYuOSA5LjEgNiA4IDZaTTIgNkMwLjkgNiAwIDYuOSAwIDhDMCA5LjEgMC45IDEwIDIgMTBDMy4xIDEwIDQgOS4xIDQgOEM0IDYuOSAzLjEgNiAyIDZaTTggMTJDNi45IDEyIDYgMTIuOSA2IDE0QzYgMTUuMSA2LjkgMTYgOCAxNkM5LjEgMTYgMTAgMTUuMSAxMCAxNEMxMCAxMi45IDkuMSAxMiA4IDEyWk0yIDEyQzAuOSAxMiAwIDEyLjkgMCAxNEMwIDE1LjEgMC45IDE2IDIgMTZDMy4xIDE2IDQgMTUuMSA0IDE0QzQgMTIuOSAzLjEgMTIgMiAxMlpcIixcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgXCJzdmdcIixcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmdldEljb25Gb2N1c0NzcygpLFxuICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IFwiMTBcIixcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBcIjI0XCIsXG4gICAgICAgICAgICAgICAgICAgIHZpZXdCb3g6IFwiMCAwIDEwIDI0XCIsXG4gICAgICAgICAgICAgICAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgX2MoXCJwYXRoXCIsIHsgYXR0cnM6IHsgZDogXCJNMTAgNUw1IDBMMCA1SDRWOUg2VjVIMTBaXCIgfSB9KSxcbiAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICBfYyhcInBhdGhcIiwgeyBhdHRyczogeyBkOiBcIk02IDE5VjE1SDRWMTlIMEw1IDI0TDEwIDE5SDZaXCIgfSB9KSxcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uZ2V0SXRlbUluZGV4Q2xhc3Nlcyhfdm0uaXRlbSkgfSwgW1xuICAgICAgICAgICAgICBfdm0uX3YoX3ZtLl9zKF92bS51bnJhbmtlZEl0ZW0gPyBcIlwiIDogX3ZtLmluZGV4VGV4dCkpLFxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgIHsgY2xhc3M6IF92bS5jc3NDbGFzc2VzLmNvbnRyb2xMYWJlbCB9LFxuICAgICAgICAgICAgICBbX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHsgYXR0cnM6IHsgbG9jU3RyaW5nOiBfdm0udGV4dCB9IH0pXSxcbiAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICBdKSxcbiAgICAgICAgXVxuICAgICAgKSxcbiAgICBdXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL3JhbmtpbmcvcmFua2luZy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MTkwNzRlZWEmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NyYy92dWUvcmFua2luZy9yYW5raW5nLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xOTA3NGVlYSYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInJlbmRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHJlbmRlcjsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic3RhdGljUmVuZGVyRm5zXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc3RhdGljUmVuZGVyRm5zOyB9KTtcbnZhciByZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLnJvb3RDbGFzcyB9LFxuICAgIFtcbiAgICAgIF92bS5fbChfdm0ucXVlc3Rpb24ucmFua2luZ0Nob2ljZXMsIGZ1bmN0aW9uIChpdGVtLCBpbmRleCkge1xuICAgICAgICByZXR1cm4gIV92bS5xdWVzdGlvbi5zZWxlY3RUb1JhbmtFbmFibGVkXG4gICAgICAgICAgPyBfYyhcInN1cnZleS1yYW5raW5nLWl0ZW1cIiwge1xuICAgICAgICAgICAgICBrZXk6IGl0ZW0udmFsdWUgKyBcIi1cIiArIGluZGV4ICsgXCItaXRlbVwiLFxuICAgICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmdldEl0ZW1DbGFzcyhpdGVtKSxcbiAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICB0ZXh0OiBpdGVtLmxvY1RleHQsXG4gICAgICAgICAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICAgICAgICAgIGluZGV4VGV4dDogX3ZtLmdldE51bWJlckJ5SW5kZXgoaW5kZXgpLFxuICAgICAgICAgICAgICAgIGNzc0NsYXNzZXM6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLFxuICAgICAgICAgICAgICAgIHF1ZXN0aW9uOiBfdm0ucXVlc3Rpb24sXG4gICAgICAgICAgICAgICAgaXRlbTogaXRlbSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgfSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLnF1ZXN0aW9uLnNlbGVjdFRvUmFua0VuYWJsZWRcbiAgICAgICAgPyBfYyhcbiAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uZ2V0Q29udGFpbmVyQ2xhc3NlcyhcImZyb21cIiksXG4gICAgICAgICAgICAgIGF0dHJzOiB7IFwiZGF0YS1yYW5raW5nXCI6IFwiZnJvbS1jb250YWluZXJcIiB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX3ZtLl9sKF92bS5xdWVzdGlvbi51blJhbmtpbmdDaG9pY2VzLCBmdW5jdGlvbiAoaXRlbSwgaW5kZXgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX2MoXCJzdXJ2ZXktcmFua2luZy1pdGVtXCIsIHtcbiAgICAgICAgICAgICAgICAgIGtleTogaXRlbS52YWx1ZSArIFwiLVwiICsgaW5kZXggKyBcIi1pdGVtXCIsXG4gICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmdldEl0ZW1DbGFzcyhpdGVtKSxcbiAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IGl0ZW0ubG9jVGV4dCxcbiAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICAgICAgICAgICAgICBpbmRleFRleHQ6IF92bS5nZXROdW1iZXJCeUluZGV4KGluZGV4KSxcbiAgICAgICAgICAgICAgICAgICAgY3NzQ2xhc3NlczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMsXG4gICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uOiBfdm0ucXVlc3Rpb24sXG4gICAgICAgICAgICAgICAgICAgIGl0ZW06IGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgIHVucmFua2VkSXRlbTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgIF92bS5xdWVzdGlvbi51blJhbmtpbmdDaG9pY2VzLmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgICAgIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmNvbnRhaW5lclBsYWNlaG9sZGVyIH0sXG4gICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl9zKF92bS5xdWVzdGlvbi5zZWxlY3RUb1JhbmtFbXB0eVJhbmtlZEFyZWFUZXh0KSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiIFwiXG4gICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgMlxuICAgICAgICAgIClcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfdm0ucXVlc3Rpb24uc2VsZWN0VG9SYW5rRW5hYmxlZFxuICAgICAgICA/IF9jKFwiZGl2XCIsIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmNvbnRhaW5lcnNEaXZpZGVyIH0pXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLnF1ZXN0aW9uLnNlbGVjdFRvUmFua0VuYWJsZWRcbiAgICAgICAgPyBfYyhcbiAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uZ2V0Q29udGFpbmVyQ2xhc3NlcyhcInRvXCIpLFxuICAgICAgICAgICAgICBhdHRyczogeyBcImRhdGEtcmFua2luZ1wiOiBcInRvLWNvbnRhaW5lclwiIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfdm0uX2woX3ZtLnF1ZXN0aW9uLnJhbmtpbmdDaG9pY2VzLCBmdW5jdGlvbiAoaXRlbSwgaW5kZXgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX2MoXCJzdXJ2ZXktcmFua2luZy1pdGVtXCIsIHtcbiAgICAgICAgICAgICAgICAgIGtleTogaXRlbS52YWx1ZSArIFwiLVwiICsgaW5kZXggKyBcIi1pdGVtXCIsXG4gICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmdldEl0ZW1DbGFzcyhpdGVtKSxcbiAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IGl0ZW0ubG9jVGV4dCxcbiAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICAgICAgICAgICAgICBpbmRleFRleHQ6IF92bS5nZXROdW1iZXJCeUluZGV4KGluZGV4KSxcbiAgICAgICAgICAgICAgICAgICAgY3NzQ2xhc3NlczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMsXG4gICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uOiBfdm0ucXVlc3Rpb24sXG4gICAgICAgICAgICAgICAgICAgIGl0ZW06IGl0ZW0sXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24ucmFua2luZ0Nob2ljZXMubGVuZ3RoID09PSAwXG4gICAgICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgICAgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuY29udGFpbmVyUGxhY2Vob2xkZXIgfSxcbiAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fcyhfdm0ucXVlc3Rpb24uc2VsZWN0VG9SYW5rRW1wdHlVbnJhbmtlZEFyZWFUZXh0KVxuICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIDJcbiAgICAgICAgICApXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgXSxcbiAgICAyXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL3JhdGluZy1kcm9wZG93bi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MzEyYzlkNmYmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NyYy92dWUvcmF0aW5nLWRyb3Bkb3duLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zMTJjOWQ2ZiYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInJlbmRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHJlbmRlcjsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic3RhdGljUmVuZGVyRm5zXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc3RhdGljUmVuZGVyRm5zOyB9KTtcbnZhciByZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMucm9vdERyb3Bkb3duIH0sXG4gICAgW19jKFwic3YtZHJvcGRvd25cIiwgeyBhdHRyczogeyBxdWVzdGlvbjogX3ZtLnF1ZXN0aW9uIH0gfSldLFxuICAgIDFcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvcmF0aW5nLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03MDkyYmZkZiZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL3Z1ZS9yYXRpbmcudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTcwOTJiZmRmJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwicmVuZGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVuZGVyOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzdGF0aWNSZW5kZXJGbnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdGF0aWNSZW5kZXJGbnM7IH0pO1xudmFyIHJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLnJhdGluZ1Jvb3RDc3MgfSwgW1xuICAgIF9jKFxuICAgICAgXCJmaWVsZHNldFwiLFxuICAgICAgeyBhdHRyczogeyByb2xlOiBcInJhZGlvZ3JvdXBcIiB9IH0sXG4gICAgICBbXG4gICAgICAgIF9jKFwibGVnZW5kXCIsIHtcbiAgICAgICAgICBzdGF0aWNDbGFzczogXCJzdi1oaWRkZW5cIixcbiAgICAgICAgICBhdHRyczogeyByb2xlOiBcInByZXNlbnRhdGlvblwiIH0sXG4gICAgICAgIH0pLFxuICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICBfdm0ucXVlc3Rpb24uaGFzTWluTGFiZWxcbiAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMubWluVGV4dCB9LFxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHtcbiAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IGxvY1N0cmluZzogX3ZtLnF1ZXN0aW9uLmxvY01pblJhdGVEZXNjcmlwdGlvbiB9LFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAxXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgX3ZtLl9sKF92bS5xdWVzdGlvbi5yZW5kZXJlZFJhdGVJdGVtcywgZnVuY3Rpb24gKGl0ZW0sIGluZGV4KSB7XG4gICAgICAgICAgcmV0dXJuIF9jKF92bS5xdWVzdGlvbi5pdGVtQ29tcG9uZW50TmFtZSwge1xuICAgICAgICAgICAgdGFnOiBcImNvbXBvbmVudFwiLFxuICAgICAgICAgICAgYXR0cnM6IHsgaXRlbTogaXRlbSwgaW5kZXg6IGluZGV4LCBxdWVzdGlvbjogX3ZtLnF1ZXN0aW9uIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgfSksXG4gICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgIF92bS5xdWVzdGlvbi5oYXNNYXhMYWJlbFxuICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgICB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5tYXhUZXh0IH0sXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBfYyhcInN1cnZleS1zdHJpbmdcIiwge1xuICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgbG9jU3RyaW5nOiBfdm0ucXVlc3Rpb24ubG9jTWF4UmF0ZURlc2NyaXB0aW9uIH0sXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgXSxcbiAgICAgIDJcbiAgICApLFxuICBdKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvcm93LWVsZW1lbnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTYxN2MyMDM3JlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NyYy92dWUvcm93LWVsZW1lbnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTYxN2MyMDM3JiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiByZW5kZXI7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0YXRpY1JlbmRlckZuczsgfSk7XG52YXIgcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHsgc3R5bGU6IF92bS5lbGVtZW50LnJvb3RTdHlsZSB9LFxuICAgIFtcbiAgICAgICFfdm0uZWxlbWVudC5pc1BhbmVsXG4gICAgICAgID8gX2MoXCJzdXJ2ZXktZWxlbWVudFwiLCB7XG4gICAgICAgICAgICBrZXk6IF92bS5lbGVtZW50LmlkLFxuICAgICAgICAgICAgc3R5bGU6IF92bS5lbGVtZW50LmdldFJvb3RTdHlsZSgpLFxuICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgZWxlbWVudDogX3ZtLmVsZW1lbnQsXG4gICAgICAgICAgICAgIHN1cnZleTogX3ZtLnN1cnZleSxcbiAgICAgICAgICAgICAgY3NzOiBfdm0uY3NzLFxuICAgICAgICAgICAgICByb3c6IF92bS5yb3csXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLmVsZW1lbnQuaXNQYW5lbFxuICAgICAgICA/IF9jKFwic3VydmV5LXBhbmVsXCIsIHtcbiAgICAgICAgICAgIGtleTogX3ZtLmVsZW1lbnQuaWQsXG4gICAgICAgICAgICBhdHRyczogeyBxdWVzdGlvbjogX3ZtLmVsZW1lbnQsIGNzczogX3ZtLmNzcyB9LFxuICAgICAgICAgIH0pXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgXSxcbiAgICAxXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL3Jvdy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9N2NjMGJkODgmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NyYy92dWUvcm93LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03Y2MwYmQ4OCYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInJlbmRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHJlbmRlcjsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic3RhdGljUmVuZGVyRm5zXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc3RhdGljUmVuZGVyRm5zOyB9KTtcbnZhciByZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAgeyBjbGFzczogX3ZtLnJvdy5nZXRSb3dDc3MoKSB9LFxuICAgIF92bS5fbChfdm0uZWxlbWVudHMsIGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICByZXR1cm4gX2MoXCJzdXJ2ZXktcm93LWVsZW1lbnRcIiwge1xuICAgICAgICBrZXk6IGVsZW1lbnQuaWQsXG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgZWxlbWVudDogZWxlbWVudCxcbiAgICAgICAgICBzdXJ2ZXk6IF92bS5zdXJ2ZXksXG4gICAgICAgICAgY3NzOiBfdm0uY3NzLFxuICAgICAgICAgIHJvdzogX3ZtLnJvdyxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgfSksXG4gICAgMVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9zaWduYXR1cmVwYWQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTA0NjIzNDlkJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL3NpZ25hdHVyZXBhZC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MDQ2MjM0OWQmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiByZW5kZXI7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0YXRpY1JlbmRlckZuczsgfSk7XG52YXIgcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHtcbiAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yb290LFxuICAgICAgc3R5bGU6IHtcbiAgICAgICAgaGVpZ2h0OiBfdm0ucXVlc3Rpb24uc2lnbmF0dXJlSGVpZ2h0ICsgXCJweFwiLFxuICAgICAgICB3aWR0aDogX3ZtLnF1ZXN0aW9uLnNpZ25hdHVyZVdpZHRoICsgXCJweFwiLFxuICAgICAgfSxcbiAgICB9LFxuICAgIFtcbiAgICAgIF9jKFxuICAgICAgICBcImRpdlwiLFxuICAgICAgICB7XG4gICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgICAgdmFsdWU6IF92bS5xdWVzdGlvbi5uZWVkU2hvd1BsYWNlaG9sZGVyKCksXG4gICAgICAgICAgICAgIGV4cHJlc3Npb246IFwicXVlc3Rpb24ubmVlZFNob3dQbGFjZWhvbGRlcigpXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLnBsYWNlaG9sZGVyLFxuICAgICAgICB9LFxuICAgICAgICBbX3ZtLl92KF92bS5fcyhfdm0ucXVlc3Rpb24ucGxhY2VIb2xkZXJUZXh0KSldXG4gICAgICApLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFwiZGl2XCIsIFtcbiAgICAgICAgX3ZtLnF1ZXN0aW9uLmJhY2tncm91bmRJbWFnZVxuICAgICAgICAgID8gX2MoXCJpbWdcIiwge1xuICAgICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuYmFja2dyb3VuZEltYWdlLFxuICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgIHNyYzogX3ZtLnF1ZXN0aW9uLmJhY2tncm91bmRJbWFnZSxcbiAgICAgICAgICAgICAgICB3aWR0aDogX3ZtLnF1ZXN0aW9uLnNpZ25hdHVyZVdpZHRoLFxuICAgICAgICAgICAgICAgIGhlaWdodDogX3ZtLnF1ZXN0aW9uLnNpZ25hdHVyZUhlaWdodCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgX2MoXCJjYW52YXNcIiwge1xuICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jYW52YXMsXG4gICAgICAgICAgYXR0cnM6IHsgdGFiaW5kZXg6IFwiMFwiIH0sXG4gICAgICAgIH0pLFxuICAgICAgXSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLnF1ZXN0aW9uLmNhblNob3dDbGVhckJ1dHRvblxuICAgICAgICA/IF9jKFwiZGl2XCIsIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmNvbnRyb2xzIH0sIFtcbiAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICBcImJ1dHRvblwiLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmNsZWFyQnV0dG9uLFxuICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgICAgICAgICAgICAgdGl0bGU6IF92bS5xdWVzdGlvbi5jbGVhckJ1dHRvbkNhcHRpb24sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLmNsZWFyVmFsdWUoKVxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgIV92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmNsZWFyQnV0dG9uSWNvbklkXG4gICAgICAgICAgICAgICAgICA/IF9jKFwic3BhblwiLCBbX3ZtLl92KFwi4pyWXCIpXSlcbiAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jbGVhckJ1dHRvbkljb25JZFxuICAgICAgICAgICAgICAgICAgPyBfYyhcInN2LXN2Zy1pY29uXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbk5hbWU6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmNsZWFyQnV0dG9uSWNvbklkLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZTogXCJhdXRvXCIsXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICksXG4gICAgICAgICAgXSlcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICBdXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL3N0cmluZy1lZGl0b3IudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTk2MzlmMTUyJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL3Z1ZS9zdHJpbmctZWRpdG9yLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD05NjM5ZjE1MiYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiByZW5kZXI7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0YXRpY1JlbmRlckZuczsgfSk7XG52YXIgcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfdm0ubG9jU3RyaW5nLmhhc0h0bWxcbiAgICA/IF9jKFwic3BhblwiLCB7XG4gICAgICAgIHN0YXRpY0NsYXNzOiBcInN2LXN0cmluZy1lZGl0b3JcIixcbiAgICAgICAgYXR0cnM6IHsgY29udGVudGVkaXRhYmxlOiBcInRydWVcIiB9LFxuICAgICAgICBkb21Qcm9wczogeyBpbm5lckhUTUw6IF92bS5fcyhfdm0ubG9jU3RyaW5nLnJlbmRlcmVkSHRtbCkgfSxcbiAgICAgICAgb246IHsgYmx1cjogX3ZtLm9uSW5wdXQsIGNsaWNrOiBfdm0ub25DbGljayB9LFxuICAgICAgfSlcbiAgICA6IF9jKFxuICAgICAgICBcInNwYW5cIixcbiAgICAgICAge1xuICAgICAgICAgIHN0YXRpY0NsYXNzOiBcInN2LXN0cmluZy1lZGl0b3JcIixcbiAgICAgICAgICBhdHRyczogeyBjb250ZW50ZWRpdGFibGU6IFwidHJ1ZVwiIH0sXG4gICAgICAgICAgb246IHsgYmx1cjogX3ZtLm9uSW5wdXQsIGNsaWNrOiBfdm0ub25DbGljayB9LFxuICAgICAgICB9LFxuICAgICAgICBbX3ZtLl92KF92bS5fcyhfdm0ubG9jU3RyaW5nLnJlbmRlcmVkSHRtbCkpXVxuICAgICAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvc3RyaW5nLXZpZXdlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9N2Q5MTg1MDgmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL3N0cmluZy12aWV3ZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTdkOTE4NTA4JiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInJlbmRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHJlbmRlcjsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic3RhdGljUmVuZGVyRm5zXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc3RhdGljUmVuZGVyRm5zOyB9KTtcbnZhciByZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF92bS5sb2NTdHJpbmcuaGFzSHRtbFxuICAgID8gX2MoXCJzcGFuXCIsIHtcbiAgICAgICAgc3RhdGljQ2xhc3M6IFwic3Ytc3RyaW5nLXZpZXdlclwiLFxuICAgICAgICBkb21Qcm9wczogeyBpbm5lckhUTUw6IF92bS5fcyhfdm0ubG9jU3RyaW5nLnJlbmRlcmVkSHRtbCkgfSxcbiAgICAgIH0pXG4gICAgOiBfYyhcInNwYW5cIiwgeyBzdGF0aWNDbGFzczogXCJzdi1zdHJpbmctdmlld2VyXCIgfSwgW1xuICAgICAgICBfdm0uX3YoX3ZtLl9zKF92bS5sb2NTdHJpbmcucmVuZGVyZWRIdG1sKSksXG4gICAgICBdKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvc3RyaW5nLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1kM2EzZDc1YSZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3JjL3Z1ZS9zdHJpbmcudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWQzYTNkNzVhJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwicmVuZGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVuZGVyOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzdGF0aWNSZW5kZXJGbnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdGF0aWNSZW5kZXJGbnM7IH0pO1xudmFyIHJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoX3ZtLmxvY1N0cmluZy5yZW5kZXJBcywge1xuICAgIHRhZzogXCJjb21wb25lbnRcIixcbiAgICBhdHRyczogeyBsb2NTdHJpbmc6IF92bS5sb2NTdHJpbmcucmVuZGVyQXNEYXRhIH0sXG4gIH0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9zdXJ2ZXkudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTY4NzRlMWM4JlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL3N1cnZleS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9Njg3NGUxYzgmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiByZW5kZXI7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0YXRpY1JlbmRlckZuczsgfSk7XG52YXIgcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHsgY2xhc3M6IF92bS5zdXJ2ZXkuZ2V0Um9vdENzcygpLCBzdHlsZTogX3ZtLnZ1ZVN1cnZleS50aGVtZVZhcmlhYmxlcyB9LFxuICAgIFtcbiAgICAgIF92bS52dWVTdXJ2ZXkucmVuZGVyQmFja2dyb3VuZEltYWdlXG4gICAgICAgID8gX2MoXCJkaXZcIiwge1xuICAgICAgICAgICAgY2xhc3M6IF92bS5jc3Mucm9vdEJhY2tncm91bmRJbWFnZSxcbiAgICAgICAgICAgIHN0eWxlOiBfdm0udnVlU3VydmV5LmJhY2tncm91bmRJbWFnZVN0eWxlLFxuICAgICAgICAgIH0pXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXCJmb3JtXCIsIHsgYXR0cnM6IHsgb25zdWJtaXQ6IFwicmV0dXJuIGZhbHNlO1wiIH0gfSwgW1xuICAgICAgICAhX3ZtLnZ1ZVN1cnZleS5oYXNMb2dvXG4gICAgICAgICAgPyBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcInN2X2N1c3RvbV9oZWFkZXJcIiB9KVxuICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgIF9jKFxuICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgeyBjbGFzczogX3ZtLmNzcy5jb250YWluZXIgfSxcbiAgICAgICAgICBbXG4gICAgICAgICAgICBfdm0udnVlU3VydmV5LnRpdGxlVmlldyA9PT0gXCJ0aXRsZVwiXG4gICAgICAgICAgICAgID8gX2MoXCJzdXJ2ZXktaGVhZGVyXCIsIHsgYXR0cnM6IHsgc3VydmV5OiBfdm0udnVlU3VydmV5IH0gfSlcbiAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICBfYyhcInN2LWNvbXBvbmVudHMtY29udGFpbmVyXCIsIHtcbiAgICAgICAgICAgICAgdGFnOiBcImNvbXBvbmVudFwiLFxuICAgICAgICAgICAgICBhdHRyczogeyBzdXJ2ZXk6IF92bS52dWVTdXJ2ZXksIGNvbnRhaW5lcjogXCJoZWFkZXJcIiB9LFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgX3ZtLnZ1ZVN1cnZleS5pc1Nob3dpbmdQYWdlXG4gICAgICAgICAgICAgID8gW1xuICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgICAgIHsgY2xhc3M6IF92bS52dWVTdXJ2ZXkuYm9keUNvbnRhaW5lckNzcyB9LFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgX2MoXCJzdi1jb21wb25lbnRzLWNvbnRhaW5lclwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YWc6IFwiY29tcG9uZW50XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBzdXJ2ZXk6IF92bS52dWVTdXJ2ZXksIGNvbnRhaW5lcjogXCJsZWZ0XCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IF92bS52dWVTdXJ2ZXkuYm9keUNzcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU6IHsgbWF4V2lkdGg6IF92bS5zdXJ2ZXkucmVuZGVyZWRXaWR0aCB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBpZDogX3ZtLnBhZ2VJZCB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJzdi1jb21wb25lbnRzLWNvbnRhaW5lclwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnOiBcImNvbXBvbmVudFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXJ2ZXk6IF92bS52dWVTdXJ2ZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI6IFwiY29udGVudFRvcFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcInN1cnZleS1wYWdlXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IF92bS5wYWdlS2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXJ2ZXk6IF92bS52dWVTdXJ2ZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlOiBfdm0udnVlU3VydmV5LmFjdGl2ZVBhZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3M6IF92bS5jc3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFwic3YtY29tcG9uZW50cy1jb250YWluZXJcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZzogXCJjb21wb25lbnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VydmV5OiBfdm0udnVlU3VydmV5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyOiBcImNvbnRlbnRCb3R0b21cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICAgIF9jKFwic3YtY29tcG9uZW50cy1jb250YWluZXJcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFnOiBcImNvbXBvbmVudFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgc3VydmV5OiBfdm0udnVlU3VydmV5LCBjb250YWluZXI6IFwicmlnaHRcIiB9LFxuICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICBfYyhcInN2LWNvbXBvbmVudHMtY29udGFpbmVyXCIsIHtcbiAgICAgICAgICAgICAgdGFnOiBcImNvbXBvbmVudFwiLFxuICAgICAgICAgICAgICBhdHRyczogeyBzdXJ2ZXk6IF92bS52dWVTdXJ2ZXksIGNvbnRhaW5lcjogXCJmb290ZXJcIiB9LFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgX3ZtLmhhc0NvbXBsZXRlZFBhZ2VcbiAgICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIF9jKFwiZGl2XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLnZ1ZVN1cnZleS5jb21wbGV0ZWRDc3MsXG4gICAgICAgICAgICAgICAgICAgICAgZG9tUHJvcHM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlubmVySFRNTDogX3ZtLl9zKF92bS5nZXRQcm9jZXNzZWRDb21wbGV0ZWRIdG1sKCkpLFxuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICBfYyhcInN2LWNvbXBvbmVudHMtY29udGFpbmVyXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICB0YWc6IFwiY29tcG9uZW50XCIsXG4gICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1cnZleTogX3ZtLnZ1ZVN1cnZleSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcjogXCJjb21wbGV0ZVBhZ2VcIixcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgIF92bS52dWVTdXJ2ZXkuc3RhdGUgPT09IFwiY29tcGxldGVkYmVmb3JlXCJcbiAgICAgICAgICAgICAgPyBfYyhcImRpdlwiLCB7XG4gICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLnZ1ZVN1cnZleS5jb21wbGV0ZWRCZWZvcmVDc3MsXG4gICAgICAgICAgICAgICAgICBkb21Qcm9wczoge1xuICAgICAgICAgICAgICAgICAgICBpbm5lckhUTUw6IF92bS5fcyhcbiAgICAgICAgICAgICAgICAgICAgICBfdm0udnVlU3VydmV5LnByb2Nlc3NlZENvbXBsZXRlZEJlZm9yZUh0bWxcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICBfdm0udnVlU3VydmV5LnN0YXRlID09PSBcImxvYWRpbmdcIlxuICAgICAgICAgICAgICA/IF9jKFwiZGl2XCIsIHtcbiAgICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0udnVlU3VydmV5LmxvYWRpbmdCb2R5Q3NzLFxuICAgICAgICAgICAgICAgICAgZG9tUHJvcHM6IHtcbiAgICAgICAgICAgICAgICAgICAgaW5uZXJIVE1MOiBfdm0uX3MoX3ZtLnZ1ZVN1cnZleS5wcm9jZXNzZWRMb2FkaW5nSHRtbCksXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgX3ZtLnZ1ZVN1cnZleS5zdGF0ZSA9PT0gXCJlbXB0eVwiXG4gICAgICAgICAgICAgID8gX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLmNzcy5ib2R5RW1wdHkgfSwgW1xuICAgICAgICAgICAgICAgICAgX3ZtLl92KFxuICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgIF92bS5fcyhfdm0udnVlU3VydmV5LmVtcHR5U3VydmV5VGV4dCkgK1xuICAgICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIDJcbiAgICAgICAgKSxcbiAgICAgIF0pLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF92bS52dWVTdXJ2ZXkuc2hvd0JyYW5kSW5mbyA/IF9jKFwic3YtYnJhbmQtaW5mb1wiKSA6IF92bS5fZSgpLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFwic3Ytbm90aWZpZXJcIiwgeyBhdHRyczogeyBtb2RlbDogX3ZtLnZ1ZVN1cnZleS5ub3RpZmllciB9IH0pLFxuICAgIF0sXG4gICAgMVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS90YWdib3gudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWI5ZTFiNzlhJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL3RhZ2JveC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9YjllMWI3OWEmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiByZW5kZXI7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0YXRpY1JlbmRlckZuczsgfSk7XG52YXIgcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5yZW5kZXJDc3NSb290IH0sXG4gICAgW1xuICAgICAgX2MoXCJzdi10YWdib3hcIiwgeyBhdHRyczogeyBxdWVzdGlvbjogX3ZtLnF1ZXN0aW9uIH0gfSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLnF1ZXN0aW9uLmlzT3RoZXJTZWxlY3RlZFxuICAgICAgICA/IF9jKFwic3VydmV5LW90aGVyLWNob2ljZVwiLCB7IGF0dHJzOiB7IHF1ZXN0aW9uOiBfdm0ucXVlc3Rpb24gfSB9KVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgIF0sXG4gICAgMVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS90ZXh0LWlucHV0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00Nzc2YjVlYyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NyYy92dWUvdGV4dC1pbnB1dC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NDc3NmI1ZWMmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwicmVuZGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVuZGVyOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzdGF0aWNSZW5kZXJGbnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdGF0aWNSZW5kZXJGbnM7IH0pO1xudmFyIHJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gIV92bS5xdWVzdGlvbi5nZXRNYXhMZW5ndGgoKVxuICAgID8gX2MoXCJpbnB1dFwiLCB7XG4gICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uZ2V0Q29udHJvbENsYXNzKCksXG4gICAgICAgIHN0eWxlOiBfdm0uaW5wdXRTdHlsZSxcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICBkaXNhYmxlZDogX3ZtLnF1ZXN0aW9uLmlzSW5wdXRSZWFkT25seSxcbiAgICAgICAgICB0eXBlOiBfdm0ucXVlc3Rpb24uaW5wdXRUeXBlLFxuICAgICAgICAgIG1heGxlbmd0aDogX3ZtLnF1ZXN0aW9uLmdldE1heExlbmd0aCgpLFxuICAgICAgICAgIG1pbjogX3ZtLnF1ZXN0aW9uLnJlbmRlcmVkTWluLFxuICAgICAgICAgIG1heDogX3ZtLnF1ZXN0aW9uLnJlbmRlcmVkTWF4LFxuICAgICAgICAgIHN0ZXA6IF92bS5xdWVzdGlvbi5yZW5kZXJlZFN0ZXAsXG4gICAgICAgICAgc2l6ZTogX3ZtLnF1ZXN0aW9uLnJlbmRlcmVkSW5wdXRTaXplLFxuICAgICAgICAgIGlkOiBfdm0ucXVlc3Rpb24uaW5wdXRJZCxcbiAgICAgICAgICBsaXN0OiBfdm0ucXVlc3Rpb24uZGF0YUxpc3RJZCxcbiAgICAgICAgICBwbGFjZWhvbGRlcjogX3ZtLnF1ZXN0aW9uLnJlbmRlcmVkUGxhY2Vob2xkZXIsXG4gICAgICAgICAgYXV0b2NvbXBsZXRlOiBfdm0ucXVlc3Rpb24uYXV0b2NvbXBsZXRlLFxuICAgICAgICAgIFwiYXJpYS1yZXF1aXJlZFwiOiBfdm0ucXVlc3Rpb24uYTExeV9pbnB1dF9hcmlhUmVxdWlyZWQsXG4gICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IF92bS5xdWVzdGlvbi5hMTF5X2lucHV0X2FyaWFMYWJlbCxcbiAgICAgICAgICBcImFyaWEtbGFiZWxsZWRieVwiOiBfdm0ucXVlc3Rpb24uYTExeV9pbnB1dF9hcmlhTGFiZWxsZWRCeSxcbiAgICAgICAgICBcImFyaWEtaW52YWxpZFwiOiBfdm0ucXVlc3Rpb24uYTExeV9pbnB1dF9hcmlhSW52YWxpZCxcbiAgICAgICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjogX3ZtLnF1ZXN0aW9uLmExMXlfaW5wdXRfYXJpYURlc2NyaWJlZEJ5LFxuICAgICAgICB9LFxuICAgICAgICBkb21Qcm9wczogeyB2YWx1ZTogX3ZtLnF1ZXN0aW9uLnZhbHVlIH0sXG4gICAgICAgIG9uOiB7XG4gICAgICAgICAgY2hhbmdlOiBfdm0ucXVlc3Rpb24ub25DaGFuZ2UsXG4gICAgICAgICAga2V5dXA6IF92bS5xdWVzdGlvbi5vbktleVVwLFxuICAgICAgICAgIGtleWRvd246IF92bS5xdWVzdGlvbi5vbktleURvd24sXG4gICAgICAgICAgXCJjb21wb3NpdGlvbi11cGRhdGVcIjogX3ZtLnF1ZXN0aW9uLm9uQ29tcG9zaXRpb25VcGRhdGUsXG4gICAgICAgICAgYmx1cjogX3ZtLnF1ZXN0aW9uLm9uQmx1cixcbiAgICAgICAgICBmb2N1czogX3ZtLnF1ZXN0aW9uLm9uRm9jdXMsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgIDogX2MoXG4gICAgICAgIFwiZGl2XCIsXG4gICAgICAgIFtcbiAgICAgICAgICBfYyhcImlucHV0XCIsIHtcbiAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uZ2V0Q29udHJvbENsYXNzKCksXG4gICAgICAgICAgICBzdHlsZTogX3ZtLmlucHV0U3R5bGUsXG4gICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICBkaXNhYmxlZDogX3ZtLnF1ZXN0aW9uLmlzSW5wdXRSZWFkT25seSxcbiAgICAgICAgICAgICAgdHlwZTogX3ZtLnF1ZXN0aW9uLmlucHV0VHlwZSxcbiAgICAgICAgICAgICAgbWF4bGVuZ3RoOiBfdm0ucXVlc3Rpb24uZ2V0TWF4TGVuZ3RoKCksXG4gICAgICAgICAgICAgIG1pbjogX3ZtLnF1ZXN0aW9uLnJlbmRlcmVkTWluLFxuICAgICAgICAgICAgICBtYXg6IF92bS5xdWVzdGlvbi5yZW5kZXJlZE1heCxcbiAgICAgICAgICAgICAgc3RlcDogX3ZtLnF1ZXN0aW9uLnJlbmRlcmVkU3RlcCxcbiAgICAgICAgICAgICAgc2l6ZTogX3ZtLnF1ZXN0aW9uLnJlbmRlcmVkSW5wdXRTaXplLFxuICAgICAgICAgICAgICBpZDogX3ZtLnF1ZXN0aW9uLmlucHV0SWQsXG4gICAgICAgICAgICAgIGxpc3Q6IF92bS5xdWVzdGlvbi5kYXRhTGlzdElkLFxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogX3ZtLnF1ZXN0aW9uLnJlbmRlcmVkUGxhY2Vob2xkZXIsXG4gICAgICAgICAgICAgIGF1dG9jb21wbGV0ZTogX3ZtLnF1ZXN0aW9uLmF1dG9jb21wbGV0ZSxcbiAgICAgICAgICAgICAgXCJhcmlhLXJlcXVpcmVkXCI6IF92bS5xdWVzdGlvbi5hMTF5X2lucHV0X2FyaWFSZXF1aXJlZCxcbiAgICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IF92bS5xdWVzdGlvbi5hMTF5X2lucHV0X2FyaWFMYWJlbCxcbiAgICAgICAgICAgICAgXCJhcmlhLWludmFsaWRcIjogX3ZtLnF1ZXN0aW9uLmExMXlfaW5wdXRfYXJpYUludmFsaWQsXG4gICAgICAgICAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOiBfdm0ucXVlc3Rpb24uYTExeV9pbnB1dF9hcmlhRGVzY3JpYmVkQnksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZG9tUHJvcHM6IHsgdmFsdWU6IF92bS5xdWVzdGlvbi52YWx1ZSB9LFxuICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgY2hhbmdlOiBfdm0ucXVlc3Rpb24ub25DaGFuZ2UsXG4gICAgICAgICAgICAgIGtleXVwOiBfdm0ucXVlc3Rpb24ub25LZXlVcCxcbiAgICAgICAgICAgICAga2V5ZG93bjogX3ZtLnF1ZXN0aW9uLm9uS2V5RG93bixcbiAgICAgICAgICAgICAgXCJjb21wb3NpdGlvbi11cGRhdGVcIjogX3ZtLnF1ZXN0aW9uLm9uQ29tcG9zaXRpb25VcGRhdGUsXG4gICAgICAgICAgICAgIGJsdXI6IF92bS5xdWVzdGlvbi5vbkJsdXIsXG4gICAgICAgICAgICAgIGZvY3VzOiBfdm0ucXVlc3Rpb24ub25Gb2N1cyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICBfYyhcInN2LWNoYXJhY3Rlci1jb3VudGVyXCIsIHtcbiAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgIGNvdW50ZXI6IF92bS5xdWVzdGlvbi5jaGFyYWN0ZXJDb3VudGVyLFxuICAgICAgICAgICAgICByZW1haW5pbmdDaGFyYWN0ZXJDb3VudGVyOlxuICAgICAgICAgICAgICAgIF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLnJlbWFpbmluZ0NoYXJhY3RlckNvdW50ZXIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pLFxuICAgICAgICBdLFxuICAgICAgICAxXG4gICAgICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS90ZXh0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00MGVjZTQyMiZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NyYy92dWUvdGV4dC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NDBlY2U0MjImICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwicmVuZGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVuZGVyOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzdGF0aWNSZW5kZXJGbnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdGF0aWNSZW5kZXJGbnM7IH0pO1xudmFyIHJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX3ZtLnF1ZXN0aW9uLmlzUmVhZE9ubHlSZW5kZXJEaXYoKVxuICAgID8gX2MoXCJkaXZcIiwgW192bS5fdihfdm0uX3MoX3ZtLnF1ZXN0aW9uLnZhbHVlKSldKVxuICAgIDogX3ZtLnF1ZXN0aW9uLmRhdGFMaXN0SWRcbiAgICA/IF9jKFxuICAgICAgICBcImRpdlwiLFxuICAgICAgICBbXG4gICAgICAgICAgX2MoXCJzdXJ2ZXktdGV4dC1pbnB1dFwiLCB7IGF0dHJzOiB7IHF1ZXN0aW9uOiBfdm0ucXVlc3Rpb24gfSB9KSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJkYXRhbGlzdFwiLFxuICAgICAgICAgICAgeyBhdHRyczogeyBpZDogX3ZtLnF1ZXN0aW9uLmRhdGFMaXN0SWQgfSB9LFxuICAgICAgICAgICAgX3ZtLl9sKF92bS5xdWVzdGlvbi5kYXRhTGlzdCwgZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICAgICAgcmV0dXJuIF9jKFwib3B0aW9uXCIsIHsgZG9tUHJvcHM6IHsgdmFsdWU6IGl0ZW0gfSB9KVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAwXG4gICAgICAgICAgKSxcbiAgICAgICAgXSxcbiAgICAgICAgMVxuICAgICAgKVxuICAgIDogX2MoXCJzdXJ2ZXktdGV4dC1pbnB1dFwiLCB7IGF0dHJzOiB7IHF1ZXN0aW9uOiBfdm0ucXVlc3Rpb24gfSB9KVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvdGltZXJwYW5lbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MGQyYWJlMjEmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcmMvdnVlL3RpbWVycGFuZWwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTBkMmFiZTIxJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInJlbmRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHJlbmRlcjsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic3RhdGljUmVuZGVyRm5zXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc3RhdGljUmVuZGVyRm5zOyB9KTtcbnZhciByZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF92bS5tb2RlbC5pc1J1bm5pbmcgJiYgX3ZtLm1vZGVsLnNob3dUaW1lckFzQ2xvY2tcbiAgICA/IF9jKFwiZGl2XCIsIHsgY2xhc3M6IF92bS5tb2RlbC5yb290Q3NzIH0sIFtcbiAgICAgICAgX3ZtLm1vZGVsLnNob3dQcm9ncmVzc1xuICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgIFwic3ZnXCIsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjbGFzczogX3ZtLm1vZGVsLmdldFByb2dyZXNzQ3NzKCksXG4gICAgICAgICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgICAgICAgIHN0cm9rZURhc2hhcnJheTogX3ZtLmNpcmNsZVJhZGl1cyxcbiAgICAgICAgICAgICAgICAgIHN0cm9rZURhc2hvZmZzZXQ6IF92bS5wcm9ncmVzcyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBbX2MoXCJ1c2VcIiwgeyBhdHRyczogeyBcInhsaW5rOmhyZWZcIjogXCIjaWNvbi10aW1lcmNpcmNsZVwiIH0gfSldXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLm1vZGVsLnRleHRDb250YWluZXJDc3MgfSwgW1xuICAgICAgICAgIF9jKFwic3BhblwiLCB7IGNsYXNzOiBfdm0ubW9kZWwubWFqb3JUZXh0Q3NzIH0sIFtcbiAgICAgICAgICAgIF92bS5fdihfdm0uX3MoX3ZtLm1vZGVsLmNsb2NrTWFqb3JUZXh0KSksXG4gICAgICAgICAgXSksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAhIV92bS5tb2RlbC5jbG9ja01pbm9yVGV4dFxuICAgICAgICAgICAgPyBfYyhcInNwYW5cIiwgeyBjbGFzczogX3ZtLm1vZGVsLm1pbm9yVGV4dENzcyB9LCBbXG4gICAgICAgICAgICAgICAgX3ZtLl92KF92bS5fcyhfdm0ubW9kZWwuY2xvY2tNaW5vclRleHQpKSxcbiAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgIF0pLFxuICAgICAgXSlcbiAgICA6IF9jKFxuICAgICAgICBcImRpdlwiLFxuICAgICAgICB7XG4gICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgICAgdmFsdWU6IF92bS5tb2RlbC5pc1J1bm5pbmcgJiYgIV92bS5tb2RlbC5zaG93VGltZXJBc0Nsb2NrLFxuICAgICAgICAgICAgICBleHByZXNzaW9uOiBcIm1vZGVsLmlzUnVubmluZyAmJiAhbW9kZWwuc2hvd1RpbWVyQXNDbG9ja1wiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIGNsYXNzOiBfdm0ubW9kZWwuc3VydmV5LmdldENzcygpLnRpbWVyUm9vdCxcbiAgICAgICAgfSxcbiAgICAgICAgW192bS5fdihcIlxcbiAgXCIgKyBfdm0uX3MoX3ZtLnRleHQpICsgXCJcXG5cIildXG4gICAgICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGRlZmF1bHQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiZGVmYXVsdFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIG5vcm1hbGl6ZUNvbXBvbmVudDsgfSk7XG4vKiBnbG9iYWxzIF9fVlVFX1NTUl9DT05URVhUX18gKi9cblxuLy8gSU1QT1JUQU5UOiBEbyBOT1QgdXNlIEVTMjAxNSBmZWF0dXJlcyBpbiB0aGlzIGZpbGUgKGV4Y2VwdCBmb3IgbW9kdWxlcykuXG4vLyBUaGlzIG1vZHVsZSBpcyBhIHJ1bnRpbWUgdXRpbGl0eSBmb3IgY2xlYW5lciBjb21wb25lbnQgbW9kdWxlIG91dHB1dCBhbmQgd2lsbFxuLy8gYmUgaW5jbHVkZWQgaW4gdGhlIGZpbmFsIHdlYnBhY2sgdXNlciBidW5kbGUuXG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUNvbXBvbmVudCAoXG4gIHNjcmlwdEV4cG9ydHMsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmdW5jdGlvbmFsVGVtcGxhdGUsXG4gIGluamVjdFN0eWxlcyxcbiAgc2NvcGVJZCxcbiAgbW9kdWxlSWRlbnRpZmllciwgLyogc2VydmVyIG9ubHkgKi9cbiAgc2hhZG93TW9kZSAvKiB2dWUtY2xpIG9ubHkgKi9cbikge1xuICAvLyBWdWUuZXh0ZW5kIGNvbnN0cnVjdG9yIGV4cG9ydCBpbnRlcm9wXG4gIHZhciBvcHRpb25zID0gdHlwZW9mIHNjcmlwdEV4cG9ydHMgPT09ICdmdW5jdGlvbidcbiAgICA/IHNjcmlwdEV4cG9ydHMub3B0aW9uc1xuICAgIDogc2NyaXB0RXhwb3J0c1xuXG4gIC8vIHJlbmRlciBmdW5jdGlvbnNcbiAgaWYgKHJlbmRlcikge1xuICAgIG9wdGlvbnMucmVuZGVyID0gcmVuZGVyXG4gICAgb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnMgPSBzdGF0aWNSZW5kZXJGbnNcbiAgICBvcHRpb25zLl9jb21waWxlZCA9IHRydWVcbiAgfVxuXG4gIC8vIGZ1bmN0aW9uYWwgdGVtcGxhdGVcbiAgaWYgKGZ1bmN0aW9uYWxUZW1wbGF0ZSkge1xuICAgIG9wdGlvbnMuZnVuY3Rpb25hbCA9IHRydWVcbiAgfVxuXG4gIC8vIHNjb3BlZElkXG4gIGlmIChzY29wZUlkKSB7XG4gICAgb3B0aW9ucy5fc2NvcGVJZCA9ICdkYXRhLXYtJyArIHNjb3BlSWRcbiAgfVxuXG4gIHZhciBob29rXG4gIGlmIChtb2R1bGVJZGVudGlmaWVyKSB7IC8vIHNlcnZlciBidWlsZFxuICAgIGhvb2sgPSBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgLy8gMi4zIGluamVjdGlvblxuICAgICAgY29udGV4dCA9XG4gICAgICAgIGNvbnRleHQgfHwgLy8gY2FjaGVkIGNhbGxcbiAgICAgICAgKHRoaXMuJHZub2RlICYmIHRoaXMuJHZub2RlLnNzckNvbnRleHQpIHx8IC8vIHN0YXRlZnVsXG4gICAgICAgICh0aGlzLnBhcmVudCAmJiB0aGlzLnBhcmVudC4kdm5vZGUgJiYgdGhpcy5wYXJlbnQuJHZub2RlLnNzckNvbnRleHQpIC8vIGZ1bmN0aW9uYWxcbiAgICAgIC8vIDIuMiB3aXRoIHJ1bkluTmV3Q29udGV4dDogdHJ1ZVxuICAgICAgaWYgKCFjb250ZXh0ICYmIHR5cGVvZiBfX1ZVRV9TU1JfQ09OVEVYVF9fICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBjb250ZXh0ID0gX19WVUVfU1NSX0NPTlRFWFRfX1xuICAgICAgfVxuICAgICAgLy8gaW5qZWN0IGNvbXBvbmVudCBzdHlsZXNcbiAgICAgIGlmIChpbmplY3RTdHlsZXMpIHtcbiAgICAgICAgaW5qZWN0U3R5bGVzLmNhbGwodGhpcywgY29udGV4dClcbiAgICAgIH1cbiAgICAgIC8vIHJlZ2lzdGVyIGNvbXBvbmVudCBtb2R1bGUgaWRlbnRpZmllciBmb3IgYXN5bmMgY2h1bmsgaW5mZXJyZW5jZVxuICAgICAgaWYgKGNvbnRleHQgJiYgY29udGV4dC5fcmVnaXN0ZXJlZENvbXBvbmVudHMpIHtcbiAgICAgICAgY29udGV4dC5fcmVnaXN0ZXJlZENvbXBvbmVudHMuYWRkKG1vZHVsZUlkZW50aWZpZXIpXG4gICAgICB9XG4gICAgfVxuICAgIC8vIHVzZWQgYnkgc3NyIGluIGNhc2UgY29tcG9uZW50IGlzIGNhY2hlZCBhbmQgYmVmb3JlQ3JlYXRlXG4gICAgLy8gbmV2ZXIgZ2V0cyBjYWxsZWRcbiAgICBvcHRpb25zLl9zc3JSZWdpc3RlciA9IGhvb2tcbiAgfSBlbHNlIGlmIChpbmplY3RTdHlsZXMpIHtcbiAgICBob29rID0gc2hhZG93TW9kZVxuICAgICAgPyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGluamVjdFN0eWxlcy5jYWxsKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgKG9wdGlvbnMuZnVuY3Rpb25hbCA/IHRoaXMucGFyZW50IDogdGhpcykuJHJvb3QuJG9wdGlvbnMuc2hhZG93Um9vdFxuICAgICAgICApXG4gICAgICB9XG4gICAgICA6IGluamVjdFN0eWxlc1xuICB9XG5cbiAgaWYgKGhvb2spIHtcbiAgICBpZiAob3B0aW9ucy5mdW5jdGlvbmFsKSB7XG4gICAgICAvLyBmb3IgdGVtcGxhdGUtb25seSBob3QtcmVsb2FkIGJlY2F1c2UgaW4gdGhhdCBjYXNlIHRoZSByZW5kZXIgZm4gZG9lc24ndFxuICAgICAgLy8gZ28gdGhyb3VnaCB0aGUgbm9ybWFsaXplclxuICAgICAgb3B0aW9ucy5faW5qZWN0U3R5bGVzID0gaG9va1xuICAgICAgLy8gcmVnaXN0ZXIgZm9yIGZ1bmN0aW9uYWwgY29tcG9uZW50IGluIHZ1ZSBmaWxlXG4gICAgICB2YXIgb3JpZ2luYWxSZW5kZXIgPSBvcHRpb25zLnJlbmRlclxuICAgICAgb3B0aW9ucy5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXJXaXRoU3R5bGVJbmplY3Rpb24gKGgsIGNvbnRleHQpIHtcbiAgICAgICAgaG9vay5jYWxsKGNvbnRleHQpXG4gICAgICAgIHJldHVybiBvcmlnaW5hbFJlbmRlcihoLCBjb250ZXh0KVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpbmplY3QgY29tcG9uZW50IHJlZ2lzdHJhdGlvbiBhcyBiZWZvcmVDcmVhdGUgaG9va1xuICAgICAgdmFyIGV4aXN0aW5nID0gb3B0aW9ucy5iZWZvcmVDcmVhdGVcbiAgICAgIG9wdGlvbnMuYmVmb3JlQ3JlYXRlID0gZXhpc3RpbmdcbiAgICAgICAgPyBbXS5jb25jYXQoZXhpc3RpbmcsIGhvb2spXG4gICAgICAgIDogW2hvb2tdXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBleHBvcnRzOiBzY3JpcHRFeHBvcnRzLFxuICAgIG9wdGlvbnM6IG9wdGlvbnNcbiAgfVxufVxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IvbGliL2RlY29yYXRvcnMvRW1pdC5qc1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvdnVlLXByb3BlcnR5LWRlY29yYXRvci9saWIvZGVjb3JhdG9ycy9FbWl0LmpzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBFbWl0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkVtaXRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBFbWl0OyB9KTtcbnZhciBfX3NwcmVhZEFycmF5cyA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fc3ByZWFkQXJyYXlzKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgZm9yICh2YXIgcyA9IDAsIGkgPSAwLCBpbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKSBzICs9IGFyZ3VtZW50c1tpXS5sZW5ndGg7XG4gICAgZm9yICh2YXIgciA9IEFycmF5KHMpLCBrID0gMCwgaSA9IDA7IGkgPCBpbDsgaSsrKVxuICAgICAgICBmb3IgKHZhciBhID0gYXJndW1lbnRzW2ldLCBqID0gMCwgamwgPSBhLmxlbmd0aDsgaiA8IGpsOyBqKyssIGsrKylcbiAgICAgICAgICAgIHJba10gPSBhW2pdO1xuICAgIHJldHVybiByO1xufTtcbi8vIENvZGUgY29waWVkIGZyb20gVnVlL3NyYy9zaGFyZWQvdXRpbC5qc1xudmFyIGh5cGhlbmF0ZVJFID0gL1xcQihbQS1aXSkvZztcbnZhciBoeXBoZW5hdGUgPSBmdW5jdGlvbiAoc3RyKSB7IHJldHVybiBzdHIucmVwbGFjZShoeXBoZW5hdGVSRSwgJy0kMScpLnRvTG93ZXJDYXNlKCk7IH07XG4vKipcbiAqIGRlY29yYXRvciBvZiBhbiBldmVudC1lbWl0dGVyIGZ1bmN0aW9uXG4gKiBAcGFyYW0gIGV2ZW50IFRoZSBuYW1lIG9mIHRoZSBldmVudFxuICogQHJldHVybiBNZXRob2REZWNvcmF0b3JcbiAqL1xuZnVuY3Rpb24gRW1pdChldmVudCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoX3RhcmdldCwgcHJvcGVydHlLZXksIGRlc2NyaXB0b3IpIHtcbiAgICAgICAgdmFyIGtleSA9IGh5cGhlbmF0ZShwcm9wZXJ0eUtleSk7XG4gICAgICAgIHZhciBvcmlnaW5hbCA9IGRlc2NyaXB0b3IudmFsdWU7XG4gICAgICAgIGRlc2NyaXB0b3IudmFsdWUgPSBmdW5jdGlvbiBlbWl0dGVyKCkge1xuICAgICAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBlbWl0ID0gZnVuY3Rpb24gKHJldHVyblZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdmFyIGVtaXROYW1lID0gZXZlbnQgfHwga2V5O1xuICAgICAgICAgICAgICAgIGlmIChyZXR1cm5WYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuJGVtaXQoZW1pdE5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGFyZ3MubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy4kZW1pdChlbWl0TmFtZSwgYXJnc1swXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy4kZW1pdC5hcHBseShfdGhpcywgX19zcHJlYWRBcnJheXMoW2VtaXROYW1lXSwgYXJncykpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBhcmdzLnVuc2hpZnQocmV0dXJuVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBfdGhpcy4kZW1pdC5hcHBseShfdGhpcywgX19zcHJlYWRBcnJheXMoW2VtaXROYW1lXSwgYXJncykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB2YXIgcmV0dXJuVmFsdWUgPSBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgIGlmIChpc1Byb21pc2UocmV0dXJuVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUudGhlbihlbWl0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGVtaXQocmV0dXJuVmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlO1xuICAgICAgICB9O1xuICAgIH07XG59XG5mdW5jdGlvbiBpc1Byb21pc2Uob2JqKSB7XG4gICAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIFByb21pc2UgfHwgKG9iaiAmJiB0eXBlb2Ygb2JqLnRoZW4gPT09ICdmdW5jdGlvbicpO1xufVxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IvbGliL2RlY29yYXRvcnMvSW5qZWN0LmpzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IvbGliL2RlY29yYXRvcnMvSW5qZWN0LmpzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEluamVjdCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJJbmplY3RcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBJbmplY3Q7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9jbGFzc19jb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZS1jbGFzcy1jb21wb25lbnQgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtY2xhc3MtY29tcG9uZW50L2Rpc3QvdnVlLWNsYXNzLWNvbXBvbmVudC5lc20uanNcIik7XG5cbi8qKlxuICogZGVjb3JhdG9yIG9mIGFuIGluamVjdFxuICogQHBhcmFtIGZyb20ga2V5XG4gKiBAcmV0dXJuIFByb3BlcnR5RGVjb3JhdG9yXG4gKi9cbmZ1bmN0aW9uIEluamVjdChvcHRpb25zKSB7XG4gICAgcmV0dXJuIE9iamVjdCh2dWVfY2xhc3NfY29tcG9uZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJjcmVhdGVEZWNvcmF0b3JcIl0pKGZ1bmN0aW9uIChjb21wb25lbnRPcHRpb25zLCBrZXkpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb21wb25lbnRPcHRpb25zLmluamVjdCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudE9wdGlvbnMuaW5qZWN0ID0ge307XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGNvbXBvbmVudE9wdGlvbnMuaW5qZWN0KSkge1xuICAgICAgICAgICAgY29tcG9uZW50T3B0aW9ucy5pbmplY3Rba2V5XSA9IG9wdGlvbnMgfHwga2V5O1xuICAgICAgICB9XG4gICAgfSk7XG59XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdnVlLXByb3BlcnR5LWRlY29yYXRvci9saWIvZGVjb3JhdG9ycy9JbmplY3RSZWFjdGl2ZS5qc1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IvbGliL2RlY29yYXRvcnMvSW5qZWN0UmVhY3RpdmUuanMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBJbmplY3RSZWFjdGl2ZSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJJbmplY3RSZWFjdGl2ZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEluamVjdFJlYWN0aXZlOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfY2xhc3NfY29tcG9uZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB2dWUtY2xhc3MtY29tcG9uZW50ICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWNsYXNzLWNvbXBvbmVudC9kaXN0L3Z1ZS1jbGFzcy1jb21wb25lbnQuZXNtLmpzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9oZWxwZXJzX3Byb3ZpZGVJbmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2hlbHBlcnMvcHJvdmlkZUluamVjdCAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IvbGliL2hlbHBlcnMvcHJvdmlkZUluamVjdC5qc1wiKTtcblxuXG4vKipcbiAqIGRlY29yYXRvciBvZiBhIHJlYWN0aXZlIGluamVjdFxuICogQHBhcmFtIGZyb20ga2V5XG4gKiBAcmV0dXJuIFByb3BlcnR5RGVjb3JhdG9yXG4gKi9cbmZ1bmN0aW9uIEluamVjdFJlYWN0aXZlKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gT2JqZWN0KHZ1ZV9jbGFzc19jb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcImNyZWF0ZURlY29yYXRvclwiXSkoZnVuY3Rpb24gKGNvbXBvbmVudE9wdGlvbnMsIGtleSkge1xuICAgICAgICBpZiAodHlwZW9mIGNvbXBvbmVudE9wdGlvbnMuaW5qZWN0ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY29tcG9uZW50T3B0aW9ucy5pbmplY3QgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29tcG9uZW50T3B0aW9ucy5pbmplY3QpKSB7XG4gICAgICAgICAgICB2YXIgZnJvbUtleV8xID0gISFvcHRpb25zID8gb3B0aW9ucy5mcm9tIHx8IG9wdGlvbnMgOiBrZXk7XG4gICAgICAgICAgICB2YXIgZGVmYXVsdFZhbF8xID0gKCEhb3B0aW9ucyAmJiBvcHRpb25zLmRlZmF1bHQpIHx8IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmICghY29tcG9uZW50T3B0aW9ucy5jb21wdXRlZClcbiAgICAgICAgICAgICAgICBjb21wb25lbnRPcHRpb25zLmNvbXB1dGVkID0ge307XG4gICAgICAgICAgICBjb21wb25lbnRPcHRpb25zLmNvbXB1dGVkW2tleV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIG9iaiA9IHRoaXNbX2hlbHBlcnNfcHJvdmlkZUluamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wicmVhY3RpdmVJbmplY3RLZXlcIl1dO1xuICAgICAgICAgICAgICAgIHJldHVybiBvYmogPyBvYmpbZnJvbUtleV8xXSA6IGRlZmF1bHRWYWxfMTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb21wb25lbnRPcHRpb25zLmluamVjdFtfaGVscGVyc19wcm92aWRlSW5qZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJyZWFjdGl2ZUluamVjdEtleVwiXV0gPSBfaGVscGVyc19wcm92aWRlSW5qZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJyZWFjdGl2ZUluamVjdEtleVwiXTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IvbGliL2RlY29yYXRvcnMvTW9kZWwuanNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9kZWNvcmF0b3JzL01vZGVsLmpzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogTW9kZWwgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiTW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBNb2RlbDsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX2NsYXNzX2NvbXBvbmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlLWNsYXNzLWNvbXBvbmVudCAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1jbGFzcy1jb21wb25lbnQvZGlzdC92dWUtY2xhc3MtY29tcG9uZW50LmVzbS5qc1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfaGVscGVyc19tZXRhZGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaGVscGVycy9tZXRhZGF0YSAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IvbGliL2hlbHBlcnMvbWV0YWRhdGEuanNcIik7XG5cblxuLyoqXG4gKiBkZWNvcmF0b3Igb2YgbW9kZWxcbiAqIEBwYXJhbSAgZXZlbnQgZXZlbnQgbmFtZVxuICogQHBhcmFtIG9wdGlvbnMgb3B0aW9uc1xuICogQHJldHVybiBQcm9wZXJ0eURlY29yYXRvclxuICovXG5mdW5jdGlvbiBNb2RlbChldmVudCwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkge1xuICAgICAgICBPYmplY3QoX2hlbHBlcnNfbWV0YWRhdGFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcImFwcGx5TWV0YWRhdGFcIl0pKG9wdGlvbnMsIHRhcmdldCwga2V5KTtcbiAgICAgICAgT2JqZWN0KHZ1ZV9jbGFzc19jb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcImNyZWF0ZURlY29yYXRvclwiXSkoZnVuY3Rpb24gKGNvbXBvbmVudE9wdGlvbnMsIGspIHtcbiAgICAgICAgICAgIDtcbiAgICAgICAgICAgIChjb21wb25lbnRPcHRpb25zLnByb3BzIHx8IChjb21wb25lbnRPcHRpb25zLnByb3BzID0ge30pKVtrXSA9IG9wdGlvbnM7XG4gICAgICAgICAgICBjb21wb25lbnRPcHRpb25zLm1vZGVsID0geyBwcm9wOiBrLCBldmVudDogZXZlbnQgfHwgayB9O1xuICAgICAgICB9KSh0YXJnZXQsIGtleSk7XG4gICAgfTtcbn1cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9kZWNvcmF0b3JzL01vZGVsU3luYy5qc1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9kZWNvcmF0b3JzL01vZGVsU3luYy5qcyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBNb2RlbFN5bmMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiTW9kZWxTeW5jXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gTW9kZWxTeW5jOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfY2xhc3NfY29tcG9uZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB2dWUtY2xhc3MtY29tcG9uZW50ICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWNsYXNzLWNvbXBvbmVudC9kaXN0L3Z1ZS1jbGFzcy1jb21wb25lbnQuZXNtLmpzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9oZWxwZXJzX21ldGFkYXRhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9oZWxwZXJzL21ldGFkYXRhICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLXByb3BlcnR5LWRlY29yYXRvci9saWIvaGVscGVycy9tZXRhZGF0YS5qc1wiKTtcblxuXG4vKipcbiAqIGRlY29yYXRvciBvZiBzeW5jZWQgbW9kZWwgYW5kIHByb3BcbiAqIEBwYXJhbSBwcm9wTmFtZSB0aGUgbmFtZSB0byBpbnRlcmZhY2Ugd2l0aCBmcm9tIG91dHNpZGUsIG11c3QgYmUgZGlmZmVyZW50IGZyb20gZGVjb3JhdGVkIHByb3BlcnR5XG4gKiBAcGFyYW0gIGV2ZW50IGV2ZW50IG5hbWVcbiAqIEBwYXJhbSBvcHRpb25zIG9wdGlvbnNcbiAqIEByZXR1cm4gUHJvcGVydHlEZWNvcmF0b3JcbiAqL1xuZnVuY3Rpb24gTW9kZWxTeW5jKHByb3BOYW1lLCBldmVudCwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkge1xuICAgICAgICBPYmplY3QoX2hlbHBlcnNfbWV0YWRhdGFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcImFwcGx5TWV0YWRhdGFcIl0pKG9wdGlvbnMsIHRhcmdldCwga2V5KTtcbiAgICAgICAgT2JqZWN0KHZ1ZV9jbGFzc19jb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcImNyZWF0ZURlY29yYXRvclwiXSkoZnVuY3Rpb24gKGNvbXBvbmVudE9wdGlvbnMsIGspIHtcbiAgICAgICAgICAgIDtcbiAgICAgICAgICAgIChjb21wb25lbnRPcHRpb25zLnByb3BzIHx8IChjb21wb25lbnRPcHRpb25zLnByb3BzID0ge30pKVtwcm9wTmFtZV0gPSBvcHRpb25zO1xuICAgICAgICAgICAgY29tcG9uZW50T3B0aW9ucy5tb2RlbCA9IHsgcHJvcDogcHJvcE5hbWUsIGV2ZW50OiBldmVudCB8fCBrIH07XG4gICAgICAgICAgICAoY29tcG9uZW50T3B0aW9ucy5jb21wdXRlZCB8fCAoY29tcG9uZW50T3B0aW9ucy5jb21wdXRlZCA9IHt9KSlba10gPSB7XG4gICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzW3Byb3BOYW1lXTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kZW1pdChldmVudCwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KSh0YXJnZXQsIGtleSk7XG4gICAgfTtcbn1cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9kZWNvcmF0b3JzL1Byb3AuanNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IvbGliL2RlY29yYXRvcnMvUHJvcC5qcyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogUHJvcCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJQcm9wXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUHJvcDsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX2NsYXNzX2NvbXBvbmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlLWNsYXNzLWNvbXBvbmVudCAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1jbGFzcy1jb21wb25lbnQvZGlzdC92dWUtY2xhc3MtY29tcG9uZW50LmVzbS5qc1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfaGVscGVyc19tZXRhZGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaGVscGVycy9tZXRhZGF0YSAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IvbGliL2hlbHBlcnMvbWV0YWRhdGEuanNcIik7XG5cblxuLyoqXG4gKiBkZWNvcmF0b3Igb2YgYSBwcm9wXG4gKiBAcGFyYW0gIG9wdGlvbnMgdGhlIG9wdGlvbnMgZm9yIHRoZSBwcm9wXG4gKiBAcmV0dXJuIFByb3BlcnR5RGVjb3JhdG9yIHwgdm9pZFxuICovXG5mdW5jdGlvbiBQcm9wKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHtcbiAgICAgICAgT2JqZWN0KF9oZWxwZXJzX21ldGFkYXRhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJhcHBseU1ldGFkYXRhXCJdKShvcHRpb25zLCB0YXJnZXQsIGtleSk7XG4gICAgICAgIE9iamVjdCh2dWVfY2xhc3NfY29tcG9uZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJjcmVhdGVEZWNvcmF0b3JcIl0pKGZ1bmN0aW9uIChjb21wb25lbnRPcHRpb25zLCBrKSB7XG4gICAgICAgICAgICA7XG4gICAgICAgICAgICAoY29tcG9uZW50T3B0aW9ucy5wcm9wcyB8fCAoY29tcG9uZW50T3B0aW9ucy5wcm9wcyA9IHt9KSlba10gPSBvcHRpb25zO1xuICAgICAgICB9KSh0YXJnZXQsIGtleSk7XG4gICAgfTtcbn1cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9kZWNvcmF0b3JzL1Byb3BTeW5jLmpzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvdnVlLXByb3BlcnR5LWRlY29yYXRvci9saWIvZGVjb3JhdG9ycy9Qcm9wU3luYy5qcyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFByb3BTeW5jICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlByb3BTeW5jXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUHJvcFN5bmM7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9jbGFzc19jb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZS1jbGFzcy1jb21wb25lbnQgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtY2xhc3MtY29tcG9uZW50L2Rpc3QvdnVlLWNsYXNzLWNvbXBvbmVudC5lc20uanNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2hlbHBlcnNfbWV0YWRhdGFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2hlbHBlcnMvbWV0YWRhdGEgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9oZWxwZXJzL21ldGFkYXRhLmpzXCIpO1xuXG5cbi8qKlxuICogZGVjb3JhdG9yIG9mIGEgc3luY2VkIHByb3BcbiAqIEBwYXJhbSBwcm9wTmFtZSB0aGUgbmFtZSB0byBpbnRlcmZhY2Ugd2l0aCBmcm9tIG91dHNpZGUsIG11c3QgYmUgZGlmZmVyZW50IGZyb20gZGVjb3JhdGVkIHByb3BlcnR5XG4gKiBAcGFyYW0gb3B0aW9ucyB0aGUgb3B0aW9ucyBmb3IgdGhlIHN5bmNlZCBwcm9wXG4gKiBAcmV0dXJuIFByb3BlcnR5RGVjb3JhdG9yIHwgdm9pZFxuICovXG5mdW5jdGlvbiBQcm9wU3luYyhwcm9wTmFtZSwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkge1xuICAgICAgICBPYmplY3QoX2hlbHBlcnNfbWV0YWRhdGFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcImFwcGx5TWV0YWRhdGFcIl0pKG9wdGlvbnMsIHRhcmdldCwga2V5KTtcbiAgICAgICAgT2JqZWN0KHZ1ZV9jbGFzc19jb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcImNyZWF0ZURlY29yYXRvclwiXSkoZnVuY3Rpb24gKGNvbXBvbmVudE9wdGlvbnMsIGspIHtcbiAgICAgICAgICAgIDtcbiAgICAgICAgICAgIChjb21wb25lbnRPcHRpb25zLnByb3BzIHx8IChjb21wb25lbnRPcHRpb25zLnByb3BzID0ge30pKVtwcm9wTmFtZV0gPSBvcHRpb25zO1xuICAgICAgICAgICAgKGNvbXBvbmVudE9wdGlvbnMuY29tcHV0ZWQgfHwgKGNvbXBvbmVudE9wdGlvbnMuY29tcHV0ZWQgPSB7fSkpW2tdID0ge1xuICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpc1twcm9wTmFtZV07XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiRlbWl0KFwidXBkYXRlOlwiICsgcHJvcE5hbWUsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSkodGFyZ2V0LCBrZXkpO1xuICAgIH07XG59XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdnVlLXByb3BlcnR5LWRlY29yYXRvci9saWIvZGVjb3JhdG9ycy9Qcm92aWRlLmpzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9kZWNvcmF0b3JzL1Byb3ZpZGUuanMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFByb3ZpZGUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUHJvdmlkZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFByb3ZpZGU7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9jbGFzc19jb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZS1jbGFzcy1jb21wb25lbnQgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtY2xhc3MtY29tcG9uZW50L2Rpc3QvdnVlLWNsYXNzLWNvbXBvbmVudC5lc20uanNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2hlbHBlcnNfcHJvdmlkZUluamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaGVscGVycy9wcm92aWRlSW5qZWN0ICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLXByb3BlcnR5LWRlY29yYXRvci9saWIvaGVscGVycy9wcm92aWRlSW5qZWN0LmpzXCIpO1xuXG5cbi8qKlxuICogZGVjb3JhdG9yIG9mIGEgcHJvdmlkZVxuICogQHBhcmFtIGtleSBrZXlcbiAqIEByZXR1cm4gUHJvcGVydHlEZWNvcmF0b3IgfCB2b2lkXG4gKi9cbmZ1bmN0aW9uIFByb3ZpZGUoa2V5KSB7XG4gICAgcmV0dXJuIE9iamVjdCh2dWVfY2xhc3NfY29tcG9uZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJjcmVhdGVEZWNvcmF0b3JcIl0pKGZ1bmN0aW9uIChjb21wb25lbnRPcHRpb25zLCBrKSB7XG4gICAgICAgIHZhciBwcm92aWRlID0gY29tcG9uZW50T3B0aW9ucy5wcm92aWRlO1xuICAgICAgICBPYmplY3QoX2hlbHBlcnNfcHJvdmlkZUluamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiaW5oZXJpdEluamVjdGVkXCJdKShjb21wb25lbnRPcHRpb25zKTtcbiAgICAgICAgaWYgKE9iamVjdChfaGVscGVyc19wcm92aWRlSW5qZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJuZWVkVG9Qcm9kdWNlUHJvdmlkZVwiXSkocHJvdmlkZSkpIHtcbiAgICAgICAgICAgIHByb3ZpZGUgPSBjb21wb25lbnRPcHRpb25zLnByb3ZpZGUgPSBPYmplY3QoX2hlbHBlcnNfcHJvdmlkZUluamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wicHJvZHVjZVByb3ZpZGVcIl0pKHByb3ZpZGUpO1xuICAgICAgICB9XG4gICAgICAgIHByb3ZpZGUubWFuYWdlZFtrXSA9IGtleSB8fCBrO1xuICAgIH0pO1xufVxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IvbGliL2RlY29yYXRvcnMvUHJvdmlkZVJlYWN0aXZlLmpzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IvbGliL2RlY29yYXRvcnMvUHJvdmlkZVJlYWN0aXZlLmpzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFByb3ZpZGVSZWFjdGl2ZSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJQcm92aWRlUmVhY3RpdmVcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBQcm92aWRlUmVhY3RpdmU7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9jbGFzc19jb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZS1jbGFzcy1jb21wb25lbnQgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtY2xhc3MtY29tcG9uZW50L2Rpc3QvdnVlLWNsYXNzLWNvbXBvbmVudC5lc20uanNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2hlbHBlcnNfcHJvdmlkZUluamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaGVscGVycy9wcm92aWRlSW5qZWN0ICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLXByb3BlcnR5LWRlY29yYXRvci9saWIvaGVscGVycy9wcm92aWRlSW5qZWN0LmpzXCIpO1xuXG5cbi8qKlxuICogZGVjb3JhdG9yIG9mIGEgcmVhY3RpdmUgcHJvdmlkZVxuICogQHBhcmFtIGtleSBrZXlcbiAqIEByZXR1cm4gUHJvcGVydHlEZWNvcmF0b3IgfCB2b2lkXG4gKi9cbmZ1bmN0aW9uIFByb3ZpZGVSZWFjdGl2ZShrZXkpIHtcbiAgICByZXR1cm4gT2JqZWN0KHZ1ZV9jbGFzc19jb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcImNyZWF0ZURlY29yYXRvclwiXSkoZnVuY3Rpb24gKGNvbXBvbmVudE9wdGlvbnMsIGspIHtcbiAgICAgICAgdmFyIHByb3ZpZGUgPSBjb21wb25lbnRPcHRpb25zLnByb3ZpZGU7XG4gICAgICAgIE9iamVjdChfaGVscGVyc19wcm92aWRlSW5qZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJpbmhlcml0SW5qZWN0ZWRcIl0pKGNvbXBvbmVudE9wdGlvbnMpO1xuICAgICAgICBpZiAoT2JqZWN0KF9oZWxwZXJzX3Byb3ZpZGVJbmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIm5lZWRUb1Byb2R1Y2VQcm92aWRlXCJdKShwcm92aWRlKSkge1xuICAgICAgICAgICAgcHJvdmlkZSA9IGNvbXBvbmVudE9wdGlvbnMucHJvdmlkZSA9IE9iamVjdChfaGVscGVyc19wcm92aWRlSW5qZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJwcm9kdWNlUHJvdmlkZVwiXSkocHJvdmlkZSk7XG4gICAgICAgIH1cbiAgICAgICAgcHJvdmlkZS5tYW5hZ2VkUmVhY3RpdmVba10gPSBrZXkgfHwgaztcbiAgICB9KTtcbn1cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9kZWNvcmF0b3JzL1JlZi5qc1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9kZWNvcmF0b3JzL1JlZi5qcyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBSZWYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUmVmXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUmVmOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfY2xhc3NfY29tcG9uZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB2dWUtY2xhc3MtY29tcG9uZW50ICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWNsYXNzLWNvbXBvbmVudC9kaXN0L3Z1ZS1jbGFzcy1jb21wb25lbnQuZXNtLmpzXCIpO1xuXG4vKipcbiAqIGRlY29yYXRvciBvZiBhIHJlZiBwcm9wXG4gKiBAcGFyYW0gcmVmS2V5IHRoZSByZWYga2V5IGRlZmluZWQgaW4gdGVtcGxhdGVcbiAqL1xuZnVuY3Rpb24gUmVmKHJlZktleSkge1xuICAgIHJldHVybiBPYmplY3QodnVlX2NsYXNzX2NvbXBvbmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiY3JlYXRlRGVjb3JhdG9yXCJdKShmdW5jdGlvbiAob3B0aW9ucywga2V5KSB7XG4gICAgICAgIG9wdGlvbnMuY29tcHV0ZWQgPSBvcHRpb25zLmNvbXB1dGVkIHx8IHt9O1xuICAgICAgICBvcHRpb25zLmNvbXB1dGVkW2tleV0gPSB7XG4gICAgICAgICAgICBjYWNoZTogZmFsc2UsXG4gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kcmVmc1tyZWZLZXkgfHwga2V5XTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfSk7XG59XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdnVlLXByb3BlcnR5LWRlY29yYXRvci9saWIvZGVjb3JhdG9ycy9WTW9kZWwuanNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvdnVlLXByb3BlcnR5LWRlY29yYXRvci9saWIvZGVjb3JhdG9ycy9WTW9kZWwuanMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogVk1vZGVsICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlZNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFZNb2RlbDsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX2NsYXNzX2NvbXBvbmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlLWNsYXNzLWNvbXBvbmVudCAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1jbGFzcy1jb21wb25lbnQvZGlzdC92dWUtY2xhc3MtY29tcG9uZW50LmVzbS5qc1wiKTtcblxuLyoqXG4gKiBkZWNvcmF0b3IgZm9yIGNhcHR1cmluZ3Mgdi1tb2RlbCBiaW5kaW5nIHRvIGNvbXBvbmVudFxuICogQHBhcmFtIG9wdGlvbnMgdGhlIG9wdGlvbnMgZm9yIHRoZSBwcm9wXG4gKi9cbmZ1bmN0aW9uIFZNb2RlbChvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cbiAgICB2YXIgdmFsdWVLZXkgPSAndmFsdWUnO1xuICAgIHJldHVybiBPYmplY3QodnVlX2NsYXNzX2NvbXBvbmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiY3JlYXRlRGVjb3JhdG9yXCJdKShmdW5jdGlvbiAoY29tcG9uZW50T3B0aW9ucywga2V5KSB7XG4gICAgICAgIDtcbiAgICAgICAgKGNvbXBvbmVudE9wdGlvbnMucHJvcHMgfHwgKGNvbXBvbmVudE9wdGlvbnMucHJvcHMgPSB7fSkpW3ZhbHVlS2V5XSA9IG9wdGlvbnM7XG4gICAgICAgIChjb21wb25lbnRPcHRpb25zLmNvbXB1dGVkIHx8IChjb21wb25lbnRPcHRpb25zLmNvbXB1dGVkID0ge30pKVtrZXldID0ge1xuICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXNbdmFsdWVLZXldO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCB2YWx1ZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH0pO1xufVxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IvbGliL2RlY29yYXRvcnMvV2F0Y2guanNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9kZWNvcmF0b3JzL1dhdGNoLmpzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogV2F0Y2ggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiV2F0Y2hcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBXYXRjaDsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX2NsYXNzX2NvbXBvbmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlLWNsYXNzLWNvbXBvbmVudCAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1jbGFzcy1jb21wb25lbnQvZGlzdC92dWUtY2xhc3MtY29tcG9uZW50LmVzbS5qc1wiKTtcblxuLyoqXG4gKiBkZWNvcmF0b3Igb2YgYSB3YXRjaCBmdW5jdGlvblxuICogQHBhcmFtICBwYXRoIHRoZSBwYXRoIG9yIHRoZSBleHByZXNzaW9uIHRvIG9ic2VydmVcbiAqIEBwYXJhbSAgV2F0Y2hPcHRpb25cbiAqIEByZXR1cm4gTWV0aG9kRGVjb3JhdG9yXG4gKi9cbmZ1bmN0aW9uIFdhdGNoKHBhdGgsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgIHZhciBfYSA9IG9wdGlvbnMuZGVlcCwgZGVlcCA9IF9hID09PSB2b2lkIDAgPyBmYWxzZSA6IF9hLCBfYiA9IG9wdGlvbnMuaW1tZWRpYXRlLCBpbW1lZGlhdGUgPSBfYiA9PT0gdm9pZCAwID8gZmFsc2UgOiBfYjtcbiAgICByZXR1cm4gT2JqZWN0KHZ1ZV9jbGFzc19jb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcImNyZWF0ZURlY29yYXRvclwiXSkoZnVuY3Rpb24gKGNvbXBvbmVudE9wdGlvbnMsIGhhbmRsZXIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb21wb25lbnRPcHRpb25zLndhdGNoICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgY29tcG9uZW50T3B0aW9ucy53YXRjaCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHdhdGNoID0gY29tcG9uZW50T3B0aW9ucy53YXRjaDtcbiAgICAgICAgaWYgKHR5cGVvZiB3YXRjaFtwYXRoXSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkod2F0Y2hbcGF0aF0pKSB7XG4gICAgICAgICAgICB3YXRjaFtwYXRoXSA9IFt3YXRjaFtwYXRoXV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHdhdGNoW3BhdGhdID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgd2F0Y2hbcGF0aF0gPSBbXTtcbiAgICAgICAgfVxuICAgICAgICB3YXRjaFtwYXRoXS5wdXNoKHsgaGFuZGxlcjogaGFuZGxlciwgZGVlcDogZGVlcCwgaW1tZWRpYXRlOiBpbW1lZGlhdGUgfSk7XG4gICAgfSk7XG59XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdnVlLXByb3BlcnR5LWRlY29yYXRvci9saWIvaGVscGVycy9tZXRhZGF0YS5qc1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IvbGliL2hlbHBlcnMvbWV0YWRhdGEuanMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBhcHBseU1ldGFkYXRhICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImFwcGx5TWV0YWRhdGFcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBhcHBseU1ldGFkYXRhOyB9KTtcbi8qKiBAc2VlIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLWNsYXNzLWNvbXBvbmVudC9ibG9iL21hc3Rlci9zcmMvcmVmbGVjdC50c30gKi9cbnZhciByZWZsZWN0TWV0YWRhdGFJc1N1cHBvcnRlZCA9IHR5cGVvZiBSZWZsZWN0ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgUmVmbGVjdC5nZXRNZXRhZGF0YSAhPT0gJ3VuZGVmaW5lZCc7XG5mdW5jdGlvbiBhcHBseU1ldGFkYXRhKG9wdGlvbnMsIHRhcmdldCwga2V5KSB7XG4gICAgaWYgKHJlZmxlY3RNZXRhZGF0YUlzU3VwcG9ydGVkKSB7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShvcHRpb25zKSAmJlxuICAgICAgICAgICAgdHlwZW9mIG9wdGlvbnMgIT09ICdmdW5jdGlvbicgJiZcbiAgICAgICAgICAgICFvcHRpb25zLmhhc093blByb3BlcnR5KCd0eXBlJykgJiZcbiAgICAgICAgICAgIHR5cGVvZiBvcHRpb25zLnR5cGUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB2YXIgdHlwZSA9IFJlZmxlY3QuZ2V0TWV0YWRhdGEoJ2Rlc2lnbjp0eXBlJywgdGFyZ2V0LCBrZXkpO1xuICAgICAgICAgICAgaWYgKHR5cGUgIT09IE9iamVjdCkge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMudHlwZSA9IHR5cGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvdnVlLXByb3BlcnR5LWRlY29yYXRvci9saWIvaGVscGVycy9wcm92aWRlSW5qZWN0LmpzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9oZWxwZXJzL3Byb3ZpZGVJbmplY3QuanMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IG5lZWRUb1Byb2R1Y2VQcm92aWRlLCBwcm9kdWNlUHJvdmlkZSwgcmVhY3RpdmVJbmplY3RLZXksIGluaGVyaXRJbmplY3RlZCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJuZWVkVG9Qcm9kdWNlUHJvdmlkZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIG5lZWRUb1Byb2R1Y2VQcm92aWRlOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJwcm9kdWNlUHJvdmlkZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHByb2R1Y2VQcm92aWRlOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZWFjdGl2ZUluamVjdEtleVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHJlYWN0aXZlSW5qZWN0S2V5OyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJpbmhlcml0SW5qZWN0ZWRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBpbmhlcml0SW5qZWN0ZWQ7IH0pO1xuZnVuY3Rpb24gbmVlZFRvUHJvZHVjZVByb3ZpZGUob3JpZ2luYWwpIHtcbiAgICByZXR1cm4gKHR5cGVvZiBvcmlnaW5hbCAhPT0gJ2Z1bmN0aW9uJyB8fFxuICAgICAgICAoIW9yaWdpbmFsLm1hbmFnZWQgJiYgIW9yaWdpbmFsLm1hbmFnZWRSZWFjdGl2ZSkpO1xufVxuZnVuY3Rpb24gcHJvZHVjZVByb3ZpZGUob3JpZ2luYWwpIHtcbiAgICB2YXIgcHJvdmlkZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIHJ2ID0gdHlwZW9mIG9yaWdpbmFsID09PSAnZnVuY3Rpb24nID8gb3JpZ2luYWwuY2FsbCh0aGlzKSA6IG9yaWdpbmFsO1xuICAgICAgICBydiA9IE9iamVjdC5jcmVhdGUocnYgfHwgbnVsbCk7XG4gICAgICAgIC8vIHNldCByZWFjdGl2ZSBzZXJ2aWNlcyAocHJvcGFnYXRlcyBwcmV2aW91cyBzZXJ2aWNlcyBpZiBuZWNlc3NhcnkpXG4gICAgICAgIHJ2W3JlYWN0aXZlSW5qZWN0S2V5XSA9IE9iamVjdC5jcmVhdGUodGhpc1tyZWFjdGl2ZUluamVjdEtleV0gfHwge30pO1xuICAgICAgICBmb3IgKHZhciBpIGluIHByb3ZpZGUubWFuYWdlZCkge1xuICAgICAgICAgICAgcnZbcHJvdmlkZS5tYW5hZ2VkW2ldXSA9IHRoaXNbaV07XG4gICAgICAgIH1cbiAgICAgICAgdmFyIF9sb29wXzEgPSBmdW5jdGlvbiAoaSkge1xuICAgICAgICAgICAgcnZbcHJvdmlkZS5tYW5hZ2VkUmVhY3RpdmVbaV1dID0gdGhpc18xW2ldOyAvLyBEdXBsaWNhdGVzIHRoZSBiZWhhdmlvciBvZiBgQFByb3ZpZGVgXG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocnZbcmVhY3RpdmVJbmplY3RLZXldLCBwcm92aWRlLm1hbmFnZWRSZWFjdGl2ZVtpXSwge1xuICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gX3RoaXNbaV07IH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIHRoaXNfMSA9IHRoaXM7XG4gICAgICAgIGZvciAodmFyIGkgaW4gcHJvdmlkZS5tYW5hZ2VkUmVhY3RpdmUpIHtcbiAgICAgICAgICAgIF9sb29wXzEoaSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJ2O1xuICAgIH07XG4gICAgcHJvdmlkZS5tYW5hZ2VkID0ge307XG4gICAgcHJvdmlkZS5tYW5hZ2VkUmVhY3RpdmUgPSB7fTtcbiAgICByZXR1cm4gcHJvdmlkZTtcbn1cbi8qKiBVc2VkIGZvciBrZXlpbmcgcmVhY3RpdmUgcHJvdmlkZS9pbmplY3QgcHJvcGVydGllcyAqL1xudmFyIHJlYWN0aXZlSW5qZWN0S2V5ID0gJ19fcmVhY3RpdmVJbmplY3RfXyc7XG5mdW5jdGlvbiBpbmhlcml0SW5qZWN0ZWQoY29tcG9uZW50T3B0aW9ucykge1xuICAgIC8vIGluamVjdCBwYXJlbnQgcmVhY3RpdmUgc2VydmljZXMgKGlmIGFueSlcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29tcG9uZW50T3B0aW9ucy5pbmplY3QpKSB7XG4gICAgICAgIGNvbXBvbmVudE9wdGlvbnMuaW5qZWN0ID0gY29tcG9uZW50T3B0aW9ucy5pbmplY3QgfHwge307XG4gICAgICAgIGNvbXBvbmVudE9wdGlvbnMuaW5qZWN0W3JlYWN0aXZlSW5qZWN0S2V5XSA9IHtcbiAgICAgICAgICAgIGZyb206IHJlYWN0aXZlSW5qZWN0S2V5LFxuICAgICAgICAgICAgZGVmYXVsdDoge30sXG4gICAgICAgIH07XG4gICAgfVxufVxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IvbGliL2luZGV4LmpzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IvbGliL2luZGV4LmpzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IENvbXBvbmVudCwgVnVlLCBNaXhpbnMsIEVtaXQsIEluamVjdCwgSW5qZWN0UmVhY3RpdmUsIE1vZGVsLCBNb2RlbFN5bmMsIFByb3AsIFByb3BTeW5jLCBQcm92aWRlLCBQcm92aWRlUmVhY3RpdmUsIFJlZiwgVk1vZGVsLCBXYXRjaCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZSAqLyBcInZ1ZVwiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubih2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyk7XG4vKiBoYXJtb255IHJlZXhwb3J0IChkZWZhdWx0IGZyb20gbm9uLWhhcm1vbnkpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlZ1ZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYTsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX2NsYXNzX2NvbXBvbmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlLWNsYXNzLWNvbXBvbmVudCAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1jbGFzcy1jb21wb25lbnQvZGlzdC92dWUtY2xhc3MtY29tcG9uZW50LmVzbS5qc1wiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkNvbXBvbmVudFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHZ1ZV9jbGFzc19jb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcImRlZmF1bHRcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJNaXhpbnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiB2dWVfY2xhc3NfY29tcG9uZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJtaXhpbnNcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2RlY29yYXRvcnNfRW1pdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9kZWNvcmF0b3JzL0VtaXQgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9kZWNvcmF0b3JzL0VtaXQuanNcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJFbWl0XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2RlY29yYXRvcnNfRW1pdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiRW1pdFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZGVjb3JhdG9yc19JbmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZGVjb3JhdG9ycy9JbmplY3QgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9kZWNvcmF0b3JzL0luamVjdC5qc1wiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkluamVjdFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9kZWNvcmF0b3JzX0luamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiSW5qZWN0XCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9kZWNvcmF0b3JzX0luamVjdFJlYWN0aXZlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2RlY29yYXRvcnMvSW5qZWN0UmVhY3RpdmUgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9kZWNvcmF0b3JzL0luamVjdFJlYWN0aXZlLmpzXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiSW5qZWN0UmVhY3RpdmVcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfZGVjb3JhdG9yc19JbmplY3RSZWFjdGl2ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fW1wiSW5qZWN0UmVhY3RpdmVcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2RlY29yYXRvcnNfTW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZGVjb3JhdG9ycy9Nb2RlbCAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IvbGliL2RlY29yYXRvcnMvTW9kZWwuanNcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9kZWNvcmF0b3JzX01vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bXCJNb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZGVjb3JhdG9yc19Nb2RlbFN5bmNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZGVjb3JhdG9ycy9Nb2RlbFN5bmMgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9kZWNvcmF0b3JzL01vZGVsU3luYy5qc1wiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIk1vZGVsU3luY1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9kZWNvcmF0b3JzX01vZGVsU3luY19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fW1wiTW9kZWxTeW5jXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9kZWNvcmF0b3JzX1Byb3BfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZGVjb3JhdG9ycy9Qcm9wICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLXByb3BlcnR5LWRlY29yYXRvci9saWIvZGVjb3JhdG9ycy9Qcm9wLmpzXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUHJvcFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9kZWNvcmF0b3JzX1Byb3BfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1tcIlByb3BcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2RlY29yYXRvcnNfUHJvcFN5bmNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZGVjb3JhdG9ycy9Qcm9wU3luYyAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IvbGliL2RlY29yYXRvcnMvUHJvcFN5bmMuanNcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJQcm9wU3luY1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9kZWNvcmF0b3JzX1Byb3BTeW5jX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bXCJQcm9wU3luY1wiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZGVjb3JhdG9yc19Qcm92aWRlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2RlY29yYXRvcnMvUHJvdmlkZSAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IvbGliL2RlY29yYXRvcnMvUHJvdmlkZS5qc1wiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlByb3ZpZGVcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfZGVjb3JhdG9yc19Qcm92aWRlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bXCJQcm92aWRlXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9kZWNvcmF0b3JzX1Byb3ZpZGVSZWFjdGl2ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZGVjb3JhdG9ycy9Qcm92aWRlUmVhY3RpdmUgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9kZWNvcmF0b3JzL1Byb3ZpZGVSZWFjdGl2ZS5qc1wiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlByb3ZpZGVSZWFjdGl2ZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9kZWNvcmF0b3JzX1Byb3ZpZGVSZWFjdGl2ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX1tcIlByb3ZpZGVSZWFjdGl2ZVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZGVjb3JhdG9yc19SZWZfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2RlY29yYXRvcnMvUmVmICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLXByb3BlcnR5LWRlY29yYXRvci9saWIvZGVjb3JhdG9ycy9SZWYuanNcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJSZWZcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfZGVjb3JhdG9yc19SZWZfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19bXCJSZWZcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2RlY29yYXRvcnNfVk1vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9kZWNvcmF0b3JzL1ZNb2RlbCAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IvbGliL2RlY29yYXRvcnMvVk1vZGVsLmpzXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiVk1vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2RlY29yYXRvcnNfVk1vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fW1wiVk1vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9kZWNvcmF0b3JzX1dhdGNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9kZWNvcmF0b3JzL1dhdGNoICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLXByb3BlcnR5LWRlY29yYXRvci9saWIvZGVjb3JhdG9ycy9XYXRjaC5qc1wiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIldhdGNoXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2RlY29yYXRvcnNfV2F0Y2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX19bXCJXYXRjaFwiXTsgfSk7XG5cbi8qKiB2dWUtcHJvcGVydHktZGVjb3JhdG9yIHZlcnNvbiA5LjEuMiBNSVQgTElDRU5TRSBjb3B5cmlnaHQgMjAyMCBrYW9ydW4zNDMgKi9cbi8vLyA8cmVmZXJlbmNlIHR5cGVzPSdyZWZsZWN0LW1ldGFkYXRhJy8+XG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvYWN0aW9ucy9hY3Rpb24udHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvYWN0aW9ucy9hY3Rpb24udHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogY3JlYXRlRHJvcGRvd25BY3Rpb25Nb2RlbCwgY3JlYXRlRHJvcGRvd25BY3Rpb25Nb2RlbEFkdmFuY2VkLCBnZXRBY3Rpb25Ecm9wZG93bkJ1dHRvblRhcmdldCwgQmFzZUFjdGlvbiwgQWN0aW9uLCBBY3Rpb25Ecm9wZG93blZpZXdNb2RlbCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJjcmVhdGVEcm9wZG93bkFjdGlvbk1vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlRHJvcGRvd25BY3Rpb25Nb2RlbDsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiY3JlYXRlRHJvcGRvd25BY3Rpb25Nb2RlbEFkdmFuY2VkXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlRHJvcGRvd25BY3Rpb25Nb2RlbEFkdmFuY2VkOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJnZXRBY3Rpb25Ecm9wZG93bkJ1dHRvblRhcmdldFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGdldEFjdGlvbkRyb3Bkb3duQnV0dG9uVGFyZ2V0OyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJCYXNlQWN0aW9uXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQmFzZUFjdGlvbjsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQWN0aW9uXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQWN0aW9uOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJBY3Rpb25Ecm9wZG93blZpZXdNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEFjdGlvbkRyb3Bkb3duVmlld01vZGVsOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYmFzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vYmFzZSAqLyBcIi4vc3JjL2Jhc2UudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3N1cnZleVN0cmluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3N1cnZleVN0cmluZ3MgKi8gXCIuL3NyYy9zdXJ2ZXlTdHJpbmdzLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9qc29ub2JqZWN0ICovIFwiLi9zcmMvanNvbm9iamVjdC50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbGlzdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vbGlzdCAqLyBcIi4vc3JjL2xpc3QudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3BvcHVwX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9wb3B1cCAqLyBcIi4vc3JjL3BvcHVwLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF91dGlsc19jc3NDbGFzc0J1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3V0aWxzL2Nzc0NsYXNzQnVpbGRlciAqLyBcIi4vc3JjL3V0aWxzL2Nzc0NsYXNzQnVpbGRlci50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfY29udGFpbmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2NvbnRhaW5lciAqLyBcIi4vc3JjL2FjdGlvbnMvY29udGFpbmVyLnRzXCIpO1xudmFyIF9fZXh0ZW5kcyA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG52YXIgX19kZWNvcmF0ZSA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xuXG5cblxuXG5cblxuXG5mdW5jdGlvbiBjcmVhdGVEcm9wZG93bkFjdGlvbk1vZGVsKGFjdGlvbk9wdGlvbnMsIGRyb3Bkb3duT3B0aW9ucywgbG9jT3duZXIpIHtcbiAgICByZXR1cm4gY3JlYXRlRHJvcGRvd25BY3Rpb25Nb2RlbEFkdmFuY2VkKGFjdGlvbk9wdGlvbnMsIGRyb3Bkb3duT3B0aW9ucywgZHJvcGRvd25PcHRpb25zLCBsb2NPd25lcik7XG59XG5mdW5jdGlvbiBjcmVhdGVEcm9wZG93bkFjdGlvbk1vZGVsQWR2YW5jZWQoYWN0aW9uT3B0aW9ucywgbGlzdE9wdGlvbnMsIHBvcHVwT3B0aW9ucywgbG9jT3duZXIpIHtcbiAgICB2YXIgbGlzdE1vZGVsID0gbmV3IF9saXN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJMaXN0TW9kZWxcIl0obGlzdE9wdGlvbnMuaXRlbXMsIGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIGlmIChuZXdBY3Rpb24uaGFzVGl0bGUpIHtcbiAgICAgICAgICAgIG5ld0FjdGlvbi50aXRsZSA9IGl0ZW0udGl0bGU7XG4gICAgICAgIH1cbiAgICAgICAgbGlzdE9wdGlvbnMub25TZWxlY3Rpb25DaGFuZ2VkKGl0ZW0pO1xuICAgICAgICBpbm5lclBvcHVwTW9kZWwudG9nZ2xlVmlzaWJpbGl0eSgpO1xuICAgIH0sIGxpc3RPcHRpb25zLmFsbG93U2VsZWN0aW9uLCBsaXN0T3B0aW9ucy5zZWxlY3RlZEl0ZW0sIGxpc3RPcHRpb25zLm9uRmlsdGVyU3RyaW5nQ2hhbmdlZENhbGxiYWNrKTtcbiAgICBsaXN0TW9kZWwubG9jT3duZXIgPSBsb2NPd25lcjtcbiAgICB2YXIgaW5uZXJQb3B1cE1vZGVsID0gbmV3IF9wb3B1cF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fW1wiUG9wdXBNb2RlbFwiXShcInN2LWxpc3RcIiwgeyBtb2RlbDogbGlzdE1vZGVsIH0sIHBvcHVwT3B0aW9ucyA9PT0gbnVsbCB8fCBwb3B1cE9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBvcHVwT3B0aW9ucy52ZXJ0aWNhbFBvc2l0aW9uLCBwb3B1cE9wdGlvbnMgPT09IG51bGwgfHwgcG9wdXBPcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwb3B1cE9wdGlvbnMuaG9yaXpvbnRhbFBvc2l0aW9uLCBwb3B1cE9wdGlvbnMgPT09IG51bGwgfHwgcG9wdXBPcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwb3B1cE9wdGlvbnMuc2hvd1BvaW50ZXIsIHBvcHVwT3B0aW9ucyA9PT0gbnVsbCB8fCBwb3B1cE9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBvcHVwT3B0aW9ucy5pc01vZGFsLCBwb3B1cE9wdGlvbnMgPT09IG51bGwgfHwgcG9wdXBPcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwb3B1cE9wdGlvbnMub25DYW5jZWwsIHBvcHVwT3B0aW9ucyA9PT0gbnVsbCB8fCBwb3B1cE9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBvcHVwT3B0aW9ucy5vbkFwcGx5LCBwb3B1cE9wdGlvbnMgPT09IG51bGwgfHwgcG9wdXBPcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwb3B1cE9wdGlvbnMub25IaWRlLCBwb3B1cE9wdGlvbnMgPT09IG51bGwgfHwgcG9wdXBPcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwb3B1cE9wdGlvbnMub25TaG93LCBwb3B1cE9wdGlvbnMgPT09IG51bGwgfHwgcG9wdXBPcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwb3B1cE9wdGlvbnMuY3NzQ2xhc3MsIHBvcHVwT3B0aW9ucyA9PT0gbnVsbCB8fCBwb3B1cE9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBvcHVwT3B0aW9ucy50aXRsZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBsaXN0TW9kZWwuZGlzcG9zZSgpO1xuICAgIH0pO1xuICAgIGlubmVyUG9wdXBNb2RlbC5kaXNwbGF5TW9kZSA9IHBvcHVwT3B0aW9ucyA9PT0gbnVsbCB8fCBwb3B1cE9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBvcHVwT3B0aW9ucy5kaXNwbGF5TW9kZTtcbiAgICB2YXIgbmV3QWN0aW9uT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIGFjdGlvbk9wdGlvbnMsIHtcbiAgICAgICAgY29tcG9uZW50OiBcInN2LWFjdGlvbi1iYXItaXRlbS1kcm9wZG93blwiLFxuICAgICAgICBwb3B1cE1vZGVsOiBpbm5lclBvcHVwTW9kZWwsXG4gICAgICAgIGFjdGlvbjogZnVuY3Rpb24gKGFjdGlvbiwgaXNVc2VyQWN0aW9uKSB7XG4gICAgICAgICAgICAhIShhY3Rpb25PcHRpb25zLmFjdGlvbikgJiYgYWN0aW9uT3B0aW9ucy5hY3Rpb24oKTtcbiAgICAgICAgICAgIGlubmVyUG9wdXBNb2RlbC5pc0ZvY3VzZWRDb250ZW50ID0gIWlzVXNlckFjdGlvbiB8fCBsaXN0TW9kZWwuc2hvd0ZpbHRlcjtcbiAgICAgICAgICAgIGlubmVyUG9wdXBNb2RlbC50b2dnbGVWaXNpYmlsaXR5KCk7XG4gICAgICAgICAgICBsaXN0TW9kZWwuc2Nyb2xsVG9TZWxlY3RlZEl0ZW0oKTtcbiAgICAgICAgfSxcbiAgICB9KTtcbiAgICB2YXIgbmV3QWN0aW9uID0gbmV3IEFjdGlvbihuZXdBY3Rpb25PcHRpb25zKTtcbiAgICBuZXdBY3Rpb24uZGF0YSA9IGxpc3RNb2RlbDtcbiAgICByZXR1cm4gbmV3QWN0aW9uO1xufVxuZnVuY3Rpb24gZ2V0QWN0aW9uRHJvcGRvd25CdXR0b25UYXJnZXQoY29udGFpbmVyKSB7XG4gICAgcmV0dXJuIGNvbnRhaW5lciA9PT0gbnVsbCB8fCBjb250YWluZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNvbnRhaW5lci5wcmV2aW91c0VsZW1lbnRTaWJsaW5nO1xufVxudmFyIEJhc2VBY3Rpb24gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEJhc2VBY3Rpb24sIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQmFzZUFjdGlvbigpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmljb25TaXplID0gMjQ7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJhc2VBY3Rpb24ucHJvdG90eXBlLCBcInZpc2libGVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFZpc2libGUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFZpc2libGUodmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCYXNlQWN0aW9uLnByb3RvdHlwZSwgXCJlbmFibGVkXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRFbmFibGVkKCk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRFbmFibGVkKHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQmFzZUFjdGlvbi5wcm90b3R5cGUsIFwiY29tcG9uZW50XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDb21wb25lbnQoKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldENvbXBvbmVudCh2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJhc2VBY3Rpb24ucHJvdG90eXBlLCBcImxvY1RpdGxlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRMb2NUaXRsZSgpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0TG9jVGl0bGUodmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCYXNlQWN0aW9uLnByb3RvdHlwZSwgXCJ0aXRsZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VGl0bGUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFRpdGxlKHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQmFzZUFjdGlvbi5wcm90b3R5cGUsIFwiY3NzQ2xhc3Nlc1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3NzQ2xhc3Nlc1ZhbHVlIHx8IF9jb250YWluZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1tcImRlZmF1bHRBY3Rpb25CYXJDc3NcIl07XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5jc3NDbGFzc2VzVmFsdWUgPSB2YWw7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQmFzZUFjdGlvbi5wcm90b3R5cGUsIFwiaXNWaXNpYmxlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52aXNpYmxlICYmIHRoaXMubW9kZSAhPT0gXCJwb3B1cFwiICYmIHRoaXMubW9kZSAhPT0gXCJyZW1vdmVkXCI7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQmFzZUFjdGlvbi5wcm90b3R5cGUsIFwiZGlzYWJsZWRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVuYWJsZWQgIT09IHVuZGVmaW5lZCAmJiAhdGhpcy5lbmFibGVkO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJhc2VBY3Rpb24ucHJvdG90eXBlLCBcImNhblNocmlua1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuICEhdGhpcy5pY29uTmFtZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCYXNlQWN0aW9uLnByb3RvdHlwZSwgXCJoYXNUaXRsZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuICgoKHRoaXMubW9kZSAhPSBcInNtYWxsXCIgJiZcbiAgICAgICAgICAgICAgICAodGhpcy5zaG93VGl0bGUgfHwgdGhpcy5zaG93VGl0bGUgPT09IHVuZGVmaW5lZCkpIHx8XG4gICAgICAgICAgICAgICAgIXRoaXMuaWNvbk5hbWUpICYmXG4gICAgICAgICAgICAgICAgISF0aGlzLnRpdGxlKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIEJhc2VBY3Rpb24ucHJvdG90eXBlLmdldEFjdGlvbkJhckl0ZW1UaXRsZUNzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBfdXRpbHNfY3NzQ2xhc3NCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bXCJDc3NDbGFzc0J1aWxkZXJcIl0oKVxuICAgICAgICAgICAgLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMuaXRlbVRpdGxlKVxuICAgICAgICAgICAgLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMuaXRlbVRpdGxlV2l0aEljb24sICEhdGhpcy5pY29uTmFtZSlcbiAgICAgICAgICAgIC50b1N0cmluZygpO1xuICAgIH07XG4gICAgQmFzZUFjdGlvbi5wcm90b3R5cGUuZ2V0QWN0aW9uQmFySXRlbUNzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBfdXRpbHNfY3NzQ2xhc3NCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bXCJDc3NDbGFzc0J1aWxkZXJcIl0oKVxuICAgICAgICAgICAgLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMuaXRlbSlcbiAgICAgICAgICAgIC5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLml0ZW1XaXRoVGl0bGUsIHRoaXMuaGFzVGl0bGUpXG4gICAgICAgICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5pdGVtQXNJY29uLCAhdGhpcy5oYXNUaXRsZSlcbiAgICAgICAgICAgIC5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLml0ZW1BY3RpdmUsICEhdGhpcy5hY3RpdmUpXG4gICAgICAgICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5pdGVtUHJlc3NlZCwgISF0aGlzLnByZXNzZWQpXG4gICAgICAgICAgICAuYXBwZW5kKHRoaXMuaW5uZXJDc3MpXG4gICAgICAgICAgICAudG9TdHJpbmcoKTtcbiAgICB9O1xuICAgIEJhc2VBY3Rpb24ucHJvdG90eXBlLmdldEFjdGlvblJvb3RDc3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBuZXcgX3V0aWxzX2Nzc0NsYXNzQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fW1wiQ3NzQ2xhc3NCdWlsZGVyXCJdKClcbiAgICAgICAgICAgIC5hcHBlbmQoXCJzdi1hY3Rpb25cIilcbiAgICAgICAgICAgIC5hcHBlbmQodGhpcy5jc3MpXG4gICAgICAgICAgICAuYXBwZW5kKFwic3YtYWN0aW9uLS1zcGFjZVwiLCB0aGlzLm5lZWRTcGFjZSlcbiAgICAgICAgICAgIC5hcHBlbmQoXCJzdi1hY3Rpb24tLWhpZGRlblwiLCAhdGhpcy5pc1Zpc2libGUpXG4gICAgICAgICAgICAudG9TdHJpbmcoKTtcbiAgICB9O1xuICAgIEJhc2VBY3Rpb24ucHJvdG90eXBlLmdldFRvb2x0aXAgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvb2x0aXAgfHwgdGhpcy50aXRsZTtcbiAgICB9O1xuICAgIEJhc2VBY3Rpb24ucHJvdG90eXBlLmdldElzVHJ1c3RlZCA9IGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgIGlmICghIWFyZ3Mub3JpZ2luYWxFdmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIGFyZ3Mub3JpZ2luYWxFdmVudC5pc1RydXN0ZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFyZ3MuaXNUcnVzdGVkO1xuICAgIH07XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wicHJvcGVydHlcIl0pKClcbiAgICBdLCBCYXNlQWN0aW9uLnByb3RvdHlwZSwgXCJ0b29sdGlwXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wicHJvcGVydHlcIl0pKClcbiAgICBdLCBCYXNlQWN0aW9uLnByb3RvdHlwZSwgXCJzaG93VGl0bGVcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJwcm9wZXJ0eVwiXSkoKVxuICAgIF0sIEJhc2VBY3Rpb24ucHJvdG90eXBlLCBcImlubmVyQ3NzXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wicHJvcGVydHlcIl0pKClcbiAgICBdLCBCYXNlQWN0aW9uLnByb3RvdHlwZSwgXCJhY3RpdmVcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJwcm9wZXJ0eVwiXSkoKVxuICAgIF0sIEJhc2VBY3Rpb24ucHJvdG90eXBlLCBcInByZXNzZWRcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJwcm9wZXJ0eVwiXSkoKVxuICAgIF0sIEJhc2VBY3Rpb24ucHJvdG90eXBlLCBcImRhdGFcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJwcm9wZXJ0eVwiXSkoKVxuICAgIF0sIEJhc2VBY3Rpb24ucHJvdG90eXBlLCBcInBvcHVwTW9kZWxcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJwcm9wZXJ0eVwiXSkoKVxuICAgIF0sIEJhc2VBY3Rpb24ucHJvdG90eXBlLCBcIm5lZWRTZXBhcmF0b3JcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJwcm9wZXJ0eVwiXSkoKVxuICAgIF0sIEJhc2VBY3Rpb24ucHJvdG90eXBlLCBcInRlbXBsYXRlXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wicHJvcGVydHlcIl0pKHsgZGVmYXVsdFZhbHVlOiBcImxhcmdlXCIgfSlcbiAgICBdLCBCYXNlQWN0aW9uLnByb3RvdHlwZSwgXCJtb2RlXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wicHJvcGVydHlcIl0pKClcbiAgICBdLCBCYXNlQWN0aW9uLnByb3RvdHlwZSwgXCJ2aXNpYmxlSW5kZXhcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJwcm9wZXJ0eVwiXSkoKVxuICAgIF0sIEJhc2VBY3Rpb24ucHJvdG90eXBlLCBcImRpc2FibGVUYWJTdG9wXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wicHJvcGVydHlcIl0pKClcbiAgICBdLCBCYXNlQWN0aW9uLnByb3RvdHlwZSwgXCJkaXNhYmxlU2hyaW5rXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wicHJvcGVydHlcIl0pKClcbiAgICBdLCBCYXNlQWN0aW9uLnByb3RvdHlwZSwgXCJkaXNhYmxlSGlkZVwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QoX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcInByb3BlcnR5XCJdKSh7IGRlZmF1bHRWYWx1ZTogZmFsc2UgfSlcbiAgICBdLCBCYXNlQWN0aW9uLnByb3RvdHlwZSwgXCJuZWVkU3BhY2VcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJwcm9wZXJ0eVwiXSkoKVxuICAgIF0sIEJhc2VBY3Rpb24ucHJvdG90eXBlLCBcImFyaWFDaGVja2VkXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wicHJvcGVydHlcIl0pKClcbiAgICBdLCBCYXNlQWN0aW9uLnByb3RvdHlwZSwgXCJhcmlhRXhwYW5kZWRcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJwcm9wZXJ0eVwiXSkoeyBkZWZhdWx0VmFsdWU6IFwiYnV0dG9uXCIgfSlcbiAgICBdLCBCYXNlQWN0aW9uLnByb3RvdHlwZSwgXCJhcmlhUm9sZVwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QoX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcInByb3BlcnR5XCJdKSgpXG4gICAgXSwgQmFzZUFjdGlvbi5wcm90b3R5cGUsIFwiaWNvbk5hbWVcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJwcm9wZXJ0eVwiXSkoKVxuICAgIF0sIEJhc2VBY3Rpb24ucHJvdG90eXBlLCBcImljb25TaXplXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wicHJvcGVydHlcIl0pKClcbiAgICBdLCBCYXNlQWN0aW9uLnByb3RvdHlwZSwgXCJjc3NcIiwgdm9pZCAwKTtcbiAgICByZXR1cm4gQmFzZUFjdGlvbjtcbn0oX2Jhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkJhc2VcIl0pKTtcblxudmFyIEFjdGlvbiA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQWN0aW9uLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFjdGlvbihpbm5lckl0ZW0pIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuaW5uZXJJdGVtID0gaW5uZXJJdGVtO1xuICAgICAgICBfdGhpcy5sb2NUaXRsZUNoYW5nZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgdmFsID0gX3RoaXMubG9jVGl0bGUucmVuZGVyZWRIdG1sO1xuICAgICAgICAgICAgX3RoaXMuc2V0UHJvcGVydHlWYWx1ZShcIl90aXRsZVwiLCAhIXZhbCA/IHZhbCA6IHVuZGVmaW5lZCk7XG4gICAgICAgIH07XG4gICAgICAgIF90aGlzLmxvY1RpdGxlID0gISFpbm5lckl0ZW0gPyBpbm5lckl0ZW1bXCJsb2NUaXRsZVwiXSA6IG51bGw7XG4gICAgICAgIC8vT2JqZWN0LmFzc2lnbih0aGlzLCBpdGVtKSB0byBzdXBwb3J0IElFMTFcbiAgICAgICAgaWYgKCEhaW5uZXJJdGVtKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gaW5uZXJJdGVtKSB7XG4gICAgICAgICAgICAgICAgaWYgKGtleSAhPT0gXCJsb2NUaXRsZVwiKSB7XG4gICAgICAgICAgICAgICAgICAgIF90aGlzW2tleV0gPSBpbm5lckl0ZW1ba2V5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEhX3RoaXMubG9jVGl0bGVOYW1lKSB7XG4gICAgICAgICAgICBfdGhpcy5sb2NUaXRsZUNoYW5nZWQoKTtcbiAgICAgICAgfVxuICAgICAgICBfdGhpcy5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChcIl90aXRsZVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5yYWlzZVVwZGF0ZSh0cnVlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIF90aGlzLmxvY1N0ckNoYW5nZWRJblBvcHVwTW9kZWwoKTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBBY3Rpb24ucHJvdG90eXBlLnJhaXNlVXBkYXRlID0gZnVuY3Rpb24gKGlzUmVzZXRJbml0aWFsaXplZCkge1xuICAgICAgICBpZiAoaXNSZXNldEluaXRpYWxpemVkID09PSB2b2lkIDApIHsgaXNSZXNldEluaXRpYWxpemVkID0gZmFsc2U7IH1cbiAgICAgICAgdGhpcy51cGRhdGVDYWxsYmFjayAmJiB0aGlzLnVwZGF0ZUNhbGxiYWNrKGlzUmVzZXRJbml0aWFsaXplZCk7XG4gICAgfTtcbiAgICBBY3Rpb24ucHJvdG90eXBlLmNyZWF0ZUxvY1RpdGxlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcInRpdGxlXCIsIHRoaXMsIHRydWUpO1xuICAgIH07XG4gICAgQWN0aW9uLnByb3RvdHlwZS5nZXRMb2NUaXRsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jVGl0bGVWYWx1ZTtcbiAgICB9O1xuICAgIEFjdGlvbi5wcm90b3R5cGUuc2V0TG9jVGl0bGUgPSBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgIGlmICghdmFsICYmICF0aGlzLmxvY1RpdGxlVmFsdWUpIHtcbiAgICAgICAgICAgIHZhbCA9IHRoaXMuY3JlYXRlTG9jVGl0bGUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoISF0aGlzLmxvY1RpdGxlVmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMubG9jVGl0bGVWYWx1ZS5vblN0cmluZ0NoYW5nZWQucmVtb3ZlKHRoaXMubG9jVGl0bGVDaGFuZ2VkKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxvY1RpdGxlVmFsdWUgPSB2YWw7XG4gICAgICAgIHRoaXMubG9jVGl0bGVWYWx1ZS5vblN0cmluZ0NoYW5nZWQuYWRkKHRoaXMubG9jVGl0bGVDaGFuZ2VkKTtcbiAgICAgICAgdGhpcy5sb2NUaXRsZUNoYW5nZWQoKTtcbiAgICB9O1xuICAgIEFjdGlvbi5wcm90b3R5cGUuZ2V0VGl0bGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90aXRsZTtcbiAgICB9O1xuICAgIEFjdGlvbi5wcm90b3R5cGUuc2V0VGl0bGUgPSBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgIHRoaXMuX3RpdGxlID0gdmFsO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEFjdGlvbi5wcm90b3R5cGUsIFwibG9jVGl0bGVOYW1lXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NUaXRsZS5sb2NhbGl6YXRpb25OYW1lO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMubG9jVGl0bGUubG9jYWxpemF0aW9uTmFtZSA9IHZhbDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIEFjdGlvbi5wcm90b3R5cGUubG9jU3Ryc0NoYW5nZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUubG9jU3Ryc0NoYW5nZWQuY2FsbCh0aGlzKTtcbiAgICAgICAgdGhpcy5sb2NUb29sdGlwQ2hhbmdlZCgpO1xuICAgICAgICB0aGlzLmxvY1N0ckNoYW5nZWRJblBvcHVwTW9kZWwoKTtcbiAgICB9O1xuICAgIEFjdGlvbi5wcm90b3R5cGUubG9jU3RyQ2hhbmdlZEluUG9wdXBNb2RlbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnBvcHVwTW9kZWwgfHwgIXRoaXMucG9wdXBNb2RlbC5jb250ZW50Q29tcG9uZW50RGF0YSB8fCAhdGhpcy5wb3B1cE1vZGVsLmNvbnRlbnRDb21wb25lbnREYXRhLm1vZGVsKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIgbW9kZWwgPSB0aGlzLnBvcHVwTW9kZWwuY29udGVudENvbXBvbmVudERhdGEubW9kZWw7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG1vZGVsLmFjdGlvbnMpKSB7XG4gICAgICAgICAgICB2YXIgYWN0aW9ucyA9IG1vZGVsLmFjdGlvbnM7XG4gICAgICAgICAgICBhY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICAgICAgICBpZiAoISFpdGVtLmxvY1N0cnNDaGFuZ2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0ubG9jU3Ryc0NoYW5nZWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQWN0aW9uLnByb3RvdHlwZS5sb2NUb29sdGlwQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmxvY1Rvb2x0aXBOYW1lKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLnRvb2x0aXAgPSBfc3VydmV5U3RyaW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wic3VydmV5TG9jYWxpemF0aW9uXCJdLmdldFN0cmluZyh0aGlzLmxvY1Rvb2x0aXBOYW1lLCB0aGlzLmxvY1RpdGxlLmxvY2FsZSk7XG4gICAgfTtcbiAgICAvL0lMb2NhbGl6YWJsZU93bmVyXG4gICAgQWN0aW9uLnByb3RvdHlwZS5nZXRMb2NhbGUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLm93bmVyID8gdGhpcy5vd25lci5nZXRMb2NhbGUoKSA6IFwiXCI7IH07XG4gICAgQWN0aW9uLnByb3RvdHlwZS5nZXRNYXJrZG93bkh0bWwgPSBmdW5jdGlvbiAodGV4dCwgbmFtZSkgeyByZXR1cm4gdGhpcy5vd25lciA/IHRoaXMub3duZXIuZ2V0TWFya2Rvd25IdG1sKHRleHQsIG5hbWUpIDogdW5kZWZpbmVkOyB9O1xuICAgIEFjdGlvbi5wcm90b3R5cGUuZ2V0UHJvY2Vzc2VkVGV4dCA9IGZ1bmN0aW9uICh0ZXh0KSB7IHJldHVybiB0aGlzLm93bmVyID8gdGhpcy5vd25lci5nZXRQcm9jZXNzZWRUZXh0KHRleHQpIDogdGV4dDsgfTtcbiAgICBBY3Rpb24ucHJvdG90eXBlLmdldFJlbmRlcmVyID0gZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuIHRoaXMub3duZXIgPyB0aGlzLm93bmVyLmdldFJlbmRlcmVyKG5hbWUpIDogbnVsbDsgfTtcbiAgICBBY3Rpb24ucHJvdG90eXBlLmdldFJlbmRlcmVyQ29udGV4dCA9IGZ1bmN0aW9uIChsb2NTdHIpIHsgcmV0dXJuIHRoaXMub3duZXIgPyB0aGlzLm93bmVyLmdldFJlbmRlcmVyQ29udGV4dChsb2NTdHIpIDogbG9jU3RyOyB9O1xuICAgIEFjdGlvbi5wcm90b3R5cGUuc2V0VmlzaWJsZSA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgdGhpcy5fdmlzaWJsZSA9IHZhbDtcbiAgICB9O1xuICAgIEFjdGlvbi5wcm90b3R5cGUuZ2V0VmlzaWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Zpc2libGU7XG4gICAgfTtcbiAgICBBY3Rpb24ucHJvdG90eXBlLnNldEVuYWJsZWQgPSBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgIHRoaXMuX2VuYWJsZWQgPSB2YWw7XG4gICAgfTtcbiAgICBBY3Rpb24ucHJvdG90eXBlLmdldEVuYWJsZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbmFibGVkO1xuICAgIH07XG4gICAgQWN0aW9uLnByb3RvdHlwZS5zZXRDb21wb25lbnQgPSBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgIHRoaXMuX2NvbXBvbmVudCA9IHZhbDtcbiAgICB9O1xuICAgIEFjdGlvbi5wcm90b3R5cGUuZ2V0Q29tcG9uZW50ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29tcG9uZW50O1xuICAgIH07XG4gICAgQWN0aW9uLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmFjdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG4gICAgICAgIGlmICh0aGlzLnBvcHVwTW9kZWwpIHtcbiAgICAgICAgICAgIHRoaXMucG9wdXBNb2RlbC5kaXNwb3NlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEhdGhpcy5sb2NUaXRsZVZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmxvY1RpdGxlVmFsdWUub25TdHJpbmdDaGFuZ2VkLnJlbW92ZSh0aGlzLmxvY1RpdGxlQ2hhbmdlZCk7XG4gICAgICAgICAgICB0aGlzLmxvY1RpdGxlQ2hhbmdlZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH07XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wicHJvcGVydHlcIl0pKClcbiAgICBdLCBBY3Rpb24ucHJvdG90eXBlLCBcImlkXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wicHJvcGVydHlcIl0pKHtcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogdHJ1ZSxcbiAgICAgICAgICAgIG9uU2V0OiBmdW5jdGlvbiAoXywgdGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0LnJhaXNlVXBkYXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgXSwgQWN0aW9uLnByb3RvdHlwZSwgXCJfdmlzaWJsZVwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QoX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcInByb3BlcnR5XCJdKSh7XG4gICAgICAgICAgICBvblNldDogZnVuY3Rpb24gKF8sIHRhcmdldCkge1xuICAgICAgICAgICAgICAgIHRhcmdldC5sb2NUb29sdGlwQ2hhbmdlZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgIF0sIEFjdGlvbi5wcm90b3R5cGUsIFwibG9jVG9vbHRpcE5hbWVcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJwcm9wZXJ0eVwiXSkoKVxuICAgIF0sIEFjdGlvbi5wcm90b3R5cGUsIFwiX2VuYWJsZWRcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJwcm9wZXJ0eVwiXSkoKVxuICAgIF0sIEFjdGlvbi5wcm90b3R5cGUsIFwiYWN0aW9uXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wicHJvcGVydHlcIl0pKClcbiAgICBdLCBBY3Rpb24ucHJvdG90eXBlLCBcIl9jb21wb25lbnRcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJwcm9wZXJ0eVwiXSkoKVxuICAgIF0sIEFjdGlvbi5wcm90b3R5cGUsIFwiaXRlbXNcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJwcm9wZXJ0eVwiXSkoe1xuICAgICAgICAgICAgb25TZXQ6IGZ1bmN0aW9uICh2YWwsIHRhcmdldCkge1xuICAgICAgICAgICAgICAgIGlmICh0YXJnZXQubG9jVGl0bGVWYWx1ZS50ZXh0ID09PSB2YWwpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB0YXJnZXQubG9jVGl0bGVWYWx1ZS50ZXh0ID0gdmFsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgIF0sIEFjdGlvbi5wcm90b3R5cGUsIFwiX3RpdGxlXCIsIHZvaWQgMCk7XG4gICAgcmV0dXJuIEFjdGlvbjtcbn0oQmFzZUFjdGlvbikpO1xuXG52YXIgQWN0aW9uRHJvcGRvd25WaWV3TW9kZWwgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gQWN0aW9uRHJvcGRvd25WaWV3TW9kZWwoaXRlbSkge1xuICAgICAgICB0aGlzLml0ZW0gPSBpdGVtO1xuICAgICAgICB0aGlzLmZ1bmNLZXkgPSBcInN2LWRyb3Bkb3duLWFjdGlvblwiO1xuICAgICAgICB0aGlzLnNldHVwUG9wdXBDYWxsYmFja3MoKTtcbiAgICB9XG4gICAgQWN0aW9uRHJvcGRvd25WaWV3TW9kZWwucHJvdG90eXBlLnNldHVwUG9wdXBDYWxsYmFja3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBwb3B1cE1vZGVsID0gdGhpcy5wb3B1cE1vZGVsID0gdGhpcy5pdGVtLnBvcHVwTW9kZWw7XG4gICAgICAgIGlmICghcG9wdXBNb2RlbClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgcG9wdXBNb2RlbC5yZWdpc3RlclByb3BlcnR5Q2hhbmdlZEhhbmRsZXJzKFtcImlzVmlzaWJsZVwiXSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFwb3B1cE1vZGVsLmlzVmlzaWJsZSkge1xuICAgICAgICAgICAgICAgIF90aGlzLml0ZW0ucHJlc3NlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgX3RoaXMuaXRlbS5wcmVzc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgdGhpcy5mdW5jS2V5KTtcbiAgICB9O1xuICAgIEFjdGlvbkRyb3Bkb3duVmlld01vZGVsLnByb3RvdHlwZS5yZW1vdmVQb3B1cENhbGxiYWNrcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCEhdGhpcy5wb3B1cE1vZGVsKSB7XG4gICAgICAgICAgICB0aGlzLnBvcHVwTW9kZWwudW5yZWdpc3RlclByb3BlcnR5Q2hhbmdlZEhhbmRsZXJzKFtcImlzVmlzaWJsZVwiXSwgdGhpcy5mdW5jS2V5KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQWN0aW9uRHJvcGRvd25WaWV3TW9kZWwucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlUG9wdXBDYWxsYmFja3MoKTtcbiAgICB9O1xuICAgIHJldHVybiBBY3Rpb25Ecm9wZG93blZpZXdNb2RlbDtcbn0oKSk7XG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9hY3Rpb25zL2FkYXB0aXZlLWNvbnRhaW5lci50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9hY3Rpb25zL2FkYXB0aXZlLWNvbnRhaW5lci50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBBZGFwdGl2ZUFjdGlvbkNvbnRhaW5lciAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJBZGFwdGl2ZUFjdGlvbkNvbnRhaW5lclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEFkYXB0aXZlQWN0aW9uQ29udGFpbmVyOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdXRpbHNfcmVzcG9uc2l2aXR5X21hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3V0aWxzL3Jlc3BvbnNpdml0eS1tYW5hZ2VyICovIFwiLi9zcmMvdXRpbHMvcmVzcG9uc2l2aXR5LW1hbmFnZXIudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2FjdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9hY3Rpb24gKi8gXCIuL3NyYy9hY3Rpb25zL2FjdGlvbi50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfY29udGFpbmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2NvbnRhaW5lciAqLyBcIi4vc3JjL2FjdGlvbnMvY29udGFpbmVyLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zdXJ2ZXlTdHJpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9zdXJ2ZXlTdHJpbmdzICovIFwiLi9zcmMvc3VydmV5U3RyaW5ncy50c1wiKTtcbnZhciBfX2V4dGVuZHMgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xuXG5cblxuXG52YXIgQWRhcHRpdmVBY3Rpb25Db250YWluZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEFkYXB0aXZlQWN0aW9uQ29udGFpbmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFkYXB0aXZlQWN0aW9uQ29udGFpbmVyKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5taW5WaXNpYmxlSXRlbXNDb3VudCA9IDA7XG4gICAgICAgIF90aGlzLmlzUmVzcG9uc2l2ZW5lc3NEaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICBfdGhpcy5kb3RzSXRlbSA9IE9iamVjdChfYWN0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJjcmVhdGVEcm9wZG93bkFjdGlvbk1vZGVsQWR2YW5jZWRcIl0pKHtcbiAgICAgICAgICAgIGlkOiBcImRvdHNJdGVtLWlkXCIgKyBBZGFwdGl2ZUFjdGlvbkNvbnRhaW5lci5Db250YWluZXJJRCsrLFxuICAgICAgICAgICAgY3NzOiBcInN2LWRvdHNcIixcbiAgICAgICAgICAgIGlubmVyQ3NzOiBcInN2LWRvdHNfX2l0ZW1cIixcbiAgICAgICAgICAgIGljb25OYW1lOiBcImljb24tbW9yZVwiLFxuICAgICAgICAgICAgdmlzaWJsZTogZmFsc2UsXG4gICAgICAgICAgICB0b29sdGlwOiBfc3VydmV5U3RyaW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wic3VydmV5TG9jYWxpemF0aW9uXCJdLmdldFN0cmluZyhcIm1vcmVcIiksXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIGl0ZW1zOiBbXSxcbiAgICAgICAgICAgIG9uU2VsZWN0aW9uQ2hhbmdlZDogZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5oaWRkZW5JdGVtU2VsZWN0ZWQoaXRlbSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWxsb3dTZWxlY3Rpb246IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIEFkYXB0aXZlQWN0aW9uQ29udGFpbmVyLnByb3RvdHlwZS5oaWRlSXRlbXNHcmVhdGVyTiA9IGZ1bmN0aW9uICh2aXNpYmxlSXRlbXNDb3VudCkge1xuICAgICAgICB2YXIgYWN0aW9uc1RvSGlkZSA9IHRoaXMuZ2V0QWN0aW9uc1RvSGlkZSgpO1xuICAgICAgICB2aXNpYmxlSXRlbXNDb3VudCA9IE1hdGgubWF4KHZpc2libGVJdGVtc0NvdW50LCB0aGlzLm1pblZpc2libGVJdGVtc0NvdW50IC0gKHRoaXMudmlzaWJsZUFjdGlvbnMubGVuZ3RoIC0gYWN0aW9uc1RvSGlkZS5sZW5ndGgpKTtcbiAgICAgICAgdmFyIGhpZGRlbkl0ZW1zID0gW107XG4gICAgICAgIGFjdGlvbnNUb0hpZGUuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgICAgaWYgKHZpc2libGVJdGVtc0NvdW50IDw9IDApIHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5yZW1vdmVQcmlvcml0eSkge1xuICAgICAgICAgICAgICAgICAgICBpdGVtLm1vZGUgPSBcInJlbW92ZWRcIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0ubW9kZSA9IFwicG9wdXBcIjtcbiAgICAgICAgICAgICAgICAgICAgaGlkZGVuSXRlbXMucHVzaChpdGVtLmlubmVySXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmlzaWJsZUl0ZW1zQ291bnQtLTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuaGlkZGVuSXRlbXNMaXN0TW9kZWwuc2V0SXRlbXMoaGlkZGVuSXRlbXMpO1xuICAgIH07XG4gICAgQWRhcHRpdmVBY3Rpb25Db250YWluZXIucHJvdG90eXBlLmdldEFjdGlvbnNUb0hpZGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpc2libGVBY3Rpb25zLmZpbHRlcihmdW5jdGlvbiAoYWN0aW9uKSB7IHJldHVybiAhYWN0aW9uLmRpc2FibGVIaWRlOyB9KS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBhLnJlbW92ZVByaW9yaXR5IHx8IDAgLSBiLnJlbW92ZVByaW9yaXR5IHx8IDA7IH0pO1xuICAgIH07XG4gICAgQWRhcHRpdmVBY3Rpb25Db250YWluZXIucHJvdG90eXBlLmdldFZpc2libGVJdGVtc0NvdW50ID0gZnVuY3Rpb24gKGF2YWlsYWJsZVNpemUpIHtcbiAgICAgICAgdGhpcy52aXNpYmxlQWN0aW9ucy5maWx0ZXIoZnVuY3Rpb24gKGFjdGlvbikgeyByZXR1cm4gYWN0aW9uLmRpc2FibGVIaWRlOyB9KS5mb3JFYWNoKGZ1bmN0aW9uIChhY3Rpb24pIHsgcmV0dXJuIGF2YWlsYWJsZVNpemUgLT0gYWN0aW9uLm1pbkRpbWVuc2lvbjsgfSk7XG4gICAgICAgIHZhciBpdGVtc1NpemVzID0gdGhpcy5nZXRBY3Rpb25zVG9IaWRlKCkubWFwKGZ1bmN0aW9uIChpdGVtKSB7IHJldHVybiBpdGVtLm1pbkRpbWVuc2lvbjsgfSk7XG4gICAgICAgIHZhciBjdXJyU2l6ZSA9IDA7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbXNTaXplcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY3VyclNpemUgKz0gaXRlbXNTaXplc1tpXTtcbiAgICAgICAgICAgIGlmIChjdXJyU2l6ZSA+IGF2YWlsYWJsZVNpemUpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGk7XG4gICAgfTtcbiAgICBBZGFwdGl2ZUFjdGlvbkNvbnRhaW5lci5wcm90b3R5cGUudXBkYXRlSXRlbU1vZGUgPSBmdW5jdGlvbiAoYXZhaWxhYmxlU2l6ZSwgaXRlbXNTaXplKSB7XG4gICAgICAgIHZhciBpdGVtcyA9IHRoaXMudmlzaWJsZUFjdGlvbnM7XG4gICAgICAgIGZvciAodmFyIGluZGV4ID0gaXRlbXMubGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXgtLSkge1xuICAgICAgICAgICAgaWYgKGl0ZW1zU2l6ZSA+IGF2YWlsYWJsZVNpemUgJiYgIWl0ZW1zW2luZGV4XS5kaXNhYmxlU2hyaW5rKSB7XG4gICAgICAgICAgICAgICAgaXRlbXNTaXplIC09IGl0ZW1zW2luZGV4XS5tYXhEaW1lbnNpb24gLSBpdGVtc1tpbmRleF0ubWluRGltZW5zaW9uO1xuICAgICAgICAgICAgICAgIGl0ZW1zW2luZGV4XS5tb2RlID0gXCJzbWFsbFwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaXRlbXNbaW5kZXhdLm1vZGUgPSBcImxhcmdlXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGl0ZW1zU2l6ZSA+IGF2YWlsYWJsZVNpemUpIHtcbiAgICAgICAgICAgIHZhciBoaWRhYmxlSXRlbXMgPSB0aGlzLnZpc2libGVBY3Rpb25zLmZpbHRlcihmdW5jdGlvbiAoYSkgeyByZXR1cm4gYS5yZW1vdmVQcmlvcml0eTsgfSk7XG4gICAgICAgICAgICBoaWRhYmxlSXRlbXMuc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYS5yZW1vdmVQcmlvcml0eSAtIGIucmVtb3ZlUHJpb3JpdHk7IH0pO1xuICAgICAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGhpZGFibGVJdGVtcy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbXNTaXplID4gYXZhaWxhYmxlU2l6ZSkge1xuICAgICAgICAgICAgICAgICAgICBpdGVtc1NpemUgLT0gaXRlbXNbaW5kZXhdLmRpc2FibGVTaHJpbmsgPyBoaWRhYmxlSXRlbXNbaW5kZXhdLm1heERpbWVuc2lvbiA6IGhpZGFibGVJdGVtc1tpbmRleF0ubWluRGltZW5zaW9uO1xuICAgICAgICAgICAgICAgICAgICBoaWRhYmxlSXRlbXNbaW5kZXhdLm1vZGUgPSBcInJlbW92ZWRcIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBZGFwdGl2ZUFjdGlvbkNvbnRhaW5lci5wcm90b3R5cGUsIFwiaGlkZGVuSXRlbXNMaXN0TW9kZWxcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRvdHNJdGVtLmRhdGE7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBBZGFwdGl2ZUFjdGlvbkNvbnRhaW5lci5wcm90b3R5cGUuaGlkZGVuSXRlbVNlbGVjdGVkID0gZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgaWYgKCEhaXRlbSAmJiB0eXBlb2YgaXRlbS5hY3Rpb24gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgaXRlbS5hY3Rpb24oKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQWRhcHRpdmVBY3Rpb25Db250YWluZXIucHJvdG90eXBlLm9uU2V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB0aGlzLmFjdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoYWN0aW9uKSB7IHJldHVybiBhY3Rpb24udXBkYXRlQ2FsbGJhY2sgPSBmdW5jdGlvbiAoaXNSZXNldEluaXRpYWxpemVkKSB7IHJldHVybiBfdGhpcy5yYWlzZVVwZGF0ZShpc1Jlc2V0SW5pdGlhbGl6ZWQpOyB9OyB9KTtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5vblNldC5jYWxsKHRoaXMpO1xuICAgIH07XG4gICAgQWRhcHRpdmVBY3Rpb25Db250YWluZXIucHJvdG90eXBlLm9uUHVzaCA9IGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGl0ZW0udXBkYXRlQ2FsbGJhY2sgPSBmdW5jdGlvbiAoaXNSZXNldEluaXRpYWxpemVkKSB7IHJldHVybiBfdGhpcy5yYWlzZVVwZGF0ZShpc1Jlc2V0SW5pdGlhbGl6ZWQpOyB9O1xuICAgICAgICBfc3VwZXIucHJvdG90eXBlLm9uUHVzaC5jYWxsKHRoaXMsIGl0ZW0pO1xuICAgIH07XG4gICAgQWRhcHRpdmVBY3Rpb25Db250YWluZXIucHJvdG90eXBlLmdldFJlbmRlcmVkQWN0aW9ucyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuYWN0aW9ucy5sZW5ndGggPT09IDEgJiYgISF0aGlzLmFjdGlvbnNbMF0uaWNvbk5hbWUpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hY3Rpb25zO1xuICAgICAgICByZXR1cm4gdGhpcy5hY3Rpb25zLmNvbmNhdChbdGhpcy5kb3RzSXRlbV0pO1xuICAgIH07XG4gICAgQWRhcHRpdmVBY3Rpb25Db250YWluZXIucHJvdG90eXBlLnJhaXNlVXBkYXRlID0gZnVuY3Rpb24gKGlzUmVzZXRJbml0aWFsaXplZCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNSZXNwb25zaXZlbmVzc0Rpc2FibGVkKSB7XG4gICAgICAgICAgICBfc3VwZXIucHJvdG90eXBlLnJhaXNlVXBkYXRlLmNhbGwodGhpcywgaXNSZXNldEluaXRpYWxpemVkKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQWRhcHRpdmVBY3Rpb25Db250YWluZXIucHJvdG90eXBlLmZpdCA9IGZ1bmN0aW9uIChkaW1lbnNpb24sIGRvdHNJdGVtU2l6ZSkge1xuICAgICAgICBpZiAoZGltZW5zaW9uIDw9IDApXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMuZG90c0l0ZW0udmlzaWJsZSA9IGZhbHNlO1xuICAgICAgICB2YXIgbWluU2l6ZSA9IDA7XG4gICAgICAgIHZhciBtYXhTaXplID0gMDtcbiAgICAgICAgdmFyIGl0ZW1zID0gdGhpcy52aXNpYmxlQWN0aW9ucztcbiAgICAgICAgaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgICAgbWluU2l6ZSArPSBpdGVtLm1pbkRpbWVuc2lvbjtcbiAgICAgICAgICAgIG1heFNpemUgKz0gaXRlbS5tYXhEaW1lbnNpb247XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoZGltZW5zaW9uID49IG1heFNpemUpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0QWN0aW9uc01vZGUoXCJsYXJnZVwiKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkaW1lbnNpb24gPCBtaW5TaXplKSB7XG4gICAgICAgICAgICB0aGlzLnNldEFjdGlvbnNNb2RlKFwic21hbGxcIik7XG4gICAgICAgICAgICB0aGlzLmhpZGVJdGVtc0dyZWF0ZXJOKHRoaXMuZ2V0VmlzaWJsZUl0ZW1zQ291bnQoZGltZW5zaW9uIC0gZG90c0l0ZW1TaXplKSk7XG4gICAgICAgICAgICB0aGlzLmRvdHNJdGVtLnZpc2libGUgPSAhIXRoaXMuaGlkZGVuSXRlbXNMaXN0TW9kZWwuYWN0aW9ucy5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUl0ZW1Nb2RlKGRpbWVuc2lvbiwgbWF4U2l6ZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEFkYXB0aXZlQWN0aW9uQ29udGFpbmVyLnByb3RvdHlwZS5pbml0UmVzcG9uc2l2aXR5TWFuYWdlciA9IGZ1bmN0aW9uIChjb250YWluZXIpIHtcbiAgICAgICAgdGhpcy5yZXNwb25zaXZpdHlNYW5hZ2VyID0gbmV3IF91dGlsc19yZXNwb25zaXZpdHlfbWFuYWdlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiUmVzcG9uc2l2aXR5TWFuYWdlclwiXShjb250YWluZXIsIHRoaXMsIFwiOnNjb3BlID4gLnN2LWFjdGlvbjpub3QoLnN2LWRvdHMpID4gLnN2LWFjdGlvbl9fY29udGVudFwiKTtcbiAgICB9O1xuICAgIEFkYXB0aXZlQWN0aW9uQ29udGFpbmVyLnByb3RvdHlwZS5yZXNldFJlc3BvbnNpdml0eU1hbmFnZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghIXRoaXMucmVzcG9uc2l2aXR5TWFuYWdlcikge1xuICAgICAgICAgICAgdGhpcy5yZXNwb25zaXZpdHlNYW5hZ2VyLmRpc3Bvc2UoKTtcbiAgICAgICAgICAgIHRoaXMucmVzcG9uc2l2aXR5TWFuYWdlciA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQWRhcHRpdmVBY3Rpb25Db250YWluZXIucHJvdG90eXBlLnNldEFjdGlvbnNNb2RlID0gZnVuY3Rpb24gKG1vZGUpIHtcbiAgICAgICAgdGhpcy5hY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKGFjdGlvbikge1xuICAgICAgICAgICAgaWYgKG1vZGUgPT0gXCJzbWFsbFwiICYmIGFjdGlvbi5kaXNhYmxlU2hyaW5rKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGFjdGlvbi5tb2RlID0gbW9kZTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBBZGFwdGl2ZUFjdGlvbkNvbnRhaW5lci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG4gICAgICAgIHRoaXMuZG90c0l0ZW0uZGF0YS5kaXNwb3NlKCk7XG4gICAgICAgIHRoaXMuZG90c0l0ZW0uZGlzcG9zZSgpO1xuICAgICAgICB0aGlzLnJlc2V0UmVzcG9uc2l2aXR5TWFuYWdlcigpO1xuICAgIH07XG4gICAgQWRhcHRpdmVBY3Rpb25Db250YWluZXIuQ29udGFpbmVySUQgPSAxO1xuICAgIHJldHVybiBBZGFwdGl2ZUFjdGlvbkNvbnRhaW5lcjtcbn0oX2NvbnRhaW5lcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiQWN0aW9uQ29udGFpbmVyXCJdKSk7XG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9hY3Rpb25zL2NvbnRhaW5lci50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9hY3Rpb25zL2NvbnRhaW5lci50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBkZWZhdWx0QWN0aW9uQmFyQ3NzLCBBY3Rpb25Db250YWluZXIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiZGVmYXVsdEFjdGlvbkJhckNzc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGRlZmF1bHRBY3Rpb25CYXJDc3M7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkFjdGlvbkNvbnRhaW5lclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEFjdGlvbkNvbnRhaW5lcjsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2pzb25vYmplY3QgKi8gXCIuL3NyYy9qc29ub2JqZWN0LnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9iYXNlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9iYXNlICovIFwiLi9zcmMvYmFzZS50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYWN0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2FjdGlvbiAqLyBcIi4vc3JjL2FjdGlvbnMvYWN0aW9uLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF91dGlsc19jc3NDbGFzc0J1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3V0aWxzL2Nzc0NsYXNzQnVpbGRlciAqLyBcIi4vc3JjL3V0aWxzL2Nzc0NsYXNzQnVpbGRlci50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdXRpbHNfdXRpbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3V0aWxzL3V0aWxzICovIFwiLi9zcmMvdXRpbHMvdXRpbHMudHNcIik7XG52YXIgX19leHRlbmRzID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbnZhciBfX2RlY29yYXRlID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn07XG5cblxuXG5cblxudmFyIGRlZmF1bHRBY3Rpb25CYXJDc3MgPSB7XG4gICAgcm9vdDogXCJzdi1hY3Rpb24tYmFyXCIsXG4gICAgZGVmYXVsdFNpemVNb2RlOiBcInN2LWFjdGlvbi1iYXItLWRlZmF1bHQtc2l6ZS1tb2RlXCIsXG4gICAgc21hbGxTaXplTW9kZTogXCJzdi1hY3Rpb24tYmFyLS1zbWFsbC1zaXplLW1vZGVcIixcbiAgICBpdGVtOiBcInN2LWFjdGlvbi1iYXItaXRlbVwiLFxuICAgIGl0ZW1XaXRoVGl0bGU6IFwiXCIsXG4gICAgaXRlbUFzSWNvbjogXCJzdi1hY3Rpb24tYmFyLWl0ZW0tLWljb25cIixcbiAgICBpdGVtQWN0aXZlOiBcInN2LWFjdGlvbi1iYXItaXRlbS0tYWN0aXZlXCIsXG4gICAgaXRlbVByZXNzZWQ6IFwic3YtYWN0aW9uLWJhci1pdGVtLS1wcmVzc2VkXCIsXG4gICAgaXRlbUljb246IFwic3YtYWN0aW9uLWJhci1pdGVtX19pY29uXCIsXG4gICAgaXRlbVRpdGxlOiBcInN2LWFjdGlvbi1iYXItaXRlbV9fdGl0bGVcIixcbiAgICBpdGVtVGl0bGVXaXRoSWNvbjogXCJzdi1hY3Rpb24tYmFyLWl0ZW1fX3RpdGxlLS13aXRoLWljb25cIixcbn07XG52YXIgQWN0aW9uQ29udGFpbmVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBY3Rpb25Db250YWluZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQWN0aW9uQ29udGFpbmVyKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuc2l6ZU1vZGUgPSBcImRlZmF1bHRcIjtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBBY3Rpb25Db250YWluZXIucHJvdG90eXBlLmdldE1hcmtkb3duSHRtbCA9IGZ1bmN0aW9uICh0ZXh0LCBuYW1lKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMubG9jT3duZXIgPyB0aGlzLmxvY093bmVyLmdldE1hcmtkb3duSHRtbCh0ZXh0LCBuYW1lKSA6IHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIEFjdGlvbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0UmVuZGVyZXIgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICByZXR1cm4gISF0aGlzLmxvY093bmVyID8gdGhpcy5sb2NPd25lci5nZXRSZW5kZXJlcihuYW1lKSA6IG51bGw7XG4gICAgfTtcbiAgICBBY3Rpb25Db250YWluZXIucHJvdG90eXBlLmdldFJlbmRlcmVyQ29udGV4dCA9IGZ1bmN0aW9uIChsb2NTdHIpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5sb2NPd25lciA/IHRoaXMubG9jT3duZXIuZ2V0UmVuZGVyZXJDb250ZXh0KGxvY1N0cikgOiBsb2NTdHI7XG4gICAgfTtcbiAgICBBY3Rpb25Db250YWluZXIucHJvdG90eXBlLmdldFByb2Nlc3NlZFRleHQgPSBmdW5jdGlvbiAodGV4dCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NPd25lciA/IHRoaXMubG9jT3duZXIuZ2V0UHJvY2Vzc2VkVGV4dCh0ZXh0KSA6IHRleHQ7XG4gICAgfTtcbiAgICBBY3Rpb25Db250YWluZXIucHJvdG90eXBlLmdldExvY2FsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5sb2NPd25lciA/IHRoaXMubG9jT3duZXIuZ2V0TG9jYWxlKCkgOiBcIlwiO1xuICAgIH07XG4gICAgQWN0aW9uQ29udGFpbmVyLnByb3RvdHlwZS5nZXRSZW5kZXJlZEFjdGlvbnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFjdGlvbnM7XG4gICAgfTtcbiAgICBBY3Rpb25Db250YWluZXIucHJvdG90eXBlLmxvY1N0cnNDaGFuZ2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBfc3VwZXIucHJvdG90eXBlLmxvY1N0cnNDaGFuZ2VkLmNhbGwodGhpcyk7XG4gICAgICAgIHRoaXMuYWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgICBpZiAoaXRlbS5sb2NUaXRsZSlcbiAgICAgICAgICAgICAgICBpdGVtLmxvY1RpdGxlLnN0ckNoYW5nZWQoKTtcbiAgICAgICAgICAgIGl0ZW0ubG9jU3Ryc0NoYW5nZWQoKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBBY3Rpb25Db250YWluZXIucHJvdG90eXBlLnJhaXNlVXBkYXRlID0gZnVuY3Rpb24gKGlzUmVzZXRJbml0aWFsaXplZCkge1xuICAgICAgICB0aGlzLmlzRW1wdHkgPSAhdGhpcy5hY3Rpb25zLnNvbWUoZnVuY3Rpb24gKGFjdGlvbikgeyByZXR1cm4gYWN0aW9uLnZpc2libGU7IH0pO1xuICAgICAgICB0aGlzLnVwZGF0ZUNhbGxiYWNrICYmIHRoaXMudXBkYXRlQ2FsbGJhY2soaXNSZXNldEluaXRpYWxpemVkKTtcbiAgICB9O1xuICAgIEFjdGlvbkNvbnRhaW5lci5wcm90b3R5cGUub25TZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHRoaXMuYWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7IF90aGlzLnNldEFjdGlvbkNzc0NsYXNzZXMoaXRlbSk7IH0pO1xuICAgICAgICB0aGlzLnJhaXNlVXBkYXRlKHRydWUpO1xuICAgIH07XG4gICAgQWN0aW9uQ29udGFpbmVyLnByb3RvdHlwZS5vblB1c2ggPSBmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICB0aGlzLnNldEFjdGlvbkNzc0NsYXNzZXMoaXRlbSk7XG4gICAgICAgIGl0ZW0ub3duZXIgPSB0aGlzO1xuICAgICAgICB0aGlzLnJhaXNlVXBkYXRlKHRydWUpO1xuICAgIH07XG4gICAgQWN0aW9uQ29udGFpbmVyLnByb3RvdHlwZS5vblJlbW92ZSA9IGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIGl0ZW0ub3duZXIgPSBudWxsO1xuICAgICAgICB0aGlzLnJhaXNlVXBkYXRlKHRydWUpO1xuICAgIH07XG4gICAgQWN0aW9uQ29udGFpbmVyLnByb3RvdHlwZS5zZXRBY3Rpb25Dc3NDbGFzc2VzID0gZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgaXRlbS5jc3NDbGFzc2VzID0gdGhpcy5jc3NDbGFzc2VzO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEFjdGlvbkNvbnRhaW5lci5wcm90b3R5cGUsIFwiaGFzQWN0aW9uc1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuICh0aGlzLmFjdGlvbnMgfHwgW10pLmxlbmd0aCA+IDA7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQWN0aW9uQ29udGFpbmVyLnByb3RvdHlwZSwgXCJyZW5kZXJlZEFjdGlvbnNcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFJlbmRlcmVkQWN0aW9ucygpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEFjdGlvbkNvbnRhaW5lci5wcm90b3R5cGUsIFwidmlzaWJsZUFjdGlvbnNcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFjdGlvbnMuZmlsdGVyKGZ1bmN0aW9uIChhY3Rpb24pIHsgcmV0dXJuIGFjdGlvbi52aXNpYmxlICE9PSBmYWxzZTsgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBBY3Rpb25Db250YWluZXIucHJvdG90eXBlLmdldFJvb3RDc3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBzaXplTW9kZUNsYXNzID0gdGhpcy5zaXplTW9kZSA9PT0gXCJzbWFsbFwiID8gdGhpcy5jc3NDbGFzc2VzLnNtYWxsU2l6ZU1vZGUgOiB0aGlzLmNzc0NsYXNzZXMuZGVmYXVsdFNpemVNb2RlO1xuICAgICAgICByZXR1cm4gbmV3IF91dGlsc19jc3NDbGFzc0J1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcIkNzc0NsYXNzQnVpbGRlclwiXSgpLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMucm9vdCArICghIXNpemVNb2RlQ2xhc3MgPyBcIiBcIiArIHNpemVNb2RlQ2xhc3MgOiBcIlwiKSArICghIXRoaXMuY29udGFpbmVyQ3NzID8gXCIgXCIgKyB0aGlzLmNvbnRhaW5lckNzcyA6IFwiXCIpKVxuICAgICAgICAgICAgLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMucm9vdCArIFwiLS1lbXB0eVwiLCB0aGlzLmlzRW1wdHkpXG4gICAgICAgICAgICAudG9TdHJpbmcoKTtcbiAgICB9O1xuICAgIEFjdGlvbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0RGVmYXVsdENzc0NsYXNzZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBkZWZhdWx0QWN0aW9uQmFyQ3NzO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEFjdGlvbkNvbnRhaW5lci5wcm90b3R5cGUsIFwiY3NzQ2xhc3Nlc1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmNzc0NsYXNzZXNWYWx1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY3NzQ2xhc3Nlc1ZhbHVlID0gdGhpcy5nZXREZWZhdWx0Q3NzQ2xhc3NlcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3NzQ2xhc3Nlc1ZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgICAgICB0aGlzLmNzc0NsYXNzZXNWYWx1ZSA9IHt9O1xuICAgICAgICAgICAgdGhpcy5jb3B5Q3NzQ2xhc3Nlcyh0aGlzLmNzc0NsYXNzZXNWYWx1ZSwgdGhpcy5nZXREZWZhdWx0Q3NzQ2xhc3NlcygpKTtcbiAgICAgICAgICAgIE9iamVjdChfdXRpbHNfdXRpbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1tcIm1lcmdlVmFsdWVzXCJdKSh2YWwsIHRoaXMuY3NzQ2xhc3Nlcyk7XG4gICAgICAgICAgICB0aGlzLmFjdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoYWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMuc2V0QWN0aW9uQ3NzQ2xhc3NlcyhhY3Rpb24pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBBY3Rpb25Db250YWluZXIucHJvdG90eXBlLmNyZWF0ZUFjdGlvbiA9IGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIHJldHVybiAoaXRlbSBpbnN0YW5jZW9mIF9hY3Rpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIkJhc2VBY3Rpb25cIl0gPyBpdGVtIDogbmV3IF9hY3Rpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIkFjdGlvblwiXShpdGVtKSk7XG4gICAgfTtcbiAgICBBY3Rpb25Db250YWluZXIucHJvdG90eXBlLmFkZEFjdGlvbiA9IGZ1bmN0aW9uICh2YWwsIHNvcnRCeVZpc2libGVJbmRleCkge1xuICAgICAgICBpZiAoc29ydEJ5VmlzaWJsZUluZGV4ID09PSB2b2lkIDApIHsgc29ydEJ5VmlzaWJsZUluZGV4ID0gdHJ1ZTsgfVxuICAgICAgICB2YXIgcmVzID0gdGhpcy5jcmVhdGVBY3Rpb24odmFsKTtcbiAgICAgICAgdGhpcy5hY3Rpb25zLnB1c2gocmVzKTtcbiAgICAgICAgdGhpcy5zb3J0SXRlbXMoKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9O1xuICAgIEFjdGlvbkNvbnRhaW5lci5wcm90b3R5cGUuc29ydEl0ZW1zID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmFjdGlvbnMgPSBbXVxuICAgICAgICAgICAgLmNvbmNhdCh0aGlzLmFjdGlvbnMuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7IHJldHVybiBpdGVtLnZpc2libGVJbmRleCA9PT0gdW5kZWZpbmVkIHx8IGl0ZW0udmlzaWJsZUluZGV4ID49IDA7IH0pKVxuICAgICAgICAgICAgLnNvcnQoZnVuY3Rpb24gKGZpcnN0SXRlbSwgc2Vjb25kSXRlbSkge1xuICAgICAgICAgICAgcmV0dXJuIGZpcnN0SXRlbS52aXNpYmxlSW5kZXggLSBzZWNvbmRJdGVtLnZpc2libGVJbmRleDtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBBY3Rpb25Db250YWluZXIucHJvdG90eXBlLnNldEl0ZW1zID0gZnVuY3Rpb24gKGl0ZW1zLCBzb3J0QnlWaXNpYmxlSW5kZXgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgaWYgKHNvcnRCeVZpc2libGVJbmRleCA9PT0gdm9pZCAwKSB7IHNvcnRCeVZpc2libGVJbmRleCA9IHRydWU7IH1cbiAgICAgICAgdGhpcy5hY3Rpb25zID0gaXRlbXMubWFwKGZ1bmN0aW9uIChpdGVtKSB7IHJldHVybiBfdGhpcy5jcmVhdGVBY3Rpb24oaXRlbSk7IH0pO1xuICAgICAgICBpZiAoc29ydEJ5VmlzaWJsZUluZGV4KSB7XG4gICAgICAgICAgICB0aGlzLnNvcnRJdGVtcygpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBBY3Rpb25Db250YWluZXIucHJvdG90eXBlLmluaXRSZXNwb25zaXZpdHlNYW5hZ2VyID0gZnVuY3Rpb24gKGNvbnRhaW5lcikge1xuICAgICAgICByZXR1cm47XG4gICAgfTtcbiAgICBBY3Rpb25Db250YWluZXIucHJvdG90eXBlLnJlc2V0UmVzcG9uc2l2aXR5TWFuYWdlciA9IGZ1bmN0aW9uICgpIHsgfTtcbiAgICBBY3Rpb25Db250YWluZXIucHJvdG90eXBlLmdldEFjdGlvbkJ5SWQgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmFjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmFjdGlvbnNbaV0uaWQgPT09IGlkKVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFjdGlvbnNbaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgICBBY3Rpb25Db250YWluZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuICAgICAgICB0aGlzLmFjdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoYWN0aW9uKSB7IHJldHVybiBhY3Rpb24uZGlzcG9zZSgpOyB9KTtcbiAgICAgICAgdGhpcy5hY3Rpb25zLmxlbmd0aCA9IDA7XG4gICAgfTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJwcm9wZXJ0eUFycmF5XCJdKSh7XG4gICAgICAgICAgICBvblNldDogZnVuY3Rpb24gKF8sIHRhcmdldCkge1xuICAgICAgICAgICAgICAgIHRhcmdldC5vblNldCgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uUHVzaDogZnVuY3Rpb24gKGl0ZW0sIGksIHRhcmdldCkge1xuICAgICAgICAgICAgICAgIHRhcmdldC5vblB1c2goaXRlbSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25SZW1vdmU6IGZ1bmN0aW9uIChpdGVtLCBpLCB0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXQub25SZW1vdmUoaXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgXSwgQWN0aW9uQ29udGFpbmVyLnByb3RvdHlwZSwgXCJhY3Rpb25zXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicHJvcGVydHlcIl0pKHt9KVxuICAgIF0sIEFjdGlvbkNvbnRhaW5lci5wcm90b3R5cGUsIFwiY29udGFpbmVyQ3NzXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicHJvcGVydHlcIl0pKHsgZGVmYXVsdFZhbHVlOiBmYWxzZSB9KVxuICAgIF0sIEFjdGlvbkNvbnRhaW5lci5wcm90b3R5cGUsIFwiaXNFbXB0eVwiLCB2b2lkIDApO1xuICAgIHJldHVybiBBY3Rpb25Db250YWluZXI7XG59KF9iYXNlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJCYXNlXCJdKSk7XG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9iYXNlLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvYmFzZS50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEJpbmRpbmdzLCBEZXBlbmRlbmNpZXMsIENvbXB1dGVkVXBkYXRlciwgQmFzZSwgQXJyYXlDaGFuZ2VzLCBFdmVudCwgRXZlbnRCYXNlICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkJpbmRpbmdzXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQmluZGluZ3M7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkRlcGVuZGVuY2llc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIERlcGVuZGVuY2llczsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQ29tcHV0ZWRVcGRhdGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQ29tcHV0ZWRVcGRhdGVyOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJCYXNlXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQmFzZTsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQXJyYXlDaGFuZ2VzXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQXJyYXlDaGFuZ2VzOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJFdmVudFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEV2ZW50OyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJFdmVudEJhc2VcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBFdmVudEJhc2U7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9sb2NhbGl6YWJsZXN0cmluZ19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9sb2NhbGl6YWJsZXN0cmluZyAqLyBcIi4vc3JjL2xvY2FsaXphYmxlc3RyaW5nLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9oZWxwZXJzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2hlbHBlcnMgKi8gXCIuL3NyYy9oZWxwZXJzLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2pzb25vYmplY3QgKi8gXCIuL3NyYy9qc29ub2JqZWN0LnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9zZXR0aW5ncyAqLyBcIi4vc3JjL3NldHRpbmdzLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9jb25kaXRpb25zX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2NvbmRpdGlvbnMgKi8gXCIuL3NyYy9jb25kaXRpb25zLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zdXJ2ZXlTdHJpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3N1cnZleVN0cmluZ3MgKi8gXCIuL3NyYy9zdXJ2ZXlTdHJpbmdzLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9jb25zb2xlX3dhcm5pbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2NvbnNvbGUtd2FybmluZ3MgKi8gXCIuL3NyYy9jb25zb2xlLXdhcm5pbmdzLnRzXCIpO1xudmFyIF9fZXh0ZW5kcyA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG52YXIgX19zcHJlYWRBcnJheSA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fc3ByZWFkQXJyYXkpIHx8IGZ1bmN0aW9uICh0bywgZnJvbSkge1xuICAgIGZvciAodmFyIGkgPSAwLCBpbCA9IGZyb20ubGVuZ3RoLCBqID0gdG8ubGVuZ3RoOyBpIDwgaWw7IGkrKywgaisrKVxuICAgICAgICB0b1tqXSA9IGZyb21baV07XG4gICAgcmV0dXJuIHRvO1xufTtcblxuXG5cblxuXG5cblxudmFyIEJpbmRpbmdzID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEJpbmRpbmdzKG9iaikge1xuICAgICAgICB0aGlzLm9iaiA9IG9iajtcbiAgICAgICAgdGhpcy5wcm9wZXJ0aWVzID0gbnVsbDtcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBudWxsO1xuICAgIH1cbiAgICBCaW5kaW5ncy5wcm90b3R5cGUuZ2V0VHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIFwiYmluZGluZ3NcIjtcbiAgICB9O1xuICAgIEJpbmRpbmdzLnByb3RvdHlwZS5nZXROYW1lcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHJlcyA9IFtdO1xuICAgICAgICB0aGlzLmZpbGxQcm9wZXJ0aWVzKCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcm9wZXJ0aWVzW2ldLmlzVmlzaWJsZShcIlwiLCB0aGlzLm9iaikpIHtcbiAgICAgICAgICAgICAgICByZXMucHVzaCh0aGlzLnByb3BlcnRpZXNbaV0ubmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9O1xuICAgIEJpbmRpbmdzLnByb3RvdHlwZS5nZXRQcm9wZXJ0aWVzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcmVzID0gW107XG4gICAgICAgIHRoaXMuZmlsbFByb3BlcnRpZXMoKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHJlcy5wdXNoKHRoaXMucHJvcGVydGllc1tpXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9O1xuICAgIEJpbmRpbmdzLnByb3RvdHlwZS5zZXRCaW5kaW5nID0gZnVuY3Rpb24gKHByb3BlcnR5TmFtZSwgdmFsdWVOYW1lKSB7XG4gICAgICAgIGlmICghdGhpcy52YWx1ZXMpXG4gICAgICAgICAgICB0aGlzLnZhbHVlcyA9IHt9O1xuICAgICAgICB2YXIgb2xkVmFsdWUgPSB0aGlzLmdldEpzb24oKTtcbiAgICAgICAgaWYgKG9sZFZhbHVlID09PSB2YWx1ZU5hbWUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmICghIXZhbHVlTmFtZSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZXNbcHJvcGVydHlOYW1lXSA9IHZhbHVlTmFtZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnZhbHVlc1twcm9wZXJ0eU5hbWVdO1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHRoaXMudmFsdWVzKS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uQ2hhbmdlZEpTT04ob2xkVmFsdWUpO1xuICAgIH07XG4gICAgQmluZGluZ3MucHJvdG90eXBlLmNsZWFyQmluZGluZyA9IGZ1bmN0aW9uIChwcm9wZXJ0eU5hbWUpIHtcbiAgICAgICAgdGhpcy5zZXRCaW5kaW5nKHByb3BlcnR5TmFtZSwgXCJcIik7XG4gICAgfTtcbiAgICBCaW5kaW5ncy5wcm90b3R5cGUuaXNFbXB0eSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnZhbHVlcylcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy52YWx1ZXMpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG4gICAgQmluZGluZ3MucHJvdG90eXBlLmdldFZhbHVlTmFtZUJ5UHJvcGVydHlOYW1lID0gZnVuY3Rpb24gKHByb3BlcnR5TmFtZSkge1xuICAgICAgICBpZiAoIXRoaXMudmFsdWVzKVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzW3Byb3BlcnR5TmFtZV07XG4gICAgfTtcbiAgICBCaW5kaW5ncy5wcm90b3R5cGUuZ2V0UHJvcGVydGllc0J5VmFsdWVOYW1lID0gZnVuY3Rpb24gKHZhbHVlTmFtZSkge1xuICAgICAgICBpZiAoIXRoaXMudmFsdWVzKVxuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB2YXIgcmVzID0gW107XG4gICAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnZhbHVlcykge1xuICAgICAgICAgICAgaWYgKHRoaXMudmFsdWVzW2tleV0gPT0gdmFsdWVOYW1lKSB7XG4gICAgICAgICAgICAgICAgcmVzLnB1c2goa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH07XG4gICAgQmluZGluZ3MucHJvdG90eXBlLmdldEpzb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzRW1wdHkoKSlcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIHZhciByZXMgPSB7fTtcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHRoaXMudmFsdWVzKSB7XG4gICAgICAgICAgICByZXNba2V5XSA9IHRoaXMudmFsdWVzW2tleV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9O1xuICAgIEJpbmRpbmdzLnByb3RvdHlwZS5zZXRKc29uID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBvbGRWYWx1ZSA9IHRoaXMuZ2V0SnNvbigpO1xuICAgICAgICB0aGlzLnZhbHVlcyA9IG51bGw7XG4gICAgICAgIGlmICghIXZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlcyA9IHt9O1xuICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNba2V5XSA9IHZhbHVlW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbkNoYW5nZWRKU09OKG9sZFZhbHVlKTtcbiAgICB9O1xuICAgIEJpbmRpbmdzLnByb3RvdHlwZS5maWxsUHJvcGVydGllcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMucHJvcGVydGllcyAhPT0gbnVsbClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5wcm9wZXJ0aWVzID0gW107XG4gICAgICAgIHZhciBvYmpQcm9wZXJ0aWVzID0gX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIlNlcmlhbGl6ZXJcIl0uZ2V0UHJvcGVydGllc0J5T2JqKHRoaXMub2JqKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmpQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAob2JqUHJvcGVydGllc1tpXS5pc0JpbmRhYmxlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wZXJ0aWVzLnB1c2gob2JqUHJvcGVydGllc1tpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEJpbmRpbmdzLnByb3RvdHlwZS5vbkNoYW5nZWRKU09OID0gZnVuY3Rpb24gKG9sZFZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLm9iaikge1xuICAgICAgICAgICAgdGhpcy5vYmoub25CaW5kaW5nQ2hhbmdlZChvbGRWYWx1ZSwgdGhpcy5nZXRKc29uKCkpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gQmluZGluZ3M7XG59KCkpO1xuXG52YXIgRGVwZW5kZW5jaWVzID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIERlcGVuZGVuY2llcyhjdXJyZW50RGVwZW5kZW5jeSwgdGFyZ2V0LCBwcm9wZXJ0eSkge1xuICAgICAgICB0aGlzLmN1cnJlbnREZXBlbmRlbmN5ID0gY3VycmVudERlcGVuZGVuY3k7XG4gICAgICAgIHRoaXMudGFyZ2V0ID0gdGFyZ2V0O1xuICAgICAgICB0aGlzLnByb3BlcnR5ID0gcHJvcGVydHk7XG4gICAgICAgIHRoaXMuZGVwZW5kZW5jaWVzID0gW107XG4gICAgICAgIHRoaXMuaWQgPSBcIlwiICsgKCsrRGVwZW5kZW5jaWVzLkRlcGVuZGVuY2llc0NvdW50KTtcbiAgICB9XG4gICAgRGVwZW5kZW5jaWVzLnByb3RvdHlwZS5hZGREZXBlbmRlbmN5ID0gZnVuY3Rpb24gKHRhcmdldCwgcHJvcGVydHkpIHtcbiAgICAgICAgaWYgKHRoaXMudGFyZ2V0ID09PSB0YXJnZXQgJiYgdGhpcy5wcm9wZXJ0eSA9PT0gcHJvcGVydHkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmICh0aGlzLmRlcGVuZGVuY2llcy5zb21lKGZ1bmN0aW9uIChkZXBlbmRlbmN5KSB7IHJldHVybiBkZXBlbmRlbmN5Lm9iaiA9PT0gdGFyZ2V0ICYmIGRlcGVuZGVuY3kucHJvcCA9PT0gcHJvcGVydHk7IH0pKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLmRlcGVuZGVuY2llcy5wdXNoKHtcbiAgICAgICAgICAgIG9iajogdGFyZ2V0LFxuICAgICAgICAgICAgcHJvcDogcHJvcGVydHksXG4gICAgICAgICAgICBpZDogdGhpcy5pZFxuICAgICAgICB9KTtcbiAgICAgICAgdGFyZ2V0LnJlZ2lzdGVyUHJvcGVydHlDaGFuZ2VkSGFuZGxlcnMoW3Byb3BlcnR5XSwgdGhpcy5jdXJyZW50RGVwZW5kZW5jeSwgdGhpcy5pZCk7XG4gICAgfTtcbiAgICBEZXBlbmRlbmNpZXMucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuZGVwZW5kZW5jaWVzLmZvckVhY2goZnVuY3Rpb24gKGRlcGVuZGVuY3kpIHtcbiAgICAgICAgICAgIGRlcGVuZGVuY3kub2JqLnVucmVnaXN0ZXJQcm9wZXJ0eUNoYW5nZWRIYW5kbGVycyhbZGVwZW5kZW5jeS5wcm9wXSwgZGVwZW5kZW5jeS5pZCk7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyB0aGlzLmN1cnJlbnREZXBlbmRlbmN5ID0gdW5kZWZpbmVkO1xuICAgIH07XG4gICAgRGVwZW5kZW5jaWVzLkRlcGVuZGVuY2llc0NvdW50ID0gMDtcbiAgICByZXR1cm4gRGVwZW5kZW5jaWVzO1xufSgpKTtcblxudmFyIENvbXB1dGVkVXBkYXRlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBDb21wdXRlZFVwZGF0ZXIoX3VwZGF0ZXIpIHtcbiAgICAgICAgdGhpcy5fdXBkYXRlciA9IF91cGRhdGVyO1xuICAgICAgICB0aGlzLmRlcGVuZGVuY2llcyA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy50eXBlID0gQ29tcHV0ZWRVcGRhdGVyLkNvbXB1dGVkVXBkYXRlclR5cGU7XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb21wdXRlZFVwZGF0ZXIucHJvdG90eXBlLCBcInVwZGF0ZXJcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl91cGRhdGVyO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgQ29tcHV0ZWRVcGRhdGVyLnByb3RvdHlwZS5zZXREZXBlbmRlbmNpZXMgPSBmdW5jdGlvbiAoZGVwZW5kZW5jaWVzKSB7XG4gICAgICAgIHRoaXMuY2xlYXJEZXBlbmRlbmNpZXMoKTtcbiAgICAgICAgdGhpcy5kZXBlbmRlbmNpZXMgPSBkZXBlbmRlbmNpZXM7XG4gICAgfTtcbiAgICBDb21wdXRlZFVwZGF0ZXIucHJvdG90eXBlLmdldERlcGVuZGVuY2llcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVwZW5kZW5jaWVzO1xuICAgIH07XG4gICAgQ29tcHV0ZWRVcGRhdGVyLnByb3RvdHlwZS5jbGVhckRlcGVuZGVuY2llcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuZGVwZW5kZW5jaWVzKSB7XG4gICAgICAgICAgICB0aGlzLmRlcGVuZGVuY2llcy5kaXNwb3NlKCk7XG4gICAgICAgICAgICB0aGlzLmRlcGVuZGVuY2llcyA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQ29tcHV0ZWRVcGRhdGVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmNsZWFyRGVwZW5kZW5jaWVzKCk7XG4gICAgfTtcbiAgICBDb21wdXRlZFVwZGF0ZXIuQ29tcHV0ZWRVcGRhdGVyVHlwZSA9IFwiX19kZXBlbmRlbmN5X2NvbXB1dGVkXCI7XG4gICAgcmV0dXJuIENvbXB1dGVkVXBkYXRlcjtcbn0oKSk7XG5cbi8qKlxuICogQSBiYXNlIGNsYXNzIGZvciBhbGwgU3VydmV5SlMgb2JqZWN0cy5cbiAqL1xudmFyIEJhc2UgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gQmFzZSgpIHtcbiAgICAgICAgdGhpcy5kZXBlbmRlbmNpZXMgPSB7fTtcbiAgICAgICAgdGhpcy5wcm9wZXJ0eUhhc2ggPSBCYXNlLmNyZWF0ZVByb3BlcnRpZXNIYXNoKCk7XG4gICAgICAgIHRoaXMuZXZlbnRMaXN0ID0gW107XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nRnJvbUpzb25WYWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmxvYWRpbmdPd25lciA9IG51bGw7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBbiBldmVudCB0aGF0IGlzIHJhaXNlZCB3aGVuIGEgcHJvcGVydHkgb2YgdGhpcyBTdXJ2ZXlKUyBvYmplY3QgaGFzIGNoYW5nZWQuXG4gICAgICAgICAqXG4gICAgICAgICAqIFBhcmFtZXRlcnM6XG4gICAgICAgICAqXG4gICAgICAgICAqIC0gYHNlbmRlcmA6IGB0aGlzYFxcXG4gICAgICAgICAqIEEgU3VydmV5SlMgb2JqZWN0IHdob3NlIHByb3BlcnR5IGhhcyBjaGFuZ2VkLlxuICAgICAgICAgKiAtIGBvcHRpb25zLm5hbWVgOiBgU3RyaW5nYFxcXG4gICAgICAgICAqIFRoZSBuYW1lIG9mIHRoZSBjaGFuZ2VkIHByb3BlcnR5LlxuICAgICAgICAgKiAtIGBvcHRpb25zLm5ld1ZhbHVlYDogYGFueWBcXFxuICAgICAgICAgKiBBIG5ldyB2YWx1ZSBmb3IgdGhlIHByb3BlcnR5LlxuICAgICAgICAgKiAtIGBvcHRpb25zLm9sZFZhbHVlYDogYGFueWBcXFxuICAgICAgICAgKiBBbiBvbGQgdmFsdWUgb2YgdGhlIHByb3BlcnR5LiBJZiB0aGUgcHJvcGVydHkgaXMgYW4gYXJyYXksIGBvbGRWYWx1ZWAgY29udGFpbnMgdGhlIHNhbWUgYXJyYXkgYXMgYG5ld1ZhbHVlYCBkb2VzLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5vblByb3BlcnR5Q2hhbmdlZCA9IHRoaXMuYWRkRXZlbnQoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFuIGV2ZW50IHRoYXQgaXMgcmFpc2VkIHdoZW4gYW4gW2BJdGVtVmFsdWVgXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2l0ZW12YWx1ZSkgcHJvcGVydHkgaXMgY2hhbmdlZC5cbiAgICAgICAgICpcbiAgICAgICAgICogUGFyYW1ldGVyczpcbiAgICAgICAgICpcbiAgICAgICAgICogLSBgc2VuZGVyYDogYHRoaXNgXFxcbiAgICAgICAgICogQSBTdXJ2ZXlKUyBvYmplY3Qgd2hvc2UgcHJvcGVydHkgY29udGFpbnMgYW4gYXJyYXkgb2YgYEl0ZW1WYWx1ZWAgb2JqZWN0cy5cbiAgICAgICAgICogLSBgb3B0aW9ucy5vYmpgOiBbYEl0ZW1WYWx1ZWBdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vaXRlbXZhbHVlKVxcXG4gICAgICAgICAqIEFuIGBJdGVtVmFsdWVgIG9iamVjdC5cbiAgICAgICAgICogLSBgb3B0aW9ucy5wcm9wZXJ0eU5hbWVgOiBgU3RyaW5nYFxcXG4gICAgICAgICAqIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byB3aGljaCBhbiBhcnJheSBvZiBgSXRlbVZhbHVlYCBvYmplY3RzIGlzIGFzc2lnbmVkIChmb3IgZXhhbXBsZSwgYFwiY2hvaWNlc1wiYCBvciBgXCJyb3dzXCJgKS5cbiAgICAgICAgICogLSBgb3B0aW9ucy5uYW1lYDogYFwidGV4dFwiYCB8IGBcInZhbHVlXCJgXFxcbiAgICAgICAgICogVGhlIG5hbWUgb2YgdGhlIGNoYW5nZWQgcHJvcGVydHkuXG4gICAgICAgICAqIC0gYG9wdGlvbnMubmV3VmFsdWVgOiBgYW55YFxcXG4gICAgICAgICAqIEEgbmV3IHZhbHVlIGZvciB0aGUgcHJvcGVydHkuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLm9uSXRlbVZhbHVlUHJvcGVydHlDaGFuZ2VkID0gdGhpcy5hZGRFdmVudCgpO1xuICAgICAgICB0aGlzLmlzQ3JlYXRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmJpbmRpbmdzVmFsdWUgPSBuZXcgQmluZGluZ3ModGhpcyk7XG4gICAgICAgIF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJDdXN0b21Qcm9wZXJ0aWVzQ29sbGVjdGlvblwiXS5jcmVhdGVQcm9wZXJ0aWVzKHRoaXMpO1xuICAgICAgICB0aGlzLm9uQmFzZUNyZWF0aW5nKCk7XG4gICAgICAgIHRoaXMuaXNDcmVhdGluZyA9IGZhbHNlO1xuICAgIH1cbiAgICBCYXNlLmZpbmlzaENvbGxlY3REZXBlbmRlbmNpZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBkZXBzID0gQmFzZS5jdXJyZW50RGVwZW5kZW5jaXM7XG4gICAgICAgIEJhc2UuY3VycmVudERlcGVuZGVuY2lzID0gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gZGVwcztcbiAgICB9O1xuICAgIEJhc2Uuc3RhcnRDb2xsZWN0RGVwZW5kZW5jaWVzID0gZnVuY3Rpb24gKHVwZGF0ZXIsIHRhcmdldCwgcHJvcGVydHkpIHtcbiAgICAgICAgaWYgKEJhc2UuY3VycmVudERlcGVuZGVuY2lzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkF0dGVtcHQgdG8gY29sbGVjdCBuZXN0ZWQgZGVwZW5kZW5jaWVzLiBOZXN0ZWQgZGVwZW5kZW5jaWVzIGFyZSBub3Qgc3VwcG9ydGVkLlwiKTtcbiAgICAgICAgfVxuICAgICAgICBCYXNlLmN1cnJlbnREZXBlbmRlbmNpcyA9IG5ldyBEZXBlbmRlbmNpZXModXBkYXRlciwgdGFyZ2V0LCBwcm9wZXJ0eSk7XG4gICAgfTtcbiAgICBCYXNlLmNvbGxlY3REZXBlbmRlbmN5ID0gZnVuY3Rpb24gKHRhcmdldCwgcHJvcGVydHkpIHtcbiAgICAgICAgaWYgKEJhc2UuY3VycmVudERlcGVuZGVuY2lzID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIEJhc2UuY3VycmVudERlcGVuZGVuY2lzLmFkZERlcGVuZGVuY3kodGFyZ2V0LCBwcm9wZXJ0eSk7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQmFzZSwgXCJjb21tZW50U3VmZml4XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gX3NldHRpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJzZXR0aW5nc1wiXS5jb21tZW50U3VmZml4O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIF9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wic2V0dGluZ3NcIl0uY29tbWVudFN1ZmZpeCA9IHZhbDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCYXNlLCBcImNvbW1lbnRQcmVmaXhcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBCYXNlLmNvbW1lbnRTdWZmaXg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgQmFzZS5jb21tZW50U3VmZml4ID0gdmFsO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBgdHJ1ZWAgaWYgYSBwYXNzZWQgYHZhbHVlYCBpcyBhbiBlbXB0eSBzdHJpbmcsIGFycmF5LCBvciBvYmplY3Qgb3IgaWYgaXQgZXF1YWxzIHRvIGB1bmRlZmluZWRgIG9yIGBudWxsYC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB2YWx1ZSBBIHZhbHVlIHRvIGJlIGNoZWNrZWQuXG4gICAgICogQHBhcmFtIHRyaW1TdHJpbmcgKE9wdGlvbmFsKSBXaGVuIHRoaXMgcGFyYW1ldGVyIGlzIGB0cnVlYCwgdGhlIG1ldGhvZCBpZ25vcmVzIHdoaXRlc3BhY2UgY2hhcmFjdGVycyBhdCB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgYSBzdHJpbmcgdmFsdWUuIFBhc3MgYGZhbHNlYCB0byBkaXNhYmxlIHRoaXMgZnVuY3Rpb25hbGl0eS5cbiAgICAgKi9cbiAgICBCYXNlLnByb3RvdHlwZS5pc1ZhbHVlRW1wdHkgPSBmdW5jdGlvbiAodmFsdWUsIHRyaW1TdHJpbmcpIHtcbiAgICAgICAgaWYgKHRyaW1TdHJpbmcgPT09IHZvaWQgMCkgeyB0cmltU3RyaW5nID0gdHJ1ZTsgfVxuICAgICAgICBpZiAodHJpbVN0cmluZykge1xuICAgICAgICAgICAgdmFsdWUgPSB0aGlzLnRyaW1WYWx1ZSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9oZWxwZXJzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJIZWxwZXJzXCJdLmlzVmFsdWVFbXB0eSh2YWx1ZSk7XG4gICAgfTtcbiAgICBCYXNlLnByb3RvdHlwZS50cmltVmFsdWUgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgaWYgKCEhdmFsdWUgJiYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiB8fCB2YWx1ZSBpbnN0YW5jZW9mIFN0cmluZykpXG4gICAgICAgICAgICByZXR1cm4gdmFsdWUudHJpbSgpO1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfTtcbiAgICBCYXNlLnByb3RvdHlwZS5pc1Byb3BlcnR5RW1wdHkgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlICE9PSBcIlwiICYmIHRoaXMuaXNWYWx1ZUVtcHR5KHZhbHVlKTtcbiAgICB9O1xuICAgIEJhc2UuY3JlYXRlUHJvcGVydGllc0hhc2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9O1xuICAgIEJhc2UucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5ldmVudExpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuZXZlbnRMaXN0W2ldLmNsZWFyKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vblByb3BlcnR5VmFsdWVDaGFuZ2VkQ2FsbGJhY2sgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuaXNEaXNwb3NlZFZhbHVlID0gdHJ1ZTtcbiAgICAgICAgT2JqZWN0LmtleXModGhpcy5kZXBlbmRlbmNpZXMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gX3RoaXMuZGVwZW5kZW5jaWVzW2tleV0uZGlzcG9zZSgpOyB9KTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCYXNlLnByb3RvdHlwZSwgXCJpc0Rpc3Bvc2VkXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pc0Rpc3Bvc2VkVmFsdWUgPT09IHRydWU7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBCYXNlLnByb3RvdHlwZS5hZGRFdmVudCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHJlcyA9IG5ldyBFdmVudEJhc2UoKTtcbiAgICAgICAgdGhpcy5ldmVudExpc3QucHVzaChyZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH07XG4gICAgQmFzZS5wcm90b3R5cGUub25CYXNlQ3JlYXRpbmcgPSBmdW5jdGlvbiAoKSB7IH07XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgb2JqZWN0IHR5cGUgYXMgaXQgaXMgdXNlZCBpbiB0aGUgSlNPTiBzY2hlbWEuXG4gICAgICovXG4gICAgQmFzZS5wcm90b3R5cGUuZ2V0VHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIFwiYmFzZVwiO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogVXNlIHRoaXMgbWV0aG9kIHRvIGZpbmQgb3V0IGlmIHRoZSBjdXJyZW50IG9iamVjdCBpcyBvZiBhIGdpdmVuIGB0eXBlTmFtZWAgb3IgaW5oZXJpdGVkIGZyb20gaXQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdHlwZU5hbWUgT25lIG9mIHRoZSB2YWx1ZXMgbGlzdGVkIGluIHRoZSBbZ2V0VHlwZSgpXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL3F1ZXN0aW9uI2dldFR5cGUpIGRlc2NyaXB0aW9uLlxuICAgICAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgY3VycmVudCBvYmplY3QgaXMgb2YgYSBnaXZlbiBgdHlwZU5hbWVgIG9yIGluaGVyaXRlZCBmcm9tIGl0LlxuICAgICAqIEBzZWUgZ2V0VHlwZVxuICAgICAqL1xuICAgIEJhc2UucHJvdG90eXBlLmlzRGVzY2VuZGFudE9mID0gZnVuY3Rpb24gKHR5cGVOYW1lKSB7XG4gICAgICAgIHJldHVybiBfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiU2VyaWFsaXplclwiXS5pc0Rlc2NlbmRhbnRPZih0aGlzLmdldFR5cGUoKSwgdHlwZU5hbWUpO1xuICAgIH07XG4gICAgQmFzZS5wcm90b3R5cGUuZ2V0U3VydmV5ID0gZnVuY3Rpb24gKGlzTGl2ZSkge1xuICAgICAgICBpZiAoaXNMaXZlID09PSB2b2lkIDApIHsgaXNMaXZlID0gZmFsc2U7IH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQmFzZS5wcm90b3R5cGUsIFwiaXNEZXNpZ25Nb2RlXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgYHRydWVgIGlmIHRoZSBzdXJ2ZXkgaXMgYmVpbmcgZGVzaWduZWQgaW4gU3VydmV5IENyZWF0b3IuXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBzdXJ2ZXkgPSB0aGlzLmdldFN1cnZleSgpO1xuICAgICAgICAgICAgcmV0dXJuICEhc3VydmV5ICYmIHN1cnZleS5pc0Rlc2lnbk1vZGU7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQmFzZS5wcm90b3R5cGUsIFwiaW5TdXJ2ZXlcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG9iamVjdCBpcyBpbmNsdWRlZCBpbiBhIHN1cnZleS5cbiAgICAgICAgICpcbiAgICAgICAgICogVGhpcyBwcm9wZXJ0eSBtYXkgcmV0dXJuIGBmYWxzZWAsIGZvciBleGFtcGxlLCB3aGVuIHlvdSBbY3JlYXRlIGEgc3VydmV5IG1vZGVsIGR5bmFtaWNhbGx5XShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2Rlc2lnbi1zdXJ2ZXktY3JlYXRlLWEtc2ltcGxlLXN1cnZleSNjcmVhdGUtb3ItY2hhbmdlLWEtc3VydmV5LW1vZGVsLWR5bmFtaWNhbGx5KS5cbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuICEhdGhpcy5nZXRTdXJ2ZXkodHJ1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQmFzZS5wcm90b3R5cGUsIFwiYmluZGluZ3NcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJpbmRpbmdzVmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBCYXNlLnByb3RvdHlwZS5jaGVja0JpbmRpbmdzID0gZnVuY3Rpb24gKHZhbHVlTmFtZSwgdmFsdWUpIHsgfTtcbiAgICBCYXNlLnByb3RvdHlwZS51cGRhdGVCaW5kaW5ncyA9IGZ1bmN0aW9uIChwcm9wZXJ0eU5hbWUsIHZhbHVlKSB7XG4gICAgICAgIHZhciB2YWx1ZU5hbWUgPSB0aGlzLmJpbmRpbmdzLmdldFZhbHVlTmFtZUJ5UHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZSk7XG4gICAgICAgIGlmICghIXZhbHVlTmFtZSkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVCaW5kaW5nVmFsdWUodmFsdWVOYW1lLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEJhc2UucHJvdG90eXBlLnVwZGF0ZUJpbmRpbmdWYWx1ZSA9IGZ1bmN0aW9uICh2YWx1ZU5hbWUsIHZhbHVlKSB7IH07XG4gICAgQmFzZS5wcm90b3R5cGUuZ2V0VGVtcGxhdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFR5cGUoKTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCYXNlLnByb3RvdHlwZSwgXCJpc0xvYWRpbmdGcm9tSnNvblwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0IGNvbmZpZ3VyYXRpb24gaXMgYmVpbmcgbG9hZGVkIGZyb20gSlNPTi5cbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNMb2FkaW5nRnJvbUpzb25WYWx1ZSB8fCB0aGlzLmdldElzTG9hZGluZ0Zyb21Kc29uKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBCYXNlLnByb3RvdHlwZS5nZXRJc0xvYWRpbmdGcm9tSnNvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCEhdGhpcy5sb2FkaW5nT3duZXIgJiYgdGhpcy5sb2FkaW5nT3duZXIuaXNMb2FkaW5nRnJvbUpzb24pXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNMb2FkaW5nRnJvbUpzb25WYWx1ZTtcbiAgICB9O1xuICAgIEJhc2UucHJvdG90eXBlLnN0YXJ0TG9hZGluZ0Zyb21Kc29uID0gZnVuY3Rpb24gKGpzb24pIHtcbiAgICAgICAgdGhpcy5pc0xvYWRpbmdGcm9tSnNvblZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5qc29uT2JqID0ganNvbjtcbiAgICB9O1xuICAgIEJhc2UucHJvdG90eXBlLmVuZExvYWRpbmdGcm9tSnNvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5pc0xvYWRpbmdGcm9tSnNvblZhbHVlID0gZmFsc2U7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgSlNPTiBvYmplY3QgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgY3VycmVudCBTdXJ2ZXlKUyBvYmplY3QuXG4gICAgICogQHNlZSBmcm9tSlNPTlxuICAgICAqL1xuICAgIEJhc2UucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiSnNvbk9iamVjdFwiXSgpLnRvSnNvbk9iamVjdCh0aGlzKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEFzc2lnbnMgYSBuZXcgY29uZmlndXJhdGlvbiB0byB0aGUgY3VycmVudCBTdXJ2ZXlKUyBvYmplY3QuIFRoaXMgY29uZmlndXJhdGlvbiBpcyB0YWtlbiBmcm9tIGEgcGFzc2VkIEpTT04gb2JqZWN0LlxuICAgICAqXG4gICAgICogVGhlIEpTT04gb2JqZWN0IHNob3VsZCBjb250YWluIG9ubHkgc2VyaWFsaXphYmxlIHByb3BlcnRpZXMgb2YgdGhpcyBTdXJ2ZXlKUyBvYmplY3QuIEV2ZW50IGhhbmRsZXJzIGFuZCBwcm9wZXJ0aWVzIHRoYXQgZG8gbm90IGJlbG9uZyB0byB0aGUgU3VydmV5SlMgb2JqZWN0IGFyZSBpZ25vcmVkLlxuICAgICAqXG4gICAgICogQHBhcmFtIGpzb24gQSBKU09OIG9iamVjdCB3aXRoIHByb3BlcnRpZXMgdGhhdCB5b3Ugd2FudCB0byBhcHBseSB0byB0aGUgY3VycmVudCBTdXJ2ZXlKUyBvYmplY3QuXG4gICAgICogQHNlZSB0b0pTT05cbiAgICAgKi9cbiAgICBCYXNlLnByb3RvdHlwZS5mcm9tSlNPTiA9IGZ1bmN0aW9uIChqc29uKSB7XG4gICAgICAgIG5ldyBfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiSnNvbk9iamVjdFwiXSgpLnRvT2JqZWN0KGpzb24sIHRoaXMpO1xuICAgICAgICB0aGlzLm9uU3VydmV5TG9hZCgpO1xuICAgIH07XG4gICAgQmFzZS5wcm90b3R5cGUub25TdXJ2ZXlMb2FkID0gZnVuY3Rpb24gKCkgeyB9O1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgb2JqZWN0IHRoYXQgaGFzIHRoZSBzYW1lIHR5cGUgYW5kIHByb3BlcnRpZXMgYXMgdGhlIGN1cnJlbnQgU3VydmV5SlMgb2JqZWN0LlxuICAgICAqL1xuICAgIEJhc2UucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgY2xvbmVkT2JqID0gX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIlNlcmlhbGl6ZXJcIl0uY3JlYXRlQ2xhc3ModGhpcy5nZXRUeXBlKCkpO1xuICAgICAgICBjbG9uZWRPYmouZnJvbUpTT04odGhpcy50b0pTT04oKSk7XG4gICAgICAgIHJldHVybiBjbG9uZWRPYmo7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgYEpzb25PYmplY3RQcm9wZXJ0eWAgb2JqZWN0IHdpdGggbWV0YWRhdGEgYWJvdXQgYSBzZXJpYWxpemFibGUgcHJvcGVydHkgdGhhdCBiZWxvbmdzIHRvIHRoZSBjdXJyZW50IFN1cnZleUpTIG9iamVjdC5cbiAgICAgKlxuICAgICAqIElmIHRoZSBwcm9wZXJ0eSBpcyBub3QgZm91bmQsIHRoaXMgbWV0aG9kIHJldHVybnMgYG51bGxgLlxuICAgICAqIEBwYXJhbSBwcm9wTmFtZSBBIHByb3BlcnR5IG5hbWUuXG4gICAgICovXG4gICAgQmFzZS5wcm90b3R5cGUuZ2V0UHJvcGVydHlCeU5hbWUgPSBmdW5jdGlvbiAocHJvcE5hbWUpIHtcbiAgICAgICAgdmFyIHR5cGUgPSB0aGlzLmdldFR5cGUoKTtcbiAgICAgICAgaWYgKCF0aGlzLmNsYXNzTWV0YURhdGEgfHwgdGhpcy5jbGFzc01ldGFEYXRhLm5hbWUgIT09IHR5cGUpIHtcbiAgICAgICAgICAgIHRoaXMuY2xhc3NNZXRhRGF0YSA9IF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJTZXJpYWxpemVyXCJdLmZpbmRDbGFzcyh0eXBlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gISF0aGlzLmNsYXNzTWV0YURhdGEgPyB0aGlzLmNsYXNzTWV0YURhdGEuZmluZFByb3BlcnR5KHByb3BOYW1lKSA6IG51bGw7XG4gICAgfTtcbiAgICBCYXNlLnByb3RvdHlwZS5pc1Byb3BlcnR5VmlzaWJsZSA9IGZ1bmN0aW9uIChwcm9wTmFtZSkge1xuICAgICAgICB2YXIgcHJvcCA9IHRoaXMuZ2V0UHJvcGVydHlCeU5hbWUocHJvcE5hbWUpO1xuICAgICAgICByZXR1cm4gISFwcm9wID8gcHJvcC5pc1Zpc2libGUoXCJcIiwgdGhpcykgOiBmYWxzZTtcbiAgICB9O1xuICAgIEJhc2UuY3JlYXRlUHJvZ3Jlc3NJbmZvID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcXVlc3Rpb25Db3VudDogMCxcbiAgICAgICAgICAgIGFuc3dlcmVkUXVlc3Rpb25Db3VudDogMCxcbiAgICAgICAgICAgIHJlcXVpcmVkUXVlc3Rpb25Db3VudDogMCxcbiAgICAgICAgICAgIHJlcXVpcmVkQW5zd2VyZWRRdWVzdGlvbkNvdW50OiAwLFxuICAgICAgICB9O1xuICAgIH07XG4gICAgQmFzZS5wcm90b3R5cGUuZ2V0UHJvZ3Jlc3NJbmZvID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gQmFzZS5jcmVhdGVQcm9ncmVzc0luZm8oKTtcbiAgICB9O1xuICAgIEJhc2UucHJvdG90eXBlLmxvY2FsZUNoYW5nZWQgPSBmdW5jdGlvbiAoKSB7IH07XG4gICAgQmFzZS5wcm90b3R5cGUubG9jU3Ryc0NoYW5nZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghIXRoaXMuYXJyYXlzSW5mbykge1xuICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHRoaXMuYXJyYXlzSW5mbykge1xuICAgICAgICAgICAgICAgIHZhciBpdGVtID0gdGhpcy5hcnJheXNJbmZvW2tleV07XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0gJiYgaXRlbS5pc0l0ZW1WYWx1ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFyciA9IHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShrZXkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYXJyICYmICEhQmFzZS5pdGVtVmFsdWVMb2NTdHJDaGFuZ2VkKVxuICAgICAgICAgICAgICAgICAgICAgICAgQmFzZS5pdGVtVmFsdWVMb2NTdHJDaGFuZ2VkKGFycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghIXRoaXMubG9jYWxpemFibGVTdHJpbmdzKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5sb2NhbGl6YWJsZVN0cmluZ3MpIHtcbiAgICAgICAgICAgICAgICB2YXIgaXRlbSA9IHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoa2V5KTtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbSlcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5zdHJDaGFuZ2VkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIGEgcHJvcGVydHkgd2l0aCBhIHNwZWNpZmllZCBuYW1lLlxuICAgICAqXG4gICAgICogSWYgdGhlIHByb3BlcnR5IGlzIG5vdCBmb3VuZCBvciBkb2VzIG5vdCBoYXZlIGEgdmFsdWUsIHRoaXMgbWV0aG9kIHJldHVybnMgZWl0aGVyIGB1bmRlZmluZWRgLCBgZGVmYXVsdFZhbHVlYCBzcGVjaWZpZWQgaW4gdGhlIHByb3BlcnR5IGNvbmZpZ3VyYXRpb24sIG9yIGEgdmFsdWUgcGFzc2VkIGFzIHRoZSBgZGVmYXVsdFZhbHVlYCBwYXJhbWV0ZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbmFtZSBBIHByb3BlcnR5IG5hbWUuXG4gICAgICogQHBhcmFtIGRlZmF1bHRWYWx1ZSAoT3B0aW9uYWwpIEEgdmFsdWUgdG8gcmV0dXJuIGlmIHRoZSBwcm9wZXJ0eSBpcyBub3QgZm91bmQgb3IgZG9lcyBub3QgaGF2ZSBhIHZhbHVlLlxuICAgICAqL1xuICAgIEJhc2UucHJvdG90eXBlLmdldFByb3BlcnR5VmFsdWUgPSBmdW5jdGlvbiAobmFtZSwgZGVmYXVsdFZhbHVlKSB7XG4gICAgICAgIGlmIChkZWZhdWx0VmFsdWUgPT09IHZvaWQgMCkgeyBkZWZhdWx0VmFsdWUgPSBudWxsOyB9XG4gICAgICAgIHZhciByZXMgPSB0aGlzLmdldFByb3BlcnR5VmFsdWVXaXRob3V0RGVmYXVsdChuYW1lKTtcbiAgICAgICAgaWYgKHRoaXMuaXNQcm9wZXJ0eUVtcHR5KHJlcykpIHtcbiAgICAgICAgICAgIHZhciBsb2NTdHIgPSB0aGlzLmxvY2FsaXphYmxlU3RyaW5ncyA/IHRoaXMubG9jYWxpemFibGVTdHJpbmdzW25hbWVdIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKGxvY1N0cilcbiAgICAgICAgICAgICAgICByZXR1cm4gbG9jU3RyLnRleHQ7XG4gICAgICAgICAgICBpZiAoZGVmYXVsdFZhbHVlICE9PSBudWxsICYmIGRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgICAgICAgICB2YXIgcHJvcERlZmF1bHRWYWx1ZSA9IHRoaXMuZ2V0RGVmYXVsdFByb3BlcnR5VmFsdWUobmFtZSk7XG4gICAgICAgICAgICBpZiAocHJvcERlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHJldHVybiBwcm9wRGVmYXVsdFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfTtcbiAgICBCYXNlLnByb3RvdHlwZS5nZXREZWZhdWx0UHJvcGVydHlWYWx1ZSA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIHZhciBwcm9wID0gdGhpcy5nZXRQcm9wZXJ0eUJ5TmFtZShuYW1lKTtcbiAgICAgICAgaWYgKCFwcm9wIHx8IHByb3AuaXNDdXN0b20gJiYgdGhpcy5pc0NyZWF0aW5nKVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgdmFyIGRWYWx1ZSA9IHByb3AuZGVmYXVsdFZhbHVlO1xuICAgICAgICBpZiAoIXRoaXMuaXNQcm9wZXJ0eUVtcHR5KGRWYWx1ZSkgJiYgIUFycmF5LmlzQXJyYXkoZFZhbHVlKSlcbiAgICAgICAgICAgIHJldHVybiBkVmFsdWU7XG4gICAgICAgIHZhciBsb2NTdHIgPSB0aGlzLmxvY2FsaXphYmxlU3RyaW5ncyA/IHRoaXMubG9jYWxpemFibGVTdHJpbmdzW25hbWVdIDogdW5kZWZpbmVkO1xuICAgICAgICBpZiAobG9jU3RyICYmIGxvY1N0ci5sb2NhbGl6YXRpb25OYW1lKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemF0aW9uU3RyaW5nKGxvY1N0ci5sb2NhbGl6YXRpb25OYW1lKTtcbiAgICAgICAgaWYgKHByb3AudHlwZSA9PSBcImJvb2xlYW5cIiB8fCBwcm9wLnR5cGUgPT0gXCJzd2l0Y2hcIilcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKHByb3AuaXNDdXN0b20gJiYgISFwcm9wLm9uR2V0VmFsdWUpXG4gICAgICAgICAgICByZXR1cm4gcHJvcC5vbkdldFZhbHVlKHRoaXMpO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH07XG4gICAgQmFzZS5wcm90b3R5cGUuaGFzRGVmYXVsdFByb3BlcnR5VmFsdWUgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXREZWZhdWx0UHJvcGVydHlWYWx1ZShuYW1lKSAhPT0gdW5kZWZpbmVkO1xuICAgIH07XG4gICAgQmFzZS5wcm90b3R5cGUucmVzZXRQcm9wZXJ0eVZhbHVlID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgdmFyIGxvY1N0ciA9IHRoaXMubG9jYWxpemFibGVTdHJpbmdzID8gdGhpcy5sb2NhbGl6YWJsZVN0cmluZ3NbbmFtZV0gOiB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChsb2NTdHIpIHtcbiAgICAgICAgICAgIGxvY1N0ci5jbGVhckxvY2FsZSgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKG5hbWUsIHVuZGVmaW5lZCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEJhc2UucHJvdG90eXBlLmdldFByb3BlcnR5VmFsdWVXaXRob3V0RGVmYXVsdCA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWVDb3JlKHRoaXMucHJvcGVydHlIYXNoLCBuYW1lKTtcbiAgICB9O1xuICAgIEJhc2UucHJvdG90eXBlLmdldFByb3BlcnR5VmFsdWVDb3JlID0gZnVuY3Rpb24gKHByb3BlcnRpZXNIYXNoLCBuYW1lKSB7XG4gICAgICAgIGlmICghdGhpcy5pc0xvYWRpbmdGcm9tSnNvbikge1xuICAgICAgICAgICAgQmFzZS5jb2xsZWN0RGVwZW5kZW5jeSh0aGlzLCBuYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5nZXRQcm9wZXJ0eVZhbHVlQ29yZUhhbmRsZXIpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlQ29yZUhhbmRsZXIocHJvcGVydGllc0hhc2gsIG5hbWUpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICByZXR1cm4gcHJvcGVydGllc0hhc2hbbmFtZV07XG4gICAgfTtcbiAgICBCYXNlLnByb3RvdHlwZS5nZVZhbHVlRnJvbUhhc2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BlcnR5SGFzaFtcInZhbHVlXCJdO1xuICAgIH07XG4gICAgQmFzZS5wcm90b3R5cGUuc2V0UHJvcGVydHlWYWx1ZUNvcmUgPSBmdW5jdGlvbiAocHJvcGVydGllc0hhc2gsIG5hbWUsIHZhbCkge1xuICAgICAgICBpZiAodGhpcy5zZXRQcm9wZXJ0eVZhbHVlQ29yZUhhbmRsZXIpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5pc0Rpc3Bvc2VkVmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWVDb3JlSGFuZGxlcihwcm9wZXJ0aWVzSGFzaCwgbmFtZSwgdmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIF9jb25zb2xlX3dhcm5pbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bXCJDb25zb2xlV2FybmluZ3NcIl0uZGlzcG9zZWRPYmplY3RDaGFuZ2VkUHJvcGVydHkobmFtZSwgdGhpcy5nZXRUeXBlKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHByb3BlcnRpZXNIYXNoW25hbWVdID0gdmFsO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJhc2UucHJvdG90eXBlLCBcImlzRWRpdGluZ1N1cnZleUVsZW1lbnRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBzdXJ2ZXkgPSB0aGlzLmdldFN1cnZleSgpO1xuICAgICAgICAgICAgcmV0dXJuICEhc3VydmV5ICYmIHN1cnZleS5pc0VkaXRpbmdTdXJ2ZXlFbGVtZW50O1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgQmFzZS5wcm90b3R5cGUuaXRlcmF0ZVByb3BlcnRpZXNIYXNoID0gZnVuY3Rpb24gKGZ1bmMpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIGtleXMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHRoaXMucHJvcGVydHlIYXNoKSB7XG4gICAgICAgICAgICBpZiAoa2V5ID09PSBcInZhbHVlXCIgJiZcbiAgICAgICAgICAgICAgICB0aGlzLmlzRWRpdGluZ1N1cnZleUVsZW1lbnQgJiZcbiAgICAgICAgICAgICAgICBBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgICAgIH1cbiAgICAgICAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIGZ1bmMoX3RoaXMucHJvcGVydHlIYXNoLCBrZXkpOyB9KTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEFzc2lnbnMgYSBuZXcgdmFsdWUgdG8gYSBzcGVjaWZpZWQgcHJvcGVydHkuXG4gICAgICogQHBhcmFtIG5hbWUgQSBwcm9wZXJ0eSBuYW1lLlxuICAgICAqIEBwYXJhbSB2YWwgQSBuZXcgdmFsdWUgZm9yIHRoZSBwcm9wZXJ0eS5cbiAgICAgKi9cbiAgICBCYXNlLnByb3RvdHlwZS5zZXRQcm9wZXJ0eVZhbHVlID0gZnVuY3Rpb24gKG5hbWUsIHZhbCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNMb2FkaW5nRnJvbUpzb24pIHtcbiAgICAgICAgICAgIHZhciBwcm9wID0gdGhpcy5nZXRQcm9wZXJ0eUJ5TmFtZShuYW1lKTtcbiAgICAgICAgICAgIGlmICghIXByb3ApIHtcbiAgICAgICAgICAgICAgICB2YWwgPSBwcm9wLnNldHRpbmdWYWx1ZSh0aGlzLCB2YWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHZhciBvbGRWYWx1ZSA9IHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShuYW1lKTtcbiAgICAgICAgaWYgKG9sZFZhbHVlICYmXG4gICAgICAgICAgICBBcnJheS5pc0FycmF5KG9sZFZhbHVlKSAmJlxuICAgICAgICAgICAgISF0aGlzLmFycmF5c0luZm8gJiZcbiAgICAgICAgICAgICghdmFsIHx8IEFycmF5LmlzQXJyYXkodmFsKSkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzVHdvVmFsdWVFcXVhbHMob2xkVmFsdWUsIHZhbCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdGhpcy5zZXRBcnJheVByb3BlcnR5RGlyZWN0bHkobmFtZSwgdmFsKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZURpcmVjdGx5KG5hbWUsIHZhbCk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNEaXNwb3NlZFZhbHVlICYmICF0aGlzLmlzVHdvVmFsdWVFcXVhbHMob2xkVmFsdWUsIHZhbCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BlcnR5VmFsdWVDaGFuZ2VkKG5hbWUsIG9sZFZhbHVlLCB2YWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBCYXNlLnByb3RvdHlwZS5zZXRBcnJheVByb3BlcnR5RGlyZWN0bHkgPSBmdW5jdGlvbiAobmFtZSwgdmFsLCBzZW5kTm90aWZpY2F0aW9uKSB7XG4gICAgICAgIGlmIChzZW5kTm90aWZpY2F0aW9uID09PSB2b2lkIDApIHsgc2VuZE5vdGlmaWNhdGlvbiA9IHRydWU7IH1cbiAgICAgICAgdmFyIGFycmF5SW5mbyA9IHRoaXMuYXJyYXlzSW5mb1tuYW1lXTtcbiAgICAgICAgdGhpcy5zZXRBcnJheShuYW1lLCB0aGlzLmdldFByb3BlcnR5VmFsdWUobmFtZSksIHZhbCwgYXJyYXlJbmZvID8gYXJyYXlJbmZvLmlzSXRlbVZhbHVlcyA6IGZhbHNlLCBhcnJheUluZm8gPyBzZW5kTm90aWZpY2F0aW9uICYmIGFycmF5SW5mby5vblB1c2ggOiBudWxsKTtcbiAgICB9O1xuICAgIEJhc2UucHJvdG90eXBlLnNldFByb3BlcnR5VmFsdWVEaXJlY3RseSA9IGZ1bmN0aW9uIChuYW1lLCB2YWwpIHtcbiAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlQ29yZSh0aGlzLnByb3BlcnR5SGFzaCwgbmFtZSwgdmFsKTtcbiAgICB9O1xuICAgIEJhc2UucHJvdG90eXBlLmNsZWFyUHJvcGVydHlWYWx1ZSA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZUNvcmUodGhpcy5wcm9wZXJ0eUhhc2gsIG5hbWUsIG51bGwpO1xuICAgICAgICBkZWxldGUgdGhpcy5wcm9wZXJ0eUhhc2hbbmFtZV07XG4gICAgfTtcbiAgICBCYXNlLnByb3RvdHlwZS5vblByb3BlcnR5VmFsdWVDaGFuZ2VkQ2FsbGJhY2sgPSBmdW5jdGlvbiAobmFtZSwgb2xkVmFsdWUsIG5ld1ZhbHVlLCBzZW5kZXIsIGFycmF5Q2hhbmdlcykgeyB9O1xuICAgIEJhc2UucHJvdG90eXBlLml0ZW1WYWx1ZVByb3BlcnR5Q2hhbmdlZCA9IGZ1bmN0aW9uIChpdGVtLCBuYW1lLCBvbGRWYWx1ZSwgbmV3VmFsdWUpIHtcbiAgICAgICAgdGhpcy5vbkl0ZW1WYWx1ZVByb3BlcnR5Q2hhbmdlZC5maXJlKHRoaXMsIHtcbiAgICAgICAgICAgIG9iajogaXRlbSxcbiAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICBvbGRWYWx1ZTogb2xkVmFsdWUsXG4gICAgICAgICAgICBuZXdWYWx1ZTogbmV3VmFsdWUsXG4gICAgICAgICAgICBwcm9wZXJ0eU5hbWU6IGl0ZW0ub3duZXJQcm9wZXJ0eU5hbWUsXG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgQmFzZS5wcm90b3R5cGUub25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZCA9IGZ1bmN0aW9uIChuYW1lLCBvbGRWYWx1ZSwgbmV3VmFsdWUpIHsgfTtcbiAgICBCYXNlLnByb3RvdHlwZS5wcm9wZXJ0eVZhbHVlQ2hhbmdlZCA9IGZ1bmN0aW9uIChuYW1lLCBvbGRWYWx1ZSwgbmV3VmFsdWUsIGFycmF5Q2hhbmdlcywgdGFyZ2V0KSB7XG4gICAgICAgIGlmICh0aGlzLmlzTG9hZGluZ0Zyb21Kc29uKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLnVwZGF0ZUJpbmRpbmdzKG5hbWUsIG5ld1ZhbHVlKTtcbiAgICAgICAgdGhpcy5vblByb3BlcnR5VmFsdWVDaGFuZ2VkKG5hbWUsIG9sZFZhbHVlLCBuZXdWYWx1ZSk7XG4gICAgICAgIHRoaXMub25Qcm9wZXJ0eUNoYW5nZWQuZmlyZSh0aGlzLCB7XG4gICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgb2xkVmFsdWU6IG9sZFZhbHVlLFxuICAgICAgICAgICAgbmV3VmFsdWU6IG5ld1ZhbHVlLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5kb1Byb3BlcnR5VmFsdWVDaGFuZ2VkQ2FsbGJhY2sobmFtZSwgb2xkVmFsdWUsIG5ld1ZhbHVlLCBhcnJheUNoYW5nZXMsIHRoaXMpO1xuICAgICAgICB0aGlzLmNoZWNrQ29uZGl0aW9uUHJvcGVydHlDaGFuZ2VkKG5hbWUpO1xuICAgICAgICBpZiAoIXRoaXMub25Qcm9wQ2hhbmdlRnVuY3Rpb25zKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMub25Qcm9wQ2hhbmdlRnVuY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5vblByb3BDaGFuZ2VGdW5jdGlvbnNbaV0ubmFtZSA9PSBuYW1lKVxuICAgICAgICAgICAgICAgIHRoaXMub25Qcm9wQ2hhbmdlRnVuY3Rpb25zW2ldLmZ1bmMobmV3VmFsdWUpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBCYXNlLnByb3RvdHlwZS5vbkJpbmRpbmdDaGFuZ2VkID0gZnVuY3Rpb24gKG9sZFZhbHVlLCBuZXdWYWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5pc0xvYWRpbmdGcm9tSnNvbilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5kb1Byb3BlcnR5VmFsdWVDaGFuZ2VkQ2FsbGJhY2soXCJiaW5kaW5nc1wiLCBvbGRWYWx1ZSwgbmV3VmFsdWUpO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJhc2UucHJvdG90eXBlLCBcImlzSW50ZXJuYWxcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIEJhc2UucHJvdG90eXBlLmRvUHJvcGVydHlWYWx1ZUNoYW5nZWRDYWxsYmFjayA9IGZ1bmN0aW9uIChuYW1lLCBvbGRWYWx1ZSwgbmV3VmFsdWUsIGFycmF5Q2hhbmdlcywgdGFyZ2V0KSB7XG4gICAgICAgIGlmICh0aGlzLmlzSW50ZXJuYWwpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmICghdGFyZ2V0KVxuICAgICAgICAgICAgdGFyZ2V0ID0gdGhpcztcbiAgICAgICAgdmFyIG5vdGlmaWVyID0gdGhpcy5nZXRTdXJ2ZXkoKTtcbiAgICAgICAgaWYgKCFub3RpZmllcilcbiAgICAgICAgICAgIG5vdGlmaWVyID0gdGhpcztcbiAgICAgICAgaWYgKCEhbm90aWZpZXIub25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZENhbGxiYWNrKSB7XG4gICAgICAgICAgICBub3RpZmllci5vblByb3BlcnR5VmFsdWVDaGFuZ2VkQ2FsbGJhY2sobmFtZSwgb2xkVmFsdWUsIG5ld1ZhbHVlLCB0YXJnZXQsIGFycmF5Q2hhbmdlcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vdGlmaWVyICE9PSB0aGlzICYmICEhdGhpcy5vblByb3BlcnR5VmFsdWVDaGFuZ2VkQ2FsbGJhY2spIHtcbiAgICAgICAgICAgIHRoaXMub25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZENhbGxiYWNrKG5hbWUsIG9sZFZhbHVlLCBuZXdWYWx1ZSwgdGFyZ2V0LCBhcnJheUNoYW5nZXMpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBCYXNlLnByb3RvdHlwZS5hZGRFeHByZXNzaW9uUHJvcGVydHkgPSBmdW5jdGlvbiAobmFtZSwgb25FeGVjdXRlLCBjYW5SdW4pIHtcbiAgICAgICAgaWYgKCF0aGlzLmV4cHJlc3Npb25JbmZvKSB7XG4gICAgICAgICAgICB0aGlzLmV4cHJlc3Npb25JbmZvID0ge307XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5leHByZXNzaW9uSW5mb1tuYW1lXSA9IHsgb25FeGVjdXRlOiBvbkV4ZWN1dGUsIGNhblJ1bjogY2FuUnVuIH07XG4gICAgfTtcbiAgICBCYXNlLnByb3RvdHlwZS5nZXREYXRhRmlsdGVyZWRWYWx1ZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9O1xuICAgIEJhc2UucHJvdG90eXBlLmdldERhdGFGaWx0ZXJlZFByb3BlcnRpZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9O1xuICAgIEJhc2UucHJvdG90eXBlLnJ1bkNvbmRpdGlvbkNvcmUgPSBmdW5jdGlvbiAodmFsdWVzLCBwcm9wZXJ0aWVzKSB7XG4gICAgICAgIGlmICghdGhpcy5leHByZXNzaW9uSW5mbylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHRoaXMuZXhwcmVzc2lvbkluZm8pIHtcbiAgICAgICAgICAgIHRoaXMucnVuQ29uZGl0aW9uSXRlbUNvcmUoa2V5LCB2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBCYXNlLnByb3RvdHlwZS5jYW5SdW5Db25kaXRpb25zID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gIXRoaXMuaXNEZXNpZ25Nb2RlO1xuICAgIH07XG4gICAgQmFzZS5wcm90b3R5cGUuY2hlY2tDb25kaXRpb25Qcm9wZXJ0eUNoYW5nZWQgPSBmdW5jdGlvbiAocHJvcE5hbWUpIHtcbiAgICAgICAgaWYgKCF0aGlzLmV4cHJlc3Npb25JbmZvIHx8ICF0aGlzLmV4cHJlc3Npb25JbmZvW3Byb3BOYW1lXSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKCF0aGlzLmNhblJ1bkNvbmRpdGlvbnMoKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5ydW5Db25kaXRpb25JdGVtQ29yZShwcm9wTmFtZSwgdGhpcy5nZXREYXRhRmlsdGVyZWRWYWx1ZXMoKSwgdGhpcy5nZXREYXRhRmlsdGVyZWRQcm9wZXJ0aWVzKCkpO1xuICAgIH07XG4gICAgQmFzZS5wcm90b3R5cGUucnVuQ29uZGl0aW9uSXRlbUNvcmUgPSBmdW5jdGlvbiAocHJvcE5hbWUsIHZhbHVlcywgcHJvcGVydGllcykge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgaW5mbyA9IHRoaXMuZXhwcmVzc2lvbkluZm9bcHJvcE5hbWVdO1xuICAgICAgICB2YXIgZXhwcmVzc2lvbiA9IHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShwcm9wTmFtZSk7XG4gICAgICAgIGlmICghZXhwcmVzc2lvbilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKCEhaW5mby5jYW5SdW4gJiYgIWluZm8uY2FuUnVuKHRoaXMpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAoIWluZm8ucnVubmVyKSB7XG4gICAgICAgICAgICBpbmZvLnJ1bm5lciA9IHRoaXMuY3JlYXRlRXhwcmVzc2lvblJ1bm5lcihleHByZXNzaW9uKTtcbiAgICAgICAgICAgIGluZm8ucnVubmVyLm9uUnVuQ29tcGxldGUgPSBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgaW5mby5vbkV4ZWN1dGUoX3RoaXMsIHJlcyk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGluZm8ucnVubmVyLmV4cHJlc3Npb24gPSBleHByZXNzaW9uO1xuICAgICAgICBpbmZvLnJ1bm5lci5ydW4odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICB9O1xuICAgIEJhc2UucHJvdG90eXBlLmRvQmVmb3JlQXN5blJ1biA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgICBpZiAoIXRoaXMuYXN5bkV4cHJlc3Npb25IYXNoKVxuICAgICAgICAgICAgdGhpcy5hc3luRXhwcmVzc2lvbkhhc2ggPSBbXTtcbiAgICAgICAgdmFyIGlzQ2hhbmdlZCA9ICF0aGlzLmlzQXN5bmNFeHByZXNzaW9uUnVubmluZztcbiAgICAgICAgdGhpcy5hc3luRXhwcmVzc2lvbkhhc2hbaWRdID0gdHJ1ZTtcbiAgICAgICAgaWYgKGlzQ2hhbmdlZCkge1xuICAgICAgICAgICAgdGhpcy5vbkFzeW5jUnVubmluZ0NoYW5nZWQoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQmFzZS5wcm90b3R5cGUuZG9BZnRlckFzeW5SdW4gPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgICAgaWYgKCEhdGhpcy5hc3luRXhwcmVzc2lvbkhhc2gpIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmFzeW5FeHByZXNzaW9uSGFzaFtpZF07XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNBc3luY0V4cHJlc3Npb25SdW5uaW5nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkFzeW5jUnVubmluZ0NoYW5nZWQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgQmFzZS5wcm90b3R5cGUub25Bc3luY1J1bm5pbmdDaGFuZ2VkID0gZnVuY3Rpb24gKCkgeyB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCYXNlLnByb3RvdHlwZSwgXCJpc0FzeW5jRXhwcmVzc2lvblJ1bm5pbmdcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAhIXRoaXMuYXN5bkV4cHJlc3Npb25IYXNoICYmIE9iamVjdC5rZXlzKHRoaXMuYXN5bkV4cHJlc3Npb25IYXNoKS5sZW5ndGggPiAwO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgQmFzZS5wcm90b3R5cGUuY3JlYXRlRXhwcmVzc2lvblJ1bm5lciA9IGZ1bmN0aW9uIChleHByZXNzaW9uKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciByZXMgPSBuZXcgX2NvbmRpdGlvbnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1tcIkV4cHJlc3Npb25SdW5uZXJcIl0oZXhwcmVzc2lvbik7XG4gICAgICAgIHJlcy5vbkJlZm9yZUFzeW5jUnVuID0gZnVuY3Rpb24gKGlkKSB7IF90aGlzLmRvQmVmb3JlQXN5blJ1bihpZCk7IH07XG4gICAgICAgIHJlcy5vbkFmdGVyQXN5bmNSdW4gPSBmdW5jdGlvbiAoaWQpIHsgX3RoaXMuZG9BZnRlckFzeW5SdW4oaWQpOyB9O1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogUmVnaXN0ZXJzIGEgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIGEgcHJvcGVydHkgdmFsdWUgY2hhbmdlcy5cbiAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lcyBBbiBhcnJheSBvZiBvbmUgb3IgbXVsdGlwbGUgcHJvcGVydHkgbmFtZXMuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gb25lIG9mIHRoZSBsaXN0ZWQgcHJvcGVydGllcyBjaGFuZ2UuXG4gICAgICogQHBhcmFtIGtleSAoT3B0aW9uYWwpIEEga2V5IHRoYXQgaWRlbnRpZmllcyB0aGUgY3VycmVudCByZWdpc3RyYXRpb24uIElmIGEgZnVuY3Rpb24gZm9yIG9uZSBvZiB0aGUgcHJvcGVydGllcyBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQgd2l0aCB0aGUgc2FtZSBrZXksIHRoZSBmdW5jdGlvbiB3aWxsIGJlIG92ZXJ3cml0dGVuLiBZb3UgY2FuIGFsc28gdXNlIHRoZSBrZXkgdG8gc3Vic2VxdWVudGx5IHVucmVnaXN0ZXIgaGFuZGxlcnMuXG4gICAgICogQHNlZSB1bnJlZ2lzdGVyUHJvcGVydHlDaGFuZ2VkSGFuZGxlcnNcbiAgICAgKi9cbiAgICBCYXNlLnByb3RvdHlwZS5yZWdpc3RlclByb3BlcnR5Q2hhbmdlZEhhbmRsZXJzID0gZnVuY3Rpb24gKHByb3BlcnR5TmFtZXMsIGhhbmRsZXIsIGtleSkge1xuICAgICAgICBpZiAoa2V5ID09PSB2b2lkIDApIHsga2V5ID0gbnVsbDsgfVxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnR5TmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydHlWYWx1ZUNoYW5nZWQocHJvcGVydHlOYW1lc1tpXSwgaGFuZGxlciwga2V5KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgLyoqXG4gICAgICogVW5yZWdpc3RlcnMgdmFsdWUgY2hhbmdlIGV2ZW50IGhhbmRsZXJzIGZvciB0aGUgc3BlY2lmaWVkIHByb3BlcnRpZXMuXG4gICAgICogQHBhcmFtIHByb3BlcnR5TmFtZXMgQW4gYXJyYXkgb2Ygb25lIG9yIG11bHRpcGxlIHByb3BlcnR5IG5hbWVzLlxuICAgICAqIEBwYXJhbSBrZXkgKE9wdGlvbmFsKSBBIGtleSBvZiB0aGUgcmVnaXN0cmF0aW9uIHRoYXQgeW91IHdhbnQgdG8gY2FuY2VsLlxuICAgICAqIEBzZWUgcmVnaXN0ZXJQcm9wZXJ0eUNoYW5nZWRIYW5kbGVyc1xuICAgICAqL1xuICAgIEJhc2UucHJvdG90eXBlLnVucmVnaXN0ZXJQcm9wZXJ0eUNoYW5nZWRIYW5kbGVycyA9IGZ1bmN0aW9uIChwcm9wZXJ0eU5hbWVzLCBrZXkpIHtcbiAgICAgICAgaWYgKGtleSA9PT0gdm9pZCAwKSB7IGtleSA9IG51bGw7IH1cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0eU5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLnVuUmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydHlWYWx1ZUNoYW5nZWQocHJvcGVydHlOYW1lc1tpXSwga2V5KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQmFzZS5wcm90b3R5cGUucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydHlWYWx1ZUNoYW5nZWQgPSBmdW5jdGlvbiAobmFtZSwgZnVuYywga2V5KSB7XG4gICAgICAgIGlmIChrZXkgPT09IHZvaWQgMCkgeyBrZXkgPSBudWxsOyB9XG4gICAgICAgIGlmICghdGhpcy5vblByb3BDaGFuZ2VGdW5jdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMub25Qcm9wQ2hhbmdlRnVuY3Rpb25zID0gW107XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleSkge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm9uUHJvcENoYW5nZUZ1bmN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciBpdGVtID0gdGhpcy5vblByb3BDaGFuZ2VGdW5jdGlvbnNbaV07XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0ubmFtZSA9PSBuYW1lICYmIGl0ZW0ua2V5ID09IGtleSkge1xuICAgICAgICAgICAgICAgICAgICBpdGVtLmZ1bmMgPSBmdW5jO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMub25Qcm9wQ2hhbmdlRnVuY3Rpb25zLnB1c2goeyBuYW1lOiBuYW1lLCBmdW5jOiBmdW5jLCBrZXk6IGtleSB9KTtcbiAgICB9O1xuICAgIEJhc2UucHJvdG90eXBlLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnRpZXNWYWx1ZUNoYW5nZWQgPSBmdW5jdGlvbiAobmFtZXMsIGZ1bmMsIGtleSkge1xuICAgICAgICBpZiAoa2V5ID09PSB2b2lkIDApIHsga2V5ID0gbnVsbDsgfVxuICAgICAgICB0aGlzLnJlZ2lzdGVyUHJvcGVydHlDaGFuZ2VkSGFuZGxlcnMobmFtZXMsIGZ1bmMsIGtleSk7XG4gICAgfTtcbiAgICBCYXNlLnByb3RvdHlwZS51blJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnR5VmFsdWVDaGFuZ2VkID0gZnVuY3Rpb24gKG5hbWUsIGtleSkge1xuICAgICAgICBpZiAoa2V5ID09PSB2b2lkIDApIHsga2V5ID0gbnVsbDsgfVxuICAgICAgICBpZiAoIXRoaXMub25Qcm9wQ2hhbmdlRnVuY3Rpb25zKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMub25Qcm9wQ2hhbmdlRnVuY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgaXRlbSA9IHRoaXMub25Qcm9wQ2hhbmdlRnVuY3Rpb25zW2ldO1xuICAgICAgICAgICAgaWYgKGl0ZW0ubmFtZSA9PSBuYW1lICYmIGl0ZW0ua2V5ID09IGtleSkge1xuICAgICAgICAgICAgICAgIHRoaXMub25Qcm9wQ2hhbmdlRnVuY3Rpb25zLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEJhc2UucHJvdG90eXBlLnVuUmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydGllc1ZhbHVlQ2hhbmdlZCA9IGZ1bmN0aW9uIChuYW1lcywga2V5KSB7XG4gICAgICAgIGlmIChrZXkgPT09IHZvaWQgMCkgeyBrZXkgPSBudWxsOyB9XG4gICAgICAgIHRoaXMudW5yZWdpc3RlclByb3BlcnR5Q2hhbmdlZEhhbmRsZXJzKG5hbWVzLCBrZXkpO1xuICAgIH07XG4gICAgQmFzZS5wcm90b3R5cGUuY3JlYXRlQ3VzdG9tTG9jYWxpemFibGVPYmogPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICB2YXIgbG9jU3RyID0gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhuYW1lKTtcbiAgICAgICAgaWYgKGxvY1N0cilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhuYW1lLCB0aGlzLCBmYWxzZSwgdHJ1ZSk7XG4gICAgfTtcbiAgICBCYXNlLnByb3RvdHlwZS5nZXRMb2NhbGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBsb2NPd25lciA9IHRoaXMuZ2V0U3VydmV5KCk7XG4gICAgICAgIHJldHVybiAhIWxvY093bmVyID8gbG9jT3duZXIuZ2V0TG9jYWxlKCkgOiBcIlwiO1xuICAgIH07XG4gICAgQmFzZS5wcm90b3R5cGUuZ2V0TG9jYWxpemF0aW9uU3RyaW5nID0gZnVuY3Rpb24gKHN0ck5hbWUpIHtcbiAgICAgICAgcmV0dXJuIF9zdXJ2ZXlTdHJpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bXCJzdXJ2ZXlMb2NhbGl6YXRpb25cIl0uZ2V0U3RyaW5nKHN0ck5hbWUsIHRoaXMuZ2V0TG9jYWxlKCkpO1xuICAgIH07XG4gICAgQmFzZS5wcm90b3R5cGUuZ2V0TG9jYWxpemF0aW9uRm9ybWF0U3RyaW5nID0gZnVuY3Rpb24gKHN0ck5hbWUpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAxOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2kgLSAxXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHN0ciA9IHRoaXMuZ2V0TG9jYWxpemF0aW9uU3RyaW5nKHN0ck5hbWUpO1xuICAgICAgICBpZiAoIXN0ciB8fCAhc3RyLmZvcm1hdClcbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICByZXR1cm4gc3RyLmZvcm1hdC5hcHBseShzdHIsIGFyZ3MpO1xuICAgIH07XG4gICAgQmFzZS5wcm90b3R5cGUuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcgPSBmdW5jdGlvbiAobmFtZSwgb3duZXIsIHVzZU1hcmtEb3duLCBkZWZhdWx0U3RyKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGlmICh1c2VNYXJrRG93biA9PT0gdm9pZCAwKSB7IHVzZU1hcmtEb3duID0gZmFsc2U7IH1cbiAgICAgICAgaWYgKGRlZmF1bHRTdHIgPT09IHZvaWQgMCkgeyBkZWZhdWx0U3RyID0gZmFsc2U7IH1cbiAgICAgICAgdmFyIGxvY1N0ciA9IG5ldyBfbG9jYWxpemFibGVzdHJpbmdfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkxvY2FsaXphYmxlU3RyaW5nXCJdKG93bmVyLCB1c2VNYXJrRG93biwgbmFtZSk7XG4gICAgICAgIGlmIChkZWZhdWx0U3RyKSB7XG4gICAgICAgICAgICBsb2NTdHIubG9jYWxpemF0aW9uTmFtZSA9IGRlZmF1bHRTdHIgPT09IHRydWUgPyBuYW1lIDogZGVmYXVsdFN0cjtcbiAgICAgICAgfVxuICAgICAgICBsb2NTdHIub25TdHJDaGFuZ2VkID0gZnVuY3Rpb24gKG9sZFZhbHVlLCBuZXdWYWx1ZSkge1xuICAgICAgICAgICAgX3RoaXMucHJvcGVydHlWYWx1ZUNoYW5nZWQobmFtZSwgb2xkVmFsdWUsIG5ld1ZhbHVlKTtcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKCF0aGlzLmxvY2FsaXphYmxlU3RyaW5ncykge1xuICAgICAgICAgICAgdGhpcy5sb2NhbGl6YWJsZVN0cmluZ3MgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxvY2FsaXphYmxlU3RyaW5nc1tuYW1lXSA9IGxvY1N0cjtcbiAgICAgICAgdmFyIHByb3AgPSB0aGlzLmdldFByb3BlcnR5QnlOYW1lKG5hbWUpO1xuICAgICAgICBsb2NTdHIuZGlzYWJsZUxvY2FsaXphdGlvbiA9IHByb3AgJiYgcHJvcC5pc0xvY2FsaXphYmxlID09PSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGxvY1N0cjtcbiAgICB9O1xuICAgIEJhc2UucHJvdG90eXBlLmdldExvY2FsaXphYmxlU3RyaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5sb2NhbGl6YWJsZVN0cmluZ3MgPyB0aGlzLmxvY2FsaXphYmxlU3RyaW5nc1tuYW1lXSA6IG51bGw7XG4gICAgfTtcbiAgICBCYXNlLnByb3RvdHlwZS5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQgPSBmdW5jdGlvbiAobmFtZSwgZGVmYXVsdFN0cikge1xuICAgICAgICBpZiAoZGVmYXVsdFN0ciA9PT0gdm9pZCAwKSB7IGRlZmF1bHRTdHIgPSBcIlwiOyB9XG4gICAgICAgIEJhc2UuY29sbGVjdERlcGVuZGVuY3kodGhpcywgbmFtZSk7XG4gICAgICAgIHZhciBsb2NTdHIgPSB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKG5hbWUpO1xuICAgICAgICBpZiAoIWxvY1N0cilcbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICB2YXIgcmVzID0gbG9jU3RyLnRleHQ7XG4gICAgICAgIHJldHVybiByZXMgPyByZXMgOiBkZWZhdWx0U3RyO1xuICAgIH07XG4gICAgQmFzZS5wcm90b3R5cGUuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0ID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7XG4gICAgICAgIHZhciBsb2NTdHIgPSB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKG5hbWUpO1xuICAgICAgICBpZiAoIWxvY1N0cilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIG9sZFZhbHVlID0gbG9jU3RyLnRleHQ7XG4gICAgICAgIGlmIChvbGRWYWx1ZSAhPSB2YWx1ZSkge1xuICAgICAgICAgICAgbG9jU3RyLnRleHQgPSB2YWx1ZTtcbiAgICAgICAgICAgIC8vIHRoaXMucHJvcGVydHlWYWx1ZUNoYW5nZWQobmFtZSwgb2xkVmFsdWUsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQmFzZS5wcm90b3R5cGUuYWRkVXNlZExvY2FsZXMgPSBmdW5jdGlvbiAobG9jYWxlcykge1xuICAgICAgICBpZiAoISF0aGlzLmxvY2FsaXphYmxlU3RyaW5ncykge1xuICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHRoaXMubG9jYWxpemFibGVTdHJpbmdzKSB7XG4gICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0pXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuQWRkTG9jU3RyaW5nVG9Vc2VkTG9jYWxlcyhpdGVtLCBsb2NhbGVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoISF0aGlzLmFycmF5c0luZm8pIHtcbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLmFycmF5c0luZm8pIHtcbiAgICAgICAgICAgICAgICB2YXIgaXRlbXMgPSB0aGlzLmdldFByb3BlcnR5VmFsdWUoa2V5KTtcbiAgICAgICAgICAgICAgICBpZiAoIWl0ZW1zIHx8ICFpdGVtcy5sZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSBpdGVtc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0gJiYgaXRlbS5hZGRVc2VkTG9jYWxlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5hZGRVc2VkTG9jYWxlcyhsb2NhbGVzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgQmFzZS5wcm90b3R5cGUuc2VhcmNoVGV4dCA9IGZ1bmN0aW9uICh0ZXh0LCBmb3VuZGVkKSB7XG4gICAgICAgIHZhciBzdHJzID0gW107XG4gICAgICAgIHRoaXMuZ2V0U2VhcmNoYWJsZUxvY2FsaXplZFN0cmluZ3Moc3Rycyk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3Rycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHN0cnNbaV0uc2V0RmluZFRleHQodGV4dCkpIHtcbiAgICAgICAgICAgICAgICBmb3VuZGVkLnB1c2goeyBlbGVtZW50OiB0aGlzLCBzdHI6IHN0cnNbaV0gfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEJhc2UucHJvdG90eXBlLmdldFNlYXJjaGFibGVMb2NhbGl6ZWRTdHJpbmdzID0gZnVuY3Rpb24gKGFycikge1xuICAgICAgICBpZiAoISF0aGlzLmxvY2FsaXphYmxlU3RyaW5ncykge1xuICAgICAgICAgICAgdmFyIGtleXNfMSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5nZXRTZWFyY2hhYmxlTG9jS2V5cyhrZXlzXzEpO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzXzEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgaXRlbSA9IHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoa2V5c18xW2ldKTtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbSlcbiAgICAgICAgICAgICAgICAgICAgYXJyLnB1c2goaXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmFycmF5c0luZm8pXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciBrZXlzID0gW107XG4gICAgICAgIHRoaXMuZ2V0U2VhcmNoYWJsZUl0ZW1WYWx1ZUtleXMoa2V5cyk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGl0ZW1zID0gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKGtleXNbaV0pO1xuICAgICAgICAgICAgaWYgKCFpdGVtcylcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgaXRlbXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICBhcnIucHVzaChpdGVtc1tqXS5sb2NUZXh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgQmFzZS5wcm90b3R5cGUuZ2V0U2VhcmNoYWJsZUxvY0tleXMgPSBmdW5jdGlvbiAoa2V5cykgeyB9O1xuICAgIEJhc2UucHJvdG90eXBlLmdldFNlYXJjaGFibGVJdGVtVmFsdWVLZXlzID0gZnVuY3Rpb24gKGtleXMpIHsgfTtcbiAgICBCYXNlLnByb3RvdHlwZS5BZGRMb2NTdHJpbmdUb1VzZWRMb2NhbGVzID0gZnVuY3Rpb24gKGxvY1N0ciwgbG9jYWxlcykge1xuICAgICAgICB2YXIgbG9jcyA9IGxvY1N0ci5nZXRMb2NhbGVzKCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbG9jcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGxvY2FsZXMuaW5kZXhPZihsb2NzW2ldKSA8IDApIHtcbiAgICAgICAgICAgICAgICBsb2NhbGVzLnB1c2gobG9jc1tpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEJhc2UucHJvdG90eXBlLmNyZWF0ZUl0ZW1WYWx1ZXMgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgIHZhciByZXN1bHQgPSB0aGlzLmNyZWF0ZU5ld0FycmF5KG5hbWUsIGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgICBpdGVtLmxvY093bmVyID0gc2VsZjtcbiAgICAgICAgICAgIGl0ZW0ub3duZXJQcm9wZXJ0eU5hbWUgPSBuYW1lO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBpdGVtLmdldFN1cnZleSA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICB2YXIgc3VydmV5ID0gaXRlbS5nZXRTdXJ2ZXkoKTtcbiAgICAgICAgICAgICAgICBpZiAoISFzdXJ2ZXkgJiYgdHlwZW9mIHN1cnZleS5tYWtlUmVhY3RpdmUgPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1cnZleS5tYWtlUmVhY3RpdmUoaXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5hcnJheXNJbmZvW25hbWVdLmlzSXRlbVZhbHVlcyA9IHRydWU7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgICBCYXNlLnByb3RvdHlwZS5ub3RpZnlBcnJheUNoYW5nZWQgPSBmdW5jdGlvbiAoYXIsIGFycmF5Q2hhbmdlcykge1xuICAgICAgICAhIWFyLm9uQXJyYXlDaGFuZ2VkICYmIGFyLm9uQXJyYXlDaGFuZ2VkKGFycmF5Q2hhbmdlcyk7XG4gICAgfTtcbiAgICBCYXNlLnByb3RvdHlwZS5jcmVhdGVOZXdBcnJheUNvcmUgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICB2YXIgcmVzID0gbnVsbDtcbiAgICAgICAgaWYgKCEhdGhpcy5jcmVhdGVBcnJheUNvcmVIYW5kbGVyKSB7XG4gICAgICAgICAgICByZXMgPSB0aGlzLmNyZWF0ZUFycmF5Q29yZUhhbmRsZXIodGhpcy5wcm9wZXJ0eUhhc2gsIG5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghcmVzKSB7XG4gICAgICAgICAgICByZXMgPSBuZXcgQXJyYXkoKTtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZUNvcmUodGhpcy5wcm9wZXJ0eUhhc2gsIG5hbWUsIHJlcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9O1xuICAgIEJhc2UucHJvdG90eXBlLmVuc3VyZUFycmF5ID0gZnVuY3Rpb24gKG5hbWUsIG9uUHVzaCwgb25SZW1vdmUpIHtcbiAgICAgICAgaWYgKG9uUHVzaCA9PT0gdm9pZCAwKSB7IG9uUHVzaCA9IG51bGw7IH1cbiAgICAgICAgaWYgKG9uUmVtb3ZlID09PSB2b2lkIDApIHsgb25SZW1vdmUgPSBudWxsOyB9XG4gICAgICAgIGlmICh0aGlzLmFycmF5c0luZm8gJiYgdGhpcy5hcnJheXNJbmZvW25hbWVdKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlTmV3QXJyYXkobmFtZSwgb25QdXNoLCBvblJlbW92ZSk7XG4gICAgfTtcbiAgICBCYXNlLnByb3RvdHlwZS5jcmVhdGVOZXdBcnJheSA9IGZ1bmN0aW9uIChuYW1lLCBvblB1c2gsIG9uUmVtb3ZlKSB7XG4gICAgICAgIGlmIChvblB1c2ggPT09IHZvaWQgMCkgeyBvblB1c2ggPSBudWxsOyB9XG4gICAgICAgIGlmIChvblJlbW92ZSA9PT0gdm9pZCAwKSB7IG9uUmVtb3ZlID0gbnVsbDsgfVxuICAgICAgICB2YXIgbmV3QXJyYXkgPSB0aGlzLmNyZWF0ZU5ld0FycmF5Q29yZShuYW1lKTtcbiAgICAgICAgaWYgKCF0aGlzLmFycmF5c0luZm8pIHtcbiAgICAgICAgICAgIHRoaXMuYXJyYXlzSW5mbyA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYXJyYXlzSW5mb1tuYW1lXSA9IHsgb25QdXNoOiBvblB1c2gsIGlzSXRlbVZhbHVlczogZmFsc2UgfTtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgICBuZXdBcnJheS5wdXNoID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG5ld0FycmF5KS5wdXNoLmNhbGwobmV3QXJyYXksIHZhbHVlKTtcbiAgICAgICAgICAgIGlmICghc2VsZi5pc0Rpc3Bvc2VkVmFsdWUpIHtcbiAgICAgICAgICAgICAgICBpZiAob25QdXNoKVxuICAgICAgICAgICAgICAgICAgICBvblB1c2godmFsdWUsIG5ld0FycmF5Lmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgICAgIHZhciBhcnJheUNoYW5nZXMgPSBuZXcgQXJyYXlDaGFuZ2VzKG5ld0FycmF5Lmxlbmd0aCAtIDEsIDAsIFt2YWx1ZV0sIFtdKTtcbiAgICAgICAgICAgICAgICBzZWxmLnByb3BlcnR5VmFsdWVDaGFuZ2VkKG5hbWUsIG5ld0FycmF5LCBuZXdBcnJheSwgYXJyYXlDaGFuZ2VzKTtcbiAgICAgICAgICAgICAgICBzZWxmLm5vdGlmeUFycmF5Q2hhbmdlZChuZXdBcnJheSwgYXJyYXlDaGFuZ2VzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH07XG4gICAgICAgIG5ld0FycmF5LnNoaWZ0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihuZXdBcnJheSkuc2hpZnQuY2FsbChuZXdBcnJheSk7XG4gICAgICAgICAgICBpZiAoIXNlbGYuaXNEaXNwb3NlZFZhbHVlICYmIHJlc3VsdCkge1xuICAgICAgICAgICAgICAgIGlmIChvblJlbW92ZSlcbiAgICAgICAgICAgICAgICAgICAgb25SZW1vdmUocmVzdWx0KTtcbiAgICAgICAgICAgICAgICB2YXIgYXJyYXlDaGFuZ2VzID0gbmV3IEFycmF5Q2hhbmdlcyhuZXdBcnJheS5sZW5ndGggLSAxLCAxLCBbXSwgW10pO1xuICAgICAgICAgICAgICAgIHNlbGYucHJvcGVydHlWYWx1ZUNoYW5nZWQobmFtZSwgbmV3QXJyYXksIG5ld0FycmF5LCBhcnJheUNoYW5nZXMpO1xuICAgICAgICAgICAgICAgIHNlbGYubm90aWZ5QXJyYXlDaGFuZ2VkKG5ld0FycmF5LCBhcnJheUNoYW5nZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfTtcbiAgICAgICAgbmV3QXJyYXkudW5zaGlmdCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihuZXdBcnJheSkudW5zaGlmdC5jYWxsKG5ld0FycmF5LCB2YWx1ZSk7XG4gICAgICAgICAgICBpZiAoIXNlbGYuaXNEaXNwb3NlZFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9uUHVzaClcbiAgICAgICAgICAgICAgICAgICAgb25QdXNoKHZhbHVlLCBuZXdBcnJheS5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgICAgICB2YXIgYXJyYXlDaGFuZ2VzID0gbmV3IEFycmF5Q2hhbmdlcygwLCAwLCBbdmFsdWVdLCBbXSk7XG4gICAgICAgICAgICAgICAgc2VsZi5wcm9wZXJ0eVZhbHVlQ2hhbmdlZChuYW1lLCBuZXdBcnJheSwgbmV3QXJyYXksIGFycmF5Q2hhbmdlcyk7XG4gICAgICAgICAgICAgICAgc2VsZi5ub3RpZnlBcnJheUNoYW5nZWQobmV3QXJyYXksIGFycmF5Q2hhbmdlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9O1xuICAgICAgICBuZXdBcnJheS5wb3AgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG5ld0FycmF5KS5wb3AuY2FsbChuZXdBcnJheSk7XG4gICAgICAgICAgICBpZiAoIXNlbGYuaXNEaXNwb3NlZFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9uUmVtb3ZlKVxuICAgICAgICAgICAgICAgICAgICBvblJlbW92ZShyZXN1bHQpO1xuICAgICAgICAgICAgICAgIHZhciBhcnJheUNoYW5nZXMgPSBuZXcgQXJyYXlDaGFuZ2VzKG5ld0FycmF5Lmxlbmd0aCAtIDEsIDEsIFtdLCBbXSk7XG4gICAgICAgICAgICAgICAgc2VsZi5wcm9wZXJ0eVZhbHVlQ2hhbmdlZChuYW1lLCBuZXdBcnJheSwgbmV3QXJyYXksIGFycmF5Q2hhbmdlcyk7XG4gICAgICAgICAgICAgICAgc2VsZi5ub3RpZnlBcnJheUNoYW5nZWQobmV3QXJyYXksIGFycmF5Q2hhbmdlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9O1xuICAgICAgICBuZXdBcnJheS5zcGxpY2UgPSBmdW5jdGlvbiAoc3RhcnQsIGRlbGV0ZUNvdW50KSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICB2YXIgaXRlbXMgPSBbXTtcbiAgICAgICAgICAgIGZvciAodmFyIF9pID0gMjsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICAgICAgaXRlbXNbX2kgLSAyXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXN0YXJ0KVxuICAgICAgICAgICAgICAgIHN0YXJ0ID0gMDtcbiAgICAgICAgICAgIGlmICghZGVsZXRlQ291bnQpXG4gICAgICAgICAgICAgICAgZGVsZXRlQ291bnQgPSAwO1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IChfYSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihuZXdBcnJheSkuc3BsaWNlKS5jYWxsLmFwcGx5KF9hLCBfX3NwcmVhZEFycmF5KFtuZXdBcnJheSxcbiAgICAgICAgICAgICAgICBzdGFydCxcbiAgICAgICAgICAgICAgICBkZWxldGVDb3VudF0sIGl0ZW1zKSk7XG4gICAgICAgICAgICBpZiAoIWl0ZW1zKVxuICAgICAgICAgICAgICAgIGl0ZW1zID0gW107XG4gICAgICAgICAgICBpZiAoIXNlbGYuaXNEaXNwb3NlZFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9uUmVtb3ZlICYmIHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgb25SZW1vdmUocmVzdWx0W2ldKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAob25QdXNoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uUHVzaChpdGVtc1tpXSwgc3RhcnQgKyBpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgYXJyYXlDaGFuZ2VzID0gbmV3IEFycmF5Q2hhbmdlcyhzdGFydCwgZGVsZXRlQ291bnQsIGl0ZW1zLCByZXN1bHQpO1xuICAgICAgICAgICAgICAgIHNlbGYucHJvcGVydHlWYWx1ZUNoYW5nZWQobmFtZSwgbmV3QXJyYXksIG5ld0FycmF5LCBhcnJheUNoYW5nZXMpO1xuICAgICAgICAgICAgICAgIHNlbGYubm90aWZ5QXJyYXlDaGFuZ2VkKG5ld0FycmF5LCBhcnJheUNoYW5nZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG5ld0FycmF5O1xuICAgIH07XG4gICAgQmFzZS5wcm90b3R5cGUuZ2V0SXRlbVZhbHVlVHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIEJhc2UucHJvdG90eXBlLnNldEFycmF5ID0gZnVuY3Rpb24gKG5hbWUsIHNyYywgZGVzdCwgaXNJdGVtVmFsdWVzLCBvblB1c2gpIHtcbiAgICAgICAgdmFyIGRlbGV0ZWRJdGVtcyA9IFtdLmNvbmNhdChzcmMpO1xuICAgICAgICBPYmplY3QuZ2V0UHJvdG90eXBlT2Yoc3JjKS5zcGxpY2UuY2FsbChzcmMsIDAsIHNyYy5sZW5ndGgpO1xuICAgICAgICBpZiAoISFkZXN0KSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRlc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgaXRlbSA9IGRlc3RbaV07XG4gICAgICAgICAgICAgICAgaWYgKGlzSXRlbVZhbHVlcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoISFCYXNlLmNyZWF0ZUl0ZW1WYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbSA9IEJhc2UuY3JlYXRlSXRlbVZhbHVlKGl0ZW0sIHRoaXMuZ2V0SXRlbVZhbHVlVHlwZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBPYmplY3QuZ2V0UHJvdG90eXBlT2Yoc3JjKS5wdXNoLmNhbGwoc3JjLCBpdGVtKTtcbiAgICAgICAgICAgICAgICBpZiAob25QdXNoKVxuICAgICAgICAgICAgICAgICAgICBvblB1c2goc3JjW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgYXJyYXlDaGFuZ2VzID0gbmV3IEFycmF5Q2hhbmdlcygwLCBkZWxldGVkSXRlbXMubGVuZ3RoLCBzcmMsIGRlbGV0ZWRJdGVtcyk7XG4gICAgICAgIHRoaXMucHJvcGVydHlWYWx1ZUNoYW5nZWQobmFtZSwgZGVsZXRlZEl0ZW1zLCBzcmMsIGFycmF5Q2hhbmdlcyk7XG4gICAgICAgIHRoaXMubm90aWZ5QXJyYXlDaGFuZ2VkKHNyYywgYXJyYXlDaGFuZ2VzKTtcbiAgICB9O1xuICAgIEJhc2UucHJvdG90eXBlLmlzVHdvVmFsdWVFcXVhbHMgPSBmdW5jdGlvbiAoeCwgeSwgY2FzZUluU2Vuc2l0aXZlLCB0cmltU3RyaW5nKSB7XG4gICAgICAgIGlmIChjYXNlSW5TZW5zaXRpdmUgPT09IHZvaWQgMCkgeyBjYXNlSW5TZW5zaXRpdmUgPSBmYWxzZTsgfVxuICAgICAgICBpZiAodHJpbVN0cmluZyA9PT0gdm9pZCAwKSB7IHRyaW1TdHJpbmcgPSBmYWxzZTsgfVxuICAgICAgICByZXR1cm4gX2hlbHBlcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIkhlbHBlcnNcIl0uaXNUd29WYWx1ZUVxdWFscyh4LCB5LCBmYWxzZSwgIWNhc2VJblNlbnNpdGl2ZSwgdHJpbVN0cmluZyk7XG4gICAgfTtcbiAgICBCYXNlLmNvcHlPYmplY3QgPSBmdW5jdGlvbiAoZHN0LCBzcmMpIHtcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHNyYykge1xuICAgICAgICAgICAgdmFyIHNvdXJjZSA9IHNyY1trZXldO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBzb3VyY2UgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgICAgICBzb3VyY2UgPSB7fTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvcHlPYmplY3Qoc291cmNlLCBzcmNba2V5XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkc3Rba2V5XSA9IHNvdXJjZTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQmFzZS5wcm90b3R5cGUuY29weUNzc0NsYXNzZXMgPSBmdW5jdGlvbiAoZGVzdCwgc291cmNlKSB7XG4gICAgICAgIGlmICghc291cmNlKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAodHlwZW9mIHNvdXJjZSA9PT0gXCJzdHJpbmdcIiB8fCBzb3VyY2UgaW5zdGFuY2VvZiBTdHJpbmcpIHtcbiAgICAgICAgICAgIGRlc3RbXCJyb290XCJdID0gc291cmNlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgQmFzZS5jb3B5T2JqZWN0KGRlc3QsIHNvdXJjZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEJhc2UucHJvdG90eXBlLmdldFZhbHVlSW5Mb3dDYXNlID0gZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICBpZiAoISF2YWwgJiYgdHlwZW9mIHZhbCA9PSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgcmV0dXJuIHZhbC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH07XG4gICAgQmFzZS5wcm90b3R5cGUuZ2V0RWxlbWVudHNJbkRlc2lnbiA9IGZ1bmN0aW9uIChpbmNsdWRlSGlkZGVuKSB7XG4gICAgICAgIGlmIChpbmNsdWRlSGlkZGVuID09PSB2b2lkIDApIHsgaW5jbHVkZUhpZGRlbiA9IGZhbHNlOyB9XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9O1xuICAgIEJhc2UuY3VycmVudERlcGVuZGVuY2lzID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiBCYXNlO1xufSgpKTtcblxudmFyIEFycmF5Q2hhbmdlcyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBBcnJheUNoYW5nZXMoaW5kZXgsIGRlbGV0ZUNvdW50LCBpdGVtc1RvQWRkLCBkZWxldGVkSXRlbXMpIHtcbiAgICAgICAgdGhpcy5pbmRleCA9IGluZGV4O1xuICAgICAgICB0aGlzLmRlbGV0ZUNvdW50ID0gZGVsZXRlQ291bnQ7XG4gICAgICAgIHRoaXMuaXRlbXNUb0FkZCA9IGl0ZW1zVG9BZGQ7XG4gICAgICAgIHRoaXMuZGVsZXRlZEl0ZW1zID0gZGVsZXRlZEl0ZW1zO1xuICAgIH1cbiAgICByZXR1cm4gQXJyYXlDaGFuZ2VzO1xufSgpKTtcblxudmFyIEV2ZW50ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEV2ZW50KCkge1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRXZlbnQucHJvdG90eXBlLCBcImlzRW1wdHlcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxlbmd0aCA9PT0gMDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFdmVudC5wcm90b3R5cGUsIFwibGVuZ3RoXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gISF0aGlzLmNhbGxiYWNrcyA/IHRoaXMuY2FsbGJhY2tzLmxlbmd0aCA6IDA7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBFdmVudC5wcm90b3R5cGUuZmlyZUJ5Q3JlYXRpbmdPcHRpb25zID0gZnVuY3Rpb24gKHNlbmRlciwgY3JlYXRlT3B0aW9ucykge1xuICAgICAgICBpZiAoIXRoaXMuY2FsbGJhY2tzKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2FsbGJhY2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLmNhbGxiYWNrc1tpXShzZW5kZXIsIGNyZWF0ZU9wdGlvbnMoKSk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuY2FsbGJhY2tzKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH07XG4gICAgRXZlbnQucHJvdG90eXBlLmZpcmUgPSBmdW5jdGlvbiAoc2VuZGVyLCBvcHRpb25zKSB7XG4gICAgICAgIGlmICghdGhpcy5jYWxsYmFja3MpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jYWxsYmFja3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzW2ldKHNlbmRlciwgb3B0aW9ucyk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuY2FsbGJhY2tzKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH07XG4gICAgRXZlbnQucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmNhbGxiYWNrcyA9IHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIEV2ZW50LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAoZnVuYykge1xuICAgICAgICBpZiAodGhpcy5oYXNGdW5jKGZ1bmMpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAoIXRoaXMuY2FsbGJhY2tzKSB7XG4gICAgICAgICAgICB0aGlzLmNhbGxiYWNrcyA9IG5ldyBBcnJheSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2FsbGJhY2tzLnB1c2goZnVuYyk7XG4gICAgICAgIHRoaXMuZmlyZUNhbGxiYWNrQ2hhbmdlZCgpO1xuICAgIH07XG4gICAgRXZlbnQucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uIChmdW5jKSB7XG4gICAgICAgIGlmICh0aGlzLmhhc0Z1bmMoZnVuYykpIHtcbiAgICAgICAgICAgIHZhciBpbmRleCA9IHRoaXMuY2FsbGJhY2tzLmluZGV4T2YoZnVuYywgMCk7XG4gICAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgdGhpcy5maXJlQ2FsbGJhY2tDaGFuZ2VkKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEV2ZW50LnByb3RvdHlwZS5oYXNGdW5jID0gZnVuY3Rpb24gKGZ1bmMpIHtcbiAgICAgICAgaWYgKHRoaXMuY2FsbGJhY2tzID09IG51bGwpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxiYWNrcy5pbmRleE9mKGZ1bmMsIDApID4gLTE7XG4gICAgfTtcbiAgICBFdmVudC5wcm90b3R5cGUuZmlyZUNhbGxiYWNrQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCEhdGhpcy5vbkNhbGxiYWNrc0NoYW5nZWQpIHtcbiAgICAgICAgICAgIHRoaXMub25DYWxsYmFja3NDaGFuZ2VkKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBFdmVudDtcbn0oKSk7XG5cbnZhciBFdmVudEJhc2UgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEV2ZW50QmFzZSwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBFdmVudEJhc2UoKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICB9XG4gICAgcmV0dXJuIEV2ZW50QmFzZTtcbn0oRXZlbnQpKTtcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL2NhbGN1bGF0ZWRWYWx1ZS50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvY2FsY3VsYXRlZFZhbHVlLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBDYWxjdWxhdGVkVmFsdWUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQ2FsY3VsYXRlZFZhbHVlXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQ2FsY3VsYXRlZFZhbHVlOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfaGVscGVyc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9oZWxwZXJzICovIFwiLi9zcmMvaGVscGVycy50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYmFzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9iYXNlICovIFwiLi9zcmMvYmFzZS50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfY29uZGl0aW9uc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9jb25kaXRpb25zICovIFwiLi9zcmMvY29uZGl0aW9ucy50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9qc29ub2JqZWN0ICovIFwiLi9zcmMvanNvbm9iamVjdC50c1wiKTtcbnZhciBfX2V4dGVuZHMgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xuXG5cblxuXG4vKipcbiAqIFRoZSBjYWxjdWxhdGVkIHZhbHVlIGlzIGEgd2F5IHRvIGRlZmluZSB0aGUgdmFyaWFibGUgaW4gU3VydmV5IENyZWF0b3IuXG4gKiBJdCBoYXMgdHdvIG1haW4gcHJvcGVydGllczogbmFtZSBhbmQgZXhwcmVzc2lvbi4gQmFzZWQgb24gZXhwcmVzc2lvbiB0aGUgdmFsdWUgcmVhZC1vbmx5IHByb3BlcnR5IGlzIGF1dG9tYXRpY2FsbHkgY2FsY3VsYXRlZC5cbiAqIFRoZSBuYW1lIHByb3BlcnR5IHNob3VsZCBiZSB1bmlxdWUgdGhvdWdoIGFsbCBjYWxjdWxhdGVkIHZhbHVlcy5cbiAqIEl0IHVzZXMgc3VydmV5LmdldFZhcmlhYmxlL3NlcnV2ZXkuc2V0VmFyaWFibGUgZnVuY3Rpb25zIHRvIGdldC9zZXQgaXRzIHZhbHVlLiBUaGUgY2xhc3MgZG8gbm90IHN0b3JlIGl0cyB2YWx1ZSBpbnRlcm5hbGx5LlxuICogWW91IG1heSBzZXQgaW5jbHVkZUludG9SZXN1bHQgcHJvcGVydHkgdG8gdHJ1ZSB0byBzdG9yZSB0aGlzIGNhbGN1bGF0ZWQgdmFsdWUgaW50byBzdXJ2ZXkgcmVzdWx0LlxuICovXG52YXIgQ2FsY3VsYXRlZFZhbHVlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhDYWxjdWxhdGVkVmFsdWUsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQ2FsY3VsYXRlZFZhbHVlKG5hbWUsIGV4cHJlc3Npb24pIHtcbiAgICAgICAgaWYgKG5hbWUgPT09IHZvaWQgMCkgeyBuYW1lID0gbnVsbDsgfVxuICAgICAgICBpZiAoZXhwcmVzc2lvbiA9PT0gdm9pZCAwKSB7IGV4cHJlc3Npb24gPSBudWxsOyB9XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmV4cHJlc3Npb25Jc1J1bm5pbmcgPSBmYWxzZTtcbiAgICAgICAgX3RoaXMuaXNDYWxjdWxhdGVkID0gZmFsc2U7XG4gICAgICAgIGlmICghIW5hbWUpIHtcbiAgICAgICAgICAgIF90aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICB9XG4gICAgICAgIGlmICghIWV4cHJlc3Npb24pIHtcbiAgICAgICAgICAgIF90aGlzLmV4cHJlc3Npb24gPSBleHByZXNzaW9uO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgQ2FsY3VsYXRlZFZhbHVlLnByb3RvdHlwZS5zZXRPd25lciA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgICAgIHRoaXMucmVydW5FeHByZXNzaW9uKCk7XG4gICAgfTtcbiAgICBDYWxjdWxhdGVkVmFsdWUucHJvdG90eXBlLmdldFR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBcImNhbGN1bGF0ZWR2YWx1ZVwiO1xuICAgIH07XG4gICAgQ2FsY3VsYXRlZFZhbHVlLnByb3RvdHlwZS5nZXRTdXJ2ZXkgPSBmdW5jdGlvbiAobGl2ZSkge1xuICAgICAgICBpZiAobGl2ZSA9PT0gdm9pZCAwKSB7IGxpdmUgPSBmYWxzZTsgfVxuICAgICAgICByZXR1cm4gISF0aGlzLmRhdGEgJiYgISF0aGlzLmRhdGFbXCJnZXRTdXJ2ZXlcIl1cbiAgICAgICAgICAgID8gdGhpcy5kYXRhLmdldFN1cnZleSgpXG4gICAgICAgICAgICA6IG51bGw7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ2FsY3VsYXRlZFZhbHVlLnByb3RvdHlwZSwgXCJvd25lclwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDYWxjdWxhdGVkVmFsdWUucHJvdG90eXBlLCBcIm5hbWVcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogVGhlIGNhbGN1bGF0ZWQgdmFsdWUgbmFtZS4gSXQgc2hvdWxkIGJlIG5vbiBlbXB0eSBhbmQgdW5pcXVlLlxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibmFtZVwiKSB8fCBcIlwiO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm5hbWVcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDYWxjdWxhdGVkVmFsdWUucHJvdG90eXBlLCBcImluY2x1ZGVJbnRvUmVzdWx0XCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIHRydWUgdG8gaW5jbHVkZSB0aGUgbm9uLWVtcHR5IGNhbGN1bGF0ZWQgdmFsdWUgaW50byBzdXJ2ZXkgcmVzdWx0LCBzdXJ2ZXkuZGF0YSBwcm9wZXJ0eS5cbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImluY2x1ZGVJbnRvUmVzdWx0XCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImluY2x1ZGVJbnRvUmVzdWx0XCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ2FsY3VsYXRlZFZhbHVlLnByb3RvdHlwZSwgXCJleHByZXNzaW9uXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSBFeHByZXNzaW9uIHRoYXQgdXNlZCB0byBjYWxjdWxhdGUgdGhlIHZhbHVlLiBZb3UgbWF5IHVzZSBzdGFuZGFyZCBvcGVyYXRvcnMgbGlrZSArLCAtLCAqIGFuZCAvLCBzcXVhcmVzICgpLiBIZXJlIGlzIHRoZSBleGFtcGxlIG9mIGFjY2Vzc2luZyB0aGUgcXVlc3Rpb24gdmFsdWUge3F1ZXN0aW9ubmFtZX0uXG4gICAgICAgICAqIEV4YW1wbGU6IFwiKHtxdWFudGl0eX0gKiB7cHJpY2V9KSAqICgxMDAgLSB7ZGlzY291bnR9KSAvIDEwMFwiXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJleHByZXNzaW9uXCIpIHx8IFwiXCI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiZXhwcmVzc2lvblwiLCB2YWwpO1xuICAgICAgICAgICAgdGhpcy5yZXJ1bkV4cHJlc3Npb24oKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIENhbGN1bGF0ZWRWYWx1ZS5wcm90b3R5cGUubG9jQ2FsY3VsYXRpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuZXhwcmVzc2lvbklzUnVubmluZyA9IHRydWU7XG4gICAgfTtcbiAgICBDYWxjdWxhdGVkVmFsdWUucHJvdG90eXBlLnVubG9jQ2FsY3VsYXRpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuZXhwcmVzc2lvbklzUnVubmluZyA9IGZhbHNlO1xuICAgIH07XG4gICAgQ2FsY3VsYXRlZFZhbHVlLnByb3RvdHlwZS5yZXNldENhbGN1bGF0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmlzQ2FsY3VsYXRlZCA9IGZhbHNlO1xuICAgIH07XG4gICAgQ2FsY3VsYXRlZFZhbHVlLnByb3RvdHlwZS5kb0NhbGN1bGF0aW9uID0gZnVuY3Rpb24gKGNhbGN1bGF0ZWRWYWx1ZXMsIHZhbHVlcywgcHJvcGVydGllcykge1xuICAgICAgICBpZiAodGhpcy5pc0NhbGN1bGF0ZWQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMucnVuRXhwcmVzc2lvbkNvcmUoY2FsY3VsYXRlZFZhbHVlcywgdmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICAgICAgdGhpcy5pc0NhbGN1bGF0ZWQgPSB0cnVlO1xuICAgIH07XG4gICAgQ2FsY3VsYXRlZFZhbHVlLnByb3RvdHlwZS5ydW5FeHByZXNzaW9uID0gZnVuY3Rpb24gKHZhbHVlcywgcHJvcGVydGllcykge1xuICAgICAgICB0aGlzLnJ1bkV4cHJlc3Npb25Db3JlKG51bGwsIHZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ2FsY3VsYXRlZFZhbHVlLnByb3RvdHlwZSwgXCJ2YWx1ZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmRhdGEpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGEuZ2V0VmFyaWFibGUodGhpcy5uYW1lKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIENhbGN1bGF0ZWRWYWx1ZS5wcm90b3R5cGUuc2V0VmFsdWUgPSBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgIGlmICghdGhpcy5kYXRhKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLmRhdGEuc2V0VmFyaWFibGUodGhpcy5uYW1lLCB2YWwpO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENhbGN1bGF0ZWRWYWx1ZS5wcm90b3R5cGUsIFwiY2FuUnVuRXhwcmVzc2lvblwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuICghIXRoaXMuZGF0YSAmJlxuICAgICAgICAgICAgICAgICF0aGlzLmlzTG9hZGluZ0Zyb21Kc29uICYmXG4gICAgICAgICAgICAgICAgISF0aGlzLmV4cHJlc3Npb24gJiZcbiAgICAgICAgICAgICAgICAhdGhpcy5leHByZXNzaW9uSXNSdW5uaW5nICYmXG4gICAgICAgICAgICAgICAgISF0aGlzLm5hbWUpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgQ2FsY3VsYXRlZFZhbHVlLnByb3RvdHlwZS5yZXJ1bkV4cHJlc3Npb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5jYW5SdW5FeHByZXNzaW9uKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLnJ1bkV4cHJlc3Npb24odGhpcy5kYXRhLmdldEZpbHRlcmVkVmFsdWVzKCksIHRoaXMuZGF0YS5nZXRGaWx0ZXJlZFByb3BlcnRpZXMoKSk7XG4gICAgfTtcbiAgICBDYWxjdWxhdGVkVmFsdWUucHJvdG90eXBlLnJ1bkV4cHJlc3Npb25Db3JlID0gZnVuY3Rpb24gKGNhbGN1bGF0ZWRWYWx1ZXMsIHZhbHVlcywgcHJvcGVydGllcykge1xuICAgICAgICBpZiAoIXRoaXMuY2FuUnVuRXhwcmVzc2lvbilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5lbnN1cmVFeHByZXNzaW9uKHZhbHVlcyk7XG4gICAgICAgIHRoaXMubG9jQ2FsY3VsYXRpb24oKTtcbiAgICAgICAgaWYgKCEhY2FsY3VsYXRlZFZhbHVlcykge1xuICAgICAgICAgICAgdGhpcy5ydW5EZXBlbmRlbnRFeHByZXNzaW9ucyhjYWxjdWxhdGVkVmFsdWVzLCB2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZXhwcmVzc2lvblJ1bm5lci5ydW4odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICB9O1xuICAgIENhbGN1bGF0ZWRWYWx1ZS5wcm90b3R5cGUucnVuRGVwZW5kZW50RXhwcmVzc2lvbnMgPSBmdW5jdGlvbiAoY2FsY3VsYXRlZFZhbHVlcywgdmFsdWVzLCBwcm9wZXJ0aWVzKSB7XG4gICAgICAgIHZhciB2YXJpYWJsZXMgPSB0aGlzLmV4cHJlc3Npb25SdW5uZXIuZ2V0VmFyaWFibGVzKCk7XG4gICAgICAgIGlmICghdmFyaWFibGVzKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNhbGN1bGF0ZWRWYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBjYWxjSXRlbSA9IGNhbGN1bGF0ZWRWYWx1ZXNbaV07XG4gICAgICAgICAgICBpZiAoY2FsY0l0ZW0gPT09IHRoaXMgfHwgdmFyaWFibGVzLmluZGV4T2YoY2FsY0l0ZW0ubmFtZSkgPCAwKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgY2FsY0l0ZW0uZG9DYWxjdWxhdGlvbihjYWxjdWxhdGVkVmFsdWVzLCB2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgICAgICAgICAgdmFsdWVzW2NhbGNJdGVtLm5hbWVdID0gY2FsY0l0ZW0udmFsdWU7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIENhbGN1bGF0ZWRWYWx1ZS5wcm90b3R5cGUuZW5zdXJlRXhwcmVzc2lvbiA9IGZ1bmN0aW9uICh2YWx1ZXMpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgaWYgKCEhdGhpcy5leHByZXNzaW9uUnVubmVyKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLmV4cHJlc3Npb25SdW5uZXIgPSBuZXcgX2NvbmRpdGlvbnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIkV4cHJlc3Npb25SdW5uZXJcIl0odGhpcy5leHByZXNzaW9uKTtcbiAgICAgICAgdGhpcy5leHByZXNzaW9uUnVubmVyLm9uUnVuQ29tcGxldGUgPSBmdW5jdGlvbiAobmV3VmFsdWUpIHtcbiAgICAgICAgICAgIGlmICghX2hlbHBlcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkhlbHBlcnNcIl0uaXNUd29WYWx1ZUVxdWFscyhuZXdWYWx1ZSwgX3RoaXMudmFsdWUsIGZhbHNlLCB0cnVlLCBmYWxzZSkpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5zZXRWYWx1ZShuZXdWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBfdGhpcy51bmxvY0NhbGN1bGF0aW9uKCk7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICByZXR1cm4gQ2FsY3VsYXRlZFZhbHVlO1xufShfYmFzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiQmFzZVwiXSkpO1xuXG5fanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiU2VyaWFsaXplclwiXS5hZGRDbGFzcyhcImNhbGN1bGF0ZWR2YWx1ZVwiLCBbXG4gICAgeyBuYW1lOiBcIiFuYW1lXCIsIGlzVW5pcXVlOiB0cnVlIH0sXG4gICAgXCJleHByZXNzaW9uOmV4cHJlc3Npb25cIixcbiAgICBcImluY2x1ZGVJbnRvUmVzdWx0OmJvb2xlYW5cIixcbl0sIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbmV3IENhbGN1bGF0ZWRWYWx1ZSgpO1xufSwgXCJiYXNlXCIpO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL2Nob2ljZXNSZXN0ZnVsLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL2Nob2ljZXNSZXN0ZnVsLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IENob2ljZXNSZXN0ZnVsLCBDaG9pY2VzUmVzdGZ1bGwgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQ2hvaWNlc1Jlc3RmdWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBDaG9pY2VzUmVzdGZ1bDsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQ2hvaWNlc1Jlc3RmdWxsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQ2hvaWNlc1Jlc3RmdWxsOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYmFzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9iYXNlICovIFwiLi9zcmMvYmFzZS50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfaXRlbXZhbHVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2l0ZW12YWx1ZSAqLyBcIi4vc3JjL2l0ZW12YWx1ZS50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9qc29ub2JqZWN0ICovIFwiLi9zcmMvanNvbm9iamVjdC50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZXJyb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZXJyb3IgKi8gXCIuL3NyYy9lcnJvci50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc2V0dGluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vc2V0dGluZ3MgKi8gXCIuL3NyYy9zZXR0aW5ncy50c1wiKTtcbnZhciBfX2V4dGVuZHMgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xuXG5cblxuXG5cbnZhciBYbWxQYXJzZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gWG1sUGFyc2VyKCkge1xuICAgICAgICB0aGlzLnBhcnNlciA9IG5ldyBET01QYXJzZXIoKTtcbiAgICB9XG4gICAgWG1sUGFyc2VyLnByb3RvdHlwZS5hc3NpZ25WYWx1ZSA9IGZ1bmN0aW9uICh0YXJnZXQsIG5hbWUsIHZhbHVlKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRhcmdldFtuYW1lXSkpIHtcbiAgICAgICAgICAgIHRhcmdldFtuYW1lXS5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0YXJnZXRbbmFtZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGFyZ2V0W25hbWVdID0gW3RhcmdldFtuYW1lXV0uY29uY2F0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHZhbHVlKVswXSA9PT0gbmFtZSkge1xuICAgICAgICAgICAgdGFyZ2V0W25hbWVdID0gdmFsdWVbbmFtZV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0YXJnZXRbbmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgWG1sUGFyc2VyLnByb3RvdHlwZS54bWwySnNvbiA9IGZ1bmN0aW9uICh4bWxOb2RlLCByZXN1bHQpIHtcbiAgICAgICAgaWYgKHhtbE5vZGUuY2hpbGRyZW4gJiYgeG1sTm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHhtbE5vZGUuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgY2hpbGROb2RlID0geG1sTm9kZS5jaGlsZHJlbltpXTtcbiAgICAgICAgICAgICAgICB2YXIgY2hpbGRPYmplY3QgPSB7fTtcbiAgICAgICAgICAgICAgICB0aGlzLnhtbDJKc29uKGNoaWxkTm9kZSwgY2hpbGRPYmplY3QpO1xuICAgICAgICAgICAgICAgIHRoaXMuYXNzaWduVmFsdWUocmVzdWx0LCBjaGlsZE5vZGUubm9kZU5hbWUsIGNoaWxkT2JqZWN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYXNzaWduVmFsdWUocmVzdWx0LCB4bWxOb2RlLm5vZGVOYW1lLCB4bWxOb2RlLnRleHRDb250ZW50KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgWG1sUGFyc2VyLnByb3RvdHlwZS5wYXJzZVhtbFN0cmluZyA9IGZ1bmN0aW9uICh4bWxTdHJpbmcpIHtcbiAgICAgICAgdmFyIHhtbFJvb3QgPSB0aGlzLnBhcnNlci5wYXJzZUZyb21TdHJpbmcoeG1sU3RyaW5nLCBcInRleHQveG1sXCIpO1xuICAgICAgICB2YXIganNvbiA9IHt9O1xuICAgICAgICB0aGlzLnhtbDJKc29uKHhtbFJvb3QsIGpzb24pO1xuICAgICAgICByZXR1cm4ganNvbjtcbiAgICB9O1xuICAgIHJldHVybiBYbWxQYXJzZXI7XG59KCkpO1xuLyoqXG4gKiBDb25maWd1cmVzIGFjY2VzcyB0byBhIFJFU1RmdWwgc2VydmljZSB0aGF0IHJldHVybnMgY2hvaWNlcyBmb3IgW0NoZWNrYm94XShodHRwczovL3N1cnZleWpzLmlvL0V4YW1wbGVzL0xpYnJhcnk/aWQ9cXVlc3Rpb250eXBlLWNoZWNrYm94KSwgW0Ryb3Bkb3duXShodHRwczovL3N1cnZleWpzLmlvL0V4YW1wbGVzL0xpYnJhcnk/aWQ9cXVlc3Rpb250eXBlLWRyb3Bkb3duKSwgW1JhZGlvZ3JvdXBdKGh0dHBzOi8vc3VydmV5anMuaW8vRXhhbXBsZXMvTGlicmFyeT9pZD1xdWVzdGlvbnR5cGUtcmFkaW9ncm91cCksIGFuZCBvdGhlciBtdWx0aXBsZS1jaG9pY2UgcXVlc3Rpb24gdHlwZXMuXG4gKlxuICogVXNlIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyB0byBjb25maWd1cmUgdGhpcyBvYmplY3Q6XG4gKlxuICogYGBganNcbiAqIHtcbiAqICAgdXJsOiBcImh0dHA6Ly8uLi5cIiwgLy8gQSBSRVNUZnVsIHNlcnZpY2UncyBVUkwuXG4gKiAgIHZhbHVlTmFtZTogXCJ2YWx1ZVwiLCAvLyBTcGVjaWZpZXMgd2hpY2ggZmllbGQgY29udGFpbnMgY2hvaWNlIHZhbHVlcy5cbiAqICAgdGl0bGVOYW1lOiBcInRpdGxlXCIsIC8vIFNwZWNpZmllcyB3aGljaCBmaWVsZCBjb250YWlucyBkaXNwbGF5IHRleHRzIGZvciBjaG9pY2UgdmFsdWVzLlxuICogICBpbWFnZUxpbmtOYW1lOiBcImltYWdlVXJsXCIsIC8vIFNwZWNpZmllcyB3aGljaCBmaWVsZCBjb250YWlucyBpbWFnZSBVUkxzLiBVc2VkIGluIEltYWdlIFBpY2tlciBxdWVzdGlvbnMuXG4gKiAgIC8vIFBhdGggdG8gdGhlIGFycmF5IG9mIGNob2ljZXMuIFNwZWNpZnkgYHBhdGhgIG9ubHkgaWYgdGhlIGFycmF5IG9mIGNob2ljZXMgaXMgbmVzdGVkIHdpdGhpbiB0aGUgb2JqZWN0IHJldHVybmVkIGJ5IHRoZSBzZXJ2aWNlLlxuICogICAvLyBUaGUgZm9sbG93aW5nIHBhdGggc2VwYXJhdG9ycyBhcmUgYWxsb3dlZDogc2VtaWNvbG9uIGA7YCwgY29tbWEgYCxgLlxuICogICBwYXRoOiBcIm15TmVzdGVkQXJyYXlcIlxuICogfVxuICogYGBgXG4gKlxuICogVHlwaWNhbGx5LCB5b3Ugc2hvdWxkIGFzc2lnbiB0aGlzIG9iamVjdCB0byBhIHF1ZXN0aW9uJ3MgW2BjaG9pY2VzQnlVcmxgXShodHRwczovL3N1cnZleWpzLmlvL0RvY3VtZW50YXRpb24vTGlicmFyeT9pZD1RdWVzdGlvblNlbGVjdEJhc2UjY2hvaWNlc0J5VXJsKSBwcm9wZXJ0eS5cbiAqL1xudmFyIENob2ljZXNSZXN0ZnVsID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhDaG9pY2VzUmVzdGZ1bCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBDaG9pY2VzUmVzdGZ1bCgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMubGFzdE9iakhhc2ggPSBcIlwiO1xuICAgICAgICBfdGhpcy5pc1J1bm5pbmdWYWx1ZSA9IGZhbHNlO1xuICAgICAgICBfdGhpcy5wcm9jZXNzZWRVcmwgPSBcIlwiO1xuICAgICAgICBfdGhpcy5wcm9jZXNzZWRQYXRoID0gXCJcIjtcbiAgICAgICAgX3RoaXMuaXNVc2luZ0NhY2hlRnJvbVVybCA9IHVuZGVmaW5lZDtcbiAgICAgICAgX3RoaXMuZXJyb3IgPSBudWxsO1xuICAgICAgICBfdGhpcy5jcmVhdGVJdGVtVmFsdWUgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgX2l0ZW12YWx1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiSXRlbVZhbHVlXCJdKHZhbHVlKTtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ2hvaWNlc1Jlc3RmdWwsIFwiRW5jb2RlUGFyYW1ldGVyc1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIF9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fW1wic2V0dGluZ3NcIl0ud2ViLmVuY29kZVVybFBhcmFtcztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICBfc2V0dGluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1tcInNldHRpbmdzXCJdLndlYi5lbmNvZGVVcmxQYXJhbXMgPSB2YWw7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBDaG9pY2VzUmVzdGZ1bC5jbGVhckNhY2hlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBDaG9pY2VzUmVzdGZ1bC5pdGVtc1Jlc3VsdCA9IHt9O1xuICAgICAgICBDaG9pY2VzUmVzdGZ1bC5zZW5kaW5nU2FtZVJlcXVlc3RzID0ge307XG4gICAgfTtcbiAgICBDaG9pY2VzUmVzdGZ1bC5hZGRTYW1lUmVxdWVzdCA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgaWYgKCFvYmouaXNVc2luZ0NhY2hlKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB2YXIgaGFzaCA9IG9iai5vYmpIYXNoO1xuICAgICAgICB2YXIgcmVzID0gQ2hvaWNlc1Jlc3RmdWwuc2VuZGluZ1NhbWVSZXF1ZXN0c1toYXNoXTtcbiAgICAgICAgaWYgKCFyZXMpIHtcbiAgICAgICAgICAgIENob2ljZXNSZXN0ZnVsLnNlbmRpbmdTYW1lUmVxdWVzdHNbb2JqLm9iakhhc2hdID0gW107XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmVzLnB1c2gob2JqKTtcbiAgICAgICAgb2JqLmlzUnVubmluZ1ZhbHVlID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgICBDaG9pY2VzUmVzdGZ1bC51bnJlZ2lzdGVyU2FtZVJlcXVlc3RzID0gZnVuY3Rpb24gKG9iaiwgaXRlbXMpIHtcbiAgICAgICAgaWYgKCFvYmouaXNVc2luZ0NhY2hlKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIgcmVzID0gQ2hvaWNlc1Jlc3RmdWwuc2VuZGluZ1NhbWVSZXF1ZXN0c1tvYmoub2JqSGFzaF07XG4gICAgICAgIGRlbGV0ZSBDaG9pY2VzUmVzdGZ1bC5zZW5kaW5nU2FtZVJlcXVlc3RzW29iai5vYmpIYXNoXTtcbiAgICAgICAgaWYgKCFyZXMpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICByZXNbaV0uaXNSdW5uaW5nVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmICghIXJlc1tpXS5nZXRSZXN1bHRDYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIHJlc1tpXS5nZXRSZXN1bHRDYWxsYmFjayhpdGVtcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIENob2ljZXNSZXN0ZnVsLmdldENhY2hlZEl0ZW1zUmVzdWx0ID0gZnVuY3Rpb24gKG9iaikge1xuICAgICAgICB2YXIgaGFzaCA9IG9iai5vYmpIYXNoO1xuICAgICAgICB2YXIgcmVzID0gQ2hvaWNlc1Jlc3RmdWwuaXRlbXNSZXN1bHRbaGFzaF07XG4gICAgICAgIGlmICghcmVzKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAob2JqLmdldFJlc3VsdENhbGxiYWNrKSB7XG4gICAgICAgICAgICBvYmouZ2V0UmVzdWx0Q2FsbGJhY2socmVzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICAgIENob2ljZXNSZXN0ZnVsLnByb3RvdHlwZS5nZXRTdXJ2ZXkgPSBmdW5jdGlvbiAobGl2ZSkge1xuICAgICAgICBpZiAobGl2ZSA9PT0gdm9pZCAwKSB7IGxpdmUgPSBmYWxzZTsgfVxuICAgICAgICByZXR1cm4gISF0aGlzLm93bmVyID8gdGhpcy5vd25lci5zdXJ2ZXkgOiBudWxsO1xuICAgIH07XG4gICAgQ2hvaWNlc1Jlc3RmdWwucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uICh0ZXh0UHJvY2Vzc29yKSB7XG4gICAgICAgIGlmICh0ZXh0UHJvY2Vzc29yID09PSB2b2lkIDApIHsgdGV4dFByb2Nlc3NvciA9IG51bGw7IH1cbiAgICAgICAgaWYgKCF0aGlzLnVybCB8fCAhdGhpcy5nZXRSZXN1bHRDYWxsYmFjaylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5wcm9jZXNzZWRUZXh0KHRleHRQcm9jZXNzb3IpO1xuICAgICAgICBpZiAoIXRoaXMucHJvY2Vzc2VkVXJsKSB7XG4gICAgICAgICAgICB0aGlzLmRvRW1wdHlSZXN1bHRDYWxsYmFjayh7fSk7XG4gICAgICAgICAgICB0aGlzLmxhc3RPYmpIYXNoID0gdGhpcy5vYmpIYXNoO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmxhc3RPYmpIYXNoID09PSB0aGlzLm9iakhhc2gpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMubGFzdE9iakhhc2ggPSB0aGlzLm9iakhhc2g7XG4gICAgICAgIHRoaXMuZXJyb3IgPSBudWxsO1xuICAgICAgICBpZiAodGhpcy51c2VDaGFuZ2VkSXRlbXNSZXN1bHRzKCkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmIChDaG9pY2VzUmVzdGZ1bC5hZGRTYW1lUmVxdWVzdCh0aGlzKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5zZW5kUmVxdWVzdCgpO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENob2ljZXNSZXN0ZnVsLnByb3RvdHlwZSwgXCJpc1VzaW5nQ2FjaGVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzVXNpbmdDYWNoZUZyb21VcmwgPT09IHRydWUpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICBpZiAodGhpcy5pc1VzaW5nQ2FjaGVGcm9tVXJsID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm4gX3NldHRpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bXCJzZXR0aW5nc1wiXS53ZWIuY2FjaGVMb2FkZWRDaG9pY2VzO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENob2ljZXNSZXN0ZnVsLnByb3RvdHlwZSwgXCJpc1J1bm5pbmdcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldElzUnVubmluZygpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgQ2hvaWNlc1Jlc3RmdWwucHJvdG90eXBlLmdldElzUnVubmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNSdW5uaW5nVmFsdWU7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ2hvaWNlc1Jlc3RmdWwucHJvdG90eXBlLCBcImlzV2FpdGluZ0ZvclBhcmFtZXRlcnNcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVybCAmJiAhdGhpcy5wcm9jZXNzZWRVcmw7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBDaG9pY2VzUmVzdGZ1bC5wcm90b3R5cGUudXNlQ2hhbmdlZEl0ZW1zUmVzdWx0cyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIENob2ljZXNSZXN0ZnVsLmdldENhY2hlZEl0ZW1zUmVzdWx0KHRoaXMpO1xuICAgIH07XG4gICAgQ2hvaWNlc1Jlc3RmdWwucHJvdG90eXBlLmRvRW1wdHlSZXN1bHRDYWxsYmFjayA9IGZ1bmN0aW9uIChzZXJ2ZXJSZXN1bHQpIHtcbiAgICAgICAgdmFyIGl0ZW1zID0gW107XG4gICAgICAgIGlmICh0aGlzLnVwZGF0ZVJlc3VsdENhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVtcyA9IHRoaXMudXBkYXRlUmVzdWx0Q2FsbGJhY2soaXRlbXMsIHNlcnZlclJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5nZXRSZXN1bHRDYWxsYmFjayhpdGVtcyk7XG4gICAgfTtcbiAgICBDaG9pY2VzUmVzdGZ1bC5wcm90b3R5cGUucHJvY2Vzc2VkVGV4dCA9IGZ1bmN0aW9uICh0ZXh0UHJvY2Vzc29yKSB7XG4gICAgICAgIHZhciB1cmxUZXh0ID0gdGhpcy51cmw7XG4gICAgICAgIGlmICghIXVybFRleHQpIHtcbiAgICAgICAgICAgIHVybFRleHQgPSB1cmxUZXh0XG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoQ2hvaWNlc1Jlc3RmdWwuY2FjaGVUZXh0LCBcIlwiKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKENob2ljZXNSZXN0ZnVsLm5vQ2FjaGVUZXh0LCBcIlwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGV4dFByb2Nlc3Nvcikge1xuICAgICAgICAgICAgdmFyIHBVcmwgPSB0ZXh0UHJvY2Vzc29yLnByb2Nlc3NUZXh0RXgodXJsVGV4dCwgZmFsc2UsIF9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fW1wic2V0dGluZ3NcIl0ud2ViLmVuY29kZVVybFBhcmFtcyk7XG4gICAgICAgICAgICB2YXIgcFBhdGggPSB0ZXh0UHJvY2Vzc29yLnByb2Nlc3NUZXh0RXgodGhpcy5wYXRoLCBmYWxzZSwgX3NldHRpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bXCJzZXR0aW5nc1wiXS53ZWIuZW5jb2RlVXJsUGFyYW1zKTtcbiAgICAgICAgICAgIGlmICghcFVybC5oYXNBbGxWYWx1ZXNPbkxhc3RSdW4gfHwgIXBQYXRoLmhhc0FsbFZhbHVlc09uTGFzdFJ1bikge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc2VkVXJsID0gXCJcIjtcbiAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NlZFBhdGggPSBcIlwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzZWRVcmwgPSBwVXJsLnRleHQ7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzZWRQYXRoID0gcFBhdGgudGV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc2VkVXJsID0gdXJsVGV4dDtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc2VkUGF0aCA9IHRoaXMucGF0aDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vblByb2Nlc3NlZFVybENhbGxiYWNrKSB7XG4gICAgICAgICAgICB0aGlzLm9uUHJvY2Vzc2VkVXJsQ2FsbGJhY2sodGhpcy5wcm9jZXNzZWRVcmwsIHRoaXMucHJvY2Vzc2VkUGF0aCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIENob2ljZXNSZXN0ZnVsLnByb3RvdHlwZS5wYXJzZVJlc3BvbnNlID0gZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICAgIHZhciBwYXJzZWRSZXNwb25zZTtcbiAgICAgICAgaWYgKCEhcmVzcG9uc2UgJiZcbiAgICAgICAgICAgIHR5cGVvZiByZXNwb25zZS5pbmRleE9mID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICAgICAgICAgIHJlc3BvbnNlLmluZGV4T2YoXCI8XCIpID09PSAwKSB7XG4gICAgICAgICAgICB2YXIgcGFyc2VyID0gbmV3IFhtbFBhcnNlcigpO1xuICAgICAgICAgICAgcGFyc2VkUmVzcG9uc2UgPSBwYXJzZXIucGFyc2VYbWxTdHJpbmcocmVzcG9uc2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwYXJzZWRSZXNwb25zZSA9IEpTT04ucGFyc2UocmVzcG9uc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKF9hKSB7XG4gICAgICAgICAgICAgICAgcGFyc2VkUmVzcG9uc2UgPSAocmVzcG9uc2UgfHwgXCJcIilcbiAgICAgICAgICAgICAgICAgICAgLnNwbGl0KFwiXFxuXCIpXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKHMpIHsgcmV0dXJuIHMudHJpbShcIiBcIik7IH0pXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKHMpIHsgcmV0dXJuICEhczsgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhcnNlZFJlc3BvbnNlO1xuICAgIH07XG4gICAgQ2hvaWNlc1Jlc3RmdWwucHJvdG90eXBlLnNlbmRSZXF1ZXN0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgIHhoci5vcGVuKFwiR0VUXCIsIHRoaXMucHJvY2Vzc2VkVXJsKTtcbiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIik7XG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgICAgdmFyIGxvYWRpbmdPYmpIYXNoID0gdGhpcy5vYmpIYXNoO1xuICAgICAgICB4aHIub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc2VsZi5iZWZvcmVMb2FkUmVxdWVzdCgpO1xuICAgICAgICAgICAgaWYgKHhoci5zdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgICAgIHNlbGYub25Mb2FkKHNlbGYucGFyc2VSZXNwb25zZSh4aHIucmVzcG9uc2UpLCBsb2FkaW5nT2JqSGFzaCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZWxmLm9uRXJyb3IoeGhyLnN0YXR1c1RleHQsIHhoci5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB2YXIgb3B0aW9ucyA9IHsgcmVxdWVzdDogeGhyIH07XG4gICAgICAgIGlmICghIUNob2ljZXNSZXN0ZnVsLm9uQmVmb3JlU2VuZFJlcXVlc3QpIHtcbiAgICAgICAgICAgIENob2ljZXNSZXN0ZnVsLm9uQmVmb3JlU2VuZFJlcXVlc3QodGhpcywgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5iZWZvcmVTZW5kUmVxdWVzdCgpO1xuICAgICAgICBvcHRpb25zLnJlcXVlc3Quc2VuZCgpO1xuICAgIH07XG4gICAgQ2hvaWNlc1Jlc3RmdWwucHJvdG90eXBlLmdldFR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBcImNob2ljZXNCeVVybFwiO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENob2ljZXNSZXN0ZnVsLnByb3RvdHlwZSwgXCJpc0VtcHR5XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gIXRoaXMudXJsICYmICF0aGlzLnBhdGg7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBDaG9pY2VzUmVzdGZ1bC5wcm90b3R5cGUuZ2V0Q3VzdG9tUHJvcGVydGllc05hbWVzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcHJvcGVydGllcyA9IHRoaXMuZ2V0Q3VzdG9tUHJvcGVydGllcygpO1xuICAgICAgICB2YXIgcmVzID0gbmV3IEFycmF5KCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgcmVzLnB1c2godGhpcy5nZXRDdXN0b21Qcm9wZXJ0eU5hbWUocHJvcGVydGllc1tpXS5uYW1lKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9O1xuICAgIENob2ljZXNSZXN0ZnVsLnByb3RvdHlwZS5nZXRDdXN0b21Qcm9wZXJ0eU5hbWUgPSBmdW5jdGlvbiAocHJvcGVydHlOYW1lKSB7XG4gICAgICAgIHJldHVybiBwcm9wZXJ0eU5hbWUgKyBcIk5hbWVcIjtcbiAgICB9O1xuICAgIENob2ljZXNSZXN0ZnVsLnByb3RvdHlwZS5nZXRDdXN0b21Qcm9wZXJ0aWVzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcHJvcGVydGllcyA9IF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJTZXJpYWxpemVyXCJdLmdldFByb3BlcnRpZXModGhpcy5pdGVtVmFsdWVUeXBlKTtcbiAgICAgICAgdmFyIHJlcyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzW2ldLm5hbWUgPT09IFwidmFsdWVcIiB8fFxuICAgICAgICAgICAgICAgIHByb3BlcnRpZXNbaV0ubmFtZSA9PT0gXCJ0ZXh0XCIgfHxcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzW2ldLm5hbWUgPT09IFwidmlzaWJsZUlmXCIgfHxcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzW2ldLm5hbWUgPT09IFwiZW5hYmxlSWZcIilcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIHJlcy5wdXNoKHByb3BlcnRpZXNbaV0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfTtcbiAgICBDaG9pY2VzUmVzdGZ1bC5wcm90b3R5cGUuc2V0RGF0YSA9IGZ1bmN0aW9uIChqc29uKSB7XG4gICAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICAgICAgaWYgKGpzb24udXJsKVxuICAgICAgICAgICAgdGhpcy51cmwgPSBqc29uLnVybDtcbiAgICAgICAgaWYgKGpzb24ucGF0aClcbiAgICAgICAgICAgIHRoaXMucGF0aCA9IGpzb24ucGF0aDtcbiAgICAgICAgaWYgKGpzb24udmFsdWVOYW1lKVxuICAgICAgICAgICAgdGhpcy52YWx1ZU5hbWUgPSBqc29uLnZhbHVlTmFtZTtcbiAgICAgICAgaWYgKGpzb24udGl0bGVOYW1lKVxuICAgICAgICAgICAgdGhpcy50aXRsZU5hbWUgPSBqc29uLnRpdGxlTmFtZTtcbiAgICAgICAgaWYgKGpzb24uaW1hZ2VMaW5rTmFtZSlcbiAgICAgICAgICAgIHRoaXMuaW1hZ2VMaW5rTmFtZSA9IGpzb24uaW1hZ2VMaW5rTmFtZTtcbiAgICAgICAgaWYgKGpzb24uYWxsb3dFbXB0eVJlc3BvbnNlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICB0aGlzLmFsbG93RW1wdHlSZXNwb25zZSA9IGpzb24uYWxsb3dFbXB0eVJlc3BvbnNlO1xuICAgICAgICBpZiAoanNvbi5hdHRhY2hPcmlnaW5hbEl0ZW1zICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICB0aGlzLmF0dGFjaE9yaWdpbmFsSXRlbXMgPSBqc29uLmF0dGFjaE9yaWdpbmFsSXRlbXM7XG4gICAgICAgIHZhciBwcm9wZXJ0aWVzID0gdGhpcy5nZXRDdXN0b21Qcm9wZXJ0aWVzTmFtZXMoKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoanNvbltwcm9wZXJ0aWVzW2ldXSlcbiAgICAgICAgICAgICAgICB0aGlzW3Byb3BlcnRpZXNbaV1dID0ganNvbltwcm9wZXJ0aWVzW2ldXTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQ2hvaWNlc1Jlc3RmdWwucHJvdG90eXBlLmdldERhdGEgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzRW1wdHkpXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgdmFyIHJlcyA9IHt9O1xuICAgICAgICBpZiAodGhpcy51cmwpXG4gICAgICAgICAgICByZXNbXCJ1cmxcIl0gPSB0aGlzLnVybDtcbiAgICAgICAgaWYgKHRoaXMucGF0aClcbiAgICAgICAgICAgIHJlc1tcInBhdGhcIl0gPSB0aGlzLnBhdGg7XG4gICAgICAgIGlmICh0aGlzLnZhbHVlTmFtZSlcbiAgICAgICAgICAgIHJlc1tcInZhbHVlTmFtZVwiXSA9IHRoaXMudmFsdWVOYW1lO1xuICAgICAgICBpZiAodGhpcy50aXRsZU5hbWUpXG4gICAgICAgICAgICByZXNbXCJ0aXRsZU5hbWVcIl0gPSB0aGlzLnRpdGxlTmFtZTtcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2VMaW5rTmFtZSlcbiAgICAgICAgICAgIHJlc1tcImltYWdlTGlua05hbWVcIl0gPSB0aGlzLmltYWdlTGlua05hbWU7XG4gICAgICAgIGlmICh0aGlzLmFsbG93RW1wdHlSZXNwb25zZSlcbiAgICAgICAgICAgIHJlc1tcImFsbG93RW1wdHlSZXNwb25zZVwiXSA9IHRoaXMuYWxsb3dFbXB0eVJlc3BvbnNlO1xuICAgICAgICBpZiAodGhpcy5hdHRhY2hPcmlnaW5hbEl0ZW1zKVxuICAgICAgICAgICAgcmVzW1wiYXR0YWNoT3JpZ2luYWxJdGVtc1wiXSA9IHRoaXMuYXR0YWNoT3JpZ2luYWxJdGVtcztcbiAgICAgICAgdmFyIHByb3BlcnRpZXMgPSB0aGlzLmdldEN1c3RvbVByb3BlcnRpZXNOYW1lcygpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh0aGlzW3Byb3BlcnRpZXNbaV1dKVxuICAgICAgICAgICAgICAgIHJlc1twcm9wZXJ0aWVzW2ldXSA9IHRoaXNbcHJvcGVydGllc1tpXV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDaG9pY2VzUmVzdGZ1bC5wcm90b3R5cGUsIFwidXJsXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEEgUkVTVGZ1bCBzZXJ2aWNlJ3MgVVJMLlxuICAgICAgICAgKlxuICAgICAgICAgKiBUaGlzIHByb3BlcnR5IHN1cHBvcnRzIFtkeW5hbWljIFVSTHNdKGh0dHBzOi8vc3VydmV5anMuaW8vRG9jdW1lbnRhdGlvbi9MaWJyYXJ5P2lkPWRlc2lnbi1zdXJ2ZXktY29uZGl0aW9uYWwtbG9naWMjZHluYW1pYy10ZXh0cykuIEZvciBleGFtcGxlLCB0aGUgVVJMIGJlbG93IGRlcGVuZHMgb24gdGhlIGByZWdpb25gIHF1ZXN0aW9uJ3MgdmFsdWUuIFdoZW4gdGhlIHZhbHVlIGNoYW5nZXMsIHRoZSBzdXJ2ZXkgYXV0b21hdGljYWxseSBsb2FkcyBhIG5ldyBkYXRhc2V0IHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIHNlbGVjdGVkIHJlZ2lvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogYGBganNcbiAgICAgICAgICogdXJsOiBcImh0dHBzOi8vc3VydmV5anMuaW8vYXBpL0NvdW50cmllc0V4YW1wbGU/cmVnaW9uPXtyZWdpb259XCJcbiAgICAgICAgICogYGBgXG4gICAgICAgICAqXG4gICAgICAgICAqIFtWaWV3IERlbW9dKGh0dHBzOi8vc3VydmV5anMuaW8vRXhhbXBsZXMvTGlicmFyeS8/aWQ9cXVlc3Rpb250eXBlLWRyb3Bkb3ducmVzdGZ1bGwgKGxpbmtTdHlsZSkpXG4gICAgICAgICAqIEBzZWUgcGF0aFxuICAgICAgICAgKiBAc2VlIHZhbHVlTmFtZVxuICAgICAgICAgKiBAc2VlIHRpdGxlTmFtZVxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwidXJsXCIsIFwiXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInVybFwiLCB2YWwpO1xuICAgICAgICAgICAgdGhpcy5pc1VzaW5nQ2FjaGVGcm9tVXJsID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKCF2YWwpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKHZhbC5pbmRleE9mKENob2ljZXNSZXN0ZnVsLmNhY2hlVGV4dCkgPiAtMSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNVc2luZ0NhY2hlRnJvbVVybCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodmFsLmluZGV4T2YoQ2hvaWNlc1Jlc3RmdWwubm9DYWNoZVRleHQpID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1VzaW5nQ2FjaGVGcm9tVXJsID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENob2ljZXNSZXN0ZnVsLnByb3RvdHlwZSwgXCJwYXRoXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFBhdGggdG8gdGhlIGFycmF5IG9mIGNob2ljZXMuIFRoZSBmb2xsb3dpbmcgcGF0aCBzZXBhcmF0b3JzIGFyZSBhbGxvd2VkOiBzZW1pY29sb24gYDtgLCBjb21tYSBgLGAuXG4gICAgICAgICAqXG4gICAgICAgICAqIFNwZWNpZnkgdGhpcyBwcm9wZXJ0eSBvbmx5IGlmIHRoZSBhcnJheSBvZiBjaG9pY2VzIGlzIG5lc3RlZCB3aXRoaW4gdGhlIG9iamVjdCByZXR1cm5lZCBieSB0aGUgc2VydmljZS4gRm9yIGV4YW1wbGUsIHRoZSBzZXJ2aWNlIHJldHVybnMgdGhlIGZvbGxvd2luZyBvYmplY3Q6XG4gICAgICAgICAqXG4gICAgICAgICAqIGBgYGpzXG4gICAgICAgICAqIHtcbiAgICAgICAgICogICBjb3VudHJpZXM6IFsgLi4uIF0sXG4gICAgICAgICAqICAgY2FwaXRhbHM6IFsgLi4uIF1cbiAgICAgICAgICogfVxuICAgICAgICAgKiBgYGBcbiAgICAgICAgICpcbiAgICAgICAgICogVG8gcG9wdWxhdGUgY2hvaWNlcyB3aXRoIHZhbHVlcyBmcm9tIHRoZSBgY291bnRyaWVzYCBhcnJheSwgc2V0IHRoZSBgcGF0aGAgcHJvcGVydHkgdG8gYFwiY291bnRyaWVzXCJgLiBUbyB1c2UgdGhlIGBjYXBpdGFsc2AgYXJyYXksIHNldCB0aGlzIHByb3BlcnR5IHRvIGBcImNhcGl0YWxzXCJgLlxuICAgICAgICAgKiBAc2VlIHVybFxuICAgICAgICAgKiBAc2VlIHZhbHVlTmFtZVxuICAgICAgICAgKiBAc2VlIHRpdGxlTmFtZVxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgcmVzID0gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicGF0aFwiKTtcbiAgICAgICAgICAgIHJldHVybiAhIXJlcyA/IHJlcyA6IFwiXCI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicGF0aFwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENob2ljZXNSZXN0ZnVsLnByb3RvdHlwZSwgXCJ2YWx1ZU5hbWVcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHdoaWNoIHByb3BlcnR5IGluIHRoZSBvYnRhaW5lZCBkYXRhIG9iamVjdCBjb250YWlucyBjaG9pY2UgdmFsdWVzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBbVmlldyBEZW1vXShodHRwczovL3N1cnZleWpzLmlvL0V4YW1wbGVzL0xpYnJhcnkvP2lkPXF1ZXN0aW9udHlwZS1kcm9wZG93bnJlc3RmdWxsIChsaW5rU3R5bGUpKVxuICAgICAgICAgKlxuICAgICAgICAgKiBAc2VlIHVybFxuICAgICAgICAgKiBAc2VlIHBhdGhcbiAgICAgICAgICogQHNlZSB0aXRsZU5hbWVcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInZhbHVlTmFtZVwiLCBcIlwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJ2YWx1ZU5hbWVcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDaG9pY2VzUmVzdGZ1bC5wcm90b3R5cGUsIFwidGl0bGVOYW1lXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB3aGljaCBwcm9wZXJ0eSBpbiB0aGUgb2J0YWluZWQgZGF0YSBvYmplY3QgY29udGFpbnMgZGlzcGxheSB0ZXh0cyBmb3IgY2hvaWNlcy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHNlZSB1cmxcbiAgICAgICAgICogQHNlZSBwYXRoXG4gICAgICAgICAqIEBzZWUgdmFsdWVOYW1lXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ0aXRsZU5hbWVcIiwgXCJcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidGl0bGVOYW1lXCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ2hvaWNlc1Jlc3RmdWwucHJvdG90eXBlLCBcImltYWdlTGlua05hbWVcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHdoaWNoIHByb3BlcnR5IGluIHRoZSBvYnRhaW5lZCBkYXRhIG9iamVjdCBjb250YWlucyBpbWFnZSBVUkxzLiBVc2VkIG9ubHkgaW4gW0ltYWdlIFBpY2tlcl0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9FeGFtcGxlcy9MaWJyYXJ5P2lkPXF1ZXN0aW9udHlwZS1pbWFnZXBpY2tlcikgcXVlc3Rpb25zLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc2VlIHVybFxuICAgICAgICAgKiBAc2VlIHBhdGhcbiAgICAgICAgICogQHNlZSB2YWx1ZU5hbWVcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImltYWdlTGlua05hbWVcIiwgXCJcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaW1hZ2VMaW5rTmFtZVwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENob2ljZXNSZXN0ZnVsLnByb3RvdHlwZSwgXCJhbGxvd0VtcHR5UmVzcG9uc2VcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJhbGxvd0VtcHR5UmVzcG9uc2VcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiYWxsb3dFbXB0eVJlc3BvbnNlXCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ2hvaWNlc1Jlc3RmdWwucHJvdG90eXBlLCBcImF0dGFjaE9yaWdpbmFsSXRlbXNcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJhdHRhY2hPcmlnaW5hbEl0ZW1zXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImF0dGFjaE9yaWdpbmFsSXRlbXNcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDaG9pY2VzUmVzdGZ1bC5wcm90b3R5cGUsIFwiaXRlbVZhbHVlVHlwZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLm93bmVyKVxuICAgICAgICAgICAgICAgIHJldHVybiBcIml0ZW12YWx1ZVwiO1xuICAgICAgICAgICAgdmFyIHByb3AgPSBfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiU2VyaWFsaXplclwiXS5maW5kUHJvcGVydHkodGhpcy5vd25lci5nZXRUeXBlKCksIFwiY2hvaWNlc1wiKTtcbiAgICAgICAgICAgIGlmICghcHJvcClcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJpdGVtdmFsdWVcIjtcbiAgICAgICAgICAgIGlmIChwcm9wLnR5cGUgPT0gXCJpdGVtdmFsdWVbXVwiKVxuICAgICAgICAgICAgICAgIHJldHVybiBcIml0ZW12YWx1ZVwiO1xuICAgICAgICAgICAgcmV0dXJuIHByb3AudHlwZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIENob2ljZXNSZXN0ZnVsLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy51cmwgPSBcIlwiO1xuICAgICAgICB0aGlzLnBhdGggPSBcIlwiO1xuICAgICAgICB0aGlzLnZhbHVlTmFtZSA9IFwiXCI7XG4gICAgICAgIHRoaXMudGl0bGVOYW1lID0gXCJcIjtcbiAgICAgICAgdGhpcy5pbWFnZUxpbmtOYW1lID0gXCJcIjtcbiAgICAgICAgdmFyIHByb3BlcnRpZXMgPSB0aGlzLmdldEN1c3RvbVByb3BlcnRpZXNOYW1lcygpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh0aGlzW3Byb3BlcnRpZXNbaV1dKVxuICAgICAgICAgICAgICAgIHRoaXNbcHJvcGVydGllc1tpXV0gPSBcIlwiO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBDaG9pY2VzUmVzdGZ1bC5wcm90b3R5cGUuYmVmb3JlU2VuZFJlcXVlc3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuaXNSdW5uaW5nVmFsdWUgPSB0cnVlO1xuICAgICAgICBpZiAoISF0aGlzLmJlZm9yZVNlbmRSZXF1ZXN0Q2FsbGJhY2spIHtcbiAgICAgICAgICAgIHRoaXMuYmVmb3JlU2VuZFJlcXVlc3RDYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBDaG9pY2VzUmVzdGZ1bC5wcm90b3R5cGUuYmVmb3JlTG9hZFJlcXVlc3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuaXNSdW5uaW5nVmFsdWUgPSBmYWxzZTtcbiAgICB9O1xuICAgIENob2ljZXNSZXN0ZnVsLnByb3RvdHlwZS5vbkxvYWQgPSBmdW5jdGlvbiAocmVzdWx0LCBsb2FkaW5nT2JqSGFzaCkge1xuICAgICAgICBpZiAobG9hZGluZ09iakhhc2ggPT09IHZvaWQgMCkgeyBsb2FkaW5nT2JqSGFzaCA9IG51bGw7IH1cbiAgICAgICAgaWYgKCFsb2FkaW5nT2JqSGFzaCkge1xuICAgICAgICAgICAgbG9hZGluZ09iakhhc2ggPSB0aGlzLm9iakhhc2g7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGl0ZW1zID0gbmV3IEFycmF5KCk7XG4gICAgICAgIHZhciB1cGRhdGVkUmVzdWx0ID0gdGhpcy5nZXRSZXN1bHRBZnRlclBhdGgocmVzdWx0KTtcbiAgICAgICAgaWYgKHVwZGF0ZWRSZXN1bHQgJiYgdXBkYXRlZFJlc3VsdFtcImxlbmd0aFwiXSkge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB1cGRhdGVkUmVzdWx0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGl0ZW1WYWx1ZSA9IHVwZGF0ZWRSZXN1bHRbaV07XG4gICAgICAgICAgICAgICAgaWYgKCFpdGVtVmFsdWUpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9ICEhdGhpcy5nZXRJdGVtVmFsdWVDYWxsYmFja1xuICAgICAgICAgICAgICAgICAgICA/IHRoaXMuZ2V0SXRlbVZhbHVlQ2FsbGJhY2soaXRlbVZhbHVlKVxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMuZ2V0VmFsdWUoaXRlbVZhbHVlKTtcbiAgICAgICAgICAgICAgICB2YXIgaXRlbSA9IHRoaXMuY3JlYXRlSXRlbVZhbHVlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFRpdGxlKGl0ZW0sIGl0ZW1WYWx1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRDdXN0b21Qcm9wZXJ0aWVzKGl0ZW0sIGl0ZW1WYWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYXR0YWNoT3JpZ2luYWxJdGVtcykge1xuICAgICAgICAgICAgICAgICAgICBpdGVtLm9yaWdpbmFsSXRlbSA9IGl0ZW1WYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIGltYWdlTGluayA9IHRoaXMuZ2V0SW1hZ2VMaW5rKGl0ZW1WYWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKCEhaW1hZ2VMaW5rKSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uaW1hZ2VMaW5rID0gaW1hZ2VMaW5rO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmFsbG93RW1wdHlSZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBuZXcgX2Vycm9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJXZWJSZXF1ZXN0RW1wdHlFcnJvclwiXShudWxsLCB0aGlzLm93bmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy51cGRhdGVSZXN1bHRDYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlbXMgPSB0aGlzLnVwZGF0ZVJlc3VsdENhbGxiYWNrKGl0ZW1zLCByZXN1bHQpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzVXNpbmdDYWNoZSkge1xuICAgICAgICAgICAgQ2hvaWNlc1Jlc3RmdWwuaXRlbXNSZXN1bHRbbG9hZGluZ09iakhhc2hdID0gaXRlbXM7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jYWxsUmVzdWx0Q2FsbGJhY2soaXRlbXMsIGxvYWRpbmdPYmpIYXNoKTtcbiAgICAgICAgQ2hvaWNlc1Jlc3RmdWwudW5yZWdpc3RlclNhbWVSZXF1ZXN0cyh0aGlzLCBpdGVtcyk7XG4gICAgfTtcbiAgICBDaG9pY2VzUmVzdGZ1bC5wcm90b3R5cGUuY2FsbFJlc3VsdENhbGxiYWNrID0gZnVuY3Rpb24gKGl0ZW1zLCBsb2FkaW5nT2JqSGFzaCkge1xuICAgICAgICBpZiAobG9hZGluZ09iakhhc2ggIT0gdGhpcy5vYmpIYXNoKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLmdldFJlc3VsdENhbGxiYWNrKGl0ZW1zKTtcbiAgICB9O1xuICAgIENob2ljZXNSZXN0ZnVsLnByb3RvdHlwZS5zZXRDdXN0b21Qcm9wZXJ0aWVzID0gZnVuY3Rpb24gKGl0ZW0sIGl0ZW1WYWx1ZSkge1xuICAgICAgICB2YXIgcHJvcGVydGllcyA9IHRoaXMuZ2V0Q3VzdG9tUHJvcGVydGllcygpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBwcm9wID0gcHJvcGVydGllc1tpXTtcbiAgICAgICAgICAgIHZhciB2YWwgPSB0aGlzLmdldFZhbHVlQ29yZShpdGVtVmFsdWUsIHRoaXMuZ2V0UHJvcGVydHlCaW5kaW5nKHByb3AubmFtZSkpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlzVmFsdWVFbXB0eSh2YWwpKSB7XG4gICAgICAgICAgICAgICAgaXRlbVtwcm9wLm5hbWVdID0gdmFsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBDaG9pY2VzUmVzdGZ1bC5wcm90b3R5cGUuZ2V0UHJvcGVydHlCaW5kaW5nID0gZnVuY3Rpb24gKHByb3BlcnR5TmFtZSkge1xuICAgICAgICBpZiAodGhpc1t0aGlzLmdldEN1c3RvbVByb3BlcnR5TmFtZShwcm9wZXJ0eU5hbWUpXSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzW3RoaXMuZ2V0Q3VzdG9tUHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZSldO1xuICAgICAgICBpZiAodGhpc1twcm9wZXJ0eU5hbWVdKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXNbcHJvcGVydHlOYW1lXTtcbiAgICAgICAgcmV0dXJuIHByb3BlcnR5TmFtZTtcbiAgICB9O1xuICAgIENob2ljZXNSZXN0ZnVsLnByb3RvdHlwZS5vbkVycm9yID0gZnVuY3Rpb24gKHN0YXR1cywgcmVzcG9uc2UpIHtcbiAgICAgICAgdGhpcy5lcnJvciA9IG5ldyBfZXJyb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcIldlYlJlcXVlc3RFcnJvclwiXShzdGF0dXMsIHJlc3BvbnNlLCB0aGlzLm93bmVyKTtcbiAgICAgICAgdGhpcy5kb0VtcHR5UmVzdWx0Q2FsbGJhY2socmVzcG9uc2UpO1xuICAgICAgICBDaG9pY2VzUmVzdGZ1bC51bnJlZ2lzdGVyU2FtZVJlcXVlc3RzKHRoaXMsIFtdKTtcbiAgICB9O1xuICAgIENob2ljZXNSZXN0ZnVsLnByb3RvdHlwZS5nZXRSZXN1bHRBZnRlclBhdGggPSBmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgIGlmICghcmVzdWx0KVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgaWYgKCF0aGlzLnByb2Nlc3NlZFBhdGgpXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB2YXIgcGF0aGVzID0gdGhpcy5nZXRQYXRoZXMoKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXRoZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdFtwYXRoZXNbaV1dO1xuICAgICAgICAgICAgaWYgKCFyZXN1bHQpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICAgIENob2ljZXNSZXN0ZnVsLnByb3RvdHlwZS5nZXRQYXRoZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBwYXRoZXMgPSBbXTtcbiAgICAgICAgaWYgKHRoaXMucHJvY2Vzc2VkUGF0aC5pbmRleE9mKFwiO1wiKSA+IC0xKSB7XG4gICAgICAgICAgICBwYXRoZXMgPSB0aGlzLnBhdGguc3BsaXQoXCI7XCIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcGF0aGVzID0gdGhpcy5wcm9jZXNzZWRQYXRoLnNwbGl0KFwiLFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGF0aGVzLmxlbmd0aCA9PSAwKVxuICAgICAgICAgICAgcGF0aGVzLnB1c2godGhpcy5wcm9jZXNzZWRQYXRoKTtcbiAgICAgICAgcmV0dXJuIHBhdGhlcztcbiAgICB9O1xuICAgIENob2ljZXNSZXN0ZnVsLnByb3RvdHlwZS5nZXRWYWx1ZSA9IGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIGlmICghaXRlbSlcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICBpZiAodGhpcy52YWx1ZU5hbWUpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRWYWx1ZUNvcmUoaXRlbSwgdGhpcy52YWx1ZU5hbWUpO1xuICAgICAgICBpZiAoIShpdGVtIGluc3RhbmNlb2YgT2JqZWN0KSlcbiAgICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICB2YXIgbGVuID0gT2JqZWN0LmtleXMoaXRlbSkubGVuZ3RoO1xuICAgICAgICBpZiAobGVuIDwgMSlcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICByZXR1cm4gaXRlbVtPYmplY3Qua2V5cyhpdGVtKVswXV07XG4gICAgfTtcbiAgICBDaG9pY2VzUmVzdGZ1bC5wcm90b3R5cGUuc2V0VGl0bGUgPSBmdW5jdGlvbiAoaXRlbSwgaXRlbVZhbHVlKSB7XG4gICAgICAgIHZhciB0aXRsZSA9IHRoaXMudGl0bGVOYW1lID8gdGhpcy50aXRsZU5hbWUgOiBcInRpdGxlXCI7XG4gICAgICAgIHZhciB2YWwgPSB0aGlzLmdldFZhbHVlQ29yZShpdGVtVmFsdWUsIHRpdGxlKTtcbiAgICAgICAgaWYgKCF2YWwpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmICh0eXBlb2YgdmFsID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBpdGVtLnRleHQgPSB2YWw7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpdGVtLmxvY1RleHQuc2V0SnNvbih2YWwpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBDaG9pY2VzUmVzdGZ1bC5wcm90b3R5cGUuZ2V0SW1hZ2VMaW5rID0gZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgdmFyIGltYWdlTGluayA9IHRoaXMuaW1hZ2VMaW5rTmFtZSA/IHRoaXMuaW1hZ2VMaW5rTmFtZSA6IFwiaW1hZ2VMaW5rXCI7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFZhbHVlQ29yZShpdGVtLCBpbWFnZUxpbmspO1xuICAgIH07XG4gICAgQ2hvaWNlc1Jlc3RmdWwucHJvdG90eXBlLmdldFZhbHVlQ29yZSA9IGZ1bmN0aW9uIChpdGVtLCBwcm9wZXJ0eSkge1xuICAgICAgICBpZiAoIWl0ZW0pXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgaWYgKHByb3BlcnR5LmluZGV4T2YoXCIuXCIpIDwgMClcbiAgICAgICAgICAgIHJldHVybiBpdGVtW3Byb3BlcnR5XTtcbiAgICAgICAgdmFyIHByb3BlcnRpZXMgPSBwcm9wZXJ0eS5zcGxpdChcIi5cIik7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaXRlbSA9IGl0ZW1bcHJvcGVydGllc1tpXV07XG4gICAgICAgICAgICBpZiAoIWl0ZW0pXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ2hvaWNlc1Jlc3RmdWwucHJvdG90eXBlLCBcIm9iakhhc2hcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAodGhpcy5wcm9jZXNzZWRVcmwgK1xuICAgICAgICAgICAgICAgIFwiO1wiICtcbiAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NlZFBhdGggK1xuICAgICAgICAgICAgICAgIFwiO1wiICtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlTmFtZSArXG4gICAgICAgICAgICAgICAgXCI7XCIgK1xuICAgICAgICAgICAgICAgIHRoaXMudGl0bGVOYW1lICtcbiAgICAgICAgICAgICAgICBcIjtcIiArXG4gICAgICAgICAgICAgICAgdGhpcy5pbWFnZUxpbmtOYW1lKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIENob2ljZXNSZXN0ZnVsLmNhY2hlVGV4dCA9IFwie0NBQ0hFfVwiO1xuICAgIENob2ljZXNSZXN0ZnVsLm5vQ2FjaGVUZXh0ID0gXCJ7Tk9DQUNIRX1cIjtcbiAgICBDaG9pY2VzUmVzdGZ1bC5pdGVtc1Jlc3VsdCA9IHt9O1xuICAgIENob2ljZXNSZXN0ZnVsLnNlbmRpbmdTYW1lUmVxdWVzdHMgPSB7fTtcbiAgICByZXR1cm4gQ2hvaWNlc1Jlc3RmdWw7XG59KF9iYXNlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJCYXNlXCJdKSk7XG5cbi8qKlxuICogT2Jzb2xldGUsIHBsZWFzZSB1c2UgQ2hvaWNlc1Jlc3RmdWxcbiAqL1xudmFyIENob2ljZXNSZXN0ZnVsbCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQ2hvaWNlc1Jlc3RmdWxsLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIENob2ljZXNSZXN0ZnVsbCgpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ2hvaWNlc1Jlc3RmdWxsLCBcIkVuY29kZVBhcmFtZXRlcnNcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBDaG9pY2VzUmVzdGZ1bC5FbmNvZGVQYXJhbWV0ZXJzO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIENob2ljZXNSZXN0ZnVsLkVuY29kZVBhcmFtZXRlcnMgPSB2YWw7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBDaG9pY2VzUmVzdGZ1bGwuY2xlYXJDYWNoZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgQ2hvaWNlc1Jlc3RmdWwuY2xlYXJDYWNoZSgpO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENob2ljZXNSZXN0ZnVsbCwgXCJvbkJlZm9yZVNlbmRSZXF1ZXN0XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gQ2hvaWNlc1Jlc3RmdWwub25CZWZvcmVTZW5kUmVxdWVzdDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICBDaG9pY2VzUmVzdGZ1bC5vbkJlZm9yZVNlbmRSZXF1ZXN0ID0gdmFsO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgcmV0dXJuIENob2ljZXNSZXN0ZnVsbDtcbn0oQ2hvaWNlc1Jlc3RmdWwpKTtcblxuX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIlNlcmlhbGl6ZXJcIl0uYWRkQ2xhc3MoXCJjaG9pY2VzQnlVcmxcIiwgW1xuICAgIFwidXJsXCIsXG4gICAgXCJwYXRoXCIsXG4gICAgXCJ2YWx1ZU5hbWVcIixcbiAgICBcInRpdGxlTmFtZVwiLFxuICAgIHtcbiAgICAgICAgbmFtZTogXCJpbWFnZUxpbmtOYW1lXCIsXG4gICAgICAgIHZpc2libGVJZjogZnVuY3Rpb24gKG9iaikge1xuICAgICAgICAgICAgcmV0dXJuICEhb2JqICYmICEhb2JqLm93bmVyICYmIG9iai5vd25lci5nZXRUeXBlKCkgPT0gXCJpbWFnZXBpY2tlclwiO1xuICAgICAgICB9LFxuICAgIH0sXG4gICAgeyBuYW1lOiBcImFsbG93RW1wdHlSZXNwb25zZTpib29sZWFuXCIgfSxcbiAgICB7IG5hbWU6IFwiYXR0YWNoT3JpZ2luYWxJdGVtczpib29sZWFuXCIsIHZpc2libGU6IGZhbHNlIH0sXG5dLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBDaG9pY2VzUmVzdGZ1bCgpO1xufSk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvY29uZGl0aW9uUHJvY2Vzc1ZhbHVlLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9jb25kaXRpb25Qcm9jZXNzVmFsdWUudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFByb2Nlc3NWYWx1ZSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJQcm9jZXNzVmFsdWVcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBQcm9jZXNzVmFsdWU7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9oZWxwZXJzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2hlbHBlcnMgKi8gXCIuL3NyYy9oZWxwZXJzLnRzXCIpO1xuXG52YXIgc3VydmV5QnVpbHRJblZhcmlibGUgPSBcIkBzdXJ2ZXlcIjtcbnZhciBQcm9jZXNzVmFsdWUgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gUHJvY2Vzc1ZhbHVlKCkge1xuICAgICAgICB0aGlzLnZhbHVlcyA9IG51bGw7XG4gICAgICAgIHRoaXMucHJvcGVydGllcyA9IG51bGw7XG4gICAgfVxuICAgIFByb2Nlc3NWYWx1ZS5wcm90b3R5cGUuZ2V0Rmlyc3ROYW1lID0gZnVuY3Rpb24gKHRleHQsIG9iaikge1xuICAgICAgICBpZiAob2JqID09PSB2b2lkIDApIHsgb2JqID0gbnVsbDsgfVxuICAgICAgICBpZiAoIXRleHQpXG4gICAgICAgICAgICByZXR1cm4gdGV4dDtcbiAgICAgICAgdmFyIHJlcyA9IFwiXCI7XG4gICAgICAgIGlmICghIW9iaikge1xuICAgICAgICAgICAgcmVzID0gdGhpcy5nZXRGaXJzdFByb3BlcnR5TmFtZSh0ZXh0LCBvYmopO1xuICAgICAgICAgICAgaWYgKCEhcmVzKVxuICAgICAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH1cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXh0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgY2ggPSB0ZXh0W2ldO1xuICAgICAgICAgICAgaWYgKGNoID09IFwiLlwiIHx8IGNoID09IFwiW1wiKVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgcmVzICs9IGNoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfTtcbiAgICBQcm9jZXNzVmFsdWUucHJvdG90eXBlLmhhc1ZhbHVlID0gZnVuY3Rpb24gKHRleHQsIHZhbHVlcykge1xuICAgICAgICBpZiAodmFsdWVzID09PSB2b2lkIDApIHsgdmFsdWVzID0gbnVsbDsgfVxuICAgICAgICBpZiAoIXZhbHVlcylcbiAgICAgICAgICAgIHZhbHVlcyA9IHRoaXMudmFsdWVzO1xuICAgICAgICB2YXIgcmVzID0gdGhpcy5nZXRWYWx1ZUNvcmUodGV4dCwgdmFsdWVzKTtcbiAgICAgICAgcmV0dXJuIHJlcy5oYXNWYWx1ZTtcbiAgICB9O1xuICAgIFByb2Nlc3NWYWx1ZS5wcm90b3R5cGUuZ2V0VmFsdWUgPSBmdW5jdGlvbiAodGV4dCwgdmFsdWVzKSB7XG4gICAgICAgIGlmICh2YWx1ZXMgPT09IHZvaWQgMCkgeyB2YWx1ZXMgPSBudWxsOyB9XG4gICAgICAgIGlmICghdmFsdWVzKVxuICAgICAgICAgICAgdmFsdWVzID0gdGhpcy52YWx1ZXM7XG4gICAgICAgIHZhciByZXMgPSB0aGlzLmdldFZhbHVlQ29yZSh0ZXh0LCB2YWx1ZXMpO1xuICAgICAgICByZXR1cm4gcmVzLnZhbHVlO1xuICAgIH07XG4gICAgUHJvY2Vzc1ZhbHVlLnByb3RvdHlwZS5zZXRWYWx1ZSA9IGZ1bmN0aW9uIChvYmosIHRleHQsIHZhbHVlKSB7XG4gICAgICAgIGlmICghdGV4dClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIG5vbk5lc3RlZE9iaiA9IHRoaXMuZ2V0Tm9uTmVzdGVkT2JqZWN0KG9iaiwgdGV4dCwgdHJ1ZSk7XG4gICAgICAgIGlmICghbm9uTmVzdGVkT2JqKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBvYmogPSBub25OZXN0ZWRPYmoudmFsdWU7XG4gICAgICAgIHRleHQgPSBub25OZXN0ZWRPYmoudGV4dDtcbiAgICAgICAgaWYgKCEhb2JqICYmICEhdGV4dCkge1xuICAgICAgICAgICAgb2JqW3RleHRdID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFByb2Nlc3NWYWx1ZS5wcm90b3R5cGUuZ2V0VmFsdWVJbmZvID0gZnVuY3Rpb24gKHZhbHVlSW5mbykge1xuICAgICAgICBpZiAoISF2YWx1ZUluZm8ucGF0aCkge1xuICAgICAgICAgICAgdmFsdWVJbmZvLnZhbHVlID0gdGhpcy5nZXRWYWx1ZUZyb21QYXRoKHZhbHVlSW5mby5wYXRoLCB0aGlzLnZhbHVlcyk7XG4gICAgICAgICAgICB2YWx1ZUluZm8uaGFzVmFsdWUgPVxuICAgICAgICAgICAgICAgIHZhbHVlSW5mby52YWx1ZSAhPT0gbnVsbCAmJiAhX2hlbHBlcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkhlbHBlcnNcIl0uaXNWYWx1ZUVtcHR5KHZhbHVlSW5mby52YWx1ZSk7XG4gICAgICAgICAgICBpZiAoIXZhbHVlSW5mby5oYXNWYWx1ZSAmJlxuICAgICAgICAgICAgICAgIHZhbHVlSW5mby5wYXRoLmxlbmd0aCA+IDEgJiZcbiAgICAgICAgICAgICAgICB2YWx1ZUluZm8ucGF0aFt2YWx1ZUluZm8ucGF0aC5sZW5ndGggLSAxXSA9PSBcImxlbmd0aFwiKSB7XG4gICAgICAgICAgICAgICAgdmFsdWVJbmZvLmhhc1ZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB2YWx1ZUluZm8udmFsdWUgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciByZXMgPSB0aGlzLmdldFZhbHVlQ29yZSh2YWx1ZUluZm8ubmFtZSwgdGhpcy52YWx1ZXMpO1xuICAgICAgICB2YWx1ZUluZm8udmFsdWUgPSByZXMudmFsdWU7XG4gICAgICAgIHZhbHVlSW5mby5oYXNWYWx1ZSA9IHJlcy5oYXNWYWx1ZTtcbiAgICAgICAgdmFsdWVJbmZvLnBhdGggPSByZXMuaGFzVmFsdWUgPyByZXMucGF0aCA6IG51bGw7XG4gICAgICAgIHZhbHVlSW5mby5zY3RyaWN0Q29tcGFyZSA9IHJlcy5zY3RyaWN0Q29tcGFyZTtcbiAgICB9O1xuICAgIFByb2Nlc3NWYWx1ZS5wcm90b3R5cGUuaXNBbnlLZXlDaGFuZ2VkID0gZnVuY3Rpb24gKGtleXMsIHVzZWROYW1lcykge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVzZWROYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIG5hbWUgPSB1c2VkTmFtZXNbaV07XG4gICAgICAgICAgICBpZiAoa2V5cy5oYXNPd25Qcm9wZXJ0eShuYW1lKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIHZhciBmaXJzdE5hbWUgPSB0aGlzLmdldEZpcnN0TmFtZShuYW1lKTtcbiAgICAgICAgICAgIGlmICgha2V5cy5oYXNPd25Qcm9wZXJ0eShmaXJzdE5hbWUpKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgaWYgKG5hbWUgPT09IGZpcnN0TmFtZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIHZhciBrZXlWYWx1ZSA9IGtleXNbZmlyc3ROYW1lXTtcbiAgICAgICAgICAgIGlmIChrZXlWYWx1ZSA9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBpZiAoIWtleVZhbHVlLmhhc093blByb3BlcnR5KFwib2xkVmFsdWVcIikgfHxcbiAgICAgICAgICAgICAgICAha2V5VmFsdWUuaGFzT3duUHJvcGVydHkoXCJuZXdWYWx1ZVwiKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIHZhciB2ID0ge307XG4gICAgICAgICAgICB2W2ZpcnN0TmFtZV0gPSBrZXlWYWx1ZVtcIm9sZFZhbHVlXCJdO1xuICAgICAgICAgICAgdmFyIG9sZFZhbHVlID0gdGhpcy5nZXRWYWx1ZShuYW1lLCB2KTtcbiAgICAgICAgICAgIHZbZmlyc3ROYW1lXSA9IGtleVZhbHVlW1wibmV3VmFsdWVcIl07XG4gICAgICAgICAgICB2YXIgbmV3VmFsdWUgPSB0aGlzLmdldFZhbHVlKG5hbWUsIHYpO1xuICAgICAgICAgICAgaWYgKCFfaGVscGVyc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiSGVscGVyc1wiXS5pc1R3b1ZhbHVlRXF1YWxzKG9sZFZhbHVlLCBuZXdWYWx1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gICAgUHJvY2Vzc1ZhbHVlLnByb3RvdHlwZS5nZXRWYWx1ZUZyb21QYXRoID0gZnVuY3Rpb24gKHBhdGgsIHZhbHVlcykge1xuICAgICAgICBpZiAocGF0aC5sZW5ndGggPT09IDIgJiYgcGF0aFswXSA9PT0gc3VydmV5QnVpbHRJblZhcmlibGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFZhbHVlRnJvbVN1cnZleShwYXRoWzFdKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgICB3aGlsZSAoISF2YWx1ZXMgJiYgaW5kZXggPCBwYXRoLmxlbmd0aCkge1xuICAgICAgICAgICAgdmFyIGluZF9uYW1lID0gcGF0aFtpbmRleF07XG4gICAgICAgICAgICBpZiAoX2hlbHBlcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkhlbHBlcnNcIl0uaXNOdW1iZXIoaW5kX25hbWUpICYmXG4gICAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheSh2YWx1ZXMpICYmXG4gICAgICAgICAgICAgICAgaW5kX25hbWUgPj0gdmFsdWVzLmxlbmd0aClcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIHZhbHVlcyA9IHZhbHVlc1tpbmRfbmFtZV07XG4gICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZXM7XG4gICAgfTtcbiAgICBQcm9jZXNzVmFsdWUucHJvdG90eXBlLmdldFZhbHVlQ29yZSA9IGZ1bmN0aW9uICh0ZXh0LCB2YWx1ZXMpIHtcbiAgICAgICAgdmFyIHF1ZXN0aW9uID0gdGhpcy5nZXRRdWVzdGlvbkRpcmVjdGx5KHRleHQpO1xuICAgICAgICBpZiAocXVlc3Rpb24pIHtcbiAgICAgICAgICAgIHJldHVybiB7IGhhc1ZhbHVlOiB0cnVlLCB2YWx1ZTogcXVlc3Rpb24udmFsdWUsIHBhdGg6IFt0ZXh0XSwgc2N0cmljdENvbXBhcmU6IHF1ZXN0aW9uLnJlcXVpcmVTdHJpY3RDb21wYXJlIH07XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHJlcyA9IHRoaXMuZ2V0VmFsdWVGcm9tVmFsdWVzKHRleHQsIHZhbHVlcyk7XG4gICAgICAgIGlmICghIXRleHQgJiYgIXJlcy5oYXNWYWx1ZSkge1xuICAgICAgICAgICAgdmFyIHZhbCA9IHRoaXMuZ2V0VmFsdWVGcm9tU3VydmV5KHRleHQpO1xuICAgICAgICAgICAgaWYgKHZhbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmVzLmhhc1ZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXMudmFsdWUgPSB2YWw7XG4gICAgICAgICAgICAgICAgcmVzLnBhdGggPSBbc3VydmV5QnVpbHRJblZhcmlibGUsIHRleHRdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfTtcbiAgICBQcm9jZXNzVmFsdWUucHJvdG90eXBlLmdldFF1ZXN0aW9uRGlyZWN0bHkgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICBpZiAoISF0aGlzLnByb3BlcnRpZXMgJiYgISF0aGlzLnByb3BlcnRpZXMuc3VydmV5KVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvcGVydGllcy5zdXJ2ZXkuZ2V0UXVlc3Rpb25CeVZhbHVlTmFtZShuYW1lKTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIFByb2Nlc3NWYWx1ZS5wcm90b3R5cGUuZ2V0VmFsdWVGcm9tU3VydmV5ID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgaWYgKCEhdGhpcy5wcm9wZXJ0aWVzICYmICEhdGhpcy5wcm9wZXJ0aWVzLnN1cnZleSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXMuc3VydmV5LmdldEJ1aWx0SW5WYXJpYWJsZVZhbHVlKG5hbWUudG9Mb2NhbGVMb3dlckNhc2UoKSk7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfTtcbiAgICBQcm9jZXNzVmFsdWUucHJvdG90eXBlLmdldFZhbHVlRnJvbVZhbHVlcyA9IGZ1bmN0aW9uICh0ZXh0LCB2YWx1ZXMpIHtcbiAgICAgICAgdmFyIHJlcyA9IHsgaGFzVmFsdWU6IGZhbHNlLCB2YWx1ZTogbnVsbCwgcGF0aDogbnVsbCB9O1xuICAgICAgICB2YXIgY3VyVmFsdWUgPSB2YWx1ZXM7XG4gICAgICAgIGlmICghY3VyVmFsdWUgJiYgY3VyVmFsdWUgIT09IDAgJiYgY3VyVmFsdWUgIT09IGZhbHNlKVxuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgaWYgKHRleHQgJiZcbiAgICAgICAgICAgIHRleHQubGFzdEluZGV4T2YoXCIubGVuZ3RoXCIpID4gLTEgJiZcbiAgICAgICAgICAgIHRleHQubGFzdEluZGV4T2YoXCIubGVuZ3RoXCIpID09PSB0ZXh0Lmxlbmd0aCAtIFwiLmxlbmd0aFwiLmxlbmd0aCkge1xuICAgICAgICAgICAgcmVzLnZhbHVlID0gMDtcbiAgICAgICAgICAgIHJlcy5oYXNWYWx1ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG5vbk5lc3RlZE9iaiA9IHRoaXMuZ2V0Tm9uTmVzdGVkT2JqZWN0KGN1clZhbHVlLCB0ZXh0LCBmYWxzZSk7XG4gICAgICAgIGlmICghbm9uTmVzdGVkT2JqKVxuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgcmVzLnBhdGggPSBub25OZXN0ZWRPYmoucGF0aDtcbiAgICAgICAgcmVzLnZhbHVlID0gISFub25OZXN0ZWRPYmoudGV4dFxuICAgICAgICAgICAgPyB0aGlzLmdldE9iamVjdFZhbHVlKG5vbk5lc3RlZE9iai52YWx1ZSwgbm9uTmVzdGVkT2JqLnRleHQpXG4gICAgICAgICAgICA6IG5vbk5lc3RlZE9iai52YWx1ZTtcbiAgICAgICAgcmVzLmhhc1ZhbHVlID0gIV9oZWxwZXJzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJIZWxwZXJzXCJdLmlzVmFsdWVFbXB0eShyZXMudmFsdWUpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH07XG4gICAgUHJvY2Vzc1ZhbHVlLnByb3RvdHlwZS5nZXROb25OZXN0ZWRPYmplY3QgPSBmdW5jdGlvbiAob2JqLCB0ZXh0LCBjcmVhdGVQYXRoKSB7XG4gICAgICAgIHZhciBjdXJOYW1lID0gdGhpcy5nZXRGaXJzdFByb3BlcnR5TmFtZSh0ZXh0LCBvYmosIGNyZWF0ZVBhdGgpO1xuICAgICAgICB2YXIgcGF0aCA9ICEhY3VyTmFtZSA/IFtjdXJOYW1lXSA6IG51bGw7XG4gICAgICAgIHdoaWxlICh0ZXh0ICE9IGN1ck5hbWUgJiYgISFvYmopIHtcbiAgICAgICAgICAgIHZhciBpc0FycmF5ID0gdGV4dFswXSA9PSBcIltcIjtcbiAgICAgICAgICAgIGlmICghaXNBcnJheSkge1xuICAgICAgICAgICAgICAgIGlmICghY3VyTmFtZSAmJiB0ZXh0ID09IHRoaXMuZ2V0Rmlyc3ROYW1lKHRleHQpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogb2JqLCB0ZXh0OiB0ZXh0LCBwYXRoOiBwYXRoIH07XG4gICAgICAgICAgICAgICAgb2JqID0gdGhpcy5nZXRPYmplY3RWYWx1ZShvYmosIGN1ck5hbWUpO1xuICAgICAgICAgICAgICAgIGlmIChfaGVscGVyc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiSGVscGVyc1wiXS5pc1ZhbHVlRW1wdHkob2JqKSAmJiAhY3JlYXRlUGF0aClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgdGV4dCA9IHRleHQuc3Vic3RyaW5nKGN1ck5hbWUubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBvYmpJbkFycmF5ID0gdGhpcy5nZXRPYmpJbkFycmF5KG9iaiwgdGV4dCk7XG4gICAgICAgICAgICAgICAgaWYgKCFvYmpJbkFycmF5KVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICBvYmogPSBvYmpJbkFycmF5LnZhbHVlO1xuICAgICAgICAgICAgICAgIHRleHQgPSBvYmpJbkFycmF5LnRleHQ7XG4gICAgICAgICAgICAgICAgcGF0aC5wdXNoKG9iakluQXJyYXkuaW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCEhdGV4dCAmJiB0ZXh0WzBdID09IFwiLlwiKSB7XG4gICAgICAgICAgICAgICAgdGV4dCA9IHRleHQuc3Vic3RyaW5nKDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY3VyTmFtZSA9IHRoaXMuZ2V0Rmlyc3RQcm9wZXJ0eU5hbWUodGV4dCwgb2JqLCBjcmVhdGVQYXRoKTtcbiAgICAgICAgICAgIGlmICghIWN1ck5hbWUpIHtcbiAgICAgICAgICAgICAgICBwYXRoLnB1c2goY3VyTmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG9iaiwgdGV4dDogdGV4dCwgcGF0aDogcGF0aCB9O1xuICAgIH07XG4gICAgUHJvY2Vzc1ZhbHVlLnByb3RvdHlwZS5nZXRPYmpJbkFycmF5ID0gZnVuY3Rpb24gKGN1clZhbHVlLCB0ZXh0KSB7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShjdXJWYWx1ZSkpXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgdmFyIGluZGV4ID0gMTtcbiAgICAgICAgdmFyIHN0ciA9IFwiXCI7XG4gICAgICAgIHdoaWxlIChpbmRleCA8IHRleHQubGVuZ3RoICYmIHRleHRbaW5kZXhdICE9IFwiXVwiKSB7XG4gICAgICAgICAgICBzdHIgKz0gdGV4dFtpbmRleF07XG4gICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICB9XG4gICAgICAgIHRleHQgPSBpbmRleCA8IHRleHQubGVuZ3RoID8gdGV4dC5zdWJzdHJpbmcoaW5kZXggKyAxKSA6IFwiXCI7XG4gICAgICAgIGluZGV4ID0gdGhpcy5nZXRJbnRWYWx1ZShzdHIpO1xuICAgICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGN1clZhbHVlLmxlbmd0aClcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICByZXR1cm4geyB2YWx1ZTogY3VyVmFsdWVbaW5kZXhdLCB0ZXh0OiB0ZXh0LCBpbmRleDogaW5kZXggfTtcbiAgICB9O1xuICAgIFByb2Nlc3NWYWx1ZS5wcm90b3R5cGUuZ2V0Rmlyc3RQcm9wZXJ0eU5hbWUgPSBmdW5jdGlvbiAobmFtZSwgb2JqLCBjcmVhdGVQcm9wKSB7XG4gICAgICAgIGlmIChjcmVhdGVQcm9wID09PSB2b2lkIDApIHsgY3JlYXRlUHJvcCA9IGZhbHNlOyB9XG4gICAgICAgIGlmICghbmFtZSlcbiAgICAgICAgICAgIHJldHVybiBuYW1lO1xuICAgICAgICBpZiAoIW9iailcbiAgICAgICAgICAgIG9iaiA9IHt9O1xuICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KG5hbWUpKVxuICAgICAgICAgICAgcmV0dXJuIG5hbWU7XG4gICAgICAgIHZhciBuYW1lSW5Mb3cgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHZhciBBID0gbmFtZUluTG93WzBdO1xuICAgICAgICB2YXIgYSA9IEEudG9VcHBlckNhc2UoKTtcbiAgICAgICAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgICAgICAgICAgdmFyIGZpcnN0ID0ga2V5WzBdO1xuICAgICAgICAgICAgaWYgKGZpcnN0ID09PSBhIHx8IGZpcnN0ID09PSBBKSB7XG4gICAgICAgICAgICAgICAgdmFyIGtleU5hbWUgPSBrZXkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICBpZiAoa2V5TmFtZSA9PSBuYW1lSW5Mb3cpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBrZXk7XG4gICAgICAgICAgICAgICAgaWYgKG5hbWVJbkxvdy5sZW5ndGggPD0ga2V5TmFtZS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIHZhciBjaCA9IG5hbWVJbkxvd1trZXlOYW1lLmxlbmd0aF07XG4gICAgICAgICAgICAgICAgaWYgKGNoICE9IFwiLlwiICYmIGNoICE9IFwiW1wiKVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBpZiAoa2V5TmFtZSA9PSBuYW1lSW5Mb3cuc3Vic3RyaW5nKDAsIGtleU5hbWUubGVuZ3RoKSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGtleTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoY3JlYXRlUHJvcCAmJiBuYW1lWzBdICE9PSBcIltcIikge1xuICAgICAgICAgICAgdmFyIGluZCA9IG5hbWUuaW5kZXhPZihcIi5cIik7XG4gICAgICAgICAgICBpZiAoaW5kID4gLTEpIHtcbiAgICAgICAgICAgICAgICBuYW1lID0gbmFtZS5zdWJzdHJpbmcoMCwgaW5kKTtcbiAgICAgICAgICAgICAgICBvYmpbbmFtZV0gPSB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuYW1lO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgIH07XG4gICAgUHJvY2Vzc1ZhbHVlLnByb3RvdHlwZS5nZXRPYmplY3RWYWx1ZSA9IGZ1bmN0aW9uIChvYmosIG5hbWUpIHtcbiAgICAgICAgaWYgKCFuYW1lKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIHJldHVybiBvYmpbbmFtZV07XG4gICAgfTtcbiAgICBQcm9jZXNzVmFsdWUucHJvdG90eXBlLmdldEludFZhbHVlID0gZnVuY3Rpb24gKHN0cikge1xuICAgICAgICBpZiAoc3RyID09IFwiMFwiIHx8ICgoc3RyIHwgMCkgPiAwICYmIHN0ciAlIDEgPT0gMCkpXG4gICAgICAgICAgICByZXR1cm4gTnVtYmVyKHN0cik7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9O1xuICAgIHJldHVybiBQcm9jZXNzVmFsdWU7XG59KCkpO1xuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvY29uZGl0aW9ucy50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL2NvbmRpdGlvbnMudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBFeHByZXNzaW9uRXhlY3V0b3IsIEV4cHJlc3Npb25SdW5uZXJCYXNlLCBDb25kaXRpb25SdW5uZXIsIEV4cHJlc3Npb25SdW5uZXIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiRXhwcmVzc2lvbkV4ZWN1dG9yXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRXhwcmVzc2lvbkV4ZWN1dG9yOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJFeHByZXNzaW9uUnVubmVyQmFzZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEV4cHJlc3Npb25SdW5uZXJCYXNlOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJDb25kaXRpb25SdW5uZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBDb25kaXRpb25SdW5uZXI7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkV4cHJlc3Npb25SdW5uZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBFeHByZXNzaW9uUnVubmVyOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfY29uZGl0aW9uUHJvY2Vzc1ZhbHVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2NvbmRpdGlvblByb2Nlc3NWYWx1ZSAqLyBcIi4vc3JjL2NvbmRpdGlvblByb2Nlc3NWYWx1ZS50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfY29uZGl0aW9uc1BhcnNlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9jb25kaXRpb25zUGFyc2VyICovIFwiLi9zcmMvY29uZGl0aW9uc1BhcnNlci50c1wiKTtcbnZhciBfX2V4dGVuZHMgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xuXG5cbnZhciBFeHByZXNzaW9uRXhlY3V0b3IgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gRXhwcmVzc2lvbkV4ZWN1dG9yKGV4cHJlc3Npb24pIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzVmFsdWUgPSBuZXcgX2NvbmRpdGlvblByb2Nlc3NWYWx1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiUHJvY2Vzc1ZhbHVlXCJdKCk7XG4gICAgICAgIHRoaXMucGFyc2VyID0gbmV3IF9jb25kaXRpb25zUGFyc2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJDb25kaXRpb25zUGFyc2VyXCJdKCk7XG4gICAgICAgIHRoaXMuaXNBc3luY1ZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaGFzRnVuY3Rpb25WYWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNldEV4cHJlc3Npb24oZXhwcmVzc2lvbik7XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFeHByZXNzaW9uRXhlY3V0b3IucHJvdG90eXBlLCBcImV4cHJlc3Npb25cIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmV4cHJlc3Npb25WYWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIEV4cHJlc3Npb25FeGVjdXRvci5wcm90b3R5cGUuc2V0RXhwcmVzc2lvbiA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5leHByZXNzaW9uID09PSB2YWx1ZSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5leHByZXNzaW9uVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5vcGVyYW5kID0gdGhpcy5wYXJzZXIucGFyc2VFeHByZXNzaW9uKHZhbHVlKTtcbiAgICAgICAgdGhpcy5oYXNGdW5jdGlvblZhbHVlID0gdGhpcy5jYW5SdW4oKSA/IHRoaXMub3BlcmFuZC5oYXNGdW5jdGlvbigpIDogZmFsc2U7XG4gICAgICAgIHRoaXMuaXNBc3luY1ZhbHVlID0gdGhpcy5oYXNGdW5jdGlvbigpXG4gICAgICAgICAgICA/IHRoaXMub3BlcmFuZC5oYXNBc3luY0Z1bmN0aW9uKClcbiAgICAgICAgICAgIDogZmFsc2U7XG4gICAgfTtcbiAgICBFeHByZXNzaW9uRXhlY3V0b3IucHJvdG90eXBlLmdldFZhcmlhYmxlcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLm9wZXJhbmQpXG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIHZhciB2YXJpYWJsZXMgPSBbXTtcbiAgICAgICAgdGhpcy5vcGVyYW5kLnNldFZhcmlhYmxlcyh2YXJpYWJsZXMpO1xuICAgICAgICByZXR1cm4gdmFyaWFibGVzO1xuICAgIH07XG4gICAgRXhwcmVzc2lvbkV4ZWN1dG9yLnByb3RvdHlwZS5oYXNGdW5jdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFzRnVuY3Rpb25WYWx1ZTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFeHByZXNzaW9uRXhlY3V0b3IucHJvdG90eXBlLCBcImlzQXN5bmNcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlzQXN5bmNWYWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIEV4cHJlc3Npb25FeGVjdXRvci5wcm90b3R5cGUuY2FuUnVuID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLm9wZXJhbmQ7XG4gICAgfTtcbiAgICBFeHByZXNzaW9uRXhlY3V0b3IucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uICh2YWx1ZXMsIHByb3BlcnRpZXMpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgaWYgKHByb3BlcnRpZXMgPT09IHZvaWQgMCkgeyBwcm9wZXJ0aWVzID0gbnVsbDsgfVxuICAgICAgICBpZiAoIXRoaXMub3BlcmFuZClcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB0aGlzLnByb2Nlc3NWYWx1ZS52YWx1ZXMgPSB2YWx1ZXM7XG4gICAgICAgIHRoaXMucHJvY2Vzc1ZhbHVlLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzO1xuICAgICAgICBpZiAoIXRoaXMuaXNBc3luYylcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJ1blZhbHVlcygpO1xuICAgICAgICB0aGlzLmFzeW5jRnVuY0xpc3QgPSBbXTtcbiAgICAgICAgdGhpcy5vcGVyYW5kLmFkZFRvQXN5bmNMaXN0KHRoaXMuYXN5bmNGdW5jTGlzdCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hc3luY0Z1bmNMaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLmFzeW5jRnVuY0xpc3RbaV0ub25Bc3luY1JlYWR5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIF90aGlzLmRvQXN5bmNGdW5jdGlvblJlYWR5KCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hc3luY0Z1bmNMaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLmFzeW5jRnVuY0xpc3RbaV0uZXZhbHVhdGVBc3luYyh0aGlzLnByb2Nlc3NWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gICAgRXhwcmVzc2lvbkV4ZWN1dG9yLnByb3RvdHlwZS5kb0FzeW5jRnVuY3Rpb25SZWFkeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmFzeW5jRnVuY0xpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5hc3luY0Z1bmNMaXN0W2ldLmlzUmVhZHkpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucnVuVmFsdWVzKCk7XG4gICAgfTtcbiAgICBFeHByZXNzaW9uRXhlY3V0b3IucHJvdG90eXBlLnJ1blZhbHVlcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHJlcyA9IHRoaXMub3BlcmFuZC5ldmFsdWF0ZSh0aGlzLnByb2Nlc3NWYWx1ZSk7XG4gICAgICAgIGlmICghIXRoaXMub25Db21wbGV0ZSkge1xuICAgICAgICAgICAgdGhpcy5vbkNvbXBsZXRlKHJlcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9O1xuICAgIEV4cHJlc3Npb25FeGVjdXRvci5jcmVhdGVFeHByZXNzaW9uRXhlY3V0b3IgPSBmdW5jdGlvbiAoZXhwcmVzc2lvbikgeyByZXR1cm4gbmV3IEV4cHJlc3Npb25FeGVjdXRvcihleHByZXNzaW9uKTsgfTtcbiAgICByZXR1cm4gRXhwcmVzc2lvbkV4ZWN1dG9yO1xufSgpKTtcblxudmFyIEV4cHJlc3Npb25SdW5uZXJCYXNlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEV4cHJlc3Npb25SdW5uZXJCYXNlKGV4cHJlc3Npb24pIHtcbiAgICAgICAgdGhpcy5faWQgPSBFeHByZXNzaW9uUnVubmVyQmFzZS5JZENvdW50ZXIrKztcbiAgICAgICAgdGhpcy5leHByZXNzaW9uID0gZXhwcmVzc2lvbjtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEV4cHJlc3Npb25SdW5uZXJCYXNlLnByb3RvdHlwZSwgXCJpZFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5faWQ7IH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRXhwcmVzc2lvblJ1bm5lckJhc2UucHJvdG90eXBlLCBcImV4cHJlc3Npb25cIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAhIXRoaXMuZXhwcmVzc2lvbkV4ZWN1dG9yID8gdGhpcy5leHByZXNzaW9uRXhlY3V0b3IuZXhwcmVzc2lvbiA6IFwiXCI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICAgICAgaWYgKCEhdGhpcy5leHByZXNzaW9uRXhlY3V0b3IgJiYgdmFsdWUgPT09IHRoaXMuZXhwcmVzc2lvbilcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB0aGlzLmV4cHJlc3Npb25FeGVjdXRvciA9IEV4cHJlc3Npb25FeGVjdXRvci5jcmVhdGVFeHByZXNzaW9uRXhlY3V0b3IodmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5leHByZXNzaW9uRXhlY3V0b3Iub25Db21wbGV0ZSA9IGZ1bmN0aW9uIChyZXMpIHsgX3RoaXMuZG9PbkNvbXBsZXRlKHJlcyk7IH07XG4gICAgICAgICAgICB0aGlzLnZhcmlhYmxlcyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuY29udGFpbnNGdW5jID0gdW5kZWZpbmVkO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgRXhwcmVzc2lvblJ1bm5lckJhc2UucHJvdG90eXBlLmdldFZhcmlhYmxlcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMudmFyaWFibGVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMudmFyaWFibGVzID0gdGhpcy5leHByZXNzaW9uRXhlY3V0b3IuZ2V0VmFyaWFibGVzKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMudmFyaWFibGVzO1xuICAgIH07XG4gICAgRXhwcmVzc2lvblJ1bm5lckJhc2UucHJvdG90eXBlLmhhc0Z1bmN0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5jb250YWluc0Z1bmMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5jb250YWluc0Z1bmMgPSB0aGlzLmV4cHJlc3Npb25FeGVjdXRvci5oYXNGdW5jdGlvbigpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5zRnVuYztcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFeHByZXNzaW9uUnVubmVyQmFzZS5wcm90b3R5cGUsIFwiaXNBc3luY1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXhwcmVzc2lvbkV4ZWN1dG9yLmlzQXN5bmM7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBFeHByZXNzaW9uUnVubmVyQmFzZS5wcm90b3R5cGUuY2FuUnVuID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5leHByZXNzaW9uRXhlY3V0b3IuY2FuUnVuKCk7XG4gICAgfTtcbiAgICBFeHByZXNzaW9uUnVubmVyQmFzZS5wcm90b3R5cGUucnVuQ29yZSA9IGZ1bmN0aW9uICh2YWx1ZXMsIHByb3BlcnRpZXMpIHtcbiAgICAgICAgaWYgKHByb3BlcnRpZXMgPT09IHZvaWQgMCkgeyBwcm9wZXJ0aWVzID0gbnVsbDsgfVxuICAgICAgICBpZiAodGhpcy5vbkJlZm9yZUFzeW5jUnVuICYmIHRoaXMuaXNBc3luYykge1xuICAgICAgICAgICAgdGhpcy5vbkJlZm9yZUFzeW5jUnVuKHRoaXMuaWQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmV4cHJlc3Npb25FeGVjdXRvci5ydW4odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICB9O1xuICAgIEV4cHJlc3Npb25SdW5uZXJCYXNlLnByb3RvdHlwZS5kb09uQ29tcGxldGUgPSBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgIGlmICh0aGlzLm9uQWZ0ZXJBc3luY1J1biAmJiB0aGlzLmlzQXN5bmMpIHtcbiAgICAgICAgICAgIHRoaXMub25BZnRlckFzeW5jUnVuKHRoaXMuaWQpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBFeHByZXNzaW9uUnVubmVyQmFzZS5JZENvdW50ZXIgPSAxO1xuICAgIHJldHVybiBFeHByZXNzaW9uUnVubmVyQmFzZTtcbn0oKSk7XG5cbnZhciBDb25kaXRpb25SdW5uZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKENvbmRpdGlvblJ1bm5lciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBDb25kaXRpb25SdW5uZXIoKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICB9XG4gICAgQ29uZGl0aW9uUnVubmVyLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAodmFsdWVzLCBwcm9wZXJ0aWVzKSB7XG4gICAgICAgIGlmIChwcm9wZXJ0aWVzID09PSB2b2lkIDApIHsgcHJvcGVydGllcyA9IG51bGw7IH1cbiAgICAgICAgcmV0dXJuIHRoaXMucnVuQ29yZSh2YWx1ZXMsIHByb3BlcnRpZXMpID09IHRydWU7XG4gICAgfTtcbiAgICBDb25kaXRpb25SdW5uZXIucHJvdG90eXBlLmRvT25Db21wbGV0ZSA9IGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgaWYgKCEhdGhpcy5vblJ1bkNvbXBsZXRlKVxuICAgICAgICAgICAgdGhpcy5vblJ1bkNvbXBsZXRlKHJlcyA9PSB0cnVlKTtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5kb09uQ29tcGxldGUuY2FsbCh0aGlzLCByZXMpO1xuICAgIH07XG4gICAgcmV0dXJuIENvbmRpdGlvblJ1bm5lcjtcbn0oRXhwcmVzc2lvblJ1bm5lckJhc2UpKTtcblxudmFyIEV4cHJlc3Npb25SdW5uZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEV4cHJlc3Npb25SdW5uZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gRXhwcmVzc2lvblJ1bm5lcigpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIH1cbiAgICBFeHByZXNzaW9uUnVubmVyLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAodmFsdWVzLCBwcm9wZXJ0aWVzKSB7XG4gICAgICAgIGlmIChwcm9wZXJ0aWVzID09PSB2b2lkIDApIHsgcHJvcGVydGllcyA9IG51bGw7IH1cbiAgICAgICAgcmV0dXJuIHRoaXMucnVuQ29yZSh2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgIH07XG4gICAgRXhwcmVzc2lvblJ1bm5lci5wcm90b3R5cGUuZG9PbkNvbXBsZXRlID0gZnVuY3Rpb24gKHJlcykge1xuICAgICAgICBpZiAoISF0aGlzLm9uUnVuQ29tcGxldGUpXG4gICAgICAgICAgICB0aGlzLm9uUnVuQ29tcGxldGUocmVzKTtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5kb09uQ29tcGxldGUuY2FsbCh0aGlzLCByZXMpO1xuICAgIH07XG4gICAgcmV0dXJuIEV4cHJlc3Npb25SdW5uZXI7XG59KEV4cHJlc3Npb25SdW5uZXJCYXNlKSk7XG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9jb25kaXRpb25zUGFyc2VyLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvY29uZGl0aW9uc1BhcnNlci50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IENvbmRpdGlvbnNQYXJzZXJFcnJvciwgQ29uZGl0aW9uc1BhcnNlciAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJDb25kaXRpb25zUGFyc2VyRXJyb3JcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBDb25kaXRpb25zUGFyc2VyRXJyb3I7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkNvbmRpdGlvbnNQYXJzZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBDb25kaXRpb25zUGFyc2VyOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZXhwcmVzc2lvbnNfZXhwcmVzc2lvblBhcnNlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9leHByZXNzaW9ucy9leHByZXNzaW9uUGFyc2VyICovIFwiLi9zcmMvZXhwcmVzc2lvbnMvZXhwcmVzc2lvblBhcnNlci50c1wiKTtcblxudmFyIENvbmRpdGlvbnNQYXJzZXJFcnJvciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBDb25kaXRpb25zUGFyc2VyRXJyb3IoYXQsIGNvZGUpIHtcbiAgICAgICAgdGhpcy5hdCA9IGF0O1xuICAgICAgICB0aGlzLmNvZGUgPSBjb2RlO1xuICAgIH1cbiAgICByZXR1cm4gQ29uZGl0aW9uc1BhcnNlckVycm9yO1xufSgpKTtcblxudmFyIENvbmRpdGlvbnNQYXJzZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gQ29uZGl0aW9uc1BhcnNlcigpIHtcbiAgICB9XG4gICAgQ29uZGl0aW9uc1BhcnNlci5wcm90b3R5cGUucGF0Y2hFeHByZXNzaW9uID0gZnVuY3Rpb24gKHRleHQpIHtcbiAgICAgICAgcmV0dXJuIHRleHRcbiAgICAgICAgICAgIC5yZXBsYWNlKC89Pi9nLCBcIj49XCIpXG4gICAgICAgICAgICAucmVwbGFjZSgvPTwvZywgXCI8PVwiKVxuICAgICAgICAgICAgLnJlcGxhY2UoLzw+L2csIFwiIT1cIilcbiAgICAgICAgICAgIC5yZXBsYWNlKC9lcXVhbHMvZywgXCJlcXVhbCBcIilcbiAgICAgICAgICAgIC5yZXBsYWNlKC9ub3RlcXVhbHMvZywgXCJub3RlcXVhbCBcIik7XG4gICAgfTtcbiAgICBDb25kaXRpb25zUGFyc2VyLnByb3RvdHlwZS5jcmVhdGVDb25kaXRpb24gPSBmdW5jdGlvbiAodGV4dCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUV4cHJlc3Npb24odGV4dCk7XG4gICAgfTtcbiAgICBDb25kaXRpb25zUGFyc2VyLnByb3RvdHlwZS5wYXJzZUV4cHJlc3Npb24gPSBmdW5jdGlvbiAodGV4dCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IENvbmRpdGlvbnNQYXJzZXIucGFyc2VyQ2FjaGVbdGV4dF07XG4gICAgICAgICAgICBpZiAocmVzdWx0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBPYmplY3QoX2V4cHJlc3Npb25zX2V4cHJlc3Npb25QYXJzZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInBhcnNlXCJdKSh0aGlzLnBhdGNoRXhwcmVzc2lvbih0ZXh0KSk7XG4gICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuaGFzQXN5bmNGdW5jdGlvbigpKSB7XG4gICAgICAgICAgICAgICAgICAgIENvbmRpdGlvbnNQYXJzZXIucGFyc2VyQ2FjaGVbdGV4dF0gPSByZXN1bHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBfZXhwcmVzc2lvbnNfZXhwcmVzc2lvblBhcnNlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiU3ludGF4RXJyb3JcIl0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmRpdGlvbkVycm9yID0gbmV3IENvbmRpdGlvbnNQYXJzZXJFcnJvcihlLmxvY2F0aW9uLnN0YXJ0Lm9mZnNldCwgZS5tZXNzYWdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbmRpdGlvbnNQYXJzZXIucHJvdG90eXBlLCBcImVycm9yXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25FcnJvcjtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIENvbmRpdGlvbnNQYXJzZXIucGFyc2VyQ2FjaGUgPSB7fTtcbiAgICByZXR1cm4gQ29uZGl0aW9uc1BhcnNlcjtcbn0oKSk7XG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9jb25zb2xlLXdhcm5pbmdzLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvY29uc29sZS13YXJuaW5ncy50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IENvbnNvbGVXYXJuaW5ncyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJDb25zb2xlV2FybmluZ3NcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBDb25zb2xlV2FybmluZ3M7IH0pO1xudmFyIENvbnNvbGVXYXJuaW5ncyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBDb25zb2xlV2FybmluZ3MoKSB7XG4gICAgfVxuICAgIENvbnNvbGVXYXJuaW5ncy5kaXNwb3NlZE9iamVjdENoYW5nZWRQcm9wZXJ0eSA9IGZ1bmN0aW9uIChwcm9wTmFtZSwgb2JqVHlwZSkge1xuICAgICAgICBDb25zb2xlV2FybmluZ3Mud2FybihcIkFuIGF0dGVtcHQgdG8gc2V0IGEgcHJvcGVydHkgXFxcIlwiICsgcHJvcE5hbWUgKyBcIlxcXCIgb2YgYSBkaXNwb3NlZCBvYmplY3QgXFxcIlwiICsgb2JqVHlwZSArIFwiXFxcIlwiKTtcbiAgICB9O1xuICAgIENvbnNvbGVXYXJuaW5ncy5pbkNvcnJlY3RRdWVzdGlvblZhbHVlID0gZnVuY3Rpb24gKHF1ZXN0aW9uTmFtZSwgdmFsKSB7XG4gICAgICAgIHZhciB2YWxTdHIgPSBKU09OLnN0cmluZ2lmeSh2YWwsIG51bGwsIDMpO1xuICAgICAgICBDb25zb2xlV2FybmluZ3Mud2FybihcIkFuIGF0dGVtcHQgdG8gYXNzaWduIGFuIGluY29ycmVjdCB2YWx1ZVwiICsgdmFsU3RyICsgXCIgdG8gdGhlIGZvbGxvd2luZyBxdWVzdGlvbjogXFxcIlwiICsgcXVlc3Rpb25OYW1lICsgXCJcXFwiXCIpO1xuICAgIH07XG4gICAgQ29uc29sZVdhcm5pbmdzLndhcm4gPSBmdW5jdGlvbiAodGV4dCkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLndhcm4odGV4dCk7XG4gICAgfTtcbiAgICByZXR1cm4gQ29uc29sZVdhcm5pbmdzO1xufSgpKTtcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL2NvdmVyLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL2NvdmVyLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IENvdmVyQ2VsbCwgQ292ZXIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQ292ZXJDZWxsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQ292ZXJDZWxsOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJDb3ZlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIENvdmVyOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYmFzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9iYXNlICovIFwiLi9zcmMvYmFzZS50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9qc29ub2JqZWN0ICovIFwiLi9zcmMvanNvbm9iamVjdC50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdXRpbHNfY3NzQ2xhc3NCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3V0aWxzL2Nzc0NsYXNzQnVpbGRlciAqLyBcIi4vc3JjL3V0aWxzL2Nzc0NsYXNzQnVpbGRlci50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdXRpbHNfdXRpbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vdXRpbHMvdXRpbHMgKi8gXCIuL3NyYy91dGlscy91dGlscy50c1wiKTtcbnZhciBfX2V4dGVuZHMgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xudmFyIF9fZGVjb3JhdGUgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufTtcblxuXG5cblxudmFyIENvdmVyQ2VsbCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBDb3ZlckNlbGwoY292ZXIsIHBvc2l0aW9uWCwgcG9zaXRpb25ZKSB7XG4gICAgICAgIHRoaXMuY292ZXIgPSBjb3ZlcjtcbiAgICAgICAgdGhpcy5wb3NpdGlvblggPSBwb3NpdGlvblg7XG4gICAgICAgIHRoaXMucG9zaXRpb25ZID0gcG9zaXRpb25ZO1xuICAgIH1cbiAgICBDb3ZlckNlbGwucHJvdG90eXBlLmNhbGNSb3cgPSBmdW5jdGlvbiAocG9zaXRpb25ZKSB7XG4gICAgICAgIHJldHVybiBwb3NpdGlvblkgPT09IFwidG9wXCIgPyAxIDogKHBvc2l0aW9uWSA9PT0gXCJtaWRkbGVcIiA/IDIgOiAzKTtcbiAgICB9O1xuICAgIENvdmVyQ2VsbC5wcm90b3R5cGUuY2FsY0NvbHVtbiA9IGZ1bmN0aW9uIChwb3NpdGlvblgpIHtcbiAgICAgICAgcmV0dXJuIHBvc2l0aW9uWCA9PT0gXCJsZWZ0XCIgPyAxIDogKHBvc2l0aW9uWCA9PT0gXCJjZW50ZXJcIiA/IDIgOiAzKTtcbiAgICB9O1xuICAgIENvdmVyQ2VsbC5wcm90b3R5cGUuY2FsY0FsaWduSXRlbXMgPSBmdW5jdGlvbiAocG9zaXRpb25YKSB7XG4gICAgICAgIHJldHVybiBwb3NpdGlvblggPT09IFwibGVmdFwiID8gXCJmbGV4LXN0YXJ0XCIgOiAocG9zaXRpb25YID09PSBcImNlbnRlclwiID8gXCJjZW50ZXJcIiA6IFwiZmxleC1lbmRcIik7XG4gICAgfTtcbiAgICBDb3ZlckNlbGwucHJvdG90eXBlLmNhbGNBbGlnblRleHQgPSBmdW5jdGlvbiAocG9zaXRpb25YKSB7XG4gICAgICAgIHJldHVybiBwb3NpdGlvblggPT09IFwibGVmdFwiID8gXCJzdGFydFwiIDogKHBvc2l0aW9uWCA9PT0gXCJjZW50ZXJcIiA/IFwiY2VudGVyXCIgOiBcImVuZFwiKTtcbiAgICB9O1xuICAgIENvdmVyQ2VsbC5wcm90b3R5cGUuY2FsY0p1c3RpZnlDb250ZW50ID0gZnVuY3Rpb24gKHBvc2l0aW9uWSkge1xuICAgICAgICByZXR1cm4gcG9zaXRpb25ZID09PSBcInRvcFwiID8gXCJmbGV4LXN0YXJ0XCIgOiAocG9zaXRpb25ZID09PSBcIm1pZGRsZVwiID8gXCJjZW50ZXJcIiA6IFwiZmxleC1lbmRcIik7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ292ZXJDZWxsLnByb3RvdHlwZSwgXCJzdXJ2ZXlcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvdmVyLnN1cnZleTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb3ZlckNlbGwucHJvdG90eXBlLCBcImNzc1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IENvdmVyQ2VsbC5DTEFTU05BTUUgKyBcIiBcIiArIENvdmVyQ2VsbC5DTEFTU05BTUUgKyBcIi0tXCIgKyB0aGlzLnBvc2l0aW9uWCArIFwiIFwiICsgQ292ZXJDZWxsLkNMQVNTTkFNRSArIFwiLS1cIiArIHRoaXMucG9zaXRpb25ZO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb3ZlckNlbGwucHJvdG90eXBlLCBcInN0eWxlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgICAgICAgICByZXN1bHRbXCJncmlkQ29sdW1uXCJdID0gdGhpcy5jYWxjQ29sdW1uKHRoaXMucG9zaXRpb25YKTtcbiAgICAgICAgICAgIHJlc3VsdFtcImdyaWRSb3dcIl0gPSB0aGlzLmNhbGNSb3codGhpcy5wb3NpdGlvblkpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb3ZlckNlbGwucHJvdG90eXBlLCBcImNvbnRlbnRTdHlsZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgICAgICAgICAgcmVzdWx0W1widGV4dEFsaWduXCJdID0gdGhpcy5jYWxjQWxpZ25UZXh0KHRoaXMucG9zaXRpb25YKTtcbiAgICAgICAgICAgIHJlc3VsdFtcImFsaWduSXRlbXNcIl0gPSB0aGlzLmNhbGNBbGlnbkl0ZW1zKHRoaXMucG9zaXRpb25YKTtcbiAgICAgICAgICAgIHJlc3VsdFtcImp1c3RpZnlDb250ZW50XCJdID0gdGhpcy5jYWxjSnVzdGlmeUNvbnRlbnQodGhpcy5wb3NpdGlvblkpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb3ZlckNlbGwucHJvdG90eXBlLCBcInNob3dMb2dvXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdXJ2ZXkuaGFzTG9nbyAmJiB0aGlzLnBvc2l0aW9uWCA9PT0gdGhpcy5jb3Zlci5sb2dvUG9zaXRpb25YICYmIHRoaXMucG9zaXRpb25ZID09PSB0aGlzLmNvdmVyLmxvZ29Qb3NpdGlvblk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ292ZXJDZWxsLnByb3RvdHlwZSwgXCJzaG93VGl0bGVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN1cnZleS5oYXNUaXRsZSAmJiB0aGlzLnBvc2l0aW9uWCA9PT0gdGhpcy5jb3Zlci50aXRsZVBvc2l0aW9uWCAmJiB0aGlzLnBvc2l0aW9uWSA9PT0gdGhpcy5jb3Zlci50aXRsZVBvc2l0aW9uWTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb3ZlckNlbGwucHJvdG90eXBlLCBcInNob3dEZXNjcmlwdGlvblwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3VydmV5LnJlbmRlcmVkSGFzRGVzY3JpcHRpb24gJiYgdGhpcy5wb3NpdGlvblggPT09IHRoaXMuY292ZXIuZGVzY3JpcHRpb25Qb3NpdGlvblggJiYgdGhpcy5wb3NpdGlvblkgPT09IHRoaXMuY292ZXIuZGVzY3JpcHRpb25Qb3NpdGlvblk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ292ZXJDZWxsLnByb3RvdHlwZSwgXCJ0ZXh0V2lkdGhcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5jb3Zlci50ZXh0V2lkdGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBcIlwiICsgdGhpcy5jb3Zlci50ZXh0V2lkdGggKyBcInB4XCI7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBDb3ZlckNlbGwuQ0xBU1NOQU1FID0gXCJzdi1jb3Zlcl9fY2VsbFwiO1xuICAgIHJldHVybiBDb3ZlckNlbGw7XG59KCkpO1xuXG52YXIgQ292ZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKENvdmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIENvdmVyKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5jZWxscyA9IFtdO1xuICAgICAgICBfdGhpcy5yZW5kZXJCYWNrZ3JvdW5kSW1hZ2UgPSBPYmplY3QoX3V0aWxzX3V0aWxzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJ3cmFwVXJsRm9yQmFja2dyb3VuZEltYWdlXCJdKShfdGhpcy5iYWNrZ3JvdW5kSW1hZ2UpO1xuICAgICAgICBbXCJ0b3BcIiwgXCJtaWRkbGVcIiwgXCJib3R0b21cIl0uZm9yRWFjaChmdW5jdGlvbiAocG9zaXRpb25ZKSB7XG4gICAgICAgICAgICByZXR1cm4gW1wibGVmdFwiLCBcImNlbnRlclwiLCBcInJpZ2h0XCJdLmZvckVhY2goZnVuY3Rpb24gKHBvc2l0aW9uWCkgeyByZXR1cm4gX3RoaXMuY2VsbHMucHVzaChuZXcgQ292ZXJDZWxsKF90aGlzLCBwb3NpdGlvblgsIHBvc2l0aW9uWSkpOyB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgQ292ZXIucHJvdG90eXBlLmNhbGNCYWNrZ3JvdW5kU2l6ZSA9IGZ1bmN0aW9uIChiYWNrZ3JvdW5kSW1hZ2VGaXQpIHtcbiAgICAgICAgaWYgKGJhY2tncm91bmRJbWFnZUZpdCA9PT0gXCJmaWxsXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBcIjEwMCUgMTAwJVwiO1xuICAgICAgICB9XG4gICAgICAgIGlmIChiYWNrZ3JvdW5kSW1hZ2VGaXQgPT09IFwidGlsZVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJjb250YWluXCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGJhY2tncm91bmRJbWFnZUZpdDtcbiAgICB9O1xuICAgIENvdmVyLnByb3RvdHlwZS5nZXRUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gXCJjb3ZlclwiO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvdmVyLnByb3RvdHlwZSwgXCJyZW5kZXJlZEhlaWdodFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGVpZ2h0ID8gdGhpcy5oZWlnaHQgKyBcInB4XCIgOiB1bmRlZmluZWQ7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ292ZXIucHJvdG90eXBlLCBcInJlbmRlcmVkVGV4dFdpZHRoXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0V2lkdGggPyB0aGlzLnRleHRXaWR0aCArIFwicHhcIiA6IHVuZGVmaW5lZDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb3Zlci5wcm90b3R5cGUsIFwiY292ZXJDbGFzc2VzXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IF91dGlsc19jc3NDbGFzc0J1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIkNzc0NsYXNzQnVpbGRlclwiXSgpXG4gICAgICAgICAgICAgICAgLmFwcGVuZChcInN2LWNvdmVyXCIpXG4gICAgICAgICAgICAgICAgLmFwcGVuZChcInN2LWNvbnZlcl9fd2l0aG91dC1iYWNrZ3JvdW5kXCIsICF0aGlzLmJhY2tncm91bmRDb2xvciAmJiAhdGhpcy5iYWNrZ3JvdW5kSW1hZ2UpXG4gICAgICAgICAgICAgICAgLnRvU3RyaW5nKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ292ZXIucHJvdG90eXBlLCBcImNvbnRlbnRDbGFzc2VzXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IF91dGlsc19jc3NDbGFzc0J1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIkNzc0NsYXNzQnVpbGRlclwiXSgpXG4gICAgICAgICAgICAgICAgLmFwcGVuZChcInN2LWNvbnZlcl9fY29udGVudFwiKVxuICAgICAgICAgICAgICAgIC5hcHBlbmQoXCJzdi1jb252ZXJfX2NvbnRlbnQtLXN0YXRpY1wiLCB0aGlzLmFyZWFXaWR0aCA9PT0gXCJzdXJ2ZXlcIiAmJiB0aGlzLnN1cnZleS5jYWxjdWxhdGVXaWR0aE1vZGUoKSA9PT0gXCJzdGF0aWNcIilcbiAgICAgICAgICAgICAgICAuYXBwZW5kKFwic3YtY29udmVyX19jb250ZW50LS1yZXNwb25zaXZlXCIsIHRoaXMuYXJlYVdpZHRoID09PSBcImNvbnRhaW5lclwiIHx8IHRoaXMuc3VydmV5LmNhbGN1bGF0ZVdpZHRoTW9kZSgpID09PSBcInJlc3BvbnNpdmVcIilcbiAgICAgICAgICAgICAgICAudG9TdHJpbmcoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb3Zlci5wcm90b3R5cGUsIFwiYmFja2dyb3VuZEltYWdlQ2xhc3Nlc1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBfdXRpbHNfY3NzQ2xhc3NCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJDc3NDbGFzc0J1aWxkZXJcIl0oKVxuICAgICAgICAgICAgICAgIC5hcHBlbmQoXCJzdi1jb3Zlcl9fYmFja2dyb3VuZC1pbWFnZVwiKVxuICAgICAgICAgICAgICAgIC5hcHBlbmQoXCJzdi1jb3Zlcl9fYmFja2dyb3VuZC1pbWFnZS0tY29udGFpblwiLCB0aGlzLmJhY2tncm91bmRJbWFnZUZpdCA9PT0gXCJjb250YWluXCIpXG4gICAgICAgICAgICAgICAgLmFwcGVuZChcInN2LWNvdmVyX19iYWNrZ3JvdW5kLWltYWdlLS10aWxlXCIsIHRoaXMuYmFja2dyb3VuZEltYWdlRml0ID09PSBcInRpbGVcIilcbiAgICAgICAgICAgICAgICAudG9TdHJpbmcoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb3Zlci5wcm90b3R5cGUsIFwiYmFja2dyb3VuZEltYWdlU3R5bGVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5iYWNrZ3JvdW5kSW1hZ2UpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIG9wYWNpdHk6IHRoaXMuYmFja2dyb3VuZEltYWdlT3BhY2l0eSxcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kSW1hZ2U6IHRoaXMucmVuZGVyQmFja2dyb3VuZEltYWdlLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmRTaXplOiB0aGlzLmNhbGNCYWNrZ3JvdW5kU2l6ZSh0aGlzLmJhY2tncm91bmRJbWFnZUZpdCksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wicHJvcGVydHlcIl0pKClcbiAgICBdLCBDb3Zlci5wcm90b3R5cGUsIFwiaGVpZ2h0XCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wicHJvcGVydHlcIl0pKClcbiAgICBdLCBDb3Zlci5wcm90b3R5cGUsIFwiYXJlYVdpZHRoXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wicHJvcGVydHlcIl0pKClcbiAgICBdLCBDb3Zlci5wcm90b3R5cGUsIFwidGV4dFdpZHRoXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wicHJvcGVydHlcIl0pKClcbiAgICBdLCBDb3Zlci5wcm90b3R5cGUsIFwiaW52ZXJ0VGV4dFwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QoX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcInByb3BlcnR5XCJdKSgpXG4gICAgXSwgQ292ZXIucHJvdG90eXBlLCBcImdsb3dUZXh0XCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wicHJvcGVydHlcIl0pKClcbiAgICBdLCBDb3Zlci5wcm90b3R5cGUsIFwib3ZlcmxhcFwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QoX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcInByb3BlcnR5XCJdKSgpXG4gICAgXSwgQ292ZXIucHJvdG90eXBlLCBcImJhY2tncm91bmRDb2xvclwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QoX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcInByb3BlcnR5XCJdKSh7XG4gICAgICAgICAgICBvblNldDogZnVuY3Rpb24gKG5ld1ZhbCwgdGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0LnJlbmRlckJhY2tncm91bmRJbWFnZSA9IE9iamVjdChfdXRpbHNfdXRpbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcIndyYXBVcmxGb3JCYWNrZ3JvdW5kSW1hZ2VcIl0pKG5ld1ZhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgXSwgQ292ZXIucHJvdG90eXBlLCBcImJhY2tncm91bmRJbWFnZVwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QoX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcInByb3BlcnR5XCJdKSgpXG4gICAgXSwgQ292ZXIucHJvdG90eXBlLCBcInJlbmRlckJhY2tncm91bmRJbWFnZVwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QoX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcInByb3BlcnR5XCJdKSgpXG4gICAgXSwgQ292ZXIucHJvdG90eXBlLCBcImJhY2tncm91bmRJbWFnZUZpdFwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QoX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcInByb3BlcnR5XCJdKSgpXG4gICAgXSwgQ292ZXIucHJvdG90eXBlLCBcImJhY2tncm91bmRJbWFnZU9wYWNpdHlcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJwcm9wZXJ0eVwiXSkoKVxuICAgIF0sIENvdmVyLnByb3RvdHlwZSwgXCJsb2dvUG9zaXRpb25YXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wicHJvcGVydHlcIl0pKClcbiAgICBdLCBDb3Zlci5wcm90b3R5cGUsIFwibG9nb1Bvc2l0aW9uWVwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QoX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcInByb3BlcnR5XCJdKSgpXG4gICAgXSwgQ292ZXIucHJvdG90eXBlLCBcInRpdGxlUG9zaXRpb25YXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wicHJvcGVydHlcIl0pKClcbiAgICBdLCBDb3Zlci5wcm90b3R5cGUsIFwidGl0bGVQb3NpdGlvbllcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJwcm9wZXJ0eVwiXSkoKVxuICAgIF0sIENvdmVyLnByb3RvdHlwZSwgXCJkZXNjcmlwdGlvblBvc2l0aW9uWFwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QoX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcInByb3BlcnR5XCJdKSgpXG4gICAgXSwgQ292ZXIucHJvdG90eXBlLCBcImRlc2NyaXB0aW9uUG9zaXRpb25ZXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wicHJvcGVydHlcIl0pKClcbiAgICBdLCBDb3Zlci5wcm90b3R5cGUsIFwibG9nb1N0eWxlXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wicHJvcGVydHlcIl0pKClcbiAgICBdLCBDb3Zlci5wcm90b3R5cGUsIFwidGl0bGVTdHlsZVwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QoX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcInByb3BlcnR5XCJdKSgpXG4gICAgXSwgQ292ZXIucHJvdG90eXBlLCBcImRlc2NyaXB0aW9uU3R5bGVcIiwgdm9pZCAwKTtcbiAgICByZXR1cm4gQ292ZXI7XG59KF9iYXNlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJCYXNlXCJdKSk7XG5cbl9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJTZXJpYWxpemVyXCJdLmFkZENsYXNzKFwiY292ZXJcIiwgW1xuICAgIHsgbmFtZTogXCJoZWlnaHQ6bnVtYmVyXCIsIG1pblZhbHVlOiAwLCBkZWZhdWx0OiAyNTYgfSxcbiAgICB7IG5hbWU6IFwiYXJlYVdpZHRoXCIsIGRlZmF1bHQ6IFwic3VydmV5XCIgfSxcbiAgICB7IG5hbWU6IFwidGV4dFdpZHRoOm51bWJlclwiLCBtaW5WYWx1ZTogMCwgZGVmYXVsdDogNTEyIH0sXG4gICAgeyBuYW1lOiBcImludmVydFRleHQ6Ym9vbGVhblwiIH0sXG4gICAgeyBuYW1lOiBcImdsb3dUZXh0OmJvb2xlYW5cIiB9LFxuICAgIHsgbmFtZTogXCJvdmVybGFwOmJvb2xlYW5cIiB9LFxuICAgIHsgbmFtZTogXCJiYWNrZ3JvdW5kQ29sb3JcIiB9LFxuICAgIHsgbmFtZTogXCJiYWNrZ3JvdW5kSW1hZ2VcIiB9LFxuICAgIHsgbmFtZTogXCJiYWNrZ3JvdW5kSW1hZ2VPcGFjaXR5Om51bWJlclwiLCBtaW5WYWx1ZTogMCwgbWF4VmFsdWU6IDEsIGRlZmF1bHQ6IDEgfSxcbiAgICB7IG5hbWU6IFwiYmFja2dyb3VuZEltYWdlRml0XCIsIGRlZmF1bHQ6IFwiY292ZXJcIiwgY2hvaWNlczogW1wiY292ZXJcIiwgXCJmaWxsXCIsIFwiY29udGFpblwiXSB9LFxuICAgIHsgbmFtZTogXCJsb2dvUG9zaXRpb25YXCIsIGRlZmF1bHQ6IFwicmlnaHRcIiB9LFxuICAgIHsgbmFtZTogXCJsb2dvUG9zaXRpb25ZXCIsIGRlZmF1bHQ6IFwidG9wXCIgfSxcbiAgICB7IG5hbWU6IFwidGl0bGVQb3NpdGlvblhcIiwgZGVmYXVsdDogXCJsZWZ0XCIgfSxcbiAgICB7IG5hbWU6IFwidGl0bGVQb3NpdGlvbllcIiwgZGVmYXVsdDogXCJib3R0b21cIiB9LFxuICAgIHsgbmFtZTogXCJkZXNjcmlwdGlvblBvc2l0aW9uWFwiLCBkZWZhdWx0OiBcImxlZnRcIiB9LFxuICAgIHsgbmFtZTogXCJkZXNjcmlwdGlvblBvc2l0aW9uWVwiLCBkZWZhdWx0OiBcImJvdHRvbVwiIH1cbl0sIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbmV3IENvdmVyKCk7XG59KTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9kZWZhdWx0Q3NzL2Nzc21vZGVybi50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9kZWZhdWx0Q3NzL2Nzc21vZGVybi50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBtb2Rlcm5Dc3MgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwibW9kZXJuQ3NzXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gbW9kZXJuQ3NzOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZGVmYXVsdFYyQ3NzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2RlZmF1bHRWMkNzcyAqLyBcIi4vc3JjL2RlZmF1bHRDc3MvZGVmYXVsdFYyQ3NzLnRzXCIpO1xuXG52YXIgbW9kZXJuQ3NzID0ge1xuICAgIHJvb3Q6IFwic3Ytcm9vdC1tb2Rlcm5cIixcbiAgICB0aW1lclJvb3Q6IFwic3YtYm9keV9fdGltZXJcIixcbiAgICBjb250YWluZXI6IFwic3YtY29udGFpbmVyLW1vZGVyblwiLFxuICAgIGhlYWRlcjogXCJzdi10aXRsZSBzdi1jb250YWluZXItbW9kZXJuX190aXRsZVwiLFxuICAgIGhlYWRlckNsb3NlOiBcInN2LWNvbnRhaW5lci1tb2Rlcm5fX2Nsb3NlXCIsXG4gICAgYm9keUNvbnRhaW5lcjogXCJzdi1jb21wb25lbnRzLXJvd1wiLFxuICAgIGJvZHk6IFwic3YtY29tcG9uZW50cy1jb2x1bW4gc3YtY29tcG9uZW50cy1jb2x1bW4tLWV4cGFuZGFibGUgc3YtYm9keVwiLFxuICAgIGJvZHlFbXB0eTogXCJzdi1ib2R5IHN2LWJvZHktLWVtcHR5XCIsXG4gICAgZm9vdGVyOiBcInN2LWZvb3RlciBzdi1ib2R5X19mb290ZXIgc3YtY2xlYXJmaXhcIixcbiAgICB0aXRsZTogXCJcIixcbiAgICBkZXNjcmlwdGlvbjogXCJcIixcbiAgICBsb2dvOiBcInN2LWxvZ29cIixcbiAgICBsb2dvSW1hZ2U6IFwic3YtbG9nb19faW1hZ2VcIixcbiAgICBoZWFkZXJUZXh0OiBcInN2LWhlYWRlcl9fdGV4dFwiLFxuICAgIG5hdmlnYXRpb25CdXR0b246IFwic3YtYnRuIHN2LWJ0bi0tbmF2aWdhdGlvblwiLFxuICAgIGNvbXBsZXRlZFBhZ2U6IFwic3YtY29tcGxldGVkcGFnZVwiLFxuICAgIG5hdmlnYXRpb246IHtcbiAgICAgICAgY29tcGxldGU6IFwic3YtZm9vdGVyX19jb21wbGV0ZS1idG5cIixcbiAgICAgICAgcHJldjogXCJzdi1mb290ZXJfX3ByZXYtYnRuXCIsXG4gICAgICAgIG5leHQ6IFwic3YtZm9vdGVyX19uZXh0LWJ0blwiLFxuICAgICAgICBzdGFydDogXCJzdi1mb290ZXJfX3N0YXJ0LWJ0blwiLFxuICAgICAgICBwcmV2aWV3OiBcInN2LWZvb3Rlcl9fcHJldmlldy1idG5cIixcbiAgICAgICAgZWRpdDogXCJzdi1mb290ZXJfX2VkaXQtYnRuXCIsXG4gICAgfSxcbiAgICBwYW5lbDoge1xuICAgICAgICB0aXRsZTogXCJzdi10aXRsZSBzdi1wYW5lbF9fdGl0bGVcIixcbiAgICAgICAgdGl0bGVFeHBhbmRhYmxlOiBcInN2LXBhbmVsX190aXRsZS0tZXhwYW5kYWJsZVwiLFxuICAgICAgICB0aXRsZUV4cGFuZGVkOiBcInN2LXBhbmVsX190aXRsZS0tZXhwYW5kZWRcIixcbiAgICAgICAgdGl0bGVDb2xsYXBzZWQ6IFwic3YtcGFuZWxfX3RpdGxlLS1jb2xsYXBzZWRcIixcbiAgICAgICAgdGl0bGVPbkVycm9yOiBcInN2LXBhbmVsX190aXRsZS0tZXJyb3JcIixcbiAgICAgICAgZGVzY3JpcHRpb246IFwic3YtZGVzY3JpcHRpb24gc3YtcGFuZWxfX2Rlc2NyaXB0aW9uXCIsXG4gICAgICAgIGNvbnRhaW5lcjogXCJzdi1wYW5lbCBzdi1yb3dfX3BhbmVsXCIsXG4gICAgICAgIGNvbnRlbnQ6IFwic3YtcGFuZWxfX2NvbnRlbnRcIixcbiAgICAgICAgaWNvbjogXCJzdi1wYW5lbF9faWNvblwiLFxuICAgICAgICBpY29uRXhwYW5kZWQ6IFwic3YtcGFuZWxfX2ljb24tLWV4cGFuZGVkXCIsXG4gICAgICAgIGZvb3RlcjogXCJzdi1wYW5lbF9fZm9vdGVyXCIsXG4gICAgICAgIHJlcXVpcmVkVGV4dDogXCJzdi1wYW5lbF9fcmVxdWlyZWQtdGV4dFwiLFxuICAgICAgICBudW1iZXI6IFwic3YtcXVlc3Rpb25fX251bVwiLFxuICAgIH0sXG4gICAgcGFuZWxkeW5hbWljOiB7XG4gICAgICAgIHJvb3Q6IFwic3YtcGFuZWxkeW5hbWljXCIsXG4gICAgICAgIG5hdmlnYXRpb246IFwic3YtcGFuZWxkeW5hbWljX19uYXZpZ2F0aW9uXCIsXG4gICAgICAgIHRpdGxlOiBcInN2LXRpdGxlIHN2LXF1ZXN0aW9uX190aXRsZVwiLFxuICAgICAgICBidXR0b246IFwic3YtYnRuXCIsXG4gICAgICAgIGJ1dHRvblJlbW92ZTogXCJzdi1wYW5lbGR5bmFtaWNfX3JlbW92ZS1idG5cIixcbiAgICAgICAgYnV0dG9uUmVtb3ZlUmlnaHQ6IFwic3YtcGFuZWxkeW5hbWljX19yZW1vdmUtYnRuLS1yaWdodFwiLFxuICAgICAgICBidXR0b25BZGQ6IFwic3YtcGFuZWxkeW5hbWljX19hZGQtYnRuXCIsXG4gICAgICAgIHByb2dyZXNzVG9wOiBcInN2LXBhbmVsZHluYW1pY19fcHJvZ3Jlc3Mgc3YtcGFuZWxkeW5hbWljX19wcm9ncmVzcy0tdG9wXCIsXG4gICAgICAgIHByb2dyZXNzQm90dG9tOiBcInN2LXBhbmVsZHluYW1pY19fcHJvZ3Jlc3Mgc3YtcGFuZWxkeW5hbWljX19wcm9ncmVzcy0tYm90dG9tXCIsXG4gICAgICAgIGJ1dHRvblByZXY6IFwic3YtcGFuZWxkeW5hbWljX19wcmV2LWJ0blwiLFxuICAgICAgICBidXR0b25OZXh0OiBcInN2LXBhbmVsZHluYW1pY19fbmV4dC1idG5cIixcbiAgICAgICAgYnV0dG9uUHJldkRpc2FibGVkOiBcInN2LXBhbmVsZHluYW1pY19fcHJldi1idG4tLWRpc2FibGVkXCIsXG4gICAgICAgIGJ1dHRvbk5leHREaXNhYmxlZDogXCJzdi1wYW5lbGR5bmFtaWNfX25leHQtYnRuLS1kaXNhYmxlZFwiLFxuICAgICAgICBwcm9ncmVzc0NvbnRhaW5lcjogXCJzdi1wYW5lbGR5bmFtaWNfX3Byb2dyZXNzLWNvbnRhaW5lclwiLFxuICAgICAgICBwcm9ncmVzczogXCJzdi1wcm9ncmVzc1wiLFxuICAgICAgICBwcm9ncmVzc0JhcjogXCJzdi1wcm9ncmVzc19fYmFyXCIsXG4gICAgICAgIHByb2dyZXNzVGV4dDogXCJzdi1wYW5lbGR5bmFtaWNfX3Byb2dyZXNzLXRleHRcIixcbiAgICAgICAgc2VwYXJhdG9yOiBcInN2LXBhbmVsZHluYW1pY19fc2VwYXJhdG9yXCIsXG4gICAgICAgIHBhbmVsV3JhcHBlcjogXCJzdi1wYW5lbGR5bmFtaWNfX3BhbmVsLXdyYXBwZXJcIixcbiAgICAgICAgcGFuZWxXcmFwcGVySW5Sb3c6IFwic3YtcGFuZWxkeW5hbWljX19wYW5lbC13cmFwcGVyLS1pbi1yb3dcIixcbiAgICAgICAgcHJvZ3Jlc3NCdG5JY29uOiBcImljb24tcHJvZ3Jlc3NidXR0b25cIixcbiAgICAgICAgZm9vdGVyOiBcIlwiXG4gICAgfSxcbiAgICBwcm9ncmVzczogXCJzdi1wcm9ncmVzcyBzdi1ib2R5X19wcm9ncmVzc1wiLFxuICAgIHByb2dyZXNzQmFyOiBcInN2LXByb2dyZXNzX19iYXJcIixcbiAgICBwcm9ncmVzc1RleHQ6IFwic3YtcHJvZ3Jlc3NfX3RleHRcIixcbiAgICBwcm9ncmVzc1RleHRJbkJhcjogXCJzdi1oaWRkZW5cIixcbiAgICBwcm9ncmVzc0J1dHRvbnNDb250YWluZXJDZW50ZXI6IFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19fY29udGFpbmVyLWNlbnRlclwiLFxuICAgIHByb2dyZXNzQnV0dG9uc0NvbnRhaW5lcjogXCJzdl9wcm9ncmVzcy1idXR0b25zX19jb250YWluZXJcIixcbiAgICBwcm9ncmVzc0J1dHRvbnNJbWFnZUJ1dHRvbkxlZnQ6IFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19faW1hZ2UtYnV0dG9uLWxlZnRcIixcbiAgICBwcm9ncmVzc0J1dHRvbnNJbWFnZUJ1dHRvblJpZ2h0OiBcInN2X3Byb2dyZXNzLWJ1dHRvbnNfX2ltYWdlLWJ1dHRvbi1yaWdodFwiLFxuICAgIHByb2dyZXNzQnV0dG9uc0ltYWdlQnV0dG9uSGlkZGVuOiBcInN2X3Byb2dyZXNzLWJ1dHRvbnNfX2ltYWdlLWJ1dHRvbi0taGlkZGVuXCIsXG4gICAgcHJvZ3Jlc3NCdXR0b25zTGlzdENvbnRhaW5lcjogXCJzdl9wcm9ncmVzcy1idXR0b25zX19saXN0LWNvbnRhaW5lclwiLFxuICAgIHByb2dyZXNzQnV0dG9uc0xpc3Q6IFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdFwiLFxuICAgIHByb2dyZXNzQnV0dG9uc0xpc3RFbGVtZW50UGFzc2VkOiBcInN2X3Byb2dyZXNzLWJ1dHRvbnNfX2xpc3QtZWxlbWVudC0tcGFzc2VkXCIsXG4gICAgcHJvZ3Jlc3NCdXR0b25zTGlzdEVsZW1lbnRDdXJyZW50OiBcInN2X3Byb2dyZXNzLWJ1dHRvbnNfX2xpc3QtZWxlbWVudC0tY3VycmVudFwiLFxuICAgIHByb2dyZXNzQnV0dG9uc0xpc3RFbGVtZW50Tm9uQ2xpY2thYmxlOiBcInN2X3Byb2dyZXNzLWJ1dHRvbnNfX2xpc3QtZWxlbWVudC0tbm9uY2xpY2thYmxlXCIsXG4gICAgcHJvZ3Jlc3NCdXR0b25zUGFnZVRpdGxlOiBcInN2X3Byb2dyZXNzLWJ1dHRvbnNfX3BhZ2UtdGl0bGVcIixcbiAgICBwcm9ncmVzc0J1dHRvbnNQYWdlRGVzY3JpcHRpb246IFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19fcGFnZS1kZXNjcmlwdGlvblwiLFxuICAgIHBhZ2U6IHtcbiAgICAgICAgcm9vdDogXCJzdi1wYWdlIHN2LWJvZHlfX3BhZ2VcIixcbiAgICAgICAgdGl0bGU6IFwic3YtdGl0bGUgc3YtcGFnZV9fdGl0bGVcIixcbiAgICAgICAgZGVzY3JpcHRpb246IFwic3YtZGVzY3JpcHRpb24gc3YtcGFnZV9fZGVzY3JpcHRpb25cIixcbiAgICB9LFxuICAgIHBhZ2VUaXRsZTogXCJzdi10aXRsZSBzdi1wYWdlX190aXRsZVwiLFxuICAgIHBhZ2VEZXNjcmlwdGlvbjogXCJzdi1kZXNjcmlwdGlvbiBzdi1wYWdlX19kZXNjcmlwdGlvblwiLFxuICAgIHJvdzogXCJzdi1yb3cgc3YtY2xlYXJmaXhcIixcbiAgICBxdWVzdGlvbjoge1xuICAgICAgICBtYWluUm9vdDogXCJzdi1xdWVzdGlvbiBzdi1yb3dfX3F1ZXN0aW9uXCIsXG4gICAgICAgIGZsb3dSb290OiBcInN2LXF1ZXN0aW9uIHN2LXJvd19fcXVlc3Rpb24gc3Ytcm93X19xdWVzdGlvbi0tZmxvd1wiLFxuICAgICAgICBhc0NlbGw6IFwic3YtdGFibGVfX2NlbGxcIixcbiAgICAgICAgaGVhZGVyOiBcInN2LXF1ZXN0aW9uX19oZWFkZXJcIixcbiAgICAgICAgaGVhZGVyTGVmdDogXCJzdi1xdWVzdGlvbl9faGVhZGVyLS1sb2NhdGlvbi0tbGVmdFwiLFxuICAgICAgICBoZWFkZXJUb3A6IFwic3YtcXVlc3Rpb25fX2hlYWRlci0tbG9jYXRpb24tLXRvcFwiLFxuICAgICAgICBoZWFkZXJCb3R0b206IFwic3YtcXVlc3Rpb25fX2hlYWRlci0tbG9jYXRpb24tLWJvdHRvbVwiLFxuICAgICAgICBjb250ZW50OiBcInN2LXF1ZXN0aW9uX19jb250ZW50XCIsXG4gICAgICAgIGNvbnRlbnRMZWZ0OiBcInN2LXF1ZXN0aW9uX19jb250ZW50LS1sZWZ0XCIsXG4gICAgICAgIHRpdGxlTGVmdFJvb3Q6IFwiXCIsXG4gICAgICAgIGFuc3dlcmVkOiBcInN2LXF1ZXN0aW9uLS1hbnN3ZXJlZFwiLFxuICAgICAgICB0aXRsZU9uQW5zd2VyOiBcInN2LXF1ZXN0aW9uX190aXRsZS0tYW5zd2VyXCIsXG4gICAgICAgIHRpdGxlT25FcnJvcjogXCJzdi1xdWVzdGlvbl9fdGl0bGUtLWVycm9yXCIsXG4gICAgICAgIHRpdGxlOiBcInN2LXRpdGxlIHN2LXF1ZXN0aW9uX190aXRsZVwiLFxuICAgICAgICB0aXRsZUV4cGFuZGFibGU6IFwic3YtcXVlc3Rpb25fX3RpdGxlLS1leHBhbmRhYmxlXCIsXG4gICAgICAgIHRpdGxlRXhwYW5kZWQ6IFwic3YtcXVlc3Rpb25fX3RpdGxlLS1leHBhbmRlZFwiLFxuICAgICAgICB0aXRsZUNvbGxhcHNlZDogXCJzdi1xdWVzdGlvbl9fdGl0bGUtLWNvbGxhcHNlZFwiLFxuICAgICAgICBpY29uOiBcInN2LXF1ZXN0aW9uX19pY29uXCIsXG4gICAgICAgIGljb25FeHBhbmRlZDogXCJzdi1xdWVzdGlvbl9faWNvbi0tZXhwYW5kZWRcIixcbiAgICAgICAgcmVxdWlyZWRUZXh0OiBcInN2LXF1ZXN0aW9uX19yZXF1aXJlZC10ZXh0XCIsXG4gICAgICAgIG51bWJlcjogXCJzdi1xdWVzdGlvbl9fbnVtXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcInN2LWRlc2NyaXB0aW9uIHN2LXF1ZXN0aW9uX19kZXNjcmlwdGlvblwiLFxuICAgICAgICBkZXNjcmlwdGlvblVuZGVySW5wdXQ6IFwic3YtZGVzY3JpcHRpb24gc3YtcXVlc3Rpb25fX2Rlc2NyaXB0aW9uXCIsXG4gICAgICAgIGNvbW1lbnQ6IFwic3YtY29tbWVudFwiLFxuICAgICAgICByZXF1aXJlZDogXCJzdi1xdWVzdGlvbi0tcmVxdWlyZWRcIixcbiAgICAgICAgdGl0bGVSZXF1aXJlZDogXCJzdi1xdWVzdGlvbl9fdGl0bGUtLXJlcXVpcmVkXCIsXG4gICAgICAgIGluZGVudDogMjAsXG4gICAgICAgIGZvb3RlcjogXCJzdi1xdWVzdGlvbl9fZm9vdGVyXCIsXG4gICAgICAgIGZvcm1Hcm91cDogXCJzdi1xdWVzdGlvbl9fZm9ybS1ncm91cFwiLFxuICAgICAgICBoYXNFcnJvcjogXCJcIixcbiAgICAgICAgZGlzYWJsZWQ6IFwic3YtcXVlc3Rpb24tLWRpc2FibGVkXCIsXG4gICAgfSxcbiAgICBpbWFnZTogeyByb290OiBcInN2LWltYWdlXCIsIGltYWdlOiBcInN2X2ltYWdlX2ltYWdlXCIgfSxcbiAgICBlcnJvcjoge1xuICAgICAgICByb290OiBcInN2LXF1ZXN0aW9uX19lcmJveFwiLFxuICAgICAgICBpY29uOiBcIlwiLFxuICAgICAgICBpdGVtOiBcIlwiLFxuICAgICAgICBsb2NhdGlvblRvcDogXCJzdi1xdWVzdGlvbl9fZXJib3gtLWxvY2F0aW9uLS10b3BcIixcbiAgICAgICAgbG9jYXRpb25Cb3R0b206IFwic3YtcXVlc3Rpb25fX2VyYm94LS1sb2NhdGlvbi0tYm90dG9tXCIsXG4gICAgfSxcbiAgICBjaGVja2JveDoge1xuICAgICAgICByb290OiBcInN2LXNlbGVjdGJhc2VcIixcbiAgICAgICAgaXRlbTogXCJzdi1pdGVtIHN2LWNoZWNrYm94IHN2LXNlbGVjdGJhc2VfX2l0ZW1cIixcbiAgICAgICAgaXRlbVNlbGVjdEFsbDogXCJzdi1jaGVja2JveC0tc2VsZWN0YWxsXCIsXG4gICAgICAgIGl0ZW1Ob25lOiBcInN2LWNoZWNrYm94LS1ub25lXCIsXG4gICAgICAgIGl0ZW1EaXNhYmxlZDogXCJzdi1pdGVtLS1kaXNhYmxlZCBzdi1jaGVja2JveC0tZGlzYWJsZWRcIixcbiAgICAgICAgaXRlbUNoZWNrZWQ6IFwic3YtY2hlY2tib3gtLWNoZWNrZWRcIixcbiAgICAgICAgaXRlbUhvdmVyOiBcInN2LWNoZWNrYm94LS1hbGxvd2hvdmVyXCIsXG4gICAgICAgIGl0ZW1JbmxpbmU6IFwic3Ytc2VsZWN0YmFzZV9faXRlbS0taW5saW5lXCIsXG4gICAgICAgIGxhYmVsOiBcInN2LXNlbGVjdGJhc2VfX2xhYmVsXCIsXG4gICAgICAgIGxhYmVsQ2hlY2tlZDogXCJcIixcbiAgICAgICAgaXRlbUNvbnRyb2w6IFwic3YtdmlzdWFsbHloaWRkZW4gc3YtaXRlbV9fY29udHJvbFwiLFxuICAgICAgICBpdGVtRGVjb3JhdG9yOiBcInN2LWl0ZW1fX3N2ZyBzdi1jaGVja2JveF9fc3ZnXCIsXG4gICAgICAgIGl0ZW1TdmdJY29uSWQ6IFwiI2ljb24tbW9kZXJuY2hlY2tcIixcbiAgICAgICAgY29udHJvbExhYmVsOiBcInN2LWl0ZW1fX2NvbnRyb2wtbGFiZWxcIixcbiAgICAgICAgbWF0ZXJpYWxEZWNvcmF0b3I6IFwic3YtaXRlbV9fZGVjb3JhdG9yIHN2LXNlbGVjdGJhc2VfX2RlY29yYXRvciBzdi1jaGVja2JveF9fZGVjb3JhdG9yXCIsXG4gICAgICAgIG90aGVyOiBcInN2LWNvbW1lbnQgc3YtcXVlc3Rpb25fX290aGVyXCIsXG4gICAgICAgIGNvbHVtbjogXCJzdi1zZWxlY3RiYXNlX19jb2x1bW5cIixcbiAgICB9LFxuICAgIHJhbmtpbmc6IHtcbiAgICAgICAgcm9vdDogXCJzdi1yYW5raW5nXCIsXG4gICAgICAgIHJvb3RNb2JpbGVNb2Q6IFwic3YtcmFua2luZy0tbW9iaWxlXCIsXG4gICAgICAgIHJvb3REcmFnTW9kOiBcInN2LXJhbmtpbmctLWRyYWdcIixcbiAgICAgICAgcm9vdERpc2FibGVkOiBcInN2LXJhbmtpbmctLWRpc2FibGVkXCIsXG4gICAgICAgIHJvb3REcmFnSGFuZGxlQXJlYUljb246IFwic3YtcmFua2luZy0tZHJhZy1oYW5kbGUtYXJlYS1pY29uXCIsXG4gICAgICAgIHJvb3RTZWxlY3RUb1JhbmtNb2Q6IFwic3YtcmFua2luZy0tc2VsZWN0LXRvLXJhbmtcIixcbiAgICAgICAgcm9vdFNlbGVjdFRvUmFua0FsaWduVmVydGljYWw6IFwic3YtcmFua2luZy0tc2VsZWN0LXRvLXJhbmstdmVydGljYWxcIixcbiAgICAgICAgcm9vdFNlbGVjdFRvUmFua0FsaWduSG9yaXpvbnRhbDogXCJzdi1yYW5raW5nLS1zZWxlY3QtdG8tcmFuay1ob3Jpem9udGFsXCIsXG4gICAgICAgIGl0ZW06IFwic3YtcmFua2luZy1pdGVtXCIsXG4gICAgICAgIGl0ZW1Db250ZW50OiBcInN2LXJhbmtpbmctaXRlbV9fY29udGVudFwiLFxuICAgICAgICBpdGVtSW5kZXg6IFwic3YtcmFua2luZy1pdGVtX19pbmRleFwiLFxuICAgICAgICBpdGVtSW5kZXhFbXB0eU1vZGU6IFwic3YtcmFua2luZy1pdGVtX19pbmRleC0tZW1wdHlcIixcbiAgICAgICAgLy8gaXRlbVRleHQ6IFwic3YtcmFua2luZy1pdGVtX190ZXh0XCIsXG4gICAgICAgIGNvbnRyb2xMYWJlbDogXCJzdi1yYW5raW5nLWl0ZW1fX3RleHRcIixcbiAgICAgICAgaXRlbUdob3N0Tm9kZTogXCJzdi1yYW5raW5nLWl0ZW1fX2dob3N0XCIsXG4gICAgICAgIGl0ZW1JY29uQ29udGFpbmVyOiBcInN2LXJhbmtpbmctaXRlbV9faWNvbi1jb250YWluZXJcIixcbiAgICAgICAgaXRlbUljb246IFwic3YtcmFua2luZy1pdGVtX19pY29uXCIsXG4gICAgICAgIGl0ZW1JY29uSG92ZXJNb2Q6IFwic3YtcmFua2luZy1pdGVtX19pY29uLS1ob3ZlclwiLFxuICAgICAgICBpdGVtSWNvbkZvY3VzTW9kOiBcInN2LXJhbmtpbmctaXRlbV9faWNvbi0tZm9jdXNcIixcbiAgICAgICAgaXRlbUdob3N0TW9kOiBcInN2LXJhbmtpbmctaXRlbS0tZ2hvc3RcIixcbiAgICAgICAgaXRlbURyYWdNb2Q6IFwic3YtcmFua2luZy1pdGVtLS1kcmFnXCIsXG4gICAgICAgIGNvbnRhaW5lcjogXCJzdi1yYW5raW5nX19jb250YWluZXJcIixcbiAgICAgICAgY29udGFpbmVyRW1wdHlNb2RlOiBcInN2LXJhbmtpbmdfX2NvbnRhaW5lci0tZW1wdHlcIixcbiAgICAgICAgY29udGFpbmVyRnJvbU1vZGU6IFwic3YtcmFua2luZ19fY29udGFpbmVyLS1mcm9tXCIsXG4gICAgICAgIGNvbnRhaW5lclRvTW9kZTogXCJzdi1yYW5raW5nX19jb250YWluZXItLXRvXCIsXG4gICAgICAgIGNvbnRhaW5lclBsYWNlaG9sZGVyOiBcInN2LXJhbmtpbmdfX2NvbnRhaW5lci1wbGFjZWhvbGRlclwiLFxuICAgICAgICBjb250YWluZXJzRGl2aWRlcjogXCJzdi1yYW5raW5nX19jb250YWluZXJzLWRpdmlkZXJcIixcbiAgICB9LFxuICAgIHJhZGlvZ3JvdXA6IHtcbiAgICAgICAgcm9vdDogXCJzdi1zZWxlY3RiYXNlXCIsXG4gICAgICAgIGl0ZW06IFwic3YtaXRlbSBzdi1yYWRpbyBzdi1zZWxlY3RiYXNlX19pdGVtXCIsXG4gICAgICAgIGl0ZW1JbmxpbmU6IFwic3Ytc2VsZWN0YmFzZV9faXRlbS0taW5saW5lXCIsXG4gICAgICAgIGxhYmVsOiBcInN2LXNlbGVjdGJhc2VfX2xhYmVsXCIsXG4gICAgICAgIGxhYmVsQ2hlY2tlZDogXCJcIixcbiAgICAgICAgaXRlbURpc2FibGVkOiBcInN2LWl0ZW0tLWRpc2FibGVkIHN2LXJhZGlvLS1kaXNhYmxlZFwiLFxuICAgICAgICBpdGVtQ2hlY2tlZDogXCJzdi1yYWRpby0tY2hlY2tlZFwiLFxuICAgICAgICBpdGVtSG92ZXI6IFwic3YtcmFkaW8tLWFsbG93aG92ZXJcIixcbiAgICAgICAgaXRlbUNvbnRyb2w6IFwic3YtdmlzdWFsbHloaWRkZW4gc3YtaXRlbV9fY29udHJvbFwiLFxuICAgICAgICBpdGVtRGVjb3JhdG9yOiBcInN2LWl0ZW1fX3N2ZyBzdi1yYWRpb19fc3ZnXCIsXG4gICAgICAgIGl0ZW1TdmdJY29uSWQ6IFwiI2ljb24tbW9kZXJucmFkaW9cIixcbiAgICAgICAgY29udHJvbExhYmVsOiBcInN2LWl0ZW1fX2NvbnRyb2wtbGFiZWxcIixcbiAgICAgICAgbWF0ZXJpYWxEZWNvcmF0b3I6IFwic3YtaXRlbV9fZGVjb3JhdG9yIHN2LXNlbGVjdGJhc2VfX2RlY29yYXRvciBzdi1yYWRpb19fZGVjb3JhdG9yXCIsXG4gICAgICAgIG90aGVyOiBcInN2LWNvbW1lbnQgc3YtcXVlc3Rpb25fX290aGVyXCIsXG4gICAgICAgIGNsZWFyQnV0dG9uOiBcInN2LWJ0biBzdi1zZWxlY3RiYXNlX19jbGVhci1idG5cIixcbiAgICAgICAgY29sdW1uOiBcInN2LXNlbGVjdGJhc2VfX2NvbHVtblwiLFxuICAgIH0sXG4gICAgYnV0dG9uZ3JvdXA6IHtcbiAgICAgICAgcm9vdDogXCJzdi1idXR0b24tZ3JvdXBcIixcbiAgICAgICAgaXRlbTogXCJzdi1idXR0b24tZ3JvdXBfX2l0ZW1cIixcbiAgICAgICAgaXRlbUljb246IFwic3YtYnV0dG9uLWdyb3VwX19pdGVtLWljb25cIixcbiAgICAgICAgaXRlbURlY29yYXRvcjogXCJzdi1idXR0b24tZ3JvdXBfX2l0ZW0tZGVjb3JhdG9yXCIsXG4gICAgICAgIGl0ZW1DYXB0aW9uOiBcInN2LWJ1dHRvbi1ncm91cF9faXRlbS1jYXB0aW9uXCIsXG4gICAgICAgIGl0ZW1TZWxlY3RlZDogXCJzdi1idXR0b24tZ3JvdXBfX2l0ZW0tLXNlbGVjdGVkXCIsXG4gICAgICAgIGl0ZW1Ib3ZlcjogXCJzdi1idXR0b24tZ3JvdXBfX2l0ZW0tLWhvdmVyXCIsXG4gICAgICAgIGl0ZW1EaXNhYmxlZDogXCJzdi1idXR0b24tZ3JvdXBfX2l0ZW0tLWRpc2FibGVkXCIsXG4gICAgICAgIGl0ZW1Db250cm9sOiBcInN2LXZpc3VhbGx5aGlkZGVuXCIsXG4gICAgfSxcbiAgICBib29sZWFuOiB7XG4gICAgICAgIHJvb3Q6IFwic3ZfcWJsblwiLFxuICAgICAgICByb290UmFkaW86IFwic3ZfcWJsblwiLFxuICAgICAgICBzbWFsbDogXCJzdi1yb3dfX3F1ZXN0aW9uLS1zbWFsbFwiLFxuICAgICAgICBpdGVtOiBcInN2LWJvb2xlYW4gc3YtaXRlbVwiLFxuICAgICAgICBjb250cm9sOiBcInN2LXZpc3VhbGx5aGlkZGVuXCIsXG4gICAgICAgIGl0ZW1DaGVja2VkOiBcInN2LWJvb2xlYW4tLWNoZWNrZWRcIixcbiAgICAgICAgaXRlbUluZGV0ZXJtaW5hdGU6IFwic3YtYm9vbGVhbi0taW5kZXRlcm1pbmF0ZVwiLFxuICAgICAgICBpdGVtRGlzYWJsZWQ6IFwic3YtaXRlbS0tZGlzYWJsZWQgc3YtYm9vbGVhbi0tZGlzYWJsZWRcIixcbiAgICAgICAgc3dpdGNoOiBcInN2LWJvb2xlYW5fX3N3aXRjaFwiLFxuICAgICAgICBzbGlkZXI6IFwic3YtYm9vbGVhbl9fc2xpZGVyXCIsXG4gICAgICAgIGxhYmVsOiBcInN2LWJvb2xlYW5fX2xhYmVsXCIsXG4gICAgICAgIGRpc2FibGVkTGFiZWw6IFwic3YtYm9vbGVhbl9fbGFiZWwtLWRpc2FibGVkXCIsXG4gICAgICAgIHNsaWRlckdob3N0OiBcInN2LWJvb2xlYW5fX3RodW1iLWdob3N0XCIsXG4gICAgICAgIC8vY2hlY2tib3hcbiAgICAgICAgcm9vdENoZWNrYm94OiBcInN2X3FibG5cIixcbiAgICAgICAgY2hlY2tib3hJdGVtOiBcInN2LWJvb2xlYW4gc3YtaXRlbVwiLFxuICAgICAgICBjaGVja2JveEl0ZW1DaGVja2VkOiBcInN2LWJvb2xlYW4tLWNoZWNrZWRcIixcbiAgICAgICAgY29udHJvbENoZWNrYm94OiBcInN2LXZpc3VhbGx5aGlkZGVuXCIsXG4gICAgICAgIGNoZWNrYm94Q29udHJvbExhYmVsOiBcInN2LWJvb2xlYW5fX2xhYmVsXCIsXG4gICAgICAgIGNoZWNrYm94SXRlbUluZGV0ZXJtaW5hdGU6IFwic3YtYm9vbGVhbi0taW5kZXRlcm1pbmF0ZVwiLFxuICAgICAgICBjaGVja2JveEl0ZW1EaXNhYmxlZDogXCJzdi1pdGVtLS1kaXNhYmxlZCBzdi1ib29sZWFuLS1kaXNhYmxlZFwiLFxuICAgICAgICBjaGVja2JveE1hdGVyaWFsRGVjb3JhdG9yOiBcInN2LWl0ZW1fX2RlY29yYXRvciBzdi1ib29sZWFuX19kZWNvcmF0b3IgXCIsXG4gICAgICAgIGNoZWNrYm94SXRlbURlY29yYXRvcjogXCJzdi1pdGVtX19zdmcgIHN2LWJvb2xlYW5fX3N2Z1wiLFxuICAgICAgICBpbmRldGVybWluYXRlUGF0aDogXCJzdi1ib29sZWFuX19pbmRldGVybWluYXRlLXBhdGhcIixcbiAgICAgICAgc3ZnSWNvbkNoZWNrZWRJZDogXCIjaWNvbi1tb2Rlcm5ib29sZWFuY2hlY2tjaGVja2VkXCIsXG4gICAgICAgIHN2Z0ljb25VbmNoZWNrZWRJZDogXCIjaWNvbi1tb2Rlcm5ib29sZWFuY2hlY2t1bmNoZWNrZWRcIixcbiAgICAgICAgc3ZnSWNvbkluZElkOiBcIiNpY29uLW1vZGVybmJvb2xlYW5jaGVja2luZFwiLFxuICAgIH0sXG4gICAgdGV4dDoge1xuICAgICAgICByb290OiBcInN2LXRleHRcIixcbiAgICAgICAgc21hbGw6IFwic3Ytcm93X19xdWVzdGlvbi0tc21hbGxcIixcbiAgICAgICAgcmVtYWluaW5nQ2hhcmFjdGVyQ291bnRlcjogXCJzdi1yZW1haW5pbmctY2hhcmFjdGVyLWNvdW50ZXJcIixcbiAgICAgICAgb25FcnJvcjogXCJzdi10ZXh0LS1lcnJvclwiLFxuICAgIH0sXG4gICAgbXVsdGlwbGV0ZXh0OiB7XG4gICAgICAgIHJvb3Q6IFwic3YtbXVsdGlwbGV0ZXh0XCIsXG4gICAgICAgIGl0ZW06IFwic3YtbXVsdGlwbGV0ZXh0X19pdGVtXCIsXG4gICAgICAgIGl0ZW1MYWJlbDogXCJzdi1tdWx0aXBsZXRleHRfX2l0ZW0tbGFiZWxcIixcbiAgICAgICAgaXRlbVRpdGxlOiBcInN2LW11bHRpcGxldGV4dF9faXRlbS10aXRsZVwiLFxuICAgICAgICByb3c6IFwic3YtbXVsdGlwbGV0ZXh0X19yb3dcIixcbiAgICAgICAgY2VsbDogXCJzdi1tdWx0aXBsZXRleHRfX2NlbGxcIixcbiAgICB9LFxuICAgIGRyb3Bkb3duOiB7XG4gICAgICAgIHJvb3Q6IFwiXCIsXG4gICAgICAgIHBvcHVwOiBcInN2LWRyb3Bkb3duLXBvcHVwXCIsXG4gICAgICAgIHNtYWxsOiBcInN2LXJvd19fcXVlc3Rpb24tLXNtYWxsXCIsXG4gICAgICAgIGNvbnRyb2w6IFwic3YtZHJvcGRvd25cIixcbiAgICAgICAgc2VsZWN0V3JhcHBlcjogXCJcIixcbiAgICAgICAgb3RoZXI6IFwic3YtY29tbWVudCBzdi1xdWVzdGlvbl9fb3RoZXJcIixcbiAgICAgICAgb25FcnJvcjogXCJzdi1kcm9wZG93bi0tZXJyb3JcIixcbiAgICAgICAgY2xlYW5CdXR0b246IFwic3YtZHJvcGRvd25fY2xlYW4tYnV0dG9uXCIsXG4gICAgICAgIGNsZWFuQnV0dG9uU3ZnOiBcInN2LWRyb3Bkb3duX2NsZWFuLWJ1dHRvbi1zdmdcIixcbiAgICAgICAgY2xlYW5CdXR0b25JY29uSWQ6IFwiaWNvbi1jbGVhcl8xNngxNlwiLFxuICAgICAgICBmaWx0ZXJTdHJpbmdJbnB1dDogXCJzdi1kcm9wZG93bl9fZmlsdGVyLXN0cmluZy1pbnB1dFwiLFxuICAgICAgICBjb250cm9sVmFsdWU6IFwic3YtZHJvcGRvd25fX3ZhbHVlXCIsXG4gICAgICAgIGNvbnRyb2xJbnB1dEZpZWxkQ29tcG9uZW50OiBcInN2X2Ryb3Bkb3duX2NvbnRyb2xfX2lucHV0LWZpZWxkLWNvbXBvbmVudFwiLFxuICAgICAgICBoaW50UHJlZml4OiBcInN2LWRyb3Bkb3duX19oaW50LXByZWZpeFwiLFxuICAgICAgICBoaW50U3VmZml4OiBcInN2LWRyb3Bkb3duX19oaW50LXN1ZmZpeFwiXG4gICAgfSxcbiAgICB0YWdib3g6IHtcbiAgICAgICAgcm9vdDogXCJcIixcbiAgICAgICAgcG9wdXA6IFwic3YtZHJvcGRvd24tcG9wdXBcIixcbiAgICAgICAgc21hbGw6IFwic3Ytcm93X19xdWVzdGlvbi0tc21hbGxcIixcbiAgICAgICAgc2VsZWN0V3JhcHBlcjogXCJzdl9zZWxlY3Rfd3JhcHBlciBzdi10YWdib3hfd3JhcHBlclwiLFxuICAgICAgICBvdGhlcjogXCJzdi1pbnB1dCBzdi1jb21tZW50IHN2LXNlbGVjdGJhc2VfX290aGVyXCIsXG4gICAgICAgIGNsZWFuQnV0dG9uOiBcInN2LXRhZ2JveF9jbGVhbi1idXR0b24gc3YtZHJvcGRvd25fY2xlYW4tYnV0dG9uXCIsXG4gICAgICAgIGNsZWFuQnV0dG9uU3ZnOiBcInN2LXRhZ2JveF9jbGVhbi1idXR0b24tc3ZnIHN2LWRyb3Bkb3duX2NsZWFuLWJ1dHRvbi1zdmdcIixcbiAgICAgICAgY2xlYW5CdXR0b25JY29uSWQ6IFwiaWNvbi1jbGVhcl8xNngxNlwiLFxuICAgICAgICBjbGVhbkl0ZW1CdXR0b246IFwic3YtdGFnYm94X19pdGVtX2NsZWFuLWJ1dHRvblwiLFxuICAgICAgICBjbGVhbkl0ZW1CdXR0b25Tdmc6IFwic3YtdGFnYm94X19pdGVtX2NsZWFuLWJ1dHRvbi1zdmdcIixcbiAgICAgICAgY2xlYW5JdGVtQnV0dG9uSWNvbklkOiBcImljb24tY2xlYXJfMTZ4MTZcIixcbiAgICAgICAgY29udHJvbDogXCJzdi1pbnB1dCBzdi10YWdib3ggc3YtZHJvcGRvd25cIixcbiAgICAgICAgY29udHJvbFZhbHVlOiBcInN2LXRhZ2JveF9fdmFsdWUgc3YtZHJvcGRvd25fX3ZhbHVlXCIsXG4gICAgICAgIGNvbnRyb2xFbXB0eTogXCJzdi1kcm9wZG93bi0tZW1wdHkgc3YtdGFnYm94LS1lbXB0eVwiLFxuICAgICAgICBwbGFjZWhvbGRlcklucHV0OiBcInN2LXRhZ2JveF9fcGxhY2Vob2xkZXJcIixcbiAgICAgICAgZmlsdGVyU3RyaW5nSW5wdXQ6IFwic3YtdGFnYm94X19maWx0ZXItc3RyaW5nLWlucHV0IHN2LWRyb3Bkb3duX19maWx0ZXItc3RyaW5nLWlucHV0XCJcbiAgICB9LFxuICAgIGltYWdlcGlja2VyOiB7XG4gICAgICAgIHJvb3Q6IFwic3Ytc2VsZWN0YmFzZSBzdi1pbWFnZXBpY2tlclwiLFxuICAgICAgICBjb2x1bW46IFwic3Ytc2VsZWN0YmFzZV9fY29sdW1uXCIsXG4gICAgICAgIGl0ZW06IFwic3YtaW1hZ2VwaWNrZXJfX2l0ZW1cIixcbiAgICAgICAgaXRlbUlubGluZTogXCJzdi1pbWFnZXBpY2tlcl9faXRlbS0taW5saW5lXCIsXG4gICAgICAgIGl0ZW1DaGVja2VkOiBcInN2LWltYWdlcGlja2VyX19pdGVtLS1jaGVja2VkXCIsXG4gICAgICAgIGl0ZW1EaXNhYmxlZDogXCJzdi1pbWFnZXBpY2tlcl9faXRlbS0tZGlzYWJsZWRcIixcbiAgICAgICAgaXRlbUhvdmVyOiBcInN2LWltYWdlcGlja2VyX19pdGVtLS1hbGxvd2hvdmVyXCIsXG4gICAgICAgIGxhYmVsOiBcInN2LWltYWdlcGlja2VyX19sYWJlbFwiLFxuICAgICAgICBpdGVtQ29udHJvbDogXCJzdi1pbWFnZXBpY2tlcl9fY29udHJvbCBzdi12aXN1YWxseWhpZGRlblwiLFxuICAgICAgICBpbWFnZTogXCJzdi1pbWFnZXBpY2tlcl9faW1hZ2VcIixcbiAgICAgICAgaXRlbVRleHQ6IFwic3YtaW1hZ2VwaWNrZXJfX3RleHRcIixcbiAgICAgICAgY2xlYXJCdXR0b246IFwic3YtYnRuXCIsXG4gICAgICAgIG90aGVyOiBcInN2LWNvbW1lbnQgc3YtcXVlc3Rpb25fX290aGVyXCIsXG4gICAgfSxcbiAgICBtYXRyaXg6IHtcbiAgICAgICAgdGFibGVXcmFwcGVyOiBcInN2LW1hdHJpeFwiLFxuICAgICAgICByb290OiBcInN2LXRhYmxlIHN2LW1hdHJpeC1yb290XCIsXG4gICAgICAgIHJvd0Vycm9yOiBcInN2LW1hdHJpeF9fcm93LS1lcnJvclwiLFxuICAgICAgICBjZWxsOiBcInN2LXRhYmxlX19jZWxsIHN2LW1hdHJpeF9fY2VsbFwiLFxuICAgICAgICBoZWFkZXJDZWxsOiBcInN2LXRhYmxlX19jZWxsIHN2LXRhYmxlX19jZWxsLS1oZWFkZXJcIixcbiAgICAgICAgbGFiZWw6IFwic3YtaXRlbSBzdi1yYWRpbyBzdi1tYXRyaXhfX2xhYmVsXCIsXG4gICAgICAgIGl0ZW1WYWx1ZTogXCJzdi12aXN1YWxseWhpZGRlbiBzdi1pdGVtX19jb250cm9sIHN2LXJhZGlvX19jb250cm9sXCIsXG4gICAgICAgIGl0ZW1DaGVja2VkOiBcInN2LXJhZGlvLS1jaGVja2VkXCIsXG4gICAgICAgIGl0ZW1EaXNhYmxlZDogXCJzdi1pdGVtLS1kaXNhYmxlZCBzdi1yYWRpby0tZGlzYWJsZWRcIixcbiAgICAgICAgaXRlbUhvdmVyOiBcInN2LXJhZGlvLS1hbGxvd2hvdmVyXCIsXG4gICAgICAgIG1hdGVyaWFsRGVjb3JhdG9yOiBcInN2LWl0ZW1fX2RlY29yYXRvciBzdi1yYWRpb19fZGVjb3JhdG9yXCIsXG4gICAgICAgIGl0ZW1EZWNvcmF0b3I6IFwic3YtaXRlbV9fc3ZnIHN2LXJhZGlvX19zdmdcIixcbiAgICAgICAgY2VsbFRleHQ6IFwic3YtbWF0cml4X190ZXh0XCIsXG4gICAgICAgIGNlbGxUZXh0U2VsZWN0ZWQ6IFwic3YtbWF0cml4X190ZXh0LS1jaGVja2VkXCIsXG4gICAgICAgIGNlbGxUZXh0RGlzYWJsZWQ6IFwic3YtbWF0cml4X190ZXh0LS1kaXNhYmxlZFwiLFxuICAgICAgICBjZWxsUmVzcG9uc2l2ZVRpdGxlOiBcInN2LWhpZGRlblwiLFxuICAgICAgICBpdGVtU3ZnSWNvbklkOiBcIiNpY29uLW1vZGVybnJhZGlvXCIsXG4gICAgfSxcbiAgICBtYXRyaXhkcm9wZG93bjoge1xuICAgICAgICByb290OiBcInN2LXRhYmxlIHN2LW1hdHJpeGRyb3Bkb3duXCIsXG4gICAgICAgIGNlbGw6IFwic3YtdGFibGVfX2NlbGxcIixcbiAgICAgICAgaGVhZGVyQ2VsbDogXCJzdi10YWJsZV9fY2VsbCBzdi10YWJsZV9fY2VsbC0taGVhZGVyXCIsXG4gICAgICAgIHJvdzogXCJzdi10YWJsZV9fcm93XCIsXG4gICAgICAgIHJvd0FkZGl0aW9uYWw6IFwic3YtdGFibGVfX3Jvdy0tYWRkaXRpb25hbFwiLFxuICAgICAgICBkZXRhaWxSb3c6IFwic3YtdGFibGVfX3Jvdy0tZGV0YWlsXCIsXG4gICAgICAgIGRldGFpbFJvd1RleHQ6IFwic3YtdGFibGVfX2NlbGwtLWRldGFpbC1yb3d0ZXh0XCIsXG4gICAgICAgIGRldGFpbENlbGw6IFwic3YtdGFibGVfX2NlbGwtLWRldGFpbFwiLFxuICAgICAgICBjaG9pY2VDZWxsOiBcInN2LXRhYmxlX19jZWxsLS1jaG9pY2VcIixcbiAgICAgICAgZGV0YWlsQnV0dG9uOiBcInN2LXRhYmxlX19jZWxsLS1kZXRhaWwtYnV0dG9uXCIsXG4gICAgICAgIGRldGFpbEJ1dHRvbkV4cGFuZGVkOiBcInN2LXRhYmxlX19jZWxsLS1kZXRhaWwtYnV0dG9uLS1leHBhbmRlZFwiLFxuICAgICAgICBkZXRhaWxJY29uOiBcInN2LWRldGFpbC1wYW5lbF9faWNvblwiLFxuICAgICAgICBkZXRhaWxJY29uRXhwYW5kZWQ6IFwic3YtZGV0YWlsLXBhbmVsX19pY29uLS1leHBhbmRlZFwiLFxuICAgICAgICBkZXRhaWxQYW5lbENlbGw6IFwic3YtdGFibGVfX2NlbGwtLWRldGFpbC1wYW5lbFwiLFxuICAgICAgICBhY3Rpb25zQ2VsbDogXCJzdi10YWJsZV9fY2VsbCBzdi10YWJsZV9fY2VsbC0tYWN0aW9uc1wiLFxuICAgIH0sXG4gICAgbWF0cml4ZHluYW1pYzoge1xuICAgICAgICByb290OiBcInN2LXRhYmxlIHN2LW1hdHJpeGR5bmFtaWNcIixcbiAgICAgICAgY2VsbDogXCJzdi10YWJsZV9fY2VsbFwiLFxuICAgICAgICBoZWFkZXJDZWxsOiBcInN2LXRhYmxlX19jZWxsIHN2LXRhYmxlX19jZWxsLS1oZWFkZXJcIixcbiAgICAgICAgYnV0dG9uOiBcInN2LWJ0blwiLFxuICAgICAgICBidXR0b25BZGQ6IFwic3YtbWF0cml4ZHluYW1pY19fYWRkLWJ0blwiLFxuICAgICAgICBidXR0b25SZW1vdmU6IFwic3YtbWF0cml4ZHluYW1pY19fcmVtb3ZlLWJ0blwiLFxuICAgICAgICBpY29uQWRkOiBcIlwiLFxuICAgICAgICBpY29uUmVtb3ZlOiBcIlwiLFxuICAgICAgICBpY29uRHJhZzogXCJzdi1tYXRyaXhkeW5hbWljX19kcmFnLWljb25cIixcbiAgICAgICAgcm93OiBcInN2LXRhYmxlX19yb3dcIixcbiAgICAgICAgZGV0YWlsUm93OiBcInN2LXRhYmxlX19yb3ctLWRldGFpbFwiLFxuICAgICAgICBkZXRhaWxDZWxsOiBcInN2LXRhYmxlX19jZWxsLS1kZXRhaWxcIixcbiAgICAgICAgY2hvaWNlQ2VsbDogXCJzdi10YWJsZV9fY2VsbC0tY2hvaWNlXCIsXG4gICAgICAgIGRldGFpbEJ1dHRvbjogXCJzdi10YWJsZV9fY2VsbC0tZGV0YWlsLWJ1dHRvblwiLFxuICAgICAgICBkZXRhaWxCdXR0b25FeHBhbmRlZDogXCJzdi10YWJsZV9fY2VsbC0tZGV0YWlsLWJ1dHRvbi0tZXhwYW5kZWRcIixcbiAgICAgICAgZGV0YWlsSWNvbjogXCJzdi1kZXRhaWwtcGFuZWxfX2ljb25cIixcbiAgICAgICAgZGV0YWlsSWNvbkV4cGFuZGVkOiBcInN2LWRldGFpbC1wYW5lbF9faWNvbi0tZXhwYW5kZWRcIixcbiAgICAgICAgZGV0YWlsUGFuZWxDZWxsOiBcInN2LXRhYmxlX19jZWxsLS1kZXRhaWwtcGFuZWxcIixcbiAgICAgICAgYWN0aW9uc0NlbGw6IFwic3YtdGFibGVfX2NlbGwgc3YtdGFibGVfX2NlbGwtLWFjdGlvbnNcIixcbiAgICAgICAgZW1wdHlSb3dzU2VjdGlvbjogXCJzdi10YWJsZV9fZW1wdHktLXJvd3MtLXNlY3Rpb25cIixcbiAgICAgICAgZW1wdHlSb3dzVGV4dDogXCJzdi10YWJsZV9fZW1wdHktLXJvd3MtLXRleHRcIixcbiAgICAgICAgZW1wdHlSb3dzQnV0dG9uOiBcIlwiLFxuICAgICAgICBnaG9zdFJvdzogXCJzdi1tYXRyaXgtcm93LS1kcmFnLWRyb3AtZ2hvc3QtbW9kXCJcbiAgICB9LFxuICAgIHJhdGluZzoge1xuICAgICAgICByb290OiBcInN2LXJhdGluZ1wiLFxuICAgICAgICBpdGVtOiBcInN2LXJhdGluZ19faXRlbVwiLFxuICAgICAgICBzZWxlY3RlZDogXCJzdi1yYXRpbmdfX2l0ZW0tLXNlbGVjdGVkXCIsXG4gICAgICAgIG1pblRleHQ6IFwic3YtcmF0aW5nX19taW4tdGV4dFwiLFxuICAgICAgICBpdGVtVGV4dDogXCJzdi1yYXRpbmdfX2l0ZW0tdGV4dFwiLFxuICAgICAgICBtYXhUZXh0OiBcInN2LXJhdGluZ19fbWF4LXRleHRcIixcbiAgICAgICAgaXRlbURpc2FibGVkOiBcInN2LXJhdGluZy0tZGlzYWJsZWRcIixcbiAgICAgICAgZmlsdGVyU3RyaW5nSW5wdXQ6IFwic3YtZHJvcGRvd25fX2ZpbHRlci1zdHJpbmctaW5wdXRcIixcbiAgICAgICAgY29udHJvbDogXCJzdi1kcm9wZG93blwiLFxuICAgICAgICBjbGVhbkJ1dHRvbjogXCJzdi1kcm9wZG93bl9jbGVhbi1idXR0b25cIixcbiAgICAgICAgY2xlYW5CdXR0b25Tdmc6IFwic3YtZHJvcGRvd25fY2xlYW4tYnV0dG9uLXN2Z1wiLFxuICAgICAgICBjbGVhbkJ1dHRvbkljb25JZDogXCJpY29uLWNsZWFyXzE2eDE2XCIsXG4gICAgICAgIGNvbnRyb2xWYWx1ZTogXCJzdi1kcm9wZG93bl9fdmFsdWVcIixcbiAgICAgICAgY29udHJvbElucHV0RmllbGRDb21wb25lbnQ6IFwic3ZfZHJvcGRvd25fY29udHJvbF9faW5wdXQtZmllbGQtY29tcG9uZW50XCIsXG4gICAgICAgIGl0ZW1TbWlsZXk6IFwic3YtcmF0aW5nX19pdGVtLXNtaWxleVwiLFxuICAgICAgICBpdGVtU3RhcjogXCJzdi1yYXRpbmdfX2l0ZW0tc3RhclwiLFxuICAgICAgICBpdGVtU21pbGV5U2VsZWN0ZWQ6IFwic3YtcmF0aW5nX19pdGVtLXNtaWxleS0tc2VsZWN0ZWRcIixcbiAgICAgICAgaXRlbVN0YXJTZWxlY3RlZDogXCJzdi1yYXRpbmdfX2l0ZW0tc3Rhci0tc2VsZWN0ZWRcIlxuICAgIH0sXG4gICAgY29tbWVudDoge1xuICAgICAgICByb290OiBcInN2LWNvbW1lbnRcIixcbiAgICAgICAgc21hbGw6IFwic3Ytcm93X19xdWVzdGlvbi0tc21hbGxcIixcbiAgICAgICAgcmVtYWluaW5nQ2hhcmFjdGVyQ291bnRlcjogXCJzdi1yZW1haW5pbmctY2hhcmFjdGVyLWNvdW50ZXJcIixcbiAgICB9LFxuICAgIGV4cHJlc3Npb246IFwiXCIsXG4gICAgZmlsZToge1xuICAgICAgICByb290OiBcInN2LWZpbGVcIixcbiAgICAgICAgb3RoZXI6IFwic3YtY29tbWVudCBzdi1xdWVzdGlvbl9fb3RoZXJcIixcbiAgICAgICAgcGxhY2Vob2xkZXJJbnB1dDogXCJzdi12aXN1YWxseWhpZGRlblwiLFxuICAgICAgICBwcmV2aWV3OiBcInN2LWZpbGVfX3ByZXZpZXdcIixcbiAgICAgICAgZmlsZVNpZ25Cb3R0b206IFwic3YtZmlsZV9fc2lnblwiLFxuICAgICAgICBmaWxlRGVjb3JhdG9yOiBcInN2LWZpbGVfX2RlY29yYXRvclwiLFxuICAgICAgICBmaWxlSW5wdXQ6IFwic3YtdmlzdWFsbHloaWRkZW5cIixcbiAgICAgICAgbm9GaWxlQ2hvc2VuOiBcInN2LWRlc2NyaXB0aW9uIHN2LWZpbGVfX25vLWZpbGUtY2hvc2VuXCIsXG4gICAgICAgIGNob29zZUZpbGU6IFwic3YtYnRuIHN2LWZpbGVfX2Nob29zZS1idG5cIixcbiAgICAgICAgY29udHJvbERpc2FibGVkOiBcInN2LWZpbGVfX2Nob29zZS1idG4tLWRpc2FibGVkXCIsXG4gICAgICAgIHJlbW92ZUJ1dHRvbjogXCJzdi1oaWRkZW5cIixcbiAgICAgICAgcmVtb3ZlQnV0dG9uQm90dG9tOiBcInN2LWJ0biBzdi1maWxlX19jbGVhbi1idG5cIixcbiAgICAgICAgcmVtb3ZlRmlsZTogXCJzdi1oaWRkZW5cIixcbiAgICAgICAgcmVtb3ZlRmlsZVN2ZzogXCJzdi1maWxlX19yZW1vdmUtc3ZnXCIsXG4gICAgICAgIHJlbW92ZUZpbGVTdmdJY29uSWQ6IFwiaWNvbi1yZW1vdmVmaWxlXCIsXG4gICAgICAgIHdyYXBwZXI6IFwic3YtZmlsZV9fd3JhcHBlclwiLFxuICAgICAgICBkcmFnQXJlYVBsYWNlaG9sZGVyOiBcInN2LWhpZGRlblwiLFxuICAgICAgICBmaWxlTGlzdDogXCJcIixcbiAgICB9LFxuICAgIHNpZ25hdHVyZXBhZDoge1xuICAgICAgICByb290OiBcInN2LXNpZ25hdHVyZXBhZCBzanNfc3BfY29udGFpbmVyXCIsXG4gICAgICAgIHNtYWxsOiBcInN2LXJvd19fcXVlc3Rpb24tLXNtYWxsXCIsXG4gICAgICAgIGNvbnRyb2xzOiBcInNqc19zcF9jb250cm9sc1wiLFxuICAgICAgICBwbGFjZWhvbGRlcjogXCJzanNfc3BfcGxhY2Vob2xkZXJcIixcbiAgICAgICAgY2FudmFzOiBcInNqc19zcF9jYW52YXNcIixcbiAgICAgICAgYmFja2dyb3VuZEltYWdlOiBcInNqc19zcF9fYmFja2dyb3VuZC1pbWFnZVwiLFxuICAgICAgICBjbGVhckJ1dHRvbjogXCJzanNfc3BfY2xlYXJcIixcbiAgICB9LFxuICAgIHNhdmVEYXRhOiB7XG4gICAgICAgIHJvb3Q6IFwic3Ytc2F2ZS1kYXRhX3Jvb3RcIixcbiAgICAgICAgaW5mbzogXCJzdi1zYXZlLWRhdGFfaW5mb1wiLFxuICAgICAgICBlcnJvcjogXCJzdi1zYXZlLWRhdGFfZXJyb3JcIixcbiAgICAgICAgc3VjY2VzczogXCJzdi1zYXZlLWRhdGFfc3VjY2Vzc1wiLFxuICAgICAgICBidXR0b246IFwic3Ytc2F2ZS1kYXRhX2J1dHRvblwiLFxuICAgICAgICBzaG93bjogXCJzdi1zYXZlLWRhdGFfcm9vdC0tc2hvd25cIlxuICAgIH0sXG4gICAgd2luZG93OiB7XG4gICAgICAgIHJvb3Q6IFwic3Zfd2luZG93XCIsXG4gICAgICAgIGJvZHk6IFwic3Zfd2luZG93X2NvbnRlbnRcIixcbiAgICAgICAgaGVhZGVyOiB7XG4gICAgICAgICAgICByb290OiBcInN2X3dpbmRvd190aXRsZVwiLFxuICAgICAgICAgICAgdGl0bGU6IFwiXCIsXG4gICAgICAgICAgICBidXR0b246IFwiXCIsXG4gICAgICAgICAgICBidXR0b25FeHBhbmRlZDogXCJcIixcbiAgICAgICAgICAgIGJ1dHRvbkNvbGxhcHNlZDogXCJcIixcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHZhcmlhYmxlczoge1xuICAgICAgICBtb2JpbGVXaWR0aDogXCItLXN2LW1vYmlsZS13aWR0aFwiLFxuICAgICAgICB0aGVtZU1hcms6IFwiLS1zdi1tb2Rlcm4tbWFya1wiXG4gICAgfVxufTtcbl9kZWZhdWx0VjJDc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN1cnZleUNzc1wiXVtcIm1vZGVyblwiXSA9IG1vZGVybkNzcztcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9kZWZhdWx0Q3NzL2Nzc3N0YW5kYXJkLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvZGVmYXVsdENzcy9jc3NzdGFuZGFyZC50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGRlZmF1bHRTdGFuZGFyZENzcyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJkZWZhdWx0U3RhbmRhcmRDc3NcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBkZWZhdWx0U3RhbmRhcmRDc3M7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9kZWZhdWx0VjJDc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZGVmYXVsdFYyQ3NzICovIFwiLi9zcmMvZGVmYXVsdENzcy9kZWZhdWx0VjJDc3MudHNcIik7XG5cbnZhciBkZWZhdWx0U3RhbmRhcmRDc3MgPSB7XG4gICAgcm9vdDogXCJzdl9tYWluIHN2X2RlZmF1bHRfY3NzXCIsXG4gICAgY29udGFpbmVyOiBcInN2X2NvbnRhaW5lclwiLFxuICAgIGhlYWRlcjogXCJzdl9oZWFkZXJcIixcbiAgICBib2R5Q29udGFpbmVyOiBcInN2LWNvbXBvbmVudHMtcm93XCIsXG4gICAgYm9keTogXCJzdi1jb21wb25lbnRzLWNvbHVtbiBzdi1jb21wb25lbnRzLWNvbHVtbi0tZXhwYW5kYWJsZSBzdl9ib2R5XCIsXG4gICAgYm9keUVtcHR5OiBcInN2X2JvZHkgc3ZfYm9keV9lbXB0eVwiLFxuICAgIGZvb3RlcjogXCJzdl9uYXZcIixcbiAgICB0aXRsZTogXCJcIixcbiAgICBkZXNjcmlwdGlvbjogXCJcIixcbiAgICBsb2dvOiBcInN2X2xvZ29cIixcbiAgICBsb2dvSW1hZ2U6IFwic3ZfbG9nb19faW1hZ2VcIixcbiAgICBoZWFkZXJUZXh0OiBcInN2X2hlYWRlcl9fdGV4dFwiLFxuICAgIG5hdmlnYXRpb25CdXR0b246IFwic3ZfbmF2X2J0blwiLFxuICAgIGNvbXBsZXRlZFBhZ2U6IFwic3ZfY29tcGxldGVkX3BhZ2VcIixcbiAgICBuYXZpZ2F0aW9uOiB7XG4gICAgICAgIGNvbXBsZXRlOiBcInN2X2NvbXBsZXRlX2J0blwiLFxuICAgICAgICBwcmV2OiBcInN2X3ByZXZfYnRuXCIsXG4gICAgICAgIG5leHQ6IFwic3ZfbmV4dF9idG5cIixcbiAgICAgICAgc3RhcnQ6IFwic3Zfc3RhcnRfYnRuXCIsXG4gICAgICAgIHByZXZpZXc6IFwic3ZfcHJldmlld19idG5cIixcbiAgICAgICAgZWRpdDogXCJzdl9lZGl0X2J0blwiLFxuICAgIH0sXG4gICAgcHJvZ3Jlc3M6IFwic3ZfcHJvZ3Jlc3NcIixcbiAgICBwcm9ncmVzc0JhcjogXCJzdl9wcm9ncmVzc19iYXJcIixcbiAgICBwcm9ncmVzc1RleHRJbkJhcjogXCJzdi1oaWRkZW5cIixcbiAgICBwcm9ncmVzc0J1dHRvbnNDb250YWluZXJDZW50ZXI6IFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19fY29udGFpbmVyLWNlbnRlclwiLFxuICAgIHByb2dyZXNzQnV0dG9uc0NvbnRhaW5lcjogXCJzdl9wcm9ncmVzcy1idXR0b25zX19jb250YWluZXJcIixcbiAgICBwcm9ncmVzc0J1dHRvbnNJbWFnZUJ1dHRvbkxlZnQ6IFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19faW1hZ2UtYnV0dG9uLWxlZnRcIixcbiAgICBwcm9ncmVzc0J1dHRvbnNJbWFnZUJ1dHRvblJpZ2h0OiBcInN2X3Byb2dyZXNzLWJ1dHRvbnNfX2ltYWdlLWJ1dHRvbi1yaWdodFwiLFxuICAgIHByb2dyZXNzQnV0dG9uc0ltYWdlQnV0dG9uSGlkZGVuOiBcInN2X3Byb2dyZXNzLWJ1dHRvbnNfX2ltYWdlLWJ1dHRvbi0taGlkZGVuXCIsXG4gICAgcHJvZ3Jlc3NCdXR0b25zTGlzdENvbnRhaW5lcjogXCJzdl9wcm9ncmVzcy1idXR0b25zX19saXN0LWNvbnRhaW5lclwiLFxuICAgIHByb2dyZXNzQnV0dG9uc0xpc3Q6IFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdFwiLFxuICAgIHByb2dyZXNzQnV0dG9uc0xpc3RFbGVtZW50UGFzc2VkOiBcInN2X3Byb2dyZXNzLWJ1dHRvbnNfX2xpc3QtZWxlbWVudC0tcGFzc2VkXCIsXG4gICAgcHJvZ3Jlc3NCdXR0b25zTGlzdEVsZW1lbnRDdXJyZW50OiBcInN2X3Byb2dyZXNzLWJ1dHRvbnNfX2xpc3QtZWxlbWVudC0tY3VycmVudFwiLFxuICAgIHByb2dyZXNzQnV0dG9uc0xpc3RFbGVtZW50Tm9uQ2xpY2thYmxlOiBcInN2X3Byb2dyZXNzLWJ1dHRvbnNfX2xpc3QtZWxlbWVudC0tbm9uY2xpY2thYmxlXCIsXG4gICAgcHJvZ3Jlc3NCdXR0b25zUGFnZVRpdGxlOiBcInN2X3Byb2dyZXNzLWJ1dHRvbnNfX3BhZ2UtdGl0bGVcIixcbiAgICBwcm9ncmVzc0J1dHRvbnNQYWdlRGVzY3JpcHRpb246IFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19fcGFnZS1kZXNjcmlwdGlvblwiLFxuICAgIHBhZ2U6IHtcbiAgICAgICAgcm9vdDogXCJzdl9wX3Jvb3RcIixcbiAgICAgICAgdGl0bGU6IFwic3ZfcGFnZV90aXRsZVwiLFxuICAgICAgICBkZXNjcmlwdGlvbjogXCJcIixcbiAgICB9LFxuICAgIC8vIFRPRE86IG1vdmUgdG8gdGhlIHBhZ2Ugb2JqZWN0XG4gICAgcGFnZVRpdGxlOiBcInN2X3BhZ2VfdGl0bGVcIixcbiAgICBwYWdlRGVzY3JpcHRpb246IFwiXCIsXG4gICAgcm93OiBcInN2X3Jvd1wiLFxuICAgIHF1ZXN0aW9uOiB7XG4gICAgICAgIG1haW5Sb290OiBcInN2X3Egc3ZfcXN0blwiLFxuICAgICAgICBmbG93Um9vdDogXCJzdl9xX2Zsb3cgc3ZfcXN0blwiLFxuICAgICAgICBoZWFkZXI6IFwiXCIsXG4gICAgICAgIGhlYWRlckxlZnQ6IFwidGl0bGUtbGVmdFwiLFxuICAgICAgICBjb250ZW50OiBcIlwiLFxuICAgICAgICBjb250ZW50TGVmdDogXCJjb250ZW50LWxlZnRcIixcbiAgICAgICAgdGl0bGVMZWZ0Um9vdDogXCJzdl9xc3RuX2xlZnRcIixcbiAgICAgICAgcmVxdWlyZWRUZXh0OiBcInN2X3FfcmVxdWlyZWRfdGV4dFwiLFxuICAgICAgICB0aXRsZTogXCJzdl9xX3RpdGxlXCIsXG4gICAgICAgIHRpdGxlRXhwYW5kYWJsZTogXCJzdl9xX3RpdGxlX2V4cGFuZGFibGVcIixcbiAgICAgICAgdGl0bGVFeHBhbmRlZDogXCJzdl9xX3RpdGxlX2V4cGFuZGVkXCIsXG4gICAgICAgIHRpdGxlQ29sbGFwc2VkOiBcInN2X3FfdGl0bGVfY29sbGFwc2VkXCIsXG4gICAgICAgIG51bWJlcjogXCJzdl9xX251bVwiLFxuICAgICAgICBkZXNjcmlwdGlvbjogXCJzdl9xX2Rlc2NyaXB0aW9uXCIsXG4gICAgICAgIGNvbW1lbnQ6IFwiXCIsXG4gICAgICAgIHJlcXVpcmVkOiBcIlwiLFxuICAgICAgICB0aXRsZVJlcXVpcmVkOiBcIlwiLFxuICAgICAgICBoYXNFcnJvcjogXCJcIixcbiAgICAgICAgaW5kZW50OiAyMCxcbiAgICAgICAgZm9vdGVyOiBcInN2X3FfZm9vdGVyXCIsXG4gICAgICAgIGZvcm1Hcm91cDogXCJmb3JtLWdyb3VwXCIsXG4gICAgICAgIGFzQ2VsbDogXCJzdl9tYXRyaXhfY2VsbFwiLFxuICAgICAgICBpY29uOiBcInN2X3F1ZXN0aW9uX2ljb25cIixcbiAgICAgICAgaWNvbkV4cGFuZGVkOiBcInN2X2V4cGFuZGVkXCIsXG4gICAgICAgIGRpc2FibGVkOiBcInN2X3EtLWRpc2FibGVkXCIsXG4gICAgfSxcbiAgICBwYW5lbDoge1xuICAgICAgICB0aXRsZTogXCJzdl9wX3RpdGxlXCIsXG4gICAgICAgIHRpdGxlRXhwYW5kYWJsZTogXCJzdl9wX3RpdGxlX2V4cGFuZGFibGVcIixcbiAgICAgICAgdGl0bGVFeHBhbmRlZDogXCJzdl9wX3RpdGxlX2V4cGFuZGVkXCIsXG4gICAgICAgIHRpdGxlQ29sbGFwc2VkOiBcInN2X3BfdGl0bGVfY29sbGFwc2VkXCIsXG4gICAgICAgIHRpdGxlT25FcnJvcjogXCJcIixcbiAgICAgICAgaWNvbjogXCJzdl9wYW5lbF9pY29uXCIsXG4gICAgICAgIGljb25FeHBhbmRlZDogXCJzdl9leHBhbmRlZFwiLFxuICAgICAgICBkZXNjcmlwdGlvbjogXCJzdl9wX2Rlc2NyaXB0aW9uXCIsXG4gICAgICAgIGNvbnRhaW5lcjogXCJzdl9wX2NvbnRhaW5lclwiLFxuICAgICAgICBmb290ZXI6IFwic3ZfcF9mb290ZXJcIixcbiAgICAgICAgbnVtYmVyOiBcInN2X3FfbnVtXCIsXG4gICAgICAgIHJlcXVpcmVkVGV4dDogXCJzdl9xX3JlcXVpcmVkX3RleHRcIixcbiAgICB9LFxuICAgIGVycm9yOiB7XG4gICAgICAgIHJvb3Q6IFwic3ZfcV9lcmJveFwiLFxuICAgICAgICBpY29uOiBcIlwiLFxuICAgICAgICBpdGVtOiBcIlwiLFxuICAgICAgICBsb2NhdGlvblRvcDogXCJzdl9xc3RuX2Vycm9yX3RvcFwiLFxuICAgICAgICBsb2NhdGlvbkJvdHRvbTogXCJzdl9xc3RuX2Vycm9yX2JvdHRvbVwiLFxuICAgIH0sXG4gICAgYm9vbGVhbjoge1xuICAgICAgICByb290OiBcInN2X3FjYmMgc3ZfcWJsblwiLFxuICAgICAgICByb290UmFkaW86IFwic3ZfcWNiYyBzdl9xYmxuXCIsXG4gICAgICAgIGl0ZW06IFwic3YtYm9vbGVhblwiLFxuICAgICAgICBjb250cm9sOiBcInN2LXZpc3VhbGx5aGlkZGVuXCIsXG4gICAgICAgIGl0ZW1DaGVja2VkOiBcInN2LWJvb2xlYW4tLWNoZWNrZWQgY2hlY2tlZFwiLFxuICAgICAgICBpdGVtSW5kZXRlcm1pbmF0ZTogXCJzdi1ib29sZWFuLS1pbmRldGVybWluYXRlXCIsXG4gICAgICAgIGl0ZW1EaXNhYmxlZDogXCJzdi1ib29sZWFuLS1kaXNhYmxlZFwiLFxuICAgICAgICBzd2l0Y2g6IFwic3YtYm9vbGVhbl9fc3dpdGNoXCIsXG4gICAgICAgIHNsaWRlcjogXCJzdi1ib29sZWFuX19zbGlkZXJcIixcbiAgICAgICAgbGFiZWw6IFwic3YtYm9vbGVhbl9fbGFiZWwgXCIsXG4gICAgICAgIGRpc2FibGVkTGFiZWw6IFwic3YtYm9vbGVhbl9fbGFiZWwtLWRpc2FibGVkXCIsXG4gICAgICAgIHNsaWRlckdob3N0OiBcInN2LWJvb2xlYW5fX3RodW1iLWdob3N0XCIsXG4gICAgICAgIC8vY2hlY2tib3hcbiAgICAgICAgcm9vdENoZWNrYm94OiBcInN2X3FjYmMgc3ZfcWJsblwiLFxuICAgICAgICBjaGVja2JveEl0ZW06IFwic3YtYm9vbGVhblwiLFxuICAgICAgICBjaGVja2JveEl0ZW1DaGVja2VkOiBcInN2LWJvb2xlYW4tLWNoZWNrZWRcIixcbiAgICAgICAgY29udHJvbENoZWNrYm94OiBcInN2LXZpc3VhbGx5dmlzaWJsZVwiLFxuICAgICAgICBjaGVja2JveENvbnRyb2xMYWJlbDogXCJzdi1ib29sZWFuX19sYWJlbFwiLFxuICAgICAgICBjaGVja2JveEl0ZW1JbmRldGVybWluYXRlOiBcInN2LWJvb2xlYW4tLWluZGV0ZXJtaW5hdGVcIixcbiAgICAgICAgY2hlY2tib3hJdGVtRGlzYWJsZWQ6IFwic3YtaXRlbS0tZGlzYWJsZWQgc3YtYm9vbGVhbi0tZGlzYWJsZWRcIixcbiAgICAgICAgY2hlY2tib3hNYXRlcmlhbERlY29yYXRvcjogXCJzdi1pdGVtX19kZWNvcmF0b3Igc3YtYm9vbGVhbl9fZGVjb3JhdG9yXCIsXG4gICAgICAgIGNoZWNrYm94SXRlbURlY29yYXRvcjogXCJzdi1pdGVtX19zdmcgc3YtYm9vbGVhbl9fc3ZnXCIsXG4gICAgfSxcbiAgICBjaGVja2JveDoge1xuICAgICAgICByb290OiBcInN2X3FjYmMgc3ZfcWNieFwiLFxuICAgICAgICBpdGVtOiBcInN2X3FfY2hlY2tib3hcIixcbiAgICAgICAgaXRlbVNlbGVjdEFsbDogXCJzdl9xX2NoZWNrYm94X3NlbGVjdGFsbFwiLFxuICAgICAgICBpdGVtTm9uZTogXCJzdl9xX2NoZWNrYm94X25vbmVcIixcbiAgICAgICAgaXRlbUNoZWNrZWQ6IFwiY2hlY2tlZFwiLFxuICAgICAgICBpdGVtSW5saW5lOiBcInN2X3FfY2hlY2tib3hfaW5saW5lXCIsXG4gICAgICAgIGxhYmVsOiBcInN2X3FfY2hlY2tib3hfbGFiZWxcIixcbiAgICAgICAgbGFiZWxDaGVja2VkOiBcIlwiLFxuICAgICAgICBpdGVtQ29udHJvbDogXCJzdl9xX2NoZWNrYm94X2NvbnRyb2xfaXRlbVwiLFxuICAgICAgICBpdGVtRGVjb3JhdG9yOiBcInN2LWhpZGRlblwiLFxuICAgICAgICBjb250cm9sTGFiZWw6IFwic3ZfcV9jaGVja2JveF9jb250cm9sX2xhYmVsXCIsXG4gICAgICAgIG90aGVyOiBcInN2X3Ffb3RoZXIgc3ZfcV9jaGVja2JveF9vdGhlclwiLFxuICAgICAgICBjb2x1bW46IFwic3ZfcV9zZWxlY3RfY29sdW1uXCIsXG4gICAgfSxcbiAgICByYW5raW5nOiB7XG4gICAgICAgIHJvb3Q6IFwic3YtcmFua2luZ1wiLFxuICAgICAgICByb290TW9iaWxlTW9kOiBcInN2LXJhbmtpbmctLW1vYmlsZVwiLFxuICAgICAgICByb290RHJhZ01vZDogXCJzdi1yYW5raW5nLS1kcmFnXCIsXG4gICAgICAgIHJvb3REaXNhYmxlZDogXCJzdi1yYW5raW5nLS1kaXNhYmxlZFwiLFxuICAgICAgICByb290RHJhZ0hhbmRsZUFyZWFJY29uOiBcInN2LXJhbmtpbmctLWRyYWctaGFuZGxlLWFyZWEtaWNvblwiLFxuICAgICAgICByb290U2VsZWN0VG9SYW5rTW9kOiBcInN2LXJhbmtpbmctLXNlbGVjdC10by1yYW5rXCIsXG4gICAgICAgIHJvb3RTZWxlY3RUb1JhbmtBbGlnblZlcnRpY2FsOiBcInN2LXJhbmtpbmctLXNlbGVjdC10by1yYW5rLXZlcnRpY2FsXCIsXG4gICAgICAgIHJvb3RTZWxlY3RUb1JhbmtBbGlnbkhvcml6b250YWw6IFwic3YtcmFua2luZy0tc2VsZWN0LXRvLXJhbmstaG9yaXpvbnRhbFwiLFxuICAgICAgICBpdGVtOiBcInN2LXJhbmtpbmctaXRlbVwiLFxuICAgICAgICBpdGVtQ29udGVudDogXCJzdi1yYW5raW5nLWl0ZW1fX2NvbnRlbnRcIixcbiAgICAgICAgaXRlbUluZGV4OiBcInN2LXJhbmtpbmctaXRlbV9faW5kZXhcIixcbiAgICAgICAgaXRlbUluZGV4RW1wdHlNb2RlOiBcInN2LXJhbmtpbmctaXRlbV9faW5kZXgtLWVtcHR5XCIsXG4gICAgICAgIC8vIGl0ZW1UZXh0OiBcInN2LXJhbmtpbmctaXRlbV9fdGV4dFwiLFxuICAgICAgICBjb250cm9sTGFiZWw6IFwic3YtcmFua2luZy1pdGVtX190ZXh0XCIsXG4gICAgICAgIGl0ZW1HaG9zdE5vZGU6IFwic3YtcmFua2luZy1pdGVtX19naG9zdFwiLFxuICAgICAgICBpdGVtSWNvbkNvbnRhaW5lcjogXCJzdi1yYW5raW5nLWl0ZW1fX2ljb24tY29udGFpbmVyXCIsXG4gICAgICAgIGl0ZW1JY29uOiBcInN2LXJhbmtpbmctaXRlbV9faWNvblwiLFxuICAgICAgICBpdGVtSWNvbkhvdmVyTW9kOiBcInN2LXJhbmtpbmctaXRlbV9faWNvbi0taG92ZXJcIixcbiAgICAgICAgaXRlbUljb25Gb2N1c01vZDogXCJzdi1yYW5raW5nLWl0ZW1fX2ljb24tLWZvY3VzXCIsXG4gICAgICAgIGl0ZW1HaG9zdE1vZDogXCJzdi1yYW5raW5nLWl0ZW0tLWdob3N0XCIsXG4gICAgICAgIGl0ZW1EcmFnTW9kOiBcInN2LXJhbmtpbmctaXRlbS0tZHJhZ1wiLFxuICAgICAgICBjb250YWluZXI6IFwic3YtcmFua2luZ19fY29udGFpbmVyXCIsXG4gICAgICAgIGNvbnRhaW5lckVtcHR5TW9kZTogXCJzdi1yYW5raW5nX19jb250YWluZXItLWVtcHR5XCIsXG4gICAgICAgIGNvbnRhaW5lckZyb21Nb2RlOiBcInN2LXJhbmtpbmdfX2NvbnRhaW5lci0tZnJvbVwiLFxuICAgICAgICBjb250YWluZXJUb01vZGU6IFwic3YtcmFua2luZ19fY29udGFpbmVyLS10b1wiLFxuICAgICAgICBjb250YWluZXJQbGFjZWhvbGRlcjogXCJzdi1yYW5raW5nX19jb250YWluZXItcGxhY2Vob2xkZXJcIixcbiAgICAgICAgY29udGFpbmVyc0RpdmlkZXI6IFwic3YtcmFua2luZ19fY29udGFpbmVycy1kaXZpZGVyXCIsXG4gICAgfSxcbiAgICBjb21tZW50OiB7XG4gICAgICAgIHJlbWFpbmluZ0NoYXJhY3RlckNvdW50ZXI6IFwic3YtcmVtYWluaW5nLWNoYXJhY3Rlci1jb3VudGVyXCIsXG4gICAgfSxcbiAgICBkcm9wZG93bjoge1xuICAgICAgICByb290OiBcIlwiLFxuICAgICAgICBwb3B1cDogXCJzdi1kcm9wZG93bi1wb3B1cFwiLFxuICAgICAgICBjb250cm9sOiBcInN2X3FfZHJvcGRvd25fY29udHJvbFwiLFxuICAgICAgICBjb250cm9sSW5wdXRGaWVsZENvbXBvbmVudDogXCJzdl9xX2Ryb3Bkb3duX2NvbnRyb2xfX2lucHV0LWZpZWxkLWNvbXBvbmVudFwiLFxuICAgICAgICBzZWxlY3RXcmFwcGVyOiBcInN2X3NlbGVjdF93cmFwcGVyXCIsXG4gICAgICAgIG90aGVyOiBcInN2X3FfZGRfb3RoZXJcIixcbiAgICAgICAgY2xlYW5CdXR0b246IFwic3ZfcV9kcm9wZG93bl9jbGVhbi1idXR0b25cIixcbiAgICAgICAgY2xlYW5CdXR0b25Tdmc6IFwic3ZfcV9kcm9wZG93bl9jbGVhbi1idXR0b24tc3ZnXCIsXG4gICAgICAgIGNsZWFuQnV0dG9uSWNvbklkOiBcImljb24tY2xlYXJfMTZ4MTZcIixcbiAgICAgICAgY29udHJvbFZhbHVlOiBcInN2X3FfZHJvcGRvd25fX3ZhbHVlXCIsXG4gICAgICAgIGZpbHRlclN0cmluZ0lucHV0OiBcInN2X3FfZHJvcGRvd25fX2ZpbHRlci1zdHJpbmctaW5wdXRcIixcbiAgICAgICAgaGludFByZWZpeDogXCJzdl9xX2Ryb3Bkb3duX19oaW50LXByZWZpeFwiLFxuICAgICAgICBoaW50U3VmZml4OiBcInN2X3FfZHJvcGRvd25fX2hpbnQtc3VmZml4XCJcbiAgICB9LFxuICAgIGh0bWw6IHsgcm9vdDogXCJcIiB9LFxuICAgIGltYWdlOiB7XG4gICAgICAgIHJvb3Q6IFwic3ZfcV9pbWFnZVwiLFxuICAgICAgICBpbWFnZTogXCJzdl9pbWFnZV9pbWFnZVwiLFxuICAgICAgICBub0ltYWdlOiBcInN2LWltYWdlX19uby1pbWFnZVwiLFxuICAgICAgICBub0ltYWdlU3ZnSWNvbklkOiBcImljb24tbm8taW1hZ2VcIixcbiAgICB9LFxuICAgIG1hdHJpeDoge1xuICAgICAgICByb290OiBcInN2X3FfbWF0cml4XCIsXG4gICAgICAgIGxhYmVsOiBcInN2X3FfbV9sYWJlbFwiLFxuICAgICAgICBpdGVtQ2hlY2tlZDogXCJjaGVja2VkXCIsXG4gICAgICAgIGl0ZW1EZWNvcmF0b3I6IFwic3YtaGlkZGVuXCIsXG4gICAgICAgIGNlbGw6IFwic3ZfcV9tX2NlbGxcIixcbiAgICAgICAgY2VsbFRleHQ6IFwic3ZfcV9tX2NlbGxfdGV4dFwiLFxuICAgICAgICBjZWxsVGV4dFNlbGVjdGVkOiBcInN2X3FfbV9jZWxsX3NlbGVjdGVkXCIsXG4gICAgICAgIGNlbGxMYWJlbDogXCJzdl9xX21fY2VsbF9sYWJlbFwiLFxuICAgICAgICBjZWxsUmVzcG9uc2l2ZVRpdGxlOiBcInN2LWhpZGRlblwiXG4gICAgfSxcbiAgICBtYXRyaXhkcm9wZG93bjoge1xuICAgICAgICByb290OiBcInN2X3FfbWF0cml4X2Ryb3Bkb3duXCIsXG4gICAgICAgIGNlbGw6IFwic3ZfbWF0cml4X2NlbGxcIixcbiAgICAgICAgaGVhZGVyQ2VsbDogXCJzdl9tYXRyaXhfY2VsbF9oZWFkZXJcIixcbiAgICAgICAgcm93OiBcInN2X21hdHJpeF9yb3dcIixcbiAgICAgICAgcm93QWRkaXRpb25hbDogXCJzdi1tYXRyaXhfX3Jvdy0tYWRkaXRpb25hbFwiLFxuICAgICAgICBkZXRhaWxSb3c6IFwic3ZfbWF0cml4X2RldGFpbF9yb3dcIixcbiAgICAgICAgZGV0YWlsUm93VGV4dDogXCJzdl9tYXRyaXhfY2VsbF9kZXRhaWxfcm93dGV4dFwiLFxuICAgICAgICBkZXRhaWxDZWxsOiBcInN2X21hdHJpeF9jZWxsX2RldGFpbFwiLFxuICAgICAgICBjaG9pY2VDZWxsOiBcInN2LXRhYmxlX19jZWxsLS1jaG9pY2VcIixcbiAgICAgICAgZGV0YWlsQnV0dG9uOiBcInN2X21hdHJpeF9jZWxsX2RldGFpbF9idXR0b25cIixcbiAgICAgICAgZGV0YWlsQnV0dG9uRXhwYW5kZWQ6IFwic3ZfbWF0cml4X2NlbGxfZGV0YWlsX2J1dHRvbl9leHBhbmRlZFwiLFxuICAgICAgICBkZXRhaWxJY29uOiBcInN2X2RldGFpbF9wYW5lbF9pY29uXCIsXG4gICAgICAgIGRldGFpbEljb25FeHBhbmRlZDogXCJzdl9kZXRhaWxfZXhwYW5kZWRcIixcbiAgICAgICAgZGV0YWlsUGFuZWxDZWxsOiBcInN2X21hdHJpeF9jZWxsX2RldGFpbF9wYW5lbFwiLFxuICAgICAgICBhY3Rpb25zQ2VsbDogXCJzdl9tYXRyaXhfY2VsbCBzdl9tYXRyaXhfY2VsbF9hY3Rpb25zXCIsXG4gICAgfSxcbiAgICBtYXRyaXhkeW5hbWljOiB7XG4gICAgICAgIHJvb3Q6IFwic3ZfcV9tYXRyaXhfZHluYW1pY1wiLFxuICAgICAgICBidXR0b246IFwic3ZfbWF0cml4X2R5bmFtaWNfYnV0dG9uXCIsXG4gICAgICAgIGJ1dHRvbkFkZDogXCJcIixcbiAgICAgICAgYnV0dG9uUmVtb3ZlOiBcIlwiLFxuICAgICAgICBpY29uQWRkOiBcIlwiLFxuICAgICAgICBpY29uUmVtb3ZlOiBcIlwiLFxuICAgICAgICBpY29uRHJhZzogXCJzdi1tYXRyaXhkeW5hbWljX19kcmFnLWljb25cIixcbiAgICAgICAgY2VsbDogXCJzdl9tYXRyaXhfY2VsbFwiLFxuICAgICAgICBoZWFkZXJDZWxsOiBcInN2X21hdHJpeF9jZWxsX2hlYWRlclwiLFxuICAgICAgICByb3c6IFwic3ZfbWF0cml4X3Jvd1wiLFxuICAgICAgICBkZXRhaWxSb3c6IFwic3ZfbWF0cml4X2RldGFpbF9yb3dcIixcbiAgICAgICAgZGV0YWlsQ2VsbDogXCJzdl9tYXRyaXhfY2VsbF9kZXRhaWxcIixcbiAgICAgICAgY2hvaWNlQ2VsbDogXCJzdi10YWJsZV9fY2VsbC0tY2hvaWNlXCIsXG4gICAgICAgIGRldGFpbEJ1dHRvbjogXCJzdl9tYXRyaXhfY2VsbF9kZXRhaWxfYnV0dG9uXCIsXG4gICAgICAgIGRldGFpbEJ1dHRvbkV4cGFuZGVkOiBcInN2X21hdHJpeF9jZWxsX2RldGFpbF9idXR0b25fZXhwYW5kZWRcIixcbiAgICAgICAgZGV0YWlsSWNvbjogXCJzdl9kZXRhaWxfcGFuZWxfaWNvblwiLFxuICAgICAgICBkZXRhaWxJY29uRXhwYW5kZWQ6IFwic3ZfZGV0YWlsX2V4cGFuZGVkXCIsXG4gICAgICAgIGRldGFpbFBhbmVsQ2VsbDogXCJzdl9tYXRyaXhfY2VsbF9kZXRhaWxfcGFuZWxcIixcbiAgICAgICAgYWN0aW9uc0NlbGw6IFwic3ZfbWF0cml4X2NlbGwgc3ZfbWF0cml4X2NlbGxfYWN0aW9uc1wiLFxuICAgICAgICBlbXB0eVJvd3NTZWN0aW9uOiBcInN2X21hdHJpeF9lbXB0eV9yb3dzX3NlY3Rpb25cIixcbiAgICAgICAgZW1wdHlSb3dzVGV4dDogXCJzdl9tYXRyaXhfZW1wdHlfcm93c190ZXh0XCIsXG4gICAgICAgIGVtcHR5Um93c0J1dHRvbjogXCJcIixcbiAgICAgICAgZ2hvc3RSb3c6IFwic3YtbWF0cml4LXJvdy0tZHJhZy1kcm9wLWdob3N0LW1vZFwiXG4gICAgfSxcbiAgICBwYW5lbGR5bmFtaWM6IHtcbiAgICAgICAgcm9vdDogXCJzdl9wYW5lbF9keW5hbWljXCIsXG4gICAgICAgIHRpdGxlOiBcInN2X3BfdGl0bGVcIixcbiAgICAgICAgaGVhZGVyOiBcInN2LXBhbmVsZHluYW1pY19faGVhZGVyIHN2X2hlYWRlclwiLFxuICAgICAgICBoZWFkZXJUYWI6IFwic3YtcGFuZWxkeW5hbWljX19oZWFkZXItdGFiXCIsXG4gICAgICAgIGJ1dHRvbjogXCJcIixcbiAgICAgICAgYnV0dG9uQWRkOiBcInN2LXBhbmVsZHluYW1pY19fYWRkLWJ0blwiLFxuICAgICAgICBidXR0b25SZW1vdmU6IFwic3ZfcF9yZW1vdmVfYnRuXCIsXG4gICAgICAgIGJ1dHRvblJlbW92ZVJpZ2h0OiBcInN2X3BfcmVtb3ZlX2J0bl9yaWdodFwiLFxuICAgICAgICBidXR0b25QcmV2OiBcInN2LXBhbmVsZHluYW1pY19fcHJldi1idG5cIixcbiAgICAgICAgYnV0dG9uUHJldkRpc2FibGVkOiBcInN2LXBhbmVsZHluYW1pY19fcHJldi1idG4tLWRpc2FibGVkXCIsXG4gICAgICAgIGJ1dHRvbk5leHREaXNhYmxlZDogXCJzdi1wYW5lbGR5bmFtaWNfX25leHQtYnRuLS1kaXNhYmxlZFwiLFxuICAgICAgICBidXR0b25OZXh0OiBcInN2LXBhbmVsZHluYW1pY19fbmV4dC1idG5cIixcbiAgICAgICAgcHJvZ3Jlc3NDb250YWluZXI6IFwic3YtcGFuZWxkeW5hbWljX19wcm9ncmVzcy1jb250YWluZXJcIixcbiAgICAgICAgcHJvZ3Jlc3M6IFwic3YtcHJvZ3Jlc3NcIixcbiAgICAgICAgcHJvZ3Jlc3NCYXI6IFwic3YtcHJvZ3Jlc3NfX2JhclwiLFxuICAgICAgICBwcm9ncmVzc1RleHQ6IFwic3YtcGFuZWxkeW5hbWljX19wcm9ncmVzcy10ZXh0XCIsXG4gICAgICAgIHBhbmVsV3JhcHBlcjogXCJzdl9wX3dyYXBwZXJcIixcbiAgICAgICAgcGFuZWxXcmFwcGVySW5Sb3c6IFwic3ZfcF93cmFwcGVyX2luX3Jvd1wiLFxuICAgICAgICBmb290ZXI6IFwiXCIsXG4gICAgICAgIHByb2dyZXNzQnRuSWNvbjogXCJpY29uLXByb2dyZXNzYnV0dG9uXCJcbiAgICB9LFxuICAgIG11bHRpcGxldGV4dDoge1xuICAgICAgICByb290OiBcInN2X3FfbXRcIixcbiAgICAgICAgaXRlbVRpdGxlOiBcInN2X3FfbXRfdGl0bGVcIixcbiAgICAgICAgaXRlbTogXCJzdl9xX210X2l0ZW1cIixcbiAgICAgICAgcm93OiBcInN2X3FfbXRfcm93XCIsXG4gICAgICAgIGl0ZW1MYWJlbDogXCJzdl9xX210X2xhYmVsXCIsXG4gICAgICAgIGl0ZW1WYWx1ZTogXCJzdl9xX210X2l0ZW1fdmFsdWUgc3ZfcV90ZXh0X3Jvb3RcIixcbiAgICB9LFxuICAgIHJhZGlvZ3JvdXA6IHtcbiAgICAgICAgcm9vdDogXCJzdl9xY2JjXCIsXG4gICAgICAgIGl0ZW06IFwic3ZfcV9yYWRpb2dyb3VwXCIsXG4gICAgICAgIGl0ZW1DaGVja2VkOiBcImNoZWNrZWRcIixcbiAgICAgICAgaXRlbUlubGluZTogXCJzdl9xX3JhZGlvZ3JvdXBfaW5saW5lXCIsXG4gICAgICAgIGl0ZW1EZWNvcmF0b3I6IFwic3YtaGlkZGVuXCIsXG4gICAgICAgIGxhYmVsOiBcInN2X3FfcmFkaW9ncm91cF9sYWJlbFwiLFxuICAgICAgICBsYWJlbENoZWNrZWQ6IFwiXCIsXG4gICAgICAgIGl0ZW1Db250cm9sOiBcInN2X3FfcmFkaW9ncm91cF9jb250cm9sX2l0ZW1cIixcbiAgICAgICAgY29udHJvbExhYmVsOiBcIlwiLFxuICAgICAgICBvdGhlcjogXCJzdl9xX290aGVyIHN2X3FfcmFkaW9ncm91cF9vdGhlclwiLFxuICAgICAgICBjbGVhckJ1dHRvbjogXCJzdl9xX3JhZGlvZ3JvdXBfY2xlYXJcIixcbiAgICAgICAgY29sdW1uOiBcInN2X3Ffc2VsZWN0X2NvbHVtblwiLFxuICAgIH0sXG4gICAgYnV0dG9uZ3JvdXA6IHtcbiAgICAgICAgcm9vdDogXCJzdi1idXR0b24tZ3JvdXBcIixcbiAgICAgICAgaXRlbTogXCJzdi1idXR0b24tZ3JvdXBfX2l0ZW1cIixcbiAgICAgICAgaXRlbUljb246IFwic3YtYnV0dG9uLWdyb3VwX19pdGVtLWljb25cIixcbiAgICAgICAgaXRlbURlY29yYXRvcjogXCJzdi1idXR0b24tZ3JvdXBfX2l0ZW0tZGVjb3JhdG9yXCIsXG4gICAgICAgIGl0ZW1DYXB0aW9uOiBcInN2LWJ1dHRvbi1ncm91cF9faXRlbS1jYXB0aW9uXCIsXG4gICAgICAgIGl0ZW1Ib3ZlcjogXCJzdi1idXR0b24tZ3JvdXBfX2l0ZW0tLWhvdmVyXCIsXG4gICAgICAgIGl0ZW1TZWxlY3RlZDogXCJzdi1idXR0b24tZ3JvdXBfX2l0ZW0tLXNlbGVjdGVkXCIsXG4gICAgICAgIGl0ZW1EaXNhYmxlZDogXCJzdi1idXR0b24tZ3JvdXBfX2l0ZW0tLWRpc2FibGVkXCIsXG4gICAgICAgIGl0ZW1Db250cm9sOiBcInN2LXZpc3VhbGx5aGlkZGVuXCIsXG4gICAgfSxcbiAgICBpbWFnZXBpY2tlcjoge1xuICAgICAgICByb290OiBcInN2X2ltZ3NlbFwiLFxuICAgICAgICBpdGVtOiBcInN2X3FfaW1nc2VsXCIsXG4gICAgICAgIGl0ZW1DaGVja2VkOiBcImNoZWNrZWRcIixcbiAgICAgICAgbGFiZWw6IFwic3ZfcV9pbWdzZWxfbGFiZWxcIixcbiAgICAgICAgaXRlbUNvbnRyb2w6IFwic3ZfcV9pbWdzZWxfY29udHJvbF9pdGVtXCIsXG4gICAgICAgIGltYWdlOiBcInN2X3FfaW1nc2VsX2ltYWdlXCIsXG4gICAgICAgIGl0ZW1JbmxpbmU6IFwic3ZfcV9pbWFnZXBpY2tlcl9pbmxpbmVcIixcbiAgICAgICAgaXRlbVRleHQ6IFwic3ZfcV9pbWdzZWxfdGV4dFwiLFxuICAgICAgICBjbGVhckJ1dHRvbjogXCJzdl9xX3JhZGlvZ3JvdXBfY2xlYXJcIixcbiAgICAgICAgY29sdW1uOiBcInN2X3Ffc2VsZWN0X2NvbHVtblwiLFxuICAgICAgICBpdGVtTm9JbWFnZTogXCJzdl9xX2ltZ3NlbF9fbm8taW1hZ2VcIixcbiAgICAgICAgaXRlbU5vSW1hZ2VTdmdJY29uOiBcInN2X3FfaW1nc2VsX19uby1pbWFnZS1zdmdcIixcbiAgICAgICAgaXRlbU5vSW1hZ2VTdmdJY29uSWQ6IFwiaWNvbi1uby1pbWFnZVwiLFxuICAgIH0sXG4gICAgcmF0aW5nOiB7XG4gICAgICAgIHJvb3Q6IFwic3ZfcV9yYXRpbmdcIixcbiAgICAgICAgaXRlbTogXCJzdl9xX3JhdGluZ19pdGVtXCIsXG4gICAgICAgIGl0ZW1GaXhlZFNpemU6IFwic3ZfcV9yYXRpbmdfaXRlbV9maXhlZFwiLFxuICAgICAgICBzZWxlY3RlZDogXCJhY3RpdmVcIixcbiAgICAgICAgbWluVGV4dDogXCJzdl9xX3JhdGluZ19taW5fdGV4dFwiLFxuICAgICAgICBpdGVtVGV4dDogXCJzdl9xX3JhdGluZ19pdGVtX3RleHRcIixcbiAgICAgICAgbWF4VGV4dDogXCJzdl9xX3JhdGluZ19tYXhfdGV4dFwiLFxuICAgICAgICBpdGVtU3RhcjogXCJzdl9xX3JhdGluZ19faXRlbS1zdGFyXCIsXG4gICAgICAgIGl0ZW1TdGFyU2VsZWN0ZWQ6IFwic3ZfcV9yYXRpbmdfX2l0ZW0tc3Rhci0tc2VsZWN0ZWRcIixcbiAgICAgICAgaXRlbVNtaWxleTogXCJzdl9xX3JhdGluZ19faXRlbS1zbWlsZXlcIixcbiAgICAgICAgaXRlbVNtaWxleVNlbGVjdGVkOiBcInN2X3FfcmF0aW5nX19pdGVtLXNtaWxleS0tc2VsZWN0ZWRcIixcbiAgICB9LFxuICAgIHRleHQ6IHtcbiAgICAgICAgcm9vdDogXCJzdl9xX3RleHRfcm9vdFwiLFxuICAgICAgICByZW1haW5pbmdDaGFyYWN0ZXJDb3VudGVyOiBcInN2LXJlbWFpbmluZy1jaGFyYWN0ZXItY291bnRlclwiLFxuICAgIH0sXG4gICAgZXhwcmVzc2lvbjogXCJcIixcbiAgICBmaWxlOiB7XG4gICAgICAgIHJvb3Q6IFwic3ZfcV9maWxlXCIsXG4gICAgICAgIHBsYWNlaG9sZGVySW5wdXQ6IFwic3YtdmlzdWFsbHloaWRkZW5cIixcbiAgICAgICAgcHJldmlldzogXCJzdl9xX2ZpbGVfcHJldmlld1wiLFxuICAgICAgICByZW1vdmVCdXR0b246IFwic3ZfcV9maWxlX3JlbW92ZV9idXR0b25cIixcbiAgICAgICAgZmlsZUlucHV0OiBcInN2LXZpc3VhbGx5aGlkZGVuXCIsXG4gICAgICAgIHJlbW92ZUZpbGU6IFwic3ZfcV9maWxlX3JlbW92ZVwiLFxuICAgICAgICBmaWxlRGVjb3JhdG9yOiBcInN2LWZpbGVfX2RlY29yYXRvclwiLFxuICAgICAgICBmaWxlU2lnbjogXCJzdl9xX2ZpbGVfc2lnblwiLFxuICAgICAgICBjaG9vc2VGaWxlOiBcInN2X3FfZmlsZV9jaG9vc2VfYnV0dG9uXCIsXG4gICAgICAgIG5vRmlsZUNob3NlbjogXCJzdl9xX2ZpbGVfcGxhY2Vob2xkZXJcIixcbiAgICAgICAgZHJhZ0FyZWFQbGFjZWhvbGRlcjogXCJzdi1oaWRkZW5cIixcbiAgICAgICAgZmlsZUxpc3Q6IFwiXCIsXG4gICAgfSxcbiAgICBzaWduYXR1cmVwYWQ6IHtcbiAgICAgICAgcm9vdDogXCJzdl9xX3NpZ25hdHVyZXBhZCBzanNfc3BfY29udGFpbmVyXCIsXG4gICAgICAgIGNvbnRyb2xzOiBcInNqc19zcF9jb250cm9sc1wiLFxuICAgICAgICBwbGFjZWhvbGRlcjogXCJzanNfc3BfcGxhY2Vob2xkZXJcIixcbiAgICAgICAgY2FudmFzOiBcInNqc19zcF9jYW52YXNcIixcbiAgICAgICAgYmFja2dyb3VuZEltYWdlOiBcInNqc19zcF9fYmFja2dyb3VuZC1pbWFnZVwiLFxuICAgICAgICBjbGVhckJ1dHRvbjogXCJzanNfc3BfY2xlYXJcIixcbiAgICB9LFxuICAgIHNhdmVEYXRhOiB7XG4gICAgICAgIHJvb3Q6IFwic3Ytc2F2ZS1kYXRhX3Jvb3RcIixcbiAgICAgICAgaW5mbzogXCJzdi1zYXZlLWRhdGFfaW5mb1wiLFxuICAgICAgICBlcnJvcjogXCJzdi1zYXZlLWRhdGFfZXJyb3JcIixcbiAgICAgICAgc3VjY2VzczogXCJzdi1zYXZlLWRhdGFfc3VjY2Vzc1wiLFxuICAgICAgICBidXR0b246IFwic3Ytc2F2ZS1kYXRhX2J1dHRvblwiLFxuICAgICAgICBzaG93bjogXCJzdi1zYXZlLWRhdGFfcm9vdC0tc2hvd25cIlxuICAgIH0sXG4gICAgd2luZG93OiB7XG4gICAgICAgIHJvb3Q6IFwic3Zfd2luZG93XCIsXG4gICAgICAgIGJvZHk6IFwic3Zfd2luZG93X2NvbnRlbnRcIixcbiAgICAgICAgaGVhZGVyOiB7XG4gICAgICAgICAgICByb290OiBcInN2X3dpbmRvd190aXRsZVwiLFxuICAgICAgICAgICAgdGl0bGU6IFwiXCIsXG4gICAgICAgICAgICBidXR0b246IFwiXCIsXG4gICAgICAgICAgICBidXR0b25FeHBhbmRlZDogXCJcIixcbiAgICAgICAgICAgIGJ1dHRvbkNvbGxhcHNlZDogXCJcIixcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHZhcmlhYmxlczoge1xuICAgICAgICBtb2JpbGVXaWR0aDogXCItLXN2LW1vYmlsZS13aWR0aFwiLFxuICAgICAgICB0aGVtZU1hcms6IFwiLS1zdi1kZWZhdWx0LW1hcmtcIlxuICAgIH0sXG4gICAgdGFnYm94OiB7XG4gICAgICAgIHJvb3Q6IFwiXCIsXG4gICAgICAgIHBvcHVwOiBcInN2LWRyb3Bkb3duLXBvcHVwXCIsXG4gICAgICAgIHNtYWxsOiBcInN2X3Ffcm93X19xdWVzdGlvbi0tc21hbGxcIixcbiAgICAgICAgc2VsZWN0V3JhcHBlcjogXCJzdl9zZWxlY3Rfd3JhcHBlciBzdl9xX3RhZ2JveF93cmFwcGVyXCIsXG4gICAgICAgIG90aGVyOiBcInN2X3FfaW5wdXQgc3ZfcV9jb21tZW50IHN2X3Ffc2VsZWN0YmFzZV9fb3RoZXJcIixcbiAgICAgICAgY2xlYW5CdXR0b246IFwic3ZfcV90YWdib3hfY2xlYW4tYnV0dG9uIHN2X3FfZHJvcGRvd25fY2xlYW4tYnV0dG9uXCIsXG4gICAgICAgIGNsZWFuQnV0dG9uU3ZnOiBcInN2X3FfdGFnYm94X2NsZWFuLWJ1dHRvbi1zdmcgc3ZfcV9kcm9wZG93bl9jbGVhbi1idXR0b24tc3ZnXCIsXG4gICAgICAgIGNsZWFuQnV0dG9uSWNvbklkOiBcImljb24tY2xlYXJfMTZ4MTZcIixcbiAgICAgICAgY2xlYW5JdGVtQnV0dG9uOiBcInN2X3FfdGFnYm94LWl0ZW1fY2xlYW4tYnV0dG9uXCIsXG4gICAgICAgIGNsZWFuSXRlbUJ1dHRvblN2ZzogXCJzdl9xX3RhZ2JveC1pdGVtX2NsZWFuLWJ1dHRvbi1zdmdcIixcbiAgICAgICAgY2xlYW5JdGVtQnV0dG9uSWNvbklkOiBcImljb24tY2xlYXJfMTZ4MTZcIixcbiAgICAgICAgY29udHJvbDogXCJzdl9xX2lucHV0IHN2X3FfdGFnYm94IHN2X3FfZHJvcGRvd25fY29udHJvbFwiLFxuICAgICAgICBjb250cm9sVmFsdWU6IFwic3ZfcV90YWdib3hfX3ZhbHVlIHN2X3FfZHJvcGRvd25fX3ZhbHVlXCIsXG4gICAgICAgIGNvbnRyb2xFbXB0eTogXCJzdl9xX2Ryb3Bkb3duLS1lbXB0eSBzdl9xX3RhZ2JveC0tZW1wdHlcIixcbiAgICAgICAgcGxhY2Vob2xkZXJJbnB1dDogXCJzdl9xX3RhZ2JveF9fcGxhY2Vob2xkZXJcIixcbiAgICAgICAgZmlsdGVyU3RyaW5nSW5wdXQ6IFwic3ZfcV90YWdib3hfX2ZpbHRlci1zdHJpbmctaW5wdXQgc3ZfcV9kcm9wZG93bl9fZmlsdGVyLXN0cmluZy1pbnB1dFwiLFxuICAgICAgICBoaW50OiBcInN2X3FfdGFnYm94X19oaW50XCIsXG4gICAgICAgIGhpbnRQcmVmaXg6IFwic3ZfcV9kcm9wZG93bl9faGludC1wcmVmaXggc3ZfcV90YWdib3hfX2hpbnQtcHJlZml4XCIsXG4gICAgICAgIGhpbnRTdWZmaXg6IFwic3ZfcV9kcm9wZG93bl9faGludC1zdWZmaXggc3ZfcV90YWdib3hfX2hpbnQtc3VmZml4XCIsXG4gICAgICAgIGhpbnRTdWZmaXhXcmFwcGVyOiBcInN2X3FfdGFnYm94X19oaW50LXN1ZmZpeC13cmFwcGVyXCJcbiAgICB9LFxufTtcbl9kZWZhdWx0VjJDc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN1cnZleUNzc1wiXVtcImRlZmF1bHRcIl0gPSBkZWZhdWx0U3RhbmRhcmRDc3M7XG5fZGVmYXVsdFYyQ3NzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdXJ2ZXlDc3NcIl1bXCJvcmFuZ2VcIl0gPSBkZWZhdWx0U3RhbmRhcmRDc3M7XG5fZGVmYXVsdFYyQ3NzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdXJ2ZXlDc3NcIl1bXCJkYXJrYmx1ZVwiXSA9IGRlZmF1bHRTdGFuZGFyZENzcztcbl9kZWZhdWx0VjJDc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN1cnZleUNzc1wiXVtcImRhcmtyb3NlXCJdID0gZGVmYXVsdFN0YW5kYXJkQ3NzO1xuX2RlZmF1bHRWMkNzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3VydmV5Q3NzXCJdW1wic3RvbmVcIl0gPSBkZWZhdWx0U3RhbmRhcmRDc3M7XG5fZGVmYXVsdFYyQ3NzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdXJ2ZXlDc3NcIl1bXCJ3aW50ZXJcIl0gPSBkZWZhdWx0U3RhbmRhcmRDc3M7XG5fZGVmYXVsdFYyQ3NzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdXJ2ZXlDc3NcIl1bXCJ3aW50ZXJzdG9uZVwiXSA9IGRlZmF1bHRTdGFuZGFyZENzcztcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9kZWZhdWx0Q3NzL2RlZmF1bHRWMkNzcy50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9kZWZhdWx0Q3NzL2RlZmF1bHRWMkNzcy50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBzdXJ2ZXlDc3MsIGRlZmF1bHRWMkNzcywgZGVmYXVsdFYyVGhlbWVOYW1lICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN1cnZleUNzc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN1cnZleUNzczsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiZGVmYXVsdFYyQ3NzXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZGVmYXVsdFYyQ3NzOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJkZWZhdWx0VjJUaGVtZU5hbWVcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBkZWZhdWx0VjJUaGVtZU5hbWU7IH0pO1xudmFyIHN1cnZleUNzcyA9IHtcbiAgICBjdXJyZW50VHlwZTogXCJcIixcbiAgICBnZXRDc3M6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGxvYyA9IHRoaXMuY3VycmVudFR5cGUgPyB0aGlzW3RoaXMuY3VycmVudFR5cGVdIDogZGVmYXVsdFYyQ3NzO1xuICAgICAgICBpZiAoIWxvYylcbiAgICAgICAgICAgIGxvYyA9IGRlZmF1bHRWMkNzcztcbiAgICAgICAgcmV0dXJuIGxvYztcbiAgICB9LFxuICAgIGdldEF2YWlsYWJsZVRoZW1lczogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcykuZmlsdGVyKGZ1bmN0aW9uIChwcm9wZXJ0eU5hbWUpIHsgcmV0dXJuIFtcImN1cnJlbnRUeXBlXCIsIFwiZ2V0Q3NzXCIsIFwiZ2V0QXZhaWxhYmxlVGhlbWVzXCJdLmluZGV4T2YocHJvcGVydHlOYW1lKSA9PT0gLTE7IH0pO1xuICAgIH1cbn07XG52YXIgZGVmYXVsdFYyQ3NzID0ge1xuICAgIHJvb3Q6IFwic2Qtcm9vdC1tb2Rlcm5cIixcbiAgICByb290TW9iaWxlOiBcInNkLXJvb3QtbW9kZXJuLS1tb2JpbGVcIixcbiAgICByb290UmVhZE9ubHk6IFwic2Qtcm9vdC0tcmVhZG9ubHlcIixcbiAgICByb290Q29tcGFjdDogXCJzZC1yb290LS1jb21wYWN0XCIsXG4gICAgcm9vdEZpdFRvQ29udGFpbmVyOiBcInNkLXJvb3QtbW9kZXJuLS1mdWxsLWNvbnRhaW5lclwiLFxuICAgIHJvb3RCYWNrZ3JvdW5kSW1hZ2U6IFwic2Qtcm9vdF9iYWNrZ3JvdW5kLWltYWdlXCIsXG4gICAgY29udGFpbmVyOiBcInNkLWNvbnRhaW5lci1tb2Rlcm5cIixcbiAgICBoZWFkZXI6IFwic2QtdGl0bGUgc2QtY29udGFpbmVyLW1vZGVybl9fdGl0bGVcIixcbiAgICBib2R5Q29udGFpbmVyOiBcInN2LWNvbXBvbmVudHMtcm93XCIsXG4gICAgYm9keTogXCJzdi1jb21wb25lbnRzLWNvbHVtbiBzdi1jb21wb25lbnRzLWNvbHVtbi0tZXhwYW5kYWJsZSBzZC1ib2R5XCIsXG4gICAgYm9keVdpdGhUaW1lcjogXCJzZC1ib2R5LS13aXRoLXRpbWVyXCIsXG4gICAgY2xvY2tUaW1lclJvb3Q6IFwic2QtdGltZXJcIixcbiAgICBjbG9ja1RpbWVyUm9vdFRvcDogXCJzZC10aW1lci0tdG9wXCIsXG4gICAgY2xvY2tUaW1lclJvb3RCb3R0b206IFwic2QtdGltZXItLWJvdHRvbVwiLFxuICAgIGNsb2NrVGltZXJQcm9ncmVzczogXCJzZC10aW1lcl9fcHJvZ3Jlc3NcIixcbiAgICBjbG9ja1RpbWVyUHJvZ3Jlc3NBbmltYXRpb246IFwic2QtdGltZXJfX3Byb2dyZXNzLS1hbmltYXRpb25cIixcbiAgICBjbG9ja1RpbWVyVGV4dENvbnRhaW5lcjogXCJzZC10aW1lcl9fdGV4dC1jb250YWluZXJcIixcbiAgICBjbG9ja1RpbWVyTWlub3JUZXh0OiBcInNkLXRpbWVyX190ZXh0LS1taW5vclwiLFxuICAgIGNsb2NrVGltZXJNYWpvclRleHQ6IFwic2QtdGltZXJfX3RleHQtLW1ham9yXCIsXG4gICAgYm9keUVtcHR5OiBcInNkLWJvZHkgc2QtYm9keS0tZW1wdHlcIixcbiAgICBib2R5TG9hZGluZzogXCJzZC1ib2R5LS1sb2FkaW5nXCIsXG4gICAgZm9vdGVyOiBcInNkLWZvb3RlciBzZC1ib2R5X19uYXZpZ2F0aW9uIHNkLWNsZWFyZml4XCIsXG4gICAgdGl0bGU6IFwic2QtdGl0bGVcIixcbiAgICBkZXNjcmlwdGlvbjogXCJzZC1kZXNjcmlwdGlvblwiLFxuICAgIGxvZ286IFwic2QtbG9nb1wiLFxuICAgIGxvZ29JbWFnZTogXCJzZC1sb2dvX19pbWFnZVwiLFxuICAgIGhlYWRlclRleHQ6IFwic2QtaGVhZGVyX190ZXh0XCIsXG4gICAgaGVhZGVyQ2xvc2U6IFwic2QtaGlkZGVuXCIsXG4gICAgbmF2aWdhdGlvbkJ1dHRvbjogXCJcIixcbiAgICBib2R5TmF2aWdhdGlvbkJ1dHRvbjogXCJzZC1idG5cIixcbiAgICBjb21wbGV0ZWRQYWdlOiBcInNkLWNvbXBsZXRlZHBhZ2VcIixcbiAgICBjb21wbGV0ZWRCZWZvcmVQYWdlOiBcInNkLWNvbXBsZXRlZC1iZWZvcmUtcGFnZVwiLFxuICAgIHRpbWVyUm9vdDogXCJzZC1ib2R5X190aW1lclwiLFxuICAgIG5hdmlnYXRpb246IHtcbiAgICAgICAgY29tcGxldGU6IFwic2QtYnRuLS1hY3Rpb24gc2QtbmF2aWdhdGlvbl9fY29tcGxldGUtYnRuXCIsXG4gICAgICAgIHByZXY6IFwic2QtbmF2aWdhdGlvbl9fcHJldi1idG5cIixcbiAgICAgICAgbmV4dDogXCJzZC1uYXZpZ2F0aW9uX19uZXh0LWJ0blwiLFxuICAgICAgICBzdGFydDogXCJzZC1uYXZpZ2F0aW9uX19zdGFydC1idG5cIixcbiAgICAgICAgcHJldmlldzogXCJzZC1uYXZpZ2F0aW9uX19wcmV2aWV3LWJ0blwiLFxuICAgICAgICBlZGl0OiBcIlwiLFxuICAgIH0sXG4gICAgcGFuZWw6IHtcbiAgICAgICAgYXNQYWdlOiBcInNkLXBhbmVsLS1hcy1wYWdlXCIsXG4gICAgICAgIG51bWJlcjogXCJzZC1lbGVtZW50X19udW1cIixcbiAgICAgICAgdGl0bGU6IFwic2QtdGl0bGUgc2QtZWxlbWVudF9fdGl0bGUgc2QtcGFuZWxfX3RpdGxlXCIsXG4gICAgICAgIHRpdGxlRXhwYW5kYWJsZTogXCJzZC1lbGVtZW50X190aXRsZS0tZXhwYW5kYWJsZVwiLFxuICAgICAgICB0aXRsZU51bUlubGluZTogXCJzZC1lbGVtZW50X190aXRsZS0tbnVtLWlubGluZVwiLFxuICAgICAgICB0aXRsZUV4cGFuZGVkOiBcInNkLWVsZW1lbnRfX3RpdGxlLS1leHBhbmRlZFwiLFxuICAgICAgICB0aXRsZUNvbGxhcHNlZDogXCJzZC1lbGVtZW50X190aXRsZS0tY29sbGFwc2VkXCIsXG4gICAgICAgIHRpdGxlRGlzYWJsZWQ6IFwic2QtZWxlbWVudF9fdGl0bGUtLWRpc2FibGVkXCIsXG4gICAgICAgIHRpdGxlT25FeHBhbmQ6IFwic2QtcGFuZWxfX3RpdGxlLS1leHBhbmRlZFwiLFxuICAgICAgICB0aXRsZU9uRXJyb3I6IFwic2QtcGFuZWxfX3RpdGxlLS1lcnJvclwiLFxuICAgICAgICB0aXRsZUJhcjogXCJzZC1hY3Rpb24tdGl0bGUtYmFyXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcInNkLWRlc2NyaXB0aW9uIHNkLXBhbmVsX19kZXNjcmlwdGlvblwiLFxuICAgICAgICBjb250YWluZXI6IFwic2QtZWxlbWVudCBzZC1lbGVtZW50LS1jb21wbGV4IHNkLXBhbmVsIHNkLXJvd19fcGFuZWxcIixcbiAgICAgICAgd2l0aEZyYW1lOiBcInNkLWVsZW1lbnQtLXdpdGgtZnJhbWVcIixcbiAgICAgICAgY29udGVudDogXCJzZC1wYW5lbF9fY29udGVudFwiLFxuICAgICAgICBpY29uOiBcInNkLXBhbmVsX19pY29uXCIsXG4gICAgICAgIGljb25FeHBhbmRlZDogXCJzZC1wYW5lbF9faWNvbi0tZXhwYW5kZWRcIixcbiAgICAgICAgZm9vdGVyOiBcInNkLXBhbmVsX19mb290ZXJcIixcbiAgICAgICAgcmVxdWlyZWRUZXh0OiBcInNkLXBhbmVsX19yZXF1aXJlZC10ZXh0XCIsXG4gICAgICAgIGhlYWRlcjogXCJzZC1wYW5lbF9faGVhZGVyIHNkLWVsZW1lbnRfX2hlYWRlciBzZC1lbGVtZW50X19oZWFkZXItLWxvY2F0aW9uLXRvcFwiLFxuICAgICAgICBjb2xsYXBzZWQ6IFwic2QtZWxlbWVudC0tY29sbGFwc2VkXCIsXG4gICAgICAgIGV4cGFuZGVkOiBcInNkLWVsZW1lbnQtLWV4cGFuZGVkXCIsXG4gICAgICAgIG5lc3RlZDogXCJzZC1lbGVtZW50LS1uZXN0ZWRcIixcbiAgICAgICAgaW52aXNpYmxlOiBcInNkLWVsZW1lbnQtLWludmlzaWJsZVwiLFxuICAgICAgICBuYXZpZ2F0aW9uQnV0dG9uOiBcIlwiLFxuICAgICAgICBjb21wYWN0OiBcInNkLWVsZW1lbnQtLXdpdGgtZnJhbWUgc2QtZWxlbWVudC0tY29tcGFjdFwiXG4gICAgfSxcbiAgICBwYW5lbGR5bmFtaWM6IHtcbiAgICAgICAgbWFpblJvb3Q6IFwic2QtZWxlbWVudCAgc2QtcXVlc3Rpb24gc2QtcXVlc3Rpb24tLXBhbmVsZHluYW1pYyBzZC1lbGVtZW50LS1jb21wbGV4IHNkLXF1ZXN0aW9uLS1jb21wbGV4IHNkLXJvd19fcXVlc3Rpb25cIixcbiAgICAgICAgZW1wdHk6IFwic2QtcXVlc3Rpb24tLWVtcHR5XCIsXG4gICAgICAgIHJvb3Q6IFwic2QtcGFuZWxkeW5hbWljXCIsXG4gICAgICAgIGljb25SZW1vdmU6IFwic2QtaGlkZGVuXCIsXG4gICAgICAgIG5hdmlnYXRpb246IFwic2QtcGFuZWxkeW5hbWljX19uYXZpZ2F0aW9uXCIsXG4gICAgICAgIHRpdGxlOiBcInNkLXRpdGxlIHNkLWVsZW1lbnRfX3RpdGxlIHNkLXF1ZXN0aW9uX190aXRsZVwiLFxuICAgICAgICBoZWFkZXI6IFwic2QtcGFuZWxkeW5hbWljX19oZWFkZXIgc2QtZWxlbWVudF9faGVhZGVyXCIsXG4gICAgICAgIGhlYWRlclRhYjogXCJzZC1wYW5lbGR5bmFtaWNfX2hlYWRlci10YWJcIixcbiAgICAgICAgYnV0dG9uOiBcInNkLWFjdGlvbiBzZC1wYW5lbGR5bmFtaWNfX2J0blwiLFxuICAgICAgICBidXR0b25SZW1vdmU6IFwic2QtYWN0aW9uLS1uZWdhdGl2ZSBzZC1wYW5lbGR5bmFtaWNfX3JlbW92ZS1idG5cIixcbiAgICAgICAgYnV0dG9uQWRkOiBcInNkLXBhbmVsZHluYW1pY19fYWRkLWJ0blwiLFxuICAgICAgICBidXR0b25QcmV2OiBcInNkLXBhbmVsZHluYW1pY19fcHJldi1idG4gc2QtYWN0aW9uLS1pY29uIHNkLWFjdGlvblwiLFxuICAgICAgICBidXR0b25QcmV2RGlzYWJsZWQ6IFwic2QtYWN0aW9uLS1kaXNhYmxlZFwiLFxuICAgICAgICBidXR0b25OZXh0RGlzYWJsZWQ6IFwic2QtYWN0aW9uLS1kaXNhYmxlZFwiLFxuICAgICAgICBidXR0b25OZXh0OiBcInNkLXBhbmVsZHluYW1pY19fbmV4dC1idG4gc2QtYWN0aW9uLS1pY29uIHNkLWFjdGlvblwiLFxuICAgICAgICBwcm9ncmVzc0NvbnRhaW5lcjogXCJzZC1wYW5lbGR5bmFtaWNfX3Byb2dyZXNzLWNvbnRhaW5lclwiLFxuICAgICAgICBwcm9ncmVzczogXCJzZC1wcm9ncmVzc1wiLFxuICAgICAgICBwcm9ncmVzc0JhcjogXCJzZC1wcm9ncmVzc19fYmFyXCIsXG4gICAgICAgIHByb2dyZXNzVGV4dDogXCJzZC1wYW5lbGR5bmFtaWNfX3Byb2dyZXNzLXRleHRcIixcbiAgICAgICAgc2VwYXJhdG9yOiBcInNkLXBhbmVsZHluYW1pY19fc2VwYXJhdG9yXCIsXG4gICAgICAgIHBhbmVsV3JhcHBlcjogXCJzZC1wYW5lbGR5bmFtaWNfX3BhbmVsLXdyYXBwZXJcIixcbiAgICAgICAgZm9vdGVyOiBcInNkLXBhbmVsZHluYW1pY19fZm9vdGVyXCIsXG4gICAgICAgIHBhbmVsRm9vdGVyOiBcInNkLXBhbmVsZHluYW1pY19fcGFuZWwtZm9vdGVyXCIsXG4gICAgICAgIGZvb3RlckJ1dHRvbnNDb250YWluZXI6IFwic2QtcGFuZWxkeW5hbWljX19idXR0b25zLWNvbnRhaW5lclwiLFxuICAgICAgICBwYW5lbFdyYXBwZXJJblJvdzogXCJzZC1wYW5lbGR5bmFtaWNfX3BhbmVsLXdyYXBwZXItLWluLXJvd1wiLFxuICAgICAgICBwcm9ncmVzc0J0bkljb246IFwiaWNvbi1wcm9ncmVzc2J1dHRvbnYyXCIsXG4gICAgICAgIG5vRW50cmllc1BsYWNlaG9sZGVyOiBcInNkLXBhbmVsZHluYW1pY19fcGxhY2Vob2xkZXIgc2QtcXVlc3Rpb25fX3BsYWNlaG9sZGVyXCIsXG4gICAgICAgIGNvbXBhY3Q6IFwic2QtZWxlbWVudC0td2l0aC1mcmFtZSBzZC1lbGVtZW50LS1jb21wYWN0XCIsXG4gICAgICAgIHRhYnNSb290OiBcInNkLXRhYnMtdG9vbGJhclwiLFxuICAgICAgICB0YWJzTGVmdDogXCJzZC10YWJzLXRvb2xiYXItLWxlZnRcIixcbiAgICAgICAgdGFic1JpZ2h0OiBcInNkLXRhYnMtdG9vbGJhci0tcmlnaHRcIixcbiAgICAgICAgdGFic0NlbnRlcjogXCJzZC10YWJzLXRvb2xiYXItLWNlbnRlclwiLFxuICAgICAgICB0YWJzOiB7XG4gICAgICAgICAgICBpdGVtOiBcInNkLXRhYi1pdGVtXCIsXG4gICAgICAgICAgICBpdGVtUHJlc3NlZDogXCJzZC10YWItaXRlbS0tcHJlc3NlZFwiLFxuICAgICAgICAgICAgaXRlbUFzSWNvbjogXCJzZC10YWItaXRlbS0taWNvblwiLFxuICAgICAgICAgICAgaXRlbUljb246IFwic2QtdGFiLWl0ZW1fX2ljb25cIixcbiAgICAgICAgICAgIGl0ZW1UaXRsZTogXCJzZC10YWItaXRlbV9fdGl0bGVcIlxuICAgICAgICB9XG4gICAgfSxcbiAgICBwcm9ncmVzczogXCJzZC1wcm9ncmVzcyBzZC1ib2R5X19wcm9ncmVzc1wiLFxuICAgIHByb2dyZXNzVG9wOiBcInNkLWJvZHlfX3Byb2dyZXNzLS10b3BcIixcbiAgICBwcm9ncmVzc0JvdHRvbTogXCJzZC1ib2R5X19wcm9ncmVzcy0tYm90dG9tXCIsXG4gICAgcHJvZ3Jlc3NCYXI6IFwic2QtcHJvZ3Jlc3NfX2JhclwiLFxuICAgIHByb2dyZXNzVGV4dDogXCJzZC1wcm9ncmVzc19fdGV4dFwiLFxuICAgIHByb2dyZXNzQnV0dG9uc0NvbnRhaW5lckNlbnRlcjogXCJzZC1wcm9ncmVzcy1idXR0b25zX19jb250YWluZXItY2VudGVyXCIsXG4gICAgcHJvZ3Jlc3NCdXR0b25zQ29udGFpbmVyOiBcInNkLXByb2dyZXNzLWJ1dHRvbnNfX2NvbnRhaW5lclwiLFxuICAgIHByb2dyZXNzQnV0dG9uc0ltYWdlQnV0dG9uTGVmdDogXCJzZC1wcm9ncmVzcy1idXR0b25zX19pbWFnZS1idXR0b24tbGVmdFwiLFxuICAgIHByb2dyZXNzQnV0dG9uc0ltYWdlQnV0dG9uUmlnaHQ6IFwic2QtcHJvZ3Jlc3MtYnV0dG9uc19faW1hZ2UtYnV0dG9uLXJpZ2h0XCIsXG4gICAgcHJvZ3Jlc3NCdXR0b25zSW1hZ2VCdXR0b25IaWRkZW46IFwic2QtcHJvZ3Jlc3MtYnV0dG9uc19faW1hZ2UtYnV0dG9uLS1oaWRkZW5cIixcbiAgICBwcm9ncmVzc0J1dHRvbnNMaXN0Q29udGFpbmVyOiBcInNkLXByb2dyZXNzLWJ1dHRvbnNfX2xpc3QtY29udGFpbmVyXCIsXG4gICAgcHJvZ3Jlc3NCdXR0b25zTGlzdDogXCJzZC1wcm9ncmVzcy1idXR0b25zX19saXN0XCIsXG4gICAgcHJvZ3Jlc3NCdXR0b25zTGlzdEVsZW1lbnRQYXNzZWQ6IFwic2QtcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdC1lbGVtZW50LS1wYXNzZWRcIixcbiAgICBwcm9ncmVzc0J1dHRvbnNMaXN0RWxlbWVudEN1cnJlbnQ6IFwic2QtcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdC1lbGVtZW50LS1jdXJyZW50XCIsXG4gICAgcHJvZ3Jlc3NCdXR0b25zTGlzdEVsZW1lbnROb25DbGlja2FibGU6IFwic2QtcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdC1lbGVtZW50LS1ub25jbGlja2FibGVcIixcbiAgICBwcm9ncmVzc0J1dHRvbnNQYWdlVGl0bGU6IFwic2QtcHJvZ3Jlc3MtYnV0dG9uc19fcGFnZS10aXRsZVwiLFxuICAgIHByb2dyZXNzQnV0dG9uc1BhZ2VEZXNjcmlwdGlvbjogXCJzZC1wcm9ncmVzcy1idXR0b25zX19wYWdlLWRlc2NyaXB0aW9uXCIsXG4gICAgcHJvZ3Jlc3NUZXh0SW5CYXI6IFwic2QtaGlkZGVuXCIsXG4gICAgcGFnZToge1xuICAgICAgICByb290OiBcInNkLXBhZ2Ugc2QtYm9keV9fcGFnZVwiLFxuICAgICAgICBlbXB0eUhlYWRlclJvb3Q6IFwic2QtcGFnZV9fZW1wdHktaGVhZGVyXCIsXG4gICAgICAgIHRpdGxlOiBcInNkLXRpdGxlIHNkLXBhZ2VfX3RpdGxlXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcInNkLWRlc2NyaXB0aW9uIHNkLXBhZ2VfX2Rlc2NyaXB0aW9uXCJcbiAgICB9LFxuICAgIHBhZ2VUaXRsZTogXCJzZC10aXRsZSBzZC1wYWdlX190aXRsZVwiLFxuICAgIHBhZ2VEZXNjcmlwdGlvbjogXCJzZC1kZXNjcmlwdGlvbiBzZC1wYWdlX19kZXNjcmlwdGlvblwiLFxuICAgIHJvdzogXCJzZC1yb3cgc2QtY2xlYXJmaXhcIixcbiAgICByb3dNdWx0aXBsZTogXCJzZC1yb3ctLW11bHRpcGxlXCIsXG4gICAgcm93Q29tcGFjdDogXCJzZC1yb3ctLWNvbXBhY3RcIixcbiAgICBwYWdlUm93OiBcInNkLXBhZ2VfX3Jvd1wiLFxuICAgIHF1ZXN0aW9uOiB7XG4gICAgICAgIG1haW5Sb290OiBcInNkLWVsZW1lbnQgc2QtcXVlc3Rpb24gc2Qtcm93X19xdWVzdGlvblwiLFxuICAgICAgICBmbG93Um9vdDogXCJzZC1lbGVtZW50IHNkLXF1ZXN0aW9uIHNkLXJvd19fcXVlc3Rpb24gc2Qtcm93X19xdWVzdGlvbi0tZmxvd1wiLFxuICAgICAgICB3aXRoRnJhbWU6IFwic2QtZWxlbWVudC0td2l0aC1mcmFtZVwiLFxuICAgICAgICBhc0NlbGw6IFwic2QtdGFibGVfX2NlbGxcIixcbiAgICAgICAgYW5zd2VyZWQ6IFwic2QtcXVlc3Rpb24tLWFuc3dlcmVkXCIsXG4gICAgICAgIGhlYWRlcjogXCJzZC1xdWVzdGlvbl9faGVhZGVyIHNkLWVsZW1lbnRfX2hlYWRlclwiLFxuICAgICAgICBoZWFkZXJMZWZ0OiBcInNkLXF1ZXN0aW9uX19oZWFkZXItLWxvY2F0aW9uLS1sZWZ0XCIsXG4gICAgICAgIGhlYWRlclRvcDogXCJzZC1xdWVzdGlvbl9faGVhZGVyLS1sb2NhdGlvbi10b3Agc2QtZWxlbWVudF9faGVhZGVyLS1sb2NhdGlvbi10b3BcIixcbiAgICAgICAgaGVhZGVyQm90dG9tOiBcInNkLXF1ZXN0aW9uX19oZWFkZXItLWxvY2F0aW9uLS1ib3R0b21cIixcbiAgICAgICAgY29udGVudDogXCJzZC1xdWVzdGlvbl9fY29udGVudFwiLFxuICAgICAgICBjb250ZW50TGVmdDogXCJzZC1xdWVzdGlvbl9fY29udGVudC0tbGVmdFwiLFxuICAgICAgICB0aXRsZU51bUlubGluZTogXCJzZC1lbGVtZW50X190aXRsZS0tbnVtLWlubGluZVwiLFxuICAgICAgICB0aXRsZUxlZnRSb290OiBcInNkLXF1ZXN0aW9uLS1sZWZ0XCIsXG4gICAgICAgIHRpdGxlT25BbnN3ZXI6IFwic2QtcXVlc3Rpb25fX3RpdGxlLS1hbnN3ZXJcIixcbiAgICAgICAgdGl0bGVFbXB0eTogXCJzZC1xdWVzdGlvbl9fdGl0bGUtLWVtcHR5XCIsXG4gICAgICAgIHRpdGxlT25FcnJvcjogXCJzZC1xdWVzdGlvbl9fdGl0bGUtLWVycm9yXCIsXG4gICAgICAgIHRpdGxlOiBcInNkLXRpdGxlIHNkLWVsZW1lbnRfX3RpdGxlIHNkLXF1ZXN0aW9uX190aXRsZVwiLFxuICAgICAgICB0aXRsZUV4cGFuZGFibGU6IFwic2QtZWxlbWVudF9fdGl0bGUtLWV4cGFuZGFibGVcIixcbiAgICAgICAgdGl0bGVFeHBhbmRlZDogXCJzZC1lbGVtZW50X190aXRsZS0tZXhwYW5kZWRcIixcbiAgICAgICAgdGl0bGVDb2xsYXBzZWQ6IFwic2QtZWxlbWVudF9fdGl0bGUtLWNvbGxhcHNlZFwiLFxuICAgICAgICB0aXRsZURpc2FibGVkOiBcInNkLWVsZW1lbnRfX3RpdGxlLS1kaXNhYmxlZFwiLFxuICAgICAgICB0aXRsZUJhcjogXCJzZC1hY3Rpb24tdGl0bGUtYmFyXCIsXG4gICAgICAgIHJlcXVpcmVkVGV4dDogXCJzZC1xdWVzdGlvbl9fcmVxdWlyZWQtdGV4dFwiLFxuICAgICAgICBudW1iZXI6IFwic2QtZWxlbWVudF9fbnVtXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcInNkLWRlc2NyaXB0aW9uIHNkLXF1ZXN0aW9uX19kZXNjcmlwdGlvblwiLFxuICAgICAgICBkZXNjcmlwdGlvblVuZGVySW5wdXQ6IFwic2QtZGVzY3JpcHRpb24gc2QtcXVlc3Rpb25fX2Rlc2NyaXB0aW9uIHNkLXF1ZXN0aW9uX19kZXNjcmlwdGlvbi0tdW5kZXItaW5wdXRcIixcbiAgICAgICAgY29tbWVudDogXCJzZC1pbnB1dCBzZC1jb21tZW50XCIsXG4gICAgICAgIG90aGVyOiBcInNkLWlucHV0IHNkLWNvbW1lbnRcIixcbiAgICAgICAgcmVxdWlyZWQ6IFwic2QtcXVlc3Rpb24tLXJlcXVpcmVkXCIsXG4gICAgICAgIHRpdGxlUmVxdWlyZWQ6IFwic2QtcXVlc3Rpb25fX3RpdGxlLS1yZXF1aXJlZFwiLFxuICAgICAgICBpbmRlbnQ6IDIwLFxuICAgICAgICBmb290ZXI6IFwic2QtcXVlc3Rpb25fX2Zvb3RlclwiLFxuICAgICAgICBjb21tZW50QXJlYTogXCJzZC1xdWVzdGlvbl9fY29tbWVudC1hcmVhXCIsXG4gICAgICAgIGZvcm1Hcm91cDogXCJzZC1xdWVzdGlvbl9fZm9ybS1ncm91cFwiLFxuICAgICAgICBoYXNFcnJvcjogXCJzZC1xdWVzdGlvbi0tZXJyb3JcIixcbiAgICAgICAgY29sbGFwc2VkOiBcInNkLWVsZW1lbnQtLWNvbGxhcHNlZFwiLFxuICAgICAgICBleHBhbmRlZDogXCJzZC1lbGVtZW50LS1leHBhbmRlZFwiLFxuICAgICAgICBuZXN0ZWQ6IFwic2QtZWxlbWVudC0tbmVzdGVkXCIsXG4gICAgICAgIGludmlzaWJsZTogXCJzZC1lbGVtZW50LS1pbnZpc2libGVcIixcbiAgICAgICAgY29tcG9zaXRlOiBcInNkLWVsZW1lbnQtLWNvbXBsZXhcIixcbiAgICAgICAgZGlzYWJsZWQ6IFwic2QtcXVlc3Rpb24tLWRpc2FibGVkXCIsXG4gICAgfSxcbiAgICBpbWFnZToge1xuICAgICAgICBtYWluUm9vdDogXCJzZC1xdWVzdGlvbiBzZC1xdWVzdGlvbi0taW1hZ2VcIixcbiAgICAgICAgcm9vdDogXCJzZC1pbWFnZVwiLFxuICAgICAgICBpbWFnZTogXCJzZC1pbWFnZV9faW1hZ2VcIixcbiAgICAgICAgYWRhcHRpdmU6IFwic2QtaW1hZ2VfX2ltYWdlLS1hZGFwdGl2ZVwiLFxuICAgICAgICBub0ltYWdlOiBcInNkLWltYWdlX19uby1pbWFnZVwiLFxuICAgICAgICBub0ltYWdlU3ZnSWNvbklkOiBcImljb24tbm8taW1hZ2VcIixcbiAgICAgICAgd2l0aEZyYW1lOiBcIlwiXG4gICAgfSxcbiAgICBodG1sOiB7XG4gICAgICAgIG1haW5Sb290OiBcInNkLXF1ZXN0aW9uIHNkLXJvd19fcXVlc3Rpb24gc2QtcXVlc3Rpb24tLWh0bWxcIixcbiAgICAgICAgcm9vdDogXCJzZC1odG1sXCIsXG4gICAgICAgIHdpdGhGcmFtZTogXCJcIlxuICAgIH0sXG4gICAgZXJyb3I6IHtcbiAgICAgICAgcm9vdDogXCJzZC1xdWVzdGlvbl9fZXJib3hcIixcbiAgICAgICAgaWNvbjogXCJcIixcbiAgICAgICAgaXRlbTogXCJcIixcbiAgICAgICAgdG9vbHRpcDogXCJzZC1xdWVzdGlvbl9fZXJib3gtLXRvb2x0aXBcIixcbiAgICAgICAgb3V0c2lkZVF1ZXN0aW9uOiBcInNkLXF1ZXN0aW9uX19lcmJveC0tb3V0c2lkZS1xdWVzdGlvblwiLFxuICAgICAgICBhYm92ZVF1ZXN0aW9uOiBcInNkLXF1ZXN0aW9uX19lcmJveC0tYWJvdmUtcXVlc3Rpb25cIixcbiAgICAgICAgYmVsb3dRdWVzdGlvbjogXCJzZC1xdWVzdGlvbl9fZXJib3gtLWJlbG93LXF1ZXN0aW9uXCIsXG4gICAgICAgIGxvY2F0aW9uVG9wOiBcInNkLXF1ZXN0aW9uX19lcmJveC0tbG9jYXRpb24tLXRvcFwiLFxuICAgICAgICBsb2NhdGlvbkJvdHRvbTogXCJzZC1xdWVzdGlvbl9fZXJib3gtLWxvY2F0aW9uLS1ib3R0b21cIlxuICAgIH0sXG4gICAgY2hlY2tib3g6IHtcbiAgICAgICAgcm9vdDogXCJzZC1zZWxlY3RiYXNlXCIsXG4gICAgICAgIHJvb3RNb2JpbGU6IFwic2Qtc2VsZWN0YmFzZS0tbW9iaWxlXCIsXG4gICAgICAgIHJvb3RSb3c6IFwic2Qtc2VsZWN0YmFzZS0tcm93XCIsXG4gICAgICAgIHJvb3RNdWx0aUNvbHVtbjogXCJzZC1zZWxlY3RiYXNlLS1tdWx0aS1jb2x1bW5cIixcbiAgICAgICAgaXRlbTogXCJzZC1pdGVtIHNkLWNoZWNrYm94IHNkLXNlbGVjdGJhc2VfX2l0ZW1cIixcbiAgICAgICAgaXRlbU9uRXJyb3I6IFwic2QtaXRlbS0tZXJyb3JcIixcbiAgICAgICAgaXRlbVNlbGVjdEFsbDogXCJzZC1jaGVja2JveC0tc2VsZWN0YWxsXCIsXG4gICAgICAgIGl0ZW1Ob25lOiBcInNkLWNoZWNrYm94LS1ub25lXCIsXG4gICAgICAgIGl0ZW1EaXNhYmxlZDogXCJzZC1pdGVtLS1kaXNhYmxlZCBzZC1jaGVja2JveC0tZGlzYWJsZWRcIixcbiAgICAgICAgaXRlbUNoZWNrZWQ6IFwic2QtaXRlbS0tY2hlY2tlZCBzZC1jaGVja2JveC0tY2hlY2tlZFwiLFxuICAgICAgICBpdGVtSG92ZXI6IFwic2QtaXRlbS0tYWxsb3dob3ZlciBzZC1jaGVja2JveC0tYWxsb3dob3ZlclwiLFxuICAgICAgICBpdGVtSW5saW5lOiBcInNkLXNlbGVjdGJhc2VfX2l0ZW0tLWlubGluZVwiLFxuICAgICAgICBsYWJlbDogXCJzZC1zZWxlY3RiYXNlX19sYWJlbFwiLFxuICAgICAgICBsYWJlbENoZWNrZWQ6IFwiXCIsXG4gICAgICAgIGl0ZW1Db250cm9sOiBcInNkLXZpc3VhbGx5aGlkZGVuIHNkLWl0ZW1fX2NvbnRyb2wgc2QtY2hlY2tib3hfX2NvbnRyb2xcIixcbiAgICAgICAgaXRlbURlY29yYXRvcjogXCJzZC1pdGVtX19zdmcgc2QtY2hlY2tib3hfX3N2Z1wiLFxuICAgICAgICBpdGVtU3ZnSWNvbklkOiBcIiNpY29uLXYyY2hlY2tcIixcbiAgICAgICAgY29udHJvbExhYmVsOiBcInNkLWl0ZW1fX2NvbnRyb2wtbGFiZWxcIixcbiAgICAgICAgbWF0ZXJpYWxEZWNvcmF0b3I6IFwic2QtaXRlbV9fZGVjb3JhdG9yIHNkLWNoZWNrYm94X19kZWNvcmF0b3JcIixcbiAgICAgICAgb3RoZXI6IFwic2QtaW5wdXQgc2QtY29tbWVudCBzZC1zZWxlY3RiYXNlX19vdGhlclwiLFxuICAgICAgICBjb2x1bW46IFwic2Qtc2VsZWN0YmFzZV9fY29sdW1uXCIsXG4gICAgfSxcbiAgICByYWRpb2dyb3VwOiB7XG4gICAgICAgIHJvb3Q6IFwic2Qtc2VsZWN0YmFzZVwiLFxuICAgICAgICByb290TW9iaWxlOiBcInNkLXNlbGVjdGJhc2UtLW1vYmlsZVwiLFxuICAgICAgICByb290Um93OiBcInNkLXNlbGVjdGJhc2UtLXJvd1wiLFxuICAgICAgICByb290TXVsdGlDb2x1bW46IFwic2Qtc2VsZWN0YmFzZS0tbXVsdGktY29sdW1uXCIsXG4gICAgICAgIGl0ZW06IFwic2QtaXRlbSBzZC1yYWRpbyBzZC1zZWxlY3RiYXNlX19pdGVtXCIsXG4gICAgICAgIGl0ZW1PbkVycm9yOiBcInNkLWl0ZW0tLWVycm9yXCIsXG4gICAgICAgIGl0ZW1JbmxpbmU6IFwic2Qtc2VsZWN0YmFzZV9faXRlbS0taW5saW5lXCIsXG4gICAgICAgIGxhYmVsOiBcInNkLXNlbGVjdGJhc2VfX2xhYmVsXCIsXG4gICAgICAgIGxhYmVsQ2hlY2tlZDogXCJcIixcbiAgICAgICAgaXRlbURpc2FibGVkOiBcInNkLWl0ZW0tLWRpc2FibGVkIHNkLXJhZGlvLS1kaXNhYmxlZFwiLFxuICAgICAgICBpdGVtQ2hlY2tlZDogXCJzZC1pdGVtLS1jaGVja2VkIHNkLXJhZGlvLS1jaGVja2VkXCIsXG4gICAgICAgIGl0ZW1Ib3ZlcjogXCJzZC1pdGVtLS1hbGxvd2hvdmVyIHNkLXJhZGlvLS1hbGxvd2hvdmVyXCIsXG4gICAgICAgIGl0ZW1Db250cm9sOiBcInNkLXZpc3VhbGx5aGlkZGVuIHNkLWl0ZW1fX2NvbnRyb2wgc2QtcmFkaW9fX2NvbnRyb2xcIixcbiAgICAgICAgaXRlbURlY29yYXRvcjogXCJzZC1pdGVtX19zdmcgc2QtcmFkaW9fX3N2Z1wiLFxuICAgICAgICBjb250cm9sTGFiZWw6IFwic2QtaXRlbV9fY29udHJvbC1sYWJlbFwiLFxuICAgICAgICBtYXRlcmlhbERlY29yYXRvcjogXCJzZC1pdGVtX19kZWNvcmF0b3Igc2QtcmFkaW9fX2RlY29yYXRvclwiLFxuICAgICAgICBvdGhlcjogXCJzZC1pbnB1dCBzZC1jb21tZW50IHNkLXNlbGVjdGJhc2VfX290aGVyXCIsXG4gICAgICAgIGNsZWFyQnV0dG9uOiBcIlwiLFxuICAgICAgICBjb2x1bW46IFwic2Qtc2VsZWN0YmFzZV9fY29sdW1uXCJcbiAgICB9LFxuICAgIGJvb2xlYW46IHtcbiAgICAgICAgbWFpblJvb3Q6IFwic2QtZWxlbWVudCBzZC1xdWVzdGlvbiBzZC1yb3dfX3F1ZXN0aW9uIHNkLXF1ZXN0aW9uLS1ib29sZWFuXCIsXG4gICAgICAgIHJvb3Q6IFwic3ZfcWNiYyBzdl9xYmxuIHNkLXNjcm9sbGFibGUtY29udGFpbmVyIHNkLWJvb2xlYW4tcm9vdFwiLFxuICAgICAgICByb290UmFkaW86IFwic3ZfcWNiYyBzdl9xYmxuIHNkLXNjcm9sbGFibGUtY29udGFpbmVyIHNkLXNjcm9sbGFibGUtY29udGFpbmVyLS1jb21wYWN0XCIsXG4gICAgICAgIGl0ZW06IFwic2QtYm9vbGVhblwiLFxuICAgICAgICBpdGVtT25FcnJvcjogXCJzZC1ib29sZWFuLS1lcnJvclwiLFxuICAgICAgICBjb250cm9sOiBcInNkLWJvb2xlYW5fX2NvbnRyb2wgc2QtdmlzdWFsbHloaWRkZW5cIixcbiAgICAgICAgaXRlbUNoZWNrZWQ6IFwic2QtYm9vbGVhbi0tY2hlY2tlZFwiLFxuICAgICAgICBpdGVtSW5kZXRlcm1pbmF0ZTogXCJzZC1ib29sZWFuLS1pbmRldGVybWluYXRlXCIsXG4gICAgICAgIGl0ZW1EaXNhYmxlZDogXCJzZC1ib29sZWFuLS1kaXNhYmxlZFwiLFxuICAgICAgICBpdGVtSG92ZXI6IFwic2QtYm9vbGVhbi0tYWxsb3dob3ZlclwiLFxuICAgICAgICBsYWJlbDogXCJzZC1ib29sZWFuX19sYWJlbFwiLFxuICAgICAgICBsYWJlbFRydWU6IFwic2QtYm9vbGVhbl9fbGFiZWwtLXRydWVcIixcbiAgICAgICAgbGFiZWxGYWxzZTogXCJzZC1ib29sZWFuX19sYWJlbC0tZmFsc2VcIixcbiAgICAgICAgc3dpdGNoOiBcInNkLWJvb2xlYW5fX3N3aXRjaFwiLFxuICAgICAgICBkaXNhYmxlZExhYmVsOiBcInNkLWNoZWNrYm94X19sYWJlbC0tZGlzYWJsZWRcIixcbiAgICAgICAgc2xpZGVyVGV4dDogXCJzZC1ib29sZWFuX190aHVtYi10ZXh0XCIsXG4gICAgICAgIHNsaWRlcjogXCJzZC1ib29sZWFuX190aHVtYlwiLFxuICAgICAgICBzbGlkZXJHaG9zdDogXCJzZC1ib29sZWFuX190aHVtYi1naG9zdFwiLFxuICAgICAgICAvL3JhZGlvXG4gICAgICAgIHJhZGlvSXRlbTogXCJzZC1pdGVtXCIsXG4gICAgICAgIHJhZGlvSXRlbUNoZWNrZWQ6IFwic2QtaXRlbS0tY2hlY2tlZCBzZC1yYWRpby0tY2hlY2tlZFwiLFxuICAgICAgICByYWRpb0xhYmVsOiBcInNkLXNlbGVjdGJhc2VfX2xhYmVsXCIsXG4gICAgICAgIHJhZGlvQ29udHJvbExhYmVsOiBcInNkLWl0ZW1fX2NvbnRyb2wtbGFiZWxcIixcbiAgICAgICAgcmFkaW9GaWVsZHNldDogXCJzZC1zZWxlY3RiYXNlXCIsXG4gICAgICAgIGl0ZW1SYWRpb0RlY29yYXRvcjogXCJzZC1pdGVtX19zdmcgc2QtcmFkaW9fX3N2Z1wiLFxuICAgICAgICBtYXRlcmlhbFJhZGlvRGVjb3JhdG9yOiBcInNkLWl0ZW1fX2RlY29yYXRvciBzZC1yYWRpb19fZGVjb3JhdG9yXCIsXG4gICAgICAgIGl0ZW1SYWRpb0NvbnRyb2w6IFwic2QtdmlzdWFsbHloaWRkZW4gc2QtaXRlbV9fY29udHJvbCBzZC1yYWRpb19fY29udHJvbFwiLFxuICAgICAgICAvL2VuZCByYWRpb1xuICAgICAgICAvL2NoZWNrYm94XG4gICAgICAgIHJvb3RDaGVja2JveDogXCJzZC1zZWxlY3RiYXNlXCIsXG4gICAgICAgIGNoZWNrYm94SXRlbTogXCJzZC1pdGVtIHNkLXNlbGVjdGJhc2VfX2l0ZW0gc2QtY2hlY2tib3hcIixcbiAgICAgICAgY2hlY2tib3hMYWJlbDogXCJzZC1zZWxlY3RiYXNlX19sYWJlbFwiLFxuICAgICAgICBjaGVja2JveEl0ZW1PbkVycm9yOiBcInNkLWl0ZW0tLWVycm9yXCIsXG4gICAgICAgIGNoZWNrYm94SXRlbUluZGV0ZXJtaW5hdGU6IFwic2QtY2hlY2tib3gtLWludGVybWVkaWF0ZVwiLFxuICAgICAgICBjaGVja2JveEl0ZW1DaGVja2VkOiBcInNkLWl0ZW0tLWNoZWNrZWQgc2QtY2hlY2tib3gtLWNoZWNrZWRcIixcbiAgICAgICAgY2hlY2tib3hJdGVtRGVjb3JhdG9yOiBcInNkLWl0ZW1fX3N2ZyBzZC1jaGVja2JveF9fc3ZnXCIsXG4gICAgICAgIGNoZWNrYm94SXRlbURpc2FibGVkOiBcInNkLWl0ZW0tLWRpc2FibGVkIHNkLWNoZWNrYm94LS1kaXNhYmxlZFwiLFxuICAgICAgICBjb250cm9sQ2hlY2tib3g6IFwic2QtdmlzdWFsbHloaWRkZW4gc2QtaXRlbV9fY29udHJvbCBzZC1jaGVja2JveF9fY29udHJvbFwiLFxuICAgICAgICBjaGVja2JveE1hdGVyaWFsRGVjb3JhdG9yOiBcInNkLWl0ZW1fX2RlY29yYXRvciBzZC1jaGVja2JveF9fZGVjb3JhdG9yXCIsXG4gICAgICAgIGNoZWNrYm94Q29udHJvbExhYmVsOiBcInNkLWl0ZW1fX2NvbnRyb2wtbGFiZWxcIixcbiAgICAgICAgc3ZnSWNvbkNoZWNrZWRJZDogXCIjaWNvbi12MmNoZWNrXCIsXG4gICAgfSxcbiAgICB0ZXh0OiB7XG4gICAgICAgIHJvb3Q6IFwic2QtaW5wdXQgc2QtdGV4dFwiLFxuICAgICAgICBzbWFsbDogXCJzZC1yb3dfX3F1ZXN0aW9uLS1zbWFsbFwiLFxuICAgICAgICBjb250cm9sRGlzYWJsZWQ6IFwic2QtaW5wdXQtLWRpc2FibGVkXCIsXG4gICAgICAgIGNvbnRlbnQ6IFwic2QtdGV4dF9fY29udGVudCBzZC1xdWVzdGlvbl9fY29udGVudFwiLFxuICAgICAgICByZW1haW5pbmdDaGFyYWN0ZXJDb3VudGVyOiBcInNkLXJlbWFpbmluZy1jaGFyYWN0ZXItY291bnRlclwiLFxuICAgICAgICBvbkVycm9yOiBcInNkLWlucHV0LS1lcnJvclwiXG4gICAgfSxcbiAgICBtdWx0aXBsZXRleHQ6IHtcbiAgICAgICAgcm9vdDogXCJzZC1tdWx0aXBsZXRleHRcIixcbiAgICAgICAgcm9vdE1vYmlsZTogXCJzZC1tdWx0aXBsZXRleHQtLW1vYmlsZVwiLFxuICAgICAgICBpdGVtTGFiZWw6IFwic2QtbXVsdGlwbGV0ZXh0X19pdGVtLWNvbnRhaW5lciBzZC1pbnB1dFwiLFxuICAgICAgICBpdGVtTGFiZWxPbkVycm9yOiBcInNkLW11bHRpcGxldGV4dF9faXRlbS1jb250YWluZXItLWVycm9yXCIsXG4gICAgICAgIGl0ZW1MYWJlbEFsbG93Rm9jdXM6IFwic2QtbXVsdGlwbGV0ZXh0X19pdGVtLWNvbnRhaW5lci0tYWxsb3ctZm9jdXNcIixcbiAgICAgICAgaXRlbUxhYmVsQW5zd2VyZWQ6IFwic2QtbXVsdGlwbGV0ZXh0X19pdGVtLWNvbnRhaW5lci0tYW5zd2VyZWRcIixcbiAgICAgICAgaXRlbTogXCJzZC1tdWx0aXBsZXRleHRfX2l0ZW1cIixcbiAgICAgICAgaXRlbVRpdGxlOiBcInNkLW11bHRpcGxldGV4dF9faXRlbS10aXRsZVwiLFxuICAgICAgICBjb250ZW50OiBcInNkLW11bHRpcGxldGV4dF9fY29udGVudCBzZC1xdWVzdGlvbl9fY29udGVudFwiLFxuICAgICAgICByb3c6IFwic2QtbXVsdGlwbGV0ZXh0X19yb3dcIixcbiAgICAgICAgY2VsbDogXCJzZC1tdWx0aXBsZXRleHRfX2NlbGxcIixcbiAgICAgICAgY2VsbEVycm9yOiBcInNkLW11bHRpcGxldGV4dF9fY2VsbC0tZXJyb3JcIixcbiAgICAgICAgY2VsbEVycm9yVG9wOiBcInNkLW11bHRpcGxldGV4dF9fY2VsbC0tZXJyb3ItdG9wXCIsXG4gICAgICAgIGNlbGxFcnJvckJvdHRvbTogXCJzZC1tdWx0aXBsZXRleHRfX2NlbGwtLWVycm9yLWJvdHRvbVwiXG4gICAgfSxcbiAgICBkcm9wZG93bjoge1xuICAgICAgICByb290OiBcInNkLXNlbGVjdGJhc2VcIixcbiAgICAgICAgcG9wdXA6IFwic3YtZHJvcGRvd24tcG9wdXBcIixcbiAgICAgICAgc21hbGw6IFwic2Qtcm93X19xdWVzdGlvbi0tc21hbGxcIixcbiAgICAgICAgc2VsZWN0V3JhcHBlcjogXCJzdi1kcm9wZG93bl9zZWxlY3Qtd3JhcHBlclwiLFxuICAgICAgICBvdGhlcjogXCJzZC1pbnB1dCBzZC1jb21tZW50IHNkLXNlbGVjdGJhc2VfX290aGVyXCIsXG4gICAgICAgIG9uRXJyb3I6IFwic2QtaW5wdXQtLWVycm9yXCIsXG4gICAgICAgIGxhYmVsOiBcInNkLXNlbGVjdGJhc2VfX2xhYmVsXCIsXG4gICAgICAgIGl0ZW06IFwic2QtaXRlbSBzZC1yYWRpbyBzZC1zZWxlY3RiYXNlX19pdGVtXCIsXG4gICAgICAgIGl0ZW1EaXNhYmxlZDogXCJzZC1pdGVtLS1kaXNhYmxlZCBzZC1yYWRpby0tZGlzYWJsZWRcIixcbiAgICAgICAgaXRlbUNoZWNrZWQ6IFwic2QtaXRlbS0tY2hlY2tlZCBzZC1yYWRpby0tY2hlY2tlZFwiLFxuICAgICAgICBpdGVtSG92ZXI6IFwic2QtaXRlbS0tYWxsb3dob3ZlciBzZC1yYWRpby0tYWxsb3dob3ZlclwiLFxuICAgICAgICBpdGVtQ29udHJvbDogXCJzZC12aXN1YWxseWhpZGRlbiBzZC1pdGVtX19jb250cm9sIHNkLXJhZGlvX19jb250cm9sXCIsXG4gICAgICAgIGl0ZW1EZWNvcmF0b3I6IFwic2QtaXRlbV9fc3ZnIHNkLXJhZGlvX19zdmdcIixcbiAgICAgICAgY2xlYW5CdXR0b246IFwic2QtZHJvcGRvd25fY2xlYW4tYnV0dG9uXCIsXG4gICAgICAgIGNsZWFuQnV0dG9uU3ZnOiBcInNkLWRyb3Bkb3duX2NsZWFuLWJ1dHRvbi1zdmdcIixcbiAgICAgICAgY2xlYW5CdXR0b25JY29uSWQ6IFwiaWNvbi1jbGVhclwiLFxuICAgICAgICBjaGV2cm9uQnV0dG9uOiBcInNkLWRyb3Bkb3duX2NoZXZyb24tYnV0dG9uXCIsXG4gICAgICAgIGNoZXZyb25CdXR0b25Tdmc6IFwic2QtZHJvcGRvd25fY2hldnJvbi1idXR0b24tc3ZnXCIsXG4gICAgICAgIGNoZXZyb25CdXR0b25JY29uSWQ6IFwiaWNvbi1jaGV2cm9uXCIsXG4gICAgICAgIGNvbnRyb2w6IFwic2QtaW5wdXQgc2QtZHJvcGRvd25cIixcbiAgICAgICAgY29udHJvbElucHV0RmllbGRDb21wb25lbnQ6IFwic2QtZHJvcGRvd25fX2lucHV0LWZpZWxkLWNvbXBvbmVudFwiLFxuICAgICAgICBjb250cm9sVmFsdWU6IFwic2QtZHJvcGRvd25fX3ZhbHVlXCIsXG4gICAgICAgIGNvbnRyb2xEaXNhYmxlZDogXCJzZC1pbnB1dC0tZGlzYWJsZWRcIixcbiAgICAgICAgY29udHJvbEVtcHR5OiBcInNkLWRyb3Bkb3duLS1lbXB0eVwiLFxuICAgICAgICBjb250cm9sTGFiZWw6IFwic2QtaXRlbV9fY29udHJvbC1sYWJlbFwiLFxuICAgICAgICBmaWx0ZXJTdHJpbmdJbnB1dDogXCJzZC1kcm9wZG93bl9fZmlsdGVyLXN0cmluZy1pbnB1dFwiLFxuICAgICAgICBtYXRlcmlhbERlY29yYXRvcjogXCJzZC1pdGVtX19kZWNvcmF0b3Igc2QtcmFkaW9fX2RlY29yYXRvclwiLFxuICAgICAgICBoaW50UHJlZml4OiBcInNkLWRyb3Bkb3duX19oaW50LXByZWZpeFwiLFxuICAgICAgICBoaW50U3VmZml4OiBcInNkLWRyb3Bkb3duX19oaW50LXN1ZmZpeFwiXG4gICAgfSxcbiAgICBpbWFnZXBpY2tlcjoge1xuICAgICAgICBtYWluUm9vdDogXCJzZC1lbGVtZW50IHNkLXF1ZXN0aW9uIHNkLXJvd19fcXVlc3Rpb25cIixcbiAgICAgICAgcm9vdDogXCJzZC1zZWxlY3RiYXNlIHNkLWltYWdlcGlja2VyXCIsXG4gICAgICAgIHJvb3RDb2x1bW46IFwic2QtaW1hZ2VwaWNrZXItLWNvbHVtblwiLFxuICAgICAgICBpdGVtOiBcInNkLWltYWdlcGlja2VyX19pdGVtXCIsXG4gICAgICAgIGl0ZW1PbkVycm9yOiBcInNkLWltYWdlcGlja2VyX19pdGVtLS1lcnJvclwiLFxuICAgICAgICBpdGVtSW5saW5lOiBcInNkLWltYWdlcGlja2VyX19pdGVtLS1pbmxpbmVcIixcbiAgICAgICAgaXRlbUNoZWNrZWQ6IFwic2QtaW1hZ2VwaWNrZXJfX2l0ZW0tLWNoZWNrZWRcIixcbiAgICAgICAgaXRlbURpc2FibGVkOiBcInNkLWltYWdlcGlja2VyX19pdGVtLS1kaXNhYmxlZFwiLFxuICAgICAgICBpdGVtSG92ZXI6IFwic2QtaW1hZ2VwaWNrZXJfX2l0ZW0tLWFsbG93aG92ZXJcIixcbiAgICAgICAgbGFiZWw6IFwic2QtaW1hZ2VwaWNrZXJfX2xhYmVsXCIsXG4gICAgICAgIGl0ZW1EZWNvcmF0b3I6IFwic2QtaW1hZ2VwaWNrZXJfX2l0ZW0tZGVjb3JhdG9yXCIsXG4gICAgICAgIGltYWdlQ29udGFpbmVyOiBcInNkLWltYWdlcGlja2VyX19pbWFnZS1jb250YWluZXJcIixcbiAgICAgICAgaXRlbUNvbnRyb2w6IFwic2QtaW1hZ2VwaWNrZXJfX2NvbnRyb2wgc2QtdmlzdWFsbHloaWRkZW5cIixcbiAgICAgICAgaW1hZ2U6IFwic2QtaW1hZ2VwaWNrZXJfX2ltYWdlXCIsXG4gICAgICAgIGl0ZW1UZXh0OiBcInNkLWltYWdlcGlja2VyX190ZXh0XCIsXG4gICAgICAgIG90aGVyOiBcInNkLWlucHV0IHNkLWNvbW1lbnRcIixcbiAgICAgICAgaXRlbU5vSW1hZ2U6IFwic2QtaW1hZ2VwaWNrZXJfX25vLWltYWdlXCIsXG4gICAgICAgIGl0ZW1Ob0ltYWdlU3ZnSWNvbjogXCJzZC1pbWFnZXBpY2tlcl9fbm8taW1hZ2Utc3ZnXCIsXG4gICAgICAgIGl0ZW1Ob0ltYWdlU3ZnSWNvbklkOiBcImljb24tbm8taW1hZ2VcIixcbiAgICAgICAgY29sdW1uOiBcInNkLXNlbGVjdGJhc2VfX2NvbHVtbiBzZC1pbWFnZXBpY2tlcl9fY29sdW1uXCIsXG4gICAgICAgIGNoZWNrZWRJdGVtRGVjb3JhdG9yOiBcInNkLWltYWdlcGlja2VyX19jaGVjay1kZWNvcmF0b3JcIixcbiAgICAgICAgY2hlY2tlZEl0ZW1TdmdJY29uOiBcInNkLWltYWdlcGlja2VyX19jaGVjay1pY29uXCIsXG4gICAgICAgIGNoZWNrZWRJdGVtU3ZnSWNvbklkOiBcImljb24tdjJjaGVja18yNHgyNFwiLFxuICAgIH0sXG4gICAgbWF0cml4OiB7XG4gICAgICAgIG1haW5Sb290OiBcInNkLWVsZW1lbnQgc2QtcXVlc3Rpb24gc2Qtcm93X19xdWVzdGlvbiBzZC1lbGVtZW50LS1jb21wbGV4IHNkLXF1ZXN0aW9uLS1jb21wbGV4IHNkLXF1ZXN0aW9uLS10YWJsZVwiLFxuICAgICAgICB0YWJsZVdyYXBwZXI6IFwic2QtbWF0cml4IHNkLXRhYmxlLXdyYXBwZXJcIixcbiAgICAgICAgcm9vdDogXCJzZC10YWJsZSBzZC1tYXRyaXhfX3RhYmxlXCIsXG4gICAgICAgIG5vSGVhZGVyOiBcInNkLXRhYmxlLS1uby1oZWFkZXJcIixcbiAgICAgICAgcm9vdFZlcnRpY2FsQWxpZ25Ub3A6IFwic2QtdGFibGUtLWFsaWduLXRvcFwiLFxuICAgICAgICByb290VmVydGljYWxBbGlnbk1pZGRsZTogXCJzZC10YWJsZS0tYWxpZ24tbWlkZGxlXCIsXG4gICAgICAgIHJvb3RBbHRlcm5hdGVSb3dzOiBcInNkLXRhYmxlLS1hbHRlcm5hdGUtcm93c1wiLFxuICAgICAgICByb3dFcnJvcjogXCJzZC1tYXRyaXhfX3Jvdy0tZXJyb3JcIixcbiAgICAgICAgY2VsbDogXCJzZC10YWJsZV9fY2VsbCBzZC1tYXRyaXhfX2NlbGxcIixcbiAgICAgICAgcm93OiBcInNkLXRhYmxlX19yb3dcIixcbiAgICAgICAgaGVhZGVyQ2VsbDogXCJzZC10YWJsZV9fY2VsbCBzZC10YWJsZV9fY2VsbC0taGVhZGVyXCIsXG4gICAgICAgIHJvd1RleHRDZWxsOiBcInNkLXRhYmxlX19jZWxsIHNkLW1hdHJpeF9fY2VsbCBzZC10YWJsZV9fY2VsbC0tcm93LXRleHRcIixcbiAgICAgICAgbGFiZWw6IFwic2QtaXRlbSBzZC1yYWRpbyBzZC1tYXRyaXhfX2xhYmVsXCIsXG4gICAgICAgIGl0ZW1PbkVycm9yOiBcInNkLWl0ZW0tLWVycm9yXCIsXG4gICAgICAgIGl0ZW1WYWx1ZTogXCJzZC12aXN1YWxseWhpZGRlbiBzZC1pdGVtX19jb250cm9sIHNkLXJhZGlvX19jb250cm9sXCIsXG4gICAgICAgIGl0ZW1DaGVja2VkOiBcInNkLWl0ZW0tLWNoZWNrZWQgc2QtcmFkaW8tLWNoZWNrZWRcIixcbiAgICAgICAgaXRlbURpc2FibGVkOiBcInNkLWl0ZW0tLWRpc2FibGVkIHNkLXJhZGlvLS1kaXNhYmxlZFwiLFxuICAgICAgICBpdGVtSG92ZXI6IFwic2QtcmFkaW8tLWFsbG93aG92ZXJcIixcbiAgICAgICAgbWF0ZXJpYWxEZWNvcmF0b3I6IFwic2QtaXRlbV9fZGVjb3JhdG9yIHNkLXJhZGlvX19kZWNvcmF0b3JcIixcbiAgICAgICAgaXRlbURlY29yYXRvcjogXCJzZC1pdGVtX19zdmcgc2QtcmFkaW9fX3N2Z1wiLFxuICAgICAgICBjZWxsVGV4dDogXCJzZC1tYXRyaXhfX3RleHRcIixcbiAgICAgICAgY2VsbFRleHRTZWxlY3RlZDogXCJzZC1tYXRyaXhfX3RleHQtLWNoZWNrZWRcIixcbiAgICAgICAgY2VsbFRleHREaXNhYmxlZDogXCJzZC1tYXRyaXhfX3RleHQtLWRpc2FibGVkXCIsXG4gICAgICAgIGNlbGxSZXNwb25zaXZlVGl0bGU6IFwic2QtbWF0cml4X19yZXNwb25zaXZlLXRpdGxlXCIsXG4gICAgICAgIGNvbXBhY3Q6IFwic2QtZWxlbWVudC0td2l0aC1mcmFtZSBzZC1lbGVtZW50LS1jb21wYWN0XCJcbiAgICB9LFxuICAgIG1hdHJpeGRyb3Bkb3duOiB7XG4gICAgICAgIG1haW5Sb290OiBcInNkLWVsZW1lbnQgc2QtcXVlc3Rpb24gc2Qtcm93X19xdWVzdGlvbiBzZC1lbGVtZW50LS1jb21wbGV4IHNkLXF1ZXN0aW9uLS1jb21wbGV4IHNkLXF1ZXN0aW9uLS10YWJsZVwiLFxuICAgICAgICByb290U2Nyb2xsOiBcInNkLXF1ZXN0aW9uLS1zY3JvbGxcIixcbiAgICAgICAgcm9vdDogXCJzZC10YWJsZSBzZC1tYXRyaXhkcm9wZG93blwiLFxuICAgICAgICBub0hlYWRlcjogXCJzZC10YWJsZS0tbm8taGVhZGVyXCIsXG4gICAgICAgIHJvb3RWZXJ0aWNhbEFsaWduVG9wOiBcInNkLXRhYmxlLS1hbGlnbi10b3BcIixcbiAgICAgICAgcm9vdFZlcnRpY2FsQWxpZ25NaWRkbGU6IFwic2QtdGFibGUtLWFsaWduLW1pZGRsZVwiLFxuICAgICAgICB0YWJsZVdyYXBwZXI6IFwic2QtdGFibGUtd3JhcHBlclwiLFxuICAgICAgICByb290QWx0ZXJuYXRlUm93czogXCJzZC10YWJsZS0tYWx0ZXJuYXRlLXJvd3NcIixcbiAgICAgICAgY2VsbDogXCJzZC10YWJsZV9fY2VsbFwiLFxuICAgICAgICBlcnJvcnNDZWxsOiBcInNkLXRhYmxlX19jZWxsLS1lcnJvclwiLFxuICAgICAgICBlcnJvcnNDZWxsVG9wOiBcInNkLXRhYmxlX19jZWxsLS1lcnJvci10b3BcIixcbiAgICAgICAgZXJyb3JzQ2VsbEJvdHRvbTogXCJzZC10YWJsZV9fY2VsbC0tZXJyb3ItYm90dG9tXCIsXG4gICAgICAgIGl0ZW1DZWxsOiBcInNkLXRhYmxlX19jZWxsLS1pdGVtXCIsXG4gICAgICAgIHJvdzogXCJzZC10YWJsZV9fcm93XCIsXG4gICAgICAgIGhlYWRlckNlbGw6IFwic2QtdGFibGVfX2NlbGwgc2QtdGFibGVfX2NlbGwtLWhlYWRlclwiLFxuICAgICAgICByb3dUZXh0Q2VsbDogXCJzZC10YWJsZV9fY2VsbCBzZC10YWJsZV9fY2VsbC0tcm93LXRleHRcIixcbiAgICAgICAgY29sdW1uVGl0bGVDZWxsOiBcInNkLXRhYmxlX19jZWxsLS1jb2x1bW4tdGl0bGVcIixcbiAgICAgICAgY2VsbFJlcXVpcmVkVGV4dDogXCJzZC1xdWVzdGlvbl9fcmVxdWlyZWQtdGV4dFwiLFxuICAgICAgICBkZXRhaWxCdXR0b246IFwic2QtdGFibGVfX2NlbGwtLWRldGFpbC1idXR0b25cIixcbiAgICAgICAgZGV0YWlsQnV0dG9uRXhwYW5kZWQ6IFwic2QtdGFibGVfX2NlbGwtLWRldGFpbC1idXR0b24tLWV4cGFuZGVkXCIsXG4gICAgICAgIGRldGFpbEljb246IFwic2QtZGV0YWlsLXBhbmVsX19pY29uXCIsXG4gICAgICAgIGRldGFpbEljb25FeHBhbmRlZDogXCJzZC1kZXRhaWwtcGFuZWxfX2ljb24tLWV4cGFuZGVkXCIsXG4gICAgICAgIGRldGFpbEljb25JZDogXCJpY29uLWV4cGFuZGRldGFpbFwiLFxuICAgICAgICBkZXRhaWxJY29uRXhwYW5kZWRJZDogXCJpY29uLWNvbGxhcHNlZGV0YWlsXCIsXG4gICAgICAgIGRldGFpbFBhbmVsQ2VsbDogXCJzZC10YWJsZV9fY2VsbC0tZGV0YWlsLXBhbmVsXCIsXG4gICAgICAgIGFjdGlvbnNDZWxsOiBcInNkLXRhYmxlX19jZWxsIHNkLXRhYmxlX19jZWxsLS1hY3Rpb25zXCIsXG4gICAgICAgIGFjdGlvbnNDZWxsRHJhZzogXCJzZC10YWJsZV9fY2VsbC0tZHJhZ1wiLFxuICAgICAgICBlbXB0eUNlbGw6IFwic2QtdGFibGVfX2NlbGwtLWVtcHR5XCIsXG4gICAgICAgIHZlcnRpY2FsQ2VsbDogXCJzZC10YWJsZV9fY2VsbC0tdmVydGljYWxcIixcbiAgICAgICAgY2VsbFF1ZXN0aW9uV3JhcHBlcjogXCJzZC10YWJsZV9fcXVlc3Rpb24td3JhcHBlclwiLFxuICAgICAgICBjb21wYWN0OiBcInNkLWVsZW1lbnQtLXdpdGgtZnJhbWUgc2QtZWxlbWVudC0tY29tcGFjdFwiXG4gICAgfSxcbiAgICBtYXRyaXhkeW5hbWljOiB7XG4gICAgICAgIG1haW5Sb290OiBcInNkLWVsZW1lbnQgc2QtcXVlc3Rpb24gc2Qtcm93X19xdWVzdGlvbiBzZC1lbGVtZW50LS1jb21wbGV4IHNkLXF1ZXN0aW9uLS1jb21wbGV4IHNkLXF1ZXN0aW9uLS10YWJsZVwiLFxuICAgICAgICByb290U2Nyb2xsOiBcInNkLXF1ZXN0aW9uLS1zY3JvbGxcIixcbiAgICAgICAgZW1wdHk6IFwic2QtcXVlc3Rpb24tLWVtcHR5XCIsXG4gICAgICAgIHJvb3Q6IFwic2QtdGFibGUgc2QtbWF0cml4ZHluYW1pY1wiLFxuICAgICAgICBub0hlYWRlcjogXCJzZC10YWJsZS0tbm8taGVhZGVyXCIsXG4gICAgICAgIHRhYmxlV3JhcHBlcjogXCJzZC10YWJsZS13cmFwcGVyXCIsXG4gICAgICAgIGNvbnRlbnQ6IFwic2QtbWF0cml4ZHluYW1pY19fY29udGVudCBzZC1xdWVzdGlvbl9fY29udGVudFwiLFxuICAgICAgICBjZWxsOiBcInNkLXRhYmxlX19jZWxsXCIsXG4gICAgICAgIHJvdzogXCJzZC10YWJsZV9fcm93XCIsXG4gICAgICAgIGl0ZW1DZWxsOiBcInNkLXRhYmxlX19jZWxsLS1pdGVtXCIsXG4gICAgICAgIGhlYWRlckNlbGw6IFwic2QtdGFibGVfX2NlbGwgc2QtdGFibGVfX2NlbGwtLWhlYWRlclwiLFxuICAgICAgICByb3dUZXh0Q2VsbDogXCJzZC10YWJsZV9fY2VsbCBzZC10YWJsZV9fY2VsbC0tcm93LXRleHRcIixcbiAgICAgICAgY29sdW1uVGl0bGVDZWxsOiBcInNkLXRhYmxlX19jZWxsLS1jb2x1bW4tdGl0bGVcIixcbiAgICAgICAgY2VsbFJlcXVpcmVkVGV4dDogXCJzZC1xdWVzdGlvbl9fcmVxdWlyZWQtdGV4dFwiLFxuICAgICAgICBidXR0b246IFwic2QtYWN0aW9uIHNkLW1hdHJpeGR5bmFtaWNfX2J0blwiLFxuICAgICAgICBkZXRhaWxSb3c6IFwic2QtdGFibGVfX3JvdyBzZC10YWJsZV9fcm93LS1kZXRhaWxcIixcbiAgICAgICAgZGV0YWlsQnV0dG9uOiBcInNkLXRhYmxlX19jZWxsLS1kZXRhaWwtYnV0dG9uXCIsXG4gICAgICAgIGRldGFpbEJ1dHRvbkV4cGFuZGVkOiBcInNkLXRhYmxlX19jZWxsLS1kZXRhaWwtYnV0dG9uLS1leHBhbmRlZFwiLFxuICAgICAgICBkZXRhaWxJY29uOiBcInNkLWRldGFpbC1wYW5lbF9faWNvblwiLFxuICAgICAgICBkZXRhaWxJY29uRXhwYW5kZWQ6IFwic2QtZGV0YWlsLXBhbmVsX19pY29uLS1leHBhbmRlZFwiLFxuICAgICAgICBkZXRhaWxJY29uSWQ6IFwiaWNvbi1leHBhbmRkZXRhaWxcIixcbiAgICAgICAgZGV0YWlsSWNvbkV4cGFuZGVkSWQ6IFwiaWNvbi1jb2xsYXBzZWRldGFpbFwiLFxuICAgICAgICBkZXRhaWxQYW5lbENlbGw6IFwic2QtdGFibGVfX2NlbGwtLWRldGFpbC1wYW5lbFwiLFxuICAgICAgICBhY3Rpb25zQ2VsbDogXCJzZC10YWJsZV9fY2VsbCBzZC10YWJsZV9fY2VsbC0tYWN0aW9uc1wiLFxuICAgICAgICBhY3Rpb25zQ2VsbERyYWc6IFwic2QtdGFibGVfX2NlbGwtLWRyYWdcIixcbiAgICAgICAgYnV0dG9uQWRkOiBcInNkLW1hdHJpeGR5bmFtaWNfX2FkZC1idG5cIixcbiAgICAgICAgYnV0dG9uUmVtb3ZlOiBcInNkLWFjdGlvbi0tbmVnYXRpdmUgc2QtbWF0cml4ZHluYW1pY19fcmVtb3ZlLWJ0blwiLFxuICAgICAgICBpY29uQWRkOiBcInNkLWhpZGRlblwiLFxuICAgICAgICBpY29uUmVtb3ZlOiBcIlwiLFxuICAgICAgICBkcmFnRWxlbWVudERlY29yYXRvcjogXCJzZC1kcmFnLWVsZW1lbnRfX3N2Z1wiLFxuICAgICAgICBpY29uRHJhZ0VsZW1lbnQ6IFwiI2ljb24tdjJkcmFnZWxlbWVudF8xNngxNlwiLFxuICAgICAgICBmb290ZXI6IFwic2QtbWF0cml4ZHluYW1pY19fZm9vdGVyXCIsXG4gICAgICAgIGVtcHR5Um93c1NlY3Rpb246IFwic2QtbWF0cml4ZHluYW1pY19fcGxhY2Vob2xkZXIgc2QtcXVlc3Rpb25fX3BsYWNlaG9sZGVyXCIsXG4gICAgICAgIGljb25EcmFnOiBcInN2LW1hdHJpeGR5bmFtaWNfX2RyYWctaWNvblwiLFxuICAgICAgICBnaG9zdFJvdzogXCJzdi1tYXRyaXgtcm93LS1kcmFnLWRyb3AtZ2hvc3QtbW9kXCIsXG4gICAgICAgIGVtcHR5Q2VsbDogXCJzZC10YWJsZV9fY2VsbC0tZW1wdHlcIixcbiAgICAgICAgdmVydGljYWxDZWxsOiBcInNkLXRhYmxlX19jZWxsLS12ZXJ0aWNhbFwiLFxuICAgICAgICBjZWxsUXVlc3Rpb25XcmFwcGVyOiBcInNkLXRhYmxlX19xdWVzdGlvbi13cmFwcGVyXCIsXG4gICAgICAgIGVycm9yc0NlbGw6IFwic2QtdGFibGVfX2NlbGwtLWVycm9yXCIsXG4gICAgICAgIGVycm9yc0NlbGxUb3A6IFwic2QtdGFibGVfX2NlbGwtLWVycm9yLXRvcFwiLFxuICAgICAgICBlcnJvcnNDZWxsQm90dG9tOiBcInNkLXRhYmxlX19jZWxsLS1lcnJvci1ib3R0b21cIixcbiAgICAgICAgY29tcGFjdDogXCJzZC1lbGVtZW50LS13aXRoLWZyYW1lIHNkLWVsZW1lbnQtLWNvbXBhY3RcIixcbiAgICB9LFxuICAgIHJhdGluZzoge1xuICAgICAgICByb290RHJvcGRvd246IFwic2Qtc2Nyb2xsYWJsZS1jb250YWluZXIgc2Qtc2Nyb2xsYWJsZS1jb250YWluZXItLWNvbXBhY3Qgc2Qtc2VsZWN0YmFzZVwiLFxuICAgICAgICByb290OiBcInNkLXNjcm9sbGFibGUtY29udGFpbmVyIHNkLXJhdGluZ1wiLFxuICAgICAgICByb290V3JhcHBhYmxlOiBcInNkLXNjcm9sbGFibGUtY29udGFpbmVyIHNkLXJhdGluZyBzZC1yYXRpbmctLXdyYXBwYWJsZVwiLFxuICAgICAgICBpdGVtOiBcInNkLXJhdGluZ19faXRlbVwiLFxuICAgICAgICBpdGVtT25FcnJvcjogXCJzZC1yYXRpbmdfX2l0ZW0tLWVycm9yXCIsXG4gICAgICAgIGl0ZW1Ib3ZlcjogXCJzZC1yYXRpbmdfX2l0ZW0tLWFsbG93aG92ZXJcIixcbiAgICAgICAgc2VsZWN0ZWQ6IFwic2QtcmF0aW5nX19pdGVtLS1zZWxlY3RlZFwiLFxuICAgICAgICBpdGVtU3RhcjogXCJzZC1yYXRpbmdfX2l0ZW0tc3RhclwiLFxuICAgICAgICBpdGVtU3Rhck9uRXJyb3I6IFwic2QtcmF0aW5nX19pdGVtLXN0YXItLWVycm9yXCIsXG4gICAgICAgIGl0ZW1TdGFySG92ZXI6IFwic2QtcmF0aW5nX19pdGVtLXN0YXItLWFsbG93aG92ZXJcIixcbiAgICAgICAgaXRlbVN0YXJTZWxlY3RlZDogXCJzZC1yYXRpbmdfX2l0ZW0tc3Rhci0tc2VsZWN0ZWRcIixcbiAgICAgICAgaXRlbVN0YXJEaXNhYmxlZDogXCJzZC1yYXRpbmdfX2l0ZW0tc3Rhci0tZGlzYWJsZWRcIixcbiAgICAgICAgaXRlbVN0YXJIaWdobGlnaHRlZDogXCJzZC1yYXRpbmdfX2l0ZW0tc3Rhci0taGlnaGxpZ2h0ZWRcIixcbiAgICAgICAgaXRlbVN0YXJVbmhpZ2hsaWdodGVkOiBcInNkLXJhdGluZ19faXRlbS1zdGFyLS11bmhpZ2hsaWdodGVkXCIsXG4gICAgICAgIGl0ZW1TdGFyU21hbGw6IFwic2QtcmF0aW5nX19pdGVtLXN0YXItLXNtYWxsXCIsXG4gICAgICAgIGl0ZW1TbWlsZXk6IFwic2QtcmF0aW5nX19pdGVtLXNtaWxleVwiLFxuICAgICAgICBpdGVtU21pbGV5T25FcnJvcjogXCJzZC1yYXRpbmdfX2l0ZW0tc21pbGV5LS1lcnJvclwiLFxuICAgICAgICBpdGVtU21pbGV5SG92ZXI6IFwic2QtcmF0aW5nX19pdGVtLXNtaWxleS0tYWxsb3dob3ZlclwiLFxuICAgICAgICBpdGVtU21pbGV5U2VsZWN0ZWQ6IFwic2QtcmF0aW5nX19pdGVtLXNtaWxleS0tc2VsZWN0ZWRcIixcbiAgICAgICAgaXRlbVNtaWxleURpc2FibGVkOiBcInNkLXJhdGluZ19faXRlbS1zbWlsZXktLWRpc2FibGVkXCIsXG4gICAgICAgIGl0ZW1TbWlsZXlIaWdobGlnaHRlZDogXCJzZC1yYXRpbmdfX2l0ZW0tc3Rhci0taGlnaGxpZ2h0ZWRcIixcbiAgICAgICAgaXRlbVNtaWxleVNjYWxlQ29sb3JlZDogXCJzZC1yYXRpbmdfX2l0ZW0tc21pbGV5LS1zY2FsZS1jb2xvcmVkXCIsXG4gICAgICAgIGl0ZW1TbWlsZXlSYXRlQ29sb3JlZDogXCJzZC1yYXRpbmdfX2l0ZW0tc21pbGV5LS1yYXRlLWNvbG9yZWRcIixcbiAgICAgICAgaXRlbVNtaWxleVNtYWxsOiBcInNkLXJhdGluZ19faXRlbS1zbWlsZXktLXNtYWxsXCIsXG4gICAgICAgIG1pblRleHQ6IFwic2QtcmF0aW5nX19pdGVtLXRleHQgc2QtcmF0aW5nX19taW4tdGV4dFwiLFxuICAgICAgICBpdGVtVGV4dDogXCJzZC1yYXRpbmdfX2l0ZW0tdGV4dFwiLFxuICAgICAgICBtYXhUZXh0OiBcInNkLXJhdGluZ19faXRlbS10ZXh0IHNkLXJhdGluZ19fbWF4LXRleHRcIixcbiAgICAgICAgaXRlbURpc2FibGVkOiBcInNkLXJhdGluZ19faXRlbS0tZGlzYWJsZWRcIixcbiAgICAgICAgaXRlbUZpeGVkU2l6ZTogXCJzZC1yYXRpbmdfX2l0ZW0tLWZpeGVkLXNpemVcIixcbiAgICAgICAgY29udHJvbDogXCJzZC1pbnB1dCBzZC1kcm9wZG93blwiLFxuICAgICAgICBpdGVtU21hbGw6IFwic2QtcmF0aW5nLS1zbWFsbFwiLFxuICAgICAgICBzZWxlY3RXcmFwcGVyOiBcInN2LWRyb3Bkb3duX3NlbGVjdC13cmFwcGVyXCIsXG4gICAgICAgIGNvbnRyb2xWYWx1ZTogXCJzZC1kcm9wZG93bl9fdmFsdWVcIixcbiAgICAgICAgY29udHJvbERpc2FibGVkOiBcInNkLWlucHV0LS1kaXNhYmxlZFwiLFxuICAgICAgICBjb250cm9sRW1wdHk6IFwic2QtZHJvcGRvd24tLWVtcHR5XCIsXG4gICAgICAgIGZpbHRlclN0cmluZ0lucHV0OiBcInNkLWRyb3Bkb3duX19maWx0ZXItc3RyaW5nLWlucHV0XCIsXG4gICAgICAgIGNoZXZyb25CdXR0b246IFwic2QtZHJvcGRvd25fY2hldnJvbi1idXR0b25cIixcbiAgICAgICAgY2hldnJvbkJ1dHRvblN2ZzogXCJzZC1kcm9wZG93bl9jaGV2cm9uLWJ1dHRvbi1zdmdcIixcbiAgICAgICAgY2hldnJvbkJ1dHRvbkljb25JZDogXCJpY29uLWNoZXZyb25cIixcbiAgICAgICAgcG9wdXA6IFwic3YtZHJvcGRvd24tcG9wdXBcIixcbiAgICAgICAgb25FcnJvcjogXCJzZC1pbnB1dC0tZXJyb3JcIixcbiAgICB9LFxuICAgIGNvbW1lbnQ6IHtcbiAgICAgICAgcm9vdDogXCJzZC1pbnB1dCBzZC1jb21tZW50XCIsXG4gICAgICAgIHNtYWxsOiBcInNkLXJvd19fcXVlc3Rpb24tLXNtYWxsXCIsXG4gICAgICAgIGNvbnRyb2xEaXNhYmxlZDogXCJzZC1pbnB1dC0tZGlzYWJsZWRcIixcbiAgICAgICAgY29udGVudDogXCJzZC1jb21tZW50X19jb250ZW50IHNkLXF1ZXN0aW9uX19jb250ZW50XCIsXG4gICAgICAgIHJlbWFpbmluZ0NoYXJhY3RlckNvdW50ZXI6IFwic2QtcmVtYWluaW5nLWNoYXJhY3Rlci1jb3VudGVyXCIsXG4gICAgICAgIG9uRXJyb3I6IFwic2QtaW5wdXQtLWVycm9yXCJcbiAgICB9LFxuICAgIGV4cHJlc3Npb246IFwic2QtZXhwcmVzc2lvblwiLFxuICAgIGZpbGU6IHtcbiAgICAgICAgcm9vdDogXCJzZC1maWxlXCIsXG4gICAgICAgIHJvb3REcmFnZ2luZzogXCJzZC1maWxlLS1kcmFnZ2luZ1wiLFxuICAgICAgICByb290QW5zd2VyZWQ6IFwic2QtZmlsZS0tYW5zd2VyZWRcIixcbiAgICAgICAgb3RoZXI6IFwic2QtaW5wdXQgc2QtY29tbWVudFwiLFxuICAgICAgICBwbGFjZWhvbGRlcklucHV0OiBcInNkLXZpc3VhbGx5aGlkZGVuXCIsXG4gICAgICAgIHByZXZpZXc6IFwic2QtZmlsZV9fcHJldmlld1wiLFxuICAgICAgICBmaWxlU2lnbjogXCJcIixcbiAgICAgICAgZmlsZUxpc3Q6IFwic2QtZmlsZV9fbGlzdFwiLFxuICAgICAgICBmaWxlU2lnbkJvdHRvbTogXCJzZC1maWxlX19zaWduXCIsXG4gICAgICAgIGRyYWdBcmVhOiBcInNkLWZpbGVfX2RyYWctYXJlYVwiLFxuICAgICAgICBkcmFnQXJlYUFjdGl2ZTogXCJzZC1maWxlX19kcmFnLWFyZWEtLWFjdGl2ZVwiLFxuICAgICAgICBmaWxlRGVjb3JhdG9yOiBcInNkLWZpbGVfX2RlY29yYXRvclwiLFxuICAgICAgICBvbkVycm9yOiBcInNkLWZpbGVfX2RlY29yYXRvci0tZXJyb3JcIixcbiAgICAgICAgZmlsZURlY29yYXRvckRyYWc6IFwic2QtZmlsZV9fZGVjb3JhdG9yLS1kcmFnXCIsXG4gICAgICAgIGZpbGVJbnB1dDogXCJzZC12aXN1YWxseWhpZGRlblwiLFxuICAgICAgICBub0ZpbGVDaG9zZW46IFwic2QtZGVzY3JpcHRpb24gc2QtZmlsZV9fbm8tZmlsZS1jaG9zZW5cIixcbiAgICAgICAgY2hvb3NlRmlsZTogXCJzZC1maWxlX19jaG9vc2UtYnRuXCIsXG4gICAgICAgIGNob29zZUZpbGVBc1RleHQ6IFwic2QtYWN0aW9uIHNkLWZpbGVfX2Nob29zZS1idG4tLXRleHRcIixcbiAgICAgICAgY2hvb3NlRmlsZUFzVGV4dERpc2FibGVkOiBcInNkLWFjdGlvbi0tZGlzYWJsZWRcIixcbiAgICAgICAgY2hvb3NlRmlsZUFzSWNvbjogXCJzZC1maWxlX19jaG9vc2UtYnRuLS1pY29uXCIsXG4gICAgICAgIGNob29zZUZpbGVJY29uSWQ6IFwiaWNvbi1jaG9vc2VmaWxlXCIsXG4gICAgICAgIGRpc2FibGVkOiBcInNkLWZpbGVfX2Nob29zZS1idG4tLWRpc2FibGVkXCIsXG4gICAgICAgIC8vdG9kbzogcmVtb3ZlIGl0IGluIHYyXG4gICAgICAgIHJlbW92ZUJ1dHRvbjogXCJzZC1jb250ZXh0LWJ0bi0tbmVnYXRpdmVcIixcbiAgICAgICAgcmVtb3ZlQnV0dG9uQm90dG9tOiBcIlwiLFxuICAgICAgICAvL1xuICAgICAgICByZW1vdmVCdXR0b25JY29uSWQ6IFwiaWNvbi1jbGVhclwiLFxuICAgICAgICByZW1vdmVGaWxlOiBcInNkLWhpZGRlblwiLFxuICAgICAgICByZW1vdmVGaWxlU3ZnOiBcIlwiLFxuICAgICAgICByZW1vdmVGaWxlU3ZnSWNvbklkOiBcImljb24tZGVsZXRlXCIsXG4gICAgICAgIHdyYXBwZXI6IFwic2QtZmlsZV9fd3JhcHBlclwiLFxuICAgICAgICBkZWZhdWx0SW1hZ2U6IFwic2QtZmlsZV9fZGVmYXVsdC1pbWFnZVwiLFxuICAgICAgICBkZWZhdWx0SW1hZ2VJY29uSWQ6IFwiaWNvbi1kZWZhdWx0ZmlsZVwiLFxuICAgICAgICBsZWZ0SWNvbklkOiBcImljb24tYXJyb3dsZWZ0XCIsXG4gICAgICAgIHJpZ2h0SWNvbklkOiBcImljb24tYXJyb3dyaWdodFwiLFxuICAgICAgICByZW1vdmVGaWxlQnV0dG9uOiBcInNkLWNvbnRleHQtYnRuLS1uZWdhdGl2ZSBzZC1maWxlX19yZW1vdmUtZmlsZS1idXR0b25cIixcbiAgICAgICAgZHJhZ0FyZWFQbGFjZWhvbGRlcjogXCJzZC1maWxlX19kcmFnLWFyZWEtcGxhY2Vob2xkZXJcIixcbiAgICAgICAgaW1hZ2VXcmFwcGVyOiBcInNkLWZpbGVfX2ltYWdlLXdyYXBwZXJcIixcbiAgICAgICAgc2luZ2xlOiBcInNkLWZpbGUtLXNpbmdsZVwiLFxuICAgICAgICBzaW5nbGVJbWFnZTogXCJzZC1maWxlLS1zaW5nbGUtaW1hZ2VcIixcbiAgICAgICAgbW9iaWxlOiBcInNkLWZpbGUtLW1vYmlsZVwiLFxuICAgICAgICB2aWRlb0NvbnRhaW5lcjogXCJzZC1maWxlX192aWRlby1jb250YWluZXJcIixcbiAgICAgICAgY29udGV4dEJ1dHRvbjogXCJzZC1jb250ZXh0LWJ0blwiLFxuICAgICAgICB2aWRlbzogXCJzZC1maWxlX192aWRlb1wiLFxuICAgICAgICBhY3Rpb25zQ29udGFpbmVyOiBcInNkLWZpbGVfX2FjdGlvbnMtY29udGFpbmVyXCIsXG4gICAgICAgIGNsb3NlQ2FtZXJhQnV0dG9uOiBcInNkLWZpbGVfX2Nsb3NlLWNhbWVyYS1idXR0b25cIixcbiAgICAgICAgY2hhbmdlQ2FtZXJhQnV0dG9uOiBcInNkLWZpbGVfX2NoYW5nZS1jYW1lcmEtYnV0dG9uXCIsXG4gICAgICAgIHRha2VQaWN0dXJlQnV0dG9uOiBcInNkLWZpbGVfX3Rha2UtcGljdHVyZS1idXR0b25cIixcbiAgICAgICAgbG9hZGluZ0luZGljYXRvcjogXCJzZC1maWxlX19sb2FkaW5nLWluZGljYXRvclwiLFxuICAgIH0sXG4gICAgc2lnbmF0dXJlcGFkOiB7XG4gICAgICAgIG1haW5Sb290OiBcInNkLWVsZW1lbnQgc2QtcXVlc3Rpb24gc2QtcXVlc3Rpb24tLXNpZ25hdHVyZSBzZC1yb3dfX3F1ZXN0aW9uXCIsXG4gICAgICAgIHJvb3Q6IFwic2Qtc2lnbmF0dXJlcGFkIHNqc19zcF9jb250YWluZXJcIixcbiAgICAgICAgc21hbGw6IFwic2Qtcm93X19xdWVzdGlvbi0tc21hbGxcIixcbiAgICAgICAgY29udHJvbHM6IFwic2pzX3NwX2NvbnRyb2xzIHNkLXNpZ25hdHVyZXBhZF9fY29udHJvbHNcIixcbiAgICAgICAgcGxhY2Vob2xkZXI6IFwic2pzX3NwX3BsYWNlaG9sZGVyXCIsXG4gICAgICAgIGNhbnZhczogXCJzanNfc3BfY2FudmFzIHNkLXNpZ25hdHVyZXBhZF9fY2FudmFzXCIsXG4gICAgICAgIGJhY2tncm91bmRJbWFnZTogXCJzanNfc3BfX2JhY2tncm91bmQtaW1hZ2Ugc2Qtc2lnbmF0dXJlcGFkX19iYWNrZ3JvdW5kLWltYWdlXCIsXG4gICAgICAgIGNsZWFyQnV0dG9uOiBcInNqc19zcF9jbGVhciBzZC1jb250ZXh0LWJ0biBzZC1jb250ZXh0LWJ0bi0tbmVnYXRpdmUgc2Qtc2lnbmF0dXJlcGFkX19jbGVhclwiLFxuICAgICAgICBjbGVhckJ1dHRvbkljb25JZDogXCJpY29uLWNsZWFyXCJcbiAgICB9LFxuICAgIHNhdmVEYXRhOiB7XG4gICAgICAgIHJvb3Q6IFwic3Ytc2F2ZS1kYXRhX3Jvb3RcIixcbiAgICAgICAgaW5mbzogXCJzdi1zYXZlLWRhdGFfaW5mb1wiLFxuICAgICAgICBlcnJvcjogXCJzdi1zYXZlLWRhdGFfZXJyb3JcIixcbiAgICAgICAgc3VjY2VzczogXCJzdi1zYXZlLWRhdGFfc3VjY2Vzc1wiLFxuICAgICAgICBidXR0b246IFwic3Ytc2F2ZS1kYXRhX2J1dHRvblwiLFxuICAgICAgICBzaG93bjogXCJzdi1zYXZlLWRhdGFfcm9vdC0tc2hvd25cIlxuICAgIH0sXG4gICAgd2luZG93OiB7XG4gICAgICAgIHJvb3Q6IFwic3Zfd2luZG93XCIsXG4gICAgICAgIGJvZHk6IFwic3Zfd2luZG93X2NvbnRlbnRcIixcbiAgICAgICAgaGVhZGVyOiB7XG4gICAgICAgICAgICByb290OiBcInN2X3dpbmRvd190aXRsZVwiLFxuICAgICAgICAgICAgdGl0bGU6IFwiXCIsXG4gICAgICAgICAgICBidXR0b246IFwic3Zfd2luZG93X2J1dHRvblwiLFxuICAgICAgICAgICAgYnV0dG9uRXhwYW5kZWQ6IFwiXCIsXG4gICAgICAgICAgICBidXR0b25Db2xsYXBzZWQ6IFwiXCJcbiAgICAgICAgfVxuICAgIH0sXG4gICAgcmFua2luZzoge1xuICAgICAgICByb290OiBcInN2LXJhbmtpbmdcIixcbiAgICAgICAgcm9vdE1vYmlsZU1vZDogXCJzdi1yYW5raW5nLS1tb2JpbGVcIixcbiAgICAgICAgcm9vdERyYWdNb2Q6IFwic3YtcmFua2luZy0tZHJhZ1wiLFxuICAgICAgICByb290RGlzYWJsZWQ6IFwic2QtcmFua2luZy0tZGlzYWJsZWRcIixcbiAgICAgICAgcm9vdERlc2lnbk1vZGU6IFwic3YtcmFua2luZy0tZGVzaWduLW1vZGVcIixcbiAgICAgICAgcm9vdERyYWdIYW5kbGVBcmVhSWNvbjogXCJzdi1yYW5raW5nLS1kcmFnLWhhbmRsZS1hcmVhLWljb25cIixcbiAgICAgICAgcm9vdFNlbGVjdFRvUmFua01vZDogXCJzdi1yYW5raW5nLS1zZWxlY3QtdG8tcmFua1wiLFxuICAgICAgICByb290U2VsZWN0VG9SYW5rQWxpZ25WZXJ0aWNhbDogXCJzdi1yYW5raW5nLS1zZWxlY3QtdG8tcmFuay12ZXJ0aWNhbFwiLFxuICAgICAgICByb290U2VsZWN0VG9SYW5rQWxpZ25Ib3Jpem9udGFsOiBcInN2LXJhbmtpbmctLXNlbGVjdC10by1yYW5rLWhvcml6b250YWxcIixcbiAgICAgICAgaXRlbTogXCJzdi1yYW5raW5nLWl0ZW1cIixcbiAgICAgICAgaXRlbUNvbnRlbnQ6IFwic3YtcmFua2luZy1pdGVtX19jb250ZW50IHNkLXJhbmtpbmctaXRlbV9fY29udGVudFwiLFxuICAgICAgICBpdGVtSW5kZXg6IFwic3YtcmFua2luZy1pdGVtX19pbmRleCBzZC1yYW5raW5nLWl0ZW1fX2luZGV4XCIsXG4gICAgICAgIGl0ZW1JbmRleEVtcHR5TW9kZTogXCJzdi1yYW5raW5nLWl0ZW1fX2luZGV4LS1lbXB0eSBzZC1yYW5raW5nLWl0ZW1fX2luZGV4LS1lbXB0eVwiLFxuICAgICAgICAvLyBpdGVtVGV4dDogXCJzdi1yYW5raW5nLWl0ZW1fX3RleHRcIixcbiAgICAgICAgaXRlbURpc2FibGVkOiBcInN2LXJhbmtpbmctaXRlbS0tZGlzYWJsZWRcIixcbiAgICAgICAgY29udHJvbExhYmVsOiBcInN2LXJhbmtpbmctaXRlbV9fdGV4dFwiLFxuICAgICAgICBpdGVtR2hvc3ROb2RlOiBcInN2LXJhbmtpbmctaXRlbV9fZ2hvc3RcIixcbiAgICAgICAgaXRlbUljb25Db250YWluZXI6IFwic3YtcmFua2luZy1pdGVtX19pY29uLWNvbnRhaW5lclwiLFxuICAgICAgICBpdGVtSWNvbjogXCJzdi1yYW5raW5nLWl0ZW1fX2ljb25cIixcbiAgICAgICAgaXRlbUljb25Ib3Zlck1vZDogXCJzdi1yYW5raW5nLWl0ZW1fX2ljb24tLWhvdmVyXCIsXG4gICAgICAgIGl0ZW1JY29uRm9jdXNNb2Q6IFwic3YtcmFua2luZy1pdGVtX19pY29uLS1mb2N1c1wiLFxuICAgICAgICBpdGVtR2hvc3RNb2Q6IFwic3YtcmFua2luZy1pdGVtLS1naG9zdFwiLFxuICAgICAgICBpdGVtRHJhZ01vZDogXCJzdi1yYW5raW5nLS1kcmFnXCIsXG4gICAgICAgIGl0ZW1PbkVycm9yOiBcInN2LXJhbmtpbmctaXRlbS0tZXJyb3JcIixcbiAgICAgICAgY29udGFpbmVyOiBcInN2LXJhbmtpbmdfX2NvbnRhaW5lclwiLFxuICAgICAgICBjb250YWluZXJFbXB0eU1vZGU6IFwic3YtcmFua2luZ19fY29udGFpbmVyLS1lbXB0eVwiLFxuICAgICAgICBjb250YWluZXJGcm9tTW9kZTogXCJzdi1yYW5raW5nX19jb250YWluZXItLWZyb21cIixcbiAgICAgICAgY29udGFpbmVyVG9Nb2RlOiBcInN2LXJhbmtpbmdfX2NvbnRhaW5lci0tdG9cIixcbiAgICAgICAgY29udGFpbmVyUGxhY2Vob2xkZXI6IFwic3YtcmFua2luZ19fY29udGFpbmVyLXBsYWNlaG9sZGVyXCIsXG4gICAgICAgIGNvbnRhaW5lcnNEaXZpZGVyOiBcInN2LXJhbmtpbmdfX2NvbnRhaW5lcnMtZGl2aWRlclwiLFxuICAgIH0sXG4gICAgYnV0dG9uZ3JvdXA6IHtcbiAgICAgICAgcm9vdDogXCJzdi1idXR0b24tZ3JvdXBcIixcbiAgICAgICAgaXRlbTogXCJzdi1idXR0b24tZ3JvdXBfX2l0ZW1cIixcbiAgICAgICAgaXRlbUljb246IFwic3YtYnV0dG9uLWdyb3VwX19pdGVtLWljb25cIixcbiAgICAgICAgaXRlbURlY29yYXRvcjogXCJzdi1idXR0b24tZ3JvdXBfX2l0ZW0tZGVjb3JhdG9yXCIsXG4gICAgICAgIGl0ZW1DYXB0aW9uOiBcInN2LWJ1dHRvbi1ncm91cF9faXRlbS1jYXB0aW9uXCIsXG4gICAgICAgIGl0ZW1Ib3ZlcjogXCJzdi1idXR0b24tZ3JvdXBfX2l0ZW0tLWhvdmVyXCIsXG4gICAgICAgIGl0ZW1TZWxlY3RlZDogXCJzdi1idXR0b24tZ3JvdXBfX2l0ZW0tLXNlbGVjdGVkXCIsXG4gICAgICAgIGl0ZW1EaXNhYmxlZDogXCJzdi1idXR0b24tZ3JvdXBfX2l0ZW0tLWRpc2FibGVkXCIsXG4gICAgICAgIGl0ZW1Db250cm9sOiBcInN2LXZpc3VhbGx5aGlkZGVuXCIsXG4gICAgfSxcbiAgICBsaXN0OiB7XG4gICAgICAgIHJvb3Q6IFwic3YtbGlzdF9fY29udGFpbmVyIHNkLWxpc3RcIixcbiAgICAgICAgaXRlbTogXCJzdi1saXN0X19pdGVtIHNkLWxpc3RfX2l0ZW1cIixcbiAgICAgICAgaXRlbUJvZHk6IFwic3YtbGlzdF9faXRlbS1ib2R5IHNkLWxpc3RfX2l0ZW0tYm9keVwiLFxuICAgICAgICBpdGVtU2VsZWN0ZWQ6IFwic3YtbGlzdF9faXRlbS0tc2VsZWN0ZWQgc2QtbGlzdF9faXRlbS0tc2VsZWN0ZWRcIixcbiAgICAgICAgaXRlbUZvY3VzZWQ6IFwic3YtbGlzdF9faXRlbS0tZm9jdXNlZCBzZC1saXN0X19pdGVtLS1mb2N1c2VkXCIsXG4gICAgfSxcbiAgICBhY3Rpb25CYXI6IHtcbiAgICAgICAgcm9vdDogXCJzZC1hY3Rpb24tYmFyXCIsXG4gICAgICAgIGl0ZW06IFwic2QtYWN0aW9uXCIsXG4gICAgICAgIGRlZmF1bHRTaXplTW9kZTogXCJcIixcbiAgICAgICAgc21hbGxTaXplTW9kZTogXCJcIixcbiAgICAgICAgaXRlbVByZXNzZWQ6IFwic2QtYWN0aW9uLS1wcmVzc2VkXCIsXG4gICAgICAgIGl0ZW1Bc0ljb246IFwic2QtYWN0aW9uLS1pY29uXCIsXG4gICAgICAgIGl0ZW1JY29uOiBcInNkLWFjdGlvbl9faWNvblwiLFxuICAgICAgICBpdGVtVGl0bGU6IFwic2QtYWN0aW9uX190aXRsZVwiLFxuICAgIH0sXG4gICAgdmFyaWFibGVzOiB7XG4gICAgICAgIG1vYmlsZVdpZHRoOiBcIi0tc2QtbW9iaWxlLXdpZHRoXCIsXG4gICAgICAgIHRoZW1lTWFyazogXCItLXN2LWRlZmF1bHRWMi1tYXJrXCJcbiAgICB9LFxuICAgIHRhZ2JveDoge1xuICAgICAgICByb290OiBcInNkLXNlbGVjdGJhc2VcIixcbiAgICAgICAgcG9wdXA6IFwic3YtZHJvcGRvd24tcG9wdXBcIixcbiAgICAgICAgc21hbGw6IFwic2Qtcm93X19xdWVzdGlvbi0tc21hbGxcIixcbiAgICAgICAgc2VsZWN0V3JhcHBlcjogXCJzdi1kcm9wZG93bl9zZWxlY3Qtd3JhcHBlclwiLFxuICAgICAgICBvdGhlcjogXCJzZC1pbnB1dCBzZC1jb21tZW50IHNkLXNlbGVjdGJhc2VfX290aGVyXCIsXG4gICAgICAgIG9uRXJyb3I6IFwic2QtaW5wdXQtLWVycm9yXCIsXG4gICAgICAgIGxhYmVsOiBcInNkLXNlbGVjdGJhc2VfX2xhYmVsXCIsXG4gICAgICAgIGl0ZW1TdmdJY29uSWQ6IFwiI2ljb24tdjJjaGVja1wiLFxuICAgICAgICBpdGVtOiBcInNkLWl0ZW0gc2QtY2hlY2tib3ggc2Qtc2VsZWN0YmFzZV9faXRlbVwiLFxuICAgICAgICBpdGVtRGlzYWJsZWQ6IFwic2QtaXRlbS0tZGlzYWJsZWQgc2QtY2hlY2tib3gtLWRpc2FibGVkXCIsXG4gICAgICAgIGl0ZW1DaGVja2VkOiBcInNkLWl0ZW0tLWNoZWNrZWQgc2QtY2hlY2tib3gtLWNoZWNrZWRcIixcbiAgICAgICAgaXRlbUhvdmVyOiBcInNkLWl0ZW0tLWFsbG93aG92ZXIgc2QtY2hlY2tib3gtLWFsbG93aG92ZXJcIixcbiAgICAgICAgaXRlbUNvbnRyb2w6IFwic2QtdmlzdWFsbHloaWRkZW4gc2QtaXRlbV9fY29udHJvbCBzZC1jaGVja2JveF9fY29udHJvbFwiLFxuICAgICAgICBpdGVtRGVjb3JhdG9yOiBcInNkLWl0ZW1fX3N2ZyBzZC1jaGVja2JveF9fc3ZnXCIsXG4gICAgICAgIGNsZWFuQnV0dG9uOiBcInNkLXRhZ2JveF9jbGVhbi1idXR0b24gc2QtZHJvcGRvd25fY2xlYW4tYnV0dG9uXCIsXG4gICAgICAgIGNsZWFuQnV0dG9uU3ZnOiBcInNkLXRhZ2JveF9jbGVhbi1idXR0b24tc3ZnIHNkLWRyb3Bkb3duX2NsZWFuLWJ1dHRvbi1zdmdcIixcbiAgICAgICAgY2xlYW5CdXR0b25JY29uSWQ6IFwiaWNvbi1jbGVhclwiLFxuICAgICAgICBjbGVhbkl0ZW1CdXR0b246IFwic2QtdGFnYm94LWl0ZW1fY2xlYW4tYnV0dG9uXCIsXG4gICAgICAgIGNsZWFuSXRlbUJ1dHRvblN2ZzogXCJzZC10YWdib3gtaXRlbV9jbGVhbi1idXR0b24tc3ZnXCIsXG4gICAgICAgIGNsZWFuSXRlbUJ1dHRvbkljb25JZDogXCJpY29uLWNsZWFyXzE2eDE2XCIsXG4gICAgICAgIGNoZXZyb25CdXR0b246IFwic2QtZHJvcGRvd25fY2hldnJvbi1idXR0b25cIixcbiAgICAgICAgY2hldnJvbkJ1dHRvblN2ZzogXCJzZC1kcm9wZG93bl9jaGV2cm9uLWJ1dHRvbi1zdmdcIixcbiAgICAgICAgY2hldnJvbkJ1dHRvbkljb25JZDogXCJpY29uLWNoZXZyb25cIixcbiAgICAgICAgY29udHJvbDogXCJzZC1pbnB1dCBzZC10YWdib3ggc2QtZHJvcGRvd25cIixcbiAgICAgICAgY29udHJvbFZhbHVlOiBcInNkLXRhZ2JveF9fdmFsdWUgc2QtZHJvcGRvd25fX3ZhbHVlXCIsXG4gICAgICAgIGNvbnRyb2xWYWx1ZUl0ZW1zOiBcInNkLXRhZ2JveF9fdmFsdWUtaXRlbXNcIixcbiAgICAgICAgcGxhY2Vob2xkZXJJbnB1dDogXCJzZC10YWdib3hfX3BsYWNlaG9sZGVyXCIsXG4gICAgICAgIGNvbnRyb2xEaXNhYmxlZDogXCJzZC1pbnB1dC0tZGlzYWJsZWRcIixcbiAgICAgICAgY29udHJvbEVtcHR5OiBcInNkLWRyb3Bkb3duLS1lbXB0eSBzZC10YWdib3gtLWVtcHR5XCIsXG4gICAgICAgIGNvbnRyb2xMYWJlbDogXCJzZC1pdGVtX19jb250cm9sLWxhYmVsXCIsXG4gICAgICAgIGZpbHRlclN0cmluZ0lucHV0OiBcInNkLXRhZ2JveF9fZmlsdGVyLXN0cmluZy1pbnB1dCBzZC1kcm9wZG93bl9fZmlsdGVyLXN0cmluZy1pbnB1dFwiLFxuICAgICAgICBtYXRlcmlhbERlY29yYXRvcjogXCJzZC1pdGVtX19kZWNvcmF0b3Igc2QtY2hlY2tib3hfX2RlY29yYXRvclwiLFxuICAgICAgICBoaW50OiBcInNkLXRhZ2JveF9faGludFwiLFxuICAgICAgICBoaW50UHJlZml4OiBcInNkLWRyb3Bkb3duX19oaW50LXByZWZpeCBzZC10YWdib3hfX2hpbnQtcHJlZml4XCIsXG4gICAgICAgIGhpbnRTdWZmaXg6IFwic2QtZHJvcGRvd25fX2hpbnQtc3VmZml4IHNkLXRhZ2JveF9faGludC1zdWZmaXhcIixcbiAgICAgICAgaGludFN1ZmZpeFdyYXBwZXI6IFwic2QtdGFnYm94X19oaW50LXN1ZmZpeC13cmFwcGVyXCJcbiAgICB9LFxufTtcbnZhciBkZWZhdWx0VjJUaGVtZU5hbWUgPSBcImRlZmF1bHRWMlwiO1xuc3VydmV5Q3NzW2RlZmF1bHRWMlRoZW1lTmFtZV0gPSBkZWZhdWx0VjJDc3M7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvZGVmYXVsdFRpdGxlLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9kZWZhdWx0VGl0bGUudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IERlZmF1bHRUaXRsZU1vZGVsICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkRlZmF1bHRUaXRsZU1vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRGVmYXVsdFRpdGxlTW9kZWw7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF91dGlsc19jc3NDbGFzc0J1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vdXRpbHMvY3NzQ2xhc3NCdWlsZGVyICovIFwiLi9zcmMvdXRpbHMvY3NzQ2xhc3NCdWlsZGVyLnRzXCIpO1xuXG52YXIgRGVmYXVsdFRpdGxlTW9kZWwgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gRGVmYXVsdFRpdGxlTW9kZWwoKSB7XG4gICAgfVxuICAgIERlZmF1bHRUaXRsZU1vZGVsLmdldEljb25Dc3MgPSBmdW5jdGlvbiAoY3NzQ2xhc3NlcywgaXNDb2xsYXBzZWQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBfdXRpbHNfY3NzQ2xhc3NCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJDc3NDbGFzc0J1aWxkZXJcIl0oKVxuICAgICAgICAgICAgLmFwcGVuZChjc3NDbGFzc2VzLmljb24pXG4gICAgICAgICAgICAuYXBwZW5kKGNzc0NsYXNzZXMuaWNvbkV4cGFuZGVkLCAhaXNDb2xsYXBzZWQpXG4gICAgICAgICAgICAudG9TdHJpbmcoKTtcbiAgICB9O1xuICAgIHJldHVybiBEZWZhdWx0VGl0bGVNb2RlbDtcbn0oKSk7XG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9kcmFnLWRyb3AtaGVscGVyLXYxLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvZHJhZy1kcm9wLWhlbHBlci12MS50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IERyYWdEcm9wSW5mbyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJEcmFnRHJvcEluZm9cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBEcmFnRHJvcEluZm87IH0pO1xudmFyIERyYWdEcm9wSW5mbyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBEcmFnRHJvcEluZm8oc291cmNlLCB0YXJnZXQsIG5lc3RlZFBhbmVsRGVwdGgpIHtcbiAgICAgICAgaWYgKG5lc3RlZFBhbmVsRGVwdGggPT09IHZvaWQgMCkgeyBuZXN0ZWRQYW5lbERlcHRoID0gLTE7IH1cbiAgICAgICAgdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG4gICAgICAgIHRoaXMudGFyZ2V0ID0gdGFyZ2V0O1xuICAgICAgICB0aGlzLm5lc3RlZFBhbmVsRGVwdGggPSBuZXN0ZWRQYW5lbERlcHRoO1xuICAgIH1cbiAgICByZXR1cm4gRHJhZ0Ryb3BJbmZvO1xufSgpKTtcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL2RyYWctZHJvcC1wYWdlLWhlbHBlci12MS50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvZHJhZy1kcm9wLXBhZ2UtaGVscGVyLXYxLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBEcmFnRHJvcFBhZ2VIZWxwZXJWMSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJEcmFnRHJvcFBhZ2VIZWxwZXJWMVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIERyYWdEcm9wUGFnZUhlbHBlclYxOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZHJhZ19kcm9wX2hlbHBlcl92MV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9kcmFnLWRyb3AtaGVscGVyLXYxICovIFwiLi9zcmMvZHJhZy1kcm9wLWhlbHBlci12MS50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc2V0dGluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vc2V0dGluZ3MgKi8gXCIuL3NyYy9zZXR0aW5ncy50c1wiKTtcblxuXG52YXIgRHJhZ0Ryb3BQYWdlSGVscGVyVjEgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gRHJhZ0Ryb3BQYWdlSGVscGVyVjEocGFnZSkge1xuICAgICAgICB0aGlzLnBhZ2UgPSBwYWdlO1xuICAgIH1cbiAgICBEcmFnRHJvcFBhZ2VIZWxwZXJWMS5wcm90b3R5cGUuZ2V0RHJhZ0Ryb3BJbmZvID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5kcmFnRHJvcEluZm87IH07XG4gICAgRHJhZ0Ryb3BQYWdlSGVscGVyVjEucHJvdG90eXBlLmRyYWdEcm9wU3RhcnQgPSBmdW5jdGlvbiAoc3JjLCB0YXJnZXQsIG5lc3RlZFBhbmVsRGVwdGgpIHtcbiAgICAgICAgaWYgKG5lc3RlZFBhbmVsRGVwdGggPT09IHZvaWQgMCkgeyBuZXN0ZWRQYW5lbERlcHRoID0gLTE7IH1cbiAgICAgICAgdGhpcy5kcmFnRHJvcEluZm8gPSBuZXcgX2RyYWdfZHJvcF9oZWxwZXJfdjFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkRyYWdEcm9wSW5mb1wiXShzcmMsIHRhcmdldCwgbmVzdGVkUGFuZWxEZXB0aCk7XG4gICAgfTtcbiAgICBEcmFnRHJvcFBhZ2VIZWxwZXJWMS5wcm90b3R5cGUuZHJhZ0Ryb3BNb3ZlVG8gPSBmdW5jdGlvbiAoZGVzdGluYXRpb24sIGlzQm90dG9tLCBpc0VkZ2UpIHtcbiAgICAgICAgaWYgKGlzQm90dG9tID09PSB2b2lkIDApIHsgaXNCb3R0b20gPSBmYWxzZTsgfVxuICAgICAgICBpZiAoaXNFZGdlID09PSB2b2lkIDApIHsgaXNFZGdlID0gZmFsc2U7IH1cbiAgICAgICAgaWYgKCF0aGlzLmRyYWdEcm9wSW5mbylcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgdGhpcy5kcmFnRHJvcEluZm8uZGVzdGluYXRpb24gPSBkZXN0aW5hdGlvbjtcbiAgICAgICAgdGhpcy5kcmFnRHJvcEluZm8uaXNCb3R0b20gPSBpc0JvdHRvbTtcbiAgICAgICAgdGhpcy5kcmFnRHJvcEluZm8uaXNFZGdlID0gaXNFZGdlO1xuICAgICAgICB0aGlzLmNvcnJlY3REcmFnRHJvcEluZm8odGhpcy5kcmFnRHJvcEluZm8pO1xuICAgICAgICBpZiAoIXRoaXMuZHJhZ0Ryb3BDYW5Ecm9wVGFnZXJ0KCkpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmICghdGhpcy5kcmFnRHJvcENhbkRyb3BTb3VyY2UoKSB8fCAhdGhpcy5kcmFnRHJvcEFsbG93RnJvbVN1cnZleSgpKSB7XG4gICAgICAgICAgICBpZiAoISF0aGlzLmRyYWdEcm9wSW5mby5zb3VyY2UpIHtcbiAgICAgICAgICAgICAgICB2YXIgcm93ID0gdGhpcy5wYWdlLmRyYWdEcm9wRmluZFJvdyh0aGlzLmRyYWdEcm9wSW5mby50YXJnZXQpO1xuICAgICAgICAgICAgICAgIHRoaXMucGFnZS51cGRhdGVSb3dzUmVtb3ZlRWxlbWVudEZyb21Sb3codGhpcy5kcmFnRHJvcEluZm8udGFyZ2V0LCByb3cpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGFnZS5kcmFnRHJvcEFkZFRhcmdldCh0aGlzLmRyYWdEcm9wSW5mbyk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG4gICAgRHJhZ0Ryb3BQYWdlSGVscGVyVjEucHJvdG90eXBlLmNvcnJlY3REcmFnRHJvcEluZm8gPSBmdW5jdGlvbiAoZHJhZ0Ryb3BJbmZvKSB7XG4gICAgICAgIGlmICghZHJhZ0Ryb3BJbmZvLmRlc3RpbmF0aW9uKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIgcGFuZWwgPSBkcmFnRHJvcEluZm8uZGVzdGluYXRpb24uaXNQYW5lbFxuICAgICAgICAgICAgPyBkcmFnRHJvcEluZm8uZGVzdGluYXRpb25cbiAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgaWYgKCFwYW5lbClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKCFkcmFnRHJvcEluZm8udGFyZ2V0LmlzTGF5b3V0VHlwZVN1cHBvcnRlZChwYW5lbC5nZXRDaGlsZHJlbkxheW91dFR5cGUoKSkpIHtcbiAgICAgICAgICAgIGRyYWdEcm9wSW5mby5pc0VkZ2UgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBEcmFnRHJvcFBhZ2VIZWxwZXJWMS5wcm90b3R5cGUuZHJhZ0Ryb3BBbGxvd0Zyb21TdXJ2ZXkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBkZXN0ID0gdGhpcy5kcmFnRHJvcEluZm8uZGVzdGluYXRpb247XG4gICAgICAgIGlmICghZGVzdCB8fCAhdGhpcy5wYWdlLnN1cnZleSlcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB2YXIgaW5zZXJ0QmVmb3JlID0gbnVsbDtcbiAgICAgICAgdmFyIGluc2VydEFmdGVyID0gbnVsbDtcbiAgICAgICAgdmFyIHBhcmVudCA9IGRlc3QuaXNQYWdlIHx8ICghdGhpcy5kcmFnRHJvcEluZm8uaXNFZGdlICYmIGRlc3QuaXNQYW5lbClcbiAgICAgICAgICAgID8gZGVzdFxuICAgICAgICAgICAgOiBkZXN0LnBhcmVudDtcbiAgICAgICAgaWYgKCFkZXN0LmlzUGFnZSkge1xuICAgICAgICAgICAgdmFyIGNvbnRhaW5lciA9IGRlc3QucGFyZW50O1xuICAgICAgICAgICAgaWYgKCEhY29udGFpbmVyKSB7XG4gICAgICAgICAgICAgICAgdmFyIGVsZW1lbnRzID0gY29udGFpbmVyLmVsZW1lbnRzO1xuICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IGVsZW1lbnRzLmluZGV4T2YoZGVzdCk7XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5zZXJ0QmVmb3JlID0gZGVzdDtcbiAgICAgICAgICAgICAgICAgICAgaW5zZXJ0QWZ0ZXIgPSBkZXN0O1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kcmFnRHJvcEluZm8uaXNCb3R0b20pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydEJlZm9yZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggPCBlbGVtZW50cy5sZW5ndGggLSAxID8gZWxlbWVudHNbaW5kZXggKyAxXSA6IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRBZnRlciA9IGluZGV4ID4gMCA/IGVsZW1lbnRzW2luZGV4IC0gMV0gOiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgICAgICAgYWxsb3c6IHRydWUsXG4gICAgICAgICAgICB0YXJnZXQ6IHRoaXMuZHJhZ0Ryb3BJbmZvLnRhcmdldCxcbiAgICAgICAgICAgIHNvdXJjZTogdGhpcy5kcmFnRHJvcEluZm8uc291cmNlLFxuICAgICAgICAgICAgcGFyZW50OiBwYXJlbnQsXG4gICAgICAgICAgICBpbnNlcnRBZnRlcjogaW5zZXJ0QWZ0ZXIsXG4gICAgICAgICAgICBpbnNlcnRCZWZvcmU6IGluc2VydEJlZm9yZSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFnZS5zdXJ2ZXkuZHJhZ0FuZERyb3BBbGxvdyhvcHRpb25zKTtcbiAgICB9O1xuICAgIERyYWdEcm9wUGFnZUhlbHBlclYxLnByb3RvdHlwZS5kcmFnRHJvcEZpbmlzaCA9IGZ1bmN0aW9uIChpc0NhbmNlbCkge1xuICAgICAgICBpZiAoaXNDYW5jZWwgPT09IHZvaWQgMCkgeyBpc0NhbmNlbCA9IGZhbHNlOyB9XG4gICAgICAgIGlmICghdGhpcy5kcmFnRHJvcEluZm8pXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciB0YXJnZXQgPSB0aGlzLmRyYWdEcm9wSW5mby50YXJnZXQ7XG4gICAgICAgIHZhciBzcmMgPSB0aGlzLmRyYWdEcm9wSW5mby5zb3VyY2U7XG4gICAgICAgIHZhciBkZXN0ID0gdGhpcy5kcmFnRHJvcEluZm8uZGVzdGluYXRpb247XG4gICAgICAgIHZhciByb3cgPSB0aGlzLnBhZ2UuZHJhZ0Ryb3BGaW5kUm93KHRhcmdldCk7XG4gICAgICAgIHZhciB0YXJnZXRJbmRleCA9IHRoaXMuZHJhZ0Ryb3BHZXRFbGVtZW50SW5kZXgodGFyZ2V0LCByb3cpO1xuICAgICAgICB0aGlzLnBhZ2UudXBkYXRlUm93c1JlbW92ZUVsZW1lbnRGcm9tUm93KHRhcmdldCwgcm93KTtcbiAgICAgICAgdmFyIGVsZW1lbnRzVG9TZXRTV05MID0gW107XG4gICAgICAgIHZhciBlbGVtZW50c1RvUmVzZXRTV05MID0gW107XG4gICAgICAgIGlmICghaXNDYW5jZWwgJiYgISFyb3cpIHtcbiAgICAgICAgICAgIHZhciBpc1NhbWVQYW5lbCA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKHRoaXMucGFnZS5pc0Rlc2lnbk1vZGUgJiYgX3NldHRpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJzZXR0aW5nc1wiXS5zdXBwb3J0Q3JlYXRvclYyKSB7XG4gICAgICAgICAgICAgICAgdmFyIHNyY1JvdyA9IHNyYyAmJiBzcmMucGFyZW50ICYmIHNyYy5wYXJlbnQuZHJhZ0Ryb3BGaW5kUm93KHNyYyk7XG4gICAgICAgICAgICAgICAgaWYgKHJvdy5wYW5lbC5lbGVtZW50c1t0YXJnZXRJbmRleF0gJiYgcm93LnBhbmVsLmVsZW1lbnRzW3RhcmdldEluZGV4XS5zdGFydFdpdGhOZXdMaW5lICYmIHJvdy5lbGVtZW50cy5sZW5ndGggPiAxICYmIHJvdy5wYW5lbC5lbGVtZW50c1t0YXJnZXRJbmRleF0gPT09IGRlc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudHNUb1NldFNXTkwucHVzaCh0YXJnZXQpO1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50c1RvUmVzZXRTV05MLnB1c2gocm93LnBhbmVsLmVsZW1lbnRzW3RhcmdldEluZGV4XSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0YXJnZXQuc3RhcnRXaXRoTmV3TGluZSAmJiByb3cuZWxlbWVudHMubGVuZ3RoID4gMSAmJiAoIXJvdy5wYW5lbC5lbGVtZW50c1t0YXJnZXRJbmRleF0gfHwgIXJvdy5wYW5lbC5lbGVtZW50c1t0YXJnZXRJbmRleF0uc3RhcnRXaXRoTmV3TGluZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudHNUb1Jlc2V0U1dOTC5wdXNoKHRhcmdldCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzcmNSb3cgJiYgc3JjUm93LmVsZW1lbnRzWzBdID09PSBzcmMgJiYgc3JjUm93LmVsZW1lbnRzWzFdKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzVG9TZXRTV05MLnB1c2goc3JjUm93LmVsZW1lbnRzWzFdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJvdy5lbGVtZW50cy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50c1RvU2V0U1dOTC5wdXNoKHRhcmdldCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0YXJnZXQuc3RhcnRXaXRoTmV3TGluZSAmJiByb3cuZWxlbWVudHMubGVuZ3RoID4gMSAmJiByb3cuZWxlbWVudHNbMF0gIT09IGRlc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudHNUb1Jlc2V0U1dOTC5wdXNoKHRhcmdldCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCEhc3JjICYmICEhc3JjLnBhcmVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMucGFnZS5zdXJ2ZXkuc3RhcnRNb3ZpbmdRdWVzdGlvbigpO1xuICAgICAgICAgICAgICAgIGlzU2FtZVBhbmVsID0gcm93LnBhbmVsID09IHNyYy5wYXJlbnQ7XG4gICAgICAgICAgICAgICAgaWYgKGlzU2FtZVBhbmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJvdy5wYW5lbC5kcmFnRHJvcE1vdmVFbGVtZW50KHNyYywgdGFyZ2V0LCB0YXJnZXRJbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldEluZGV4ID0gLTE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzcmMucGFyZW50LnJlbW92ZUVsZW1lbnQoc3JjKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGFyZ2V0SW5kZXggPiAtMSkge1xuICAgICAgICAgICAgICAgIHJvdy5wYW5lbC5hZGRFbGVtZW50KHRhcmdldCwgdGFyZ2V0SW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wYWdlLnN1cnZleS5zdG9wTW92aW5nUXVlc3Rpb24oKTtcbiAgICAgICAgfVxuICAgICAgICBlbGVtZW50c1RvU2V0U1dOTC5tYXAoZnVuY3Rpb24gKGUpIHsgZS5zdGFydFdpdGhOZXdMaW5lID0gdHJ1ZTsgfSk7XG4gICAgICAgIGVsZW1lbnRzVG9SZXNldFNXTkwubWFwKGZ1bmN0aW9uIChlKSB7IGUuc3RhcnRXaXRoTmV3TGluZSA9IGZhbHNlOyB9KTtcbiAgICAgICAgdGhpcy5kcmFnRHJvcEluZm8gPSBudWxsO1xuICAgICAgICByZXR1cm4gIWlzQ2FuY2VsID8gdGFyZ2V0IDogbnVsbDtcbiAgICB9O1xuICAgIERyYWdEcm9wUGFnZUhlbHBlclYxLnByb3RvdHlwZS5kcmFnRHJvcEdldEVsZW1lbnRJbmRleCA9IGZ1bmN0aW9uICh0YXJnZXQsIHJvdykge1xuICAgICAgICBpZiAoIXJvdylcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgdmFyIGluZGV4ID0gcm93LmVsZW1lbnRzLmluZGV4T2YodGFyZ2V0KTtcbiAgICAgICAgaWYgKHJvdy5pbmRleCA9PSAwKVxuICAgICAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgICAgICB2YXIgcHJldlJvdyA9IHJvdy5wYW5lbC5yb3dzW3Jvdy5pbmRleCAtIDFdO1xuICAgICAgICB2YXIgcHJldkVsZW1lbnQgPSBwcmV2Um93LmVsZW1lbnRzW3ByZXZSb3cuZWxlbWVudHMubGVuZ3RoIC0gMV07XG4gICAgICAgIHJldHVybiBpbmRleCArIHJvdy5wYW5lbC5lbGVtZW50cy5pbmRleE9mKHByZXZFbGVtZW50KSArIDE7XG4gICAgfTtcbiAgICBEcmFnRHJvcFBhZ2VIZWxwZXJWMS5wcm90b3R5cGUuZHJhZ0Ryb3BDYW5Ecm9wVGFnZXJ0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZGVzdGluYXRpb24gPSB0aGlzLmRyYWdEcm9wSW5mby5kZXN0aW5hdGlvbjtcbiAgICAgICAgaWYgKCFkZXN0aW5hdGlvbiB8fCBkZXN0aW5hdGlvbi5pc1BhZ2UpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZHJhZ0Ryb3BDYW5Ecm9wQ29yZSh0aGlzLmRyYWdEcm9wSW5mby50YXJnZXQsIGRlc3RpbmF0aW9uKTtcbiAgICB9O1xuICAgIERyYWdEcm9wUGFnZUhlbHBlclYxLnByb3RvdHlwZS5kcmFnRHJvcENhbkRyb3BTb3VyY2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBzb3VyY2UgPSB0aGlzLmRyYWdEcm9wSW5mby5zb3VyY2U7XG4gICAgICAgIGlmICghc291cmNlKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIHZhciBkZXN0aW5hdGlvbiA9IHRoaXMuZHJhZ0Ryb3BJbmZvLmRlc3RpbmF0aW9uO1xuICAgICAgICBpZiAoIXRoaXMuZHJhZ0Ryb3BDYW5Ecm9wQ29yZShzb3VyY2UsIGRlc3RpbmF0aW9uKSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMucGFnZS5pc0Rlc2lnbk1vZGUgJiYgX3NldHRpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJzZXR0aW5nc1wiXS5zdXBwb3J0Q3JlYXRvclYyKSB7XG4gICAgICAgICAgICB2YXIgcm93U291cmNlID0gdGhpcy5wYWdlLmRyYWdEcm9wRmluZFJvdyhzb3VyY2UpO1xuICAgICAgICAgICAgdmFyIHJvd0Rlc3RpbmF0aW9uID0gdGhpcy5wYWdlLmRyYWdEcm9wRmluZFJvdyhkZXN0aW5hdGlvbik7XG4gICAgICAgICAgICBpZiAocm93U291cmNlICE9PSByb3dEZXN0aW5hdGlvbikge1xuICAgICAgICAgICAgICAgIGlmICghc291cmNlLnN0YXJ0V2l0aE5ld0xpbmUgJiYgZGVzdGluYXRpb24uc3RhcnRXaXRoTmV3TGluZSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgaWYgKHNvdXJjZS5zdGFydFdpdGhOZXdMaW5lICYmICFkZXN0aW5hdGlvbi5zdGFydFdpdGhOZXdMaW5lKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciByb3cgPSB0aGlzLnBhZ2UuZHJhZ0Ryb3BGaW5kUm93KGRlc3RpbmF0aW9uKTtcbiAgICAgICAgICAgIGlmIChyb3cgJiYgcm93LmVsZW1lbnRzLmxlbmd0aCA9PSAxKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmRyYWdEcm9wQ2FuRHJvcE5vdE5leHQoc291cmNlLCBkZXN0aW5hdGlvbiwgdGhpcy5kcmFnRHJvcEluZm8uaXNFZGdlLCB0aGlzLmRyYWdEcm9wSW5mby5pc0JvdHRvbSk7XG4gICAgfTtcbiAgICBEcmFnRHJvcFBhZ2VIZWxwZXJWMS5wcm90b3R5cGUuZHJhZ0Ryb3BDYW5Ecm9wQ29yZSA9IGZ1bmN0aW9uICh0YXJnZXQsIGRlc3RpbmF0aW9uKSB7XG4gICAgICAgIGlmICghZGVzdGluYXRpb24pXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKHRoaXMuZHJhZ0Ryb3BJc1NhbWVFbGVtZW50KGRlc3RpbmF0aW9uLCB0YXJnZXQpKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAodGFyZ2V0LmlzUGFuZWwpIHtcbiAgICAgICAgICAgIHZhciBwbmwgPSB0YXJnZXQ7XG4gICAgICAgICAgICBpZiAocG5sLmNvbnRhaW5zRWxlbWVudChkZXN0aW5hdGlvbikgfHxcbiAgICAgICAgICAgICAgICAhIXBubC5nZXRFbGVtZW50QnlOYW1lKGRlc3RpbmF0aW9uLm5hbWUpKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICAgIERyYWdEcm9wUGFnZUhlbHBlclYxLnByb3RvdHlwZS5kcmFnRHJvcENhbkRyb3BOb3ROZXh0ID0gZnVuY3Rpb24gKHNvdXJjZSwgZGVzdGluYXRpb24sIGlzRWRnZSwgaXNCb3R0b20pIHtcbiAgICAgICAgaWYgKCFkZXN0aW5hdGlvbiB8fCAoZGVzdGluYXRpb24uaXNQYW5lbCAmJiAhaXNFZGdlKSlcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAodHlwZW9mIHNvdXJjZS5wYXJlbnQgPT09IFwidW5kZWZpbmVkXCIgfHwgc291cmNlLnBhcmVudCAhPT0gZGVzdGluYXRpb24ucGFyZW50KVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIHZhciBwbmwgPSBzb3VyY2UucGFyZW50O1xuICAgICAgICB2YXIgc3JjSW5kZXggPSBwbmwuZWxlbWVudHMuaW5kZXhPZihzb3VyY2UpO1xuICAgICAgICB2YXIgZGVzdEluZGV4ID0gcG5sLmVsZW1lbnRzLmluZGV4T2YoZGVzdGluYXRpb24pO1xuICAgICAgICBpZiAoZGVzdEluZGV4IDwgc3JjSW5kZXggJiYgIWlzQm90dG9tKVxuICAgICAgICAgICAgZGVzdEluZGV4LS07XG4gICAgICAgIGlmIChpc0JvdHRvbSlcbiAgICAgICAgICAgIGRlc3RJbmRleCsrO1xuICAgICAgICByZXR1cm4gc3JjSW5kZXggPCBkZXN0SW5kZXhcbiAgICAgICAgICAgID8gZGVzdEluZGV4IC0gc3JjSW5kZXggPiAxXG4gICAgICAgICAgICA6IHNyY0luZGV4IC0gZGVzdEluZGV4ID4gMDtcbiAgICB9O1xuICAgIERyYWdEcm9wUGFnZUhlbHBlclYxLnByb3RvdHlwZS5kcmFnRHJvcElzU2FtZUVsZW1lbnQgPSBmdW5jdGlvbiAoZWwxLCBlbDIpIHtcbiAgICAgICAgcmV0dXJuIGVsMSA9PSBlbDIgfHwgZWwxLm5hbWUgPT0gZWwyLm5hbWU7XG4gICAgfTtcbiAgICByZXR1cm4gRHJhZ0Ryb3BQYWdlSGVscGVyVjE7XG59KCkpO1xuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvZHJhZy1kcm9wLXBhbmVsLWhlbHBlci12MS50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL2RyYWctZHJvcC1wYW5lbC1oZWxwZXItdjEudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBEcmFnRHJvcFBhbmVsSGVscGVyVjEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiRHJhZ0Ryb3BQYW5lbEhlbHBlclYxXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRHJhZ0Ryb3BQYW5lbEhlbHBlclYxOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZHJhZ19kcm9wX2hlbHBlcl92MV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9kcmFnLWRyb3AtaGVscGVyLXYxICovIFwiLi9zcmMvZHJhZy1kcm9wLWhlbHBlci12MS50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc2V0dGluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vc2V0dGluZ3MgKi8gXCIuL3NyYy9zZXR0aW5ncy50c1wiKTtcblxuXG52YXIgRHJhZ0Ryb3BQYW5lbEhlbHBlclYxID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIERyYWdEcm9wUGFuZWxIZWxwZXJWMShwYW5lbCkge1xuICAgICAgICB0aGlzLnBhbmVsID0gcGFuZWw7XG4gICAgfVxuICAgIERyYWdEcm9wUGFuZWxIZWxwZXJWMS5wcm90b3R5cGUuZHJhZ0Ryb3BBZGRUYXJnZXQgPSBmdW5jdGlvbiAoZHJhZ0Ryb3BJbmZvKSB7XG4gICAgICAgIHZhciBwcmV2Um93ID0gdGhpcy5kcmFnRHJvcEZpbmRSb3coZHJhZ0Ryb3BJbmZvLnRhcmdldCk7XG4gICAgICAgIGlmICh0aGlzLmRyYWdEcm9wQWRkVGFyZ2V0VG9Sb3coZHJhZ0Ryb3BJbmZvLCBwcmV2Um93KSkge1xuICAgICAgICAgICAgdGhpcy5wYW5lbC51cGRhdGVSb3dzUmVtb3ZlRWxlbWVudEZyb21Sb3coZHJhZ0Ryb3BJbmZvLnRhcmdldCwgcHJldlJvdyk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIERyYWdEcm9wUGFuZWxIZWxwZXJWMS5wcm90b3R5cGUuZHJhZ0Ryb3BGaW5kUm93ID0gZnVuY3Rpb24gKGZpbmRFbGVtZW50KSB7XG4gICAgICAgIGlmICghZmluZEVsZW1lbnQgfHwgZmluZEVsZW1lbnQuaXNQYWdlKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIHZhciBlbGVtZW50ID0gZmluZEVsZW1lbnQ7XG4gICAgICAgIHZhciByb3dzID0gdGhpcy5wYW5lbC5yb3dzO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChyb3dzW2ldLmVsZW1lbnRzLmluZGV4T2YoZWxlbWVudCkgPiAtMSlcbiAgICAgICAgICAgICAgICByZXR1cm4gcm93c1tpXTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGFuZWwuZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBwbmwgPSB0aGlzLnBhbmVsLmVsZW1lbnRzW2ldLmdldFBhbmVsKCk7XG4gICAgICAgICAgICBpZiAoIXBubClcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIHZhciByb3cgPSBwbmwuZHJhZ0Ryb3BGaW5kUm93KGVsZW1lbnQpO1xuICAgICAgICAgICAgaWYgKCEhcm93KVxuICAgICAgICAgICAgICAgIHJldHVybiByb3c7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgICBEcmFnRHJvcFBhbmVsSGVscGVyVjEucHJvdG90eXBlLmRyYWdEcm9wTW92ZUVsZW1lbnQgPSBmdW5jdGlvbiAoc3JjLCB0YXJnZXQsIHRhcmdldEluZGV4KSB7XG4gICAgICAgIHZhciBzcmNJbmRleCA9IHNyYy5wYXJlbnQuZWxlbWVudHMuaW5kZXhPZihzcmMpO1xuICAgICAgICBpZiAodGFyZ2V0SW5kZXggPiBzcmNJbmRleCkge1xuICAgICAgICAgICAgdGFyZ2V0SW5kZXgtLTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBhbmVsLnJlbW92ZUVsZW1lbnQoc3JjKTtcbiAgICAgICAgdGhpcy5wYW5lbC5hZGRFbGVtZW50KHRhcmdldCwgdGFyZ2V0SW5kZXgpO1xuICAgIH07XG4gICAgRHJhZ0Ryb3BQYW5lbEhlbHBlclYxLnByb3RvdHlwZS51cGRhdGVSb3dzT25FbGVtZW50QWRkZWQgPSBmdW5jdGlvbiAoZWxlbWVudCwgaW5kZXgsIGRyYWdEcm9wSW5mbywgdGhpc0VsZW1lbnQpIHtcbiAgICAgICAgaWYgKCFkcmFnRHJvcEluZm8pIHtcbiAgICAgICAgICAgIGRyYWdEcm9wSW5mbyA9IG5ldyBfZHJhZ19kcm9wX2hlbHBlcl92MV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiRHJhZ0Ryb3BJbmZvXCJdKG51bGwsIGVsZW1lbnQpO1xuICAgICAgICAgICAgZHJhZ0Ryb3BJbmZvLnRhcmdldCA9IGVsZW1lbnQ7XG4gICAgICAgICAgICBkcmFnRHJvcEluZm8uaXNFZGdlID0gdGhpcy5wYW5lbC5lbGVtZW50cy5sZW5ndGggPiAxO1xuICAgICAgICAgICAgaWYgKHRoaXMucGFuZWwuZWxlbWVudHMubGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgICAgIGRyYWdEcm9wSW5mby5kZXN0aW5hdGlvbiA9IHRoaXNFbGVtZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZHJhZ0Ryb3BJbmZvLmlzQm90dG9tID0gaW5kZXggPiAwO1xuICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGRyYWdEcm9wSW5mby5kZXN0aW5hdGlvbiA9IHRoaXMucGFuZWwuZWxlbWVudHNbMV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBkcmFnRHJvcEluZm8uZGVzdGluYXRpb24gPSB0aGlzLnBhbmVsLmVsZW1lbnRzW2luZGV4IC0gMV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZHJhZ0Ryb3BBZGRUYXJnZXRUb1JvdyhkcmFnRHJvcEluZm8sIG51bGwpO1xuICAgIH07XG4gICAgRHJhZ0Ryb3BQYW5lbEhlbHBlclYxLnByb3RvdHlwZS5kcmFnRHJvcEFkZFRhcmdldFRvUm93ID0gZnVuY3Rpb24gKGRyYWdEcm9wSW5mbywgcHJldlJvdykge1xuICAgICAgICBpZiAoIWRyYWdEcm9wSW5mby5kZXN0aW5hdGlvbilcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAodGhpcy5kcmFnRHJvcEFkZFRhcmdldFRvRW1wdHlQYW5lbChkcmFnRHJvcEluZm8pKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIHZhciBkZXN0ID0gZHJhZ0Ryb3BJbmZvLmRlc3RpbmF0aW9uO1xuICAgICAgICB2YXIgZGVzdFJvdyA9IHRoaXMuZHJhZ0Ryb3BGaW5kUm93KGRlc3QpO1xuICAgICAgICBpZiAoIWRlc3RSb3cpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgLy8gaWYgKHNldHRpbmdzLnN1cHBvcnRDcmVhdG9yVjIgJiYgdGhpcy5wYW5lbC5pc0Rlc2lnbk1vZGUpIHtcbiAgICAgICAgLy8gICBpZiAoZGVzdFJvdy5lbGVtZW50cy5sZW5ndGggPiAxKVxuICAgICAgICAvLyAgICAgcmV0dXJuIHRoaXMuZHJhZ0Ryb3BBZGRUYXJnZXRUb0V4aXN0aW5nUm93KFxuICAgICAgICAvLyAgICAgICBkcmFnRHJvcEluZm8sXG4gICAgICAgIC8vICAgICAgIGRlc3RSb3csXG4gICAgICAgIC8vICAgICAgIHByZXZSb3dcbiAgICAgICAgLy8gICAgICk7XG4gICAgICAgIC8vICAgZWxzZVxuICAgICAgICAvLyAgICAgcmV0dXJuIHRoaXMuZHJhZ0Ryb3BBZGRUYXJnZXRUb05ld1JvdyhkcmFnRHJvcEluZm8sIGRlc3RSb3csIHByZXZSb3cpO1xuICAgICAgICAvLyB9XG4gICAgICAgIGlmICghZHJhZ0Ryb3BJbmZvLnRhcmdldC5zdGFydFdpdGhOZXdMaW5lKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZHJhZ0Ryb3BBZGRUYXJnZXRUb0V4aXN0aW5nUm93KGRyYWdEcm9wSW5mbywgZGVzdFJvdywgcHJldlJvdyk7XG4gICAgICAgIHJldHVybiB0aGlzLmRyYWdEcm9wQWRkVGFyZ2V0VG9OZXdSb3coZHJhZ0Ryb3BJbmZvLCBkZXN0Um93LCBwcmV2Um93KTtcbiAgICB9O1xuICAgIERyYWdEcm9wUGFuZWxIZWxwZXJWMS5wcm90b3R5cGUuZHJhZ0Ryb3BBZGRUYXJnZXRUb0VtcHR5UGFuZWwgPSBmdW5jdGlvbiAoZHJhZ0Ryb3BJbmZvKSB7XG4gICAgICAgIGlmIChkcmFnRHJvcEluZm8uZGVzdGluYXRpb24uaXNQYWdlKSB7XG4gICAgICAgICAgICB0aGlzLmRyYWdEcm9wQWRkVGFyZ2V0VG9FbXB0eVBhbmVsQ29yZSh0aGlzLnBhbmVsLnJvb3QsIGRyYWdEcm9wSW5mby50YXJnZXQsIGRyYWdEcm9wSW5mby5pc0JvdHRvbSk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZGVzdCA9IGRyYWdEcm9wSW5mby5kZXN0aW5hdGlvbjtcbiAgICAgICAgaWYgKGRlc3QuaXNQYW5lbCAmJiAhZHJhZ0Ryb3BJbmZvLmlzRWRnZSkge1xuICAgICAgICAgICAgdmFyIHBhbmVsID0gZGVzdDtcbiAgICAgICAgICAgIGlmIChkcmFnRHJvcEluZm8udGFyZ2V0W1widGVtcGxhdGVcIl0gPT09IGRlc3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZHJhZ0Ryb3BJbmZvLm5lc3RlZFBhbmVsRGVwdGggPCAwIHx8XG4gICAgICAgICAgICAgICAgZHJhZ0Ryb3BJbmZvLm5lc3RlZFBhbmVsRGVwdGggPj0gcGFuZWwuZGVwdGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRyYWdEcm9wQWRkVGFyZ2V0VG9FbXB0eVBhbmVsQ29yZShkZXN0LCBkcmFnRHJvcEluZm8udGFyZ2V0LCBkcmFnRHJvcEluZm8uaXNCb3R0b20pO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuICAgIERyYWdEcm9wUGFuZWxIZWxwZXJWMS5wcm90b3R5cGUuZHJhZ0Ryb3BBZGRUYXJnZXRUb0V4aXN0aW5nUm93ID0gZnVuY3Rpb24gKGRyYWdEcm9wSW5mbywgZGVzdFJvdywgcHJldlJvdykge1xuICAgICAgICB2YXIgaW5kZXggPSBkZXN0Um93LmVsZW1lbnRzLmluZGV4T2YoZHJhZ0Ryb3BJbmZvLmRlc3RpbmF0aW9uKTtcbiAgICAgICAgaWYgKGluZGV4ID09IDAgJiZcbiAgICAgICAgICAgICFkcmFnRHJvcEluZm8uaXNCb3R0b20pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnBhbmVsLmlzRGVzaWduTW9kZSAmJiBfc2V0dGluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcInNldHRpbmdzXCJdLnN1cHBvcnRDcmVhdG9yVjIpIHtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRlc3RSb3cuZWxlbWVudHNbMF0uc3RhcnRXaXRoTmV3TGluZSkge1xuICAgICAgICAgICAgICAgIGlmIChkZXN0Um93LmluZGV4ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBkcmFnRHJvcEluZm8uaXNCb3R0b20gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBkZXN0Um93ID0gZGVzdFJvdy5wYW5lbC5yb3dzW2Rlc3RSb3cuaW5kZXggLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgZHJhZ0Ryb3BJbmZvLmRlc3RpbmF0aW9uID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3cuZWxlbWVudHNbZGVzdFJvdy5lbGVtZW50cy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZHJhZ0Ryb3BBZGRUYXJnZXRUb0V4aXN0aW5nUm93KGRyYWdEcm9wSW5mbywgZGVzdFJvdywgcHJldlJvdyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kcmFnRHJvcEFkZFRhcmdldFRvTmV3Um93KGRyYWdEcm9wSW5mbywgZGVzdFJvdywgcHJldlJvdyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHZhciBwcmV2Um93SW5kZXggPSAtMTtcbiAgICAgICAgaWYgKHByZXZSb3cgPT0gZGVzdFJvdykge1xuICAgICAgICAgICAgcHJldlJvd0luZGV4ID0gZGVzdFJvdy5lbGVtZW50cy5pbmRleE9mKGRyYWdEcm9wSW5mby50YXJnZXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkcmFnRHJvcEluZm8uaXNCb3R0b20pXG4gICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICB2YXIgc3JjUm93ID0gdGhpcy5wYW5lbC5maW5kUm93QnlFbGVtZW50KGRyYWdEcm9wSW5mby5zb3VyY2UpO1xuICAgICAgICBpZiAoc3JjUm93ID09IGRlc3RSb3cgJiZcbiAgICAgICAgICAgIHNyY1Jvdy5lbGVtZW50cy5pbmRleE9mKGRyYWdEcm9wSW5mby5zb3VyY2UpID09IGluZGV4KVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoaW5kZXggPT0gcHJldlJvd0luZGV4KVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAocHJldlJvd0luZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIGRlc3RSb3cuZWxlbWVudHMuc3BsaWNlKHByZXZSb3dJbmRleCwgMSk7XG4gICAgICAgICAgICBpZiAocHJldlJvd0luZGV4IDwgaW5kZXgpXG4gICAgICAgICAgICAgICAgaW5kZXgtLTtcbiAgICAgICAgfVxuICAgICAgICBkZXN0Um93LmVsZW1lbnRzLnNwbGljZShpbmRleCwgMCwgZHJhZ0Ryb3BJbmZvLnRhcmdldCk7XG4gICAgICAgIGRlc3RSb3cudXBkYXRlVmlzaWJsZSgpO1xuICAgICAgICByZXR1cm4gcHJldlJvd0luZGV4IDwgMDtcbiAgICB9O1xuICAgIERyYWdEcm9wUGFuZWxIZWxwZXJWMS5wcm90b3R5cGUuZHJhZ0Ryb3BBZGRUYXJnZXRUb05ld1JvdyA9IGZ1bmN0aW9uIChkcmFnRHJvcEluZm8sIGRlc3RSb3csIHByZXZSb3cpIHtcbiAgICAgICAgdmFyIHRhcmdldFJvdyA9IGRlc3RSb3cucGFuZWwuY3JlYXRlUm93QW5kU2V0TGF6eShkZXN0Um93LnBhbmVsLnJvd3MubGVuZ3RoKTtcbiAgICAgICAgaWYgKHRoaXMucGFuZWwuaXNEZXNpZ25Nb2RlICYmIF9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wic2V0dGluZ3NcIl0uc3VwcG9ydENyZWF0b3JWMikge1xuICAgICAgICAgICAgdGFyZ2V0Um93LnNldElzTGF6eVJlbmRlcmluZyhmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGFyZ2V0Um93LmFkZEVsZW1lbnQoZHJhZ0Ryb3BJbmZvLnRhcmdldCk7XG4gICAgICAgIHZhciBpbmRleCA9IGRlc3RSb3cuaW5kZXg7XG4gICAgICAgIGlmIChkcmFnRHJvcEluZm8uaXNCb3R0b20pIHtcbiAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgIH1cbiAgICAgICAgLy9zYW1lIHJvd1xuICAgICAgICBpZiAoISFwcmV2Um93ICYmIHByZXZSb3cucGFuZWwgPT0gdGFyZ2V0Um93LnBhbmVsICYmIHByZXZSb3cuaW5kZXggPT0gaW5kZXgpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHZhciBzcmNSb3cgPSB0aGlzLnBhbmVsLmZpbmRSb3dCeUVsZW1lbnQoZHJhZ0Ryb3BJbmZvLnNvdXJjZSk7XG4gICAgICAgIGlmICghIXNyY1JvdyAmJlxuICAgICAgICAgICAgc3JjUm93LnBhbmVsID09IHRhcmdldFJvdy5wYW5lbCAmJlxuICAgICAgICAgICAgc3JjUm93LmVsZW1lbnRzLmxlbmd0aCA9PSAxICYmXG4gICAgICAgICAgICBzcmNSb3cuaW5kZXggPT0gaW5kZXgpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGRlc3RSb3cucGFuZWwucm93cy5zcGxpY2UoaW5kZXgsIDAsIHRhcmdldFJvdyk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG4gICAgRHJhZ0Ryb3BQYW5lbEhlbHBlclYxLnByb3RvdHlwZS5kcmFnRHJvcEFkZFRhcmdldFRvRW1wdHlQYW5lbENvcmUgPSBmdW5jdGlvbiAocGFuZWwsIHRhcmdldCwgaXNCb3R0b20pIHtcbiAgICAgICAgdmFyIHRhcmdldFJvdyA9IHBhbmVsLmNyZWF0ZVJvdygpO1xuICAgICAgICB0YXJnZXRSb3cuYWRkRWxlbWVudCh0YXJnZXQpO1xuICAgICAgICBpZiAocGFuZWwuZWxlbWVudHMubGVuZ3RoID09IDAgfHwgaXNCb3R0b20pIHtcbiAgICAgICAgICAgIHBhbmVsLnJvd3MucHVzaCh0YXJnZXRSb3cpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcGFuZWwucm93cy5zcGxpY2UoMCwgMCwgdGFyZ2V0Um93KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIERyYWdEcm9wUGFuZWxIZWxwZXJWMTtcbn0oKSk7XG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9kcmFnZHJvcC9jaG9pY2VzLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvZHJhZ2Ryb3AvY2hvaWNlcy50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IERyYWdEcm9wQ2hvaWNlcyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJEcmFnRHJvcENob2ljZXNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBEcmFnRHJvcENob2ljZXM7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2NvcmUgKi8gXCIuL3NyYy9kcmFnZHJvcC9jb3JlLnRzXCIpO1xudmFyIF9fZXh0ZW5kcyA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG5cbnZhciBEcmFnRHJvcENob2ljZXMgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKERyYWdEcm9wQ2hvaWNlcywgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBEcmFnRHJvcENob2ljZXMoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5kb0RyYWdPdmVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKF90aGlzLnBhcmVudEVsZW1lbnQuZ2V0VHlwZSgpID09PSBcImltYWdlcGlja2VyXCIpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdmFyIG5vZGUgPSBfdGhpcy5kb21BZGFwdGVyLmRyYWdnZWRFbGVtZW50U2hvcnRjdXQucXVlcnlTZWxlY3RvcihcIi5zdmMtaXRlbS12YWx1ZS1jb250cm9sc19fYnV0dG9uXCIpO1xuICAgICAgICAgICAgbm9kZS5zdHlsZS5jdXJzb3IgPSBcImdyYWJiaW5nXCI7XG4gICAgICAgIH07XG4gICAgICAgIF90aGlzLmRvQmFuRHJvcEhlcmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoX3RoaXMucGFyZW50RWxlbWVudC5nZXRUeXBlKCkgPT09IFwiaW1hZ2VwaWNrZXJcIilcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB2YXIgbm9kZSA9IF90aGlzLmRvbUFkYXB0ZXIuZHJhZ2dlZEVsZW1lbnRTaG9ydGN1dC5xdWVyeVNlbGVjdG9yKFwiLnN2Yy1pdGVtLXZhbHVlLWNvbnRyb2xzX19idXR0b25cIik7XG4gICAgICAgICAgICBub2RlLnN0eWxlLmN1cnNvciA9IFwibm90LWFsbG93ZWRcIjtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRHJhZ0Ryb3BDaG9pY2VzLnByb3RvdHlwZSwgXCJkcmFnZ2VkRWxlbWVudFR5cGVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBcIml0ZW0tdmFsdWVcIjtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIERyYWdEcm9wQ2hvaWNlcy5wcm90b3R5cGUuY3JlYXRlRHJhZ2dlZEVsZW1lbnRTaG9ydGN1dCA9IGZ1bmN0aW9uICh0ZXh0LCBkcmFnZ2VkRWxlbWVudE5vZGUsIGV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLnBhcmVudEVsZW1lbnQuZ2V0VHlwZSgpID09PSBcImltYWdlcGlja2VyXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUltYWdlUGlja2VyU2hvcnRjdXQodGhpcy5kcmFnZ2VkRWxlbWVudCwgdGV4dCwgZHJhZ2dlZEVsZW1lbnROb2RlLCBldmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGRyYWdnZWRFbGVtZW50U2hvcnRjdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICAvLyBkcmFnZ2VkRWxlbWVudFNob3J0Y3V0LmlubmVyVGV4dCA9IHRleHQ7XG4gICAgICAgIGRyYWdnZWRFbGVtZW50U2hvcnRjdXQuc3R5bGUuY3NzVGV4dCA9IFwiIFxcbiAgICAgICAgICBjdXJzb3I6IGdyYWJiaW5nO1xcbiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgICAgICAgIHotaW5kZXg6IDEwMDAwO1xcbiAgICAgICAgICBmb250LWZhbWlseTogdmFyKC0tZm9udC1mYW1pbHksICdPcGVuIFNhbnMnKTtcXG4gICAgICAgIFwiO1xuICAgICAgICB2YXIgaXNEZWVwQ2xvbmUgPSB0cnVlO1xuICAgICAgICB2YXIgY2xvbmUgPSAoZHJhZ2dlZEVsZW1lbnROb2RlXG4gICAgICAgICAgICAuY2xvc2VzdChcIltkYXRhLXN2LWRyb3AtdGFyZ2V0LWl0ZW0tdmFsdWVdXCIpXG4gICAgICAgICAgICAuY2xvbmVOb2RlKGlzRGVlcENsb25lKSk7XG4gICAgICAgIGNsb25lLnN0eWxlLmNzc1RleHQgPSBcIlxcbiAgICAgIG1pbi13aWR0aDogMTAwcHg7XFxuICAgICAgYm94LXNoYWRvdzogdmFyKC0tc2pzLXNoYWRvdy1sYXJnZSwgMHB4IDhweCAxNnB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMSkpLCB2YXIoLS1zanMtc2hhZG93LW1lZGl1bSwgMHB4IDJweCA2cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xKSk7XFxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tc2pzLWdlbmVyYWwtYmFja2NvbG9yLCB2YXIoLS1iYWNrZ3JvdW5kLCAjZmZmKSk7XFxuICAgICAgYm9yZGVyLXJhZGl1czogY2FsYyg0LjUgKiB2YXIoLS1zanMtYmFzZS11bml0LCB2YXIoLS1iYXNlLXVuaXQsIDhweCkpKTtcXG4gICAgICBwYWRkaW5nLXJpZ2h0OiBjYWxjKDIqIHZhcigtLXNqcy1iYXNlLXVuaXQsIHZhcigtLWJhc2UtdW5pdCwgOHB4KSkpO1xcbiAgICAgIG1hcmdpbi1sZWZ0OiAwO1xcbiAgICBcIjtcbiAgICAgICAgdmFyIGRyYWdJY29uID0gY2xvbmUucXVlcnlTZWxlY3RvcihcIi5zdmMtaXRlbS12YWx1ZS1jb250cm9sc19fZHJhZy1pY29uXCIpO1xuICAgICAgICBkcmFnSWNvbi5zdHlsZS52aXNpYmlsaXR5ID0gXCJ2aXNpYmxlXCI7XG4gICAgICAgIHZhciByZW1vdmVJY29uID0gY2xvbmUucXVlcnlTZWxlY3RvcihcIi5zdmMtaXRlbS12YWx1ZS1jb250cm9sc19fcmVtb3ZlXCIpO1xuICAgICAgICByZW1vdmVJY29uLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IFwidHJhbnNwYXJlbnRcIjtcbiAgICAgICAgY2xvbmUuY2xhc3NMaXN0LnJlbW92ZShcInN2Yy1pdGVtLXZhbHVlLS1tb3ZldXBcIik7XG4gICAgICAgIGNsb25lLmNsYXNzTGlzdC5yZW1vdmUoXCJzdmMtaXRlbS12YWx1ZS0tbW92ZWRvd25cIik7XG4gICAgICAgIHRoaXMuZHJhZ2dlZEVsZW1lbnQuaXNEcmFnRHJvcE1vdmVEb3duID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZHJhZ2dlZEVsZW1lbnQuaXNEcmFnRHJvcE1vdmVVcCA9IGZhbHNlO1xuICAgICAgICBkcmFnZ2VkRWxlbWVudFNob3J0Y3V0LmFwcGVuZENoaWxkKGNsb25lKTtcbiAgICAgICAgdmFyIHJlY3QgPSBkcmFnZ2VkRWxlbWVudE5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGRyYWdnZWRFbGVtZW50U2hvcnRjdXQuc2hvcnRjdXRYT2Zmc2V0ID0gZXZlbnQuY2xpZW50WCAtIHJlY3QueDtcbiAgICAgICAgZHJhZ2dlZEVsZW1lbnRTaG9ydGN1dC5zaG9ydGN1dFlPZmZzZXQgPSBldmVudC5jbGllbnRZIC0gcmVjdC55O1xuICAgICAgICB0aGlzLmlzQm90dG9tID0gbnVsbDtcbiAgICAgICAgcmV0dXJuIGRyYWdnZWRFbGVtZW50U2hvcnRjdXQ7XG4gICAgfTtcbiAgICBEcmFnRHJvcENob2ljZXMucHJvdG90eXBlLmNyZWF0ZUltYWdlUGlja2VyU2hvcnRjdXQgPSBmdW5jdGlvbiAoaXRlbSwgdGV4dCwgZHJhZ2dlZEVsZW1lbnROb2RlLCBldmVudCkge1xuICAgICAgICB2YXIgZHJhZ2dlZEVsZW1lbnRTaG9ydGN1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgIGRyYWdnZWRFbGVtZW50U2hvcnRjdXQuc3R5bGUuY3NzVGV4dCA9IFwiIFxcbiAgICAgIGN1cnNvcjogZ3JhYmJpbmc7XFxuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICAgIHotaW5kZXg6IDEwMDAwO1xcbiAgICAgIGJveC1zaGFkb3c6IHZhcigtLXNqcy1zaGFkb3ctbGFyZ2UsIDBweCA4cHggMTZweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEpKSwgdmFyKC0tc2pzLXNoYWRvdy1tZWRpdW0sIDBweCAycHggNnB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMSkpO1xcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXNqcy1nZW5lcmFsLWJhY2tjb2xvciwgdmFyKC0tYmFja2dyb3VuZCwgI2ZmZikpO1xcbiAgICAgIHBhZGRpbmc6IGNhbGMoMC41ICogdmFyKC0tc2pzLWJhc2UtdW5pdCwgdmFyKC0tYmFzZS11bml0LCA4cHgpKSk7XFxuICAgICAgYm9yZGVyLXJhZGl1czogY2FsYygwLjUgKiB2YXIoLS1zanMtYmFzZS11bml0LCB2YXIoLS1iYXNlLXVuaXQsIDhweCkpKTtcXG4gICAgXCI7XG4gICAgICAgIHZhciBpdGVtVmFsdWVOb2RlID0gZHJhZ2dlZEVsZW1lbnROb2RlLmNsb3Nlc3QoXCJbZGF0YS1zdi1kcm9wLXRhcmdldC1pdGVtLXZhbHVlXVwiKTtcbiAgICAgICAgdmFyIGNvbnRyb2xzTm9kZSA9IGl0ZW1WYWx1ZU5vZGUucXVlcnlTZWxlY3RvcihcIi5zdmMtaW1hZ2UtaXRlbS12YWx1ZS1jb250cm9sc1wiKTtcbiAgICAgICAgdmFyIGltYWdlQ29udGFpbmVyTm9kZSA9IGl0ZW1WYWx1ZU5vZGUucXVlcnlTZWxlY3RvcihcIi5zZC1pbWFnZXBpY2tlcl9faW1hZ2UtY29udGFpbmVyXCIpO1xuICAgICAgICB2YXIgaW1hZ2VOb2RlID0gaXRlbVZhbHVlTm9kZS5xdWVyeVNlbGVjdG9yKGl0ZW0uaW1hZ2VMaW5rID8gXCJpbWdcIiA6IFwiLnNkLWltYWdlcGlja2VyX19uby1pbWFnZVwiKS5jbG9uZU5vZGUodHJ1ZSk7XG4gICAgICAgIGNvbnRyb2xzTm9kZS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG4gICAgICAgIGltYWdlQ29udGFpbmVyTm9kZS5zdHlsZS53aWR0aCA9IGltYWdlTm9kZS53aWR0aCArIFwicHhcIjtcbiAgICAgICAgaW1hZ2VDb250YWluZXJOb2RlLnN0eWxlLmhlaWdodCA9IGltYWdlTm9kZS5oZWlnaHQgKyBcInB4XCI7XG4gICAgICAgIGltYWdlTm9kZS5zdHlsZS5vYmplY3RGaXQgPSBcImNvdmVyXCI7XG4gICAgICAgIGltYWdlTm9kZS5zdHlsZS5ib3JkZXJSYWRpdXMgPSBcIjRweFwiO1xuICAgICAgICBkcmFnZ2VkRWxlbWVudFNob3J0Y3V0LmFwcGVuZENoaWxkKGltYWdlTm9kZSk7XG4gICAgICAgIHJldHVybiBkcmFnZ2VkRWxlbWVudFNob3J0Y3V0O1xuICAgIH07XG4gICAgRHJhZ0Ryb3BDaG9pY2VzLnByb3RvdHlwZS5nZXREcm9wVGFyZ2V0QnlEYXRhQXR0cmlidXRlVmFsdWUgPSBmdW5jdGlvbiAoZGF0YUF0dHJpYnV0ZVZhbHVlKSB7XG4gICAgICAgIHZhciBkcmFnT3ZlckNob2ljZTtcbiAgICAgICAgZHJhZ092ZXJDaG9pY2UgPSB0aGlzLnBhcmVudEVsZW1lbnQuY2hvaWNlcy5maWx0ZXIoZnVuY3Rpb24gKGNob2ljZSkgeyByZXR1cm4gXCJcIiArIGNob2ljZS52YWx1ZSA9PSBkYXRhQXR0cmlidXRlVmFsdWU7IH0pWzBdO1xuICAgICAgICByZXR1cm4gZHJhZ092ZXJDaG9pY2U7XG4gICAgfTtcbiAgICBEcmFnRHJvcENob2ljZXMucHJvdG90eXBlLmdldFZpc2libGVDaG9pY2VzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcGFyZW50ID0gdGhpcy5wYXJlbnRFbGVtZW50O1xuICAgICAgICBpZiAocGFyZW50LmdldFR5cGUoKSA9PT0gXCJyYW5raW5nXCIpIHtcbiAgICAgICAgICAgIGlmIChwYXJlbnQuc2VsZWN0VG9SYW5rRW5hYmxlZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwYXJlbnQudmlzaWJsZUNob2ljZXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyZW50LnJhbmtpbmdDaG9pY2VzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXJlbnQudmlzaWJsZUNob2ljZXM7XG4gICAgfTtcbiAgICBEcmFnRHJvcENob2ljZXMucHJvdG90eXBlLmlzRHJvcFRhcmdldFZhbGlkID0gZnVuY3Rpb24gKGRyb3BUYXJnZXQsIGRyb3BUYXJnZXROb2RlKSB7XG4gICAgICAgIHZhciBjaG9pY2VzID0gdGhpcy5nZXRWaXNpYmxlQ2hvaWNlcygpO1xuICAgICAgICBpZiAodGhpcy5wYXJlbnRFbGVtZW50LmdldFR5cGUoKSAhPT0gXCJpbWFnZXBpY2tlclwiKSB7XG4gICAgICAgICAgICB2YXIgZHJvcFRhcmdldEluZGV4ID0gY2hvaWNlcy5pbmRleE9mKHRoaXMuZHJvcFRhcmdldCk7XG4gICAgICAgICAgICB2YXIgZHJhZ2dlZEVsZW1lbnRJbmRleCA9IGNob2ljZXMuaW5kZXhPZih0aGlzLmRyYWdnZWRFbGVtZW50KTtcbiAgICAgICAgICAgIGlmIChkcmFnZ2VkRWxlbWVudEluZGV4ID4gZHJvcFRhcmdldEluZGV4ICYmIHRoaXMuZHJvcFRhcmdldC5pc0RyYWdEcm9wTW92ZVVwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kcm9wVGFyZ2V0LmlzRHJhZ0Ryb3BNb3ZlVXAgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZHJhZ2dlZEVsZW1lbnRJbmRleCA8IGRyb3BUYXJnZXRJbmRleCAmJiB0aGlzLmRyb3BUYXJnZXQuaXNEcmFnRHJvcE1vdmVEb3duKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kcm9wVGFyZ2V0LmlzRHJhZ0Ryb3BNb3ZlRG93biA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBzaG91bGRuJ3QgYWxsb3cgdG8gZHJvcCBvbiBcImFkb3JuZXJzXCIgKHNlbGVjdGFsbCwgbm9uZSwgb3RoZXIpXG4gICAgICAgIGlmIChjaG9pY2VzLmluZGV4T2YoZHJvcFRhcmdldCkgPT09IC0xKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICAgIERyYWdEcm9wQ2hvaWNlcy5wcm90b3R5cGUuY2FsY3VsYXRlSXNCb3R0b20gPSBmdW5jdGlvbiAoY2xpZW50WSkge1xuICAgICAgICB2YXIgY2hvaWNlcyA9IHRoaXMuZ2V0VmlzaWJsZUNob2ljZXMoKTtcbiAgICAgICAgcmV0dXJuIChjaG9pY2VzLmluZGV4T2YodGhpcy5kcm9wVGFyZ2V0KSAtIGNob2ljZXMuaW5kZXhPZih0aGlzLmRyYWdnZWRFbGVtZW50KSA+XG4gICAgICAgICAgICAwKTtcbiAgICB9O1xuICAgIERyYWdEcm9wQ2hvaWNlcy5wcm90b3R5cGUuYWZ0ZXJEcmFnT3ZlciA9IGZ1bmN0aW9uIChkcm9wVGFyZ2V0Tm9kZSkge1xuICAgICAgICBpZiAodGhpcy5pc0Ryb3BUYXJnZXREb2VzbnRDaGFuZ2VkKHRoaXMuaXNCb3R0b20pKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAodGhpcy5kcm9wVGFyZ2V0ID09PSB0aGlzLmRyYWdnZWRFbGVtZW50KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIgY2hvaWNlcyA9IHRoaXMuZ2V0VmlzaWJsZUNob2ljZXMoKTtcbiAgICAgICAgdmFyIGRyb3BUYXJnZXRJbmRleCA9IGNob2ljZXMuaW5kZXhPZih0aGlzLmRyb3BUYXJnZXQpO1xuICAgICAgICB2YXIgZHJhZ2dlZEVsZW1lbnRJbmRleCA9IGNob2ljZXMuaW5kZXhPZih0aGlzLmRyYWdnZWRFbGVtZW50KTtcbiAgICAgICAgY2hvaWNlcy5zcGxpY2UoZHJhZ2dlZEVsZW1lbnRJbmRleCwgMSk7XG4gICAgICAgIGNob2ljZXMuc3BsaWNlKGRyb3BUYXJnZXRJbmRleCwgMCwgdGhpcy5kcmFnZ2VkRWxlbWVudCk7XG4gICAgICAgIGlmICh0aGlzLnBhcmVudEVsZW1lbnQuZ2V0VHlwZSgpID09PSBcImltYWdlcGlja2VyXCIpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmIChkcmFnZ2VkRWxlbWVudEluZGV4ICE9PSBkcm9wVGFyZ2V0SW5kZXgpIHtcbiAgICAgICAgICAgIGRyb3BUYXJnZXROb2RlLmNsYXNzTGlzdC5yZW1vdmUoXCJzdmMtaXRlbS12YWx1ZS0tbW92ZXVwXCIpO1xuICAgICAgICAgICAgZHJvcFRhcmdldE5vZGUuY2xhc3NMaXN0LnJlbW92ZShcInN2Yy1pdGVtLXZhbHVlLS1tb3ZlZG93blwiKTtcbiAgICAgICAgICAgIHRoaXMuZHJvcFRhcmdldC5pc0RyYWdEcm9wTW92ZURvd24gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZHJvcFRhcmdldC5pc0RyYWdEcm9wTW92ZVVwID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRyYWdnZWRFbGVtZW50SW5kZXggPiBkcm9wVGFyZ2V0SW5kZXgpIHtcbiAgICAgICAgICAgIHRoaXMuZHJvcFRhcmdldC5pc0RyYWdEcm9wTW92ZURvd24gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkcmFnZ2VkRWxlbWVudEluZGV4IDwgZHJvcFRhcmdldEluZGV4KSB7XG4gICAgICAgICAgICB0aGlzLmRyb3BUYXJnZXQuaXNEcmFnRHJvcE1vdmVVcCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5naG9zdFBvc2l0aW9uQ2hhbmdlZC5jYWxsKHRoaXMpO1xuICAgIH07XG4gICAgRHJhZ0Ryb3BDaG9pY2VzLnByb3RvdHlwZS5kb0Ryb3AgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBjaG9pY2VzID0gdGhpcy5wYXJlbnRFbGVtZW50LmNob2ljZXM7XG4gICAgICAgIHZhciBmaWx0ZXJlZENob2ljZXMgPSB0aGlzLmdldFZpc2libGVDaG9pY2VzKCkuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgICByZXR1cm4gY2hvaWNlcy5pbmRleE9mKGl0ZW0pICE9PSAtMTtcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBvbGRJbmRleCA9IGNob2ljZXMuaW5kZXhPZih0aGlzLmRyYWdnZWRFbGVtZW50KTtcbiAgICAgICAgdmFyIG5ld0luZGV4ID0gZmlsdGVyZWRDaG9pY2VzLmluZGV4T2YodGhpcy5kcmFnZ2VkRWxlbWVudCk7XG4gICAgICAgIGNob2ljZXMuc3BsaWNlKG9sZEluZGV4LCAxKTtcbiAgICAgICAgY2hvaWNlcy5zcGxpY2UobmV3SW5kZXgsIDAsIHRoaXMuZHJhZ2dlZEVsZW1lbnQpO1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnRFbGVtZW50O1xuICAgIH07XG4gICAgRHJhZ0Ryb3BDaG9pY2VzLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCEhdGhpcy5wYXJlbnRFbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVZpc2libGVDaG9pY2VzKHRoaXMucGFyZW50RWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5jbGVhci5jYWxsKHRoaXMpO1xuICAgIH07XG4gICAgRHJhZ0Ryb3BDaG9pY2VzLnByb3RvdHlwZS51cGRhdGVWaXNpYmxlQ2hvaWNlcyA9IGZ1bmN0aW9uIChwYXJlbnQpIHtcbiAgICAgICAgcGFyZW50LmdldFR5cGUoKSA9PT0gXCJyYW5raW5nXCIgP1xuICAgICAgICAgICAgcGFyZW50LnVwZGF0ZVJhbmtpbmdDaG9pY2VzKCkgOlxuICAgICAgICAgICAgcGFyZW50W1widXBkYXRlVmlzaWJsZUNob2ljZXNcIl0oKTtcbiAgICB9O1xuICAgIHJldHVybiBEcmFnRHJvcENob2ljZXM7XG59KF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJEcmFnRHJvcENvcmVcIl0pKTtcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL2RyYWdkcm9wL2NvcmUudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9kcmFnZHJvcC9jb3JlLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogRHJhZ0Ryb3BDb3JlICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkRyYWdEcm9wQ29yZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIERyYWdEcm9wQ29yZTsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Jhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2Jhc2UgKi8gXCIuL3NyYy9iYXNlLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9kb21fYWRhcHRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9kb20tYWRhcHRlciAqLyBcIi4vc3JjL2RyYWdkcm9wL2RvbS1hZGFwdGVyLnRzXCIpO1xuXG5cbnZhciBEcmFnRHJvcENvcmUgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gRHJhZ0Ryb3BDb3JlKHN1cnZleVZhbHVlLCBjcmVhdG9yLCBsb25nVGFwLCBkb21BZGFwdGVyKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHRoaXMuc3VydmV5VmFsdWUgPSBzdXJ2ZXlWYWx1ZTtcbiAgICAgICAgdGhpcy5jcmVhdG9yID0gY3JlYXRvcjtcbiAgICAgICAgdGhpcy5faXNCb3R0b20gPSBudWxsO1xuICAgICAgICB0aGlzLm9uR2hvc3RQb3NpdGlvbkNoYW5nZWQgPSBuZXcgX2Jhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkV2ZW50QmFzZVwiXSgpO1xuICAgICAgICB0aGlzLm9uRHJhZ1N0YXJ0ID0gbmV3IF9iYXNlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJFdmVudEJhc2VcIl0oKTtcbiAgICAgICAgdGhpcy5vbkRyYWdFbmQgPSBuZXcgX2Jhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkV2ZW50QmFzZVwiXSgpO1xuICAgICAgICB0aGlzLm9uQmVmb3JlRHJvcCA9IHRoaXMub25EcmFnU3RhcnQ7XG4gICAgICAgIHRoaXMub25BZnRlckRyb3AgPSB0aGlzLm9uRHJhZ0VuZDtcbiAgICAgICAgdGhpcy5kcmFnZ2VkRWxlbWVudCA9IG51bGw7XG4gICAgICAgIHRoaXMuZHJvcFRhcmdldCA9IG51bGw7XG4gICAgICAgIHRoaXMucHJldkRyb3BUYXJnZXQgPSBudWxsO1xuICAgICAgICB0aGlzLmFsbG93RHJvcEhlcmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5iYW5Ecm9wSGVyZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLmFsbG93RHJvcEhlcmUgPSBmYWxzZTtcbiAgICAgICAgICAgIF90aGlzLmRvQmFuRHJvcEhlcmUoKTtcbiAgICAgICAgICAgIF90aGlzLmRyb3BUYXJnZXQgPSBudWxsO1xuICAgICAgICAgICAgX3RoaXMuZG9tQWRhcHRlci5kcmFnZ2VkRWxlbWVudFNob3J0Y3V0LnN0eWxlLmN1cnNvciA9IFwibm90LWFsbG93ZWRcIjtcbiAgICAgICAgICAgIF90aGlzLmlzQm90dG9tID0gbnVsbDtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5kb0JhbkRyb3BIZXJlID0gZnVuY3Rpb24gKCkgeyB9O1xuICAgICAgICB0aGlzLmRvbUFkYXB0ZXIgPSBkb21BZGFwdGVyIHx8IG5ldyBfZG9tX2FkYXB0ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIkRyYWdEcm9wRE9NQWRhcHRlclwiXSh0aGlzLCBsb25nVGFwKTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KERyYWdEcm9wQ29yZS5wcm90b3R5cGUsIFwiaXNCb3R0b21cIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAhIXRoaXMuX2lzQm90dG9tO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuX2lzQm90dG9tID0gdmFsO1xuICAgICAgICAgICAgdGhpcy5naG9zdFBvc2l0aW9uQ2hhbmdlZCgpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgRHJhZ0Ryb3BDb3JlLnByb3RvdHlwZS5naG9zdFBvc2l0aW9uQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5vbkdob3N0UG9zaXRpb25DaGFuZ2VkLmZpcmUoe30sIHt9KTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShEcmFnRHJvcENvcmUucHJvdG90eXBlLCBcImRyb3BUYXJnZXREYXRhQXR0cmlidXRlTmFtZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIFwiW2RhdGEtc3YtZHJvcC10YXJnZXQtXCIgKyB0aGlzLmRyYWdnZWRFbGVtZW50VHlwZSArIFwiXVwiO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KERyYWdEcm9wQ29yZS5wcm90b3R5cGUsIFwic3VydmV5XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdXJ2ZXlWYWx1ZSB8fCB0aGlzLmNyZWF0b3Iuc3VydmV5O1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgRHJhZ0Ryb3BDb3JlLnByb3RvdHlwZS5zdGFydERyYWcgPSBmdW5jdGlvbiAoZXZlbnQsIGRyYWdnZWRFbGVtZW50LCBwYXJlbnRFbGVtZW50LCBkcmFnZ2VkRWxlbWVudE5vZGUsIHByZXZlbnRTYXZlVGFyZ2V0Tm9kZSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmIChwcmV2ZW50U2F2ZVRhcmdldE5vZGUgPT09IHZvaWQgMCkgeyBwcmV2ZW50U2F2ZVRhcmdldE5vZGUgPSBmYWxzZTsgfVxuICAgICAgICB0aGlzLmRvbUFkYXB0ZXIucm9vdENvbnRhaW5lciA9IChfYSA9IHRoaXMuc3VydmV5KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eucm9vdEVsZW1lbnQ7XG4gICAgICAgIHRoaXMuZG9tQWRhcHRlci5zdGFydERyYWcoZXZlbnQsIGRyYWdnZWRFbGVtZW50LCBwYXJlbnRFbGVtZW50LCBkcmFnZ2VkRWxlbWVudE5vZGUsIHByZXZlbnRTYXZlVGFyZ2V0Tm9kZSk7XG4gICAgfTtcbiAgICBEcmFnRHJvcENvcmUucHJvdG90eXBlLmRyYWdJbml0ID0gZnVuY3Rpb24gKGV2ZW50LCBkcmFnZ2VkRWxlbWVudCwgcGFyZW50RWxlbWVudCwgZHJhZ2dlZEVsZW1lbnROb2RlKSB7XG4gICAgICAgIHRoaXMuZHJhZ2dlZEVsZW1lbnQgPSBkcmFnZ2VkRWxlbWVudDtcbiAgICAgICAgdGhpcy5wYXJlbnRFbGVtZW50ID0gcGFyZW50RWxlbWVudDtcbiAgICAgICAgdmFyIHNob3J0Y3V0VGV4dCA9IHRoaXMuZ2V0U2hvcnRjdXRUZXh0KHRoaXMuZHJhZ2dlZEVsZW1lbnQpO1xuICAgICAgICB0aGlzLmRvbUFkYXB0ZXIuZHJhZ2dlZEVsZW1lbnRTaG9ydGN1dCA9IHRoaXMuY3JlYXRlRHJhZ2dlZEVsZW1lbnRTaG9ydGN1dChzaG9ydGN1dFRleHQsIGRyYWdnZWRFbGVtZW50Tm9kZSwgZXZlbnQpO1xuICAgICAgICB0aGlzLm9uU3RhcnREcmFnKGV2ZW50KTtcbiAgICB9O1xuICAgIERyYWdEcm9wQ29yZS5wcm90b3R5cGUub25TdGFydERyYWcgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICB9O1xuICAgIERyYWdEcm9wQ29yZS5wcm90b3R5cGUuaXNEcm9wVGFyZ2V0RG9lc250Q2hhbmdlZCA9IGZ1bmN0aW9uIChuZXdJc0JvdHRvbSkge1xuICAgICAgICByZXR1cm4gKHRoaXMuZHJvcFRhcmdldCA9PT0gdGhpcy5wcmV2RHJvcFRhcmdldCAmJiBuZXdJc0JvdHRvbSA9PT0gdGhpcy5pc0JvdHRvbSk7XG4gICAgfTtcbiAgICBEcmFnRHJvcENvcmUucHJvdG90eXBlLmdldFNob3J0Y3V0VGV4dCA9IGZ1bmN0aW9uIChkcmFnZ2VkRWxlbWVudCkge1xuICAgICAgICByZXR1cm4gZHJhZ2dlZEVsZW1lbnQuc2hvcnRjdXRUZXh0O1xuICAgIH07XG4gICAgRHJhZ0Ryb3BDb3JlLnByb3RvdHlwZS5jcmVhdGVEcmFnZ2VkRWxlbWVudFNob3J0Y3V0ID0gZnVuY3Rpb24gKHRleHQsIGRyYWdnZWRFbGVtZW50Tm9kZSwgZXZlbnQpIHtcbiAgICAgICAgdmFyIGRyYWdnZWRFbGVtZW50U2hvcnRjdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICBkcmFnZ2VkRWxlbWVudFNob3J0Y3V0LmlubmVyVGV4dCA9IHRleHQ7XG4gICAgICAgIGRyYWdnZWRFbGVtZW50U2hvcnRjdXQuY2xhc3NOYW1lID0gdGhpcy5nZXREcmFnZ2VkRWxlbWVudENsYXNzKCk7XG4gICAgICAgIHJldHVybiBkcmFnZ2VkRWxlbWVudFNob3J0Y3V0O1xuICAgIH07XG4gICAgRHJhZ0Ryb3BDb3JlLnByb3RvdHlwZS5nZXREcmFnZ2VkRWxlbWVudENsYXNzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gXCJzdi1kcmFnZ2VkLWVsZW1lbnQtc2hvcnRjdXRcIjtcbiAgICB9O1xuICAgIERyYWdEcm9wQ29yZS5wcm90b3R5cGUuZG9EcmFnT3ZlciA9IGZ1bmN0aW9uICgpIHsgfTtcbiAgICBEcmFnRHJvcENvcmUucHJvdG90eXBlLmFmdGVyRHJhZ092ZXIgPSBmdW5jdGlvbiAoZHJvcFRhcmdldE5vZGUpIHsgfTtcbiAgICBEcmFnRHJvcENvcmUucHJvdG90eXBlLmZpbmREcm9wVGFyZ2V0Tm9kZUZyb21Qb2ludCA9IGZ1bmN0aW9uIChjbGllbnRYLCBjbGllbnRZKSB7XG4gICAgICAgIHZhciBkaXNwbGF5UHJvcCA9IHRoaXMuZG9tQWRhcHRlci5kcmFnZ2VkRWxlbWVudFNob3J0Y3V0LnN0eWxlLmRpc3BsYXk7XG4gICAgICAgIC8vdGhpcy5kb21BZGFwdGVyLmRyYWdnZWRFbGVtZW50U2hvcnRjdXQuaGlkZGVuID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kb21BZGFwdGVyLmRyYWdnZWRFbGVtZW50U2hvcnRjdXQuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICAgICAgICB2YXIgZHJhZ092ZXJOb2RlID0gZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludChjbGllbnRYLCBjbGllbnRZKTtcbiAgICAgICAgLy8gdGhpcy5kb21BZGFwdGVyLmRyYWdnZWRFbGVtZW50U2hvcnRjdXQuaGlkZGVuID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZG9tQWRhcHRlci5kcmFnZ2VkRWxlbWVudFNob3J0Y3V0LnN0eWxlLmRpc3BsYXkgPSBkaXNwbGF5UHJvcCB8fCBcImJsb2NrXCI7XG4gICAgICAgIGlmICghZHJhZ092ZXJOb2RlKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbmREcm9wVGFyZ2V0Tm9kZUJ5RHJhZ092ZXJOb2RlKGRyYWdPdmVyTm9kZSk7XG4gICAgfTtcbiAgICBEcmFnRHJvcENvcmUucHJvdG90eXBlLmdldERhdGFBdHRyaWJ1dGVWYWx1ZUJ5Tm9kZSA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBkYXRhc2V0TmFtZSA9IFwic3ZEcm9wVGFyZ2V0XCI7XG4gICAgICAgIHZhciB3b3JkcyA9IHRoaXMuZHJhZ2dlZEVsZW1lbnRUeXBlLnNwbGl0KFwiLVwiKTtcbiAgICAgICAgd29yZHMuZm9yRWFjaChmdW5jdGlvbiAod29yZCkge1xuICAgICAgICAgICAgZGF0YXNldE5hbWUgKz0gX3RoaXMuY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKHdvcmQpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG5vZGUuZGF0YXNldFtkYXRhc2V0TmFtZV07XG4gICAgfTtcbiAgICBEcmFnRHJvcENvcmUucHJvdG90eXBlLmdldERyb3BUYXJnZXRCeU5vZGUgPSBmdW5jdGlvbiAoZHJvcFRhcmdldE5vZGUsIGV2ZW50KSB7XG4gICAgICAgIHZhciBkYXRhQXR0cmlidXRlVmFsdWUgPSB0aGlzLmdldERhdGFBdHRyaWJ1dGVWYWx1ZUJ5Tm9kZShkcm9wVGFyZ2V0Tm9kZSk7XG4gICAgICAgIHJldHVybiB0aGlzLmdldERyb3BUYXJnZXRCeURhdGFBdHRyaWJ1dGVWYWx1ZShkYXRhQXR0cmlidXRlVmFsdWUsIGRyb3BUYXJnZXROb2RlLCBldmVudCk7XG4gICAgfTtcbiAgICBEcmFnRHJvcENvcmUucHJvdG90eXBlLmNhcGl0YWxpemVGaXJzdExldHRlciA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZy5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN0cmluZy5zbGljZSgxKTtcbiAgICB9O1xuICAgIERyYWdEcm9wQ29yZS5wcm90b3R5cGUuY2FsY3VsYXRlVmVydGljYWxNaWRkbGVPZkhUTUxFbGVtZW50ID0gZnVuY3Rpb24gKEhUTUxFbGVtZW50KSB7XG4gICAgICAgIHZhciByZWN0ID0gSFRNTEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIHJldHVybiByZWN0LnkgKyByZWN0LmhlaWdodCAvIDI7XG4gICAgfTtcbiAgICBEcmFnRHJvcENvcmUucHJvdG90eXBlLmNhbGN1bGF0ZUhvcml6b250YWxNaWRkbGVPZkhUTUxFbGVtZW50ID0gZnVuY3Rpb24gKEhUTUxFbGVtZW50KSB7XG4gICAgICAgIHZhciByZWN0ID0gSFRNTEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIHJldHVybiByZWN0LnggKyByZWN0LndpZHRoIC8gMjtcbiAgICB9O1xuICAgIERyYWdEcm9wQ29yZS5wcm90b3R5cGUuY2FsY3VsYXRlSXNCb3R0b20gPSBmdW5jdGlvbiAoY2xpZW50WSwgZHJvcFRhcmdldE5vZGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gICAgRHJhZ0Ryb3BDb3JlLnByb3RvdHlwZS5maW5kRHJvcFRhcmdldE5vZGVCeURyYWdPdmVyTm9kZSA9IGZ1bmN0aW9uIChkcmFnT3Zlck5vZGUpIHtcbiAgICAgICAgdmFyIGRyb3BUYXJnZXROb2RlID0gZHJhZ092ZXJOb2RlLmNsb3Nlc3QodGhpcy5kcm9wVGFyZ2V0RGF0YUF0dHJpYnV0ZU5hbWUpO1xuICAgICAgICByZXR1cm4gZHJvcFRhcmdldE5vZGU7XG4gICAgfTtcbiAgICBEcmFnRHJvcENvcmUucHJvdG90eXBlLmRyYWdPdmVyID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHZhciBkcm9wVGFyZ2V0Tm9kZSA9IHRoaXMuZmluZERyb3BUYXJnZXROb2RlRnJvbVBvaW50KGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xuICAgICAgICBpZiAoIWRyb3BUYXJnZXROb2RlKSB7XG4gICAgICAgICAgICB0aGlzLmJhbkRyb3BIZXJlKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kcm9wVGFyZ2V0ID0gdGhpcy5nZXREcm9wVGFyZ2V0QnlOb2RlKGRyb3BUYXJnZXROb2RlLCBldmVudCk7XG4gICAgICAgIHZhciBpc0Ryb3BUYXJnZXRWYWxpZCA9IHRoaXMuaXNEcm9wVGFyZ2V0VmFsaWQodGhpcy5kcm9wVGFyZ2V0LCBkcm9wVGFyZ2V0Tm9kZSk7XG4gICAgICAgIHRoaXMuZG9EcmFnT3ZlcigpO1xuICAgICAgICBpZiAoIWlzRHJvcFRhcmdldFZhbGlkKSB7XG4gICAgICAgICAgICB0aGlzLmJhbkRyb3BIZXJlKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGlzQm90dG9tID0gdGhpcy5jYWxjdWxhdGVJc0JvdHRvbShldmVudC5jbGllbnRZLCBkcm9wVGFyZ2V0Tm9kZSk7XG4gICAgICAgIHRoaXMuYWxsb3dEcm9wSGVyZSA9IHRydWU7XG4gICAgICAgIGlmICh0aGlzLmlzRHJvcFRhcmdldERvZXNudENoYW5nZWQoaXNCb3R0b20pKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLmlzQm90dG9tID0gbnVsbDsgLy9UT0RPIG5lZWQgZm9yIHByb3BlcnR5IGNoYW5nZSB0cmlnZ2VyIHdpdGggZ3VhcmFudGVlIGJ1dCBpdCB3b3VsZCBiZSBiZXR0ZXIgbm90IHRvIHdhdGNoIG9uIGlzQm90dG9tIHByb3BlcnR5IGJ1dCBoYXZlIHNvbWUgZXZlbnQgbGlrZSBvblZhbGlkVGFyZ2V0RHJhZ092ZXJcbiAgICAgICAgdGhpcy5pc0JvdHRvbSA9IGlzQm90dG9tO1xuICAgICAgICB0aGlzLmFmdGVyRHJhZ092ZXIoZHJvcFRhcmdldE5vZGUpO1xuICAgICAgICB0aGlzLnByZXZEcm9wVGFyZ2V0ID0gdGhpcy5kcm9wVGFyZ2V0O1xuICAgIH07XG4gICAgRHJhZ0Ryb3BDb3JlLnByb3RvdHlwZS5kcm9wID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5hbGxvd0Ryb3BIZXJlKSB7XG4gICAgICAgICAgICB2YXIgZnJvbUVsZW1lbnQgPSB0aGlzLmRyYWdnZWRFbGVtZW50LnBhcmVudDtcbiAgICAgICAgICAgIHRoaXMub25EcmFnU3RhcnQuZmlyZSh0aGlzLCB7IGZyb21FbGVtZW50OiBmcm9tRWxlbWVudCwgZHJhZ2dlZEVsZW1lbnQ6IHRoaXMuZHJhZ2dlZEVsZW1lbnQgfSk7XG4gICAgICAgICAgICB2YXIgbmV3RWxlbWVudCA9IHRoaXMuZG9Ecm9wKCk7XG4gICAgICAgICAgICB0aGlzLm9uRHJhZ0VuZC5maXJlKHRoaXMsIHsgZnJvbUVsZW1lbnQ6IGZyb21FbGVtZW50LCBkcmFnZ2VkRWxlbWVudDogbmV3RWxlbWVudCwgdG9FbGVtZW50OiB0aGlzLmRyb3BUYXJnZXQgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIERyYWdEcm9wQ29yZS5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuZHJvcFRhcmdldCA9IG51bGw7XG4gICAgICAgIHRoaXMuZHJhZ2dlZEVsZW1lbnQgPSBudWxsO1xuICAgICAgICB0aGlzLmlzQm90dG9tID0gbnVsbDtcbiAgICAgICAgdGhpcy5wYXJlbnRFbGVtZW50ID0gbnVsbDtcbiAgICB9O1xuICAgIHJldHVybiBEcmFnRHJvcENvcmU7XG59KCkpO1xuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvZHJhZ2Ryb3AvZG9tLWFkYXB0ZXIudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvZHJhZ2Ryb3AvZG9tLWFkYXB0ZXIudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogRHJhZ0Ryb3BET01BZGFwdGVyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkRyYWdEcm9wRE9NQWRhcHRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIERyYWdEcm9wRE9NQWRhcHRlcjsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3V0aWxzX3V0aWxzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi91dGlscy91dGlscyAqLyBcIi4vc3JjL3V0aWxzL3V0aWxzLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF91dGlsc19kZXZpY2VzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi91dGlscy9kZXZpY2VzICovIFwiLi9zcmMvdXRpbHMvZGV2aWNlcy50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc2V0dGluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3NldHRpbmdzICovIFwiLi9zcmMvc2V0dGluZ3MudHNcIik7XG5cblxuXG4vLyBXZWJLaXQgcmVxdWlyZXMgY2FuY2VsYWJsZSBgdG91Y2htb3ZlYCBldmVudHMgdG8gYmUgYWRkZWQgYXMgZWFybHkgYXMgcG9zc2libGVcbi8vIHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg0MjUwXG5pZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwidG91Y2htb3ZlXCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICBpZiAoIURyYWdEcm9wRE9NQWRhcHRlci5QcmV2ZW50U2Nyb2xsaW5nKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gUHJldmVudCBzY3JvbGxpbmdcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9LCB7IHBhc3NpdmU6IGZhbHNlIH0pO1xufVxudmFyIERyYWdEcm9wRE9NQWRhcHRlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBEcmFnRHJvcERPTUFkYXB0ZXIoZGQsIGxvbmdUYXApIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgaWYgKGxvbmdUYXAgPT09IHZvaWQgMCkgeyBsb25nVGFwID0gdHJ1ZTsgfVxuICAgICAgICB0aGlzLmRkID0gZGQ7XG4gICAgICAgIHRoaXMubG9uZ1RhcCA9IGxvbmdUYXA7XG4gICAgICAgIHRoaXMuc2Nyb2xsSW50ZXJ2YWxJZCA9IG51bGw7XG4gICAgICAgIHRoaXMuc3RvcExvbmdUYXBJZk1vdmVFbm91Z2ggPSBmdW5jdGlvbiAocG9pbnRlck1vdmVFdmVudCkge1xuICAgICAgICAgICAgcG9pbnRlck1vdmVFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgX3RoaXMuY3VycmVudFggPSBwb2ludGVyTW92ZUV2ZW50LnBhZ2VYO1xuICAgICAgICAgICAgX3RoaXMuY3VycmVudFkgPSBwb2ludGVyTW92ZUV2ZW50LnBhZ2VZO1xuICAgICAgICAgICAgaWYgKF90aGlzLmlzTWljcm9Nb3ZlbWVudClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBfdGhpcy5yZXR1cm5Vc2VyU2VsZWN0QmFjaygpO1xuICAgICAgICAgICAgX3RoaXMuc3RvcExvbmdUYXAoKTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5zdG9wTG9uZ1RhcCA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQoX3RoaXMudGltZW91dElEKTtcbiAgICAgICAgICAgIF90aGlzLnRpbWVvdXRJRCA9IG51bGw7XG4gICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcnVwXCIsIF90aGlzLnN0b3BMb25nVGFwKTtcbiAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybW92ZVwiLCBfdGhpcy5zdG9wTG9uZ1RhcElmTW92ZUVub3VnaCk7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuaGFuZGxlUG9pbnRlckNhbmNlbCA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgX3RoaXMuY2xlYXIoKTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5oYW5kbGVFc2NhcGVCdXR0b24gPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgIGlmIChldmVudC5rZXlDb2RlID09IDI3KSB7XG4gICAgICAgICAgICAgICAgX3RoaXMuY2xlYXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5vbkNvbnRleHRNZW51ID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZHJhZ092ZXIgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgIF90aGlzLm1vdmVTaG9ydGN1dEVsZW1lbnQoZXZlbnQpO1xuICAgICAgICAgICAgX3RoaXMuZHJhZ2dlZEVsZW1lbnRTaG9ydGN1dC5zdHlsZS5jdXJzb3IgPSBcImdyYWJiaW5nXCI7XG4gICAgICAgICAgICBfdGhpcy5kZC5kcmFnT3ZlcihldmVudCk7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuY2xlYXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShfdGhpcy5zY3JvbGxJbnRlcnZhbElkKTtcbiAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybW92ZVwiLCBfdGhpcy5kcmFnT3Zlcik7XG4gICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLCBfdGhpcy5oYW5kbGVQb2ludGVyQ2FuY2VsKTtcbiAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIF90aGlzLmhhbmRsZUVzY2FwZUJ1dHRvbik7XG4gICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcnVwXCIsIF90aGlzLmRyb3ApO1xuICAgICAgICAgICAgX3RoaXMuZHJhZ2dlZEVsZW1lbnRTaG9ydGN1dC5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcnVwXCIsIF90aGlzLmRyb3ApO1xuICAgICAgICAgICAgaWYgKF91dGlsc19kZXZpY2VzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJJc1RvdWNoXCJdKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMuZHJhZ2dlZEVsZW1lbnRTaG9ydGN1dC5yZW1vdmVFdmVudExpc3RlbmVyKFwiY29udGV4dG1lbnVcIiwgX3RoaXMub25Db250ZXh0TWVudSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBfdGhpcy5kcmFnZ2VkRWxlbWVudFNob3J0Y3V0LnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQoX3RoaXMuZHJhZ2dlZEVsZW1lbnRTaG9ydGN1dCk7XG4gICAgICAgICAgICBfdGhpcy5kZC5jbGVhcigpO1xuICAgICAgICAgICAgX3RoaXMuZHJhZ2dlZEVsZW1lbnRTaG9ydGN1dCA9IG51bGw7XG4gICAgICAgICAgICBfdGhpcy5zY3JvbGxJbnRlcnZhbElkID0gbnVsbDtcbiAgICAgICAgICAgIGlmIChfdXRpbHNfZGV2aWNlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiSXNUb3VjaFwiXSkge1xuICAgICAgICAgICAgICAgIF90aGlzLnNhdmVkVGFyZ2V0Tm9kZS5zdHlsZS5jc3NUZXh0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICBfdGhpcy5zYXZlZFRhcmdldE5vZGUgJiYgX3RoaXMuc2F2ZWRUYXJnZXROb2RlLnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQoX3RoaXMuc2F2ZWRUYXJnZXROb2RlKTtcbiAgICAgICAgICAgICAgICBfdGhpcy5zYXZlZFRhcmdldE5vZGVQYXJlbnQuYXBwZW5kQ2hpbGQoX3RoaXMuc2F2ZWRUYXJnZXROb2RlKTtcbiAgICAgICAgICAgICAgICBEcmFnRHJvcERPTUFkYXB0ZXIuUHJldmVudFNjcm9sbGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX3RoaXMuc2F2ZWRUYXJnZXROb2RlID0gbnVsbDtcbiAgICAgICAgICAgIF90aGlzLnNhdmVkVGFyZ2V0Tm9kZVBhcmVudCA9IG51bGw7XG4gICAgICAgICAgICBfdGhpcy5yZXR1cm5Vc2VyU2VsZWN0QmFjaygpO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmRyb3AgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5kZC5kcm9wKCk7XG4gICAgICAgICAgICBfdGhpcy5jbGVhcigpO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmRyYWdnZWRFbGVtZW50U2hvcnRjdXQgPSBudWxsO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRHJhZ0Ryb3BET01BZGFwdGVyLnByb3RvdHlwZSwgXCJyb290RWxlbWVudFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKE9iamVjdChfdXRpbHNfdXRpbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcImlzU2hhZG93RE9NXCJdKShfc2V0dGluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcInNldHRpbmdzXCJdLmVudmlyb25tZW50LnJvb3QpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wic2V0dGluZ3NcIl0uZW52aXJvbm1lbnQucm9vdC5ob3N0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucm9vdENvbnRhaW5lciB8fCBfc2V0dGluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcInNldHRpbmdzXCJdLmVudmlyb25tZW50LnJvb3QuZG9jdW1lbnRFbGVtZW50IHx8IGRvY3VtZW50LmJvZHk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRHJhZ0Ryb3BET01BZGFwdGVyLnByb3RvdHlwZSwgXCJpc01pY3JvTW92ZW1lbnRcIiwge1xuICAgICAgICAvLyBzZWUgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNjA0MjIwMi9ob3ctdG8tZGlzdGluZ3Vpc2gtbW91c2UtY2xpY2stYW5kLWRyYWdcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgZGVsdGEgPSA1O1xuICAgICAgICAgICAgdmFyIGRpZmZYID0gTWF0aC5hYnModGhpcy5jdXJyZW50WCAtIHRoaXMuc3RhcnRYKTtcbiAgICAgICAgICAgIHZhciBkaWZmWSA9IE1hdGguYWJzKHRoaXMuY3VycmVudFkgLSB0aGlzLnN0YXJ0WSk7XG4gICAgICAgICAgICByZXR1cm4gZGlmZlggPCBkZWx0YSAmJiBkaWZmWSA8IGRlbHRhO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgRHJhZ0Ryb3BET01BZGFwdGVyLnByb3RvdHlwZS5zdGFydExvbmdUYXBQcm9jZXNzaW5nID0gZnVuY3Rpb24gKGV2ZW50LCBkcmFnZ2VkRWxlbWVudCwgcGFyZW50RWxlbWVudCwgZHJhZ2dlZEVsZW1lbnROb2RlLCBwcmV2ZW50U2F2ZVRhcmdldE5vZGUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgaWYgKHByZXZlbnRTYXZlVGFyZ2V0Tm9kZSA9PT0gdm9pZCAwKSB7IHByZXZlbnRTYXZlVGFyZ2V0Tm9kZSA9IGZhbHNlOyB9XG4gICAgICAgIHRoaXMuc3RhcnRYID0gZXZlbnQucGFnZVg7XG4gICAgICAgIHRoaXMuc3RhcnRZID0gZXZlbnQucGFnZVk7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuc2V0UHJvcGVydHkoXCJ0b3VjaC1hY3Rpb25cIiwgXCJub25lXCIsIFwiaW1wb3J0YW50XCIpO1xuICAgICAgICAvL2RvY3VtZW50LmJvZHkuc3R5bGUuc2V0UHJvcGVydHkoXCItd2Via2l0LXRvdWNoLWNhbGxvdXRcIiwgXCJub25lXCIsIFwiaW1wb3J0YW50XCIpO1xuICAgICAgICB0aGlzLnRpbWVvdXRJRCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMuZG9TdGFydERyYWcoZXZlbnQsIGRyYWdnZWRFbGVtZW50LCBwYXJlbnRFbGVtZW50LCBkcmFnZ2VkRWxlbWVudE5vZGUpO1xuICAgICAgICAgICAgaWYgKCFwcmV2ZW50U2F2ZVRhcmdldE5vZGUpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5zYXZlZFRhcmdldE5vZGUgPSBldmVudC50YXJnZXQ7XG4gICAgICAgICAgICAgICAgX3RoaXMuc2F2ZWRUYXJnZXROb2RlLnN0eWxlLmNzc1RleHQgPVxuICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgICAgICAgIGhlaWdodDogMXB4IWltcG9ydGFudDtcXG4gICAgICAgICAgd2lkdGg6IDFweCFpbXBvcnRhbnQ7XFxuICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XFxuICAgICAgICAgIGNsaXA6IHJlY3QoMXB4IDFweCAxcHggMXB4KTtcXG4gICAgICAgICAgY2xpcDogcmVjdCgxcHgsIDFweCwgMXB4LCAxcHgpO1xcbiAgICAgICAgXCI7XG4gICAgICAgICAgICAgICAgX3RoaXMuc2F2ZWRUYXJnZXROb2RlUGFyZW50ID0gX3RoaXMuc2F2ZWRUYXJnZXROb2RlLnBhcmVudEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgX3RoaXMucm9vdEVsZW1lbnQuYXBwZW5kQ2hpbGQoX3RoaXMuc2F2ZWRUYXJnZXROb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF90aGlzLnN0b3BMb25nVGFwKCk7XG4gICAgICAgIH0sIHRoaXMubG9uZ1RhcCA/IDUwMCA6IDApO1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcnVwXCIsIHRoaXMuc3RvcExvbmdUYXApO1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcm1vdmVcIiwgdGhpcy5zdG9wTG9uZ1RhcElmTW92ZUVub3VnaCk7XG4gICAgfTtcbiAgICBEcmFnRHJvcERPTUFkYXB0ZXIucHJvdG90eXBlLm1vdmVTaG9ydGN1dEVsZW1lbnQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgdmFyIHJvb3RFbGVtZW50WCA9IHRoaXMucm9vdEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkueDtcbiAgICAgICAgdmFyIHJvb3RFbGVtZW50WSA9IHRoaXMucm9vdEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkueTtcbiAgICAgICAgdGhpcy5kb1Njcm9sbChldmVudC5jbGllbnRZLCBldmVudC5jbGllbnRYKTtcbiAgICAgICAgdmFyIHNob3J0Y3V0SGVpZ2h0ID0gdGhpcy5kcmFnZ2VkRWxlbWVudFNob3J0Y3V0Lm9mZnNldEhlaWdodDtcbiAgICAgICAgdmFyIHNob3J0Y3V0V2lkdGggPSB0aGlzLmRyYWdnZWRFbGVtZW50U2hvcnRjdXQub2Zmc2V0V2lkdGg7XG4gICAgICAgIHZhciBzaG9ydGN1dFhPZmZzZXQgPSB0aGlzLmRyYWdnZWRFbGVtZW50U2hvcnRjdXQuc2hvcnRjdXRYT2Zmc2V0IHx8IHNob3J0Y3V0V2lkdGggLyAyO1xuICAgICAgICB2YXIgc2hvcnRjdXRZT2Zmc2V0ID0gdGhpcy5kcmFnZ2VkRWxlbWVudFNob3J0Y3V0LnNob3J0Y3V0WU9mZnNldCB8fCBzaG9ydGN1dEhlaWdodCAvIDI7XG4gICAgICAgIC8vIFRPRE8gdGhpcyBpcyBob3QgZml4IGZvciBSVEwgc3VwcG9ydC4gUHJvYmFibHkgd2UgbmVlZCBiZXR0ZXIgZ2xvYmFsIHN0cmF0ZWd5IGZvciBpdC4gaHR0cHM6Ly9naXRodWIuY29tL3N1cnZleWpzL3N1cnZleS1saWJyYXJ5L2lzc3Vlcy80NTU0XG4gICAgICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiW2Rpcj0ncnRsJ11cIikubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgICBzaG9ydGN1dFhPZmZzZXQgPSBzaG9ydGN1dFdpZHRoIC8gMjtcbiAgICAgICAgICAgIHNob3J0Y3V0WU9mZnNldCA9IHNob3J0Y3V0SGVpZ2h0IC8gMjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZG9jdW1lbnRCb3R0b20gPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICAgICAgICB2YXIgZG9jdW1lbnRSaWdodCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aDtcbiAgICAgICAgdmFyIHBhZ2VYID0gZXZlbnQucGFnZVg7XG4gICAgICAgIHZhciBwYWdlWSA9IGV2ZW50LnBhZ2VZO1xuICAgICAgICB2YXIgY2xpZW50WCA9IGV2ZW50LmNsaWVudFg7XG4gICAgICAgIHZhciBjbGllbnRZID0gZXZlbnQuY2xpZW50WTtcbiAgICAgICAgdmFyIHNob3J0Y3V0Qm90dG9tQ29vcmRpbmF0ZSA9IHRoaXMuZ2V0U2hvcnRjdXRCb3R0b21Db29yZGluYXRlKGNsaWVudFksIHNob3J0Y3V0SGVpZ2h0LCBzaG9ydGN1dFlPZmZzZXQpO1xuICAgICAgICB2YXIgc2hvcnRjdXRSaWdodENvb3JkaW5hdGUgPSB0aGlzLmdldFNob3J0Y3V0UmlnaHRDb29yZGluYXRlKGNsaWVudFgsIHNob3J0Y3V0V2lkdGgsIHNob3J0Y3V0WE9mZnNldCk7XG4gICAgICAgIGlmIChzaG9ydGN1dFJpZ2h0Q29vcmRpbmF0ZSA+PSBkb2N1bWVudFJpZ2h0KSB7IC8vIHJpZ2h0IGJvdW5kYXJ5XG4gICAgICAgICAgICB0aGlzLmRyYWdnZWRFbGVtZW50U2hvcnRjdXQuc3R5bGUubGVmdCA9XG4gICAgICAgICAgICAgICAgLy8gcGFnZVggLVxuICAgICAgICAgICAgICAgIC8vIGNsaWVudFggK1xuICAgICAgICAgICAgICAgIGRvY3VtZW50UmlnaHQgLVxuICAgICAgICAgICAgICAgICAgICBzaG9ydGN1dFdpZHRoIC1cbiAgICAgICAgICAgICAgICAgICAgcm9vdEVsZW1lbnRYICtcbiAgICAgICAgICAgICAgICAgICAgXCJweFwiO1xuICAgICAgICAgICAgdGhpcy5kcmFnZ2VkRWxlbWVudFNob3J0Y3V0LnN0eWxlLnRvcCA9XG4gICAgICAgICAgICAgICAgLypwYWdlWSovIGNsaWVudFkgLSBzaG9ydGN1dFlPZmZzZXQgLSByb290RWxlbWVudFkgKyBcInB4XCI7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNsaWVudFggLSBzaG9ydGN1dFhPZmZzZXQgPD0gMCkgeyAvLyBsZWZ0IGJvdW5kYXJ5XG4gICAgICAgICAgICB0aGlzLmRyYWdnZWRFbGVtZW50U2hvcnRjdXQuc3R5bGUubGVmdCA9XG4gICAgICAgICAgICAgICAgcGFnZVggLSBjbGllbnRYIC0gcm9vdEVsZW1lbnRYICsgXCJweFwiO1xuICAgICAgICAgICAgdGhpcy5kcmFnZ2VkRWxlbWVudFNob3J0Y3V0LnN0eWxlLnRvcCA9XG4gICAgICAgICAgICAgICAgLypwYWdlWSovIGNsaWVudFkgLSByb290RWxlbWVudFkgLSBzaG9ydGN1dFlPZmZzZXQgKyBcInB4XCI7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNob3J0Y3V0Qm90dG9tQ29vcmRpbmF0ZSA+PSBkb2N1bWVudEJvdHRvbSkgeyAvLyBib3R0b20gYm91bmRhcnlcbiAgICAgICAgICAgIHRoaXMuZHJhZ2dlZEVsZW1lbnRTaG9ydGN1dC5zdHlsZS5sZWZ0ID1cbiAgICAgICAgICAgICAgICAvKnBhZ2VYKi8gY2xpZW50WCAtIHNob3J0Y3V0WE9mZnNldCAtIHJvb3RFbGVtZW50WCArIFwicHhcIjtcbiAgICAgICAgICAgIHRoaXMuZHJhZ2dlZEVsZW1lbnRTaG9ydGN1dC5zdHlsZS50b3AgPVxuICAgICAgICAgICAgICAgIC8vIHBhZ2VZIC1cbiAgICAgICAgICAgICAgICAvLyBjbGllbnRZICtcbiAgICAgICAgICAgICAgICBkb2N1bWVudEJvdHRvbSAtXG4gICAgICAgICAgICAgICAgICAgIHNob3J0Y3V0SGVpZ2h0IC1cbiAgICAgICAgICAgICAgICAgICAgcm9vdEVsZW1lbnRZICtcbiAgICAgICAgICAgICAgICAgICAgXCJweFwiO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjbGllbnRZIC0gc2hvcnRjdXRZT2Zmc2V0IDw9IDApIHsgLy8gdG9wICBib3VuZGFyeVxuICAgICAgICAgICAgdGhpcy5kcmFnZ2VkRWxlbWVudFNob3J0Y3V0LnN0eWxlLmxlZnQgPVxuICAgICAgICAgICAgICAgIGNsaWVudFggLSBzaG9ydGN1dFhPZmZzZXQgLSByb290RWxlbWVudFggKyBcInB4XCI7XG4gICAgICAgICAgICB0aGlzLmRyYWdnZWRFbGVtZW50U2hvcnRjdXQuc3R5bGUudG9wID1cbiAgICAgICAgICAgICAgICBwYWdlWSAtIGNsaWVudFkgLSByb290RWxlbWVudFkgKyBcInB4XCI7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kcmFnZ2VkRWxlbWVudFNob3J0Y3V0LnN0eWxlLmxlZnQgPVxuICAgICAgICAgICAgY2xpZW50WCAtIHJvb3RFbGVtZW50WCAtIHNob3J0Y3V0WE9mZnNldCArIFwicHhcIjtcbiAgICAgICAgdGhpcy5kcmFnZ2VkRWxlbWVudFNob3J0Y3V0LnN0eWxlLnRvcCA9XG4gICAgICAgICAgICBjbGllbnRZIC0gcm9vdEVsZW1lbnRZIC0gc2hvcnRjdXRZT2Zmc2V0ICsgXCJweFwiO1xuICAgIH07XG4gICAgRHJhZ0Ryb3BET01BZGFwdGVyLnByb3RvdHlwZS5nZXRTaG9ydGN1dEJvdHRvbUNvb3JkaW5hdGUgPSBmdW5jdGlvbiAoY3VycmVudFksIHNob3J0Y3V0SGVpZ2h0LCBzaG9ydGN1dFlPZmZzZXQpIHtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRZICsgc2hvcnRjdXRIZWlnaHQgLSBzaG9ydGN1dFlPZmZzZXQ7XG4gICAgfTtcbiAgICBEcmFnRHJvcERPTUFkYXB0ZXIucHJvdG90eXBlLmdldFNob3J0Y3V0UmlnaHRDb29yZGluYXRlID0gZnVuY3Rpb24gKGN1cnJlbnRYLCBzaG9ydGN1dFdpZHRoLCBzaG9ydGN1dFhPZmZzZXQpIHtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRYICsgc2hvcnRjdXRXaWR0aCAtIHNob3J0Y3V0WE9mZnNldDtcbiAgICB9O1xuICAgIERyYWdEcm9wRE9NQWRhcHRlci5wcm90b3R5cGUuZG9TY3JvbGwgPSBmdW5jdGlvbiAoY2xpZW50WSwgY2xpZW50WCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLnNjcm9sbEludGVydmFsSWQpO1xuICAgICAgICB2YXIgc3RhcnRTY3JvbGxCb3VuZGFyeSA9IDEwMDtcbiAgICAgICAgdmFyIGRpc3BsYXlQcm9wID0gdGhpcy5kcmFnZ2VkRWxlbWVudFNob3J0Y3V0LnN0eWxlLmRpc3BsYXk7XG4gICAgICAgIC8vdGhpcy5kcmFnZ2VkRWxlbWVudFNob3J0Y3V0LmhpZGRlbiA9IHRydWU7XG4gICAgICAgIHRoaXMuZHJhZ2dlZEVsZW1lbnRTaG9ydGN1dC5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG4gICAgICAgIHZhciBkcmFnT3Zlck5vZGUgPSBkb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KGNsaWVudFgsIGNsaWVudFkpO1xuICAgICAgICAvL3RoaXMuZHJhZ2dlZEVsZW1lbnRTaG9ydGN1dC5oaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5kcmFnZ2VkRWxlbWVudFNob3J0Y3V0LnN0eWxlLmRpc3BsYXkgPSBkaXNwbGF5UHJvcCB8fCBcImJsb2NrXCI7XG4gICAgICAgIHZhciBzY3JvbGxhYmxlUGFyZW50Tm9kZSA9IE9iamVjdChfdXRpbHNfdXRpbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcImZpbmRTY3JvbGxhYmxlUGFyZW50XCJdKShkcmFnT3Zlck5vZGUpO1xuICAgICAgICB2YXIgdG9wO1xuICAgICAgICB2YXIgYm90dG9tO1xuICAgICAgICB2YXIgbGVmdDtcbiAgICAgICAgdmFyIHJpZ2h0O1xuICAgICAgICBpZiAoc2Nyb2xsYWJsZVBhcmVudE5vZGUudGFnTmFtZSA9PT0gXCJIVE1MXCIpIHtcbiAgICAgICAgICAgIHRvcCA9IDA7XG4gICAgICAgICAgICBib3R0b20gPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICAgICAgICAgICAgbGVmdCA9IDA7XG4gICAgICAgICAgICByaWdodCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRvcCA9IHNjcm9sbGFibGVQYXJlbnROb2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtcbiAgICAgICAgICAgIGJvdHRvbSA9IHNjcm9sbGFibGVQYXJlbnROb2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbTtcbiAgICAgICAgICAgIGxlZnQgPSBzY3JvbGxhYmxlUGFyZW50Tm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0O1xuICAgICAgICAgICAgcmlnaHQgPSBzY3JvbGxhYmxlUGFyZW50Tm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5yaWdodDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcmVwZWF0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKGNsaWVudFkgLSB0b3AgPD0gc3RhcnRTY3JvbGxCb3VuZGFyeSkge1xuICAgICAgICAgICAgICAgIHNjcm9sbGFibGVQYXJlbnROb2RlLnNjcm9sbFRvcCAtPSAxNTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGJvdHRvbSAtIGNsaWVudFkgPD0gc3RhcnRTY3JvbGxCb3VuZGFyeSkge1xuICAgICAgICAgICAgICAgIHNjcm9sbGFibGVQYXJlbnROb2RlLnNjcm9sbFRvcCArPSAxNTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHJpZ2h0IC0gY2xpZW50WCA8PSBzdGFydFNjcm9sbEJvdW5kYXJ5KSB7XG4gICAgICAgICAgICAgICAgc2Nyb2xsYWJsZVBhcmVudE5vZGUuc2Nyb2xsTGVmdCArPSAxNTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNsaWVudFggLSBsZWZ0IDw9IHN0YXJ0U2Nyb2xsQm91bmRhcnkpIHtcbiAgICAgICAgICAgICAgICBzY3JvbGxhYmxlUGFyZW50Tm9kZS5zY3JvbGxMZWZ0IC09IDE1O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX3RoaXMuc2Nyb2xsSW50ZXJ2YWxJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShyZXBlYXQpO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLnNjcm9sbEludGVydmFsSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUocmVwZWF0KTtcbiAgICB9O1xuICAgIERyYWdEcm9wRE9NQWRhcHRlci5wcm90b3R5cGUuZG9TdGFydERyYWcgPSBmdW5jdGlvbiAoZXZlbnQsIGRyYWdnZWRFbGVtZW50LCBwYXJlbnRFbGVtZW50LCBkcmFnZ2VkRWxlbWVudE5vZGUpIHtcbiAgICAgICAgaWYgKF91dGlsc19kZXZpY2VzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJJc1RvdWNoXCJdKSB7XG4gICAgICAgICAgICBEcmFnRHJvcERPTUFkYXB0ZXIuUHJldmVudFNjcm9sbGluZyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LndoaWNoID09PSAzKVxuICAgICAgICAgICAgcmV0dXJuOyAvL3JpZ2h0IG1vdXNlIGJ0blxuICAgICAgICB0aGlzLmRkLmRyYWdJbml0KGV2ZW50LCBkcmFnZ2VkRWxlbWVudCwgcGFyZW50RWxlbWVudCwgZHJhZ2dlZEVsZW1lbnROb2RlKTtcbiAgICAgICAgdGhpcy5yb290RWxlbWVudC5hcHBlbmQodGhpcy5kcmFnZ2VkRWxlbWVudFNob3J0Y3V0KTtcbiAgICAgICAgdGhpcy5tb3ZlU2hvcnRjdXRFbGVtZW50KGV2ZW50KTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJtb3ZlXCIsIHRoaXMuZHJhZ092ZXIpO1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLCB0aGlzLmhhbmRsZVBvaW50ZXJDYW5jZWwpO1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCB0aGlzLmhhbmRsZUVzY2FwZUJ1dHRvbik7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVydXBcIiwgdGhpcy5kcm9wKTtcbiAgICAgICAgaWYgKCFfdXRpbHNfZGV2aWNlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiSXNUb3VjaFwiXSkge1xuICAgICAgICAgICAgdGhpcy5kcmFnZ2VkRWxlbWVudFNob3J0Y3V0LmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVydXBcIiwgdGhpcy5kcm9wKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZHJhZ2dlZEVsZW1lbnRTaG9ydGN1dC5hZGRFdmVudExpc3RlbmVyKFwiY29udGV4dG1lbnVcIiwgdGhpcy5vbkNvbnRleHRNZW51KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgRHJhZ0Ryb3BET01BZGFwdGVyLnByb3RvdHlwZS5yZXR1cm5Vc2VyU2VsZWN0QmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5zZXRQcm9wZXJ0eShcInRvdWNoLWFjdGlvblwiLCBcImF1dG9cIik7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuc2V0UHJvcGVydHkoXCJ1c2VyLXNlbGVjdFwiLCBcImF1dG9cIik7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuc2V0UHJvcGVydHkoXCItd2Via2l0LXVzZXItc2VsZWN0XCIsIFwiYXV0b1wiKTtcbiAgICAgICAgLy9kb2N1bWVudC5ib2R5LnN0eWxlLnNldFByb3BlcnR5KFwiLXdlYmtpdC10b3VjaC1jYWxsb3V0XCIsIFwiZGVmYXVsdFwiKTtcbiAgICB9O1xuICAgIERyYWdEcm9wRE9NQWRhcHRlci5wcm90b3R5cGUuc3RhcnREcmFnID0gZnVuY3Rpb24gKGV2ZW50LCBkcmFnZ2VkRWxlbWVudCwgcGFyZW50RWxlbWVudCwgZHJhZ2dlZEVsZW1lbnROb2RlLCBwcmV2ZW50U2F2ZVRhcmdldE5vZGUpIHtcbiAgICAgICAgaWYgKHByZXZlbnRTYXZlVGFyZ2V0Tm9kZSA9PT0gdm9pZCAwKSB7IHByZXZlbnRTYXZlVGFyZ2V0Tm9kZSA9IGZhbHNlOyB9XG4gICAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuc2V0UHJvcGVydHkoXCJ1c2VyLXNlbGVjdFwiLCBcIm5vbmVcIiwgXCJpbXBvcnRhbnRcIik7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuc2V0UHJvcGVydHkoXCItd2Via2l0LXVzZXItc2VsZWN0XCIsIFwibm9uZVwiLCBcImltcG9ydGFudFwiKTtcbiAgICAgICAgaWYgKF91dGlsc19kZXZpY2VzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJJc1RvdWNoXCJdKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0TG9uZ1RhcFByb2Nlc3NpbmcoZXZlbnQsIGRyYWdnZWRFbGVtZW50LCBwYXJlbnRFbGVtZW50LCBkcmFnZ2VkRWxlbWVudE5vZGUsIHByZXZlbnRTYXZlVGFyZ2V0Tm9kZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kb1N0YXJ0RHJhZyhldmVudCwgZHJhZ2dlZEVsZW1lbnQsIHBhcmVudEVsZW1lbnQsIGRyYWdnZWRFbGVtZW50Tm9kZSk7XG4gICAgfTtcbiAgICBEcmFnRHJvcERPTUFkYXB0ZXIuUHJldmVudFNjcm9sbGluZyA9IGZhbHNlO1xuICAgIHJldHVybiBEcmFnRHJvcERPTUFkYXB0ZXI7XG59KCkpO1xuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvZHJhZ2Ryb3AvbWF0cml4LXJvd3MudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvZHJhZ2Ryb3AvbWF0cml4LXJvd3MudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogRHJhZ0Ryb3BNYXRyaXhSb3dzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkRyYWdEcm9wTWF0cml4Um93c1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIERyYWdEcm9wTWF0cml4Um93czsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vY29yZSAqLyBcIi4vc3JjL2RyYWdkcm9wL2NvcmUudHNcIik7XG52YXIgX19leHRlbmRzID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcblxudmFyIERyYWdEcm9wTWF0cml4Um93cyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoRHJhZ0Ryb3BNYXRyaXhSb3dzLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIERyYWdEcm9wTWF0cml4Um93cygpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmZyb21JbmRleCA9IG51bGw7XG4gICAgICAgIF90aGlzLnRvSW5kZXggPSBudWxsO1xuICAgICAgICBfdGhpcy5kb0Ryb3AgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5wYXJlbnRFbGVtZW50Lm1vdmVSb3dCeUluZGV4KF90aGlzLmZyb21JbmRleCwgX3RoaXMudG9JbmRleCk7XG4gICAgICAgICAgICByZXR1cm4gX3RoaXMucGFyZW50RWxlbWVudDtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRHJhZ0Ryb3BNYXRyaXhSb3dzLnByb3RvdHlwZSwgXCJkcmFnZ2VkRWxlbWVudFR5cGVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBcIm1hdHJpeC1yb3dcIjtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIERyYWdEcm9wTWF0cml4Um93cy5wcm90b3R5cGUub25TdGFydERyYWcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMucmVzdG9yZVVzZXJTZWxlY3RWYWx1ZSA9IGRvY3VtZW50LmJvZHkuc3R5bGUudXNlclNlbGVjdDtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS51c2VyU2VsZWN0ID0gXCJub25lXCI7XG4gICAgfTtcbiAgICBEcmFnRHJvcE1hdHJpeFJvd3MucHJvdG90eXBlLmNyZWF0ZURyYWdnZWRFbGVtZW50U2hvcnRjdXQgPSBmdW5jdGlvbiAodGV4dCwgZHJhZ2dlZEVsZW1lbnROb2RlLCBldmVudCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgZHJhZ2dlZEVsZW1lbnRTaG9ydGN1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgIC8vIGRyYWdnZWRFbGVtZW50U2hvcnRjdXQuaW5uZXJUZXh0ID0gdGV4dDtcbiAgICAgICAgZHJhZ2dlZEVsZW1lbnRTaG9ydGN1dC5zdHlsZS5jc3NUZXh0ID0gXCIgXFxuICAgICAgICAgIGN1cnNvcjogZ3JhYmJpbmc7XFxuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgICAgICAgei1pbmRleDogMTAwMDA7XFxuICAgICAgICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWZhbWlseSwgJ09wZW4gU2FucycpO1xcbiAgICAgICAgXCI7XG4gICAgICAgIHZhciBpc0RlZXBDbG9uZSA9IHRydWU7XG4gICAgICAgIGlmICghIWRyYWdnZWRFbGVtZW50Tm9kZSkge1xuICAgICAgICAgICAgdmFyIHJvdyA9IChkcmFnZ2VkRWxlbWVudE5vZGVcbiAgICAgICAgICAgICAgICAuY2xvc2VzdChcIltkYXRhLXN2LWRyb3AtdGFyZ2V0LW1hdHJpeC1yb3ddXCIpKTtcbiAgICAgICAgICAgIHZhciBjbG9uZSA9IChyb3cuY2xvbmVOb2RlKGlzRGVlcENsb25lKSk7XG4gICAgICAgICAgICBjbG9uZS5zdHlsZS5jc3NUZXh0ID0gXCJcXG4gICAgICAgIGJveC1zaGFkb3c6IHZhcigtLXNqcy1zaGFkb3ctbGFyZ2UsIDBweCA4cHggMTZweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEpKSwgdmFyKC0tc2pzLXNoYWRvdy1tZWRpdW0sIDBweCAycHggNnB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMSkpO1xcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tc2pzLWdlbmVyYWwtYmFja2NvbG9yLCB2YXIoLS1iYWNrZ3JvdW5kLCAjZmZmKSk7XFxuICAgICAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICAgICAgZmxleC1ncm93OiAwO1xcbiAgICAgICAgZmxleC1zaHJpbms6IDA7XFxuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICAgICAgbGluZS1oZWlnaHQ6IDA7XFxuICAgICAgICB3aWR0aDogXCIgKyByb3cub2Zmc2V0V2lkdGggKyBcInB4O1xcbiAgICAgIFwiO1xuICAgICAgICAgICAgY2xvbmUuY2xhc3NMaXN0LnJlbW92ZShcInN2LW1hdHJpeF9fZHJhZy1kcm9wLS1tb3ZldXBcIik7XG4gICAgICAgICAgICBjbG9uZS5jbGFzc0xpc3QucmVtb3ZlKFwic3YtbWF0cml4X19kcmFnLWRyb3AtLW1vdmVkb3duXCIpO1xuICAgICAgICAgICAgdGhpcy5kcmFnZ2VkRWxlbWVudC5pc0RyYWdEcm9wTW92ZURvd24gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZHJhZ2dlZEVsZW1lbnQuaXNEcmFnRHJvcE1vdmVVcCA9IGZhbHNlO1xuICAgICAgICAgICAgZHJhZ2dlZEVsZW1lbnRTaG9ydGN1dC5hcHBlbmRDaGlsZChjbG9uZSk7XG4gICAgICAgICAgICB2YXIgcmVjdCA9IGRyYWdnZWRFbGVtZW50Tm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgIGRyYWdnZWRFbGVtZW50U2hvcnRjdXQuc2hvcnRjdXRYT2Zmc2V0ID0gZXZlbnQuY2xpZW50WCAtIHJlY3QueDtcbiAgICAgICAgICAgIGRyYWdnZWRFbGVtZW50U2hvcnRjdXQuc2hvcnRjdXRZT2Zmc2V0ID0gZXZlbnQuY2xpZW50WSAtIHJlY3QueTtcbiAgICAgICAgfVxuICAgICAgICAvL3RoaXMuaXNCb3R0b20gPSBudWxsO1xuICAgICAgICB2YXIgcmVuZGVyZWRSb3dzID0gdGhpcy5wYXJlbnRFbGVtZW50LnJlbmRlcmVkVGFibGUucm93cztcbiAgICAgICAgcmVuZGVyZWRSb3dzLmZvckVhY2goZnVuY3Rpb24gKHJlbmRlcmVkUm93LCBpbmRleCkge1xuICAgICAgICAgICAgaWYgKHJlbmRlcmVkUm93LnJvdyA9PT0gX3RoaXMuZHJhZ2dlZEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICByZW5kZXJlZFJvdy5pc0dob3N0Um93ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZnJvbUluZGV4ID0gdGhpcy5wYXJlbnRFbGVtZW50LnZpc2libGVSb3dzLmluZGV4T2YodGhpcy5kcmFnZ2VkRWxlbWVudCk7XG4gICAgICAgIHJldHVybiBkcmFnZ2VkRWxlbWVudFNob3J0Y3V0O1xuICAgIH07XG4gICAgLy8gcHJvdGVjdGVkIGdob3N0UG9zaXRpb25DaGFuZ2VkKCk6IHZvaWQge1xuICAgIC8vICAgbGV0IGdob3N0UG9zaXRpb247XG4gICAgLy8gICB0aGlzLnBhcmVudEVsZW1lbnQucmVuZGVyZWRUYWJsZS5yb3dzLmZvckVhY2goXG4gICAgLy8gICAgIChyZW5kZXJlZFJvdzogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkUm93KSA9PiB7XG4gICAgLy8gICAgICAgZ2hvc3RQb3NpdGlvbiA9IHRoaXMuZ2V0R2hvc3RQb3NpdGlvbihcbiAgICAvLyAgICAgICAgIHJlbmRlcmVkUm93LnJvd1xuICAgIC8vICAgICAgICk7XG4gICAgLy8gICAgICAgcmVuZGVyZWRSb3cuaXNHaG9zdFJvdyA9ICFnaG9zdFBvc2l0aW9uO1xuICAgIC8vICAgICB9XG4gICAgLy8gICApO1xuICAgIC8vICAgc3VwZXIuZ2hvc3RQb3NpdGlvbkNoYW5nZWQoKTtcbiAgICAvLyB9XG4gICAgRHJhZ0Ryb3BNYXRyaXhSb3dzLnByb3RvdHlwZS5nZXREcm9wVGFyZ2V0QnlEYXRhQXR0cmlidXRlVmFsdWUgPSBmdW5jdGlvbiAoZGF0YUF0dHJpYnV0ZVZhbHVlKSB7XG4gICAgICAgIHZhciBtYXRyaXggPSB0aGlzLnBhcmVudEVsZW1lbnQ7XG4gICAgICAgIHZhciBkcm9wVGFyZ2V0UmVuZGVyZWRSb3c7XG4gICAgICAgIGRyb3BUYXJnZXRSZW5kZXJlZFJvdyA9IG1hdHJpeC5yZW5kZXJlZFRhYmxlLnJvd3MuZmlsdGVyKGZ1bmN0aW9uIChyZW5kZXJlZFJvdykgeyByZXR1cm4gcmVuZGVyZWRSb3cucm93ICYmIHJlbmRlcmVkUm93LnJvdy5pZCA9PT0gZGF0YUF0dHJpYnV0ZVZhbHVlOyB9KVswXTtcbiAgICAgICAgcmV0dXJuIGRyb3BUYXJnZXRSZW5kZXJlZFJvdy5yb3c7XG4gICAgfTtcbiAgICBEcmFnRHJvcE1hdHJpeFJvd3MucHJvdG90eXBlLmlzRHJvcFRhcmdldFZhbGlkID0gZnVuY3Rpb24gKGRyb3BUYXJnZXQsIGRyb3BUYXJnZXROb2RlKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG4gICAgRHJhZ0Ryb3BNYXRyaXhSb3dzLnByb3RvdHlwZS5jYWxjdWxhdGVJc0JvdHRvbSA9IGZ1bmN0aW9uIChjbGllbnRZKSB7XG4gICAgICAgIHZhciByZW5kcmVyZWRSb3dzID0gdGhpcy5wYXJlbnRFbGVtZW50LnJlbmRlcmVkVGFibGUucm93cztcbiAgICAgICAgdmFyIHJvd3MgPSByZW5kcmVyZWRSb3dzLm1hcChmdW5jdGlvbiAocmVuZHJlZFJvdykgeyByZXR1cm4gcmVuZHJlZFJvdy5yb3c7IH0pO1xuICAgICAgICByZXR1cm4gKHJvd3MuaW5kZXhPZih0aGlzLmRyb3BUYXJnZXQpIC0gcm93cy5pbmRleE9mKHRoaXMuZHJhZ2dlZEVsZW1lbnQpID4gMCk7XG4gICAgfTtcbiAgICBEcmFnRHJvcE1hdHJpeFJvd3MucHJvdG90eXBlLmFmdGVyRHJhZ092ZXIgPSBmdW5jdGlvbiAoZHJvcFRhcmdldE5vZGUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgaWYgKHRoaXMuaXNEcm9wVGFyZ2V0RG9lc250Q2hhbmdlZCh0aGlzLmlzQm90dG9tKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKHRoaXMuZHJvcFRhcmdldCA9PT0gdGhpcy5kcmFnZ2VkRWxlbWVudClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIGRyb3BUYXJnZXRJbmRleDtcbiAgICAgICAgdmFyIGRyYWdnZWRFbGVtZW50SW5kZXg7XG4gICAgICAgIHZhciBkcmFnZ2VkUmVuZGVyZWRSb3c7XG4gICAgICAgIHZhciByZW5kZXJlZFJvd3MgPSB0aGlzLnBhcmVudEVsZW1lbnQucmVuZGVyZWRUYWJsZS5yb3dzO1xuICAgICAgICByZW5kZXJlZFJvd3MuZm9yRWFjaChmdW5jdGlvbiAocmVuZGVyZWRSb3csIGluZGV4KSB7XG4gICAgICAgICAgICBpZiAocmVuZGVyZWRSb3cucm93ID09PSBfdGhpcy5kcm9wVGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgLy8gcmVuZGVyZWRSb3cuaXNHaG9zdFJvdyA9IHRydWU7XG4gICAgICAgICAgICAgICAgZHJvcFRhcmdldEluZGV4ID0gaW5kZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVuZGVyZWRSb3cucm93ID09PSBfdGhpcy5kcmFnZ2VkRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGRyYWdnZWRSZW5kZXJlZFJvdyA9IHJlbmRlcmVkUm93O1xuICAgICAgICAgICAgICAgIGRyYWdnZWRFbGVtZW50SW5kZXggPSBpbmRleDtcbiAgICAgICAgICAgICAgICBkcmFnZ2VkUmVuZGVyZWRSb3cuaXNHaG9zdFJvdyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZW5kZXJlZFJvd3Muc3BsaWNlKGRyYWdnZWRFbGVtZW50SW5kZXgsIDEpO1xuICAgICAgICByZW5kZXJlZFJvd3Muc3BsaWNlKGRyb3BUYXJnZXRJbmRleCwgMCwgZHJhZ2dlZFJlbmRlcmVkUm93KTtcbiAgICAgICAgdGhpcy50b0luZGV4ID0gdGhpcy5wYXJlbnRFbGVtZW50LnZpc2libGVSb3dzLmluZGV4T2YodGhpcy5kcm9wVGFyZ2V0KTtcbiAgICAgICAgLy8gY29uc3QgbWF0cml4ID0gdGhpcy5wYXJlbnRFbGVtZW50O1xuICAgICAgICAvLyBjb25zdCBmcm9tSW5kZXggPSBtYXRyaXgudmlzaWJsZVJvd3MuaW5kZXhPZih0aGlzLmRyYWdnZWRFbGVtZW50KTtcbiAgICAgICAgLy8gY29uc3QgdG9JbmRleCA9IG1hdHJpeC52aXNpYmxlUm93cy5pbmRleE9mKHRoaXMuZHJvcFRhcmdldCk7XG4gICAgICAgIC8vIG1hdHJpeC5tb3ZlUm93QnlJbmRleChmcm9tSW5kZXgsIHRvSW5kZXgpO1xuICAgICAgICAvLyBpZiAoZHJhZ2dlZEVsZW1lbnRJbmRleCAhPT0gZHJvcFRhcmdldEluZGV4KSB7XG4gICAgICAgIC8vICAgZHJvcFRhcmdldE5vZGUuY2xhc3NMaXN0LnJlbW92ZShcInN2LW1hdHJpeF9fZHJhZy1kcm9wLS1tb3ZldXBcIik7XG4gICAgICAgIC8vICAgZHJvcFRhcmdldE5vZGUuY2xhc3NMaXN0LnJlbW92ZShcInN2LW1hdHJpeF9fZHJhZy1kcm9wLS1tb3ZlZG93blwiKTtcbiAgICAgICAgLy8gICB0aGlzLmRyb3BUYXJnZXQuaXNEcmFnRHJvcE1vdmVEb3duID0gZmFsc2U7XG4gICAgICAgIC8vICAgdGhpcy5kcm9wVGFyZ2V0LmlzRHJhZ0Ryb3BNb3ZlVXAgPSBmYWxzZTtcbiAgICAgICAgLy8gfVxuICAgICAgICAvLyBpZiAoZHJhZ2dlZEVsZW1lbnRJbmRleCA+IGRyb3BUYXJnZXRJbmRleCkge1xuICAgICAgICAvLyAgIHRoaXMuZHJvcFRhcmdldC5pc0RyYWdEcm9wTW92ZURvd24gPSB0cnVlO1xuICAgICAgICAvLyB9XG4gICAgICAgIC8vIGlmIChkcmFnZ2VkRWxlbWVudEluZGV4IDwgZHJvcFRhcmdldEluZGV4KSB7XG4gICAgICAgIC8vICAgdGhpcy5kcm9wVGFyZ2V0LmlzRHJhZ0Ryb3BNb3ZlVXAgPSB0cnVlO1xuICAgICAgICAvLyB9XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUuZ2hvc3RQb3NpdGlvbkNoYW5nZWQuY2FsbCh0aGlzKTtcbiAgICB9O1xuICAgIERyYWdEcm9wTWF0cml4Um93cy5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciByZW5kZXJlZFJvd3MgPSB0aGlzLnBhcmVudEVsZW1lbnQucmVuZGVyZWRUYWJsZS5yb3dzO1xuICAgICAgICByZW5kZXJlZFJvd3MuZm9yRWFjaChmdW5jdGlvbiAocmVuZGVyZWRSb3cpIHtcbiAgICAgICAgICAgIHJlbmRlcmVkUm93LmlzR2hvc3RSb3cgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucGFyZW50RWxlbWVudC5jbGVhck9uRHJvcCgpO1xuICAgICAgICB0aGlzLmZyb21JbmRleCA9IG51bGw7XG4gICAgICAgIHRoaXMudG9JbmRleCA9IG51bGw7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUudXNlclNlbGVjdCA9IHRoaXMucmVzdG9yZVVzZXJTZWxlY3RWYWx1ZSB8fCBcImluaXRpYWxcIjtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5jbGVhci5jYWxsKHRoaXMpO1xuICAgIH07XG4gICAgcmV0dXJuIERyYWdEcm9wTWF0cml4Um93cztcbn0oX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkRyYWdEcm9wQ29yZVwiXSkpO1xuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvZHJhZ2Ryb3AvcmFua2luZy1jaG9pY2VzLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9kcmFnZHJvcC9yYW5raW5nLWNob2ljZXMudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IERyYWdEcm9wUmFua2luZ0Nob2ljZXMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiRHJhZ0Ryb3BSYW5raW5nQ2hvaWNlc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIERyYWdEcm9wUmFua2luZ0Nob2ljZXM7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9jaG9pY2VzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2Nob2ljZXMgKi8gXCIuL3NyYy9kcmFnZHJvcC9jaG9pY2VzLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF91dGlsc19jc3NDbGFzc0J1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3V0aWxzL2Nzc0NsYXNzQnVpbGRlciAqLyBcIi4vc3JjL3V0aWxzL2Nzc0NsYXNzQnVpbGRlci50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdXRpbHNfZGV2aWNlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vdXRpbHMvZGV2aWNlcyAqLyBcIi4vc3JjL3V0aWxzL2RldmljZXMudHNcIik7XG52YXIgX19leHRlbmRzID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcblxuXG5cbnZhciBEcmFnRHJvcFJhbmtpbmdDaG9pY2VzID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhEcmFnRHJvcFJhbmtpbmdDaG9pY2VzLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIERyYWdEcm9wUmFua2luZ0Nob2ljZXMoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5pc0RyYWdPdmVyUm9vdE5vZGUgPSBmYWxzZTtcbiAgICAgICAgX3RoaXMuZG9EcmFnT3ZlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBub2RlID0gX3RoaXMuZG9tQWRhcHRlci5kcmFnZ2VkRWxlbWVudFNob3J0Y3V0LnF1ZXJ5U2VsZWN0b3IoXCIuc3YtcmFua2luZy1pdGVtXCIpO1xuICAgICAgICAgICAgbm9kZS5zdHlsZS5jdXJzb3IgPSBcImdyYWJiaW5nXCI7XG4gICAgICAgIH07XG4gICAgICAgIF90aGlzLmRvQmFuRHJvcEhlcmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoX3RoaXMuaXNEcmFnT3ZlclJvb3ROb2RlKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMuYWxsb3dEcm9wSGVyZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIG5vZGUgPSBfdGhpcy5kb21BZGFwdGVyLmRyYWdnZWRFbGVtZW50U2hvcnRjdXQucXVlcnlTZWxlY3RvcihcIi5zdi1yYW5raW5nLWl0ZW1cIik7XG4gICAgICAgICAgICBub2RlLnN0eWxlLmN1cnNvciA9IFwibm90LWFsbG93ZWRcIjtcbiAgICAgICAgfTtcbiAgICAgICAgX3RoaXMuZG9Ecm9wID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMucGFyZW50RWxlbWVudC5zZXRWYWx1ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIF90aGlzLnBhcmVudEVsZW1lbnQ7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KERyYWdEcm9wUmFua2luZ0Nob2ljZXMucHJvdG90eXBlLCBcImRyYWdnZWRFbGVtZW50VHlwZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIFwicmFua2luZy1pdGVtXCI7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBEcmFnRHJvcFJhbmtpbmdDaG9pY2VzLnByb3RvdHlwZS5jcmVhdGVEcmFnZ2VkRWxlbWVudFNob3J0Y3V0ID0gZnVuY3Rpb24gKHRleHQsIGRyYWdnZWRFbGVtZW50Tm9kZSwgZXZlbnQpIHtcbiAgICAgICAgdmFyIGRyYWdnZWRFbGVtZW50U2hvcnRjdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICBkcmFnZ2VkRWxlbWVudFNob3J0Y3V0LmNsYXNzTmFtZSA9IHRoaXMuc2hvcnRjdXRDbGFzcyArIFwiIHN2LXJhbmtpbmctc2hvcnRjdXRcIjtcbiAgICAgICAgZHJhZ2dlZEVsZW1lbnRTaG9ydGN1dC5zdHlsZS5jc3NUZXh0ID0gXCIgXFxuICAgICAgICAgIGN1cnNvcjogZ3JhYmJpbmc7XFxuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgICAgICAgei1pbmRleDogMTAwMDA7XFxuICAgICAgICAgIGJvcmRlci1yYWRpdXM6IGNhbGMoMTIuNSAqIHZhcigtLXNqcy1iYXNlLXVuaXQsIHZhcigtLWJhc2UtdW5pdCwgOHB4KSkpO1xcbiAgICAgICAgICBtaW4td2lkdGg6IDEwMHB4O1xcbiAgICAgICAgICBib3gtc2hhZG93OiB2YXIoLS1zanMtc2hhZG93LW1lZGl1bSwgMHB4IDJweCA2cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xKSksIHZhcigtLXNqcy1zaGFkb3ctbGFyZ2UsIDBweCA4cHggMTZweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEpKTtcXG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tc2pzLWdlbmVyYWwtYmFja2NvbG9yLCB2YXIoLS1iYWNrZ3JvdW5kLCAjZmZmKSk7XFxuICAgICAgICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWZhbWlseSwgJ09wZW4gU2FucycpO1xcbiAgICAgICAgXCI7XG4gICAgICAgIHZhciBpc0RlZXBDbG9uZSA9IHRydWU7XG4gICAgICAgIHZhciBjbG9uZSA9IGRyYWdnZWRFbGVtZW50Tm9kZS5jbG9uZU5vZGUoaXNEZWVwQ2xvbmUpO1xuICAgICAgICBkcmFnZ2VkRWxlbWVudFNob3J0Y3V0LmFwcGVuZENoaWxkKGNsb25lKTtcbiAgICAgICAgdmFyIHJlY3QgPSBkcmFnZ2VkRWxlbWVudE5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGRyYWdnZWRFbGVtZW50U2hvcnRjdXQuc2hvcnRjdXRYT2Zmc2V0ID0gZXZlbnQuY2xpZW50WCAtIHJlY3QueDtcbiAgICAgICAgZHJhZ2dlZEVsZW1lbnRTaG9ydGN1dC5zaG9ydGN1dFlPZmZzZXQgPSBldmVudC5jbGllbnRZIC0gcmVjdC55O1xuICAgICAgICBpZiAodGhpcy5wYXJlbnRFbGVtZW50ICYmIHRoaXMucGFyZW50RWxlbWVudC51c2VGdWxsSXRlbVNpemVGb3JTaG9ydGN1dCkge1xuICAgICAgICAgICAgZHJhZ2dlZEVsZW1lbnRTaG9ydGN1dC5zdHlsZS53aWR0aCA9IGRyYWdnZWRFbGVtZW50Tm9kZS5vZmZzZXRXaWR0aCArIFwicHhcIjtcbiAgICAgICAgICAgIGRyYWdnZWRFbGVtZW50U2hvcnRjdXQuc3R5bGUuaGVpZ2h0ID0gZHJhZ2dlZEVsZW1lbnROb2RlLm9mZnNldEhlaWdodCArIFwicHhcIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZHJhZ2dlZEVsZW1lbnRTaG9ydGN1dDtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShEcmFnRHJvcFJhbmtpbmdDaG9pY2VzLnByb3RvdHlwZSwgXCJzaG9ydGN1dENsYXNzXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IF91dGlsc19jc3NDbGFzc0J1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIkNzc0NsYXNzQnVpbGRlclwiXSgpXG4gICAgICAgICAgICAgICAgLmFwcGVuZCh0aGlzLnBhcmVudEVsZW1lbnQuY3NzQ2xhc3Nlcy5yb290KVxuICAgICAgICAgICAgICAgIC5hcHBlbmQodGhpcy5wYXJlbnRFbGVtZW50LmNzc0NsYXNzZXMucm9vdE1vYmlsZU1vZCwgX3V0aWxzX2RldmljZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIklzTW9iaWxlXCJdKVxuICAgICAgICAgICAgICAgIC50b1N0cmluZygpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgRHJhZ0Ryb3BSYW5raW5nQ2hvaWNlcy5wcm90b3R5cGUuZ2V0RHJvcFRhcmdldEJ5RGF0YUF0dHJpYnV0ZVZhbHVlID0gZnVuY3Rpb24gKGRhdGFBdHRyaWJ1dGVWYWx1ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnRFbGVtZW50LnJhbmtpbmdDaG9pY2VzW2RhdGFBdHRyaWJ1dGVWYWx1ZV07XG4gICAgfTtcbiAgICBEcmFnRHJvcFJhbmtpbmdDaG9pY2VzLnByb3RvdHlwZS5maW5kRHJvcFRhcmdldE5vZGVCeURyYWdPdmVyTm9kZSA9IGZ1bmN0aW9uIChkcmFnT3Zlck5vZGUpIHtcbiAgICAgICAgdGhpcy5pc0RyYWdPdmVyUm9vdE5vZGUgPSB0aGlzLmdldElzRHJhZ092ZXJSb290Tm9kZShkcmFnT3Zlck5vZGUpO1xuICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5maW5kRHJvcFRhcmdldE5vZGVCeURyYWdPdmVyTm9kZS5jYWxsKHRoaXMsIGRyYWdPdmVyTm9kZSk7XG4gICAgfTtcbiAgICBEcmFnRHJvcFJhbmtpbmdDaG9pY2VzLnByb3RvdHlwZS5nZXRJc0RyYWdPdmVyUm9vdE5vZGUgPSBmdW5jdGlvbiAoZHJhZ092ZXJOb2RlKSB7XG4gICAgICAgIC8vIGRyYWdPdmVyTm9kZSBtaWdodCBiZSA8cGF0aD48L3BhdGg+IGZvciBleGFtcGxlIGFuZCB0aGUgY2xhc3NOYW1lIHByb3AgaXMgb2JqXG4gICAgICAgIHJldHVybiB0eXBlb2YgZHJhZ092ZXJOb2RlLmNsYXNzTmFtZSA9PT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICAgICAgZHJhZ092ZXJOb2RlLmNsYXNzTmFtZS5pbmRleE9mKFwic3YtcmFua2luZ1wiKSAhPT0gLTE7XG4gICAgfTtcbiAgICBEcmFnRHJvcFJhbmtpbmdDaG9pY2VzLnByb3RvdHlwZS5pc0Ryb3BUYXJnZXRWYWxpZCA9IGZ1bmN0aW9uIChkcm9wVGFyZ2V0LCBkcm9wVGFyZ2V0Tm9kZSkge1xuICAgICAgICB2YXIgY2hvaWNlcyA9IHRoaXMucGFyZW50RWxlbWVudC5yYW5raW5nQ2hvaWNlcztcbiAgICAgICAgdmFyIGRyb3BUYXJnZXRJbmRleCA9IGNob2ljZXMuaW5kZXhPZih0aGlzLmRyb3BUYXJnZXQpO1xuICAgICAgICB2YXIgZHJhZ2dlZEVsZW1lbnRJbmRleCA9IGNob2ljZXMuaW5kZXhPZih0aGlzLmRyYWdnZWRFbGVtZW50KTtcbiAgICAgICAgaWYgKGRyYWdnZWRFbGVtZW50SW5kZXggPiBkcm9wVGFyZ2V0SW5kZXggJiYgZHJvcFRhcmdldE5vZGUuY2xhc3NMaXN0LmNvbnRhaW5zKFwic3YtZHJhZ2Ryb3AtbW92ZXVwXCIpKSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudEVsZW1lbnQuZHJvcFRhcmdldE5vZGVNb3ZlID0gbnVsbDtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZHJhZ2dlZEVsZW1lbnRJbmRleCA8IGRyb3BUYXJnZXRJbmRleCAmJiBkcm9wVGFyZ2V0Tm9kZS5jbGFzc0xpc3QuY29udGFpbnMoXCJzdi1kcmFnZHJvcC1tb3ZlZG93blwiKSkge1xuICAgICAgICAgICAgdGhpcy5wYXJlbnRFbGVtZW50LmRyb3BUYXJnZXROb2RlTW92ZSA9IG51bGw7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNob2ljZXMuaW5kZXhPZihkcm9wVGFyZ2V0KSA9PT0gLTEpXG4gICAgICAgICAgICAvLyBzaG91bGRuJ3QgYWxsb3cgdG8gZHJvcCBvbiBcImFkb3JuZXJzXCIgKHNlbGVjdGFsbCwgbm9uZSwgb3RoZXIpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG4gICAgRHJhZ0Ryb3BSYW5raW5nQ2hvaWNlcy5wcm90b3R5cGUuY2FsY3VsYXRlSXNCb3R0b20gPSBmdW5jdGlvbiAoY2xpZW50WSkge1xuICAgICAgICB2YXIgY2hvaWNlcyA9IHRoaXMucGFyZW50RWxlbWVudC5yYW5raW5nQ2hvaWNlcztcbiAgICAgICAgcmV0dXJuIChjaG9pY2VzLmluZGV4T2YodGhpcy5kcm9wVGFyZ2V0KSAtIGNob2ljZXMuaW5kZXhPZih0aGlzLmRyYWdnZWRFbGVtZW50KSA+XG4gICAgICAgICAgICAwKTtcbiAgICB9O1xuICAgIERyYWdEcm9wUmFua2luZ0Nob2ljZXMucHJvdG90eXBlLmFmdGVyRHJhZ092ZXIgPSBmdW5jdGlvbiAoZHJvcFRhcmdldE5vZGUpIHtcbiAgICAgICAgdmFyIGNob2ljZXMgPSB0aGlzLnBhcmVudEVsZW1lbnQucmFua2luZ0Nob2ljZXM7XG4gICAgICAgIHZhciBkcm9wVGFyZ2V0SW5kZXggPSBjaG9pY2VzLmluZGV4T2YodGhpcy5kcm9wVGFyZ2V0KTtcbiAgICAgICAgdmFyIGRyYWdnZWRFbGVtZW50SW5kZXggPSBjaG9pY2VzLmluZGV4T2YodGhpcy5kcmFnZ2VkRWxlbWVudCk7XG4gICAgICAgIGNob2ljZXMuc3BsaWNlKGRyYWdnZWRFbGVtZW50SW5kZXgsIDEpO1xuICAgICAgICBjaG9pY2VzLnNwbGljZShkcm9wVGFyZ2V0SW5kZXgsIDAsIHRoaXMuZHJhZ2dlZEVsZW1lbnQpO1xuICAgICAgICB0aGlzLnBhcmVudEVsZW1lbnQuc2V0UHJvcGVydHlWYWx1ZShcInJhbmtpbmdDaG9pY2VzXCIsIGNob2ljZXMpO1xuICAgICAgICAvL3JldHVybjtcbiAgICAgICAgdGhpcy51cGRhdGVEcmFnZ2VkRWxlbWVudFNob3J0Y3V0KGRyb3BUYXJnZXRJbmRleCArIDEpO1xuICAgICAgICBpZiAoZHJhZ2dlZEVsZW1lbnRJbmRleCAhPT0gZHJvcFRhcmdldEluZGV4KSB7XG4gICAgICAgICAgICBkcm9wVGFyZ2V0Tm9kZS5jbGFzc0xpc3QucmVtb3ZlKFwic3YtZHJhZ2Ryb3AtbW92ZXVwXCIpO1xuICAgICAgICAgICAgZHJvcFRhcmdldE5vZGUuY2xhc3NMaXN0LnJlbW92ZShcInN2LWRyYWdkcm9wLW1vdmVkb3duXCIpO1xuICAgICAgICAgICAgdGhpcy5wYXJlbnRFbGVtZW50LmRyb3BUYXJnZXROb2RlTW92ZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRyYWdnZWRFbGVtZW50SW5kZXggPiBkcm9wVGFyZ2V0SW5kZXgpIHtcbiAgICAgICAgICAgIHRoaXMucGFyZW50RWxlbWVudC5kcm9wVGFyZ2V0Tm9kZU1vdmUgPSBcImRvd25cIjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZHJhZ2dlZEVsZW1lbnRJbmRleCA8IGRyb3BUYXJnZXRJbmRleCkge1xuICAgICAgICAgICAgdGhpcy5wYXJlbnRFbGVtZW50LmRyb3BUYXJnZXROb2RlTW92ZSA9IFwidXBcIjtcbiAgICAgICAgfVxuICAgIH07XG4gICAgRHJhZ0Ryb3BSYW5raW5nQ2hvaWNlcy5wcm90b3R5cGUudXBkYXRlRHJhZ2dlZEVsZW1lbnRTaG9ydGN1dCA9IGZ1bmN0aW9uIChuZXdJbmRleCkge1xuICAgICAgICB2YXIgbmV3SW5kZXhUZXh0ID0gbmV3SW5kZXggIT09IG51bGwgPyBuZXdJbmRleCArIFwiXCIgOiBcIlwiO1xuICAgICAgICAvLyBUT0RPIHNob3VsZCBhdm9pZCBkaXJlY3QgRE9NIG1hbmlwdWxhdGlvbiwgZG8gdGhyb3VnaCB0aGUgZnJhbWV3b3JrcyBpbnN0ZWFkXG4gICAgICAgIHZhciBpbmRleE5vZGUgPSB0aGlzLmRvbUFkYXB0ZXIuZHJhZ2dlZEVsZW1lbnRTaG9ydGN1dC5xdWVyeVNlbGVjdG9yKFwiLnN2LXJhbmtpbmctaXRlbV9faW5kZXhcIik7XG4gICAgICAgIGluZGV4Tm9kZS5pbm5lclRleHQgPSBuZXdJbmRleFRleHQ7XG4gICAgfTtcbiAgICBEcmFnRHJvcFJhbmtpbmdDaG9pY2VzLnByb3RvdHlwZS5naG9zdFBvc2l0aW9uQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5wYXJlbnRFbGVtZW50LmN1cnJlbnREcm9wVGFyZ2V0ID0gdGhpcy5kcmFnZ2VkRWxlbWVudDtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5naG9zdFBvc2l0aW9uQ2hhbmdlZC5jYWxsKHRoaXMpO1xuICAgIH07XG4gICAgRHJhZ0Ryb3BSYW5raW5nQ2hvaWNlcy5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghIXRoaXMucGFyZW50RWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5wYXJlbnRFbGVtZW50LmRyb3BUYXJnZXROb2RlTW92ZSA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnBhcmVudEVsZW1lbnQudXBkYXRlUmFua2luZ0Nob2ljZXModHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5jbGVhci5jYWxsKHRoaXMpO1xuICAgIH07XG4gICAgcmV0dXJuIERyYWdEcm9wUmFua2luZ0Nob2ljZXM7XG59KF9jaG9pY2VzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJEcmFnRHJvcENob2ljZXNcIl0pKTtcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL2RyYWdkcm9wL3Jhbmtpbmctc2VsZWN0LXRvLXJhbmsudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9kcmFnZHJvcC9yYW5raW5nLXNlbGVjdC10by1yYW5rLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogRHJhZ0Ryb3BSYW5raW5nU2VsZWN0VG9SYW5rICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkRyYWdEcm9wUmFua2luZ1NlbGVjdFRvUmFua1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIERyYWdEcm9wUmFua2luZ1NlbGVjdFRvUmFuazsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3JhbmtpbmdfY2hvaWNlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9yYW5raW5nLWNob2ljZXMgKi8gXCIuL3NyYy9kcmFnZHJvcC9yYW5raW5nLWNob2ljZXMudHNcIik7XG52YXIgX19leHRlbmRzID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcblxudmFyIERyYWdEcm9wUmFua2luZ1NlbGVjdFRvUmFuayA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoRHJhZ0Ryb3BSYW5raW5nU2VsZWN0VG9SYW5rLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIERyYWdEcm9wUmFua2luZ1NlbGVjdFRvUmFuaygpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIH1cbiAgICBEcmFnRHJvcFJhbmtpbmdTZWxlY3RUb1JhbmsucHJvdG90eXBlLm9uU3RhcnREcmFnID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHZhciB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG4gICAgICAgIHZhciBmcm9tQ29udGFpbmVyTm9kZSA9IHRhcmdldC5jbG9zZXN0KFwiLnN2LXJhbmtpbmdfX2NvbnRhaW5lci0tZnJvbVwiKTtcbiAgICAgICAgaWYgKCEhZnJvbUNvbnRhaW5lck5vZGUpIHtcbiAgICAgICAgICAgIGZyb21Db250YWluZXJOb2RlLnN0eWxlLm1pbkhlaWdodCA9IGZyb21Db250YWluZXJOb2RlLm9mZnNldEhlaWdodCArIFwicHhcIjtcbiAgICAgICAgfVxuICAgIH07XG4gICAgRHJhZ0Ryb3BSYW5raW5nU2VsZWN0VG9SYW5rLnByb3RvdHlwZS5maW5kRHJvcFRhcmdldE5vZGVCeURyYWdPdmVyTm9kZSA9IGZ1bmN0aW9uIChkcmFnT3Zlck5vZGUpIHtcbiAgICAgICAgaWYgKGRyYWdPdmVyTm9kZS5kYXRhc2V0LnJhbmtpbmcgPT09IFwiZnJvbS1jb250YWluZXJcIiB8fCBkcmFnT3Zlck5vZGUuZGF0YXNldC5yYW5raW5nID09PSBcInRvLWNvbnRhaW5lclwiKSB7XG4gICAgICAgICAgICByZXR1cm4gZHJhZ092ZXJOb2RlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnBhcmVudEVsZW1lbnQuaXNFbXB0eSgpKSB7XG4gICAgICAgICAgICB2YXIgdG9Db250YWluZXIgPSBkcmFnT3Zlck5vZGUuY2xvc2VzdChcIltkYXRhLXJhbmtpbmc9J3RvLWNvbnRhaW5lciddXCIpO1xuICAgICAgICAgICAgdmFyIGZyb21Db250YWluZXIgPSBkcmFnT3Zlck5vZGUuY2xvc2VzdChcIltkYXRhLXJhbmtpbmc9J2Zyb20tY29udGFpbmVyJ11cIik7XG4gICAgICAgICAgICBpZiAoISF0b0NvbnRhaW5lcilcbiAgICAgICAgICAgICAgICByZXR1cm4gdG9Db250YWluZXI7XG4gICAgICAgICAgICBpZiAoISFmcm9tQ29udGFpbmVyKVxuICAgICAgICAgICAgICAgIHJldHVybiBmcm9tQ29udGFpbmVyO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUuZmluZERyb3BUYXJnZXROb2RlQnlEcmFnT3Zlck5vZGUuY2FsbCh0aGlzLCBkcmFnT3Zlck5vZGUpO1xuICAgIH07XG4gICAgRHJhZ0Ryb3BSYW5raW5nU2VsZWN0VG9SYW5rLnByb3RvdHlwZS5nZXREcm9wVGFyZ2V0QnlEYXRhQXR0cmlidXRlVmFsdWUgPSBmdW5jdGlvbiAoZGF0YUF0dHJpYnV0ZVZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudEVsZW1lbnQucmFua2luZ0Nob2ljZXNbZGF0YUF0dHJpYnV0ZVZhbHVlXSB8fCB0aGlzLnBhcmVudEVsZW1lbnQudW5SYW5raW5nQ2hvaWNlc1tkYXRhQXR0cmlidXRlVmFsdWVdO1xuICAgIH07XG4gICAgRHJhZ0Ryb3BSYW5raW5nU2VsZWN0VG9SYW5rLnByb3RvdHlwZS5nZXREcm9wVGFyZ2V0QnlOb2RlID0gZnVuY3Rpb24gKGRyb3BUYXJnZXROb2RlLCBldmVudCkge1xuICAgICAgICBpZiAoZHJvcFRhcmdldE5vZGUuZGF0YXNldC5yYW5raW5nID09PSBcInRvLWNvbnRhaW5lclwiKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJ0by1jb250YWluZXJcIjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZHJvcFRhcmdldE5vZGUuZGF0YXNldC5yYW5raW5nID09PSBcImZyb20tY29udGFpbmVyXCIgfHwgZHJvcFRhcmdldE5vZGUuY2xvc2VzdChcIltkYXRhLXJhbmtpbmc9J2Zyb20tY29udGFpbmVyJ11cIikpIHtcbiAgICAgICAgICAgIHJldHVybiBcImZyb20tY29udGFpbmVyXCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUuZ2V0RHJvcFRhcmdldEJ5Tm9kZS5jYWxsKHRoaXMsIGRyb3BUYXJnZXROb2RlLCBldmVudCk7XG4gICAgfTtcbiAgICBEcmFnRHJvcFJhbmtpbmdTZWxlY3RUb1JhbmsucHJvdG90eXBlLmlzRHJvcFRhcmdldFZhbGlkID0gZnVuY3Rpb24gKGRyb3BUYXJnZXQsIGRyb3BUYXJnZXROb2RlKSB7XG4gICAgICAgIGlmIChkcm9wVGFyZ2V0ID09PSBcInRvLWNvbnRhaW5lclwiIHx8IGRyb3BUYXJnZXQgPT09IFwiZnJvbS1jb250YWluZXJcIikge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5pc0Ryb3BUYXJnZXRWYWxpZC5jYWxsKHRoaXMsIGRyb3BUYXJnZXQsIGRyb3BUYXJnZXROb2RlKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgRHJhZ0Ryb3BSYW5raW5nU2VsZWN0VG9SYW5rLnByb3RvdHlwZS5hZnRlckRyYWdPdmVyID0gZnVuY3Rpb24gKGRyb3BUYXJnZXROb2RlKSB7XG4gICAgICAgIHZhciBxdWVzdGlvbk1vZGVsID0gdGhpcy5wYXJlbnRFbGVtZW50O1xuICAgICAgICB2YXIgcmFua2luZ0Nob2ljZXMgPSBxdWVzdGlvbk1vZGVsLnJhbmtpbmdDaG9pY2VzO1xuICAgICAgICB2YXIgdW5SYW5raW5nQ2hvaWNlcyA9IHF1ZXN0aW9uTW9kZWwudW5SYW5raW5nQ2hvaWNlcztcbiAgICAgICAgaWYgKHRoaXMuaXNEcmFnZ2VkRWxlbWVudFVucmFua2VkICYmIHRoaXMuaXNEcm9wVGFyZ2V0UmFua2VkKSB7XG4gICAgICAgICAgICB0aGlzLmRvUmFua0JldHdlZW4oZHJvcFRhcmdldE5vZGUsIHVuUmFua2luZ0Nob2ljZXMsIHJhbmtpbmdDaG9pY2VzLCB0aGlzLnNlbGVjdFRvUmFuayk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXNEcmFnZ2VkRWxlbWVudFJhbmtlZCAmJiB0aGlzLmlzRHJvcFRhcmdldFJhbmtlZCkge1xuICAgICAgICAgICAgdGhpcy5kb1JhbmtCZXR3ZWVuKGRyb3BUYXJnZXROb2RlLCByYW5raW5nQ2hvaWNlcywgcmFua2luZ0Nob2ljZXMsIHRoaXMucmVvcmRlclJhbmtlZEl0ZW0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzRHJhZ2dlZEVsZW1lbnRSYW5rZWQgJiYgIXRoaXMuaXNEcm9wVGFyZ2V0UmFua2VkKSB7XG4gICAgICAgICAgICB0aGlzLmRvUmFua0JldHdlZW4oZHJvcFRhcmdldE5vZGUsIHJhbmtpbmdDaG9pY2VzLCB1blJhbmtpbmdDaG9pY2VzLCB0aGlzLnVuc2VsZWN0RnJvbVJhbmspO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBEcmFnRHJvcFJhbmtpbmdTZWxlY3RUb1JhbmsucHJvdG90eXBlLmRvUmFua0JldHdlZW4gPSBmdW5jdGlvbiAoZHJvcFRhcmdldE5vZGUsIGZyb21DaG9pY2VzQXJyYXksIHRvQ2hvaWNlc0FycmF5LCByYW5rRnVuY3Rpb24pIHtcbiAgICAgICAgdmFyIHF1ZXN0aW9uTW9kZWwgPSB0aGlzLnBhcmVudEVsZW1lbnQ7XG4gICAgICAgIHZhciBmcm9tSW5kZXggPSBmcm9tQ2hvaWNlc0FycmF5LmluZGV4T2YodGhpcy5kcmFnZ2VkRWxlbWVudCk7XG4gICAgICAgIHZhciB0b0luZGV4ID0gdG9DaG9pY2VzQXJyYXkuaW5kZXhPZih0aGlzLmRyb3BUYXJnZXQpO1xuICAgICAgICBpZiAodG9JbmRleCA9PT0gLTEpXG4gICAgICAgICAgICB0b0luZGV4ID0gdG9DaG9pY2VzQXJyYXkubGVuZ3RoO1xuICAgICAgICByYW5rRnVuY3Rpb24ocXVlc3Rpb25Nb2RlbCwgZnJvbUluZGV4LCB0b0luZGV4KTtcbiAgICAgICAgdGhpcy5kb1VJRWZmZWN0cyhkcm9wVGFyZ2V0Tm9kZSwgZnJvbUluZGV4LCB0b0luZGV4KTtcbiAgICB9O1xuICAgIERyYWdEcm9wUmFua2luZ1NlbGVjdFRvUmFuay5wcm90b3R5cGUuZG9VSUVmZmVjdHMgPSBmdW5jdGlvbiAoZHJvcFRhcmdldE5vZGUsIGZyb21JbmRleCwgdG9JbmRleCkge1xuICAgICAgICB2YXIgcXVlc3Rpb25Nb2RlbCA9IHRoaXMucGFyZW50RWxlbWVudDtcbiAgICAgICAgdmFyIGlzRHJvcFRvRW1wdHlSYW5rZWRDb250YWluZXIgPSB0aGlzLmRyb3BUYXJnZXQgPT09IFwidG8tY29udGFpbmVyXCIgJiYgcXVlc3Rpb25Nb2RlbC5pc0VtcHR5KCk7XG4gICAgICAgIHZhciBpc05lZWRUb1Nob3dJbmRleEF0U2hvcnRjdXQgPSAhdGhpcy5pc0Ryb3BUYXJnZXRVbnJhbmtlZCB8fCBpc0Ryb3BUb0VtcHR5UmFua2VkQ29udGFpbmVyO1xuICAgICAgICB2YXIgc2hvcnRjdXRJbmRleCA9IGlzTmVlZFRvU2hvd0luZGV4QXRTaG9ydGN1dCA/IHRvSW5kZXggKyAxIDogbnVsbDtcbiAgICAgICAgdGhpcy51cGRhdGVEcmFnZ2VkRWxlbWVudFNob3J0Y3V0KHNob3J0Y3V0SW5kZXgpO1xuICAgICAgICBpZiAoZnJvbUluZGV4ICE9PSB0b0luZGV4KSB7XG4gICAgICAgICAgICBkcm9wVGFyZ2V0Tm9kZS5jbGFzc0xpc3QucmVtb3ZlKFwic3YtZHJhZ2Ryb3AtbW92ZXVwXCIpO1xuICAgICAgICAgICAgZHJvcFRhcmdldE5vZGUuY2xhc3NMaXN0LnJlbW92ZShcInN2LWRyYWdkcm9wLW1vdmVkb3duXCIpO1xuICAgICAgICAgICAgcXVlc3Rpb25Nb2RlbC5kcm9wVGFyZ2V0Tm9kZU1vdmUgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmcm9tSW5kZXggPiB0b0luZGV4KSB7XG4gICAgICAgICAgICBxdWVzdGlvbk1vZGVsLmRyb3BUYXJnZXROb2RlTW92ZSA9IFwiZG93blwiO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmcm9tSW5kZXggPCB0b0luZGV4KSB7XG4gICAgICAgICAgICBxdWVzdGlvbk1vZGVsLmRyb3BUYXJnZXROb2RlTW92ZSA9IFwidXBcIjtcbiAgICAgICAgfVxuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KERyYWdEcm9wUmFua2luZ1NlbGVjdFRvUmFuay5wcm90b3R5cGUsIFwiaXNEcmFnZ2VkRWxlbWVudFJhbmtlZFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50RWxlbWVudC5yYW5raW5nQ2hvaWNlcy5pbmRleE9mKHRoaXMuZHJhZ2dlZEVsZW1lbnQpICE9PSAtMTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShEcmFnRHJvcFJhbmtpbmdTZWxlY3RUb1JhbmsucHJvdG90eXBlLCBcImlzRHJvcFRhcmdldFJhbmtlZFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZHJvcFRhcmdldCA9PT0gXCJ0by1jb250YWluZXJcIilcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcmVudEVsZW1lbnQucmFua2luZ0Nob2ljZXMuaW5kZXhPZih0aGlzLmRyb3BUYXJnZXQpICE9PSAtMTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShEcmFnRHJvcFJhbmtpbmdTZWxlY3RUb1JhbmsucHJvdG90eXBlLCBcImlzRHJhZ2dlZEVsZW1lbnRVbnJhbmtlZFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuICF0aGlzLmlzRHJhZ2dlZEVsZW1lbnRSYW5rZWQ7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRHJhZ0Ryb3BSYW5raW5nU2VsZWN0VG9SYW5rLnByb3RvdHlwZSwgXCJpc0Ryb3BUYXJnZXRVbnJhbmtlZFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuICF0aGlzLmlzRHJvcFRhcmdldFJhbmtlZDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIERyYWdEcm9wUmFua2luZ1NlbGVjdFRvUmFuay5wcm90b3R5cGUuc2VsZWN0VG9SYW5rID0gZnVuY3Rpb24gKHF1ZXN0aW9uTW9kZWwsIGZyb21JbmRleCwgdG9JbmRleCkge1xuICAgICAgICB2YXIgcmFua2luZ0Nob2ljZXMgPSBxdWVzdGlvbk1vZGVsLnJhbmtpbmdDaG9pY2VzO1xuICAgICAgICB2YXIgdW5SYW5raW5nQ2hvaWNlcyA9IHF1ZXN0aW9uTW9kZWwudW5SYW5raW5nQ2hvaWNlcztcbiAgICAgICAgdmFyIGl0ZW0gPSB1blJhbmtpbmdDaG9pY2VzW2Zyb21JbmRleF07XG4gICAgICAgIHJhbmtpbmdDaG9pY2VzLnNwbGljZSh0b0luZGV4LCAwLCBpdGVtKTtcbiAgICAgICAgcXVlc3Rpb25Nb2RlbC5zZXRQcm9wZXJ0eVZhbHVlKFwicmFua2luZ0Nob2ljZXNcIiwgcmFua2luZ0Nob2ljZXMpO1xuICAgIH07XG4gICAgRHJhZ0Ryb3BSYW5raW5nU2VsZWN0VG9SYW5rLnByb3RvdHlwZS51bnNlbGVjdEZyb21SYW5rID0gZnVuY3Rpb24gKHF1ZXN0aW9uTW9kZWwsIGZyb21JbmRleCwgdG9JbmRleCkge1xuICAgICAgICB2YXIgcmFua2luZ0Nob2ljZXMgPSBxdWVzdGlvbk1vZGVsLnJhbmtpbmdDaG9pY2VzO1xuICAgICAgICByYW5raW5nQ2hvaWNlcy5zcGxpY2UoZnJvbUluZGV4LCAxKTtcbiAgICAgICAgcXVlc3Rpb25Nb2RlbC5zZXRQcm9wZXJ0eVZhbHVlKFwicmFua2luZ0Nob2ljZXNcIiwgcmFua2luZ0Nob2ljZXMpO1xuICAgIH07XG4gICAgRHJhZ0Ryb3BSYW5raW5nU2VsZWN0VG9SYW5rLnByb3RvdHlwZS5yZW9yZGVyUmFua2VkSXRlbSA9IGZ1bmN0aW9uIChxdWVzdGlvbk1vZGVsLCBmcm9tSW5kZXgsIHRvSW5kZXgpIHtcbiAgICAgICAgdmFyIHJhbmtpbmdDaG9pY2VzID0gcXVlc3Rpb25Nb2RlbC5yYW5raW5nQ2hvaWNlcztcbiAgICAgICAgdmFyIGl0ZW0gPSByYW5raW5nQ2hvaWNlc1tmcm9tSW5kZXhdO1xuICAgICAgICByYW5raW5nQ2hvaWNlcy5zcGxpY2UoZnJvbUluZGV4LCAxKTtcbiAgICAgICAgcmFua2luZ0Nob2ljZXMuc3BsaWNlKHRvSW5kZXgsIDAsIGl0ZW0pO1xuICAgICAgICBxdWVzdGlvbk1vZGVsLnNldFByb3BlcnR5VmFsdWUoXCJyYW5raW5nQ2hvaWNlc1wiLCByYW5raW5nQ2hvaWNlcyk7XG4gICAgfTtcbiAgICByZXR1cm4gRHJhZ0Ryb3BSYW5raW5nU2VsZWN0VG9SYW5rO1xufShfcmFua2luZ19jaG9pY2VzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJEcmFnRHJvcFJhbmtpbmdDaG9pY2VzXCJdKSk7XG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9kcm9wZG93bkxpc3RNb2RlbC50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9kcm9wZG93bkxpc3RNb2RlbC50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBEcm9wZG93bkxpc3RNb2RlbCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJEcm9wZG93bkxpc3RNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIERyb3Bkb3duTGlzdE1vZGVsOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYmFzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9iYXNlICovIFwiLi9zcmMvYmFzZS50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfaXRlbXZhbHVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2l0ZW12YWx1ZSAqLyBcIi4vc3JjL2l0ZW12YWx1ZS50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9qc29ub2JqZWN0ICovIFwiLi9zcmMvanNvbm9iamVjdC50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbGlzdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9saXN0ICovIFwiLi9zcmMvbGlzdC50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcG9wdXBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcG9wdXAgKi8gXCIuL3NyYy9wb3B1cC50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcXVlc3Rpb25fZHJvcGRvd25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcXVlc3Rpb25fZHJvcGRvd24gKi8gXCIuL3NyYy9xdWVzdGlvbl9kcm9wZG93bi50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdXRpbHNfY3NzQ2xhc3NCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3V0aWxzL2Nzc0NsYXNzQnVpbGRlciAqLyBcIi4vc3JjL3V0aWxzL2Nzc0NsYXNzQnVpbGRlci50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdXRpbHNfZGV2aWNlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi91dGlscy9kZXZpY2VzICovIFwiLi9zcmMvdXRpbHMvZGV2aWNlcy50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdXRpbHNfdXRpbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vdXRpbHMvdXRpbHMgKi8gXCIuL3NyYy91dGlscy91dGlscy50c1wiKTtcbnZhciBfX2V4dGVuZHMgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xudmFyIF9fZGVjb3JhdGUgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufTtcblxuXG5cblxuXG5cblxuXG5cbnZhciBEcm9wZG93bkxpc3RNb2RlbCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoRHJvcGRvd25MaXN0TW9kZWwsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gRHJvcGRvd25MaXN0TW9kZWwocXVlc3Rpb24sIG9uU2VsZWN0aW9uQ2hhbmdlZCkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5xdWVzdGlvbiA9IHF1ZXN0aW9uO1xuICAgICAgICBfdGhpcy5vblNlbGVjdGlvbkNoYW5nZWQgPSBvblNlbGVjdGlvbkNoYW5nZWQ7XG4gICAgICAgIF90aGlzLm1pblBhZ2VTaXplID0gMjU7XG4gICAgICAgIF90aGlzLmxvYWRpbmdJdGVtSGVpZ2h0ID0gNDA7XG4gICAgICAgIF90aGlzLl9tYXJrZG93bk1vZGUgPSBmYWxzZTtcbiAgICAgICAgX3RoaXMuc2VsZWN0ZWRJdGVtU2VsZWN0b3IgPSBcIi5zdi1saXN0X19pdGVtLS1zZWxlY3RlZFwiO1xuICAgICAgICBfdGhpcy5pdGVtU2VsZWN0b3IgPSBcIi5zdi1saXN0X19pdGVtXCI7XG4gICAgICAgIF90aGlzLml0ZW1zU2V0dGluZ3MgPSB7IHNraXA6IDAsIHRha2U6IDAsIHRvdGFsQ291bnQ6IDAsIGl0ZW1zOiBbXSB9O1xuICAgICAgICBfdGhpcy5pc1J1bm5pbmdMb2FkUXVlc3Rpb25DaG9pY2VzID0gZmFsc2U7XG4gICAgICAgIF90aGlzLnBvcHVwQ3NzQ2xhc3NlcyA9IFwic3Ytc2luZ2xlLXNlbGVjdC1saXN0XCI7XG4gICAgICAgIF90aGlzLmxpc3RNb2RlbEZpbHRlclN0cmluZ0NoYW5nZWQgPSBmdW5jdGlvbiAobmV3VmFsdWUpIHtcbiAgICAgICAgICAgIGlmIChfdGhpcy5maWx0ZXJTdHJpbmcgIT09IG5ld1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMuZmlsdGVyU3RyaW5nID0gbmV3VmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIF90aGlzLnF1c3Rpb25Qcm9wZXJ0eUNoYW5nZWRIYW5kbGVyID0gZnVuY3Rpb24gKHNlbmRlciwgb3B0aW9ucykge1xuICAgICAgICAgICAgX3RoaXMub25Qcm9wZXJ0eUNoYW5nZWRIYW5kbGVyKHNlbmRlciwgb3B0aW9ucyk7XG4gICAgICAgIH07XG4gICAgICAgIHF1ZXN0aW9uLm9uUHJvcGVydHlDaGFuZ2VkLmFkZChfdGhpcy5xdXN0aW9uUHJvcGVydHlDaGFuZ2VkSGFuZGxlcik7XG4gICAgICAgIF90aGlzLnNob3dJbnB1dEZpZWxkQ29tcG9uZW50ID0gX3RoaXMucXVlc3Rpb24uc2hvd0lucHV0RmllbGRDb21wb25lbnQ7XG4gICAgICAgIF90aGlzLmxpc3RNb2RlbCA9IF90aGlzLmNyZWF0ZUxpc3RNb2RlbCgpO1xuICAgICAgICBfdGhpcy51cGRhdGVBZnRlckxpc3RNb2RlbENyZWF0ZWQoX3RoaXMubGlzdE1vZGVsKTtcbiAgICAgICAgX3RoaXMuc2V0U2VhcmNoRW5hYmxlZChfdGhpcy5xdWVzdGlvbi5zZWFyY2hFbmFibGVkKTtcbiAgICAgICAgX3RoaXMuY3JlYXRlUG9wdXAoKTtcbiAgICAgICAgX3RoaXMucmVzZXRJdGVtc1NldHRpbmdzKCk7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KERyb3Bkb3duTGlzdE1vZGVsLnByb3RvdHlwZSwgXCJmb2N1c0ZpcnN0SW5wdXRTZWxlY3RvclwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Rm9jdXNGaXJzdElucHV0U2VsZWN0b3IoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIERyb3Bkb3duTGlzdE1vZGVsLnByb3RvdHlwZS5nZXRGb2N1c0ZpcnN0SW5wdXRTZWxlY3RvciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKF91dGlsc19kZXZpY2VzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bXCJJc1RvdWNoXCJdKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbHVlRW1wdHkodGhpcy5xdWVzdGlvbi52YWx1ZSkgPyB0aGlzLml0ZW1TZWxlY3RvciA6IHRoaXMuc2VsZWN0ZWRJdGVtU2VsZWN0b3I7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gKCF0aGlzLmxpc3RNb2RlbC5zaG93RmlsdGVyICYmICEhdGhpcy5xdWVzdGlvbi52YWx1ZSkgPyB0aGlzLnNlbGVjdGVkSXRlbVNlbGVjdG9yIDogXCJcIjtcbiAgICAgICAgfVxuICAgIH07XG4gICAgRHJvcGRvd25MaXN0TW9kZWwucHJvdG90eXBlLnJlc2V0SXRlbXNTZXR0aW5ncyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5pdGVtc1NldHRpbmdzLnNraXAgPSAwO1xuICAgICAgICB0aGlzLml0ZW1zU2V0dGluZ3MudGFrZSA9IE1hdGgubWF4KHRoaXMubWluUGFnZVNpemUsIHRoaXMucXVlc3Rpb24uY2hvaWNlc0xhenlMb2FkUGFnZVNpemUpO1xuICAgICAgICB0aGlzLml0ZW1zU2V0dGluZ3MudG90YWxDb3VudCA9IDA7XG4gICAgICAgIHRoaXMuaXRlbXNTZXR0aW5ncy5pdGVtcyA9IFtdO1xuICAgIH07XG4gICAgRHJvcGRvd25MaXN0TW9kZWwucHJvdG90eXBlLnNldEl0ZW1zID0gZnVuY3Rpb24gKGl0ZW1zLCB0b3RhbENvdW50KSB7XG4gICAgICAgIHRoaXMuaXRlbXNTZXR0aW5ncy5pdGVtcyA9IFtdLmNvbmNhdCh0aGlzLml0ZW1zU2V0dGluZ3MuaXRlbXMsIGl0ZW1zKTtcbiAgICAgICAgdGhpcy5pdGVtc1NldHRpbmdzLnRvdGFsQ291bnQgPSB0b3RhbENvdW50O1xuICAgICAgICB0aGlzLmxpc3RNb2RlbC5pc0FsbERhdGFMb2FkZWQgPSB0aGlzLnF1ZXN0aW9uLmNob2ljZXNMYXp5TG9hZEVuYWJsZWQgJiYgdGhpcy5pdGVtc1NldHRpbmdzLml0ZW1zLmxlbmd0aCA9PSB0aGlzLml0ZW1zU2V0dGluZ3MudG90YWxDb3VudDtcbiAgICAgICAgdGhpcy5xdWVzdGlvbi5jaG9pY2VzID0gdGhpcy5pdGVtc1NldHRpbmdzLml0ZW1zO1xuICAgIH07XG4gICAgRHJvcGRvd25MaXN0TW9kZWwucHJvdG90eXBlLnVwZGF0ZVF1ZXN0aW9uQ2hvaWNlcyA9IGZ1bmN0aW9uIChjYWxsYmFja0FmdGVySXRlbXNMb2FkZWQpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgaWYgKHRoaXMuaXNSdW5uaW5nTG9hZFF1ZXN0aW9uQ2hvaWNlcylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIGlzVXBkYXRlID0gKHRoaXMuaXRlbXNTZXR0aW5ncy5za2lwICsgMSkgPCB0aGlzLml0ZW1zU2V0dGluZ3MudG90YWxDb3VudDtcbiAgICAgICAgaWYgKCF0aGlzLml0ZW1zU2V0dGluZ3Muc2tpcCB8fCBpc1VwZGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5pc1J1bm5pbmdMb2FkUXVlc3Rpb25DaG9pY2VzID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb24uc3VydmV5LmxvYWRRdWVzdGlvbkNob2ljZXMoe1xuICAgICAgICAgICAgICAgIHF1ZXN0aW9uOiB0aGlzLnF1ZXN0aW9uLFxuICAgICAgICAgICAgICAgIGZpbHRlcjogdGhpcy5maWx0ZXJTdHJpbmcsXG4gICAgICAgICAgICAgICAgc2tpcDogdGhpcy5pdGVtc1NldHRpbmdzLnNraXAsXG4gICAgICAgICAgICAgICAgdGFrZTogdGhpcy5pdGVtc1NldHRpbmdzLnRha2UsXG4gICAgICAgICAgICAgICAgc2V0SXRlbXM6IGZ1bmN0aW9uIChpdGVtcywgdG90YWxDb3VudCkge1xuICAgICAgICAgICAgICAgICAgICBfdGhpcy5pc1J1bm5pbmdMb2FkUXVlc3Rpb25DaG9pY2VzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIF90aGlzLnNldEl0ZW1zKGl0ZW1zIHx8IFtdLCB0b3RhbENvdW50IHx8IDApO1xuICAgICAgICAgICAgICAgICAgICBfdGhpcy5wb3B1cFJlY2FsY3VsYXRlUG9zaXRpb24oX3RoaXMuaXRlbXNTZXR0aW5ncy5za2lwID09PSBfdGhpcy5pdGVtc1NldHRpbmdzLnRha2UpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoISFjYWxsYmFja0FmdGVySXRlbXNMb2FkZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrQWZ0ZXJJdGVtc0xvYWRlZCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLml0ZW1zU2V0dGluZ3Muc2tpcCArPSB0aGlzLml0ZW1zU2V0dGluZ3MudGFrZTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgRHJvcGRvd25MaXN0TW9kZWwucHJvdG90eXBlLnVwZGF0ZVBvcHVwRm9jdXNGaXJzdElucHV0U2VsZWN0b3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuX3BvcHVwTW9kZWwuZm9jdXNGaXJzdElucHV0U2VsZWN0b3IgPSB0aGlzLmZvY3VzRmlyc3RJbnB1dFNlbGVjdG9yO1xuICAgIH07XG4gICAgRHJvcGRvd25MaXN0TW9kZWwucHJvdG90eXBlLmNyZWF0ZVBvcHVwID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB0aGlzLl9wb3B1cE1vZGVsID0gbmV3IF9wb3B1cF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fW1wiUG9wdXBNb2RlbFwiXShcInN2LWxpc3RcIiwgeyBtb2RlbDogdGhpcy5saXN0TW9kZWwgfSwgXCJib3R0b21cIiwgXCJjZW50ZXJcIiwgZmFsc2UpO1xuICAgICAgICB0aGlzLl9wb3B1cE1vZGVsLmRpc3BsYXlNb2RlID0gX3V0aWxzX2RldmljZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1tcIklzVG91Y2hcIl0gPyBcIm92ZXJsYXlcIiA6IFwicG9wdXBcIjtcbiAgICAgICAgdGhpcy5fcG9wdXBNb2RlbC5wb3NpdGlvbk1vZGUgPSBcImZpeGVkXCI7XG4gICAgICAgIHRoaXMuX3BvcHVwTW9kZWwuaXNGb2N1c2VkQ29udGFpbmVyID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3BvcHVwTW9kZWwuaXNGb2N1c2VkQ29udGVudCA9IF91dGlsc19kZXZpY2VzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bXCJJc1RvdWNoXCJdO1xuICAgICAgICB0aGlzLl9wb3B1cE1vZGVsLnNldFdpZHRoQnlUYXJnZXQgPSAhX3V0aWxzX2RldmljZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1tcIklzVG91Y2hcIl07XG4gICAgICAgIHRoaXMudXBkYXRlUG9wdXBGb2N1c0ZpcnN0SW5wdXRTZWxlY3RvcigpO1xuICAgICAgICB0aGlzLmxpc3RNb2RlbC5yZWdpc3RlclByb3BlcnR5Q2hhbmdlZEhhbmRsZXJzKFtcInNob3dGaWx0ZXJcIl0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLnVwZGF0ZVBvcHVwRm9jdXNGaXJzdElucHV0U2VsZWN0b3IoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX3BvcHVwTW9kZWwuY3NzQ2xhc3MgPSB0aGlzLnBvcHVwQ3NzQ2xhc3NlcztcbiAgICAgICAgdGhpcy5fcG9wdXBNb2RlbC5vblZpc2liaWxpdHlDaGFuZ2VkLmFkZChmdW5jdGlvbiAoXywgb3B0aW9uKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9uLmlzVmlzaWJsZSkge1xuICAgICAgICAgICAgICAgIF90aGlzLmxpc3RNb2RlbC5yZW5kZXJFbGVtZW50cyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0aW9uLmlzVmlzaWJsZSAmJiBfdGhpcy5xdWVzdGlvbi5jaG9pY2VzTGF6eUxvYWRFbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMubGlzdE1vZGVsLmFjdGlvbnMgPSBbXTtcbiAgICAgICAgICAgICAgICBfdGhpcy51cGRhdGVRdWVzdGlvbkNob2ljZXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHRpb24uaXNWaXNpYmxlICYmICEhX3RoaXMucXVlc3Rpb24ub25PcGVuZWRDYWxsQmFjaykge1xuICAgICAgICAgICAgICAgIF90aGlzLnVwZGF0ZVBvcHVwRm9jdXNGaXJzdElucHV0U2VsZWN0b3IoKTtcbiAgICAgICAgICAgICAgICBfdGhpcy5xdWVzdGlvbi5vbk9wZW5lZENhbGxCYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIW9wdGlvbi5pc1Zpc2libGUpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5vbkhpZGVQb3B1cCgpO1xuICAgICAgICAgICAgICAgIGlmIChfdGhpcy5xdWVzdGlvbi5jaG9pY2VzTGF6eUxvYWRFbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIF90aGlzLnJlc2V0SXRlbXNTZXR0aW5ncygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF90aGlzLnF1ZXN0aW9uLnByb2Nlc3NQb3B1cFZpc2libGlsaXR5Q2hhbmdlZChfdGhpcy5wb3B1cE1vZGVsLCBvcHRpb24uaXNWaXNpYmxlKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBEcm9wZG93bkxpc3RNb2RlbC5wcm90b3R5cGUuc2V0RmlsdGVyU3RyaW5nVG9MaXN0TW9kZWwgPSBmdW5jdGlvbiAobmV3VmFsdWUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdGhpcy5saXN0TW9kZWwuZmlsdGVyU3RyaW5nID0gbmV3VmFsdWU7XG4gICAgICAgIHRoaXMubGlzdE1vZGVsLnJlc2V0Rm9jdXNlZEl0ZW0oKTtcbiAgICAgICAgaWYgKHRoaXMucXVlc3Rpb24uc2VsZWN0ZWRJdGVtICYmIHRoaXMucXVlc3Rpb24uc2VsZWN0ZWRJdGVtLnRleHQuaW5kZXhPZihuZXdWYWx1ZSkgPj0gMCkge1xuICAgICAgICAgICAgdGhpcy5saXN0TW9kZWwuZm9jdXNlZEl0ZW0gPSB0aGlzLmdldEF2YWlsYWJsZUl0ZW1zKCkuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7IHJldHVybiBpdGVtLmlkID09IF90aGlzLnF1ZXN0aW9uLnNlbGVjdGVkSXRlbS52YWx1ZTsgfSlbMF07XG4gICAgICAgICAgICBpZiAodGhpcy5saXN0TW9kZWwuZmlsdGVyU3RyaW5nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5saXN0TW9kZWwuYWN0aW9ucy5tYXAoZnVuY3Rpb24gKGEpIHsgcmV0dXJuIGEuc2VsZWN0ZWRWYWx1ZSA9IGZhbHNlOyB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMubGlzdE1vZGVsLmZvY3VzZWRJdGVtIHx8ICF0aGlzLmxpc3RNb2RlbC5pc0l0ZW1WaXNpYmxlKHRoaXMubGlzdE1vZGVsLmZvY3VzZWRJdGVtKSkge1xuICAgICAgICAgICAgdGhpcy5saXN0TW9kZWwuZm9jdXNGaXJzdFZpc2libGVJdGVtKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIERyb3Bkb3duTGlzdE1vZGVsLnByb3RvdHlwZS5wb3B1cFJlY2FsY3VsYXRlUG9zaXRpb24gPSBmdW5jdGlvbiAoaXNSZXNldEhlaWdodCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLnBvcHVwTW9kZWwucmVjYWxjdWxhdGVQb3NpdGlvbihpc1Jlc2V0SGVpZ2h0KTtcbiAgICAgICAgfSwgMSk7XG4gICAgfTtcbiAgICBEcm9wZG93bkxpc3RNb2RlbC5wcm90b3R5cGUub25IaWRlUG9wdXAgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMucmVzZXRGaWx0ZXJTdHJpbmcoKTtcbiAgICAgICAgdGhpcy5xdWVzdGlvbi5zdWdnZXN0ZWRJdGVtID0gbnVsbDtcbiAgICAgICAgdGhpcy5saXN0TW9kZWwucmVmcmVzaCgpO1xuICAgIH07XG4gICAgRHJvcGRvd25MaXN0TW9kZWwucHJvdG90eXBlLmdldEF2YWlsYWJsZUl0ZW1zID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi52aXNpYmxlQ2hvaWNlcztcbiAgICB9O1xuICAgIERyb3Bkb3duTGlzdE1vZGVsLnByb3RvdHlwZS5jcmVhdGVMaXN0TW9kZWwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciB2aXNpYmxlSXRlbXMgPSB0aGlzLmdldEF2YWlsYWJsZUl0ZW1zKCk7XG4gICAgICAgIHZhciBfb25TZWxlY3Rpb25DaGFuZ2VkID0gdGhpcy5vblNlbGVjdGlvbkNoYW5nZWQ7XG4gICAgICAgIGlmICghX29uU2VsZWN0aW9uQ2hhbmdlZCkge1xuICAgICAgICAgICAgX29uU2VsZWN0aW9uQ2hhbmdlZCA9IGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMucXVlc3Rpb24udmFsdWUgPSBpdGVtLmlkO1xuICAgICAgICAgICAgICAgIGlmIChfdGhpcy5xdWVzdGlvbi5zZWFyY2hFbmFibGVkKVxuICAgICAgICAgICAgICAgICAgICBfdGhpcy5hcHBseUlucHV0U3RyaW5nKGl0ZW0pO1xuICAgICAgICAgICAgICAgIF90aGlzLl9wb3B1cE1vZGVsLnRvZ2dsZVZpc2liaWxpdHkoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHJlcyA9IG5ldyBfbGlzdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiTGlzdE1vZGVsXCJdKHZpc2libGVJdGVtcywgX29uU2VsZWN0aW9uQ2hhbmdlZCwgZmFsc2UsIHVuZGVmaW5lZCwgdGhpcy5xdWVzdGlvbi5jaG9pY2VzTGF6eUxvYWRFbmFibGVkID8gdGhpcy5saXN0TW9kZWxGaWx0ZXJTdHJpbmdDaGFuZ2VkIDogdW5kZWZpbmVkLCB0aGlzLmxpc3RFbGVtZW50SWQpO1xuICAgICAgICByZXMucmVuZGVyRWxlbWVudHMgPSBmYWxzZTtcbiAgICAgICAgcmVzLmZvcmNlU2hvd0ZpbHRlciA9IHRydWU7XG4gICAgICAgIHJlcy5hcmVTYW1lSXRlbXNDYWxsYmFjayA9IGZ1bmN0aW9uIChpdGVtMSwgaXRlbTIpIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtMSA9PT0gaXRlbTI7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfTtcbiAgICBEcm9wZG93bkxpc3RNb2RlbC5wcm90b3R5cGUudXBkYXRlQWZ0ZXJMaXN0TW9kZWxDcmVhdGVkID0gZnVuY3Rpb24gKG1vZGVsKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIG1vZGVsLmlzSXRlbVNlbGVjdGVkID0gZnVuY3Rpb24gKGFjdGlvbikgeyByZXR1cm4gISFhY3Rpb24uc2VsZWN0ZWQ7IH07XG4gICAgICAgIG1vZGVsLmxvY093bmVyID0gdGhpcy5xdWVzdGlvbjtcbiAgICAgICAgbW9kZWwub25Qcm9wZXJ0eUNoYW5nZWQuYWRkKGZ1bmN0aW9uIChzZW5kZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLm5hbWUgPT0gXCJoYXNWZXJ0aWNhbFNjcm9sbGVyXCIpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5oYXNTY3JvbGwgPSBvcHRpb25zLm5ld1ZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgbW9kZWwuaXNBbGxEYXRhTG9hZGVkID0gIXRoaXMucXVlc3Rpb24uY2hvaWNlc0xhenlMb2FkRW5hYmxlZDtcbiAgICB9O1xuICAgIERyb3Bkb3duTGlzdE1vZGVsLnByb3RvdHlwZS51cGRhdGVDc3NDbGFzc2VzID0gZnVuY3Rpb24gKHBvcHVwQ3NzQ2xhc3MsIGxpc3RDc3NDbGFzc2VzKSB7XG4gICAgICAgIHRoaXMucG9wdXBNb2RlbC5jc3NDbGFzcyA9IG5ldyBfdXRpbHNfY3NzQ2xhc3NCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bXCJDc3NDbGFzc0J1aWxkZXJcIl0oKS5hcHBlbmQocG9wdXBDc3NDbGFzcykuYXBwZW5kKHRoaXMucG9wdXBDc3NDbGFzc2VzKS50b1N0cmluZygpO1xuICAgICAgICB0aGlzLmxpc3RNb2RlbC5jc3NDbGFzc2VzID0gbGlzdENzc0NsYXNzZXM7XG4gICAgfTtcbiAgICBEcm9wZG93bkxpc3RNb2RlbC5wcm90b3R5cGUucmVzZXRGaWx0ZXJTdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghIXRoaXMuZmlsdGVyU3RyaW5nKSB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlclN0cmluZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH07XG4gICAgRHJvcGRvd25MaXN0TW9kZWwucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmlucHV0U3RyaW5nID0gbnVsbDtcbiAgICAgICAgdGhpcy5oaW50U3RyaW5nID0gXCJcIjtcbiAgICAgICAgdGhpcy5yZXNldEZpbHRlclN0cmluZygpO1xuICAgIH07XG4gICAgRHJvcGRvd25MaXN0TW9kZWwucHJvdG90eXBlLm9uU2V0RmlsdGVyU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBpZiAoISF0aGlzLmZpbHRlclN0cmluZyAmJiAhdGhpcy5wb3B1cE1vZGVsLmlzVmlzaWJsZSkge1xuICAgICAgICAgICAgdGhpcy5wb3B1cE1vZGVsLmlzVmlzaWJsZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHVwZGF0ZUFmdGVyRmlsdGVyU3RyaW5nQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLnNldEZpbHRlclN0cmluZ1RvTGlzdE1vZGVsKF90aGlzLmZpbHRlclN0cmluZyk7XG4gICAgICAgICAgICBfdGhpcy5wb3B1cFJlY2FsY3VsYXRlUG9zaXRpb24odHJ1ZSk7XG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLnF1ZXN0aW9uLmNob2ljZXNMYXp5TG9hZEVuYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMucmVzZXRJdGVtc1NldHRpbmdzKCk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVF1ZXN0aW9uQ2hvaWNlcyh1cGRhdGVBZnRlckZpbHRlclN0cmluZ0NoYW5nZWQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdXBkYXRlQWZ0ZXJGaWx0ZXJTdHJpbmdDaGFuZ2VkKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShEcm9wZG93bkxpc3RNb2RlbC5wcm90b3R5cGUsIFwiaXNBbGxEYXRhTG9hZGVkXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gISF0aGlzLml0ZW1zU2V0dGluZ3MudG90YWxDb3VudCAmJiB0aGlzLml0ZW1zU2V0dGluZ3MuaXRlbXMubGVuZ3RoID09IHRoaXMuaXRlbXNTZXR0aW5ncy50b3RhbENvdW50O1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KERyb3Bkb3duTGlzdE1vZGVsLnByb3RvdHlwZSwgXCJjYW5TaG93U2VsZWN0ZWRJdGVtXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gIXRoaXMuZm9jdXNlZCB8fCB0aGlzLl9tYXJrZG93bk1vZGUgfHwgIXRoaXMuc2VhcmNoRW5hYmxlZDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIERyb3Bkb3duTGlzdE1vZGVsLnByb3RvdHlwZS5hcHBseUlucHV0U3RyaW5nID0gZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgdmFyIGhhc0h0bWwgPSBpdGVtID09PSBudWxsIHx8IGl0ZW0gPT09IHZvaWQgMCA/IHZvaWQgMCA6IGl0ZW0ubG9jVGV4dC5oYXNIdG1sO1xuICAgICAgICBpZiAoaGFzSHRtbCB8fCB0aGlzLnF1ZXN0aW9uLmlucHV0RmllbGRDb21wb25lbnROYW1lKSB7XG4gICAgICAgICAgICB0aGlzLl9tYXJrZG93bk1vZGUgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5pbnB1dFN0cmluZyA9IFwiXCI7XG4gICAgICAgICAgICB0aGlzLmhpbnRTdHJpbmcgPSBcIlwiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pbnB1dFN0cmluZyA9IGl0ZW0gPT09IG51bGwgfHwgaXRlbSA9PT0gdm9pZCAwID8gdm9pZCAwIDogaXRlbS50aXRsZTtcbiAgICAgICAgICAgIHRoaXMuaGludFN0cmluZyA9IGl0ZW0gPT09IG51bGwgfHwgaXRlbSA9PT0gdm9pZCAwID8gdm9pZCAwIDogaXRlbS50aXRsZTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgRHJvcGRvd25MaXN0TW9kZWwucHJvdG90eXBlLmZpeElucHV0Q2FzZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGhpbnRTdHJpbmdNaWRkbGUgPSB0aGlzLmhpbnRTdHJpbmdNaWRkbGU7XG4gICAgICAgIGlmIChoaW50U3RyaW5nTWlkZGxlICYmIHRoaXMuaW5wdXRTdHJpbmcgIT0gaGludFN0cmluZ01pZGRsZSlcbiAgICAgICAgICAgIHRoaXMuaW5wdXRTdHJpbmcgPSBoaW50U3RyaW5nTWlkZGxlO1xuICAgIH07XG4gICAgRHJvcGRvd25MaXN0TW9kZWwucHJvdG90eXBlLmFwcGx5SGludFN0cmluZyA9IGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIHZhciBoYXNIdG1sID0gaXRlbSA9PT0gbnVsbCB8fCBpdGVtID09PSB2b2lkIDAgPyB2b2lkIDAgOiBpdGVtLmxvY1RleHQuaGFzSHRtbDtcbiAgICAgICAgaWYgKGhhc0h0bWwgfHwgdGhpcy5xdWVzdGlvbi5pbnB1dEZpZWxkQ29tcG9uZW50TmFtZSkge1xuICAgICAgICAgICAgdGhpcy5fbWFya2Rvd25Nb2RlID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuaGludFN0cmluZyA9IFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmhpbnRTdHJpbmcgPSBpdGVtID09PSBudWxsIHx8IGl0ZW0gPT09IHZvaWQgMCA/IHZvaWQgMCA6IGl0ZW0udGl0bGU7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShEcm9wZG93bkxpc3RNb2RlbC5wcm90b3R5cGUsIFwiaW5wdXRTdHJpbmdSZW5kZXJlZFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXRTdHJpbmcgfHwgXCJcIjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLmlucHV0U3RyaW5nID0gdmFsO1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJTdHJpbmcgPSB2YWw7XG4gICAgICAgICAgICBpZiAoIXZhbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaGludFN0cmluZyA9IFwiXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGx5SGludFN0cmluZyh0aGlzLmxpc3RNb2RlbC5mb2N1c2VkSXRlbSB8fCB0aGlzLnF1ZXN0aW9uLnNlbGVjdGVkSXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRHJvcGRvd25MaXN0TW9kZWwucHJvdG90eXBlLCBcInBsYWNlaG9sZGVyUmVuZGVyZWRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmhpbnRTdHJpbmcgPyBcIlwiIDogdGhpcy5xdWVzdGlvbi5yZWFkT25seVRleHQ7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRHJvcGRvd25MaXN0TW9kZWwucHJvdG90eXBlLCBcImxpc3RFbGVtZW50SWRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLmlucHV0SWQgKyBcIl9saXN0XCI7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRHJvcGRvd25MaXN0TW9kZWwucHJvdG90eXBlLCBcImhpbnRTdHJpbmdMQ1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuICgoX2EgPSB0aGlzLmhpbnRTdHJpbmcpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50b0xvd2VyQ2FzZSgpKSB8fCBcIlwiO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KERyb3Bkb3duTGlzdE1vZGVsLnByb3RvdHlwZSwgXCJpbnB1dFN0cmluZ0xDXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gKChfYSA9IHRoaXMuaW5wdXRTdHJpbmcpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50b0xvd2VyQ2FzZSgpKSB8fCBcIlwiO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KERyb3Bkb3duTGlzdE1vZGVsLnByb3RvdHlwZSwgXCJzaG93SGludFByZWZpeFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuICEhdGhpcy5pbnB1dFN0cmluZyAmJiB0aGlzLmhpbnRTdHJpbmdMQy5pbmRleE9mKHRoaXMuaW5wdXRTdHJpbmdMQykgPiAwO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KERyb3Bkb3duTGlzdE1vZGVsLnByb3RvdHlwZSwgXCJoaW50U3RyaW5nUHJlZml4XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaW5wdXRTdHJpbmcpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5oaW50U3RyaW5nLnN1YnN0cmluZygwLCB0aGlzLmhpbnRTdHJpbmdMQy5pbmRleE9mKHRoaXMuaW5wdXRTdHJpbmdMQykpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KERyb3Bkb3duTGlzdE1vZGVsLnByb3RvdHlwZSwgXCJzaG93SGludFN0cmluZ1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuICEhdGhpcy5xdWVzdGlvbi5zZWFyY2hFbmFibGVkICYmIHRoaXMuaGludFN0cmluZ0xDICYmIHRoaXMuaGludFN0cmluZ0xDLmluZGV4T2YodGhpcy5pbnB1dFN0cmluZ0xDKSA+PSAwIHx8XG4gICAgICAgICAgICAgICAgIXRoaXMucXVlc3Rpb24uc2VhcmNoRW5hYmxlZCAmJiB0aGlzLmhpbnRTdHJpbmdMQyAmJiB0aGlzLnF1ZXN0aW9uLmlzRW1wdHkoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShEcm9wZG93bkxpc3RNb2RlbC5wcm90b3R5cGUsIFwiaGludFN0cmluZ1N1ZmZpeFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGludFN0cmluZy5zdWJzdHJpbmcodGhpcy5oaW50U3RyaW5nTEMuaW5kZXhPZih0aGlzLmlucHV0U3RyaW5nTEMpICsgdGhpcy5pbnB1dFN0cmluZ0xDLmxlbmd0aCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRHJvcGRvd25MaXN0TW9kZWwucHJvdG90eXBlLCBcImhpbnRTdHJpbmdNaWRkbGVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBzdGFydCA9IHRoaXMuaGludFN0cmluZ0xDLmluZGV4T2YodGhpcy5pbnB1dFN0cmluZ0xDKTtcbiAgICAgICAgICAgIGlmIChzdGFydCA9PSAtMSlcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmhpbnRTdHJpbmcuc3Vic3RyaW5nKHN0YXJ0LCBzdGFydCArIHRoaXMuaW5wdXRTdHJpbmdMQy5sZW5ndGgpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KERyb3Bkb3duTGlzdE1vZGVsLnByb3RvdHlwZSwgXCJwb3B1cE1vZGVsXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcG9wdXBNb2RlbDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShEcm9wZG93bkxpc3RNb2RlbC5wcm90b3R5cGUsIFwiaW5wdXRSZWFkT25seVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5IHx8IHRoaXMuc2VhcmNoRW5hYmxlZDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShEcm9wZG93bkxpc3RNb2RlbC5wcm90b3R5cGUsIFwiZmlsdGVyU3RyaW5nRW5hYmxlZFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuICF0aGlzLnF1ZXN0aW9uLmlzSW5wdXRSZWFkT25seSAmJiB0aGlzLnNlYXJjaEVuYWJsZWQ7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRHJvcGRvd25MaXN0TW9kZWwucHJvdG90eXBlLCBcImlucHV0TW9kZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIF91dGlsc19kZXZpY2VzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bXCJJc1RvdWNoXCJdID8gXCJub25lXCIgOiBcInRleHRcIjtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIERyb3Bkb3duTGlzdE1vZGVsLnByb3RvdHlwZS5zZXRTZWFyY2hFbmFibGVkID0gZnVuY3Rpb24gKG5ld1ZhbHVlKSB7XG4gICAgICAgIHRoaXMubGlzdE1vZGVsLnNlYXJjaEVuYWJsZWQgPSBfdXRpbHNfZGV2aWNlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fW1wiSXNUb3VjaFwiXTtcbiAgICAgICAgdGhpcy5saXN0TW9kZWwuc2hvd1NlYXJjaENsZWFyQnV0dG9uID0gX3V0aWxzX2RldmljZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1tcIklzVG91Y2hcIl07XG4gICAgICAgIHRoaXMuc2VhcmNoRW5hYmxlZCA9IG5ld1ZhbHVlO1xuICAgIH07XG4gICAgRHJvcGRvd25MaXN0TW9kZWwucHJvdG90eXBlLnVwZGF0ZUl0ZW1zID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmxpc3RNb2RlbC5zZXRJdGVtcyh0aGlzLmdldEF2YWlsYWJsZUl0ZW1zKCkpO1xuICAgIH07XG4gICAgRHJvcGRvd25MaXN0TW9kZWwucHJvdG90eXBlLm9uQ2xpY2sgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMucXVlc3Rpb24ucmVhZE9ubHkgfHwgdGhpcy5xdWVzdGlvbi5pc0Rlc2lnbk1vZGUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMuX3BvcHVwTW9kZWwudG9nZ2xlVmlzaWJpbGl0eSgpO1xuICAgICAgICB0aGlzLmZvY3VzSXRlbU9uQ2xpY2tBbmRQb3B1cCgpO1xuICAgICAgICBpZiAodGhpcy5zZWFyY2hFbmFibGVkICYmICEhZXZlbnQgJiYgISFldmVudC50YXJnZXQpIHtcbiAgICAgICAgICAgIHZhciBpbnB1dCA9IGV2ZW50LnRhcmdldC5xdWVyeVNlbGVjdG9yKFwiaW5wdXRcIik7XG4gICAgICAgICAgICBpZiAoISFpbnB1dCkge1xuICAgICAgICAgICAgICAgIGlucHV0LmZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIERyb3Bkb3duTGlzdE1vZGVsLnByb3RvdHlwZS5vblByb3BlcnR5Q2hhbmdlZEhhbmRsZXIgPSBmdW5jdGlvbiAoc2VuZGVyLCBvcHRpb25zKSB7XG4gICAgICAgIGlmIChvcHRpb25zLm5hbWUgPT0gXCJ2YWx1ZVwiKSB7XG4gICAgICAgICAgICB0aGlzLnNob3dJbnB1dEZpZWxkQ29tcG9uZW50ID0gdGhpcy5xdWVzdGlvbi5zaG93SW5wdXRGaWVsZENvbXBvbmVudDtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5uYW1lID09IFwiY2hvaWNlc0xhenlMb2FkRW5hYmxlZFwiICYmIG9wdGlvbnMubmV3VmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMubGlzdE1vZGVsLnNldE9uRmlsdGVyU3RyaW5nQ2hhbmdlZENhbGxiYWNrKHRoaXMubGlzdE1vZGVsRmlsdGVyU3RyaW5nQ2hhbmdlZCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIERyb3Bkb3duTGlzdE1vZGVsLnByb3RvdHlwZS5mb2N1c0l0ZW1PbkNsaWNrQW5kUG9wdXAgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLl9wb3B1cE1vZGVsLmlzVmlzaWJsZSAmJiB0aGlzLnF1ZXN0aW9uLnZhbHVlKVxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VTZWxlY3Rpb25XaXRoS2V5Ym9hcmQoZmFsc2UpO1xuICAgIH07XG4gICAgRHJvcGRvd25MaXN0TW9kZWwucHJvdG90eXBlLm9uQ2xlYXIgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5xdWVzdGlvbi5jbGVhclZhbHVlKCk7XG4gICAgICAgIHRoaXMuX3BvcHVwTW9kZWwuaXNWaXNpYmxlID0gZmFsc2U7XG4gICAgICAgIGlmIChldmVudCkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBEcm9wZG93bkxpc3RNb2RlbC5wcm90b3R5cGUuZ2V0U2VsZWN0ZWRBY3Rpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLnNlbGVjdGVkSXRlbSB8fCBudWxsO1xuICAgIH07XG4gICAgRHJvcGRvd25MaXN0TW9kZWwucHJvdG90eXBlLmNoYW5nZVNlbGVjdGlvbldpdGhLZXlib2FyZCA9IGZ1bmN0aW9uIChyZXZlcnNlKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgdmFyIGZvY3VzZWRJdGVtID0gdGhpcy5saXN0TW9kZWwuZm9jdXNlZEl0ZW07XG4gICAgICAgIGlmICghZm9jdXNlZEl0ZW0gJiYgdGhpcy5xdWVzdGlvbi5zZWxlY3RlZEl0ZW0pIHtcbiAgICAgICAgICAgIGlmIChfaXRlbXZhbHVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJJdGVtVmFsdWVcIl0uZ2V0SXRlbUJ5VmFsdWUodGhpcy5xdWVzdGlvbi5jaG9pY2VzLCB0aGlzLnF1ZXN0aW9uLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMubGlzdE1vZGVsLmZvY3VzZWRJdGVtID0gdGhpcy5xdWVzdGlvbi5zZWxlY3RlZEl0ZW07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAocmV2ZXJzZSkge1xuICAgICAgICAgICAgICAgIHRoaXMubGlzdE1vZGVsLmZvY3VzUHJldlZpc2libGVJdGVtKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3RNb2RlbC5mb2N1c05leHRWaXNpYmxlSXRlbSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuYmVmb3JlU2Nyb2xsVG9Gb2N1c2VkSXRlbShmb2N1c2VkSXRlbSk7XG4gICAgICAgIHRoaXMuc2Nyb2xsVG9Gb2N1c2VkSXRlbSgpO1xuICAgICAgICB0aGlzLmFmdGVyU2Nyb2xsVG9Gb2N1c2VkSXRlbSgpO1xuICAgICAgICB0aGlzLmFyaWFBY3RpdmVkZXNjZW5kYW50ID0gKF9hID0gdGhpcy5saXN0TW9kZWwuZm9jdXNlZEl0ZW0pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5lbGVtZW50SWQ7XG4gICAgfTtcbiAgICBEcm9wZG93bkxpc3RNb2RlbC5wcm90b3R5cGUuYmVmb3JlU2Nyb2xsVG9Gb2N1c2VkSXRlbSA9IGZ1bmN0aW9uIChmb2N1c2VkSXRlbSkge1xuICAgICAgICBpZiAodGhpcy5xdWVzdGlvbi52YWx1ZSAmJiBmb2N1c2VkSXRlbSkge1xuICAgICAgICAgICAgZm9jdXNlZEl0ZW0uc2VsZWN0ZWRWYWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5saXN0TW9kZWwuZm9jdXNlZEl0ZW0uc2VsZWN0ZWRWYWx1ZSA9ICF0aGlzLmxpc3RNb2RlbC5maWx0ZXJTdHJpbmc7XG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uLnN1Z2dlc3RlZEl0ZW0gPSB0aGlzLmxpc3RNb2RlbC5mb2N1c2VkSXRlbTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgRHJvcGRvd25MaXN0TW9kZWwucHJvdG90eXBlLmFmdGVyU2Nyb2xsVG9Gb2N1c2VkSXRlbSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAodGhpcy5xdWVzdGlvbi52YWx1ZSAmJiAhdGhpcy5saXN0TW9kZWwuZmlsdGVyU3RyaW5nICYmIHRoaXMucXVlc3Rpb24uc2VhcmNoRW5hYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5hcHBseUlucHV0U3RyaW5nKHRoaXMubGlzdE1vZGVsLmZvY3VzZWRJdGVtIHx8IHRoaXMucXVlc3Rpb24uc2VsZWN0ZWRJdGVtKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYXBwbHlIaW50U3RyaW5nKHRoaXMubGlzdE1vZGVsLmZvY3VzZWRJdGVtIHx8IHRoaXMucXVlc3Rpb24uc2VsZWN0ZWRJdGVtKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpeElucHV0Q2FzZSgpO1xuICAgICAgICB0aGlzLmFyaWFBY3RpdmVkZXNjZW5kYW50ID0gKF9hID0gdGhpcy5saXN0TW9kZWwuZm9jdXNlZEl0ZW0pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5lbGVtZW50SWQ7XG4gICAgfTtcbiAgICBEcm9wZG93bkxpc3RNb2RlbC5wcm90b3R5cGUua2V5SGFuZGxlciA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICB2YXIgY2hhciA9IGV2ZW50LndoaWNoIHx8IGV2ZW50LmtleUNvZGU7XG4gICAgICAgIGlmICh0aGlzLnBvcHVwTW9kZWwuaXNWaXNpYmxlICYmIGV2ZW50LmtleUNvZGUgPT09IDM4KSB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZVNlbGVjdGlvbldpdGhLZXlib2FyZCh0cnVlKTtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChldmVudC5rZXlDb2RlID09PSA0MCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnBvcHVwTW9kZWwuaXNWaXNpYmxlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3B1cE1vZGVsLnRvZ2dsZVZpc2liaWxpdHkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY2hhbmdlU2VsZWN0aW9uV2l0aEtleWJvYXJkKGZhbHNlKTtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gOSkge1xuICAgICAgICAgICAgdGhpcy5wb3B1cE1vZGVsLmlzVmlzaWJsZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCF0aGlzLnBvcHVwTW9kZWwuaXNWaXNpYmxlICYmIChldmVudC5rZXlDb2RlID09PSAxMyB8fCBldmVudC5rZXlDb2RlID09PSAzMikpIHtcbiAgICAgICAgICAgIHRoaXMucG9wdXBNb2RlbC50b2dnbGVWaXNpYmlsaXR5KCk7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZVNlbGVjdGlvbldpdGhLZXlib2FyZChmYWxzZSk7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5wb3B1cE1vZGVsLmlzVmlzaWJsZSAmJiAoZXZlbnQua2V5Q29kZSA9PT0gMTMgfHwgZXZlbnQua2V5Q29kZSA9PT0gMzIgJiYgKCF0aGlzLnF1ZXN0aW9uLnNlYXJjaEVuYWJsZWQgfHwgIXRoaXMuaW5wdXRTdHJpbmcpKSkge1xuICAgICAgICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IDEzICYmIHRoaXMucXVlc3Rpb24uc2VhcmNoRW5hYmxlZCAmJiAhdGhpcy5pbnB1dFN0cmluZyAmJiB0aGlzLnF1ZXN0aW9uIGluc3RhbmNlb2YgX3F1ZXN0aW9uX2Ryb3Bkb3duX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bXCJRdWVzdGlvbkRyb3Bkb3duTW9kZWxcIl0gJiYgIXRoaXMuX21hcmtkb3duTW9kZSAmJiB0aGlzLnF1ZXN0aW9uLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcG9wdXBNb2RlbC5pc1Zpc2libGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2xlYXIoZXZlbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMucXVlc3Rpb24uc3VydmV5LnF1ZXN0aW9uRWRpdEZpbmlzaENhbGxiYWNrKHRoaXMucXVlc3Rpb24sIGV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMubGlzdE1vZGVsLnNlbGVjdEZvY3VzZWRJdGVtKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkZvY3VzKGV2ZW50KTtcbiAgICAgICAgICAgICAgICB0aGlzLnF1ZXN0aW9uLnN1cnZleS5xdWVzdGlvbkVkaXRGaW5pc2hDYWxsYmFjayh0aGlzLnF1ZXN0aW9uLCBldmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY2hhciA9PT0gNDYgfHwgY2hhciA9PT0gOCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnNlYXJjaEVuYWJsZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2xlYXIoZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGV2ZW50LmtleUNvZGUgPT09IDI3KSB7XG4gICAgICAgICAgICB0aGlzLl9wb3B1cE1vZGVsLmlzVmlzaWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5oaW50U3RyaW5nID0gXCJcIjtcbiAgICAgICAgICAgIHRoaXMub25Fc2NhcGUoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChldmVudC5rZXlDb2RlID09PSAzOCB8fCBldmVudC5rZXlDb2RlID09PSA0MCB8fCBldmVudC5rZXlDb2RlID09PSAzMiAmJiAhdGhpcy5xdWVzdGlvbi5zZWFyY2hFbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChldmVudC5rZXlDb2RlID09PSAzMiAmJiB0aGlzLnF1ZXN0aW9uLnNlYXJjaEVuYWJsZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBPYmplY3QoX3V0aWxzX3V0aWxzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bXCJkb0tleTJDbGlja1VwXCJdKShldmVudCwgeyBwcm9jZXNzRXNjOiBmYWxzZSwgZGlzYWJsZVRhYlN0b3A6IHRoaXMucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5IH0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBEcm9wZG93bkxpc3RNb2RlbC5wcm90b3R5cGUub25Fc2NhcGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLnF1ZXN0aW9uLnNlYXJjaEVuYWJsZWQpXG4gICAgICAgICAgICB0aGlzLmFwcGx5SW5wdXRTdHJpbmcodGhpcy5xdWVzdGlvbi5zZWxlY3RlZEl0ZW0pO1xuICAgIH07XG4gICAgRHJvcGRvd25MaXN0TW9kZWwucHJvdG90eXBlLm9uU2Nyb2xsID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHZhciB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG4gICAgICAgIGlmICgodGFyZ2V0LnNjcm9sbEhlaWdodCAtICh0YXJnZXQuc2Nyb2xsVG9wICsgdGFyZ2V0Lm9mZnNldEhlaWdodCkpIDw9IHRoaXMubG9hZGluZ0l0ZW1IZWlnaHQpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUXVlc3Rpb25DaG9pY2VzKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIERyb3Bkb3duTGlzdE1vZGVsLnByb3RvdHlwZS5vbkJsdXIgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5mb2N1c2VkID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLnBvcHVwTW9kZWwuaXNWaXNpYmxlICYmIF91dGlsc19kZXZpY2VzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bXCJJc1RvdWNoXCJdKSB7XG4gICAgICAgICAgICB0aGlzLl9wb3B1cE1vZGVsLmlzVmlzaWJsZSA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZXNldEZpbHRlclN0cmluZygpO1xuICAgICAgICB0aGlzLmlucHV0U3RyaW5nID0gbnVsbDtcbiAgICAgICAgdGhpcy5oaW50U3RyaW5nID0gXCJcIjtcbiAgICAgICAgT2JqZWN0KF91dGlsc191dGlsc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fW1wiZG9LZXkyQ2xpY2tCbHVyXCJdKShldmVudCk7XG4gICAgICAgIHRoaXMuX3BvcHVwTW9kZWwuaXNWaXNpYmxlID0gZmFsc2U7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH07XG4gICAgRHJvcGRvd25MaXN0TW9kZWwucHJvdG90eXBlLm9uRm9jdXMgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5mb2N1c2VkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zZXRJbnB1dFN0cmluZ0Zyb21TZWxlY3RlZEl0ZW0odGhpcy5xdWVzdGlvbi5zZWxlY3RlZEl0ZW0pO1xuICAgIH07XG4gICAgRHJvcGRvd25MaXN0TW9kZWwucHJvdG90eXBlLnNldElucHV0U3RyaW5nRnJvbVNlbGVjdGVkSXRlbSA9IGZ1bmN0aW9uIChuZXdWYWx1ZSkge1xuICAgICAgICBpZiAoIXRoaXMuZm9jdXNlZClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKHRoaXMucXVlc3Rpb24uc2VhcmNoRW5hYmxlZCAmJiAhIW5ld1ZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGx5SW5wdXRTdHJpbmcobmV3VmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pbnB1dFN0cmluZyA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIERyb3Bkb3duTGlzdE1vZGVsLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBfc3VwZXIucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcbiAgICAgICAgdGhpcy5xdWVzdGlvbiAmJiB0aGlzLnF1ZXN0aW9uLm9uUHJvcGVydHlDaGFuZ2VkLnJlbW92ZSh0aGlzLnF1c3Rpb25Qcm9wZXJ0eUNoYW5nZWRIYW5kbGVyKTtcbiAgICAgICAgdGhpcy5xdXN0aW9uUHJvcGVydHlDaGFuZ2VkSGFuZGxlciA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKCEhdGhpcy5saXN0TW9kZWwpIHtcbiAgICAgICAgICAgIHRoaXMubGlzdE1vZGVsLmRpc3Bvc2UoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoISF0aGlzLnBvcHVwTW9kZWwpIHtcbiAgICAgICAgICAgIHRoaXMucG9wdXBNb2RlbC5kaXNwb3NlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIERyb3Bkb3duTGlzdE1vZGVsLnByb3RvdHlwZS5zY3JvbGxUb0ZvY3VzZWRJdGVtID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmxpc3RNb2RlbC5zY3JvbGxUb0ZvY3VzZWRJdGVtKCk7XG4gICAgfTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJwcm9wZXJ0eVwiXSkoeyBkZWZhdWx0VmFsdWU6IHRydWUgfSlcbiAgICBdLCBEcm9wZG93bkxpc3RNb2RlbC5wcm90b3R5cGUsIFwic2VhcmNoRW5hYmxlZFwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QoX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcInByb3BlcnR5XCJdKSh7XG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU6IFwiXCIsXG4gICAgICAgICAgICBvblNldDogZnVuY3Rpb24gKF8sIHRhcmdldCkge1xuICAgICAgICAgICAgICAgIHRhcmdldC5vblNldEZpbHRlclN0cmluZygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgIF0sIERyb3Bkb3duTGlzdE1vZGVsLnByb3RvdHlwZSwgXCJmaWx0ZXJTdHJpbmdcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJwcm9wZXJ0eVwiXSkoe1xuICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBcIlwiLFxuICAgICAgICAgICAgb25TZXQ6IGZ1bmN0aW9uIChuZXdWYWx1ZSwgdGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0LnF1ZXN0aW9uLmlucHV0SGFzVmFsdWUgPSAhIW5ld1ZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgIF0sIERyb3Bkb3duTGlzdE1vZGVsLnByb3RvdHlwZSwgXCJpbnB1dFN0cmluZ1wiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QoX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcInByb3BlcnR5XCJdKSh7fSlcbiAgICBdLCBEcm9wZG93bkxpc3RNb2RlbC5wcm90b3R5cGUsIFwic2hvd0lucHV0RmllbGRDb21wb25lbnRcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJwcm9wZXJ0eVwiXSkoKVxuICAgIF0sIERyb3Bkb3duTGlzdE1vZGVsLnByb3RvdHlwZSwgXCJhcmlhQWN0aXZlZGVzY2VuZGFudFwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QoX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcInByb3BlcnR5XCJdKSh7XG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgICAgICAgICAgb25TZXQ6IGZ1bmN0aW9uIChuZXdWYWwsIHRhcmdldCkge1xuICAgICAgICAgICAgICAgIGlmIChuZXdWYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0Lmxpc3RNb2RlbC5hZGRTY3JvbGxFdmVudExpc3RlbmVyKGZ1bmN0aW9uIChlKSB7IHRhcmdldC5vblNjcm9sbChlKTsgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXQubGlzdE1vZGVsLnJlbW92ZVNjcm9sbEV2ZW50TGlzdGVuZXIoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgXSwgRHJvcGRvd25MaXN0TW9kZWwucHJvdG90eXBlLCBcImhhc1Njcm9sbFwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QoX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcInByb3BlcnR5XCJdKSh7IGRlZmF1bHRWYWx1ZTogXCJcIiB9KVxuICAgIF0sIERyb3Bkb3duTGlzdE1vZGVsLnByb3RvdHlwZSwgXCJoaW50U3RyaW5nXCIsIHZvaWQgMCk7XG4gICAgcmV0dXJuIERyb3Bkb3duTGlzdE1vZGVsO1xufShfYmFzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiQmFzZVwiXSkpO1xuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvZHJvcGRvd25NdWx0aVNlbGVjdExpc3RNb2RlbC50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL2Ryb3Bkb3duTXVsdGlTZWxlY3RMaXN0TW9kZWwudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBEcm9wZG93bk11bHRpU2VsZWN0TGlzdE1vZGVsICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkRyb3Bkb3duTXVsdGlTZWxlY3RMaXN0TW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBEcm9wZG93bk11bHRpU2VsZWN0TGlzdE1vZGVsOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYmFzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9iYXNlICovIFwiLi9zcmMvYmFzZS50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZHJvcGRvd25MaXN0TW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZHJvcGRvd25MaXN0TW9kZWwgKi8gXCIuL3NyYy9kcm9wZG93bkxpc3RNb2RlbC50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9qc29ub2JqZWN0ICovIFwiLi9zcmMvanNvbm9iamVjdC50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbXVsdGlTZWxlY3RMaXN0TW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vbXVsdGlTZWxlY3RMaXN0TW9kZWwgKi8gXCIuL3NyYy9tdWx0aVNlbGVjdExpc3RNb2RlbC50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc2V0dGluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vc2V0dGluZ3MgKi8gXCIuL3NyYy9zZXR0aW5ncy50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdXRpbHNfZGV2aWNlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi91dGlscy9kZXZpY2VzICovIFwiLi9zcmMvdXRpbHMvZGV2aWNlcy50c1wiKTtcbnZhciBfX2V4dGVuZHMgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xudmFyIF9fZGVjb3JhdGUgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufTtcblxuXG5cblxuXG5cbnZhciBEcm9wZG93bk11bHRpU2VsZWN0TGlzdE1vZGVsID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhEcm9wZG93bk11bHRpU2VsZWN0TGlzdE1vZGVsLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIERyb3Bkb3duTXVsdGlTZWxlY3RMaXN0TW9kZWwocXVlc3Rpb24sIG9uU2VsZWN0aW9uQ2hhbmdlZCkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBxdWVzdGlvbiwgb25TZWxlY3Rpb25DaGFuZ2VkKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5wb3B1cENzc0NsYXNzZXMgPSBcInN2LW11bHRpLXNlbGVjdC1saXN0XCI7XG4gICAgICAgIF90aGlzLnNldEhpZGVTZWxlY3RlZEl0ZW1zKHF1ZXN0aW9uLmhpZGVTZWxlY3RlZEl0ZW1zKTtcbiAgICAgICAgX3RoaXMuc3luY0ZpbHRlclN0cmluZ1BsYWNlaG9sZGVyKCk7XG4gICAgICAgIF90aGlzLmNsb3NlT25TZWxlY3QgPSBxdWVzdGlvbi5jbG9zZU9uU2VsZWN0O1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIERyb3Bkb3duTXVsdGlTZWxlY3RMaXN0TW9kZWwucHJvdG90eXBlLmxvY1N0cnNDaGFuZ2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBfc3VwZXIucHJvdG90eXBlLmxvY1N0cnNDaGFuZ2VkLmNhbGwodGhpcyk7XG4gICAgICAgIHRoaXMuc3luY0ZpbHRlclN0cmluZ1BsYWNlaG9sZGVyKCk7XG4gICAgfTtcbiAgICBEcm9wZG93bk11bHRpU2VsZWN0TGlzdE1vZGVsLnByb3RvdHlwZS51cGRhdGVMaXN0U3RhdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMubGlzdE1vZGVsLnVwZGF0ZVN0YXRlKCk7XG4gICAgICAgIHRoaXMuc3luY0ZpbHRlclN0cmluZ1BsYWNlaG9sZGVyKCk7XG4gICAgfTtcbiAgICBEcm9wZG93bk11bHRpU2VsZWN0TGlzdE1vZGVsLnByb3RvdHlwZS5zeW5jRmlsdGVyU3RyaW5nUGxhY2Vob2xkZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBzZWxlY3RlZEFjdGlvbnMgPSB0aGlzLmdldFNlbGVjdGVkQWN0aW9ucygpO1xuICAgICAgICBpZiAoc2VsZWN0ZWRBY3Rpb25zLmxlbmd0aCB8fCB0aGlzLnF1ZXN0aW9uLnNlbGVjdGVkSXRlbXMubGVuZ3RoIHx8IHRoaXMubGlzdE1vZGVsLmZvY3VzZWRJdGVtKSB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlclN0cmluZ1BsYWNlaG9sZGVyID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJTdHJpbmdQbGFjZWhvbGRlciA9IHRoaXMucXVlc3Rpb24ucGxhY2Vob2xkZXI7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIERyb3Bkb3duTXVsdGlTZWxlY3RMaXN0TW9kZWwucHJvdG90eXBlLmdldFNlbGVjdGVkQWN0aW9ucyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGlzdE1vZGVsLmFjdGlvbnMuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7IHJldHVybiBpdGVtLnNlbGVjdGVkOyB9KTtcbiAgICB9O1xuICAgIERyb3Bkb3duTXVsdGlTZWxlY3RMaXN0TW9kZWwucHJvdG90eXBlLmdldEZvY3VzRmlyc3RJbnB1dFNlbGVjdG9yID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5saXN0TW9kZWwuaGlkZVNlbGVjdGVkSXRlbXMgJiYgX3V0aWxzX2RldmljZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1tcIklzVG91Y2hcIl0gJiYgIXRoaXMuaXNWYWx1ZUVtcHR5KHRoaXMucXVlc3Rpb24udmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pdGVtU2VsZWN0b3I7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5nZXRGb2N1c0ZpcnN0SW5wdXRTZWxlY3Rvci5jYWxsKHRoaXMpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBEcm9wZG93bk11bHRpU2VsZWN0TGlzdE1vZGVsLnByb3RvdHlwZS5jcmVhdGVMaXN0TW9kZWwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciB2aXNpYmxlSXRlbXMgPSB0aGlzLmdldEF2YWlsYWJsZUl0ZW1zKCk7XG4gICAgICAgIHZhciBfb25TZWxlY3Rpb25DaGFuZ2VkID0gdGhpcy5vblNlbGVjdGlvbkNoYW5nZWQ7XG4gICAgICAgIGlmICghX29uU2VsZWN0aW9uQ2hhbmdlZCkge1xuICAgICAgICAgICAgX29uU2VsZWN0aW9uQ2hhbmdlZCA9IGZ1bmN0aW9uIChpdGVtLCBzdGF0dXMpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5yZXNldEZpbHRlclN0cmluZygpO1xuICAgICAgICAgICAgICAgIGlmIChpdGVtLnZhbHVlID09PSBcInNlbGVjdGFsbFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIF90aGlzLnNlbGVjdEFsbEl0ZW1zKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN0YXR1cyA9PT0gXCJhZGRlZFwiICYmIGl0ZW0udmFsdWUgPT09IF9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fW1wic2V0dGluZ3NcIl0ubm9uZUl0ZW1WYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBfdGhpcy5zZWxlY3ROb25lSXRlbSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChzdGF0dXMgPT09IFwiYWRkZWRcIikge1xuICAgICAgICAgICAgICAgICAgICBfdGhpcy5zZWxlY3RJdGVtKGl0ZW0udmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChzdGF0dXMgPT09IFwicmVtb3ZlZFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIF90aGlzLmRlc2VsZWN0SXRlbShpdGVtLnZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgX3RoaXMucG9wdXBSZWNhbGN1bGF0ZVBvc2l0aW9uKGZhbHNlKTtcbiAgICAgICAgICAgICAgICBpZiAoX3RoaXMuY2xvc2VPblNlbGVjdCkge1xuICAgICAgICAgICAgICAgICAgICBfdGhpcy5wb3B1cE1vZGVsLmlzVmlzaWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHJlcyA9IG5ldyBfbXVsdGlTZWxlY3RMaXN0TW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcIk11bHRpU2VsZWN0TGlzdE1vZGVsXCJdKHZpc2libGVJdGVtcywgX29uU2VsZWN0aW9uQ2hhbmdlZCwgZmFsc2UsIHVuZGVmaW5lZCwgdGhpcy5xdWVzdGlvbi5jaG9pY2VzTGF6eUxvYWRFbmFibGVkID8gdGhpcy5saXN0TW9kZWxGaWx0ZXJTdHJpbmdDaGFuZ2VkIDogdW5kZWZpbmVkLCB0aGlzLmxpc3RFbGVtZW50SWQpO1xuICAgICAgICByZXMuZm9yY2VTaG93RmlsdGVyID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9O1xuICAgIERyb3Bkb3duTXVsdGlTZWxlY3RMaXN0TW9kZWwucHJvdG90eXBlLnJlc2V0RmlsdGVyU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBfc3VwZXIucHJvdG90eXBlLnJlc2V0RmlsdGVyU3RyaW5nLmNhbGwodGhpcyk7XG4gICAgICAgIHRoaXMuaW5wdXRTdHJpbmcgPSBudWxsO1xuICAgICAgICB0aGlzLmhpbnRTdHJpbmcgPSBcIlwiO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KERyb3Bkb3duTXVsdGlTZWxlY3RMaXN0TW9kZWwucHJvdG90eXBlLCBcInNob3VsZFJlc2V0QWZ0ZXJDYW5jZWxcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBfdXRpbHNfZGV2aWNlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fW1wiSXNUb3VjaFwiXSAmJiAhdGhpcy5jbG9zZU9uU2VsZWN0O1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgRHJvcGRvd25NdWx0aVNlbGVjdExpc3RNb2RlbC5wcm90b3R5cGUuY3JlYXRlUG9wdXAgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUuY3JlYXRlUG9wdXAuY2FsbCh0aGlzKTtcbiAgICAgICAgdGhpcy5wb3B1cE1vZGVsLm9uRm9vdGVyQWN0aW9uc0NyZWF0ZWQuYWRkKGZ1bmN0aW9uIChfLCBvcHQpIHtcbiAgICAgICAgICAgIGlmIChfdGhpcy5zaG91bGRSZXNldEFmdGVyQ2FuY2VsKSB7XG4gICAgICAgICAgICAgICAgb3B0LmFjdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGlkOiBcInN2LWRyb3Bkb3duLWRvbmUtYnV0dG9uXCIsXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBfdGhpcy5kb25lQnV0dG9uQ2FwdGlvbixcbiAgICAgICAgICAgICAgICAgICAgaW5uZXJDc3M6IFwic3YtcG9wdXBfX2J1dHRvbi0tZG9uZVwiLFxuICAgICAgICAgICAgICAgICAgICBuZWVkU3BhY2U6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbjogZnVuY3Rpb24gKCkgeyBfdGhpcy5wb3B1cE1vZGVsLmlzVmlzaWJsZSA9IGZhbHNlOyB9LFxuICAgICAgICAgICAgICAgICAgICBlbmFibGVkOiBuZXcgX2Jhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkNvbXB1dGVkVXBkYXRlclwiXShmdW5jdGlvbiAoKSB7IHJldHVybiAhX3RoaXMuaXNUd29WYWx1ZUVxdWFscyhfdGhpcy5xdWVzdGlvbi5yZW5kZXJlZFZhbHVlLCBfdGhpcy5wcmV2aW91c1ZhbHVlKTsgfSlcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucG9wdXBNb2RlbC5vblZpc2liaWxpdHlDaGFuZ2VkLmFkZChmdW5jdGlvbiAoXywgb3B0KSB7XG4gICAgICAgICAgICBpZiAoX3RoaXMuc2hvdWxkUmVzZXRBZnRlckNhbmNlbCAmJiBvcHQuaXNWaXNpYmxlKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMucHJldmlvdXNWYWx1ZSA9IFtdLmNvbmNhdChfdGhpcy5xdWVzdGlvbi5yZW5kZXJlZFZhbHVlIHx8IFtdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucG9wdXBNb2RlbC5vbkNhbmNlbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChfdGhpcy5zaG91bGRSZXNldEFmdGVyQ2FuY2VsKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMucXVlc3Rpb24ucmVuZGVyZWRWYWx1ZSA9IF90aGlzLnByZXZpb3VzVmFsdWU7XG4gICAgICAgICAgICAgICAgX3RoaXMudXBkYXRlTGlzdFN0YXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfTtcbiAgICBEcm9wZG93bk11bHRpU2VsZWN0TGlzdE1vZGVsLnByb3RvdHlwZS5zZWxlY3RBbGxJdGVtcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5xdWVzdGlvbi50b2dnbGVTZWxlY3RBbGwoKTtcbiAgICAgICAgdGhpcy51cGRhdGVMaXN0U3RhdGUoKTtcbiAgICB9O1xuICAgIERyb3Bkb3duTXVsdGlTZWxlY3RMaXN0TW9kZWwucHJvdG90eXBlLnNlbGVjdE5vbmVJdGVtID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkVmFsdWUgPSBbX3NldHRpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bXCJzZXR0aW5nc1wiXS5ub25lSXRlbVZhbHVlXTtcbiAgICAgICAgdGhpcy51cGRhdGVMaXN0U3RhdGUoKTtcbiAgICB9O1xuICAgIERyb3Bkb3duTXVsdGlTZWxlY3RMaXN0TW9kZWwucHJvdG90eXBlLnNlbGVjdEl0ZW0gPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgICAgdmFyIG5ld1ZhbHVlID0gW10uY29uY2F0KHRoaXMucXVlc3Rpb24ucmVuZGVyZWRWYWx1ZSB8fCBbXSk7XG4gICAgICAgIG5ld1ZhbHVlLnB1c2goaWQpO1xuICAgICAgICB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkVmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgICAgdGhpcy51cGRhdGVMaXN0U3RhdGUoKTtcbiAgICB9O1xuICAgIERyb3Bkb3duTXVsdGlTZWxlY3RMaXN0TW9kZWwucHJvdG90eXBlLmRlc2VsZWN0SXRlbSA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgICB2YXIgbmV3VmFsdWUgPSBbXS5jb25jYXQodGhpcy5xdWVzdGlvbi5yZW5kZXJlZFZhbHVlIHx8IFtdKTtcbiAgICAgICAgbmV3VmFsdWUuc3BsaWNlKG5ld1ZhbHVlLmluZGV4T2YoaWQpLCAxKTtcbiAgICAgICAgdGhpcy5xdWVzdGlvbi5yZW5kZXJlZFZhbHVlID0gbmV3VmFsdWU7XG4gICAgICAgIHRoaXMuYXBwbHlIaW50U3RyaW5nKHRoaXMubGlzdE1vZGVsLmZvY3VzZWRJdGVtKTtcbiAgICAgICAgdGhpcy51cGRhdGVMaXN0U3RhdGUoKTtcbiAgICB9O1xuICAgIERyb3Bkb3duTXVsdGlTZWxlY3RMaXN0TW9kZWwucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBfc3VwZXIucHJvdG90eXBlLmNsZWFyLmNhbGwodGhpcyk7XG4gICAgICAgIHRoaXMuc3luY0ZpbHRlclN0cmluZ1BsYWNlaG9sZGVyKCk7XG4gICAgfTtcbiAgICBEcm9wZG93bk11bHRpU2VsZWN0TGlzdE1vZGVsLnByb3RvdHlwZS5vbkNsZWFyID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUub25DbGVhci5jYWxsKHRoaXMsIGV2ZW50KTtcbiAgICAgICAgdGhpcy51cGRhdGVMaXN0U3RhdGUoKTtcbiAgICB9O1xuICAgIERyb3Bkb3duTXVsdGlTZWxlY3RMaXN0TW9kZWwucHJvdG90eXBlLnNldEhpZGVTZWxlY3RlZEl0ZW1zID0gZnVuY3Rpb24gKG5ld1ZhbHVlKSB7XG4gICAgICAgIHRoaXMubGlzdE1vZGVsLmhpZGVTZWxlY3RlZEl0ZW1zID0gbmV3VmFsdWU7XG4gICAgICAgIHRoaXMudXBkYXRlTGlzdFN0YXRlKCk7XG4gICAgfTtcbiAgICBEcm9wZG93bk11bHRpU2VsZWN0TGlzdE1vZGVsLnByb3RvdHlwZS5yZW1vdmVMYXN0U2VsZWN0ZWRJdGVtID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmRlc2VsZWN0SXRlbSh0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkVmFsdWVbdGhpcy5xdWVzdGlvbi5yZW5kZXJlZFZhbHVlLmxlbmd0aCAtIDFdKTtcbiAgICAgICAgdGhpcy5wb3B1cFJlY2FsY3VsYXRlUG9zaXRpb24oZmFsc2UpO1xuICAgIH07XG4gICAgRHJvcGRvd25NdWx0aVNlbGVjdExpc3RNb2RlbC5wcm90b3R5cGUuaW5wdXRLZXlIYW5kbGVyID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIGlmIChldmVudC5rZXlDb2RlID09PSA4ICYmICF0aGlzLmZpbHRlclN0cmluZykge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVMYXN0U2VsZWN0ZWRJdGVtKCk7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIERyb3Bkb3duTXVsdGlTZWxlY3RMaXN0TW9kZWwucHJvdG90eXBlLnNldElucHV0U3RyaW5nRnJvbVNlbGVjdGVkSXRlbSA9IGZ1bmN0aW9uIChuZXdWYWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5xdWVzdGlvbi5zZWFyY2hFbmFibGVkKSB7XG4gICAgICAgICAgICB0aGlzLmlucHV0U3RyaW5nID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH07XG4gICAgRHJvcGRvd25NdWx0aVNlbGVjdExpc3RNb2RlbC5wcm90b3R5cGUuZm9jdXNJdGVtT25DbGlja0FuZFBvcHVwID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm47XG4gICAgfTtcbiAgICBEcm9wZG93bk11bHRpU2VsZWN0TGlzdE1vZGVsLnByb3RvdHlwZS5vbkVzY2FwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH07XG4gICAgRHJvcGRvd25NdWx0aVNlbGVjdExpc3RNb2RlbC5wcm90b3R5cGUuYmVmb3JlU2Nyb2xsVG9Gb2N1c2VkSXRlbSA9IGZ1bmN0aW9uIChmb2N1c2VkSXRlbSkge1xuICAgICAgICByZXR1cm47XG4gICAgfTtcbiAgICBEcm9wZG93bk11bHRpU2VsZWN0TGlzdE1vZGVsLnByb3RvdHlwZS5hZnRlclNjcm9sbFRvRm9jdXNlZEl0ZW0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKCEoKF9hID0gdGhpcy5saXN0TW9kZWwuZm9jdXNlZEl0ZW0pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zZWxlY3RlZCkpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwbHlIaW50U3RyaW5nKHRoaXMubGlzdE1vZGVsLmZvY3VzZWRJdGVtIHx8IHRoaXMucXVlc3Rpb24uc2VsZWN0ZWRJdGVtKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaGludFN0cmluZyA9IFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zeW5jRmlsdGVyU3RyaW5nUGxhY2Vob2xkZXIoKTtcbiAgICB9O1xuICAgIERyb3Bkb3duTXVsdGlTZWxlY3RMaXN0TW9kZWwucHJvdG90eXBlLm9uUHJvcGVydHlDaGFuZ2VkSGFuZGxlciA9IGZ1bmN0aW9uIChzZW5kZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5vblByb3BlcnR5Q2hhbmdlZEhhbmRsZXIuY2FsbCh0aGlzLCBzZW5kZXIsIG9wdGlvbnMpO1xuICAgICAgICBpZiAob3B0aW9ucy5uYW1lID09PSBcInZhbHVlXCIgfHwgb3B0aW9ucy5uYW1lID09PSBcInJlbmRlcmVkVmFsdWVcIikge1xuICAgICAgICAgICAgdGhpcy5zeW5jRmlsdGVyU3RyaW5nUGxhY2Vob2xkZXIoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wicHJvcGVydHlcIl0pKHsgZGVmYXVsdFZhbHVlOiBcIlwiIH0pXG4gICAgXSwgRHJvcGRvd25NdWx0aVNlbGVjdExpc3RNb2RlbC5wcm90b3R5cGUsIFwiZmlsdGVyU3RyaW5nUGxhY2Vob2xkZXJcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJwcm9wZXJ0eVwiXSkoeyBkZWZhdWx0VmFsdWU6IHRydWUgfSlcbiAgICBdLCBEcm9wZG93bk11bHRpU2VsZWN0TGlzdE1vZGVsLnByb3RvdHlwZSwgXCJjbG9zZU9uU2VsZWN0XCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wicHJvcGVydHlcIl0pKClcbiAgICBdLCBEcm9wZG93bk11bHRpU2VsZWN0TGlzdE1vZGVsLnByb3RvdHlwZSwgXCJwcmV2aW91c1ZhbHVlXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wicHJvcGVydHlcIl0pKHsgbG9jYWxpemFibGU6IHsgZGVmYXVsdFN0cjogXCJ0YWdib3hEb25lQnV0dG9uQ2FwdGlvblwiIH0gfSlcbiAgICBdLCBEcm9wZG93bk11bHRpU2VsZWN0TGlzdE1vZGVsLnByb3RvdHlwZSwgXCJkb25lQnV0dG9uQ2FwdGlvblwiLCB2b2lkIDApO1xuICAgIHJldHVybiBEcm9wZG93bk11bHRpU2VsZWN0TGlzdE1vZGVsO1xufShfZHJvcGRvd25MaXN0TW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIkRyb3Bkb3duTGlzdE1vZGVsXCJdKSk7XG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9keFN1cnZleVNlcnZpY2UudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL2R4U3VydmV5U2VydmljZS50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogZHhTdXJ2ZXlTZXJ2aWNlICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImR4U3VydmV5U2VydmljZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGR4U3VydmV5U2VydmljZTsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NldHRpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3NldHRpbmdzICovIFwiLi9zcmMvc2V0dGluZ3MudHNcIik7XG5cbi8qKlxuICogVGhlIGNsYXNzIGNvbnRhaW5zIG1ldGhvZHMgdG8gd29yayB3aXRoIGFwaS5zdXJ2ZXlqcy5pbyBzZXJ2aWNlLlxuICovXG52YXIgZHhTdXJ2ZXlTZXJ2aWNlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIGR4U3VydmV5U2VydmljZSgpIHtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGR4U3VydmV5U2VydmljZSwgXCJzZXJ2aWNlVXJsXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gX3NldHRpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzZXR0aW5nc1wiXS53ZWIuc3VydmV5U2VydmljZVVybDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICBfc2V0dGluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInNldHRpbmdzXCJdLndlYi5zdXJ2ZXlTZXJ2aWNlVXJsID0gdmFsO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgZHhTdXJ2ZXlTZXJ2aWNlLnByb3RvdHlwZS5sb2FkU3VydmV5ID0gZnVuY3Rpb24gKHN1cnZleUlkLCBvbkxvYWQpIHtcbiAgICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICB4aHIub3BlbihcIkdFVFwiLCBkeFN1cnZleVNlcnZpY2Uuc2VydmljZVVybCArIFwiL2dldFN1cnZleT9zdXJ2ZXlJZD1cIiArIHN1cnZleUlkKTtcbiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIik7XG4gICAgICAgIHhoci5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gSlNPTi5wYXJzZSh4aHIucmVzcG9uc2UpO1xuICAgICAgICAgICAgb25Mb2FkKHhoci5zdGF0dXMgPT0gMjAwLCByZXN1bHQsIHhoci5yZXNwb25zZSk7XG4gICAgICAgIH07XG4gICAgICAgIHhoci5zZW5kKCk7XG4gICAgfTtcbiAgICBkeFN1cnZleVNlcnZpY2UucHJvdG90eXBlLmdldFN1cnZleUpzb25BbmRJc0NvbXBsZXRlZCA9IGZ1bmN0aW9uIChzdXJ2ZXlJZCwgY2xpZW50SWQsIG9uTG9hZCkge1xuICAgICAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgIHhoci5vcGVuKFwiR0VUXCIsIGR4U3VydmV5U2VydmljZS5zZXJ2aWNlVXJsICtcbiAgICAgICAgICAgIFwiL2dldFN1cnZleUFuZElzQ29tcGxldGVkP3N1cnZleUlkPVwiICtcbiAgICAgICAgICAgIHN1cnZleUlkICtcbiAgICAgICAgICAgIFwiJmNsaWVudElkPVwiICtcbiAgICAgICAgICAgIGNsaWVudElkKTtcbiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIik7XG4gICAgICAgIHhoci5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gSlNPTi5wYXJzZSh4aHIucmVzcG9uc2UpO1xuICAgICAgICAgICAgdmFyIHN1cnZleUpzb24gPSByZXN1bHQgPyByZXN1bHQuc3VydmV5IDogbnVsbDtcbiAgICAgICAgICAgIHZhciBpc0NvbXBsZXRlZCA9IHJlc3VsdCA/IHJlc3VsdC5pc0NvbXBsZXRlZCA6IG51bGw7XG4gICAgICAgICAgICBvbkxvYWQoeGhyLnN0YXR1cyA9PSAyMDAsIHN1cnZleUpzb24sIGlzQ29tcGxldGVkLCB4aHIucmVzcG9uc2UpO1xuICAgICAgICB9O1xuICAgICAgICB4aHIuc2VuZCgpO1xuICAgIH07XG4gICAgZHhTdXJ2ZXlTZXJ2aWNlLnByb3RvdHlwZS5zZW5kUmVzdWx0ID0gZnVuY3Rpb24gKHBvc3RJZCwgcmVzdWx0LCBvblNlbmRSZXN1bHQsIGNsaWVudElkLCBpc1BhcnRpYWxDb21wbGV0ZWQpIHtcbiAgICAgICAgaWYgKGNsaWVudElkID09PSB2b2lkIDApIHsgY2xpZW50SWQgPSBudWxsOyB9XG4gICAgICAgIGlmIChpc1BhcnRpYWxDb21wbGV0ZWQgPT09IHZvaWQgMCkgeyBpc1BhcnRpYWxDb21wbGV0ZWQgPSBmYWxzZTsgfVxuICAgICAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgIHhoci5vcGVuKFwiUE9TVFwiLCBkeFN1cnZleVNlcnZpY2Uuc2VydmljZVVybCArIFwiL3Bvc3QvXCIpO1xuICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcImFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLThcIik7XG4gICAgICAgIHZhciBkYXRhID0geyBwb3N0SWQ6IHBvc3RJZCwgc3VydmV5UmVzdWx0OiBKU09OLnN0cmluZ2lmeShyZXN1bHQpIH07XG4gICAgICAgIGlmIChjbGllbnRJZClcbiAgICAgICAgICAgIGRhdGFbXCJjbGllbnRJZFwiXSA9IGNsaWVudElkO1xuICAgICAgICBpZiAoaXNQYXJ0aWFsQ29tcGxldGVkKVxuICAgICAgICAgICAgZGF0YVtcImlzUGFydGlhbENvbXBsZXRlZFwiXSA9IHRydWU7XG4gICAgICAgIHZhciBkYXRhU3RyaW5naWZ5ID0gSlNPTi5zdHJpbmdpZnkoZGF0YSk7XG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgICAgeGhyLm9ubG9hZCA9IHhoci5vbmVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFvblNlbmRSZXN1bHQpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgb25TZW5kUmVzdWx0KHhoci5zdGF0dXMgPT09IDIwMCwgeGhyLnJlc3BvbnNlLCB4aHIpO1xuICAgICAgICB9O1xuICAgICAgICB4aHIuc2VuZChkYXRhU3RyaW5naWZ5KTtcbiAgICB9O1xuICAgIGR4U3VydmV5U2VydmljZS5wcm90b3R5cGUuc2VuZEZpbGUgPSBmdW5jdGlvbiAocG9zdElkLCBmaWxlLCBvblNlbmRGaWxlKSB7XG4gICAgICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgeGhyLm9ubG9hZCA9IHhoci5vbmVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFvblNlbmRGaWxlKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIG9uU2VuZEZpbGUoeGhyLnN0YXR1cyA9PSAyMDAsIEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlKSk7XG4gICAgICAgIH07XG4gICAgICAgIHhoci5vcGVuKFwiUE9TVFwiLCBkeFN1cnZleVNlcnZpY2Uuc2VydmljZVVybCArIFwiL3VwbG9hZC9cIiwgdHJ1ZSk7XG4gICAgICAgIHZhciBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoXCJmaWxlXCIsIGZpbGUpO1xuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoXCJwb3N0SWRcIiwgcG9zdElkKTtcbiAgICAgICAgeGhyLnNlbmQoZm9ybURhdGEpO1xuICAgIH07XG4gICAgZHhTdXJ2ZXlTZXJ2aWNlLnByb3RvdHlwZS5nZXRSZXN1bHQgPSBmdW5jdGlvbiAocmVzdWx0SWQsIG5hbWUsIG9uR2V0UmVzdWx0KSB7XG4gICAgICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgdmFyIGRhdGEgPSBcInJlc3VsdElkPVwiICsgcmVzdWx0SWQgKyBcIiZuYW1lPVwiICsgbmFtZTtcbiAgICAgICAgeGhyLm9wZW4oXCJHRVRcIiwgZHhTdXJ2ZXlTZXJ2aWNlLnNlcnZpY2VVcmwgKyBcIi9nZXRSZXN1bHQ/XCIgKyBkYXRhKTtcbiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIik7XG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBudWxsO1xuICAgICAgICAgICAgdmFyIGxpc3QgPSBudWxsO1xuICAgICAgICAgICAgaWYgKHhoci5zdGF0dXMgPT0gMjAwKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gSlNPTi5wYXJzZSh4aHIucmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgIGxpc3QgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gcmVzdWx0LlF1ZXN0aW9uUmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBlbCA9IHsgbmFtZToga2V5LCB2YWx1ZTogcmVzdWx0LlF1ZXN0aW9uUmVzdWx0W2tleV0gfTtcbiAgICAgICAgICAgICAgICAgICAgbGlzdC5wdXNoKGVsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvbkdldFJlc3VsdCh4aHIuc3RhdHVzID09IDIwMCwgcmVzdWx0LCBsaXN0LCB4aHIucmVzcG9uc2UpO1xuICAgICAgICB9O1xuICAgICAgICB4aHIuc2VuZCgpO1xuICAgIH07XG4gICAgZHhTdXJ2ZXlTZXJ2aWNlLnByb3RvdHlwZS5pc0NvbXBsZXRlZCA9IGZ1bmN0aW9uIChyZXN1bHRJZCwgY2xpZW50SWQsIG9uSXNDb21wbGV0ZWQpIHtcbiAgICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICB2YXIgZGF0YSA9IFwicmVzdWx0SWQ9XCIgKyByZXN1bHRJZCArIFwiJmNsaWVudElkPVwiICsgY2xpZW50SWQ7XG4gICAgICAgIHhoci5vcGVuKFwiR0VUXCIsIGR4U3VydmV5U2VydmljZS5zZXJ2aWNlVXJsICsgXCIvaXNDb21wbGV0ZWQ/XCIgKyBkYXRhKTtcbiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIik7XG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBudWxsO1xuICAgICAgICAgICAgaWYgKHhoci5zdGF0dXMgPT0gMjAwKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gSlNPTi5wYXJzZSh4aHIucmVzcG9uc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb25Jc0NvbXBsZXRlZCh4aHIuc3RhdHVzID09IDIwMCwgcmVzdWx0LCB4aHIucmVzcG9uc2UpO1xuICAgICAgICB9O1xuICAgICAgICB4aHIuc2VuZCgpO1xuICAgIH07XG4gICAgcmV0dXJuIGR4U3VydmV5U2VydmljZTtcbn0oKSk7XG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9lbGVtZW50LWhlbHBlci50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9lbGVtZW50LWhlbHBlci50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBFbGVtZW50SGVscGVyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkVsZW1lbnRIZWxwZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBFbGVtZW50SGVscGVyOyB9KTtcbnZhciBFbGVtZW50SGVscGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEVsZW1lbnRIZWxwZXIoKSB7XG4gICAgfVxuICAgIEVsZW1lbnRIZWxwZXIuZm9jdXNFbGVtZW50ID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICAgICAgZWxlbWVudCAmJiBlbGVtZW50LmZvY3VzKCk7XG4gICAgfTtcbiAgICBFbGVtZW50SGVscGVyLnZpc2liaWxpdHkgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICB2YXIgc3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShub2RlKTtcbiAgICAgICAgaWYgKHN0eWxlLmRpc3BsYXkgPT09IFwibm9uZVwiIHx8IHN0eWxlLnZpc2liaWxpdHkgPT09IFwiaGlkZGVuXCIpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiBub2RlLnBhcmVudEVsZW1lbnQgPyB0aGlzLnZpc2liaWxpdHkobm9kZS5wYXJlbnRFbGVtZW50KSA6IHRydWU7XG4gICAgfTtcbiAgICBFbGVtZW50SGVscGVyLmdldE5leHRFbGVtZW50UHJlb3JkZXIgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gISFlbGVtZW50Lm5leHRFbGVtZW50U2libGluZyA/IGVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nIDogZWxlbWVudC5wYXJlbnRFbGVtZW50LmZpcnN0RWxlbWVudENoaWxkO1xuICAgICAgICBpZiAodGhpcy52aXNpYmlsaXR5KHJlc3VsdCkpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXROZXh0RWxlbWVudFByZW9yZGVyKHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEVsZW1lbnRIZWxwZXIuZ2V0TmV4dEVsZW1lbnRQb3N0b3JkZXIgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gISFlbGVtZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmcgPyBlbGVtZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmcgOiBlbGVtZW50LnBhcmVudEVsZW1lbnQubGFzdEVsZW1lbnRDaGlsZDtcbiAgICAgICAgaWYgKHRoaXMudmlzaWJpbGl0eShyZXN1bHQpKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TmV4dEVsZW1lbnRQb3N0b3JkZXIocmVzdWx0KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgRWxlbWVudEhlbHBlci5oYXNIb3Jpem9udGFsU2Nyb2xsZXIgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgICAgICBpZiAoISFlbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gZWxlbWVudC5zY3JvbGxXaWR0aCA+IGVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gICAgRWxlbWVudEhlbHBlci5oYXNWZXJ0aWNhbFNjcm9sbGVyID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICAgICAgaWYgKCEhZWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQuc2Nyb2xsSGVpZ2h0ID4gZWxlbWVudC5vZmZzZXRIZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gICAgcmV0dXJuIEVsZW1lbnRIZWxwZXI7XG59KCkpO1xuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvZW50cmllcy9jaHVua3MvbG9jYWxpemF0aW9uLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9lbnRyaWVzL2NodW5rcy9sb2NhbGl6YXRpb24udHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIG5vIGV4cG9ydHMgcHJvdmlkZWQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2xvY2FsaXphdGlvbl9hcmFiaWNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL2xvY2FsaXphdGlvbi9hcmFiaWMgKi8gXCIuL3NyYy9sb2NhbGl6YXRpb24vYXJhYmljLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9sb2NhbGl6YXRpb25fYmFzcXVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9sb2NhbGl6YXRpb24vYmFzcXVlICovIFwiLi9zcmMvbG9jYWxpemF0aW9uL2Jhc3F1ZS50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbG9jYWxpemF0aW9uX2J1bGdhcmlhbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbG9jYWxpemF0aW9uL2J1bGdhcmlhbiAqLyBcIi4vc3JjL2xvY2FsaXphdGlvbi9idWxnYXJpYW4udHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2xvY2FsaXphdGlvbl9jYXRhbGFuX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9sb2NhbGl6YXRpb24vY2F0YWxhbiAqLyBcIi4vc3JjL2xvY2FsaXphdGlvbi9jYXRhbGFuLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9sb2NhbGl6YXRpb25fY3JvYXRpYW5fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL2xvY2FsaXphdGlvbi9jcm9hdGlhbiAqLyBcIi4vc3JjL2xvY2FsaXphdGlvbi9jcm9hdGlhbi50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbG9jYWxpemF0aW9uX2N6ZWNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9sb2NhbGl6YXRpb24vY3plY2ggKi8gXCIuL3NyYy9sb2NhbGl6YXRpb24vY3plY2gudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2xvY2FsaXphdGlvbl9kYW5pc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL2xvY2FsaXphdGlvbi9kYW5pc2ggKi8gXCIuL3NyYy9sb2NhbGl6YXRpb24vZGFuaXNoLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9sb2NhbGl6YXRpb25fZHV0Y2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL2xvY2FsaXphdGlvbi9kdXRjaCAqLyBcIi4vc3JjL2xvY2FsaXphdGlvbi9kdXRjaC50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbG9jYWxpemF0aW9uX25sX0JFX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9sb2NhbGl6YXRpb24vbmwtQkUgKi8gXCIuL3NyYy9sb2NhbGl6YXRpb24vbmwtQkUudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2xvY2FsaXphdGlvbl9lc3Rvbmlhbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbG9jYWxpemF0aW9uL2VzdG9uaWFuICovIFwiLi9zcmMvbG9jYWxpemF0aW9uL2VzdG9uaWFuLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9sb2NhbGl6YXRpb25fZmlubmlzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL2xvY2FsaXphdGlvbi9maW5uaXNoICovIFwiLi9zcmMvbG9jYWxpemF0aW9uL2Zpbm5pc2gudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2xvY2FsaXphdGlvbl9mcmVuY2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9sb2NhbGl6YXRpb24vZnJlbmNoICovIFwiLi9zcmMvbG9jYWxpemF0aW9uL2ZyZW5jaC50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbG9jYWxpemF0aW9uX2dlb3JnaWFuX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbG9jYWxpemF0aW9uL2dlb3JnaWFuICovIFwiLi9zcmMvbG9jYWxpemF0aW9uL2dlb3JnaWFuLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9sb2NhbGl6YXRpb25fZ2VybWFuX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbG9jYWxpemF0aW9uL2dlcm1hbiAqLyBcIi4vc3JjL2xvY2FsaXphdGlvbi9nZXJtYW4udHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2xvY2FsaXphdGlvbl9ncmVla19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL2xvY2FsaXphdGlvbi9ncmVlayAqLyBcIi4vc3JjL2xvY2FsaXphdGlvbi9ncmVlay50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbG9jYWxpemF0aW9uX2hlYnJld19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL2xvY2FsaXphdGlvbi9oZWJyZXcgKi8gXCIuL3NyYy9sb2NhbGl6YXRpb24vaGVicmV3LnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9sb2NhbGl6YXRpb25faGluZGlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9sb2NhbGl6YXRpb24vaGluZGkgKi8gXCIuL3NyYy9sb2NhbGl6YXRpb24vaGluZGkudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2xvY2FsaXphdGlvbl9odW5nYXJpYW5fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE3X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9sb2NhbGl6YXRpb24vaHVuZ2FyaWFuICovIFwiLi9zcmMvbG9jYWxpemF0aW9uL2h1bmdhcmlhbi50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbG9jYWxpemF0aW9uX2ljZWxhbmRpY19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMThfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL2xvY2FsaXphdGlvbi9pY2VsYW5kaWMgKi8gXCIuL3NyYy9sb2NhbGl6YXRpb24vaWNlbGFuZGljLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9sb2NhbGl6YXRpb25faW5kb25lc2lhbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL2xvY2FsaXphdGlvbi9pbmRvbmVzaWFuICovIFwiLi9zcmMvbG9jYWxpemF0aW9uL2luZG9uZXNpYW4udHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2xvY2FsaXphdGlvbl9pdGFsaWFuX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbG9jYWxpemF0aW9uL2l0YWxpYW4gKi8gXCIuL3NyYy9sb2NhbGl6YXRpb24vaXRhbGlhbi50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbG9jYWxpemF0aW9uX2phcGFuZXNlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbG9jYWxpemF0aW9uL2phcGFuZXNlICovIFwiLi9zcmMvbG9jYWxpemF0aW9uL2phcGFuZXNlLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9sb2NhbGl6YXRpb25fa2F6YWtoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbG9jYWxpemF0aW9uL2themFraCAqLyBcIi4vc3JjL2xvY2FsaXphdGlvbi9rYXpha2gudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2xvY2FsaXphdGlvbl9rb3JlYW5fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9sb2NhbGl6YXRpb24va29yZWFuICovIFwiLi9zcmMvbG9jYWxpemF0aW9uL2tvcmVhbi50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbG9jYWxpemF0aW9uX2xhdHZpYW5fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9sb2NhbGl6YXRpb24vbGF0dmlhbiAqLyBcIi4vc3JjL2xvY2FsaXphdGlvbi9sYXR2aWFuLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9sb2NhbGl6YXRpb25fbGl0aHVhbmlhbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL2xvY2FsaXphdGlvbi9saXRodWFuaWFuICovIFwiLi9zcmMvbG9jYWxpemF0aW9uL2xpdGh1YW5pYW4udHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2xvY2FsaXphdGlvbl9tYWNlZG9uaWFuX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbG9jYWxpemF0aW9uL21hY2Vkb25pYW4gKi8gXCIuL3NyYy9sb2NhbGl6YXRpb24vbWFjZWRvbmlhbi50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbG9jYWxpemF0aW9uX21hbGF5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbG9jYWxpemF0aW9uL21hbGF5ICovIFwiLi9zcmMvbG9jYWxpemF0aW9uL21hbGF5LnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9sb2NhbGl6YXRpb25fbm9yd2VnaWFuX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yOF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbG9jYWxpemF0aW9uL25vcndlZ2lhbiAqLyBcIi4vc3JjL2xvY2FsaXphdGlvbi9ub3J3ZWdpYW4udHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2xvY2FsaXphdGlvbl9wZXJzaWFuX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yOV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbG9jYWxpemF0aW9uL3BlcnNpYW4gKi8gXCIuL3NyYy9sb2NhbGl6YXRpb24vcGVyc2lhbi50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbG9jYWxpemF0aW9uX3BvbGlzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL2xvY2FsaXphdGlvbi9wb2xpc2ggKi8gXCIuL3NyYy9sb2NhbGl6YXRpb24vcG9saXNoLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9sb2NhbGl6YXRpb25fcG9ydHVndWVzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL2xvY2FsaXphdGlvbi9wb3J0dWd1ZXNlICovIFwiLi9zcmMvbG9jYWxpemF0aW9uL3BvcnR1Z3Vlc2UudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2xvY2FsaXphdGlvbl9wb3J0dWd1ZXNlX2JyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbG9jYWxpemF0aW9uL3BvcnR1Z3Vlc2UtYnIgKi8gXCIuL3NyYy9sb2NhbGl6YXRpb24vcG9ydHVndWVzZS1ici50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbG9jYWxpemF0aW9uX3JvbWFuaWFuX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbG9jYWxpemF0aW9uL3JvbWFuaWFuICovIFwiLi9zcmMvbG9jYWxpemF0aW9uL3JvbWFuaWFuLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9sb2NhbGl6YXRpb25fcnVzc2lhbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL2xvY2FsaXphdGlvbi9ydXNzaWFuICovIFwiLi9zcmMvbG9jYWxpemF0aW9uL3J1c3NpYW4udHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2xvY2FsaXphdGlvbl9zZXJiaWFuX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbG9jYWxpemF0aW9uL3NlcmJpYW4gKi8gXCIuL3NyYy9sb2NhbGl6YXRpb24vc2VyYmlhbi50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbG9jYWxpemF0aW9uX3NpbXBsaWZpZWRfY2hpbmVzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL2xvY2FsaXphdGlvbi9zaW1wbGlmaWVkLWNoaW5lc2UgKi8gXCIuL3NyYy9sb2NhbGl6YXRpb24vc2ltcGxpZmllZC1jaGluZXNlLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9sb2NhbGl6YXRpb25fc2xvdmFrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbG9jYWxpemF0aW9uL3Nsb3ZhayAqLyBcIi4vc3JjL2xvY2FsaXphdGlvbi9zbG92YWsudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2xvY2FsaXphdGlvbl9zcGFuaXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zOF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbG9jYWxpemF0aW9uL3NwYW5pc2ggKi8gXCIuL3NyYy9sb2NhbGl6YXRpb24vc3BhbmlzaC50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbG9jYWxpemF0aW9uX3N3YWhpbGlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzM5X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9sb2NhbGl6YXRpb24vc3dhaGlsaSAqLyBcIi4vc3JjL2xvY2FsaXphdGlvbi9zd2FoaWxpLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9sb2NhbGl6YXRpb25fc3dlZGlzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNDBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL2xvY2FsaXphdGlvbi9zd2VkaXNoICovIFwiLi9zcmMvbG9jYWxpemF0aW9uL3N3ZWRpc2gudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2xvY2FsaXphdGlvbl90YWppa19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNDFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL2xvY2FsaXphdGlvbi90YWppayAqLyBcIi4vc3JjL2xvY2FsaXphdGlvbi90YWppay50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbG9jYWxpemF0aW9uX3RoYWlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzQyX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9sb2NhbGl6YXRpb24vdGhhaSAqLyBcIi4vc3JjL2xvY2FsaXphdGlvbi90aGFpLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9sb2NhbGl6YXRpb25fdHJhZGl0aW9uYWxfY2hpbmVzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNDNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL2xvY2FsaXphdGlvbi90cmFkaXRpb25hbC1jaGluZXNlICovIFwiLi9zcmMvbG9jYWxpemF0aW9uL3RyYWRpdGlvbmFsLWNoaW5lc2UudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2xvY2FsaXphdGlvbl90dXJraXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80NF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbG9jYWxpemF0aW9uL3R1cmtpc2ggKi8gXCIuL3NyYy9sb2NhbGl6YXRpb24vdHVya2lzaC50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbG9jYWxpemF0aW9uX3VrcmFpbmlhbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNDVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL2xvY2FsaXphdGlvbi91a3JhaW5pYW4gKi8gXCIuL3NyYy9sb2NhbGl6YXRpb24vdWtyYWluaWFuLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9sb2NhbGl6YXRpb25fdmlldG5hbWVzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNDZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL2xvY2FsaXphdGlvbi92aWV0bmFtZXNlICovIFwiLi9zcmMvbG9jYWxpemF0aW9uL3ZpZXRuYW1lc2UudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2xvY2FsaXphdGlvbl93ZWxzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNDdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL2xvY2FsaXphdGlvbi93ZWxzaCAqLyBcIi4vc3JjL2xvY2FsaXphdGlvbi93ZWxzaC50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbG9jYWxpemF0aW9uX3RlbHVndV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNDhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL2xvY2FsaXphdGlvbi90ZWx1Z3UgKi8gXCIuL3NyYy9sb2NhbGl6YXRpb24vdGVsdWd1LnRzXCIpO1xuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvZW50cmllcy9jaHVua3MvbW9kZWwudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvZW50cmllcy9jaHVua3MvbW9kZWwudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogVmVyc2lvbiwgUmVsZWFzZURhdGUsIGNoZWNrTGlicmFyeVZlcnNpb24sIHNldExpY2Vuc2VLZXksIGhhc0xpY2Vuc2UsIHNldHRpbmdzLCBIZWxwZXJzLCBBbnN3ZXJDb3VudFZhbGlkYXRvciwgRW1haWxWYWxpZGF0b3IsIE51bWVyaWNWYWxpZGF0b3IsIFJlZ2V4VmFsaWRhdG9yLCBTdXJ2ZXlWYWxpZGF0b3IsIFRleHRWYWxpZGF0b3IsIFZhbGlkYXRvclJlc3VsdCwgRXhwcmVzc2lvblZhbGlkYXRvciwgVmFsaWRhdG9yUnVubmVyLCBJdGVtVmFsdWUsIEJhc2UsIEV2ZW50LCBFdmVudEJhc2UsIEFycmF5Q2hhbmdlcywgQ29tcHV0ZWRVcGRhdGVyLCBTdXJ2ZXlFcnJvciwgU3VydmV5RWxlbWVudENvcmUsIFN1cnZleUVsZW1lbnQsIERyYWdUeXBlT3Zlck1lRW51bSwgQ2FsY3VsYXRlZFZhbHVlLCBDdXN0b21FcnJvciwgQW5zd2VyUmVxdWlyZWRFcnJvciwgT25lQW5zd2VyUmVxdWlyZWRFcnJvciwgUmVxdXJlTnVtZXJpY0Vycm9yLCBFeGNlZWRTaXplRXJyb3IsIExvY2FsaXphYmxlU3RyaW5nLCBMb2NhbGl6YWJsZVN0cmluZ3MsIEh0bWxDb25kaXRpb25JdGVtLCBVcmxDb25kaXRpb25JdGVtLCBDaG9pY2VzUmVzdGZ1bCwgQ2hvaWNlc1Jlc3RmdWxsLCBGdW5jdGlvbkZhY3RvcnksIHJlZ2lzdGVyRnVuY3Rpb24sIENvbmRpdGlvblJ1bm5lciwgRXhwcmVzc2lvblJ1bm5lciwgRXhwcmVzc2lvbkV4ZWN1dG9yLCBPcGVyYW5kLCBDb25zdCwgQmluYXJ5T3BlcmFuZCwgVmFyaWFibGUsIEZ1bmN0aW9uT3BlcmFuZCwgQXJyYXlPcGVyYW5kLCBVbmFyeU9wZXJhbmQsIENvbmRpdGlvbnNQYXJzZXIsIFByb2Nlc3NWYWx1ZSwgSnNvbkVycm9yLCBKc29uSW5jb3JyZWN0VHlwZUVycm9yLCBKc29uTWV0YWRhdGEsIEpzb25NZXRhZGF0YUNsYXNzLCBKc29uTWlzc2luZ1R5cGVFcnJvciwgSnNvbk1pc3NpbmdUeXBlRXJyb3JCYXNlLCBKc29uT2JqZWN0LCBKc29uT2JqZWN0UHJvcGVydHksIEpzb25SZXF1aXJlZFByb3BlcnR5RXJyb3IsIEpzb25Vbmtub3duUHJvcGVydHlFcnJvciwgU2VyaWFsaXplciwgcHJvcGVydHksIHByb3BlcnR5QXJyYXksIE1hdHJpeERyb3Bkb3duQ2VsbCwgTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UsIE1hdHJpeERyb3Bkb3duQ29sdW1uLCBtYXRyaXhEcm9wZG93bkNvbHVtblR5cGVzLCBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRDZWxsLCBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3csIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFRhYmxlLCBNYXRyaXhEcm9wZG93blJvd01vZGVsLCBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWwsIE1hdHJpeER5bmFtaWNSb3dNb2RlbCwgUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWwsIE1hdHJpeFJvd01vZGVsLCBNYXRyaXhDZWxscywgUXVlc3Rpb25NYXRyaXhNb2RlbCwgUXVlc3Rpb25NYXRyaXhCYXNlTW9kZWwsIE11bHRpcGxlVGV4dEl0ZW1Nb2RlbCwgTXVsdGlwbGVUZXh0Q2VsbCwgTXVsdGlwbGVUZXh0RXJyb3JDZWxsLCBNdXRsaXBsZVRleHRFcnJvclJvdywgTXV0bGlwbGVUZXh0Um93LCBRdWVzdGlvbk11bHRpcGxlVGV4dE1vZGVsLCBNdWx0aXBsZVRleHRFZGl0b3JNb2RlbCwgUGFuZWxNb2RlbCwgUGFuZWxNb2RlbEJhc2UsIFF1ZXN0aW9uUm93TW9kZWwsIEZsb3dQYW5lbE1vZGVsLCBQYWdlTW9kZWwsIERlZmF1bHRUaXRsZU1vZGVsLCBRdWVzdGlvbiwgUXVlc3Rpb25Ob25WYWx1ZSwgUXVlc3Rpb25FbXB0eU1vZGVsLCBRdWVzdGlvbkNoZWNrYm94QmFzZSwgUXVlc3Rpb25TZWxlY3RCYXNlLCBRdWVzdGlvbkNoZWNrYm94TW9kZWwsIFF1ZXN0aW9uVGFnYm94TW9kZWwsIFF1ZXN0aW9uUmFua2luZ01vZGVsLCBRdWVzdGlvbkNvbW1lbnRNb2RlbCwgUXVlc3Rpb25Ecm9wZG93bk1vZGVsLCBRdWVzdGlvbkZhY3RvcnksIEVsZW1lbnRGYWN0b3J5LCBRdWVzdGlvbkZpbGVNb2RlbCwgUXVlc3Rpb25IdG1sTW9kZWwsIFF1ZXN0aW9uUmFkaW9ncm91cE1vZGVsLCBRdWVzdGlvblJhdGluZ01vZGVsLCBSZW5kZXJlZFJhdGluZ0l0ZW0sIFF1ZXN0aW9uRXhwcmVzc2lvbk1vZGVsLCBRdWVzdGlvblRleHRCYXNlLCBDaGFyYWN0ZXJDb3VudGVyLCBRdWVzdGlvblRleHRNb2RlbCwgUXVlc3Rpb25Cb29sZWFuTW9kZWwsIFF1ZXN0aW9uSW1hZ2VQaWNrZXJNb2RlbCwgSW1hZ2VJdGVtVmFsdWUsIFF1ZXN0aW9uSW1hZ2VNb2RlbCwgUXVlc3Rpb25TaWduYXR1cmVQYWRNb2RlbCwgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbCwgUXVlc3Rpb25QYW5lbER5bmFtaWNJdGVtLCBTdXJ2ZXlUaW1lciwgU3VydmV5VGltZXJNb2RlbCwgdHJ5TmF2aWdhdGVUb1BhZ2UsIHRyeUZvY3VzUGFnZSwgY3JlYXRlVE9DTGlzdE1vZGVsLCBnZXRUb2NSb290Q3NzLCBUT0NNb2RlbCwgU3VydmV5UHJvZ3Jlc3NNb2RlbCwgU3VydmV5UHJvZ3Jlc3NCdXR0b25zTW9kZWwsIFN1cnZleU1vZGVsLCBTdXJ2ZXlUcmlnZ2VyLCBTdXJ2ZXlUcmlnZ2VyQ29tcGxldGUsIFN1cnZleVRyaWdnZXJTZXRWYWx1ZSwgU3VydmV5VHJpZ2dlclZpc2libGUsIFN1cnZleVRyaWdnZXJDb3B5VmFsdWUsIFN1cnZleVRyaWdnZXJSdW5FeHByZXNzaW9uLCBTdXJ2ZXlUcmlnZ2VyU2tpcCwgVHJpZ2dlciwgUG9wdXBTdXJ2ZXlNb2RlbCwgU3VydmV5V2luZG93TW9kZWwsIFRleHRQcmVQcm9jZXNzb3IsIE5vdGlmaWVyLCBDb3ZlciwgQ292ZXJDZWxsLCBkeFN1cnZleVNlcnZpY2UsIGVuZ2xpc2hTdHJpbmdzLCBzdXJ2ZXlMb2NhbGl6YXRpb24sIHN1cnZleVN0cmluZ3MsIFF1ZXN0aW9uQ3VzdG9tV2lkZ2V0LCBDdXN0b21XaWRnZXRDb2xsZWN0aW9uLCBRdWVzdGlvbkN1c3RvbU1vZGVsLCBRdWVzdGlvbkNvbXBvc2l0ZU1vZGVsLCBDb21wb25lbnRRdWVzdGlvbkpTT04sIENvbXBvbmVudENvbGxlY3Rpb24sIFN0eWxlc01hbmFnZXIsIExpc3RNb2RlbCwgTXVsdGlTZWxlY3RMaXN0TW9kZWwsIFBvcHVwTW9kZWwsIGNyZWF0ZURpYWxvZ09wdGlvbnMsIFBvcHVwQmFzZVZpZXdNb2RlbCwgUG9wdXBEcm9wZG93blZpZXdNb2RlbCwgUG9wdXBNb2RhbFZpZXdNb2RlbCwgY3JlYXRlUG9wdXBWaWV3TW9kZWwsIGNyZWF0ZVBvcHVwTW9kYWxWaWV3TW9kZWwsIERyb3Bkb3duTGlzdE1vZGVsLCBEcm9wZG93bk11bHRpU2VsZWN0TGlzdE1vZGVsLCBRdWVzdGlvbkJ1dHRvbkdyb3VwTW9kZWwsIEJ1dHRvbkdyb3VwSXRlbU1vZGVsLCBCdXR0b25Hcm91cEl0ZW1WYWx1ZSwgSXNNb2JpbGUsIElzVG91Y2gsIF9zZXRJc1RvdWNoLCBjb25maXJtQWN0aW9uLCBjb25maXJtQWN0aW9uQXN5bmMsIGRldGVjdElFT3JFZGdlLCBkb0tleTJDbGlja1VwLCBkb0tleTJDbGlja0Rvd24sIGRvS2V5MkNsaWNrQmx1ciwgbG9hZEZpbGVGcm9tQmFzZTY0LCBpbmNyZWFzZUhlaWdodEJ5Q29udGVudCwgY3JlYXRlU3ZnLCBzYW5pdGl6ZUVkaXRhYmxlQ29udGVudCwgQ3NzQ2xhc3NCdWlsZGVyLCBzdXJ2ZXlDc3MsIGRlZmF1bHRWMkNzcywgZGVmYXVsdFYyVGhlbWVOYW1lLCBEcmFnRHJvcENvcmUsIERyYWdEcm9wQ2hvaWNlcywgRHJhZ0Ryb3BSYW5raW5nU2VsZWN0VG9SYW5rICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlZlcnNpb25cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBWZXJzaW9uOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJSZWxlYXNlRGF0ZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFJlbGVhc2VEYXRlOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJjaGVja0xpYnJhcnlWZXJzaW9uXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY2hlY2tMaWJyYXJ5VmVyc2lvbjsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic2V0TGljZW5zZUtleVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHNldExpY2Vuc2VLZXk7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImhhc0xpY2Vuc2VcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBoYXNMaWNlbnNlOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc2V0dGluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL3NldHRpbmdzICovIFwiLi9zcmMvc2V0dGluZ3MudHNcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzZXR0aW5nc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic2V0dGluZ3NcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2hlbHBlcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL2hlbHBlcnMgKi8gXCIuL3NyYy9oZWxwZXJzLnRzXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiSGVscGVyc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9oZWxwZXJzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJIZWxwZXJzXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF92YWxpZGF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL3ZhbGlkYXRvciAqLyBcIi4vc3JjL3ZhbGlkYXRvci50c1wiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkFuc3dlckNvdW50VmFsaWRhdG9yXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3ZhbGlkYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiQW5zd2VyQ291bnRWYWxpZGF0b3JcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJFbWFpbFZhbGlkYXRvclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92YWxpZGF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIkVtYWlsVmFsaWRhdG9yXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiTnVtZXJpY1ZhbGlkYXRvclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92YWxpZGF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIk51bWVyaWNWYWxpZGF0b3JcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJSZWdleFZhbGlkYXRvclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92YWxpZGF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIlJlZ2V4VmFsaWRhdG9yXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiU3VydmV5VmFsaWRhdG9yXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3ZhbGlkYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiU3VydmV5VmFsaWRhdG9yXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiVGV4dFZhbGlkYXRvclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92YWxpZGF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIlRleHRWYWxpZGF0b3JcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJWYWxpZGF0b3JSZXN1bHRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdmFsaWRhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJWYWxpZGF0b3JSZXN1bHRcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJFeHByZXNzaW9uVmFsaWRhdG9yXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3ZhbGlkYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiRXhwcmVzc2lvblZhbGlkYXRvclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlZhbGlkYXRvclJ1bm5lclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92YWxpZGF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIlZhbGlkYXRvclJ1bm5lclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfaXRlbXZhbHVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9pdGVtdmFsdWUgKi8gXCIuL3NyYy9pdGVtdmFsdWUudHNcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJJdGVtVmFsdWVcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaXRlbXZhbHVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJJdGVtVmFsdWVcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Jhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL2Jhc2UgKi8gXCIuL3NyYy9iYXNlLnRzXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQmFzZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9iYXNlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bXCJCYXNlXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiRXZlbnRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfYmFzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fW1wiRXZlbnRcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJFdmVudEJhc2VcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfYmFzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fW1wiRXZlbnRCYXNlXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQXJyYXlDaGFuZ2VzXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2Jhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1tcIkFycmF5Q2hhbmdlc1wiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkNvbXB1dGVkVXBkYXRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9iYXNlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bXCJDb21wdXRlZFVwZGF0ZXJcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3N1cnZleV9lcnJvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vc3VydmV5LWVycm9yICovIFwiLi9zcmMvc3VydmV5LWVycm9yLnRzXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiU3VydmV5RXJyb3JcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfc3VydmV5X2Vycm9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bXCJTdXJ2ZXlFcnJvclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc3VydmV5X2VsZW1lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL3N1cnZleS1lbGVtZW50ICovIFwiLi9zcmMvc3VydmV5LWVsZW1lbnQudHNcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJTdXJ2ZXlFbGVtZW50Q29yZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9zdXJ2ZXlfZWxlbWVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fW1wiU3VydmV5RWxlbWVudENvcmVcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJTdXJ2ZXlFbGVtZW50XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3N1cnZleV9lbGVtZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bXCJTdXJ2ZXlFbGVtZW50XCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiRHJhZ1R5cGVPdmVyTWVFbnVtXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3N1cnZleV9lbGVtZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bXCJEcmFnVHlwZU92ZXJNZUVudW1cIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2NhbGN1bGF0ZWRWYWx1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vY2FsY3VsYXRlZFZhbHVlICovIFwiLi9zcmMvY2FsY3VsYXRlZFZhbHVlLnRzXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQ2FsY3VsYXRlZFZhbHVlXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NhbGN1bGF0ZWRWYWx1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fW1wiQ2FsY3VsYXRlZFZhbHVlXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9lcnJvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vZXJyb3IgKi8gXCIuL3NyYy9lcnJvci50c1wiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkN1c3RvbUVycm9yXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2Vycm9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bXCJDdXN0b21FcnJvclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkFuc3dlclJlcXVpcmVkRXJyb3JcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfZXJyb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1tcIkFuc3dlclJlcXVpcmVkRXJyb3JcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJPbmVBbnN3ZXJSZXF1aXJlZEVycm9yXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2Vycm9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bXCJPbmVBbnN3ZXJSZXF1aXJlZEVycm9yXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUmVxdXJlTnVtZXJpY0Vycm9yXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2Vycm9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bXCJSZXF1cmVOdW1lcmljRXJyb3JcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJFeGNlZWRTaXplRXJyb3JcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfZXJyb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1tcIkV4Y2VlZFNpemVFcnJvclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbG9jYWxpemFibGVzdHJpbmdfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL2xvY2FsaXphYmxlc3RyaW5nICovIFwiLi9zcmMvbG9jYWxpemFibGVzdHJpbmcudHNcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJMb2NhbGl6YWJsZVN0cmluZ1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9sb2NhbGl6YWJsZXN0cmluZ19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fW1wiTG9jYWxpemFibGVTdHJpbmdcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJMb2NhbGl6YWJsZVN0cmluZ3NcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbG9jYWxpemFibGVzdHJpbmdfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1tcIkxvY2FsaXphYmxlU3RyaW5nc1wiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZXhwcmVzc2lvbkl0ZW1zX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vZXhwcmVzc2lvbkl0ZW1zICovIFwiLi9zcmMvZXhwcmVzc2lvbkl0ZW1zLnRzXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiSHRtbENvbmRpdGlvbkl0ZW1cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfZXhwcmVzc2lvbkl0ZW1zX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fW1wiSHRtbENvbmRpdGlvbkl0ZW1cIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJVcmxDb25kaXRpb25JdGVtXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2V4cHJlc3Npb25JdGVtc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX1tcIlVybENvbmRpdGlvbkl0ZW1cIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Nob2ljZXNSZXN0ZnVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vY2hvaWNlc1Jlc3RmdWwgKi8gXCIuL3NyYy9jaG9pY2VzUmVzdGZ1bC50c1wiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkNob2ljZXNSZXN0ZnVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2Nob2ljZXNSZXN0ZnVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fW1wiQ2hvaWNlc1Jlc3RmdWxcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJDaG9pY2VzUmVzdGZ1bGxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY2hvaWNlc1Jlc3RmdWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19bXCJDaG9pY2VzUmVzdGZ1bGxcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Z1bmN0aW9uc2ZhY3RvcnlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9mdW5jdGlvbnNmYWN0b3J5ICovIFwiLi9zcmMvZnVuY3Rpb25zZmFjdG9yeS50c1wiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkZ1bmN0aW9uRmFjdG9yeVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9mdW5jdGlvbnNmYWN0b3J5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fW1wiRnVuY3Rpb25GYWN0b3J5XCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwicmVnaXN0ZXJGdW5jdGlvblwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9mdW5jdGlvbnNmYWN0b3J5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fW1wicmVnaXN0ZXJGdW5jdGlvblwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfY29uZGl0aW9uc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL2NvbmRpdGlvbnMgKi8gXCIuL3NyYy9jb25kaXRpb25zLnRzXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQ29uZGl0aW9uUnVubmVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvbmRpdGlvbnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX19bXCJDb25kaXRpb25SdW5uZXJcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJFeHByZXNzaW9uUnVubmVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvbmRpdGlvbnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX19bXCJFeHByZXNzaW9uUnVubmVyXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiRXhwcmVzc2lvbkV4ZWN1dG9yXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvbmRpdGlvbnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX19bXCJFeHByZXNzaW9uRXhlY3V0b3JcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2V4cHJlc3Npb25zX2V4cHJlc3Npb25zX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vZXhwcmVzc2lvbnMvZXhwcmVzc2lvbnMgKi8gXCIuL3NyYy9leHByZXNzaW9ucy9leHByZXNzaW9ucy50c1wiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIk9wZXJhbmRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfZXhwcmVzc2lvbnNfZXhwcmVzc2lvbnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X19bXCJPcGVyYW5kXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQ29uc3RcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfZXhwcmVzc2lvbnNfZXhwcmVzc2lvbnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X19bXCJDb25zdFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkJpbmFyeU9wZXJhbmRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfZXhwcmVzc2lvbnNfZXhwcmVzc2lvbnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X19bXCJCaW5hcnlPcGVyYW5kXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiVmFyaWFibGVcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfZXhwcmVzc2lvbnNfZXhwcmVzc2lvbnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X19bXCJWYXJpYWJsZVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkZ1bmN0aW9uT3BlcmFuZFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9leHByZXNzaW9uc19leHByZXNzaW9uc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfX1tcIkZ1bmN0aW9uT3BlcmFuZFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkFycmF5T3BlcmFuZFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9leHByZXNzaW9uc19leHByZXNzaW9uc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfX1tcIkFycmF5T3BlcmFuZFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlVuYXJ5T3BlcmFuZFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9leHByZXNzaW9uc19leHByZXNzaW9uc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfX1tcIlVuYXJ5T3BlcmFuZFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfY29uZGl0aW9uc1BhcnNlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL2NvbmRpdGlvbnNQYXJzZXIgKi8gXCIuL3NyYy9jb25kaXRpb25zUGFyc2VyLnRzXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQ29uZGl0aW9uc1BhcnNlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb25kaXRpb25zUGFyc2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNV9fW1wiQ29uZGl0aW9uc1BhcnNlclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfY29uZGl0aW9uUHJvY2Vzc1ZhbHVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vY29uZGl0aW9uUHJvY2Vzc1ZhbHVlICovIFwiLi9zcmMvY29uZGl0aW9uUHJvY2Vzc1ZhbHVlLnRzXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUHJvY2Vzc1ZhbHVlXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvbmRpdGlvblByb2Nlc3NWYWx1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTZfX1tcIlByb2Nlc3NWYWx1ZVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL2pzb25vYmplY3QgKi8gXCIuL3NyYy9qc29ub2JqZWN0LnRzXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiSnNvbkVycm9yXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE3X19bXCJKc29uRXJyb3JcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJKc29uSW5jb3JyZWN0VHlwZUVycm9yXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE3X19bXCJKc29uSW5jb3JyZWN0VHlwZUVycm9yXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiSnNvbk1ldGFkYXRhXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE3X19bXCJKc29uTWV0YWRhdGFcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJKc29uTWV0YWRhdGFDbGFzc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xN19fW1wiSnNvbk1ldGFkYXRhQ2xhc3NcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJKc29uTWlzc2luZ1R5cGVFcnJvclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xN19fW1wiSnNvbk1pc3NpbmdUeXBlRXJyb3JcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJKc29uTWlzc2luZ1R5cGVFcnJvckJhc2VcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTdfX1tcIkpzb25NaXNzaW5nVHlwZUVycm9yQmFzZVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkpzb25PYmplY3RcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTdfX1tcIkpzb25PYmplY3RcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJKc29uT2JqZWN0UHJvcGVydHlcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTdfX1tcIkpzb25PYmplY3RQcm9wZXJ0eVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkpzb25SZXF1aXJlZFByb3BlcnR5RXJyb3JcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTdfX1tcIkpzb25SZXF1aXJlZFByb3BlcnR5RXJyb3JcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJKc29uVW5rbm93blByb3BlcnR5RXJyb3JcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTdfX1tcIkpzb25Vbmtub3duUHJvcGVydHlFcnJvclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlNlcmlhbGl6ZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTdfX1tcIlNlcmlhbGl6ZXJcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJwcm9wZXJ0eVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xN19fW1wicHJvcGVydHlcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJwcm9wZXJ0eUFycmF5XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE3X19bXCJwcm9wZXJ0eUFycmF5XCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9xdWVzdGlvbl9tYXRyaXhkcm9wZG93bmJhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE4X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9xdWVzdGlvbl9tYXRyaXhkcm9wZG93bmJhc2UgKi8gXCIuL3NyYy9xdWVzdGlvbl9tYXRyaXhkcm9wZG93bmJhc2UudHNcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJNYXRyaXhEcm9wZG93bkNlbGxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcXVlc3Rpb25fbWF0cml4ZHJvcGRvd25iYXNlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOF9fW1wiTWF0cml4RHJvcGRvd25DZWxsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2VcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcXVlc3Rpb25fbWF0cml4ZHJvcGRvd25iYXNlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOF9fW1wiTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2VcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3F1ZXN0aW9uX21hdHJpeGRyb3Bkb3duYmFzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMThfX1tcIlF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2VcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3F1ZXN0aW9uX21hdHJpeGRyb3Bkb3duY29sdW1uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vcXVlc3Rpb25fbWF0cml4ZHJvcGRvd25jb2x1bW4gKi8gXCIuL3NyYy9xdWVzdGlvbl9tYXRyaXhkcm9wZG93bmNvbHVtbi50c1wiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIk1hdHJpeERyb3Bkb3duQ29sdW1uXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3F1ZXN0aW9uX21hdHJpeGRyb3Bkb3duY29sdW1uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOV9fW1wiTWF0cml4RHJvcGRvd25Db2x1bW5cIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJtYXRyaXhEcm9wZG93bkNvbHVtblR5cGVzXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3F1ZXN0aW9uX21hdHJpeGRyb3Bkb3duY29sdW1uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOV9fW1wibWF0cml4RHJvcGRvd25Db2x1bW5UeXBlc1wiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcXVlc3Rpb25fbWF0cml4ZHJvcGRvd25yZW5kZXJlZF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL3F1ZXN0aW9uX21hdHJpeGRyb3Bkb3ducmVuZGVyZWQgKi8gXCIuL3NyYy9xdWVzdGlvbl9tYXRyaXhkcm9wZG93bnJlbmRlcmVkLnRzXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkQ2VsbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9xdWVzdGlvbl9tYXRyaXhkcm9wZG93bnJlbmRlcmVkX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMF9fW1wiUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkQ2VsbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFJvd1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9xdWVzdGlvbl9tYXRyaXhkcm9wZG93bnJlbmRlcmVkX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMF9fW1wiUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkUm93XCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkVGFibGVcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcXVlc3Rpb25fbWF0cml4ZHJvcGRvd25yZW5kZXJlZF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjBfX1tcIlF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFRhYmxlXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9xdWVzdGlvbl9tYXRyaXhkcm9wZG93bl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL3F1ZXN0aW9uX21hdHJpeGRyb3Bkb3duICovIFwiLi9zcmMvcXVlc3Rpb25fbWF0cml4ZHJvcGRvd24udHNcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJNYXRyaXhEcm9wZG93blJvd01vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3F1ZXN0aW9uX21hdHJpeGRyb3Bkb3duX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMV9fW1wiTWF0cml4RHJvcGRvd25Sb3dNb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9xdWVzdGlvbl9tYXRyaXhkcm9wZG93bl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfX1tcIlF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcXVlc3Rpb25fbWF0cml4ZHluYW1pY19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL3F1ZXN0aW9uX21hdHJpeGR5bmFtaWMgKi8gXCIuL3NyYy9xdWVzdGlvbl9tYXRyaXhkeW5hbWljLnRzXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiTWF0cml4RHluYW1pY1Jvd01vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3F1ZXN0aW9uX21hdHJpeGR5bmFtaWNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIyX19bXCJNYXRyaXhEeW5hbWljUm93TW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9xdWVzdGlvbl9tYXRyaXhkeW5hbWljX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMl9fW1wiUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3F1ZXN0aW9uX21hdHJpeF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL3F1ZXN0aW9uX21hdHJpeCAqLyBcIi4vc3JjL3F1ZXN0aW9uX21hdHJpeC50c1wiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIk1hdHJpeFJvd01vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3F1ZXN0aW9uX21hdHJpeF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjNfX1tcIk1hdHJpeFJvd01vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiTWF0cml4Q2VsbHNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcXVlc3Rpb25fbWF0cml4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yM19fW1wiTWF0cml4Q2VsbHNcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJRdWVzdGlvbk1hdHJpeE1vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3F1ZXN0aW9uX21hdHJpeF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjNfX1tcIlF1ZXN0aW9uTWF0cml4TW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX21hcnRpeEJhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9tYXJ0aXhCYXNlICovIFwiLi9zcmMvbWFydGl4QmFzZS50c1wiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlF1ZXN0aW9uTWF0cml4QmFzZU1vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX21hcnRpeEJhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI0X19bXCJRdWVzdGlvbk1hdHJpeEJhc2VNb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcXVlc3Rpb25fbXVsdGlwbGV0ZXh0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vcXVlc3Rpb25fbXVsdGlwbGV0ZXh0ICovIFwiLi9zcmMvcXVlc3Rpb25fbXVsdGlwbGV0ZXh0LnRzXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiTXVsdGlwbGVUZXh0SXRlbU1vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3F1ZXN0aW9uX211bHRpcGxldGV4dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjVfX1tcIk11bHRpcGxlVGV4dEl0ZW1Nb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIk11bHRpcGxlVGV4dENlbGxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcXVlc3Rpb25fbXVsdGlwbGV0ZXh0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yNV9fW1wiTXVsdGlwbGVUZXh0Q2VsbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIk11bHRpcGxlVGV4dEVycm9yQ2VsbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9xdWVzdGlvbl9tdWx0aXBsZXRleHRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI1X19bXCJNdWx0aXBsZVRleHRFcnJvckNlbGxcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJNdXRsaXBsZVRleHRFcnJvclJvd1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9xdWVzdGlvbl9tdWx0aXBsZXRleHRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI1X19bXCJNdXRsaXBsZVRleHRFcnJvclJvd1wiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIk11dGxpcGxlVGV4dFJvd1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9xdWVzdGlvbl9tdWx0aXBsZXRleHRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI1X19bXCJNdXRsaXBsZVRleHRSb3dcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJRdWVzdGlvbk11bHRpcGxlVGV4dE1vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3F1ZXN0aW9uX211bHRpcGxldGV4dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjVfX1tcIlF1ZXN0aW9uTXVsdGlwbGVUZXh0TW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJNdWx0aXBsZVRleHRFZGl0b3JNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9xdWVzdGlvbl9tdWx0aXBsZXRleHRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI1X19bXCJNdWx0aXBsZVRleHRFZGl0b3JNb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcGFuZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI2X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9wYW5lbCAqLyBcIi4vc3JjL3BhbmVsLnRzXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUGFuZWxNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9wYW5lbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjZfX1tcIlBhbmVsTW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJQYW5lbE1vZGVsQmFzZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9wYW5lbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjZfX1tcIlBhbmVsTW9kZWxCYXNlXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUXVlc3Rpb25Sb3dNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9wYW5lbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjZfX1tcIlF1ZXN0aW9uUm93TW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Zsb3dwYW5lbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL2Zsb3dwYW5lbCAqLyBcIi4vc3JjL2Zsb3dwYW5lbC50c1wiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkZsb3dQYW5lbE1vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2Zsb3dwYW5lbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjdfX1tcIkZsb3dQYW5lbE1vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9wYWdlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yOF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vcGFnZSAqLyBcIi4vc3JjL3BhZ2UudHNcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJQYWdlTW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcGFnZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjhfX1tcIlBhZ2VNb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdGVtcGxhdGVfcmVuZGVyZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI5X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi90ZW1wbGF0ZS1yZW5kZXJlciAqLyBcIi4vc3JjL3RlbXBsYXRlLXJlbmRlcmVyLnRzXCIpO1xuLyogZW1wdHkvdW51c2VkIGhhcm1vbnkgc3RhciByZWV4cG9ydCAqLy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZGVmYXVsdFRpdGxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vZGVmYXVsdFRpdGxlICovIFwiLi9zcmMvZGVmYXVsdFRpdGxlLnRzXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiRGVmYXVsdFRpdGxlTW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfZGVmYXVsdFRpdGxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zMF9fW1wiRGVmYXVsdFRpdGxlTW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3F1ZXN0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vcXVlc3Rpb24gKi8gXCIuL3NyYy9xdWVzdGlvbi50c1wiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlF1ZXN0aW9uXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3F1ZXN0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zMV9fW1wiUXVlc3Rpb25cIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3F1ZXN0aW9ubm9udmFsdWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzMyX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9xdWVzdGlvbm5vbnZhbHVlICovIFwiLi9zcmMvcXVlc3Rpb25ub252YWx1ZS50c1wiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlF1ZXN0aW9uTm9uVmFsdWVcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcXVlc3Rpb25ub252YWx1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzJfX1tcIlF1ZXN0aW9uTm9uVmFsdWVcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3F1ZXN0aW9uX2VtcHR5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vcXVlc3Rpb25fZW1wdHkgKi8gXCIuL3NyYy9xdWVzdGlvbl9lbXB0eS50c1wiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlF1ZXN0aW9uRW1wdHlNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9xdWVzdGlvbl9lbXB0eV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzNfX1tcIlF1ZXN0aW9uRW1wdHlNb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcXVlc3Rpb25fYmFzZXNlbGVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL3F1ZXN0aW9uX2Jhc2VzZWxlY3QgKi8gXCIuL3NyYy9xdWVzdGlvbl9iYXNlc2VsZWN0LnRzXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUXVlc3Rpb25DaGVja2JveEJhc2VcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcXVlc3Rpb25fYmFzZXNlbGVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzRfX1tcIlF1ZXN0aW9uQ2hlY2tib3hCYXNlXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUXVlc3Rpb25TZWxlY3RCYXNlXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3F1ZXN0aW9uX2Jhc2VzZWxlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzM0X19bXCJRdWVzdGlvblNlbGVjdEJhc2VcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3F1ZXN0aW9uX2NoZWNrYm94X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vcXVlc3Rpb25fY2hlY2tib3ggKi8gXCIuL3NyYy9xdWVzdGlvbl9jaGVja2JveC50c1wiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlF1ZXN0aW9uQ2hlY2tib3hNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9xdWVzdGlvbl9jaGVja2JveF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzVfX1tcIlF1ZXN0aW9uQ2hlY2tib3hNb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcXVlc3Rpb25fdGFnYm94X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vcXVlc3Rpb25fdGFnYm94ICovIFwiLi9zcmMvcXVlc3Rpb25fdGFnYm94LnRzXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUXVlc3Rpb25UYWdib3hNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9xdWVzdGlvbl90YWdib3hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzM2X19bXCJRdWVzdGlvblRhZ2JveE1vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9xdWVzdGlvbl9yYW5raW5nX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vcXVlc3Rpb25fcmFua2luZyAqLyBcIi4vc3JjL3F1ZXN0aW9uX3JhbmtpbmcudHNcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJRdWVzdGlvblJhbmtpbmdNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9xdWVzdGlvbl9yYW5raW5nX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zN19fW1wiUXVlc3Rpb25SYW5raW5nTW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3F1ZXN0aW9uX2NvbW1lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzM4X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9xdWVzdGlvbl9jb21tZW50ICovIFwiLi9zcmMvcXVlc3Rpb25fY29tbWVudC50c1wiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlF1ZXN0aW9uQ29tbWVudE1vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3F1ZXN0aW9uX2NvbW1lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzM4X19bXCJRdWVzdGlvbkNvbW1lbnRNb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcXVlc3Rpb25fZHJvcGRvd25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzM5X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9xdWVzdGlvbl9kcm9wZG93biAqLyBcIi4vc3JjL3F1ZXN0aW9uX2Ryb3Bkb3duLnRzXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUXVlc3Rpb25Ecm9wZG93bk1vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3F1ZXN0aW9uX2Ryb3Bkb3duX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zOV9fW1wiUXVlc3Rpb25Ecm9wZG93bk1vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9xdWVzdGlvbmZhY3RvcnlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzQwX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9xdWVzdGlvbmZhY3RvcnkgKi8gXCIuL3NyYy9xdWVzdGlvbmZhY3RvcnkudHNcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJRdWVzdGlvbkZhY3RvcnlcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcXVlc3Rpb25mYWN0b3J5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80MF9fW1wiUXVlc3Rpb25GYWN0b3J5XCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiRWxlbWVudEZhY3RvcnlcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcXVlc3Rpb25mYWN0b3J5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80MF9fW1wiRWxlbWVudEZhY3RvcnlcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3F1ZXN0aW9uX2ZpbGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzQxX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9xdWVzdGlvbl9maWxlICovIFwiLi9zcmMvcXVlc3Rpb25fZmlsZS50c1wiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlF1ZXN0aW9uRmlsZU1vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3F1ZXN0aW9uX2ZpbGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzQxX19bXCJRdWVzdGlvbkZpbGVNb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcXVlc3Rpb25faHRtbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNDJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL3F1ZXN0aW9uX2h0bWwgKi8gXCIuL3NyYy9xdWVzdGlvbl9odG1sLnRzXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUXVlc3Rpb25IdG1sTW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcXVlc3Rpb25faHRtbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNDJfX1tcIlF1ZXN0aW9uSHRtbE1vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9xdWVzdGlvbl9yYWRpb2dyb3VwX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80M19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vcXVlc3Rpb25fcmFkaW9ncm91cCAqLyBcIi4vc3JjL3F1ZXN0aW9uX3JhZGlvZ3JvdXAudHNcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJRdWVzdGlvblJhZGlvZ3JvdXBNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9xdWVzdGlvbl9yYWRpb2dyb3VwX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80M19fW1wiUXVlc3Rpb25SYWRpb2dyb3VwTW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3F1ZXN0aW9uX3JhdGluZ19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNDRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL3F1ZXN0aW9uX3JhdGluZyAqLyBcIi4vc3JjL3F1ZXN0aW9uX3JhdGluZy50c1wiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlF1ZXN0aW9uUmF0aW5nTW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcXVlc3Rpb25fcmF0aW5nX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80NF9fW1wiUXVlc3Rpb25SYXRpbmdNb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlJlbmRlcmVkUmF0aW5nSXRlbVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9xdWVzdGlvbl9yYXRpbmdfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzQ0X19bXCJSZW5kZXJlZFJhdGluZ0l0ZW1cIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3F1ZXN0aW9uX2V4cHJlc3Npb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzQ1X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9xdWVzdGlvbl9leHByZXNzaW9uICovIFwiLi9zcmMvcXVlc3Rpb25fZXhwcmVzc2lvbi50c1wiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlF1ZXN0aW9uRXhwcmVzc2lvbk1vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3F1ZXN0aW9uX2V4cHJlc3Npb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzQ1X19bXCJRdWVzdGlvbkV4cHJlc3Npb25Nb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcXVlc3Rpb25fdGV4dGJhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzQ2X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9xdWVzdGlvbl90ZXh0YmFzZSAqLyBcIi4vc3JjL3F1ZXN0aW9uX3RleHRiYXNlLnRzXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUXVlc3Rpb25UZXh0QmFzZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9xdWVzdGlvbl90ZXh0YmFzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNDZfX1tcIlF1ZXN0aW9uVGV4dEJhc2VcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJDaGFyYWN0ZXJDb3VudGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3F1ZXN0aW9uX3RleHRiYXNlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80Nl9fW1wiQ2hhcmFjdGVyQ291bnRlclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcXVlc3Rpb25fdGV4dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNDdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL3F1ZXN0aW9uX3RleHQgKi8gXCIuL3NyYy9xdWVzdGlvbl90ZXh0LnRzXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUXVlc3Rpb25UZXh0TW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcXVlc3Rpb25fdGV4dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNDdfX1tcIlF1ZXN0aW9uVGV4dE1vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9xdWVzdGlvbl9ib29sZWFuX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80OF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vcXVlc3Rpb25fYm9vbGVhbiAqLyBcIi4vc3JjL3F1ZXN0aW9uX2Jvb2xlYW4udHNcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJRdWVzdGlvbkJvb2xlYW5Nb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9xdWVzdGlvbl9ib29sZWFuX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80OF9fW1wiUXVlc3Rpb25Cb29sZWFuTW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3F1ZXN0aW9uX2ltYWdlcGlja2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80OV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vcXVlc3Rpb25faW1hZ2VwaWNrZXIgKi8gXCIuL3NyYy9xdWVzdGlvbl9pbWFnZXBpY2tlci50c1wiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlF1ZXN0aW9uSW1hZ2VQaWNrZXJNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9xdWVzdGlvbl9pbWFnZXBpY2tlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNDlfX1tcIlF1ZXN0aW9uSW1hZ2VQaWNrZXJNb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkltYWdlSXRlbVZhbHVlXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3F1ZXN0aW9uX2ltYWdlcGlja2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80OV9fW1wiSW1hZ2VJdGVtVmFsdWVcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3F1ZXN0aW9uX2ltYWdlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81MF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vcXVlc3Rpb25faW1hZ2UgKi8gXCIuL3NyYy9xdWVzdGlvbl9pbWFnZS50c1wiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlF1ZXN0aW9uSW1hZ2VNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9xdWVzdGlvbl9pbWFnZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNTBfX1tcIlF1ZXN0aW9uSW1hZ2VNb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcXVlc3Rpb25fc2lnbmF0dXJlcGFkX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81MV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vcXVlc3Rpb25fc2lnbmF0dXJlcGFkICovIFwiLi9zcmMvcXVlc3Rpb25fc2lnbmF0dXJlcGFkLnRzXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUXVlc3Rpb25TaWduYXR1cmVQYWRNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9xdWVzdGlvbl9zaWduYXR1cmVwYWRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzUxX19bXCJRdWVzdGlvblNpZ25hdHVyZVBhZE1vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9xdWVzdGlvbl9wYW5lbGR5bmFtaWNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzUyX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9xdWVzdGlvbl9wYW5lbGR5bmFtaWMgKi8gXCIuL3NyYy9xdWVzdGlvbl9wYW5lbGR5bmFtaWMudHNcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3F1ZXN0aW9uX3BhbmVsZHluYW1pY19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNTJfX1tcIlF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJRdWVzdGlvblBhbmVsRHluYW1pY0l0ZW1cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcXVlc3Rpb25fcGFuZWxkeW5hbWljX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81Ml9fW1wiUXVlc3Rpb25QYW5lbER5bmFtaWNJdGVtXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zdXJ2ZXl0aW1lcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNTNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL3N1cnZleXRpbWVyICovIFwiLi9zcmMvc3VydmV5dGltZXIudHNcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJTdXJ2ZXlUaW1lclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9zdXJ2ZXl0aW1lcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNTNfX1tcIlN1cnZleVRpbWVyXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zdXJ2ZXlUaW1lck1vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81NF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vc3VydmV5VGltZXJNb2RlbCAqLyBcIi4vc3JjL3N1cnZleVRpbWVyTW9kZWwudHNcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJTdXJ2ZXlUaW1lck1vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3N1cnZleVRpbWVyTW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzU0X19bXCJTdXJ2ZXlUaW1lck1vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zdXJ2ZXlUb2NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzU1X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9zdXJ2ZXlUb2MgKi8gXCIuL3NyYy9zdXJ2ZXlUb2MudHNcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJ0cnlOYXZpZ2F0ZVRvUGFnZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9zdXJ2ZXlUb2NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzU1X19bXCJ0cnlOYXZpZ2F0ZVRvUGFnZVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInRyeUZvY3VzUGFnZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9zdXJ2ZXlUb2NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzU1X19bXCJ0cnlGb2N1c1BhZ2VcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJjcmVhdGVUT0NMaXN0TW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfc3VydmV5VG9jX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81NV9fW1wiY3JlYXRlVE9DTGlzdE1vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiZ2V0VG9jUm9vdENzc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9zdXJ2ZXlUb2NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzU1X19bXCJnZXRUb2NSb290Q3NzXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiVE9DTW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfc3VydmV5VG9jX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81NV9fW1wiVE9DTW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3N1cnZleVByb2dyZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81Nl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vc3VydmV5UHJvZ3Jlc3MgKi8gXCIuL3NyYy9zdXJ2ZXlQcm9ncmVzcy50c1wiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlN1cnZleVByb2dyZXNzTW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfc3VydmV5UHJvZ3Jlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzU2X19bXCJTdXJ2ZXlQcm9ncmVzc01vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zdXJ2ZXlQcm9ncmVzc0J1dHRvbnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzU3X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9zdXJ2ZXlQcm9ncmVzc0J1dHRvbnMgKi8gXCIuL3NyYy9zdXJ2ZXlQcm9ncmVzc0J1dHRvbnMudHNcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJTdXJ2ZXlQcm9ncmVzc0J1dHRvbnNNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9zdXJ2ZXlQcm9ncmVzc0J1dHRvbnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzU3X19bXCJTdXJ2ZXlQcm9ncmVzc0J1dHRvbnNNb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdGhlbWVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81OF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vdGhlbWVzICovIFwiLi9zcmMvdGhlbWVzLnRzXCIpO1xuLyogZW1wdHkvdW51c2VkIGhhcm1vbnkgc3RhciByZWV4cG9ydCAqLy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc3VydmV5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81OV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vc3VydmV5ICovIFwiLi9zcmMvc3VydmV5LnRzXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiU3VydmV5TW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfc3VydmV5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81OV9fW1wiU3VydmV5TW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3N1cnZleV9ldmVudHNfYXBpX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82MF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vc3VydmV5LWV2ZW50cy1hcGkgKi8gXCIuL3NyYy9zdXJ2ZXktZXZlbnRzLWFwaS50c1wiKTtcbi8qIGVtcHR5L3VudXNlZCBoYXJtb255IHN0YXIgcmVleHBvcnQgKi8vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3RyaWdnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzYxX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi90cmlnZ2VyICovIFwiLi9zcmMvdHJpZ2dlci50c1wiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlN1cnZleVRyaWdnZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdHJpZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNjFfX1tcIlN1cnZleVRyaWdnZXJcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJTdXJ2ZXlUcmlnZ2VyQ29tcGxldGVcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdHJpZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNjFfX1tcIlN1cnZleVRyaWdnZXJDb21wbGV0ZVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlN1cnZleVRyaWdnZXJTZXRWYWx1ZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF90cmlnZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82MV9fW1wiU3VydmV5VHJpZ2dlclNldFZhbHVlXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiU3VydmV5VHJpZ2dlclZpc2libGVcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdHJpZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNjFfX1tcIlN1cnZleVRyaWdnZXJWaXNpYmxlXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiU3VydmV5VHJpZ2dlckNvcHlWYWx1ZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF90cmlnZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82MV9fW1wiU3VydmV5VHJpZ2dlckNvcHlWYWx1ZVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlN1cnZleVRyaWdnZXJSdW5FeHByZXNzaW9uXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3RyaWdnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzYxX19bXCJTdXJ2ZXlUcmlnZ2VyUnVuRXhwcmVzc2lvblwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlN1cnZleVRyaWdnZXJTa2lwXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3RyaWdnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzYxX19bXCJTdXJ2ZXlUcmlnZ2VyU2tpcFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlRyaWdnZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdHJpZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNjFfX1tcIlRyaWdnZXJcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3BvcHVwX3N1cnZleV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNjJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL3BvcHVwLXN1cnZleSAqLyBcIi4vc3JjL3BvcHVwLXN1cnZleS50c1wiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlBvcHVwU3VydmV5TW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcG9wdXBfc3VydmV5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82Ml9fW1wiUG9wdXBTdXJ2ZXlNb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlN1cnZleVdpbmRvd01vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3BvcHVwX3N1cnZleV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNjJfX1tcIlN1cnZleVdpbmRvd01vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF90ZXh0UHJlUHJvY2Vzc29yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82M19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vdGV4dFByZVByb2Nlc3NvciAqLyBcIi4vc3JjL3RleHRQcmVQcm9jZXNzb3IudHNcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJUZXh0UHJlUHJvY2Vzc29yXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3RleHRQcmVQcm9jZXNzb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzYzX19bXCJUZXh0UHJlUHJvY2Vzc29yXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub3RpZmllcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNjRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL25vdGlmaWVyICovIFwiLi9zcmMvbm90aWZpZXIudHNcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJOb3RpZmllclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub3RpZmllcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNjRfX1tcIk5vdGlmaWVyXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9jb3Zlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNjVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL2NvdmVyICovIFwiLi9zcmMvY292ZXIudHNcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJDb3ZlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3Zlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNjVfX1tcIkNvdmVyXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQ292ZXJDZWxsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvdmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82NV9fW1wiQ292ZXJDZWxsXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9keFN1cnZleVNlcnZpY2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzY2X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9keFN1cnZleVNlcnZpY2UgKi8gXCIuL3NyYy9keFN1cnZleVNlcnZpY2UudHNcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJkeFN1cnZleVNlcnZpY2VcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfZHhTdXJ2ZXlTZXJ2aWNlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82Nl9fW1wiZHhTdXJ2ZXlTZXJ2aWNlXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9sb2NhbGl6YXRpb25fZW5nbGlzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNjdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL2xvY2FsaXphdGlvbi9lbmdsaXNoICovIFwiLi9zcmMvbG9jYWxpemF0aW9uL2VuZ2xpc2gudHNcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJlbmdsaXNoU3RyaW5nc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9sb2NhbGl6YXRpb25fZW5nbGlzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNjdfX1tcImVuZ2xpc2hTdHJpbmdzXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zdXJ2ZXlTdHJpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82OF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vc3VydmV5U3RyaW5ncyAqLyBcIi4vc3JjL3N1cnZleVN0cmluZ3MudHNcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzdXJ2ZXlMb2NhbGl6YXRpb25cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfc3VydmV5U3RyaW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNjhfX1tcInN1cnZleUxvY2FsaXphdGlvblwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN1cnZleVN0cmluZ3NcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfc3VydmV5U3RyaW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNjhfX1tcInN1cnZleVN0cmluZ3NcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3F1ZXN0aW9uQ3VzdG9tV2lkZ2V0c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNjlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL3F1ZXN0aW9uQ3VzdG9tV2lkZ2V0cyAqLyBcIi4vc3JjL3F1ZXN0aW9uQ3VzdG9tV2lkZ2V0cy50c1wiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlF1ZXN0aW9uQ3VzdG9tV2lkZ2V0XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3F1ZXN0aW9uQ3VzdG9tV2lkZ2V0c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNjlfX1tcIlF1ZXN0aW9uQ3VzdG9tV2lkZ2V0XCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQ3VzdG9tV2lkZ2V0Q29sbGVjdGlvblwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9xdWVzdGlvbkN1c3RvbVdpZGdldHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzY5X19bXCJDdXN0b21XaWRnZXRDb2xsZWN0aW9uXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9xdWVzdGlvbl9jdXN0b21fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzcwX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9xdWVzdGlvbl9jdXN0b20gKi8gXCIuL3NyYy9xdWVzdGlvbl9jdXN0b20udHNcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJRdWVzdGlvbkN1c3RvbU1vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3F1ZXN0aW9uX2N1c3RvbV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNzBfX1tcIlF1ZXN0aW9uQ3VzdG9tTW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJRdWVzdGlvbkNvbXBvc2l0ZU1vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3F1ZXN0aW9uX2N1c3RvbV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNzBfX1tcIlF1ZXN0aW9uQ29tcG9zaXRlTW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJDb21wb25lbnRRdWVzdGlvbkpTT05cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcXVlc3Rpb25fY3VzdG9tX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83MF9fW1wiQ29tcG9uZW50UXVlc3Rpb25KU09OXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQ29tcG9uZW50Q29sbGVjdGlvblwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9xdWVzdGlvbl9jdXN0b21fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzcwX19bXCJDb21wb25lbnRDb2xsZWN0aW9uXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zdHlsZXNtYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83MV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vc3R5bGVzbWFuYWdlciAqLyBcIi4vc3JjL3N0eWxlc21hbmFnZXIudHNcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJTdHlsZXNNYW5hZ2VyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3N0eWxlc21hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzcxX19bXCJTdHlsZXNNYW5hZ2VyXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9saXN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83Ml9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbGlzdCAqLyBcIi4vc3JjL2xpc3QudHNcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJMaXN0TW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbGlzdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNzJfX1tcIkxpc3RNb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbXVsdGlTZWxlY3RMaXN0TW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzczX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9tdWx0aVNlbGVjdExpc3RNb2RlbCAqLyBcIi4vc3JjL211bHRpU2VsZWN0TGlzdE1vZGVsLnRzXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiTXVsdGlTZWxlY3RMaXN0TW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbXVsdGlTZWxlY3RMaXN0TW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzczX19bXCJNdWx0aVNlbGVjdExpc3RNb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcG9wdXBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzc0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9wb3B1cCAqLyBcIi4vc3JjL3BvcHVwLnRzXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUG9wdXBNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9wb3B1cF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNzRfX1tcIlBvcHVwTW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJjcmVhdGVEaWFsb2dPcHRpb25zXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3BvcHVwX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83NF9fW1wiY3JlYXRlRGlhbG9nT3B0aW9uc1wiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcG9wdXBfdmlld19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL3BvcHVwLXZpZXctbW9kZWwgKi8gXCIuL3NyYy9wb3B1cC12aWV3LW1vZGVsLnRzXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUG9wdXBCYXNlVmlld01vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3BvcHVwX3ZpZXdfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzc1X19bXCJQb3B1cEJhc2VWaWV3TW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3BvcHVwX2Ryb3Bkb3duX3ZpZXdfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzc2X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9wb3B1cC1kcm9wZG93bi12aWV3LW1vZGVsICovIFwiLi9zcmMvcG9wdXAtZHJvcGRvd24tdmlldy1tb2RlbC50c1wiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlBvcHVwRHJvcGRvd25WaWV3TW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcG9wdXBfZHJvcGRvd25fdmlld19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNzZfX1tcIlBvcHVwRHJvcGRvd25WaWV3TW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3BvcHVwX21vZGFsX3ZpZXdfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzc3X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9wb3B1cC1tb2RhbC12aWV3LW1vZGVsICovIFwiLi9zcmMvcG9wdXAtbW9kYWwtdmlldy1tb2RlbC50c1wiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlBvcHVwTW9kYWxWaWV3TW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcG9wdXBfbW9kYWxfdmlld19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNzdfX1tcIlBvcHVwTW9kYWxWaWV3TW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3BvcHVwX3V0aWxzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83OF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vcG9wdXAtdXRpbHMgKi8gXCIuL3NyYy9wb3B1cC11dGlscy50c1wiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImNyZWF0ZVBvcHVwVmlld01vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3BvcHVwX3V0aWxzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83OF9fW1wiY3JlYXRlUG9wdXBWaWV3TW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJjcmVhdGVQb3B1cE1vZGFsVmlld01vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3BvcHVwX3V0aWxzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83OF9fW1wiY3JlYXRlUG9wdXBNb2RhbFZpZXdNb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZHJvcGRvd25MaXN0TW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzc5X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9kcm9wZG93bkxpc3RNb2RlbCAqLyBcIi4vc3JjL2Ryb3Bkb3duTGlzdE1vZGVsLnRzXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiRHJvcGRvd25MaXN0TW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfZHJvcGRvd25MaXN0TW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzc5X19bXCJEcm9wZG93bkxpc3RNb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZHJvcGRvd25NdWx0aVNlbGVjdExpc3RNb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfODBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL2Ryb3Bkb3duTXVsdGlTZWxlY3RMaXN0TW9kZWwgKi8gXCIuL3NyYy9kcm9wZG93bk11bHRpU2VsZWN0TGlzdE1vZGVsLnRzXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiRHJvcGRvd25NdWx0aVNlbGVjdExpc3RNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9kcm9wZG93bk11bHRpU2VsZWN0TGlzdE1vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84MF9fW1wiRHJvcGRvd25NdWx0aVNlbGVjdExpc3RNb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcXVlc3Rpb25fYnV0dG9uZ3JvdXBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzgxX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9xdWVzdGlvbl9idXR0b25ncm91cCAqLyBcIi4vc3JjL3F1ZXN0aW9uX2J1dHRvbmdyb3VwLnRzXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUXVlc3Rpb25CdXR0b25Hcm91cE1vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3F1ZXN0aW9uX2J1dHRvbmdyb3VwX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84MV9fW1wiUXVlc3Rpb25CdXR0b25Hcm91cE1vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQnV0dG9uR3JvdXBJdGVtTW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcXVlc3Rpb25fYnV0dG9uZ3JvdXBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzgxX19bXCJCdXR0b25Hcm91cEl0ZW1Nb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkJ1dHRvbkdyb3VwSXRlbVZhbHVlXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3F1ZXN0aW9uX2J1dHRvbmdyb3VwX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84MV9fW1wiQnV0dG9uR3JvdXBJdGVtVmFsdWVcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3V0aWxzX2RldmljZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzgyX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi91dGlscy9kZXZpY2VzICovIFwiLi9zcmMvdXRpbHMvZGV2aWNlcy50c1wiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIklzTW9iaWxlXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3V0aWxzX2RldmljZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzgyX19bXCJJc01vYmlsZVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIklzVG91Y2hcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdXRpbHNfZGV2aWNlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfODJfX1tcIklzVG91Y2hcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJfc2V0SXNUb3VjaFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF91dGlsc19kZXZpY2VzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84Ml9fW1wiX3NldElzVG91Y2hcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3V0aWxzX3V0aWxzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84M19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vdXRpbHMvdXRpbHMgKi8gXCIuL3NyYy91dGlscy91dGlscy50c1wiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImNvbmZpcm1BY3Rpb25cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdXRpbHNfdXRpbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzgzX19bXCJjb25maXJtQWN0aW9uXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiY29uZmlybUFjdGlvbkFzeW5jXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3V0aWxzX3V0aWxzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84M19fW1wiY29uZmlybUFjdGlvbkFzeW5jXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiZGV0ZWN0SUVPckVkZ2VcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdXRpbHNfdXRpbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzgzX19bXCJkZXRlY3RJRU9yRWRnZVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImRvS2V5MkNsaWNrVXBcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdXRpbHNfdXRpbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzgzX19bXCJkb0tleTJDbGlja1VwXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiZG9LZXkyQ2xpY2tEb3duXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3V0aWxzX3V0aWxzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84M19fW1wiZG9LZXkyQ2xpY2tEb3duXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiZG9LZXkyQ2xpY2tCbHVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3V0aWxzX3V0aWxzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84M19fW1wiZG9LZXkyQ2xpY2tCbHVyXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwibG9hZEZpbGVGcm9tQmFzZTY0XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3V0aWxzX3V0aWxzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84M19fW1wibG9hZEZpbGVGcm9tQmFzZTY0XCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiaW5jcmVhc2VIZWlnaHRCeUNvbnRlbnRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdXRpbHNfdXRpbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzgzX19bXCJpbmNyZWFzZUhlaWdodEJ5Q29udGVudFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImNyZWF0ZVN2Z1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF91dGlsc191dGlsc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfODNfX1tcImNyZWF0ZVN2Z1wiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInNhbml0aXplRWRpdGFibGVDb250ZW50XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3V0aWxzX3V0aWxzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84M19fW1wic2FuaXRpemVFZGl0YWJsZUNvbnRlbnRcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3V0aWxzX2Nzc0NsYXNzQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfODRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL3V0aWxzL2Nzc0NsYXNzQnVpbGRlciAqLyBcIi4vc3JjL3V0aWxzL2Nzc0NsYXNzQnVpbGRlci50c1wiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkNzc0NsYXNzQnVpbGRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF91dGlsc19jc3NDbGFzc0J1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzg0X19bXCJDc3NDbGFzc0J1aWxkZXJcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2RlZmF1bHRDc3NfZGVmYXVsdFYyQ3NzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84NV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vZGVmYXVsdENzcy9kZWZhdWx0VjJDc3MgKi8gXCIuL3NyYy9kZWZhdWx0Q3NzL2RlZmF1bHRWMkNzcy50c1wiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN1cnZleUNzc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9kZWZhdWx0Q3NzX2RlZmF1bHRWMkNzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfODVfX1tcInN1cnZleUNzc1wiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImRlZmF1bHRWMkNzc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9kZWZhdWx0Q3NzX2RlZmF1bHRWMkNzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfODVfX1tcImRlZmF1bHRWMkNzc1wiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImRlZmF1bHRWMlRoZW1lTmFtZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9kZWZhdWx0Q3NzX2RlZmF1bHRWMkNzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfODVfX1tcImRlZmF1bHRWMlRoZW1lTmFtZVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZHJhZ2Ryb3BfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfODZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL2RyYWdkcm9wL2NvcmUgKi8gXCIuL3NyYy9kcmFnZHJvcC9jb3JlLnRzXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiRHJhZ0Ryb3BDb3JlXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2RyYWdkcm9wX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzg2X19bXCJEcmFnRHJvcENvcmVcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2RyYWdkcm9wX2Nob2ljZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzg3X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9kcmFnZHJvcC9jaG9pY2VzICovIFwiLi9zcmMvZHJhZ2Ryb3AvY2hvaWNlcy50c1wiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkRyYWdEcm9wQ2hvaWNlc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9kcmFnZHJvcF9jaG9pY2VzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84N19fW1wiRHJhZ0Ryb3BDaG9pY2VzXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9kcmFnZHJvcF9yYW5raW5nX3NlbGVjdF90b19yYW5rX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84OF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vZHJhZ2Ryb3AvcmFua2luZy1zZWxlY3QtdG8tcmFuayAqLyBcIi4vc3JjL2RyYWdkcm9wL3Jhbmtpbmctc2VsZWN0LXRvLXJhbmsudHNcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJEcmFnRHJvcFJhbmtpbmdTZWxlY3RUb1JhbmtcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfZHJhZ2Ryb3BfcmFua2luZ19zZWxlY3RfdG9fcmFua19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfODhfX1tcIkRyYWdEcm9wUmFua2luZ1NlbGVjdFRvUmFua1wiXTsgfSk7XG5cbi8vIHN0eWxlc1xuLy8gaW1wb3J0IFwiLi4vLi4vbWFpbi5zY3NzXCI7XG4vL2ltcG9ydCBcIi4uLy4uL21vZGVybi5zY3NzXCI7XG52YXIgVmVyc2lvbjtcbnZhciBSZWxlYXNlRGF0ZTtcblZlcnNpb24gPSBcIlwiICsgXCIxLjkuMTEwXCI7XG5SZWxlYXNlRGF0ZSA9IFwiXCIgKyBcIjIwMjMtMDktMjZcIjtcbmZ1bmN0aW9uIGNoZWNrTGlicmFyeVZlcnNpb24odmVyLCBsaWJyYXJ5TmFtZSkge1xuICAgIGlmIChWZXJzaW9uICE9IHZlcikge1xuICAgICAgICB2YXIgc3RyID0gXCJzdXJ2ZXktY29yZSBoYXMgdmVyc2lvbiAnXCIgKyBWZXJzaW9uICsgXCInIGFuZCBcIiArIGxpYnJhcnlOYW1lXG4gICAgICAgICAgICArIFwiIGhhcyB2ZXJzaW9uICdcIiArIHZlciArIFwiJy4gU3VydmV5SlMgbGlicmFyaWVzIHNob3VsZCBoYXZlIHRoZSBzYW1lIHZlcnNpb25zIHRvIHdvcmsgY29ycmVjdGx5LlwiO1xuICAgICAgICAvKiBlc2xpbnQgbm8tY29uc29sZTogW1wiZXJyb3JcIiwgeyBhbGxvdzogW1wiZXJyb3JcIl0gfV0gKi9cbiAgICAgICAgY29uc29sZS5lcnJvcihzdHIpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHNldExpY2Vuc2VLZXkoa2V5KSB7XG4gICAgc2xrKGtleSwgbGljLCBSZWxlYXNlRGF0ZSk7XG59XG5mdW5jdGlvbiBoYXNMaWNlbnNlKGluZGV4KSB7XG4gICAgcmV0dXJuIGxpY1tpbmRleC50b1N0cmluZygpXSA9PT0gdHJ1ZTtcbn1cbnZhciBsaWMgPSB7fTtcbmZ1bmN0aW9uIHNsayhrLCBsaCwgcmQpIHtcbiAgICBpZiAoIWspXG4gICAgICAgIHJldHVybjtcbiAgICB2YXIgZW4gPSBmdW5jdGlvbiAocykge1xuICAgICAgICB2YXIgZSA9IHt9LCBpLCBiID0gMCwgYywgeCwgbCA9IDAsIGEsIHIgPSBcIlwiLCB3ID0gU3RyaW5nLmZyb21DaGFyQ29kZSwgTCA9IHMubGVuZ3RoO1xuICAgICAgICB2YXIgQSA9IFwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrL1wiO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykge1xuICAgICAgICAgICAgZVtBLmNoYXJBdChpKV0gPSBpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoeCA9IDA7IHggPCBMOyB4KyspIHtcbiAgICAgICAgICAgIHZhciBjXzEgPSBlW3MuY2hhckF0KHgpXTtcbiAgICAgICAgICAgIGIgPSAoYiA8PCA2KSArIGNfMTtcbiAgICAgICAgICAgIGwgKz0gNjtcbiAgICAgICAgICAgIHdoaWxlIChsID49IDgpIHtcbiAgICAgICAgICAgICAgICAoKGEgPSAoYiA+Pj4gKGwgLT0gOCkpICYgMHhmZikgfHwgKHggPCAoTCAtIDIpKSkgJiYgKHIgKz0gdyhhKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHI7XG4gICAgfTtcbiAgICB2YXIgdiA9IGVuKGspO1xuICAgIGlmICghdilcbiAgICAgICAgcmV0dXJuO1xuICAgIHZhciBpbmRleCA9IHYuaW5kZXhPZihcIjtcIik7XG4gICAgaWYgKGluZGV4IDwgMClcbiAgICAgICAgcmV0dXJuO1xuICAgIHYgPSB2LnN1YnN0cmluZyhpbmRleCArIDEpO1xuICAgIHYuc3BsaXQoXCIsXCIpLmZvckVhY2goZnVuY3Rpb24gKHMpIHtcbiAgICAgICAgdmFyIGkgPSBzLmluZGV4T2YoXCI9XCIpO1xuICAgICAgICBpZiAoaSA+IDApIHtcbiAgICAgICAgICAgIGxoW3Muc3Vic3RyaW5nKDAsIGkpXSA9IG5ldyBEYXRlKHJkKSA8PSBuZXcgRGF0ZShzLnN1YnN0cmluZyhpICsgMSkpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vLyBleHBvcnQgeyBjdWx0dXJlSW5mbyB9IGZyb20gXCIuLi8uLi9jdWx0dXJlSW5mb1wiO1xuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8vVW5jb21tZW50IHRvIGluY2x1ZGUgdGhlIFwiZGF0ZVwiIHF1ZXN0aW9uIHR5cGUuXG4vL2V4cG9ydCB7ZGVmYXVsdCBhcyBRdWVzdGlvbkRhdGVNb2RlbH0gZnJvbSBcIi4uLy4uL3BsdWdpbnMvcXVlc3Rpb25fZGF0ZVwiO1xuXG5cblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL2VudHJpZXMvY29yZS13by1tb2RlbC50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvZW50cmllcy9jb3JlLXdvLW1vZGVsLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBWZXJzaW9uLCBSZWxlYXNlRGF0ZSwgY2hlY2tMaWJyYXJ5VmVyc2lvbiwgc2V0TGljZW5zZUtleSwgaGFzTGljZW5zZSwgc2V0dGluZ3MsIEhlbHBlcnMsIEFuc3dlckNvdW50VmFsaWRhdG9yLCBFbWFpbFZhbGlkYXRvciwgTnVtZXJpY1ZhbGlkYXRvciwgUmVnZXhWYWxpZGF0b3IsIFN1cnZleVZhbGlkYXRvciwgVGV4dFZhbGlkYXRvciwgVmFsaWRhdG9yUmVzdWx0LCBFeHByZXNzaW9uVmFsaWRhdG9yLCBWYWxpZGF0b3JSdW5uZXIsIEl0ZW1WYWx1ZSwgQmFzZSwgRXZlbnQsIEV2ZW50QmFzZSwgQXJyYXlDaGFuZ2VzLCBDb21wdXRlZFVwZGF0ZXIsIFN1cnZleUVycm9yLCBTdXJ2ZXlFbGVtZW50Q29yZSwgU3VydmV5RWxlbWVudCwgRHJhZ1R5cGVPdmVyTWVFbnVtLCBDYWxjdWxhdGVkVmFsdWUsIEN1c3RvbUVycm9yLCBBbnN3ZXJSZXF1aXJlZEVycm9yLCBPbmVBbnN3ZXJSZXF1aXJlZEVycm9yLCBSZXF1cmVOdW1lcmljRXJyb3IsIEV4Y2VlZFNpemVFcnJvciwgTG9jYWxpemFibGVTdHJpbmcsIExvY2FsaXphYmxlU3RyaW5ncywgSHRtbENvbmRpdGlvbkl0ZW0sIFVybENvbmRpdGlvbkl0ZW0sIENob2ljZXNSZXN0ZnVsLCBDaG9pY2VzUmVzdGZ1bGwsIEZ1bmN0aW9uRmFjdG9yeSwgcmVnaXN0ZXJGdW5jdGlvbiwgQ29uZGl0aW9uUnVubmVyLCBFeHByZXNzaW9uUnVubmVyLCBFeHByZXNzaW9uRXhlY3V0b3IsIE9wZXJhbmQsIENvbnN0LCBCaW5hcnlPcGVyYW5kLCBWYXJpYWJsZSwgRnVuY3Rpb25PcGVyYW5kLCBBcnJheU9wZXJhbmQsIFVuYXJ5T3BlcmFuZCwgQ29uZGl0aW9uc1BhcnNlciwgUHJvY2Vzc1ZhbHVlLCBKc29uRXJyb3IsIEpzb25JbmNvcnJlY3RUeXBlRXJyb3IsIEpzb25NZXRhZGF0YSwgSnNvbk1ldGFkYXRhQ2xhc3MsIEpzb25NaXNzaW5nVHlwZUVycm9yLCBKc29uTWlzc2luZ1R5cGVFcnJvckJhc2UsIEpzb25PYmplY3QsIEpzb25PYmplY3RQcm9wZXJ0eSwgSnNvblJlcXVpcmVkUHJvcGVydHlFcnJvciwgSnNvblVua25vd25Qcm9wZXJ0eUVycm9yLCBTZXJpYWxpemVyLCBwcm9wZXJ0eSwgcHJvcGVydHlBcnJheSwgTWF0cml4RHJvcGRvd25DZWxsLCBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSwgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZSwgTWF0cml4RHJvcGRvd25Db2x1bW4sIG1hdHJpeERyb3Bkb3duQ29sdW1uVHlwZXMsIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwsIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFJvdywgUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkVGFibGUsIE1hdHJpeERyb3Bkb3duUm93TW9kZWwsIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbCwgTWF0cml4RHluYW1pY1Jvd01vZGVsLCBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbCwgTWF0cml4Um93TW9kZWwsIE1hdHJpeENlbGxzLCBRdWVzdGlvbk1hdHJpeE1vZGVsLCBRdWVzdGlvbk1hdHJpeEJhc2VNb2RlbCwgTXVsdGlwbGVUZXh0SXRlbU1vZGVsLCBNdWx0aXBsZVRleHRDZWxsLCBNdWx0aXBsZVRleHRFcnJvckNlbGwsIE11dGxpcGxlVGV4dEVycm9yUm93LCBNdXRsaXBsZVRleHRSb3csIFF1ZXN0aW9uTXVsdGlwbGVUZXh0TW9kZWwsIE11bHRpcGxlVGV4dEVkaXRvck1vZGVsLCBQYW5lbE1vZGVsLCBQYW5lbE1vZGVsQmFzZSwgUXVlc3Rpb25Sb3dNb2RlbCwgRmxvd1BhbmVsTW9kZWwsIFBhZ2VNb2RlbCwgRGVmYXVsdFRpdGxlTW9kZWwsIFF1ZXN0aW9uLCBRdWVzdGlvbk5vblZhbHVlLCBRdWVzdGlvbkVtcHR5TW9kZWwsIFF1ZXN0aW9uQ2hlY2tib3hCYXNlLCBRdWVzdGlvblNlbGVjdEJhc2UsIFF1ZXN0aW9uQ2hlY2tib3hNb2RlbCwgUXVlc3Rpb25UYWdib3hNb2RlbCwgUXVlc3Rpb25SYW5raW5nTW9kZWwsIFF1ZXN0aW9uQ29tbWVudE1vZGVsLCBRdWVzdGlvbkRyb3Bkb3duTW9kZWwsIFF1ZXN0aW9uRmFjdG9yeSwgRWxlbWVudEZhY3RvcnksIFF1ZXN0aW9uRmlsZU1vZGVsLCBRdWVzdGlvbkh0bWxNb2RlbCwgUXVlc3Rpb25SYWRpb2dyb3VwTW9kZWwsIFF1ZXN0aW9uUmF0aW5nTW9kZWwsIFJlbmRlcmVkUmF0aW5nSXRlbSwgUXVlc3Rpb25FeHByZXNzaW9uTW9kZWwsIFF1ZXN0aW9uVGV4dEJhc2UsIENoYXJhY3RlckNvdW50ZXIsIFF1ZXN0aW9uVGV4dE1vZGVsLCBRdWVzdGlvbkJvb2xlYW5Nb2RlbCwgUXVlc3Rpb25JbWFnZVBpY2tlck1vZGVsLCBJbWFnZUl0ZW1WYWx1ZSwgUXVlc3Rpb25JbWFnZU1vZGVsLCBRdWVzdGlvblNpZ25hdHVyZVBhZE1vZGVsLCBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsLCBRdWVzdGlvblBhbmVsRHluYW1pY0l0ZW0sIFN1cnZleVRpbWVyLCBTdXJ2ZXlUaW1lck1vZGVsLCB0cnlOYXZpZ2F0ZVRvUGFnZSwgdHJ5Rm9jdXNQYWdlLCBjcmVhdGVUT0NMaXN0TW9kZWwsIGdldFRvY1Jvb3RDc3MsIFRPQ01vZGVsLCBTdXJ2ZXlQcm9ncmVzc01vZGVsLCBTdXJ2ZXlQcm9ncmVzc0J1dHRvbnNNb2RlbCwgU3VydmV5TW9kZWwsIFN1cnZleVRyaWdnZXIsIFN1cnZleVRyaWdnZXJDb21wbGV0ZSwgU3VydmV5VHJpZ2dlclNldFZhbHVlLCBTdXJ2ZXlUcmlnZ2VyVmlzaWJsZSwgU3VydmV5VHJpZ2dlckNvcHlWYWx1ZSwgU3VydmV5VHJpZ2dlclJ1bkV4cHJlc3Npb24sIFN1cnZleVRyaWdnZXJTa2lwLCBUcmlnZ2VyLCBQb3B1cFN1cnZleU1vZGVsLCBTdXJ2ZXlXaW5kb3dNb2RlbCwgVGV4dFByZVByb2Nlc3NvciwgTm90aWZpZXIsIENvdmVyLCBDb3ZlckNlbGwsIGR4U3VydmV5U2VydmljZSwgZW5nbGlzaFN0cmluZ3MsIHN1cnZleUxvY2FsaXphdGlvbiwgc3VydmV5U3RyaW5ncywgUXVlc3Rpb25DdXN0b21XaWRnZXQsIEN1c3RvbVdpZGdldENvbGxlY3Rpb24sIFF1ZXN0aW9uQ3VzdG9tTW9kZWwsIFF1ZXN0aW9uQ29tcG9zaXRlTW9kZWwsIENvbXBvbmVudFF1ZXN0aW9uSlNPTiwgQ29tcG9uZW50Q29sbGVjdGlvbiwgU3R5bGVzTWFuYWdlciwgTGlzdE1vZGVsLCBNdWx0aVNlbGVjdExpc3RNb2RlbCwgUG9wdXBNb2RlbCwgY3JlYXRlRGlhbG9nT3B0aW9ucywgUG9wdXBCYXNlVmlld01vZGVsLCBQb3B1cERyb3Bkb3duVmlld01vZGVsLCBQb3B1cE1vZGFsVmlld01vZGVsLCBjcmVhdGVQb3B1cFZpZXdNb2RlbCwgY3JlYXRlUG9wdXBNb2RhbFZpZXdNb2RlbCwgRHJvcGRvd25MaXN0TW9kZWwsIERyb3Bkb3duTXVsdGlTZWxlY3RMaXN0TW9kZWwsIFF1ZXN0aW9uQnV0dG9uR3JvdXBNb2RlbCwgQnV0dG9uR3JvdXBJdGVtTW9kZWwsIEJ1dHRvbkdyb3VwSXRlbVZhbHVlLCBJc01vYmlsZSwgSXNUb3VjaCwgX3NldElzVG91Y2gsIGNvbmZpcm1BY3Rpb24sIGNvbmZpcm1BY3Rpb25Bc3luYywgZGV0ZWN0SUVPckVkZ2UsIGRvS2V5MkNsaWNrVXAsIGRvS2V5MkNsaWNrRG93biwgZG9LZXkyQ2xpY2tCbHVyLCBsb2FkRmlsZUZyb21CYXNlNjQsIGluY3JlYXNlSGVpZ2h0QnlDb250ZW50LCBjcmVhdGVTdmcsIHNhbml0aXplRWRpdGFibGVDb250ZW50LCBDc3NDbGFzc0J1aWxkZXIsIHN1cnZleUNzcywgZGVmYXVsdFYyQ3NzLCBkZWZhdWx0VjJUaGVtZU5hbWUsIERyYWdEcm9wQ29yZSwgRHJhZ0Ryb3BDaG9pY2VzLCBEcmFnRHJvcFJhbmtpbmdTZWxlY3RUb1JhbmssIGRlZmF1bHRTdGFuZGFyZENzcywgbW9kZXJuQ3NzLCBTdmdJY29uUmVnaXN0cnksIFN2Z1JlZ2lzdHJ5LCBTdmdCdW5kbGVWaWV3TW9kZWwsIFJlbmRlcmVyRmFjdG9yeSwgUmVzcG9uc2l2aXR5TWFuYWdlciwgVmVydGljYWxSZXNwb25zaXZpdHlNYW5hZ2VyLCB1bndyYXAsIGdldE9yaWdpbmFsRXZlbnQsIGdldEVsZW1lbnQsIGNyZWF0ZURyb3Bkb3duQWN0aW9uTW9kZWwsIGNyZWF0ZURyb3Bkb3duQWN0aW9uTW9kZWxBZHZhbmNlZCwgZ2V0QWN0aW9uRHJvcGRvd25CdXR0b25UYXJnZXQsIEJhc2VBY3Rpb24sIEFjdGlvbiwgQWN0aW9uRHJvcGRvd25WaWV3TW9kZWwsIEFkYXB0aXZlQWN0aW9uQ29udGFpbmVyLCBkZWZhdWx0QWN0aW9uQmFyQ3NzLCBBY3Rpb25Db250YWluZXIsIERyYWdPckNsaWNrSGVscGVyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9jaHVua3NfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vY2h1bmtzL21vZGVsICovIFwiLi9zcmMvZW50cmllcy9jaHVua3MvbW9kZWwudHNcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJWZXJzaW9uXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NodW5rc19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiVmVyc2lvblwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlJlbGVhc2VEYXRlXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NodW5rc19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiUmVsZWFzZURhdGVcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJjaGVja0xpYnJhcnlWZXJzaW9uXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NodW5rc19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiY2hlY2tMaWJyYXJ5VmVyc2lvblwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInNldExpY2Vuc2VLZXlcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY2h1bmtzX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzZXRMaWNlbnNlS2V5XCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiaGFzTGljZW5zZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jaHVua3NfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcImhhc0xpY2Vuc2VcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzZXR0aW5nc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jaHVua3NfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInNldHRpbmdzXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiSGVscGVyc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jaHVua3NfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkhlbHBlcnNcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJBbnN3ZXJDb3VudFZhbGlkYXRvclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jaHVua3NfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkFuc3dlckNvdW50VmFsaWRhdG9yXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiRW1haWxWYWxpZGF0b3JcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY2h1bmtzX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJFbWFpbFZhbGlkYXRvclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIk51bWVyaWNWYWxpZGF0b3JcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY2h1bmtzX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJOdW1lcmljVmFsaWRhdG9yXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUmVnZXhWYWxpZGF0b3JcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY2h1bmtzX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJSZWdleFZhbGlkYXRvclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlN1cnZleVZhbGlkYXRvclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jaHVua3NfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlN1cnZleVZhbGlkYXRvclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlRleHRWYWxpZGF0b3JcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY2h1bmtzX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJUZXh0VmFsaWRhdG9yXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiVmFsaWRhdG9yUmVzdWx0XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NodW5rc19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiVmFsaWRhdG9yUmVzdWx0XCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiRXhwcmVzc2lvblZhbGlkYXRvclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jaHVua3NfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkV4cHJlc3Npb25WYWxpZGF0b3JcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJWYWxpZGF0b3JSdW5uZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY2h1bmtzX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJWYWxpZGF0b3JSdW5uZXJcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJJdGVtVmFsdWVcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY2h1bmtzX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJJdGVtVmFsdWVcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJCYXNlXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NodW5rc19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiQmFzZVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkV2ZW50XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NodW5rc19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiRXZlbnRcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJFdmVudEJhc2VcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY2h1bmtzX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJFdmVudEJhc2VcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJBcnJheUNoYW5nZXNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY2h1bmtzX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJBcnJheUNoYW5nZXNcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJDb21wdXRlZFVwZGF0ZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY2h1bmtzX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJDb21wdXRlZFVwZGF0ZXJcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJTdXJ2ZXlFcnJvclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jaHVua3NfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlN1cnZleUVycm9yXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiU3VydmV5RWxlbWVudENvcmVcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY2h1bmtzX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJTdXJ2ZXlFbGVtZW50Q29yZVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlN1cnZleUVsZW1lbnRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY2h1bmtzX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJTdXJ2ZXlFbGVtZW50XCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiRHJhZ1R5cGVPdmVyTWVFbnVtXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NodW5rc19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiRHJhZ1R5cGVPdmVyTWVFbnVtXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQ2FsY3VsYXRlZFZhbHVlXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NodW5rc19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiQ2FsY3VsYXRlZFZhbHVlXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQ3VzdG9tRXJyb3JcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY2h1bmtzX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJDdXN0b21FcnJvclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkFuc3dlclJlcXVpcmVkRXJyb3JcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY2h1bmtzX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJBbnN3ZXJSZXF1aXJlZEVycm9yXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiT25lQW5zd2VyUmVxdWlyZWRFcnJvclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jaHVua3NfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIk9uZUFuc3dlclJlcXVpcmVkRXJyb3JcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJSZXF1cmVOdW1lcmljRXJyb3JcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY2h1bmtzX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJSZXF1cmVOdW1lcmljRXJyb3JcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJFeGNlZWRTaXplRXJyb3JcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY2h1bmtzX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJFeGNlZWRTaXplRXJyb3JcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJMb2NhbGl6YWJsZVN0cmluZ1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jaHVua3NfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkxvY2FsaXphYmxlU3RyaW5nXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiTG9jYWxpemFibGVTdHJpbmdzXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NodW5rc19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiTG9jYWxpemFibGVTdHJpbmdzXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiSHRtbENvbmRpdGlvbkl0ZW1cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY2h1bmtzX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJIdG1sQ29uZGl0aW9uSXRlbVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlVybENvbmRpdGlvbkl0ZW1cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY2h1bmtzX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJVcmxDb25kaXRpb25JdGVtXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQ2hvaWNlc1Jlc3RmdWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY2h1bmtzX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJDaG9pY2VzUmVzdGZ1bFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkNob2ljZXNSZXN0ZnVsbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jaHVua3NfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkNob2ljZXNSZXN0ZnVsbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkZ1bmN0aW9uRmFjdG9yeVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jaHVua3NfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkZ1bmN0aW9uRmFjdG9yeVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInJlZ2lzdGVyRnVuY3Rpb25cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY2h1bmtzX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJyZWdpc3RlckZ1bmN0aW9uXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQ29uZGl0aW9uUnVubmVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NodW5rc19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiQ29uZGl0aW9uUnVubmVyXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiRXhwcmVzc2lvblJ1bm5lclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jaHVua3NfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkV4cHJlc3Npb25SdW5uZXJcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJFeHByZXNzaW9uRXhlY3V0b3JcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY2h1bmtzX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJFeHByZXNzaW9uRXhlY3V0b3JcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJPcGVyYW5kXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NodW5rc19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiT3BlcmFuZFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkNvbnN0XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NodW5rc19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiQ29uc3RcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJCaW5hcnlPcGVyYW5kXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NodW5rc19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiQmluYXJ5T3BlcmFuZFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlZhcmlhYmxlXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NodW5rc19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiVmFyaWFibGVcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJGdW5jdGlvbk9wZXJhbmRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY2h1bmtzX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJGdW5jdGlvbk9wZXJhbmRcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJBcnJheU9wZXJhbmRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY2h1bmtzX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJBcnJheU9wZXJhbmRcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJVbmFyeU9wZXJhbmRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY2h1bmtzX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJVbmFyeU9wZXJhbmRcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJDb25kaXRpb25zUGFyc2VyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NodW5rc19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiQ29uZGl0aW9uc1BhcnNlclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlByb2Nlc3NWYWx1ZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jaHVua3NfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlByb2Nlc3NWYWx1ZVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkpzb25FcnJvclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jaHVua3NfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkpzb25FcnJvclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkpzb25JbmNvcnJlY3RUeXBlRXJyb3JcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY2h1bmtzX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJKc29uSW5jb3JyZWN0VHlwZUVycm9yXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiSnNvbk1ldGFkYXRhXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NodW5rc19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiSnNvbk1ldGFkYXRhXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiSnNvbk1ldGFkYXRhQ2xhc3NcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY2h1bmtzX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJKc29uTWV0YWRhdGFDbGFzc1wiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkpzb25NaXNzaW5nVHlwZUVycm9yXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NodW5rc19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiSnNvbk1pc3NpbmdUeXBlRXJyb3JcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJKc29uTWlzc2luZ1R5cGVFcnJvckJhc2VcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY2h1bmtzX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJKc29uTWlzc2luZ1R5cGVFcnJvckJhc2VcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJKc29uT2JqZWN0XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NodW5rc19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiSnNvbk9iamVjdFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkpzb25PYmplY3RQcm9wZXJ0eVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jaHVua3NfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkpzb25PYmplY3RQcm9wZXJ0eVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkpzb25SZXF1aXJlZFByb3BlcnR5RXJyb3JcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY2h1bmtzX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJKc29uUmVxdWlyZWRQcm9wZXJ0eUVycm9yXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiSnNvblVua25vd25Qcm9wZXJ0eUVycm9yXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NodW5rc19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiSnNvblVua25vd25Qcm9wZXJ0eUVycm9yXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiU2VyaWFsaXplclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jaHVua3NfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlNlcmlhbGl6ZXJcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJwcm9wZXJ0eVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jaHVua3NfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInByb3BlcnR5XCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwicHJvcGVydHlBcnJheVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jaHVua3NfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInByb3BlcnR5QXJyYXlcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJNYXRyaXhEcm9wZG93bkNlbGxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY2h1bmtzX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJNYXRyaXhEcm9wZG93bkNlbGxcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jaHVua3NfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIk1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jaHVua3NfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2VcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJNYXRyaXhEcm9wZG93bkNvbHVtblwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jaHVua3NfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIk1hdHJpeERyb3Bkb3duQ29sdW1uXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwibWF0cml4RHJvcGRvd25Db2x1bW5UeXBlc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jaHVua3NfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIm1hdHJpeERyb3Bkb3duQ29sdW1uVHlwZXNcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRDZWxsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NodW5rc19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkQ2VsbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFJvd1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jaHVua3NfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFJvd1wiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFRhYmxlXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NodW5rc19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkVGFibGVcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJNYXRyaXhEcm9wZG93blJvd01vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NodW5rc19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiTWF0cml4RHJvcGRvd25Sb3dNb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jaHVua3NfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIk1hdHJpeER5bmFtaWNSb3dNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jaHVua3NfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIk1hdHJpeER5bmFtaWNSb3dNb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NodW5rc19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJNYXRyaXhSb3dNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jaHVua3NfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIk1hdHJpeFJvd01vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiTWF0cml4Q2VsbHNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY2h1bmtzX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJNYXRyaXhDZWxsc1wiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlF1ZXN0aW9uTWF0cml4TW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY2h1bmtzX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJRdWVzdGlvbk1hdHJpeE1vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUXVlc3Rpb25NYXRyaXhCYXNlTW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY2h1bmtzX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJRdWVzdGlvbk1hdHJpeEJhc2VNb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIk11bHRpcGxlVGV4dEl0ZW1Nb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jaHVua3NfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIk11bHRpcGxlVGV4dEl0ZW1Nb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIk11bHRpcGxlVGV4dENlbGxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY2h1bmtzX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJNdWx0aXBsZVRleHRDZWxsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiTXVsdGlwbGVUZXh0RXJyb3JDZWxsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NodW5rc19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiTXVsdGlwbGVUZXh0RXJyb3JDZWxsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiTXV0bGlwbGVUZXh0RXJyb3JSb3dcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY2h1bmtzX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJNdXRsaXBsZVRleHRFcnJvclJvd1wiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIk11dGxpcGxlVGV4dFJvd1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jaHVua3NfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIk11dGxpcGxlVGV4dFJvd1wiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlF1ZXN0aW9uTXVsdGlwbGVUZXh0TW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY2h1bmtzX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJRdWVzdGlvbk11bHRpcGxlVGV4dE1vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiTXVsdGlwbGVUZXh0RWRpdG9yTW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY2h1bmtzX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJNdWx0aXBsZVRleHRFZGl0b3JNb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlBhbmVsTW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY2h1bmtzX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJQYW5lbE1vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUGFuZWxNb2RlbEJhc2VcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY2h1bmtzX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJQYW5lbE1vZGVsQmFzZVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlF1ZXN0aW9uUm93TW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY2h1bmtzX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJRdWVzdGlvblJvd01vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiRmxvd1BhbmVsTW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY2h1bmtzX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJGbG93UGFuZWxNb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlBhZ2VNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jaHVua3NfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlBhZ2VNb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkRlZmF1bHRUaXRsZU1vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NodW5rc19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiRGVmYXVsdFRpdGxlTW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJRdWVzdGlvblwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jaHVua3NfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlF1ZXN0aW9uXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUXVlc3Rpb25Ob25WYWx1ZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jaHVua3NfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlF1ZXN0aW9uTm9uVmFsdWVcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJRdWVzdGlvbkVtcHR5TW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY2h1bmtzX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJRdWVzdGlvbkVtcHR5TW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJRdWVzdGlvbkNoZWNrYm94QmFzZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jaHVua3NfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlF1ZXN0aW9uQ2hlY2tib3hCYXNlXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUXVlc3Rpb25TZWxlY3RCYXNlXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NodW5rc19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiUXVlc3Rpb25TZWxlY3RCYXNlXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUXVlc3Rpb25DaGVja2JveE1vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NodW5rc19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiUXVlc3Rpb25DaGVja2JveE1vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUXVlc3Rpb25UYWdib3hNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jaHVua3NfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlF1ZXN0aW9uVGFnYm94TW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJRdWVzdGlvblJhbmtpbmdNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jaHVua3NfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlF1ZXN0aW9uUmFua2luZ01vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUXVlc3Rpb25Db21tZW50TW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY2h1bmtzX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJRdWVzdGlvbkNvbW1lbnRNb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlF1ZXN0aW9uRHJvcGRvd25Nb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jaHVua3NfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlF1ZXN0aW9uRHJvcGRvd25Nb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlF1ZXN0aW9uRmFjdG9yeVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jaHVua3NfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlF1ZXN0aW9uRmFjdG9yeVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkVsZW1lbnRGYWN0b3J5XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NodW5rc19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiRWxlbWVudEZhY3RvcnlcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJRdWVzdGlvbkZpbGVNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jaHVua3NfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlF1ZXN0aW9uRmlsZU1vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUXVlc3Rpb25IdG1sTW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY2h1bmtzX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJRdWVzdGlvbkh0bWxNb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlF1ZXN0aW9uUmFkaW9ncm91cE1vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NodW5rc19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiUXVlc3Rpb25SYWRpb2dyb3VwTW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJRdWVzdGlvblJhdGluZ01vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NodW5rc19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiUXVlc3Rpb25SYXRpbmdNb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlJlbmRlcmVkUmF0aW5nSXRlbVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jaHVua3NfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlJlbmRlcmVkUmF0aW5nSXRlbVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlF1ZXN0aW9uRXhwcmVzc2lvbk1vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NodW5rc19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiUXVlc3Rpb25FeHByZXNzaW9uTW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJRdWVzdGlvblRleHRCYXNlXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NodW5rc19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiUXVlc3Rpb25UZXh0QmFzZVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkNoYXJhY3RlckNvdW50ZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY2h1bmtzX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJDaGFyYWN0ZXJDb3VudGVyXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUXVlc3Rpb25UZXh0TW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY2h1bmtzX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJRdWVzdGlvblRleHRNb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlF1ZXN0aW9uQm9vbGVhbk1vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NodW5rc19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiUXVlc3Rpb25Cb29sZWFuTW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJRdWVzdGlvbkltYWdlUGlja2VyTW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY2h1bmtzX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJRdWVzdGlvbkltYWdlUGlja2VyTW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJJbWFnZUl0ZW1WYWx1ZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jaHVua3NfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkltYWdlSXRlbVZhbHVlXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUXVlc3Rpb25JbWFnZU1vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NodW5rc19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiUXVlc3Rpb25JbWFnZU1vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUXVlc3Rpb25TaWduYXR1cmVQYWRNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jaHVua3NfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlF1ZXN0aW9uU2lnbmF0dXJlUGFkTW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NodW5rc19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlF1ZXN0aW9uUGFuZWxEeW5hbWljSXRlbVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jaHVua3NfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlF1ZXN0aW9uUGFuZWxEeW5hbWljSXRlbVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlN1cnZleVRpbWVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NodW5rc19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiU3VydmV5VGltZXJcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJTdXJ2ZXlUaW1lck1vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NodW5rc19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiU3VydmV5VGltZXJNb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInRyeU5hdmlnYXRlVG9QYWdlXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NodW5rc19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1widHJ5TmF2aWdhdGVUb1BhZ2VcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJ0cnlGb2N1c1BhZ2VcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY2h1bmtzX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJ0cnlGb2N1c1BhZ2VcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJjcmVhdGVUT0NMaXN0TW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY2h1bmtzX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJjcmVhdGVUT0NMaXN0TW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJnZXRUb2NSb290Q3NzXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NodW5rc19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiZ2V0VG9jUm9vdENzc1wiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlRPQ01vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NodW5rc19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiVE9DTW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJTdXJ2ZXlQcm9ncmVzc01vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NodW5rc19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiU3VydmV5UHJvZ3Jlc3NNb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlN1cnZleVByb2dyZXNzQnV0dG9uc01vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NodW5rc19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiU3VydmV5UHJvZ3Jlc3NCdXR0b25zTW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJTdXJ2ZXlNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jaHVua3NfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlN1cnZleU1vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiU3VydmV5VHJpZ2dlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jaHVua3NfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlN1cnZleVRyaWdnZXJcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJTdXJ2ZXlUcmlnZ2VyQ29tcGxldGVcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY2h1bmtzX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJTdXJ2ZXlUcmlnZ2VyQ29tcGxldGVcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJTdXJ2ZXlUcmlnZ2VyU2V0VmFsdWVcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY2h1bmtzX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJTdXJ2ZXlUcmlnZ2VyU2V0VmFsdWVcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJTdXJ2ZXlUcmlnZ2VyVmlzaWJsZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jaHVua3NfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlN1cnZleVRyaWdnZXJWaXNpYmxlXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiU3VydmV5VHJpZ2dlckNvcHlWYWx1ZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jaHVua3NfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlN1cnZleVRyaWdnZXJDb3B5VmFsdWVcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJTdXJ2ZXlUcmlnZ2VyUnVuRXhwcmVzc2lvblwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jaHVua3NfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlN1cnZleVRyaWdnZXJSdW5FeHByZXNzaW9uXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiU3VydmV5VHJpZ2dlclNraXBcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY2h1bmtzX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJTdXJ2ZXlUcmlnZ2VyU2tpcFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlRyaWdnZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY2h1bmtzX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJUcmlnZ2VyXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUG9wdXBTdXJ2ZXlNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jaHVua3NfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlBvcHVwU3VydmV5TW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJTdXJ2ZXlXaW5kb3dNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jaHVua3NfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlN1cnZleVdpbmRvd01vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiVGV4dFByZVByb2Nlc3NvclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jaHVua3NfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlRleHRQcmVQcm9jZXNzb3JcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJOb3RpZmllclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jaHVua3NfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIk5vdGlmaWVyXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQ292ZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY2h1bmtzX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJDb3ZlclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkNvdmVyQ2VsbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jaHVua3NfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkNvdmVyQ2VsbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImR4U3VydmV5U2VydmljZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jaHVua3NfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcImR4U3VydmV5U2VydmljZVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImVuZ2xpc2hTdHJpbmdzXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NodW5rc19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiZW5nbGlzaFN0cmluZ3NcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzdXJ2ZXlMb2NhbGl6YXRpb25cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY2h1bmtzX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdXJ2ZXlMb2NhbGl6YXRpb25cIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzdXJ2ZXlTdHJpbmdzXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NodW5rc19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3VydmV5U3RyaW5nc1wiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlF1ZXN0aW9uQ3VzdG9tV2lkZ2V0XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NodW5rc19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiUXVlc3Rpb25DdXN0b21XaWRnZXRcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJDdXN0b21XaWRnZXRDb2xsZWN0aW9uXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NodW5rc19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiQ3VzdG9tV2lkZ2V0Q29sbGVjdGlvblwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlF1ZXN0aW9uQ3VzdG9tTW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY2h1bmtzX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJRdWVzdGlvbkN1c3RvbU1vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUXVlc3Rpb25Db21wb3NpdGVNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jaHVua3NfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlF1ZXN0aW9uQ29tcG9zaXRlTW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJDb21wb25lbnRRdWVzdGlvbkpTT05cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY2h1bmtzX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJDb21wb25lbnRRdWVzdGlvbkpTT05cIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJDb21wb25lbnRDb2xsZWN0aW9uXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NodW5rc19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiQ29tcG9uZW50Q29sbGVjdGlvblwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlN0eWxlc01hbmFnZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY2h1bmtzX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJTdHlsZXNNYW5hZ2VyXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiTGlzdE1vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NodW5rc19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiTGlzdE1vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiTXVsdGlTZWxlY3RMaXN0TW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY2h1bmtzX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJNdWx0aVNlbGVjdExpc3RNb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlBvcHVwTW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY2h1bmtzX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJQb3B1cE1vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiY3JlYXRlRGlhbG9nT3B0aW9uc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jaHVua3NfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcImNyZWF0ZURpYWxvZ09wdGlvbnNcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJQb3B1cEJhc2VWaWV3TW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY2h1bmtzX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJQb3B1cEJhc2VWaWV3TW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJQb3B1cERyb3Bkb3duVmlld01vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NodW5rc19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiUG9wdXBEcm9wZG93blZpZXdNb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlBvcHVwTW9kYWxWaWV3TW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY2h1bmtzX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJQb3B1cE1vZGFsVmlld01vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiY3JlYXRlUG9wdXBWaWV3TW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY2h1bmtzX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJjcmVhdGVQb3B1cFZpZXdNb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImNyZWF0ZVBvcHVwTW9kYWxWaWV3TW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY2h1bmtzX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJjcmVhdGVQb3B1cE1vZGFsVmlld01vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiRHJvcGRvd25MaXN0TW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY2h1bmtzX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJEcm9wZG93bkxpc3RNb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkRyb3Bkb3duTXVsdGlTZWxlY3RMaXN0TW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY2h1bmtzX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJEcm9wZG93bk11bHRpU2VsZWN0TGlzdE1vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUXVlc3Rpb25CdXR0b25Hcm91cE1vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NodW5rc19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiUXVlc3Rpb25CdXR0b25Hcm91cE1vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQnV0dG9uR3JvdXBJdGVtTW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY2h1bmtzX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJCdXR0b25Hcm91cEl0ZW1Nb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkJ1dHRvbkdyb3VwSXRlbVZhbHVlXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NodW5rc19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiQnV0dG9uR3JvdXBJdGVtVmFsdWVcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJJc01vYmlsZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jaHVua3NfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIklzTW9iaWxlXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiSXNUb3VjaFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jaHVua3NfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIklzVG91Y2hcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJfc2V0SXNUb3VjaFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jaHVua3NfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIl9zZXRJc1RvdWNoXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiY29uZmlybUFjdGlvblwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jaHVua3NfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcImNvbmZpcm1BY3Rpb25cIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJjb25maXJtQWN0aW9uQXN5bmNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY2h1bmtzX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJjb25maXJtQWN0aW9uQXN5bmNcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJkZXRlY3RJRU9yRWRnZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jaHVua3NfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcImRldGVjdElFT3JFZGdlXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiZG9LZXkyQ2xpY2tVcFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jaHVua3NfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcImRvS2V5MkNsaWNrVXBcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJkb0tleTJDbGlja0Rvd25cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY2h1bmtzX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJkb0tleTJDbGlja0Rvd25cIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJkb0tleTJDbGlja0JsdXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY2h1bmtzX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJkb0tleTJDbGlja0JsdXJcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJsb2FkRmlsZUZyb21CYXNlNjRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY2h1bmtzX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJsb2FkRmlsZUZyb21CYXNlNjRcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJpbmNyZWFzZUhlaWdodEJ5Q29udGVudFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jaHVua3NfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcImluY3JlYXNlSGVpZ2h0QnlDb250ZW50XCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiY3JlYXRlU3ZnXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NodW5rc19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiY3JlYXRlU3ZnXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic2FuaXRpemVFZGl0YWJsZUNvbnRlbnRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY2h1bmtzX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzYW5pdGl6ZUVkaXRhYmxlQ29udGVudFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkNzc0NsYXNzQnVpbGRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jaHVua3NfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkNzc0NsYXNzQnVpbGRlclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN1cnZleUNzc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jaHVua3NfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN1cnZleUNzc1wiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImRlZmF1bHRWMkNzc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jaHVua3NfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcImRlZmF1bHRWMkNzc1wiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImRlZmF1bHRWMlRoZW1lTmFtZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jaHVua3NfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcImRlZmF1bHRWMlRoZW1lTmFtZVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkRyYWdEcm9wQ29yZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jaHVua3NfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkRyYWdEcm9wQ29yZVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkRyYWdEcm9wQ2hvaWNlc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jaHVua3NfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkRyYWdEcm9wQ2hvaWNlc1wiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkRyYWdEcm9wUmFua2luZ1NlbGVjdFRvUmFua1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jaHVua3NfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkRyYWdEcm9wUmFua2luZ1NlbGVjdFRvUmFua1wiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZGVmYXVsdENzc19jc3NzdGFuZGFyZF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vZGVmYXVsdENzcy9jc3NzdGFuZGFyZCAqLyBcIi4vc3JjL2RlZmF1bHRDc3MvY3Nzc3RhbmRhcmQudHNcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJkZWZhdWx0U3RhbmRhcmRDc3NcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfZGVmYXVsdENzc19jc3NzdGFuZGFyZF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiZGVmYXVsdFN0YW5kYXJkQ3NzXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9kZWZhdWx0Q3NzX2Nzc21vZGVybl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vZGVmYXVsdENzcy9jc3Ntb2Rlcm4gKi8gXCIuL3NyYy9kZWZhdWx0Q3NzL2Nzc21vZGVybi50c1wiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIm1vZGVybkNzc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9kZWZhdWx0Q3NzX2Nzc21vZGVybl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wibW9kZXJuQ3NzXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zdmdidW5kbGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3N2Z2J1bmRsZSAqLyBcIi4vc3JjL3N2Z2J1bmRsZS50c1wiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlN2Z0ljb25SZWdpc3RyeVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9zdmdidW5kbGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcIlN2Z0ljb25SZWdpc3RyeVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlN2Z1JlZ2lzdHJ5XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3N2Z2J1bmRsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiU3ZnUmVnaXN0cnlcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJTdmdCdW5kbGVWaWV3TW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfc3ZnYnVuZGxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJTdmdCdW5kbGVWaWV3TW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3JlbmRlcmVyRmFjdG9yeV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vcmVuZGVyZXJGYWN0b3J5ICovIFwiLi9zcmMvcmVuZGVyZXJGYWN0b3J5LnRzXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUmVuZGVyZXJGYWN0b3J5XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3JlbmRlcmVyRmFjdG9yeV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fW1wiUmVuZGVyZXJGYWN0b3J5XCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF91dGlsc19yZXNwb25zaXZpdHlfbWFuYWdlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vdXRpbHMvcmVzcG9uc2l2aXR5LW1hbmFnZXIgKi8gXCIuL3NyYy91dGlscy9yZXNwb25zaXZpdHktbWFuYWdlci50c1wiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlJlc3BvbnNpdml0eU1hbmFnZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdXRpbHNfcmVzcG9uc2l2aXR5X21hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1tcIlJlc3BvbnNpdml0eU1hbmFnZXJcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJWZXJ0aWNhbFJlc3BvbnNpdml0eU1hbmFnZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdXRpbHNfcmVzcG9uc2l2aXR5X21hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1tcIlZlcnRpY2FsUmVzcG9uc2l2aXR5TWFuYWdlclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdXRpbHNfdXRpbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3V0aWxzL3V0aWxzICovIFwiLi9zcmMvdXRpbHMvdXRpbHMudHNcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJ1bndyYXBcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdXRpbHNfdXRpbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1tcInVud3JhcFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImdldE9yaWdpbmFsRXZlbnRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdXRpbHNfdXRpbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1tcImdldE9yaWdpbmFsRXZlbnRcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJnZXRFbGVtZW50XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3V0aWxzX3V0aWxzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bXCJnZXRFbGVtZW50XCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9hY3Rpb25zX2FjdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vYWN0aW9ucy9hY3Rpb24gKi8gXCIuL3NyYy9hY3Rpb25zL2FjdGlvbi50c1wiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImNyZWF0ZURyb3Bkb3duQWN0aW9uTW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfYWN0aW9uc19hY3Rpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1tcImNyZWF0ZURyb3Bkb3duQWN0aW9uTW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJjcmVhdGVEcm9wZG93bkFjdGlvbk1vZGVsQWR2YW5jZWRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfYWN0aW9uc19hY3Rpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1tcImNyZWF0ZURyb3Bkb3duQWN0aW9uTW9kZWxBZHZhbmNlZFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImdldEFjdGlvbkRyb3Bkb3duQnV0dG9uVGFyZ2V0XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2FjdGlvbnNfYWN0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bXCJnZXRBY3Rpb25Ecm9wZG93bkJ1dHRvblRhcmdldFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkJhc2VBY3Rpb25cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfYWN0aW9uc19hY3Rpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1tcIkJhc2VBY3Rpb25cIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJBY3Rpb25cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfYWN0aW9uc19hY3Rpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1tcIkFjdGlvblwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkFjdGlvbkRyb3Bkb3duVmlld01vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2FjdGlvbnNfYWN0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bXCJBY3Rpb25Ecm9wZG93blZpZXdNb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYWN0aW9uc19hZGFwdGl2ZV9jb250YWluZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2FjdGlvbnMvYWRhcHRpdmUtY29udGFpbmVyICovIFwiLi9zcmMvYWN0aW9ucy9hZGFwdGl2ZS1jb250YWluZXIudHNcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJBZGFwdGl2ZUFjdGlvbkNvbnRhaW5lclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9hY3Rpb25zX2FkYXB0aXZlX2NvbnRhaW5lcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fW1wiQWRhcHRpdmVBY3Rpb25Db250YWluZXJcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2FjdGlvbnNfY29udGFpbmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9hY3Rpb25zL2NvbnRhaW5lciAqLyBcIi4vc3JjL2FjdGlvbnMvY29udGFpbmVyLnRzXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiZGVmYXVsdEFjdGlvbkJhckNzc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9hY3Rpb25zX2NvbnRhaW5lcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fW1wiZGVmYXVsdEFjdGlvbkJhckNzc1wiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkFjdGlvbkNvbnRhaW5lclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9hY3Rpb25zX2NvbnRhaW5lcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fW1wiQWN0aW9uQ29udGFpbmVyXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF91dGlsc19kcmFnT3JDbGlja0hlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3V0aWxzL2RyYWdPckNsaWNrSGVscGVyICovIFwiLi9zcmMvdXRpbHMvZHJhZ09yQ2xpY2tIZWxwZXIudHNcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJEcmFnT3JDbGlja0hlbHBlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF91dGlsc19kcmFnT3JDbGlja0hlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX1tcIkRyYWdPckNsaWNrSGVscGVyXCJdOyB9KTtcblxuLy8gbW9kZWxcblxuLy8gY3NzIHN0YW5kYXJkIGNsYXNzZXNcblxuLy8gY3NzIG1vZGVybiBjbGFzc2VzXG5cblxuLy8gdXRpbHNcblxuXG5cblxuXG5cblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL2VudHJpZXMvY29yZS50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvZW50cmllcy9jb3JlLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBWZXJzaW9uLCBSZWxlYXNlRGF0ZSwgY2hlY2tMaWJyYXJ5VmVyc2lvbiwgc2V0TGljZW5zZUtleSwgaGFzTGljZW5zZSwgc2V0dGluZ3MsIEhlbHBlcnMsIEFuc3dlckNvdW50VmFsaWRhdG9yLCBFbWFpbFZhbGlkYXRvciwgTnVtZXJpY1ZhbGlkYXRvciwgUmVnZXhWYWxpZGF0b3IsIFN1cnZleVZhbGlkYXRvciwgVGV4dFZhbGlkYXRvciwgVmFsaWRhdG9yUmVzdWx0LCBFeHByZXNzaW9uVmFsaWRhdG9yLCBWYWxpZGF0b3JSdW5uZXIsIEl0ZW1WYWx1ZSwgQmFzZSwgRXZlbnQsIEV2ZW50QmFzZSwgQXJyYXlDaGFuZ2VzLCBDb21wdXRlZFVwZGF0ZXIsIFN1cnZleUVycm9yLCBTdXJ2ZXlFbGVtZW50Q29yZSwgU3VydmV5RWxlbWVudCwgRHJhZ1R5cGVPdmVyTWVFbnVtLCBDYWxjdWxhdGVkVmFsdWUsIEN1c3RvbUVycm9yLCBBbnN3ZXJSZXF1aXJlZEVycm9yLCBPbmVBbnN3ZXJSZXF1aXJlZEVycm9yLCBSZXF1cmVOdW1lcmljRXJyb3IsIEV4Y2VlZFNpemVFcnJvciwgTG9jYWxpemFibGVTdHJpbmcsIExvY2FsaXphYmxlU3RyaW5ncywgSHRtbENvbmRpdGlvbkl0ZW0sIFVybENvbmRpdGlvbkl0ZW0sIENob2ljZXNSZXN0ZnVsLCBDaG9pY2VzUmVzdGZ1bGwsIEZ1bmN0aW9uRmFjdG9yeSwgcmVnaXN0ZXJGdW5jdGlvbiwgQ29uZGl0aW9uUnVubmVyLCBFeHByZXNzaW9uUnVubmVyLCBFeHByZXNzaW9uRXhlY3V0b3IsIE9wZXJhbmQsIENvbnN0LCBCaW5hcnlPcGVyYW5kLCBWYXJpYWJsZSwgRnVuY3Rpb25PcGVyYW5kLCBBcnJheU9wZXJhbmQsIFVuYXJ5T3BlcmFuZCwgQ29uZGl0aW9uc1BhcnNlciwgUHJvY2Vzc1ZhbHVlLCBKc29uRXJyb3IsIEpzb25JbmNvcnJlY3RUeXBlRXJyb3IsIEpzb25NZXRhZGF0YSwgSnNvbk1ldGFkYXRhQ2xhc3MsIEpzb25NaXNzaW5nVHlwZUVycm9yLCBKc29uTWlzc2luZ1R5cGVFcnJvckJhc2UsIEpzb25PYmplY3QsIEpzb25PYmplY3RQcm9wZXJ0eSwgSnNvblJlcXVpcmVkUHJvcGVydHlFcnJvciwgSnNvblVua25vd25Qcm9wZXJ0eUVycm9yLCBTZXJpYWxpemVyLCBwcm9wZXJ0eSwgcHJvcGVydHlBcnJheSwgTWF0cml4RHJvcGRvd25DZWxsLCBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSwgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZSwgTWF0cml4RHJvcGRvd25Db2x1bW4sIG1hdHJpeERyb3Bkb3duQ29sdW1uVHlwZXMsIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwsIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFJvdywgUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkVGFibGUsIE1hdHJpeERyb3Bkb3duUm93TW9kZWwsIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbCwgTWF0cml4RHluYW1pY1Jvd01vZGVsLCBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbCwgTWF0cml4Um93TW9kZWwsIE1hdHJpeENlbGxzLCBRdWVzdGlvbk1hdHJpeE1vZGVsLCBRdWVzdGlvbk1hdHJpeEJhc2VNb2RlbCwgTXVsdGlwbGVUZXh0SXRlbU1vZGVsLCBNdWx0aXBsZVRleHRDZWxsLCBNdWx0aXBsZVRleHRFcnJvckNlbGwsIE11dGxpcGxlVGV4dEVycm9yUm93LCBNdXRsaXBsZVRleHRSb3csIFF1ZXN0aW9uTXVsdGlwbGVUZXh0TW9kZWwsIE11bHRpcGxlVGV4dEVkaXRvck1vZGVsLCBQYW5lbE1vZGVsLCBQYW5lbE1vZGVsQmFzZSwgUXVlc3Rpb25Sb3dNb2RlbCwgRmxvd1BhbmVsTW9kZWwsIFBhZ2VNb2RlbCwgRGVmYXVsdFRpdGxlTW9kZWwsIFF1ZXN0aW9uLCBRdWVzdGlvbk5vblZhbHVlLCBRdWVzdGlvbkVtcHR5TW9kZWwsIFF1ZXN0aW9uQ2hlY2tib3hCYXNlLCBRdWVzdGlvblNlbGVjdEJhc2UsIFF1ZXN0aW9uQ2hlY2tib3hNb2RlbCwgUXVlc3Rpb25UYWdib3hNb2RlbCwgUXVlc3Rpb25SYW5raW5nTW9kZWwsIFF1ZXN0aW9uQ29tbWVudE1vZGVsLCBRdWVzdGlvbkRyb3Bkb3duTW9kZWwsIFF1ZXN0aW9uRmFjdG9yeSwgRWxlbWVudEZhY3RvcnksIFF1ZXN0aW9uRmlsZU1vZGVsLCBRdWVzdGlvbkh0bWxNb2RlbCwgUXVlc3Rpb25SYWRpb2dyb3VwTW9kZWwsIFF1ZXN0aW9uUmF0aW5nTW9kZWwsIFJlbmRlcmVkUmF0aW5nSXRlbSwgUXVlc3Rpb25FeHByZXNzaW9uTW9kZWwsIFF1ZXN0aW9uVGV4dEJhc2UsIENoYXJhY3RlckNvdW50ZXIsIFF1ZXN0aW9uVGV4dE1vZGVsLCBRdWVzdGlvbkJvb2xlYW5Nb2RlbCwgUXVlc3Rpb25JbWFnZVBpY2tlck1vZGVsLCBJbWFnZUl0ZW1WYWx1ZSwgUXVlc3Rpb25JbWFnZU1vZGVsLCBRdWVzdGlvblNpZ25hdHVyZVBhZE1vZGVsLCBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsLCBRdWVzdGlvblBhbmVsRHluYW1pY0l0ZW0sIFN1cnZleVRpbWVyLCBTdXJ2ZXlUaW1lck1vZGVsLCB0cnlOYXZpZ2F0ZVRvUGFnZSwgdHJ5Rm9jdXNQYWdlLCBjcmVhdGVUT0NMaXN0TW9kZWwsIGdldFRvY1Jvb3RDc3MsIFRPQ01vZGVsLCBTdXJ2ZXlQcm9ncmVzc01vZGVsLCBTdXJ2ZXlQcm9ncmVzc0J1dHRvbnNNb2RlbCwgU3VydmV5TW9kZWwsIFN1cnZleVRyaWdnZXIsIFN1cnZleVRyaWdnZXJDb21wbGV0ZSwgU3VydmV5VHJpZ2dlclNldFZhbHVlLCBTdXJ2ZXlUcmlnZ2VyVmlzaWJsZSwgU3VydmV5VHJpZ2dlckNvcHlWYWx1ZSwgU3VydmV5VHJpZ2dlclJ1bkV4cHJlc3Npb24sIFN1cnZleVRyaWdnZXJTa2lwLCBUcmlnZ2VyLCBQb3B1cFN1cnZleU1vZGVsLCBTdXJ2ZXlXaW5kb3dNb2RlbCwgVGV4dFByZVByb2Nlc3NvciwgTm90aWZpZXIsIENvdmVyLCBDb3ZlckNlbGwsIGR4U3VydmV5U2VydmljZSwgZW5nbGlzaFN0cmluZ3MsIHN1cnZleUxvY2FsaXphdGlvbiwgc3VydmV5U3RyaW5ncywgUXVlc3Rpb25DdXN0b21XaWRnZXQsIEN1c3RvbVdpZGdldENvbGxlY3Rpb24sIFF1ZXN0aW9uQ3VzdG9tTW9kZWwsIFF1ZXN0aW9uQ29tcG9zaXRlTW9kZWwsIENvbXBvbmVudFF1ZXN0aW9uSlNPTiwgQ29tcG9uZW50Q29sbGVjdGlvbiwgU3R5bGVzTWFuYWdlciwgTGlzdE1vZGVsLCBNdWx0aVNlbGVjdExpc3RNb2RlbCwgUG9wdXBNb2RlbCwgY3JlYXRlRGlhbG9nT3B0aW9ucywgUG9wdXBCYXNlVmlld01vZGVsLCBQb3B1cERyb3Bkb3duVmlld01vZGVsLCBQb3B1cE1vZGFsVmlld01vZGVsLCBjcmVhdGVQb3B1cFZpZXdNb2RlbCwgY3JlYXRlUG9wdXBNb2RhbFZpZXdNb2RlbCwgRHJvcGRvd25MaXN0TW9kZWwsIERyb3Bkb3duTXVsdGlTZWxlY3RMaXN0TW9kZWwsIFF1ZXN0aW9uQnV0dG9uR3JvdXBNb2RlbCwgQnV0dG9uR3JvdXBJdGVtTW9kZWwsIEJ1dHRvbkdyb3VwSXRlbVZhbHVlLCBJc01vYmlsZSwgSXNUb3VjaCwgX3NldElzVG91Y2gsIGNvbmZpcm1BY3Rpb24sIGNvbmZpcm1BY3Rpb25Bc3luYywgZGV0ZWN0SUVPckVkZ2UsIGRvS2V5MkNsaWNrVXAsIGRvS2V5MkNsaWNrRG93biwgZG9LZXkyQ2xpY2tCbHVyLCBsb2FkRmlsZUZyb21CYXNlNjQsIGluY3JlYXNlSGVpZ2h0QnlDb250ZW50LCBjcmVhdGVTdmcsIHNhbml0aXplRWRpdGFibGVDb250ZW50LCBDc3NDbGFzc0J1aWxkZXIsIHN1cnZleUNzcywgZGVmYXVsdFYyQ3NzLCBkZWZhdWx0VjJUaGVtZU5hbWUsIERyYWdEcm9wQ29yZSwgRHJhZ0Ryb3BDaG9pY2VzLCBEcmFnRHJvcFJhbmtpbmdTZWxlY3RUb1JhbmssIGRlZmF1bHRTdGFuZGFyZENzcywgbW9kZXJuQ3NzLCBTdmdJY29uUmVnaXN0cnksIFN2Z1JlZ2lzdHJ5LCBTdmdCdW5kbGVWaWV3TW9kZWwsIFJlbmRlcmVyRmFjdG9yeSwgUmVzcG9uc2l2aXR5TWFuYWdlciwgVmVydGljYWxSZXNwb25zaXZpdHlNYW5hZ2VyLCB1bndyYXAsIGdldE9yaWdpbmFsRXZlbnQsIGdldEVsZW1lbnQsIGNyZWF0ZURyb3Bkb3duQWN0aW9uTW9kZWwsIGNyZWF0ZURyb3Bkb3duQWN0aW9uTW9kZWxBZHZhbmNlZCwgZ2V0QWN0aW9uRHJvcGRvd25CdXR0b25UYXJnZXQsIEJhc2VBY3Rpb24sIEFjdGlvbiwgQWN0aW9uRHJvcGRvd25WaWV3TW9kZWwsIEFkYXB0aXZlQWN0aW9uQ29udGFpbmVyLCBkZWZhdWx0QWN0aW9uQmFyQ3NzLCBBY3Rpb25Db250YWluZXIsIERyYWdPckNsaWNrSGVscGVyLCBNb2RlbCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfY29yZV93b19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9jb3JlLXdvLW1vZGVsICovIFwiLi9zcmMvZW50cmllcy9jb3JlLXdvLW1vZGVsLnRzXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiVmVyc2lvblwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX3dvX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJWZXJzaW9uXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUmVsZWFzZURhdGVcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV93b19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiUmVsZWFzZURhdGVcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJjaGVja0xpYnJhcnlWZXJzaW9uXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfd29fbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcImNoZWNrTGlicmFyeVZlcnNpb25cIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzZXRMaWNlbnNlS2V5XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfd29fbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInNldExpY2Vuc2VLZXlcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJoYXNMaWNlbnNlXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfd29fbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcImhhc0xpY2Vuc2VcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzZXR0aW5nc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX3dvX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzZXR0aW5nc1wiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkhlbHBlcnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV93b19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiSGVscGVyc1wiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkFuc3dlckNvdW50VmFsaWRhdG9yXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfd29fbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkFuc3dlckNvdW50VmFsaWRhdG9yXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiRW1haWxWYWxpZGF0b3JcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV93b19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiRW1haWxWYWxpZGF0b3JcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJOdW1lcmljVmFsaWRhdG9yXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfd29fbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIk51bWVyaWNWYWxpZGF0b3JcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJSZWdleFZhbGlkYXRvclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX3dvX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJSZWdleFZhbGlkYXRvclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlN1cnZleVZhbGlkYXRvclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX3dvX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJTdXJ2ZXlWYWxpZGF0b3JcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJUZXh0VmFsaWRhdG9yXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfd29fbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlRleHRWYWxpZGF0b3JcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJWYWxpZGF0b3JSZXN1bHRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV93b19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiVmFsaWRhdG9yUmVzdWx0XCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiRXhwcmVzc2lvblZhbGlkYXRvclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX3dvX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJFeHByZXNzaW9uVmFsaWRhdG9yXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiVmFsaWRhdG9yUnVubmVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfd29fbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlZhbGlkYXRvclJ1bm5lclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkl0ZW1WYWx1ZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX3dvX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJJdGVtVmFsdWVcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJCYXNlXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfd29fbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkJhc2VcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJFdmVudFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX3dvX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJFdmVudFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkV2ZW50QmFzZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX3dvX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJFdmVudEJhc2VcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJBcnJheUNoYW5nZXNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV93b19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiQXJyYXlDaGFuZ2VzXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQ29tcHV0ZWRVcGRhdGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfd29fbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkNvbXB1dGVkVXBkYXRlclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlN1cnZleUVycm9yXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfd29fbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlN1cnZleUVycm9yXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiU3VydmV5RWxlbWVudENvcmVcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV93b19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiU3VydmV5RWxlbWVudENvcmVcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJTdXJ2ZXlFbGVtZW50XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfd29fbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlN1cnZleUVsZW1lbnRcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJEcmFnVHlwZU92ZXJNZUVudW1cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV93b19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiRHJhZ1R5cGVPdmVyTWVFbnVtXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQ2FsY3VsYXRlZFZhbHVlXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfd29fbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkNhbGN1bGF0ZWRWYWx1ZVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkN1c3RvbUVycm9yXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfd29fbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkN1c3RvbUVycm9yXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQW5zd2VyUmVxdWlyZWRFcnJvclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX3dvX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJBbnN3ZXJSZXF1aXJlZEVycm9yXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiT25lQW5zd2VyUmVxdWlyZWRFcnJvclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX3dvX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJPbmVBbnN3ZXJSZXF1aXJlZEVycm9yXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUmVxdXJlTnVtZXJpY0Vycm9yXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfd29fbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlJlcXVyZU51bWVyaWNFcnJvclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkV4Y2VlZFNpemVFcnJvclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX3dvX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJFeGNlZWRTaXplRXJyb3JcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJMb2NhbGl6YWJsZVN0cmluZ1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX3dvX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJMb2NhbGl6YWJsZVN0cmluZ1wiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkxvY2FsaXphYmxlU3RyaW5nc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX3dvX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJMb2NhbGl6YWJsZVN0cmluZ3NcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJIdG1sQ29uZGl0aW9uSXRlbVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX3dvX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJIdG1sQ29uZGl0aW9uSXRlbVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlVybENvbmRpdGlvbkl0ZW1cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV93b19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiVXJsQ29uZGl0aW9uSXRlbVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkNob2ljZXNSZXN0ZnVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfd29fbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkNob2ljZXNSZXN0ZnVsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQ2hvaWNlc1Jlc3RmdWxsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfd29fbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkNob2ljZXNSZXN0ZnVsbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkZ1bmN0aW9uRmFjdG9yeVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX3dvX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJGdW5jdGlvbkZhY3RvcnlcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZWdpc3RlckZ1bmN0aW9uXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfd29fbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInJlZ2lzdGVyRnVuY3Rpb25cIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJDb25kaXRpb25SdW5uZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV93b19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiQ29uZGl0aW9uUnVubmVyXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiRXhwcmVzc2lvblJ1bm5lclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX3dvX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJFeHByZXNzaW9uUnVubmVyXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiRXhwcmVzc2lvbkV4ZWN1dG9yXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfd29fbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkV4cHJlc3Npb25FeGVjdXRvclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIk9wZXJhbmRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV93b19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiT3BlcmFuZFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkNvbnN0XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfd29fbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkNvbnN0XCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQmluYXJ5T3BlcmFuZFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX3dvX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJCaW5hcnlPcGVyYW5kXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiVmFyaWFibGVcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV93b19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiVmFyaWFibGVcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJGdW5jdGlvbk9wZXJhbmRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV93b19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiRnVuY3Rpb25PcGVyYW5kXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQXJyYXlPcGVyYW5kXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfd29fbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkFycmF5T3BlcmFuZFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlVuYXJ5T3BlcmFuZFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX3dvX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJVbmFyeU9wZXJhbmRcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJDb25kaXRpb25zUGFyc2VyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfd29fbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkNvbmRpdGlvbnNQYXJzZXJcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJQcm9jZXNzVmFsdWVcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV93b19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiUHJvY2Vzc1ZhbHVlXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiSnNvbkVycm9yXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfd29fbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkpzb25FcnJvclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkpzb25JbmNvcnJlY3RUeXBlRXJyb3JcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV93b19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiSnNvbkluY29ycmVjdFR5cGVFcnJvclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkpzb25NZXRhZGF0YVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX3dvX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJKc29uTWV0YWRhdGFcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJKc29uTWV0YWRhdGFDbGFzc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX3dvX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJKc29uTWV0YWRhdGFDbGFzc1wiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkpzb25NaXNzaW5nVHlwZUVycm9yXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfd29fbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkpzb25NaXNzaW5nVHlwZUVycm9yXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiSnNvbk1pc3NpbmdUeXBlRXJyb3JCYXNlXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfd29fbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkpzb25NaXNzaW5nVHlwZUVycm9yQmFzZVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkpzb25PYmplY3RcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV93b19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiSnNvbk9iamVjdFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkpzb25PYmplY3RQcm9wZXJ0eVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX3dvX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJKc29uT2JqZWN0UHJvcGVydHlcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJKc29uUmVxdWlyZWRQcm9wZXJ0eUVycm9yXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfd29fbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkpzb25SZXF1aXJlZFByb3BlcnR5RXJyb3JcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJKc29uVW5rbm93blByb3BlcnR5RXJyb3JcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV93b19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiSnNvblVua25vd25Qcm9wZXJ0eUVycm9yXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiU2VyaWFsaXplclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX3dvX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJTZXJpYWxpemVyXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwicHJvcGVydHlcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV93b19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicHJvcGVydHlcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJwcm9wZXJ0eUFycmF5XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfd29fbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInByb3BlcnR5QXJyYXlcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJNYXRyaXhEcm9wZG93bkNlbGxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV93b19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiTWF0cml4RHJvcGRvd25DZWxsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2VcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV93b19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2VcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfd29fbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2VcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJNYXRyaXhEcm9wZG93bkNvbHVtblwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX3dvX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJNYXRyaXhEcm9wZG93bkNvbHVtblwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIm1hdHJpeERyb3Bkb3duQ29sdW1uVHlwZXNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV93b19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wibWF0cml4RHJvcGRvd25Db2x1bW5UeXBlc1wiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV93b19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkQ2VsbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFJvd1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX3dvX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3dcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRUYWJsZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX3dvX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRUYWJsZVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIk1hdHJpeERyb3Bkb3duUm93TW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV93b19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiTWF0cml4RHJvcGRvd25Sb3dNb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX3dvX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJNYXRyaXhEeW5hbWljUm93TW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV93b19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiTWF0cml4RHluYW1pY1Jvd01vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV93b19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJNYXRyaXhSb3dNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX3dvX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJNYXRyaXhSb3dNb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIk1hdHJpeENlbGxzXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfd29fbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIk1hdHJpeENlbGxzXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUXVlc3Rpb25NYXRyaXhNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX3dvX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJRdWVzdGlvbk1hdHJpeE1vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUXVlc3Rpb25NYXRyaXhCYXNlTW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV93b19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiUXVlc3Rpb25NYXRyaXhCYXNlTW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJNdWx0aXBsZVRleHRJdGVtTW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV93b19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiTXVsdGlwbGVUZXh0SXRlbU1vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiTXVsdGlwbGVUZXh0Q2VsbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX3dvX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJNdWx0aXBsZVRleHRDZWxsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiTXVsdGlwbGVUZXh0RXJyb3JDZWxsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfd29fbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIk11bHRpcGxlVGV4dEVycm9yQ2VsbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIk11dGxpcGxlVGV4dEVycm9yUm93XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfd29fbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIk11dGxpcGxlVGV4dEVycm9yUm93XCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiTXV0bGlwbGVUZXh0Um93XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfd29fbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIk11dGxpcGxlVGV4dFJvd1wiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlF1ZXN0aW9uTXVsdGlwbGVUZXh0TW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV93b19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiUXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIk11bHRpcGxlVGV4dEVkaXRvck1vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfd29fbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIk11bHRpcGxlVGV4dEVkaXRvck1vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUGFuZWxNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX3dvX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJQYW5lbE1vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUGFuZWxNb2RlbEJhc2VcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV93b19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiUGFuZWxNb2RlbEJhc2VcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJRdWVzdGlvblJvd01vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfd29fbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlF1ZXN0aW9uUm93TW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJGbG93UGFuZWxNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX3dvX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJGbG93UGFuZWxNb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlBhZ2VNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX3dvX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJQYWdlTW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJEZWZhdWx0VGl0bGVNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX3dvX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJEZWZhdWx0VGl0bGVNb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlF1ZXN0aW9uXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfd29fbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlF1ZXN0aW9uXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUXVlc3Rpb25Ob25WYWx1ZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX3dvX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJRdWVzdGlvbk5vblZhbHVlXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUXVlc3Rpb25FbXB0eU1vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfd29fbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlF1ZXN0aW9uRW1wdHlNb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlF1ZXN0aW9uQ2hlY2tib3hCYXNlXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfd29fbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlF1ZXN0aW9uQ2hlY2tib3hCYXNlXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUXVlc3Rpb25TZWxlY3RCYXNlXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfd29fbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlF1ZXN0aW9uU2VsZWN0QmFzZVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlF1ZXN0aW9uQ2hlY2tib3hNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX3dvX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJRdWVzdGlvbkNoZWNrYm94TW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJRdWVzdGlvblRhZ2JveE1vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfd29fbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlF1ZXN0aW9uVGFnYm94TW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJRdWVzdGlvblJhbmtpbmdNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX3dvX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJRdWVzdGlvblJhbmtpbmdNb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlF1ZXN0aW9uQ29tbWVudE1vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfd29fbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlF1ZXN0aW9uQ29tbWVudE1vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUXVlc3Rpb25Ecm9wZG93bk1vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfd29fbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlF1ZXN0aW9uRHJvcGRvd25Nb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlF1ZXN0aW9uRmFjdG9yeVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX3dvX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJRdWVzdGlvbkZhY3RvcnlcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJFbGVtZW50RmFjdG9yeVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX3dvX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJFbGVtZW50RmFjdG9yeVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlF1ZXN0aW9uRmlsZU1vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfd29fbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlF1ZXN0aW9uRmlsZU1vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUXVlc3Rpb25IdG1sTW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV93b19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiUXVlc3Rpb25IdG1sTW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJRdWVzdGlvblJhZGlvZ3JvdXBNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX3dvX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJRdWVzdGlvblJhZGlvZ3JvdXBNb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlF1ZXN0aW9uUmF0aW5nTW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV93b19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiUXVlc3Rpb25SYXRpbmdNb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlJlbmRlcmVkUmF0aW5nSXRlbVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX3dvX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJSZW5kZXJlZFJhdGluZ0l0ZW1cIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJRdWVzdGlvbkV4cHJlc3Npb25Nb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX3dvX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJRdWVzdGlvbkV4cHJlc3Npb25Nb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlF1ZXN0aW9uVGV4dEJhc2VcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV93b19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiUXVlc3Rpb25UZXh0QmFzZVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkNoYXJhY3RlckNvdW50ZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV93b19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiQ2hhcmFjdGVyQ291bnRlclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlF1ZXN0aW9uVGV4dE1vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfd29fbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlF1ZXN0aW9uVGV4dE1vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUXVlc3Rpb25Cb29sZWFuTW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV93b19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiUXVlc3Rpb25Cb29sZWFuTW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJRdWVzdGlvbkltYWdlUGlja2VyTW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV93b19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiUXVlc3Rpb25JbWFnZVBpY2tlck1vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiSW1hZ2VJdGVtVmFsdWVcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV93b19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiSW1hZ2VJdGVtVmFsdWVcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJRdWVzdGlvbkltYWdlTW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV93b19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiUXVlc3Rpb25JbWFnZU1vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUXVlc3Rpb25TaWduYXR1cmVQYWRNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX3dvX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJRdWVzdGlvblNpZ25hdHVyZVBhZE1vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX3dvX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUXVlc3Rpb25QYW5lbER5bmFtaWNJdGVtXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfd29fbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlF1ZXN0aW9uUGFuZWxEeW5hbWljSXRlbVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlN1cnZleVRpbWVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfd29fbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlN1cnZleVRpbWVyXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiU3VydmV5VGltZXJNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX3dvX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJTdXJ2ZXlUaW1lck1vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwidHJ5TmF2aWdhdGVUb1BhZ2VcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV93b19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1widHJ5TmF2aWdhdGVUb1BhZ2VcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJ0cnlGb2N1c1BhZ2VcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV93b19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1widHJ5Rm9jdXNQYWdlXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiY3JlYXRlVE9DTGlzdE1vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfd29fbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcImNyZWF0ZVRPQ0xpc3RNb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImdldFRvY1Jvb3RDc3NcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV93b19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiZ2V0VG9jUm9vdENzc1wiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlRPQ01vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfd29fbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlRPQ01vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiU3VydmV5UHJvZ3Jlc3NNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX3dvX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJTdXJ2ZXlQcm9ncmVzc01vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiU3VydmV5UHJvZ3Jlc3NCdXR0b25zTW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV93b19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiU3VydmV5UHJvZ3Jlc3NCdXR0b25zTW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJTdXJ2ZXlNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX3dvX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJTdXJ2ZXlNb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlN1cnZleVRyaWdnZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV93b19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiU3VydmV5VHJpZ2dlclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlN1cnZleVRyaWdnZXJDb21wbGV0ZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX3dvX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJTdXJ2ZXlUcmlnZ2VyQ29tcGxldGVcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJTdXJ2ZXlUcmlnZ2VyU2V0VmFsdWVcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV93b19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiU3VydmV5VHJpZ2dlclNldFZhbHVlXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiU3VydmV5VHJpZ2dlclZpc2libGVcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV93b19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiU3VydmV5VHJpZ2dlclZpc2libGVcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJTdXJ2ZXlUcmlnZ2VyQ29weVZhbHVlXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfd29fbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlN1cnZleVRyaWdnZXJDb3B5VmFsdWVcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJTdXJ2ZXlUcmlnZ2VyUnVuRXhwcmVzc2lvblwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX3dvX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJTdXJ2ZXlUcmlnZ2VyUnVuRXhwcmVzc2lvblwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlN1cnZleVRyaWdnZXJTa2lwXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfd29fbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlN1cnZleVRyaWdnZXJTa2lwXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiVHJpZ2dlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX3dvX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJUcmlnZ2VyXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUG9wdXBTdXJ2ZXlNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX3dvX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJQb3B1cFN1cnZleU1vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiU3VydmV5V2luZG93TW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV93b19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiU3VydmV5V2luZG93TW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJUZXh0UHJlUHJvY2Vzc29yXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfd29fbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlRleHRQcmVQcm9jZXNzb3JcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJOb3RpZmllclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX3dvX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJOb3RpZmllclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkNvdmVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfd29fbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkNvdmVyXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQ292ZXJDZWxsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfd29fbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkNvdmVyQ2VsbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImR4U3VydmV5U2VydmljZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX3dvX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJkeFN1cnZleVNlcnZpY2VcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJlbmdsaXNoU3RyaW5nc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX3dvX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJlbmdsaXNoU3RyaW5nc1wiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN1cnZleUxvY2FsaXphdGlvblwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX3dvX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdXJ2ZXlMb2NhbGl6YXRpb25cIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzdXJ2ZXlTdHJpbmdzXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfd29fbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN1cnZleVN0cmluZ3NcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJRdWVzdGlvbkN1c3RvbVdpZGdldFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX3dvX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJRdWVzdGlvbkN1c3RvbVdpZGdldFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkN1c3RvbVdpZGdldENvbGxlY3Rpb25cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV93b19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiQ3VzdG9tV2lkZ2V0Q29sbGVjdGlvblwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlF1ZXN0aW9uQ3VzdG9tTW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV93b19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiUXVlc3Rpb25DdXN0b21Nb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlF1ZXN0aW9uQ29tcG9zaXRlTW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV93b19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiUXVlc3Rpb25Db21wb3NpdGVNb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkNvbXBvbmVudFF1ZXN0aW9uSlNPTlwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX3dvX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJDb21wb25lbnRRdWVzdGlvbkpTT05cIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJDb21wb25lbnRDb2xsZWN0aW9uXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfd29fbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkNvbXBvbmVudENvbGxlY3Rpb25cIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJTdHlsZXNNYW5hZ2VyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfd29fbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlN0eWxlc01hbmFnZXJcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJMaXN0TW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV93b19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiTGlzdE1vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiTXVsdGlTZWxlY3RMaXN0TW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV93b19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiTXVsdGlTZWxlY3RMaXN0TW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJQb3B1cE1vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfd29fbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlBvcHVwTW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJjcmVhdGVEaWFsb2dPcHRpb25zXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfd29fbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcImNyZWF0ZURpYWxvZ09wdGlvbnNcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJQb3B1cEJhc2VWaWV3TW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV93b19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiUG9wdXBCYXNlVmlld01vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUG9wdXBEcm9wZG93blZpZXdNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX3dvX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJQb3B1cERyb3Bkb3duVmlld01vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUG9wdXBNb2RhbFZpZXdNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX3dvX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJQb3B1cE1vZGFsVmlld01vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiY3JlYXRlUG9wdXBWaWV3TW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV93b19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiY3JlYXRlUG9wdXBWaWV3TW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJjcmVhdGVQb3B1cE1vZGFsVmlld01vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfd29fbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcImNyZWF0ZVBvcHVwTW9kYWxWaWV3TW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJEcm9wZG93bkxpc3RNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX3dvX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJEcm9wZG93bkxpc3RNb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkRyb3Bkb3duTXVsdGlTZWxlY3RMaXN0TW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV93b19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiRHJvcGRvd25NdWx0aVNlbGVjdExpc3RNb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlF1ZXN0aW9uQnV0dG9uR3JvdXBNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX3dvX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJRdWVzdGlvbkJ1dHRvbkdyb3VwTW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJCdXR0b25Hcm91cEl0ZW1Nb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX3dvX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJCdXR0b25Hcm91cEl0ZW1Nb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkJ1dHRvbkdyb3VwSXRlbVZhbHVlXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfd29fbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkJ1dHRvbkdyb3VwSXRlbVZhbHVlXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiSXNNb2JpbGVcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV93b19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiSXNNb2JpbGVcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJJc1RvdWNoXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfd29fbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIklzVG91Y2hcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJfc2V0SXNUb3VjaFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX3dvX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJfc2V0SXNUb3VjaFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImNvbmZpcm1BY3Rpb25cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV93b19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiY29uZmlybUFjdGlvblwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImNvbmZpcm1BY3Rpb25Bc3luY1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX3dvX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJjb25maXJtQWN0aW9uQXN5bmNcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJkZXRlY3RJRU9yRWRnZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX3dvX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJkZXRlY3RJRU9yRWRnZVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImRvS2V5MkNsaWNrVXBcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV93b19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiZG9LZXkyQ2xpY2tVcFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImRvS2V5MkNsaWNrRG93blwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX3dvX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJkb0tleTJDbGlja0Rvd25cIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJkb0tleTJDbGlja0JsdXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV93b19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiZG9LZXkyQ2xpY2tCbHVyXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwibG9hZEZpbGVGcm9tQmFzZTY0XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfd29fbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcImxvYWRGaWxlRnJvbUJhc2U2NFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImluY3JlYXNlSGVpZ2h0QnlDb250ZW50XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfd29fbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcImluY3JlYXNlSGVpZ2h0QnlDb250ZW50XCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiY3JlYXRlU3ZnXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfd29fbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcImNyZWF0ZVN2Z1wiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInNhbml0aXplRWRpdGFibGVDb250ZW50XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfd29fbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInNhbml0aXplRWRpdGFibGVDb250ZW50XCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQ3NzQ2xhc3NCdWlsZGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfd29fbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkNzc0NsYXNzQnVpbGRlclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN1cnZleUNzc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX3dvX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdXJ2ZXlDc3NcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJkZWZhdWx0VjJDc3NcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV93b19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiZGVmYXVsdFYyQ3NzXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiZGVmYXVsdFYyVGhlbWVOYW1lXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfd29fbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcImRlZmF1bHRWMlRoZW1lTmFtZVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkRyYWdEcm9wQ29yZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX3dvX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJEcmFnRHJvcENvcmVcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJEcmFnRHJvcENob2ljZXNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV93b19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiRHJhZ0Ryb3BDaG9pY2VzXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiRHJhZ0Ryb3BSYW5raW5nU2VsZWN0VG9SYW5rXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfd29fbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkRyYWdEcm9wUmFua2luZ1NlbGVjdFRvUmFua1wiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImRlZmF1bHRTdGFuZGFyZENzc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX3dvX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJkZWZhdWx0U3RhbmRhcmRDc3NcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJtb2Rlcm5Dc3NcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV93b19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wibW9kZXJuQ3NzXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiU3ZnSWNvblJlZ2lzdHJ5XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfd29fbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlN2Z0ljb25SZWdpc3RyeVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlN2Z1JlZ2lzdHJ5XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfd29fbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlN2Z1JlZ2lzdHJ5XCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiU3ZnQnVuZGxlVmlld01vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfd29fbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlN2Z0J1bmRsZVZpZXdNb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlJlbmRlcmVyRmFjdG9yeVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX3dvX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJSZW5kZXJlckZhY3RvcnlcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJSZXNwb25zaXZpdHlNYW5hZ2VyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfd29fbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlJlc3BvbnNpdml0eU1hbmFnZXJcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJWZXJ0aWNhbFJlc3BvbnNpdml0eU1hbmFnZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV93b19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiVmVydGljYWxSZXNwb25zaXZpdHlNYW5hZ2VyXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwidW53cmFwXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfd29fbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInVud3JhcFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImdldE9yaWdpbmFsRXZlbnRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV93b19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiZ2V0T3JpZ2luYWxFdmVudFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImdldEVsZW1lbnRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV93b19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiZ2V0RWxlbWVudFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImNyZWF0ZURyb3Bkb3duQWN0aW9uTW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV93b19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiY3JlYXRlRHJvcGRvd25BY3Rpb25Nb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImNyZWF0ZURyb3Bkb3duQWN0aW9uTW9kZWxBZHZhbmNlZFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX3dvX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJjcmVhdGVEcm9wZG93bkFjdGlvbk1vZGVsQWR2YW5jZWRcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJnZXRBY3Rpb25Ecm9wZG93bkJ1dHRvblRhcmdldFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX3dvX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJnZXRBY3Rpb25Ecm9wZG93bkJ1dHRvblRhcmdldFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkJhc2VBY3Rpb25cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV93b19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiQmFzZUFjdGlvblwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkFjdGlvblwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX3dvX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJBY3Rpb25cIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJBY3Rpb25Ecm9wZG93blZpZXdNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX3dvX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJBY3Rpb25Ecm9wZG93blZpZXdNb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkFkYXB0aXZlQWN0aW9uQ29udGFpbmVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfd29fbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkFkYXB0aXZlQWN0aW9uQ29udGFpbmVyXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiZGVmYXVsdEFjdGlvbkJhckNzc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX3dvX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJkZWZhdWx0QWN0aW9uQmFyQ3NzXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQWN0aW9uQ29udGFpbmVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfd29fbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkFjdGlvbkNvbnRhaW5lclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkRyYWdPckNsaWNrSGVscGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfd29fbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkRyYWdPckNsaWNrSGVscGVyXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zdXJ2ZXlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3N1cnZleSAqLyBcIi4vc3JjL3N1cnZleS50c1wiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIk1vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3N1cnZleV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiU3VydmV5TW9kZWxcIl07IH0pO1xuXG4vLyBtb2RlbFxuXG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9lbnRyaWVzL3BsdWdpbnMudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL2VudHJpZXMvcGx1Z2lucy50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogYm9vdHN0cmFwVGhlbWVOYW1lLCBib290c3RyYXBUaGVtZUNvbG9ycywgYm9vdHN0cmFwVGhlbWVDc3NSdWxlcywgYm9vdHN0cmFwTWF0ZXJpYWxUaGVtZU5hbWUsIGJvb3RzdHJhcE1hdGVyaWFsVGhlbWVDb2xvcnMsIGJvb3RzdHJhcE1hdGVyaWFsVGhlbWVDc3NSdWxlcywgZGVmYXVsdEJvb3RzdHJhcENzcywgZGVmYXVsdEJvb3RzdHJhcE1hdGVyaWFsQ3NzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImRlZmF1bHRCb290c3RyYXBDc3NcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBkZWZhdWx0Qm9vdHN0cmFwQ3NzOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJkZWZhdWx0Qm9vdHN0cmFwTWF0ZXJpYWxDc3NcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBkZWZhdWx0Qm9vdHN0cmFwTWF0ZXJpYWxDc3M7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9wbHVnaW5zX3RoZW1lc19ib290c3RyYXBfY3NzYm9vdHN0cmFwX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9wbHVnaW5zL3RoZW1lcy9ib290c3RyYXAvY3NzYm9vdHN0cmFwICovIFwiLi9zcmMvcGx1Z2lucy90aGVtZXMvYm9vdHN0cmFwL2Nzc2Jvb3RzdHJhcC50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcGx1Z2luc190aGVtZXNfYm9vdHN0cmFwbWF0ZXJpYWxfY3NzYm9vdHN0cmFwbWF0ZXJpYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3BsdWdpbnMvdGhlbWVzL2Jvb3RzdHJhcG1hdGVyaWFsL2Nzc2Jvb3RzdHJhcG1hdGVyaWFsICovIFwiLi9zcmMvcGx1Z2lucy90aGVtZXMvYm9vdHN0cmFwbWF0ZXJpYWwvY3NzYm9vdHN0cmFwbWF0ZXJpYWwudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3BsdWdpbnNfdGhlbWVzX2Jvb3RzdHJhcF90aGVtZV9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vcGx1Z2lucy90aGVtZXMvYm9vdHN0cmFwL3RoZW1lLXNldHRpbmdzICovIFwiLi9zcmMvcGx1Z2lucy90aGVtZXMvYm9vdHN0cmFwL3RoZW1lLXNldHRpbmdzLnRzXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiYm9vdHN0cmFwVGhlbWVOYW1lXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3BsdWdpbnNfdGhlbWVzX2Jvb3RzdHJhcF90aGVtZV9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiYm9vdHN0cmFwVGhlbWVOYW1lXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiYm9vdHN0cmFwVGhlbWVDb2xvcnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcGx1Z2luc190aGVtZXNfYm9vdHN0cmFwX3RoZW1lX3NldHRpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJib290c3RyYXBUaGVtZUNvbG9yc1wiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImJvb3RzdHJhcFRoZW1lQ3NzUnVsZXNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcGx1Z2luc190aGVtZXNfYm9vdHN0cmFwX3RoZW1lX3NldHRpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJib290c3RyYXBUaGVtZUNzc1J1bGVzXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9wbHVnaW5zX3RoZW1lc19ib290c3RyYXBtYXRlcmlhbF90aGVtZV9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vcGx1Z2lucy90aGVtZXMvYm9vdHN0cmFwbWF0ZXJpYWwvdGhlbWUtc2V0dGluZ3MgKi8gXCIuL3NyYy9wbHVnaW5zL3RoZW1lcy9ib290c3RyYXBtYXRlcmlhbC90aGVtZS1zZXR0aW5ncy50c1wiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImJvb3RzdHJhcE1hdGVyaWFsVGhlbWVOYW1lXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3BsdWdpbnNfdGhlbWVzX2Jvb3RzdHJhcG1hdGVyaWFsX3RoZW1lX3NldHRpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJib290c3RyYXBNYXRlcmlhbFRoZW1lTmFtZVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImJvb3RzdHJhcE1hdGVyaWFsVGhlbWVDb2xvcnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcGx1Z2luc190aGVtZXNfYm9vdHN0cmFwbWF0ZXJpYWxfdGhlbWVfc2V0dGluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcImJvb3RzdHJhcE1hdGVyaWFsVGhlbWVDb2xvcnNcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJib290c3RyYXBNYXRlcmlhbFRoZW1lQ3NzUnVsZXNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcGx1Z2luc190aGVtZXNfYm9vdHN0cmFwbWF0ZXJpYWxfdGhlbWVfc2V0dGluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcImJvb3RzdHJhcE1hdGVyaWFsVGhlbWVDc3NSdWxlc1wiXTsgfSk7XG5cblxuXG5cblxudmFyIGRlZmF1bHRCb290c3RyYXBDc3MgPSBfcGx1Z2luc190aGVtZXNfYm9vdHN0cmFwX2Nzc2Jvb3RzdHJhcF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiZGVmYXVsdENzc1wiXTtcbnZhciBkZWZhdWx0Qm9vdHN0cmFwTWF0ZXJpYWxDc3MgPSBfcGx1Z2luc190aGVtZXNfYm9vdHN0cmFwbWF0ZXJpYWxfY3NzYm9vdHN0cmFwbWF0ZXJpYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcImRlZmF1bHRDc3NcIl07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvZW50cmllcy92dWUtdWktbW9kZWwudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvZW50cmllcy92dWUtdWktbW9kZWwudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogU3VydmV5LCBDdXN0b21XaWRnZXQsIFN1cnZleVN0cmluZywgU3VydmV5U3RyaW5nVmlld2VyLCBTdXJ2ZXlTdHJpbmdFZGl0b3IsIFN1cnZleUVsZW1lbnRWdWUsIFN1cnZleVJvd0VsZW1lbnQsIFBvcHVwU3VydmV5LCBTdXJ2ZXlXaW5kb3csIFBhZ2UsIFJhZGlvZ3JvdXAsIFJhZGlvZ3JvdXBJdGVtLCBPdGhlckNob2ljZSwgT3RoZXJDb21tZW50LCBSYXRpbmcsIFJhdGluZ0Ryb3Bkb3duLCBDb21tZW50LCBSYW5raW5nLCBSYW5raW5nSXRlbSwgQ2hlY2tib3gsIENoZWNrYm94SXRlbSwgQnV0dG9uR3JvdXAsIEJ1dHRvbkdyb3VwSXRlbSwgUXVlc3Rpb25UZXh0LCBRdWVzdGlvblRleHRJbnB1dCwgQm9vbGVhbiwgQm9vbGVhblN3aXRjaCwgQm9vbGVhbkNoZWNrYm94LCBCb29sZWFuUmFkaW8sIEJvb2xlYW5SYWRpb0l0ZW0sIEVtcHR5LCBNdWx0aXBsZVRleHQsIE11bHRpcGxlVGV4dEl0ZW0sIE1hdHJpeCwgRHJvcGRvd24sIERyb3Bkb3duU2VsZWN0LCBUYWdib3gsIEZpbGUsIEZpbGVQcmV2aWV3LCBGaWxlQ2xlYW5CdXR0b24sIEZpbGVWaWRlbywgRmlsZUNob29zZUJ1dHRvbiwgTWF0cml4Q2VsbCwgTWF0cml4SGVhZGVyUmVxdWlyZWQsIE1hdHJpeFRhYmxlLCBNYXRyaXhEcm9wZG93biwgTWF0cml4RHluYW1pYywgRXJyb3JzLCBIdG1sLCBFeHByZXNzaW9uLCBJbWFnZVBpY2tlciwgSW1hZ2VQaWNrZXJJdGVtLCBQYW5lbER5bmFtaWMsIFBhbmVsRHluYW1pY1Byb2dyZXNzLCBQYW5lbER5bmFtaWNQcm9ncmVzc1YyLCBQcm9ncmVzcywgUHJvZ3Jlc3NCdXR0b25zLCBQcm9ncmVzc1RvYywgVGltZXJQYW5lbCwgUGFuZWwsIEZsb3dQYW5lbCwgRmxvd1BhbmVsRWxlbWVudCwgUm93LCBFbGVtZW50SGVhZGVyLCBRdWVzdGlvbkltYWdlLCBTaWduYXR1cmVQYWQsIFN1cnZleUhlYWRlciwgQ3VzdG9tLCBDb21wb3NpdGUsIFRpdGxlRWxlbWVudCwgVGl0bGVDb250ZW50LCBUaXRsZUFjdGlvbnMsIEFjdGlvbkJhclZpZXdNb2RlbCwgU3ZnSWNvbiwgUG9wdXBQb2ludGVyLCBQb3B1cENvbnRhaW5lciwgUG9wdXAsIExpc3QsIERyb3Bkb3duT3B0aW9uSXRlbSwgRHJvcGRvd25Db21wb25lbnQsIFRhZ2JveEZpbHRlckNvbXBvbmVudCwgVGFnYm94Q29tcG9uZW50LCBUYWdib3hJdGVtLCBSYXRpbmdJdGVtLCBSYXRpbmdJdGVtU3RhciwgUmF0aW5nSXRlbVNtaWxleSwgU3VydmV5UXVlc3Rpb25NYXRyaXhEeW5hbWljUmVtb3ZlQnV0dG9uLCBTdXJ2ZXlRdWVzdGlvbk1hdHJpeERldGFpbEJ1dHRvbiwgU3VydmV5UXVlc3Rpb25NYXRyaXhEeW5hbWljRHJhZ0Ryb3BJY29uLCBQYW5lbER5bmFtaWNBZGRCdG4sIFBhbmVsRHluYW1pY05leHRCdG4sIFBhbmVsRHluYW1pY1ByZXZCdG4sIFBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dCwgUGFuZWxEeW5hbWljUmVtb3ZlQnV0dG9uLCBTdXJ2ZXlOYXZpZ2F0aW9uQnV0dG9uLCBTa2VsZXRvbiwgQnJhbmRJbmZvLCBOb3RpZmllckNvbXBvbmVudCwgQ29tcG9uZW50c0NvbnRhaW5lciwgQ2hhcmFjdGVyQ291bnRlckNvbXBvbmVudCwgTG9hZGluZ0luZGljYXRvckNvbXBvbmVudCwgQ292ZXJDZWxsVmlld01vZGVsLCBDb3ZlclZpZXdNb2RlbCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdnVlX3N1cnZleV92dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3Z1ZS9zdXJ2ZXkudnVlICovIFwiLi9zcmMvdnVlL3N1cnZleS52dWVcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJTdXJ2ZXlcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX3N1cnZleV92dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlN1cnZleVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdnVlX2N1c3RvbXdpZGdldF92dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3Z1ZS9jdXN0b213aWRnZXQudnVlICovIFwiLi9zcmMvdnVlL2N1c3RvbXdpZGdldC52dWVcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJDdXN0b21XaWRnZXRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX2N1c3RvbXdpZGdldF92dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIkN1c3RvbVdpZGdldFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdnVlX3N0cmluZ192dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3Z1ZS9zdHJpbmcudnVlICovIFwiLi9zcmMvdnVlL3N0cmluZy52dWVcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJTdXJ2ZXlTdHJpbmdcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX3N0cmluZ192dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIlN1cnZleVN0cmluZ1wiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdnVlX3N0cmluZ192aWV3ZXJfdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi92dWUvc3RyaW5nLXZpZXdlci52dWUgKi8gXCIuL3NyYy92dWUvc3RyaW5nLXZpZXdlci52dWVcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJTdXJ2ZXlTdHJpbmdWaWV3ZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX3N0cmluZ192aWV3ZXJfdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJTdXJ2ZXlTdHJpbmdWaWV3ZXJcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Z1ZV9zdHJpbmdfZWRpdG9yX3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vdnVlL3N0cmluZy1lZGl0b3IudnVlICovIFwiLi9zcmMvdnVlL3N0cmluZy1lZGl0b3IudnVlXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiU3VydmV5U3RyaW5nRWRpdG9yXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Z1ZV9zdHJpbmdfZWRpdG9yX3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fW1wiU3VydmV5U3RyaW5nRWRpdG9yXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF92dWVfZWxlbWVudF92dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3Z1ZS9lbGVtZW50LnZ1ZSAqLyBcIi4vc3JjL3Z1ZS9lbGVtZW50LnZ1ZVwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlN1cnZleUVsZW1lbnRWdWVcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX2VsZW1lbnRfdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bXCJTdXJ2ZXlFbGVtZW50VnVlXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF92dWVfcm93X2VsZW1lbnRfdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi92dWUvcm93LWVsZW1lbnQudnVlICovIFwiLi9zcmMvdnVlL3Jvdy1lbGVtZW50LnZ1ZVwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlN1cnZleVJvd0VsZW1lbnRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX3Jvd19lbGVtZW50X3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fW1wiU3VydmV5Um93RWxlbWVudFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdnVlX3BvcHVwX3N1cnZleV92dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3Z1ZS9wb3B1cC1zdXJ2ZXkudnVlICovIFwiLi9zcmMvdnVlL3BvcHVwLXN1cnZleS52dWVcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJQb3B1cFN1cnZleVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92dWVfcG9wdXBfc3VydmV5X3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fW1wiUG9wdXBTdXJ2ZXlcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJTdXJ2ZXlXaW5kb3dcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX3BvcHVwX3N1cnZleV92dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1tcIlN1cnZleVdpbmRvd1wiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdnVlX3BhZ2VfdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi92dWUvcGFnZS52dWUgKi8gXCIuL3NyYy92dWUvcGFnZS52dWVcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJQYWdlXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Z1ZV9wYWdlX3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fW1wiUGFnZVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdnVlX3JhZGlvZ3JvdXBfdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi92dWUvcmFkaW9ncm91cC52dWUgKi8gXCIuL3NyYy92dWUvcmFkaW9ncm91cC52dWVcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJSYWRpb2dyb3VwXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Z1ZV9yYWRpb2dyb3VwX3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fW1wiUmFkaW9ncm91cFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdnVlX3JhZGlvZ3JvdXBpdGVtX3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3Z1ZS9yYWRpb2dyb3VwaXRlbS52dWUgKi8gXCIuL3NyYy92dWUvcmFkaW9ncm91cGl0ZW0udnVlXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUmFkaW9ncm91cEl0ZW1cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX3JhZGlvZ3JvdXBpdGVtX3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX1tcIlJhZGlvZ3JvdXBJdGVtXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF92dWVfcXVlc3Rpb25fb3RoZXJfdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vdnVlL3F1ZXN0aW9uLW90aGVyLnZ1ZSAqLyBcIi4vc3JjL3Z1ZS9xdWVzdGlvbi1vdGhlci52dWVcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJPdGhlckNob2ljZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92dWVfcXVlc3Rpb25fb3RoZXJfdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fW1wiT3RoZXJDaG9pY2VcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Z1ZV9xdWVzdGlvbl9jb21tZW50X3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3Z1ZS9xdWVzdGlvbi1jb21tZW50LnZ1ZSAqLyBcIi4vc3JjL3Z1ZS9xdWVzdGlvbi1jb21tZW50LnZ1ZVwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIk90aGVyQ29tbWVudFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92dWVfcXVlc3Rpb25fY29tbWVudF92dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX19bXCJPdGhlckNvbW1lbnRcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Z1ZV9yYXRpbmdfdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vdnVlL3JhdGluZy52dWUgKi8gXCIuL3NyYy92dWUvcmF0aW5nLnZ1ZVwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlJhdGluZ1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92dWVfcmF0aW5nX3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX1tcIlJhdGluZ1wiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdnVlX3JhdGluZ19kcm9wZG93bl92dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi92dWUvcmF0aW5nLWRyb3Bkb3duLnZ1ZSAqLyBcIi4vc3JjL3Z1ZS9yYXRpbmctZHJvcGRvd24udnVlXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUmF0aW5nRHJvcGRvd25cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX3JhdGluZ19kcm9wZG93bl92dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X19bXCJSYXRpbmdEcm9wZG93blwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdnVlX2NvbW1lbnRfdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vdnVlL2NvbW1lbnQudnVlICovIFwiLi9zcmMvdnVlL2NvbW1lbnQudnVlXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQ29tbWVudFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92dWVfY29tbWVudF92dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE1X19bXCJDb21tZW50XCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF92dWVfcmFua2luZ19yYW5raW5nX3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3Z1ZS9yYW5raW5nL3JhbmtpbmcudnVlICovIFwiLi9zcmMvdnVlL3JhbmtpbmcvcmFua2luZy52dWVcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJSYW5raW5nXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Z1ZV9yYW5raW5nX3JhbmtpbmdfdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNl9fW1wiUmFua2luZ1wiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdnVlX3JhbmtpbmdfcmFua2luZ19pdGVtX3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3Z1ZS9yYW5raW5nL3JhbmtpbmctaXRlbS52dWUgKi8gXCIuL3NyYy92dWUvcmFua2luZy9yYW5raW5nLWl0ZW0udnVlXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUmFua2luZ0l0ZW1cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX3JhbmtpbmdfcmFua2luZ19pdGVtX3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTdfX1tcIlJhbmtpbmdJdGVtXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF92dWVfY2hlY2tib3hfdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vdnVlL2NoZWNrYm94LnZ1ZSAqLyBcIi4vc3JjL3Z1ZS9jaGVja2JveC52dWVcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJDaGVja2JveFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92dWVfY2hlY2tib3hfdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOF9fW1wiQ2hlY2tib3hcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Z1ZV9jaGVja2JveGl0ZW1fdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vdnVlL2NoZWNrYm94aXRlbS52dWUgKi8gXCIuL3NyYy92dWUvY2hlY2tib3hpdGVtLnZ1ZVwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkNoZWNrYm94SXRlbVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92dWVfY2hlY2tib3hpdGVtX3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTlfX1tcIkNoZWNrYm94SXRlbVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdnVlX2J1dHRvbmdyb3VwX3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3Z1ZS9idXR0b25ncm91cC52dWUgKi8gXCIuL3NyYy92dWUvYnV0dG9uZ3JvdXAudnVlXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQnV0dG9uR3JvdXBcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX2J1dHRvbmdyb3VwX3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjBfX1tcIkJ1dHRvbkdyb3VwXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF92dWVfYnV0dG9uZ3JvdXBpdGVtX3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3Z1ZS9idXR0b25ncm91cGl0ZW0udnVlICovIFwiLi9zcmMvdnVlL2J1dHRvbmdyb3VwaXRlbS52dWVcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJCdXR0b25Hcm91cEl0ZW1cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX2J1dHRvbmdyb3VwaXRlbV92dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIxX19bXCJCdXR0b25Hcm91cEl0ZW1cIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Z1ZV90ZXh0X3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3Z1ZS90ZXh0LnZ1ZSAqLyBcIi4vc3JjL3Z1ZS90ZXh0LnZ1ZVwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlF1ZXN0aW9uVGV4dFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92dWVfdGV4dF92dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIyX19bXCJRdWVzdGlvblRleHRcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Z1ZV90ZXh0X2lucHV0X3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3Z1ZS90ZXh0LWlucHV0LnZ1ZSAqLyBcIi4vc3JjL3Z1ZS90ZXh0LWlucHV0LnZ1ZVwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlF1ZXN0aW9uVGV4dElucHV0XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Z1ZV90ZXh0X2lucHV0X3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjNfX1tcIlF1ZXN0aW9uVGV4dElucHV0XCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF92dWVfYm9vbGVhbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3Z1ZS9ib29sZWFuICovIFwiLi9zcmMvdnVlL2Jvb2xlYW4udHNcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJCb29sZWFuXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Z1ZV9ib29sZWFuX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yNF9fW1wiQm9vbGVhblwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdnVlX2Jvb2xlYW5fc3dpdGNoX3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3Z1ZS9ib29sZWFuLXN3aXRjaC52dWUgKi8gXCIuL3NyYy92dWUvYm9vbGVhbi1zd2l0Y2gudnVlXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQm9vbGVhblN3aXRjaFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92dWVfYm9vbGVhbl9zd2l0Y2hfdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yNV9fW1wiQm9vbGVhblN3aXRjaFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdnVlX2Jvb2xlYW5fY2hlY2tib3hfdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vdnVlL2Jvb2xlYW4tY2hlY2tib3gudnVlICovIFwiLi9zcmMvdnVlL2Jvb2xlYW4tY2hlY2tib3gudnVlXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQm9vbGVhbkNoZWNrYm94XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Z1ZV9ib29sZWFuX2NoZWNrYm94X3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjZfX1tcIkJvb2xlYW5DaGVja2JveFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdnVlX2Jvb2xlYW5fcmFkaW9fdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vdnVlL2Jvb2xlYW4tcmFkaW8udnVlICovIFwiLi9zcmMvdnVlL2Jvb2xlYW4tcmFkaW8udnVlXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQm9vbGVhblJhZGlvXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Z1ZV9ib29sZWFuX3JhZGlvX3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjdfX1tcIkJvb2xlYW5SYWRpb1wiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdnVlX2Jvb2xlYW5fcmFkaW9faXRlbV92dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI4X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi92dWUvYm9vbGVhbi1yYWRpby1pdGVtLnZ1ZSAqLyBcIi4vc3JjL3Z1ZS9ib29sZWFuLXJhZGlvLWl0ZW0udnVlXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQm9vbGVhblJhZGlvSXRlbVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92dWVfYm9vbGVhbl9yYWRpb19pdGVtX3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjhfX1tcIkJvb2xlYW5SYWRpb0l0ZW1cIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Z1ZV9lbXB0eV92dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI5X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi92dWUvZW1wdHkudnVlICovIFwiLi9zcmMvdnVlL2VtcHR5LnZ1ZVwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkVtcHR5XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Z1ZV9lbXB0eV92dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI5X19bXCJFbXB0eVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdnVlX211bHRpcGxldGV4dF92dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzMwX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi92dWUvbXVsdGlwbGV0ZXh0LnZ1ZSAqLyBcIi4vc3JjL3Z1ZS9tdWx0aXBsZXRleHQudnVlXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiTXVsdGlwbGVUZXh0XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Z1ZV9tdWx0aXBsZXRleHRfdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zMF9fW1wiTXVsdGlwbGVUZXh0XCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF92dWVfbXVsdGlwbGV0ZXh0aXRlbV92dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzMxX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi92dWUvbXVsdGlwbGV0ZXh0aXRlbS52dWUgKi8gXCIuL3NyYy92dWUvbXVsdGlwbGV0ZXh0aXRlbS52dWVcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJNdWx0aXBsZVRleHRJdGVtXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Z1ZV9tdWx0aXBsZXRleHRpdGVtX3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzFfX1tcIk11bHRpcGxlVGV4dEl0ZW1cIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Z1ZV9tYXRyaXhfdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vdnVlL21hdHJpeC52dWUgKi8gXCIuL3NyYy92dWUvbWF0cml4LnZ1ZVwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIk1hdHJpeFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92dWVfbWF0cml4X3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzJfX1tcIk1hdHJpeFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdnVlX2Ryb3Bkb3duX3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3Z1ZS9kcm9wZG93bi52dWUgKi8gXCIuL3NyYy92dWUvZHJvcGRvd24udnVlXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiRHJvcGRvd25cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX2Ryb3Bkb3duX3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzNfX1tcIkRyb3Bkb3duXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF92dWVfZHJvcGRvd25fc2VsZWN0X3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3Z1ZS9kcm9wZG93bi1zZWxlY3QudnVlICovIFwiLi9zcmMvdnVlL2Ryb3Bkb3duLXNlbGVjdC52dWVcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJEcm9wZG93blNlbGVjdFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92dWVfZHJvcGRvd25fc2VsZWN0X3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzRfX1tcIkRyb3Bkb3duU2VsZWN0XCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF92dWVfdGFnYm94X3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3Z1ZS90YWdib3gudnVlICovIFwiLi9zcmMvdnVlL3RhZ2JveC52dWVcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJUYWdib3hcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX3RhZ2JveF92dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzM1X19bXCJUYWdib3hcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Z1ZV9maWxlX3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3Z1ZS9maWxlLnZ1ZSAqLyBcIi4vc3JjL3Z1ZS9maWxlLnZ1ZVwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkZpbGVcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX2ZpbGVfdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zNl9fW1wiRmlsZVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdnVlX2ZpbGVfcHJldmlld192dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzM3X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi92dWUvZmlsZS1wcmV2aWV3LnZ1ZSAqLyBcIi4vc3JjL3Z1ZS9maWxlLXByZXZpZXcudnVlXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiRmlsZVByZXZpZXdcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX2ZpbGVfcHJldmlld192dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzM3X19bXCJGaWxlUHJldmlld1wiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdnVlX2ZpbGVfY2xlYW5fYnV0dG9uX3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3Z1ZS9maWxlLWNsZWFuLWJ1dHRvbi52dWUgKi8gXCIuL3NyYy92dWUvZmlsZS1jbGVhbi1idXR0b24udnVlXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiRmlsZUNsZWFuQnV0dG9uXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Z1ZV9maWxlX2NsZWFuX2J1dHRvbl92dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzM4X19bXCJGaWxlQ2xlYW5CdXR0b25cIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Z1ZV9maWxlX3ZpZGVvX3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3Z1ZS9maWxlLXZpZGVvLnZ1ZSAqLyBcIi4vc3JjL3Z1ZS9maWxlLXZpZGVvLnZ1ZVwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkZpbGVWaWRlb1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92dWVfZmlsZV92aWRlb192dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzM5X19bXCJGaWxlVmlkZW9cIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Z1ZV9jb21wb25lbnRzX2ZpbGVfYWN0aW9uc19maWxlX2Nob29zZV9idXR0b25fdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80MF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vdnVlL2NvbXBvbmVudHMvZmlsZS1hY3Rpb25zL2ZpbGUtY2hvb3NlLWJ1dHRvbi52dWUgKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9maWxlLWFjdGlvbnMvZmlsZS1jaG9vc2UtYnV0dG9uLnZ1ZVwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkZpbGVDaG9vc2VCdXR0b25cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX2NvbXBvbmVudHNfZmlsZV9hY3Rpb25zX2ZpbGVfY2hvb3NlX2J1dHRvbl92dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzQwX19bXCJGaWxlQ2hvb3NlQnV0dG9uXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF92dWVfbWF0cml4Y2VsbF92dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzQxX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi92dWUvbWF0cml4Y2VsbC52dWUgKi8gXCIuL3NyYy92dWUvbWF0cml4Y2VsbC52dWVcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJNYXRyaXhDZWxsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Z1ZV9tYXRyaXhjZWxsX3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNDFfX1tcIk1hdHJpeENlbGxcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Z1ZV9tYXRyaXhoZWFkZXJyZXF1aXJlZF92dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzQyX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi92dWUvbWF0cml4aGVhZGVycmVxdWlyZWQudnVlICovIFwiLi9zcmMvdnVlL21hdHJpeGhlYWRlcnJlcXVpcmVkLnZ1ZVwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIk1hdHJpeEhlYWRlclJlcXVpcmVkXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Z1ZV9tYXRyaXhoZWFkZXJyZXF1aXJlZF92dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzQyX19bXCJNYXRyaXhIZWFkZXJSZXF1aXJlZFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdnVlX21hdHJpeHRhYmxlX3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNDNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3Z1ZS9tYXRyaXh0YWJsZS52dWUgKi8gXCIuL3NyYy92dWUvbWF0cml4dGFibGUudnVlXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiTWF0cml4VGFibGVcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX21hdHJpeHRhYmxlX3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNDNfX1tcIk1hdHJpeFRhYmxlXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF92dWVfbWF0cml4ZHJvcGRvd25fdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80NF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vdnVlL21hdHJpeGRyb3Bkb3duLnZ1ZSAqLyBcIi4vc3JjL3Z1ZS9tYXRyaXhkcm9wZG93bi52dWVcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJNYXRyaXhEcm9wZG93blwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92dWVfbWF0cml4ZHJvcGRvd25fdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80NF9fW1wiTWF0cml4RHJvcGRvd25cIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Z1ZV9tYXRyaXhkeW5hbWljX3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNDVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3Z1ZS9tYXRyaXhkeW5hbWljLnZ1ZSAqLyBcIi4vc3JjL3Z1ZS9tYXRyaXhkeW5hbWljLnZ1ZVwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIk1hdHJpeER5bmFtaWNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX21hdHJpeGR5bmFtaWNfdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80NV9fW1wiTWF0cml4RHluYW1pY1wiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdnVlX2Vycm9yc192dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzQ2X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi92dWUvZXJyb3JzLnZ1ZSAqLyBcIi4vc3JjL3Z1ZS9lcnJvcnMudnVlXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiRXJyb3JzXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Z1ZV9lcnJvcnNfdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80Nl9fW1wiRXJyb3JzXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF92dWVfaHRtbF92dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzQ3X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi92dWUvaHRtbC52dWUgKi8gXCIuL3NyYy92dWUvaHRtbC52dWVcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJIdG1sXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Z1ZV9odG1sX3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNDdfX1tcIkh0bWxcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Z1ZV9leHByZXNzaW9uX3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNDhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3Z1ZS9leHByZXNzaW9uLnZ1ZSAqLyBcIi4vc3JjL3Z1ZS9leHByZXNzaW9uLnZ1ZVwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkV4cHJlc3Npb25cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX2V4cHJlc3Npb25fdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80OF9fW1wiRXhwcmVzc2lvblwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdnVlX2ltYWdlcGlja2VyX3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNDlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3Z1ZS9pbWFnZXBpY2tlci52dWUgKi8gXCIuL3NyYy92dWUvaW1hZ2VwaWNrZXIudnVlXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiSW1hZ2VQaWNrZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX2ltYWdlcGlja2VyX3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNDlfX1tcIkltYWdlUGlja2VyXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF92dWVfaW1hZ2VwaWNrZXJfaXRlbV92dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzUwX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi92dWUvaW1hZ2VwaWNrZXItaXRlbS52dWUgKi8gXCIuL3NyYy92dWUvaW1hZ2VwaWNrZXItaXRlbS52dWVcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJJbWFnZVBpY2tlckl0ZW1cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX2ltYWdlcGlja2VyX2l0ZW1fdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81MF9fW1wiSW1hZ2VQaWNrZXJJdGVtXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF92dWVfcGFuZWxkeW5hbWljX3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNTFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3Z1ZS9wYW5lbGR5bmFtaWMudnVlICovIFwiLi9zcmMvdnVlL3BhbmVsZHluYW1pYy52dWVcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJQYW5lbER5bmFtaWNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX3BhbmVsZHluYW1pY192dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzUxX19bXCJQYW5lbER5bmFtaWNcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Z1ZV9wYW5lbGR5bmFtaWNwcm9ncmVzc192dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzUyX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi92dWUvcGFuZWxkeW5hbWljcHJvZ3Jlc3MudnVlICovIFwiLi9zcmMvdnVlL3BhbmVsZHluYW1pY3Byb2dyZXNzLnZ1ZVwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlBhbmVsRHluYW1pY1Byb2dyZXNzXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Z1ZV9wYW5lbGR5bmFtaWNwcm9ncmVzc192dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzUyX19bXCJQYW5lbER5bmFtaWNQcm9ncmVzc1wiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdnVlX3BhbmVsZHluYW1pY3Byb2dyZXNzVjJfdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81M19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vdnVlL3BhbmVsZHluYW1pY3Byb2dyZXNzVjIudnVlICovIFwiLi9zcmMvdnVlL3BhbmVsZHluYW1pY3Byb2dyZXNzVjIudnVlXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUGFuZWxEeW5hbWljUHJvZ3Jlc3NWMlwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92dWVfcGFuZWxkeW5hbWljcHJvZ3Jlc3NWMl92dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzUzX19bXCJQYW5lbER5bmFtaWNQcm9ncmVzc1YyXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF92dWVfcHJvZ3Jlc3NfdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81NF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vdnVlL3Byb2dyZXNzLnZ1ZSAqLyBcIi4vc3JjL3Z1ZS9wcm9ncmVzcy52dWVcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJQcm9ncmVzc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92dWVfcHJvZ3Jlc3NfdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81NF9fW1wiUHJvZ3Jlc3NcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Z1ZV9wcm9ncmVzc0J1dHRvbnNfdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81NV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vdnVlL3Byb2dyZXNzQnV0dG9ucy52dWUgKi8gXCIuL3NyYy92dWUvcHJvZ3Jlc3NCdXR0b25zLnZ1ZVwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlByb2dyZXNzQnV0dG9uc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92dWVfcHJvZ3Jlc3NCdXR0b25zX3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNTVfX1tcIlByb2dyZXNzQnV0dG9uc1wiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdnVlX3Byb2dyZXNzVG9jX3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNTZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3Z1ZS9wcm9ncmVzc1RvYy52dWUgKi8gXCIuL3NyYy92dWUvcHJvZ3Jlc3NUb2MudnVlXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUHJvZ3Jlc3NUb2NcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX3Byb2dyZXNzVG9jX3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNTZfX1tcIlByb2dyZXNzVG9jXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF92dWVfdGltZXJwYW5lbF92dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzU3X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi92dWUvdGltZXJwYW5lbC52dWUgKi8gXCIuL3NyYy92dWUvdGltZXJwYW5lbC52dWVcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJUaW1lclBhbmVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Z1ZV90aW1lcnBhbmVsX3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNTdfX1tcIlRpbWVyUGFuZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Z1ZV9wYW5lbF92dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzU4X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi92dWUvcGFuZWwudnVlICovIFwiLi9zcmMvdnVlL3BhbmVsLnZ1ZVwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlBhbmVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Z1ZV9wYW5lbF92dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzU4X19bXCJQYW5lbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdnVlX2Zsb3dwYW5lbF92dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzU5X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi92dWUvZmxvd3BhbmVsLnZ1ZSAqLyBcIi4vc3JjL3Z1ZS9mbG93cGFuZWwudnVlXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiRmxvd1BhbmVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Z1ZV9mbG93cGFuZWxfdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81OV9fW1wiRmxvd1BhbmVsXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF92dWVfZmxvd3BhbmVsZWxlbWVudF92dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzYwX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi92dWUvZmxvd3BhbmVsZWxlbWVudC52dWUgKi8gXCIuL3NyYy92dWUvZmxvd3BhbmVsZWxlbWVudC52dWVcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJGbG93UGFuZWxFbGVtZW50XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Z1ZV9mbG93cGFuZWxlbGVtZW50X3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNjBfX1tcIkZsb3dQYW5lbEVsZW1lbnRcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Z1ZV9yb3dfdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82MV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vdnVlL3Jvdy52dWUgKi8gXCIuL3NyYy92dWUvcm93LnZ1ZVwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlJvd1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92dWVfcm93X3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNjFfX1tcIlJvd1wiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdnVlX2VsZW1lbnRoZWFkZXJfdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82Ml9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vdnVlL2VsZW1lbnRoZWFkZXIudnVlICovIFwiLi9zcmMvdnVlL2VsZW1lbnRoZWFkZXIudnVlXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiRWxlbWVudEhlYWRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92dWVfZWxlbWVudGhlYWRlcl92dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzYyX19bXCJFbGVtZW50SGVhZGVyXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF92dWVfaW1hZ2VfdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82M19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vdnVlL2ltYWdlLnZ1ZSAqLyBcIi4vc3JjL3Z1ZS9pbWFnZS52dWVcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJRdWVzdGlvbkltYWdlXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Z1ZV9pbWFnZV92dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzYzX19bXCJRdWVzdGlvbkltYWdlXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF92dWVfc2lnbmF0dXJlcGFkX3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNjRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3Z1ZS9zaWduYXR1cmVwYWQudnVlICovIFwiLi9zcmMvdnVlL3NpZ25hdHVyZXBhZC52dWVcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJTaWduYXR1cmVQYWRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX3NpZ25hdHVyZXBhZF92dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzY0X19bXCJTaWduYXR1cmVQYWRcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Z1ZV9oZWFkZXJfdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82NV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vdnVlL2hlYWRlci52dWUgKi8gXCIuL3NyYy92dWUvaGVhZGVyLnZ1ZVwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlN1cnZleUhlYWRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92dWVfaGVhZGVyX3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNjVfX1tcIlN1cnZleUhlYWRlclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdnVlX2N1c3RvbV92dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzY2X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi92dWUvY3VzdG9tLnZ1ZSAqLyBcIi4vc3JjL3Z1ZS9jdXN0b20udnVlXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQ3VzdG9tXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Z1ZV9jdXN0b21fdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82Nl9fW1wiQ3VzdG9tXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF92dWVfY29tcG9zaXRlX3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNjdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3Z1ZS9jb21wb3NpdGUudnVlICovIFwiLi9zcmMvdnVlL2NvbXBvc2l0ZS52dWVcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJDb21wb3NpdGVcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX2NvbXBvc2l0ZV92dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzY3X19bXCJDb21wb3NpdGVcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Z1ZV9jb21wb25lbnRzX3RpdGxlX3RpdGxlX2VsZW1lbnRfdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82OF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vdnVlL2NvbXBvbmVudHMvdGl0bGUvdGl0bGUtZWxlbWVudC52dWUgKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy90aXRsZS90aXRsZS1lbGVtZW50LnZ1ZVwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlRpdGxlRWxlbWVudFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92dWVfY29tcG9uZW50c190aXRsZV90aXRsZV9lbGVtZW50X3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNjhfX1tcIlRpdGxlRWxlbWVudFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdnVlX2NvbXBvbmVudHNfdGl0bGVfdGl0bGVfY29udGVudF92dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzY5X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi92dWUvY29tcG9uZW50cy90aXRsZS90aXRsZS1jb250ZW50LnZ1ZSAqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL3RpdGxlL3RpdGxlLWNvbnRlbnQudnVlXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiVGl0bGVDb250ZW50XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Z1ZV9jb21wb25lbnRzX3RpdGxlX3RpdGxlX2NvbnRlbnRfdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82OV9fW1wiVGl0bGVDb250ZW50XCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF92dWVfY29tcG9uZW50c190aXRsZV90aXRsZV9hY3Rpb25zX3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3Z1ZS9jb21wb25lbnRzL3RpdGxlL3RpdGxlLWFjdGlvbnMudnVlICovIFwiLi9zcmMvdnVlL2NvbXBvbmVudHMvdGl0bGUvdGl0bGUtYWN0aW9ucy52dWVcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJUaXRsZUFjdGlvbnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX2NvbXBvbmVudHNfdGl0bGVfdGl0bGVfYWN0aW9uc192dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzcwX19bXCJUaXRsZUFjdGlvbnNcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Z1ZV9jb21wb25lbnRzX2FjdGlvbl9iYXJfYWN0aW9uX2Jhcl92dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzcxX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi92dWUvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXIudnVlICovIFwiLi9zcmMvdnVlL2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24tYmFyLnZ1ZVwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkFjdGlvbkJhclZpZXdNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92dWVfY29tcG9uZW50c19hY3Rpb25fYmFyX2FjdGlvbl9iYXJfdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83MV9fW1wiQWN0aW9uQmFyVmlld01vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF92dWVfY29tcG9uZW50c19zdmdfaWNvbl9zdmdfaWNvbl92dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzcyX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi92dWUvY29tcG9uZW50cy9zdmctaWNvbi9zdmctaWNvbi52dWUgKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9zdmctaWNvbi9zdmctaWNvbi52dWVcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJTdmdJY29uXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Z1ZV9jb21wb25lbnRzX3N2Z19pY29uX3N2Z19pY29uX3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNzJfX1tcIlN2Z0ljb25cIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Z1ZV9jb21wb25lbnRzX3BvcHVwX3BvcHVwX3BvaW50ZXJfdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83M19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vdnVlL2NvbXBvbmVudHMvcG9wdXAvcG9wdXAtcG9pbnRlci52dWUgKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9wb3B1cC9wb3B1cC1wb2ludGVyLnZ1ZVwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlBvcHVwUG9pbnRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92dWVfY29tcG9uZW50c19wb3B1cF9wb3B1cF9wb2ludGVyX3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNzNfX1tcIlBvcHVwUG9pbnRlclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdnVlX2NvbXBvbmVudHNfcG9wdXBfcG9wdXBfY29udGFpbmVyX3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3Z1ZS9jb21wb25lbnRzL3BvcHVwL3BvcHVwLWNvbnRhaW5lci52dWUgKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9wb3B1cC9wb3B1cC1jb250YWluZXIudnVlXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUG9wdXBDb250YWluZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX2NvbXBvbmVudHNfcG9wdXBfcG9wdXBfY29udGFpbmVyX3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNzRfX1tcIlBvcHVwQ29udGFpbmVyXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF92dWVfY29tcG9uZW50c19wb3B1cF9wb3B1cF92dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzc1X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi92dWUvY29tcG9uZW50cy9wb3B1cC9wb3B1cC52dWUgKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9wb3B1cC9wb3B1cC52dWVcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJQb3B1cFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92dWVfY29tcG9uZW50c19wb3B1cF9wb3B1cF92dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzc1X19bXCJQb3B1cFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdnVlX2NvbXBvbmVudHNfbGlzdF9saXN0X3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3Z1ZS9jb21wb25lbnRzL2xpc3QvbGlzdC52dWUgKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9saXN0L2xpc3QudnVlXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiTGlzdFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92dWVfY29tcG9uZW50c19saXN0X2xpc3RfdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83Nl9fW1wiTGlzdFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdnVlX2NvbXBvbmVudHNfZHJvcGRvd25fb3B0aW9uX2l0ZW1fdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83N19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vdnVlL2NvbXBvbmVudHMvZHJvcGRvd24vb3B0aW9uLWl0ZW0udnVlICovIFwiLi9zcmMvdnVlL2NvbXBvbmVudHMvZHJvcGRvd24vb3B0aW9uLWl0ZW0udnVlXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiRHJvcGRvd25PcHRpb25JdGVtXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Z1ZV9jb21wb25lbnRzX2Ryb3Bkb3duX29wdGlvbl9pdGVtX3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNzdfX1tcIkRyb3Bkb3duT3B0aW9uSXRlbVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdnVlX2NvbXBvbmVudHNfZHJvcGRvd25fZHJvcGRvd25fdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83OF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vdnVlL2NvbXBvbmVudHMvZHJvcGRvd24vZHJvcGRvd24udnVlICovIFwiLi9zcmMvdnVlL2NvbXBvbmVudHMvZHJvcGRvd24vZHJvcGRvd24udnVlXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiRHJvcGRvd25Db21wb25lbnRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX2NvbXBvbmVudHNfZHJvcGRvd25fZHJvcGRvd25fdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83OF9fW1wiRHJvcGRvd25Db21wb25lbnRcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Z1ZV9jb21wb25lbnRzX3RhZ2JveF90YWdib3hfZmlsdGVyX3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNzlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3Z1ZS9jb21wb25lbnRzL3RhZ2JveC90YWdib3gtZmlsdGVyLnZ1ZSAqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL3RhZ2JveC90YWdib3gtZmlsdGVyLnZ1ZVwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlRhZ2JveEZpbHRlckNvbXBvbmVudFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92dWVfY29tcG9uZW50c190YWdib3hfdGFnYm94X2ZpbHRlcl92dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzc5X19bXCJUYWdib3hGaWx0ZXJDb21wb25lbnRcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Z1ZV9jb21wb25lbnRzX3RhZ2JveF90YWdib3hfdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84MF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vdnVlL2NvbXBvbmVudHMvdGFnYm94L3RhZ2JveC52dWUgKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy90YWdib3gvdGFnYm94LnZ1ZVwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlRhZ2JveENvbXBvbmVudFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92dWVfY29tcG9uZW50c190YWdib3hfdGFnYm94X3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfODBfX1tcIlRhZ2JveENvbXBvbmVudFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdnVlX2NvbXBvbmVudHNfdGFnYm94X3RhZ2JveF9pdGVtX3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfODFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3Z1ZS9jb21wb25lbnRzL3RhZ2JveC90YWdib3gtaXRlbS52dWUgKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy90YWdib3gvdGFnYm94LWl0ZW0udnVlXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiVGFnYm94SXRlbVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92dWVfY29tcG9uZW50c190YWdib3hfdGFnYm94X2l0ZW1fdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84MV9fW1wiVGFnYm94SXRlbVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdnVlX2NvbXBvbmVudHNfcmF0aW5nX3JhdGluZ19pdGVtX3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfODJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3Z1ZS9jb21wb25lbnRzL3JhdGluZy9yYXRpbmctaXRlbS52dWUgKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9yYXRpbmcvcmF0aW5nLWl0ZW0udnVlXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUmF0aW5nSXRlbVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92dWVfY29tcG9uZW50c19yYXRpbmdfcmF0aW5nX2l0ZW1fdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84Ml9fW1wiUmF0aW5nSXRlbVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdnVlX2NvbXBvbmVudHNfcmF0aW5nX3JhdGluZ19pdGVtX3N0YXJfdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84M19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vdnVlL2NvbXBvbmVudHMvcmF0aW5nL3JhdGluZy1pdGVtLXN0YXIudnVlICovIFwiLi9zcmMvdnVlL2NvbXBvbmVudHMvcmF0aW5nL3JhdGluZy1pdGVtLXN0YXIudnVlXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUmF0aW5nSXRlbVN0YXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX2NvbXBvbmVudHNfcmF0aW5nX3JhdGluZ19pdGVtX3N0YXJfdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84M19fW1wiUmF0aW5nSXRlbVN0YXJcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Z1ZV9jb21wb25lbnRzX3JhdGluZ19yYXRpbmdfaXRlbV9zbWlsZXlfdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84NF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vdnVlL2NvbXBvbmVudHMvcmF0aW5nL3JhdGluZy1pdGVtLXNtaWxleS52dWUgKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9yYXRpbmcvcmF0aW5nLWl0ZW0tc21pbGV5LnZ1ZVwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlJhdGluZ0l0ZW1TbWlsZXlcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX2NvbXBvbmVudHNfcmF0aW5nX3JhdGluZ19pdGVtX3NtaWxleV92dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzg0X19bXCJSYXRpbmdJdGVtU21pbGV5XCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF92dWVfY29tcG9uZW50c19tYXRyaXhfYWN0aW9uc19yZW1vdmVfYnV0dG9uX3JlbW92ZV9idXR0b25fdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84NV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vdnVlL2NvbXBvbmVudHMvbWF0cml4LWFjdGlvbnMvcmVtb3ZlLWJ1dHRvbi9yZW1vdmUtYnV0dG9uLnZ1ZSAqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL21hdHJpeC1hY3Rpb25zL3JlbW92ZS1idXR0b24vcmVtb3ZlLWJ1dHRvbi52dWVcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJTdXJ2ZXlRdWVzdGlvbk1hdHJpeER5bmFtaWNSZW1vdmVCdXR0b25cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX2NvbXBvbmVudHNfbWF0cml4X2FjdGlvbnNfcmVtb3ZlX2J1dHRvbl9yZW1vdmVfYnV0dG9uX3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfODVfX1tcIlN1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pY1JlbW92ZUJ1dHRvblwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdnVlX2NvbXBvbmVudHNfbWF0cml4X2FjdGlvbnNfZGV0YWlsX2J1dHRvbl9kZXRhaWxfYnV0dG9uX3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfODZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3Z1ZS9jb21wb25lbnRzL21hdHJpeC1hY3Rpb25zL2RldGFpbC1idXR0b24vZGV0YWlsLWJ1dHRvbi52dWUgKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9tYXRyaXgtYWN0aW9ucy9kZXRhaWwtYnV0dG9uL2RldGFpbC1idXR0b24udnVlXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiU3VydmV5UXVlc3Rpb25NYXRyaXhEZXRhaWxCdXR0b25cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX2NvbXBvbmVudHNfbWF0cml4X2FjdGlvbnNfZGV0YWlsX2J1dHRvbl9kZXRhaWxfYnV0dG9uX3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfODZfX1tcIlN1cnZleVF1ZXN0aW9uTWF0cml4RGV0YWlsQnV0dG9uXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF92dWVfY29tcG9uZW50c19tYXRyaXhfYWN0aW9uc19kcmFnX2Ryb3BfaWNvbl9kcmFnX2Ryb3BfaWNvbl92dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzg3X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi92dWUvY29tcG9uZW50cy9tYXRyaXgtYWN0aW9ucy9kcmFnLWRyb3AtaWNvbi9kcmFnLWRyb3AtaWNvbi52dWUgKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9tYXRyaXgtYWN0aW9ucy9kcmFnLWRyb3AtaWNvbi9kcmFnLWRyb3AtaWNvbi52dWVcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJTdXJ2ZXlRdWVzdGlvbk1hdHJpeER5bmFtaWNEcmFnRHJvcEljb25cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX2NvbXBvbmVudHNfbWF0cml4X2FjdGlvbnNfZHJhZ19kcm9wX2ljb25fZHJhZ19kcm9wX2ljb25fdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84N19fW1wiU3VydmV5UXVlc3Rpb25NYXRyaXhEeW5hbWljRHJhZ0Ryb3BJY29uXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF92dWVfY29tcG9uZW50c19wYW5lbGR5bmFtaWNfYWN0aW9uc19wYW5lbGR5bmFtaWNfYWRkX2J0bl92dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzg4X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi92dWUvY29tcG9uZW50cy9wYW5lbGR5bmFtaWMtYWN0aW9ucy9wYW5lbGR5bmFtaWMtYWRkLWJ0bi52dWUgKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9wYW5lbGR5bmFtaWMtYWN0aW9ucy9wYW5lbGR5bmFtaWMtYWRkLWJ0bi52dWVcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJQYW5lbER5bmFtaWNBZGRCdG5cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX2NvbXBvbmVudHNfcGFuZWxkeW5hbWljX2FjdGlvbnNfcGFuZWxkeW5hbWljX2FkZF9idG5fdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84OF9fW1wiUGFuZWxEeW5hbWljQWRkQnRuXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF92dWVfY29tcG9uZW50c19wYW5lbGR5bmFtaWNfYWN0aW9uc19wYW5lbGR5bmFtaWNfbmV4dF9idG5fdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84OV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vdnVlL2NvbXBvbmVudHMvcGFuZWxkeW5hbWljLWFjdGlvbnMvcGFuZWxkeW5hbWljLW5leHQtYnRuLnZ1ZSAqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL3BhbmVsZHluYW1pYy1hY3Rpb25zL3BhbmVsZHluYW1pYy1uZXh0LWJ0bi52dWVcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJQYW5lbER5bmFtaWNOZXh0QnRuXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Z1ZV9jb21wb25lbnRzX3BhbmVsZHluYW1pY19hY3Rpb25zX3BhbmVsZHluYW1pY19uZXh0X2J0bl92dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzg5X19bXCJQYW5lbER5bmFtaWNOZXh0QnRuXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF92dWVfY29tcG9uZW50c19wYW5lbGR5bmFtaWNfYWN0aW9uc19wYW5lbGR5bmFtaWNfcHJldl9idG5fdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85MF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vdnVlL2NvbXBvbmVudHMvcGFuZWxkeW5hbWljLWFjdGlvbnMvcGFuZWxkeW5hbWljLXByZXYtYnRuLnZ1ZSAqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL3BhbmVsZHluYW1pYy1hY3Rpb25zL3BhbmVsZHluYW1pYy1wcmV2LWJ0bi52dWVcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJQYW5lbER5bmFtaWNQcmV2QnRuXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Z1ZV9jb21wb25lbnRzX3BhbmVsZHluYW1pY19hY3Rpb25zX3BhbmVsZHluYW1pY19wcmV2X2J0bl92dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzkwX19bXCJQYW5lbER5bmFtaWNQcmV2QnRuXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF92dWVfY29tcG9uZW50c19wYW5lbGR5bmFtaWNfYWN0aW9uc19wYW5lbGR5bmFtaWNfcHJvZ3Jlc3NfdGV4dF92dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzkxX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi92dWUvY29tcG9uZW50cy9wYW5lbGR5bmFtaWMtYWN0aW9ucy9wYW5lbGR5bmFtaWMtcHJvZ3Jlc3MtdGV4dC52dWUgKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9wYW5lbGR5bmFtaWMtYWN0aW9ucy9wYW5lbGR5bmFtaWMtcHJvZ3Jlc3MtdGV4dC52dWVcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJQYW5lbER5bmFtaWNQcm9ncmVzc1RleHRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX2NvbXBvbmVudHNfcGFuZWxkeW5hbWljX2FjdGlvbnNfcGFuZWxkeW5hbWljX3Byb2dyZXNzX3RleHRfdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85MV9fW1wiUGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0XCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF92dWVfY29tcG9uZW50c19wYW5lbGR5bmFtaWNfYWN0aW9uc19wYW5lbGR5bmFtaWNfcmVtb3ZlX2J0bl92dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzkyX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi92dWUvY29tcG9uZW50cy9wYW5lbGR5bmFtaWMtYWN0aW9ucy9wYW5lbGR5bmFtaWMtcmVtb3ZlLWJ0bi52dWUgKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9wYW5lbGR5bmFtaWMtYWN0aW9ucy9wYW5lbGR5bmFtaWMtcmVtb3ZlLWJ0bi52dWVcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJQYW5lbER5bmFtaWNSZW1vdmVCdXR0b25cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX2NvbXBvbmVudHNfcGFuZWxkeW5hbWljX2FjdGlvbnNfcGFuZWxkeW5hbWljX3JlbW92ZV9idG5fdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85Ml9fW1wiUGFuZWxEeW5hbWljUmVtb3ZlQnV0dG9uXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF92dWVfY29tcG9uZW50c19zdXJ2ZXlfYWN0aW9uc19zdXJ2ZXlfbmF2X2J1dHRvbl92dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzkzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi92dWUvY29tcG9uZW50cy9zdXJ2ZXktYWN0aW9ucy9zdXJ2ZXktbmF2LWJ1dHRvbi52dWUgKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9zdXJ2ZXktYWN0aW9ucy9zdXJ2ZXktbmF2LWJ1dHRvbi52dWVcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJTdXJ2ZXlOYXZpZ2F0aW9uQnV0dG9uXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Z1ZV9jb21wb25lbnRzX3N1cnZleV9hY3Rpb25zX3N1cnZleV9uYXZfYnV0dG9uX3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOTNfX1tcIlN1cnZleU5hdmlnYXRpb25CdXR0b25cIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Z1ZV9jb21wb25lbnRzX3NrZWxldG9uX3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOTRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3Z1ZS9jb21wb25lbnRzL3NrZWxldG9uLnZ1ZSAqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL3NrZWxldG9uLnZ1ZVwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlNrZWxldG9uXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Z1ZV9jb21wb25lbnRzX3NrZWxldG9uX3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOTRfX1tcIlNrZWxldG9uXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF92dWVfY29tcG9uZW50c19icmFuZF9pbmZvX3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOTVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3Z1ZS9jb21wb25lbnRzL2JyYW5kLWluZm8udnVlICovIFwiLi9zcmMvdnVlL2NvbXBvbmVudHMvYnJhbmQtaW5mby52dWVcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJCcmFuZEluZm9cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX2NvbXBvbmVudHNfYnJhbmRfaW5mb192dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzk1X19bXCJCcmFuZEluZm9cIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Z1ZV9jb21wb25lbnRzX25vdGlmaWVyX3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOTZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3Z1ZS9jb21wb25lbnRzL25vdGlmaWVyLnZ1ZSAqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL25vdGlmaWVyLnZ1ZVwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIk5vdGlmaWVyQ29tcG9uZW50XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Z1ZV9jb21wb25lbnRzX25vdGlmaWVyX3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOTZfX1tcIk5vdGlmaWVyQ29tcG9uZW50XCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF92dWVfY29tcG9uZW50c19jb250YWluZXJfdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85N19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vdnVlL2NvbXBvbmVudHMvY29udGFpbmVyLnZ1ZSAqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL2NvbnRhaW5lci52dWVcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJDb21wb25lbnRzQ29udGFpbmVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Z1ZV9jb21wb25lbnRzX2NvbnRhaW5lcl92dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzk3X19bXCJDb21wb25lbnRzQ29udGFpbmVyXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF92dWVfY29tcG9uZW50c19jaGFyYWN0ZXJfY291bnRlcl92dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzk4X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi92dWUvY29tcG9uZW50cy9jaGFyYWN0ZXItY291bnRlci52dWUgKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9jaGFyYWN0ZXItY291bnRlci52dWVcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJDaGFyYWN0ZXJDb3VudGVyQ29tcG9uZW50XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Z1ZV9jb21wb25lbnRzX2NoYXJhY3Rlcl9jb3VudGVyX3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOThfX1tcIkNoYXJhY3RlckNvdW50ZXJDb21wb25lbnRcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Z1ZV9jb21wb25lbnRzX2xvYWRpbmdfaW5kaWNhdG9yX3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOTlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3Z1ZS9jb21wb25lbnRzL2xvYWRpbmctaW5kaWNhdG9yLnZ1ZSAqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL2xvYWRpbmctaW5kaWNhdG9yLnZ1ZVwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkxvYWRpbmdJbmRpY2F0b3JDb21wb25lbnRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX2NvbXBvbmVudHNfbG9hZGluZ19pbmRpY2F0b3JfdnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85OV9fW1wiTG9hZGluZ0luZGljYXRvckNvbXBvbmVudFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdnVlX2NvbXBvbmVudHNfY292ZXJfY292ZXJfY2VsbF92dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vdnVlL2NvbXBvbmVudHMvY292ZXIvY292ZXItY2VsbC52dWUgKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9jb3Zlci9jb3Zlci1jZWxsLnZ1ZVwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkNvdmVyQ2VsbFZpZXdNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92dWVfY29tcG9uZW50c19jb3Zlcl9jb3Zlcl9jZWxsX3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTAwX19bXCJDb3ZlckNlbGxWaWV3TW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Z1ZV9jb21wb25lbnRzX2NvdmVyX2NvdmVyX3Z1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTAxX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi92dWUvY29tcG9uZW50cy9jb3Zlci9jb3Zlci52dWUgKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9jb3Zlci9jb3Zlci52dWVcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJDb3ZlclZpZXdNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92dWVfY29tcG9uZW50c19jb3Zlcl9jb3Zlcl92dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwMV9fW1wiQ292ZXJWaWV3TW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgc3VydmV5LWNvcmUgKi8gXCIuL3NyYy9lbnRyaWVzL2NvcmUudHNcIik7XG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbnN1cnZleV9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMDJfX1tcIlN1cnZleU1vZGVsXCJdLnBsYXRmb3JtID0gXCJ2dWVcIjtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9lbnRyaWVzL3Z1ZS50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9lbnRyaWVzL3Z1ZS50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBWZXJzaW9uLCBSZWxlYXNlRGF0ZSwgY2hlY2tMaWJyYXJ5VmVyc2lvbiwgc2V0TGljZW5zZUtleSwgaGFzTGljZW5zZSwgc2V0dGluZ3MsIEhlbHBlcnMsIEFuc3dlckNvdW50VmFsaWRhdG9yLCBFbWFpbFZhbGlkYXRvciwgTnVtZXJpY1ZhbGlkYXRvciwgUmVnZXhWYWxpZGF0b3IsIFN1cnZleVZhbGlkYXRvciwgVGV4dFZhbGlkYXRvciwgVmFsaWRhdG9yUmVzdWx0LCBFeHByZXNzaW9uVmFsaWRhdG9yLCBWYWxpZGF0b3JSdW5uZXIsIEl0ZW1WYWx1ZSwgQmFzZSwgRXZlbnQsIEV2ZW50QmFzZSwgQXJyYXlDaGFuZ2VzLCBDb21wdXRlZFVwZGF0ZXIsIFN1cnZleUVycm9yLCBTdXJ2ZXlFbGVtZW50Q29yZSwgU3VydmV5RWxlbWVudCwgRHJhZ1R5cGVPdmVyTWVFbnVtLCBDYWxjdWxhdGVkVmFsdWUsIEN1c3RvbUVycm9yLCBBbnN3ZXJSZXF1aXJlZEVycm9yLCBPbmVBbnN3ZXJSZXF1aXJlZEVycm9yLCBSZXF1cmVOdW1lcmljRXJyb3IsIEV4Y2VlZFNpemVFcnJvciwgTG9jYWxpemFibGVTdHJpbmcsIExvY2FsaXphYmxlU3RyaW5ncywgSHRtbENvbmRpdGlvbkl0ZW0sIFVybENvbmRpdGlvbkl0ZW0sIENob2ljZXNSZXN0ZnVsLCBDaG9pY2VzUmVzdGZ1bGwsIEZ1bmN0aW9uRmFjdG9yeSwgcmVnaXN0ZXJGdW5jdGlvbiwgQ29uZGl0aW9uUnVubmVyLCBFeHByZXNzaW9uUnVubmVyLCBFeHByZXNzaW9uRXhlY3V0b3IsIE9wZXJhbmQsIENvbnN0LCBCaW5hcnlPcGVyYW5kLCBWYXJpYWJsZSwgRnVuY3Rpb25PcGVyYW5kLCBBcnJheU9wZXJhbmQsIFVuYXJ5T3BlcmFuZCwgQ29uZGl0aW9uc1BhcnNlciwgUHJvY2Vzc1ZhbHVlLCBKc29uRXJyb3IsIEpzb25JbmNvcnJlY3RUeXBlRXJyb3IsIEpzb25NZXRhZGF0YSwgSnNvbk1ldGFkYXRhQ2xhc3MsIEpzb25NaXNzaW5nVHlwZUVycm9yLCBKc29uTWlzc2luZ1R5cGVFcnJvckJhc2UsIEpzb25PYmplY3QsIEpzb25PYmplY3RQcm9wZXJ0eSwgSnNvblJlcXVpcmVkUHJvcGVydHlFcnJvciwgSnNvblVua25vd25Qcm9wZXJ0eUVycm9yLCBTZXJpYWxpemVyLCBwcm9wZXJ0eSwgcHJvcGVydHlBcnJheSwgTWF0cml4RHJvcGRvd25DZWxsLCBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSwgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZSwgTWF0cml4RHJvcGRvd25Db2x1bW4sIG1hdHJpeERyb3Bkb3duQ29sdW1uVHlwZXMsIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwsIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFJvdywgUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkVGFibGUsIE1hdHJpeERyb3Bkb3duUm93TW9kZWwsIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbCwgTWF0cml4RHluYW1pY1Jvd01vZGVsLCBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbCwgTWF0cml4Um93TW9kZWwsIE1hdHJpeENlbGxzLCBRdWVzdGlvbk1hdHJpeE1vZGVsLCBRdWVzdGlvbk1hdHJpeEJhc2VNb2RlbCwgTXVsdGlwbGVUZXh0SXRlbU1vZGVsLCBNdWx0aXBsZVRleHRDZWxsLCBNdWx0aXBsZVRleHRFcnJvckNlbGwsIE11dGxpcGxlVGV4dEVycm9yUm93LCBNdXRsaXBsZVRleHRSb3csIFF1ZXN0aW9uTXVsdGlwbGVUZXh0TW9kZWwsIE11bHRpcGxlVGV4dEVkaXRvck1vZGVsLCBQYW5lbE1vZGVsLCBQYW5lbE1vZGVsQmFzZSwgUXVlc3Rpb25Sb3dNb2RlbCwgRmxvd1BhbmVsTW9kZWwsIFBhZ2VNb2RlbCwgRGVmYXVsdFRpdGxlTW9kZWwsIFF1ZXN0aW9uLCBRdWVzdGlvbk5vblZhbHVlLCBRdWVzdGlvbkVtcHR5TW9kZWwsIFF1ZXN0aW9uQ2hlY2tib3hCYXNlLCBRdWVzdGlvblNlbGVjdEJhc2UsIFF1ZXN0aW9uQ2hlY2tib3hNb2RlbCwgUXVlc3Rpb25UYWdib3hNb2RlbCwgUXVlc3Rpb25SYW5raW5nTW9kZWwsIFF1ZXN0aW9uQ29tbWVudE1vZGVsLCBRdWVzdGlvbkRyb3Bkb3duTW9kZWwsIFF1ZXN0aW9uRmFjdG9yeSwgRWxlbWVudEZhY3RvcnksIFF1ZXN0aW9uRmlsZU1vZGVsLCBRdWVzdGlvbkh0bWxNb2RlbCwgUXVlc3Rpb25SYWRpb2dyb3VwTW9kZWwsIFF1ZXN0aW9uUmF0aW5nTW9kZWwsIFJlbmRlcmVkUmF0aW5nSXRlbSwgUXVlc3Rpb25FeHByZXNzaW9uTW9kZWwsIFF1ZXN0aW9uVGV4dEJhc2UsIENoYXJhY3RlckNvdW50ZXIsIFF1ZXN0aW9uVGV4dE1vZGVsLCBRdWVzdGlvbkJvb2xlYW5Nb2RlbCwgUXVlc3Rpb25JbWFnZVBpY2tlck1vZGVsLCBJbWFnZUl0ZW1WYWx1ZSwgUXVlc3Rpb25JbWFnZU1vZGVsLCBRdWVzdGlvblNpZ25hdHVyZVBhZE1vZGVsLCBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsLCBRdWVzdGlvblBhbmVsRHluYW1pY0l0ZW0sIFN1cnZleVRpbWVyLCBTdXJ2ZXlUaW1lck1vZGVsLCB0cnlOYXZpZ2F0ZVRvUGFnZSwgdHJ5Rm9jdXNQYWdlLCBjcmVhdGVUT0NMaXN0TW9kZWwsIGdldFRvY1Jvb3RDc3MsIFRPQ01vZGVsLCBTdXJ2ZXlQcm9ncmVzc01vZGVsLCBTdXJ2ZXlQcm9ncmVzc0J1dHRvbnNNb2RlbCwgU3VydmV5TW9kZWwsIFN1cnZleVRyaWdnZXIsIFN1cnZleVRyaWdnZXJDb21wbGV0ZSwgU3VydmV5VHJpZ2dlclNldFZhbHVlLCBTdXJ2ZXlUcmlnZ2VyVmlzaWJsZSwgU3VydmV5VHJpZ2dlckNvcHlWYWx1ZSwgU3VydmV5VHJpZ2dlclJ1bkV4cHJlc3Npb24sIFN1cnZleVRyaWdnZXJTa2lwLCBUcmlnZ2VyLCBQb3B1cFN1cnZleU1vZGVsLCBTdXJ2ZXlXaW5kb3dNb2RlbCwgVGV4dFByZVByb2Nlc3NvciwgTm90aWZpZXIsIENvdmVyLCBDb3ZlckNlbGwsIGR4U3VydmV5U2VydmljZSwgZW5nbGlzaFN0cmluZ3MsIHN1cnZleUxvY2FsaXphdGlvbiwgc3VydmV5U3RyaW5ncywgUXVlc3Rpb25DdXN0b21XaWRnZXQsIEN1c3RvbVdpZGdldENvbGxlY3Rpb24sIFF1ZXN0aW9uQ3VzdG9tTW9kZWwsIFF1ZXN0aW9uQ29tcG9zaXRlTW9kZWwsIENvbXBvbmVudFF1ZXN0aW9uSlNPTiwgQ29tcG9uZW50Q29sbGVjdGlvbiwgU3R5bGVzTWFuYWdlciwgTGlzdE1vZGVsLCBNdWx0aVNlbGVjdExpc3RNb2RlbCwgUG9wdXBNb2RlbCwgY3JlYXRlRGlhbG9nT3B0aW9ucywgUG9wdXBCYXNlVmlld01vZGVsLCBQb3B1cERyb3Bkb3duVmlld01vZGVsLCBQb3B1cE1vZGFsVmlld01vZGVsLCBjcmVhdGVQb3B1cFZpZXdNb2RlbCwgY3JlYXRlUG9wdXBNb2RhbFZpZXdNb2RlbCwgRHJvcGRvd25MaXN0TW9kZWwsIERyb3Bkb3duTXVsdGlTZWxlY3RMaXN0TW9kZWwsIFF1ZXN0aW9uQnV0dG9uR3JvdXBNb2RlbCwgQnV0dG9uR3JvdXBJdGVtTW9kZWwsIEJ1dHRvbkdyb3VwSXRlbVZhbHVlLCBJc01vYmlsZSwgSXNUb3VjaCwgX3NldElzVG91Y2gsIGNvbmZpcm1BY3Rpb24sIGNvbmZpcm1BY3Rpb25Bc3luYywgZGV0ZWN0SUVPckVkZ2UsIGRvS2V5MkNsaWNrVXAsIGRvS2V5MkNsaWNrRG93biwgZG9LZXkyQ2xpY2tCbHVyLCBsb2FkRmlsZUZyb21CYXNlNjQsIGluY3JlYXNlSGVpZ2h0QnlDb250ZW50LCBjcmVhdGVTdmcsIHNhbml0aXplRWRpdGFibGVDb250ZW50LCBDc3NDbGFzc0J1aWxkZXIsIHN1cnZleUNzcywgZGVmYXVsdFYyQ3NzLCBkZWZhdWx0VjJUaGVtZU5hbWUsIERyYWdEcm9wQ29yZSwgRHJhZ0Ryb3BDaG9pY2VzLCBEcmFnRHJvcFJhbmtpbmdTZWxlY3RUb1JhbmssIGRlZmF1bHRTdGFuZGFyZENzcywgbW9kZXJuQ3NzLCBTdmdJY29uUmVnaXN0cnksIFN2Z1JlZ2lzdHJ5LCBTdmdCdW5kbGVWaWV3TW9kZWwsIFJlbmRlcmVyRmFjdG9yeSwgUmVzcG9uc2l2aXR5TWFuYWdlciwgVmVydGljYWxSZXNwb25zaXZpdHlNYW5hZ2VyLCB1bndyYXAsIGdldE9yaWdpbmFsRXZlbnQsIGdldEVsZW1lbnQsIGNyZWF0ZURyb3Bkb3duQWN0aW9uTW9kZWwsIGNyZWF0ZURyb3Bkb3duQWN0aW9uTW9kZWxBZHZhbmNlZCwgZ2V0QWN0aW9uRHJvcGRvd25CdXR0b25UYXJnZXQsIEJhc2VBY3Rpb24sIEFjdGlvbiwgQWN0aW9uRHJvcGRvd25WaWV3TW9kZWwsIEFkYXB0aXZlQWN0aW9uQ29udGFpbmVyLCBkZWZhdWx0QWN0aW9uQmFyQ3NzLCBBY3Rpb25Db250YWluZXIsIERyYWdPckNsaWNrSGVscGVyLCBNb2RlbCwgYm9vdHN0cmFwVGhlbWVOYW1lLCBib290c3RyYXBUaGVtZUNvbG9ycywgYm9vdHN0cmFwVGhlbWVDc3NSdWxlcywgYm9vdHN0cmFwTWF0ZXJpYWxUaGVtZU5hbWUsIGJvb3RzdHJhcE1hdGVyaWFsVGhlbWVDb2xvcnMsIGJvb3RzdHJhcE1hdGVyaWFsVGhlbWVDc3NSdWxlcywgZGVmYXVsdEJvb3RzdHJhcENzcywgZGVmYXVsdEJvb3RzdHJhcE1hdGVyaWFsQ3NzLCBTdXJ2ZXksIEN1c3RvbVdpZGdldCwgU3VydmV5U3RyaW5nLCBTdXJ2ZXlTdHJpbmdWaWV3ZXIsIFN1cnZleVN0cmluZ0VkaXRvciwgU3VydmV5RWxlbWVudFZ1ZSwgU3VydmV5Um93RWxlbWVudCwgUG9wdXBTdXJ2ZXksIFN1cnZleVdpbmRvdywgUGFnZSwgUmFkaW9ncm91cCwgUmFkaW9ncm91cEl0ZW0sIE90aGVyQ2hvaWNlLCBPdGhlckNvbW1lbnQsIFJhdGluZywgUmF0aW5nRHJvcGRvd24sIENvbW1lbnQsIFJhbmtpbmcsIFJhbmtpbmdJdGVtLCBDaGVja2JveCwgQ2hlY2tib3hJdGVtLCBCdXR0b25Hcm91cCwgQnV0dG9uR3JvdXBJdGVtLCBRdWVzdGlvblRleHQsIFF1ZXN0aW9uVGV4dElucHV0LCBCb29sZWFuLCBCb29sZWFuU3dpdGNoLCBCb29sZWFuQ2hlY2tib3gsIEJvb2xlYW5SYWRpbywgQm9vbGVhblJhZGlvSXRlbSwgRW1wdHksIE11bHRpcGxlVGV4dCwgTXVsdGlwbGVUZXh0SXRlbSwgTWF0cml4LCBEcm9wZG93biwgRHJvcGRvd25TZWxlY3QsIFRhZ2JveCwgRmlsZSwgRmlsZVByZXZpZXcsIEZpbGVDbGVhbkJ1dHRvbiwgRmlsZVZpZGVvLCBGaWxlQ2hvb3NlQnV0dG9uLCBNYXRyaXhDZWxsLCBNYXRyaXhIZWFkZXJSZXF1aXJlZCwgTWF0cml4VGFibGUsIE1hdHJpeERyb3Bkb3duLCBNYXRyaXhEeW5hbWljLCBFcnJvcnMsIEh0bWwsIEV4cHJlc3Npb24sIEltYWdlUGlja2VyLCBJbWFnZVBpY2tlckl0ZW0sIFBhbmVsRHluYW1pYywgUGFuZWxEeW5hbWljUHJvZ3Jlc3MsIFBhbmVsRHluYW1pY1Byb2dyZXNzVjIsIFByb2dyZXNzLCBQcm9ncmVzc0J1dHRvbnMsIFByb2dyZXNzVG9jLCBUaW1lclBhbmVsLCBQYW5lbCwgRmxvd1BhbmVsLCBGbG93UGFuZWxFbGVtZW50LCBSb3csIEVsZW1lbnRIZWFkZXIsIFF1ZXN0aW9uSW1hZ2UsIFNpZ25hdHVyZVBhZCwgU3VydmV5SGVhZGVyLCBDdXN0b20sIENvbXBvc2l0ZSwgVGl0bGVFbGVtZW50LCBUaXRsZUNvbnRlbnQsIFRpdGxlQWN0aW9ucywgQWN0aW9uQmFyVmlld01vZGVsLCBTdmdJY29uLCBQb3B1cFBvaW50ZXIsIFBvcHVwQ29udGFpbmVyLCBQb3B1cCwgTGlzdCwgRHJvcGRvd25PcHRpb25JdGVtLCBEcm9wZG93bkNvbXBvbmVudCwgVGFnYm94RmlsdGVyQ29tcG9uZW50LCBUYWdib3hDb21wb25lbnQsIFRhZ2JveEl0ZW0sIFJhdGluZ0l0ZW0sIFJhdGluZ0l0ZW1TdGFyLCBSYXRpbmdJdGVtU21pbGV5LCBTdXJ2ZXlRdWVzdGlvbk1hdHJpeER5bmFtaWNSZW1vdmVCdXR0b24sIFN1cnZleVF1ZXN0aW9uTWF0cml4RGV0YWlsQnV0dG9uLCBTdXJ2ZXlRdWVzdGlvbk1hdHJpeER5bmFtaWNEcmFnRHJvcEljb24sIFBhbmVsRHluYW1pY0FkZEJ0biwgUGFuZWxEeW5hbWljTmV4dEJ0biwgUGFuZWxEeW5hbWljUHJldkJ0biwgUGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0LCBQYW5lbER5bmFtaWNSZW1vdmVCdXR0b24sIFN1cnZleU5hdmlnYXRpb25CdXR0b24sIFNrZWxldG9uLCBCcmFuZEluZm8sIE5vdGlmaWVyQ29tcG9uZW50LCBDb21wb25lbnRzQ29udGFpbmVyLCBDaGFyYWN0ZXJDb3VudGVyQ29tcG9uZW50LCBMb2FkaW5nSW5kaWNhdG9yQ29tcG9uZW50LCBDb3ZlckNlbGxWaWV3TW9kZWwsIENvdmVyVmlld01vZGVsICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2NvcmUgKi8gXCIuL3NyYy9lbnRyaWVzL2NvcmUudHNcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJWZXJzaW9uXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlZlcnNpb25cIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJSZWxlYXNlRGF0ZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJSZWxlYXNlRGF0ZVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImNoZWNrTGlicmFyeVZlcnNpb25cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiY2hlY2tMaWJyYXJ5VmVyc2lvblwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInNldExpY2Vuc2VLZXlcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic2V0TGljZW5zZUtleVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImhhc0xpY2Vuc2VcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiaGFzTGljZW5zZVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInNldHRpbmdzXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInNldHRpbmdzXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiSGVscGVyc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJIZWxwZXJzXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQW5zd2VyQ291bnRWYWxpZGF0b3JcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiQW5zd2VyQ291bnRWYWxpZGF0b3JcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJFbWFpbFZhbGlkYXRvclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJFbWFpbFZhbGlkYXRvclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIk51bWVyaWNWYWxpZGF0b3JcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiTnVtZXJpY1ZhbGlkYXRvclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlJlZ2V4VmFsaWRhdG9yXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlJlZ2V4VmFsaWRhdG9yXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiU3VydmV5VmFsaWRhdG9yXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlN1cnZleVZhbGlkYXRvclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlRleHRWYWxpZGF0b3JcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiVGV4dFZhbGlkYXRvclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlZhbGlkYXRvclJlc3VsdFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJWYWxpZGF0b3JSZXN1bHRcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJFeHByZXNzaW9uVmFsaWRhdG9yXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkV4cHJlc3Npb25WYWxpZGF0b3JcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJWYWxpZGF0b3JSdW5uZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiVmFsaWRhdG9yUnVubmVyXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiSXRlbVZhbHVlXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkl0ZW1WYWx1ZVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkJhc2VcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiQmFzZVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkV2ZW50XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkV2ZW50XCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiRXZlbnRCYXNlXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkV2ZW50QmFzZVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkFycmF5Q2hhbmdlc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJBcnJheUNoYW5nZXNcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJDb21wdXRlZFVwZGF0ZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiQ29tcHV0ZWRVcGRhdGVyXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiU3VydmV5RXJyb3JcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiU3VydmV5RXJyb3JcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJTdXJ2ZXlFbGVtZW50Q29yZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJTdXJ2ZXlFbGVtZW50Q29yZVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlN1cnZleUVsZW1lbnRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiU3VydmV5RWxlbWVudFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkRyYWdUeXBlT3Zlck1lRW51bVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJEcmFnVHlwZU92ZXJNZUVudW1cIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJDYWxjdWxhdGVkVmFsdWVcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiQ2FsY3VsYXRlZFZhbHVlXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQ3VzdG9tRXJyb3JcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiQ3VzdG9tRXJyb3JcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJBbnN3ZXJSZXF1aXJlZEVycm9yXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkFuc3dlclJlcXVpcmVkRXJyb3JcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJPbmVBbnN3ZXJSZXF1aXJlZEVycm9yXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIk9uZUFuc3dlclJlcXVpcmVkRXJyb3JcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJSZXF1cmVOdW1lcmljRXJyb3JcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiUmVxdXJlTnVtZXJpY0Vycm9yXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiRXhjZWVkU2l6ZUVycm9yXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkV4Y2VlZFNpemVFcnJvclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkxvY2FsaXphYmxlU3RyaW5nXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkxvY2FsaXphYmxlU3RyaW5nXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiTG9jYWxpemFibGVTdHJpbmdzXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkxvY2FsaXphYmxlU3RyaW5nc1wiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkh0bWxDb25kaXRpb25JdGVtXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkh0bWxDb25kaXRpb25JdGVtXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiVXJsQ29uZGl0aW9uSXRlbVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJVcmxDb25kaXRpb25JdGVtXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQ2hvaWNlc1Jlc3RmdWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiQ2hvaWNlc1Jlc3RmdWxcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJDaG9pY2VzUmVzdGZ1bGxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiQ2hvaWNlc1Jlc3RmdWxsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiRnVuY3Rpb25GYWN0b3J5XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkZ1bmN0aW9uRmFjdG9yeVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInJlZ2lzdGVyRnVuY3Rpb25cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVnaXN0ZXJGdW5jdGlvblwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkNvbmRpdGlvblJ1bm5lclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJDb25kaXRpb25SdW5uZXJcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJFeHByZXNzaW9uUnVubmVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkV4cHJlc3Npb25SdW5uZXJcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJFeHByZXNzaW9uRXhlY3V0b3JcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiRXhwcmVzc2lvbkV4ZWN1dG9yXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiT3BlcmFuZFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJPcGVyYW5kXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQ29uc3RcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiQ29uc3RcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJCaW5hcnlPcGVyYW5kXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkJpbmFyeU9wZXJhbmRcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJWYXJpYWJsZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJWYXJpYWJsZVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkZ1bmN0aW9uT3BlcmFuZFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJGdW5jdGlvbk9wZXJhbmRcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJBcnJheU9wZXJhbmRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiQXJyYXlPcGVyYW5kXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiVW5hcnlPcGVyYW5kXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlVuYXJ5T3BlcmFuZFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkNvbmRpdGlvbnNQYXJzZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiQ29uZGl0aW9uc1BhcnNlclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlByb2Nlc3NWYWx1ZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJQcm9jZXNzVmFsdWVcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJKc29uRXJyb3JcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiSnNvbkVycm9yXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiSnNvbkluY29ycmVjdFR5cGVFcnJvclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJKc29uSW5jb3JyZWN0VHlwZUVycm9yXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiSnNvbk1ldGFkYXRhXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkpzb25NZXRhZGF0YVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkpzb25NZXRhZGF0YUNsYXNzXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkpzb25NZXRhZGF0YUNsYXNzXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiSnNvbk1pc3NpbmdUeXBlRXJyb3JcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiSnNvbk1pc3NpbmdUeXBlRXJyb3JcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJKc29uTWlzc2luZ1R5cGVFcnJvckJhc2VcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiSnNvbk1pc3NpbmdUeXBlRXJyb3JCYXNlXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiSnNvbk9iamVjdFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJKc29uT2JqZWN0XCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiSnNvbk9iamVjdFByb3BlcnR5XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkpzb25PYmplY3RQcm9wZXJ0eVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkpzb25SZXF1aXJlZFByb3BlcnR5RXJyb3JcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiSnNvblJlcXVpcmVkUHJvcGVydHlFcnJvclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkpzb25Vbmtub3duUHJvcGVydHlFcnJvclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJKc29uVW5rbm93blByb3BlcnR5RXJyb3JcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJTZXJpYWxpemVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlNlcmlhbGl6ZXJcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJwcm9wZXJ0eVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJwcm9wZXJ0eVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInByb3BlcnR5QXJyYXlcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicHJvcGVydHlBcnJheVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIk1hdHJpeERyb3Bkb3duQ2VsbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJNYXRyaXhEcm9wZG93bkNlbGxcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2VcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIk1hdHJpeERyb3Bkb3duQ29sdW1uXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIk1hdHJpeERyb3Bkb3duQ29sdW1uXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwibWF0cml4RHJvcGRvd25Db2x1bW5UeXBlc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJtYXRyaXhEcm9wZG93bkNvbHVtblR5cGVzXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkQ2VsbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRDZWxsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkUm93XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFJvd1wiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFRhYmxlXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFRhYmxlXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiTWF0cml4RHJvcGRvd25Sb3dNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJNYXRyaXhEcm9wZG93blJvd01vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIk1hdHJpeER5bmFtaWNSb3dNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJNYXRyaXhEeW5hbWljUm93TW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIk1hdHJpeFJvd01vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIk1hdHJpeFJvd01vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiTWF0cml4Q2VsbHNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiTWF0cml4Q2VsbHNcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJRdWVzdGlvbk1hdHJpeE1vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlF1ZXN0aW9uTWF0cml4TW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJRdWVzdGlvbk1hdHJpeEJhc2VNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJRdWVzdGlvbk1hdHJpeEJhc2VNb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIk11bHRpcGxlVGV4dEl0ZW1Nb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJNdWx0aXBsZVRleHRJdGVtTW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJNdWx0aXBsZVRleHRDZWxsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIk11bHRpcGxlVGV4dENlbGxcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJNdWx0aXBsZVRleHRFcnJvckNlbGxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiTXVsdGlwbGVUZXh0RXJyb3JDZWxsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiTXV0bGlwbGVUZXh0RXJyb3JSb3dcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiTXV0bGlwbGVUZXh0RXJyb3JSb3dcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJNdXRsaXBsZVRleHRSb3dcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiTXV0bGlwbGVUZXh0Um93XCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJRdWVzdGlvbk11bHRpcGxlVGV4dE1vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiTXVsdGlwbGVUZXh0RWRpdG9yTW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiTXVsdGlwbGVUZXh0RWRpdG9yTW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJQYW5lbE1vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlBhbmVsTW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJQYW5lbE1vZGVsQmFzZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJQYW5lbE1vZGVsQmFzZVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlF1ZXN0aW9uUm93TW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiUXVlc3Rpb25Sb3dNb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkZsb3dQYW5lbE1vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkZsb3dQYW5lbE1vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUGFnZU1vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlBhZ2VNb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkRlZmF1bHRUaXRsZU1vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkRlZmF1bHRUaXRsZU1vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUXVlc3Rpb25cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiUXVlc3Rpb25cIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJRdWVzdGlvbk5vblZhbHVlXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlF1ZXN0aW9uTm9uVmFsdWVcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJRdWVzdGlvbkVtcHR5TW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiUXVlc3Rpb25FbXB0eU1vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUXVlc3Rpb25DaGVja2JveEJhc2VcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiUXVlc3Rpb25DaGVja2JveEJhc2VcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJRdWVzdGlvblNlbGVjdEJhc2VcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiUXVlc3Rpb25TZWxlY3RCYXNlXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUXVlc3Rpb25DaGVja2JveE1vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlF1ZXN0aW9uQ2hlY2tib3hNb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlF1ZXN0aW9uVGFnYm94TW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiUXVlc3Rpb25UYWdib3hNb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlF1ZXN0aW9uUmFua2luZ01vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlF1ZXN0aW9uUmFua2luZ01vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUXVlc3Rpb25Db21tZW50TW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiUXVlc3Rpb25Db21tZW50TW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJRdWVzdGlvbkRyb3Bkb3duTW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiUXVlc3Rpb25Ecm9wZG93bk1vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUXVlc3Rpb25GYWN0b3J5XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlF1ZXN0aW9uRmFjdG9yeVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkVsZW1lbnRGYWN0b3J5XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkVsZW1lbnRGYWN0b3J5XCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUXVlc3Rpb25GaWxlTW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiUXVlc3Rpb25GaWxlTW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJRdWVzdGlvbkh0bWxNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJRdWVzdGlvbkh0bWxNb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlF1ZXN0aW9uUmFkaW9ncm91cE1vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlF1ZXN0aW9uUmFkaW9ncm91cE1vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUXVlc3Rpb25SYXRpbmdNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJRdWVzdGlvblJhdGluZ01vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUmVuZGVyZWRSYXRpbmdJdGVtXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlJlbmRlcmVkUmF0aW5nSXRlbVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlF1ZXN0aW9uRXhwcmVzc2lvbk1vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlF1ZXN0aW9uRXhwcmVzc2lvbk1vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUXVlc3Rpb25UZXh0QmFzZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJRdWVzdGlvblRleHRCYXNlXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQ2hhcmFjdGVyQ291bnRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJDaGFyYWN0ZXJDb3VudGVyXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUXVlc3Rpb25UZXh0TW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiUXVlc3Rpb25UZXh0TW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJRdWVzdGlvbkJvb2xlYW5Nb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJRdWVzdGlvbkJvb2xlYW5Nb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlF1ZXN0aW9uSW1hZ2VQaWNrZXJNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJRdWVzdGlvbkltYWdlUGlja2VyTW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJJbWFnZUl0ZW1WYWx1ZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJJbWFnZUl0ZW1WYWx1ZVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlF1ZXN0aW9uSW1hZ2VNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJRdWVzdGlvbkltYWdlTW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJRdWVzdGlvblNpZ25hdHVyZVBhZE1vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlF1ZXN0aW9uU2lnbmF0dXJlUGFkTW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJRdWVzdGlvblBhbmVsRHluYW1pY0l0ZW1cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiUXVlc3Rpb25QYW5lbER5bmFtaWNJdGVtXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiU3VydmV5VGltZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiU3VydmV5VGltZXJcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJTdXJ2ZXlUaW1lck1vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlN1cnZleVRpbWVyTW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJ0cnlOYXZpZ2F0ZVRvUGFnZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJ0cnlOYXZpZ2F0ZVRvUGFnZVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInRyeUZvY3VzUGFnZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJ0cnlGb2N1c1BhZ2VcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJjcmVhdGVUT0NMaXN0TW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiY3JlYXRlVE9DTGlzdE1vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiZ2V0VG9jUm9vdENzc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJnZXRUb2NSb290Q3NzXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiVE9DTW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiVE9DTW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJTdXJ2ZXlQcm9ncmVzc01vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlN1cnZleVByb2dyZXNzTW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJTdXJ2ZXlQcm9ncmVzc0J1dHRvbnNNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJTdXJ2ZXlQcm9ncmVzc0J1dHRvbnNNb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlN1cnZleU1vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlN1cnZleU1vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiU3VydmV5VHJpZ2dlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJTdXJ2ZXlUcmlnZ2VyXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiU3VydmV5VHJpZ2dlckNvbXBsZXRlXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlN1cnZleVRyaWdnZXJDb21wbGV0ZVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlN1cnZleVRyaWdnZXJTZXRWYWx1ZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJTdXJ2ZXlUcmlnZ2VyU2V0VmFsdWVcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJTdXJ2ZXlUcmlnZ2VyVmlzaWJsZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJTdXJ2ZXlUcmlnZ2VyVmlzaWJsZVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlN1cnZleVRyaWdnZXJDb3B5VmFsdWVcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiU3VydmV5VHJpZ2dlckNvcHlWYWx1ZVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlN1cnZleVRyaWdnZXJSdW5FeHByZXNzaW9uXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlN1cnZleVRyaWdnZXJSdW5FeHByZXNzaW9uXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiU3VydmV5VHJpZ2dlclNraXBcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiU3VydmV5VHJpZ2dlclNraXBcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJUcmlnZ2VyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlRyaWdnZXJcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJQb3B1cFN1cnZleU1vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlBvcHVwU3VydmV5TW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJTdXJ2ZXlXaW5kb3dNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJTdXJ2ZXlXaW5kb3dNb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlRleHRQcmVQcm9jZXNzb3JcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiVGV4dFByZVByb2Nlc3NvclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIk5vdGlmaWVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIk5vdGlmaWVyXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQ292ZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiQ292ZXJcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJDb3ZlckNlbGxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiQ292ZXJDZWxsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiZHhTdXJ2ZXlTZXJ2aWNlXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcImR4U3VydmV5U2VydmljZVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImVuZ2xpc2hTdHJpbmdzXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcImVuZ2xpc2hTdHJpbmdzXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic3VydmV5TG9jYWxpemF0aW9uXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN1cnZleUxvY2FsaXphdGlvblwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN1cnZleVN0cmluZ3NcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3VydmV5U3RyaW5nc1wiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlF1ZXN0aW9uQ3VzdG9tV2lkZ2V0XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlF1ZXN0aW9uQ3VzdG9tV2lkZ2V0XCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQ3VzdG9tV2lkZ2V0Q29sbGVjdGlvblwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJDdXN0b21XaWRnZXRDb2xsZWN0aW9uXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUXVlc3Rpb25DdXN0b21Nb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJRdWVzdGlvbkN1c3RvbU1vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUXVlc3Rpb25Db21wb3NpdGVNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJRdWVzdGlvbkNvbXBvc2l0ZU1vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQ29tcG9uZW50UXVlc3Rpb25KU09OXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkNvbXBvbmVudFF1ZXN0aW9uSlNPTlwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkNvbXBvbmVudENvbGxlY3Rpb25cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiQ29tcG9uZW50Q29sbGVjdGlvblwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlN0eWxlc01hbmFnZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiU3R5bGVzTWFuYWdlclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkxpc3RNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJMaXN0TW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJNdWx0aVNlbGVjdExpc3RNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJNdWx0aVNlbGVjdExpc3RNb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlBvcHVwTW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiUG9wdXBNb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImNyZWF0ZURpYWxvZ09wdGlvbnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiY3JlYXRlRGlhbG9nT3B0aW9uc1wiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlBvcHVwQmFzZVZpZXdNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJQb3B1cEJhc2VWaWV3TW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJQb3B1cERyb3Bkb3duVmlld01vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlBvcHVwRHJvcGRvd25WaWV3TW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJQb3B1cE1vZGFsVmlld01vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlBvcHVwTW9kYWxWaWV3TW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJjcmVhdGVQb3B1cFZpZXdNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJjcmVhdGVQb3B1cFZpZXdNb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImNyZWF0ZVBvcHVwTW9kYWxWaWV3TW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiY3JlYXRlUG9wdXBNb2RhbFZpZXdNb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkRyb3Bkb3duTGlzdE1vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkRyb3Bkb3duTGlzdE1vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiRHJvcGRvd25NdWx0aVNlbGVjdExpc3RNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJEcm9wZG93bk11bHRpU2VsZWN0TGlzdE1vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUXVlc3Rpb25CdXR0b25Hcm91cE1vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlF1ZXN0aW9uQnV0dG9uR3JvdXBNb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkJ1dHRvbkdyb3VwSXRlbU1vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkJ1dHRvbkdyb3VwSXRlbU1vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQnV0dG9uR3JvdXBJdGVtVmFsdWVcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiQnV0dG9uR3JvdXBJdGVtVmFsdWVcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJJc01vYmlsZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJJc01vYmlsZVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIklzVG91Y2hcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiSXNUb3VjaFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIl9zZXRJc1RvdWNoXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIl9zZXRJc1RvdWNoXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiY29uZmlybUFjdGlvblwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJjb25maXJtQWN0aW9uXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiY29uZmlybUFjdGlvbkFzeW5jXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcImNvbmZpcm1BY3Rpb25Bc3luY1wiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImRldGVjdElFT3JFZGdlXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcImRldGVjdElFT3JFZGdlXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiZG9LZXkyQ2xpY2tVcFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJkb0tleTJDbGlja1VwXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiZG9LZXkyQ2xpY2tEb3duXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcImRvS2V5MkNsaWNrRG93blwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImRvS2V5MkNsaWNrQmx1clwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJkb0tleTJDbGlja0JsdXJcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJsb2FkRmlsZUZyb21CYXNlNjRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wibG9hZEZpbGVGcm9tQmFzZTY0XCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiaW5jcmVhc2VIZWlnaHRCeUNvbnRlbnRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiaW5jcmVhc2VIZWlnaHRCeUNvbnRlbnRcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJjcmVhdGVTdmdcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiY3JlYXRlU3ZnXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic2FuaXRpemVFZGl0YWJsZUNvbnRlbnRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic2FuaXRpemVFZGl0YWJsZUNvbnRlbnRcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJDc3NDbGFzc0J1aWxkZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiQ3NzQ2xhc3NCdWlsZGVyXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic3VydmV5Q3NzXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN1cnZleUNzc1wiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImRlZmF1bHRWMkNzc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJkZWZhdWx0VjJDc3NcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJkZWZhdWx0VjJUaGVtZU5hbWVcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiZGVmYXVsdFYyVGhlbWVOYW1lXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiRHJhZ0Ryb3BDb3JlXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkRyYWdEcm9wQ29yZVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkRyYWdEcm9wQ2hvaWNlc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJEcmFnRHJvcENob2ljZXNcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJEcmFnRHJvcFJhbmtpbmdTZWxlY3RUb1JhbmtcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiRHJhZ0Ryb3BSYW5raW5nU2VsZWN0VG9SYW5rXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiZGVmYXVsdFN0YW5kYXJkQ3NzXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcImRlZmF1bHRTdGFuZGFyZENzc1wiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIm1vZGVybkNzc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJtb2Rlcm5Dc3NcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJTdmdJY29uUmVnaXN0cnlcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiU3ZnSWNvblJlZ2lzdHJ5XCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiU3ZnUmVnaXN0cnlcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiU3ZnUmVnaXN0cnlcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJTdmdCdW5kbGVWaWV3TW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiU3ZnQnVuZGxlVmlld01vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUmVuZGVyZXJGYWN0b3J5XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlJlbmRlcmVyRmFjdG9yeVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlJlc3BvbnNpdml0eU1hbmFnZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiUmVzcG9uc2l2aXR5TWFuYWdlclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlZlcnRpY2FsUmVzcG9uc2l2aXR5TWFuYWdlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJWZXJ0aWNhbFJlc3BvbnNpdml0eU1hbmFnZXJcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJ1bndyYXBcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1widW53cmFwXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiZ2V0T3JpZ2luYWxFdmVudFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJnZXRPcmlnaW5hbEV2ZW50XCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiZ2V0RWxlbWVudFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJnZXRFbGVtZW50XCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiY3JlYXRlRHJvcGRvd25BY3Rpb25Nb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJjcmVhdGVEcm9wZG93bkFjdGlvbk1vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiY3JlYXRlRHJvcGRvd25BY3Rpb25Nb2RlbEFkdmFuY2VkXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcImNyZWF0ZURyb3Bkb3duQWN0aW9uTW9kZWxBZHZhbmNlZFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImdldEFjdGlvbkRyb3Bkb3duQnV0dG9uVGFyZ2V0XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcImdldEFjdGlvbkRyb3Bkb3duQnV0dG9uVGFyZ2V0XCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQmFzZUFjdGlvblwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJCYXNlQWN0aW9uXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQWN0aW9uXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkFjdGlvblwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkFjdGlvbkRyb3Bkb3duVmlld01vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkFjdGlvbkRyb3Bkb3duVmlld01vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQWRhcHRpdmVBY3Rpb25Db250YWluZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiQWRhcHRpdmVBY3Rpb25Db250YWluZXJcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJkZWZhdWx0QWN0aW9uQmFyQ3NzXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcImRlZmF1bHRBY3Rpb25CYXJDc3NcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJBY3Rpb25Db250YWluZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiQWN0aW9uQ29udGFpbmVyXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiRHJhZ09yQ2xpY2tIZWxwZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiRHJhZ09yQ2xpY2tIZWxwZXJcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJNb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcGx1Z2luc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9wbHVnaW5zICovIFwiLi9zcmMvZW50cmllcy9wbHVnaW5zLnRzXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiYm9vdHN0cmFwVGhlbWVOYW1lXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3BsdWdpbnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcImJvb3RzdHJhcFRoZW1lTmFtZVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImJvb3RzdHJhcFRoZW1lQ29sb3JzXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3BsdWdpbnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcImJvb3RzdHJhcFRoZW1lQ29sb3JzXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiYm9vdHN0cmFwVGhlbWVDc3NSdWxlc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9wbHVnaW5zX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJib290c3RyYXBUaGVtZUNzc1J1bGVzXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiYm9vdHN0cmFwTWF0ZXJpYWxUaGVtZU5hbWVcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcGx1Z2luc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiYm9vdHN0cmFwTWF0ZXJpYWxUaGVtZU5hbWVcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJib290c3RyYXBNYXRlcmlhbFRoZW1lQ29sb3JzXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3BsdWdpbnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcImJvb3RzdHJhcE1hdGVyaWFsVGhlbWVDb2xvcnNcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJib290c3RyYXBNYXRlcmlhbFRoZW1lQ3NzUnVsZXNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcGx1Z2luc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiYm9vdHN0cmFwTWF0ZXJpYWxUaGVtZUNzc1J1bGVzXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiZGVmYXVsdEJvb3RzdHJhcENzc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9wbHVnaW5zX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJkZWZhdWx0Qm9vdHN0cmFwQ3NzXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiZGVmYXVsdEJvb3RzdHJhcE1hdGVyaWFsQ3NzXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3BsdWdpbnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcImRlZmF1bHRCb290c3RyYXBNYXRlcmlhbENzc1wiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfY2h1bmtzX2xvY2FsaXphdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9jaHVua3MvbG9jYWxpemF0aW9uICovIFwiLi9zcmMvZW50cmllcy9jaHVua3MvbG9jYWxpemF0aW9uLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF92dWVfdWlfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vdnVlLXVpLW1vZGVsICovIFwiLi9zcmMvZW50cmllcy92dWUtdWktbW9kZWwudHNcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJTdXJ2ZXlcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX3VpX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJTdXJ2ZXlcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJDdXN0b21XaWRnZXRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX3VpX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJDdXN0b21XaWRnZXRcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJTdXJ2ZXlTdHJpbmdcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX3VpX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJTdXJ2ZXlTdHJpbmdcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJTdXJ2ZXlTdHJpbmdWaWV3ZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX3VpX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJTdXJ2ZXlTdHJpbmdWaWV3ZXJcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJTdXJ2ZXlTdHJpbmdFZGl0b3JcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX3VpX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJTdXJ2ZXlTdHJpbmdFZGl0b3JcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJTdXJ2ZXlFbGVtZW50VnVlXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Z1ZV91aV9tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiU3VydmV5RWxlbWVudFZ1ZVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlN1cnZleVJvd0VsZW1lbnRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX3VpX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJTdXJ2ZXlSb3dFbGVtZW50XCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUG9wdXBTdXJ2ZXlcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX3VpX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJQb3B1cFN1cnZleVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlN1cnZleVdpbmRvd1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92dWVfdWlfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcIlN1cnZleVdpbmRvd1wiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlBhZ2VcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX3VpX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJQYWdlXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUmFkaW9ncm91cFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92dWVfdWlfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcIlJhZGlvZ3JvdXBcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJSYWRpb2dyb3VwSXRlbVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92dWVfdWlfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcIlJhZGlvZ3JvdXBJdGVtXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiT3RoZXJDaG9pY2VcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX3VpX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJPdGhlckNob2ljZVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIk90aGVyQ29tbWVudFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92dWVfdWlfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcIk90aGVyQ29tbWVudFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlJhdGluZ1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92dWVfdWlfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcIlJhdGluZ1wiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlJhdGluZ0Ryb3Bkb3duXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Z1ZV91aV9tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiUmF0aW5nRHJvcGRvd25cIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJDb21tZW50XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Z1ZV91aV9tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiQ29tbWVudFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlJhbmtpbmdcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX3VpX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJSYW5raW5nXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUmFua2luZ0l0ZW1cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX3VpX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJSYW5raW5nSXRlbVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkNoZWNrYm94XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Z1ZV91aV9tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiQ2hlY2tib3hcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJDaGVja2JveEl0ZW1cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX3VpX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJDaGVja2JveEl0ZW1cIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJCdXR0b25Hcm91cFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92dWVfdWlfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcIkJ1dHRvbkdyb3VwXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQnV0dG9uR3JvdXBJdGVtXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Z1ZV91aV9tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiQnV0dG9uR3JvdXBJdGVtXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUXVlc3Rpb25UZXh0XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Z1ZV91aV9tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiUXVlc3Rpb25UZXh0XCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUXVlc3Rpb25UZXh0SW5wdXRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX3VpX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJRdWVzdGlvblRleHRJbnB1dFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkJvb2xlYW5cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX3VpX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJCb29sZWFuXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQm9vbGVhblN3aXRjaFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92dWVfdWlfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcIkJvb2xlYW5Td2l0Y2hcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJCb29sZWFuQ2hlY2tib3hcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX3VpX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJCb29sZWFuQ2hlY2tib3hcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJCb29sZWFuUmFkaW9cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX3VpX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJCb29sZWFuUmFkaW9cIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJCb29sZWFuUmFkaW9JdGVtXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Z1ZV91aV9tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiQm9vbGVhblJhZGlvSXRlbVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkVtcHR5XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Z1ZV91aV9tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiRW1wdHlcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJNdWx0aXBsZVRleHRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX3VpX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJNdWx0aXBsZVRleHRcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJNdWx0aXBsZVRleHRJdGVtXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Z1ZV91aV9tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiTXVsdGlwbGVUZXh0SXRlbVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIk1hdHJpeFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92dWVfdWlfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcIk1hdHJpeFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkRyb3Bkb3duXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Z1ZV91aV9tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiRHJvcGRvd25cIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJEcm9wZG93blNlbGVjdFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92dWVfdWlfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcIkRyb3Bkb3duU2VsZWN0XCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiVGFnYm94XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Z1ZV91aV9tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiVGFnYm94XCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiRmlsZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92dWVfdWlfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcIkZpbGVcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJGaWxlUHJldmlld1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92dWVfdWlfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcIkZpbGVQcmV2aWV3XCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiRmlsZUNsZWFuQnV0dG9uXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Z1ZV91aV9tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiRmlsZUNsZWFuQnV0dG9uXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiRmlsZVZpZGVvXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Z1ZV91aV9tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiRmlsZVZpZGVvXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiRmlsZUNob29zZUJ1dHRvblwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92dWVfdWlfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcIkZpbGVDaG9vc2VCdXR0b25cIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJNYXRyaXhDZWxsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Z1ZV91aV9tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiTWF0cml4Q2VsbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIk1hdHJpeEhlYWRlclJlcXVpcmVkXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Z1ZV91aV9tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiTWF0cml4SGVhZGVyUmVxdWlyZWRcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJNYXRyaXhUYWJsZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92dWVfdWlfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcIk1hdHJpeFRhYmxlXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiTWF0cml4RHJvcGRvd25cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX3VpX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJNYXRyaXhEcm9wZG93blwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIk1hdHJpeER5bmFtaWNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX3VpX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJNYXRyaXhEeW5hbWljXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiRXJyb3JzXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Z1ZV91aV9tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiRXJyb3JzXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiSHRtbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92dWVfdWlfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcIkh0bWxcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJFeHByZXNzaW9uXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Z1ZV91aV9tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiRXhwcmVzc2lvblwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkltYWdlUGlja2VyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Z1ZV91aV9tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiSW1hZ2VQaWNrZXJcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJJbWFnZVBpY2tlckl0ZW1cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX3VpX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJJbWFnZVBpY2tlckl0ZW1cIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJQYW5lbER5bmFtaWNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX3VpX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJQYW5lbER5bmFtaWNcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJQYW5lbER5bmFtaWNQcm9ncmVzc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92dWVfdWlfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcIlBhbmVsRHluYW1pY1Byb2dyZXNzXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUGFuZWxEeW5hbWljUHJvZ3Jlc3NWMlwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92dWVfdWlfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcIlBhbmVsRHluYW1pY1Byb2dyZXNzVjJcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJQcm9ncmVzc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92dWVfdWlfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcIlByb2dyZXNzXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUHJvZ3Jlc3NCdXR0b25zXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Z1ZV91aV9tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiUHJvZ3Jlc3NCdXR0b25zXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUHJvZ3Jlc3NUb2NcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX3VpX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJQcm9ncmVzc1RvY1wiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlRpbWVyUGFuZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX3VpX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJUaW1lclBhbmVsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUGFuZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX3VpX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJQYW5lbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkZsb3dQYW5lbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92dWVfdWlfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcIkZsb3dQYW5lbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkZsb3dQYW5lbEVsZW1lbnRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX3VpX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJGbG93UGFuZWxFbGVtZW50XCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUm93XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Z1ZV91aV9tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiUm93XCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiRWxlbWVudEhlYWRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92dWVfdWlfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcIkVsZW1lbnRIZWFkZXJcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJRdWVzdGlvbkltYWdlXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Z1ZV91aV9tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiUXVlc3Rpb25JbWFnZVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlNpZ25hdHVyZVBhZFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92dWVfdWlfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcIlNpZ25hdHVyZVBhZFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlN1cnZleUhlYWRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92dWVfdWlfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcIlN1cnZleUhlYWRlclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkN1c3RvbVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92dWVfdWlfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcIkN1c3RvbVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkNvbXBvc2l0ZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92dWVfdWlfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcIkNvbXBvc2l0ZVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlRpdGxlRWxlbWVudFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92dWVfdWlfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcIlRpdGxlRWxlbWVudFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlRpdGxlQ29udGVudFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92dWVfdWlfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcIlRpdGxlQ29udGVudFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlRpdGxlQWN0aW9uc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92dWVfdWlfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcIlRpdGxlQWN0aW9uc1wiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkFjdGlvbkJhclZpZXdNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92dWVfdWlfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcIkFjdGlvbkJhclZpZXdNb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlN2Z0ljb25cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX3VpX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJTdmdJY29uXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUG9wdXBQb2ludGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Z1ZV91aV9tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiUG9wdXBQb2ludGVyXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUG9wdXBDb250YWluZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX3VpX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJQb3B1cENvbnRhaW5lclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlBvcHVwXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Z1ZV91aV9tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiUG9wdXBcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJMaXN0XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Z1ZV91aV9tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiTGlzdFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkRyb3Bkb3duT3B0aW9uSXRlbVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92dWVfdWlfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcIkRyb3Bkb3duT3B0aW9uSXRlbVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkRyb3Bkb3duQ29tcG9uZW50XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Z1ZV91aV9tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiRHJvcGRvd25Db21wb25lbnRcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJUYWdib3hGaWx0ZXJDb21wb25lbnRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX3VpX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJUYWdib3hGaWx0ZXJDb21wb25lbnRcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJUYWdib3hDb21wb25lbnRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX3VpX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJUYWdib3hDb21wb25lbnRcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJUYWdib3hJdGVtXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Z1ZV91aV9tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiVGFnYm94SXRlbVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlJhdGluZ0l0ZW1cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX3VpX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJSYXRpbmdJdGVtXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUmF0aW5nSXRlbVN0YXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX3VpX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJSYXRpbmdJdGVtU3RhclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlJhdGluZ0l0ZW1TbWlsZXlcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX3VpX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJSYXRpbmdJdGVtU21pbGV5XCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiU3VydmV5UXVlc3Rpb25NYXRyaXhEeW5hbWljUmVtb3ZlQnV0dG9uXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Z1ZV91aV9tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiU3VydmV5UXVlc3Rpb25NYXRyaXhEeW5hbWljUmVtb3ZlQnV0dG9uXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiU3VydmV5UXVlc3Rpb25NYXRyaXhEZXRhaWxCdXR0b25cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX3VpX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJTdXJ2ZXlRdWVzdGlvbk1hdHJpeERldGFpbEJ1dHRvblwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlN1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pY0RyYWdEcm9wSWNvblwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92dWVfdWlfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcIlN1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pY0RyYWdEcm9wSWNvblwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlBhbmVsRHluYW1pY0FkZEJ0blwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92dWVfdWlfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcIlBhbmVsRHluYW1pY0FkZEJ0blwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlBhbmVsRHluYW1pY05leHRCdG5cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX3VpX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJQYW5lbER5bmFtaWNOZXh0QnRuXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUGFuZWxEeW5hbWljUHJldkJ0blwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92dWVfdWlfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcIlBhbmVsRHluYW1pY1ByZXZCdG5cIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJQYW5lbER5bmFtaWNQcm9ncmVzc1RleHRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX3VpX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJQYW5lbER5bmFtaWNQcm9ncmVzc1RleHRcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJQYW5lbER5bmFtaWNSZW1vdmVCdXR0b25cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX3VpX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJQYW5lbER5bmFtaWNSZW1vdmVCdXR0b25cIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJTdXJ2ZXlOYXZpZ2F0aW9uQnV0dG9uXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Z1ZV91aV9tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiU3VydmV5TmF2aWdhdGlvbkJ1dHRvblwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlNrZWxldG9uXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Z1ZV91aV9tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiU2tlbGV0b25cIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJCcmFuZEluZm9cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX3VpX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJCcmFuZEluZm9cIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJOb3RpZmllckNvbXBvbmVudFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92dWVfdWlfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcIk5vdGlmaWVyQ29tcG9uZW50XCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQ29tcG9uZW50c0NvbnRhaW5lclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92dWVfdWlfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcIkNvbXBvbmVudHNDb250YWluZXJcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJDaGFyYWN0ZXJDb3VudGVyQ29tcG9uZW50XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Z1ZV91aV9tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiQ2hhcmFjdGVyQ291bnRlckNvbXBvbmVudFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkxvYWRpbmdJbmRpY2F0b3JDb21wb25lbnRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX3VpX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJMb2FkaW5nSW5kaWNhdG9yQ29tcG9uZW50XCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQ292ZXJDZWxsVmlld01vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Z1ZV91aV9tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiQ292ZXJDZWxsVmlld01vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQ292ZXJWaWV3TW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnVlX3VpX21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJDb3ZlclZpZXdNb2RlbFwiXTsgfSk7XG5cblxuLy8gdGhlbWVzIHNldHRpbmdzXG5cbi8vIGxvY2FsaXphdGlvblxuXG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9lcnJvci50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9lcnJvci50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBBbnN3ZXJSZXF1aXJlZEVycm9yLCBPbmVBbnN3ZXJSZXF1aXJlZEVycm9yLCBSZXF1cmVOdW1lcmljRXJyb3IsIEV4Y2VlZFNpemVFcnJvciwgV2ViUmVxdWVzdEVycm9yLCBXZWJSZXF1ZXN0RW1wdHlFcnJvciwgT3RoZXJFbXB0eUVycm9yLCBVcGxvYWRpbmdGaWxlRXJyb3IsIFJlcXVpcmVkSW5BbGxSb3dzRXJyb3IsIE1pblJvd0NvdW50RXJyb3IsIEtleUR1cGxpY2F0aW9uRXJyb3IsIEN1c3RvbUVycm9yICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkFuc3dlclJlcXVpcmVkRXJyb3JcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBBbnN3ZXJSZXF1aXJlZEVycm9yOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJPbmVBbnN3ZXJSZXF1aXJlZEVycm9yXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gT25lQW5zd2VyUmVxdWlyZWRFcnJvcjsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUmVxdXJlTnVtZXJpY0Vycm9yXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUmVxdXJlTnVtZXJpY0Vycm9yOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJFeGNlZWRTaXplRXJyb3JcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBFeGNlZWRTaXplRXJyb3I7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIldlYlJlcXVlc3RFcnJvclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFdlYlJlcXVlc3RFcnJvcjsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiV2ViUmVxdWVzdEVtcHR5RXJyb3JcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBXZWJSZXF1ZXN0RW1wdHlFcnJvcjsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiT3RoZXJFbXB0eUVycm9yXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gT3RoZXJFbXB0eUVycm9yOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJVcGxvYWRpbmdGaWxlRXJyb3JcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBVcGxvYWRpbmdGaWxlRXJyb3I7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlJlcXVpcmVkSW5BbGxSb3dzRXJyb3JcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBSZXF1aXJlZEluQWxsUm93c0Vycm9yOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJNaW5Sb3dDb3VudEVycm9yXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gTWluUm93Q291bnRFcnJvcjsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiS2V5RHVwbGljYXRpb25FcnJvclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEtleUR1cGxpY2F0aW9uRXJyb3I7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkN1c3RvbUVycm9yXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQ3VzdG9tRXJyb3I7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zdXJ2ZXlTdHJpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3N1cnZleVN0cmluZ3MgKi8gXCIuL3NyYy9zdXJ2ZXlTdHJpbmdzLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zdXJ2ZXlfZXJyb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vc3VydmV5LWVycm9yICovIFwiLi9zcmMvc3VydmV5LWVycm9yLnRzXCIpO1xudmFyIF9fZXh0ZW5kcyA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG5cblxudmFyIEFuc3dlclJlcXVpcmVkRXJyb3IgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEFuc3dlclJlcXVpcmVkRXJyb3IsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQW5zd2VyUmVxdWlyZWRFcnJvcih0ZXh0LCBlcnJvck93bmVyKSB7XG4gICAgICAgIGlmICh0ZXh0ID09PSB2b2lkIDApIHsgdGV4dCA9IG51bGw7IH1cbiAgICAgICAgaWYgKGVycm9yT3duZXIgPT09IHZvaWQgMCkgeyBlcnJvck93bmVyID0gbnVsbDsgfVxuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCB0ZXh0LCBlcnJvck93bmVyKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy50ZXh0ID0gdGV4dDtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBBbnN3ZXJSZXF1aXJlZEVycm9yLnByb3RvdHlwZS5nZXRFcnJvclR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBcInJlcXVpcmVkXCI7XG4gICAgfTtcbiAgICBBbnN3ZXJSZXF1aXJlZEVycm9yLnByb3RvdHlwZS5nZXREZWZhdWx0VGV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemF0aW9uU3RyaW5nKFwicmVxdWlyZWRFcnJvclwiKTtcbiAgICB9O1xuICAgIHJldHVybiBBbnN3ZXJSZXF1aXJlZEVycm9yO1xufShfc3VydmV5X2Vycm9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJTdXJ2ZXlFcnJvclwiXSkpO1xuXG52YXIgT25lQW5zd2VyUmVxdWlyZWRFcnJvciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoT25lQW5zd2VyUmVxdWlyZWRFcnJvciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBPbmVBbnN3ZXJSZXF1aXJlZEVycm9yKHRleHQsIGVycm9yT3duZXIpIHtcbiAgICAgICAgaWYgKHRleHQgPT09IHZvaWQgMCkgeyB0ZXh0ID0gbnVsbDsgfVxuICAgICAgICBpZiAoZXJyb3JPd25lciA9PT0gdm9pZCAwKSB7IGVycm9yT3duZXIgPSBudWxsOyB9XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHRleHQsIGVycm9yT3duZXIpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLnRleHQgPSB0ZXh0O1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIE9uZUFuc3dlclJlcXVpcmVkRXJyb3IucHJvdG90eXBlLmdldEVycm9yVHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIFwicmVxdWlyZW9uZWFuc3dlclwiO1xuICAgIH07XG4gICAgT25lQW5zd2VyUmVxdWlyZWRFcnJvci5wcm90b3R5cGUuZ2V0RGVmYXVsdFRleHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphdGlvblN0cmluZyhcInJlcXVpcmVkRXJyb3JJblBhbmVsXCIpO1xuICAgIH07XG4gICAgcmV0dXJuIE9uZUFuc3dlclJlcXVpcmVkRXJyb3I7XG59KF9zdXJ2ZXlfZXJyb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlN1cnZleUVycm9yXCJdKSk7XG5cbnZhciBSZXF1cmVOdW1lcmljRXJyb3IgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFJlcXVyZU51bWVyaWNFcnJvciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBSZXF1cmVOdW1lcmljRXJyb3IodGV4dCwgZXJyb3JPd25lcikge1xuICAgICAgICBpZiAodGV4dCA9PT0gdm9pZCAwKSB7IHRleHQgPSBudWxsOyB9XG4gICAgICAgIGlmIChlcnJvck93bmVyID09PSB2b2lkIDApIHsgZXJyb3JPd25lciA9IG51bGw7IH1cbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgdGV4dCwgZXJyb3JPd25lcikgfHwgdGhpcztcbiAgICAgICAgX3RoaXMudGV4dCA9IHRleHQ7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgUmVxdXJlTnVtZXJpY0Vycm9yLnByb3RvdHlwZS5nZXRFcnJvclR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBcInJlcXVpcmVudW1lcmljXCI7XG4gICAgfTtcbiAgICBSZXF1cmVOdW1lcmljRXJyb3IucHJvdG90eXBlLmdldERlZmF1bHRUZXh0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YXRpb25TdHJpbmcoXCJudW1lcmljRXJyb3JcIik7XG4gICAgfTtcbiAgICByZXR1cm4gUmVxdXJlTnVtZXJpY0Vycm9yO1xufShfc3VydmV5X2Vycm9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJTdXJ2ZXlFcnJvclwiXSkpO1xuXG52YXIgRXhjZWVkU2l6ZUVycm9yID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhFeGNlZWRTaXplRXJyb3IsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gRXhjZWVkU2l6ZUVycm9yKG1heFNpemUsIGVycm9yT3duZXIpIHtcbiAgICAgICAgaWYgKGVycm9yT3duZXIgPT09IHZvaWQgMCkgeyBlcnJvck93bmVyID0gbnVsbDsgfVxuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBudWxsLCBlcnJvck93bmVyKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5tYXhTaXplID0gbWF4U2l6ZTtcbiAgICAgICAgX3RoaXMubG9jVGV4dC50ZXh0ID0gX3RoaXMuZ2V0VGV4dCgpO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIEV4Y2VlZFNpemVFcnJvci5wcm90b3R5cGUuZ2V0RXJyb3JUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gXCJleGNlZWRzaXplXCI7XG4gICAgfTtcbiAgICBFeGNlZWRTaXplRXJyb3IucHJvdG90eXBlLmdldERlZmF1bHRUZXh0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gX3N1cnZleVN0cmluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN1cnZleUxvY2FsaXphdGlvblwiXVxuICAgICAgICAgICAgLmdldFN0cmluZyhcImV4Y2VlZE1heFNpemVcIilbXCJmb3JtYXRcIl0odGhpcy5nZXRUZXh0U2l6ZSgpKTtcbiAgICB9O1xuICAgIEV4Y2VlZFNpemVFcnJvci5wcm90b3R5cGUuZ2V0VGV4dFNpemUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBzaXplcyA9IFtcIkJ5dGVzXCIsIFwiS0JcIiwgXCJNQlwiLCBcIkdCXCIsIFwiVEJcIl07XG4gICAgICAgIHZhciBmaXhlZCA9IFswLCAwLCAyLCAzLCAzXTtcbiAgICAgICAgaWYgKHRoaXMubWF4U2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIFwiMCBCeXRlXCI7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGkgPSBNYXRoLmZsb29yKE1hdGgubG9nKHRoaXMubWF4U2l6ZSkgLyBNYXRoLmxvZygxMDI0KSk7XG4gICAgICAgIHZhciB2YWx1ZSA9IHRoaXMubWF4U2l6ZSAvIE1hdGgucG93KDEwMjQsIGkpO1xuICAgICAgICByZXR1cm4gdmFsdWUudG9GaXhlZChmaXhlZFtpXSkgKyBcIiBcIiArIHNpemVzW2ldO1xuICAgIH07XG4gICAgcmV0dXJuIEV4Y2VlZFNpemVFcnJvcjtcbn0oX3N1cnZleV9lcnJvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiU3VydmV5RXJyb3JcIl0pKTtcblxudmFyIFdlYlJlcXVlc3RFcnJvciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoV2ViUmVxdWVzdEVycm9yLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFdlYlJlcXVlc3RFcnJvcihzdGF0dXMsIHJlc3BvbnNlLCBlcnJvck93bmVyKSB7XG4gICAgICAgIGlmIChlcnJvck93bmVyID09PSB2b2lkIDApIHsgZXJyb3JPd25lciA9IG51bGw7IH1cbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbnVsbCwgZXJyb3JPd25lcikgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuc3RhdHVzID0gc3RhdHVzO1xuICAgICAgICBfdGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFdlYlJlcXVlc3RFcnJvci5wcm90b3R5cGUuZ2V0RXJyb3JUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gXCJ3ZWJyZXF1ZXN0XCI7XG4gICAgfTtcbiAgICBXZWJSZXF1ZXN0RXJyb3IucHJvdG90eXBlLmdldERlZmF1bHRUZXh0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgc3RyID0gdGhpcy5nZXRMb2NhbGl6YXRpb25TdHJpbmcoXCJ1cmxSZXF1ZXN0RXJyb3JcIik7XG4gICAgICAgIHJldHVybiAhIXN0ciA/IHN0cltcImZvcm1hdFwiXSh0aGlzLnN0YXR1cywgdGhpcy5yZXNwb25zZSkgOiBcIlwiO1xuICAgIH07XG4gICAgcmV0dXJuIFdlYlJlcXVlc3RFcnJvcjtcbn0oX3N1cnZleV9lcnJvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiU3VydmV5RXJyb3JcIl0pKTtcblxudmFyIFdlYlJlcXVlc3RFbXB0eUVycm9yID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhXZWJSZXF1ZXN0RW1wdHlFcnJvciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBXZWJSZXF1ZXN0RW1wdHlFcnJvcih0ZXh0LCBlcnJvck93bmVyKSB7XG4gICAgICAgIGlmIChlcnJvck93bmVyID09PSB2b2lkIDApIHsgZXJyb3JPd25lciA9IG51bGw7IH1cbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgdGV4dCwgZXJyb3JPd25lcikgfHwgdGhpcztcbiAgICAgICAgX3RoaXMudGV4dCA9IHRleHQ7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgV2ViUmVxdWVzdEVtcHR5RXJyb3IucHJvdG90eXBlLmdldEVycm9yVHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIFwid2VicmVxdWVzdGVtcHR5XCI7XG4gICAgfTtcbiAgICBXZWJSZXF1ZXN0RW1wdHlFcnJvci5wcm90b3R5cGUuZ2V0RGVmYXVsdFRleHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphdGlvblN0cmluZyhcInVybEdldENob2ljZXNFcnJvclwiKTtcbiAgICB9O1xuICAgIHJldHVybiBXZWJSZXF1ZXN0RW1wdHlFcnJvcjtcbn0oX3N1cnZleV9lcnJvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiU3VydmV5RXJyb3JcIl0pKTtcblxudmFyIE90aGVyRW1wdHlFcnJvciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoT3RoZXJFbXB0eUVycm9yLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIE90aGVyRW1wdHlFcnJvcih0ZXh0LCBlcnJvck93bmVyKSB7XG4gICAgICAgIGlmIChlcnJvck93bmVyID09PSB2b2lkIDApIHsgZXJyb3JPd25lciA9IG51bGw7IH1cbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgdGV4dCwgZXJyb3JPd25lcikgfHwgdGhpcztcbiAgICAgICAgX3RoaXMudGV4dCA9IHRleHQ7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgT3RoZXJFbXB0eUVycm9yLnByb3RvdHlwZS5nZXRFcnJvclR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBcIm90aGVyZW1wdHlcIjtcbiAgICB9O1xuICAgIE90aGVyRW1wdHlFcnJvci5wcm90b3R5cGUuZ2V0RGVmYXVsdFRleHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphdGlvblN0cmluZyhcIm90aGVyUmVxdWlyZWRFcnJvclwiKTtcbiAgICB9O1xuICAgIHJldHVybiBPdGhlckVtcHR5RXJyb3I7XG59KF9zdXJ2ZXlfZXJyb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlN1cnZleUVycm9yXCJdKSk7XG5cbnZhciBVcGxvYWRpbmdGaWxlRXJyb3IgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFVwbG9hZGluZ0ZpbGVFcnJvciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBVcGxvYWRpbmdGaWxlRXJyb3IodGV4dCwgZXJyb3JPd25lcikge1xuICAgICAgICBpZiAoZXJyb3JPd25lciA9PT0gdm9pZCAwKSB7IGVycm9yT3duZXIgPSBudWxsOyB9XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHRleHQsIGVycm9yT3duZXIpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLnRleHQgPSB0ZXh0O1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFVwbG9hZGluZ0ZpbGVFcnJvci5wcm90b3R5cGUuZ2V0RXJyb3JUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gXCJ1cGxvYWRpbmdmaWxlXCI7XG4gICAgfTtcbiAgICBVcGxvYWRpbmdGaWxlRXJyb3IucHJvdG90eXBlLmdldERlZmF1bHRUZXh0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YXRpb25TdHJpbmcoXCJ1cGxvYWRpbmdGaWxlXCIpO1xuICAgIH07XG4gICAgcmV0dXJuIFVwbG9hZGluZ0ZpbGVFcnJvcjtcbn0oX3N1cnZleV9lcnJvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiU3VydmV5RXJyb3JcIl0pKTtcblxudmFyIFJlcXVpcmVkSW5BbGxSb3dzRXJyb3IgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFJlcXVpcmVkSW5BbGxSb3dzRXJyb3IsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gUmVxdWlyZWRJbkFsbFJvd3NFcnJvcih0ZXh0LCBlcnJvck93bmVyKSB7XG4gICAgICAgIGlmIChlcnJvck93bmVyID09PSB2b2lkIDApIHsgZXJyb3JPd25lciA9IG51bGw7IH1cbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgdGV4dCwgZXJyb3JPd25lcikgfHwgdGhpcztcbiAgICAgICAgX3RoaXMudGV4dCA9IHRleHQ7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgUmVxdWlyZWRJbkFsbFJvd3NFcnJvci5wcm90b3R5cGUuZ2V0RXJyb3JUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gXCJyZXF1aXJlZGluYWxscm93c2Vycm9yXCI7XG4gICAgfTtcbiAgICBSZXF1aXJlZEluQWxsUm93c0Vycm9yLnByb3RvdHlwZS5nZXREZWZhdWx0VGV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemF0aW9uU3RyaW5nKFwicmVxdWlyZWRJbkFsbFJvd3NFcnJvclwiKTtcbiAgICB9O1xuICAgIHJldHVybiBSZXF1aXJlZEluQWxsUm93c0Vycm9yO1xufShfc3VydmV5X2Vycm9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJTdXJ2ZXlFcnJvclwiXSkpO1xuXG52YXIgTWluUm93Q291bnRFcnJvciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoTWluUm93Q291bnRFcnJvciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBNaW5Sb3dDb3VudEVycm9yKG1pblJvd0NvdW50LCBlcnJvck93bmVyKSB7XG4gICAgICAgIGlmIChlcnJvck93bmVyID09PSB2b2lkIDApIHsgZXJyb3JPd25lciA9IG51bGw7IH1cbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbnVsbCwgZXJyb3JPd25lcikgfHwgdGhpcztcbiAgICAgICAgX3RoaXMubWluUm93Q291bnQgPSBtaW5Sb3dDb3VudDtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBNaW5Sb3dDb3VudEVycm9yLnByb3RvdHlwZS5nZXRFcnJvclR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBcIm1pbnJvd2NvdW50ZXJyb3JcIjtcbiAgICB9O1xuICAgIE1pblJvd0NvdW50RXJyb3IucHJvdG90eXBlLmdldERlZmF1bHRUZXh0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gX3N1cnZleVN0cmluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN1cnZleUxvY2FsaXphdGlvblwiXVxuICAgICAgICAgICAgLmdldFN0cmluZyhcIm1pblJvd0NvdW50RXJyb3JcIilbXCJmb3JtYXRcIl0odGhpcy5taW5Sb3dDb3VudCk7XG4gICAgfTtcbiAgICByZXR1cm4gTWluUm93Q291bnRFcnJvcjtcbn0oX3N1cnZleV9lcnJvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiU3VydmV5RXJyb3JcIl0pKTtcblxudmFyIEtleUR1cGxpY2F0aW9uRXJyb3IgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEtleUR1cGxpY2F0aW9uRXJyb3IsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gS2V5RHVwbGljYXRpb25FcnJvcih0ZXh0LCBlcnJvck93bmVyKSB7XG4gICAgICAgIGlmIChlcnJvck93bmVyID09PSB2b2lkIDApIHsgZXJyb3JPd25lciA9IG51bGw7IH1cbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgdGV4dCwgZXJyb3JPd25lcikgfHwgdGhpcztcbiAgICAgICAgX3RoaXMudGV4dCA9IHRleHQ7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgS2V5RHVwbGljYXRpb25FcnJvci5wcm90b3R5cGUuZ2V0RXJyb3JUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gXCJrZXlkdXBsaWNhdGlvbmVycm9yXCI7XG4gICAgfTtcbiAgICBLZXlEdXBsaWNhdGlvbkVycm9yLnByb3RvdHlwZS5nZXREZWZhdWx0VGV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemF0aW9uU3RyaW5nKFwia2V5RHVwbGljYXRpb25FcnJvclwiKTtcbiAgICB9O1xuICAgIHJldHVybiBLZXlEdXBsaWNhdGlvbkVycm9yO1xufShfc3VydmV5X2Vycm9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJTdXJ2ZXlFcnJvclwiXSkpO1xuXG52YXIgQ3VzdG9tRXJyb3IgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEN1c3RvbUVycm9yLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEN1c3RvbUVycm9yKHRleHQsIGVycm9yT3duZXIpIHtcbiAgICAgICAgaWYgKGVycm9yT3duZXIgPT09IHZvaWQgMCkgeyBlcnJvck93bmVyID0gbnVsbDsgfVxuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCB0ZXh0LCBlcnJvck93bmVyKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy50ZXh0ID0gdGV4dDtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBDdXN0b21FcnJvci5wcm90b3R5cGUuZ2V0RXJyb3JUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gXCJjdXN0b21cIjtcbiAgICB9O1xuICAgIHJldHVybiBDdXN0b21FcnJvcjtcbn0oX3N1cnZleV9lcnJvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiU3VydmV5RXJyb3JcIl0pKTtcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL2V4cHJlc3Npb25JdGVtcy50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvZXhwcmVzc2lvbkl0ZW1zLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBFeHByZXNzaW9uSXRlbSwgSHRtbENvbmRpdGlvbkl0ZW0sIFVybENvbmRpdGlvbkl0ZW0gKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiRXhwcmVzc2lvbkl0ZW1cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBFeHByZXNzaW9uSXRlbTsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiSHRtbENvbmRpdGlvbkl0ZW1cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBIdG1sQ29uZGl0aW9uSXRlbTsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiVXJsQ29uZGl0aW9uSXRlbVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFVybENvbmRpdGlvbkl0ZW07IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2pzb25vYmplY3QgKi8gXCIuL3NyYy9qc29ub2JqZWN0LnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9iYXNlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2Jhc2UgKi8gXCIuL3NyYy9iYXNlLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9jb25kaXRpb25zX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2NvbmRpdGlvbnMgKi8gXCIuL3NyYy9jb25kaXRpb25zLnRzXCIpO1xudmFyIF9fZXh0ZW5kcyA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG5cblxuXG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIEh0bWxDb25kaXRpb25JdGVtIGFuZCBVcmxDb25kaXRpb25JdGVtIGNsYXNzZXMuXG4gKi9cbnZhciBFeHByZXNzaW9uSXRlbSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoRXhwcmVzc2lvbkl0ZW0sIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gRXhwcmVzc2lvbkl0ZW0oZXhwcmVzc2lvbikge1xuICAgICAgICBpZiAoZXhwcmVzc2lvbiA9PT0gdm9pZCAwKSB7IGV4cHJlc3Npb24gPSBudWxsOyB9XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmV4cHJlc3Npb24gPSBleHByZXNzaW9uO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIEV4cHJlc3Npb25JdGVtLnByb3RvdHlwZS5nZXRUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gXCJleHByZXNzaW9uaXRlbVwiO1xuICAgIH07XG4gICAgRXhwcmVzc2lvbkl0ZW0ucHJvdG90eXBlLnJ1bkNvbmRpdGlvbiA9IGZ1bmN0aW9uICh2YWx1ZXMsIHByb3BlcnRpZXMpIHtcbiAgICAgICAgaWYgKCF0aGlzLmV4cHJlc3Npb24pXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiBuZXcgX2NvbmRpdGlvbnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIkNvbmRpdGlvblJ1bm5lclwiXSh0aGlzLmV4cHJlc3Npb24pLnJ1bih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEV4cHJlc3Npb25JdGVtLnByb3RvdHlwZSwgXCJleHByZXNzaW9uXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSBleHByZXNzaW9uIHByb3BlcnR5LiBJZiB0aGlzIGV4cHJlc3Npb24gcmV0dXJucyB0cnVlLCB0aGVuIHN1cnZleSB3aWxsIHVzZSBodG1sIHByb3BlcnR5IHRvIHNob3cgb24gY29tcGxldGUgcGFnZS5cbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImV4cHJlc3Npb25cIiwgXCJcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiZXhwcmVzc2lvblwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEV4cHJlc3Npb25JdGVtLnByb3RvdHlwZSwgXCJsb2NIdG1sXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcImh0bWxcIik7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBFeHByZXNzaW9uSXRlbS5wcm90b3R5cGUuZ2V0TG9jYWxlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLmxvY093bmVyID8gdGhpcy5sb2NPd25lci5nZXRMb2NhbGUoKSA6IFwiXCI7XG4gICAgfTtcbiAgICBFeHByZXNzaW9uSXRlbS5wcm90b3R5cGUuZ2V0TWFya2Rvd25IdG1sID0gZnVuY3Rpb24gKHRleHQsIG5hbWUpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5sb2NPd25lciA/IHRoaXMubG9jT3duZXIuZ2V0TWFya2Rvd25IdG1sKHRleHQsIG5hbWUpIDogdW5kZWZpbmVkO1xuICAgIH07XG4gICAgRXhwcmVzc2lvbkl0ZW0ucHJvdG90eXBlLmdldFJlbmRlcmVyID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5sb2NPd25lciA/IHRoaXMubG9jT3duZXIuZ2V0UmVuZGVyZXIobmFtZSkgOiBudWxsO1xuICAgIH07XG4gICAgRXhwcmVzc2lvbkl0ZW0ucHJvdG90eXBlLmdldFJlbmRlcmVyQ29udGV4dCA9IGZ1bmN0aW9uIChsb2NTdHIpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5sb2NPd25lciA/IHRoaXMubG9jT3duZXIuZ2V0UmVuZGVyZXJDb250ZXh0KGxvY1N0cikgOiBsb2NTdHI7XG4gICAgfTtcbiAgICBFeHByZXNzaW9uSXRlbS5wcm90b3R5cGUuZ2V0UHJvY2Vzc2VkVGV4dCA9IGZ1bmN0aW9uICh0ZXh0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY093bmVyID8gdGhpcy5sb2NPd25lci5nZXRQcm9jZXNzZWRUZXh0KHRleHQpIDogdGV4dDtcbiAgICB9O1xuICAgIEV4cHJlc3Npb25JdGVtLnByb3RvdHlwZS5nZXRTdXJ2ZXkgPSBmdW5jdGlvbiAoaXNMaXZlKSB7XG4gICAgICAgIGlmIChpc0xpdmUgPT09IHZvaWQgMCkgeyBpc0xpdmUgPSBmYWxzZTsgfVxuICAgICAgICByZXR1cm4gdGhpcy5sb2NPd25lcjtcbiAgICB9O1xuICAgIHJldHVybiBFeHByZXNzaW9uSXRlbTtcbn0oX2Jhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIkJhc2VcIl0pKTtcblxuLyoqXG4gKiBBIGNsYXNzIHRoYXQgY29udGFpbnMgZXhwcmVzc2lvbiBhbmQgaHRtbCBwcm9wZXRpZXMuIEl0IHVzZXMgaW4gc3VydmV5LmNvbXBsZXRlZEh0bWxPbkNvbmRpdGlvbiBhcnJheS5cbiAqIElmIHRoZSBleHByZXNzaW9uIHJldHVybnMgdHJ1ZSB0aGVuIGh0bWwgb2YgdGhpcyBpdGVtIHVzZXMgaW5zdGVhZCBvZiBzdXJ2ZXkuY29tcGxldGVkSHRtbCBwcm9wZXJ0eVxuICogQHNlZSBTdXJ2ZXlNb2RlbC5jb21wbGV0ZWRIdG1sT25Db25kaXRpb25cbiAqIEBzZWUgU3VydmV5TW9kZWwuY29tcGxldGVkSHRtbFxuICovXG52YXIgSHRtbENvbmRpdGlvbkl0ZW0gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEh0bWxDb25kaXRpb25JdGVtLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEh0bWxDb25kaXRpb25JdGVtKGV4cHJlc3Npb24sIGh0bWwpIHtcbiAgICAgICAgaWYgKGV4cHJlc3Npb24gPT09IHZvaWQgMCkgeyBleHByZXNzaW9uID0gbnVsbDsgfVxuICAgICAgICBpZiAoaHRtbCA9PT0gdm9pZCAwKSB7IGh0bWwgPSBudWxsOyB9XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIGV4cHJlc3Npb24pIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwiaHRtbFwiLCBfdGhpcyk7XG4gICAgICAgIF90aGlzLmh0bWwgPSBodG1sO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIEh0bWxDb25kaXRpb25JdGVtLnByb3RvdHlwZS5nZXRUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gXCJodG1sY29uZGl0aW9uaXRlbVwiO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEh0bWxDb25kaXRpb25JdGVtLnByb3RvdHlwZSwgXCJodG1sXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSBodG1sIHRoYXQgc2hvd3Mgb24gY29tcGxldGVkICgnVGhhbmsgeW91JykgcGFnZS4gVGhlIGV4cHJlc3Npb24gc2hvdWxkIHJldHVybiB0cnVlXG4gICAgICAgICAqIEBzZWUgZXhwcmVzc2lvblxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJodG1sXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJodG1sXCIsIHZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShIdG1sQ29uZGl0aW9uSXRlbS5wcm90b3R5cGUsIFwibG9jSHRtbFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJodG1sXCIpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgcmV0dXJuIEh0bWxDb25kaXRpb25JdGVtO1xufShFeHByZXNzaW9uSXRlbSkpO1xuXG4vKipcbiAqIEEgY2xhc3MgdGhhdCBjb250YWlucyBleHByZXNzaW9uIGFuZCB1cmwgcHJvcGV0aWVzLiBJdCB1c2VzIGluIHN1cnZleS5uYXZpZ2F0ZVRvVXJsT25Db25kaXRpb24gYXJyYXkuXG4gKiBJZiB0aGUgZXhwcmVzc2lvbiByZXR1cm5zIHRydWUgdGhlbiB1cmwgb2YgdGhpcyBpdGVtIHVzZXMgaW5zdGVhZCBvZiBzdXJ2ZXkubmF2aWdhdGVUb1VybCBwcm9wZXJ0eVxuICogQHNlZSBTdXJ2ZXlNb2RlbC5uYXZpZ2F0ZVRvVXJsXG4gKi9cbnZhciBVcmxDb25kaXRpb25JdGVtID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhVcmxDb25kaXRpb25JdGVtLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFVybENvbmRpdGlvbkl0ZW0oZXhwcmVzc2lvbiwgdXJsKSB7XG4gICAgICAgIGlmIChleHByZXNzaW9uID09PSB2b2lkIDApIHsgZXhwcmVzc2lvbiA9IG51bGw7IH1cbiAgICAgICAgaWYgKHVybCA9PT0gdm9pZCAwKSB7IHVybCA9IG51bGw7IH1cbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgZXhwcmVzc2lvbikgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJ1cmxcIiwgX3RoaXMpO1xuICAgICAgICBfdGhpcy51cmwgPSB1cmw7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgVXJsQ29uZGl0aW9uSXRlbS5wcm90b3R5cGUuZ2V0VHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIFwidXJsY29uZGl0aW9uaXRlbVwiO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFVybENvbmRpdGlvbkl0ZW0ucHJvdG90eXBlLCBcInVybFwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgdXJsIHRoYXQgc3VydmV5IG5hdmlnYXRlcyB0byBvbiBjb21wbGV0aW5nIHRoZSBzdXJ2ZXkuIFRoZSBleHByZXNzaW9uIHNob3VsZCByZXR1cm4gdHJ1ZVxuICAgICAgICAgKiBAc2VlIGV4cHJlc3Npb25cbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwidXJsXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJ1cmxcIiwgdmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFVybENvbmRpdGlvbkl0ZW0ucHJvdG90eXBlLCBcImxvY1VybFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJ1cmxcIik7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICByZXR1cm4gVXJsQ29uZGl0aW9uSXRlbTtcbn0oRXhwcmVzc2lvbkl0ZW0pKTtcblxuX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlNlcmlhbGl6ZXJcIl0uYWRkQ2xhc3MoXCJleHByZXNzaW9uaXRlbVwiLCBbXCJleHByZXNzaW9uOmNvbmRpdGlvblwiXSwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgRXhwcmVzc2lvbkl0ZW0oKTtcbn0sIFwiYmFzZVwiKTtcbl9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJTZXJpYWxpemVyXCJdLmFkZENsYXNzKFwiaHRtbGNvbmRpdGlvbml0ZW1cIiwgW3sgbmFtZTogXCJodG1sOmh0bWxcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY0h0bWxcIiB9XSwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgSHRtbENvbmRpdGlvbkl0ZW0oKTtcbn0sIFwiZXhwcmVzc2lvbml0ZW1cIik7XG5fanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiU2VyaWFsaXplclwiXS5hZGRDbGFzcyhcInVybGNvbmRpdGlvbml0ZW1cIiwgW3sgbmFtZTogXCJ1cmw6c3RyaW5nXCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NVcmxcIiB9XSwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgVXJsQ29uZGl0aW9uSXRlbSgpO1xufSwgXCJleHByZXNzaW9uaXRlbVwiKTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9leHByZXNzaW9ucy9leHByZXNzaW9uUGFyc2VyLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvZXhwcmVzc2lvbnMvZXhwcmVzc2lvblBhcnNlci50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFN5bnRheEVycm9yLCBwYXJzZSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJTeW50YXhFcnJvclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFN5bnRheEVycm9yOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJwYXJzZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHBhcnNlOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZXhwcmVzc2lvbnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZXhwcmVzc2lvbnMgKi8gXCIuL3NyYy9leHByZXNzaW9ucy9leHByZXNzaW9ucy50c1wiKTtcbnZhciBfX2V4dGVuZHMgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xuLyogZXNsaW50LWRpc2FibGUgKi9cblxuLy8gR2VuZXJhdGVkIGJ5IFBFRy5qcyB2LiAwLjEwLjAgKHRzLXBlZ2pzIHBsdWdpbiB2LiAwLjMuMSApXG4vL1xuLy8gaHR0cHM6Ly9wZWdqcy5vcmcvICAgaHR0cHM6Ly9naXRodWIuY29tL21ldGFkZXZwcm8vdHMtcGVnanNcblwidXNlIHN0cmljdFwiO1xudmFyIFN5bnRheEVycm9yID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhTeW50YXhFcnJvciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTeW50YXhFcnJvcihtZXNzYWdlLCBleHBlY3RlZCwgZm91bmQsIGxvY2F0aW9uKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgICAgICBfdGhpcy5leHBlY3RlZCA9IGV4cGVjdGVkO1xuICAgICAgICBfdGhpcy5mb3VuZCA9IGZvdW5kO1xuICAgICAgICBfdGhpcy5sb2NhdGlvbiA9IGxvY2F0aW9uO1xuICAgICAgICBfdGhpcy5uYW1lID0gXCJTeW50YXhFcnJvclwiO1xuICAgICAgICBpZiAodHlwZW9mIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKF90aGlzLCBTeW50YXhFcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBTeW50YXhFcnJvci5idWlsZE1lc3NhZ2UgPSBmdW5jdGlvbiAoZXhwZWN0ZWQsIGZvdW5kKSB7XG4gICAgICAgIGZ1bmN0aW9uIGhleChjaCkge1xuICAgICAgICAgICAgcmV0dXJuIGNoLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gbGl0ZXJhbEVzY2FwZShzKSB7XG4gICAgICAgICAgICByZXR1cm4gc1xuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXFxcL2csIFwiXFxcXFxcXFxcIilcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvXCIvZywgXCJcXFxcXFxcIlwiKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXDAvZywgXCJcXFxcMFwiKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXHQvZywgXCJcXFxcdFwiKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXG4vZywgXCJcXFxcblwiKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXHIvZywgXCJcXFxcclwiKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9bXFx4MDAtXFx4MEZdL2csIGZ1bmN0aW9uIChjaCkgeyByZXR1cm4gXCJcXFxceDBcIiArIGhleChjaCk7IH0pXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL1tcXHgxMC1cXHgxRlxceDdGLVxceDlGXS9nLCBmdW5jdGlvbiAoY2gpIHsgcmV0dXJuIFwiXFxcXHhcIiArIGhleChjaCk7IH0pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGNsYXNzRXNjYXBlKHMpIHtcbiAgICAgICAgICAgIHJldHVybiBzXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcXFwvZywgXCJcXFxcXFxcXFwiKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXF0vZywgXCJcXFxcXVwiKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXF4vZywgXCJcXFxcXlwiKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8tL2csIFwiXFxcXC1cIilcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFwwL2csIFwiXFxcXDBcIilcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFx0L2csIFwiXFxcXHRcIilcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxuL2csIFwiXFxcXG5cIilcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxyL2csIFwiXFxcXHJcIilcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvW1xceDAwLVxceDBGXS9nLCBmdW5jdGlvbiAoY2gpIHsgcmV0dXJuIFwiXFxcXHgwXCIgKyBoZXgoY2gpOyB9KVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9bXFx4MTAtXFx4MUZcXHg3Ri1cXHg5Rl0vZywgZnVuY3Rpb24gKGNoKSB7IHJldHVybiBcIlxcXFx4XCIgKyBoZXgoY2gpOyB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBkZXNjcmliZUV4cGVjdGF0aW9uKGV4cGVjdGF0aW9uKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGV4cGVjdGF0aW9uLnR5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwibGl0ZXJhbFwiOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJcXFwiXCIgKyBsaXRlcmFsRXNjYXBlKGV4cGVjdGF0aW9uLnRleHQpICsgXCJcXFwiXCI7XG4gICAgICAgICAgICAgICAgY2FzZSBcImNsYXNzXCI6XG4gICAgICAgICAgICAgICAgICAgIHZhciBlc2NhcGVkUGFydHMgPSBleHBlY3RhdGlvbi5wYXJ0cy5tYXAoZnVuY3Rpb24gKHBhcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHBhcnQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBjbGFzc0VzY2FwZShwYXJ0WzBdKSArIFwiLVwiICsgY2xhc3NFc2NhcGUocGFydFsxXSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGNsYXNzRXNjYXBlKHBhcnQpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiW1wiICsgKGV4cGVjdGF0aW9uLmludmVydGVkID8gXCJeXCIgOiBcIlwiKSArIGVzY2FwZWRQYXJ0cyArIFwiXVwiO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJhbnlcIjpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiYW55IGNoYXJhY3RlclwiO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJlbmRcIjpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiZW5kIG9mIGlucHV0XCI7XG4gICAgICAgICAgICAgICAgY2FzZSBcIm90aGVyXCI6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBleHBlY3RhdGlvbi5kZXNjcmlwdGlvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBkZXNjcmliZUV4cGVjdGVkKGV4cGVjdGVkMSkge1xuICAgICAgICAgICAgdmFyIGRlc2NyaXB0aW9ucyA9IGV4cGVjdGVkMS5tYXAoZGVzY3JpYmVFeHBlY3RhdGlvbik7XG4gICAgICAgICAgICB2YXIgaTtcbiAgICAgICAgICAgIHZhciBqO1xuICAgICAgICAgICAgZGVzY3JpcHRpb25zLnNvcnQoKTtcbiAgICAgICAgICAgIGlmIChkZXNjcmlwdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IDEsIGogPSAxOyBpIDwgZGVzY3JpcHRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdGlvbnNbaSAtIDFdICE9PSBkZXNjcmlwdGlvbnNbaV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uc1tqXSA9IGRlc2NyaXB0aW9uc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGorKztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbnMubGVuZ3RoID0gajtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN3aXRjaCAoZGVzY3JpcHRpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRlc2NyaXB0aW9uc1swXTtcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkZXNjcmlwdGlvbnNbMF0gKyBcIiBvciBcIiArIGRlc2NyaXB0aW9uc1sxXTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVzY3JpcHRpb25zLnNsaWNlKDAsIC0xKS5qb2luKFwiLCBcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICsgXCIsIG9yIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICArIGRlc2NyaXB0aW9uc1tkZXNjcmlwdGlvbnMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZGVzY3JpYmVGb3VuZChmb3VuZDEpIHtcbiAgICAgICAgICAgIHJldHVybiBmb3VuZDEgPyBcIlxcXCJcIiArIGxpdGVyYWxFc2NhcGUoZm91bmQxKSArIFwiXFxcIlwiIDogXCJlbmQgb2YgaW5wdXRcIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gXCJFeHBlY3RlZCBcIiArIGRlc2NyaWJlRXhwZWN0ZWQoZXhwZWN0ZWQpICsgXCIgYnV0IFwiICsgZGVzY3JpYmVGb3VuZChmb3VuZCkgKyBcIiBmb3VuZC5cIjtcbiAgICB9O1xuICAgIHJldHVybiBTeW50YXhFcnJvcjtcbn0oRXJyb3IpKTtcblxuZnVuY3Rpb24gcGVnJHBhcnNlKGlucHV0LCBvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMgOiB7fTtcbiAgICB2YXIgcGVnJEZBSUxFRCA9IHt9O1xuICAgIHZhciBwZWckc3RhcnRSdWxlRnVuY3Rpb25zID0geyBFeHByZXNzaW9uOiBwZWckcGFyc2VFeHByZXNzaW9uIH07XG4gICAgdmFyIHBlZyRzdGFydFJ1bGVGdW5jdGlvbiA9IHBlZyRwYXJzZUV4cHJlc3Npb247XG4gICAgdmFyIHBlZyRjMCA9IGZ1bmN0aW9uIChoZWFkLCB0YWlsKSB7XG4gICAgICAgIHJldHVybiBidWlsZEJpbmFyeU9wZXJhbmQoaGVhZCwgdGFpbCwgdHJ1ZSk7XG4gICAgfTtcbiAgICB2YXIgcGVnJGMxID0gXCJ8fFwiO1xuICAgIHZhciBwZWckYzIgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwifHxcIiwgZmFsc2UpO1xuICAgIHZhciBwZWckYzMgPSBcIm9yXCI7XG4gICAgdmFyIHBlZyRjNCA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJvclwiLCB0cnVlKTtcbiAgICB2YXIgcGVnJGM1ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gXCJvclwiOyB9O1xuICAgIHZhciBwZWckYzYgPSBcIiYmXCI7XG4gICAgdmFyIHBlZyRjNyA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCImJlwiLCBmYWxzZSk7XG4gICAgdmFyIHBlZyRjOCA9IFwiYW5kXCI7XG4gICAgdmFyIHBlZyRjOSA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJhbmRcIiwgdHJ1ZSk7XG4gICAgdmFyIHBlZyRjMTAgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBcImFuZFwiOyB9O1xuICAgIHZhciBwZWckYzExID0gZnVuY3Rpb24gKGhlYWQsIHRhaWwpIHtcbiAgICAgICAgcmV0dXJuIGJ1aWxkQmluYXJ5T3BlcmFuZChoZWFkLCB0YWlsKTtcbiAgICB9O1xuICAgIHZhciBwZWckYzEyID0gXCI8PVwiO1xuICAgIHZhciBwZWckYzEzID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIjw9XCIsIGZhbHNlKTtcbiAgICB2YXIgcGVnJGMxNCA9IFwibGVzc29yZXF1YWxcIjtcbiAgICB2YXIgcGVnJGMxNSA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJsZXNzb3JlcXVhbFwiLCB0cnVlKTtcbiAgICB2YXIgcGVnJGMxNiA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFwibGVzc29yZXF1YWxcIjsgfTtcbiAgICB2YXIgcGVnJGMxNyA9IFwiPj1cIjtcbiAgICB2YXIgcGVnJGMxOCA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCI+PVwiLCBmYWxzZSk7XG4gICAgdmFyIHBlZyRjMTkgPSBcImdyZWF0ZXJvcmVxdWFsXCI7XG4gICAgdmFyIHBlZyRjMjAgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiZ3JlYXRlcm9yZXF1YWxcIiwgdHJ1ZSk7XG4gICAgdmFyIHBlZyRjMjEgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBcImdyZWF0ZXJvcmVxdWFsXCI7IH07XG4gICAgdmFyIHBlZyRjMjIgPSBcIj09XCI7XG4gICAgdmFyIHBlZyRjMjMgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiPT1cIiwgZmFsc2UpO1xuICAgIHZhciBwZWckYzI0ID0gXCJlcXVhbFwiO1xuICAgIHZhciBwZWckYzI1ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcImVxdWFsXCIsIHRydWUpO1xuICAgIHZhciBwZWckYzI2ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gXCJlcXVhbFwiOyB9O1xuICAgIHZhciBwZWckYzI3ID0gXCI9XCI7XG4gICAgdmFyIHBlZyRjMjggPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiPVwiLCBmYWxzZSk7XG4gICAgdmFyIHBlZyRjMjkgPSBcIiE9XCI7XG4gICAgdmFyIHBlZyRjMzAgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiIT1cIiwgZmFsc2UpO1xuICAgIHZhciBwZWckYzMxID0gXCJub3RlcXVhbFwiO1xuICAgIHZhciBwZWckYzMyID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIm5vdGVxdWFsXCIsIHRydWUpO1xuICAgIHZhciBwZWckYzMzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gXCJub3RlcXVhbFwiOyB9O1xuICAgIHZhciBwZWckYzM0ID0gXCI8XCI7XG4gICAgdmFyIHBlZyRjMzUgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiPFwiLCBmYWxzZSk7XG4gICAgdmFyIHBlZyRjMzYgPSBcImxlc3NcIjtcbiAgICB2YXIgcGVnJGMzNyA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJsZXNzXCIsIHRydWUpO1xuICAgIHZhciBwZWckYzM4ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gXCJsZXNzXCI7IH07XG4gICAgdmFyIHBlZyRjMzkgPSBcIj5cIjtcbiAgICB2YXIgcGVnJGM0MCA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCI+XCIsIGZhbHNlKTtcbiAgICB2YXIgcGVnJGM0MSA9IFwiZ3JlYXRlclwiO1xuICAgIHZhciBwZWckYzQyID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcImdyZWF0ZXJcIiwgdHJ1ZSk7XG4gICAgdmFyIHBlZyRjNDMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBcImdyZWF0ZXJcIjsgfTtcbiAgICB2YXIgcGVnJGM0NCA9IFwiK1wiO1xuICAgIHZhciBwZWckYzQ1ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIitcIiwgZmFsc2UpO1xuICAgIHZhciBwZWckYzQ2ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gXCJwbHVzXCI7IH07XG4gICAgdmFyIHBlZyRjNDcgPSBcIi1cIjtcbiAgICB2YXIgcGVnJGM0OCA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCItXCIsIGZhbHNlKTtcbiAgICB2YXIgcGVnJGM0OSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFwibWludXNcIjsgfTtcbiAgICB2YXIgcGVnJGM1MCA9IFwiKlwiO1xuICAgIHZhciBwZWckYzUxID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIipcIiwgZmFsc2UpO1xuICAgIHZhciBwZWckYzUyID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gXCJtdWxcIjsgfTtcbiAgICB2YXIgcGVnJGM1MyA9IFwiL1wiO1xuICAgIHZhciBwZWckYzU0ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIi9cIiwgZmFsc2UpO1xuICAgIHZhciBwZWckYzU1ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gXCJkaXZcIjsgfTtcbiAgICB2YXIgcGVnJGM1NiA9IFwiJVwiO1xuICAgIHZhciBwZWckYzU3ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIiVcIiwgZmFsc2UpO1xuICAgIHZhciBwZWckYzU4ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gXCJtb2RcIjsgfTtcbiAgICB2YXIgcGVnJGM1OSA9IFwiXlwiO1xuICAgIHZhciBwZWckYzYwID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIl5cIiwgZmFsc2UpO1xuICAgIHZhciBwZWckYzYxID0gXCJwb3dlclwiO1xuICAgIHZhciBwZWckYzYyID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcInBvd2VyXCIsIHRydWUpO1xuICAgIHZhciBwZWckYzYzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gXCJwb3dlclwiOyB9O1xuICAgIHZhciBwZWckYzY0ID0gXCIqPVwiO1xuICAgIHZhciBwZWckYzY1ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIio9XCIsIGZhbHNlKTtcbiAgICB2YXIgcGVnJGM2NiA9IFwiY29udGFpbnNcIjtcbiAgICB2YXIgcGVnJGM2NyA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJjb250YWluc1wiLCB0cnVlKTtcbiAgICB2YXIgcGVnJGM2OCA9IFwiY29udGFpblwiO1xuICAgIHZhciBwZWckYzY5ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcImNvbnRhaW5cIiwgdHJ1ZSk7XG4gICAgdmFyIHBlZyRjNzAgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBcImNvbnRhaW5zXCI7IH07XG4gICAgdmFyIHBlZyRjNzEgPSBcIm5vdGNvbnRhaW5zXCI7XG4gICAgdmFyIHBlZyRjNzIgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwibm90Y29udGFpbnNcIiwgdHJ1ZSk7XG4gICAgdmFyIHBlZyRjNzMgPSBcIm5vdGNvbnRhaW5cIjtcbiAgICB2YXIgcGVnJGM3NCA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJub3Rjb250YWluXCIsIHRydWUpO1xuICAgIHZhciBwZWckYzc1ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gXCJub3Rjb250YWluc1wiOyB9O1xuICAgIHZhciBwZWckYzc2ID0gXCJhbnlvZlwiO1xuICAgIHZhciBwZWckYzc3ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcImFueW9mXCIsIHRydWUpO1xuICAgIHZhciBwZWckYzc4ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gXCJhbnlvZlwiOyB9O1xuICAgIHZhciBwZWckYzc5ID0gXCJhbGxvZlwiO1xuICAgIHZhciBwZWckYzgwID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcImFsbG9mXCIsIHRydWUpO1xuICAgIHZhciBwZWckYzgxID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gXCJhbGxvZlwiOyB9O1xuICAgIHZhciBwZWckYzgyID0gXCIoXCI7XG4gICAgdmFyIHBlZyRjODMgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiKFwiLCBmYWxzZSk7XG4gICAgdmFyIHBlZyRjODQgPSBcIilcIjtcbiAgICB2YXIgcGVnJGM4NSA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCIpXCIsIGZhbHNlKTtcbiAgICB2YXIgcGVnJGM4NiA9IGZ1bmN0aW9uIChleHByKSB7IHJldHVybiBleHByOyB9O1xuICAgIHZhciBwZWckYzg3ID0gZnVuY3Rpb24gKG5hbWUsIHBhcmFtcykgeyByZXR1cm4gbmV3IF9leHByZXNzaW9uc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiRnVuY3Rpb25PcGVyYW5kXCJdKG5hbWUsIHBhcmFtcyk7IH07XG4gICAgdmFyIHBlZyRjODggPSBcIiFcIjtcbiAgICB2YXIgcGVnJGM4OSA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCIhXCIsIGZhbHNlKTtcbiAgICB2YXIgcGVnJGM5MCA9IFwibmVnYXRlXCI7XG4gICAgdmFyIHBlZyRjOTEgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwibmVnYXRlXCIsIHRydWUpO1xuICAgIHZhciBwZWckYzkyID0gZnVuY3Rpb24gKGV4cHIpIHsgcmV0dXJuIG5ldyBfZXhwcmVzc2lvbnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlVuYXJ5T3BlcmFuZFwiXShleHByLCBcIm5lZ2F0ZVwiKTsgfTtcbiAgICB2YXIgcGVnJGM5MyA9IGZ1bmN0aW9uIChleHByLCBvcCkgeyByZXR1cm4gbmV3IF9leHByZXNzaW9uc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiVW5hcnlPcGVyYW5kXCJdKGV4cHIsIG9wKTsgfTtcbiAgICB2YXIgcGVnJGM5NCA9IFwiZW1wdHlcIjtcbiAgICB2YXIgcGVnJGM5NSA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJlbXB0eVwiLCB0cnVlKTtcbiAgICB2YXIgcGVnJGM5NiA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFwiZW1wdHlcIjsgfTtcbiAgICB2YXIgcGVnJGM5NyA9IFwibm90ZW1wdHlcIjtcbiAgICB2YXIgcGVnJGM5OCA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJub3RlbXB0eVwiLCB0cnVlKTtcbiAgICB2YXIgcGVnJGM5OSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFwibm90ZW1wdHlcIjsgfTtcbiAgICB2YXIgcGVnJGMxMDAgPSBcInVuZGVmaW5lZFwiO1xuICAgIHZhciBwZWckYzEwMSA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJ1bmRlZmluZWRcIiwgZmFsc2UpO1xuICAgIHZhciBwZWckYzEwMiA9IFwibnVsbFwiO1xuICAgIHZhciBwZWckYzEwMyA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJudWxsXCIsIGZhbHNlKTtcbiAgICB2YXIgcGVnJGMxMDQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBudWxsOyB9O1xuICAgIHZhciBwZWckYzEwNSA9IGZ1bmN0aW9uICh2YWx1ZSkgeyByZXR1cm4gbmV3IF9leHByZXNzaW9uc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiQ29uc3RcIl0odmFsdWUpOyB9O1xuICAgIHZhciBwZWckYzEwNiA9IFwie1wiO1xuICAgIHZhciBwZWckYzEwNyA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJ7XCIsIGZhbHNlKTtcbiAgICB2YXIgcGVnJGMxMDggPSBcIn1cIjtcbiAgICB2YXIgcGVnJGMxMDkgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwifVwiLCBmYWxzZSk7XG4gICAgdmFyIHBlZyRjMTEwID0gZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiBuZXcgX2V4cHJlc3Npb25zX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJWYXJpYWJsZVwiXSh2YWx1ZSk7IH07XG4gICAgdmFyIHBlZyRjMTExID0gZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiB2YWx1ZTsgfTtcbiAgICB2YXIgcGVnJGMxMTIgPSBcIicnXCI7XG4gICAgdmFyIHBlZyRjMTEzID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIicnXCIsIGZhbHNlKTtcbiAgICB2YXIgcGVnJGMxMTQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBcIlwiOyB9O1xuICAgIHZhciBwZWckYzExNSA9IFwiXFxcIlxcXCJcIjtcbiAgICB2YXIgcGVnJGMxMTYgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiXFxcIlxcXCJcIiwgZmFsc2UpO1xuICAgIHZhciBwZWckYzExNyA9IFwiJ1wiO1xuICAgIHZhciBwZWckYzExOCA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCInXCIsIGZhbHNlKTtcbiAgICB2YXIgcGVnJGMxMTkgPSBmdW5jdGlvbiAodmFsdWUpIHsgcmV0dXJuIFwiJ1wiICsgdmFsdWUgKyBcIidcIjsgfTtcbiAgICB2YXIgcGVnJGMxMjAgPSBcIlxcXCJcIjtcbiAgICB2YXIgcGVnJGMxMjEgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiXFxcIlwiLCBmYWxzZSk7XG4gICAgdmFyIHBlZyRjMTIyID0gXCJbXCI7XG4gICAgdmFyIHBlZyRjMTIzID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIltcIiwgZmFsc2UpO1xuICAgIHZhciBwZWckYzEyNCA9IFwiXVwiO1xuICAgIHZhciBwZWckYzEyNSA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJdXCIsIGZhbHNlKTtcbiAgICB2YXIgcGVnJGMxMjYgPSBmdW5jdGlvbiAoc2VxdWVuY2UpIHsgcmV0dXJuIHNlcXVlbmNlOyB9O1xuICAgIHZhciBwZWckYzEyNyA9IFwiLFwiO1xuICAgIHZhciBwZWckYzEyOCA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCIsXCIsIGZhbHNlKTtcbiAgICB2YXIgcGVnJGMxMjkgPSBmdW5jdGlvbiAoZXhwciwgdGFpbCkge1xuICAgICAgICBpZiAoZXhwciA9PSBudWxsKVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBfZXhwcmVzc2lvbnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkFycmF5T3BlcmFuZFwiXShbXSk7XG4gICAgICAgIHZhciBhcnJheSA9IFtleHByXTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGFpbCkpIHtcbiAgICAgICAgICAgIHZhciBmbGF0dGVuID0gZmxhdHRlbkFycmF5KHRhaWwpO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDM7IGkgPCBmbGF0dGVuLmxlbmd0aDsgaSArPSA0KSB7XG4gICAgICAgICAgICAgICAgYXJyYXkucHVzaChmbGF0dGVuW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IF9leHByZXNzaW9uc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiQXJyYXlPcGVyYW5kXCJdKGFycmF5KTtcbiAgICB9O1xuICAgIHZhciBwZWckYzEzMCA9IFwidHJ1ZVwiO1xuICAgIHZhciBwZWckYzEzMSA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJ0cnVlXCIsIHRydWUpO1xuICAgIHZhciBwZWckYzEzMiA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRydWU7IH07XG4gICAgdmFyIHBlZyRjMTMzID0gXCJmYWxzZVwiO1xuICAgIHZhciBwZWckYzEzNCA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJmYWxzZVwiLCB0cnVlKTtcbiAgICB2YXIgcGVnJGMxMzUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBmYWxzZTsgfTtcbiAgICB2YXIgcGVnJGMxMzYgPSBcIjB4XCI7XG4gICAgdmFyIHBlZyRjMTM3ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIjB4XCIsIGZhbHNlKTtcbiAgICB2YXIgcGVnJGMxMzggPSBmdW5jdGlvbiAoKSB7IHJldHVybiBwYXJzZUludCh0ZXh0KCksIDE2KTsgfTtcbiAgICB2YXIgcGVnJGMxMzkgPSAvXltcXC1dLztcbiAgICB2YXIgcGVnJGMxNDAgPSBwZWckY2xhc3NFeHBlY3RhdGlvbihbXCItXCJdLCBmYWxzZSwgZmFsc2UpO1xuICAgIHZhciBwZWckYzE0MSA9IGZ1bmN0aW9uIChzaWduLCBudW0pIHsgcmV0dXJuIHNpZ24gPT0gbnVsbCA/IG51bSA6IC1udW07IH07XG4gICAgdmFyIHBlZyRjMTQyID0gXCIuXCI7XG4gICAgdmFyIHBlZyRjMTQzID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIi5cIiwgZmFsc2UpO1xuICAgIHZhciBwZWckYzE0NCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHBhcnNlRmxvYXQodGV4dCgpKTsgfTtcbiAgICB2YXIgcGVnJGMxNDUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBwYXJzZUludCh0ZXh0KCksIDEwKTsgfTtcbiAgICB2YXIgcGVnJGMxNDYgPSBcIjBcIjtcbiAgICB2YXIgcGVnJGMxNDcgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiMFwiLCBmYWxzZSk7XG4gICAgdmFyIHBlZyRjMTQ4ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gMDsgfTtcbiAgICB2YXIgcGVnJGMxNDkgPSBmdW5jdGlvbiAoY2hhcnMpIHsgcmV0dXJuIGNoYXJzLmpvaW4oXCJcIik7IH07XG4gICAgdmFyIHBlZyRjMTUwID0gXCJcXFxcJ1wiO1xuICAgIHZhciBwZWckYzE1MSA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJcXFxcJ1wiLCBmYWxzZSk7XG4gICAgdmFyIHBlZyRjMTUyID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gXCInXCI7IH07XG4gICAgdmFyIHBlZyRjMTUzID0gXCJcXFxcXFxcIlwiO1xuICAgIHZhciBwZWckYzE1NCA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJcXFxcXFxcIlwiLCBmYWxzZSk7XG4gICAgdmFyIHBlZyRjMTU1ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gXCJcXFwiXCI7IH07XG4gICAgdmFyIHBlZyRjMTU2ID0gL15bXlwiJ10vO1xuICAgIHZhciBwZWckYzE1NyA9IHBlZyRjbGFzc0V4cGVjdGF0aW9uKFtcIlxcXCJcIiwgXCInXCJdLCB0cnVlLCBmYWxzZSk7XG4gICAgdmFyIHBlZyRjMTU4ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGV4dCgpOyB9O1xuICAgIHZhciBwZWckYzE1OSA9IC9eW157fV0vO1xuICAgIHZhciBwZWckYzE2MCA9IHBlZyRjbGFzc0V4cGVjdGF0aW9uKFtcIntcIiwgXCJ9XCJdLCB0cnVlLCBmYWxzZSk7XG4gICAgdmFyIHBlZyRjMTYxID0gL15bMC05XS87XG4gICAgdmFyIHBlZyRjMTYyID0gcGVnJGNsYXNzRXhwZWN0YXRpb24oW1tcIjBcIiwgXCI5XCJdXSwgZmFsc2UsIGZhbHNlKTtcbiAgICB2YXIgcGVnJGMxNjMgPSAvXlsxLTldLztcbiAgICB2YXIgcGVnJGMxNjQgPSBwZWckY2xhc3NFeHBlY3RhdGlvbihbW1wiMVwiLCBcIjlcIl1dLCBmYWxzZSwgZmFsc2UpO1xuICAgIHZhciBwZWckYzE2NSA9IC9eW2EtekEtWl9dLztcbiAgICB2YXIgcGVnJGMxNjYgPSBwZWckY2xhc3NFeHBlY3RhdGlvbihbW1wiYVwiLCBcInpcIl0sIFtcIkFcIiwgXCJaXCJdLCBcIl9cIl0sIGZhbHNlLCBmYWxzZSk7XG4gICAgdmFyIHBlZyRjMTY3ID0gcGVnJG90aGVyRXhwZWN0YXRpb24oXCJ3aGl0ZXNwYWNlXCIpO1xuICAgIHZhciBwZWckYzE2OCA9IC9eWyBcXHRcXG5cXHJdLztcbiAgICB2YXIgcGVnJGMxNjkgPSBwZWckY2xhc3NFeHBlY3RhdGlvbihbXCIgXCIsIFwiXFx0XCIsIFwiXFxuXCIsIFwiXFxyXCJdLCBmYWxzZSwgZmFsc2UpO1xuICAgIHZhciBwZWckY3VyclBvcyA9IDA7XG4gICAgdmFyIHBlZyRzYXZlZFBvcyA9IDA7XG4gICAgdmFyIHBlZyRwb3NEZXRhaWxzQ2FjaGUgPSBbeyBsaW5lOiAxLCBjb2x1bW46IDEgfV07XG4gICAgdmFyIHBlZyRtYXhGYWlsUG9zID0gMDtcbiAgICB2YXIgcGVnJG1heEZhaWxFeHBlY3RlZCA9IFtdO1xuICAgIHZhciBwZWckc2lsZW50RmFpbHMgPSAwO1xuICAgIHZhciBwZWckcmVzdWx0c0NhY2hlID0ge307XG4gICAgdmFyIHBlZyRyZXN1bHQ7XG4gICAgaWYgKG9wdGlvbnMuc3RhcnRSdWxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKCEob3B0aW9ucy5zdGFydFJ1bGUgaW4gcGVnJHN0YXJ0UnVsZUZ1bmN0aW9ucykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbid0IHN0YXJ0IHBhcnNpbmcgZnJvbSBydWxlIFxcXCJcIiArIG9wdGlvbnMuc3RhcnRSdWxlICsgXCJcXFwiLlwiKTtcbiAgICAgICAgfVxuICAgICAgICBwZWckc3RhcnRSdWxlRnVuY3Rpb24gPSBwZWckc3RhcnRSdWxlRnVuY3Rpb25zW29wdGlvbnMuc3RhcnRSdWxlXTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdGV4dCgpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0LnN1YnN0cmluZyhwZWckc2F2ZWRQb3MsIHBlZyRjdXJyUG9zKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbG9jYXRpb24oKSB7XG4gICAgICAgIHJldHVybiBwZWckY29tcHV0ZUxvY2F0aW9uKHBlZyRzYXZlZFBvcywgcGVnJGN1cnJQb3MpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBleHBlY3RlZChkZXNjcmlwdGlvbiwgbG9jYXRpb24xKSB7XG4gICAgICAgIGxvY2F0aW9uMSA9IGxvY2F0aW9uMSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IGxvY2F0aW9uMVxuICAgICAgICAgICAgOiBwZWckY29tcHV0ZUxvY2F0aW9uKHBlZyRzYXZlZFBvcywgcGVnJGN1cnJQb3MpO1xuICAgICAgICB0aHJvdyBwZWckYnVpbGRTdHJ1Y3R1cmVkRXJyb3IoW3BlZyRvdGhlckV4cGVjdGF0aW9uKGRlc2NyaXB0aW9uKV0sIGlucHV0LnN1YnN0cmluZyhwZWckc2F2ZWRQb3MsIHBlZyRjdXJyUG9zKSwgbG9jYXRpb24xKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZXJyb3IobWVzc2FnZSwgbG9jYXRpb24xKSB7XG4gICAgICAgIGxvY2F0aW9uMSA9IGxvY2F0aW9uMSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IGxvY2F0aW9uMVxuICAgICAgICAgICAgOiBwZWckY29tcHV0ZUxvY2F0aW9uKHBlZyRzYXZlZFBvcywgcGVnJGN1cnJQb3MpO1xuICAgICAgICB0aHJvdyBwZWckYnVpbGRTaW1wbGVFcnJvcihtZXNzYWdlLCBsb2NhdGlvbjEpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKHRleHQxLCBpZ25vcmVDYXNlKSB7XG4gICAgICAgIHJldHVybiB7IHR5cGU6IFwibGl0ZXJhbFwiLCB0ZXh0OiB0ZXh0MSwgaWdub3JlQ2FzZTogaWdub3JlQ2FzZSB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBwZWckY2xhc3NFeHBlY3RhdGlvbihwYXJ0cywgaW52ZXJ0ZWQsIGlnbm9yZUNhc2UpIHtcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogXCJjbGFzc1wiLCBwYXJ0czogcGFydHMsIGludmVydGVkOiBpbnZlcnRlZCwgaWdub3JlQ2FzZTogaWdub3JlQ2FzZSB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBwZWckYW55RXhwZWN0YXRpb24oKSB7XG4gICAgICAgIHJldHVybiB7IHR5cGU6IFwiYW55XCIgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcGVnJGVuZEV4cGVjdGF0aW9uKCkge1xuICAgICAgICByZXR1cm4geyB0eXBlOiBcImVuZFwiIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBlZyRvdGhlckV4cGVjdGF0aW9uKGRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHJldHVybiB7IHR5cGU6IFwib3RoZXJcIiwgZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBlZyRjb21wdXRlUG9zRGV0YWlscyhwb3MpIHtcbiAgICAgICAgdmFyIGRldGFpbHMgPSBwZWckcG9zRGV0YWlsc0NhY2hlW3Bvc107XG4gICAgICAgIHZhciBwO1xuICAgICAgICBpZiAoZGV0YWlscykge1xuICAgICAgICAgICAgcmV0dXJuIGRldGFpbHM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBwID0gcG9zIC0gMTtcbiAgICAgICAgICAgIHdoaWxlICghcGVnJHBvc0RldGFpbHNDYWNoZVtwXSkge1xuICAgICAgICAgICAgICAgIHAtLTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRldGFpbHMgPSBwZWckcG9zRGV0YWlsc0NhY2hlW3BdO1xuICAgICAgICAgICAgZGV0YWlscyA9IHtcbiAgICAgICAgICAgICAgICBsaW5lOiBkZXRhaWxzLmxpbmUsXG4gICAgICAgICAgICAgICAgY29sdW1uOiBkZXRhaWxzLmNvbHVtblxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHdoaWxlIChwIDwgcG9zKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocCkgPT09IDEwKSB7XG4gICAgICAgICAgICAgICAgICAgIGRldGFpbHMubGluZSsrO1xuICAgICAgICAgICAgICAgICAgICBkZXRhaWxzLmNvbHVtbiA9IDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBkZXRhaWxzLmNvbHVtbisrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwZWckcG9zRGV0YWlsc0NhY2hlW3Bvc10gPSBkZXRhaWxzO1xuICAgICAgICAgICAgcmV0dXJuIGRldGFpbHM7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcGVnJGNvbXB1dGVMb2NhdGlvbihzdGFydFBvcywgZW5kUG9zKSB7XG4gICAgICAgIHZhciBzdGFydFBvc0RldGFpbHMgPSBwZWckY29tcHV0ZVBvc0RldGFpbHMoc3RhcnRQb3MpO1xuICAgICAgICB2YXIgZW5kUG9zRGV0YWlscyA9IHBlZyRjb21wdXRlUG9zRGV0YWlscyhlbmRQb3MpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3RhcnQ6IHtcbiAgICAgICAgICAgICAgICBvZmZzZXQ6IHN0YXJ0UG9zLFxuICAgICAgICAgICAgICAgIGxpbmU6IHN0YXJ0UG9zRGV0YWlscy5saW5lLFxuICAgICAgICAgICAgICAgIGNvbHVtbjogc3RhcnRQb3NEZXRhaWxzLmNvbHVtblxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuZDoge1xuICAgICAgICAgICAgICAgIG9mZnNldDogZW5kUG9zLFxuICAgICAgICAgICAgICAgIGxpbmU6IGVuZFBvc0RldGFpbHMubGluZSxcbiAgICAgICAgICAgICAgICBjb2x1bW46IGVuZFBvc0RldGFpbHMuY29sdW1uXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBlZyRmYWlsKGV4cGVjdGVkMSkge1xuICAgICAgICBpZiAocGVnJGN1cnJQb3MgPCBwZWckbWF4RmFpbFBvcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwZWckY3VyclBvcyA+IHBlZyRtYXhGYWlsUG9zKSB7XG4gICAgICAgICAgICBwZWckbWF4RmFpbFBvcyA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgICAgcGVnJG1heEZhaWxFeHBlY3RlZCA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIHBlZyRtYXhGYWlsRXhwZWN0ZWQucHVzaChleHBlY3RlZDEpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwZWckYnVpbGRTaW1wbGVFcnJvcihtZXNzYWdlLCBsb2NhdGlvbjEpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTeW50YXhFcnJvcihtZXNzYWdlLCBbXSwgXCJcIiwgbG9jYXRpb24xKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcGVnJGJ1aWxkU3RydWN0dXJlZEVycm9yKGV4cGVjdGVkMSwgZm91bmQsIGxvY2F0aW9uMSkge1xuICAgICAgICByZXR1cm4gbmV3IFN5bnRheEVycm9yKFN5bnRheEVycm9yLmJ1aWxkTWVzc2FnZShleHBlY3RlZDEsIGZvdW5kKSwgZXhwZWN0ZWQxLCBmb3VuZCwgbG9jYXRpb24xKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcGVnJHBhcnNlRXhwcmVzc2lvbigpIHtcbiAgICAgICAgdmFyIHMwLCBzMSwgczIsIHMzLCBzNCwgczUsIHM2LCBzNywgczg7XG4gICAgICAgIHZhciBrZXkgPSBwZWckY3VyclBvcyAqIDM0ICsgMDtcbiAgICAgICAgdmFyIGNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcbiAgICAgICAgaWYgKGNhY2hlZCkge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBjYWNoZWQubmV4dFBvcztcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICAgIHMxID0gcGVnJHBhcnNlXygpO1xuICAgICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHMyID0gcGVnJHBhcnNlTG9naWNPcigpO1xuICAgICAgICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgczMgPSBbXTtcbiAgICAgICAgICAgICAgICBzNCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgICAgICAgIHM1ID0gcGVnJHBhcnNlXygpO1xuICAgICAgICAgICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICBzNiA9IHBlZyRwYXJzZU9yU2lnbigpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoczYgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHM3ID0gcGVnJHBhcnNlXygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHM3ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgczggPSBwZWckcGFyc2VMb2dpY09yKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHM4ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHM1ID0gW3M1LCBzNiwgczcsIHM4XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczQgPSBzNTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHM0ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHM0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHM0ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBzNCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczQ7XG4gICAgICAgICAgICAgICAgICAgIHM0ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgd2hpbGUgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgIHMzLnB1c2goczQpO1xuICAgICAgICAgICAgICAgICAgICBzNCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgICAgICAgICAgICBzNSA9IHBlZyRwYXJzZV8oKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzNiA9IHBlZyRwYXJzZU9yU2lnbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHM2ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgczcgPSBwZWckcGFyc2VfKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHM3ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHM4ID0gcGVnJHBhcnNlTG9naWNPcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoczggIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHM1ID0gW3M1LCBzNiwgczcsIHM4XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHM0ID0gczU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHM0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczQgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHM0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzNCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzNCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHM0O1xuICAgICAgICAgICAgICAgICAgICAgICAgczQgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICBzNCA9IHBlZyRwYXJzZV8oKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHMxID0gcGVnJGMwKHMyLCBzMyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgICBwZWckcmVzdWx0c0NhY2hlW2tleV0gPSB7IG5leHRQb3M6IHBlZyRjdXJyUG9zLCByZXN1bHQ6IHMwIH07XG4gICAgICAgIHJldHVybiBzMDtcbiAgICB9XG4gICAgZnVuY3Rpb24gcGVnJHBhcnNlT3JTaWduKCkge1xuICAgICAgICB2YXIgczAsIHMxO1xuICAgICAgICB2YXIga2V5ID0gcGVnJGN1cnJQb3MgKiAzNCArIDE7XG4gICAgICAgIHZhciBjYWNoZWQgPSBwZWckcmVzdWx0c0NhY2hlW2tleV07XG4gICAgICAgIGlmIChjYWNoZWQpIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkLnJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCAyKSA9PT0gcGVnJGMxKSB7XG4gICAgICAgICAgICBzMSA9IHBlZyRjMTtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zICs9IDI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcGVnJGZhaWwocGVnJGMyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoczEgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDIpLnRvTG93ZXJDYXNlKCkgPT09IHBlZyRjMykge1xuICAgICAgICAgICAgICAgIHMxID0gaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCAyKTtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyArPSAyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcGVnJGZhaWwocGVnJGM0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICAgIHMxID0gcGVnJGM1KCk7XG4gICAgICAgIH1cbiAgICAgICAgczAgPSBzMTtcbiAgICAgICAgcGVnJHJlc3VsdHNDYWNoZVtrZXldID0geyBuZXh0UG9zOiBwZWckY3VyclBvcywgcmVzdWx0OiBzMCB9O1xuICAgICAgICByZXR1cm4gczA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBlZyRwYXJzZUxvZ2ljT3IoKSB7XG4gICAgICAgIHZhciBzMCwgczEsIHMyLCBzMywgczQsIHM1LCBzNiwgczc7XG4gICAgICAgIHZhciBrZXkgPSBwZWckY3VyclBvcyAqIDM0ICsgMjtcbiAgICAgICAgdmFyIGNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcbiAgICAgICAgaWYgKGNhY2hlZCkge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBjYWNoZWQubmV4dFBvcztcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICAgIHMxID0gcGVnJHBhcnNlTG9naWNBbmQoKTtcbiAgICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzMiA9IFtdO1xuICAgICAgICAgICAgczMgPSBwZWckY3VyclBvcztcbiAgICAgICAgICAgIHM0ID0gcGVnJHBhcnNlXygpO1xuICAgICAgICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgczUgPSBwZWckcGFyc2VBbmRTaWduKCk7XG4gICAgICAgICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgIHM2ID0gcGVnJHBhcnNlXygpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoczYgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHM3ID0gcGVnJHBhcnNlTG9naWNBbmQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzNyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHM0ID0gW3M0LCBzNSwgczYsIHM3XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMyA9IHM0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3aGlsZSAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBzMi5wdXNoKHMzKTtcbiAgICAgICAgICAgICAgICBzMyA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgICAgICAgIHM0ID0gcGVnJHBhcnNlXygpO1xuICAgICAgICAgICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICBzNSA9IHBlZyRwYXJzZUFuZFNpZ24oKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzNiA9IHBlZyRwYXJzZV8oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHM3ID0gcGVnJHBhcnNlTG9naWNBbmQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoczcgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczQgPSBbczQsIHM1LCBzNiwgczddO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMyA9IHM0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgICAgIHMxID0gcGVnJGMwKHMxLCBzMik7XG4gICAgICAgICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgICBwZWckcmVzdWx0c0NhY2hlW2tleV0gPSB7IG5leHRQb3M6IHBlZyRjdXJyUG9zLCByZXN1bHQ6IHMwIH07XG4gICAgICAgIHJldHVybiBzMDtcbiAgICB9XG4gICAgZnVuY3Rpb24gcGVnJHBhcnNlQW5kU2lnbigpIHtcbiAgICAgICAgdmFyIHMwLCBzMTtcbiAgICAgICAgdmFyIGtleSA9IHBlZyRjdXJyUG9zICogMzQgKyAzO1xuICAgICAgICB2YXIgY2FjaGVkID0gcGVnJHJlc3VsdHNDYWNoZVtrZXldO1xuICAgICAgICBpZiAoY2FjaGVkKSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IGNhY2hlZC5uZXh0UG9zO1xuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZC5yZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgczAgPSBwZWckY3VyclBvcztcbiAgICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMikgPT09IHBlZyRjNikge1xuICAgICAgICAgICAgczEgPSBwZWckYzY7XG4gICAgICAgICAgICBwZWckY3VyclBvcyArPSAyO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHBlZyRmYWlsKHBlZyRjNyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHMxID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCAzKS50b0xvd2VyQ2FzZSgpID09PSBwZWckYzgpIHtcbiAgICAgICAgICAgICAgICBzMSA9IGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMyk7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgKz0gMztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHBlZyRmYWlsKHBlZyRjOSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICBzMSA9IHBlZyRjMTAoKTtcbiAgICAgICAgfVxuICAgICAgICBzMCA9IHMxO1xuICAgICAgICBwZWckcmVzdWx0c0NhY2hlW2tleV0gPSB7IG5leHRQb3M6IHBlZyRjdXJyUG9zLCByZXN1bHQ6IHMwIH07XG4gICAgICAgIHJldHVybiBzMDtcbiAgICB9XG4gICAgZnVuY3Rpb24gcGVnJHBhcnNlTG9naWNBbmQoKSB7XG4gICAgICAgIHZhciBzMCwgczEsIHMyLCBzMywgczQsIHM1LCBzNiwgczc7XG4gICAgICAgIHZhciBrZXkgPSBwZWckY3VyclBvcyAqIDM0ICsgNDtcbiAgICAgICAgdmFyIGNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcbiAgICAgICAgaWYgKGNhY2hlZCkge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBjYWNoZWQubmV4dFBvcztcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICAgIHMxID0gcGVnJHBhcnNlQ29tcE9wcygpO1xuICAgICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHMyID0gW107XG4gICAgICAgICAgICBzMyA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgICAgczQgPSBwZWckcGFyc2VfKCk7XG4gICAgICAgICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBzNSA9IHBlZyRwYXJzZUNvbXBhcmFibGVPcGVyYXRvcnMoKTtcbiAgICAgICAgICAgICAgICBpZiAoczUgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgczYgPSBwZWckcGFyc2VfKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgczcgPSBwZWckcGFyc2VDb21wT3BzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoczcgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzNCA9IFtzNCwgczUsIHM2LCBzN107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgczMgPSBzNDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2hpbGUgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgczIucHVzaChzMyk7XG4gICAgICAgICAgICAgICAgczMgPSBwZWckY3VyclBvcztcbiAgICAgICAgICAgICAgICBzNCA9IHBlZyRwYXJzZV8oKTtcbiAgICAgICAgICAgICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgczUgPSBwZWckcGFyc2VDb21wYXJhYmxlT3BlcmF0b3JzKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgczYgPSBwZWckcGFyc2VfKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoczYgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzNyA9IHBlZyRwYXJzZUNvbXBPcHMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoczcgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczQgPSBbczQsIHM1LCBzNiwgczddO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMyA9IHM0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgICAgIHMxID0gcGVnJGMxMShzMSwgczIpO1xuICAgICAgICAgICAgICAgIHMwID0gczE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgICAgcGVnJHJlc3VsdHNDYWNoZVtrZXldID0geyBuZXh0UG9zOiBwZWckY3VyclBvcywgcmVzdWx0OiBzMCB9O1xuICAgICAgICByZXR1cm4gczA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBlZyRwYXJzZUNvbXBhcmFibGVPcGVyYXRvcnMoKSB7XG4gICAgICAgIHZhciBzMCwgczE7XG4gICAgICAgIHZhciBrZXkgPSBwZWckY3VyclBvcyAqIDM0ICsgNTtcbiAgICAgICAgdmFyIGNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcbiAgICAgICAgaWYgKGNhY2hlZCkge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBjYWNoZWQubmV4dFBvcztcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDIpID09PSBwZWckYzEyKSB7XG4gICAgICAgICAgICBzMSA9IHBlZyRjMTI7XG4gICAgICAgICAgICBwZWckY3VyclBvcyArPSAyO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHBlZyRmYWlsKHBlZyRjMTMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzMSA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMTEpLnRvTG93ZXJDYXNlKCkgPT09IHBlZyRjMTQpIHtcbiAgICAgICAgICAgICAgICBzMSA9IGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMTEpO1xuICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zICs9IDExO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcGVnJGZhaWwocGVnJGMxNSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICBzMSA9IHBlZyRjMTYoKTtcbiAgICAgICAgfVxuICAgICAgICBzMCA9IHMxO1xuICAgICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICAgICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCAyKSA9PT0gcGVnJGMxNykge1xuICAgICAgICAgICAgICAgIHMxID0gcGVnJGMxNztcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyArPSAyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcGVnJGZhaWwocGVnJGMxOCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHMxID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMTQpLnRvTG93ZXJDYXNlKCkgPT09IHBlZyRjMTkpIHtcbiAgICAgICAgICAgICAgICAgICAgczEgPSBpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDE0KTtcbiAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgKz0gMTQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRmYWlsKHBlZyRjMjApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICAgICAgczEgPSBwZWckYzIxKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICAgICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgczAgPSBwZWckY3VyclBvcztcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCAyKSA9PT0gcGVnJGMyMikge1xuICAgICAgICAgICAgICAgICAgICBzMSA9IHBlZyRjMjI7XG4gICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zICs9IDI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRmYWlsKHBlZyRjMjMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzMSA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA1KS50b0xvd2VyQ2FzZSgpID09PSBwZWckYzI0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzMSA9IGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyArPSA1O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRmYWlsKHBlZyRjMjUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgczEgPSBwZWckYzI2KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHMwID0gczE7XG4gICAgICAgICAgICAgICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gNjEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHMxID0gcGVnJGMyNztcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGZhaWwocGVnJGMyOCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHMxID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA1KS50b0xvd2VyQ2FzZSgpID09PSBwZWckYzI0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgczEgPSBpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zICs9IDU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWckZmFpbChwZWckYzI1KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHMxID0gcGVnJGMyNigpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHMwID0gczE7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgczAgPSBwZWckY3VyclBvcztcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDIpID09PSBwZWckYzI5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgczEgPSBwZWckYzI5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zICs9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWckZmFpbChwZWckYzMwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoczEgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA4KS50b0xvd2VyQ2FzZSgpID09PSBwZWckYzMxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMxID0gaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgKz0gODtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGZhaWwocGVnJGMzMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMSA9IHBlZyRjMzMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gczE7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gNjApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczEgPSBwZWckYzM0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWckZmFpbChwZWckYzM1KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoczEgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNCkudG9Mb3dlckNhc2UoKSA9PT0gcGVnJGMzNikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczEgPSBpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgKz0gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWckZmFpbChwZWckYzM3KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMxID0gcGVnJGMzOCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDYyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMSA9IHBlZyRjMzk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRmYWlsKHBlZyRjNDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzMSA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNykudG9Mb3dlckNhc2UoKSA9PT0gcGVnJGM0MSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMxID0gaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA3KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyArPSA3O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGZhaWwocGVnJGM0Mik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMSA9IHBlZyRjNDMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBwZWckcmVzdWx0c0NhY2hlW2tleV0gPSB7IG5leHRQb3M6IHBlZyRjdXJyUG9zLCByZXN1bHQ6IHMwIH07XG4gICAgICAgIHJldHVybiBzMDtcbiAgICB9XG4gICAgZnVuY3Rpb24gcGVnJHBhcnNlQ29tcE9wcygpIHtcbiAgICAgICAgdmFyIHMwLCBzMSwgczIsIHMzLCBzNCwgczUsIHM2LCBzNztcbiAgICAgICAgdmFyIGtleSA9IHBlZyRjdXJyUG9zICogMzQgKyA2O1xuICAgICAgICB2YXIgY2FjaGVkID0gcGVnJHJlc3VsdHNDYWNoZVtrZXldO1xuICAgICAgICBpZiAoY2FjaGVkKSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IGNhY2hlZC5uZXh0UG9zO1xuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZC5yZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgczAgPSBwZWckY3VyclBvcztcbiAgICAgICAgczEgPSBwZWckcGFyc2VQbHVzTWludXNPcHMoKTtcbiAgICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzMiA9IFtdO1xuICAgICAgICAgICAgczMgPSBwZWckY3VyclBvcztcbiAgICAgICAgICAgIHM0ID0gcGVnJHBhcnNlXygpO1xuICAgICAgICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgczUgPSBwZWckcGFyc2VQbHVzTWludXNTaWducygpO1xuICAgICAgICAgICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICBzNiA9IHBlZyRwYXJzZV8oKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHM2ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzNyA9IHBlZyRwYXJzZVBsdXNNaW51c09wcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHM3ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgczQgPSBbczQsIHM1LCBzNiwgczddO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMzID0gczQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdoaWxlIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHMyLnB1c2goczMpO1xuICAgICAgICAgICAgICAgIHMzID0gcGVnJGN1cnJQb3M7XG4gICAgICAgICAgICAgICAgczQgPSBwZWckcGFyc2VfKCk7XG4gICAgICAgICAgICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgIHM1ID0gcGVnJHBhcnNlUGx1c01pbnVzU2lnbnMoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzNiA9IHBlZyRwYXJzZV8oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHM3ID0gcGVnJHBhcnNlUGx1c01pbnVzT3BzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHM3ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHM0ID0gW3M0LCBzNSwgczYsIHM3XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczMgPSBzNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICBzMSA9IHBlZyRjMChzMSwgczIpO1xuICAgICAgICAgICAgICAgIHMwID0gczE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgICAgcGVnJHJlc3VsdHNDYWNoZVtrZXldID0geyBuZXh0UG9zOiBwZWckY3VyclBvcywgcmVzdWx0OiBzMCB9O1xuICAgICAgICByZXR1cm4gczA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBlZyRwYXJzZVBsdXNNaW51c1NpZ25zKCkge1xuICAgICAgICB2YXIgczAsIHMxO1xuICAgICAgICB2YXIga2V5ID0gcGVnJGN1cnJQb3MgKiAzNCArIDc7XG4gICAgICAgIHZhciBjYWNoZWQgPSBwZWckcmVzdWx0c0NhY2hlW2tleV07XG4gICAgICAgIGlmIChjYWNoZWQpIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkLnJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDQzKSB7XG4gICAgICAgICAgICBzMSA9IHBlZyRjNDQ7XG4gICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHBlZyRmYWlsKHBlZyRjNDUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICBzMSA9IHBlZyRjNDYoKTtcbiAgICAgICAgfVxuICAgICAgICBzMCA9IHMxO1xuICAgICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDQ1KSB7XG4gICAgICAgICAgICAgICAgczEgPSBwZWckYzQ3O1xuICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBwZWckZmFpbChwZWckYzQ4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICBzMSA9IHBlZyRjNDkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHMwID0gczE7XG4gICAgICAgIH1cbiAgICAgICAgcGVnJHJlc3VsdHNDYWNoZVtrZXldID0geyBuZXh0UG9zOiBwZWckY3VyclBvcywgcmVzdWx0OiBzMCB9O1xuICAgICAgICByZXR1cm4gczA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBlZyRwYXJzZVBsdXNNaW51c09wcygpIHtcbiAgICAgICAgdmFyIHMwLCBzMSwgczIsIHMzLCBzNCwgczUsIHM2LCBzNztcbiAgICAgICAgdmFyIGtleSA9IHBlZyRjdXJyUG9zICogMzQgKyA4O1xuICAgICAgICB2YXIgY2FjaGVkID0gcGVnJHJlc3VsdHNDYWNoZVtrZXldO1xuICAgICAgICBpZiAoY2FjaGVkKSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IGNhY2hlZC5uZXh0UG9zO1xuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZC5yZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgczAgPSBwZWckY3VyclBvcztcbiAgICAgICAgczEgPSBwZWckcGFyc2VNdWxEaXZPcHMoKTtcbiAgICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzMiA9IFtdO1xuICAgICAgICAgICAgczMgPSBwZWckY3VyclBvcztcbiAgICAgICAgICAgIHM0ID0gcGVnJHBhcnNlXygpO1xuICAgICAgICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgczUgPSBwZWckcGFyc2VNdWxEaXZTaWducygpO1xuICAgICAgICAgICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICBzNiA9IHBlZyRwYXJzZV8oKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHM2ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzNyA9IHBlZyRwYXJzZU11bERpdk9wcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHM3ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgczQgPSBbczQsIHM1LCBzNiwgczddO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMzID0gczQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdoaWxlIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHMyLnB1c2goczMpO1xuICAgICAgICAgICAgICAgIHMzID0gcGVnJGN1cnJQb3M7XG4gICAgICAgICAgICAgICAgczQgPSBwZWckcGFyc2VfKCk7XG4gICAgICAgICAgICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgIHM1ID0gcGVnJHBhcnNlTXVsRGl2U2lnbnMoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzNiA9IHBlZyRwYXJzZV8oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHM3ID0gcGVnJHBhcnNlTXVsRGl2T3BzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHM3ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHM0ID0gW3M0LCBzNSwgczYsIHM3XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczMgPSBzNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICBzMSA9IHBlZyRjMChzMSwgczIpO1xuICAgICAgICAgICAgICAgIHMwID0gczE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgICAgcGVnJHJlc3VsdHNDYWNoZVtrZXldID0geyBuZXh0UG9zOiBwZWckY3VyclBvcywgcmVzdWx0OiBzMCB9O1xuICAgICAgICByZXR1cm4gczA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBlZyRwYXJzZU11bERpdlNpZ25zKCkge1xuICAgICAgICB2YXIgczAsIHMxO1xuICAgICAgICB2YXIga2V5ID0gcGVnJGN1cnJQb3MgKiAzNCArIDk7XG4gICAgICAgIHZhciBjYWNoZWQgPSBwZWckcmVzdWx0c0NhY2hlW2tleV07XG4gICAgICAgIGlmIChjYWNoZWQpIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkLnJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDQyKSB7XG4gICAgICAgICAgICBzMSA9IHBlZyRjNTA7XG4gICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHBlZyRmYWlsKHBlZyRjNTEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICBzMSA9IHBlZyRjNTIoKTtcbiAgICAgICAgfVxuICAgICAgICBzMCA9IHMxO1xuICAgICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDQ3KSB7XG4gICAgICAgICAgICAgICAgczEgPSBwZWckYzUzO1xuICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBwZWckZmFpbChwZWckYzU0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICBzMSA9IHBlZyRjNTUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHMwID0gczE7XG4gICAgICAgICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gMzcpIHtcbiAgICAgICAgICAgICAgICAgICAgczEgPSBwZWckYzU2O1xuICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwZWckZmFpbChwZWckYzU3KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgIHMxID0gcGVnJGM1OCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHBlZyRyZXN1bHRzQ2FjaGVba2V5XSA9IHsgbmV4dFBvczogcGVnJGN1cnJQb3MsIHJlc3VsdDogczAgfTtcbiAgICAgICAgcmV0dXJuIHMwO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwZWckcGFyc2VNdWxEaXZPcHMoKSB7XG4gICAgICAgIHZhciBzMCwgczEsIHMyLCBzMywgczQsIHM1LCBzNiwgczc7XG4gICAgICAgIHZhciBrZXkgPSBwZWckY3VyclBvcyAqIDM0ICsgMTA7XG4gICAgICAgIHZhciBjYWNoZWQgPSBwZWckcmVzdWx0c0NhY2hlW2tleV07XG4gICAgICAgIGlmIChjYWNoZWQpIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkLnJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICBzMSA9IHBlZyRwYXJzZUJpbmFyeUZ1bmNPcCgpO1xuICAgICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHMyID0gW107XG4gICAgICAgICAgICBzMyA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgICAgczQgPSBwZWckcGFyc2VfKCk7XG4gICAgICAgICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBzNSA9IHBlZyRwYXJzZVBvd2VyU2lnbnMoKTtcbiAgICAgICAgICAgICAgICBpZiAoczUgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgczYgPSBwZWckcGFyc2VfKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgczcgPSBwZWckcGFyc2VCaW5hcnlGdW5jT3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzNyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHM0ID0gW3M0LCBzNSwgczYsIHM3XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMyA9IHM0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3aGlsZSAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBzMi5wdXNoKHMzKTtcbiAgICAgICAgICAgICAgICBzMyA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgICAgICAgIHM0ID0gcGVnJHBhcnNlXygpO1xuICAgICAgICAgICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICBzNSA9IHBlZyRwYXJzZVBvd2VyU2lnbnMoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzNiA9IHBlZyRwYXJzZV8oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHM3ID0gcGVnJHBhcnNlQmluYXJ5RnVuY09wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHM3ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHM0ID0gW3M0LCBzNSwgczYsIHM3XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczMgPSBzNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICBzMSA9IHBlZyRjMChzMSwgczIpO1xuICAgICAgICAgICAgICAgIHMwID0gczE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgICAgcGVnJHJlc3VsdHNDYWNoZVtrZXldID0geyBuZXh0UG9zOiBwZWckY3VyclBvcywgcmVzdWx0OiBzMCB9O1xuICAgICAgICByZXR1cm4gczA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBlZyRwYXJzZVBvd2VyU2lnbnMoKSB7XG4gICAgICAgIHZhciBzMCwgczE7XG4gICAgICAgIHZhciBrZXkgPSBwZWckY3VyclBvcyAqIDM0ICsgMTE7XG4gICAgICAgIHZhciBjYWNoZWQgPSBwZWckcmVzdWx0c0NhY2hlW2tleV07XG4gICAgICAgIGlmIChjYWNoZWQpIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkLnJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDk0KSB7XG4gICAgICAgICAgICBzMSA9IHBlZyRjNTk7XG4gICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHBlZyRmYWlsKHBlZyRjNjApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzMSA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNSkudG9Mb3dlckNhc2UoKSA9PT0gcGVnJGM2MSkge1xuICAgICAgICAgICAgICAgIHMxID0gaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA1KTtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyArPSA1O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcGVnJGZhaWwocGVnJGM2Mik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICBzMSA9IHBlZyRjNjMoKTtcbiAgICAgICAgfVxuICAgICAgICBzMCA9IHMxO1xuICAgICAgICBwZWckcmVzdWx0c0NhY2hlW2tleV0gPSB7IG5leHRQb3M6IHBlZyRjdXJyUG9zLCByZXN1bHQ6IHMwIH07XG4gICAgICAgIHJldHVybiBzMDtcbiAgICB9XG4gICAgZnVuY3Rpb24gcGVnJHBhcnNlQmluYXJ5RnVuY09wKCkge1xuICAgICAgICB2YXIgczAsIHMxLCBzMiwgczMsIHM0LCBzNSwgczYsIHM3O1xuICAgICAgICB2YXIga2V5ID0gcGVnJGN1cnJQb3MgKiAzNCArIDEyO1xuICAgICAgICB2YXIgY2FjaGVkID0gcGVnJHJlc3VsdHNDYWNoZVtrZXldO1xuICAgICAgICBpZiAoY2FjaGVkKSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IGNhY2hlZC5uZXh0UG9zO1xuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZC5yZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgczAgPSBwZWckY3VyclBvcztcbiAgICAgICAgczEgPSBwZWckcGFyc2VGYWN0b3IoKTtcbiAgICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzMiA9IFtdO1xuICAgICAgICAgICAgczMgPSBwZWckY3VyclBvcztcbiAgICAgICAgICAgIHM0ID0gcGVnJHBhcnNlXygpO1xuICAgICAgICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgczUgPSBwZWckcGFyc2VCaW5GdW5jdGlvbnMoKTtcbiAgICAgICAgICAgICAgICBpZiAoczUgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgczYgPSBwZWckcGFyc2VfKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgczcgPSBwZWckcGFyc2VGYWN0b3IoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzNyA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHM3ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzNyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHM0ID0gW3M0LCBzNSwgczYsIHM3XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMyA9IHM0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3aGlsZSAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBzMi5wdXNoKHMzKTtcbiAgICAgICAgICAgICAgICBzMyA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgICAgICAgIHM0ID0gcGVnJHBhcnNlXygpO1xuICAgICAgICAgICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICBzNSA9IHBlZyRwYXJzZUJpbkZ1bmN0aW9ucygpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoczUgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHM2ID0gcGVnJHBhcnNlXygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHM2ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgczcgPSBwZWckcGFyc2VGYWN0b3IoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoczcgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczcgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoczcgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczQgPSBbczQsIHM1LCBzNiwgczddO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMyA9IHM0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgICAgIHMxID0gcGVnJGMxMShzMSwgczIpO1xuICAgICAgICAgICAgICAgIHMwID0gczE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgICAgcGVnJHJlc3VsdHNDYWNoZVtrZXldID0geyBuZXh0UG9zOiBwZWckY3VyclBvcywgcmVzdWx0OiBzMCB9O1xuICAgICAgICByZXR1cm4gczA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBlZyRwYXJzZUJpbkZ1bmN0aW9ucygpIHtcbiAgICAgICAgdmFyIHMwLCBzMTtcbiAgICAgICAgdmFyIGtleSA9IHBlZyRjdXJyUG9zICogMzQgKyAxMztcbiAgICAgICAgdmFyIGNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcbiAgICAgICAgaWYgKGNhY2hlZCkge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBjYWNoZWQubmV4dFBvcztcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDIpID09PSBwZWckYzY0KSB7XG4gICAgICAgICAgICBzMSA9IHBlZyRjNjQ7XG4gICAgICAgICAgICBwZWckY3VyclBvcyArPSAyO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHBlZyRmYWlsKHBlZyRjNjUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzMSA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgOCkudG9Mb3dlckNhc2UoKSA9PT0gcGVnJGM2Nikge1xuICAgICAgICAgICAgICAgIHMxID0gaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA4KTtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyArPSA4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcGVnJGZhaWwocGVnJGM2Nyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHMxID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNykudG9Mb3dlckNhc2UoKSA9PT0gcGVnJGM2OCkge1xuICAgICAgICAgICAgICAgICAgICBzMSA9IGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNyk7XG4gICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zICs9IDc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRmYWlsKHBlZyRjNjkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICBzMSA9IHBlZyRjNzAoKTtcbiAgICAgICAgfVxuICAgICAgICBzMCA9IHMxO1xuICAgICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICAgICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCAxMSkudG9Mb3dlckNhc2UoKSA9PT0gcGVnJGM3MSkge1xuICAgICAgICAgICAgICAgIHMxID0gaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCAxMSk7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgKz0gMTE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBwZWckZmFpbChwZWckYzcyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoczEgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCAxMCkudG9Mb3dlckNhc2UoKSA9PT0gcGVnJGM3Mykge1xuICAgICAgICAgICAgICAgICAgICBzMSA9IGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMTApO1xuICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyArPSAxMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGZhaWwocGVnJGM3NCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICBzMSA9IHBlZyRjNzUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHMwID0gczE7XG4gICAgICAgICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgICAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDUpLnRvTG93ZXJDYXNlKCkgPT09IHBlZyRjNzYpIHtcbiAgICAgICAgICAgICAgICAgICAgczEgPSBpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDUpO1xuICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyArPSA1O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwZWckZmFpbChwZWckYzc3KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgIHMxID0gcGVnJGM3OCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICAgICAgICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA1KS50b0xvd2VyQ2FzZSgpID09PSBwZWckYzc5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzMSA9IGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyArPSA1O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRmYWlsKHBlZyRjODApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgICAgICBzMSA9IHBlZyRjODEoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBwZWckcmVzdWx0c0NhY2hlW2tleV0gPSB7IG5leHRQb3M6IHBlZyRjdXJyUG9zLCByZXN1bHQ6IHMwIH07XG4gICAgICAgIHJldHVybiBzMDtcbiAgICB9XG4gICAgZnVuY3Rpb24gcGVnJHBhcnNlRmFjdG9yKCkge1xuICAgICAgICB2YXIgczAsIHMxLCBzMiwgczMsIHM0LCBzNTtcbiAgICAgICAgdmFyIGtleSA9IHBlZyRjdXJyUG9zICogMzQgKyAxNDtcbiAgICAgICAgdmFyIGNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcbiAgICAgICAgaWYgKGNhY2hlZCkge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBjYWNoZWQubmV4dFBvcztcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gNDApIHtcbiAgICAgICAgICAgIHMxID0gcGVnJGM4MjtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcGVnJGZhaWwocGVnJGM4Myk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzMiA9IHBlZyRwYXJzZV8oKTtcbiAgICAgICAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHMzID0gcGVnJHBhcnNlRXhwcmVzc2lvbigpO1xuICAgICAgICAgICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICBzNCA9IHBlZyRwYXJzZV8oKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDQxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgczUgPSBwZWckYzg0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzNSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWckZmFpbChwZWckYzg1KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoczUgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzNSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoczUgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMSA9IHBlZyRjODYoczMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gczE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzMCA9IHBlZyRwYXJzZUZ1bmN0aW9uT3AoKTtcbiAgICAgICAgICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHMwID0gcGVnJHBhcnNlVW5hcnlGdW5jdGlvbk9wKCk7XG4gICAgICAgICAgICAgICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJHBhcnNlQXRvbSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJHBhcnNlQXJyYXlPcCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHBlZyRyZXN1bHRzQ2FjaGVba2V5XSA9IHsgbmV4dFBvczogcGVnJGN1cnJQb3MsIHJlc3VsdDogczAgfTtcbiAgICAgICAgcmV0dXJuIHMwO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwZWckcGFyc2VGdW5jdGlvbk9wKCkge1xuICAgICAgICB2YXIgczAsIHMxLCBzMiwgczMsIHM0O1xuICAgICAgICB2YXIga2V5ID0gcGVnJGN1cnJQb3MgKiAzNCArIDE1O1xuICAgICAgICB2YXIgY2FjaGVkID0gcGVnJHJlc3VsdHNDYWNoZVtrZXldO1xuICAgICAgICBpZiAoY2FjaGVkKSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IGNhY2hlZC5uZXh0UG9zO1xuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZC5yZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgczAgPSBwZWckY3VyclBvcztcbiAgICAgICAgczEgPSBwZWckcGFyc2VMZXR0ZXJzQW5kRGlnaXRzKCk7XG4gICAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA0MCkge1xuICAgICAgICAgICAgICAgIHMyID0gcGVnJGM4MjtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgczIgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcGVnJGZhaWwocGVnJGM4Myk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgczMgPSBwZWckcGFyc2VTZXF1ZW5jZSgpO1xuICAgICAgICAgICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDQxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzNCA9IHBlZyRjODQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgczQgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRmYWlsKHBlZyRjODUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChzNCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgczQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgICAgICBzMSA9IHBlZyRjODcoczEsIHMzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gczE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICAgIHBlZyRyZXN1bHRzQ2FjaGVba2V5XSA9IHsgbmV4dFBvczogcGVnJGN1cnJQb3MsIHJlc3VsdDogczAgfTtcbiAgICAgICAgcmV0dXJuIHMwO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwZWckcGFyc2VVbmFyeUZ1bmN0aW9uT3AoKSB7XG4gICAgICAgIHZhciBzMCwgczEsIHMyLCBzMztcbiAgICAgICAgdmFyIGtleSA9IHBlZyRjdXJyUG9zICogMzQgKyAxNjtcbiAgICAgICAgdmFyIGNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcbiAgICAgICAgaWYgKGNhY2hlZCkge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBjYWNoZWQubmV4dFBvcztcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gMzMpIHtcbiAgICAgICAgICAgIHMxID0gcGVnJGM4ODtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcGVnJGZhaWwocGVnJGM4OSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHMxID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA2KS50b0xvd2VyQ2FzZSgpID09PSBwZWckYzkwKSB7XG4gICAgICAgICAgICAgICAgczEgPSBpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDYpO1xuICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zICs9IDY7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBwZWckZmFpbChwZWckYzkxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzMiA9IHBlZyRwYXJzZV8oKTtcbiAgICAgICAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHMzID0gcGVnJHBhcnNlRXhwcmVzc2lvbigpO1xuICAgICAgICAgICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgczEgPSBwZWckYzkyKHMzKTtcbiAgICAgICAgICAgICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgICAgczEgPSBwZWckcGFyc2VBdG9tKCk7XG4gICAgICAgICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBzMiA9IHBlZyRwYXJzZV8oKTtcbiAgICAgICAgICAgICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgczMgPSBwZWckcGFyc2VVbkZ1bmN0aW9ucygpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgICAgICAgczEgPSBwZWckYzkzKHMxLCBzMyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHBlZyRyZXN1bHRzQ2FjaGVba2V5XSA9IHsgbmV4dFBvczogcGVnJGN1cnJQb3MsIHJlc3VsdDogczAgfTtcbiAgICAgICAgcmV0dXJuIHMwO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwZWckcGFyc2VVbkZ1bmN0aW9ucygpIHtcbiAgICAgICAgdmFyIHMwLCBzMTtcbiAgICAgICAgdmFyIGtleSA9IHBlZyRjdXJyUG9zICogMzQgKyAxNztcbiAgICAgICAgdmFyIGNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcbiAgICAgICAgaWYgKGNhY2hlZCkge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBjYWNoZWQubmV4dFBvcztcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDUpLnRvTG93ZXJDYXNlKCkgPT09IHBlZyRjOTQpIHtcbiAgICAgICAgICAgIHMxID0gaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA1KTtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zICs9IDU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcGVnJGZhaWwocGVnJGM5NSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICAgIHMxID0gcGVnJGM5NigpO1xuICAgICAgICB9XG4gICAgICAgIHMwID0gczE7XG4gICAgICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczAgPSBwZWckY3VyclBvcztcbiAgICAgICAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDgpLnRvTG93ZXJDYXNlKCkgPT09IHBlZyRjOTcpIHtcbiAgICAgICAgICAgICAgICBzMSA9IGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgOCk7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgKz0gODtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHBlZyRmYWlsKHBlZyRjOTgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgICAgIHMxID0gcGVnJGM5OSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgfVxuICAgICAgICBwZWckcmVzdWx0c0NhY2hlW2tleV0gPSB7IG5leHRQb3M6IHBlZyRjdXJyUG9zLCByZXN1bHQ6IHMwIH07XG4gICAgICAgIHJldHVybiBzMDtcbiAgICB9XG4gICAgZnVuY3Rpb24gcGVnJHBhcnNlQXRvbSgpIHtcbiAgICAgICAgdmFyIHMwLCBzMSwgczIsIHMzLCBzNDtcbiAgICAgICAgdmFyIGtleSA9IHBlZyRjdXJyUG9zICogMzQgKyAxODtcbiAgICAgICAgdmFyIGNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcbiAgICAgICAgaWYgKGNhY2hlZCkge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBjYWNoZWQubmV4dFBvcztcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICAgIHMxID0gcGVnJHBhcnNlXygpO1xuICAgICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDkpID09PSBwZWckYzEwMCkge1xuICAgICAgICAgICAgICAgIHMyID0gcGVnJGMxMDA7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgKz0gOTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHMyID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHBlZyRmYWlsKHBlZyRjMTAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoczIgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA0KSA9PT0gcGVnJGMxMDIpIHtcbiAgICAgICAgICAgICAgICAgICAgczIgPSBwZWckYzEwMjtcbiAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgKz0gNDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHMyID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGZhaWwocGVnJGMxMDMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICAgICAgczEgPSBwZWckYzEwNCgpO1xuICAgICAgICAgICAgICAgIHMwID0gczE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgICAgczEgPSBwZWckcGFyc2VfKCk7XG4gICAgICAgICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBzMiA9IHBlZyRwYXJzZUNvbnN0VmFsdWUoKTtcbiAgICAgICAgICAgICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgIHMxID0gcGVnJGMxMDUoczIpO1xuICAgICAgICAgICAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgczAgPSBwZWckY3VyclBvcztcbiAgICAgICAgICAgICAgICBzMSA9IHBlZyRwYXJzZV8oKTtcbiAgICAgICAgICAgICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSAxMjMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHMyID0gcGVnJGMxMDY7XG4gICAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgczIgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRmYWlsKHBlZyRjMTA3KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHMzID0gcGVnJHBhcnNlVmFsdWVJbnB1dCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSAxMjUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczQgPSBwZWckYzEwODtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHM0ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGZhaWwocGVnJGMxMDkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczEgPSBwZWckYzExMChzMyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gczE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHBlZyRyZXN1bHRzQ2FjaGVba2V5XSA9IHsgbmV4dFBvczogcGVnJGN1cnJQb3MsIHJlc3VsdDogczAgfTtcbiAgICAgICAgcmV0dXJuIHMwO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwZWckcGFyc2VDb25zdFZhbHVlKCkge1xuICAgICAgICB2YXIgczAsIHMxLCBzMiwgczM7XG4gICAgICAgIHZhciBrZXkgPSBwZWckY3VyclBvcyAqIDM0ICsgMTk7XG4gICAgICAgIHZhciBjYWNoZWQgPSBwZWckcmVzdWx0c0NhY2hlW2tleV07XG4gICAgICAgIGlmIChjYWNoZWQpIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkLnJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICBzMSA9IHBlZyRwYXJzZUxvZ2ljVmFsdWUoKTtcbiAgICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICAgIHMxID0gcGVnJGMxMTEoczEpO1xuICAgICAgICB9XG4gICAgICAgIHMwID0gczE7XG4gICAgICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczAgPSBwZWckY3VyclBvcztcbiAgICAgICAgICAgIHMxID0gcGVnJHBhcnNlQXJpdGhtZXRpY1ZhbHVlKCk7XG4gICAgICAgICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICBzMSA9IHBlZyRjMTExKHMxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHMwID0gczE7XG4gICAgICAgICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgICAgICAgIHMxID0gcGVnJHBhcnNlTGV0dGVyc0FuZERpZ2l0cygpO1xuICAgICAgICAgICAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgczEgPSBwZWckYzExMShzMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHMwID0gczE7XG4gICAgICAgICAgICAgICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDIpID09PSBwZWckYzExMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgczEgPSBwZWckYzExMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zICs9IDI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGZhaWwocGVnJGMxMTMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgICAgICBzMSA9IHBlZyRjMTE0KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMikgPT09IHBlZyRjMTE1KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgczEgPSBwZWckYzExNTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyArPSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGZhaWwocGVnJGMxMTYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMxID0gcGVnJGMxMTQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gczE7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gMzkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczEgPSBwZWckYzExNztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGZhaWwocGVnJGMxMTgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMiA9IHBlZyRwYXJzZUFueUlucHV0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSAzOSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMzID0gcGVnJGMxMTc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRmYWlsKHBlZyRjMTE4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMSA9IHBlZyRjMTE5KHMyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDM0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMSA9IHBlZyRjMTIwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWckZmFpbChwZWckYzEyMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMiA9IHBlZyRwYXJzZUFueUlucHV0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDM0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMzID0gcGVnJGMxMjA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRmYWlsKHBlZyRjMTIxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMxID0gcGVnJGMxMTkoczIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBwZWckcmVzdWx0c0NhY2hlW2tleV0gPSB7IG5leHRQb3M6IHBlZyRjdXJyUG9zLCByZXN1bHQ6IHMwIH07XG4gICAgICAgIHJldHVybiBzMDtcbiAgICB9XG4gICAgZnVuY3Rpb24gcGVnJHBhcnNlQXJyYXlPcCgpIHtcbiAgICAgICAgdmFyIHMwLCBzMSwgczIsIHMzO1xuICAgICAgICB2YXIga2V5ID0gcGVnJGN1cnJQb3MgKiAzNCArIDIwO1xuICAgICAgICB2YXIgY2FjaGVkID0gcGVnJHJlc3VsdHNDYWNoZVtrZXldO1xuICAgICAgICBpZiAoY2FjaGVkKSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IGNhY2hlZC5uZXh0UG9zO1xuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZC5yZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgczAgPSBwZWckY3VyclBvcztcbiAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA5MSkge1xuICAgICAgICAgICAgczEgPSBwZWckYzEyMjtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcGVnJGZhaWwocGVnJGMxMjMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczIgPSBwZWckcGFyc2VTZXF1ZW5jZSgpO1xuICAgICAgICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA5Mykge1xuICAgICAgICAgICAgICAgICAgICBzMyA9IHBlZyRjMTI0O1xuICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwZWckZmFpbChwZWckYzEyNSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgICBzMSA9IHBlZyRjMTI2KHMyKTtcbiAgICAgICAgICAgICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgICAgcGVnJHJlc3VsdHNDYWNoZVtrZXldID0geyBuZXh0UG9zOiBwZWckY3VyclBvcywgcmVzdWx0OiBzMCB9O1xuICAgICAgICByZXR1cm4gczA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBlZyRwYXJzZVNlcXVlbmNlKCkge1xuICAgICAgICB2YXIgczAsIHMxLCBzMiwgczMsIHM0LCBzNSwgczYsIHM3O1xuICAgICAgICB2YXIga2V5ID0gcGVnJGN1cnJQb3MgKiAzNCArIDIxO1xuICAgICAgICB2YXIgY2FjaGVkID0gcGVnJHJlc3VsdHNDYWNoZVtrZXldO1xuICAgICAgICBpZiAoY2FjaGVkKSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IGNhY2hlZC5uZXh0UG9zO1xuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZC5yZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgczAgPSBwZWckY3VyclBvcztcbiAgICAgICAgczEgPSBwZWckcGFyc2VFeHByZXNzaW9uKCk7XG4gICAgICAgIGlmIChzMSA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczEgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczIgPSBbXTtcbiAgICAgICAgICAgIHMzID0gcGVnJGN1cnJQb3M7XG4gICAgICAgICAgICBzNCA9IHBlZyRwYXJzZV8oKTtcbiAgICAgICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gNDQpIHtcbiAgICAgICAgICAgICAgICAgICAgczUgPSBwZWckYzEyNztcbiAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHM1ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGZhaWwocGVnJGMxMjgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICBzNiA9IHBlZyRwYXJzZV8oKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHM2ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzNyA9IHBlZyRwYXJzZUV4cHJlc3Npb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzNyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHM0ID0gW3M0LCBzNSwgczYsIHM3XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMyA9IHM0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3aGlsZSAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBzMi5wdXNoKHMzKTtcbiAgICAgICAgICAgICAgICBzMyA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgICAgICAgIHM0ID0gcGVnJHBhcnNlXygpO1xuICAgICAgICAgICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDQ0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzNSA9IHBlZyRjMTI3O1xuICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHM1ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWckZmFpbChwZWckYzEyOCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzNiA9IHBlZyRwYXJzZV8oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHM3ID0gcGVnJHBhcnNlRXhwcmVzc2lvbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzNyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzNCA9IFtzNCwgczUsIHM2LCBzN107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMzID0gczQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICAgICAgczEgPSBwZWckYzEyOShzMSwgczIpO1xuICAgICAgICAgICAgICAgIHMwID0gczE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgICAgcGVnJHJlc3VsdHNDYWNoZVtrZXldID0geyBuZXh0UG9zOiBwZWckY3VyclBvcywgcmVzdWx0OiBzMCB9O1xuICAgICAgICByZXR1cm4gczA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBlZyRwYXJzZUxvZ2ljVmFsdWUoKSB7XG4gICAgICAgIHZhciBzMCwgczE7XG4gICAgICAgIHZhciBrZXkgPSBwZWckY3VyclBvcyAqIDM0ICsgMjI7XG4gICAgICAgIHZhciBjYWNoZWQgPSBwZWckcmVzdWx0c0NhY2hlW2tleV07XG4gICAgICAgIGlmIChjYWNoZWQpIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkLnJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA0KS50b0xvd2VyQ2FzZSgpID09PSBwZWckYzEzMCkge1xuICAgICAgICAgICAgczEgPSBpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDQpO1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgKz0gNDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHtcbiAgICAgICAgICAgICAgICBwZWckZmFpbChwZWckYzEzMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICAgIHMxID0gcGVnJGMxMzIoKTtcbiAgICAgICAgfVxuICAgICAgICBzMCA9IHMxO1xuICAgICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICAgICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA1KS50b0xvd2VyQ2FzZSgpID09PSBwZWckYzEzMykge1xuICAgICAgICAgICAgICAgIHMxID0gaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA1KTtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyArPSA1O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcGVnJGZhaWwocGVnJGMxMzQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgICAgIHMxID0gcGVnJGMxMzUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHMwID0gczE7XG4gICAgICAgIH1cbiAgICAgICAgcGVnJHJlc3VsdHNDYWNoZVtrZXldID0geyBuZXh0UG9zOiBwZWckY3VyclBvcywgcmVzdWx0OiBzMCB9O1xuICAgICAgICByZXR1cm4gczA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBlZyRwYXJzZUFyaXRobWV0aWNWYWx1ZSgpIHtcbiAgICAgICAgdmFyIHMwLCBzMSwgczI7XG4gICAgICAgIHZhciBrZXkgPSBwZWckY3VyclBvcyAqIDM0ICsgMjM7XG4gICAgICAgIHZhciBjYWNoZWQgPSBwZWckcmVzdWx0c0NhY2hlW2tleV07XG4gICAgICAgIGlmIChjYWNoZWQpIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkLnJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCAyKSA9PT0gcGVnJGMxMzYpIHtcbiAgICAgICAgICAgIHMxID0gcGVnJGMxMzY7XG4gICAgICAgICAgICBwZWckY3VyclBvcyArPSAyO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHBlZyRmYWlsKHBlZyRjMTM3KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHMyID0gcGVnJHBhcnNlRGlnaXRzKCk7XG4gICAgICAgICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICBzMSA9IHBlZyRjMTM4KCk7XG4gICAgICAgICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICAgICAgICBpZiAocGVnJGMxMzkudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgICAgICAgICAgIHMxID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcGVnJGZhaWwocGVnJGMxNDApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzMSA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHMxID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHMyID0gcGVnJHBhcnNlTnVtYmVyKCk7XG4gICAgICAgICAgICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgICBzMSA9IHBlZyRjMTQxKHMxLCBzMik7XG4gICAgICAgICAgICAgICAgICAgIHMwID0gczE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcGVnJHJlc3VsdHNDYWNoZVtrZXldID0geyBuZXh0UG9zOiBwZWckY3VyclBvcywgcmVzdWx0OiBzMCB9O1xuICAgICAgICByZXR1cm4gczA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBlZyRwYXJzZU51bWJlcigpIHtcbiAgICAgICAgdmFyIHMwLCBzMSwgczIsIHMzO1xuICAgICAgICB2YXIga2V5ID0gcGVnJGN1cnJQb3MgKiAzNCArIDI0O1xuICAgICAgICB2YXIgY2FjaGVkID0gcGVnJHJlc3VsdHNDYWNoZVtrZXldO1xuICAgICAgICBpZiAoY2FjaGVkKSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IGNhY2hlZC5uZXh0UG9zO1xuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZC5yZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgczAgPSBwZWckY3VyclBvcztcbiAgICAgICAgczEgPSBwZWckcGFyc2VEaWdpdHMoKTtcbiAgICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDQ2KSB7XG4gICAgICAgICAgICAgICAgczIgPSBwZWckYzE0MjtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgczIgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcGVnJGZhaWwocGVnJGMxNDMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHMzID0gcGVnJHBhcnNlRGlnaXRzKCk7XG4gICAgICAgICAgICAgICAgaWYgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgICBzMSA9IHBlZyRjMTQ0KCk7XG4gICAgICAgICAgICAgICAgICAgIHMwID0gczE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczAgPSBwZWckY3VyclBvcztcbiAgICAgICAgICAgIHMxID0gcGVnJHBhcnNlTm9uWmVyb0RpZ2l0cygpO1xuICAgICAgICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgczIgPSBwZWckcGFyc2VEaWdpdHMoKTtcbiAgICAgICAgICAgICAgICBpZiAoczIgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgczIgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgIHMxID0gcGVnJGMxNDUoKTtcbiAgICAgICAgICAgICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICAgICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA0OCkge1xuICAgICAgICAgICAgICAgICAgICBzMSA9IHBlZyRjMTQ2O1xuICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwZWckZmFpbChwZWckYzE0Nyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgICBzMSA9IHBlZyRjMTQ4KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHMwID0gczE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcGVnJHJlc3VsdHNDYWNoZVtrZXldID0geyBuZXh0UG9zOiBwZWckY3VyclBvcywgcmVzdWx0OiBzMCB9O1xuICAgICAgICByZXR1cm4gczA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBlZyRwYXJzZVZhbHVlSW5wdXQoKSB7XG4gICAgICAgIHZhciBzMCwgczEsIHMyO1xuICAgICAgICB2YXIga2V5ID0gcGVnJGN1cnJQb3MgKiAzNCArIDI1O1xuICAgICAgICB2YXIgY2FjaGVkID0gcGVnJHJlc3VsdHNDYWNoZVtrZXldO1xuICAgICAgICBpZiAoY2FjaGVkKSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IGNhY2hlZC5uZXh0UG9zO1xuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZC5yZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgczAgPSBwZWckY3VyclBvcztcbiAgICAgICAgczEgPSBbXTtcbiAgICAgICAgczIgPSBwZWckcGFyc2VWYWx1ZUNoYXJhY3RlcnMoKTtcbiAgICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICB3aGlsZSAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBzMS5wdXNoKHMyKTtcbiAgICAgICAgICAgICAgICBzMiA9IHBlZyRwYXJzZVZhbHVlQ2hhcmFjdGVycygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICBzMSA9IHBlZyRjMTQ5KHMxKTtcbiAgICAgICAgfVxuICAgICAgICBzMCA9IHMxO1xuICAgICAgICBwZWckcmVzdWx0c0NhY2hlW2tleV0gPSB7IG5leHRQb3M6IHBlZyRjdXJyUG9zLCByZXN1bHQ6IHMwIH07XG4gICAgICAgIHJldHVybiBzMDtcbiAgICB9XG4gICAgZnVuY3Rpb24gcGVnJHBhcnNlQW55SW5wdXQoKSB7XG4gICAgICAgIHZhciBzMCwgczEsIHMyO1xuICAgICAgICB2YXIga2V5ID0gcGVnJGN1cnJQb3MgKiAzNCArIDI2O1xuICAgICAgICB2YXIgY2FjaGVkID0gcGVnJHJlc3VsdHNDYWNoZVtrZXldO1xuICAgICAgICBpZiAoY2FjaGVkKSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IGNhY2hlZC5uZXh0UG9zO1xuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZC5yZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgczAgPSBwZWckY3VyclBvcztcbiAgICAgICAgczEgPSBbXTtcbiAgICAgICAgczIgPSBwZWckcGFyc2VBbnlDaGFyYWN0ZXJzKCk7XG4gICAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgd2hpbGUgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgczEucHVzaChzMik7XG4gICAgICAgICAgICAgICAgczIgPSBwZWckcGFyc2VBbnlDaGFyYWN0ZXJzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICAgIHMxID0gcGVnJGMxNDkoczEpO1xuICAgICAgICB9XG4gICAgICAgIHMwID0gczE7XG4gICAgICAgIHBlZyRyZXN1bHRzQ2FjaGVba2V5XSA9IHsgbmV4dFBvczogcGVnJGN1cnJQb3MsIHJlc3VsdDogczAgfTtcbiAgICAgICAgcmV0dXJuIHMwO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwZWckcGFyc2VBbnlDaGFyYWN0ZXJzKCkge1xuICAgICAgICB2YXIgczAsIHMxO1xuICAgICAgICB2YXIga2V5ID0gcGVnJGN1cnJQb3MgKiAzNCArIDI3O1xuICAgICAgICB2YXIgY2FjaGVkID0gcGVnJHJlc3VsdHNDYWNoZVtrZXldO1xuICAgICAgICBpZiAoY2FjaGVkKSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IGNhY2hlZC5uZXh0UG9zO1xuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZC5yZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgczAgPSBwZWckY3VyclBvcztcbiAgICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMikgPT09IHBlZyRjMTUwKSB7XG4gICAgICAgICAgICBzMSA9IHBlZyRjMTUwO1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgKz0gMjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHtcbiAgICAgICAgICAgICAgICBwZWckZmFpbChwZWckYzE1MSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICAgIHMxID0gcGVnJGMxNTIoKTtcbiAgICAgICAgfVxuICAgICAgICBzMCA9IHMxO1xuICAgICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICAgICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCAyKSA9PT0gcGVnJGMxNTMpIHtcbiAgICAgICAgICAgICAgICBzMSA9IHBlZyRjMTUzO1xuICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zICs9IDI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBwZWckZmFpbChwZWckYzE1NCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICAgICAgczEgPSBwZWckYzE1NSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICAgICAgICAgICAgaWYgKHBlZyRjMTU2LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgczEgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwZWckZmFpbChwZWckYzE1Nyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgICBzMSA9IHBlZyRjMTU4KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHMwID0gczE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcGVnJHJlc3VsdHNDYWNoZVtrZXldID0geyBuZXh0UG9zOiBwZWckY3VyclBvcywgcmVzdWx0OiBzMCB9O1xuICAgICAgICByZXR1cm4gczA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBlZyRwYXJzZVZhbHVlQ2hhcmFjdGVycygpIHtcbiAgICAgICAgdmFyIHMwLCBzMTtcbiAgICAgICAgdmFyIGtleSA9IHBlZyRjdXJyUG9zICogMzQgKyAyODtcbiAgICAgICAgdmFyIGNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcbiAgICAgICAgaWYgKGNhY2hlZCkge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBjYWNoZWQubmV4dFBvcztcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICAgIGlmIChwZWckYzE1OS50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgICAgICBzMSA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHBlZyRmYWlsKHBlZyRjMTYwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgczEgPSBwZWckYzE1OCgpO1xuICAgICAgICB9XG4gICAgICAgIHMwID0gczE7XG4gICAgICAgIHBlZyRyZXN1bHRzQ2FjaGVba2V5XSA9IHsgbmV4dFBvczogcGVnJGN1cnJQb3MsIHJlc3VsdDogczAgfTtcbiAgICAgICAgcmV0dXJuIHMwO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwZWckcGFyc2VMZXR0ZXJzQW5kRGlnaXRzKCkge1xuICAgICAgICB2YXIgczAsIHMxLCBzMiwgczMsIHM0LCBzNSwgczY7XG4gICAgICAgIHZhciBrZXkgPSBwZWckY3VyclBvcyAqIDM0ICsgMjk7XG4gICAgICAgIHZhciBjYWNoZWQgPSBwZWckcmVzdWx0c0NhY2hlW2tleV07XG4gICAgICAgIGlmIChjYWNoZWQpIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkLnJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICBzMSA9IHBlZyRwYXJzZUxldHRlcnMoKTtcbiAgICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzMiA9IFtdO1xuICAgICAgICAgICAgczMgPSBwZWckY3VyclBvcztcbiAgICAgICAgICAgIHM0ID0gcGVnJHBhcnNlRGlnaXRzKCk7XG4gICAgICAgICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBzNSA9IFtdO1xuICAgICAgICAgICAgICAgIHM2ID0gcGVnJHBhcnNlTGV0dGVycygpO1xuICAgICAgICAgICAgICAgIHdoaWxlIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICBzNS5wdXNoKHM2KTtcbiAgICAgICAgICAgICAgICAgICAgczYgPSBwZWckcGFyc2VMZXR0ZXJzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICBzNCA9IFtzNCwgczVdO1xuICAgICAgICAgICAgICAgICAgICBzMyA9IHM0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2hpbGUgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgczIucHVzaChzMyk7XG4gICAgICAgICAgICAgICAgczMgPSBwZWckY3VyclBvcztcbiAgICAgICAgICAgICAgICBzNCA9IHBlZyRwYXJzZURpZ2l0cygpO1xuICAgICAgICAgICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICBzNSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBzNiA9IHBlZyRwYXJzZUxldHRlcnMoKTtcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHM2ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzNS5wdXNoKHM2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHM2ID0gcGVnJHBhcnNlTGV0dGVycygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgczQgPSBbczQsIHM1XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHMzID0gczQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICAgICAgczEgPSBwZWckYzE1OCgpO1xuICAgICAgICAgICAgICAgIHMwID0gczE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgICAgcGVnJHJlc3VsdHNDYWNoZVtrZXldID0geyBuZXh0UG9zOiBwZWckY3VyclBvcywgcmVzdWx0OiBzMCB9O1xuICAgICAgICByZXR1cm4gczA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBlZyRwYXJzZURpZ2l0cygpIHtcbiAgICAgICAgdmFyIHMwLCBzMTtcbiAgICAgICAgdmFyIGtleSA9IHBlZyRjdXJyUG9zICogMzQgKyAzMDtcbiAgICAgICAgdmFyIGNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcbiAgICAgICAgaWYgKGNhY2hlZCkge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBjYWNoZWQubmV4dFBvcztcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIHMwID0gW107XG4gICAgICAgIGlmIChwZWckYzE2MS50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgICAgICBzMSA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHBlZyRmYWlsKHBlZyRjMTYyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHdoaWxlIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHMwLnB1c2goczEpO1xuICAgICAgICAgICAgICAgIGlmIChwZWckYzE2MS50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgICAgICAgICAgICAgIHMxID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGZhaWwocGVnJGMxNjIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICAgIHBlZyRyZXN1bHRzQ2FjaGVba2V5XSA9IHsgbmV4dFBvczogcGVnJGN1cnJQb3MsIHJlc3VsdDogczAgfTtcbiAgICAgICAgcmV0dXJuIHMwO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwZWckcGFyc2VOb25aZXJvRGlnaXRzKCkge1xuICAgICAgICB2YXIgczAsIHMxO1xuICAgICAgICB2YXIga2V5ID0gcGVnJGN1cnJQb3MgKiAzNCArIDMxO1xuICAgICAgICB2YXIgY2FjaGVkID0gcGVnJHJlc3VsdHNDYWNoZVtrZXldO1xuICAgICAgICBpZiAoY2FjaGVkKSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IGNhY2hlZC5uZXh0UG9zO1xuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZC5yZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgczAgPSBbXTtcbiAgICAgICAgaWYgKHBlZyRjMTYzLnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgICAgIHMxID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcGVnJGZhaWwocGVnJGMxNjQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgd2hpbGUgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgczAucHVzaChzMSk7XG4gICAgICAgICAgICAgICAgaWYgKHBlZyRjMTYzLnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgczEgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwZWckZmFpbChwZWckYzE2NCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgICAgcGVnJHJlc3VsdHNDYWNoZVtrZXldID0geyBuZXh0UG9zOiBwZWckY3VyclBvcywgcmVzdWx0OiBzMCB9O1xuICAgICAgICByZXR1cm4gczA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBlZyRwYXJzZUxldHRlcnMoKSB7XG4gICAgICAgIHZhciBzMCwgczE7XG4gICAgICAgIHZhciBrZXkgPSBwZWckY3VyclBvcyAqIDM0ICsgMzI7XG4gICAgICAgIHZhciBjYWNoZWQgPSBwZWckcmVzdWx0c0NhY2hlW2tleV07XG4gICAgICAgIGlmIChjYWNoZWQpIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkLnJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICBzMCA9IFtdO1xuICAgICAgICBpZiAocGVnJGMxNjUudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgICAgICAgczEgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHtcbiAgICAgICAgICAgICAgICBwZWckZmFpbChwZWckYzE2Nik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICB3aGlsZSAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBzMC5wdXNoKHMxKTtcbiAgICAgICAgICAgICAgICBpZiAocGVnJGMxNjUudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgICAgICAgICAgICAgICBzMSA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRmYWlsKHBlZyRjMTY2KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgICBwZWckcmVzdWx0c0NhY2hlW2tleV0gPSB7IG5leHRQb3M6IHBlZyRjdXJyUG9zLCByZXN1bHQ6IHMwIH07XG4gICAgICAgIHJldHVybiBzMDtcbiAgICB9XG4gICAgZnVuY3Rpb24gcGVnJHBhcnNlXygpIHtcbiAgICAgICAgdmFyIHMwLCBzMTtcbiAgICAgICAgdmFyIGtleSA9IHBlZyRjdXJyUG9zICogMzQgKyAzMztcbiAgICAgICAgdmFyIGNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcbiAgICAgICAgaWYgKGNhY2hlZCkge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBjYWNoZWQubmV4dFBvcztcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIHBlZyRzaWxlbnRGYWlscysrO1xuICAgICAgICBzMCA9IFtdO1xuICAgICAgICBpZiAocGVnJGMxNjgudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgICAgICAgczEgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHtcbiAgICAgICAgICAgICAgICBwZWckZmFpbChwZWckYzE2OSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzMC5wdXNoKHMxKTtcbiAgICAgICAgICAgIGlmIChwZWckYzE2OC50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgICAgICAgICAgczEgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBwZWckZmFpbChwZWckYzE2OSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHBlZyRzaWxlbnRGYWlscy0tO1xuICAgICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHtcbiAgICAgICAgICAgICAgICBwZWckZmFpbChwZWckYzE2Nyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcGVnJHJlc3VsdHNDYWNoZVtrZXldID0geyBuZXh0UG9zOiBwZWckY3VyclBvcywgcmVzdWx0OiBzMCB9O1xuICAgICAgICByZXR1cm4gczA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGJ1aWxkQmluYXJ5T3BlcmFuZChoZWFkLCB0YWlsLCBpc0FyaXRobWV0aWNPcCkge1xuICAgICAgICBpZiAoaXNBcml0aG1ldGljT3AgPT09IHZvaWQgMCkgeyBpc0FyaXRobWV0aWNPcCA9IGZhbHNlOyB9XG4gICAgICAgIHJldHVybiB0YWlsLnJlZHVjZShmdW5jdGlvbiAocmVzdWx0LCBlbGVtZW50cykge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBfZXhwcmVzc2lvbnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkJpbmFyeU9wZXJhbmRcIl0oZWxlbWVudHNbMV0sIHJlc3VsdCwgZWxlbWVudHNbM10sIGlzQXJpdGhtZXRpY09wKTtcbiAgICAgICAgfSwgaGVhZCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZsYXR0ZW5BcnJheShhcnJheSkge1xuICAgICAgICByZXR1cm4gW10uY29uY2F0LmFwcGx5KFtdLCBhcnJheSk7XG4gICAgfVxuICAgIHBlZyRyZXN1bHQgPSBwZWckc3RhcnRSdWxlRnVuY3Rpb24oKTtcbiAgICBpZiAocGVnJHJlc3VsdCAhPT0gcGVnJEZBSUxFRCAmJiBwZWckY3VyclBvcyA9PT0gaW5wdXQubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBwZWckcmVzdWx0O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKHBlZyRyZXN1bHQgIT09IHBlZyRGQUlMRUQgJiYgcGVnJGN1cnJQb3MgPCBpbnB1dC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHBlZyRmYWlsKHBlZyRlbmRFeHBlY3RhdGlvbigpKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBwZWckYnVpbGRTdHJ1Y3R1cmVkRXJyb3IocGVnJG1heEZhaWxFeHBlY3RlZCwgcGVnJG1heEZhaWxQb3MgPCBpbnB1dC5sZW5ndGggPyBpbnB1dC5jaGFyQXQocGVnJG1heEZhaWxQb3MpIDogbnVsbCwgcGVnJG1heEZhaWxQb3MgPCBpbnB1dC5sZW5ndGhcbiAgICAgICAgICAgID8gcGVnJGNvbXB1dGVMb2NhdGlvbihwZWckbWF4RmFpbFBvcywgcGVnJG1heEZhaWxQb3MgKyAxKVxuICAgICAgICAgICAgOiBwZWckY29tcHV0ZUxvY2F0aW9uKHBlZyRtYXhGYWlsUG9zLCBwZWckbWF4RmFpbFBvcykpO1xuICAgIH1cbn1cbnZhciBwYXJzZSA9IHBlZyRwYXJzZTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9leHByZXNzaW9ucy9leHByZXNzaW9ucy50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9leHByZXNzaW9ucy9leHByZXNzaW9ucy50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBPcGVyYW5kLCBCaW5hcnlPcGVyYW5kLCBVbmFyeU9wZXJhbmQsIEFycmF5T3BlcmFuZCwgQ29uc3QsIFZhcmlhYmxlLCBGdW5jdGlvbk9wZXJhbmQsIE9wZXJhbmRNYWtlciAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJPcGVyYW5kXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gT3BlcmFuZDsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQmluYXJ5T3BlcmFuZFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEJpbmFyeU9wZXJhbmQ7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlVuYXJ5T3BlcmFuZFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFVuYXJ5T3BlcmFuZDsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQXJyYXlPcGVyYW5kXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQXJyYXlPcGVyYW5kOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJDb25zdFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIENvbnN0OyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJWYXJpYWJsZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFZhcmlhYmxlOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJGdW5jdGlvbk9wZXJhbmRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBGdW5jdGlvbk9wZXJhbmQ7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIk9wZXJhbmRNYWtlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIE9wZXJhbmRNYWtlcjsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2hlbHBlcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2hlbHBlcnMgKi8gXCIuL3NyYy9oZWxwZXJzLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9mdW5jdGlvbnNmYWN0b3J5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9mdW5jdGlvbnNmYWN0b3J5ICovIFwiLi9zcmMvZnVuY3Rpb25zZmFjdG9yeS50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfY29uZGl0aW9uUHJvY2Vzc1ZhbHVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9jb25kaXRpb25Qcm9jZXNzVmFsdWUgKi8gXCIuL3NyYy9jb25kaXRpb25Qcm9jZXNzVmFsdWUudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NldHRpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9zZXR0aW5ncyAqLyBcIi4vc3JjL3NldHRpbmdzLnRzXCIpO1xudmFyIF9fZXh0ZW5kcyA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG5cblxuXG5cbnZhciBPcGVyYW5kID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIE9wZXJhbmQoKSB7XG4gICAgfVxuICAgIE9wZXJhbmQucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKGZ1bmMpIHtcbiAgICAgICAgaWYgKGZ1bmMgPT09IHZvaWQgMCkgeyBmdW5jID0gdW5kZWZpbmVkOyB9XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgIH07XG4gICAgT3BlcmFuZC5wcm90b3R5cGUuaGFzRnVuY3Rpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuICAgIE9wZXJhbmQucHJvdG90eXBlLmhhc0FzeW5jRnVuY3Rpb24gPSBmdW5jdGlvbiAoKSB7IHJldHVybiBmYWxzZTsgfTtcbiAgICBPcGVyYW5kLnByb3RvdHlwZS5hZGRUb0FzeW5jTGlzdCA9IGZ1bmN0aW9uIChsaXN0KSB7IH07XG4gICAgT3BlcmFuZC5wcm90b3R5cGUuaXNFcXVhbCA9IGZ1bmN0aW9uIChvcCkge1xuICAgICAgICByZXR1cm4gISFvcCAmJiBvcC5nZXRUeXBlKCkgPT09IHRoaXMuZ2V0VHlwZSgpICYmIHRoaXMuaXNDb250ZW50RXF1YWwob3ApO1xuICAgIH07XG4gICAgT3BlcmFuZC5wcm90b3R5cGUuYXJlT3BlcmF0b3JzRXF1YWxzID0gZnVuY3Rpb24gKG9wMSwgb3AyKSB7XG4gICAgICAgIHJldHVybiAhb3AxICYmICFvcDIgfHwgISFvcDEgJiYgb3AxLmlzRXF1YWwob3AyKTtcbiAgICB9O1xuICAgIHJldHVybiBPcGVyYW5kO1xufSgpKTtcblxudmFyIEJpbmFyeU9wZXJhbmQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEJpbmFyeU9wZXJhbmQsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQmluYXJ5T3BlcmFuZChvcGVyYXRvck5hbWUsIGxlZnQsIHJpZ2h0LCBpc0FyaXRobWV0aWNPcCkge1xuICAgICAgICBpZiAobGVmdCA9PT0gdm9pZCAwKSB7IGxlZnQgPSBudWxsOyB9XG4gICAgICAgIGlmIChyaWdodCA9PT0gdm9pZCAwKSB7IHJpZ2h0ID0gbnVsbDsgfVxuICAgICAgICBpZiAoaXNBcml0aG1ldGljT3AgPT09IHZvaWQgMCkgeyBpc0FyaXRobWV0aWNPcCA9IGZhbHNlOyB9XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLm9wZXJhdG9yTmFtZSA9IG9wZXJhdG9yTmFtZTtcbiAgICAgICAgX3RoaXMubGVmdCA9IGxlZnQ7XG4gICAgICAgIF90aGlzLnJpZ2h0ID0gcmlnaHQ7XG4gICAgICAgIF90aGlzLmlzQXJpdGhtZXRpY1ZhbHVlID0gaXNBcml0aG1ldGljT3A7XG4gICAgICAgIGlmIChpc0FyaXRobWV0aWNPcCkge1xuICAgICAgICAgICAgX3RoaXMuY29uc3VtZXIgPSBPcGVyYW5kTWFrZXIuYmluYXJ5RnVuY3Rpb25zW1wiYXJpdGhtZXRpY09wXCJdKG9wZXJhdG9yTmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBfdGhpcy5jb25zdW1lciA9IE9wZXJhbmRNYWtlci5iaW5hcnlGdW5jdGlvbnNbb3BlcmF0b3JOYW1lXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoX3RoaXMuY29uc3VtZXIgPT0gbnVsbCkge1xuICAgICAgICAgICAgT3BlcmFuZE1ha2VyLnRocm93SW52YWxpZE9wZXJhdG9yRXJyb3Iob3BlcmF0b3JOYW1lKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCaW5hcnlPcGVyYW5kLnByb3RvdHlwZSwgXCJyZXF1aXJlU3RyaWN0Q29tcGFyZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0SXNPcGVyYW5kUmVxdWlyZVN0cmljdCh0aGlzLmxlZnQpIHx8XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRJc09wZXJhbmRSZXF1aXJlU3RyaWN0KHRoaXMucmlnaHQpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgQmluYXJ5T3BlcmFuZC5wcm90b3R5cGUuZ2V0SXNPcGVyYW5kUmVxdWlyZVN0cmljdCA9IGZ1bmN0aW9uIChvcCkge1xuICAgICAgICByZXR1cm4gISFvcCAmJiBvcC5yZXF1aXJlU3RyaWN0Q29tcGFyZTtcbiAgICB9O1xuICAgIEJpbmFyeU9wZXJhbmQucHJvdG90eXBlLmdldFR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBcImJpbmFyeVwiO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJpbmFyeU9wZXJhbmQucHJvdG90eXBlLCBcImlzQXJpdGhtZXRpY1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNBcml0aG1ldGljVmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQmluYXJ5T3BlcmFuZC5wcm90b3R5cGUsIFwiaXNDb25qdW5jdGlvblwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMub3BlcmF0b3JOYW1lID09IFwib3JcIiB8fCB0aGlzLm9wZXJhdG9yTmFtZSA9PSBcImFuZFwiO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJpbmFyeU9wZXJhbmQucHJvdG90eXBlLCBcImNvbmp1bmN0aW9uXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pc0Nvbmp1bmN0aW9uID8gdGhpcy5vcGVyYXRvck5hbWUgOiBcIlwiO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJpbmFyeU9wZXJhbmQucHJvdG90eXBlLCBcIm9wZXJhdG9yXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5vcGVyYXRvck5hbWU7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQmluYXJ5T3BlcmFuZC5wcm90b3R5cGUsIFwibGVmdE9wZXJhbmRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxlZnQ7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQmluYXJ5T3BlcmFuZC5wcm90b3R5cGUsIFwicmlnaHRPcGVyYW5kXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yaWdodDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIEJpbmFyeU9wZXJhbmQucHJvdG90eXBlLmlzQ29udGVudEVxdWFsID0gZnVuY3Rpb24gKG9wKSB7XG4gICAgICAgIHZhciBiT3AgPSBvcDtcbiAgICAgICAgcmV0dXJuIGJPcC5vcGVyYXRvciA9PT0gdGhpcy5vcGVyYXRvciAmJlxuICAgICAgICAgICAgdGhpcy5hcmVPcGVyYXRvcnNFcXVhbHModGhpcy5sZWZ0LCBiT3AubGVmdCkgJiZcbiAgICAgICAgICAgIHRoaXMuYXJlT3BlcmF0b3JzRXF1YWxzKHRoaXMucmlnaHQsIGJPcC5yaWdodCk7XG4gICAgfTtcbiAgICBCaW5hcnlPcGVyYW5kLnByb3RvdHlwZS5ldmFsdWF0ZVBhcmFtID0gZnVuY3Rpb24gKHgsIHByb2Nlc3NWYWx1ZSkge1xuICAgICAgICByZXR1cm4geCA9PSBudWxsID8gbnVsbCA6IHguZXZhbHVhdGUocHJvY2Vzc1ZhbHVlKTtcbiAgICB9O1xuICAgIEJpbmFyeU9wZXJhbmQucHJvdG90eXBlLmV2YWx1YXRlID0gZnVuY3Rpb24gKHByb2Nlc3NWYWx1ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25zdW1lci5jYWxsKHRoaXMsIHRoaXMuZXZhbHVhdGVQYXJhbSh0aGlzLmxlZnQsIHByb2Nlc3NWYWx1ZSksIHRoaXMuZXZhbHVhdGVQYXJhbSh0aGlzLnJpZ2h0LCBwcm9jZXNzVmFsdWUpLCB0aGlzLnJlcXVpcmVTdHJpY3RDb21wYXJlKTtcbiAgICB9O1xuICAgIEJpbmFyeU9wZXJhbmQucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKGZ1bmMpIHtcbiAgICAgICAgaWYgKGZ1bmMgPT09IHZvaWQgMCkgeyBmdW5jID0gdW5kZWZpbmVkOyB9XG4gICAgICAgIGlmICghIWZ1bmMpIHtcbiAgICAgICAgICAgIHZhciByZXMgPSBmdW5jKHRoaXMpO1xuICAgICAgICAgICAgaWYgKCEhcmVzKVxuICAgICAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChcIihcIiArXG4gICAgICAgICAgICBPcGVyYW5kTWFrZXIuc2FmZVRvU3RyaW5nKHRoaXMubGVmdCwgZnVuYykgK1xuICAgICAgICAgICAgXCIgXCIgK1xuICAgICAgICAgICAgT3BlcmFuZE1ha2VyLm9wZXJhdG9yVG9TdHJpbmcodGhpcy5vcGVyYXRvck5hbWUpICtcbiAgICAgICAgICAgIFwiIFwiICtcbiAgICAgICAgICAgIE9wZXJhbmRNYWtlci5zYWZlVG9TdHJpbmcodGhpcy5yaWdodCwgZnVuYykgK1xuICAgICAgICAgICAgXCIpXCIpO1xuICAgIH07XG4gICAgQmluYXJ5T3BlcmFuZC5wcm90b3R5cGUuc2V0VmFyaWFibGVzID0gZnVuY3Rpb24gKHZhcmlhYmxlcykge1xuICAgICAgICBpZiAodGhpcy5sZWZ0ICE9IG51bGwpXG4gICAgICAgICAgICB0aGlzLmxlZnQuc2V0VmFyaWFibGVzKHZhcmlhYmxlcyk7XG4gICAgICAgIGlmICh0aGlzLnJpZ2h0ICE9IG51bGwpXG4gICAgICAgICAgICB0aGlzLnJpZ2h0LnNldFZhcmlhYmxlcyh2YXJpYWJsZXMpO1xuICAgIH07XG4gICAgQmluYXJ5T3BlcmFuZC5wcm90b3R5cGUuaGFzRnVuY3Rpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAoKCEhdGhpcy5sZWZ0ICYmIHRoaXMubGVmdC5oYXNGdW5jdGlvbigpKSB8fFxuICAgICAgICAgICAgKCEhdGhpcy5yaWdodCAmJiB0aGlzLnJpZ2h0Lmhhc0Z1bmN0aW9uKCkpKTtcbiAgICB9O1xuICAgIEJpbmFyeU9wZXJhbmQucHJvdG90eXBlLmhhc0FzeW5jRnVuY3Rpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAoKCEhdGhpcy5sZWZ0ICYmIHRoaXMubGVmdC5oYXNBc3luY0Z1bmN0aW9uKCkpIHx8XG4gICAgICAgICAgICAoISF0aGlzLnJpZ2h0ICYmIHRoaXMucmlnaHQuaGFzQXN5bmNGdW5jdGlvbigpKSk7XG4gICAgfTtcbiAgICBCaW5hcnlPcGVyYW5kLnByb3RvdHlwZS5hZGRUb0FzeW5jTGlzdCA9IGZ1bmN0aW9uIChsaXN0KSB7XG4gICAgICAgIGlmICghIXRoaXMubGVmdClcbiAgICAgICAgICAgIHRoaXMubGVmdC5hZGRUb0FzeW5jTGlzdChsaXN0KTtcbiAgICAgICAgaWYgKCEhdGhpcy5yaWdodClcbiAgICAgICAgICAgIHRoaXMucmlnaHQuYWRkVG9Bc3luY0xpc3QobGlzdCk7XG4gICAgfTtcbiAgICByZXR1cm4gQmluYXJ5T3BlcmFuZDtcbn0oT3BlcmFuZCkpO1xuXG52YXIgVW5hcnlPcGVyYW5kID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhVbmFyeU9wZXJhbmQsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gVW5hcnlPcGVyYW5kKGV4cHJlc3Npb25WYWx1ZSwgb3BlcmF0b3JOYW1lKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmV4cHJlc3Npb25WYWx1ZSA9IGV4cHJlc3Npb25WYWx1ZTtcbiAgICAgICAgX3RoaXMub3BlcmF0b3JOYW1lID0gb3BlcmF0b3JOYW1lO1xuICAgICAgICBfdGhpcy5jb25zdW1lciA9IE9wZXJhbmRNYWtlci51bmFyeUZ1bmN0aW9uc1tvcGVyYXRvck5hbWVdO1xuICAgICAgICBpZiAoX3RoaXMuY29uc3VtZXIgPT0gbnVsbCkge1xuICAgICAgICAgICAgT3BlcmFuZE1ha2VyLnRocm93SW52YWxpZE9wZXJhdG9yRXJyb3Iob3BlcmF0b3JOYW1lKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShVbmFyeU9wZXJhbmQucHJvdG90eXBlLCBcIm9wZXJhdG9yXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5vcGVyYXRvck5hbWU7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVW5hcnlPcGVyYW5kLnByb3RvdHlwZSwgXCJleHByZXNzaW9uXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5leHByZXNzaW9uVmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBVbmFyeU9wZXJhbmQucHJvdG90eXBlLmdldFR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBcInVuYXJ5XCI7XG4gICAgfTtcbiAgICBVbmFyeU9wZXJhbmQucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKGZ1bmMpIHtcbiAgICAgICAgaWYgKGZ1bmMgPT09IHZvaWQgMCkgeyBmdW5jID0gdW5kZWZpbmVkOyB9XG4gICAgICAgIGlmICghIWZ1bmMpIHtcbiAgICAgICAgICAgIHZhciByZXMgPSBmdW5jKHRoaXMpO1xuICAgICAgICAgICAgaWYgKCEhcmVzKVxuICAgICAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChPcGVyYW5kTWFrZXIub3BlcmF0b3JUb1N0cmluZyh0aGlzLm9wZXJhdG9yTmFtZSkgK1xuICAgICAgICAgICAgXCIgXCIgK1xuICAgICAgICAgICAgdGhpcy5leHByZXNzaW9uLnRvU3RyaW5nKGZ1bmMpKTtcbiAgICB9O1xuICAgIFVuYXJ5T3BlcmFuZC5wcm90b3R5cGUuaXNDb250ZW50RXF1YWwgPSBmdW5jdGlvbiAob3ApIHtcbiAgICAgICAgdmFyIHVPcCA9IG9wO1xuICAgICAgICByZXR1cm4gdU9wLm9wZXJhdG9yID09IHRoaXMub3BlcmF0b3IgJiYgdGhpcy5hcmVPcGVyYXRvcnNFcXVhbHModGhpcy5leHByZXNzaW9uLCB1T3AuZXhwcmVzc2lvbik7XG4gICAgfTtcbiAgICBVbmFyeU9wZXJhbmQucHJvdG90eXBlLmV2YWx1YXRlID0gZnVuY3Rpb24gKHByb2Nlc3NWYWx1ZSkge1xuICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLmV4cHJlc3Npb24uZXZhbHVhdGUocHJvY2Vzc1ZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uc3VtZXIuY2FsbCh0aGlzLCB2YWx1ZSk7XG4gICAgfTtcbiAgICBVbmFyeU9wZXJhbmQucHJvdG90eXBlLnNldFZhcmlhYmxlcyA9IGZ1bmN0aW9uICh2YXJpYWJsZXMpIHtcbiAgICAgICAgdGhpcy5leHByZXNzaW9uLnNldFZhcmlhYmxlcyh2YXJpYWJsZXMpO1xuICAgIH07XG4gICAgcmV0dXJuIFVuYXJ5T3BlcmFuZDtcbn0oT3BlcmFuZCkpO1xuXG52YXIgQXJyYXlPcGVyYW5kID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBcnJheU9wZXJhbmQsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQXJyYXlPcGVyYW5kKHZhbHVlcykge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy52YWx1ZXMgPSB2YWx1ZXM7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgQXJyYXlPcGVyYW5kLnByb3RvdHlwZS5nZXRUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gXCJhcnJheVwiO1xuICAgIH07XG4gICAgQXJyYXlPcGVyYW5kLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIChmdW5jKSB7XG4gICAgICAgIGlmIChmdW5jID09PSB2b2lkIDApIHsgZnVuYyA9IHVuZGVmaW5lZDsgfVxuICAgICAgICBpZiAoISFmdW5jKSB7XG4gICAgICAgICAgICB2YXIgcmVzID0gZnVuYyh0aGlzKTtcbiAgICAgICAgICAgIGlmICghIXJlcylcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoXCJbXCIgK1xuICAgICAgICAgICAgdGhpcy52YWx1ZXNcbiAgICAgICAgICAgICAgICAubWFwKGZ1bmN0aW9uIChlbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlbC50b1N0cmluZyhmdW5jKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmpvaW4oXCIsIFwiKSArXG4gICAgICAgICAgICBcIl1cIik7XG4gICAgfTtcbiAgICBBcnJheU9wZXJhbmQucHJvdG90eXBlLmV2YWx1YXRlID0gZnVuY3Rpb24gKHByb2Nlc3NWYWx1ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXMubWFwKGZ1bmN0aW9uIChlbCkge1xuICAgICAgICAgICAgcmV0dXJuIGVsLmV2YWx1YXRlKHByb2Nlc3NWYWx1ZSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgQXJyYXlPcGVyYW5kLnByb3RvdHlwZS5zZXRWYXJpYWJsZXMgPSBmdW5jdGlvbiAodmFyaWFibGVzKSB7XG4gICAgICAgIHRoaXMudmFsdWVzLmZvckVhY2goZnVuY3Rpb24gKGVsKSB7XG4gICAgICAgICAgICBlbC5zZXRWYXJpYWJsZXModmFyaWFibGVzKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBBcnJheU9wZXJhbmQucHJvdG90eXBlLmhhc0Z1bmN0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXMuc29tZShmdW5jdGlvbiAob3BlcmFuZCkgeyByZXR1cm4gb3BlcmFuZC5oYXNGdW5jdGlvbigpOyB9KTtcbiAgICB9O1xuICAgIEFycmF5T3BlcmFuZC5wcm90b3R5cGUuaGFzQXN5bmNGdW5jdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzLnNvbWUoZnVuY3Rpb24gKG9wZXJhbmQpIHsgcmV0dXJuIG9wZXJhbmQuaGFzQXN5bmNGdW5jdGlvbigpOyB9KTtcbiAgICB9O1xuICAgIEFycmF5T3BlcmFuZC5wcm90b3R5cGUuYWRkVG9Bc3luY0xpc3QgPSBmdW5jdGlvbiAobGlzdCkge1xuICAgICAgICB0aGlzLnZhbHVlcy5mb3JFYWNoKGZ1bmN0aW9uIChvcGVyYW5kKSB7IHJldHVybiBvcGVyYW5kLmFkZFRvQXN5bmNMaXN0KGxpc3QpOyB9KTtcbiAgICB9O1xuICAgIEFycmF5T3BlcmFuZC5wcm90b3R5cGUuaXNDb250ZW50RXF1YWwgPSBmdW5jdGlvbiAob3ApIHtcbiAgICAgICAgdmFyIGFPcCA9IG9wO1xuICAgICAgICBpZiAoYU9wLnZhbHVlcy5sZW5ndGggIT09IHRoaXMudmFsdWVzLmxlbmd0aClcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKCFhT3AudmFsdWVzW2ldLmlzRXF1YWwodGhpcy52YWx1ZXNbaV0pKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICAgIHJldHVybiBBcnJheU9wZXJhbmQ7XG59KE9wZXJhbmQpKTtcblxudmFyIENvbnN0ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhDb25zdCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBDb25zdCh2YWx1ZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIENvbnN0LnByb3RvdHlwZS5nZXRUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gXCJjb25zdFwiO1xuICAgIH07XG4gICAgQ29uc3QucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKGZ1bmMpIHtcbiAgICAgICAgaWYgKGZ1bmMgPT09IHZvaWQgMCkgeyBmdW5jID0gdW5kZWZpbmVkOyB9XG4gICAgICAgIGlmICghIWZ1bmMpIHtcbiAgICAgICAgICAgIHZhciByZXMgPSBmdW5jKHRoaXMpO1xuICAgICAgICAgICAgaWYgKCEhcmVzKVxuICAgICAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUudG9TdHJpbmcoKTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb25zdC5wcm90b3R5cGUsIFwiY29ycmVjdFZhbHVlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDb3JyZWN0VmFsdWUodGhpcy52YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29uc3QucHJvdG90eXBlLCBcInJlcXVpcmVTdHJpY3RDb21wYXJlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBmYWxzZTsgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIENvbnN0LnByb3RvdHlwZS5ldmFsdWF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29ycmVjdFZhbHVlKHRoaXMudmFsdWUpO1xuICAgIH07XG4gICAgQ29uc3QucHJvdG90eXBlLnNldFZhcmlhYmxlcyA9IGZ1bmN0aW9uICh2YXJpYWJsZXMpIHsgfTtcbiAgICBDb25zdC5wcm90b3R5cGUuZ2V0Q29ycmVjdFZhbHVlID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9IFwic3RyaW5nXCIpXG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIGlmICh0aGlzLmlzQm9vbGVhblZhbHVlKHZhbHVlKSlcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZS50b0xvd2VyQ2FzZSgpID09PSBcInRydWVcIjtcbiAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+IDEgJiZcbiAgICAgICAgICAgIHRoaXMuaXNRdW90ZSh2YWx1ZVswXSkgJiZcbiAgICAgICAgICAgIHRoaXMuaXNRdW90ZSh2YWx1ZVt2YWx1ZS5sZW5ndGggLSAxXSkpXG4gICAgICAgICAgICByZXR1cm4gdmFsdWUuc3Vic3RyaW5nKDEsIHZhbHVlLmxlbmd0aCAtIDEpO1xuICAgICAgICBpZiAoT3BlcmFuZE1ha2VyLmlzTnVtZXJpYyh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZS5pbmRleE9mKFwiMHhcIikgPT0gMClcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQodmFsdWUpO1xuICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+IDEgJiYgdmFsdWVbMF0gPT0gXCIwXCIgJiYgKHZhbHVlLmxlbmd0aCA8IDIgfHwgKHZhbHVlWzFdICE9PSBcIi5cIiAmJiB2YWx1ZVsxXSAhPT0gXCIsXCIpKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH07XG4gICAgQ29uc3QucHJvdG90eXBlLmlzQ29udGVudEVxdWFsID0gZnVuY3Rpb24gKG9wKSB7XG4gICAgICAgIHZhciBjT3AgPSBvcDtcbiAgICAgICAgcmV0dXJuIGNPcC52YWx1ZSA9PSB0aGlzLnZhbHVlO1xuICAgIH07XG4gICAgQ29uc3QucHJvdG90eXBlLmlzUXVvdGUgPSBmdW5jdGlvbiAoY2gpIHtcbiAgICAgICAgcmV0dXJuIGNoID09IFwiJ1wiIHx8IGNoID09ICdcIic7XG4gICAgfTtcbiAgICBDb25zdC5wcm90b3R5cGUuaXNCb29sZWFuVmFsdWUgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuICh2YWx1ZSAmJlxuICAgICAgICAgICAgKHZhbHVlLnRvTG93ZXJDYXNlKCkgPT09IFwidHJ1ZVwiIHx8IHZhbHVlLnRvTG93ZXJDYXNlKCkgPT09IFwiZmFsc2VcIikpO1xuICAgIH07XG4gICAgcmV0dXJuIENvbnN0O1xufShPcGVyYW5kKSk7XG5cbnZhciBWYXJpYWJsZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoVmFyaWFibGUsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gVmFyaWFibGUodmFyaWFibGVOYW1lKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHZhcmlhYmxlTmFtZSkgfHwgdGhpcztcbiAgICAgICAgX3RoaXMudmFyaWFibGVOYW1lID0gdmFyaWFibGVOYW1lO1xuICAgICAgICBfdGhpcy52YWx1ZUluZm8gPSB7fTtcbiAgICAgICAgX3RoaXMudXNlVmFsdWVBc0l0SXMgPSBmYWxzZTtcbiAgICAgICAgaWYgKCEhX3RoaXMudmFyaWFibGVOYW1lICYmXG4gICAgICAgICAgICBfdGhpcy52YXJpYWJsZU5hbWUubGVuZ3RoID4gMSAmJlxuICAgICAgICAgICAgX3RoaXMudmFyaWFibGVOYW1lWzBdID09PSBWYXJpYWJsZS5EaXNhYmxlQ29udmVyc2lvbkNoYXIpIHtcbiAgICAgICAgICAgIF90aGlzLnZhcmlhYmxlTmFtZSA9IF90aGlzLnZhcmlhYmxlTmFtZS5zdWJzdHJpbmcoMSk7XG4gICAgICAgICAgICBfdGhpcy51c2VWYWx1ZUFzSXRJcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVmFyaWFibGUsIFwiRGlzYWJsZUNvbnZlcnNpb25DaGFyXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBfc2V0dGluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcInNldHRpbmdzXCJdLmV4cHJlc3Npb25EaXNhYmxlQ29udmVyc2lvbkNoYXI7IH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkgeyBfc2V0dGluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcInNldHRpbmdzXCJdLmV4cHJlc3Npb25EaXNhYmxlQ29udmVyc2lvbkNoYXIgPSB2YWw7IH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVmFyaWFibGUucHJvdG90eXBlLCBcInJlcXVpcmVTdHJpY3RDb21wYXJlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZUluZm8uc2N0cmljdENvbXBhcmUgPT09IHRydWU7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBWYXJpYWJsZS5wcm90b3R5cGUuZ2V0VHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIFwidmFyaWFibGVcIjtcbiAgICB9O1xuICAgIFZhcmlhYmxlLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIChmdW5jKSB7XG4gICAgICAgIGlmIChmdW5jID09PSB2b2lkIDApIHsgZnVuYyA9IHVuZGVmaW5lZDsgfVxuICAgICAgICBpZiAoISFmdW5jKSB7XG4gICAgICAgICAgICB2YXIgcmVzID0gZnVuYyh0aGlzKTtcbiAgICAgICAgICAgIGlmICghIXJlcylcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9XG4gICAgICAgIHZhciBwcmVmaXggPSB0aGlzLnVzZVZhbHVlQXNJdElzID8gVmFyaWFibGUuRGlzYWJsZUNvbnZlcnNpb25DaGFyIDogXCJcIjtcbiAgICAgICAgcmV0dXJuIFwie1wiICsgcHJlZml4ICsgdGhpcy52YXJpYWJsZU5hbWUgKyBcIn1cIjtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWYXJpYWJsZS5wcm90b3R5cGUsIFwidmFyaWFibGVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhcmlhYmxlTmFtZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFZhcmlhYmxlLnByb3RvdHlwZS5ldmFsdWF0ZSA9IGZ1bmN0aW9uIChwcm9jZXNzVmFsdWUpIHtcbiAgICAgICAgdGhpcy52YWx1ZUluZm8ubmFtZSA9IHRoaXMudmFyaWFibGVOYW1lO1xuICAgICAgICBwcm9jZXNzVmFsdWUuZ2V0VmFsdWVJbmZvKHRoaXMudmFsdWVJbmZvKTtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVJbmZvLmhhc1ZhbHVlXG4gICAgICAgICAgICA/IHRoaXMuZ2V0Q29ycmVjdFZhbHVlKHRoaXMudmFsdWVJbmZvLnZhbHVlKVxuICAgICAgICAgICAgOiBudWxsO1xuICAgIH07XG4gICAgVmFyaWFibGUucHJvdG90eXBlLnNldFZhcmlhYmxlcyA9IGZ1bmN0aW9uICh2YXJpYWJsZXMpIHtcbiAgICAgICAgdmFyaWFibGVzLnB1c2godGhpcy52YXJpYWJsZU5hbWUpO1xuICAgIH07XG4gICAgVmFyaWFibGUucHJvdG90eXBlLmdldENvcnJlY3RWYWx1ZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy51c2VWYWx1ZUFzSXRJcylcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUuZ2V0Q29ycmVjdFZhbHVlLmNhbGwodGhpcywgdmFsdWUpO1xuICAgIH07XG4gICAgVmFyaWFibGUucHJvdG90eXBlLmlzQ29udGVudEVxdWFsID0gZnVuY3Rpb24gKG9wKSB7XG4gICAgICAgIHZhciB2T3AgPSBvcDtcbiAgICAgICAgcmV0dXJuIHZPcC52YXJpYWJsZSA9PSB0aGlzLnZhcmlhYmxlO1xuICAgIH07XG4gICAgcmV0dXJuIFZhcmlhYmxlO1xufShDb25zdCkpO1xuXG52YXIgRnVuY3Rpb25PcGVyYW5kID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhGdW5jdGlvbk9wZXJhbmQsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gRnVuY3Rpb25PcGVyYW5kKG9yaWdpbmFsVmFsdWUsIHBhcmFtZXRlcnMpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMub3JpZ2luYWxWYWx1ZSA9IG9yaWdpbmFsVmFsdWU7XG4gICAgICAgIF90aGlzLnBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzO1xuICAgICAgICBfdGhpcy5pc1JlYWR5VmFsdWUgPSBmYWxzZTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocGFyYW1ldGVycykgJiYgcGFyYW1ldGVycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIF90aGlzLnBhcmFtZXRlcnMgPSBuZXcgQXJyYXlPcGVyYW5kKFtdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIEZ1bmN0aW9uT3BlcmFuZC5wcm90b3R5cGUuZ2V0VHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIFwiZnVuY3Rpb25cIjtcbiAgICB9O1xuICAgIEZ1bmN0aW9uT3BlcmFuZC5wcm90b3R5cGUuZXZhbHVhdGVBc3luYyA9IGZ1bmN0aW9uIChwcm9jZXNzVmFsdWUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdGhpcy5pc1JlYWR5VmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdmFyIGFzeW5jUHJvY2Vzc1ZhbHVlID0gbmV3IF9jb25kaXRpb25Qcm9jZXNzVmFsdWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIlByb2Nlc3NWYWx1ZVwiXSgpO1xuICAgICAgICBhc3luY1Byb2Nlc3NWYWx1ZS52YWx1ZXMgPSBfaGVscGVyc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiSGVscGVyc1wiXS5jcmVhdGVDb3B5KHByb2Nlc3NWYWx1ZS52YWx1ZXMpO1xuICAgICAgICBhc3luY1Byb2Nlc3NWYWx1ZS5wcm9wZXJ0aWVzID0gX2hlbHBlcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkhlbHBlcnNcIl0uY3JlYXRlQ29weShwcm9jZXNzVmFsdWUucHJvcGVydGllcyk7XG4gICAgICAgIGFzeW5jUHJvY2Vzc1ZhbHVlLnByb3BlcnRpZXMucmV0dXJuUmVzdWx0ID0gZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgICAgX3RoaXMuYXN5blJlc3VsdCA9IHJlc3VsdDtcbiAgICAgICAgICAgIF90aGlzLmlzUmVhZHlWYWx1ZSA9IHRydWU7XG4gICAgICAgICAgICBfdGhpcy5vbkFzeW5jUmVhZHkoKTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5ldmFsdWF0ZUNvcmUoYXN5bmNQcm9jZXNzVmFsdWUpO1xuICAgIH07XG4gICAgRnVuY3Rpb25PcGVyYW5kLnByb3RvdHlwZS5ldmFsdWF0ZSA9IGZ1bmN0aW9uIChwcm9jZXNzVmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNSZWFkeSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFzeW5SZXN1bHQ7XG4gICAgICAgIHJldHVybiB0aGlzLmV2YWx1YXRlQ29yZShwcm9jZXNzVmFsdWUpO1xuICAgIH07XG4gICAgRnVuY3Rpb25PcGVyYW5kLnByb3RvdHlwZS5ldmFsdWF0ZUNvcmUgPSBmdW5jdGlvbiAocHJvY2Vzc1ZhbHVlKSB7XG4gICAgICAgIHJldHVybiBfZnVuY3Rpb25zZmFjdG9yeV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiRnVuY3Rpb25GYWN0b3J5XCJdLkluc3RhbmNlLnJ1bih0aGlzLm9yaWdpbmFsVmFsdWUsIHRoaXMucGFyYW1ldGVycy5ldmFsdWF0ZShwcm9jZXNzVmFsdWUpLCBwcm9jZXNzVmFsdWUucHJvcGVydGllcyk7XG4gICAgfTtcbiAgICBGdW5jdGlvbk9wZXJhbmQucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKGZ1bmMpIHtcbiAgICAgICAgaWYgKGZ1bmMgPT09IHZvaWQgMCkgeyBmdW5jID0gdW5kZWZpbmVkOyB9XG4gICAgICAgIGlmICghIWZ1bmMpIHtcbiAgICAgICAgICAgIHZhciByZXMgPSBmdW5jKHRoaXMpO1xuICAgICAgICAgICAgaWYgKCEhcmVzKVxuICAgICAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxWYWx1ZSArIFwiKFwiICsgdGhpcy5wYXJhbWV0ZXJzLnRvU3RyaW5nKGZ1bmMpICsgXCIpXCI7XG4gICAgfTtcbiAgICBGdW5jdGlvbk9wZXJhbmQucHJvdG90eXBlLnNldFZhcmlhYmxlcyA9IGZ1bmN0aW9uICh2YXJpYWJsZXMpIHtcbiAgICAgICAgdGhpcy5wYXJhbWV0ZXJzLnNldFZhcmlhYmxlcyh2YXJpYWJsZXMpO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEZ1bmN0aW9uT3BlcmFuZC5wcm90b3R5cGUsIFwiaXNSZWFkeVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNSZWFkeVZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgRnVuY3Rpb25PcGVyYW5kLnByb3RvdHlwZS5oYXNGdW5jdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgICBGdW5jdGlvbk9wZXJhbmQucHJvdG90eXBlLmhhc0FzeW5jRnVuY3Rpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBfZnVuY3Rpb25zZmFjdG9yeV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiRnVuY3Rpb25GYWN0b3J5XCJdLkluc3RhbmNlLmlzQXN5bmNGdW5jdGlvbih0aGlzLm9yaWdpbmFsVmFsdWUpO1xuICAgIH07XG4gICAgRnVuY3Rpb25PcGVyYW5kLnByb3RvdHlwZS5hZGRUb0FzeW5jTGlzdCA9IGZ1bmN0aW9uIChsaXN0KSB7XG4gICAgICAgIGlmICh0aGlzLmhhc0FzeW5jRnVuY3Rpb24oKSkge1xuICAgICAgICAgICAgbGlzdC5wdXNoKHRoaXMpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBGdW5jdGlvbk9wZXJhbmQucHJvdG90eXBlLmlzQ29udGVudEVxdWFsID0gZnVuY3Rpb24gKG9wKSB7XG4gICAgICAgIHZhciBmT3AgPSBvcDtcbiAgICAgICAgcmV0dXJuIGZPcC5vcmlnaW5hbFZhbHVlID09IHRoaXMub3JpZ2luYWxWYWx1ZSAmJiB0aGlzLmFyZU9wZXJhdG9yc0VxdWFscyhmT3AucGFyYW1ldGVycywgdGhpcy5wYXJhbWV0ZXJzKTtcbiAgICB9O1xuICAgIHJldHVybiBGdW5jdGlvbk9wZXJhbmQ7XG59KE9wZXJhbmQpKTtcblxudmFyIE9wZXJhbmRNYWtlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBPcGVyYW5kTWFrZXIoKSB7XG4gICAgfVxuICAgIE9wZXJhbmRNYWtlci50aHJvd0ludmFsaWRPcGVyYXRvckVycm9yID0gZnVuY3Rpb24gKG9wKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgb3BlcmF0b3I6ICdcIiArIG9wICsgXCInXCIpO1xuICAgIH07XG4gICAgT3BlcmFuZE1ha2VyLnNhZmVUb1N0cmluZyA9IGZ1bmN0aW9uIChvcGVyYW5kLCBmdW5jKSB7XG4gICAgICAgIHJldHVybiBvcGVyYW5kID09IG51bGwgPyBcIlwiIDogb3BlcmFuZC50b1N0cmluZyhmdW5jKTtcbiAgICB9O1xuICAgIE9wZXJhbmRNYWtlci50b09wZXJhbmRTdHJpbmcgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgaWYgKCEhdmFsdWUgJiZcbiAgICAgICAgICAgICFPcGVyYW5kTWFrZXIuaXNOdW1lcmljKHZhbHVlKSAmJlxuICAgICAgICAgICAgIU9wZXJhbmRNYWtlci5pc0Jvb2xlYW5WYWx1ZSh2YWx1ZSkpXG4gICAgICAgICAgICB2YWx1ZSA9IFwiJ1wiICsgdmFsdWUgKyBcIidcIjtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH07XG4gICAgT3BlcmFuZE1ha2VyLmlzU3BhY2VTdHJpbmcgPSBmdW5jdGlvbiAoc3RyKSB7XG4gICAgICAgIHJldHVybiAhIXN0ciAmJiAhc3RyLnJlcGxhY2UoXCIgXCIsIFwiXCIpO1xuICAgIH07XG4gICAgT3BlcmFuZE1ha2VyLmlzTnVtZXJpYyA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBpZiAoISF2YWx1ZSAmJlxuICAgICAgICAgICAgKHZhbHVlLmluZGV4T2YoXCItXCIpID4gLTEgfHxcbiAgICAgICAgICAgICAgICB2YWx1ZS5pbmRleE9mKFwiK1wiKSA+IDEgfHxcbiAgICAgICAgICAgICAgICB2YWx1ZS5pbmRleE9mKFwiKlwiKSA+IC0xIHx8XG4gICAgICAgICAgICAgICAgdmFsdWUuaW5kZXhPZihcIl5cIikgPiAtMSB8fFxuICAgICAgICAgICAgICAgIHZhbHVlLmluZGV4T2YoXCIvXCIpID4gLTEgfHxcbiAgICAgICAgICAgICAgICB2YWx1ZS5pbmRleE9mKFwiJVwiKSA+IC0xKSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKE9wZXJhbmRNYWtlci5pc1NwYWNlU3RyaW5nKHZhbHVlKSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIF9oZWxwZXJzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJIZWxwZXJzXCJdLmlzTnVtYmVyKHZhbHVlKTtcbiAgICB9O1xuICAgIE9wZXJhbmRNYWtlci5pc0Jvb2xlYW5WYWx1ZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gKCEhdmFsdWUgJiZcbiAgICAgICAgICAgICh2YWx1ZS50b0xvd2VyQ2FzZSgpID09PSBcInRydWVcIiB8fCB2YWx1ZS50b0xvd2VyQ2FzZSgpID09PSBcImZhbHNlXCIpKTtcbiAgICB9O1xuICAgIE9wZXJhbmRNYWtlci5jb3VudERlY2ltYWxzID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIGlmIChfaGVscGVyc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiSGVscGVyc1wiXS5pc051bWJlcih2YWx1ZSkgJiYgTWF0aC5mbG9vcih2YWx1ZSkgIT09IHZhbHVlKSB7XG4gICAgICAgICAgICB2YXIgc3RycyA9IHZhbHVlLnRvU3RyaW5nKCkuc3BsaXQoXCIuXCIpO1xuICAgICAgICAgICAgcmV0dXJuIHN0cnMubGVuZ3RoID4gMSAmJiBzdHJzWzFdLmxlbmd0aCB8fCAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAwO1xuICAgIH07XG4gICAgT3BlcmFuZE1ha2VyLnBsdXNNaW51cyA9IGZ1bmN0aW9uIChhLCBiLCByZXMpIHtcbiAgICAgICAgdmFyIGRpZ2l0c0EgPSBPcGVyYW5kTWFrZXIuY291bnREZWNpbWFscyhhKTtcbiAgICAgICAgdmFyIGRpZ2l0c0IgPSBPcGVyYW5kTWFrZXIuY291bnREZWNpbWFscyhiKTtcbiAgICAgICAgaWYgKGRpZ2l0c0EgPiAwIHx8IGRpZ2l0c0IgPiAwKSB7XG4gICAgICAgICAgICB2YXIgZGlnaXRzID0gTWF0aC5tYXgoZGlnaXRzQSwgZGlnaXRzQik7XG4gICAgICAgICAgICByZXMgPSBwYXJzZUZsb2F0KHJlcy50b0ZpeGVkKGRpZ2l0cykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfTtcbiAgICBPcGVyYW5kTWFrZXIuaXNUd29WYWx1ZUVxdWFscyA9IGZ1bmN0aW9uICh4LCB5LCBpZ25vcmVPcmRlcikge1xuICAgICAgICBpZiAoaWdub3JlT3JkZXIgPT09IHZvaWQgMCkgeyBpZ25vcmVPcmRlciA9IHRydWU7IH1cbiAgICAgICAgaWYgKHggPT09IFwidW5kZWZpbmVkXCIpXG4gICAgICAgICAgICB4ID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAoeSA9PT0gXCJ1bmRlZmluZWRcIilcbiAgICAgICAgICAgIHkgPSB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiBfaGVscGVyc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiSGVscGVyc1wiXS5pc1R3b1ZhbHVlRXF1YWxzKHgsIHksIGlnbm9yZU9yZGVyKTtcbiAgICB9O1xuICAgIE9wZXJhbmRNYWtlci5vcGVyYXRvclRvU3RyaW5nID0gZnVuY3Rpb24gKG9wZXJhdG9yTmFtZSkge1xuICAgICAgICB2YXIgb3BTdHIgPSBPcGVyYW5kTWFrZXIuc2lnbnNbb3BlcmF0b3JOYW1lXTtcbiAgICAgICAgcmV0dXJuIG9wU3RyID09IG51bGwgPyBvcGVyYXRvck5hbWUgOiBvcFN0cjtcbiAgICB9O1xuICAgIE9wZXJhbmRNYWtlci5jb252ZXJ0VmFsRm9yRGF0ZUNvbXBhcmUgPSBmdW5jdGlvbiAodmFsLCBzZWNvbmQpIHtcbiAgICAgICAgaWYgKHNlY29uZCBpbnN0YW5jZW9mIERhdGUgJiYgdHlwZW9mIHZhbCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgdmFyIHJlcyA9IG5ldyBEYXRlKHZhbCk7XG4gICAgICAgICAgICByZXMuc2V0SG91cnMoMCwgMCwgMCk7XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfTtcbiAgICBPcGVyYW5kTWFrZXIudW5hcnlGdW5jdGlvbnMgPSB7XG4gICAgICAgIGVtcHR5OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiBfaGVscGVyc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiSGVscGVyc1wiXS5pc1ZhbHVlRW1wdHkodmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICBub3RlbXB0eTogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gIU9wZXJhbmRNYWtlci51bmFyeUZ1bmN0aW9ucy5lbXB0eSh2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIG5lZ2F0ZTogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gIXZhbHVlO1xuICAgICAgICB9LFxuICAgIH07XG4gICAgT3BlcmFuZE1ha2VyLmJpbmFyeUZ1bmN0aW9ucyA9IHtcbiAgICAgICAgYXJpdGhtZXRpY09wOiBmdW5jdGlvbiAob3BlcmF0b3JOYW1lKSB7XG4gICAgICAgICAgICB2YXIgY29udmVydEZvckFyaXRobWV0aWNPcCA9IGZ1bmN0aW9uICh2YWwsIHNlY29uZCkge1xuICAgICAgICAgICAgICAgIGlmICghX2hlbHBlcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkhlbHBlcnNcIl0uaXNWYWx1ZUVtcHR5KHZhbCkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWw7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBzZWNvbmQgPT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsID09PSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc2Vjb25kID09PSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzZWNvbmQpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgYSA9IGNvbnZlcnRGb3JBcml0aG1ldGljT3AoYSwgYik7XG4gICAgICAgICAgICAgICAgYiA9IGNvbnZlcnRGb3JBcml0aG1ldGljT3AoYiwgYSk7XG4gICAgICAgICAgICAgICAgdmFyIGNvbnN1bWVyID0gT3BlcmFuZE1ha2VyLmJpbmFyeUZ1bmN0aW9uc1tvcGVyYXRvck5hbWVdO1xuICAgICAgICAgICAgICAgIHJldHVybiBjb25zdW1lciA9PSBudWxsID8gbnVsbCA6IGNvbnN1bWVyLmNhbGwodGhpcywgYSwgYik7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgICAgICBhbmQ6IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICByZXR1cm4gYSAmJiBiO1xuICAgICAgICB9LFxuICAgICAgICBvcjogZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgIHJldHVybiBhIHx8IGI7XG4gICAgICAgIH0sXG4gICAgICAgIHBsdXM6IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICByZXR1cm4gX2hlbHBlcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkhlbHBlcnNcIl0uc3VtQW55VmFsdWVzKGEsIGIpO1xuICAgICAgICB9LFxuICAgICAgICBtaW51czogZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgIHJldHVybiBfaGVscGVyc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiSGVscGVyc1wiXS5jb3JyZWN0QWZ0ZXJQbHVzTWluaXMoYSwgYiwgYSAtIGIpO1xuICAgICAgICB9LFxuICAgICAgICBtdWw6IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICByZXR1cm4gX2hlbHBlcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkhlbHBlcnNcIl0uY29ycmVjdEFmdGVyTXVsdGlwbGUoYSwgYiwgYSAqIGIpO1xuICAgICAgICB9LFxuICAgICAgICBkaXY6IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICBpZiAoIWIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICByZXR1cm4gYSAvIGI7XG4gICAgICAgIH0sXG4gICAgICAgIG1vZDogZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgIGlmICghYilcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIHJldHVybiBhICUgYjtcbiAgICAgICAgfSxcbiAgICAgICAgcG93ZXI6IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5wb3coYSwgYik7XG4gICAgICAgIH0sXG4gICAgICAgIGdyZWF0ZXI6IGZ1bmN0aW9uIChsZWZ0LCByaWdodCkge1xuICAgICAgICAgICAgaWYgKGxlZnQgPT0gbnVsbCB8fCByaWdodCA9PSBudWxsKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGxlZnQgPSBPcGVyYW5kTWFrZXIuY29udmVydFZhbEZvckRhdGVDb21wYXJlKGxlZnQsIHJpZ2h0KTtcbiAgICAgICAgICAgIHJpZ2h0ID0gT3BlcmFuZE1ha2VyLmNvbnZlcnRWYWxGb3JEYXRlQ29tcGFyZShyaWdodCwgbGVmdCk7XG4gICAgICAgICAgICByZXR1cm4gbGVmdCA+IHJpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBsZXNzOiBmdW5jdGlvbiAobGVmdCwgcmlnaHQpIHtcbiAgICAgICAgICAgIGlmIChsZWZ0ID09IG51bGwgfHwgcmlnaHQgPT0gbnVsbClcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBsZWZ0ID0gT3BlcmFuZE1ha2VyLmNvbnZlcnRWYWxGb3JEYXRlQ29tcGFyZShsZWZ0LCByaWdodCk7XG4gICAgICAgICAgICByaWdodCA9IE9wZXJhbmRNYWtlci5jb252ZXJ0VmFsRm9yRGF0ZUNvbXBhcmUocmlnaHQsIGxlZnQpO1xuICAgICAgICAgICAgcmV0dXJuIGxlZnQgPCByaWdodDtcbiAgICAgICAgfSxcbiAgICAgICAgZ3JlYXRlcm9yZXF1YWw6IGZ1bmN0aW9uIChsZWZ0LCByaWdodCkge1xuICAgICAgICAgICAgaWYgKE9wZXJhbmRNYWtlci5iaW5hcnlGdW5jdGlvbnMuZXF1YWwobGVmdCwgcmlnaHQpKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIE9wZXJhbmRNYWtlci5iaW5hcnlGdW5jdGlvbnMuZ3JlYXRlcihsZWZ0LCByaWdodCk7XG4gICAgICAgIH0sXG4gICAgICAgIGxlc3NvcmVxdWFsOiBmdW5jdGlvbiAobGVmdCwgcmlnaHQpIHtcbiAgICAgICAgICAgIGlmIChPcGVyYW5kTWFrZXIuYmluYXJ5RnVuY3Rpb25zLmVxdWFsKGxlZnQsIHJpZ2h0KSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBPcGVyYW5kTWFrZXIuYmluYXJ5RnVuY3Rpb25zLmxlc3MobGVmdCwgcmlnaHQpO1xuICAgICAgICB9LFxuICAgICAgICBlcXVhbDogZnVuY3Rpb24gKGxlZnQsIHJpZ2h0LCBzdHJpY3RDb21wYXJlKSB7XG4gICAgICAgICAgICBsZWZ0ID0gT3BlcmFuZE1ha2VyLmNvbnZlcnRWYWxGb3JEYXRlQ29tcGFyZShsZWZ0LCByaWdodCk7XG4gICAgICAgICAgICByaWdodCA9IE9wZXJhbmRNYWtlci5jb252ZXJ0VmFsRm9yRGF0ZUNvbXBhcmUocmlnaHQsIGxlZnQpO1xuICAgICAgICAgICAgcmV0dXJuIE9wZXJhbmRNYWtlci5pc1R3b1ZhbHVlRXF1YWxzKGxlZnQsIHJpZ2h0LCBzdHJpY3RDb21wYXJlICE9PSB0cnVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgbm90ZXF1YWw6IGZ1bmN0aW9uIChsZWZ0LCByaWdodCkge1xuICAgICAgICAgICAgcmV0dXJuICFPcGVyYW5kTWFrZXIuYmluYXJ5RnVuY3Rpb25zLmVxdWFsKGxlZnQsIHJpZ2h0KTtcbiAgICAgICAgfSxcbiAgICAgICAgY29udGFpbnM6IGZ1bmN0aW9uIChsZWZ0LCByaWdodCkge1xuICAgICAgICAgICAgcmV0dXJuIE9wZXJhbmRNYWtlci5iaW5hcnlGdW5jdGlvbnMuY29udGFpbnNDb3JlKGxlZnQsIHJpZ2h0LCB0cnVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgbm90Y29udGFpbnM6IGZ1bmN0aW9uIChsZWZ0LCByaWdodCkge1xuICAgICAgICAgICAgaWYgKCFsZWZ0ICYmICFfaGVscGVyc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiSGVscGVyc1wiXS5pc1ZhbHVlRW1wdHkocmlnaHQpKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIE9wZXJhbmRNYWtlci5iaW5hcnlGdW5jdGlvbnMuY29udGFpbnNDb3JlKGxlZnQsIHJpZ2h0LCBmYWxzZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGFueW9mOiBmdW5jdGlvbiAobGVmdCwgcmlnaHQpIHtcbiAgICAgICAgICAgIGlmIChfaGVscGVyc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiSGVscGVyc1wiXS5pc1ZhbHVlRW1wdHkobGVmdCkgJiYgX2hlbHBlcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkhlbHBlcnNcIl0uaXNWYWx1ZUVtcHR5KHJpZ2h0KSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChfaGVscGVyc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiSGVscGVyc1wiXS5pc1ZhbHVlRW1wdHkobGVmdCkgfHxcbiAgICAgICAgICAgICAgICAoIUFycmF5LmlzQXJyYXkobGVmdCkgJiYgbGVmdC5sZW5ndGggPT09IDApKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGlmIChfaGVscGVyc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiSGVscGVyc1wiXS5pc1ZhbHVlRW1wdHkocmlnaHQpKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGxlZnQpKVxuICAgICAgICAgICAgICAgIHJldHVybiBPcGVyYW5kTWFrZXIuYmluYXJ5RnVuY3Rpb25zLmNvbnRhaW5zKHJpZ2h0LCBsZWZ0KTtcbiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShyaWdodCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIE9wZXJhbmRNYWtlci5iaW5hcnlGdW5jdGlvbnMuY29udGFpbnMobGVmdCwgcmlnaHQpO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByaWdodC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChPcGVyYW5kTWFrZXIuYmluYXJ5RnVuY3Rpb25zLmNvbnRhaW5zKGxlZnQsIHJpZ2h0W2ldKSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0sXG4gICAgICAgIGFsbG9mOiBmdW5jdGlvbiAobGVmdCwgcmlnaHQpIHtcbiAgICAgICAgICAgIGlmICghbGVmdCAmJiAhX2hlbHBlcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkhlbHBlcnNcIl0uaXNWYWx1ZUVtcHR5KHJpZ2h0KSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkocmlnaHQpKVxuICAgICAgICAgICAgICAgIHJldHVybiBPcGVyYW5kTWFrZXIuYmluYXJ5RnVuY3Rpb25zLmNvbnRhaW5zKGxlZnQsIHJpZ2h0KTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmlnaHQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoIU9wZXJhbmRNYWtlci5iaW5hcnlGdW5jdGlvbnMuY29udGFpbnMobGVmdCwgcmlnaHRbaV0pKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgY29udGFpbnNDb3JlOiBmdW5jdGlvbiAobGVmdCwgcmlnaHQsIGlzQ29udGFpbnMpIHtcbiAgICAgICAgICAgIGlmICghbGVmdCAmJiBsZWZ0ICE9PSAwICYmIGxlZnQgIT09IGZhbHNlKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGlmICghbGVmdC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBsZWZ0ID0gbGVmdC50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcmlnaHQgPT09IFwic3RyaW5nXCIgfHwgcmlnaHQgaW5zdGFuY2VvZiBTdHJpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgbGVmdCA9IGxlZnQudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgcmlnaHQgPSByaWdodC50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2YgbGVmdCA9PT0gXCJzdHJpbmdcIiB8fCBsZWZ0IGluc3RhbmNlb2YgU3RyaW5nKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFyaWdodClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIHJpZ2h0ID0gcmlnaHQudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICB2YXIgZm91bmQgPSBsZWZ0LmluZGV4T2YocmlnaHQpID4gLTE7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzQ29udGFpbnMgPyBmb3VuZCA6ICFmb3VuZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciByaWdodEFycmF5ID0gQXJyYXkuaXNBcnJheShyaWdodCkgPyByaWdodCA6IFtyaWdodF07XG4gICAgICAgICAgICBmb3IgKHZhciBySW5kZXggPSAwOyBySW5kZXggPCByaWdodEFycmF5Lmxlbmd0aDsgckluZGV4KyspIHtcbiAgICAgICAgICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgICAgICAgICAgcmlnaHQgPSByaWdodEFycmF5W3JJbmRleF07XG4gICAgICAgICAgICAgICAgZm9yICg7IGkgPCBsZWZ0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChPcGVyYW5kTWFrZXIuaXNUd29WYWx1ZUVxdWFscyhsZWZ0W2ldLCByaWdodCkpXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGkgPT0gbGVmdC5sZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAhaXNDb250YWlucztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBpc0NvbnRhaW5zO1xuICAgICAgICB9LFxuICAgIH07XG4gICAgT3BlcmFuZE1ha2VyLnNpZ25zID0ge1xuICAgICAgICBsZXNzOiBcIjxcIixcbiAgICAgICAgbGVzc29yZXF1YWw6IFwiPD1cIixcbiAgICAgICAgZ3JlYXRlcjogXCI+XCIsXG4gICAgICAgIGdyZWF0ZXJvcmVxdWFsOiBcIj49XCIsXG4gICAgICAgIGVxdWFsOiBcIj09XCIsXG4gICAgICAgIG5vdGVxdWFsOiBcIiE9XCIsXG4gICAgICAgIHBsdXM6IFwiK1wiLFxuICAgICAgICBtaW51czogXCItXCIsXG4gICAgICAgIG11bDogXCIqXCIsXG4gICAgICAgIGRpdjogXCIvXCIsXG4gICAgICAgIGFuZDogXCJhbmRcIixcbiAgICAgICAgb3I6IFwib3JcIixcbiAgICAgICAgcG93ZXI6IFwiXlwiLFxuICAgICAgICBtb2Q6IFwiJVwiLFxuICAgICAgICBuZWdhdGU6IFwiIVwiLFxuICAgIH07XG4gICAgcmV0dXJuIE9wZXJhbmRNYWtlcjtcbn0oKSk7XG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9mbG93cGFuZWwudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL2Zsb3dwYW5lbC50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogRmxvd1BhbmVsTW9kZWwgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiRmxvd1BhbmVsTW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBGbG93UGFuZWxNb2RlbDsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vanNvbm9iamVjdCAqLyBcIi4vc3JjL2pzb25vYmplY3QudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3BhbmVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3BhbmVsICovIFwiLi9zcmMvcGFuZWwudHNcIik7XG52YXIgX19leHRlbmRzID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcblxuXG4vKipcbiAqIFRoZSBmbG93IHBhbmVsIG9iamVjdC4gSXQgaXMgYSBjb250YWluZXIgd2l0aCBmbG93IGxheW91dCB3aGVyZSB5b3UgY2FuIG1peCBxdWVzdGlvbnMgd2l0aCBtYXJrZG93biB0ZXh0LlxuICpcbiAqL1xudmFyIEZsb3dQYW5lbE1vZGVsID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhGbG93UGFuZWxNb2RlbCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBGbG93UGFuZWxNb2RlbChuYW1lKSB7XG4gICAgICAgIGlmIChuYW1lID09PSB2b2lkIDApIHsgbmFtZSA9IFwiXCI7IH1cbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbmFtZSkgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJjb250ZW50XCIsIF90aGlzLCB0cnVlKTtcbiAgICAgICAgX3RoaXMucmVnaXN0ZXJQcm9wZXJ0eUNoYW5nZWRIYW5kbGVycyhbXCJjb250ZW50XCJdLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5vbkNvbnRlbnRDaGFuZ2VkKCk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIEZsb3dQYW5lbE1vZGVsLnByb3RvdHlwZS5nZXRUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gXCJmbG93cGFuZWxcIjtcbiAgICB9O1xuICAgIEZsb3dQYW5lbE1vZGVsLnByb3RvdHlwZS5nZXRDaGlsZHJlbkxheW91dFR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBcImZsb3dcIjtcbiAgICB9O1xuICAgIEZsb3dQYW5lbE1vZGVsLnByb3RvdHlwZS5vblN1cnZleUxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUub25TdXJ2ZXlMb2FkLmNhbGwodGhpcyk7XG4gICAgICAgIHRoaXMub25Db250ZW50Q2hhbmdlZCgpO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEZsb3dQYW5lbE1vZGVsLnByb3RvdHlwZSwgXCJjb250ZW50XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJjb250ZW50XCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwiY29udGVudFwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEZsb3dQYW5lbE1vZGVsLnByb3RvdHlwZSwgXCJsb2NDb250ZW50XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcImNvbnRlbnRcIik7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRmxvd1BhbmVsTW9kZWwucHJvdG90eXBlLCBcImh0bWxcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJodG1sXCIsIFwiXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImh0bWxcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIEZsb3dQYW5lbE1vZGVsLnByb3RvdHlwZS5vbkNvbnRlbnRDaGFuZ2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgaHRtbCA9IFwiXCI7XG4gICAgICAgIGlmICghIXRoaXMub25DdXN0b21IdG1sUHJvZHVjaW5nKSB7XG4gICAgICAgICAgICBodG1sID0gdGhpcy5vbkN1c3RvbUh0bWxQcm9kdWNpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGh0bWwgPSB0aGlzLnByb2R1Y2VIdG1sKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5odG1sID0gaHRtbDtcbiAgICAgICAgaWYgKCEhdGhpcy5jb250ZW50Q2hhbmdlZENhbGxiYWNrKVxuICAgICAgICAgICAgdGhpcy5jb250ZW50Q2hhbmdlZENhbGxiYWNrKCk7XG4gICAgfTtcbiAgICBGbG93UGFuZWxNb2RlbC5wcm90b3R5cGUucHJvZHVjZUh0bWwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBodG1sID0gW107XG4gICAgICAgIC8vY29udGVudEVsZW1lbnROYW1lUHJlZml4XG4gICAgICAgIHZhciByZWdFeCA9IC97KC4qPyhlbGVtZW50OilbXiRdLio/KX0vZztcbiAgICAgICAgdmFyIHN0ciA9IHRoaXMuY29udGVudDtcbiAgICAgICAgdmFyIHN0YXJ0SW5kZXggPSAwO1xuICAgICAgICB2YXIgcmVzID0gbnVsbDtcbiAgICAgICAgd2hpbGUgKChyZXMgPSByZWdFeC5leGVjKHN0cikpICE9PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAocmVzLmluZGV4ID4gc3RhcnRJbmRleCkge1xuICAgICAgICAgICAgICAgIGh0bWwucHVzaChzdHIuc3Vic3RyaW5nKHN0YXJ0SW5kZXgsIHJlcy5pbmRleCkpO1xuICAgICAgICAgICAgICAgIHN0YXJ0SW5kZXggPSByZXMuaW5kZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgcXVlc3Rpb24gPSB0aGlzLmdldFF1ZXN0aW9uRnJvbVRleHQocmVzWzBdKTtcbiAgICAgICAgICAgIGlmICghIXF1ZXN0aW9uKSB7XG4gICAgICAgICAgICAgICAgaHRtbC5wdXNoKHRoaXMuZ2V0SHRtbEZvclF1ZXN0aW9uKHF1ZXN0aW9uKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBodG1sLnB1c2goc3RyLnN1YnN0cmluZyhzdGFydEluZGV4LCByZXMuaW5kZXggKyByZXNbMF0ubGVuZ3RoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdGFydEluZGV4ID0gcmVzLmluZGV4ICsgcmVzWzBdLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhcnRJbmRleCA8IHN0ci5sZW5ndGgpIHtcbiAgICAgICAgICAgIGh0bWwucHVzaChzdHIuc3Vic3RyaW5nKHN0YXJ0SW5kZXgsIHN0ci5sZW5ndGgpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaHRtbC5qb2luKFwiXCIpLnJlcGxhY2UobmV3IFJlZ0V4cChcIjxicj5cIiwgXCJnXCIpLCBcIjxici8+XCIpO1xuICAgIH07XG4gICAgRmxvd1BhbmVsTW9kZWwucHJvdG90eXBlLmdldFF1ZXN0aW9uRnJvbVRleHQgPSBmdW5jdGlvbiAoc3RyKSB7XG4gICAgICAgIHN0ciA9IHN0ci5zdWJzdHJpbmcoMSwgc3RyLmxlbmd0aCAtIDEpO1xuICAgICAgICBzdHIgPSBzdHIucmVwbGFjZShGbG93UGFuZWxNb2RlbC5jb250ZW50RWxlbWVudE5hbWVQcmVmaXgsIFwiXCIpLnRyaW0oKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UXVlc3Rpb25CeU5hbWUoc3RyKTtcbiAgICB9O1xuICAgIEZsb3dQYW5lbE1vZGVsLnByb3RvdHlwZS5nZXRIdG1sRm9yUXVlc3Rpb24gPSBmdW5jdGlvbiAocXVlc3Rpb24pIHtcbiAgICAgICAgaWYgKCEhdGhpcy5vbkdldEh0bWxGb3JRdWVzdGlvbilcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm9uR2V0SHRtbEZvclF1ZXN0aW9uKHF1ZXN0aW9uKTtcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfTtcbiAgICBGbG93UGFuZWxNb2RlbC5wcm90b3R5cGUuZ2V0UXVlc3Rpb25IdG1sSWQgPSBmdW5jdGlvbiAocXVlc3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmFtZSArIFwiX1wiICsgcXVlc3Rpb24uaWQ7XG4gICAgfTtcbiAgICBGbG93UGFuZWxNb2RlbC5wcm90b3R5cGUub25BZGRFbGVtZW50ID0gZnVuY3Rpb24gKGVsZW1lbnQsIGluZGV4KSB7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUub25BZGRFbGVtZW50LmNhbGwodGhpcywgZWxlbWVudCwgaW5kZXgpO1xuICAgICAgICB0aGlzLmFkZEVsZW1lbnRUb0NvbnRlbnQoZWxlbWVudCk7XG4gICAgICAgIGVsZW1lbnQucmVuZGVyV2lkdGggPSBcIlwiO1xuICAgIH07XG4gICAgRmxvd1BhbmVsTW9kZWwucHJvdG90eXBlLm9uUmVtb3ZlRWxlbWVudCA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICAgIHZhciBzZWFyY2hTdHIgPSB0aGlzLmdldEVsZW1lbnRDb250ZW50VGV4dChlbGVtZW50KTtcbiAgICAgICAgdGhpcy5jb250ZW50ID0gdGhpcy5jb250ZW50LnJlcGxhY2Uoc2VhcmNoU3RyLCBcIlwiKTtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5vblJlbW92ZUVsZW1lbnQuY2FsbCh0aGlzLCBlbGVtZW50KTtcbiAgICB9O1xuICAgIEZsb3dQYW5lbE1vZGVsLnByb3RvdHlwZS5kcmFnRHJvcE1vdmVFbGVtZW50ID0gZnVuY3Rpb24gKHNyYywgdGFyZ2V0LCB0YXJnZXRJbmRleCkgeyB9O1xuICAgIEZsb3dQYW5lbE1vZGVsLnByb3RvdHlwZS5hZGRFbGVtZW50VG9Db250ZW50ID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNMb2FkaW5nRnJvbUpzb24pXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciB0ZXh0ID0gdGhpcy5nZXRFbGVtZW50Q29udGVudFRleHQoZWxlbWVudCk7XG4gICAgICAgIGlmICghdGhpcy5pbnNlcnRUZXh0QXRDdXJzb3IodGV4dCkpIHtcbiAgICAgICAgICAgIHRoaXMuY29udGVudCA9IHRoaXMuY29udGVudCArIHRleHQ7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEZsb3dQYW5lbE1vZGVsLnByb3RvdHlwZS5pbnNlcnRUZXh0QXRDdXJzb3IgPSBmdW5jdGlvbiAodGV4dCwgcHJldk5hbWUpIHtcbiAgICAgICAgaWYgKHByZXZOYW1lID09PSB2b2lkIDApIHsgcHJldk5hbWUgPSBudWxsOyB9XG4gICAgICAgIGlmICghdGhpcy5pc0Rlc2lnbk1vZGUgfHxcbiAgICAgICAgICAgIHR5cGVvZiBkb2N1bWVudCA9PT0gXCJ1bmRlZmluZWRcIiB8fFxuICAgICAgICAgICAgIXdpbmRvdy5nZXRTZWxlY3Rpb24pXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHZhciBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICAgIGlmIChzZWwuZ2V0UmFuZ2VBdCAmJiBzZWwucmFuZ2VDb3VudCkge1xuICAgICAgICAgICAgdmFyIHJhbmdlID0gc2VsLmdldFJhbmdlQXQoMCk7XG4gICAgICAgICAgICByYW5nZS5kZWxldGVDb250ZW50cygpO1xuICAgICAgICAgICAgcmFuZ2UuaW5zZXJ0Tm9kZShkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0ZXh0KSk7XG4gICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgICAgICBpZiAoc2VsZi5nZXRDb250ZW50KSB7XG4gICAgICAgICAgICAgICAgdmFyIHN0ciA9IHNlbGYuZ2V0Q29udGVudChwcmV2TmFtZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5jb250ZW50ID0gc3RyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gICAgRmxvd1BhbmVsTW9kZWwucHJvdG90eXBlLmdldEVsZW1lbnRDb250ZW50VGV4dCA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICAgIHJldHVybiBcIntcIiArIEZsb3dQYW5lbE1vZGVsLmNvbnRlbnRFbGVtZW50TmFtZVByZWZpeCArIGVsZW1lbnQubmFtZSArIFwifVwiO1xuICAgIH07XG4gICAgRmxvd1BhbmVsTW9kZWwuY29udGVudEVsZW1lbnROYW1lUHJlZml4ID0gXCJlbGVtZW50OlwiO1xuICAgIHJldHVybiBGbG93UGFuZWxNb2RlbDtcbn0oX3BhbmVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJQYW5lbE1vZGVsXCJdKSk7XG5cbl9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJTZXJpYWxpemVyXCJdLmFkZENsYXNzKFwiZmxvd3BhbmVsXCIsIFt7IG5hbWU6IFwiY29udGVudDpodG1sXCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NDb250ZW50XCIgfV0sIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbmV3IEZsb3dQYW5lbE1vZGVsKCk7XG59LCBcInBhbmVsXCIpO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL2Z1bmN0aW9uc2ZhY3RvcnkudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9mdW5jdGlvbnNmYWN0b3J5LnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogRnVuY3Rpb25GYWN0b3J5LCByZWdpc3RlckZ1bmN0aW9uICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkZ1bmN0aW9uRmFjdG9yeVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEZ1bmN0aW9uRmFjdG9yeTsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwicmVnaXN0ZXJGdW5jdGlvblwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHJlZ2lzdGVyRnVuY3Rpb247IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9oZWxwZXJzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2hlbHBlcnMgKi8gXCIuL3NyYy9oZWxwZXJzLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9zZXR0aW5ncyAqLyBcIi4vc3JjL3NldHRpbmdzLnRzXCIpO1xuXG5cbnZhciBGdW5jdGlvbkZhY3RvcnkgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gRnVuY3Rpb25GYWN0b3J5KCkge1xuICAgICAgICB0aGlzLmZ1bmN0aW9uSGFzaCA9IHt9O1xuICAgICAgICB0aGlzLmlzQXN5bmNIYXNoID0ge307XG4gICAgfVxuICAgIEZ1bmN0aW9uRmFjdG9yeS5wcm90b3R5cGUucmVnaXN0ZXIgPSBmdW5jdGlvbiAobmFtZSwgZnVuYywgaXNBc3luYykge1xuICAgICAgICBpZiAoaXNBc3luYyA9PT0gdm9pZCAwKSB7IGlzQXN5bmMgPSBmYWxzZTsgfVxuICAgICAgICB0aGlzLmZ1bmN0aW9uSGFzaFtuYW1lXSA9IGZ1bmM7XG4gICAgICAgIGlmIChpc0FzeW5jKVxuICAgICAgICAgICAgdGhpcy5pc0FzeW5jSGFzaFtuYW1lXSA9IHRydWU7XG4gICAgfTtcbiAgICBGdW5jdGlvbkZhY3RvcnkucHJvdG90eXBlLnVucmVnaXN0ZXIgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICBkZWxldGUgdGhpcy5mdW5jdGlvbkhhc2hbbmFtZV07XG4gICAgICAgIGRlbGV0ZSB0aGlzLmlzQXN5bmNIYXNoW25hbWVdO1xuICAgIH07XG4gICAgRnVuY3Rpb25GYWN0b3J5LnByb3RvdHlwZS5oYXNGdW5jdGlvbiA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuZnVuY3Rpb25IYXNoW25hbWVdO1xuICAgIH07XG4gICAgRnVuY3Rpb25GYWN0b3J5LnByb3RvdHlwZS5pc0FzeW5jRnVuY3Rpb24gPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICByZXR1cm4gISF0aGlzLmlzQXN5bmNIYXNoW25hbWVdO1xuICAgIH07XG4gICAgRnVuY3Rpb25GYWN0b3J5LnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5mdW5jdGlvbkhhc2ggPSB7fTtcbiAgICB9O1xuICAgIEZ1bmN0aW9uRmFjdG9yeS5wcm90b3R5cGUuZ2V0QWxsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLmZ1bmN0aW9uSGFzaCkge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0LnNvcnQoKTtcbiAgICB9O1xuICAgIEZ1bmN0aW9uRmFjdG9yeS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKG5hbWUsIHBhcmFtcywgcHJvcGVydGllcykge1xuICAgICAgICBpZiAocHJvcGVydGllcyA9PT0gdm9pZCAwKSB7IHByb3BlcnRpZXMgPSBudWxsOyB9XG4gICAgICAgIHZhciBmdW5jID0gdGhpcy5mdW5jdGlvbkhhc2hbbmFtZV07XG4gICAgICAgIGlmICghZnVuYylcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB2YXIgY2xhc3NSdW5uZXIgPSB7XG4gICAgICAgICAgICBmdW5jOiBmdW5jLFxuICAgICAgICB9O1xuICAgICAgICBpZiAocHJvcGVydGllcykge1xuICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICBjbGFzc1J1bm5lcltrZXldID0gcHJvcGVydGllc1trZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbGFzc1J1bm5lci5mdW5jKHBhcmFtcyk7XG4gICAgfTtcbiAgICBGdW5jdGlvbkZhY3RvcnkuSW5zdGFuY2UgPSBuZXcgRnVuY3Rpb25GYWN0b3J5KCk7XG4gICAgcmV0dXJuIEZ1bmN0aW9uRmFjdG9yeTtcbn0oKSk7XG5cbnZhciByZWdpc3RlckZ1bmN0aW9uID0gRnVuY3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyO1xuZnVuY3Rpb24gZ2V0UGFyYW1zQXNBcnJheSh2YWx1ZSwgYXJyKSB7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwpXG4gICAgICAgIHJldHVybjtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgZ2V0UGFyYW1zQXNBcnJheSh2YWx1ZVtpXSwgYXJyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKF9oZWxwZXJzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJIZWxwZXJzXCJdLmlzTnVtYmVyKHZhbHVlKSkge1xuICAgICAgICAgICAgdmFsdWUgPSBfaGVscGVyc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiSGVscGVyc1wiXS5nZXROdW1iZXIodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGFyci5wdXNoKHZhbHVlKTtcbiAgICB9XG59XG5mdW5jdGlvbiBzdW0ocGFyYW1zKSB7XG4gICAgdmFyIGFyciA9IFtdO1xuICAgIGdldFBhcmFtc0FzQXJyYXkocGFyYW1zLCBhcnIpO1xuICAgIHZhciByZXMgPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJlcyA9IF9oZWxwZXJzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJIZWxwZXJzXCJdLmNvcnJlY3RBZnRlclBsdXNNaW5pcyhyZXMsIGFycltpXSwgcmVzICsgYXJyW2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbn1cbkZ1bmN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlcihcInN1bVwiLCBzdW0pO1xuZnVuY3Rpb24gbWluX21heChwYXJhbXMsIGlzTWluKSB7XG4gICAgdmFyIGFyciA9IFtdO1xuICAgIGdldFBhcmFtc0FzQXJyYXkocGFyYW1zLCBhcnIpO1xuICAgIHZhciByZXMgPSB1bmRlZmluZWQ7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHJlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXMgPSBhcnJbaV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzTWluKSB7XG4gICAgICAgICAgICBpZiAocmVzID4gYXJyW2ldKVxuICAgICAgICAgICAgICAgIHJlcyA9IGFycltpXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChyZXMgPCBhcnJbaV0pXG4gICAgICAgICAgICAgICAgcmVzID0gYXJyW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG5mdW5jdGlvbiBtaW4ocGFyYW1zKSB7XG4gICAgcmV0dXJuIG1pbl9tYXgocGFyYW1zLCB0cnVlKTtcbn1cbkZ1bmN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlcihcIm1pblwiLCBtaW4pO1xuZnVuY3Rpb24gbWF4KHBhcmFtcykge1xuICAgIHJldHVybiBtaW5fbWF4KHBhcmFtcywgZmFsc2UpO1xufVxuRnVuY3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyKFwibWF4XCIsIG1heCk7XG5mdW5jdGlvbiBjb3VudChwYXJhbXMpIHtcbiAgICB2YXIgYXJyID0gW107XG4gICAgZ2V0UGFyYW1zQXNBcnJheShwYXJhbXMsIGFycik7XG4gICAgcmV0dXJuIGFyci5sZW5ndGg7XG59XG5GdW5jdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXIoXCJjb3VudFwiLCBjb3VudCk7XG5mdW5jdGlvbiBhdmcocGFyYW1zKSB7XG4gICAgdmFyIGFyciA9IFtdO1xuICAgIGdldFBhcmFtc0FzQXJyYXkocGFyYW1zLCBhcnIpO1xuICAgIHZhciByZXMgPSBzdW0ocGFyYW1zKTtcbiAgICByZXR1cm4gYXJyLmxlbmd0aCA+IDAgPyByZXMgLyBhcnIubGVuZ3RoIDogMDtcbn1cbkZ1bmN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlcihcImF2Z1wiLCBhdmcpO1xuZnVuY3Rpb24gZ2V0SW5BcnJheVBhcmFtcyhwYXJhbXMpIHtcbiAgICBpZiAocGFyYW1zLmxlbmd0aCAhPSAyKVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB2YXIgYXJyID0gcGFyYW1zWzBdO1xuICAgIGlmICghYXJyKVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyKSAmJiAhQXJyYXkuaXNBcnJheShPYmplY3Qua2V5cyhhcnIpKSlcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgdmFyIG5hbWUgPSBwYXJhbXNbMV07XG4gICAgaWYgKHR5cGVvZiBuYW1lICE9PSBcInN0cmluZ1wiICYmICEobmFtZSBpbnN0YW5jZW9mIFN0cmluZykpXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIHJldHVybiB7IGRhdGE6IGFyciwgbmFtZTogbmFtZSB9O1xufVxuZnVuY3Rpb24gY29udmVydFRvTnVtYmVyKHZhbCkge1xuICAgIGlmICh0eXBlb2YgdmFsID09PSBcInN0cmluZ1wiKVxuICAgICAgICByZXR1cm4gX2hlbHBlcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkhlbHBlcnNcIl0uaXNOdW1iZXIodmFsKSA/IF9oZWxwZXJzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJIZWxwZXJzXCJdLmdldE51bWJlcih2YWwpIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiB2YWw7XG59XG5mdW5jdGlvbiBwcm9jZXNzSXRlbUluQXJyYXkoaXRlbSwgbmFtZSwgcmVzLCBmdW5jLCBuZWVkVG9Db252ZXJ0KSB7XG4gICAgaWYgKCFpdGVtIHx8IF9oZWxwZXJzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJIZWxwZXJzXCJdLmlzVmFsdWVFbXB0eShpdGVtW25hbWVdKSlcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB2YXIgdmFsID0gbmVlZFRvQ29udmVydCA/IGNvbnZlcnRUb051bWJlcihpdGVtW25hbWVdKSA6IDE7XG4gICAgcmV0dXJuIGZ1bmMocmVzLCB2YWwpO1xufVxuZnVuY3Rpb24gY2FsY0luQXJyYXkocGFyYW1zLCBmdW5jLCBuZWVkVG9Db252ZXJ0KSB7XG4gICAgaWYgKG5lZWRUb0NvbnZlcnQgPT09IHZvaWQgMCkgeyBuZWVkVG9Db252ZXJ0ID0gdHJ1ZTsgfVxuICAgIHZhciB2ID0gZ2V0SW5BcnJheVBhcmFtcyhwYXJhbXMpO1xuICAgIGlmICghdilcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB2YXIgcmVzID0gdW5kZWZpbmVkO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHYuZGF0YSkpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2LmRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHJlcyA9IHByb2Nlc3NJdGVtSW5BcnJheSh2LmRhdGFbaV0sIHYubmFtZSwgcmVzLCBmdW5jLCBuZWVkVG9Db252ZXJ0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHYuZGF0YSkge1xuICAgICAgICAgICAgcmVzID0gcHJvY2Vzc0l0ZW1JbkFycmF5KHYuZGF0YVtrZXldLCB2Lm5hbWUsIHJlcywgZnVuYywgbmVlZFRvQ29udmVydCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbn1cbmZ1bmN0aW9uIHN1bUluQXJyYXkocGFyYW1zKSB7XG4gICAgdmFyIHJlcyA9IGNhbGNJbkFycmF5KHBhcmFtcywgZnVuY3Rpb24gKHJlcywgdmFsKSB7XG4gICAgICAgIGlmIChyZXMgPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmVzID0gMDtcbiAgICAgICAgaWYgKHZhbCA9PSB1bmRlZmluZWQgfHwgdmFsID09IG51bGwpXG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICByZXR1cm4gX2hlbHBlcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkhlbHBlcnNcIl0uY29ycmVjdEFmdGVyUGx1c01pbmlzKHJlcywgdmFsLCByZXMgKyB2YWwpO1xuICAgIH0pO1xuICAgIHJldHVybiByZXMgIT09IHVuZGVmaW5lZCA/IHJlcyA6IDA7XG59XG5GdW5jdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXIoXCJzdW1JbkFycmF5XCIsIHN1bUluQXJyYXkpO1xuZnVuY3Rpb24gbWluSW5BcnJheShwYXJhbXMpIHtcbiAgICByZXR1cm4gY2FsY0luQXJyYXkocGFyYW1zLCBmdW5jdGlvbiAocmVzLCB2YWwpIHtcbiAgICAgICAgaWYgKHJlcyA9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgICBpZiAodmFsID09IHVuZGVmaW5lZCB8fCB2YWwgPT0gbnVsbClcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIHJldHVybiByZXMgPCB2YWwgPyByZXMgOiB2YWw7XG4gICAgfSk7XG59XG5GdW5jdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXIoXCJtaW5JbkFycmF5XCIsIG1pbkluQXJyYXkpO1xuZnVuY3Rpb24gbWF4SW5BcnJheShwYXJhbXMpIHtcbiAgICByZXR1cm4gY2FsY0luQXJyYXkocGFyYW1zLCBmdW5jdGlvbiAocmVzLCB2YWwpIHtcbiAgICAgICAgaWYgKHJlcyA9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgICBpZiAodmFsID09IHVuZGVmaW5lZCB8fCB2YWwgPT0gbnVsbClcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIHJldHVybiByZXMgPiB2YWwgPyByZXMgOiB2YWw7XG4gICAgfSk7XG59XG5GdW5jdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXIoXCJtYXhJbkFycmF5XCIsIG1heEluQXJyYXkpO1xuZnVuY3Rpb24gY291bnRJbkFycmF5KHBhcmFtcykge1xuICAgIHZhciByZXMgPSBjYWxjSW5BcnJheShwYXJhbXMsIGZ1bmN0aW9uIChyZXMsIHZhbCkge1xuICAgICAgICBpZiAocmVzID09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJlcyA9IDA7XG4gICAgICAgIGlmICh2YWwgPT0gdW5kZWZpbmVkIHx8IHZhbCA9PSBudWxsKVxuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgcmV0dXJuIHJlcyArIDE7XG4gICAgfSwgZmFsc2UpO1xuICAgIHJldHVybiByZXMgIT09IHVuZGVmaW5lZCA/IHJlcyA6IDA7XG59XG5GdW5jdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXIoXCJjb3VudEluQXJyYXlcIiwgY291bnRJbkFycmF5KTtcbmZ1bmN0aW9uIGF2Z0luQXJyYXkocGFyYW1zKSB7XG4gICAgdmFyIGNvdW50ID0gY291bnRJbkFycmF5KHBhcmFtcyk7XG4gICAgaWYgKGNvdW50ID09IDApXG4gICAgICAgIHJldHVybiAwO1xuICAgIHJldHVybiBzdW1JbkFycmF5KHBhcmFtcykgLyBjb3VudDtcbn1cbkZ1bmN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlcihcImF2Z0luQXJyYXlcIiwgYXZnSW5BcnJheSk7XG5mdW5jdGlvbiBpaWYocGFyYW1zKSB7XG4gICAgaWYgKCFwYXJhbXMgJiYgcGFyYW1zLmxlbmd0aCAhPT0gMylcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgcmV0dXJuIHBhcmFtc1swXSA/IHBhcmFtc1sxXSA6IHBhcmFtc1syXTtcbn1cbkZ1bmN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlcihcImlpZlwiLCBpaWYpO1xuZnVuY3Rpb24gZ2V0RGF0ZShwYXJhbXMpIHtcbiAgICBpZiAoIXBhcmFtcyAmJiBwYXJhbXMubGVuZ3RoIDwgMSlcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgaWYgKCFwYXJhbXNbMF0pXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIHJldHVybiBuZXcgRGF0ZShwYXJhbXNbMF0pO1xufVxuRnVuY3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyKFwiZ2V0RGF0ZVwiLCBnZXREYXRlKTtcbmZ1bmN0aW9uIGFnZShwYXJhbXMpIHtcbiAgICBpZiAoIXBhcmFtcyAmJiBwYXJhbXMubGVuZ3RoIDwgMSlcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgaWYgKCFwYXJhbXNbMF0pXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIHZhciBiaXJ0aERhdGUgPSBuZXcgRGF0ZShwYXJhbXNbMF0pO1xuICAgIHZhciB0b2RheSA9IG5ldyBEYXRlKCk7XG4gICAgdmFyIGFnZSA9IHRvZGF5LmdldEZ1bGxZZWFyKCkgLSBiaXJ0aERhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICB2YXIgbSA9IHRvZGF5LmdldE1vbnRoKCkgLSBiaXJ0aERhdGUuZ2V0TW9udGgoKTtcbiAgICBpZiAobSA8IDAgfHwgKG0gPT09IDAgJiYgdG9kYXkuZ2V0RGF0ZSgpIDwgYmlydGhEYXRlLmdldERhdGUoKSkpIHtcbiAgICAgICAgYWdlIC09IGFnZSA+IDAgPyAxIDogMDtcbiAgICB9XG4gICAgcmV0dXJuIGFnZTtcbn1cbkZ1bmN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlcihcImFnZVwiLCBhZ2UpO1xuZnVuY3Rpb24gaXNDb250YWluZXJSZWFkeUNvcmUoY29udGFpbmVyKSB7XG4gICAgaWYgKCFjb250YWluZXIpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB2YXIgcXVlc3Rpb25zID0gY29udGFpbmVyLnF1ZXN0aW9ucztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoIXF1ZXN0aW9uc1tpXS52YWxpZGF0ZShmYWxzZSkpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gaXNDb250YWluZXJSZWFkeShwYXJhbXMpIHtcbiAgICBpZiAoIXBhcmFtcyAmJiBwYXJhbXMubGVuZ3RoIDwgMSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGlmICghcGFyYW1zWzBdIHx8ICF0aGlzLnN1cnZleSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHZhciBuYW1lID0gcGFyYW1zWzBdO1xuICAgIHZhciBjb250YWluZXIgPSB0aGlzLnN1cnZleS5nZXRQYWdlQnlOYW1lKG5hbWUpO1xuICAgIGlmICghY29udGFpbmVyKVxuICAgICAgICBjb250YWluZXIgPSB0aGlzLnN1cnZleS5nZXRQYW5lbEJ5TmFtZShuYW1lKTtcbiAgICBpZiAoIWNvbnRhaW5lcikge1xuICAgICAgICB2YXIgcXVlc3Rpb24gPSB0aGlzLnN1cnZleS5nZXRRdWVzdGlvbkJ5TmFtZShuYW1lKTtcbiAgICAgICAgaWYgKCFxdWVzdGlvbiB8fCAhQXJyYXkuaXNBcnJheShxdWVzdGlvbi5wYW5lbHMpKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAocGFyYW1zLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIGlmIChwYXJhbXNbMV0gPCBxdWVzdGlvbi5wYW5lbHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY29udGFpbmVyID0gcXVlc3Rpb24ucGFuZWxzW3BhcmFtc1sxXV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9uLnBhbmVscy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmICghaXNDb250YWluZXJSZWFkeUNvcmUocXVlc3Rpb24ucGFuZWxzW2ldKSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGlzQ29udGFpbmVyUmVhZHlDb3JlKGNvbnRhaW5lcik7XG59XG5GdW5jdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXIoXCJpc0NvbnRhaW5lclJlYWR5XCIsIGlzQ29udGFpbmVyUmVhZHkpO1xuZnVuY3Rpb24gaXNEaXNwbGF5TW9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkgJiYgdGhpcy5zdXJ2ZXkuaXNEaXNwbGF5TW9kZTtcbn1cbkZ1bmN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlcihcImlzRGlzcGxheU1vZGVcIiwgaXNEaXNwbGF5TW9kZSk7XG5mdW5jdGlvbiBjdXJyZW50RGF0ZSgpIHtcbiAgICByZXR1cm4gbmV3IERhdGUoKTtcbn1cbkZ1bmN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlcihcImN1cnJlbnREYXRlXCIsIGN1cnJlbnREYXRlKTtcbmZ1bmN0aW9uIHRvZGF5KHBhcmFtcykge1xuICAgIHZhciByZXMgPSBuZXcgRGF0ZSgpO1xuICAgIGlmIChfc2V0dGluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcInNldHRpbmdzXCJdLmxvY2FsaXphdGlvbi51c2VMb2NhbFRpbWVab25lKSB7XG4gICAgICAgIHJlcy5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJlcy5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocGFyYW1zKSAmJiBwYXJhbXMubGVuZ3RoID09IDEpIHtcbiAgICAgICAgcmVzLnNldERhdGUocmVzLmdldERhdGUoKSArIHBhcmFtc1swXSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG5GdW5jdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXIoXCJ0b2RheVwiLCB0b2RheSk7XG5mdW5jdGlvbiBnZXRZZWFyKHBhcmFtcykge1xuICAgIGlmIChwYXJhbXMubGVuZ3RoICE9PSAxIHx8ICFwYXJhbXNbMF0pXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIG5ldyBEYXRlKHBhcmFtc1swXSkuZ2V0RnVsbFllYXIoKTtcbn1cbkZ1bmN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlcihcImdldFllYXJcIiwgZ2V0WWVhcik7XG5mdW5jdGlvbiBjdXJyZW50WWVhcigpIHtcbiAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpO1xufVxuRnVuY3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyKFwiY3VycmVudFllYXJcIiwgY3VycmVudFllYXIpO1xuZnVuY3Rpb24gZGlmZkRheXMocGFyYW1zKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHBhcmFtcykgfHwgcGFyYW1zLmxlbmd0aCAhPT0gMilcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgaWYgKCFwYXJhbXNbMF0gfHwgIXBhcmFtc1sxXSlcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgdmFyIGRhdGUxID0gbmV3IERhdGUocGFyYW1zWzBdKTtcbiAgICB2YXIgZGF0ZTIgPSBuZXcgRGF0ZShwYXJhbXNbMV0pO1xuICAgIHZhciBkaWZmVGltZSA9IE1hdGguYWJzKGRhdGUyIC0gZGF0ZTEpO1xuICAgIHJldHVybiBNYXRoLmNlaWwoZGlmZlRpbWUgLyAoMTAwMCAqIDYwICogNjAgKiAyNCkpO1xufVxuRnVuY3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyKFwiZGlmZkRheXNcIiwgZGlmZkRheXMpO1xuZnVuY3Rpb24gZGF0ZUZyb21GaXJzdFBhcmFtZXRlck9yVG9kYXkocGFyYW1zKSB7XG4gICAgdmFyIGRhdGUgPSB0b2RheSh1bmRlZmluZWQpO1xuICAgIGlmIChwYXJhbXMgJiYgcGFyYW1zWzBdKSB7XG4gICAgICAgIGRhdGUgPSBuZXcgRGF0ZShwYXJhbXNbMF0pO1xuICAgIH1cbiAgICByZXR1cm4gZGF0ZTtcbn1cbmZ1bmN0aW9uIHllYXIocGFyYW1zKSB7XG4gICAgdmFyIGRhdGUgPSBkYXRlRnJvbUZpcnN0UGFyYW1ldGVyT3JUb2RheShwYXJhbXMpO1xuICAgIHJldHVybiBkYXRlLmdldEZ1bGxZZWFyKCk7XG59XG5GdW5jdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXIoXCJ5ZWFyXCIsIHllYXIpO1xuZnVuY3Rpb24gbW9udGgocGFyYW1zKSB7XG4gICAgdmFyIGRhdGUgPSBkYXRlRnJvbUZpcnN0UGFyYW1ldGVyT3JUb2RheShwYXJhbXMpO1xuICAgIHJldHVybiBkYXRlLmdldE1vbnRoKCkgKyAxO1xufVxuRnVuY3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyKFwibW9udGhcIiwgbW9udGgpO1xuZnVuY3Rpb24gZGF5KHBhcmFtcykge1xuICAgIHZhciBkYXRlID0gZGF0ZUZyb21GaXJzdFBhcmFtZXRlck9yVG9kYXkocGFyYW1zKTtcbiAgICByZXR1cm4gZGF0ZS5nZXREYXRlKCk7XG59XG5GdW5jdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXIoXCJkYXlcIiwgZGF5KTtcbmZ1bmN0aW9uIHdlZWtkYXkocGFyYW1zKSB7XG4gICAgdmFyIGRhdGUgPSBkYXRlRnJvbUZpcnN0UGFyYW1ldGVyT3JUb2RheShwYXJhbXMpO1xuICAgIHJldHVybiBkYXRlLmdldERheSgpO1xufVxuRnVuY3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyKFwid2Vla2RheVwiLCB3ZWVrZGF5KTtcbmZ1bmN0aW9uIGdldFF1ZXN0aW9uVmFsdWVCeUNvbnRleHQoY29udGV4dCwgbmFtZSkge1xuICAgIGlmICghY29udGV4dCB8fCAhbmFtZSlcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB2YXIga2V5cyA9IFtcInJvd1wiLCBcInBhbmVsXCIsIFwic3VydmV5XCJdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgY3R4ID0gY29udGV4dFtrZXlzW2ldXTtcbiAgICAgICAgaWYgKGN0eCAmJiBjdHguZ2V0UXVlc3Rpb25CeU5hbWUpIHtcbiAgICAgICAgICAgIHZhciByZXMgPSBjdHguZ2V0UXVlc3Rpb25CeU5hbWUobmFtZSk7XG4gICAgICAgICAgICBpZiAocmVzKVxuICAgICAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBkaXNwbGF5VmFsdWUocGFyYW1zKSB7XG4gICAgdmFyIHEgPSBnZXRRdWVzdGlvblZhbHVlQnlDb250ZXh0KHRoaXMsIHBhcmFtc1swXSk7XG4gICAgcmV0dXJuIHEgPyBxLmRpc3BsYXlWYWx1ZSA6IFwiXCI7XG59XG5GdW5jdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXIoXCJkaXNwbGF5VmFsdWVcIiwgZGlzcGxheVZhbHVlKTtcbmZ1bmN0aW9uIHByb3BlcnR5VmFsdWUocGFyYW1zKSB7XG4gICAgaWYgKHBhcmFtcy5sZW5ndGggIT09IDIgfHwgIXBhcmFtc1swXSB8fCAhcGFyYW1zWzFdKVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHZhciBxID0gZ2V0UXVlc3Rpb25WYWx1ZUJ5Q29udGV4dCh0aGlzLCBwYXJhbXNbMF0pO1xuICAgIHJldHVybiBxID8gcVtwYXJhbXNbMV1dIDogdW5kZWZpbmVkO1xufVxuRnVuY3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyKFwicHJvcGVydHlWYWx1ZVwiLCBwcm9wZXJ0eVZhbHVlKTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9oZWxwZXJzLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvaGVscGVycy50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEhlbHBlcnMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiSGVscGVyc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEhlbHBlcnM7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9zZXR0aW5ncyAqLyBcIi4vc3JjL3NldHRpbmdzLnRzXCIpO1xuXG52YXIgSGVscGVycyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBIZWxwZXJzKCkge1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBIHN0YXRpYyBtZXRob2RzIHRoYXQgcmV0dXJucyB0cnVlIGlmIGEgdmFsdWUgdW5kZWZpbmVkLCBudWxsLCBlbXB0eSBzdHJpbmcgb3IgZW1wdHkgYXJyYXkuXG4gICAgICogQHBhcmFtIHZhbHVlXG4gICAgICovXG4gICAgSGVscGVycy5pc1ZhbHVlRW1wdHkgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAoISF2YWx1ZSAmJiBIZWxwZXJzLmlzVmFsdWVPYmplY3QodmFsdWUpICYmIHZhbHVlLmNvbnN0cnVjdG9yID09PSBPYmplY3QpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGlmICghSGVscGVycy5pc1ZhbHVlRW1wdHkodmFsdWVba2V5XSkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAhdmFsdWUgJiYgdmFsdWUgIT09IDAgJiYgdmFsdWUgIT09IGZhbHNlO1xuICAgIH07XG4gICAgSGVscGVycy5pc0FycmF5Q29udGFpbnNFcXVhbCA9IGZ1bmN0aW9uICh4LCB5KSB7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh4KSB8fCAhQXJyYXkuaXNBcnJheSh5KSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKHgubGVuZ3RoICE9PSB5Lmxlbmd0aClcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB4Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgaiA9IDA7XG4gICAgICAgICAgICBmb3IgKDsgaiA8IHkubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoSGVscGVycy5pc1R3b1ZhbHVlRXF1YWxzKHhbaV0sIHlbal0pKVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChqID09PSB5Lmxlbmd0aClcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgICBIZWxwZXJzLmlzQXJyYXlzRXF1YWwgPSBmdW5jdGlvbiAoeCwgeSwgaWdub3JlT3JkZXIsIGNhc2VTZW5zaXRpdmUsIHRyaW1TdHJpbmdzKSB7XG4gICAgICAgIGlmIChpZ25vcmVPcmRlciA9PT0gdm9pZCAwKSB7IGlnbm9yZU9yZGVyID0gZmFsc2U7IH1cbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHgpIHx8ICFBcnJheS5pc0FycmF5KHkpKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoeC5sZW5ndGggIT09IHkubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoaWdub3JlT3JkZXIpIHtcbiAgICAgICAgICAgIHZhciB4U29ydGVkID0gW107XG4gICAgICAgICAgICB2YXIgeVNvcnRlZCA9IFtdO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB4Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgeFNvcnRlZC5wdXNoKHhbaV0pO1xuICAgICAgICAgICAgICAgIHlTb3J0ZWQucHVzaCh5W2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHhTb3J0ZWQuc29ydCgpO1xuICAgICAgICAgICAgeVNvcnRlZC5zb3J0KCk7XG4gICAgICAgICAgICB4ID0geFNvcnRlZDtcbiAgICAgICAgICAgIHkgPSB5U29ydGVkO1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKCFIZWxwZXJzLmlzVHdvVmFsdWVFcXVhbHMoeFtpXSwgeVtpXSwgaWdub3JlT3JkZXIsIGNhc2VTZW5zaXRpdmUsIHRyaW1TdHJpbmdzKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgICBIZWxwZXJzLmNvbXBhcmVTdHJpbmdzID0gZnVuY3Rpb24gKHgsIHkpIHtcbiAgICAgICAgdmFyIG5vcm1hbGl6ZSA9IF9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic2V0dGluZ3NcIl0uY29tcGFyYXRvci5ub3JtYWxpemVUZXh0Q2FsbGJhY2s7XG4gICAgICAgIGlmICghIXgpXG4gICAgICAgICAgICB4ID0gbm9ybWFsaXplKHgsIFwiY29tcGFyZVwiKS50cmltKCk7XG4gICAgICAgIGlmICghIXkpXG4gICAgICAgICAgICB5ID0gbm9ybWFsaXplKHksIFwiY29tcGFyZVwiKS50cmltKCk7XG4gICAgICAgIGlmICgheCAmJiAheSlcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICBpZiAoIXgpXG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIGlmICgheSlcbiAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICBpZiAoeCA9PT0geSlcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB2YXIgZGlnaXRJbmRleCA9IC0xO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHgubGVuZ3RoICYmIGkgPCB5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0NoYXJEaWdpdCh4W2ldKSAmJiB0aGlzLmlzQ2hhckRpZ2l0KHlbaV0pKSB7XG4gICAgICAgICAgICAgICAgZGlnaXRJbmRleCA9IGk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoeFtpXSAhPT0geVtpXSlcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGlnaXRJbmRleCA+IC0xKSB7XG4gICAgICAgICAgICB2YXIgblggPSB0aGlzLmdldE51bWJlckZyb21TdHIoeCwgZGlnaXRJbmRleCk7XG4gICAgICAgICAgICB2YXIgblkgPSB0aGlzLmdldE51bWJlckZyb21TdHIoeSwgZGlnaXRJbmRleCk7XG4gICAgICAgICAgICBpZiAoIU51bWJlci5pc05hTihuWCkgJiYgIU51bWJlci5pc05hTihuWSkgJiYgblggIT09IG5ZKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5YID4gblkgPyAxIDogLTE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggPiB5ID8gMSA6IC0xO1xuICAgIH07XG4gICAgSGVscGVycy5pc1R3b1ZhbHVlRXF1YWxzID0gZnVuY3Rpb24gKHgsIHksIGlnbm9yZU9yZGVyLCBjYXNlU2Vuc2l0aXZlLCB0cmltU3RyaW5ncykge1xuICAgICAgICBpZiAoaWdub3JlT3JkZXIgPT09IHZvaWQgMCkgeyBpZ25vcmVPcmRlciA9IGZhbHNlOyB9XG4gICAgICAgIGlmICh4ID09PSB5KVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHgpICYmIHgubGVuZ3RoID09PSAwICYmIHR5cGVvZiB5ID09PSBcInVuZGVmaW5lZFwiKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHkpICYmIHkubGVuZ3RoID09PSAwICYmIHR5cGVvZiB4ID09PSBcInVuZGVmaW5lZFwiKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmICgoeCA9PT0gdW5kZWZpbmVkIHx8IHggPT09IG51bGwpICYmIHkgPT09IFwiXCIpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKCh5ID09PSB1bmRlZmluZWQgfHwgeSA9PT0gbnVsbCkgJiYgeCA9PT0gXCJcIilcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAodHJpbVN0cmluZ3MgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHRyaW1TdHJpbmdzID0gX3NldHRpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzZXR0aW5nc1wiXS5jb21wYXJhdG9yLnRyaW1TdHJpbmdzO1xuICAgICAgICBpZiAoY2FzZVNlbnNpdGl2ZSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgY2FzZVNlbnNpdGl2ZSA9IF9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic2V0dGluZ3NcIl0uY29tcGFyYXRvci5jYXNlU2Vuc2l0aXZlO1xuICAgICAgICBpZiAodHlwZW9mIHggPT09IFwic3RyaW5nXCIgJiYgdHlwZW9mIHkgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHZhciBub3JtYWxpemUgPSBfc2V0dGluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInNldHRpbmdzXCJdLmNvbXBhcmF0b3Iubm9ybWFsaXplVGV4dENhbGxiYWNrO1xuICAgICAgICAgICAgeCA9IG5vcm1hbGl6ZSh4LCBcImNvbXBhcmVcIik7XG4gICAgICAgICAgICB5ID0gbm9ybWFsaXplKHksIFwiY29tcGFyZVwiKTtcbiAgICAgICAgICAgIGlmICh0cmltU3RyaW5ncykge1xuICAgICAgICAgICAgICAgIHggPSB4LnRyaW0oKTtcbiAgICAgICAgICAgICAgICB5ID0geS50cmltKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWNhc2VTZW5zaXRpdmUpIHtcbiAgICAgICAgICAgICAgICB4ID0geC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIHkgPSB5LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geCA9PT0geTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoeCBpbnN0YW5jZW9mIERhdGUgJiYgeSBpbnN0YW5jZW9mIERhdGUpXG4gICAgICAgICAgICByZXR1cm4geC5nZXRUaW1lKCkgPT0geS5nZXRUaW1lKCk7XG4gICAgICAgIGlmIChIZWxwZXJzLmlzQ29udmVydGlibGVUb051bWJlcih4KSAmJiBIZWxwZXJzLmlzQ29udmVydGlibGVUb051bWJlcih5KSkge1xuICAgICAgICAgICAgaWYgKHBhcnNlSW50KHgpID09PSBwYXJzZUludCh5KSAmJiBwYXJzZUZsb2F0KHgpID09PSBwYXJzZUZsb2F0KHkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCghSGVscGVycy5pc1ZhbHVlRW1wdHkoeCkgJiYgSGVscGVycy5pc1ZhbHVlRW1wdHkoeSkpIHx8XG4gICAgICAgICAgICAoSGVscGVycy5pc1ZhbHVlRW1wdHkoeCkgJiYgIUhlbHBlcnMuaXNWYWx1ZUVtcHR5KHkpKSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKCh4ID09PSB0cnVlIHx8IHggPT09IGZhbHNlKSAmJiB0eXBlb2YgeSA9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4geC50b1N0cmluZygpID09PSB5LnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCh5ID09PSB0cnVlIHx8IHkgPT09IGZhbHNlKSAmJiB0eXBlb2YgeCA9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4geS50b1N0cmluZygpID09PSB4LnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFIZWxwZXJzLmlzVmFsdWVPYmplY3QoeCkgJiYgIUhlbHBlcnMuaXNWYWx1ZU9iamVjdCh5KSlcbiAgICAgICAgICAgIHJldHVybiB4ID09IHk7XG4gICAgICAgIGlmICghSGVscGVycy5pc1ZhbHVlT2JqZWN0KHgpIHx8ICFIZWxwZXJzLmlzVmFsdWVPYmplY3QoeSkpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmICh4W1wiZXF1YWxzXCJdKVxuICAgICAgICAgICAgcmV0dXJuIHguZXF1YWxzKHkpO1xuICAgICAgICBpZiAoISF4LnRvSlNPTiAmJiAhIXkudG9KU09OICYmICEheC5nZXRUeXBlICYmICEheS5nZXRUeXBlKSB7XG4gICAgICAgICAgICBpZiAoeC5pc0RpcG9zZWQgfHwgeS5pc0RpcG9zZWQpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgaWYgKHguZ2V0VHlwZSgpICE9PSB5LmdldFR5cGUoKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBpZiAoISF4Lm5hbWUgJiYgeC5uYW1lICE9PSB5Lm5hbWUpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNUd29WYWx1ZUVxdWFscyh4LnRvSlNPTigpLCB5LnRvSlNPTigpLCBpZ25vcmVPcmRlciwgY2FzZVNlbnNpdGl2ZSwgdHJpbVN0cmluZ3MpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHgpICYmIEFycmF5LmlzQXJyYXkoeSkpXG4gICAgICAgICAgICByZXR1cm4gSGVscGVycy5pc0FycmF5c0VxdWFsKHgsIHksIGlnbm9yZU9yZGVyLCBjYXNlU2Vuc2l0aXZlLCB0cmltU3RyaW5ncyk7XG4gICAgICAgIGlmICghIXguZXF1YWxzVG8gJiYgeS5lcXVhbHNUbylcbiAgICAgICAgICAgIHJldHVybiB4LmVxdWFsc1RvKHkpO1xuICAgICAgICBmb3IgKHZhciBwIGluIHgpIHtcbiAgICAgICAgICAgIGlmICgheC5oYXNPd25Qcm9wZXJ0eShwKSlcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIGlmICgheS5oYXNPd25Qcm9wZXJ0eShwKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNUd29WYWx1ZUVxdWFscyh4W3BdLCB5W3BdLCBpZ25vcmVPcmRlciwgY2FzZVNlbnNpdGl2ZSwgdHJpbVN0cmluZ3MpKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKHAgaW4geSkge1xuICAgICAgICAgICAgaWYgKHkuaGFzT3duUHJvcGVydHkocCkgJiYgIXguaGFzT3duUHJvcGVydHkocCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG4gICAgSGVscGVycy5yYW5kb21pemVBcnJheSA9IGZ1bmN0aW9uIChhcnJheSkge1xuICAgICAgICBmb3IgKHZhciBpID0gYXJyYXkubGVuZ3RoIC0gMTsgaSA+IDA7IGktLSkge1xuICAgICAgICAgICAgdmFyIGogPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAoaSArIDEpKTtcbiAgICAgICAgICAgIHZhciB0ZW1wID0gYXJyYXlbaV07XG4gICAgICAgICAgICBhcnJheVtpXSA9IGFycmF5W2pdO1xuICAgICAgICAgICAgYXJyYXlbal0gPSB0ZW1wO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcnJheTtcbiAgICB9O1xuICAgIEhlbHBlcnMuZ2V0VW5iaW5kVmFsdWUgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICB2YXIgcmVzID0gW107XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgcmVzLnB1c2goSGVscGVycy5nZXRVbmJpbmRWYWx1ZSh2YWx1ZVtpXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfVxuICAgICAgICBpZiAoISF2YWx1ZSAmJiBIZWxwZXJzLmlzVmFsdWVPYmplY3QodmFsdWUpICYmICEodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSkge1xuICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodmFsdWUpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfTtcbiAgICBIZWxwZXJzLmNyZWF0ZUNvcHkgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIHZhciByZXMgPSB7fTtcbiAgICAgICAgaWYgKCFvYmopXG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgICAgICAgICByZXNba2V5XSA9IG9ialtrZXldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfTtcbiAgICBIZWxwZXJzLmlzQ29udmVydGlibGVUb051bWJlciA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gKHZhbHVlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIHZhbHVlICE9PSBudWxsICYmXG4gICAgICAgICAgICAhQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiZcbiAgICAgICAgICAgICFpc05hTih2YWx1ZSkpO1xuICAgIH07XG4gICAgSGVscGVycy5pc1ZhbHVlT2JqZWN0ID0gZnVuY3Rpb24gKHZhbCwgZXhjbHVkZUFycmF5KSB7XG4gICAgICAgIHJldHVybiB2YWwgaW5zdGFuY2VvZiBPYmplY3QgJiYgKCFleGNsdWRlQXJyYXkgfHwgIUFycmF5LmlzQXJyYXkodmFsKSk7XG4gICAgfTtcbiAgICBIZWxwZXJzLmlzTnVtYmVyID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiAhaXNOYU4odGhpcy5nZXROdW1iZXIodmFsdWUpKTtcbiAgICB9O1xuICAgIEhlbHBlcnMuZ2V0TnVtYmVyID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICAgICAgISF2YWx1ZSAmJlxuICAgICAgICAgICAgdmFsdWUuaW5kZXhPZihcIjB4XCIpID09IDAgJiZcbiAgICAgICAgICAgIHZhbHVlLmxlbmd0aCA+IDMyKVxuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgdmFsdWUgPSB0aGlzLnByZXBhcmVTdHJpbmdUb051bWJlcih2YWx1ZSk7XG4gICAgICAgIHZhciByZXMgPSBwYXJzZUZsb2F0KHZhbHVlKTtcbiAgICAgICAgaWYgKGlzTmFOKHJlcykgfHwgIWlzRmluaXRlKHZhbHVlKSlcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfTtcbiAgICBIZWxwZXJzLnByZXBhcmVTdHJpbmdUb051bWJlciA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWwgIT09IFwic3RyaW5nXCIgfHwgIXZhbClcbiAgICAgICAgICAgIHJldHVybiB2YWw7XG4gICAgICAgIHZhciBpID0gdmFsLmluZGV4T2YoXCIsXCIpO1xuICAgICAgICBpZiAoaSA+IC0xICYmIHZhbC5pbmRleE9mKFwiLFwiLCBpICsgMSkgPCAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsLnJlcGxhY2UoXCIsXCIsIFwiLlwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH07XG4gICAgSGVscGVycy5nZXRNYXhMZW5ndGggPSBmdW5jdGlvbiAobWF4TGVuZ3RoLCBzdXJ2ZXlMZW5ndGgpIHtcbiAgICAgICAgaWYgKG1heExlbmd0aCA8IDApIHtcbiAgICAgICAgICAgIG1heExlbmd0aCA9IHN1cnZleUxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWF4TGVuZ3RoID4gMCA/IG1heExlbmd0aCA6IG51bGw7XG4gICAgfTtcbiAgICBIZWxwZXJzLmdldFJlbWFpbmluZ0NoYXJhY3RlckNvdW50ZXJUZXh0ID0gZnVuY3Rpb24gKG5ld1ZhbHVlLCBtYXhMZW5ndGgpIHtcbiAgICAgICAgaWYgKCFtYXhMZW5ndGggfHwgbWF4TGVuZ3RoIDw9IDAgfHwgIV9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic2V0dGluZ3NcIl0uc2hvd01heExlbmd0aEluZGljYXRvcikge1xuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHZhbHVlID0gbmV3VmFsdWUgPyBuZXdWYWx1ZS5sZW5ndGggOiBcIjBcIjtcbiAgICAgICAgcmV0dXJuIFt2YWx1ZSwgbWF4TGVuZ3RoXS5qb2luKFwiL1wiKTtcbiAgICB9O1xuICAgIEhlbHBlcnMuZ2V0TnVtYmVyQnlJbmRleCA9IGZ1bmN0aW9uIChpbmRleCwgc3RhcnRJbmRleFN0cikge1xuICAgICAgICBpZiAoaW5kZXggPCAwKVxuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIHZhciBzdGFydEluZGV4ID0gMTtcbiAgICAgICAgdmFyIHByZWZpeCA9IFwiXCI7XG4gICAgICAgIHZhciBwb3N0Zml4ID0gXCIuXCI7XG4gICAgICAgIHZhciBpc051bWVyaWMgPSB0cnVlO1xuICAgICAgICB2YXIgc3RySW5kZXggPSBcIkFcIjtcbiAgICAgICAgdmFyIHN0ciA9IFwiXCI7XG4gICAgICAgIGlmICghIXN0YXJ0SW5kZXhTdHIpIHtcbiAgICAgICAgICAgIHN0ciA9IHN0YXJ0SW5kZXhTdHI7XG4gICAgICAgICAgICB2YXIgaW5kID0gc3RyLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICB2YXIgaGFzRGlnaXQgPSBmYWxzZTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKEhlbHBlcnMuaXNDaGFyRGlnaXQoc3RyW2ldKSkge1xuICAgICAgICAgICAgICAgICAgICBoYXNEaWdpdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBjaGVja0xldHRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKChoYXNEaWdpdCAmJiAhSGVscGVycy5pc0NoYXJEaWdpdChzdHJbaW5kXSkpIHx8XG4gICAgICAgICAgICAgICAgICAgIEhlbHBlcnMuaXNDaGFyTm90TGV0dGVyQW5kRGlnaXQoc3RyW2luZF0pKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB3aGlsZSAoaW5kID49IDAgJiYgY2hlY2tMZXR0ZXIoKSlcbiAgICAgICAgICAgICAgICBpbmQtLTtcbiAgICAgICAgICAgIHZhciBuZXdQb3N0Zml4ID0gXCJcIjtcbiAgICAgICAgICAgIGlmIChpbmQgPCBzdHIubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgIG5ld1Bvc3RmaXggPSBzdHIuc3Vic3RyaW5nKGluZCArIDEpO1xuICAgICAgICAgICAgICAgIHN0ciA9IHN0ci5zdWJzdHJpbmcoMCwgaW5kICsgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpbmQgPSBzdHIubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIHdoaWxlIChpbmQgPj0gMCkge1xuICAgICAgICAgICAgICAgIGlmIChjaGVja0xldHRlcigpKVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBpbmQtLTtcbiAgICAgICAgICAgICAgICBpZiAoIWhhc0RpZ2l0KVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0ckluZGV4ID0gc3RyLnN1YnN0cmluZyhpbmQgKyAxKTtcbiAgICAgICAgICAgIHByZWZpeCA9IHN0ci5zdWJzdHJpbmcoMCwgaW5kICsgMSk7XG4gICAgICAgICAgICBpZiAocGFyc2VJbnQoc3RySW5kZXgpKVxuICAgICAgICAgICAgICAgIHN0YXJ0SW5kZXggPSBwYXJzZUludChzdHJJbmRleCk7XG4gICAgICAgICAgICBlbHNlIGlmIChzdHJJbmRleC5sZW5ndGggPT0gMSlcbiAgICAgICAgICAgICAgICBpc051bWVyaWMgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmICghIW5ld1Bvc3RmaXggfHwgISFwcmVmaXgpIHtcbiAgICAgICAgICAgICAgICBwb3N0Zml4ID0gbmV3UG9zdGZpeDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNOdW1lcmljKSB7XG4gICAgICAgICAgICB2YXIgdmFsID0gKGluZGV4ICsgc3RhcnRJbmRleCkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIHdoaWxlICh2YWwubGVuZ3RoIDwgc3RySW5kZXgubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHZhbCA9IFwiMFwiICsgdmFsO1xuICAgICAgICAgICAgcmV0dXJuIHByZWZpeCArIHZhbCArIHBvc3RmaXg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChwcmVmaXggKyBTdHJpbmcuZnJvbUNoYXJDb2RlKHN0ckluZGV4LmNoYXJDb2RlQXQoMCkgKyBpbmRleCkgKyBwb3N0Zml4KTtcbiAgICB9O1xuICAgIEhlbHBlcnMuaXNDaGFyTm90TGV0dGVyQW5kRGlnaXQgPSBmdW5jdGlvbiAoY2gpIHtcbiAgICAgICAgcmV0dXJuIGNoLnRvVXBwZXJDYXNlKCkgPT0gY2gudG9Mb3dlckNhc2UoKSAmJiAhSGVscGVycy5pc0NoYXJEaWdpdChjaCk7XG4gICAgfTtcbiAgICBIZWxwZXJzLmlzQ2hhckRpZ2l0ID0gZnVuY3Rpb24gKGNoKSB7XG4gICAgICAgIHJldHVybiBjaCA+PSBcIjBcIiAmJiBjaCA8PSBcIjlcIjtcbiAgICB9O1xuICAgIEhlbHBlcnMuZ2V0TnVtYmVyRnJvbVN0ciA9IGZ1bmN0aW9uIChzdHIsIGluZGV4KSB7XG4gICAgICAgIGlmICghdGhpcy5pc0NoYXJEaWdpdChzdHJbaW5kZXhdKSlcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIHZhciBuU3RyID0gXCJcIjtcbiAgICAgICAgd2hpbGUgKGluZGV4IDwgc3RyLmxlbmd0aCAmJiB0aGlzLmlzQ2hhckRpZ2l0KHN0cltpbmRleF0pKSB7XG4gICAgICAgICAgICBuU3RyICs9IHN0cltpbmRleF07XG4gICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICB9XG4gICAgICAgIGlmICghblN0cilcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIHJldHVybiB0aGlzLmdldE51bWJlcihuU3RyKTtcbiAgICB9O1xuICAgIEhlbHBlcnMuY291bnREZWNpbWFscyA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBpZiAoSGVscGVycy5pc051bWJlcih2YWx1ZSkgJiYgTWF0aC5mbG9vcih2YWx1ZSkgIT09IHZhbHVlKSB7XG4gICAgICAgICAgICB2YXIgc3RycyA9IHZhbHVlLnRvU3RyaW5nKCkuc3BsaXQoXCIuXCIpO1xuICAgICAgICAgICAgcmV0dXJuIHN0cnMubGVuZ3RoID4gMSAmJiBzdHJzWzFdLmxlbmd0aCB8fCAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAwO1xuICAgIH07XG4gICAgSGVscGVycy5jb3JyZWN0QWZ0ZXJQbHVzTWluaXMgPSBmdW5jdGlvbiAoYSwgYiwgcmVzKSB7XG4gICAgICAgIHZhciBkaWdpdHNBID0gSGVscGVycy5jb3VudERlY2ltYWxzKGEpO1xuICAgICAgICB2YXIgZGlnaXRzQiA9IEhlbHBlcnMuY291bnREZWNpbWFscyhiKTtcbiAgICAgICAgaWYgKGRpZ2l0c0EgPiAwIHx8IGRpZ2l0c0IgPiAwKSB7XG4gICAgICAgICAgICB2YXIgZGlnaXRzID0gTWF0aC5tYXgoZGlnaXRzQSwgZGlnaXRzQik7XG4gICAgICAgICAgICByZXMgPSBwYXJzZUZsb2F0KHJlcy50b0ZpeGVkKGRpZ2l0cykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfTtcbiAgICBIZWxwZXJzLnN1bUFueVZhbHVlcyA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgIGlmICghSGVscGVycy5pc051bWJlcihhKSB8fCAhSGVscGVycy5pc051bWJlcihiKSkge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYSkgJiYgQXJyYXkuaXNBcnJheShiKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gW10uY29uY2F0KGEpLmNvbmNhdChiKTtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGEpIHx8IEFycmF5LmlzQXJyYXkoYikpIHtcbiAgICAgICAgICAgICAgICB2YXIgYXJyID0gQXJyYXkuaXNBcnJheShhKSA/IGEgOiBiO1xuICAgICAgICAgICAgICAgIHZhciB2YWwgPSBhcnIgPT09IGEgPyBiIDogYTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc3RyID0gYXJyLmpvaW4oXCIsIFwiKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFyciA9PT0gYSA/IHN0ciArIHZhbCA6IHZhbCArIHN0cjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlcyA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFycltpXSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcyA9IEhlbHBlcnMuY29ycmVjdEFmdGVyUGx1c01pbmlzKHJlcywgYXJyW2ldLCByZXMgKyBhcnJbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBIZWxwZXJzLmNvcnJlY3RBZnRlclBsdXNNaW5pcyhyZXMsIHZhbCwgcmVzICsgdmFsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYSArIGI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBhID09PSBcInN0cmluZ1wiIHx8IHR5cGVvZiBiID09PSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgcmV0dXJuIGEgKyBiO1xuICAgICAgICByZXR1cm4gSGVscGVycy5jb3JyZWN0QWZ0ZXJQbHVzTWluaXMoYSwgYiwgYSArIGIpO1xuICAgIH07XG4gICAgSGVscGVycy5jb3JyZWN0QWZ0ZXJNdWx0aXBsZSA9IGZ1bmN0aW9uIChhLCBiLCByZXMpIHtcbiAgICAgICAgdmFyIGRpZ2l0cyA9IEhlbHBlcnMuY291bnREZWNpbWFscyhhKSArIEhlbHBlcnMuY291bnREZWNpbWFscyhiKTtcbiAgICAgICAgaWYgKGRpZ2l0cyA+IDApIHtcbiAgICAgICAgICAgIHJlcyA9IHBhcnNlRmxvYXQocmVzLnRvRml4ZWQoZGlnaXRzKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9O1xuICAgIEhlbHBlcnMuY29udmVydEFycmF5VmFsdWVUb09iamVjdCA9IGZ1bmN0aW9uIChzcmMsIHByb3BOYW1lLCBkZXN0KSB7XG4gICAgICAgIGlmIChkZXN0ID09PSB2b2lkIDApIHsgZGVzdCA9IHVuZGVmaW5lZDsgfVxuICAgICAgICB2YXIgcmVzID0gbmV3IEFycmF5KCk7XG4gICAgICAgIGlmICghc3JjIHx8ICFBcnJheS5pc0FycmF5KHNyYykpXG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNyYy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGl0ZW0gPSB2b2lkIDA7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkZXN0KSkge1xuICAgICAgICAgICAgICAgIGl0ZW0gPSBIZWxwZXJzLmZpbmRPYmpCeVByb3BWYWx1ZShkZXN0LCBwcm9wTmFtZSwgc3JjW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghaXRlbSkge1xuICAgICAgICAgICAgICAgIGl0ZW0gPSB7fTtcbiAgICAgICAgICAgICAgICBpdGVtW3Byb3BOYW1lXSA9IHNyY1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlcy5wdXNoKGl0ZW0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfTtcbiAgICBIZWxwZXJzLmZpbmRPYmpCeVByb3BWYWx1ZSA9IGZ1bmN0aW9uIChhcnIsIHByb3BOYW1lLCB2YWwpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChIZWxwZXJzLmlzVHdvVmFsdWVFcXVhbHMoYXJyW2ldW3Byb3BOYW1lXSwgdmFsKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gYXJyW2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfTtcbiAgICBIZWxwZXJzLmNvbnZlcnRBcnJheU9iamVjdFRvVmFsdWUgPSBmdW5jdGlvbiAoc3JjLCBwcm9wTmFtZSkge1xuICAgICAgICB2YXIgcmVzID0gbmV3IEFycmF5KCk7XG4gICAgICAgIGlmICghc3JjIHx8ICFBcnJheS5pc0FycmF5KHNyYykpXG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNyYy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGl0ZW1WYWwgPSAhIXNyY1tpXSA/IHNyY1tpXVtwcm9wTmFtZV0gOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAoIUhlbHBlcnMuaXNWYWx1ZUVtcHR5KGl0ZW1WYWwpKVxuICAgICAgICAgICAgICAgIHJlcy5wdXNoKGl0ZW1WYWwpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfTtcbiAgICBIZWxwZXJzLmNvbnZlcnREYXRlVG9TdHJpbmcgPSBmdW5jdGlvbiAoZGF0ZSkge1xuICAgICAgICB2YXIgdG9TdHIgPSBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICBpZiAodmFsIDwgMTApXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiMFwiICsgdmFsLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICByZXR1cm4gdmFsLnRvU3RyaW5nKCk7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBkYXRlLmdldEZ1bGxZZWFyKCkgKyBcIi1cIiArIHRvU3RyKGRhdGUuZ2V0TW9udGgoKSArIDEpICsgXCItXCIgKyB0b1N0cihkYXRlLmdldERhdGUoKSk7XG4gICAgfTtcbiAgICBIZWxwZXJzLmNvbnZlcnREYXRlVGltZVRvU3RyaW5nID0gZnVuY3Rpb24gKGRhdGUpIHtcbiAgICAgICAgdmFyIHRvU3RyID0gZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgaWYgKHZhbCA8IDEwKVxuICAgICAgICAgICAgICAgIHJldHVybiBcIjBcIiArIHZhbC50b1N0cmluZygpO1xuICAgICAgICAgICAgcmV0dXJuIHZhbC50b1N0cmluZygpO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdGhpcy5jb252ZXJ0RGF0ZVRvU3RyaW5nKGRhdGUpICsgXCIgXCIgKyB0b1N0cihkYXRlLmdldEhvdXJzKCkpICsgXCI6XCIgKyB0b1N0cihkYXRlLmdldE1pbnV0ZXMoKSk7XG4gICAgfTtcbiAgICBIZWxwZXJzLmNvbnZlcnRWYWxUb1F1ZXN0aW9uVmFsID0gZnVuY3Rpb24gKHZhbCwgaW5wdXRUeXBlKSB7XG4gICAgICAgIGlmICh2YWwgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgICAgICBpZiAoaW5wdXRUeXBlID09PSBcImRhdGV0aW1lLWxvY2FsXCIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIEhlbHBlcnMuY29udmVydERhdGVUaW1lVG9TdHJpbmcodmFsKTtcbiAgICAgICAgICAgIHJldHVybiBIZWxwZXJzLmNvbnZlcnREYXRlVG9TdHJpbmcodmFsKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH07XG4gICAgcmV0dXJuIEhlbHBlcnM7XG59KCkpO1xuXG5pZiAoIVN0cmluZy5wcm90b3R5cGVbXCJmb3JtYXRcIl0pIHtcbiAgICBTdHJpbmcucHJvdG90eXBlW1wiZm9ybWF0XCJdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgcmV0dXJuIHRoaXMucmVwbGFjZSgveyhcXGQrKX0vZywgZnVuY3Rpb24gKG1hdGNoLCBudW1iZXIpIHtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgYXJnc1tudW1iZXJdICE9IFwidW5kZWZpbmVkXCIgPyBhcmdzW251bWJlcl0gOiBtYXRjaDtcbiAgICAgICAgfSk7XG4gICAgfTtcbn1cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9pbWFnZXMgc3luYyBcXFxcLnN2ZyRcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9pbWFnZXMgc3luYyBub25yZWN1cnNpdmUgXFwuc3ZnJCAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBtYXAgPSB7XG5cdFwiLi9BcnJvd0Rvd25fMzR4MzQuc3ZnXCI6IFwiLi9zcmMvaW1hZ2VzL0Fycm93RG93bl8zNHgzNC5zdmdcIixcblx0XCIuL0Fycm93TGVmdC5zdmdcIjogXCIuL3NyYy9pbWFnZXMvQXJyb3dMZWZ0LnN2Z1wiLFxuXHRcIi4vQXJyb3dSaWdodC5zdmdcIjogXCIuL3NyYy9pbWFnZXMvQXJyb3dSaWdodC5zdmdcIixcblx0XCIuL0Fycm93X2Rvd25HUkVZXzEweDEwLnN2Z1wiOiBcIi4vc3JjL2ltYWdlcy9BcnJvd19kb3duR1JFWV8xMHgxMC5zdmdcIixcblx0XCIuL0NoYW5nZUNhbWVyYS5zdmdcIjogXCIuL3NyYy9pbWFnZXMvQ2hhbmdlQ2FtZXJhLnN2Z1wiLFxuXHRcIi4vQ2hvb3NlRmlsZS5zdmdcIjogXCIuL3NyYy9pbWFnZXMvQ2hvb3NlRmlsZS5zdmdcIixcblx0XCIuL0NsZWFyLnN2Z1wiOiBcIi4vc3JjL2ltYWdlcy9DbGVhci5zdmdcIixcblx0XCIuL0Nsb3NlQ2FtZXJhLnN2Z1wiOiBcIi4vc3JjL2ltYWdlcy9DbG9zZUNhbWVyYS5zdmdcIixcblx0XCIuL0RlZmF1bHRGaWxlLnN2Z1wiOiBcIi4vc3JjL2ltYWdlcy9EZWZhdWx0RmlsZS5zdmdcIixcblx0XCIuL0RlbGV0ZS5zdmdcIjogXCIuL3NyYy9pbWFnZXMvRGVsZXRlLnN2Z1wiLFxuXHRcIi4vRG93bl8zNHgzNC5zdmdcIjogXCIuL3NyYy9pbWFnZXMvRG93bl8zNHgzNC5zdmdcIixcblx0XCIuL0xlZnQuc3ZnXCI6IFwiLi9zcmMvaW1hZ2VzL0xlZnQuc3ZnXCIsXG5cdFwiLi9Nb2Rlcm5Cb29sZWFuQ2hlY2tDaGVja2VkLnN2Z1wiOiBcIi4vc3JjL2ltYWdlcy9Nb2Rlcm5Cb29sZWFuQ2hlY2tDaGVja2VkLnN2Z1wiLFxuXHRcIi4vTW9kZXJuQm9vbGVhbkNoZWNrSW5kLnN2Z1wiOiBcIi4vc3JjL2ltYWdlcy9Nb2Rlcm5Cb29sZWFuQ2hlY2tJbmQuc3ZnXCIsXG5cdFwiLi9Nb2Rlcm5Cb29sZWFuQ2hlY2tVbmNoZWNrZWQuc3ZnXCI6IFwiLi9zcmMvaW1hZ2VzL01vZGVybkJvb2xlYW5DaGVja1VuY2hlY2tlZC5zdmdcIixcblx0XCIuL01vZGVybkNoZWNrLnN2Z1wiOiBcIi4vc3JjL2ltYWdlcy9Nb2Rlcm5DaGVjay5zdmdcIixcblx0XCIuL01vZGVyblJhZGlvLnN2Z1wiOiBcIi4vc3JjL2ltYWdlcy9Nb2Rlcm5SYWRpby5zdmdcIixcblx0XCIuL01vcmUuc3ZnXCI6IFwiLi9zcmMvaW1hZ2VzL01vcmUuc3ZnXCIsXG5cdFwiLi9OYXZNZW51XzI0eDI0LnN2Z1wiOiBcIi4vc3JjL2ltYWdlcy9OYXZNZW51XzI0eDI0LnN2Z1wiLFxuXHRcIi4vUHJvZ3Jlc3NCdXR0b24uc3ZnXCI6IFwiLi9zcmMvaW1hZ2VzL1Byb2dyZXNzQnV0dG9uLnN2Z1wiLFxuXHRcIi4vUHJvZ3Jlc3NCdXR0b25WMi5zdmdcIjogXCIuL3NyYy9pbWFnZXMvUHJvZ3Jlc3NCdXR0b25WMi5zdmdcIixcblx0XCIuL1JlbW92ZUZpbGUuc3ZnXCI6IFwiLi9zcmMvaW1hZ2VzL1JlbW92ZUZpbGUuc3ZnXCIsXG5cdFwiLi9SaWdodC5zdmdcIjogXCIuL3NyYy9pbWFnZXMvUmlnaHQuc3ZnXCIsXG5cdFwiLi9TZWFyY2hDbGVhci5zdmdcIjogXCIuL3NyYy9pbWFnZXMvU2VhcmNoQ2xlYXIuc3ZnXCIsXG5cdFwiLi9TaG93Q2FtZXJhLnN2Z1wiOiBcIi4vc3JjL2ltYWdlcy9TaG93Q2FtZXJhLnN2Z1wiLFxuXHRcIi4vVGFrZVBpY3R1cmUuc3ZnXCI6IFwiLi9zcmMvaW1hZ2VzL1Rha2VQaWN0dXJlLnN2Z1wiLFxuXHRcIi4vVGFrZVBpY3R1cmVfMjR4MjQuc3ZnXCI6IFwiLi9zcmMvaW1hZ2VzL1Rha2VQaWN0dXJlXzI0eDI0LnN2Z1wiLFxuXHRcIi4vVGltZXJDaXJjbGUuc3ZnXCI6IFwiLi9zcmMvaW1hZ2VzL1RpbWVyQ2lyY2xlLnN2Z1wiLFxuXHRcIi4vVjJDaGVjay5zdmdcIjogXCIuL3NyYy9pbWFnZXMvVjJDaGVjay5zdmdcIixcblx0XCIuL1YyQ2hlY2tfMjR4MjQuc3ZnXCI6IFwiLi9zcmMvaW1hZ2VzL1YyQ2hlY2tfMjR4MjQuc3ZnXCIsXG5cdFwiLi9WMkRyYWdFbGVtZW50XzE2eDE2LnN2Z1wiOiBcIi4vc3JjL2ltYWdlcy9WMkRyYWdFbGVtZW50XzE2eDE2LnN2Z1wiLFxuXHRcIi4vY2hldnJvbi5zdmdcIjogXCIuL3NyYy9pbWFnZXMvY2hldnJvbi5zdmdcIixcblx0XCIuL2NsZWFyXzE2eDE2LnN2Z1wiOiBcIi4vc3JjL2ltYWdlcy9jbGVhcl8xNngxNi5zdmdcIixcblx0XCIuL2NvbGxhcHNlRGV0YWlsLnN2Z1wiOiBcIi4vc3JjL2ltYWdlcy9jb2xsYXBzZURldGFpbC5zdmdcIixcblx0XCIuL2V4cGFuZERldGFpbC5zdmdcIjogXCIuL3NyYy9pbWFnZXMvZXhwYW5kRGV0YWlsLnN2Z1wiLFxuXHRcIi4vbG9hZGluZy5zdmdcIjogXCIuL3NyYy9pbWFnZXMvbG9hZGluZy5zdmdcIixcblx0XCIuL25vLWltYWdlLnN2Z1wiOiBcIi4vc3JjL2ltYWdlcy9uby1pbWFnZS5zdmdcIixcblx0XCIuL3JhdGluZy1zdGFyLTIuc3ZnXCI6IFwiLi9zcmMvaW1hZ2VzL3JhdGluZy1zdGFyLTIuc3ZnXCIsXG5cdFwiLi9yYXRpbmctc3Rhci1zbWFsbC0yLnN2Z1wiOiBcIi4vc3JjL2ltYWdlcy9yYXRpbmctc3Rhci1zbWFsbC0yLnN2Z1wiLFxuXHRcIi4vcmF0aW5nLXN0YXItc21hbGwuc3ZnXCI6IFwiLi9zcmMvaW1hZ2VzL3JhdGluZy1zdGFyLXNtYWxsLnN2Z1wiLFxuXHRcIi4vcmF0aW5nLXN0YXIuc3ZnXCI6IFwiLi9zcmMvaW1hZ2VzL3JhdGluZy1zdGFyLnN2Z1wiLFxuXHRcIi4vc2VhcmNoLnN2Z1wiOiBcIi4vc3JjL2ltYWdlcy9zZWFyY2guc3ZnXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4vc3JjL2ltYWdlcyBzeW5jIFxcXFwuc3ZnJFwiO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9pbWFnZXMvQXJyb3dEb3duXzM0eDM0LnN2Z1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9pbWFnZXMvQXJyb3dEb3duXzM0eDM0LnN2ZyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IFwiPHN2ZyB2ZXJzaW9uPVxcXCIxLjFcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCIgeG1sbnM6eGxpbms9XFxcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcXFwiIHg9XFxcIjBweFxcXCIgeT1cXFwiMHB4XFxcIiB2aWV3Qm94PVxcXCIwIDAgMzQgMzRcXFwiIHhtbDpzcGFjZT1cXFwicHJlc2VydmVcXFwiPjxwb2x5Z29uIGNsYXNzPVxcXCJzdDBcXFwiIHBvaW50cz1cXFwiMTIsMTYgMTQsMTQgMTcsMTcgMjAsMTQgMjIsMTYgMTcsMjEgXFxcIj48L3BvbHlnb24+PC9zdmc+XCJcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvaW1hZ2VzL0Fycm93TGVmdC5zdmdcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvaW1hZ2VzL0Fycm93TGVmdC5zdmcgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSBcIjxzdmcgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPjxwYXRoIGQ9XFxcIk0xNSA4Ljk5OTk5SDQuMzk5OThMOC42OTk5OCAxMy4zTDcuMjk5OTggMTQuN0wwLjU5OTk3NiA3Ljk5OTk5TDcuMjk5OTggMS4yOTk5OUw4LjY5OTk4IDIuNjk5OTlMNC4zOTk5OCA2Ljk5OTk5SDE1VjguOTk5OTlaXFxcIj48L3BhdGg+PC9zdmc+XCJcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvaW1hZ2VzL0Fycm93UmlnaHQuc3ZnXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9pbWFnZXMvQXJyb3dSaWdodC5zdmcgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48cGF0aCBkPVxcXCJNMSA2Ljk5OTk5SDExLjZMNy4zIDIuNjk5OTlMOC43IDEuMjk5OTlMMTUuNCA3Ljk5OTk5TDguNyAxNC43TDcuMyAxMy4zTDExLjYgOC45OTk5OUgxVjYuOTk5OTlaXFxcIj48L3BhdGg+PC9zdmc+XCJcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvaW1hZ2VzL0Fycm93X2Rvd25HUkVZXzEweDEwLnN2Z1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL2ltYWdlcy9BcnJvd19kb3duR1JFWV8xMHgxMC5zdmcgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IFwiPHN2ZyB2ZXJzaW9uPVxcXCIxLjFcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCIgeG1sbnM6eGxpbms9XFxcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcXFwiIHg9XFxcIjBweFxcXCIgeT1cXFwiMHB4XFxcIiB2aWV3Qm94PVxcXCIwIDAgMTAgMTBcXFwiIHhtbDpzcGFjZT1cXFwicHJlc2VydmVcXFwiPjxwb2x5Z29uIGNsYXNzPVxcXCJzdDBcXFwiIHBvaW50cz1cXFwiMiwyIDAsNCA1LDkgMTAsNCA4LDIgNSw1IFxcXCI+PC9wb2x5Z29uPjwvc3ZnPlwiXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL2ltYWdlcy9DaGFuZ2VDYW1lcmEuc3ZnXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL2ltYWdlcy9DaGFuZ2VDYW1lcmEuc3ZnICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCAyNCAyNFxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48cGF0aCBkPVxcXCJNMjMgMTIuMDAzN0MyMyAxNC4yNDQ1IDIxLjc3OTQgMTYuMzA1MiAxOS41Njg0IDE3LjgyNTdDMTkuMzk4NCAxNy45NDU4IDE5LjE5ODMgMTguMDA1OCAxOS4wMDgyIDE4LjAwNThDMTguNjg4IDE4LjAwNTggMTguMzc3OSAxNy44NTU3IDE4LjE3NzggMTcuNTc1NkMxNy44Njc3IDE3LjExNTUgMTcuOTc3NyAxNi40OTUzIDE4LjQzNzkgMTYuMTg1MkMyMC4wODg3IDE1LjA0NDggMjEuMDA5MSAxMy41NjQzIDIxLjAwOTEgMTIuMDEzOEMyMS4wMDkxIDguNzAyNjIgMTYuOTY3MyA2LjAxMTcxIDEyLjAwNSA2LjAxMTcxQzExLjQ5NDggNi4wMTE3MSAxMC45OTQ1IDYuMDQxNzIgMTAuNTA0MyA2LjA5MTczTDExLjcxNDkgNy4zMDIxNUMxMi4xMDUgNy42OTIyOCAxMi4xMDUgOC4zMjI0OSAxMS43MTQ5IDguNzEyNjNDMTEuNTE0OCA4LjkxMjcgMTEuMjY0NyA5LjAwMjczIDExLjAwNDUgOS4wMDI3M0MxMC43NDQ0IDkuMDAyNzMgMTAuNDk0MyA4LjkwMjY5IDEwLjI5NDIgOC43MTI2M0w2LjU4MjU0IDUuMDAxMzZMMTAuMjg0MiAxLjI5MDFDMTAuNjc0NCAwLjg5OTk2NCAxMS4zMDQ3IDAuODk5OTY0IDExLjY5NDkgMS4yOTAxQzEyLjA4NSAxLjY4MDIzIDEyLjA4NSAyLjMxMDQ1IDExLjY5NDkgMi43MDA1OEwxMC4zMDQyIDQuMDkxMDVDMTAuODU0NSA0LjAzMTAzIDExLjQxNDcgNC4wMDEwMiAxMS45ODUgNC4wMDEwMkMxOC4wNTc4IDQuMDAxMDIgMjIuOTkgNy41OTIyNSAyMi45OSAxMi4wMDM3SDIzWk0xMi4yODUxIDE1LjI5NDlDMTEuODk1IDE1LjY4NSAxMS44OTUgMTYuMzE1MiAxMi4yODUxIDE2LjcwNTRMMTMuNDk1NyAxNy45MTU4QzEzLjAwNTUgMTcuOTc1OCAxMi40OTUyIDE3Ljk5NTggMTEuOTk1IDE3Ljk5NThDNy4wMzI3NCAxNy45OTU4IDIuOTkwOTEgMTUuMzA0OSAyLjk5MDkxIDExLjk5MzdDMi45OTA5MSAxMC40MzMyIDMuOTAxMzIgOC45NTI3MSA1LjU2MjA3IDcuODIyMzJDNi4wMjIyOCA3LjUxMjIyIDYuMTMyMzMgNi44OTIwMSA1LjgyMjE5IDYuNDMxODVDNS41MTIwNSA1Ljk3MTY5IDQuODkxNzcgNS44NjE2NiA0LjQzMTU2IDYuMTcxNzZDMi4yMjA1NSA3LjY5MjI4IDEgOS43NjI5OSAxIDExLjk5MzdDMSAxNi40MDUyIDUuOTMyMjQgMTkuOTk2NSAxMi4wMDUgMTkuOTk2NUMxMi41NzUzIDE5Ljk5NjUgMTMuMTM1NSAxOS45NjY1IDEzLjY4NTggMTkuOTA2NEwxMi4yOTUxIDIxLjI5NjlDMTEuOTA1IDIxLjY4NzEgMTEuOTA1IDIyLjMxNzMgMTIuMjk1MSAyMi43MDc0QzEyLjQ5NTIgMjIuOTA3NSAxMi43NDUzIDIyLjk5NzUgMTMuMDA1NSAyMi45OTc1QzEzLjI2NTYgMjIuOTk3NSAxMy41MTU3IDIyLjg5NzUgMTMuNzE1OCAyMi43MDc0TDE3LjQyNzUgMTguOTk2MUwxMy43MTU4IDE1LjI4NDlDMTMuMzI1NiAxNC44OTQ3IDEyLjY5NTMgMTQuODk0NyAxMi4zMDUxIDE1LjI4NDlMMTIuMjg1MSAxNS4yOTQ5WlxcXCI+PC9wYXRoPjwvc3ZnPlwiXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL2ltYWdlcy9DaG9vc2VGaWxlLnN2Z1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvaW1hZ2VzL0Nob29zZUZpbGUuc3ZnICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IFwiPHN2ZyB2aWV3Qm94PVxcXCIwIDAgMjQgMjRcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCI+PHBhdGggZD1cXFwiTTIyIDlWN0MyMiA1LjkgMjEuMSA1IDIwIDVIMTJMMTAgM0g0QzIuOSAzIDIgMy45IDIgNVY5VjEwVjIxSDIyTDI0IDlIMjJaTTQgNUg5LjJMMTAuNiA2LjRMMTEuMiA3SDEySDIwVjlINFY1Wk0yMC4zIDE5SDRWMTFIMjEuNkwyMC4zIDE5WlxcXCI+PC9wYXRoPjwvc3ZnPlwiXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL2ltYWdlcy9DbGVhci5zdmdcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9pbWFnZXMvQ2xlYXIuc3ZnICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSBcIjxzdmcgdmlld0JveD1cXFwiMCAwIDI0IDI0XFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPjxwYXRoIGQ9XFxcIk0yMi42IDguNkwxNi40IDIuNEMxNiAyIDE1LjUgMS44IDE1IDEuOEMxNC41IDEuOCAxNCAyIDEzLjYgMi40TDEuNCAxNC42QzAuNjAwMDAzIDE1LjQgMC42MDAwMDMgMTYuNiAxLjQgMTcuNEw2IDIySDEyTDIyLjYgMTEuNEMyMy4zIDEwLjYgMjMuMyA5LjMgMjIuNiA4LjZaTTExLjEgMjBINi44TDIuOCAxNkw2LjIgMTIuNkwxMi40IDE4LjhMMTEuMSAyMFpNMTMuOCAxNy40TDcuNiAxMS4yTDE1IDMuOEwyMS4yIDEwTDEzLjggMTcuNFpNMTYgMjBIMjNWMjJIMTRMMTYgMjBaXFxcIj48L3BhdGg+PC9zdmc+XCJcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvaW1hZ2VzL0Nsb3NlQ2FtZXJhLnN2Z1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL2ltYWdlcy9DbG9zZUNhbWVyYS5zdmcgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IFwiPHN2ZyB2aWV3Qm94PVxcXCIwIDAgMjQgMjRcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCI+PHBhdGggZD1cXFwiTTEzLjQxIDEyTDIwLjcgNC43MUMyMS4wOSA0LjMyIDIxLjA5IDMuNjkgMjAuNyAzLjNDMjAuMzEgMi45MSAxOS42OCAyLjkxIDE5LjI5IDMuM0wxMiAxMC41OUw0LjcxIDMuMjlDNC4zMiAyLjkgMy42OCAyLjkgMy4yOSAzLjI5QzIuOSAzLjY4IDIuOSA0LjMyIDMuMjkgNC43MUwxMC41OCAxMkwzLjI5IDE5LjI5QzIuOSAxOS42OCAyLjkgMjAuMzEgMy4yOSAyMC43QzMuNDkgMjAuOSAzLjc0IDIwLjk5IDQgMjAuOTlDNC4yNiAyMC45OSA0LjUxIDIwLjg5IDQuNzEgMjAuN0wxMiAxMy40MUwxOS4yOSAyMC43QzE5LjQ5IDIwLjkgMTkuNzQgMjAuOTkgMjAgMjAuOTlDMjAuMjYgMjAuOTkgMjAuNTEgMjAuODkgMjAuNzEgMjAuN0MyMS4xIDIwLjMxIDIxLjEgMTkuNjggMjAuNzEgMTkuMjlMMTMuNDIgMTJIMTMuNDFaXFxcIj48L3BhdGg+PC9zdmc+XCJcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvaW1hZ2VzL0RlZmF1bHRGaWxlLnN2Z1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL2ltYWdlcy9EZWZhdWx0RmlsZS5zdmcgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IFwiPHN2ZyB2aWV3Qm94PVxcXCIwIDAgNTYgNjhcXFwiIGZpbGw9XFxcIm5vbmVcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCI+PGcgY2xpcC1wYXRoPVxcXCJ1cmwoI2NsaXAwXzkwMTFfNDEyMTkpXFxcIj48cGF0aCBkPVxcXCJNNTQuODMgMTAuODNMNDUuMTcgMS4xN0M0NC43OTgyIDAuNzk4NjY0IDQ0LjM1NyAwLjUwNDIwOCA0My44NzE0IDAuMzAzNDU1QzQzLjM4NTggMC4xMDI3MDMgNDIuODY1NCAtMC4wMDA0MTE5NDMgNDIuMzQgMS4yMzY4ZS0wNkg2QzQuNDA4NyAxLjIzNjhlLTA2IDIuODgyNTcgMC42MzIxNDIgMS43NTczNSAxLjc1NzM2QzAuNjMyMTM2IDIuODgyNTggMCA0LjQwODcgMCA2VjYyQzAgNjMuNTkxMyAwLjYzMjEzNiA2NS4xMTc0IDEuNzU3MzUgNjYuMjQyNkMyLjg4MjU3IDY3LjM2NzkgNC40MDg3IDY4IDYgNjhINTBDNTEuNTkxMyA2OCA1My4xMTc0IDY3LjM2NzkgNTQuMjQyNiA2Ni4yNDI2QzU1LjM2NzkgNjUuMTE3NCA1NiA2My41OTEzIDU2IDYyVjEzLjY2QzU2LjAwMDQgMTMuMTM0NiA1NS44OTczIDEyLjYxNDIgNTUuNjk2NSAxMi4xMjg2QzU1LjQ5NTggMTEuNjQzIDU1LjIwMTMgMTEuMjAxOCA1NC44MyAxMC44M1pNNDQgMi44M0w1My4xNyAxMkg0OEM0Ni45MzkxIDEyIDQ1LjkyMTcgMTEuNTc4NiA0NS4xNzE2IDEwLjgyODRDNDQuNDIxNCAxMC4wNzgzIDQ0IDkuMDYwODcgNDQgOFYyLjgzWk01NCA2MkM1NCA2My4wNjA5IDUzLjU3ODYgNjQuMDc4MyA1Mi44Mjg0IDY0LjgyODRDNTIuMDc4MyA2NS41Nzg2IDUxLjA2MDkgNjYgNTAgNjZINkM0LjkzOTEzIDY2IDMuOTIxNzIgNjUuNTc4NiAzLjE3MTU3IDY0LjgyODRDMi40MjE0MiA2NC4wNzgzIDIgNjMuMDYwOSAyIDYyVjZDMiA0LjkzOTE0IDIuNDIxNDIgMy45MjE3MiAzLjE3MTU3IDMuMTcxNTdDMy45MjE3MiAyLjQyMTQzIDQuOTM5MTMgMiA2IDJINDJWOEM0MiA5LjU5MTMgNDIuNjMyMSAxMS4xMTc0IDQzLjc1NzQgMTIuMjQyNkM0NC44ODI2IDEzLjM2NzkgNDYuNDA4NyAxNCA0OCAxNEg1NFY2MlpNMTQgMjRINDJWMjZIMTRWMjRaTTE0IDMwSDQyVjMySDE0VjMwWk0xNCAzNkg0MlYzOEgxNFYzNlpNMTQgNDJINDJWNDRIMTRWNDJaXFxcIiBmaWxsPVxcXCIjOTA5MDkwXFxcIj48L3BhdGg+PC9nPjxkZWZzPjxjbGlwUGF0aCBpZD1cXFwiY2xpcDBfOTAxMV80MTIxOVxcXCI+PHJlY3Qgd2lkdGg9XFxcIjU2XFxcIiBoZWlnaHQ9XFxcIjY4XFxcIiBmaWxsPVxcXCJ3aGl0ZVxcXCI+PC9yZWN0PjwvY2xpcFBhdGg+PC9kZWZzPjwvc3ZnPlwiXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL2ltYWdlcy9EZWxldGUuc3ZnXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL2ltYWdlcy9EZWxldGUuc3ZnICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCAyNCAyNFxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48cGF0aCBkPVxcXCJNMjIgNEgyMEgxNlYyQzE2IDAuOSAxNS4xIDAgMTQgMEgxMEM4LjkgMCA4IDAuOSA4IDJWNEg0SDJWNkg0VjIwQzQgMjEuMSA0LjkgMjIgNiAyMkgxOEMxOS4xIDIyIDIwIDIxLjEgMjAgMjBWNkgyMlY0Wk0xMCAySDE0VjRIMTBWMlpNMTggMjBINlY2SDhIMTZIMThWMjBaTTE0IDhIMTZWMThIMTRWOFpNMTEgOEgxM1YxOEgxMVY4Wk04IDhIMTBWMThIOFY4WlxcXCI+PC9wYXRoPjwvc3ZnPlwiXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL2ltYWdlcy9Eb3duXzM0eDM0LnN2Z1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvaW1hZ2VzL0Rvd25fMzR4MzQuc3ZnICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IFwiPHN2ZyB2ZXJzaW9uPVxcXCIxLjFcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCIgeG1sbnM6eGxpbms9XFxcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcXFwiIHg9XFxcIjBweFxcXCIgeT1cXFwiMHB4XFxcIiB2aWV3Qm94PVxcXCIwIDAgMzQgMzRcXFwiIHhtbDpzcGFjZT1cXFwicHJlc2VydmVcXFwiPjxnPjxwYXRoIGNsYXNzPVxcXCJzdDBcXFwiIGQ9XFxcIk0zMywzNEgwVjBoMzNjMC42LDAsMSwwLjQsMSwxdjMyQzM0LDMzLjYsMzMuNiwzNCwzMywzNHpcXFwiPjwvcGF0aD48cG9seWdvbiBjbGFzcz1cXFwic3QxXFxcIiBwb2ludHM9XFxcIjEyLDE2IDE0LDE0IDE3LDE3IDIwLDE0IDIyLDE2IDE3LDIxIFxcXCI+PC9wb2x5Z29uPjwvZz48L3N2Zz5cIlxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9pbWFnZXMvTGVmdC5zdmdcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL2ltYWdlcy9MZWZ0LnN2ZyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSBcIjxzdmcgdmVyc2lvbj1cXFwiMS4xXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHhtbG5zOnhsaW5rPVxcXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXFxcIiB4PVxcXCIwcHhcXFwiIHk9XFxcIjBweFxcXCIgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIiB4bWw6c3BhY2U9XFxcInByZXNlcnZlXFxcIj48cG9seWdvbiBwb2ludHM9XFxcIjExLDEyIDksMTQgMyw4IDksMiAxMSw0IDcsOCBcXFwiPjwvcG9seWdvbj48L3N2Zz5cIlxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9pbWFnZXMvTW9kZXJuQm9vbGVhbkNoZWNrQ2hlY2tlZC5zdmdcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL2ltYWdlcy9Nb2Rlcm5Cb29sZWFuQ2hlY2tDaGVja2VkLnN2ZyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSBcIjxzdmcgdmVyc2lvbj1cXFwiMS4xXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHhtbG5zOnhsaW5rPVxcXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXFxcIiB2aWV3Qm94PVxcXCIwIDAgMjQgMjRcXFwiPjxwb2x5Z29uIHBvaW50cz1cXFwiMTksMTAgMTQsMTAgMTQsNSAxMCw1IDEwLDEwIDUsMTAgNSwxNCAxMCwxNCAxMCwxOSAxNCwxOSAxNCwxNCAxOSwxNCBcXFwiPjwvcG9seWdvbj48L3N2Zz5cIlxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9pbWFnZXMvTW9kZXJuQm9vbGVhbkNoZWNrSW5kLnN2Z1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9pbWFnZXMvTW9kZXJuQm9vbGVhbkNoZWNrSW5kLnN2ZyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IFwiPHN2ZyB2ZXJzaW9uPVxcXCIxLjFcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCIgeG1sbnM6eGxpbms9XFxcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcXFwiIHZpZXdCb3g9XFxcIjAgMCAyNCAyNFxcXCI+PHBhdGggZD1cXFwiTTIyLDBIMkMwLjksMCwwLDAuOSwwLDJ2MjBjMCwxLjEsMC45LDIsMiwyaDIwYzEuMSwwLDItMC45LDItMlYyQzI0LDAuOSwyMy4xLDAsMjIsMHogTTIxLDE4TDYsM2gxNVYxOHogTTMsNmwxNSwxNUgzVjZ6XFxcIj48L3BhdGg+PC9zdmc+XCJcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvaW1hZ2VzL01vZGVybkJvb2xlYW5DaGVja1VuY2hlY2tlZC5zdmdcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvaW1hZ2VzL01vZGVybkJvb2xlYW5DaGVja1VuY2hlY2tlZC5zdmcgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSBcIjxzdmcgdmVyc2lvbj1cXFwiMS4xXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHhtbG5zOnhsaW5rPVxcXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXFxcIiB2aWV3Qm94PVxcXCIwIDAgMjQgMjRcXFwiPjxyZWN0IHg9XFxcIjVcXFwiIHk9XFxcIjEwXFxcIiB3aWR0aD1cXFwiMTRcXFwiIGhlaWdodD1cXFwiNFxcXCI+PC9yZWN0Pjwvc3ZnPlwiXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL2ltYWdlcy9Nb2Rlcm5DaGVjay5zdmdcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9pbWFnZXMvTW9kZXJuQ2hlY2suc3ZnICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSBcIjxzdmcgdmlld0JveD1cXFwiMCAwIDI0IDI0XFxcIj48cGF0aCBkPVxcXCJNNSwxM2wyLTJsMywzbDctN2wyLDJsLTksOUw1LDEzelxcXCI+PC9wYXRoPjwvc3ZnPlwiXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL2ltYWdlcy9Nb2Rlcm5SYWRpby5zdmdcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9pbWFnZXMvTW9kZXJuUmFkaW8uc3ZnICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSBcIjxzdmcgdmlld0JveD1cXFwiLTEyIC0xMiAyNCAyNFxcXCI+PGNpcmNsZSByPVxcXCI2XFxcIiBjeD1cXFwiMFxcXCIgY3k9XFxcIjBcXFwiPjwvY2lyY2xlPjwvc3ZnPlwiXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL2ltYWdlcy9Nb3JlLnN2Z1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvaW1hZ2VzL01vcmUuc3ZnICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IFwiPHN2ZyB2aWV3Qm94PVxcXCIwIDAgMjQgMjRcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCI+PHBhdGggZD1cXFwiTTYgMTJDNiAxMy4xIDUuMSAxNCA0IDE0QzIuOSAxNCAyIDEzLjEgMiAxMkMyIDEwLjkgMi45IDEwIDQgMTBDNS4xIDEwIDYgMTAuOSA2IDEyWk0xMiAxMEMxMC45IDEwIDEwIDEwLjkgMTAgMTJDMTAgMTMuMSAxMC45IDE0IDEyIDE0QzEzLjEgMTQgMTQgMTMuMSAxNCAxMkMxNCAxMC45IDEzLjEgMTAgMTIgMTBaTTIwIDEwQzE4LjkgMTAgMTggMTAuOSAxOCAxMkMxOCAxMy4xIDE4LjkgMTQgMjAgMTRDMjEuMSAxNCAyMiAxMy4xIDIyIDEyQzIyIDEwLjkgMjEuMSAxMCAyMCAxMFpcXFwiPjwvcGF0aD48L3N2Zz5cIlxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9pbWFnZXMvTmF2TWVudV8yNHgyNC5zdmdcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL2ltYWdlcy9OYXZNZW51XzI0eDI0LnN2ZyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSBcIjxzdmcgdmlld0JveD1cXFwiMCAwIDI0IDI0XFxcIiBmaWxsPVxcXCJub25lXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPjxwYXRoIGQ9XFxcIk0xNiA3SDJWNUgxNlY3Wk0yIDExVjEzSDIyVjExSDJaTTIgMTlIMTBWMTdIMlYxOVpcXFwiIGZpbGw9XFxcImJsYWNrXFxcIiBmaWxsLW9wYWNpdHk9XFxcIjAuNDVcXFwiPjwvcGF0aD48L3N2Zz5cIlxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9pbWFnZXMvUHJvZ3Jlc3NCdXR0b24uc3ZnXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvaW1hZ2VzL1Byb2dyZXNzQnV0dG9uLnN2ZyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCAxMCAxMFxcXCI+PHBvbHlnb24gcG9pbnRzPVxcXCIyLDIgMCw0IDUsOSAxMCw0IDgsMiA1LDUgXFxcIj48L3BvbHlnb24+PC9zdmc+XCJcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvaW1hZ2VzL1Byb2dyZXNzQnV0dG9uVjIuc3ZnXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9pbWFnZXMvUHJvZ3Jlc3NCdXR0b25WMi5zdmcgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCI+PHBhdGggZD1cXFwiTTE1IDguOTk5OTlINC4zOTk5OEw4LjY5OTk4IDEzLjNMNy4yOTk5OCAxNC43TDAuNTk5OTc2IDcuOTk5OTlMNy4yOTk5OCAxLjI5OTk5TDguNjk5OTggMi42OTk5OUw0LjM5OTk4IDYuOTk5OTlIMTVWOC45OTk5OVpcXFwiPjwvcGF0aD48L3N2Zz5cIlxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9pbWFnZXMvUmVtb3ZlRmlsZS5zdmdcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL2ltYWdlcy9SZW1vdmVGaWxlLnN2ZyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSBcIjxzdmcgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIj48cGF0aCBkPVxcXCJNOCwyQzQuNywyLDIsNC43LDIsOHMyLjcsNiw2LDZzNi0yLjcsNi02UzExLjMsMiw4LDJ6IE0xMSwxMGwtMSwxTDgsOWwtMiwybC0xLTFsMi0yTDUsNmwxLTFsMiwybDItMmwxLDFMOSw4IEwxMSwxMHpcXFwiPjwvcGF0aD48L3N2Zz5cIlxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9pbWFnZXMvUmlnaHQuc3ZnXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvaW1hZ2VzL1JpZ2h0LnN2ZyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gXCI8c3ZnIHZlcnNpb249XFxcIjEuMVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB4bWxuczp4bGluaz1cXFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1xcXCIgeD1cXFwiMHB4XFxcIiB5PVxcXCIwcHhcXFwiIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgeG1sOnNwYWNlPVxcXCJwcmVzZXJ2ZVxcXCI+PHBvbHlnb24gcG9pbnRzPVxcXCI1LDQgNywyIDEzLDggNywxNCA1LDEyIDksOCBcXFwiPjwvcG9seWdvbj48L3N2Zz5cIlxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9pbWFnZXMvU2VhcmNoQ2xlYXIuc3ZnXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvaW1hZ2VzL1NlYXJjaENsZWFyLnN2ZyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48cGF0aCBkPVxcXCJNMTMuMzUgMy4zNDk5OUwxMi42NSAyLjY0OTk5TDguMDUwMDIgNy4yNDk5OUwzLjM1MDAyIDIuNjQ5OTlMMi42NTAwMiAzLjM0OTk5TDcuMjUwMDIgOC4wNDk5OUwyLjY1MDAyIDEyLjY1TDMuMzUwMDIgMTMuMzVMOC4wNTAwMiA4Ljc0OTk5TDEyLjY1IDEzLjM1TDEzLjM1IDEyLjY1TDguNzUwMDIgOC4wNDk5OUwxMy4zNSAzLjM0OTk5WlxcXCI+PC9wYXRoPjwvc3ZnPlwiXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL2ltYWdlcy9TaG93Q2FtZXJhLnN2Z1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvaW1hZ2VzL1Nob3dDYW1lcmEuc3ZnICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IFwiPHN2ZyB2aWV3Qm94PVxcXCIwIDAgMjQgMjRcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCI+PHBhdGggZD1cXFwiTTIwLjAxIDRIMTguNEMxOC4yIDQgMTguMDEgMy45IDE3LjkgMy43M0wxNi45NyAyLjM0QzE2LjQxIDEuNSAxNS40OCAxIDE0LjQ3IDFIOS41NEM4LjUzIDEgNy42IDEuNSA3LjA0IDIuMzRMNi4xMSAzLjczQzYgMy45IDUuODEgNCA1LjYxIDRINEMyLjM1IDQgMSA1LjM1IDEgN1YxOUMxIDIwLjY1IDIuMzUgMjIgNCAyMkgyMEMyMS42NSAyMiAyMyAyMC42NSAyMyAxOVY3QzIzIDUuMzUgMjEuNjUgNCAyMCA0SDIwLjAxWk0yMS4wMSAxOUMyMS4wMSAxOS41NSAyMC41NiAyMCAyMC4wMSAyMEg0LjAxQzMuNDYgMjAgMy4wMSAxOS41NSAzLjAxIDE5VjdDMy4wMSA2LjQ1IDMuNDYgNiA0LjAxIDZINS42MkM2LjQ5IDYgNy4zIDUuNTYgNy43OSA0Ljg0TDguNzIgMy40NUM4LjkxIDMuMTcgOS4yMiAzIDkuNTUgM0gxNC40OEMxNC44MSAzIDE1LjEzIDMuMTcgMTUuMzEgMy40NUwxNi4yNCA0Ljg0QzE2LjcyIDUuNTYgMTcuNTQgNiAxOC40MSA2SDIwLjAyQzIwLjU3IDYgMjEuMDIgNi40NSAyMS4wMiA3VjE5SDIxLjAxWk0xMi4wMSA2QzguNyA2IDYuMDEgOC42OSA2LjAxIDEyQzYuMDEgMTUuMzEgOC43IDE4IDEyLjAxIDE4QzE1LjMyIDE4IDE4LjAxIDE1LjMxIDE4LjAxIDEyQzE4LjAxIDguNjkgMTUuMzIgNiAxMi4wMSA2Wk0xMi4wMSAxNkM5LjggMTYgOC4wMSAxNC4yMSA4LjAxIDEyQzguMDEgOS43OSA5LjggOCAxMi4wMSA4QzE0LjIyIDggMTYuMDEgOS43OSAxNi4wMSAxMkMxNi4wMSAxNC4yMSAxNC4yMiAxNiAxMi4wMSAxNlpNMTMuMDEgMTBDMTMuMDEgMTAuNTUgMTIuNTYgMTEgMTIuMDEgMTFDMTEuNDYgMTEgMTEuMDEgMTEuNDUgMTEuMDEgMTJDMTEuMDEgMTIuNTUgMTAuNTYgMTMgMTAuMDEgMTNDOS40NiAxMyA5LjAxIDEyLjU1IDkuMDEgMTJDOS4wMSAxMC4zNSAxMC4zNiA5IDEyLjAxIDlDMTIuNTYgOSAxMy4wMSA5LjQ1IDEzLjAxIDEwWlxcXCIgZmlsbD1cXFwiYmxhY2tcXFwiIGZpbGwtb3BhY2l0eT1cXFwiMC40NVxcXCI+PC9wYXRoPjwvc3ZnPlwiXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL2ltYWdlcy9UYWtlUGljdHVyZS5zdmdcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9pbWFnZXMvVGFrZVBpY3R1cmUuc3ZnICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSBcIjxzdmcgdmlld0JveD1cXFwiMCAwIDMyIDMyXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPjxwYXRoIGQ9XFxcIk0yNyA2SDIzLjhDMjMuMzQgNiAyMi45MiA1Ljc3IDIyLjY2IDUuMzlMMjIuMjUgNC43OEMyMS41MSAzLjY2IDIwLjI2IDMgMTguOTIgM0gxMy4wNkMxMS43MiAzIDEwLjQ4IDMuNjcgOS43MyA0Ljc4TDkuMzIgNS4zOUM5LjA3IDUuNzcgOC42NCA2IDguMTggNkg0Ljk4QzIuNzkgNiAxIDcuNzkgMSAxMFYyNEMxIDI2LjIxIDIuNzkgMjggNSAyOEgyN0MyOS4yMSAyOCAzMSAyNi4yMSAzMSAyNFYxMEMzMSA3Ljc5IDI5LjIxIDYgMjcgNlpNMjkgMjRDMjkgMjUuMSAyOC4xIDI2IDI3IDI2SDVDMy45IDI2IDMgMjUuMSAzIDI0VjEwQzMgOC45IDMuOSA4IDUgOEg4LjJDOS4zMyA4IDEwLjM4IDcuNDQgMTEgNi41TDExLjQxIDUuODlDMTEuNzggNS4zMyAxMi40MSA1IDEzLjA3IDVIMTguOTNDMTkuNiA1IDIwLjIyIDUuMzMgMjAuNTkgNS44OUwyMSA2LjVDMjEuNjIgNy40NCAyMi42OCA4IDIzLjggOEgyN0MyOC4xIDggMjkgOC45IDI5IDEwVjI0Wk0xNiA5QzEyLjEzIDkgOSAxMi4xMyA5IDE2QzkgMTkuODcgMTIuMTMgMjMgMTYgMjNDMTkuODcgMjMgMjMgMTkuODcgMjMgMTZDMjMgMTIuMTMgMTkuODcgOSAxNiA5Wk0xNiAyMUMxMy4yNCAyMSAxMSAxOC43NiAxMSAxNkMxMSAxMy4yNCAxMy4yNCAxMSAxNiAxMUMxOC43NiAxMSAyMSAxMy4yNCAyMSAxNkMyMSAxOC43NiAxOC43NiAyMSAxNiAyMVpNMTcgMTNDMTcgMTMuNTUgMTYuNTUgMTQgMTYgMTRDMTQuOSAxNCAxNCAxNC45IDE0IDE2QzE0IDE2LjU1IDEzLjU1IDE3IDEzIDE3QzEyLjQ1IDE3IDEyIDE2LjU1IDEyIDE2QzEyIDEzLjc5IDEzLjc5IDEyIDE2IDEyQzE2LjU1IDEyIDE3IDEyLjQ1IDE3IDEzWlxcXCI+PC9wYXRoPjwvc3ZnPlwiXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL2ltYWdlcy9UYWtlUGljdHVyZV8yNHgyNC5zdmdcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9pbWFnZXMvVGFrZVBpY3R1cmVfMjR4MjQuc3ZnICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSBcIjxzdmcgdmlld0JveD1cXFwiMCAwIDI0IDI0XFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPjxwYXRoIGQ9XFxcIk0yMC4wMSA0SDE4LjRDMTguMiA0IDE4LjAxIDMuOSAxNy45IDMuNzNMMTYuOTcgMi4zNEMxNi40MSAxLjUgMTUuNDggMSAxNC40NyAxSDkuNTRDOC41MyAxIDcuNiAxLjUgNy4wNCAyLjM0TDYuMTEgMy43M0M2IDMuOSA1LjgxIDQgNS42MSA0SDRDMi4zNSA0IDEgNS4zNSAxIDdWMTlDMSAyMC42NSAyLjM1IDIyIDQgMjJIMjBDMjEuNjUgMjIgMjMgMjAuNjUgMjMgMTlWN0MyMyA1LjM1IDIxLjY1IDQgMjAgNEgyMC4wMVpNMjEuMDEgMTlDMjEuMDEgMTkuNTUgMjAuNTYgMjAgMjAuMDEgMjBINC4wMUMzLjQ2IDIwIDMuMDEgMTkuNTUgMy4wMSAxOVY3QzMuMDEgNi40NSAzLjQ2IDYgNC4wMSA2SDUuNjJDNi40OSA2IDcuMyA1LjU2IDcuNzkgNC44NEw4LjcyIDMuNDVDOC45MSAzLjE3IDkuMjIgMyA5LjU1IDNIMTQuNDhDMTQuODEgMyAxNS4xMyAzLjE3IDE1LjMxIDMuNDVMMTYuMjQgNC44NEMxNi43MiA1LjU2IDE3LjU0IDYgMTguNDEgNkgyMC4wMkMyMC41NyA2IDIxLjAyIDYuNDUgMjEuMDIgN1YxOUgyMS4wMVpNMTIuMDEgNkM4LjcgNiA2LjAxIDguNjkgNi4wMSAxMkM2LjAxIDE1LjMxIDguNyAxOCAxMi4wMSAxOEMxNS4zMiAxOCAxOC4wMSAxNS4zMSAxOC4wMSAxMkMxOC4wMSA4LjY5IDE1LjMyIDYgMTIuMDEgNlpNMTIuMDEgMTZDOS44IDE2IDguMDEgMTQuMjEgOC4wMSAxMkM4LjAxIDkuNzkgOS44IDggMTIuMDEgOEMxNC4yMiA4IDE2LjAxIDkuNzkgMTYuMDEgMTJDMTYuMDEgMTQuMjEgMTQuMjIgMTYgMTIuMDEgMTZaTTEzLjAxIDEwQzEzLjAxIDEwLjU1IDEyLjU2IDExIDEyLjAxIDExQzExLjQ2IDExIDExLjAxIDExLjQ1IDExLjAxIDEyQzExLjAxIDEyLjU1IDEwLjU2IDEzIDEwLjAxIDEzQzkuNDYgMTMgOS4wMSAxMi41NSA5LjAxIDEyQzkuMDEgMTAuMzUgMTAuMzYgOSAxMi4wMSA5QzEyLjU2IDkgMTMuMDEgOS40NSAxMy4wMSAxMFpcXFwiPjwvcGF0aD48L3N2Zz5cIlxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9pbWFnZXMvVGltZXJDaXJjbGUuc3ZnXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvaW1hZ2VzL1RpbWVyQ2lyY2xlLnN2ZyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gXCI8c3ZnIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCIgdmVyc2lvbj1cXFwiMS4xXFxcIiB2aWV3Qm94PVxcXCIwIDAgMTYwIDE2MFxcXCI+PGNpcmNsZSBjeD1cXFwiODBcXFwiIGN5PVxcXCI4MFxcXCIgcj1cXFwiNzBcXFwiIHN0eWxlPVxcXCJzdHJva2U6IHZhcigtLXNkLXRpbWVyLXN0cm9rZS1iYWNrZ3JvdW5kLWNvbG9yKTsgc3Ryb2tlLXdpZHRoOiB2YXIoLS1zZC10aW1lci1zdHJva2UtYmFja2dyb3VuZC13aWR0aClcXFwiIHN0cm9rZS1kYXNoYXJyYXk9XFxcIm5vbmVcXFwiIHN0cm9rZS1kYXNob2Zmc2V0PVxcXCJub25lXFxcIj48L2NpcmNsZT48Y2lyY2xlIGN4PVxcXCI4MFxcXCIgY3k9XFxcIjgwXFxcIiByPVxcXCI3MFxcXCI+PC9jaXJjbGU+PC9zdmc+XCJcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvaW1hZ2VzL1YyQ2hlY2suc3ZnXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9pbWFnZXMvVjJDaGVjay5zdmcgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCAyMCAyMFxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48cGF0aCBkPVxcXCJNOC4wMDAwMSAxNS44TDIuNjAwMDEgMTAuNEw0LjAwMDAxIDlMOC4wMDAwMSAxM0wxNiA1TDE3LjQgNi40TDguMDAwMDEgMTUuOFpcXFwiPjwvcGF0aD48L3N2Zz5cIlxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9pbWFnZXMvVjJDaGVja18yNHgyNC5zdmdcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL2ltYWdlcy9WMkNoZWNrXzI0eDI0LnN2ZyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSBcIjxzdmcgdmlld0JveD1cXFwiMCAwIDI0IDI0XFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPjxwYXRoIGQ9XFxcIk05IDIwLjFMMSAxMkwzLjEgOS45TDkgMTUuOUwyMC45IDRMMjMgNi4xTDkgMjAuMVpcXFwiPjwvcGF0aD48L3N2Zz5cIlxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9pbWFnZXMvVjJEcmFnRWxlbWVudF8xNngxNi5zdmdcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL2ltYWdlcy9WMkRyYWdFbGVtZW50XzE2eDE2LnN2ZyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSBcIjxzdmcgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPjxwYXRoIGQ9XFxcIk0yIDRDMiAzLjczNDc4IDIuMTA1MzYgMy40ODA0MyAyLjI5Mjg5IDMuMjkyODlDMi40ODA0MyAzLjEwNTM2IDIuNzM0NzggMyAzIDNIMTNDMTMuMjY1MiAzIDEzLjUxOTYgMy4xMDUzNiAxMy43MDcxIDMuMjkyODlDMTMuODk0NiAzLjQ4MDQzIDE0IDMuNzM0NzggMTQgNEMxNCA0LjI2NTIyIDEzLjg5NDYgNC41MTk1NyAxMy43MDcxIDQuNzA3MTFDMTMuNTE5NiA0Ljg5NDY0IDEzLjI2NTIgNSAxMyA1SDNDMi43MzQ3OCA1IDIuNDgwNDMgNC44OTQ2NCAyLjI5Mjg5IDQuNzA3MTFDMi4xMDUzNiA0LjUxOTU3IDIgNC4yNjUyMiAyIDRaTTEzIDdIM0MyLjczNDc4IDcgMi40ODA0MyA3LjEwNTM2IDIuMjkyODkgNy4yOTI4OUMyLjEwNTM2IDcuNDgwNDMgMiA3LjczNDc4IDIgOEMyIDguMjY1MjIgMi4xMDUzNiA4LjUxOTU3IDIuMjkyODkgOC43MDcxMUMyLjQ4MDQzIDguODk0NjQgMi43MzQ3OCA5IDMgOUgxM0MxMy4yNjUyIDkgMTMuNTE5NiA4Ljg5NDY0IDEzLjcwNzEgOC43MDcxMUMxMy44OTQ2IDguNTE5NTcgMTQgOC4yNjUyMiAxNCA4QzE0IDcuNzM0NzggMTMuODk0NiA3LjQ4MDQzIDEzLjcwNzEgNy4yOTI4OUMxMy41MTk2IDcuMTA1MzYgMTMuMjY1MiA3IDEzIDdaTTEzIDExSDNDMi43MzQ3OCAxMSAyLjQ4MDQzIDExLjEwNTQgMi4yOTI4OSAxMS4yOTI5QzIuMTA1MzYgMTEuNDgwNCAyIDExLjczNDggMiAxMkMyIDEyLjI2NTIgMi4xMDUzNiAxMi41MTk2IDIuMjkyODkgMTIuNzA3MUMyLjQ4MDQzIDEyLjg5NDYgMi43MzQ3OCAxMyAzIDEzSDEzQzEzLjI2NTIgMTMgMTMuNTE5NiAxMi44OTQ2IDEzLjcwNzEgMTIuNzA3MUMxMy44OTQ2IDEyLjUxOTYgMTQgMTIuMjY1MiAxNCAxMkMxNCAxMS43MzQ4IDEzLjg5NDYgMTEuNDgwNCAxMy43MDcxIDExLjI5MjlDMTMuNTE5NiAxMS4xMDU0IDEzLjI2NTIgMTEgMTMgMTFaXFxcIj48L3BhdGg+PC9zdmc+XCJcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvaW1hZ2VzL2NoZXZyb24uc3ZnXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9pbWFnZXMvY2hldnJvbi5zdmcgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCAyNCAyNFxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48cGF0aCBkPVxcXCJNMTIgMTVMMTcgMTBIN0wxMiAxNVpcXFwiPjwvcGF0aD48L3N2Zz5cIlxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9pbWFnZXMvY2xlYXJfMTZ4MTYuc3ZnXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvaW1hZ2VzL2NsZWFyXzE2eDE2LnN2ZyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48cGF0aCBkPVxcXCJNMTMuMzUgMy4zNDk5OUwxMi42NSAyLjY0OTk5TDguMDUwMDIgNy4yNDk5OUwzLjM1MDAyIDIuNjQ5OTlMMi42NTAwMiAzLjM0OTk5TDcuMjUwMDIgOC4wNDk5OUwyLjY1MDAyIDEyLjY1TDMuMzUwMDIgMTMuMzVMOC4wNTAwMiA4Ljc0OTk5TDEyLjY1IDEzLjM1TDEzLjM1IDEyLjY1TDguNzUwMDIgOC4wNDk5OUwxMy4zNSAzLjM0OTk5WlxcXCI+PC9wYXRoPjwvc3ZnPlwiXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL2ltYWdlcy9jb2xsYXBzZURldGFpbC5zdmdcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9pbWFnZXMvY29sbGFwc2VEZXRhaWwuc3ZnICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSBcIjxzdmcgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPjxwYXRoIGQ9XFxcIk0xMyA3SDNWOUgxM1Y3WlxcXCI+PC9wYXRoPjwvc3ZnPlwiXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL2ltYWdlcy9leHBhbmREZXRhaWwuc3ZnXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL2ltYWdlcy9leHBhbmREZXRhaWwuc3ZnICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48cGF0aCBkPVxcXCJNMTMgN0g5VjNIN1Y3SDNWOUg3VjEzSDlWOUgxM1Y3WlxcXCI+PC9wYXRoPjwvc3ZnPlwiXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL2ltYWdlcy9sb2FkaW5nLnN2Z1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvaW1hZ2VzL2xvYWRpbmcuc3ZnICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IFwiPHN2ZyB2aWV3Qm94PVxcXCIwIDAgNDggNDhcXFwiIGZpbGw9XFxcIm5vbmVcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCI+PGcgY2xpcC1wYXRoPVxcXCJ1cmwoI2NsaXAwXzg4NV8yNDk1NylcXFwiPjxwYXRoIG9wYWNpdHk9XFxcIjAuMVxcXCIgZD1cXFwiTTI0IDQwQzE1LjE4IDQwIDggMzIuODIgOCAyNEM4IDE1LjE4IDE1LjE4IDggMjQgOEMzMi44MiA4IDQwIDE1LjE4IDQwIDI0QzQwIDMyLjgyIDMyLjgyIDQwIDI0IDQwWk0yNCAxMkMxNy4zOCAxMiAxMiAxNy4zOCAxMiAyNEMxMiAzMC42MiAxNy4zOCAzNiAyNCAzNkMzMC42MiAzNiAzNiAzMC42MiAzNiAyNEMzNiAxNy4zOCAzMC42MiAxMiAyNCAxMlpcXFwiIGZpbGw9XFxcImJsYWNrXFxcIiBmaWxsLW9wYWNpdHk9XFxcIjAuOTFcXFwiPjwvcGF0aD48cGF0aCBkPVxcXCJNMTAgMjZDOC45IDI2IDggMjUuMSA4IDI0QzggMTUuMTggMTUuMTggOCAyNCA4QzI1LjEgOCAyNiA4LjkgMjYgMTBDMjYgMTEuMSAyNS4xIDEyIDI0IDEyQzE3LjM4IDEyIDEyIDE3LjM4IDEyIDI0QzEyIDI1LjEgMTEuMSAyNiAxMCAyNlpcXFwiIGZpbGw9XFxcIiMxOUIzOTRcXFwiPjwvcGF0aD48L2c+PGRlZnM+PGNsaXBQYXRoIGlkPVxcXCJjbGlwMF84ODVfMjQ5NTdcXFwiPjxyZWN0IHdpZHRoPVxcXCIzMlxcXCIgaGVpZ2h0PVxcXCIzMlxcXCIgZmlsbD1cXFwid2hpdGVcXFwiIHRyYW5zZm9ybT1cXFwidHJhbnNsYXRlKDggOClcXFwiPjwvcmVjdD48L2NsaXBQYXRoPjwvZGVmcz48L3N2Zz5cIlxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9pbWFnZXMvbm8taW1hZ2Uuc3ZnXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvaW1hZ2VzL25vLWltYWdlLnN2ZyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCA0OCA0OFxcXCI+PGcgb3BhY2l0eT1cXFwiMC41XFxcIj48cGF0aCBkPVxcXCJNMTQgMTcuMDFDMTQgMTYuNDE2NyAxNC4xNzU5IDE1LjgzNjYgMTQuNTA1NiAxNS4zNDMzQzE0LjgzNTIgMTQuODQ5OSAxNS4zMDM4IDE0LjQ2NTQgMTUuODUxOSAxNC4yMzg0QzE2LjQwMDEgMTQuMDExMyAxNy4wMDMzIDEzLjk1MTkgMTcuNTg1MyAxNC4wNjc2QzE4LjE2NzIgMTQuMTgzNCAxOC43MDE4IDE0LjQ2OTEgMTkuMTIxMyAxNC44ODg3QzE5LjU0MDkgMTUuMzA4MiAxOS44MjY2IDE1Ljg0MjggMTkuOTQyNCAxNi40MjQ3QzIwLjA1ODEgMTcuMDA2NyAxOS45OTg3IDE3LjYwOTkgMTkuNzcxNiAxOC4xNTgxQzE5LjU0NDYgMTguNzA2MiAxOS4xNjAxIDE5LjE3NDggMTguNjY2NyAxOS41MDQ0QzE4LjE3MzQgMTkuODM0MSAxNy41OTMzIDIwLjAxIDE3IDIwLjAxQzE2LjIwNDQgMjAuMDEgMTUuNDQxMyAxOS42OTM5IDE0Ljg3ODcgMTkuMTMxM0MxNC4zMTYxIDE4LjU2ODcgMTQgMTcuODA1NiAxNCAxNy4wMVpNMjcuMDkgMjQuMTRMMjAgMzYuMDFIMzZMMjcuMDkgMjQuMTRaTTM2LjcyIDguMTRMMzUuNTcgMTAuMDFIMzZDMzYuNTMwNCAxMC4wMSAzNy4wMzkxIDEwLjIyMDcgMzcuNDE0MiAxMC41OTU4QzM3Ljc4OTMgMTAuOTcwOSAzOCAxMS40Nzk2IDM4IDEyLjAxVjM2LjAxQzM4IDM2LjU0MDQgMzcuNzg5MyAzNy4wNDkxIDM3LjQxNDIgMzcuNDI0MkMzNy4wMzkxIDM3Ljc5OTMgMzYuNTMwNCAzOC4wMSAzNiAzOC4wMUgxOC43N0wxNy41NyA0MC4wMUgzNkMzNy4wNjA5IDQwLjAxIDM4LjA3ODMgMzkuNTg4NiAzOC44Mjg0IDM4LjgzODRDMzkuNTc4NiAzOC4wODgzIDQwIDM3LjA3MDkgNDAgMzYuMDFWMTIuMDFDMzkuOTk2NiAxMS4wNzY1IDM5LjY2NjggMTAuMTczNyAzOS4wNjc4IDkuNDU3NzhDMzguNDY4OCA4Ljc0MTg4IDM3LjYzODIgOC4yNTgwMiAzNi43MiA4LjA5VjguMTRaTTM2Ljg2IDQuNUwxMi44NiA0NC41TDExLjE0IDQzLjVMMTMuMjMgNDAuMDFIMTJDMTAuOTM5MSA0MC4wMSA5LjkyMTcyIDM5LjU4ODYgOS4xNzE1NyAzOC44Mzg0QzguNDIxNDMgMzguMDg4MyA4IDM3LjA3MDkgOCAzNi4wMVYxMi4wMUM4IDEwLjk0OTEgOC40MjE0MyA5LjkzMTcyIDkuMTcxNTcgOS4xODE1N0M5LjkyMTcyIDguNDMxNDMgMTAuOTM5MSA4LjAxIDEyIDguMDFIMzIuNDNMMzUuMTQgMy41TDM2Ljg2IDQuNVpNMTQuNDMgMzguMDFMMTUuNjMgMzYuMDFIMTJMMTkgMjcuMDFMMjAuNTYgMjcuOEwzMS4yMyAxMC4wMUgxMkMxMS40Njk2IDEwLjAxIDEwLjk2MDkgMTAuMjIwNyAxMC41ODU4IDEwLjU5NThDMTAuMjEwNyAxMC45NzA5IDEwIDExLjQ3OTYgMTAgMTIuMDFWMzYuMDFDMTAgMzYuNTQwNCAxMC4yMTA3IDM3LjA0OTEgMTAuNTg1OCAzNy40MjQyQzEwLjk2MDkgMzcuNzk5MyAxMS40Njk2IDM4LjAxIDEyIDM4LjAxSDE0LjQzWlxcXCI+PC9wYXRoPjwvZz48L3N2Zz5cIlxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9pbWFnZXMvcmF0aW5nLXN0YXItMi5zdmdcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL2ltYWdlcy9yYXRpbmctc3Rhci0yLnN2ZyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSBcIjxzdmcgdmlld0JveD1cXFwiMCAwIDQ4IDQ4XFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPjxnPjxwYXRoIGQ9XFxcIk0yNCAzOS41MDU3TDExLjcyMjYgNDUuOTgzOUMxMC40MDk1IDQ2LjY3MzkgOC44NzYwNiA0NS41NjIyIDkuMTI1MjUgNDQuMDk2TDExLjQ3MzQgMzAuMzczTDEuNTQ0MTEgMjAuNjU1NkMwLjQ4MDI1NCAxOS42MjA3IDEuMDY0ODkgMTcuODA5NSAyLjUzMTI4IDE3LjU5ODZMMTYuMjU1OSAxNS41OTU3TDIyLjM5OTQgMy4xMDg5MUMyMy4wNTEyIDEuNzc2ODUgMjQuOTQ4OCAxLjc3Njg1IDI1LjYxMDIgMy4xMDg5MUwzMS43NDQxIDE1LjU5NTdMNDUuNDY4NyAxNy41OTg2QzQ2LjkzNTEgMTcuODA5NSA0Ny41MTk3IDE5LjYyMDcgNDYuNDU1OSAyMC42NTU2TDM2LjUyNjYgMzAuMzczTDM4Ljg3NDggNDQuMDk2QzM5LjEyMzkgNDUuNTYyMiAzNy41OTA1IDQ2LjY4MzUgMzYuMjc3NCA0NS45ODM5TDI0IDM5LjUwNTdaXFxcIiBmaWxsPVxcXCJub25lXFxcIiBzdHJva2Utd2lkdGg9XFxcIjJcXFwiPjwvcGF0aD48cGF0aCBkPVxcXCJNMjQuNDY2MyAzNC42MTU0TDI0IDM0LjM2OTVMMjMuNTMzNiAzNC42MTU0TDE0LjQ3ODggMzkuMzg5TDE2LjIxNTYgMjkuMjY5MUwxNi4zMDQ0IDI4Ljc1MTdMMTUuOTI4OSAyOC4zODQ4TDguNTczNTggMjEuMTk2NkwxOC43MjQ5IDE5LjcwOTRMMTkuMjQ1IDE5LjYzMzJMMTkuNDc3MiAxOS4xNjE2TDI0IDkuOTc0MTNMMjguNTIyOCAxOS4xNjE2TDI4Ljc1NSAxOS42MzMyTDI5LjI3NSAxOS43MDk0TDM5LjQyNjQgMjEuMTk2NkwzMi4wNzExIDI4LjM4NDhMMzEuNjk1NiAyOC43NTE3TDMxLjc4NDQgMjkuMjY5MUwzMy41MjExIDM5LjM4OUwyNC40NjYzIDM0LjYxNTRaXFxcIiBzdHJva2Utd2lkdGg9XFxcIjJcXFwiPjwvcGF0aD48L2c+PC9zdmc+XCJcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvaW1hZ2VzL3JhdGluZy1zdGFyLXNtYWxsLTIuc3ZnXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9pbWFnZXMvcmF0aW5nLXN0YXItc21hbGwtMi5zdmcgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCAyNCAyNFxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48cGF0aCBkPVxcXCJNMTIgMTkuMzM3M0w2LjEzMDAxIDIyLjQzNzNDNS41MDAwMSAyMi43NjczIDQuNzcwMDEgMjIuMjM3MyA0Ljg5MDAxIDIxLjUzNzNMNi4wMTAwMSAxNC45NzczTDEuMjYwMDEgMTAuMzI3M0MwLjc1MDAwNyA5LjgzNzI4IDEuMDMwMDEgOC45NjcyOCAxLjczMDAxIDguODY3MjhMOC4yOTAwMSA3LjkwNzI4TDExLjIzIDEuOTM3MjhDMTEuNTQgMS4yOTcyOCAxMi40NSAxLjI5NzI4IDEyLjc3IDEuOTM3MjhMMTUuNyA3LjkwNzI4TDIyLjI2IDguODY3MjhDMjIuOTYgOC45NjcyOCAyMy4yNCA5LjgzNzI4IDIyLjczIDEwLjMyNzNMMTcuOTggMTQuOTc3M0wxOS4xIDIxLjUzNzNDMTkuMjIgMjIuMjM3MyAxOC40OSAyMi43NzczIDE3Ljg2IDIyLjQzNzNMMTEuOTkgMTkuMzM3M0gxMlpcXFwiIGZpbGw9XFxcIm5vbmVcXFwiIHN0cm9rZS13aWR0aD1cXFwiMlxcXCI+PC9wYXRoPjxwYXRoIGQ9XFxcIk0xMiAxNS45NDcyTDguNTgwMDEgMTcuNzU3Mkw5LjIzMDAxIDEzLjkyNzJMNi40NTAwMSAxMS4yMDcyTDEwLjI5IDEwLjY0NzJMMTIgNy4xNzcyNUwxMy43MSAxMC42NDcyTDE3LjU1IDExLjIwNzJMMTQuNzcgMTMuOTI3MkwxNS40MiAxNy43NTcyTDEyIDE1Ljk0NzJaXFxcIj48L3BhdGg+PC9zdmc+XCJcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvaW1hZ2VzL3JhdGluZy1zdGFyLXNtYWxsLnN2Z1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL2ltYWdlcy9yYXRpbmctc3Rhci1zbWFsbC5zdmcgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IFwiPHN2ZyB2aWV3Qm94PVxcXCIwIDAgMjQgMjRcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCI+PGc+PHBhdGggZD1cXFwiTTEyIDE5LjMzNzNMNi4xMzAwMSAyMi40MzczQzUuNTAwMDEgMjIuNzY3MyA0Ljc3MDAxIDIyLjIzNzMgNC44OTAwMSAyMS41MzczTDYuMDEwMDEgMTQuOTc3M0wxLjI2MDAxIDEwLjMyNzNDMC43NTAwMDcgOS44MzcyOCAxLjAzMDAxIDguOTY3MjggMS43MzAwMSA4Ljg2NzI4TDguMjkwMDEgNy45MDcyOEwxMS4yMyAxLjkzNzI4QzExLjU0IDEuMjk3MjggMTIuNDUgMS4yOTcyOCAxMi43NyAxLjkzNzI4TDE1LjcgNy45MDcyOEwyMi4yNiA4Ljg2NzI4QzIyLjk2IDguOTY3MjggMjMuMjQgOS44MzcyOCAyMi43MyAxMC4zMjczTDE3Ljk4IDE0Ljk3NzNMMTkuMSAyMS41MzczQzE5LjIyIDIyLjIzNzMgMTguNDkgMjIuNzc3MyAxNy44NiAyMi40MzczTDExLjk5IDE5LjMzNzNIMTJaXFxcIiBzdHJva2Utd2lkdGg9XFxcIjJcXFwiPjwvcGF0aD48L2c+PC9zdmc+XCJcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvaW1hZ2VzL3JhdGluZy1zdGFyLnN2Z1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL2ltYWdlcy9yYXRpbmctc3Rhci5zdmcgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IFwiPHN2ZyB2aWV3Qm94PVxcXCIwIDAgNDggNDhcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCI+PGc+PHBhdGggZD1cXFwiTTI0IDM5LjUwNTdMMTEuNzIyNiA0NS45ODM5QzEwLjQwOTUgNDYuNjczOSA4Ljg3NjA2IDQ1LjU2MjIgOS4xMjUyNSA0NC4wOTZMMTEuNDczNCAzMC4zNzNMMS41NDQxMSAyMC42NTU2QzAuNDgwMjU0IDE5LjYyMDcgMS4wNjQ4OSAxNy44MDk1IDIuNTMxMjggMTcuNTk4NkwxNi4yNTU5IDE1LjU5NTdMMjIuMzk5NCAzLjEwODkxQzIzLjA1MTIgMS43NzY4NSAyNC45NDg4IDEuNzc2ODUgMjUuNjEwMiAzLjEwODkxTDMxLjc0NDEgMTUuNTk1N0w0NS40Njg3IDE3LjU5ODZDNDYuOTM1MSAxNy44MDk1IDQ3LjUxOTcgMTkuNjIwNyA0Ni40NTU5IDIwLjY1NTZMMzYuNTI2NiAzMC4zNzNMMzguODc0OCA0NC4wOTZDMzkuMTIzOSA0NS41NjIyIDM3LjU5MDUgNDYuNjgzNSAzNi4yNzc0IDQ1Ljk4MzlMMjQgMzkuNTA1N1pcXFwiIHN0cm9rZS13aWR0aD1cXFwiMlxcXCI+PC9wYXRoPjwvZz48L3N2Zz5cIlxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9pbWFnZXMvc2VhcmNoLnN2Z1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9pbWFnZXMvc2VhcmNoLnN2ZyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IFwiPHN2ZyB2aWV3Qm94PVxcXCIwIDAgMjQgMjRcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCI+PHBhdGggZD1cXFwiTTE0IDJDOS42IDIgNiA1LjYgNiAxMEM2IDExLjggNi42IDEzLjUgNy43IDE0LjlMMi4zIDIwLjNDMS45IDIwLjcgMS45IDIxLjMgMi4zIDIxLjdDMi41IDIxLjkgMi43IDIyIDMgMjJDMy4zIDIyIDMuNSAyMS45IDMuNyAyMS43TDkuMSAxNi4zQzEwLjUgMTcuNCAxMi4yIDE4IDE0IDE4QzE4LjQgMTggMjIgMTQuNCAyMiAxMEMyMiA1LjYgMTguNCAyIDE0IDJaTTE0IDE2QzEwLjcgMTYgOCAxMy4zIDggMTBDOCA2LjcgMTAuNyA0IDE0IDRDMTcuMyA0IDIwIDYuNyAyMCAxMEMyMCAxMy4zIDE3LjMgMTYgMTQgMTZaXFxcIj48L3BhdGg+PC9zdmc+XCJcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvaW1hZ2VzL3NtaWxleSBzeW5jIFxcXFwuc3ZnJFwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9pbWFnZXMvc21pbGV5IHN5bmMgbm9ucmVjdXJzaXZlIFxcLnN2ZyQgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIG1hcCA9IHtcblx0XCIuL2F2ZXJhZ2Uuc3ZnXCI6IFwiLi9zcmMvaW1hZ2VzL3NtaWxleS9hdmVyYWdlLnN2Z1wiLFxuXHRcIi4vZXhjZWxsZW50LnN2Z1wiOiBcIi4vc3JjL2ltYWdlcy9zbWlsZXkvZXhjZWxsZW50LnN2Z1wiLFxuXHRcIi4vZ29vZC5zdmdcIjogXCIuL3NyYy9pbWFnZXMvc21pbGV5L2dvb2Quc3ZnXCIsXG5cdFwiLi9ub3JtYWwuc3ZnXCI6IFwiLi9zcmMvaW1hZ2VzL3NtaWxleS9ub3JtYWwuc3ZnXCIsXG5cdFwiLi9ub3QtZ29vZC5zdmdcIjogXCIuL3NyYy9pbWFnZXMvc21pbGV5L25vdC1nb29kLnN2Z1wiLFxuXHRcIi4vcGVyZmVjdC5zdmdcIjogXCIuL3NyYy9pbWFnZXMvc21pbGV5L3BlcmZlY3Quc3ZnXCIsXG5cdFwiLi9wb29yLnN2Z1wiOiBcIi4vc3JjL2ltYWdlcy9zbWlsZXkvcG9vci5zdmdcIixcblx0XCIuL3RlcnJpYmxlLnN2Z1wiOiBcIi4vc3JjL2ltYWdlcy9zbWlsZXkvdGVycmlibGUuc3ZnXCIsXG5cdFwiLi92ZXJ5LWdvb2Quc3ZnXCI6IFwiLi9zcmMvaW1hZ2VzL3NtaWxleS92ZXJ5LWdvb2Quc3ZnXCIsXG5cdFwiLi92ZXJ5LXBvb3Iuc3ZnXCI6IFwiLi9zcmMvaW1hZ2VzL3NtaWxleS92ZXJ5LXBvb3Iuc3ZnXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4vc3JjL2ltYWdlcy9zbWlsZXkgc3luYyBcXFxcLnN2ZyRcIjtcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvaW1hZ2VzL3NtaWxleS9hdmVyYWdlLnN2Z1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL2ltYWdlcy9zbWlsZXkvYXZlcmFnZS5zdmcgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IFwiPHN2ZyB2aWV3Qm94PVxcXCIwIDAgMjQgMjRcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCI+PHBhdGggZD1cXFwiTTcuMDA1NzIgN0M2LjQ1NTcyIDcgNi4wMDU3MiA2LjU1IDYuMDA1NzIgNlYyQzYuMDA1NzIgMS40NSA2LjQ1NTcyIDEgNy4wMDU3MiAxQzcuNTU1NzIgMSA4LjAwNTcyIDEuNDUgOC4wMDU3MiAyVjZDOC4wMDU3MiA2LjU1IDcuNTU1NzIgNyA3LjAwNTcyIDdaTTE4LjAwNTcgNlYyQzE4LjAwNTcgMS40NSAxNy41NTU3IDEgMTcuMDA1NyAxQzE2LjQ1NTcgMSAxNi4wMDU3IDEuNDUgMTYuMDA1NyAyVjZDMTYuMDA1NyA2LjU1IDE2LjQ1NTcgNyAxNy4wMDU3IDdDMTcuNTU1NyA3IDE4LjAwNTcgNi41NSAxOC4wMDU3IDZaTTE5Ljk0NTcgMjEuMzNDMjAuMTI1NyAyMC44MSAxOS44NTU3IDIwLjI0IDE5LjMzNTcgMjAuMDVDMTQuNTQ1NyAxOC4zNSA5LjQ1NTcyIDE4LjM1IDQuNjY1NzIgMjAuMDVDNC4xNDU3MiAyMC4yMyAzLjg3NTcyIDIwLjgxIDQuMDU1NzIgMjEuMzNDNC4yMzU3MiAyMS44NSA0LjgwNTcyIDIyLjEyIDUuMzM1NzIgMjEuOTRDOS42OTU3MiAyMC40IDE0LjMwNTcgMjAuNCAxOC42NjU3IDIxLjk0QzE4Ljc3NTcgMjEuOTggMTguODg1NyAyMiAxOC45OTU3IDIyQzE5LjQwNTcgMjIgMTkuNzk1NyAyMS43NCAxOS45MzU3IDIxLjMzSDE5Ljk0NTdaXFxcIj48L3BhdGg+PC9zdmc+XCJcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvaW1hZ2VzL3NtaWxleS9leGNlbGxlbnQuc3ZnXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9pbWFnZXMvc21pbGV5L2V4Y2VsbGVudC5zdmcgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCAyNCAyNFxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48cGF0aCBkPVxcXCJNMTIuMDEgMjRDNi44NTc2NyAyNCAxLjE1NTA5IDIwLjk2IDAuMDE0NTc1MiAxNC4xNkMtMC4wMzU0NDc1IDEzLjg3IDAuMDQ0NTg4OCAxMy41NyAwLjIzNDY3NSAxMy4zNUMwLjQyNDc2MSAxMy4xMyAwLjcwNDg4OCAxMyAwLjk5NTAxOSAxM0gyMy4wMDVDMjMuMjk1MSAxMyAyMy41NzUyIDEzLjEzIDIzLjc2NTMgMTMuMzVDMjMuOTU1NCAxMy41NyAyNC4wMzU0IDEzLjg3IDIzLjk4NTQgMTQuMTZDMjIuODU0OSAyMC45NSAxNy4xNDIzIDI0IDExLjk5IDI0SDEyLjAxWk0yLjI1NTU5IDE1QzMuNjE2MjEgMTkuODIgOC4wMTgyIDIyIDEyLjAxIDIyQzE2LjAwMTggMjIgMjAuNDAzOCAxOS44MiAyMS43NjQ0IDE1SDIuMjU1NTlaTTguMDA4MTkgNlYyQzguMDA4MTkgMS40NSA3LjU1Nzk5IDEgNy4wMDc3NCAxQzYuNDU3NDkgMSA2LjAwNzI5IDEuNDUgNi4wMDcyOSAyVjZDNi4wMDcyOSA2LjU1IDYuNDU3NDkgNyA3LjAwNzc0IDdDNy41NTc5OSA3IDguMDA4MTkgNi41NSA4LjAwODE5IDZaTTE4LjAxMjcgNlYyQzE4LjAxMjcgMS40NSAxNy41NjI1IDEgMTcuMDEyMyAxQzE2LjQ2MiAxIDE2LjAxMTggMS40NSAxNi4wMTE4IDJWNkMxNi4wMTE4IDYuNTUgMTYuNDYyIDcgMTcuMDEyMyA3QzE3LjU2MjUgNyAxOC4wMTI3IDYuNTUgMTguMDEyNyA2WlxcXCI+PC9wYXRoPjwvc3ZnPlwiXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL2ltYWdlcy9zbWlsZXkvZ29vZC5zdmdcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9pbWFnZXMvc21pbGV5L2dvb2Quc3ZnICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSBcIjxzdmcgdmlld0JveD1cXFwiMCAwIDI0IDI0XFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPjxwYXRoIGQ9XFxcIk0xMi4wMDIyIDIzLjk5QzExLjQ1MiAyMy45OSAxMS4wMDE4IDIzLjU0MDIgMTEuMDAxOCAyMi45OTA0QzExLjAwMTggMjIuNDQwNyAxMS40NTIgMjEuOTkwOSAxMi4wMDIyIDIxLjk5MDlDMTYuMzEzNyAyMS45OTA5IDIxLjA3NTUgMTkuNDcyIDIyLjAxNTggMTMuODM0NEMyMi4xMDU4IDEzLjI5NDcgMjIuNjE2IDEyLjkyNDggMjMuMTY2MiAxMy4wMTQ4QzIzLjcwNjQgMTMuMTA0NyAyNC4wNzY1IDEzLjYyNDUgMjMuOTg2NSAxNC4xNjQzQzIyLjg1NjEgMjAuOTUxMyAxNy4xNDQgMjQgMTEuOTkyMiAyNEwxMi4wMDIyIDIzLjk5Wk04LjAwMDcyIDUuOTk3ODNWMS45OTk1N0M4LjAwMDcyIDEuNDQ5OCA3LjU1MDU2IDEgNy4wMDAzNiAxQzYuNDUwMTYgMSA2IDEuNDQ5OCA2IDEuOTk5NTdWNS45OTc4M0M2IDYuNTQ3NTkgNi40NTAxNiA2Ljk5NzM5IDcuMDAwMzYgNi45OTczOUM3LjU1MDU2IDYuOTk3MzkgOC4wMDA3MiA2LjU0NzU5IDguMDAwNzIgNS45OTc4M1pNMTguMDA0MyA1Ljk5NzgzVjEuOTk5NTdDMTguMDA0MyAxLjQ0OTggMTcuNTU0MiAxIDE3LjAwNCAxQzE2LjQ1MzggMSAxNi4wMDM2IDEuNDQ5OCAxNi4wMDM2IDEuOTk5NTdWNS45OTc4M0MxNi4wMDM2IDYuNTQ3NTkgMTYuNDUzOCA2Ljk5NzM5IDE3LjAwNCA2Ljk5NzM5QzE3LjU1NDIgNi45OTczOSAxOC4wMDQzIDYuNTQ3NTkgMTguMDA0MyA1Ljk5NzgzWlxcXCI+PC9wYXRoPjwvc3ZnPlwiXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL2ltYWdlcy9zbWlsZXkvbm9ybWFsLnN2Z1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvaW1hZ2VzL3NtaWxleS9ub3JtYWwuc3ZnICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IFwiPHN2ZyB2aWV3Qm94PVxcXCIwIDAgMjQgMjRcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCI+PHBhdGggZD1cXFwiTTcgN0M2LjQ1IDcgNiA2LjU1IDYgNlYyQzYgMS40NSA2LjQ1IDEgNyAxQzcuNTUgMSA4IDEuNDUgOCAyVjZDOCA2LjU1IDcuNTUgNyA3IDdaTTE4IDZWMkMxOCAxLjQ1IDE3LjU1IDEgMTcgMUMxNi40NSAxIDE2IDEuNDUgMTYgMlY2QzE2IDYuNTUgMTYuNDUgNyAxNyA3QzE3LjU1IDcgMTggNi41NSAxOCA2Wk0yMSAyMUMyMSAyMC40NSAyMC41NSAyMCAyMCAyMEg0QzMuNDUgMjAgMyAyMC40NSAzIDIxQzMgMjEuNTUgMy40NSAyMiA0IDIySDIwQzIwLjU1IDIyIDIxIDIxLjU1IDIxIDIxWlxcXCI+PC9wYXRoPjwvc3ZnPlwiXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL2ltYWdlcy9zbWlsZXkvbm90LWdvb2Quc3ZnXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL2ltYWdlcy9zbWlsZXkvbm90LWdvb2Quc3ZnICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCAyNCAyNFxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48cGF0aCBkPVxcXCJNNy4wNjkyNyA3QzYuNTE5MjcgNyA2LjA2OTI3IDYuNTUgNi4wNjkyNyA2VjJDNi4wNjkyNyAxLjQ1IDYuNTE5MjcgMSA3LjA2OTI3IDFDNy42MTkyNyAxIDguMDY5MjcgMS40NSA4LjA2OTI3IDJWNkM4LjA2OTI3IDYuNTUgNy42MTkyNyA3IDcuMDY5MjcgN1pNMTguMDY5MyA2VjJDMTguMDY5MyAxLjQ1IDE3LjYxOTMgMSAxNy4wNjkzIDFDMTYuNTE5MyAxIDE2LjA2OTMgMS40NSAxNi4wNjkzIDJWNkMxNi4wNjkzIDYuNTUgMTYuNTE5MyA3IDE3LjA2OTMgN0MxNy42MTkzIDcgMTguMDY5MyA2LjU1IDE4LjA2OTMgNlpNMjIuNTY5MyAyMS45QzIzLjA2OTMgMjEuNjYgMjMuMjc5MyAyMS4wNyAyMy4wMzkzIDIwLjU3QzIxLjEwOTMgMTYuNTIgMTYuOTA5MyAxNCAxMi4wNjkzIDE0QzcuMjI5MjcgMTQgMy4wMjkyNyAxNi41MiAxLjA5OTI3IDIwLjU3QzAuODU5MjczIDIxLjA3IDEuMDY5MjcgMjEuNjcgMS41NjkyNyAyMS45QzIuMDY5MjcgMjIuMTQgMi42NTkyNyAyMS45MyAyLjg5OTI3IDIxLjQzQzQuNDk5MjcgMTguMDggOC4wMDkyNyAxNiAxMi4wNTkzIDE2QzE2LjEwOTMgMTYgMTkuNjI5MyAxOC4wOCAyMS4yMTkzIDIxLjQzQzIxLjM4OTMgMjEuNzkgMjEuNzQ5MyAyMiAyMi4xMTkzIDIyQzIyLjI1OTMgMjIgMjIuNDA5MyAyMS45NyAyMi41NDkzIDIxLjlIMjIuNTY5M1pcXFwiPjwvcGF0aD48L3N2Zz5cIlxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9pbWFnZXMvc21pbGV5L3BlcmZlY3Quc3ZnXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvaW1hZ2VzL3NtaWxleS9wZXJmZWN0LnN2ZyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCAyNCAyNFxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48cGF0aCBkPVxcXCJNMTIuMDEgMjNDNi44NTcyMSAyMyAxLjE1NDEyIDE5Ljk2MjEgMC4wMTM0OTg3IDEzLjE2NjlDLTAuMDc2NTUwMSAxMi42MjcyIDAuMjkzNjUxIDEyLjEwNzYgMC44MzM5NDQgMTIuMDE3N0MxLjM4NDI0IDExLjkyNzcgMS44OTQ1MiAxMi4yOTc1IDEuOTg0NTcgMTIuODM3MUMyLjkyNTA4IDE4LjQ3MzIgNy42OTc2NyAyMC45OTE0IDEyIDIwLjk5MTRDMTYuMzAyMyAyMC45OTE0IDIxLjA3NDkgMTguNDczMiAyMi4wMTU0IDEyLjgzNzFDMjIuMTA1NSAxMi4yOTc1IDIyLjYxNTggMTEuOTI3NyAyMy4xNjYxIDEyLjAxNzdDMjMuNzA2MyAxMi4xMDc2IDI0LjA3NjUgMTIuNjI3MiAyMy45ODY1IDEzLjE2NjlDMjIuODU1OSAxOS45NTIxIDE3LjE0MjggMjMgMTEuOTkgMjNIMTIuMDFaTTIxLjE2NSA2LjE1MTc3QzIyLjMwNTYgNS4wMTI1NyAyMi4zMDU2IDMuMTYzODYgMjEuMTY1IDIuMDI0NjVMMjEuMDA0OSAxLjg1NDc3QzE5LjkxNDMgMC43NjU1MzMgMTguMTYzMyAwLjcyNTU2MSAxNy4wMjI3IDEuNzE0ODdDMTUuODgyMSAwLjcxNTU2OCAxNC4xMzEyIDAuNzY1NTMzIDEzLjA0MDYgMS44NTQ3N0wxMi44NzA1IDIuMDE0NjZDMTEuNzI5OSAzLjE1Mzg2IDExLjcyOTkgNS4wMDI1NyAxMi44NzA1IDYuMTQxNzhMMTcuMDIyNyAxMC4yODg5TDIxLjE3NSA2LjE0MTc4TDIxLjE2NSA2LjE1MTc3Wk0xNS43NDIgMy4yNzM3OEwxNy4wMTI3IDQuNTQyODlMMTguMjgzNCAzLjI3Mzc4QzE4LjY0MzYgMi45MTQwMyAxOS4yMjM5IDIuOTE0MDMgMTkuNTg0MSAzLjI3Mzc4TDE5Ljc0NDIgMy40MzM2N0MyMC4xMDQ0IDMuNzkzNDIgMjAuMTA0NCA0LjM3MzAxIDE5Ljc0NDIgNC43MzI3NkwxNy4wMTI3IDcuNDYwODZMMTQuMjgxMiA0LjczMjc2QzEzLjkyMSA0LjM3MzAxIDEzLjkyMSAzLjc5MzQyIDE0LjI4MTIgMy40MzM2N0wxNC40NDEzIDMuMjczNzhDMTQuNjIxNCAzLjA5MzkxIDE0Ljg1MTUgMy4wMDM5NyAxNS4wOTE3IDMuMDAzOTdDMTUuMzMxOCAzLjAwMzk3IDE1LjU2MTkgMy4wOTM5MSAxNS43NDIgMy4yNzM3OFpNMTEuMTU5NSA2LjE1MTc3QzEyLjMwMDIgNS4wMTI1NyAxMi4zMDAyIDMuMTYzODYgMTEuMTU5NSAyLjAyNDY1TDEwLjk5OTUgMS44NTQ3N0M5LjkwODg2IDAuNzY1NTMzIDguMTU3OTIgMC43MjU1NjEgNy4wMTczIDEuNzE0ODdDNS44NzY2OCAwLjcxNTU2OCA0LjEyNTczIDAuNzY1NTMzIDMuMDM1MTQgMS44NTQ3N0wyLjg2NTA1IDIuMDE0NjZDMS43MjQ0MyAzLjE1Mzg2IDEuNzI0NDMgNS4wMDI1NyAyLjg2NTA1IDYuMTQxNzhMNy4wMTczIDEwLjI4ODlMMTEuMTY5NSA2LjE0MTc4TDExLjE1OTUgNi4xNTE3N1pNNS43MzY2IDMuMjczNzhMNy4wMDcyOSA0LjU0Mjg5TDguMjc3OTggMy4yNzM3OEM4LjYzODE4IDIuOTE0MDMgOS4yMTg0OSAyLjkxNDAzIDkuNTc4NjkgMy4yNzM3OEw5LjczODc3IDMuNDMzNjdDMTAuMDk5IDMuNzkzNDIgMTAuMDk5IDQuMzczMDEgOS43Mzg3NyA0LjczMjc2TDcuMDA3MjkgNy40NjA4Nkw0LjI3NTgxIDQuNzMyNzZDMy45MTU2MiA0LjM3MzAxIDMuOTE1NjIgMy43OTM0MiA0LjI3NTgxIDMuNDMzNjdMNC40MzU5IDMuMjczNzhDNC42MTU5OSAzLjA5MzkxIDQuODQ2MTIgMy4wMDM5NyA1LjA4NjI1IDMuMDAzOTdDNS4zMjYzOCAzLjAwMzk3IDUuNTU2NSAzLjA5MzkxIDUuNzM2NiAzLjI3Mzc4WlxcXCI+PC9wYXRoPjwvc3ZnPlwiXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL2ltYWdlcy9zbWlsZXkvcG9vci5zdmdcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9pbWFnZXMvc21pbGV5L3Bvb3Iuc3ZnICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSBcIjxzdmcgdmlld0JveD1cXFwiMCAwIDI0IDI0XFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPjxwYXRoIGQ9XFxcIk03LjAxOTE1IDdDNi40Njk2MSA3IDYuMDE5OTggNi41NSA2LjAxOTk4IDZWMkM2LjAxOTk4IDEuNDUgNi40Njk2MSAxIDcuMDE5MTUgMUM3LjU2ODY5IDEgOC4wMTgzMiAxLjQ1IDguMDE4MzIgMlY2QzguMDE4MzIgNi41NSA3LjU2ODY5IDcgNy4wMTkxNSA3Wk0xOC4wMSA2VjJDMTguMDEgMS40NSAxNy41NjA0IDEgMTcuMDEwOCAxQzE2LjQ2MTMgMSAxNi4wMTE3IDEuNDUgMTYuMDExNyAyVjZDMTYuMDExNyA2LjU1IDE2LjQ2MTMgNyAxNy4wMTA4IDdDMTcuNTYwNCA3IDE4LjAxIDYuNTUgMTguMDEgNlpNMTYuNDIxMyAyMS41OEwxOC4wMSAxOS45OUwxOS4yOTg5IDIxLjI4QzE5LjY4ODYgMjEuNjcgMjAuMzE4MSAyMS42NyAyMC43MDc3IDIxLjI4QzIxLjA5NzQgMjAuODkgMjEuMDk3NCAyMC4yNiAyMC43MDc3IDE5Ljg3TDE5LjQxODggMTguNThDMTguNjM5NSAxNy44IDE3LjM3MDUgMTcuOCAxNi41OTEyIDE4LjU4TDE1LjAwMjUgMjAuMTdMMTMuNDEzOCAxOC41OEMxMi42MzQ1IDE3LjggMTEuMzY1NSAxNy44IDEwLjU4NjIgMTguNThMOC45OTc1IDIwLjE3TDcuNDA4ODMgMTguNThDNi42Mjk0OCAxNy44IDUuMzYwNTMgMTcuOCA0LjU4MTE4IDE4LjU4TDMuMjkyMjYgMTkuODdDMi45MDI1OCAyMC4yNiAyLjkwMjU4IDIwLjg5IDMuMjkyMjYgMjEuMjhDMy42ODE5MyAyMS42NyA0LjMxMTQxIDIxLjY3IDQuNzAxMDggMjEuMjhMNS45OTAwMSAxOS45OUw3LjU3ODY4IDIxLjU4QzguMzU4MDMgMjIuMzYgOS42MjY5OCAyMi4zNiAxMC40MDYzIDIxLjU4TDExLjk5NSAxOS45OUwxMy41ODM3IDIxLjU4QzEzLjk3MzQgMjEuOTcgMTQuNDgyOSAyMi4xNiAxNC45OTI1IDIyLjE2QzE1LjUwMjEgMjIuMTYgMTYuMDExNyAyMS45NyAxNi40MDEzIDIxLjU4SDE2LjQyMTNaXFxcIj48L3BhdGg+PC9zdmc+XCJcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvaW1hZ2VzL3NtaWxleS90ZXJyaWJsZS5zdmdcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvaW1hZ2VzL3NtaWxleS90ZXJyaWJsZS5zdmcgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSBcIjxzdmcgdmlld0JveD1cXFwiMCAwIDI0IDI0XFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPjxwYXRoIGQ9XFxcIk00IDQuOTkzOEM0IDQuNDQzNjIgNC40NSAzLjk5MzQ4IDUgMy45OTM0OEg2LjU5TDUuMyAyLjcwMzA2QzQuOTEgMi4zMTI5MyA0LjkxIDEuNjgyNzIgNS4zIDEuMjkyNkM1LjY5IDAuOTAyNDY4IDYuMzIgMC45MDI0NjggNi43MSAxLjI5MjZMOS43MSA0LjI5MzU3QzkuOCA0LjM4MzYgOS44OCA0LjQ5MzY0IDkuOTMgNC42MjM2OEMxMC4wMyA0Ljg2Mzc2IDEwLjAzIDUuMTQzODUgOS45MyA1LjM4MzkzQzkuODggNS41MDM5NyA5LjgxIDUuNjE0IDkuNzEgNS43MTQwNEw2LjcxIDguNzE1MDFDNi41MSA4LjkxNTA4IDYuMjYgOS4wMDUxMSA2IDkuMDA1MTFDNS43NCA5LjAwNTExIDUuNDkgOC45MDUwOCA1LjI5IDguNzE1MDFDNC45IDguMzI0ODkgNC45IDcuNjk0NjggNS4yOSA3LjMwNDU2TDYuNTggNi4wMTQxM0g0Ljk5QzQuNDQgNi4wMTQxMyAzLjk5IDUuNTYzOTkgMy45OSA1LjAxMzgxTDQgNC45OTM4Wk0xNC4wOCA1LjM3MzkzQzE0LjEzIDUuNDkzOTcgMTQuMiA1LjYwNCAxNC4zIDUuNzA0MDNMMTcuMyA4LjcwNTAxQzE3LjUgOC45MDUwOCAxNy43NSA4Ljk5NTExIDE4LjAxIDguOTk1MTFDMTguMjcgOC45OTUxMSAxOC41MiA4Ljg5NTA3IDE4LjcyIDguNzA1MDFDMTkuMTEgOC4zMTQ4OCAxOS4xMSA3LjY4NDY4IDE4LjcyIDcuMjk0NTVMMTcuNDMgNi4wMDQxM0gxOS4wMkMxOS41NyA2LjAwNDEzIDIwLjAyIDUuNTUzOTkgMjAuMDIgNS4wMDM4MUMyMC4wMiA0LjQ1MzYzIDE5LjU3IDQuMDAzNDggMTkuMDIgNC4wMDM0OEgxNy40M0wxOC43MiAyLjcxMzA2QzE5LjExIDIuMzIyOTMgMTkuMTEgMS42OTI3MyAxOC43MiAxLjMwMjZDMTguMzMgMC45MTI0NzEgMTcuNyAwLjkxMjQ3MSAxNy4zMSAxLjMwMjZMMTQuMzEgNC4zMDM1OEMxNC4yMiA0LjM5MzYxIDE0LjE0IDQuNTAzNjQgMTQuMDkgNC42MzM2OEMxMy45OSA0Ljg3Mzc2IDEzLjk5IDUuMTUzODUgMTQuMDkgNS4zOTM5M0wxNC4wOCA1LjM3MzkzWk0yMiAxNC45OTcxVjIwLjk5OUMyMiAyMi42NDk2IDIwLjY1IDI0IDE5IDI0SDVDMy4zNSAyNCAyIDIyLjY0OTYgMiAyMC45OTlWMTQuOTk3MUMyIDEzLjM0NjUgMy4zNSAxMS45OTYxIDUgMTEuOTk2MUgxOUMyMC42NSAxMS45OTYxIDIyIDEzLjM0NjUgMjIgMTQuOTk3MVpNMTkgMTMuOTk2N0gxNlYxNi45OTc3SDIwVjE0Ljk5NzFDMjAgMTQuNDQ2OSAxOS41NSAxMy45OTY3IDE5IDEzLjk5NjdaTTE0IDE2Ljk5NzdWMTMuOTk2N0gxMFYxNi45OTc3SDE0Wk0xMCAxOC45OTg0VjIxLjk5OTNIMTRWMTguOTk4NEgxMFpNNCAxNC45OTcxVjE2Ljk5NzdIOFYxMy45OTY3SDVDNC40NSAxMy45OTY3IDQgMTQuNDQ2OSA0IDE0Ljk5NzFaTTUgMjEuOTk5M0g4VjE4Ljk5ODRINFYyMC45OTlDNCAyMS41NDkyIDQuNDUgMjEuOTk5MyA1IDIxLjk5OTNaTTIwIDIwLjk5OVYxOC45OTg0SDE2VjIxLjk5OTNIMTlDMTkuNTUgMjEuOTk5MyAyMCAyMS41NDkyIDIwIDIwLjk5OVpcXFwiPjwvcGF0aD48L3N2Zz5cIlxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9pbWFnZXMvc21pbGV5L3ZlcnktZ29vZC5zdmdcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL2ltYWdlcy9zbWlsZXkvdmVyeS1nb29kLnN2ZyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSBcIjxzdmcgdmlld0JveD1cXFwiMCAwIDI0IDI0XFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPjxwYXRoIGQ9XFxcIk0xMi4wMSAyNEM2Ljg1NzIxIDI0IDEuMTU0MTIgMjAuOTYgMC4wMTM0OTg3IDE0LjE2Qy0wLjA3NjU1MDEgMTMuNjIgMC4yOTM2NTEgMTMuMSAwLjgzMzk0NCAxMy4wMUMxLjM4NDI0IDEyLjkyIDEuODk0NTIgMTMuMjkgMS45ODQ1NyAxMy44M0MyLjkyNTA4IDE5LjQ3IDcuNjk3NjcgMjEuOTkgMTIgMjEuOTlDMTYuMzAyMyAyMS45OSAyMS4wNzQ5IDE5LjQ3IDIyLjAxNTQgMTMuODNDMjIuMTA1NSAxMy4yOSAyMi42MTU4IDEyLjkyIDIzLjE2NjEgMTMuMDFDMjMuNzA2MyAxMy4xIDI0LjA3NjUgMTMuNjIgMjMuOTg2NSAxNC4xNkMyMi44NTU5IDIwLjk1IDE3LjE0MjggMjQgMTEuOTkgMjRIMTIuMDFaTTguMDA3ODMgNlYyQzguMDA3ODMgMS40NSA3LjU1NzU5IDEgNy4wMDcyOSAxQzYuNDU2OTkgMSA2LjAwNjc1IDEuNDUgNi4wMDY3NSAyVjZDNi4wMDY3NSA2LjU1IDYuNDU2OTkgNyA3LjAwNzI5IDdDNy41NTc1OSA3IDguMDA3ODMgNi41NSA4LjAwNzgzIDZaTTE4LjAxMzMgNlYyQzE4LjAxMzMgMS40NSAxNy41NjMgMSAxNy4wMTI3IDFDMTYuNDYyNCAxIDE2LjAxMjIgMS40NSAxNi4wMTIyIDJWNkMxNi4wMTIyIDYuNTUgMTYuNDYyNCA3IDE3LjAxMjcgN0MxNy41NjMgNyAxOC4wMTMzIDYuNTUgMTguMDEzMyA2WlxcXCI+PC9wYXRoPjwvc3ZnPlwiXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL2ltYWdlcy9zbWlsZXkvdmVyeS1wb29yLnN2Z1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvaW1hZ2VzL3NtaWxleS92ZXJ5LXBvb3Iuc3ZnICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IFwiPHN2ZyB2aWV3Qm94PVxcXCIwIDAgMjQgMjRcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCI+PGcgY2xpcC1wYXRoPVxcXCJ1cmwoI2NsaXAwXzE1ODk0XzE0MDEwMylcXFwiPjxwYXRoIGQ9XFxcIk00Ljg4MjkxIDQuNTA5OTlDNC40NzI5MSA0LjUwOTk5IDQuMDgyOTEgNC4yNDk5OSAzLjk0MjkxIDMuODM5OTlDMy43NjI5MSAzLjMxOTk5IDQuMDMyOTEgMi43NDk5OSA0LjU1MjkxIDIuNTY5OTlMOC4zMjI5MSAxLjI0OTk5QzguODQyOTEgMS4wNTk5OSA5LjQxMjkxIDEuMzM5OTkgOS41OTI5MSAxLjg1OTk5QzkuNzcyOTEgMi4zNzk5OSA5LjUwMjkxIDIuOTQ5OTkgOC45ODI5MSAzLjEyOTk5TDUuMjAyOTEgNC40NDk5OUM1LjA5MjkxIDQuNDg5OTkgNC45ODI5MSA0LjUwOTk5IDQuODcyOTEgNC41MDk5OUg0Ljg4MjkxWk0xOS44MTI5IDMuODg5OTlDMjAuMDIyOSAzLjM3OTk5IDE5Ljc3MjkgMi43ODk5OSAxOS4yNjI5IDIuNTg5OTlMMTUuNTUyOSAxLjA2OTk5QzE1LjA0MjkgMC44NTk5OTIgMTQuNDUyOSAxLjEwOTk5IDE0LjI1MjkgMS42MTk5OUMxNC4wNDI5IDIuMTI5OTkgMTQuMjkyOSAyLjcxOTk5IDE0LjgwMjkgMi45MTk5OUwxOC41MDI5IDQuNDI5OTlDMTguNjIyOSA0LjQ3OTk5IDE4Ljc1MjkgNC40OTk5OSAxOC44ODI5IDQuNDk5OTlDMTkuMjcyOSA0LjQ5OTk5IDE5LjY1MjkgNC4yNjk5OSAxOS44MTI5IDMuODc5OTlWMy44ODk5OVpNMy41MDI5MSA1Ljk5OTk5QzIuNjQyOTEgNi4zNjk5OSAxLjc5MjkxIDYuODc5OTkgMS4wMDI5MSA3LjQ3OTk5QzAuNzkyOTEgNy42Mzk5OSAwLjY0MjkxIDcuODY5OTkgMC41OTI5MSA4LjEzOTk5QzAuNDgyOTEgOC43Mjk5OSAwLjg3MjkxIDkuMjg5OTkgMS40NTI5MSA5LjM5OTk5QzIuMDQyOTEgOS41MDk5OSAyLjYwMjkxIDkuMTE5OTkgMi43MTI5MSA4LjUzOTk5QzIuODcyOTEgNy42ODk5OSAzLjEyMjkxIDYuODI5OTkgMy41MDI5MSA1Ljk4OTk5VjUuOTk5OTlaTTIxLjA0MjkgOC41NDk5OUMyMS42MDI5IDEwLjQ4IDI0LjI0MjkgOC44Mzk5OSAyMi43NTI5IDcuNDc5OTlDMjEuOTYyOSA2Ljg3OTk5IDIxLjExMjkgNi4zNjk5OSAyMC4yNTI5IDUuOTk5OTlDMjAuNjMyOSA2LjgzOTk5IDIwLjg4MjkgNy42OTk5OSAyMS4wNDI5IDguNTQ5OTlaTTIxLjU3MjkgMTMuMkMyMS4yNTI5IDE0LjIgMjIuNTQyOSAxNS4wOSAyMy4zNjI5IDE0LjM5QzIzLjg1MjkgMTQgMjMuOTIyOSAxMy4yOSAyMy41NDI5IDEyLjgxQzIxLjc0MjkgMTAuNjcgMjIuMTMyOSAxMC41NSAyMS41ODI5IDEzLjJIMjEuNTcyOVpNMS43NTI5MSAxMUMxLjIyMjkxIDExLjc5IC0wLjE0NzA5IDEyLjY0IDAuMDEyOTEwMiAxMy43NUMwLjE1MjkxIDE0LjM2IDAuNzUyOTEgMTQuNzQgMS4zNTI5MSAxNC42QzIuOTgyOTEgMTQuMSAxLjgwMjkxIDEyLjIyIDEuNzUyOTEgMTFaTTE5Ljg4MjkgMTdDMTkuODgyOSAxMy4xNCAxNi4yOTI5IDkuOTk5OTkgMTEuODgyOSA5Ljk5OTk5QzcuNDcyOTEgOS45OTk5OSAzLjg4MjkxIDEzLjE0IDMuODgyOTEgMTdDMy44ODI5MSAyMC44NiA3LjQ3MjkxIDI0IDExLjg4MjkgMjRDMTYuMjkyOSAyNCAxOS44ODI5IDIwLjg2IDE5Ljg4MjkgMTdaTTE3Ljg4MjkgMTdDMTcuODgyOSAxOS43NiAxNS4xOTI5IDIyIDExLjg4MjkgMjJDOC41NzI5MSAyMiA1Ljg4MjkxIDE5Ljc2IDUuODgyOTEgMTdDNS44ODI5MSAxNC4yNCA4LjU3MjkxIDEyIDExLjg4MjkgMTJDMTUuMTkyOSAxMiAxNy44ODI5IDE0LjI0IDE3Ljg4MjkgMTdaXFxcIj48L3BhdGg+PC9nPjxkZWZzPjxjbGlwUGF0aCBpZD1cXFwiY2xpcDBfMTU4OTRfMTQwMTAzXFxcIj48cmVjdCB3aWR0aD1cXFwiMjRcXFwiIGhlaWdodD1cXFwiMjRcXFwiIGZpbGw9XFxcIndoaXRlXFxcIj48L3JlY3Q+PC9jbGlwUGF0aD48L2RlZnM+PC9zdmc+XCJcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvaXRlbXZhbHVlLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9pdGVtdmFsdWUudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEl0ZW1WYWx1ZSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJJdGVtVmFsdWVcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBJdGVtVmFsdWU7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9sb2NhbGl6YWJsZXN0cmluZ19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9sb2NhbGl6YWJsZXN0cmluZyAqLyBcIi4vc3JjL2xvY2FsaXphYmxlc3RyaW5nLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2pzb25vYmplY3QgKi8gXCIuL3NyYy9qc29ub2JqZWN0LnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9oZWxwZXJzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2hlbHBlcnMgKi8gXCIuL3NyYy9oZWxwZXJzLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9jb25kaXRpb25zX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2NvbmRpdGlvbnMgKi8gXCIuL3NyYy9jb25kaXRpb25zLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9iYXNlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2Jhc2UgKi8gXCIuL3NyYy9iYXNlLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9zZXR0aW5ncyAqLyBcIi4vc3JjL3NldHRpbmdzLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9hY3Rpb25zX2FjdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9hY3Rpb25zL2FjdGlvbiAqLyBcIi4vc3JjL2FjdGlvbnMvYWN0aW9uLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9xdWVzdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9xdWVzdGlvbiAqLyBcIi4vc3JjL3F1ZXN0aW9uLnRzXCIpO1xudmFyIF9fZXh0ZW5kcyA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG52YXIgX19kZWNvcmF0ZSA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xuXG5cblxuXG5cblxuXG5cbi8qKlxuICogQXJyYXkgb2YgSXRlbVZhbHVlIGlzIHVzZWQgaW4gY2hlY2tib3gsIGRyb3Bkb3duIGFuZCByYWRpb2dyb3VwIGNob2ljZXMsIG1hdHJpeCBjb2x1bW5zIGFuZCByb3dzLlxuICogSXQgaGFzIHR3byBtYWluIHByb3BlcnRpZXM6IHZhbHVlIGFuZCB0ZXh0LiBJZiB0ZXh0IGlzIGVtcHR5LCB2YWx1ZSBpcyB1c2VkIGZvciBkaXNwbGF5aW5nLlxuICogVGhlIHRleHQgcHJvcGVydHkgaXMgbG9jYWxpemFibGUgYW5kIHN1cHBvcnQgbWFya2Rvd24uXG4gKi9cbnZhciBJdGVtVmFsdWUgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEl0ZW1WYWx1ZSwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBJdGVtVmFsdWUodmFsdWUsIHRleHQsIHR5cGVOYW1lKSB7XG4gICAgICAgIGlmICh0ZXh0ID09PSB2b2lkIDApIHsgdGV4dCA9IG51bGw7IH1cbiAgICAgICAgaWYgKHR5cGVOYW1lID09PSB2b2lkIDApIHsgdHlwZU5hbWUgPSBcIml0ZW12YWx1ZVwiOyB9XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLnR5cGVOYW1lID0gdHlwZU5hbWU7XG4gICAgICAgIF90aGlzLm93bmVyUHJvcGVydHlOYW1lID0gXCJcIjtcbiAgICAgICAgX3RoaXMubG9jVGV4dFZhbHVlID0gbmV3IF9sb2NhbGl6YWJsZXN0cmluZ19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiTG9jYWxpemFibGVTdHJpbmdcIl0oX3RoaXMsIHRydWUsIFwidGV4dFwiKTtcbiAgICAgICAgX3RoaXMubG9jVGV4dFZhbHVlLm9uU3RyQ2hhbmdlZCA9IGZ1bmN0aW9uIChvbGRWYWx1ZSwgbmV3VmFsdWUpIHtcbiAgICAgICAgICAgIGlmIChuZXdWYWx1ZSA9PSBfdGhpcy52YWx1ZSkge1xuICAgICAgICAgICAgICAgIG5ld1ZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX3RoaXMucHJvcGVydHlWYWx1ZUNoYW5nZWQoXCJ0ZXh0XCIsIG9sZFZhbHVlLCBuZXdWYWx1ZSk7XG4gICAgICAgIH07XG4gICAgICAgIF90aGlzLmxvY1RleHRWYWx1ZS5vbkdldFRleHRDYWxsYmFjayA9IGZ1bmN0aW9uICh0eHQpIHtcbiAgICAgICAgICAgIHJldHVybiB0eHRcbiAgICAgICAgICAgICAgICA/IHR4dFxuICAgICAgICAgICAgICAgIDogIV9oZWxwZXJzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJIZWxwZXJzXCJdLmlzVmFsdWVFbXB0eShfdGhpcy52YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgPyBfdGhpcy52YWx1ZS50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRleHQpXG4gICAgICAgICAgICBfdGhpcy5sb2NUZXh0LnRleHQgPSB0ZXh0O1xuICAgICAgICBpZiAoISF2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIF90aGlzLnNldERhdGEodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgX3RoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoX3RoaXMuZ2V0VHlwZSgpICE9IFwiaXRlbXZhbHVlXCIpIHtcbiAgICAgICAgICAgIF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJDdXN0b21Qcm9wZXJ0aWVzQ29sbGVjdGlvblwiXS5jcmVhdGVQcm9wZXJ0aWVzKF90aGlzKTtcbiAgICAgICAgfVxuICAgICAgICBfdGhpcy5kYXRhID0gX3RoaXM7XG4gICAgICAgIF90aGlzLm9uQ3JlYXRpbmcoKTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBJdGVtVmFsdWUucHJvdG90eXBlLmdldE1hcmtkb3duSHRtbCA9IGZ1bmN0aW9uICh0ZXh0LCBuYW1lKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMubG9jT3duZXIgPyB0aGlzLmxvY093bmVyLmdldE1hcmtkb3duSHRtbCh0ZXh0LCBuYW1lKSA6IHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIEl0ZW1WYWx1ZS5wcm90b3R5cGUuZ2V0UmVuZGVyZXIgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICByZXR1cm4gISF0aGlzLmxvY093bmVyID8gdGhpcy5sb2NPd25lci5nZXRSZW5kZXJlcihuYW1lKSA6IG51bGw7XG4gICAgfTtcbiAgICBJdGVtVmFsdWUucHJvdG90eXBlLmdldFJlbmRlcmVyQ29udGV4dCA9IGZ1bmN0aW9uIChsb2NTdHIpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5sb2NPd25lciA/IHRoaXMubG9jT3duZXIuZ2V0UmVuZGVyZXJDb250ZXh0KGxvY1N0cikgOiBsb2NTdHI7XG4gICAgfTtcbiAgICBJdGVtVmFsdWUucHJvdG90eXBlLmdldFByb2Nlc3NlZFRleHQgPSBmdW5jdGlvbiAodGV4dCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NPd25lciA/IHRoaXMubG9jT3duZXIuZ2V0UHJvY2Vzc2VkVGV4dCh0ZXh0KSA6IHRleHQ7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSXRlbVZhbHVlLCBcIlNlcGFyYXRvclwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIF9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fW1wic2V0dGluZ3NcIl0uaXRlbVZhbHVlU2VwYXJhdG9yO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIF9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fW1wic2V0dGluZ3NcIl0uaXRlbVZhbHVlU2VwYXJhdG9yID0gdmFsO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgLyoqXG4gICAgICogUmVzZXRzIHRoZSBpbnB1dCBhcnJheSBhbmQgZmlsbHMgaXQgd2l0aCB2YWx1ZXMgZnJvbSB0aGUgdmFsdWVzIGFycmF5XG4gICAgICovXG4gICAgSXRlbVZhbHVlLnNldERhdGEgPSBmdW5jdGlvbiAoaXRlbXMsIHZhbHVlcywgdHlwZSkge1xuICAgICAgICBpdGVtcy5sZW5ndGggPSAwO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIHZhbHVlID0gdmFsdWVzW2ldO1xuICAgICAgICAgICAgdmFyIGl0ZW1UeXBlID0gISF2YWx1ZSAmJiB0eXBlb2YgdmFsdWUuZ2V0VHlwZSA9PT0gXCJmdW5jdGlvblwiID8gdmFsdWUuZ2V0VHlwZSgpIDogKHR5cGUgIT09IG51bGwgJiYgdHlwZSAhPT0gdm9pZCAwID8gdHlwZSA6IFwiaXRlbXZhbHVlXCIpO1xuICAgICAgICAgICAgdmFyIGl0ZW0gPSBfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiU2VyaWFsaXplclwiXS5jcmVhdGVDbGFzcyhpdGVtVHlwZSk7XG4gICAgICAgICAgICBpdGVtLnNldERhdGEodmFsdWUpO1xuICAgICAgICAgICAgaWYgKCEhdmFsdWUub3JpZ2luYWxJdGVtKSB7XG4gICAgICAgICAgICAgICAgaXRlbS5vcmlnaW5hbEl0ZW0gPSB2YWx1ZS5vcmlnaW5hbEl0ZW07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBJdGVtVmFsdWUuZ2V0RGF0YSA9IGZ1bmN0aW9uIChpdGVtcykge1xuICAgICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKGl0ZW1zW2ldLmdldERhdGEoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICAgIEl0ZW1WYWx1ZS5nZXRJdGVtQnlWYWx1ZSA9IGZ1bmN0aW9uIChpdGVtcywgdmFsKSB7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShpdGVtcykpXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgdmFyIHZhbElzRW1wdHkgPSBfaGVscGVyc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiSGVscGVyc1wiXS5pc1ZhbHVlRW1wdHkodmFsKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHZhbElzRW1wdHkgJiYgX2hlbHBlcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIkhlbHBlcnNcIl0uaXNWYWx1ZUVtcHR5KGl0ZW1zW2ldLnZhbHVlKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbXNbaV07XG4gICAgICAgICAgICBpZiAoX2hlbHBlcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIkhlbHBlcnNcIl0uaXNUd29WYWx1ZUVxdWFscyhpdGVtc1tpXS52YWx1ZSwgdmFsLCBmYWxzZSwgdHJ1ZSwgZmFsc2UpKVxuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtc1tpXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICAgIEl0ZW1WYWx1ZS5nZXRUZXh0T3JIdG1sQnlWYWx1ZSA9IGZ1bmN0aW9uIChpdGVtcywgdmFsKSB7XG4gICAgICAgIHZhciBpdGVtID0gSXRlbVZhbHVlLmdldEl0ZW1CeVZhbHVlKGl0ZW1zLCB2YWwpO1xuICAgICAgICByZXR1cm4gaXRlbSAhPT0gbnVsbCA/IGl0ZW0ubG9jVGV4dC50ZXh0T3JIdG1sIDogXCJcIjtcbiAgICB9O1xuICAgIEl0ZW1WYWx1ZS5sb2NTdHJzQ2hhbmdlZCA9IGZ1bmN0aW9uIChpdGVtcykge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpdGVtc1tpXS5sb2NTdHJzQ2hhbmdlZCgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBJdGVtVmFsdWUucnVuQ29uZGl0aW9uc0Zvckl0ZW1zID0gZnVuY3Rpb24gKGl0ZW1zLCBmaWx0ZXJlZEl0ZW1zLCBydW5uZXIsIHZhbHVlcywgcHJvcGVydGllcywgdXNlSXRlbUV4cHJlc3Npb24sIG9uSXRlbUNhbGxCYWNrKSB7XG4gICAgICAgIGlmICh1c2VJdGVtRXhwcmVzc2lvbiA9PT0gdm9pZCAwKSB7IHVzZUl0ZW1FeHByZXNzaW9uID0gdHJ1ZTsgfVxuICAgICAgICByZXR1cm4gSXRlbVZhbHVlLnJ1bkNvbmRpdGlvbnNGb3JJdGVtc0NvcmUoaXRlbXMsIGZpbHRlcmVkSXRlbXMsIHJ1bm5lciwgdmFsdWVzLCBwcm9wZXJ0aWVzLCB0cnVlLCB1c2VJdGVtRXhwcmVzc2lvbiwgb25JdGVtQ2FsbEJhY2spO1xuICAgIH07XG4gICAgSXRlbVZhbHVlLnJ1bkVuYWJsZWRDb25kaXRpb25zRm9ySXRlbXMgPSBmdW5jdGlvbiAoaXRlbXMsIHJ1bm5lciwgdmFsdWVzLCBwcm9wZXJ0aWVzLCBvbkl0ZW1DYWxsQmFjaykge1xuICAgICAgICByZXR1cm4gSXRlbVZhbHVlLnJ1bkNvbmRpdGlvbnNGb3JJdGVtc0NvcmUoaXRlbXMsIG51bGwsIHJ1bm5lciwgdmFsdWVzLCBwcm9wZXJ0aWVzLCBmYWxzZSwgdHJ1ZSwgb25JdGVtQ2FsbEJhY2spO1xuICAgIH07XG4gICAgSXRlbVZhbHVlLnJ1bkNvbmRpdGlvbnNGb3JJdGVtc0NvcmUgPSBmdW5jdGlvbiAoaXRlbXMsIGZpbHRlcmVkSXRlbXMsIHJ1bm5lciwgdmFsdWVzLCBwcm9wZXJ0aWVzLCBpc1Zpc2libGUsIHVzZUl0ZW1FeHByZXNzaW9uLCBvbkl0ZW1DYWxsQmFjaykge1xuICAgICAgICBpZiAodXNlSXRlbUV4cHJlc3Npb24gPT09IHZvaWQgMCkgeyB1c2VJdGVtRXhwcmVzc2lvbiA9IHRydWU7IH1cbiAgICAgICAgaWYgKCF2YWx1ZXMpIHtcbiAgICAgICAgICAgIHZhbHVlcyA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIHZhciBpdGVtVmFsdWUgPSB2YWx1ZXNbXCJpdGVtXCJdO1xuICAgICAgICB2YXIgY2hvaWNlVmFsdWUgPSB2YWx1ZXNbXCJjaG9pY2VcIl07XG4gICAgICAgIHZhciBoYXNDaGFuZGVkID0gZmFsc2U7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBpdGVtID0gaXRlbXNbaV07XG4gICAgICAgICAgICB2YWx1ZXNbXCJpdGVtXCJdID0gaXRlbS52YWx1ZTtcbiAgICAgICAgICAgIHZhbHVlc1tcImNob2ljZVwiXSA9IGl0ZW0udmFsdWU7XG4gICAgICAgICAgICB2YXIgaXRlbVJ1bm5lciA9IHVzZUl0ZW1FeHByZXNzaW9uICYmICEhaXRlbS5nZXRDb25kaXRpb25SdW5uZXJcbiAgICAgICAgICAgICAgICA/IGl0ZW0uZ2V0Q29uZGl0aW9uUnVubmVyKGlzVmlzaWJsZSlcbiAgICAgICAgICAgICAgICA6IGZhbHNlO1xuICAgICAgICAgICAgaWYgKCFpdGVtUnVubmVyKSB7XG4gICAgICAgICAgICAgICAgaXRlbVJ1bm5lciA9IHJ1bm5lcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBuZXdWYWx1ZSA9IHRydWU7XG4gICAgICAgICAgICBpZiAoaXRlbVJ1bm5lcikge1xuICAgICAgICAgICAgICAgIG5ld1ZhbHVlID0gaXRlbVJ1bm5lci5ydW4odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghIW9uSXRlbUNhbGxCYWNrKSB7XG4gICAgICAgICAgICAgICAgbmV3VmFsdWUgPSBvbkl0ZW1DYWxsQmFjayhpdGVtLCBuZXdWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoISFmaWx0ZXJlZEl0ZW1zICYmIG5ld1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgZmlsdGVyZWRJdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIG9sZFZhbHVlID0gaXNWaXNpYmxlID8gaXRlbS5pc1Zpc2libGUgOiBpdGVtLmlzRW5hYmxlZDtcbiAgICAgICAgICAgIGlmIChuZXdWYWx1ZSAhPSBvbGRWYWx1ZSkge1xuICAgICAgICAgICAgICAgIGhhc0NoYW5kZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGlmIChpc1Zpc2libGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEhaXRlbS5zZXRJc1Zpc2libGUpXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtLnNldElzVmlzaWJsZShuZXdWYWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoISFpdGVtLnNldElzRW5hYmxlZClcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uc2V0SXNFbmFibGVkKG5ld1ZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGl0ZW1WYWx1ZSkge1xuICAgICAgICAgICAgdmFsdWVzW1wiaXRlbVwiXSA9IGl0ZW1WYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGRlbGV0ZSB2YWx1ZXNbXCJpdGVtXCJdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaG9pY2VWYWx1ZSkge1xuICAgICAgICAgICAgdmFsdWVzW1wiY2hvaWNlXCJdID0gY2hvaWNlVmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBkZWxldGUgdmFsdWVzW1wiY2hvaWNlXCJdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBoYXNDaGFuZGVkO1xuICAgIH07XG4gICAgSXRlbVZhbHVlLnByb3RvdHlwZS5vbkNyZWF0aW5nID0gZnVuY3Rpb24gKCkgeyB9O1xuICAgIEl0ZW1WYWx1ZS5wcm90b3R5cGUuZ2V0VHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy50eXBlTmFtZSA/IHRoaXMudHlwZU5hbWUgOiBcIml0ZW12YWx1ZVwiO1xuICAgIH07XG4gICAgSXRlbVZhbHVlLnByb3RvdHlwZS5nZXRTdXJ2ZXkgPSBmdW5jdGlvbiAobGl2ZSkge1xuICAgICAgICBpZiAobGl2ZSA9PT0gdm9pZCAwKSB7IGxpdmUgPSBmYWxzZTsgfVxuICAgICAgICByZXR1cm4gISF0aGlzLmxvY093bmVyICYmICEhdGhpcy5sb2NPd25lcltcImdldFN1cnZleVwiXVxuICAgICAgICAgICAgPyB0aGlzLmxvY093bmVyLmdldFN1cnZleSgpXG4gICAgICAgICAgICA6IG51bGw7XG4gICAgfTtcbiAgICBJdGVtVmFsdWUucHJvdG90eXBlLmdldExvY2FsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5sb2NPd25lciAmJiB0aGlzLmxvY093bmVyLmdldExvY2FsZSA/IHRoaXMubG9jT3duZXIuZ2V0TG9jYWxlKCkgOiBcIlwiO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEl0ZW1WYWx1ZS5wcm90b3R5cGUsIFwiaXNJbnRlcm5hbFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNHaG9zdCA9PT0gdHJ1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJdGVtVmFsdWUucHJvdG90eXBlLCBcImxvY1RleHRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY1RleHRWYWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIEl0ZW1WYWx1ZS5wcm90b3R5cGUuc2V0TG9jVGV4dCA9IGZ1bmN0aW9uIChsb2NUZXh0KSB7XG4gICAgICAgIHRoaXMubG9jVGV4dFZhbHVlID0gbG9jVGV4dDtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJdGVtVmFsdWUucHJvdG90eXBlLCBcImxvY093bmVyXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbG9jT3duZXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLl9sb2NPd25lciA9IHZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEl0ZW1WYWx1ZS5wcm90b3R5cGUsIFwidmFsdWVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ2YWx1ZVwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAobmV3VmFsdWUpIHtcbiAgICAgICAgICAgIHZhciB0ZXh0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKCFfaGVscGVyc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiSGVscGVyc1wiXS5pc1ZhbHVlRW1wdHkobmV3VmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdmFyIHN0ciA9IG5ld1ZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gc3RyLmluZGV4T2YoX3NldHRpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bXCJzZXR0aW5nc1wiXS5pdGVtVmFsdWVTZXBhcmF0b3IpO1xuICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld1ZhbHVlID0gc3RyLnNsaWNlKDAsIGluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgdGV4dCA9IHN0ci5zbGljZShpbmRleCArIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInZhbHVlXCIsIG5ld1ZhbHVlKTtcbiAgICAgICAgICAgIGlmICghIXRleHQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5pZCA9IHRoaXMudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSXRlbVZhbHVlLnByb3RvdHlwZSwgXCJoYXNUZXh0XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NUZXh0LnB1cmVUZXh0ID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEl0ZW1WYWx1ZS5wcm90b3R5cGUsIFwicHVyZVRleHRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY1RleHQucHVyZVRleHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy50ZXh0ID0gdmFsO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEl0ZW1WYWx1ZS5wcm90b3R5cGUsIFwidGV4dFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jVGV4dC5jYWxjdWxhdGVkVGV4dDsgLy9UT0RPOiBpdCB3aWxsIGJlIGNvcnJlY3QgdG8gdXNlIHRoaXMubG9jVGV4dC50ZXh0LCBob3dldmVyIGl0IHdvdWxkIHJlcXVpcmUgYSBsb3Qgb2YgcmV3cml0aW5nIGluIENyZWF0b3JcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAobmV3VGV4dCkge1xuICAgICAgICAgICAgdGhpcy5sb2NUZXh0LnRleHQgPSBuZXdUZXh0O1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEl0ZW1WYWx1ZS5wcm90b3R5cGUsIFwiY2FsY3VsYXRlZFRleHRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY1RleHQuY2FsY3VsYXRlZFRleHQ7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSXRlbVZhbHVlLnByb3RvdHlwZSwgXCJzaG9ydGN1dFRleHRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRleHQ7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBJdGVtVmFsdWUucHJvdG90eXBlLmNhblNlcmlhbGl6ZVZhbHVlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgdmFsID0gdGhpcy52YWx1ZTtcbiAgICAgICAgaWYgKHZhbCA9PT0gdW5kZWZpbmVkIHx8IHZhbCA9PT0gbnVsbClcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuICFBcnJheS5pc0FycmF5KHZhbCkgJiYgdHlwZW9mIHZhbCAhPT0gXCJvYmplY3RcIjtcbiAgICB9O1xuICAgIEl0ZW1WYWx1ZS5wcm90b3R5cGUuZ2V0RGF0YSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBpZiAoISFqc29uW1widmFsdWVcIl0gJiYgISFqc29uW1widmFsdWVcIl1bXCJwb3NcIl0pIHtcbiAgICAgICAgICAgIGRlbGV0ZSBqc29uW1widmFsdWVcIl1bXCJwb3NcIl07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKF9oZWxwZXJzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJIZWxwZXJzXCJdLmlzVmFsdWVFbXB0eShqc29uLnZhbHVlKSlcbiAgICAgICAgICAgIHJldHVybiBqc29uO1xuICAgICAgICB2YXIgY2FuU2VyaWFsaXplVmFsID0gdGhpcy5jYW5TZXJpYWxpemVWYWx1ZSgpO1xuICAgICAgICB2YXIgY2FuU2VyaWFsaXplQXNDb250YW50ID0gIWNhblNlcmlhbGl6ZVZhbCB8fCAhX3NldHRpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bXCJzZXR0aW5nc1wiXS5zZXJpYWxpemF0aW9uLml0ZW1WYWx1ZVNlcmlhbGl6ZUFzT2JqZWN0ICYmICFfc2V0dGluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1tcInNldHRpbmdzXCJdLnNlcmlhbGl6YXRpb24uaXRlbVZhbHVlU2VyaWFsaXplRGlzcGxheVRleHQ7XG4gICAgICAgIGlmIChjYW5TZXJpYWxpemVBc0NvbnRhbnQgJiYgT2JqZWN0LmtleXMoanNvbikubGVuZ3RoID09IDEpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgICAgICAgaWYgKF9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fW1wic2V0dGluZ3NcIl0uc2VyaWFsaXphdGlvbi5pdGVtVmFsdWVTZXJpYWxpemVEaXNwbGF5VGV4dCAmJiBqc29uLnRleHQgPT09IHVuZGVmaW5lZCAmJiBjYW5TZXJpYWxpemVWYWwpIHtcbiAgICAgICAgICAgIGpzb24udGV4dCA9IHRoaXMudmFsdWUudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ganNvbjtcbiAgICB9O1xuICAgIEl0ZW1WYWx1ZS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcmVzID0ge307XG4gICAgICAgIHZhciBwcm9wZXJ0aWVzID0gX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlNlcmlhbGl6ZXJcIl0uZ2V0UHJvcGVydGllcyh0aGlzLmdldFR5cGUoKSk7XG4gICAgICAgIGlmICghcHJvcGVydGllcyB8fCBwcm9wZXJ0aWVzLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICBwcm9wZXJ0aWVzID0gX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlNlcmlhbGl6ZXJcIl0uZ2V0UHJvcGVydGllcyhcIml0ZW12YWx1ZVwiKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIganNvT2JqID0gbmV3IF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJKc29uT2JqZWN0XCJdKCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIHByb3AgPSBwcm9wZXJ0aWVzW2ldO1xuICAgICAgICAgICAgaWYgKHByb3AubmFtZSA9PT0gXCJ0ZXh0XCIgJiYgIXRoaXMubG9jVGV4dC5oYXNOb25EZWZhdWx0VGV4dCgpICYmXG4gICAgICAgICAgICAgICAgX2hlbHBlcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIkhlbHBlcnNcIl0uaXNUd29WYWx1ZUVxdWFscyh0aGlzLnZhbHVlLCB0aGlzLnRleHQsIGZhbHNlLCB0cnVlLCBmYWxzZSkpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBqc29PYmoudmFsdWVUb0pzb24odGhpcywgcmVzLCBwcm9wKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH07XG4gICAgSXRlbVZhbHVlLnByb3RvdHlwZS5zZXREYXRhID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIGlmIChfaGVscGVyc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiSGVscGVyc1wiXS5pc1ZhbHVlRW1wdHkodmFsdWUpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlLnZhbHVlID09PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB2YWx1ZS50ZXh0ICE9PSBcInVuZGVmaW5lZFwiICYmIE9iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHZhbHVlLnZhbHVlID0gdmFsdWUudGV4dDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlLnZhbHVlICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICB2YXIganNvbiA9IHZvaWQgMDtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUudG9KU09OID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICBqc29uID0gdmFsdWUudG9KU09OKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBqc29uID0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBuZXcgX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIkpzb25PYmplY3RcIl0oKS50b09iamVjdChqc29uLCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxvY1RleHQuc3RyQ2hhbmdlZCgpO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEl0ZW1WYWx1ZS5wcm90b3R5cGUsIFwidmlzaWJsZUlmXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwidmlzaWJsZUlmXCIsIFwiXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInZpc2libGVJZlwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEl0ZW1WYWx1ZS5wcm90b3R5cGUsIFwiZW5hYmxlSWZcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJlbmFibGVJZlwiLCBcIlwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJlbmFibGVJZlwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEl0ZW1WYWx1ZS5wcm90b3R5cGUsIFwiaXNWaXNpYmxlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaXNWaXNpYmxlXCIsIHRydWUpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgSXRlbVZhbHVlLnByb3RvdHlwZS5zZXRJc1Zpc2libGUgPSBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImlzVmlzaWJsZVwiLCB2YWwpO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEl0ZW1WYWx1ZS5wcm90b3R5cGUsIFwiaXNFbmFibGVkXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaXNFbmFibGVkXCIsIHRydWUpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgSXRlbVZhbHVlLnByb3RvdHlwZS5zZXRJc0VuYWJsZWQgPSBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImlzRW5hYmxlZFwiLCB2YWwpO1xuICAgIH07XG4gICAgSXRlbVZhbHVlLnByb3RvdHlwZS5hZGRVc2VkTG9jYWxlcyA9IGZ1bmN0aW9uIChsb2NhbGVzKSB7XG4gICAgICAgIHRoaXMuQWRkTG9jU3RyaW5nVG9Vc2VkTG9jYWxlcyh0aGlzLmxvY1RleHRWYWx1ZSwgbG9jYWxlcyk7XG4gICAgfTtcbiAgICBJdGVtVmFsdWUucHJvdG90eXBlLmxvY1N0cnNDaGFuZ2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBfc3VwZXIucHJvdG90eXBlLmxvY1N0cnNDaGFuZ2VkLmNhbGwodGhpcyk7XG4gICAgICAgIHRoaXMubG9jVGV4dC5zdHJDaGFuZ2VkKCk7XG4gICAgfTtcbiAgICBJdGVtVmFsdWUucHJvdG90eXBlLm9uUHJvcGVydHlWYWx1ZUNoYW5nZWQgPSBmdW5jdGlvbiAobmFtZSwgb2xkVmFsdWUsIG5ld1ZhbHVlKSB7XG4gICAgICAgIGlmIChuYW1lID09PSBcInZhbHVlXCIgJiYgIXRoaXMuaGFzVGV4dCkge1xuICAgICAgICAgICAgdGhpcy5sb2NUZXh0LnN0ckNoYW5nZWQoKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZnVuY05hbWUgPSBcIml0ZW1WYWx1ZVByb3BlcnR5Q2hhbmdlZFwiO1xuICAgICAgICBpZiAoIXRoaXMubG9jT3duZXIgfHwgIXRoaXMubG9jT3duZXJbZnVuY05hbWVdKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLmxvY093bmVyW2Z1bmNOYW1lXSh0aGlzLCBuYW1lLCBvbGRWYWx1ZSwgbmV3VmFsdWUpO1xuICAgIH07XG4gICAgSXRlbVZhbHVlLnByb3RvdHlwZS5nZXRDb25kaXRpb25SdW5uZXIgPSBmdW5jdGlvbiAoaXNWaXNpYmxlKSB7XG4gICAgICAgIGlmIChpc1Zpc2libGUpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRWaXNpYmxlQ29uZGl0aW9uUnVubmVyKCk7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEVuYWJsZUNvbmRpdGlvblJ1bm5lcigpO1xuICAgIH07XG4gICAgSXRlbVZhbHVlLnByb3RvdHlwZS5nZXRWaXNpYmxlQ29uZGl0aW9uUnVubmVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMudmlzaWJsZUlmKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGlmICghdGhpcy52aXNpYmxlQ29uZGl0aW9uUnVubmVyKVxuICAgICAgICAgICAgdGhpcy52aXNpYmxlQ29uZGl0aW9uUnVubmVyID0gbmV3IF9jb25kaXRpb25zX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJDb25kaXRpb25SdW5uZXJcIl0odGhpcy52aXNpYmxlSWYpO1xuICAgICAgICB0aGlzLnZpc2libGVDb25kaXRpb25SdW5uZXIuZXhwcmVzc2lvbiA9IHRoaXMudmlzaWJsZUlmO1xuICAgICAgICByZXR1cm4gdGhpcy52aXNpYmxlQ29uZGl0aW9uUnVubmVyO1xuICAgIH07XG4gICAgSXRlbVZhbHVlLnByb3RvdHlwZS5nZXRFbmFibGVDb25kaXRpb25SdW5uZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5lbmFibGVJZilcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICBpZiAoIXRoaXMuZW5hYmxlQ29uZGl0aW9uUnVubmVyKVxuICAgICAgICAgICAgdGhpcy5lbmFibGVDb25kaXRpb25SdW5uZXIgPSBuZXcgX2NvbmRpdGlvbnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcIkNvbmRpdGlvblJ1bm5lclwiXSh0aGlzLmVuYWJsZUlmKTtcbiAgICAgICAgdGhpcy5lbmFibGVDb25kaXRpb25SdW5uZXIuZXhwcmVzc2lvbiA9IHRoaXMuZW5hYmxlSWY7XG4gICAgICAgIHJldHVybiB0aGlzLmVuYWJsZUNvbmRpdGlvblJ1bm5lcjtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJdGVtVmFsdWUucHJvdG90eXBlLCBcInNlbGVjdGVkXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICAgICAgdmFyIGxvY093bmVyID0gdGhpcy5fbG9jT3duZXI7XG4gICAgICAgICAgICBpZiAobG9jT3duZXIgaW5zdGFuY2VvZiBfcXVlc3Rpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1tcIlF1ZXN0aW9uXCJdICYmIGxvY093bmVyLmlzSXRlbVNlbGVjdGVkICYmIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gKG5ldyBfYmFzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fW1wiQ29tcHV0ZWRVcGRhdGVyXCJdKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGxvY093bmVyLmlzSXRlbVNlbGVjdGVkKF90aGlzKTsgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRWYWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIEl0ZW1WYWx1ZS5wcm90b3R5cGUuZ2V0Q29tcG9uZW50ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5fbG9jT3duZXIgaW5zdGFuY2VvZiBfcXVlc3Rpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1tcIlF1ZXN0aW9uXCJdKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb21wb25lbnRWYWx1ZSB8fCB0aGlzLl9sb2NPd25lci5pdGVtQ29tcG9uZW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmNvbXBvbmVudFZhbHVlO1xuICAgIH07XG4gICAgSXRlbVZhbHVlLnByb3RvdHlwZS5zZXRDb21wb25lbnQgPSBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgIHRoaXMuY29tcG9uZW50VmFsdWUgPSB2YWw7XG4gICAgfTtcbiAgICBJdGVtVmFsdWUucHJvdG90eXBlLmdldEVuYWJsZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzRW5hYmxlZDtcbiAgICB9O1xuICAgIEl0ZW1WYWx1ZS5wcm90b3R5cGUuc2V0RW5hYmxlZCA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgdGhpcy5zZXRJc0VuYWJsZWQodmFsKTtcbiAgICB9O1xuICAgIEl0ZW1WYWx1ZS5wcm90b3R5cGUuZ2V0VmlzaWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGlzVmlzaWJsZSA9IHRoaXMuaXNWaXNpYmxlID09PSB1bmRlZmluZWQgPyB0cnVlIDogdGhpcy5pc1Zpc2libGU7XG4gICAgICAgIHZhciB2aXNpYmxlID0gdGhpcy5fdmlzaWJsZSA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IHRoaXMuX3Zpc2libGU7XG4gICAgICAgIHJldHVybiBpc1Zpc2libGUgJiYgdmlzaWJsZTtcbiAgICB9O1xuICAgIEl0ZW1WYWx1ZS5wcm90b3R5cGUuc2V0VmlzaWJsZSA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgdGhpcy5fdmlzaWJsZSA9IHZhbDtcbiAgICB9O1xuICAgIEl0ZW1WYWx1ZS5wcm90b3R5cGUuZ2V0TG9jVGl0bGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY1RleHQ7XG4gICAgfTtcbiAgICBJdGVtVmFsdWUucHJvdG90eXBlLmdldFRpdGxlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0O1xuICAgIH07XG4gICAgSXRlbVZhbHVlLnByb3RvdHlwZS5zZXRMb2NUaXRsZSA9IGZ1bmN0aW9uICh2YWwpIHsgfTtcbiAgICBJdGVtVmFsdWUucHJvdG90eXBlLnNldFRpdGxlID0gZnVuY3Rpb24gKHZhbCkgeyB9O1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QoX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcInByb3BlcnR5XCJdKSh7IGRlZmF1bHRWYWx1ZTogdHJ1ZSB9KVxuICAgIF0sIEl0ZW1WYWx1ZS5wcm90b3R5cGUsIFwiX3Zpc2libGVcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJwcm9wZXJ0eVwiXSkoKVxuICAgIF0sIEl0ZW1WYWx1ZS5wcm90b3R5cGUsIFwic2VsZWN0ZWRWYWx1ZVwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QoX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcInByb3BlcnR5XCJdKSgpXG4gICAgXSwgSXRlbVZhbHVlLnByb3RvdHlwZSwgXCJpY29uXCIsIHZvaWQgMCk7XG4gICAgcmV0dXJuIEl0ZW1WYWx1ZTtcbn0oX2FjdGlvbnNfYWN0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bXCJCYXNlQWN0aW9uXCJdKSk7XG5cbl9iYXNlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bXCJCYXNlXCJdLmNyZWF0ZUl0ZW1WYWx1ZSA9IGZ1bmN0aW9uIChzb3VyY2UsIHR5cGUpIHtcbiAgICB2YXIgaXRlbSA9IG51bGw7XG4gICAgaWYgKCEhdHlwZSkge1xuICAgICAgICBpdGVtID0gX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIkpzb25PYmplY3RcIl0ubWV0YURhdGEuY3JlYXRlQ2xhc3ModHlwZSwge30pO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2Ygc291cmNlLmdldFR5cGUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBpdGVtID0gbmV3IEl0ZW1WYWx1ZShudWxsLCB1bmRlZmluZWQsIHNvdXJjZS5nZXRUeXBlKCkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaXRlbSA9IG5ldyBJdGVtVmFsdWUobnVsbCk7XG4gICAgfVxuICAgIGl0ZW0uc2V0RGF0YShzb3VyY2UpO1xuICAgIHJldHVybiBpdGVtO1xufTtcbl9iYXNlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bXCJCYXNlXCJdLml0ZW1WYWx1ZUxvY1N0ckNoYW5nZWQgPSBmdW5jdGlvbiAoYXJyKSB7XG4gICAgSXRlbVZhbHVlLmxvY1N0cnNDaGFuZ2VkKGFycik7XG59O1xuX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIkpzb25PYmplY3RQcm9wZXJ0eVwiXS5nZXRJdGVtVmFsdWVzRGVmYXVsdFZhbHVlID0gZnVuY3Rpb24gKHZhbCwgdHlwZSkge1xuICAgIHZhciByZXMgPSBuZXcgQXJyYXkoKTtcbiAgICBJdGVtVmFsdWUuc2V0RGF0YShyZXMsIEFycmF5LmlzQXJyYXkodmFsKSA/IHZhbCA6IFtdLCB0eXBlKTtcbiAgICByZXR1cm4gcmVzO1xufTtcbl9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJTZXJpYWxpemVyXCJdLmFkZENsYXNzKFwiaXRlbXZhbHVlXCIsIFtcbiAgICB7IG5hbWU6IFwiIXZhbHVlXCIsIGlzVW5pcXVlOiB0cnVlIH0sXG4gICAge1xuICAgICAgICBuYW1lOiBcInRleHRcIixcbiAgICAgICAgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1RleHRcIixcbiAgICB9LFxuICAgIHsgbmFtZTogXCJ2aXNpYmxlSWY6Y29uZGl0aW9uXCIsIHNob3dNb2RlOiBcImZvcm1cIiB9LFxuICAgIHtcbiAgICAgICAgbmFtZTogXCJlbmFibGVJZjpjb25kaXRpb25cIixcbiAgICAgICAgc2hvd01vZGU6IFwiZm9ybVwiLFxuICAgICAgICB2aXNpYmxlSWY6IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgIHJldHVybiAhb2JqIHx8IG9iai5vd25lclByb3BlcnR5TmFtZSAhPT0gXCJyYXRlVmFsdWVzXCI7XG4gICAgICAgIH0sXG4gICAgfVxuXSwgZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiBuZXcgSXRlbVZhbHVlKHZhbHVlKTsgfSk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvanNvbm9iamVjdC50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL2pzb25vYmplY3QudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBwcm9wZXJ0eSwgcHJvcGVydHlBcnJheSwgSnNvbk9iamVjdFByb3BlcnR5LCBDdXN0b21Qcm9wZXJ0aWVzQ29sbGVjdGlvbiwgSnNvbk1ldGFkYXRhQ2xhc3MsIEpzb25NZXRhZGF0YSwgSnNvbkVycm9yLCBKc29uVW5rbm93blByb3BlcnR5RXJyb3IsIEpzb25NaXNzaW5nVHlwZUVycm9yQmFzZSwgSnNvbk1pc3NpbmdUeXBlRXJyb3IsIEpzb25JbmNvcnJlY3RUeXBlRXJyb3IsIEpzb25SZXF1aXJlZFByb3BlcnR5RXJyb3IsIEpzb25PYmplY3QsIFNlcmlhbGl6ZXIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwicHJvcGVydHlcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBwcm9wZXJ0eTsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwicHJvcGVydHlBcnJheVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHByb3BlcnR5QXJyYXk7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkpzb25PYmplY3RQcm9wZXJ0eVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEpzb25PYmplY3RQcm9wZXJ0eTsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQ3VzdG9tUHJvcGVydGllc0NvbGxlY3Rpb25cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBDdXN0b21Qcm9wZXJ0aWVzQ29sbGVjdGlvbjsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiSnNvbk1ldGFkYXRhQ2xhc3NcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBKc29uTWV0YWRhdGFDbGFzczsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiSnNvbk1ldGFkYXRhXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gSnNvbk1ldGFkYXRhOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJKc29uRXJyb3JcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBKc29uRXJyb3I7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkpzb25Vbmtub3duUHJvcGVydHlFcnJvclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEpzb25Vbmtub3duUHJvcGVydHlFcnJvcjsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiSnNvbk1pc3NpbmdUeXBlRXJyb3JCYXNlXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gSnNvbk1pc3NpbmdUeXBlRXJyb3JCYXNlOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJKc29uTWlzc2luZ1R5cGVFcnJvclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEpzb25NaXNzaW5nVHlwZUVycm9yOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJKc29uSW5jb3JyZWN0VHlwZUVycm9yXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gSnNvbkluY29ycmVjdFR5cGVFcnJvcjsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiSnNvblJlcXVpcmVkUHJvcGVydHlFcnJvclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEpzb25SZXF1aXJlZFByb3BlcnR5RXJyb3I7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkpzb25PYmplY3RcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBKc29uT2JqZWN0OyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJTZXJpYWxpemVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU2VyaWFsaXplcjsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3N1cnZleVN0cmluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vc3VydmV5U3RyaW5ncyAqLyBcIi4vc3JjL3N1cnZleVN0cmluZ3MudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Jhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYmFzZSAqLyBcIi4vc3JjL2Jhc2UudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2hlbHBlcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vaGVscGVycyAqLyBcIi4vc3JjL2hlbHBlcnMudHNcIik7XG52YXIgX19leHRlbmRzID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbnZhciBfX3NwcmVhZEFycmF5ID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19zcHJlYWRBcnJheSkgfHwgZnVuY3Rpb24gKHRvLCBmcm9tKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGlsID0gZnJvbS5sZW5ndGgsIGogPSB0by5sZW5ndGg7IGkgPCBpbDsgaSsrLCBqKyspXG4gICAgICAgIHRvW2pdID0gZnJvbVtpXTtcbiAgICByZXR1cm4gdG87XG59O1xuXG5cblxuZnVuY3Rpb24gZW5zdXJlTG9jU3RyaW5nKHRhcmdldCwgb3B0aW9ucywga2V5KSB7XG4gICAgdmFyIGxvY1N0cmluZyA9IHRhcmdldC5nZXRMb2NhbGl6YWJsZVN0cmluZyhrZXkpO1xuICAgIGlmICghbG9jU3RyaW5nKSB7XG4gICAgICAgIGxvY1N0cmluZyA9IHRhcmdldC5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhrZXksIHRhcmdldCwgdHJ1ZSk7XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5sb2NhbGl6YWJsZSA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgdHlwZW9mIG9wdGlvbnMubG9jYWxpemFibGUub25HZXRUZXh0Q2FsbGJhY2sgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgbG9jU3RyaW5nLm9uR2V0VGV4dENhbGxiYWNrID0gb3B0aW9ucy5sb2NhbGl6YWJsZS5vbkdldFRleHRDYWxsYmFjaztcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIGdldExvY1N0cmluZ1ZhbHVlKHRhcmdldCwgb3B0aW9ucywga2V5KSB7XG4gICAgZW5zdXJlTG9jU3RyaW5nKHRhcmdldCwgb3B0aW9ucywga2V5KTtcbiAgICB2YXIgcmVzID0gdGFyZ2V0LmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChrZXkpO1xuICAgIGlmICghIXJlcylcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMubG9jYWxpemFibGUgPT09IFwib2JqZWN0XCIgJiYgb3B0aW9ucy5sb2NhbGl6YWJsZS5kZWZhdWx0U3RyKSB7XG4gICAgICAgIHZhciBsb2MgPSAhIXRhcmdldC5nZXRMb2NhbGUgPyB0YXJnZXQuZ2V0TG9jYWxlKCkgOiBcIlwiO1xuICAgICAgICByZXR1cm4gX3N1cnZleVN0cmluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN1cnZleUxvY2FsaXphdGlvblwiXS5nZXRTdHJpbmcob3B0aW9ucy5sb2NhbGl6YWJsZS5kZWZhdWx0U3RyLCBsb2MpO1xuICAgIH1cbiAgICByZXR1cm4gXCJcIjtcbn1cbmZ1bmN0aW9uIHByb3BlcnR5KG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtbW9kdWxlLWJvdW5kYXJ5LXR5cGVzXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkge1xuICAgICAgICB2YXIgcHJvY2Vzc0NvbXB1dGVkVXBkYXRlciA9IGZ1bmN0aW9uIChvYmosIHZhbCkge1xuICAgICAgICAgICAgaWYgKCEhdmFsICYmIHR5cGVvZiB2YWwgPT09IFwib2JqZWN0XCIgJiYgdmFsLnR5cGUgPT09IF9iYXNlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJDb21wdXRlZFVwZGF0ZXJcIl0uQ29tcHV0ZWRVcGRhdGVyVHlwZSkge1xuICAgICAgICAgICAgICAgIF9iYXNlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJCYXNlXCJdLnN0YXJ0Q29sbGVjdERlcGVuZGVuY2llcyhmdW5jdGlvbiAoKSB7IHJldHVybiBvYmpba2V5XSA9IHZhbC51cGRhdGVyKCk7IH0sIG9iaiwga2V5KTtcbiAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gdmFsLnVwZGF0ZXIoKTtcbiAgICAgICAgICAgICAgICB2YXIgZGVwZW5kZW5jaWVzID0gX2Jhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIkJhc2VcIl0uZmluaXNoQ29sbGVjdERlcGVuZGVuY2llcygpO1xuICAgICAgICAgICAgICAgIHZhbC5zZXREZXBlbmRlbmNpZXMoZGVwZW5kZW5jaWVzKTtcbiAgICAgICAgICAgICAgICBpZiAob2JqLmRlcGVuZGVuY2llc1trZXldKSB7XG4gICAgICAgICAgICAgICAgICAgIG9iai5kZXBlbmRlbmNpZXNba2V5XS5kaXNwb3NlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG9iai5kZXBlbmRlbmNpZXNba2V5XSA9IHZhbDtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHZhbDtcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKCFvcHRpb25zIHx8ICFvcHRpb25zLmxvY2FsaXphYmxlKSB7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHtcbiAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRlZmF1bHRWYWwgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBpZiAoISFvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuZ2V0RGVmYXVsdFZhbHVlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsID0gb3B0aW9ucy5nZXREZWZhdWx0VmFsdWUodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWwgPSBvcHRpb25zLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKGtleSwgZGVmYXVsdFZhbCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5ld1ZhbHVlID0gcHJvY2Vzc0NvbXB1dGVkVXBkYXRlcih0aGlzLCB2YWwpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoa2V5LCBuZXdWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghIW9wdGlvbnMgJiYgb3B0aW9ucy5vblNldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5vblNldChuZXdWYWx1ZSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHtcbiAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldExvY1N0cmluZ1ZhbHVlKHRoaXMsIG9wdGlvbnMsIGtleSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgICAgICAgICAgZW5zdXJlTG9jU3RyaW5nKHRoaXMsIG9wdGlvbnMsIGtleSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXdWYWx1ZSA9IHByb2Nlc3NDb21wdXRlZFVwZGF0ZXIodGhpcywgdmFsKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoa2V5LCBuZXdWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghIW9wdGlvbnMgJiYgb3B0aW9ucy5vblNldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5vblNldChuZXdWYWx1ZSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCB0eXBlb2Ygb3B0aW9ucy5sb2NhbGl6YWJsZSA9PT0gXCJvYmplY3RcIiAmJiAhIW9wdGlvbnMubG9jYWxpemFibGUubmFtZSA/XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5sb2NhbGl6YWJsZS5uYW1lIDogXCJsb2NcIiArIGtleS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGtleS5zbGljZSgxKSwge1xuICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBlbnN1cmVMb2NTdHJpbmcodGhpcywgb3B0aW9ucywga2V5KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoa2V5KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xufVxuZnVuY3Rpb24gZW5zdXJlQXJyYXkodGFyZ2V0LCBvcHRpb25zLCBrZXkpIHtcbiAgICB0YXJnZXQuZW5zdXJlQXJyYXkoa2V5LCBmdW5jdGlvbiAoaXRlbSwgaW5kZXgpIHtcbiAgICAgICAgdmFyIGhhbmRsZXIgPSAhIW9wdGlvbnMgPyBvcHRpb25zLm9uUHVzaCA6IG51bGw7XG4gICAgICAgIGhhbmRsZXIgJiYgaGFuZGxlcihpdGVtLCBpbmRleCwgdGFyZ2V0KTtcbiAgICB9LCBmdW5jdGlvbiAoaXRlbSwgaW5kZXgpIHtcbiAgICAgICAgdmFyIGhhbmRsZXIgPSAhIW9wdGlvbnMgPyBvcHRpb25zLm9uUmVtb3ZlIDogbnVsbDtcbiAgICAgICAgaGFuZGxlciAmJiBoYW5kbGVyKGl0ZW0sIGluZGV4LCB0YXJnZXQpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gcHJvcGVydHlBcnJheShvcHRpb25zKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHtcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGVuc3VyZUFycmF5KHRoaXMsIG9wdGlvbnMsIGtleSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShrZXkpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgICAgIGVuc3VyZUFycmF5KHRoaXMsIG9wdGlvbnMsIGtleSk7XG4gICAgICAgICAgICAgICAgdmFyIGFyciA9IHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShrZXkpO1xuICAgICAgICAgICAgICAgIGlmICh2YWwgPT09IGFycikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChhcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJyLnNwbGljZS5hcHBseShhcnIsIF9fc3ByZWFkQXJyYXkoWzAsIGFyci5sZW5ndGhdLCAodmFsIHx8IFtdKSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKGtleSwgdmFsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCEhb3B0aW9ucyAmJiBvcHRpb25zLm9uU2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMub25TZXQodmFsLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9O1xufVxuLyoqXG4gKiBDb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBhIHByb3BlcnR5IG9mIGEgc3VydmV5IGVsZW1lbnQgKHBhZ2UsIHBhbmVsLCBxdWVzdGlvbnMsIGFuZCBldGMpLlxuICogQHNlZSBhZGRQcm9wZXJ0eVxuICogQHNlZSByZW1vdmVQcm9wZXJ0eVxuICogQHNlZSBbQWRkIFByb3BlcnRpZXNdKGh0dHBzOi8vc3VydmV5anMuaW8vRG9jdW1lbnRhdGlvbi9TdXJ2ZXktQ3JlYXRvciNhZGRwcm9wZXJ0aWVzKVxuICogQHNlZSBbUmVtb3ZlIFByb3BlcnRpZXNdKGh0dHBzOi8vc3VydmV5anMuaW8vRG9jdW1lbnRhdGlvbi9TdXJ2ZXktQ3JlYXRvciNyZW1vdmVwcm9wZXJ0aWVzKVxuICovXG52YXIgSnNvbk9iamVjdFByb3BlcnR5ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEpzb25PYmplY3RQcm9wZXJ0eShjbGFzc0luZm8sIG5hbWUsIGlzUmVxdWlyZWQpIHtcbiAgICAgICAgaWYgKGlzUmVxdWlyZWQgPT09IHZvaWQgMCkgeyBpc1JlcXVpcmVkID0gZmFsc2U7IH1cbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy5pc1JlcXVpcmVkVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc1VuaXF1ZVZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNTZXJpYWxpemFibGUgPSB0cnVlO1xuICAgICAgICB0aGlzLmlzTGlnaHRTZXJpYWxpemFibGUgPSB0cnVlO1xuICAgICAgICB0aGlzLmlzQ3VzdG9tID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNEeW5hbWljQ2hvaWNlcyA9IGZhbHNlOyAvL1RPRE8gb2Jzb2xldGUsIHVzZSBkZXBlbmRzT24gYXR0cmlidXRlXG4gICAgICAgIHRoaXMuaXNCaW5kYWJsZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNhdGVnb3J5ID0gXCJcIjtcbiAgICAgICAgdGhpcy5jYXRlZ29yeUluZGV4ID0gLTE7XG4gICAgICAgIHRoaXMudmlzaWJsZUluZGV4ID0gLTE7XG4gICAgICAgIHRoaXMubWF4TGVuZ3RoID0gLTE7XG4gICAgICAgIHRoaXMuaXNBcnJheSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNsYXNzSW5mb1ZhbHVlID0gY2xhc3NJbmZvO1xuICAgICAgICB0aGlzLmlzUmVxdWlyZWRWYWx1ZSA9IGlzUmVxdWlyZWQ7XG4gICAgICAgIHRoaXMuaWRWYWx1ZSA9IEpzb25PYmplY3RQcm9wZXJ0eS5JbmRleCsrO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSnNvbk9iamVjdFByb3BlcnR5LnByb3RvdHlwZSwgXCJpZFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaWRWYWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShKc29uT2JqZWN0UHJvcGVydHkucHJvdG90eXBlLCBcImNsYXNzSW5mb1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xhc3NJbmZvVmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSnNvbk9iamVjdFByb3BlcnR5LnByb3RvdHlwZSwgXCJ0eXBlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50eXBlVmFsdWUgPyB0aGlzLnR5cGVWYWx1ZSA6IFwic3RyaW5nXCI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IFwiaXRlbXZhbHVlc1wiKVxuICAgICAgICAgICAgICAgIHZhbHVlID0gXCJpdGVtdmFsdWVbXVwiO1xuICAgICAgICAgICAgaWYgKHZhbHVlID09PSBcInRleHRpdGVtc1wiKVxuICAgICAgICAgICAgICAgIHZhbHVlID0gXCJ0ZXh0aXRlbVtdXCI7XG4gICAgICAgICAgICB0aGlzLnR5cGVWYWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgaWYgKHRoaXMudHlwZVZhbHVlLmluZGV4T2YoXCJbXVwiKSA9PT0gdGhpcy50eXBlVmFsdWUubGVuZ3RoIC0gMikge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNBcnJheSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGFzc05hbWUgPSB0aGlzLnR5cGVWYWx1ZS5zdWJzdHJpbmcoMCwgdGhpcy50eXBlVmFsdWUubGVuZ3RoIC0gMik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSnNvbk9iamVjdFByb3BlcnR5LnByb3RvdHlwZSwgXCJpc1JlcXVpcmVkXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pc1JlcXVpcmVkVmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5pc1JlcXVpcmVkVmFsdWUgPSB2YWw7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSnNvbk9iamVjdFByb3BlcnR5LnByb3RvdHlwZSwgXCJpc1VuaXF1ZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNVbmlxdWVWYWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLmlzVW5pcXVlVmFsdWUgPSB2YWw7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSnNvbk9iamVjdFByb3BlcnR5LnByb3RvdHlwZSwgXCJ1bmlxdWVQcm9wZXJ0eU5hbWVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaXF1ZVByb3BlcnR5VmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy51bmlxdWVQcm9wZXJ0eVZhbHVlID0gdmFsO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEpzb25PYmplY3RQcm9wZXJ0eS5wcm90b3R5cGUsIFwiaGFzVG9Vc2VHZXRWYWx1ZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMub25HZXRWYWx1ZSB8fCB0aGlzLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShKc29uT2JqZWN0UHJvcGVydHkucHJvdG90eXBlLCBcImRlZmF1bHRWYWx1ZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9ICEhdGhpcy5kZWZhdWx0VmFsdWVGdW5jID8gdGhpcy5kZWZhdWx0VmFsdWVGdW5jKCkgOiB0aGlzLmRlZmF1bHRWYWx1ZVZhbHVlO1xuICAgICAgICAgICAgaWYgKCEhSnNvbk9iamVjdFByb3BlcnR5LmdldEl0ZW1WYWx1ZXNEZWZhdWx0VmFsdWUgJiZcbiAgICAgICAgICAgICAgICBKc29uT2JqZWN0Lm1ldGFEYXRhLmlzRGVzY2VuZGFudE9mKHRoaXMuY2xhc3NOYW1lLCBcIml0ZW12YWx1ZVwiKSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IEpzb25PYmplY3RQcm9wZXJ0eS5nZXRJdGVtVmFsdWVzRGVmYXVsdFZhbHVlKHRoaXMuZGVmYXVsdFZhbHVlVmFsdWUgfHwgW10sIHRoaXMuY2xhc3NOYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKG5ld1ZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRWYWx1ZVZhbHVlID0gbmV3VmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBKc29uT2JqZWN0UHJvcGVydHkucHJvdG90eXBlLmlzRGVmYXVsdFZhbHVlID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIGlmICghX2hlbHBlcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIkhlbHBlcnNcIl0uaXNWYWx1ZUVtcHR5KHRoaXMuZGVmYXVsdFZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIF9oZWxwZXJzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJIZWxwZXJzXCJdLmlzVHdvVmFsdWVFcXVhbHModmFsdWUsIHRoaXMuZGVmYXVsdFZhbHVlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzTG9jYWxpemFibGUpXG4gICAgICAgICAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuICgodmFsdWUgPT09IGZhbHNlICYmICh0aGlzLnR5cGUgPT0gXCJib29sZWFuXCIgfHwgdGhpcy50eXBlID09IFwic3dpdGNoXCIpKSB8fFxuICAgICAgICAgICAgdmFsdWUgPT09IFwiXCIgfHwgX2hlbHBlcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIkhlbHBlcnNcIl0uaXNWYWx1ZUVtcHR5KHZhbHVlKSk7XG4gICAgfTtcbiAgICBKc29uT2JqZWN0UHJvcGVydHkucHJvdG90eXBlLmdldFZhbHVlID0gZnVuY3Rpb24gKG9iaikge1xuICAgICAgICBpZiAodGhpcy5vbkdldFZhbHVlKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMub25HZXRWYWx1ZShvYmopO1xuICAgICAgICBpZiAodGhpcy5zZXJpYWxpemF0aW9uUHJvcGVydHkgJiYgISFvYmpbdGhpcy5zZXJpYWxpemF0aW9uUHJvcGVydHldKVxuICAgICAgICAgICAgcmV0dXJuIG9ialt0aGlzLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eV0uZ2V0SnNvbigpO1xuICAgICAgICByZXR1cm4gb2JqW3RoaXMubmFtZV07XG4gICAgfTtcbiAgICBKc29uT2JqZWN0UHJvcGVydHkucHJvdG90eXBlLmdldFByb3BlcnR5VmFsdWUgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIGlmICh0aGlzLmlzTG9jYWxpemFibGUpIHtcbiAgICAgICAgICAgIHJldHVybiAhIW9ialt0aGlzLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eV1cbiAgICAgICAgICAgICAgICA/IG9ialt0aGlzLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eV0udGV4dFxuICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5nZXRWYWx1ZShvYmopO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEpzb25PYmplY3RQcm9wZXJ0eS5wcm90b3R5cGUsIFwiaGFzVG9Vc2VTZXRWYWx1ZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMub25TZXRWYWx1ZSB8fCB0aGlzLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIEpzb25PYmplY3RQcm9wZXJ0eS5wcm90b3R5cGUuc2V0dGluZ1ZhbHVlID0gZnVuY3Rpb24gKG9iaiwgdmFsdWUpIHtcbiAgICAgICAgaWYgKCF0aGlzLm9uU2V0dGluZ1ZhbHVlIHx8IG9iai5pc0xvYWRpbmdGcm9tSnNvbilcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXMub25TZXR0aW5nVmFsdWUob2JqLCB2YWx1ZSk7XG4gICAgfTtcbiAgICBKc29uT2JqZWN0UHJvcGVydHkucHJvdG90eXBlLnNldFZhbHVlID0gZnVuY3Rpb24gKG9iaiwgdmFsdWUsIGpzb25Db252KSB7XG4gICAgICAgIGlmICh0aGlzLm9uU2V0VmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMub25TZXRWYWx1ZShvYmosIHZhbHVlLCBqc29uQ29udik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zZXJpYWxpemF0aW9uUHJvcGVydHkgJiYgISFvYmpbdGhpcy5zZXJpYWxpemF0aW9uUHJvcGVydHldKVxuICAgICAgICAgICAgICAgIG9ialt0aGlzLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eV0uc2V0SnNvbih2YWx1ZSk7XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnR5cGUgPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBwYXJzZUludCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudHlwZSA9PSBcImJvb2xlYW5cIiB8fCB0aGlzLnR5cGUgPT0gXCJzd2l0Y2hcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS50b0xvd2VyQ2FzZSgpID09PSBcInRydWVcIjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBvYmpbdGhpcy5uYW1lXSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBKc29uT2JqZWN0UHJvcGVydHkucHJvdG90eXBlLmdldE9ialR5cGUgPSBmdW5jdGlvbiAob2JqVHlwZSkge1xuICAgICAgICBpZiAoIXRoaXMuY2xhc3NOYW1lUGFydClcbiAgICAgICAgICAgIHJldHVybiBvYmpUeXBlO1xuICAgICAgICByZXR1cm4gb2JqVHlwZS5yZXBsYWNlKHRoaXMuY2xhc3NOYW1lUGFydCwgXCJcIik7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSnNvbk9iamVjdFByb3BlcnR5LnByb3RvdHlwZSwgXCJjaG9pY2VzXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIERlcHJpY2F0ZWQsIHBsZWFzZSB1c2UgZ2V0Q2hvaWNlc1xuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDaG9pY2VzKG51bGwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEpzb25PYmplY3RQcm9wZXJ0eS5wcm90b3R5cGUsIFwiaGFzQ2hvaWNlc1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuICEhdGhpcy5jaG9pY2VzVmFsdWUgfHwgISF0aGlzLmNob2ljZXNmdW5jO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgSnNvbk9iamVjdFByb3BlcnR5LnByb3RvdHlwZS5nZXRDaG9pY2VzID0gZnVuY3Rpb24gKG9iaiwgY2hvaWNlc0NhbGxiYWNrKSB7XG4gICAgICAgIGlmIChjaG9pY2VzQ2FsbGJhY2sgPT09IHZvaWQgMCkgeyBjaG9pY2VzQ2FsbGJhY2sgPSBudWxsOyB9XG4gICAgICAgIGlmICh0aGlzLmNob2ljZXNWYWx1ZSAhPSBudWxsKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hvaWNlc1ZhbHVlO1xuICAgICAgICBpZiAodGhpcy5jaG9pY2VzZnVuYyAhPSBudWxsKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hvaWNlc2Z1bmMob2JqLCBjaG9pY2VzQ2FsbGJhY2spO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICAgIEpzb25PYmplY3RQcm9wZXJ0eS5wcm90b3R5cGUuc2V0Q2hvaWNlcyA9IGZ1bmN0aW9uICh2YWx1ZSwgdmFsdWVGdW5jKSB7XG4gICAgICAgIGlmICh2YWx1ZUZ1bmMgPT09IHZvaWQgMCkgeyB2YWx1ZUZ1bmMgPSBudWxsOyB9XG4gICAgICAgIHRoaXMuY2hvaWNlc1ZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuY2hvaWNlc2Z1bmMgPSB2YWx1ZUZ1bmM7XG4gICAgfTtcbiAgICBKc29uT2JqZWN0UHJvcGVydHkucHJvdG90eXBlLmdldEJhc2VWYWx1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmJhc2VWYWx1ZSlcbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYmFzZVZhbHVlID09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJhc2VWYWx1ZSgpO1xuICAgICAgICByZXR1cm4gdGhpcy5iYXNlVmFsdWU7XG4gICAgfTtcbiAgICBKc29uT2JqZWN0UHJvcGVydHkucHJvdG90eXBlLnNldEJhc2VWYWx1ZSA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgdGhpcy5iYXNlVmFsdWUgPSB2YWw7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSnNvbk9iamVjdFByb3BlcnR5LnByb3RvdHlwZSwgXCJyZWFkT25seVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVhZE9ubHlWYWx1ZSAhPSBudWxsID8gdGhpcy5yZWFkT25seVZhbHVlIDogZmFsc2U7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5yZWFkT25seVZhbHVlID0gdmFsO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgSnNvbk9iamVjdFByb3BlcnR5LnByb3RvdHlwZS5pc1Zpc2libGUgPSBmdW5jdGlvbiAobGF5b3V0LCBvYmopIHtcbiAgICAgICAgaWYgKG9iaiA9PT0gdm9pZCAwKSB7IG9iaiA9IG51bGw7IH1cbiAgICAgICAgdmFyIGlzTGF5b3V0ID0gIXRoaXMubGF5b3V0IHx8IHRoaXMubGF5b3V0ID09IGxheW91dDtcbiAgICAgICAgaWYgKCF0aGlzLnZpc2libGUgfHwgIWlzTGF5b3V0KVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoISF0aGlzLnZpc2libGVJZiAmJiAhIW9iailcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZpc2libGVJZihvYmopO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShKc29uT2JqZWN0UHJvcGVydHkucHJvdG90eXBlLCBcInZpc2libGVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZpc2libGVWYWx1ZSAhPSBudWxsID8gdGhpcy52aXNpYmxlVmFsdWUgOiB0cnVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMudmlzaWJsZVZhbHVlID0gdmFsO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEpzb25PYmplY3RQcm9wZXJ0eS5wcm90b3R5cGUsIFwiaXNMb2NhbGl6YWJsZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNMb2NhbGl6YWJsZVZhbHVlICE9IG51bGwgPyB0aGlzLmlzTG9jYWxpemFibGVWYWx1ZSA6IGZhbHNlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuaXNMb2NhbGl6YWJsZVZhbHVlID0gdmFsO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEpzb25PYmplY3RQcm9wZXJ0eS5wcm90b3R5cGUsIFwiZGF0YUxpc3RcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHRoaXMuZGF0YUxpc3RWYWx1ZSkgPyB0aGlzLmRhdGFMaXN0VmFsdWUgOiBbXTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFMaXN0VmFsdWUgPSB2YWw7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBKc29uT2JqZWN0UHJvcGVydHkucHJvdG90eXBlLm1lcmdlV2l0aCA9IGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgICAgIHZhciB2YWx1ZXNOYW1lcyA9IEpzb25PYmplY3RQcm9wZXJ0eS5tZXJnYWJsZVZhbHVlcztcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZXNOYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5tZXJnZVZhbHVlKHByb3AsIHZhbHVlc05hbWVzW2ldKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgSnNvbk9iamVjdFByb3BlcnR5LnByb3RvdHlwZS5hZGREZXBlbmRlZFByb3BlcnR5ID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgaWYgKCF0aGlzLmRlcGVuZGVkUHJvcGVydGllcykge1xuICAgICAgICAgICAgdGhpcy5kZXBlbmRlZFByb3BlcnRpZXMgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5kZXBlbmRlZFByb3BlcnRpZXMuaW5kZXhPZihuYW1lKSA8IDApIHtcbiAgICAgICAgICAgIHRoaXMuZGVwZW5kZWRQcm9wZXJ0aWVzLnB1c2gobmFtZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEpzb25PYmplY3RQcm9wZXJ0eS5wcm90b3R5cGUuZ2V0RGVwZW5kZWRQcm9wZXJ0aWVzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLmRlcGVuZGVkUHJvcGVydGllcyA/IHRoaXMuZGVwZW5kZWRQcm9wZXJ0aWVzIDogW107XG4gICAgfTtcbiAgICBKc29uT2JqZWN0UHJvcGVydHkucHJvdG90eXBlLnNjaGVtYVR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmNsYXNzTmFtZSA9PT0gXCJjaG9pY2VzQnlVcmxcIilcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIGlmICh0aGlzLmNsYXNzTmFtZSA9PT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNsYXNzTmFtZTtcbiAgICAgICAgaWYgKCEhdGhpcy5jbGFzc05hbWUpXG4gICAgICAgICAgICByZXR1cm4gXCJhcnJheVwiO1xuICAgICAgICBpZiAoISF0aGlzLmJhc2VDbGFzc05hbWUpXG4gICAgICAgICAgICByZXR1cm4gXCJhcnJheVwiO1xuICAgICAgICBpZiAodGhpcy50eXBlID09IFwic3dpdGNoXCIpXG4gICAgICAgICAgICByZXR1cm4gXCJib29sZWFuXCI7XG4gICAgICAgIGlmICh0aGlzLnR5cGUgPT0gXCJib29sZWFuXCIgfHwgdGhpcy50eXBlID09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy50eXBlO1xuICAgICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICB9O1xuICAgIEpzb25PYmplY3RQcm9wZXJ0eS5wcm90b3R5cGUuc2NoZW1hUmVmID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoISF0aGlzLmNsYXNzTmFtZSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNsYXNzTmFtZTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIEpzb25PYmplY3RQcm9wZXJ0eS5wcm90b3R5cGUubWVyZ2VWYWx1ZSA9IGZ1bmN0aW9uIChwcm9wLCB2YWx1ZU5hbWUpIHtcbiAgICAgICAgaWYgKHRoaXNbdmFsdWVOYW1lXSA9PSBudWxsICYmIHByb3BbdmFsdWVOYW1lXSAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzW3ZhbHVlTmFtZV0gPSBwcm9wW3ZhbHVlTmFtZV07XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEpzb25PYmplY3RQcm9wZXJ0eS5JbmRleCA9IDE7XG4gICAgSnNvbk9iamVjdFByb3BlcnR5Lm1lcmdhYmxlVmFsdWVzID0gW1xuICAgICAgICBcInR5cGVWYWx1ZVwiLFxuICAgICAgICBcImNob2ljZXNWYWx1ZVwiLFxuICAgICAgICBcImJhc2VWYWx1ZVwiLFxuICAgICAgICBcInJlYWRPbmx5VmFsdWVcIixcbiAgICAgICAgXCJ2aXNpYmxlVmFsdWVcIixcbiAgICAgICAgXCJpc1NlcmlhbGl6YWJsZVwiLFxuICAgICAgICBcImlzTGlnaHRTZXJpYWxpemFibGVcIixcbiAgICAgICAgXCJpc0N1c3RvbVwiLFxuICAgICAgICBcImlzQmluZGFibGVcIixcbiAgICAgICAgXCJpc1VuaXF1ZVwiLFxuICAgICAgICBcInVuaXF1ZVByb3BlcnR5TmFtZVwiLFxuICAgICAgICBcImlzRHluYW1pY0Nob2ljZXNcIixcbiAgICAgICAgXCJpc0xvY2FsaXphYmxlVmFsdWVcIixcbiAgICAgICAgXCJjbGFzc05hbWVcIixcbiAgICAgICAgXCJhbHRlcm5hdGl2ZU5hbWVcIixcbiAgICAgICAgXCJsYXlvdXRcIixcbiAgICAgICAgXCJjbGFzc05hbWVQYXJ0XCIsXG4gICAgICAgIFwiYmFzZUNsYXNzTmFtZVwiLFxuICAgICAgICBcImRlZmF1bHRWYWx1ZVwiLFxuICAgICAgICBcImRlZmF1bHRWYWx1ZUZ1bmNcIixcbiAgICAgICAgXCJzZXJpYWxpemF0aW9uUHJvcGVydHlcIixcbiAgICAgICAgXCJvbkdldFZhbHVlXCIsXG4gICAgICAgIFwib25TZXRWYWx1ZVwiLFxuICAgICAgICBcIm9uU2V0dGluZ1ZhbHVlXCIsXG4gICAgICAgIFwiZGlzcGxheU5hbWVcIixcbiAgICAgICAgXCJjYXRlZ29yeVwiLFxuICAgICAgICBcImNhdGVnb3J5SW5kZXhcIixcbiAgICAgICAgXCJ2aXNpYmxlSW5kZXhcIixcbiAgICAgICAgXCJuZXh0VG9Qcm9wZXJ0eVwiLFxuICAgICAgICBcIm92ZXJyaWRpbmdQcm9wZXJ0eVwiLFxuICAgICAgICBcInNob3dNb2RlXCIsXG4gICAgICAgIFwiZGVwZW5kZWRQcm9wZXJ0aWVzXCIsXG4gICAgICAgIFwidmlzaWJsZUlmXCIsXG4gICAgICAgIFwib25FeGVjdXRlRXhwcmVzc2lvblwiLFxuICAgICAgICBcIm9uUHJvcGVydHlFZGl0b3JVcGRhdGVcIixcbiAgICAgICAgXCJtYXhMZW5ndGhcIixcbiAgICAgICAgXCJtYXhWYWx1ZVwiLFxuICAgICAgICBcIm1pblZhbHVlXCIsXG4gICAgICAgIFwiZGF0YUxpc3RWYWx1ZVwiLFxuICAgIF07XG4gICAgcmV0dXJuIEpzb25PYmplY3RQcm9wZXJ0eTtcbn0oKSk7XG5cbnZhciBDdXN0b21Qcm9wZXJ0aWVzQ29sbGVjdGlvbiA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBDdXN0b21Qcm9wZXJ0aWVzQ29sbGVjdGlvbigpIHtcbiAgICB9XG4gICAgQ3VzdG9tUHJvcGVydGllc0NvbGxlY3Rpb24uYWRkUHJvcGVydHkgPSBmdW5jdGlvbiAoY2xhc3NOYW1lLCBwcm9wZXJ0eSkge1xuICAgICAgICBjbGFzc05hbWUgPSBjbGFzc05hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgdmFyIHByb3BzID0gQ3VzdG9tUHJvcGVydGllc0NvbGxlY3Rpb24ucHJvcGVydGllcztcbiAgICAgICAgaWYgKCFwcm9wc1tjbGFzc05hbWVdKSB7XG4gICAgICAgICAgICBwcm9wc1tjbGFzc05hbWVdID0gW107XG4gICAgICAgIH1cbiAgICAgICAgcHJvcHNbY2xhc3NOYW1lXS5wdXNoKHByb3BlcnR5KTtcbiAgICB9O1xuICAgIEN1c3RvbVByb3BlcnRpZXNDb2xsZWN0aW9uLnJlbW92ZVByb3BlcnR5ID0gZnVuY3Rpb24gKGNsYXNzTmFtZSwgcHJvcGVydHlOYW1lKSB7XG4gICAgICAgIGNsYXNzTmFtZSA9IGNsYXNzTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICB2YXIgcHJvcHMgPSBDdXN0b21Qcm9wZXJ0aWVzQ29sbGVjdGlvbi5wcm9wZXJ0aWVzO1xuICAgICAgICBpZiAoIXByb3BzW2NsYXNzTmFtZV0pXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciBwcm9wZXJ0aWVzID0gcHJvcHNbY2xhc3NOYW1lXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAocHJvcGVydGllc1tpXS5uYW1lID09IHByb3BlcnR5TmFtZSkge1xuICAgICAgICAgICAgICAgIHByb3BzW2NsYXNzTmFtZV0uc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBDdXN0b21Qcm9wZXJ0aWVzQ29sbGVjdGlvbi5yZW1vdmVBbGxQcm9wZXJ0aWVzID0gZnVuY3Rpb24gKGNsYXNzTmFtZSkge1xuICAgICAgICBjbGFzc05hbWUgPSBjbGFzc05hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgZGVsZXRlIEN1c3RvbVByb3BlcnRpZXNDb2xsZWN0aW9uLnByb3BlcnRpZXNbY2xhc3NOYW1lXTtcbiAgICB9O1xuICAgIEN1c3RvbVByb3BlcnRpZXNDb2xsZWN0aW9uLmFkZENsYXNzID0gZnVuY3Rpb24gKGNsYXNzTmFtZSwgcGFyZW50Q2xhc3NOYW1lKSB7XG4gICAgICAgIGNsYXNzTmFtZSA9IGNsYXNzTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAocGFyZW50Q2xhc3NOYW1lKSB7XG4gICAgICAgICAgICBwYXJlbnRDbGFzc05hbWUgPSBwYXJlbnRDbGFzc05hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgfVxuICAgICAgICBDdXN0b21Qcm9wZXJ0aWVzQ29sbGVjdGlvbi5wYXJlbnRDbGFzc2VzW2NsYXNzTmFtZV0gPSBwYXJlbnRDbGFzc05hbWU7XG4gICAgfTtcbiAgICBDdXN0b21Qcm9wZXJ0aWVzQ29sbGVjdGlvbi5nZXRQcm9wZXJ0aWVzID0gZnVuY3Rpb24gKGNsYXNzTmFtZSkge1xuICAgICAgICBjbGFzc05hbWUgPSBjbGFzc05hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgdmFyIHJlcyA9IFtdO1xuICAgICAgICB2YXIgcHJvcHMgPSBDdXN0b21Qcm9wZXJ0aWVzQ29sbGVjdGlvbi5wcm9wZXJ0aWVzO1xuICAgICAgICB3aGlsZSAoY2xhc3NOYW1lKSB7XG4gICAgICAgICAgICB2YXIgcHJvcGVydGllcyA9IHByb3BzW2NsYXNzTmFtZV07XG4gICAgICAgICAgICBpZiAocHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICByZXMucHVzaChwcm9wZXJ0aWVzW2ldKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjbGFzc05hbWUgPSBDdXN0b21Qcm9wZXJ0aWVzQ29sbGVjdGlvbi5wYXJlbnRDbGFzc2VzW2NsYXNzTmFtZV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9O1xuICAgIEN1c3RvbVByb3BlcnRpZXNDb2xsZWN0aW9uLmNyZWF0ZVByb3BlcnRpZXMgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIGlmICghb2JqIHx8ICFvYmouZ2V0VHlwZSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgQ3VzdG9tUHJvcGVydGllc0NvbGxlY3Rpb24uY3JlYXRlUHJvcGVydGllc0NvcmUob2JqLCBvYmouZ2V0VHlwZSgpKTtcbiAgICB9O1xuICAgIEN1c3RvbVByb3BlcnRpZXNDb2xsZWN0aW9uLmNyZWF0ZVByb3BlcnRpZXNDb3JlID0gZnVuY3Rpb24gKG9iaiwgY2xhc3NOYW1lKSB7XG4gICAgICAgIHZhciBwcm9wcyA9IEN1c3RvbVByb3BlcnRpZXNDb2xsZWN0aW9uLnByb3BlcnRpZXM7XG4gICAgICAgIGlmIChwcm9wc1tjbGFzc05hbWVdKSB7XG4gICAgICAgICAgICBDdXN0b21Qcm9wZXJ0aWVzQ29sbGVjdGlvbi5jcmVhdGVQcm9wZXJ0aWVzSW5PYmoob2JqLCBwcm9wc1tjbGFzc05hbWVdKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcGFyZW50Q2xhc3MgPSBDdXN0b21Qcm9wZXJ0aWVzQ29sbGVjdGlvbi5wYXJlbnRDbGFzc2VzW2NsYXNzTmFtZV07XG4gICAgICAgIGlmIChwYXJlbnRDbGFzcykge1xuICAgICAgICAgICAgQ3VzdG9tUHJvcGVydGllc0NvbGxlY3Rpb24uY3JlYXRlUHJvcGVydGllc0NvcmUob2JqLCBwYXJlbnRDbGFzcyk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEN1c3RvbVByb3BlcnRpZXNDb2xsZWN0aW9uLmNyZWF0ZVByb3BlcnRpZXNJbk9iaiA9IGZ1bmN0aW9uIChvYmosIHByb3BlcnRpZXMpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBDdXN0b21Qcm9wZXJ0aWVzQ29sbGVjdGlvbi5jcmVhdGVQcm9wZXJ0eUluT2JqKG9iaiwgcHJvcGVydGllc1tpXSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEN1c3RvbVByb3BlcnRpZXNDb2xsZWN0aW9uLmNyZWF0ZVByb3BlcnR5SW5PYmogPSBmdW5jdGlvbiAob2JqLCBwcm9wKSB7XG4gICAgICAgIGlmIChDdXN0b21Qcm9wZXJ0aWVzQ29sbGVjdGlvbi5jaGVja0lzUHJvcGVydHlFeGlzdHMob2JqLCBwcm9wLm5hbWUpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAoISFwcm9wLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eSAmJiBDdXN0b21Qcm9wZXJ0aWVzQ29sbGVjdGlvbi5jaGVja0lzUHJvcGVydHlFeGlzdHMob2JqLCBwcm9wLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eSkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmIChwcm9wLmlzTG9jYWxpemFibGUgJiZcbiAgICAgICAgICAgIHByb3Auc2VyaWFsaXphdGlvblByb3BlcnR5ICYmXG4gICAgICAgICAgICBvYmouY3JlYXRlQ3VzdG9tTG9jYWxpemFibGVPYmopIHtcbiAgICAgICAgICAgIG9iai5jcmVhdGVDdXN0b21Mb2NhbGl6YWJsZU9iaihwcm9wLm5hbWUpO1xuICAgICAgICAgICAgdmFyIGxvY0Rlc2MgPSB7XG4gICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmouZ2V0TG9jYWxpemFibGVTdHJpbmcocHJvcC5uYW1lKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIHByb3Auc2VyaWFsaXphdGlvblByb3BlcnR5LCBsb2NEZXNjKTtcbiAgICAgICAgICAgIHZhciBkZXNjID0ge1xuICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChwcm9wLm5hbWUsIHByb3AuZGVmYXVsdFZhbHVlKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JqLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChwcm9wLm5hbWUsIHYpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgcHJvcC5uYW1lLCBkZXNjKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciBkZWZhdWx0VmFsdWUgPSBwcm9wLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgIHZhciBpc0FycmF5UHJvcCA9IHByb3AuaXNBcnJheSB8fCBwcm9wLnR5cGUgPT09IFwibXVsdGlwbGV2YWx1ZXNcIjtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqLmNyZWF0ZU5ld0FycmF5ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoSnNvbk9iamVjdC5tZXRhRGF0YS5pc0Rlc2NlbmRhbnRPZihwcm9wLmNsYXNzTmFtZSwgXCJpdGVtdmFsdWVcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JqLmNyZWF0ZU5ld0FycmF5KHByb3AubmFtZSwgZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0ubG9jT3duZXIgPSBvYmo7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtLm93bmVyUHJvcGVydHlOYW1lID0gcHJvcC5uYW1lO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgaXNBcnJheVByb3AgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy9JdCBpcyBhIHNpbXBsZSBhcnJheSBwcm9wZXJ0eVxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNBcnJheVByb3ApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9iai5jcmVhdGVOZXdBcnJheShwcm9wLm5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpc0FycmF5UHJvcCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkZWZhdWx0VmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvYmouc2V0UHJvcGVydHlWYWx1ZShwcm9wLm5hbWUsIGRlZmF1bHRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoISFvYmouZ2V0UHJvcGVydHlWYWx1ZSAmJiAhIW9iai5zZXRQcm9wZXJ0eVZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdmFyIGRlc2MgPSB7XG4gICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhcHJvcC5vbkdldFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb3Aub25HZXRWYWx1ZShvYmopO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iai5nZXRQcm9wZXJ0eVZhbHVlKHByb3AubmFtZSwgZGVmYXVsdFZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhcHJvcC5vblNldFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcC5vblNldFZhbHVlKG9iaiwgdiwgbnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmouc2V0UHJvcGVydHlWYWx1ZShwcm9wLm5hbWUsIHYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgcHJvcC5uYW1lLCBkZXNjKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvcC50eXBlID09PSBcImNvbmRpdGlvblwiIHx8IHByb3AudHlwZSA9PT0gXCJleHByZXNzaW9uXCIpIHtcbiAgICAgICAgICAgIGlmICghIXByb3Aub25FeGVjdXRlRXhwcmVzc2lvbikge1xuICAgICAgICAgICAgICAgIG9iai5hZGRFeHByZXNzaW9uUHJvcGVydHkocHJvcC5uYW1lLCBwcm9wLm9uRXhlY3V0ZUV4cHJlc3Npb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBDdXN0b21Qcm9wZXJ0aWVzQ29sbGVjdGlvbi5jaGVja0lzUHJvcGVydHlFeGlzdHMgPSBmdW5jdGlvbiAob2JqLCBuYW1lKSB7XG4gICAgICAgIHJldHVybiBvYmouaGFzT3duUHJvcGVydHkobmFtZSkgfHwgb2JqW25hbWVdO1xuICAgIH07XG4gICAgQ3VzdG9tUHJvcGVydGllc0NvbGxlY3Rpb24ucHJvcGVydGllcyA9IHt9O1xuICAgIEN1c3RvbVByb3BlcnRpZXNDb2xsZWN0aW9uLnBhcmVudENsYXNzZXMgPSB7fTtcbiAgICByZXR1cm4gQ3VzdG9tUHJvcGVydGllc0NvbGxlY3Rpb247XG59KCkpO1xuXG52YXIgSnNvbk1ldGFkYXRhQ2xhc3MgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gSnNvbk1ldGFkYXRhQ2xhc3MobmFtZSwgcHJvcGVydGllcywgY3JlYXRvciwgcGFyZW50TmFtZSkge1xuICAgICAgICBpZiAoY3JlYXRvciA9PT0gdm9pZCAwKSB7IGNyZWF0b3IgPSBudWxsOyB9XG4gICAgICAgIGlmIChwYXJlbnROYW1lID09PSB2b2lkIDApIHsgcGFyZW50TmFtZSA9IG51bGw7IH1cbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy5jcmVhdG9yID0gY3JlYXRvcjtcbiAgICAgICAgdGhpcy5wYXJlbnROYW1lID0gcGFyZW50TmFtZTtcbiAgICAgICAgbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgdGhpcy5pc0N1c3RvbVZhbHVlID0gIWNyZWF0b3IgJiYgbmFtZSAhPT0gXCJzdXJ2ZXlcIjtcbiAgICAgICAgaWYgKHRoaXMucGFyZW50TmFtZSkge1xuICAgICAgICAgICAgdGhpcy5wYXJlbnROYW1lID0gdGhpcy5wYXJlbnROYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICBDdXN0b21Qcm9wZXJ0aWVzQ29sbGVjdGlvbi5hZGRDbGFzcyhuYW1lLCB0aGlzLnBhcmVudE5hbWUpO1xuICAgICAgICAgICAgaWYgKCEhY3JlYXRvcikge1xuICAgICAgICAgICAgICAgIHRoaXMubWFrZVBhcmVudFJlZ3VsYXJDbGFzcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJvcGVydGllcyA9IG5ldyBBcnJheSgpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlUHJvcGVydHkocHJvcGVydGllc1tpXSwgdGhpcy5pc0N1c3RvbSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy9PYnNvbGV0ZVxuICAgIEpzb25NZXRhZGF0YUNsYXNzLnByb3RvdHlwZS5maW5kID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByb3BlcnRpZXNbaV0ubmFtZSA9PSBuYW1lKVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgICBKc29uTWV0YWRhdGFDbGFzcy5wcm90b3R5cGUuZmluZFByb3BlcnR5ID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgdGhpcy5maWxsQWxsUHJvcGVydGllcygpO1xuICAgICAgICByZXR1cm4gdGhpcy5oYXNoUHJvcGVydGllc1tuYW1lXTtcbiAgICB9O1xuICAgIEpzb25NZXRhZGF0YUNsYXNzLnByb3RvdHlwZS5nZXRBbGxQcm9wZXJ0aWVzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmZpbGxBbGxQcm9wZXJ0aWVzKCk7XG4gICAgICAgIHJldHVybiB0aGlzLmFsbFByb3BlcnRpZXM7XG4gICAgfTtcbiAgICBKc29uTWV0YWRhdGFDbGFzcy5wcm90b3R5cGUucmVzZXRBbGxQcm9wZXJ0aWVzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmFsbFByb3BlcnRpZXMgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuaGFzaFByb3BlcnRpZXMgPSB1bmRlZmluZWQ7XG4gICAgICAgIHZhciBjaGlsZENsYXNzZXMgPSBTZXJpYWxpemVyLmdldENoaWxkcmVuQ2xhc3Nlcyh0aGlzLm5hbWUpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkQ2xhc3Nlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY2hpbGRDbGFzc2VzW2ldLnJlc2V0QWxsUHJvcGVydGllcygpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSnNvbk1ldGFkYXRhQ2xhc3MucHJvdG90eXBlLCBcImlzQ3VzdG9tXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLmlzQ3VzdG9tVmFsdWU7IH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBKc29uTWV0YWRhdGFDbGFzcy5wcm90b3R5cGUuZmlsbEFsbFByb3BlcnRpZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGlmICghIXRoaXMuYWxsUHJvcGVydGllcylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5hbGxQcm9wZXJ0aWVzID0gW107XG4gICAgICAgIHRoaXMuaGFzaFByb3BlcnRpZXMgPSB7fTtcbiAgICAgICAgdmFyIGxvY2FsUHJvcGVydGllcyA9IHt9O1xuICAgICAgICB0aGlzLnByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbiAocHJvcCkgeyByZXR1cm4gbG9jYWxQcm9wZXJ0aWVzW3Byb3AubmFtZV0gPSBwcm9wOyB9KTtcbiAgICAgICAgdmFyIHBhcmVudENsYXNzID0gISF0aGlzLnBhcmVudE5hbWUgPyBTZXJpYWxpemVyLmZpbmRDbGFzcyh0aGlzLnBhcmVudE5hbWUpIDogbnVsbDtcbiAgICAgICAgaWYgKCEhcGFyZW50Q2xhc3MpIHtcbiAgICAgICAgICAgIHZhciBwYXJlbnRQcm9wZXJ0aWVzID0gcGFyZW50Q2xhc3MuZ2V0QWxsUHJvcGVydGllcygpO1xuICAgICAgICAgICAgcGFyZW50UHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgICAgICAgICAgICAgdmFyIG92ZXJyaWRlZFByb3AgPSBsb2NhbFByb3BlcnRpZXNbcHJvcC5uYW1lXTtcbiAgICAgICAgICAgICAgICBpZiAoISFvdmVycmlkZWRQcm9wKSB7XG4gICAgICAgICAgICAgICAgICAgIG92ZXJyaWRlZFByb3AubWVyZ2VXaXRoKHByb3ApO1xuICAgICAgICAgICAgICAgICAgICBfdGhpcy5hZGRQcm9wQ29yZShvdmVycmlkZWRQcm9wKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIF90aGlzLmFkZFByb3BDb3JlKHByb3ApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgICAgICAgICBpZiAoIV90aGlzLmhhc2hQcm9wZXJ0aWVzW3Byb3AubmFtZV0pIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5hZGRQcm9wQ29yZShwcm9wKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBKc29uTWV0YWRhdGFDbGFzcy5wcm90b3R5cGUuYWRkUHJvcENvcmUgPSBmdW5jdGlvbiAocHJvcCkge1xuICAgICAgICB0aGlzLmFsbFByb3BlcnRpZXMucHVzaChwcm9wKTtcbiAgICAgICAgdGhpcy5oYXNoUHJvcGVydGllc1twcm9wLm5hbWVdID0gcHJvcDtcbiAgICAgICAgaWYgKCEhcHJvcC5hbHRlcm5hdGl2ZU5hbWUpIHtcbiAgICAgICAgICAgIHRoaXMuaGFzaFByb3BlcnRpZXNbcHJvcC5hbHRlcm5hdGl2ZU5hbWVdID0gcHJvcDtcbiAgICAgICAgfVxuICAgIH07XG4gICAgSnNvbk1ldGFkYXRhQ2xhc3MucHJvdG90eXBlLmlzT3ZlcnJpZGVkUHJvcCA9IGZ1bmN0aW9uIChwcm9wTmFtZSkge1xuICAgICAgICByZXR1cm4gISF0aGlzLnBhcmVudE5hbWUgJiYgISFTZXJpYWxpemVyLmZpbmRQcm9wZXJ0eSh0aGlzLnBhcmVudE5hbWUsIHByb3BOYW1lKTtcbiAgICB9O1xuICAgIEpzb25NZXRhZGF0YUNsYXNzLnByb3RvdHlwZS5oYXNSZWd1bGFyQ2hpbGRDbGFzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzQ3VzdG9tKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLmlzQ3VzdG9tVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMucHJvcGVydGllc1tpXS5pc0N1c3RvbSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIEN1c3RvbVByb3BlcnRpZXNDb2xsZWN0aW9uLnJlbW92ZUFsbFByb3BlcnRpZXModGhpcy5uYW1lKTtcbiAgICAgICAgdGhpcy5tYWtlUGFyZW50UmVndWxhckNsYXNzKCk7XG4gICAgfTtcbiAgICBKc29uTWV0YWRhdGFDbGFzcy5wcm90b3R5cGUubWFrZVBhcmVudFJlZ3VsYXJDbGFzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnBhcmVudE5hbWUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciBwYXJlbnQgPSBTZXJpYWxpemVyLmZpbmRDbGFzcyh0aGlzLnBhcmVudE5hbWUpO1xuICAgICAgICBpZiAoISFwYXJlbnQpIHtcbiAgICAgICAgICAgIHBhcmVudC5oYXNSZWd1bGFyQ2hpbGRDbGFzcygpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBKc29uTWV0YWRhdGFDbGFzcy5wcm90b3R5cGUuY3JlYXRlUHJvcGVydHkgPSBmdW5jdGlvbiAocHJvcEluZm8sIGlzQ3VzdG9tKSB7XG4gICAgICAgIGlmIChpc0N1c3RvbSA9PT0gdm9pZCAwKSB7IGlzQ3VzdG9tID0gZmFsc2U7IH1cbiAgICAgICAgdmFyIHByb3BlcnR5TmFtZSA9IHR5cGVvZiBwcm9wSW5mbyA9PT0gXCJzdHJpbmdcIiA/IHByb3BJbmZvIDogcHJvcEluZm8ubmFtZTtcbiAgICAgICAgaWYgKCFwcm9wZXJ0eU5hbWUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciBwcm9wZXJ0eVR5cGUgPSBudWxsO1xuICAgICAgICB2YXIgdHlwZUluZGV4ID0gcHJvcGVydHlOYW1lLmluZGV4T2YoSnNvbk1ldGFkYXRhQ2xhc3MudHlwZVN5bWJvbCk7XG4gICAgICAgIGlmICh0eXBlSW5kZXggPiAtMSkge1xuICAgICAgICAgICAgcHJvcGVydHlUeXBlID0gcHJvcGVydHlOYW1lLnN1YnN0cmluZyh0eXBlSW5kZXggKyAxKTtcbiAgICAgICAgICAgIHByb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZS5zdWJzdHJpbmcoMCwgdHlwZUluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgaXNSZXF1aXJlZCA9IHRoaXMuZ2V0SXNQcm9wZXJ0eU5hbWVSZXF1aXJlZChwcm9wZXJ0eU5hbWUpIHx8ICEhcHJvcEluZm8uaXNSZXF1aXJlZDtcbiAgICAgICAgcHJvcGVydHlOYW1lID0gdGhpcy5nZXRQcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lKTtcbiAgICAgICAgdmFyIHByb3AgPSBuZXcgSnNvbk9iamVjdFByb3BlcnR5KHRoaXMsIHByb3BlcnR5TmFtZSwgaXNSZXF1aXJlZCk7XG4gICAgICAgIGlmIChwcm9wZXJ0eVR5cGUpIHtcbiAgICAgICAgICAgIHByb3AudHlwZSA9IHByb3BlcnR5VHlwZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHByb3BJbmZvID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICBpZiAocHJvcEluZm8udHlwZSkge1xuICAgICAgICAgICAgICAgIHByb3AudHlwZSA9IHByb3BJbmZvLnR5cGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocHJvcEluZm8uZGVmYXVsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcHJvcC5kZWZhdWx0VmFsdWUgPSBwcm9wSW5mby5kZWZhdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByb3BJbmZvLmRlZmF1bHRGdW5jICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBwcm9wLmRlZmF1bHRWYWx1ZUZ1bmMgPSBwcm9wSW5mby5kZWZhdWx0RnVuYztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghX2hlbHBlcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIkhlbHBlcnNcIl0uaXNWYWx1ZUVtcHR5KHByb3BJbmZvLmlzU2VyaWFsaXphYmxlKSkge1xuICAgICAgICAgICAgICAgIHByb3AuaXNTZXJpYWxpemFibGUgPSBwcm9wSW5mby5pc1NlcmlhbGl6YWJsZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghX2hlbHBlcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIkhlbHBlcnNcIl0uaXNWYWx1ZUVtcHR5KHByb3BJbmZvLmlzTGlnaHRTZXJpYWxpemFibGUpKSB7XG4gICAgICAgICAgICAgICAgcHJvcC5pc0xpZ2h0U2VyaWFsaXphYmxlID0gcHJvcEluZm8uaXNMaWdodFNlcmlhbGl6YWJsZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghX2hlbHBlcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIkhlbHBlcnNcIl0uaXNWYWx1ZUVtcHR5KHByb3BJbmZvLm1heExlbmd0aCkpIHtcbiAgICAgICAgICAgICAgICBwcm9wLm1heExlbmd0aCA9IHByb3BJbmZvLm1heExlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghX2hlbHBlcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIkhlbHBlcnNcIl0uaXNWYWx1ZUVtcHR5KHByb3BJbmZvLmRpc3BsYXlOYW1lKSkge1xuICAgICAgICAgICAgICAgIHByb3AuZGlzcGxheU5hbWUgPSBwcm9wSW5mby5kaXNwbGF5TmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghX2hlbHBlcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIkhlbHBlcnNcIl0uaXNWYWx1ZUVtcHR5KHByb3BJbmZvLmNhdGVnb3J5KSkge1xuICAgICAgICAgICAgICAgIHByb3AuY2F0ZWdvcnkgPSBwcm9wSW5mby5jYXRlZ29yeTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghX2hlbHBlcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIkhlbHBlcnNcIl0uaXNWYWx1ZUVtcHR5KHByb3BJbmZvLmNhdGVnb3J5SW5kZXgpKSB7XG4gICAgICAgICAgICAgICAgcHJvcC5jYXRlZ29yeUluZGV4ID0gcHJvcEluZm8uY2F0ZWdvcnlJbmRleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghX2hlbHBlcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIkhlbHBlcnNcIl0uaXNWYWx1ZUVtcHR5KHByb3BJbmZvLm5leHRUb1Byb3BlcnR5KSkge1xuICAgICAgICAgICAgICAgIHByb3AubmV4dFRvUHJvcGVydHkgPSBwcm9wSW5mby5uZXh0VG9Qcm9wZXJ0eTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghX2hlbHBlcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIkhlbHBlcnNcIl0uaXNWYWx1ZUVtcHR5KHByb3BJbmZvLm92ZXJyaWRpbmdQcm9wZXJ0eSkpIHtcbiAgICAgICAgICAgICAgICBwcm9wLm92ZXJyaWRpbmdQcm9wZXJ0eSA9IHByb3BJbmZvLm92ZXJyaWRpbmdQcm9wZXJ0eTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghX2hlbHBlcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIkhlbHBlcnNcIl0uaXNWYWx1ZUVtcHR5KHByb3BJbmZvLnZpc2libGVJbmRleCkpIHtcbiAgICAgICAgICAgICAgICBwcm9wLnZpc2libGVJbmRleCA9IHByb3BJbmZvLnZpc2libGVJbmRleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghX2hlbHBlcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIkhlbHBlcnNcIl0uaXNWYWx1ZUVtcHR5KHByb3BJbmZvLnNob3dNb2RlKSkge1xuICAgICAgICAgICAgICAgIHByb3Auc2hvd01vZGUgPSBwcm9wSW5mby5zaG93TW9kZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghX2hlbHBlcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIkhlbHBlcnNcIl0uaXNWYWx1ZUVtcHR5KHByb3BJbmZvLm1heFZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHByb3AubWF4VmFsdWUgPSBwcm9wSW5mby5tYXhWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghX2hlbHBlcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIkhlbHBlcnNcIl0uaXNWYWx1ZUVtcHR5KHByb3BJbmZvLm1pblZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHByb3AubWluVmFsdWUgPSBwcm9wSW5mby5taW5WYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghX2hlbHBlcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIkhlbHBlcnNcIl0uaXNWYWx1ZUVtcHR5KHByb3BJbmZvLmRhdGFMaXN0KSkge1xuICAgICAgICAgICAgICAgIHByb3AuZGF0YUxpc3QgPSBwcm9wSW5mby5kYXRhTGlzdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghX2hlbHBlcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIkhlbHBlcnNcIl0uaXNWYWx1ZUVtcHR5KHByb3BJbmZvLmlzRHluYW1pY0Nob2ljZXMpKSB7XG4gICAgICAgICAgICAgICAgcHJvcC5pc0R5bmFtaWNDaG9pY2VzID0gcHJvcEluZm8uaXNEeW5hbWljQ2hvaWNlcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghX2hlbHBlcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIkhlbHBlcnNcIl0uaXNWYWx1ZUVtcHR5KHByb3BJbmZvLmlzQmluZGFibGUpKSB7XG4gICAgICAgICAgICAgICAgcHJvcC5pc0JpbmRhYmxlID0gcHJvcEluZm8uaXNCaW5kYWJsZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghX2hlbHBlcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIkhlbHBlcnNcIl0uaXNWYWx1ZUVtcHR5KHByb3BJbmZvLmlzVW5pcXVlKSkge1xuICAgICAgICAgICAgICAgIHByb3AuaXNVbmlxdWUgPSBwcm9wSW5mby5pc1VuaXF1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghX2hlbHBlcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIkhlbHBlcnNcIl0uaXNWYWx1ZUVtcHR5KHByb3BJbmZvLnVuaXF1ZVByb3BlcnR5KSkge1xuICAgICAgICAgICAgICAgIHByb3AudW5pcXVlUHJvcGVydHlOYW1lID0gcHJvcEluZm8udW5pcXVlUHJvcGVydHk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIV9oZWxwZXJzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJIZWxwZXJzXCJdLmlzVmFsdWVFbXB0eShwcm9wSW5mby5pc0FycmF5KSkge1xuICAgICAgICAgICAgICAgIHByb3AuaXNBcnJheSA9IHByb3BJbmZvLmlzQXJyYXk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocHJvcEluZm8udmlzaWJsZSA9PT0gdHJ1ZSB8fCBwcm9wSW5mby52aXNpYmxlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHByb3AudmlzaWJsZSA9IHByb3BJbmZvLnZpc2libGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoISFwcm9wSW5mby52aXNpYmxlSWYpIHtcbiAgICAgICAgICAgICAgICBwcm9wLnZpc2libGVJZiA9IHByb3BJbmZvLnZpc2libGVJZjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghIXByb3BJbmZvLm9uRXhlY3V0ZUV4cHJlc3Npb24pIHtcbiAgICAgICAgICAgICAgICBwcm9wLm9uRXhlY3V0ZUV4cHJlc3Npb24gPSBwcm9wSW5mby5vbkV4ZWN1dGVFeHByZXNzaW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCEhcHJvcEluZm8ub25Qcm9wZXJ0eUVkaXRvclVwZGF0ZSkge1xuICAgICAgICAgICAgICAgIHByb3Aub25Qcm9wZXJ0eUVkaXRvclVwZGF0ZSA9IHByb3BJbmZvLm9uUHJvcGVydHlFZGl0b3JVcGRhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocHJvcEluZm8ucmVhZE9ubHkgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICBwcm9wLnJlYWRPbmx5ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwcm9wSW5mby5jaG9pY2VzKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNob2ljZXNGdW5jID0gdHlwZW9mIHByb3BJbmZvLmNob2ljZXMgPT09IFwiZnVuY3Rpb25cIiA/IHByb3BJbmZvLmNob2ljZXMgOiBudWxsO1xuICAgICAgICAgICAgICAgIHZhciBjaG9pY2VzVmFsdWUgPSB0eXBlb2YgcHJvcEluZm8uY2hvaWNlcyAhPT0gXCJmdW5jdGlvblwiID8gcHJvcEluZm8uY2hvaWNlcyA6IG51bGw7XG4gICAgICAgICAgICAgICAgcHJvcC5zZXRDaG9pY2VzKGNob2ljZXNWYWx1ZSwgY2hvaWNlc0Z1bmMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCEhcHJvcEluZm8uYmFzZVZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcHJvcC5zZXRCYXNlVmFsdWUocHJvcEluZm8uYmFzZVZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwcm9wSW5mby5vbkdldFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcHJvcC5vbkdldFZhbHVlID0gcHJvcEluZm8ub25HZXRWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwcm9wSW5mby5vblNldFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcHJvcC5vblNldFZhbHVlID0gcHJvcEluZm8ub25TZXRWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwcm9wSW5mby5vblNldHRpbmdWYWx1ZSkge1xuICAgICAgICAgICAgICAgIHByb3Aub25TZXR0aW5nVmFsdWUgPSBwcm9wSW5mby5vblNldHRpbmdWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwcm9wSW5mby5pc0xvY2FsaXphYmxlKSB7XG4gICAgICAgICAgICAgICAgcHJvcEluZm8uc2VyaWFsaXphdGlvblByb3BlcnR5ID0gXCJsb2NcIiArIHByb3AubmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwcm9wSW5mby5zZXJpYWxpemF0aW9uUHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgICBwcm9wLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eSA9IHByb3BJbmZvLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eTtcbiAgICAgICAgICAgICAgICB2YXIgcztcbiAgICAgICAgICAgICAgICBpZiAocHJvcC5zZXJpYWxpemF0aW9uUHJvcGVydHkgJiZcbiAgICAgICAgICAgICAgICAgICAgcHJvcC5zZXJpYWxpemF0aW9uUHJvcGVydHkuaW5kZXhPZihcImxvY1wiKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb3AuaXNMb2NhbGl6YWJsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByb3BJbmZvLmlzTG9jYWxpemFibGUpIHtcbiAgICAgICAgICAgICAgICBwcm9wLmlzTG9jYWxpemFibGUgPSBwcm9wSW5mby5pc0xvY2FsaXphYmxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByb3BJbmZvLmNsYXNzTmFtZSkge1xuICAgICAgICAgICAgICAgIHByb3AuY2xhc3NOYW1lID0gcHJvcEluZm8uY2xhc3NOYW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByb3BJbmZvLmJhc2VDbGFzc05hbWUpIHtcbiAgICAgICAgICAgICAgICBwcm9wLmJhc2VDbGFzc05hbWUgPSBwcm9wSW5mby5iYXNlQ2xhc3NOYW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByb3BJbmZvLmNsYXNzTmFtZVBhcnQpIHtcbiAgICAgICAgICAgICAgICBwcm9wLmNsYXNzTmFtZVBhcnQgPSBwcm9wSW5mby5jbGFzc05hbWVQYXJ0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByb3BJbmZvLmFsdGVybmF0aXZlTmFtZSkge1xuICAgICAgICAgICAgICAgIHByb3AuYWx0ZXJuYXRpdmVOYW1lID0gcHJvcEluZm8uYWx0ZXJuYXRpdmVOYW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByb3BJbmZvLmxheW91dCkge1xuICAgICAgICAgICAgICAgIHByb3AubGF5b3V0ID0gcHJvcEluZm8ubGF5b3V0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByb3BJbmZvLmRlcGVuZHNPbikge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkRGVwZW5kc09uUHJvcGVydGllcyhwcm9wLCBwcm9wSW5mby5kZXBlbmRzT24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJvcGVydGllcy5wdXNoKHByb3ApO1xuICAgICAgICBpZiAoaXNDdXN0b20gJiYgIXRoaXMuaXNPdmVycmlkZWRQcm9wKHByb3AubmFtZSkpIHtcbiAgICAgICAgICAgIHByb3AuaXNDdXN0b20gPSB0cnVlO1xuICAgICAgICAgICAgQ3VzdG9tUHJvcGVydGllc0NvbGxlY3Rpb24uYWRkUHJvcGVydHkodGhpcy5uYW1lLCBwcm9wKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJvcDtcbiAgICB9O1xuICAgIEpzb25NZXRhZGF0YUNsYXNzLnByb3RvdHlwZS5hZGREZXBlbmRzT25Qcm9wZXJ0aWVzID0gZnVuY3Rpb24gKHByb3AsIGRlcGVuZHNPbikge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkZXBlbmRzT24pKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRlcGVuZHNPbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkRGVwZW5kc09uUHJvcGVydHkocHJvcCwgZGVwZW5kc09uW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYWRkRGVwZW5kc09uUHJvcGVydHkocHJvcCwgZGVwZW5kc09uKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgSnNvbk1ldGFkYXRhQ2xhc3MucHJvdG90eXBlLmFkZERlcGVuZHNPblByb3BlcnR5ID0gZnVuY3Rpb24gKHByb3AsIGRlcGVuZHNPbikge1xuICAgICAgICB2YXIgcHJvcGVydHkgPSB0aGlzLmZpbmQoZGVwZW5kc09uKTtcbiAgICAgICAgaWYgKCFwcm9wZXJ0eSkge1xuICAgICAgICAgICAgcHJvcGVydHkgPSBTZXJpYWxpemVyLmZpbmRQcm9wZXJ0eSh0aGlzLnBhcmVudE5hbWUsIGRlcGVuZHNPbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFwcm9wZXJ0eSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgcHJvcGVydHkuYWRkRGVwZW5kZWRQcm9wZXJ0eShwcm9wLm5hbWUpO1xuICAgIH07XG4gICAgSnNvbk1ldGFkYXRhQ2xhc3MucHJvdG90eXBlLmdldElzUHJvcGVydHlOYW1lUmVxdWlyZWQgPSBmdW5jdGlvbiAocHJvcGVydHlOYW1lKSB7XG4gICAgICAgIHJldHVybiAocHJvcGVydHlOYW1lLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgIHByb3BlcnR5TmFtZVswXSA9PSBKc29uTWV0YWRhdGFDbGFzcy5yZXF1aXJlZFN5bWJvbCk7XG4gICAgfTtcbiAgICBKc29uTWV0YWRhdGFDbGFzcy5wcm90b3R5cGUuZ2V0UHJvcGVydHlOYW1lID0gZnVuY3Rpb24gKHByb3BlcnR5TmFtZSkge1xuICAgICAgICBpZiAoIXRoaXMuZ2V0SXNQcm9wZXJ0eU5hbWVSZXF1aXJlZChwcm9wZXJ0eU5hbWUpKVxuICAgICAgICAgICAgcmV0dXJuIHByb3BlcnR5TmFtZTtcbiAgICAgICAgcHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lLnNsaWNlKDEpO1xuICAgICAgICByZXR1cm4gcHJvcGVydHlOYW1lO1xuICAgIH07XG4gICAgSnNvbk1ldGFkYXRhQ2xhc3MucmVxdWlyZWRTeW1ib2wgPSBcIiFcIjtcbiAgICBKc29uTWV0YWRhdGFDbGFzcy50eXBlU3ltYm9sID0gXCI6XCI7XG4gICAgcmV0dXJuIEpzb25NZXRhZGF0YUNsYXNzO1xufSgpKTtcblxuLyoqXG4gKiBUaGUgbWV0YWRhdGEgb2JqZWN0LiBJdCBjb250YWlucyBvYmplY3QgcHJvcGVydGllcycgcnVudGltZSBpbmZvcm1hdGlvbiBhbmQgYWxsb3dzIHlvdSB0byBtb2RpZnkgaXQuXG4gKi9cbnZhciBKc29uTWV0YWRhdGEgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gSnNvbk1ldGFkYXRhKCkge1xuICAgICAgICB0aGlzLmNsYXNzZXMgPSB7fTtcbiAgICAgICAgdGhpcy5hbHRlcm5hdGl2ZU5hbWVzID0ge307XG4gICAgICAgIHRoaXMuY2hpbGRyZW5DbGFzc2VzID0ge307XG4gICAgfVxuICAgIEpzb25NZXRhZGF0YS5wcm90b3R5cGUuZ2V0T2JqUHJvcGVydHlWYWx1ZSA9IGZ1bmN0aW9uIChvYmosIG5hbWUpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNPYmpXcmFwcGVyKG9iaikpIHtcbiAgICAgICAgICAgIHZhciBvcmlnbmFsT2JqID0gb2JqLmdldE9yaWdpbmFsT2JqKCk7XG4gICAgICAgICAgICB2YXIgcHJvcCA9IFNlcmlhbGl6ZXIuZmluZFByb3BlcnR5KG9yaWduYWxPYmouZ2V0VHlwZSgpLCBuYW1lKTtcbiAgICAgICAgICAgIGlmICghIXByb3ApXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T2JqUHJvcGVydHlWYWx1ZUNvcmUob3JpZ25hbE9iaiwgcHJvcCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHByb3AgPSBTZXJpYWxpemVyLmZpbmRQcm9wZXJ0eShvYmouZ2V0VHlwZSgpLCBuYW1lKTtcbiAgICAgICAgaWYgKCFwcm9wKVxuICAgICAgICAgICAgcmV0dXJuIG9ialtuYW1lXTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T2JqUHJvcGVydHlWYWx1ZUNvcmUob2JqLCBwcm9wKTtcbiAgICB9O1xuICAgIEpzb25NZXRhZGF0YS5wcm90b3R5cGUuc2V0T2JqUHJvcGVydHlWYWx1ZSA9IGZ1bmN0aW9uIChvYmosIG5hbWUsIHZhbCkge1xuICAgICAgICBpZiAob2JqW25hbWVdID09PSB2YWwpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmICghIW9ialtuYW1lXSAmJiAhIW9ialtuYW1lXS5zZXRKc29uKSB7XG4gICAgICAgICAgICBvYmpbbmFtZV0uc2V0SnNvbih2YWwpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgICAgICAgICAgIHZhciBuZXdWYWwgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbC5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgICAgICAgICAgbmV3VmFsLnB1c2godmFsW2ldKTtcbiAgICAgICAgICAgICAgICB2YWwgPSBuZXdWYWw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvYmpbbmFtZV0gPSB2YWw7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEpzb25NZXRhZGF0YS5wcm90b3R5cGUuZ2V0T2JqUHJvcGVydHlWYWx1ZUNvcmUgPSBmdW5jdGlvbiAob2JqLCBwcm9wKSB7XG4gICAgICAgIGlmICghcHJvcC5pc1NlcmlhbGl6YWJsZSlcbiAgICAgICAgICAgIHJldHVybiBvYmpbcHJvcC5uYW1lXTtcbiAgICAgICAgaWYgKHByb3AuaXNMb2NhbGl6YWJsZSkge1xuICAgICAgICAgICAgaWYgKHByb3AuaXNBcnJheSlcbiAgICAgICAgICAgICAgICByZXR1cm4gb2JqW3Byb3AubmFtZV07XG4gICAgICAgICAgICBpZiAoISFwcm9wLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eSlcbiAgICAgICAgICAgICAgICByZXR1cm4gb2JqW3Byb3Auc2VyaWFsaXphdGlvblByb3BlcnR5XS50ZXh0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmouZ2V0UHJvcGVydHlWYWx1ZShwcm9wLm5hbWUpO1xuICAgIH07XG4gICAgSnNvbk1ldGFkYXRhLnByb3RvdHlwZS5pc09ialdyYXBwZXIgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIHJldHVybiAhIW9iai5nZXRPcmlnaW5hbE9iaiAmJiAhIW9iai5nZXRPcmlnaW5hbE9iaigpO1xuICAgIH07XG4gICAgSnNvbk1ldGFkYXRhLnByb3RvdHlwZS5hZGRDbGFzcyA9IGZ1bmN0aW9uIChuYW1lLCBwcm9wZXJ0aWVzLCBjcmVhdG9yLCBwYXJlbnROYW1lKSB7XG4gICAgICAgIGlmIChjcmVhdG9yID09PSB2b2lkIDApIHsgY3JlYXRvciA9IG51bGw7IH1cbiAgICAgICAgaWYgKHBhcmVudE5hbWUgPT09IHZvaWQgMCkgeyBwYXJlbnROYW1lID0gbnVsbDsgfVxuICAgICAgICBuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICB2YXIgbWV0YURhdGFDbGFzcyA9IG5ldyBKc29uTWV0YWRhdGFDbGFzcyhuYW1lLCBwcm9wZXJ0aWVzLCBjcmVhdG9yLCBwYXJlbnROYW1lKTtcbiAgICAgICAgdGhpcy5jbGFzc2VzW25hbWVdID0gbWV0YURhdGFDbGFzcztcbiAgICAgICAgaWYgKHBhcmVudE5hbWUpIHtcbiAgICAgICAgICAgIHBhcmVudE5hbWUgPSBwYXJlbnROYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuQ2xhc3Nlc1twYXJlbnROYW1lXTtcbiAgICAgICAgICAgIGlmICghY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoaWxkcmVuQ2xhc3Nlc1twYXJlbnROYW1lXSA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbkNsYXNzZXNbcGFyZW50TmFtZV0ucHVzaChtZXRhRGF0YUNsYXNzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWV0YURhdGFDbGFzcztcbiAgICB9O1xuICAgIEpzb25NZXRhZGF0YS5wcm90b3R5cGUucmVtb3ZlQ2xhc3MgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICB2YXIgbWV0YUNsYXNzID0gdGhpcy5maW5kQ2xhc3MobmFtZSk7XG4gICAgICAgIGlmICghbWV0YUNsYXNzKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBkZWxldGUgdGhpcy5jbGFzc2VzW21ldGFDbGFzcy5uYW1lXTtcbiAgICAgICAgaWYgKCEhbWV0YUNsYXNzLnBhcmVudE5hbWUpIHtcbiAgICAgICAgICAgIHZhciBpbmRleCA9IHRoaXMuY2hpbGRyZW5DbGFzc2VzW21ldGFDbGFzcy5wYXJlbnROYW1lXS5pbmRleE9mKG1ldGFDbGFzcyk7XG4gICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5DbGFzc2VzW21ldGFDbGFzcy5wYXJlbnROYW1lXS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBKc29uTWV0YWRhdGEucHJvdG90eXBlLm92ZXJyaWRlQ2xhc3NDcmVhdG9yZSA9IGZ1bmN0aW9uIChuYW1lLCBjcmVhdG9yKSB7XG4gICAgICAgIHRoaXMub3ZlcnJpZGVDbGFzc0NyZWF0b3IobmFtZSwgY3JlYXRvcik7XG4gICAgfTtcbiAgICBKc29uTWV0YWRhdGEucHJvdG90eXBlLm92ZXJyaWRlQ2xhc3NDcmVhdG9yID0gZnVuY3Rpb24gKG5hbWUsIGNyZWF0b3IpIHtcbiAgICAgICAgbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgdmFyIG1ldGFEYXRhQ2xhc3MgPSB0aGlzLmZpbmRDbGFzcyhuYW1lKTtcbiAgICAgICAgaWYgKG1ldGFEYXRhQ2xhc3MpIHtcbiAgICAgICAgICAgIG1ldGFEYXRhQ2xhc3MuY3JlYXRvciA9IGNyZWF0b3I7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEpzb25NZXRhZGF0YS5wcm90b3R5cGUuZ2V0UHJvcGVydGllcyA9IGZ1bmN0aW9uIChjbGFzc05hbWUpIHtcbiAgICAgICAgdmFyIG1ldGFDbGFzcyA9IHRoaXMuZmluZENsYXNzKGNsYXNzTmFtZSk7XG4gICAgICAgIGlmICghbWV0YUNsYXNzKVxuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICByZXR1cm4gbWV0YUNsYXNzLmdldEFsbFByb3BlcnRpZXMoKTtcbiAgICB9O1xuICAgIEpzb25NZXRhZGF0YS5wcm90b3R5cGUuZ2V0UHJvcGVydGllc0J5T2JqID0gZnVuY3Rpb24gKG9iaikge1xuICAgICAgICBpZiAoIW9iaiB8fCAhb2JqLmdldFR5cGUpXG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIHZhciByZXMgPSB7fTtcbiAgICAgICAgdmFyIHByb3BzID0gdGhpcy5nZXRQcm9wZXJ0aWVzKG9iai5nZXRUeXBlKCkpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICByZXNbcHJvcHNbaV0ubmFtZV0gPSBwcm9wc1tpXTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZHluYW1pY1Byb3BzID0gISFvYmouZ2V0RHluYW1pY1R5cGVcbiAgICAgICAgICAgID8gdGhpcy5nZXRQcm9wZXJ0aWVzKG9iai5nZXREeW5hbWljVHlwZSgpKVxuICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICBpZiAoZHluYW1pY1Byb3BzICYmIGR5bmFtaWNQcm9wcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGR5bmFtaWNQcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciBkUHJvcCA9IGR5bmFtaWNQcm9wc1tpXTtcbiAgICAgICAgICAgICAgICBpZiAoISFyZXNbZFByb3AubmFtZV0pXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIHJlc1tkUHJvcC5uYW1lXSA9IGRQcm9wO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhyZXMpLm1hcChmdW5jdGlvbiAoa2V5KSB7IHJldHVybiByZXNba2V5XTsgfSk7XG4gICAgfTtcbiAgICBKc29uTWV0YWRhdGEucHJvdG90eXBlLmdldER5bmFtaWNQcm9wZXJ0aWVzQnlPYmogPSBmdW5jdGlvbiAob2JqLCBkeW5hbWljVHlwZSkge1xuICAgICAgICBpZiAoZHluYW1pY1R5cGUgPT09IHZvaWQgMCkgeyBkeW5hbWljVHlwZSA9IG51bGw7IH1cbiAgICAgICAgaWYgKCFvYmogfHwgIW9iai5nZXRUeXBlIHx8ICghb2JqLmdldER5bmFtaWNUeXBlICYmICFkeW5hbWljVHlwZSkpXG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIHZhciBkVHlwZSA9ICEhZHluYW1pY1R5cGUgPyBkeW5hbWljVHlwZSA6IG9iai5nZXREeW5hbWljVHlwZSgpO1xuICAgICAgICBpZiAoIWRUeXBlKVxuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB2YXIgZHluYW1pY1Byb3BzID0gdGhpcy5nZXRQcm9wZXJ0aWVzKGRUeXBlKTtcbiAgICAgICAgaWYgKCFkeW5hbWljUHJvcHMgfHwgZHluYW1pY1Byb3BzLmxlbmd0aCA9PSAwKVxuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB2YXIgaGFzaCA9IHt9O1xuICAgICAgICB2YXIgcHJvcHMgPSB0aGlzLmdldFByb3BlcnRpZXMob2JqLmdldFR5cGUoKSk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGhhc2hbcHJvcHNbaV0ubmFtZV0gPSBwcm9wc1tpXTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcmVzID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZHluYW1pY1Byb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgZFByb3AgPSBkeW5hbWljUHJvcHNbaV07XG4gICAgICAgICAgICBpZiAoIWhhc2hbZFByb3AubmFtZV0pIHtcbiAgICAgICAgICAgICAgICByZXMucHVzaChkUHJvcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9O1xuICAgIEpzb25NZXRhZGF0YS5wcm90b3R5cGUuaGFzT3JpZ2luYWxQcm9wZXJ0eSA9IGZ1bmN0aW9uIChvYmosIHByb3BOYW1lKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuZ2V0T3JpZ2luYWxQcm9wZXJ0eShvYmosIHByb3BOYW1lKTtcbiAgICB9O1xuICAgIEpzb25NZXRhZGF0YS5wcm90b3R5cGUuZ2V0T3JpZ2luYWxQcm9wZXJ0eSA9IGZ1bmN0aW9uIChvYmosIHByb3BOYW1lKSB7XG4gICAgICAgIHZhciByZXMgPSB0aGlzLmZpbmRQcm9wZXJ0eShvYmouZ2V0VHlwZSgpLCBwcm9wTmFtZSk7XG4gICAgICAgIGlmICghIXJlcylcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIGlmICh0aGlzLmlzT2JqV3JhcHBlcihvYmopKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluZFByb3BlcnR5KG9iai5nZXRPcmlnaW5hbE9iaigpLmdldFR5cGUoKSwgcHJvcE5hbWUpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICAgIEpzb25NZXRhZGF0YS5wcm90b3R5cGUuZ2V0UHJvcGVydHkgPSBmdW5jdGlvbiAoY2xhc3NOYW1lLCBwcm9wZXJ0eU5hbWUpIHtcbiAgICAgICAgdmFyIHByb3AgPSB0aGlzLmZpbmRQcm9wZXJ0eShjbGFzc05hbWUsIHByb3BlcnR5TmFtZSk7XG4gICAgICAgIGlmICghcHJvcClcbiAgICAgICAgICAgIHJldHVybiBwcm9wO1xuICAgICAgICB2YXIgY2xhc3NJbmZvID0gdGhpcy5maW5kQ2xhc3MoY2xhc3NOYW1lKTtcbiAgICAgICAgaWYgKHByb3AuY2xhc3NJbmZvID09PSBjbGFzc0luZm8pXG4gICAgICAgICAgICByZXR1cm4gcHJvcDtcbiAgICAgICAgdmFyIG5ld1Byb3AgPSBuZXcgSnNvbk9iamVjdFByb3BlcnR5KGNsYXNzSW5mbywgcHJvcC5uYW1lLCBwcm9wLmlzUmVxdWlyZWQpO1xuICAgICAgICBuZXdQcm9wLm1lcmdlV2l0aChwcm9wKTtcbiAgICAgICAgbmV3UHJvcC5pc0FycmF5ID0gcHJvcC5pc0FycmF5O1xuICAgICAgICBjbGFzc0luZm8ucHJvcGVydGllcy5wdXNoKG5ld1Byb3ApO1xuICAgICAgICBjbGFzc0luZm8ucmVzZXRBbGxQcm9wZXJ0aWVzKCk7XG4gICAgICAgIHJldHVybiBuZXdQcm9wO1xuICAgIH07XG4gICAgSnNvbk1ldGFkYXRhLnByb3RvdHlwZS5maW5kUHJvcGVydHkgPSBmdW5jdGlvbiAoY2xhc3NOYW1lLCBwcm9wZXJ0eU5hbWUpIHtcbiAgICAgICAgdmFyIGNsID0gdGhpcy5maW5kQ2xhc3MoY2xhc3NOYW1lKTtcbiAgICAgICAgcmV0dXJuICEhY2wgPyBjbC5maW5kUHJvcGVydHkocHJvcGVydHlOYW1lKSA6IG51bGw7XG4gICAgfTtcbiAgICBKc29uTWV0YWRhdGEucHJvdG90eXBlLmZpbmRQcm9wZXJ0aWVzID0gZnVuY3Rpb24gKGNsYXNzTmFtZSwgcHJvcGVydHlOYW1lcykge1xuICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IEFycmF5KCk7XG4gICAgICAgIHZhciBjbCA9IHRoaXMuZmluZENsYXNzKGNsYXNzTmFtZSk7XG4gICAgICAgIGlmICghY2wpXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnR5TmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBwcm9wID0gY2wuZmluZFByb3BlcnR5KHByb3BlcnR5TmFtZXNbaV0pO1xuICAgICAgICAgICAgaWYgKHByb3ApIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChwcm9wKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gICAgSnNvbk1ldGFkYXRhLnByb3RvdHlwZS5nZXRBbGxQcm9wZXJ0aWVzQnlOYW1lID0gZnVuY3Rpb24gKHByb3BlcnR5TmFtZSkge1xuICAgICAgICB2YXIgcmVzID0gbmV3IEFycmF5KCk7XG4gICAgICAgIHZhciBjbGFzc2VzID0gdGhpcy5nZXRBbGxDbGFzc2VzKCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2xhc3Nlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGNsYXNzSW5mbyA9IHRoaXMuZmluZENsYXNzKGNsYXNzZXNbaV0pO1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBjbGFzc0luZm8ucHJvcGVydGllcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIGlmIChjbGFzc0luZm8ucHJvcGVydGllc1tqXS5uYW1lID09IHByb3BlcnR5TmFtZSkge1xuICAgICAgICAgICAgICAgICAgICByZXMucHVzaChjbGFzc0luZm8ucHJvcGVydGllc1tqXSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH07XG4gICAgSnNvbk1ldGFkYXRhLnByb3RvdHlwZS5nZXRBbGxDbGFzc2VzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcmVzID0gbmV3IEFycmF5KCk7XG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcy5jbGFzc2VzKSB7XG4gICAgICAgICAgICByZXMucHVzaChuYW1lKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH07XG4gICAgSnNvbk1ldGFkYXRhLnByb3RvdHlwZS5jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uIChuYW1lLCBqc29uKSB7XG4gICAgICAgIGlmIChqc29uID09PSB2b2lkIDApIHsganNvbiA9IHVuZGVmaW5lZDsgfVxuICAgICAgICBuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICB2YXIgbWV0YURhdGFDbGFzcyA9IHRoaXMuZmluZENsYXNzKG5hbWUpO1xuICAgICAgICBpZiAoIW1ldGFEYXRhQ2xhc3MpXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgaWYgKG1ldGFEYXRhQ2xhc3MuY3JlYXRvcilcbiAgICAgICAgICAgIHJldHVybiBtZXRhRGF0YUNsYXNzLmNyZWF0b3IoanNvbik7XG4gICAgICAgIHZhciBwYXJlbnROYW1lID0gbWV0YURhdGFDbGFzcy5wYXJlbnROYW1lO1xuICAgICAgICB3aGlsZSAocGFyZW50TmFtZSkge1xuICAgICAgICAgICAgbWV0YURhdGFDbGFzcyA9IHRoaXMuZmluZENsYXNzKHBhcmVudE5hbWUpO1xuICAgICAgICAgICAgaWYgKCFtZXRhRGF0YUNsYXNzKVxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgcGFyZW50TmFtZSA9IG1ldGFEYXRhQ2xhc3MucGFyZW50TmFtZTtcbiAgICAgICAgICAgIGlmIChtZXRhRGF0YUNsYXNzLmNyZWF0b3IpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlQ3VzdG9tVHlwZShuYW1lLCBtZXRhRGF0YUNsYXNzLmNyZWF0b3IsIGpzb24pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gICAgSnNvbk1ldGFkYXRhLnByb3RvdHlwZS5jcmVhdGVDdXN0b21UeXBlID0gZnVuY3Rpb24gKG5hbWUsIGNyZWF0b3IsIGpzb24pIHtcbiAgICAgICAgaWYgKGpzb24gPT09IHZvaWQgMCkgeyBqc29uID0gdW5kZWZpbmVkOyB9XG4gICAgICAgIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHZhciByZXMgPSBjcmVhdG9yKGpzb24pO1xuICAgICAgICB2YXIgY3VzdG9tVHlwZU5hbWUgPSBuYW1lO1xuICAgICAgICB2YXIgY3VzdG9tVGVtcGxhdGVOYW1lID0gcmVzLmdldFRlbXBsYXRlXG4gICAgICAgICAgICA/IHJlcy5nZXRUZW1wbGF0ZSgpXG4gICAgICAgICAgICA6IHJlcy5nZXRUeXBlKCk7XG4gICAgICAgIHJlcy5nZXRUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGN1c3RvbVR5cGVOYW1lO1xuICAgICAgICB9O1xuICAgICAgICByZXMuZ2V0VGVtcGxhdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gY3VzdG9tVGVtcGxhdGVOYW1lO1xuICAgICAgICB9O1xuICAgICAgICBDdXN0b21Qcm9wZXJ0aWVzQ29sbGVjdGlvbi5jcmVhdGVQcm9wZXJ0aWVzKHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfTtcbiAgICBKc29uTWV0YWRhdGEucHJvdG90eXBlLmdldENoaWxkcmVuQ2xhc3NlcyA9IGZ1bmN0aW9uIChuYW1lLCBjYW5CZUNyZWF0ZWQpIHtcbiAgICAgICAgaWYgKGNhbkJlQ3JlYXRlZCA9PT0gdm9pZCAwKSB7IGNhbkJlQ3JlYXRlZCA9IGZhbHNlOyB9XG4gICAgICAgIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICAgICAgdGhpcy5maWxsQ2hpbGRyZW5DbGFzc2VzKG5hbWUsIGNhbkJlQ3JlYXRlZCwgcmVzdWx0KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICAgIEpzb25NZXRhZGF0YS5wcm90b3R5cGUuZ2V0UmVxdWlyZWRQcm9wZXJ0aWVzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgdmFyIHByb3BlcnRpZXMgPSB0aGlzLmdldFByb3BlcnRpZXMobmFtZSk7XG4gICAgICAgIHZhciByZXMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAocHJvcGVydGllc1tpXS5pc1JlcXVpcmVkKSB7XG4gICAgICAgICAgICAgICAgcmVzLnB1c2gocHJvcGVydGllc1tpXS5uYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH07XG4gICAgSnNvbk1ldGFkYXRhLnByb3RvdHlwZS5hZGRQcm9wZXJ0aWVzID0gZnVuY3Rpb24gKGNsYXNzTmFtZSwgcHJvcGVydGllc0luZm9zKSB7XG4gICAgICAgIGNsYXNzTmFtZSA9IGNsYXNzTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICB2YXIgbWV0YURhdGFDbGFzcyA9IHRoaXMuZmluZENsYXNzKGNsYXNzTmFtZSk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllc0luZm9zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLmFkZEN1c3RvbVByb3BlcnR5Q29yZShtZXRhRGF0YUNsYXNzLCBwcm9wZXJ0aWVzSW5mb3NbaV0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBKc29uTWV0YWRhdGEucHJvdG90eXBlLmFkZFByb3BlcnR5ID0gZnVuY3Rpb24gKGNsYXNzTmFtZSwgcHJvcGVydHlJbmZvKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZEN1c3RvbVByb3BlcnR5Q29yZSh0aGlzLmZpbmRDbGFzcyhjbGFzc05hbWUpLCBwcm9wZXJ0eUluZm8pO1xuICAgIH07XG4gICAgSnNvbk1ldGFkYXRhLnByb3RvdHlwZS5hZGRDdXN0b21Qcm9wZXJ0eUNvcmUgPSBmdW5jdGlvbiAobWV0YURhdGFDbGFzcywgcHJvcGVydHlJbmZvKSB7XG4gICAgICAgIGlmICghbWV0YURhdGFDbGFzcylcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB2YXIgcHJvcGVydHkgPSBtZXRhRGF0YUNsYXNzLmNyZWF0ZVByb3BlcnR5KHByb3BlcnR5SW5mbywgdHJ1ZSk7XG4gICAgICAgIGlmIChwcm9wZXJ0eSkge1xuICAgICAgICAgICAgbWV0YURhdGFDbGFzcy5yZXNldEFsbFByb3BlcnRpZXMoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJvcGVydHk7XG4gICAgfTtcbiAgICBKc29uTWV0YWRhdGEucHJvdG90eXBlLnJlbW92ZVByb3BlcnR5ID0gZnVuY3Rpb24gKGNsYXNzTmFtZSwgcHJvcGVydHlOYW1lKSB7XG4gICAgICAgIHZhciBtZXRhRGF0YUNsYXNzID0gdGhpcy5maW5kQ2xhc3MoY2xhc3NOYW1lKTtcbiAgICAgICAgaWYgKCFtZXRhRGF0YUNsYXNzKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB2YXIgcHJvcGVydHkgPSBtZXRhRGF0YUNsYXNzLmZpbmQocHJvcGVydHlOYW1lKTtcbiAgICAgICAgaWYgKHByb3BlcnR5KSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZVByb3BlcnR5RnJvbUNsYXNzKG1ldGFEYXRhQ2xhc3MsIHByb3BlcnR5KTtcbiAgICAgICAgICAgIG1ldGFEYXRhQ2xhc3MucmVzZXRBbGxQcm9wZXJ0aWVzKCk7XG4gICAgICAgICAgICBDdXN0b21Qcm9wZXJ0aWVzQ29sbGVjdGlvbi5yZW1vdmVQcm9wZXJ0eShtZXRhRGF0YUNsYXNzLm5hbWUsIHByb3BlcnR5TmFtZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEpzb25NZXRhZGF0YS5wcm90b3R5cGUucmVtb3ZlUHJvcGVydHlGcm9tQ2xhc3MgPSBmdW5jdGlvbiAobWV0YURhdGFDbGFzcywgcHJvcGVydHkpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gbWV0YURhdGFDbGFzcy5wcm9wZXJ0aWVzLmluZGV4T2YocHJvcGVydHkpO1xuICAgICAgICBpZiAoaW5kZXggPCAwKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBtZXRhRGF0YUNsYXNzLnByb3BlcnRpZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9O1xuICAgIEpzb25NZXRhZGF0YS5wcm90b3R5cGUuZmlsbENoaWxkcmVuQ2xhc3NlcyA9IGZ1bmN0aW9uIChuYW1lLCBjYW5CZUNyZWF0ZWQsIHJlc3VsdCkge1xuICAgICAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuQ2xhc3Nlc1tuYW1lXTtcbiAgICAgICAgaWYgKCFjaGlsZHJlbilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKCFjYW5CZUNyZWF0ZWQgfHwgY2hpbGRyZW5baV0uY3JlYXRvcikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGNoaWxkcmVuW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZmlsbENoaWxkcmVuQ2xhc3NlcyhjaGlsZHJlbltpXS5uYW1lLCBjYW5CZUNyZWF0ZWQsIHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEpzb25NZXRhZGF0YS5wcm90b3R5cGUuZmluZENsYXNzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgdmFyIHJlcyA9IHRoaXMuY2xhc3Nlc1tuYW1lXTtcbiAgICAgICAgaWYgKCFyZXMpIHtcbiAgICAgICAgICAgIHZhciBuZXdOYW1lID0gdGhpcy5hbHRlcm5hdGl2ZU5hbWVzW25hbWVdO1xuICAgICAgICAgICAgaWYgKCEhbmV3TmFtZSAmJiBuZXdOYW1lICE9IG5hbWUpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluZENsYXNzKG5ld05hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfTtcbiAgICBKc29uTWV0YWRhdGEucHJvdG90eXBlLmlzRGVzY2VuZGFudE9mID0gZnVuY3Rpb24gKGNsYXNzTmFtZSwgYW5jZXN0b3JDbGFzc05hbWUpIHtcbiAgICAgICAgaWYgKCFjbGFzc05hbWUgfHwgIWFuY2VzdG9yQ2xhc3NOYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY2xhc3NOYW1lID0gY2xhc3NOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGFuY2VzdG9yQ2xhc3NOYW1lID0gYW5jZXN0b3JDbGFzc05hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgdmFyIGNsYXNzXyA9IHRoaXMuZmluZENsYXNzKGNsYXNzTmFtZSk7XG4gICAgICAgIGlmICghY2xhc3NfKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHBhcmVudENsYXNzID0gY2xhc3NfO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgICBpZiAocGFyZW50Q2xhc3MubmFtZSA9PT0gYW5jZXN0b3JDbGFzc05hbWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhcmVudENsYXNzID0gdGhpcy5jbGFzc2VzW3BhcmVudENsYXNzLnBhcmVudE5hbWVdO1xuICAgICAgICB9IHdoaWxlICghIXBhcmVudENsYXNzKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gICAgSnNvbk1ldGFkYXRhLnByb3RvdHlwZS5hZGRBbHRlck5hdGl2ZUNsYXNzTmFtZSA9IGZ1bmN0aW9uIChuYW1lLCBhbHRlcm5hdGl2ZU5hbWUpIHtcbiAgICAgICAgdGhpcy5hbHRlcm5hdGl2ZU5hbWVzW2FsdGVybmF0aXZlTmFtZS50b0xvd2VyQ2FzZSgpXSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB9O1xuICAgIEpzb25NZXRhZGF0YS5wcm90b3R5cGUuZ2VuZXJhdGVTY2hlbWEgPSBmdW5jdGlvbiAoY2xhc3NOYW1lKSB7XG4gICAgICAgIGlmIChjbGFzc05hbWUgPT09IHZvaWQgMCkgeyBjbGFzc05hbWUgPSB1bmRlZmluZWQ7IH1cbiAgICAgICAgaWYgKCFjbGFzc05hbWUpXG4gICAgICAgICAgICBjbGFzc05hbWUgPSBcInN1cnZleVwiO1xuICAgICAgICB2YXIgY2xhc3NJbmZvID0gdGhpcy5maW5kQ2xhc3MoY2xhc3NOYW1lKTtcbiAgICAgICAgaWYgKCFjbGFzc0luZm8pXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgdmFyIHJlcyA9IHtcbiAgICAgICAgICAgICRzY2hlbWE6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNy9zY2hlbWEjXCIsXG4gICAgICAgICAgICB0aXRsZTogXCJTdXJ2ZXlKUyBMaWJyYXJ5IGpzb24gc2NoZW1hXCIsXG4gICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgcHJvcGVydGllczoge30sXG4gICAgICAgICAgICBkZWZpbml0aW9uczogeyBsb2NzdHJpbmc6IHRoaXMuZ2VuZXJhdGVMb2NTdHJDbGFzcygpIH0sXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZ2VuZXJhdGVTY2hlbWFQcm9wZXJ0aWVzKGNsYXNzSW5mbywgcmVzLCByZXMuZGVmaW5pdGlvbnMsIHRydWUpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH07XG4gICAgSnNvbk1ldGFkYXRhLnByb3RvdHlwZS5nZW5lcmF0ZUxvY1N0ckNsYXNzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcHJvcHMgPSB7fTtcbiAgICAgICAgdmFyIGxvY1Byb3AgPSBTZXJpYWxpemVyLmZpbmRQcm9wZXJ0eShcInN1cnZleVwiLCBcImxvY2FsZVwiKTtcbiAgICAgICAgaWYgKCEhbG9jUHJvcCkge1xuICAgICAgICAgICAgdmFyIGNob2ljZXMgPSBsb2NQcm9wLmdldENob2ljZXMobnVsbCk7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjaG9pY2VzKSkge1xuICAgICAgICAgICAgICAgIGlmIChjaG9pY2VzLmluZGV4T2YoXCJlblwiKSA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY2hvaWNlcy5zcGxpY2UoMCwgMCwgXCJlblwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2hvaWNlcy5zcGxpY2UoMCwgMCwgXCJkZWZhdWx0XCIpO1xuICAgICAgICAgICAgICAgIGNob2ljZXMuZm9yRWFjaChmdW5jdGlvbiAobCkgeyBpZiAoISFsKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BzW2xdID0geyB0eXBlOiBcInN0cmluZ1wiIH07XG4gICAgICAgICAgICAgICAgfSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJGlkOiBcImxvY3N0cmluZ1wiLFxuICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHByb3BzXG4gICAgICAgIH07XG4gICAgfTtcbiAgICBKc29uTWV0YWRhdGEucHJvdG90eXBlLmdlbmVyYXRlU2NoZW1hUHJvcGVydGllcyA9IGZ1bmN0aW9uIChjbGFzc0luZm8sIGNsYXNzU2NoZW1hLCBzY2hlbWFEZWYsIGlzUm9vdCkge1xuICAgICAgICBpZiAoIWNsYXNzSW5mbylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIHNjaGVtYVByb3BlcnRpZXMgPSBjbGFzc1NjaGVtYS5wcm9wZXJ0aWVzO1xuICAgICAgICB2YXIgcmVxdWlyZWRQcm9wcyA9IFtdO1xuICAgICAgICBpZiAoY2xhc3NJbmZvLm5hbWUgPT09IFwicXVlc3Rpb25cIiB8fCBjbGFzc0luZm8ubmFtZSA9PT0gXCJwYW5lbFwiKSB7XG4gICAgICAgICAgICBzY2hlbWFQcm9wZXJ0aWVzLnR5cGUgPSB7IHR5cGU6IFwic3RyaW5nXCIgfTtcbiAgICAgICAgICAgIHJlcXVpcmVkUHJvcHMucHVzaChcInR5cGVcIik7XG4gICAgICAgIH1cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbGFzc0luZm8ucHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIHByb3AgPSBjbGFzc0luZm8ucHJvcGVydGllc1tpXTtcbiAgICAgICAgICAgIGlmICghIWNsYXNzSW5mby5wYXJlbnROYW1lICYmICEhU2VyaWFsaXplci5maW5kUHJvcGVydHkoY2xhc3NJbmZvLnBhcmVudE5hbWUsIHByb3AubmFtZSkpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBzY2hlbWFQcm9wZXJ0aWVzW3Byb3AubmFtZV0gPSB0aGlzLmdlbmVyYXRlU2NoZW1hUHJvcGVydHkocHJvcCwgc2NoZW1hRGVmLCBpc1Jvb3QpO1xuICAgICAgICAgICAgaWYgKHByb3AuaXNSZXF1aXJlZClcbiAgICAgICAgICAgICAgICByZXF1aXJlZFByb3BzLnB1c2gocHJvcC5uYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVxdWlyZWRQcm9wcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjbGFzc1NjaGVtYS5yZXF1aXJlZCA9IHJlcXVpcmVkUHJvcHM7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEpzb25NZXRhZGF0YS5wcm90b3R5cGUuZ2VuZXJhdGVTY2hlbWFQcm9wZXJ0eSA9IGZ1bmN0aW9uIChwcm9wLCBzY2hlbWFEZWYsIGlzUm9vdCkge1xuICAgICAgICBpZiAocHJvcC5pc0xvY2FsaXphYmxlKSB7XG4gICAgICAgICAgICByZXR1cm4geyBvbmVPZjogW1xuICAgICAgICAgICAgICAgICAgICB7IFwidHlwZVwiOiBcInN0cmluZ1wiIH0sXG4gICAgICAgICAgICAgICAgICAgIHsgXCIkcmVmXCI6IHRoaXMuZ2V0Q2hlbWVSZWZOYW1lKFwibG9jc3RyaW5nXCIsIGlzUm9vdCkgfVxuICAgICAgICAgICAgICAgIF0gfTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcHJvcFR5cGUgPSBwcm9wLnNjaGVtYVR5cGUoKTtcbiAgICAgICAgdmFyIHJlZlR5cGUgPSBwcm9wLnNjaGVtYVJlZigpO1xuICAgICAgICB2YXIgcmVzID0ge307XG4gICAgICAgIGlmICghIXByb3BUeXBlKSB7XG4gICAgICAgICAgICByZXMudHlwZSA9IHByb3BUeXBlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wLmhhc0Nob2ljZXMpIHtcbiAgICAgICAgICAgIHZhciBlbnVtUmVzID0gcHJvcC5nZXRDaG9pY2VzKG51bGwpO1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZW51bVJlcykgJiYgZW51bVJlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgcmVzLmVudW0gPSBlbnVtUmVzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghIXJlZlR5cGUpIHtcbiAgICAgICAgICAgIGlmIChwcm9wVHlwZSA9PT0gXCJhcnJheVwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKHByb3AuY2xhc3NOYW1lID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcy5pdGVtcyA9IHsgdHlwZTogcHJvcC5jbGFzc05hbWUgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcy5pdGVtcyA9IHsgJHJlZjogdGhpcy5nZXRDaGVtZVJlZk5hbWUocHJvcC5jbGFzc05hbWUsIGlzUm9vdCkgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNbXCIkcmVmXCJdID0gdGhpcy5nZXRDaGVtZVJlZk5hbWUocmVmVHlwZSwgaXNSb290KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVDaGVtYUNsYXNzKHByb3AuY2xhc3NOYW1lLCBzY2hlbWFEZWYsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoISFwcm9wLmJhc2VDbGFzc05hbWUpIHtcbiAgICAgICAgICAgIHZhciB1c2VkQ2xhc3NlcyA9IHRoaXMuZ2V0Q2hpbGRyZW5DbGFzc2VzKHByb3AuYmFzZUNsYXNzTmFtZSwgdHJ1ZSk7XG4gICAgICAgICAgICBpZiAocHJvcC5iYXNlQ2xhc3NOYW1lID09IFwicXVlc3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHVzZWRDbGFzc2VzLnB1c2godGhpcy5maW5kQ2xhc3MoXCJwYW5lbFwiKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXMuaXRlbXMgPSB7IGFueU9mOiBbXSB9O1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB1c2VkQ2xhc3Nlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciBjbGFzc05hbWUgPSB1c2VkQ2xhc3Nlc1tpXS5uYW1lO1xuICAgICAgICAgICAgICAgIHJlcy5pdGVtcy5hbnlPZi5wdXNoKHsgJHJlZjogdGhpcy5nZXRDaGVtZVJlZk5hbWUoY2xhc3NOYW1lLCBpc1Jvb3QpIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVDaGVtYUNsYXNzKGNsYXNzTmFtZSwgc2NoZW1hRGVmLCBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9O1xuICAgIEpzb25NZXRhZGF0YS5wcm90b3R5cGUuZ2V0Q2hlbWVSZWZOYW1lID0gZnVuY3Rpb24gKGNsYXNzTmFtZSwgaXNSb290KSB7XG4gICAgICAgIC8vRml4IGZvciAjNjQ4NiwgYWNjb3JkaW5nIHRvIGh0dHBzOi8vbmllbS5naXRodWIuaW8vanNvbi9yZWZlcmVuY2UvanNvbi1zY2hlbWEvcmVmZXJlbmNlcy8jOn46dGV4dD1JbiUyMGElMjBKU09OJTIwc2NoZW1hJTJDJTIwYSwlMkMlMjBhbiUyMGluJTJEc2NoZW1hJTIwcmVmZXJlbmNlXG4gICAgICAgIHJldHVybiBcIiMvZGVmaW5pdGlvbnMvXCIgKyBjbGFzc05hbWU7XG4gICAgICAgIC8vcmV0dXJuIGlzUm9vdCA/IFwiIy9kZWZpbml0aW9ucy9cIiArIGNsYXNzTmFtZSA6IGNsYXNzTmFtZSArIFwiI1wiO1xuICAgIH07XG4gICAgSnNvbk1ldGFkYXRhLnByb3RvdHlwZS5nZW5lcmF0ZUNoZW1hQ2xhc3MgPSBmdW5jdGlvbiAoY2xhc3NOYW1lLCBzY2hlbWFEZWYsIGlzUm9vdCkge1xuICAgICAgICBpZiAoISFzY2hlbWFEZWZbY2xhc3NOYW1lXSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIGNsYXNzSW5mbyA9IHRoaXMuZmluZENsYXNzKGNsYXNzTmFtZSk7XG4gICAgICAgIGlmICghY2xhc3NJbmZvKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIgaGFzUGFyZW50ID0gISFjbGFzc0luZm8ucGFyZW50TmFtZSAmJiBjbGFzc0luZm8ucGFyZW50TmFtZSAhPSBcImJhc2VcIjtcbiAgICAgICAgaWYgKGhhc1BhcmVudCkge1xuICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZUNoZW1hQ2xhc3MoY2xhc3NJbmZvLnBhcmVudE5hbWUsIHNjaGVtYURlZiwgaXNSb290KTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcmVzID0geyB0eXBlOiBcIm9iamVjdFwiLCAkaWQ6IGNsYXNzTmFtZSB9O1xuICAgICAgICBzY2hlbWFEZWZbY2xhc3NOYW1lXSA9IHJlcztcbiAgICAgICAgdmFyIGNoZW1hUHJvcHMgPSB7IHByb3BlcnRpZXM6IHt9IH07XG4gICAgICAgIHRoaXMuZ2VuZXJhdGVTY2hlbWFQcm9wZXJ0aWVzKGNsYXNzSW5mbywgY2hlbWFQcm9wcywgc2NoZW1hRGVmLCBpc1Jvb3QpO1xuICAgICAgICBpZiAoaGFzUGFyZW50KSB7XG4gICAgICAgICAgICByZXMuYWxsT2YgPSBbXG4gICAgICAgICAgICAgICAgeyAkcmVmOiB0aGlzLmdldENoZW1lUmVmTmFtZShjbGFzc0luZm8ucGFyZW50TmFtZSwgaXNSb290KSB9LFxuICAgICAgICAgICAgICAgIHsgcHJvcGVydGllczogY2hlbWFQcm9wcy5wcm9wZXJ0aWVzIH0sXG4gICAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzLnByb3BlcnRpZXMgPSBjaGVtYVByb3BzLnByb3BlcnRpZXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY2hlbWFQcm9wcy5yZXF1aXJlZCkpIHtcbiAgICAgICAgICAgIHJlcy5yZXF1aXJlZCA9IGNoZW1hUHJvcHMucmVxdWlyZWQ7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBKc29uTWV0YWRhdGE7XG59KCkpO1xuXG52YXIgSnNvbkVycm9yID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEpzb25FcnJvcih0eXBlLCBtZXNzYWdlKSB7XG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgICAgIHRoaXMuZGVzY3JpcHRpb24gPSBcIlwiO1xuICAgICAgICB0aGlzLmF0ID0gLTE7XG4gICAgICAgIHRoaXMuZW5kID0gLTE7XG4gICAgfVxuICAgIEpzb25FcnJvci5wcm90b3R5cGUuZ2V0RnVsbERlc2NyaXB0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tZXNzYWdlICsgKHRoaXMuZGVzY3JpcHRpb24gPyBcIlxcblwiICsgdGhpcy5kZXNjcmlwdGlvbiA6IFwiXCIpO1xuICAgIH07XG4gICAgcmV0dXJuIEpzb25FcnJvcjtcbn0oKSk7XG5cbnZhciBKc29uVW5rbm93blByb3BlcnR5RXJyb3IgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEpzb25Vbmtub3duUHJvcGVydHlFcnJvciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBKc29uVW5rbm93blByb3BlcnR5RXJyb3IocHJvcGVydHlOYW1lLCBjbGFzc05hbWUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgXCJ1bmtub3ducHJvcGVydHlcIiwgXCJUaGUgcHJvcGVydHkgJ1wiICtcbiAgICAgICAgICAgIHByb3BlcnR5TmFtZSArXG4gICAgICAgICAgICBcIicgaW4gY2xhc3MgJ1wiICtcbiAgICAgICAgICAgIGNsYXNzTmFtZSArXG4gICAgICAgICAgICBcIicgaXMgdW5rbm93bi5cIikgfHwgdGhpcztcbiAgICAgICAgX3RoaXMucHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lO1xuICAgICAgICBfdGhpcy5jbGFzc05hbWUgPSBjbGFzc05hbWU7XG4gICAgICAgIHZhciBwcm9wZXJ0aWVzID0gSnNvbk9iamVjdC5tZXRhRGF0YS5nZXRQcm9wZXJ0aWVzKGNsYXNzTmFtZSk7XG4gICAgICAgIGlmIChwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICBfdGhpcy5kZXNjcmlwdGlvbiA9IFwiVGhlIGxpc3Qgb2YgYXZhaWxhYmxlIHByb3BlcnRpZXMgYXJlOiBcIjtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChpID4gMClcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuZGVzY3JpcHRpb24gKz0gXCIsIFwiO1xuICAgICAgICAgICAgICAgIF90aGlzLmRlc2NyaXB0aW9uICs9IHByb3BlcnRpZXNbaV0ubmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF90aGlzLmRlc2NyaXB0aW9uICs9IFwiLlwiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgcmV0dXJuIEpzb25Vbmtub3duUHJvcGVydHlFcnJvcjtcbn0oSnNvbkVycm9yKSk7XG5cbnZhciBKc29uTWlzc2luZ1R5cGVFcnJvckJhc2UgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEpzb25NaXNzaW5nVHlwZUVycm9yQmFzZSwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBKc29uTWlzc2luZ1R5cGVFcnJvckJhc2UoYmFzZUNsYXNzTmFtZSwgdHlwZSwgbWVzc2FnZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCB0eXBlLCBtZXNzYWdlKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5iYXNlQ2xhc3NOYW1lID0gYmFzZUNsYXNzTmFtZTtcbiAgICAgICAgX3RoaXMudHlwZSA9IHR5cGU7XG4gICAgICAgIF90aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgICAgICBfdGhpcy5kZXNjcmlwdGlvbiA9IFwiVGhlIGZvbGxvd2luZyB0eXBlcyBhcmUgYXZhaWxhYmxlOiBcIjtcbiAgICAgICAgdmFyIHR5cGVzID0gSnNvbk9iamVjdC5tZXRhRGF0YS5nZXRDaGlsZHJlbkNsYXNzZXMoYmFzZUNsYXNzTmFtZSwgdHJ1ZSk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHlwZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChpID4gMClcbiAgICAgICAgICAgICAgICBfdGhpcy5kZXNjcmlwdGlvbiArPSBcIiwgXCI7XG4gICAgICAgICAgICBfdGhpcy5kZXNjcmlwdGlvbiArPSBcIidcIiArIHR5cGVzW2ldLm5hbWUgKyBcIidcIjtcbiAgICAgICAgfVxuICAgICAgICBfdGhpcy5kZXNjcmlwdGlvbiArPSBcIi5cIjtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICByZXR1cm4gSnNvbk1pc3NpbmdUeXBlRXJyb3JCYXNlO1xufShKc29uRXJyb3IpKTtcblxudmFyIEpzb25NaXNzaW5nVHlwZUVycm9yID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhKc29uTWlzc2luZ1R5cGVFcnJvciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBKc29uTWlzc2luZ1R5cGVFcnJvcihwcm9wZXJ0eU5hbWUsIGJhc2VDbGFzc05hbWUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgYmFzZUNsYXNzTmFtZSwgXCJtaXNzaW5ndHlwZXByb3BlcnR5XCIsIFwiVGhlIHByb3BlcnR5IHR5cGUgaXMgbWlzc2luZyBpbiB0aGUgb2JqZWN0LiBQbGVhc2UgdGFrZSBhIGxvb2sgYXQgcHJvcGVydHk6ICdcIiArXG4gICAgICAgICAgICBwcm9wZXJ0eU5hbWUgK1xuICAgICAgICAgICAgXCInLlwiKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5wcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eU5hbWU7XG4gICAgICAgIF90aGlzLmJhc2VDbGFzc05hbWUgPSBiYXNlQ2xhc3NOYW1lO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIHJldHVybiBKc29uTWlzc2luZ1R5cGVFcnJvcjtcbn0oSnNvbk1pc3NpbmdUeXBlRXJyb3JCYXNlKSk7XG5cbnZhciBKc29uSW5jb3JyZWN0VHlwZUVycm9yID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhKc29uSW5jb3JyZWN0VHlwZUVycm9yLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEpzb25JbmNvcnJlY3RUeXBlRXJyb3IocHJvcGVydHlOYW1lLCBiYXNlQ2xhc3NOYW1lKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIGJhc2VDbGFzc05hbWUsIFwiaW5jb3JyZWN0dHlwZXByb3BlcnR5XCIsIFwiVGhlIHByb3BlcnR5IHR5cGUgaXMgaW5jb3JyZWN0IGluIHRoZSBvYmplY3QuIFBsZWFzZSB0YWtlIGEgbG9vayBhdCBwcm9wZXJ0eTogJ1wiICtcbiAgICAgICAgICAgIHByb3BlcnR5TmFtZSArXG4gICAgICAgICAgICBcIicuXCIpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLnByb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZTtcbiAgICAgICAgX3RoaXMuYmFzZUNsYXNzTmFtZSA9IGJhc2VDbGFzc05hbWU7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgcmV0dXJuIEpzb25JbmNvcnJlY3RUeXBlRXJyb3I7XG59KEpzb25NaXNzaW5nVHlwZUVycm9yQmFzZSkpO1xuXG52YXIgSnNvblJlcXVpcmVkUHJvcGVydHlFcnJvciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoSnNvblJlcXVpcmVkUHJvcGVydHlFcnJvciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBKc29uUmVxdWlyZWRQcm9wZXJ0eUVycm9yKHByb3BlcnR5TmFtZSwgY2xhc3NOYW1lKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIFwicmVxdWlyZWRwcm9wZXJ0eVwiLCBcIlRoZSBwcm9wZXJ0eSAnXCIgK1xuICAgICAgICAgICAgcHJvcGVydHlOYW1lICtcbiAgICAgICAgICAgIFwiJyBpcyByZXF1aXJlZCBpbiBjbGFzcyAnXCIgK1xuICAgICAgICAgICAgY2xhc3NOYW1lICtcbiAgICAgICAgICAgIFwiJy5cIikgfHwgdGhpcztcbiAgICAgICAgX3RoaXMucHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lO1xuICAgICAgICBfdGhpcy5jbGFzc05hbWUgPSBjbGFzc05hbWU7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgcmV0dXJuIEpzb25SZXF1aXJlZFByb3BlcnR5RXJyb3I7XG59KEpzb25FcnJvcikpO1xuXG52YXIgSnNvbk9iamVjdCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBKc29uT2JqZWN0KCkge1xuICAgICAgICB0aGlzLmVycm9ycyA9IG5ldyBBcnJheSgpO1xuICAgICAgICB0aGlzLmxpZ2h0U2VyaWFsaXppbmcgPSBmYWxzZTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEpzb25PYmplY3QsIFwibWV0YURhdGFcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBKc29uT2JqZWN0Lm1ldGFEYXRhVmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBKc29uT2JqZWN0LnByb3RvdHlwZS50b0pzb25PYmplY3QgPSBmdW5jdGlvbiAob2JqLCBzdG9yZURlZmF1bHRzKSB7XG4gICAgICAgIGlmIChzdG9yZURlZmF1bHRzID09PSB2b2lkIDApIHsgc3RvcmVEZWZhdWx0cyA9IGZhbHNlOyB9XG4gICAgICAgIHJldHVybiB0aGlzLnRvSnNvbk9iamVjdENvcmUob2JqLCBudWxsLCBzdG9yZURlZmF1bHRzKTtcbiAgICB9O1xuICAgIEpzb25PYmplY3QucHJvdG90eXBlLnRvT2JqZWN0ID0gZnVuY3Rpb24gKGpzb25PYmosIG9iaikge1xuICAgICAgICB0aGlzLnRvT2JqZWN0Q29yZShqc29uT2JqLCBvYmopO1xuICAgICAgICB2YXIgZXJyb3IgPSB0aGlzLmdldFJlcXVpcmVkRXJyb3Iob2JqLCBqc29uT2JqKTtcbiAgICAgICAgaWYgKCEhZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMuYWRkTmV3RXJyb3IoZXJyb3IsIGpzb25PYmosIG9iaik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEpzb25PYmplY3QucHJvdG90eXBlLnRvT2JqZWN0Q29yZSA9IGZ1bmN0aW9uIChqc29uT2JqLCBvYmopIHtcbiAgICAgICAgaWYgKCFqc29uT2JqKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIgcHJvcGVydGllcyA9IG51bGw7XG4gICAgICAgIHZhciBvYmpUeXBlID0gdW5kZWZpbmVkO1xuICAgICAgICB2YXIgbmVlZEFkZEVycm9ycyA9IHRydWU7XG4gICAgICAgIGlmIChvYmouZ2V0VHlwZSkge1xuICAgICAgICAgICAgb2JqVHlwZSA9IG9iai5nZXRUeXBlKCk7XG4gICAgICAgICAgICBwcm9wZXJ0aWVzID0gSnNvbk9iamVjdC5tZXRhRGF0YS5nZXRQcm9wZXJ0aWVzKG9ialR5cGUpO1xuICAgICAgICAgICAgbmVlZEFkZEVycm9ycyA9XG4gICAgICAgICAgICAgICAgISFvYmpUeXBlICYmICFKc29uT2JqZWN0Lm1ldGFEYXRhLmlzRGVzY2VuZGFudE9mKG9ialR5cGUsIFwiaXRlbXZhbHVlXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghcHJvcGVydGllcylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKG9iai5zdGFydExvYWRpbmdGcm9tSnNvbikge1xuICAgICAgICAgICAgb2JqLnN0YXJ0TG9hZGluZ0Zyb21Kc29uKGpzb25PYmopO1xuICAgICAgICB9XG4gICAgICAgIHByb3BlcnRpZXMgPSB0aGlzLmFkZER5bmFtaWNQcm9wZXJ0aWVzKG9iaiwganNvbk9iaiwgcHJvcGVydGllcyk7XG4gICAgICAgIGZvciAodmFyIGtleSBpbiBqc29uT2JqKSB7XG4gICAgICAgICAgICBpZiAoa2V5ID09PSBKc29uT2JqZWN0LnR5cGVQcm9wZXJ0eU5hbWUpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBpZiAoa2V5ID09PSBKc29uT2JqZWN0LnBvc2l0aW9uUHJvcGVydHlOYW1lKSB7XG4gICAgICAgICAgICAgICAgb2JqW2tleV0gPSBqc29uT2JqW2tleV07XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgcHJvcGVydHkgPSB0aGlzLmZpbmRQcm9wZXJ0eShwcm9wZXJ0aWVzLCBrZXkpO1xuICAgICAgICAgICAgaWYgKCFwcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAgIGlmIChuZWVkQWRkRXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkTmV3RXJyb3IobmV3IEpzb25Vbmtub3duUHJvcGVydHlFcnJvcihrZXkudG9TdHJpbmcoKSwgb2JqVHlwZSksIGpzb25PYmosIG9iaik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy52YWx1ZVRvT2JqKGpzb25PYmpba2V5XSwgb2JqLCBwcm9wZXJ0eSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9iai5lbmRMb2FkaW5nRnJvbUpzb24pIHtcbiAgICAgICAgICAgIG9iai5lbmRMb2FkaW5nRnJvbUpzb24oKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgSnNvbk9iamVjdC5wcm90b3R5cGUudG9Kc29uT2JqZWN0Q29yZSA9IGZ1bmN0aW9uIChvYmosIHByb3BlcnR5LCBzdG9yZURlZmF1bHRzKSB7XG4gICAgICAgIGlmIChzdG9yZURlZmF1bHRzID09PSB2b2lkIDApIHsgc3RvcmVEZWZhdWx0cyA9IGZhbHNlOyB9XG4gICAgICAgIGlmICghb2JqIHx8ICFvYmouZ2V0VHlwZSlcbiAgICAgICAgICAgIHJldHVybiBvYmo7XG4gICAgICAgIGlmICh0eXBlb2Ygb2JqLmdldERhdGEgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgICAgIHJldHVybiBvYmouZ2V0RGF0YSgpO1xuICAgICAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgICAgIGlmIChwcm9wZXJ0eSAhPSBudWxsICYmICFwcm9wZXJ0eS5jbGFzc05hbWUpIHtcbiAgICAgICAgICAgIHJlc3VsdFtKc29uT2JqZWN0LnR5cGVQcm9wZXJ0eU5hbWVdID0gcHJvcGVydHkuZ2V0T2JqVHlwZShvYmouZ2V0VHlwZSgpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByb3BlcnRpZXNUb0pzb24ob2JqLCBKc29uT2JqZWN0Lm1ldGFEYXRhLmdldFByb3BlcnRpZXMob2JqLmdldFR5cGUoKSksIHJlc3VsdCwgc3RvcmVEZWZhdWx0cyk7XG4gICAgICAgIHRoaXMucHJvcGVydGllc1RvSnNvbihvYmosIHRoaXMuZ2V0RHluYW1pY1Byb3BlcnRpZXMob2JqKSwgcmVzdWx0LCBzdG9yZURlZmF1bHRzKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICAgIEpzb25PYmplY3QucHJvdG90eXBlLmdldER5bmFtaWNQcm9wZXJ0aWVzID0gZnVuY3Rpb24gKG9iaikge1xuICAgICAgICByZXR1cm4gU2VyaWFsaXplci5nZXREeW5hbWljUHJvcGVydGllc0J5T2JqKG9iaik7XG4gICAgfTtcbiAgICBKc29uT2JqZWN0LnByb3RvdHlwZS5hZGREeW5hbWljUHJvcGVydGllcyA9IGZ1bmN0aW9uIChvYmosIGpzb25PYmosIHByb3BlcnRpZXMpIHtcbiAgICAgICAgaWYgKCFvYmouZ2V0RHluYW1pY1Byb3BlcnR5TmFtZSlcbiAgICAgICAgICAgIHJldHVybiBwcm9wZXJ0aWVzO1xuICAgICAgICB2YXIgZHluYW1pY1Byb3BOYW1lID0gb2JqLmdldER5bmFtaWNQcm9wZXJ0eU5hbWUoKTtcbiAgICAgICAgaWYgKCFkeW5hbWljUHJvcE5hbWUpXG4gICAgICAgICAgICByZXR1cm4gcHJvcGVydGllcztcbiAgICAgICAgaWYgKGpzb25PYmpbZHluYW1pY1Byb3BOYW1lXSkge1xuICAgICAgICAgICAgb2JqW2R5bmFtaWNQcm9wTmFtZV0gPSBqc29uT2JqW2R5bmFtaWNQcm9wTmFtZV07XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGR5bmFtaWNQcm9wZXJ0aWVzID0gdGhpcy5nZXREeW5hbWljUHJvcGVydGllcyhvYmopO1xuICAgICAgICB2YXIgcmVzID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgcmVzLnB1c2gocHJvcGVydGllc1tpXSk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkeW5hbWljUHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgcmVzLnB1c2goZHluYW1pY1Byb3BlcnRpZXNbaV0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfTtcbiAgICBKc29uT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0aWVzVG9Kc29uID0gZnVuY3Rpb24gKG9iaiwgcHJvcGVydGllcywganNvbiwgc3RvcmVEZWZhdWx0cykge1xuICAgICAgICBpZiAoc3RvcmVEZWZhdWx0cyA9PT0gdm9pZCAwKSB7IHN0b3JlRGVmYXVsdHMgPSBmYWxzZTsgfVxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWVUb0pzb24ob2JqLCBqc29uLCBwcm9wZXJ0aWVzW2ldLCBzdG9yZURlZmF1bHRzKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgSnNvbk9iamVjdC5wcm90b3R5cGUudmFsdWVUb0pzb24gPSBmdW5jdGlvbiAob2JqLCByZXN1bHQsIHByb3BlcnR5LCBzdG9yZURlZmF1bHRzKSB7XG4gICAgICAgIGlmIChzdG9yZURlZmF1bHRzID09PSB2b2lkIDApIHsgc3RvcmVEZWZhdWx0cyA9IGZhbHNlOyB9XG4gICAgICAgIGlmIChwcm9wZXJ0eS5pc1NlcmlhbGl6YWJsZSA9PT0gZmFsc2UgfHxcbiAgICAgICAgICAgIChwcm9wZXJ0eS5pc0xpZ2h0U2VyaWFsaXphYmxlID09PSBmYWxzZSAmJiB0aGlzLmxpZ2h0U2VyaWFsaXppbmcpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIgdmFsdWUgPSBwcm9wZXJ0eS5nZXRWYWx1ZShvYmopO1xuICAgICAgICBpZiAoIXN0b3JlRGVmYXVsdHMgJiYgcHJvcGVydHkuaXNEZWZhdWx0VmFsdWUodmFsdWUpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAodGhpcy5pc1ZhbHVlQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICB2YXIgYXJyVmFsdWUgPSBbXTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBhcnJWYWx1ZS5wdXNoKHRoaXMudG9Kc29uT2JqZWN0Q29yZSh2YWx1ZVtpXSwgcHJvcGVydHksIHN0b3JlRGVmYXVsdHMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhbHVlID0gYXJyVmFsdWUubGVuZ3RoID4gMCA/IGFyclZhbHVlIDogbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhbHVlID0gdGhpcy50b0pzb25PYmplY3RDb3JlKHZhbHVlLCBwcm9wZXJ0eSwgc3RvcmVEZWZhdWx0cyk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGhhc1ZhbHVlID0gdHlwZW9mIG9ialtcImdldFByb3BlcnR5VmFsdWVcIl0gPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgICAgICAgICAgb2JqW1wiZ2V0UHJvcGVydHlWYWx1ZVwiXShwcm9wZXJ0eS5uYW1lLCBudWxsKSAhPT0gbnVsbDtcbiAgICAgICAgaWYgKChzdG9yZURlZmF1bHRzICYmIGhhc1ZhbHVlKSB8fCAhcHJvcGVydHkuaXNEZWZhdWx0VmFsdWUodmFsdWUpKSB7XG4gICAgICAgICAgICBpZiAoIVNlcmlhbGl6ZXIub25TZXJpYWxpemluZ1Byb3BlcnR5IHx8ICFTZXJpYWxpemVyLm9uU2VyaWFsaXppbmdQcm9wZXJ0eShvYmosIHByb3BlcnR5LCB2YWx1ZSwgcmVzdWx0KSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdFtwcm9wZXJ0eS5uYW1lXSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBKc29uT2JqZWN0LnByb3RvdHlwZS52YWx1ZVRvT2JqID0gZnVuY3Rpb24gKHZhbHVlLCBvYmosIHByb3BlcnR5KSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLnJlbW92ZVBvcyhwcm9wZXJ0eSwgdmFsdWUpO1xuICAgICAgICBpZiAocHJvcGVydHkgIT0gbnVsbCAmJiBwcm9wZXJ0eS5oYXNUb1VzZVNldFZhbHVlKSB7XG4gICAgICAgICAgICBwcm9wZXJ0eS5zZXRWYWx1ZShvYmosIHZhbHVlLCB0aGlzKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc1ZhbHVlQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlVG9BcnJheSh2YWx1ZSwgb2JqLCBwcm9wZXJ0eS5uYW1lLCBwcm9wZXJ0eSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG5ld09iaiA9IHRoaXMuY3JlYXRlTmV3T2JqKHZhbHVlLCBwcm9wZXJ0eSk7XG4gICAgICAgIGlmIChuZXdPYmoubmV3T2JqKSB7XG4gICAgICAgICAgICB0aGlzLnRvT2JqZWN0Q29yZSh2YWx1ZSwgbmV3T2JqLm5ld09iaik7XG4gICAgICAgICAgICB2YWx1ZSA9IG5ld09iai5uZXdPYmo7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFuZXdPYmouZXJyb3IpIHtcbiAgICAgICAgICAgIGlmIChwcm9wZXJ0eSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHkuc2V0VmFsdWUob2JqLCB2YWx1ZSwgdGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBvYmpbcHJvcGVydHkubmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgSnNvbk9iamVjdC5wcm90b3R5cGUucmVtb3ZlUG9zID0gZnVuY3Rpb24gKHByb3BlcnR5LCB2YWx1ZSkge1xuICAgICAgICBpZiAoIXByb3BlcnR5IHx8ICFwcm9wZXJ0eS50eXBlIHx8IHByb3BlcnR5LnR5cGUuaW5kZXhPZihcInZhbHVlXCIpIDwgMClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5yZW1vdmVQb3NGcm9tT2JqKHZhbHVlKTtcbiAgICB9O1xuICAgIEpzb25PYmplY3QucHJvdG90eXBlLnJlbW92ZVBvc0Zyb21PYmogPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIGlmICghb2JqKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9iai5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlUG9zRnJvbU9iaihvYmpbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghIW9ialtKc29uT2JqZWN0LnBvc2l0aW9uUHJvcGVydHlOYW1lXSkge1xuICAgICAgICAgICAgZGVsZXRlIG9ialtKc29uT2JqZWN0LnBvc2l0aW9uUHJvcGVydHlOYW1lXTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgSnNvbk9iamVjdC5wcm90b3R5cGUuaXNWYWx1ZUFycmF5ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSAmJiBBcnJheS5pc0FycmF5KHZhbHVlKTtcbiAgICB9O1xuICAgIEpzb25PYmplY3QucHJvdG90eXBlLmNyZWF0ZU5ld09iaiA9IGZ1bmN0aW9uICh2YWx1ZSwgcHJvcGVydHkpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHsgbmV3T2JqOiBudWxsLCBlcnJvcjogbnVsbCB9O1xuICAgICAgICB2YXIgY2xhc3NOYW1lID0gdGhpcy5nZXRDbGFzc05hbWVGb3JOZXdPYmoodmFsdWUsIHByb3BlcnR5KTtcbiAgICAgICAgcmVzdWx0Lm5ld09iaiA9IGNsYXNzTmFtZVxuICAgICAgICAgICAgPyBKc29uT2JqZWN0Lm1ldGFEYXRhLmNyZWF0ZUNsYXNzKGNsYXNzTmFtZSwgdmFsdWUpXG4gICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIHJlc3VsdC5lcnJvciA9IHRoaXMuY2hlY2tOZXdPYmplY3RPbkVycm9ycyhyZXN1bHQubmV3T2JqLCB2YWx1ZSwgcHJvcGVydHksIGNsYXNzTmFtZSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgICBKc29uT2JqZWN0LnByb3RvdHlwZS5nZXRDbGFzc05hbWVGb3JOZXdPYmogPSBmdW5jdGlvbiAodmFsdWUsIHByb3BlcnR5KSB7XG4gICAgICAgIHZhciByZXMgPSBwcm9wZXJ0eSAhPSBudWxsICYmIHByb3BlcnR5LmNsYXNzTmFtZSA/IHByb3BlcnR5LmNsYXNzTmFtZSA6IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKCFyZXMpIHtcbiAgICAgICAgICAgIHJlcyA9IHZhbHVlW0pzb25PYmplY3QudHlwZVByb3BlcnR5TmFtZV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFyZXMpXG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICByZXMgPSByZXMudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgdmFyIGNsYXNzTmFtZVBhcnQgPSBwcm9wZXJ0eS5jbGFzc05hbWVQYXJ0O1xuICAgICAgICBpZiAoY2xhc3NOYW1lUGFydCAmJiByZXMuaW5kZXhPZihjbGFzc05hbWVQYXJ0KSA8IDApIHtcbiAgICAgICAgICAgIHJlcyArPSBjbGFzc05hbWVQYXJ0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfTtcbiAgICBKc29uT2JqZWN0LnByb3RvdHlwZS5jaGVja05ld09iamVjdE9uRXJyb3JzID0gZnVuY3Rpb24gKG5ld09iaiwgdmFsdWUsIHByb3BlcnR5LCBjbGFzc05hbWUpIHtcbiAgICAgICAgdmFyIGVycm9yID0gbnVsbDtcbiAgICAgICAgaWYgKG5ld09iaikge1xuICAgICAgICAgICAgZXJyb3IgPSB0aGlzLmdldFJlcXVpcmVkRXJyb3IobmV3T2JqLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAocHJvcGVydHkuYmFzZUNsYXNzTmFtZSkge1xuICAgICAgICAgICAgICAgIGlmICghY2xhc3NOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yID0gbmV3IEpzb25NaXNzaW5nVHlwZUVycm9yKHByb3BlcnR5Lm5hbWUsIHByb3BlcnR5LmJhc2VDbGFzc05hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBuZXcgSnNvbkluY29ycmVjdFR5cGVFcnJvcihwcm9wZXJ0eS5uYW1lLCBwcm9wZXJ0eS5iYXNlQ2xhc3NOYW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLmFkZE5ld0Vycm9yKGVycm9yLCB2YWx1ZSwgbmV3T2JqKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgfTtcbiAgICBKc29uT2JqZWN0LnByb3RvdHlwZS5nZXRSZXF1aXJlZEVycm9yID0gZnVuY3Rpb24gKG9iaiwganNvblZhbHVlKSB7XG4gICAgICAgIGlmICghb2JqLmdldFR5cGUgfHwgdHlwZW9mIG9iai5nZXREYXRhID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgdmFyIGNsYXNzTmFtZSA9IG9iai5nZXRUeXBlKCk7XG4gICAgICAgIHZhciByZXF1aXJlZFByb3BlcnRpZXMgPSBKc29uT2JqZWN0Lm1ldGFEYXRhLmdldFJlcXVpcmVkUHJvcGVydGllcyhjbGFzc05hbWUpO1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkocmVxdWlyZWRQcm9wZXJ0aWVzKSlcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlcXVpcmVkUHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIHByb3AgPSBTZXJpYWxpemVyLmZpbmRQcm9wZXJ0eShjbGFzc05hbWUsIHJlcXVpcmVkUHJvcGVydGllc1tpXSk7XG4gICAgICAgICAgICBpZiAoIXByb3AgfHwgIV9oZWxwZXJzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJIZWxwZXJzXCJdLmlzVmFsdWVFbXB0eShwcm9wLmRlZmF1bHRWYWx1ZSkpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBpZiAoIWpzb25WYWx1ZVtwcm9wLm5hbWVdKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBKc29uUmVxdWlyZWRQcm9wZXJ0eUVycm9yKHByb3AubmFtZSwgY2xhc3NOYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICAgIEpzb25PYmplY3QucHJvdG90eXBlLmFkZE5ld0Vycm9yID0gZnVuY3Rpb24gKGVycm9yLCBqc29uT2JqLCBlbGVtZW50KSB7XG4gICAgICAgIGVycm9yLmpzb25PYmogPSBqc29uT2JqO1xuICAgICAgICBlcnJvci5lbGVtZW50ID0gZWxlbWVudDtcbiAgICAgICAgdGhpcy5lcnJvcnMucHVzaChlcnJvcik7XG4gICAgICAgIGlmICghanNvbk9iailcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIHBvc09iaiA9IGpzb25PYmpbSnNvbk9iamVjdC5wb3NpdGlvblByb3BlcnR5TmFtZV07XG4gICAgICAgIGlmICghcG9zT2JqKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBlcnJvci5hdCA9IHBvc09iai5zdGFydDtcbiAgICAgICAgZXJyb3IuZW5kID0gcG9zT2JqLmVuZDtcbiAgICB9O1xuICAgIEpzb25PYmplY3QucHJvdG90eXBlLnZhbHVlVG9BcnJheSA9IGZ1bmN0aW9uICh2YWx1ZSwgb2JqLCBrZXksIHByb3BlcnR5KSB7XG4gICAgICAgIGlmIChvYmpba2V5XSAmJiAhdGhpcy5pc1ZhbHVlQXJyYXkob2JqW2tleV0pKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAob2JqW2tleV0gJiYgdmFsdWUubGVuZ3RoID4gMClcbiAgICAgICAgICAgIG9ialtrZXldLnNwbGljZSgwLCBvYmpba2V5XS5sZW5ndGgpO1xuICAgICAgICB2YXIgdmFsdWVSZXMgPSBvYmpba2V5XSA/IG9ialtrZXldIDogW107XG4gICAgICAgIHRoaXMuYWRkVmFsdWVzSW50b0FycmF5KHZhbHVlLCB2YWx1ZVJlcywgcHJvcGVydHkpO1xuICAgICAgICBpZiAoIW9ialtrZXldKVxuICAgICAgICAgICAgb2JqW2tleV0gPSB2YWx1ZVJlcztcbiAgICB9O1xuICAgIEpzb25PYmplY3QucHJvdG90eXBlLmFkZFZhbHVlc0ludG9BcnJheSA9IGZ1bmN0aW9uICh2YWx1ZSwgcmVzdWx0LCBwcm9wZXJ0eSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgbmV3VmFsdWUgPSB0aGlzLmNyZWF0ZU5ld09iaih2YWx1ZVtpXSwgcHJvcGVydHkpO1xuICAgICAgICAgICAgaWYgKG5ld1ZhbHVlLm5ld09iaikge1xuICAgICAgICAgICAgICAgIGlmICghIXZhbHVlW2ldLm5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3VmFsdWUubmV3T2JqLm5hbWUgPSB2YWx1ZVtpXS5uYW1lO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoISF2YWx1ZVtpXS52YWx1ZU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3VmFsdWUubmV3T2JqLnZhbHVlTmFtZSA9IHZhbHVlW2ldLnZhbHVlTmFtZS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChuZXdWYWx1ZS5uZXdPYmopO1xuICAgICAgICAgICAgICAgIHRoaXMudG9PYmplY3RDb3JlKHZhbHVlW2ldLCBuZXdWYWx1ZS5uZXdPYmopO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKCFuZXdWYWx1ZS5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh2YWx1ZVtpXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBKc29uT2JqZWN0LnByb3RvdHlwZS5maW5kUHJvcGVydHkgPSBmdW5jdGlvbiAocHJvcGVydGllcywga2V5KSB7XG4gICAgICAgIGlmICghcHJvcGVydGllcylcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBwcm9wID0gcHJvcGVydGllc1tpXTtcbiAgICAgICAgICAgIGlmIChwcm9wLm5hbWUgPT0ga2V5IHx8IHByb3AuYWx0ZXJuYXRpdmVOYW1lID09IGtleSlcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvcDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICAgIEpzb25PYmplY3QudHlwZVByb3BlcnR5TmFtZSA9IFwidHlwZVwiO1xuICAgIEpzb25PYmplY3QucG9zaXRpb25Qcm9wZXJ0eU5hbWUgPSBcInBvc1wiO1xuICAgIEpzb25PYmplY3QubWV0YURhdGFWYWx1ZSA9IG5ldyBKc29uTWV0YWRhdGEoKTtcbiAgICByZXR1cm4gSnNvbk9iamVjdDtcbn0oKSk7XG5cbi8qKlxuICogQW4gYWxpYXMgZm9yIHRoZSBtZXRhZGF0YSBvYmplY3QuIEl0IGNvbnRhaW5zIG9iamVjdCBwcm9wZXJ0aWVzJyBydW50aW1lIGluZm9ybWF0aW9uIGFuZCBhbGxvd3MgeW91IHRvIG1vZGlmeSBpdC5cbiAqIEBzZWUgSnNvbk1ldGFkYXRhXG4gKi9cbnZhciBTZXJpYWxpemVyID0gSnNvbk9iamVjdC5tZXRhRGF0YTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9saXN0LnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvbGlzdC50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGRlZmF1bHRMaXN0Q3NzLCBMaXN0TW9kZWwgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiZGVmYXVsdExpc3RDc3NcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBkZWZhdWx0TGlzdENzczsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiTGlzdE1vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gTGlzdE1vZGVsOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9qc29ub2JqZWN0ICovIFwiLi9zcmMvanNvbm9iamVjdC50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYWN0aW9uc19jb250YWluZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYWN0aW9ucy9jb250YWluZXIgKi8gXCIuL3NyYy9hY3Rpb25zL2NvbnRhaW5lci50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYWN0aW9uc19hY3Rpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYWN0aW9ucy9hY3Rpb24gKi8gXCIuL3NyYy9hY3Rpb25zL2FjdGlvbi50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdXRpbHNfY3NzQ2xhc3NCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3V0aWxzL2Nzc0NsYXNzQnVpbGRlciAqLyBcIi4vc3JjL3V0aWxzL2Nzc0NsYXNzQnVpbGRlci50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZWxlbWVudF9oZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZWxlbWVudC1oZWxwZXIgKi8gXCIuL3NyYy9lbGVtZW50LWhlbHBlci50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdXRpbHNfdXRpbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vdXRpbHMvdXRpbHMgKi8gXCIuL3NyYy91dGlscy91dGlscy50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc2V0dGluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vc2V0dGluZ3MgKi8gXCIuL3NyYy9zZXR0aW5ncy50c1wiKTtcbnZhciBfX2V4dGVuZHMgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xudmFyIF9fZGVjb3JhdGUgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufTtcblxuXG5cblxuXG5cblxudmFyIGRlZmF1bHRMaXN0Q3NzID0ge1xuICAgIHJvb3Q6IFwic3YtbGlzdF9fY29udGFpbmVyXCIsXG4gICAgaXRlbTogXCJzdi1saXN0X19pdGVtXCIsXG4gICAgc2VhcmNoQ2xlYXJCdXR0b25JY29uOiBcInN2LWxpc3RfX2ZpbHRlci1jbGVhci1idXR0b25cIixcbiAgICBsb2FkaW5nSW5kaWNhdG9yOiBcInN2LWxpc3RfX2xvYWRpbmctaW5kaWNhdG9yXCIsXG4gICAgaXRlbVNlbGVjdGVkOiBcInN2LWxpc3RfX2l0ZW0tLXNlbGVjdGVkXCIsXG4gICAgaXRlbVdpdGhJY29uOiBcInN2LWxpc3RfX2l0ZW0tLXdpdGgtaWNvblwiLFxuICAgIGl0ZW1EaXNhYmxlZDogXCJzdi1saXN0X19pdGVtLS1kaXNhYmxlZFwiLFxuICAgIGl0ZW1Gb2N1c2VkOiBcInN2LWxpc3RfX2l0ZW0tLWZvY3VzZWRcIixcbiAgICBpdGVtSWNvbjogXCJzdi1saXN0X19pdGVtLWljb25cIixcbiAgICBpdGVtU2VwYXJhdG9yOiBcInN2LWxpc3RfX2l0ZW0tc2VwYXJhdG9yXCIsXG4gICAgaXRlbUJvZHk6IFwic3YtbGlzdF9faXRlbS1ib2R5XCIsXG4gICAgaXRlbXNDb250YWluZXI6IFwic3YtbGlzdFwiLFxuICAgIGl0ZW1zQ29udGFpbmVyRmlsdGVyaW5nOiBcInN2LWxpc3QtLWZpbHRlcmluZ1wiLFxuICAgIGZpbHRlcjogXCJzdi1saXN0X19maWx0ZXJcIixcbiAgICBmaWx0ZXJJY29uOiBcInN2LWxpc3RfX2ZpbHRlci1pY29uXCIsXG4gICAgZmlsdGVySW5wdXQ6IFwic3YtbGlzdF9faW5wdXRcIixcbiAgICBlbXB0eUNvbnRhaW5lcjogXCJzdi1saXN0X19lbXB0eS1jb250YWluZXJcIixcbiAgICBlbXB0eVRleHQ6IFwic3YtbGlzdF9fZW1wdHktdGV4dFwiXG59O1xudmFyIExpc3RNb2RlbCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoTGlzdE1vZGVsLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIExpc3RNb2RlbChpdGVtcywgb25TZWxlY3Rpb25DaGFuZ2VkLCBhbGxvd1NlbGVjdGlvbiwgc2VsZWN0ZWRJdGVtLCBvbkZpbHRlclN0cmluZ0NoYW5nZWRDYWxsYmFjaywgZWxlbWVudElkKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLm9uU2VsZWN0aW9uQ2hhbmdlZCA9IG9uU2VsZWN0aW9uQ2hhbmdlZDtcbiAgICAgICAgX3RoaXMuYWxsb3dTZWxlY3Rpb24gPSBhbGxvd1NlbGVjdGlvbjtcbiAgICAgICAgX3RoaXMub25GaWx0ZXJTdHJpbmdDaGFuZ2VkQ2FsbGJhY2sgPSBvbkZpbHRlclN0cmluZ0NoYW5nZWRDYWxsYmFjaztcbiAgICAgICAgX3RoaXMuZWxlbWVudElkID0gZWxlbWVudElkO1xuICAgICAgICBfdGhpcy5vbkl0ZW1DbGljayA9IGZ1bmN0aW9uIChpdGVtVmFsdWUpIHtcbiAgICAgICAgICAgIGlmIChfdGhpcy5pc0l0ZW1EaXNhYmxlZChpdGVtVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX3RoaXMuaXNFeHBhbmRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKF90aGlzLmFsbG93U2VsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMuc2VsZWN0ZWRJdGVtID0gaXRlbVZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCEhX3RoaXMub25TZWxlY3Rpb25DaGFuZ2VkKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMub25TZWxlY3Rpb25DaGFuZ2VkKGl0ZW1WYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIF90aGlzLmlzSXRlbURpc2FibGVkID0gZnVuY3Rpb24gKGl0ZW1WYWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW1WYWx1ZS5lbmFibGVkICE9PSB1bmRlZmluZWQgJiYgIWl0ZW1WYWx1ZS5lbmFibGVkO1xuICAgICAgICB9O1xuICAgICAgICBfdGhpcy5pc0l0ZW1TZWxlY3RlZCA9IGZ1bmN0aW9uIChpdGVtVmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiBfdGhpcy5hcmVTYW1lSXRlbXMoX3RoaXMuc2VsZWN0ZWRJdGVtLCBpdGVtVmFsdWUpO1xuICAgICAgICB9O1xuICAgICAgICBfdGhpcy5pc0l0ZW1Gb2N1c2VkID0gZnVuY3Rpb24gKGl0ZW1WYWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIF90aGlzLmFyZVNhbWVJdGVtcyhfdGhpcy5mb2N1c2VkSXRlbSwgaXRlbVZhbHVlKTtcbiAgICAgICAgfTtcbiAgICAgICAgX3RoaXMuZ2V0TGlzdENsYXNzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBfdXRpbHNfY3NzQ2xhc3NCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJDc3NDbGFzc0J1aWxkZXJcIl0oKVxuICAgICAgICAgICAgICAgIC5hcHBlbmQoX3RoaXMuY3NzQ2xhc3Nlcy5pdGVtc0NvbnRhaW5lcilcbiAgICAgICAgICAgICAgICAuYXBwZW5kKF90aGlzLmNzc0NsYXNzZXMuaXRlbXNDb250YWluZXJGaWx0ZXJpbmcsICEhX3RoaXMuZmlsdGVyU3RyaW5nICYmIF90aGlzLnZpc2libGVBY3Rpb25zLmxlbmd0aCAhPT0gX3RoaXMudmlzaWJsZUl0ZW1zLmxlbmd0aClcbiAgICAgICAgICAgICAgICAudG9TdHJpbmcoKTtcbiAgICAgICAgfTtcbiAgICAgICAgX3RoaXMuZ2V0SXRlbUNsYXNzID0gZnVuY3Rpb24gKGl0ZW1WYWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBfdXRpbHNfY3NzQ2xhc3NCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJDc3NDbGFzc0J1aWxkZXJcIl0oKVxuICAgICAgICAgICAgICAgIC5hcHBlbmQoX3RoaXMuY3NzQ2xhc3Nlcy5pdGVtKVxuICAgICAgICAgICAgICAgIC5hcHBlbmQoX3RoaXMuY3NzQ2xhc3Nlcy5pdGVtV2l0aEljb24sICEhaXRlbVZhbHVlLmljb25OYW1lKVxuICAgICAgICAgICAgICAgIC5hcHBlbmQoX3RoaXMuY3NzQ2xhc3Nlcy5pdGVtRGlzYWJsZWQsIF90aGlzLmlzSXRlbURpc2FibGVkKGl0ZW1WYWx1ZSkpXG4gICAgICAgICAgICAgICAgLmFwcGVuZChfdGhpcy5jc3NDbGFzc2VzLml0ZW1Gb2N1c2VkLCBfdGhpcy5pc0l0ZW1Gb2N1c2VkKGl0ZW1WYWx1ZSkpXG4gICAgICAgICAgICAgICAgLmFwcGVuZChfdGhpcy5jc3NDbGFzc2VzLml0ZW1TZWxlY3RlZCwgX3RoaXMuaXNJdGVtU2VsZWN0ZWQoaXRlbVZhbHVlKSlcbiAgICAgICAgICAgICAgICAuYXBwZW5kKGl0ZW1WYWx1ZS5jc3MpXG4gICAgICAgICAgICAgICAgLnRvU3RyaW5nKCk7XG4gICAgICAgIH07XG4gICAgICAgIF90aGlzLmdldEl0ZW1JbmRlbnQgPSBmdW5jdGlvbiAoaXRlbVZhbHVlKSB7XG4gICAgICAgICAgICB2YXIgbGV2ZWwgPSBpdGVtVmFsdWUubGV2ZWwgfHwgMDtcbiAgICAgICAgICAgIHJldHVybiAobGV2ZWwgKyAxKSAqIExpc3RNb2RlbC5JTkRFTlQgKyBcInB4XCI7XG4gICAgICAgIH07XG4gICAgICAgIF90aGlzLnNldEl0ZW1zKGl0ZW1zKTtcbiAgICAgICAgX3RoaXMuc2VsZWN0ZWRJdGVtID0gc2VsZWN0ZWRJdGVtO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIExpc3RNb2RlbC5wcm90b3R5cGUuaGFzVGV4dCA9IGZ1bmN0aW9uIChpdGVtLCBmaWx0ZXJTdHJpbmdJbkxvdykge1xuICAgICAgICBpZiAoIWZpbHRlclN0cmluZ0luTG93KVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIHZhciB0ZXh0SW5Mb3cgPSAoaXRlbS50aXRsZSB8fCBcIlwiKS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICB0ZXh0SW5Mb3cgPSBfc2V0dGluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1tcInNldHRpbmdzXCJdLmNvbXBhcmF0b3Iubm9ybWFsaXplVGV4dENhbGxiYWNrKHRleHRJbkxvdywgXCJmaWx0ZXJcIik7XG4gICAgICAgIHJldHVybiB0ZXh0SW5Mb3cuaW5kZXhPZihmaWx0ZXJTdHJpbmdJbkxvdy50b0xvY2FsZUxvd2VyQ2FzZSgpKSA+IC0xO1xuICAgIH07XG4gICAgTGlzdE1vZGVsLnByb3RvdHlwZS5pc0l0ZW1WaXNpYmxlID0gZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0udmlzaWJsZSAmJiAoIXRoaXMuc2hvdWxkUHJvY2Vzc0ZpbHRlciB8fCB0aGlzLmhhc1RleHQoaXRlbSwgdGhpcy5maWx0ZXJTdHJpbmcpKTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShMaXN0TW9kZWwucHJvdG90eXBlLCBcInZpc2libGVJdGVtc1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZpc2libGVBY3Rpb25zLmZpbHRlcihmdW5jdGlvbiAoaXRlbSkgeyByZXR1cm4gX3RoaXMuaXNJdGVtVmlzaWJsZShpdGVtKTsgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTGlzdE1vZGVsLnByb3RvdHlwZSwgXCJzaG91bGRQcm9jZXNzRmlsdGVyXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gIXRoaXMub25GaWx0ZXJTdHJpbmdDaGFuZ2VkQ2FsbGJhY2s7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBMaXN0TW9kZWwucHJvdG90eXBlLm9uRmlsdGVyU3RyaW5nQ2hhbmdlZCA9IGZ1bmN0aW9uICh0ZXh0KSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGlmICghIXRoaXMub25GaWx0ZXJTdHJpbmdDaGFuZ2VkQ2FsbGJhY2spIHtcbiAgICAgICAgICAgIHRoaXMub25GaWx0ZXJTdHJpbmdDaGFuZ2VkQ2FsbGJhY2sodGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc0VtcHR5ID0gdGhpcy5yZW5kZXJlZEFjdGlvbnMuZmlsdGVyKGZ1bmN0aW9uIChhY3Rpb24pIHsgcmV0dXJuIF90aGlzLmlzSXRlbVZpc2libGUoYWN0aW9uKTsgfSkubGVuZ3RoID09PSAwO1xuICAgIH07XG4gICAgTGlzdE1vZGVsLnByb3RvdHlwZS5zY3JvbGxUb0l0ZW0gPSBmdW5jdGlvbiAoc2VsZWN0b3IsIG1zKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGlmIChtcyA9PT0gdm9pZCAwKSB7IG1zID0gMDsgfVxuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghX3RoaXMubGlzdENvbnRhaW5lckh0bWxFbGVtZW50KVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHZhciBpdGVtID0gX3RoaXMubGlzdENvbnRhaW5lckh0bWxFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuXCIgKyBzZWxlY3Rvcik7XG4gICAgICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBpdGVtLnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6IFwic21vb3RoXCIsIGJsb2NrOiBcIm5lYXJlc3RcIiwgaW5saW5lOiBcInN0YXJ0XCIgfSk7XG4gICAgICAgICAgICAgICAgfSwgbXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBtcyk7XG4gICAgfTtcbiAgICBMaXN0TW9kZWwucHJvdG90eXBlLnNldE9uRmlsdGVyU3RyaW5nQ2hhbmdlZENhbGxiYWNrID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMub25GaWx0ZXJTdHJpbmdDaGFuZ2VkQ2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICB9O1xuICAgIExpc3RNb2RlbC5wcm90b3R5cGUuc2V0SXRlbXMgPSBmdW5jdGlvbiAoaXRlbXMsIHNvcnRCeVZpc2libGVJbmRleCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBpZiAoc29ydEJ5VmlzaWJsZUluZGV4ID09PSB2b2lkIDApIHsgc29ydEJ5VmlzaWJsZUluZGV4ID0gdHJ1ZTsgfVxuICAgICAgICBfc3VwZXIucHJvdG90eXBlLnNldEl0ZW1zLmNhbGwodGhpcywgaXRlbXMsIHNvcnRCeVZpc2libGVJbmRleCk7XG4gICAgICAgIGlmICh0aGlzLmVsZW1lbnRJZCkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlZEFjdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoYWN0aW9uKSB7IGFjdGlvbi5lbGVtZW50SWQgPSBfdGhpcy5lbGVtZW50SWQgKyBhY3Rpb24uaWQ7IH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5pc0FsbERhdGFMb2FkZWQgJiYgISF0aGlzLmFjdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGlvbnMucHVzaCh0aGlzLmxvYWRpbmdJbmRpY2F0b3IpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBMaXN0TW9kZWwucHJvdG90eXBlLm9uU2V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnNob3dGaWx0ZXIgPSB0aGlzLnNlYXJjaEVuYWJsZWQgJiYgKHRoaXMuZm9yY2VTaG93RmlsdGVyIHx8ICh0aGlzLmFjdGlvbnMgfHwgW10pLmxlbmd0aCA+IExpc3RNb2RlbC5NSU5FTEVNRU5UQ09VTlQpO1xuICAgICAgICBfc3VwZXIucHJvdG90eXBlLm9uU2V0LmNhbGwodGhpcyk7XG4gICAgfTtcbiAgICBMaXN0TW9kZWwucHJvdG90eXBlLmdldERlZmF1bHRDc3NDbGFzc2VzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZGVmYXVsdExpc3RDc3M7XG4gICAgfTtcbiAgICBMaXN0TW9kZWwucHJvdG90eXBlLmFyZVNhbWVJdGVtcyA9IGZ1bmN0aW9uIChpdGVtMSwgaXRlbTIpIHtcbiAgICAgICAgaWYgKCEhdGhpcy5hcmVTYW1lSXRlbXNDYWxsYmFjaylcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFyZVNhbWVJdGVtc0NhbGxiYWNrKGl0ZW0xLCBpdGVtMik7XG4gICAgICAgIHJldHVybiAhIWl0ZW0xICYmICEhaXRlbTIgJiYgaXRlbTEuaWQgPT0gaXRlbTIuaWQ7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTGlzdE1vZGVsLnByb3RvdHlwZSwgXCJmaWx0ZXJTdHJpbmdQbGFjZWhvbGRlclwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemF0aW9uU3RyaW5nKFwiZmlsdGVyU3RyaW5nUGxhY2Vob2xkZXJcIik7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTGlzdE1vZGVsLnByb3RvdHlwZSwgXCJlbXB0eU1lc3NhZ2VcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlzQWxsRGF0YUxvYWRlZCA/IHRoaXMuZ2V0TG9jYWxpemF0aW9uU3RyaW5nKFwiZW1wdHlNZXNzYWdlXCIpIDogdGhpcy5sb2FkaW5nVGV4dDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShMaXN0TW9kZWwucHJvdG90eXBlLCBcInNjcm9sbGFibGVDb250YWluZXJcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxpc3RDb250YWluZXJIdG1sRWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiLlwiICsgdGhpcy5nZXREZWZhdWx0Q3NzQ2xhc3NlcygpLml0ZW1zQ29udGFpbmVyKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShMaXN0TW9kZWwucHJvdG90eXBlLCBcImxvYWRpbmdUZXh0XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YXRpb25TdHJpbmcoXCJsb2FkaW5nRmlsZVwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShMaXN0TW9kZWwucHJvdG90eXBlLCBcImxvYWRpbmdJbmRpY2F0b3JcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5sb2FkaW5nSW5kaWNhdG9yVmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmdJbmRpY2F0b3JWYWx1ZSA9IChuZXcgX2FjdGlvbnNfYWN0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJBY3Rpb25cIl0oe1xuICAgICAgICAgICAgICAgICAgICBpZDogXCJsb2FkaW5nSW5kaWNhdG9yXCIsXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiB0aGlzLmxvYWRpbmdUZXh0LFxuICAgICAgICAgICAgICAgICAgICBhY3Rpb246IGZ1bmN0aW9uICgpIHsgfSxcbiAgICAgICAgICAgICAgICAgICAgY3NzOiB0aGlzLmNzc0NsYXNzZXMubG9hZGluZ0luZGljYXRvclxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvYWRpbmdJbmRpY2F0b3JWYWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIExpc3RNb2RlbC5wcm90b3R5cGUuZ29Ub0l0ZW1zID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIGlmIChldmVudC5rZXkgPT09IFwiQXJyb3dEb3duXCIgfHwgZXZlbnQua2V5Q29kZSA9PT0gNDApIHtcbiAgICAgICAgICAgIHZhciBjdXJyZW50RWxlbWVudCA9IGV2ZW50LnRhcmdldC5wYXJlbnRFbGVtZW50O1xuICAgICAgICAgICAgdmFyIGxpc3RFbGVtZW50ID0gY3VycmVudEVsZW1lbnQucGFyZW50RWxlbWVudC5xdWVyeVNlbGVjdG9yKFwidWxcIik7XG4gICAgICAgICAgICB2YXIgZmlyc3RDaGlsZCA9IE9iamVjdChfdXRpbHNfdXRpbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1tcImdldEZpcnN0VmlzaWJsZUNoaWxkXCJdKShsaXN0RWxlbWVudCk7XG4gICAgICAgICAgICBpZiAoISFsaXN0RWxlbWVudCAmJiAhIWZpcnN0Q2hpbGQpIHtcbiAgICAgICAgICAgICAgICBfZWxlbWVudF9oZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1tcIkVsZW1lbnRIZWxwZXJcIl0uZm9jdXNFbGVtZW50KGZpcnN0Q2hpbGQpO1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIExpc3RNb2RlbC5wcm90b3R5cGUub25Nb3VzZU1vdmUgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5yZXNldEZvY3VzZWRJdGVtKCk7XG4gICAgfTtcbiAgICBMaXN0TW9kZWwucHJvdG90eXBlLm9uS2V5RG93biA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICB2YXIgY3VycmVudEVsZW1lbnQgPSBldmVudC50YXJnZXQ7XG4gICAgICAgIGlmIChldmVudC5rZXkgPT09IFwiQXJyb3dEb3duXCIgfHwgZXZlbnQua2V5Q29kZSA9PT0gNDApIHtcbiAgICAgICAgICAgIF9lbGVtZW50X2hlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fW1wiRWxlbWVudEhlbHBlclwiXS5mb2N1c0VsZW1lbnQoX2VsZW1lbnRfaGVscGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bXCJFbGVtZW50SGVscGVyXCJdLmdldE5leHRFbGVtZW50UHJlb3JkZXIoY3VycmVudEVsZW1lbnQpKTtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZXZlbnQua2V5ID09PSBcIkFycm93VXBcIiB8fCBldmVudC5rZXlDb2RlID09PSAzOCkge1xuICAgICAgICAgICAgX2VsZW1lbnRfaGVscGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bXCJFbGVtZW50SGVscGVyXCJdLmZvY3VzRWxlbWVudChfZWxlbWVudF9oZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1tcIkVsZW1lbnRIZWxwZXJcIl0uZ2V0TmV4dEVsZW1lbnRQb3N0b3JkZXIoY3VycmVudEVsZW1lbnQpKTtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIExpc3RNb2RlbC5wcm90b3R5cGUub25Qb2ludGVyRG93biA9IGZ1bmN0aW9uIChldmVudCwgaXRlbSkgeyB9O1xuICAgIExpc3RNb2RlbC5wcm90b3R5cGUucmVmcmVzaCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5maWx0ZXJTdHJpbmcgPSBcIlwiO1xuICAgICAgICB0aGlzLnJlc2V0Rm9jdXNlZEl0ZW0oKTtcbiAgICB9O1xuICAgIExpc3RNb2RlbC5wcm90b3R5cGUub25DbGlja1NlYXJjaENsZWFyQnV0dG9uID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIGV2ZW50LmN1cnJlbnRUYXJnZXQucGFyZW50RWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiaW5wdXRcIikuZm9jdXMoKTtcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgfTtcbiAgICBMaXN0TW9kZWwucHJvdG90eXBlLnJlc2V0Rm9jdXNlZEl0ZW0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuZm9jdXNlZEl0ZW0gPSB1bmRlZmluZWQ7XG4gICAgfTtcbiAgICBMaXN0TW9kZWwucHJvdG90eXBlLmZvY3VzRmlyc3RWaXNpYmxlSXRlbSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5mb2N1c2VkSXRlbSA9IHRoaXMudmlzaWJsZUl0ZW1zWzBdO1xuICAgIH07XG4gICAgTGlzdE1vZGVsLnByb3RvdHlwZS5mb2N1c0xhc3RWaXNpYmxlSXRlbSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5mb2N1c2VkSXRlbSA9IHRoaXMudmlzaWJsZUl0ZW1zW3RoaXMudmlzaWJsZUl0ZW1zLmxlbmd0aCAtIDFdO1xuICAgIH07XG4gICAgTGlzdE1vZGVsLnByb3RvdHlwZS5pbml0Rm9jdXNlZEl0ZW0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHRoaXMuZm9jdXNlZEl0ZW0gPSB0aGlzLnZpc2libGVJdGVtcy5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHsgcmV0dXJuIGl0ZW0udmlzaWJsZSAmJiBfdGhpcy5pc0l0ZW1TZWxlY3RlZChpdGVtKTsgfSlbMF07XG4gICAgICAgIGlmICghdGhpcy5mb2N1c2VkSXRlbSkge1xuICAgICAgICAgICAgdGhpcy5mb2N1c0ZpcnN0VmlzaWJsZUl0ZW0oKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgTGlzdE1vZGVsLnByb3RvdHlwZS5mb2N1c05leHRWaXNpYmxlSXRlbSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmZvY3VzZWRJdGVtKSB7XG4gICAgICAgICAgICB0aGlzLmluaXRGb2N1c2VkSXRlbSgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIGl0ZW1zID0gdGhpcy52aXNpYmxlSXRlbXM7XG4gICAgICAgICAgICB2YXIgY3VycmVudEZvY3VzZWRJdGVtSW5kZXggPSBpdGVtcy5pbmRleE9mKHRoaXMuZm9jdXNlZEl0ZW0pO1xuICAgICAgICAgICAgdmFyIG5leHRJdGVtID0gaXRlbXNbY3VycmVudEZvY3VzZWRJdGVtSW5kZXggKyAxXTtcbiAgICAgICAgICAgIGlmIChuZXh0SXRlbSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNlZEl0ZW0gPSBuZXh0SXRlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNGaXJzdFZpc2libGVJdGVtKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIExpc3RNb2RlbC5wcm90b3R5cGUuZm9jdXNQcmV2VmlzaWJsZUl0ZW0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5mb2N1c2VkSXRlbSkge1xuICAgICAgICAgICAgdGhpcy5pbml0Rm9jdXNlZEl0ZW0oKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciBpdGVtcyA9IHRoaXMudmlzaWJsZUl0ZW1zO1xuICAgICAgICAgICAgdmFyIGN1cnJlbnRGb2N1c2VkSXRlbUluZGV4ID0gaXRlbXMuaW5kZXhPZih0aGlzLmZvY3VzZWRJdGVtKTtcbiAgICAgICAgICAgIHZhciBwcmV2SXRlbSA9IGl0ZW1zW2N1cnJlbnRGb2N1c2VkSXRlbUluZGV4IC0gMV07XG4gICAgICAgICAgICBpZiAocHJldkl0ZW0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzZWRJdGVtID0gcHJldkl0ZW07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzTGFzdFZpc2libGVJdGVtKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIExpc3RNb2RlbC5wcm90b3R5cGUuc2VsZWN0Rm9jdXNlZEl0ZW0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICEhdGhpcy5mb2N1c2VkSXRlbSAmJiB0aGlzLm9uSXRlbUNsaWNrKHRoaXMuZm9jdXNlZEl0ZW0pO1xuICAgIH07XG4gICAgTGlzdE1vZGVsLnByb3RvdHlwZS5pbml0TGlzdENvbnRhaW5lckh0bWxFbGVtZW50ID0gZnVuY3Rpb24gKGh0bWxFbGVtZW50KSB7XG4gICAgICAgIHRoaXMubGlzdENvbnRhaW5lckh0bWxFbGVtZW50ID0gaHRtbEVsZW1lbnQ7XG4gICAgfTtcbiAgICBMaXN0TW9kZWwucHJvdG90eXBlLm9uTGFzdEl0ZW1SZW5kZWQgPSBmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICBpZiAodGhpcy5pc0FsbERhdGFMb2FkZWQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmIChpdGVtID09PSB0aGlzLmFjdGlvbnNbdGhpcy5hY3Rpb25zLmxlbmd0aCAtIDFdICYmICEhdGhpcy5saXN0Q29udGFpbmVySHRtbEVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuaGFzVmVydGljYWxTY3JvbGxlciA9IF9lbGVtZW50X2hlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fW1wiRWxlbWVudEhlbHBlclwiXS5oYXNWZXJ0aWNhbFNjcm9sbGVyKHRoaXMuc2Nyb2xsYWJsZUNvbnRhaW5lcik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIExpc3RNb2RlbC5wcm90b3R5cGUuc2Nyb2xsVG9Gb2N1c2VkSXRlbSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5zY3JvbGxUb0l0ZW0odGhpcy5nZXREZWZhdWx0Q3NzQ2xhc3NlcygpLml0ZW1Gb2N1c2VkKTtcbiAgICB9O1xuICAgIExpc3RNb2RlbC5wcm90b3R5cGUuc2Nyb2xsVG9TZWxlY3RlZEl0ZW0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuc2Nyb2xsVG9JdGVtKHRoaXMuZ2V0RGVmYXVsdENzc0NsYXNzZXMoKS5pdGVtU2VsZWN0ZWQsIDExMCk7XG4gICAgfTtcbiAgICBMaXN0TW9kZWwucHJvdG90eXBlLmFkZFNjcm9sbEV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbiAoaGFuZGxlcikge1xuICAgICAgICBpZiAoISFoYW5kbGVyKSB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbEhhbmRsZXIgPSBoYW5kbGVyO1xuICAgICAgICB9XG4gICAgICAgIGlmICghIXRoaXMuc2Nyb2xsSGFuZGxlcikge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxhYmxlQ29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgdGhpcy5zY3JvbGxIYW5kbGVyKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgTGlzdE1vZGVsLnByb3RvdHlwZS5yZW1vdmVTY3JvbGxFdmVudExpc3RlbmVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoISF0aGlzLnNjcm9sbEhhbmRsZXIpIHtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsYWJsZUNvbnRhaW5lci5yZW1vdmVFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIHRoaXMuc2Nyb2xsSGFuZGxlcik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIExpc3RNb2RlbC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG4gICAgICAgIGlmICghIXRoaXMubG9hZGluZ0luZGljYXRvclZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmdJbmRpY2F0b3JWYWx1ZS5kaXNwb3NlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5saXN0Q29udGFpbmVySHRtbEVsZW1lbnQgPSB1bmRlZmluZWQ7XG4gICAgfTtcbiAgICBMaXN0TW9kZWwuSU5ERU5UID0gMTY7XG4gICAgTGlzdE1vZGVsLk1JTkVMRU1FTlRDT1VOVCA9IDEwO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QoX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInByb3BlcnR5XCJdKSh7XG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU6IHRydWUsXG4gICAgICAgICAgICBvblNldDogZnVuY3Rpb24gKG5ld1ZhbHVlLCB0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXQub25TZXQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICBdLCBMaXN0TW9kZWwucHJvdG90eXBlLCBcInNlYXJjaEVuYWJsZWRcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJwcm9wZXJ0eVwiXSkoeyBkZWZhdWx0VmFsdWU6IGZhbHNlIH0pXG4gICAgXSwgTGlzdE1vZGVsLnByb3RvdHlwZSwgXCJzaG93RmlsdGVyXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicHJvcGVydHlcIl0pKHsgZGVmYXVsdFZhbHVlOiBmYWxzZSB9KVxuICAgIF0sIExpc3RNb2RlbC5wcm90b3R5cGUsIFwiZm9yY2VTaG93RmlsdGVyXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicHJvcGVydHlcIl0pKHsgZGVmYXVsdFZhbHVlOiBmYWxzZSB9KVxuICAgIF0sIExpc3RNb2RlbC5wcm90b3R5cGUsIFwiaXNFeHBhbmRlZFwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QoX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInByb3BlcnR5XCJdKSh7fSlcbiAgICBdLCBMaXN0TW9kZWwucHJvdG90eXBlLCBcInNlbGVjdGVkSXRlbVwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QoX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInByb3BlcnR5XCJdKSgpXG4gICAgXSwgTGlzdE1vZGVsLnByb3RvdHlwZSwgXCJmb2N1c2VkSXRlbVwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QoX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInByb3BlcnR5XCJdKSh7XG4gICAgICAgICAgICBvblNldDogZnVuY3Rpb24gKF8sIHRhcmdldCkge1xuICAgICAgICAgICAgICAgIHRhcmdldC5vbkZpbHRlclN0cmluZ0NoYW5nZWQodGFyZ2V0LmZpbHRlclN0cmluZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgXSwgTGlzdE1vZGVsLnByb3RvdHlwZSwgXCJmaWx0ZXJTdHJpbmdcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJwcm9wZXJ0eVwiXSkoeyBkZWZhdWx0VmFsdWU6IGZhbHNlIH0pXG4gICAgXSwgTGlzdE1vZGVsLnByb3RvdHlwZSwgXCJoYXNWZXJ0aWNhbFNjcm9sbGVyXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicHJvcGVydHlcIl0pKHsgZGVmYXVsdFZhbHVlOiB0cnVlIH0pXG4gICAgXSwgTGlzdE1vZGVsLnByb3RvdHlwZSwgXCJpc0FsbERhdGFMb2FkZWRcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJwcm9wZXJ0eVwiXSkoeyBkZWZhdWx0VmFsdWU6IGZhbHNlIH0pXG4gICAgXSwgTGlzdE1vZGVsLnByb3RvdHlwZSwgXCJzaG93U2VhcmNoQ2xlYXJCdXR0b25cIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJwcm9wZXJ0eVwiXSkoeyBkZWZhdWx0VmFsdWU6IHRydWUgfSlcbiAgICBdLCBMaXN0TW9kZWwucHJvdG90eXBlLCBcInJlbmRlckVsZW1lbnRzXCIsIHZvaWQgMCk7XG4gICAgcmV0dXJuIExpc3RNb2RlbDtcbn0oX2FjdGlvbnNfY29udGFpbmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJBY3Rpb25Db250YWluZXJcIl0pKTtcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL2xvY2FsaXphYmxlc3RyaW5nLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL2xvY2FsaXphYmxlc3RyaW5nLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IExvY2FsaXphYmxlU3RyaW5nLCBMb2NhbGl6YWJsZVN0cmluZ3MgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiTG9jYWxpemFibGVTdHJpbmdcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBMb2NhbGl6YWJsZVN0cmluZzsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiTG9jYWxpemFibGVTdHJpbmdzXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gTG9jYWxpemFibGVTdHJpbmdzOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfaGVscGVyc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9oZWxwZXJzICovIFwiLi9zcmMvaGVscGVycy50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc3VydmV5U3RyaW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9zdXJ2ZXlTdHJpbmdzICovIFwiLi9zcmMvc3VydmV5U3RyaW5ncy50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc2V0dGluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vc2V0dGluZ3MgKi8gXCIuL3NyYy9zZXR0aW5ncy50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYmFzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9iYXNlICovIFwiLi9zcmMvYmFzZS50c1wiKTtcblxuXG5cblxuLyoqXG4gKiBUaGUgY2xhc3MgcmVwcmVzZW50cyB0aGUgc3RyaW5nIHRoYXQgc3VwcG9ydHMgbXVsdGktbGFuZ3VhZ2VzIGFuZCBtYXJrZG93bi5cbiAqIEl0IHVzZXMgaW4gYWxsIG9iamVjdHMgd2hlcmUgc3VwcG9ydCBmb3IgbXVsdGktbGFuZ3VhZ2VzIGFuZCBtYXJrZG93biBpcyByZXF1aXJlZC5cbiAqL1xudmFyIExvY2FsaXphYmxlU3RyaW5nID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIExvY2FsaXphYmxlU3RyaW5nKG93bmVyLCB1c2VNYXJrZG93biwgbmFtZSkge1xuICAgICAgICBpZiAodXNlTWFya2Rvd24gPT09IHZvaWQgMCkgeyB1c2VNYXJrZG93biA9IGZhbHNlOyB9XG4gICAgICAgIHRoaXMub3duZXIgPSBvd25lcjtcbiAgICAgICAgdGhpcy51c2VNYXJrZG93biA9IHVzZU1hcmtkb3duO1xuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICB0aGlzLnZhbHVlcyA9IHt9O1xuICAgICAgICB0aGlzLmh0bWxWYWx1ZXMgPSB7fTtcbiAgICAgICAgdGhpcy5vblN0cmluZ0NoYW5nZWQgPSBuZXcgX2Jhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcIkV2ZW50QmFzZVwiXSgpO1xuICAgICAgICB0aGlzLm9uQ3JlYXRpbmcoKTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KExvY2FsaXphYmxlU3RyaW5nLCBcImRlZmF1bHRMb2NhbGVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBfc2V0dGluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcInNldHRpbmdzXCJdLmxvY2FsaXphdGlvbi5kZWZhdWx0TG9jYWxlTmFtZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICBfc2V0dGluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcInNldHRpbmdzXCJdLmxvY2FsaXphdGlvbi5kZWZhdWx0TG9jYWxlTmFtZSA9IHZhbDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShMb2NhbGl6YWJsZVN0cmluZy5wcm90b3R5cGUsIFwibG9jYWxpemF0aW9uTmFtZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xvY2FsaXphdGlvbk5hbWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2xvY2FsaXphdGlvbk5hbWUgIT0gdmFsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9jYWxpemF0aW9uTmFtZSA9IHZhbDtcbiAgICAgICAgICAgICAgICB0aGlzLnN0ckNoYW5nZWQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIExvY2FsaXphYmxlU3RyaW5nLnByb3RvdHlwZS5nZXRJc011bHRpcGxlID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gZmFsc2U7IH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KExvY2FsaXphYmxlU3RyaW5nLnByb3RvdHlwZSwgXCJsb2NhbGVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm93bmVyICYmIHRoaXMub3duZXIuZ2V0TG9jYWxlKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJlcyA9IHRoaXMub3duZXIuZ2V0TG9jYWxlKCk7XG4gICAgICAgICAgICAgICAgaWYgKCEhcmVzIHx8ICF0aGlzLnNoYXJlZERhdGEpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoISF0aGlzLnNoYXJlZERhdGEpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2hhcmVkRGF0YS5sb2NhbGU7XG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIExvY2FsaXphYmxlU3RyaW5nLnByb3RvdHlwZS5zdHJDaGFuZ2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnNlYXJjaGFibGVUZXh0ID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAodGhpcy5yZW5kZXJlZFRleHQgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5jYWxjdWxhdGVkVGV4dFZhbHVlID0gdGhpcy5jYWxjVGV4dCgpO1xuICAgICAgICBpZiAodGhpcy5yZW5kZXJlZFRleHQgIT09IHRoaXMuY2FsY3VsYXRlZFRleHRWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlZFRleHQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLmNhbGN1bGF0ZWRUZXh0VmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5odG1sVmFsdWVzID0ge307XG4gICAgICAgIHRoaXMub25DaGFuZ2VkKCk7XG4gICAgICAgIHRoaXMub25TdHJpbmdDaGFuZ2VkLmZpcmUodGhpcywge30pO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KExvY2FsaXphYmxlU3RyaW5nLnByb3RvdHlwZSwgXCJ0ZXh0XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wdXJlVGV4dDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0TG9jYWxlVGV4dCh0aGlzLmxvY2FsZSwgdmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KExvY2FsaXphYmxlU3RyaW5nLnByb3RvdHlwZSwgXCJjYWxjdWxhdGVkVGV4dFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlZFRleHQgPVxuICAgICAgICAgICAgICAgIHRoaXMuY2FsY3VsYXRlZFRleHRWYWx1ZSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy5jYWxjdWxhdGVkVGV4dFZhbHVlXG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy5jYWxjVGV4dCgpO1xuICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVkVGV4dFZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyZWRUZXh0O1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgTG9jYWxpemFibGVTdHJpbmcucHJvdG90eXBlLmNhbGNUZXh0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcmVzID0gdGhpcy5wdXJlVGV4dDtcbiAgICAgICAgaWYgKHJlcyAmJlxuICAgICAgICAgICAgdGhpcy5vd25lciAmJlxuICAgICAgICAgICAgdGhpcy5vd25lci5nZXRQcm9jZXNzZWRUZXh0ICYmXG4gICAgICAgICAgICByZXMuaW5kZXhPZihcIntcIikgPiAtMSkge1xuICAgICAgICAgICAgcmVzID0gdGhpcy5vd25lci5nZXRQcm9jZXNzZWRUZXh0KHJlcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub25HZXRUZXh0Q2FsbGJhY2spXG4gICAgICAgICAgICByZXMgPSB0aGlzLm9uR2V0VGV4dENhbGxiYWNrKHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTG9jYWxpemFibGVTdHJpbmcucHJvdG90eXBlLCBcInB1cmVUZXh0XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgbG9jID0gdGhpcy5sb2NhbGU7XG4gICAgICAgICAgICBpZiAoIWxvYylcbiAgICAgICAgICAgICAgICBsb2MgPSB0aGlzLmRlZmF1bHRMb2M7XG4gICAgICAgICAgICB2YXIgcmVzID0gdGhpcy5nZXRWYWx1ZShsb2MpO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNWYWx1ZUVtcHR5KHJlcykgJiYgbG9jID09PSB0aGlzLmRlZmF1bHRMb2MpIHtcbiAgICAgICAgICAgICAgICByZXMgPSB0aGlzLmdldFZhbHVlKF9zdXJ2ZXlTdHJpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJzdXJ2ZXlMb2NhbGl6YXRpb25cIl0uZGVmYXVsdExvY2FsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5pc1ZhbHVlRW1wdHkocmVzKSkge1xuICAgICAgICAgICAgICAgIHZhciBkaWFsZWN0ID0gdGhpcy5nZXRSb290RGlhbGVjdChsb2MpO1xuICAgICAgICAgICAgICAgIGlmICghIWRpYWxlY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzID0gdGhpcy5nZXRWYWx1ZShkaWFsZWN0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5pc1ZhbHVlRW1wdHkocmVzKSAmJiBsb2MgIT09IHRoaXMuZGVmYXVsdExvYykge1xuICAgICAgICAgICAgICAgIHJlcyA9IHRoaXMuZ2V0VmFsdWUodGhpcy5kZWZhdWx0TG9jKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmlzVmFsdWVFbXB0eShyZXMpICYmICEhdGhpcy5nZXRMb2NhbGl6YXRpb25OYW1lKCkpIHtcbiAgICAgICAgICAgICAgICByZXMgPSB0aGlzLmdldExvY2FsaXphdGlvblN0cigpO1xuICAgICAgICAgICAgICAgIGlmICghIXRoaXMub25HZXRMb2NhbGl6YXRpb25UZXh0Q2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzID0gdGhpcy5vbkdldExvY2FsaXphdGlvblRleHRDYWxsYmFjayhyZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghcmVzKVxuICAgICAgICAgICAgICAgIHJlcyA9IFwiXCI7XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgTG9jYWxpemFibGVTdHJpbmcucHJvdG90eXBlLmdldFJvb3REaWFsZWN0ID0gZnVuY3Rpb24gKGxvYykge1xuICAgICAgICBpZiAoIWxvYylcbiAgICAgICAgICAgIHJldHVybiBsb2M7XG4gICAgICAgIHZhciBpbmRleCA9IGxvYy5pbmRleE9mKFwiLVwiKTtcbiAgICAgICAgcmV0dXJuIGluZGV4ID4gLTEgPyBsb2Muc3Vic3RyaW5nKDAsIGluZGV4KSA6IFwiXCI7XG4gICAgfTtcbiAgICBMb2NhbGl6YWJsZVN0cmluZy5wcm90b3R5cGUuZ2V0TG9jYWxpemF0aW9uTmFtZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5zaGFyZWREYXRhID8gdGhpcy5zaGFyZWREYXRhLmxvY2FsaXphdGlvbk5hbWUgOiB0aGlzLmxvY2FsaXphdGlvbk5hbWU7XG4gICAgfTtcbiAgICBMb2NhbGl6YWJsZVN0cmluZy5wcm90b3R5cGUuZ2V0TG9jYWxpemF0aW9uU3RyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgbmFtZSA9IHRoaXMuZ2V0TG9jYWxpemF0aW9uTmFtZSgpO1xuICAgICAgICByZXR1cm4gISFuYW1lID8gX3N1cnZleVN0cmluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcInN1cnZleUxvY2FsaXphdGlvblwiXS5nZXRTdHJpbmcobmFtZSwgdGhpcy5sb2NhbGUpIDogXCJcIjtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShMb2NhbGl6YWJsZVN0cmluZy5wcm90b3R5cGUsIFwiaGFzSHRtbFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGFzSHRtbFZhbHVlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTG9jYWxpemFibGVTdHJpbmcucHJvdG90eXBlLCBcImh0bWxcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5oYXNIdG1sKVxuICAgICAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0SHRtbFZhbHVlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTG9jYWxpemFibGVTdHJpbmcucHJvdG90eXBlLCBcImlzRW1wdHlcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFZhbHVlc0tleXMoKS5sZW5ndGggPT0gMDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShMb2NhbGl6YWJsZVN0cmluZy5wcm90b3R5cGUsIFwidGV4dE9ySHRtbFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGFzSHRtbCA/IHRoaXMuZ2V0SHRtbFZhbHVlKCkgOiB0aGlzLmNhbGN1bGF0ZWRUZXh0O1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KExvY2FsaXphYmxlU3RyaW5nLnByb3RvdHlwZSwgXCJyZW5kZXJlZEh0bWxcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRleHRPckh0bWw7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBMb2NhbGl6YWJsZVN0cmluZy5wcm90b3R5cGUuZ2V0TG9jYWxlVGV4dCA9IGZ1bmN0aW9uIChsb2MpIHtcbiAgICAgICAgdmFyIHJlcyA9IHRoaXMuZ2V0TG9jYWxlVGV4dENvcmUobG9jKTtcbiAgICAgICAgcmV0dXJuIHJlcyA/IHJlcyA6IFwiXCI7XG4gICAgfTtcbiAgICBMb2NhbGl6YWJsZVN0cmluZy5wcm90b3R5cGUuZ2V0TG9jYWxlVGV4dENvcmUgPSBmdW5jdGlvbiAobG9jKSB7XG4gICAgICAgIGlmICghbG9jKVxuICAgICAgICAgICAgbG9jID0gdGhpcy5kZWZhdWx0TG9jO1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRWYWx1ZShsb2MpO1xuICAgIH07XG4gICAgTG9jYWxpemFibGVTdHJpbmcucHJvdG90eXBlLmlzTG9jYWxlVGV4dEVxdWFsc1dpdGhEZWZhdWx0ID0gZnVuY3Rpb24gKGxvYywgdmFsKSB7XG4gICAgICAgIHZhciByZXMgPSB0aGlzLmdldExvY2FsZVRleHRDb3JlKGxvYyk7XG4gICAgICAgIGlmICghcmVzICYmIHRoaXMub25HZXREZWZhdWx0VGV4dENhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXMgPSB0aGlzLm9uR2V0RGVmYXVsdFRleHRDYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXMgPT09IHZhbClcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbHVlRW1wdHkocmVzKSAmJiB0aGlzLmlzVmFsdWVFbXB0eSh2YWwpO1xuICAgIH07XG4gICAgTG9jYWxpemFibGVTdHJpbmcucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnNldEpzb24odW5kZWZpbmVkKTtcbiAgICB9O1xuICAgIExvY2FsaXphYmxlU3RyaW5nLnByb3RvdHlwZS5jbGVhckxvY2FsZSA9IGZ1bmN0aW9uIChsb2MpIHtcbiAgICAgICAgdGhpcy5zZXRMb2NhbGVUZXh0KGxvYywgdW5kZWZpbmVkKTtcbiAgICB9O1xuICAgIExvY2FsaXphYmxlU3RyaW5nLnByb3RvdHlwZS5zZXRMb2NhbGVUZXh0ID0gZnVuY3Rpb24gKGxvYywgdmFsdWUpIHtcbiAgICAgICAgbG9jID0gdGhpcy5nZXRWYWx1ZUxvYyhsb2MpO1xuICAgICAgICBpZiAoIXRoaXMuc3RvcmVEZWZhdWx0VGV4dCAmJiB0aGlzLmlzTG9jYWxlVGV4dEVxdWFsc1dpdGhEZWZhdWx0KGxvYywgdmFsdWUpKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNWYWx1ZUVtcHR5KHZhbHVlKSB8fCAhIWxvYyAmJiBsb2MgIT09IHRoaXMuZGVmYXVsdExvYylcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB2YXIgZGwgPSBfc3VydmV5U3RyaW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wic3VydmV5TG9jYWxpemF0aW9uXCJdLmRlZmF1bHRMb2NhbGU7XG4gICAgICAgICAgICB2YXIgb2xkVmFsdWVfMSA9IHRoaXMuZ2V0VmFsdWUoZGwpO1xuICAgICAgICAgICAgaWYgKCEhZGwgJiYgIXRoaXMuaXNWYWx1ZUVtcHR5KG9sZFZhbHVlXzEpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZShkbCwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuZmlyZVN0ckNoYW5nZWQoZGwsIG9sZFZhbHVlXzEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghX3NldHRpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJzZXR0aW5nc1wiXS5sb2NhbGl6YXRpb24uc3RvcmVEdXBsaWNhdGVkVHJhbnNsYXRpb25zICYmXG4gICAgICAgICAgICAhdGhpcy5pc1ZhbHVlRW1wdHkodmFsdWUpICYmIGxvYyAmJiBsb2MgIT0gdGhpcy5kZWZhdWx0TG9jICYmXG4gICAgICAgICAgICAhdGhpcy5nZXRWYWx1ZShsb2MpICYmXG4gICAgICAgICAgICB2YWx1ZSA9PSB0aGlzLmdldExvY2FsZVRleHQodGhpcy5kZWZhdWx0TG9jKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIGN1ckxvYyA9IHRoaXMuY3VyTG9jYWxlO1xuICAgICAgICBpZiAoIWxvYylcbiAgICAgICAgICAgIGxvYyA9IHRoaXMuZGVmYXVsdExvYztcbiAgICAgICAgdmFyIG9sZFZhbHVlID0gdGhpcy5vblN0ckNoYW5nZWQgJiYgbG9jID09PSBjdXJMb2MgPyB0aGlzLnB1cmVUZXh0IDogdW5kZWZpbmVkO1xuICAgICAgICBkZWxldGUgdGhpcy5odG1sVmFsdWVzW2xvY107XG4gICAgICAgIGlmICh0aGlzLmlzVmFsdWVFbXB0eSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuZGVsZXRlVmFsdWUobG9jKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jYW5SZW1vdmVMb2NWYWx1ZShsb2MsIHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldExvY2FsZVRleHQobG9jLCBudWxsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUobG9jLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsb2MgPT0gdGhpcy5kZWZhdWx0TG9jKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlbGV0ZVZhbHVlc0VxdWFsc1RvRGVmYXVsdCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5maXJlU3RyQ2hhbmdlZChsb2MsIG9sZFZhbHVlKTtcbiAgICB9O1xuICAgIExvY2FsaXphYmxlU3RyaW5nLnByb3RvdHlwZS5pc1ZhbHVlRW1wdHkgPSBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgIGlmICh2YWwgPT09IHVuZGVmaW5lZCB8fCB2YWwgPT09IG51bGwpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKHRoaXMubG9jYWxpemF0aW9uTmFtZSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHZhbCA9PT0gXCJcIjtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShMb2NhbGl6YWJsZVN0cmluZy5wcm90b3R5cGUsIFwiY3VyTG9jYWxlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gISF0aGlzLmxvY2FsZSA/IHRoaXMubG9jYWxlIDogdGhpcy5kZWZhdWx0TG9jO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgTG9jYWxpemFibGVTdHJpbmcucHJvdG90eXBlLmNhblJlbW92ZUxvY1ZhbHVlID0gZnVuY3Rpb24gKGxvYywgdmFsKSB7XG4gICAgICAgIGlmIChfc2V0dGluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcInNldHRpbmdzXCJdLmxvY2FsaXphdGlvbi5zdG9yZUR1cGxpY2F0ZWRUcmFuc2xhdGlvbnMpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmIChsb2MgPT09IHRoaXMuZGVmYXVsdExvYylcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgdmFyIGRpYWxlY3QgPSB0aGlzLmdldFJvb3REaWFsZWN0KGxvYyk7XG4gICAgICAgIGlmICghIWRpYWxlY3QpIHtcbiAgICAgICAgICAgIHZhciBkaWFsZWN0VmFsID0gdGhpcy5nZXRMb2NhbGVUZXh0KGRpYWxlY3QpO1xuICAgICAgICAgICAgaWYgKCEhZGlhbGVjdFZhbClcbiAgICAgICAgICAgICAgICByZXR1cm4gZGlhbGVjdFZhbCA9PSB2YWw7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYW5SZW1vdmVMb2NWYWx1ZShkaWFsZWN0LCB2YWwpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHZhbCA9PSB0aGlzLmdldExvY2FsZVRleHQodGhpcy5kZWZhdWx0TG9jKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgTG9jYWxpemFibGVTdHJpbmcucHJvdG90eXBlLmZpcmVTdHJDaGFuZ2VkID0gZnVuY3Rpb24gKGxvYywgb2xkVmFsdWUpIHtcbiAgICAgICAgdGhpcy5zdHJDaGFuZ2VkKCk7XG4gICAgICAgIGlmICghdGhpcy5vblN0ckNoYW5nZWQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciB2YWx1ZSA9IHRoaXMucHVyZVRleHQ7XG4gICAgICAgIGlmIChsb2MgIT09IHRoaXMuY3VyTG9jYWxlIHx8IG9sZFZhbHVlICE9PSB2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5vblN0ckNoYW5nZWQob2xkVmFsdWUsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgTG9jYWxpemFibGVTdHJpbmcucHJvdG90eXBlLmhhc05vbkRlZmF1bHRUZXh0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIga2V5cyA9IHRoaXMuZ2V0VmFsdWVzS2V5cygpO1xuICAgICAgICBpZiAoa2V5cy5sZW5ndGggPT0gMClcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGtleXMubGVuZ3RoID4gMSB8fCBrZXlzWzBdICE9IHRoaXMuZGVmYXVsdExvYztcbiAgICB9O1xuICAgIExvY2FsaXphYmxlU3RyaW5nLnByb3RvdHlwZS5nZXRMb2NhbGVzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIga2V5cyA9IHRoaXMuZ2V0VmFsdWVzS2V5cygpO1xuICAgICAgICBpZiAoa2V5cy5sZW5ndGggPT0gMClcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgcmV0dXJuIGtleXM7XG4gICAgfTtcbiAgICBMb2NhbGl6YWJsZVN0cmluZy5wcm90b3R5cGUuZ2V0SnNvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCEhdGhpcy5zaGFyZWREYXRhKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2hhcmVkRGF0YS5nZXRKc29uKCk7XG4gICAgICAgIHZhciBrZXlzID0gdGhpcy5nZXRWYWx1ZXNLZXlzKCk7XG4gICAgICAgIGlmIChrZXlzLmxlbmd0aCA9PSAwKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGlmIChrZXlzLmxlbmd0aCA9PSAxICYmXG4gICAgICAgICAgICBrZXlzWzBdID09IF9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wic2V0dGluZ3NcIl0ubG9jYWxpemF0aW9uLmRlZmF1bHRMb2NhbGVOYW1lICYmXG4gICAgICAgICAgICAhX3NldHRpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJzZXR0aW5nc1wiXS5zZXJpYWxpemF0aW9uLmxvY2FsaXphYmxlU3RyaW5nU2VyaWFsaXplQXNPYmplY3QpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXNba2V5c1swXV07XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlcztcbiAgICB9O1xuICAgIExvY2FsaXphYmxlU3RyaW5nLnByb3RvdHlwZS5zZXRKc29uID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIGlmICghIXRoaXMuc2hhcmVkRGF0YSkge1xuICAgICAgICAgICAgdGhpcy5zaGFyZWREYXRhLnNldEpzb24odmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmFsdWVzID0ge307XG4gICAgICAgIHRoaXMuaHRtbFZhbHVlcyA9IHt9O1xuICAgICAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgdGhpcy5zZXRMb2NhbGVUZXh0KG51bGwsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0TG9jYWxlVGV4dChrZXksIHZhbHVlW2tleV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RyQ2hhbmdlZCgpO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KExvY2FsaXphYmxlU3RyaW5nLnByb3RvdHlwZSwgXCJyZW5kZXJBc1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLm93bmVyIHx8IHR5cGVvZiB0aGlzLm93bmVyLmdldFJlbmRlcmVyICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gTG9jYWxpemFibGVTdHJpbmcuZGVmYXVsdFJlbmRlcmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMub3duZXIuZ2V0UmVuZGVyZXIodGhpcy5uYW1lKSB8fCBMb2NhbGl6YWJsZVN0cmluZy5kZWZhdWx0UmVuZGVyZXI7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTG9jYWxpemFibGVTdHJpbmcucHJvdG90eXBlLCBcInJlbmRlckFzRGF0YVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLm93bmVyIHx8IHR5cGVvZiB0aGlzLm93bmVyLmdldFJlbmRlcmVyQ29udGV4dCAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5vd25lci5nZXRSZW5kZXJlckNvbnRleHQodGhpcykgfHwgdGhpcztcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIExvY2FsaXphYmxlU3RyaW5nLnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIGlmICghIXRoaXMuc2hhcmVkRGF0YSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNoYXJlZERhdGEuZXF1YWxzKG9iaik7XG4gICAgICAgIGlmICghb2JqIHx8ICFvYmoudmFsdWVzKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gX2hlbHBlcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkhlbHBlcnNcIl0uaXNUd29WYWx1ZUVxdWFscyh0aGlzLnZhbHVlcywgb2JqLnZhbHVlcywgZmFsc2UsIHRydWUsIGZhbHNlKTtcbiAgICB9O1xuICAgIExvY2FsaXphYmxlU3RyaW5nLnByb3RvdHlwZS5zZXRGaW5kVGV4dCA9IGZ1bmN0aW9uICh0ZXh0KSB7XG4gICAgICAgIGlmICh0aGlzLnNlYXJjaFRleHQgPT0gdGV4dClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gdGV4dDtcbiAgICAgICAgaWYgKCF0aGlzLnNlYXJjaGFibGVUZXh0KSB7XG4gICAgICAgICAgICB2YXIgdGV4dE9ySHRtbCA9IHRoaXMudGV4dE9ySHRtbDtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoYWJsZVRleHQgPSAhIXRleHRPckh0bWwgPyB0ZXh0T3JIdG1sLnRvTG93ZXJDYXNlKCkgOiBcIlwiO1xuICAgICAgICB9XG4gICAgICAgIHZhciBzdHIgPSB0aGlzLnNlYXJjaGFibGVUZXh0O1xuICAgICAgICB2YXIgaW5kZXggPSAhIXN0ciAmJiAhIXRleHQgPyBzdHIuaW5kZXhPZih0ZXh0KSA6IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKGluZGV4IDwgMClcbiAgICAgICAgICAgIGluZGV4ID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAoaW5kZXggIT0gdW5kZWZpbmVkIHx8IHRoaXMuc2VhcmNoSW5kZXggIT0gaW5kZXgpIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoSW5kZXggPSBpbmRleDtcbiAgICAgICAgICAgIGlmICghIXRoaXMub25TZWFyY2hDaGFuZ2VkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vblNlYXJjaENoYW5nZWQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5zZWFyY2hJbmRleCAhPSB1bmRlZmluZWQ7XG4gICAgfTtcbiAgICBMb2NhbGl6YWJsZVN0cmluZy5wcm90b3R5cGUub25DaGFuZ2VkID0gZnVuY3Rpb24gKCkgeyB9O1xuICAgIExvY2FsaXphYmxlU3RyaW5nLnByb3RvdHlwZS5vbkNyZWF0aW5nID0gZnVuY3Rpb24gKCkgeyB9O1xuICAgIExvY2FsaXphYmxlU3RyaW5nLnByb3RvdHlwZS5oYXNIdG1sVmFsdWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5vd25lciB8fCAhdGhpcy51c2VNYXJrZG93bilcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgdmFyIGxvYyA9IHRoaXMubG9jYWxlO1xuICAgICAgICBpZiAoIWxvYylcbiAgICAgICAgICAgIGxvYyA9IHRoaXMuZGVmYXVsdExvYztcbiAgICAgICAgaWYgKHRoaXMuaHRtbFZhbHVlc1tsb2NdICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm4gISF0aGlzLmh0bWxWYWx1ZXNbbG9jXTtcbiAgICAgICAgdmFyIHJlbmRlcmVkVGV4dCA9IHRoaXMuY2FsY3VsYXRlZFRleHQ7XG4gICAgICAgIGlmICghcmVuZGVyZWRUZXh0KVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoISF0aGlzLmdldExvY2FsaXphdGlvbk5hbWUoKSAmJiByZW5kZXJlZFRleHQgPT09IHRoaXMuZ2V0TG9jYWxpemF0aW9uU3RyKCkpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHZhciByZXMgPSB0aGlzLm93bmVyLmdldE1hcmtkb3duSHRtbChyZW5kZXJlZFRleHQsIHRoaXMubmFtZSk7XG4gICAgICAgIHRoaXMuaHRtbFZhbHVlc1tsb2NdID0gcmVzO1xuICAgICAgICByZXR1cm4gISFyZXM7XG4gICAgfTtcbiAgICBMb2NhbGl6YWJsZVN0cmluZy5wcm90b3R5cGUuZ2V0SHRtbFZhbHVlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgbG9jID0gdGhpcy5sb2NhbGU7XG4gICAgICAgIGlmICghbG9jKVxuICAgICAgICAgICAgbG9jID0gdGhpcy5kZWZhdWx0TG9jO1xuICAgICAgICByZXR1cm4gdGhpcy5odG1sVmFsdWVzW2xvY107XG4gICAgfTtcbiAgICBMb2NhbGl6YWJsZVN0cmluZy5wcm90b3R5cGUuZGVsZXRlVmFsdWVzRXF1YWxzVG9EZWZhdWx0ID0gZnVuY3Rpb24gKGRlZmF1bHRWYWx1ZSkge1xuICAgICAgICBpZiAoX3NldHRpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJzZXR0aW5nc1wiXS5sb2NhbGl6YXRpb24uc3RvcmVEdXBsaWNhdGVkVHJhbnNsYXRpb25zKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIga2V5cyA9IHRoaXMuZ2V0VmFsdWVzS2V5cygpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChrZXlzW2ldID09IHRoaXMuZGVmYXVsdExvYylcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIGlmICh0aGlzLmdldFZhbHVlKGtleXNbaV0pID09IGRlZmF1bHRWYWx1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVsZXRlVmFsdWUoa2V5c1tpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIExvY2FsaXphYmxlU3RyaW5nLnByb3RvdHlwZS5nZXRWYWx1ZSA9IGZ1bmN0aW9uIChsb2MpIHtcbiAgICAgICAgaWYgKCEhdGhpcy5zaGFyZWREYXRhKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2hhcmVkRGF0YS5nZXRWYWx1ZShsb2MpO1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXNbdGhpcy5nZXRWYWx1ZUxvYyhsb2MpXTtcbiAgICB9O1xuICAgIExvY2FsaXphYmxlU3RyaW5nLnByb3RvdHlwZS5zZXRWYWx1ZSA9IGZ1bmN0aW9uIChsb2MsIHZhbHVlKSB7XG4gICAgICAgIGlmICghIXRoaXMuc2hhcmVkRGF0YSlcbiAgICAgICAgICAgIHRoaXMuc2hhcmVkRGF0YS5zZXRWYWx1ZShsb2MsIHZhbHVlKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbdGhpcy5nZXRWYWx1ZUxvYyhsb2MpXSA9IHZhbHVlO1xuICAgIH07XG4gICAgTG9jYWxpemFibGVTdHJpbmcucHJvdG90eXBlLmRlbGV0ZVZhbHVlID0gZnVuY3Rpb24gKGxvYykge1xuICAgICAgICBpZiAoISF0aGlzLnNoYXJlZERhdGEpXG4gICAgICAgICAgICB0aGlzLnNoYXJlZERhdGEuZGVsZXRlVmFsdWUobG9jKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgZGVsZXRlIHRoaXMudmFsdWVzW3RoaXMuZ2V0VmFsdWVMb2MobG9jKV07XG4gICAgfTtcbiAgICBMb2NhbGl6YWJsZVN0cmluZy5wcm90b3R5cGUuZ2V0VmFsdWVMb2MgPSBmdW5jdGlvbiAobG9jKSB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVMb2NhbGl6YXRpb24pXG4gICAgICAgICAgICByZXR1cm4gX3NldHRpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJzZXR0aW5nc1wiXS5sb2NhbGl6YXRpb24uZGVmYXVsdExvY2FsZU5hbWU7XG4gICAgICAgIHJldHVybiBsb2M7XG4gICAgfTtcbiAgICBMb2NhbGl6YWJsZVN0cmluZy5wcm90b3R5cGUuZ2V0VmFsdWVzS2V5cyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCEhdGhpcy5zaGFyZWREYXRhKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2hhcmVkRGF0YS5nZXRWYWx1ZXNLZXlzKCk7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLnZhbHVlcyk7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTG9jYWxpemFibGVTdHJpbmcucHJvdG90eXBlLCBcImRlZmF1bHRMb2NcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBfc2V0dGluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcInNldHRpbmdzXCJdLmxvY2FsaXphdGlvbi5kZWZhdWx0TG9jYWxlTmFtZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIExvY2FsaXphYmxlU3RyaW5nLlNlcmlhbGl6ZUFzT2JqZWN0ID0gZmFsc2U7XG4gICAgTG9jYWxpemFibGVTdHJpbmcuZGVmYXVsdFJlbmRlcmVyID0gXCJzdi1zdHJpbmctdmlld2VyXCI7XG4gICAgTG9jYWxpemFibGVTdHJpbmcuZWRpdGFibGVSZW5kZXJlciA9IFwic3Ytc3RyaW5nLWVkaXRvclwiO1xuICAgIHJldHVybiBMb2NhbGl6YWJsZVN0cmluZztcbn0oKSk7XG5cbi8qKlxuICogVGhlIGNsYXNzIHJlcHJlc2VudHMgdGhlIGxpc3Qgb2Ygc3RyaW5ncyB0aGF0IHN1cHBvcnRzIG11bHRpLWxhbmd1YWdlcy5cbiAqL1xudmFyIExvY2FsaXphYmxlU3RyaW5ncyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBMb2NhbGl6YWJsZVN0cmluZ3Mob3duZXIpIHtcbiAgICAgICAgdGhpcy5vd25lciA9IG93bmVyO1xuICAgICAgICB0aGlzLnZhbHVlcyA9IHt9O1xuICAgIH1cbiAgICBMb2NhbGl6YWJsZVN0cmluZ3MucHJvdG90eXBlLmdldElzTXVsdGlwbGUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0cnVlOyB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShMb2NhbGl6YWJsZVN0cmluZ3MucHJvdG90eXBlLCBcImxvY2FsZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMub3duZXIgJiYgdGhpcy5vd25lci5nZXRMb2NhbGUgPyB0aGlzLm93bmVyLmdldExvY2FsZSgpIDogXCJcIjtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShMb2NhbGl6YWJsZVN0cmluZ3MucHJvdG90eXBlLCBcInZhbHVlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRWYWx1ZShcIlwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlKFwiXCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTG9jYWxpemFibGVTdHJpbmdzLnByb3RvdHlwZSwgXCJ0ZXh0XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSA/IHRoaXMudmFsdWUuam9pbihcIlxcblwiKSA6IFwiXCI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9ICEhdmFsID8gdmFsLnNwbGl0KFwiXFxuXCIpIDogW107XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBMb2NhbGl6YWJsZVN0cmluZ3MucHJvdG90eXBlLmdldExvY2FsZVRleHQgPSBmdW5jdGlvbiAobG9jKSB7XG4gICAgICAgIHZhciByZXMgPSB0aGlzLmdldFZhbHVlQ29yZShsb2MsICFsb2MgfHwgbG9jID09PSB0aGlzLmxvY2FsZSk7XG4gICAgICAgIGlmICghcmVzIHx8ICFBcnJheS5pc0FycmF5KHJlcykgfHwgcmVzLmxlbmd0aCA9PSAwKVxuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIHJldHVybiByZXMuam9pbihcIlxcblwiKTtcbiAgICB9O1xuICAgIExvY2FsaXphYmxlU3RyaW5ncy5wcm90b3R5cGUuc2V0TG9jYWxlVGV4dCA9IGZ1bmN0aW9uIChsb2MsIG5ld1ZhbHVlKSB7XG4gICAgICAgIHZhciB2YWwgPSAhIW5ld1ZhbHVlID8gbmV3VmFsdWUuc3BsaXQoXCJcXG5cIikgOiBudWxsO1xuICAgICAgICB0aGlzLnNldFZhbHVlKGxvYywgdmFsKTtcbiAgICB9O1xuICAgIExvY2FsaXphYmxlU3RyaW5ncy5wcm90b3R5cGUuZ2V0VmFsdWUgPSBmdW5jdGlvbiAobG9jKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFZhbHVlQ29yZShsb2MpO1xuICAgIH07XG4gICAgTG9jYWxpemFibGVTdHJpbmdzLnByb3RvdHlwZS5nZXRWYWx1ZUNvcmUgPSBmdW5jdGlvbiAobG9jLCB1c2VEZWZhdWx0KSB7XG4gICAgICAgIGlmICh1c2VEZWZhdWx0ID09PSB2b2lkIDApIHsgdXNlRGVmYXVsdCA9IHRydWU7IH1cbiAgICAgICAgbG9jID0gdGhpcy5nZXRMb2NhbGUobG9jKTtcbiAgICAgICAgaWYgKHRoaXMudmFsdWVzW2xvY10pXG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXNbbG9jXTtcbiAgICAgICAgaWYgKHVzZURlZmF1bHQpIHtcbiAgICAgICAgICAgIHZhciBkZWZMb2MgPSBfc2V0dGluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcInNldHRpbmdzXCJdLmxvY2FsaXphdGlvbi5kZWZhdWx0TG9jYWxlTmFtZTtcbiAgICAgICAgICAgIGlmIChsb2MgIT09IGRlZkxvYyAmJiB0aGlzLnZhbHVlc1tkZWZMb2NdKVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlc1tkZWZMb2NdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9O1xuICAgIExvY2FsaXphYmxlU3RyaW5ncy5wcm90b3R5cGUuc2V0VmFsdWUgPSBmdW5jdGlvbiAobG9jLCB2YWwpIHtcbiAgICAgICAgbG9jID0gdGhpcy5nZXRMb2NhbGUobG9jKTtcbiAgICAgICAgdmFyIG9sZFZhbHVlID0gX2hlbHBlcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkhlbHBlcnNcIl0uY3JlYXRlQ29weSh0aGlzLnZhbHVlcyk7XG4gICAgICAgIGlmICghdmFsIHx8IHZhbC5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMudmFsdWVzW2xvY107XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlc1tsb2NdID0gdmFsO1xuICAgICAgICB9XG4gICAgICAgIGlmICghIXRoaXMub25WYWx1ZUNoYW5nZWQpIHtcbiAgICAgICAgICAgIHRoaXMub25WYWx1ZUNoYW5nZWQob2xkVmFsdWUsIHRoaXMudmFsdWVzKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgTG9jYWxpemFibGVTdHJpbmdzLnByb3RvdHlwZS5oYXNWYWx1ZSA9IGZ1bmN0aW9uIChsb2MpIHtcbiAgICAgICAgaWYgKGxvYyA9PT0gdm9pZCAwKSB7IGxvYyA9IFwiXCI7IH1cbiAgICAgICAgcmV0dXJuICF0aGlzLmlzRW1wdHkgJiYgdGhpcy5nZXRWYWx1ZShsb2MpLmxlbmd0aCA+IDA7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTG9jYWxpemFibGVTdHJpbmdzLnByb3RvdHlwZSwgXCJpc0VtcHR5XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRWYWx1ZXNLZXlzKCkubGVuZ3RoID09IDA7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBMb2NhbGl6YWJsZVN0cmluZ3MucHJvdG90eXBlLmdldExvY2FsZSA9IGZ1bmN0aW9uIChsb2MpIHtcbiAgICAgICAgaWYgKCEhbG9jKVxuICAgICAgICAgICAgcmV0dXJuIGxvYztcbiAgICAgICAgbG9jID0gdGhpcy5sb2NhbGU7XG4gICAgICAgIHJldHVybiAhIWxvYyA/IGxvYyA6IF9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wic2V0dGluZ3NcIl0ubG9jYWxpemF0aW9uLmRlZmF1bHRMb2NhbGVOYW1lO1xuICAgIH07XG4gICAgTG9jYWxpemFibGVTdHJpbmdzLnByb3RvdHlwZS5nZXRMb2NhbGVzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIga2V5cyA9IHRoaXMuZ2V0VmFsdWVzS2V5cygpO1xuICAgICAgICBpZiAoa2V5cy5sZW5ndGggPT0gMClcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgcmV0dXJuIGtleXM7XG4gICAgfTtcbiAgICBMb2NhbGl6YWJsZVN0cmluZ3MucHJvdG90eXBlLmdldEpzb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBrZXlzID0gdGhpcy5nZXRWYWx1ZXNLZXlzKCk7XG4gICAgICAgIGlmIChrZXlzLmxlbmd0aCA9PSAwKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGlmIChrZXlzLmxlbmd0aCA9PSAxICYmXG4gICAgICAgICAgICBrZXlzWzBdID09IF9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wic2V0dGluZ3NcIl0ubG9jYWxpemF0aW9uLmRlZmF1bHRMb2NhbGVOYW1lICYmXG4gICAgICAgICAgICAhX3NldHRpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJzZXR0aW5nc1wiXS5zZXJpYWxpemF0aW9uLmxvY2FsaXphYmxlU3RyaW5nU2VyaWFsaXplQXNPYmplY3QpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXNba2V5c1swXV07XG4gICAgICAgIHJldHVybiBfaGVscGVyc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiSGVscGVyc1wiXS5jcmVhdGVDb3B5KHRoaXMudmFsdWVzKTtcbiAgICB9O1xuICAgIExvY2FsaXphYmxlU3RyaW5ncy5wcm90b3R5cGUuc2V0SnNvbiA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB0aGlzLnZhbHVlcyA9IHt9O1xuICAgICAgICBpZiAoIXZhbHVlKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUobnVsbCwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZShrZXksIHZhbHVlW2tleV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBMb2NhbGl6YWJsZVN0cmluZ3MucHJvdG90eXBlLmdldFZhbHVlc0tleXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLnZhbHVlcyk7XG4gICAgfTtcbiAgICByZXR1cm4gTG9jYWxpemFibGVTdHJpbmdzO1xufSgpKTtcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL2xvY2FsaXphdGlvbi9hcmFiaWMudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9sb2NhbGl6YXRpb24vYXJhYmljLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogYXJhYmljU3VydmV5U3RyaW5ncyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJhcmFiaWNTdXJ2ZXlTdHJpbmdzXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJhYmljU3VydmV5U3RyaW5nczsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHN1cnZleS1jb3JlICovIFwiLi9zcmMvZW50cmllcy9jb3JlLnRzXCIpO1xuXG52YXIgYXJhYmljU3VydmV5U3RyaW5ncyA9IHtcbiAgICBwYWdlUHJldlRleHQ6IFwi2KfZhNiz2KfYqNmCXCIsXG4gICAgcGFnZU5leHRUZXh0OiBcItin2YTYqtin2YTZilwiLFxuICAgIGNvbXBsZXRlVGV4dDogXCLYpdix2LPYp9mEINin2YTYqNmK2KfZhtin2KpcIixcbiAgICBwcmV2aWV3VGV4dDogXCLZhdi52KfZitmG2KlcIixcbiAgICBlZGl0VGV4dDogXCLYqti52K/ZitmEXCIsXG4gICAgc3RhcnRTdXJ2ZXlUZXh0OiBcItio2K/Yp9mK2KlcIixcbiAgICBvdGhlckl0ZW1UZXh0OiBcItmG2LUg2KLYrtixXCIsXG4gICAgbm9uZUl0ZW1UZXh0OiBcItmE2Kcg2LTZitihXCIsXG4gICAgc2VsZWN0QWxsSXRlbVRleHQ6IFwi2KfYrtiq2LEg2KfZhNmD2YRcIixcbiAgICBwcm9ncmVzc1RleHQ6IFwiezF9INi12YHYrdipIHswfSDZhdmGXCIsXG4gICAgaW5kZXhUZXh0OiBcInswfSDZhdmGIHsxfVwiLFxuICAgIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCLYs9is2YQgezB9INmF2YYgezF9XCIsXG4gICAgcGFuZWxEeW5hbWljVGFiVGV4dEZvcm1hdDogXCLZhNmI2K3YqSB72KjYp9mG2YQg2KXZhtiv2YPYs31cIixcbiAgICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwi2KrZhdiqINin2YTYpdis2KfYqNipINi52YTZiSDYo9iz2KbZhNipIHswfSAvIHsxfVwiLFxuICAgIGVtcHR5U3VydmV5OiBcItmE2Kcg2KrZiNis2K8g2LXZgdit2Kkg2YXYsdim2YrYqSDYo9mIINiz2KTYp9mEINmB2Yog2KfZhNmG2YXZiNiw2KxcIixcbiAgICBjb21wbGV0aW5nU3VydmV5OiBcIti02YPYsdinINmE2YPZhSDZhNin2LPYqtmD2YXYp9mEINin2YTZhtmF2YjYsNisIVwiLFxuICAgIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6IFwi2KrYuNmH2LEg2LPYrNmE2KfYqtmG2Kcg2KPZhtmDINmC2K8g2KPZg9mF2YTYqiDZh9iw2Kcg2KfZhNin2LPYqti32YTYp9i5INio2KfZhNmB2LnZhC5cIixcbiAgICBsb2FkaW5nU3VydmV5OiBcIi4uLtmK2KrZhSDYqtit2YXZitmEINin2YTZhtmF2YjYsNisXCIsXG4gICAgcGxhY2Vob2xkZXI6IFwiLi4u2KfYrtiq2LFcIixcbiAgICByYXRpbmdPcHRpb25zQ2FwdGlvbjogXCLYp9iu2KrYp9ixLi4uXCIsXG4gICAgdmFsdWU6IFwi2KfZhNmC2YrZhdipXCIsXG4gICAgcmVxdWlyZWRFcnJvcjogXCIu2YrYsdis2Ykg2KfZhNil2KzYp9io2Kkg2LnZhNmJINin2YTYs9ik2KfZhFwiLFxuICAgIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcItin2YTYsdis2KfYoSDYp9mE2KXYrNin2KjYqSDYudmE2Ykg2LPYpNin2YQg2YjYp9it2K8g2LnZhNmJINin2YTYo9mC2YQuXCIsXG4gICAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCLZitix2KzZiSDYp9mE2KXYrNin2KjYqSDYudmE2Ykg2KfZhNij2LPYptmE2Kkg2YHZiiDYrNmF2YrYuSDYp9mE2LXZgdmI2YFcIixcbiAgICBudW1lcmljRXJyb3I6IFwi2YrYrNioINij2YYg2KrZg9mI2YYg2KfZhNmC2YrZhdipINix2YLZhdmK2KkuXCIsXG4gICAgbWluRXJyb3I6IFwi2YrYrNioINij2YTYpyDYqtmC2YQg2KfZhNmC2YrZhdipINi52YYgezB9XCIsXG4gICAgbWF4RXJyb3I6IFwi2YrYrNioINij2YTYpyDYqtiy2YrYryDYp9mE2YLZitmF2Kkg2LnZhiB7MH1cIixcbiAgICB0ZXh0TWluTGVuZ3RoOiBcItin2YTYsdis2KfYoSDYpdiv2K7Yp9mEINmF2Kcg2YTYpyDZitmC2YQg2LnZhiB7MH0g2K3YsdmI2YFcIixcbiAgICB0ZXh0TWF4TGVuZ3RoOiBcItin2YTYsdis2KfYoSDYpdiv2K7Yp9mEINij2YLZhCDZhdmGIHswfSDYrdix2YjZgVwiLFxuICAgIHRleHRNaW5NYXhMZW5ndGg6IFwi2YrYsdis2Ykg2KXYr9iu2KfZhCDYo9mD2KvYsSDZhdmGIHswfSDZiNij2YLZhCDZhdmGIHsxfSDYrdix2YjZgVwiLFxuICAgIG1pblJvd0NvdW50RXJyb3I6IFwi2YrYsdis2Ykg2YXZhNihINmF2Kcg2YTYpyDZitmC2YQg2LnZhiB7MH0g2KfZhNi12YHZiNmBXCIsXG4gICAgbWluU2VsZWN0RXJyb3I6IFwi2YrYsdis2Ykg2KrYrdiv2YrYryDZhdinINmE2Kcg2YrZgtmEINi52YYgezB9INin2YTZhdiq2LrZitix2KfYqlwiLFxuICAgIG1heFNlbGVjdEVycm9yOiBcItmK2LHYrNmJINiq2K3Yr9mK2K8g2YXYpyDZhNinINmK2LLZitivINi52YYgezB9INin2YTZhdiq2LrZitix2KfYqlwiLFxuICAgIG51bWVyaWNNaW5NYXg6IFwi2YgnezB9JyDZitis2Kgg2KPZhiDYqtmD2YjZhiDZhdiz2KfZiNmK2Kkg2KPZiCDYo9mD2KvYsSDZhdmGIHsxfSDZiNiq2LPYp9mI2Yog2KPZiCDYo9mC2YQg2YXZhiB7Mn3Yp1wiLFxuICAgIG51bWVyaWNNaW46IFwi2YgnezB9JyDZitis2Kgg2KPZhiDYqtmD2YjZhiDZhdiz2KfZiNmK2Kkg2KPZiCDYo9mD2KvYsSDZhdmGIHsxfdinXCIsXG4gICAgbnVtZXJpY01heDogXCLZiCd7MH0nINmK2KzYqCDYo9mGINiq2YPZiNmGINmF2LPYp9mI2YrYqSDYo9mIINij2YLZhCDZhdmGIHsxfdinXCIsXG4gICAgaW52YWxpZEVtYWlsOiBcItin2YTYsdis2KfYoSDYpdiv2K7Yp9mEINio2LHZitivINin2YTZg9iq2LHZiNmG2Yog2LXYrdmK2K1cIixcbiAgICBpbnZhbGlkRXhwcmVzc2lvbjogXCLZitis2Kgg2KPZhiDZiti52LHYtiDYp9mE2KrYudio2YrYsTogezB9ICfYtdmI2KfYqCcuXCIsXG4gICAgdXJsUmVxdWVzdEVycm9yOiBcIti32YTYqCDYpdix2KzYp9i5INiu2LfYoyAnezB9Jy4gezF92KdcIixcbiAgICB1cmxHZXRDaG9pY2VzRXJyb3I6IFwi2LnYp9ivINi32YTYqCDYp9mE2KjZitin2YbYp9iqINmB2KfYsdi6INij2YggJ9in2YTZhdiz2KfYsScg2LrZitixINi12K3ZititIFwiLFxuICAgIGV4Y2VlZE1heFNpemU6IFwi2YrZhtio2LrZiiDYo9mE2Kcg2YrYqtis2KfZiNiyINit2KzZhSDYp9mE2YXZhNmBIHswfdinXCIsXG4gICAgb3RoZXJSZXF1aXJlZEVycm9yOiBcItin2YTYsdis2KfYoSDYpdiv2K7Yp9mEINmC2YrZhdipINij2K7YsdmJXCIsXG4gICAgdXBsb2FkaW5nRmlsZTogXCLYqtit2YXZitmEINin2YTZhdmE2YEg2KfZhNiu2KfYtSDYqNmDLiDZitix2KzZiSDYp9mE2KfZhtiq2LjYp9ixINi52K/YqSDYq9mI2KfZhiDZiNin2YTZhdit2KfZiNmE2Kkg2YTYp9it2YLZi9inXCIsXG4gICAgbG9hZGluZ0ZpbGU6IFwi2KzYp9ixINin2YTYqtit2YXZitmELi4uXCIsXG4gICAgY2hvb3NlRmlsZTogXCLYp9iu2KrYsSDYp9mE2YXZhNmB2KfYqi4uLlwiLFxuICAgIG5vRmlsZUNob3NlbjogXCLZhNmFINiq2YLZhSDYqNin2K7YqtmK2KfYsSDZhdmE2YFcIixcbiAgICBmaWxlRHJhZ0FyZWFQbGFjZWhvbGRlcjogXCLYp9iz2K3YqCDZhdmE2YHYpyDZiNij2YHZhNiq2Ycg2YfZhtinINij2Ygg2KfZhtmC2LEg2YHZiNmCINin2YTYstixINij2K/Zhtin2Ycg2YjYp9iu2KrYsSDZhdmE2YHYpyDZhNiq2K3ZhdmK2YTZhy5cIixcbiAgICBjb25maXJtRGVsZXRlOiBcItmH2YQg2KrYsdmK2K8g2K3YsNmBINin2YTYs9is2YTYn1wiLFxuICAgIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwi2YrYrNioINij2YYg2KrZg9mI2YYg2YfYsNmHINin2YTZgtmK2YXYqSDZgdix2YrYr9ipLlwiLFxuICAgIGFkZENvbHVtbjogXCLYo9i22YEg2KfZhNi52YXZiNivXCIsXG4gICAgYWRkUm93OiBcItin2LbYp9mB2Kkg2LXZgVwiLFxuICAgIHJlbW92ZVJvdzogXCLYpdiy2KfZhNipINi12YFcIixcbiAgICBlbXB0eVJvd3NUZXh0OiBcItmE2Kcg2KrZiNis2K8g2LXZgdmI2YEuXCIsXG4gICAgYWRkUGFuZWw6IFwi2KfYttmBINis2K/ZitivXCIsXG4gICAgcmVtb3ZlUGFuZWw6IFwi2KXYstin2YTYqVwiLFxuICAgIGNob2ljZXNfSXRlbTogXCLYqNmG2K9cIixcbiAgICBtYXRyaXhfY29sdW1uOiBcIti52YXZiNivXCIsXG4gICAgbWF0cml4X3JvdzogXCLYtdmBXCIsXG4gICAgbXVsdGlwbGV0ZXh0X2l0ZW1uYW1lOiBcItmG2LVcIixcbiAgICBzYXZpbmdEYXRhOiBcItmK2KrZhSDYrdmB2Lgg2KfZhNmG2KrYp9im2Kwg2LnZhNmJINin2YTYrtin2K/ZhSAuLi5cIixcbiAgICBzYXZpbmdEYXRhRXJyb3I6IFwi2K3Yr9irINiu2LfYoyDZiNmE2YUg2YbYqtmF2YPZhiDZhdmGINit2YHYuCDYp9mE2YbYqtin2KbYrC5cIixcbiAgICBzYXZpbmdEYXRhU3VjY2VzczogXCLYqtmFINit2YHYuCDYp9mE2YbYqtin2KbYrCDYqNmG2KzYp9itIVwiLFxuICAgIHNhdmVBZ2FpbkJ1dHRvbjogXCLYrdin2YjZhCDZhdis2K/Yr9inXCIsXG4gICAgdGltZXJNaW46IFwi2K/ZgtmK2YLYqVwiLFxuICAgIHRpbWVyU2VjOiBcItir2KfZhtmK2KlcIixcbiAgICB0aW1lclNwZW50QWxsOiBcItmE2YLYryDYo9mG2YHZgtiqIHswfSDYudmE2Ykg2YfYsNmHINin2YTYtdmB2K3YqSDZiCB7MX0g2KXYrNmF2KfZhNin2YsuXCIsXG4gICAgdGltZXJTcGVudFBhZ2U6IFwi2YTZgtivINij2YbZgdmC2KogezB9INi52YTZiSDZh9iw2Ycg2KfZhNi12YHYrdipLlwiLFxuICAgIHRpbWVyU3BlbnRTdXJ2ZXk6IFwi2YTZgtivINij2YbZgdmC2KogezB9INil2KzZhdin2YTYp9mLLlwiLFxuICAgIHRpbWVyTGltaXRBbGw6IFwi2YTZgtivINij2YbZgdmC2KogezB9INmF2YYgezF9INmB2Yog2YfYsNmHINin2YTYtdmB2K3YqSDZiCB7Mn0g2YXZhiDYpdis2YXYp9mE2YogezN9LlwiLFxuICAgIHRpbWVyTGltaXRQYWdlOiBcItmE2YLYryDYo9mG2YHZgtiqIHswfSDZhdmGIHsxfSDZgdmKINmH2LDZhyDYp9mE2LXZgdit2KkuXCIsXG4gICAgdGltZXJMaW1pdFN1cnZleTogXCLZhNmC2K8g2KPZhtmB2YLYqiB7MH0g2YXZhiDYpdis2YXYp9mE2YogezF9LlwiLFxuICAgIGNsZWFyQ2FwdGlvbjogXCLZiNin2LbYrVwiLFxuICAgIHNpZ25hdHVyZVBsYWNlSG9sZGVyOiBcItmI2YLYuSDZh9mG2KdcIixcbiAgICBjaG9vc2VGaWxlQ2FwdGlvbjogXCLYp9iu2KrYsSDZhdmE2YFcIixcbiAgICB0YWtlUGhvdG9DYXB0aW9uOiBcItin2YTYqtmC2KfYtyDYtdmI2LHYqVwiLFxuICAgIGNhbWVyYVBsYWNlSG9sZGVyOiBcItin2YbZgtixINmB2YjZgiDYp9mE2LLYsSDYo9iv2YbYp9mHINmE2KfZhNiq2YLYp9i3INi12YjYsdipINio2KfYs9iq2K7Yr9in2YUg2KfZhNmD2KfZhdmK2LHYpy5cIixcbiAgICBmaWxlQ2FtZXJhRHJhZ0FyZWFQbGFjZUhvbGRlcjogXCLZgtmFINio2LPYrdioINmF2YTZgSDZiNil2YHZhNin2KrZhyDYo9mIINiq2K3Yr9mK2K/ZhyDZhNiq2K3ZhdmK2YTZhyDYo9mIINin2YTYqtmC2KfYtyDYtdmI2LHYqSDYqNin2LPYqtiu2K/Yp9mFINin2YTZg9in2YXZitix2KcuXCIsXG4gICAgcmVwbGFjZUZpbGVDYXB0aW9uOiBcItin2LPYqtio2K/Yp9mEINin2YTZhdmE2YFcIixcbiAgICByZW1vdmVGaWxlQ2FwdGlvbjogXCLZgtmFINio2KXYstin2YTYqSDZh9iw2Kcg2KfZhNmF2YTZgVwiLFxuICAgIGJvb2xlYW5DaGVja2VkTGFiZWw6IFwi2YbYudmFXCIsXG4gICAgYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcItmE2KdcIixcbiAgICBjb25maXJtUmVtb3ZlRmlsZTogXCLZh9mEINij2YbYqiDZhdiq2KPZg9ivINij2YbZgyDYqtix2YrYryDYpdiy2KfZhNipINmH2LDYpyDYp9mE2YXZhNmBOiB7MH3Yn1wiLFxuICAgIGNvbmZpcm1SZW1vdmVBbGxGaWxlczogXCLZh9mEINij2YbYqiDZhdiq2KPZg9ivINij2YbZgyDYqtix2YrYryDYpdiy2KfZhNipINmD2KfZgdipINin2YTZhdmE2YHYp9iq2J9cIixcbiAgICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwi2LnZhtmI2KfZhiDYp9mE2LPYpNin2YRcIixcbiAgICBtb2RhbENhbmNlbEJ1dHRvblRleHQ6IFwi2KXZhNi62KfYoSDYp9mE2KPZhdixXCIsXG4gICAgbW9kYWxBcHBseUJ1dHRvblRleHQ6IFwi2LfYqNmCXCIsXG4gICAgZmlsdGVyU3RyaW5nUGxhY2Vob2xkZXI6IFwi2KfZg9iq2Kgg2YTZhNio2K3Yqy4uLlwiLFxuICAgIGVtcHR5TWVzc2FnZTogXCLZhNinINiq2YjYrNivINio2YrYp9mG2KfYqiDZhNmE2LnYsdi2XCIsXG4gICAgbm9FbnRyaWVzVGV4dDogXCLZhNinINiq2YjYrNivINil2K/Yrtin2YTYp9iqINit2KrZiSDYp9mE2KLZhi5cXG7Yp9mG2YLYsSDZgdmI2YIg2KfZhNiy2LEg2KPYr9mG2KfZhyDZhNil2LbYp9mB2Kkg2KXYr9iu2KfZhCDYrNiv2YrYry5cIixcbiAgICBub0VudHJpZXNSZWFkb25seVRleHQ6IFwi2YTYpyDYqtmI2KzYryDYpdiv2K7Yp9mE2KfYqi5cIixcbiAgICBtb3JlOiBcItij2YPYq9ixXCIsXG4gICAgdGFnYm94RG9uZUJ1dHRvbkNhcHRpb246IFwi2YXZiNin2YHZglwiLFxuICAgIHNlbGVjdFRvUmFua0VtcHR5UmFua2VkQXJlYVRleHQ6IFwi2YrYqtmFINiq2LHYqtmK2Kgg2KzZhdmK2Lkg2KfZhNiu2YrYp9ix2KfYqlwiLFxuICAgIHNlbGVjdFRvUmFua0VtcHR5VW5yYW5rZWRBcmVhVGV4dDogXCLZgtmFINio2LPYrdioINmI2KXYs9mC2KfYtyDYp9mE2K7Zitin2LHYp9iqINmH2YbYpyDZhNiq2LHYqtmK2KjZh9inXCJcbn07XG5zdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3VydmV5TG9jYWxpemF0aW9uXCJdLmxvY2FsZXNbXCJhclwiXSA9IGFyYWJpY1N1cnZleVN0cmluZ3M7XG5zdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3VydmV5TG9jYWxpemF0aW9uXCJdLmxvY2FsZU5hbWVzW1wiYXJcIl0gPSBcItin2YTYudix2KjZitipXCI7XG4vLyBUaGUgZm9sbG93aW5nIHN0cmluZ3MgaGF2ZSBiZWVuIHRyYW5zbGF0ZWQgYnkgYSBtYWNoaW5lIHRyYW5zbGF0aW9uIHNlcnZpY2Vcbi8vIFJlbW92ZSB0aG9zZSBzdHJpbmdzIHRoYXQgeW91IGhhdmUgY29ycmVjdGVkIG1hbnVhbGx5XG4vLyBpbmRleFRleHQ6IFwiezB9IG9mIHsxfVwiID0+IFwiezB9INmF2YYgezF9XCJcbi8vIHBhbmVsRHluYW1pY1RhYlRleHRGb3JtYXQ6IFwiUGFuZWwge3BhbmVsSW5kZXh9XCIgPT4gXCLZhNmI2K3YqSB72KjYp9mG2YQg2KXZhtiv2YPYs31cIlxuLy8gcmF0aW5nT3B0aW9uc0NhcHRpb246IFwiU2VsZWN0Li4uXCIgPT4gXCLYp9iu2KrYp9ixLi4uXCJcbi8vIG1pbkVycm9yOiBcIlRoZSB2YWx1ZSBzaG91bGQgbm90IGJlIGxlc3MgdGhhbiB7MH1cIiA9PiBcItmK2KzYqCDYo9mE2Kcg2KrZgtmEINin2YTZgtmK2YXYqSDYudmGIHswfVwiXG4vLyBtYXhFcnJvcjogXCJUaGUgdmFsdWUgc2hvdWxkIG5vdCBiZSBncmVhdGVyIHRoYW4gezB9XCIgPT4gXCLZitis2Kgg2KPZhNinINiq2LLZitivINin2YTZgtmK2YXYqSDYudmGIHswfVwiXG4vLyBmaWxlRHJhZ0FyZWFQbGFjZWhvbGRlcjogXCJEcmFnIGFuZCBkcm9wIGEgZmlsZSBoZXJlIG9yIGNsaWNrIHRoZSBidXR0b24gYmVsb3cgYW5kIGNob29zZSBhIGZpbGUgdG8gdXBsb2FkLlwiID0+IFwi2KfYs9it2Kgg2YXZhNmB2Kcg2YjYo9mB2YTYqtmHINmH2YbYpyDYo9mIINin2YbZgtixINmB2YjZgiDYp9mE2LLYsSDYo9iv2YbYp9mHINmI2KfYrtiq2LEg2YXZhNmB2Kcg2YTYqtit2YXZitmE2YcuXCJcbi8vIGVtcHR5Um93c1RleHQ6IFwiVGhlcmUgYXJlIG5vIHJvd3MuXCIgPT4gXCLZhNinINiq2YjYrNivINi12YHZiNmBLlwiXG4vLyBtdWx0aXBsZXRleHRfaXRlbW5hbWU6IFwidGV4dFwiID0+IFwi2YbYtVwiXG4vLyBzaWduYXR1cmVQbGFjZUhvbGRlcjogXCJTaWduIGhlcmVcIiA9PiBcItmI2YLYuSDZh9mG2KdcIlxuLy8gbW9kYWxDYW5jZWxCdXR0b25UZXh0OiBcIkNhbmNlbFwiID0+IFwi2KXZhNi62KfYoSDYp9mE2KPZhdixXCJcbi8vIG1vZGFsQXBwbHlCdXR0b25UZXh0OiBcIkFwcGx5XCIgPT4gXCLYt9io2YJcIlxuLy8gZmlsdGVyU3RyaW5nUGxhY2Vob2xkZXI6IFwiVHlwZSB0byBzZWFyY2guLi5cIiA9PiBcItin2YPYqtioINmE2YTYqNit2KsuLi5cIlxuLy8gZW1wdHlNZXNzYWdlOiBcIk5vIGRhdGEgdG8gZGlzcGxheVwiID0+IFwi2YTYpyDYqtmI2KzYryDYqNmK2KfZhtin2Kog2YTZhNi52LHYtlwiXG4vLyBub0VudHJpZXNUZXh0OiBcIlRoZXJlIGFyZSBubyBlbnRyaWVzIHlldC5cXG5DbGljayB0aGUgYnV0dG9uIGJlbG93IHRvIGFkZCBhIG5ldyBlbnRyeS5cIiA9PiBcItmE2Kcg2KrZiNis2K8g2KXYr9iu2KfZhNin2Kog2K3YqtmJINin2YTYotmGLlxcbtin2YbZgtixINmB2YjZgiDYp9mE2LLYsSDYo9iv2YbYp9mHINmE2KXYttin2YHYqSDYpdiv2K7Yp9mEINis2K/ZitivLlwiXG4vLyBub0VudHJpZXNSZWFkb25seVRleHQ6IFwiVGhlcmUgYXJlIG5vIGVudHJpZXMuXCIgPT4gXCLZhNinINiq2YjYrNivINil2K/Yrtin2YTYp9iqLlwiXG4vLyBtb3JlOiBcIk1vcmVcIiA9PiBcItij2YPYq9ixXCJcbi8vIHRhZ2JveERvbmVCdXR0b25DYXB0aW9uOiBcIk9LXCIgPT4gXCLZhdmI2KfZgdmCXCJcbi8vIHNlbGVjdFRvUmFua0VtcHR5UmFua2VkQXJlYVRleHQ6IFwiQWxsIGNob2ljZXMgYXJlIHJhbmtlZFwiID0+IFwi2YrYqtmFINiq2LHYqtmK2Kgg2KzZhdmK2Lkg2KfZhNiu2YrYp9ix2KfYqlwiXG4vLyBzZWxlY3RUb1JhbmtFbXB0eVVucmFua2VkQXJlYVRleHQ6IFwiRHJhZyBhbmQgZHJvcCBjaG9pY2VzIGhlcmUgdG8gcmFuayB0aGVtXCIgPT4gXCLZgtmFINio2LPYrdioINmI2KXYs9mC2KfYtyDYp9mE2K7Zitin2LHYp9iqINmH2YbYpyDZhNiq2LHYqtmK2KjZh9inXCIvLyB0YWtlUGhvdG9DYXB0aW9uOiBcIlRha2UgUGhvdG9cIiA9PiBcItin2YTYqtmC2KfYtyDYtdmI2LHYqVwiXG4vLyBjYW1lcmFQbGFjZUhvbGRlcjogXCJDbGljayB0aGUgYnV0dG9uIGJlbG93IHRvIHRha2UgYSBwaG90byB1c2luZyB0aGUgY2FtZXJhLlwiID0+IFwi2KfZhtmC2LEg2YHZiNmCINin2YTYstixINij2K/Zhtin2Ycg2YTYp9mE2KrZgtin2Lcg2LXZiNix2Kkg2KjYp9iz2KrYrtiv2KfZhSDYp9mE2YPYp9mF2YrYsdinLlwiXG4vLyBmaWxlQ2FtZXJhRHJhZ0FyZWFQbGFjZUhvbGRlcjogXCJEcmFnIGFuZCBkcm9wIG9yIHNlbGVjdCBhIGZpbGUgdG8gdXBsb2FkIG9yIHRha2UgYSBwaG90byB1c2luZyB0aGUgY2FtZXJhLlwiID0+IFwi2YLZhSDYqNiz2K3YqCDZhdmE2YEg2YjYpdmB2YTYp9iq2Ycg2KPZiCDYqtit2K/Zitiv2Ycg2YTYqtit2YXZitmE2Ycg2KPZiCDYp9mE2KrZgtin2Lcg2LXZiNix2Kkg2KjYp9iz2KrYrtiv2KfZhSDYp9mE2YPYp9mF2YrYsdinLlwiXG4vLyByZXBsYWNlRmlsZUNhcHRpb246IFwiUmVwbGFjZSBmaWxlXCIgPT4gXCLYp9iz2KrYqNiv2KfZhCDYp9mE2YXZhNmBXCJcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9sb2NhbGl6YXRpb24vYmFzcXVlLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvbG9jYWxpemF0aW9uL2Jhc3F1ZS50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGJhc3F1ZVN1cnZleVN0cmluZ3MgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiYmFzcXVlU3VydmV5U3RyaW5nc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGJhc3F1ZVN1cnZleVN0cmluZ3M7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHN1cnZleV9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBzdXJ2ZXktY29yZSAqLyBcIi4vc3JjL2VudHJpZXMvY29yZS50c1wiKTtcblxudmFyIGJhc3F1ZVN1cnZleVN0cmluZ3MgPSB7XG4gICAgcGFnZVByZXZUZXh0OiBcIkF1cnJla29hXCIsXG4gICAgcGFnZU5leHRUZXh0OiBcIkh1cnJlbmdvYVwiLFxuICAgIGNvbXBsZXRlVGV4dDogXCJCdWthdHVcIixcbiAgICBwcmV2aWV3VGV4dDogXCJBdXJyZWJpc3RhXCIsXG4gICAgZWRpdFRleHQ6IFwiRWRpdGF0dVwiLFxuICAgIHN0YXJ0U3VydmV5VGV4dDogXCJIYXNpXCIsXG4gICAgb3RoZXJJdGVtVGV4dDogXCJCZXN0ZSBiYXQgKHplaGF6dHUpXCIsXG4gICAgbm9uZUl0ZW1UZXh0OiBcIkJhdCBlcmUgZXpcIixcbiAgICBzZWxlY3RBbGxJdGVtVGV4dDogXCJHdXp0aWEgaGF1dGF0dVwiLFxuICAgIHByb2dyZXNzVGV4dDogXCJ7MX0tKGUpdGlrIHswfSBvcnJpYWxkZVwiLFxuICAgIGluZGV4VGV4dDogXCJ7MX0gezB9XCIsXG4gICAgcGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0OiBcInswfSBlcnJpZ2lzdHJvIHsxfS0oZSl0aWtcIixcbiAgICBwYW5lbER5bmFtaWNUYWJUZXh0Rm9ybWF0OiBcIlBhbmVsIHtwYW5lbEluZGV4fVwiLFxuICAgIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCJFcmFudHp1bmRha28gZ2FsZGVyYWsgezB9L3sxfVwiLFxuICAgIGVtcHR5U3VydmV5OiBcIkV6IGRhZ28gb3JyaWFsZGUgYmlzdGFyYWdhcnJpcmlrIGVkbyBleiBkYWdvIGdhbGRlcmFyaWsuXCIsXG4gICAgY29tcGxldGluZ1N1cnZleTogXCJFc2tlcnJpayBhc2tvIGdhbGRldGVnaWEgZXJhbnR6dXRlYWdhdGlrIVwiLFxuICAgIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6IFwiR3VyZSBkYXR1ZWsgZGlvdGUgZGFnb2VuZWtvIGdhbGRldGVnaWEgZXJhbnR6dW4gZHV6dWxhLlwiLFxuICAgIGxvYWRpbmdTdXJ2ZXk6IFwiR2FsZGV0ZWdpYSBrYXJnYXR6ZW4uLi5cIixcbiAgICBwbGFjZWhvbGRlcjogXCJIYXV0YXR1Li4uXCIsXG4gICAgcmF0aW5nT3B0aW9uc0NhcHRpb246IFwiQXVrZXJhdHUuLi5cIixcbiAgICB2YWx1ZTogXCJiYWxpb2FcIixcbiAgICByZXF1aXJlZEVycm9yOiBcIk1lc2VkZXosIGdhbGRlcmEgZXJhbnR6dW4uXCIsXG4gICAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwiTWVzZWRleiwgZ3V0eGllbmV6IGdhbGRlcmEgYmF0IGVyYW50enVuLlwiLFxuICAgIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwiTWVzZWRleiwgZXJyZW5rYWRha28gZ2FsZGVyYSBndXp0aWFrIGVyYW50enVuLlwiLFxuICAgIG51bWVyaWNFcnJvcjogXCJFc3RpbWF6aW9hIHplbmJha2l6a29hIGl6YW4gYmVoYXIgZHUuXCIsXG4gICAgbWluRXJyb3I6IFwiQmFsaW9hIGV6IGRhIHswfSBiYWlubyB0eGlraWFnb2EgaXphbiBiZWhhclwiLFxuICAgIG1heEVycm9yOiBcIkJhbGlvYSBleiBkYSB7MH0gYmFpbm8gaGFuZGlhZ29hIGl6YW4gYmVoYXJcIixcbiAgICB0ZXh0TWluTGVuZ3RoOiBcIk1lc2VkZXosIGd1dHhpZW5leiB7MH0ga2FyYWt0ZXJlIGVyYWJpbGkgYmVoYXIgZGlyYS5cIixcbiAgICB0ZXh0TWF4TGVuZ3RoOiBcIk1lc2VkZXosIGdlaGllbmV6IHswfSBrYXJha3RlcmUgZXJhYmlsaSBiZWhhciBkaXJhLlwiLFxuICAgIHRleHRNaW5NYXhMZW5ndGg6IFwiTWVzZWRleiwgZ2VoaWVuZXogezB9IGV0YSBndXR4aWVuZXogezF9IGthcmFrdGVyZSBlcmFiaWxpIGJlaGFyIGRpcmEuXCIsXG4gICAgbWluUm93Q291bnRFcnJvcjogXCJNZXNlZGV6LCBndXR4aWVuZXogezB9IGVycmVua2FkYSBiZXRlLlwiLFxuICAgIG1pblNlbGVjdEVycm9yOiBcIk1lc2VkZXosIGd1dHhpZW5leiB7MH0gYXVrZXJhIGhhdXRhdHUuXCIsXG4gICAgbWF4U2VsZWN0RXJyb3I6IFwiTWVzZWRleiwgezB9IGF1a2VyYSBiYWlubyBnZWhpYWdvIGV6IGhhdXRhdHUuXCIsXG4gICAgbnVtZXJpY01pbk1heDogXCJFbCAnezB9JyBkZWJlIGRlIHNlciBpZ3VhbCBvIG3DoXMgZGUgezF9IHkgaWd1YWwgbyBtZW5vcyBkZSB7Mn1cIixcbiAgICBudW1lcmljTWluOiBcIid7MH0nIHsxfSBiYWlubyBoYW5kaWFnb2EgZWRvIGJlcmRpbiBpemFuIGJlaGFyIGRhXCIsXG4gICAgbnVtZXJpY01heDogXCInezB9JyB7MX0gYmFpbm8gdHhpa2lhZ28gZWRvIGJlcmRpbiBpemFuIGJlaGFyIGRhXCIsXG4gICAgaW52YWxpZEVtYWlsOiBcIk1lc2VkZXosIGJhbGlvemtvIGVtYWlsYSBpZGF0eiBlemF6dS5cIixcbiAgICBpbnZhbGlkRXhwcmVzc2lvbjogXCJ7MH0gYWRpZXJhenBlbmFrICdlZ2lhemtvYScgaXR6dWxpIGJlaGFya28gbHVrZS5cIixcbiAgICB1cmxSZXF1ZXN0RXJyb3I6IFwiRXNrYWVyYWsgJ3swfScgZXJyb3JlYSBpdHp1bGkgZHUuIHsxfVwiLFxuICAgIHVybEdldENob2ljZXNFcnJvcjogXCJMYSBzb2xpY2l0dWQgcmVncmVzw7MgdmFjw61vIGRlIGRhdGEgbyBsYSBwcm9waWVkYWQgJ3RyYXllY3RvcmlhJyBubyBlcyBjb3JyZWN0YVwiLFxuICAgIGV4Y2VlZE1heFNpemU6IFwiRml0eGF0ZWdpYXJlbiB0YW1haW5hIGV6IGRhIHswfSBiYWlubyBoYW5kaWFnb2EgaXphbiBiZWhhci5cIixcbiAgICBvdGhlclJlcXVpcmVkRXJyb3I6IFwiTWVzZWRleiwgYmVzdGUgZXN0aW1hemlvYSBnZWhpdHUuXCIsXG4gICAgdXBsb2FkaW5nRmlsZTogXCJadXJlIGZpdHhhdGVnaWEgaWdvdHplbiBhcmkgZGEuIE1lc2VkZXosIHNlZ3VuZG8gYmF0enVrIGl0eGFyb24gZXRhIHNhaWF0dSBiZXJyaXJvLlwiLFxuICAgIGxvYWRpbmdGaWxlOiBcIkthcmdhdHplbi4uLlwiLFxuICAgIGNob29zZUZpbGU6IFwiRml0eGF0ZWdpYShrKSBoYXV0YXR1Li4uXCIsXG4gICAgbm9GaWxlQ2hvc2VuOiBcIkV6IGRhIGlub2xha28gZml0eGF0ZWdpcmlrIGhhdXRhdHVcIixcbiAgICBmaWxlRHJhZ0FyZWFQbGFjZWhvbGRlcjogXCJBcnJhc3RhdHUgZXRhIGFza2F0dSBhcnR4aWJvIGJhdCBoZW1lbiBlZG8ga2xpayBlZ2luIGJlaGVrbyBib3RvaWFuIGV0YSBhdWtlcmF0dSBhcnR4aWJvIGJhdCBrYXJnYXR6ZWtvLlwiLFxuICAgIGNvbmZpcm1EZWxldGU6IFwiwr9FcnJlZ2lzdHJvYSBib3JyYXR1IG5haGkgYWwgZHV6dT9cIixcbiAgICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcIkJhbGlvIGhhdSBiYWthcnJhIGl6YW4gYmVoYXIgZHUuXCIsXG4gICAgYWRkQ29sdW1uOiBcIlp1dGFiZSBiYXQgZ2VoaXR1XCIsXG4gICAgYWRkUm93OiBcIkVycmVua2FkYSBiYXQgZ2VoaXR1XCIsXG4gICAgcmVtb3ZlUm93OiBcIkVycmVua2FkYSBiYXQga2VuZHVcIixcbiAgICBlbXB0eVJvd3NUZXh0OiBcIkV6IGRhZ28gZXJyZW5rYWRhcmlrLlwiLFxuICAgIGFkZFBhbmVsOiBcIkJlcnJpYSBnZWhpdHVcIixcbiAgICByZW1vdmVQYW5lbDogXCJLZW5kdVwiLFxuICAgIGNob2ljZXNfSXRlbTogXCJhcnRpa3VsdWFcIixcbiAgICBtYXRyaXhfY29sdW1uOiBcIlp1dGFiZWFcIixcbiAgICBtYXRyaXhfcm93OiBcIkVycmVua2FkYVwiLFxuICAgIG11bHRpcGxldGV4dF9pdGVtbmFtZTogXCJ0ZXN0dWFcIixcbiAgICBzYXZpbmdEYXRhOiBcIkVyYW50enVuYWsgemVyYml0emFyaWFuIGdvcmRldHplbiBhcmkgZGlyYS4uLlwiLFxuICAgIHNhdmluZ0RhdGFFcnJvcjogXCJFcnJvcmVyZW4gYmF0IGdlcnRhdHUgZXRhIGVyYW50enVuYWsgZXogZGlyYSB6ZXJiaXR6YXJpYW4gZ29yZGUgYWhhbCBpemFuLlwiLFxuICAgIHNhdmluZ0RhdGFTdWNjZXNzOiBcIkVyYW50enVuYWsgZWdva2kgZ29yZGUgZGlyYSFcIixcbiAgICBzYXZlQWdhaW5CdXR0b246IFwiQmVycmlybyBzYWlhdHUuXCIsXG4gICAgdGltZXJNaW46IFwibWluXCIsXG4gICAgdGltZXJTZWM6IFwic2VnXCIsXG4gICAgdGltZXJTcGVudEFsbDogXCJ7MH0gZXJhYmlsaSBkdXp1IG9ycmlhbGRlIGhvbmV0YW4gZXRhIG9yb3RhcmEgezF9LlwiLFxuICAgIHRpbWVyU3BlbnRQYWdlOiBcIlp1ayB7MH0gZXJhYmlsaSBkdXp1LlwiLFxuICAgIHRpbWVyU3BlbnRTdXJ2ZXk6IFwiT3JvdGFyYSBnYXN0YXR1IGR1enUuXCIsXG4gICAgdGltZXJMaW1pdEFsbDogXCJ7MH0gZ2FzdGF0dSBkdXp1IHsxfS0oZSl0aWsgb3JyaWFsZGUgaG9uZXRhbiBldGEgb3JvdGFyYSB7Mn0gezN9LShlKXRpay5cIixcbiAgICB0aW1lckxpbWl0UGFnZTogXCJ7MH0gZ2FzdGF0dSBkdXp1IG9ycmlhbGRlIGhvbmV0YW4gezF9LShlKXRpay5cIixcbiAgICB0aW1lckxpbWl0U3VydmV5OiBcIlp1ayBvcm90YXJhIHswfSBnYXN0YXR1IGR1enUgezF9LShlKXRpay5cIixcbiAgICBjbGVhckNhcHRpb246IFwiSHVzdHVcIixcbiAgICBzaWduYXR1cmVQbGFjZUhvbGRlcjogXCJTaW5hdHUgaGVtZW5cIixcbiAgICBjaG9vc2VGaWxlQ2FwdGlvbjogXCJGaXR4YXRlZ2lhIGhhdXRhdHVcIixcbiAgICB0YWtlUGhvdG9DYXB0aW9uOiBcIkFyZ2F6a2lhIGhhcnR1XCIsXG4gICAgY2FtZXJhUGxhY2VIb2xkZXI6IFwiRWdpbiBrbGlrIGJlaGVrbyBib3RvaWFuLCBrYW1lcmFyZWtpbiBhcmdhemtpIGJhdCBoYXJ0emVrby5cIixcbiAgICBmaWxlQ2FtZXJhRHJhZ0FyZWFQbGFjZUhvbGRlcjogXCJBcnJhc3RhdHUgZXRhIGFza2F0dSBhcnR4aWJvIGJhdCBrYW1lcmFyZWtpbiBhcmdhemtpIGJhdCBrYXJnYXR6ZWtvIGVkbyBoYXJ0emVrby5cIixcbiAgICByZXBsYWNlRmlsZUNhcHRpb246IFwiQXJ0eGlib2Egb3JkZXp0dVwiLFxuICAgIHJlbW92ZUZpbGVDYXB0aW9uOiBcIkZpdHhhdGVnaSBoYXUgZXphYmF0dVwiLFxuICAgIGJvb2xlYW5DaGVja2VkTGFiZWw6IFwiQmFpXCIsXG4gICAgYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcIkV6XCIsXG4gICAgY29uZmlybVJlbW92ZUZpbGU6IFwiWml1ciB6YXVkZSBodXJyZW5nbyBmaXR4YXRlZ2lhIGV6YWJhdHUgbmFoaSBkdXp1bGE6IHswfT9cIixcbiAgICBjb25maXJtUmVtb3ZlQWxsRmlsZXM6IFwiWml1ciBhbCB6YXVkZSBmaXR4YXRlZ2kgZ3V6dGlhayBlemFiYXR1IG5haGkgZGl0dXp1bGE/XCIsXG4gICAgcXVlc3Rpb25UaXRsZVBhdHRlcm5UZXh0OiBcIkdhbGRlcmFyZW4gaXplbmJ1cnVhXCIsXG4gICAgbW9kYWxDYW5jZWxCdXR0b25UZXh0OiBcIkV6ZXp0YXR1XCIsXG4gICAgbW9kYWxBcHBseUJ1dHRvblRleHQ6IFwiRXphcnJpXCIsXG4gICAgZmlsdGVyU3RyaW5nUGxhY2Vob2xkZXI6IFwiSWRhdHppIGJpbGEuLi5cIixcbiAgICBlbXB0eU1lc3NhZ2U6IFwiRXogZGF0dXJpayBlcmFrdXN0ZWtvXCIsXG4gICAgbm9FbnRyaWVzVGV4dDogXCJPcmFpbmRpayBleiBzYXJyZXJhcmlrLlxcbktsaWsgYmVoZWtvIGJvdG9pYW4ga2xpayBlZ2luIHNhcnJlcmEgYmVycmkgYmF0IGVyYW5zdGVrby5cIixcbiAgICBub0VudHJpZXNSZWFkb25seVRleHQ6IFwiRXogc2FycmVyYXJpay5cIixcbiAgICBtb3JlOiBcIkdlaGlhZ29cIixcbiAgICB0YWdib3hEb25lQnV0dG9uQ2FwdGlvbjogXCJBZG9zXCIsXG4gICAgc2VsZWN0VG9SYW5rRW1wdHlSYW5rZWRBcmVhVGV4dDogXCJBdWtlcmEgZ3V6dGlhayBzYWlsa2F0dXRhIGRhdWRlXCIsXG4gICAgc2VsZWN0VG9SYW5rRW1wdHlVbnJhbmtlZEFyZWFUZXh0OiBcIkFycmFzdGFrYSBldGEgYXNrYXR6ZW4gZGl0dSBoZW1lbiBzYWlsa2F0emVrb1wiXG59O1xuc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN1cnZleUxvY2FsaXphdGlvblwiXS5sb2NhbGVzW1wiZXVcIl0gPSBiYXNxdWVTdXJ2ZXlTdHJpbmdzO1xuc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN1cnZleUxvY2FsaXphdGlvblwiXS5sb2NhbGVOYW1lc1tcImV1XCJdID0gXCJFdXNrYXJhXCI7XG4vLyBUaGUgZm9sbG93aW5nIHN0cmluZ3MgaGF2ZSBiZWVuIHRyYW5zbGF0ZWQgYnkgYSBtYWNoaW5lIHRyYW5zbGF0aW9uIHNlcnZpY2Vcbi8vIFJlbW92ZSB0aG9zZSBzdHJpbmdzIHRoYXQgeW91IGhhdmUgY29ycmVjdGVkIG1hbnVhbGx5XG4vLyBpbmRleFRleHQ6IFwiezB9IG9mIHsxfVwiID0+IFwiezF9IHswfVwiXG4vLyBwYW5lbER5bmFtaWNUYWJUZXh0Rm9ybWF0OiBcIlBhbmVsIHtwYW5lbEluZGV4fVwiID0+IFwiUGFuZWwge3BhbmVsSW5kZXh9XCJcbi8vIHJhdGluZ09wdGlvbnNDYXB0aW9uOiBcIlNlbGVjdC4uLlwiID0+IFwiQXVrZXJhdHUuLi5cIlxuLy8gZmlsZURyYWdBcmVhUGxhY2Vob2xkZXI6IFwiRHJhZyBhbmQgZHJvcCBhIGZpbGUgaGVyZSBvciBjbGljayB0aGUgYnV0dG9uIGJlbG93IGFuZCBjaG9vc2UgYSBmaWxlIHRvIHVwbG9hZC5cIiA9PiBcIkFycmFzdGF0dSBldGEgYXNrYXR1IGFydHhpYm8gYmF0IGhlbWVuIGVkbyBrbGlrIGVnaW4gYmVoZWtvIGJvdG9pYW4gZXRhIGF1a2VyYXR1IGFydHhpYm8gYmF0IGthcmdhdHpla28uXCJcbi8vIGZpbHRlclN0cmluZ1BsYWNlaG9sZGVyOiBcIlR5cGUgdG8gc2VhcmNoLi4uXCIgPT4gXCJJZGF0emkgYmlsYS4uLlwiXG4vLyBlbXB0eU1lc3NhZ2U6IFwiTm8gZGF0YSB0byBkaXNwbGF5XCIgPT4gXCJFeiBkYXR1cmlrIGVyYWt1c3Rla29cIlxuLy8gbm9FbnRyaWVzVGV4dDogXCJUaGVyZSBhcmUgbm8gZW50cmllcyB5ZXQuXFxuQ2xpY2sgdGhlIGJ1dHRvbiBiZWxvdyB0byBhZGQgYSBuZXcgZW50cnkuXCIgPT4gXCJPcmFpbmRpayBleiBzYXJyZXJhcmlrLlxcbktsaWsgYmVoZWtvIGJvdG9pYW4ga2xpayBlZ2luIHNhcnJlcmEgYmVycmkgYmF0IGVyYW5zdGVrby5cIlxuLy8gbm9FbnRyaWVzUmVhZG9ubHlUZXh0OiBcIlRoZXJlIGFyZSBubyBlbnRyaWVzLlwiID0+IFwiRXogc2FycmVyYXJpay5cIlxuLy8gbW9yZTogXCJNb3JlXCIgPT4gXCJHZWhpYWdvXCJcbi8vIHRhZ2JveERvbmVCdXR0b25DYXB0aW9uOiBcIk9LXCIgPT4gXCJBZG9zXCJcbi8vIHNlbGVjdFRvUmFua0VtcHR5UmFua2VkQXJlYVRleHQ6IFwiQWxsIGNob2ljZXMgYXJlIHJhbmtlZFwiID0+IFwiQXVrZXJhIGd1enRpYWsgc2FpbGthdHV0YSBkYXVkZVwiXG4vLyBzZWxlY3RUb1JhbmtFbXB0eVVucmFua2VkQXJlYVRleHQ6IFwiRHJhZyBhbmQgZHJvcCBjaG9pY2VzIGhlcmUgdG8gcmFuayB0aGVtXCIgPT4gXCJBcnJhc3Rha2EgZXRhIGFza2F0emVuIGRpdHUgaGVtZW4gc2FpbGthdHpla29cIi8vIHRha2VQaG90b0NhcHRpb246IFwiVGFrZSBQaG90b1wiID0+IFwiQXJnYXpraWEgaGFydHVcIlxuLy8gY2FtZXJhUGxhY2VIb2xkZXI6IFwiQ2xpY2sgdGhlIGJ1dHRvbiBiZWxvdyB0byB0YWtlIGEgcGhvdG8gdXNpbmcgdGhlIGNhbWVyYS5cIiA9PiBcIkVnaW4ga2xpayBiZWhla28gYm90b2lhbiwga2FtZXJhcmVraW4gYXJnYXpraSBiYXQgaGFydHpla28uXCJcbi8vIGZpbGVDYW1lcmFEcmFnQXJlYVBsYWNlSG9sZGVyOiBcIkRyYWcgYW5kIGRyb3Agb3Igc2VsZWN0IGEgZmlsZSB0byB1cGxvYWQgb3IgdGFrZSBhIHBob3RvIHVzaW5nIHRoZSBjYW1lcmEuXCIgPT4gXCJBcnJhc3RhdHUgZXRhIGFza2F0dSBhcnR4aWJvIGJhdCBrYW1lcmFyZWtpbiBhcmdhemtpIGJhdCBrYXJnYXR6ZWtvIGVkbyBoYXJ0emVrby5cIlxuLy8gcmVwbGFjZUZpbGVDYXB0aW9uOiBcIlJlcGxhY2UgZmlsZVwiID0+IFwiQXJ0eGlib2Egb3JkZXp0dVwiXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvbG9jYWxpemF0aW9uL2J1bGdhcmlhbi50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL2xvY2FsaXphdGlvbi9idWxnYXJpYW4udHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBidWxnYXJpYW5TdHJpbmdzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImJ1bGdhcmlhblN0cmluZ3NcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBidWxnYXJpYW5TdHJpbmdzOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBzdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgc3VydmV5LWNvcmUgKi8gXCIuL3NyYy9lbnRyaWVzL2NvcmUudHNcIik7XG5cbnZhciBidWxnYXJpYW5TdHJpbmdzID0ge1xuICAgIHBhZ2VQcmV2VGV4dDogXCLQndCw0LfQsNC0XCIsXG4gICAgcGFnZU5leHRUZXh0OiBcItCd0LDQv9GA0LXQtFwiLFxuICAgIGNvbXBsZXRlVGV4dDogXCLQmtGA0LDQuVwiLFxuICAgIHByZXZpZXdUZXh0OiBcItCS0LjQt9GD0LDQu9C40LfQsNGG0LjRj1wiLFxuICAgIGVkaXRUZXh0OiBcItGA0LXQtNCw0LrRgtC40YDQsNC90LVcIixcbiAgICBzdGFydFN1cnZleVRleHQ6IFwi0J3QsNGH0LDQu9C+XCIsXG4gICAgb3RoZXJJdGVtVGV4dDogXCLQlNGA0YPQs9C+ICjQvtC/0LjRiNC10YLQtSlcIixcbiAgICBub25lSXRlbVRleHQ6IFwi0J3QuNGC0L4g0LXQtNC40L1cIixcbiAgICBzZWxlY3RBbGxJdGVtVGV4dDogXCLQktGB0LjRh9C60LhcIixcbiAgICBwcm9ncmVzc1RleHQ6IFwi0YHRgtGALiB7MH0sINC+0LHRidC+INGB0YLRgC4gezF9XCIsXG4gICAgaW5kZXhUZXh0OiBcInswfSDQvdCwIHsxfVwiLFxuICAgIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCLQl9Cw0L/QuNGBIHswfSDQvtGCIHsxfVwiLFxuICAgIHBhbmVsRHluYW1pY1RhYlRleHRGb3JtYXQ6IFwi0J/QsNC90LXQuyB7cGFuZWxJbmRleH1cIixcbiAgICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwi0J7RgtCz0L7QstC+0YDQtdC90Lgg0L3QsCB7MH0gLyB7MX0g0LLRitC/0YDQvtGB0LBcIixcbiAgICBlbXB0eVN1cnZleTogXCLQkNC90LrQtdGC0LDRgtCwINC90LUg0YHRitC00YrRgNC20LAg0LLQuNC00LjQvNC4INGB0YLRgNCw0L3QuNGG0Lgg0LjQu9C4INCy0YrQv9GA0L7RgdC4LlwiLFxuICAgIGNvbXBsZXRpbmdTdXJ2ZXk6IFwi0JHQu9Cw0LPQvtC00LDRgNC40Lwg0LLQuCDQt9CwINGD0YfQsNGB0YLQuNC10YLQviDQsiDQsNC90LrQtdGC0LDRgtCwIVwiLFxuICAgIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6IFwi0JjQt9Cz0LvQtdC20LTQsCwg0YfQtSDQstC40LUg0LLQtdGH0LUg0YHRgtC1INC/0L7Qv9GK0LvQvdC40LvQuCDQsNC90LrQtdGC0LDRgtCwLlwiLFxuICAgIGxvYWRpbmdTdXJ2ZXk6IFwi0JfQsNGA0LXQttC00LDQvdC1INC90LAg0LDQvdC60LXRgtCw0YLQsC4uLlwiLFxuICAgIHBsYWNlaG9sZGVyOiBcItCY0LfQsdC10YDQtdGC0LUuLi5cIixcbiAgICByYXRpbmdPcHRpb25zQ2FwdGlvbjogXCLQntGC0LHRgNCw0L0uLi5cIixcbiAgICB2YWx1ZTogXCJ2YWx1ZVwiLFxuICAgIHJlcXVpcmVkRXJyb3I6IFwi0JzQvtC70Y8sINC+0YLQs9C+0LLQvtGA0LXRgtC1INC90LAg0YHQu9C10LTQvdC40Y8g0LLRitC/0YDQvtGBLlwiLFxuICAgIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcItCc0L7Qu9GPLCDQvtGC0LPQvtCy0L7RgNC10YLQtSDQv9C+0L3QtSDQvdCwINC10LTQuNC9INC+0YIg0LLRitC/0YDQvtGB0LjRgtC1LlwiLFxuICAgIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwi0JzQvtC70Y8sINC+0YLQs9C+0LLQvtGA0LXRgtC1INC90LAg0LLRitC/0YDQvtGB0LjRgtC1INC90LAg0LLRgdC40YfQutC4INGA0LXQtNC+0LLQtS5cIixcbiAgICBudW1lcmljRXJyb3I6IFwi0KHRgtC+0LnQvdC+0YHRgtGC0LAg0YHQu9C10LTQstCwINC00LAg0LHRitC00LUg0YfQuNGB0LvQvi5cIixcbiAgICBtaW5FcnJvcjogXCLQodGC0L7QudC90L7RgdGC0YLQsCDQvdC1INGC0YDRj9Cx0LLQsCDQtNCwINCx0YrQtNC1INC/0L4t0LzQsNC70LrQsCDQvtGCIHswfVwiLFxuICAgIG1heEVycm9yOiBcItCh0YLQvtC50L3QvtGB0YLRgtCwINC90LUg0YLRgNGP0LHQstCwINC00LAg0LHRitC00LUg0L/Qvi3Qs9C+0LvRj9C80LAg0L7RgiB7MH1cIixcbiAgICB0ZXh0TWluTGVuZ3RoOiBcItCc0L7Qu9GPLCDQuNC30L/QvtC70LfQstCw0LnRgtC1INC/0L7QvdC1IHswfSDRgdC40LzQstC+0LvQsC5cIixcbiAgICB0ZXh0TWF4TGVuZ3RoOiBcItCc0L7Qu9GPLCDQuNC30L/QvtC70LfQstCw0LnRgtC1INC90LUg0L/QvtCy0LXRh9C1INC+0YIgezB9INGB0LjQvNCy0L7Qu9CwLlwiLFxuICAgIHRleHRNaW5NYXhMZW5ndGg6IFwi0JzQvtC70Y8sINC40LfQv9C+0LvQt9Cy0LDQudGC0LUg0L/QvtCy0LXRh9C1INC+0YIgezB9INC4INC/0L4t0LzQsNC70LrQviDQvtGCIHsxfSDRgdC40LzQstC+0LvQsC5cIixcbiAgICBtaW5Sb3dDb3VudEVycm9yOiBcItCc0L7Qu9GPLCDQv9C+0L/RitC70L3QtdGC0LUg0L/QvtC90LUgezB9INGA0LXQtNCwLlwiLFxuICAgIG1pblNlbGVjdEVycm9yOiBcItCc0L7Qu9GPLCDQuNC30LHQtdGA0LXRgtC1INC/0L7QvdC1IHswfSDQstCw0YDQuNCw0L3RgtCwLlwiLFxuICAgIG1heFNlbGVjdEVycm9yOiBcItCc0L7Qu9GPLCDQuNC30LHQtdGA0LXRgtC1INC90LUg0L/QvtCy0LXRh9C1INC+0YIgezB9INCy0LDRgNC40LDQvdGC0LAuXCIsXG4gICAgbnVtZXJpY01pbk1heDogXCLQodGC0L7QudC90L7RgdGC0YLQsCAnezB9JyDRgdC70LXQtNCy0LAg0LTQsCDQsdGK0LTQtSDRgNCw0LLQvdCwINC40LvQuCDQv9C+LdCz0L7Qu9GP0LzQsCDQvtGCIHsxfSDQuCDRgNCw0LLQvdCwINC40LvQuCDQv9C+LdC80LDQu9C60LAg0L7RgiB7Mn1cIixcbiAgICBudW1lcmljTWluOiBcItCh0YLQvtC50L3QvtGB0YLRgtCwICd7MH0nINGB0LvQtdC00LLQsCDQtNCwINCx0YrQtNC1INGA0LDQstC90LAg0LjQu9C4INC/0L4t0LPQvtC70Y/QvNCwINC+0YIgezF9XCIsXG4gICAgbnVtZXJpY01heDogXCLQodGC0L7QudC90L7RgdGC0YLQsCAnezB9JyDRgdC70LXQtNCy0LAg0LTQsCDQsdGK0LTQtSDRgNCw0LLQvdCwINC40LvQuCDQv9C+LdC80LDQu9C60LAg0L7RgiB7MX1cIixcbiAgICBpbnZhbGlkRW1haWw6IFwi0JzQvtC70Y8sINCy0YrQstC10LTQtdGC0LUg0LLQsNC70LjQtNC10L0g0LDQtNGA0LXRgSDQvdCwINC10LvQtdC60YLRgNC+0L3QvdCwINC/0L7RidCwLlwiLFxuICAgIGludmFsaWRFeHByZXNzaW9uOiBcItCY0LfRgNCw0LfRitGCOiB7MH0g0YLRgNGP0LHQstCwINC00LAg0LTQsNCy0LAg0YDQtdC30YPQu9GC0LDRgiAndHJ1ZScgKNC40YHRgtC40L3QsCkuXCIsXG4gICAgdXJsUmVxdWVzdEVycm9yOiBcItCX0LDRj9Cy0LrQsNGC0LAg0LLQvtC00Lgg0LTQviDQs9GA0LXRiNC60LAgJ3swfScuIHsxfVwiLFxuICAgIHVybEdldENob2ljZXNFcnJvcjogXCLQl9Cw0Y/QstC60LDRgtCwINC90LUg0LLRgNGK0YnQsCDQtNCw0L3QvdC4INC40LvQuCDRh9Cw0YHRgtGC0LAgJ3BhdGgnICjQv9GK0YIg0LTQviDRgtGK0YDRgdC10L3QuNGPINGA0LXRgdGD0YDRgSDQvdCwINGB0YrRgNCy0YrRgNCwKSDQtSDQvdC10L/RgNCw0LLQuNC70L3QviDQt9Cw0LTQsNC00LXQvdCwXCIsXG4gICAgZXhjZWVkTWF4U2l6ZTogXCLQoNCw0LfQvNC10YDRitGCINC90LAg0YTQsNC50LvQsCDRgdC70LXQtNCy0LAg0LTQsCDQvdC1INC/0YDQtdCy0LjRiNCw0LLQsCB7MH0uXCIsXG4gICAgb3RoZXJSZXF1aXJlZEVycm9yOiBcItCc0L7Qu9GPLCDQstGK0LLQtdC00LXRgtC1INC00YDRg9Cz0LDRgtCwINGB0YLQvtC50L3QvtGB0YIuXCIsXG4gICAgdXBsb2FkaW5nRmlsZTogXCLQktCw0YjQuNGCINGE0LDQudC7INGB0LUg0LfQsNGA0LXQttC00LAg0L3QsCDRgdGK0YDQstGK0YDQsC4g0JzQvtC70Y8sINC40LfRh9Cw0LrQsNC50YLQtSDQvdGP0LrQvtC70LrQviDRgdC10LrRg9C90LTQuCDQuCDRgtC+0LPQsNCy0LAg0L7Qv9C40YLQstCw0LnRgtC1INC+0YLQvdC+0LLQvi5cIixcbiAgICBsb2FkaW5nRmlsZTogXCLQl9Cw0YDQtdC20LTQsNC90LUuLi5cIixcbiAgICBjaG9vc2VGaWxlOiBcItCY0LfQsdC10YDQtdGC0LUg0YTQsNC50Lso0L7QstC1KS4uLlwiLFxuICAgIG5vRmlsZUNob3NlbjogXCLQndGP0LzQsCDQuNC30LHRgNCw0L0g0YTQsNC50LtcIixcbiAgICBmaWxlRHJhZ0FyZWFQbGFjZWhvbGRlcjogXCLQn9C70YrQt9C90LXRgtC1INC4INC/0YPRgdC90LXRgtC1INGE0LDQudC7INGC0YPQuiDQuNC70Lgg0YnRgNCw0LrQvdC10YLQtSDQstGK0YDRhdGDINCx0YPRgtC+0L3QsCDQv9C+LdC00L7Qu9GDINC4INC40LfQsdC10YDQtdGC0LUg0YTQsNC50Lsg0LfQsCDQutCw0YfQstCw0L3QtS5cIixcbiAgICBjb25maXJtRGVsZXRlOiBcItCW0LXQu9Cw0LXRgtC1INC70Lgg0LTQsCDQuNC30YLRgNC40LXRgtC1INC30LDQv9C40YHQsD9cIixcbiAgICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcItCh0YLQvtC50L3QvtGB0YLRgtCwINGB0LvQtdC00LLQsCDQtNCwINCx0YrQtNC1INGD0L3QuNC60LDQu9C90LAuXCIsXG4gICAgYWRkQ29sdW1uOiBcItCU0L7QsdCw0LLRj9C90LUg0L3QsCDQutC+0LvQvtC90LBcIixcbiAgICBhZGRSb3c6IFwi0JTQvtCx0LDQstGP0L3QtSDQvdCwINGA0LXQtFwiLFxuICAgIHJlbW92ZVJvdzogXCLQn9GA0LXQvNCw0YXQstCw0L3QtSDQvdCwINGA0LXQtFwiLFxuICAgIGVtcHR5Um93c1RleHQ6IFwi0J3Rj9C80LAg0YDQtdC00L7QstC1LlwiLFxuICAgIGFkZFBhbmVsOiBcItCU0L7QsdCw0LLRj9C90LUg0L3QsCDQv9Cw0L3QtdC7XCIsXG4gICAgcmVtb3ZlUGFuZWw6IFwi0J/RgNC10LzQsNGF0LLQsNC90LUg0L3QsCDQv9Cw0L3QtdC7XCIsXG4gICAgY2hvaWNlc19JdGVtOiBcItC10LvQtdC80LXQvdGCXCIsXG4gICAgbWF0cml4X2NvbHVtbjogXCLQmtC+0LvQvtC90LBcIixcbiAgICBtYXRyaXhfcm93OiBcItCg0LXQtFwiLFxuICAgIG11bHRpcGxldGV4dF9pdGVtbmFtZTogXCLQotC10LrRgdGCXCIsXG4gICAgc2F2aW5nRGF0YTogXCLQoNC10LfRg9C70YLQsNGC0LjRgtC1INGB0LUg0LfQsNC/0LDQt9Cy0LDRgiDQvdCwINGB0YrRgNCy0YrRgNCwLi4uXCIsXG4gICAgc2F2aW5nRGF0YUVycm9yOiBcItCf0L7RgNCw0LTQuCDQstGK0LfQvdC40LrQvdCw0LvQsCDQs9GA0LXRiNC60LAg0YDQtdC30YPQu9GC0LDRgtC40YLQtSDQvdC1INC80L7QttCw0YXQsCDQtNCwINCx0YrQtNCw0YIg0LfQsNC/0LDQt9C10L3QuC5cIixcbiAgICBzYXZpbmdEYXRhU3VjY2VzczogXCLQoNC10LfRg9C70YLQsNGC0LjRgtC1INCx0Y/RhdCwINC30LDQv9Cw0LfQtdC90Lgg0YPRgdC/0LXRiNC90L4hXCIsXG4gICAgc2F2ZUFnYWluQnV0dG9uOiBcItCd0L7QsiDQvtC/0LjRglwiLFxuICAgIHRpbWVyTWluOiBcItC80LjQvVwiLFxuICAgIHRpbWVyU2VjOiBcItGB0LXQulwiLFxuICAgIHRpbWVyU3BlbnRBbGw6IFwi0JLQuNC1INC40LfQv9C+0LvQt9Cy0LDRhdGC0LUgezB9INC90LAg0YLQsNC30Lgg0YHRgtGA0LDQvdC40YbQsCDQuCDQvtCx0YnQviB7MX0uXCIsXG4gICAgdGltZXJTcGVudFBhZ2U6IFwi0JLQuNC1INC40LfQv9C+0LvQt9Cy0LDRhdGC0LUgezB9INC90LAg0YLQsNC30Lgg0YHRgtGA0LDQvdC40YbQsC5cIixcbiAgICB0aW1lclNwZW50U3VydmV5OiBcItCS0LjQtSDQuNC30L/QvtC70LfQstCw0YXRgtC1INC+0LHRidC+IHswfS5cIixcbiAgICB0aW1lckxpbWl0QWxsOiBcItCS0LjQtSDQuNC30L/QvtC30LLQsNGF0YLQtSB7MH0g0L7RgiB7MX0g0L3QsCDRgtCw0LfQuCDRgdGC0YDQsNC90LjRhtCwINC4INC+0LHRidC+IHsyfSDQvtGCIHszfS5cIixcbiAgICB0aW1lckxpbWl0UGFnZTogXCLQktC40LUg0LjQt9C/0L7Qu9C30LLQsNGF0YLQtSB7MH0g0L7RgiB7MX0g0L3QsCDRgtCw0LfQuCDRgdGC0YDQsNC90LjRhtCwLlwiLFxuICAgIHRpbWVyTGltaXRTdXJ2ZXk6IFwi0JLQuNC1INC40LfQv9C+0LvQt9Cy0LDRhdGC0LUg0L7QsdGJ0L4gezB9INC+0YIgezF9LlwiLFxuICAgIGNsZWFyQ2FwdGlvbjogXCLQndCw0YfQsNC70L3QviDRgdGK0YHRgtC+0Y/QvdC40LVcIixcbiAgICBzaWduYXR1cmVQbGFjZUhvbGRlcjogXCLQn9C+0LTQv9C40YjQtdGC0LUg0YLRg9C6XCIsXG4gICAgY2hvb3NlRmlsZUNhcHRpb246IFwi0JjQt9Cx0LXRgNC10YLQtSDRhNCw0LnQu1wiLFxuICAgIHRha2VQaG90b0NhcHRpb246IFwi0J3QsNC/0YDQsNCy0LXRgtC1INGB0L3QuNC80LrQsFwiLFxuICAgIGNhbWVyYVBsYWNlSG9sZGVyOiBcItCa0LvQuNC60L3QtdGC0LUg0LLRitGA0YXRgyDQsdGD0YLQvtC90LAg0L/Qvi3QtNC+0LvRgywg0LfQsCDQtNCwINC90LDQv9GA0LDQstC40YLQtSDRgdC90LjQvNC60LAg0YEg0L/QvtC80L7RidGC0LAg0L3QsCDQutCw0LzQtdGA0LDRgtCwLlwiLFxuICAgIGZpbGVDYW1lcmFEcmFnQXJlYVBsYWNlSG9sZGVyOiBcItCf0LvRitC30L3QtdGC0LUg0Lgg0L/Rg9GB0L3QtdGC0LUg0LjQu9C4INC40LfQsdC10YDQtdGC0LUg0YTQsNC50Lsg0LfQsCDQutCw0YfQstCw0L3QtSDQuNC70Lgg0L/RgNCw0LLQtdC90LUg0L3QsCDRgdC90LjQvNC60LAg0YEg0L/QvtC80L7RidGC0LAg0L3QsCDQutCw0LzQtdGA0LDRgtCwLlwiLFxuICAgIHJlcGxhY2VGaWxlQ2FwdGlvbjogXCLQl9Cw0LzQtdGB0YLQstCw0L3QtSDQvdCwINGE0LDQudC7XCIsXG4gICAgcmVtb3ZlRmlsZUNhcHRpb246IFwi0J/RgNC10LzQsNGF0LLQsNC90LUg0L3QsCDRhNCw0LnQu9CwXCIsXG4gICAgYm9vbGVhbkNoZWNrZWRMYWJlbDogXCLQlNCwXCIsXG4gICAgYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcItCd0LVcIixcbiAgICBjb25maXJtUmVtb3ZlRmlsZTogXCLQndCw0LjRgdGC0LjQvdCwINC70Lgg0LjRgdC60LDRgtC1INC00LAg0L/RgNC10LzQsNGF0L3QtdGC0LUg0YLQvtC30Lgg0YTQsNC50Ls6IHswfT9cIixcbiAgICBjb25maXJtUmVtb3ZlQWxsRmlsZXM6IFwi0J3QsNC40YHRgtC40L3QsCDQu9C4INC40YHQutCw0YLQtSDQtNCwINC/0YDQtdC80LDRhdC90LXRgtC1INCy0YHQuNGH0LrQuCDRhNCw0LnQu9C+0LLQtT9cIixcbiAgICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwi0JfQsNCz0LvQsNCy0LjQtSDQvdCwINCy0YrQv9GA0L7RgdCwXCIsXG4gICAgbW9kYWxDYW5jZWxCdXR0b25UZXh0OiBcItCe0YLQvNC10L3QuFwiLFxuICAgIG1vZGFsQXBwbHlCdXR0b25UZXh0OiBcItCf0YDQuNC70LDQs9Cw0LxcIixcbiAgICBmaWx0ZXJTdHJpbmdQbGFjZWhvbGRlcjogXCLQktGK0LLQtdC00LXRgtC1INC30LAg0YLRitGA0YHQtdC90LUuLi5cIixcbiAgICBlbXB0eU1lc3NhZ2U6IFwi0J3Rj9C80LAg0LTQsNC90L3QuCDQt9CwINC/0L7QutCw0LfQstCw0L3QtVwiLFxuICAgIG5vRW50cmllc1RleHQ6IFwi0JLRgdC1INC+0YnQtSDQvdGP0LzQsCDQt9Cw0L/QuNGB0LguXFxu0KnRgNCw0LrQvdC10YLQtSDQstGK0YDRhdGDINCx0YPRgtC+0L3QsCDQv9C+LdC00L7Qu9GDLCDQt9CwINC00LAg0LTQvtCx0LDQstC40YLQtSDQvdC+0LIg0LfQsNC/0LjRgS5cIixcbiAgICBub0VudHJpZXNSZWFkb25seVRleHQ6IFwi0J3Rj9C80LAg0LfQsNC/0LjRgdC4LlwiLFxuICAgIG1vcmU6IFwi0J7RidC1XCIsXG4gICAgdGFnYm94RG9uZUJ1dHRvbkNhcHRpb246IFwi0JTQvtCx0YDQtVwiLFxuICAgIHNlbGVjdFRvUmFua0VtcHR5UmFua2VkQXJlYVRleHQ6IFwi0JLRgdC40YfQutC4INCy0YrQt9C80L7QttC90L7RgdGC0Lgg0LfQsCDQuNC30LHQvtGAINGB0LAg0LrQu9Cw0YHQuNGA0LDQvdC4XCIsXG4gICAgc2VsZWN0VG9SYW5rRW1wdHlVbnJhbmtlZEFyZWFUZXh0OiBcItCf0LvRitC30L3QtdGC0LUg0Lgg0L/Rg9GB0L3QtdGC0LUg0L7Qv9GG0LjQuCDRgtGD0LosINC30LAg0LTQsCDQs9C4INC60LvQsNGB0LjRgNCw0YLQtVwiXG59O1xuc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN1cnZleUxvY2FsaXphdGlvblwiXS5sb2NhbGVzW1wiYmdcIl0gPSBidWxnYXJpYW5TdHJpbmdzO1xuc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN1cnZleUxvY2FsaXphdGlvblwiXS5sb2NhbGVOYW1lc1tcImJnXCJdID0gXCLQsdGK0LvQs9Cw0YDRgdC60LhcIjtcbi8vIFRoZSBmb2xsb3dpbmcgc3RyaW5ncyBoYXZlIGJlZW4gdHJhbnNsYXRlZCBieSBhIG1hY2hpbmUgdHJhbnNsYXRpb24gc2VydmljZVxuLy8gUmVtb3ZlIHRob3NlIHN0cmluZ3MgdGhhdCB5b3UgaGF2ZSBjb3JyZWN0ZWQgbWFudWFsbHlcbi8vIGluZGV4VGV4dDogXCJ7MH0gb2YgezF9XCIgPT4gXCJ7MH0g0L3QsCB7MX1cIlxuLy8gcGFuZWxEeW5hbWljVGFiVGV4dEZvcm1hdDogXCJQYW5lbCB7cGFuZWxJbmRleH1cIiA9PiBcItCf0LDQvdC10Lsge3BhbmVsSW5kZXh9XCJcbi8vIHJhdGluZ09wdGlvbnNDYXB0aW9uOiBcIlNlbGVjdC4uLlwiID0+IFwi0J7RgtCx0YDQsNC9Li4uXCJcbi8vIG1pbkVycm9yOiBcIlRoZSB2YWx1ZSBzaG91bGQgbm90IGJlIGxlc3MgdGhhbiB7MH1cIiA9PiBcItCh0YLQvtC50L3QvtGB0YLRgtCwINC90LUg0YLRgNGP0LHQstCwINC00LAg0LHRitC00LUg0L/Qvi3QvNCw0LvQutCwINC+0YIgezB9XCJcbi8vIG1heEVycm9yOiBcIlRoZSB2YWx1ZSBzaG91bGQgbm90IGJlIGdyZWF0ZXIgdGhhbiB7MH1cIiA9PiBcItCh0YLQvtC50L3QvtGB0YLRgtCwINC90LUg0YLRgNGP0LHQstCwINC00LAg0LHRitC00LUg0L/Qvi3Qs9C+0LvRj9C80LAg0L7RgiB7MH1cIlxuLy8gZmlsZURyYWdBcmVhUGxhY2Vob2xkZXI6IFwiRHJhZyBhbmQgZHJvcCBhIGZpbGUgaGVyZSBvciBjbGljayB0aGUgYnV0dG9uIGJlbG93IGFuZCBjaG9vc2UgYSBmaWxlIHRvIHVwbG9hZC5cIiA9PiBcItCf0LvRitC30L3QtdGC0LUg0Lgg0L/Rg9GB0L3QtdGC0LUg0YTQsNC50Lsg0YLRg9C6INC40LvQuCDRidGA0LDQutC90LXRgtC1INCy0YrRgNGF0YMg0LHRg9GC0L7QvdCwINC/0L4t0LTQvtC70YMg0Lgg0LjQt9Cx0LXRgNC10YLQtSDRhNCw0LnQuyDQt9CwINC60LDRh9Cy0LDQvdC1LlwiXG4vLyBlbXB0eVJvd3NUZXh0OiBcIlRoZXJlIGFyZSBubyByb3dzLlwiID0+IFwi0J3Rj9C80LAg0YDQtdC00L7QstC1LlwiXG4vLyBtdWx0aXBsZXRleHRfaXRlbW5hbWU6IFwidGV4dFwiID0+IFwi0KLQtdC60YHRglwiXG4vLyBzaWduYXR1cmVQbGFjZUhvbGRlcjogXCJTaWduIGhlcmVcIiA9PiBcItCf0L7QtNC/0LjRiNC10YLQtSDRgtGD0LpcIlxuLy8gbW9kYWxDYW5jZWxCdXR0b25UZXh0OiBcIkNhbmNlbFwiID0+IFwi0J7RgtC80LXQvdC4XCJcbi8vIG1vZGFsQXBwbHlCdXR0b25UZXh0OiBcIkFwcGx5XCIgPT4gXCLQn9GA0LjQu9Cw0LPQsNC8XCJcbi8vIGZpbHRlclN0cmluZ1BsYWNlaG9sZGVyOiBcIlR5cGUgdG8gc2VhcmNoLi4uXCIgPT4gXCLQktGK0LLQtdC00LXRgtC1INC30LAg0YLRitGA0YHQtdC90LUuLi5cIlxuLy8gZW1wdHlNZXNzYWdlOiBcIk5vIGRhdGEgdG8gZGlzcGxheVwiID0+IFwi0J3Rj9C80LAg0LTQsNC90L3QuCDQt9CwINC/0L7QutCw0LfQstCw0L3QtVwiXG4vLyBub0VudHJpZXNUZXh0OiBcIlRoZXJlIGFyZSBubyBlbnRyaWVzIHlldC5cXG5DbGljayB0aGUgYnV0dG9uIGJlbG93IHRvIGFkZCBhIG5ldyBlbnRyeS5cIiA9PiBcItCS0YHQtSDQvtGJ0LUg0L3Rj9C80LAg0LfQsNC/0LjRgdC4LlxcbtCp0YDQsNC60L3QtdGC0LUg0LLRitGA0YXRgyDQsdGD0YLQvtC90LAg0L/Qvi3QtNC+0LvRgywg0LfQsCDQtNCwINC00L7QsdCw0LLQuNGC0LUg0L3QvtCyINC30LDQv9C40YEuXCJcbi8vIG5vRW50cmllc1JlYWRvbmx5VGV4dDogXCJUaGVyZSBhcmUgbm8gZW50cmllcy5cIiA9PiBcItCd0Y/QvNCwINC30LDQv9C40YHQuC5cIlxuLy8gbW9yZTogXCJNb3JlXCIgPT4gXCLQntGJ0LVcIlxuLy8gdGFnYm94RG9uZUJ1dHRvbkNhcHRpb246IFwiT0tcIiA9PiBcItCU0L7QsdGA0LVcIlxuLy8gc2VsZWN0VG9SYW5rRW1wdHlSYW5rZWRBcmVhVGV4dDogXCJBbGwgY2hvaWNlcyBhcmUgcmFua2VkXCIgPT4gXCLQktGB0LjRh9C60Lgg0LLRitC30LzQvtC20L3QvtGB0YLQuCDQt9CwINC40LfQsdC+0YAg0YHQsCDQutC70LDRgdC40YDQsNC90LhcIlxuLy8gc2VsZWN0VG9SYW5rRW1wdHlVbnJhbmtlZEFyZWFUZXh0OiBcIkRyYWcgYW5kIGRyb3AgY2hvaWNlcyBoZXJlIHRvIHJhbmsgdGhlbVwiID0+IFwi0J/Qu9GK0LfQvdC10YLQtSDQuCDQv9GD0YHQvdC10YLQtSDQvtC/0YbQuNC4INGC0YPQuiwg0LfQsCDQtNCwINCz0Lgg0LrQu9Cw0YHQuNGA0LDRgtC1XCIvLyB0YWtlUGhvdG9DYXB0aW9uOiBcIlRha2UgUGhvdG9cIiA9PiBcItCd0LDQv9GA0LDQstC10YLQtSDRgdC90LjQvNC60LBcIlxuLy8gY2FtZXJhUGxhY2VIb2xkZXI6IFwiQ2xpY2sgdGhlIGJ1dHRvbiBiZWxvdyB0byB0YWtlIGEgcGhvdG8gdXNpbmcgdGhlIGNhbWVyYS5cIiA9PiBcItCa0LvQuNC60L3QtdGC0LUg0LLRitGA0YXRgyDQsdGD0YLQvtC90LAg0L/Qvi3QtNC+0LvRgywg0LfQsCDQtNCwINC90LDQv9GA0LDQstC40YLQtSDRgdC90LjQvNC60LAg0YEg0L/QvtC80L7RidGC0LAg0L3QsCDQutCw0LzQtdGA0LDRgtCwLlwiXG4vLyBmaWxlQ2FtZXJhRHJhZ0FyZWFQbGFjZUhvbGRlcjogXCJEcmFnIGFuZCBkcm9wIG9yIHNlbGVjdCBhIGZpbGUgdG8gdXBsb2FkIG9yIHRha2UgYSBwaG90byB1c2luZyB0aGUgY2FtZXJhLlwiID0+IFwi0J/Qu9GK0LfQvdC10YLQtSDQuCDQv9GD0YHQvdC10YLQtSDQuNC70Lgg0LjQt9Cx0LXRgNC10YLQtSDRhNCw0LnQuyDQt9CwINC60LDRh9Cy0LDQvdC1INC40LvQuCDQv9GA0LDQstC10L3QtSDQvdCwINGB0L3QuNC80LrQsCDRgSDQv9C+0LzQvtGJ0YLQsCDQvdCwINC60LDQvNC10YDQsNGC0LAuXCJcbi8vIHJlcGxhY2VGaWxlQ2FwdGlvbjogXCJSZXBsYWNlIGZpbGVcIiA9PiBcItCX0LDQvNC10YHRgtCy0LDQvdC1INC90LAg0YTQsNC50LtcIlxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL2xvY2FsaXphdGlvbi9jYXRhbGFuLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL2xvY2FsaXphdGlvbi9jYXRhbGFuLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGNhdGFsYW5TdXJ2ZXlTdHJpbmdzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImNhdGFsYW5TdXJ2ZXlTdHJpbmdzXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY2F0YWxhblN1cnZleVN0cmluZ3M7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHN1cnZleV9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBzdXJ2ZXktY29yZSAqLyBcIi4vc3JjL2VudHJpZXMvY29yZS50c1wiKTtcblxudmFyIGNhdGFsYW5TdXJ2ZXlTdHJpbmdzID0ge1xuICAgIHBhZ2VQcmV2VGV4dDogXCJBbnRlcmlvclwiLFxuICAgIHBhZ2VOZXh0VGV4dDogXCJTZWfDvGVudFwiLFxuICAgIGNvbXBsZXRlVGV4dDogXCJDb21wbGV0XCIsXG4gICAgcHJldmlld1RleHQ6IFwiUHJlZXN0cmVuYVwiLFxuICAgIGVkaXRUZXh0OiBcIkVkaXRhclwiLFxuICAgIHN0YXJ0U3VydmV5VGV4dDogXCJDb21lbsOnYXJcIixcbiAgICBvdGhlckl0ZW1UZXh0OiBcIlVuIGFsdHJlIChkZXNjcmlndWkpXCIsXG4gICAgbm9uZUl0ZW1UZXh0OiBcIkNhcFwiLFxuICAgIHNlbGVjdEFsbEl0ZW1UZXh0OiBcIlNlbGVjY2lvbmEtaG8gdG90XCIsXG4gICAgcHJvZ3Jlc3NUZXh0OiBcIlDDoGdpbmEgezB9IGRlIHsxfVwiLFxuICAgIGluZGV4VGV4dDogXCJ7MH0gZGUgezF9XCIsXG4gICAgcGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0OiBcInswfSBkZSB7MX1cIixcbiAgICBwYW5lbER5bmFtaWNUYWJUZXh0Rm9ybWF0OiBcIlBhbmVsbCB7cGFuZWxJbmRleH1cIixcbiAgICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwiUmVzcG9zdGVzIHswfS97MX0gcHJlZ3VudGVzXCIsXG4gICAgZW1wdHlTdXJ2ZXk6IFwiTm8gaGkgaGEgY2FwIHDDoGdpbmEgdmlzaWJsZSBvIHByZWd1bnRhIGEgbCdlbnF1ZXN0YS5cIixcbiAgICBjb21wbGV0aW5nU3VydmV5OiBcIkdyw6BjaWVzIHBlciBjb21wbGV0YXIgbCdlbnF1ZXN0YSFcIixcbiAgICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOiBcIkVscyBub3N0cmVzIHJlZ2lzdHJlcyBtb3N0cmVuIHF1ZSBqYSBoZXUgY29tcGxldGF0IGFxdWVzdGEgZW5xdWVzdGEuXCIsXG4gICAgbG9hZGluZ1N1cnZleTogXCJMJ2VucXVlc3RhIHMnZXN0w6AgY2FycmVnYW50IC4uLlwiLFxuICAgIHBsYWNlaG9sZGVyOiBcIlNlbGVjY2lvbmEgLi4uXCIsXG4gICAgcmF0aW5nT3B0aW9uc0NhcHRpb246IFwiU2VsZWNjaW9uYXIuLi5cIixcbiAgICB2YWx1ZTogXCJ2YWxvclwiLFxuICAgIHJlcXVpcmVkRXJyb3I6IFwiU2kgdXMgcGxhdSBjb250ZXN0aSBsYSBwcmVndW50YS5cIixcbiAgICByZXF1aXJlZEVycm9ySW5QYW5lbDogXCJSZXNwb3N0YSBuZWNlc3PDoHJpYTogcmVzcG9uZHJlIGFsbWVueXMgdW5hIHByZWd1bnRhLlwiLFxuICAgIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwiU2kgdXMgcGxhdSBjb250ZXN0aSBsZXMgcHJlZ3VudGVzIGRlIGNhZGEgZmlsZXJhLlwiLFxuICAgIG51bWVyaWNFcnJvcjogXCJMJ2VzdGltYWNpw7MgaGEgZGUgc2VyIG51bcOocmljYS5cIixcbiAgICBtaW5FcnJvcjogXCJFbCB2YWxvciBubyBoYSBkZSBzZXIgaW5mZXJpb3IgYSB7MH1cIixcbiAgICBtYXhFcnJvcjogXCJFbCB2YWxvciBubyBoYSBkZSBzZXIgc3VwZXJpb3IgYSB7MH1cIixcbiAgICB0ZXh0TWluTGVuZ3RoOiBcIlNpIHVzIHBsYXUgZW50cmUgYWxtZW55cyB7MH0gc8OtbWJvbHMuXCIsXG4gICAgdGV4dE1heExlbmd0aDogXCJTaSB1cyBwbGF1IGVudHJlIG1lbnlzIGRlIHswfSBzw61tYm9scy5cIixcbiAgICB0ZXh0TWluTWF4TGVuZ3RoOiBcIlNpIHVzIHBsYXUgZW50cmUgbcOpcyBkZSB7MH0gaSBtZW55cyBkZSB7MX0gc8OtbWJvbHMuXCIsXG4gICAgbWluUm93Q291bnRFcnJvcjogXCJTaSB1cyBwbGF1IG9tcGxpIGFsbWVueXMgezB9IGZpbGVyZXMuXCIsXG4gICAgbWluU2VsZWN0RXJyb3I6IFwiU2kgdXMgcGxhdSBzZWxlY2Npb25pIGFsbWVueXMgezB9IHZhcmlhbnRzLlwiLFxuICAgIG1heFNlbGVjdEVycm9yOiBcIlNpIHVzIHBsYXUgc2VsZWNjaW9uaSBubyBtw6lzIGRlIHswfSB2YXJpYW50cy5cIixcbiAgICBudW1lcmljTWluTWF4OiBcIkVsICd7MH0nIGRldSBzZXIgaWd1YWwgbyBtw6lzIGRlIHsxfSBpIGlndWFsIG8gbWVueXMgZGUgezJ9XCIsXG4gICAgbnVtZXJpY01pbjogXCJFbCAnezB9JyBoYSBkZSBzZXIgaWd1YWwgbyBtw6lzIGRlIHsxfVwiLFxuICAgIG51bWVyaWNNYXg6IFwiRWwgJ3swfScgaGEgZGUgc2VyIGlndWFsIG8gbWVueXMgZGUgezF9XCIsXG4gICAgaW52YWxpZEVtYWlsOiBcIlNpIHVzIHBsYXUgYWZlZ2l1IHVuIGNvcnJldSBlbGVjdHLDsm5pYyB2w6BsaWQuXCIsXG4gICAgaW52YWxpZEV4cHJlc3Npb246IFwiTCdleHByZXNzacOzOiB7MH0gaGEgZGUgdG9ybmFyICd2ZXJpdGFibGUnLlwiLFxuICAgIHVybFJlcXVlc3RFcnJvcjogXCJMYSBzb2zCt2xpY2l0dWQgdmEgdG9ybmFyIGVycm9yICd7MH0nLiB7MX1cIixcbiAgICB1cmxHZXRDaG9pY2VzRXJyb3I6IFwiTGEgc29swrdsaWNpdHVkIHZhIHRvcm5hciBidWlkYSBkZSBkYXRlcyBvIGxhIHByb3BpZXRhdCAndHJhamVjdMOycmlhJyBubyDDqXMgY29ycmVjdGFcIixcbiAgICBleGNlZWRNYXhTaXplOiBcIkxhIG1pZGEgZGUgbCdhcnhpdSBubyBwb3QgZXhjZWRpciB7MH0uXCIsXG4gICAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIlNpIHVzIHBsYXUgYWZlZ2l1IGwnYWx0cmEgZXN0aW1hY2nDsy5cIixcbiAgICB1cGxvYWRpbmdGaWxlOiBcIkVsIHNldSBhcnhpdSBzJ2VzdMOgIHB1amFudC4gU2kgdXMgcGxhdSBlc3BlcmkgdW5zIHNlZ29ucyBpIGludGVudGV1LWhvIGRlIG5vdS5cIixcbiAgICBsb2FkaW5nRmlsZTogXCJDw6BycmVnYS4uLlwiLFxuICAgIGNob29zZUZpbGU6IFwiVHJpZXUgZml0eGVyKHMpLi4uXCIsXG4gICAgbm9GaWxlQ2hvc2VuOiBcIk5vIHMnaGEgdHJpYXQgY2FwIGZpdHhlclwiLFxuICAgIGZpbGVEcmFnQXJlYVBsYWNlaG9sZGVyOiBcIkFycm9zc2VndWV1IGkgZGVpeGV1IGFuYXIgdW4gZml0eGVyIGFxdcOtIG8gZmV1IGNsaWMgYWwgYm90w7Mgc2Vnw7xlbnQgaSB0cmlldSB1biBmaXR4ZXIgcGVyIGNhcnJlZ2FyLlwiLFxuICAgIGNvbmZpcm1EZWxldGU6IFwiVm9scyBlbGltaW5hciBlbCByZWdpc3RyZT9cIixcbiAgICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcIkFxdWVzdCB2YWxvciBoYSBkZSBzZXIgw7puaWMuXCIsXG4gICAgYWRkQ29sdW1uOiBcIkFmZWdlaXggdW5hIGNvbHVtbmFcIixcbiAgICBhZGRSb3c6IFwiQWZlZ2l1IHVuYSBmaWxlcmFcIixcbiAgICByZW1vdmVSb3c6IFwiRWxpbWluYXIgdW5hIGZpbGVyYVwiLFxuICAgIGVtcHR5Um93c1RleHQ6IFwiTm8gaGkgaGEgZmlsZXMuXCIsXG4gICAgYWRkUGFuZWw6IFwiQWZlZ2VpeCB1biBub3VcIixcbiAgICByZW1vdmVQYW5lbDogXCJUcmV1cmVcIixcbiAgICBjaG9pY2VzX0l0ZW06IFwiw610ZW1cIixcbiAgICBtYXRyaXhfY29sdW1uOiBcIkNvbHVtbmFcIixcbiAgICBtYXRyaXhfcm93OiBcIkZpbGVyYVwiLFxuICAgIG11bHRpcGxldGV4dF9pdGVtbmFtZTogXCJTTVNcIixcbiAgICBzYXZpbmdEYXRhOiBcIkVscyByZXN1bHRhdHMgcydlc3RhbiBndWFyZGFudCBhbCBzZXJ2aWRvci4uLlwiLFxuICAgIHNhdmluZ0RhdGFFcnJvcjogXCJTJ2hhIHByb2R1w690IHVuIGVycm9yIGkgbm8gaGVtIHBvZ3V0IGd1YXJkYXIgZWxzIHJlc3VsdGF0cy5cIixcbiAgICBzYXZpbmdEYXRhU3VjY2VzczogXCJFbHMgcmVzdWx0YXRzIGVzIHZhbiBzYWx2YXIgYW1iIMOoeGl0IVwiLFxuICAgIHNhdmVBZ2FpbkJ1dHRvbjogXCJQcm92YSB1bmEgYWx0cmEgdmVnYWRhXCIsXG4gICAgdGltZXJNaW46IFwibWluXCIsXG4gICAgdGltZXJTZWM6IFwiU2VnXCIsXG4gICAgdGltZXJTcGVudEFsbDogXCJIZXUgcGFzc2F0IHswfSBlbiBhcXVlc3RhIHDDoGdpbmEgaSB7MX0gZW4gdG90YWwuXCIsXG4gICAgdGltZXJTcGVudFBhZ2U6IFwiSGFzIHBhc3NhdCB7MH0gZW4gYXF1ZXN0YSBww6BnaW5hLlwiLFxuICAgIHRpbWVyU3BlbnRTdXJ2ZXk6IFwiSGFzIGdhc3RhdCB7MH0gZW4gdG90YWwuXCIsXG4gICAgdGltZXJMaW1pdEFsbDogXCJIZXUgcGFzc2F0IHswfSBkZSB7MX0gZW4gYXF1ZXN0YSBww6BnaW5hIGkgezJ9IGRlIHszfSBlbiB0b3RhbC5cIixcbiAgICB0aW1lckxpbWl0UGFnZTogXCJIYXMgcGFzc2F0IHswfSBkZSB7MX0gZW4gYXF1ZXN0YSBww6BnaW5hLlwiLFxuICAgIHRpbWVyTGltaXRTdXJ2ZXk6IFwiSGFzIGdhc3RhdCB7MH0gZCd7MX0gZW4gdG90YWwuXCIsXG4gICAgY2xlYXJDYXB0aW9uOiBcIkNsYXJcIixcbiAgICBzaWduYXR1cmVQbGFjZUhvbGRlcjogXCJJbnNjcml1LXRlIGFxdcOtXCIsXG4gICAgY2hvb3NlRmlsZUNhcHRpb246IFwiVHJpYSB1biBmaXR4ZXJcIixcbiAgICB0YWtlUGhvdG9DYXB0aW9uOiBcIkZlciBmb3RvXCIsXG4gICAgY2FtZXJhUGxhY2VIb2xkZXI6IFwiRmV1IGNsaWMgYWwgYm90w7Mgc2Vnw7xlbnQgcGVyIGZlciB1bmEgZm90byBhbWIgbGEgY8OgbWVyYS5cIixcbiAgICBmaWxlQ2FtZXJhRHJhZ0FyZWFQbGFjZUhvbGRlcjogXCJBcnJvc3NlZ3VldSBpIGRlaXhldSBhbmFyIG8gc2VsZWNjaW9uZXUgdW4gZml0eGVyIHBlciBwZW5qYXItbG8gbyBmZXItbmUgdW5hIGZvdG8gYW1iIGxhIGPDoG1lcmEuXCIsXG4gICAgcmVwbGFjZUZpbGVDYXB0aW9uOiBcIlN1YnN0aXR1ZWl4IGVsIGZpdHhlclwiLFxuICAgIHJlbW92ZUZpbGVDYXB0aW9uOiBcIlN1cHJpbWVpeCBhcXVlc3QgZml0eGVyXCIsXG4gICAgYm9vbGVhbkNoZWNrZWRMYWJlbDogXCJTw61cIixcbiAgICBib29sZWFuVW5jaGVja2VkTGFiZWw6IFwiTm9cIixcbiAgICBjb25maXJtUmVtb3ZlRmlsZTogXCJFc3RldSBzZWd1ciBxdWUgdm9sZXUgZWxpbWluYXIgYXF1ZXN0IGZpdHhlcjogezB9P1wiLFxuICAgIGNvbmZpcm1SZW1vdmVBbGxGaWxlczogXCJFc3RldSBzZWd1ciBxdWUgdm9sZXUgZWxpbWluYXIgdG90cyBlbHMgZml0eGVycz9cIixcbiAgICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwiVMOtdG9sIGRlIGxhIHByZWd1bnRhXCIsXG4gICAgbW9kYWxDYW5jZWxCdXR0b25UZXh0OiBcIkNhbmNlbMK3bGFyXCIsXG4gICAgbW9kYWxBcHBseUJ1dHRvblRleHQ6IFwiQXBsaWNhclwiLFxuICAgIGZpbHRlclN0cmluZ1BsYWNlaG9sZGVyOiBcIkVzY3Jpdml1IHBlciBjZXJjYXIuLi5cIixcbiAgICBlbXB0eU1lc3NhZ2U6IFwiTm8gaGkgaGEgZGFkZXMgcGVyIG1vc3RyYXJcIixcbiAgICBub0VudHJpZXNUZXh0OiBcIkVuY2FyYSBubyBoaSBoYSBlbnRyYWRlcy5cXG5GZXUgY2xpYyBhbCBib3TDsyBzZWfDvGVudCBwZXIgYWZlZ2lyIHVuYSBlbnRyYWRhIG5vdmEuXCIsXG4gICAgbm9FbnRyaWVzUmVhZG9ubHlUZXh0OiBcIk5vIGhpIGhhIGVudHJhZGVzLlwiLFxuICAgIG1vcmU6IFwiTcOpc1wiLFxuICAgIHRhZ2JveERvbmVCdXR0b25DYXB0aW9uOiBcIkQnQUNPUkRcIixcbiAgICBzZWxlY3RUb1JhbmtFbXB0eVJhbmtlZEFyZWFUZXh0OiBcIlRvdGVzIGxlcyBvcGNpb25zIGVzdGFuIGNsYXNzaWZpY2FkZXNcIixcbiAgICBzZWxlY3RUb1JhbmtFbXB0eVVucmFua2VkQXJlYVRleHQ6IFwiQXJyb3NzZWd1ZXUgaSBkZWl4ZXUgYW5hciBsZXMgb3BjaW9ucyBhcXXDrSBwZXIgY2xhc3NpZmljYXItbGVzXCJcbn07XG5zdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3VydmV5TG9jYWxpemF0aW9uXCJdLmxvY2FsZXNbXCJjYVwiXSA9IGNhdGFsYW5TdXJ2ZXlTdHJpbmdzO1xuc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN1cnZleUxvY2FsaXphdGlvblwiXS5sb2NhbGVOYW1lc1tcImNhXCJdID0gXCJjYXRhbMOgXCI7XG4vLyBUaGUgZm9sbG93aW5nIHN0cmluZ3MgaGF2ZSBiZWVuIHRyYW5zbGF0ZWQgYnkgYSBtYWNoaW5lIHRyYW5zbGF0aW9uIHNlcnZpY2Vcbi8vIFJlbW92ZSB0aG9zZSBzdHJpbmdzIHRoYXQgeW91IGhhdmUgY29ycmVjdGVkIG1hbnVhbGx5XG4vLyBwcmV2aWV3VGV4dDogXCJQcmV2aWV3XCIgPT4gXCJQcmVlc3RyZW5hXCJcbi8vIGVkaXRUZXh0OiBcIkVkaXRcIiA9PiBcIkVkaXRhclwiXG4vLyBzdGFydFN1cnZleVRleHQ6IFwiU3RhcnRcIiA9PiBcIkNvbWVuw6dhclwiXG4vLyBub25lSXRlbVRleHQ6IFwiTm9uZVwiID0+IFwiQ2FwXCJcbi8vIHNlbGVjdEFsbEl0ZW1UZXh0OiBcIlNlbGVjdCBBbGxcIiA9PiBcIlNlbGVjY2lvbmEtaG8gdG90XCJcbi8vIGluZGV4VGV4dDogXCJ7MH0gb2YgezF9XCIgPT4gXCJ7MH0gZGUgezF9XCJcbi8vIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCJ7MH0gb2YgezF9XCIgPT4gXCJ7MH0gZGUgezF9XCJcbi8vIHBhbmVsRHluYW1pY1RhYlRleHRGb3JtYXQ6IFwiUGFuZWwge3BhbmVsSW5kZXh9XCIgPT4gXCJQYW5lbGwge3BhbmVsSW5kZXh9XCJcbi8vIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCJBbnN3ZXJlZCB7MH0vezF9IHF1ZXN0aW9uc1wiID0+IFwiUmVzcG9zdGVzIHswfS97MX0gcHJlZ3VudGVzXCJcbi8vIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6IFwiT3VyIHJlY29yZHMgc2hvdyB0aGF0IHlvdSBoYXZlIGFscmVhZHkgY29tcGxldGVkIHRoaXMgc3VydmV5LlwiID0+IFwiRWxzIG5vc3RyZXMgcmVnaXN0cmVzIG1vc3RyZW4gcXVlIGphIGhldSBjb21wbGV0YXQgYXF1ZXN0YSBlbnF1ZXN0YS5cIlxuLy8gcmF0aW5nT3B0aW9uc0NhcHRpb246IFwiU2VsZWN0Li4uXCIgPT4gXCJTZWxlY2Npb25hci4uLlwiXG4vLyB2YWx1ZTogXCJ2YWx1ZVwiID0+IFwidmFsb3JcIlxuLy8gcmVxdWlyZWRFcnJvckluUGFuZWw6IFwiUmVzcG9uc2UgcmVxdWlyZWQ6IGFuc3dlciBhdCBsZWFzdCBvbmUgcXVlc3Rpb24uXCIgPT4gXCJSZXNwb3N0YSBuZWNlc3PDoHJpYTogcmVzcG9uZHJlIGFsbWVueXMgdW5hIHByZWd1bnRhLlwiXG4vLyBtaW5FcnJvcjogXCJUaGUgdmFsdWUgc2hvdWxkIG5vdCBiZSBsZXNzIHRoYW4gezB9XCIgPT4gXCJFbCB2YWxvciBubyBoYSBkZSBzZXIgaW5mZXJpb3IgYSB7MH1cIlxuLy8gbWF4RXJyb3I6IFwiVGhlIHZhbHVlIHNob3VsZCBub3QgYmUgZ3JlYXRlciB0aGFuIHswfVwiID0+IFwiRWwgdmFsb3Igbm8gaGEgZGUgc2VyIHN1cGVyaW9yIGEgezB9XCJcbi8vIGludmFsaWRFeHByZXNzaW9uOiBcIlRoZSBleHByZXNzaW9uOiB7MH0gc2hvdWxkIHJldHVybiAndHJ1ZScuXCIgPT4gXCJMJ2V4cHJlc3Npw7M6IHswfSBoYSBkZSB0b3JuYXIgJ3Zlcml0YWJsZScuXCJcbi8vIGxvYWRpbmdGaWxlOiBcIkxvYWRpbmcuLi5cIiA9PiBcIkPDoHJyZWdhLi4uXCJcbi8vIGNob29zZUZpbGU6IFwiQ2hvb3NlIGZpbGUocykuLi5cIiA9PiBcIlRyaWV1IGZpdHhlcihzKS4uLlwiXG4vLyBub0ZpbGVDaG9zZW46IFwiTm8gZmlsZSBjaG9zZW5cIiA9PiBcIk5vIHMnaGEgdHJpYXQgY2FwIGZpdHhlclwiXG4vLyBmaWxlRHJhZ0FyZWFQbGFjZWhvbGRlcjogXCJEcmFnIGFuZCBkcm9wIGEgZmlsZSBoZXJlIG9yIGNsaWNrIHRoZSBidXR0b24gYmVsb3cgYW5kIGNob29zZSBhIGZpbGUgdG8gdXBsb2FkLlwiID0+IFwiQXJyb3NzZWd1ZXUgaSBkZWl4ZXUgYW5hciB1biBmaXR4ZXIgYXF1w60gbyBmZXUgY2xpYyBhbCBib3TDsyBzZWfDvGVudCBpIHRyaWV1IHVuIGZpdHhlciBwZXIgY2FycmVnYXIuXCJcbi8vIGNvbmZpcm1EZWxldGU6IFwiRG8geW91IHdhbnQgdG8gZGVsZXRlIHRoZSByZWNvcmQ/XCIgPT4gXCJWb2xzIGVsaW1pbmFyIGVsIHJlZ2lzdHJlP1wiXG4vLyBrZXlEdXBsaWNhdGlvbkVycm9yOiBcIlRoaXMgdmFsdWUgc2hvdWxkIGJlIHVuaXF1ZS5cIiA9PiBcIkFxdWVzdCB2YWxvciBoYSBkZSBzZXIgw7puaWMuXCJcbi8vIGFkZENvbHVtbjogXCJBZGQgQ29sdW1uXCIgPT4gXCJBZmVnZWl4IHVuYSBjb2x1bW5hXCJcbi8vIGVtcHR5Um93c1RleHQ6IFwiVGhlcmUgYXJlIG5vIHJvd3MuXCIgPT4gXCJObyBoaSBoYSBmaWxlcy5cIlxuLy8gYWRkUGFuZWw6IFwiQWRkIG5ld1wiID0+IFwiQWZlZ2VpeCB1biBub3VcIlxuLy8gcmVtb3ZlUGFuZWw6IFwiUmVtb3ZlXCIgPT4gXCJUcmV1cmVcIlxuLy8gY2hvaWNlc19JdGVtOiBcIml0ZW1cIiA9PiBcIsOtdGVtXCJcbi8vIG11bHRpcGxldGV4dF9pdGVtbmFtZTogXCJ0ZXh0XCIgPT4gXCJTTVNcIlxuLy8gc2F2aW5nRGF0YTogXCJUaGUgcmVzdWx0cyBhcmUgYmVpbmcgc2F2ZWQgb24gdGhlIHNlcnZlci4uLlwiID0+IFwiRWxzIHJlc3VsdGF0cyBzJ2VzdGFuIGd1YXJkYW50IGFsIHNlcnZpZG9yLi4uXCJcbi8vIHNhdmluZ0RhdGFFcnJvcjogXCJBbiBlcnJvciBvY2N1cnJlZCBhbmQgd2UgY291bGQgbm90IHNhdmUgdGhlIHJlc3VsdHMuXCIgPT4gXCJTJ2hhIHByb2R1w690IHVuIGVycm9yIGkgbm8gaGVtIHBvZ3V0IGd1YXJkYXIgZWxzIHJlc3VsdGF0cy5cIlxuLy8gc2F2aW5nRGF0YVN1Y2Nlc3M6IFwiVGhlIHJlc3VsdHMgd2VyZSBzYXZlZCBzdWNjZXNzZnVsbHkhXCIgPT4gXCJFbHMgcmVzdWx0YXRzIGVzIHZhbiBzYWx2YXIgYW1iIMOoeGl0IVwiXG4vLyBzYXZlQWdhaW5CdXR0b246IFwiVHJ5IGFnYWluXCIgPT4gXCJQcm92YSB1bmEgYWx0cmEgdmVnYWRhXCJcbi8vIHRpbWVyTWluOiBcIm1pblwiID0+IFwibWluXCJcbi8vIHRpbWVyU2VjOiBcInNlY1wiID0+IFwiU2VnXCJcbi8vIHRpbWVyU3BlbnRBbGw6IFwiWW91IGhhdmUgc3BlbnQgezB9IG9uIHRoaXMgcGFnZSBhbmQgezF9IGluIHRvdGFsLlwiID0+IFwiSGV1IHBhc3NhdCB7MH0gZW4gYXF1ZXN0YSBww6BnaW5hIGkgezF9IGVuIHRvdGFsLlwiXG4vLyB0aW1lclNwZW50UGFnZTogXCJZb3UgaGF2ZSBzcGVudCB7MH0gb24gdGhpcyBwYWdlLlwiID0+IFwiSGFzIHBhc3NhdCB7MH0gZW4gYXF1ZXN0YSBww6BnaW5hLlwiXG4vLyB0aW1lclNwZW50U3VydmV5OiBcIllvdSBoYXZlIHNwZW50IHswfSBpbiB0b3RhbC5cIiA9PiBcIkhhcyBnYXN0YXQgezB9IGVuIHRvdGFsLlwiXG4vLyB0aW1lckxpbWl0QWxsOiBcIllvdSBoYXZlIHNwZW50IHswfSBvZiB7MX0gb24gdGhpcyBwYWdlIGFuZCB7Mn0gb2YgezN9IGluIHRvdGFsLlwiID0+IFwiSGV1IHBhc3NhdCB7MH0gZGUgezF9IGVuIGFxdWVzdGEgcMOgZ2luYSBpIHsyfSBkZSB7M30gZW4gdG90YWwuXCJcbi8vIHRpbWVyTGltaXRQYWdlOiBcIllvdSBoYXZlIHNwZW50IHswfSBvZiB7MX0gb24gdGhpcyBwYWdlLlwiID0+IFwiSGFzIHBhc3NhdCB7MH0gZGUgezF9IGVuIGFxdWVzdGEgcMOgZ2luYS5cIlxuLy8gdGltZXJMaW1pdFN1cnZleTogXCJZb3UgaGF2ZSBzcGVudCB7MH0gb2YgezF9IGluIHRvdGFsLlwiID0+IFwiSGFzIGdhc3RhdCB7MH0gZCd7MX0gZW4gdG90YWwuXCJcbi8vIGNsZWFyQ2FwdGlvbjogXCJDbGVhclwiID0+IFwiQ2xhclwiXG4vLyBzaWduYXR1cmVQbGFjZUhvbGRlcjogXCJTaWduIGhlcmVcIiA9PiBcIkluc2NyaXUtdGUgYXF1w61cIlxuLy8gY2hvb3NlRmlsZUNhcHRpb246IFwiQ2hvb3NlIGZpbGVcIiA9PiBcIlRyaWEgdW4gZml0eGVyXCJcbi8vIHJlbW92ZUZpbGVDYXB0aW9uOiBcIlJlbW92ZSB0aGlzIGZpbGVcIiA9PiBcIlN1cHJpbWVpeCBhcXVlc3QgZml0eGVyXCJcbi8vIGJvb2xlYW5DaGVja2VkTGFiZWw6IFwiWWVzXCIgPT4gXCJTw61cIlxuLy8gYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcIk5vXCIgPT4gXCJOb1wiXG4vLyBjb25maXJtUmVtb3ZlRmlsZTogXCJBcmUgeW91IHN1cmUgdGhhdCB5b3Ugd2FudCB0byByZW1vdmUgdGhpcyBmaWxlOiB7MH0/XCIgPT4gXCJFc3RldSBzZWd1ciBxdWUgdm9sZXUgZWxpbWluYXIgYXF1ZXN0IGZpdHhlcjogezB9P1wiXG4vLyBjb25maXJtUmVtb3ZlQWxsRmlsZXM6IFwiQXJlIHlvdSBzdXJlIHRoYXQgeW91IHdhbnQgdG8gcmVtb3ZlIGFsbCBmaWxlcz9cIiA9PiBcIkVzdGV1IHNlZ3VyIHF1ZSB2b2xldSBlbGltaW5hciB0b3RzIGVscyBmaXR4ZXJzP1wiXG4vLyBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwiUXVlc3Rpb24gVGl0bGVcIiA9PiBcIlTDrXRvbCBkZSBsYSBwcmVndW50YVwiXG4vLyBtb2RhbENhbmNlbEJ1dHRvblRleHQ6IFwiQ2FuY2VsXCIgPT4gXCJDYW5jZWzCt2xhclwiXG4vLyBtb2RhbEFwcGx5QnV0dG9uVGV4dDogXCJBcHBseVwiID0+IFwiQXBsaWNhclwiXG4vLyBmaWx0ZXJTdHJpbmdQbGFjZWhvbGRlcjogXCJUeXBlIHRvIHNlYXJjaC4uLlwiID0+IFwiRXNjcml2aXUgcGVyIGNlcmNhci4uLlwiXG4vLyBlbXB0eU1lc3NhZ2U6IFwiTm8gZGF0YSB0byBkaXNwbGF5XCIgPT4gXCJObyBoaSBoYSBkYWRlcyBwZXIgbW9zdHJhclwiXG4vLyBub0VudHJpZXNUZXh0OiBcIlRoZXJlIGFyZSBubyBlbnRyaWVzIHlldC5cXG5DbGljayB0aGUgYnV0dG9uIGJlbG93IHRvIGFkZCBhIG5ldyBlbnRyeS5cIiA9PiBcIkVuY2FyYSBubyBoaSBoYSBlbnRyYWRlcy5cXG5GZXUgY2xpYyBhbCBib3TDsyBzZWfDvGVudCBwZXIgYWZlZ2lyIHVuYSBlbnRyYWRhIG5vdmEuXCJcbi8vIG5vRW50cmllc1JlYWRvbmx5VGV4dDogXCJUaGVyZSBhcmUgbm8gZW50cmllcy5cIiA9PiBcIk5vIGhpIGhhIGVudHJhZGVzLlwiXG4vLyBtb3JlOiBcIk1vcmVcIiA9PiBcIk3DqXNcIlxuLy8gdGFnYm94RG9uZUJ1dHRvbkNhcHRpb246IFwiT0tcIiA9PiBcIkQnQUNPUkRcIlxuLy8gc2VsZWN0VG9SYW5rRW1wdHlSYW5rZWRBcmVhVGV4dDogXCJBbGwgY2hvaWNlcyBhcmUgcmFua2VkXCIgPT4gXCJUb3RlcyBsZXMgb3BjaW9ucyBlc3RhbiBjbGFzc2lmaWNhZGVzXCJcbi8vIHNlbGVjdFRvUmFua0VtcHR5VW5yYW5rZWRBcmVhVGV4dDogXCJEcmFnIGFuZCBkcm9wIGNob2ljZXMgaGVyZSB0byByYW5rIHRoZW1cIiA9PiBcIkFycm9zc2VndWV1IGkgZGVpeGV1IGFuYXIgbGVzIG9wY2lvbnMgYXF1w60gcGVyIGNsYXNzaWZpY2FyLWxlc1wiLy8gdGFrZVBob3RvQ2FwdGlvbjogXCJUYWtlIFBob3RvXCIgPT4gXCJGZXIgZm90b1wiXG4vLyBjYW1lcmFQbGFjZUhvbGRlcjogXCJDbGljayB0aGUgYnV0dG9uIGJlbG93IHRvIHRha2UgYSBwaG90byB1c2luZyB0aGUgY2FtZXJhLlwiID0+IFwiRmV1IGNsaWMgYWwgYm90w7Mgc2Vnw7xlbnQgcGVyIGZlciB1bmEgZm90byBhbWIgbGEgY8OgbWVyYS5cIlxuLy8gZmlsZUNhbWVyYURyYWdBcmVhUGxhY2VIb2xkZXI6IFwiRHJhZyBhbmQgZHJvcCBvciBzZWxlY3QgYSBmaWxlIHRvIHVwbG9hZCBvciB0YWtlIGEgcGhvdG8gdXNpbmcgdGhlIGNhbWVyYS5cIiA9PiBcIkFycm9zc2VndWV1IGkgZGVpeGV1IGFuYXIgbyBzZWxlY2Npb25ldSB1biBmaXR4ZXIgcGVyIHBlbmphci1sbyBvIGZlci1uZSB1bmEgZm90byBhbWIgbGEgY8OgbWVyYS5cIlxuLy8gcmVwbGFjZUZpbGVDYXB0aW9uOiBcIlJlcGxhY2UgZmlsZVwiID0+IFwiU3Vic3RpdHVlaXggZWwgZml0eGVyXCJcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9sb2NhbGl6YXRpb24vY3JvYXRpYW4udHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL2xvY2FsaXphdGlvbi9jcm9hdGlhbi50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogY3JvYXRpYW5TdHJpbmdzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImNyb2F0aWFuU3RyaW5nc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyb2F0aWFuU3RyaW5nczsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHN1cnZleS1jb3JlICovIFwiLi9zcmMvZW50cmllcy9jb3JlLnRzXCIpO1xuXG52YXIgY3JvYXRpYW5TdHJpbmdzID0ge1xuICAgIHBhZ2VQcmV2VGV4dDogXCJQcmV0aG9kbmlcIixcbiAgICBwYWdlTmV4dFRleHQ6IFwiU2xqZWRlxIdpXCIsXG4gICAgY29tcGxldGVUZXh0OiBcIktvbXBsZXRhblwiLFxuICAgIHByZXZpZXdUZXh0OiBcIlByZWdsZWRcIixcbiAgICBlZGl0VGV4dDogXCJVcmXEkWl2YW5qZVwiLFxuICAgIHN0YXJ0U3VydmV5VGV4dDogXCJQb8SNZXRha1wiLFxuICAgIG90aGVySXRlbVRleHQ6IFwiT3N0YWxpIChvcGlzKVwiLFxuICAgIG5vbmVJdGVtVGV4dDogXCJOaXRrb1wiLFxuICAgIHNlbGVjdEFsbEl0ZW1UZXh0OiBcIlNlbGVjdCBBbGxcIixcbiAgICBwcm9ncmVzc1RleHQ6IFwiU3RyYW5pY2EgezB9IG9kIHsxfVwiLFxuICAgIGluZGV4VGV4dDogXCJ7MH0gezF9XCIsXG4gICAgcGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0OiBcIlphcGlzYSB7MH0gb2QgezF9XCIsXG4gICAgcGFuZWxEeW5hbWljVGFiVGV4dEZvcm1hdDogXCJQbG/EjWEge3BhbmVsSW5kZXh9XCIsXG4gICAgcXVlc3Rpb25zUHJvZ3Jlc3NUZXh0OiBcIk9kZ292b3JpbyBuYSB7MH0vezF9IHBpdGFuamFcIixcbiAgICBlbXB0eVN1cnZleTogXCJVIGFua2V0aSBuZW1hIHZpZGxqaXZlIHN0cmFuaWNlIGlsaSBwaXRhbmphLlwiLFxuICAgIGNvbXBsZXRpbmdTdXJ2ZXk6IFwiSHZhbGEgdmFtIMWhdG8gc3RlIHphdnLFoWlsaSBhbmtldHUhXCIsXG4gICAgY29tcGxldGluZ1N1cnZleUJlZm9yZTogXCJOYcWhaSB6YXBpc2kgcG9rYXp1anUgZGEgc3RlIHZlxIcgemF2csWhaWxpIG92dSBhbmtldHUuXCIsXG4gICAgbG9hZGluZ1N1cnZleTogXCJBbmtldGEgbyB1xI1pdGF2YW5qZS4uLlwiLFxuICAgIHBsYWNlaG9sZGVyOiBcIk9kYWJlcml0ZS4uLlwiLFxuICAgIHJhdGluZ09wdGlvbnNDYXB0aW9uOiBcIk9kYWJpcmF0aS4uLlwiLFxuICAgIHZhbHVlOiBcInZyaWplZG5vc3RcIixcbiAgICByZXF1aXJlZEVycm9yOiBcIk1vbGltIHZhcyBvZGdvdm9yaXRlIG5hIHBpdGFuamUuXCIsXG4gICAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwiTW9saW0gdmFzIG9kZ292b3JpdGUgbmEgYmFyZW0gamVkbm8gcGl0YW5qZS5cIixcbiAgICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIk9kZ292b3JpdGUgbmEgcGl0YW5qYSB1IHN2aW0gcmVkb3ZpbWEuXCIsXG4gICAgbnVtZXJpY0Vycm9yOiBcIlZyaWplZG5vc3QgYmkgdHJlYmFsYSBiaXRpIGJyb2rEjWFuYS5cIixcbiAgICBtaW5FcnJvcjogXCJWcmlqZWRub3N0IG5lIHNtaWplIGJpdGkgbWFuamEgb2QgezB9XCIsXG4gICAgbWF4RXJyb3I6IFwiVnJpamVkbm9zdCBuZSBzbWlqZSBiaXRpIHZlxIdhIG9kIHswfVwiLFxuICAgIHRleHRNaW5MZW5ndGg6IFwiVW5lc2l0ZSBuYWptYW5qZSB7MH0gem5hayhvdmEpLlwiLFxuICAgIHRleHRNYXhMZW5ndGg6IFwiVW5lc2l0ZSBtYW5qZSBvZCB7MH0gem5hayhvdmEpLlwiLFxuICAgIHRleHRNaW5NYXhMZW5ndGg6IFwiVW5lc2l0ZSB2acWhZSBvZCB7MH0gaSBtYW5qZSBvZCB7MX0gem5ha292YS5cIixcbiAgICBtaW5Sb3dDb3VudEVycm9yOiBcIk1vbGltbyBpc3B1bml0ZSBuYWptYW5qZSB7MH0gcmVkYWthLlwiLFxuICAgIG1pblNlbGVjdEVycm9yOiBcIk9kYWJlcml0ZSBiYXJlbSB7MH0gdmFyaWphbnRlLlwiLFxuICAgIG1heFNlbGVjdEVycm9yOiBcIk9kYWJlcml0ZSBuZSB2acWhZSBvZCB7MH0gdmFyaWphbnRpLlwiLFxuICAgIG51bWVyaWNNaW5NYXg6IFwiJ3swfSdiaSB0cmViYW8gYml0aSBqZWRuYWsgaWxpIHZpxaFlIG9kIHsxfSBpIGplZG5hayBpbGkgbWFuamkgb2QgezJ9LlwiLFxuICAgIG51bWVyaWNNaW46IFwiJ3swfScgYmkgdHJlYmFvIGJpdGkgamVkbmFrIGlsaSB2acWhZSBvZCB7MX0uXCIsXG4gICAgbnVtZXJpY01heDogXCInezB9JyBiaSB0cmViYW8gYml0aSBqZWRuYWsgaWxpIG1hbmppIG9kIHsxfVwiLFxuICAgIGludmFsaWRFbWFpbDogXCJVbmVzaXRlIHZhbGphbnUgZS1tYWlsIGFkcmVzdS5cIixcbiAgICBpbnZhbGlkRXhwcmVzc2lvbjogXCJJenJhejogezB9IHRyZWJhIHZyYXRpdGkgJ3RydWUnLlwiLFxuICAgIHVybFJlcXVlc3RFcnJvcjogXCJaYWh0amV2IHZyYXRpbyBwb2dyZcWha3UgJ3swfScuIHsxfVwiLFxuICAgIHVybEdldENob2ljZXNFcnJvcjogXCJaYWh0amV2IGplIHZyYXRpbyBwcmF6bmUgcG9kYXRrZSBpbGkgamUgJ3BhdGgnIHN2b2pzdHZvIG5ldG/EjW5hLlwiLFxuICAgIGV4Y2VlZE1heFNpemU6IFwiVmVsacSNaW5hIGRhdG90ZWtlIG5lIHNtaWplIHByZWxheml0aSB7MH0uXCIsXG4gICAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIlVuZXNpdGUgZHJ1Z3UgdnJpamVkbm9zdC5cIixcbiAgICB1cGxvYWRpbmdGaWxlOiBcIlZhxaFhIGRhdG90ZWthIHNlIHByZW5vc2kuIFByacSNZWthanRlIG5la29saWtvIHNla3VuZGkgaSBwb2t1xaFhanRlIHBvbm92bm8uXCIsXG4gICAgbG9hZGluZ0ZpbGU6IFwiVcSNaXRhdmFuamUuLi5cIixcbiAgICBjaG9vc2VGaWxlOiBcIk9kYWJlcml0ZSBkYXRvdGVrdS4uLlwiLFxuICAgIG5vRmlsZUNob3NlbjogXCJOaWplIG9kYWJyYW5hIGRhdG90ZWthXCIsXG4gICAgZmlsZURyYWdBcmVhUGxhY2Vob2xkZXI6IFwiUG92dWNpdGUgaSBpc3B1c3RpdGUgZGF0b3Rla3Ugb3ZkamUgaWxpIGtsaWtuaXRlIGRvbmppIGd1bWIgaSBvZGFiZXJpdGUgZGF0b3Rla3Uga29qdSDFvmVsaXRlIHByZW5pamV0aS5cIixcbiAgICBjb25maXJtRGVsZXRlOiBcIsW9ZWxpdGUgbGkgaXpicmlzYXRpIHphcGlzP1wiLFxuICAgIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwiVGEgYmkgdnJpamVkbm9zdCB0cmViYWxhIGJpdGkgamVkaW5zdHZlbmEuXCIsXG4gICAgYWRkQ29sdW1uOiBcIkRvZGF2YW5qZSBzdHVwY2FcIixcbiAgICBhZGRSb3c6IFwiRG9kYXZhbmplIHJlZGFrYVwiLFxuICAgIHJlbW92ZVJvdzogXCJVa2xvbml0aVwiLFxuICAgIGVtcHR5Um93c1RleHQ6IFwiTmVtYSByZWRvdmEuXCIsXG4gICAgYWRkUGFuZWw6IFwiRG9kYXZhbmplIG5vdmloXCIsXG4gICAgcmVtb3ZlUGFuZWw6IFwiVWtsb25pdGlcIixcbiAgICBjaG9pY2VzX0l0ZW06IFwic3Rhdmt1XCIsXG4gICAgbWF0cml4X2NvbHVtbjogXCJTdHVwY2FcIixcbiAgICBtYXRyaXhfcm93OiBcIlJlZGFrXCIsXG4gICAgbXVsdGlwbGV0ZXh0X2l0ZW1uYW1lOiBcIlRla3N0dWFsbmEgcG9ydWthXCIsXG4gICAgc2F2aW5nRGF0YTogXCJSZXp1bHRhdGkgc2Ugc3ByZW1hanUgbmEgcG9zbHXFvml0ZWxqdS4uLlwiLFxuICAgIHNhdmluZ0RhdGFFcnJvcjogXCJEb8WhbG8gamUgZG8gcG9ncmXFoWtlIGkgbmlzbW8gbW9nbGkgc3ByZW1pdGkgcmV6dWx0YXRlLlwiLFxuICAgIHNhdmluZ0RhdGFTdWNjZXNzOiBcIlJlenVsdGF0aSBzdSB1c3BqZcWhbm8gc3ByZW1samVuaSFcIixcbiAgICBzYXZlQWdhaW5CdXR0b246IFwiUG9rdcWhYWogcG9ub3ZvXCIsXG4gICAgdGltZXJNaW46IFwibWluXCIsXG4gICAgdGltZXJTZWM6IFwic2VjXCIsXG4gICAgdGltZXJTcGVudEFsbDogXCJWaSBzdGUgcHJvdmVsaSB7MH0gbmEgb3ZvaiBzdHJhbmljaSBpIHsxfSB1a3Vwbm8uXCIsXG4gICAgdGltZXJTcGVudFBhZ2U6IFwiUG90cm/FoWlsaSBzdGUgezB9IG5hIG92dSBzdHJhbmljdS5cIixcbiAgICB0aW1lclNwZW50U3VydmV5OiBcIllvdSBoYXZlIHNwZW50IHswfSBpbiB0b3RhbC4gezB9LlwiLFxuICAgIHRpbWVyTGltaXRBbGw6IFwiVmkgc3RlIHByb3ZlbGkgezB9IG9kIHsxfSBuYSBvdm9qIHN0cmFuaWNpIGkgezJ9IG9kIHszfSB1a3Vwbm8uXCIsXG4gICAgdGltZXJMaW1pdFBhZ2U6IFwiUG90cm/FoWlvIHNpIHswfSBvZCB7MX0gbmEgb3ZvaiBzdHJhbmljaS5cIixcbiAgICB0aW1lckxpbWl0U3VydmV5OiBcIlVrdXBubyBzdGUgcG90cm/FoWlsaSB7MH0gb2QgezF9LlwiLFxuICAgIGNsZWFyQ2FwdGlvbjogXCJPxI1pc3RpdGlcIixcbiAgICBzaWduYXR1cmVQbGFjZUhvbGRlcjogXCJQb3RwacWhaSBvdmRqZVwiLFxuICAgIGNob29zZUZpbGVDYXB0aW9uOiBcIk9kYWJlcml0ZSBkYXRvdGVrdVwiLFxuICAgIHRha2VQaG90b0NhcHRpb246IFwiU25pbWkgZm90b2dyYWZpanVcIixcbiAgICBjYW1lcmFQbGFjZUhvbGRlcjogXCJLbGlrbml0ZSBkb25qaSBndW1iIGRhIGJpc3RlIHNuaW1pbGkgZm90b2dyYWZpanUgcG9tb8SHdSBrYW1lcmUuXCIsXG4gICAgZmlsZUNhbWVyYURyYWdBcmVhUGxhY2VIb2xkZXI6IFwiUG92dWNpdGUgaSBpc3B1c3RpdGUgaWxpIG9kYWJlcml0ZSBkYXRvdGVrdSB6YSBwcmlqZW5vcyBpbGkgc25pbWFuamUgZm90b2dyYWZpamUgcG9tb8SHdSBrYW1lcmUuXCIsXG4gICAgcmVwbGFjZUZpbGVDYXB0aW9uOiBcIlphbWlqZW5pIGRhdG90ZWt1XCIsXG4gICAgcmVtb3ZlRmlsZUNhcHRpb246IFwiVWtsb25pdGUgb3Z1IGRhdG90ZWt1XCIsXG4gICAgYm9vbGVhbkNoZWNrZWRMYWJlbDogXCJEYVwiLFxuICAgIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCJOZVwiLFxuICAgIGNvbmZpcm1SZW1vdmVGaWxlOiBcIkplc3RlIGxpIHNpZ3VybmkgZGEgxb5lbGl0ZSB1a2xvbml0aSBvdnUgZGF0b3Rla3U6IHswfT9cIixcbiAgICBjb25maXJtUmVtb3ZlQWxsRmlsZXM6IFwiSmVzdGUgbGkgc2lndXJuaSBkYSDFvmVsaXRlIHVrbG9uaXRpIHN2ZSBkYXRvdGVrZT9cIixcbiAgICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwiTmFzbG92IHBpdGFuamFcIixcbiAgICBtb2RhbENhbmNlbEJ1dHRvblRleHQ6IFwiT3RrYXphdGlcIixcbiAgICBtb2RhbEFwcGx5QnV0dG9uVGV4dDogXCJQcmltaWplbml0aVwiLFxuICAgIGZpbHRlclN0cmluZ1BsYWNlaG9sZGVyOiBcIlVwacWhaXRlIHphIHByZXRyYcW+aXZhbmplLi4uXCIsXG4gICAgZW1wdHlNZXNzYWdlOiBcIk5lbWEgcG9kYXRha2EgemEgcHJpa2F6XCIsXG4gICAgbm9FbnRyaWVzVGV4dDogXCJKb8WhIG5lbWEgdW5vc2EuXFxuS2xpa25pdGUgZG9uamkgZ3VtYiBkYSBiaXN0ZSBkb2RhbGkgbm92aSB1bm9zLlwiLFxuICAgIG5vRW50cmllc1JlYWRvbmx5VGV4dDogXCJOZW1hIHVub3NhLlwiLFxuICAgIG1vcmU6IFwiVmnFoWVcIixcbiAgICB0YWdib3hEb25lQnV0dG9uQ2FwdGlvbjogXCJPS1wiLFxuICAgIHNlbGVjdFRvUmFua0VtcHR5UmFua2VkQXJlYVRleHQ6IFwiU3ZpIGl6Ym9yaSBzdSByYW5naXJhbmlcIixcbiAgICBzZWxlY3RUb1JhbmtFbXB0eVVucmFua2VkQXJlYVRleHQ6IFwiT3ZkamUgcG92dWNpdGUgaSBpc3B1c3RpdGUgb2RhYmlyZSBkYSBiaXN0ZSBpaCByYW5naXJhbGlcIlxufTtcbnN1cnZleV9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdXJ2ZXlMb2NhbGl6YXRpb25cIl0ubG9jYWxlc1tcImhyXCJdID0gY3JvYXRpYW5TdHJpbmdzO1xuc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN1cnZleUxvY2FsaXphdGlvblwiXS5sb2NhbGVOYW1lc1tcImhyXCJdID0gXCJocnZhdHNraVwiO1xuLy8gVGhlIGZvbGxvd2luZyBzdHJpbmdzIGhhdmUgYmVlbiB0cmFuc2xhdGVkIGJ5IGEgbWFjaGluZSB0cmFuc2xhdGlvbiBzZXJ2aWNlXG4vLyBSZW1vdmUgdGhvc2Ugc3RyaW5ncyB0aGF0IHlvdSBoYXZlIGNvcnJlY3RlZCBtYW51YWxseVxuLy8gaW5kZXhUZXh0OiBcInswfSBvZiB7MX1cIiA9PiBcInswfSB7MX1cIlxuLy8gcGFuZWxEeW5hbWljVGFiVGV4dEZvcm1hdDogXCJQYW5lbCB7cGFuZWxJbmRleH1cIiA9PiBcIlBsb8SNYSB7cGFuZWxJbmRleH1cIlxuLy8gcmF0aW5nT3B0aW9uc0NhcHRpb246IFwiU2VsZWN0Li4uXCIgPT4gXCJPZGFiaXJhdGkuLi5cIlxuLy8gbWluRXJyb3I6IFwiVGhlIHZhbHVlIHNob3VsZCBub3QgYmUgbGVzcyB0aGFuIHswfVwiID0+IFwiVnJpamVkbm9zdCBuZSBzbWlqZSBiaXRpIG1hbmphIG9kIHswfVwiXG4vLyBtYXhFcnJvcjogXCJUaGUgdmFsdWUgc2hvdWxkIG5vdCBiZSBncmVhdGVyIHRoYW4gezB9XCIgPT4gXCJWcmlqZWRub3N0IG5lIHNtaWplIGJpdGkgdmXEh2Egb2QgezB9XCJcbi8vIGZpbGVEcmFnQXJlYVBsYWNlaG9sZGVyOiBcIkRyYWcgYW5kIGRyb3AgYSBmaWxlIGhlcmUgb3IgY2xpY2sgdGhlIGJ1dHRvbiBiZWxvdyBhbmQgY2hvb3NlIGEgZmlsZSB0byB1cGxvYWQuXCIgPT4gXCJQb3Z1Y2l0ZSBpIGlzcHVzdGl0ZSBkYXRvdGVrdSBvdmRqZSBpbGkga2xpa25pdGUgZG9uamkgZ3VtYiBpIG9kYWJlcml0ZSBkYXRvdGVrdSBrb2p1IMW+ZWxpdGUgcHJlbmlqZXRpLlwiXG4vLyBlbXB0eVJvd3NUZXh0OiBcIlRoZXJlIGFyZSBubyByb3dzLlwiID0+IFwiTmVtYSByZWRvdmEuXCJcbi8vIG11bHRpcGxldGV4dF9pdGVtbmFtZTogXCJ0ZXh0XCIgPT4gXCJUZWtzdHVhbG5hIHBvcnVrYVwiXG4vLyBzaWduYXR1cmVQbGFjZUhvbGRlcjogXCJTaWduIGhlcmVcIiA9PiBcIlBvdHBpxaFpIG92ZGplXCJcbi8vIGZpbHRlclN0cmluZ1BsYWNlaG9sZGVyOiBcIlR5cGUgdG8gc2VhcmNoLi4uXCIgPT4gXCJVcGnFoWl0ZSB6YSBwcmV0cmHFvml2YW5qZS4uLlwiXG4vLyBlbXB0eU1lc3NhZ2U6IFwiTm8gZGF0YSB0byBkaXNwbGF5XCIgPT4gXCJOZW1hIHBvZGF0YWthIHphIHByaWthelwiXG4vLyBub0VudHJpZXNUZXh0OiBcIlRoZXJlIGFyZSBubyBlbnRyaWVzIHlldC5cXG5DbGljayB0aGUgYnV0dG9uIGJlbG93IHRvIGFkZCBhIG5ldyBlbnRyeS5cIiA9PiBcIkpvxaEgbmVtYSB1bm9zYS5cXG5LbGlrbml0ZSBkb25qaSBndW1iIGRhIGJpc3RlIGRvZGFsaSBub3ZpIHVub3MuXCJcbi8vIG5vRW50cmllc1JlYWRvbmx5VGV4dDogXCJUaGVyZSBhcmUgbm8gZW50cmllcy5cIiA9PiBcIk5lbWEgdW5vc2EuXCJcbi8vIG1vcmU6IFwiTW9yZVwiID0+IFwiVmnFoWVcIlxuLy8gdGFnYm94RG9uZUJ1dHRvbkNhcHRpb246IFwiT0tcIiA9PiBcIk9LXCJcbi8vIHNlbGVjdFRvUmFua0VtcHR5UmFua2VkQXJlYVRleHQ6IFwiQWxsIGNob2ljZXMgYXJlIHJhbmtlZFwiID0+IFwiU3ZpIGl6Ym9yaSBzdSByYW5naXJhbmlcIlxuLy8gc2VsZWN0VG9SYW5rRW1wdHlVbnJhbmtlZEFyZWFUZXh0OiBcIkRyYWcgYW5kIGRyb3AgY2hvaWNlcyBoZXJlIHRvIHJhbmsgdGhlbVwiID0+IFwiT3ZkamUgcG92dWNpdGUgaSBpc3B1c3RpdGUgb2RhYmlyZSBkYSBiaXN0ZSBpaCByYW5naXJhbGlcIi8vIHRha2VQaG90b0NhcHRpb246IFwiVGFrZSBQaG90b1wiID0+IFwiU25pbWkgZm90b2dyYWZpanVcIlxuLy8gY2FtZXJhUGxhY2VIb2xkZXI6IFwiQ2xpY2sgdGhlIGJ1dHRvbiBiZWxvdyB0byB0YWtlIGEgcGhvdG8gdXNpbmcgdGhlIGNhbWVyYS5cIiA9PiBcIktsaWtuaXRlIGRvbmppIGd1bWIgZGEgYmlzdGUgc25pbWlsaSBmb3RvZ3JhZmlqdSBwb21vxId1IGthbWVyZS5cIlxuLy8gZmlsZUNhbWVyYURyYWdBcmVhUGxhY2VIb2xkZXI6IFwiRHJhZyBhbmQgZHJvcCBvciBzZWxlY3QgYSBmaWxlIHRvIHVwbG9hZCBvciB0YWtlIGEgcGhvdG8gdXNpbmcgdGhlIGNhbWVyYS5cIiA9PiBcIlBvdnVjaXRlIGkgaXNwdXN0aXRlIGlsaSBvZGFiZXJpdGUgZGF0b3Rla3UgemEgcHJpamVub3MgaWxpIHNuaW1hbmplIGZvdG9ncmFmaWplIHBvbW/Eh3Uga2FtZXJlLlwiXG4vLyByZXBsYWNlRmlsZUNhcHRpb246IFwiUmVwbGFjZSBmaWxlXCIgPT4gXCJaYW1pamVuaSBkYXRvdGVrdVwiXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvbG9jYWxpemF0aW9uL2N6ZWNoLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9sb2NhbGl6YXRpb24vY3plY2gudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGN6ZWNoU3VydmV5U3RyaW5ncyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJjemVjaFN1cnZleVN0cmluZ3NcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjemVjaFN1cnZleVN0cmluZ3M7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHN1cnZleV9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBzdXJ2ZXktY29yZSAqLyBcIi4vc3JjL2VudHJpZXMvY29yZS50c1wiKTtcblxudmFyIGN6ZWNoU3VydmV5U3RyaW5ncyA9IHtcbiAgICBwYWdlUHJldlRleHQ6IFwiUMWZZWRjaG96w61cIixcbiAgICBwYWdlTmV4dFRleHQ6IFwiRGFsxaHDrVwiLFxuICAgIGNvbXBsZXRlVGV4dDogXCJEb2tvbsSNaXRcIixcbiAgICBwcmV2aWV3VGV4dDogXCJOw6FobGVkXCIsXG4gICAgZWRpdFRleHQ6IFwiVXByYXZpdFwiLFxuICAgIHN0YXJ0U3VydmV5VGV4dDogXCJaYcSNw610XCIsXG4gICAgb3RoZXJJdGVtVGV4dDogXCJKaW7DoSBvZHBvdsSbxI8gKG5hcGnFoXRlKVwiLFxuICAgIG5vbmVJdGVtVGV4dDogXCLFvcOhZG7DvVwiLFxuICAgIHNlbGVjdEFsbEl0ZW1UZXh0OiBcIlZ5YnJhdCB2xaFlXCIsXG4gICAgcHJvZ3Jlc3NUZXh0OiBcIlN0cmFuYSB7MH0geiB7MX1cIixcbiAgICBpbmRleFRleHQ6IFwiezB9IHogezF9XCIsXG4gICAgcGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0OiBcIlrDoXpuYW0gezB9IHogezF9XCIsXG4gICAgcGFuZWxEeW5hbWljVGFiVGV4dEZvcm1hdDogXCJQYW5lbCB7cGFuZWxJbmRleH1cIixcbiAgICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwiWm9kcG92xJt6ZW7DqSBvdMOhemt5OiB7MH0gLyB7MX1cIixcbiAgICBlbXB0eVN1cnZleTogXCJQcsWvemt1bSBuZW9ic2FodWplIMW+w6FkbsOpIG90w6F6a3kuXCIsXG4gICAgY29tcGxldGluZ1N1cnZleTogXCJExJtrdWplbWUgemEgdnlwbG7Em27DrSBwcsWvemt1bXUhXCIsXG4gICAgY29tcGxldGluZ1N1cnZleUJlZm9yZTogXCJOYcWhZSB6w6F6bmFteSB1a2F6dWrDrSwgxb5lIGpzdGUgdGVudG8gcHLFr3prdW0gamnFviBkb2tvbsSNaWwvYS5cIixcbiAgICBsb2FkaW5nU3VydmV5OiBcIlByb2LDrWjDoSBuYcSNw610w6Fuw60gcHLFr3prdW11Li4uXCIsXG4gICAgcGxhY2Vob2xkZXI6IFwiVnliZXJ0ZS4uLlwiLFxuICAgIHJhdGluZ09wdGlvbnNDYXB0aW9uOiBcIlZ5YnJhdC4uLlwiLFxuICAgIHZhbHVlOiBcImhvZG5vdGFcIixcbiAgICByZXF1aXJlZEVycm9yOiBcIk9kcG92xJt6dGUgcHJvc8OtbSBuYSBvdMOhemt1LlwiLFxuICAgIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcIk9kcG92xJt6dGUgcHJvc8OtbSBhbGVzcG/FiCBqZWRudSBvdMOhemt1LlwiLFxuICAgIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwiT2Rwb3bEm3p0ZSBwcm9zw61tIG5hIHbFoWVjaG55IG90w6F6a3kuXCIsXG4gICAgbnVtZXJpY0Vycm9yOiBcIlYgdG9tdG8gcG9saSBsemUgemFkYXQgcG91emUgxI3DrXNsYS5cIixcbiAgICBtaW5FcnJvcjogXCJIb2Rub3RhIGJ5IG5lbcSbbGEgYsO9dCBtZW7FocOtIG5lxb4gezB9XCIsXG4gICAgbWF4RXJyb3I6IFwiSG9kbm90YSBieSBuZW3Em2xhIGLDvXQgdsSbdMWhw60gbmXFviB7MH1cIixcbiAgICB0ZXh0TWluTGVuZ3RoOiBcIlphZGVqdGUgcHJvc8OtbSBhbGVzcG/FiCB7MH0gem5ha8WvLlwiLFxuICAgIHRleHRNYXhMZW5ndGg6IFwiWmFkZWp0ZSBwcm9zw61tIG3DqW7EmyBuZcW+IHswfSB6bmFrxa8uXCIsXG4gICAgdGV4dE1pbk1heExlbmd0aDogXCJaYWRlanRlIHByb3PDrW0gdsOtY2UgbmXFviB7MH0gYSBtw6luxJsgbmXFviB7MX0gem5ha8WvLlwiLFxuICAgIG1pblJvd0NvdW50RXJyb3I6IFwiVnlwbMWIdGUgcHJvc8OtbSBhbGVzcG/FiCB7MH0gxZnDoWRrxa8uXCIsXG4gICAgbWluU2VsZWN0RXJyb3I6IFwiVnliZXJ0ZSBwcm9zw61tIGFsZXNwb8WIIHswfSB2YXJpYW50eS5cIixcbiAgICBtYXhTZWxlY3RFcnJvcjogXCJOZXZ5YsOtcmVqdGUgcHJvc8OtbSB2w61jZSBuZcW+IHswfSB2YXJpYW50LlwiLFxuICAgIG51bWVyaWNNaW5NYXg6IFwiT2Rwb3bEm8SPICd7MH0nIGJ5IG3Em2xvIGLDvXQgdsSbdMWhw60gbmVibyByb3ZubyB7MX0gYSBtZW7FocOtIG5lYm8gcm92bm8gezJ9XCIsXG4gICAgbnVtZXJpY01pbjogXCJPZHBvdsSbxI8gJ3swfScgYnkgbcSbbG8gYsO9dCB2xJt0xaHDrSBuZWJvIHJvdm5vIHsxfVwiLFxuICAgIG51bWVyaWNNYXg6IFwiT2Rwb3bEm8SPICd7MH0nIGJ5IG3Em2xvIGLDvXQgbWVuxaHDrSBuZWJvIHJvdm5vIHsxfVwiLFxuICAgIGludmFsaWRFbWFpbDogXCJaYWRlanRlIHByb3PDrW0gcGxhdG5vdSBlLW1haWxvdm91IGFkcmVzdS5cIixcbiAgICBpbnZhbGlkRXhwcmVzc2lvbjogXCJWw71yYXo6IHswfSBieSBtxJtsIHZyw6F0aXQgaG9kbm90dSDigJ50cnVl4oCcLlwiLFxuICAgIHVybFJlcXVlc3RFcnJvcjogXCJQb8W+YWRhdmVrIHZyw6F0aWwgY2h5YnUgJ3swfScuIHsxfVwiLFxuICAgIHVybEdldENob2ljZXNFcnJvcjogXCJQb8W+YWRhdmVrIG5ldnLDoXRpbCBkYXRhIG5lYm8gamUgbmVwbGF0bsOhIHZsYXN0bm9zdCAncGF0aCdcIixcbiAgICBleGNlZWRNYXhTaXplOiBcIlZlbGlrb3N0IHNvdWJvcnUgYnkgbmVtxJtsYSBiw710IHbEm3TFocOtIG5lxb4gezB9LlwiLFxuICAgIG90aGVyUmVxdWlyZWRFcnJvcjogXCJaYWRlanRlIHByb3PDrW0gamlub3UgaG9kbm90dS5cIixcbiAgICB1cGxvYWRpbmdGaWxlOiBcIlbDocWhIHNvdWJvciBzZSBuYWhyw6F2w6EuIFprdXN0ZSB0byBwcm9zw61tIHphIG7Em2tvbGlrIHNla3VuZC5cIixcbiAgICBsb2FkaW5nRmlsZTogXCJOYcSNw610w6Fuw60uLi5cIixcbiAgICBjaG9vc2VGaWxlOiBcIlZ5YmVydGUgc291Ym9yeS4uLlwiLFxuICAgIG5vRmlsZUNob3NlbjogXCJOZW7DrSB6dm9sZW7DvSDFvsOhZG7DvSBzb3Vib3JcIixcbiAgICBmaWxlRHJhZ0FyZWFQbGFjZWhvbGRlcjogXCJQxZlldMOhaG7Em3RlIHNlbSBzb3Vib3IgbmVibyBrbGlrbsSbdGUgbmEgdGxhxI3DrXRrbyBuw63FvmUgYSB2eWJlcnRlIHNvdWJvciwga3RlcsO9IGNoY2V0ZSBuYWhyw6F0LlwiLFxuICAgIGNvbmZpcm1EZWxldGU6IFwiQ2hjZXRlIHrDoXpuYW0gc21hemF0P1wiLFxuICAgIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwiVGF0byBob2Rub3RhIGJ5IG3Em2xhIGLDvXQgdW5pa8OhdG7DrS5cIixcbiAgICBhZGRDb2x1bW46IFwiUMWZaWRhdCBzbG91cGVjXCIsXG4gICAgYWRkUm93OiBcIlDFmWlkYXQgxZnDoWRla1wiLFxuICAgIHJlbW92ZVJvdzogXCJPZHN0cmFuaXRcIixcbiAgICBlbXB0eVJvd3NUZXh0OiBcIk5lZXhpc3R1asOtIMW+w6FkbsOpIMWZw6Fka3kuXCIsXG4gICAgYWRkUGFuZWw6IFwiUMWZaWRhdCBub3bDvVwiLFxuICAgIHJlbW92ZVBhbmVsOiBcIk9kc3RyYW5pdFwiLFxuICAgIGNob2ljZXNfSXRlbTogXCJwb2xvxb5rYVwiLFxuICAgIG1hdHJpeF9jb2x1bW46IFwiU2xvdXBlY1wiLFxuICAgIG1hdHJpeF9yb3c6IFwixZjDoWRla1wiLFxuICAgIG11bHRpcGxldGV4dF9pdGVtbmFtZTogXCJUZXh0XCIsXG4gICAgc2F2aW5nRGF0YTogXCJWw71zbGVka3kgc2UgdWtsw6FkYWrDrSBuYSBzZXJ2ZXIuLi5cIixcbiAgICBzYXZpbmdEYXRhRXJyb3I6IFwiRG/FoWxvIGsgY2h5YsSbIGEgdsO9c2xlZGt5IGpzbWUgbmVtb2hsaSB1bG/Fvml0LlwiLFxuICAgIHNhdmluZ0RhdGFTdWNjZXNzOiBcIlbDvXNsZWRreSBieWx5IMO6c3DEm8WhbsSbIHVsb8W+ZW55IVwiLFxuICAgIHNhdmVBZ2FpbkJ1dHRvbjogXCJaa3VzdGUgdG8gem5vdnVcIixcbiAgICB0aW1lck1pbjogXCJtaW5cIixcbiAgICB0aW1lclNlYzogXCJzZWtcIixcbiAgICB0aW1lclNwZW50QWxsOiBcIk5hIHTDqXRvIHN0csOhbmNlIGpzdGUgc3Ryw6F2aWwvYSBjZWxrZW0gezB9IHogezF9LlwiLFxuICAgIHRpbWVyU3BlbnRQYWdlOiBcIk5hIHTDqXRvIHN0csOhbmNlIGpzdGUgc3Ryw6F2aWwvYSB7MH0uXCIsXG4gICAgdGltZXJTcGVudFN1cnZleTogXCJDZWxrZW0ganN0ZSBzdHLDoXZpbC9hIHswfS5cIixcbiAgICB0aW1lckxpbWl0QWxsOiBcIk5hIHTDqXRvIHN0csOhbmNlIGpzdGUgc3Ryw6F2aWwvYSB7MH0geiB7MX0gYSBjZWxrZW0gezJ9IHogezN9LlwiLFxuICAgIHRpbWVyTGltaXRQYWdlOiBcIk5hIHTDqXRvIHN0csOhbmNlIGpzdGUgc3Ryw6F2aWwvYSB7MH0geiB7MX0uXCIsXG4gICAgdGltZXJMaW1pdFN1cnZleTogXCJDZWxrb3bEmyBqc3RlIHN0csOhdmlsL2EgezB9IHogezF9LlwiLFxuICAgIGNsZWFyQ2FwdGlvbjogXCJWeW1hemF0XCIsXG4gICAgc2lnbmF0dXJlUGxhY2VIb2xkZXI6IFwiUG9kZXBpxaF0ZSBzZSB6ZGVcIixcbiAgICBjaG9vc2VGaWxlQ2FwdGlvbjogXCJWeWJlcnRlIHNvdWJvclwiLFxuICAgIHRha2VQaG90b0NhcHRpb246IFwiUG/FmcOtZGl0IGZvdG9ncmFmaWlcIixcbiAgICBjYW1lcmFQbGFjZUhvbGRlcjogXCJLbGlrbnV0w61tIG5hIHRsYcSNw610a28gbsOtxb5lIHBvxZnDrWTDrXRlIGZvdG9ncmFmaWkgcG9tb2PDrSBmb3RvYXBhcsOhdHUuXCIsXG4gICAgZmlsZUNhbWVyYURyYWdBcmVhUGxhY2VIb2xkZXI6IFwiUMWZZXTDoWhuxJt0ZSBuZWJvIHZ5YmVydGUgc291Ym9yLCBrdGVyw70gY2hjZXRlIG5haHLDoXQgbmVibyBwb8WZacSPdGUgZm90b2dyYWZpaSBwb21vY8OtIGZvdG9hcGFyw6F0dS5cIixcbiAgICByZXBsYWNlRmlsZUNhcHRpb246IFwiTmFocmFkaXQgc291Ym9yXCIsXG4gICAgcmVtb3ZlRmlsZUNhcHRpb246IFwiT2RlYmVydGUgdGVudG8gc291Ym9yXCIsXG4gICAgYm9vbGVhbkNoZWNrZWRMYWJlbDogXCJBbm9cIixcbiAgICBib29sZWFuVW5jaGVja2VkTGFiZWw6IFwiTmVcIixcbiAgICBjb25maXJtUmVtb3ZlRmlsZTogXCJPcHJhdmR1IGNoY2V0ZSBvZGVicmF0IHRlbnRvIHNvdWJvcjogezB9P1wiLFxuICAgIGNvbmZpcm1SZW1vdmVBbGxGaWxlczogXCJPcHJhdmR1IGNoY2V0ZSBvZHN0cmFuaXQgdsWhZWNobnkgc291Ym9yeT9cIixcbiAgICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwiTsOhemV2IG90w6F6a3lcIixcbiAgICBtb2RhbENhbmNlbEJ1dHRvblRleHQ6IFwiWnJ1xaFpdFwiLFxuICAgIG1vZGFsQXBwbHlCdXR0b25UZXh0OiBcIlBvdcW+w610XCIsXG4gICAgZmlsdGVyU3RyaW5nUGxhY2Vob2xkZXI6IFwiWmFkZWp0ZSBobGVkYW7DvSB0ZXh0Li4uXCIsXG4gICAgZW1wdHlNZXNzYWdlOiBcIsW9w6FkbsOhIGRhdGEgayB6b2JyYXplbsOtXCIsXG4gICAgbm9FbnRyaWVzVGV4dDogXCJaYXTDrW0gbmVqc291IMW+w6FkbsOpIHrDoXpuYW15LlxcbktsaWtudXTDrW0gbmEgdGxhxI3DrXRrbyBuw63FvmUgcMWZaWTDoXRlIG5vdm91IHBvbG/Fvmt1LlwiLFxuICAgIG5vRW50cmllc1JlYWRvbmx5VGV4dDogXCJOZWpzb3UgemRlIMW+w6FkbsOpIHBvbG/Fvmt5LlwiLFxuICAgIG1vcmU6IFwiVsOtY2VcIixcbiAgICB0YWdib3hEb25lQnV0dG9uQ2FwdGlvbjogXCJPS1wiLFxuICAgIHNlbGVjdFRvUmFua0VtcHR5UmFua2VkQXJlYVRleHQ6IFwiVsWhZWNobnkgbW/Fvm5vc3RpIGpzb3Ugc2XFmWF6ZW55XCIsXG4gICAgc2VsZWN0VG9SYW5rRW1wdHlVbnJhbmtlZEFyZWFUZXh0OiBcIlDFmWV0w6FobsSbdGUgdm9sYnkgemRlIGEgc2XFmWHEj3RlIGplXCJcbn07XG5zdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3VydmV5TG9jYWxpemF0aW9uXCJdLmxvY2FsZXNbXCJjc1wiXSA9IGN6ZWNoU3VydmV5U3RyaW5ncztcbnN1cnZleV9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdXJ2ZXlMb2NhbGl6YXRpb25cIl0ubG9jYWxlTmFtZXNbXCJjc1wiXSA9IFwixI1lxaF0aW5hXCI7XG4vLyBUaGUgZm9sbG93aW5nIHN0cmluZ3MgaGF2ZSBiZWVuIHRyYW5zbGF0ZWQgYnkgYSBtYWNoaW5lIHRyYW5zbGF0aW9uIHNlcnZpY2Vcbi8vIFJlbW92ZSB0aG9zZSBzdHJpbmdzIHRoYXQgeW91IGhhdmUgY29ycmVjdGVkIG1hbnVhbGx5XG4vLyBpbmRleFRleHQ6IFwiezB9IG9mIHsxfVwiID0+IFwiezB9IHogezF9XCJcbi8vIHBhbmVsRHluYW1pY1RhYlRleHRGb3JtYXQ6IFwiUGFuZWwge3BhbmVsSW5kZXh9XCIgPT4gXCJQYW5lbCB7cGFuZWxJbmRleH1cIlxuLy8gcmF0aW5nT3B0aW9uc0NhcHRpb246IFwiU2VsZWN0Li4uXCIgPT4gXCJWeWJyYXQuLi5cIlxuLy8gbWluRXJyb3I6IFwiVGhlIHZhbHVlIHNob3VsZCBub3QgYmUgbGVzcyB0aGFuIHswfVwiID0+IFwiSG9kbm90YSBieSBuZW3Em2xhIGLDvXQgbWVuxaHDrSBuZcW+IHswfVwiXG4vLyBtYXhFcnJvcjogXCJUaGUgdmFsdWUgc2hvdWxkIG5vdCBiZSBncmVhdGVyIHRoYW4gezB9XCIgPT4gXCJIb2Rub3RhIGJ5IG5lbcSbbGEgYsO9dCB2xJt0xaHDrSBuZcW+IHswfVwiXG4vLyBmaWxlRHJhZ0FyZWFQbGFjZWhvbGRlcjogXCJEcmFnIGFuZCBkcm9wIGEgZmlsZSBoZXJlIG9yIGNsaWNrIHRoZSBidXR0b24gYmVsb3cgYW5kIGNob29zZSBhIGZpbGUgdG8gdXBsb2FkLlwiID0+IFwiUMWZZXTDoWhuxJt0ZSBzZW0gc291Ym9yIG5lYm8ga2xpa27Em3RlIG5hIHRsYcSNw610a28gbsOtxb5lIGEgdnliZXJ0ZSBzb3Vib3IsIGt0ZXLDvSBjaGNldGUgbmFocsOhdC5cIlxuLy8gZW1wdHlSb3dzVGV4dDogXCJUaGVyZSBhcmUgbm8gcm93cy5cIiA9PiBcIk5lZXhpc3R1asOtIMW+w6FkbsOpIMWZw6Fka3kuXCJcbi8vIG11bHRpcGxldGV4dF9pdGVtbmFtZTogXCJ0ZXh0XCIgPT4gXCJUZXh0XCJcbi8vIHNpZ25hdHVyZVBsYWNlSG9sZGVyOiBcIlNpZ24gaGVyZVwiID0+IFwiUG9kZXBpxaF0ZSBzZSB6ZGVcIlxuLy8gbW9kYWxDYW5jZWxCdXR0b25UZXh0OiBcIkNhbmNlbFwiID0+IFwiWnJ1xaFpdFwiXG4vLyBtb2RhbEFwcGx5QnV0dG9uVGV4dDogXCJBcHBseVwiID0+IFwiUG91xb7DrXRcIlxuLy8gZmlsdGVyU3RyaW5nUGxhY2Vob2xkZXI6IFwiVHlwZSB0byBzZWFyY2guLi5cIiA9PiBcIlphZGVqdGUgaGxlZGFuw70gdGV4dC4uLlwiXG4vLyBlbXB0eU1lc3NhZ2U6IFwiTm8gZGF0YSB0byBkaXNwbGF5XCIgPT4gXCLFvcOhZG7DoSBkYXRhIGsgem9icmF6ZW7DrVwiXG4vLyBub0VudHJpZXNUZXh0OiBcIlRoZXJlIGFyZSBubyBlbnRyaWVzIHlldC5cXG5DbGljayB0aGUgYnV0dG9uIGJlbG93IHRvIGFkZCBhIG5ldyBlbnRyeS5cIiA9PiBcIlphdMOtbSBuZWpzb3Ugxb7DoWRuw6kgesOhem5hbXkuXFxuS2xpa251dMOtbSBuYSB0bGHEjcOtdGtvIG7DrcW+ZSBwxZlpZMOhdGUgbm92b3UgcG9sb8W+a3UuXCJcbi8vIG5vRW50cmllc1JlYWRvbmx5VGV4dDogXCJUaGVyZSBhcmUgbm8gZW50cmllcy5cIiA9PiBcIk5lanNvdSB6ZGUgxb7DoWRuw6kgcG9sb8W+a3kuXCJcbi8vIG1vcmU6IFwiTW9yZVwiID0+IFwiVsOtY2VcIlxuLy8gdGFnYm94RG9uZUJ1dHRvbkNhcHRpb246IFwiT0tcIiA9PiBcIk9LXCJcbi8vIHNlbGVjdFRvUmFua0VtcHR5UmFua2VkQXJlYVRleHQ6IFwiQWxsIGNob2ljZXMgYXJlIHJhbmtlZFwiID0+IFwiVsWhZWNobnkgbW/Fvm5vc3RpIGpzb3Ugc2XFmWF6ZW55XCJcbi8vIHNlbGVjdFRvUmFua0VtcHR5VW5yYW5rZWRBcmVhVGV4dDogXCJEcmFnIGFuZCBkcm9wIGNob2ljZXMgaGVyZSB0byByYW5rIHRoZW1cIiA9PiBcIlDFmWV0w6FobsSbdGUgdm9sYnkgemRlIGEgc2XFmWHEj3RlIGplXCIvLyB0YWtlUGhvdG9DYXB0aW9uOiBcIlRha2UgUGhvdG9cIiA9PiBcIlBvxZnDrWRpdCBmb3RvZ3JhZmlpXCJcbi8vIGNhbWVyYVBsYWNlSG9sZGVyOiBcIkNsaWNrIHRoZSBidXR0b24gYmVsb3cgdG8gdGFrZSBhIHBob3RvIHVzaW5nIHRoZSBjYW1lcmEuXCIgPT4gXCJLbGlrbnV0w61tIG5hIHRsYcSNw610a28gbsOtxb5lIHBvxZnDrWTDrXRlIGZvdG9ncmFmaWkgcG9tb2PDrSBmb3RvYXBhcsOhdHUuXCJcbi8vIGZpbGVDYW1lcmFEcmFnQXJlYVBsYWNlSG9sZGVyOiBcIkRyYWcgYW5kIGRyb3Agb3Igc2VsZWN0IGEgZmlsZSB0byB1cGxvYWQgb3IgdGFrZSBhIHBob3RvIHVzaW5nIHRoZSBjYW1lcmEuXCIgPT4gXCJQxZlldMOhaG7Em3RlIG5lYm8gdnliZXJ0ZSBzb3Vib3IsIGt0ZXLDvSBjaGNldGUgbmFocsOhdCBuZWJvIHBvxZlpxI90ZSBmb3RvZ3JhZmlpIHBvbW9jw60gZm90b2FwYXLDoXR1LlwiXG4vLyByZXBsYWNlRmlsZUNhcHRpb246IFwiUmVwbGFjZSBmaWxlXCIgPT4gXCJOYWhyYWRpdCBzb3Vib3JcIlxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL2xvY2FsaXphdGlvbi9kYW5pc2gudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9sb2NhbGl6YXRpb24vZGFuaXNoLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogZGFuaXNoU3VydmV5U3RyaW5ncyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJkYW5pc2hTdXJ2ZXlTdHJpbmdzXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZGFuaXNoU3VydmV5U3RyaW5nczsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHN1cnZleS1jb3JlICovIFwiLi9zcmMvZW50cmllcy9jb3JlLnRzXCIpO1xuXG52YXIgZGFuaXNoU3VydmV5U3RyaW5ncyA9IHtcbiAgICBwYWdlUHJldlRleHQ6IFwiVGlsYmFnZVwiLFxuICAgIHBhZ2VOZXh0VGV4dDogXCJWaWRlcmVcIixcbiAgICBjb21wbGV0ZVRleHQ6IFwiRsOmcmRpZ1wiLFxuICAgIHByZXZpZXdUZXh0OiBcIkZvcnByZW1pZXJlXCIsXG4gICAgZWRpdFRleHQ6IFwiUmVkaWfDqXJcIixcbiAgICBzdGFydFN1cnZleVRleHQ6IFwiU3RhcnRcIixcbiAgICBvdGhlckl0ZW1UZXh0OiBcIlZhbGdmcml0IHN2YXIuLi5cIixcbiAgICBub25lSXRlbVRleHQ6IFwiSW5nZW5cIixcbiAgICBzZWxlY3RBbGxJdGVtVGV4dDogXCJWw6ZsZyBhbGxlXCIsXG4gICAgcHJvZ3Jlc3NUZXh0OiBcIlNpZGUgezB9IGFmIHsxfVwiLFxuICAgIGluZGV4VGV4dDogXCJ7MH0gYWYgezF9XCIsXG4gICAgcGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0OiBcIk9wdGFnIHswfSBhZiB7MX1cIixcbiAgICBwYW5lbER5bmFtaWNUYWJUZXh0Rm9ybWF0OiBcIlBhbmVsIHtwYW5lbEluZGV4fVwiLFxuICAgIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCJCZXN2YXJlZGUgezB9IC8gezF9IHNww7hyZ3Ntw6VsXCIsXG4gICAgZW1wdHlTdXJ2ZXk6IFwiRGVyIGVyIGluZ2VuIHN5bmxpZ2Ugc3DDuHJnc23DpWwuXCIsXG4gICAgY29tcGxldGluZ1N1cnZleTogXCJNYW5nZSB0YWsgZm9yIGRpbiBiZXN2YXJlbHNlIVwiLFxuICAgIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6IFwiVm9yZXMgZGF0YSB2aXNlciBhdCBkdSBhbGxlcmVkZSBoYXIgZ2VubmVtZsO4cnQgZGV0dGUgc3DDuHJnZXNrZW1hLlwiLFxuICAgIGxvYWRpbmdTdXJ2ZXk6IFwiU3DDuHJnZXNrZW1hZXQgaGVudGVzIGZyYSBzZXJ2ZXJlbi4uLlwiLFxuICAgIHBsYWNlaG9sZGVyOiBcIlbDpmxnLi4uXCIsXG4gICAgcmF0aW5nT3B0aW9uc0NhcHRpb246IFwiTWFya2VyZS4uLlwiLFxuICAgIHZhbHVlOiBcInbDpnJkaVwiLFxuICAgIHJlcXVpcmVkRXJyb3I6IFwiQmVzdmFyIHZlbmxpZ3N0IHNww7hyZ3Ntw6VsZXQuXCIsXG4gICAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwiQmVzdmFyIHZlbmxpZ3N0IG1pbmRzdCDDqXQgc3DDuHJnc23DpWwuXCIsXG4gICAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCJCZXN2YXIgdmVubGlnc3Qgc3DDuHJnc23DpWwgaSBhbGxlIHLDpmtrZXIuXCIsXG4gICAgbnVtZXJpY0Vycm9yOiBcIkFuZ2l2IGV0IHRhbC5cIixcbiAgICBtaW5FcnJvcjogXCJWw6ZyZGllbiBiw7hyIGlra2UgdsOmcmUgbWluZHJlIGVuZCB7MH1cIixcbiAgICBtYXhFcnJvcjogXCJWw6ZyZGllbiBiw7hyIGlra2UgdsOmcmUgc3TDuHJyZSBlbmQgezB9XCIsXG4gICAgdGV4dE1pbkxlbmd0aDogXCJBbmdpdiBtaW5kc3QgezB9IHRlZ24uXCIsXG4gICAgdGV4dE1heExlbmd0aDogXCJQbGVhc2UgZW50ZXIgbGVzcyB0aGFuIHswfSBjaGFyYWN0ZXJzLlwiLFxuICAgIHRleHRNaW5NYXhMZW5ndGg6IFwiQW5naXYgbWVyZSBlbmQgezB9IG9nIG1pbmRyZSBlbmQgezF9IHRlZ24uXCIsXG4gICAgbWluUm93Q291bnRFcnJvcjogXCJVZGZ5bGQgbWluZHN0IHswfSByw6Zra2VyLlwiLFxuICAgIG1pblNlbGVjdEVycm9yOiBcIlbDpmxnIHZlbmxpZ3N0IG1pbmRzdCB7MH0gc3Zhcm11bGlnaGVkKGVyKS5cIixcbiAgICBtYXhTZWxlY3RFcnJvcjogXCJWw6ZsZyB2ZW5saWdzdCBmw6ZycmUgezB9IHN2YXJtdWxpZ2hlZGVyKGVyKS5cIixcbiAgICBudW1lcmljTWluTWF4OiBcIid7MH0nIHNrYWwgdsOmcmUgbGlnIG1lZCBlbGxlciBzdMO4cnJlIGVuZCB7MX0gb2cgbGlnIG1lZCBlbGxlciBtaW5kcmUgZW5kIHsyfVwiLFxuICAgIG51bWVyaWNNaW46IFwiJ3swfScgc2thbCB2w6ZyZSBsaWcgbWVkIGVsbGVyIHN0w7hycmUgZW5kIHsxfVwiLFxuICAgIG51bWVyaWNNYXg6IFwiJ3swfScgc2thbCB2w6ZyZSBsaWcgbWVkIGVsbGVyIG1pbmRyZSBlbmQgezF9XCIsXG4gICAgaW52YWxpZEVtYWlsOiBcIkFuZ2l2IHZlbmxpZ3N0IGVuIGd5bGRpZyBlLW1haWwgYWRyZXNzZS5cIixcbiAgICBpbnZhbGlkRXhwcmVzc2lvbjogXCJVZHRyeWtrZXQ6IHswfSBza2FsIHJldHVybmVyZSAndHJ1ZScuXCIsXG4gICAgdXJsUmVxdWVzdEVycm9yOiBcIkZvcmVzcMO4cmdzbGVuIHJldHVybmVyZWRlIGZlamxlbiAnezB9Jy4gezF9XCIsXG4gICAgdXJsR2V0Q2hvaWNlc0Vycm9yOiBcIkZvcmVzcMO4cmdzbGVuIHJldHVybmVyZWRlIGluZ2VuIGRhdGEgZWxsZXIgJ3BhdGgnIHBhcmFtZXRlcmVuIGVyIGZvcmtlcnRcIixcbiAgICBleGNlZWRNYXhTaXplOiBcIkZpbHN0w7hycmVsc2VuIG3DpSBpa2tlIG92ZXJzdGlnZSB7MH0uXCIsXG4gICAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIkFuZ2l2IGVuIHbDpnJkaSBmb3IgZGl0IHZhbGdmcmllIHN2YXIuXCIsXG4gICAgdXBsb2FkaW5nRmlsZTogXCJEaW4gZmlsIGJsaXZlciB1cGxvYWRldC4gVmVudCBub2dsZSBzZWt1bmRlciBvZyBwcsO4diBldmVudHVlbHQgaWdlbi5cIixcbiAgICBsb2FkaW5nRmlsZTogXCJJbmRsw6ZzZXIuLi5cIixcbiAgICBjaG9vc2VGaWxlOiBcIlbDpmxnIGZpbChlcikuLi5cIixcbiAgICBub0ZpbGVDaG9zZW46IFwiSW5nZW4gZmlsIGVyIHZhbGd0XCIsXG4gICAgZmlsZURyYWdBcmVhUGxhY2Vob2xkZXI6IFwiVHLDpmsgb2cgc2xpcCBlbiBmaWwgaGVyLCBlbGxlciBrbGlrIHDDpSBrbmFwcGVuIG5lZGVuZm9yLCBvZyB2w6ZsZyBlbiBmaWwsIGRlciBza2FsIHVwbG9hZGVzLlwiLFxuICAgIGNvbmZpcm1EZWxldGU6IFwiVmlsIGR1IGZqZXJuZSBkZW4/XCIsXG4gICAga2V5RHVwbGljYXRpb25FcnJvcjogXCJEZW5uZSB2w6ZyZGkgc2thbCB2w6ZyZSB1bmlrLlwiLFxuICAgIGFkZENvbHVtbjogXCJUaWxmw7hqIGtvbG9ubmVcIixcbiAgICBhZGRSb3c6IFwiVGlsZsO4aiByw6Zra2VcIixcbiAgICByZW1vdmVSb3c6IFwiRmplcm5cIixcbiAgICBlbXB0eVJvd3NUZXh0OiBcIkRlciBlciBpbmdlbiByw6Zra2VyLlwiLFxuICAgIGFkZFBhbmVsOiBcIlRpbGbDuGogbnlcIixcbiAgICByZW1vdmVQYW5lbDogXCJGamVyblwiLFxuICAgIGNob2ljZXNfSXRlbTogXCJ2YWxnXCIsXG4gICAgbWF0cml4X2NvbHVtbjogXCJLb2xvbm5lXCIsXG4gICAgbWF0cml4X3JvdzogXCJSw6Zra2VcIixcbiAgICBtdWx0aXBsZXRleHRfaXRlbW5hbWU6IFwiVGVrc3RcIixcbiAgICBzYXZpbmdEYXRhOiBcIlJlc3VsdGF0ZXJuZSBibGl2ZXIgZ2VtdCBww6Ugc2VydmVyZW4uLi5cIixcbiAgICBzYXZpbmdEYXRhRXJyb3I6IFwiRGVyIG9wc3RvZCBlbiBmZWpsIG9nIHZpIGt1bm5lIGlra2UgZ2VtbWUgcmVzdWx0YXRldC5cIixcbiAgICBzYXZpbmdEYXRhU3VjY2VzczogXCJSZXN1bHRhdGV0IGJsZXYgZ2VtdCFcIixcbiAgICBzYXZlQWdhaW5CdXR0b246IFwiUHLDuHYgaWdlblwiLFxuICAgIHRpbWVyTWluOiBcIm1pblwiLFxuICAgIHRpbWVyU2VjOiBcInNla1wiLFxuICAgIHRpbWVyU3BlbnRBbGw6IFwiRHUgaGFyIGJydWd0IHswfSBww6UgZGVubmUgc2lkZSBvZyB7MX0gaSBhbHQuXCIsXG4gICAgdGltZXJTcGVudFBhZ2U6IFwiRHUgaGFyIGJydWd0IHswfSBww6UgZGVubmUgc2lkZS5cIixcbiAgICB0aW1lclNwZW50U3VydmV5OiBcIkR1IGhhciBicnVndCB7MH0gaSBhbHQuXCIsXG4gICAgdGltZXJMaW1pdEFsbDogXCJEdSBoYXIgYnJ1Z3QgezB9IGFmIHsxfSBww6UgZGVubmUgc2lkZSBvZyB7Mn0gYWYgezN9IGkgYWx0LlwiLFxuICAgIHRpbWVyTGltaXRQYWdlOiBcIkR1IGhhciBicnVndCB7MH0gYWYgezF9IHDDpSBkZW5uZSBzaWRlLlwiLFxuICAgIHRpbWVyTGltaXRTdXJ2ZXk6IFwiRHUgaGFyIGJydWd0IHswfSBhZiB7MX0gaSBhbHQuXCIsXG4gICAgY2xlYXJDYXB0aW9uOiBcIkZqZXJuXCIsXG4gICAgc2lnbmF0dXJlUGxhY2VIb2xkZXI6IFwiVGlsbWVsZCBkaWcgaGVyXCIsXG4gICAgY2hvb3NlRmlsZUNhcHRpb246IFwiVsOmbGcgZmlsXCIsXG4gICAgdGFrZVBob3RvQ2FwdGlvbjogXCJUYWcgYmlsbGVkZVwiLFxuICAgIGNhbWVyYVBsYWNlSG9sZGVyOiBcIktsaWsgcMOlIGtuYXBwZW4gbmVkZW5mb3IgZm9yIGF0IHRhZ2UgZXQgYmlsbGVkZSBtZWQga2FtZXJhZXQuXCIsXG4gICAgZmlsZUNhbWVyYURyYWdBcmVhUGxhY2VIb2xkZXI6IFwiVHLDpmsgb2cgc2xpcCwgZWxsZXIgdsOmbGcgZW4gZmlsLCBkZXIgc2thbCB1cGxvYWRlcywgZWxsZXIgdGFnIGV0IGJpbGxlZGUgbWVkIGthbWVyYWV0LlwiLFxuICAgIHJlcGxhY2VGaWxlQ2FwdGlvbjogXCJFcnN0YXQgZmlsXCIsXG4gICAgcmVtb3ZlRmlsZUNhcHRpb246IFwiRmplcm4gZGVubmUgZmlsXCIsXG4gICAgYm9vbGVhbkNoZWNrZWRMYWJlbDogXCJKYVwiLFxuICAgIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCJJbmdlblwiLFxuICAgIGNvbmZpcm1SZW1vdmVGaWxlOiBcIkVyIGR1IHNpa2tlciBww6UsIGF0IGR1IHZpbCBmamVybmUgZGVubmUgZmlsOiB7MH0/XCIsXG4gICAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcIkVyIGR1IHNpa2tlciBww6UsIGF0IGR1IHZpbCBmamVybmUgYWxsZSBmaWxlcj9cIixcbiAgICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwiU3DDuHJnc23DpWxzIHRpdGVsXCIsXG4gICAgbW9kYWxDYW5jZWxCdXR0b25UZXh0OiBcIkFmbHlzZVwiLFxuICAgIG1vZGFsQXBwbHlCdXR0b25UZXh0OiBcIkFudmVuZGVcIixcbiAgICBmaWx0ZXJTdHJpbmdQbGFjZWhvbGRlcjogXCJTa3JpdiBmb3IgYXQgc8O4Z2UuLi5cIixcbiAgICBlbXB0eU1lc3NhZ2U6IFwiSW5nZW4gZGF0YSBhdCB2aXNlXCIsXG4gICAgbm9FbnRyaWVzVGV4dDogXCJEZXIgZXIgZW5kbnUgaW5nZW4gdGlsbWVsZGluZ2VyLlxcbktsaWsgcMOlIGtuYXBwZW4gbmVkZW5mb3IgZm9yIGF0IHRpbGbDuGplIGVuIG55IHBvc3QuXCIsXG4gICAgbm9FbnRyaWVzUmVhZG9ubHlUZXh0OiBcIkRlciBlciBpbmdlbiBwb3N0ZXIuXCIsXG4gICAgbW9yZTogXCJNZXJlXCIsXG4gICAgdGFnYm94RG9uZUJ1dHRvbkNhcHRpb246IFwiT0tcIixcbiAgICBzZWxlY3RUb1JhbmtFbXB0eVJhbmtlZEFyZWFUZXh0OiBcIkFsbGUgdmFsZyBlciByYW5nZXJldFwiLFxuICAgIHNlbGVjdFRvUmFua0VtcHR5VW5yYW5rZWRBcmVhVGV4dDogXCJUcsOmayBvZyBzbGlwIHZhbGcgaGVyIGZvciBhdCByYW5nZXJlIGRlbVwiXG59O1xuc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN1cnZleUxvY2FsaXphdGlvblwiXS5sb2NhbGVzW1wiZGFcIl0gPSBkYW5pc2hTdXJ2ZXlTdHJpbmdzO1xuc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN1cnZleUxvY2FsaXphdGlvblwiXS5sb2NhbGVOYW1lc1tcImRhXCJdID0gXCJkYW5za1wiO1xuLy8gVGhlIGZvbGxvd2luZyBzdHJpbmdzIGhhdmUgYmVlbiB0cmFuc2xhdGVkIGJ5IGEgbWFjaGluZSB0cmFuc2xhdGlvbiBzZXJ2aWNlXG4vLyBSZW1vdmUgdGhvc2Ugc3RyaW5ncyB0aGF0IHlvdSBoYXZlIGNvcnJlY3RlZCBtYW51YWxseVxuLy8gaW5kZXhUZXh0OiBcInswfSBvZiB7MX1cIiA9PiBcInswfSBhZiB7MX1cIlxuLy8gcGFuZWxEeW5hbWljVGFiVGV4dEZvcm1hdDogXCJQYW5lbCB7cGFuZWxJbmRleH1cIiA9PiBcIlBhbmVsIHtwYW5lbEluZGV4fVwiXG4vLyByYXRpbmdPcHRpb25zQ2FwdGlvbjogXCJTZWxlY3QuLi5cIiA9PiBcIk1hcmtlcmUuLi5cIlxuLy8gbWluRXJyb3I6IFwiVGhlIHZhbHVlIHNob3VsZCBub3QgYmUgbGVzcyB0aGFuIHswfVwiID0+IFwiVsOmcmRpZW4gYsO4ciBpa2tlIHbDpnJlIG1pbmRyZSBlbmQgezB9XCJcbi8vIG1heEVycm9yOiBcIlRoZSB2YWx1ZSBzaG91bGQgbm90IGJlIGdyZWF0ZXIgdGhhbiB7MH1cIiA9PiBcIlbDpnJkaWVuIGLDuHIgaWtrZSB2w6ZyZSBzdMO4cnJlIGVuZCB7MH1cIlxuLy8gZmlsZURyYWdBcmVhUGxhY2Vob2xkZXI6IFwiRHJhZyBhbmQgZHJvcCBhIGZpbGUgaGVyZSBvciBjbGljayB0aGUgYnV0dG9uIGJlbG93IGFuZCBjaG9vc2UgYSBmaWxlIHRvIHVwbG9hZC5cIiA9PiBcIlRyw6ZrIG9nIHNsaXAgZW4gZmlsIGhlciwgZWxsZXIga2xpayBww6Uga25hcHBlbiBuZWRlbmZvciwgb2cgdsOmbGcgZW4gZmlsLCBkZXIgc2thbCB1cGxvYWRlcy5cIlxuLy8gZW1wdHlSb3dzVGV4dDogXCJUaGVyZSBhcmUgbm8gcm93cy5cIiA9PiBcIkRlciBlciBpbmdlbiByw6Zra2VyLlwiXG4vLyBtdWx0aXBsZXRleHRfaXRlbW5hbWU6IFwidGV4dFwiID0+IFwiVGVrc3RcIlxuLy8gc2lnbmF0dXJlUGxhY2VIb2xkZXI6IFwiU2lnbiBoZXJlXCIgPT4gXCJUaWxtZWxkIGRpZyBoZXJcIlxuLy8gbW9kYWxDYW5jZWxCdXR0b25UZXh0OiBcIkNhbmNlbFwiID0+IFwiQWZseXNlXCJcbi8vIG1vZGFsQXBwbHlCdXR0b25UZXh0OiBcIkFwcGx5XCIgPT4gXCJBbnZlbmRlXCJcbi8vIGZpbHRlclN0cmluZ1BsYWNlaG9sZGVyOiBcIlR5cGUgdG8gc2VhcmNoLi4uXCIgPT4gXCJTa3JpdiBmb3IgYXQgc8O4Z2UuLi5cIlxuLy8gZW1wdHlNZXNzYWdlOiBcIk5vIGRhdGEgdG8gZGlzcGxheVwiID0+IFwiSW5nZW4gZGF0YSBhdCB2aXNlXCJcbi8vIG5vRW50cmllc1RleHQ6IFwiVGhlcmUgYXJlIG5vIGVudHJpZXMgeWV0LlxcbkNsaWNrIHRoZSBidXR0b24gYmVsb3cgdG8gYWRkIGEgbmV3IGVudHJ5LlwiID0+IFwiRGVyIGVyIGVuZG51IGluZ2VuIHRpbG1lbGRpbmdlci5cXG5LbGlrIHDDpSBrbmFwcGVuIG5lZGVuZm9yIGZvciBhdCB0aWxmw7hqZSBlbiBueSBwb3N0LlwiXG4vLyBub0VudHJpZXNSZWFkb25seVRleHQ6IFwiVGhlcmUgYXJlIG5vIGVudHJpZXMuXCIgPT4gXCJEZXIgZXIgaW5nZW4gcG9zdGVyLlwiXG4vLyBtb3JlOiBcIk1vcmVcIiA9PiBcIk1lcmVcIlxuLy8gdGFnYm94RG9uZUJ1dHRvbkNhcHRpb246IFwiT0tcIiA9PiBcIk9LXCJcbi8vIHNlbGVjdFRvUmFua0VtcHR5UmFua2VkQXJlYVRleHQ6IFwiQWxsIGNob2ljZXMgYXJlIHJhbmtlZFwiID0+IFwiQWxsZSB2YWxnIGVyIHJhbmdlcmV0XCJcbi8vIHNlbGVjdFRvUmFua0VtcHR5VW5yYW5rZWRBcmVhVGV4dDogXCJEcmFnIGFuZCBkcm9wIGNob2ljZXMgaGVyZSB0byByYW5rIHRoZW1cIiA9PiBcIlRyw6ZrIG9nIHNsaXAgdmFsZyBoZXIgZm9yIGF0IHJhbmdlcmUgZGVtXCIvLyB0YWtlUGhvdG9DYXB0aW9uOiBcIlRha2UgUGhvdG9cIiA9PiBcIlRhZyBiaWxsZWRlXCJcbi8vIGNhbWVyYVBsYWNlSG9sZGVyOiBcIkNsaWNrIHRoZSBidXR0b24gYmVsb3cgdG8gdGFrZSBhIHBob3RvIHVzaW5nIHRoZSBjYW1lcmEuXCIgPT4gXCJLbGlrIHDDpSBrbmFwcGVuIG5lZGVuZm9yIGZvciBhdCB0YWdlIGV0IGJpbGxlZGUgbWVkIGthbWVyYWV0LlwiXG4vLyBmaWxlQ2FtZXJhRHJhZ0FyZWFQbGFjZUhvbGRlcjogXCJEcmFnIGFuZCBkcm9wIG9yIHNlbGVjdCBhIGZpbGUgdG8gdXBsb2FkIG9yIHRha2UgYSBwaG90byB1c2luZyB0aGUgY2FtZXJhLlwiID0+IFwiVHLDpmsgb2cgc2xpcCwgZWxsZXIgdsOmbGcgZW4gZmlsLCBkZXIgc2thbCB1cGxvYWRlcywgZWxsZXIgdGFnIGV0IGJpbGxlZGUgbWVkIGthbWVyYWV0LlwiXG4vLyByZXBsYWNlRmlsZUNhcHRpb246IFwiUmVwbGFjZSBmaWxlXCIgPT4gXCJFcnN0YXQgZmlsXCJcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9sb2NhbGl6YXRpb24vZHV0Y2gudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL2xvY2FsaXphdGlvbi9kdXRjaC50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogZHV0Y2hTdXJ2ZXlTdHJpbmdzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImR1dGNoU3VydmV5U3RyaW5nc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGR1dGNoU3VydmV5U3RyaW5nczsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHN1cnZleS1jb3JlICovIFwiLi9zcmMvZW50cmllcy9jb3JlLnRzXCIpO1xuXG52YXIgZHV0Y2hTdXJ2ZXlTdHJpbmdzID0ge1xuICAgIHBhZ2VQcmV2VGV4dDogXCJWb3JpZ2VcIixcbiAgICBwYWdlTmV4dFRleHQ6IFwiVm9sZ2VuZGVcIixcbiAgICBjb21wbGV0ZVRleHQ6IFwiVmVyemVuZGVuXCIsXG4gICAgcHJldmlld1RleHQ6IFwiVm9vcmJlZWxkXCIsXG4gICAgZWRpdFRleHQ6IFwiQmV3ZXJrXCIsXG4gICAgc3RhcnRTdXJ2ZXlUZXh0OiBcIlN0YXJ0XCIsXG4gICAgb3RoZXJJdGVtVGV4dDogXCJBbmRlcnMsIG5sLlwiLFxuICAgIG5vbmVJdGVtVGV4dDogXCJHZWVuXCIsXG4gICAgc2VsZWN0QWxsSXRlbVRleHQ6IFwiU2VsZWN0ZWVyIEFsbGVzXCIsXG4gICAgcHJvZ3Jlc3NUZXh0OiBcIlBhZ2luYSB7MH0gdmFuIHsxfVwiLFxuICAgIGluZGV4VGV4dDogXCJ7MH0gdmFuIHsxfVwiLFxuICAgIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCJSZWNvcmQgezB9IG9mIHsxfVwiLFxuICAgIHBhbmVsRHluYW1pY1RhYlRleHRGb3JtYXQ6IFwiUGFuZWVsIHtwYW5lbEluZGV4fVwiLFxuICAgIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCJHZWFudHdvb3JkIHswfS97MX0gdnJhZ2VuXCIsXG4gICAgZW1wdHlTdXJ2ZXk6IFwiRXIgaXMgZ2VlbiB6aWNodGJhcmUgcGFnaW5hIG9mIHZyYWFnIGluIGRlemUgdnJhZ2VubGlqc3RcIixcbiAgICBjb21wbGV0aW5nU3VydmV5OiBcIkJlZGFua3Qgdm9vciBoZXQgaW52dWxsZW4gdmFuIGRlIHZyYWdlbmxpanN0XCIsXG4gICAgY29tcGxldGluZ1N1cnZleUJlZm9yZTogXCJPbnplIGdlZ2V2ZW5zIHRvbmVuIGFhbiBkYXQgamUgZGV6ZSB2cmFnZW5saWpzdCByZWVkcyBiZWFudHdvb3JkIGhlYnQuXCIsXG4gICAgbG9hZGluZ1N1cnZleTogXCJEZSB2cmFnZW5saWpzdCBpcyBhYW4gaGV0IGxhZGVuLi4uXCIsXG4gICAgcGxhY2Vob2xkZXI6IFwiS2llcy4uLlwiLFxuICAgIHJhdGluZ09wdGlvbnNDYXB0aW9uOiBcIlNlbGVjdGVyZW4uLi5cIixcbiAgICB2YWx1ZTogXCJ3YWFyZGVcIixcbiAgICByZXF1aXJlZEVycm9yOiBcIkRpdCBpcyBlZW4gdmVyZWlzdGUgdnJhYWdcIixcbiAgICByZXF1aXJlZEVycm9ySW5QYW5lbDogXCJHZWxpZXZlIHRlbiBtaW5zdGUgZWVuIHZyYWFnIHRlIGJlYW50d29vcmRlbi5cIixcbiAgICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIkRlemUgdnJhYWcgdmVyZWlzdCDDqcOpbiBhbnR3b29yZCBwZXIgcmlqXCIsXG4gICAgbnVtZXJpY0Vycm9yOiBcIkhldCBhbnR3b29yZCBtb2V0IGVlbiBnZXRhbCB6aWpuXCIsXG4gICAgbWluRXJyb3I6IFwiRGUgd2FhcmRlIG1hZyBuaWV0IGxhZ2VyIHppam4gZGFuIHswfVwiLFxuICAgIG1heEVycm9yOiBcIkRlIHdhYXJkZSBtYWcgbmlldCBncm90ZXIgemlqbiBkYW4gezB9XCIsXG4gICAgdGV4dE1pbkxlbmd0aDogXCJWdWwgbWluc3RlbnMgezB9IGthcmFrdGVycyBpblwiLFxuICAgIHRleHRNYXhMZW5ndGg6IFwiR2VsaWV2ZSBtaW5kZXIgZGFuIHswfSBrYXJha3RlcnMgaW4gdGUgdnVsbGVuLlwiLFxuICAgIHRleHRNaW5NYXhMZW5ndGg6IFwiR2VsaWV2ZSBtZWVyIGRhbiB7MH0gZW4gbWluZGVyIGRhbiB7MX0ga2FyYWt0ZXJzIGluIHRlIHZ1bGxlbi5cIixcbiAgICBtaW5Sb3dDb3VudEVycm9yOiBcIkdlbGlldmUgdGVuIG1pbnN0ZSB7MH0gcmlqZW4gaW4gdGUgdnVsbGVuLlwiLFxuICAgIG1pblNlbGVjdEVycm9yOiBcIlNlbGVjdGVlciBtaW5pbXVtIHswfSBhbnR3b29yZGVuXCIsXG4gICAgbWF4U2VsZWN0RXJyb3I6IFwiU2VsZWN0ZWVyIG5pZXQgbWVlciBkYW4gezB9IGFudHdvb3JkZW5cIixcbiAgICBudW1lcmljTWluTWF4OiBcIlV3IGFudHdvb3JkICd7MH0nIG1vZXQgZ3JvdGVyIG9mIGdlbGlqayB6aWpuIGFhbiB7MX0gZW4ga2xlaW5lciBvZiBnZWxpamsgYWFuIHsyfVwiLFxuICAgIG51bWVyaWNNaW46IFwiVXcgYW50d29vcmQgJ3swfScgbW9ldCBncm90ZXIgb2YgZ2VsaWprIHppam4gYWFuIHsxfVwiLFxuICAgIG51bWVyaWNNYXg6IFwiVXcgYW50d29vcmQgJ3swfScgbW9ldCBncm90ZXIgb2YgZ2VsaWprIHppam4gYWFuIHsxfVwiLFxuICAgIGludmFsaWRFbWFpbDogXCJWdWwgZWVuIGdlbGRpZyBlLW1haWxhZHJlcyBpblwiLFxuICAgIGludmFsaWRFeHByZXNzaW9uOiBcIkRlIHVpdGRydWtraW5nOiB7MH0gbW9ldCAnd2FhcicgdGVydWdnZXZlbi5cIixcbiAgICB1cmxSZXF1ZXN0RXJyb3I6IFwiRGUgdnJhYWcga2VlcmRlIGVlbiBmb3V0IHRlcnVnICd7MH0nLiB7MX1cIixcbiAgICB1cmxHZXRDaG9pY2VzRXJyb3I6IFwiRGUgdnJhYWcgZ2FmIGVlbiBsZWVnIGFudHdvb3JkIHRlcnVnIG9mIGRlICdwYWQnIGVpZ2Vuc2NoYXAgaXMgbmlldCBjb3JyZWN0XCIsXG4gICAgZXhjZWVkTWF4U2l6ZTogXCJEZSBncm9vdHRlIHZhbiBoZXQgYmVzdGFuZCBtYWcgbmlldCBncm90ZXIgemlqbiBkYW4gezB9XCIsXG4gICAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIlZ1bCBoZXQgdmVsZCAnQW5kZXJzLCBubC4nIGluXCIsXG4gICAgdXBsb2FkaW5nRmlsZTogXCJVdyBiZXN0YW5kIHdvcmR0IGdlw7xwbG9hZC4gR2VsaWV2ZSBlbmtlbGUgc2Vjb25kZW4gdGUgd2FjaHRlbiBlbiBvcG5pZXV3IHRlIHByb2JlcmVuLlwiLFxuICAgIGxvYWRpbmdGaWxlOiBcIkxhZGVuLi4uXCIsXG4gICAgY2hvb3NlRmlsZTogXCJLaWVzIHV3IGJlc3RhbmQoZW4pLi4uXCIsXG4gICAgbm9GaWxlQ2hvc2VuOiBcIkdlZW4gYmVzdGFuZCBnZWtvemVuXCIsXG4gICAgZmlsZURyYWdBcmVhUGxhY2Vob2xkZXI6IFwiU2xlZXAgaGV0IGJlc3RhbmQgbmFhciBoaWVyXCIsXG4gICAgY29uZmlybURlbGV0ZTogXCJXaWx0IHUgZGV6ZSBnZWdldmVucyB2ZXJ3aWpkZXJlbj9cIixcbiAgICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcIkRlemUgd2FhcmRlIG1vZXQgdW5pZWsgemlqbi5cIixcbiAgICBhZGRDb2x1bW46IFwiVm9lZyBrb2xvbSB0b2VcIixcbiAgICBhZGRSb3c6IFwiVm9lZyByaWogdG9lXCIsXG4gICAgcmVtb3ZlUm93OiBcIlZlcndpamRlclwiLFxuICAgIGVtcHR5Um93c1RleHQ6IFwiRXIgemlqbiBnZWVuIHJpamVuLlwiLFxuICAgIGFkZFBhbmVsOiBcIk5pZXV3ZSB0b2V2b2VnZW5cIixcbiAgICByZW1vdmVQYW5lbDogXCJWZXJ3aWpkZXJcIixcbiAgICBjaG9pY2VzX0l0ZW06IFwib25kZXJ3ZXJwXCIsXG4gICAgbWF0cml4X2NvbHVtbjogXCJLb2xvbVwiLFxuICAgIG1hdHJpeF9yb3c6IFwiUmlqXCIsXG4gICAgbXVsdGlwbGV0ZXh0X2l0ZW1uYW1lOiBcIlNtc1wiLFxuICAgIHNhdmluZ0RhdGE6IFwiRGUgcmVzdWx0YXRlbiB3b3JkZW4gYmV3YWFyZCBvcCBkZSBzZXJ2ZXIuLi5cIixcbiAgICBzYXZpbmdEYXRhRXJyb3I6IFwiRXIgd2FzIGVlbiBwcm9ibGVlbSBlbiB3ZSBrb25kZW4gZGUgcmVzdWx0YXRlbiBuaWV0IGJld2FyZW4uXCIsXG4gICAgc2F2aW5nRGF0YVN1Y2Nlc3M6IFwiRGUgcmVzdWx0YXRlbiB3ZXJkZW4gc3VjY2Vzdm9sIGJld2FhcmQhXCIsXG4gICAgc2F2ZUFnYWluQnV0dG9uOiBcIlByb2JlZXIgb3BuaWV1d1wiLFxuICAgIHRpbWVyTWluOiBcIm1pbmltdW1cIixcbiAgICB0aW1lclNlYzogXCJzZWNcIixcbiAgICB0aW1lclNwZW50QWxsOiBcIlUgaGVlZnQgezB9IGdlc3BlbmRlZXJkIG9wIGRlemUgcGFnaW5hIGVuIHsxfSBpbiB0b3RhYWwuXCIsXG4gICAgdGltZXJTcGVudFBhZ2U6IFwiVSBoZWVmdCB7MH0gb3AgZGV6ZSBwYWdpbmEgZ2VzcGVuZGVlcmQuXCIsXG4gICAgdGltZXJTcGVudFN1cnZleTogXCJVIGhlZWZ0IGluIHRvdGFhbCB7MH0gZ2VzcGVuZGVlcmQuXCIsXG4gICAgdGltZXJMaW1pdEFsbDogXCJVIGhlZWZ0IHswfSB2YW4gezF9IG9wIGRlemUgcGFnaW5hIGdlc3BlbmRlZXJkIGVuIHsyfSB2YW4gezN9IGluIHRvdGFhbC5cIixcbiAgICB0aW1lckxpbWl0UGFnZTogXCJVIGhlZWZ0IHswfSB2YW4gezF9IGdlc3BlbmRlZXJkIG9wIGRlemUgcGFnaW5hLlwiLFxuICAgIHRpbWVyTGltaXRTdXJ2ZXk6IFwiVSBoZWVmdCB7MH0gdmFuIHsxfSBpbiBoZXQgdG90YWFsLlwiLFxuICAgIGNsZWFyQ2FwdGlvbjogXCJWZXJ3aWpkZXJcIixcbiAgICBzaWduYXR1cmVQbGFjZUhvbGRlcjogXCJIaWVyIHRla2VuZW5cIixcbiAgICBjaG9vc2VGaWxlQ2FwdGlvbjogXCJHZWtvemVuIGJlc3RhbmRcIixcbiAgICB0YWtlUGhvdG9DYXB0aW9uOiBcIkZvdG8gbWFrZW5cIixcbiAgICBjYW1lcmFQbGFjZUhvbGRlcjogXCJLbGlrIG9wIGRlIG9uZGVyc3RhYW5kZSBrbm9wIG9tIGVlbiBmb3RvIHRlIG1ha2VuIG1ldCBkZSBjYW1lcmEuXCIsXG4gICAgZmlsZUNhbWVyYURyYWdBcmVhUGxhY2VIb2xkZXI6IFwiU2xlZXAgZW4gemV0IG5lZXIgb2Ygc2VsZWN0ZWVyIGVlbiBiZXN0YW5kIG9tIHRlIHVwbG9hZGVuIG9mIG1hYWsgZWVuIGZvdG8gbWV0IGRlIGNhbWVyYS5cIixcbiAgICByZXBsYWNlRmlsZUNhcHRpb246IFwiQmVzdGFuZCB2ZXJ2YW5nZW5cIixcbiAgICByZW1vdmVGaWxlQ2FwdGlvbjogXCJWZXJ3aWpkZXIgZGl0IGJlc3RhbmRcIixcbiAgICBib29sZWFuQ2hlY2tlZExhYmVsOiBcIkphXCIsXG4gICAgYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcIk5lZVwiLFxuICAgIGNvbmZpcm1SZW1vdmVGaWxlOiBcIldlZXQgdSB6ZWtlciBkYXQgdSBkZXplIGZpbGUgd2lsdCB2ZXJ3aWpkZXJlbjogezB9P1wiLFxuICAgIGNvbmZpcm1SZW1vdmVBbGxGaWxlczogXCJXZWV0IHUgemVrZXIgZGF0IHUgYWwgZGV6ZSBmaWxlcyB3aWx0IHZlcndpamRlcmVuP1wiLFxuICAgIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCJUaXRlbCB2YW4gZGUgdnJhYWdcIixcbiAgICBtb2RhbENhbmNlbEJ1dHRvblRleHQ6IFwiQW5udWxlcmVuXCIsXG4gICAgbW9kYWxBcHBseUJ1dHRvblRleHQ6IFwiVG9lcGFzc2VuXCIsXG4gICAgZmlsdGVyU3RyaW5nUGxhY2Vob2xkZXI6IFwiVHlwIG9tIHRlIHpvZWtlbi4uLlwiLFxuICAgIGVtcHR5TWVzc2FnZTogXCJHZWVuIGdlZ2V2ZW5zIG9tIHdlZXIgdGUgZ2V2ZW5cIixcbiAgICBub0VudHJpZXNUZXh0OiBcIkVyIHppam4gbm9nIGdlZW4gaW56ZW5kaW5nZW4uXFxuS2xpayBvcCBkZSBvbmRlcnN0YWFuZGUga25vcCBvbSBlZW4gbmlldXcgaXRlbSB0b2UgdGUgdm9lZ2VuLlwiLFxuICAgIG5vRW50cmllc1JlYWRvbmx5VGV4dDogXCJFciB6aWpuIGdlZW4gaW56ZW5kaW5nZW4uXCIsXG4gICAgbW9yZTogXCJNZWVyXCIsXG4gICAgdGFnYm94RG9uZUJ1dHRvbkNhcHRpb246IFwiT0tcIixcbiAgICBzZWxlY3RUb1JhbmtFbXB0eVJhbmtlZEFyZWFUZXh0OiBcIkFsbGUga2V1emVzIHppam4gZ2VyYW5nc2NoaWt0XCIsXG4gICAgc2VsZWN0VG9SYW5rRW1wdHlVbnJhbmtlZEFyZWFUZXh0OiBcIkRyYWcgZW4gZHJvcCBrZXV6ZXMgaGllciBvbSB6ZSB0ZSByYW5nc2NoaWtrZW5cIlxufTtcbnN1cnZleV9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdXJ2ZXlMb2NhbGl6YXRpb25cIl0ubG9jYWxlc1tcIm5sXCJdID0gZHV0Y2hTdXJ2ZXlTdHJpbmdzO1xuc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN1cnZleUxvY2FsaXphdGlvblwiXS5sb2NhbGVOYW1lc1tcIm5sXCJdID0gXCJuZWRlcmxhbmRzXCI7XG4vLyBUaGUgZm9sbG93aW5nIHN0cmluZ3MgaGF2ZSBiZWVuIHRyYW5zbGF0ZWQgYnkgYSBtYWNoaW5lIHRyYW5zbGF0aW9uIHNlcnZpY2Vcbi8vIFJlbW92ZSB0aG9zZSBzdHJpbmdzIHRoYXQgeW91IGhhdmUgY29ycmVjdGVkIG1hbnVhbGx5XG4vLyBpbmRleFRleHQ6IFwiezB9IG9mIHsxfVwiID0+IFwiezB9IHZhbiB7MX1cIlxuLy8gcGFuZWxEeW5hbWljVGFiVGV4dEZvcm1hdDogXCJQYW5lbCB7cGFuZWxJbmRleH1cIiA9PiBcIlBhbmVlbCB7cGFuZWxJbmRleH1cIlxuLy8gcmF0aW5nT3B0aW9uc0NhcHRpb246IFwiU2VsZWN0Li4uXCIgPT4gXCJTZWxlY3RlcmVuLi4uXCJcbi8vIG1pbkVycm9yOiBcIlRoZSB2YWx1ZSBzaG91bGQgbm90IGJlIGxlc3MgdGhhbiB7MH1cIiA9PiBcIkRlIHdhYXJkZSBtYWcgbmlldCBsYWdlciB6aWpuIGRhbiB7MH1cIlxuLy8gbWF4RXJyb3I6IFwiVGhlIHZhbHVlIHNob3VsZCBub3QgYmUgZ3JlYXRlciB0aGFuIHswfVwiID0+IFwiRGUgd2FhcmRlIG1hZyBuaWV0IGdyb3RlciB6aWpuIGRhbiB7MH1cIlxuLy8gZW1wdHlSb3dzVGV4dDogXCJUaGVyZSBhcmUgbm8gcm93cy5cIiA9PiBcIkVyIHppam4gZ2VlbiByaWplbi5cIlxuLy8gbXVsdGlwbGV0ZXh0X2l0ZW1uYW1lOiBcInRleHRcIiA9PiBcIlNtc1wiXG4vLyBtb2RhbENhbmNlbEJ1dHRvblRleHQ6IFwiQ2FuY2VsXCIgPT4gXCJBbm51bGVyZW5cIlxuLy8gbW9kYWxBcHBseUJ1dHRvblRleHQ6IFwiQXBwbHlcIiA9PiBcIlRvZXBhc3NlblwiXG4vLyBmaWx0ZXJTdHJpbmdQbGFjZWhvbGRlcjogXCJUeXBlIHRvIHNlYXJjaC4uLlwiID0+IFwiVHlwIG9tIHRlIHpvZWtlbi4uLlwiXG4vLyBlbXB0eU1lc3NhZ2U6IFwiTm8gZGF0YSB0byBkaXNwbGF5XCIgPT4gXCJHZWVuIGdlZ2V2ZW5zIG9tIHdlZXIgdGUgZ2V2ZW5cIlxuLy8gbm9FbnRyaWVzVGV4dDogXCJUaGVyZSBhcmUgbm8gZW50cmllcyB5ZXQuXFxuQ2xpY2sgdGhlIGJ1dHRvbiBiZWxvdyB0byBhZGQgYSBuZXcgZW50cnkuXCIgPT4gXCJFciB6aWpuIG5vZyBnZWVuIGluemVuZGluZ2VuLlxcbktsaWsgb3AgZGUgb25kZXJzdGFhbmRlIGtub3Agb20gZWVuIG5pZXV3IGl0ZW0gdG9lIHRlIHZvZWdlbi5cIlxuLy8gbm9FbnRyaWVzUmVhZG9ubHlUZXh0OiBcIlRoZXJlIGFyZSBubyBlbnRyaWVzLlwiID0+IFwiRXIgemlqbiBnZWVuIGluemVuZGluZ2VuLlwiXG4vLyBtb3JlOiBcIk1vcmVcIiA9PiBcIk1lZXJcIlxuLy8gdGFnYm94RG9uZUJ1dHRvbkNhcHRpb246IFwiT0tcIiA9PiBcIk9LXCJcbi8vIHNlbGVjdFRvUmFua0VtcHR5UmFua2VkQXJlYVRleHQ6IFwiQWxsIGNob2ljZXMgYXJlIHJhbmtlZFwiID0+IFwiQWxsZSBrZXV6ZXMgemlqbiBnZXJhbmdzY2hpa3RcIlxuLy8gc2VsZWN0VG9SYW5rRW1wdHlVbnJhbmtlZEFyZWFUZXh0OiBcIkRyYWcgYW5kIGRyb3AgY2hvaWNlcyBoZXJlIHRvIHJhbmsgdGhlbVwiID0+IFwiRHJhZyBlbiBkcm9wIGtldXplcyBoaWVyIG9tIHplIHRlIHJhbmdzY2hpa2tlblwiLy8gdGFrZVBob3RvQ2FwdGlvbjogXCJUYWtlIFBob3RvXCIgPT4gXCJGb3RvIG1ha2VuXCJcbi8vIGNhbWVyYVBsYWNlSG9sZGVyOiBcIkNsaWNrIHRoZSBidXR0b24gYmVsb3cgdG8gdGFrZSBhIHBob3RvIHVzaW5nIHRoZSBjYW1lcmEuXCIgPT4gXCJLbGlrIG9wIGRlIG9uZGVyc3RhYW5kZSBrbm9wIG9tIGVlbiBmb3RvIHRlIG1ha2VuIG1ldCBkZSBjYW1lcmEuXCJcbi8vIGZpbGVDYW1lcmFEcmFnQXJlYVBsYWNlSG9sZGVyOiBcIkRyYWcgYW5kIGRyb3Agb3Igc2VsZWN0IGEgZmlsZSB0byB1cGxvYWQgb3IgdGFrZSBhIHBob3RvIHVzaW5nIHRoZSBjYW1lcmEuXCIgPT4gXCJTbGVlcCBlbiB6ZXQgbmVlciBvZiBzZWxlY3RlZXIgZWVuIGJlc3RhbmQgb20gdGUgdXBsb2FkZW4gb2YgbWFhayBlZW4gZm90byBtZXQgZGUgY2FtZXJhLlwiXG4vLyByZXBsYWNlRmlsZUNhcHRpb246IFwiUmVwbGFjZSBmaWxlXCIgPT4gXCJCZXN0YW5kIHZlcnZhbmdlblwiXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvbG9jYWxpemF0aW9uL2VuZ2xpc2gudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvbG9jYWxpemF0aW9uL2VuZ2xpc2gudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogZW5nbGlzaFN0cmluZ3MgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiZW5nbGlzaFN0cmluZ3NcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBlbmdsaXNoU3RyaW5nczsgfSk7XG4vLyBVbmNvbW1lbnQgdGhlIGxpbmUgYmVsb3cgaWYgeW91IGNyZWF0ZSBhIGN1c3RvbSBkaWN0aW9uYXJ5XG4vLyBpbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbnZhciBlbmdsaXNoU3RyaW5ncyA9IHtcbiAgICBwYWdlUHJldlRleHQ6IFwiUHJldmlvdXNcIixcbiAgICBwYWdlTmV4dFRleHQ6IFwiTmV4dFwiLFxuICAgIGNvbXBsZXRlVGV4dDogXCJDb21wbGV0ZVwiLFxuICAgIHByZXZpZXdUZXh0OiBcIlByZXZpZXdcIixcbiAgICBlZGl0VGV4dDogXCJFZGl0XCIsXG4gICAgc3RhcnRTdXJ2ZXlUZXh0OiBcIlN0YXJ0XCIsXG4gICAgb3RoZXJJdGVtVGV4dDogXCJPdGhlciAoZGVzY3JpYmUpXCIsXG4gICAgbm9uZUl0ZW1UZXh0OiBcIk5vbmVcIixcbiAgICBzZWxlY3RBbGxJdGVtVGV4dDogXCJTZWxlY3QgQWxsXCIsXG4gICAgcHJvZ3Jlc3NUZXh0OiBcIlBhZ2UgezB9IG9mIHsxfVwiLFxuICAgIGluZGV4VGV4dDogXCJ7MH0gb2YgezF9XCIsXG4gICAgcGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0OiBcInswfSBvZiB7MX1cIixcbiAgICBwYW5lbER5bmFtaWNUYWJUZXh0Rm9ybWF0OiBcIlBhbmVsIHtwYW5lbEluZGV4fVwiLFxuICAgIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCJBbnN3ZXJlZCB7MH0vezF9IHF1ZXN0aW9uc1wiLFxuICAgIGVtcHR5U3VydmV5OiBcIlRoZSBzdXJ2ZXkgZG9lc24ndCBjb250YWluIHZpc2libGUgcGFnZXMgb3IgcXVlc3Rpb25zLlwiLFxuICAgIGNvbXBsZXRpbmdTdXJ2ZXk6IFwiVGhhbmsgeW91IGZvciBjb21wbGV0aW5nIHRoZSBzdXJ2ZXlcIixcbiAgICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOiBcIk91ciByZWNvcmRzIHNob3cgdGhhdCB5b3UgaGF2ZSBhbHJlYWR5IGNvbXBsZXRlZCB0aGlzIHN1cnZleS5cIixcbiAgICBsb2FkaW5nU3VydmV5OiBcIkxvYWRpbmcgU3VydmV5Li4uXCIsXG4gICAgcGxhY2Vob2xkZXI6IFwiU2VsZWN0Li4uXCIsXG4gICAgcmF0aW5nT3B0aW9uc0NhcHRpb246IFwiU2VsZWN0Li4uXCIsXG4gICAgdmFsdWU6IFwidmFsdWVcIixcbiAgICByZXF1aXJlZEVycm9yOiBcIlJlc3BvbnNlIHJlcXVpcmVkLlwiLFxuICAgIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcIlJlc3BvbnNlIHJlcXVpcmVkOiBhbnN3ZXIgYXQgbGVhc3Qgb25lIHF1ZXN0aW9uLlwiLFxuICAgIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwiUmVzcG9uc2UgcmVxdWlyZWQ6IGFuc3dlciBxdWVzdGlvbnMgaW4gYWxsIHJvd3MuXCIsXG4gICAgbnVtZXJpY0Vycm9yOiBcIlRoZSB2YWx1ZSBzaG91bGQgYmUgbnVtZXJpYy5cIixcbiAgICBtaW5FcnJvcjogXCJUaGUgdmFsdWUgc2hvdWxkIG5vdCBiZSBsZXNzIHRoYW4gezB9XCIsXG4gICAgbWF4RXJyb3I6IFwiVGhlIHZhbHVlIHNob3VsZCBub3QgYmUgZ3JlYXRlciB0aGFuIHswfVwiLFxuICAgIHRleHRNaW5MZW5ndGg6IFwiUGxlYXNlIGVudGVyIGF0IGxlYXN0IHswfSBjaGFyYWN0ZXIocykuXCIsXG4gICAgdGV4dE1heExlbmd0aDogXCJQbGVhc2UgZW50ZXIgbm8gbW9yZSB0aGFuIHswfSBjaGFyYWN0ZXIocykuXCIsXG4gICAgdGV4dE1pbk1heExlbmd0aDogXCJQbGVhc2UgZW50ZXIgYXQgbGVhc3QgezB9IGFuZCBubyBtb3JlIHRoYW4gezF9IGNoYXJhY3RlcnMuXCIsXG4gICAgbWluUm93Q291bnRFcnJvcjogXCJQbGVhc2UgZmlsbCBpbiBhdCBsZWFzdCB7MH0gcm93KHMpLlwiLFxuICAgIG1pblNlbGVjdEVycm9yOiBcIlBsZWFzZSBzZWxlY3QgYXQgbGVhc3QgezB9IHZhcmlhbnQocykuXCIsXG4gICAgbWF4U2VsZWN0RXJyb3I6IFwiUGxlYXNlIHNlbGVjdCBubyBtb3JlIHRoYW4gezB9IHZhcmlhbnQocykuXCIsXG4gICAgbnVtZXJpY01pbk1heDogXCJUaGUgJ3swfScgc2hvdWxkIGJlIGF0IGxlYXN0IHsxfSBhbmQgYXQgbW9zdCB7Mn1cIixcbiAgICBudW1lcmljTWluOiBcIlRoZSAnezB9JyBzaG91bGQgYmUgYXQgbGVhc3QgezF9XCIsXG4gICAgbnVtZXJpY01heDogXCJUaGUgJ3swfScgc2hvdWxkIGJlIGF0IG1vc3QgezF9XCIsXG4gICAgaW52YWxpZEVtYWlsOiBcIlBsZWFzZSBlbnRlciBhIHZhbGlkIGUtbWFpbCBhZGRyZXNzLlwiLFxuICAgIGludmFsaWRFeHByZXNzaW9uOiBcIlRoZSBleHByZXNzaW9uOiB7MH0gc2hvdWxkIHJldHVybiAndHJ1ZScuXCIsXG4gICAgdXJsUmVxdWVzdEVycm9yOiBcIlRoZSByZXF1ZXN0IHJldHVybmVkIGVycm9yICd7MH0nLiB7MX1cIixcbiAgICB1cmxHZXRDaG9pY2VzRXJyb3I6IFwiVGhlIHJlcXVlc3QgcmV0dXJuZWQgZW1wdHkgZGF0YSBvciB0aGUgJ3BhdGgnIHByb3BlcnR5IGlzIGluY29ycmVjdFwiLFxuICAgIGV4Y2VlZE1heFNpemU6IFwiVGhlIGZpbGUgc2l6ZSBzaG91bGQgbm90IGV4Y2VlZCB7MH0uXCIsXG4gICAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIlJlc3BvbnNlIHJlcXVpcmVkOiBlbnRlciBhbm90aGVyIHZhbHVlLlwiLFxuICAgIHVwbG9hZGluZ0ZpbGU6IFwiWW91ciBmaWxlIGlzIHVwbG9hZGluZy4gUGxlYXNlIHdhaXQgc2V2ZXJhbCBzZWNvbmRzIGFuZCB0cnkgYWdhaW4uXCIsXG4gICAgbG9hZGluZ0ZpbGU6IFwiTG9hZGluZy4uLlwiLFxuICAgIGNob29zZUZpbGU6IFwiQ2hvb3NlIGZpbGUocykuLi5cIixcbiAgICBub0ZpbGVDaG9zZW46IFwiTm8gZmlsZSBjaG9zZW5cIixcbiAgICBmaWxlRHJhZ0FyZWFQbGFjZWhvbGRlcjogXCJEcmFnIGFuZCBkcm9wIGEgZmlsZSBoZXJlIG9yIGNsaWNrIHRoZSBidXR0b24gYmVsb3cgdG8gc2VsZWN0IGEgZmlsZSB0byB1cGxvYWQuXCIsXG4gICAgY29uZmlybURlbGV0ZTogXCJEbyB5b3Ugd2FudCB0byBkZWxldGUgdGhlIHJlY29yZD9cIixcbiAgICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcIlRoaXMgdmFsdWUgc2hvdWxkIGJlIHVuaXF1ZS5cIixcbiAgICBhZGRDb2x1bW46IFwiQWRkIENvbHVtblwiLFxuICAgIGFkZFJvdzogXCJBZGQgUm93XCIsXG4gICAgcmVtb3ZlUm93OiBcIlJlbW92ZVwiLFxuICAgIGVtcHR5Um93c1RleHQ6IFwiVGhlcmUgYXJlIG5vIHJvd3MuXCIsXG4gICAgYWRkUGFuZWw6IFwiQWRkIG5ld1wiLFxuICAgIHJlbW92ZVBhbmVsOiBcIlJlbW92ZVwiLFxuICAgIGNob2ljZXNfSXRlbTogXCJpdGVtXCIsXG4gICAgbWF0cml4X2NvbHVtbjogXCJDb2x1bW5cIixcbiAgICBtYXRyaXhfcm93OiBcIlJvd1wiLFxuICAgIG11bHRpcGxldGV4dF9pdGVtbmFtZTogXCJ0ZXh0XCIsXG4gICAgc2F2aW5nRGF0YTogXCJUaGUgcmVzdWx0cyBhcmUgYmVpbmcgc2F2ZWQgb24gdGhlIHNlcnZlci4uLlwiLFxuICAgIHNhdmluZ0RhdGFFcnJvcjogXCJBbiBlcnJvciBvY2N1cnJlZCBhbmQgd2UgY291bGQgbm90IHNhdmUgdGhlIHJlc3VsdHMuXCIsXG4gICAgc2F2aW5nRGF0YVN1Y2Nlc3M6IFwiVGhlIHJlc3VsdHMgd2VyZSBzYXZlZCBzdWNjZXNzZnVsbHkhXCIsXG4gICAgc2F2ZUFnYWluQnV0dG9uOiBcIlRyeSBhZ2FpblwiLFxuICAgIHRpbWVyTWluOiBcIm1pblwiLFxuICAgIHRpbWVyU2VjOiBcInNlY1wiLFxuICAgIHRpbWVyU3BlbnRBbGw6IFwiWW91IGhhdmUgc3BlbnQgezB9IG9uIHRoaXMgcGFnZSBhbmQgezF9IGluIHRvdGFsLlwiLFxuICAgIHRpbWVyU3BlbnRQYWdlOiBcIllvdSBoYXZlIHNwZW50IHswfSBvbiB0aGlzIHBhZ2UuXCIsXG4gICAgdGltZXJTcGVudFN1cnZleTogXCJZb3UgaGF2ZSBzcGVudCB7MH0gaW4gdG90YWwuXCIsXG4gICAgdGltZXJMaW1pdEFsbDogXCJZb3UgaGF2ZSBzcGVudCB7MH0gb2YgezF9IG9uIHRoaXMgcGFnZSBhbmQgezJ9IG9mIHszfSBpbiB0b3RhbC5cIixcbiAgICB0aW1lckxpbWl0UGFnZTogXCJZb3UgaGF2ZSBzcGVudCB7MH0gb2YgezF9IG9uIHRoaXMgcGFnZS5cIixcbiAgICB0aW1lckxpbWl0U3VydmV5OiBcIllvdSBoYXZlIHNwZW50IHswfSBvZiB7MX0gaW4gdG90YWwuXCIsXG4gICAgY2xlYXJDYXB0aW9uOiBcIkNsZWFyXCIsXG4gICAgc2lnbmF0dXJlUGxhY2VIb2xkZXI6IFwiU2lnbiBoZXJlXCIsXG4gICAgY2hvb3NlRmlsZUNhcHRpb246IFwiU2VsZWN0IEZpbGVcIixcbiAgICB0YWtlUGhvdG9DYXB0aW9uOiBcIlRha2UgUGhvdG9cIixcbiAgICBjYW1lcmFQbGFjZUhvbGRlcjogXCJDbGljayB0aGUgYnV0dG9uIGJlbG93IHRvIHRha2UgYSBwaG90byB1c2luZyB0aGUgY2FtZXJhLlwiLFxuICAgIGZpbGVDYW1lcmFEcmFnQXJlYVBsYWNlSG9sZGVyOiBcIkRyYWcgYW5kIGRyb3Agb3Igc2VsZWN0IGEgZmlsZSB0byB1cGxvYWQgb3IgdGFrZSBhIHBob3RvIHVzaW5nIHRoZSBjYW1lcmEuXCIsXG4gICAgcmVwbGFjZUZpbGVDYXB0aW9uOiBcIlJlcGxhY2UgZmlsZVwiLFxuICAgIHJlbW92ZUZpbGVDYXB0aW9uOiBcIlJlbW92ZSB0aGlzIGZpbGVcIixcbiAgICBib29sZWFuQ2hlY2tlZExhYmVsOiBcIlllc1wiLFxuICAgIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCJOb1wiLFxuICAgIGNvbmZpcm1SZW1vdmVGaWxlOiBcIkFyZSB5b3Ugc3VyZSB0aGF0IHlvdSB3YW50IHRvIHJlbW92ZSB0aGlzIGZpbGU6IHswfT9cIixcbiAgICBjb25maXJtUmVtb3ZlQWxsRmlsZXM6IFwiQXJlIHlvdSBzdXJlIHRoYXQgeW91IHdhbnQgdG8gcmVtb3ZlIGFsbCBmaWxlcz9cIixcbiAgICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwiUXVlc3Rpb24gVGl0bGVcIixcbiAgICBtb2RhbENhbmNlbEJ1dHRvblRleHQ6IFwiQ2FuY2VsXCIsXG4gICAgbW9kYWxBcHBseUJ1dHRvblRleHQ6IFwiQXBwbHlcIixcbiAgICBmaWx0ZXJTdHJpbmdQbGFjZWhvbGRlcjogXCJUeXBlIHRvIHNlYXJjaC4uLlwiLFxuICAgIGVtcHR5TWVzc2FnZTogXCJObyBkYXRhIHRvIGRpc3BsYXlcIixcbiAgICBub0VudHJpZXNUZXh0OiBcIlRoZXJlIGFyZSBubyBlbnRyaWVzIHlldC5cXG5DbGljayB0aGUgYnV0dG9uIGJlbG93IHRvIGFkZCBhIG5ldyBlbnRyeS5cIixcbiAgICBub0VudHJpZXNSZWFkb25seVRleHQ6IFwiVGhlcmUgYXJlIG5vIGVudHJpZXMuXCIsXG4gICAgbW9yZTogXCJNb3JlXCIsXG4gICAgdGFnYm94RG9uZUJ1dHRvbkNhcHRpb246IFwiT0tcIixcbiAgICBzZWxlY3RUb1JhbmtFbXB0eVJhbmtlZEFyZWFUZXh0OiBcIkFsbCBjaG9pY2VzIGFyZSByYW5rZWRcIixcbiAgICBzZWxlY3RUb1JhbmtFbXB0eVVucmFua2VkQXJlYVRleHQ6IFwiRHJhZyBhbmQgZHJvcCBjaG9pY2VzIGhlcmUgdG8gcmFuayB0aGVtXCIsXG59O1xuLy8gVW5jb21tZW50IHRoZSBsaW5lcyBiZWxvdyBpZiB5b3UgY3JlYXRlIGEgY3VzdG9tIGRpY3Rpb25hcnkuXG4vLyBSZXBsYWNlIFwiZW5cIiB3aXRoIGEgY3VzdG9tIGxvY2FsZSBjb2RlIChmb3IgZXhhbXBsZSwgXCJmclwiIG9yIFwiZGVcIiksXG4vLyBSZXBsYWNlIGBlbmdsaXNoU3RyaW5nc2Agd2l0aCB0aGUgbmFtZSBvZiB0aGUgdmFyaWFibGUgdGhhdCBjb250YWlucyB0aGUgY3VzdG9tIGRpY3Rpb25hcnkuXG4vLyBzdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcImVuXCJdID0gZW5nbGlzaFN0cmluZ3M7XG4vLyBzdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJlblwiXSA9IFwiRW5nbGlzaFwiO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL2xvY2FsaXphdGlvbi9lc3Rvbmlhbi50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvbG9jYWxpemF0aW9uL2VzdG9uaWFuLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBlc3RvbmlhblN1cnZleVN0cmluZ3MgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiZXN0b25pYW5TdXJ2ZXlTdHJpbmdzXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZXN0b25pYW5TdXJ2ZXlTdHJpbmdzOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBzdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgc3VydmV5LWNvcmUgKi8gXCIuL3NyYy9lbnRyaWVzL2NvcmUudHNcIik7XG5cbnZhciBlc3RvbmlhblN1cnZleVN0cmluZ3MgPSB7XG4gICAgcGFnZVByZXZUZXh0OiBcIlRhZ2FzaVwiLFxuICAgIHBhZ2VOZXh0VGV4dDogXCJFZGFzaVwiLFxuICAgIGNvbXBsZXRlVGV4dDogXCJMw7VwZXRhXCIsXG4gICAgcHJldmlld1RleHQ6IFwiRWVsdmFhZGVcIixcbiAgICBlZGl0VGV4dDogXCJNdXVkYVwiLFxuICAgIHN0YXJ0U3VydmV5VGV4dDogXCJBbHVzdGFcIixcbiAgICBvdGhlckl0ZW1UZXh0OiBcIk11dSAodMOkcHN1c3RhKVwiLFxuICAgIG5vbmVJdGVtVGV4dDogXCJNaXR0ZSBtaWRhZ2lcIixcbiAgICBzZWxlY3RBbGxJdGVtVGV4dDogXCJWYWxpIGvDtWlrXCIsXG4gICAgcHJvZ3Jlc3NUZXh0OiBcIkxlaGVrw7xsZyB7MH0vezF9XCIsXG4gICAgaW5kZXhUZXh0OiBcInswfSB7MX1cIixcbiAgICBwYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ6IFwiS2lyamUgezB9L3sxfVwiLFxuICAgIHBhbmVsRHluYW1pY1RhYlRleHRGb3JtYXQ6IFwiUGFuZWVsIHtwYW5lbEluZGV4fVwiLFxuICAgIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCJWYXN0YXR1ZCB7MH0ga8O8c2ltdXN0IHsxfS1zdFwiLFxuICAgIGVtcHR5U3VydmV5OiBcIlNlbGxlcyB1dXJpbmd1cyBlaSBvbGUgw7xodGtpIG7DpGh0YXZhdCBsZWhla8O8bGdlIHbDtWkga8O8c2ltdXN0LlwiLFxuICAgIGNvbXBsZXRpbmdTdXJ2ZXk6IFwiQWl0w6RoLCBldCB2YXN0YXNpZCBhbmtlZWRpbGUhXCIsXG4gICAgY29tcGxldGluZ1N1cnZleUJlZm9yZTogXCJNZWllIGFuZG1ldGVsIG9sZWQgc2Egc2VsbGVsZSBhbmtlZWRpbGUganViYSB2YXN0YW51ZC5cIixcbiAgICBsb2FkaW5nU3VydmV5OiBcIkxhZW4gYW5rZWV0aS4uLlwiLFxuICAgIHBsYWNlaG9sZGVyOiBcIlZhbGkuLi5cIixcbiAgICByYXRpbmdPcHRpb25zQ2FwdGlvbjogXCJWYWxpbWEuLi5cIixcbiAgICB2YWx1ZTogXCJ2w6TDpHJ0dXNcIixcbiAgICByZXF1aXJlZEVycm9yOiBcIlBhbHVuIHZhc3RhIGvDvHNpbXVzZWxlLlwiLFxuICAgIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcIlBhbHVuIHZhc3RhIHbDpGhlbWFsdCDDvGhlbGUga8O8c2ltdXNlbGUuXCIsXG4gICAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCJQYWx1biBhbm5hIHZhc3R1cyBpZ2FsIHJlYWwuXCIsXG4gICAgbnVtZXJpY0Vycm9yOiBcIlNlZSBwZWFrcyBvbGVtYSBudW1icmlsaW5lIHbDpMOkcnR1cy5cIixcbiAgICBtaW5FcnJvcjogXCJWw6TDpHJ0dXMgZWkgdG9oaWtzIG9sbGEgdsOkaWtzZW0ga3VpIHswfVwiLFxuICAgIG1heEVycm9yOiBcIlbDpMOkcnR1cyBlaSB0b2hpa3Mgb2xsYSBzdXVyZW0ga3VpIHswfVwiLFxuICAgIHRleHRNaW5MZW5ndGg6IFwiUGFsdW4gc2lzZXN0YSB2w6RoZW1hbHQgezB9IHTDpGhlbcOkcmtpLlwiLFxuICAgIHRleHRNYXhMZW5ndGg6IFwiUGFsdW4gw6RyYSBzaXNlc3RhIHJvaGtlbSBrdWkgezB9IHTDpGhlbcOkcmtpLlwiLFxuICAgIHRleHRNaW5NYXhMZW5ndGg6IFwiU2lzZXN0YSBwYWx1biB7MH0gLSB7MX0gdMOkaGVtw6Rya2kuXCIsXG4gICAgbWluUm93Q291bnRFcnJvcjogXCJTaXNlc3RhIHBsYXVuIHbDpGhlbWFsdCB7MH0gcmlkYS5cIixcbiAgICBtaW5TZWxlY3RFcnJvcjogXCJQYWx1biB2YWxpIHbDpGhlbWFsdCB7MH0gdmFyaWFudGkuXCIsXG4gICAgbWF4U2VsZWN0RXJyb3I6IFwiUGFsdW4gdmFsaSBrw7VpZ2Ugcm9oa2VtIHswfSB2YXJpYW50aS5cIixcbiAgICBudW1lcmljTWluTWF4OiBcIid7MH0nIHBlYWtzIG9sZW1hIHbDtXJkbmUgdsO1aSBzdXVyZW0ga3VpIHsxfSBqYSB2w7VyZG5lIHbDtWkgdsOkaWtzZW0ga3VpIHsyfVwiLFxuICAgIG51bWVyaWNNaW46IFwiJ3swfScgcGVha3Mgb2xlbWEgdsO1cmRuZSB2w7VpIHN1dXJlbSBrdWkgezF9XCIsXG4gICAgbnVtZXJpY01heDogXCInezB9JyBwZWFrcyBvbGVtYSB2w7VybmRlIHbDtWkgdsOkaWtzZW0ga3VpIHsxfVwiLFxuICAgIGludmFsaWRFbWFpbDogXCJTaXNlc3RhIHBhbHVuIGtvcnJla3RuZSBlLXBvc3RpIGFhZHJlc3MuXCIsXG4gICAgaW52YWxpZEV4cHJlc3Npb246IFwiQXZhbGRpczogezB9IHBlYWtzIHRhZ2FzdGFtYSB0w7Vlc2UuXCIsXG4gICAgdXJsUmVxdWVzdEVycm9yOiBcIlRhb3RsdXMgdGFnYXN0YXMgdmVhIOKAnnswfeKAnS4gezF9XCIsXG4gICAgdXJsR2V0Q2hvaWNlc0Vycm9yOiBcIlRhb3RsdXMgdGFnYXN0YXMgdMO8aGphZCBhbmRtZWQgdsO1aSBhdHJpYnV1dCAncGF0aCcgb24gdmFsZVwiLFxuICAgIGV4Y2VlZE1heFNpemU6IFwiRmFpbGkgc3V1cnVzIGVpIHRvaGkgw7xsZXRhZGEgezB9LlwiLFxuICAgIG90aGVyUmVxdWlyZWRFcnJvcjogXCJTaXNlc3RhIHBhbHVuIG11dSB2YXN0dXMuXCIsXG4gICAgdXBsb2FkaW5nRmlsZTogXCJTaW51IGZhaWwgbGFlYiDDvGxlcy4gUGFsdW4gb290YSBtw7VuZWQgc2VrdW5kaWQgbmluZyBwcm9vdmkgc2VlasOkcmVsIHV1ZXN0aS5cIixcbiAgICBsb2FkaW5nRmlsZTogXCJMYWVuLi4uXCIsXG4gICAgY2hvb3NlRmlsZTogXCJWYWxpIGZhaWwoaWQpLi4uXCIsXG4gICAgbm9GaWxlQ2hvc2VuOiBcIkZhaWxpIHBvbGUgdmFsaXR1ZFwiLFxuICAgIGZpbGVEcmFnQXJlYVBsYWNlaG9sZGVyOiBcIlB1a3NlZXJpZ2UgZmFpbCBzaWlhIHbDtWkga2zDtXBzYWtlIGFsbG9sZXZhdCBudXBwdSBqYSB2YWxpZ2Ugw7xsZXNsYWFkaXRhdiBmYWlsLlwiLFxuICAgIGNvbmZpcm1EZWxldGU6IFwiS2FzIHRhaGFkIGtpcmplIGt1c3R1dGFkYT9cIixcbiAgICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcIlNlZSB2w6TDpHJ0dXMgcGVhYiBvbGVtYSB1bmlrYWFsbmUuXCIsXG4gICAgYWRkQ29sdW1uOiBcIkxpc2EgdmVlcmdcIixcbiAgICBhZGRSb3c6IFwiTGlzYSByaWRhXCIsXG4gICAgcmVtb3ZlUm93OiBcIkVlbWFsZGFcIixcbiAgICBlbXB0eVJvd3NUZXh0OiBcIlJpZHUgcG9sZS5cIixcbiAgICBhZGRQYW5lbDogXCJMaXNhIHV1c1wiLFxuICAgIHJlbW92ZVBhbmVsOiBcIkVlbWFsZGFcIixcbiAgICBjaG9pY2VzX0l0ZW06IFwiw7xrc3VzXCIsXG4gICAgbWF0cml4X2NvbHVtbjogXCJWZWVyZ1wiLFxuICAgIG1hdHJpeF9yb3c6IFwiUmlkYVwiLFxuICAgIG11bHRpcGxldGV4dF9pdGVtbmFtZTogXCJUZWtzdFwiLFxuICAgIHNhdmluZ0RhdGE6IFwiU2FsdmVzdGFuIGFuZG1lZCBzZXJ2ZXJpcy4uLlwiLFxuICAgIHNhdmluZ0RhdGFFcnJvcjogXCJUZWtraXMgdmlnYSBuaW5nIG1lIGVpIHNhYW51ZCB2YXN0dXNlaWQgc2FsdmVzdGFkYS5cIixcbiAgICBzYXZpbmdEYXRhU3VjY2VzczogXCJWYXN0dXN0ZSBzYWx2ZXN0YW1pbmUgw7VubmVzdHVzIVwiLFxuICAgIHNhdmVBZ2FpbkJ1dHRvbjogXCJQcm9vdmkgdXVlc3RpXCIsXG4gICAgdGltZXJNaW46IFwibWluXCIsXG4gICAgdGltZXJTZWM6IFwic2VrXCIsXG4gICAgdGltZXJTcGVudEFsbDogXCJPbGVkIHZlZXRudWQgezB9IHNlbGxlbCBsZWhlbCBuaW5nIGtva2t1IHsxfS5cIixcbiAgICB0aW1lclNwZW50UGFnZTogXCJPbGVkIHZlZXRudWQgezB9IHNlbGxlbCBsZWhlbC5cIixcbiAgICB0aW1lclNwZW50U3VydmV5OiBcIk9sZWQgdmVldG51ZCB7MH0ga29ra3UuXCIsXG4gICAgdGltZXJMaW1pdEFsbDogXCJPbGVkIGt1bHV0YW51ZCB7MH0gdsO1aW1hbGlrdXN0IHsxfSBzZWxsZWwgbGVoZWwgbmluZyB7Mn0gdsO1aW1hbGlrdXN0IHszfSBrb2trdS5cIixcbiAgICB0aW1lckxpbWl0UGFnZTogXCJPbGVkIGt1bHV0YW51ZCB7MH0gdsO1aW1hbGlrdXN0IHsxfSBzZWxsZWwgbGVoZWwuXCIsXG4gICAgdGltZXJMaW1pdFN1cnZleTogXCJPbGVkIGt1bHV0YW51ZCB7MH0gdsO1aW1hbGlrdXN0IHsxfSBrb2d1YWphc3QuXCIsXG4gICAgY2xlYXJDYXB0aW9uOiBcIlB1aGFzdGFcIixcbiAgICBzaWduYXR1cmVQbGFjZUhvbGRlcjogXCJBbGxraXJqYXN0YSBzaWluXCIsXG4gICAgY2hvb3NlRmlsZUNhcHRpb246IFwiVmFsaSBmYWlsXCIsXG4gICAgdGFrZVBob3RvQ2FwdGlvbjogXCJQaWxkaXN0YW1pbmVcIixcbiAgICBjYW1lcmFQbGFjZUhvbGRlcjogXCJLYWFtZXJhIGFiaWwgcGlsZGlzdGFtaXNla3Mga2zDtXBzYWtlIGFsbG9sZXZhdCBudXBwdS5cIixcbiAgICBmaWxlQ2FtZXJhRHJhZ0FyZWFQbGFjZUhvbGRlcjogXCJQdWtzZWVyaWdlIHbDtWkgdmFsaWdlIMO8bGVzbGFhZGl0YXYgZmFpbCB2w7VpIHBpbGRpc3RhZ2Ugc2VkYSBrYWFtZXJhIGFiaWwuXCIsXG4gICAgcmVwbGFjZUZpbGVDYXB0aW9uOiBcIkFzZW5kYSBmYWlsXCIsXG4gICAgcmVtb3ZlRmlsZUNhcHRpb246IFwiRWVtYWxkYSBzZWUgZmFpbFwiLFxuICAgIGJvb2xlYW5DaGVja2VkTGFiZWw6IFwiSmFoXCIsXG4gICAgYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcIkVpXCIsXG4gICAgY29uZmlybVJlbW92ZUZpbGU6IFwiT2xlZCBzYSBraW5kZWwsIGV0IHNvb3ZpZCBzZWxsZSBmYWlsaSBlZW1hbGRhZGE6IHswfT9cIixcbiAgICBjb25maXJtUmVtb3ZlQWxsRmlsZXM6IFwiT2xlZCBzYSBraW5kZWwsIGV0IHNvb3ZpZCBlZW1hbGRhZGEga8O1aWsgZmFpbGlkP1wiLFxuICAgIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCJLw7xzaW11c2UgcGVhbGtpcmlcIixcbiAgICBtb2RhbENhbmNlbEJ1dHRvblRleHQ6IFwiVMO8aGlzdGFtYVwiLFxuICAgIG1vZGFsQXBwbHlCdXR0b25UZXh0OiBcIktvaGFsZGF0YVwiLFxuICAgIGZpbHRlclN0cmluZ1BsYWNlaG9sZGVyOiBcIlRpcHBpZ2Ugb3RzaW1pc2Vrcy4uLlwiLFxuICAgIGVtcHR5TWVzc2FnZTogXCJLdXZhdGF2YWlkIGFuZG1laWQgcG9sZVwiLFxuICAgIG5vRW50cmllc1RleHQ6IFwiU2lzc2VrYW5kZWlkIHZlZWwgZWkgb2xlLlxcblV1ZSBraXJqZSBsaXNhbWlzZWtzIGtsw7Vwc2FrZSBhbGxvbGV2YXQgbnVwcHUuXCIsXG4gICAgbm9FbnRyaWVzUmVhZG9ubHlUZXh0OiBcIktpcmplaWQgZWkgb2xlLlwiLFxuICAgIG1vcmU6IFwiUm9oa2VtXCIsXG4gICAgdGFnYm94RG9uZUJ1dHRvbkNhcHRpb246IFwiT0tcIixcbiAgICBzZWxlY3RUb1JhbmtFbXB0eVJhbmtlZEFyZWFUZXh0OiBcIkvDtWlrIHZhbGlrdWQgb24gasOkcmplc3RhdHVkXCIsXG4gICAgc2VsZWN0VG9SYW5rRW1wdHlVbnJhbmtlZEFyZWFUZXh0OiBcIkxvaGlzdGFnZSB2YWxpa3VpZCBzaWlhLCBldCBuZWlkIGrDpHJqZXN0YWRhXCJcbn07XG5zdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3VydmV5TG9jYWxpemF0aW9uXCJdLmxvY2FsZXNbXCJldFwiXSA9IGVzdG9uaWFuU3VydmV5U3RyaW5ncztcbnN1cnZleV9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdXJ2ZXlMb2NhbGl6YXRpb25cIl0ubG9jYWxlTmFtZXNbXCJldFwiXSA9IFwiZWVzdGkga2VlbFwiO1xuLy8gVGhlIGZvbGxvd2luZyBzdHJpbmdzIGhhdmUgYmVlbiB0cmFuc2xhdGVkIGJ5IGEgbWFjaGluZSB0cmFuc2xhdGlvbiBzZXJ2aWNlXG4vLyBSZW1vdmUgdGhvc2Ugc3RyaW5ncyB0aGF0IHlvdSBoYXZlIGNvcnJlY3RlZCBtYW51YWxseVxuLy8gaW5kZXhUZXh0OiBcInswfSBvZiB7MX1cIiA9PiBcInswfSB7MX1cIlxuLy8gcGFuZWxEeW5hbWljVGFiVGV4dEZvcm1hdDogXCJQYW5lbCB7cGFuZWxJbmRleH1cIiA9PiBcIlBhbmVlbCB7cGFuZWxJbmRleH1cIlxuLy8gcmF0aW5nT3B0aW9uc0NhcHRpb246IFwiU2VsZWN0Li4uXCIgPT4gXCJWYWxpbWEuLi5cIlxuLy8gbWluRXJyb3I6IFwiVGhlIHZhbHVlIHNob3VsZCBub3QgYmUgbGVzcyB0aGFuIHswfVwiID0+IFwiVsOkw6RydHVzIGVpIHRvaGlrcyBvbGxhIHbDpGlrc2VtIGt1aSB7MH1cIlxuLy8gbWF4RXJyb3I6IFwiVGhlIHZhbHVlIHNob3VsZCBub3QgYmUgZ3JlYXRlciB0aGFuIHswfVwiID0+IFwiVsOkw6RydHVzIGVpIHRvaGlrcyBvbGxhIHN1dXJlbSBrdWkgezB9XCJcbi8vIGZpbGVEcmFnQXJlYVBsYWNlaG9sZGVyOiBcIkRyYWcgYW5kIGRyb3AgYSBmaWxlIGhlcmUgb3IgY2xpY2sgdGhlIGJ1dHRvbiBiZWxvdyBhbmQgY2hvb3NlIGEgZmlsZSB0byB1cGxvYWQuXCIgPT4gXCJQdWtzZWVyaWdlIGZhaWwgc2lpYSB2w7VpIGtsw7Vwc2FrZSBhbGxvbGV2YXQgbnVwcHUgamEgdmFsaWdlIMO8bGVzbGFhZGl0YXYgZmFpbC5cIlxuLy8gZW1wdHlSb3dzVGV4dDogXCJUaGVyZSBhcmUgbm8gcm93cy5cIiA9PiBcIlJpZHUgcG9sZS5cIlxuLy8gbXVsdGlwbGV0ZXh0X2l0ZW1uYW1lOiBcInRleHRcIiA9PiBcIlRla3N0XCJcbi8vIHNpZ25hdHVyZVBsYWNlSG9sZGVyOiBcIlNpZ24gaGVyZVwiID0+IFwiQWxsa2lyamFzdGEgc2lpblwiXG4vLyBtb2RhbENhbmNlbEJ1dHRvblRleHQ6IFwiQ2FuY2VsXCIgPT4gXCJUw7xoaXN0YW1hXCJcbi8vIG1vZGFsQXBwbHlCdXR0b25UZXh0OiBcIkFwcGx5XCIgPT4gXCJLb2hhbGRhdGFcIlxuLy8gZmlsdGVyU3RyaW5nUGxhY2Vob2xkZXI6IFwiVHlwZSB0byBzZWFyY2guLi5cIiA9PiBcIlRpcHBpZ2Ugb3RzaW1pc2Vrcy4uLlwiXG4vLyBlbXB0eU1lc3NhZ2U6IFwiTm8gZGF0YSB0byBkaXNwbGF5XCIgPT4gXCJLdXZhdGF2YWlkIGFuZG1laWQgcG9sZVwiXG4vLyBub0VudHJpZXNUZXh0OiBcIlRoZXJlIGFyZSBubyBlbnRyaWVzIHlldC5cXG5DbGljayB0aGUgYnV0dG9uIGJlbG93IHRvIGFkZCBhIG5ldyBlbnRyeS5cIiA9PiBcIlNpc3Nla2FuZGVpZCB2ZWVsIGVpIG9sZS5cXG5VdWUga2lyamUgbGlzYW1pc2VrcyBrbMO1cHNha2UgYWxsb2xldmF0IG51cHB1LlwiXG4vLyBub0VudHJpZXNSZWFkb25seVRleHQ6IFwiVGhlcmUgYXJlIG5vIGVudHJpZXMuXCIgPT4gXCJLaXJqZWlkIGVpIG9sZS5cIlxuLy8gbW9yZTogXCJNb3JlXCIgPT4gXCJSb2hrZW1cIlxuLy8gdGFnYm94RG9uZUJ1dHRvbkNhcHRpb246IFwiT0tcIiA9PiBcIk9LXCJcbi8vIHNlbGVjdFRvUmFua0VtcHR5UmFua2VkQXJlYVRleHQ6IFwiQWxsIGNob2ljZXMgYXJlIHJhbmtlZFwiID0+IFwiS8O1aWsgdmFsaWt1ZCBvbiBqw6RyamVzdGF0dWRcIlxuLy8gc2VsZWN0VG9SYW5rRW1wdHlVbnJhbmtlZEFyZWFUZXh0OiBcIkRyYWcgYW5kIGRyb3AgY2hvaWNlcyBoZXJlIHRvIHJhbmsgdGhlbVwiID0+IFwiTG9oaXN0YWdlIHZhbGlrdWlkIHNpaWEsIGV0IG5laWQgasOkcmplc3RhZGFcIi8vIHRha2VQaG90b0NhcHRpb246IFwiVGFrZSBQaG90b1wiID0+IFwiUGlsZGlzdGFtaW5lXCJcbi8vIGNhbWVyYVBsYWNlSG9sZGVyOiBcIkNsaWNrIHRoZSBidXR0b24gYmVsb3cgdG8gdGFrZSBhIHBob3RvIHVzaW5nIHRoZSBjYW1lcmEuXCIgPT4gXCJLYWFtZXJhIGFiaWwgcGlsZGlzdGFtaXNla3Mga2zDtXBzYWtlIGFsbG9sZXZhdCBudXBwdS5cIlxuLy8gZmlsZUNhbWVyYURyYWdBcmVhUGxhY2VIb2xkZXI6IFwiRHJhZyBhbmQgZHJvcCBvciBzZWxlY3QgYSBmaWxlIHRvIHVwbG9hZCBvciB0YWtlIGEgcGhvdG8gdXNpbmcgdGhlIGNhbWVyYS5cIiA9PiBcIlB1a3NlZXJpZ2UgdsO1aSB2YWxpZ2Ugw7xsZXNsYWFkaXRhdiBmYWlsIHbDtWkgcGlsZGlzdGFnZSBzZWRhIGthYW1lcmEgYWJpbC5cIlxuLy8gcmVwbGFjZUZpbGVDYXB0aW9uOiBcIlJlcGxhY2UgZmlsZVwiID0+IFwiQXNlbmRhIGZhaWxcIlxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL2xvY2FsaXphdGlvbi9maW5uaXNoLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL2xvY2FsaXphdGlvbi9maW5uaXNoLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGZpbm5pc2hTdXJ2ZXlTdHJpbmdzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImZpbm5pc2hTdXJ2ZXlTdHJpbmdzXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZmlubmlzaFN1cnZleVN0cmluZ3M7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHN1cnZleV9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBzdXJ2ZXktY29yZSAqLyBcIi4vc3JjL2VudHJpZXMvY29yZS50c1wiKTtcblxudmFyIGZpbm5pc2hTdXJ2ZXlTdHJpbmdzID0ge1xuICAgIHBhZ2VQcmV2VGV4dDogXCJFZGVsbGluZW5cIixcbiAgICBwYWdlTmV4dFRleHQ6IFwiU2V1cmFhdmFcIixcbiAgICBjb21wbGV0ZVRleHQ6IFwiVmFsbWlzXCIsXG4gICAgcHJldmlld1RleHQ6IFwiRXNpa2F0c2VsdVwiLFxuICAgIGVkaXRUZXh0OiBcIk11b2trYWFcIixcbiAgICBzdGFydFN1cnZleVRleHQ6IFwiQWxvaXRhXCIsXG4gICAgb3RoZXJJdGVtVGV4dDogXCJNdXUgKHRhcmtlbm5hKVwiLFxuICAgIG5vbmVJdGVtVGV4dDogXCJFaSBtaXTDpMOkblwiLFxuICAgIHNlbGVjdEFsbEl0ZW1UZXh0OiBcIlZhbGl0c2Uga2Fpa2tpXCIsXG4gICAgcHJvZ3Jlc3NUZXh0OiBcIlNpdnUgezB9IC8gezF9XCIsXG4gICAgaW5kZXhUZXh0OiBcInswfSAvIHsxfVwiLFxuICAgIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCJPc2lvIHswfSAvIHsxfVwiLFxuICAgIHBhbmVsRHluYW1pY1RhYlRleHRGb3JtYXQ6IFwiUGFuZWVsaSB7cGFuZWxJbmRleH1cIixcbiAgICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwiT2xldCB2YXN0YW5udXQgezB9IC8gezF9IGt5c3lteWtzZWVuLlwiLFxuICAgIGVtcHR5U3VydmV5OiBcIlTDpHNzw6Qga3lzZWx5c3PDpCBlaSBvbGUgeWh0w6TDpG4gbsOka3l2aWxsw6Qgb2xldmFhIHNpdnVhIHRhaSBreXN5bXlzdMOkLlwiLFxuICAgIGNvbXBsZXRpbmdTdXJ2ZXk6IFwiS2lpdG9zIGt5c2VseXluIHZhc3RhYW1pc2VzdGEhXCIsXG4gICAgY29tcGxldGluZ1N1cnZleUJlZm9yZTogXCJUaWV0b2plbW1lIG11a2FhbiBvbGV0IGpvIHN1b3JpdHRhbnV0IHTDpG3DpG4ga3lzZWx5bi5cIixcbiAgICBsb2FkaW5nU3VydmV5OiBcIkt5c2VsecOkIGxhZGF0YWFuIHBhbHZlbGltZWx0YS4uLlwiLFxuICAgIHBsYWNlaG9sZGVyOiBcIlZhbGl0c2UuLi5cIixcbiAgICByYXRpbmdPcHRpb25zQ2FwdGlvbjogXCJBcnZpb2kgbmFwYXV0dGFtYWxsYSB0w6R0w6QuLi5cIixcbiAgICB2YWx1ZTogXCJhcnZvXCIsXG4gICAgcmVxdWlyZWRFcnJvcjogXCJWYXN0YWEga3lzeW15a3NlZW4sIGtpaXRvcy5cIixcbiAgICByZXF1aXJlZEVycm9ySW5QYW5lbDogXCJWYXN0YWEgYWluYWtpbiB5aHRlZW4ga3lzeW15a3NlZW4uXCIsXG4gICAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCJWYXN0YWEga3lzeW15a3NpaW4ga2Fpa2lsbGEgcml2ZWlsbMOkLlwiLFxuICAgIG51bWVyaWNFcnJvcjogXCJBcnZvbiB0dWxlZSBvbGxhIG51bWVlcmluZW4uXCIsXG4gICAgbWluRXJyb3I6IFwiQXJ2byBlaSBzYWEgb2xsYSBwaWVuZW1waSBrdWluIHswfVwiLFxuICAgIG1heEVycm9yOiBcIkFydm8gZWkgc2FhIG9sbGEgc3V1cmVtcGkga3VpbiB7MH1cIixcbiAgICB0ZXh0TWluTGVuZ3RoOiBcIlN5w7Z0w6QgdsOkaGludMOkw6RuIHswfSBtZXJra2nDpC5cIixcbiAgICB0ZXh0TWF4TGVuZ3RoOiBcIsOEbMOkIHN5w7Z0w6QgeWxpIHswfSBtZXJra2nDpC5cIixcbiAgICB0ZXh0TWluTWF4TGVuZ3RoOiBcIlN5w7Z0w6QgdsOkaGludMOkw6RuIHswfSBqYSBlbmludMOkw6RuIHsxfSBtZXJra2nDpC5cIixcbiAgICBtaW5Sb3dDb3VudEVycm9yOiBcIlTDpHl0w6QgdsOkaGludMOkw6RuIHswfSByaXZpw6QuXCIsXG4gICAgbWluU2VsZWN0RXJyb3I6IFwiVmFsaXRzZSB2w6RoaW50w6TDpG4gezB9IHZhaWh0b2VodG9hLlwiLFxuICAgIG1heFNlbGVjdEVycm9yOiBcIlZhbGl0c2UgZW5pbnTDpMOkbiB7MH0gdmFpaHRvZWh0b2EuXCIsXG4gICAgbnVtZXJpY01pbk1heDogXCJMdXZ1biAnezB9JyB0dWxlZSBvbGxhIHbDpGhpbnTDpMOkbiB7MX0gamEga29ya2VpbnRhYW4gezJ9LlwiLFxuICAgIG51bWVyaWNNaW46IFwiTHV2dW4gJ3swfScgdHVsZWUgb2xsYSB2w6RoaW50w6TDpG4gezF9LlwiLFxuICAgIG51bWVyaWNNYXg6IFwiTHV2dW4gJ3swfScgdHVsZWUgb2xsYSBrb3JrZWludGFhbiB7MX0uXCIsXG4gICAgaW52YWxpZEVtYWlsOiBcIlN5w7Z0w6QgdmFsaWRpIHPDpGhrw7Zwb3N0aW9zb2l0ZS5cIixcbiAgICBpbnZhbGlkRXhwcmVzc2lvbjogXCJMYXVzZWtrZWVuOiB7MH0gcGl0w6Rpc2kgcGFsYXV0dGFhICd0cnVlJy5cIixcbiAgICB1cmxSZXF1ZXN0RXJyb3I6IFwiUHl5bnTDtiBwYWxhdXR0aSB2aXJoZWVuIHswfS4gezF9XCIsXG4gICAgdXJsR2V0Q2hvaWNlc0Vycm9yOiBcIlB5eW50w7YgcGFsYXV0dGkgdHloasOkbiB0aWVkb3N0b24gdGFpICdwYXRoJy1hc2V0dXMgb24gdsOkw6Ryw6RcIixcbiAgICBleGNlZWRNYXhTaXplOiBcIlRpZWRvc3RvbiBrb2tvIGVpIHNhYSBvbGxhIHN1dXJlbXBpIGt1aW4gezB9LlwiLFxuICAgIG90aGVyUmVxdWlyZWRFcnJvcjogXCJUYXJrZW5uYSB2YXN0YXVzdGFzaSB0ZWtzdGlrZW50dMOkw6RuLlwiLFxuICAgIHVwbG9hZGluZ0ZpbGU6IFwiVGllZG9zdG9hIGzDpGhldGV0w6TDpG4uIE9kb3RhIG11dXRhbWEgc2VrdW50aSBqYSB5cml0w6QgdXVkZWxsZWVuLlwiLFxuICAgIGxvYWRpbmdGaWxlOiBcIkxhZGF0YWFuLi4uXCIsXG4gICAgY2hvb3NlRmlsZTogXCJWYWxpdHNlIHRpZWRvc3RvKHQpLi4uXCIsXG4gICAgbm9GaWxlQ2hvc2VuOiBcIkVpIHRpZWRvc3RvYSB2YWxpdHR1bmFcIixcbiAgICBmaWxlRHJhZ0FyZWFQbGFjZWhvbGRlcjogXCJQdWRvdGEgdGllZG9zdG8gdMOkaMOkbiB0YWkgbGF0YWEgdGllZG9zdG8gbmFwc2F1dHRhbWFsbGEgYWxsYSBvbGV2YWEgcGFpbmlrZXR0YS5cIixcbiAgICBjb25maXJtRGVsZXRlOiBcIkhhbHVhdGtvIHBvaXN0YWEgb3Npb24/XCIsXG4gICAga2V5RHVwbGljYXRpb25FcnJvcjogXCJUw6Rtw6QgYXJ2byBvbiBqbyBrw6R5dMO2c3PDpC4gU3nDtnTDpCB0b2luZW4gYXJ2by5cIixcbiAgICBhZGRDb2x1bW46IFwiTGlzw6TDpCBzYXJha2VcIixcbiAgICBhZGRSb3c6IFwiTGlzw6TDpCByaXZpXCIsXG4gICAgcmVtb3ZlUm93OiBcIlBvaXN0YVwiLFxuICAgIGVtcHR5Um93c1RleHQ6IFwiRWkgcml2ZWrDpFwiLFxuICAgIGFkZFBhbmVsOiBcIkxpc8Okw6QgdXVzaVwiLFxuICAgIHJlbW92ZVBhbmVsOiBcIlBvaXN0YVwiLFxuICAgIGNob2ljZXNfSXRlbTogXCJrb2hkZVwiLFxuICAgIG1hdHJpeF9jb2x1bW46IFwiU2FyYWtlXCIsXG4gICAgbWF0cml4X3JvdzogXCJSaXZpXCIsXG4gICAgbXVsdGlwbGV0ZXh0X2l0ZW1uYW1lOiBcInRla3N0aVwiLFxuICAgIHNhdmluZ0RhdGE6IFwiVGlldG9qYSB0YWxsZW5uZXRhYW4gcGFsdmVsaW1lbGxlLi4uXCIsXG4gICAgc2F2aW5nRGF0YUVycm9yOiBcIlRhcGFodHVpIHZpcmhlLCBlbW1la8OkIHZvaW5lZXQgdGFsbGVudGFhIGt5c2VseW4gdGlldG9qYS5cIixcbiAgICBzYXZpbmdEYXRhU3VjY2VzczogXCJUaWVkb3QgdGFsbGVubmV0dGlpbiBvbm5pc3R1bmVlc3RpIVwiLFxuICAgIHNhdmVBZ2FpbkJ1dHRvbjogXCJZcml0w6QgdXVkZWxsZWVuXCIsXG4gICAgdGltZXJNaW46IFwibWluXCIsXG4gICAgdGltZXJTZWM6IFwic2VrXCIsXG4gICAgdGltZXJTcGVudEFsbDogXCJPbGV0IGvDpHl0dMOkbnl0IHswfSB0w6RsbMOkIHNpdnVsbGEgamEgeWh0ZWVuc8OkIHsxfS5cIixcbiAgICB0aW1lclNwZW50UGFnZTogXCJPbGV0IGvDpHl0dMOkbnl0IHswfSB0w6RsbMOkIHNpdnVsbGEuXCIsXG4gICAgdGltZXJTcGVudFN1cnZleTogXCJPbGV0IGvDpHl0dMOkbnl0IHlodGVlbnPDpCB7MH0uXCIsXG4gICAgdGltZXJMaW1pdEFsbDogXCJPbGV0IGvDpHl0dMOkbnl0IHTDpGxsw6Qgc2l2dWxsYSB7MH0gLyB7MX0gamEgeWh0ZWVuc8OkIHsyfSAvIHszfS5cIixcbiAgICB0aW1lckxpbWl0UGFnZTogXCJPbGV0IGvDpHl0dMOkbnl0IHswfSAvIHsxfSB0w6RsbMOkIHNpdnVsbGEuXCIsXG4gICAgdGltZXJMaW1pdFN1cnZleTogXCJPbGV0IGvDpHl0dMOkbnl0IHlodGVlbnPDpCB7MH0gLyB7MX0uXCIsXG4gICAgY2xlYXJDYXB0aW9uOiBcIlR5aGplbm7DpFwiLFxuICAgIHNpZ25hdHVyZVBsYWNlSG9sZGVyOiBcIkFsbGVraXJqb2l0YSB0w6Row6RuXCIsXG4gICAgY2hvb3NlRmlsZUNhcHRpb246IFwiVmFsaXRzZSB0aWVkb3N0b1wiLFxuICAgIHRha2VQaG90b0NhcHRpb246IFwiT3RhIHZhbG9rdXZhXCIsXG4gICAgY2FtZXJhUGxhY2VIb2xkZXI6IFwiTmFwc2F1dGEgYWxsYSBvbGV2YWEgcGFpbmlrZXR0YSBvdHRhYWtzZXNpIHZhbG9rdXZhbiBrYW1lcmFsbGEuXCIsXG4gICAgZmlsZUNhbWVyYURyYWdBcmVhUGxhY2VIb2xkZXI6IFwiVmVkw6QgamEgcHVkb3RhIHRhaSB2YWxpdHNlIGxhZGF0dGF2YSB0aWVkb3N0byB0YWkgb3RhIHZhbG9rdXZhIGthbWVyYWxsYS5cIixcbiAgICByZXBsYWNlRmlsZUNhcHRpb246IFwiS29ydmFhIHRpZWRvc3RvXCIsXG4gICAgcmVtb3ZlRmlsZUNhcHRpb246IFwiUG9pc3RhIHTDpG3DpCB0aWVkb3N0b1wiLFxuICAgIGJvb2xlYW5DaGVja2VkTGFiZWw6IFwiS3lsbMOkXCIsXG4gICAgYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcIkVpXCIsXG4gICAgY29uZmlybVJlbW92ZUZpbGU6IFwiSGFsdWF0a28gdmFybWFzdGkgcG9pc3RhYSB0w6Rtw6RuIHRpZWRvc3RvbjogezB9P1wiLFxuICAgIGNvbmZpcm1SZW1vdmVBbGxGaWxlczogXCJIYWx1YXRrbyB2YXJtYXN0aSBwb2lzdGFhIGthaWtraSB0aWVkb3N0b3Q/XCIsXG4gICAgcXVlc3Rpb25UaXRsZVBhdHRlcm5UZXh0OiBcIkt5c3lteWtzZW4gb3RzaWtrb1wiLFxuICAgIG1vZGFsQ2FuY2VsQnV0dG9uVGV4dDogXCJQZXJ1dXRhXCIsXG4gICAgbW9kYWxBcHBseUJ1dHRvblRleHQ6IFwiS8OkeXTDpFwiLFxuICAgIGZpbHRlclN0cmluZ1BsYWNlaG9sZGVyOiBcIkhhZSBraXJqb2l0dGFtYWxsYS4uLlwiLFxuICAgIGVtcHR5TWVzc2FnZTogXCJFaSBuw6R5dGV0dMOkdmnDpCB0aWV0b2phXCIsXG4gICAgbm9FbnRyaWVzVGV4dDogXCJNZXJraW50w7Zqw6QgZWkgb2xlIHZpZWzDpC5cXG5MaXPDpMOkIHV1c2kgbWVya2ludMOkIG5hcHNhdXR0YW1hbGxhIGFsbGEgb2xldmFhIHBhaW5pa2V0dGEuXCIsXG4gICAgbm9FbnRyaWVzUmVhZG9ubHlUZXh0OiBcIk1lcmtpbnTDtmrDpCBlaSBvbGUuXCIsXG4gICAgbW9yZTogXCJFbmVtbcOkblwiLFxuICAgIHRhZ2JveERvbmVCdXR0b25DYXB0aW9uOiBcIk9LRUlcIixcbiAgICBzZWxlY3RUb1JhbmtFbXB0eVJhbmtlZEFyZWFUZXh0OiBcIkthaWtraSB2YWxpbm5hdCBhc2V0ZXRhYW4gcGFyZW1tdXVzasOkcmplc3R5a3NlZW5cIixcbiAgICBzZWxlY3RUb1JhbmtFbXB0eVVucmFua2VkQXJlYVRleHQ6IFwiVmVkw6QgamEgcHVkb3RhIHZhaWh0b2VoZG90IHTDpGjDpG4gbHVva2l0ZWxsYWtzZXNpIG5lXCJcbn07XG5zdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3VydmV5TG9jYWxpemF0aW9uXCJdLmxvY2FsZXNbXCJmaVwiXSA9IGZpbm5pc2hTdXJ2ZXlTdHJpbmdzO1xuc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN1cnZleUxvY2FsaXphdGlvblwiXS5sb2NhbGVOYW1lc1tcImZpXCJdID0gXCJzdW9taVwiO1xuLy8gVGhlIGZvbGxvd2luZyBzdHJpbmdzIGhhdmUgYmVlbiB0cmFuc2xhdGVkIGJ5IGEgbWFjaGluZSB0cmFuc2xhdGlvbiBzZXJ2aWNlXG4vLyBSZW1vdmUgdGhvc2Ugc3RyaW5ncyB0aGF0IHlvdSBoYXZlIGNvcnJlY3RlZCBtYW51YWxseVxuLy8gcGFuZWxEeW5hbWljVGFiVGV4dEZvcm1hdDogXCJQYW5lbCB7cGFuZWxJbmRleH1cIiA9PiBcIlBhbmVlbGkge3BhbmVsSW5kZXh9XCJcbi8vIGVtcHR5TWVzc2FnZTogXCJObyBkYXRhIHRvIGRpc3BsYXlcIiA9PiBcIkVpIG7DpHl0ZXR0w6R2acOkIHRpZXRvamFcIlxuLy8gbm9FbnRyaWVzUmVhZG9ubHlUZXh0OiBcIlRoZXJlIGFyZSBubyBlbnRyaWVzLlwiID0+IFwiTWVya2ludMO2asOkIGVpIG9sZS5cIlxuLy8gbW9yZTogXCJNb3JlXCIgPT4gXCJFbmVtbcOkblwiXG4vLyB0YWdib3hEb25lQnV0dG9uQ2FwdGlvbjogXCJPS1wiID0+IFwiT0tFSVwiXG4vLyBzZWxlY3RUb1JhbmtFbXB0eVJhbmtlZEFyZWFUZXh0OiBcIkFsbCBjaG9pY2VzIGFyZSByYW5rZWRcIiA9PiBcIkthaWtraSB2YWxpbm5hdCBhc2V0ZXRhYW4gcGFyZW1tdXVzasOkcmplc3R5a3NlZW5cIlxuLy8gc2VsZWN0VG9SYW5rRW1wdHlVbnJhbmtlZEFyZWFUZXh0OiBcIkRyYWcgYW5kIGRyb3AgY2hvaWNlcyBoZXJlIHRvIHJhbmsgdGhlbVwiID0+IFwiVmVkw6QgamEgcHVkb3RhIHZhaWh0b2VoZG90IHTDpGjDpG4gbHVva2l0ZWxsYWtzZXNpIG5lXCIvLyB0YWtlUGhvdG9DYXB0aW9uOiBcIlRha2UgUGhvdG9cIiA9PiBcIk90YSB2YWxva3V2YVwiXG4vLyBjYW1lcmFQbGFjZUhvbGRlcjogXCJDbGljayB0aGUgYnV0dG9uIGJlbG93IHRvIHRha2UgYSBwaG90byB1c2luZyB0aGUgY2FtZXJhLlwiID0+IFwiTmFwc2F1dGEgYWxsYSBvbGV2YWEgcGFpbmlrZXR0YSBvdHRhYWtzZXNpIHZhbG9rdXZhbiBrYW1lcmFsbGEuXCJcbi8vIGZpbGVDYW1lcmFEcmFnQXJlYVBsYWNlSG9sZGVyOiBcIkRyYWcgYW5kIGRyb3Agb3Igc2VsZWN0IGEgZmlsZSB0byB1cGxvYWQgb3IgdGFrZSBhIHBob3RvIHVzaW5nIHRoZSBjYW1lcmEuXCIgPT4gXCJWZWTDpCBqYSBwdWRvdGEgdGFpIHZhbGl0c2UgbGFkYXR0YXZhIHRpZWRvc3RvIHRhaSBvdGEgdmFsb2t1dmEga2FtZXJhbGxhLlwiXG4vLyByZXBsYWNlRmlsZUNhcHRpb246IFwiUmVwbGFjZSBmaWxlXCIgPT4gXCJLb3J2YWEgdGllZG9zdG9cIlxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL2xvY2FsaXphdGlvbi9mcmVuY2gudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9sb2NhbGl6YXRpb24vZnJlbmNoLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogZnJlbmNoU3VydmV5U3RyaW5ncyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJmcmVuY2hTdXJ2ZXlTdHJpbmdzXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZnJlbmNoU3VydmV5U3RyaW5nczsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHN1cnZleS1jb3JlICovIFwiLi9zcmMvZW50cmllcy9jb3JlLnRzXCIpO1xuXG52YXIgZnJlbmNoU3VydmV5U3RyaW5ncyA9IHtcbiAgICBwYWdlUHJldlRleHQ6IFwiUHLDqWPDqWRlbnRcIixcbiAgICBwYWdlTmV4dFRleHQ6IFwiU3VpdmFudFwiLFxuICAgIGNvbXBsZXRlVGV4dDogXCJUZXJtaW5lclwiLFxuICAgIHByZXZpZXdUZXh0OiBcIkFwZXLDp3VcIixcbiAgICBlZGl0VGV4dDogXCJNb2RpZmllclwiLFxuICAgIHN0YXJ0U3VydmV5VGV4dDogXCJDb21tZW5jZXJcIixcbiAgICBvdGhlckl0ZW1UZXh0OiBcIkF1dHJlIChwcsOpY2lzZXIpXCIsXG4gICAgbm9uZUl0ZW1UZXh0OiBcIkF1Y3VuXCIsXG4gICAgc2VsZWN0QWxsSXRlbVRleHQ6IFwiVG91dCBzw6lsZWN0aW9ubmVyXCIsXG4gICAgcHJvZ3Jlc3NUZXh0OiBcIlBhZ2UgezB9IHN1ciB7MX1cIixcbiAgICBpbmRleFRleHQ6IFwiezB9IHN1ciB7MX1cIixcbiAgICBwYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ6IFwiRW5yZWdpc3RyZW1lbnQgezB9IHN1ciB7MX1cIixcbiAgICBwYW5lbER5bmFtaWNUYWJUZXh0Rm9ybWF0OiBcIlBhbmVsIHtwYW5lbEluZGV4fVwiLFxuICAgIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCJ7MH0vezF9IHF1ZXN0aW9uKHMpIHLDqXBvbmR1ZShzKVwiLFxuICAgIGVtcHR5U3VydmV5OiBcIklsIG4neSBhIG5pIHBhZ2UgdmlzaWJsZSBuaSBxdWVzdGlvbiB2aXNpYmxlIGRhbnMgY2UgcXVlc3Rpb25uYWlyZVwiLFxuICAgIGNvbXBsZXRpbmdTdXJ2ZXk6IFwiTWVyY2kgZCdhdm9pciByw6lwb25kdSBhdSBxdWVzdGlvbm5haXJlICFcIixcbiAgICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOiBcIk5vcyBkb25uw6llcyBpbmRpcXVlbnQgcXVlIHZvdXMgYXZleiBkw6lqw6AgcmVtcGxpIGNlIHF1ZXN0aW9ubmFpcmUuXCIsXG4gICAgbG9hZGluZ1N1cnZleTogXCJMZSBxdWVzdGlvbm5haXJlIGVzdCBlbiBjb3VycyBkZSBjaGFyZ2VtZW50Li4uXCIsXG4gICAgcGxhY2Vob2xkZXI6IFwiQ2hvaXNpc3Nlei4uLlwiLFxuICAgIHJhdGluZ09wdGlvbnNDYXB0aW9uOiBcIkFwcHV5ZXogaWNpIHBvdXIgbm90ZXIuLi5cIixcbiAgICB2YWx1ZTogXCJ2YWxldXJcIixcbiAgICByZXF1aXJlZEVycm9yOiBcIkxhIHLDqXBvbnNlIMOgIGNldHRlIHF1ZXN0aW9uIGVzdCBvYmxpZ2F0b2lyZS5cIixcbiAgICByZXF1aXJlZEVycm9ySW5QYW5lbDogXCJNZXJjaSBkZSByw6lwb25kcmUgYXUgbW9pbnMgw6AgdW5lIHF1ZXN0aW9uLlwiLFxuICAgIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwiVG91dGVzIGxlcyBsaWduZXMgc29udCBvYmxpZ2F0b2lyZXNcIixcbiAgICBudW1lcmljRXJyb3I6IFwiTGEgcsOpcG9uc2UgZG9pdCDDqnRyZSB1biBub21icmUuXCIsXG4gICAgbWluRXJyb3I6IFwiTGEgdmFsZXVyIG5lIGRvaXQgcGFzIMOqdHJlIGluZsOpcmlldXJlIMOgIHswfVwiLFxuICAgIG1heEVycm9yOiBcIkxhIHZhbGV1ciBuZSBkb2l0IHBhcyDDqnRyZSBzdXDDqXJpZXVyZSDDoCB7MH1cIixcbiAgICB0ZXh0TWluTGVuZ3RoOiBcIk1lcmNpIGRlIHNhaXNpciBhdSBtb2lucyB7MH0gY2FyYWN0w6hyZXMuXCIsXG4gICAgdGV4dE1heExlbmd0aDogXCJNZXJjaSBkZSBzYWlzaXIgbW9pbnMgZGUgezB9IGNhcmFjdMOocmVzLlwiLFxuICAgIHRleHRNaW5NYXhMZW5ndGg6IFwiTWVyY2kgZGUgc2Fpc2lyIGVudHJlIHswfSBldCB7MX0gY2FyYWN0w6hyZXMuXCIsXG4gICAgbWluUm93Q291bnRFcnJvcjogXCJNZXJjaSBkZSBjb21wbMOpdGVyIGF1IG1vaW5zIHswfSBsaWduZXMuXCIsXG4gICAgbWluU2VsZWN0RXJyb3I6IFwiTWVyY2kgZGUgc8OpbGVjdGlvbm5lciBhdSBtaW5pbXVtIHswfSByw6lwb25zZXMuXCIsXG4gICAgbWF4U2VsZWN0RXJyb3I6IFwiTWVyY2kgZGUgc8OpbGVjdGlvbm5lciBhdSBtYXhpbXVtIHswfSByw6lwb25zZXMuXCIsXG4gICAgbnVtZXJpY01pbk1heDogXCJWb3RyZSByw6lwb25zZSAnezB9JyBkb2l0IMOqdHJlIHN1cMOpcmlldXJlIG91IMOpZ2FsZSDDoCB7MX0gZXQgaW5mw6lyaWV1cmUgb3Ugw6lnYWxlIMOgIHsyfVwiLFxuICAgIG51bWVyaWNNaW46IFwiVm90cmUgcsOpcG9uc2UgJ3swfScgZG9pdCDDqnRyZSBzdXDDqXJpZXVyZSBvdSDDqWdhbGUgw6AgezF9XCIsXG4gICAgbnVtZXJpY01heDogXCJWb3RyZSByw6lwb25zZSAnezB9JyBkb2l0IMOqdHJlIGluZsOpcmlldXJlIG91IMOpZ2FsZSDDoCB7MX1cIixcbiAgICBpbnZhbGlkRW1haWw6IFwiTWVyY2kgZCdlbnRyZXIgdW5lIGFkcmVzc2UgbWFpbCB2YWxpZGUuXCIsXG4gICAgaW52YWxpZEV4cHJlc3Npb246IFwiTCdleHByZXNzaW9uOiB7MH0gZG9pdCByZXRvdXJuZXIgJ3RydWUnLlwiLFxuICAgIHVybFJlcXVlc3RFcnJvcjogXCJMYSByZXF1w6p0ZSBhIHJlbnZvecOpIHVuZSBlcnJldXIgJ3swfScuIHsxfVwiLFxuICAgIHVybEdldENob2ljZXNFcnJvcjogXCJMYSByZXF1w6p0ZSBhIHJlbnZvecOpIGRlcyBkb25uw6llcyB2aWRlcyBvdSBsYSBwcm9wcmnDqXTDqSAncGF0aCcgZXN0IGluY29ycmVjdGVcIixcbiAgICBleGNlZWRNYXhTaXplOiBcIkxhIHRhaWxsZSBkdSBmaWNoaWVyIG5lIGRvaXQgcGFzIGV4Y8OpZGVyIHswfS5cIixcbiAgICBvdGhlclJlcXVpcmVkRXJyb3I6IFwiTWVyY2kgZGUgcHLDqWNpc2VyIGxlIGNoYW1wICdBdXRyZScuXCIsXG4gICAgdXBsb2FkaW5nRmlsZTogXCJWb3RyZSBmaWNoaWVyIGVzdCBlbiBjb3VycyBkZSBjaGFyZ2VtZW50LiBNZXJjaSBkJ2F0dGVuZHJlIHF1ZWxxdWVzIHNlY29uZGVzIGV0IGRlIHLDqWVzc2F5ZXIuXCIsXG4gICAgbG9hZGluZ0ZpbGU6IFwiQ2hhcmdlbWVudC4uLlwiLFxuICAgIGNob29zZUZpbGU6IFwiQWpvdXRlciBkZXMgZmljaGllcnMuLi5cIixcbiAgICBub0ZpbGVDaG9zZW46IFwiQXVjdW4gZmljaGllciBham91dMOpXCIsXG4gICAgZmlsZURyYWdBcmVhUGxhY2Vob2xkZXI6IFwiRMOpcG9zZXogdW4gZmljaGllciBpY2kgb3UgY2xpcXVleiBzdXIgbGUgYm91dG9uIGNpLWRlc3NvdXMgcG91ciBjaGFyZ2VyIGxlIGZpY2hpZXIuXCIsXG4gICAgY29uZmlybURlbGV0ZTogXCJWb3VsZXotdm91cyBzdXBwcmltZXIgY2V0IGVucmVnaXN0cmVtZW50ID9cIixcbiAgICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcIkNldHRlIHZhbGV1ciBkb2l0IMOqdHJlIHVuaXF1ZS5cIixcbiAgICBhZGRDb2x1bW46IFwiQWpvdXRlciB1bmUgY29sb25uZVwiLFxuICAgIGFkZFJvdzogXCJBam91dGVyIHVuZSBsaWduZVwiLFxuICAgIHJlbW92ZVJvdzogXCJTdXBwcmltZXJcIixcbiAgICBlbXB0eVJvd3NUZXh0OiBcIklsIG4neSBhIHBhcyBkZSBsaWduZXMuXCIsXG4gICAgYWRkUGFuZWw6IFwiQWpvdXRlclwiLFxuICAgIHJlbW92ZVBhbmVsOiBcIlN1cHByaW1lclwiLFxuICAgIGNob2ljZXNfSXRlbTogXCJpdGVtXCIsXG4gICAgbWF0cml4X2NvbHVtbjogXCJDb2xvbm5lXCIsXG4gICAgbWF0cml4X3JvdzogXCJMaWduZVwiLFxuICAgIG11bHRpcGxldGV4dF9pdGVtbmFtZTogXCJ0ZXh0ZVwiLFxuICAgIHNhdmluZ0RhdGE6IFwiTGVzIHLDqXN1bHRhdHMgc29udCBlbiBjb3VycyBkZSBzYXV2ZWdhcmRlIHN1ciBsZSBzZXJ2ZXVyLi4uXCIsXG4gICAgc2F2aW5nRGF0YUVycm9yOiBcIlVuZSBlcnJldXIgZXN0IHN1cnZlbnVlIGV0IGEgZW1ww6pjaMOpIGxhIHNhdXZlZ2FyZGUgZGVzIHLDqXN1bHRhdHMuXCIsXG4gICAgc2F2aW5nRGF0YVN1Y2Nlc3M6IFwiTGVzIHLDqXN1bHRhdHMgb250IGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6lzICFcIixcbiAgICBzYXZlQWdhaW5CdXR0b246IFwiUsOpZXNzYXllclwiLFxuICAgIHRpbWVyTWluOiBcIm1pblwiLFxuICAgIHRpbWVyU2VjOiBcInNlY1wiLFxuICAgIHRpbWVyU3BlbnRBbGw6IFwiVm91cyBhdmV6IHBhc3PDqSB7MH0gc3VyIGNldHRlIHBhZ2UgZXQgezF9IGF1IHRvdGFsLlwiLFxuICAgIHRpbWVyU3BlbnRQYWdlOiBcIlZvdXMgYXZleiBwYXNzw6kgezB9IHN1ciBjZXR0ZSBwYWdlLlwiLFxuICAgIHRpbWVyU3BlbnRTdXJ2ZXk6IFwiVm91cyBhdmV6IHBhc3PDqSB7MH0gYXUgdG90YWwuXCIsXG4gICAgdGltZXJMaW1pdEFsbDogXCJWb3VzIGF2ZXogcGFzc8OpIHswfSBzdXIgezF9IHN1ciBjZXR0ZSBwYWdlIGV0IHsyfSBzdXIgezN9IGF1IHRvdGFsLlwiLFxuICAgIHRpbWVyTGltaXRQYWdlOiBcIlZvdXMgYXZleiBwYXNzw6kgezB9IHN1ciB7MX0gc3VyIGNldHRlIHBhZ2UuXCIsXG4gICAgdGltZXJMaW1pdFN1cnZleTogXCJWb3VzIGF2ZXogcGFzc8OpIHswfSBzdXIgezF9IGF1IHRvdGFsLlwiLFxuICAgIGNsZWFyQ2FwdGlvbjogXCJWaWRlclwiLFxuICAgIHNpZ25hdHVyZVBsYWNlSG9sZGVyOiBcIlNpZ25leiBpY2lcIixcbiAgICBjaG9vc2VGaWxlQ2FwdGlvbjogXCJBam91dGVyIHVuIGZpY2hpZXJcIixcbiAgICB0YWtlUGhvdG9DYXB0aW9uOiBcIlByZW5kcmUgdW5lIHBob3RvXCIsXG4gICAgY2FtZXJhUGxhY2VIb2xkZXI6IFwiQ2xpcXVleiBzdXIgbGUgYm91dG9uIGNpLWRlc3NvdXMgcG91ciBwcmVuZHJlIHVuZSBwaG90byDDoCBs4oCZYWlkZSBkZSBs4oCZYXBwYXJlaWwgcGhvdG8uXCIsXG4gICAgZmlsZUNhbWVyYURyYWdBcmVhUGxhY2VIb2xkZXI6IFwiRmFpdGVzIGdsaXNzZXIgZXQgZMOpcG9zZXogb3Ugc8OpbGVjdGlvbm5leiB1biBmaWNoaWVyIMOgIHTDqWzDqWNoYXJnZXIgb3Ugw6AgcHJlbmRyZSB1bmUgcGhvdG8gw6AgbOKAmWFpZGUgZGUgbOKAmWFwcGFyZWlsIHBob3RvLlwiLFxuICAgIHJlcGxhY2VGaWxlQ2FwdGlvbjogXCJSZW1wbGFjZXIgbGUgZmljaGllclwiLFxuICAgIHJlbW92ZUZpbGVDYXB0aW9uOiBcIkVubGV2ZXIgY2UgZmljaGllclwiLFxuICAgIGJvb2xlYW5DaGVja2VkTGFiZWw6IFwiT3VpXCIsXG4gICAgYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcIk5vblwiLFxuICAgIGNvbmZpcm1SZW1vdmVGaWxlOiBcIsOKdGVzLXZvdXMgY2VydGFpbnMgZGUgdm91bG9pciBzdXBwcmltZXIgY2UgZmljaGllciA6IHswfT9cIixcbiAgICBjb25maXJtUmVtb3ZlQWxsRmlsZXM6IFwiw4p0ZXMtdm91cyBjZXJ0YWlucyBkZSB2b3Vsb2lyIHN1cHByaW1lciB0b3VzIGxlcyBmaWNoaWVycz9cIixcbiAgICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwiVGl0cmUgZGUgbGEgcXVlc3Rpb25cIixcbiAgICBtb2RhbENhbmNlbEJ1dHRvblRleHQ6IFwiQW5udWxlclwiLFxuICAgIG1vZGFsQXBwbHlCdXR0b25UZXh0OiBcIkFwcGxpcXVlclwiLFxuICAgIGZpbHRlclN0cmluZ1BsYWNlaG9sZGVyOiBcIlRhcGV6IHBvdXIgcmVjaGVyY2hlci4uLlwiLFxuICAgIGVtcHR5TWVzc2FnZTogXCJBdWN1bmUgZG9ubsOpZSDDoCBhZmZpY2hlclwiLFxuICAgIG5vRW50cmllc1RleHQ6IFwiSWwgbid5IGEgcGFzIGVuY29yZSBkJ2VudHLDqWVzLlxcbkNsaXF1ZXogc3VyIGxlIGJvdXRvbiBjaS1kZXNzb3VzIHBvdXIgYWpvdXRlciB1bmUgbm91dmVsbGUgZW50csOpZS5cIixcbiAgICBub0VudHJpZXNSZWFkb25seVRleHQ6IFwiSWwgbuKAmXkgYSBwYXMgZOKAmWVudHLDqWVzLlwiLFxuICAgIG1vcmU6IFwiUGx1c1wiLFxuICAgIHRhZ2JveERvbmVCdXR0b25DYXB0aW9uOiBcIkTigJlBQ0NPUkRcIixcbiAgICBzZWxlY3RUb1JhbmtFbXB0eVJhbmtlZEFyZWFUZXh0OiBcIlRvdXMgbGVzIGNob2l4IHNvbnQgY2xhc3PDqXNcIixcbiAgICBzZWxlY3RUb1JhbmtFbXB0eVVucmFua2VkQXJlYVRleHQ6IFwiRmFpdGVzIGdsaXNzZXIgZXQgZMOpcG9zZXogbGVzIGNob2l4IGljaSBwb3VyIGxlcyBjbGFzc2VyXCJcbn07XG5zdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3VydmV5TG9jYWxpemF0aW9uXCJdLmxvY2FsZXNbXCJmclwiXSA9IGZyZW5jaFN1cnZleVN0cmluZ3M7XG5zdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3VydmV5TG9jYWxpemF0aW9uXCJdLmxvY2FsZU5hbWVzW1wiZnJcIl0gPSBcImZyYW7Dp2Fpc1wiO1xuLy8gVGhlIGZvbGxvd2luZyBzdHJpbmdzIGhhdmUgYmVlbiB0cmFuc2xhdGVkIGJ5IGEgbWFjaGluZSB0cmFuc2xhdGlvbiBzZXJ2aWNlXG4vLyBSZW1vdmUgdGhvc2Ugc3RyaW5ncyB0aGF0IHlvdSBoYXZlIGNvcnJlY3RlZCBtYW51YWxseVxuLy8gcGFuZWxEeW5hbWljVGFiVGV4dEZvcm1hdDogXCJQYW5lbCB7cGFuZWxJbmRleH1cIiA9PiBcIlBhbmVsIHtwYW5lbEluZGV4fVwiXG4vLyBlbXB0eU1lc3NhZ2U6IFwiTm8gZGF0YSB0byBkaXNwbGF5XCIgPT4gXCJBdWN1bmUgZG9ubsOpZSDDoCBhZmZpY2hlclwiXG4vLyBub0VudHJpZXNSZWFkb25seVRleHQ6IFwiVGhlcmUgYXJlIG5vIGVudHJpZXMuXCIgPT4gXCJJbCBu4oCZeSBhIHBhcyBk4oCZZW50csOpZXMuXCJcbi8vIG1vcmU6IFwiTW9yZVwiID0+IFwiUGx1c1wiXG4vLyB0YWdib3hEb25lQnV0dG9uQ2FwdGlvbjogXCJPS1wiID0+IFwiROKAmUFDQ09SRFwiXG4vLyBzZWxlY3RUb1JhbmtFbXB0eVJhbmtlZEFyZWFUZXh0OiBcIkFsbCBjaG9pY2VzIGFyZSByYW5rZWRcIiA9PiBcIlRvdXMgbGVzIGNob2l4IHNvbnQgY2xhc3PDqXNcIlxuLy8gc2VsZWN0VG9SYW5rRW1wdHlVbnJhbmtlZEFyZWFUZXh0OiBcIkRyYWcgYW5kIGRyb3AgY2hvaWNlcyBoZXJlIHRvIHJhbmsgdGhlbVwiID0+IFwiRmFpdGVzIGdsaXNzZXIgZXQgZMOpcG9zZXogbGVzIGNob2l4IGljaSBwb3VyIGxlcyBjbGFzc2VyXCIvLyB0YWtlUGhvdG9DYXB0aW9uOiBcIlRha2UgUGhvdG9cIiA9PiBcIlByZW5kcmUgdW5lIHBob3RvXCJcbi8vIGNhbWVyYVBsYWNlSG9sZGVyOiBcIkNsaWNrIHRoZSBidXR0b24gYmVsb3cgdG8gdGFrZSBhIHBob3RvIHVzaW5nIHRoZSBjYW1lcmEuXCIgPT4gXCJDbGlxdWV6IHN1ciBsZSBib3V0b24gY2ktZGVzc291cyBwb3VyIHByZW5kcmUgdW5lIHBob3RvIMOgIGzigJlhaWRlIGRlIGzigJlhcHBhcmVpbCBwaG90by5cIlxuLy8gZmlsZUNhbWVyYURyYWdBcmVhUGxhY2VIb2xkZXI6IFwiRHJhZyBhbmQgZHJvcCBvciBzZWxlY3QgYSBmaWxlIHRvIHVwbG9hZCBvciB0YWtlIGEgcGhvdG8gdXNpbmcgdGhlIGNhbWVyYS5cIiA9PiBcIkZhaXRlcyBnbGlzc2VyIGV0IGTDqXBvc2V6IG91IHPDqWxlY3Rpb25uZXogdW4gZmljaGllciDDoCB0w6lsw6ljaGFyZ2VyIG91IMOgIHByZW5kcmUgdW5lIHBob3RvIMOgIGzigJlhaWRlIGRlIGzigJlhcHBhcmVpbCBwaG90by5cIlxuLy8gcmVwbGFjZUZpbGVDYXB0aW9uOiBcIlJlcGxhY2UgZmlsZVwiID0+IFwiUmVtcGxhY2VyIGxlIGZpY2hpZXJcIlxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL2xvY2FsaXphdGlvbi9nZW9yZ2lhbi50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvbG9jYWxpemF0aW9uL2dlb3JnaWFuLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBnZW9yZ2lhblN1cnZleVN0cmluZ3MgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiZ2VvcmdpYW5TdXJ2ZXlTdHJpbmdzXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZ2VvcmdpYW5TdXJ2ZXlTdHJpbmdzOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBzdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgc3VydmV5LWNvcmUgKi8gXCIuL3NyYy9lbnRyaWVzL2NvcmUudHNcIik7XG5cbnZhciBnZW9yZ2lhblN1cnZleVN0cmluZ3MgPSB7XG4gICAgcGFnZVByZXZUZXh0OiBcIuGDo+GDmeGDkOGDnFwiLFxuICAgIHBhZ2VOZXh0VGV4dDogXCLhg6jhg5Thg5vhg5Phg5Thg5JcIixcbiAgICBjb21wbGV0ZVRleHQ6IFwi4YOT4YOQ4YOh4YOg4YOj4YOa4YOU4YOR4YOQXCIsXG4gICAgcHJldmlld1RleHQ6IFwi4YOS4YOQ4YOT4YOQ4YOu4YOU4YOT4YOV4YOQXCIsXG4gICAgZWRpdFRleHQ6IFwi4YOg4YOU4YOT4YOQ4YOl4YOi4YOY4YOg4YOU4YOR4YOQXCIsXG4gICAgc3RhcnRTdXJ2ZXlUZXh0OiBcIuGDk+GDkOGDpeGDneGDpeGDleGDkFwiLFxuICAgIG90aGVySXRlbVRleHQ6IFwi4YOh4YOu4YOV4YOQICjhg5Lhg5fhg67hg53hg5Xhg5cg4YOb4YOY4YOj4YOX4YOY4YOX4YOU4YOXKVwiLFxuICAgIG5vbmVJdGVtVGV4dDogXCLhg5Dhg6Dhg6rhg5Thg6Dhg5fhg5hcIixcbiAgICBzZWxlY3RBbGxJdGVtVGV4dDogXCLhg6fhg5Xhg5Thg5rhg5Dhg6Eg4YOb4YOd4YOc4YOY4YOo4YOc4YOQXCIsXG4gICAgcHJvZ3Jlc3NUZXh0OiBcIuGDkuGDleGDlOGDoOGDk+GDmCB7MH0gLyB7MX1cIixcbiAgICBpbmRleFRleHQ6IFwiezF9IHswfVwiLFxuICAgIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCJ7MX0gezB9XCIsXG4gICAgcGFuZWxEeW5hbWljVGFiVGV4dEZvcm1hdDogXCJQYW5lbCB7cGFuZWxJbmRleH1cIixcbiAgICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwi4YOj4YOe4YOQ4YOh4YOj4YOu4YOU4YOXIHswfS97MX0g4YOZ4YOY4YOX4YOu4YOV4YOU4YOR4YOhXCIsXG4gICAgZW1wdHlTdXJ2ZXk6IFwi4YOQ4YOg4YOq4YOU4YOg4YOX4YOYIOGDmeGDmOGDl+GDruGDleGDkCDhg5Dhg6Ag4YOQ4YOg4YOY4YOhLlwiLFxuICAgIGNvbXBsZXRpbmdTdXJ2ZXk6IFwi4YOS4YOb4YOQ4YOT4YOa4YOd4YOR4YOXIOGDmeGDmOGDl+GDruGDleGDkOGDoOGDmOGDoSDhg6jhg5Thg5Xhg6Hhg5Thg5Hhg5jhg6Hhg5fhg5Xhg5jhg6EhXCIsXG4gICAgY29tcGxldGluZ1N1cnZleUJlZm9yZTogXCLhg6nhg5Xhg5Thg5zhg5gg4YOp4YOQ4YOc4YOQ4YOs4YOU4YOg4YOU4YOR4YOYIOGDkOGDqeGDleGDlOGDnOGDlOGDkeGDoSwg4YOg4YOd4YObIOGDl+GDpeGDleGDlOGDnCDhg6Phg5nhg5Xhg5Qg4YOT4YOQ4YOQ4YOh4YOg4YOj4YOa4YOU4YOXIOGDlOGDoSDhg5Lhg5Dhg5vhg53hg5nhg5jhg5fhg67hg5Xhg5AuXCIsXG4gICAgbG9hZGluZ1N1cnZleTogXCLhg6nhg5Dhg6Lhg5Xhg5jhg6Dhg5fhg5Xhg5Ag4YOh4YOU4YOg4YOV4YOU4YOg4YOY4YOT4YOQ4YOcLi4uXCIsXG4gICAgcGxhY2Vob2xkZXI6IFwi4YOQ4YOg4YOp4YOU4YOV4YOQLi4uXCIsXG4gICAgcmF0aW5nT3B0aW9uc0NhcHRpb246IFwi4YOQ4YOY4YOg4YOp4YOY4YOU4YOXLi4uXCIsXG4gICAgdmFsdWU6IFwi4YOm4YOY4YOg4YOU4YOR4YOj4YOa4YOU4YOR4YOQXCIsXG4gICAgcmVxdWlyZWRFcnJvcjogXCLhg5Lhg5fhg67hg53hg5Xhg5cg4YOj4YOe4YOQ4YOh4YOj4YOu4YOU4YOXIOGDmeGDmOGDl+GDruGDleGDkOGDoS5cIixcbiAgICByZXF1aXJlZEVycm9ySW5QYW5lbDogXCLhg6Hhg5Dhg63hg5jhg6Dhg53hg5Ag4YOe4YOQ4YOh4YOj4YOu4YOYOiDhg6Phg57hg5Dhg6Hhg6Phg67hg5Thg5cg4YOb4YOY4YOc4YOY4YOb4YOj4YObIOGDlOGDoOGDlyDhg5nhg5jhg5fhg67hg5Xhg5Dhg6EuXCIsXG4gICAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCLhg6Hhg5Dhg63hg5jhg6Dhg53hg5Ag4YOe4YOQ4YOh4YOj4YOu4YOYOiDhg6Phg57hg5Dhg6Hhg6Phg67hg5Thg5cg4YOZ4YOY4YOX4YOu4YOV4YOU4YOR4YOhIOGDp+GDleGDlOGDmuGDkCDhg6Dhg5jhg5Lhg6jhg5guXCIsXG4gICAgbnVtZXJpY0Vycm9yOiBcIuGDnuGDkOGDoeGDo+GDruGDmCDhg6Phg5zhg5Phg5Ag4YOY4YOn4YOd4YOhIOGDoOGDmOGDquGDruGDleGDmC5cIixcbiAgICBtaW5FcnJvcjogXCLhg6bhg5jhg6Dhg5Thg5Hhg6Phg5rhg5Thg5Hhg5Ag4YOQ4YOgIOGDo+GDnOGDk+GDkCDhg5jhg6fhg53hg6Eg4YOc4YOQ4YOZ4YOa4YOU4YOR4YOYIHswfVwiLFxuICAgIG1heEVycm9yOiBcIuGDpuGDmOGDoOGDlOGDkeGDo+GDmuGDlOGDkeGDkCDhg5Dhg6Ag4YOj4YOc4YOT4YOQIOGDmOGDp+GDneGDoSB7MH1cIixcbiAgICB0ZXh0TWluTGVuZ3RoOiBcIuGDkuGDl+GDruGDneGDleGDlyDhg6jhg5Thg5jhg6fhg5Xhg5Dhg5zhg5Thg5cg4YOQ4YOg4YOQ4YOc4YOQ4YOZ4YOa4YOU4YORIHswfSDhg6Hhg5jhg5vhg5Hhg53hg5rhg50uXCIsXG4gICAgdGV4dE1heExlbmd0aDogXCLhg5Lhg5fhg67hg53hg5Xhg5csIOGDqOGDlOGDmOGDp+GDleGDkOGDnOGDneGDlyDhg5Dhg6Dhg5Dhg6Phg5vhg5Thg6Lhg5Thg6EgezB9IOGDoeGDmOGDm+GDkeGDneGDmuGDnSjhg5Thg5Ep4YOYLlwiLFxuICAgIHRleHRNaW5NYXhMZW5ndGg6IFwi4YOS4YOX4YOu4YOd4YOV4YOXLCDhg6jhg5Thg5jhg6fhg5Xhg5Dhg5zhg53hg5cg4YOb4YOY4YOc4YOY4YOb4YOj4YObIHswfSDhg5Phg5Ag4YOQ4YOg4YOQ4YOj4YOb4YOU4YOi4YOU4YOhIHsxfSDhg6Hhg5jhg5vhg5Hhg53hg5rhg50uXCIsXG4gICAgbWluUm93Q291bnRFcnJvcjogXCLhg5Lhg5fhg67hg53hg5Xhg5cg4YOo4YOU4YOQ4YOV4YOh4YOd4YOXIOGDm+GDmOGDnOGDmOGDm+GDo+GDmyB7MH0g4YOg4YOY4YOS4YOYKCDhg5Thg5Ep4YOYLlwiLFxuICAgIG1pblNlbGVjdEVycm9yOiBcIuGDkuGDl+GDruGDneGDleGDlyDhg5Dhg5jhg6Dhg6nhg5jhg5Thg5cg4YOQ4YOg4YOQ4YOc4YOQ4YOZ4YOa4YOU4YORIHswfSDhg5Xhg5Dhg6Dhg5jhg5Dhg5zhg6Lhg5guXCIsXG4gICAgbWF4U2VsZWN0RXJyb3I6IFwi4YOS4YOX4YOu4YOd4YOV4YOXIOGDkOGDmOGDoOGDqeGDmOGDlOGDlyDhg5Dhg6Dhg5Dhg6Phg5vhg5Thg6Lhg5Thg6EgezB9IOGDleGDkOGDoOGDmOGDkOGDnOGDouGDmC5cIixcbiAgICBudW1lcmljTWluTWF4OiBcIid7MH0nIOGDo+GDnOGDk+GDkCDhg5jhg6fhg53hg6Eg4YOb4YOU4YOi4YOYIOGDkOGDnCDhg6Lhg53hg5rhg5gsIOGDleGDmOGDk+GDoOGDlCB7MX0sIOGDk+GDkCDhg5zhg5Dhg5nhg5rhg5Thg5Hhg5gg4YOQ4YOcIOGDouGDneGDmuGDmCDhg5Xhg5jhg5Phg6Dhg5QgezJ9XCIsXG4gICAgbnVtZXJpY01pbjogXCInezB9JyDhg6Phg5zhg5Phg5Ag4YOY4YOn4YOd4YOhIOGDm+GDlOGDouGDmCDhg5Dhg5wg4YOi4YOd4YOa4YOYIOGDleGDmOGDk+GDoOGDlCB7MX1cIixcbiAgICBudW1lcmljTWF4OiBcIid7MH0nIOGDo+GDnOGDk+GDkCDhg5jhg6fhg53hg6Eg4YOc4YOQ4YOZ4YOa4YOU4YOR4YOYIOGDkOGDnCDhg6Lhg53hg5rhg5gg4YOV4YOY4YOT4YOg4YOUIHsxfVwiLFxuICAgIGludmFsaWRFbWFpbDogXCLhg5Lhg5fhg67hg53hg5Xhg5cg4YOo4YOU4YOY4YOn4YOV4YOQ4YOc4YOd4YOXIOGDlOGDmi4g4YOk4YOd4YOh4YOi4YOY4YOhIOGDoOGDlOGDkOGDmuGDo+GDoOGDmCDhg5vhg5jhg6Hhg5Dhg5vhg5Dhg6Dhg5fhg5guXCIsXG4gICAgaW52YWxpZEV4cHJlc3Npb246IFwi4YOS4YOQ4YOb4YOd4YOX4YOl4YOb4YOQOiB7MH0g4YOj4YOc4YOT4YOQIOGDk+GDkOGDkeGDoOGDo+GDnOGDk+GDlOGDoSBcXFwi4YOt4YOU4YOo4YOb4YOQ4YOg4YOY4YOi4YOYXFxcIi5cIixcbiAgICB1cmxSZXF1ZXN0RXJyb3I6IFwi4YOb4YOd4YOX4YOu4YOd4YOV4YOc4YOQIOGDk+GDkOGDo+GDkeGDoOGDo+GDnOGDk+GDkCDhg6jhg5Thg6rhg5Phg53hg5vhg5Dhg6EgJ3swfScuIHsxfVwiLFxuICAgIHVybEdldENob2ljZXNFcnJvcjogXCLhg5vhg53hg5fhg67hg53hg5Xhg5zhg5Dhg5sg4YOT4YOQ4YOj4YOR4YOg4YOj4YOc4YOQIOGDquGDkOGDoOGDmOGDlOGDmuGDmCDhg5vhg53hg5zhg5Dhg6rhg5Thg5vhg5Thg5Hhg5gg4YOQ4YOcIFxcXCLhg5Hhg5jhg5rhg5jhg5nhg5jhg6FcXFwiIOGDpeGDneGDnOGDlOGDkeGDkCDhg5Dhg6Dhg5Dhg6Hhg6zhg53hg6Dhg5jhg5BcIixcbiAgICBleGNlZWRNYXhTaXplOiBcIuGDpOGDkOGDmOGDmuGDmOGDoSDhg5bhg53hg5vhg5Ag4YOQ4YOgIOGDo+GDnOGDk+GDkCDhg5Dhg6bhg5Thg5vhg5Dhg6Lhg5Thg5Hhg53hg5Phg5Thg6EgezB9LlwiLFxuICAgIG90aGVyUmVxdWlyZWRFcnJvcjogXCLhg6Hhg5Dhg63hg5jhg6Dhg53hg5Ag4YOe4YOQ4YOh4YOj4YOu4YOYOiDhg6jhg5Thg5jhg6fhg5Xhg5Dhg5zhg5Thg5cg4YOh4YOu4YOV4YOQIOGDm+GDnOGDmOGDqOGDleGDnOGDlOGDmuGDneGDkeGDkC5cIixcbiAgICB1cGxvYWRpbmdGaWxlOiBcIuGDl+GDpeGDleGDlOGDnOGDmCDhg6Thg5Dhg5jhg5rhg5gg4YOQ4YOi4YOV4YOY4YOg4YOX4YOV4YOQ4YOQLiDhg5Lhg5fhg67hg53hg5Xhg5cg4YOT4YOQ4YOU4YOa4YOd4YOT4YOd4YOXIOGDoOGDkOGDm+GDk+GDlOGDnOGDmOGDm+GDlCDhg6zhg5Dhg5vhg6Eg4YOT4YOQIOGDmeGDmOGDk+GDlOGDlSDhg6Hhg6rhg5Dhg5Phg53hg5cuXCIsXG4gICAgbG9hZGluZ0ZpbGU6IFwi4YOY4YOi4YOV4YOY4YOg4YOX4YOU4YOR4YOQLi4uXCIsXG4gICAgY2hvb3NlRmlsZTogXCLhg5Dhg5jhg6Dhg6nhg5jhg5Thg5cg4YOk4YOQ4YOY4YOa4YOYLi4uXCIsXG4gICAgbm9GaWxlQ2hvc2VuOiBcIuGDpOGDkOGDmOGDmuGDmOGDoSDhg5Dhg6Dhg6nhg5Thg5Xhg5Ag4YOQ4YOgIOGDkOGDoOGDmOGDoVwiLFxuICAgIGZpbGVEcmFnQXJlYVBsYWNlaG9sZGVyOiBcIuGDkuGDkOGDk+GDkOGDmOGDouGDkOGDnOGDlOGDlyDhg5Phg5Ag4YOp4YOQ4YOb4YOd4YOQ4YOS4YOT4YOU4YOXIOGDpOGDkOGDmOGDmuGDmCDhg5Dhg6Ug4YOQ4YOcIOGDk+GDkOGDkOGDreGDmOGDoOGDlOGDlyDhg6Xhg5Xhg5Thg5vhg53hg5cg4YOb4YOd4YOq4YOU4YOb4YOj4YOaIOGDpuGDmOGDmuGDkOGDmeGDoSDhg5Phg5Ag4YOQ4YOY4YOg4YOp4YOY4YOU4YOXIOGDpOGDkOGDmOGDmuGDmCDhg5Dhg6Hhg5Dhg6Lhg5Xhg5jhg6Dhg5fhg5Dhg5MuXCIsXG4gICAgY29uZmlybURlbGV0ZTogXCLhg5Lhg6Hhg6Phg6Dhg5cg4YOp4YOQ4YOc4YOQ4YOs4YOU4YOg4YOY4YOhIOGDrOGDkOGDqOGDmuGDkD9cIixcbiAgICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcIuGDlOGDoSDhg5vhg5zhg5jhg6jhg5Xhg5zhg5Thg5rhg53hg5Hhg5Ag4YOj4YOc4YOT4YOQIOGDmOGDp+GDneGDoSDhg6Phg5zhg5jhg5nhg5Dhg5rhg6Phg6Dhg5guXCIsXG4gICAgYWRkQ29sdW1uOiBcIuGDoeGDleGDlOGDouGDmOGDoSDhg5Phg5Dhg5vhg5Dhg6Lhg5Thg5Hhg5BcIixcbiAgICBhZGRSb3c6IFwi4YOg4YOY4YOS4YOY4YOhIOGDk+GDkOGDm+GDkOGDouGDlOGDkeGDkFwiLFxuICAgIHJlbW92ZVJvdzogXCLhg6zhg5Dhg6jhg5rhg5BcIixcbiAgICBlbXB0eVJvd3NUZXh0OiBcIuGDoOGDmOGDkuGDlOGDkeGDmCDhg5Dhg6Ag4YOQ4YOg4YOY4YOhLlwiLFxuICAgIGFkZFBhbmVsOiBcIuGDkOGDruGDkOGDmuGDmCDhg5Phg5Dhg5vhg5Dhg6Lhg5Thg5Hhg5BcIixcbiAgICByZW1vdmVQYW5lbDogXCLhg6zhg5Dhg6jhg5rhg5BcIixcbiAgICBjaG9pY2VzX0l0ZW06IFwi4YOc4YOY4YOV4YOX4YOYXCIsXG4gICAgbWF0cml4X2NvbHVtbjogXCLhg6Hhg5Xhg5Thg6Lhg5hcIixcbiAgICBtYXRyaXhfcm93OiBcIuGDoOGDmOGDkuGDmFwiLFxuICAgIG11bHRpcGxldGV4dF9pdGVtbmFtZTogXCLhg6Lhg5Thg6Xhg6Hhg6Lhg5hcIixcbiAgICBzYXZpbmdEYXRhOiBcIuGDqOGDlOGDk+GDlOGDkuGDlOGDkeGDmCDhg5jhg5zhg5Dhg67hg5Thg5Hhg5Ag4YOh4YOU4YOg4YOV4YOU4YOg4YOW4YOULi4uXCIsXG4gICAgc2F2aW5nRGF0YUVycm9yOiBcIuGDk+GDkOGDpOGDmOGDpeGDoeGDmOGDoOGDk+GDkCDhg6jhg5Thg6rhg5Phg53hg5vhg5Ag4YOT4YOQIOGDqOGDlOGDk+GDlOGDkuGDmCDhg5Xhg5Thg6Ag4YOo4YOU4YOV4YOY4YOc4YOQ4YOu4YOQ4YOV4YOT4YOY4YOXLlwiLFxuICAgIHNhdmluZ0RhdGFTdWNjZXNzOiBcIuGDqOGDlOGDk+GDlOGDkuGDlOGDkeGDmCDhg6zhg5Dhg6Dhg5vhg5Dhg6Lhg5Thg5Hhg5jhg5cg4YOS4YOQ4YOT4YOQ4YOQ4YOg4YOp4YOY4YOc4YOU4YOhIVwiLFxuICAgIHNhdmVBZ2FpbkJ1dHRvbjogXCLhg5nhg5jhg5Phg5Thg5Ug4YOh4YOq4YOQ4YOT4YOUXCIsXG4gICAgdGltZXJNaW46IFwi4YOs4YOXXCIsXG4gICAgdGltZXJTZWM6IFwi4YOs4YObXCIsXG4gICAgdGltZXJTcGVudEFsbDogXCLhg5fhg6Xhg5Xhg5Thg5wg4YOT4YOQ4YOu4YOQ4YOg4YOv4YOU4YOXIHswfSDhg5Dhg5sg4YOS4YOV4YOU4YOg4YOT4YOW4YOUIOGDk+GDkCDhg6/hg5Dhg5vhg6jhg5ggezF9LlwiLFxuICAgIHRpbWVyU3BlbnRQYWdlOiBcIuGDl+GDpeGDleGDlOGDnCB7MH0g4YOT4YOQ4YOu4YOQ4YOg4YOv4YOU4YOXIOGDkOGDmyDhg5Lhg5Xhg5Thg6Dhg5Phg5bhg5QuXCIsXG4gICAgdGltZXJTcGVudFN1cnZleTogXCLhg5fhg6Xhg5Xhg5Thg5wg4YOh4YOj4YOaIHswfSDhg5Phg5Dhg67hg5Dhg6Dhg6/hg5Thg5cuXCIsXG4gICAgdGltZXJMaW1pdEFsbDogXCLhg5fhg6Xhg5Xhg5Thg5wg4YOT4YOQ4YOu4YOQ4YOg4YOv4YOU4YOXIHsxfSB7MH0g4YOQ4YObIOGDkuGDleGDlOGDoOGDk+GDluGDlCDhg5Phg5Ag4YOv4YOQ4YOb4YOo4YOYIHszfSB7Mn0uXCIsXG4gICAgdGltZXJMaW1pdFBhZ2U6IFwi4YOX4YOl4YOV4YOU4YOcIOGDkOGDmyDhg5Lhg5Xhg5Thg6Dhg5Phg5bhg5QgezF9IHswfSDhg5Phg5Dhg67hg5Dhg6Dhg6/hg5Thg5cuXCIsXG4gICAgdGltZXJMaW1pdFN1cnZleTogXCLhg5fhg6Xhg5Xhg5Thg5wg4YOh4YOj4YOaIHsxfSB7MH0g4YOT4YOQ4YOu4YOQ4YOg4YOv4YOU4YOXLlwiLFxuICAgIGNsZWFyQ2FwdGlvbjogXCLhg5vhg53hg6zhg5vhg5Thg5zhg5Phg5jhg5rhg5gg4YOq4YOQXCIsXG4gICAgc2lnbmF0dXJlUGxhY2VIb2xkZXI6IFwi4YOo4YOU4YOh4YOV4YOa4YOQIOGDkOGDpVwiLFxuICAgIGNob29zZUZpbGVDYXB0aW9uOiBcIuGDleGDkOGDo+GDqeGDlOGDoOGDmOGDoSDhg5zhg5Dhg67hg5Xhg5BcIixcbiAgICB0YWtlUGhvdG9DYXB0aW9uOiBcIuGDkuGDkOGDk+GDkOGDmOGDpuGDlOGDlyDhg6Thg53hg6Lhg51cIixcbiAgICBjYW1lcmFQbGFjZUhvbGRlcjogXCLhg5Phg5Dhg5Dhg63hg5jhg6Dhg5Thg5cg4YOl4YOV4YOU4YOb4YOd4YOXIOGDm+GDneGDquGDlOGDm+GDo+GDmiDhg6bhg5jhg5rhg5Dhg5nhg6EsIOGDoOGDneGDmyDhg5Lhg5Dhg5Phg5Dhg5jhg6bhg53hg5cg4YOk4YOd4YOi4YOdIOGDmeGDkOGDm+GDlOGDoOGDmOGDoSDhg5Lhg5Dhg5vhg53hg6fhg5Thg5zhg5Thg5Hhg5jhg5cuXCIsXG4gICAgZmlsZUNhbWVyYURyYWdBcmVhUGxhY2VIb2xkZXI6IFwi4YOS4YOQ4YOT4YOQ4YOY4YOi4YOQ4YOc4YOU4YOXIOGDk+GDkCDhg6nhg5Dhg5vhg53hg5Dhg5Lhg5Phg5Thg5cg4YOQ4YOcIOGDqOGDlOGDkOGDoOGDqeGDmOGDlOGDlyDhg6Thg5Dhg5jhg5rhg5gg4YOZ4YOQ4YOb4YOU4YOg4YOY4YOhIOGDkuGDkOGDm+GDneGDp+GDlOGDnOGDlOGDkeGDmOGDlyDhg6Thg53hg6Lhg53hg6Eg4YOQ4YOh4YOQ4YOi4YOV4YOY4YOg4YOX4YOQ4YOTIOGDkOGDnCDhg5Lhg5Dhg5Phg5Dhg6Hhg5Dhg6bhg5Thg5Hhg5Dhg5MuXCIsXG4gICAgcmVwbGFjZUZpbGVDYXB0aW9uOiBcIuGDpOGDkOGDmOGDmuGDmOGDoSDhg6jhg5Thg6rhg5Xhg5rhg5BcIixcbiAgICByZW1vdmVGaWxlQ2FwdGlvbjogXCLhg5Dhg5sg4YOk4YOQ4YOY4YOa4YOY4YOhIOGDrOGDkOGDqOGDmuGDkFwiLFxuICAgIGJvb2xlYW5DaGVja2VkTGFiZWw6IFwi4YOT4YOY4YOQ4YOuXCIsXG4gICAgYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcIuGDkOGDoOGDkFwiLFxuICAgIGNvbmZpcm1SZW1vdmVGaWxlOiBcIuGDk+GDkOGDoOGDrOGDm+GDo+GDnOGDlOGDkeGDo+GDmuGDmCDhg67hg5Dhg6Dhg5csIOGDoOGDneGDmyDhg5Lhg6Hhg6Phg6Dhg5cg4YOQ4YObIOGDpOGDkOGDmOGDmuGDmOGDoSDhg6zhg5Dhg6jhg5rhg5A6IHswfT9cIixcbiAgICBjb25maXJtUmVtb3ZlQWxsRmlsZXM6IFwi4YOT4YOQ4YOg4YOs4YOb4YOj4YOc4YOU4YOR4YOj4YOa4YOYIOGDruGDkOGDoOGDlywg4YOg4YOd4YObIOGDkuGDoeGDo+GDoOGDlyDhg6fhg5Xhg5Thg5rhg5Ag4YOk4YOQ4YOY4YOa4YOY4YOhIOGDrOGDkOGDqOGDmuGDkD9cIixcbiAgICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwi4YOZ4YOY4YOX4YOu4YOV4YOY4YOhIOGDoeGDkOGDl+GDkOGDo+GDoOGDmFwiLFxuICAgIG1vZGFsQ2FuY2VsQnV0dG9uVGV4dDogXCLhg5Lhg5Dhg6Phg6Xhg5vhg5Thg5Hhg5BcIixcbiAgICBtb2RhbEFwcGx5QnV0dG9uVGV4dDogXCLhg5vhg5jhg6bhg5Thg5Hhg5BcIixcbiAgICBmaWx0ZXJTdHJpbmdQbGFjZWhvbGRlcjogXCLhg6nhg5Dhg6zhg5Thg6Dhg5Thg5cg4YOr4YOU4YOR4YOc4YOQLi4uXCIsXG4gICAgZW1wdHlNZXNzYWdlOiBcIuGDm+GDneGDnOGDkOGDquGDlOGDm+GDlOGDkeGDmCDhg5Dhg6Ag4YOQ4YOg4YOY4YOhIOGDoeGDkOGDqeGDleGDlOGDnOGDlOGDkeGDmuGDkOGDk1wiLFxuICAgIG5vRW50cmllc1RleHQ6IFwi4YOv4YOU4YOgIOGDkOGDoCDhg5Dhg6Dhg5jhg6Eg4YOp4YOQ4YOc4YOQ4YOs4YOU4YOg4YOU4YOR4YOYLlxcbuGDk+GDkOGDkOGDreGDmOGDoOGDlOGDlyDhg6Xhg5Xhg5Thg5vhg53hg5cg4YOb4YOd4YOq4YOU4YOb4YOj4YOaIOGDpuGDmOGDmuGDkOGDmeGDoSwg4YOg4YOd4YObIOGDk+GDkOGDkOGDm+GDkOGDouGDneGDlyDhg5Dhg67hg5Dhg5rhg5gg4YOp4YOQ4YOc4YOQ4YOs4YOU4YOg4YOYLlwiLFxuICAgIG5vRW50cmllc1JlYWRvbmx5VGV4dDogXCLhg5Dhg6Ag4YOQ4YOg4YOh4YOU4YOR4YOd4YOR4YOhIOGDqeGDkOGDnOGDkOGDrOGDlOGDoOGDlOGDkeGDmC5cIixcbiAgICBtb3JlOiBcIuGDoeGDoOGDo+GDmuGDkOGDk1wiLFxuICAgIHRhZ2JveERvbmVCdXR0b25DYXB0aW9uOiBcIuGDmeGDkOGDoOGDkuGDmFwiLFxuICAgIHNlbGVjdFRvUmFua0VtcHR5UmFua2VkQXJlYVRleHQ6IFwi4YOn4YOV4YOU4YOa4YOQIOGDkOGDoOGDqeGDlOGDleGDkOGDnOGDmCDhg6Dhg5Dhg5zhg5/hg5jhg6Dhg5Thg5Hhg6Phg5rhg5jhg5BcIixcbiAgICBzZWxlY3RUb1JhbmtFbXB0eVVucmFua2VkQXJlYVRleHQ6IFwi4YOS4YOQ4YOT4YOQ4YOY4YOi4YOQ4YOc4YOU4YOXIOGDk+GDkCDhg6nhg5Dhg5vhg53hg5Dhg5Lhg5Phg5Thg5cg4YOQ4YOg4YOp4YOU4YOV4YOQ4YOc4YOYIOGDkOGDpSwg4YOg4YOd4YObIOGDk+GDkOGDkOGDoeGDkOGDruGDlOGDmuGDneGDlyDhg5jhg6Hhg5jhg5zhg5hcIlxufTtcbnN1cnZleV9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdXJ2ZXlMb2NhbGl6YXRpb25cIl0ubG9jYWxlc1tcImthXCJdID0gZ2VvcmdpYW5TdXJ2ZXlTdHJpbmdzO1xuc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN1cnZleUxvY2FsaXphdGlvblwiXS5sb2NhbGVOYW1lc1tcImthXCJdID0gXCLhg6Xhg5Dhg6Dhg5fhg6Phg5rhg5hcIjtcbi8vIFRoZSBmb2xsb3dpbmcgc3RyaW5ncyBoYXZlIGJlZW4gdHJhbnNsYXRlZCBieSBhIG1hY2hpbmUgdHJhbnNsYXRpb24gc2VydmljZVxuLy8gUmVtb3ZlIHRob3NlIHN0cmluZ3MgdGhhdCB5b3UgaGF2ZSBjb3JyZWN0ZWQgbWFudWFsbHlcbi8vIHByZXZpZXdUZXh0OiBcIlByZXZpZXdcIiA9PiBcIuGDkuGDkOGDk+GDkOGDruGDlOGDk+GDleGDkFwiXG4vLyBlZGl0VGV4dDogXCJFZGl0XCIgPT4gXCLhg6Dhg5Thg5Phg5Dhg6Xhg6Lhg5jhg6Dhg5Thg5Hhg5BcIlxuLy8gc3RhcnRTdXJ2ZXlUZXh0OiBcIlN0YXJ0XCIgPT4gXCLhg5Phg5Dhg6Xhg53hg6Xhg5Xhg5BcIlxuLy8gbm9uZUl0ZW1UZXh0OiBcIk5vbmVcIiA9PiBcIuGDkOGDoOGDquGDlOGDoOGDl+GDmFwiXG4vLyBzZWxlY3RBbGxJdGVtVGV4dDogXCJTZWxlY3QgQWxsXCIgPT4gXCLhg6fhg5Xhg5Thg5rhg5Dhg6Eg4YOb4YOd4YOc4YOY4YOo4YOc4YOQXCJcbi8vIGluZGV4VGV4dDogXCJ7MH0gb2YgezF9XCIgPT4gXCJ7MX0gezB9XCJcbi8vIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCJ7MH0gb2YgezF9XCIgPT4gXCJ7MX0gezB9XCJcbi8vIHBhbmVsRHluYW1pY1RhYlRleHRGb3JtYXQ6IFwiUGFuZWwge3BhbmVsSW5kZXh9XCIgPT4gXCJQYW5lbCB7cGFuZWxJbmRleH1cIlxuLy8gcXVlc3Rpb25zUHJvZ3Jlc3NUZXh0OiBcIkFuc3dlcmVkIHswfS97MX0gcXVlc3Rpb25zXCIgPT4gXCLhg6Phg57hg5Dhg6Hhg6Phg67hg5Thg5cgezB9L3sxfSDhg5nhg5jhg5fhg67hg5Xhg5Thg5Hhg6FcIlxuLy8gY29tcGxldGluZ1N1cnZleUJlZm9yZTogXCJPdXIgcmVjb3JkcyBzaG93IHRoYXQgeW91IGhhdmUgYWxyZWFkeSBjb21wbGV0ZWQgdGhpcyBzdXJ2ZXkuXCIgPT4gXCLhg6nhg5Xhg5Thg5zhg5gg4YOp4YOQ4YOc4YOQ4YOs4YOU4YOg4YOU4YOR4YOYIOGDkOGDqeGDleGDlOGDnOGDlOGDkeGDoSwg4YOg4YOd4YObIOGDl+GDpeGDleGDlOGDnCDhg6Phg5nhg5Xhg5Qg4YOT4YOQ4YOQ4YOh4YOg4YOj4YOa4YOU4YOXIOGDlOGDoSDhg5Lhg5Dhg5vhg53hg5nhg5jhg5fhg67hg5Xhg5AuXCJcbi8vIHJhdGluZ09wdGlvbnNDYXB0aW9uOiBcIlNlbGVjdC4uLlwiID0+IFwi4YOQ4YOY4YOg4YOp4YOY4YOU4YOXLi4uXCJcbi8vIHZhbHVlOiBcInZhbHVlXCIgPT4gXCLhg6bhg5jhg6Dhg5Thg5Hhg6Phg5rhg5Thg5Hhg5BcIlxuLy8gcmVxdWlyZWRFcnJvckluUGFuZWw6IFwiUmVzcG9uc2UgcmVxdWlyZWQ6IGFuc3dlciBhdCBsZWFzdCBvbmUgcXVlc3Rpb24uXCIgPT4gXCLhg6Hhg5Dhg63hg5jhg6Dhg53hg5Ag4YOe4YOQ4YOh4YOj4YOu4YOYOiDhg6Phg57hg5Dhg6Hhg6Phg67hg5Thg5cg4YOb4YOY4YOc4YOY4YOb4YOj4YObIOGDlOGDoOGDlyDhg5nhg5jhg5fhg67hg5Xhg5Dhg6EuXCJcbi8vIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwiUmVzcG9uc2UgcmVxdWlyZWQ6IGFuc3dlciBxdWVzdGlvbnMgaW4gYWxsIHJvd3MuXCIgPT4gXCLhg6Hhg5Dhg63hg5jhg6Dhg53hg5Ag4YOe4YOQ4YOh4YOj4YOu4YOYOiDhg6Phg57hg5Dhg6Hhg6Phg67hg5Thg5cg4YOZ4YOY4YOX4YOu4YOV4YOU4YOR4YOhIOGDp+GDleGDlOGDmuGDkCDhg6Dhg5jhg5Lhg6jhg5guXCJcbi8vIG1pbkVycm9yOiBcIlRoZSB2YWx1ZSBzaG91bGQgbm90IGJlIGxlc3MgdGhhbiB7MH1cIiA9PiBcIuGDpuGDmOGDoOGDlOGDkeGDo+GDmuGDlOGDkeGDkCDhg5Dhg6Ag4YOj4YOc4YOT4YOQIOGDmOGDp+GDneGDoSDhg5zhg5Dhg5nhg5rhg5Thg5Hhg5ggezB9XCJcbi8vIG1heEVycm9yOiBcIlRoZSB2YWx1ZSBzaG91bGQgbm90IGJlIGdyZWF0ZXIgdGhhbiB7MH1cIiA9PiBcIuGDpuGDmOGDoOGDlOGDkeGDo+GDmuGDlOGDkeGDkCDhg5Dhg6Ag4YOj4YOc4YOT4YOQIOGDmOGDp+GDneGDoSB7MH1cIlxuLy8gdGV4dE1heExlbmd0aDogXCJQbGVhc2UgZW50ZXIgbm8gbW9yZSB0aGFuIHswfSBjaGFyYWN0ZXIocykuXCIgPT4gXCLhg5Lhg5fhg67hg53hg5Xhg5csIOGDqOGDlOGDmOGDp+GDleGDkOGDnOGDneGDlyDhg5Dhg6Dhg5Dhg6Phg5vhg5Thg6Lhg5Thg6EgezB9IOGDoeGDmOGDm+GDkeGDneGDmuGDnSjhg5Thg5Ep4YOYLlwiXG4vLyB0ZXh0TWluTWF4TGVuZ3RoOiBcIlBsZWFzZSBlbnRlciBhdCBsZWFzdCB7MH0gYW5kIG5vIG1vcmUgdGhhbiB7MX0gY2hhcmFjdGVycy5cIiA9PiBcIuGDkuGDl+GDruGDneGDleGDlywg4YOo4YOU4YOY4YOn4YOV4YOQ4YOc4YOd4YOXIOGDm+GDmOGDnOGDmOGDm+GDo+GDmyB7MH0g4YOT4YOQIOGDkOGDoOGDkOGDo+GDm+GDlOGDouGDlOGDoSB7MX0g4YOh4YOY4YOb4YOR4YOd4YOa4YOdLlwiXG4vLyBtaW5Sb3dDb3VudEVycm9yOiBcIlBsZWFzZSBmaWxsIGluIGF0IGxlYXN0IHswfSByb3cocykuXCIgPT4gXCLhg5Lhg5fhg67hg53hg5Xhg5cg4YOo4YOU4YOQ4YOV4YOh4YOd4YOXIOGDm+GDmOGDnOGDmOGDm+GDo+GDmyB7MH0g4YOg4YOY4YOS4YOYKCDhg5Thg5Ep4YOYLlwiXG4vLyBpbnZhbGlkRXhwcmVzc2lvbjogXCJUaGUgZXhwcmVzc2lvbjogezB9IHNob3VsZCByZXR1cm4gJ3RydWUnLlwiID0+IFwi4YOS4YOQ4YOb4YOd4YOX4YOl4YOb4YOQOiB7MH0g4YOj4YOc4YOT4YOQIOGDk+GDkOGDkeGDoOGDo+GDnOGDk+GDlOGDoSBcXFwi4YOt4YOU4YOo4YOb4YOQ4YOg4YOY4YOi4YOYXFxcIi5cIlxuLy8gdXJsUmVxdWVzdEVycm9yOiBcIlRoZSByZXF1ZXN0IHJldHVybmVkIGVycm9yICd7MH0nLiB7MX1cIiA9PiBcIuGDm+GDneGDl+GDruGDneGDleGDnOGDkCDhg5Phg5Dhg6Phg5Hhg6Dhg6Phg5zhg5Phg5Ag4YOo4YOU4YOq4YOT4YOd4YOb4YOQ4YOhICd7MH0nLiB7MX1cIlxuLy8gdXJsR2V0Q2hvaWNlc0Vycm9yOiBcIlRoZSByZXF1ZXN0IHJldHVybmVkIGVtcHR5IGRhdGEgb3IgdGhlICdwYXRoJyBwcm9wZXJ0eSBpcyBpbmNvcnJlY3RcIiA9PiBcIuGDm+GDneGDl+GDruGDneGDleGDnOGDkOGDmyDhg5Phg5Dhg6Phg5Hhg6Dhg6Phg5zhg5Ag4YOq4YOQ4YOg4YOY4YOU4YOa4YOYIOGDm+GDneGDnOGDkOGDquGDlOGDm+GDlOGDkeGDmCDhg5Dhg5wgXFxcIuGDkeGDmOGDmuGDmOGDmeGDmOGDoVxcXCIg4YOl4YOd4YOc4YOU4YOR4YOQIOGDkOGDoOGDkOGDoeGDrOGDneGDoOGDmOGDkFwiXG4vLyBleGNlZWRNYXhTaXplOiBcIlRoZSBmaWxlIHNpemUgc2hvdWxkIG5vdCBleGNlZWQgezB9LlwiID0+IFwi4YOk4YOQ4YOY4YOa4YOY4YOhIOGDluGDneGDm+GDkCDhg5Dhg6Ag4YOj4YOc4YOT4YOQIOGDkOGDpuGDlOGDm+GDkOGDouGDlOGDkeGDneGDk+GDlOGDoSB7MH0uXCJcbi8vIG90aGVyUmVxdWlyZWRFcnJvcjogXCJSZXNwb25zZSByZXF1aXJlZDogZW50ZXIgYW5vdGhlciB2YWx1ZS5cIiA9PiBcIuGDoeGDkOGDreGDmOGDoOGDneGDkCDhg57hg5Dhg6Hhg6Phg67hg5g6IOGDqOGDlOGDmOGDp+GDleGDkOGDnOGDlOGDlyDhg6Hhg67hg5Xhg5Ag4YOb4YOc4YOY4YOo4YOV4YOc4YOU4YOa4YOd4YOR4YOQLlwiXG4vLyB1cGxvYWRpbmdGaWxlOiBcIllvdXIgZmlsZSBpcyB1cGxvYWRpbmcuIFBsZWFzZSB3YWl0IHNldmVyYWwgc2Vjb25kcyBhbmQgdHJ5IGFnYWluLlwiID0+IFwi4YOX4YOl4YOV4YOU4YOc4YOYIOGDpOGDkOGDmOGDmuGDmCDhg5Dhg6Lhg5Xhg5jhg6Dhg5fhg5Xhg5Dhg5AuIOGDkuGDl+GDruGDneGDleGDlyDhg5Phg5Dhg5Thg5rhg53hg5Phg53hg5cg4YOg4YOQ4YOb4YOT4YOU4YOc4YOY4YOb4YOUIOGDrOGDkOGDm+GDoSDhg5Phg5Ag4YOZ4YOY4YOT4YOU4YOVIOGDoeGDquGDkOGDk+GDneGDly5cIlxuLy8gbG9hZGluZ0ZpbGU6IFwiTG9hZGluZy4uLlwiID0+IFwi4YOY4YOi4YOV4YOY4YOg4YOX4YOU4YOR4YOQLi4uXCJcbi8vIGNob29zZUZpbGU6IFwiQ2hvb3NlIGZpbGUocykuLi5cIiA9PiBcIuGDkOGDmOGDoOGDqeGDmOGDlOGDlyDhg6Thg5Dhg5jhg5rhg5guLi5cIlxuLy8gbm9GaWxlQ2hvc2VuOiBcIk5vIGZpbGUgY2hvc2VuXCIgPT4gXCLhg6Thg5Dhg5jhg5rhg5jhg6Eg4YOQ4YOg4YOp4YOU4YOV4YOQIOGDkOGDoCDhg5Dhg6Dhg5jhg6FcIlxuLy8gZmlsZURyYWdBcmVhUGxhY2Vob2xkZXI6IFwiRHJhZyBhbmQgZHJvcCBhIGZpbGUgaGVyZSBvciBjbGljayB0aGUgYnV0dG9uIGJlbG93IGFuZCBjaG9vc2UgYSBmaWxlIHRvIHVwbG9hZC5cIiA9PiBcIuGDkuGDkOGDk+GDkOGDmOGDouGDkOGDnOGDlOGDlyDhg5Phg5Ag4YOp4YOQ4YOb4YOd4YOQ4YOS4YOT4YOU4YOXIOGDpOGDkOGDmOGDmuGDmCDhg5Dhg6Ug4YOQ4YOcIOGDk+GDkOGDkOGDreGDmOGDoOGDlOGDlyDhg6Xhg5Xhg5Thg5vhg53hg5cg4YOb4YOd4YOq4YOU4YOb4YOj4YOaIOGDpuGDmOGDmuGDkOGDmeGDoSDhg5Phg5Ag4YOQ4YOY4YOg4YOp4YOY4YOU4YOXIOGDpOGDkOGDmOGDmuGDmCDhg5Dhg6Hhg5Dhg6Lhg5Xhg5jhg6Dhg5fhg5Dhg5MuXCJcbi8vIGNvbmZpcm1EZWxldGU6IFwiRG8geW91IHdhbnQgdG8gZGVsZXRlIHRoZSByZWNvcmQ/XCIgPT4gXCLhg5Lhg6Hhg6Phg6Dhg5cg4YOp4YOQ4YOc4YOQ4YOs4YOU4YOg4YOY4YOhIOGDrOGDkOGDqOGDmuGDkD9cIlxuLy8ga2V5RHVwbGljYXRpb25FcnJvcjogXCJUaGlzIHZhbHVlIHNob3VsZCBiZSB1bmlxdWUuXCIgPT4gXCLhg5Thg6Eg4YOb4YOc4YOY4YOo4YOV4YOc4YOU4YOa4YOd4YOR4YOQIOGDo+GDnOGDk+GDkCDhg5jhg6fhg53hg6Eg4YOj4YOc4YOY4YOZ4YOQ4YOa4YOj4YOg4YOYLlwiXG4vLyBhZGRDb2x1bW46IFwiQWRkIENvbHVtblwiID0+IFwi4YOh4YOV4YOU4YOi4YOY4YOhIOGDk+GDkOGDm+GDkOGDouGDlOGDkeGDkFwiXG4vLyBhZGRSb3c6IFwiQWRkIFJvd1wiID0+IFwi4YOg4YOY4YOS4YOY4YOhIOGDk+GDkOGDm+GDkOGDouGDlOGDkeGDkFwiXG4vLyByZW1vdmVSb3c6IFwiUmVtb3ZlXCIgPT4gXCLhg6zhg5Dhg6jhg5rhg5BcIlxuLy8gZW1wdHlSb3dzVGV4dDogXCJUaGVyZSBhcmUgbm8gcm93cy5cIiA9PiBcIuGDoOGDmOGDkuGDlOGDkeGDmCDhg5Dhg6Ag4YOQ4YOg4YOY4YOhLlwiXG4vLyBhZGRQYW5lbDogXCJBZGQgbmV3XCIgPT4gXCLhg5Dhg67hg5Dhg5rhg5gg4YOT4YOQ4YOb4YOQ4YOi4YOU4YOR4YOQXCJcbi8vIHJlbW92ZVBhbmVsOiBcIlJlbW92ZVwiID0+IFwi4YOs4YOQ4YOo4YOa4YOQXCJcbi8vIGNob2ljZXNfSXRlbTogXCJpdGVtXCIgPT4gXCLhg5zhg5jhg5Xhg5fhg5hcIlxuLy8gbWF0cml4X2NvbHVtbjogXCJDb2x1bW5cIiA9PiBcIuGDoeGDleGDlOGDouGDmFwiXG4vLyBtYXRyaXhfcm93OiBcIlJvd1wiID0+IFwi4YOg4YOY4YOS4YOYXCJcbi8vIG11bHRpcGxldGV4dF9pdGVtbmFtZTogXCJ0ZXh0XCIgPT4gXCLhg6Lhg5Thg6Xhg6Hhg6Lhg5hcIlxuLy8gc2F2aW5nRGF0YTogXCJUaGUgcmVzdWx0cyBhcmUgYmVpbmcgc2F2ZWQgb24gdGhlIHNlcnZlci4uLlwiID0+IFwi4YOo4YOU4YOT4YOU4YOS4YOU4YOR4YOYIOGDmOGDnOGDkOGDruGDlOGDkeGDkCDhg6Hhg5Thg6Dhg5Xhg5Thg6Dhg5bhg5QuLi5cIlxuLy8gc2F2aW5nRGF0YUVycm9yOiBcIkFuIGVycm9yIG9jY3VycmVkIGFuZCB3ZSBjb3VsZCBub3Qgc2F2ZSB0aGUgcmVzdWx0cy5cIiA9PiBcIuGDk+GDkOGDpOGDmOGDpeGDoeGDmOGDoOGDk+GDkCDhg6jhg5Thg6rhg5Phg53hg5vhg5Ag4YOT4YOQIOGDqOGDlOGDk+GDlOGDkuGDmCDhg5Xhg5Thg6Ag4YOo4YOU4YOV4YOY4YOc4YOQ4YOu4YOQ4YOV4YOT4YOY4YOXLlwiXG4vLyBzYXZpbmdEYXRhU3VjY2VzczogXCJUaGUgcmVzdWx0cyB3ZXJlIHNhdmVkIHN1Y2Nlc3NmdWxseSFcIiA9PiBcIuGDqOGDlOGDk+GDlOGDkuGDlOGDkeGDmCDhg6zhg5Dhg6Dhg5vhg5Dhg6Lhg5Thg5Hhg5jhg5cg4YOS4YOQ4YOT4YOQ4YOQ4YOg4YOp4YOY4YOc4YOU4YOhIVwiXG4vLyBzYXZlQWdhaW5CdXR0b246IFwiVHJ5IGFnYWluXCIgPT4gXCLhg5nhg5jhg5Phg5Thg5Ug4YOh4YOq4YOQ4YOT4YOUXCJcbi8vIHRpbWVyTWluOiBcIm1pblwiID0+IFwi4YOs4YOXXCJcbi8vIHRpbWVyU2VjOiBcInNlY1wiID0+IFwi4YOs4YObXCJcbi8vIHRpbWVyU3BlbnRBbGw6IFwiWW91IGhhdmUgc3BlbnQgezB9IG9uIHRoaXMgcGFnZSBhbmQgezF9IGluIHRvdGFsLlwiID0+IFwi4YOX4YOl4YOV4YOU4YOcIOGDk+GDkOGDruGDkOGDoOGDr+GDlOGDlyB7MH0g4YOQ4YObIOGDkuGDleGDlOGDoOGDk+GDluGDlCDhg5Phg5Ag4YOv4YOQ4YOb4YOo4YOYIHsxfS5cIlxuLy8gdGltZXJTcGVudFBhZ2U6IFwiWW91IGhhdmUgc3BlbnQgezB9IG9uIHRoaXMgcGFnZS5cIiA9PiBcIuGDl+GDpeGDleGDlOGDnCB7MH0g4YOT4YOQ4YOu4YOQ4YOg4YOv4YOU4YOXIOGDkOGDmyDhg5Lhg5Xhg5Thg6Dhg5Phg5bhg5QuXCJcbi8vIHRpbWVyU3BlbnRTdXJ2ZXk6IFwiWW91IGhhdmUgc3BlbnQgezB9IGluIHRvdGFsLlwiID0+IFwi4YOX4YOl4YOV4YOU4YOcIOGDoeGDo+GDmiB7MH0g4YOT4YOQ4YOu4YOQ4YOg4YOv4YOU4YOXLlwiXG4vLyB0aW1lckxpbWl0QWxsOiBcIllvdSBoYXZlIHNwZW50IHswfSBvZiB7MX0gb24gdGhpcyBwYWdlIGFuZCB7Mn0gb2YgezN9IGluIHRvdGFsLlwiID0+IFwi4YOX4YOl4YOV4YOU4YOcIOGDk+GDkOGDruGDkOGDoOGDr+GDlOGDlyB7MX0gezB9IOGDkOGDmyDhg5Lhg5Xhg5Thg6Dhg5Phg5bhg5Qg4YOT4YOQIOGDr+GDkOGDm+GDqOGDmCB7M30gezJ9LlwiXG4vLyB0aW1lckxpbWl0UGFnZTogXCJZb3UgaGF2ZSBzcGVudCB7MH0gb2YgezF9IG9uIHRoaXMgcGFnZS5cIiA9PiBcIuGDl+GDpeGDleGDlOGDnCDhg5Dhg5sg4YOS4YOV4YOU4YOg4YOT4YOW4YOUIHsxfSB7MH0g4YOT4YOQ4YOu4YOQ4YOg4YOv4YOU4YOXLlwiXG4vLyB0aW1lckxpbWl0U3VydmV5OiBcIllvdSBoYXZlIHNwZW50IHswfSBvZiB7MX0gaW4gdG90YWwuXCIgPT4gXCLhg5fhg6Xhg5Xhg5Thg5wg4YOh4YOj4YOaIHsxfSB7MH0g4YOT4YOQ4YOu4YOQ4YOg4YOv4YOU4YOXLlwiXG4vLyBjbGVhckNhcHRpb246IFwiQ2xlYXJcIiA9PiBcIuGDm+GDneGDrOGDm+GDlOGDnOGDk+GDmOGDmuGDmCDhg6rhg5BcIlxuLy8gc2lnbmF0dXJlUGxhY2VIb2xkZXI6IFwiU2lnbiBoZXJlXCIgPT4gXCLhg6jhg5Thg6Hhg5Xhg5rhg5Ag4YOQ4YOlXCJcbi8vIGNob29zZUZpbGVDYXB0aW9uOiBcIkNob29zZSBmaWxlXCIgPT4gXCLhg5Xhg5Dhg6Phg6nhg5Thg6Dhg5jhg6Eg4YOc4YOQ4YOu4YOV4YOQXCJcbi8vIHJlbW92ZUZpbGVDYXB0aW9uOiBcIlJlbW92ZSB0aGlzIGZpbGVcIiA9PiBcIuGDkOGDmyDhg6Thg5Dhg5jhg5rhg5jhg6Eg4YOs4YOQ4YOo4YOa4YOQXCJcbi8vIGJvb2xlYW5DaGVja2VkTGFiZWw6IFwiWWVzXCIgPT4gXCLhg5Phg5jhg5Dhg65cIlxuLy8gYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcIk5vXCIgPT4gXCLhg5Dhg6Dhg5BcIlxuLy8gY29uZmlybVJlbW92ZUZpbGU6IFwiQXJlIHlvdSBzdXJlIHRoYXQgeW91IHdhbnQgdG8gcmVtb3ZlIHRoaXMgZmlsZTogezB9P1wiID0+IFwi4YOT4YOQ4YOg4YOs4YOb4YOj4YOc4YOU4YOR4YOj4YOa4YOYIOGDruGDkOGDoOGDlywg4YOg4YOd4YObIOGDkuGDoeGDo+GDoOGDlyDhg5Dhg5sg4YOk4YOQ4YOY4YOa4YOY4YOhIOGDrOGDkOGDqOGDmuGDkDogezB9P1wiXG4vLyBjb25maXJtUmVtb3ZlQWxsRmlsZXM6IFwiQXJlIHlvdSBzdXJlIHRoYXQgeW91IHdhbnQgdG8gcmVtb3ZlIGFsbCBmaWxlcz9cIiA9PiBcIuGDk+GDkOGDoOGDrOGDm+GDo+GDnOGDlOGDkeGDo+GDmuGDmCDhg67hg5Dhg6Dhg5csIOGDoOGDneGDmyDhg5Lhg6Hhg6Phg6Dhg5cg4YOn4YOV4YOU4YOa4YOQIOGDpOGDkOGDmOGDmuGDmOGDoSDhg6zhg5Dhg6jhg5rhg5A/XCJcbi8vIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCJRdWVzdGlvbiBUaXRsZVwiID0+IFwi4YOZ4YOY4YOX4YOu4YOV4YOY4YOhIOGDoeGDkOGDl+GDkOGDo+GDoOGDmFwiXG4vLyBtb2RhbENhbmNlbEJ1dHRvblRleHQ6IFwiQ2FuY2VsXCIgPT4gXCLhg5Lhg5Dhg6Phg6Xhg5vhg5Thg5Hhg5BcIlxuLy8gbW9kYWxBcHBseUJ1dHRvblRleHQ6IFwiQXBwbHlcIiA9PiBcIuGDm+GDmOGDpuGDlOGDkeGDkFwiXG4vLyBmaWx0ZXJTdHJpbmdQbGFjZWhvbGRlcjogXCJUeXBlIHRvIHNlYXJjaC4uLlwiID0+IFwi4YOp4YOQ4YOs4YOU4YOg4YOU4YOXIOGDq+GDlOGDkeGDnOGDkC4uLlwiXG4vLyBlbXB0eU1lc3NhZ2U6IFwiTm8gZGF0YSB0byBkaXNwbGF5XCIgPT4gXCLhg5vhg53hg5zhg5Dhg6rhg5Thg5vhg5Thg5Hhg5gg4YOQ4YOgIOGDkOGDoOGDmOGDoSDhg6Hhg5Dhg6nhg5Xhg5Thg5zhg5Thg5Hhg5rhg5Dhg5NcIlxuLy8gbm9FbnRyaWVzVGV4dDogXCJUaGVyZSBhcmUgbm8gZW50cmllcyB5ZXQuXFxuQ2xpY2sgdGhlIGJ1dHRvbiBiZWxvdyB0byBhZGQgYSBuZXcgZW50cnkuXCIgPT4gXCLhg6/hg5Thg6Ag4YOQ4YOgIOGDkOGDoOGDmOGDoSDhg6nhg5Dhg5zhg5Dhg6zhg5Thg6Dhg5Thg5Hhg5guXFxu4YOT4YOQ4YOQ4YOt4YOY4YOg4YOU4YOXIOGDpeGDleGDlOGDm+GDneGDlyDhg5vhg53hg6rhg5Thg5vhg6Phg5og4YOm4YOY4YOa4YOQ4YOZ4YOhLCDhg6Dhg53hg5sg4YOT4YOQ4YOQ4YOb4YOQ4YOi4YOd4YOXIOGDkOGDruGDkOGDmuGDmCDhg6nhg5Dhg5zhg5Dhg6zhg5Thg6Dhg5guXCJcbi8vIG5vRW50cmllc1JlYWRvbmx5VGV4dDogXCJUaGVyZSBhcmUgbm8gZW50cmllcy5cIiA9PiBcIuGDkOGDoCDhg5Dhg6Dhg6Hhg5Thg5Hhg53hg5Hhg6Eg4YOp4YOQ4YOc4YOQ4YOs4YOU4YOg4YOU4YOR4YOYLlwiXG4vLyBtb3JlOiBcIk1vcmVcIiA9PiBcIuGDoeGDoOGDo+GDmuGDkOGDk1wiXG4vLyB0YWdib3hEb25lQnV0dG9uQ2FwdGlvbjogXCJPS1wiID0+IFwi4YOZ4YOQ4YOg4YOS4YOYXCJcbi8vIHNlbGVjdFRvUmFua0VtcHR5UmFua2VkQXJlYVRleHQ6IFwiQWxsIGNob2ljZXMgYXJlIHJhbmtlZFwiID0+IFwi4YOn4YOV4YOU4YOa4YOQIOGDkOGDoOGDqeGDlOGDleGDkOGDnOGDmCDhg6Dhg5Dhg5zhg5/hg5jhg6Dhg5Thg5Hhg6Phg5rhg5jhg5BcIlxuLy8gc2VsZWN0VG9SYW5rRW1wdHlVbnJhbmtlZEFyZWFUZXh0OiBcIkRyYWcgYW5kIGRyb3AgY2hvaWNlcyBoZXJlIHRvIHJhbmsgdGhlbVwiID0+IFwi4YOS4YOQ4YOT4YOQ4YOY4YOi4YOQ4YOc4YOU4YOXIOGDk+GDkCDhg6nhg5Dhg5vhg53hg5Dhg5Lhg5Phg5Thg5cg4YOQ4YOg4YOp4YOU4YOV4YOQ4YOc4YOYIOGDkOGDpSwg4YOg4YOd4YObIOGDk+GDkOGDkOGDoeGDkOGDruGDlOGDmuGDneGDlyDhg5jhg6Hhg5jhg5zhg5hcIi8vIHRha2VQaG90b0NhcHRpb246IFwiVGFrZSBQaG90b1wiID0+IFwi4YOS4YOQ4YOT4YOQ4YOY4YOm4YOU4YOXIOGDpOGDneGDouGDnVwiXG4vLyBjYW1lcmFQbGFjZUhvbGRlcjogXCJDbGljayB0aGUgYnV0dG9uIGJlbG93IHRvIHRha2UgYSBwaG90byB1c2luZyB0aGUgY2FtZXJhLlwiID0+IFwi4YOT4YOQ4YOQ4YOt4YOY4YOg4YOU4YOXIOGDpeGDleGDlOGDm+GDneGDlyDhg5vhg53hg6rhg5Thg5vhg6Phg5og4YOm4YOY4YOa4YOQ4YOZ4YOhLCDhg6Dhg53hg5sg4YOS4YOQ4YOT4YOQ4YOY4YOm4YOd4YOXIOGDpOGDneGDouGDnSDhg5nhg5Dhg5vhg5Thg6Dhg5jhg6Eg4YOS4YOQ4YOb4YOd4YOn4YOU4YOc4YOU4YOR4YOY4YOXLlwiXG4vLyBmaWxlQ2FtZXJhRHJhZ0FyZWFQbGFjZUhvbGRlcjogXCJEcmFnIGFuZCBkcm9wIG9yIHNlbGVjdCBhIGZpbGUgdG8gdXBsb2FkIG9yIHRha2UgYSBwaG90byB1c2luZyB0aGUgY2FtZXJhLlwiID0+IFwi4YOS4YOQ4YOT4YOQ4YOY4YOi4YOQ4YOc4YOU4YOXIOGDk+GDkCDhg6nhg5Dhg5vhg53hg5Dhg5Lhg5Phg5Thg5cg4YOQ4YOcIOGDqOGDlOGDkOGDoOGDqeGDmOGDlOGDlyDhg6Thg5Dhg5jhg5rhg5gg4YOZ4YOQ4YOb4YOU4YOg4YOY4YOhIOGDkuGDkOGDm+GDneGDp+GDlOGDnOGDlOGDkeGDmOGDlyDhg6Thg53hg6Lhg53hg6Eg4YOQ4YOh4YOQ4YOi4YOV4YOY4YOg4YOX4YOQ4YOTIOGDkOGDnCDhg5Lhg5Dhg5Phg5Dhg6Hhg5Dhg6bhg5Thg5Hhg5Dhg5MuXCJcbi8vIHJlcGxhY2VGaWxlQ2FwdGlvbjogXCJSZXBsYWNlIGZpbGVcIiA9PiBcIuGDpOGDkOGDmOGDmuGDmOGDoSDhg6jhg5Thg6rhg5Xhg5rhg5BcIlxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL2xvY2FsaXphdGlvbi9nZXJtYW4udHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9sb2NhbGl6YXRpb24vZ2VybWFuLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogZ2VybWFuU3VydmV5U3RyaW5ncyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJnZXJtYW5TdXJ2ZXlTdHJpbmdzXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZ2VybWFuU3VydmV5U3RyaW5nczsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHN1cnZleS1jb3JlICovIFwiLi9zcmMvZW50cmllcy9jb3JlLnRzXCIpO1xuXG52YXIgZ2VybWFuU3VydmV5U3RyaW5ncyA9IHtcbiAgICBwYWdlUHJldlRleHQ6IFwiWnVyw7xja1wiLFxuICAgIHBhZ2VOZXh0VGV4dDogXCJXZWl0ZXJcIixcbiAgICBjb21wbGV0ZVRleHQ6IFwiQWJzY2hsaWXDn2VuXCIsXG4gICAgcHJldmlld1RleHQ6IFwiVm9yc2NoYXVcIixcbiAgICBlZGl0VGV4dDogXCJCZWFyYmVpdGVuXCIsXG4gICAgc3RhcnRTdXJ2ZXlUZXh0OiBcIlN0YXJ0XCIsXG4gICAgb3RoZXJJdGVtVGV4dDogXCJTb25zdGlnZXMgKEJpdHRlIGFuZ2ViZW4pXCIsXG4gICAgbm9uZUl0ZW1UZXh0OiBcIk5pY2h0cyB0cmlmZnQgenVcIixcbiAgICBzZWxlY3RBbGxJdGVtVGV4dDogXCJBbGxlcyBhdXN3w6RobGVuXCIsXG4gICAgcHJvZ3Jlc3NUZXh0OiBcIlNlaXRlIHswfSB2b24gezF9XCIsXG4gICAgaW5kZXhUZXh0OiBcInswfSB2b24gezF9XCIsXG4gICAgcGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0OiBcIkVpbnRyYWcgezB9IHZvbiB7MX1cIixcbiAgICBwYW5lbER5bmFtaWNUYWJUZXh0Rm9ybWF0OiBcIkJlcmVpY2gge3BhbmVsSW5kZXh9XCIsXG4gICAgcXVlc3Rpb25zUHJvZ3Jlc3NUZXh0OiBcInswfS97MX0gRnJhZ2VuIGJlYW50d29ydGV0XCIsXG4gICAgZW1wdHlTdXJ2ZXk6IFwiRXMgc2luZCBrZWluZSBGcmFnZW4gdm9yaGFuZGVuLlwiLFxuICAgIGNvbXBsZXRpbmdTdXJ2ZXk6IFwiVmllbGVuIERhbmssIGRhc3MgU2llIGRpZSBVbWZyYWdlIGFiZ2VzY2hsb3NzZW4gaGFiZW4hXCIsXG4gICAgY29tcGxldGluZ1N1cnZleUJlZm9yZTogXCJXaXIgaGFiZW4gZmVzdGdlc3RlbGx0LCBkYXNzIFNpZSBkaWVzZSBVbWZyYWdlIGJlcmVpdHMgYWJnZXNjaGxvc3NlbiBoYWJlbi5cIixcbiAgICBsb2FkaW5nU3VydmV5OiBcIlVtZnJhZ2Ugd2lyZCBnZWxhZGVuLi4uXCIsXG4gICAgcGxhY2Vob2xkZXI6IFwiQml0dGUgYXVzd8OkaGxlbi4uLlwiLFxuICAgIHJhdGluZ09wdGlvbnNDYXB0aW9uOiBcIlRpcHBlbiBTaWUgaGllciwgdW0genUgYmV3ZXJ0ZW4uLi5cIixcbiAgICB2YWx1ZTogXCJXZXJ0XCIsXG4gICAgcmVxdWlyZWRFcnJvcjogXCJCaXR0ZSBiZWFudHdvcnRlbiBTaWUgZGllc2UgRnJhZ2UuXCIsXG4gICAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwiQml0dGUgYmVhbnR3b3J0ZW4gU2llIG1pbmRlc3RlbnMgZWluZSBGcmFnZS5cIixcbiAgICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIkJpdHRlIGJlYW50d29ydGVuIFNpZSBhbGxlIEZyYWdlbi5cIixcbiAgICBudW1lcmljRXJyb3I6IFwiRGVyIFdlcnQgbXVzcyBlaW5lIFphaGwgc2Vpbi5cIixcbiAgICBtaW5FcnJvcjogXCJEZXIgV2VydCBzb2xsdGUgbmljaHQga2xlaW5lciBhbHMgezB9IHNlaW5cIixcbiAgICBtYXhFcnJvcjogXCJEZXIgV2VydCBzb2xsdGUgbmljaHQgZ3LDtsOfZXIgYWxzIHswfSBzZWluXCIsXG4gICAgdGV4dE1pbkxlbmd0aDogXCJCaXR0ZSBnZWJlbiBTaWUgbWluZGVzdGVucyB7MH0gWmVpY2hlbiBlaW4uXCIsXG4gICAgdGV4dE1heExlbmd0aDogXCJCaXR0ZSBnZWJlbiBTaWUgbmljaHQgbWVociBhbHMgezB9IFplaWNoZW4gZWluLlwiLFxuICAgIHRleHRNaW5NYXhMZW5ndGg6IFwiQml0dGUgZ2ViZW4gU2llIG1pbmRlc3RlbnMgezB9IHVuZCBtYXhpbWFsIHsxfSBaZWljaGVuIGVpbi5cIixcbiAgICBtaW5Sb3dDb3VudEVycm9yOiBcIkJpdHRlIG1hY2hlbiBTaWUgaW4gbWluZGVzdGVucyB7MH0gWmVpbGVuIGVpbmUgRWluZ2FiZS5cIixcbiAgICBtaW5TZWxlY3RFcnJvcjogXCJCaXR0ZSB3w6RobGVuIFNpZSBtaW5kZXN0ZW5zIHswfSBBbnR3b3J0KGVuKSBhdXMuXCIsXG4gICAgbWF4U2VsZWN0RXJyb3I6IFwiQml0dGUgd8OkaGxlbiBTaWUgbmljaHQgbWVociBhbHMgezB9IEFudHdvcnQoZW4pIGF1cy5cIixcbiAgICBudW1lcmljTWluTWF4OiBcIid7MH0nIG11c3MgZ3LDtsOfZXIgb2RlciBnbGVpY2ggezF9IHVuZCBrbGVpbmVyIG9kZXIgZ2xlaWNoIHsyfSBzZWluXCIsXG4gICAgbnVtZXJpY01pbjogXCInezB9JyBtdXNzIGdyw7bDn2VyIG9kZXIgZ2xlaWNoIHsxfSBzZWluXCIsXG4gICAgbnVtZXJpY01heDogXCInezB9JyBtdXNzIGtsZWluZXIgb2RlciBnbGVpY2ggezF9IHNlaW5cIixcbiAgICBpbnZhbGlkRW1haWw6IFwiQml0dGUgZ2ViZW4gU2llIGVpbmUgZ8O8bHRpZ2UgRS1NYWlsLUFkcmVzc2UgZWluLlwiLFxuICAgIGludmFsaWRFeHByZXNzaW9uOiBcIkRlciBBdXNkcnVjazogezB9IG11c3MgZGVuIFdlcnQgJ3dhaHInIHp1csO8Y2tnZWJlbi5cIixcbiAgICB1cmxSZXF1ZXN0RXJyb3I6IFwiRWluIE5ldHp3ZXJrZGllbnN0IGhhdCBmb2xnZW5kZW4gRmVobGVyIHp1csO8Y2tnZWdlYmVuICd7MH0nLiB7MX1cIixcbiAgICB1cmxHZXRDaG9pY2VzRXJyb3I6IFwiRWluZSBOZXR6d2Vya2RpZW5zdCBoYXQgdW5nw7xsdGlnZSBEYXRlbiB6dXLDvGNrZ2VnZWJlblwiLFxuICAgIGV4Y2VlZE1heFNpemU6IFwiRGllIERhdGVpIGRhcmYgbmljaHQgZ3LDtsOfZXIgYWxzIHswfSBzZWluLlwiLFxuICAgIG90aGVyUmVxdWlyZWRFcnJvcjogXCJCaXR0ZSBnZWJlbiBTaWUgZWluZW4gV2VydCBhbi5cIixcbiAgICB1cGxvYWRpbmdGaWxlOiBcIkJpdHRlIHdhcnRlbiBTaWUgYmlzIGRlciBVcGxvYWQgSWhyZXIgRGF0ZWllbiBhYmdlc2NobG9zc2VuIGlzdC5cIixcbiAgICBsb2FkaW5nRmlsZTogXCJXaXJkIGhvY2hnZWxhZGVuLi4uXCIsXG4gICAgY2hvb3NlRmlsZTogXCJEYXRlaShlbikgYXVzd8OkaGxlbi4uLlwiLFxuICAgIG5vRmlsZUNob3NlbjogXCJLZWluZSBEYXRlaSBhdXNnZXfDpGhsdFwiLFxuICAgIGZpbGVEcmFnQXJlYVBsYWNlaG9sZGVyOiBcIkxlZ2VuIFNpZSBoaWVyIGVpbmUgRGF0ZWkgYWIgb2RlciBrbGlja2VuIFNpZSBhdWYgZGllIFNjaGFsdGZsw6RjaGUgdW50ZW4sIHVtIGRpZSBEYXRlaSB6dSBsYWRlbi5cIixcbiAgICBjb25maXJtRGVsZXRlOiBcIldvbGxlbiBTaWUgZGVuIEVpbnRyYWcgbMO2c2NoZW4/XCIsXG4gICAga2V5RHVwbGljYXRpb25FcnJvcjogXCJEaWVzZXIgV2VydCBtdXNzIGVpbm1hbGlnIHNlaW4uXCIsXG4gICAgYWRkQ29sdW1uOiBcIlNwYWx0ZSBoaW56dWbDvGdlblwiLFxuICAgIGFkZFJvdzogXCJaZWlsZSBoaW56dWbDvGdlblwiLFxuICAgIHJlbW92ZVJvdzogXCJFbnRmZXJuZW5cIixcbiAgICBlbXB0eVJvd3NUZXh0OiBcIkVzIGdpYnQga2VpbmUgUmVpaGVuLlwiLFxuICAgIGFkZFBhbmVsOiBcIk5ldSBoaW56dWbDvGdlblwiLFxuICAgIHJlbW92ZVBhbmVsOiBcIkVudGZlcm5lblwiLFxuICAgIGNob2ljZXNfSXRlbTogXCJFbGVtZW50XCIsXG4gICAgbWF0cml4X2NvbHVtbjogXCJTcGFsdGVcIixcbiAgICBtYXRyaXhfcm93OiBcIlplaWxlXCIsXG4gICAgbXVsdGlwbGV0ZXh0X2l0ZW1uYW1lOiBcIlRleHRcIixcbiAgICBzYXZpbmdEYXRhOiBcIkRpZSBFcmdlYm5pc3NlIHdlcmRlbiBhdWYgZGVtIFNlcnZlciBnZXNwZWljaGVydC4uLlwiLFxuICAgIHNhdmluZ0RhdGFFcnJvcjogXCJFcyBpc3QgZWluIEZlaGxlciBhdWZnZXRyZXRlbi4gRGllIEVyZ2Vibmlzc2Uga29ubnRlbiBuaWNodCBnZXNwZWljaGVydCB3ZXJkZW4uXCIsXG4gICAgc2F2aW5nRGF0YVN1Y2Nlc3M6IFwiRGllIEVyZ2Vibmlzc2Ugd3VyZGVuIGdlc3BlaWNoZXJ0IVwiLFxuICAgIHNhdmVBZ2FpbkJ1dHRvbjogXCJFcm5ldXQgYWJzZW5kZW5cIixcbiAgICB0aW1lck1pbjogXCJNaW4uXCIsXG4gICAgdGltZXJTZWM6IFwiU2VrLlwiLFxuICAgIHRpbWVyU3BlbnRBbGw6IFwiU2llIHdhcmVuIHswfSBhdWYgZGllc2VyIFNlaXRlIHVuZCBicmF1Y2h0ZW4gaW5zZ2VzYW10IHsxfS5cIixcbiAgICB0aW1lclNwZW50UGFnZTogXCJTaWUgd2FyZW4gezB9IGF1ZiBkaWVzZXIgU2VpdGUuXCIsXG4gICAgdGltZXJTcGVudFN1cnZleTogXCJTaWUgaGFiZW4gaW5zZ2VzYW10IHswfSBnZWJyYXVjaHQuXCIsXG4gICAgdGltZXJMaW1pdEFsbDogXCJTaWUgd2FyZW4gezB9IHZvbiB7MX0gYXVmIGRpZXNlciBTZWl0ZSB1bmQgYnJhdWNodGVuIGluc2dlc2FtdCB7Mn0gdm9uIHszfS5cIixcbiAgICB0aW1lckxpbWl0UGFnZTogXCJTaWUgd2FyZW4gezB9IHZvbiB7MX0gYXVmIGRpZXNlciBTZWl0ZS5cIixcbiAgICB0aW1lckxpbWl0U3VydmV5OiBcIlNpZSBoYWJlbiBpbnNnZXNhbXQgezB9IHZvbiB7MX0gZ2VicmF1Y2h0LlwiLFxuICAgIGNsZWFyQ2FwdGlvbjogXCJBdXN3YWhsIGVudGZlcm5lblwiLFxuICAgIHNpZ25hdHVyZVBsYWNlSG9sZGVyOiBcIkhpZXIgdW50ZXJzY2hyZWliZW5cIixcbiAgICBjaG9vc2VGaWxlQ2FwdGlvbjogXCJEYXRlaSBhdXN3w6RobGVuXCIsXG4gICAgdGFrZVBob3RvQ2FwdGlvbjogXCJGb3RvIG1hY2hlblwiLFxuICAgIGNhbWVyYVBsYWNlSG9sZGVyOiBcIktsaWNrZW4gU2llIGF1ZiBkaWUgU2NoYWx0ZmzDpGNoZSB1bnRlbiwgdW0gZWluIEZvdG8gbWl0IGRlciBLYW1lcmEgYXVmenVuZWhtZW4uXCIsXG4gICAgZmlsZUNhbWVyYURyYWdBcmVhUGxhY2VIb2xkZXI6IFwiWmllaGVuIFNpZSBlaW5lIERhdGVpIHBlciBEcmFnICYgRHJvcCBvZGVyIHfDpGhsZW4gU2llIHNpZSBhdXMsIHVtIHNpZSBob2NoenVsYWRlbiBvZGVyIGVpbiBGb3RvIG1pdCBkZXIgS2FtZXJhIGF1Znp1bmVobWVuLlwiLFxuICAgIHJlcGxhY2VGaWxlQ2FwdGlvbjogXCJEYXRlaSBlcnNldHplblwiLFxuICAgIHJlbW92ZUZpbGVDYXB0aW9uOiBcIkRhdGVpIGzDtnNjaGVuXCIsXG4gICAgYm9vbGVhbkNoZWNrZWRMYWJlbDogXCJKYVwiLFxuICAgIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCJOZWluXCIsXG4gICAgY29uZmlybVJlbW92ZUZpbGU6IFwiU2luZCBTaWUgc2ljaGVyLCBkYXNzIFNpZSBkaWVzZSBEYXRlaSBsw7ZzY2hlbiBtw7ZjaHRlbjogezB9P1wiLFxuICAgIGNvbmZpcm1SZW1vdmVBbGxGaWxlczogXCJTaW5kIFNpZSBzaWNoZXIsIGRhc3MgU2llIGFsbGUgRGF0ZWllbiBsw7ZzY2hlbiBtw7ZjaHRlbj9cIixcbiAgICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwiRnJhZ2VudGl0ZWxcIixcbiAgICBtb2RhbENhbmNlbEJ1dHRvblRleHQ6IFwiQWJicmVjaGVuXCIsXG4gICAgbW9kYWxBcHBseUJ1dHRvblRleHQ6IFwiQW53ZW5kZW5cIixcbiAgICBmaWx0ZXJTdHJpbmdQbGFjZWhvbGRlcjogXCJUaXBwZSB1bSB6dSBzdWNoZW4uLi5cIixcbiAgICBlbXB0eU1lc3NhZ2U6IFwiRXMgZ2lidCBub2NoIGtlaW5lIERhdGVuLlwiLFxuICAgIG5vRW50cmllc1RleHQ6IFwiRXMgZ2lidCBub2NoIGtlaW5lIEVpbnRyw6RnZS5cXG5LbGlja2VuIFNpZSBhdWYgZGllIFNjaGFsdGZsw6RjaGUgdW50ZW4sIHVtIGVpbmVuIG5ldWVuIEVpbnRyYWcgaGluenV6dWbDvGdlbi5cIixcbiAgICBub0VudHJpZXNSZWFkb25seVRleHQ6IFwiRXMgZ2lidCBrZWluZSBFaW50csOkZ2UuXCIsXG4gICAgbW9yZTogXCJNZWhyXCIsXG4gICAgdGFnYm94RG9uZUJ1dHRvbkNhcHRpb246IFwiT0tBWVwiLFxuICAgIHNlbGVjdFRvUmFua0VtcHR5UmFua2VkQXJlYVRleHQ6IFwiQWxsZSBBdXN3YWhsbcO2Z2xpY2hrZWl0ZW4gc2luZCBpbiBlaW5lciBSYW5nZm9sZ2UgYW5nZW9yZG5ldFwiLFxuICAgIHNlbGVjdFRvUmFua0VtcHR5VW5yYW5rZWRBcmVhVGV4dDogXCJaaWVoZW4gU2llIGRpZSBBdXN3YWhsIGhpZXJoZXIsIHVtIHNpZSB6dSBvcmRuZW5cIlxufTtcbnN1cnZleV9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdXJ2ZXlMb2NhbGl6YXRpb25cIl0ubG9jYWxlc1tcImRlXCJdID0gZ2VybWFuU3VydmV5U3RyaW5ncztcbnN1cnZleV9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdXJ2ZXlMb2NhbGl6YXRpb25cIl0ubG9jYWxlTmFtZXNbXCJkZVwiXSA9IFwiZGV1dHNjaFwiO1xuLy8gVGhlIGZvbGxvd2luZyBzdHJpbmdzIGhhdmUgYmVlbiB0cmFuc2xhdGVkIGJ5IGEgbWFjaGluZSB0cmFuc2xhdGlvbiBzZXJ2aWNlXG4vLyBSZW1vdmUgdGhvc2Ugc3RyaW5ncyB0aGF0IHlvdSBoYXZlIGNvcnJlY3RlZCBtYW51YWxseVxuLy8gcGFuZWxEeW5hbWljVGFiVGV4dEZvcm1hdDogXCJQYW5lbCB7cGFuZWxJbmRleH1cIiA9PiBcIkJlcmVpY2gge3BhbmVsSW5kZXh9XCJcbi8vIG5vRW50cmllc1JlYWRvbmx5VGV4dDogXCJUaGVyZSBhcmUgbm8gZW50cmllcy5cIiA9PiBcIkVzIGdpYnQga2VpbmUgRWludHLDpGdlLlwiXG4vLyB0YWdib3hEb25lQnV0dG9uQ2FwdGlvbjogXCJPS1wiID0+IFwiT0tBWVwiXG4vLyBzZWxlY3RUb1JhbmtFbXB0eVJhbmtlZEFyZWFUZXh0OiBcIkFsbCBjaG9pY2VzIGFyZSByYW5rZWRcIiA9PiBcIkFsbGUgQXVzd2FobG3DtmdsaWNoa2VpdGVuIHNpbmQgaW4gZWluZXIgUmFuZ2ZvbGdlIGFuZ2VvcmRuZXRcIlxuLy8gc2VsZWN0VG9SYW5rRW1wdHlVbnJhbmtlZEFyZWFUZXh0OiBcIkRyYWcgYW5kIGRyb3AgY2hvaWNlcyBoZXJlIHRvIHJhbmsgdGhlbVwiID0+IFwiWmllaGVuIFNpZSBkaWUgQXVzd2FobCBoaWVyaGVyLCB1bSBzaWUgenUgb3JkbmVuXCIvLyB0YWtlUGhvdG9DYXB0aW9uOiBcIlRha2UgUGhvdG9cIiA9PiBcIkZvdG8gbWFjaGVuXCJcbi8vIGNhbWVyYVBsYWNlSG9sZGVyOiBcIkNsaWNrIHRoZSBidXR0b24gYmVsb3cgdG8gdGFrZSBhIHBob3RvIHVzaW5nIHRoZSBjYW1lcmEuXCIgPT4gXCJLbGlja2VuIFNpZSBhdWYgZGllIFNjaGFsdGZsw6RjaGUgdW50ZW4sIHVtIGVpbiBGb3RvIG1pdCBkZXIgS2FtZXJhIGF1Znp1bmVobWVuLlwiXG4vLyBmaWxlQ2FtZXJhRHJhZ0FyZWFQbGFjZUhvbGRlcjogXCJEcmFnIGFuZCBkcm9wIG9yIHNlbGVjdCBhIGZpbGUgdG8gdXBsb2FkIG9yIHRha2UgYSBwaG90byB1c2luZyB0aGUgY2FtZXJhLlwiID0+IFwiWmllaGVuIFNpZSBlaW5lIERhdGVpIHBlciBEcmFnICYgRHJvcCBvZGVyIHfDpGhsZW4gU2llIHNpZSBhdXMsIHVtIHNpZSBob2NoenVsYWRlbiBvZGVyIGVpbiBGb3RvIG1pdCBkZXIgS2FtZXJhIGF1Znp1bmVobWVuLlwiXG4vLyByZXBsYWNlRmlsZUNhcHRpb246IFwiUmVwbGFjZSBmaWxlXCIgPT4gXCJEYXRlaSBlcnNldHplblwiXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvbG9jYWxpemF0aW9uL2dyZWVrLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9sb2NhbGl6YXRpb24vZ3JlZWsudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGdyZWVrU3VydmV5U3RyaW5ncyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJncmVla1N1cnZleVN0cmluZ3NcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBncmVla1N1cnZleVN0cmluZ3M7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHN1cnZleV9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBzdXJ2ZXktY29yZSAqLyBcIi4vc3JjL2VudHJpZXMvY29yZS50c1wiKTtcblxudmFyIGdyZWVrU3VydmV5U3RyaW5ncyA9IHtcbiAgICBwYWdlUHJldlRleHQ6IFwizqDPgc6/zrfOs86/z43OvM61zr3Ov1wiLFxuICAgIHBhZ2VOZXh0VGV4dDogXCLOlc+Az4zOvM61zr3Ov1wiLFxuICAgIGNvbXBsZXRlVGV4dDogXCLOn867zr/Ous67zq7Pgc+Jz4POt1wiLFxuICAgIHByZXZpZXdUZXh0OiBcIs6gz4HOv861z4DOuc+DzrrPjM+AzrfPg863XCIsXG4gICAgZWRpdFRleHQ6IFwizpXPgM61zr7Otc+BzrPOsc+Dzq/OsVwiLFxuICAgIHN0YXJ0U3VydmV5VGV4dDogXCLOkc+Bz4fOrlwiLFxuICAgIG90aGVySXRlbVRleHQ6IFwizobOu867zr8gKM+AzrHPgc6xzrrOsc67z44gzrTOuc61z4XOus+BzrnOvc6vz4PPhM61KVwiLFxuICAgIG5vbmVJdGVtVGV4dDogXCLOms6xzr3Orc69zrHPglwiLFxuICAgIHNlbGVjdEFsbEl0ZW1UZXh0OiBcIs6Vz4DOuc67zr/Os86uIM+MzrvPic69XCIsXG4gICAgcHJvZ3Jlc3NUZXh0OiBcIs6jzrXOu86vzrTOsSB7MH0gzrHPgM+MIHsxfVwiLFxuICAgIGluZGV4VGV4dDogXCJ7MH0gzrHPgM+MIHsxfVwiLFxuICAgIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCLOlc6zzrPPgc6xz4bOriB7MH0gzrHPgM+MIHsxfVwiLFxuICAgIHBhbmVsRHluYW1pY1RhYlRleHRGb3JtYXQ6IFwizqDOr869zrHOus6xz4Ige3BhbmVsSW5kZXh9XCIsXG4gICAgcXVlc3Rpb25zUHJvZ3Jlc3NUZXh0OiBcIs6Rz4DOsc69z4TOrs64zrfOus6xzr0gezB9IC8gezF9IM61z4HPic+Ezq7Pg861zrnPglwiLFxuICAgIGVtcHR5U3VydmV5OiBcIs6UzrXOvSDPhc+AzqzPgc+HzrXOuSDOus6xzrzOr86xIM6/z4HOsc+Ezq4gz4POtc67zq/OtM6xIM6uIM6/z4HOsc+Ezq4gzrXPgc+Oz4TOt8+Dzrcgz4POtSDOsc+Fz4TPjCDPhM6/IM61z4HPic+EzrfOvM6xz4TOv867z4zOs865zr8uXCIsXG4gICAgY29tcGxldGluZ1N1cnZleTogXCLOlc+Fz4fOsc+BzrnPg8+Ezr/Pjc68zrUgzrPOuc6xIM+EzrfOvSDPg8+FzrzPgM67zq7Pgc+Jz4POtyDOsc+Fz4TOv8+NIM+Ezr/PhSDOtc+Bz4nPhM63zrzOsc+Ezr/Ou86/zrPOr86/z4UhXCIsXG4gICAgY29tcGxldGluZ1N1cnZleUJlZm9yZTogXCLOpM6xIM6xz4HPh861zq/OsSDOvM6xz4IgzrTOtc6vz4fOvc6/z4XOvSDPjM+Ezrkgzq3Ph861z4TOtSDOrs60zrcgzr/Ou86/zrrOu863z4HPjs+DzrXOuSDOsc+Fz4TOrs69IM+EzrfOvSDOrc+BzrXPhc69zrEuXCIsXG4gICAgbG9hZGluZ1N1cnZleTogXCLOpM6/IM61z4HPic+EzrfOvM6xz4TOv867z4zOs865zr8gz4bOv8+Bz4TPjs69zrXPhM6xzrkgzrHPgM6/IM+Ezr8gzrTOuc6xzrrOv868zrnPg8+Ezq4uLi5cIixcbiAgICBwbGFjZWhvbGRlcjogXCLOlc+AzrnOu86tzr7PhM61Li4uXCIsXG4gICAgcmF0aW5nT3B0aW9uc0NhcHRpb246IFwizqDOsc+Ezq7Pg8+EzrUgzrPOuc6xIM69zrEgzrLOsc64zrzOv867zr/Os86uz4POtc+EzrUgzrXOtM+OLi4uXCIsXG4gICAgdmFsdWU6IFwiz4TOuc68zq5cIixcbiAgICByZXF1aXJlZEVycm9yOiBcIs6gzrHPgc6xzrrOsc67z44gzrHPgM6xzr3PhM6uz4PPhM61IM+Dz4TOt869IM61z4HPjs+EzrfPg863LlwiLFxuICAgIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcIs6Rz4DOsc69z4TOrs+Dz4TOtSDPg861IM+Ezr/Phc67zqzPh865z4PPhM6/zr0gzrzOr86xIM61z4HPjs+EzrfPg863LlwiLFxuICAgIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwizqDOsc+BzrHOus6xzrvPjiDOsc+AzrHOvc+Ezq7Pg8+EzrUgz4TOuc+CIM61z4HPic+Ezq7Pg861zrnPgiDPg861IM+MzrvOtc+CIM+EzrnPgiDOs8+BzrHOvM68zq3Pgi5cIixcbiAgICBudW1lcmljRXJyb3I6IFwizpcgz4TOuc68zq4gz4DPgc6tz4DOtc65IM69zrEgzrXOr869zrHOuSDOsc+BzrnOuM68zrfPhM65zrrOri5cIixcbiAgICBtaW5FcnJvcjogXCLOlyDPhM65zrzOriDOtM61zr0gz4DPgc6tz4DOtc65IM69zrEgzrXOr869zrHOuSDOvM65zrrPgc+Mz4TOtc+BzrcgzrHPgM+MIHswfVwiLFxuICAgIG1heEVycm9yOiBcIs6XIM+EzrnOvM6uIM60zrXOvSDPgM+Bzq3PgM61zrkgzr3OsSDOtc6vzr3Osc65IM68zrXOs86xzrvPjc+EzrXPgc63IM6xz4DPjCB7MH1cIixcbiAgICB0ZXh0TWluTGVuZ3RoOiBcIs6gzrHPgc6xzrrOsc67z44gz4PPhc68z4DOu863z4HPjs+Dz4TOtSDPhM6/z4XOu86sz4fOuc+Dz4TOv869IHswfSDPh86xz4HOsc66z4TOrs+BzrXPgi5cIixcbiAgICB0ZXh0TWF4TGVuZ3RoOiBcIs6VzrnPg86xzrPOrM6zzrXPhM61IM67zrnOs8+Mz4TOtc+Bzr/Phc+CIM6xz4DPjCB7MH0gz4fOsc+BzrHOus+Ezq7Pgc61z4IuXCIsXG4gICAgdGV4dE1pbk1heExlbmd0aDogXCLOlc65z4POsc6zzqzOs861z4TOtSDPgM61z4HOuc+Dz4PPjM+EzrXPgc6/z4XPgiDOsc+Az4wgezB9IM66zrHOuSDOu865zrPPjM+EzrXPgc6/z4XPgiDOsc+Az4wgezF9IM+HzrHPgc6xzrrPhM6uz4HOtc+CLlwiLFxuICAgIG1pblJvd0NvdW50RXJyb3I6IFwizqDOsc+BzrHOus6xzrvPjiDPg8+FzrzPgM67zrfPgc+Oz4PPhM61IM+Ezr/Phc67zqzPh865z4PPhM6/zr0gezB9IM6zz4HOsc68zrzOrc+CLlwiLFxuICAgIG1pblNlbGVjdEVycm9yOiBcIs6gzrHPgc6xzrrOsc67z44gzrXPgM65zrvOrc6+z4TOtSDPhM6/z4XOu86sz4fOuc+Dz4TOv869IHswfSDPgM6xz4HOsc67zrvOsc6zzq3Pgi5cIixcbiAgICBtYXhTZWxlY3RFcnJvcjogXCLOoM6xz4HOsc66zrHOu8+OIM61z4DOuc67zq3Ovs+EzrUgz4zPh865IM+AzrHPgc6xz4DOrM69z4kgzrHPgM6/IHswfSDPgM6xz4HOsc67zrvOsc6zzq3Pgi5cIixcbiAgICBudW1lcmljTWluTWF4OiBcIs6kzr8gJ3swfScgzrjOsSDPgM+Bzq3PgM61zrkgzr3OsSDOtc6vzr3Osc65IM6vz4POvyDOriDOvM61zrPOsc67z43PhM61z4HOvyDOsc+Azr8gz4TOvyB7MX0gzrrOsc65IM6vz4POvyDOriDOvM65zrrPgc+Mz4TOtc+Bzr8gzrHPgM6/IM+Ezr8gezJ9XCIsXG4gICAgbnVtZXJpY01pbjogXCLOpM6/ICd7MH0nIM+Az4HOrc+AzrXOuSDOvc6xIM61zq/Ovc6xzrkgzrzOtc6zzrHOu8+Nz4TOtc+Bzr8gzq4gzrnPg86/IM68zrUgz4TOvyB7MX1cIixcbiAgICBudW1lcmljTWF4OiBcIs6kzr8gJ3swfScgz4DPgc6tz4DOtc65IM69zrEgzrXOr869zrHOuSDOvM65zrrPgc+Mz4TOtc+Bzr8gzq4gzq/Pg86/IM6xz4DOvyDPhM6/IHsxfVwiLFxuICAgIGludmFsaWRFbWFpbDogXCLOoM6xz4HOsc66zrHOu8+OIM60z47Pg8+EzrUgzrzOuc6xIM6xz4DOv860zrXOus+Ezq4gzrTOuc61z43OuM+Fzr3Pg863IGUtbWFpbC5cIixcbiAgICBpbnZhbGlkRXhwcmVzc2lvbjogXCLOlyDOrc66z4bPgc6xz4POtzogezB9IM64zrEgz4DPgc6tz4DOtc65IM69zrEgzrXPgM65z4PPhM+Bzq3PiM61zrkgJ3RydWUnLlwiLFxuICAgIHVybFJlcXVlc3RFcnJvcjogXCLOlyDOsc6vz4TOt8+DzrcgzrXPgM6tz4PPhM+BzrXPiM61IM+Dz4bOrM67zrzOsSAnezB9Jy4gezF9XCIsXG4gICAgdXJsR2V0Q2hvaWNlc0Vycm9yOiBcIs6XIM6xzq/PhM63z4POtyDOtc+Azq3Pg8+Ez4HOtc+IzrUgzrrOtc69zqwgzrTOtc60zr/OvM6tzr3OsSDOriDOtyDOuc60zrnPjM+EzrfPhM6xICfOvM6/zr3Ov8+AzqzPhM65L3BhdGgnIM61zq/Ovc6xzrkgzrXPg8+GzrHOu868zq3Ovc63XCIsXG4gICAgZXhjZWVkTWF4U2l6ZTogXCLOpM6/IM68zq3Os861zrjOv8+CIM+Ezr/PhSDOsc+Bz4fOtc6vzr/PhSDOtM61zr0gzrzPgM6/z4HOtc6vIM69zrEgz4XPgM61z4HOss6xzq/Ovc61zrkgz4TOsSB7MH0uXCIsXG4gICAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIs6gzrHPgc6xzrrOsc67z44gz4PPhc68z4DOu863z4HPjs+Dz4TOtSDPhM63zr0gz4TOuc68zq4gzrPOuc6xIM+Ezr8gz4DOtc60zq/OvyAnzqzOu867zr8nLlwiLFxuICAgIHVwbG9hZGluZ0ZpbGU6IFwizqTOvyDOsc+Bz4fOtc6vzr8gz4POsc+CIM6xzr3Otc6yzrHOr869zrXOuS4gzqDOsc+BzrHOus6xzrvPjiDPgM61z4HOuc68zq3Ovc61z4TOtSDOvM61z4HOuc66zqwgzrTOtc+Fz4TOtc+Bz4zOu861z4DPhM6xIM66zrHOuSDOtM6/zrrOuc68zqzPg8+EzrUgzr7Osc69zqwuXCIsXG4gICAgbG9hZGluZ0ZpbGU6IFwizqbPjM+Bz4TPic+DzrcuLi5cIixcbiAgICBjaG9vc2VGaWxlOiBcIs6Vz4DOuc67zr/Os86uIM6xz4HPh861zq/Pic69IC4uLlwiLFxuICAgIG5vRmlsZUNob3NlbjogXCLOlM61zr0gzq3Ph861zrkgzrXPgM65zrvOtc6zzrXOryDOsc+Bz4fOtc6vzr9cIixcbiAgICBmaWxlRHJhZ0FyZWFQbGFjZWhvbGRlcjogXCLOkc+Azr/OuM6tz4PPhM61IM+Ezr8gzrHPgc+HzrXOr86/IM+DzrHPgiDOtc60z44gzq4gzrrOrM69z4TOtSDOus67zrnOuiDPg8+Ezr8gzrrOv8+FzrzPgM6vIM+AzrHPgc6xzrrOrM+Ez4kgzrPOuc6xIM69zrEgz4bOv8+Bz4TPjs+DzrXPhM61IM+Ezr8gzrHPgc+HzrXOr86/LlwiLFxuICAgIGNvbmZpcm1EZWxldGU6IFwizpjOrc67zrXPhM61IM69zrEgzrTOuc6xzrPPgc6sz4jOtc+EzrUgz4TOt869IM61zrPOs8+BzrHPhs6uO1wiLFxuICAgIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwizpHPhc+Ezq4gzrcgz4TOuc68zq4gz4DPgc6tz4DOtc65IM69zrEgzrXOr869zrHOuSDOvM6/zr3Osc60zrnOus6uLlwiLFxuICAgIGFkZENvbHVtbjogXCLOoM+Bzr/Pg864zq7Ous63IM+Dz4TOrs67zrfPglwiLFxuICAgIGFkZFJvdzogXCLOoM+Bzr/Pg864zq7Ous63IM6zz4HOsc68zrzOrs+CXCIsXG4gICAgcmVtb3ZlUm93OiBcIs6Rz4bOsc6vz4HOtc+DzrdcIixcbiAgICBlbXB0eVJvd3NUZXh0OiBcIs6UzrXOvSDPhc+AzqzPgc+Hzr/Phc69IM61zrPOs8+BzrHPhs6tz4IuXCIsXG4gICAgYWRkUGFuZWw6IFwizqDPgc6/z4POuM6tz4PPhM61IM69zq3Ov1wiLFxuICAgIHJlbW92ZVBhbmVsOiBcIs6Rz4bOsc6vz4HOtc+DzrdcIixcbiAgICBjaG9pY2VzX0l0ZW06IFwizrXOr860zr/PglwiLFxuICAgIG1hdHJpeF9jb2x1bW46IFwizqPPhM6uzrvOt1wiLFxuICAgIG1hdHJpeF9yb3c6IFwizpPPgc6xzrzOvM6uXCIsXG4gICAgbXVsdGlwbGV0ZXh0X2l0ZW1uYW1lOiBcIs66zrXOr868zrXOvc6/XCIsXG4gICAgc2F2aW5nRGF0YTogXCLOpM6xIM6xz4DOv8+EzrXOu86tz4POvM6xz4TOsSDOsc+Azr/OuM63zrrOtc+Nzr/Ovc+EzrHOuSDPg8+Ezr/OvSDOtM65zrHOus6/zrzOuc+Dz4TOriAuLi5cIixcbiAgICBzYXZpbmdEYXRhRXJyb3I6IFwizqDOsc+Bzr/Phc+DzrnOrM+Dz4TOt866zrUgz4PPhs6szrvOvM6xIM66zrHOuSDOtM61zr0gzq7PhM6xzr0gzrTPhc69zrHPhM6uIM63IM6xz4DOv864zq7Ous61z4XPg863IM+Ez4nOvSDOsc+Azr/PhM61zrvOtc+DzrzOrM+Ez4nOvS5cIixcbiAgICBzYXZpbmdEYXRhU3VjY2VzczogXCLOpM6xIM6xz4DOv8+EzrXOu86tz4POvM6xz4TOsSDOsc+Azr/OuM63zrrOtc+Nz4TOt866zrHOvSDOvM61IM61z4DOuc+Ez4XPh86vzrEhXCIsXG4gICAgc2F2ZUFnYWluQnV0dG9uOiBcIs6gz4HOv8+Dz4DOrM64zrfPg861IM6+zrHOvc6sXCIsXG4gICAgdGltZXJNaW46IFwizrXOu86sz4dcIixcbiAgICB0aW1lclNlYzogXCLOtM61z4XPhFwiLFxuICAgIHRpbWVyU3BlbnRBbGw6IFwizojPh861z4TOtSDOtM6xz4DOsc69zq7Pg861zrkgezB9IM+DzrUgzrHPhc+Ezq7OvSDPhM63IM+DzrXOu86vzrTOsSDOus6xzrkgezF9IM+Dz4XOvc6/zrvOuc66zqwuXCIsXG4gICAgdGltZXJTcGVudFBhZ2U6IFwizojPh861z4TOtSDOvs6/zrTOrc+IzrXOuSB7MH0gz4POtSDOsc+Fz4TOrs69IM+Ezrcgz4POtc67zq/OtM6xLlwiLFxuICAgIHRpbWVyU3BlbnRTdXJ2ZXk6IFwizojPh861z4TOtSDOvs6/zrTOrc+IzrXOuSDPg8+Fzr3Ov867zrnOus6sIHswfS5cIixcbiAgICB0aW1lckxpbWl0QWxsOiBcIs6Iz4fOtc+EzrUgzrTOsc+AzrHOvc6uz4POtc65IHswfSDOsc+Az4wgezF9IM+DzrUgzrHPhc+Ezq7OvSDPhM63IM+DzrXOu86vzrTOsSDOus6xzrkgezJ9IM6xz4DPjCB7M30gz4PPhc69zr/Ou865zrrOrC5cIixcbiAgICB0aW1lckxpbWl0UGFnZTogXCLOiM+HzrXPhM61IM6+zr/OtM6tz4jOtc65IHswfSDOsc+Az4wgezF9IM+DzrUgzrHPhc+Ezq7OvSDPhM63IM+DzrXOu86vzrTOsS5cIixcbiAgICB0aW1lckxpbWl0U3VydmV5OiBcIs6Iz4fOtc+EzrUgzr7Ov860zq3PiM61zrkgezB9IM6xz4DPjCB7MX0gz4PPhc69zr/Ou865zrrOrC5cIixcbiAgICBjbGVhckNhcHRpb246IFwizpXOus66zrHOuM6sz4HOuc+DzrdcIixcbiAgICBzaWduYXR1cmVQbGFjZUhvbGRlcjogXCLOpc+Azr/Os8+BzqzPiM+EzrUgzrXOtM+OXCIsXG4gICAgY2hvb3NlRmlsZUNhcHRpb246IFwizpXPgM65zrvOrc6+z4TOtSDOsc+Bz4fOtc6vzr9cIixcbiAgICB0YWtlUGhvdG9DYXB0aW9uOiBcIs6bzq7PiM63IM+Gz4nPhM6/zrPPgc6xz4bOr86xz4JcIixcbiAgICBjYW1lcmFQbGFjZUhvbGRlcjogXCLOms6szr3PhM61IM66zrvOuc66IM+Dz4TOvyDPgM6xz4HOsc66zqzPhM+JIM66zr/Phc68z4DOryDOs865zrEgzr3OsSDPhM+BzrHOss6uzr7Otc+EzrUgzrzOuc6xIM+Gz4nPhM6/zrPPgc6xz4bOr86xIM+Hz4HOt8+DzrnOvM6/z4DOv865z47Ovc+EzrHPgiDPhM63zr0gzrrOrM68zrXPgc6xLlwiLFxuICAgIGZpbGVDYW1lcmFEcmFnQXJlYVBsYWNlSG9sZGVyOiBcIs6jz43Pgc61z4TOtSDOus6xzrkgzrHPgM6/zrjOrc+Dz4TOtSDOriDOtc+AzrnOu86tzr7PhM61IM6tzr3OsSDOsc+Bz4fOtc6vzr8gzrPOuc6xIM6xz4DOv8+Dz4TOv867zq4gzq4gzrvOrs+Izrcgz4bPic+Ezr/Os8+BzrHPhs6vzrHPgiDPh8+BzrfPg865zrzOv8+Azr/Ouc+Ozr3PhM6xz4Igz4TOt869IM66zqzOvM61z4HOsS5cIixcbiAgICByZXBsYWNlRmlsZUNhcHRpb246IFwizpHOvc+EzrnOus6xz4TOrM+Dz4TOsc+DzrcgzrHPgc+HzrXOr86/z4VcIixcbiAgICByZW1vdmVGaWxlQ2FwdGlvbjogXCLOlM65zrHOs8+BzqzPiM+EzrUgzrHPhc+Ez4wgz4TOvyDOsc+Bz4fOtc6vzr9cIixcbiAgICBib29sZWFuQ2hlY2tlZExhYmVsOiBcIs6dzrHOuVwiLFxuICAgIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCLOjM+HzrlcIixcbiAgICBjb25maXJtUmVtb3ZlRmlsZTogXCLOlc6vz4PPhM61IM6yzq3Oss6xzrnOv865IM+Mz4TOuSDOuM6tzrvOtc+EzrUgzr3OsSDOtM65zrHOs8+BzqzPiM61z4TOtSDOsc+Fz4TPjCDPhM6/IM6xz4HPh861zq/OvzogezB9O1wiLFxuICAgIGNvbmZpcm1SZW1vdmVBbGxGaWxlczogXCLOlc6vz4PPhM61IM6yzq3Oss6xzrnOv865IM+Mz4TOuSDOuM6tzrvOtc+EzrUgzr3OsSDOtM65zrHOs8+BzqzPiM61z4TOtSDPjM67zrEgz4TOsSDOsc+Bz4fOtc6vzrE7XCIsXG4gICAgcXVlc3Rpb25UaXRsZVBhdHRlcm5UZXh0OiBcIs6kzq/PhM67zr/PgiDOtc+Bz47PhM63z4POt8+CXCIsXG4gICAgbW9kYWxDYW5jZWxCdXR0b25UZXh0OiBcIs6GzrrPhc+Bzr9cIixcbiAgICBtb2RhbEFwcGx5QnV0dG9uVGV4dDogXCLOlc+GzrHPgc68zr/Os86uXCIsXG4gICAgZmlsdGVyU3RyaW5nUGxhY2Vob2xkZXI6IFwizqDOu863zrrPhM+Bzr/Ou86/zrPOrs+Dz4TOtSDOs865zrEgzrHOvc6xzrbOrs+EzrfPg863Li4uXCIsXG4gICAgZW1wdHlNZXNzYWdlOiBcIs6UzrXOvSDPhc+AzqzPgc+Hzr/Phc69IM60zrXOtM6/zrzOrc69zrEgz4DPgc6/z4IgzrXOvM+GzqzOvc65z4POt1wiLFxuICAgIG5vRW50cmllc1RleHQ6IFwizpTOtc69IM+Fz4DOrM+Bz4fOv8+Fzr0gzrHOus+MzrzOtyDOtc6zzrPPgc6xz4bOrc+CLlxcbs6azqzOvc+EzrUgzrrOu865zrogz4PPhM6/IM66zr/Phc68z4DOryDPgM6xz4HOsc66zqzPhM+JIM6zzrnOsSDOvc6xIM+Az4HOv8+DzrjOrc+DzrXPhM61IM68zrnOsSDOvc6tzrEgzrXOs86zz4HOsc+Gzq4uXCIsXG4gICAgbm9FbnRyaWVzUmVhZG9ubHlUZXh0OiBcIs6UzrXOvSDPhc+AzqzPgc+Hzr/Phc69IM66zrHPhM6xz4fPic+Bzq7Pg861zrnPgi5cIixcbiAgICBtb3JlOiBcIs6gzrXPgc65z4PPg8+Mz4TOtc+BzrFcIixcbiAgICB0YWdib3hEb25lQnV0dG9uQ2FwdGlvbjogXCLOn86aXCIsXG4gICAgc2VsZWN0VG9SYW5rRW1wdHlSYW5rZWRBcmVhVGV4dDogXCLOjM67zrXPgiDOv865IM61z4DOuc67zr/Os86tz4IgzrrOsc+EzrHPhM6sz4PPg86/zr3PhM6xzrlcIixcbiAgICBzZWxlY3RUb1JhbmtFbXB0eVVucmFua2VkQXJlYVRleHQ6IFwizqPPjc+BzrXPhM61IM66zrHOuSDOsc+Azr/OuM6tz4PPhM61IM61z4DOuc67zr/Os86tz4IgzrXOtM+OIM6zzrnOsSDOvc6xIM+EzrnPgiDOus6xz4TOsc+EzqzOvs61z4TOtVwiXG59O1xuc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN1cnZleUxvY2FsaXphdGlvblwiXS5sb2NhbGVzW1wiZ3JcIl0gPSBncmVla1N1cnZleVN0cmluZ3M7XG5zdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3VydmV5TG9jYWxpemF0aW9uXCJdLmxvY2FsZU5hbWVzW1wiZ3JcIl0gPSBcIs61zrvOu863zr3Ouc66zqxcIjtcbi8vIFRoZSBmb2xsb3dpbmcgc3RyaW5ncyBoYXZlIGJlZW4gdHJhbnNsYXRlZCBieSBhIG1hY2hpbmUgdHJhbnNsYXRpb24gc2VydmljZVxuLy8gUmVtb3ZlIHRob3NlIHN0cmluZ3MgdGhhdCB5b3UgaGF2ZSBjb3JyZWN0ZWQgbWFudWFsbHlcbi8vIHBhbmVsRHluYW1pY1RhYlRleHRGb3JtYXQ6IFwiUGFuZWwge3BhbmVsSW5kZXh9XCIgPT4gXCLOoM6vzr3Osc66zrHPgiB7cGFuZWxJbmRleH1cIlxuLy8gbm9FbnRyaWVzUmVhZG9ubHlUZXh0OiBcIlRoZXJlIGFyZSBubyBlbnRyaWVzLlwiID0+IFwizpTOtc69IM+Fz4DOrM+Bz4fOv8+Fzr0gzrrOsc+EzrHPh8+Jz4HOrs+DzrXOuc+CLlwiXG4vLyBzZWxlY3RUb1JhbmtFbXB0eVJhbmtlZEFyZWFUZXh0OiBcIkFsbCBjaG9pY2VzIGFyZSByYW5rZWRcIiA9PiBcIs6MzrvOtc+CIM6/zrkgzrXPgM65zrvOv86zzq3PgiDOus6xz4TOsc+EzqzPg8+Dzr/Ovc+EzrHOuVwiXG4vLyBzZWxlY3RUb1JhbmtFbXB0eVVucmFua2VkQXJlYVRleHQ6IFwiRHJhZyBhbmQgZHJvcCBjaG9pY2VzIGhlcmUgdG8gcmFuayB0aGVtXCIgPT4gXCLOo8+Nz4HOtc+EzrUgzrrOsc65IM6xz4DOv864zq3Pg8+EzrUgzrXPgM65zrvOv86zzq3PgiDOtc60z44gzrPOuc6xIM69zrEgz4TOuc+CIM66zrHPhM6xz4TOrM6+zrXPhM61XCIvLyB0YWtlUGhvdG9DYXB0aW9uOiBcIlRha2UgUGhvdG9cIiA9PiBcIs6bzq7PiM63IM+Gz4nPhM6/zrPPgc6xz4bOr86xz4JcIlxuLy8gY2FtZXJhUGxhY2VIb2xkZXI6IFwiQ2xpY2sgdGhlIGJ1dHRvbiBiZWxvdyB0byB0YWtlIGEgcGhvdG8gdXNpbmcgdGhlIGNhbWVyYS5cIiA9PiBcIs6azqzOvc+EzrUgzrrOu865zrogz4PPhM6/IM+AzrHPgc6xzrrOrM+Ez4kgzrrOv8+FzrzPgM6vIM6zzrnOsSDOvc6xIM+Ez4HOsc6yzq7Ovs61z4TOtSDOvM65zrEgz4bPic+Ezr/Os8+BzrHPhs6vzrEgz4fPgc63z4POuc68zr/PgM6/zrnPjs69z4TOsc+CIM+EzrfOvSDOus6szrzOtc+BzrEuXCJcbi8vIGZpbGVDYW1lcmFEcmFnQXJlYVBsYWNlSG9sZGVyOiBcIkRyYWcgYW5kIGRyb3Agb3Igc2VsZWN0IGEgZmlsZSB0byB1cGxvYWQgb3IgdGFrZSBhIHBob3RvIHVzaW5nIHRoZSBjYW1lcmEuXCIgPT4gXCLOo8+Nz4HOtc+EzrUgzrrOsc65IM6xz4DOv864zq3Pg8+EzrUgzq4gzrXPgM65zrvOrc6+z4TOtSDOrc69zrEgzrHPgc+HzrXOr86/IM6zzrnOsSDOsc+Azr/Pg8+Ezr/Ou86uIM6uIM67zq7PiM63IM+Gz4nPhM6/zrPPgc6xz4bOr86xz4Igz4fPgc63z4POuc68zr/PgM6/zrnPjs69z4TOsc+CIM+EzrfOvSDOus6szrzOtc+BzrEuXCJcbi8vIHJlcGxhY2VGaWxlQ2FwdGlvbjogXCJSZXBsYWNlIGZpbGVcIiA9PiBcIs6Rzr3PhM65zrrOsc+EzqzPg8+EzrHPg863IM6xz4HPh861zq/Ov8+FXCJcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9sb2NhbGl6YXRpb24vaGVicmV3LnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvbG9jYWxpemF0aW9uL2hlYnJldy50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGhlYnJld1N1cnZleVN0cmluZ3MgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiaGVicmV3U3VydmV5U3RyaW5nc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGhlYnJld1N1cnZleVN0cmluZ3M7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHN1cnZleV9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBzdXJ2ZXktY29yZSAqLyBcIi4vc3JjL2VudHJpZXMvY29yZS50c1wiKTtcblxudmFyIGhlYnJld1N1cnZleVN0cmluZ3MgPSB7XG4gICAgcGFnZVByZXZUZXh0OiBcIteQ15fXldeo15RcIixcbiAgICBwYWdlTmV4dFRleHQ6IFwi16fXk9eZ157XlFwiLFxuICAgIGNvbXBsZXRlVGV4dDogXCLXodeZ15XXnVwiLFxuICAgIHByZXZpZXdUZXh0OiBcIteq16bXldeS15Qg157Xp9eT15nXnteUXCIsXG4gICAgZWRpdFRleHQ6IFwi15zWt9ei1rLXqNeV1rnXmlwiLFxuICAgIHN0YXJ0U3VydmV5VGV4dDogXCLXlNa316rXl9a415zWuNeUXCIsXG4gICAgb3RoZXJJdGVtVGV4dDogXCLXkNeX16ggKNeg15Ag15zXqteQ16gpXCIsXG4gICAgbm9uZUl0ZW1UZXh0OiBcIteQ16Mg15DXl9eTXCIsXG4gICAgc2VsZWN0QWxsSXRlbVRleHQ6IFwi15HXl9eoINeU15vXnFwiLFxuICAgIHByb2dyZXNzVGV4dDogXCLXk9ejIHsxfSDXnteq15XXmiB7MH1cIixcbiAgICBpbmRleFRleHQ6IFwiezB9INee16rXldeaIHsxfVwiLFxuICAgIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCLXlNen15zXmNeUIHswfSDXnteq15XXmiB7MX1cIixcbiAgICBwYW5lbER5bmFtaWNUYWJUZXh0Rm9ybWF0OiBcItec15XXlyB7cGFuZWxJbmRleH1cIixcbiAgICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwi16LXoNeUINei15wg16nXkNec15XXqlwiLFxuICAgIGVtcHR5U3VydmV5OiBcIteQ15nXnyDXqdeQ15zXldeqXCIsXG4gICAgY29tcGxldGluZ1N1cnZleTogXCLXqteV15PXlCDXotecINee15nXnNeV15kg15TXqdeQ15zXldefIVwiLFxuICAgIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6IFwi15TXqNep15XXnteV16og16nXnNeg15Ug157XqNeQ15XXqiDXqdeb15HXqCDXodeZ15nXnteqINeQ16og15TXoden16gg15TXlteULlwiLFxuICAgIGxvYWRpbmdTdXJ2ZXk6IFwi15jXoteZ16DXlCDXnteU16nXqNeqLi4uXCIsXG4gICAgcGxhY2Vob2xkZXI6IFwi15HXl9eoLi4uXCIsXG4gICAgcmF0aW5nT3B0aW9uc0NhcHRpb246IFwi15HXl9eoLi4uXCIsXG4gICAgdmFsdWU6IFwi16LXqNeaXCIsXG4gICAgcmVxdWlyZWRFcnJvcjogXCLXkNeg15Ag15TXqdeRINei15wg15TXqdeQ15zXlFwiLFxuICAgIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcIteQ16DXkCDXoteg15Qg15zXpNeX15XXqiDXotecINep15DXnNeUINeQ15fXqi5cIixcbiAgICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIteQ16DXkCDXoteg15Qg16LXnCDXqdeQ15zXldeqINeR15vXnCDXlNep15XXqNeV16ouXCIsXG4gICAgbnVtZXJpY0Vycm9yOiBcIteU16rXqdeV15HXlCDXpteo15nXm9eUINec15TXmdeV16og157Xodek16guXCIsXG4gICAgbWluRXJyb3I6IFwi15TXoteo15og15zXkCDXpteo15nXmiDXnNeU15nXldeqINen15jXnyDXniB7MH1cIixcbiAgICBtYXhFcnJvcjogXCLXlNei16jXmiDXnNeQINem16jXmdeaINec15TXmdeV16og15LXk9eV15wg154tIHswfVwiLFxuICAgIHRleHRNaW5MZW5ndGg6IFwi15TXltefINec16TXl9eV16ogezB9INeq15XXldeZ150uXCIsXG4gICAgdGV4dE1heExlbmd0aDogXCLXlNeW158g16TXl9eV16og154tIHswfSDXqteV15XXmdedLlwiLFxuICAgIHRleHRNaW5NYXhMZW5ndGg6IFwi15TXltefINeZ15XXqteoINeeLSB7MH0g15XXpNeX15XXqiDXni0gezF9INeq15XXldeZ150uXCIsXG4gICAgbWluUm93Q291bnRFcnJvcjogXCLXkNeg15Ag157XnNeQINec16TXl9eV16ogezB9INep15XXqNeV16ouXCIsXG4gICAgbWluU2VsZWN0RXJyb3I6IFwi15HXl9eoINec16TXl9eV16ogezB9INeQ16TXqdeo15XXmdeV16ouXCIsXG4gICAgbWF4U2VsZWN0RXJyb3I6IFwi15HXl9eoINei15MgezB9INeQ16TXqdeo15XXmdeV16ouXCIsXG4gICAgbnVtZXJpY01pbk1heDogXCInezB9JyDXl9eZ15nXkSDXnNeU15nXldeqINep15XXldeUINeQ15Ug15LXk9eV15wg154gezF9LCDXldep15XXldeUINecLSB7Mn0g15DXlSDXpNeX15XXqiDXni0ge319XCIsXG4gICAgbnVtZXJpY01pbjogXCInezB9JyDXl9eZ15nXkSDXnNeU15nXldeqINep15XXldeUINeQ15Ug15LXk9eV15wg154gezF9XCIsXG4gICAgbnVtZXJpY01heDogXCInezB9JyDXl9eZ15nXkSDXnNeU15nXldeqINep15XXldeUINeQ15Ug16fXmNefINeeIHsxfVwiLFxuICAgIGludmFsaWRFbWFpbDogXCLXlNeW158g15vXqteV15HXqiDXk9eV15BcXFwi15wg15fXlden15nXqi5cIixcbiAgICBpbnZhbGlkRXhwcmVzc2lvbjogXCLXlNeR15nXmNeV15k6IHswfSDXpteo15nXmiDXnNeU15fXlteZ16ggJ9eQ157XqicuXCIsXG4gICAgdXJsUmVxdWVzdEVycm9yOiBcIteU15HXp9ep15Qg15TXl9eW15nXqNeUINeQ16og15TXqdeS15nXkNeUICd7MH0nLiB7MX1cIixcbiAgICB1cmxHZXRDaG9pY2VzRXJyb3I6IFwi15TXkden16nXlCDXlNeX15bXmdeo15Qg16DXqteV16DXmdedINeo15nXp9eZ150g15DXlSDXqdeU157XkNek15nXmdefICfXoNeq15nXkScg16nXkteV15lcIixcbiAgICBleGNlZWRNYXhTaXplOiBcIteS15XXk9ecINeU16fXldeR16Ug15zXkCDXmdei15zXlCDXotecIHswfS5cIixcbiAgICBvdGhlclJlcXVpcmVkRXJyb3I6IFwi16DXkCDXnNeU15bXmdefINeg16rXldeg15nXnSDXkdep15PXlCBcXFwi15DXl9eoXFxcIlwiLFxuICAgIHVwbG9hZGluZ0ZpbGU6IFwi15TXp9eV15HXpSDXqdec15og16DXmNei158uINeU157XqtefINee16HXpNeoINep16DXmdeV16og15XXoNeh15Qg16nXldeRLlwiLFxuICAgIGxvYWRpbmdGaWxlOiBcIteY15XXotefLi4uXCIsXG4gICAgY2hvb3NlRmlsZTogXCLXnNeR15fXldeoINen15HXpteZ150uLi5cIixcbiAgICBub0ZpbGVDaG9zZW46IFwi15zXkCDXoNeR15fXqCDXp9eV15HXpVwiLFxuICAgIGZpbGVEcmFnQXJlYVBsYWNlaG9sZGVyOiBcIteS16jXldeoINeV16nXl9eo16gg16fXldeR16Ug15zXm9eQ158g15DXlSDXnNeX16Ug16LXnCDXlNec15fXptefINec157XmNeUINeV15HXl9eoINen15XXkdelINec15TXotec15DXlC5cIixcbiAgICBjb25maXJtRGVsZXRlOiBcIteU15DXnSDXkNeq15Qg16jXldem15Qg15zXnteX15XXpyDXkNeqINeU16jXqdeV157XlD9cIixcbiAgICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcItei16jXmiDXlteUINem16jXmdeaINec15TXmdeV16og15nXmdeX15XXk9eZLlwiLFxuICAgIGFkZENvbHVtbjogXCLXlNeV16HXoyDXotee15XXk9eUXCIsXG4gICAgYWRkUm93OiBcItec15TXldeh15nXoyDXqdeV16jXlFwiLFxuICAgIHJlbW92ZVJvdzogXCLXnNaw15TWt9eh1rTXmdeoXCIsXG4gICAgZW1wdHlSb3dzVGV4dDogXCLXkNeZ158g16nXldeo15XXqi5cIixcbiAgICBhZGRQYW5lbDogXCLXlNeV16HXoyDXl9eT16lcIixcbiAgICByZW1vdmVQYW5lbDogXCLXnNaw15TWt9eh1rTXmdeoXCIsXG4gICAgY2hvaWNlc19JdGVtOiBcItek16jXmdeYXCIsXG4gICAgbWF0cml4X2NvbHVtbjogXCLXmNeV16hcIixcbiAgICBtYXRyaXhfcm93OiBcItep14HXlda816jWuNeUXCIsXG4gICAgbXVsdGlwbGV0ZXh0X2l0ZW1uYW1lOiBcIteY16fXodeYXCIsXG4gICAgc2F2aW5nRGF0YTogXCLXlNeq15XXpteQ15XXqiDXoNep157XqNeV16og15HXqdeo16ogLi4uXCIsXG4gICAgc2F2aW5nRGF0YUVycm9yOiBcIteQ15nXqNei15Qg16nXkteZ15DXlCDXldec15Ag15TXptec15fXoNeVINec16nXnteV16gg15DXqiDXlNeq15XXpteQ15XXqi5cIixcbiAgICBzYXZpbmdEYXRhU3VjY2VzczogXCLXlNeq15XXpteQ15XXqiDXoNep157XqNeVINeR15TXptec15fXlCFcIixcbiAgICBzYXZlQWdhaW5CdXR0b246IFwi16DXodeUINep15XXkVwiLFxuICAgIHRpbWVyTWluOiBcIteT16fXlFwiLFxuICAgIHRpbWVyU2VjOiBcItep16DXmdeV16pcIixcbiAgICB0aW1lclNwZW50QWxsOiBcIteU15XXpteQ16ogezB9INeR15PXoyDXlteUINeV15HXodeaINeU15vXnCB7MX0uXCIsXG4gICAgdGltZXJTcGVudFBhZ2U6IFwi15TXldem15DXqiB7MH0g15HXk9ejINeW15QuXCIsXG4gICAgdGltZXJTcGVudFN1cnZleTogXCLXlNeV16bXkNeqINeh15vXldedINeb15XXnNecINep15wgezB9LlwiLFxuICAgIHRpbWVyTGltaXRBbGw6IFwi15TXldem15DXqiB7MH0g157XqteV15ogezF9INeR15PXoyDXlteUINeVLSB7Mn0g157XqteV15ogezN9INeR16HXmiDXlNeb15wuXCIsXG4gICAgdGltZXJMaW1pdFBhZ2U6IFwi15TXldem15DXqiB7MH0g157XqteV15ogezF9INeR15PXoyDXlteULlwiLFxuICAgIHRpbWVyTGltaXRTdXJ2ZXk6IFwi15TXldem15DXqiDXodeb15XXnSDXm9eV15zXnCDXqdecIHswfSDXnteq15XXmiB7MX0uXCIsXG4gICAgY2xlYXJDYXB0aW9uOiBcIteR16jXldeoXCIsXG4gICAgc2lnbmF0dXJlUGxhY2VIb2xkZXI6IFwi15fXqteV150g15vXkNefXCIsXG4gICAgY2hvb3NlRmlsZUNhcHRpb246IFwi15HXl9eoINen15XXkdelXCIsXG4gICAgdGFrZVBob3RvQ2FwdGlvbjogXCLXptec150g16rXnteV16DXlFwiLFxuICAgIGNhbWVyYVBsYWNlSG9sZGVyOiBcItec15fXpSDXotecINeU15zXl9em158g15zXnteY15Qg15vXk9eZINec16bXnNedINeq157Xldeg15Qg15HXkNee16bXoteV16og15TXntem15zXnteULlwiLFxuICAgIGZpbGVDYW1lcmFEcmFnQXJlYVBsYWNlSG9sZGVyOiBcIteS16jXldeoINeV16nXl9eo16gg15DXlSDXkdeX16gg16fXldeR16Ug15vXk9eZINec15TXotec15XXqiDXkNeVINec16bXnNedINeq157Xldeg15Qg15HXkNee16bXoteV16og15TXntem15zXnteULlwiLFxuICAgIHJlcGxhY2VGaWxlQ2FwdGlvbjogXCLXlNeX15zXpNeqINen15XXkdelXCIsXG4gICAgcmVtb3ZlRmlsZUNhcHRpb246IFwi15TXodeoINen15XXkdelINeW15RcIixcbiAgICBib29sZWFuQ2hlY2tlZExhYmVsOiBcIteb159cIixcbiAgICBib29sZWFuVW5jaGVja2VkTGFiZWw6IFwi15zXkFwiLFxuICAgIGNvbmZpcm1SZW1vdmVGaWxlOiBcIteU15DXnSDXkNeq15Qg15HXmNeV15cg16nXkdeo16bXldeg15og15zXlNeh15nXqCDXp9eV15HXpSDXlteUOiB7MH0/XCIsXG4gICAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcIteU15DXnSDXkNeq15Qg15HXmNeV15cg16nXkdeo16bXldeg15og15zXlNeh15nXqCDXkNeqINeb15wg15TXp9eR16bXmdedP1wiLFxuICAgIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCLXm9eV16rXqNeqINep15DXnNeUXCIsXG4gICAgbW9kYWxDYW5jZWxCdXR0b25UZXh0OiBcIteR15nXmNecXCIsXG4gICAgbW9kYWxBcHBseUJ1dHRvblRleHQ6IFwi15TXl9ecXCIsXG4gICAgZmlsdGVyU3RyaW5nUGxhY2Vob2xkZXI6IFwi15TXp9ec15Mg15vXk9eZINec15fXpNepLi4uXCIsXG4gICAgZW1wdHlNZXNzYWdlOiBcIteQ15nXnyDXoNeq15XXoNeZ150g15zXlNem15LXlFwiLFxuICAgIG5vRW50cmllc1RleHQ6IFwi15DXmdefINei15PXmdeZ158g16LXqNeb15nXnS5cXG7XnNeX16Ug16LXnCDXlNec15fXptefINec157XmNeUINeb15PXmSDXnNeU15XXodeZ16Mg16LXqNeaINeX15PXqS5cIixcbiAgICBub0VudHJpZXNSZWFkb25seVRleHQ6IFwi15DXmdefINei16jXm9eZ150uXCIsXG4gICAgbW9yZTogXCLXoteV15NcIixcbiAgICB0YWdib3hEb25lQnV0dG9uQ2FwdGlvbjogXCLXkNeV16fXmdeZXCIsXG4gICAgc2VsZWN0VG9SYW5rRW1wdHlSYW5rZWRBcmVhVGV4dDogXCLXm9ecINeU15DXpNep16jXldeZ15XXqiDXnteT15XXqNeS15XXqlwiLFxuICAgIHNlbGVjdFRvUmFua0VtcHR5VW5yYW5rZWRBcmVhVGV4dDogXCLXkteo15XXqCDXldep15fXqNeoINeQ16TXqdeo15XXmdeV16og15zXm9eQ158g15vXk9eZINec15PXqNeSINeQ15XXqtefXCJcbn07XG5zdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3VydmV5TG9jYWxpemF0aW9uXCJdLmxvY2FsZXNbXCJoZVwiXSA9IGhlYnJld1N1cnZleVN0cmluZ3M7XG5zdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3VydmV5TG9jYWxpemF0aW9uXCJdLmxvY2FsZU5hbWVzW1wiaGVcIl0gPSBcItei15HXqNeZ16pcIjtcbi8vIFRoZSBmb2xsb3dpbmcgc3RyaW5ncyBoYXZlIGJlZW4gdHJhbnNsYXRlZCBieSBhIG1hY2hpbmUgdHJhbnNsYXRpb24gc2VydmljZVxuLy8gUmVtb3ZlIHRob3NlIHN0cmluZ3MgdGhhdCB5b3UgaGF2ZSBjb3JyZWN0ZWQgbWFudWFsbHlcbi8vIGluZGV4VGV4dDogXCJ7MH0gb2YgezF9XCIgPT4gXCJ7MH0g157XqteV15ogezF9XCJcbi8vIHBhbmVsRHluYW1pY1RhYlRleHRGb3JtYXQ6IFwiUGFuZWwge3BhbmVsSW5kZXh9XCIgPT4gXCLXnNeV15cge3BhbmVsSW5kZXh9XCJcbi8vIHJhdGluZ09wdGlvbnNDYXB0aW9uOiBcIlNlbGVjdC4uLlwiID0+IFwi15HXl9eoLi4uXCJcbi8vIG1pbkVycm9yOiBcIlRoZSB2YWx1ZSBzaG91bGQgbm90IGJlIGxlc3MgdGhhbiB7MH1cIiA9PiBcIteU16LXqNeaINec15Ag16bXqNeZ15og15zXlNeZ15XXqiDXp9eY158g154gezB9XCJcbi8vIG1heEVycm9yOiBcIlRoZSB2YWx1ZSBzaG91bGQgbm90IGJlIGdyZWF0ZXIgdGhhbiB7MH1cIiA9PiBcIteU16LXqNeaINec15Ag16bXqNeZ15og15zXlNeZ15XXqiDXkteT15XXnCDXni0gezB9XCJcbi8vIGZpbGVEcmFnQXJlYVBsYWNlaG9sZGVyOiBcIkRyYWcgYW5kIGRyb3AgYSBmaWxlIGhlcmUgb3IgY2xpY2sgdGhlIGJ1dHRvbiBiZWxvdyBhbmQgY2hvb3NlIGEgZmlsZSB0byB1cGxvYWQuXCIgPT4gXCLXkteo15XXqCDXldep15fXqNeoINen15XXkdelINec15vXkNefINeQ15Ug15zXl9elINei15wg15TXnNeX16bXnyDXnNee15jXlCDXldeR15fXqCDXp9eV15HXpSDXnNeU16LXnNeQ15QuXCJcbi8vIGVtcHR5Um93c1RleHQ6IFwiVGhlcmUgYXJlIG5vIHJvd3MuXCIgPT4gXCLXkNeZ158g16nXldeo15XXqi5cIlxuLy8gbXVsdGlwbGV0ZXh0X2l0ZW1uYW1lOiBcInRleHRcIiA9PiBcIteY16fXodeYXCJcbi8vIHNpZ25hdHVyZVBsYWNlSG9sZGVyOiBcIlNpZ24gaGVyZVwiID0+IFwi15fXqteV150g15vXkNefXCJcbi8vIG1vZGFsQ2FuY2VsQnV0dG9uVGV4dDogXCJDYW5jZWxcIiA9PiBcIteR15nXmNecXCJcbi8vIG1vZGFsQXBwbHlCdXR0b25UZXh0OiBcIkFwcGx5XCIgPT4gXCLXlNeX15xcIlxuLy8gZmlsdGVyU3RyaW5nUGxhY2Vob2xkZXI6IFwiVHlwZSB0byBzZWFyY2guLi5cIiA9PiBcIteU16fXnNeTINeb15PXmSDXnNeX16TXqS4uLlwiXG4vLyBlbXB0eU1lc3NhZ2U6IFwiTm8gZGF0YSB0byBkaXNwbGF5XCIgPT4gXCLXkNeZ158g16DXqteV16DXmdedINec15TXpteS15RcIlxuLy8gbm9FbnRyaWVzVGV4dDogXCJUaGVyZSBhcmUgbm8gZW50cmllcyB5ZXQuXFxuQ2xpY2sgdGhlIGJ1dHRvbiBiZWxvdyB0byBhZGQgYSBuZXcgZW50cnkuXCIgPT4gXCLXkNeZ158g16LXk9eZ15nXnyDXoteo15vXmdedLlxcbtec15fXpSDXotecINeU15zXl9em158g15zXnteY15Qg15vXk9eZINec15TXldeh15nXoyDXoteo15og15fXk9epLlwiXG4vLyBub0VudHJpZXNSZWFkb25seVRleHQ6IFwiVGhlcmUgYXJlIG5vIGVudHJpZXMuXCIgPT4gXCLXkNeZ158g16LXqNeb15nXnS5cIlxuLy8gbW9yZTogXCJNb3JlXCIgPT4gXCLXoteV15NcIlxuLy8gdGFnYm94RG9uZUJ1dHRvbkNhcHRpb246IFwiT0tcIiA9PiBcIteQ15XXp9eZ15lcIlxuLy8gc2VsZWN0VG9SYW5rRW1wdHlSYW5rZWRBcmVhVGV4dDogXCJBbGwgY2hvaWNlcyBhcmUgcmFua2VkXCIgPT4gXCLXm9ecINeU15DXpNep16jXldeZ15XXqiDXnteT15XXqNeS15XXqlwiXG4vLyBzZWxlY3RUb1JhbmtFbXB0eVVucmFua2VkQXJlYVRleHQ6IFwiRHJhZyBhbmQgZHJvcCBjaG9pY2VzIGhlcmUgdG8gcmFuayB0aGVtXCIgPT4gXCLXkteo15XXqCDXldep15fXqNeoINeQ16TXqdeo15XXmdeV16og15zXm9eQ158g15vXk9eZINec15PXqNeSINeQ15XXqtefXCIvLyB0YWtlUGhvdG9DYXB0aW9uOiBcIlRha2UgUGhvdG9cIiA9PiBcItem15zXnSDXqtee15XXoNeUXCJcbi8vIGNhbWVyYVBsYWNlSG9sZGVyOiBcIkNsaWNrIHRoZSBidXR0b24gYmVsb3cgdG8gdGFrZSBhIHBob3RvIHVzaW5nIHRoZSBjYW1lcmEuXCIgPT4gXCLXnNeX16Ug16LXnCDXlNec15fXptefINec157XmNeUINeb15PXmSDXnNem15zXnSDXqtee15XXoNeUINeR15DXntem16LXldeqINeU157Xptec157XlC5cIlxuLy8gZmlsZUNhbWVyYURyYWdBcmVhUGxhY2VIb2xkZXI6IFwiRHJhZyBhbmQgZHJvcCBvciBzZWxlY3QgYSBmaWxlIHRvIHVwbG9hZCBvciB0YWtlIGEgcGhvdG8gdXNpbmcgdGhlIGNhbWVyYS5cIiA9PiBcIteS16jXldeoINeV16nXl9eo16gg15DXlSDXkdeX16gg16fXldeR16Ug15vXk9eZINec15TXotec15XXqiDXkNeVINec16bXnNedINeq157Xldeg15Qg15HXkNee16bXoteV16og15TXntem15zXnteULlwiXG4vLyByZXBsYWNlRmlsZUNhcHRpb246IFwiUmVwbGFjZSBmaWxlXCIgPT4gXCLXlNeX15zXpNeqINen15XXkdelXCJcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9sb2NhbGl6YXRpb24vaGluZGkudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL2xvY2FsaXphdGlvbi9oaW5kaS50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogaGluZGlTdHJpbmdzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImhpbmRpU3RyaW5nc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGhpbmRpU3RyaW5nczsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHN1cnZleS1jb3JlICovIFwiLi9zcmMvZW50cmllcy9jb3JlLnRzXCIpO1xuXG52YXIgaGluZGlTdHJpbmdzID0ge1xuICAgIHBhZ2VQcmV2VGV4dDogXCLgpKrgpL/gpJvgpLLgpL5cIixcbiAgICBwYWdlTmV4dFRleHQ6IFwi4KSF4KSX4KSy4KS+XCIsXG4gICAgY29tcGxldGVUZXh0OiBcIuCkquClguCksOCkvlwiLFxuICAgIHByZXZpZXdUZXh0OiBcIuCkquClguCksOCljeCkteCkuOCkruClgOCkleCljeCkt+CkvlwiLFxuICAgIGVkaXRUZXh0OiBcIuCkuOCkguCkquCkvuCkpuCkv+CkpFwiLFxuICAgIHN0YXJ0U3VydmV5VGV4dDogXCLgpLbgpYHgpLDgpYJcIixcbiAgICBvdGhlckl0ZW1UZXh0OiBcIuCkpuClguCkuOCksOCkviAo4KS14KSw4KWN4KSj4KSoIOCkleCksOClh+CkgilcIixcbiAgICBub25lSXRlbVRleHQ6IFwi4KSV4KWL4KSIIOCkqOCkueClgOCkglwiLFxuICAgIHNlbGVjdEFsbEl0ZW1UZXh0OiBcIuCkuOCkreClgCDgpJXgpL4g4KSa4KSv4KSoIOCkleCksOClh+CkglwiLFxuICAgIHByb2dyZXNzVGV4dDogXCLgpKrgpYPgpLfgpY3gpKAgMSDgpK7gpYfgpIIg4KS44KWHIDBcIixcbiAgICBpbmRleFRleHQ6IFwiezF9IOCkleCkviB7MH1cIixcbiAgICBwYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ6IFwiIOCkpuCkuOCljeCkpOCkvuCkteClh+CknCB7MX0g4KSV4KWHIHswfVwiLFxuICAgIHBhbmVsRHluYW1pY1RhYlRleHRGb3JtYXQ6IFwi4KSq4KWI4KSo4KSyIHtwYW5lbEluZGV4fVwiLFxuICAgIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCJ7MX0g4KS44KS14KS+4KSy4KWL4KSCIOCkruClh+CkgiDgpLjgpYcgezB9IOCkleClhyDgpJzgpLXgpL7gpKwg4KSm4KS/4KSPXCIsXG4gICAgZW1wdHlTdXJ2ZXk6IFwi4KS44KSw4KWN4KS14KWH4KSV4KWN4KS34KSjIOCkruClh+CkgiDgpJXgpYvgpIgg4KSm4KWD4KS24KWN4KSv4KSu4KS+4KSoIOCkquClg+Ckt+CljeCkoCDgpK/gpL4g4KSq4KWN4KSw4KS24KWN4KSoIOCkqOCkueClgOCkgiDgpLngpYhcIixcbiAgICBjb21wbGV0aW5nU3VydmV5OiBcIuCkuOCksOCljeCkteClh+CkleCljeCkt+CkoyDgpJXgpYsg4KSq4KWC4KSw4KS+IOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIOCkp+CkqOCljeCkr+CkteCkvuCkplwiLFxuICAgIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6IFwiIOCkueCkruCkvuCksOClhyDgpLDgpL/gpJXgpYngpLDgpY3gpKEg4KSs4KSk4KS+4KSk4KWHIOCkueCliOCkgiDgpJXgpL8g4KSG4KSqIOCkquCkueCksuClhyDgpLngpYAg4KSH4KS4IOCkuOCksOCljeCkteClh+CkleCljeCkt+CkoyDgpJXgpYsg4KSq4KWC4KSw4KS+IOCkleCksCDgpJrgpYHgpJXgpYcg4KS54KWI4KSCXCIsXG4gICAgbG9hZGluZ1N1cnZleTogXCLgpLjgpLDgpY3gpLXgpYfgpJXgpY3gpLfgpKMg4KSW4KWB4KSyIOCksOCkueCkviDgpLngpYgu4oCmXCIsXG4gICAgcGxhY2Vob2xkZXI6IFwi4KSa4KWB4KSo4KWH4KSCXCIsXG4gICAgcmF0aW5nT3B0aW9uc0NhcHRpb246IFwi4KSa4KWB4KSo4KSo4KS+4KWk4KWk4KWkXCIsXG4gICAgdmFsdWU6IFwi4KSu4KWC4KSy4KWN4KSvXCIsXG4gICAgcmVxdWlyZWRFcnJvcjogXCLgpJXgpYPgpKrgpK/gpL4g4KSq4KWN4KSw4KS24KWN4KSoIOCkleCkviDgpIngpKTgpY3gpKTgpLAg4KSm4KWH4KSCXCIsXG4gICAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwi4KSV4KWD4KSq4KSv4KS+IOCkleCkriDgpLjgpYcg4KSV4KSuIOCkj+CklSDgpKrgpY3gpLDgpLbgpY3gpKgg4KSV4KS+IOCkieCkpOCljeCkpOCksCDgpKbgpYfgpIJcIixcbiAgICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIuCkleClg+CkquCkr+CkviDgpLjgpK3gpYAg4KSq4KSC4KSV4KWN4KSk4KS/4KSv4KWL4KSCIOCkruClh+CkgiDgpLjgpLXgpL7gpLLgpYvgpIIg4KSV4KWHIOCknOCkteCkvuCkrCDgpKbgpYfgpIJcIixcbiAgICBudW1lcmljRXJyb3I6IFwi4KSu4KWC4KSy4KWN4KSvIOCkuOCkguCkluCljeCkr+CkvuCkpOCljeCkruCklSDgpLngpYvgpKjgpL4g4KSa4KS+4KS54KS/4KSPXCIsXG4gICAgbWluRXJyb3I6IFwi4KSu4KS+4KSoIHswfSDgpLjgpYcg4KSV4KSuIOCkqOCkueClgOCkgiDgpLngpYvgpKjgpL4g4KSa4KS+4KS54KS/4KSPXCIsXG4gICAgbWF4RXJyb3I6IFwi4KSu4KS+4KSoIHswfSDgpLjgpYcg4KSF4KSn4KS/4KSVIOCkqOCkueClgOCkgiDgpLngpYvgpKjgpL4g4KSa4KS+4KS54KS/4KSPXCIsXG4gICAgdGV4dE1pbkxlbmd0aDogXCLgpJXgpYPgpKrgpK/gpL4g4KSV4KSuIOCkuOClhyDgpJXgpK4gezB9IOCkteCksOCljeCkoyDgpKbgpLDgpY3gpJwg4KSV4KSw4KWH4KSCXCIsXG4gICAgdGV4dE1heExlbmd0aDogXCLgpJXgpYPgpKrgpK/gpL4gezB9IOCkuOClhyDgpJXgpK4g4KS14KSw4KWN4KSjIOCkpuCksOCljeCknCDgpJXgpLDgpYfgpIJcIixcbiAgICB0ZXh0TWluTWF4TGVuZ3RoOiBcIuCkleClg+CkquCkr+CkviB7MH0g4KS44KWHIOCkheCkp+Ckv+CklSDgpJTgpLAgezF9IOCkuOClhyDgpJXgpK4g4KSq4KS+4KSk4KWN4KSw4KWL4KSCIOCkruClh+CkgiDgpKrgpY3gpLDgpLXgpYfgpLYg4KSV4KSw4KWH4KSCXCIsXG4gICAgbWluUm93Q291bnRFcnJvcjogXCLgpJXgpYPgpKrgpK/gpL4g4KSV4KSuIOCkuOClhyDgpJXgpK4gezB9IOCkquCkguCkleCljeCkpOCkv+Ckr+Cli+CkgiDgpJXgpYsg4KSt4KSw4KWH4KSCXCIsXG4gICAgbWluU2VsZWN0RXJyb3I6IFwi4KSV4KWD4KSq4KSv4KS+IOCkleCkriDgpLjgpYcg4KSV4KSuIHswfSDgpLXgpL/gpJXgpLLgpY3gpKog4KSV4KS+IOCkmuCkr+CkqCDgpJXgpLDgpYfgpIJcIixcbiAgICBtYXhTZWxlY3RFcnJvcjogXCLgpJXgpYPgpKrgpK/gpL4gezB9IOCkteCkv+CkleCksuCljeCkquCli+CkgiDgpLjgpYcg4KSF4KSn4KS/4KSVIOCkqOCkueClgOCkgiDgpJrgpYHgpKjgpYfgpIJcIixcbiAgICBudW1lcmljTWluTWF4OiBcIid7MH0nIHsxfSDgpLjgpYcg4KSs4KSw4KS+4KSs4KSwIOCkr+CkviDgpIXgpKfgpL/gpJUg4KSU4KSwIHsyfSDgpLjgpYcg4KSs4KSw4KS+4KSs4KSwIOCkr+CkviDgpJXgpK4g4KS54KWL4KSo4KS+IOCkmuCkvuCkueCkv+Ckj1wiLFxuICAgIG51bWVyaWNNaW46IFwiJ3swfScgezF9IOCkuOClhyDgpKzgpLDgpL7gpKzgpLAg4KSv4KS+IOCkheCkp+Ckv+CklSDgpLngpYvgpKjgpL4g4KSa4KS+4KS54KS/4KSPXCIsXG4gICAgbnVtZXJpY01heDogXCInezB9JyB7MX0g4KS44KWHIOCkrOCksOCkvuCkrOCksCDgpK/gpL4g4KSV4KSuIOCkueCli+CkqOCkviDgpJrgpL7gpLngpL/gpI9cIixcbiAgICBpbnZhbGlkRW1haWw6IFwi4KSV4KWD4KSq4KSv4KS+IOCkj+CklSDgpLXgpYjgpKcg4KSI4KSu4KWH4KSyIOCkquCkpOCkviDgpKbgpLDgpY3gpJwg4KSV4KSw4KWH4KSCXCIsXG4gICAgaW52YWxpZEV4cHJlc3Npb246IFwi4KSF4KSt4KS/4KS14KWN4KSv4KSV4KWN4KSk4KS/OiB7MH0g4KSV4KWLICcg4KS44KSaICcg4KSy4KWM4KSf4KSo4KS+IOCkmuCkvuCkueCkv+Ckj1wiLFxuICAgIHVybFJlcXVlc3RFcnJvcjogXCLgpIXgpKjgpYHgpLDgpYvgpKcg4KSy4KWM4KSf4KS+4KSv4KS+IOCkpOCljeCksOClgeCkn+CkvyAnezB9JyAuIHsxfVwiLFxuICAgIHVybEdldENob2ljZXNFcnJvcjogXCLgpIXgpKjgpYHgpLDgpYvgpKcg4KSo4KWHIOCkluCkvuCksuClgCDgpKHgpYfgpJ/gpL4g4KS14KS+4KSq4KS4IOCkleCksCDgpKbgpL/gpK/gpL4g4KS54KWIIFwiLFxuICAgIGV4Y2VlZE1heFNpemU6IFwi4KSr4KS84KS+4KSH4KSyIOCkleCkviDgpIbgpJXgpL7gpLAgezB9IOCkuOClhyDgpIXgpKfgpL/gpJUg4KSo4KS54KWA4KSCIOCkueCli+CkqOCkviDgpJrgpL7gpLngpL/gpI8gIOCkr+CkviDgpKvgpL/gpLAgJ+CkquCkvuCkpScg4KSq4KWN4KSw4KWJ4KSq4KSw4KWN4KSf4KWAIOCkl+CksuCkpCDgpLngpYhcIixcbiAgICBvdGhlclJlcXVpcmVkRXJyb3I6IFwi4KSV4KWD4KSq4KSv4KS+IOCkpuClguCkuOCksOCkviDgpK7gpYLgpLLgpY3gpK8g4KSm4KSw4KWN4KScIOCkleCksOClh+CkglwiLFxuICAgIHVwbG9hZGluZ0ZpbGU6IFwi4KSG4KSq4KSV4KWAIOCkq+CkvuCkh+CksiDgpIXgpKrgpLLgpYvgpKEg4KS54KWLIOCksOCkueClgCDgpLngpYjgpaQg4KSV4KWD4KSq4KSv4KS+IOCkleCkiCDgpLjgpYfgpJXgpILgpKEg4KSH4KSC4KSk4KSc4KS+4KSwIOCkleCksOClh+CkgiDgpJTgpLAg4KSr4KS/4KSwIOCkuOClhyDgpKrgpY3gpLDgpK/gpL7gpLgg4KSV4KSw4KWH4KSC4KWkXCIsXG4gICAgbG9hZGluZ0ZpbGU6IFwi4KSy4KWL4KSh4KS/4KSC4KSXXCIsXG4gICAgY2hvb3NlRmlsZTogXCLgpKvgpLzgpL7gpIfgpLIg4KSa4KWB4KSo4KWH4KSCXCIsXG4gICAgbm9GaWxlQ2hvc2VuOiBcIuCkleCli+CkiCDgpKvgpL7gpIfgpLIg4KSo4KS54KWA4KSCIOCkmuClgeCkqOClgCDgpJfgpIhcIixcbiAgICBmaWxlRHJhZ0FyZWFQbGFjZWhvbGRlcjogXCLgpK/gpLngpL7gpIIg4KSP4KSVIOCkq+CkvOCkvuCkh+CksiDgpJbgpYDgpILgpJrgpYfgpIIg4KSU4KSwIOCkm+Cli+CkoeCkvOClh+CkgiDgpK/gpL4g4KSo4KWA4KSa4KWHIOCkpuCkv+CkjyDgpJfgpI8g4KSs4KSf4KSoIOCkquCksCDgpJXgpY3gpLLgpL/gpJUg4KSV4KSw4KWH4KSCIOCklOCksCDgpIXgpKrgpLLgpYvgpKEg4KSV4KSw4KSo4KWHIOCkleClhyDgpLLgpL/gpI8g4KSP4KSVIOCkq+CkvOCkvuCkh+CksiDgpJrgpYHgpKjgpYfgpILgpaRcIixcbiAgICBjb25maXJtRGVsZXRlOiBcIuCkleCljeCkr+CkviDgpIbgpKog4KSw4KS/4KSV4KWJ4KSw4KWN4KShIOCkueCkn+CkvuCkqOCkviDgpJrgpL7gpLngpKTgpYcg4KS54KWI4KSCXCIsXG4gICAga2V5RHVwbGljYXRpb25FcnJvcjogXCLgpK/gpLkg4KSu4KS+4KSoIOCkheCkqOCli+CkluCkviDgpLngpYvgpKjgpL4g4KSa4KS+4KS54KS/4KSPXCIsXG4gICAgYWRkQ29sdW1uOiBcIuCkleClieCksuCkriDgpJzgpYvgpKHgpLzgpYfgpIJcIixcbiAgICBhZGRSb3c6IFwi4KSq4KSC4KSV4KWN4KSk4KS/IOCknOCli+CkoeCkvOClh+CkglwiLFxuICAgIHJlbW92ZVJvdzogXCLgpLngpJ/gpL7gpI9cIixcbiAgICBlbXB0eVJvd3NUZXh0OiBcIuCkleCli+CkiCDgpKrgpILgpJXgpY3gpKTgpL/gpK/gpL7gpIEg4KSo4KS54KWA4KSCIOCkueCliOCkgi5cIixcbiAgICBhZGRQYW5lbDogXCLgpKjgpK/gpL4g4KSc4KWL4KSh4KS84KWH4KSCXCIsXG4gICAgcmVtb3ZlUGFuZWw6IFwi4KS54KSf4KS+4KSPXCIsXG4gICAgY2hvaWNlc19JdGVtOiBcIuCkruCkplwiLFxuICAgIG1hdHJpeF9jb2x1bW46IFwi4KSV4KWJ4KSy4KSuXCIsXG4gICAgbWF0cml4X3JvdzogXCLgpKrgpILgpJXgpY3gpKTgpL9cIixcbiAgICBtdWx0aXBsZXRleHRfaXRlbW5hbWU6IFwi4KSf4KWH4KSV4KWN4KS44KWN4KSfXCIsXG4gICAgc2F2aW5nRGF0YTogXCLgpKrgpLDgpL/gpKPgpL7gpK4g4KS44KSw4KWN4KS14KSwIOCkquCksCDgpLjgpYfgpLUg4KS54KWLIOCksOCkueClhyDgpLngpYjgpIJcIixcbiAgICBzYXZpbmdEYXRhRXJyb3I6IFwi4KSP4KSVIOCkpOCljeCksOClgeCkn+CkvyDgpLngpYHgpIgg4KSU4KSwIOCkueCkriDgpKrgpLDgpL/gpKPgpL7gpK7gpYvgpIIg4KSV4KWLIOCkqOCkueClgOCkgiDgpLjgpYfgpLUg4KSV4KSwIOCkuOCkleClh1wiLFxuICAgIHNhdmluZ0RhdGFTdWNjZXNzOiBcIuCkquCksOCkv+Cko+CkvuCkriDgpLjgpKvgpLLgpKTgpL7gpKrgpYLgpLDgpY3gpLXgpJUg4KS44KWH4KS1IOCkueCliyDgpJfgpI9cIixcbiAgICBzYXZlQWdhaW5CdXR0b246IFwi4KSr4KS/4KSwIOCkleCli+CktuCkv+CktiDgpJXgpLDgpYtcIixcbiAgICB0aW1lck1pbjogXCLgpK7gpL/gpKjgpJ9cIixcbiAgICB0aW1lclNlYzogXCLgpLjgpYfgpJXgpILgpKFcIixcbiAgICB0aW1lclNwZW50QWxsOiBcIuCkhuCkquCkqOClhyDgpIfgpLgg4KSq4KWD4KS34KWN4KSgIOCkquCksCB7MH0g4KSW4KSw4KWN4KSaIOCkleCkv+CkjyDgpLngpYjgpIIg4KSU4KSwIOCkleClgeCksiB7MX1cIixcbiAgICB0aW1lclNwZW50UGFnZTogXCLgpIbgpKrgpKjgpYcg4KSH4KS4IOCkquClg+Ckt+CljeCkoCDgpKrgpLAgezB9IOCkluCksOCljeCkmiDgpJXgpL/gpK/gpL4g4KS54KWIXCIsXG4gICAgdGltZXJTcGVudFN1cnZleTogXCLgpIbgpKrgpKjgpYcg4KSV4KWB4KSyIHswfSDgpJbgpLDgpY3gpJog4KSV4KS/4KSv4KS+IOCkueCliFwiLFxuICAgIHRpbWVyTGltaXRBbGw6IFwi4KSG4KSq4KSo4KWHIOCkh+CkuCDgpKrgpYPgpLfgpY3gpKAg4KSq4KSwIHsxfSDgpJXgpYAgezB9IOCklOCksCDgpJXgpYHgpLIgezN9IOCkleClgCB7Mn0g4KSW4KSw4KWN4KSaIOCkleClgCDgpLngpYjgpaRcIixcbiAgICB0aW1lckxpbWl0UGFnZTogXCLgpIbgpKrgpKjgpYcg4KSH4KS4IOCkquClg+Ckt+CljeCkoCDgpKrgpLAgezF9IOCkleCkviB7MH0g4KSW4KSw4KWN4KSaIOCkleCkv+Ckr+CkviDgpLngpYhcIixcbiAgICB0aW1lckxpbWl0U3VydmV5OiBcIuCkhuCkquCkqOClhyDgpJXgpYHgpLIgezF9IOCkleClgCB7MH0g4KSW4KSw4KWN4KSaIOCkleClgCDgpLngpYhcIixcbiAgICBjbGVhckNhcHRpb246IFwi4KS44KWN4KSq4KS34KWN4KSfXCIsXG4gICAgc2lnbmF0dXJlUGxhY2VIb2xkZXI6IFwi4KSv4KS54KS+4KSCIOCkuOCkvuCkh+CkqCDgpJXgpLDgpYfgpIJcIixcbiAgICBjaG9vc2VGaWxlQ2FwdGlvbjogXCLgpKvgpLzgpL7gpIfgpLIg4KSa4KWB4KSo4KWH4KSCXCIsXG4gICAgdGFrZVBob3RvQ2FwdGlvbjogXCLgpKvgpYvgpJ/gpYsg4KSy4KWHIOCksuCli1wiLFxuICAgIGNhbWVyYVBsYWNlSG9sZGVyOiBcIuCkleCliOCkruCksOClhyDgpJXgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkleCksOCkleClhyDgpKvgpYvgpJ/gpYsg4KSy4KWH4KSo4KWHIOCkleClhyDgpLLgpL/gpI8g4KSo4KWA4KSa4KWHIOCkpuCkv+CkjyDgpJfgpI8g4KSs4KSf4KSoIOCkquCksCDgpJXgpY3gpLLgpL/gpJUg4KSV4KSw4KWH4KSC4KWkXCIsXG4gICAgZmlsZUNhbWVyYURyYWdBcmVhUGxhY2VIb2xkZXI6IFwi4KSV4KWI4KSu4KSw4KWHIOCkleCkviDgpIngpKrgpK/gpYvgpJcg4KSV4KSw4KSV4KWHIOCkq+CkvOCli+Ckn+CliyDgpIXgpKrgpLLgpYvgpKEg4KSV4KSw4KSo4KWHIOCkr+CkviDgpKvgpLzgpYvgpJ/gpYsg4KSy4KWH4KSo4KWHIOCkleClhyDgpLLgpL/gpI8g4KSV4KS/4KS44KWAIOCkq+CkvOCkvuCkh+CksiDgpJXgpYsg4KSW4KWA4KSC4KSa4KWH4KSCIOCklOCksCDgpJvgpYvgpKHgpLzgpYfgpIIg4KSv4KS+IOCkmuClgeCkqOClh+Ckgi5cIixcbiAgICByZXBsYWNlRmlsZUNhcHRpb246IFwi4KSr4KS84KS+4KSH4KSyIOCkrOCkpuCksuClh+CkglwiLFxuICAgIHJlbW92ZUZpbGVDYXB0aW9uOiBcIuCkh+CkuCDgpKvgpL7gpIfgpLIg4KSV4KWLIOCkqOCkv+CkleCkvuCksuClh+CkglwiLFxuICAgIGJvb2xlYW5DaGVja2VkTGFiZWw6IFwi4KS54KS+4KSBXCIsXG4gICAgYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcIuCkqOCkueClgOCkglwiLFxuICAgIGNvbmZpcm1SZW1vdmVGaWxlOiBcIuCkleCljeCkr+CkviDgpIbgpKog4KS44KWB4KSo4KS/4KS24KWN4KSa4KS/4KSkIOCkueCliOCkgiDgpJXgpL8g4KSG4KSqIOCkh+CkuCDgpKvgpLzgpL7gpIfgpLIg4KSV4KWLIOCkueCkn+CkvuCkqOCkviDgpJrgpL7gpLngpKTgpYcg4KS54KWI4KSCOiB7MH1cIixcbiAgICBjb25maXJtUmVtb3ZlQWxsRmlsZXM6IFwi4KSV4KWN4KSv4KS+IOCkhuCkqiDgpLjgpYHgpKjgpL/gpLbgpY3gpJrgpL/gpKQg4KS54KWI4KSCIOCkleCkvyDgpIbgpKog4KS44KSt4KWAIOCkq+CkvOCkvuCkh+CksuCli+CkgiDgpJXgpYsg4KS54KSf4KS+4KSo4KS+IOCkmuCkvuCkueCkpOClhyDgpLngpYjgpIJcIixcbiAgICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwi4KSq4KWN4KSw4KS24KWN4KSoIOCkleCkviDgpLbgpYDgpLDgpY3gpLfgpJVcIixcbiAgICBtb2RhbENhbmNlbEJ1dHRvblRleHQ6IFwi4KSw4KSm4KWN4KSmIOCkleCksOCkqOCkvlwiLFxuICAgIG1vZGFsQXBwbHlCdXR0b25UZXh0OiBcIuCksuCkvuCkl+ClgiDgpJXgpLDgpKjgpL5cIixcbiAgICBmaWx0ZXJTdHJpbmdQbGFjZWhvbGRlcjogXCLgpJbgpYvgpJwg4KSV4KSw4KSo4KWHIOCkleClhyDgpLLgpL/gpI8g4KSf4KS+4KSH4KSqIOCkleCksOClh+Ckgi4uLlwiLFxuICAgIGVtcHR5TWVzc2FnZTogXCLgpKrgpY3gpLDgpKbgpLDgpY3gpLbgpL/gpKQg4KSV4KSw4KSo4KWHIOCkleClhyDgpLLgpL/gpI8g4KSV4KWL4KSIIOCkoeClh+Ckn+CkviDgpKjgpLngpYDgpIJcIixcbiAgICBub0VudHJpZXNUZXh0OiBcIuCkheCkreClgCDgpKTgpJUg4KSV4KWL4KSIIOCkquCljeCksOCkteCkv+Ckt+CljeCkn+Ckv+Ckr+CkvuCkgiDgpKjgpLngpYDgpIIg4KS54KWI4KSC4KWkXFxu4KSo4KSIIOCkquCljeCksOCkteCkv+Ckt+CljeCkn+CkvyDgpJzgpYvgpKHgpLzgpKjgpYcg4KSV4KWHIOCksuCkv+CkjyDgpKjgpYDgpJrgpYcg4KSm4KS/4KSPIOCkl+CkjyDgpKzgpJ/gpKgg4KSq4KSwIOCkleCljeCksuCkv+CklSDgpJXgpLDgpYfgpIIuXCIsXG4gICAgbm9FbnRyaWVzUmVhZG9ubHlUZXh0OiBcIuCkleCli+CkiCDgpKrgpY3gpLDgpLXgpL/gpLfgpY3gpJ/gpL/gpK/gpL7gpIEg4KSo4KS54KWA4KSCIOCkueCliOCkgi5cIixcbiAgICBtb3JlOiBcIuCkheCkp+Ckv+CklVwiLFxuICAgIHRhZ2JveERvbmVCdXR0b25DYXB0aW9uOiBcIuCkoOClgOCklSDgpLngpYhcIixcbiAgICBzZWxlY3RUb1JhbmtFbXB0eVJhbmtlZEFyZWFUZXh0OiBcIuCkuOCkreClgCDgpLXgpL/gpJXgpLLgpY3gpKrgpYvgpIIg4KSV4KWLIOCksOCliOCkguCklSDgpJXgpL/gpK/gpL4g4KSX4KSv4KS+IOCkueCliFwiLFxuICAgIHNlbGVjdFRvUmFua0VtcHR5VW5yYW5rZWRBcmVhVGV4dDogXCLgpLXgpL/gpJXgpLLgpY3gpKrgpYvgpIIg4KSV4KWLIOCksOCliOCkguCklSDgpJXgpLDgpKjgpYcg4KSV4KWHIOCksuCkv+CkjyDgpIngpKjgpY3gpLngpYfgpIIg4KSv4KS54KS+4KSCIOCkluClgOCkguCkmuClh+CkgiDgpJTgpLAg4KSb4KWL4KSh4KS8IOCkpuClh+CkglwiXG59O1xuc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN1cnZleUxvY2FsaXphdGlvblwiXS5sb2NhbGVzW1wiaGlcIl0gPSBoaW5kaVN0cmluZ3M7XG5zdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3VydmV5TG9jYWxpemF0aW9uXCJdLmxvY2FsZU5hbWVzW1wiaGlcIl0gPSBcImhpbmRpXCI7XG4vLyBUaGUgZm9sbG93aW5nIHN0cmluZ3MgaGF2ZSBiZWVuIHRyYW5zbGF0ZWQgYnkgYSBtYWNoaW5lIHRyYW5zbGF0aW9uIHNlcnZpY2Vcbi8vIFJlbW92ZSB0aG9zZSBzdHJpbmdzIHRoYXQgeW91IGhhdmUgY29ycmVjdGVkIG1hbnVhbGx5XG4vLyBub25lSXRlbVRleHQ6IFwiTm9uZVwiID0+IFwi4KSV4KWL4KSIIOCkqOCkueClgOCkglwiXG4vLyBpbmRleFRleHQ6IFwiezB9IG9mIHsxfVwiID0+IFwiezF9IOCkleCkviB7MH1cIlxuLy8gcGFuZWxEeW5hbWljVGFiVGV4dEZvcm1hdDogXCJQYW5lbCB7cGFuZWxJbmRleH1cIiA9PiBcIuCkquCliOCkqOCksiB7cGFuZWxJbmRleH1cIlxuLy8gcmF0aW5nT3B0aW9uc0NhcHRpb246IFwiU2VsZWN0Li4uXCIgPT4gXCLgpJrgpYHgpKjgpKjgpL7gpaTgpaTgpaRcIlxuLy8gbWluRXJyb3I6IFwiVGhlIHZhbHVlIHNob3VsZCBub3QgYmUgbGVzcyB0aGFuIHswfVwiID0+IFwi4KSu4KS+4KSoIHswfSDgpLjgpYcg4KSV4KSuIOCkqOCkueClgOCkgiDgpLngpYvgpKjgpL4g4KSa4KS+4KS54KS/4KSPXCJcbi8vIG1heEVycm9yOiBcIlRoZSB2YWx1ZSBzaG91bGQgbm90IGJlIGdyZWF0ZXIgdGhhbiB7MH1cIiA9PiBcIuCkruCkvuCkqCB7MH0g4KS44KWHIOCkheCkp+Ckv+CklSDgpKjgpLngpYDgpIIg4KS54KWL4KSo4KS+IOCkmuCkvuCkueCkv+Ckj1wiXG4vLyBmaWxlRHJhZ0FyZWFQbGFjZWhvbGRlcjogXCJEcmFnIGFuZCBkcm9wIGEgZmlsZSBoZXJlIG9yIGNsaWNrIHRoZSBidXR0b24gYmVsb3cgYW5kIGNob29zZSBhIGZpbGUgdG8gdXBsb2FkLlwiID0+IFwi4KSv4KS54KS+4KSCIOCkj+CklSDgpKvgpLzgpL7gpIfgpLIg4KSW4KWA4KSC4KSa4KWH4KSCIOCklOCksCDgpJvgpYvgpKHgpLzgpYfgpIIg4KSv4KS+IOCkqOClgOCkmuClhyDgpKbgpL/gpI8g4KSX4KSPIOCkrOCkn+CkqCDgpKrgpLAg4KSV4KWN4KSy4KS/4KSVIOCkleCksOClh+CkgiDgpJTgpLAg4KSF4KSq4KSy4KWL4KShIOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIOCkj+CklSDgpKvgpLzgpL7gpIfgpLIg4KSa4KWB4KSo4KWH4KSC4KWkXCJcbi8vIGVtcHR5Um93c1RleHQ6IFwiVGhlcmUgYXJlIG5vIHJvd3MuXCIgPT4gXCLgpJXgpYvgpIgg4KSq4KSC4KSV4KWN4KSk4KS/4KSv4KS+4KSBIOCkqOCkueClgOCkgiDgpLngpYjgpIIuXCJcbi8vIG11bHRpcGxldGV4dF9pdGVtbmFtZTogXCJ0ZXh0XCIgPT4gXCLgpJ/gpYfgpJXgpY3gpLjgpY3gpJ9cIlxuLy8gc2lnbmF0dXJlUGxhY2VIb2xkZXI6IFwiU2lnbiBoZXJlXCIgPT4gXCLgpK/gpLngpL7gpIIg4KS44KS+4KSH4KSoIOCkleCksOClh+CkglwiXG4vLyBtb2RhbENhbmNlbEJ1dHRvblRleHQ6IFwiQ2FuY2VsXCIgPT4gXCLgpLDgpKbgpY3gpKYg4KSV4KSw4KSo4KS+XCJcbi8vIG1vZGFsQXBwbHlCdXR0b25UZXh0OiBcIkFwcGx5XCIgPT4gXCLgpLLgpL7gpJfgpYIg4KSV4KSw4KSo4KS+XCJcbi8vIGZpbHRlclN0cmluZ1BsYWNlaG9sZGVyOiBcIlR5cGUgdG8gc2VhcmNoLi4uXCIgPT4gXCLgpJbgpYvgpJwg4KSV4KSw4KSo4KWHIOCkleClhyDgpLLgpL/gpI8g4KSf4KS+4KSH4KSqIOCkleCksOClh+Ckgi4uLlwiXG4vLyBlbXB0eU1lc3NhZ2U6IFwiTm8gZGF0YSB0byBkaXNwbGF5XCIgPT4gXCLgpKrgpY3gpLDgpKbgpLDgpY3gpLbgpL/gpKQg4KSV4KSw4KSo4KWHIOCkleClhyDgpLLgpL/gpI8g4KSV4KWL4KSIIOCkoeClh+Ckn+CkviDgpKjgpLngpYDgpIJcIlxuLy8gbm9FbnRyaWVzVGV4dDogXCJUaGVyZSBhcmUgbm8gZW50cmllcyB5ZXQuXFxuQ2xpY2sgdGhlIGJ1dHRvbiBiZWxvdyB0byBhZGQgYSBuZXcgZW50cnkuXCIgPT4gXCLgpIXgpK3gpYAg4KSk4KSVIOCkleCli+CkiCDgpKrgpY3gpLDgpLXgpL/gpLfgpY3gpJ/gpL/gpK/gpL7gpIIg4KSo4KS54KWA4KSCIOCkueCliOCkguClpFxcbuCkqOCkiCDgpKrgpY3gpLDgpLXgpL/gpLfgpY3gpJ/gpL8g4KSc4KWL4KSh4KS84KSo4KWHIOCkleClhyDgpLLgpL/gpI8g4KSo4KWA4KSa4KWHIOCkpuCkv+CkjyDgpJfgpI8g4KSs4KSf4KSoIOCkquCksCDgpJXgpY3gpLLgpL/gpJUg4KSV4KSw4KWH4KSCLlwiXG4vLyBub0VudHJpZXNSZWFkb25seVRleHQ6IFwiVGhlcmUgYXJlIG5vIGVudHJpZXMuXCIgPT4gXCLgpJXgpYvgpIgg4KSq4KWN4KSw4KS14KS/4KS34KWN4KSf4KS/4KSv4KS+4KSBIOCkqOCkueClgOCkgiDgpLngpYjgpIIuXCJcbi8vIG1vcmU6IFwiTW9yZVwiID0+IFwi4KSF4KSn4KS/4KSVXCJcbi8vIHRhZ2JveERvbmVCdXR0b25DYXB0aW9uOiBcIk9LXCIgPT4gXCLgpKDgpYDgpJUg4KS54KWIXCJcbi8vIHNlbGVjdFRvUmFua0VtcHR5UmFua2VkQXJlYVRleHQ6IFwiQWxsIGNob2ljZXMgYXJlIHJhbmtlZFwiID0+IFwi4KS44KSt4KWAIOCkteCkv+CkleCksuCljeCkquCli+CkgiDgpJXgpYsg4KSw4KWI4KSC4KSVIOCkleCkv+Ckr+CkviDgpJfgpK/gpL4g4KS54KWIXCJcbi8vIHNlbGVjdFRvUmFua0VtcHR5VW5yYW5rZWRBcmVhVGV4dDogXCJEcmFnIGFuZCBkcm9wIGNob2ljZXMgaGVyZSB0byByYW5rIHRoZW1cIiA9PiBcIuCkteCkv+CkleCksuCljeCkquCli+CkgiDgpJXgpYsg4KSw4KWI4KSC4KSVIOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIOCkieCkqOCljeCkueClh+CkgiDgpK/gpLngpL7gpIIg4KSW4KWA4KSC4KSa4KWH4KSCIOCklOCksCDgpJvgpYvgpKHgpLwg4KSm4KWH4KSCXCIvLyB0YWtlUGhvdG9DYXB0aW9uOiBcIlRha2UgUGhvdG9cIiA9PiBcIuCkq+Cli+Ckn+CliyDgpLLgpYcg4KSy4KWLXCJcbi8vIGNhbWVyYVBsYWNlSG9sZGVyOiBcIkNsaWNrIHRoZSBidXR0b24gYmVsb3cgdG8gdGFrZSBhIHBob3RvIHVzaW5nIHRoZSBjYW1lcmEuXCIgPT4gXCLgpJXgpYjgpK7gpLDgpYcg4KSV4KS+IOCkieCkquCkr+Cli+CklyDgpJXgpLDgpJXgpYcg4KSr4KWL4KSf4KWLIOCksuClh+CkqOClhyDgpJXgpYcg4KSy4KS/4KSPIOCkqOClgOCkmuClhyDgpKbgpL/gpI8g4KSX4KSPIOCkrOCkn+CkqCDgpKrgpLAg4KSV4KWN4KSy4KS/4KSVIOCkleCksOClh+CkguClpFwiXG4vLyBmaWxlQ2FtZXJhRHJhZ0FyZWFQbGFjZUhvbGRlcjogXCJEcmFnIGFuZCBkcm9wIG9yIHNlbGVjdCBhIGZpbGUgdG8gdXBsb2FkIG9yIHRha2UgYSBwaG90byB1c2luZyB0aGUgY2FtZXJhLlwiID0+IFwi4KSV4KWI4KSu4KSw4KWHIOCkleCkviDgpIngpKrgpK/gpYvgpJcg4KSV4KSw4KSV4KWHIOCkq+CkvOCli+Ckn+CliyDgpIXgpKrgpLLgpYvgpKEg4KSV4KSw4KSo4KWHIOCkr+CkviDgpKvgpLzgpYvgpJ/gpYsg4KSy4KWH4KSo4KWHIOCkleClhyDgpLLgpL/gpI8g4KSV4KS/4KS44KWAIOCkq+CkvOCkvuCkh+CksiDgpJXgpYsg4KSW4KWA4KSC4KSa4KWH4KSCIOCklOCksCDgpJvgpYvgpKHgpLzgpYfgpIIg4KSv4KS+IOCkmuClgeCkqOClh+Ckgi5cIlxuLy8gcmVwbGFjZUZpbGVDYXB0aW9uOiBcIlJlcGxhY2UgZmlsZVwiID0+IFwi4KSr4KS84KS+4KSH4KSyIOCkrOCkpuCksuClh+CkglwiXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvbG9jYWxpemF0aW9uL2h1bmdhcmlhbi50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL2xvY2FsaXphdGlvbi9odW5nYXJpYW4udHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBodW5nYXJpYW5TdXJ2ZXlTdHJpbmdzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImh1bmdhcmlhblN1cnZleVN0cmluZ3NcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBodW5nYXJpYW5TdXJ2ZXlTdHJpbmdzOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBzdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgc3VydmV5LWNvcmUgKi8gXCIuL3NyYy9lbnRyaWVzL2NvcmUudHNcIik7XG5cbnZhciBodW5nYXJpYW5TdXJ2ZXlTdHJpbmdzID0ge1xuICAgIHBhZ2VQcmV2VGV4dDogXCJWaXNzemFcIixcbiAgICBwYWdlTmV4dFRleHQ6IFwiVG92w6FiYlwiLFxuICAgIGNvbXBsZXRlVGV4dDogXCJLw6lzelwiLFxuICAgIHByZXZpZXdUZXh0OiBcIkVsxZFuw6l6ZXRcIixcbiAgICBlZGl0VGV4dDogXCJTemVya2VzenTDqXNcIixcbiAgICBzdGFydFN1cnZleVRleHQ6IFwiUmFqdFwiLFxuICAgIG90aGVySXRlbVRleHQ6IFwiRWd5w6liIChhZGphIG1lZylcIixcbiAgICBub25lSXRlbVRleHQ6IFwiRWd5aWsgc2VtXCIsXG4gICAgc2VsZWN0QWxsSXRlbVRleHQ6IFwiTWluZGV0IGtpdsOhbGFzenRcIixcbiAgICBwcm9ncmVzc1RleHQ6IFwiezB9Li97MX0gb2xkYWxcIixcbiAgICBpbmRleFRleHQ6IFwiezB9IHsxfSBrw7Z6w7xsXCIsXG4gICAgcGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0OiBcInswfSAvIHsxfSByZWtvcmRcIixcbiAgICBwYW5lbER5bmFtaWNUYWJUZXh0Rm9ybWF0OiBcIlBhbmVsIHtwYW5lbEluZGV4fVwiLFxuICAgIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCJWw6FsYXN6b2x0IGvDqXJkw6lzZWs6IHswfSAvIHsxfVwiLFxuICAgIGVtcHR5U3VydmV5OiBcIlRoZSBzdXJ2ZXkgZG9lc24ndCBjb250YWluIHZpc2libGUgcGFnZXMgb3IgcXVlc3Rpb25zLlwiLFxuICAgIGNvbXBsZXRpbmdTdXJ2ZXk6IFwiS8O2c3rDtm5qw7xrLCBob2d5IGtpdMO2bHTDtnR0ZSBmZWxtw6lyw6lzw7xua2V0IVwiLFxuICAgIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6IFwiTcOhciBraXTDtmx0w7Z0dGUgYSBmZWxtw6lyw6lzdC5cIixcbiAgICBsb2FkaW5nU3VydmV5OiBcIkZlbG3DqXLDqXMgYmV0w7ZsdMOpc2UuLi5cIixcbiAgICBwbGFjZWhvbGRlcjogXCJWw6FsYXNzem9uLi4uXCIsXG4gICAgcmF0aW5nT3B0aW9uc0NhcHRpb246IFwiS2l2w6FsYXN6dC4uLlwiLFxuICAgIHZhbHVlOiBcIsOpcnTDqWtcIixcbiAgICByZXF1aXJlZEVycm9yOiBcIkvDqXJqw7xrLCB2w6FsYXN6b2xqYSBtZWcgZXp0IGEga8OpcmTDqXN0IVwiLFxuICAgIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcIkvDqXJqw7xrLCB2w6FsYXN6b2xqb24gbGVnYWzDoWJiIGVneSBrw6lyZMOpc3JlLlwiLFxuICAgIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwiS8OpcmrDvGsgYWRqb24gdsOhbGFzenQgbWluZGVuIHNvcmJhbiFcIixcbiAgICBudW1lcmljRXJyb3I6IFwiQXogw6lydMOpayBzesOhbSBrZWxsLCBob2d5IGxlZ3llbiFcIixcbiAgICBtaW5FcnJvcjogXCJBeiDDqXJ0w6lrIG5lbSBsZWhldCBraXNlYmIsIG1pbnQgezB9XCIsXG4gICAgbWF4RXJyb3I6IFwiQXogw6lydMOpayBuZW0gbGVoZXQgbmFneW9iYiwgbWludCB7MH1cIixcbiAgICB0ZXh0TWluTGVuZ3RoOiBcIkFkam9uIG1lZyBsZWdhbMOhYmIgezB9IGthcmFrdGVydCFcIixcbiAgICB0ZXh0TWF4TGVuZ3RoOiBcIkxlZ2ZlbGplYmIgezB9IGthcmFrdGVydCBhZGpvbiBtZWchXCIsXG4gICAgdGV4dE1pbk1heExlbmd0aDogXCJBZGpvbiBtZWcgbGVnYWzDoWJiIHswfSwgZGUgbGVnZmVsamViYiB7MX0ga2FyYWt0ZXJ0IVwiLFxuICAgIG1pblJvd0NvdW50RXJyb3I6IFwiVMO2bHRzw7ZuIGtpIG1pbmltdW0gezB9IHNvcnQhXCIsXG4gICAgbWluU2VsZWN0RXJyb3I6IFwiVsOhbGFzc3pvbiBraSBsZWdhbMOhYmIgezB9IGxlaGV0xZFzw6lnZXQhXCIsXG4gICAgbWF4U2VsZWN0RXJyb3I6IFwiTmUgdsOhbGFzc3pvbiB0w7ZiYmV0LCBtaW50IHswfSBsZWhldMWRc8OpZyFcIixcbiAgICBudW1lcmljTWluTWF4OiBcIid7MH0nIGxlZ3llbiBuYWd5b2JiLCB2YWd5IGVneWVubMWRLCBtaW50IHsxfSDDqXMga2lzZWJiLCB2YWd5IGVneWVubMWRLCBtaW50IHsyfSFcIixcbiAgICBudW1lcmljTWluOiBcIid7MH0nIGxlZ3llbiBsZWdhbMOhYmIgezF9IVwiLFxuICAgIG51bWVyaWNNYXg6IFwiVGhlICd7MH0nIG5lIGxlZ3llbiBuYWd5b2JiLCBtaW50IHsxfSFcIixcbiAgICBpbnZhbGlkRW1haWw6IFwiQWRqb24gbWVnIGVneSB2YWzDs3MgZW1haWwgY8OtbWV0IVwiLFxuICAgIGludmFsaWRFeHByZXNzaW9uOiBcIkEga8O2dmV0a2V6xZEga2lmZWplesOpczogezB9IHZpc3N6YSBrZWxsIGFkbmlhIGF6IOKAnmlnYXrigJ0gw6lydMOpa2V0LlwiLFxuICAgIHVybFJlcXVlc3RFcnJvcjogXCJBIGxla8OpcmRlesOpcyBoaWLDoXZhbCB0w6lydCB2aXNzemE6ICd7MH0nLiB7MX1cIixcbiAgICB1cmxHZXRDaG9pY2VzRXJyb3I6IFwiQSBsZWvDqXJkZXrDqXMgw7xyZXMgYWRhdHRhbCB0w6lydCB2aXNzemEsIHZhZ3kgYSAncGF0aCcgcGFyYW3DqXRlciBoZWx5dGVsZW4uXCIsXG4gICAgZXhjZWVkTWF4U2l6ZTogXCJBIG3DqXJldCBuZW0gbGVoZXQgbmFneW9iYiwgbWludCB7MH0uXCIsXG4gICAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIkFkamEgbWVnIGF6IGVnecOpYiDDqXJ0w6lrZXQhXCIsXG4gICAgdXBsb2FkaW5nRmlsZTogXCJGZWx0w7ZsdMOpcyBmb2x5YW1hdGJhbi4gVsOhcmpvbiBww6FyIG3DoXNvZHBlcmNldCwgbWFqZCBwcsOzYsOhbGphIMO6anJhLlwiLFxuICAgIGxvYWRpbmdGaWxlOiBcIkJldMO2bHTDqXMuLi5cIixcbiAgICBjaG9vc2VGaWxlOiBcIkbDoWpsb2sga2l2w6FsYXN6dMOhc2EgLi4uXCIsXG4gICAgbm9GaWxlQ2hvc2VuOiBcIk5pbmNzIGtpdsOhbGFzenR2YSBmw6FqbFwiLFxuICAgIGZpbGVEcmFnQXJlYVBsYWNlaG9sZGVyOiBcIkRvYmpvbiBpZGUgZWd5IGbDoWpsdCwgdmFneSBrYXR0aW50c29uIGF6IGFsw6FiYmkgZ29tYnJhIGEgZsOhamwgYmV0w7ZsdMOpc8OpaGV6LlwiLFxuICAgIGNvbmZpcm1EZWxldGU6IFwiVMO2cmxpIGV6dCBhIHJla29yZG90P1wiLFxuICAgIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwiQXogw6lydMOpa25layBlZ3llZGluZWsga2VsbCBsZW5uaWUuXCIsXG4gICAgYWRkQ29sdW1uOiBcIk9zemxvcCBob3p6w6FhZMOhc2FcIixcbiAgICBhZGRSb3c6IFwiU29yIGhvenrDoWFkw6FzYVwiLFxuICAgIHJlbW92ZVJvdzogXCJFbHTDoXZvbMOtdMOhc1wiLFxuICAgIGVtcHR5Um93c1RleHQ6IFwiTmluY3NlbmVrIHNvcm9rLlwiLFxuICAgIGFkZFBhbmVsOiBcIsOaaiBob3p6w6FhZMOhc2FcIixcbiAgICByZW1vdmVQYW5lbDogXCJFbHTDoXZvbMOtdMOhc1wiLFxuICAgIGNob2ljZXNfSXRlbTogXCJlbGVtXCIsXG4gICAgbWF0cml4X2NvbHVtbjogXCJPc3psb3BcIixcbiAgICBtYXRyaXhfcm93OiBcIlNvclwiLFxuICAgIG11bHRpcGxldGV4dF9pdGVtbmFtZTogXCJTTVNcIixcbiAgICBzYXZpbmdEYXRhOiBcIkVyZWRtw6lueSBtZW50w6lzZSBhIHN6ZXJ2ZXJyZS4uLlwiLFxuICAgIHNhdmluZ0RhdGFFcnJvcjogXCJFZ3kgaGliYSBmb2x5dMOhbiBuZW0gdHVkdHVrIGVsbWVudGVuaSBheiBlcmVkbcOpbnl0LlwiLFxuICAgIHNhdmluZ0RhdGFTdWNjZXNzOiBcIkVyZWRtw6lueSBzaWtlcmVzZW4gbWVudHZlIVwiLFxuICAgIHNhdmVBZ2FpbkJ1dHRvbjogXCJQcsOzYsOhbGphIMO6anJhXCIsXG4gICAgdGltZXJNaW46IFwibWluXCIsXG4gICAgdGltZXJTZWM6IFwic2VjXCIsXG4gICAgdGltZXJTcGVudEFsbDogXCLDlm4gezB9IMO2c3N6ZWdldCBrw7ZsdMO2dHQgZXplbiBheiBvbGRhbG9uLCDDqXMgw7Zzc3plc2VuIHsxfS5cIixcbiAgICB0aW1lclNwZW50UGFnZTogXCJ7MH0gw7Zzc3plZ2V0IGvDtmx0w7Z0dCBlemVuIGF6IG9sZGFsb24uXCIsXG4gICAgdGltZXJTcGVudFN1cnZleTogXCLDlnNzemVzZW4gezB9IGvDtmx0w7Z0dC5cIixcbiAgICB0aW1lckxpbWl0QWxsOiBcIsOWbiB7MH0gLyB7MX0gw7Zzc3plZ2V0IGvDtmx0w7Z0dCBlemVuIGF6IG9sZGFsb24sIMOpcyDDtnNzemVzZW4gezJ9IC8gezN9LlwiLFxuICAgIHRpbWVyTGltaXRQYWdlOiBcIsOWbiB7MH0gLyB7MX0gw7Zzc3plZ2V0IGvDtmx0w7Z0dCBlemVuIGF6IG9sZGFsb24uXCIsXG4gICAgdGltZXJMaW1pdFN1cnZleTogXCLDlnNzemVzZW4gezB9IC8gezF9IMO2c3N6ZWdldCBrw7ZsdMO2dHQgZWwuXCIsXG4gICAgY2xlYXJDYXB0aW9uOiBcIkVnecOpcnRlbG3FsVwiLFxuICAgIHNpZ25hdHVyZVBsYWNlSG9sZGVyOiBcIsONcmphIGFsw6EgaXR0XCIsXG4gICAgY2hvb3NlRmlsZUNhcHRpb246IFwiVsOhbGFzc3ogZsOhamx0XCIsXG4gICAgdGFrZVBob3RvQ2FwdGlvbjogXCJGb3TDsyBrw6lzesOtdMOpc2VcIixcbiAgICBjYW1lcmFQbGFjZUhvbGRlcjogXCJLYXR0aW50c29uIGF6IGFsw6FiYmkgZ29tYnJhLCBob2d5IGbDqW55a8OpcGV0IGvDqXN6w610c2VuIGEgZsOpbnlrw6lwZXrFkWfDqXBwZWwuXCIsXG4gICAgZmlsZUNhbWVyYURyYWdBcmVhUGxhY2VIb2xkZXI6IFwiSMO6enpvbiDDoXQgdmFneSB2w6FsYXNzem9uIGtpIGVneSBmw6FqbHQsIGFtZWx5ZXQgZmVsIHN6ZXJldG5lIHTDtmx0ZW5pIHZhZ3kgZsOpbnlrw6lwZXQgc3plcmV0bmUga8Opc3rDrXRlbmkgYSBrYW1lcsOhdmFsLlwiLFxuICAgIHJlcGxhY2VGaWxlQ2FwdGlvbjogXCJGw6FqbCBjc2Vyw6lqZVwiLFxuICAgIHJlbW92ZUZpbGVDYXB0aW9uOiBcIlTDoXZvbMOtdHNhIGVsIGV6dCBhIGbDoWpsdFwiLFxuICAgIGJvb2xlYW5DaGVja2VkTGFiZWw6IFwiSWdlblwiLFxuICAgIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCJOZW1cIixcbiAgICBjb25maXJtUmVtb3ZlRmlsZTogXCJCaXp0b3NhbiBlbHTDoXZvbMOtdGphIGV6dCBhIGbDoWpsdDogezB9P1wiLFxuICAgIGNvbmZpcm1SZW1vdmVBbGxGaWxlczogXCJCaXp0b3NhbiBlbCBha2FyamEgdMOhdm9sw610YW5pIGF6IMO2c3N6ZXMgZsOhamx0P1wiLFxuICAgIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCJLw6lyZMOpcyBjw61tZVwiLFxuICAgIG1vZGFsQ2FuY2VsQnV0dG9uVGV4dDogXCLDiXJ2w6lueXRlbGVuw610XCIsXG4gICAgbW9kYWxBcHBseUJ1dHRvblRleHQ6IFwiQWxrYWxtYXpcIixcbiAgICBmaWx0ZXJTdHJpbmdQbGFjZWhvbGRlcjogXCLDjXJqYSBiZSBhIGtlcmVzw6lzaGV6Li4uXCIsXG4gICAgZW1wdHlNZXNzYWdlOiBcIk5pbmNzIG1lZ2plbGVuw610aGV0xZEgYWRhdFwiLFxuICAgIG5vRW50cmllc1RleHQ6IFwiTcOpZyBuaW5jc2VuZWsgYmVqZWd5esOpc2VrLlxcbkthdHRpbnRzb24gYXogYWzDoWJiaSBnb21icmEgZWd5IMO6aiBiZWplZ3l6w6lzIGhvenrDoWFkw6Fzw6Fob3ouXCIsXG4gICAgbm9FbnRyaWVzUmVhZG9ubHlUZXh0OiBcIk5pbmNzZW5layBiZWplZ3l6w6lzZWsuXCIsXG4gICAgbW9yZTogXCJUw7ZiYlwiLFxuICAgIHRhZ2JveERvbmVCdXR0b25DYXB0aW9uOiBcIk9Lw4lcIixcbiAgICBzZWxlY3RUb1JhbmtFbXB0eVJhbmtlZEFyZWFUZXh0OiBcIk1pbmRlbiB2w6FsYXN6dMOhc2kgbGVoZXTFkXPDqWcgcmFuZ3Nvcm9sdmEgdmFuXCIsXG4gICAgc2VsZWN0VG9SYW5rRW1wdHlVbnJhbmtlZEFyZWFUZXh0OiBcIkjDunp6YSBpZGUgYSB2w6FsYXN6dMOhc2kgbGVoZXTFkXPDqWdla2V0IGEgcmFuZ3Nvcm9sw6FzaG96XCJcbn07XG5zdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3VydmV5TG9jYWxpemF0aW9uXCJdLmxvY2FsZXNbXCJodVwiXSA9IGh1bmdhcmlhblN1cnZleVN0cmluZ3M7XG5zdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3VydmV5TG9jYWxpemF0aW9uXCJdLmxvY2FsZU5hbWVzW1wiaHVcIl0gPSBcIm1hZ3lhclwiO1xuLy8gVGhlIGZvbGxvd2luZyBzdHJpbmdzIGhhdmUgYmVlbiB0cmFuc2xhdGVkIGJ5IGEgbWFjaGluZSB0cmFuc2xhdGlvbiBzZXJ2aWNlXG4vLyBSZW1vdmUgdGhvc2Ugc3RyaW5ncyB0aGF0IHlvdSBoYXZlIGNvcnJlY3RlZCBtYW51YWxseVxuLy8gaW5kZXhUZXh0OiBcInswfSBvZiB7MX1cIiA9PiBcInswfSB7MX0ga8O2esO8bFwiXG4vLyBwYW5lbER5bmFtaWNUYWJUZXh0Rm9ybWF0OiBcIlBhbmVsIHtwYW5lbEluZGV4fVwiID0+IFwiUGFuZWwge3BhbmVsSW5kZXh9XCJcbi8vIHJhdGluZ09wdGlvbnNDYXB0aW9uOiBcIlNlbGVjdC4uLlwiID0+IFwiS2l2w6FsYXN6dC4uLlwiXG4vLyBtaW5FcnJvcjogXCJUaGUgdmFsdWUgc2hvdWxkIG5vdCBiZSBsZXNzIHRoYW4gezB9XCIgPT4gXCJBeiDDqXJ0w6lrIG5lbSBsZWhldCBraXNlYmIsIG1pbnQgezB9XCJcbi8vIG1heEVycm9yOiBcIlRoZSB2YWx1ZSBzaG91bGQgbm90IGJlIGdyZWF0ZXIgdGhhbiB7MH1cIiA9PiBcIkF6IMOpcnTDqWsgbmVtIGxlaGV0IG5hZ3lvYmIsIG1pbnQgezB9XCJcbi8vIGVtcHR5Um93c1RleHQ6IFwiVGhlcmUgYXJlIG5vIHJvd3MuXCIgPT4gXCJOaW5jc2VuZWsgc29yb2suXCJcbi8vIG11bHRpcGxldGV4dF9pdGVtbmFtZTogXCJ0ZXh0XCIgPT4gXCJTTVNcIlxuLy8gc2lnbmF0dXJlUGxhY2VIb2xkZXI6IFwiU2lnbiBoZXJlXCIgPT4gXCLDjXJqYSBhbMOhIGl0dFwiXG4vLyBtb2RhbENhbmNlbEJ1dHRvblRleHQ6IFwiQ2FuY2VsXCIgPT4gXCLDiXJ2w6lueXRlbGVuw610XCJcbi8vIG1vZGFsQXBwbHlCdXR0b25UZXh0OiBcIkFwcGx5XCIgPT4gXCJBbGthbG1helwiXG4vLyBmaWx0ZXJTdHJpbmdQbGFjZWhvbGRlcjogXCJUeXBlIHRvIHNlYXJjaC4uLlwiID0+IFwiw41yamEgYmUgYSBrZXJlc8Opc2hlei4uLlwiXG4vLyBlbXB0eU1lc3NhZ2U6IFwiTm8gZGF0YSB0byBkaXNwbGF5XCIgPT4gXCJOaW5jcyBtZWdqZWxlbsOtdGhldMWRIGFkYXRcIlxuLy8gbm9FbnRyaWVzVGV4dDogXCJUaGVyZSBhcmUgbm8gZW50cmllcyB5ZXQuXFxuQ2xpY2sgdGhlIGJ1dHRvbiBiZWxvdyB0byBhZGQgYSBuZXcgZW50cnkuXCIgPT4gXCJNw6lnIG5pbmNzZW5layBiZWplZ3l6w6lzZWsuXFxuS2F0dGludHNvbiBheiBhbMOhYmJpIGdvbWJyYSBlZ3kgw7pqIGJlamVneXrDqXMgaG96esOhYWTDoXPDoWhvei5cIlxuLy8gbm9FbnRyaWVzUmVhZG9ubHlUZXh0OiBcIlRoZXJlIGFyZSBubyBlbnRyaWVzLlwiID0+IFwiTmluY3NlbmVrIGJlamVneXrDqXNlay5cIlxuLy8gbW9yZTogXCJNb3JlXCIgPT4gXCJUw7ZiYlwiXG4vLyB0YWdib3hEb25lQnV0dG9uQ2FwdGlvbjogXCJPS1wiID0+IFwiT0vDiVwiXG4vLyBzZWxlY3RUb1JhbmtFbXB0eVJhbmtlZEFyZWFUZXh0OiBcIkFsbCBjaG9pY2VzIGFyZSByYW5rZWRcIiA9PiBcIk1pbmRlbiB2w6FsYXN6dMOhc2kgbGVoZXTFkXPDqWcgcmFuZ3Nvcm9sdmEgdmFuXCJcbi8vIHNlbGVjdFRvUmFua0VtcHR5VW5yYW5rZWRBcmVhVGV4dDogXCJEcmFnIGFuZCBkcm9wIGNob2ljZXMgaGVyZSB0byByYW5rIHRoZW1cIiA9PiBcIkjDunp6YSBpZGUgYSB2w6FsYXN6dMOhc2kgbGVoZXTFkXPDqWdla2V0IGEgcmFuZ3Nvcm9sw6FzaG96XCIvLyB0YWtlUGhvdG9DYXB0aW9uOiBcIlRha2UgUGhvdG9cIiA9PiBcIkZvdMOzIGvDqXN6w610w6lzZVwiXG4vLyBjYW1lcmFQbGFjZUhvbGRlcjogXCJDbGljayB0aGUgYnV0dG9uIGJlbG93IHRvIHRha2UgYSBwaG90byB1c2luZyB0aGUgY2FtZXJhLlwiID0+IFwiS2F0dGludHNvbiBheiBhbMOhYmJpIGdvbWJyYSwgaG9neSBmw6lueWvDqXBldCBrw6lzesOtdHNlbiBhIGbDqW55a8OpcGV6xZFnw6lwcGVsLlwiXG4vLyBmaWxlQ2FtZXJhRHJhZ0FyZWFQbGFjZUhvbGRlcjogXCJEcmFnIGFuZCBkcm9wIG9yIHNlbGVjdCBhIGZpbGUgdG8gdXBsb2FkIG9yIHRha2UgYSBwaG90byB1c2luZyB0aGUgY2FtZXJhLlwiID0+IFwiSMO6enpvbiDDoXQgdmFneSB2w6FsYXNzem9uIGtpIGVneSBmw6FqbHQsIGFtZWx5ZXQgZmVsIHN6ZXJldG5lIHTDtmx0ZW5pIHZhZ3kgZsOpbnlrw6lwZXQgc3plcmV0bmUga8Opc3rDrXRlbmkgYSBrYW1lcsOhdmFsLlwiXG4vLyByZXBsYWNlRmlsZUNhcHRpb246IFwiUmVwbGFjZSBmaWxlXCIgPT4gXCJGw6FqbCBjc2Vyw6lqZVwiXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvbG9jYWxpemF0aW9uL2ljZWxhbmRpYy50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL2xvY2FsaXphdGlvbi9pY2VsYW5kaWMudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBpY2VsYW5kaWNTdXJ2ZXlTdHJpbmdzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImljZWxhbmRpY1N1cnZleVN0cmluZ3NcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBpY2VsYW5kaWNTdXJ2ZXlTdHJpbmdzOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBzdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgc3VydmV5LWNvcmUgKi8gXCIuL3NyYy9lbnRyaWVzL2NvcmUudHNcIik7XG5cbnZhciBpY2VsYW5kaWNTdXJ2ZXlTdHJpbmdzID0ge1xuICAgIHBhZ2VQcmV2VGV4dDogXCJUaWxiYWthXCIsXG4gICAgcGFnZU5leHRUZXh0OiBcIsOBZnJhbVwiLFxuICAgIGNvbXBsZXRlVGV4dDogXCJMb2tpw7BcIixcbiAgICBwcmV2aWV3VGV4dDogXCJGb3Jza2/DsGFcIixcbiAgICBlZGl0VGV4dDogXCJCcmV5dGFcIixcbiAgICBzdGFydFN1cnZleVRleHQ6IFwiQnlyamHDsHVcIixcbiAgICBvdGhlckl0ZW1UZXh0OiBcIkhpbm4gKHNrw71yaW5nKVwiLFxuICAgIG5vbmVJdGVtVGV4dDogXCJFbmdpbm5cIixcbiAgICBzZWxlY3RBbGxJdGVtVGV4dDogXCJWZWxqYSBhbGx0XCIsXG4gICAgcHJvZ3Jlc3NUZXh0OiBcIlPDrcOwYSB7MH0gb2YgezF9XCIsXG4gICAgaW5kZXhUZXh0OiBcInswfSBhZiB7MX1cIixcbiAgICBwYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ6IFwiVGFrYSB1cHAgezB9IGFmIHsxfVwiLFxuICAgIHBhbmVsRHluYW1pY1RhYlRleHRGb3JtYXQ6IFwiUGFsbGJvcsOwIHtwYW5lbEluZGV4fVwiLFxuICAgIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCJTdmFyYcOwIHswfSAvIHsxfSBzcHVybmluZ3VtXCIsXG4gICAgZW1wdHlTdXJ2ZXk6IFwiw55hw7AgZXIgZW5naW5uIHPDrcOwYSBlw7BhIHNwdXJuaW5nYXIgw60gw75lc3Nhcmkga8O2bm51bi5cIixcbiAgICBjb21wbGV0aW5nU3VydmV5OiBcIlRha2sgZnlyaXIgYcOwIGZ5bGxqYSDDunQgw75lc3NhIGvDtm5udW4hXCIsXG4gICAgY29tcGxldGluZ1N1cnZleUJlZm9yZTogXCJTa3LDoXIgb2trYXIgc8O9bmEgYcOwIMO+w7ogaGVmdXIgw75lZ2FyIGxva2nDsCDDvmVzc2FyaSBrw7ZubnVuLlwiLFxuICAgIGxvYWRpbmdTdXJ2ZXk6IFwiS8O2bm51bmluIGVyIGHDsCBobGHDsGEuLi5cIixcbiAgICBwbGFjZWhvbGRlcjogXCJWZWxkdS4uLlwiLFxuICAgIHJhdGluZ09wdGlvbnNDYXB0aW9uOiBcIlZlbGphLi4uXCIsXG4gICAgdmFsdWU6IFwiZ2lsZGlcIixcbiAgICByZXF1aXJlZEVycm9yOiBcIlZpbnNhbWxlZ2FzdCBzdmFyacOwIHNwdXJuaW5ndW5uaS5cIixcbiAgICByZXF1aXJlZEVycm9ySW5QYW5lbDogXCJWaW5zYW1sZWdhc3Qgc3ZhcmHDsHUgYcOwIG1pbm5zdGEga29zdGkgZWlubmkgc3B1cm5pbmd1LlwiLFxuICAgIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwiVmluc2FtbGVnYXN0IHN2YXJpw7Agc3B1cm5pbmd1bSDDrSDDtmxsdW0gcsO2w7B1bS5cIixcbiAgICBudW1lcmljRXJyb3I6IFwiw55ldHRhIGdpbGRpIHZlcsOwdXIgYcOwIHZlcmEgdGFsYS5cIixcbiAgICBtaW5FcnJvcjogXCJHaWxkacOwIG3DoSBla2tpIHZlcmEgbMOmZ3JhIGVuIHswfVwiLFxuICAgIG1heEVycm9yOiBcIkdpbGRpw7AgbcOhIGVra2kgdmVyYSBow6ZycmEgZW4gezB9XCIsXG4gICAgdGV4dE1pbkxlbmd0aDogXCLDnmHDsCDDpnR0aSBhw7AgdmVyYSBtaW5uc3QgezB9IHTDoWtuLlwiLFxuICAgIHRleHRNYXhMZW5ndGg6IFwiw55hw7Agw6Z0dGkgYcOwIHZlcmEgbWVzdCB7MH0gdMOha24uXCIsXG4gICAgdGV4dE1pbk1heExlbmd0aDogXCLDnmHDsCDDpnR0aSBhw7AgdmVyYSBmbGVpcmkgZW4gezB9IG9nIGbDpnJyaSBlbiB7MX0gdMOha24uXCIsXG4gICAgbWluUm93Q291bnRFcnJvcjogXCJWaW5zYW1sZWdhc3QgZnlsbGnDsCDDunIgYcOwIG1pbm5zdGEga29zdGkgezB9IHJhw7Bpci5cIixcbiAgICBtaW5TZWxlY3RFcnJvcjogXCJWaW5zYW1sZWdhc3QgdmVsamnDsCBhw7AgbWlubnN0YSBrb3N0aSB7MH0gbcO2Z3VsZWlrYS5cIixcbiAgICBtYXhTZWxlY3RFcnJvcjogXCJWaW5zYW1sZWdhc3QgdmVsamnDsCBla2tpIGZsZWlyaSBlbiB7MH0gbcO2Z3VsZWlrYS5cIixcbiAgICBudW1lcmljTWluTWF4OiBcIid7MH0nIMOmdHRpIGHDsCB2ZXJhIG1laXJhIGVuIGXDsGEgamFmbnQgb2cgezF9IG1pbm5hIGVuIGXDsGEgamFmbnQgb2cgezJ9XCIsXG4gICAgbnVtZXJpY01pbjogXCJ7MH0nIMOmdHRpIGHDsCB2ZXJhIG1laXJhIGVuIGXDsGEgamFmbnQgb2cgezF9XCIsXG4gICAgbnVtZXJpY01heDogXCInezB9JyDDpnR0aSBhw7AgdmVyYSBtaW5uYSBlbiBlw7BhIGphZm50IG9nIHsxfVwiLFxuICAgIGludmFsaWRFbWFpbDogXCJWaW5zYW1sZWdhc3Qgc2zDoWnDsCBpbm4gZ2lsdCBuZXRmYW5nLlwiLFxuICAgIGludmFsaWRFeHByZXNzaW9uOiBcIlRqw6FuaW5naW46IHswfSDDpnR0aSBhw7Agc2tpbGEgJ3NhdHQnLlwiLFxuICAgIHVybFJlcXVlc3RFcnJvcjogXCJCZWnDsG5pbm4gc2tpbGHDsGkgZWZ0aXJmYXJhbmFkaSB2aWxsdSAnezB9Jy4gezF9XCIsXG4gICAgdXJsR2V0Q2hvaWNlc0Vycm9yOiBcIkJlacOwbmlubmcgc2tpbGHDsGkgZW5ndW0gZ8O2Z251bSBlw7BhIHNsw7PDsGlubiB2YXIgcsO2bmdcIixcbiAgICBleGNlZWRNYXhTaXplOiBcIlNrcsOhaW5uIHNrYWwgZWtraSB2ZXJhIHN0w6ZycmkgZW4gezB9LlwiLFxuICAgIG90aGVyUmVxdWlyZWRFcnJvcjogXCJWaW5hbWxlZ2FzdCBmeWxsacOwIMO6dCBoaXR0IGdpbGRpw7AuXCIsXG4gICAgdXBsb2FkaW5nRmlsZTogXCJTa3LDoWlubiDDvsOtbiB2YXIgc2VuZC4gVmluc2FtbGVnYXN0IGLDrcOwacOwIMOtIG5va2tyYXIgc2Vrw7puZHVyIG9nIHJleW5pw7AgYWZ0dXIuXCIsXG4gICAgbG9hZGluZ0ZpbGU6IFwiSGxlw7B1ciAuLi5cIixcbiAgICBjaG9vc2VGaWxlOiBcIlZlbGR1IHNrcsOhciAuLi5cIixcbiAgICBub0ZpbGVDaG9zZW46IFwiRW5naW4gc2tyw6EgdmFsaW5cIixcbiAgICBmaWxlRHJhZ0FyZWFQbGFjZWhvbGRlcjogXCJEcmFnw7B1IG9nIHNsZXBwdHUgc2tyw6EgaMOpciBlw7BhIHNtZWxsdHUgw6EgaG5hcHBpbm4gaMOpciBhw7AgbmXDsGFuIG9nIHZlbGR1IHNrcsOhIHRpbCBhw7AgaGxhw7BhIHVwcC5cIixcbiAgICBjb25maXJtRGVsZXRlOiBcIlZpbHR1IGV5w7BhIHNrcsOhbm5pP1wiLFxuICAgIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwiw55ldHRhIGdpbGRpIMOmdHRpIGHDsCB2ZXJhIGVpbnN0YWt0LlwiLFxuICAgIGFkZENvbHVtbjogXCJCw6Z0YSB2acOwIGTDoWxraVwiLFxuICAgIGFkZFJvdzogXCJCw6Z0YSB2acOwIHLDtsOwXCIsXG4gICAgcmVtb3ZlUm93OiBcIkZqYXJsw6ZnamFcIixcbiAgICBlbXB0eVJvd3NUZXh0OiBcIsOeYcOwIGVydSBlbmdhciByYcOwaXIuXCIsXG4gICAgYWRkUGFuZWw6IFwiQsOmdGEgdmnDsCBuw71qdVwiLFxuICAgIHJlbW92ZVBhbmVsOiBcIkZqYXJsw6Znw7B1XCIsXG4gICAgY2hvaWNlc19JdGVtOiBcImhsdXR1clwiLFxuICAgIG1hdHJpeF9jb2x1bW46IFwiRMOhbGt1clwiLFxuICAgIG1hdHJpeF9yb3c6IFwiUsO2w7BcIixcbiAgICBtdWx0aXBsZXRleHRfaXRlbW5hbWU6IFwiVGV4dGlcIixcbiAgICBzYXZpbmdEYXRhOiBcIk5pw7B1cnN0w7bDsHVybmFyIGVydSBhw7Agc3BhcmEgw6EgbmV0w75qw7NuaW51bSAuLi4gXCIsXG4gICAgc2F2aW5nRGF0YUVycm9yOiBcIlZpbGxhIGtvbSB1cHAgb2cgdmnDsCBnw6F0dW0gZWtraSB2aXN0YcOwIG5pw7B1cnN0w7bDsHVybmFyLlwiLFxuICAgIHNhdmluZ0RhdGFTdWNjZXNzOiBcIsOBcmFuZ3VyaW5uIHZhciB2aXN0YcOwdXIgbWXDsCBnw7PDsHVtIMOhcmFuZ3JpIVwiLFxuICAgIHNhdmVBZ2FpbkJ1dHRvbjogXCJSZXluZHUgYWZ0dXJcIixcbiAgICB0aW1lck1pbjogXCJtw61uXCIsXG4gICAgdGltZXJTZWM6IFwic2VrXCIsXG4gICAgdGltZXJTcGVudEFsbDogXCLDnsO6IGhlZnVyIGV5dHQgezB9IMOhIMO+ZXNzYXJpIHPDrcOwdSBvZyB7MX0gc2FtdGFscy5cIixcbiAgICB0aW1lclNwZW50UGFnZTogXCLDnsO6IGhlZnVyIGV5dHQgezB9IMOhIMO+ZXNzYXJpIHPDrcOwdS5cIixcbiAgICB0aW1lclNwZW50U3VydmV5OiBcIsOew7ogaGVmdXIgZXl0dCB7MH0gc2FtdGFscy5cIixcbiAgICB0aW1lckxpbWl0QWxsOiBcIsOew7ogaGVmdXIgZXl0dCB7MH0gYWYgezF9IMOhIMO+ZXNzYXJpIHPDrcOwdSBvZyB7Mn0gYWYgezN9IHNhbXRhbHMuXCIsXG4gICAgdGltZXJMaW1pdFBhZ2U6IFwiw57DuiBoZWZ1ciBleXR0IHswfSBhZiB7MX0gw6Egw75lc3Nhcmkgc8Otw7B1LlwiLFxuICAgIHRpbWVyTGltaXRTdXJ2ZXk6IFwiw57DuiBoZWZ1ciBleXR0IHswfSBhZiB7MX0gc2FtdGFscy5cIixcbiAgICBjbGVhckNhcHRpb246IFwiSHJlaW5zYVwiLFxuICAgIHNpZ25hdHVyZVBsYWNlSG9sZGVyOiBcIkt2aXR0YcSRdSBow6lyXCIsXG4gICAgY2hvb3NlRmlsZUNhcHRpb246IFwiVmVsZHUgc2tyw6FcIixcbiAgICB0YWtlUGhvdG9DYXB0aW9uOiBcIlRha2EgbXluZFwiLFxuICAgIGNhbWVyYVBsYWNlSG9sZGVyOiBcIlNtZWxsdHUgw6EgaG5hcHBpbm4gaMOpciBhw7AgbmXDsGFuIHRpbCBhw7AgdGFrYSBteW5kIG1lw7AgbXluZGF2w6lsaW5uaS5cIixcbiAgICBmaWxlQ2FtZXJhRHJhZ0FyZWFQbGFjZUhvbGRlcjogXCJEcmFnw7B1IG9nIHNsZXBwdHUgZcOwYSB2ZWxkdSBza3LDoSB0aWwgYcOwIGhsYcOwYSB1cHAgZcOwYSB0YWthIG15bmQgbWXDsCBteW5kYXbDqWxpbm5pLlwiLFxuICAgIHJlcGxhY2VGaWxlQ2FwdGlvbjogXCJTa2lwdGEgw7p0IHNrcsOhXCIsXG4gICAgcmVtb3ZlRmlsZUNhcHRpb246IFwiRmphcmzDpmfDsHUgw75lc3NhIHNrcsOhXCIsXG4gICAgYm9vbGVhbkNoZWNrZWRMYWJlbDogXCJKw6FcIixcbiAgICBib29sZWFuVW5jaGVja2VkTGFiZWw6IFwiTmVpXCIsXG4gICAgY29uZmlybVJlbW92ZUZpbGU6IFwiRXJ0dSB2aXNzIHVtIGHDsCDDvsO6IHZpbGppciBmamFybMOmZ2phIMO+ZXNzYSBza3LDoTogezB9P1wiLFxuICAgIGNvbmZpcm1SZW1vdmVBbGxGaWxlczogXCJFcnR1IHZpc3MgdW0gYcOwIMO+w7ogdmlsamlyIGZqYXJsw6ZnamEgYWxsYXIgc2tyw6FyP1wiLFxuICAgIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCJTcHVybmluZ2FydGl0aWxsXCIsXG4gICAgbW9kYWxDYW5jZWxCdXR0b25UZXh0OiBcIkFmdHVya2FsbGFcIixcbiAgICBtb2RhbEFwcGx5QnV0dG9uVGV4dDogXCJOb3RhXCIsXG4gICAgZmlsdGVyU3RyaW5nUGxhY2Vob2xkZXI6IFwiU2zDocOwdSBpbm4gdGlsIGHDsCBsZWl0YS4uLlwiLFxuICAgIGVtcHR5TWVzc2FnZTogXCJFbmdpbiBnw7ZnbiB0aWwgYcOwIGJpcnRhXCIsXG4gICAgbm9FbnRyaWVzVGV4dDogXCLDnmHDsCBlcnUgZW5nYXIgZsOmcnNsdXIgZW5uw77DoS5cXG5TbWVsbHR1IMOhIGhuYXBwaW5uIGjDqXIgYcOwIG5lw7BhbiB0aWwgYcOwIGLDpnRhIHZpw7AgbsO9cnJpIGbDpnJzbHUuXCIsXG4gICAgbm9FbnRyaWVzUmVhZG9ubHlUZXh0OiBcIsOeYcOwIGVydSBlbmdhciBmw6Zyc2x1ci5cIixcbiAgICBtb3JlOiBcIkZsZWlyaVwiLFxuICAgIHRhZ2JveERvbmVCdXR0b25DYXB0aW9uOiBcIsOTS0VJXCIsXG4gICAgc2VsZWN0VG9SYW5rRW1wdHlSYW5rZWRBcmVhVGV4dDogXCLDlmxsdW0gdmFsa29zdHVtIGVyIHJhw7Bhw7BcIixcbiAgICBzZWxlY3RUb1JhbmtFbXB0eVVucmFua2VkQXJlYVRleHQ6IFwiRHJhZ8OwdSBvZyBzbGVwcHR1IHZhbGtvc3R1bSBow6lyIHRpbCBhw7AgcmHDsGEgw75laW1cIlxufTtcbnN1cnZleV9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdXJ2ZXlMb2NhbGl6YXRpb25cIl0ubG9jYWxlc1tcImlzXCJdID0gaWNlbGFuZGljU3VydmV5U3RyaW5ncztcbnN1cnZleV9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdXJ2ZXlMb2NhbGl6YXRpb25cIl0ubG9jYWxlTmFtZXNbXCJpc1wiXSA9IFwiw61zbGVuc2thXCI7XG4vLyBUaGUgZm9sbG93aW5nIHN0cmluZ3MgaGF2ZSBiZWVuIHRyYW5zbGF0ZWQgYnkgYSBtYWNoaW5lIHRyYW5zbGF0aW9uIHNlcnZpY2Vcbi8vIFJlbW92ZSB0aG9zZSBzdHJpbmdzIHRoYXQgeW91IGhhdmUgY29ycmVjdGVkIG1hbnVhbGx5XG4vLyBpbmRleFRleHQ6IFwiezB9IG9mIHsxfVwiID0+IFwiezB9IGFmIHsxfVwiXG4vLyBwYW5lbER5bmFtaWNUYWJUZXh0Rm9ybWF0OiBcIlBhbmVsIHtwYW5lbEluZGV4fVwiID0+IFwiUGFsbGJvcsOwIHtwYW5lbEluZGV4fVwiXG4vLyByYXRpbmdPcHRpb25zQ2FwdGlvbjogXCJTZWxlY3QuLi5cIiA9PiBcIlZlbGphLi4uXCJcbi8vIG1pbkVycm9yOiBcIlRoZSB2YWx1ZSBzaG91bGQgbm90IGJlIGxlc3MgdGhhbiB7MH1cIiA9PiBcIkdpbGRpw7AgbcOhIGVra2kgdmVyYSBsw6ZncmEgZW4gezB9XCJcbi8vIG1heEVycm9yOiBcIlRoZSB2YWx1ZSBzaG91bGQgbm90IGJlIGdyZWF0ZXIgdGhhbiB7MH1cIiA9PiBcIkdpbGRpw7AgbcOhIGVra2kgdmVyYSBow6ZycmEgZW4gezB9XCJcbi8vIGZpbGVEcmFnQXJlYVBsYWNlaG9sZGVyOiBcIkRyYWcgYW5kIGRyb3AgYSBmaWxlIGhlcmUgb3IgY2xpY2sgdGhlIGJ1dHRvbiBiZWxvdyBhbmQgY2hvb3NlIGEgZmlsZSB0byB1cGxvYWQuXCIgPT4gXCJEcmFnw7B1IG9nIHNsZXBwdHUgc2tyw6EgaMOpciBlw7BhIHNtZWxsdHUgw6EgaG5hcHBpbm4gaMOpciBhw7AgbmXDsGFuIG9nIHZlbGR1IHNrcsOhIHRpbCBhw7AgaGxhw7BhIHVwcC5cIlxuLy8gZW1wdHlSb3dzVGV4dDogXCJUaGVyZSBhcmUgbm8gcm93cy5cIiA9PiBcIsOeYcOwIGVydSBlbmdhciByYcOwaXIuXCJcbi8vIG11bHRpcGxldGV4dF9pdGVtbmFtZTogXCJ0ZXh0XCIgPT4gXCJUZXh0aVwiXG4vLyBzaWduYXR1cmVQbGFjZUhvbGRlcjogXCJTaWduIGhlcmVcIiA9PiBcIkt2aXR0YcSRdSBow6lyXCJcbi8vIG1vZGFsQ2FuY2VsQnV0dG9uVGV4dDogXCJDYW5jZWxcIiA9PiBcIkFmdHVya2FsbGFcIlxuLy8gbW9kYWxBcHBseUJ1dHRvblRleHQ6IFwiQXBwbHlcIiA9PiBcIk5vdGFcIlxuLy8gZmlsdGVyU3RyaW5nUGxhY2Vob2xkZXI6IFwiVHlwZSB0byBzZWFyY2guLi5cIiA9PiBcIlNsw6HDsHUgaW5uIHRpbCBhw7AgbGVpdGEuLi5cIlxuLy8gZW1wdHlNZXNzYWdlOiBcIk5vIGRhdGEgdG8gZGlzcGxheVwiID0+IFwiRW5naW4gZ8O2Z24gdGlsIGHDsCBiaXJ0YVwiXG4vLyBub0VudHJpZXNUZXh0OiBcIlRoZXJlIGFyZSBubyBlbnRyaWVzIHlldC5cXG5DbGljayB0aGUgYnV0dG9uIGJlbG93IHRvIGFkZCBhIG5ldyBlbnRyeS5cIiA9PiBcIsOeYcOwIGVydSBlbmdhciBmw6Zyc2x1ciBlbm7DvsOhLlxcblNtZWxsdHUgw6EgaG5hcHBpbm4gaMOpciBhw7AgbmXDsGFuIHRpbCBhw7AgYsOmdGEgdmnDsCBuw71ycmkgZsOmcnNsdS5cIlxuLy8gbm9FbnRyaWVzUmVhZG9ubHlUZXh0OiBcIlRoZXJlIGFyZSBubyBlbnRyaWVzLlwiID0+IFwiw55hw7AgZXJ1IGVuZ2FyIGbDpnJzbHVyLlwiXG4vLyBtb3JlOiBcIk1vcmVcIiA9PiBcIkZsZWlyaVwiXG4vLyB0YWdib3hEb25lQnV0dG9uQ2FwdGlvbjogXCJPS1wiID0+IFwiw5NLRUlcIlxuLy8gc2VsZWN0VG9SYW5rRW1wdHlSYW5rZWRBcmVhVGV4dDogXCJBbGwgY2hvaWNlcyBhcmUgcmFua2VkXCIgPT4gXCLDlmxsdW0gdmFsa29zdHVtIGVyIHJhw7Bhw7BcIlxuLy8gc2VsZWN0VG9SYW5rRW1wdHlVbnJhbmtlZEFyZWFUZXh0OiBcIkRyYWcgYW5kIGRyb3AgY2hvaWNlcyBoZXJlIHRvIHJhbmsgdGhlbVwiID0+IFwiRHJhZ8OwdSBvZyBzbGVwcHR1IHZhbGtvc3R1bSBow6lyIHRpbCBhw7AgcmHDsGEgw75laW1cIi8vIHRha2VQaG90b0NhcHRpb246IFwiVGFrZSBQaG90b1wiID0+IFwiVGFrYSBteW5kXCJcbi8vIGNhbWVyYVBsYWNlSG9sZGVyOiBcIkNsaWNrIHRoZSBidXR0b24gYmVsb3cgdG8gdGFrZSBhIHBob3RvIHVzaW5nIHRoZSBjYW1lcmEuXCIgPT4gXCJTbWVsbHR1IMOhIGhuYXBwaW5uIGjDqXIgYcOwIG5lw7BhbiB0aWwgYcOwIHRha2EgbXluZCBtZcOwIG15bmRhdsOpbGlubmkuXCJcbi8vIGZpbGVDYW1lcmFEcmFnQXJlYVBsYWNlSG9sZGVyOiBcIkRyYWcgYW5kIGRyb3Agb3Igc2VsZWN0IGEgZmlsZSB0byB1cGxvYWQgb3IgdGFrZSBhIHBob3RvIHVzaW5nIHRoZSBjYW1lcmEuXCIgPT4gXCJEcmFnw7B1IG9nIHNsZXBwdHUgZcOwYSB2ZWxkdSBza3LDoSB0aWwgYcOwIGhsYcOwYSB1cHAgZcOwYSB0YWthIG15bmQgbWXDsCBteW5kYXbDqWxpbm5pLlwiXG4vLyByZXBsYWNlRmlsZUNhcHRpb246IFwiUmVwbGFjZSBmaWxlXCIgPT4gXCJTa2lwdGEgw7p0IHNrcsOhXCJcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9sb2NhbGl6YXRpb24vaW5kb25lc2lhbi50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9sb2NhbGl6YXRpb24vaW5kb25lc2lhbi50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBpbmRvbmVzaWFuU3RyaW5ncyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJpbmRvbmVzaWFuU3RyaW5nc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGluZG9uZXNpYW5TdHJpbmdzOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBzdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgc3VydmV5LWNvcmUgKi8gXCIuL3NyYy9lbnRyaWVzL2NvcmUudHNcIik7XG5cbnZhciBpbmRvbmVzaWFuU3RyaW5ncyA9IHtcbiAgICBwYWdlUHJldlRleHQ6IFwiU2ViZWx1bW55YVwiLFxuICAgIHBhZ2VOZXh0VGV4dDogXCJTZWxhbmp1dG55YVwiLFxuICAgIGNvbXBsZXRlVGV4dDogXCJTZWxlc2FpXCIsXG4gICAgcHJldmlld1RleHQ6IFwiUHJhdGluamF1XCIsXG4gICAgZWRpdFRleHQ6IFwiU3VudGluZ1wiLFxuICAgIHN0YXJ0U3VydmV5VGV4dDogXCJNdWxhaVwiLFxuICAgIG90aGVySXRlbVRleHQ6IFwiTGFpbm55YSAoamVsYXNrYW4pXCIsXG4gICAgbm9uZUl0ZW1UZXh0OiBcIlRpZGFrIEFkYVwiLFxuICAgIHNlbGVjdEFsbEl0ZW1UZXh0OiBcIlBpbGloIFNlbXVhXCIsXG4gICAgcHJvZ3Jlc3NUZXh0OiBcIkhhbGFtYW4gezB9IGRhcmkgezF9XCIsXG4gICAgaW5kZXhUZXh0OiBcInswfSBkYXJpIHsxfVwiLFxuICAgIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCJSZWthbSB7MH0gZGFyaSB7MX1cIixcbiAgICBwYW5lbER5bmFtaWNUYWJUZXh0Rm9ybWF0OiBcIlBhbmVsIHtwYW5lbEluZGV4fVwiLFxuICAgIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCJNZW5qYXdhYiBwZXJ0YW55YWFuIHswfSAvIHsxfVwiLFxuICAgIGVtcHR5U3VydmV5OiBcIlRpZGFrIGFkYSBoYWxhbWFuIGF0YXUgcGVydGFueWFhbiBkYWxhbSBzdXJ2ZWkuXCIsXG4gICAgY29tcGxldGluZ1N1cnZleTogXCJUZXJpbWEga2FzaWggdGVsYWggbWVueWVsZXNhaWthbiBzdXJ2ZWkhXCIsXG4gICAgY29tcGxldGluZ1N1cnZleUJlZm9yZTogXCJDYXRhdGFuIGthbWkgbWVudW5qdWtrYW4gYmFod2EgQW5kYSB0ZWxhaCBtZW55ZWxlc2Fpa2FuIHN1cnZlaSBpbmkuXCIsXG4gICAgbG9hZGluZ1N1cnZleTogXCJNZW11YXQgc3VydmVpLi4uXCIsXG4gICAgcGxhY2Vob2xkZXI6IFwiUGlsaWguLi5cIixcbiAgICByYXRpbmdPcHRpb25zQ2FwdGlvbjogXCJQaWxpaC4uLlwiLFxuICAgIHZhbHVlOiBcIm5pbGFpXCIsXG4gICAgcmVxdWlyZWRFcnJvcjogXCJTaWxhaGthbiBqYXdhYiBwZXJ0YW55YWFuIGJlcmlrdXQuXCIsXG4gICAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwiU2lsYWhrYW4gamF3YWIgc2V0aWRha255YSBzYXR1IHBldGFueWFhbi5cIixcbiAgICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIlNpbGFoa2FuIGphd2FiIHBlcnRhbnlhYW4gcGFkYSBzZW11YSBiYXJpcy5cIixcbiAgICBudW1lcmljRXJyb3I6IFwiTmlsYWkgaGFydXMgYmVydXBhIGFuZ2thLlwiLFxuICAgIG1pbkVycm9yOiBcIk5pbGFpbnlhIHRpZGFrIGJvbGVoIGt1cmFuZyBkYXJpIHswfVwiLFxuICAgIG1heEVycm9yOiBcIk5pbGFpIHRpZGFrIGJvbGVoIGxlYmloIGJlc2FyIGRhcmkgezB9XCIsXG4gICAgdGV4dE1pbkxlbmd0aDogXCJTaWxhaGthbiBtYXN1a2thbiBzZXRpZGFrbnlhIHswfSBrYXJha3Rlci5cIixcbiAgICB0ZXh0TWF4TGVuZ3RoOiBcIlNpbGFoa2FuIG1hc3Vra2FuIGt1cmFuZyB7MH0ga2FyYWt0ZXIuXCIsXG4gICAgdGV4dE1pbk1heExlbmd0aDogXCJQU2lsYWhrYW4gbWFzdWtrYW4gbGViaWggZGFyaSB7MH0gZGFuIGt1cmFuZyBkYXJpIHsxfSBrYXJha3Rlci5cIixcbiAgICBtaW5Sb3dDb3VudEVycm9yOiBcIlNpbGFoa2FuIGlzaSBzZXRpZGFrbnlhIHswfSBiYXJpcy5cIixcbiAgICBtaW5TZWxlY3RFcnJvcjogXCJTaWxhaGthbiBwaWxpaCBzZXRpZGFrbnlhIHswfSB2YXJpYW4uXCIsXG4gICAgbWF4U2VsZWN0RXJyb3I6IFwiU2lsYWhrYW4gcGlsaWggdGlkYWsgbGViaWggZGFyaSB7MH0gdmFyaWFuLlwiLFxuICAgIG51bWVyaWNNaW5NYXg6IFwiJ3swfScgaGFydXMgc2FtYSBkZW5nYW4gYXRhdSBsZWJpaCBkYXJpIHsxfSBkYW4gaGFydXMgc2FtYSBkZW5nYW4gYXRhdSBrdXJhbmcgZGFyaSB7Mn1cIixcbiAgICBudW1lcmljTWluOiBcIid7MH0nIGhhcnVzIHNhbWEgZGVuZ2FuIGF0YXUgbGViaWggZGFyaSB7MX1cIixcbiAgICBudW1lcmljTWF4OiBcIid7MH0nIGhhcnVzIHNhbWEgZGVuZ2FuIGF0YXUga3VyYW5nIGRhcmkgezF9XCIsXG4gICAgaW52YWxpZEVtYWlsOiBcIlNpbGFoa2FuIG1hc3Vra2FuIGUtbWFpbCB5YW5nIGJlbmFyLlwiLFxuICAgIGludmFsaWRFeHByZXNzaW9uOiBcIkVrc3ByZXNpOiB7MH0gaGFydXMgbWVuZ2VtYmFsaWthbiAnYmVuYXInLlwiLFxuICAgIHVybFJlcXVlc3RFcnJvcjogXCJQZXJtaW50YWFuIG1lbmdlbWJhbGlrYW4ga2VzYWxhaGFuICd7MH0nLiB7MX1cIixcbiAgICB1cmxHZXRDaG9pY2VzRXJyb3I6IFwiUGVybWludGFhbiBtZW5nZW1iYWxpa2FuIGRhdGEga29zb25nIGF0YXUgcHJvcGVydGkgJ3BhdGgnIHNhbGFoLlwiLFxuICAgIGV4Y2VlZE1heFNpemU6IFwiVWt1cmFuIGJlcmthcyB0aWRhayBib2xlaCBtZWxlYmloaSB7MH0uXCIsXG4gICAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIlNpbGFoa2FuIG1hc3Vra2FuIG5pbGFpIGxhaW5ubnlhLlwiLFxuICAgIHVwbG9hZGluZ0ZpbGU6IFwiQmVya2FzIEFuZGEgc2VkYW5nIGRpdW5nZ2FoLiBTaWxhaGthbiB0dW5nZ3UgYmViZXJhcGEgc2FhdCBhdGF1IGNvYmEgbGFnaS5cIixcbiAgICBsb2FkaW5nRmlsZTogXCJNZW11YXQuLi5cIixcbiAgICBjaG9vc2VGaWxlOiBcIlBpbGloIGJlcmthcy4uLlwiLFxuICAgIG5vRmlsZUNob3NlbjogXCJUaWRhayBhZGEgZmlsZSB5YW5nIGRpcGlsaWhcIixcbiAgICBmaWxlRHJhZ0FyZWFQbGFjZWhvbGRlcjogXCJTZXJldCBkYW4gamF0dWhrYW4gZmlsZSBkaSBzaW5pIGF0YXUga2xpayB0b21ib2wgZGkgYmF3YWggaW5pIGRhbiBwaWxpaCBmaWxlIHlhbmcgYWthbiBkaXVuZ2dhaC5cIixcbiAgICBjb25maXJtRGVsZXRlOiBcIkFwYWthaCBBbmRhIGluZ2luIG1lbmdoYXB1cyBjYXRhdGFuP1wiLFxuICAgIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwiTmlsYWkgaGFydXMgdW5pay5cIixcbiAgICBhZGRDb2x1bW46IFwiVGFtYmFoIGtvbG9tXCIsXG4gICAgYWRkUm93OiBcIlRhbWJhaCBiYXJpc1wiLFxuICAgIHJlbW92ZVJvdzogXCJIYXB1c1wiLFxuICAgIGVtcHR5Um93c1RleHQ6IFwiVGlkYWsgYWRhIGJhcmlzLlwiLFxuICAgIGFkZFBhbmVsOiBcIlRhbWJhaCBiYXJ1XCIsXG4gICAgcmVtb3ZlUGFuZWw6IFwiSGFwdXNcIixcbiAgICBjaG9pY2VzX0l0ZW06IFwiaXRlbVwiLFxuICAgIG1hdHJpeF9jb2x1bW46IFwiS29sb21cIixcbiAgICBtYXRyaXhfcm93OiBcIkJhcmlzXCIsXG4gICAgbXVsdGlwbGV0ZXh0X2l0ZW1uYW1lOiBcIlRla3NcIixcbiAgICBzYXZpbmdEYXRhOiBcIkhhc2lsIHNlZGFuZyBkaXNpbXBhbiBwYWRhIHNlcnZlci4uLlwiLFxuICAgIHNhdmluZ0RhdGFFcnJvcjogXCJLZXNhbGFoYW4gdGVyamFkaSBkYW4ga2FtaSB0aWRhayBkYXBhdCBtZW55aW1wYW4gaGFzaWwuXCIsXG4gICAgc2F2aW5nRGF0YVN1Y2Nlc3M6IFwiSGFzaWwgdGVsYWggc3Vrc2VzIGRpc2ltcGFuIVwiLFxuICAgIHNhdmVBZ2FpbkJ1dHRvbjogXCJDb2JhIGxhZ2lcIixcbiAgICB0aW1lck1pbjogXCJtZW5pdFwiLFxuICAgIHRpbWVyU2VjOiBcImRldGlrXCIsXG4gICAgdGltZXJTcGVudEFsbDogXCJBbmRhIHRlbGFoIG1lbmdoYWJpc2thbiB7MH0gcGFkYSBoYWxhbWFuIGluaSBkYW4gezF9IHNlY2FyYSBrZXNlbHVydWhhbi5cIixcbiAgICB0aW1lclNwZW50UGFnZTogXCJZQW5kYSB0ZWxhaCBtZW5naGFiaXNrYW4gezB9IHBhZGEgaGFsYW1hbiBpbmkuXCIsXG4gICAgdGltZXJTcGVudFN1cnZleTogXCJBbmRhIHRlbGFoIG1lbmdoYWJpc2thbiB7MH0gc2VjYXJhIGtlc2VsdXJ1aGFuLlwiLFxuICAgIHRpbWVyTGltaXRBbGw6IFwiQW5kYSB0ZWxhaCBtZW5naGFiaXNrYW4gezB9IGRhcmkgezF9IHBhZGEgaGFsYW1hbiBpbmkgZGFuIHsyfSBkYXJpIHszfSBzZWNhcmEga2VzZWx1cnVoYW4uXCIsXG4gICAgdGltZXJMaW1pdFBhZ2U6IFwiQW5kYSB0ZWxhaCBtZW5naGFiaXNrYW4gezB9IGRhcmkgezF9IHBhZGEgaGFsYW1hbiBpbmkuXCIsXG4gICAgdGltZXJMaW1pdFN1cnZleTogXCJBbmRhIHRlbGFoIG1lbmdoYWJpc2thbiB7MH0gZGFyaSB7MX0gc2VjYXJhIGtlc2VsdXJ1aGFuLlwiLFxuICAgIGNsZWFyQ2FwdGlvbjogXCJCZXJzaWhrYW5cIixcbiAgICBzaWduYXR1cmVQbGFjZUhvbGRlcjogXCJUYW5kYSB0YW5nYW4gZGkgc2luaVwiLFxuICAgIGNob29zZUZpbGVDYXB0aW9uOiBcIlBpbGloIEZpbGVcIixcbiAgICB0YWtlUGhvdG9DYXB0aW9uOiBcIkFtYmlsIEZvdG9cIixcbiAgICBjYW1lcmFQbGFjZUhvbGRlcjogXCJLbGlrIHRvbWJvbCBkaSBiYXdhaCBpbmkgdW50dWsgbWVuZ2FtYmlsIGZvdG8gbWVuZ2d1bmFrYW4ga2FtZXJhLlwiLFxuICAgIGZpbGVDYW1lcmFEcmFnQXJlYVBsYWNlSG9sZGVyOiBcIlNlcmV0IGRhbiBsZXBhcyBhdGF1IHBpbGloIGZpbGUgdW50dWsgZGl1bmdnYWggYXRhdSBtZW5nYW1iaWwgZm90byBtZW5nZ3VuYWthbiBrYW1lcmEuXCIsXG4gICAgcmVwbGFjZUZpbGVDYXB0aW9uOiBcIkdhbnRpIGZpbGVcIixcbiAgICByZW1vdmVGaWxlQ2FwdGlvbjogXCJIYXB1cyBiZXJrYXMgaW5pXCIsXG4gICAgYm9vbGVhbkNoZWNrZWRMYWJlbDogXCJJeWFcIixcbiAgICBib29sZWFuVW5jaGVja2VkTGFiZWw6IFwiVGlkYWtcIixcbiAgICBjb25maXJtUmVtb3ZlRmlsZTogXCJBbmRhIHlha2luIGluZ2luIG1lbmdoYXB1cyBmaWxlIGluaTogezB9P1wiLFxuICAgIGNvbmZpcm1SZW1vdmVBbGxGaWxlczogXCJBbmRhIHlha2luIGluZ2luIG1lbmdoYXB1cyBzZW11YSBmaWxlP1wiLFxuICAgIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCJKdWR1bCBwZXJ0YW55YWFuXCIsXG4gICAgbW9kYWxDYW5jZWxCdXR0b25UZXh0OiBcIk1lbWJhdGFsa2FuXCIsXG4gICAgbW9kYWxBcHBseUJ1dHRvblRleHQ6IFwiQmVybGFrdVwiLFxuICAgIGZpbHRlclN0cmluZ1BsYWNlaG9sZGVyOiBcIktldGlrIHVudHVrIG1lbmNhcmkuLi5cIixcbiAgICBlbXB0eU1lc3NhZ2U6IFwiVGlkYWsgYWRhIGRhdGEgdW50dWsgZGl0YW1waWxrYW5cIixcbiAgICBub0VudHJpZXNUZXh0OiBcIkJlbHVtIGFkYSBlbnRyaS5cXG5LbGlrIHRvbWJvbCBkaSBiYXdhaCBpbmkgdW50dWsgbWVuYW1iYWhrYW4gZW50cmkgYmFydS5cIixcbiAgICBub0VudHJpZXNSZWFkb25seVRleHQ6IFwiVGlkYWsgYWRhIGVudHJpLlwiLFxuICAgIG1vcmU6IFwiTGViaWhcIixcbiAgICB0YWdib3hEb25lQnV0dG9uQ2FwdGlvbjogXCJPS0VcIixcbiAgICBzZWxlY3RUb1JhbmtFbXB0eVJhbmtlZEFyZWFUZXh0OiBcIlNlbXVhIHBpbGloYW4gZGliZXJpIHBlcmluZ2thdFwiLFxuICAgIHNlbGVjdFRvUmFua0VtcHR5VW5yYW5rZWRBcmVhVGV4dDogXCJTZXJldCBkYW4gbGVwYXMgcGlsaWhhbiBkaSBzaW5pIHVudHVrIG1lbWJlcmkgcGVyaW5na2F0XCJcbn07XG5zdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3VydmV5TG9jYWxpemF0aW9uXCJdLmxvY2FsZXNbXCJpZFwiXSA9IGluZG9uZXNpYW5TdHJpbmdzO1xuc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN1cnZleUxvY2FsaXphdGlvblwiXS5sb2NhbGVOYW1lc1tcImlkXCJdID0gXCJiYWhhc2EgSW5kb25lc2lhXCI7XG4vLyBUaGUgZm9sbG93aW5nIHN0cmluZ3MgaGF2ZSBiZWVuIHRyYW5zbGF0ZWQgYnkgYSBtYWNoaW5lIHRyYW5zbGF0aW9uIHNlcnZpY2Vcbi8vIFJlbW92ZSB0aG9zZSBzdHJpbmdzIHRoYXQgeW91IGhhdmUgY29ycmVjdGVkIG1hbnVhbGx5XG4vLyBpbmRleFRleHQ6IFwiezB9IG9mIHsxfVwiID0+IFwiezB9IGRhcmkgezF9XCJcbi8vIHBhbmVsRHluYW1pY1RhYlRleHRGb3JtYXQ6IFwiUGFuZWwge3BhbmVsSW5kZXh9XCIgPT4gXCJQYW5lbCB7cGFuZWxJbmRleH1cIlxuLy8gcmF0aW5nT3B0aW9uc0NhcHRpb246IFwiU2VsZWN0Li4uXCIgPT4gXCJQaWxpaC4uLlwiXG4vLyBtaW5FcnJvcjogXCJUaGUgdmFsdWUgc2hvdWxkIG5vdCBiZSBsZXNzIHRoYW4gezB9XCIgPT4gXCJOaWxhaW55YSB0aWRhayBib2xlaCBrdXJhbmcgZGFyaSB7MH1cIlxuLy8gbWF4RXJyb3I6IFwiVGhlIHZhbHVlIHNob3VsZCBub3QgYmUgZ3JlYXRlciB0aGFuIHswfVwiID0+IFwiTmlsYWkgdGlkYWsgYm9sZWggbGViaWggYmVzYXIgZGFyaSB7MH1cIlxuLy8gZmlsZURyYWdBcmVhUGxhY2Vob2xkZXI6IFwiRHJhZyBhbmQgZHJvcCBhIGZpbGUgaGVyZSBvciBjbGljayB0aGUgYnV0dG9uIGJlbG93IGFuZCBjaG9vc2UgYSBmaWxlIHRvIHVwbG9hZC5cIiA9PiBcIlNlcmV0IGRhbiBqYXR1aGthbiBmaWxlIGRpIHNpbmkgYXRhdSBrbGlrIHRvbWJvbCBkaSBiYXdhaCBpbmkgZGFuIHBpbGloIGZpbGUgeWFuZyBha2FuIGRpdW5nZ2FoLlwiXG4vLyBlbXB0eVJvd3NUZXh0OiBcIlRoZXJlIGFyZSBubyByb3dzLlwiID0+IFwiVGlkYWsgYWRhIGJhcmlzLlwiXG4vLyBtdWx0aXBsZXRleHRfaXRlbW5hbWU6IFwidGV4dFwiID0+IFwiVGVrc1wiXG4vLyBzaWduYXR1cmVQbGFjZUhvbGRlcjogXCJTaWduIGhlcmVcIiA9PiBcIlRhbmRhIHRhbmdhbiBkaSBzaW5pXCJcbi8vIG1vZGFsQ2FuY2VsQnV0dG9uVGV4dDogXCJDYW5jZWxcIiA9PiBcIk1lbWJhdGFsa2FuXCJcbi8vIG1vZGFsQXBwbHlCdXR0b25UZXh0OiBcIkFwcGx5XCIgPT4gXCJCZXJsYWt1XCJcbi8vIGZpbHRlclN0cmluZ1BsYWNlaG9sZGVyOiBcIlR5cGUgdG8gc2VhcmNoLi4uXCIgPT4gXCJLZXRpayB1bnR1ayBtZW5jYXJpLi4uXCJcbi8vIGVtcHR5TWVzc2FnZTogXCJObyBkYXRhIHRvIGRpc3BsYXlcIiA9PiBcIlRpZGFrIGFkYSBkYXRhIHVudHVrIGRpdGFtcGlsa2FuXCJcbi8vIG5vRW50cmllc1RleHQ6IFwiVGhlcmUgYXJlIG5vIGVudHJpZXMgeWV0LlxcbkNsaWNrIHRoZSBidXR0b24gYmVsb3cgdG8gYWRkIGEgbmV3IGVudHJ5LlwiID0+IFwiQmVsdW0gYWRhIGVudHJpLlxcbktsaWsgdG9tYm9sIGRpIGJhd2FoIGluaSB1bnR1ayBtZW5hbWJhaGthbiBlbnRyaSBiYXJ1LlwiXG4vLyBub0VudHJpZXNSZWFkb25seVRleHQ6IFwiVGhlcmUgYXJlIG5vIGVudHJpZXMuXCIgPT4gXCJUaWRhayBhZGEgZW50cmkuXCJcbi8vIG1vcmU6IFwiTW9yZVwiID0+IFwiTGViaWhcIlxuLy8gdGFnYm94RG9uZUJ1dHRvbkNhcHRpb246IFwiT0tcIiA9PiBcIk9LRVwiXG4vLyBzZWxlY3RUb1JhbmtFbXB0eVJhbmtlZEFyZWFUZXh0OiBcIkFsbCBjaG9pY2VzIGFyZSByYW5rZWRcIiA9PiBcIlNlbXVhIHBpbGloYW4gZGliZXJpIHBlcmluZ2thdFwiXG4vLyBzZWxlY3RUb1JhbmtFbXB0eVVucmFua2VkQXJlYVRleHQ6IFwiRHJhZyBhbmQgZHJvcCBjaG9pY2VzIGhlcmUgdG8gcmFuayB0aGVtXCIgPT4gXCJTZXJldCBkYW4gbGVwYXMgcGlsaWhhbiBkaSBzaW5pIHVudHVrIG1lbWJlcmkgcGVyaW5na2F0XCIvLyB0YWtlUGhvdG9DYXB0aW9uOiBcIlRha2UgUGhvdG9cIiA9PiBcIkFtYmlsIEZvdG9cIlxuLy8gY2FtZXJhUGxhY2VIb2xkZXI6IFwiQ2xpY2sgdGhlIGJ1dHRvbiBiZWxvdyB0byB0YWtlIGEgcGhvdG8gdXNpbmcgdGhlIGNhbWVyYS5cIiA9PiBcIktsaWsgdG9tYm9sIGRpIGJhd2FoIGluaSB1bnR1ayBtZW5nYW1iaWwgZm90byBtZW5nZ3VuYWthbiBrYW1lcmEuXCJcbi8vIGZpbGVDYW1lcmFEcmFnQXJlYVBsYWNlSG9sZGVyOiBcIkRyYWcgYW5kIGRyb3Agb3Igc2VsZWN0IGEgZmlsZSB0byB1cGxvYWQgb3IgdGFrZSBhIHBob3RvIHVzaW5nIHRoZSBjYW1lcmEuXCIgPT4gXCJTZXJldCBkYW4gbGVwYXMgYXRhdSBwaWxpaCBmaWxlIHVudHVrIGRpdW5nZ2FoIGF0YXUgbWVuZ2FtYmlsIGZvdG8gbWVuZ2d1bmFrYW4ga2FtZXJhLlwiXG4vLyByZXBsYWNlRmlsZUNhcHRpb246IFwiUmVwbGFjZSBmaWxlXCIgPT4gXCJHYW50aSBmaWxlXCJcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9sb2NhbGl6YXRpb24vaXRhbGlhbi50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9sb2NhbGl6YXRpb24vaXRhbGlhbi50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBpdGFsaWFuU3VydmV5U3RyaW5ncyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJpdGFsaWFuU3VydmV5U3RyaW5nc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGl0YWxpYW5TdXJ2ZXlTdHJpbmdzOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBzdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgc3VydmV5LWNvcmUgKi8gXCIuL3NyYy9lbnRyaWVzL2NvcmUudHNcIik7XG5cbnZhciBpdGFsaWFuU3VydmV5U3RyaW5ncyA9IHtcbiAgICBwYWdlUHJldlRleHQ6IFwiUHJlY2VkZW50ZVwiLFxuICAgIHBhZ2VOZXh0VGV4dDogXCJTdWNjZXNzaXZvXCIsXG4gICAgY29tcGxldGVUZXh0OiBcIlNhbHZhXCIsXG4gICAgcHJldmlld1RleHQ6IFwiQW50ZXByaW1hXCIsXG4gICAgZWRpdFRleHQ6IFwiTW9kaWZpY2FcIixcbiAgICBzdGFydFN1cnZleVRleHQ6IFwiSW5pemlvXCIsXG4gICAgb3RoZXJJdGVtVGV4dDogXCJBbHRybyAoZGVzY3JpdmkpXCIsXG4gICAgbm9uZUl0ZW1UZXh0OiBcIk5lc3N1bm9cIixcbiAgICBzZWxlY3RBbGxJdGVtVGV4dDogXCJTZWxlemlvbmEgdHV0dGlcIixcbiAgICBwcm9ncmVzc1RleHQ6IFwiUGFnaW5hIHswfSBkaSB7MX1cIixcbiAgICBpbmRleFRleHQ6IFwiezB9IGRhIHsxfVwiLFxuICAgIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCJSZWNvcmQgZGkgezB9IGRpIHsxfVwiLFxuICAgIHBhbmVsRHluYW1pY1RhYlRleHRGb3JtYXQ6IFwiUGFubmVsbG8ge3BhbmVsSW5kZXh9XCIsXG4gICAgcXVlc3Rpb25zUHJvZ3Jlc3NUZXh0OiBcIlJpc3Bvc3RlIGEgezB9L3sxfSBkb21hbmRlXCIsXG4gICAgZW1wdHlTdXJ2ZXk6IFwiTm9uIGNpIHNvbm8gcGFnaW5lIG8gZG9tYW5kZSB2aXNpYmlsaSBuZWwgcXVlc3Rpb25hcmlvLlwiLFxuICAgIGNvbXBsZXRpbmdTdXJ2ZXk6IFwiR3JhemllIHBlciBhdmVyIGNvbXBsZXRhdG8gaWwgcXVlc3Rpb25hcmlvIVwiLFxuICAgIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6IFwiSSBub3N0cmkgcmVjb3JkcyBtb3N0cmFubyBjaGUgaGFpIGdpw6AgY29tcGxldGF0byBxdWVzdG8gcXVlc3Rpb25hcmlvLlwiLFxuICAgIGxvYWRpbmdTdXJ2ZXk6IFwiQ2FyaWNhbWVudG8gZGVsIHF1ZXN0aW9uYXJpbyBpbiBjb3Jzby4uLlwiLFxuICAgIHBsYWNlaG9sZGVyOiBcIlNjZWdsaS4uLlwiLFxuICAgIHJhdGluZ09wdGlvbnNDYXB0aW9uOiBcIlRvY2NhIHF1aSBwZXIgdmFsdXRhcmUuLi5cIixcbiAgICB2YWx1ZTogXCJ2YWxvcmVcIixcbiAgICByZXF1aXJlZEVycm9yOiBcIkNhbXBvIG9iYmxpZ2F0b3Jpb1wiLFxuICAgIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcIlBlciBGYXZvcmUsIHJpc3BvbmRpIGFkIGFsbWVubyB1bmEgZG9tYW5kYS5cIixcbiAgICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIkNvbXBsZXRhcmUgdHV0dGUgbGUgcmlnaGVcIixcbiAgICBudW1lcmljRXJyb3I6IFwiSWwgdmFsb3JlIGRldmUgZXNzZXJlIG51bWVyaWNvXCIsXG4gICAgbWluRXJyb3I6IFwiSWwgdmFsb3JlIG5vbiBkZXZlIGVzc2VyZSBpbmZlcmlvcmUgYSB7MH1cIixcbiAgICBtYXhFcnJvcjogXCJJbCB2YWxvcmUgbm9uIGRldmUgZXNzZXJlIG1hZ2dpb3JlIGRpIHswfVwiLFxuICAgIHRleHRNaW5MZW5ndGg6IFwiSW5zZXJpcmUgYWxtZW5vIHswfSBjYXJhdHRlcmlcIixcbiAgICB0ZXh0TWF4TGVuZ3RoOiBcIkx1bmdoZXp6YSBtYXNzaW1hIGNvbnNlbnRpdGEgezB9IGNhcmF0dGVyaVwiLFxuICAgIHRleHRNaW5NYXhMZW5ndGg6IFwiSW5zZXJpcmUgdW5hIHN0cmluZ2EgY29uIG1pbmltbyB7MH0gZSBtYXNzaW1vIHsxfSBjYXJhdHRlcmlcIixcbiAgICBtaW5Sb3dDb3VudEVycm9yOiBcIkNvbXBsZXRhcmUgYWxtZW5vIHswfSByaWdoZS5cIixcbiAgICBtaW5TZWxlY3RFcnJvcjogXCJTZWxlemlvbmFyZSBhbG1lbm8gezB9IHZhcmlhbnRpLlwiLFxuICAgIG1heFNlbGVjdEVycm9yOiBcIlNlbGV6aW9uYXJlIG1hc3NpbW8gezB9IHZhcmlhbnRpLlwiLFxuICAgIG51bWVyaWNNaW5NYXg6IFwiJ3swfScgZGV2ZSBlc3NlcmUgdWd1YWxlIG8gc3VwZXJpb3JlIGEgezF9IGUgdWd1YWxlIG8gaW5mZXJpb3JlIGEgezJ9XCIsXG4gICAgbnVtZXJpY01pbjogXCInezB9JyBkZXZlIGVzc2VyZSB1Z3VhbGUgbyBzdXBlcmlvcmUgYSB7MX1cIixcbiAgICBudW1lcmljTWF4OiBcIid7MH0nIGRldmUgZXNzZXJlIHVndWFsZSBvIGluZmVyaW9yZSBhIHsxfVwiLFxuICAgIGludmFsaWRFbWFpbDogXCJJbnNlcmlyZSBpbmRpcml6em8gbWFpbCB2YWxpZG9cIixcbiAgICBpbnZhbGlkRXhwcmVzc2lvbjogXCJMJ2VzcHJlc3Npb25lOiB7MH0gZG92cmViYmUgdG9ybmFyZSAndmVybycuXCIsXG4gICAgdXJsUmVxdWVzdEVycm9yOiBcIkxhIHJpY2hpZXN0YSBoYSByaXNwb3N0byBjb24gdW4gZXJyb3JlICd7MH0nLiB7MX1cIixcbiAgICB1cmxHZXRDaG9pY2VzRXJyb3I6IFwiTGEgcmljaGllc3RhIGhhIHJpc3Bvc3RvIG51bGwgb3BwdXJlIGlsIHBlcmNvcnNvIG5vbiDDqCBjb3JyZXR0b1wiLFxuICAgIGV4Y2VlZE1heFNpemU6IFwiSWwgZmlsZSBub24gcHXDsiBlY2NlZGVyZSB7MH1cIixcbiAgICBvdGhlclJlcXVpcmVkRXJyb3I6IFwiSW5zZXJpcmUgaWwgdmFsb3JlICdhbHRybydcIixcbiAgICB1cGxvYWRpbmdGaWxlOiBcIkZpbGUgaW4gY2FyaWNhbWVudG8uIEF0dGVuZGkgYWxjdW5pIHNlY29uZGkgZSByaXByb3ZhXCIsXG4gICAgbG9hZGluZ0ZpbGU6IFwiQ2FyaWNhbWVudG8uLi5cIixcbiAgICBjaG9vc2VGaWxlOiBcIlNlbGV6aW9uYXJlIGZpbGUocykuLi5cIixcbiAgICBub0ZpbGVDaG9zZW46IFwiTmVzc3VuIGZpbGUgc2VsZXppb25hdG9cIixcbiAgICBmaWxlRHJhZ0FyZWFQbGFjZWhvbGRlcjogXCJUcmFzY2luYSB1biBmaWxlIHF1aSBvIGZhaSBjbGljIHN1bCBwdWxzYW50ZSBpbiBiYXNzbyBwZXIgY2FyaWNhcmUgaWwgZmlsZS5cIixcbiAgICBjb25maXJtRGVsZXRlOiBcIlNlaSBzaWN1cm8gZGkgdm9sZXIgZWxtaW5hcmUgaWwgcmVjb3JkP1wiLFxuICAgIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwiUXVlc3RvIHZhbG9yZSBkZXZlIGVzc2VyZSB1bml2b2NvLlwiLFxuICAgIGFkZENvbHVtbjogXCJBZ2dpdW5naSBjb2xvbm5hXCIsXG4gICAgYWRkUm93OiBcIkFnZ2l1bmdpIHJpZ2FcIixcbiAgICByZW1vdmVSb3c6IFwiUmltdW92aSByaWdhXCIsXG4gICAgZW1wdHlSb3dzVGV4dDogXCJOb24gY2kgc29ubyByaWdoZS5cIixcbiAgICBhZGRQYW5lbDogXCJBZ2dpdW5naSByaWdhXCIsXG4gICAgcmVtb3ZlUGFuZWw6IFwiRWxpbWluYVwiLFxuICAgIGNob2ljZXNfSXRlbTogXCJFbGVtZW50b1wiLFxuICAgIG1hdHJpeF9jb2x1bW46IFwiQ29sb25uYVwiLFxuICAgIG1hdHJpeF9yb3c6IFwiUmlnYVwiLFxuICAgIG11bHRpcGxldGV4dF9pdGVtbmFtZTogXCJ0ZXN0b1wiLFxuICAgIHNhdmluZ0RhdGE6IFwiU2FsdmF0YWdnaW8gZGF0aSBzdWwgc2VydmVyLi4uXCIsXG4gICAgc2F2aW5nRGF0YUVycm9yOiBcIlNpIMOoIHZlcmlmaWNhdG8gdW4gZXJyb3JlIGUgbm9uIMOoIHN0YXRvIHBvc3NpYmlsZSBzYWx2YXJlIGkgcmlzdWx0YXRpLlwiLFxuICAgIHNhdmluZ0RhdGFTdWNjZXNzOiBcIkkgcmlzdWx0YXRpIHNvbm8gc3RhdGkgc2FsdmF0aSBjb24gc3VjY2Vzc28hXCIsXG4gICAgc2F2ZUFnYWluQnV0dG9uOiBcIlJpcHJvdmFcIixcbiAgICB0aW1lck1pbjogXCJtaW5cIixcbiAgICB0aW1lclNlYzogXCJzZWNcIixcbiAgICB0aW1lclNwZW50QWxsOiBcIkhhaSBpbXBpZWdhdG8gezB9IHN1IHF1ZXN0YSBwYWdpbmEgZSB7MX0gaW4gdG90YWxlLlwiLFxuICAgIHRpbWVyU3BlbnRQYWdlOiBcIkhhaSBpbXBpZWdhdG8gezB9IHN1IHF1ZXN0YSBwYWdpbmEuXCIsXG4gICAgdGltZXJTcGVudFN1cnZleTogXCJIYWkgaW1waWVnYXRvIHswfSBpbiB0b3RhbGUuXCIsXG4gICAgdGltZXJMaW1pdEFsbDogXCJIYWkgaW1waWVnYXRvIHswfSBkaSB7MX0gc3UgcXVlc3RhIHBhZ2luYSBlIHsyfSBkaSB7M30gaW4gdG90YWxlLlwiLFxuICAgIHRpbWVyTGltaXRQYWdlOiBcIkhhaSBpbXBpZWdhdG8gezB9IGRpIHsxfSBzdSBxdWVzdGEgcGFnaW5hLlwiLFxuICAgIHRpbWVyTGltaXRTdXJ2ZXk6IFwiSGFpIGltcGllZ2F0byB7MH0gZGkgezF9IGluIHRvdGFsZS5cIixcbiAgICBjbGVhckNhcHRpb246IFwiQ2FuY2VsbGFcIixcbiAgICBzaWduYXR1cmVQbGFjZUhvbGRlcjogXCJGaXJtYXJlIHF1aVwiLFxuICAgIGNob29zZUZpbGVDYXB0aW9uOiBcIlNjZWdsaWVyZSBpbCBmaWxlXCIsXG4gICAgdGFrZVBob3RvQ2FwdGlvbjogXCJTY2F0dGEgZm90b1wiLFxuICAgIGNhbWVyYVBsYWNlSG9sZGVyOiBcIkZhaSBjbGljIHN1bCBwdWxzYW50ZSBxdWkgc290dG8gcGVyIHNjYXR0YXJlIHVuYSBmb3RvIHV0aWxpenphbmRvIGxhIGZvdG9jYW1lcmEuXCIsXG4gICAgZmlsZUNhbWVyYURyYWdBcmVhUGxhY2VIb2xkZXI6IFwiVHJhc2NpbmEgZSByaWxhc2NpYSBvIHNlbGV6aW9uYSB1biBmaWxlIGRhIGNhcmljYXJlIG8gc2NhdHRhcmUgdW5hIGZvdG8gdXRpbGl6emFuZG8gbGEgZm90b2NhbWVyYS5cIixcbiAgICByZXBsYWNlRmlsZUNhcHRpb246IFwiU29zdGl0dWlzY2kgZmlsZVwiLFxuICAgIHJlbW92ZUZpbGVDYXB0aW9uOiBcIlJpbXVvdmVyZSBxdWVzdG8gZmlsZVwiLFxuICAgIGJvb2xlYW5DaGVja2VkTGFiZWw6IFwiU8OsXCIsXG4gICAgYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcIk5vXCIsXG4gICAgY29uZmlybVJlbW92ZUZpbGU6IFwiU2VpIHNpY3VybyBkaSB2b2xlciBlbG1pbmFyZSBxdWVzdG8gZmlsZTogezB9P1wiLFxuICAgIGNvbmZpcm1SZW1vdmVBbGxGaWxlczogXCJTZWkgc2ljdXJvIGRpIHZvbGVyIGVsbWluYXJlIHR1dHRpIGkgZmlsZXM/XCIsXG4gICAgcXVlc3Rpb25UaXRsZVBhdHRlcm5UZXh0OiBcIlRpdG9sbyBkZWxsYSBkb21hbmRhXCIsXG4gICAgbW9kYWxDYW5jZWxCdXR0b25UZXh0OiBcIkFubnVsbGFcIixcbiAgICBtb2RhbEFwcGx5QnV0dG9uVGV4dDogXCJBcHBsaWNhcmVcIixcbiAgICBmaWx0ZXJTdHJpbmdQbGFjZWhvbGRlcjogXCJEaWdpdGEgcGVyIGNlcmNhcmUuLi5cIixcbiAgICBlbXB0eU1lc3NhZ2U6IFwiTmVzc3VuIGRhdG8gZGEgdmlzdWFsaXp6YXJlXCIsXG4gICAgbm9FbnRyaWVzVGV4dDogXCJOb24gY2kgc29ubyBhbmNvcmEgdm9jaS5cXG5GYWkgY2xpYyBzdWwgcHVsc2FudGUgcXVpIHNvdHRvIHBlciBhZ2dpdW5nZXJlIHVuYSBudW92YSB2b2NlLlwiLFxuICAgIG5vRW50cmllc1JlYWRvbmx5VGV4dDogXCJOb24gY2kgc29ubyB2b2NpLlwiLFxuICAgIG1vcmU6IFwiUGnDuVwiLFxuICAgIHRhZ2JveERvbmVCdXR0b25DYXB0aW9uOiBcIk9LXCIsXG4gICAgc2VsZWN0VG9SYW5rRW1wdHlSYW5rZWRBcmVhVGV4dDogXCJUdXR0ZSBsZSBzY2VsdGUgc29ubyBjbGFzc2lmaWNhdGVcIixcbiAgICBzZWxlY3RUb1JhbmtFbXB0eVVucmFua2VkQXJlYVRleHQ6IFwiVHJhc2NpbmEgZSByaWxhc2NpYSBsZSBzY2VsdGUgcXVpIHBlciBjbGFzc2lmaWNhcmxlXCJcbn07XG5zdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3VydmV5TG9jYWxpemF0aW9uXCJdLmxvY2FsZXNbXCJpdFwiXSA9IGl0YWxpYW5TdXJ2ZXlTdHJpbmdzO1xuc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN1cnZleUxvY2FsaXphdGlvblwiXS5sb2NhbGVOYW1lc1tcIml0XCJdID0gXCJpdGFsaWFub1wiO1xuLy8gVGhlIGZvbGxvd2luZyBzdHJpbmdzIGhhdmUgYmVlbiB0cmFuc2xhdGVkIGJ5IGEgbWFjaGluZSB0cmFuc2xhdGlvbiBzZXJ2aWNlXG4vLyBSZW1vdmUgdGhvc2Ugc3RyaW5ncyB0aGF0IHlvdSBoYXZlIGNvcnJlY3RlZCBtYW51YWxseVxuLy8gcGFuZWxEeW5hbWljVGFiVGV4dEZvcm1hdDogXCJQYW5lbCB7cGFuZWxJbmRleH1cIiA9PiBcIlBhbm5lbGxvIHtwYW5lbEluZGV4fVwiXG4vLyBlbXB0eU1lc3NhZ2U6IFwiTm8gZGF0YSB0byBkaXNwbGF5XCIgPT4gXCJOZXNzdW4gZGF0byBkYSB2aXN1YWxpenphcmVcIlxuLy8gbm9FbnRyaWVzUmVhZG9ubHlUZXh0OiBcIlRoZXJlIGFyZSBubyBlbnRyaWVzLlwiID0+IFwiTm9uIGNpIHNvbm8gdm9jaS5cIlxuLy8gbW9yZTogXCJNb3JlXCIgPT4gXCJQacO5XCJcbi8vIHRhZ2JveERvbmVCdXR0b25DYXB0aW9uOiBcIk9LXCIgPT4gXCJPS1wiXG4vLyBzZWxlY3RUb1JhbmtFbXB0eVJhbmtlZEFyZWFUZXh0OiBcIkFsbCBjaG9pY2VzIGFyZSByYW5rZWRcIiA9PiBcIlR1dHRlIGxlIHNjZWx0ZSBzb25vIGNsYXNzaWZpY2F0ZVwiXG4vLyBzZWxlY3RUb1JhbmtFbXB0eVVucmFua2VkQXJlYVRleHQ6IFwiRHJhZyBhbmQgZHJvcCBjaG9pY2VzIGhlcmUgdG8gcmFuayB0aGVtXCIgPT4gXCJUcmFzY2luYSBlIHJpbGFzY2lhIGxlIHNjZWx0ZSBxdWkgcGVyIGNsYXNzaWZpY2FybGVcIi8vIHRha2VQaG90b0NhcHRpb246IFwiVGFrZSBQaG90b1wiID0+IFwiU2NhdHRhIGZvdG9cIlxuLy8gY2FtZXJhUGxhY2VIb2xkZXI6IFwiQ2xpY2sgdGhlIGJ1dHRvbiBiZWxvdyB0byB0YWtlIGEgcGhvdG8gdXNpbmcgdGhlIGNhbWVyYS5cIiA9PiBcIkZhaSBjbGljIHN1bCBwdWxzYW50ZSBxdWkgc290dG8gcGVyIHNjYXR0YXJlIHVuYSBmb3RvIHV0aWxpenphbmRvIGxhIGZvdG9jYW1lcmEuXCJcbi8vIGZpbGVDYW1lcmFEcmFnQXJlYVBsYWNlSG9sZGVyOiBcIkRyYWcgYW5kIGRyb3Agb3Igc2VsZWN0IGEgZmlsZSB0byB1cGxvYWQgb3IgdGFrZSBhIHBob3RvIHVzaW5nIHRoZSBjYW1lcmEuXCIgPT4gXCJUcmFzY2luYSBlIHJpbGFzY2lhIG8gc2VsZXppb25hIHVuIGZpbGUgZGEgY2FyaWNhcmUgbyBzY2F0dGFyZSB1bmEgZm90byB1dGlsaXp6YW5kbyBsYSBmb3RvY2FtZXJhLlwiXG4vLyByZXBsYWNlRmlsZUNhcHRpb246IFwiUmVwbGFjZSBmaWxlXCIgPT4gXCJTb3N0aXR1aXNjaSBmaWxlXCJcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9sb2NhbGl6YXRpb24vamFwYW5lc2UudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL2xvY2FsaXphdGlvbi9qYXBhbmVzZS50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogamFwYW5lc2VTdXJ2ZXlTdHJpbmdzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImphcGFuZXNlU3VydmV5U3RyaW5nc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGphcGFuZXNlU3VydmV5U3RyaW5nczsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHN1cnZleS1jb3JlICovIFwiLi9zcmMvZW50cmllcy9jb3JlLnRzXCIpO1xuXG52YXIgamFwYW5lc2VTdXJ2ZXlTdHJpbmdzID0ge1xuICAgIHBhZ2VQcmV2VGV4dDogXCLliY3jgbhcIixcbiAgICBwYWdlTmV4dFRleHQ6IFwi5qyh44G4XCIsXG4gICAgY29tcGxldGVUZXh0OiBcIuWujOS6hlwiLFxuICAgIHByZXZpZXdUZXh0OiBcIuODl+ODrOODk+ODpeODvFwiLFxuICAgIGVkaXRUZXh0OiBcIue3qOmbhlwiLFxuICAgIHN0YXJ0U3VydmV5VGV4dDogXCLjgrnjgr/jg7zjg4hcIixcbiAgICBvdGhlckl0ZW1UZXh0OiBcIuOBneOBruS7lu+8iOiqrOaYju+8iVwiLFxuICAgIG5vbmVJdGVtVGV4dDogXCLjgarjgZdcIixcbiAgICBzZWxlY3RBbGxJdGVtVGV4dDogXCLjgZnjgbnjgabpgbjmip5cIixcbiAgICBwcm9ncmVzc1RleHQ6IFwiezB9L3sxfemggVwiLFxuICAgIGluZGV4VGV4dDogXCJ7MX3jga57MH1cIixcbiAgICBwYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ6IFwiezF944GuezB944KS6KiY6Yyy44GZ44KLXCIsXG4gICAgcGFuZWxEeW5hbWljVGFiVGV4dEZvcm1hdDogXCJQYW5lbCB7cGFuZWxJbmRleH1cIixcbiAgICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwiezB9L3sxfeOBruizquWVj+OBq+WbnuetlOOBl+OBvuOBl+OBn+OAglwiLFxuICAgIGVtcHR5U3VydmV5OiBcIuOBk+OBruiqv+afu+OBq+ihqOekuuOBp+OBjeOCi+ODmuODvOOCuOOChOizquWVj+OBr+OBguOCiuOBvuOBm+OCk1wiLFxuICAgIGNvbXBsZXRpbmdTdXJ2ZXk6IFwi6Kq/5p+744KS5a6M5LqG44GX44Gm44GP44KM44Gm44GC44KK44GM44Go44GG44GU44GW44GE44G+44GX44GfXCIsXG4gICAgY29tcGxldGluZ1N1cnZleUJlZm9yZTogXCLlvZPnpL7jga7oqJjpjLLjgavjgojjgovjgajjgIHjgZPjga7oqr/mn7vjga/jgZnjgafjgavlrozkuobjgZfjgabjgYTjgb7jgZnjgIJcIixcbiAgICBsb2FkaW5nU3VydmV5OiBcIuiqv+afu+OCkuODgOOCpuODs+ODreODvOODieS4rVwiLFxuICAgIHBsYWNlaG9sZGVyOiBcIumBuOaKnlwiLFxuICAgIHJhdGluZ09wdGlvbnNDYXB0aW9uOiBcIumBuOOBtuOAguOAguOAglwiLFxuICAgIHZhbHVlOiBcIuWApOaJk+OBoVwiLFxuICAgIHJlcXVpcmVkRXJyb3I6IFwi6LOq5ZWP44Gr44GK562U44GI5LiL44GV44GEXCIsXG4gICAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwi5pyA5L2O44Gn44KCMeOBpOOBruizquWVj+OBq+etlOOBiOOBpuOBj+OBoOOBleOBhOOAglwiLFxuICAgIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwi6LOq5ZWP44Gr44Gv5YWo5YiX44Gn5Zue562U44GX44Gm44GP44Gg44GV44GE44CCXCIsXG4gICAgbnVtZXJpY0Vycm9yOiBcIuaVsOWtl+OBp+OBlOiomOWFpeS4i+OBleOBhFwiLFxuICAgIG1pbkVycm9yOiBcIuWApOOBryB7MH0g5YCk44KI44KK5bCP44GV44GP44GZ44KL44GT44Go44Gv44Gn44GN44G+44Gb44KTXCIsXG4gICAgbWF4RXJyb3I6IFwi5YCk44GvIHswfSDjgpLotoXjgYjjgabjga/jgarjgorjgb7jgZvjgpPjgIJcIixcbiAgICB0ZXh0TWluTGVuZ3RoOiBcInswfSDmloflrZfku6XkuIrjgaflhaXlipvjgZfjgabkuIvjgZXjgYRcIixcbiAgICB0ZXh0TWF4TGVuZ3RoOiBcInswfeaWh+Wtl+S7peS4i+OBp+WFpeWKm+OBl+OBpuOBj+OBoOOBleOBhOOAglwiLFxuICAgIHRleHRNaW5NYXhMZW5ndGg6IFwiezB95Lul5LiKezF95pyq5rqA44Gu5paH5a2X44KS5YWl5Yqb44GX44Gm44GP44Gg44GV44GE44CCXCIsXG4gICAgbWluUm93Q291bnRFcnJvcjogXCJ7MH3ooYzku6XkuIrjgaflhaXlipvjgZfjgabkuIvjgZXjgYRcIixcbiAgICBtaW5TZWxlY3RFcnJvcjogXCJ7MH3nqK7poZ7ku6XkuIrjgpLpgbjmip7jgZfjgabkuIvjgZXjgYRcIixcbiAgICBtYXhTZWxlY3RFcnJvcjogXCJ7MH3ku6XkuIrjga7jg5Djg6rjgqLjg7Pjg4jjgpLpgbjmip7jgZfjgarjgYTjgafjgY/jgaDjgZXjgYTjgIJcIixcbiAgICBudW1lcmljTWluTWF4OiBcInswfeOBr3sxfeS7peS4iuOBp+OBguOCiuOAgXsyfeS7peS4i+OBp+OBguOCi+OBk+OBqOOBjOacm+OBvuOBl+OBhOOAglwiLFxuICAgIG51bWVyaWNNaW46IFwiJ3swfScg44Gv5ZCM562J44GLezF944KI44KK5aSn44GN44GP44Gq44GR44KM44Gw44Gq44KK44G+44Gb44KTXCIsXG4gICAgbnVtZXJpY01heDogXCInezB9JyDjga/lkIznrYnjgYt7MX3jgojjgorlsI/jgZXjgY/jgarjgZHjgozjgbDjgarjgorjgb7jgZvjgpNcIixcbiAgICBpbnZhbGlkRW1haWw6IFwi5pyJ5Yq544Gq44Oh44O844Or44Ki44OJ44Os44K544KS44GU6KiY5YWl5LiL44GV44GEXCIsXG4gICAgaW52YWxpZEV4cHJlc3Npb246IFwi5byP44GvIHswfeOBryd0cnVlJ+OCkui/lOOBmeOBueOBjeOBp+OBmeOAglwiLFxuICAgIHVybFJlcXVlc3RFcnJvcjogXCLjg6rjgq/jgqjjgrnjg4jjga/jgqjjg6njg7wgJ3swfScg44KS6L+U44GX44G+44GX44Gf44CCezF9XCIsXG4gICAgdXJsR2V0Q2hvaWNlc0Vycm9yOiBcIuODquOCr+OCqOOCueODiOOBjOepuuOBruODh+ODvOOCv+OCkui/lOOBl+OBn+OBi+OAgSdwYXRoJyDjg5fjg63jg5Hjg4bjgqPjgYzmraPjgZfjgY/jgYLjgorjgb7jgZvjgpPjgIJcIixcbiAgICBleGNlZWRNYXhTaXplOiBcIuODleOCoeOCpOODq+OBruOCteOCpOOCuuOBr3swfeOCkui2heOBiOOBpuOBr+OBhOOBkeOBvuOBm+OCk1wiLFxuICAgIG90aGVyUmVxdWlyZWRFcnJvcjogXCLjgZ3jga7ku5bjga7lgKTjgpLlhaXlipvjgZfjgabjgY/jgaDjgZXjgYTjgIJcIixcbiAgICB1cGxvYWRpbmdGaWxlOiBcIuODleOCoeOCpOODq+OCkuOCouODg+ODl+ODreODvOODieS4reOBp+OBmeOAguOBl+OBsOOCieOBj+OBl+OBpuOBi+OCieWGjeW6puOBiuippuOBl+S4i+OBleOBhFwiLFxuICAgIGxvYWRpbmdGaWxlOiBcIuiqreOBv+i+vOOBv+S4rVwiLFxuICAgIGNob29zZUZpbGU6IFwi44OV44Kh44Kk44Or44KS6YG45oqeXCIsXG4gICAgbm9GaWxlQ2hvc2VuOiBcIumBuOaKnuOBleOCjOOBn+ODleOCoeOCpOODq+OBr+OBguOCiuOBvuOBm+OCk1wiLFxuICAgIGZpbGVEcmFnQXJlYVBsYWNlaG9sZGVyOiBcIuOBk+OBk+OBq+ODleOCoeOCpOODq+OCkuODieODqeODg+OCsCbjg4njg63jg4Pjg5fjgZnjgovjgYvjgIHkuIvjga7jg5zjgr/jg7PjgpLjgq/jg6rjg4Pjgq/jgZfjgabjgqLjg4Pjg5fjg63jg7zjg4njgZnjgovjg5XjgqHjgqTjg6vjgpLpgbjmip7jgZfjgabjgY/jgaDjgZXjgYTjgIJcIixcbiAgICBjb25maXJtRGVsZXRlOiBcIuODrOOCs+ODvOODieOCkuWJiumZpOOBl+OBvuOBmeOBi++8n1wiLFxuICAgIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwi44GT44Gu5YCk44Gv5LiA5oSP44Gn44Gq44GR44KM44Gw44Gq44KK44G+44Gb44KT44CCXCIsXG4gICAgYWRkQ29sdW1uOiBcIuWIl+OBrui/veWKoFwiLFxuICAgIGFkZFJvdzogXCLov73liqDooYxcIixcbiAgICByZW1vdmVSb3c6IFwi6Zmk5Y67XCIsXG4gICAgZW1wdHlSb3dzVGV4dDogXCLooYzjga/jgYLjgorjgb7jgZvjgpPjgIJcIixcbiAgICBhZGRQYW5lbDogXCLmlrDopo/ov73liqBcIixcbiAgICByZW1vdmVQYW5lbDogXCLpmaTljrtcIixcbiAgICBjaG9pY2VzX0l0ZW06IFwi5ZOB55uuXCIsXG4gICAgbWF0cml4X2NvbHVtbjogXCLjgrPjg6njg6BcIixcbiAgICBtYXRyaXhfcm93OiBcIuihjFwiLFxuICAgIG11bHRpcGxldGV4dF9pdGVtbmFtZTogXCLjg4bjgq3jgrnjg4hcIixcbiAgICBzYXZpbmdEYXRhOiBcIue1kOaenOOBr+OCteODvOODkOODvOOBq+S/neWtmOOBleOCjOOBpuOBhOOBvuOBmS4uLuOAglwiLFxuICAgIHNhdmluZ0RhdGFFcnJvcjogXCLjgqjjg6njg7zjgYznmbrnlJ/jgZfjgIHntZDmnpzjgpLkv53lrZjjgafjgY3jgb7jgZvjgpPjgafjgZfjgZ/jgIJcIixcbiAgICBzYXZpbmdEYXRhU3VjY2VzczogXCLntZDmnpzjga/nhKHkuovjgavkv53lrZjjgZXjgozjgb7jgZfjgZ9cIixcbiAgICBzYXZlQWdhaW5CdXR0b246IFwi44KC44GG5LiA5bqm6Kmm44GX44Gm44G/44Gm44GP44Gg44GV44GE44CCXCIsXG4gICAgdGltZXJNaW46IFwi5YOF5bCRXCIsXG4gICAgdGltZXJTZWM6IFwi44K744OD44KvXCIsXG4gICAgdGltZXJTcGVudEFsbDogXCLjgYLjgarjgZ/jga/jgZPjga7jg5rjg7zjgrjjgat7MH3jgpLosrvjgoTjgZfjgIHlkIjoqIjjgad7MX3jgpLosrvjgoTjgZfjgb7jgZfjgZ/jgIJcIixcbiAgICB0aW1lclNwZW50UGFnZTogXCLjgYLjgarjgZ/jga/jgZPjga7jg5rjg7zjgrjjgat7MH3jgpLosrvjgoTjgZfjgb7jgZfjgZ/jgIJcIixcbiAgICB0aW1lclNwZW50U3VydmV5OiBcIuWQiOioiOOBp3swfeOCkuS9v+OBo+OBn+OBk+OBqOOBq+OBquOCiuOBvuOBmeOAglwiLFxuICAgIHRpbWVyTGltaXRBbGw6IFwi44GT44Gu44Oa44O844K444GrezF944Gu44GG44GhezB944KS6LK744KE44GX44CBezN944Gu44GG44GhezJ944KS5ZCI6KiI44Gn6LK744KE44GX44G+44GX44Gf44CCXCIsXG4gICAgdGltZXJMaW1pdFBhZ2U6IFwi44GT44Gu44Oa44O844K444GnezF944GuezB944KS5L2/44Gj44Gf44GT44Go44GM44GC44KK44G+44GZ44CCXCIsXG4gICAgdGltZXJMaW1pdFN1cnZleTogXCLlkIjoqIjjgad7MX3jga57MH3jgpLkvb/jgaPjgZ/jgZPjgajjgYzjgYLjgorjgb7jgZnjgIJcIixcbiAgICBjbGVhckNhcHRpb246IFwi56m655m9XCIsXG4gICAgc2lnbmF0dXJlUGxhY2VIb2xkZXI6IFwi44GT44GT44Gr572y5ZCNXCIsXG4gICAgY2hvb3NlRmlsZUNhcHRpb246IFwi44OV44Kh44Kk44Or44KS6YG45oqeXCIsXG4gICAgdGFrZVBob3RvQ2FwdGlvbjogXCLlhpnnnJ/jgpLmkq7jgotcIixcbiAgICBjYW1lcmFQbGFjZUhvbGRlcjogXCLkuIvjga7jg5zjgr/jg7PjgpLjgq/jg6rjg4Pjgq/jgZfjgabjgIHjgqvjg6Hjg6njgpLkvb/nlKjjgZfjgablhpnnnJ/jgpLmkq7jgorjgb7jgZnjgIJcIixcbiAgICBmaWxlQ2FtZXJhRHJhZ0FyZWFQbGFjZUhvbGRlcjogXCLjgqLjg4Pjg5fjg63jg7zjg4njgZnjgovjg5XjgqHjgqTjg6vjgpLjg4njg6njg4PjgrDjgqLjg7Pjg4njg4njg63jg4Pjg5fjgb7jgZ/jga/pgbjmip7jgZnjgovjgYvjgIHjgqvjg6Hjg6njgpLkvb/nlKjjgZfjgablhpnnnJ/jgpLmkq7jgorjgb7jgZnjgIJcIixcbiAgICByZXBsYWNlRmlsZUNhcHRpb246IFwi44OV44Kh44Kk44Or44Gu572u5o+bXCIsXG4gICAgcmVtb3ZlRmlsZUNhcHRpb246IFwi44GT44Gu44OV44Kh44Kk44Or44KS5YmK6ZmkXCIsXG4gICAgYm9vbGVhbkNoZWNrZWRMYWJlbDogXCLlmatcIixcbiAgICBib29sZWFuVW5jaGVja2VkTGFiZWw6IFwi5ZCmXCIsXG4gICAgY29uZmlybVJlbW92ZUZpbGU6IFwi44GT44Gu44OV44Kh44Kk44Or44KS5YmK6Zmk44GX44Gm44KC44KI44KN44GX44GE44Gn44GZ44GL77yfezB9P1wiLFxuICAgIGNvbmZpcm1SZW1vdmVBbGxGaWxlczogXCLjgZnjgbnjgabjga7jg5XjgqHjgqTjg6vjgpLliYrpmaTjgZfjgabjgoLjgojjgo3jgZfjgYTjgafjgZnjgYvvvJ9cIixcbiAgICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwi6LOq5ZWP5ZCNXCIsXG4gICAgbW9kYWxDYW5jZWxCdXR0b25UZXh0OiBcIuOCreODo+ODs+OCu+ODq1wiLFxuICAgIG1vZGFsQXBwbHlCdXR0b25UZXh0OiBcIueUs+OBl+i+vOOCgFwiLFxuICAgIGZpbHRlclN0cmluZ1BsYWNlaG9sZGVyOiBcIuaknOe0ouOBmeOCi+OCv+OCpOODly4uLlwiLFxuICAgIGVtcHR5TWVzc2FnZTogXCLooajnpLrjgZnjgovjg4fjg7zjgr/jgYzjgYLjgorjgb7jgZvjgpNcIixcbiAgICBub0VudHJpZXNUZXh0OiBcIuOCqOODs+ODiOODquOBr+OBvuOBoOOBguOCiuOBvuOBm+OCk+OAglxcbuS4i+OBruODnOOCv+ODs+OCkuOCr+ODquODg+OCr+OBl+OBpuOAgeaWsOOBl+OBhOOCqOODs+ODiOODquOCkui/veWKoOOBl+OBvuOBmeOAglwiLFxuICAgIG5vRW50cmllc1JlYWRvbmx5VGV4dDogXCLjgqjjg7Pjg4jjg6rjga/jgYLjgorjgb7jgZvjgpPjgIJcIixcbiAgICBtb3JlOiBcIuOCguOBo+OBqOOBneOBrlwiLFxuICAgIHRhZ2JveERvbmVCdXR0b25DYXB0aW9uOiBcIuOCj+OBi+OCiuOBvuOBl+OBn1wiLFxuICAgIHNlbGVjdFRvUmFua0VtcHR5UmFua2VkQXJlYVRleHQ6IFwi44GZ44G544Gm44Gu6YG45oqe6IKi44GM44Op44Oz44Kv5LuY44GR44GV44KM44G+44GZXCIsXG4gICAgc2VsZWN0VG9SYW5rRW1wdHlVbnJhbmtlZEFyZWFUZXh0OiBcIuOBk+OBk+OBq+mBuOaKnuiCouOCkuODieODqeODg+OCsOOCouODs+ODieODieODreODg+ODl+OBl+OBpuODqeODs+OCr+S7mOOBkeOBl+OBvuOBmVwiXG59O1xuc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN1cnZleUxvY2FsaXphdGlvblwiXS5sb2NhbGVzW1wiamFcIl0gPSBqYXBhbmVzZVN1cnZleVN0cmluZ3M7XG5zdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3VydmV5TG9jYWxpemF0aW9uXCJdLmxvY2FsZU5hbWVzW1wiamFcIl0gPSBcIuaXpeacrOiqnlwiO1xuLy8gVGhlIGZvbGxvd2luZyBzdHJpbmdzIGhhdmUgYmVlbiB0cmFuc2xhdGVkIGJ5IGEgbWFjaGluZSB0cmFuc2xhdGlvbiBzZXJ2aWNlXG4vLyBSZW1vdmUgdGhvc2Ugc3RyaW5ncyB0aGF0IHlvdSBoYXZlIGNvcnJlY3RlZCBtYW51YWxseVxuLy8gaW5kZXhUZXh0OiBcInswfSBvZiB7MX1cIiA9PiBcInsxfeOBrnswfVwiXG4vLyBwYW5lbER5bmFtaWNUYWJUZXh0Rm9ybWF0OiBcIlBhbmVsIHtwYW5lbEluZGV4fVwiID0+IFwiUGFuZWwge3BhbmVsSW5kZXh9XCJcbi8vIHJhdGluZ09wdGlvbnNDYXB0aW9uOiBcIlNlbGVjdC4uLlwiID0+IFwi6YG444G244CC44CC44CCXCJcbi8vIG1pbkVycm9yOiBcIlRoZSB2YWx1ZSBzaG91bGQgbm90IGJlIGxlc3MgdGhhbiB7MH1cIiA9PiBcIuWApOOBryB7MH0g5YCk44KI44KK5bCP44GV44GP44GZ44KL44GT44Go44Gv44Gn44GN44G+44Gb44KTXCJcbi8vIG1heEVycm9yOiBcIlRoZSB2YWx1ZSBzaG91bGQgbm90IGJlIGdyZWF0ZXIgdGhhbiB7MH1cIiA9PiBcIuWApOOBryB7MH0g44KS6LaF44GI44Gm44Gv44Gq44KK44G+44Gb44KT44CCXCJcbi8vIGZpbGVEcmFnQXJlYVBsYWNlaG9sZGVyOiBcIkRyYWcgYW5kIGRyb3AgYSBmaWxlIGhlcmUgb3IgY2xpY2sgdGhlIGJ1dHRvbiBiZWxvdyBhbmQgY2hvb3NlIGEgZmlsZSB0byB1cGxvYWQuXCIgPT4gXCLjgZPjgZPjgavjg5XjgqHjgqTjg6vjgpLjg4njg6njg4PjgrAm44OJ44Ot44OD44OX44GZ44KL44GL44CB5LiL44Gu44Oc44K/44Oz44KS44Kv44Oq44OD44Kv44GX44Gm44Ki44OD44OX44Ot44O844OJ44GZ44KL44OV44Kh44Kk44Or44KS6YG45oqe44GX44Gm44GP44Gg44GV44GE44CCXCJcbi8vIGVtcHR5Um93c1RleHQ6IFwiVGhlcmUgYXJlIG5vIHJvd3MuXCIgPT4gXCLooYzjga/jgYLjgorjgb7jgZvjgpPjgIJcIlxuLy8gbXVsdGlwbGV0ZXh0X2l0ZW1uYW1lOiBcInRleHRcIiA9PiBcIuODhuOCreOCueODiFwiXG4vLyBzaWduYXR1cmVQbGFjZUhvbGRlcjogXCJTaWduIGhlcmVcIiA9PiBcIuOBk+OBk+OBq+e9suWQjVwiXG4vLyBtb2RhbENhbmNlbEJ1dHRvblRleHQ6IFwiQ2FuY2VsXCIgPT4gXCLjgq3jg6Pjg7Pjgrvjg6tcIlxuLy8gbW9kYWxBcHBseUJ1dHRvblRleHQ6IFwiQXBwbHlcIiA9PiBcIueUs+OBl+i+vOOCgFwiXG4vLyBmaWx0ZXJTdHJpbmdQbGFjZWhvbGRlcjogXCJUeXBlIHRvIHNlYXJjaC4uLlwiID0+IFwi5qSc57Si44GZ44KL44K/44Kk44OXLi4uXCJcbi8vIGVtcHR5TWVzc2FnZTogXCJObyBkYXRhIHRvIGRpc3BsYXlcIiA9PiBcIuihqOekuuOBmeOCi+ODh+ODvOOCv+OBjOOBguOCiuOBvuOBm+OCk1wiXG4vLyBub0VudHJpZXNUZXh0OiBcIlRoZXJlIGFyZSBubyBlbnRyaWVzIHlldC5cXG5DbGljayB0aGUgYnV0dG9uIGJlbG93IHRvIGFkZCBhIG5ldyBlbnRyeS5cIiA9PiBcIuOCqOODs+ODiOODquOBr+OBvuOBoOOBguOCiuOBvuOBm+OCk+OAglxcbuS4i+OBruODnOOCv+ODs+OCkuOCr+ODquODg+OCr+OBl+OBpuOAgeaWsOOBl+OBhOOCqOODs+ODiOODquOCkui/veWKoOOBl+OBvuOBmeOAglwiXG4vLyBub0VudHJpZXNSZWFkb25seVRleHQ6IFwiVGhlcmUgYXJlIG5vIGVudHJpZXMuXCIgPT4gXCLjgqjjg7Pjg4jjg6rjga/jgYLjgorjgb7jgZvjgpPjgIJcIlxuLy8gbW9yZTogXCJNb3JlXCIgPT4gXCLjgoLjgaPjgajjgZ3jga5cIlxuLy8gdGFnYm94RG9uZUJ1dHRvbkNhcHRpb246IFwiT0tcIiA9PiBcIuOCj+OBi+OCiuOBvuOBl+OBn1wiXG4vLyBzZWxlY3RUb1JhbmtFbXB0eVJhbmtlZEFyZWFUZXh0OiBcIkFsbCBjaG9pY2VzIGFyZSByYW5rZWRcIiA9PiBcIuOBmeOBueOBpuOBrumBuOaKnuiCouOBjOODqeODs+OCr+S7mOOBkeOBleOCjOOBvuOBmVwiXG4vLyBzZWxlY3RUb1JhbmtFbXB0eVVucmFua2VkQXJlYVRleHQ6IFwiRHJhZyBhbmQgZHJvcCBjaG9pY2VzIGhlcmUgdG8gcmFuayB0aGVtXCIgPT4gXCLjgZPjgZPjgavpgbjmip7ogqLjgpLjg4njg6njg4PjgrDjgqLjg7Pjg4njg4njg63jg4Pjg5fjgZfjgabjg6njg7Pjgq/ku5jjgZHjgZfjgb7jgZlcIi8vIHRha2VQaG90b0NhcHRpb246IFwiVGFrZSBQaG90b1wiID0+IFwi5YaZ55yf44KS5pKu44KLXCJcbi8vIGNhbWVyYVBsYWNlSG9sZGVyOiBcIkNsaWNrIHRoZSBidXR0b24gYmVsb3cgdG8gdGFrZSBhIHBob3RvIHVzaW5nIHRoZSBjYW1lcmEuXCIgPT4gXCLkuIvjga7jg5zjgr/jg7PjgpLjgq/jg6rjg4Pjgq/jgZfjgabjgIHjgqvjg6Hjg6njgpLkvb/nlKjjgZfjgablhpnnnJ/jgpLmkq7jgorjgb7jgZnjgIJcIlxuLy8gZmlsZUNhbWVyYURyYWdBcmVhUGxhY2VIb2xkZXI6IFwiRHJhZyBhbmQgZHJvcCBvciBzZWxlY3QgYSBmaWxlIHRvIHVwbG9hZCBvciB0YWtlIGEgcGhvdG8gdXNpbmcgdGhlIGNhbWVyYS5cIiA9PiBcIuOCouODg+ODl+ODreODvOODieOBmeOCi+ODleOCoeOCpOODq+OCkuODieODqeODg+OCsOOCouODs+ODieODieODreODg+ODl+OBvuOBn+OBr+mBuOaKnuOBmeOCi+OBi+OAgeOCq+ODoeODqeOCkuS9v+eUqOOBl+OBpuWGmeecn+OCkuaSruOCiuOBvuOBmeOAglwiXG4vLyByZXBsYWNlRmlsZUNhcHRpb246IFwiUmVwbGFjZSBmaWxlXCIgPT4gXCLjg5XjgqHjgqTjg6vjga7nva7mj5tcIlxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL2xvY2FsaXphdGlvbi9rYXpha2gudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9sb2NhbGl6YXRpb24va2F6YWtoLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDoga2F6YWtoU3RyaW5ncyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJrYXpha2hTdHJpbmdzXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4ga2F6YWtoU3RyaW5nczsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHN1cnZleS1jb3JlICovIFwiLi9zcmMvZW50cmllcy9jb3JlLnRzXCIpO1xuXG52YXIga2F6YWtoU3RyaW5ncyA9IHtcbiAgICBwYWdlUHJldlRleHQ6IFwi0JDRgNGC0pvQsFwiLFxuICAgIHBhZ2VOZXh0VGV4dDogXCLQmtC10LvQtdGB0ZZcIixcbiAgICBjb21wbGV0ZVRleHQ6IFwi0JTQsNC50YvQvVwiLFxuICAgIHByZXZpZXdUZXh0OiBcItCQ0LvQtNGL0L0g0LDQu9CwINKb0LDRgNCw0YNcIixcbiAgICBlZGl0VGV4dDogXCLQoNC10LTQsNC60YbQuNGP0LvQsNGDXCIsXG4gICAgc3RhcnRTdXJ2ZXlUZXh0OiBcItCR0LDRgdGC0LDRg1wiLFxuICAgIG90aGVySXRlbVRleHQ6IFwi0JHQsNGB0pvQsCAo06nRgtGW0L3QtdC80ZbQtywg0LbQsNC30YvSo9GL0LcpXCIsXG4gICAgbm9uZUl0ZW1UZXh0OiBcItCW0L7Sm1wiLFxuICAgIHNlbGVjdEFsbEl0ZW1UZXh0OiBcItCR0LDRgNC70YvSk9GL0L0g0YLQsNKj0LTQsNGDXCIsXG4gICAgcHJvZ3Jlc3NUZXh0OiBcInswfSDQtNC10L0gezF9INCx0LXRgiBcIixcbiAgICBpbmRleFRleHQ6IFwiezF9IHswfVwiLFxuICAgIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCJ7MH0g0LTQtdC9IHsxfSDQttCw0LfQsdCwXCIsXG4gICAgcGFuZWxEeW5hbWljVGFiVGV4dEZvcm1hdDogXCLQn9Cw0L3QtdC70Ywge3BhbmVsSW5kZXh9XCIsXG4gICAgcXVlc3Rpb25zUHJvZ3Jlc3NUZXh0OiBcInswfS97MX0g0YHSsdGA0LDSm9GC0LDRgNKT0LAg0LbQsNGD0LDQv1wiLFxuICAgIGVtcHR5U3VydmV5OiBcItCR0ZbRgCDQtNC1INCx0ZbRgCDRgdKx0YDQsNKbINC20L7Smy5cIixcbiAgICBjb21wbGV0aW5nU3VydmV5OiBcItCh0LDRg9Cw0LvQvdCw0LzQsNC90Ysg0YLQvtC70YLRi9GA0pPQsNC90YvSo9GL0Lcg0q/RiNGW0L0g0YDQsNGF0LzQtdGCIVwiLFxuICAgIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6IFwi0KHRltC3INCx0rHQuyDRgdCw0YPQsNC70L3QsNC80LDQvdGLINOp0YLRltC/INKb0L7QudC00YvSo9GL0LcuXCIsXG4gICAgbG9hZGluZ1N1cnZleTogXCLQodC10YDQstC10YDQtNC10L0g0LbSr9C60YLQtdGDLi4uXCIsXG4gICAgcGxhY2Vob2xkZXI6IFwi0KLQsNKj0LTQsNGDLi4uXCIsXG4gICAgcmF0aW5nT3B0aW9uc0NhcHRpb246IFwi0KLQsNKj0LTQsNGDLi4uXCIsXG4gICAgdmFsdWU6IFwi0LzTmdC90ZZcIixcbiAgICByZXF1aXJlZEVycm9yOiBcItOo0YLRltC90LXQvNGW0LcsINGB0rHRgNCw0pvSm9CwINC20LDRg9Cw0L8g0LHQtdGA0ZbSo9GW0LcuXCIsXG4gICAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwi06jRgtGW0L3QtdC80ZbQtywg0LrQtdC8INC00LXQs9C10L3QtNC1INCx0ZbRgCDRgdKx0YDQsNKb0pvQsCDQttCw0YPQsNC/INCx0LXRgNGW0qPRltC3LlwiLFxuICAgIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwi06jRgtGW0L3QtdC80ZbQtywg05nRgNCx0ZbRgCDQttC+0LvQtNGL0qMg0YHSsdGA0LDSk9Cw0L3RiyDQttCw0YPQsNC/INCx0LXRgNGW0qPRltC3LlwiLFxuICAgIG51bWVyaWNFcnJvcjogXCLQltCw0YPQsNC/INGB0LDQvSDRgtKv0YDRltC90LTQtSDQsdC+0LvRg9GLINC60LXRgNC10LouXCIsXG4gICAgbWluRXJyb3I6IFwi0JzTmdC90ZYgezB9INC60LXQvCDQsdC+0LvQvNCw0YPRiyDRgtC40ZbRgVwiLFxuICAgIG1heEVycm9yOiBcItCc05nQvSB7MH0g0LDRgNGC0YvSmyDQsdC+0LvQvNCw0YPRiyDRgtC40ZbRgVwiLFxuICAgIHRleHRNaW5MZW5ndGg6IFwi06jRgtGW0L3QtdC80ZbQtywgezB9INC00LXQvSDQutOp0L8g0YLQsNKj0LHQsCDQtdC90LPRltC30ZbSo9GW0LcuXCIsXG4gICAgdGV4dE1heExlbmd0aDogXCLTqNGC0ZbQvdC10LzRltC3LCB7MH0g0LTQtdC9INCw0Lcg0YLQsNKj0LHQsCDQtdC90LPRltC30ZbSo9GW0LcuXCIsXG4gICAgdGV4dE1pbk1heExlbmd0aDogXCLTqNGC0ZbQvdC10LzRltC3LCB7MH0g0LDQtyDQttOZ0L3QtSB7MX0g0LrTqdC/INGC0LDSo9Cx0LAg0LXQvdCz0ZbQt9GW0qPRltC3LlwiLFxuICAgIG1pblJvd0NvdW50RXJyb3I6IFwi06jRgtGW0L3QtdC80ZbQtywgezB9INC00LXQvSDQutC10Lwg0LXQvNC10YEg0LbQvtC7INGC0L7Qu9GC0YvRgNGL0qPRi9C3LlwiLFxuICAgIG1pblNlbGVjdEVycm9yOiBcItOo0YLRltC90LXQvNGW0LcsINGC0YvQvCDQsdC+0LvQvNCw0YHQsCB7MH0g0L3SsdGB0pvQsCDRgtCw0qPQtNCw0qPRi9C3LlwiLFxuICAgIG1heFNlbGVjdEVycm9yOiBcItOo0YLRltC90LXQvNGW0LcsIHswfSDQvdKx0YHSm9Cw0LTQsNC9INC606nQvyDRgtCw0qPQtNCw0LzQsNKj0YvQty5cIixcbiAgICBudW1lcmljTWluTWF4OiBcIid7MH0nIHsxfSDQtNC10L0g0LrQtdC8INC10LzQtdGBINC205nQvdC1IHsyfSDQtNC10L0g0LrTqdC/INC10LzQtdGBINCx0L7Qu9GDINC60LXRgNC10LpcIixcbiAgICBudW1lcmljTWluOiBcIid7MH0nIHsxfSDQtNC10L0g0LrQtdC8INC10LzQtdGBINCx0L7Qu9GDINC60LXRgNC10LpcIixcbiAgICBudW1lcmljTWF4OiBcIid7MH0nIHsxfSDQtNC10L0g0LrTqdC/INC10LzQtdGBINCx0L7Qu9GDINC60LXRgNC10LpcIixcbiAgICBpbnZhbGlkRW1haWw6IFwi06jRgtGW0L3QtdC80ZbQtywg0LbQsNGA0LDQvNC00Ysg0Y3Qu9C10LrRgtGA0L7QvdC00YvSmyDQv9C+0YjRgtCw0qPRi9C30LTRiyDQtdC90LPRltC30ZbSo9GW0LcuXCIsXG4gICAgaW52YWxpZEV4cHJlc3Npb246IFwiezB9INOp0YDQvdC10LPRliAgJ3RydWUnINKb0LDQudGC0LDRgNGDINC60LXRgNC10LouXCIsXG4gICAgdXJsUmVxdWVzdEVycm9yOiBcItCh0rHRgNCw0YLRi9C8INKb0LDRgtC10LvRltC60YLRliDSm9Cw0LnRgtCw0YDQtNGLJ3swfScuIHsxfVwiLFxuICAgIHVybEdldENob2ljZXNFcnJvcjogXCLQodKx0YDQsNGC0YvQvNKT0LAg0LbQsNGD0LDQvyDQsdC+0YEg0LrQtdC70LTRliDQvdC10LzQtdGB0LUgJ3BhdGgnINKb0LDRgdC40LXRgtGWINKb0LDRgtC1INC606nRgNGB0LXRgtGW0LvQs9C10L0gXCIsXG4gICAgZXhjZWVkTWF4U2l6ZTogXCLQpNCw0LnQu9C00YvSoyDQvNOp0LvRiNC10YDRliB7MH0g0LDRgdC/0LDRgyDQutC10YDQtdC6LlwiLFxuICAgIG90aGVyUmVxdWlyZWRFcnJvcjogXCLTqNGC0ZbQvdC10LzRltC3LCDigJzQkdCw0YHSm9Cw4oCdINC20L7Qu9GL0L3QsCDQtNC10YDQtdC60YLRliDQtdC90LPRltC30ZbSo9GW0LdcIixcbiAgICB1cGxvYWRpbmdGaWxlOiBcItCh0ZbQt9C00ZbSoyDRhNCw0LnQu9GL0qPRi9C3INC20q/QutGC0LXQu9GW0L8g0LbQsNGC0YvRgC4g0JHRltGA0L3QtdGI0LUg0YHQtdC60YPQvdC0INGC0L7RgdGL0L8sINKb0LDQudGC0LDQtNCw0L0g0LHQsNC50pvQsNC/INC606nRgNGW0qPRltC3LlwiLFxuICAgIGxvYWRpbmdGaWxlOiBcItCW0q/QutGC0LXRgy4uLlwiLFxuICAgIGNob29zZUZpbGU6IFwi0KTQsNC50LvQtNCw0YDQtNGLINGC0LDSo9C00LDSo9GL0LcuLi5cIixcbiAgICBub0ZpbGVDaG9zZW46IFwi0KTQsNC50Lsg0YLQsNKj0LTQsNC70YvQvdCx0LDQtNGLXCIsXG4gICAgZmlsZURyYWdBcmVhUGxhY2Vob2xkZXI6IFwi0KTQsNC50LvQtNGLINC+0YHRiyDQttC10YDQs9C1INCw0L/QsNGA0YvQvyDRgtCw0YHRgtCw0qPRi9C3INC90LXQvNC10YHQtSDRgtOp0LzQtdC90LTQtdCz0ZYg0YLSr9C50LzQtdC90ZYg0LHQsNGB0YvSo9GL0Lcg0LbTmdC90LUg0LrQtdGA0ZYg0LbSr9C60YLQtdGDINKv0YjRltC9INGE0LDQudC70LTRiyDRgtCw0qPQtNCw0qPRi9C3LlwiLFxuICAgIGNvbmZpcm1EZWxldGU6IFwi0KHRltC3INC20LDQt9Cx0LDQvdGLINC20L7Rj9GC0YvQvdGL0qPRi9C30pPQsCDRgdC10L3RltC80LTRltGB0ZbQtyDQsdC1P1wiLFxuICAgIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwi0JHSsdC7INC805nQvSDQsdGW0YDQtdCz0LXQuSDQsdC+0LvRgyDQutC10YDQtdC6LlwiLFxuICAgIGFkZENvbHVtbjogXCLQkdCw0pPQsNC90LAg0pvQvtGB0YNcIixcbiAgICBhZGRSb3c6IFwi0JbQvtC70LTRiyDSm9C+0YHRg1wiLFxuICAgIHJlbW92ZVJvdzogXCLTqNGI0ZbRgNGDXCIsXG4gICAgZW1wdHlSb3dzVGV4dDogXCLSmtCw0YLQsNGA0LvQsNGAINC20L7Smy5cIixcbiAgICBhZGRQYW5lbDogXCLQltCw0qPQsCDSm9C+0YHRg1wiLFxuICAgIHJlbW92ZVBhbmVsOiBcItOo0YjRltGA0YNcIixcbiAgICBjaG9pY2VzX0l0ZW06IFwi0J3SsdGB0pvQsFwiLFxuICAgIG1hdHJpeF9jb2x1bW46IFwi0JHQsNKT0LDQvdCwXCIsXG4gICAgbWF0cml4X3JvdzogXCLQltC+0LtcIixcbiAgICBtdWx0aXBsZXRleHRfaXRlbW5hbWU6IFwi0LzTmdGC0ZbQvVwiLFxuICAgIHNhdmluZ0RhdGE6IFwi0J3TmdGC0LjQttC10LvQtdGAINGB0LXRgNCy0LXRgNC00LUg0YHQsNKb0YLQsNC70LDQtNGLLi4uXCIsXG4gICAgc2F2aW5nRGF0YUVycm9yOiBcItKa0LDRgtC10LvRltC6INGC0YPRi9C90LTQsNC00YssINC905nRgtC40LbQtSDRgdCw0pvRgtCw0LvRi9C90LHQsNC00YsuXCIsXG4gICAgc2F2aW5nRGF0YVN1Y2Nlc3M6IFwi0J3TmdGC0LjQttC1INC+0LnQtNCw0pPRi9C00LDQuSDRgdCw0pvRgtCw0LvQtNGLIVwiLFxuICAgIHNhdmVBZ2FpbkJ1dHRvbjogXCLSmtCw0LnRgtCw0LTQsNC9INCx0LDQudKb0LDQvyDQutOp0YDRg1wiLFxuICAgIHRpbWVyTWluOiBcItC80LjQvVwiLFxuICAgIHRpbWVyU2VjOiBcItGB0LXQulwiLFxuICAgIHRpbWVyU3BlbnRBbGw6IFwi0KHRltC3INCx0rHQuyDQsdC10YLRgtC1IHswfSDQutC10YLRltGA0LTRltKj0ZbQtyDQttOZ0L3QtSDQsdCw0YDQu9GL0pPRiyB7MX0uXCIsXG4gICAgdGltZXJTcGVudFBhZ2U6IFwi0KHRltC3INCx0rHQuyDQsdC10YLRgtC1IHswfSDQutC10YLRltGA0LTRltKj0ZbQty5cIixcbiAgICB0aW1lclNwZW50U3VydmV5OiBcItCh0ZbQtyDRgdCw0YPQsNC70L3QsNC80LAg0LrQtdC30ZbQvdC00LUgezB9INC60LXRgtGW0YDQtNGW0qPRltC3LlwiLFxuICAgIHRpbWVyTGltaXRBbGw6IFwi0KHRltC3INCx0rHQuyDQsdC10YLRgtC1IHswfSDQtNC10L0gezF9INC60LXRgtGW0YDQtNGW0qPRltC3INC205nQvdC1IHsyfSDQtNC10L0gezN9INCx0q/QutGW0Lsg0YHQsNGD0LDQu9C90LDQvNCwINKv0YjRltC9LlwiLFxuICAgIHRpbWVyTGltaXRQYWdlOiBcItCh0ZbQtyDQsdKx0Lsg0LHQtdGC0YLQtSB7MH0g0LTQtdC9IHsxfSDQutC10YLRltGA0LTRltKj0ZbQty5cIixcbiAgICB0aW1lckxpbWl0U3VydmV5OiBcItCh0ZbQtyDQsdKv0LrRltC7INGB0LDRg9Cw0LvQvdCw0LzQsCDSr9GI0ZbQvSB7MH0g0LTQtdC9IHsxfSDQutC10YLRltGA0LTRltKj0ZbQtyBcIixcbiAgICBjbGVhckNhcHRpb246IFwi0KLQsNC30LDQu9Cw0YNcIixcbiAgICBzaWduYXR1cmVQbGFjZUhvbGRlcjogXCLQntGB0YvQvdC00LAg0LrRltGA0YNcIixcbiAgICBjaG9vc2VGaWxlQ2FwdGlvbjogXCLQpNCw0LnQuyDRgtCw0qPQtNCw0qPRi9C3XCIsXG4gICAgdGFrZVBob3RvQ2FwdGlvbjogXCLQpNC+0YLQvtGB0YPRgNC10YLQutC1INGC0q/RgdGDXCIsXG4gICAgY2FtZXJhUGxhY2VIb2xkZXI6IFwi0JrQsNC80LXRgNCw0L3RiyDQv9Cw0LnQtNCw0LvQsNC90YvQvyDRgdGD0YDQtdGC0LrQtSDRgtKv0YHRgyDSr9GI0ZbQvSDRgtOp0LzQtdC90LTQtdCz0ZYg0YLSr9C50LzQtdC90ZYg0LHQsNGB0YvSo9GL0LcuXCIsXG4gICAgZmlsZUNhbWVyYURyYWdBcmVhUGxhY2VIb2xkZXI6IFwi0KTQvtGC0L7QsNC/0L/QsNGA0LDRgtGC0Ysg0L/QsNC50LTQsNC70LDQvdGL0L8g0LrQtdGA0ZYg0LbSr9C60YLQtdGDINC90LXQvNC10YHQtSDRgdGD0YDQtdGC0LrQtSDRgtKv0YHRltGA0YMg0q/RiNGW0L0g0YTQsNC50LvQtNGLINCw0L/QsNGA0YvQvyDRgtCw0YHRgtCw0YvSo9GL0Lcg0L3QtdC80LXRgdC1INGC0LDSo9C00LDSo9GL0LcuXCIsXG4gICAgcmVwbGFjZUZpbGVDYXB0aW9uOiBcItCk0LDQudC70LTRiyDQsNGD0YvRgdGC0YvRgNGDXCIsXG4gICAgcmVtb3ZlRmlsZUNhcHRpb246IFwi0KTQsNC50LvQtNGLINC20L7QudGL0qPRi9C3XCIsXG4gICAgYm9vbGVhbkNoZWNrZWRMYWJlbDogXCLQmNOZXCIsXG4gICAgYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcItCW0L7Sm1wiLFxuICAgIGNvbmZpcm1SZW1vdmVGaWxlOiBcItCh0ZbQtyDQsdKx0Lsg0YTQsNC50LvQtNGLINC20L7Rj9GC0YvQvdGL0qPRi9C30pPQsCDRgdC10L3RltC80LTRltGB0ZbQtyDQsdC1OiB7MH0/XCIsXG4gICAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcItCh0ZbQtyDQsdCw0YDQu9GL0psg0YTQsNC50LvQtNCw0YDQtNGLINC20L7Rj9GC0YvQvdGL0qPRi9C30pPQsCDRgdC10L3RltC80LTRltGB0ZbQtyDQsdC1P1wiLFxuICAgIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCLQodKx0YDQsNKb0YLRi9KjINCw0YLQsNGD0YtcIixcbiAgICBtb2RhbENhbmNlbEJ1dHRvblRleHQ6IFwi0JHQvtC70LTRi9GA0LzQsNGDXCIsXG4gICAgbW9kYWxBcHBseUJ1dHRvblRleHQ6IFwi0prQvtC70LTQsNC90YNcIixcbiAgICBmaWx0ZXJTdHJpbmdQbGFjZWhvbGRlcjogXCLQhtC30LTQtdGDINKv0YjRltC9INGC0LXRgNGW0qPRltC3Li4uXCIsXG4gICAgZW1wdHlNZXNzYWdlOiBcItCa06nRgNGB0LXRgtGW0LvQtdGC0ZbQvSDQtNC10YDQtdC60YLQtdGAINC20L7Sm1wiLFxuICAgIG5vRW50cmllc1RleHQ6IFwi05jQt9GW0YDQs9C1INC20LDQt9Cx0LDQu9Cw0YAg0LbQvtKbLlxcbtCW0LDSo9CwINC20LDQt9Cx0LDQvdGLINKb0L7RgdGDINKv0YjRltC9INGC06nQvNC10L3QtNC10LPRliDRgtKv0LnQvNC10YjRltCz0ZbSo9C00ZYg0LHQsNGB0YvSo9GL0LcuXCIsXG4gICAgbm9FbnRyaWVzUmVhZG9ubHlUZXh0OiBcItCW0LDQt9Cx0LDQu9Cw0YAg0LbQvtKbLlwiLFxuICAgIG1vcmU6IFwi0prQvtGB0YvQvNGI0LBcIixcbiAgICB0YWdib3hEb25lQnV0dG9uQ2FwdGlvbjogXCLQltCQ0prQodCrXCIsXG4gICAgc2VsZWN0VG9SYW5rRW1wdHlSYW5rZWRBcmVhVGV4dDogXCLQkdCw0YDQu9GL0psg0YLQsNKj0LTQsNGD0LvQsNGAINGA0LDQvdC20LjRgNC70LXQvdCz0LXQvVwiLFxuICAgIHNlbGVjdFRvUmFua0VtcHR5VW5yYW5rZWRBcmVhVGV4dDogXCLQotCw0qPQtNCw0YPQtNGLINGA0LDQvdCz0YLQtdGDINKv0YjRltC9INC+0YHRi9C90LTQsCDQsNC/0LDRgNGL0L8g0YLQsNGB0YLQsNGDXCJcbn07XG5zdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3VydmV5TG9jYWxpemF0aW9uXCJdLmxvY2FsZXNbXCJra1wiXSA9IGthemFraFN0cmluZ3M7XG5zdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3VydmV5TG9jYWxpemF0aW9uXCJdLmxvY2FsZU5hbWVzW1wia2tcIl0gPSBcIkthemFraFwiO1xuLy8gVGhlIGZvbGxvd2luZyBzdHJpbmdzIGhhdmUgYmVlbiB0cmFuc2xhdGVkIGJ5IGEgbWFjaGluZSB0cmFuc2xhdGlvbiBzZXJ2aWNlXG4vLyBSZW1vdmUgdGhvc2Ugc3RyaW5ncyB0aGF0IHlvdSBoYXZlIGNvcnJlY3RlZCBtYW51YWxseVxuLy8gaW5kZXhUZXh0OiBcInswfSBvZiB7MX1cIiA9PiBcInsxfSB7MH1cIlxuLy8gcGFuZWxEeW5hbWljVGFiVGV4dEZvcm1hdDogXCJQYW5lbCB7cGFuZWxJbmRleH1cIiA9PiBcItCf0LDQvdC10LvRjCB7cGFuZWxJbmRleH1cIlxuLy8gcmF0aW5nT3B0aW9uc0NhcHRpb246IFwiU2VsZWN0Li4uXCIgPT4gXCLQotCw0qPQtNCw0YMuLi5cIlxuLy8gbWluRXJyb3I6IFwiVGhlIHZhbHVlIHNob3VsZCBub3QgYmUgbGVzcyB0aGFuIHswfVwiID0+IFwi0JzTmdC90ZYgezB9INC60LXQvCDQsdC+0LvQvNCw0YPRiyDRgtC40ZbRgVwiXG4vLyBtYXhFcnJvcjogXCJUaGUgdmFsdWUgc2hvdWxkIG5vdCBiZSBncmVhdGVyIHRoYW4gezB9XCIgPT4gXCLQnNOZ0L0gezB9INCw0YDRgtGL0psg0LHQvtC70LzQsNGD0Ysg0YLQuNGW0YFcIlxuLy8gZmlsZURyYWdBcmVhUGxhY2Vob2xkZXI6IFwiRHJhZyBhbmQgZHJvcCBhIGZpbGUgaGVyZSBvciBjbGljayB0aGUgYnV0dG9uIGJlbG93IGFuZCBjaG9vc2UgYSBmaWxlIHRvIHVwbG9hZC5cIiA9PiBcItCk0LDQudC70LTRiyDQvtGB0Ysg0LbQtdGA0LPQtSDQsNC/0LDRgNGL0L8g0YLQsNGB0YLQsNKj0YvQtyDQvdC10LzQtdGB0LUg0YLTqdC80LXQvdC00LXQs9GWINGC0q/QudC80LXQvdGWINCx0LDRgdGL0qPRi9C3INC205nQvdC1INC60LXRgNGWINC20q/QutGC0LXRgyDSr9GI0ZbQvSDRhNCw0LnQu9C00Ysg0YLQsNKj0LTQsNKj0YvQty5cIlxuLy8gZW1wdHlSb3dzVGV4dDogXCJUaGVyZSBhcmUgbm8gcm93cy5cIiA9PiBcItKa0LDRgtCw0YDQu9Cw0YAg0LbQvtKbLlwiXG4vLyBtdWx0aXBsZXRleHRfaXRlbW5hbWU6IFwidGV4dFwiID0+IFwi0LzTmdGC0ZbQvVwiXG4vLyBzaWduYXR1cmVQbGFjZUhvbGRlcjogXCJTaWduIGhlcmVcIiA9PiBcItCe0YHRi9C90LTQsCDQutGW0YDRg1wiXG4vLyBtb2RhbENhbmNlbEJ1dHRvblRleHQ6IFwiQ2FuY2VsXCIgPT4gXCLQkdC+0LvQtNGL0YDQvNCw0YNcIlxuLy8gbW9kYWxBcHBseUJ1dHRvblRleHQ6IFwiQXBwbHlcIiA9PiBcItKa0L7Qu9C00LDQvdGDXCJcbi8vIGZpbHRlclN0cmluZ1BsYWNlaG9sZGVyOiBcIlR5cGUgdG8gc2VhcmNoLi4uXCIgPT4gXCLQhtC30LTQtdGDINKv0YjRltC9INGC0LXRgNGW0qPRltC3Li4uXCJcbi8vIGVtcHR5TWVzc2FnZTogXCJObyBkYXRhIHRvIGRpc3BsYXlcIiA9PiBcItCa06nRgNGB0LXRgtGW0LvQtdGC0ZbQvSDQtNC10YDQtdC60YLQtdGAINC20L7Sm1wiXG4vLyBub0VudHJpZXNUZXh0OiBcIlRoZXJlIGFyZSBubyBlbnRyaWVzIHlldC5cXG5DbGljayB0aGUgYnV0dG9uIGJlbG93IHRvIGFkZCBhIG5ldyBlbnRyeS5cIiA9PiBcItOY0LfRltGA0LPQtSDQttCw0LfQsdCw0LvQsNGAINC20L7Smy5cXG7QltCw0qPQsCDQttCw0LfQsdCw0L3RiyDSm9C+0YHRgyDSr9GI0ZbQvSDRgtOp0LzQtdC90LTQtdCz0ZYg0YLSr9C50LzQtdGI0ZbQs9GW0qPQtNGWINCx0LDRgdGL0qPRi9C3LlwiXG4vLyBub0VudHJpZXNSZWFkb25seVRleHQ6IFwiVGhlcmUgYXJlIG5vIGVudHJpZXMuXCIgPT4gXCLQltCw0LfQsdCw0LvQsNGAINC20L7Smy5cIlxuLy8gbW9yZTogXCJNb3JlXCIgPT4gXCLSmtC+0YHRi9C80YjQsFwiXG4vLyB0YWdib3hEb25lQnV0dG9uQ2FwdGlvbjogXCJPS1wiID0+IFwi0JbQkNKa0KHQq1wiXG4vLyBzZWxlY3RUb1JhbmtFbXB0eVJhbmtlZEFyZWFUZXh0OiBcIkFsbCBjaG9pY2VzIGFyZSByYW5rZWRcIiA9PiBcItCR0LDRgNC70YvSmyDRgtCw0qPQtNCw0YPQu9Cw0YAg0YDQsNC90LbQuNGA0LvQtdC90LPQtdC9XCJcbi8vIHNlbGVjdFRvUmFua0VtcHR5VW5yYW5rZWRBcmVhVGV4dDogXCJEcmFnIGFuZCBkcm9wIGNob2ljZXMgaGVyZSB0byByYW5rIHRoZW1cIiA9PiBcItCi0LDSo9C00LDRg9C00Ysg0YDQsNC90LPRgtC10YMg0q/RiNGW0L0g0L7RgdGL0L3QtNCwINCw0L/QsNGA0YvQvyDRgtCw0YHRgtCw0YNcIi8vIHRha2VQaG90b0NhcHRpb246IFwiVGFrZSBQaG90b1wiID0+IFwi0KTQvtGC0L7RgdGD0YDQtdGC0LrQtSDRgtKv0YHRg1wiXG4vLyBjYW1lcmFQbGFjZUhvbGRlcjogXCJDbGljayB0aGUgYnV0dG9uIGJlbG93IHRvIHRha2UgYSBwaG90byB1c2luZyB0aGUgY2FtZXJhLlwiID0+IFwi0JrQsNC80LXRgNCw0L3RiyDQv9Cw0LnQtNCw0LvQsNC90YvQvyDRgdGD0YDQtdGC0LrQtSDRgtKv0YHRgyDSr9GI0ZbQvSDRgtOp0LzQtdC90LTQtdCz0ZYg0YLSr9C50LzQtdC90ZYg0LHQsNGB0YvSo9GL0LcuXCJcbi8vIGZpbGVDYW1lcmFEcmFnQXJlYVBsYWNlSG9sZGVyOiBcIkRyYWcgYW5kIGRyb3Agb3Igc2VsZWN0IGEgZmlsZSB0byB1cGxvYWQgb3IgdGFrZSBhIHBob3RvIHVzaW5nIHRoZSBjYW1lcmEuXCIgPT4gXCLQpNC+0YLQvtCw0L/Qv9Cw0YDQsNGC0YLRiyDQv9Cw0LnQtNCw0LvQsNC90YvQvyDQutC10YDRliDQttKv0LrRgtC10YMg0L3QtdC80LXRgdC1INGB0YPRgNC10YLQutC1INGC0q/RgdGW0YDRgyDSr9GI0ZbQvSDRhNCw0LnQu9C00Ysg0LDQv9Cw0YDRi9C/INGC0LDRgdGC0LDRi9Kj0YvQtyDQvdC10LzQtdGB0LUg0YLQsNKj0LTQsNKj0YvQty5cIlxuLy8gcmVwbGFjZUZpbGVDYXB0aW9uOiBcIlJlcGxhY2UgZmlsZVwiID0+IFwi0KTQsNC50LvQtNGLINCw0YPRi9GB0YLRi9GA0YNcIlxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL2xvY2FsaXphdGlvbi9rb3JlYW4udHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9sb2NhbGl6YXRpb24va29yZWFuLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDoga29yZWFuU3RyaW5ncyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJrb3JlYW5TdHJpbmdzXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4ga29yZWFuU3RyaW5nczsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHN1cnZleS1jb3JlICovIFwiLi9zcmMvZW50cmllcy9jb3JlLnRzXCIpO1xuXG52YXIga29yZWFuU3RyaW5ncyA9IHtcbiAgICBwYWdlUHJldlRleHQ6IFwi7J207KCEXCIsXG4gICAgcGFnZU5leHRUZXh0OiBcIuuLpOydjFwiLFxuICAgIGNvbXBsZXRlVGV4dDogXCLsmYTro4xcIixcbiAgICBwcmV2aWV3VGV4dDogXCLrr7jrpqzrs7TquLBcIixcbiAgICBlZGl0VGV4dDogXCLsiJjsoJVcIixcbiAgICBzdGFydFN1cnZleVRleHQ6IFwi7Iuc7J6RXCIsXG4gICAgb3RoZXJJdGVtVGV4dDogXCLquLDtg4AgKOyEpOuqhSlcIixcbiAgICBub25lSXRlbVRleHQ6IFwi7JeG7J2MXCIsXG4gICAgc2VsZWN0QWxsSXRlbVRleHQ6IFwi66qo65GQIOyEoO2DnVwiLFxuICAgIHByb2dyZXNzVGV4dDogXCLtjpjsnbTsp4AgezF9IC8gezB9XCIsXG4gICAgaW5kZXhUZXh0OiBcInswfSAvIHsxfVwiLFxuICAgIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCJ7MH0gLyB7MX1cIixcbiAgICBwYW5lbER5bmFtaWNUYWJUZXh0Rm9ybWF0OiBcIu2MqOuEkCB7cGFuZWxJbmRleH1cIixcbiAgICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwiezB9IC8gezF9IOqwnOydmCDsp4jrrLjsl5Ag64u167OA7ZWoXCIsXG4gICAgZW1wdHlTdXJ2ZXk6IFwi7ISk66y47KeA7JeQIOuztOyXrOyngOuKlCDtjpjsnbTsp4Drgpgg7KeI66y47J20IOyXhuyKteuLiOuLpC5cIixcbiAgICBjb21wbGV0aW5nU3VydmV5OiBcIuyEpOusuOyhsOyCrOulvCDsmYTro4ztlbQg7KO87IWU7IScIOqwkOyCrO2VqeuLiOuLpC5cIixcbiAgICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOiBcIuq4sOuhneyXkCDrlLDrpbTrqbQg7J2066+4IOyEpOusuCDsobDsgqzrpbwg66eI7LmY7IWo7Iq164uI64ukLlwiLFxuICAgIGxvYWRpbmdTdXJ2ZXk6IFwi7ISk66y47KGw7IKs6rCAIOuhnOuTnOykkeyeheuLiOuLpC4uLlwiLFxuICAgIHBsYWNlaG9sZGVyOiBcIuyEoO2DnS4uLlwiLFxuICAgIHJhdGluZ09wdGlvbnNDYXB0aW9uOiBcIuuTseq4ieydhCDrp6TquLDroKTrqbQg64iE66W07IS47JqULlwiLFxuICAgIHZhbHVlOiBcIuqwklwiLFxuICAgIHJlcXVpcmVkRXJyb3I6IFwi7KeI66y47JeQIOuLte2VmOyLnOyYpC5cIixcbiAgICByZXF1aXJlZEVycm9ySW5QYW5lbDogXCLtlZjrgpgg7J207IOB7J2YIOyniOusuOyXkCDri7XtlZjsi63si5zsmKQuXCIsXG4gICAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCLrqqjrk6Ag7ZaJ7JeQIOyeiOuKlCDsp4jrrLjsl5Ag64u17ZWY7Iut7Iuc7JikLlwiLFxuICAgIG51bWVyaWNFcnJvcjogXCLqsJLsnYAg7Iir7J6Q7Jes7JW8IO2VqeuLiOuLpC5cIixcbiAgICBtaW5FcnJvcjogXCLqsJLsnYAgezB967O064ukIOyekeycvOuptCDslYjrkKnri4jri6QuXCIsXG4gICAgbWF4RXJyb3I6IFwi6rCS7J2AIHswfeuztOuLpCDtgbQg7IiYIOyXhuyKteuLiOuLpC5cIixcbiAgICB0ZXh0TWluTGVuZ3RoOiBcIuuLteuzgOydmCDquLjsnbTripQg7LWc7IaMIHswfeyekOyXrOyVvCDsnoXri4jri6QuXCIsXG4gICAgdGV4dE1heExlbmd0aDogXCLri7Xrs4DsnZgg6ri47J2064qUIHswfeyekOulvCDstIjqs7wg7ZWgIOyImCDsl4bsirXri4jri6QuXCIsXG4gICAgdGV4dE1pbk1heExlbmd0aDogXCLri7Xrs4DsnZgg6ri47J2064qUIHswfSAtIHsxfeyekCDsgqzsnbTsl6zslbwg7ZWp64uI64ukLlwiLFxuICAgIG1pblJvd0NvdW50RXJyb3I6IFwi7LWc7IaMIHswfeqwnOydmCDtlonsnYQg7LGE7Jqw7Iut7Iuc7JikXCIsXG4gICAgbWluU2VsZWN0RXJyb3I6IFwi7LWc7IaMIHswfeqwnOydmCDrs4DsiJjrpbwg7ISg7YOd7ZWY7Iut7Iuc7JikLlwiLFxuICAgIG1heFNlbGVjdEVycm9yOiBcIuy1nOuMgCB7MH3qsJzsnZgg67OA7IiY66W8IOyEoO2Dne2VmOyLreyLnOyYpC5cIixcbiAgICBudW1lcmljTWluTWF4OiBcIid7MH0n7J2AIHsxfeuztOuLpCDtgazqsbDrgpgg6rCZ6rOgIHsyfeuztOuLpCDsnpHqsbDrgpgg6rCZ7JWE7JW87ZWp64uI64ukLlwiLFxuICAgIG51bWVyaWNNaW46IFwiJ3swfSfsnYAgezF967O064ukIO2BrOqxsOuCmCDqsJnslYTslbztlanri4jri6QuXCIsXG4gICAgbnVtZXJpY01heDogXCInezB9J+ydgCB7MX3rs7Tri6Qg7J6R6rGw64KYIOqwmeyVhOyVvO2VqeuLiOuLpC5cIixcbiAgICBpbnZhbGlkRW1haWw6IFwi7Jis67CU66W4IOydtOuplOydvCDso7zshozrpbwg7J6F66Cl7ZWY7Iut7Iuc7JikLlwiLFxuICAgIGludmFsaWRFeHByZXNzaW9uOiBcIu2RnO2YhOyLnTogezB97J2AICfssLgn7J207Ja07JW8IO2VqeuLiOuLpC5cIixcbiAgICB1cmxSZXF1ZXN0RXJyb3I6IFwiJ3swfSfsnLzroZwg7J6Y66q765CcIOyalOyyreyeheuLiOuLpC4gezF9XCIsXG4gICAgdXJsR2V0Q2hvaWNlc0Vycm9yOiBcIuu5hOyWtOyeiOuKlCDrjbDsnbTthLDrpbwg7JqU7LKt7ZaI6rGw64KYIOyemOuqu+uQnCDsho3shLHsnZgg6rK966Gc7J6F64uI64ukLlwiLFxuICAgIGV4Y2VlZE1heFNpemU6IFwi7YyM7J28IO2BrOq4sOqwgCB7MH3snYQg7LSI6rO8IO2VoCDsiJgg7JeG7Iq164uI64ukLlwiLFxuICAgIG90aGVyUmVxdWlyZWRFcnJvcjogXCLri6Trpbgg7KeI66y47J2EIOyekeyEse2VmOyLreyLnOyYpC5cIixcbiAgICB1cGxvYWRpbmdGaWxlOiBcIu2MjOydvCDsl4XroZzrk5wg7KSR7J6F64uI64ukLiDsnqDsi5wg7ZuEIOuLpOyLnCDsi5zrj4TtlZjsi63si5zsmKQuXCIsXG4gICAgbG9hZGluZ0ZpbGU6IFwi66Gc65OcIOykkS4uLlwiLFxuICAgIGNob29zZUZpbGU6IFwi7YyM7J28IOyEoO2DnS4uLlwiLFxuICAgIG5vRmlsZUNob3NlbjogXCLshKDtg53rkJwg7YyM7J287J20IOyXhuyKteuLiOuLpC5cIixcbiAgICBmaWxlRHJhZ0FyZWFQbGFjZWhvbGRlcjogXCLtjIzsnbzsnYQg7Jes6riw7JeQIOuGk+qxsOuCmCDslYTrnpgg67KE7Yq87J2EIO2BtOumre2VmOyXrCDtjIzsnbzsnYQg67aI65+s7Jik7IS47JqULlwiLFxuICAgIGNvbmZpcm1EZWxldGU6IFwi6riw66Gd7J2EIOyCreygnO2VmOyLnOqyoOyKteuLiOq5jD9cIixcbiAgICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcIiDsnbQg6rCS7J2AIOqzoOycoO2VtOyVvO2VqeuLiOuLpC5cIixcbiAgICBhZGRDb2x1bW46IFwi7Je0IOy2lOqwgFwiLFxuICAgIGFkZFJvdzogXCLtlokg7LaU6rCAXCIsXG4gICAgcmVtb3ZlUm93OiBcIuygnOqxsFwiLFxuICAgIGVtcHR5Um93c1RleHQ6IFwi7ZaJ7J20IOyXhuyKteuLiOuLpC5cIixcbiAgICBhZGRQYW5lbDogXCLstpTqsIBcIixcbiAgICByZW1vdmVQYW5lbDogXCLsoJzqsbBcIixcbiAgICBjaG9pY2VzX0l0ZW06IFwi7ZWt66qpXCIsXG4gICAgbWF0cml4X2NvbHVtbjogXCLsl7RcIixcbiAgICBtYXRyaXhfcm93OiBcIu2WiVwiLFxuICAgIG11bHRpcGxldGV4dF9pdGVtbmFtZTogXCLthY3siqTtirhcIixcbiAgICBzYXZpbmdEYXRhOiBcIuqysOqzvOqwgCDshJzrsoTsl5Ag7KCA7J6lIOykkeyeheuLiOuLpC4uLlwiLFxuICAgIHNhdmluZ0RhdGFFcnJvcjogXCLsmKTrpZjqsIAg67Cc7IOd7ZWY7JesIOqysOqzvOulvCDsoIDsnqXtlaAg7IiYIOyXhuyKteuLiOuLpC5cIixcbiAgICBzYXZpbmdEYXRhU3VjY2VzczogXCLqsrDqs7zqsIAg7ISx6rO17KCB7Jy866GcIOyggOyepeuQmOyXiOyKteuLiOuLpC5cIixcbiAgICBzYXZlQWdhaW5CdXR0b246IFwi64uk7IucIOyLnOuPhO2VmOyEuOyalC5cIixcbiAgICB0aW1lck1pbjogXCLrtoRcIixcbiAgICB0aW1lclNlYzogXCLstIhcIixcbiAgICB0aW1lclNwZW50QWxsOiBcIu2YhOyerCDtjpjsnbTsp4Dsl5DshJwgezB97J2EIOyGjOyalO2VtCDstJ0gezF97J20IOqxuOuguOyKteuLiOuLpC5cIixcbiAgICB0aW1lclNwZW50UGFnZTogXCLtmITsnqwg7Y6Y7J207KeA7JeQ7IScIHswfeydtCDqsbjroLjsirXri4jri6QuXCIsXG4gICAgdGltZXJTcGVudFN1cnZleTogXCLstJ0gezB97J20IOqxuOuguOyKteuLiOuLpC5cIixcbiAgICB0aW1lckxpbWl0QWxsOiBcIu2YhOyerCDtjpjsnbTsp4Dsl5DshJwgezB9L3sxfeydhCDshozsmpTtlbQg7LSdIHsyfS97M33snbQg6rG466C47Iq164uI64ukLlwiLFxuICAgIHRpbWVyTGltaXRQYWdlOiBcIu2YhOyerCDtjpjsnbTsp4Dsl5DshJwgezB9L3sxfeydtCDqsbjroLjsirXri4jri6QuXCIsXG4gICAgdGltZXJMaW1pdFN1cnZleTogXCLstJ0gezB9L3sxfeydtCDqsbjroLjsirXri4jri6QuXCIsXG4gICAgY2xlYXJDYXB0aW9uOiBcIuyngOyasOq4sFwiLFxuICAgIHNpZ25hdHVyZVBsYWNlSG9sZGVyOiBcIuyEnOuqhe2VmOyEuOyalC5cIixcbiAgICBjaG9vc2VGaWxlQ2FwdGlvbjogXCLtjIzsnbwg7ISg7YOdXCIsXG4gICAgdGFrZVBob3RvQ2FwdGlvbjogXCLsgqzsp4Qg7LCN6riwXCIsXG4gICAgY2FtZXJhUGxhY2VIb2xkZXI6IFwi7JWE656YIOuyhO2KvOydhCDtgbTrpq3tlZjsl6wg7Lm066mU652866GcIOyCrOynhOydhCDssI3sirXri4jri6QuXCIsXG4gICAgZmlsZUNhbWVyYURyYWdBcmVhUGxhY2VIb2xkZXI6IFwi7JeF66Gc65Oc7ZWgIO2MjOydvOydhCDrk5zrnpjqt7gg7JWkIOuTnOuhre2VmOqxsOuCmCDshKDtg53tlZjqsbDrgpgg7Lm066mU652866W8IOyCrOyaqe2VmOyXrCDsgqzsp4TsnYQg7LCN7Iq164uI64ukLlwiLFxuICAgIHJlcGxhY2VGaWxlQ2FwdGlvbjogXCLtjIzsnbwg67CU6r646riwXCIsXG4gICAgcmVtb3ZlRmlsZUNhcHRpb246IFwi7YyM7J28IOygnOqxsFwiLFxuICAgIGJvb2xlYW5DaGVja2VkTGFiZWw6IFwi7JiIXCIsXG4gICAgYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcIuyVhOuLiOyYpFwiLFxuICAgIGNvbmZpcm1SZW1vdmVGaWxlOiBcInswfSDtjIzsnbzsnYQg7KCc6rGwIO2VmOyLnOqyoOyKteuLiOq5jD9cIixcbiAgICBjb25maXJtUmVtb3ZlQWxsRmlsZXM6IFwi66qo65OgIO2MjOydvOydhCDsoJzqsbAg7ZWY7Iuc6rKg7Iq164uI6rmMP1wiLFxuICAgIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCLsp4jrrLgg7KCc66qpXCIsXG4gICAgbW9kYWxDYW5jZWxCdXR0b25UZXh0OiBcIuy3qOyGjFwiLFxuICAgIG1vZGFsQXBwbHlCdXR0b25UZXh0OiBcIuyggeyaqVwiLFxuICAgIGZpbHRlclN0cmluZ1BsYWNlaG9sZGVyOiBcIuqygOyDiSDsnKDtmJUuLi5cIixcbiAgICBlbXB0eU1lc3NhZ2U6IFwi7ZGc7Iuc7ZWgIOuNsOydtO2EsOqwgCDsl4bsirXri4jri6QuXCIsXG4gICAgbm9FbnRyaWVzVGV4dDogXCLslYTsp4Eg7ZWt66qp7J20IOyXhuyKteuLiOuLpC5cXG7sg4gg7ZWt66qp7J2EIOy2lOqwgO2VmOugpOuptCDslYTrnpgg67KE7Yq87J2EIO2BtOumre2VmOyEuOyalC5cIixcbiAgICBub0VudHJpZXNSZWFkb25seVRleHQ6IFwi7ZWt66qp7J20IOyXhuyKteuLiOuLpC5cIixcbiAgICBtb3JlOiBcIuuNlOuztOq4sFwiLFxuICAgIHRhZ2JveERvbmVCdXR0b25DYXB0aW9uOiBcIuq3uOuemFwiLFxuICAgIHNlbGVjdFRvUmFua0VtcHR5UmFua2VkQXJlYVRleHQ6IFwi66qo65OgIOyEoO2DnSDtla3rqqnsnbQg7Iic7JyE6rCAIOunpOqyqOynkeuLiOuLpC5cIixcbiAgICBzZWxlY3RUb1JhbmtFbXB0eVVucmFua2VkQXJlYVRleHQ6IFwi7Jes6riw7JeQIOyEoO2DnSDtla3rqqnsnYQg64GM7Ja064ukIOuGk+yVhCDsiJzsnITrpbwg66ek6rmB64uI64ukLlwiXG59O1xuc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN1cnZleUxvY2FsaXphdGlvblwiXS5sb2NhbGVzW1wia29cIl0gPSBrb3JlYW5TdHJpbmdzO1xuc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN1cnZleUxvY2FsaXphdGlvblwiXS5sb2NhbGVOYW1lc1tcImtvXCJdID0gXCLtlZzqta3slrRcIjtcbi8vIFRoZSBmb2xsb3dpbmcgc3RyaW5ncyBoYXZlIGJlZW4gdHJhbnNsYXRlZCBieSBhIG1hY2hpbmUgdHJhbnNsYXRpb24gc2VydmljZVxuLy8gUmVtb3ZlIHRob3NlIHN0cmluZ3MgdGhhdCB5b3UgaGF2ZSBjb3JyZWN0ZWQgbWFudWFsbHlcbi8vIHBhbmVsRHluYW1pY1RhYlRleHRGb3JtYXQ6IFwiUGFuZWwge3BhbmVsSW5kZXh9XCIgPT4gXCLtjKjrhJAge3BhbmVsSW5kZXh9XCJcbi8vIGVtcHR5TWVzc2FnZTogXCJObyBkYXRhIHRvIGRpc3BsYXlcIiA9PiBcIu2RnOyLnO2VoCDrjbDsnbTthLDqsIAg7JeG7Iq164uI64ukLlwiXG4vLyBub0VudHJpZXNSZWFkb25seVRleHQ6IFwiVGhlcmUgYXJlIG5vIGVudHJpZXMuXCIgPT4gXCLtla3rqqnsnbQg7JeG7Iq164uI64ukLlwiXG4vLyB0YWdib3hEb25lQnV0dG9uQ2FwdGlvbjogXCJPS1wiID0+IFwi6re4656YXCJcbi8vIHNlbGVjdFRvUmFua0VtcHR5UmFua2VkQXJlYVRleHQ6IFwiQWxsIGNob2ljZXMgYXJlIHJhbmtlZFwiID0+IFwi66qo65OgIOyEoO2DnSDtla3rqqnsnbQg7Iic7JyE6rCAIOunpOqyqOynkeuLiOuLpC5cIlxuLy8gc2VsZWN0VG9SYW5rRW1wdHlVbnJhbmtlZEFyZWFUZXh0OiBcIkRyYWcgYW5kIGRyb3AgY2hvaWNlcyBoZXJlIHRvIHJhbmsgdGhlbVwiID0+IFwi7Jes6riw7JeQIOyEoO2DnSDtla3rqqnsnYQg64GM7Ja064ukIOuGk+yVhCDsiJzsnITrpbwg66ek6rmB64uI64ukLlwiLy8gdGFrZVBob3RvQ2FwdGlvbjogXCJUYWtlIFBob3RvXCIgPT4gXCLsgqzsp4Qg7LCN6riwXCJcbi8vIGNhbWVyYVBsYWNlSG9sZGVyOiBcIkNsaWNrIHRoZSBidXR0b24gYmVsb3cgdG8gdGFrZSBhIHBob3RvIHVzaW5nIHRoZSBjYW1lcmEuXCIgPT4gXCLslYTrnpgg67KE7Yq87J2EIO2BtOumre2VmOyXrCDsubTrqZTrnbzroZwg7IKs7KeE7J2EIOywjeyKteuLiOuLpC5cIlxuLy8gZmlsZUNhbWVyYURyYWdBcmVhUGxhY2VIb2xkZXI6IFwiRHJhZyBhbmQgZHJvcCBvciBzZWxlY3QgYSBmaWxlIHRvIHVwbG9hZCBvciB0YWtlIGEgcGhvdG8gdXNpbmcgdGhlIGNhbWVyYS5cIiA9PiBcIuyXheuhnOuTnO2VoCDtjIzsnbzsnYQg65Oc656Y6re4IOyVpCDrk5zroa3tlZjqsbDrgpgg7ISg7YOd7ZWY6rGw64KYIOy5tOuplOudvOulvCDsgqzsmqntlZjsl6wg7IKs7KeE7J2EIOywjeyKteuLiOuLpC5cIlxuLy8gcmVwbGFjZUZpbGVDYXB0aW9uOiBcIlJlcGxhY2UgZmlsZVwiID0+IFwi7YyM7J28IOuwlOq+uOq4sFwiXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvbG9jYWxpemF0aW9uL2xhdHZpYW4udHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvbG9jYWxpemF0aW9uL2xhdHZpYW4udHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogbGF0dmlhblN1cnZleVN0cmluZ3MgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwibGF0dmlhblN1cnZleVN0cmluZ3NcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBsYXR2aWFuU3VydmV5U3RyaW5nczsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHN1cnZleS1jb3JlICovIFwiLi9zcmMvZW50cmllcy9jb3JlLnRzXCIpO1xuXG52YXIgbGF0dmlhblN1cnZleVN0cmluZ3MgPSB7XG4gICAgcGFnZVByZXZUZXh0OiBcIkllcHJpZWvFocSTamEgbGFwYVwiLFxuICAgIHBhZ2VOZXh0VGV4dDogXCJOxIFrYW3EgSBsYXBhXCIsXG4gICAgY29tcGxldGVUZXh0OiBcIkllc25pZWd0XCIsXG4gICAgcHJldmlld1RleHQ6IFwiUHJpZWvFoXNrYXTEq2p1bXNcIixcbiAgICBlZGl0VGV4dDogXCJSZWRpxKPEk3RcIixcbiAgICBzdGFydFN1cnZleVRleHQ6IFwiU8SBa3RcIixcbiAgICBvdGhlckl0ZW1UZXh0OiBcIkNpdHMgKGzFq2R6dSwgYXByYWtzdGlldCEpXCIsXG4gICAgbm9uZUl0ZW1UZXh0OiBcIk5hdlwiLFxuICAgIHNlbGVjdEFsbEl0ZW1UZXh0OiBcIkl6dsSTbMSTdGllcyB2aXN1c1wiLFxuICAgIHByb2dyZXNzVGV4dDogXCJ7MH0uIGxhcGEgbm8gezF9XCIsXG4gICAgaW5kZXhUZXh0OiBcInswfSBubyB7MX1cIixcbiAgICBwYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ6IFwiSWVyYWtzdMSrdCB7MH0gbm8gezF9XCIsXG4gICAgcGFuZWxEeW5hbWljVGFiVGV4dEZvcm1hdDogXCJQYW5lbGlzIHtwYW5lbEluZGV4fVwiLFxuICAgIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCJBdGJpbGTEk3RzIHV6IHswfSAvIHsxfSBqYXV0xIFqdW1pZW1cIixcbiAgICBlbXB0eVN1cnZleTogXCJOYXYgbmV2aWVuYSBqYXV0xIFqdW1hLlwiLFxuICAgIGNvbXBsZXRpbmdTdXJ2ZXk6IFwiUGF0ZWljYW1pZXMgSnVtcyBwYXIgYW5rZXRhcyBhaXpwaWxkxKvFoWFudSFcIixcbiAgICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOiBcIk3Fq3N1IGllcmFrc3RpIGxpZWNpbmEsIGthIErFq3MgamF1IGVzYXQgYWl6cGlsZMSramlzIMWhbyBhcHRhdWp1LlwiLFxuICAgIGxvYWRpbmdTdXJ2ZXk6IFwiSWVsxIFkZSBubyBzZXJ2ZXJhLi4uXCIsXG4gICAgcGxhY2Vob2xkZXI6IFwiSXp2xJNsxJN0aWVzLi4uXCIsXG4gICAgcmF0aW5nT3B0aW9uc0NhcHRpb246IFwiTm9zcGllZGlldCDFoWVpdCwgbGFpIG5vdsSTcnTEk3R1Li4uXCIsXG4gICAgdmFsdWU6IFwidmFsdWVcIixcbiAgICByZXF1aXJlZEVycm9yOiBcIkzFq2R6dSwgYXRiaWxkaWV0IHV6IGphdXTEgWp1bXUhXCIsXG4gICAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwiTMWrZHp1LCBhdGJpbGRpZXQgdXogdmlzbWF6IHZpZW51IGphdXTEgWp1bXUuXCIsXG4gICAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCJMxatkenUsIGF0YmlsZGlldCB1eiBqYXV0xIFqdW1pZW0gdmlzxIFzIHJpbmTEgXMuXCIsXG4gICAgbnVtZXJpY0Vycm9yOiBcIkF0YmlsZGVpIGlyIGrEgWLFq3Qgc2thaXRsaW0uXCIsXG4gICAgbWluRXJyb3I6IFwiVsSTcnTEq2JhIG5lZHLEq2tzdCBixat0IG1hesSBa2EgcGFyIHswfVwiLFxuICAgIG1heEVycm9yOiBcIlbEk3J0xKtiYSBuZWRyxKtrc3QgYsWrdCBsaWVsxIFrYSBwYXIgezB9XCIsXG4gICAgdGV4dE1pbkxlbmd0aDogXCJMxatkenUsIGlldmFkaWV0IHZpc21heiB7MH0gc2ltYm9sdXMuXCIsXG4gICAgdGV4dE1heExlbmd0aDogXCJMxatkenUsIGlldmFkaWV0IG1hesSBayBuZWvEgSB7MH0gcmFrc3R6xKttZXMuXCIsXG4gICAgdGV4dE1pbk1heExlbmd0aDogXCJMxatkenUsIGlldmFkaWV0IHZhaXLEgWsgbmVrxIEgezB9IHJha3N0esSrbWVzIHVuIG1hesSBayBuZWvEgSB7MX0gcmFrc3R6xKttZXMuXCIsXG4gICAgbWluUm93Q291bnRFcnJvcjogXCJMxatkenUsIGFpenBpbGRpZXQgdmlzbWF6IHswfSByaW5kYXMuXCIsXG4gICAgbWluU2VsZWN0RXJyb3I6IFwiTMWrZHp1LCBpenbEk2xpZXRpZXMgdmlzbWF6IHswfSB2YXJpYW50dS5cIixcbiAgICBtYXhTZWxlY3RFcnJvcjogXCJMxatkenUsIGl6dsSTbGlldGllcyBuZSB2YWlyYWsgcGFyIHswfSB2YXJpYW50aWVtLlwiLFxuICAgIG51bWVyaWNNaW5NYXg6IFwiJ3swfScgasSBYsWrdCB2aWVuxIFkYW0gdmFpIGxpZWzEgWthbSBuZWvEgSB7MX0sIHVuIHZpZW7EgWRhbSB2YWkgbWF6xIFrYW0sIG5la8SBIHsyfVwiLFxuICAgIG51bWVyaWNNaW46IFwiJ3swfScgasSBYsWrdCB2aWVuxIFkYW0gdmFpIGxpZWzEgWthbSB7MX1cIixcbiAgICBudW1lcmljTWF4OiBcIid7MH0nIGrEgWLFq3QgdmllbsSBZGFtIHZhaSBsaWVsxIFrYW0gezF9XCIsXG4gICAgaW52YWxpZEVtYWlsOiBcIkzFq2R6dSwgaWV2YWRpZXQgcGFyZWl6dSBlLXBhc3RhIGFkcmVzaSFcIixcbiAgICBpbnZhbGlkRXhwcmVzc2lvbjogXCJJenRlaWNpZW5hbTogezB9IGrEgWF0Z3JpZcW+IOKAnHRydWXigJ0uXCIsXG4gICAgdXJsUmVxdWVzdEVycm9yOiBcIlBpZXByYXPEq2p1bcSBIHRpa2EgYXRncmllenRhIGvEvMWrZGEg4oCcezB94oCdLiB7MX1cIixcbiAgICB1cmxHZXRDaG9pY2VzRXJyb3I6IFwiUGllcHJhc8SranVtcyBhdGdyaWV6YSB0dWvFoXVzIGRhdHVzIHZhaSByZWt2aXrEq3RzIOKAnHBhdGjigJ0gaXIgbmVwYXJlaXpzXCIsXG4gICAgZXhjZWVkTWF4U2l6ZTogXCJGYWlsYSBsaWVsdW1zIG5lZHLEq2tzdCBwxIFyc25pZWd0IHswfS5cIixcbiAgICBvdGhlclJlcXVpcmVkRXJyb3I6IFwiTMWrZHp1LCBpZXZhZGlldCBkYXR1cyBsYXVrxIEgJ0NpdHMnXCIsXG4gICAgdXBsb2FkaW5nRmlsZTogXCJKxatzdSBmYWlscyB0aWVrIGF1Z8WhdXBpZWzEgWTEk3RzLiBMxatkenUsIHV6Z2FpZGlldCBkYcW+YXMgc2VrdW5kZXMgdW4gbcSTxKNpbmlldCB2xJNscmVpei5cIixcbiAgICBsb2FkaW5nRmlsZTogXCJOb3RpZWsgaWVsxIFkZSAuLi5cIixcbiAgICBjaG9vc2VGaWxlOiBcIkl6dsSTbGlldGllcyBmYWlsdXMgLi4uXCIsXG4gICAgbm9GaWxlQ2hvc2VuOiBcIk5hdiBpenbEk2zEk3RzIG5ldmllbnMgZmFpbHNcIixcbiAgICBmaWxlRHJhZ0FyZWFQbGFjZWhvbGRlcjogXCJMYWkgcGlldmllbm90dSwgaWV2ZWxjaWV0IGZhaWx1IMWhZWl0IHZhaSBhcsSrIGtsaWvFocS3aW5pZXQgdXogemVtxIFrIHJlZHphbcSBcyBwb2dhc1wiLFxuICAgIGNvbmZpcm1EZWxldGU6IFwiVmFpIHbEk2xhdGllcyBpemR6xJNzdCBpZXJha3N0dT9cIixcbiAgICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcIsWgYWkgdsSTcnTEq2JhaSBqxIFixat0IHVuaWvEgWxhaS5cIixcbiAgICBhZGRDb2x1bW46IFwiUGlldmllbm90IGtvbG9ubnVcIixcbiAgICBhZGRSb3c6IFwiUGlldmllbm90IHJpbmR1XCIsXG4gICAgcmVtb3ZlUm93OiBcIk5vxYZlbXRcIixcbiAgICBlbXB0eVJvd3NUZXh0OiBcIk5hdiByaW5kdS5cIixcbiAgICBhZGRQYW5lbDogXCJQaWV2aWVubyBqYXVudVwiLFxuICAgIHJlbW92ZVBhbmVsOiBcIk5vxYZlbXRcIixcbiAgICBjaG9pY2VzX0l0ZW06IFwidmllbnVtc1wiLFxuICAgIG1hdHJpeF9jb2x1bW46IFwiU2xlamFcIixcbiAgICBtYXRyaXhfcm93OiBcIlJpbmRhXCIsXG4gICAgbXVsdGlwbGV0ZXh0X2l0ZW1uYW1lOiBcInRla3N0c1wiLFxuICAgIHNhdmluZ0RhdGE6IFwiUmV6dWx0xIF0aSB0aWVrIHNhZ2xhYsSBdGkgc2VydmVyxKsgLi4uXCIsXG4gICAgc2F2aW5nRGF0YUVycm9yOiBcIlJhZMSBcyBrxLzFq2RhLCB1biBtxJNzIG5ldmFyxJNqxIFtIHNhZ2xhYsSBdCByZXp1bHTEgXR1cy5cIixcbiAgICBzYXZpbmdEYXRhU3VjY2VzczogXCJSZXp1bHTEgXRpIHRpa2EgdmVpa3NtxKtnaSBzYWdsYWLEgXRpIVwiLFxuICAgIHNhdmVBZ2FpbkJ1dHRvbjogXCJNxJPEo2luaWV0IHbEk2xyZWl6XCIsXG4gICAgdGltZXJNaW46IFwibWluXCIsXG4gICAgdGltZXJTZWM6IFwic2VrXCIsXG4gICAgdGltZXJTcGVudEFsbDogXCLFoGFqxIEgbGFwxIEgZXNhdCBpenTEk3LEk2ppcyB7MH0gdW4ga29wxIEgezF9LlwiLFxuICAgIHRpbWVyU3BlbnRQYWdlOiBcIsWgYWrEgSBsYXDEgSBlc2F0IGl6dMSTcsSTamlzIHswfS5cIixcbiAgICB0aW1lclNwZW50U3VydmV5OiBcIktvcMSBIGVzYXQgaXp0xJNyxJNqaXMgezB9LlwiLFxuICAgIHRpbWVyTGltaXRBbGw6IFwixaBhasSBIGxhcMSBIGVzYXQgaXp0xJNyxJNqaXMgezB9IG5vIHsxfSB1biBrb3DEgSB7Mn0gbm8gezN9LlwiLFxuICAgIHRpbWVyTGltaXRQYWdlOiBcIsWgYWrEgSBsYXDEgSBlc2F0IGl6dMSTcsSTamlzIHswfSBubyB7MX0uXCIsXG4gICAgdGltZXJMaW1pdFN1cnZleTogXCJLb3DEgSBlc2F0IGl6dMSTcsSTamlzIHswfSBubyB7MX0uXCIsXG4gICAgY2xlYXJDYXB0aW9uOiBcIkl6dMSrcsSrdFwiLFxuICAgIHNpZ25hdHVyZVBsYWNlSG9sZGVyOiBcIlBhcmFrc3RpZXRpZXMgxaFlaXRcIixcbiAgICBjaG9vc2VGaWxlQ2FwdGlvbjogXCJJenbEk2zEk3RpZXMgZmFpbHVcIixcbiAgICB0YWtlUGhvdG9DYXB0aW9uOiBcIlV6xYZlbXQgZm90b2F0dMSTbHVcIixcbiAgICBjYW1lcmFQbGFjZUhvbGRlcjogXCJOb2tsaWvFocS3aW5pZXQgdXogcG9nYXMgemVtxIFrLCBsYWkgdXrFhmVtdHUgZm90b2F0dMSTbHUsIGl6bWFudG9qb3Qga2FtZXJ1LlwiLFxuICAgIGZpbGVDYW1lcmFEcmFnQXJlYVBsYWNlSG9sZGVyOiBcIlZlbGNpZXQgdW4gbm9tZXRpZXQgdmFpIGF0bGFzaWV0IGZhaWx1LCBrbyBhdWfFoXVwaWVsxIFkxJN0IHZhaSB1esWGZW10IGZvdG9hdHTEk2x1LCBpem1hbnRvam90IGthbWVydS5cIixcbiAgICByZXBsYWNlRmlsZUNhcHRpb246IFwiQWl6c3TEgXQgZmFpbHVcIixcbiAgICByZW1vdmVGaWxlQ2FwdGlvbjogXCJOb8WGZW1pZXQgxaFvIGZhaWx1XCIsXG4gICAgYm9vbGVhbkNoZWNrZWRMYWJlbDogXCJKxIFcIixcbiAgICBib29sZWFuVW5jaGVja2VkTGFiZWw6IFwiTsSTXCIsXG4gICAgY29uZmlybVJlbW92ZUZpbGU6IFwiVmFpIHRpZcWhxIFtIHbEk2xhdGllcyBub8WGZW10IMWhbyBmYWlsdTogezB9P1wiLFxuICAgIGNvbmZpcm1SZW1vdmVBbGxGaWxlczogXCJWYWkgdGllxaHEgW0gdsSTbGF0aWVzIG5vxYZlbXQgdmlzdXMgZmFpbHVzP1wiLFxuICAgIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCJKYXV0xIFqdW1hIG5vc2F1a3Vtc1wiLFxuICAgIG1vZGFsQ2FuY2VsQnV0dG9uVGV4dDogXCJBdGNlbHRcIixcbiAgICBtb2RhbEFwcGx5QnV0dG9uVGV4dDogXCJQaWVsaWV0b3RcIixcbiAgICBmaWx0ZXJTdHJpbmdQbGFjZWhvbGRlcjogXCJJZXJha3N0aWV0LCBsYWkgbWVrbMSTdHUuLi5cIixcbiAgICBlbXB0eU1lc3NhZ2U6IFwiTmF2IGRhdHUsIGtvIHLEgWTEq3RcIixcbiAgICBub0VudHJpZXNUZXh0OiBcIlbEk2wgbmF2IG5ldmllbmEgaWVyYWtzdGEuXFxuTm9rbGlrxaHEt2luaWV0IHV6IHplbcSBayBlc2/FocSBcyBwb2dhcywgbGFpIHBpZXZpZW5vdHUgamF1bnUgaWVyYWtzdHUuXCIsXG4gICAgbm9FbnRyaWVzUmVhZG9ubHlUZXh0OiBcIkllcmFrc3R1IG5hdi5cIixcbiAgICBtb3JlOiBcIlZhaXLEgWtcIixcbiAgICB0YWdib3hEb25lQnV0dG9uQ2FwdGlvbjogXCJMQUJJXCIsXG4gICAgc2VsZWN0VG9SYW5rRW1wdHlSYW5rZWRBcmVhVGV4dDogXCJWaXNhcyBpenbEk2xlcyBpciBzYXJpbmRvdGFzXCIsXG4gICAgc2VsZWN0VG9SYW5rRW1wdHlVbnJhbmtlZEFyZWFUZXh0OiBcIlZlbGNpZXQgdW4gbm9tZXRpZXQgaXp2xJNsZXMgaWVzcMSTamFzIMWhZWl0LCBsYWkgdMSBcyBzYXJpbmRvdHVcIlxufTtcbnN1cnZleV9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdXJ2ZXlMb2NhbGl6YXRpb25cIl0ubG9jYWxlc1tcImx2XCJdID0gbGF0dmlhblN1cnZleVN0cmluZ3M7XG5zdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3VydmV5TG9jYWxpemF0aW9uXCJdLmxvY2FsZU5hbWVzW1wibHZcIl0gPSBcImxhdHZpZcWhdVwiO1xuLy8gVGhlIGZvbGxvd2luZyBzdHJpbmdzIGhhdmUgYmVlbiB0cmFuc2xhdGVkIGJ5IGEgbWFjaGluZSB0cmFuc2xhdGlvbiBzZXJ2aWNlXG4vLyBSZW1vdmUgdGhvc2Ugc3RyaW5ncyB0aGF0IHlvdSBoYXZlIGNvcnJlY3RlZCBtYW51YWxseVxuLy8gcGFuZWxEeW5hbWljVGFiVGV4dEZvcm1hdDogXCJQYW5lbCB7cGFuZWxJbmRleH1cIiA9PiBcIlBhbmVsaXMge3BhbmVsSW5kZXh9XCJcbi8vIGVtcHR5TWVzc2FnZTogXCJObyBkYXRhIHRvIGRpc3BsYXlcIiA9PiBcIk5hdiBkYXR1LCBrbyByxIFkxKt0XCJcbi8vIG5vRW50cmllc1JlYWRvbmx5VGV4dDogXCJUaGVyZSBhcmUgbm8gZW50cmllcy5cIiA9PiBcIkllcmFrc3R1IG5hdi5cIlxuLy8gbW9yZTogXCJNb3JlXCIgPT4gXCJWYWlyxIFrXCJcbi8vIHRhZ2JveERvbmVCdXR0b25DYXB0aW9uOiBcIk9LXCIgPT4gXCJMQUJJXCJcbi8vIHNlbGVjdFRvUmFua0VtcHR5UmFua2VkQXJlYVRleHQ6IFwiQWxsIGNob2ljZXMgYXJlIHJhbmtlZFwiID0+IFwiVmlzYXMgaXp2xJNsZXMgaXIgc2FyaW5kb3Rhc1wiXG4vLyBzZWxlY3RUb1JhbmtFbXB0eVVucmFua2VkQXJlYVRleHQ6IFwiRHJhZyBhbmQgZHJvcCBjaG9pY2VzIGhlcmUgdG8gcmFuayB0aGVtXCIgPT4gXCJWZWxjaWV0IHVuIG5vbWV0aWV0IGl6dsSTbGVzIGllc3DEk2phcyDFoWVpdCwgbGFpIHTEgXMgc2FyaW5kb3R1XCIvLyB0YWtlUGhvdG9DYXB0aW9uOiBcIlRha2UgUGhvdG9cIiA9PiBcIlV6xYZlbXQgZm90b2F0dMSTbHVcIlxuLy8gY2FtZXJhUGxhY2VIb2xkZXI6IFwiQ2xpY2sgdGhlIGJ1dHRvbiBiZWxvdyB0byB0YWtlIGEgcGhvdG8gdXNpbmcgdGhlIGNhbWVyYS5cIiA9PiBcIk5va2xpa8WhxLdpbmlldCB1eiBwb2dhcyB6ZW3EgWssIGxhaSB1esWGZW10dSBmb3RvYXR0xJNsdSwgaXptYW50b2pvdCBrYW1lcnUuXCJcbi8vIGZpbGVDYW1lcmFEcmFnQXJlYVBsYWNlSG9sZGVyOiBcIkRyYWcgYW5kIGRyb3Agb3Igc2VsZWN0IGEgZmlsZSB0byB1cGxvYWQgb3IgdGFrZSBhIHBob3RvIHVzaW5nIHRoZSBjYW1lcmEuXCIgPT4gXCJWZWxjaWV0IHVuIG5vbWV0aWV0IHZhaSBhdGxhc2lldCBmYWlsdSwga28gYXVnxaF1cGllbMSBZMSTdCB2YWkgdXrFhmVtdCBmb3RvYXR0xJNsdSwgaXptYW50b2pvdCBrYW1lcnUuXCJcbi8vIHJlcGxhY2VGaWxlQ2FwdGlvbjogXCJSZXBsYWNlIGZpbGVcIiA9PiBcIkFpenN0xIF0IGZhaWx1XCJcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9sb2NhbGl6YXRpb24vbGl0aHVhbmlhbi50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9sb2NhbGl6YXRpb24vbGl0aHVhbmlhbi50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBsaXRodWFuaWFTdXJ2ZXlTdHJpbmdzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImxpdGh1YW5pYVN1cnZleVN0cmluZ3NcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBsaXRodWFuaWFTdXJ2ZXlTdHJpbmdzOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBzdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgc3VydmV5LWNvcmUgKi8gXCIuL3NyYy9lbnRyaWVzL2NvcmUudHNcIik7XG5cbnZhciBsaXRodWFuaWFTdXJ2ZXlTdHJpbmdzID0ge1xuICAgIHBhZ2VQcmV2VGV4dDogXCJBdGdhbFwiLFxuICAgIHBhZ2VOZXh0VGV4dDogXCJUb2xpYXVcIixcbiAgICBjb21wbGV0ZVRleHQ6IFwiQmFpZ3RpXCIsXG4gICAgcHJldmlld1RleHQ6IFwiUGVyxb5pxatyYVwiLFxuICAgIGVkaXRUZXh0OiBcIlJlZGFndW90aVwiLFxuICAgIHN0YXJ0U3VydmV5VGV4dDogXCJQcmFkxJd0aVwiLFxuICAgIG90aGVySXRlbVRleHQ6IFwiS2l0YSAoxK92ZXN0aSlcIixcbiAgICBub25lSXRlbVRleHQ6IFwiTsSXcmFcIixcbiAgICBzZWxlY3RBbGxJdGVtVGV4dDogXCJQYXNpcmlua3RpIHZpc3VzXCIsXG4gICAgcHJvZ3Jlc3NUZXh0OiBcIlB1c2xhcGlzIHswfSBpxaEgezF9XCIsXG4gICAgaW5kZXhUZXh0OiBcInsxfSB7MH1cIixcbiAgICBwYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ6IFwixK5yYcWheXRpIHswfSBpxaEgezF9XCIsXG4gICAgcGFuZWxEeW5hbWljVGFiVGV4dEZvcm1hdDogXCJTa3lkZWxpcyB7cGFuZWxJbmRleH1cIixcbiAgICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwiQXRzYWvElyDEryB7MH0gLyB7MX0ga2xhdXNpbXVzXCIsXG4gICAgZW1wdHlTdXJ2ZXk6IFwiQXBrbGF1c29qZSBuxJdyYSBtYXRvbW8gcHVzbGFwaW8gYXIga2xhdXNpbW8uXCIsXG4gICAgY29tcGxldGluZ1N1cnZleTogXCJExJdrb2phbWUgdcW+IGRhbHl2YXZpbcSFIGFwa2xhdXNvamUhXCIsXG4gICAgY29tcGxldGluZ1N1cnZleUJlZm9yZTogXCJNxatzxbMgxK9yYcWhYWkgcm9kbywga2FkIGphdSBhdGxpa290ZSDFoWnEhSBhcGtsYXVzxIUuXCIsXG4gICAgbG9hZGluZ1N1cnZleTogXCJQcmHFoW9tZSBwYWxhdWt0aS4uLlwiLFxuICAgIHBsYWNlaG9sZGVyOiBcIlBhc2lyaW5rdGkuLi5cIixcbiAgICByYXRpbmdPcHRpb25zQ2FwdGlvbjogXCLFvXltxJd0aS4uLlwiLFxuICAgIHZhbHVlOiBcInJlaWvFoW3El1wiLFxuICAgIHJlcXVpcmVkRXJyb3I6IFwiQsWrdGluYSBhdHNha3l0aSDEryDFocSvIGtsYXVzaW3EhS5cIixcbiAgICByZXF1aXJlZEVycm9ySW5QYW5lbDogXCJCxat0aW5hIGF0c2FreXRpIGJlbnQgxK8gdmllbsSFIGtsYXVzaW3EhS5cIixcbiAgICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIlByYcWhb21lIGF0c2FreXRpIMSvIGtsYXVzaW11cyB2aXNvc2UgZWlsdXTEl3NlLlwiLFxuICAgIG51bWVyaWNFcnJvcjogXCJUdXJpIGLFq3RpIHNrYWnEjWlhaS5cIixcbiAgICBtaW5FcnJvcjogXCJWZXJ0xJcgbmV0dXLEl3TFsyBixat0aSBtYcW+ZXNuxJcgbmVpIHswfVwiLFxuICAgIG1heEVycm9yOiBcIlZlcnTElyBuZXR1csSXdMWzIGLFq3RpIGRpZGVzbsSXIG5laSB7MH1cIixcbiAgICB0ZXh0TWluTGVuZ3RoOiBcIlByYcWhb21lIHN1dmVzdGkgYmVudCB7MH0gc2ltYm9saXVzLlwiLFxuICAgIHRleHRNYXhMZW5ndGg6IFwiUHJhxaFvbWUgc3V2ZXN0aSBtYcW+aWF1IG5laSB7MH0gc2ltYm9sacWzLlwiLFxuICAgIHRleHRNaW5NYXhMZW5ndGg6IFwiUHJhxaFvbWUgc3V2ZXN0aSBkYXVnaWF1IG5laSB7MH0gaXIgbWHFvmlhdSBuZWkgezF9IHNpbWJvbGnFsy5cIixcbiAgICBtaW5Sb3dDb3VudEVycm9yOiBcIlByYcWhb21lIHN1dmVzdGkgbmUgbWHFvmlhdSBuZWkgezB9IGVpbHXEjWnFsy5cIixcbiAgICBtaW5TZWxlY3RFcnJvcjogXCJQcmHFoW9tZSBwYXNpcmlua3RpIGJlbnQgezB9IHZhcmlhbnTFsy5cIixcbiAgICBtYXhTZWxlY3RFcnJvcjogXCJQYXNpcmlua2l0ZSBuZSBkYXVnaWF1IGthaXAgezB9IHZhcmlhbnR1cy5cIixcbiAgICBudW1lcmljTWluTWF4OiBcIid7MH0nIHR1cmkgYsWrdGkgbHlndXMgYXJiYSBkaWRlc25pcyBuZWkgezF9IGlyIGx5Z3VzIGFyYmEgbWHFvmVzbmlzIG5laSB7Mn1cIixcbiAgICBudW1lcmljTWluOiBcIid7MH0nIHR1csSXdMWzIGLFq3RpIGx5Z3VzIGFyYmEgZGlkZXNuaXMgbmVpIHsxfVwiLFxuICAgIG51bWVyaWNNYXg6IFwiJ3swfScgdHVyxJd0xbMgYsWrdGkgbHlndXMgYXIgbWHFvmVzbmlzIHXFviB7MX1cIixcbiAgICBpbnZhbGlkRW1haWw6IFwiUHJhxaFvbWUgxK92ZXN0aSBnYWxpb2phbnTEryBlbGVrdHJvbmluaW8gcGHFoXRvIGFkcmVzxIUuXCIsXG4gICAgaW52YWxpZEV4cHJlc3Npb246IFwiUmVpa8WhbcSXOiB7MH0gdHVyaSBncsSFxb5pbnRpICd0cnVlJy5cIixcbiAgICB1cmxSZXF1ZXN0RXJyb3I6IFwiVcW+a2xhdXNhIGdyxIXFvmlubyBrbGFpZMSFJ3swfScuIHsxfVwiLFxuICAgIHVybEdldENob2ljZXNFcnJvcjogXCJVxb5rbGF1c2EgZ3LEhcW+aW5vIHR1xaHEjWl1cyBkdW9tZW5pcyBhcmJhICdwYXRoJyBzYXZ5YsSXIHlyYSBuZXRlaXNpbmdhXCIsXG4gICAgZXhjZWVkTWF4U2l6ZTogXCJGYWlsbyBkeWRpcyBuZXR1cmkgdmlyxaF5dGkgezB9LlwiLFxuICAgIG90aGVyUmVxdWlyZWRFcnJvcjogXCLErnZlc2tpdGUga2l0xIUgcmVpa8WhbcSZLlwiLFxuICAgIHVwbG9hZGluZ0ZpbGU6IFwiSsWrc8WzIGZhaWxhcyB5cmEga2VsaWFtYXMuIFBhbGF1a2l0ZSBrZWxldMSFIHNla3VuZMW+acWzIGlyIGJhbmR5a2l0ZSBkYXIga2FydMSFLlwiLFxuICAgIGxvYWRpbmdGaWxlOiBcIlByYcWhb21lIHBhbGF1a3RpLi4uXCIsXG4gICAgY2hvb3NlRmlsZTogXCJQYXNpcmlua3RpIGZhaWzEhSh1cykuLi5cIixcbiAgICBub0ZpbGVDaG9zZW46IFwiTmVwYXNpcmlua3RhcyBqb2tzIGZhaWxhc1wiLFxuICAgIGZpbGVEcmFnQXJlYVBsYWNlaG9sZGVyOiBcIk51dmlsa2l0ZSBmYWlsxIUgxI1pYSBhcmJhIHNwdXN0ZWzEl2tpdGUgxb5lbWlhdSBlc2FudMSvIG15Z3R1a8SFIGlyIHBhc2lyaW5raXRlIGZhaWzEhSwga3VyxK8gbm9yaXRlIMSva2VsdGkuXCIsXG4gICAgY29uZmlybURlbGV0ZTogXCJBciBub3JpdGUgacWhdHJpbnRpIMSvcmHFocSFP1wiLFxuICAgIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwixaBpIHJlaWvFoW3ElyB0dXLEl3TFsyBixat0aSB1bmlrYWxpLlwiLFxuICAgIGFkZENvbHVtbjogXCJQcmlkxJd0aSBzdHVscGVsxK9cIixcbiAgICBhZGRSb3c6IFwiUHJpZMSXdGkgZWlsdXTEmVwiLFxuICAgIHJlbW92ZVJvdzogXCJJxaF0cmludGlcIixcbiAgICBlbXB0eVJvd3NUZXh0OiBcIkVpbGnFsyBuxJdyYS5cIixcbiAgICBhZGRQYW5lbDogXCJQcmlkxJd0aSBuYXVqxIVcIixcbiAgICByZW1vdmVQYW5lbDogXCJJxaF0cmludGlcIixcbiAgICBjaG9pY2VzX0l0ZW06IFwiZWxlbWVudGFzXCIsXG4gICAgbWF0cml4X2NvbHVtbjogXCJTdHVscGVsaXNcIixcbiAgICBtYXRyaXhfcm93OiBcIkVpbHV0xJdcIixcbiAgICBtdWx0aXBsZXRleHRfaXRlbW5hbWU6IFwiU01TIMW+aW51dMSXXCIsXG4gICAgc2F2aW5nRGF0YTogXCJSZXp1bHRhdGFpIHNhdWdvbWkgc2VydmVyeWplLi4uXCIsXG4gICAgc2F2aW5nRGF0YUVycm9yOiBcIsSudnlrbyBrbGFpZGEgaXIgbWVzIG5lZ2FsxJdqb21lIGnFoXNhdWdvdGkgcmV6dWx0YXTFsy5cIixcbiAgICBzYXZpbmdEYXRhU3VjY2VzczogXCJSZXp1bHRhdGFpIGJ1dm8gacWhc2F1Z290aSBzxJdrbWluZ2FpIVwiLFxuICAgIHNhdmVBZ2FpbkJ1dHRvbjogXCJCYW5keXRpIGRhciBrYXJ0xIVcIixcbiAgICB0aW1lck1pbjogXCJtaW5cIixcbiAgICB0aW1lclNlYzogXCJzZWtcIixcbiAgICB0aW1lclNwZW50QWxsOiBcIlByYWxlaWRvdGUgezB9IMWhaWFtZSBwdXNsYXB5amUgaXIgezF9IGnFoSB2aXNvLlwiLFxuICAgIHRpbWVyU3BlbnRQYWdlOiBcIlByYWxlaWRvdGUgezB9IMWhaWFtZSBwdXNsYXB5amUuXCIsXG4gICAgdGltZXJTcGVudFN1cnZleTogXCJQcmFsZWlkb3RlIHswfSBpxaEgdmlzby5cIixcbiAgICB0aW1lckxpbWl0QWxsOiBcIlByYWxlaWRvdGUgezB9IGnFoSB7MX0gxaFpYW1lIHB1c2xhcHlqZSBpciB7Mn0gacWhIHszfSBpxaEgdmlzby5cIixcbiAgICB0aW1lckxpbWl0UGFnZTogXCJQcmFsZWlkb3RlIHswfSBpxaEgezF9IMWhaWFtZSBwdXNsYXB5amUuXCIsXG4gICAgdGltZXJMaW1pdFN1cnZleTogXCJQcmFsZWlkb3RlIHswfSBpxaEgezF9IGnFoSB2aXNvLlwiLFxuICAgIGNsZWFyQ2FwdGlvbjogXCJWYWx5dGlcIixcbiAgICBzaWduYXR1cmVQbGFjZUhvbGRlcjogXCJQYXNpcmHFoXlraXRlIMSNaWFcIixcbiAgICBjaG9vc2VGaWxlQ2FwdGlvbjogXCJQYXNpcmlua3RpIGZhaWzEhVwiLFxuICAgIHRha2VQaG90b0NhcHRpb246IFwiRm90b2dyYWZ1b3RpXCIsXG4gICAgY2FtZXJhUGxhY2VIb2xkZXI6IFwiU3B1c3RlbMSXa2l0ZSDFvmVtaWF1IGVzYW50xK8gbXlndHVrxIUsIGthZCBudWZvdG9ncmFmdW90dW3El3RlIGZvdG9hcGFyYXR1LlwiLFxuICAgIGZpbGVDYW1lcmFEcmFnQXJlYVBsYWNlSG9sZGVyOiBcIk51dmlsa2l0ZSBhcmJhIHBhc2lyaW5raXRlIGZhaWzEhSwga3VyxK8gbm9yaXRlIMSva2VsdGkgYXJiYSBudWZvdG9ncmFmdW90aSBuYXVkb2RhbWkgZm90b2FwYXJhdMSFLlwiLFxuICAgIHJlcGxhY2VGaWxlQ2FwdGlvbjogXCJQYWtlaXNraXRlIGZhaWzEhVwiLFxuICAgIHJlbW92ZUZpbGVDYXB0aW9uOiBcIknFoXRyaW50aSDFocSvIGZhaWzEhVwiLFxuICAgIGJvb2xlYW5DaGVja2VkTGFiZWw6IFwiVGFpcFwiLFxuICAgIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCJOZVwiLFxuICAgIGNvbmZpcm1SZW1vdmVGaWxlOiBcIkFyIHRpa3JhaSBub3JpdGUgcGHFoWFsaW50aSDFocSvIGZhaWzEhTogezB9P1wiLFxuICAgIGNvbmZpcm1SZW1vdmVBbGxGaWxlczogXCJBciB0aWtyYWkgbm9yaXRlIHBhxaFhbGludGkgdmlzdXMgZmFpbHVzP1wiLFxuICAgIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCJLbGF1c2ltbyBwYXZhZGluaW1hc1wiLFxuICAgIG1vZGFsQ2FuY2VsQnV0dG9uVGV4dDogXCJBdMWhYXVrdGlcIixcbiAgICBtb2RhbEFwcGx5QnV0dG9uVGV4dDogXCJWYXJ0b3RpXCIsXG4gICAgZmlsdGVyU3RyaW5nUGxhY2Vob2xkZXI6IFwixK52ZXNraXRlLCBrYWQgaWXFoWtvdHVtxJd0ZS4uLlwiLFxuICAgIGVtcHR5TWVzc2FnZTogXCJOxJdyYSByb2RvbcWzIGR1b21lbsWzXCIsXG4gICAgbm9FbnRyaWVzVGV4dDogXCLErnJhxaHFsyBkYXIgbsSXcmEuXFxuU3B1c3RlbMSXa2l0ZSDFvmVtaWF1IGVzYW50xK8gbXlndHVrxIUsIGthZCBwcmlkxJd0dW3El3RlIG5hdWrEhSDEr3JhxaHEhS5cIixcbiAgICBub0VudHJpZXNSZWFkb25seVRleHQ6IFwixK5yYcWhxbMgbsSXcmEuXCIsXG4gICAgbW9yZTogXCJEYXVnaWF1XCIsXG4gICAgdGFnYm94RG9uZUJ1dHRvbkNhcHRpb246IFwiR0VSQUlcIixcbiAgICBzZWxlY3RUb1JhbmtFbXB0eVJhbmtlZEFyZWFUZXh0OiBcIlZpc2kgcGFzaXJpbmtpbWFpIHlyYSByZWl0aW5ndW9qYW1pXCIsXG4gICAgc2VsZWN0VG9SYW5rRW1wdHlVbnJhbmtlZEFyZWFUZXh0OiBcIk51dmlsa2l0ZSBwYXNpcmlua2ltdXMgxI1pYSwga2FkIGp1b3MgcmVpdGluZ3VvdHVtxJd0ZVwiXG59O1xuc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN1cnZleUxvY2FsaXphdGlvblwiXS5sb2NhbGVzW1wibHRcIl0gPSBsaXRodWFuaWFTdXJ2ZXlTdHJpbmdzO1xuc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN1cnZleUxvY2FsaXphdGlvblwiXS5sb2NhbGVOYW1lc1tcImx0XCJdID0gXCJsaWV0dXZpxbNcIjtcbi8vIFRoZSBmb2xsb3dpbmcgc3RyaW5ncyBoYXZlIGJlZW4gdHJhbnNsYXRlZCBieSBhIG1hY2hpbmUgdHJhbnNsYXRpb24gc2VydmljZVxuLy8gUmVtb3ZlIHRob3NlIHN0cmluZ3MgdGhhdCB5b3UgaGF2ZSBjb3JyZWN0ZWQgbWFudWFsbHlcbi8vIGluZGV4VGV4dDogXCJ7MH0gb2YgezF9XCIgPT4gXCJ7MX0gezB9XCJcbi8vIHBhbmVsRHluYW1pY1RhYlRleHRGb3JtYXQ6IFwiUGFuZWwge3BhbmVsSW5kZXh9XCIgPT4gXCJTa3lkZWxpcyB7cGFuZWxJbmRleH1cIlxuLy8gcmF0aW5nT3B0aW9uc0NhcHRpb246IFwiU2VsZWN0Li4uXCIgPT4gXCLFvXltxJd0aS4uLlwiXG4vLyBtaW5FcnJvcjogXCJUaGUgdmFsdWUgc2hvdWxkIG5vdCBiZSBsZXNzIHRoYW4gezB9XCIgPT4gXCJWZXJ0xJcgbmV0dXLEl3TFsyBixat0aSBtYcW+ZXNuxJcgbmVpIHswfVwiXG4vLyBtYXhFcnJvcjogXCJUaGUgdmFsdWUgc2hvdWxkIG5vdCBiZSBncmVhdGVyIHRoYW4gezB9XCIgPT4gXCJWZXJ0xJcgbmV0dXLEl3TFsyBixat0aSBkaWRlc27ElyBuZWkgezB9XCJcbi8vIGZpbGVEcmFnQXJlYVBsYWNlaG9sZGVyOiBcIkRyYWcgYW5kIGRyb3AgYSBmaWxlIGhlcmUgb3IgY2xpY2sgdGhlIGJ1dHRvbiBiZWxvdyBhbmQgY2hvb3NlIGEgZmlsZSB0byB1cGxvYWQuXCIgPT4gXCJOdXZpbGtpdGUgZmFpbMSFIMSNaWEgYXJiYSBzcHVzdGVsxJdraXRlIMW+ZW1pYXUgZXNhbnTEryBteWd0dWvEhSBpciBwYXNpcmlua2l0ZSBmYWlsxIUsIGt1csSvIG5vcml0ZSDEr2tlbHRpLlwiXG4vLyBlbXB0eVJvd3NUZXh0OiBcIlRoZXJlIGFyZSBubyByb3dzLlwiID0+IFwiRWlsacWzIG7El3JhLlwiXG4vLyBtdWx0aXBsZXRleHRfaXRlbW5hbWU6IFwidGV4dFwiID0+IFwiU01TIMW+aW51dMSXXCJcbi8vIHNpZ25hdHVyZVBsYWNlSG9sZGVyOiBcIlNpZ24gaGVyZVwiID0+IFwiUGFzaXJhxaF5a2l0ZSDEjWlhXCJcbi8vIG1vZGFsQ2FuY2VsQnV0dG9uVGV4dDogXCJDYW5jZWxcIiA9PiBcIkF0xaFhdWt0aVwiXG4vLyBtb2RhbEFwcGx5QnV0dG9uVGV4dDogXCJBcHBseVwiID0+IFwiVmFydG90aVwiXG4vLyBmaWx0ZXJTdHJpbmdQbGFjZWhvbGRlcjogXCJUeXBlIHRvIHNlYXJjaC4uLlwiID0+IFwixK52ZXNraXRlLCBrYWQgaWXFoWtvdHVtxJd0ZS4uLlwiXG4vLyBlbXB0eU1lc3NhZ2U6IFwiTm8gZGF0YSB0byBkaXNwbGF5XCIgPT4gXCJOxJdyYSByb2RvbcWzIGR1b21lbsWzXCJcbi8vIG5vRW50cmllc1RleHQ6IFwiVGhlcmUgYXJlIG5vIGVudHJpZXMgeWV0LlxcbkNsaWNrIHRoZSBidXR0b24gYmVsb3cgdG8gYWRkIGEgbmV3IGVudHJ5LlwiID0+IFwixK5yYcWhxbMgZGFyIG7El3JhLlxcblNwdXN0ZWzEl2tpdGUgxb5lbWlhdSBlc2FudMSvIG15Z3R1a8SFLCBrYWQgcHJpZMSXdHVtxJd0ZSBuYXVqxIUgxK9yYcWhxIUuXCJcbi8vIG5vRW50cmllc1JlYWRvbmx5VGV4dDogXCJUaGVyZSBhcmUgbm8gZW50cmllcy5cIiA9PiBcIsSucmHFocWzIG7El3JhLlwiXG4vLyBtb3JlOiBcIk1vcmVcIiA9PiBcIkRhdWdpYXVcIlxuLy8gdGFnYm94RG9uZUJ1dHRvbkNhcHRpb246IFwiT0tcIiA9PiBcIkdFUkFJXCJcbi8vIHNlbGVjdFRvUmFua0VtcHR5UmFua2VkQXJlYVRleHQ6IFwiQWxsIGNob2ljZXMgYXJlIHJhbmtlZFwiID0+IFwiVmlzaSBwYXNpcmlua2ltYWkgeXJhIHJlaXRpbmd1b2phbWlcIlxuLy8gc2VsZWN0VG9SYW5rRW1wdHlVbnJhbmtlZEFyZWFUZXh0OiBcIkRyYWcgYW5kIGRyb3AgY2hvaWNlcyBoZXJlIHRvIHJhbmsgdGhlbVwiID0+IFwiTnV2aWxraXRlIHBhc2lyaW5raW11cyDEjWlhLCBrYWQganVvcyByZWl0aW5ndW90dW3El3RlXCIvLyB0YWtlUGhvdG9DYXB0aW9uOiBcIlRha2UgUGhvdG9cIiA9PiBcIkZvdG9ncmFmdW90aVwiXG4vLyBjYW1lcmFQbGFjZUhvbGRlcjogXCJDbGljayB0aGUgYnV0dG9uIGJlbG93IHRvIHRha2UgYSBwaG90byB1c2luZyB0aGUgY2FtZXJhLlwiID0+IFwiU3B1c3RlbMSXa2l0ZSDFvmVtaWF1IGVzYW50xK8gbXlndHVrxIUsIGthZCBudWZvdG9ncmFmdW90dW3El3RlIGZvdG9hcGFyYXR1LlwiXG4vLyBmaWxlQ2FtZXJhRHJhZ0FyZWFQbGFjZUhvbGRlcjogXCJEcmFnIGFuZCBkcm9wIG9yIHNlbGVjdCBhIGZpbGUgdG8gdXBsb2FkIG9yIHRha2UgYSBwaG90byB1c2luZyB0aGUgY2FtZXJhLlwiID0+IFwiTnV2aWxraXRlIGFyYmEgcGFzaXJpbmtpdGUgZmFpbMSFLCBrdXLEryBub3JpdGUgxK9rZWx0aSBhcmJhIG51Zm90b2dyYWZ1b3RpIG5hdWRvZGFtaSBmb3RvYXBhcmF0xIUuXCJcbi8vIHJlcGxhY2VGaWxlQ2FwdGlvbjogXCJSZXBsYWNlIGZpbGVcIiA9PiBcIlBha2Vpc2tpdGUgZmFpbMSFXCJcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9sb2NhbGl6YXRpb24vbWFjZWRvbmlhbi50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9sb2NhbGl6YXRpb24vbWFjZWRvbmlhbi50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBtYWNlZG9uaWFuU3VydmV5U3RyaW5ncyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJtYWNlZG9uaWFuU3VydmV5U3RyaW5nc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIG1hY2Vkb25pYW5TdXJ2ZXlTdHJpbmdzOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBzdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgc3VydmV5LWNvcmUgKi8gXCIuL3NyYy9lbnRyaWVzL2NvcmUudHNcIik7XG5cbnZhciBtYWNlZG9uaWFuU3VydmV5U3RyaW5ncyA9IHtcbiAgICBwYWdlUHJldlRleHQ6IFwi0J/RgNC10YLRhdC+0LTQvdCwXCIsXG4gICAgcGFnZU5leHRUZXh0OiBcItCh0LvQtdC00L3QvlwiLFxuICAgIGNvbXBsZXRlVGV4dDogXCLQl9Cw0LLRgNGI0LhcIixcbiAgICBwcmV2aWV3VGV4dDogXCLQn9GA0LXQs9C70LXQtFwiLFxuICAgIGVkaXRUZXh0OiBcItCj0YDQtdC00YPQstCw0ZrQtVwiLFxuICAgIHN0YXJ0U3VydmV5VGV4dDogXCLQl9Cw0L/QvtGH0L3QtdGC0LVcIixcbiAgICBvdGhlckl0ZW1UZXh0OiBcItCU0YDRg9Cz0L4gKNC+0L/QuNGI0LgpXCIsXG4gICAgbm9uZUl0ZW1UZXh0OiBcItCd0LjRiNGC0L5cIixcbiAgICBzZWxlY3RBbGxJdGVtVGV4dDogXCLQodC10LvQtdC60YLQuNGA0LDRmCDRgdC1XCIsXG4gICAgcHJvZ3Jlc3NUZXh0OiBcItCh0YLRgNCw0L3QuNGG0LAgezB9INC+0LQgezF9XCIsXG4gICAgaW5kZXhUZXh0OiBcInswfSDQvdCwIHsxfVwiLFxuICAgIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCLQodC90LjQvNC4IHswfSDQvtC0IHsxfVwiLFxuICAgIHBhbmVsRHluYW1pY1RhYlRleHRGb3JtYXQ6IFwi0J/QsNC90LXQuyB70L/QsNC90LXQuyDQmNC90LTQtdC60YF9XCIsXG4gICAgcXVlc3Rpb25zUHJvZ3Jlc3NUZXh0OiBcItCe0LTQs9C+0LLQvtGA0LXQvdC4INC90LAgezB9IC8gezF9INC/0YDQsNGI0LDRmtCwXCIsXG4gICAgZW1wdHlTdXJ2ZXk6IFwi0J3QtdC80LAg0LLQuNC00LvQuNCy0LAg0YHRgtGA0LDQvdC40YbQsCDQuNC70Lgg0L/RgNCw0YjQsNGa0LUg0LLQviDQuNGB0YLRgNCw0LbRg9Cy0LDRmtC10YLQvi5cIixcbiAgICBjb21wbGV0aW5nU3VydmV5OiBcItCS0Lgg0LHQu9Cw0LPQvtC00LDRgNC40LzQtSDRiNGC0L4g0LPQviDQt9Cw0LLRgNGI0LjQstGC0LUg0LjRgdGC0YDQsNC20YPQstCw0ZrQtdGC0L4hXCIsXG4gICAgY29tcGxldGluZ1N1cnZleUJlZm9yZTogXCLQndCw0YjQuNGC0LUg0LfQsNC/0LjRgdC4INC/0L7QutCw0LbRg9Cy0LDQsNGCINC00LXQutCwINCy0LXRnNC1INGB0YLQtSDQs9C+INC30LDQstGA0YjQuNC70LUg0L7QstCwINC40YHRgtGA0LDQttGD0LLQsNGa0LUuXCIsXG4gICAgbG9hZGluZ1N1cnZleTogXCLQkNC90LrQtdGC0LDRgtCwINGB0LUg0LLRh9C40YLRg9Cy0LAgLi4uXCIsXG4gICAgcGxhY2Vob2xkZXI6IFwi0JjQt9Cx0LXRgNC10YLQtSAuLi5cIixcbiAgICByYXRpbmdPcHRpb25zQ2FwdGlvbjogXCLQmNC30LHQtdGA0LXRgtC1Li4uXCIsXG4gICAgdmFsdWU6IFwi0LLRgNC10LTQvdC+0YHRglwiLFxuICAgIHJlcXVpcmVkRXJyb3I6IFwi0JLQtSDQvNC+0LvQsNC8LCDQvtC00LPQvtCy0L7RgNC10YLQtSDQvdCwINC/0YDQsNGI0LDRmtC10YLQvi5cIixcbiAgICByZXF1aXJlZEVycm9ySW5QYW5lbDogXCLQktC1INC80L7Qu9Cw0LwsINC+0LTQs9C+0LLQvtGA0LXRgtC1INCx0LDRgNC10Lwg0L3QsCDQtdC00L3QviDQv9GA0LDRiNCw0ZrQtS5cIixcbiAgICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcItCS0LUg0LzQvtC70LjQvNC1LCDQvtC00LPQvtCy0L7RgNC10YLQtSDQvdCwINC/0YDQsNGI0LDRmtCwINCy0L4g0YHQuNGC0LUg0YDQtdC00L7QstC4LlwiLFxuICAgIG51bWVyaWNFcnJvcjogXCLQktGA0LXQtNC90L7RgdGC0LAg0YLRgNC10LHQsCDQtNCwINCx0LjQtNC1INC90YPQvNC10YDQuNGH0LrQsC5cIixcbiAgICBtaW5FcnJvcjogXCLQktGA0LXQtNC90L7RgdGC0LAg0L3QtSDRgtGA0LXQsdCwINC00LAg0LHQuNC00LUg0L/QvtC80LDQu9CwINC+0LQgezB9XCIsXG4gICAgbWF4RXJyb3I6IFwi0JLRgNC10LTQvdC+0YHRgtCwINC90LUg0YLRgNC10LHQsCDQtNCwINCx0LjQtNC1INC/0L7Qs9C+0LvQtdC80LAg0L7QtCB7MH1cIixcbiAgICB0ZXh0TWluTGVuZ3RoOiBcItCS0L3QtdGB0LXRgtC1INC90LDRmNC80LDQu9C60YMgezB9INC30L3QsNC6L9GG0LguXCIsXG4gICAgdGV4dE1heExlbmd0aDogXCLQktC90LXRgdC10YLQtSDQvdC1INC/0L7QstC10ZzQtSDQvtC0IHswfSDQt9C90LDQui/RhtC4LlwiLFxuICAgIHRleHRNaW5NYXhMZW5ndGg6IFwi0JLQvdC10YHQtdGC0LUg0L3QsNGY0LzQsNC70LrRgyB7MH0g0Lgg0L3QtSDQv9C+0LLQtdGc0LUg0L7QtCB7MX0g0LfQvdCw0YbQuC5cIixcbiAgICBtaW5Sb3dDb3VudEVycm9yOiBcItCf0L7Qv9C+0LvQvdC10YLQtSDQvdCw0ZjQvNCw0LvQutGDIHswfSDRgNC10LQo0L7QstC4KS5cIixcbiAgICBtaW5TZWxlY3RFcnJvcjogXCLQktC1INC80L7Qu9C40LzQtSDQuNC30LHQtdGA0LXRgtC1INC90LDRmNC80LDQu9C60YMgezB9INCy0LDRgNC40ZjQsNC90YLQsCjQuCkuXCIsXG4gICAgbWF4U2VsZWN0RXJyb3I6IFwi0JjQt9Cx0LXRgNC10YLQtSDQvdC1INC/0L7QstC10ZzQtSDQvtC0IHswfSDQstCw0YDQuNGY0LDQvdGC0LAo0LgpLlwiLFxuICAgIG51bWVyaWNNaW5NYXg6IFwiJ3swfScg0YLRgNC10LHQsCDQtNCwINCx0LjQtNC1INC90LDRmNC80LDQu9C60YMgezF9INC4INC90LDRmNC80L3QvtCz0YMgezJ9XCIsXG4gICAgbnVtZXJpY01pbjogXCInezB9JyDRgtGA0LXQsdCwINC00LAg0LHQuNC00LUg0L3QsNGY0LzQsNC70LrRgyB7MX1cIixcbiAgICBudW1lcmljTWF4OiBcIid7MH0nINGC0YDQtdCx0LAg0LTQsCDQsdC40LTQtSDQvdCw0ZjQvNC90L7Qs9GDIHsxfVwiLFxuICAgIGludmFsaWRFbWFpbDogXCLQktC1INC80L7Qu9C40LzQtSDQstC90LXRgdC10YLQtSDQstCw0LvQuNC00L3QsCDQtS3QvNCw0LjQuyDQsNC00YDQtdGB0LAuXCIsXG4gICAgaW52YWxpZEV4cHJlc3Npb246IFwi0JjQt9GA0LDQt9C+0YI6IHswfSDRgtGA0LXQsdCwINC00LAg0YHQtSDQstGA0LDRgtC4ICd0cnVlJy5cIixcbiAgICB1cmxSZXF1ZXN0RXJyb3I6IFwi0JHQsNGA0LDRmtC10YLQviDQstGA0LDRgtC4INCz0YDQtdGI0LrQsCAnezB9Jy4gezF9IFwiLFxuICAgIHVybEdldENob2ljZXNFcnJvcjogXCLQkdCw0YDQsNGa0LXRgtC+INCy0YDQsNGC0Lgg0L/RgNCw0LfQvdC4INC/0L7QtNCw0YLQvtGG0Lgg0LjQu9C4INGB0LLQvtGY0YHRgtCy0L7RgtC+ICdwYXRoJyDQtSDQvdC10YLQvtGH0L3QvlwiLFxuICAgIGV4Y2VlZE1heFNpemU6IFwi0JPQvtC70LXQvNC40L3QsNGC0LAg0L3QsCDQtNCw0YLQvtGC0LXQutCw0YLQsCDQvdC1INGC0YDQtdCx0LAg0LTQsCDQvdCw0LTQvNC40L3Rg9Cy0LAgezB9LlwiLFxuICAgIG90aGVyUmVxdWlyZWRFcnJvcjogXCLQktC90LXRgdC10YLQtSDRmNCwINC00YDRg9Cz0LDRgtCwINCy0YDQtdC00L3QvtGB0YIuXCIsXG4gICAgdXBsb2FkaW5nRmlsZTogXCLQktCw0YjQsNGC0LAg0LTQsNGC0L7RgtC10LrQsCDRgdC1INC/0L7RgdGC0LDQstGD0LLQsC4g0JLQtSDQvNC+0LvQuNC80LUg0L/QvtGH0LXQutCw0ZjRgtC1INC90LXQutC+0LvQutGDINGB0LXQutGD0L3QtNC4INC4INC+0LHQuNC00LXRgtC1INGB0LUg0L/QvtCy0YLQvtGA0L3Qvi5cIixcbiAgICBsb2FkaW5nRmlsZTogXCLQodC1INCy0YfQuNGC0YPQstCwIC4uLlwiLFxuICAgIGNob29zZUZpbGU6IFwi0JjQt9Cx0LXRgNC10YLQtSDQtNCw0YLQvtGC0LXQutCwICjQuCkgLi4uXCIsXG4gICAgbm9GaWxlQ2hvc2VuOiBcItCd0LUg0YHQtSDQuNC30LHRgNCw0L3QuCDQtNCw0YLQvtGC0LXQutC4XCIsXG4gICAgZmlsZURyYWdBcmVhUGxhY2Vob2xkZXI6IFwi0J/Rg9GI0YLQtdGC0LUg0LTQsNGC0L7RgtC10LrQsCDQvtCy0LTQtSDQuNC70Lgg0LrQu9C40LrQvdC10YLQtSDQvdCwINC60L7Qv9GH0LXRgtC+INC/0L7QtNC+0LvRgyDQt9CwINC00LAg0ZjQsCDQstGH0LjRgtCw0YLQtSDQtNCw0YLQvtGC0LXQutCw0YLQsC5cIixcbiAgICBjb25maXJtRGVsZXRlOiBcItCU0LDQu9C4INGB0LDQutCw0YLQtSDQtNCwINCz0L4g0LjQt9Cx0YDQuNGI0LXRgtC1INC30LDQv9C40YHQvtGCP1wiLFxuICAgIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwi0J7QstCw0LAg0LLRgNC10LTQvdC+0YHRgiDRgtGA0LXQsdCwINC00LAg0LHQuNC00LUg0LXQtNC40L3RgdGC0LLQtdC90LAuXCIsXG4gICAgYWRkQ29sdW1uOiBcItCU0L7QtNCw0Zgg0LrQvtC70L7QvdCwXCIsXG4gICAgYWRkUm93OiBcItCU0L7QtNCw0LTQuCDRgNC10LRcIixcbiAgICByZW1vdmVSb3c6IFwi0J7RgtGB0YLRgNCw0L3QuFwiLFxuICAgIGVtcHR5Um93c1RleHQ6IFwi0J3QtdC80LAg0YDQtdC00L7QstC4LlwiLFxuICAgIGFkZFBhbmVsOiBcItCU0L7QtNCw0LTQuCDQvdC+0LLQvlwiLFxuICAgIHJlbW92ZVBhbmVsOiBcItCe0YLRgdGC0YDQsNC90LhcIixcbiAgICBjaG9pY2VzX0l0ZW06IFwi0YHRgtCw0LLQutCwXCIsXG4gICAgbWF0cml4X2NvbHVtbjogXCLQmtC+0LvQvtC90LBcIixcbiAgICBtYXRyaXhfcm93OiBcItCg0LXQtFwiLFxuICAgIG11bHRpcGxldGV4dF9pdGVtbmFtZTogXCLRgtC10LrRgdGCLlwiLFxuICAgIHNhdmluZ0RhdGE6IFwi0KDQtdC30YPQu9GC0LDRgtC40YLQtSDRgdC1INC30LDRh9GD0LLRg9Cy0LDQsNGCINC90LAg0YHQtdGA0LLQtdGA0L7RgiAuLi5cIixcbiAgICBzYXZpbmdEYXRhRXJyb3I6IFwi0J3QsNGB0YLQsNC90LAg0LPRgNC10YjQutCwINC4INC90LUg0LzQvtC20LXQstC80LUg0LTQsCDQs9C4INC30LDRh9GD0LLQsNC80LUg0YDQtdC30YPQu9GC0LDRgtC40YLQtS5cIixcbiAgICBzYXZpbmdEYXRhU3VjY2VzczogXCLQoNC10LfRg9C70YLQsNGC0LjRgtC1INCx0LXQsCDRg9GB0L/QtdGI0L3QviDQt9Cw0YfRg9Cy0LDQvdC4IVwiLFxuICAgIHNhdmVBZ2FpbkJ1dHRvbjogXCLQntCx0LjQtNC4INGB0LUg0L/QvtCy0YLQvtGA0L3QvlwiLFxuICAgIHRpbWVyTWluOiBcItC80LjQvVwiLFxuICAgIHRpbWVyU2VjOiBcItGB0LXQulwiLFxuICAgIHRpbWVyU3BlbnRBbGw6IFwi0J/QvtC80LjQvdCw0LLRgtC1IHswfSDQvdCwINC+0LLQsNCwINGB0YLRgNCw0L3QuNGG0LAg0Lgg0LLQutGD0L/QvdC+IHsxfS5cIixcbiAgICB0aW1lclNwZW50UGFnZTogXCLQn9C+0LzQuNC90LDQstGC0LUgezB9INC90LAg0L7QstCw0LAg0YHRgtGA0LDQvdC40YbQsC5cIixcbiAgICB0aW1lclNwZW50U3VydmV5OiBcItCS0LjQtSDQv9C+0YLRgNC+0YjQuNCy0YLQtSDQstC60YPQv9C90L4gezB9LlwiLFxuICAgIHRpbWVyTGltaXRBbGw6IFwi0J/QvtC80LjQvdCw0LLRgtC1IHswfSDQvtC0IHsxfSDQvdCwINC+0LLQsNCwINGB0YLRgNCw0L3QuNGG0LAg0LggezJ9INC+0LQgezN9INCy0LrRg9C/0L3Qvi5cIixcbiAgICB0aW1lckxpbWl0UGFnZTogXCLQn9C+0LzQuNC90LDQstGC0LUgezB9INC+0LQgezF9INC90LAg0L7QstCw0LAg0YHRgtGA0LDQvdC40YbQsC5cIixcbiAgICB0aW1lckxpbWl0U3VydmV5OiBcItCS0LjQtSDQv9C+0YLRgNC+0YjQuNCy0YLQtSDQstC60YPQv9C90L4gezB9INC+0LQgezF9LlwiLFxuICAgIGNsZWFyQ2FwdGlvbjogXCLQlNCwINGA0LDRgdGH0LjRgdGC0LhcIixcbiAgICBzaWduYXR1cmVQbGFjZUhvbGRlcjogXCLQn9C+0YLQv9C40YjQuCDRgdC1INC+0LLQtNC1LlwiLFxuICAgIGNob29zZUZpbGVDYXB0aW9uOiBcItCY0LfQsdC10YDQtdGC0LUg0LTQsNGC0L7RgtC10LrQsFwiLFxuICAgIHRha2VQaG90b0NhcHRpb246IFwi0KTQvtGC0L7Qs9GA0LDRhNC40YDQsNGY0YLQtVwiLFxuICAgIGNhbWVyYVBsYWNlSG9sZGVyOiBcItCa0LvQuNC60L3QtdGC0LUg0L3QsCDQutC+0L/Rh9C10YLQviDQv9C+0LTQvtC70YMg0LfQsCDQtNCwINGE0L7RgtC+0LPRgNCw0YTQuNGA0LDRgtC1INC60L7RgNC40YHRgtC10ZjRnNC4INGY0LAg0LrQsNC80LXRgNCw0YLQsC5cIixcbiAgICBmaWxlQ2FtZXJhRHJhZ0FyZWFQbGFjZUhvbGRlcjogXCLQktC70LXRh9C10YLQtSDQuCDRhNGA0LvQsNGY0YLQtSDQuNC70Lgg0LjQt9Cx0LXRgNC10YLQtSDQtNCw0YLQvtGC0LXQutCwINC30LAg0LrQsNGH0YPQstCw0ZrQtSDQuNC70Lgg0YTQvtGC0L7Qs9GA0LDRhNC40YDQsNGa0LUg0LrQvtGA0LjRgdGC0LXRmNGc0Lgg0ZjQsCDQutCw0LzQtdGA0LDRgtCwLlwiLFxuICAgIHJlcGxhY2VGaWxlQ2FwdGlvbjogXCLQl9Cw0LzQtdC90LXRgtC1INCz0L4g0YTQsNGY0LvQvtGCLlwiLFxuICAgIHJlbW92ZUZpbGVDYXB0aW9uOiBcItCe0YLRgdGC0YDQsNC90LXRgtC1INGY0LAg0L7QstCw0LAg0LTQsNGC0L7RgtC10LrQsFwiLFxuICAgIGJvb2xlYW5DaGVja2VkTGFiZWw6IFwi0JTQsFwiLFxuICAgIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCLQndC1XCIsXG4gICAgY29uZmlybVJlbW92ZUZpbGU6IFwi0JTQsNC70Lgg0YHRgtC1INGB0LjQs9GD0YDQvdC4INC00LXQutCwINGB0LDQutCw0YLQtSDQtNCwINGY0LAg0L7RgtGB0YLRgNCw0L3QuNGC0LUg0L7QstCw0LAg0LTQsNGC0L7RgtC10LrQsDogezB9P1wiLFxuICAgIGNvbmZpcm1SZW1vdmVBbGxGaWxlczogXCLQlNCw0LvQuCDRgdGC0LUg0YHQuNCz0YPRgNC90Lgg0LTQtdC60LAg0YHQsNC60LDRgtC1INC00LAg0LPQuCDQvtGC0YHRgtGA0LDQvdC40YLQtSDRgdC40YLQtSDQtNCw0YLQvtGC0LXQutC4P1wiLFxuICAgIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCLQndCw0YHQu9C+0LIg0L3QsCDQv9GA0LDRiNCw0ZrQtdGC0L5cIixcbiAgICBtb2RhbENhbmNlbEJ1dHRvblRleHQ6IFwi0J7RgtC60LDQttC4XCIsXG4gICAgbW9kYWxBcHBseUJ1dHRvblRleHQ6IFwi0JDQv9C70LjRhtC40YDQsNGYXCIsXG4gICAgZmlsdGVyU3RyaW5nUGxhY2Vob2xkZXI6IFwi0KLQuNC/INC30LAg0L/RgNC10LHQsNGA0YPQstCw0ZrQtS4uLlwiLFxuICAgIGVtcHR5TWVzc2FnZTogXCLQndC10LzQsCDQv9C+0LTQsNGC0L7RhtC4INC30LAg0L/RgNC40LrQsNC20YPQstCw0ZrQtVwiLFxuICAgIG5vRW50cmllc1RleHQ6IFwi0KHQtdGD0YjRgtC1INC90LXQvNCwINCy0LvQtdC30L3QuNGG0LguXFxu0JrQu9C40LrQvdC10YLQtSDQvdCwINC60L7Qv9GH0LXRgtC+INC/0L7QtNC+0LvRgyDQt9CwINC00LAg0LTQvtC00LDQtNC10YLQtSDQvdC+0LIg0LLQu9C10LcuXCIsXG4gICAgbm9FbnRyaWVzUmVhZG9ubHlUZXh0OiBcItCd0LXQvNCwINCy0LvQtdC30L3QuNGG0LguXCIsXG4gICAgbW9yZTogXCLQn9C+0LLQtdGc0LVcIixcbiAgICB0YWdib3hEb25lQnV0dG9uQ2FwdGlvbjogXCLQlNCe0JHQoNCeXCIsXG4gICAgc2VsZWN0VG9SYW5rRW1wdHlSYW5rZWRBcmVhVGV4dDogXCLQodC40YLQtSDQuNC30LHQvtGA0Lgg0YHQtSDRgNCw0L3Qs9C40YDQsNC90LhcIixcbiAgICBzZWxlY3RUb1JhbmtFbXB0eVVucmFua2VkQXJlYVRleHQ6IFwi0JLQu9C10YfQtdGC0LUg0Lgg0YTRgNC70LXRgtC1INCz0L4g0LjQt9Cx0L7RgNC+0YIg0L7QstC00LUg0LfQsCDQtNCwINCz0Lgg0YDQsNC90LPQuNGA0LDRgtC1XCJcbn07XG5zdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3VydmV5TG9jYWxpemF0aW9uXCJdLmxvY2FsZXNbXCJta1wiXSA9IG1hY2Vkb25pYW5TdXJ2ZXlTdHJpbmdzO1xuc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN1cnZleUxvY2FsaXphdGlvblwiXS5sb2NhbGVOYW1lc1tcIm1rXCJdID0gXCLQnNCw0LrQtdC00L7QvdGB0LrQuFwiO1xuLy8gVGhlIGZvbGxvd2luZyBzdHJpbmdzIGhhdmUgYmVlbiB0cmFuc2xhdGVkIGJ5IGEgbWFjaGluZSB0cmFuc2xhdGlvbiBzZXJ2aWNlXG4vLyBSZW1vdmUgdGhvc2Ugc3RyaW5ncyB0aGF0IHlvdSBoYXZlIGNvcnJlY3RlZCBtYW51YWxseVxuLy8gaW5kZXhUZXh0OiBcInswfSBvZiB7MX1cIiA9PiBcInswfSDQvdCwIHsxfVwiXG4vLyBwYW5lbER5bmFtaWNUYWJUZXh0Rm9ybWF0OiBcIlBhbmVsIHtwYW5lbEluZGV4fVwiID0+IFwi0J/QsNC90LXQuyB70L/QsNC90LXQuyDQmNC90LTQtdC60YF9XCJcbi8vIHJhdGluZ09wdGlvbnNDYXB0aW9uOiBcIlNlbGVjdC4uLlwiID0+IFwi0JjQt9Cx0LXRgNC10YLQtS4uLlwiXG4vLyBtdWx0aXBsZXRleHRfaXRlbW5hbWU6IFwidGV4dFwiID0+IFwi0YLQtdC60YHRgi5cIlxuLy8gc2lnbmF0dXJlUGxhY2VIb2xkZXI6IFwiU2lnbiBoZXJlXCIgPT4gXCLQn9C+0YLQv9C40YjQuCDRgdC1INC+0LLQtNC1LlwiXG4vLyBmaWx0ZXJTdHJpbmdQbGFjZWhvbGRlcjogXCJUeXBlIHRvIHNlYXJjaC4uLlwiID0+IFwi0KLQuNC/INC30LAg0L/RgNC10LHQsNGA0YPQstCw0ZrQtS4uLlwiXG4vLyBlbXB0eU1lc3NhZ2U6IFwiTm8gZGF0YSB0byBkaXNwbGF5XCIgPT4gXCLQndC10LzQsCDQv9C+0LTQsNGC0L7RhtC4INC30LAg0L/RgNC40LrQsNC20YPQstCw0ZrQtVwiXG4vLyBub0VudHJpZXNUZXh0OiBcIlRoZXJlIGFyZSBubyBlbnRyaWVzIHlldC5cXG5DbGljayB0aGUgYnV0dG9uIGJlbG93IHRvIGFkZCBhIG5ldyBlbnRyeS5cIiA9PiBcItCh0LXRg9GI0YLQtSDQvdC10LzQsCDQstC70LXQt9C90LjRhtC4LlxcbtCa0LvQuNC60L3QtdGC0LUg0L3QsCDQutC+0L/Rh9C10YLQviDQv9C+0LTQvtC70YMg0LfQsCDQtNCwINC00L7QtNCw0LTQtdGC0LUg0L3QvtCyINCy0LvQtdC3LlwiXG4vLyBub0VudHJpZXNSZWFkb25seVRleHQ6IFwiVGhlcmUgYXJlIG5vIGVudHJpZXMuXCIgPT4gXCLQndC10LzQsCDQstC70LXQt9C90LjRhtC4LlwiXG4vLyBtb3JlOiBcIk1vcmVcIiA9PiBcItCf0L7QstC10ZzQtVwiXG4vLyB0YWdib3hEb25lQnV0dG9uQ2FwdGlvbjogXCJPS1wiID0+IFwi0JTQntCR0KDQnlwiXG4vLyBzZWxlY3RUb1JhbmtFbXB0eVJhbmtlZEFyZWFUZXh0OiBcIkFsbCBjaG9pY2VzIGFyZSByYW5rZWRcIiA9PiBcItCh0LjRgtC1INC40LfQsdC+0YDQuCDRgdC1INGA0LDQvdCz0LjRgNCw0L3QuFwiXG4vLyBzZWxlY3RUb1JhbmtFbXB0eVVucmFua2VkQXJlYVRleHQ6IFwiRHJhZyBhbmQgZHJvcCBjaG9pY2VzIGhlcmUgdG8gcmFuayB0aGVtXCIgPT4gXCLQktC70LXRh9C10YLQtSDQuCDRhNGA0LvQtdGC0LUg0LPQviDQuNC30LHQvtGA0L7RgiDQvtCy0LTQtSDQt9CwINC00LAg0LPQuCDRgNCw0L3Qs9C40YDQsNGC0LVcIi8vIHRha2VQaG90b0NhcHRpb246IFwiVGFrZSBQaG90b1wiID0+IFwi0KTQvtGC0L7Qs9GA0LDRhNC40YDQsNGY0YLQtVwiXG4vLyBjYW1lcmFQbGFjZUhvbGRlcjogXCJDbGljayB0aGUgYnV0dG9uIGJlbG93IHRvIHRha2UgYSBwaG90byB1c2luZyB0aGUgY2FtZXJhLlwiID0+IFwi0JrQu9C40LrQvdC10YLQtSDQvdCwINC60L7Qv9GH0LXRgtC+INC/0L7QtNC+0LvRgyDQt9CwINC00LAg0YTQvtGC0L7Qs9GA0LDRhNC40YDQsNGC0LUg0LrQvtGA0LjRgdGC0LXRmNGc0Lgg0ZjQsCDQutCw0LzQtdGA0LDRgtCwLlwiXG4vLyBmaWxlQ2FtZXJhRHJhZ0FyZWFQbGFjZUhvbGRlcjogXCJEcmFnIGFuZCBkcm9wIG9yIHNlbGVjdCBhIGZpbGUgdG8gdXBsb2FkIG9yIHRha2UgYSBwaG90byB1c2luZyB0aGUgY2FtZXJhLlwiID0+IFwi0JLQu9C10YfQtdGC0LUg0Lgg0YTRgNC70LDRmNGC0LUg0LjQu9C4INC40LfQsdC10YDQtdGC0LUg0LTQsNGC0L7RgtC10LrQsCDQt9CwINC60LDRh9GD0LLQsNGa0LUg0LjQu9C4INGE0L7RgtC+0LPRgNCw0YTQuNGA0LDRmtC1INC60L7RgNC40YHRgtC10ZjRnNC4INGY0LAg0LrQsNC80LXRgNCw0YLQsC5cIlxuLy8gcmVwbGFjZUZpbGVDYXB0aW9uOiBcIlJlcGxhY2UgZmlsZVwiID0+IFwi0JfQsNC80LXQvdC10YLQtSDQs9C+INGE0LDRmNC70L7Rgi5cIlxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL2xvY2FsaXphdGlvbi9tYWxheS50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvbG9jYWxpemF0aW9uL21hbGF5LnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBtYWxheVN1cnZleVN0cmluZ3MgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwibWFsYXlTdXJ2ZXlTdHJpbmdzXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gbWFsYXlTdXJ2ZXlTdHJpbmdzOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBzdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgc3VydmV5LWNvcmUgKi8gXCIuL3NyYy9lbnRyaWVzL2NvcmUudHNcIik7XG5cbnZhciBtYWxheVN1cnZleVN0cmluZ3MgPSB7XG4gICAgcGFnZVByZXZUZXh0OiBcIlNlYmVsdW1ueWFcIixcbiAgICBwYWdlTmV4dFRleHQ6IFwiU2V0ZXJ1c255YVwiLFxuICAgIGNvbXBsZXRlVGV4dDogXCJTZWxlc2FpXCIsXG4gICAgcHJldmlld1RleHQ6IFwiUHJhdG9udG9uXCIsXG4gICAgZWRpdFRleHQ6IFwiRWRpdFwiLFxuICAgIHN0YXJ0U3VydmV5VGV4dDogXCJNdWxhXCIsXG4gICAgb3RoZXJJdGVtVGV4dDogXCJMYWluICh0ZXJhbmdrYW4pXCIsXG4gICAgbm9uZUl0ZW1UZXh0OiBcIlRpYWRhXCIsXG4gICAgc2VsZWN0QWxsSXRlbVRleHQ6IFwiUGlsaWggU2VtdWFcIixcbiAgICBwcm9ncmVzc1RleHQ6IFwiSGFsYW1hbiB7MH0gZGFyaXBhZGEgezF9XCIsXG4gICAgaW5kZXhUZXh0OiBcInswfSB7MX1cIixcbiAgICBwYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ6IFwiUmVrb2QgezB9IGRhcmlwYWRhIHsxfVwiLFxuICAgIHBhbmVsRHluYW1pY1RhYlRleHRGb3JtYXQ6IFwiUGFuZWwge3BhbmVsSW5kZXh9XCIsXG4gICAgcXVlc3Rpb25zUHJvZ3Jlc3NUZXh0OiBcInswfS97MX0gc29hbGFuIHRlbGFoIGRpamF3YWJcIixcbiAgICBlbXB0eVN1cnZleTogXCJUaWFkYSBoYWxhbWFuIGF0YXUgc29hbGFuIGJvbGVoIGRpbGloYXQgZGFsYW0gdGluamF1YW4uXCIsXG4gICAgY29tcGxldGluZ1N1cnZleTogXCJUZXJpbWEga2FzaWgga2VyYW5hIG1lbGVuZ2thcGthbiB0aW5qYXVhbiFcIixcbiAgICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOiBcIlJla29kIGthbWkgbWVudW5qdWtrYW4geWFuZyBhbmRhIHRlbGFoIG1lbGVuZ2thcGthbiB0aW5qYXVhbiBpbmkuXCIsXG4gICAgbG9hZGluZ1N1cnZleTogXCJNZW11YXRrYW4gVGluamF1YW4uLi5cIixcbiAgICBwbGFjZWhvbGRlcjogXCJQaWxpaC4uLlwiLFxuICAgIHJhdGluZ09wdGlvbnNDYXB0aW9uOiBcIlBpbGloLi4uXCIsXG4gICAgdmFsdWU6IFwibmlsYWlcIixcbiAgICByZXF1aXJlZEVycm9yOiBcIlJlc3BvbnMgZGlwZXJsdWthbi5cIixcbiAgICByZXF1aXJlZEVycm9ySW5QYW5lbDogXCJSZXNwb25zIGRpcGVybHVrYW46IGphd2FiIHNla3VyYW5nLWt1cmFuZ255YSBzYXR1IHNvYWxhbi5cIixcbiAgICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIlJlc3BvbnMgZGlwZXJsdWthbjogamF3YWIgc29hbGFuIGRhbGFtIHNlbXVhIGJhcmlzLlwiLFxuICAgIG51bWVyaWNFcnJvcjogXCJOaWxhaSBtZXN0aWxhaCBudW1lcmlrLlwiLFxuICAgIG1pbkVycm9yOiBcIk5pbGFpIHRpZGFrIGJvbGVoIGt1cmFuZyBkYXJpcGFkYSB7MH1cIixcbiAgICBtYXhFcnJvcjogXCJOaWxhaSB0aWRhayBib2xlaCBsZWJpaCBiZXNhciBkYXJpcGFkYSB7MH1cIixcbiAgICB0ZXh0TWluTGVuZ3RoOiBcIlNpbGEgbWFzdWtrYW4gc2VrdXJhbmcta3VyYW5nbnlhIHswfSBha3NhcmEuXCIsXG4gICAgdGV4dE1heExlbmd0aDogXCJTaWxhIG1hc3Vra2FuIHRpZGFrIGxlYmloIGRhcmlwYWRhIHswfSBha3NhcmEuXCIsXG4gICAgdGV4dE1pbk1heExlbmd0aDogXCJTaWxhIG1hc3Vra2FuIHNla3VyYW5nLWt1cmFuZ255YSB7MH0gZGFuIHRpZGFrIGxlYmloIGRhcmlwYWRhIHsxfSBha3NhcmEuXCIsXG4gICAgbWluUm93Q291bnRFcnJvcjogXCJTaWxhIGlzaWthbiBzZWt1cmFuZy1rdXJhbmdueWEgezB9IGJhcmlzLlwiLFxuICAgIG1pblNlbGVjdEVycm9yOiBcIlNpbGEgcGlsaWggc2VrdXJhbmcta3VyYW5nbnlhIHswfSB2YXJpYW4uXCIsXG4gICAgbWF4U2VsZWN0RXJyb3I6IFwiU2lsYSBwaWxpaCB0aWRhayBsZWJpaCBkYXJpcGFkYSB7MH0gdmFyaWFuLlwiLFxuICAgIG51bWVyaWNNaW5NYXg6IFwiJ3swfScgbWVzdGlsYWggc2VrdXJhbmcta3VyYW5nbnlhIHsxfSBkYW4gcGFsaW5nIGJhbnlhayB7Mn1cIixcbiAgICBudW1lcmljTWluOiBcIid7MH0nIG1lc3RpbGFoIHNla3VyYW5nLWt1cmFuZ255YSB7MX1cIixcbiAgICBudW1lcmljTWF4OiBcIid7MH0nIG1lc3RpbGFoIHBhbGluZyBiYW55YWsgezF9XCIsXG4gICAgaW52YWxpZEVtYWlsOiBcIlNpbGEgbWFzdWtrYW4gYWxhbWF0IGUtbWVsIHlhbmcgc2FoLlwiLFxuICAgIGludmFsaWRFeHByZXNzaW9uOiBcIkVrc3ByZXNpOiB7MH0gaGVuZGFrbGFoIG1lbmdlbWJhbGlrYW4gbmlsYWkgJ2JlbmFyJy5cIixcbiAgICB1cmxSZXF1ZXN0RXJyb3I6IFwiUGVybWludGFhbiBtZW5nZW1iYWxpa2FuIHJhbGF0ICd7MH0nLiB7MX1cIixcbiAgICB1cmxHZXRDaG9pY2VzRXJyb3I6IFwiUGVybWludGFhbiBtZW5nZW1iYWxpa2FuIGRhdGEga29zb25nIGF0YXUgY2lyaSAnbGFsdWFuJyBzYWxhaFwiLFxuICAgIGV4Y2VlZE1heFNpemU6IFwiU2FpeiBmYWlsIGhlbmRha2xhaCB0aWRhayBtZWxlYmloaSB7MH0uXCIsXG4gICAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIlJlc3BvbnMgZGlwZXJsdWthbjogbWFzdWtrYW4gbmlsYWkgbGFpbi5cIixcbiAgICB1cGxvYWRpbmdGaWxlOiBcIkZhaWwgYW5kYSBzZWRhbmcgZGltdWF0IG5haWsuIFNpbGEgdHVuZ2d1IGJlYmVyYXBhIHNhYXQgZGFuIGN1YmEgbGFnaS5cIixcbiAgICBsb2FkaW5nRmlsZTogXCJNZW11YXQuLi5cIixcbiAgICBjaG9vc2VGaWxlOiBcIlBpbGloIGZhaWwuLi5cIixcbiAgICBub0ZpbGVDaG9zZW46IFwiVGlhZGEgZmFpbCBkaXBpbGloXCIsXG4gICAgZmlsZURyYWdBcmVhUGxhY2Vob2xkZXI6IFwiTGV0YWtrYW4gZmFpbCBkaSBzaW5pIGF0YXUga2xpayBidXRhbmcgZGkgYmF3YWggdW50dWsgbWVtdWF0a2FuIGZhaWwuXCIsXG4gICAgY29uZmlybURlbGV0ZTogXCJBZGFrYWggYW5kYSBpbmdpbiBtZW1hZGFta2FuIHJla29kP1wiLFxuICAgIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwiTmlsYWkgaW5pIGhlbmRha2xhaCB1bmlrLlwiLFxuICAgIGFkZENvbHVtbjogXCJUYW1iYWhrYW4gbGFqdXJcIixcbiAgICBhZGRSb3c6IFwiVGFtYmFoa2FuIGJhcmlzXCIsXG4gICAgcmVtb3ZlUm93OiBcIkFsaWgga2VsdWFyXCIsXG4gICAgZW1wdHlSb3dzVGV4dDogXCJUaWFkYSBiYXJpcy5cIixcbiAgICBhZGRQYW5lbDogXCJUYW1iYWggYmFoYXJ1XCIsXG4gICAgcmVtb3ZlUGFuZWw6IFwiQWxpaCBrZWx1YXJcIixcbiAgICBjaG9pY2VzX0l0ZW06IFwiaXRlbVwiLFxuICAgIG1hdHJpeF9jb2x1bW46IFwiTGFqdXJcIixcbiAgICBtYXRyaXhfcm93OiBcIkJhcmlzXCIsXG4gICAgbXVsdGlwbGV0ZXh0X2l0ZW1uYW1lOiBcInRla3NcIixcbiAgICBzYXZpbmdEYXRhOiBcIktlcHV0dXNhbiBzZWRhbmcgZGlzaW1wYW4gcGFkYSBwZWxheWFuLi4uXCIsXG4gICAgc2F2aW5nRGF0YUVycm9yOiBcIlJhbGF0IGJlcmxha3UgZGFuIGthbWkgdGlkYWsgZGFwYXQgbWVueWltcGFuIGtlcHV0dXNhbi5cIixcbiAgICBzYXZpbmdEYXRhU3VjY2VzczogXCJLZXB1dHVzYW4gYmVyamF5YSBkaXNpbXBhbiFcIixcbiAgICBzYXZlQWdhaW5CdXR0b246IFwiQ3ViYSBsYWdpXCIsXG4gICAgdGltZXJNaW46IFwibWluXCIsXG4gICAgdGltZXJTZWM6IFwic2FhdFwiLFxuICAgIHRpbWVyU3BlbnRBbGw6IFwiQW5kYSB0ZWxhaCBtZWx1YW5na2FuIHswfSBwYWRhIGhhbGFtYW4gaW5pIGRhbiB7MX0gc2VjYXJhIGtlc2VsdXJ1aGFuLlwiLFxuICAgIHRpbWVyU3BlbnRQYWdlOiBcIkFuZGEgdGVsYWggbWVsdWFuZ2thbiB7MH0gcGFkYSBoYWxhbWFuIGluaS5cIixcbiAgICB0aW1lclNwZW50U3VydmV5OiBcIkFuZGEgdGVsYWggbWVsdWFuZ2thbiB7MH0gc2VjYXJhIGtlc2VsdXJ1aGFuLlwiLFxuICAgIHRpbWVyTGltaXRBbGw6IFwiQW5kYSB0ZWxhaCBtZWx1YW5na2FuIHswfSBkYXJpcGFkYSB7MX0gcGFkYSBoYWxhbWFuIGluaSBkYW4gezJ9IGRhcmlwYWRhIHszfSBzZWNhcmEga2VzZWx1cnVoYW4uXCIsXG4gICAgdGltZXJMaW1pdFBhZ2U6IFwiQW5kYSB0ZWxhaCBtZWx1YW5na2FuIHswfSBkYXJpcGFkYSB7MX0gcGFkYSBoYWxhbWFuIGluaS5cIixcbiAgICB0aW1lckxpbWl0U3VydmV5OiBcIkFuZGEgdGVsYWggbWVsdWFuZ2thbiB7MH0gZGFyaXBhZGEgezF9IHNlY2FyYSBrZXNlbHVydWhhbi5cIixcbiAgICBjbGVhckNhcHRpb246IFwiS29zb25na2FuXCIsXG4gICAgc2lnbmF0dXJlUGxhY2VIb2xkZXI6IFwiVGFuZGF0YW5nYW4gZGkgc2luaVwiLFxuICAgIGNob29zZUZpbGVDYXB0aW9uOiBcIlBpbGloIGZhaWxcIixcbiAgICB0YWtlUGhvdG9DYXB0aW9uOiBcIkFtYmlsIGdhbWJhclwiLFxuICAgIGNhbWVyYVBsYWNlSG9sZGVyOiBcIktsaWsgYnV0YW5nIGRpIGJhd2FoIHVudHVrIG1lbmdhbWJpbCBnYW1iYXIgbWVuZ2d1bmFrYW4ga2FtZXJhLlwiLFxuICAgIGZpbGVDYW1lcmFEcmFnQXJlYVBsYWNlSG9sZGVyOiBcIlNlcmV0IGRhbiBsZXBhcyBhdGF1IHBpbGloIGZhaWwgdW50dWsgbWVtdWF0IG5haWsgYXRhdSBtZW5nYW1iaWwgZm90byBtZW5nZ3VuYWthbiBrYW1lcmEuXCIsXG4gICAgcmVwbGFjZUZpbGVDYXB0aW9uOiBcIkdhbnRpa2FuIGZhaWxcIixcbiAgICByZW1vdmVGaWxlQ2FwdGlvbjogXCJBbGloIGtlbHVhciBmYWlsIGluaVwiLFxuICAgIGJvb2xlYW5DaGVja2VkTGFiZWw6IFwiWWFcIixcbiAgICBib29sZWFuVW5jaGVja2VkTGFiZWw6IFwiVGlkYWtcIixcbiAgICBjb25maXJtUmVtb3ZlRmlsZTogXCJBbmRhIHBhc3RpIGluZ2luIG1lbmdhbGloIGtlbHVhciBmYWlsIGluaTogezB9P1wiLFxuICAgIGNvbmZpcm1SZW1vdmVBbGxGaWxlczogXCJBbmRhIHBhc3RpIGluZ2luIG1lbmdhbGloIGtlbHVhciBzZW11YSBmYWlsP1wiLFxuICAgIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCJUYWp1ayBTb2FsYW5cIixcbiAgICBtb2RhbENhbmNlbEJ1dHRvblRleHQ6IFwiQmF0YWxcIixcbiAgICBtb2RhbEFwcGx5QnV0dG9uVGV4dDogXCJHdW5hXCIsXG4gICAgZmlsdGVyU3RyaW5nUGxhY2Vob2xkZXI6IFwiVGFpcCB1bnR1ayBtZW1idWF0IGNhcmlhbi4uLlwiLFxuICAgIGVtcHR5TWVzc2FnZTogXCJUaWFkYSBkYXRhIHVudHVrIGRpcGFwYXJrYW5cIixcbiAgICBub0VudHJpZXNUZXh0OiBcIkJlbHVtIGFkYSBlbnRyaS5cXG5LbGlrIGJ1dGFuZyBkaSBiYXdhaCB1bnR1ayBtZW5hbWJhaGthbiBlbnRyaS5cIixcbiAgICBub0VudHJpZXNSZWFkb25seVRleHQ6IFwiVGlhZGEgcGVueWVydGFhbi5cIixcbiAgICBtb3JlOiBcIkxlYmloIGJhbnlha1wiLFxuICAgIHRhZ2JveERvbmVCdXR0b25DYXB0aW9uOiBcIk9LXCIsXG4gICAgc2VsZWN0VG9SYW5rRW1wdHlSYW5rZWRBcmVhVGV4dDogXCJTZW11YSBwaWxpaGFuIGRpc2VuYXJhaWthblwiLFxuICAgIHNlbGVjdFRvUmFua0VtcHR5VW5yYW5rZWRBcmVhVGV4dDogXCJTZXJldCBkYW4gbGVwYXNrYW4gcGlsaWhhbiBkaSBzaW5pIHVudHVrIG1lbGV0YWtrYW5ueWFcIlxufTtcbnN1cnZleV9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdXJ2ZXlMb2NhbGl6YXRpb25cIl0ubG9jYWxlc1tcIm1zXCJdID0gbWFsYXlTdXJ2ZXlTdHJpbmdzO1xuc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN1cnZleUxvY2FsaXphdGlvblwiXS5sb2NhbGVOYW1lc1tcIm1zXCJdID0gXCJtZWxheXVcIjtcbi8vIFRoZSBmb2xsb3dpbmcgc3RyaW5ncyBoYXZlIGJlZW4gdHJhbnNsYXRlZCBieSBhIG1hY2hpbmUgdHJhbnNsYXRpb24gc2VydmljZVxuLy8gUmVtb3ZlIHRob3NlIHN0cmluZ3MgdGhhdCB5b3UgaGF2ZSBjb3JyZWN0ZWQgbWFudWFsbHlcbi8vIGluZGV4VGV4dDogXCJ7MH0gb2YgezF9XCIgPT4gXCJ7MH0gezF9XCJcbi8vIHBhbmVsRHluYW1pY1RhYlRleHRGb3JtYXQ6IFwiUGFuZWwge3BhbmVsSW5kZXh9XCIgPT4gXCJQYW5lbCB7cGFuZWxJbmRleH1cIlxuLy8gcmF0aW5nT3B0aW9uc0NhcHRpb246IFwiU2VsZWN0Li4uXCIgPT4gXCJQaWxpaC4uLlwiXG4vLyBlbXB0eU1lc3NhZ2U6IFwiTm8gZGF0YSB0byBkaXNwbGF5XCIgPT4gXCJUaWFkYSBkYXRhIHVudHVrIGRpcGFwYXJrYW5cIlxuLy8gbm9FbnRyaWVzUmVhZG9ubHlUZXh0OiBcIlRoZXJlIGFyZSBubyBlbnRyaWVzLlwiID0+IFwiVGlhZGEgcGVueWVydGFhbi5cIlxuLy8gbW9yZTogXCJNb3JlXCIgPT4gXCJMZWJpaCBiYW55YWtcIlxuLy8gdGFnYm94RG9uZUJ1dHRvbkNhcHRpb246IFwiT0tcIiA9PiBcIk9LXCJcbi8vIHNlbGVjdFRvUmFua0VtcHR5UmFua2VkQXJlYVRleHQ6IFwiQWxsIGNob2ljZXMgYXJlIHJhbmtlZFwiID0+IFwiU2VtdWEgcGlsaWhhbiBkaXNlbmFyYWlrYW5cIlxuLy8gc2VsZWN0VG9SYW5rRW1wdHlVbnJhbmtlZEFyZWFUZXh0OiBcIkRyYWcgYW5kIGRyb3AgY2hvaWNlcyBoZXJlIHRvIHJhbmsgdGhlbVwiID0+IFwiU2VyZXQgZGFuIGxlcGFza2FuIHBpbGloYW4gZGkgc2luaSB1bnR1ayBtZWxldGFra2FubnlhXCIvLyB0YWtlUGhvdG9DYXB0aW9uOiBcIlRha2UgUGhvdG9cIiA9PiBcIkFtYmlsIGdhbWJhclwiXG4vLyBjYW1lcmFQbGFjZUhvbGRlcjogXCJDbGljayB0aGUgYnV0dG9uIGJlbG93IHRvIHRha2UgYSBwaG90byB1c2luZyB0aGUgY2FtZXJhLlwiID0+IFwiS2xpayBidXRhbmcgZGkgYmF3YWggdW50dWsgbWVuZ2FtYmlsIGdhbWJhciBtZW5nZ3VuYWthbiBrYW1lcmEuXCJcbi8vIGZpbGVDYW1lcmFEcmFnQXJlYVBsYWNlSG9sZGVyOiBcIkRyYWcgYW5kIGRyb3Agb3Igc2VsZWN0IGEgZmlsZSB0byB1cGxvYWQgb3IgdGFrZSBhIHBob3RvIHVzaW5nIHRoZSBjYW1lcmEuXCIgPT4gXCJTZXJldCBkYW4gbGVwYXMgYXRhdSBwaWxpaCBmYWlsIHVudHVrIG1lbXVhdCBuYWlrIGF0YXUgbWVuZ2FtYmlsIGZvdG8gbWVuZ2d1bmFrYW4ga2FtZXJhLlwiXG4vLyByZXBsYWNlRmlsZUNhcHRpb246IFwiUmVwbGFjZSBmaWxlXCIgPT4gXCJHYW50aWthbiBmYWlsXCJcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9sb2NhbGl6YXRpb24vbmwtQkUudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL2xvY2FsaXphdGlvbi9ubC1CRS50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgbm8gZXhwb3J0cyBwcm92aWRlZCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBzdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgc3VydmV5LWNvcmUgKi8gXCIuL3NyYy9lbnRyaWVzL2NvcmUudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2R1dGNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2R1dGNoICovIFwiLi9zcmMvbG9jYWxpemF0aW9uL2R1dGNoLnRzXCIpO1xuXG5cbi8qKlxuICogVGhpcyBpcyBpbml0aWFsaXplZCBhcyBhIGNvcHkgb2YgdGhlIER1dGNoIHN0cmluZ3MsIHdoZW4gdGhleSBzdGFydCB0byBkZXZpYXRlIGEgY2hvaWNlIGhhcyB0byBiZSBtYWRlOlxuICogLSBDb3B5IHRoZSBEdXRjaCBzZXQgb25jZSBhbmQgbW92ZSBmb3J3YXJkIGFzIGlmIGl0IGFyZSAyIHRvdGFsbHkgZGlmZmVyZW50IGxhbmd1YWdlc1xuICogLSBPdmVycmlkZSB0aGUgcmVsZXZhbnQgc3RyaW5ncyBvbmx5XG4gKi9cbnN1cnZleV9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdXJ2ZXlMb2NhbGl6YXRpb25cIl0ubG9jYWxlc1tcIm5sLUJFXCJdID0gX2R1dGNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJkdXRjaFN1cnZleVN0cmluZ3NcIl07XG5zdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3VydmV5TG9jYWxpemF0aW9uXCJdLmxvY2FsZU5hbWVzW1wibmwtQkVcIl0gPSBcInZsYWFtc1wiO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL2xvY2FsaXphdGlvbi9ub3J3ZWdpYW4udHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9sb2NhbGl6YXRpb24vbm9yd2VnaWFuLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogbm9yd2VnaWFuU3VydmV5U3RyaW5ncyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJub3J3ZWdpYW5TdXJ2ZXlTdHJpbmdzXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gbm9yd2VnaWFuU3VydmV5U3RyaW5nczsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHN1cnZleS1jb3JlICovIFwiLi9zcmMvZW50cmllcy9jb3JlLnRzXCIpO1xuXG52YXIgbm9yd2VnaWFuU3VydmV5U3RyaW5ncyA9IHtcbiAgICBwYWdlUHJldlRleHQ6IFwiRm9ycmlnZVwiLFxuICAgIHBhZ2VOZXh0VGV4dDogXCJOZXN0ZVwiLFxuICAgIGNvbXBsZXRlVGV4dDogXCJGdWxsZsO4clwiLFxuICAgIHByZXZpZXdUZXh0OiBcIkZvcmjDpW5kc3Zpc25pbmdcIixcbiAgICBlZGl0VGV4dDogXCJSZWRpZ2VyZVwiLFxuICAgIHN0YXJ0U3VydmV5VGV4dDogXCJTdGFydFwiLFxuICAgIG90aGVySXRlbVRleHQ6IFwiQW5uZXQgKGJlc2tyaXYpXCIsXG4gICAgbm9uZUl0ZW1UZXh0OiBcIkluZ2VuXCIsXG4gICAgc2VsZWN0QWxsSXRlbVRleHQ6IFwiVmVsZyBhbGxlXCIsXG4gICAgcHJvZ3Jlc3NUZXh0OiBcIlNpZGUgezB9IGF2IHsxfVwiLFxuICAgIGluZGV4VGV4dDogXCJ7MH0gYXYgezF9XCIsXG4gICAgcGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0OiBcIlRhIG9wcCB7MH0gYXYgezF9XCIsXG4gICAgcGFuZWxEeW5hbWljVGFiVGV4dEZvcm1hdDogXCJQYW5lbCB7cGFuZWxJbmRleH1cIixcbiAgICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwiQmVzdmFydGUgezB9IC8gezF9IHNww7hyc23DpWxcIixcbiAgICBlbXB0eVN1cnZleTogXCJEZXQgZXIgaW5nZW4gc3lubGlnIHNpZGUgZWxsZXIgc3DDuHJzbcOlbCBpIHVuZGVyc8O4a2Vsc2VuLlwiLFxuICAgIGNvbXBsZXRpbmdTdXJ2ZXk6IFwiVGFrayBmb3IgYXQgZHUgZnVsbGbDuHJ0ZSB1bmRlcnPDuGtlbHNlbiFcIixcbiAgICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOiBcIlbDpXJlIGRhdGEgdmlzZXIgYXQgZHUgYWxsZXJlZGUgaGFyIGdqZW5ub21mw7hydCBkZW5uZSB1bmRlcnPDuGtlbHNlbi5cIixcbiAgICBsb2FkaW5nU3VydmV5OiBcIlVuZGVyc8O4a2Vsc2VuIGxhc3Rlci4uLlwiLFxuICAgIHBsYWNlaG9sZGVyOiBcIlZlbGcuLi5cIixcbiAgICByYXRpbmdPcHRpb25zQ2FwdGlvbjogXCJWZWxnZS4uLlwiLFxuICAgIHZhbHVlOiBcInZlcmRpXCIsXG4gICAgcmVxdWlyZWRFcnJvcjogXCJWZW5ubGlnc3Qgc3ZhciBww6Ugc3DDuHJzbcOlbGV0LlwiLFxuICAgIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcIlZlbm5saWdzdCBzdmFyIHDDpSBtaW5zdCBldHQgc3DDuHJzbcOlbC5cIixcbiAgICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIlZlbm5saWdzdCBzdmFyIHDDpSBzcMO4cnNtw6VsIGkgYWxsZSByYWRlci5cIixcbiAgICBudW1lcmljRXJyb3I6IFwiVmVyZGllbiBza2FsIHbDpnJlIG51bWVyaXNrLlwiLFxuICAgIG1pbkVycm9yOiBcIlZlcmRpZW4gYsO4ciBpa2tlIHbDpnJlIG1pbmRyZSBlbm4gezB9XCIsXG4gICAgbWF4RXJyb3I6IFwiVmVyZGllbiBiw7hyIGlra2UgdsOmcmUgc3TDuHJyZSBlbm4gezB9XCIsXG4gICAgdGV4dE1pbkxlbmd0aDogXCJWZW5ubGlnc3Qgc2tyaXYgaW5uIG1pbnN0IHswfSB0ZWduLlwiLFxuICAgIHRleHRNYXhMZW5ndGg6IFwiVmVubmxpZ3N0IHNrcml2IGlubiBtaW5kcmUgZW5uIHswfSB0ZWduLlwiLFxuICAgIHRleHRNaW5NYXhMZW5ndGg6IFwiVmVubmxpZ3N0IHNrcml2IGlubiBtZXIgZW5uIHswfSBvZyBtaW5kcmUgZW5uIHsxfSB0ZWduLlwiLFxuICAgIG1pblJvd0NvdW50RXJyb3I6IFwiVmVubmxpZ3N0IGZ5bGwgaW5uIG1pbnN0IHswfSByYWRlci5cIixcbiAgICBtaW5TZWxlY3RFcnJvcjogXCJWZW5ubGlnc3QgdmVsZyBtaW5zdCB7MH0gdmFyaWFudGVyLlwiLFxuICAgIG1heFNlbGVjdEVycm9yOiBcIlZlbm5saWdzdCBpa2tlIHZlbGcgbWVyIGVubiB7MH0gdmFyaWFudGVyLlwiLFxuICAgIG51bWVyaWNNaW5NYXg6IFwiJ3swfScgYsO4ciB2w6ZyZSBsaWsgZWxsZXIgbWVyIGVubiB7MX0gb2cgbGlrIGVsbGVyIG1pbmRyZSBlbm4gezJ9XCIsXG4gICAgbnVtZXJpY01pbjogXCInezB9JyBiw7hyIHbDpnJlIGxpayBlbGxlciBtZXIgZW5uIHsxfVwiLFxuICAgIG51bWVyaWNNYXg6IFwiJ3swfScgYsO4ciB2w6ZyZSBsaWsgZWxsZXIgbWluZHJlIGVubiB7MX1cIixcbiAgICBpbnZhbGlkRW1haWw6IFwiVmVubmxpZ3N0IHNrcml2IGlubiBlbiBneWxkaWcgZS1wb3N0IGFkcmVzc2UuXCIsXG4gICAgaW52YWxpZEV4cHJlc3Npb246IFwiVXR0cnlra2V0OiB7MH0gc2thbCByZXR1cm5lcmUgJ3NhbnQnLlwiLFxuICAgIHVybFJlcXVlc3RFcnJvcjogXCJGb3Jlc3DDuHJzZWxlbiByZXR1cm5lcnRlIGZlaWxlbiAnezB9Jy4gezF9XCIsXG4gICAgdXJsR2V0Q2hvaWNlc0Vycm9yOiBcIkZvcmVzcMO4cnNlbGVuIHJldHVybmVydGUgdG9tbWUgZGF0YSwgZWxsZXIgJ3N0aScgLWVnZW5za2FwZW4gZXIgZmVpbFwiLFxuICAgIGV4Y2VlZE1heFNpemU6IFwiRmlsc3TDuHJyZWxzZW4gYsO4ciBpa2tlIG92ZXJzdGlnZSB7MH0uXCIsXG4gICAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIlZlbm5saWdzdCBza3JpdiBpbm4gZGVuIGFuZHJlIHZlcmRpZW4uXCIsXG4gICAgdXBsb2FkaW5nRmlsZTogXCJGaWxlbiBkaW4gbGFzdGVzIG9wcC4gVmVubmxpZ3N0IHZlbnQgbm9lbiBzZWt1bmRlciBvZyBwcsO4diBpZ2plbi5cIixcbiAgICBsb2FkaW5nRmlsZTogXCJMYXN0ZXIgaW5uIC4uLlwiLFxuICAgIGNob29zZUZpbGU6IFwiVmVsZyBmaWwgKGVyKSAuLi5cIixcbiAgICBub0ZpbGVDaG9zZW46IFwiSW5nZW4gZmlsIHZhbGd0XCIsXG4gICAgZmlsZURyYWdBcmVhUGxhY2Vob2xkZXI6IFwiRHJhIG9nIHNsaXBwIGVuIGZpbCBoZXIsIGVsbGVyIGtsaWtrIHDDpSBrbmFwcGVuIG5lZGVuZm9yIG9nIHZlbGcgZW4gZmlsIGR1IHZpbCBsYXN0ZSBvcHAuXCIsXG4gICAgY29uZmlybURlbGV0ZTogXCLDmG5za2VyIGR1IMOlIHNsZXR0ZSBwb3N0ZW4/XCIsXG4gICAga2V5RHVwbGljYXRpb25FcnJvcjogXCJEZW5uZSB2ZXJkaWVuIHNrYWwgdsOmcmUgdW5pay5cIixcbiAgICBhZGRDb2x1bW46IFwiTGVnZyB0aWwga29sb25uZVwiLFxuICAgIGFkZFJvdzogXCJMZWdnIHRpbCByYWRcIixcbiAgICByZW1vdmVSb3c6IFwiRmplcm5cIixcbiAgICBlbXB0eVJvd3NUZXh0OiBcIkRldCBlciBpbmdlbiByYWRlci5cIixcbiAgICBhZGRQYW5lbDogXCJMZWdnIHRpbCBueVwiLFxuICAgIHJlbW92ZVBhbmVsOiBcIkZqZXJuZVwiLFxuICAgIGNob2ljZXNfSXRlbTogXCJlbGVtZW50XCIsXG4gICAgbWF0cml4X2NvbHVtbjogXCJLb2xvbm5lXCIsXG4gICAgbWF0cml4X3JvdzogXCJSYWRcIixcbiAgICBtdWx0aXBsZXRleHRfaXRlbW5hbWU6IFwiVGVrc3RcIixcbiAgICBzYXZpbmdEYXRhOiBcIlJlc3VsdGF0ZW5lIGxhZ3JlcyBww6Ugc2VydmVyZW4gLi4uXCIsXG4gICAgc2F2aW5nRGF0YUVycm9yOiBcIkRldCBvcHBzdG8gZW4gZmVpbCwgb2cgdmkga3VubmUgaWtrZSBsYWdyZSByZXN1bHRhdGVuZS5cIixcbiAgICBzYXZpbmdEYXRhU3VjY2VzczogXCJSZXN1bHRhdGVuZSBibGUgbGFncmV0IVwiLFxuICAgIHNhdmVBZ2FpbkJ1dHRvbjogXCJQcsO4diBpZ2plblwiLFxuICAgIHRpbWVyTWluOiBcIm1pblwiLFxuICAgIHRpbWVyU2VjOiBcInNla1wiLFxuICAgIHRpbWVyU3BlbnRBbGw6IFwiRHUgaGFyIHRpbGJyYWt0IHswfSBww6UgZGVubmUgc2lkZW4gb2cgezF9IHRvdGFsdC5cIixcbiAgICB0aW1lclNwZW50UGFnZTogXCJEdSBoYXIgdGlsYnJha3QgezB9IHDDpSBkZW5uZSBzaWRlbi5cIixcbiAgICB0aW1lclNwZW50U3VydmV5OiBcIkR1IGhhciB0aWxicmFrdCB7MH0gdG90YWx0LlwiLFxuICAgIHRpbWVyTGltaXRBbGw6IFwiRHUgaGFyIHRpbGJyYWt0IHswfSBhdiB7MX0gcMOlIGRlbm5lIHNpZGVuIG9nIHRvdGFsdCB7Mn0gYXYgezN9LlwiLFxuICAgIHRpbWVyTGltaXRQYWdlOiBcIkR1IGhhciB0aWxicmFrdCB7MH0gYXYgezF9IHDDpSBkZW5uZSBzaWRlbi5cIixcbiAgICB0aW1lckxpbWl0U3VydmV5OiBcIkR1IGhhciB0aWxicmFrdCB7MH0gYXYgezF9IHRvdGFsdC5cIixcbiAgICBjbGVhckNhcHRpb246IFwiS2xhclwiLFxuICAgIHNpZ25hdHVyZVBsYWNlSG9sZGVyOiBcIkxvZ2cgaW5uIGhlclwiLFxuICAgIGNob29zZUZpbGVDYXB0aW9uOiBcIlZlbGcgRmlsXCIsXG4gICAgdGFrZVBob3RvQ2FwdGlvbjogXCJUYSBiaWxkZVwiLFxuICAgIGNhbWVyYVBsYWNlSG9sZGVyOiBcIktsaWtrIHDDpSBrbmFwcGVuIG5lZGVuZm9yIGZvciDDpSB0YSBldCBiaWxkZSBtZWQga2FtZXJhZXQuXCIsXG4gICAgZmlsZUNhbWVyYURyYWdBcmVhUGxhY2VIb2xkZXI6IFwiRHJhIG9nIHNsaXBwIGVsbGVyIHZlbGcgZW4gZmlsIGZvciDDpSBsYXN0ZSBvcHAgZWxsZXIgdGEgZXQgYmlsZGUgbWVkIGthbWVyYWV0LlwiLFxuICAgIHJlcGxhY2VGaWxlQ2FwdGlvbjogXCJFcnN0YXR0IGZpbFwiLFxuICAgIHJlbW92ZUZpbGVDYXB0aW9uOiBcIkZqZXJuIGRlbm5lIGZpbGVuXCIsXG4gICAgYm9vbGVhbkNoZWNrZWRMYWJlbDogXCJKYVwiLFxuICAgIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCJOZWlcIixcbiAgICBjb25maXJtUmVtb3ZlRmlsZTogXCJFciBkdSBzaWtrZXIgcMOlIGF0IGR1IHZpbCBmamVybmUgZGVubmUgZmlsZW46IHswfT9cIixcbiAgICBjb25maXJtUmVtb3ZlQWxsRmlsZXM6IFwiRXIgZHUgc2lra2VyIHDDpSBhdCBkdSB2aWwgZmplcm5lIGFsbGUgZmlsZW5lP1wiLFxuICAgIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCJTcMO4cnNtw6Vsc3RpdHRlbFwiLFxuICAgIG1vZGFsQ2FuY2VsQnV0dG9uVGV4dDogXCJBbm51bGxlcmVcIixcbiAgICBtb2RhbEFwcGx5QnV0dG9uVGV4dDogXCJCcnVrZVwiLFxuICAgIGZpbHRlclN0cmluZ1BsYWNlaG9sZGVyOiBcIlNrcml2IGZvciDDpSBzw7hrZSAuLi5cIixcbiAgICBlbXB0eU1lc3NhZ2U6IFwiSW5nZW4gZGF0YSDDpSB2aXNlXCIsXG4gICAgbm9FbnRyaWVzVGV4dDogXCJEZXQgZXIgaW5nZW4gb3BwZsO4cmluZ2VyIGVubsOlLlxcbktsaWtrIHDDpSBrbmFwcGVuIG5lZGVuZm9yIGZvciDDpSBsZWdnZSB0aWwgZW4gbnkgb3BwZsO4cmluZy5cIixcbiAgICBub0VudHJpZXNSZWFkb25seVRleHQ6IFwiRGV0IGVyIGluZ2VuIG9wcGbDuHJpbmdlci5cIixcbiAgICBtb3JlOiBcIk1lclwiLFxuICAgIHRhZ2JveERvbmVCdXR0b25DYXB0aW9uOiBcIk9LXCIsXG4gICAgc2VsZWN0VG9SYW5rRW1wdHlSYW5rZWRBcmVhVGV4dDogXCJBbGxlIHZhbGcgZXIgcmFuZ2VydFwiLFxuICAgIHNlbGVjdFRvUmFua0VtcHR5VW5yYW5rZWRBcmVhVGV4dDogXCJEcmEgb2cgc2xpcHAgdmFsZyBoZXIgZm9yIMOlIHJhbmdlcmUgZGVtXCJcbn07XG5zdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3VydmV5TG9jYWxpemF0aW9uXCJdLmxvY2FsZXNbXCJub1wiXSA9IG5vcndlZ2lhblN1cnZleVN0cmluZ3M7XG5zdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3VydmV5TG9jYWxpemF0aW9uXCJdLmxvY2FsZU5hbWVzW1wibm9cIl0gPSBcIm5vcnNrXCI7XG4vLyBUaGUgZm9sbG93aW5nIHN0cmluZ3MgaGF2ZSBiZWVuIHRyYW5zbGF0ZWQgYnkgYSBtYWNoaW5lIHRyYW5zbGF0aW9uIHNlcnZpY2Vcbi8vIFJlbW92ZSB0aG9zZSBzdHJpbmdzIHRoYXQgeW91IGhhdmUgY29ycmVjdGVkIG1hbnVhbGx5XG4vLyBpbmRleFRleHQ6IFwiezB9IG9mIHsxfVwiID0+IFwiezB9IGF2IHsxfVwiXG4vLyBwYW5lbER5bmFtaWNUYWJUZXh0Rm9ybWF0OiBcIlBhbmVsIHtwYW5lbEluZGV4fVwiID0+IFwiUGFuZWwge3BhbmVsSW5kZXh9XCJcbi8vIHJhdGluZ09wdGlvbnNDYXB0aW9uOiBcIlNlbGVjdC4uLlwiID0+IFwiVmVsZ2UuLi5cIlxuLy8gbWluRXJyb3I6IFwiVGhlIHZhbHVlIHNob3VsZCBub3QgYmUgbGVzcyB0aGFuIHswfVwiID0+IFwiVmVyZGllbiBiw7hyIGlra2UgdsOmcmUgbWluZHJlIGVubiB7MH1cIlxuLy8gbWF4RXJyb3I6IFwiVGhlIHZhbHVlIHNob3VsZCBub3QgYmUgZ3JlYXRlciB0aGFuIHswfVwiID0+IFwiVmVyZGllbiBiw7hyIGlra2UgdsOmcmUgc3TDuHJyZSBlbm4gezB9XCJcbi8vIGZpbGVEcmFnQXJlYVBsYWNlaG9sZGVyOiBcIkRyYWcgYW5kIGRyb3AgYSBmaWxlIGhlcmUgb3IgY2xpY2sgdGhlIGJ1dHRvbiBiZWxvdyBhbmQgY2hvb3NlIGEgZmlsZSB0byB1cGxvYWQuXCIgPT4gXCJEcmEgb2cgc2xpcHAgZW4gZmlsIGhlciwgZWxsZXIga2xpa2sgcMOlIGtuYXBwZW4gbmVkZW5mb3Igb2cgdmVsZyBlbiBmaWwgZHUgdmlsIGxhc3RlIG9wcC5cIlxuLy8gZW1wdHlSb3dzVGV4dDogXCJUaGVyZSBhcmUgbm8gcm93cy5cIiA9PiBcIkRldCBlciBpbmdlbiByYWRlci5cIlxuLy8gbXVsdGlwbGV0ZXh0X2l0ZW1uYW1lOiBcInRleHRcIiA9PiBcIlRla3N0XCJcbi8vIHNpZ25hdHVyZVBsYWNlSG9sZGVyOiBcIlNpZ24gaGVyZVwiID0+IFwiTG9nZyBpbm4gaGVyXCJcbi8vIG1vZGFsQ2FuY2VsQnV0dG9uVGV4dDogXCJDYW5jZWxcIiA9PiBcIkFubnVsbGVyZVwiXG4vLyBtb2RhbEFwcGx5QnV0dG9uVGV4dDogXCJBcHBseVwiID0+IFwiQnJ1a2VcIlxuLy8gZmlsdGVyU3RyaW5nUGxhY2Vob2xkZXI6IFwiVHlwZSB0byBzZWFyY2guLi5cIiA9PiBcIlNrcml2IGZvciDDpSBzw7hrZSAuLi5cIlxuLy8gZW1wdHlNZXNzYWdlOiBcIk5vIGRhdGEgdG8gZGlzcGxheVwiID0+IFwiSW5nZW4gZGF0YSDDpSB2aXNlXCJcbi8vIG5vRW50cmllc1RleHQ6IFwiVGhlcmUgYXJlIG5vIGVudHJpZXMgeWV0LlxcbkNsaWNrIHRoZSBidXR0b24gYmVsb3cgdG8gYWRkIGEgbmV3IGVudHJ5LlwiID0+IFwiRGV0IGVyIGluZ2VuIG9wcGbDuHJpbmdlciBlbm7DpS5cXG5LbGlrayBww6Uga25hcHBlbiBuZWRlbmZvciBmb3Igw6UgbGVnZ2UgdGlsIGVuIG55IG9wcGbDuHJpbmcuXCJcbi8vIG5vRW50cmllc1JlYWRvbmx5VGV4dDogXCJUaGVyZSBhcmUgbm8gZW50cmllcy5cIiA9PiBcIkRldCBlciBpbmdlbiBvcHBmw7hyaW5nZXIuXCJcbi8vIG1vcmU6IFwiTW9yZVwiID0+IFwiTWVyXCJcbi8vIHRhZ2JveERvbmVCdXR0b25DYXB0aW9uOiBcIk9LXCIgPT4gXCJPS1wiXG4vLyBzZWxlY3RUb1JhbmtFbXB0eVJhbmtlZEFyZWFUZXh0OiBcIkFsbCBjaG9pY2VzIGFyZSByYW5rZWRcIiA9PiBcIkFsbGUgdmFsZyBlciByYW5nZXJ0XCJcbi8vIHNlbGVjdFRvUmFua0VtcHR5VW5yYW5rZWRBcmVhVGV4dDogXCJEcmFnIGFuZCBkcm9wIGNob2ljZXMgaGVyZSB0byByYW5rIHRoZW1cIiA9PiBcIkRyYSBvZyBzbGlwcCB2YWxnIGhlciBmb3Igw6UgcmFuZ2VyZSBkZW1cIi8vIHRha2VQaG90b0NhcHRpb246IFwiVGFrZSBQaG90b1wiID0+IFwiVGEgYmlsZGVcIlxuLy8gY2FtZXJhUGxhY2VIb2xkZXI6IFwiQ2xpY2sgdGhlIGJ1dHRvbiBiZWxvdyB0byB0YWtlIGEgcGhvdG8gdXNpbmcgdGhlIGNhbWVyYS5cIiA9PiBcIktsaWtrIHDDpSBrbmFwcGVuIG5lZGVuZm9yIGZvciDDpSB0YSBldCBiaWxkZSBtZWQga2FtZXJhZXQuXCJcbi8vIGZpbGVDYW1lcmFEcmFnQXJlYVBsYWNlSG9sZGVyOiBcIkRyYWcgYW5kIGRyb3Agb3Igc2VsZWN0IGEgZmlsZSB0byB1cGxvYWQgb3IgdGFrZSBhIHBob3RvIHVzaW5nIHRoZSBjYW1lcmEuXCIgPT4gXCJEcmEgb2cgc2xpcHAgZWxsZXIgdmVsZyBlbiBmaWwgZm9yIMOlIGxhc3RlIG9wcCBlbGxlciB0YSBldCBiaWxkZSBtZWQga2FtZXJhZXQuXCJcbi8vIHJlcGxhY2VGaWxlQ2FwdGlvbjogXCJSZXBsYWNlIGZpbGVcIiA9PiBcIkVyc3RhdHQgZmlsXCJcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9sb2NhbGl6YXRpb24vcGVyc2lhbi50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9sb2NhbGl6YXRpb24vcGVyc2lhbi50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBwZXJzaWFuU3VydmV5U3RyaW5ncyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJwZXJzaWFuU3VydmV5U3RyaW5nc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHBlcnNpYW5TdXJ2ZXlTdHJpbmdzOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBzdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgc3VydmV5LWNvcmUgKi8gXCIuL3NyYy9lbnRyaWVzL2NvcmUudHNcIik7XG5cbnZhciBwZXJzaWFuU3VydmV5U3RyaW5ncyA9IHtcbiAgICBwYWdlUHJldlRleHQ6IFwi2YLYqNmE24xcIixcbiAgICBwYWdlTmV4dFRleHQ6IFwi2KjYudiv24xcIixcbiAgICBjb21wbGV0ZVRleHQ6IFwi2KraqdmF24zZhFwiLFxuICAgIHByZXZpZXdUZXh0OiBcItm+24zYtCDZhtmF2KfbjNi0XCIsXG4gICAgZWRpdFRleHQ6IFwi2YjbjNix2KfbjNi0XCIsXG4gICAgc3RhcnRTdXJ2ZXlUZXh0OiBcIti02LHZiNi5XCIsXG4gICAgb3RoZXJJdGVtVGV4dDogXCLYr9uM2q/YsSjYqtmI2LbbjNitKVwiLFxuICAgIG5vbmVJdGVtVGV4dDogXCLZh9uM2oZcIixcbiAgICBzZWxlY3RBbGxJdGVtVGV4dDogXCLYp9mG2KrYrtin2Kgg2YfZhdmHXCIsXG4gICAgcHJvZ3Jlc3NUZXh0OiBcIti12YHYrdmHIHswfSDYp9iyIHsxfVwiLFxuICAgIGluZGV4VGV4dDogXCJ7MH0gezF9XCIsXG4gICAgcGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0OiBcItmF2YjYsdivIHswfSDYp9iyIHsxfVwiLFxuICAgIHBhbmVsRHluYW1pY1RhYlRleHRGb3JtYXQ6IFwi2b7ZhtmEIHtwYW5lbEluZGV4fVwiLFxuICAgIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCLYqti52K/Yp9ivINm+2KfYs9iuIHswfS97MX0g2LPZiNin2YRcIixcbiAgICBlbXB0eVN1cnZleTogXCLYtdmB2K3ZhyDYp9uMINuM2Kcg2q/YstuM2YbZhyDYp9uMINio2LHYp9uMINin24zZhiDZvtix2LPYtNmG2KfZhdmHINmF2YjYrNmI2K8g2YbbjNiz2KouXCIsXG4gICAgY29tcGxldGluZ1N1cnZleTogXCLYp9iyINi02YXYpyDYqNin2KjYqiDYqtqp2YXbjNmEINin24zZhiDZvtix2LPYtNmG2KfZhdmHINmF2KrYtNqp2LHbjNmFXCIsXG4gICAgY29tcGxldGluZ1N1cnZleUJlZm9yZTogXCLYqNmHINmG2LjYsSDZhduMINix2LPYryDZh9mFINmH2YUg2KfaqdmG2YjZhiDZvtix2LPYtNmG2KfZhdmHINix2Kcg2KraqdmF24zZhCDaqdix2K/ZhyDYp9uM2K8uXCIsXG4gICAgbG9hZGluZ1N1cnZleTogXCLYr9ix2K3Yp9mEINin24zYrNin2K8g2b7Ysdiz2LTZhtin2YXZh1wiLFxuICAgIHBsYWNlaG9sZGVyOiBcItin2YbYqtiu2KfYqCDaqdmG24zYry4uLlwiLFxuICAgIHJhdGluZ09wdGlvbnNDYXB0aW9uOiBcItin2YbYqtiu2KfYqC4uLlwiLFxuICAgIHZhbHVlOiBcItmF2YLYr9in2LFcIixcbiAgICByZXF1aXJlZEVycm9yOiBcItmE2LfZgdinINio2Ycg2LPZiNin2YQg2b7Yp9iz2K4g2K/Zh9uM2K9cIixcbiAgICByZXF1aXJlZEVycm9ySW5QYW5lbDogXCLZhNi32YHYpyDYrdiv2KfZgtmEINio2Ycg24zaqSDYs9mI2KfZhCDZvtin2LPYriDYr9mH24zYry5cIixcbiAgICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcItmE2LfZgdinINiz2YjYp9mE2KfYqiDYqtmF2KfZhSDYs9i32LHZh9inINix2Kcg2b7Yp9iz2K4g2K/Zh9uM2K8uXCIsXG4gICAgbnVtZXJpY0Vycm9yOiBcItmF2YLYr9in2LEg2KjYp9uM2K8g2LnYr9iv24wg2KjYp9i02K9cIixcbiAgICBtaW5FcnJvcjogXCLYp9ix2LLYtCDZhtio2KfbjNivINqp2YXYqtixINin2LIgezB9XCIsXG4gICAgbWF4RXJyb3I6IFwi2KfYsdiy2LQg2YbYqNin24zYryDYqNuM2LTYqtixINin2LIgezB9XCIsXG4gICAgdGV4dE1pbkxlbmd0aDogXCLZhNi32YHYpyDYrdiv2KfZgtmEICB7MH0g2K3YsdmBINmI2KfYsdivINqp2YbbjNivXCIsXG4gICAgdGV4dE1heExlbmd0aDogXCLZhNi32YHYpyDaqdmF2KrYsSDYp9iyICB7MH0g2K3YsdmBINmI2KfYsdivINqp2YbbjNivLlwiLFxuICAgIHRleHRNaW5NYXhMZW5ndGg6IFwi2YTYt9mB2Kcg2KjbjNi02KrYsSDYp9iyICB7MH0g2K3YsdmBINmIINqp2YXYqtixINin2LIgezF9INit2LHZgSDZiNin2LHYryDaqdmG24zYry5cIixcbiAgICBtaW5Sb3dDb3VudEVycm9yOiBcItmE2LfZgdinINit2K/Yp9mC2YQgezB9INiz2LfYsSDZiNin2LHYryDaqdmG24zYry5cIixcbiAgICBtaW5TZWxlY3RFcnJvcjogXCLYrdiv2KfZgtmEIHswfSDYp9mG2KrYrtin2Kgg2qnZhtuM2K8uXCIsXG4gICAgbWF4U2VsZWN0RXJyb3I6IFwi2YTYt9mB2Kcg2KjbjNi02KrYsSDYp9iyICB7MH0g2KfZhtiq2K7Yp9ioINqp2YbbjNivLlwiLFxuICAgIG51bWVyaWNNaW5NYXg6IFwiJ3swfScg2KjYp9uM2K8g2KjbjNmGIHsxfSDZiCB7Mn0g2KjYp9i02K9cIixcbiAgICBudW1lcmljTWluOiBcIid7MH0nINio2LLYsdqv2KrYsSDZhdiz2KfZiNuMIHsxfSDYqNin2LTYr1wiLFxuICAgIG51bWVyaWNNYXg6IFwiJ3swfScg2KjYp9uM2K8g2qnZiNqG2qnYqtixINuM2Kcg2YXYs9in2YjbjCB7MX0g2KjYp9i02K9cIixcbiAgICBpbnZhbGlkRW1haWw6IFwi2YTYt9mB2Kcg2KfbjNmF24zZhCDYtdit24zYrSDYr9ix2Kwg2qnZhtuM2K9cIixcbiAgICBpbnZhbGlkRXhwcmVzc2lvbjogXCLYudio2KfYsdiqOiB7MH0g2b7Yp9iz2K4g2KjYp9uM2K8gJ3RydWUnINio2KfYtNivLlwiLFxuICAgIHVybFJlcXVlc3RFcnJvcjogXCLYr9ix2K7ZiNin2LPYqiDYqNinINiu2LfYpyDYsdmI2KjYsdmIINi02K86ICd7MH0nLiB7MX1cIixcbiAgICB1cmxHZXRDaG9pY2VzRXJyb3I6IFwi2K/Ysdiu2YjYp9iz2Kog2YXYs9uM2LHbjCDYrtin2YTbjCDYqNin2LLar9i02Kog2K/Yp9iv2Ycg24zYpyDZhdiz24zYsSDYr9ix2LPYqiDYqtmG2LjbjNmFINmG2LTYr9mHXCIsXG4gICAgZXhjZWVkTWF4U2l6ZTogXCLYqNuM2LTYqtix24zZhiDYrdis2YUg2YXYrNin2LIg2YHYp9uM2YQ6IHswfVwiLFxuICAgIG90aGVyUmVxdWlyZWRFcnJvcjogXCLZhdmC2K/Yp9ixICfYr9uM2q/YsScg2LHYpyDZiNin2LHYryDaqdmG24zYr1wiLFxuICAgIHVwbG9hZGluZ0ZpbGU6IFwi2YHYp9uM2YQg2K/YsSDYrdin2YQg2KLbjNmE2YjYryDYp9iz2KouINmE2LfZgdinINi12KjYsSDaqdmG24zYry5cIixcbiAgICBsb2FkaW5nRmlsZTogXCLYqNin2LHar9uM2LHbjC4uLlwiLFxuICAgIGNob29zZUZpbGU6IFwi2KfZhtiq2K7Yp9ioINmB2KfbjNmEKNmH2KcpLi4uXCIsXG4gICAgbm9GaWxlQ2hvc2VuOiBcItmH24zahiDZgdin24zZhNuMINin2YbYqtiu2KfYqCDZhti02K/Zh1wiLFxuICAgIGZpbGVEcmFnQXJlYVBsYWNlaG9sZGVyOiBcItqp2LTbjNiv2YYg2Ygg2LHZh9inINqp2LHYr9mGINuM2qkg2YHYp9uM2YQg2K/YsSDYp9uM2YbYrNinINmIINuM2Kcg2qnZhNuM2qkg2KjYsSDYsdmI24wg2K/aqdmF2Ycg2LLbjNixINmIINuM2qkg2YHYp9uM2YQg2KjYsdin24wg2KfZvtmE2YjYryDYsdinINin2YbYqtiu2KfYqCDaqdmG24zYry5cIixcbiAgICBjb25maXJtRGVsZXRlOiBcItii24zYpyDZhdin24zZhCDYqNmHINit2LDZgSDYp9uM2YYg2LHYr9uM2YEg2YfYs9iq24zYr9ifXCIsXG4gICAga2V5RHVwbGljYXRpb25FcnJvcjogXCLYp9uM2YYg2YXZgtiv2KfYsSDYqNin24zYryDYutuM2LEg2Kraqdix2KfYsduMINio2KfYtNivXCIsXG4gICAgYWRkQ29sdW1uOiBcItiz2KrZiNmGINis2K/bjNivXCIsXG4gICAgYWRkUm93OiBcItiz2LfYsSDYrNiv24zYr1wiLFxuICAgIHJlbW92ZVJvdzogXCLYrdiw2YFcIixcbiAgICBlbXB0eVJvd3NUZXh0OiBcItmH24zahiDYsdiv24zZgduMINmI2KzZiNivINmG2K/Yp9ix2K8uXCIsXG4gICAgYWRkUGFuZWw6IFwi2KzYr9uM2K9cIixcbiAgICByZW1vdmVQYW5lbDogXCLYrdiw2YFcIixcbiAgICBjaG9pY2VzX0l0ZW06IFwi2KLbjNiq2YVcIixcbiAgICBtYXRyaXhfY29sdW1uOiBcItiz2KrZiNmGXCIsXG4gICAgbWF0cml4X3JvdzogXCLYs9i32LFcIixcbiAgICBtdWx0aXBsZXRleHRfaXRlbW5hbWU6IFwi2b7bjNin2YXaqVwiLFxuICAgIHNhdmluZ0RhdGE6IFwi2YbYqtin24zYrCDYr9ixINit2KfZhCDYsNiu24zYsdmHINiz2KfYstuMINiv2LEg2LPYsdmI2LEg2KfYs9iqXCIsXG4gICAgc2F2aW5nRGF0YUVycm9yOiBcItiu2LfYp9uM24wg2K/YsSDYsNiu24zYsdmHINiz2KfYstuMINmG2KrYp9uM2Kwg2LHYriDYr9in2K/ZhyDYp9iz2KpcIixcbiAgICBzYXZpbmdEYXRhU3VjY2VzczogXCLZhtiq2KfbjNisINio2Kcg2YXZiNmB2YLbjNiqINiw2K7bjNix2Ycg2LTYr1wiLFxuICAgIHNhdmVBZ2FpbkJ1dHRvbjogXCLZhdis2K/YryDYqtmE2KfYtCDaqdmG24zYr1wiLFxuICAgIHRpbWVyTWluOiBcItiv2YLbjNmC2YdcIixcbiAgICB0aW1lclNlYzogXCLYq9in2YbbjNmHXCIsXG4gICAgdGltZXJTcGVudEFsbDogXCLYtNmF2Kcg2YXYr9iqIHswfSDYr9ixINin24zZhiDYtdmB2K3ZhyDZiCDZhdiv2KogezF9INix2Kcg2K/YsSDZhdis2YXZiNi5INiz2b7YsduMINqp2LHYr9mHINin24zYry5cIixcbiAgICB0aW1lclNwZW50UGFnZTogXCLYtNmF2Kcg2YXYr9iqIHswfSDYsdinINiv2LEg2KfbjNmGINi12YHYrdmHINiz2b7YsduMINqp2LHYr9mHINin24zYry5cIixcbiAgICB0aW1lclNwZW50U3VydmV5OiBcIti02YXYpyDZhdiv2KogezB9INix2Kcg2K/YsSDZhdis2YXZiNi5INiz2b7YsduMINqp2LHYr9mHINin24zYry5cIixcbiAgICB0aW1lckxpbWl0QWxsOiBcIti02YXYpyDZhdiv2KogezB9INin2LIgezF9INiv2LEg2KfbjNmGINi12YHYrdmHINmIINmF2K/YqiB7Mn0g2KfYsiB7M30g2LHYpyDYr9ixINmF2KzZhdmI2Lkg2LPZvtix24wg2qnYsdiv2Ycg2KfbjNivLlwiLFxuICAgIHRpbWVyTGltaXRQYWdlOiBcIti02YXYpyDZhdiv2KogezB9INin2LIgezF9INix2Kcg2K/YsSDYp9uM2YYg2LXZgdit2Ycg2LPZvtix24wg2qnYsdiv2Ycg2KfbjNivLlwiLFxuICAgIHRpbWVyTGltaXRTdXJ2ZXk6IFwi2LTZhdinINmF2K/YqiB7MH0g2KfYsiB7MX0g2LHYpyDYr9ixINmF2KzZhdmI2Lkg2LPZvtix24wg2qnYsdiv2Ycg2KfbjNivLlwiLFxuICAgIGNsZWFyQ2FwdGlvbjogXCLYrtin2YTbjCDaqdix2K/ZhlwiLFxuICAgIHNpZ25hdHVyZVBsYWNlSG9sZGVyOiBcItin24zZhtis2Kcg2LHYpyDYp9mF2LbYpyDaqdmG24zYr1wiLFxuICAgIGNob29zZUZpbGVDYXB0aW9uOiBcItin2YbYqtiu2KfYqCDZgdin24zZhFwiLFxuICAgIHRha2VQaG90b0NhcHRpb246IFwi2q/YsdmB2KrZhiDYudqp2LNcIixcbiAgICBjYW1lcmFQbGFjZUhvbGRlcjogXCLYsdmI24wg2K/aqdmF2Ycg2LLbjNixINqp2YTbjNqpINqp2YbbjNivINiq2Kcg2KjYpyDYp9iz2KrZgdin2K/ZhyDYp9iyINiv2YjYsdio24zZhiDYudqp2LMg2Kjar9uM2LHbjNivLlwiLFxuICAgIGZpbGVDYW1lcmFEcmFnQXJlYVBsYWNlSG9sZGVyOiBcItqp2LTbjNiv2YYg2Ygg2LHZh9inINqp2LHYr9mGINuM2Kcg2KfZhtiq2K7Yp9ioINuM2qkg2YHYp9uM2YQg2KjYsdin24wg2KfZvtmE2YjYryDbjNinINqv2LHZgdiq2YYg2LnaqdizINio2Kcg2KfYs9iq2YHYp9iv2Ycg2KfYsiDYr9mI2LHYqNuM2YYuXCIsXG4gICAgcmVwbGFjZUZpbGVDYXB0aW9uOiBcItis2KfbjNqv2LLbjNmG24wg2b7YsdmI2YbYr9mHXCIsXG4gICAgcmVtb3ZlRmlsZUNhcHRpb246IFwi2K3YsNmBINin24zZhiDZgdin24zZhFwiLFxuICAgIGJvb2xlYW5DaGVja2VkTGFiZWw6IFwi2KjZhNmHXCIsXG4gICAgYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcItiu24zYsVwiLFxuICAgIGNvbmZpcm1SZW1vdmVGaWxlOiBcItii24zYpyDZhduM2K7ZiNin2YfbjNivINin24zZhiDZgdin24zZhCDYsdinINm+2KfaqSDaqdmG24zYrzogezB9P1wiLFxuICAgIGNvbmZpcm1SZW1vdmVBbGxGaWxlczogXCLYotuM2Kcg2YXbjNiu2YjYp9mH24zYryDYqtmF2KfZhSDZgdin24zZhCDZh9inINix2Kcg2b7Yp9qpINqp2YbbjNivP1wiLFxuICAgIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCLYudmG2YjYp9mGINiz2YjYp9mEXCIsXG4gICAgbW9kYWxDYW5jZWxCdXR0b25UZXh0OiBcItmE2LrZiFwiLFxuICAgIG1vZGFsQXBwbHlCdXR0b25UZXh0OiBcItiv2LHYrtmI2KfYs9iqXCIsXG4gICAgZmlsdGVyU3RyaW5nUGxhY2Vob2xkZXI6IFwi2KrYp9uM2b4g2KjYsdin24wg2KzYs9iq2KzZiC4uLlwiLFxuICAgIGVtcHR5TWVzc2FnZTogXCLYr9in2K/ZhyDYp9uMINio2LHYp9uMINmG2YXYp9uM2LQg2YjYrNmI2K8g2YbYr9in2LHYr1wiLFxuICAgIG5vRW50cmllc1RleHQ6IFwi2YfZhtmI2LIg2YfbjNqGINmI2LHZiNiv24wg2YjYrNmI2K8g2YbYr9in2LHYry5cXG7YsdmI24wg2K/aqdmF2Ycg2LLbjNixINqp2YTbjNqpINqp2YbbjNivINiq2Kcg24zaqSDZiNix2YjYr9uMINis2K/bjNivINin2LbYp9mB2Ycg2LTZiNivLlwiLFxuICAgIG5vRW50cmllc1JlYWRvbmx5VGV4dDogXCLZh9uM2oYg2YjYsdmI2K/bjCDZiNis2YjYryDZhtiv2KfYsdivLlwiLFxuICAgIG1vcmU6IFwi2KjbjNi02KrYsVwiLFxuICAgIHRhZ2JveERvbmVCdXR0b25DYXB0aW9uOiBcItio2KfYtNmHXCIsXG4gICAgc2VsZWN0VG9SYW5rRW1wdHlSYW5rZWRBcmVhVGV4dDogXCLZh9mF2Ycg2KfZhtiq2K7Yp9ioINmH2Kcg2LHYqtio2Ycg2KjZhtiv24wg2YXbjCDYtNmI2YbYr1wiLFxuICAgIHNlbGVjdFRvUmFua0VtcHR5VW5yYW5rZWRBcmVhVGV4dDogXCLYp9mG2KrYrtin2Kgg2YfYp9uMINqp2LTbjNiv2YYg2Ygg2LHZh9inINqp2LHYr9mGINiv2LEg2KfbjNmG2KzYpyDYqNix2KfbjCDYsdiq2KjZhyDYqNmG2K/bjCDYp9mG2YfYp1wiXG59O1xuc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN1cnZleUxvY2FsaXphdGlvblwiXS5sb2NhbGVzW1wiZmFcIl0gPSBwZXJzaWFuU3VydmV5U3RyaW5ncztcbnN1cnZleV9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdXJ2ZXlMb2NhbGl6YXRpb25cIl0ubG9jYWxlTmFtZXNbXCJmYVwiXSA9IFwi2YHYp9ix2ZLYs9mQ2YlcIjtcbi8vIFRoZSBmb2xsb3dpbmcgc3RyaW5ncyBoYXZlIGJlZW4gdHJhbnNsYXRlZCBieSBhIG1hY2hpbmUgdHJhbnNsYXRpb24gc2VydmljZVxuLy8gUmVtb3ZlIHRob3NlIHN0cmluZ3MgdGhhdCB5b3UgaGF2ZSBjb3JyZWN0ZWQgbWFudWFsbHlcbi8vIGluZGV4VGV4dDogXCJ7MH0gb2YgezF9XCIgPT4gXCJ7MH0gezF9XCJcbi8vIHBhbmVsRHluYW1pY1RhYlRleHRGb3JtYXQ6IFwiUGFuZWwge3BhbmVsSW5kZXh9XCIgPT4gXCLZvtmG2YQge3BhbmVsSW5kZXh9XCJcbi8vIHJhdGluZ09wdGlvbnNDYXB0aW9uOiBcIlNlbGVjdC4uLlwiID0+IFwi2KfZhtiq2K7Yp9ioLi4uXCJcbi8vIG1pbkVycm9yOiBcIlRoZSB2YWx1ZSBzaG91bGQgbm90IGJlIGxlc3MgdGhhbiB7MH1cIiA9PiBcItin2LHYsti0INmG2KjYp9uM2K8g2qnZhdiq2LEg2KfYsiB7MH1cIlxuLy8gbWF4RXJyb3I6IFwiVGhlIHZhbHVlIHNob3VsZCBub3QgYmUgZ3JlYXRlciB0aGFuIHswfVwiID0+IFwi2KfYsdiy2LQg2YbYqNin24zYryDYqNuM2LTYqtixINin2LIgezB9XCJcbi8vIGZpbGVEcmFnQXJlYVBsYWNlaG9sZGVyOiBcIkRyYWcgYW5kIGRyb3AgYSBmaWxlIGhlcmUgb3IgY2xpY2sgdGhlIGJ1dHRvbiBiZWxvdyBhbmQgY2hvb3NlIGEgZmlsZSB0byB1cGxvYWQuXCIgPT4gXCLaqdi024zYr9mGINmIINix2YfYpyDaqdix2K/ZhiDbjNqpINmB2KfbjNmEINiv2LEg2KfbjNmG2KzYpyDZiCDbjNinINqp2YTbjNqpINio2LEg2LHZiNuMINiv2qnZhdmHINiy24zYsSDZiCDbjNqpINmB2KfbjNmEINio2LHYp9uMINin2b7ZhNmI2K8g2LHYpyDYp9mG2KrYrtin2Kgg2qnZhtuM2K8uXCJcbi8vIGVtcHR5Um93c1RleHQ6IFwiVGhlcmUgYXJlIG5vIHJvd3MuXCIgPT4gXCLZh9uM2oYg2LHYr9uM2YHbjCDZiNis2YjYryDZhtiv2KfYsdivLlwiXG4vLyBtdWx0aXBsZXRleHRfaXRlbW5hbWU6IFwidGV4dFwiID0+IFwi2b7bjNin2YXaqVwiXG4vLyBzaWduYXR1cmVQbGFjZUhvbGRlcjogXCJTaWduIGhlcmVcIiA9PiBcItin24zZhtis2Kcg2LHYpyDYp9mF2LbYpyDaqdmG24zYr1wiXG4vLyBtb2RhbENhbmNlbEJ1dHRvblRleHQ6IFwiQ2FuY2VsXCIgPT4gXCLZhNi62YhcIlxuLy8gbW9kYWxBcHBseUJ1dHRvblRleHQ6IFwiQXBwbHlcIiA9PiBcItiv2LHYrtmI2KfYs9iqXCJcbi8vIGZpbHRlclN0cmluZ1BsYWNlaG9sZGVyOiBcIlR5cGUgdG8gc2VhcmNoLi4uXCIgPT4gXCLYqtin24zZviDYqNix2KfbjCDYrNiz2KrYrNmILi4uXCJcbi8vIGVtcHR5TWVzc2FnZTogXCJObyBkYXRhIHRvIGRpc3BsYXlcIiA9PiBcItiv2KfYr9mHINin24wg2KjYsdin24wg2YbZhdin24zYtCDZiNis2YjYryDZhtiv2KfYsdivXCJcbi8vIG5vRW50cmllc1RleHQ6IFwiVGhlcmUgYXJlIG5vIGVudHJpZXMgeWV0LlxcbkNsaWNrIHRoZSBidXR0b24gYmVsb3cgdG8gYWRkIGEgbmV3IGVudHJ5LlwiID0+IFwi2YfZhtmI2LIg2YfbjNqGINmI2LHZiNiv24wg2YjYrNmI2K8g2YbYr9in2LHYry5cXG7YsdmI24wg2K/aqdmF2Ycg2LLbjNixINqp2YTbjNqpINqp2YbbjNivINiq2Kcg24zaqSDZiNix2YjYr9uMINis2K/bjNivINin2LbYp9mB2Ycg2LTZiNivLlwiXG4vLyBub0VudHJpZXNSZWFkb25seVRleHQ6IFwiVGhlcmUgYXJlIG5vIGVudHJpZXMuXCIgPT4gXCLZh9uM2oYg2YjYsdmI2K/bjCDZiNis2YjYryDZhtiv2KfYsdivLlwiXG4vLyBtb3JlOiBcIk1vcmVcIiA9PiBcItio24zYtNiq2LFcIlxuLy8gdGFnYm94RG9uZUJ1dHRvbkNhcHRpb246IFwiT0tcIiA9PiBcItio2KfYtNmHXCJcbi8vIHNlbGVjdFRvUmFua0VtcHR5UmFua2VkQXJlYVRleHQ6IFwiQWxsIGNob2ljZXMgYXJlIHJhbmtlZFwiID0+IFwi2YfZhdmHINin2YbYqtiu2KfYqCDZh9inINix2KrYqNmHINio2YbYr9uMINmF24wg2LTZiNmG2K9cIlxuLy8gc2VsZWN0VG9SYW5rRW1wdHlVbnJhbmtlZEFyZWFUZXh0OiBcIkRyYWcgYW5kIGRyb3AgY2hvaWNlcyBoZXJlIHRvIHJhbmsgdGhlbVwiID0+IFwi2KfZhtiq2K7Yp9ioINmH2KfbjCDaqdi024zYr9mGINmIINix2YfYpyDaqdix2K/ZhiDYr9ixINin24zZhtis2Kcg2KjYsdin24wg2LHYqtio2Ycg2KjZhtiv24wg2KfZhtmH2KdcIi8vIHRha2VQaG90b0NhcHRpb246IFwiVGFrZSBQaG90b1wiID0+IFwi2q/YsdmB2KrZhiDYudqp2LNcIlxuLy8gY2FtZXJhUGxhY2VIb2xkZXI6IFwiQ2xpY2sgdGhlIGJ1dHRvbiBiZWxvdyB0byB0YWtlIGEgcGhvdG8gdXNpbmcgdGhlIGNhbWVyYS5cIiA9PiBcItix2YjbjCDYr9qp2YXZhyDYstuM2LEg2qnZhNuM2qkg2qnZhtuM2K8g2KrYpyDYqNinINin2LPYqtmB2KfYr9mHINin2LIg2K/ZiNix2KjbjNmGINi52qnYsyDYqNqv24zYsduM2K8uXCJcbi8vIGZpbGVDYW1lcmFEcmFnQXJlYVBsYWNlSG9sZGVyOiBcIkRyYWcgYW5kIGRyb3Agb3Igc2VsZWN0IGEgZmlsZSB0byB1cGxvYWQgb3IgdGFrZSBhIHBob3RvIHVzaW5nIHRoZSBjYW1lcmEuXCIgPT4gXCLaqdi024zYr9mGINmIINix2YfYpyDaqdix2K/ZhiDbjNinINin2YbYqtiu2KfYqCDbjNqpINmB2KfbjNmEINio2LHYp9uMINin2b7ZhNmI2K8g24zYpyDar9ix2YHYqtmGINi52qnYsyDYqNinINin2LPYqtmB2KfYr9mHINin2LIg2K/ZiNix2KjbjNmGLlwiXG4vLyByZXBsYWNlRmlsZUNhcHRpb246IFwiUmVwbGFjZSBmaWxlXCIgPT4gXCLYrNin24zar9iy24zZhtuMINm+2LHZiNmG2K/Zh1wiXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvbG9jYWxpemF0aW9uL3BvbGlzaC50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL2xvY2FsaXphdGlvbi9wb2xpc2gudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBwb2xpc2hTdXJ2ZXlTdHJpbmdzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInBvbGlzaFN1cnZleVN0cmluZ3NcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBwb2xpc2hTdXJ2ZXlTdHJpbmdzOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBzdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgc3VydmV5LWNvcmUgKi8gXCIuL3NyYy9lbnRyaWVzL2NvcmUudHNcIik7XG5cbnZhciBwb2xpc2hTdXJ2ZXlTdHJpbmdzID0ge1xuICAgIHBhZ2VQcmV2VGV4dDogXCJXc3RlY3pcIixcbiAgICBwYWdlTmV4dFRleHQ6IFwiRGFsZWpcIixcbiAgICBjb21wbGV0ZVRleHQ6IFwiR290b3dlXCIsXG4gICAgcHJldmlld1RleHQ6IFwiUHJlbWllcmFcIixcbiAgICBlZGl0VGV4dDogXCJFZHljamFcIixcbiAgICBzdGFydFN1cnZleVRleHQ6IFwiU3RhcnRcIixcbiAgICBvdGhlckl0ZW1UZXh0OiBcIklubmEgb2Rwb3dpZWTFuiAod3Bpc3opXCIsXG4gICAgbm9uZUl0ZW1UZXh0OiBcIkJyYWtcIixcbiAgICBzZWxlY3RBbGxJdGVtVGV4dDogXCJXeWJpZXJ6IHdzenlzdGtpZVwiLFxuICAgIHByb2dyZXNzVGV4dDogXCJTdHJvbmEgezB9IHogezF9XCIsXG4gICAgaW5kZXhUZXh0OiBcInswfSBvZCB7MX1cIixcbiAgICBwYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ6IFwiWmFwaXMgezB9IHogezF9XCIsXG4gICAgcGFuZWxEeW5hbWljVGFiVGV4dEZvcm1hdDogXCJQYW5lbCB7cGFuZWxJbmRleH1cIixcbiAgICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwiT2Rwb3dpZWR6aSBuYSB7MH0vezF9IHB5dGFuaWFcIixcbiAgICBlbXB0eVN1cnZleTogXCJOaWUgbWEgd2lkb2N6bnljaCBweXRhxYQuXCIsXG4gICAgY29tcGxldGluZ1N1cnZleTogXCJEemnEmWt1amVteSB6YSB3eXBlxYJuaWVuaWUgYW5raWV0eSFcIixcbiAgICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOiBcIlogbmFzenljaCB6YXBpc8OzdyB3eW5pa2EsIMW8ZSB3eXBlxYJuacWCZcWbIGp1xbwgdMSZIGFua2lldMSZLlwiLFxuICAgIGxvYWRpbmdTdXJ2ZXk6IFwiVHJ3YSB3Y3p5dHl3YW5pZSBhbmtpZXR5Li4uXCIsXG4gICAgcGxhY2Vob2xkZXI6IFwiV3liaWVyei4uLlwiLFxuICAgIHJhdGluZ09wdGlvbnNDYXB0aW9uOiBcIktsaWtuaWogdHV0YWosIGFieSBvY2VuacSHLi4uXCIsXG4gICAgdmFsdWU6IFwiV2FydG/Fm8SHXCIsXG4gICAgcmVxdWlyZWRFcnJvcjogXCJQcm9zesSZIG9kcG93aWVkemllxIcgbmEgdG8gcHl0YW5pZS5cIixcbiAgICByZXF1aXJlZEVycm9ySW5QYW5lbDogXCJQcm9zesSZIG9kcG93aWVkemllxIcgbmEgY28gbmFqbW5pZWogamVkbm8gcHl0YW5pZS5cIixcbiAgICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIlByb3N6xJkgb2Rwb3dpZWR6aWXEhyBuYSB3c3p5c3RraWUgcHl0YW5pYS5cIixcbiAgICBudW1lcmljRXJyb3I6IFwiVyB0eW0gcG9sdSBtb8W8bmEgd3Bpc2HEhyB0eWxrbyBsaWN6YnkuXCIsXG4gICAgbWluRXJyb3I6IFwiV2FydG/Fm8SHIG5pZSBwb3dpbm5hIGJ5xIcgbW5pZWpzemEgbmnFvCB7MH1cIixcbiAgICBtYXhFcnJvcjogXCJXYXJ0b8WbxIcgbmllIHBvd2lubmEgYnnEhyB3acSZa3N6YSBuacW8IHswfVwiLFxuICAgIHRleHRNaW5MZW5ndGg6IFwiUHJvc3rEmSB3cGlzYcSHIGNvIG5ham1uaWVqIHswfSB6bmFrw7N3LlwiLFxuICAgIHRleHRNYXhMZW5ndGg6IFwiUHJvc3rEmSB3cGlzYcSHIG1uaWVqIG5pxbwgezB9IHpuYWvDs3cuXCIsXG4gICAgdGV4dE1pbk1heExlbmd0aDogXCJQcm9zesSZIHdwaXNhxIcgd2nEmWNlaiBuacW8IHswfSBpIG1uaWVqIG5pxbwgezF9IHpuYWvDs3cuXCIsXG4gICAgbWluUm93Q291bnRFcnJvcjogXCJQcm9zesSZIHV6dXBlxYJuacSHIHByenluYWptbmllaiB7MH0gd2llcnN6eS5cIixcbiAgICBtaW5TZWxlY3RFcnJvcjogXCJQcm9zesSZIHd5YnJhxIcgY28gbmFqbW5pZWogezB9IHBvenljamkuXCIsXG4gICAgbWF4U2VsZWN0RXJyb3I6IFwiUHJvc3rEmSB3eWJyYcSHIG5pZSB3acSZY2VqIG5pxbwgezB9IHBvenljamkuXCIsXG4gICAgbnVtZXJpY01pbk1heDogXCJPZHBvd2llZMW6ICd7MH0nIHBvd2lubmEgYnnEhyB3acSZa3N6YSBsdWIgcsOzd25hIHsxfSBvcmF6IG1uaWVqc3phIGx1YiByw7N3bmEgezJ9XCIsXG4gICAgbnVtZXJpY01pbjogXCJPZHBvd2llZMW6ICd7MH0nIHBvd2lubmEgYnnEhyB3acSZa3N6YSBsdWIgcsOzd25hIHsxfVwiLFxuICAgIG51bWVyaWNNYXg6IFwiT2Rwb3dpZWTFuiAnezB9JyBwb3dpbm5hIGJ5xIcgbW5pZWpzemEgbHViIHLDs3duYSB7MX1cIixcbiAgICBpbnZhbGlkRW1haWw6IFwiUHJvc3rEmSBwb2RhxIcgcHJhd2lkxYJvd3kgYWRyZXMgZW1haWwuXCIsXG4gICAgaW52YWxpZEV4cHJlc3Npb246IFwiV3lyYcW8ZW5pZTogezB9IHBvd2lubm8gd3JhY2HEhyAncHJhd2R6aXdlJy5cIixcbiAgICB1cmxSZXF1ZXN0RXJyb3I6IFwixbvEhWRhbmllIHp3csOzY2nFgm8gYsWCxIVkICd7MH0nLiB7MX1cIixcbiAgICB1cmxHZXRDaG9pY2VzRXJyb3I6IFwixbvEhWRhbmllIG5pZSB6d3LDs2NpxYJvIGRhbnljaCBhbGJvIMWbY2llxbxrYSBqZXN0IG5pZXByYXdpZMWCb3dhXCIsXG4gICAgZXhjZWVkTWF4U2l6ZTogXCJSb3ptaWFyIHByemVzxYJhbmVnbyBwbGlrdSBuaWUgbW/FvGUgcHJ6ZWtyYWN6YcSHIHswfS5cIixcbiAgICBvdGhlclJlcXVpcmVkRXJyb3I6IFwiUHJvc3rEmSBwb2RhxIcgaW5uxIUgb2Rwb3dpZWTFui5cIixcbiAgICB1cGxvYWRpbmdGaWxlOiBcIlRyd2EgcHJ6ZW5vc3plbmllIFR3b2plZ28gcGxpa3UsIHByb3N6xJkgc3Byw7Nib3dhxIcgcG9ub3duaWUgemEga2lsa2Egc2VrdW5kLlwiLFxuICAgIGxvYWRpbmdGaWxlOiBcIsWBYWRvd2FuaWUuLi5cIixcbiAgICBjaG9vc2VGaWxlOiBcIld5YmllcnogcGxpayhpKS4uLlwiLFxuICAgIG5vRmlsZUNob3NlbjogXCJOaWUgd3licmFubyDFvGFkbmVnbyBwbGlrdVwiLFxuICAgIGZpbGVEcmFnQXJlYVBsYWNlaG9sZGVyOiBcIlVwdcWbxIcgcGxpayB0dXRhaiBsdWIga2xpa25paiBwcnp5Y2lzayBwb25pxbxlaiwgYWJ5IHphxYJhZG93YcSHIHBsaWsuXCIsXG4gICAgY29uZmlybURlbGV0ZTogXCJDaGNlc3ogc2thc293YcSHIG5hZ3JhbmllP1wiLFxuICAgIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwiVGEgd2FydG/Fm8SHIHBvd2lubmEgYnnEhyB3eWrEhXRrb3dhLlwiLFxuICAgIGFkZENvbHVtbjogXCJEb2RhaiBrb2x1bW7EmVwiLFxuICAgIGFkZFJvdzogXCJEb2RhaiB3aWVyc3pcIixcbiAgICByZW1vdmVSb3c6IFwiVXN1xYRcIixcbiAgICBlbXB0eVJvd3NUZXh0OiBcIk5pZSBtYSByesSZZMOzdy5cIixcbiAgICBhZGRQYW5lbDogXCJEb2RhaiBwYW5lbFwiLFxuICAgIHJlbW92ZVBhbmVsOiBcIlVzdcWEXCIsXG4gICAgY2hvaWNlc19JdGVtOiBcImVsZW1lbnRcIixcbiAgICBtYXRyaXhfY29sdW1uOiBcIktvbHVtbmFcIixcbiAgICBtYXRyaXhfcm93OiBcIldpZXJzelwiLFxuICAgIG11bHRpcGxldGV4dF9pdGVtbmFtZTogXCJ0ZWtzdFwiLFxuICAgIHNhdmluZ0RhdGE6IFwiWmFwaXN1asSZIHd5bmlraSBhbmtpZXR5IG5hIHNlcndlcnplLi4uXCIsXG4gICAgc2F2aW5nRGF0YUVycm9yOiBcIld5c3TEhXBpxYIgYsWCxIVkIGkgd3luaWtpIG5pZSBtb2fFgnkgem9zdGHEhyB6YXBpc2FuZS5cIixcbiAgICBzYXZpbmdEYXRhU3VjY2VzczogXCJXeW5pa2kgem9zdGHFgnkgcG9wcmF3bmllIHphcGlzYW5lIVwiLFxuICAgIHNhdmVBZ2FpbkJ1dHRvbjogXCJTcHLDs2J1aiBwb25vd25pZVwiLFxuICAgIHRpbWVyTWluOiBcIm1pblwiLFxuICAgIHRpbWVyU2VjOiBcInNla1wiLFxuICAgIHRpbWVyU3BlbnRBbGw6IFwiU3DEmWR6acWCZcWbIHswfSBuYSB0ZWogc3Ryb25pZSBhIHcgc3VtaWUgezF9LlwiLFxuICAgIHRpbWVyU3BlbnRQYWdlOiBcIlNwxJlkemnFgmXFmyB7MH0gbmEgdGVqIHN0cm9uaWUuXCIsXG4gICAgdGltZXJTcGVudFN1cnZleTogXCJTcMSZZHppxYJlxZsgdyBzdW1pZSB7MH0uXCIsXG4gICAgdGltZXJMaW1pdEFsbDogXCJTcMSZZHppxYJlxZsgezB9IHogezF9IG5hIHRlaiBzdHJvbmllIGEgdyBzdW1pZSB7Mn0geiB7M30uXCIsXG4gICAgdGltZXJMaW1pdFBhZ2U6IFwiU3DEmWR6acWCZcWbIHswfSB6IHsxfSBuYSB0ZWogc3Ryb25pZVwiLFxuICAgIHRpbWVyTGltaXRTdXJ2ZXk6IFwiU3DEmWR6acWCZcWbIHswfSB6IHsxfS5cIixcbiAgICBjbGVhckNhcHRpb246IFwiV3ljennFm8SHXCIsXG4gICAgc2lnbmF0dXJlUGxhY2VIb2xkZXI6IFwiUG9kcGlzeiB0dXRhalwiLFxuICAgIGNob29zZUZpbGVDYXB0aW9uOiBcIld5YmllcnogcGxpa1wiLFxuICAgIHRha2VQaG90b0NhcHRpb246IFwiWnLDs2IgemRqxJljaWVcIixcbiAgICBjYW1lcmFQbGFjZUhvbGRlcjogXCJLbGlrbmlqIHByenljaXNrIHBvbmnFvGVqLCBhYnkgenJvYmnEhyB6ZGrEmWNpZSBhcGFyYXRlbS5cIixcbiAgICBmaWxlQ2FtZXJhRHJhZ0FyZWFQbGFjZUhvbGRlcjogXCJQcnplY2nEhWduaWogaSB1cHXFm8SHIGx1YiB3eWJpZXJ6IHBsaWssIGt0w7NyeSBjaGNlc3ogcHJ6ZXPFgmHEhyBsdWIgenJvYmnEhyB6ZGrEmWNpZSB6YSBwb21vY8SFIGFwYXJhdHUuXCIsXG4gICAgcmVwbGFjZUZpbGVDYXB0aW9uOiBcIlphc3TEhXAgcGxpa1wiLFxuICAgIHJlbW92ZUZpbGVDYXB0aW9uOiBcIlVzdcWEIHRlbiBwbGlrXCIsXG4gICAgYm9vbGVhbkNoZWNrZWRMYWJlbDogXCJUYWtcIixcbiAgICBib29sZWFuVW5jaGVja2VkTGFiZWw6IFwiTmllXCIsXG4gICAgY29uZmlybVJlbW92ZUZpbGU6IFwiSmVzdGXFmyBwZXdpZW4sIMW8ZSBjaGNlc3ogdXN1bsSFxIcgdGVuIHBsaWs6IHswfT9cIixcbiAgICBjb25maXJtUmVtb3ZlQWxsRmlsZXM6IFwiSmVzdGXFmyBwZXdpZW4sIMW8ZSBjaGNlc3ogdXN1bsSFxIcgd3N6eXN0a2llIHBsaWtpP1wiLFxuICAgIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCJUeXR1xYIgcHl0YW5pYVwiLFxuICAgIG1vZGFsQ2FuY2VsQnV0dG9uVGV4dDogXCJBbnVsb3dhxIdcIixcbiAgICBtb2RhbEFwcGx5QnV0dG9uVGV4dDogXCJaYXN0b3Nvd2HEh1wiLFxuICAgIGZpbHRlclN0cmluZ1BsYWNlaG9sZGVyOiBcIldwaXN6IGFieSB3eXN6dWthxIcuLi5cIixcbiAgICBlbXB0eU1lc3NhZ2U6IFwiQnJhayBkYW55Y2ggZG8gd3nFm3dpZXRsZW5pYVwiLFxuICAgIG5vRW50cmllc1RleHQ6IFwiTmllIG1hIGplc3pjemUgd3Bpc8Ozdy5cXG5LbGlrbmlqIHByenljaXNrIHBvbmnFvGVqLCBhYnkgZG9kYcSHIG5vd3kgd3Bpcy5cIixcbiAgICBub0VudHJpZXNSZWFkb25seVRleHQ6IFwiQnJhayB3cGlzw7N3LlwiLFxuICAgIG1vcmU6IFwiV2nEmWNlalwiLFxuICAgIHRhZ2JveERvbmVCdXR0b25DYXB0aW9uOiBcIk9LXCIsXG4gICAgc2VsZWN0VG9SYW5rRW1wdHlSYW5rZWRBcmVhVGV4dDogXCJXc3p5c3RraWUgd3lib3J5IHPEhSB1c3plcmVnb3dhbmVcIixcbiAgICBzZWxlY3RUb1JhbmtFbXB0eVVucmFua2VkQXJlYVRleHQ6IFwiUHJ6ZWNpxIVnbmlqIGkgdXB1xZvEhyB0dXRhaiB3eWJvcnksIGFieSBqZSB1c3plcmVnb3dhxIdcIlxufTtcbnN1cnZleV9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdXJ2ZXlMb2NhbGl6YXRpb25cIl0ubG9jYWxlc1tcInBsXCJdID0gcG9saXNoU3VydmV5U3RyaW5ncztcbnN1cnZleV9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdXJ2ZXlMb2NhbGl6YXRpb25cIl0ubG9jYWxlTmFtZXNbXCJwbFwiXSA9IFwicG9sc2tpXCI7XG4vLyBUaGUgZm9sbG93aW5nIHN0cmluZ3MgaGF2ZSBiZWVuIHRyYW5zbGF0ZWQgYnkgYSBtYWNoaW5lIHRyYW5zbGF0aW9uIHNlcnZpY2Vcbi8vIFJlbW92ZSB0aG9zZSBzdHJpbmdzIHRoYXQgeW91IGhhdmUgY29ycmVjdGVkIG1hbnVhbGx5XG4vLyBwYW5lbER5bmFtaWNUYWJUZXh0Rm9ybWF0OiBcIlBhbmVsIHtwYW5lbEluZGV4fVwiID0+IFwiUGFuZWwge3BhbmVsSW5kZXh9XCJcbi8vIGVtcHR5TWVzc2FnZTogXCJObyBkYXRhIHRvIGRpc3BsYXlcIiA9PiBcIkJyYWsgZGFueWNoIGRvIHd5xZt3aWV0bGVuaWFcIlxuLy8gbm9FbnRyaWVzUmVhZG9ubHlUZXh0OiBcIlRoZXJlIGFyZSBubyBlbnRyaWVzLlwiID0+IFwiQnJhayB3cGlzw7N3LlwiXG4vLyBtb3JlOiBcIk1vcmVcIiA9PiBcIldpxJljZWpcIlxuLy8gdGFnYm94RG9uZUJ1dHRvbkNhcHRpb246IFwiT0tcIiA9PiBcIk9LXCJcbi8vIHNlbGVjdFRvUmFua0VtcHR5UmFua2VkQXJlYVRleHQ6IFwiQWxsIGNob2ljZXMgYXJlIHJhbmtlZFwiID0+IFwiV3N6eXN0a2llIHd5Ym9yeSBzxIUgdXN6ZXJlZ293YW5lXCJcbi8vIHNlbGVjdFRvUmFua0VtcHR5VW5yYW5rZWRBcmVhVGV4dDogXCJEcmFnIGFuZCBkcm9wIGNob2ljZXMgaGVyZSB0byByYW5rIHRoZW1cIiA9PiBcIlByemVjacSFZ25paiBpIHVwdcWbxIcgdHV0YWogd3lib3J5LCBhYnkgamUgdXN6ZXJlZ293YcSHXCIvLyB0YWtlUGhvdG9DYXB0aW9uOiBcIlRha2UgUGhvdG9cIiA9PiBcIlpyw7NiIHpkasSZY2llXCJcbi8vIGNhbWVyYVBsYWNlSG9sZGVyOiBcIkNsaWNrIHRoZSBidXR0b24gYmVsb3cgdG8gdGFrZSBhIHBob3RvIHVzaW5nIHRoZSBjYW1lcmEuXCIgPT4gXCJLbGlrbmlqIHByenljaXNrIHBvbmnFvGVqLCBhYnkgenJvYmnEhyB6ZGrEmWNpZSBhcGFyYXRlbS5cIlxuLy8gZmlsZUNhbWVyYURyYWdBcmVhUGxhY2VIb2xkZXI6IFwiRHJhZyBhbmQgZHJvcCBvciBzZWxlY3QgYSBmaWxlIHRvIHVwbG9hZCBvciB0YWtlIGEgcGhvdG8gdXNpbmcgdGhlIGNhbWVyYS5cIiA9PiBcIlByemVjacSFZ25paiBpIHVwdcWbxIcgbHViIHd5YmllcnogcGxpaywga3TDs3J5IGNoY2VzeiBwcnplc8WCYcSHIGx1YiB6cm9iacSHIHpkasSZY2llIHphIHBvbW9jxIUgYXBhcmF0dS5cIlxuLy8gcmVwbGFjZUZpbGVDYXB0aW9uOiBcIlJlcGxhY2UgZmlsZVwiID0+IFwiWmFzdMSFcCBwbGlrXCJcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9sb2NhbGl6YXRpb24vcG9ydHVndWVzZS1ici50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9sb2NhbGl6YXRpb24vcG9ydHVndWVzZS1ici50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBwb3J0dWd1ZXNlQnJTdXJ2ZXlTdHJpbmdzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInBvcnR1Z3Vlc2VCclN1cnZleVN0cmluZ3NcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBwb3J0dWd1ZXNlQnJTdXJ2ZXlTdHJpbmdzOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBzdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgc3VydmV5LWNvcmUgKi8gXCIuL3NyYy9lbnRyaWVzL2NvcmUudHNcIik7XG5cbi8qKlxuICogWW91IGRvbid0IG5lZWQgdG8gdHJhbnNsYXRlIHN0cmluZ3MgdGhhdCBoYXZlIHRoZSBzYW1lIHZhbHVlIGFzIFBvcnR1Z3Vlc2UgdHJhbnNsYXRpb25cbiAqL1xudmFyIHBvcnR1Z3Vlc2VCclN1cnZleVN0cmluZ3MgPSB7XG4gICAgcGFnZVByZXZUZXh0OiBcIkFudGVyaW9yXCIsXG4gICAgcGFnZU5leHRUZXh0OiBcIlByw7N4aW1vXCIsXG4gICAgY29tcGxldGVUZXh0OiBcIkNvbXBsZXRhclwiLFxuICAgIHByZXZpZXdUZXh0OiBcIlZpc3VhbGl6YXJcIixcbiAgICBlZGl0VGV4dDogXCJFZGl0YXJcIixcbiAgICBzdGFydFN1cnZleVRleHQ6IFwiQ29tZcOnYXJcIixcbiAgICBvdGhlckl0ZW1UZXh0OiBcIk91dHJvcyAoZGVzY3JldmVyKVwiLFxuICAgIG5vbmVJdGVtVGV4dDogXCJOZW5odW1cIixcbiAgICBzZWxlY3RBbGxJdGVtVGV4dDogXCJTZWxlY2lvbmFyIHR1ZG9cIixcbiAgICBwcm9ncmVzc1RleHQ6IFwiUMOhZ2luYSB7MH0gZGUgezF9XCIsXG4gICAgaW5kZXhUZXh0OiBcInswfSBkZSB7MX1cIixcbiAgICBwYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ6IFwiezB9IGRlIHsxfVwiLFxuICAgIHBhbmVsRHluYW1pY1RhYlRleHRGb3JtYXQ6IFwiUGFpbmVsIHtwYW5lbEluZGV4fVwiLFxuICAgIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCJQZXJndW50YXMgcmVzcG9uZGlkYXMgezB9L3sxfVwiLFxuICAgIGVtcHR5U3VydmV5OiBcIk7Do28gaMOhIHDDoWdpbmEgdmlzw612ZWwgb3UgcGVyZ3VudGEgbmEgcGVzcXVpc2EuXCIsXG4gICAgY29tcGxldGluZ1N1cnZleTogXCJPYnJpZ2FkbyBwb3IgZmluYWxpemFyIGEgcGVzcXVpc2EhXCIsXG4gICAgY29tcGxldGluZ1N1cnZleUJlZm9yZTogXCJOb3Nzb3MgcmVnaXN0cm9zIG1vc3RyYW0gcXVlIHZvY8OqIGrDoSBmaW5hbGl6b3UgYSBwZXNxdWlzYS5cIixcbiAgICBsb2FkaW5nU3VydmV5OiBcIkEgcGVzcXVpc2EgZXN0w6EgY2FycmVnYW5kby4uLlwiLFxuICAgIHBsYWNlaG9sZGVyOiBcIlNlbGVjaW9uYXIuLi5cIixcbiAgICByYXRpbmdPcHRpb25zQ2FwdGlvbjogXCJTZWxlY2lvbmFyLi4uXCIsXG4gICAgdmFsdWU6IFwidmFsb3JcIixcbiAgICByZXF1aXJlZEVycm9yOiBcIlBvciBmYXZvciwgcmVzcG9uZGEgYSBwZXJndW50YS5cIixcbiAgICByZXF1aXJlZEVycm9ySW5QYW5lbDogXCJQb3IgZmF2b3IsIHJlc3BvbmRhIHBlbG8gbWVub3MgdW1hIHBlcmd1bnRhLlwiLFxuICAgIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwiUG9yIGZhdm9yLCByZXNwb25kYSBhcyBwZXJndW50YXMgZW0gdG9kYXMgYXMgbGluaGFzLlwiLFxuICAgIG51bWVyaWNFcnJvcjogXCJPIHZhbG9yIGRldmUgc2VyIG51bcOpcmljby5cIixcbiAgICBtaW5FcnJvcjogXCJPIHZhbG9yIG7Do28gZGV2ZSBzZXIgaW5mZXJpb3IgYSB7MH1cIixcbiAgICBtYXhFcnJvcjogXCJPIHZhbG9yIG7Do28gZGV2ZSBzZXIgbWFpb3IgcXVlIHswfVwiLFxuICAgIHRleHRNaW5MZW5ndGg6IFwiSW50cm9kdXphIHBlbG8gbWVub3MgezB9IGNhcmFjdGVyZShzKS5cIixcbiAgICB0ZXh0TWF4TGVuZ3RoOiBcIkludHJvZHV6YSBubyBtw6F4aW1vIHswfSBjYXJhY3RlcmUocykuXCIsXG4gICAgdGV4dE1pbk1heExlbmd0aDogXCJJbnNpcmEgcGVsbyBtZW5vcyB7MH0gZSBuw6NvIG1haXMgZG8gcXVlIHsxfSBjYXJhY3RlcmVzLlwiLFxuICAgIG1pblJvd0NvdW50RXJyb3I6IFwiUG9yIGZhdm9yLCBwcmVlbmNoYSBwZWxvIG1lbm9zIHswfSBsaW5oYShzKS5cIixcbiAgICBtaW5TZWxlY3RFcnJvcjogXCJTZWxlY2lvbmUgcGVsbyBtZW5vcyB7MH0gdmFyaWFudGUocykuXCIsXG4gICAgbWF4U2VsZWN0RXJyb3I6IFwiUG9yIGZhdm9yLCBzZWxlY2lvbmUgbsOjbyBtYWlzIGRvIHF1ZSB7MH0gb3DDp8O1ZXMuXCIsXG4gICAgbnVtZXJpY01pbk1heDogXCJPIFxcXCJ7MH1cXFwiIGRldmUgc2VyIHBlbG8gbWVub3MgezF9IGUgbm8gbcOheGltbyB7Mn1cIixcbiAgICBudW1lcmljTWluOiBcIk8gXFxcInswfVxcXCIgZGV2ZSBzZXIgcGVsbyBtZW5vcyB7MX1cIixcbiAgICBudW1lcmljTWF4OiBcIk8gXFxcInswfVxcXCIgZGV2ZSBzZXIgbm8gbcOheGltbyB7MX1cIixcbiAgICBpbnZhbGlkRW1haWw6IFwiUG9yIGZhdm9yLCBpbmZvcm1lIHVtIGUtbWFpbCB2w6FsaWRvLlwiLFxuICAgIGludmFsaWRFeHByZXNzaW9uOiBcIkEgZXhwcmVzc8OjbzogezB9IGRldmUgcmV0b3JuYXIgJ3ZlcmRhZGVpcm8nLlwiLFxuICAgIHVybFJlcXVlc3RFcnJvcjogXCJBIHJlcXVpc2nDp8OjbyByZXRvcm5vdSBvIGVycm8gJ3swfScuIHsxfVwiLFxuICAgIHVybEdldENob2ljZXNFcnJvcjogXCJBIHJlcXVpc2nDp8OjbyBuw6NvIHJldG9ybm91IGRhZG9zIG91IG8gJ2NhbWluaG8nIGRhIHJlcXVpc2nDp8OjbyBuw6NvIGVzdMOhIGNvcnJldG9cIixcbiAgICBleGNlZWRNYXhTaXplOiBcIk8gdGFtYW5obyBkbyBhcnF1aXZvIG7Do28gZGV2ZSBleGNlZGVyIHswfS5cIixcbiAgICBvdGhlclJlcXVpcmVkRXJyb3I6IFwiUG9yIGZhdm9yLCBpbmZvcm1lIG8gb3V0cm8gdmFsb3IuXCIsXG4gICAgdXBsb2FkaW5nRmlsZTogXCJTZXUgYXJxdWl2byBlc3TDoSBzZW5kbyBjYXJyZWdhZG8uIFBvciBmYXZvciwgYWd1YXJkZSBhbGd1bnMgc2VndW5kb3MgZSB0ZW50ZSBub3ZhbWVudGUuXCIsXG4gICAgbG9hZGluZ0ZpbGU6IFwiQ2FycmVnYW5kby4uLlwiLFxuICAgIGNob29zZUZpbGU6IFwiRXNjb2xoYSBvKHMpIGFycXVpdm8ocykuLi5cIixcbiAgICBub0ZpbGVDaG9zZW46IFwiTmVuaHVtIGFycXVpdm8gZXNjb2xoaWRvXCIsXG4gICAgZmlsZURyYWdBcmVhUGxhY2Vob2xkZXI6IFwiQXJyYXN0ZSBlIHNvbHRlIHVtIGFycXVpdm8gYXF1aSBvdSBjbGlxdWUgbm8gYm90w6NvIGFiYWl4byBlIGVzY29saGEgdW0gYXJxdWl2byBwYXJhIGNhcnJlZ2FyLlwiLFxuICAgIGNvbmZpcm1EZWxldGU6IFwiVGVtIGNlcnRlemEgcXVlIGRlc2VqYSBkZWxldGFyP1wiLFxuICAgIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwiRXNzZSB2YWxvciBkZXZlIHNlciDDum5pY28uXCIsXG4gICAgYWRkQ29sdW1uOiBcIkFkaWNpb25hciBjb2x1bmFcIixcbiAgICBhZGRSb3c6IFwiQWRpY2lvbmFyIGxpbmhhXCIsXG4gICAgcmVtb3ZlUm93OiBcIlJldGlyYXJcIixcbiAgICBlbXB0eVJvd3NUZXh0OiBcIk7Do28gaMOhIGZpbGFzLlwiLFxuICAgIGFkZFBhbmVsOiBcIkFkaWNpb25hciBub3ZvXCIsXG4gICAgcmVtb3ZlUGFuZWw6IFwiUmV0aXJhclwiLFxuICAgIGNob2ljZXNfSXRlbTogXCJpdGVtXCIsXG4gICAgbWF0cml4X2NvbHVtbjogXCJDb2x1bmFcIixcbiAgICBtYXRyaXhfcm93OiBcIlJlbWFyXCIsXG4gICAgbXVsdGlwbGV0ZXh0X2l0ZW1uYW1lOiBcIlRleHRvXCIsXG4gICAgc2F2aW5nRGF0YTogXCJPcyByZXN1bHRhZG9zIGVzdG8gc2VuZG8gc2Fsdm9zIG5vIHNlcnZpZG9yLi4uXCIsXG4gICAgc2F2aW5nRGF0YUVycm9yOiBcIk9jb3JyZXUgdW0gZXJybyBlIG7Do28gZm9pIHBvc3PDrXZlbCBzYWx2YXIgb3MgcmVzdWx0YWRvcy5cIixcbiAgICBzYXZpbmdEYXRhU3VjY2VzczogXCJPcyByZXN1bHRhZG9zIGZvcmFtIHNhbHZvcyBjb20gc3VjZXNzbyFcIixcbiAgICBzYXZlQWdhaW5CdXR0b246IFwiVGVudGFyIG5vdmFtZW50ZVwiLFxuICAgIHRpbWVyTWluOiBcIk1pblwiLFxuICAgIHRpbWVyU2VjOiBcInNlZ3VuZG9cIixcbiAgICB0aW1lclNwZW50QWxsOiBcIlZvY8OqIGdhc3RvdSB7MH0gbmVzdGEgcMOhZ2luYSBlIHsxfSBubyB0b3RhbC5cIixcbiAgICB0aW1lclNwZW50UGFnZTogXCJWb2PDqiBwYXNzb3UgezB9IG5lc3RhIHDDoWdpbmEuXCIsXG4gICAgdGltZXJTcGVudFN1cnZleTogXCJHYXN0b3UgezB9IG5vIHRvdGFsLlwiLFxuICAgIHRpbWVyTGltaXRBbGw6IFwiVm9jw6ogZ2FzdG91IHswfSBkZSB7MX0gbmVzdGEgcMOhZ2luYSBlIHsyfSBkZSB7M30gbm8gdG90YWwuXCIsXG4gICAgdGltZXJMaW1pdFBhZ2U6IFwiVm9jw6ogZ2FzdG91IHswfSBkZSB7MX0gbmVzdGEgcMOhZ2luYS5cIixcbiAgICB0aW1lckxpbWl0U3VydmV5OiBcIkdhc3RvdSB7MH0gZGUgezF9IG5vIHRvdGFsLlwiLFxuICAgIGNsZWFyQ2FwdGlvbjogXCJDbGFyb1wiLFxuICAgIHNpZ25hdHVyZVBsYWNlSG9sZGVyOiBcIkFzc2luZSBhcXVpXCIsXG4gICAgY2hvb3NlRmlsZUNhcHRpb246IFwiRXNjb2xoZXIgYXJxdWl2b1wiLFxuICAgIHRha2VQaG90b0NhcHRpb246IFwiVGlyYXIgZm90b1wiLFxuICAgIGNhbWVyYVBsYWNlSG9sZGVyOiBcIkNsaXF1ZSBubyBib3TDo28gYWJhaXhvIHBhcmEgdGlyYXIgdW1hIGZvdG8gdXNhbmRvIGEgY8OibWVyYS5cIixcbiAgICBmaWxlQ2FtZXJhRHJhZ0FyZWFQbGFjZUhvbGRlcjogXCJBcnJhc3RlIGUgc29sdGUgb3Ugc2VsZWNpb25lIHVtIGFycXVpdm8gcGFyYSBjYXJyZWdhciBvdSB0aXJhciB1bWEgZm90byB1c2FuZG8gYSBjw6JtZXJhLlwiLFxuICAgIHJlcGxhY2VGaWxlQ2FwdGlvbjogXCJTdWJzdGl0dWlyIGFycXVpdm9cIixcbiAgICByZW1vdmVGaWxlQ2FwdGlvbjogXCJSZW1vdmVyIGVzdGUgYXJxdWl2b1wiLFxuICAgIGJvb2xlYW5DaGVja2VkTGFiZWw6IFwiU2ltXCIsXG4gICAgYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcIk7Do29cIixcbiAgICBjb25maXJtUmVtb3ZlRmlsZTogXCJUZW0gY2VydGV6YSBxdWUgZGVzZWphIHJlbW92ZXIgZXN0ZSBhcnF1aXZvOiB7MH0/XCIsXG4gICAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcIlRlbSBjZXJ0ZXphIHF1ZSBkZXNlamEgcmVtb3ZlciB0b2RvcyBvcyBhcnF1aXZvcz9cIixcbiAgICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwiVMOtdHVsbyBkYSBwZXJndW50YVwiLFxuICAgIG1vZGFsQ2FuY2VsQnV0dG9uVGV4dDogXCJDYW5jZWxhclwiLFxuICAgIG1vZGFsQXBwbHlCdXR0b25UZXh0OiBcIkFwbGljYXJcIixcbiAgICBmaWx0ZXJTdHJpbmdQbGFjZWhvbGRlcjogXCJEaWdpdGUgcGFyYSBwZXNxdWlzYXIuLi5cIixcbiAgICBlbXB0eU1lc3NhZ2U6IFwiTmVuaHVtIGRhZG8gYSBzZXIgZXhpYmlkb1wiLFxuICAgIG5vRW50cmllc1RleHQ6IFwiQWluZGEgbsOjbyBow6EgaW5zY3Jpw6fDtWVzLlxcbkNsaXF1ZSBubyBib3TDo28gYWJhaXhvIHBhcmEgYWRpY2lvbmFyIHVtYSBub3ZhIGVudHJhZGEuXCIsXG4gICAgbm9FbnRyaWVzUmVhZG9ubHlUZXh0OiBcIk7Do28gaMOhIGVudHJhZGFzLlwiLFxuICAgIG1vcmU6IFwiTWFpc1wiLFxuICAgIHRhZ2JveERvbmVCdXR0b25DYXB0aW9uOiBcIk9LRVlcIixcbiAgICBzZWxlY3RUb1JhbmtFbXB0eVJhbmtlZEFyZWFUZXh0OiBcIlRvZGFzIGFzIG9ww6fDtWVzIHPDo28gY2xhc3NpZmljYWRhc1wiLFxuICAgIHNlbGVjdFRvUmFua0VtcHR5VW5yYW5rZWRBcmVhVGV4dDogXCJBcnJhc3RlIGUgc29sdGUgYXMgb3DDp8O1ZXMgYXF1aSBwYXJhIGNsYXNzaWZpY8OhLWxhc1wiXG59O1xuc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN1cnZleUxvY2FsaXphdGlvblwiXS5sb2NhbGVzW1wicHQtYnJcIl0gPSBwb3J0dWd1ZXNlQnJTdXJ2ZXlTdHJpbmdzO1xuc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN1cnZleUxvY2FsaXphdGlvblwiXS5sb2NhbGVOYW1lc1tcInB0LWJyXCJdID0gXCJwb3J0dWd1w6pzIGJyYXNpbGVpcm9cIjtcbi8vIFRoZSBmb2xsb3dpbmcgc3RyaW5ncyBoYXZlIGJlZW4gdHJhbnNsYXRlZCBieSBhIG1hY2hpbmUgdHJhbnNsYXRpb24gc2VydmljZVxuLy8gUmVtb3ZlIHRob3NlIHN0cmluZ3MgdGhhdCB5b3UgaGF2ZSBjb3JyZWN0ZWQgbWFudWFsbHlcbi8vIHBhZ2VQcmV2VGV4dDogXCJQcmV2aW91c1wiID0+IFwiQW50ZXJpb3JcIlxuLy8gcGFnZU5leHRUZXh0OiBcIk5leHRcIiA9PiBcIlByw7N4aW1vXCJcbi8vIGNvbXBsZXRlVGV4dDogXCJDb21wbGV0ZVwiID0+IFwiQ29tcGxldGFyXCJcbi8vIHByZXZpZXdUZXh0OiBcIlByZXZpZXdcIiA9PiBcIlZpc3VhbGl6YXJcIlxuLy8gZWRpdFRleHQ6IFwiRWRpdFwiID0+IFwiRWRpdGFyXCJcbi8vIHN0YXJ0U3VydmV5VGV4dDogXCJTdGFydFwiID0+IFwiQ29tZcOnYXJcIlxuLy8gb3RoZXJJdGVtVGV4dDogXCJPdGhlciAoZGVzY3JpYmUpXCIgPT4gXCJPdXRyb3MgKGRlc2NyZXZlcilcIlxuLy8gbm9uZUl0ZW1UZXh0OiBcIk5vbmVcIiA9PiBcIk5lbmh1bVwiXG4vLyBzZWxlY3RBbGxJdGVtVGV4dDogXCJTZWxlY3QgQWxsXCIgPT4gXCJTZWxlY2lvbmFyIHR1ZG9cIlxuLy8gcHJvZ3Jlc3NUZXh0OiBcIlBhZ2UgezB9IG9mIHsxfVwiID0+IFwiUMOhZ2luYSB7MH0gZGUgezF9XCJcbi8vIGluZGV4VGV4dDogXCJ7MH0gb2YgezF9XCIgPT4gXCJ7MH0gZGUgezF9XCJcbi8vIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCJ7MH0gb2YgezF9XCIgPT4gXCJ7MH0gZGUgezF9XCJcbi8vIHBhbmVsRHluYW1pY1RhYlRleHRGb3JtYXQ6IFwiUGFuZWwge3BhbmVsSW5kZXh9XCIgPT4gXCJQYWluZWwge3BhbmVsSW5kZXh9XCJcbi8vIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCJBbnN3ZXJlZCB7MH0vezF9IHF1ZXN0aW9uc1wiID0+IFwiUGVyZ3VudGFzIHJlc3BvbmRpZGFzIHswfS97MX1cIlxuLy8gcGxhY2Vob2xkZXI6IFwiU2VsZWN0Li4uXCIgPT4gXCJTZWxlY2lvbmFyLi4uXCJcbi8vIHJhdGluZ09wdGlvbnNDYXB0aW9uOiBcIlNlbGVjdC4uLlwiID0+IFwiU2VsZWNpb25hci4uLlwiXG4vLyB2YWx1ZTogXCJ2YWx1ZVwiID0+IFwidmFsb3JcIlxuLy8gbnVtZXJpY0Vycm9yOiBcIlRoZSB2YWx1ZSBzaG91bGQgYmUgbnVtZXJpYy5cIiA9PiBcIk8gdmFsb3IgZGV2ZSBzZXIgbnVtw6lyaWNvLlwiXG4vLyBtaW5FcnJvcjogXCJUaGUgdmFsdWUgc2hvdWxkIG5vdCBiZSBsZXNzIHRoYW4gezB9XCIgPT4gXCJPIHZhbG9yIG7Do28gZGV2ZSBzZXIgaW5mZXJpb3IgYSB7MH1cIlxuLy8gbWF4RXJyb3I6IFwiVGhlIHZhbHVlIHNob3VsZCBub3QgYmUgZ3JlYXRlciB0aGFuIHswfVwiID0+IFwiTyB2YWxvciBuw6NvIGRldmUgc2VyIG1haW9yIHF1ZSB7MH1cIlxuLy8gdGV4dE1pbkxlbmd0aDogXCJQbGVhc2UgZW50ZXIgYXQgbGVhc3QgezB9IGNoYXJhY3RlcihzKS5cIiA9PiBcIkludHJvZHV6YSBwZWxvIG1lbm9zIHswfSBjYXJhY3RlcmUocykuXCJcbi8vIHRleHRNYXhMZW5ndGg6IFwiUGxlYXNlIGVudGVyIG5vIG1vcmUgdGhhbiB7MH0gY2hhcmFjdGVyKHMpLlwiID0+IFwiSW50cm9kdXphIG5vIG3DoXhpbW8gezB9IGNhcmFjdGVyZShzKS5cIlxuLy8gdGV4dE1pbk1heExlbmd0aDogXCJQbGVhc2UgZW50ZXIgYXQgbGVhc3QgezB9IGFuZCBubyBtb3JlIHRoYW4gezF9IGNoYXJhY3RlcnMuXCIgPT4gXCJJbnNpcmEgcGVsbyBtZW5vcyB7MH0gZSBuw6NvIG1haXMgZG8gcXVlIHsxfSBjYXJhY3RlcmVzLlwiXG4vLyBtaW5Sb3dDb3VudEVycm9yOiBcIlBsZWFzZSBmaWxsIGluIGF0IGxlYXN0IHswfSByb3cocykuXCIgPT4gXCJQb3IgZmF2b3IsIHByZWVuY2hhIHBlbG8gbWVub3MgezB9IGxpbmhhKHMpLlwiXG4vLyBtaW5TZWxlY3RFcnJvcjogXCJQbGVhc2Ugc2VsZWN0IGF0IGxlYXN0IHswfSB2YXJpYW50KHMpLlwiID0+IFwiU2VsZWNpb25lIHBlbG8gbWVub3MgezB9IHZhcmlhbnRlKHMpLlwiXG4vLyBudW1lcmljTWluTWF4OiBcIlRoZSAnezB9JyBzaG91bGQgYmUgYXQgbGVhc3QgezF9IGFuZCBhdCBtb3N0IHsyfVwiID0+IFwiTyBcXFwiezB9XFxcIiBkZXZlIHNlciBwZWxvIG1lbm9zIHsxfSBlIG5vIG3DoXhpbW8gezJ9XCJcbi8vIG51bWVyaWNNaW46IFwiVGhlICd7MH0nIHNob3VsZCBiZSBhdCBsZWFzdCB7MX1cIiA9PiBcIk8gXFxcInswfVxcXCIgZGV2ZSBzZXIgcGVsbyBtZW5vcyB7MX1cIlxuLy8gbnVtZXJpY01heDogXCJUaGUgJ3swfScgc2hvdWxkIGJlIGF0IG1vc3QgezF9XCIgPT4gXCJPIFxcXCJ7MH1cXFwiIGRldmUgc2VyIG5vIG3DoXhpbW8gezF9XCJcbi8vIGludmFsaWRFeHByZXNzaW9uOiBcIlRoZSBleHByZXNzaW9uOiB7MH0gc2hvdWxkIHJldHVybiAndHJ1ZScuXCIgPT4gXCJBIGV4cHJlc3PDo286IHswfSBkZXZlIHJldG9ybmFyICd2ZXJkYWRlaXJvJy5cIlxuLy8gZXhjZWVkTWF4U2l6ZTogXCJUaGUgZmlsZSBzaXplIHNob3VsZCBub3QgZXhjZWVkIHswfS5cIiA9PiBcIk8gdGFtYW5obyBkbyBhcnF1aXZvIG7Do28gZGV2ZSBleGNlZGVyIHswfS5cIlxuLy8gY2hvb3NlRmlsZTogXCJDaG9vc2UgZmlsZShzKS4uLlwiID0+IFwiRXNjb2xoYSBvKHMpIGFycXVpdm8ocykuLi5cIlxuLy8gZmlsZURyYWdBcmVhUGxhY2Vob2xkZXI6IFwiRHJhZyBhbmQgZHJvcCBhIGZpbGUgaGVyZSBvciBjbGljayB0aGUgYnV0dG9uIGJlbG93IGFuZCBjaG9vc2UgYSBmaWxlIHRvIHVwbG9hZC5cIiA9PiBcIkFycmFzdGUgZSBzb2x0ZSB1bSBhcnF1aXZvIGFxdWkgb3UgY2xpcXVlIG5vIGJvdMOjbyBhYmFpeG8gZSBlc2NvbGhhIHVtIGFycXVpdm8gcGFyYSBjYXJyZWdhci5cIlxuLy8gYWRkQ29sdW1uOiBcIkFkZCBDb2x1bW5cIiA9PiBcIkFkaWNpb25hciBjb2x1bmFcIlxuLy8gYWRkUm93OiBcIkFkZCBSb3dcIiA9PiBcIkFkaWNpb25hciBsaW5oYVwiXG4vLyByZW1vdmVSb3c6IFwiUmVtb3ZlXCIgPT4gXCJSZXRpcmFyXCJcbi8vIGVtcHR5Um93c1RleHQ6IFwiVGhlcmUgYXJlIG5vIHJvd3MuXCIgPT4gXCJOw6NvIGjDoSBmaWxhcy5cIlxuLy8gYWRkUGFuZWw6IFwiQWRkIG5ld1wiID0+IFwiQWRpY2lvbmFyIG5vdm9cIlxuLy8gcmVtb3ZlUGFuZWw6IFwiUmVtb3ZlXCIgPT4gXCJSZXRpcmFyXCJcbi8vIGNob2ljZXNfSXRlbTogXCJpdGVtXCIgPT4gXCJpdGVtXCJcbi8vIG1hdHJpeF9jb2x1bW46IFwiQ29sdW1uXCIgPT4gXCJDb2x1bmFcIlxuLy8gbWF0cml4X3JvdzogXCJSb3dcIiA9PiBcIlJlbWFyXCJcbi8vIG11bHRpcGxldGV4dF9pdGVtbmFtZTogXCJ0ZXh0XCIgPT4gXCJUZXh0b1wiXG4vLyBzYXZlQWdhaW5CdXR0b246IFwiVHJ5IGFnYWluXCIgPT4gXCJUZW50YXIgbm92YW1lbnRlXCJcbi8vIHRpbWVyTWluOiBcIm1pblwiID0+IFwiTWluXCJcbi8vIHRpbWVyU2VjOiBcInNlY1wiID0+IFwic2VndW5kb1wiXG4vLyB0aW1lclNwZW50QWxsOiBcIllvdSBoYXZlIHNwZW50IHswfSBvbiB0aGlzIHBhZ2UgYW5kIHsxfSBpbiB0b3RhbC5cIiA9PiBcIlZvY8OqIGdhc3RvdSB7MH0gbmVzdGEgcMOhZ2luYSBlIHsxfSBubyB0b3RhbC5cIlxuLy8gdGltZXJTcGVudFBhZ2U6IFwiWW91IGhhdmUgc3BlbnQgezB9IG9uIHRoaXMgcGFnZS5cIiA9PiBcIlZvY8OqIHBhc3NvdSB7MH0gbmVzdGEgcMOhZ2luYS5cIlxuLy8gdGltZXJTcGVudFN1cnZleTogXCJZb3UgaGF2ZSBzcGVudCB7MH0gaW4gdG90YWwuXCIgPT4gXCJHYXN0b3UgezB9IG5vIHRvdGFsLlwiXG4vLyB0aW1lckxpbWl0QWxsOiBcIllvdSBoYXZlIHNwZW50IHswfSBvZiB7MX0gb24gdGhpcyBwYWdlIGFuZCB7Mn0gb2YgezN9IGluIHRvdGFsLlwiID0+IFwiVm9jw6ogZ2FzdG91IHswfSBkZSB7MX0gbmVzdGEgcMOhZ2luYSBlIHsyfSBkZSB7M30gbm8gdG90YWwuXCJcbi8vIHRpbWVyTGltaXRQYWdlOiBcIllvdSBoYXZlIHNwZW50IHswfSBvZiB7MX0gb24gdGhpcyBwYWdlLlwiID0+IFwiVm9jw6ogZ2FzdG91IHswfSBkZSB7MX0gbmVzdGEgcMOhZ2luYS5cIlxuLy8gdGltZXJMaW1pdFN1cnZleTogXCJZb3UgaGF2ZSBzcGVudCB7MH0gb2YgezF9IGluIHRvdGFsLlwiID0+IFwiR2FzdG91IHswfSBkZSB7MX0gbm8gdG90YWwuXCJcbi8vIGNsZWFyQ2FwdGlvbjogXCJDbGVhclwiID0+IFwiQ2xhcm9cIlxuLy8gc2lnbmF0dXJlUGxhY2VIb2xkZXI6IFwiU2lnbiBoZXJlXCIgPT4gXCJBc3NpbmUgYXF1aVwiXG4vLyBib29sZWFuQ2hlY2tlZExhYmVsOiBcIlllc1wiID0+IFwiU2ltXCJcbi8vIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCJOb1wiID0+IFwiTsOjb1wiXG4vLyBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwiUXVlc3Rpb24gVGl0bGVcIiA9PiBcIlTDrXR1bG8gZGEgcGVyZ3VudGFcIlxuLy8gbW9kYWxDYW5jZWxCdXR0b25UZXh0OiBcIkNhbmNlbFwiID0+IFwiQ2FuY2VsYXJcIlxuLy8gbW9kYWxBcHBseUJ1dHRvblRleHQ6IFwiQXBwbHlcIiA9PiBcIkFwbGljYXJcIlxuLy8gZmlsdGVyU3RyaW5nUGxhY2Vob2xkZXI6IFwiVHlwZSB0byBzZWFyY2guLi5cIiA9PiBcIkRpZ2l0ZSBwYXJhIHBlc3F1aXNhci4uLlwiXG4vLyBlbXB0eU1lc3NhZ2U6IFwiTm8gZGF0YSB0byBkaXNwbGF5XCIgPT4gXCJOZW5odW0gZGFkbyBhIHNlciBleGliaWRvXCJcbi8vIG5vRW50cmllc1RleHQ6IFwiVGhlcmUgYXJlIG5vIGVudHJpZXMgeWV0LlxcbkNsaWNrIHRoZSBidXR0b24gYmVsb3cgdG8gYWRkIGEgbmV3IGVudHJ5LlwiID0+IFwiQWluZGEgbsOjbyBow6EgaW5zY3Jpw6fDtWVzLlxcbkNsaXF1ZSBubyBib3TDo28gYWJhaXhvIHBhcmEgYWRpY2lvbmFyIHVtYSBub3ZhIGVudHJhZGEuXCJcbi8vIG5vRW50cmllc1JlYWRvbmx5VGV4dDogXCJUaGVyZSBhcmUgbm8gZW50cmllcy5cIiA9PiBcIk7Do28gaMOhIGVudHJhZGFzLlwiXG4vLyBtb3JlOiBcIk1vcmVcIiA9PiBcIk1haXNcIlxuLy8gdGFnYm94RG9uZUJ1dHRvbkNhcHRpb246IFwiT0tcIiA9PiBcIk9LRVlcIlxuLy8gc2VsZWN0VG9SYW5rRW1wdHlSYW5rZWRBcmVhVGV4dDogXCJBbGwgY2hvaWNlcyBhcmUgcmFua2VkXCIgPT4gXCJUb2RhcyBhcyBvcMOnw7VlcyBzw6NvIGNsYXNzaWZpY2FkYXNcIlxuLy8gc2VsZWN0VG9SYW5rRW1wdHlVbnJhbmtlZEFyZWFUZXh0OiBcIkRyYWcgYW5kIGRyb3AgY2hvaWNlcyBoZXJlIHRvIHJhbmsgdGhlbVwiID0+IFwiQXJyYXN0ZSBlIHNvbHRlIGFzIG9ww6fDtWVzIGFxdWkgcGFyYSBjbGFzc2lmaWPDoS1sYXNcIi8vIHRha2VQaG90b0NhcHRpb246IFwiVGFrZSBQaG90b1wiID0+IFwiVGlyYXIgZm90b1wiXG4vLyBjYW1lcmFQbGFjZUhvbGRlcjogXCJDbGljayB0aGUgYnV0dG9uIGJlbG93IHRvIHRha2UgYSBwaG90byB1c2luZyB0aGUgY2FtZXJhLlwiID0+IFwiQ2xpcXVlIG5vIGJvdMOjbyBhYmFpeG8gcGFyYSB0aXJhciB1bWEgZm90byB1c2FuZG8gYSBjw6JtZXJhLlwiXG4vLyBmaWxlQ2FtZXJhRHJhZ0FyZWFQbGFjZUhvbGRlcjogXCJEcmFnIGFuZCBkcm9wIG9yIHNlbGVjdCBhIGZpbGUgdG8gdXBsb2FkIG9yIHRha2UgYSBwaG90byB1c2luZyB0aGUgY2FtZXJhLlwiID0+IFwiQXJyYXN0ZSBlIHNvbHRlIG91IHNlbGVjaW9uZSB1bSBhcnF1aXZvIHBhcmEgY2FycmVnYXIgb3UgdGlyYXIgdW1hIGZvdG8gdXNhbmRvIGEgY8OibWVyYS5cIlxuLy8gcmVwbGFjZUZpbGVDYXB0aW9uOiBcIlJlcGxhY2UgZmlsZVwiID0+IFwiU3Vic3RpdHVpciBhcnF1aXZvXCJcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9sb2NhbGl6YXRpb24vcG9ydHVndWVzZS50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9sb2NhbGl6YXRpb24vcG9ydHVndWVzZS50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBwb3J0dWd1ZXNlU3VydmV5U3RyaW5ncyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJwb3J0dWd1ZXNlU3VydmV5U3RyaW5nc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHBvcnR1Z3Vlc2VTdXJ2ZXlTdHJpbmdzOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBzdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgc3VydmV5LWNvcmUgKi8gXCIuL3NyYy9lbnRyaWVzL2NvcmUudHNcIik7XG5cbnZhciBwb3J0dWd1ZXNlU3VydmV5U3RyaW5ncyA9IHtcbiAgICBwYWdlUHJldlRleHQ6IFwiQW50ZXJpb3JcIixcbiAgICBwYWdlTmV4dFRleHQ6IFwiUHLDs3hpbW9cIixcbiAgICBjb21wbGV0ZVRleHQ6IFwiRmluYWxpemFyXCIsXG4gICAgcHJldmlld1RleHQ6IFwiUHLDqS12aXN1YWxpemHDp8Ojb1wiLFxuICAgIGVkaXRUZXh0OiBcIkVkaXRhclwiLFxuICAgIHN0YXJ0U3VydmV5VGV4dDogXCJDb21lw6dhclwiLFxuICAgIG90aGVySXRlbVRleHQ6IFwiT3V0cm9zIChkZXNjcmV2ZXIpXCIsXG4gICAgbm9uZUl0ZW1UZXh0OiBcIk5lbmh1bVwiLFxuICAgIHNlbGVjdEFsbEl0ZW1UZXh0OiBcIlNlbGVjaW9uYXIgVG9kb3NcIixcbiAgICBwcm9ncmVzc1RleHQ6IFwiUMOhZ2luYSB7MH0gZGUgezF9XCIsXG4gICAgaW5kZXhUZXh0OiBcInswfSBkZSB7MX1cIixcbiAgICBwYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ6IFwiUmVnaXN0byB7MH0gZGUgezF9XCIsXG4gICAgcGFuZWxEeW5hbWljVGFiVGV4dEZvcm1hdDogXCJQYWluZWwge3BhbmVsSW5kZXh9XCIsXG4gICAgcXVlc3Rpb25zUHJvZ3Jlc3NUZXh0OiBcIlJlc3Bvc3RhcyB7MH0vezF9IHBlcmd1bnRhc1wiLFxuICAgIGVtcHR5U3VydmV5OiBcIk7Do28gaMOhIHDDoWdpbmEgdmlzw612ZWwgb3UgcGVyZ3VudGEgbm8gcXVlc3Rpb27DoXJpby5cIixcbiAgICBjb21wbGV0aW5nU3VydmV5OiBcIk9icmlnYWRvIHBvciBmaW5hbGl6YXIgbyBxdWVzdGlvbsOhcmlvIVwiLFxuICAgIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6IFwiT3Mgbm9zc29zIHJlZ2lzdG9zIG1vc3RyYW0gcXVlIGrDoSBmaW5hbGl6b3UgbyBxdWVzdGlvbsOhcmlvLlwiLFxuICAgIGxvYWRpbmdTdXJ2ZXk6IFwiTyBxdWVzdGlvbsOhcmlvIGVzdMOhIGEgY2FycmVnYXIuLi5cIixcbiAgICBwbGFjZWhvbGRlcjogXCJTZWxlY2lvbmUuLi5cIixcbiAgICByYXRpbmdPcHRpb25zQ2FwdGlvbjogXCJTZWxlY2lvbmUgYXF1aSBwYXJhIGF2YWxpYXIuLi5cIixcbiAgICB2YWx1ZTogXCJ2YWxvclwiLFxuICAgIHJlcXVpcmVkRXJyb3I6IFwiUG9yIGZhdm9yLCByZXNwb25kYSDDoCBwZXJndW50YS5cIixcbiAgICByZXF1aXJlZEVycm9ySW5QYW5lbDogXCJQb3IgZmF2b3IsIHJlc3BvbmRhIHBlbG8gbWVub3MgYSB1bWEgcGVyZ3VudGEuXCIsXG4gICAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCJQb3IgZmF2b3IsIHJlc3BvbmRhIMOgcyBwZXJndW50YXMgZW0gdG9kYXMgYXMgbGluaGFzLlwiLFxuICAgIG51bWVyaWNFcnJvcjogXCJPIHZhbG9yIGRldmUgc2VyIG51bcOpcmljby5cIixcbiAgICBtaW5FcnJvcjogXCJPIHZhbG9yIG7Do28gZGV2ZXLDoSBzZXIgbWVub3IgcXVlIHswfVwiLFxuICAgIG1heEVycm9yOiBcIk8gdmFsb3IgbsOjbyBkZXZlcsOhIHNlciBtYWlvciBxdWUgezB9XCIsXG4gICAgdGV4dE1pbkxlbmd0aDogXCJQb3IgZmF2b3IsIGluc2lyYSBwZWxvIG1lbm9zIHswfSBjYXJhY3RlcmVzLlwiLFxuICAgIHRleHRNYXhMZW5ndGg6IFwiUG9yIGZhdm9yLCBpbnNpcmEgbWVub3MgZGUgezB9IGNhcmFjdGVyZXMuXCIsXG4gICAgdGV4dE1pbk1heExlbmd0aDogXCJQb3IgZmF2b3IsIGluc2lyYSBtYWlzIGRlIHswfSBlIG1lbm9zIGRlIHsxfSBjYXJhY3RlcmVzLlwiLFxuICAgIG1pblJvd0NvdW50RXJyb3I6IFwiUHJlZW5jaGEgcGVsbyBtZW5vcyB7MH0gbGluaGFzLlwiLFxuICAgIG1pblNlbGVjdEVycm9yOiBcIlNlbGVjaW9uZSBwZWxvIG1lbm9zIHswfSBvcMOnw7Vlcy5cIixcbiAgICBtYXhTZWxlY3RFcnJvcjogXCJQb3IgZmF2b3IsIHNlbGVjaW9uZSBubyBtw6F4aW1vIHswfSBvcMOnw7Vlcy5cIixcbiAgICBudW1lcmljTWluTWF4OiBcIk8gJ3swfScgZGV2ZSBzZXIgaWd1YWwgb3Ugc3VwZXJpb3IgYSB7MX0gZSBpZ3VhbCBvdSBtZW5vciBxdWUgezJ9XCIsXG4gICAgbnVtZXJpY01pbjogXCJPICd7MH0nIGRldmUgc2VyIGlndWFsIG91IHN1cGVyaW9yIGEgezF9XCIsXG4gICAgbnVtZXJpY01heDogXCJPICd7MH0nIGRldmUgc2VyIGlndWFsIG91IGluZmVyaW9yIGEgezF9XCIsXG4gICAgaW52YWxpZEVtYWlsOiBcIlBvciBmYXZvciwgaW5zaXJhIHVtIGUtbWFpbCB2w6FsaWRvLlwiLFxuICAgIGludmFsaWRFeHByZXNzaW9uOiBcIkEgZXhwcmVzc8OjbzogezB9IGRldmUgcmV0b3JuYXIgJ3ZlcmRhZGVpcm8nLlwiLFxuICAgIHVybFJlcXVlc3RFcnJvcjogXCJPIHBlZGlkbyByZXRvcm5vdSBvIGVycm8gJ3swfScuIHsxfVwiLFxuICAgIHVybEdldENob2ljZXNFcnJvcjogXCJPIHBlZGlkbyBuw6NvIHJldG9ybm91IGRhZG9zIG91IG8gJ2NhbWluaG8nIGRvIHBlZGlkbyBuw6NvIGVzdMOhIGNvcnJldG9cIixcbiAgICBleGNlZWRNYXhTaXplOiBcIk8gdGFtYW5obyBkbyBhcnF1aXZvIG7Do28gZGV2ZSBleGNlZGVyIHswfS5cIixcbiAgICBvdGhlclJlcXVpcmVkRXJyb3I6IFwiUG9yIGZhdm9yLCBpbnNpcmEgbyBvdXRybyB2YWxvci5cIixcbiAgICB1cGxvYWRpbmdGaWxlOiBcIk8gc2V1IGZpY2hlaXJvIGVzdMOhIGEgY2FycmVnYXIuIFBvciBmYXZvciwgYWd1YXJkZSBhbGd1bnMgc2VndW5kb3MgZSB0ZW50ZSBub3ZhbWVudGUuXCIsXG4gICAgbG9hZGluZ0ZpbGU6IFwiQSBjYXJyZWdhci4uLlwiLFxuICAgIGNob29zZUZpbGU6IFwiU2VsZWNpb25lIG8ocykgYXJxdWl2byhzKS4uLlwiLFxuICAgIG5vRmlsZUNob3NlbjogXCJOZW5odW0gZmljaGVpcm8gZXNjb2xoaWRvXCIsXG4gICAgZmlsZURyYWdBcmVhUGxhY2Vob2xkZXI6IFwiQXJyYXN0ZSB1bSBmaWNoZWlybyBhcXVpIG91IGNsaXF1ZSBubyBib3TDo28gYWJhaXhvIHBhcmEgY2FycmVnYXIgbyBmaWNoZWlyby5cIixcbiAgICBjb25maXJtRGVsZXRlOiBcIlRlbSBhIGNlcnRlemEgcXVlIGRlc2VqYSBhcGFnYXI/XCIsXG4gICAga2V5RHVwbGljYXRpb25FcnJvcjogXCJFc3RlIHZhbG9yIGRldmUgc2VyIMO6bmljby5cIixcbiAgICBhZGRDb2x1bW46IFwiQWRpY2lvbmFyIGNvbHVuYVwiLFxuICAgIGFkZFJvdzogXCJBZGljaW9uYXIgbGluaGFcIixcbiAgICByZW1vdmVSb3c6IFwiUmVtb3ZlciBsaW5oYVwiLFxuICAgIGVtcHR5Um93c1RleHQ6IFwiTsOjbyBleGlzdGVtIGxpbmhhcy5cIixcbiAgICBhZGRQYW5lbDogXCJBZGljaW9uYXIgbm92b1wiLFxuICAgIHJlbW92ZVBhbmVsOiBcIlJlbW92ZXJcIixcbiAgICBjaG9pY2VzX0l0ZW06IFwiaXRlbVwiLFxuICAgIG1hdHJpeF9jb2x1bW46IFwiQ29sdW5hXCIsXG4gICAgbWF0cml4X3JvdzogXCJMaW5oYVwiLFxuICAgIG11bHRpcGxldGV4dF9pdGVtbmFtZTogXCJ0ZXh0b1wiLFxuICAgIHNhdmluZ0RhdGE6IFwiT3MgcmVzdWx0YWRvcyBlc3TDo28gYSBzZXIgZ3VhcmRhZG9zIG5vIHNlcnZpZG9yLi4uXCIsXG4gICAgc2F2aW5nRGF0YUVycm9yOiBcIk9jb3JyZXUgdW0gZXJybyBlIG7Do28gZm9pIHBvc3PDrXZlbCBndWFyZGFyIG9zIHJlc3VsdGFkb3MuXCIsXG4gICAgc2F2aW5nRGF0YVN1Y2Nlc3M6IFwiT3MgcmVzdWx0YWRvcyBmb3JhbSBndWFyZGFkb3MgY29tIHN1Y2Vzc28hXCIsXG4gICAgc2F2ZUFnYWluQnV0dG9uOiBcIlRlbnRlIG5vdmFtZW50ZVwiLFxuICAgIHRpbWVyTWluOiBcIm1pblwiLFxuICAgIHRpbWVyU2VjOiBcInNlZ1wiLFxuICAgIHRpbWVyU3BlbnRBbGw6IFwiVm9jw6ogZ2FzdG91IHswfSBuZXN0YSBww6FnaW5hIGUgezF9IG5vIHRvdGFsLlwiLFxuICAgIHRpbWVyU3BlbnRQYWdlOiBcIlZvY8OqIGdhc3RvdSB7MH0gbmVzdGEgcMOhZ2luYS5cIixcbiAgICB0aW1lclNwZW50U3VydmV5OiBcIlZvY8OqIGdhc3RvdSB7MH0gbm8gdG90YWwuXCIsXG4gICAgdGltZXJMaW1pdEFsbDogXCJWb2PDqiBnYXN0b3UgezB9IGRlIHsxfSBuZXN0YSBww6FnaW5hIGUgezJ9IGRlIHszfSBubyB0b3RhbC5cIixcbiAgICB0aW1lckxpbWl0UGFnZTogXCJWb2PDqiBnYXN0b3UgezB9IGRlIHsxfSBuZXN0YSBww6FnaW5hLlwiLFxuICAgIHRpbWVyTGltaXRTdXJ2ZXk6IFwiVm9jw6ogZ2FzdG91IHswfSBkZSB7MX0gbm8gdG90YWwuXCIsXG4gICAgY2xlYXJDYXB0aW9uOiBcIkxpbXBhclwiLFxuICAgIHNpZ25hdHVyZVBsYWNlSG9sZGVyOiBcIkFzc2luZSBhcXVpXCIsXG4gICAgY2hvb3NlRmlsZUNhcHRpb246IFwiRXNjb2xoZXIgZmljaGVpcm9cIixcbiAgICB0YWtlUGhvdG9DYXB0aW9uOiBcIlRpcmFyIGZvdG9cIixcbiAgICBjYW1lcmFQbGFjZUhvbGRlcjogXCJDbGlxdWUgbm8gYm90w6NvIGFiYWl4byBwYXJhIHRpcmFyIHVtYSBmb3RvIHVzYW5kbyBhIGPDom1lcmEuXCIsXG4gICAgZmlsZUNhbWVyYURyYWdBcmVhUGxhY2VIb2xkZXI6IFwiQXJyYXN0ZSBlIHNvbHRlIG91IHNlbGVjaW9uZSB1bSBhcnF1aXZvIHBhcmEgY2FycmVnYXIgb3UgdGlyYXIgdW1hIGZvdG8gdXNhbmRvIGEgY8OibWVyYS5cIixcbiAgICByZXBsYWNlRmlsZUNhcHRpb246IFwiU3Vic3RpdHVpciBhcnF1aXZvXCIsXG4gICAgcmVtb3ZlRmlsZUNhcHRpb246IFwiUmVtb3ZlciBlc3RlIGZpY2hlaXJvXCIsXG4gICAgYm9vbGVhbkNoZWNrZWRMYWJlbDogXCJTaW1cIixcbiAgICBib29sZWFuVW5jaGVja2VkTGFiZWw6IFwiTsOjb1wiLFxuICAgIGNvbmZpcm1SZW1vdmVGaWxlOiBcIlRlbSBhIGNlcnRlemEgcXVlIGRlc2VqYSByZW1vdmVyIGVzdGUgZmljaGVpcm86IHswfT9cIixcbiAgICBjb25maXJtUmVtb3ZlQWxsRmlsZXM6IFwiVGVtIGEgY2VydGV6YSBxdWUgZGVzZWphIHJlbW92ZXIgdG9kb3Mgb3MgZmljaGVpcm9zP1wiLFxuICAgIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCJUw610dWxvIGRhIHF1ZXN0w6NvXCIsXG4gICAgbW9kYWxDYW5jZWxCdXR0b25UZXh0OiBcIkNhbmNlbGFyXCIsXG4gICAgbW9kYWxBcHBseUJ1dHRvblRleHQ6IFwiQXBsaWNhclwiLFxuICAgIGZpbHRlclN0cmluZ1BsYWNlaG9sZGVyOiBcIkRpZ2l0ZSBwYXJhIHBlc3F1aXNhci4uLlwiLFxuICAgIGVtcHR5TWVzc2FnZTogXCJOw6NvIGV4aXN0ZSBpbmZvcm1hw6fDo28gYSBtb3N0cmFyXCIsXG4gICAgbm9FbnRyaWVzVGV4dDogXCJBaW5kYSBuw6NvIGV4aXN0ZW0gcmVnaXN0b3MuXFxuQ2xpcXVlIG5vIGJvdMOjbyBhYmFpeG8gcGFyYSBhZGljaW9uYXIgdW0gbm92byByZWdpc3RvLlwiLFxuICAgIG5vRW50cmllc1JlYWRvbmx5VGV4dDogXCJOw6NvIGjDoSBlbnRyYWRhcy5cIixcbiAgICBtb3JlOiBcIk1haXNcIixcbiAgICB0YWdib3hEb25lQnV0dG9uQ2FwdGlvbjogXCJUZXJtaW5hZG9cIixcbiAgICBzZWxlY3RUb1JhbmtFbXB0eVJhbmtlZEFyZWFUZXh0OiBcIlRvZGFzIGFzIG9ww6fDtWVzIHPDo28gY2xhc3NpZmljYWRhc1wiLFxuICAgIHNlbGVjdFRvUmFua0VtcHR5VW5yYW5rZWRBcmVhVGV4dDogXCJBcnJhc3RlIGUgc29sdGUgYXMgb3DDp8O1ZXMgYXF1aSBwYXJhIGNsYXNzaWZpY8OhLWxhc1wiXG59O1xuc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN1cnZleUxvY2FsaXphdGlvblwiXS5sb2NhbGVzW1wicHRcIl0gPSBwb3J0dWd1ZXNlU3VydmV5U3RyaW5ncztcbnN1cnZleV9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdXJ2ZXlMb2NhbGl6YXRpb25cIl0ubG9jYWxlTmFtZXNbXCJwdFwiXSA9IFwicG9ydHVndcOqc1wiO1xuLy8gVGhlIGZvbGxvd2luZyBzdHJpbmdzIGhhdmUgYmVlbiB0cmFuc2xhdGVkIGJ5IGEgbWFjaGluZSB0cmFuc2xhdGlvbiBzZXJ2aWNlXG4vLyBSZW1vdmUgdGhvc2Ugc3RyaW5ncyB0aGF0IHlvdSBoYXZlIGNvcnJlY3RlZCBtYW51YWxseVxuLy8gcGFuZWxEeW5hbWljVGFiVGV4dEZvcm1hdDogXCJQYW5lbCB7cGFuZWxJbmRleH1cIiA9PiBcIlBhaW5lbCB7cGFuZWxJbmRleH1cIlxuLy8gbm9FbnRyaWVzUmVhZG9ubHlUZXh0OiBcIlRoZXJlIGFyZSBubyBlbnRyaWVzLlwiID0+IFwiTsOjbyBow6EgZW50cmFkYXMuXCJcbi8vIHNlbGVjdFRvUmFua0VtcHR5UmFua2VkQXJlYVRleHQ6IFwiQWxsIGNob2ljZXMgYXJlIHJhbmtlZFwiID0+IFwiVG9kYXMgYXMgb3DDp8O1ZXMgc8OjbyBjbGFzc2lmaWNhZGFzXCJcbi8vIHNlbGVjdFRvUmFua0VtcHR5VW5yYW5rZWRBcmVhVGV4dDogXCJEcmFnIGFuZCBkcm9wIGNob2ljZXMgaGVyZSB0byByYW5rIHRoZW1cIiA9PiBcIkFycmFzdGUgZSBzb2x0ZSBhcyBvcMOnw7VlcyBhcXVpIHBhcmEgY2xhc3NpZmljw6EtbGFzXCIvLyB0YWtlUGhvdG9DYXB0aW9uOiBcIlRha2UgUGhvdG9cIiA9PiBcIlRpcmFyIGZvdG9cIlxuLy8gY2FtZXJhUGxhY2VIb2xkZXI6IFwiQ2xpY2sgdGhlIGJ1dHRvbiBiZWxvdyB0byB0YWtlIGEgcGhvdG8gdXNpbmcgdGhlIGNhbWVyYS5cIiA9PiBcIkNsaXF1ZSBubyBib3TDo28gYWJhaXhvIHBhcmEgdGlyYXIgdW1hIGZvdG8gdXNhbmRvIGEgY8OibWVyYS5cIlxuLy8gZmlsZUNhbWVyYURyYWdBcmVhUGxhY2VIb2xkZXI6IFwiRHJhZyBhbmQgZHJvcCBvciBzZWxlY3QgYSBmaWxlIHRvIHVwbG9hZCBvciB0YWtlIGEgcGhvdG8gdXNpbmcgdGhlIGNhbWVyYS5cIiA9PiBcIkFycmFzdGUgZSBzb2x0ZSBvdSBzZWxlY2lvbmUgdW0gYXJxdWl2byBwYXJhIGNhcnJlZ2FyIG91IHRpcmFyIHVtYSBmb3RvIHVzYW5kbyBhIGPDom1lcmEuXCJcbi8vIHJlcGxhY2VGaWxlQ2FwdGlvbjogXCJSZXBsYWNlIGZpbGVcIiA9PiBcIlN1YnN0aXR1aXIgYXJxdWl2b1wiXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvbG9jYWxpemF0aW9uL3JvbWFuaWFuLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9sb2NhbGl6YXRpb24vcm9tYW5pYW4udHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHJvbWFuaWFuU3VydmV5U3RyaW5ncyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyb21hbmlhblN1cnZleVN0cmluZ3NcIiwgZnVuY3Rpb24oKSB7IHJldHVybiByb21hbmlhblN1cnZleVN0cmluZ3M7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHN1cnZleV9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBzdXJ2ZXktY29yZSAqLyBcIi4vc3JjL2VudHJpZXMvY29yZS50c1wiKTtcblxudmFyIHJvbWFuaWFuU3VydmV5U3RyaW5ncyA9IHtcbiAgICBwYWdlUHJldlRleHQ6IFwiUHJlY2VkZW50XCIsXG4gICAgcGFnZU5leHRUZXh0OiBcIlVybcSDdG9yXCIsXG4gICAgY29tcGxldGVUZXh0OiBcIkZpbmFsaXphcmVcIixcbiAgICBwcmV2aWV3VGV4dDogXCJwcmV2aXp1YWxpemFyZVwiLFxuICAgIGVkaXRUZXh0OiBcIkVkaXRhyJtpXCIsXG4gICAgc3RhcnRTdXJ2ZXlUZXh0OiBcInN0YXJ0XCIsXG4gICAgb3RoZXJJdGVtVGV4dDogXCJBbHR1bChwcmVjaXphxaNpKVwiLFxuICAgIG5vbmVJdGVtVGV4dDogXCJOaWNpIHVudWxcIixcbiAgICBzZWxlY3RBbGxJdGVtVGV4dDogXCJTZWxlY3RlYXrEgyB0b3RcIixcbiAgICBwcm9ncmVzc1RleHQ6IFwiUGFnaW5hIHswfSBkaW4gezF9XCIsXG4gICAgaW5kZXhUZXh0OiBcInswfSBkZSB7MX1cIixcbiAgICBwYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ6IFwiw45ucmVnaXN0cmFyZSB7MH0gZGluIHsxfVwiLFxuICAgIHBhbmVsRHluYW1pY1RhYlRleHRGb3JtYXQ6IFwiUGFub3Uge3BhbmVsSW5kZXh9XCIsXG4gICAgcXVlc3Rpb25zUHJvZ3Jlc3NUZXh0OiBcIlLEg3NwdW5zdXJpIGxhIHswfSAvIHsxfSDDrm50cmVixINyaVwiLFxuICAgIGVtcHR5U3VydmV5OiBcIk51IHN1bnQgw65udHJlYsSDcmkgcGVudHJ1IGFjZXN0IGNoZXN0aW9uYXJcIixcbiAgICBjb21wbGV0aW5nU3VydmV5OiBcIlbEgyBtdWzFo3VtaW0gcGVudHJ1IHRpbXB1bCBhY29yZGF0IVwiLFxuICAgIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6IFwiRGluIMOubnJlZ2lzdHLEg3JpbGUgbm9hc3RyZSByZWllc2UgY8SDIGHIm2kgY29tcGxldGF0IGRlamEgYWNlc3QgY2hlc3Rpb25hci5cIixcbiAgICBsb2FkaW5nU3VydmV5OiBcIkNoZXN0aW9uYXJ1bCBzZSDDrm5jYXJjxIMuLi5cIixcbiAgICBwbGFjZWhvbGRlcjogXCJBbGVnZcWjaS4uLlwiLFxuICAgIHJhdGluZ09wdGlvbnNDYXB0aW9uOiBcIkFsZWdlLi4uXCIsXG4gICAgdmFsdWU6IFwidmFsb2FyZVwiLFxuICAgIHJlcXVpcmVkRXJyb3I6IFwiUsSDc3B1bnN1bCBsYSBhY2Vhc3TEgyDDrm50cmViYXJlIGVzdGUgb2JsaWdhdG9yaXUuXCIsXG4gICAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwiVsSDIHJ1Z8SDbSBzxIMgcsSDc3B1bmRlyJtpIGxhIGNlbCBwdcibaW4gbyDDrm50cmViYXJlLlwiLFxuICAgIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwiVG9hdGUgcsSDc3B1bnN1cmlsZSBzdW50IG9ibGlnYXRvcmlpXCIsXG4gICAgbnVtZXJpY0Vycm9yOiBcIlLEg3NwdW5zdWwgdHJlYnVpZSBzxIMgZmllIG51bWVyaWMuXCIsXG4gICAgbWluRXJyb3I6IFwiVmFsb2FyZWEgbnUgdHJlYnVpZSBzxIMgZmllIG1haSBtaWPEgyBkZSB7MH1cIixcbiAgICBtYXhFcnJvcjogXCJWYWxvYXJlYSBudSB0cmVidWllIHPEgyBmaWUgbWFpIG1hcmUgZGUgezB9XCIsXG4gICAgdGV4dE1pbkxlbmd0aDogXCJUcmVidWllIHPEgyBpbnRyb2R1Y2XIm2kgbWluaW0gezB9IGNhcmFjdGVyZS5cIixcbiAgICB0ZXh0TWF4TGVuZ3RoOiBcIlRyZWJ1aWUgc8SDIGludHJvZHVjZcibaSBtYXhpbSB7MH0gY2FyYWN0ZXJlLlwiLFxuICAgIHRleHRNaW5NYXhMZW5ndGg6IFwiVHJlYnVpZSBzxIMgaW50cm9kdWNlyJtpIG1haSBtdWx0IGRlIHswfSDImWkgbWFpIHB1yJtpbiBkZSB7MX0gY2FyYWN0ZXJlLlwiLFxuICAgIG1pblJvd0NvdW50RXJyb3I6IFwiVHJlYnVpZSBzxIMgY29tcGxldGHIm2kgbWluaW0gezB9IHLDom5kdXJpLlwiLFxuICAgIG1pblNlbGVjdEVycm9yOiBcIlRyZWJ1aWUgc8SDIHNlbGVjdGHIm2kgbWluaW0gezB9IG9wxaNpdW5pLlwiLFxuICAgIG1heFNlbGVjdEVycm9yOiBcIlRyZWJ1aWUgc8SDIHNlbGVjdGHIm2kgbWF4aW0gezB9IG9wxaNpdW5pLlwiLFxuICAgIG51bWVyaWNNaW5NYXg6IFwiUsSDc3B1bnN1bCAnezB9JyB0cmVidWllIHPEgyBmaWUgbWFpIG1hcmUgc2F1IGVnYWwgY2EgezF9IMWfw64gbWFpIG1pYyBzYXUgZWdhbCBjdSB7Mn1cIixcbiAgICBudW1lcmljTWluOiBcIlLEg3NwdW5zdWwgJ3swfScgdHJlYnVpZSBzxIMgZmllIG1haSBtYXJlIHNhdSBlZ2FsIGNhIHsxfVwiLFxuICAgIG51bWVyaWNNYXg6IFwiUsSDc3B1bnN1bCAnezB9JyB0cmVidWllIHPEgyBmaWUgbWFpIG1pYyBzYXUgZWdhbCBjYSB7MX1cIixcbiAgICBpbnZhbGlkRW1haWw6IFwiVHJlYnVpZSBzxIMgaW50cm9kdWNlxaNpIG8gYWRyZXNhIGRlIGVtYWlsIHZhbGlkxIMuXCIsXG4gICAgaW52YWxpZEV4cHJlc3Npb246IFwiRXhwcmVzaWE6IHswfSBhciB0cmVidWkgc8SDIHJldHVybmV6ZSDigJ5hZGV2xINyYXTigJ0uXCIsXG4gICAgdXJsUmVxdWVzdEVycm9yOiBcIlJlcXVlc3QtdWwgYSByZXR1cm5hdCBlcm9hcmVhICd7MH0nLiB7MX1cIixcbiAgICB1cmxHZXRDaG9pY2VzRXJyb3I6IFwiUmVxdWVzdC11bCBudSBhIHJldHVybmF0IGRhdGUgc2F1IHByb3ByaWV0YXRlYSAncGF0aCcgZXN0ZSBpbmNvcmVjdMSDXCIsXG4gICAgZXhjZWVkTWF4U2l6ZTogXCJEaW1lbnNpdW5lYSBmacWfaWVydWx1aSBudSB0cmVidWllIHPEgyBkZXDEg8WfZWFzY8SDIHswfS5cIixcbiAgICBvdGhlclJlcXVpcmVkRXJyb3I6IFwiVHJlYnVpZSBzxIMgY29tcGxldGHIm2kgY8OibXB1bCAnQWx0dWwnLlwiLFxuICAgIHVwbG9hZGluZ0ZpbGU6IFwiRmnImWllcnVsIGR1bW5lYXZvYXN0csSDIGVzdGUgw65uIGN1cnMgZGUgw65uY8SDcmNhcmUuIFbEgyBydWfEg20gYciZdGVwdGHIm2kgY8OidGV2YSBzZWN1bmRlIMiZaSByZXZlbmnIm2kgYXBvaS5cIixcbiAgICBsb2FkaW5nRmlsZTogXCJTZSDDrm5jYXJjxIMuLi5cIixcbiAgICBjaG9vc2VGaWxlOiBcIkFsZWdlIGZpc2llcmVsZS4uLlwiLFxuICAgIG5vRmlsZUNob3NlbjogXCJOaWNpdW4gZmnImWllciBhbGVzXCIsXG4gICAgZmlsZURyYWdBcmVhUGxhY2Vob2xkZXI6IFwiR2xpc2HIm2kgyJlpIGZpeGHIm2kgdW4gZmnImWllciBhaWNpIHNhdSBmYWNlyJtpIGNsaWMgcGUgYnV0b251bCBkZSBtYWkgam9zIMiZaSBhbGVnZcibaSB1biBmaciZaWVyIGRlIMOubmPEg3JjYXQuXCIsXG4gICAgY29uZmlybURlbGV0ZTogXCJTdW50ZcibaSBzaWd1ciBjxIMgZG9yacibaSBzxIMgyJl0ZXJnZcibaSDDrm5yZWdpc3RyYXJlYT9cIixcbiAgICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcIlZhbG9hcmVhIHRyZWJ1aWUgc8SDIGZpZSB1bmljxIMuXCIsXG4gICAgYWRkQ29sdW1uOiBcIkFkxIN1Z2HIm2kgY29sb2FuxINcIixcbiAgICBhZGRSb3c6IFwiQWTEg3VnYXJlIHLDom5kXCIsXG4gICAgcmVtb3ZlUm93OiBcIsiYdGVyZ2VyZVwiLFxuICAgIGVtcHR5Um93c1RleHQ6IFwiTnUgZXhpc3TEgyByw6JuZHVyaS5cIixcbiAgICBhZGRQYW5lbDogXCJBZMSDdWdhcmVcIixcbiAgICByZW1vdmVQYW5lbDogXCLImHRlcmdlcmVcIixcbiAgICBjaG9pY2VzX0l0ZW06IFwib3DIm2l1bmVcIixcbiAgICBtYXRyaXhfY29sdW1uOiBcIkNvbG9hbsSDXCIsXG4gICAgbWF0cml4X3JvdzogXCJSw6JuZFwiLFxuICAgIG11bHRpcGxldGV4dF9pdGVtbmFtZTogXCJUZXh0XCIsXG4gICAgc2F2aW5nRGF0YTogXCJSZXp1bHRhdGVsZSBzdW50IMOubiBjdXJzIGRlIHNhbHZhcmUuLi5cIixcbiAgICBzYXZpbmdEYXRhRXJyb3I6IFwiQSBpbnRlcnZlbml0IG8gZXJvYXJlLCByZXp1bHRhdGVsZSBudSBhdSBwdXR1dCBmaSBzYWx2YXRlLlwiLFxuICAgIHNhdmluZ0RhdGFTdWNjZXNzOiBcIlJlenVsdGF0ZWxlIGF1IGZvc3Qgc2FsdmF0ZSBjdSBzdWNjZXMhXCIsXG4gICAgc2F2ZUFnYWluQnV0dG9uOiBcIsOObmNlcmNhyJtpIGRpbiBub3VcIixcbiAgICB0aW1lck1pbjogXCJtaW5cIixcbiAgICB0aW1lclNlYzogXCJzZWNcIixcbiAgICB0aW1lclNwZW50QWxsOiBcIkHIm2kgcGV0cmVjdXQgezB9IHBlIGFjZWFzdMSDIHBhZ2luxIMgyJlpIHsxfSDDrm4gdG90YWwuXCIsXG4gICAgdGltZXJTcGVudFBhZ2U6IFwiQcibaSBwZXRyZWN1dCB7MH0gcGUgYWNlYXN0xIMgcGFnaW7Egy5cIixcbiAgICB0aW1lclNwZW50U3VydmV5OiBcIkHIm2kgcGV0cmVjdXQgezB9IMOubiB0b3RhbC5cIixcbiAgICB0aW1lckxpbWl0QWxsOiBcIkHIm2kgcGV0cmVjdXQgezB9IGRpbiB7MX0gcGUgYWNlYXN0xIMgcGFnaW7EgyDImWkgezJ9IGRpbiB7M30gw65uIHRvdGFsLlwiLFxuICAgIHRpbWVyTGltaXRQYWdlOiBcIkHIm2kgcGV0cmVjdXQgezB9IGRpbiB7MX0gcGUgYWNlYXN0xIMgcGFnaW7Egy5cIixcbiAgICB0aW1lckxpbWl0U3VydmV5OiBcIkHIm2kgcGV0cmVjdXQgezB9IGRpbiB7MX0gw65uIHRvdGFsLlwiLFxuICAgIGNsZWFyQ2FwdGlvbjogXCJjbGFyXCIsXG4gICAgc2lnbmF0dXJlUGxhY2VIb2xkZXI6IFwiU2VtbmVhesSDIGFpY2lcIixcbiAgICBjaG9vc2VGaWxlQ2FwdGlvbjogXCJBbGVnZSBmaciZaWVydWxcIixcbiAgICB0YWtlUGhvdG9DYXB0aW9uOiBcIkZhY2XIm2kgbyBmb3RvZ3JhZmllXCIsXG4gICAgY2FtZXJhUGxhY2VIb2xkZXI6IFwiRmFjZcibaSBjbGljIHBlIGJ1dG9udWwgZGUgbWFpIGpvcyBwZW50cnUgYSBmYWNlIG8gZm90b2dyYWZpZSBmb2xvc2luZCBjYW1lcmEuXCIsXG4gICAgZmlsZUNhbWVyYURyYWdBcmVhUGxhY2VIb2xkZXI6IFwiR2xpc2HIm2kgyJlpIGZpeGHIm2kgc2F1IHNlbGVjdGHIm2kgdW4gZmnImWllciBwZW50cnUgYSDDrm5jxINyY2Egc2F1IGEgZmFjZSBvIGZvdG9ncmFmaWUgZm9sb3NpbmQgY2FtZXJhLlwiLFxuICAgIHJlcGxhY2VGaWxlQ2FwdGlvbjogXCLDjm5sb2N1aXJlIGZpyJlpZXJcIixcbiAgICByZW1vdmVGaWxlQ2FwdGlvbjogXCJFbGltaW5hyJtpIGFjZXN0IGZpyJlpZXJcIixcbiAgICBib29sZWFuQ2hlY2tlZExhYmVsOiBcImRhXCIsXG4gICAgYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcIk51XCIsXG4gICAgY29uZmlybVJlbW92ZUZpbGU6IFwiU2lndXIgZG9yacibaSBzxIMgZWxpbWluYcibaSBhY2VzdCBmaciZaWVyOiB7MH0/XCIsXG4gICAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcIlNpZ3VyIGRvcmnIm2kgc8SDIGVsaW1pbmHIm2kgdG9hdGUgZmnImWllcmVsZT9cIixcbiAgICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwiVGl0bHVsIGludHJlYmFyaWlcIixcbiAgICBtb2RhbENhbmNlbEJ1dHRvblRleHQ6IFwiQW51bGFcIixcbiAgICBtb2RhbEFwcGx5QnV0dG9uVGV4dDogXCJBcGxpY2FcIixcbiAgICBmaWx0ZXJTdHJpbmdQbGFjZWhvbGRlcjogXCJUYXN0YcibaSBwZW50cnUgYSBjxIN1dGEuLi5cIixcbiAgICBlbXB0eU1lc3NhZ2U6IFwiTnUgZXhpc3TEgyBkYXRlIGRlIGFmaciZYXRcIixcbiAgICBub0VudHJpZXNUZXh0OiBcIk51IGV4aXN0xIMgw65uY8SDIGludHLEg3JpLlxcbkZhY2XIm2kgY2xpYyBwZSBidXRvbnVsIGRlIG1haSBqb3MgcGVudHJ1IGEgYWTEg3VnYSBvIGludHJhcmUgbm91xIMuXCIsXG4gICAgbm9FbnRyaWVzUmVhZG9ubHlUZXh0OiBcIk51IGV4aXN0xIMgaW50csSDcmkuXCIsXG4gICAgbW9yZTogXCJNYWkgbXVsdFwiLFxuICAgIHRhZ2JveERvbmVCdXR0b25DYXB0aW9uOiBcIk9LXCIsXG4gICAgc2VsZWN0VG9SYW5rRW1wdHlSYW5rZWRBcmVhVGV4dDogXCJUb2F0ZSBvcMibaXVuaWxlIHN1bnQgY2xhc2lmaWNhdGVcIixcbiAgICBzZWxlY3RUb1JhbmtFbXB0eVVucmFua2VkQXJlYVRleHQ6IFwiR2xpc2HIm2kgyJlpIGZpeGHIm2kgb3DIm2l1bmlsZSBhaWNpIHBlbnRydSBhIGxlIGNsYXNpZmljYVwiXG59O1xuc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN1cnZleUxvY2FsaXphdGlvblwiXS5sb2NhbGVzW1wicm9cIl0gPSByb21hbmlhblN1cnZleVN0cmluZ3M7XG5zdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3VydmV5TG9jYWxpemF0aW9uXCJdLmxvY2FsZU5hbWVzW1wicm9cIl0gPSBcInJvbcOibsSDXCI7XG4vLyBUaGUgZm9sbG93aW5nIHN0cmluZ3MgaGF2ZSBiZWVuIHRyYW5zbGF0ZWQgYnkgYSBtYWNoaW5lIHRyYW5zbGF0aW9uIHNlcnZpY2Vcbi8vIFJlbW92ZSB0aG9zZSBzdHJpbmdzIHRoYXQgeW91IGhhdmUgY29ycmVjdGVkIG1hbnVhbGx5XG4vLyBpbmRleFRleHQ6IFwiezB9IG9mIHsxfVwiID0+IFwiezB9IGRlIHsxfVwiXG4vLyBwYW5lbER5bmFtaWNUYWJUZXh0Rm9ybWF0OiBcIlBhbmVsIHtwYW5lbEluZGV4fVwiID0+IFwiUGFub3Uge3BhbmVsSW5kZXh9XCJcbi8vIHJhdGluZ09wdGlvbnNDYXB0aW9uOiBcIlNlbGVjdC4uLlwiID0+IFwiQWxlZ2UuLi5cIlxuLy8gbWluRXJyb3I6IFwiVGhlIHZhbHVlIHNob3VsZCBub3QgYmUgbGVzcyB0aGFuIHswfVwiID0+IFwiVmFsb2FyZWEgbnUgdHJlYnVpZSBzxIMgZmllIG1haSBtaWPEgyBkZSB7MH1cIlxuLy8gbWF4RXJyb3I6IFwiVGhlIHZhbHVlIHNob3VsZCBub3QgYmUgZ3JlYXRlciB0aGFuIHswfVwiID0+IFwiVmFsb2FyZWEgbnUgdHJlYnVpZSBzxIMgZmllIG1haSBtYXJlIGRlIHswfVwiXG4vLyBmaWxlRHJhZ0FyZWFQbGFjZWhvbGRlcjogXCJEcmFnIGFuZCBkcm9wIGEgZmlsZSBoZXJlIG9yIGNsaWNrIHRoZSBidXR0b24gYmVsb3cgYW5kIGNob29zZSBhIGZpbGUgdG8gdXBsb2FkLlwiID0+IFwiR2xpc2HIm2kgyJlpIGZpeGHIm2kgdW4gZmnImWllciBhaWNpIHNhdSBmYWNlyJtpIGNsaWMgcGUgYnV0b251bCBkZSBtYWkgam9zIMiZaSBhbGVnZcibaSB1biBmaciZaWVyIGRlIMOubmPEg3JjYXQuXCJcbi8vIGVtcHR5Um93c1RleHQ6IFwiVGhlcmUgYXJlIG5vIHJvd3MuXCIgPT4gXCJOdSBleGlzdMSDIHLDom5kdXJpLlwiXG4vLyBtdWx0aXBsZXRleHRfaXRlbW5hbWU6IFwidGV4dFwiID0+IFwiVGV4dFwiXG4vLyBzaWduYXR1cmVQbGFjZUhvbGRlcjogXCJTaWduIGhlcmVcIiA9PiBcIlNlbW5lYXrEgyBhaWNpXCJcbi8vIG1vZGFsQ2FuY2VsQnV0dG9uVGV4dDogXCJDYW5jZWxcIiA9PiBcIkFudWxhXCJcbi8vIG1vZGFsQXBwbHlCdXR0b25UZXh0OiBcIkFwcGx5XCIgPT4gXCJBcGxpY2FcIlxuLy8gZmlsdGVyU3RyaW5nUGxhY2Vob2xkZXI6IFwiVHlwZSB0byBzZWFyY2guLi5cIiA9PiBcIlRhc3RhyJtpIHBlbnRydSBhIGPEg3V0YS4uLlwiXG4vLyBlbXB0eU1lc3NhZ2U6IFwiTm8gZGF0YSB0byBkaXNwbGF5XCIgPT4gXCJOdSBleGlzdMSDIGRhdGUgZGUgYWZpyJlhdFwiXG4vLyBub0VudHJpZXNUZXh0OiBcIlRoZXJlIGFyZSBubyBlbnRyaWVzIHlldC5cXG5DbGljayB0aGUgYnV0dG9uIGJlbG93IHRvIGFkZCBhIG5ldyBlbnRyeS5cIiA9PiBcIk51IGV4aXN0xIMgw65uY8SDIGludHLEg3JpLlxcbkZhY2XIm2kgY2xpYyBwZSBidXRvbnVsIGRlIG1haSBqb3MgcGVudHJ1IGEgYWTEg3VnYSBvIGludHJhcmUgbm91xIMuXCJcbi8vIG5vRW50cmllc1JlYWRvbmx5VGV4dDogXCJUaGVyZSBhcmUgbm8gZW50cmllcy5cIiA9PiBcIk51IGV4aXN0xIMgaW50csSDcmkuXCJcbi8vIG1vcmU6IFwiTW9yZVwiID0+IFwiTWFpIG11bHRcIlxuLy8gdGFnYm94RG9uZUJ1dHRvbkNhcHRpb246IFwiT0tcIiA9PiBcIk9LXCJcbi8vIHNlbGVjdFRvUmFua0VtcHR5UmFua2VkQXJlYVRleHQ6IFwiQWxsIGNob2ljZXMgYXJlIHJhbmtlZFwiID0+IFwiVG9hdGUgb3DIm2l1bmlsZSBzdW50IGNsYXNpZmljYXRlXCJcbi8vIHNlbGVjdFRvUmFua0VtcHR5VW5yYW5rZWRBcmVhVGV4dDogXCJEcmFnIGFuZCBkcm9wIGNob2ljZXMgaGVyZSB0byByYW5rIHRoZW1cIiA9PiBcIkdsaXNhyJtpIMiZaSBmaXhhyJtpIG9wyJtpdW5pbGUgYWljaSBwZW50cnUgYSBsZSBjbGFzaWZpY2FcIi8vIHRha2VQaG90b0NhcHRpb246IFwiVGFrZSBQaG90b1wiID0+IFwiRmFjZcibaSBvIGZvdG9ncmFmaWVcIlxuLy8gY2FtZXJhUGxhY2VIb2xkZXI6IFwiQ2xpY2sgdGhlIGJ1dHRvbiBiZWxvdyB0byB0YWtlIGEgcGhvdG8gdXNpbmcgdGhlIGNhbWVyYS5cIiA9PiBcIkZhY2XIm2kgY2xpYyBwZSBidXRvbnVsIGRlIG1haSBqb3MgcGVudHJ1IGEgZmFjZSBvIGZvdG9ncmFmaWUgZm9sb3NpbmQgY2FtZXJhLlwiXG4vLyBmaWxlQ2FtZXJhRHJhZ0FyZWFQbGFjZUhvbGRlcjogXCJEcmFnIGFuZCBkcm9wIG9yIHNlbGVjdCBhIGZpbGUgdG8gdXBsb2FkIG9yIHRha2UgYSBwaG90byB1c2luZyB0aGUgY2FtZXJhLlwiID0+IFwiR2xpc2HIm2kgyJlpIGZpeGHIm2kgc2F1IHNlbGVjdGHIm2kgdW4gZmnImWllciBwZW50cnUgYSDDrm5jxINyY2Egc2F1IGEgZmFjZSBvIGZvdG9ncmFmaWUgZm9sb3NpbmQgY2FtZXJhLlwiXG4vLyByZXBsYWNlRmlsZUNhcHRpb246IFwiUmVwbGFjZSBmaWxlXCIgPT4gXCLDjm5sb2N1aXJlIGZpyJlpZXJcIlxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL2xvY2FsaXphdGlvbi9ydXNzaWFuLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL2xvY2FsaXphdGlvbi9ydXNzaWFuLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHJ1c3NpYW5TdXJ2ZXlTdHJpbmdzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInJ1c3NpYW5TdXJ2ZXlTdHJpbmdzXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcnVzc2lhblN1cnZleVN0cmluZ3M7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHN1cnZleV9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBzdXJ2ZXktY29yZSAqLyBcIi4vc3JjL2VudHJpZXMvY29yZS50c1wiKTtcblxudmFyIHJ1c3NpYW5TdXJ2ZXlTdHJpbmdzID0ge1xuICAgIHBhZ2VQcmV2VGV4dDogXCLQndCw0LfQsNC0XCIsXG4gICAgcGFnZU5leHRUZXh0OiBcItCU0LDQu9C10LVcIixcbiAgICBjb21wbGV0ZVRleHQ6IFwi0JPQvtGC0L7QstC+XCIsXG4gICAgcHJldmlld1RleHQ6IFwi0J/RgNC10LTQstCw0YDQuNGC0LXQu9GM0L3Ri9C5INC/0YDQvtGB0LzQvtGC0YBcIixcbiAgICBlZGl0VGV4dDogXCLQoNC10LTQsNC60YLQuNGA0L7QstCw0L3QuNC1XCIsXG4gICAgc3RhcnRTdXJ2ZXlUZXh0OiBcItCd0LDRh9Cw0YLRjFwiLFxuICAgIG90aGVySXRlbVRleHQ6IFwi0JTRgNGD0LPQvtC1ICjQv9C+0LbQsNC70YPQudGB0YLQsCwg0L7Qv9C40YjQuNGC0LUpXCIsXG4gICAgbm9uZUl0ZW1UZXh0OiBcItCd0LXRglwiLFxuICAgIHNlbGVjdEFsbEl0ZW1UZXh0OiBcItCS0YvQsdGA0LDRgtGMINCy0YHRkVwiLFxuICAgIHByb2dyZXNzVGV4dDogXCLQodGC0YDQsNC90LjRhtCwIHswfSDQuNC3IHsxfVwiLFxuICAgIGluZGV4VGV4dDogXCJ7MH0g0LjQtyB7MX1cIixcbiAgICBwYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ6IFwi0JfQsNC/0LjRgdGMIHswfSDQuNC3IHsxfVwiLFxuICAgIHBhbmVsRHluYW1pY1RhYlRleHRGb3JtYXQ6IFwi0J/QsNC90LXQu9GMIHtwYW5lbEluZGV4fVwiLFxuICAgIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCJP0YLQstC10YfQtdC90L4g0L3QsCB7MH0vezF9INCy0L7Qv9GA0L7RgdC+0LJcIixcbiAgICBlbXB0eVN1cnZleTogXCLQndC10YIg0L3QuCDQvtC00L3QvtCz0L4g0LLQvtC/0YDQvtGB0LAuXCIsXG4gICAgY29tcGxldGluZ1N1cnZleTogXCLQkdC70LDQs9C+0LTQsNGA0LjQvCDQktCw0YEg0LfQsCDQt9Cw0L/QvtC70L3QtdC90LjQtSDQsNC90LrQtdGC0YshXCIsXG4gICAgY29tcGxldGluZ1N1cnZleUJlZm9yZTogXCLQktGLINGD0LbQtSDQv9GA0L7RhdC+0LTQuNC70Lgg0Y3RgtC+0YIg0L7Qv9GA0L7RgS5cIixcbiAgICBsb2FkaW5nU3VydmV5OiBcItCX0LDQs9GA0YPQt9C60LAg0YEg0YHQtdGA0LLQtdGA0LAuLi5cIixcbiAgICBwbGFjZWhvbGRlcjogXCLQktGL0LHRgNCw0YLRjC4uLlwiLFxuICAgIHJhdGluZ09wdGlvbnNDYXB0aW9uOiBcItCd0LDQttC80LjRgtC1INC30LTQtdGB0YwsINGH0YLQvtCx0Ysg0L7RhtC10L3QuNGC0YwuLi5cIixcbiAgICB2YWx1ZTogXCLQt9C90LDRh9C10L3QuNC1XCIsXG4gICAgcmVxdWlyZWRFcnJvcjogXCLQn9C+0LbQsNC70YPQudGB0YLQsCwg0L7RgtCy0LXRgtGM0YLQtSDQvdCwINCy0L7Qv9GA0L7RgS5cIixcbiAgICByZXF1aXJlZEVycm9ySW5QYW5lbDogXCLQn9C+0LbQsNC70YPQudGB0YLQsCwg0L7RgtCy0LXRgtGM0YLQtSDQv9C+INC60YDQsNC50L3QtdC5INC80LXRgNC1INC90LAg0L7QtNC40L0g0LLQvtC/0YDQvtGBLlwiLFxuICAgIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwi0J/QvtC20LDQu9GD0LnRgdGC0LAsINC+0YLQstC10YLRjNGC0LUg0L3QsCDQstC+0L/RgNC+0YHRiyDQsiDQutCw0LbQtNC+0Lkg0YHRgtGA0L7QutC1LlwiLFxuICAgIG51bWVyaWNFcnJvcjogXCLQntGC0LLQtdGCINC00L7Qu9C20LXQvSDQsdGL0YLRjCDRh9C40YHQu9C+0LwuXCIsXG4gICAgbWluRXJyb3I6IFwi0JfQvdCw0YfQtdC90LjQtSDQvdC1INC00L7Qu9C20L3QviDQsdGL0YLRjCDQvNC10L3RjNGI0LUgezB9LlwiLFxuICAgIG1heEVycm9yOiBcItCX0L3QsNGH0LXQvdC40LUg0L3QtSDQtNC+0LvQttC90L4g0L/RgNC10LLRi9GI0LDRgtGMIHswfS5cIixcbiAgICB0ZXh0TWluTGVuZ3RoOiBcItCf0L7QttCw0LvRg9C50YHRgtCwINCy0LLQtdC00LjRgtC1INCx0L7Qu9GM0YjQtSB7MH0g0YHQuNC80LLQvtC70L7Qsi5cIixcbiAgICB0ZXh0TWF4TGVuZ3RoOiBcItCf0L7QttCw0LvRg9C50YHRgtCwINCy0LLQtdC00LjRgtC1INC80LXQvdGM0YjQtSB7MH0g0YHQuNC80LLQvtC70L7Qsi5cIixcbiAgICB0ZXh0TWluTWF4TGVuZ3RoOiBcItCf0L7QttCw0LvRg9C50YHRgtCwINCy0LLQtdC00LjRgtC1INCx0L7Qu9GM0YjQtSB7MH0g0Lgg0LzQtdC90YzRiNC1IHsxfSDRgdC40LzQstC+0LvQvtCyLlwiLFxuICAgIG1pblJvd0NvdW50RXJyb3I6IFwi0J/QvtC20LDQu9GD0LnRgdGC0LAsINC30LDQv9C+0LvQvdC40YLQtSDQvdC1INC80LXQvdGM0YjQtSB7MH0g0YHRgtGA0L7Qui5cIixcbiAgICBtaW5TZWxlY3RFcnJvcjogXCLQn9C+0LbQsNC70YPQudGB0YLQsCwg0LLRi9Cx0LXRgNC40YLQtSDRhdC+0YLRjyDQsdGLIHswfSDQstCw0YDQuNCw0L3RgtC+0LIuXCIsXG4gICAgbWF4U2VsZWN0RXJyb3I6IFwi0J/QvtC20LDQu9GD0LnRgdGC0LAsINCy0YvQsdC10YDQuNGC0LUg0L3QtSDQsdC+0LvQtdC1IHswfSDQstCw0YDQuNCw0L3RgtC+0LIuXCIsXG4gICAgbnVtZXJpY01pbk1heDogXCInezB9JyDQtNC+0LvQttC90L4g0LHRi9GC0Ywg0L3QtSDQvNC10L3RjNGI0LUg0YfQtdC8IHsxfSwg0Lgg0L3QtSDQsdC+0LvRjNGI0LUg0YfQtdC8IHsyfVwiLFxuICAgIG51bWVyaWNNaW46IFwiJ3swfScg0LTQvtC70LbQvdC+INCx0YvRgtGMINC90LUg0LzQtdC90YzRiNC1INGH0LXQvCB7MX1cIixcbiAgICBudW1lcmljTWF4OiBcIid7MH0nINC00L7Qu9C20L3QviDQsdGL0YLRjCDQvdC1INCx0L7Qu9GM0YjQtSDRh9C10LwgezF9XCIsXG4gICAgaW52YWxpZEVtYWlsOiBcItCf0L7QttCw0LvRg9C50YHRgtCwLCDQstCy0LXQtNC40YLQtSDQtNC10LnRgdGC0LLQuNGC0LXQu9GM0L3Ri9C5INCw0LTRgNC10YEg0Y3Qu9C10LrRgtGA0L7QvdC90L7QuSDQv9C+0YfRgtGLLlwiLFxuICAgIGludmFsaWRFeHByZXNzaW9uOiBcItCS0YvRgNCw0LbQtdC90LjQtSB7MH0g0LTQvtC70LbQvdC+INCy0L7Qt9Cy0YDQsNGJ0LDRgtGMICd0cnVlJy5cIixcbiAgICB1cmxSZXF1ZXN0RXJyb3I6IFwi0JfQsNC/0YDQvtGBINCy0LXRgNC90YPQuyDQvtGI0LjQsdC60YMgJ3swfScuIHsxfVwiLFxuICAgIHVybEdldENob2ljZXNFcnJvcjogXCLQntGC0LLQtdGCINC90LAg0LfQsNC/0YDQvtGBINC/0YDQuNGI0LXQuyDQv9GD0YHRgtC+0Lkg0LjQu9C4INGB0LLQvtC50YHRgtCy0L4gJ3BhdGgnINGD0LrQsNC30LDQvdC+INC90LXQstC10YDQvdC+XCIsXG4gICAgZXhjZWVkTWF4U2l6ZTogXCLQoNCw0LfQvNC10YAg0YTQsNC50LvQsCDQvdC1INC00L7Qu9C20LXQvSDQv9GA0LXQstGL0YjQsNGC0YwgezB9LlwiLFxuICAgIG90aGVyUmVxdWlyZWRFcnJvcjogXCLQn9C+0LbQsNC70YPQudGB0YLQsCwg0LLQstC10LTQuNGC0LUg0LTQsNC90L3Ri9C1INCyINC/0L7Qu9C1ICfQlNGA0YPQs9C+0LUnXCIsXG4gICAgdXBsb2FkaW5nRmlsZTogXCLQktCw0Ygg0YTQsNC50Lsg0LfQsNCz0YDRg9C20LDQtdGC0YHRjy4g0J/QvtC00L7QttC00LjRgtC1INC90LXRgdC60L7Qu9GM0LrQviDRgdC10LrRg9C90LQg0Lgg0L/QvtC/0YDQvtCx0YPQudGC0LUg0YHQvdC+0LLQsC5cIixcbiAgICBsb2FkaW5nRmlsZTogXCLQl9Cw0LPRgNGD0LfQutCwLi4uXCIsXG4gICAgY2hvb3NlRmlsZTogXCLQktGL0LHQtdGA0LjRgtC1INGE0LDQudC7KNGLKS4uLlwiLFxuICAgIG5vRmlsZUNob3NlbjogXCLQpNCw0LnQuyDQvdC1INCy0YvQsdGA0LDQvVwiLFxuICAgIGZpbGVEcmFnQXJlYVBsYWNlaG9sZGVyOiBcItCf0LXRgNC10YLQsNGJ0LjRgtC1INGE0LDQudC7INGB0Y7QtNCwINC40LvQuCDQvdCw0LbQvNC40YLQtSDQutC90L7Qv9C60YMg0L3QuNC20LUsINGH0YLQvtCx0Ysg0LfQsNCz0YDRg9C30LjRgtGMINGE0LDQudC7LlwiLFxuICAgIGNvbmZpcm1EZWxldGU6IFwi0JLRiyDRgtC+0YfQvdC+INGF0L7RgtC40YLQtSDRg9C00LDQu9C40YLRjCDQt9Cw0L/QuNGB0Yw/XCIsXG4gICAga2V5RHVwbGljYXRpb25FcnJvcjogXCLQrdGC0L4g0LfQvdCw0YfQtdC90LjQtSDQtNC+0LvQttC90L4g0LHRi9GC0Ywg0YPQvdC40LrQsNC70YzQvdGL0LwuXCIsXG4gICAgYWRkQ29sdW1uOiBcItCU0L7QsdCw0LLQuNGC0Ywg0LrQvtC70L7QvdC60YNcIixcbiAgICBhZGRSb3c6IFwi0JTQvtCx0LDQstC40YLRjCDRgdGC0YDQvtC60YNcIixcbiAgICByZW1vdmVSb3c6IFwi0KPQtNCw0LvQuNGC0YxcIixcbiAgICBlbXB0eVJvd3NUZXh0OiBcItCg0Y/QtNC+0LIg0L3QtdGCLlwiLFxuICAgIGFkZFBhbmVsOiBcItCU0L7QsdCw0LLQuNGC0Ywg0L3QvtCy0YPRjlwiLFxuICAgIHJlbW92ZVBhbmVsOiBcItCj0LTQsNC70LjRgtGMXCIsXG4gICAgY2hvaWNlc19JdGVtOiBcItCS0LDRgNC40LDQvdGCXCIsXG4gICAgbWF0cml4X2NvbHVtbjogXCLQmtC+0LvQvtC90LrQsFwiLFxuICAgIG1hdHJpeF9yb3c6IFwi0KHRgtGA0L7QutCwXCIsXG4gICAgbXVsdGlwbGV0ZXh0X2l0ZW1uYW1lOiBcItGC0LXQutGB0YJcIixcbiAgICBzYXZpbmdEYXRhOiBcItCg0LXQt9GD0LvRjNGC0LDRgtGLINGB0L7RhdGA0LDQvdGP0Y7RgtGB0Y8g0L3QsCDRgdC10YDQstC10YAuLi5cIixcbiAgICBzYXZpbmdEYXRhRXJyb3I6IFwi0J/RgNC+0LjQt9C+0YjQu9CwINC+0YjQuNCx0LrQsCwg0YDQtdC30YPQu9GM0YLQsNGCINC90LUg0LHRi9C7INGB0L7RhdGA0LDQvdGR0L0uXCIsXG4gICAgc2F2aW5nRGF0YVN1Y2Nlc3M6IFwi0KDQtdC30YPQu9GM0YLQsNGCINGD0YHQv9C10YjQvdC+INGB0L7RhdGA0LDQvdGR0L0hXCIsXG4gICAgc2F2ZUFnYWluQnV0dG9uOiBcItCf0L7Qv9GA0L7QsdC+0LLQsNGC0Ywg0YHQvdC+0LLQsFwiLFxuICAgIHRpbWVyTWluOiBcItC80LjQvVwiLFxuICAgIHRpbWVyU2VjOiBcItGB0LXQulwiLFxuICAgIHRpbWVyU3BlbnRBbGw6IFwi0JLRiyDQv9C+0YLRgNCw0YLQuNC70LggezB9INC90LAg0Y3RgtC+0Lkg0YHRgtGA0LDQvdC40YbQtSDQuCB7MX0g0LLRgdC10LPQvi5cIixcbiAgICB0aW1lclNwZW50UGFnZTogXCLQktGLINC/0L7RgtGA0LDRgtC40LvQuCB7MH0g0L3QsCDRjdGC0L7QuSDRgdGC0YDQsNC90LjRhtC1LlwiLFxuICAgIHRpbWVyU3BlbnRTdXJ2ZXk6IFwi0JLRiyDQv9C+0YLRgNCw0YLQuNC70LggezB9INCyINGC0LXRh9C10L3QuNC1INGC0LXRgdGC0LAuXCIsXG4gICAgdGltZXJMaW1pdEFsbDogXCLQktGLINC/0L7RgtGA0LDRgtC40LvQuCB7MH0g0LjQtyB7MX0g0L3QsCDRjdGC0L7QuSDRgdGC0YDQsNC90LjRhtC1INC4IHsyfSDQuNC3IHszfSDQtNC70Y8g0LLRgdC10LPQviDRgtC10YHRgtCwLlwiLFxuICAgIHRpbWVyTGltaXRQYWdlOiBcItCS0Ysg0L/QvtGC0YDQsNGC0LjQu9C4IHswfSDQuNC3IHsxfSDQvdCwINGN0YLQvtC5INGB0YLRgNCw0L3QuNGG0LUuXCIsXG4gICAgdGltZXJMaW1pdFN1cnZleTogXCLQktGLINC/0L7RgtGA0LDRgtC40LvQuCB7MH0g0LjQtyB7MX0g0LTQu9GPINCy0YHQtdCz0L4g0YLQtdGB0YLQsC5cIixcbiAgICBjbGVhckNhcHRpb246IFwi0J7Rh9C40YHRgtC40YLRjFwiLFxuICAgIHNpZ25hdHVyZVBsYWNlSG9sZGVyOiBcItCf0L7QtNC/0LjRiNC40YLQtSDQt9C00LXRgdGMXCIsXG4gICAgY2hvb3NlRmlsZUNhcHRpb246IFwi0JLRi9Cx0LXRgNC40YLQtSDRhNCw0LnQu1wiLFxuICAgIHRha2VQaG90b0NhcHRpb246IFwi0KHQtNC10LvQsNGC0Ywg0YTQvtGC0L5cIixcbiAgICBjYW1lcmFQbGFjZUhvbGRlcjogXCLQndCw0LbQvNC40YLQtSDQutC90L7Qv9C60YMg0L3QuNC20LUsINGH0YLQvtCx0Ysg0YHQtNC10LvQsNGC0Ywg0YHQvdC40LzQvtC6INGBINC/0L7QvNC+0YnRjNGOINC60LDQvNC10YDRiy5cIixcbiAgICBmaWxlQ2FtZXJhRHJhZ0FyZWFQbGFjZUhvbGRlcjogXCLQn9C10YDQtdGC0LDRidC40YLQtSDQuNC70Lgg0LLRi9Cx0LXRgNC40YLQtSDRhNCw0LnQuyDQtNC70Y8g0LfQsNCz0YDRg9C30LrQuCDQuNC70Lgg0YHRitC10LzQutC4INGBINC/0L7QvNC+0YnRjNGOINC60LDQvNC10YDRiy5cIixcbiAgICByZXBsYWNlRmlsZUNhcHRpb246IFwi0JfQsNC80LXQvdC40YLRjCDRhNCw0LnQu1wiLFxuICAgIHJlbW92ZUZpbGVDYXB0aW9uOiBcItCj0LTQsNC70LjRgtGMINGE0LDQudC7XCIsXG4gICAgYm9vbGVhbkNoZWNrZWRMYWJlbDogXCLQlNCwXCIsXG4gICAgYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcItCd0LXRglwiLFxuICAgIGNvbmZpcm1SZW1vdmVGaWxlOiBcItCS0Ysg0YPQstC10YDQtdC90YssINGH0YLQviDRhdC+0YLQuNGC0LUg0YPQtNCw0LvQuNGC0Ywg0Y3RgtC+0YIg0YTQsNC50Ls6IHswfT9cIixcbiAgICBjb25maXJtUmVtb3ZlQWxsRmlsZXM6IFwi0JLRiyDRg9Cy0LXRgNC10L3Riywg0YfRgtC+INGF0L7RgtC40YLQtSDRg9C00LDQu9C40YLRjCDQstGB0LUg0YTQsNC50LvRiz9cIixcbiAgICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwi0J3QsNC30LLQsNC90LjQtSDQstC+0L/RgNC+0YHQsFwiLFxuICAgIG1vZGFsQ2FuY2VsQnV0dG9uVGV4dDogXCLQntGC0LzQtdC90LjRgtGMXCIsXG4gICAgbW9kYWxBcHBseUJ1dHRvblRleHQ6IFwi0J/RgNC40LzQtdC90Y/RgtGMXCIsXG4gICAgZmlsdGVyU3RyaW5nUGxhY2Vob2xkZXI6IFwi0JLQstC10LTQuNGC0LUg0LTQu9GPINC/0L7QuNGB0LrQsC4uLlwiLFxuICAgIGVtcHR5TWVzc2FnZTogXCLQndC10YIg0LTQsNC90L3Ri9GFINC00LvRjyDQvtGC0L7QsdGA0LDQttC10L3QuNGPXCIsXG4gICAgbm9FbnRyaWVzVGV4dDogXCLQn9C+0LrQsCDQvdC10YIg0LfQsNC/0LjRgdC10LkuXFxu0J3QsNC20LzQuNGC0LUg0LrQvdC+0L/QutGDINC90LjQttC1LCDRh9GC0L7QsdGLINC00L7QsdCw0LLQuNGC0Ywg0L3QvtCy0YPRjiDQt9Cw0L/QuNGB0YwuXCIsXG4gICAgbm9FbnRyaWVzUmVhZG9ubHlUZXh0OiBcItCX0LDQv9C40YHQtdC5INC90LXRgi5cIixcbiAgICBtb3JlOiBcItCR0L7Qu9GM0YjQtVwiLFxuICAgIHRhZ2JveERvbmVCdXR0b25DYXB0aW9uOiBcItCl0J7QoNCe0KjQnlwiLFxuICAgIHNlbGVjdFRvUmFua0VtcHR5UmFua2VkQXJlYVRleHQ6IFwi0JLRgdC1INCy0LDRgNC40LDQvdGC0Ysg0YDQsNC90LbQuNGA0YPRjtGC0YHRj1wiLFxuICAgIHNlbGVjdFRvUmFua0VtcHR5VW5yYW5rZWRBcmVhVGV4dDogXCLQn9C10YDQtdGC0LDRidC40YLQtSDRgdGO0LTQsCDQstCw0YDQuNCw0L3RgtGLLCDRh9GC0L7QsdGLINGA0LDQvdC20LjRgNC+0LLQsNGC0Ywg0LjRhVwiXG59O1xuc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN1cnZleUxvY2FsaXphdGlvblwiXS5sb2NhbGVzW1wicnVcIl0gPSBydXNzaWFuU3VydmV5U3RyaW5ncztcbnN1cnZleV9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdXJ2ZXlMb2NhbGl6YXRpb25cIl0ubG9jYWxlTmFtZXNbXCJydVwiXSA9IFwi0YDRg9GB0YHQutC40LlcIjtcbi8vIFRoZSBmb2xsb3dpbmcgc3RyaW5ncyBoYXZlIGJlZW4gdHJhbnNsYXRlZCBieSBhIG1hY2hpbmUgdHJhbnNsYXRpb24gc2VydmljZVxuLy8gUmVtb3ZlIHRob3NlIHN0cmluZ3MgdGhhdCB5b3UgaGF2ZSBjb3JyZWN0ZWQgbWFudWFsbHlcbi8vIHBhbmVsRHluYW1pY1RhYlRleHRGb3JtYXQ6IFwiUGFuZWwge3BhbmVsSW5kZXh9XCIgPT4gXCLQn9Cw0L3QtdC70Ywge3BhbmVsSW5kZXh9XCJcbi8vIGVtcHR5TWVzc2FnZTogXCJObyBkYXRhIHRvIGRpc3BsYXlcIiA9PiBcItCd0LXRgiDQtNCw0L3QvdGL0YUg0LTQu9GPINC+0YLQvtCx0YDQsNC20LXQvdC40Y9cIlxuLy8gbm9FbnRyaWVzUmVhZG9ubHlUZXh0OiBcIlRoZXJlIGFyZSBubyBlbnRyaWVzLlwiID0+IFwi0JfQsNC/0LjRgdC10Lkg0L3QtdGCLlwiXG4vLyBtb3JlOiBcIk1vcmVcIiA9PiBcItCR0L7Qu9GM0YjQtVwiXG4vLyB0YWdib3hEb25lQnV0dG9uQ2FwdGlvbjogXCJPS1wiID0+IFwi0KXQntCg0J7QqNCeXCJcbi8vIHNlbGVjdFRvUmFua0VtcHR5UmFua2VkQXJlYVRleHQ6IFwiQWxsIGNob2ljZXMgYXJlIHJhbmtlZFwiID0+IFwi0JLRgdC1INCy0LDRgNC40LDQvdGC0Ysg0YDQsNC90LbQuNGA0YPRjtGC0YHRj1wiXG4vLyBzZWxlY3RUb1JhbmtFbXB0eVVucmFua2VkQXJlYVRleHQ6IFwiRHJhZyBhbmQgZHJvcCBjaG9pY2VzIGhlcmUgdG8gcmFuayB0aGVtXCIgPT4gXCLQn9C10YDQtdGC0LDRidC40YLQtSDRgdGO0LTQsCDQstCw0YDQuNCw0L3RgtGLLCDRh9GC0L7QsdGLINGA0LDQvdC20LjRgNC+0LLQsNGC0Ywg0LjRhVwiLy8gdGFrZVBob3RvQ2FwdGlvbjogXCJUYWtlIFBob3RvXCIgPT4gXCLQodC00LXQu9Cw0YLRjCDRhNC+0YLQvlwiXG4vLyBjYW1lcmFQbGFjZUhvbGRlcjogXCJDbGljayB0aGUgYnV0dG9uIGJlbG93IHRvIHRha2UgYSBwaG90byB1c2luZyB0aGUgY2FtZXJhLlwiID0+IFwi0J3QsNC20LzQuNGC0LUg0LrQvdC+0L/QutGDINC90LjQttC1LCDRh9GC0L7QsdGLINGB0LTQtdC70LDRgtGMINGB0L3QuNC80L7QuiDRgSDQv9C+0LzQvtGJ0YzRjiDQutCw0LzQtdGA0YsuXCJcbi8vIGZpbGVDYW1lcmFEcmFnQXJlYVBsYWNlSG9sZGVyOiBcIkRyYWcgYW5kIGRyb3Agb3Igc2VsZWN0IGEgZmlsZSB0byB1cGxvYWQgb3IgdGFrZSBhIHBob3RvIHVzaW5nIHRoZSBjYW1lcmEuXCIgPT4gXCLQn9C10YDQtdGC0LDRidC40YLQtSDQuNC70Lgg0LLRi9Cx0LXRgNC40YLQtSDRhNCw0LnQuyDQtNC70Y8g0LfQsNCz0YDRg9C30LrQuCDQuNC70Lgg0YHRitC10LzQutC4INGBINC/0L7QvNC+0YnRjNGOINC60LDQvNC10YDRiy5cIlxuLy8gcmVwbGFjZUZpbGVDYXB0aW9uOiBcIlJlcGxhY2UgZmlsZVwiID0+IFwi0JfQsNC80LXQvdC40YLRjCDRhNCw0LnQu1wiXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvbG9jYWxpemF0aW9uL3NlcmJpYW4udHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvbG9jYWxpemF0aW9uL3NlcmJpYW4udHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogc2VyYmlhblN0cmluZ3MgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic2VyYmlhblN0cmluZ3NcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzZXJiaWFuU3RyaW5nczsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHN1cnZleS1jb3JlICovIFwiLi9zcmMvZW50cmllcy9jb3JlLnRzXCIpO1xuXG52YXIgc2VyYmlhblN0cmluZ3MgPSB7XG4gICAgcGFnZVByZXZUZXh0OiBcIk5hemFkXCIsXG4gICAgcGFnZU5leHRUZXh0OiBcIkRhbGplXCIsXG4gICAgY29tcGxldGVUZXh0OiBcIlphdnLFoWlcIixcbiAgICBwcmV2aWV3VGV4dDogXCJQcmVnbGVkYWpcIixcbiAgICBlZGl0VGV4dDogXCJJem1lbmlcIixcbiAgICBzdGFydFN1cnZleVRleHQ6IFwiWmFwb8SNbmlcIixcbiAgICBvdGhlckl0ZW1UZXh0OiBcIkRydWdvICh1cGnFoWkpXCIsXG4gICAgbm9uZUl0ZW1UZXh0OiBcIk5pxaF0YVwiLFxuICAgIHNlbGVjdEFsbEl0ZW1UZXh0OiBcIkl6YWJlcmkgc3ZlXCIsXG4gICAgcHJvZ3Jlc3NUZXh0OiBcIlN0cmFuaWNhIHswfSBvZCB7MX1cIixcbiAgICBpbmRleFRleHQ6IFwiezB9IHsxfVwiLFxuICAgIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCJVcGlzIHswfSBvZCB7MX1cIixcbiAgICBwYW5lbER5bmFtaWNUYWJUZXh0Rm9ybWF0OiBcIlBhbmVsIHtwYW5lbEluZGV4fVwiLFxuICAgIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCJPZGdvdm9yZW5vIG5hIHswfS97MX0gcGl0YW5qYVwiLFxuICAgIGVtcHR5U3VydmV5OiBcIk5lbWEgdmlkbGppdmloIHN0cmFuaWNhIGlsaSBwaXRhbmphIHUgYW5rZXRpLlwiLFxuICAgIGNvbXBsZXRpbmdTdXJ2ZXk6IFwiSHZhbGEgbmEgcG9wdW5qYXZhbmp1IGFua2V0ZSFcIixcbiAgICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOiBcIlByZW1hIG5hxaFpbSBwb2RhY2ltYSwgdmXEhyBzdGUgcG9wdW5pbGkgb3Z1IGFua2V0dS5cIixcbiAgICBsb2FkaW5nU3VydmV5OiBcIlXEjWl0YXZhbSBhbmtldHUuLi5cIixcbiAgICBwbGFjZWhvbGRlcjogXCJJemFiZXJpLi4uXCIsXG4gICAgcmF0aW5nT3B0aW9uc0NhcHRpb246IFwiSXphYmVyaXRlLi4uXCIsXG4gICAgdmFsdWU6IFwidnJlZG5vc3RcIixcbiAgICByZXF1aXJlZEVycm9yOiBcIk1vbGltbyBvZGdvdm9yaXRlIG5hIG92byBwaXRhbmplLlwiLFxuICAgIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcIk1vbGltbyBvZGdvdm9yaXRlIG5hIGJhciBqZWRubyBwaXRhbmplLlwiLFxuICAgIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwiTW9saW1vIG9kZ292b3JpdGUgbmEgcGl0YW5qYSB1IHN2aW0gcmVkb3ZpbWEuXCIsXG4gICAgbnVtZXJpY0Vycm9yOiBcIlZyZWRub3N0IGJpIHRyZWJhbG8gZGEgYnVkZSBudW1lcmnEjWthLlwiLFxuICAgIG1pbkVycm9yOiBcIlZyZWRub3N0IG5lIGJpIHRyZWJhbG8gZGEgYnVkZSBtYW5qYSBvZCB7MH1cIixcbiAgICBtYXhFcnJvcjogXCJWcmVkbm9zdCBuZSBiaSB0cmViYWxvIGRhIGJ1ZGUgdmXEh2Egb2QgezB9XCIsXG4gICAgdGV4dE1pbkxlbmd0aDogXCJNb2xpbW8gdW5lc2l0ZSBiYXIgezB9IHpuYWsob3YpYS5cIixcbiAgICB0ZXh0TWF4TGVuZ3RoOiBcIk1vbGltbyB1bmVzaXRlIG5hanZpxaFlIHswfSB6bmFrKG92KWEuXCIsXG4gICAgdGV4dE1pbk1heExlbmd0aDogXCJNb2xpbW8gdW5lc2l0ZSBuYWptYW5qZSB7MH0gaSBuZSB2acWhZSBvZCB7MX0gem5hayhvdilhLlwiLFxuICAgIG1pblJvd0NvdW50RXJyb3I6IFwiTW9saW1vIHBvcHVuaXRlIG5ham1hbmplIHswfSByZWQob3ZhKS5cIixcbiAgICBtaW5TZWxlY3RFcnJvcjogXCJNb2xpbW8gaXphYmVyaXRlIG5ham1hbmplIHswfSBvcGNpamEvZS5cIixcbiAgICBtYXhTZWxlY3RFcnJvcjogXCJNb2xpbW8gaXphYmVyaXRlIG5hanZpxaFlIHswfSBvcGNpamEvZS5cIixcbiAgICBudW1lcmljTWluTWF4OiBcIid7MH0nIGJpIHRyZWJhbG8gZGEgYnVkZSBuYWptYW5qZSB7MX0gaSBuYWp2acWhZSB7Mn1cIixcbiAgICBudW1lcmljTWluOiBcIid7MH0nIGJpIHRyZWJhbG8gZGEgYnVkZSBuYWptYW5qZSB7MX1cIixcbiAgICBudW1lcmljTWF4OiBcIid7MH0nIGJpIHRyZWJhbG8gZGEgYnVkZSBuYWp2acWhZSB7MX1cIixcbiAgICBpbnZhbGlkRW1haWw6IFwiTW9saW1vIHVuZXNpdGUgaXNwcmF2bnUgZS1tYWlsIGFkcmVzdS5cIixcbiAgICBpbnZhbGlkRXhwcmVzc2lvbjogXCJJenJhejogezB9IGJpIHRyZWJhbG8gZGEgYnVkZSB0YcSNYW4uXCIsXG4gICAgdXJsUmVxdWVzdEVycm9yOiBcIlphaHRldiBqZSBuYWnFoWFvIG5hIGdyZcWha3UgJ3swfScuIHsxfVwiLFxuICAgIHVybEdldENob2ljZXNFcnJvcjogXCJaYWh0ZXYgbmlqZSBwcm9uYcWhYW8gcG9kYXRrZSwgaWxpIGplIHB1dGFuamEgbmV0YcSNbmFcIixcbiAgICBleGNlZWRNYXhTaXplOiBcIlZlbGnEjWluYSBmYWpsYSBuZSBiaSB0cmViYWxvIGRhIHByZWxhemkgezB9LlwiLFxuICAgIG90aGVyUmVxdWlyZWRFcnJvcjogXCJNb2xpbW8gdW5lc2l0ZSBkcnVndSB2cmVkbm9zdC5cIixcbiAgICB1cGxvYWRpbmdGaWxlOiBcIkZhamwgc2UgxaFhbGplLiBNb2xpbW8gc2HEjWVrYWp0ZSBuZWtvIHZyZW1lIGkgcG9rdcWhYWp0ZSBwb25vdm8uXCIsXG4gICAgbG9hZGluZ0ZpbGU6IFwiVcSNaXRhdmFuamUuLi5cIixcbiAgICBjaG9vc2VGaWxlOiBcIkl6YWJlcml0ZSBmYWpsb3ZlLi4uXCIsXG4gICAgbm9GaWxlQ2hvc2VuOiBcIk5pamUgaXphYnJhbiBuaWplZGFuIGZhamxcIixcbiAgICBmaWxlRHJhZ0FyZWFQbGFjZWhvbGRlcjogXCJQcmV2dWNpdGUgaSBvdHB1c3RpdGUgZGF0b3Rla3Ugb3ZkZSBpbGkga2xpa25pdGUgbmEgZHVnbWUgaXNwb2QgaSBvZGFiZXJpdGUgZGF0b3Rla3UgemEgb3RwcmVtYW5qZS5cIixcbiAgICBjb25maXJtRGVsZXRlOiBcIkRhIGxpIMW+ZWxpdGUgZGEgaXpicmnFoWV0ZSB1bm9zP1wiLFxuICAgIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwiT3ZhIHZyZWRub3N0IHRyZWJhIGRhIGJ1ZGUgamVkaW5zdHZlbmEuXCIsXG4gICAgYWRkQ29sdW1uOiBcIkRvZGFqIGtvbG9udVwiLFxuICAgIGFkZFJvdzogXCJEb2RhaiByZWRcIixcbiAgICByZW1vdmVSb3c6IFwiVWtsb25pXCIsXG4gICAgZW1wdHlSb3dzVGV4dDogXCJOZW1hIHJlZG92YS5cIixcbiAgICBhZGRQYW5lbDogXCJEb2RhaiBub3ZvXCIsXG4gICAgcmVtb3ZlUGFuZWw6IFwiVWtsb25pXCIsXG4gICAgY2hvaWNlc19JdGVtOiBcInN0YXZrYVwiLFxuICAgIG1hdHJpeF9jb2x1bW46IFwiS29sb25hXCIsXG4gICAgbWF0cml4X3JvdzogXCJSZWRcIixcbiAgICBtdWx0aXBsZXRleHRfaXRlbW5hbWU6IFwidGVrc3RcIixcbiAgICBzYXZpbmdEYXRhOiBcIlUgdG9rdSBqZSDEjXV2YW5qZSBwb2RhdGFrYSBuYSBzZXJ2ZXJ1Li4uXCIsXG4gICAgc2F2aW5nRGF0YUVycm9yOiBcIkRvxaFsbyBqZSBkbyBncmXFoWtlIGkgcmV6dWx0YXRpIG5pc3Ugc2HEjXV2YW5pLlwiLFxuICAgIHNhdmluZ0RhdGFTdWNjZXNzOiBcIlJlenVsdGF0aSBzdSB1c3BlxaFubyBzYcSNdXZhbmkhXCIsXG4gICAgc2F2ZUFnYWluQnV0dG9uOiBcIlBva3XFoWFqdGUgcG9ub3ZvXCIsXG4gICAgdGltZXJNaW46IFwibWluXCIsXG4gICAgdGltZXJTZWM6IFwic2VrXCIsXG4gICAgdGltZXJTcGVudEFsbDogXCJQcm92ZWxpIHN0ZSB7MH0gbmEgb3ZvaiBzdHJhbmljaSBpIHsxfSB1a3Vwbm8uXCIsXG4gICAgdGltZXJTcGVudFBhZ2U6IFwiUHJvdmVsaSBzdGUgezB9IG5hIG92b2ogc3RyYW5pY2kuXCIsXG4gICAgdGltZXJTcGVudFN1cnZleTogXCJQcm92ZWxpIHN0ZSB7MH0gdWt1cG5vLlwiLFxuICAgIHRpbWVyTGltaXRBbGw6IFwiUHJvdmVsaSBzdGUgezB9IG9kIHsxfSBuYSBvdm9qIHN0cmFuaWNpIGkgezJ9IG9kIHszfSB1a3Vwbm8uXCIsXG4gICAgdGltZXJMaW1pdFBhZ2U6IFwiUHJvdmVsaSBzdGUgezB9IG9kIHsxfSBuYSBvdm9qIHN0cmFuaWNpLlwiLFxuICAgIHRpbWVyTGltaXRTdXJ2ZXk6IFwiUHJvdmVsaSBzdGUgezB9IG9kIHsxfSB1a3Vwbm8uXCIsXG4gICAgY2xlYXJDYXB0aW9uOiBcIlBvbmnFoXRpXCIsXG4gICAgc2lnbmF0dXJlUGxhY2VIb2xkZXI6IFwiUG90cGnFoWl0ZSBvdmRlXCIsXG4gICAgY2hvb3NlRmlsZUNhcHRpb246IFwiSXphYmVyaSBmYWpsXCIsXG4gICAgdGFrZVBob3RvQ2FwdGlvbjogXCJGb3RvZ3JhZmlzYW5qZVwiLFxuICAgIGNhbWVyYVBsYWNlSG9sZGVyOiBcIktsaWtuaXRlIG5hIGR1Z21lIGlzcG9kIGRhIGJpc3RlIHNuaW1pbGkgZm90b2dyYWZpanUgcG9tb8SHdSBmb3RvYXBhcmF0YS5cIixcbiAgICBmaWxlQ2FtZXJhRHJhZ0FyZWFQbGFjZUhvbGRlcjogXCJQcmV2dWNpdGUgaSBvdHB1c3RpdGUgaWxpIGl6YWJlcml0ZSBkYXRvdGVrdSB6YSBvdHByZW1hbmplIGlsaSBzbmltYW5qZSBmb3RvZ3JhZmlqZSBwb21vxId1IGZvdG9hcGFyYXRhLlwiLFxuICAgIHJlcGxhY2VGaWxlQ2FwdGlvbjogXCJaYW1lbmkgZGF0b3Rla3VcIixcbiAgICByZW1vdmVGaWxlQ2FwdGlvbjogXCJVa2xvbmkgb3ZhaiBmYWpsXCIsXG4gICAgYm9vbGVhbkNoZWNrZWRMYWJlbDogXCJEYVwiLFxuICAgIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCJOZVwiLFxuICAgIGNvbmZpcm1SZW1vdmVGaWxlOiBcIkRhIGxpIHN0ZSBzaWd1cm5pIGRhIMW+ZWxpdGUgZGEgdWtsb25pdGUgb3ZhaiBmYWpsOiB7MH0/XCIsXG4gICAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcIkRhIGxpIHN0ZSBzaWd1cm5pIGRhIMW+ZWxpdGUgZGEgdWtsb25pdGUgc3ZlIGZhamxvdmU/XCIsXG4gICAgcXVlc3Rpb25UaXRsZVBhdHRlcm5UZXh0OiBcIk5hc2xvdiBwaXRhbmphXCIsXG4gICAgbW9kYWxDYW5jZWxCdXR0b25UZXh0OiBcIk90a2HFvmlcIixcbiAgICBtb2RhbEFwcGx5QnV0dG9uVGV4dDogXCJQcmltZW5pXCIsXG4gICAgZmlsdGVyU3RyaW5nUGxhY2Vob2xkZXI6IFwiT3RrdWNhanRlIGRhIGJpc3RlIHByZXRyYcW+aWxpLi4uXCIsXG4gICAgZW1wdHlNZXNzYWdlOiBcIk5lbWEgcG9kYXRha2EgemEgcHJpa2F6aXZhbmplXCIsXG4gICAgbm9FbnRyaWVzVGV4dDogXCJKb8WhIHV2ZWsgbmVtYSBzdGF2a2kuXFxuS2xpa25pdGUgbmEgZHVnbWUgaXNwb2QgZGEgYmlzdGUgZG9kYWxpIG5vdnUgc3Rhdmt1LlwiLFxuICAgIG5vRW50cmllc1JlYWRvbmx5VGV4dDogXCJOZW1hIHN0YXZraS5cIixcbiAgICBtb3JlOiBcIlZp0ZllXCIsXG4gICAgdGFnYm94RG9uZUJ1dHRvbkNhcHRpb246IFwiVSByZWR1XCIsXG4gICAgc2VsZWN0VG9SYW5rRW1wdHlSYW5rZWRBcmVhVGV4dDogXCJTdmkgaXpib3JpIHN1IHJhbmdpcmFuaVwiLFxuICAgIHNlbGVjdFRvUmFua0VtcHR5VW5yYW5rZWRBcmVhVGV4dDogXCJQcmV2dWNpdGUgaSBvdHB1c3RpdGUgaXpib3Igb3ZkZSBkYSBiaXN0ZSBpaCByYW5naXJhbGlcIlxufTtcbi8vVW5jb21tZW50IHRoZXNlIHR3byBsaW5lcyBvbiBjcmVhdGluZyBhIHRyYW5zbGF0aW9uIGZpbGUuIFlvdSBzaG91bGQgcmVwbGFjZSBcImVuXCIgYW5kIGVuU3RyaW5ncyB3aXRoIHlvdXIgbG9jYWxlIChcImZyXCIsIFwiZGVcIiBhbmQgc28gb24pIGFuZCB5b3VyIHZhcmlhYmxlLlxuc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN1cnZleUxvY2FsaXphdGlvblwiXS5sb2NhbGVzW1wicnNcIl0gPSBzZXJiaWFuU3RyaW5ncztcbnN1cnZleV9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdXJ2ZXlMb2NhbGl6YXRpb25cIl0ubG9jYWxlTmFtZXNbXCJyc1wiXSA9IFwiU3Jwc2tpXCI7XG4vLyBUaGUgZm9sbG93aW5nIHN0cmluZ3MgaGF2ZSBiZWVuIHRyYW5zbGF0ZWQgYnkgYSBtYWNoaW5lIHRyYW5zbGF0aW9uIHNlcnZpY2Vcbi8vIFJlbW92ZSB0aG9zZSBzdHJpbmdzIHRoYXQgeW91IGhhdmUgY29ycmVjdGVkIG1hbnVhbGx5XG4vLyBpbmRleFRleHQ6IFwiezB9IG9mIHsxfVwiID0+IFwiezB9IHsxfVwiXG4vLyBwYW5lbER5bmFtaWNUYWJUZXh0Rm9ybWF0OiBcIlBhbmVsIHtwYW5lbEluZGV4fVwiID0+IFwiUGFuZWwge3BhbmVsSW5kZXh9XCJcbi8vIHJhdGluZ09wdGlvbnNDYXB0aW9uOiBcIlNlbGVjdC4uLlwiID0+IFwiSXphYmVyaXRlLi4uXCJcbi8vIGZpbGVEcmFnQXJlYVBsYWNlaG9sZGVyOiBcIkRyYWcgYW5kIGRyb3AgYSBmaWxlIGhlcmUgb3IgY2xpY2sgdGhlIGJ1dHRvbiBiZWxvdyBhbmQgY2hvb3NlIGEgZmlsZSB0byB1cGxvYWQuXCIgPT4gXCJQcmV2dWNpdGUgaSBvdHB1c3RpdGUgZGF0b3Rla3Ugb3ZkZSBpbGkga2xpa25pdGUgbmEgZHVnbWUgaXNwb2QgaSBvZGFiZXJpdGUgZGF0b3Rla3UgemEgb3RwcmVtYW5qZS5cIlxuLy8gc2lnbmF0dXJlUGxhY2VIb2xkZXI6IFwiU2lnbiBoZXJlXCIgPT4gXCJQb3RwacWhaXRlIG92ZGVcIlxuLy8gZmlsdGVyU3RyaW5nUGxhY2Vob2xkZXI6IFwiVHlwZSB0byBzZWFyY2guLi5cIiA9PiBcIk90a3VjYWp0ZSBkYSBiaXN0ZSBwcmV0cmHFvmlsaS4uLlwiXG4vLyBlbXB0eU1lc3NhZ2U6IFwiTm8gZGF0YSB0byBkaXNwbGF5XCIgPT4gXCJOZW1hIHBvZGF0YWthIHphIHByaWtheml2YW5qZVwiXG4vLyBub0VudHJpZXNUZXh0OiBcIlRoZXJlIGFyZSBubyBlbnRyaWVzIHlldC5cXG5DbGljayB0aGUgYnV0dG9uIGJlbG93IHRvIGFkZCBhIG5ldyBlbnRyeS5cIiA9PiBcIkpvxaEgdXZlayBuZW1hIHN0YXZraS5cXG5LbGlrbml0ZSBuYSBkdWdtZSBpc3BvZCBkYSBiaXN0ZSBkb2RhbGkgbm92dSBzdGF2a3UuXCJcbi8vIG5vRW50cmllc1JlYWRvbmx5VGV4dDogXCJUaGVyZSBhcmUgbm8gZW50cmllcy5cIiA9PiBcIk5lbWEgc3RhdmtpLlwiXG4vLyBtb3JlOiBcIk1vcmVcIiA9PiBcIlZp0ZllXCJcbi8vIHRhZ2JveERvbmVCdXR0b25DYXB0aW9uOiBcIk9LXCIgPT4gXCJVIHJlZHVcIlxuLy8gc2VsZWN0VG9SYW5rRW1wdHlSYW5rZWRBcmVhVGV4dDogXCJBbGwgY2hvaWNlcyBhcmUgcmFua2VkXCIgPT4gXCJTdmkgaXpib3JpIHN1IHJhbmdpcmFuaVwiXG4vLyBzZWxlY3RUb1JhbmtFbXB0eVVucmFua2VkQXJlYVRleHQ6IFwiRHJhZyBhbmQgZHJvcCBjaG9pY2VzIGhlcmUgdG8gcmFuayB0aGVtXCIgPT4gXCJQcmV2dWNpdGUgaSBvdHB1c3RpdGUgaXpib3Igb3ZkZSBkYSBiaXN0ZSBpaCByYW5naXJhbGlcIi8vIHRha2VQaG90b0NhcHRpb246IFwiVGFrZSBQaG90b1wiID0+IFwiRm90b2dyYWZpc2FuamVcIlxuLy8gY2FtZXJhUGxhY2VIb2xkZXI6IFwiQ2xpY2sgdGhlIGJ1dHRvbiBiZWxvdyB0byB0YWtlIGEgcGhvdG8gdXNpbmcgdGhlIGNhbWVyYS5cIiA9PiBcIktsaWtuaXRlIG5hIGR1Z21lIGlzcG9kIGRhIGJpc3RlIHNuaW1pbGkgZm90b2dyYWZpanUgcG9tb8SHdSBmb3RvYXBhcmF0YS5cIlxuLy8gZmlsZUNhbWVyYURyYWdBcmVhUGxhY2VIb2xkZXI6IFwiRHJhZyBhbmQgZHJvcCBvciBzZWxlY3QgYSBmaWxlIHRvIHVwbG9hZCBvciB0YWtlIGEgcGhvdG8gdXNpbmcgdGhlIGNhbWVyYS5cIiA9PiBcIlByZXZ1Y2l0ZSBpIG90cHVzdGl0ZSBpbGkgaXphYmVyaXRlIGRhdG90ZWt1IHphIG90cHJlbWFuamUgaWxpIHNuaW1hbmplIGZvdG9ncmFmaWplIHBvbW/Eh3UgZm90b2FwYXJhdGEuXCJcbi8vIHJlcGxhY2VGaWxlQ2FwdGlvbjogXCJSZXBsYWNlIGZpbGVcIiA9PiBcIlphbWVuaSBkYXRvdGVrdVwiXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvbG9jYWxpemF0aW9uL3NpbXBsaWZpZWQtY2hpbmVzZS50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL2xvY2FsaXphdGlvbi9zaW1wbGlmaWVkLWNoaW5lc2UudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBzaW1wbGlmaWVkQ2hpbmVzZVN1cnZleVN0cmluZ3MgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic2ltcGxpZmllZENoaW5lc2VTdXJ2ZXlTdHJpbmdzXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc2ltcGxpZmllZENoaW5lc2VTdXJ2ZXlTdHJpbmdzOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBzdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgc3VydmV5LWNvcmUgKi8gXCIuL3NyYy9lbnRyaWVzL2NvcmUudHNcIik7XG5cbnZhciBzaW1wbGlmaWVkQ2hpbmVzZVN1cnZleVN0cmluZ3MgPSB7XG4gICAgcGFnZVByZXZUZXh0OiBcIuS4iuS4gOmhtVwiLFxuICAgIHBhZ2VOZXh0VGV4dDogXCLkuIvkuIDpobVcIixcbiAgICBjb21wbGV0ZVRleHQ6IFwi5o+Q5Lqk6Zeu5Y23XCIsXG4gICAgcHJldmlld1RleHQ6IFwi6aKE6KeIXCIsXG4gICAgZWRpdFRleHQ6IFwi57yW6L6RXCIsXG4gICAgc3RhcnRTdXJ2ZXlUZXh0OiBcIuW8gOWni+mXruWNt1wiLFxuICAgIG90aGVySXRlbVRleHQ6IFwi5aGr5YaZ5YW25LuW562U5qGIXCIsXG4gICAgbm9uZUl0ZW1UZXh0OiBcIuaXoFwiLFxuICAgIHNlbGVjdEFsbEl0ZW1UZXh0OiBcIumAieaLqeWFqOmDqFwiLFxuICAgIHByb2dyZXNzVGV4dDogXCLnrKwgezB9IOmhtSwg5YWxIHsxfSDpobVcIixcbiAgICBpbmRleFRleHQ6IFwiezF9ezB9XCIsXG4gICAgcGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0OiBcInswfSBvZiB7MX1cIixcbiAgICBwYW5lbER5bmFtaWNUYWJUZXh0Rm9ybWF0OiBcIumdouadvyB76Z2i5p2/57Si5byVfVwiLFxuICAgIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCLnrKwgezB9L3sxfSDpophcIixcbiAgICBlbXB0eVN1cnZleTogXCLpl67ljbfkuK3msqHmnInpl67popjmiJbpobXpnaJcIixcbiAgICBjb21wbGV0aW5nU3VydmV5OiBcIuaEn+iwouaCqOeahOWPguS4jiFcIixcbiAgICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOiBcIuS9oOW3suWujOaIkOmXruWNty5cIixcbiAgICBsb2FkaW5nU3VydmV5OiBcIumXruWNt+ato+WcqOWKoOi9veS4rS4uLlwiLFxuICAgIHBsYWNlaG9sZGVyOiBcIuivt+mAieaLqS4uLlwiLFxuICAgIHJhdGluZ09wdGlvbnNDYXB0aW9uOiBcIumAieaLqeOAguOAguOAglwiLFxuICAgIHZhbHVlOiBcIuWAvFwiLFxuICAgIHJlcXVpcmVkRXJyb3I6IFwi6K+35aGr5YaZ5q2k6Zeu6aKYXCIsXG4gICAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwi6Iez5bCR5Zue562U5LiA6aKYLlwiLFxuICAgIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwi6K+35aGr5YaZ5omA5pyJ6KGM5Lit6Zeu6aKYXCIsXG4gICAgbnVtZXJpY0Vycm9yOiBcIuetlOahiOW/hemhu+aYr+S4quaVsOWtl1wiLFxuICAgIG1pbkVycm9yOiBcIuivpeWAvOS4jeiDveWwj+S6jiB7MH1cIixcbiAgICBtYXhFcnJvcjogXCLor6XlgLzkuI3og73lpKfkuo4gezB9XCIsXG4gICAgdGV4dE1pbkxlbmd0aDogXCLnrZTmoYjplb/luqboh7PlsJEgezB9IOS4quWtl+esplwiLFxuICAgIHRleHRNYXhMZW5ndGg6IFwi562U5qGI6ZW/5bqm5LiN6IO96LaF6L+HIHswfSDkuKrlrZfnrKZcIixcbiAgICB0ZXh0TWluTWF4TGVuZ3RoOiBcIuetlOahiOmVv+W6puW/hemhu+WcqCB7MH0gLSB7MX0g5Liq5a2X56ym5LmL6Ze0XCIsXG4gICAgbWluUm93Q291bnRFcnJvcjogXCLmnIDlsJHpnIDopoHloavlhpkgezB9IOihjOetlOahiFwiLFxuICAgIG1pblNlbGVjdEVycm9yOiBcIuacgOWwkemcgOimgemAieaLqSB7MH0g6aG5562U5qGIXCIsXG4gICAgbWF4U2VsZWN0RXJyb3I6IFwi5pyA5aSa5Y+q6IO96YCJ5oupIHswfSDpobnnrZTmoYhcIixcbiAgICBudW1lcmljTWluTWF4OiBcIuetlOahiCAnezB9JyDlv4XpobvlpKfkuo7nrYnkuo4gezF9IOS4lOWwj+S6juetieS6jiB7Mn1cIixcbiAgICBudW1lcmljTWluOiBcIuetlOahiCAnezB9JyDlv4XpobvlpKfkuo7nrYnkuo4gezF9XCIsXG4gICAgbnVtZXJpY01heDogXCLnrZTmoYggJ3swfScg5b+F6aG75bCP5LqO562J5LqOIHsxfVwiLFxuICAgIGludmFsaWRFbWFpbDogXCLor7fovpPlhaXmnInmlYjnmoQgRW1haWwg5Zyw5Z2AXCIsXG4gICAgaW52YWxpZEV4cHJlc3Npb246IFwi5YWs5byPOiB7MH0g5peg5pWILlwiLFxuICAgIHVybFJlcXVlc3RFcnJvcjogXCLovb3lhaXpgInpobnml7blj5HnlJ/plJnor68gJ3swfSc6IHsxfVwiLFxuICAgIHVybEdldENob2ljZXNFcnJvcjogXCLmnKrog73ovb3lhaXmnInmlYjnmoTpgInpobnmiJbor7fmsYLlj4LmlbDot6/lvoTmnInor69cIixcbiAgICBleGNlZWRNYXhTaXplOiBcIuaWh+S7tuWkp+Wwj+S4jeiDvei2hei/hyB7MH1cIixcbiAgICBvdGhlclJlcXVpcmVkRXJyb3I6IFwi6K+35a6M5oiQ5YW25LuW6Zeu6aKYXCIsXG4gICAgdXBsb2FkaW5nRmlsZTogXCLmlofku7bkuIrkvKDkuK0uLi4g6K+36ICQ5b+D562J5b6F5Yeg56eS5ZCO6YeN6K+VXCIsXG4gICAgbG9hZGluZ0ZpbGU6IFwi5Yqg6L29Li4uXCIsXG4gICAgY2hvb3NlRmlsZTogXCLpgInmi6nmlofku7YuLi5cIixcbiAgICBub0ZpbGVDaG9zZW46IFwi5pyq6YCJ5oup5paH5Lu2XCIsXG4gICAgZmlsZURyYWdBcmVhUGxhY2Vob2xkZXI6IFwi5bCG5paH5Lu25ouW5pS+5Yiw5q2k5aSE5oiW5Y2V5Ye75LiL6Z2i55qE5oyJ6ZKu5bm26YCJ5oup6KaB5LiK5Lyg55qE5paH5Lu244CCXCIsXG4gICAgY29uZmlybURlbGV0ZTogXCLliKDpmaTorrDlvZU/XCIsXG4gICAga2V5RHVwbGljYXRpb25FcnJvcjogXCLkuLvplK7kuI3og73ph43lpI1cIixcbiAgICBhZGRDb2x1bW46IFwi5re75Yqg5YiXXCIsXG4gICAgYWRkUm93OiBcIua3u+WKoOihjFwiLFxuICAgIHJlbW92ZVJvdzogXCLliKDpmaTnrZTmoYhcIixcbiAgICBlbXB0eVJvd3NUZXh0OiBcIuaXoOWGheWuuVwiLFxuICAgIGFkZFBhbmVsOiBcIuaWsOa3u1wiLFxuICAgIHJlbW92ZVBhbmVsOiBcIuWIoOmZpFwiLFxuICAgIGNob2ljZXNfSXRlbTogXCLpgInpoblcIixcbiAgICBtYXRyaXhfY29sdW1uOiBcIuWIl1wiLFxuICAgIG1hdHJpeF9yb3c6IFwi6KGMXCIsXG4gICAgbXVsdGlwbGV0ZXh0X2l0ZW1uYW1lOiBcIuaWh+acrFwiLFxuICAgIHNhdmluZ0RhdGE6IFwi5q2j5Zyo5bCG57uT5p6c5L+d5a2Y5Yiw5pyN5Yqh5ZmoLi4uXCIsXG4gICAgc2F2aW5nRGF0YUVycm9yOiBcIuWcqOS/neWtmOe7k+aenOi/h+eoi+S4reWPkeeUn+S6humUmeivr++8jOe7k+aenOacquiDveS/neWtmFwiLFxuICAgIHNhdmluZ0RhdGFTdWNjZXNzOiBcIue7k+aenOS/neWtmOaIkOWKnyFcIixcbiAgICBzYXZlQWdhaW5CdXR0b246IFwi6K+36YeN6K+VXCIsXG4gICAgdGltZXJNaW46IFwi5YiGXCIsXG4gICAgdGltZXJTZWM6IFwi56eSXCIsXG4gICAgdGltZXJTcGVudEFsbDogXCLmnKzpobXnlKjml7YgezB9IOaAu+iuoeeUqOaXtnsxfSAuXCIsXG4gICAgdGltZXJTcGVudFBhZ2U6IFwi5pys6aG155So5pe2ezB9IC5cIixcbiAgICB0aW1lclNwZW50U3VydmV5OiBcIuaAu+iuoeeUqOaXtiB7MH0gLlwiLFxuICAgIHRpbWVyTGltaXRBbGw6IFwi5pys6aG155So5pe2IHswfSDlhbEgezF977yMIOaAu+iuoeeUqOaXtiB7Mn0g5YWxIHszfSAuXCIsXG4gICAgdGltZXJMaW1pdFBhZ2U6IFwi5pys6aG155So5pe2IHswfSDlhbEgezF9IC5cIixcbiAgICB0aW1lckxpbWl0U3VydmV5OiBcIuaAu+iuoeeUqOaXtiB7MH0g5YWxIHsxfS5cIixcbiAgICBjbGVhckNhcHRpb246IFwi5riF6ZmkXCIsXG4gICAgc2lnbmF0dXJlUGxhY2VIb2xkZXI6IFwi5Zyo5q2k562+5ZCNXCIsXG4gICAgY2hvb3NlRmlsZUNhcHRpb246IFwi6YCJ5oup5paH5Lu2XCIsXG4gICAgdGFrZVBob3RvQ2FwdGlvbjogXCLmi43nhadcIixcbiAgICBjYW1lcmFQbGFjZUhvbGRlcjogXCLljZXlh7vkuIvpnaLnmoTmjInpkq7kvb/nlKjnm7jmnLrmi43nhafjgIJcIixcbiAgICBmaWxlQ2FtZXJhRHJhZ0FyZWFQbGFjZUhvbGRlcjogXCLmi5bmlL7miJbpgInmi6nopoHkuIrkvKDnmoTmlofku7bmiJbkvb/nlKjnm7jmnLrmi43mkYTnhafniYfjgIJcIixcbiAgICByZXBsYWNlRmlsZUNhcHRpb246IFwi5pu/5o2i5paH5Lu2XCIsXG4gICAgcmVtb3ZlRmlsZUNhcHRpb246IFwi56e76Zmk5paH5Lu2XCIsXG4gICAgYm9vbGVhbkNoZWNrZWRMYWJlbDogXCLmmK9cIixcbiAgICBib29sZWFuVW5jaGVja2VkTGFiZWw6IFwi5ZCmXCIsXG4gICAgY29uZmlybVJlbW92ZUZpbGU6IFwi5Yig6Zmk5paH5Lu2OiB7MH0/XCIsXG4gICAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcIuWIoOmZpOaJgOacieaWh+S7tj9cIixcbiAgICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwi5qCH6aKYXCIsXG4gICAgbW9kYWxDYW5jZWxCdXR0b25UZXh0OiBcIuWPlua2iFwiLFxuICAgIG1vZGFsQXBwbHlCdXR0b25UZXh0OiBcIuehruWumlwiLFxuICAgIGZpbHRlclN0cmluZ1BsYWNlaG9sZGVyOiBcIumUruWFpeS7peaQnOe0oi4uLlwiLFxuICAgIGVtcHR5TWVzc2FnZTogXCLmsqHmnInopoHmmL7npLrnmoTmlbDmja5cIixcbiAgICBub0VudHJpZXNUZXh0OiBcIuWwmuaXoOadoeebruOAglxcbuWNleWHu+S4i+mdoueahOaMiemSruS7pea3u+WKoOaWsOadoeebruOAglwiLFxuICAgIG5vRW50cmllc1JlYWRvbmx5VGV4dDogXCLmsqHmnInmnaHnm67jgIJcIixcbiAgICBtb3JlOiBcIuabtOWkmlwiLFxuICAgIHRhZ2JveERvbmVCdXR0b25DYXB0aW9uOiBcIui/mOihjFwiLFxuICAgIHNlbGVjdFRvUmFua0VtcHR5UmFua2VkQXJlYVRleHQ6IFwi5omA5pyJ6YCJ5oup5Z2H5bey5o6S5ZCNXCIsXG4gICAgc2VsZWN0VG9SYW5rRW1wdHlVbnJhbmtlZEFyZWFUZXh0OiBcIuWwhumAiemhueaLluaUvuWIsOatpOWkhOi/m+ihjOaOkuWQjVwiXG59O1xuc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN1cnZleUxvY2FsaXphdGlvblwiXS5sb2NhbGVzW1wiemgtY25cIl0gPSBzaW1wbGlmaWVkQ2hpbmVzZVN1cnZleVN0cmluZ3M7XG5zdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3VydmV5TG9jYWxpemF0aW9uXCJdLmxvY2FsZU5hbWVzW1wiemgtY25cIl0gPSBcIueugOS9k+S4reaWh1wiO1xuLy8gVGhlIGZvbGxvd2luZyBzdHJpbmdzIGhhdmUgYmVlbiB0cmFuc2xhdGVkIGJ5IGEgbWFjaGluZSB0cmFuc2xhdGlvbiBzZXJ2aWNlXG4vLyBSZW1vdmUgdGhvc2Ugc3RyaW5ncyB0aGF0IHlvdSBoYXZlIGNvcnJlY3RlZCBtYW51YWxseVxuLy8gaW5kZXhUZXh0OiBcInswfSBvZiB7MX1cIiA9PiBcInsxfXswfVwiXG4vLyBwYW5lbER5bmFtaWNUYWJUZXh0Rm9ybWF0OiBcIlBhbmVsIHtwYW5lbEluZGV4fVwiID0+IFwi6Z2i5p2/IHvpnaLmnb/ntKLlvJV9XCJcbi8vIHJhdGluZ09wdGlvbnNDYXB0aW9uOiBcIlNlbGVjdC4uLlwiID0+IFwi6YCJ5oup44CC44CC44CCXCJcbi8vIGZpbGVEcmFnQXJlYVBsYWNlaG9sZGVyOiBcIkRyYWcgYW5kIGRyb3AgYSBmaWxlIGhlcmUgb3IgY2xpY2sgdGhlIGJ1dHRvbiBiZWxvdyBhbmQgY2hvb3NlIGEgZmlsZSB0byB1cGxvYWQuXCIgPT4gXCLlsIbmlofku7bmi5bmlL7liLDmraTlpITmiJbljZXlh7vkuIvpnaLnmoTmjInpkq7lubbpgInmi6nopoHkuIrkvKDnmoTmlofku7bjgIJcIlxuLy8gc2lnbmF0dXJlUGxhY2VIb2xkZXI6IFwiU2lnbiBoZXJlXCIgPT4gXCLlnKjmraTnrb7lkI1cIlxuLy8gZmlsdGVyU3RyaW5nUGxhY2Vob2xkZXI6IFwiVHlwZSB0byBzZWFyY2guLi5cIiA9PiBcIumUruWFpeS7peaQnOe0oi4uLlwiXG4vLyBlbXB0eU1lc3NhZ2U6IFwiTm8gZGF0YSB0byBkaXNwbGF5XCIgPT4gXCLmsqHmnInopoHmmL7npLrnmoTmlbDmja5cIlxuLy8gbm9FbnRyaWVzVGV4dDogXCJUaGVyZSBhcmUgbm8gZW50cmllcyB5ZXQuXFxuQ2xpY2sgdGhlIGJ1dHRvbiBiZWxvdyB0byBhZGQgYSBuZXcgZW50cnkuXCIgPT4gXCLlsJrml6DmnaHnm67jgIJcXG7ljZXlh7vkuIvpnaLnmoTmjInpkq7ku6Xmt7vliqDmlrDmnaHnm67jgIJcIlxuLy8gbm9FbnRyaWVzUmVhZG9ubHlUZXh0OiBcIlRoZXJlIGFyZSBubyBlbnRyaWVzLlwiID0+IFwi5rKh5pyJ5p2h55uu44CCXCJcbi8vIG1vcmU6IFwiTW9yZVwiID0+IFwi5pu05aSaXCJcbi8vIHRhZ2JveERvbmVCdXR0b25DYXB0aW9uOiBcIk9LXCIgPT4gXCLov5jooYxcIlxuLy8gc2VsZWN0VG9SYW5rRW1wdHlSYW5rZWRBcmVhVGV4dDogXCJBbGwgY2hvaWNlcyBhcmUgcmFua2VkXCIgPT4gXCLmiYDmnInpgInmi6nlnYflt7LmjpLlkI1cIlxuLy8gc2VsZWN0VG9SYW5rRW1wdHlVbnJhbmtlZEFyZWFUZXh0OiBcIkRyYWcgYW5kIGRyb3AgY2hvaWNlcyBoZXJlIHRvIHJhbmsgdGhlbVwiID0+IFwi5bCG6YCJ6aG55ouW5pS+5Yiw5q2k5aSE6L+b6KGM5o6S5ZCNXCIvLyB0YWtlUGhvdG9DYXB0aW9uOiBcIlRha2UgUGhvdG9cIiA9PiBcIuaLjeeFp1wiXG4vLyBjYW1lcmFQbGFjZUhvbGRlcjogXCJDbGljayB0aGUgYnV0dG9uIGJlbG93IHRvIHRha2UgYSBwaG90byB1c2luZyB0aGUgY2FtZXJhLlwiID0+IFwi5Y2V5Ye75LiL6Z2i55qE5oyJ6ZKu5L2/55So55u45py65ouN54Wn44CCXCJcbi8vIGZpbGVDYW1lcmFEcmFnQXJlYVBsYWNlSG9sZGVyOiBcIkRyYWcgYW5kIGRyb3Agb3Igc2VsZWN0IGEgZmlsZSB0byB1cGxvYWQgb3IgdGFrZSBhIHBob3RvIHVzaW5nIHRoZSBjYW1lcmEuXCIgPT4gXCLmi5bmlL7miJbpgInmi6nopoHkuIrkvKDnmoTmlofku7bmiJbkvb/nlKjnm7jmnLrmi43mkYTnhafniYfjgIJcIlxuLy8gcmVwbGFjZUZpbGVDYXB0aW9uOiBcIlJlcGxhY2UgZmlsZVwiID0+IFwi5pu/5o2i5paH5Lu2XCJcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9sb2NhbGl6YXRpb24vc2xvdmFrLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvbG9jYWxpemF0aW9uL3Nsb3Zhay50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHNsb3Zha1N1cnZleVN0cmluZ3MgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic2xvdmFrU3VydmV5U3RyaW5nc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHNsb3Zha1N1cnZleVN0cmluZ3M7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHN1cnZleV9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBzdXJ2ZXktY29yZSAqLyBcIi4vc3JjL2VudHJpZXMvY29yZS50c1wiKTtcblxudmFyIHNsb3Zha1N1cnZleVN0cmluZ3MgPSB7XG4gICAgcGFnZVByZXZUZXh0OiBcIlByZWRjaMOhZHphasO6Y2FcIixcbiAgICBwYWdlTmV4dFRleHQ6IFwixI5hbGVqXCIsXG4gICAgY29tcGxldGVUZXh0OiBcIkRva29uxI1lbsOpXCIsXG4gICAgcHJldmlld1RleHQ6IFwiVWvDocW+a2FcIixcbiAgICBlZGl0VGV4dDogXCJVcHJhdmnFpVwiLFxuICAgIHN0YXJ0U3VydmV5VGV4dDogXCJTcHVzdGnFpVwiLFxuICAgIG90aGVySXRlbVRleHQ6IFwiSW7DqSAob3DDrcWhdGUpXCIsXG4gICAgbm9uZUl0ZW1UZXh0OiBcIsW9aWFkbmVcIixcbiAgICBzZWxlY3RBbGxJdGVtVGV4dDogXCJWeWJyYcWlIHbFoWV0a3lcIixcbiAgICBwcm9ncmVzc1RleHQ6IFwiU3RyYW5hIHswfSB6IHsxfVwiLFxuICAgIGluZGV4VGV4dDogXCJ7MH0gezF9XCIsXG4gICAgcGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0OiBcIlrDoXpuYW0gezB9IHogezF9XCIsXG4gICAgcGFuZWxEeW5hbWljVGFiVGV4dEZvcm1hdDogXCJQYW5lbCB7cGFuZWxJbmRleH1cIixcbiAgICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwiWm9kcG92ZWRhbsOpIG90w6F6a3kgezB9L3sxfVwiLFxuICAgIGVtcHR5U3VydmV5OiBcIlYgcHJpZXNrdW1lIG5pZSBqZSDFvmlhZG5hIHZpZGllxL5uw6Egc3Ryw6Fua2EgYW5pIG90w6F6a2EuXCIsXG4gICAgY29tcGxldGluZ1N1cnZleTogXCLEjmFrdWplbWUgdsOhbSB6YSBkb2tvbsSNZW5pZSBwcmllc2t1bXUuXCIsXG4gICAgY29tcGxldGluZ1N1cnZleUJlZm9yZTogXCJQb2TEvmEgbmHFoWljaCB6w6F6bmFtb3Ygc3RlIHXFviB0ZW50byBwcmllc2t1bSBkb2tvbsSNaWxpLlwiLFxuICAgIGxvYWRpbmdTdXJ2ZXk6IFwiTmHEjcOtdGFuaWUgcHJpZXNrdW11Li4uXCIsXG4gICAgcGxhY2Vob2xkZXI6IFwiVnlicmHFpS4uLlwiLFxuICAgIHJhdGluZ09wdGlvbnNDYXB0aW9uOiBcIlZ5YnJhxaUuLi5cIixcbiAgICB2YWx1ZTogXCJob2Rub3RhXCIsXG4gICAgcmVxdWlyZWRFcnJvcjogXCJQb8W+YWR1amUgc2Egb2RvenZhLlwiLFxuICAgIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcIlBvxb5hZHVqZSBzYSBvZG96dmE6IHpvZHBvdmVkYWp0ZSBhc3BvxYggamVkbnUgb3TDoXprdS5cIixcbiAgICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIlBvxb5hZHVqZSBzYSBvZG96dmE6IHpvZHBvdmVkYWp0ZSBvdMOhemt5IHZvIHbFoWV0a8O9Y2ggcmlhZGtvY2guXCIsXG4gICAgbnVtZXJpY0Vycm9yOiBcIkhvZG5vdGEgbcOhIGJ5xaUgxI3DrXNlbG7DoS5cIixcbiAgICBtaW5FcnJvcjogXCJIb2Rub3RhIG5lbcOhIGJ5xaUgbmnFvsWhaWEgbmXFviB7MH1cIixcbiAgICBtYXhFcnJvcjogXCJIb2Rub3RhIG5lbcOhIGJ5xaUgdnnFocWhaWEgbmXFviB7MH1cIixcbiAgICB0ZXh0TWluTGVuZ3RoOiBcIlphZGFqdGUgYXNwb8WIIHswfSB6bmFrKC15Ly1vdikuXCIsXG4gICAgdGV4dE1heExlbmd0aDogXCJOZXphZMOhdmFqdGUgdmlhYyBuZcW+IHswfSB6bmFrKC15Ly1vdikuXCIsXG4gICAgdGV4dE1pbk1heExlbmd0aDogXCJaYWRhanRlIGFzcG/FiCB7MH0gYSBuaWUgdmlhYyBuZcW+IHsxfSB6bmFreSgtb3YpLlwiLFxuICAgIG1pblJvd0NvdW50RXJyb3I6IFwiVnlwbMWIdGUgYXNwb8WIIHswfSByaWFkb2soLXkvLW92KS5cIixcbiAgICBtaW5TZWxlY3RFcnJvcjogXCJWeWJlcnRlIGFzcG/FiCB7MH0gdmFyaWFudCgteS8tb3YpLlwiLFxuICAgIG1heFNlbGVjdEVycm9yOiBcIk5ldnliZXJhanRlIHZpYWMgbmXFviB7MH0gdmFyaWFudCgteS8tb3YpLlwiLFxuICAgIG51bWVyaWNNaW5NYXg6IFwi4oCeezB94oCcIG3DoSBiecWlIG1pbmltw6FsbmUgezF9IGEgbWF4aW3DoWxuZSB7Mn1cIixcbiAgICBudW1lcmljTWluOiBcIuKAnnswfeKAnCBtw6EgYnnFpSBtaW5pbcOhbG5lIHsxfVwiLFxuICAgIG51bWVyaWNNYXg6IFwi4oCeezB94oCcIG3DoSBiecWlIG1heGltw6FsbmUgezF9XCIsXG4gICAgaW52YWxpZEVtYWlsOiBcIlphZGFqdGUgcGxhdG7DuiBlLW1haWxvdsO6IGFkcmVzdS5cIixcbiAgICBpbnZhbGlkRXhwcmVzc2lvbjogXCJWw71yYXo6IHswfSBtw6EgdnLDoXRpxaUgaG9kbm90dSDigJ50cnVl4oCcLlwiLFxuICAgIHVybFJlcXVlc3RFcnJvcjogXCJQb8W+aWFkYXZreSB2csOhdGlsYSBob2Rub3R1IOKAnnswfeKAnC4gezF9XCIsXG4gICAgdXJsR2V0Q2hvaWNlc0Vycm9yOiBcIlBvxb5pYWRhdmthIHZyw6F0aWxhIHByw6F6ZG5lIMO6ZGFqZSBhbGVibyBqZSB2bGFzdG5vc8WlIOKAnmNlc3Rh4oCcIG5lc3Byw6F2bmFcIixcbiAgICBleGNlZWRNYXhTaXplOiBcIlZlxL5rb3PFpSBzw7pib3J1IG5lbcOhIHByZWtyb8SNacWlIHswfS5cIixcbiAgICBvdGhlclJlcXVpcmVkRXJyb3I6IFwiUG/FvmFkdWplIHNhIG9kb3p2YTogemFkYWp0ZSBpbsO6IGhvZG5vdHUuXCIsXG4gICAgdXBsb2FkaW5nRmlsZTogXCJTw7pib3Igc2Egb2Rvdnpkw6F2YS4gUG/EjWthanRlIG5pZWtvxL5rbyBzZWvDum5kIGEgc2vDunN0ZSB0byB6bm92YS5cIixcbiAgICBsb2FkaW5nRmlsZTogXCJOYcSNw610YW5pZS4uLlwiLFxuICAgIGNob29zZUZpbGU6IFwiVnliZXJ0ZSBzw7pib3IoLXkpLi4uXCIsXG4gICAgbm9GaWxlQ2hvc2VuOiBcIsW9aWFkbnkgdnlicmF0w70gc8O6Ym9yXCIsXG4gICAgZmlsZURyYWdBcmVhUGxhY2Vob2xkZXI6IFwiUHJlc3XFiHRlIHPDumJvciBzZW0gYWxlYm8ga2xpa25pdGUgbmEgbmFzbGVkdWrDumNlIHRsYcSNaWRsbyBhIG5hxI3DrXRhanRlIHPDumJvci5cIixcbiAgICBjb25maXJtRGVsZXRlOiBcIkNoY2V0ZSB6w6F6bmFtIG9kc3Ryw6FuacWlP1wiLFxuICAgIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwiVMOhdG8gaG9kbm90YSBtw6EgYnnFpSBqZWRpbmXEjW7DoS5cIixcbiAgICBhZGRDb2x1bW46IFwiUHJpZGHFpSBzdMS6cGVjXCIsXG4gICAgYWRkUm93OiBcIlByaWRhxaUgcmlhZG9rXCIsXG4gICAgcmVtb3ZlUm93OiBcIk9kc3Ryw6FuacWlXCIsXG4gICAgZW1wdHlSb3dzVGV4dDogXCJLIGRpc3BvesOtY2lpIG5pZSBzw7ogxb5pYWRuZSByaWFka3kuXCIsXG4gICAgYWRkUGFuZWw6IFwiUHJpZGHFpSBub3bDqVwiLFxuICAgIHJlbW92ZVBhbmVsOiBcIk9kc3Ryw6FuacWlXCIsXG4gICAgY2hvaWNlc19JdGVtOiBcInBvbG/FvmthXCIsXG4gICAgbWF0cml4X2NvbHVtbjogXCJTdMS6cGVjXCIsXG4gICAgbWF0cml4X3JvdzogXCJSaWFkb2tcIixcbiAgICBtdWx0aXBsZXRleHRfaXRlbW5hbWU6IFwidGV4dFwiLFxuICAgIHNhdmluZ0RhdGE6IFwiVsO9c2xlZGt5IHNhIHVrbGFkYWrDuiBuYSBzZXJ2ZXIuLi5cIixcbiAgICBzYXZpbmdEYXRhRXJyb3I6IFwiViBkw7RzbGVka3UgY2h5Ynkgc2EgbmVwb2RhcmlsbyB2w71zbGVka3kgdWxvxb5pxaUuXCIsXG4gICAgc2F2aW5nRGF0YVN1Y2Nlc3M6IFwiVsO9c2xlZGt5IHNhIMO6c3BlxaFuZSB1bG/FvmlsaS5cIixcbiAgICBzYXZlQWdhaW5CdXR0b246IFwiU2vDunN0ZSB0byB6bm92YVwiLFxuICAgIHRpbWVyTWluOiBcIm1pblwiLFxuICAgIHRpbWVyU2VjOiBcInNcIixcbiAgICB0aW1lclNwZW50QWxsOiBcIk5hIHRlanRvIHN0csOhbmtlIHN0ZSBzdHLDoXZpbGkgezB9IGEgY2Vsa292byB7MX0uXCIsXG4gICAgdGltZXJTcGVudFBhZ2U6IFwiTmEgdGVqdG8gc3Ryw6Fua2Ugc3RlIHN0csOhdmlsaSB7MH0uXCIsXG4gICAgdGltZXJTcGVudFN1cnZleTogXCJDZWxrb3ZvIHN0ZSBzdHLDoXZpbGkgezB9LlwiLFxuICAgIHRpbWVyTGltaXRBbGw6IFwiTmEgdGVqdG8gc3Ryw6Fua2Ugc3RlIHN0csOhdmlsaSB7MH0geiB7MX0gYSBjZWxrb3ZvIHsyfSB6IHszfS5cIixcbiAgICB0aW1lckxpbWl0UGFnZTogXCJOYSB0ZWp0byBzdHLDoW5rZSBzdGUgc3Ryw6F2aWxpIHswfSB6IHsxfS5cIixcbiAgICB0aW1lckxpbWl0U3VydmV5OiBcIkNlbGtvdm8gc3RlIHN0csOhdmlsaSB7MH0geiB7MX0uXCIsXG4gICAgY2xlYXJDYXB0aW9uOiBcIlZ5bWF6YcWlXCIsXG4gICAgc2lnbmF0dXJlUGxhY2VIb2xkZXI6IFwiUG9kcMOtc2HFpSB0dVwiLFxuICAgIGNob29zZUZpbGVDYXB0aW9uOiBcIlZ5YnJhxaUgc8O6Ym9yXCIsXG4gICAgdGFrZVBob3RvQ2FwdGlvbjogXCJPZGZvdGnFpVwiLFxuICAgIGNhbWVyYVBsYWNlSG9sZGVyOiBcIktsaWtudXTDrW0gbmEgdGxhxI1pZGxvIG5pxb7FoWllIG5hc27DrW1hdGUgZm90b2dyYWZpdSBwb21vY291IGZvdG9hcGFyw6F0dS5cIixcbiAgICBmaWxlQ2FtZXJhRHJhZ0FyZWFQbGFjZUhvbGRlcjogXCJQcmVzdcWIdGUgbXnFoW91IGFsZWJvIHZ5YmVydGUgc8O6Ym9yLCBrdG9yw70gY2hjZXRlIG5haHJhxaUgYWxlYm8gbmFzbsOtbWHFpSBmb3RvZ3JhZml1IHBvbW9jb3UgZm90b2FwYXLDoXR1LlwiLFxuICAgIHJlcGxhY2VGaWxlQ2FwdGlvbjogXCJOYWhyYWRlbmllIHPDumJvcnVcIixcbiAgICByZW1vdmVGaWxlQ2FwdGlvbjogXCJPZHN0csOhbmnFpSB0ZW50byBzw7pib3JcIixcbiAgICBib29sZWFuQ2hlY2tlZExhYmVsOiBcIsOBbm9cIixcbiAgICBib29sZWFuVW5jaGVja2VkTGFiZWw6IFwiTmllXCIsXG4gICAgY29uZmlybVJlbW92ZUZpbGU6IFwiTmFvemFqIGNoY2V0ZSBvZHN0csOhbmnFpSB0ZW50byBzw7pib3I6IHswfT9cIixcbiAgICBjb25maXJtUmVtb3ZlQWxsRmlsZXM6IFwiTmFvemFqIGNoY2V0ZSBvZHN0csOhbmnFpSB2xaFldGt5IHPDumJvcnk/XCIsXG4gICAgcXVlc3Rpb25UaXRsZVBhdHRlcm5UZXh0OiBcIlRpdHVsIG90w6F6a3lcIixcbiAgICBtb2RhbENhbmNlbEJ1dHRvblRleHQ6IFwiWnJ1xaFpxaVcIixcbiAgICBtb2RhbEFwcGx5QnV0dG9uVGV4dDogXCJQb3XFvmnFpVwiLFxuICAgIGZpbHRlclN0cmluZ1BsYWNlaG9sZGVyOiBcIlZ5aMS+YWTDoXZhbmllIHDDrXNhbsOtbS4uLlwiLFxuICAgIGVtcHR5TWVzc2FnZTogXCLFvWlhZG5lIMO6ZGFqZSBuYSB6b2JyYXplbmllXCIsXG4gICAgbm9FbnRyaWVzVGV4dDogXCJLIGRpc3BvesOtY2lpIGXFoXRlIG5pZSBzw7ogxb5pYWRuZSB6YWRhbmlhLlxcbktsaWtudXTDrW0gbmEgbmFzbGVkdWrDumNlIHRsYcSNaWRsbyBwcmlkYWp0ZSBub3bDqSB6YWRhbmllLlwiLFxuICAgIG5vRW50cmllc1JlYWRvbmx5VGV4dDogXCJOaWUgc8O6IGsgZGlzcG96w61jaWkgxb5pYWRuZSB6w6F6bmFteS5cIixcbiAgICBtb3JlOiBcIlZpYWNlalwiLFxuICAgIHRhZ2JveERvbmVCdXR0b25DYXB0aW9uOiBcIk9LXCIsXG4gICAgc2VsZWN0VG9SYW5rRW1wdHlSYW5rZWRBcmVhVGV4dDogXCJWxaFldGt5IG1vxb5ub3N0aSBzw7ogem9yYWRlbsOpXCIsXG4gICAgc2VsZWN0VG9SYW5rRW1wdHlVbnJhbmtlZEFyZWFUZXh0OiBcIlByZXN1xYh0ZSBzZW0gdm/EvmJ5LCBhYnkgc3RlIGljaCB6b3JhZGlsaVwiXG59O1xuc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN1cnZleUxvY2FsaXphdGlvblwiXS5sb2NhbGVzW1wic2tcIl0gPSBzbG92YWtTdXJ2ZXlTdHJpbmdzO1xuc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN1cnZleUxvY2FsaXphdGlvblwiXS5sb2NhbGVOYW1lc1tcInNrXCJdID0gXCJzbG92ZW7EjWluYVwiO1xuLy8gVGhlIGZvbGxvd2luZyBzdHJpbmdzIGhhdmUgYmVlbiB0cmFuc2xhdGVkIGJ5IGEgbWFjaGluZSB0cmFuc2xhdGlvbiBzZXJ2aWNlXG4vLyBSZW1vdmUgdGhvc2Ugc3RyaW5ncyB0aGF0IHlvdSBoYXZlIGNvcnJlY3RlZCBtYW51YWxseVxuLy8gaW5kZXhUZXh0OiBcInswfSBvZiB7MX1cIiA9PiBcInswfSB7MX1cIlxuLy8gcGFuZWxEeW5hbWljVGFiVGV4dEZvcm1hdDogXCJQYW5lbCB7cGFuZWxJbmRleH1cIiA9PiBcIlBhbmVsIHtwYW5lbEluZGV4fVwiXG4vLyByYXRpbmdPcHRpb25zQ2FwdGlvbjogXCJTZWxlY3QuLi5cIiA9PiBcIlZ5YnJhxaUuLi5cIlxuLy8gZW1wdHlNZXNzYWdlOiBcIk5vIGRhdGEgdG8gZGlzcGxheVwiID0+IFwixb1pYWRuZSDDumRhamUgbmEgem9icmF6ZW5pZVwiXG4vLyBub0VudHJpZXNSZWFkb25seVRleHQ6IFwiVGhlcmUgYXJlIG5vIGVudHJpZXMuXCIgPT4gXCJOaWUgc8O6IGsgZGlzcG96w61jaWkgxb5pYWRuZSB6w6F6bmFteS5cIlxuLy8gbW9yZTogXCJNb3JlXCIgPT4gXCJWaWFjZWpcIlxuLy8gdGFnYm94RG9uZUJ1dHRvbkNhcHRpb246IFwiT0tcIiA9PiBcIk9LXCJcbi8vIHNlbGVjdFRvUmFua0VtcHR5UmFua2VkQXJlYVRleHQ6IFwiQWxsIGNob2ljZXMgYXJlIHJhbmtlZFwiID0+IFwiVsWhZXRreSBtb8W+bm9zdGkgc8O6IHpvcmFkZW7DqVwiXG4vLyBzZWxlY3RUb1JhbmtFbXB0eVVucmFua2VkQXJlYVRleHQ6IFwiRHJhZyBhbmQgZHJvcCBjaG9pY2VzIGhlcmUgdG8gcmFuayB0aGVtXCIgPT4gXCJQcmVzdcWIdGUgc2VtIHZvxL5ieSwgYWJ5IHN0ZSBpY2ggem9yYWRpbGlcIi8vIHRha2VQaG90b0NhcHRpb246IFwiVGFrZSBQaG90b1wiID0+IFwiT2Rmb3RpxaVcIlxuLy8gY2FtZXJhUGxhY2VIb2xkZXI6IFwiQ2xpY2sgdGhlIGJ1dHRvbiBiZWxvdyB0byB0YWtlIGEgcGhvdG8gdXNpbmcgdGhlIGNhbWVyYS5cIiA9PiBcIktsaWtudXTDrW0gbmEgdGxhxI1pZGxvIG5pxb7FoWllIG5hc27DrW1hdGUgZm90b2dyYWZpdSBwb21vY291IGZvdG9hcGFyw6F0dS5cIlxuLy8gZmlsZUNhbWVyYURyYWdBcmVhUGxhY2VIb2xkZXI6IFwiRHJhZyBhbmQgZHJvcCBvciBzZWxlY3QgYSBmaWxlIHRvIHVwbG9hZCBvciB0YWtlIGEgcGhvdG8gdXNpbmcgdGhlIGNhbWVyYS5cIiA9PiBcIlByZXN1xYh0ZSBtecWhb3UgYWxlYm8gdnliZXJ0ZSBzw7pib3IsIGt0b3LDvSBjaGNldGUgbmFocmHFpSBhbGVibyBuYXNuw61tYcWlIGZvdG9ncmFmaXUgcG9tb2NvdSBmb3RvYXBhcsOhdHUuXCJcbi8vIHJlcGxhY2VGaWxlQ2FwdGlvbjogXCJSZXBsYWNlIGZpbGVcIiA9PiBcIk5haHJhZGVuaWUgc8O6Ym9ydVwiXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvbG9jYWxpemF0aW9uL3NwYW5pc2gudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvbG9jYWxpemF0aW9uL3NwYW5pc2gudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogc3BhbmlzaFN1cnZleVN0cmluZ3MgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic3BhbmlzaFN1cnZleVN0cmluZ3NcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzcGFuaXNoU3VydmV5U3RyaW5nczsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHN1cnZleS1jb3JlICovIFwiLi9zcmMvZW50cmllcy9jb3JlLnRzXCIpO1xuXG52YXIgc3BhbmlzaFN1cnZleVN0cmluZ3MgPSB7XG4gICAgcGFnZVByZXZUZXh0OiBcIkFudGVyaW9yXCIsXG4gICAgcGFnZU5leHRUZXh0OiBcIlNpZ3VpZW50ZVwiLFxuICAgIGNvbXBsZXRlVGV4dDogXCJDb21wbGV0YXJcIixcbiAgICBwcmV2aWV3VGV4dDogXCJWaXN0YSBwcmV2aWFcIixcbiAgICBlZGl0VGV4dDogXCJFZGl0YVwiLFxuICAgIHN0YXJ0U3VydmV5VGV4dDogXCJDb21pZW56YVwiLFxuICAgIG90aGVySXRlbVRleHQ6IFwiT3RybyAoZGVzY3JpYmEpXCIsXG4gICAgbm9uZUl0ZW1UZXh0OiBcIk5pbmd1bm9cIixcbiAgICBzZWxlY3RBbGxJdGVtVGV4dDogXCJTZWxlY2Npb25hciB0b2RvXCIsXG4gICAgcHJvZ3Jlc3NUZXh0OiBcIlDDoWdpbmEgezB9IGRlIHsxfVwiLFxuICAgIGluZGV4VGV4dDogXCJ7MH0gZGUgezF9XCIsXG4gICAgcGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0OiBcIlJlZ2lzdHJvIHswfSBkZSB7MX1cIixcbiAgICBwYW5lbER5bmFtaWNUYWJUZXh0Rm9ybWF0OiBcIlBhbmVsIHtwYW5lbEluZGV4fVwiLFxuICAgIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCJSZXNwb25kacOzIGEgezB9L3sxfSBwcmVndW50YXNcIixcbiAgICBlbXB0eVN1cnZleTogXCJObyBoYXkgcMOhZ2luYSB2aXNpYmxlIG8gcHJlZ3VudGEgZW4gbGEgZW5jdWVzdGEuXCIsXG4gICAgY29tcGxldGluZ1N1cnZleTogXCLCoUdyYWNpYXMgcG9yIGNvbXBsZXRhciBsYSBlbmN1ZXN0YSFcIixcbiAgICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOiBcIk51ZXN0cm9zIHJlZ2lzdHJvcyBtdWVzdHJhbiBxdWUgeWEgaGEgY29tcGxldGFkbyBlc3RhIGVuY3Vlc3RhLlwiLFxuICAgIGxvYWRpbmdTdXJ2ZXk6IFwiTGEgZW5jdWVzdGEgZXN0w6EgY2FyZ2FuZG8uLi5cIixcbiAgICBwbGFjZWhvbGRlcjogXCJTZWxlY2Npb25lLi4uXCIsXG4gICAgcmF0aW5nT3B0aW9uc0NhcHRpb246IFwiVG9jYSBhcXXDrSBwYXJhIGNhbGlmaWNhci4uLlwiLFxuICAgIHZhbHVlOiBcInZhbG9yXCIsXG4gICAgcmVxdWlyZWRFcnJvcjogXCJQb3IgZmF2b3IgY29udGVzdGUgbGEgcHJlZ3VudGEuXCIsXG4gICAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwiUG9yIGZhdm9yLCByZXNwb25kYSBhbCBtZW5vcyB1bmEgcHJlZ3VudGEuXCIsXG4gICAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCJQb3IgZmF2b3IgY29udGVzdGUgbGFzIHByZWd1bnRhcyBlbiBjYWRhIGhpbGVyYS5cIixcbiAgICBudW1lcmljRXJyb3I6IFwiTGEgZXN0aW1hY2nDs24gZGViZSBzZXIgbnVtw6lyaWNhLlwiLFxuICAgIG1pbkVycm9yOiBcIkxhIGVzdGltYWNpw7NuIG5vIGRlYmUgc2VyIG1lbm9yIHF1ZSB7MH1cIixcbiAgICBtYXhFcnJvcjogXCJMYSBlc3RpbWFjacOzbiBubyBkZWJlIHNlciBtYXlvciBxdWUgezB9XCIsXG4gICAgdGV4dE1pbkxlbmd0aDogXCJQb3IgZmF2b3IgZW50cmUgcG9yIGxvIG1lbm9zIHswfSBzw61tYm9sb3MuXCIsXG4gICAgdGV4dE1heExlbmd0aDogXCJQb3IgZmF2b3IgZW50cmUgbWVub3MgZGUgezB9IHPDrW1ib2xvcy5cIixcbiAgICB0ZXh0TWluTWF4TGVuZ3RoOiBcIlBvciBmYXZvciBlbnRyZSBtw6FzIGRlIHswfSB5IG1lbm9zIGRlIHsxfSBzw61tYm9sb3MuXCIsXG4gICAgbWluUm93Q291bnRFcnJvcjogXCJQb3IgZmF2b3IgbGxlbmUgcG9yIGxvIG1lbm9zIHswfSBoaWxlcmFzLlwiLFxuICAgIG1pblNlbGVjdEVycm9yOiBcIlBvciBmYXZvciBzZWxlY2Npb25lIHBvciBsbyBtZW5vcyB7MH0gdmFyaWFudGVzLlwiLFxuICAgIG1heFNlbGVjdEVycm9yOiBcIlBvciBmYXZvciBzZWxlY2Npb25lIG5vIG3DoXMgZGUgezB9IHZhcmlhbnRlcy5cIixcbiAgICBudW1lcmljTWluTWF4OiBcIkVsICd7MH0nIGRlYmUgZGUgc2VyIGlndWFsIG8gbcOhcyBkZSB7MX0geSBpZ3VhbCBvIG1lbm9zIGRlIHsyfVwiLFxuICAgIG51bWVyaWNNaW46IFwiRWwgJ3swfScgZGViZSBzZXIgaWd1YWwgbyBtw6FzIGRlIHsxfVwiLFxuICAgIG51bWVyaWNNYXg6IFwiRWwgJ3swfScgZGViZSBzZXIgaWd1YWwgbyBtZW5vcyBkZSB7MX1cIixcbiAgICBpbnZhbGlkRW1haWw6IFwiUG9yIGZhdm9yIGFncmVndWUgdW4gY29ycmVvIGVsZWN0csOzbmljbyB2w6FsaWRvLlwiLFxuICAgIGludmFsaWRFeHByZXNzaW9uOiBcIkxhIGV4cHJlc2nDs246IHswfSBkZWJlcsOtYSBkZXZvbHZlciAndmVyZGFkZXJvJy5cIixcbiAgICB1cmxSZXF1ZXN0RXJyb3I6IFwiTGEgc29saWNpdHVkIHJlZ3Jlc8OzIGVycm9yICd7MH0nLiB7MX1cIixcbiAgICB1cmxHZXRDaG9pY2VzRXJyb3I6IFwiTGEgc29saWNpdHVkIHJlZ3Jlc8OzIHZhY8OtbyBkZSBkYXRhIG8gbGEgcHJvcGllZGFkICd0cmF5ZWN0b3JpYScgbm8gZXMgY29ycmVjdGFcIixcbiAgICBleGNlZWRNYXhTaXplOiBcIkVsIHRhbWHDsW8gZGVsIGFyY2hpdm8gbm8gZGViZSBkZSBleGNlZGVyIHswfS5cIixcbiAgICBvdGhlclJlcXVpcmVkRXJyb3I6IFwiUG9yIGZhdm9yIGFncmVndWUgbGEgb3RyYSBlc3RpbWFjacOzbi5cIixcbiAgICB1cGxvYWRpbmdGaWxlOiBcIlN1IGFyY2hpdm8gc2UgZXN0w6Egc3ViaWVuZG8uIFBvciBmYXZvciBlc3BlcmUgdW5vcyBzZWd1bmRvcyBlIGludGVudGUgZGUgbnVldm8uXCIsXG4gICAgbG9hZGluZ0ZpbGU6IFwiQ2FyZ2FuZG8uLi5cIixcbiAgICBjaG9vc2VGaWxlOiBcIkVsaWphIGFyY2hpdm8ocykuLi5cIixcbiAgICBub0ZpbGVDaG9zZW46IFwiTm8gc2UgaGEgZWxlZ2lkbyBuaW5nw7puIGFyY2hpdm9cIixcbiAgICBmaWxlRHJhZ0FyZWFQbGFjZWhvbGRlcjogXCJTdWVsdGUgdW4gYXJjaGl2byBhcXXDrSBvIGhhZ2EgY2xpYyBlbiBlbCBib3TDs24gZGUgYWJham8gcGFyYSBjYXJnYXIgZWwgYXJjaGl2b1wiLFxuICAgIGNvbmZpcm1EZWxldGU6IFwiwr9RdWllcmVzIGJvcnJhciBlbCByZWdpc3Rybz9cIixcbiAgICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcIkVzdGUgdmFsb3IgZGViZSBzZXIgw7puaWNvLlwiLFxuICAgIGFkZENvbHVtbjogXCJBw7FhZGlyIGNvbHVtbmFcIixcbiAgICBhZGRSb3c6IFwiQWdyZWd1ZSB1bmEgaGlsZXJhXCIsXG4gICAgcmVtb3ZlUm93OiBcIkVsaW1pbmFyIHVuYSBoaWxlcmFcIixcbiAgICBlbXB0eVJvd3NUZXh0OiBcIk5vIGhheSBoaWxlcmFzLlwiLFxuICAgIGFkZFBhbmVsOiBcIkHDsWFkaXIgbnVldm9cIixcbiAgICByZW1vdmVQYW5lbDogXCJSZXRpcmVcIixcbiAgICBjaG9pY2VzX0l0ZW06IFwiYXJ0w61jdWxvXCIsXG4gICAgbWF0cml4X2NvbHVtbjogXCJDb2x1bW5hXCIsXG4gICAgbWF0cml4X3JvdzogXCJIaWxlcmFcIixcbiAgICBtdWx0aXBsZXRleHRfaXRlbW5hbWU6IFwidGV4dG9cIixcbiAgICBzYXZpbmdEYXRhOiBcIkxvcyByZXN1bHRhZG9zIHNlIGVzdMOhbiBndWFyZGFuZG8gZW4gZWwgc2Vydmlkb3IuLi5cIixcbiAgICBzYXZpbmdEYXRhRXJyb3I6IFwiTG9zIHJlc3VsdGFkb3Mgc2UgZXN0w6FuIGd1YXJkYW5kbyBlbiBlbCBzZXJ2aWRvci4uLlwiLFxuICAgIHNhdmluZ0RhdGFTdWNjZXNzOiBcIsKhTG9zIHJlc3VsdGFkb3Mgc2UgZ3VhcmRhcm9uIGNvbiDDqXhpdG8hXCIsXG4gICAgc2F2ZUFnYWluQnV0dG9uOiBcIkludMOpbnRhbG8gZGUgbnVldm8uXCIsXG4gICAgdGltZXJNaW46IFwibWluXCIsXG4gICAgdGltZXJTZWM6IFwic2VjXCIsXG4gICAgdGltZXJTcGVudEFsbDogXCJIYXMgZ2FzdGFkbyB7MH0gZW4gZXN0YSBww6FnaW5hIHkgezF9IGVuIHRvdGFsLlwiLFxuICAgIHRpbWVyU3BlbnRQYWdlOiBcIlVzdGVkIGhhIHBhc2FkbyB7MH0gZW4gZXN0YSBww6FnaW5hLlwiLFxuICAgIHRpbWVyU3BlbnRTdXJ2ZXk6IFwiSGFzIGdhc3RhZG8gZW4gdG90YWwuXCIsXG4gICAgdGltZXJMaW1pdEFsbDogXCJIYXMgZ2FzdGFkbyB7MH0gZGUgezF9IGVuIGVzdGEgcMOhZ2luYSB5IHsyfSBkZSB7M30gZW4gdG90YWwuXCIsXG4gICAgdGltZXJMaW1pdFBhZ2U6IFwiSGFzIGdhc3RhZG8gezB9IGRlIHsxfSBlbiBlc3RhIHDDoWdpbmEuXCIsXG4gICAgdGltZXJMaW1pdFN1cnZleTogXCJVc3RlZCBoYSBnYXN0YWRvIHswfSBkZSB7MX0gZW4gdG90YWwuXCIsXG4gICAgY2xlYXJDYXB0aW9uOiBcIkRlc3BlamVuXCIsXG4gICAgc2lnbmF0dXJlUGxhY2VIb2xkZXI6IFwiRmlybWEgYXF1aVwiLFxuICAgIGNob29zZUZpbGVDYXB0aW9uOiBcIkVsaWphIGVsIGFyY2hpdm9cIixcbiAgICB0YWtlUGhvdG9DYXB0aW9uOiBcIlRvbWFyIGZvdG9cIixcbiAgICBjYW1lcmFQbGFjZUhvbGRlcjogXCJIYWdhIGNsaWMgZW4gZWwgYm90w7NuIGRlIGFiYWpvIHBhcmEgdG9tYXIgdW5hIGZvdG8gY29uIGxhIGPDoW1hcmEuXCIsXG4gICAgZmlsZUNhbWVyYURyYWdBcmVhUGxhY2VIb2xkZXI6IFwiQXJyYXN0cmUgeSBzdWVsdGUgbyBzZWxlY2Npb25lIHVuIGFyY2hpdm8gcGFyYSBjYXJnYXIgbyB0b21hciB1bmEgZm90byBjb24gbGEgY8OhbWFyYS5cIixcbiAgICByZXBsYWNlRmlsZUNhcHRpb246IFwiUmVlbXBsYXphciBhcmNoaXZvXCIsXG4gICAgcmVtb3ZlRmlsZUNhcHRpb246IFwiRWxpbWluYSBlc3RlIGFyY2hpdm9cIixcbiAgICBib29sZWFuQ2hlY2tlZExhYmVsOiBcIlPDrVwiLFxuICAgIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCJOb1wiLFxuICAgIGNvbmZpcm1SZW1vdmVGaWxlOiBcIsK/RXN0w6FzIHNlZ3VybyBkZSBxdWUgcXVpZXJlcyBlbGltaW5hciBlc3RlIGFyY2hpdm86IHswfT9cIixcbiAgICBjb25maXJtUmVtb3ZlQWxsRmlsZXM6IFwiwr9Fc3TDoXMgc2VndXJvIGRlIHF1ZSBxdWllcmVzIGVsaW1pbmFyIHRvZG9zIGxvcyBhcmNoaXZvcz9cIixcbiAgICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwiVMOtdHVsbyBkZSBsYSBwcmVndW50YVwiLFxuICAgIG1vZGFsQ2FuY2VsQnV0dG9uVGV4dDogXCJBbnVsYXJcIixcbiAgICBtb2RhbEFwcGx5QnV0dG9uVGV4dDogXCJBcGxpY2FyXCIsXG4gICAgZmlsdGVyU3RyaW5nUGxhY2Vob2xkZXI6IFwiRXNjcmliZSBwYXJhIGJ1c2Nhci4uLlwiLFxuICAgIGVtcHR5TWVzc2FnZTogXCJObyBoYXkgZGF0b3MgcGFyYSBtb3N0cmFyXCIsXG4gICAgbm9FbnRyaWVzVGV4dDogXCJBw7puIG5vIGhheSBlbnRyYWRhcy5cXG5IYWdhIGNsaWMgZW4gZWwgYm90w7NuIGRlIGFiYWpvIHBhcmEgYWdyZWdhciB1bmEgbnVldmEgZW50cmFkYS5cIixcbiAgICBub0VudHJpZXNSZWFkb25seVRleHQ6IFwiTm8gaGF5IGVudHJhZGFzLlwiLFxuICAgIG1vcmU6IFwiTcOhc1wiLFxuICAgIHRhZ2JveERvbmVCdXR0b25DYXB0aW9uOiBcIkRlIGFjdWVyZG9cIixcbiAgICBzZWxlY3RUb1JhbmtFbXB0eVJhbmtlZEFyZWFUZXh0OiBcIlRvZGFzIGxhcyBvcGNpb25lcyBlc3TDoW4gY2xhc2lmaWNhZGFzXCIsXG4gICAgc2VsZWN0VG9SYW5rRW1wdHlVbnJhbmtlZEFyZWFUZXh0OiBcIkFycmFzdHJhIHkgc3VlbHRhIG9wY2lvbmVzIGFxdcOtIHBhcmEgY2xhc2lmaWNhcmxhc1wiXG59O1xuc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN1cnZleUxvY2FsaXphdGlvblwiXS5sb2NhbGVzW1wiZXNcIl0gPSBzcGFuaXNoU3VydmV5U3RyaW5ncztcbnN1cnZleV9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdXJ2ZXlMb2NhbGl6YXRpb25cIl0ubG9jYWxlTmFtZXNbXCJlc1wiXSA9IFwiZXNwYcOxb2xcIjtcbi8vIFRoZSBmb2xsb3dpbmcgc3RyaW5ncyBoYXZlIGJlZW4gdHJhbnNsYXRlZCBieSBhIG1hY2hpbmUgdHJhbnNsYXRpb24gc2VydmljZVxuLy8gUmVtb3ZlIHRob3NlIHN0cmluZ3MgdGhhdCB5b3UgaGF2ZSBjb3JyZWN0ZWQgbWFudWFsbHlcbi8vIHBhbmVsRHluYW1pY1RhYlRleHRGb3JtYXQ6IFwiUGFuZWwge3BhbmVsSW5kZXh9XCIgPT4gXCJQYW5lbCB7cGFuZWxJbmRleH1cIlxuLy8gZW1wdHlNZXNzYWdlOiBcIk5vIGRhdGEgdG8gZGlzcGxheVwiID0+IFwiTm8gaGF5IGRhdG9zIHBhcmEgbW9zdHJhclwiXG4vLyBub0VudHJpZXNSZWFkb25seVRleHQ6IFwiVGhlcmUgYXJlIG5vIGVudHJpZXMuXCIgPT4gXCJObyBoYXkgZW50cmFkYXMuXCJcbi8vIG1vcmU6IFwiTW9yZVwiID0+IFwiTcOhc1wiXG4vLyB0YWdib3hEb25lQnV0dG9uQ2FwdGlvbjogXCJPS1wiID0+IFwiRGUgYWN1ZXJkb1wiXG4vLyBzZWxlY3RUb1JhbmtFbXB0eVJhbmtlZEFyZWFUZXh0OiBcIkFsbCBjaG9pY2VzIGFyZSByYW5rZWRcIiA9PiBcIlRvZGFzIGxhcyBvcGNpb25lcyBlc3TDoW4gY2xhc2lmaWNhZGFzXCJcbi8vIHNlbGVjdFRvUmFua0VtcHR5VW5yYW5rZWRBcmVhVGV4dDogXCJEcmFnIGFuZCBkcm9wIGNob2ljZXMgaGVyZSB0byByYW5rIHRoZW1cIiA9PiBcIkFycmFzdHJhIHkgc3VlbHRhIG9wY2lvbmVzIGFxdcOtIHBhcmEgY2xhc2lmaWNhcmxhc1wiLy8gdGFrZVBob3RvQ2FwdGlvbjogXCJUYWtlIFBob3RvXCIgPT4gXCJUb21hciBmb3RvXCJcbi8vIGNhbWVyYVBsYWNlSG9sZGVyOiBcIkNsaWNrIHRoZSBidXR0b24gYmVsb3cgdG8gdGFrZSBhIHBob3RvIHVzaW5nIHRoZSBjYW1lcmEuXCIgPT4gXCJIYWdhIGNsaWMgZW4gZWwgYm90w7NuIGRlIGFiYWpvIHBhcmEgdG9tYXIgdW5hIGZvdG8gY29uIGxhIGPDoW1hcmEuXCJcbi8vIGZpbGVDYW1lcmFEcmFnQXJlYVBsYWNlSG9sZGVyOiBcIkRyYWcgYW5kIGRyb3Agb3Igc2VsZWN0IGEgZmlsZSB0byB1cGxvYWQgb3IgdGFrZSBhIHBob3RvIHVzaW5nIHRoZSBjYW1lcmEuXCIgPT4gXCJBcnJhc3RyZSB5IHN1ZWx0ZSBvIHNlbGVjY2lvbmUgdW4gYXJjaGl2byBwYXJhIGNhcmdhciBvIHRvbWFyIHVuYSBmb3RvIGNvbiBsYSBjw6FtYXJhLlwiXG4vLyByZXBsYWNlRmlsZUNhcHRpb246IFwiUmVwbGFjZSBmaWxlXCIgPT4gXCJSZWVtcGxhemFyIGFyY2hpdm9cIlxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL2xvY2FsaXphdGlvbi9zd2FoaWxpLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL2xvY2FsaXphdGlvbi9zd2FoaWxpLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHN3YWhpbGlTdHJpbmdzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN3YWhpbGlTdHJpbmdzXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc3dhaGlsaVN0cmluZ3M7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHN1cnZleV9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBzdXJ2ZXktY29yZSAqLyBcIi4vc3JjL2VudHJpZXMvY29yZS50c1wiKTtcblxudmFyIHN3YWhpbGlTdHJpbmdzID0ge1xuICAgIHBhZ2VQcmV2VGV4dDogXCJJbGl5b3Rhbmd1bGlhXCIsXG4gICAgcGFnZU5leHRUZXh0OiBcIklmdWF0YXlvXCIsXG4gICAgY29tcGxldGVUZXh0OiBcIkthbWlsaVwiLFxuICAgIHByZXZpZXdUZXh0OiBcIkhha2lraVwiLFxuICAgIGVkaXRUZXh0OiBcIkhhcmlyaVwiLFxuICAgIHN0YXJ0U3VydmV5VGV4dDogXCJBbnphXCIsXG4gICAgb3RoZXJJdGVtVGV4dDogXCJOeWluZ2luZSAoZWxlemEpXCIsXG4gICAgbm9uZUl0ZW1UZXh0OiBcIkhha3VuYVwiLFxuICAgIHNlbGVjdEFsbEl0ZW1UZXh0OiBcIkNoYWd1YSBab3RlXCIsXG4gICAgcHJvZ3Jlc3NUZXh0OiBcIlVrdXJhc2EgezB9IHdhIHsxfVwiLFxuICAgIGluZGV4VGV4dDogXCJ7MH0geWEgezF9XCIsXG4gICAgcGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0OiBcIlJla29kaSB7MH0geWEgezF9XCIsXG4gICAgcGFuZWxEeW5hbWljVGFiVGV4dEZvcm1hdDogXCJQYW5lbCB7cGFuZWxJbmRleH1cIixcbiAgICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwiWWFsaXlvamliaXdhIHswfS97MX0gbWFzd2FsaVwiLFxuICAgIGVtcHR5U3VydmV5OiBcIkhha3VuYSB1a3VyYXNhIHVuYW9vbmVrYW5hIGF1IHN3YWxpIGthdGlrYSB1dGFmaXRpLlwiLFxuICAgIGNvbXBsZXRpbmdTdXJ2ZXk6IFwiQXNhbnRpIGt3YSBrdWthbWlsaXNoYSB1dGFmaXRpIVwiLFxuICAgIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6IFwiUmVjb2RpIHpldHUgemluYXR1b255ZXNoYSB0YXlhcmkgdW1la2FtaWxpc2hhIHV0YWZpdGkuXCIsXG4gICAgbG9hZGluZ1N1cnZleTogXCJUdW5hYW5kYWEgdXRhZml0aS4uLlwiLFxuICAgIHBsYWNlaG9sZGVyOiBcIkNoYWd1YS4uLlwiLFxuICAgIHJhdGluZ09wdGlvbnNDYXB0aW9uOiBcIlRldWEuLi5cIixcbiAgICB2YWx1ZTogXCJ0aGFtYW5pXCIsXG4gICAgcmVxdWlyZWRFcnJvcjogXCJUYWZhZGhhbGkgamlidSBoaWxpIHN3YWxpLlwiLFxuICAgIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcIlRhZmFkaGFsaSBqaWJ1IHN3YWxpIGFuZ2FsYXUgbW9qYS5cIixcbiAgICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIlRhZmFkaGFsaSBqaWJ1IG1hc3dhbGkga2F0aWthIHNhZnUgem90ZS5cIixcbiAgICBudW1lcmljRXJyb3I6IFwiVGhhbWFuaSBpbmFwYXN3YSBrdXdhIHlhIG5hbWJhcmkuXCIsXG4gICAgbWluRXJyb3I6IFwiVGhhbWFuaSBoYWlwYXN3aSBrdXdhIGNoaW5pIHlhIHswfVwiLFxuICAgIG1heEVycm9yOiBcIlRoYW1hbmkgaGFpcGFzd2kga3V3YSBrdWJ3YSBrdWxpa28gezB9XCIsXG4gICAgdGV4dE1pbkxlbmd0aDogXCJUYWZhZGhhbGkgaW5naXphIGFuZ2FsYXV7MH0gaHVzaWthLlwiLFxuICAgIHRleHRNYXhMZW5ndGg6IFwiVGFmYWRoYWxpIGluZ2l6YSBpc2lvemlkaSB7MH0gaHVzaWthLlwiLFxuICAgIHRleHRNaW5NYXhMZW5ndGg6IFwiVGFmYWRoYWxpIGluZ2l6YSBraXdhbmdvIHphaWRpIHlhIHswfSBuYSBraXNpY2hvcHVuZ3VhIHsxfSBodXNpa2EuXCIsXG4gICAgbWluUm93Q291bnRFcnJvcjogXCJUYWZhZGhhbGkgamF6YSBpc2lvcHVuZ3VhIHswfSBzYWZ1LlwiLFxuICAgIG1pblNlbGVjdEVycm9yOiBcIlRhZmFkaGFsaSBjaGFndWEgYW5nYWxhdSB7MH0gbGFoYWphLlwiLFxuICAgIG1heFNlbGVjdEVycm9yOiBcIlRhZmFkaGFsaSBjaGFuZ3VhIGlzaW96aWRpIHswfSBsYWhhamEuXCIsXG4gICAgbnVtZXJpY01pbk1heDogXCIgJ3swfScgaW5hcGFzd2Ega3V3YSBzYXdhIGF1IHphaWRpIHlhIHsxfSBuYSBzYXdhIGF1IGNoaW5pIHlhIHsyfVwiLFxuICAgIG51bWVyaWNNaW46IFwiICd7MH0naW5hcGFzd2Ega3V3YSBzYXdhIGF1IHphaWRpIHlhIHsxfVwiLFxuICAgIG51bWVyaWNNYXg6IFwiICd7MH0naW5hcGFzd2Ega3V3YSBzYXdhIGF1IGNoaW5pIHlhIHsxfVwiLFxuICAgIGludmFsaWRFbWFpbDogXCJUYWZhZGhhbGkgaW5naXphIGFud2FuaSBoYWxhbGkgeWEgYmFydWEtcGVwZS5cIixcbiAgICBpbnZhbGlkRXhwcmVzc2lvbjogXCJVc2VtaTp7MH0gaW5hcGFzd2Ega3VydWRpICdrd2VsaScuXCIsXG4gICAgdXJsUmVxdWVzdEVycm9yOiBcIk9tYmkgbGluYSBrb3NhICd7MH0nLiB7MX1cIixcbiAgICB1cmxHZXRDaG9pY2VzRXJyb3I6IFwiT21iaSBsaWxpcnVkaXNoYSBkYXRhIHR1cHUgYXUgdGhlICdwYXRoJyBtYWxpIHlhIG5qaWEgc2lvIHNhaGloaVwiLFxuICAgIGV4Y2VlZE1heFNpemU6IFwiU2FpemkgeWEgZmFpbGkgaGFpcGFzd2kga3V6aWRpIHswfS5cIixcbiAgICBvdGhlclJlcXVpcmVkRXJyb3I6IFwiVGFmYWRoYWxpIGluZ2l6YSB0aGFtYW5pIG55aW5naW5lLlwiLFxuICAgIHVwbG9hZGluZ0ZpbGU6IFwiRmFpbGkgeWFrbyBpbmFwYWtpYS5UYWZhZGhhbGkgc3ViaXJpIHNla3VuZGUga2FkaGFhIG5hIHVqYXJpYnUgdGVuYS5cIixcbiAgICBsb2FkaW5nRmlsZTogXCJJbmFwYWtpYS4uLlwiLFxuICAgIGNob29zZUZpbGU6IFwiQ2hhZ3VhIGZhaWxpLi4uXCIsXG4gICAgbm9GaWxlQ2hvc2VuOiBcIkh1amFjaGFndWEgZmFpbGlcIixcbiAgICBmaWxlRHJhZ0FyZWFQbGFjZWhvbGRlcjogXCJCdXJ1dGEgbmEgdWRvbmRvc2hlIGZhaWxpIGhhcGEgYXUgYm9meWEga2l0dWZlIGhhcGEgY2hpbmkgbmEgdWNoYWd1ZSBmYWlsaSB5YSBrdXBha2lhLlwiLFxuICAgIGNvbmZpcm1EZWxldGU6IFwiSmUhIFVuYXRha2Ega3VmdXRhIHJla29kaT9cIixcbiAgICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcIlRoYW1hbmkgaGlpIGluYXBhc3dhIGt1d2EgeWEga2lwZWtlZS5cIixcbiAgICBhZGRDb2x1bW46IFwiT25nZXphIEtvbGFtdVwiLFxuICAgIGFkZFJvdzogXCJPbmdlemEgc2FmdVwiLFxuICAgIHJlbW92ZVJvdzogXCJUb2FcIixcbiAgICBlbXB0eVJvd3NUZXh0OiBcIkhha3VuYSBzYWZ1LlwiLFxuICAgIGFkZFBhbmVsOiBcIk9uZ2V6YSBtcHlhXCIsXG4gICAgcmVtb3ZlUGFuZWw6IFwiVG9hXCIsXG4gICAgY2hvaWNlc19JdGVtOiBcImtpdHVcIixcbiAgICBtYXRyaXhfY29sdW1uOiBcIktvbGFtdVwiLFxuICAgIG1hdHJpeF9yb3c6IFwiU2FmdVwiLFxuICAgIG11bHRpcGxldGV4dF9pdGVtbmFtZTogXCJVanVtYmVcIixcbiAgICBzYXZpbmdEYXRhOiBcIk1hdG9rZW8geWFtZWhpZmFkaGl3YSBrd2Egc2V2YS4uLlwiLFxuICAgIHNhdmluZ0RhdGFFcnJvcjogXCJLb3NhIGxpbWV0b2tlYSBuYSBoYXR1a3V3ZXphIGt1aGlmYWRoaSBtYXRva2VvLlwiLFxuICAgIHNhdmluZ0RhdGFTdWNjZXNzOiBcIk1hdG9rZW8geWFtZWhpZmFkaGl3YSFcIixcbiAgICBzYXZlQWdhaW5CdXR0b246IFwiSmFyaWJ1IHRlbmFcIixcbiAgICB0aW1lck1pbjogXCJkYWtpa2FcIixcbiAgICB0aW1lclNlYzogXCJzZWt1bmRlXCIsXG4gICAgdGltZXJTcGVudEFsbDogXCJVbWV0dW1pYSB7MH0ga3dlbnllIHVrdXJhc2EgaHV1IG5hIHsxfSBrd2EganVtbGEuXCIsXG4gICAgdGltZXJTcGVudFBhZ2U6IFwiVW1ldHVtaWEgezB9IGt3ZW55ZSB1a3VyYXNhIGh1dS5cIixcbiAgICB0aW1lclNwZW50U3VydmV5OiBcIlVtZXR1bWlhIHswfSBrd2EganVtbGEuXCIsXG4gICAgdGltZXJMaW1pdEFsbDogXCJVbWV0dW1pYSB7MH0geWEgezF9IGt3ZW55ZSB1a3VyYXNhIGh1dSB7Mn0gd2EgezN9IGt3YSBqdW1sYS5cIixcbiAgICB0aW1lckxpbWl0UGFnZTogXCJVbWV0dW1pYSB7MH0geWEgezF9IGt3ZW55ZSB1a3VyYXNhIGh1dS5cIixcbiAgICB0aW1lckxpbWl0U3VydmV5OiBcIlVtZXR1bWlhIHswfSB5YSB7MX0ga3dhIGp1bWxhLlwiLFxuICAgIGNsZWFyQ2FwdGlvbjogXCJPbmRvYVwiLFxuICAgIHNpZ25hdHVyZVBsYWNlSG9sZGVyOiBcIkluZ2lhIGhhcGFcIixcbiAgICBjaG9vc2VGaWxlQ2FwdGlvbjogXCJDaGFndWEgZmFpbGlcIixcbiAgICB0YWtlUGhvdG9DYXB0aW9uOiBcIkNodWt1YSBQaWNoYVwiLFxuICAgIGNhbWVyYVBsYWNlSG9sZGVyOiBcIkJvbnllemEga2l0dWZlIGhhcGEgY2hpbmkgaWxpIGt1cGlnYSBwaWNoYSBrd2Ega3V0dW1pYSBrYW1lcmEuXCIsXG4gICAgZmlsZUNhbWVyYURyYWdBcmVhUGxhY2VIb2xkZXI6IFwiRHJhZyBuYSBrdWFjaGEgYXUga3VjaGFndWEgZmFpbGkga3VwYWtpYSBhdSBrdWNodWt1YSBwaWNoYSBrd2Ega3V0dW1pYSBrYW1lcmEuXCIsXG4gICAgcmVwbGFjZUZpbGVDYXB0aW9uOiBcIkJhZGlsaXNoYSBmYWlsaVwiLFxuICAgIHJlbW92ZUZpbGVDYXB0aW9uOiBcIk9uZG9hIGZhaWxpXCIsXG4gICAgYm9vbGVhbkNoZWNrZWRMYWJlbDogXCJOZGlvXCIsXG4gICAgYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcIkhhcGFuYVwiLFxuICAgIGNvbmZpcm1SZW1vdmVGaWxlOiBcIkplISBVbmEgdWhha2lrYSBrdXdhIHVuYXRha2Ega3VvbmRvYSBmYWlsaSBoaWk6IHswfT9cIixcbiAgICBjb25maXJtUmVtb3ZlQWxsRmlsZXM6IFwiSmUhIFVuYSB1aGFraWthIGt1d2EgdW5hdGFrYSBrdW9uZG9hIGZhaWxpIHpvdGU/XCIsXG4gICAgcXVlc3Rpb25UaXRsZVBhdHRlcm5UZXh0OiBcIktpY2h3YSBjaGEgU3dhbGlcIixcbiAgICBtb2RhbENhbmNlbEJ1dHRvblRleHQ6IFwiS2F0aXNoYVwiLFxuICAgIG1vZGFsQXBwbHlCdXR0b25UZXh0OiBcIlRla2VsZXphXCIsXG4gICAgZmlsdGVyU3RyaW5nUGxhY2Vob2xkZXI6IFwiQW5kaWthIGlsaSBrdXRhZnV0YS4uLlwiLFxuICAgIGVtcHR5TWVzc2FnZTogXCJIYWt1bmEgZGF0YSB5YSBrdW9ueWVzaGFcIixcbiAgICBub0VudHJpZXNUZXh0OiBcIkhha3VuYSBtYWluZ2l6byBrd2Egc2FzYS5cXG5Cb2Z5YSBraXR1ZmUgaGFwYSBjaGluaSBpbGkga3VvbmdlemEgaW5naXpvIGppcHlhLlwiLFxuICAgIG5vRW50cmllc1JlYWRvbmx5VGV4dDogXCJIYWt1bmEgdmlpbmdpbGlvLlwiLFxuICAgIG1vcmU6IFwiWmFpZGlcIixcbiAgICB0YWdib3hEb25lQnV0dG9uQ2FwdGlvbjogXCJTYXdhIGthYmlzYVwiLFxuICAgIHNlbGVjdFRvUmFua0VtcHR5UmFua2VkQXJlYVRleHQ6IFwiQ2hhZ3V6aSB6b3RlIHppbWVvcm9kaGVzaHdhXCIsXG4gICAgc2VsZWN0VG9SYW5rRW1wdHlVbnJhbmtlZEFyZWFUZXh0OiBcIkJ1cnV0YSBuYSB1YWNoZSB1Y2hhZ3V6aSBoYXBhIGlsaSBrdXppb3JvZGhlc2hhXCJcbn07XG5zdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3VydmV5TG9jYWxpemF0aW9uXCJdLmxvY2FsZXNbXCJzd1wiXSA9IHN3YWhpbGlTdHJpbmdzO1xuc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN1cnZleUxvY2FsaXphdGlvblwiXS5sb2NhbGVOYW1lc1tcInN3XCJdID0gXCJzd2FoaWxpXCI7XG4vLyBUaGUgZm9sbG93aW5nIHN0cmluZ3MgaGF2ZSBiZWVuIHRyYW5zbGF0ZWQgYnkgYSBtYWNoaW5lIHRyYW5zbGF0aW9uIHNlcnZpY2Vcbi8vIFJlbW92ZSB0aG9zZSBzdHJpbmdzIHRoYXQgeW91IGhhdmUgY29ycmVjdGVkIG1hbnVhbGx5XG4vLyBpbmRleFRleHQ6IFwiezB9IG9mIHsxfVwiID0+IFwiezB9IHlhIHsxfVwiXG4vLyBwYW5lbER5bmFtaWNUYWJUZXh0Rm9ybWF0OiBcIlBhbmVsIHtwYW5lbEluZGV4fVwiID0+IFwiUGFuZWwge3BhbmVsSW5kZXh9XCJcbi8vIHJhdGluZ09wdGlvbnNDYXB0aW9uOiBcIlNlbGVjdC4uLlwiID0+IFwiVGV1YS4uLlwiXG4vLyBtaW5FcnJvcjogXCJUaGUgdmFsdWUgc2hvdWxkIG5vdCBiZSBsZXNzIHRoYW4gezB9XCIgPT4gXCJUaGFtYW5pIGhhaXBhc3dpIGt1d2EgY2hpbmkgeWEgezB9XCJcbi8vIG1heEVycm9yOiBcIlRoZSB2YWx1ZSBzaG91bGQgbm90IGJlIGdyZWF0ZXIgdGhhbiB7MH1cIiA9PiBcIlRoYW1hbmkgaGFpcGFzd2kga3V3YSBrdWJ3YSBrdWxpa28gezB9XCJcbi8vIGZpbGVEcmFnQXJlYVBsYWNlaG9sZGVyOiBcIkRyYWcgYW5kIGRyb3AgYSBmaWxlIGhlcmUgb3IgY2xpY2sgdGhlIGJ1dHRvbiBiZWxvdyBhbmQgY2hvb3NlIGEgZmlsZSB0byB1cGxvYWQuXCIgPT4gXCJCdXJ1dGEgbmEgdWRvbmRvc2hlIGZhaWxpIGhhcGEgYXUgYm9meWEga2l0dWZlIGhhcGEgY2hpbmkgbmEgdWNoYWd1ZSBmYWlsaSB5YSBrdXBha2lhLlwiXG4vLyBlbXB0eVJvd3NUZXh0OiBcIlRoZXJlIGFyZSBubyByb3dzLlwiID0+IFwiSGFrdW5hIHNhZnUuXCJcbi8vIG11bHRpcGxldGV4dF9pdGVtbmFtZTogXCJ0ZXh0XCIgPT4gXCJVanVtYmVcIlxuLy8gc2lnbmF0dXJlUGxhY2VIb2xkZXI6IFwiU2lnbiBoZXJlXCIgPT4gXCJJbmdpYSBoYXBhXCJcbi8vIG1vZGFsQ2FuY2VsQnV0dG9uVGV4dDogXCJDYW5jZWxcIiA9PiBcIkthdGlzaGFcIlxuLy8gbW9kYWxBcHBseUJ1dHRvblRleHQ6IFwiQXBwbHlcIiA9PiBcIlRla2VsZXphXCJcbi8vIGZpbHRlclN0cmluZ1BsYWNlaG9sZGVyOiBcIlR5cGUgdG8gc2VhcmNoLi4uXCIgPT4gXCJBbmRpa2EgaWxpIGt1dGFmdXRhLi4uXCJcbi8vIGVtcHR5TWVzc2FnZTogXCJObyBkYXRhIHRvIGRpc3BsYXlcIiA9PiBcIkhha3VuYSBkYXRhIHlhIGt1b255ZXNoYVwiXG4vLyBub0VudHJpZXNUZXh0OiBcIlRoZXJlIGFyZSBubyBlbnRyaWVzIHlldC5cXG5DbGljayB0aGUgYnV0dG9uIGJlbG93IHRvIGFkZCBhIG5ldyBlbnRyeS5cIiA9PiBcIkhha3VuYSBtYWluZ2l6byBrd2Egc2FzYS5cXG5Cb2Z5YSBraXR1ZmUgaGFwYSBjaGluaSBpbGkga3VvbmdlemEgaW5naXpvIGppcHlhLlwiXG4vLyBub0VudHJpZXNSZWFkb25seVRleHQ6IFwiVGhlcmUgYXJlIG5vIGVudHJpZXMuXCIgPT4gXCJIYWt1bmEgdmlpbmdpbGlvLlwiXG4vLyBtb3JlOiBcIk1vcmVcIiA9PiBcIlphaWRpXCJcbi8vIHRhZ2JveERvbmVCdXR0b25DYXB0aW9uOiBcIk9LXCIgPT4gXCJTYXdhIGthYmlzYVwiXG4vLyBzZWxlY3RUb1JhbmtFbXB0eVJhbmtlZEFyZWFUZXh0OiBcIkFsbCBjaG9pY2VzIGFyZSByYW5rZWRcIiA9PiBcIkNoYWd1emkgem90ZSB6aW1lb3JvZGhlc2h3YVwiXG4vLyBzZWxlY3RUb1JhbmtFbXB0eVVucmFua2VkQXJlYVRleHQ6IFwiRHJhZyBhbmQgZHJvcCBjaG9pY2VzIGhlcmUgdG8gcmFuayB0aGVtXCIgPT4gXCJCdXJ1dGEgbmEgdWFjaGUgdWNoYWd1emkgaGFwYSBpbGkga3V6aW9yb2RoZXNoYVwiLy8gdGFrZVBob3RvQ2FwdGlvbjogXCJUYWtlIFBob3RvXCIgPT4gXCJDaHVrdWEgUGljaGFcIlxuLy8gY2FtZXJhUGxhY2VIb2xkZXI6IFwiQ2xpY2sgdGhlIGJ1dHRvbiBiZWxvdyB0byB0YWtlIGEgcGhvdG8gdXNpbmcgdGhlIGNhbWVyYS5cIiA9PiBcIkJvbnllemEga2l0dWZlIGhhcGEgY2hpbmkgaWxpIGt1cGlnYSBwaWNoYSBrd2Ega3V0dW1pYSBrYW1lcmEuXCJcbi8vIGZpbGVDYW1lcmFEcmFnQXJlYVBsYWNlSG9sZGVyOiBcIkRyYWcgYW5kIGRyb3Agb3Igc2VsZWN0IGEgZmlsZSB0byB1cGxvYWQgb3IgdGFrZSBhIHBob3RvIHVzaW5nIHRoZSBjYW1lcmEuXCIgPT4gXCJEcmFnIG5hIGt1YWNoYSBhdSBrdWNoYWd1YSBmYWlsaSBrdXBha2lhIGF1IGt1Y2h1a3VhIHBpY2hhIGt3YSBrdXR1bWlhIGthbWVyYS5cIlxuLy8gcmVwbGFjZUZpbGVDYXB0aW9uOiBcIlJlcGxhY2UgZmlsZVwiID0+IFwiQmFkaWxpc2hhIGZhaWxpXCJcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9sb2NhbGl6YXRpb24vc3dlZGlzaC50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9sb2NhbGl6YXRpb24vc3dlZGlzaC50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBzd2VkaXNoU3VydmV5U3RyaW5ncyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzd2VkaXNoU3VydmV5U3RyaW5nc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN3ZWRpc2hTdXJ2ZXlTdHJpbmdzOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBzdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgc3VydmV5LWNvcmUgKi8gXCIuL3NyYy9lbnRyaWVzL2NvcmUudHNcIik7XG5cbnZhciBzd2VkaXNoU3VydmV5U3RyaW5ncyA9IHtcbiAgICBwYWdlUHJldlRleHQ6IFwiRsO2cmVnw6VlbmRlXCIsXG4gICAgcGFnZU5leHRUZXh0OiBcIk7DpHN0YVwiLFxuICAgIGNvbXBsZXRlVGV4dDogXCJTbHV0ZsO2clwiLFxuICAgIHByZXZpZXdUZXh0OiBcIkbDtnJoYW5kc3Zpc25pbmdcIixcbiAgICBlZGl0VGV4dDogXCJSZWRpZ2VyYVwiLFxuICAgIHN0YXJ0U3VydmV5VGV4dDogXCJCw7ZyamFcIixcbiAgICBvdGhlckl0ZW1UZXh0OiBcIkFubmF0IChiZXNrcml2KVwiLFxuICAgIG5vbmVJdGVtVGV4dDogXCJJbmdlblwiLFxuICAgIHNlbGVjdEFsbEl0ZW1UZXh0OiBcIlbDpGxqIGFsbGFcIixcbiAgICBwcm9ncmVzc1RleHQ6IFwiU2lkYSB7MH0gYXYgezF9XCIsXG4gICAgaW5kZXhUZXh0OiBcInswfSBhdiB7MX1cIixcbiAgICBwYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ6IFwiezB9IGF2IHsxfVwiLFxuICAgIHBhbmVsRHluYW1pY1RhYlRleHRGb3JtYXQ6IFwiUGFuZWwge3BhbmVsSW5kZXh9XCIsXG4gICAgcXVlc3Rpb25zUHJvZ3Jlc3NUZXh0OiBcInswfSAvIHsxfSBmcsOlZ29yIGJlc3ZhcmFkZVwiLFxuICAgIGVtcHR5U3VydmV5OiBcIkRldCBmaW5ucyBpbmdlbiBzeW5saWcgc2lkYSBlbGxlciBmcsOlZ2EgaSBlbmvDpHRlbi5cIixcbiAgICBjb21wbGV0aW5nU3VydmV5OiBcIlRhY2sgZsO2ciBhdHQgZHUgZ2Vub21mw7ZydCBlbmvDpHRlbiEhXCIsXG4gICAgY29tcGxldGluZ1N1cnZleUJlZm9yZTogXCJWw6VyYSByZWdpc3RlciB2aXNhciBhdHQgZHUgcmVkYW4gaGFyIHNsdXRmw7ZydCBkZW5uYSB1bmRlcnPDtmtuaW5nLlwiLFxuICAgIGxvYWRpbmdTdXJ2ZXk6IFwiRW5rw6R0ZW4gbGFkZGFzLi4uXCIsXG4gICAgcGxhY2Vob2xkZXI6IFwiVsOkbGouLi5cIixcbiAgICByYXRpbmdPcHRpb25zQ2FwdGlvbjogXCJUcnljayBow6RyIGbDtnIgYXR0IGJldHlnc8OkdHRhLi4uXCIsXG4gICAgdmFsdWU6IFwidsOkcmRlXCIsXG4gICAgcmVxdWlyZWRFcnJvcjogXCJGcsOlZ2FuIMOkciBvYmxpZ2F0b3Jpc2suXCIsXG4gICAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwiVsOkbmxpZ2VuIHN2YXJhIHDDpSBtaW5zdCBlbiBmcsOlZ2EuXCIsXG4gICAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCJWYXIgdsOkbmxpZyBiZXN2YXJhIGZyw6Vnb3JuYSBww6UgYWxsYSByYWRlci5cIixcbiAgICBudW1lcmljRXJyb3I6IFwiVsOkcmRldCBza2EgdmFyYSBudW1lcmlza3QuXCIsXG4gICAgbWluRXJyb3I6IFwiVsOkcmRldCBmw6VyIGludGUgdmFyYSBtaW5kcmUgw6RuIHswfVwiLFxuICAgIG1heEVycm9yOiBcIlbDpHJkZXQgZsOlciBpbnRlIHZhcmEgc3TDtnJyZSDDpG4gezB9XCIsXG4gICAgdGV4dE1pbkxlbmd0aDogXCJBbmdlIG1pbnN0IHswfSB0ZWNrZW4uXCIsXG4gICAgdGV4dE1heExlbmd0aDogXCJBbmdlIGbDpHJyZSDDpG4gezB9IHRlY2tlbi5cIixcbiAgICB0ZXh0TWluTWF4TGVuZ3RoOiBcIkFuZ2UgbWVyIMOkbiB7MH0gb2NoIGbDpHJyZSDDpG4gezF9IHRlY2tlbi5cIixcbiAgICBtaW5Sb3dDb3VudEVycm9yOiBcIlZhciB2w6RubGlnIGZ5bGwgaSBtaW5zdCB7MH0gcmFkZXIuXCIsXG4gICAgbWluU2VsZWN0RXJyb3I6IFwiVmFyIHbDpG5saWcgdsOkbGogw6V0bWluc3RvbmUgezB9IHZhcmlhbnRlci5cIixcbiAgICBtYXhTZWxlY3RFcnJvcjogXCJWYXIgdsOkbmxpZyB2w6RsaiBpbnRlIGZsZXIgw6RuIHswfSB2YXJpYW50ZXIuXCIsXG4gICAgbnVtZXJpY01pbk1heDogXCInezB9JyBza2EgdmFyYSBsaWthIG1lZCBlbGxlciBtZXIgw6RuIHsxfSBzYW10IGxpa2EgbWVkIGVsbGVyIG1pbmRyZSDDpG4gezJ9XCIsXG4gICAgbnVtZXJpY01pbjogXCInezB9JyBza2EgdmFyYSBsaWthIG1lZCBlbGxlciBtZXIgw6RuIHsxfVwiLFxuICAgIG51bWVyaWNNYXg6IFwiJ3swfScgc2thIHZhcmEgbGlrYSBtZWQgZWxsZXIgbWluZHJlIMOkbiB7MX1cIixcbiAgICBpbnZhbGlkRW1haWw6IFwiVmFyIHbDpG5saWcgYW5nZSBlbiBrb3JyZWt0IGUtcG9zdGFkcmVzcy5cIixcbiAgICBpbnZhbGlkRXhwcmVzc2lvbjogXCJVdHRyeWNrZXQ6IHswfSBza2EgcmV0dXJuZXJhICd0cnVlJy5cIixcbiAgICB1cmxSZXF1ZXN0RXJyb3I6IFwiRsO2cmZyw6VnYW4gcmV0dXJuZXJhZGUgZmVsZXQgJ3swfScuIHsxfVwiLFxuICAgIHVybEdldENob2ljZXNFcnJvcjogXCJBbnRpbmdlbiByZXR1cm5lcmFkZSBmw7ZyZnLDpWdhbiBpbmdlbiBkYXRhIGVsbGVyIHPDpSDDpHIgZWdlbnNrYXBlbiAncGF0aCcgaW50ZSBrb3JyZWt0XCIsXG4gICAgZXhjZWVkTWF4U2l6ZTogXCJGaWxzdG9ybGVrZW4gZsOlciBlaiDDtnZlcnN0aWdhIHswfS5cIixcbiAgICBvdGhlclJlcXVpcmVkRXJyb3I6IFwiVmFyIHbDpG5saWcgYW5nZSBkZXQgYW5kcmEgdsOkcmRldC5cIixcbiAgICB1cGxvYWRpbmdGaWxlOiBcIkRpbiBmaWwgbGFkZGFzIHVwcC4gVmFyIHbDpG5saWcgdsOkbnRhIG7DpWdyYSBzZWt1bmRlciBvY2ggZsO2cnPDtmsgc2VkYW4gaWdlbi5cIixcbiAgICBsb2FkaW5nRmlsZTogXCJMYWRkYXIuLi5cIixcbiAgICBjaG9vc2VGaWxlOiBcIlbDpGxqIGZpbChlcikgLi4uXCIsXG4gICAgbm9GaWxlQ2hvc2VuOiBcIkluZ2VuIGZpbCB2YWxkXCIsXG4gICAgZmlsZURyYWdBcmVhUGxhY2Vob2xkZXI6IFwiRHJhIG9jaCBzbMOkcHAgZW4gZmlsIGjDpHIgZWxsZXIga2xpY2thIHDDpSBrbmFwcGVuIG5lZGFuIG9jaCB2w6RsaiBlbiBmaWwgYXR0IGxhZGRhIHVwcC5cIixcbiAgICBjb25maXJtRGVsZXRlOiBcIlZpbGwgZHUgcmFkZXJhIHBvc3Rlbj9cIixcbiAgICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcIkRldHRhIHbDpHJkZSBza2EgdmFyYSB1bmlrdC5cIixcbiAgICBhZGRDb2x1bW46IFwiTMOkZ2cgdGlsbCBrb2x1bW5cIixcbiAgICBhZGRSb3c6IFwiTMOkZ2cgdGlsbCByYWRcIixcbiAgICByZW1vdmVSb3c6IFwiVGEgYm9ydFwiLFxuICAgIGVtcHR5Um93c1RleHQ6IFwiRGV0IGZpbm5zIGluZ2EgcmFkZXIuXCIsXG4gICAgYWRkUGFuZWw6IFwiTMOkZ2cgdGlsbCBueVwiLFxuICAgIHJlbW92ZVBhbmVsOiBcIlRhIGJvcnRcIixcbiAgICBjaG9pY2VzX0l0ZW06IFwiQXJ0aWtlbFwiLFxuICAgIG1hdHJpeF9jb2x1bW46IFwiS29sdW1uXCIsXG4gICAgbWF0cml4X3JvdzogXCJSYWRcIixcbiAgICBtdWx0aXBsZXRleHRfaXRlbW5hbWU6IFwidGV4dFwiLFxuICAgIHNhdmluZ0RhdGE6IFwiUmVzdWx0YXRlbiBzcGFyYXMgcMOlIHNlcnZlcm4gLi4uXCIsXG4gICAgc2F2aW5nRGF0YUVycm9yOiBcIkV0dCBmZWwgaW50csOkZmZhZGUgb2NoIHZpIGt1bmRlIGludGUgc3BhcmEgcmVzdWx0YXRlbi5cIixcbiAgICBzYXZpbmdEYXRhU3VjY2VzczogXCJSZXN1bHRhdGVuIGx5Y2thZGVzIHNwYXJhcyFcIixcbiAgICBzYXZlQWdhaW5CdXR0b246IFwiRsO2cnPDtmsgaWdlblwiLFxuICAgIHRpbWVyTWluOiBcIm1pblwiLFxuICAgIHRpbWVyU2VjOiBcInNla1wiLFxuICAgIHRpbWVyU3BlbnRBbGw6IFwiRHUgaGFyIHNwZW5kZXJhdCB7MH0gcMOlIGRlbiBow6RyIHNpZGFuIG9jaCB7MX0gdG90YWx0LlwiLFxuICAgIHRpbWVyU3BlbnRQYWdlOiBcIkR1IGhhciBzcGVuZGVyYXQgezB9IHDDpSBkZW4gaMOkciBzaWRhbi5cIixcbiAgICB0aW1lclNwZW50U3VydmV5OiBcIkR1IGhhciBzcGVuZGVyYXQgezB9IHRvdGFsdC5cIixcbiAgICB0aW1lckxpbWl0QWxsOiBcIkR1IGhhciBzcGVuZGVyYXQgezB9IGF2IHsxfSBww6UgZGVuIGjDpHIgc2lkYW4gb2NoIHsyfSBhdiB7M30gdG90YWx0LlwiLFxuICAgIHRpbWVyTGltaXRQYWdlOiBcIkR1IGhhciBzcGVuZGVyYXQgezB9IGF2IHsxfSBww6UgZGVuIGjDpHIgc2lkYW4uXCIsXG4gICAgdGltZXJMaW1pdFN1cnZleTogXCJEdSBoYXIgc3BlbmRlcmF0IHswfSBhdiB7MX0gdG90YWx0LlwiLFxuICAgIGNsZWFyQ2FwdGlvbjogXCJLbGFyXCIsXG4gICAgc2lnbmF0dXJlUGxhY2VIb2xkZXI6IFwiU2lnbmVyYSBow6RyXCIsXG4gICAgY2hvb3NlRmlsZUNhcHRpb246IFwiVsOkbGogZmlsXCIsXG4gICAgdGFrZVBob3RvQ2FwdGlvbjogXCJUYSBmb3RvXCIsXG4gICAgY2FtZXJhUGxhY2VIb2xkZXI6IFwiS2xpY2thIHDDpSBrbmFwcGVuIG5lZGFuIGbDtnIgYXR0IHRhIGV0dCBmb3RvIG1lZCBrYW1lcmFuLlwiLFxuICAgIGZpbGVDYW1lcmFEcmFnQXJlYVBsYWNlSG9sZGVyOiBcIkRyYSBvY2ggc2zDpHBwIGVsbGVyIHbDpGxqIGVuIGZpbCBhdHQgbGFkZGEgdXBwIGVsbGVyIHRhIGV0dCBmb3RvIG1lZCBrYW1lcmFuLlwiLFxuICAgIHJlcGxhY2VGaWxlQ2FwdGlvbjogXCJFcnPDpHR0IGZpbFwiLFxuICAgIHJlbW92ZUZpbGVDYXB0aW9uOiBcIlRhIGJvcnQgZGVuIGjDpHIgZmlsZW5cIixcbiAgICBib29sZWFuQ2hlY2tlZExhYmVsOiBcIkphXCIsXG4gICAgYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcIk5lalwiLFxuICAgIGNvbmZpcm1SZW1vdmVGaWxlOiBcIsOEciBkdSBzw6RrZXIgcMOlIGF0dCBkdSB2aWxsIHRhIGJvcnQgZGVuIGjDpHIgZmlsZW46IHswfT9cIixcbiAgICBjb25maXJtUmVtb3ZlQWxsRmlsZXM6IFwiw4RyIGR1IHPDpGtlciBww6UgYXR0IGR1IHZpbGwgdGEgYm9ydCBhbGxhIGZpbGVyP1wiLFxuICAgIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCJGcsOlZ2V0aXRlbFwiLFxuICAgIG1vZGFsQ2FuY2VsQnV0dG9uVGV4dDogXCJBdmJyeXRcIixcbiAgICBtb2RhbEFwcGx5QnV0dG9uVGV4dDogXCJTcGFyYVwiLFxuICAgIGZpbHRlclN0cmluZ1BsYWNlaG9sZGVyOiBcIlNrcml2IGbDtnIgYXR0IHPDtmthLi4uXCIsXG4gICAgZW1wdHlNZXNzYWdlOiBcIkluZ2VuIGRhdGEgZmlubnNcIixcbiAgICBub0VudHJpZXNUZXh0OiBcIkRldCBmaW5ucyBpbmdhIHbDpHJkZW4gw6RuLlxcbktsaWNrYSBww6Uga25hcHBlbiBuZWRhbiBmw7ZyIGF0dCBsw6RnZ2EgdGlsbCBueXR0IHbDpHJkZS5cIixcbiAgICBub0VudHJpZXNSZWFkb25seVRleHQ6IFwiRGV0IGZpbm5zIGluZ2EgcG9zdGVyLlwiLFxuICAgIG1vcmU6IFwiTWVyXCIsXG4gICAgdGFnYm94RG9uZUJ1dHRvbkNhcHRpb246IFwiT0tFSlwiLFxuICAgIHNlbGVjdFRvUmFua0VtcHR5UmFua2VkQXJlYVRleHQ6IFwiQWxsYSB2YWwgcmFuZ29yZG5hc1wiLFxuICAgIHNlbGVjdFRvUmFua0VtcHR5VW5yYW5rZWRBcmVhVGV4dDogXCJEcmEgb2NoIHNsw6RwcCB2YWwgaMOkciBmw7ZyIGF0dCByYW5nb3JkbmEgZGVtXCJcbn07XG5zdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3VydmV5TG9jYWxpemF0aW9uXCJdLmxvY2FsZXNbXCJzdlwiXSA9IHN3ZWRpc2hTdXJ2ZXlTdHJpbmdzO1xuc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN1cnZleUxvY2FsaXphdGlvblwiXS5sb2NhbGVOYW1lc1tcInN2XCJdID0gXCJzdmVuc2thXCI7XG4vLyBUaGUgZm9sbG93aW5nIHN0cmluZ3MgaGF2ZSBiZWVuIHRyYW5zbGF0ZWQgYnkgYSBtYWNoaW5lIHRyYW5zbGF0aW9uIHNlcnZpY2Vcbi8vIFJlbW92ZSB0aG9zZSBzdHJpbmdzIHRoYXQgeW91IGhhdmUgY29ycmVjdGVkIG1hbnVhbGx5XG4vLyBwYW5lbER5bmFtaWNUYWJUZXh0Rm9ybWF0OiBcIlBhbmVsIHtwYW5lbEluZGV4fVwiID0+IFwiUGFuZWwge3BhbmVsSW5kZXh9XCJcbi8vIGZpbGVEcmFnQXJlYVBsYWNlaG9sZGVyOiBcIkRyYWcgYW5kIGRyb3AgYSBmaWxlIGhlcmUgb3IgY2xpY2sgdGhlIGJ1dHRvbiBiZWxvdyBhbmQgY2hvb3NlIGEgZmlsZSB0byB1cGxvYWQuXCIgPT4gXCJEcmEgb2NoIHNsw6RwcCBlbiBmaWwgaMOkciBlbGxlciBrbGlja2EgcMOlIGtuYXBwZW4gbmVkYW4gb2NoIHbDpGxqIGVuIGZpbCBhdHQgbGFkZGEgdXBwLlwiXG4vLyBlbXB0eVJvd3NUZXh0OiBcIlRoZXJlIGFyZSBubyByb3dzLlwiID0+IFwiRGV0IGZpbm5zIGluZ2EgcmFkZXIuXCJcbi8vIG5vRW50cmllc1JlYWRvbmx5VGV4dDogXCJUaGVyZSBhcmUgbm8gZW50cmllcy5cIiA9PiBcIkRldCBmaW5ucyBpbmdhIHBvc3Rlci5cIlxuLy8gdGFnYm94RG9uZUJ1dHRvbkNhcHRpb246IFwiT0tcIiA9PiBcIk9LRUpcIlxuLy8gc2VsZWN0VG9SYW5rRW1wdHlSYW5rZWRBcmVhVGV4dDogXCJBbGwgY2hvaWNlcyBhcmUgcmFua2VkXCIgPT4gXCJBbGxhIHZhbCByYW5nb3JkbmFzXCJcbi8vIHNlbGVjdFRvUmFua0VtcHR5VW5yYW5rZWRBcmVhVGV4dDogXCJEcmFnIGFuZCBkcm9wIGNob2ljZXMgaGVyZSB0byByYW5rIHRoZW1cIiA9PiBcIkRyYSBvY2ggc2zDpHBwIHZhbCBow6RyIGbDtnIgYXR0IHJhbmdvcmRuYSBkZW1cIi8vIHRha2VQaG90b0NhcHRpb246IFwiVGFrZSBQaG90b1wiID0+IFwiVGEgZm90b1wiXG4vLyBjYW1lcmFQbGFjZUhvbGRlcjogXCJDbGljayB0aGUgYnV0dG9uIGJlbG93IHRvIHRha2UgYSBwaG90byB1c2luZyB0aGUgY2FtZXJhLlwiID0+IFwiS2xpY2thIHDDpSBrbmFwcGVuIG5lZGFuIGbDtnIgYXR0IHRhIGV0dCBmb3RvIG1lZCBrYW1lcmFuLlwiXG4vLyBmaWxlQ2FtZXJhRHJhZ0FyZWFQbGFjZUhvbGRlcjogXCJEcmFnIGFuZCBkcm9wIG9yIHNlbGVjdCBhIGZpbGUgdG8gdXBsb2FkIG9yIHRha2UgYSBwaG90byB1c2luZyB0aGUgY2FtZXJhLlwiID0+IFwiRHJhIG9jaCBzbMOkcHAgZWxsZXIgdsOkbGogZW4gZmlsIGF0dCBsYWRkYSB1cHAgZWxsZXIgdGEgZXR0IGZvdG8gbWVkIGthbWVyYW4uXCJcbi8vIHJlcGxhY2VGaWxlQ2FwdGlvbjogXCJSZXBsYWNlIGZpbGVcIiA9PiBcIkVyc8OkdHQgZmlsXCJcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9sb2NhbGl6YXRpb24vdGFqaWsudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL2xvY2FsaXphdGlvbi90YWppay50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogdGFqaWtTdXJ2ZXlTdHJpbmdzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInRhamlrU3VydmV5U3RyaW5nc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHRhamlrU3VydmV5U3RyaW5nczsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHN1cnZleS1jb3JlICovIFwiLi9zcmMvZW50cmllcy9jb3JlLnRzXCIpO1xuLy8gVGhpcyBkaWN0aW9uYXJ5IGNvbnRhaW5zIDI1IHVudHJhbnNsYXRlZCBvciBpbmhlcml0ZWQgbG9jYWxpemF0aW9uIHN0cmluZ3MuXG4vLyBUaGVzZSBzdHJpbmdzIGFyZSBjb21tZW50ZWQgb3V0LiBVbmNvbW1lbnQgYW5kIGVkaXQgdGhlbSBpZiB5b3Ugd2FudCB0byBhZGQgeW91ciB0cmFuc2xhdGlvbnMuXG5cbnZhciB0YWppa1N1cnZleVN0cmluZ3MgPSB7XG4gICAgcGFnZVByZXZUZXh0OiBcItCR0L7Qt9Cz0LDRiNGCXCIsXG4gICAgcGFnZU5leHRUZXh0OiBcItCe0Y/QvdC00LBcIixcbiAgICBjb21wbGV0ZVRleHQ6IFwi0JjSt9GA0L4g0YjRg9C0XCIsXG4gICAgLy8gcHJldmlld1RleHQ6IFwiUHJldmlld1wiLFxuICAgIC8vIGVkaXRUZXh0OiBcIkVkaXRcIixcbiAgICBzdGFydFN1cnZleVRleHQ6IFwi0J7Sk9C+0LdcIixcbiAgICBvdGhlckl0ZW1UZXh0OiBcItCU0LjQs9Cw0YAgKNC70YPRgtGE0LDQvSDRgtCw0LLRgdC40YQg0LrRg9C90LXQtClcIixcbiAgICBub25lSXRlbVRleHQ6IFwi0J3QtVwiLFxuICAgIHNlbGVjdEFsbEl0ZW1UZXh0OiBcItKy0LDQvNCw0YDQviDQuNC90YLQuNGF0L7QsSDQutCw0YDQtNCw0L1cIixcbiAgICBwcm9ncmVzc1RleHQ6IFwi0KHQsNKz0LjRhNCw0LggezB9INCw0LcgezF9XCIsXG4gICAgLy8gaW5kZXhUZXh0OiBcInswfSBvZiB7MX1cIixcbiAgICAvLyBwYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ6IFwiezB9IG9mIHsxfVwiLFxuICAgIC8vIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCJBbnN3ZXJlZCB7MH0vezF9IHF1ZXN0aW9uc1wiLFxuICAgIGVtcHR5U3VydmV5OiBcItCv0LPQvtC9INGB0LDQstC+0Lsg0LLRg9K30YPQtCDQvdCw0LTQvtGA0LDQtC5cIixcbiAgICBjb21wbGV0aW5nU3VydmV5OiBcItCi0LDRiNCw0LrQutGD0YAg0LHQsNGA0L7QuCDQv9GD0YAg0LrQsNGA0LTQsNC90Lgg0YHQsNCy0L7Qu9C90L7QvNCwIVwiLFxuICAgIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6IFwi0KjRg9C80L4g0LDQu9C70LDQutCw0Lkg0LjQvSDQv9GD0YDRgdC40YjRgNC+INCw0L3St9C+0Lwg0LTQvtC00LDQtdC0LlwiLFxuICAgIGxvYWRpbmdTdXJ2ZXk6IFwi0JHQvtGA0LPQuNGA06Mg0LDQtyDRgdC10YDQstC10YAuLi5cIixcbiAgICBwbGFjZWhvbGRlcjogXCLQmNC90YLQuNGF0L7QsSDQutCw0YDQtNCw0L0uLi5cIixcbiAgICAvLyByYXRpbmdPcHRpb25zQ2FwdGlvbjogXCJTZWxlY3QuLi5cIixcbiAgICB2YWx1ZTogXCLSm9C40LzQvNCw0YJcIixcbiAgICByZXF1aXJlZEVycm9yOiBcItCY0LvRgtC40LzQvtGBLCDQsdCwINGB0LDQstC+0Lsg0rfQsNCy0L7QsSDQtNC40rPQtdC0LlwiLFxuICAgIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcItCY0LvRgtC40LzQvtGBLCDQsNKb0LDQu9Cw0L0g0LHQsCDRj9C6INGB0LDQstC+0Lsg0rfQsNCy0L7QsSDQtNC40rPQtdC0LlwiLFxuICAgIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwi0JjQu9GC0LjQvNC+0YEsINCx0LAg0rPQsNC80LDQuCDRgdCw0LLQvtC70rPQviDQtNCw0YAg0rPQsNC80LDQuCDRgdCw0YLRgNKz0L4g0rfQsNCy0L7QsSDQtNC40rPQtdC0LlwiLFxuICAgIG51bWVyaWNFcnJvcjogXCLSttCw0LLQvtCxINCx0L7Rj9C0INGA0LDSm9Cw0Lwg0LHQvtGI0LDQtC5cIixcbiAgICAvLyBtaW5FcnJvcjogXCJUaGUgdmFsdWUgc2hvdWxkIG5vdCBiZSBsZXNzIHRoYW4gezB9XCIsXG4gICAgLy8gbWF4RXJyb3I6IFwiVGhlIHZhbHVlIHNob3VsZCBub3QgYmUgZ3JlYXRlciB0aGFuIHswfVwiLFxuICAgIHRleHRNaW5MZW5ndGg6IFwi0JjQu9GC0LjQvNC+0YEsINCw0LcgezB9INC30LjRkdC00YLQsNGAINGA0LDQvNC3INCy0L7RgNC40LQg0LrRg9C90LXQtC5cIixcbiAgICB0ZXh0TWF4TGVuZ3RoOiBcItCY0LvRgtC40LzQvtGBLCDQsNC3IHswfSDQutCw0LzRgtCw0YAg0YDQsNC80Lcg0LLQvtGA0LjQtCDQutGD0L3QtdC0LlwiLFxuICAgIHRleHRNaW5NYXhMZW5ndGg6IFwi0JjQu9GC0LjQvNC+0YEsINCw0LcgezB9INC30LjRkdC00YLQsNGAINCy0LAg0LDQtyB7MX0g0LrQsNC80YLQsNGAINGA0LDQvNC3INCy0L7RgNC40LQg0LrRg9C90LXQtC5cIixcbiAgICBtaW5Sb3dDb3VudEVycm9yOiBcItCY0LvRgtC40LzQvtGBLCDQvdCwINC60LDQvNGC0LDRgCDQsNC3IHswfSDRgdCw0YLRgCDQv9GD0YAg0LrRg9C90LXQtC5cIixcbiAgICBtaW5TZWxlY3RFcnJvcjogXCLQmNC70YLQuNC80L7RgSwg0LDSm9Cw0LvQsNC9IHswfSDQstCw0YDQuNCw0L3RgiDQuNC90YLQuNGF0L7QsSDQutGD0L3QtdC0LlwiLFxuICAgIG1heFNlbGVjdEVycm9yOiBcItCY0LvRgtC40LzQvtGBLCDQvdCwINC30LjRkdC00YLQsNGAINCw0LcgezB9INCy0LDRgNC40LDQvdGCINC40L3RgtC40YXQvtCxINC60YPQvdC10LQuXCIsXG4gICAgbnVtZXJpY01pbk1heDogXCInezB9JyDQsdC+0Y/QtCDQvdCwINC60LDQvCDQsNC3IHsxfSDQstCwINC90LAg0LHQuNGB0ZHRgCDQsNC3IHsyfSDQsdC+0YjQsNC0XCIsXG4gICAgbnVtZXJpY01pbjogXCInezB9JyDQsdC+0Y/QtCDQvdCwINC60LDQvCDQsNC3IHsxfSDQsdC+0YjQsNC0XCIsXG4gICAgbnVtZXJpY01heDogXCInezB9JyDQsdC+0Y/QtCDQvdCwINC30LjRkdC0INCw0LcgezF9INCx0L7RiNCw0LRcIixcbiAgICBpbnZhbGlkRW1haWw6IFwi0JjQu9GC0LjQvNC+0YEsINC/0L7Rh9GC0LDQuCDRjdC70LXQutGC0YDQvtC90LjQuCDQstC+0pvQtdC40YDQviDQstC+0YDQuNC0INC60YPQvdC10LQuXCIsXG4gICAgaW52YWxpZEV4cHJlc3Npb246IFwi0JjRhNC+0LTQsNC4IHswfSDQsdC+0Y/QtCAndHJ1ZScg0LHQsNGA0LPQsNGA0LTQvtC90LDQtC5cIixcbiAgICB1cmxSZXF1ZXN0RXJyb3I6IFwi0JTQsNGA0YXQvtGB0YIg0YXQsNGC0L7Qs9OjINCx0L7Qt9Cz0LDRgNC00L7QvdC0ICd7MH0nLiB7MX1cIixcbiAgICB1cmxHZXRDaG9pY2VzRXJyb3I6IFwi0rbQsNCy0L7QsSDQsdCwINC00LDRgNGF0L7RgdGCINGF0L7Qu9OjINC+0LzQsNC0INGRINGF0L7RgdC40Y/RgtC4ICdwYXRoJyDQvdC+0LTRg9GA0YPRgdGCINC80YPQsNC50Y/QvSDQutCw0YDQtNCwINGI0YPQtNCw0LDRgdGCXCIsXG4gICAgZXhjZWVkTWF4U2l6ZTogXCLQkNC90LTQvtC30LDQuCDRhNCw0LnQuyDQsdC+0Y/QtCDQvdCwINC60LDQu9C+0L0g0LDQtyB7MH0g0LHQvtGI0LDQtC5cIixcbiAgICBvdGhlclJlcXVpcmVkRXJyb3I6IFwi0JjQu9GC0LjQvNC+0YEsINCx0LAg0LzQsNC50LTQvtC90LggJ9CU0LjQs9Cw0YAnINC00L7QtNCw0rPQvtGA0L4g0LLQvtGA0LjQtCDQutGD0L3QtdC0XCIsXG4gICAgdXBsb2FkaW5nRmlsZTogXCLQpNCw0LnQu9C4INGI0YPQvNC+INCx0L7RgCDRiNGD0LTQsCDQuNGB0YLQvtC00LDQsNGB0YIuINCv0LrRh9Cw0L3QtCDRgdC+0L3QuNGPINC40L3RgtC40LfQvtGAINGI0LDQstC10LQg0LLQsCDQsdC+0YDQuCDQtNC40LPQsNGAINC606/RiNC40Ygg0LrRg9C90LXQtC5cIixcbiAgICBsb2FkaW5nRmlsZTogXCLQkdC+0YDQutGD0L3Toy4uLlwiLFxuICAgIGNob29zZUZpbGU6IFwi0KTQsNC50Lso0rPQvikt0YDQviDQuNC90YLQuNGF0L7QsSDQutGD0L3QtdC0Li4uXCIsXG4gICAgLy8gbm9GaWxlQ2hvc2VuOiBcIk5vIGZpbGUgY2hvc2VuXCIsXG4gICAgLy8gZmlsZURyYWdBcmVhUGxhY2Vob2xkZXI6IFwiRHJvcCBhIGZpbGUgaGVyZSBvciBjbGljayB0aGUgYnV0dG9uIGJlbG93IHRvIGxvYWQgdGhlIGZpbGUuXCIsXG4gICAgY29uZmlybURlbGV0ZTogXCLQqNGD0LzQviDQvNGD0YLQvNCw0LjQvSDSs9Cw0YHRgtC10LQsINC60Lgg0LzQtdGF0L7Ss9C10LQg0LLQvtGA0LjQtNGA0L4g0YLQvtC30LAg0LrRg9C90LXQtD9cIixcbiAgICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcItCY0L0g0LDRgNC30LjRiCDQsdC+0Y/QtCDQsdC10L3QsNC30LjRgCDQsdC+0YjQsNC0LlwiLFxuICAgIGFkZENvbHVtbjogXCLQmNC70L7QstCw0Lgg0YHRg9GC0YPQvVwiLFxuICAgIGFkZFJvdzogXCLQmNC70L7QstCw0Lgg0YHQsNGC0YBcIixcbiAgICByZW1vdmVSb3c6IFwi0J3QtdGB0YIg0LrQsNGA0LTQsNC9XCIsXG4gICAgLy8gZW1wdHlSb3dzVGV4dDogXCJUaGVyZSBhcmUgbm8gcm93cy5cIixcbiAgICBhZGRQYW5lbDogXCLQmNC70L7QstCwINC60LDRgNC00LDQvVwiLFxuICAgIHJlbW92ZVBhbmVsOiBcItCd0LXRgdGCINC60LDRgNC00LDQvVwiLFxuICAgIGNob2ljZXNfSXRlbTogXCLQktCw0YDQuNCw0L3RglwiLFxuICAgIG1hdHJpeF9jb2x1bW46IFwi0KHRg9GC0YPQvVwiLFxuICAgIG1hdHJpeF9yb3c6IFwi0KHQsNGC0YBcIixcbiAgICAvLyBtdWx0aXBsZXRleHRfaXRlbW5hbWU6IFwidGV4dFwiLFxuICAgIHNhdmluZ0RhdGE6IFwi0J3QsNGC0LjSt9CwINCx0LAg0YHQtdGA0LLQtdGAINGB0LDQsdGCINGI0YPQtNCwINC40YHRgtC+0LTQsNCw0L3QtC4uLlwiLFxuICAgIHNhdmluZ0RhdGFFcnJvcjogXCLQpdCw0YLQvtCz06Mg0LHQsCDQsNC80LDQuyDQvtC80LDQtCwg0L3QsNGC0LjSt9CwINGB0LDQsdGCINC90LDRiNGD0LQuXCIsXG4gICAgc2F2aW5nRGF0YVN1Y2Nlc3M6IFwi0J3QsNGC0LjSt9CwINCx0L7QvNGD0LLQsNGE0YTQsNC60LjRj9GCINGB0LDQsdGCINGI0YPQtCFcIixcbiAgICBzYXZlQWdhaW5CdXR0b246IFwi0JHQvtGA0Lgg0LTQuNCz0LDRgCDQutOv0YjQuNGIINC60LDRgNC00LDQvdC0XCIsXG4gICAgdGltZXJNaW46IFwi0LTQsNKbXCIsXG4gICAgdGltZXJTZWM6IFwi0YHQvtC9XCIsXG4gICAgdGltZXJTcGVudEFsbDogXCLQqNGD0LzQviB7MH0g0LTQsNGAINC40L0g0YHQsNKz0LjRhNCwINCy0LAgezF9INC00LDRgCDRg9C80YPQvCDRgdCw0YDRhCDQutCw0YDQtNC10LQuXCIsXG4gICAgdGltZXJTcGVudFBhZ2U6IFwi0KjRg9C80L4gezB9INC00LDRgCDQuNC9INGB0LDSs9C40YTQsCDRgdCw0YDRhCDQutCw0YDQtNC10LQuXCIsXG4gICAgdGltZXJTcGVudFN1cnZleTogXCLQqNGD0LzQviB7MH0g0LTQsNGAINC40L0g0YLQtdGB0YIg0YHQsNGA0YQg0L3QsNC80YPQtNC10LQuXCIsXG4gICAgdGltZXJMaW1pdEFsbDogXCLQqNGD0LzQviB7MH0g0LDQtyB7MX0g0LTQsNGAINC40L0g0YHQsNKz0LjRhNCwINCy0LAgezJ9INCw0LcgezN9INC00LDRgCDRg9C80YPQvCDRgdCw0YDRhCDQutCw0YDQtNC10LQg0LTQsNGAINC00L7RhdC40LvQuCDQuNC9INGC0LXRgdGCLlwiLFxuICAgIHRpbWVyTGltaXRQYWdlOiBcItCo0YPQvNC+IHswfSDQsNC3IHsxfSDQtNCw0YAg0LjQvSDRgdCw0rPQuNGE0LAg0YHQsNGA0YQg0LrQsNGA0LTQtdC0LlwiLFxuICAgIHRpbWVyTGltaXRTdXJ2ZXk6IFwi0KjRg9C80L4gezB9INCw0LcgezF9INC00LDRgCDSs9Cw0LzQsNC4INGC0LXRgdGCINGB0LDRgNGEINC60LDRgNC00LXQtC5cIixcbiAgICBjbGVhckNhcHRpb246IFwi0KLQvtC30LAg0LrQsNGA0LTQsNC9XCIsXG4gICAgLy8gc2lnbmF0dXJlUGxhY2VIb2xkZXI6IFwiU2lnbiBoZXJlXCIsXG4gICAgLy8gY2hvb3NlRmlsZUNhcHRpb246IFwiQ2hvb3NlIGZpbGVcIixcbiAgICByZW1vdmVGaWxlQ2FwdGlvbjogXCLQpNCw0LnQu9GA0L4g0L3QtdGB0YIg0LrQsNGA0LTQsNC9XCIsXG4gICAgLy8gYm9vbGVhbkNoZWNrZWRMYWJlbDogXCJZZXNcIixcbiAgICAvLyBib29sZWFuVW5jaGVja2VkTGFiZWw6IFwiTm9cIixcbiAgICAvLyBjb25maXJtUmVtb3ZlRmlsZTogXCJBcmUgeW91IHN1cmUgdGhhdCB5b3Ugd2FudCB0byByZW1vdmUgdGhpcyBmaWxlOiB7MH0/XCIsXG4gICAgLy8gY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcIkFyZSB5b3Ugc3VyZSB0aGF0IHlvdSB3YW50IHRvIHJlbW92ZSBhbGwgZmlsZXM/XCIsXG4gICAgLy8gcXVlc3Rpb25UaXRsZVBhdHRlcm5UZXh0OiBcIlF1ZXN0aW9uIFRpdGxlXCIsXG4gICAgLy8gbW9kYWxDYW5jZWxCdXR0b25UZXh0OiBcIkNhbmNlbFwiLFxuICAgIC8vIG1vZGFsQXBwbHlCdXR0b25UZXh0OiBcIkFwcGx5XCIsXG4gICAgLy8gZmlsdGVyU3RyaW5nUGxhY2Vob2xkZXI6IFwiVHlwZSB0byBzZWFyY2guLi5cIixcbiAgICAvLyBlbXB0eU1lc3NhZ2U6IFwiTm8gZGF0YSB0byBkaXNwbGF5XCIsXG4gICAgLy8gbm9FbnRyaWVzVGV4dDogXCJUaGVyZSBhcmUgbm8gZW50cmllcyB5ZXQuXFxuQ2xpY2sgdGhlIGJ1dHRvbiBiZWxvdyB0byBhZGQgYSBuZXcgZW50cnkuXCIsXG4gICAgLy8gbW9yZTogXCJNb3JlXCJcbn07XG5zdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3VydmV5TG9jYWxpemF0aW9uXCJdLmxvY2FsZXNbXCJ0Z1wiXSA9IHRhamlrU3VydmV5U3RyaW5ncztcbnN1cnZleV9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdXJ2ZXlMb2NhbGl6YXRpb25cIl0ubG9jYWxlTmFtZXNbXCJ0Z1wiXSA9IFwi0YLQvtK30LjQutOjXCI7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvbG9jYWxpemF0aW9uL3RlbHVndS50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL2xvY2FsaXphdGlvbi90ZWx1Z3UudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiB0ZWx1Z3VTdHJpbmdzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInRlbHVndVN0cmluZ3NcIiwgZnVuY3Rpb24oKSB7IHJldHVybiB0ZWx1Z3VTdHJpbmdzOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBzdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgc3VydmV5LWNvcmUgKi8gXCIuL3NyYy9lbnRyaWVzL2NvcmUudHNcIik7XG5cbnZhciB0ZWx1Z3VTdHJpbmdzID0ge1xuICAgIHBhZ2VQcmV2VGV4dDogXCLgsLXgsYbgsKjgsJXgsJ/gsL9cIixcbiAgICBwYWdlTmV4dFRleHQ6IFwi4LCk4LCw4LGB4LC14LC+4LCvXCIsXG4gICAgY29tcGxldGVUZXh0OiBcIuCwquCxguCwsOCxjeCwpOCwvyDgsJrgsYfgsK/gsILgsKHgsL9cIixcbiAgICBwcmV2aWV3VGV4dDogXCLgsK7gsYHgsILgsKbgsYHgsJfgsL4g4LC14LGA4LCV4LGN4LC34LC/4LCC4LCa4LGBXCIsXG4gICAgZWRpdFRleHQ6IFwi4LCu4LC+4LCw4LGN4LCq4LGB4LCy4LGBIOCwmuCxhuCwr+CxjeCwr+Cwv1wiLFxuICAgIHN0YXJ0U3VydmV5VGV4dDogXCLgsKrgsY3gsLDgsL7gsLDgsILgsK3gsL/gsILgsJrgsYFcIixcbiAgICBvdGhlckl0ZW1UZXh0OiBcIuCwh+CwpOCwsOCwruCxiOCwqCjgsLXgsL/gsLXgsLDgsL/gsILgsJrgsILgsKHgsL8pXCIsXG4gICAgbm9uZUl0ZW1UZXh0OiBcIuCwjuCwteCwsOCxgSDgsJXgsL7gsKbgsYFcIixcbiAgICBzZWxlY3RBbGxJdGVtVGV4dDogXCLgsIXgsKjgsY3gsKjgsL8g4LCO4LCC4LCa4LGB4LCV4LGLXCIsXG4gICAgcHJvZ3Jlc3NUZXh0OiBcIuCwquCxh+CwnOCxgHswfS97MX1cIixcbiAgICBpbmRleFRleHQ6IFwiezF9IHswfVvgsK7gsL7gsLDgsY3gsJrgsYFdXCIsXG4gICAgcGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0OiBcIuCwpuCwvuCwluCwsuCwvuCwsuCxgXswfS97MX1cIixcbiAgICBwYW5lbER5bmFtaWNUYWJUZXh0Rm9ybWF0OiBcIlBhbmVsIHtwYW5lbEluZGV4fVwiLFxuICAgIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCJ7MH0vezF9IOCwquCxjeCwsOCwtuCxjeCwqOCwsuCwleCxgSDgsJzgsLXgsL7gsKzgsYEg4LCH4LC14LGN4LC14LCh4LCCIOCwheCwr+Cwv+CwqOCwpuCwv1wiLFxuICAgIGVtcHR5U3VydmV5OiBcIuCwiCDgsLjgsLDgsY3gsLXgsYfgsLLgsYsg4LCq4LGH4LCc4LGA4LCy4LGBIOCwl+CwvuCwqOCwvyDgsKrgsY3gsLDgsLbgsY3gsKjgsLLgsYEg4LCX4LC+4LCo4LC/IOCwleCwqOCwrOCwoeCxgeCwnyDgsLLgsYfgsKbgsYFcIixcbiAgICBjb21wbGV0aW5nU3VydmV5OiBcIuCwuOCwsOCxjeCwteCxh+CwqOCxgSDgsK7gsYHgsJfgsL/gsILgsJrgsL8g4LCo4LCC4LCm4LGB4LCV4LGBIOCwp+CwqOCxjeCwr+CwteCwvuCwpuCwruCxgeCwsuCxgVwiLFxuICAgIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6IFwiIOCwruCxgOCwsOCxgSDgsIfgsKrgsY3gsKrgsJ/gsL/gsJXgsYcg4LC44LCw4LGN4LC14LGH4LCo4LGBIOCwruCxgeCwl+Cwv+CwguCwmuCwv+CwqOCwn+CxjeCwsuCxgSDgsK7gsL4g4LCw4LC/4LCV4LC+4LCw4LGN4LCh4LGB4LCy4LGBIOCwmuCxguCwquCwv+CwuOCxjeCwpOCxgeCwqOCxjeCwqOCwvuCwr+Cwv1wiLFxuICAgIGxvYWRpbmdTdXJ2ZXk6IFwi4LC44LCw4LGN4LC14LGHIOCwsuCxi+CwoeCxjSDgsIXgsLXgsYHgsKTgsYHgsILgsKbgsL9cIixcbiAgICBwbGFjZWhvbGRlcjogXCLgsI7gsKjgsY3gsKjgsYHgsJXgsYvgsILgsKHgsL9cIixcbiAgICByYXRpbmdPcHRpb25zQ2FwdGlvbjogXCLgsI7gsILgsJrgsYEuLi5cIixcbiAgICB2YWx1ZTogXCLgsLXgsL/gsLLgsYHgsLVcIixcbiAgICByZXF1aXJlZEVycm9yOiBcIuCwpuCwr+CwmuCxh+CwuOCwvyDgsKrgsY3gsLDgsLbgsY3gsKjgsJXgsYEg4LCc4LC14LC+4LCs4LGBIOCwh+CwteCxjeCwteCwguCwoeCwv1wiLFxuICAgIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcIuCwpuCwr+CwmuCxh+CwuOCwvyDgsJXgsKjgsYDgsLjgsIIg4LCS4LCV4LGN4LCVIOCwquCxjeCwsOCwtuCxjeCwqOCwleCxiOCwqOCwviDgsJzgsLXgsL7gsKzgsYEg4LCH4LC14LGN4LC14LCC4LCh4LC/XCIsXG4gICAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCLgsKbgsK/gsJrgsYfgsLjgsL8g4LCF4LCo4LGN4LCo4LC/IOCwteCwsOCxgeCwuOCwsuCwsuCxiyDgsIngsKjgsY3gsKgg4LCq4LGN4LCw4LC24LGN4LCo4LCy4LCV4LGBIOCwnOCwteCwvuCwrOCxgSDgsIfgsLXgsY3gsLXgsILgsKHgsL9cIixcbiAgICBudW1lcmljRXJyb3I6IFwi4LC14LC/4LCy4LGB4LC14LCo4LGBIOCwuOCwguCwluCxjeCwr+CwsuCwsuCxiyDgsKTgsYbgsLLgsL/gsK/gsJzgsYfgsK/gsILgsKHgsL9cIixcbiAgICBtaW5FcnJvcjogXCLgsLXgsL/gsLLgsYHgsLUgezB9IOCwleCwguCwn+CxhyDgsKTgsJXgsY3gsJXgsYHgsLXgsJfgsL4g4LCJ4LCC4LCh4LCV4LGC4LCh4LCm4LGBLlwiLFxuICAgIG1heEVycm9yOiBcIuCwteCwv+CwsuCxgeCwtSB7MH0g4LCV4LCC4LCf4LGHIOCwjuCwleCxjeCwleCxgeCwtSDgsIngsILgsKHgsJXgsYLgsKHgsKbgsYEuXCIsXG4gICAgdGV4dE1pbkxlbmd0aDogXCLgsKbgsK/gsJrgsYfgsLjgsL8g4LCV4LCo4LGA4LC44LCCIHswfSDgsIXgsJXgsY3gsLfgsLDgsL7gsLLgsKjgsYEg4LCo4LCu4LGL4LCm4LGBIOCwmuCxh+Cwr+CwguCwoeCwv1wiLFxuICAgIHRleHRNYXhMZW5ndGg6IFwi4LCm4LCv4LCa4LGH4LC44LC/IHswfSDgsJXgsKjgsY3gsKjgsL4g4LCk4LCV4LGN4LCV4LGB4LC1IOCwheCwleCxjeCwt+CwsOCwvuCwsuCwqOCxgSDgsKjgsK7gsYvgsKbgsYEg4LCa4LGH4LCv4LCC4LCh4LC/XCIsXG4gICAgdGV4dE1pbk1heExlbmd0aDogXCLgsKbgsK/gsJrgsYfgsLjgsL8gezB9IOCwleCwqOCxjeCwqOCwviDgsI7gsJXgsY3gsJXgsYHgsLUg4LCu4LCw4LC/4LCv4LGBezF9IOCwleCwqOCxjeCwqOCwviDgsKTgsJXgsY3gsJXgsYHgsLUg4LCF4LCV4LGN4LC34LCw4LC+4LCy4LCo4LGBIOCwqOCwruCxi+CwpuCxgSDgsJrgsYfgsK/gsILgsKHgsL9cIixcbiAgICBtaW5Sb3dDb3VudEVycm9yOiBcIuCwpuCwr+CwmuCxh+CwuOCwvyDgsJXgsKjgsYDgsLjgsIIgezB94LC14LCw4LGB4LC44LCy4LCo4LGBIOCwquCxguCwsOCwv+CwguCwmuCwguCwoeCwv1wiLFxuICAgIG1pblNlbGVjdEVycm9yOiBcIuCwpuCwr+CwmuCxh+CwuOCwvyDgsJXgsKjgsYDgsLjgsIJ7MH0g4LCw4LCV4LC+4LCy4LCo4LGBIOCwjuCwqOCxjeCwqOCxgeCwleCxi+CwguCwoeCwv1wiLFxuICAgIG1heFNlbGVjdEVycm9yOiBcIuCwpuCwr+CwmuCxh+CwuOCwvyB7MH0g4LCV4LCo4LGN4LCo4LC+IOCwjuCwleCxjeCwleCxgeCwtSDgsLDgsJXgsL7gsLLgsKjgsYEg4LCO4LCo4LGN4LCo4LGB4LCV4LGLIOCwleCwguCwoeCwv1wiLFxuICAgIG51bWVyaWNNaW5NYXg6IFwiJ3swfScgezF94LCk4LGKIOCwuOCwruCwvuCwqOCwguCwl+CwviDgsLLgsYfgsKbgsL4gezF9IOCwleCwqOCxjeCwqOCwviDgsI7gsJXgsY3gsJXgsYHgsLUg4LCX4LC+IOCwruCwsOCwv+Cwr+CxgSAgezJ94LCV4LCo4LGN4LCo4LC+IOCwpOCwleCxjeCwleCxgeCwtSDgsIngsILgsKHgsL7gsLLgsL8g4LCy4LGG4LCm4LC+IHsyfeCwpOCxiiDgsLjgsK7gsL7gsKjgsILgsJfgsL4g4LCJ4LCC4LCh4LC+4LCy4LC/XCIsXG4gICAgbnVtZXJpY01pbjogXCInJ3swfScgezF94LCk4LGKICDgsLjgsK7gsL7gsKjgsILgsJfgsL4g4LCy4LGH4LCm4LC+ICB7MX3gsJXgsKjgsY3gsKjgsL4g4LCO4LCV4LGN4LCV4LGB4LC14LCX4LC+IOCwieCwguCwoeCwvuCwsuCwv1wiLFxuICAgIG51bWVyaWNNYXg6IFwiJ3swfScgIHsxfSAg4LCk4LCV4LGN4LCV4LGB4LC1IOCwsuCxh+CwpuCwviDgsLjgsK7gsL7gsKjgsILgsJfgsL4g4LCJ4LCC4LCh4LC+4LCy4LC/XCIsXG4gICAgaW52YWxpZEVtYWlsOiBcIuCwpuCwr+CwmuCxh+CwuOCwvyDgsLjgsLDgsYjgsKgg4LCI4LCu4LGG4LCv4LC/4LCy4LGNICDgsKjgsK7gsYvgsKbgsYEg4LCa4LGH4LCv4LCC4LCh4LC/XCIsXG4gICAgaW52YWxpZEV4cHJlc3Npb246IFwiezB9ICfgsKjgsL/gsJzgsIInIOCwheCwqOCwvyDgsKTgsL/gsLDgsL/gsJfgsL/gsLXgsY3gsLXgsL7gsLLgsL9cIixcbiAgICB1cmxSZXF1ZXN0RXJyb3I6IFwi4LC14LC/4LCo4LGN4LCo4LCq4LCu4LGBIHswfSDgsKjgsL8g4LCk4LCq4LGN4LCq4LGB4LCX4LC+IOCwl+CxgeCwsOCxjeCwpOCwv+CwguCwmuCwv+CwguCwpuCwvyB7MX1cIixcbiAgICB1cmxHZXRDaG9pY2VzRXJyb3I6IFwi4LC14LC/4LCo4LGN4LCo4LCq4LCu4LGBIOCwluCwvuCws+CxgCDgsKHgsYfgsJ/gsL7gsKjgsL8g4LCk4LC/4LCw4LC/4LCX4LC/4LCa4LGN4LCa4LC/4LCC4LCm4LC/LCDgsLLgsYfgsKbgsL4gcGF0aCDgsKTgsKrgsY3gsKrgsYjgsKgg4LCm4LC/XCIsXG4gICAgZXhjZWVkTWF4U2l6ZTogXCLgsKvgsYjgsLLgsY0g4LCq4LCw4LC/4LCu4LC+4LCj4LCCezB9IOCwleCwguCwn+CxhyDgsKrgsYbgsKbgsY3gsKbgsKbgsL/gsJfgsL4g4LCJ4LCC4LCh4LCV4LGC4LCh4LCm4LGBXCIsXG4gICAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIuCwpuCwr+CwmuCxh+CwuOCwvyDgsIfgsKTgsLAg4LC14LC/4LCy4LGB4LC14LCy4LCo4LGBIOCwqOCwruCxiyDgsKbgsL/gsILgsJrgsILgsKHgsL9cIixcbiAgICB1cGxvYWRpbmdGaWxlOiBcIuCwruCxgCDgsKvgsYjgsLLgsY0g4LCF4LCq4LGN4LCy4LGL4LCh4LGNIOCwheCwteCxgeCwpOCxgeCwqOCxjeCwqOCwpuCwvyDgsKbgsK/gsJrgsYfgsLjgsL8g4LCV4LGK4LCo4LGN4LCo4LC/IOCwuOCxhuCwleCwguCwoeCxjeCwsuCxgSDgsLXgsYfgsJrgsL8g4LCJ4LCC4LCh4LCC4LCh4LC/IOCwruCwsOCwv+Cwr+CxgSDgsK7gsLPgsY3gsLLgsYAg4LCq4LGN4LCw4LCv4LCk4LGN4LCo4LC/4LCC4LCa4LCC4LCh4LC/XCIsXG4gICAgbG9hZGluZ0ZpbGU6IFwi4LCy4LGL4LCh4LGNIOCwheCwteCxgeCwpOCxgeCwqOCxjeCwqOCwpuCwv1wiLFxuICAgIGNob29zZUZpbGU6IFwi4LCr4LGI4LCz4LGN4LCy4LCo4LGBIOCwjuCwqOCxjeCwqOCxgeCwleCxi+CwguCwoeCwv1wiLFxuICAgIG5vRmlsZUNob3NlbjogXCLgsI8g4LCr4LGI4LCy4LGNIOCwjuCwqOCxjeCwqOCxgeCwleCxiyDgsLLgsYfgsKbgsYFcIixcbiAgICBmaWxlRHJhZ0FyZWFQbGFjZWhvbGRlcjogXCLgsIfgsJXgsY3gsJXgsKEg4LCS4LCVIOCwq+CxiOCwsuCxjSDgsKjgsYEg4LCh4LGN4LCw4LC+4LCX4LGNIOCwmuCxh+CwuOCwvyDgsKHgsY3gsLDgsL7gsKrgsY0g4LCa4LGH4LCv4LCC4LCh4LC/IOCwsuCxh+CwpuCwviDgsKbgsL/gsJfgsYHgsLUg4LCs4LCf4LCo4LGNIOCwleCxjeCwsuCwv+CwleCxjSDgsJrgsYfgsK/gsILgsKHgsL8g4LCu4LCw4LC/4LCv4LGBIOCwheCwquCxjSDgsLLgsYvgsKHgsY0g4LCa4LGH4LCv4LCh4LC+4LCo4LC/4LCV4LC/IOCwq+CxiOCwsuCxjSDgsI7gsILgsJrgsYHgsJXgsYvgsILgsKHgsL8uXCIsXG4gICAgY29uZmlybURlbGV0ZTogXCLgsK7gsYDgsLDgsYEg4LCw4LC/4LCV4LC+4LCw4LGN4LCh4LGB4LCy4LCo4LGBIOCwpOCxiuCwsuCwl+Cwv+CwguCwmuCwvuCwsuCwqOCwvyDgsIXgsKjgsYHgsJXgsYHgsILgsJ/gsYHgsKjgsY3gsKjgsL7gsLDgsL5cIixcbiAgICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcIuCwteCwv+CwsuCxgeCwtSDgsKrgsY3gsLDgsKTgsY3gsK/gsYfgsJXgsILgsJfgsL4g4LCJ4LCC4LCh4LC+4LCy4LC/XCIsXG4gICAgYWRkQ29sdW1uOiBcIuCwleCwvuCwsuCwgiDgsJrgsYfgsLDgsY3gsKrgsL/gsILgsJrgsILgsKHgsL9cIixcbiAgICBhZGRSb3c6IFwi4LC14LCw4LGB4LC44LCy4LGBIOCwmuCxh+CwsOCxjeCwquCwv+CwguCwmuCwguCwoeCwv1wiLFxuICAgIHJlbW92ZVJvdzogXCLgsKTgsYDgsLjgsYfgsK/gsILgsKHgsL9cIixcbiAgICBlbXB0eVJvd3NUZXh0OiBcIuCwteCwsOCxgeCwuOCwsuCxgSDgsLLgsYfgsLXgsYEuXCIsXG4gICAgYWRkUGFuZWw6IFwi4LCV4LGK4LCk4LGN4LCkIOCwpuCwvuCwqOCxjeCwqOCwvyDgsJrgsYfgsLDgsY3gsKrgsL/gsILgsJrgsILgsKHgsL9cIixcbiAgICByZW1vdmVQYW5lbDogXCLgsKTgsYDgsLjgsYfgsK/gsILgsKHgsL9cIixcbiAgICBjaG9pY2VzX0l0ZW06IFwi4LC14LC44LGN4LCk4LGB4LC14LGB4LCy4LGBXCIsXG4gICAgbWF0cml4X2NvbHVtbjogXCLgsJXgsL7gsLLgsIIgXCIsXG4gICAgbWF0cml4X3JvdzogXCLgsLXgsLDgsYHgsLhcIixcbiAgICBtdWx0aXBsZXRleHRfaXRlbW5hbWU6IFwi4LC14LCa4LCo4LCCXCIsXG4gICAgc2F2aW5nRGF0YTogXCLgsKvgsLLgsL/gsKTgsL7gsILgsLbgsL7gsLLgsYEg4LC44LCw4LGN4LC14LCw4LGN4LCy4LGLIOCwuOCxh+CwteCxjSDgsIXgsLXgsYHgsKTgsYHgsKjgsY3gsKjgsL7gsK/gsL9cIixcbiAgICBzYXZpbmdEYXRhRXJyb3I6IFwi4LCS4LCVIOCwsuCxi+CwquCwruCxgSDgsLjgsILgsK3gsLXgsL/gsILgsJrgsL/gsKjgsKbgsL8g4LCF4LCC4LCm4LGB4LCV4LCo4LC/IOCwq+CwsuCwv+CwpOCwvuCwguCwtuCwvuCwsuCwqOCxgSDgsLjgsYfgsLXgsY0g4LCa4LGH4LCv4LCy4LGH4LCV4LCq4LGL4LCv4LC+4LCu4LGBICBcIixcbiAgICBzYXZpbmdEYXRhU3VjY2VzczogXCLgsKvgsLLgsL/gsKTgsL7gsILgsLbgsL7gsLLgsKjgsYEg4LC14LC/4LCc4LCv4LC14LCC4LCk4LCC4LCX4LC+IOCwuOCxh+CwteCxjSDgsJrgsYfgsLjgsL7gsK7gsYFcIixcbiAgICBzYXZlQWdhaW5CdXR0b246IFwi4LCu4LCz4LGN4LCy4LGAIOCwquCxjeCwsOCwr+CwpOCxjeCwqOCwv+CwguCwmuCxgVwiLFxuICAgIHRpbWVyTWluOiBcIuCwqOCwv+CwruCwv+Cwt+CwvuCwsuCxgSBcIixcbiAgICB0aW1lclNlYzogXCLgsLjgsYbgsJXgsILgsKHgsY3gsLLgsYFcIixcbiAgICB0aW1lclNwZW50QWxsOiBcIuCwiCDgsKrgsYfgsJzgsYAg4LCq4LGI4LCoIOCwruCxgOCwsOCxgXswfSAg4LCJ4LCq4LCv4LGL4LCX4LC/4LCC4LCa4LC+4LCw4LGBIOCwruCxiuCwpOCxjeCwpOCwguCwl+CwviAgezF9IOCwieCwquCwr+Cxi+Cwl+Cwv+CwguCwmuCwvuCwsOCxgVwiLFxuICAgIHRpbWVyU3BlbnRQYWdlOiBcIuCwiCDgsKrgsYfgsJzgsYAg4LCq4LGI4LCoIOCwruCxgOCwsOCxgXswfSDgsIngsKrgsK/gsYvgsJfgsL/gsILgsJrgsL7gsLDgsYFcIixcbiAgICB0aW1lclNwZW50U3VydmV5OiBcIuCwruCxgOCwsOCxgSDgsK7gsYrgsKTgsY3gsKTgsILgsJfgsL4gezB9ICDgsIngsKrgsK/gsYvgsJfgsL/gsILgsJrgsL7gsLDgsYFcIixcbiAgICB0aW1lckxpbWl0QWxsOiBcIuCwiCDgsKrgsYfgsJzgsYAg4LCq4LGI4LCoIOCwruCxgOCwsOCxgSB7MX3gsLLgsYsgezB9IOCwreCwvuCwl+CwvuCwqOCxjeCwqOCwvyDgsIngsKrgsK/gsYvgsJfgsL/gsILgsJrgsL7gsLDgsYEuIOCwruCxi+CwpOCwguCwl+CwviB7M33gsLLgsYsgezJ9IOCwreCwvuCwl+CwvuCwqOCxjeCwqOCwvyDgsIngsKrgsK/gsYvgsJfgsL/gsILgsJrgsL7gsLDgsYEuXCIsXG4gICAgdGltZXJMaW1pdFBhZ2U6IFwi4LCIIOCwquCxh+CwnOCxgOCwsuCxiyDgsK7gsYDgsLDgsYEgezF94LCy4LGL4LCo4LC/ezB9IOCwqOCwvyDgsIngsKrgsK/gsYvgsJfgsL/gsILgsJrgsL7gsLDgsYFcIixcbiAgICB0aW1lckxpbWl0U3VydmV5OiBcIiDgsK7gsYrgsKTgsY3gsKTgsILgsJfgsL4g4LCu4LGA4LCw4LGBIHsxfSDgsLLgsYsgezB9IOCwqOCwvyDgsIngsKrgsK/gsYvgsJfgsL/gsILgsJrgsL7gsLDgsYEgXCIsXG4gICAgY2xlYXJDYXB0aW9uOiBcIuCwuOCxjeCwquCwt+CxjeCwn+CwruCxjVwiLFxuICAgIHNpZ25hdHVyZVBsYWNlSG9sZGVyOiBcIuCwh+CwleCxjeCwleCwoSDgsLjgsILgsKTgsJXgsIIg4LCa4LGH4LCv4LCC4LCh4LC/XCIsXG4gICAgY2hvb3NlRmlsZUNhcHRpb246IFwi4LCr4LGI4LCy4LGNIOCwjuCwguCwmuCxgeCwleCxi+CwguCwoeCwv1wiLFxuICAgIHRha2VQaG90b0NhcHRpb246IFwi4LCr4LGL4LCf4LGLIOCwpOCxgOCwuOCxgeCwleCxi+CwguCwoeCwv1wiLFxuICAgIGNhbWVyYVBsYWNlSG9sZGVyOiBcIuCwleCxhuCwruCxhuCwsOCwvuCwqOCxgSDgsIngsKrgsK/gsYvgsJfgsL/gsILgsJrgsL8g4LCr4LGL4LCf4LGLIOCwpOCxgOCwr+CwoeCwvuCwqOCwv+CwleCwvyDgsKbgsL/gsJfgsYHgsLUg4LCs4LCf4LCo4LGNIOCwruCxgOCwpiDgsJXgsY3gsLLgsL/gsJXgsY0g4LCa4LGH4LCv4LCC4LCh4LC/LlwiLFxuICAgIGZpbGVDYW1lcmFEcmFnQXJlYVBsYWNlSG9sZGVyOiBcIuCwleCxhuCwruCxhuCwsOCwvuCwqOCxgSDgsIngsKrgsK/gsYvgsJfgsL/gsILgsJrgsL8g4LCr4LGL4LCf4LGL4LCo4LGBIOCwheCwquCxjSDgsLLgsYvgsKHgsY0g4LCa4LGH4LCv4LCh4LC+4LCo4LC/4LCV4LC/IOCwsuCxh+CwpuCwviDgsKTgsYDgsK/gsKHgsL7gsKjgsL/gsJXgsL8g4LCr4LGI4LCy4LGNIOCwqOCxgSDgsKHgsY3gsLDgsL7gsJfgsY0g4LCu4LCw4LC/4LCv4LGBIOCwoeCxjeCwsOCwvuCwquCxjSDgsJrgsYfgsK/gsILgsKHgsL8g4LCy4LGH4LCm4LC+IOCwjuCwguCwmuCxgeCwleCxi+CwguCwoeCwvy5cIixcbiAgICByZXBsYWNlRmlsZUNhcHRpb246IFwi4LCr4LGI4LCy4LGBIOCwruCwvuCwsOCxjeCwmuCwguCwoeCwv1wiLFxuICAgIHJlbW92ZUZpbGVDYXB0aW9uOiBcIuCwiCDgsKvgsYjgsLLgsY0g4LCk4LGA4LC44LGH4LCv4LCC4LCh4LC/XCIsXG4gICAgYm9vbGVhbkNoZWNrZWRMYWJlbDogXCLgsIXgsLXgsYHgsKjgsYFcIixcbiAgICBib29sZWFuVW5jaGVja2VkTGFiZWw6IFwi4LCy4LGH4LCm4LGBXCIsXG4gICAgY29uZmlybVJlbW92ZUZpbGU6IFwiIOCwiCDgsKvgsYjgsLLgsY3gsKjgsL8g4LCk4LGA4LCv4LC/4LCC4LCa4LC+4LCy4LCo4LC/IOCwruCxgOCwsOCxgSDgsJbgsJrgsY3gsJrgsL/gsKTgsILgsJfgsL4g4LCF4LCo4LGB4LCV4LGB4LCC4LCf4LGB4LCo4LGN4LCo4LC+4LCw4LC+OnswfSA/XCIsXG4gICAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcIuCwheCwqOCxjeCwqOCwvyDgsKvgsYjgsLPgsY3gsLLgsKjgsYEg4LCk4LGA4LC44LGH4LCv4LC+4LCy4LCo4LC/IOCwruCxgOCwsOCxgSDgsJbgsJrgsY3gsJrgsL/gsKTgsILgsJfgsL4g4LCF4LCo4LGB4LCV4LGB4LCC4LCf4LGB4LCo4LGN4LCo4LC+4LCw4LC+XCIsXG4gICAgcXVlc3Rpb25UaXRsZVBhdHRlcm5UZXh0OiBcIuCwquCxjeCwsOCwtuCxjeCwqCDgsLbgsYDgsLDgsY3gsLfgsL/gsJVcIixcbiAgICBtb2RhbENhbmNlbEJ1dHRvblRleHQ6IFwi4LCw4LCm4LGN4LCm4LGBXCIsXG4gICAgbW9kYWxBcHBseUJ1dHRvblRleHQ6IFwi4LC44LCw4LC/4LCq4LCh4LGBXCIsXG4gICAgZmlsdGVyU3RyaW5nUGxhY2Vob2xkZXI6IFwi4LC24LGL4LCn4LC/4LCC4LCa4LCh4LC+4LCo4LC/4LCV4LC/IOCwn+CxiOCwquCxjSDgsJrgsYfgsK/gsILgsKHgsL8uLi5cIixcbiAgICBlbXB0eU1lc3NhZ2U6IFwi4LCh4LC/4LC44LGNIOCwquCxjeCwsuCxhyDgsJrgsYfgsK/gsKHgsL7gsKjgsL/gsJXgsL8g4LCh4LGH4LCf4LC+IOCwsuCxh+CwpuCxgVwiLFxuICAgIG5vRW50cmllc1RleHQ6IFwi4LCH4LCC4LCV4LC+IOCwjuCwsuCwvuCwguCwn+CwvyDgsI7gsILgsJ/gsY3gsLDgsYDgsLLgsYEg4LCy4LGH4LC14LGBLlxcbuCwleCxiuCwpOCxjeCwpCDgsI7gsILgsJ/gsY3gsLDgsYDgsKjgsL8g4LCc4LGL4LCh4LC/4LCC4LCa4LCh4LCCIOCwleCxiuCwsOCwleCxgSDgsKbgsL/gsJfgsYHgsLUg4LCs4LCf4LCo4LGNIOCwruCxgOCwpiDgsJXgsY3gsLLgsL/gsJXgsY0g4LCa4LGH4LCv4LCC4LCh4LC/LlwiLFxuICAgIG5vRW50cmllc1JlYWRvbmx5VGV4dDogXCLgsI7gsLLgsL7gsILgsJ/gsL8g4LCO4LCC4LCf4LGN4LCw4LGA4LCy4LGBIOCwsuCxh+CwteCxgS5cIixcbiAgICBtb3JlOiBcIuCwjuCwleCxjeCwleCxgeCwtVwiLFxuICAgIHRhZ2JveERvbmVCdXR0b25DYXB0aW9uOiBcIuCwuOCwsOCxh1wiLFxuICAgIHNlbGVjdFRvUmFua0VtcHR5UmFua2VkQXJlYVRleHQ6IFwi4LCF4LCo4LGN4LCo4LC/IOCwjuCwguCwquCwv+CwleCwsuCxgSDgsLDgsY3gsK/gsL7gsILgsJXgsY0g4LCa4LGH4LCv4LCs4LCh4LCk4LC+4LCv4LC/XCIsXG4gICAgc2VsZWN0VG9SYW5rRW1wdHlVbnJhbmtlZEFyZWFUZXh0OiBcIuCwteCwvuCwn+Cwv+CwqOCwvyDgsLDgsY3gsK/gsL7gsILgsJXgsY0g4LCa4LGH4LCv4LCh4LCCIOCwleCxiuCwsOCwleCxgSDgsI7gsILgsKrgsL/gsJXgsLLgsKjgsYEg4LCH4LCV4LGN4LCV4LChIOCwoeCxjeCwsOCwvuCwl+CxjSDgsK7gsLDgsL/gsK/gsYEg4LCh4LGN4LCw4LC+4LCq4LGNIOCwmuCxh+Cwr+CwguCwoeCwv1wiXG59O1xuc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN1cnZleUxvY2FsaXphdGlvblwiXS5sb2NhbGVzW1widGVsXCJdID0gdGVsdWd1U3RyaW5ncztcbnN1cnZleV9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdXJ2ZXlMb2NhbGl6YXRpb25cIl0ubG9jYWxlTmFtZXNbXCJ0ZWxcIl0gPSBcIlRlbHVndVwiO1xuLy8gVGhlIGZvbGxvd2luZyBzdHJpbmdzIGhhdmUgYmVlbiB0cmFuc2xhdGVkIGJ5IGEgbWFjaGluZSB0cmFuc2xhdGlvbiBzZXJ2aWNlXG4vLyBSZW1vdmUgdGhvc2Ugc3RyaW5ncyB0aGF0IHlvdSBoYXZlIGNvcnJlY3RlZCBtYW51YWxseVxuLy8gbm9uZUl0ZW1UZXh0OiBcIk5vbmVcIiA9PiBcIuCwjuCwteCwsOCxgSDgsJXgsL7gsKbgsYFcIlxuLy8gaW5kZXhUZXh0OiBcInswfSBvZiB7MX1cIiA9PiBcInsxfSB7MH1b4LCu4LC+4LCw4LGN4LCa4LGBXVwiXG4vLyBwYW5lbER5bmFtaWNUYWJUZXh0Rm9ybWF0OiBcIlBhbmVsIHtwYW5lbEluZGV4fVwiID0+IFwiUGFuZWwge3BhbmVsSW5kZXh9XCJcbi8vIHJhdGluZ09wdGlvbnNDYXB0aW9uOiBcIlNlbGVjdC4uLlwiID0+IFwi4LCO4LCC4LCa4LGBLi4uXCJcbi8vIG1pbkVycm9yOiBcIlRoZSB2YWx1ZSBzaG91bGQgbm90IGJlIGxlc3MgdGhhbiB7MH1cIiA9PiBcIuCwteCwv+CwsuCxgeCwtSB7MH0g4LCV4LCC4LCf4LGHIOCwpOCwleCxjeCwleCxgeCwteCwl+CwviDgsIngsILgsKHgsJXgsYLgsKHgsKbgsYEuXCJcbi8vIG1heEVycm9yOiBcIlRoZSB2YWx1ZSBzaG91bGQgbm90IGJlIGdyZWF0ZXIgdGhhbiB7MH1cIiA9PiBcIuCwteCwv+CwsuCxgeCwtSB7MH0g4LCV4LCC4LCf4LGHIOCwjuCwleCxjeCwleCxgeCwtSDgsIngsILgsKHgsJXgsYLgsKHgsKbgsYEuXCJcbi8vIGZpbGVEcmFnQXJlYVBsYWNlaG9sZGVyOiBcIkRyYWcgYW5kIGRyb3AgYSBmaWxlIGhlcmUgb3IgY2xpY2sgdGhlIGJ1dHRvbiBiZWxvdyBhbmQgY2hvb3NlIGEgZmlsZSB0byB1cGxvYWQuXCIgPT4gXCLgsIfgsJXgsY3gsJXgsKEg4LCS4LCVIOCwq+CxiOCwsuCxjSDgsKjgsYEg4LCh4LGN4LCw4LC+4LCX4LGNIOCwmuCxh+CwuOCwvyDgsKHgsY3gsLDgsL7gsKrgsY0g4LCa4LGH4LCv4LCC4LCh4LC/IOCwsuCxh+CwpuCwviDgsKbgsL/gsJfgsYHgsLUg4LCs4LCf4LCo4LGNIOCwleCxjeCwsuCwv+CwleCxjSDgsJrgsYfgsK/gsILgsKHgsL8g4LCu4LCw4LC/4LCv4LGBIOCwheCwquCxjSDgsLLgsYvgsKHgsY0g4LCa4LGH4LCv4LCh4LC+4LCo4LC/4LCV4LC/IOCwq+CxiOCwsuCxjSDgsI7gsILgsJrgsYHgsJXgsYvgsILgsKHgsL8uXCJcbi8vIGVtcHR5Um93c1RleHQ6IFwiVGhlcmUgYXJlIG5vIHJvd3MuXCIgPT4gXCLgsLXgsLDgsYHgsLjgsLLgsYEg4LCy4LGH4LC14LGBLlwiXG4vLyBtdWx0aXBsZXRleHRfaXRlbW5hbWU6IFwidGV4dFwiID0+IFwi4LC14LCa4LCo4LCCXCJcbi8vIHNpZ25hdHVyZVBsYWNlSG9sZGVyOiBcIlNpZ24gaGVyZVwiID0+IFwi4LCH4LCV4LGN4LCV4LChIOCwuOCwguCwpOCwleCwgiDgsJrgsYfgsK/gsILgsKHgsL9cIlxuLy8gbW9kYWxDYW5jZWxCdXR0b25UZXh0OiBcIkNhbmNlbFwiID0+IFwi4LCw4LCm4LGN4LCm4LGBXCJcbi8vIG1vZGFsQXBwbHlCdXR0b25UZXh0OiBcIkFwcGx5XCIgPT4gXCLgsLjgsLDgsL/gsKrgsKHgsYFcIlxuLy8gZmlsdGVyU3RyaW5nUGxhY2Vob2xkZXI6IFwiVHlwZSB0byBzZWFyY2guLi5cIiA9PiBcIuCwtuCxi+Cwp+Cwv+CwguCwmuCwoeCwvuCwqOCwv+CwleCwvyDgsJ/gsYjgsKrgsY0g4LCa4LGH4LCv4LCC4LCh4LC/Li4uXCJcbi8vIGVtcHR5TWVzc2FnZTogXCJObyBkYXRhIHRvIGRpc3BsYXlcIiA9PiBcIuCwoeCwv+CwuOCxjSDgsKrgsY3gsLLgsYcg4LCa4LGH4LCv4LCh4LC+4LCo4LC/4LCV4LC/IOCwoeCxh+Cwn+CwviDgsLLgsYfgsKbgsYFcIlxuLy8gbm9FbnRyaWVzVGV4dDogXCJUaGVyZSBhcmUgbm8gZW50cmllcyB5ZXQuXFxuQ2xpY2sgdGhlIGJ1dHRvbiBiZWxvdyB0byBhZGQgYSBuZXcgZW50cnkuXCIgPT4gXCLgsIfgsILgsJXgsL4g4LCO4LCy4LC+4LCC4LCf4LC/IOCwjuCwguCwn+CxjeCwsOCxgOCwsuCxgSDgsLLgsYfgsLXgsYEuXFxu4LCV4LGK4LCk4LGN4LCkIOCwjuCwguCwn+CxjeCwsOCxgOCwqOCwvyDgsJzgsYvgsKHgsL/gsILgsJrgsKHgsIIg4LCV4LGK4LCw4LCV4LGBIOCwpuCwv+Cwl+CxgeCwtSDgsKzgsJ/gsKjgsY0g4LCu4LGA4LCmIOCwleCxjeCwsuCwv+CwleCxjSDgsJrgsYfgsK/gsILgsKHgsL8uXCJcbi8vIG5vRW50cmllc1JlYWRvbmx5VGV4dDogXCJUaGVyZSBhcmUgbm8gZW50cmllcy5cIiA9PiBcIuCwjuCwsuCwvuCwguCwn+CwvyDgsI7gsILgsJ/gsY3gsLDgsYDgsLLgsYEg4LCy4LGH4LC14LGBLlwiXG4vLyBtb3JlOiBcIk1vcmVcIiA9PiBcIuCwjuCwleCxjeCwleCxgeCwtVwiXG4vLyB0YWdib3hEb25lQnV0dG9uQ2FwdGlvbjogXCJPS1wiID0+IFwi4LC44LCw4LGHXCJcbi8vIHNlbGVjdFRvUmFua0VtcHR5UmFua2VkQXJlYVRleHQ6IFwiQWxsIGNob2ljZXMgYXJlIHJhbmtlZFwiID0+IFwi4LCF4LCo4LGN4LCo4LC/IOCwjuCwguCwquCwv+CwleCwsuCxgSDgsLDgsY3gsK/gsL7gsILgsJXgsY0g4LCa4LGH4LCv4LCs4LCh4LCk4LC+4LCv4LC/XCJcbi8vIHNlbGVjdFRvUmFua0VtcHR5VW5yYW5rZWRBcmVhVGV4dDogXCJEcmFnIGFuZCBkcm9wIGNob2ljZXMgaGVyZSB0byByYW5rIHRoZW1cIiA9PiBcIuCwteCwvuCwn+Cwv+CwqOCwvyDgsLDgsY3gsK/gsL7gsILgsJXgsY0g4LCa4LGH4LCv4LCh4LCCIOCwleCxiuCwsOCwleCxgSDgsI7gsILgsKrgsL/gsJXgsLLgsKjgsYEg4LCH4LCV4LGN4LCV4LChIOCwoeCxjeCwsOCwvuCwl+CxjSDgsK7gsLDgsL/gsK/gsYEg4LCh4LGN4LCw4LC+4LCq4LGNIOCwmuCxh+Cwr+CwguCwoeCwv1wiLy8gdGFrZVBob3RvQ2FwdGlvbjogXCJUYWtlIFBob3RvXCIgPT4gXCLgsKvgsYvgsJ/gsYsg4LCk4LGA4LC44LGB4LCV4LGL4LCC4LCh4LC/XCJcbi8vIGNhbWVyYVBsYWNlSG9sZGVyOiBcIkNsaWNrIHRoZSBidXR0b24gYmVsb3cgdG8gdGFrZSBhIHBob3RvIHVzaW5nIHRoZSBjYW1lcmEuXCIgPT4gXCLgsJXgsYbgsK7gsYbgsLDgsL7gsKjgsYEg4LCJ4LCq4LCv4LGL4LCX4LC/4LCC4LCa4LC/IOCwq+Cxi+Cwn+CxiyDgsKTgsYDgsK/gsKHgsL7gsKjgsL/gsJXgsL8g4LCm4LC/4LCX4LGB4LC1IOCwrOCwn+CwqOCxjSDgsK7gsYDgsKYg4LCV4LGN4LCy4LC/4LCV4LGNIOCwmuCxh+Cwr+CwguCwoeCwvy5cIlxuLy8gZmlsZUNhbWVyYURyYWdBcmVhUGxhY2VIb2xkZXI6IFwiRHJhZyBhbmQgZHJvcCBvciBzZWxlY3QgYSBmaWxlIHRvIHVwbG9hZCBvciB0YWtlIGEgcGhvdG8gdXNpbmcgdGhlIGNhbWVyYS5cIiA9PiBcIuCwleCxhuCwruCxhuCwsOCwvuCwqOCxgSDgsIngsKrgsK/gsYvgsJfgsL/gsILgsJrgsL8g4LCr4LGL4LCf4LGL4LCo4LGBIOCwheCwquCxjSDgsLLgsYvgsKHgsY0g4LCa4LGH4LCv4LCh4LC+4LCo4LC/4LCV4LC/IOCwsuCxh+CwpuCwviDgsKTgsYDgsK/gsKHgsL7gsKjgsL/gsJXgsL8g4LCr4LGI4LCy4LGNIOCwqOCxgSDgsKHgsY3gsLDgsL7gsJfgsY0g4LCu4LCw4LC/4LCv4LGBIOCwoeCxjeCwsOCwvuCwquCxjSDgsJrgsYfgsK/gsILgsKHgsL8g4LCy4LGH4LCm4LC+IOCwjuCwguCwmuCxgeCwleCxi+CwguCwoeCwvy5cIlxuLy8gcmVwbGFjZUZpbGVDYXB0aW9uOiBcIlJlcGxhY2UgZmlsZVwiID0+IFwi4LCr4LGI4LCy4LGBIOCwruCwvuCwsOCxjeCwmuCwguCwoeCwv1wiXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvbG9jYWxpemF0aW9uL3RoYWkudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvbG9jYWxpemF0aW9uL3RoYWkudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogdGhhaVN0cmluZ3MgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwidGhhaVN0cmluZ3NcIiwgZnVuY3Rpb24oKSB7IHJldHVybiB0aGFpU3RyaW5nczsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHN1cnZleS1jb3JlICovIFwiLi9zcmMvZW50cmllcy9jb3JlLnRzXCIpO1xuXG52YXIgdGhhaVN0cmluZ3MgPSB7XG4gICAgcGFnZVByZXZUZXh0OiBcIuC4geC5iOC4reC4meC4q+C4meC5ieC4slwiLFxuICAgIHBhZ2VOZXh0VGV4dDogXCLguJbguLHguJTguYTguJtcIixcbiAgICBjb21wbGV0ZVRleHQ6IFwi4Liq4Liz4LmA4Lij4LmH4LiIXCIsXG4gICAgcHJldmlld1RleHQ6IFwi4LiU4Li54LiV4Lix4Lin4Lit4Lii4LmI4Liy4LiHXCIsXG4gICAgZWRpdFRleHQ6IFwi4LmB4LiB4LmJ4LmE4LiCXCIsXG4gICAgc3RhcnRTdXJ2ZXlUZXh0OiBcIuC5gOC4o+C4tOC5iOC4oVwiLFxuICAgIG90aGVySXRlbVRleHQ6IFwi4Lit4Li34LmI4LiZ4LmGICjguYLguJvguKPguJTguKPguLDguJrguLgpXCIsXG4gICAgbm9uZUl0ZW1UZXh0OiBcIuC5hOC4oeC5iOC4oeC4tVwiLFxuICAgIHNlbGVjdEFsbEl0ZW1UZXh0OiBcIuC5gOC4peC4t+C4reC4geC4l+C4seC5ieC4h+C4q+C4oeC4lFwiLFxuICAgIHByb2dyZXNzVGV4dDogXCLguKvguJnguYnguLLguJfguLXguYggezB9IOC4iOC4suC4gSB7MX1cIixcbiAgICBpbmRleFRleHQ6IFwiezB9IG9mIHsxfVwiLFxuICAgIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCLguKPguLLguKLguIHguLLguKPguJfguLXguYggezB9IOC4iOC4suC4gSB7MX1cIixcbiAgICBwYW5lbER5bmFtaWNUYWJUZXh0Rm9ybWF0OiBcIuC5geC4nOC4hyB7cGFuZWxJbmRleH1cIixcbiAgICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwi4LiE4Liz4LiV4Lit4Lia4LiX4Li14LmIIHswfS97MX0g4LiI4Liz4LiZ4Lin4LiZ4LiE4Liz4LiW4Liy4LihXCIsXG4gICAgZW1wdHlTdXJ2ZXk6IFwi4LmE4Lih4LmI4Lih4Li14Lir4LiZ4LmJ4Liy4LmA4Lie4LiI4LiX4Li14LmI4Lih4Lit4LiH4LmA4Lir4LmH4LiZIOC4q+C4o+C4t+C4rSDguITguLPguJbguLLguKHguYPguJkgc3VydmV5IOC4meC4teC5iVwiLFxuICAgIGNvbXBsZXRpbmdTdXJ2ZXk6IFwi4LiC4Lit4Lia4LiE4Li44LiT4LiX4Li14LmI4LiX4LizIHN1cnZleSDguIjguJnguYDguKrguKPguYfguIhcIixcbiAgICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOiBcIuC4o+C4suC4ouC4geC4suC4o+C4guC4reC4h+C5gOC4o+C4suC5geC4quC4lOC4h+C4p+C5iOC4suC4hOC4uOC4k+C5hOC4lOC5ieC4l+C4syBzdXJ2ZXkg4LmA4Liq4Lij4LmH4LiI4LmA4Lij4Li14Lii4Lia4Lij4LmJ4Lit4Lii4LmB4Lil4LmJ4LinXCIsXG4gICAgbG9hZGluZ1N1cnZleTogXCLguIHguLPguKXguLHguIfguYLguKvguKXguJQgU3VydmV5Li4uXCIsXG4gICAgcGxhY2Vob2xkZXI6IFwi4LmA4Lil4Li34Lit4LiBLi4uXCIsXG4gICAgcmF0aW5nT3B0aW9uc0NhcHRpb246IFwi4LmA4Lil4Li34Lit4LiBICAgXCIsXG4gICAgdmFsdWU6IFwi4LiC4LmJ4Lit4Lih4Li54LilXCIsXG4gICAgcmVxdWlyZWRFcnJvcjogXCLguIHguKPguLjguJPguLLguJXguK3guJrguITguLPguJbguLLguKFcIixcbiAgICByZXF1aXJlZEVycm9ySW5QYW5lbDogXCLguIHguKPguLjguJPguLLguJXguK3guJrguILguLHguYnguJnguJXguYjguLPguKvguJnguLbguYjguIfguITguLPguJbguLLguKFcIixcbiAgICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIuC4geC4o+C4uOC4k+C4suC4leC4reC4muC4hOC4s+C4luC4suC4oeC5g+C4meC4l+C4uOC4geC5huC5geC4luC4p1wiLFxuICAgIG51bWVyaWNFcnJvcjogXCLguILguYnguK3guKHguLnguKXguJfguLXguYjguYPguKrguYjguJXguYnguK3guIfguYDguJvguYfguJnguJXguLHguKfguYDguKXguIJcIixcbiAgICBtaW5FcnJvcjogXCLguITguYjguLLguYTguKHguYjguITguKfguKPguJnguYnguK3guKLguIHguKfguYjguLIgezB9XCIsXG4gICAgbWF4RXJyb3I6IFwi4LiE4LmI4Liy4LmE4Lih4LmI4LiE4Lin4Lij4LmA4LiB4Li04LiZezB9XCIsXG4gICAgdGV4dE1pbkxlbmd0aDogXCLguIHguKPguLjguJPguLLguYPguKrguYjguILguLHguYnguJnguJXguYjguLPguIjguLPguJnguKfguJkgezB9IOC4leC4seC4p+C4reC4seC4geC4qeC4o1wiLFxuICAgIHRleHRNYXhMZW5ndGg6IFwi4LiB4Lij4Li44LiT4Liy4LmD4Liq4LmI4LmE4Lih4LmI4LmA4LiB4Li04LiZ4LiI4Liz4LiZ4Lin4LiZIHswfSDguJXguLHguKfguK3guLHguIHguKnguKNcIixcbiAgICB0ZXh0TWluTWF4TGVuZ3RoOiBcIuC4geC4o+C4uOC4k+C4suC5g+C4quC5iOC4guC4seC5ieC4meC4leC5iOC4s+C4iOC4s+C4meC4p+C4mSB7MH0g4LmB4Lil4Liw4LmE4Lih4LmI4LmA4LiB4Li04LiZ4LiI4Liz4LiZ4Lin4LiZIHsxfSDguJXguLHguKfguK3guLHguIHguKnguKNcIixcbiAgICBtaW5Sb3dDb3VudEVycm9yOiBcIuC4geC4o+C4uOC4k+C4suC5g+C4quC5iOC4guC4seC5ieC4meC4leC5iOC4s+C4iOC4s+C4meC4p+C4mSB7MH0g4LmB4LiW4LinXCIsXG4gICAgbWluU2VsZWN0RXJyb3I6IFwi4LiB4Lij4Li44LiT4Liy4LmA4Lil4Li34Lit4LiB4Lit4Lii4LmI4Liy4LiH4LiZ4LmJ4Lit4LiiIHswfSDguKPguLLguKLguIHguLLguKNcIixcbiAgICBtYXhTZWxlY3RFcnJvcjogXCLguIHguKPguLjguJPguLLguYDguKXguLfguK3guIHguYTguKHguYjguYDguIHguLTguJkgezB9IOC4o+C4suC4ouC4geC4suC4o1wiLFxuICAgIG51bWVyaWNNaW5NYXg6IFwiJ3swfScg4LiV4LmJ4Lit4LiH4Lih4Liy4LiB4LiB4Lin4LmI4Liy4Lir4Lij4Li34Lit4LmA4LiX4LmI4Liy4LiB4Lix4LiaIHsxfSDguYHguKXguLDguJnguYnguK3guKLguIHguKfguYjguLLguKvguKPguLfguK3guYDguJfguYjguLLguIHguLHguJogezJ9XCIsXG4gICAgbnVtZXJpY01pbjogXCInezB9JyDguJXguYnguK3guIfguKHguLLguIHguIHguKfguYjguLLguKvguKPguLfguK3guYDguJfguYjguLLguIHguLHguJogezF9XCIsXG4gICAgbnVtZXJpY01heDogXCInezB9JyDguJnguYnguK3guKLguIHguKfguYjguLLguKvguKPguLfguK3guYDguJfguYjguLLguIHguLHguJogezF9XCIsXG4gICAgaW52YWxpZEVtYWlsOiBcIuC4geC4o+C4uOC4k+C4suC5g+C4quC5iOC4reC4teC5gOC4oeC4peC5jOC5geC4reC4lOC5gOC4lOC4o+C4quC4l+C4teC5iOC4luC4ueC4geC4leC5ieC4reC4h1wiLFxuICAgIGludmFsaWRFeHByZXNzaW9uOiBcIlRoZSBleHByZXNzaW9uOiB7MH0g4LiV4LmJ4Lit4LiH4Lij4Li14LmA4LiX4Li04Lij4LmM4LiZICd0cnVlJy5cIixcbiAgICB1cmxSZXF1ZXN0RXJyb3I6IFwi4Lij4Li14LmA4LiE4Lin4Liq4Lij4Li14LmA4LiX4Li04Lij4LmM4LiZIGVycm9yICd7MH0nLiB7MX1cIixcbiAgICB1cmxHZXRDaG9pY2VzRXJyb3I6IFwi4Lij4Li14LmA4LiE4Lin4Liq4Lij4Li14LmA4LiX4Li04Lij4LmM4LiZ4LiC4LmJ4Lit4Lih4Li54Lil4Lin4LmI4Liy4LiH4LmA4Lib4Lil4LmI4LiyIOC4q+C4o+C4t+C4rSAncGF0aCcgcHJvcGVydHkg4LmE4Lih4LmI4LiW4Li54LiB4LiV4LmJ4Lit4LiHXCIsXG4gICAgZXhjZWVkTWF4U2l6ZTogXCLguILguJnguLLguJTguYTguJ/guKXguYzguJXguYnguK3guIfguYTguKHguYjguYDguIHguLTguJkgezB9LlwiLFxuICAgIG90aGVyUmVxdWlyZWRFcnJvcjogXCLguIHguKPguLjguJPguLLguYPguKrguYjguITguYjguLLguK3guLfguYjguJlcIixcbiAgICB1cGxvYWRpbmdGaWxlOiBcIuC5hOC4n+C4peC5jOC4guC4reC4h+C4hOC4uOC4k+C4geC4s+C4peC4seC4h+C4reC4seC4nuC5guC4q+C4peC4lOC4reC4ouC4ueC5iC4g4LiB4Lij4Li44LiT4Liy4Lij4Lit4Liq4Lix4LiB4LiE4Lij4Li54LmI4LmB4Lil4LmJ4Lin4LiX4Liz4LiB4Liy4Lij4Lil4Lit4LiH4Lit4Li14LiB4LiE4Lij4Lix4LmJ4LiHXCIsXG4gICAgbG9hZGluZ0ZpbGU6IFwi4LiB4Liz4Lil4Lix4LiH4LmC4Lir4Lil4LiULi4uXCIsXG4gICAgY2hvb3NlRmlsZTogXCLguYDguKXguLfguK3guIHguYTguJ/guKXguYwuLi5cIixcbiAgICBub0ZpbGVDaG9zZW46IFwi4LmE4Lih4LmI4LmE4Lif4Lil4LmM4LiX4Li14LmI4LmA4Lil4Li34Lit4LiBXCIsXG4gICAgZmlsZURyYWdBcmVhUGxhY2Vob2xkZXI6IFwi4Lil4Liy4LiB4LmB4Lil4Liw4Lin4Liy4LiH4LmE4Lif4Lil4LmM4LiX4Li14LmI4LiZ4Li14LmI4Lir4Lij4Li34Lit4LiE4Lil4Li04LiB4Lib4Li44LmI4Lih4LiU4LmJ4Liy4LiZ4Lil4LmI4Liy4LiH4LmB4Lil4Liw4LmA4Lil4Li34Lit4LiB4LmE4Lif4Lil4LmM4LiX4Li14LmI4LiI4Liw4Lit4Lix4Lib4LmC4Lir4Lil4LiUXCIsXG4gICAgY29uZmlybURlbGV0ZTogXCLguITguLjguJPguJXguYnguK3guIfguIHguLLguKPguKXguJrguKPguLLguKLguIHguLLguKPguJnguLXguYnguIjguKPguLTguIfguKvguKPguLfguK3guYTguKHguYg/XCIsXG4gICAga2V5RHVwbGljYXRpb25FcnJvcjogXCLguILguYnguK3guKHguLnguKXguJnguLXguYnguJXguYnguK3guIfguYDguJvguYfguJkgdW5pcXVlLlwiLFxuICAgIGFkZENvbHVtbjogXCLguYDguJ7guLTguYjguKHguITguK3guKXguLHguKHguJnguYxcIixcbiAgICBhZGRSb3c6IFwi4LmA4Lie4Li04LmI4Lih4LmB4LiW4LinXCIsXG4gICAgcmVtb3ZlUm93OiBcIuC4peC4mlwiLFxuICAgIGVtcHR5Um93c1RleHQ6IFwi4LmE4Lih4LmI4Lih4Li14LmB4LiW4LinXCIsXG4gICAgYWRkUGFuZWw6IFwi4LmA4Lie4Li04LmI4LihXCIsXG4gICAgcmVtb3ZlUGFuZWw6IFwi4Lil4LiaXCIsXG4gICAgY2hvaWNlc19JdGVtOiBcIuC4iuC4tOC5ieC4mVwiLFxuICAgIG1hdHJpeF9jb2x1bW46IFwi4LiE4Lit4Lil4Lix4Lih4LiZ4LmMXCIsXG4gICAgbWF0cml4X3JvdzogXCLguYHguJbguKdcIixcbiAgICBtdWx0aXBsZXRleHRfaXRlbW5hbWU6IFwi4LiC4LmJ4Lit4LiE4Lin4Liy4LihXCIsXG4gICAgc2F2aW5nRGF0YTogXCLguJzguKXguKXguLHguJ7guJfguYzguIHguLPguKXguLHguIfguJrguLHguJnguJfguLbguIHguKXguIfguJfguLXguYjguYDguIvguLTguKPguYzguJ/guYDguKfguK3guKPguYwuLi5cIixcbiAgICBzYXZpbmdEYXRhRXJyb3I6IFwi4Lih4Li14LiE4Lin4Liy4Lih4Lic4Li04LiU4Lie4Lil4Liy4LiU4LmA4LiB4Li04LiU4LiC4Li24LmJ4LiZ4Liq4LmI4LiH4Lic4Lil4LmD4Lir4LmJ4LmE4Lih4LmI4Liq4Liy4Lih4Liy4Lij4LiW4Lia4Lix4LiZ4LiX4Li24LiB4Lic4Lil4LmE4LiU4LmJXCIsXG4gICAgc2F2aW5nRGF0YVN1Y2Nlc3M6IFwi4Lia4Lix4LiZ4LiX4Li24LiB4Liq4Liz4LmA4Lij4LmH4LiI4LmB4Lil4LmJ4LinXCIsXG4gICAgc2F2ZUFnYWluQnV0dG9uOiBcIuC4o+C4muC4geC4p+C4meC4peC4reC4h+C4reC4teC4geC4hOC4o+C4seC5ieC4h1wiLFxuICAgIHRpbWVyTWluOiBcIuC4meC4suC4l+C4tVwiLFxuICAgIHRpbWVyU2VjOiBcIuC4p+C4tOC4meC4suC4l+C4tVwiLFxuICAgIHRpbWVyU3BlbnRBbGw6IFwi4LiE4Li44LiT4LmD4LiK4LmJ4LmA4Lin4Lil4LiyIHswfSDguJrguJnguKvguJnguYnguLLguJnguLXguYnguYHguKXguLAgezF9IOC4o+C4p+C4oeC4l+C4seC5ieC4h+C4q+C4oeC4lFwiLFxuICAgIHRpbWVyU3BlbnRQYWdlOiBcIuC4hOC4uOC4k+C5g+C4iuC5ieC5gOC4p+C4peC4siB7MH0g4Lia4LiZ4Lir4LiZ4LmJ4Liy4LiZ4Li14LmJXCIsXG4gICAgdGltZXJTcGVudFN1cnZleTogXCLguITguLjguJPguYPguIrguYnguYDguKfguKXguLIgezB9IOC4o+C4p+C4oeC4l+C4seC5ieC4h+C4q+C4oeC4lFwiLFxuICAgIHRpbWVyTGltaXRBbGw6IFwi4LiE4Li44LiT4LmD4LiK4LmJ4LmA4Lin4Lil4LiyIHswfSDguILguK3guIcgezF9IOC4muC4meC4q+C4meC5ieC4suC4meC4teC5ieC5geC4peC4sCB7Mn0g4LiC4Lit4LiHIHszfSDguKPguKfguKHguJfguLHguYnguIfguKvguKHguJRcIixcbiAgICB0aW1lckxpbWl0UGFnZTogXCLguITguLjguJPguYPguIrguYnguYDguKfguKXguLIgezB9IOC4guC4reC4hyB7MX0g4Lia4LiZ4Lir4LiZ4LmJ4Liy4LiZ4Li14LmJXCIsXG4gICAgdGltZXJMaW1pdFN1cnZleTogXCLguITguLjguJPguYPguIrguYnguYDguKfguKXguLIgezB9IOC4guC4reC4hyB7MX0g4Lij4Lin4Lih4LiX4Lix4LmJ4LiH4Lir4Lih4LiUXCIsXG4gICAgY2xlYXJDYXB0aW9uOiBcIuC5gOC4hOC4peC4teC4ouC4o+C5jFwiLFxuICAgIHNpZ25hdHVyZVBsYWNlSG9sZGVyOiBcIuC4peC4h+C4iuC4t+C5iOC4reC4l+C4teC5iOC4meC4teC5iFwiLFxuICAgIGNob29zZUZpbGVDYXB0aW9uOiBcIuC5gOC4peC4t+C4reC4geC5hOC4n+C4peC5jFwiLFxuICAgIHRha2VQaG90b0NhcHRpb246IFwi4LiW4LmI4Liy4Lii4Lij4Li54LibXCIsXG4gICAgY2FtZXJhUGxhY2VIb2xkZXI6IFwi4LiE4Lil4Li04LiB4Lib4Li44LmI4Lih4LiU4LmJ4Liy4LiZ4Lil4LmI4Liy4LiH4LmA4Lie4Li34LmI4Lit4LiW4LmI4Liy4Lii4Lig4Liy4Lie4LmC4LiU4Lii4LmD4LiK4LmJ4LiB4Lil4LmJ4Lit4LiHXCIsXG4gICAgZmlsZUNhbWVyYURyYWdBcmVhUGxhY2VIb2xkZXI6IFwi4Lil4Liy4LiB4LmB4Lil4Liw4Lin4Liy4LiH4Lir4Lij4Li34Lit4LmA4Lil4Li34Lit4LiB4LmE4Lif4Lil4LmM4LiX4Li14LmI4LiI4Liw4Lit4Lix4Lib4LmC4Lir4Lil4LiU4Lir4Lij4Li34Lit4LiW4LmI4Liy4Lii4Lig4Liy4Lie4LmC4LiU4Lii4LmD4LiK4LmJ4LiB4Lil4LmJ4Lit4LiHXCIsXG4gICAgcmVwbGFjZUZpbGVDYXB0aW9uOiBcIuC5geC4l+C4meC4l+C4teC5iOC5hOC4n+C4peC5jFwiLFxuICAgIHJlbW92ZUZpbGVDYXB0aW9uOiBcIuC4meC4s+C5hOC4n+C4peC5jOC4meC4teC5ieC4reC4reC4gVwiLFxuICAgIGJvb2xlYW5DaGVja2VkTGFiZWw6IFwi4LmD4LiK4LmIXCIsXG4gICAgYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcIuC5hOC4oeC5iOC5g+C4iuC5iFwiLFxuICAgIGNvbmZpcm1SZW1vdmVGaWxlOiBcIuC4hOC4uOC4k+C5geC4meC5iOC5g+C4iOC4l+C4teC5iOC4iOC4sOC4meC4s+C5hOC4n+C4peC5jOC4meC4teC5ieC4reC4reC4geC5g+C4iuC5iOC4q+C4o+C4t+C4reC5hOC4oeC5iDogezB9P1wiLFxuICAgIGNvbmZpcm1SZW1vdmVBbGxGaWxlczogXCLguITguLjguJPguYHguJnguYjguYPguIjguJfguLXguYjguIjguLDguJnguLPguYTguJ/guKXguYzguJfguLHguYnguIfguKvguKHguJTguK3guK3guIHguYPguIrguYjguKvguKPguLfguK3guYTguKHguYhcIixcbiAgICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwi4LiK4Li34LmI4Lit4LiE4Liz4LiW4Liy4LihXCIsXG4gICAgbW9kYWxDYW5jZWxCdXR0b25UZXh0OiBcIuC4ouC4geC5gOC4peC4tOC4gVwiLFxuICAgIG1vZGFsQXBwbHlCdXR0b25UZXh0OiBcIuC5g+C4iuC5iVwiLFxuICAgIGZpbHRlclN0cmluZ1BsYWNlaG9sZGVyOiBcIuC4nuC4tOC4oeC4nuC5jOC5gOC4nuC4t+C5iOC4reC4hOC5ieC4meC4q+C4si4uLlwiLFxuICAgIGVtcHR5TWVzc2FnZTogXCLguYTguKHguYjguKHguLXguILguYnguK3guKHguLnguKXguJfguLXguYjguIjguLDguYHguKrguJTguIdcIixcbiAgICBub0VudHJpZXNUZXh0OiBcIuC4ouC4seC4h+C5hOC4oeC5iOC4oeC4teC4o+C4suC4ouC4geC4suC4o1xcbuC4hOC4peC4tOC4geC4m+C4uOC5iOC4oeC4lOC5ieC4suC4meC4peC5iOC4suC4h+C5gOC4nuC4t+C5iOC4reC5gOC4nuC4tOC5iOC4oeC4o+C4suC4ouC4geC4suC4o+C5g+C4q+C4oeC5iFwiLFxuICAgIG5vRW50cmllc1JlYWRvbmx5VGV4dDogXCLguYTguKHguYjguKHguLXguKPguLLguKLguIHguLLguKNcIixcbiAgICBtb3JlOiBcIuC4reC4teC4gVwiLFxuICAgIHRhZ2JveERvbmVCdXR0b25DYXB0aW9uOiBcIuC4leC4geC4peC4hywg4LmE4LiU4LmJXCIsXG4gICAgc2VsZWN0VG9SYW5rRW1wdHlSYW5rZWRBcmVhVGV4dDogXCLguJXguLHguKfguYDguKXguLfguK3guIHguJfguLHguYnguIfguKvguKHguJTguIjguLDguJbguLnguIHguIjguLHguJTguK3guLHguJnguJTguLHguJpcIixcbiAgICBzZWxlY3RUb1JhbmtFbXB0eVVucmFua2VkQXJlYVRleHQ6IFwi4Lil4Liy4LiB4LmB4Lil4Liw4Lin4Liy4LiH4LiV4Lix4Lin4LmA4Lil4Li34Lit4LiB4LiX4Li14LmI4LiZ4Li14LmI4LmA4Lie4Li34LmI4Lit4LiI4Lix4LiU4Lit4Lix4LiZ4LiU4Lix4LiaXCJcbn07XG5zdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3VydmV5TG9jYWxpemF0aW9uXCJdLmxvY2FsZXNbXCJ0aFwiXSA9IHRoYWlTdHJpbmdzO1xuc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN1cnZleUxvY2FsaXphdGlvblwiXS5sb2NhbGVOYW1lc1tcInRoXCJdID0gXCLguYTguJfguKJcIjtcbi8vIFRoZSBmb2xsb3dpbmcgc3RyaW5ncyBoYXZlIGJlZW4gdHJhbnNsYXRlZCBieSBhIG1hY2hpbmUgdHJhbnNsYXRpb24gc2VydmljZVxuLy8gUmVtb3ZlIHRob3NlIHN0cmluZ3MgdGhhdCB5b3UgaGF2ZSBjb3JyZWN0ZWQgbWFudWFsbHlcbi8vIGluZGV4VGV4dDogXCJ7MH0gb2YgezF9XCIgPT4gXCJ7MH0gb2YgezF9XCJcbi8vIHBhbmVsRHluYW1pY1RhYlRleHRGb3JtYXQ6IFwiUGFuZWwge3BhbmVsSW5kZXh9XCIgPT4gXCLguYHguJzguIcge3BhbmVsSW5kZXh9XCJcbi8vIHJhdGluZ09wdGlvbnNDYXB0aW9uOiBcIlNlbGVjdC4uLlwiID0+IFwi4LmA4Lil4Li34Lit4LiBICAgXCJcbi8vIG1pbkVycm9yOiBcIlRoZSB2YWx1ZSBzaG91bGQgbm90IGJlIGxlc3MgdGhhbiB7MH1cIiA9PiBcIuC4hOC5iOC4suC5hOC4oeC5iOC4hOC4p+C4o+C4meC5ieC4reC4ouC4geC4p+C5iOC4siB7MH1cIlxuLy8gbWF4RXJyb3I6IFwiVGhlIHZhbHVlIHNob3VsZCBub3QgYmUgZ3JlYXRlciB0aGFuIHswfVwiID0+IFwi4LiE4LmI4Liy4LmE4Lih4LmI4LiE4Lin4Lij4LmA4LiB4Li04LiZezB9XCJcbi8vIGZpbGVEcmFnQXJlYVBsYWNlaG9sZGVyOiBcIkRyYWcgYW5kIGRyb3AgYSBmaWxlIGhlcmUgb3IgY2xpY2sgdGhlIGJ1dHRvbiBiZWxvdyBhbmQgY2hvb3NlIGEgZmlsZSB0byB1cGxvYWQuXCIgPT4gXCLguKXguLLguIHguYHguKXguLDguKfguLLguIfguYTguJ/guKXguYzguJfguLXguYjguJnguLXguYjguKvguKPguLfguK3guITguKXguLTguIHguJvguLjguYjguKHguJTguYnguLLguJnguKXguYjguLLguIfguYHguKXguLDguYDguKXguLfguK3guIHguYTguJ/guKXguYzguJfguLXguYjguIjguLDguK3guLHguJvguYLguKvguKXguJRcIlxuLy8gZW1wdHlSb3dzVGV4dDogXCJUaGVyZSBhcmUgbm8gcm93cy5cIiA9PiBcIuC5hOC4oeC5iOC4oeC4teC5geC4luC4p1wiXG4vLyBtdWx0aXBsZXRleHRfaXRlbW5hbWU6IFwidGV4dFwiID0+IFwi4LiC4LmJ4Lit4LiE4Lin4Liy4LihXCJcbi8vIHNpZ25hdHVyZVBsYWNlSG9sZGVyOiBcIlNpZ24gaGVyZVwiID0+IFwi4Lil4LiH4LiK4Li34LmI4Lit4LiX4Li14LmI4LiZ4Li14LmIXCJcbi8vIG1vZGFsQ2FuY2VsQnV0dG9uVGV4dDogXCJDYW5jZWxcIiA9PiBcIuC4ouC4geC5gOC4peC4tOC4gVwiXG4vLyBtb2RhbEFwcGx5QnV0dG9uVGV4dDogXCJBcHBseVwiID0+IFwi4LmD4LiK4LmJXCJcbi8vIGZpbHRlclN0cmluZ1BsYWNlaG9sZGVyOiBcIlR5cGUgdG8gc2VhcmNoLi4uXCIgPT4gXCLguJ7guLTguKHguJ7guYzguYDguJ7guLfguYjguK3guITguYnguJnguKvguLIuLi5cIlxuLy8gZW1wdHlNZXNzYWdlOiBcIk5vIGRhdGEgdG8gZGlzcGxheVwiID0+IFwi4LmE4Lih4LmI4Lih4Li14LiC4LmJ4Lit4Lih4Li54Lil4LiX4Li14LmI4LiI4Liw4LmB4Liq4LiU4LiHXCJcbi8vIG5vRW50cmllc1RleHQ6IFwiVGhlcmUgYXJlIG5vIGVudHJpZXMgeWV0LlxcbkNsaWNrIHRoZSBidXR0b24gYmVsb3cgdG8gYWRkIGEgbmV3IGVudHJ5LlwiID0+IFwi4Lii4Lix4LiH4LmE4Lih4LmI4Lih4Li14Lij4Liy4Lii4LiB4Liy4LijXFxu4LiE4Lil4Li04LiB4Lib4Li44LmI4Lih4LiU4LmJ4Liy4LiZ4Lil4LmI4Liy4LiH4LmA4Lie4Li34LmI4Lit4LmA4Lie4Li04LmI4Lih4Lij4Liy4Lii4LiB4Liy4Lij4LmD4Lir4Lih4LmIXCJcbi8vIG5vRW50cmllc1JlYWRvbmx5VGV4dDogXCJUaGVyZSBhcmUgbm8gZW50cmllcy5cIiA9PiBcIuC5hOC4oeC5iOC4oeC4teC4o+C4suC4ouC4geC4suC4o1wiXG4vLyBtb3JlOiBcIk1vcmVcIiA9PiBcIuC4reC4teC4gVwiXG4vLyB0YWdib3hEb25lQnV0dG9uQ2FwdGlvbjogXCJPS1wiID0+IFwi4LiV4LiB4Lil4LiHLCDguYTguJTguYlcIlxuLy8gc2VsZWN0VG9SYW5rRW1wdHlSYW5rZWRBcmVhVGV4dDogXCJBbGwgY2hvaWNlcyBhcmUgcmFua2VkXCIgPT4gXCLguJXguLHguKfguYDguKXguLfguK3guIHguJfguLHguYnguIfguKvguKHguJTguIjguLDguJbguLnguIHguIjguLHguJTguK3guLHguJnguJTguLHguJpcIlxuLy8gc2VsZWN0VG9SYW5rRW1wdHlVbnJhbmtlZEFyZWFUZXh0OiBcIkRyYWcgYW5kIGRyb3AgY2hvaWNlcyBoZXJlIHRvIHJhbmsgdGhlbVwiID0+IFwi4Lil4Liy4LiB4LmB4Lil4Liw4Lin4Liy4LiH4LiV4Lix4Lin4LmA4Lil4Li34Lit4LiB4LiX4Li14LmI4LiZ4Li14LmI4LmA4Lie4Li34LmI4Lit4LiI4Lix4LiU4Lit4Lix4LiZ4LiU4Lix4LiaXCIvLyB0YWtlUGhvdG9DYXB0aW9uOiBcIlRha2UgUGhvdG9cIiA9PiBcIuC4luC5iOC4suC4ouC4o+C4ueC4m1wiXG4vLyBjYW1lcmFQbGFjZUhvbGRlcjogXCJDbGljayB0aGUgYnV0dG9uIGJlbG93IHRvIHRha2UgYSBwaG90byB1c2luZyB0aGUgY2FtZXJhLlwiID0+IFwi4LiE4Lil4Li04LiB4Lib4Li44LmI4Lih4LiU4LmJ4Liy4LiZ4Lil4LmI4Liy4LiH4LmA4Lie4Li34LmI4Lit4LiW4LmI4Liy4Lii4Lig4Liy4Lie4LmC4LiU4Lii4LmD4LiK4LmJ4LiB4Lil4LmJ4Lit4LiHXCJcbi8vIGZpbGVDYW1lcmFEcmFnQXJlYVBsYWNlSG9sZGVyOiBcIkRyYWcgYW5kIGRyb3Agb3Igc2VsZWN0IGEgZmlsZSB0byB1cGxvYWQgb3IgdGFrZSBhIHBob3RvIHVzaW5nIHRoZSBjYW1lcmEuXCIgPT4gXCLguKXguLLguIHguYHguKXguLDguKfguLLguIfguKvguKPguLfguK3guYDguKXguLfguK3guIHguYTguJ/guKXguYzguJfguLXguYjguIjguLDguK3guLHguJvguYLguKvguKXguJTguKvguKPguLfguK3guJbguYjguLLguKLguKDguLLguJ7guYLguJTguKLguYPguIrguYnguIHguKXguYnguK3guIdcIlxuLy8gcmVwbGFjZUZpbGVDYXB0aW9uOiBcIlJlcGxhY2UgZmlsZVwiID0+IFwi4LmB4LiX4LiZ4LiX4Li14LmI4LmE4Lif4Lil4LmMXCJcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9sb2NhbGl6YXRpb24vdHJhZGl0aW9uYWwtY2hpbmVzZS50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9sb2NhbGl6YXRpb24vdHJhZGl0aW9uYWwtY2hpbmVzZS50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiB0cmFkaXRpb25hbENoaW5lc2VTdXJ2ZXlTdHJpbmdzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInRyYWRpdGlvbmFsQ2hpbmVzZVN1cnZleVN0cmluZ3NcIiwgZnVuY3Rpb24oKSB7IHJldHVybiB0cmFkaXRpb25hbENoaW5lc2VTdXJ2ZXlTdHJpbmdzOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBzdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgc3VydmV5LWNvcmUgKi8gXCIuL3NyYy9lbnRyaWVzL2NvcmUudHNcIik7XG5cbnZhciB0cmFkaXRpb25hbENoaW5lc2VTdXJ2ZXlTdHJpbmdzID0ge1xuICAgIHBhZ2VQcmV2VGV4dDogXCLkuIrkuIDpoIFcIixcbiAgICBwYWdlTmV4dFRleHQ6IFwi5LiL5LiA6aCBXCIsXG4gICAgY29tcGxldGVUZXh0OiBcIuaPkOS6pOWVj+WNt1wiLFxuICAgIHByZXZpZXdUZXh0OiBcIumgkOimvVwiLFxuICAgIGVkaXRUZXh0OiBcIue3qOi8r1wiLFxuICAgIHN0YXJ0U3VydmV5VGV4dDogXCLplovlp4tcIixcbiAgICBvdGhlckl0ZW1UZXh0OiBcIuWhq+Wvq+WFtuS7luetlOahiFwiLFxuICAgIG5vbmVJdGVtVGV4dDogXCLmspLmnIlcIixcbiAgICBzZWxlY3RBbGxJdGVtVGV4dDogXCLlhajpgbhcIixcbiAgICBwcm9ncmVzc1RleHQ6IFwi56ysIHswfSDpoIEsIOWFsSB7MX0g6aCBXCIsXG4gICAgaW5kZXhUZXh0OiBcInsxfXswfVwiLFxuICAgIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCJ7MX17MH1cIixcbiAgICBwYW5lbER5bmFtaWNUYWJUZXh0Rm9ybWF0OiBcIumdouadvyB76Z2i5p2/57Si5byVfVwiLFxuICAgIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCLlm57nrZTkuoZ7MH0vezF95ZWP6aGMXCIsXG4gICAgZW1wdHlTdXJ2ZXk6IFwi5ZWP5Y235Lit5rKS5pyJ5ZWP6aGM5oiW6aCB6Z2iXCIsXG4gICAgY29tcGxldGluZ1N1cnZleTogXCLmhJ/orJ3mgqjnmoTlj4PoiIchXCIsXG4gICAgY29tcGxldGluZ1N1cnZleUJlZm9yZTogXCLmiJHlgJHnmoToqJjpjITpoa/npLrmgqjlt7LntpPlrozmiJDkuobmraToqr/mn6XjgIJcIixcbiAgICBsb2FkaW5nU3VydmV5OiBcIuWVj+WNt+i8ieWFpeS4rS4uLlwiLFxuICAgIHBsYWNlaG9sZGVyOiBcIuiri+mBuOaThy4uLlwiLFxuICAgIHJhdGluZ09wdGlvbnNDYXB0aW9uOiBcIumBuOaTh+OAguOAguOAglwiLFxuICAgIHZhbHVlOiBcIuWDueWAvFwiLFxuICAgIHJlcXVpcmVkRXJyb3I6IFwi6KuL5aGr5a+r5q2k5ZWP6aGMXCIsXG4gICAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwi6ZyA6KaB5Zue562U77ya6Iez5bCR5Zue562U5LiA5YCL5ZWP6aGM44CCXCIsXG4gICAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCLoq4vloavlr6vmiYDmnInooYzkuK3llY/poYxcIixcbiAgICBudW1lcmljRXJyb3I6IFwi562U5qGI5b+F6aCI5piv5YCL5pW45a2XXCIsXG4gICAgbWluRXJyb3I6IFwi6Kmy5YC85LiN5oeJ5bCP5pa8IHswfVwiLFxuICAgIG1heEVycm9yOiBcIuipsuWAvOS4jeaHieWkp+aWvCB7MH1cIixcbiAgICB0ZXh0TWluTGVuZ3RoOiBcIuetlOahiOmVt+W6puiHs+WwkSB7MH0g5YCL5a2X5YWDXCIsXG4gICAgdGV4dE1heExlbmd0aDogXCLnrZTmoYjplbfluqbkuI3og73otoXpgY4gezB9IOWAi+Wtl+WFg1wiLFxuICAgIHRleHRNaW5NYXhMZW5ndGg6IFwi562U5qGI6ZW35bqm5b+F6aCI5ZyoIHswfSAtIHsxfSDlgIvlrZflhYPkuYvplpNcIixcbiAgICBtaW5Sb3dDb3VudEVycm9yOiBcIuacgOWwkemcgOimgeWhq+WvqyB7MH0g6KGM562U5qGIXCIsXG4gICAgbWluU2VsZWN0RXJyb3I6IFwi5pyA5bCR6ZyA6KaB6YG45pOHIHswfSDpoIXnrZTmoYhcIixcbiAgICBtYXhTZWxlY3RFcnJvcjogXCLmnIDlpJrlj6rog73pgbjmk4cgezB9IOmgheetlOahiFwiLFxuICAgIG51bWVyaWNNaW5NYXg6IFwi562U5qGIICd7MH0nIOW/hemgiOWkp+aWvOetieaWvCB7MX0g5LiU5bCP5pa8562J5pa8IHsyfVwiLFxuICAgIG51bWVyaWNNaW46IFwi562U5qGIICd7MH0nIOW/hemgiOWkp+aWvOetieaWvCB7MX1cIixcbiAgICBudW1lcmljTWF4OiBcIuetlOahiCAnezB9JyDlv4XpoIjlsI/mlrznrYnmlrwgezF9XCIsXG4gICAgaW52YWxpZEVtYWlsOiBcIuiri+i8uOWFpeacieaViOeahCBFbWFpbCDlnLDlnYBcIixcbiAgICBpbnZhbGlkRXhwcmVzc2lvbjogXCLooajpgZTlvI/vvJp7MH3mh4nov5Tlm57jgIx0cnVl44CN44CCXCIsXG4gICAgdXJsUmVxdWVzdEVycm9yOiBcIui8ieWFpemBuOmgheaZgueZvOeUn+mMr+iqpCAnezB9JzogezF9XCIsXG4gICAgdXJsR2V0Q2hvaWNlc0Vycm9yOiBcIuacquiDvei8ieWFpeacieaViOeahOmBuOmgheaIluiri+axguWPg+aVuOi3r+W+keacieiqpFwiLFxuICAgIGV4Y2VlZE1heFNpemU6IFwi5paH5Lu25aSn5bCP5LiN6IO96LaF6YGOIHswfVwiLFxuICAgIG90aGVyUmVxdWlyZWRFcnJvcjogXCLoq4vlrozmiJDlhbbku5bllY/poYxcIixcbiAgICB1cGxvYWRpbmdGaWxlOiBcIuaWh+S7tuS4iuWCs+S4rS4uLiDoq4vogJDlv4PnrYnlvoXlub7np5Llvozph43oqaZcIixcbiAgICBsb2FkaW5nRmlsZTogXCLoo53ovInjgILjgILjgIJcIixcbiAgICBjaG9vc2VGaWxlOiBcIumBuOaTh+aqlOahiC4uLlwiLFxuICAgIG5vRmlsZUNob3NlbjogXCLmnKrpgbjmk4fku7vkvZXmqpRcIixcbiAgICBmaWxlRHJhZ0FyZWFQbGFjZWhvbGRlcjogXCLlsIfmqpTmoYjmi5bmlL7liLDmraTomZXmiJbmjInkuIvkuIvpnaLnmoTmjInpiJXkuKbpgbjmk4fopoHkuIrlgrPnmoTmqpTjgIJcIixcbiAgICBjb25maXJtRGVsZXRlOiBcIuaYr+WQpuimgeWIqumZpOiomOmMhO+8n1wiLFxuICAgIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwi5q2k5YC85oeJ6Kmy5piv5ZSv5LiA55qE44CCXCIsXG4gICAgYWRkQ29sdW1uOiBcIua3u+WKoOWIl1wiLFxuICAgIGFkZFJvdzogXCLmt7vliqDnrZTmoYhcIixcbiAgICByZW1vdmVSb3c6IFwi5Yiq6Zmk562U5qGIXCIsXG4gICAgZW1wdHlSb3dzVGV4dDogXCLmspLmnInooYzjgIJcIixcbiAgICBhZGRQYW5lbDogXCLmlrDlop5cIixcbiAgICByZW1vdmVQYW5lbDogXCLliKrpmaRcIixcbiAgICBjaG9pY2VzX0l0ZW06IFwi6YG46aCFXCIsXG4gICAgbWF0cml4X2NvbHVtbjogXCLliJdcIixcbiAgICBtYXRyaXhfcm93OiBcIuihjFwiLFxuICAgIG11bHRpcGxldGV4dF9pdGVtbmFtZTogXCLnmbznsKHoqIpcIixcbiAgICBzYXZpbmdEYXRhOiBcIuato+WcqOWwh+e1kOaenOS/neWtmOWIsOacjeWLmeWZqC4uLlwiLFxuICAgIHNhdmluZ0RhdGFFcnJvcjogXCLlnKjkv53lrZjntZDmnpzpgY7nqIvkuK3nmbznlJ/kuobpjK/oqqTvvIzntZDmnpzmnKrog73kv53lrZhcIixcbiAgICBzYXZpbmdEYXRhU3VjY2VzczogXCLntZDmnpzkv53lrZjmiJDlip8hXCIsXG4gICAgc2F2ZUFnYWluQnV0dG9uOiBcIuiri+mHjeipplwiLFxuICAgIHRpbWVyTWluOiBcIuacgOWwj1wiLFxuICAgIHRpbWVyU2VjOiBcIuenklwiLFxuICAgIHRpbWVyU3BlbnRBbGw6IFwi5oKo5Zyo5q2k6aCB6Z2i5LiK6Iqx6LK75LqGezB977yM57i95YWxezF944CCXCIsXG4gICAgdGltZXJTcGVudFBhZ2U6IFwi5oKo5Zyo5q2k6aCB6Z2i5LiK6Iqx6LK75LqGezB944CCXCIsXG4gICAgdGltZXJTcGVudFN1cnZleTogXCLkvaDnuL3lhbHoirHkuoZ7MH3jgIJcIixcbiAgICB0aW1lckxpbWl0QWxsOiBcIuaCqOWcqOatpOmggemdouS4iuiKseiyu+S6hnswfXsxfe+8jOe4veWFseiKseiyu+S6hnsyfXszfeOAglwiLFxuICAgIHRpbWVyTGltaXRQYWdlOiBcIuaCqOWcqOatpOmggemdouS4iuiKseiyu+S6hnswfXsxfeOAglwiLFxuICAgIHRpbWVyTGltaXRTdXJ2ZXk6IFwi5oKo57i95YWx6Iqx6LK75LqGezF955qEezB944CCXCIsXG4gICAgY2xlYXJDYXB0aW9uOiBcIua4healmlwiLFxuICAgIHNpZ25hdHVyZVBsYWNlSG9sZGVyOiBcIuWcqOatpOewveWQjVwiLFxuICAgIGNob29zZUZpbGVDYXB0aW9uOiBcIumBuOaTh+aqlOahiFwiLFxuICAgIHRha2VQaG90b0NhcHRpb246IFwi5ouN54WnXCIsXG4gICAgY2FtZXJhUGxhY2VIb2xkZXI6IFwi5oyJ5LiL5LiL6Z2i55qE5oyJ6YiV5L2/55So55u45qmf5ouN54Wn44CCXCIsXG4gICAgZmlsZUNhbWVyYURyYWdBcmVhUGxhY2VIb2xkZXI6IFwi5ouW5pS+5oiW6YG45pOH6KaB5LiK5YKz55qE5qqU5oiW5L2/55So55u45qmf5ouN5pSd54Wn54mH44CCXCIsXG4gICAgcmVwbGFjZUZpbGVDYXB0aW9uOiBcIuabv+aPm+aqlFwiLFxuICAgIHJlbW92ZUZpbGVDYXB0aW9uOiBcIuWIqumZpOatpOaqlFwiLFxuICAgIGJvb2xlYW5DaGVja2VkTGFiZWw6IFwi5piv55qEXCIsXG4gICAgYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcIuS4jVwiLFxuICAgIGNvbmZpcm1SZW1vdmVGaWxlOiBcIuaYr+WQpueiuuWvpuimgeWIqumZpOatpOaqlO+8mnswfe+8n1wiLFxuICAgIGNvbmZpcm1SZW1vdmVBbGxGaWxlczogXCLmmK/lkKbnorrlr6bopoHliKrpmaTmiYDmnInmqpTvvJ9cIixcbiAgICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwi5ZWP6aGM5qiZ6aGMXCIsXG4gICAgbW9kYWxDYW5jZWxCdXR0b25UZXh0OiBcIuWPlua2iFwiLFxuICAgIG1vZGFsQXBwbHlCdXR0b25UZXh0OiBcIuaHieeUqFwiLFxuICAgIGZpbHRlclN0cmluZ1BsYWNlaG9sZGVyOiBcIumNteWFpeS7peaQnOWwiy4uLlwiLFxuICAgIGVtcHR5TWVzc2FnZTogXCLmspLmnInopoHpoa/npLrnmoTmlbjmk5pcIixcbiAgICBub0VudHJpZXNUZXh0OiBcIuWwmueEoeaineebruOAglxcbuaMieS4i+S4i+mdoueahOaMiemIleS7pea3u+WKoOaWsOaineebruOAglwiLFxuICAgIG5vRW50cmllc1JlYWRvbmx5VGV4dDogXCLmspLmnInmop3nm67jgIJcIixcbiAgICBtb3JlOiBcIuabtOWkmlwiLFxuICAgIHRhZ2JveERvbmVCdXR0b25DYXB0aW9uOiBcIumChOihjFwiLFxuICAgIHNlbGVjdFRvUmFua0VtcHR5UmFua2VkQXJlYVRleHQ6IFwi5omA5pyJ6YG45pOH5Z2H5bey5o6S5ZCNXCIsXG4gICAgc2VsZWN0VG9SYW5rRW1wdHlVbnJhbmtlZEFyZWFUZXh0OiBcIuWwh+mBuOmgheaLluaUvuWIsOatpOiZlemAsuihjOaOkuWQjVwiXG59O1xuc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN1cnZleUxvY2FsaXphdGlvblwiXS5sb2NhbGVzW1wiemgtdHdcIl0gPSB0cmFkaXRpb25hbENoaW5lc2VTdXJ2ZXlTdHJpbmdzO1xuc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN1cnZleUxvY2FsaXphdGlvblwiXS5sb2NhbGVOYW1lc1tcInpoLXR3XCJdID0gXCLnuYHpq5TkuK3mlodcIjtcbi8vIFRoZSBmb2xsb3dpbmcgc3RyaW5ncyBoYXZlIGJlZW4gdHJhbnNsYXRlZCBieSBhIG1hY2hpbmUgdHJhbnNsYXRpb24gc2VydmljZVxuLy8gUmVtb3ZlIHRob3NlIHN0cmluZ3MgdGhhdCB5b3UgaGF2ZSBjb3JyZWN0ZWQgbWFudWFsbHlcbi8vIHByZXZpZXdUZXh0OiBcIlByZXZpZXdcIiA9PiBcIumgkOimvVwiXG4vLyBlZGl0VGV4dDogXCJFZGl0XCIgPT4gXCLnt6jovK9cIlxuLy8gc3RhcnRTdXJ2ZXlUZXh0OiBcIlN0YXJ0XCIgPT4gXCLplovlp4tcIlxuLy8gbm9uZUl0ZW1UZXh0OiBcIk5vbmVcIiA9PiBcIuaykuaciVwiXG4vLyBzZWxlY3RBbGxJdGVtVGV4dDogXCJTZWxlY3QgQWxsXCIgPT4gXCLlhajpgbhcIlxuLy8gaW5kZXhUZXh0OiBcInswfSBvZiB7MX1cIiA9PiBcInsxfXswfVwiXG4vLyBwYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ6IFwiezB9IG9mIHsxfVwiID0+IFwiezF9ezB9XCJcbi8vIHBhbmVsRHluYW1pY1RhYlRleHRGb3JtYXQ6IFwiUGFuZWwge3BhbmVsSW5kZXh9XCIgPT4gXCLpnaLmnb8ge+mdouadv+e0ouW8lX1cIlxuLy8gcXVlc3Rpb25zUHJvZ3Jlc3NUZXh0OiBcIkFuc3dlcmVkIHswfS97MX0gcXVlc3Rpb25zXCIgPT4gXCLlm57nrZTkuoZ7MH0vezF95ZWP6aGMXCJcbi8vIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6IFwiT3VyIHJlY29yZHMgc2hvdyB0aGF0IHlvdSBoYXZlIGFscmVhZHkgY29tcGxldGVkIHRoaXMgc3VydmV5LlwiID0+IFwi5oiR5YCR55qE6KiY6YyE6aGv56S65oKo5bey57aT5a6M5oiQ5LqG5q2k6Kq/5p+l44CCXCJcbi8vIHJhdGluZ09wdGlvbnNDYXB0aW9uOiBcIlNlbGVjdC4uLlwiID0+IFwi6YG45pOH44CC44CC44CCXCJcbi8vIHZhbHVlOiBcInZhbHVlXCIgPT4gXCLlg7nlgLxcIlxuLy8gcmVxdWlyZWRFcnJvckluUGFuZWw6IFwiUmVzcG9uc2UgcmVxdWlyZWQ6IGFuc3dlciBhdCBsZWFzdCBvbmUgcXVlc3Rpb24uXCIgPT4gXCLpnIDopoHlm57nrZTvvJroh7PlsJHlm57nrZTkuIDlgIvllY/poYzjgIJcIlxuLy8gbWluRXJyb3I6IFwiVGhlIHZhbHVlIHNob3VsZCBub3QgYmUgbGVzcyB0aGFuIHswfVwiID0+IFwi6Kmy5YC85LiN5oeJ5bCP5pa8IHswfVwiXG4vLyBtYXhFcnJvcjogXCJUaGUgdmFsdWUgc2hvdWxkIG5vdCBiZSBncmVhdGVyIHRoYW4gezB9XCIgPT4gXCLoqbLlgLzkuI3mh4nlpKfmlrwgezB9XCJcbi8vIGludmFsaWRFeHByZXNzaW9uOiBcIlRoZSBleHByZXNzaW9uOiB7MH0gc2hvdWxkIHJldHVybiAndHJ1ZScuXCIgPT4gXCLooajpgZTlvI/vvJp7MH3mh4nov5Tlm57jgIx0cnVl44CN44CCXCJcbi8vIGxvYWRpbmdGaWxlOiBcIkxvYWRpbmcuLi5cIiA9PiBcIuijnei8ieOAguOAguOAglwiXG4vLyBjaG9vc2VGaWxlOiBcIkNob29zZSBmaWxlKHMpLi4uXCIgPT4gXCLpgbjmk4fmqpTmoYguLi5cIlxuLy8gbm9GaWxlQ2hvc2VuOiBcIk5vIGZpbGUgY2hvc2VuXCIgPT4gXCLmnKrpgbjmk4fku7vkvZXmqpRcIlxuLy8gZmlsZURyYWdBcmVhUGxhY2Vob2xkZXI6IFwiRHJhZyBhbmQgZHJvcCBhIGZpbGUgaGVyZSBvciBjbGljayB0aGUgYnV0dG9uIGJlbG93IGFuZCBjaG9vc2UgYSBmaWxlIHRvIHVwbG9hZC5cIiA9PiBcIuWwh+aqlOahiOaLluaUvuWIsOatpOiZleaIluaMieS4i+S4i+mdoueahOaMiemIleS4pumBuOaTh+imgeS4iuWCs+eahOaqlOOAglwiXG4vLyBjb25maXJtRGVsZXRlOiBcIkRvIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGUgcmVjb3JkP1wiID0+IFwi5piv5ZCm6KaB5Yiq6Zmk6KiY6YyE77yfXCJcbi8vIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwiVGhpcyB2YWx1ZSBzaG91bGQgYmUgdW5pcXVlLlwiID0+IFwi5q2k5YC85oeJ6Kmy5piv5ZSv5LiA55qE44CCXCJcbi8vIGFkZENvbHVtbjogXCJBZGQgQ29sdW1uXCIgPT4gXCLmt7vliqDliJdcIlxuLy8gZW1wdHlSb3dzVGV4dDogXCJUaGVyZSBhcmUgbm8gcm93cy5cIiA9PiBcIuaykuacieihjOOAglwiXG4vLyBhZGRQYW5lbDogXCJBZGQgbmV3XCIgPT4gXCLmlrDlop5cIlxuLy8gcmVtb3ZlUGFuZWw6IFwiUmVtb3ZlXCIgPT4gXCLliKrpmaRcIlxuLy8gbXVsdGlwbGV0ZXh0X2l0ZW1uYW1lOiBcInRleHRcIiA9PiBcIueZvOewoeioilwiXG4vLyB0aW1lck1pbjogXCJtaW5cIiA9PiBcIuacgOWwj1wiXG4vLyB0aW1lclNlYzogXCJzZWNcIiA9PiBcIuenklwiXG4vLyB0aW1lclNwZW50QWxsOiBcIllvdSBoYXZlIHNwZW50IHswfSBvbiB0aGlzIHBhZ2UgYW5kIHsxfSBpbiB0b3RhbC5cIiA9PiBcIuaCqOWcqOatpOmggemdouS4iuiKseiyu+S6hnswfe+8jOe4veWFsXsxfeOAglwiXG4vLyB0aW1lclNwZW50UGFnZTogXCJZb3UgaGF2ZSBzcGVudCB7MH0gb24gdGhpcyBwYWdlLlwiID0+IFwi5oKo5Zyo5q2k6aCB6Z2i5LiK6Iqx6LK75LqGezB944CCXCJcbi8vIHRpbWVyU3BlbnRTdXJ2ZXk6IFwiWW91IGhhdmUgc3BlbnQgezB9IGluIHRvdGFsLlwiID0+IFwi5L2g57i95YWx6Iqx5LqGezB944CCXCJcbi8vIHRpbWVyTGltaXRBbGw6IFwiWW91IGhhdmUgc3BlbnQgezB9IG9mIHsxfSBvbiB0aGlzIHBhZ2UgYW5kIHsyfSBvZiB7M30gaW4gdG90YWwuXCIgPT4gXCLmgqjlnKjmraTpoIHpnaLkuIroirHosrvkuoZ7MH17MX3vvIznuL3lhbHoirHosrvkuoZ7Mn17M33jgIJcIlxuLy8gdGltZXJMaW1pdFBhZ2U6IFwiWW91IGhhdmUgc3BlbnQgezB9IG9mIHsxfSBvbiB0aGlzIHBhZ2UuXCIgPT4gXCLmgqjlnKjmraTpoIHpnaLkuIroirHosrvkuoZ7MH17MX3jgIJcIlxuLy8gdGltZXJMaW1pdFN1cnZleTogXCJZb3UgaGF2ZSBzcGVudCB7MH0gb2YgezF9IGluIHRvdGFsLlwiID0+IFwi5oKo57i95YWx6Iqx6LK75LqGezF955qEezB944CCXCJcbi8vIGNsZWFyQ2FwdGlvbjogXCJDbGVhclwiID0+IFwi5riF5qWaXCJcbi8vIHNpZ25hdHVyZVBsYWNlSG9sZGVyOiBcIlNpZ24gaGVyZVwiID0+IFwi5Zyo5q2k57C95ZCNXCJcbi8vIGNob29zZUZpbGVDYXB0aW9uOiBcIkNob29zZSBmaWxlXCIgPT4gXCLpgbjmk4fmqpTmoYhcIlxuLy8gcmVtb3ZlRmlsZUNhcHRpb246IFwiUmVtb3ZlIHRoaXMgZmlsZVwiID0+IFwi5Yiq6Zmk5q2k5qqUXCJcbi8vIGJvb2xlYW5DaGVja2VkTGFiZWw6IFwiWWVzXCIgPT4gXCLmmK/nmoRcIlxuLy8gYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcIk5vXCIgPT4gXCLkuI1cIlxuLy8gY29uZmlybVJlbW92ZUZpbGU6IFwiQXJlIHlvdSBzdXJlIHRoYXQgeW91IHdhbnQgdG8gcmVtb3ZlIHRoaXMgZmlsZTogezB9P1wiID0+IFwi5piv5ZCm56K65a+m6KaB5Yiq6Zmk5q2k5qqU77yaezB977yfXCJcbi8vIGNvbmZpcm1SZW1vdmVBbGxGaWxlczogXCJBcmUgeW91IHN1cmUgdGhhdCB5b3Ugd2FudCB0byByZW1vdmUgYWxsIGZpbGVzP1wiID0+IFwi5piv5ZCm56K65a+m6KaB5Yiq6Zmk5omA5pyJ5qqU77yfXCJcbi8vIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCJRdWVzdGlvbiBUaXRsZVwiID0+IFwi5ZWP6aGM5qiZ6aGMXCJcbi8vIG1vZGFsQ2FuY2VsQnV0dG9uVGV4dDogXCJDYW5jZWxcIiA9PiBcIuWPlua2iFwiXG4vLyBtb2RhbEFwcGx5QnV0dG9uVGV4dDogXCJBcHBseVwiID0+IFwi5oeJ55SoXCJcbi8vIGZpbHRlclN0cmluZ1BsYWNlaG9sZGVyOiBcIlR5cGUgdG8gc2VhcmNoLi4uXCIgPT4gXCLpjbXlhaXku6XmkJzlsIsuLi5cIlxuLy8gZW1wdHlNZXNzYWdlOiBcIk5vIGRhdGEgdG8gZGlzcGxheVwiID0+IFwi5rKS5pyJ6KaB6aGv56S655qE5pW45pOaXCJcbi8vIG5vRW50cmllc1RleHQ6IFwiVGhlcmUgYXJlIG5vIGVudHJpZXMgeWV0LlxcbkNsaWNrIHRoZSBidXR0b24gYmVsb3cgdG8gYWRkIGEgbmV3IGVudHJ5LlwiID0+IFwi5bCa54Sh5qKd55uu44CCXFxu5oyJ5LiL5LiL6Z2i55qE5oyJ6YiV5Lul5re75Yqg5paw5qKd55uu44CCXCJcbi8vIG5vRW50cmllc1JlYWRvbmx5VGV4dDogXCJUaGVyZSBhcmUgbm8gZW50cmllcy5cIiA9PiBcIuaykuacieaineebruOAglwiXG4vLyBtb3JlOiBcIk1vcmVcIiA9PiBcIuabtOWkmlwiXG4vLyB0YWdib3hEb25lQnV0dG9uQ2FwdGlvbjogXCJPS1wiID0+IFwi6YKE6KGMXCJcbi8vIHNlbGVjdFRvUmFua0VtcHR5UmFua2VkQXJlYVRleHQ6IFwiQWxsIGNob2ljZXMgYXJlIHJhbmtlZFwiID0+IFwi5omA5pyJ6YG45pOH5Z2H5bey5o6S5ZCNXCJcbi8vIHNlbGVjdFRvUmFua0VtcHR5VW5yYW5rZWRBcmVhVGV4dDogXCJEcmFnIGFuZCBkcm9wIGNob2ljZXMgaGVyZSB0byByYW5rIHRoZW1cIiA9PiBcIuWwh+mBuOmgheaLluaUvuWIsOatpOiZlemAsuihjOaOkuWQjVwiLy8gdGFrZVBob3RvQ2FwdGlvbjogXCJUYWtlIFBob3RvXCIgPT4gXCLmi43nhadcIlxuLy8gY2FtZXJhUGxhY2VIb2xkZXI6IFwiQ2xpY2sgdGhlIGJ1dHRvbiBiZWxvdyB0byB0YWtlIGEgcGhvdG8gdXNpbmcgdGhlIGNhbWVyYS5cIiA9PiBcIuaMieS4i+S4i+mdoueahOaMiemIleS9v+eUqOebuOapn+aLjeeFp+OAglwiXG4vLyBmaWxlQ2FtZXJhRHJhZ0FyZWFQbGFjZUhvbGRlcjogXCJEcmFnIGFuZCBkcm9wIG9yIHNlbGVjdCBhIGZpbGUgdG8gdXBsb2FkIG9yIHRha2UgYSBwaG90byB1c2luZyB0aGUgY2FtZXJhLlwiID0+IFwi5ouW5pS+5oiW6YG45pOH6KaB5LiK5YKz55qE5qqU5oiW5L2/55So55u45qmf5ouN5pSd54Wn54mH44CCXCJcbi8vIHJlcGxhY2VGaWxlQ2FwdGlvbjogXCJSZXBsYWNlIGZpbGVcIiA9PiBcIuabv+aPm+aqlFwiXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvbG9jYWxpemF0aW9uL3R1cmtpc2gudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvbG9jYWxpemF0aW9uL3R1cmtpc2gudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogdHVya2lzaFN1cnZleVN0cmluZ3MgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwidHVya2lzaFN1cnZleVN0cmluZ3NcIiwgZnVuY3Rpb24oKSB7IHJldHVybiB0dXJraXNoU3VydmV5U3RyaW5nczsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHN1cnZleS1jb3JlICovIFwiLi9zcmMvZW50cmllcy9jb3JlLnRzXCIpO1xuXG52YXIgdHVya2lzaFN1cnZleVN0cmluZ3MgPSB7XG4gICAgcGFnZVByZXZUZXh0OiBcIsOWbmNla2lcIixcbiAgICBwYWdlTmV4dFRleHQ6IFwiU29ucmFraVwiLFxuICAgIGNvbXBsZXRlVGV4dDogXCJUYW1hbWxhXCIsXG4gICAgcHJldmlld1RleHQ6IFwiw5ZuaXpsZW1lXCIsXG4gICAgZWRpdFRleHQ6IFwiRMO8emVubGVcIixcbiAgICBzdGFydFN1cnZleVRleHQ6IFwiQmHFn2xhdFwiLFxuICAgIG90aGVySXRlbVRleHQ6IFwiRGnEn2VyIChhw6fEsWtsYXnEsW7EsXopXCIsXG4gICAgbm9uZUl0ZW1UZXh0OiBcIkhpw6diaXJpXCIsXG4gICAgc2VsZWN0QWxsSXRlbVRleHQ6IFwiVMO8bcO8bsO8IFNlw6dcIixcbiAgICBwcm9ncmVzc1RleHQ6IFwiU2F5ZmEgezB9L3sxfVwiLFxuICAgIGluZGV4VGV4dDogXCJ7MH0vezF9XCIsXG4gICAgcGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0OiBcInswfS97MX1cIixcbiAgICBwYW5lbER5bmFtaWNUYWJUZXh0Rm9ybWF0OiBcIlBhbmVsIHtwYW5lbEluZGV4fVwiLFxuICAgIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCJ7MH0vezF9IHNvcnUgeWFuxLF0bGFuZMSxXCIsXG4gICAgZW1wdHlTdXJ2ZXk6IFwiQW5rZXR0ZSBnw7Zyw7xudMO8bGVuZWNlayBzYXlmYSB5YSBkYSBzb3J1IG1ldmN1dCBkZcSfaWwuXCIsXG4gICAgY29tcGxldGluZ1N1cnZleTogXCJBbmtldGkgdGFtYW1sYWTEscSfxLFuxLF6IGnDp2luIHRlxZ9la2vDvHIgZWRlcml6XCIsXG4gICAgY29tcGxldGluZ1N1cnZleUJlZm9yZTogXCJLYXnEsXRsYXLEsW3EsXogYnUgYW5rZXRpIHphdGVuIHRhbWFtbGFkxLHEn8SxbsSxesSxIGfDtnN0ZXJpeW9yLlwiLFxuICAgIGxvYWRpbmdTdXJ2ZXk6IFwiQW5rZXQgWcO8a2xlbml5b3IuLi5cIixcbiAgICBwbGFjZWhvbGRlcjogXCJTZcOnaW5pei4uLlwiLFxuICAgIHJhdGluZ09wdGlvbnNDYXB0aW9uOiBcIlNlw6dpbml6Li4uXCIsXG4gICAgdmFsdWU6IFwiZGXEn2VyXCIsXG4gICAgcmVxdWlyZWRFcnJvcjogXCJMw7x0ZmVuIHNvcnV5YSBjZXZhcCB2ZXJpbi5cIixcbiAgICByZXF1aXJlZEVycm9ySW5QYW5lbDogXCJMw7x0ZmVuIGVuIGF6IGJpciBzb3J1eXUgeWFuxLF0bGF5xLFuLlwiLFxuICAgIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwiTMO8dGZlbiB0w7xtIHNhdMSxcmxhcmRha2kgc29ydWxhcsSxIGNldmFwbGF5xLFuLlwiLFxuICAgIG51bWVyaWNFcnJvcjogXCJEZcSfZXIgc2F5xLFzYWwgb2xtYWzEsWTEsXIuXCIsXG4gICAgbWluRXJyb3I6IFwiRGXEn2VyIHswfSdkZW4ga8O8w6fDvGsgb2xtYW1hbMSxZMSxclwiLFxuICAgIG1heEVycm9yOiBcIkRlxJ9lciB7MH0nZGFuIGLDvHnDvGsgb2xtYW1hbMSxZMSxclwiLFxuICAgIHRleHRNaW5MZW5ndGg6IFwiTMO8dGZlbiBlbiBheiB7MH0ga2FyYWt0ZXIgZ2lyaW4uXCIsXG4gICAgdGV4dE1heExlbmd0aDogXCJMw7x0ZmVuIGVuIGZhemxhIHswfSBrYXJha3RlciBnaXJpbi5cIixcbiAgICB0ZXh0TWluTWF4TGVuZ3RoOiBcIkzDvHRmZW4gezB94oCZZGVuIGZhemxhIHZlIHsxfeKAmWRlbiBheiBrYXJha3RlciBnaXJpbi5cIixcbiAgICBtaW5Sb3dDb3VudEVycm9yOiBcIkzDvHRmZW4gZW4gYXogezB9IHNhdMSxcsSxIGRvbGR1cnVuLlwiLFxuICAgIG1pblNlbGVjdEVycm9yOiBcIkzDvHRmZW4gZW4gYXogezB9IHNlw6dlbmXEn2kgc2XDp2luLlwiLFxuICAgIG1heFNlbGVjdEVycm9yOiBcIkzDvHRmZW4gZW4gZmF6bGEgezB9IHNlw6dlbmXEn2kgc2XDp2luLlwiLFxuICAgIG51bWVyaWNNaW5NYXg6IFwiJ3swfScsIHsxfSdlIGXFn2l0IHZleWEgZGFoYSBiw7x5w7xrIHZlIHsyfSd5ZSBlxZ9pdCB2ZXlhIGRhaGEga8O8w6fDvGsgb2xtYWzEsWTEsXJcIixcbiAgICBudW1lcmljTWluOiBcIid7MH0nIGRlxJ9lcmkgezF9IGRlxJ9lcmluZSBlxZ9pdCB2ZXlhIGLDvHnDvGsgb2xtYWzEsWTEsXJcIixcbiAgICBudW1lcmljTWF4OiBcIid7MH0nIGRlxJ9lcmkgezF9IGRlxJ9lcmluZSBlxZ9pdCB5YSBkYSBrw7zDp8O8ayBvbG1hbMSxZMSxci5cIixcbiAgICBpbnZhbGlkRW1haWw6IFwiTMO8dGZlbiBnZcOnZXJsaSBiaXIgZS1wb3N0YSBhZHJlc2kgZ2lyaW4uXCIsXG4gICAgaW52YWxpZEV4cHJlc3Npb246IFwixLBmYWRlOiB7MH0gJ3RydWUnIGTDtm5kw7xybWVsaWRpci5cIixcbiAgICB1cmxSZXF1ZXN0RXJyb3I6IFwixLBzdGVrICd7MH0nIGhhdGFzxLFuxLEgZMO2bmTDvHJkw7wuIHsxfVwiLFxuICAgIHVybEdldENob2ljZXNFcnJvcjogXCLEsHN0ZWsgYm/FnyB2ZXJpIGTDtm5kw7xyZMO8IHZleWEgJ3BhdGgnIMO2emVsbGnEn2kgeWFubMSxxZ9cIixcbiAgICBleGNlZWRNYXhTaXplOiBcIkRvc3lhIGJveXV0dSB7MH0gZGXEn2VyaW5pIGdlw6dlbWV6LlwiLFxuICAgIG90aGVyUmVxdWlyZWRFcnJvcjogXCJMw7x0ZmVuIGRpxJ9lciBkZcSfZXJsZXJpIGdpcmluLlwiLFxuICAgIHVwbG9hZGluZ0ZpbGU6IFwiRG9zeWFuxLF6IHnDvGtsZW5peW9yLiBMw7x0ZmVuIGJpcmthw6cgc2FuaXllIGJla2xleWluIHZlIHRla3JhciBkZW5leWluLlwiLFxuICAgIGxvYWRpbmdGaWxlOiBcIlnDvGtsZW5peW9yLi4uXCIsXG4gICAgY2hvb3NlRmlsZTogXCJEb3N5YWxhcsSxIHNlw6dpbi4uLlwiLFxuICAgIG5vRmlsZUNob3NlbjogXCJEb3N5YSBzZcOnaWxpIGRlxJ9pbFwiLFxuICAgIGZpbGVEcmFnQXJlYVBsYWNlaG9sZGVyOiBcIkJ1cmF5YSBiaXIgZG9zeWEgYsSxcmFrxLFuIHZleWEgZG9zeWF5xLEgecO8a2xlbWVrIGnDp2luIGHFn2HEn8SxZGFraSBkw7zEn21leWkgdMSxa2xhecSxbi5cIixcbiAgICBjb25maXJtRGVsZXRlOiBcIktheWTEsSBzaWxtZWsgaXN0aXlvciBtdXN1bnV6P1wiLFxuICAgIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwiQnUgZGXEn2VyIGJlbnplcnNpeiBvbG1hbMSxZMSxci5cIixcbiAgICBhZGRDb2x1bW46IFwiU8O8dHVuIEVrbGVcIixcbiAgICBhZGRSb3c6IFwiU2F0xLFyIEVrbGVcIixcbiAgICByZW1vdmVSb3c6IFwiS2FsZMSxclwiLFxuICAgIGVtcHR5Um93c1RleHQ6IFwiU2F0xLFyIHlvay5cIixcbiAgICBhZGRQYW5lbDogXCJZZW5pIGVrbGVcIixcbiAgICByZW1vdmVQYW5lbDogXCJLYWxkxLFyXCIsXG4gICAgY2hvaWNlc19JdGVtOiBcIsO2xJ9lXCIsXG4gICAgbWF0cml4X2NvbHVtbjogXCJTw7x0dW5cIixcbiAgICBtYXRyaXhfcm93OiBcIlNhdMSxclwiLFxuICAgIG11bHRpcGxldGV4dF9pdGVtbmFtZTogXCJtZXRpblwiLFxuICAgIHNhdmluZ0RhdGE6IFwiU29udcOnbGFyIHN1bnVjdXlhIGtheWRlZGlsaXlvci4uLlwiLFxuICAgIHNhdmluZ0RhdGFFcnJvcjogXCJCaXIgaGF0YSBvbHXFn3R1IHZlIHNvbnXDp2xhciBrYXlkZWRpbGVtZWRpLlwiLFxuICAgIHNhdmluZ0RhdGFTdWNjZXNzOiBcIlNvbnXDp2xhciBiYcWfYXLEsXlsYSBrYXlkZWRpbGRpIVwiLFxuICAgIHNhdmVBZ2FpbkJ1dHRvbjogXCJUZWtyYXIgZGVuZXlpblwiLFxuICAgIHRpbWVyTWluOiBcImRha2lrYVwiLFxuICAgIHRpbWVyU2VjOiBcInNhbml5ZVwiLFxuICAgIHRpbWVyU3BlbnRBbGw6IFwiQnUgc2F5ZmFkYSB7MH0gdmUgdG9wbGFtZGEgezF9IGhhcmNhZMSxbsSxei5cIixcbiAgICB0aW1lclNwZW50UGFnZTogXCJCdSBzYXlmYXlhIHswfSBoYXJjYWTEsW7EsXouXCIsXG4gICAgdGltZXJTcGVudFN1cnZleTogXCJUb3BsYW1kYSB7MH0gaGFyY2FkxLFuxLF6LlwiLFxuICAgIHRpbWVyTGltaXRBbGw6IFwiQnUgc2F5ZmF5YSB7MH0vezF9IHZlIHRvcGxhbWRhIHsyfS97M30gaGFyY2FkxLFuxLF6LlwiLFxuICAgIHRpbWVyTGltaXRQYWdlOiBcIkJ1IHNheWZheWEgezB9L3sxfSBoYXJjYWTEsW7EsXouXCIsXG4gICAgdGltZXJMaW1pdFN1cnZleTogXCJUb3BsYW1kYSB7MH0vezF9IGhhcmNhZMSxbsSxei5cIixcbiAgICBjbGVhckNhcHRpb246IFwiVGVtaXpsZVwiLFxuICAgIHNpZ25hdHVyZVBsYWNlSG9sZGVyOiBcIkJ1cmF5xLEgaW16YWxhecSxblwiLFxuICAgIGNob29zZUZpbGVDYXB0aW9uOiBcIkRvc3lhIHNlw6dpblwiLFxuICAgIHRha2VQaG90b0NhcHRpb246IFwiRm90b8SfcmFmIMOHZWtpblwiLFxuICAgIGNhbWVyYVBsYWNlSG9sZGVyOiBcIkthbWVyYXnEsSBrdWxsYW5hcmFrIGZvdG/En3JhZiDDp2VrbWVrIGnDp2luIGHFn2HEn8SxZGFraSBkw7zEn21leWkgdMSxa2xhecSxbi5cIixcbiAgICBmaWxlQ2FtZXJhRHJhZ0FyZWFQbGFjZUhvbGRlcjogXCJLYW1lcmF5xLEga3VsbGFuYXJhayBmb3RvxJ9yYWYgecO8a2xlbWVrIHZleWEgZm90b8SfcmFmIMOnZWttZWsgacOnaW4gYmlyIGRvc3lhecSxIHPDvHLDvGtsZXlpcCBixLFyYWvEsW4gdmV5YSBzZcOnaW4uXCIsXG4gICAgcmVwbGFjZUZpbGVDYXB0aW9uOiBcIkRvc3lhecSxIGRlxJ9pxZ90aXJcIixcbiAgICByZW1vdmVGaWxlQ2FwdGlvbjogXCJCdSBkb3N5YXnEsSBrYWxkxLFyXCIsXG4gICAgYm9vbGVhbkNoZWNrZWRMYWJlbDogXCJFdmV0XCIsXG4gICAgYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcIkhhecSxclwiLFxuICAgIGNvbmZpcm1SZW1vdmVGaWxlOiBcIkJ1IGRvc3lhecSxIGthbGTEsXJtYWsgaXN0ZWRpxJ9pbml6ZGVuIGVtaW4gbWlzaW5pejogezB9P1wiLFxuICAgIGNvbmZpcm1SZW1vdmVBbGxGaWxlczogXCJUw7xtIGRvc3lhbGFyxLEga2FsZMSxcm1hayBpc3RlZGnEn2luaXpkZW4gZW1pbiBtaXNpbml6P1wiLFxuICAgIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCJTb3J1IEJhxZ9sxLHEn8SxXCIsXG4gICAgbW9kYWxDYW5jZWxCdXR0b25UZXh0OiBcIsSwcHRhbFwiLFxuICAgIG1vZGFsQXBwbHlCdXR0b25UZXh0OiBcIlV5Z3VsYVwiLFxuICAgIGZpbHRlclN0cmluZ1BsYWNlaG9sZGVyOiBcIkFyYW1hayBpw6dpbiB5YXrEsW4uLi5cIixcbiAgICBlbXB0eU1lc3NhZ2U6IFwiR8O2csO8bnTDvGxlbmVjZWsgdmVyaSB5b2tcIixcbiAgICBub0VudHJpZXNUZXh0OiBcIkhlbsO8eiBnaXJpxZ8geW9rLlxcblllbmkgYmlyIGdpcmnFnyBla2xlbWVrIGnDp2luIGHFn2HEn8SxZGFraSBkw7zEn21leWkgdMSxa2xhecSxbi5cIixcbiAgICBub0VudHJpZXNSZWFkb25seVRleHQ6IFwiR2lyacWfIHlvay5cIixcbiAgICBtb3JlOiBcIkRhaGEgZmF6bGFcIixcbiAgICB0YWdib3hEb25lQnV0dG9uQ2FwdGlvbjogXCJUQU1BTVwiLFxuICAgIHNlbGVjdFRvUmFua0VtcHR5UmFua2VkQXJlYVRleHQ6IFwiVMO8bSBzZcOnZW5la2xlciBzxLFyYWxhbm3EscWfdMSxclwiLFxuICAgIHNlbGVjdFRvUmFua0VtcHR5VW5yYW5rZWRBcmVhVGV4dDogXCJTZcOnaW1sZXJpIHPEsXJhbGFtYWsgacOnaW4gYnVyYXlhIHPDvHLDvGtsZXlpcCBixLFyYWvEsW5cIlxufTtcbnN1cnZleV9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdXJ2ZXlMb2NhbGl6YXRpb25cIl0ubG9jYWxlc1tcInRyXCJdID0gdHVya2lzaFN1cnZleVN0cmluZ3M7XG5zdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3VydmV5TG9jYWxpemF0aW9uXCJdLmxvY2FsZU5hbWVzW1widHJcIl0gPSBcInTDvHJrw6dlXCI7XG4vLyBUaGUgZm9sbG93aW5nIHN0cmluZ3MgaGF2ZSBiZWVuIHRyYW5zbGF0ZWQgYnkgYSBtYWNoaW5lIHRyYW5zbGF0aW9uIHNlcnZpY2Vcbi8vIFJlbW92ZSB0aG9zZSBzdHJpbmdzIHRoYXQgeW91IGhhdmUgY29ycmVjdGVkIG1hbnVhbGx5XG4vLyB0YWtlUGhvdG9DYXB0aW9uOiBcIlRha2UgUGhvdG9cIiA9PiBcIkZvdG/En3JhZiDDh2VraW5cIlxuLy8gY2FtZXJhUGxhY2VIb2xkZXI6IFwiQ2xpY2sgdGhlIGJ1dHRvbiBiZWxvdyB0byB0YWtlIGEgcGhvdG8gdXNpbmcgdGhlIGNhbWVyYS5cIiA9PiBcIkthbWVyYXnEsSBrdWxsYW5hcmFrIGZvdG/En3JhZiDDp2VrbWVrIGnDp2luIGHFn2HEn8SxZGFraSBkw7zEn21leWkgdMSxa2xhecSxbi5cIlxuLy8gZmlsZUNhbWVyYURyYWdBcmVhUGxhY2VIb2xkZXI6IFwiRHJhZyBhbmQgZHJvcCBvciBzZWxlY3QgYSBmaWxlIHRvIHVwbG9hZCBvciB0YWtlIGEgcGhvdG8gdXNpbmcgdGhlIGNhbWVyYS5cIiA9PiBcIkthbWVyYXnEsSBrdWxsYW5hcmFrIGZvdG/En3JhZiB5w7xrbGVtZWsgdmV5YSBmb3RvxJ9yYWYgw6dla21layBpw6dpbiBiaXIgZG9zeWF5xLEgc8O8csO8a2xleWlwIGLEsXJha8SxbiB2ZXlhIHNlw6dpbi5cIlxuLy8gcmVwbGFjZUZpbGVDYXB0aW9uOiBcIlJlcGxhY2UgZmlsZVwiID0+IFwiRG9zeWF5xLEgZGXEn2nFn3RpclwiXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvbG9jYWxpemF0aW9uL3VrcmFpbmlhbi50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL2xvY2FsaXphdGlvbi91a3JhaW5pYW4udHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiB1a3JhaW5pYW5TdXJ2ZXlTdHJpbmdzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInVrcmFpbmlhblN1cnZleVN0cmluZ3NcIiwgZnVuY3Rpb24oKSB7IHJldHVybiB1a3JhaW5pYW5TdXJ2ZXlTdHJpbmdzOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBzdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgc3VydmV5LWNvcmUgKi8gXCIuL3NyYy9lbnRyaWVzL2NvcmUudHNcIik7XG5cbnZhciB1a3JhaW5pYW5TdXJ2ZXlTdHJpbmdzID0ge1xuICAgIHBhZ2VQcmV2VGV4dDogXCLQndCw0LfQsNC0XCIsXG4gICAgcGFnZU5leHRUZXh0OiBcItCU0LDQu9GWXCIsXG4gICAgY29tcGxldGVUZXh0OiBcItCX0LDQstC10YDRiNC40YLQuFwiLFxuICAgIHByZXZpZXdUZXh0OiBcItCf0L7Qv9C10YDQtdC00L3RltC5INC/0LXRgNC10LPQu9GP0LRcIixcbiAgICBlZGl0VGV4dDogXCLQoNC10LTQsNCz0YPQstCw0YLQuFwiLFxuICAgIHN0YXJ0U3VydmV5VGV4dDogXCLQn9C+0YfQsNGC0LhcIixcbiAgICBvdGhlckl0ZW1UZXh0OiBcItCG0L3RiNC1ICjQsdGD0LTRjCDQu9Cw0YHQutCwLCDQvtC/0LjRiNGW0YLRjClcIixcbiAgICBub25lSXRlbVRleHQ6IFwi0JbQvtC00LXQvVwiLFxuICAgIHNlbGVjdEFsbEl0ZW1UZXh0OiBcItCS0LjQsdGA0LDRgtC4INCy0YHQtVwiLFxuICAgIHByb2dyZXNzVGV4dDogXCLQodGC0L7RgNGW0L3QutCwIHswfSDQtyB7MX1cIixcbiAgICBpbmRleFRleHQ6IFwiezB9IHsxfVwiLFxuICAgIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCLQl9Cw0L/QuNGBIHswfSDRltC3IHsxfVwiLFxuICAgIHBhbmVsRHluYW1pY1RhYlRleHRGb3JtYXQ6IFwi0J/QsNC90LXQu9GMIHtwYW5lbEluZGV4fVwiLFxuICAgIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCLQktGW0LTQv9C+0LLRltC70Lgg0L3QsCB7MH0vezF9INC/0LjRgtCw0L3RjFwiLFxuICAgIGVtcHR5U3VydmV5OiBcItCd0LXQvNCw0ZQg0LbQvtC00L3QvtCz0L4g0L/QuNGC0LDQvdC90Y8uXCIsXG4gICAgY29tcGxldGluZ1N1cnZleTogXCLQlNGP0LrRg9GU0LzQviDQktCw0Lwg0LfQsCDQt9Cw0L/QvtCy0L3QtdC90L3RjyDQsNC90LrQtdGC0LghXCIsXG4gICAgY29tcGxldGluZ1N1cnZleUJlZm9yZTogXCLQktC4INCy0LbQtSDQv9GA0L7RhdC+0LTQuNC70Lgg0YbQtSDQvtC/0LjRgtGD0LLQsNC90L3Rjy5cIixcbiAgICBsb2FkaW5nU3VydmV5OiBcItCX0LDQstCw0L3RgtCw0LbQtdC90L3RjyDQvtC/0LjRgtGD0LLQsNC90L3Rjy4uLlwiLFxuICAgIHBsYWNlaG9sZGVyOiBcItCS0LjQsdGA0LDRgtC4Li4uXCIsXG4gICAgcmF0aW5nT3B0aW9uc0NhcHRpb246IFwi0JLQuNCx0LXRgNGW0YLRjC4uLlwiLFxuICAgIHZhbHVlOiBcItC30L3QsNGH0LXQvdC90Y9cIixcbiAgICByZXF1aXJlZEVycm9yOiBcItCR0YPQtNGMINC70LDRgdC60LAsINC00LDQudGC0LUg0LLRltC00L/QvtCy0ZbQtNGMLlwiLFxuICAgIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcItCR0YPQtNGMINC70LDRgdC60LAsINC00LDQudGC0LUg0LLRltC00L/QvtCy0ZbQtNGMINGF0L7Rh9CwINCxINC90LAg0L7QtNC90LUg0L/QuNGC0LDQvdC90Y8uXCIsXG4gICAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCLQkdGD0LTRjCDQu9Cw0YHQutCwLCDQtNCw0LnRgtC1INCy0ZbQtNC/0L7QstGW0LTRjCDQvdCwINC/0LjRgtCw0L3QvdGPINCyINC60L7QttC90L7QvNGDINGA0Y/QtNC60YMuXCIsXG4gICAgbnVtZXJpY0Vycm9yOiBcItCS0ZbQtNC/0L7QstGW0LTRjCDQv9C+0LLQuNC90L3QsCDQsdGD0YLQuCDRh9C40YHQu9C+0LwuXCIsXG4gICAgbWluRXJyb3I6IFwi0JfQvdCw0YfQtdC90L3RjyDQvdC1INC/0L7QstC40L3QvdC+INCx0YPRgtC4INC80LXQvdGI0LUgezB9XCIsXG4gICAgbWF4RXJyb3I6IFwi0JfQvdCw0YfQtdC90L3RjyDQvdC1INC/0L7QstC40L3QvdC+INCx0YPRgtC4INCx0ZbQu9GM0YjQtSB7MH1cIixcbiAgICB0ZXh0TWluTGVuZ3RoOiBcItCR0YPQtNGMINC70LDRgdC60LAg0LLQstC10LTRltGC0Ywg0LHRltC70YzRiNC1IHswfSDRgdC40LzQstC+0LvRltCyLlwiLFxuICAgIHRleHRNYXhMZW5ndGg6IFwi0JHRg9C00Ywg0LvQsNGB0LrQsCDQstCy0LXQtNGW0YLRjCDQvNC10L3RiNC1IHswfSDRgdC40LzQstC+0LvRltCyLlwiLFxuICAgIHRleHRNaW5NYXhMZW5ndGg6IFwi0JHRg9C00Ywg0LvQsNGB0LrQsCDQstCy0LXQtNGW0YLRjCDQsdGW0LvRjNGI0LUgezB9INC4INC80LXQvdGI0LUgezF9INGB0LjQvNCy0L7Qu9GW0LIuXCIsXG4gICAgbWluUm93Q291bnRFcnJvcjogXCLQkdGD0LTRjCDQu9Cw0YHQutCwLCDQt9Cw0L/QvtCy0L3RltGC0Ywg0L3QtSDQvNC10L3RiNC1IHswfSDRgNGP0LTQutGW0LIuXCIsXG4gICAgbWluU2VsZWN0RXJyb3I6IFwi0JHRg9C00Ywg0LvQsNGB0LrQsCwg0LLQuNCx0LXRgNGW0YLRjCDRhdC+0YfQsCDQsSB7MH0g0LLQsNGA0ZbQsNC90YLRltCyLlwiLFxuICAgIG1heFNlbGVjdEVycm9yOiBcItCR0YPQtNGMINC70LDRgdC60LAsINCy0LjQsdC10YDRltGC0Ywg0L3QtSDQsdGW0LvRjNGI0LUgezB9INCy0LDRgNGW0LDQvdGC0ZbQsi5cIixcbiAgICBudW1lcmljTWluTWF4OiBcIid7MH0nINC/0L7QstC40L3QvdC+INCx0YPRgtC4INC90LUg0LzQtdC90YjQtSDQvdGW0LYgezF9LCDRliDQvdC1INCx0ZbQu9GM0YjQtSDQvdGW0LYgezJ9XCIsXG4gICAgbnVtZXJpY01pbjogXCInezB9JyDQv9C+0LLQuNC90L3QviDQsdGD0YLQuCDQvdC1INC80LXQvdGI0LUg0L3RltC2IHsxfVwiLFxuICAgIG51bWVyaWNNYXg6IFwiJ3swfScg0L/QvtCy0LjQvdC90L4g0LHRg9GC0Lgg0L3QtSDQsdGW0LvRjNGI0LUg0L3RltC2IHsxfVwiLFxuICAgIGludmFsaWRFbWFpbDogXCLQkdGD0LTRjCDQu9Cw0YHQutCwLCDQstCy0LXQtNGW0YLRjCDQtNGW0LnRgdC90YMg0LDQtNGA0LXRgdGDINC10LvQtdC60YLRgNC+0L3QvdC+0Zcg0L/QvtGI0YLQuC5cIixcbiAgICBpbnZhbGlkRXhwcmVzc2lvbjogXCLQktC40YDQsNC3IHswfSDQv9C+0LLQuNC90LXQvSDQv9C+0LLQtdGA0YLQsNGC0LggJ3RydWUnLlwiLFxuICAgIHVybFJlcXVlc3RFcnJvcjogXCLQl9Cw0L/QuNGCINC/0L7QstC10YDQvdGD0LIg0L/QvtC80LjQu9C60YMgJ3swfScuIHsxfVwiLFxuICAgIHVybEdldENob2ljZXNFcnJvcjogXCLQktGW0LTQv9C+0LLRltC00Ywg0L3QsCDQt9Cw0L/QuNGCINC/0L7QstC10YDQvdGD0LvQsNGB0Ywg0L/QvtGA0L7QttC90YzQvtGOINCw0LHQviDQstC70LDRgdGC0LjQstGW0YLRjCAncGF0aCcg0LLQutCw0LfQsNC90L4g0L3QtdCy0ZbRgNC90L5cIixcbiAgICBleGNlZWRNYXhTaXplOiBcItCg0L7Qt9C80ZbRgCDRhNCw0LnQu9GDINC90LUg0L/QvtCy0LjQvdC10L0g0L/QtdGA0LXQstC40YnRg9Cy0LDRgtC4IHswfS5cIixcbiAgICBvdGhlclJlcXVpcmVkRXJyb3I6IFwi0JHRg9C00Ywg0LvQsNGB0LrQsCwg0LLQstC10LTRltGC0Ywg0LTQsNC90ZYg0LIg0L/QvtC70LUgJ9CG0L3RiNC1J1wiLFxuICAgIHVwbG9hZGluZ0ZpbGU6IFwi0JLQsNGIINGE0LDQudC7INC30LDQstCw0L3RgtCw0LbRg9GU0YLRjNGB0Y8uINCX0LDRh9C10LrQsNC50YLQtSDQtNC10LrRltC70YzQutCwINGB0LXQutGD0L3QtCDRliDRgdC/0YDQvtCx0YPQudGC0LUg0LfQvdC+0LLRgy5cIixcbiAgICBsb2FkaW5nRmlsZTogXCLQl9Cw0LLQsNC90YLQsNC20LXQvdC90Y8uLi5cIixcbiAgICBjaG9vc2VGaWxlOiBcItCS0LjQsdC10YDRltGC0Ywg0YTQsNC50Lso0LgpLi4uXCIsXG4gICAgbm9GaWxlQ2hvc2VuOiBcItCk0LDQudC7INC90LUg0LLQuNCx0YDQsNC90L5cIixcbiAgICBmaWxlRHJhZ0FyZWFQbGFjZWhvbGRlcjogXCLQn9C10YDQtdGC0Y/Qs9C90ZbRgtGMINGE0LDQudC7INGB0Y7QtNC4INCw0LHQviDQvdCw0YLQuNGB0L3RltGC0Ywg0LrQvdC+0L/QutGDINC90LjQttGH0LUg0YLQsCDQstC40LHQtdGA0ZbRgtGMINGE0LDQudC7INC00LvRjyDQt9Cw0LLQsNC90YLQsNC20LXQvdC90Y8uXCIsXG4gICAgY29uZmlybURlbGV0ZTogXCLQktC4INGF0L7Rh9C10YLQtSDQstC40LTQsNC70LjRgtC4INC30LDQv9C40YE/XCIsXG4gICAga2V5RHVwbGljYXRpb25FcnJvcjogXCLQptC1INC30L3QsNGH0LXQvdC90Y8g0L/QvtCy0LjQvdC90L4g0LHRg9GC0Lgg0YPQvdGW0LrQsNC70YzQvdC40LwuXCIsXG4gICAgYWRkQ29sdW1uOiBcItCU0L7QtNCw0YLQuCDQutC+0LvQvtC90LrRg1wiLFxuICAgIGFkZFJvdzogXCLQlNC+0LTQsNGC0Lgg0YDRj9C00L7QulwiLFxuICAgIHJlbW92ZVJvdzogXCLQktC40LTQsNC70LjRgtC4XCIsXG4gICAgZW1wdHlSb3dzVGV4dDogXCLQoNGP0LTRltCyINC90LXQvNCw0ZQuXCIsXG4gICAgYWRkUGFuZWw6IFwi0JTQvtC00LDRgtC4INC90L7QstGDXCIsXG4gICAgcmVtb3ZlUGFuZWw6IFwi0JLQuNC00LDQu9C40YLQuFwiLFxuICAgIGNob2ljZXNfSXRlbTogXCLQktCw0YDRltCw0L3RglwiLFxuICAgIG1hdHJpeF9jb2x1bW46IFwi0JrQvtC70L7QvdC60LBcIixcbiAgICBtYXRyaXhfcm93OiBcItCg0Y/QtNC+0LpcIixcbiAgICBtdWx0aXBsZXRleHRfaXRlbW5hbWU6IFwi0KLQtdC60YHRglwiLFxuICAgIHNhdmluZ0RhdGE6IFwi0KDQtdC30YPQu9GM0YLQsNGC0Lgg0LfQsdC10YDRltCz0LDRjtGC0YzRgdGPINC90LAg0YHQtdGA0LLQtdGALi4uXCIsXG4gICAgc2F2aW5nRGF0YUVycm9yOiBcItCS0ZbQtNCx0YPQu9Cw0YHRjyDQv9C+0LzQuNC70LrQsCwg0YDQtdC30YPQu9GM0YLQsNGCINC90LUg0LHRg9CyINC30LHQtdGA0LXQttC10L3QuNC5LlwiLFxuICAgIHNhdmluZ0RhdGFTdWNjZXNzOiBcItCg0LXQt9Cy0YPQu9GM0YLQsNGCINGD0YHQv9GW0YjQvdC+INC30LHQtdGA0LXQttC10L3QuNC5IVwiLFxuICAgIHNhdmVBZ2FpbkJ1dHRvbjogXCLQodC/0YDQvtCx0YPQstCw0YLQuCDQt9C90L7QstGDXCIsXG4gICAgdGltZXJNaW46IFwi0YXQslwiLFxuICAgIHRpbWVyU2VjOiBcItGB0LXQulwiLFxuICAgIHRpbWVyU3BlbnRBbGw6IFwi0JLQuCDQstC40YLRgNCw0YLQuNC70LggezB9INC90LAg0YbRltC5INGB0YLQvtGA0ZbQvdGG0ZYg0ZYgezF9INC30LDQs9Cw0LvQvtC8LlwiLFxuICAgIHRpbWVyU3BlbnRQYWdlOiBcItCS0Lgg0LLQuNGC0YDQsNGC0LjQu9C4IHswfSDQvdCwINGG0ZbQuSDRgdGC0L7RgNGW0L3RhtGWLlwiLFxuICAgIHRpbWVyU3BlbnRTdXJ2ZXk6IFwi0JLQuCDQstC40YLRgNCw0YLQuNC70LggezB9INC/0YDQvtGC0Y/Qs9C+0Lwg0YLQtdGB0YLRgy5cIixcbiAgICB0aW1lckxpbWl0QWxsOiBcItCS0Lgg0LLQuNGC0YDQsNGC0LjQu9C4IHswfSDQtyB7MX0g0L3QsCDRhtGW0Lkg0YHRgtC+0YDRltC90YbRliDRliB7Mn0g0LcgezN9INC00LvRjyDQstGB0YzQvtCz0L4g0YLQtdGB0YLRgy5cIixcbiAgICB0aW1lckxpbWl0UGFnZTogXCLQktC4INCy0LjRgtGA0LDRgtC40LvQuCB7MH0g0LcgezF9INC90LAg0YbRltC5INGB0YLQvtGA0ZbQvdGG0ZYuXCIsXG4gICAgdGltZXJMaW1pdFN1cnZleTogXCLQktC4INCy0LjRgtGA0LDRgtC40LvQuCB7MH0g0LcgezF9INC00LvRjyDQstGB0YzQvtCz0L4g0YLQtdGB0YLRgy5cIixcbiAgICBjbGVhckNhcHRpb246IFwi0J7Rh9C40YHRgtC40YLQuFwiLFxuICAgIHNpZ25hdHVyZVBsYWNlSG9sZGVyOiBcItCf0ZbQtNC/0LjRiNGW0YLRjNGB0Y8g0YLRg9GCXCIsXG4gICAgY2hvb3NlRmlsZUNhcHRpb246IFwi0JLQuNCx0LXRgNGW0YLRjCDRhNCw0LnQu1wiLFxuICAgIHRha2VQaG90b0NhcHRpb246IFwi0JfRgNC+0LHQuNGC0Lgg0YTQvtGC0L5cIixcbiAgICBjYW1lcmFQbGFjZUhvbGRlcjogXCLQndCw0YLQuNGB0L3RltGC0Ywg0LrQvdC+0L/QutGDINC90LjQttGH0LUsINGJ0L7QsSDQt9GA0L7QsdC40YLQuCDRhNC+0YLQviDQt9CwINC00L7Qv9C+0LzQvtCz0L7RjiDQutCw0LzQtdGA0LguXCIsXG4gICAgZmlsZUNhbWVyYURyYWdBcmVhUGxhY2VIb2xkZXI6IFwi0J/QtdGA0LXRgtGP0LPQvdGW0YLRjCDQsNCx0L4g0LLQuNCx0LXRgNGW0YLRjCDRhNCw0LnQuywg0YnQvtCxINC30LDQstCw0L3RgtCw0LbQuNGC0Lgg0LDQsdC+INC30YDQvtCx0LjRgtC4INGE0L7RgtC+0LPRgNCw0YTRltGOINC30LAg0LTQvtC/0L7QvNC+0LPQvtGOINC60LDQvNC10YDQuC5cIixcbiAgICByZXBsYWNlRmlsZUNhcHRpb246IFwi0JfQsNC80ZbQvdC40YLQuCDRhNCw0LnQu1wiLFxuICAgIHJlbW92ZUZpbGVDYXB0aW9uOiBcItCS0LjQtNCw0LvQuNGC0Lgg0YTQsNC50LtcIixcbiAgICBib29sZWFuQ2hlY2tlZExhYmVsOiBcItCi0LDQulwiLFxuICAgIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCLQndGWXCIsXG4gICAgY29uZmlybVJlbW92ZUZpbGU6IFwi0JLQuCDQstC/0LXQstC90LXQvdGWLCDRidC+INGF0L7Rh9C10YLQtSDQstC40LTQsNC70LjRgtC4INGG0LXQuSDRhNCw0LnQuzogezB9P1wiLFxuICAgIGNvbmZpcm1SZW1vdmVBbGxGaWxlczogXCLQktC4INCy0L/QtdCy0L3QtdC90ZYsINGJ0L4g0YXQvtGH0LXRgtC1INCy0LjQtNCw0LvQuNGC0Lgg0LLRgdGWINGE0LDQudC70Lg/XCIsXG4gICAgcXVlc3Rpb25UaXRsZVBhdHRlcm5UZXh0OiBcItCd0LDQt9Cy0LAg0LfQsNC/0LjRgtCw0L3QvdGPXCIsXG4gICAgbW9kYWxDYW5jZWxCdXR0b25UZXh0OiBcItCh0LrQsNGB0YPQstCw0YLQuFwiLFxuICAgIG1vZGFsQXBwbHlCdXR0b25UZXh0OiBcItCX0LDRgdGC0L7RgdC+0LLRg9Cy0LDRgtC4XCIsXG4gICAgZmlsdGVyU3RyaW5nUGxhY2Vob2xkZXI6IFwi0JLQstC10LTRltGC0Ywg0LTQu9GPINC/0L7RiNGD0LrRgy4uLlwiLFxuICAgIGVtcHR5TWVzc2FnZTogXCLQndC10LzQsNGUINC00LDQvdC40YUg0LTQu9GPINCy0ZbQtNC+0LHRgNCw0LbQtdC90L3Rj1wiLFxuICAgIG5vRW50cmllc1RleHQ6IFwi0JfQsNC/0LjRgdGW0LIg0L/QvtC60Lgg0L3QtdC80LDRlC5cXG7QndCw0YLQuNGB0L3RltGC0Ywg0LrQvdC+0L/QutGDINC90LjQttGH0LUsINGJ0L7QsSDQtNC+0LTQsNGC0Lgg0L3QvtCy0LjQuSDQt9Cw0L/QuNGBLlwiLFxuICAgIG5vRW50cmllc1JlYWRvbmx5VGV4dDogXCLQl9Cw0L/QuNGB0ZbQsiDQvdC10LzQsNGULlwiLFxuICAgIG1vcmU6IFwi0JHRltC70YzRiNC1XCIsXG4gICAgdGFnYm94RG9uZUJ1dHRvbkNhcHRpb246IFwi0JPQkNCg0JDQl9CUXCIsXG4gICAgc2VsZWN0VG9SYW5rRW1wdHlSYW5rZWRBcmVhVGV4dDogXCLQktGB0ZYg0LLQsNGA0ZbQsNC90YLQuCDRgNCw0L3QttGD0Y7RgtGM0YHRj1wiLFxuICAgIHNlbGVjdFRvUmFua0VtcHR5VW5yYW5rZWRBcmVhVGV4dDogXCLQn9C10YDQtdGC0Y/Qs9C90ZbRgtGMINCy0LDRgNGW0LDQvdGC0Lgg0YLRg9GCLCDRidC+0LEg0L7RhtGW0L3QuNGC0Lgg0ZfRhVwiXG59O1xuc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN1cnZleUxvY2FsaXphdGlvblwiXS5sb2NhbGVzW1widWFcIl0gPSB1a3JhaW5pYW5TdXJ2ZXlTdHJpbmdzO1xuc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN1cnZleUxvY2FsaXphdGlvblwiXS5sb2NhbGVOYW1lc1tcInVhXCJdID0gXCLRg9C60YDQsNGX0L3RgdGM0LrQsFwiO1xuLy8gVGhlIGZvbGxvd2luZyBzdHJpbmdzIGhhdmUgYmVlbiB0cmFuc2xhdGVkIGJ5IGEgbWFjaGluZSB0cmFuc2xhdGlvbiBzZXJ2aWNlXG4vLyBSZW1vdmUgdGhvc2Ugc3RyaW5ncyB0aGF0IHlvdSBoYXZlIGNvcnJlY3RlZCBtYW51YWxseVxuLy8gaW5kZXhUZXh0OiBcInswfSBvZiB7MX1cIiA9PiBcInswfSB7MX1cIlxuLy8gcGFuZWxEeW5hbWljVGFiVGV4dEZvcm1hdDogXCJQYW5lbCB7cGFuZWxJbmRleH1cIiA9PiBcItCf0LDQvdC10LvRjCB7cGFuZWxJbmRleH1cIlxuLy8gcmF0aW5nT3B0aW9uc0NhcHRpb246IFwiU2VsZWN0Li4uXCIgPT4gXCLQktC40LHQtdGA0ZbRgtGMLi4uXCJcbi8vIG1pbkVycm9yOiBcIlRoZSB2YWx1ZSBzaG91bGQgbm90IGJlIGxlc3MgdGhhbiB7MH1cIiA9PiBcItCX0L3QsNGH0LXQvdC90Y8g0L3QtSDQv9C+0LLQuNC90L3QviDQsdGD0YLQuCDQvNC10L3RiNC1IHswfVwiXG4vLyBtYXhFcnJvcjogXCJUaGUgdmFsdWUgc2hvdWxkIG5vdCBiZSBncmVhdGVyIHRoYW4gezB9XCIgPT4gXCLQl9C90LDRh9C10L3QvdGPINC90LUg0L/QvtCy0LjQvdC90L4g0LHRg9GC0Lgg0LHRltC70YzRiNC1IHswfVwiXG4vLyBmaWxlRHJhZ0FyZWFQbGFjZWhvbGRlcjogXCJEcmFnIGFuZCBkcm9wIGEgZmlsZSBoZXJlIG9yIGNsaWNrIHRoZSBidXR0b24gYmVsb3cgYW5kIGNob29zZSBhIGZpbGUgdG8gdXBsb2FkLlwiID0+IFwi0J/QtdGA0LXRgtGP0LPQvdGW0YLRjCDRhNCw0LnQuyDRgdGO0LTQuCDQsNCx0L4g0L3QsNGC0LjRgdC90ZbRgtGMINC60L3QvtC/0LrRgyDQvdC40LbRh9C1INGC0LAg0LLQuNCx0LXRgNGW0YLRjCDRhNCw0LnQuyDQtNC70Y8g0LfQsNCy0LDQvdGC0LDQttC10L3QvdGPLlwiXG4vLyBlbXB0eVJvd3NUZXh0OiBcIlRoZXJlIGFyZSBubyByb3dzLlwiID0+IFwi0KDRj9C00ZbQsiDQvdC10LzQsNGULlwiXG4vLyBtdWx0aXBsZXRleHRfaXRlbW5hbWU6IFwidGV4dFwiID0+IFwi0KLQtdC60YHRglwiXG4vLyBzaWduYXR1cmVQbGFjZUhvbGRlcjogXCJTaWduIGhlcmVcIiA9PiBcItCf0ZbQtNC/0LjRiNGW0YLRjNGB0Y8g0YLRg9GCXCJcbi8vIG1vZGFsQ2FuY2VsQnV0dG9uVGV4dDogXCJDYW5jZWxcIiA9PiBcItCh0LrQsNGB0YPQstCw0YLQuFwiXG4vLyBtb2RhbEFwcGx5QnV0dG9uVGV4dDogXCJBcHBseVwiID0+IFwi0JfQsNGB0YLQvtGB0L7QstGD0LLQsNGC0LhcIlxuLy8gZmlsdGVyU3RyaW5nUGxhY2Vob2xkZXI6IFwiVHlwZSB0byBzZWFyY2guLi5cIiA9PiBcItCS0LLQtdC00ZbRgtGMINC00LvRjyDQv9C+0YjRg9C60YMuLi5cIlxuLy8gZW1wdHlNZXNzYWdlOiBcIk5vIGRhdGEgdG8gZGlzcGxheVwiID0+IFwi0J3QtdC80LDRlCDQtNCw0L3QuNGFINC00LvRjyDQstGW0LTQvtCx0YDQsNC20LXQvdC90Y9cIlxuLy8gbm9FbnRyaWVzVGV4dDogXCJUaGVyZSBhcmUgbm8gZW50cmllcyB5ZXQuXFxuQ2xpY2sgdGhlIGJ1dHRvbiBiZWxvdyB0byBhZGQgYSBuZXcgZW50cnkuXCIgPT4gXCLQl9Cw0L/QuNGB0ZbQsiDQv9C+0LrQuCDQvdC10LzQsNGULlxcbtCd0LDRgtC40YHQvdGW0YLRjCDQutC90L7Qv9C60YMg0L3QuNC20YfQtSwg0YnQvtCxINC00L7QtNCw0YLQuCDQvdC+0LLQuNC5INC30LDQv9C40YEuXCJcbi8vIG5vRW50cmllc1JlYWRvbmx5VGV4dDogXCJUaGVyZSBhcmUgbm8gZW50cmllcy5cIiA9PiBcItCX0LDQv9C40YHRltCyINC90LXQvNCw0ZQuXCJcbi8vIG1vcmU6IFwiTW9yZVwiID0+IFwi0JHRltC70YzRiNC1XCJcbi8vIHRhZ2JveERvbmVCdXR0b25DYXB0aW9uOiBcIk9LXCIgPT4gXCLQk9CQ0KDQkNCX0JRcIlxuLy8gc2VsZWN0VG9SYW5rRW1wdHlSYW5rZWRBcmVhVGV4dDogXCJBbGwgY2hvaWNlcyBhcmUgcmFua2VkXCIgPT4gXCLQktGB0ZYg0LLQsNGA0ZbQsNC90YLQuCDRgNCw0L3QttGD0Y7RgtGM0YHRj1wiXG4vLyBzZWxlY3RUb1JhbmtFbXB0eVVucmFua2VkQXJlYVRleHQ6IFwiRHJhZyBhbmQgZHJvcCBjaG9pY2VzIGhlcmUgdG8gcmFuayB0aGVtXCIgPT4gXCLQn9C10YDQtdGC0Y/Qs9C90ZbRgtGMINCy0LDRgNGW0LDQvdGC0Lgg0YLRg9GCLCDRidC+0LEg0L7RhtGW0L3QuNGC0Lgg0ZfRhVwiLy8gdGFrZVBob3RvQ2FwdGlvbjogXCJUYWtlIFBob3RvXCIgPT4gXCLQl9GA0L7QsdC40YLQuCDRhNC+0YLQvlwiXG4vLyBjYW1lcmFQbGFjZUhvbGRlcjogXCJDbGljayB0aGUgYnV0dG9uIGJlbG93IHRvIHRha2UgYSBwaG90byB1c2luZyB0aGUgY2FtZXJhLlwiID0+IFwi0J3QsNGC0LjRgdC90ZbRgtGMINC60L3QvtC/0LrRgyDQvdC40LbRh9C1LCDRidC+0LEg0LfRgNC+0LHQuNGC0Lgg0YTQvtGC0L4g0LfQsCDQtNC+0L/QvtC80L7Qs9C+0Y4g0LrQsNC80LXRgNC4LlwiXG4vLyBmaWxlQ2FtZXJhRHJhZ0FyZWFQbGFjZUhvbGRlcjogXCJEcmFnIGFuZCBkcm9wIG9yIHNlbGVjdCBhIGZpbGUgdG8gdXBsb2FkIG9yIHRha2UgYSBwaG90byB1c2luZyB0aGUgY2FtZXJhLlwiID0+IFwi0J/QtdGA0LXRgtGP0LPQvdGW0YLRjCDQsNCx0L4g0LLQuNCx0LXRgNGW0YLRjCDRhNCw0LnQuywg0YnQvtCxINC30LDQstCw0L3RgtCw0LbQuNGC0Lgg0LDQsdC+INC30YDQvtCx0LjRgtC4INGE0L7RgtC+0LPRgNCw0YTRltGOINC30LAg0LTQvtC/0L7QvNC+0LPQvtGOINC60LDQvNC10YDQuC5cIlxuLy8gcmVwbGFjZUZpbGVDYXB0aW9uOiBcIlJlcGxhY2UgZmlsZVwiID0+IFwi0JfQsNC80ZbQvdC40YLQuCDRhNCw0LnQu1wiXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvbG9jYWxpemF0aW9uL3ZpZXRuYW1lc2UudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvbG9jYWxpemF0aW9uL3ZpZXRuYW1lc2UudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogdmlldG5hbWVzZVN1cnZleVN0cmluZ3MgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwidmlldG5hbWVzZVN1cnZleVN0cmluZ3NcIiwgZnVuY3Rpb24oKSB7IHJldHVybiB2aWV0bmFtZXNlU3VydmV5U3RyaW5nczsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHN1cnZleS1jb3JlICovIFwiLi9zcmMvZW50cmllcy9jb3JlLnRzXCIpO1xuXG52YXIgdmlldG5hbWVzZVN1cnZleVN0cmluZ3MgPSB7XG4gICAgcGFnZVByZXZUZXh0OiBcIlRy4bufIHbhu4FcIixcbiAgICBwYWdlTmV4dFRleHQ6IFwiVGnhur9wIHRoZW9cIixcbiAgICBjb21wbGV0ZVRleHQ6IFwiSG/DoG4gdGjDoG5oXCIsXG4gICAgcHJldmlld1RleHQ6IFwiWGVtIHRyxrDhu5tjXCIsXG4gICAgZWRpdFRleHQ6IFwiQ2jhu4luaCBz4butYVwiLFxuICAgIHN0YXJ0U3VydmV5VGV4dDogXCJC4bqvdCDEkeG6p3VcIixcbiAgICBvdGhlckl0ZW1UZXh0OiBcIktow6FjIChtw7QgdOG6oylcIixcbiAgICBub25lSXRlbVRleHQ6IFwiVHLhu5FuZ1wiLFxuICAgIHNlbGVjdEFsbEl0ZW1UZXh0OiBcIkNo4buNbiB04bqldCBj4bqjXCIsXG4gICAgcHJvZ3Jlc3NUZXh0OiBcIlRyYW5nIHswfSAvIHsxfVwiLFxuICAgIGluZGV4VGV4dDogXCJ7MH0gY+G7p2EgezF9XCIsXG4gICAgcGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0OiBcIkTDsm5nIHswfSAvIHsxfVwiLFxuICAgIHBhbmVsRHluYW1pY1RhYlRleHRGb3JtYXQ6IFwiQuG6o25nIMSRaeG7gXUga2hp4buDbiB7cGFuZWxJbmRleH1cIixcbiAgICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwixJDDoyB0cuG6oyBs4budaSB7MH0vezF9IGPDonUgaOG7j2lcIixcbiAgICBlbXB0eVN1cnZleTogXCJLaMO0bmcgY8OzIHRyYW5nIGhv4bq3YyBjw6J1IGjhu49pIG7DoG8gxJHGsOG7o2MgaGnhu4NuIHRo4buLIHRyb25nIGN14buZYyBraOG6o28gc8OhdCBuw6B5LlwiLFxuICAgIGNvbXBsZXRpbmdTdXJ2ZXk6IFwiQ+G6o20gxqFuIMSRw6MgaG/DoG4gdGjDoG5oIGto4bqjbyBzw6F0IVwiLFxuICAgIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6IFwiSOG7kyBzxqEgY2jDum5nIHTDtGkgY2hvIHRo4bqleSBy4bqxbmcgYuG6oW4gxJHDoyBob8OgbiB0aMOgbmggY3Xhu5ljIGto4bqjbyBzw6F0IG7DoHkuXCIsXG4gICAgbG9hZGluZ1N1cnZleTogXCLEkGFuZyB04bqjaSBraOG6o28gc8OhdC4uLlwiLFxuICAgIHBsYWNlaG9sZGVyOiBcIkNo4buNbi4uLlwiLFxuICAgIHJhdGluZ09wdGlvbnNDYXB0aW9uOiBcIkzhu7FhLi4uXCIsXG4gICAgdmFsdWU6IFwiR2nDoSB0cuG7i1wiLFxuICAgIHJlcXVpcmVkRXJyb3I6IFwiVnVpIGzDsm5nIHRy4bqjIGzhu51pIGPDonUgaOG7j2kuXCIsXG4gICAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwiVnVpIGzDsm5nIHRy4bqjIGzhu51pIMOtdCBuaOG6pXQgbeG7mXQgY8OidSBo4buPaS5cIixcbiAgICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIlZ1aSBsw7JuZyB0cuG6oyBs4budaSBjw6FjIGPDonUgaOG7j2kgdHLDqm4gdOG6pXQgY+G6oyBjw6FjIGTDsm5nLlwiLFxuICAgIG51bWVyaWNFcnJvcjogXCJHacOhIHRy4buLIG7Dqm4gbMOgIGtp4buDdSBz4buRLlwiLFxuICAgIG1pbkVycm9yOiBcIkdpw6EgdHLhu4sga2jDtG5nIMSRxrDhu6NjIG5o4buPIGjGoW4gezB9XCIsXG4gICAgbWF4RXJyb3I6IFwiR2nDoSB0cuG7iyBraMO0bmcgxJHGsOG7o2MgbOG7m24gaMahbiB7MH1cIixcbiAgICB0ZXh0TWluTGVuZ3RoOiBcIlZ1aSBsw7JuZyBuaOG6rXAgw610IG5o4bqldCB7MH0ga8OtIHThu7EuXCIsXG4gICAgdGV4dE1heExlbmd0aDogXCJWdWkgbMOybmcgbmjhuq1wIMOtdCBoxqFuIHswfSBrw60gdOG7sS5cIixcbiAgICB0ZXh0TWluTWF4TGVuZ3RoOiBcIlZ1aSBsw7JuZyBuaOG6rXAgbmhp4buBdSBoxqFuIHswfSBob+G6t2Mgw610IGjGoW4gezF9IGvDrSB04buxLlwiLFxuICAgIG1pblJvd0NvdW50RXJyb3I6IFwiVnVpIGzDsm5nIG5o4bqtcCDDrXQgbmjhuqV0IHswfSBkw7JuZy5cIixcbiAgICBtaW5TZWxlY3RFcnJvcjogXCJWdWkgbMOybmcgY2jhu41uIMOtdCBuaOG6pXQgezB9IGxv4bqhaS5cIixcbiAgICBtYXhTZWxlY3RFcnJvcjogXCJWdWkgbMOybmcga2jDtG5nIGNo4buNbiBuaGnhu4F1IGjGoW4gezB9IGxv4bqhaS5cIixcbiAgICBudW1lcmljTWluTWF4OiBcIkdpw6EgdHLhu4sgJ3swfScgbsOqbiBi4bqxbmcgaG/hurdjIGzhu5tuIGjGoW4gezF9IHbDoCBi4bqxbmcgaG/hurdjIG5o4buPIGjGoW4gezJ9XCIsXG4gICAgbnVtZXJpY01pbjogXCJHacOhIHRy4buLICd7MH0nIG7Dqm4gYuG6sW5nIGhv4bq3YyBs4bubbiBoxqFuIHsxfVwiLFxuICAgIG51bWVyaWNNYXg6IFwiR2nDoSB0cuG7iyAnezB9JyBuw6puIGLhurFuZyBob+G6t2Mgbmjhu48gaMahbiB7MX1cIixcbiAgICBpbnZhbGlkRW1haWw6IFwiVnVpIGzDsm5nIMSRaeG7gW4gxJHhu4thIGNo4buJIGVtYWlsIGjhu6NwIGzhu4cuXCIsXG4gICAgaW52YWxpZEV4cHJlc3Npb246IFwiQmnhu4N1IHRo4bupYzogezB9IG7Dqm4gdHLhuqMgduG7gSAndHJ1ZScuXCIsXG4gICAgdXJsUmVxdWVzdEVycm9yOiBcIlnDqnUgY+G6p3UgdHLhuqMgduG7gSBs4buXaSAnezB9Jy4gezF9XCIsXG4gICAgdXJsR2V0Q2hvaWNlc0Vycm9yOiBcIlnDqnUgY+G6p3UgdHLhuqMgduG7gSBk4buvIGxp4buHdSB0cuG7kW5nIGhv4bq3YyB0aHXhu5ljIHTDrW5oICdwYXRoJyBraMO0bmcgxJHDum5nXCIsXG4gICAgZXhjZWVkTWF4U2l6ZTogXCJLw61jaCB0aMaw4bubYyB04bqtcCB0aW4ga2jDtG5nIG7Dqm4gdsaw4bujdCBxdcOhIHswfS5cIixcbiAgICBvdGhlclJlcXVpcmVkRXJyb3I6IFwiVnVpIGzDsm5nIMSRaeG7gW4gZ2nDoSB0cuG7iyBraMOhYy5cIixcbiAgICB1cGxvYWRpbmdGaWxlOiBcIlThuq1wIHRpbiDEkWFuZyDEkcaw4bujYyB04bqjaSBsw6puLiBWdWkgbMOybmcgY2jhu50gbeG7mXQgbMO6YyB2w6AgdGjhu60gbOG6oWkuXCIsXG4gICAgbG9hZGluZ0ZpbGU6IFwixJBhbmcgdOG6o2kuLi5cIixcbiAgICBjaG9vc2VGaWxlOiBcIkNo4buNbiBjw6FjIHThuq1wIHRpbi4uLlwiLFxuICAgIG5vRmlsZUNob3NlbjogXCJLaMO0bmcgY8OzIHThuq1wIHRpbiBuw6BvIMSRxrDhu6NjIGNo4buNblwiLFxuICAgIGZpbGVEcmFnQXJlYVBsYWNlaG9sZGVyOiBcIkvDqW8gdsOgIHRo4bqjIHThu4dwIHbDoG8gxJHDonkgaG/hurdjIG5o4bqlcCB2w6BvIG7DunQgYsOqbiBkxrDhu5tpIHbDoCBjaOG7jW4gdOG7h3AgxJHhu4MgdOG6o2kgbMOqbi5cIixcbiAgICBjb25maXJtRGVsZXRlOiBcIkLhuqFuIG114buRbiB4w7NhIGTDsm5nIG7DoHk/XCIsXG4gICAga2V5RHVwbGljYXRpb25FcnJvcjogXCJHacOhIHRy4buLIG7DoHkga2jDtG5nIG7Dqm4gYuG7iyB0csO5bmcgbOG6t3AuXCIsXG4gICAgYWRkQ29sdW1uOiBcIlRow6ptIGPhu5l0XCIsXG4gICAgYWRkUm93OiBcIlRow6ptIGTDsm5nXCIsXG4gICAgcmVtb3ZlUm93OiBcIljDs2FcIixcbiAgICBlbXB0eVJvd3NUZXh0OiBcIktow7RuZyBjw7MgaMOgbmcuXCIsXG4gICAgYWRkUGFuZWw6IFwiVGjDqm0gbeG7m2lcIixcbiAgICByZW1vdmVQYW5lbDogXCJYw7NhXCIsXG4gICAgY2hvaWNlc19JdGVtOiBcIm3hu6VjXCIsXG4gICAgbWF0cml4X2NvbHVtbjogXCJD4buZdFwiLFxuICAgIG1hdHJpeF9yb3c6IFwiRMOybmdcIixcbiAgICBtdWx0aXBsZXRleHRfaXRlbW5hbWU6IFwiTmjhuq9uIHRpblwiLFxuICAgIHNhdmluZ0RhdGE6IFwiS+G6v3QgcXXhuqMgxJFhbmcgbMawdSBs4bqhaSB0csOqbiBo4buHIHRo4buRbmcuLi5cIixcbiAgICBzYXZpbmdEYXRhRXJyb3I6IFwiQ8OzIGzhu5dpIHjhuqN5IHJhIHbDoCBjaMO6bmcgdGEga2jDtG5nIHRo4buDIGzGsHUga+G6v3QgcXXhuqMuXCIsXG4gICAgc2F2aW5nRGF0YVN1Y2Nlc3M6IFwiS+G6v3QgcXXhuqMgxJHDoyDEkcaw4bujYyBsxrB1IHRow6BuaCBjw7RuZyFcIixcbiAgICBzYXZlQWdhaW5CdXR0b246IFwiVGjhu60gbOG6oWlcIixcbiAgICB0aW1lck1pbjogXCJwaMO6dFwiLFxuICAgIHRpbWVyU2VjOiBcImdpw6J5XCIsXG4gICAgdGltZXJTcGVudEFsbDogXCJC4bqhbiDEkcOjIHPhu60gZOG7pW5nIHswfSB0csOqbiB0cmFuZyBuw6B5IHbDoCB7MX0gdHLDqm4gdG/DoG4gYuG7mS5cIixcbiAgICB0aW1lclNwZW50UGFnZTogXCJC4bqhbiDEkcOjIHPhu60gZOG7pW5nIHswfSB0csOqbiB0cmFuZy5cIixcbiAgICB0aW1lclNwZW50U3VydmV5OiBcIkLhuqFuIMSRw6Mgc+G7rSBk4bulbmcgezB9IHRyw6puIHRvw6BuIGLhu5kuXCIsXG4gICAgdGltZXJMaW1pdEFsbDogXCJC4bqhbiDEkcOjIHPhu60gZOG7pW5nIHswfSAvIHsxfSB0csOqbiB0cmFuZyBuw6B5IHbDoCB7Mn0gLyB7M30gdHLDqm4gdG/DoG4gYuG7mS5cIixcbiAgICB0aW1lckxpbWl0UGFnZTogXCJC4bqhbiDEkcOjIHPhu60gZOG7pW5nIHswfSAvIHsxfSB0csOqbiB0cmFuZyBuw6B5LlwiLFxuICAgIHRpbWVyTGltaXRTdXJ2ZXk6IFwiQuG6oW4gxJHDoyBz4butIGThu6VuZyB7MH0gLyB7MX0gdHLDqm4gdG/DoG4gYuG7mS5cIixcbiAgICBjbGVhckNhcHRpb246IFwiWMOzYVwiLFxuICAgIHNpZ25hdHVyZVBsYWNlSG9sZGVyOiBcIkvDvSB0w6puIHThuqFpIMSRw6J5XCIsXG4gICAgY2hvb3NlRmlsZUNhcHRpb246IFwiQ2jhu41uIHThuq1wIHRpblwiLFxuICAgIHRha2VQaG90b0NhcHRpb246IFwiQ2jhu6VwIOG6o25oXCIsXG4gICAgY2FtZXJhUGxhY2VIb2xkZXI6IFwiTmjhuqVwIHbDoG8gbsO6dCBiw6puIGTGsOG7m2kgxJHhu4MgY2jhu6VwIOG6o25oIGLhurFuZyBtw6F5IOG6o25oLlwiLFxuICAgIGZpbGVDYW1lcmFEcmFnQXJlYVBsYWNlSG9sZGVyOiBcIkvDqW8gdsOgIHRo4bqjIGhv4bq3YyBjaOG7jW4gdOG7h3AgxJHhu4MgdOG6o2kgbMOqbiBob+G6t2MgY2jhu6VwIOG6o25oIGLhurFuZyBtw6F5IOG6o25oLlwiLFxuICAgIHJlcGxhY2VGaWxlQ2FwdGlvbjogXCJUaGF5IHRo4bq/IHThuq1wIHRpblwiLFxuICAgIHJlbW92ZUZpbGVDYXB0aW9uOiBcIljDs2EgdOG6rXAgdGluXCIsXG4gICAgYm9vbGVhbkNoZWNrZWRMYWJlbDogXCJDw7NcIixcbiAgICBib29sZWFuVW5jaGVja2VkTGFiZWw6IFwiS2jDtG5nXCIsXG4gICAgY29uZmlybVJlbW92ZUZpbGU6IFwiQuG6oW4gY8OzIGNo4bqvYyBjaOG6r24gbXXhu5FuIHjDs2EgdOG6rXAgdGluIG7DoHk6IHswfT9cIixcbiAgICBjb25maXJtUmVtb3ZlQWxsRmlsZXM6IFwiQuG6oW4gY8OzIGNo4bqvYyBjaOG6r24gbXXhu5FuIHjDs2EgdG/DoG4gYuG7mSB04bqtcCB0aW4/XCIsXG4gICAgcXVlc3Rpb25UaXRsZVBhdHRlcm5UZXh0OiBcIlRpw6p1IMSR4buBIGPDonUgaOG7j2lcIixcbiAgICBtb2RhbENhbmNlbEJ1dHRvblRleHQ6IFwiSOG7p3lcIixcbiAgICBtb2RhbEFwcGx5QnV0dG9uVGV4dDogXCLDgXAgZOG7pW5nXCIsXG4gICAgZmlsdGVyU3RyaW5nUGxhY2Vob2xkZXI6IFwiTmjhuq1wIMSR4buDIHTDrG0ga2nhur9tLi4uXCIsXG4gICAgZW1wdHlNZXNzYWdlOiBcIktow7RuZyBjw7MgZOG7ryBsaeG7h3UgxJHhu4MgaGnhu4NuIHRo4buLXCIsXG4gICAgbm9FbnRyaWVzVGV4dDogXCJDaMawYSBjw7MgbeG7pWMgbsOgby5cXG5OaOG6pXAgdsOgbyBuw7p0IGLDqm4gZMaw4bubaSDEkeG7gyB0aMOqbSBt4bulYyBuaOG6rXAgbeG7m2kuXCIsXG4gICAgbm9FbnRyaWVzUmVhZG9ubHlUZXh0OiBcIktow7RuZyBjw7MgbeG7pWMuXCIsXG4gICAgbW9yZTogXCJOaGnhu4F1IGjGoW5cIixcbiAgICB0YWdib3hEb25lQnV0dG9uQ2FwdGlvbjogXCJPS1wiLFxuICAgIHNlbGVjdFRvUmFua0VtcHR5UmFua2VkQXJlYVRleHQ6IFwiVOG6pXQgY+G6oyBjw6FjIGzhu7FhIGNo4buNbiDEkcaw4bujYyB44bq/cCBo4bqhbmdcIixcbiAgICBzZWxlY3RUb1JhbmtFbXB0eVVucmFua2VkQXJlYVRleHQ6IFwiS8OpbyB2w6AgdGjhuqMgY8OhYyBs4buxYSBjaOG7jW4gdsOgbyDEkcOieSDEkeG7gyB44bq/cCBo4bqhbmcgY2jDum5nXCJcbn07XG4vL1VuY29tbWVudCB0aGVzZSB0d28gbGluZXMgb24gY3JlYXRpbmcgYSB0cmFuc2xhdGlvbiBmaWxlLiBZb3Ugc2hvdWxkIHJlcGxhY2UgXCJlblwiIGFuZCBlblN0cmluZ3Mgd2l0aCB5b3VyIGxvY2FsZSAoXCJmclwiLCBcImRlXCIgYW5kIHNvIG9uKSBhbmQgeW91ciB2YXJpYWJsZS5cbnN1cnZleV9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdXJ2ZXlMb2NhbGl6YXRpb25cIl0ubG9jYWxlc1tcInZpXCJdID0gdmlldG5hbWVzZVN1cnZleVN0cmluZ3M7XG5zdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3VydmV5TG9jYWxpemF0aW9uXCJdLmxvY2FsZU5hbWVzW1widmlcIl0gPSBcIlZp4buHdCBOYW1cIjtcbi8vIFRoZSBmb2xsb3dpbmcgc3RyaW5ncyBoYXZlIGJlZW4gdHJhbnNsYXRlZCBieSBhIG1hY2hpbmUgdHJhbnNsYXRpb24gc2VydmljZVxuLy8gUmVtb3ZlIHRob3NlIHN0cmluZ3MgdGhhdCB5b3UgaGF2ZSBjb3JyZWN0ZWQgbWFudWFsbHlcbi8vIGluZGV4VGV4dDogXCJ7MH0gb2YgezF9XCIgPT4gXCJ7MH0gY+G7p2EgezF9XCJcbi8vIHBhbmVsRHluYW1pY1RhYlRleHRGb3JtYXQ6IFwiUGFuZWwge3BhbmVsSW5kZXh9XCIgPT4gXCJC4bqjbmcgxJFp4buBdSBraGnhu4NuIHtwYW5lbEluZGV4fVwiXG4vLyByYXRpbmdPcHRpb25zQ2FwdGlvbjogXCJTZWxlY3QuLi5cIiA9PiBcIkzhu7FhLi4uXCJcbi8vIG1pbkVycm9yOiBcIlRoZSB2YWx1ZSBzaG91bGQgbm90IGJlIGxlc3MgdGhhbiB7MH1cIiA9PiBcIkdpw6EgdHLhu4sga2jDtG5nIMSRxrDhu6NjIG5o4buPIGjGoW4gezB9XCJcbi8vIG1heEVycm9yOiBcIlRoZSB2YWx1ZSBzaG91bGQgbm90IGJlIGdyZWF0ZXIgdGhhbiB7MH1cIiA9PiBcIkdpw6EgdHLhu4sga2jDtG5nIMSRxrDhu6NjIGzhu5tuIGjGoW4gezB9XCJcbi8vIGZpbGVEcmFnQXJlYVBsYWNlaG9sZGVyOiBcIkRyYWcgYW5kIGRyb3AgYSBmaWxlIGhlcmUgb3IgY2xpY2sgdGhlIGJ1dHRvbiBiZWxvdyBhbmQgY2hvb3NlIGEgZmlsZSB0byB1cGxvYWQuXCIgPT4gXCJLw6lvIHbDoCB0aOG6oyB04buHcCB2w6BvIMSRw6J5IGhv4bq3YyBuaOG6pXAgdsOgbyBuw7p0IGLDqm4gZMaw4bubaSB2w6AgY2jhu41uIHThu4dwIMSR4buDIHThuqNpIGzDqm4uXCJcbi8vIGVtcHR5Um93c1RleHQ6IFwiVGhlcmUgYXJlIG5vIHJvd3MuXCIgPT4gXCJLaMO0bmcgY8OzIGjDoG5nLlwiXG4vLyBtdWx0aXBsZXRleHRfaXRlbW5hbWU6IFwidGV4dFwiID0+IFwiTmjhuq9uIHRpblwiXG4vLyBzaWduYXR1cmVQbGFjZUhvbGRlcjogXCJTaWduIGhlcmVcIiA9PiBcIkvDvSB0w6puIHThuqFpIMSRw6J5XCJcbi8vIG1vZGFsQ2FuY2VsQnV0dG9uVGV4dDogXCJDYW5jZWxcIiA9PiBcIkjhu6d5XCJcbi8vIG1vZGFsQXBwbHlCdXR0b25UZXh0OiBcIkFwcGx5XCIgPT4gXCLDgXAgZOG7pW5nXCJcbi8vIGZpbHRlclN0cmluZ1BsYWNlaG9sZGVyOiBcIlR5cGUgdG8gc2VhcmNoLi4uXCIgPT4gXCJOaOG6rXAgxJHhu4MgdMOsbSBraeG6v20uLi5cIlxuLy8gZW1wdHlNZXNzYWdlOiBcIk5vIGRhdGEgdG8gZGlzcGxheVwiID0+IFwiS2jDtG5nIGPDsyBk4buvIGxp4buHdSDEkeG7gyBoaeG7g24gdGjhu4tcIlxuLy8gbm9FbnRyaWVzVGV4dDogXCJUaGVyZSBhcmUgbm8gZW50cmllcyB5ZXQuXFxuQ2xpY2sgdGhlIGJ1dHRvbiBiZWxvdyB0byBhZGQgYSBuZXcgZW50cnkuXCIgPT4gXCJDaMawYSBjw7MgbeG7pWMgbsOgby5cXG5OaOG6pXAgdsOgbyBuw7p0IGLDqm4gZMaw4bubaSDEkeG7gyB0aMOqbSBt4bulYyBuaOG6rXAgbeG7m2kuXCJcbi8vIG5vRW50cmllc1JlYWRvbmx5VGV4dDogXCJUaGVyZSBhcmUgbm8gZW50cmllcy5cIiA9PiBcIktow7RuZyBjw7MgbeG7pWMuXCJcbi8vIG1vcmU6IFwiTW9yZVwiID0+IFwiTmhp4buBdSBoxqFuXCJcbi8vIHRhZ2JveERvbmVCdXR0b25DYXB0aW9uOiBcIk9LXCIgPT4gXCJPS1wiXG4vLyBzZWxlY3RUb1JhbmtFbXB0eVJhbmtlZEFyZWFUZXh0OiBcIkFsbCBjaG9pY2VzIGFyZSByYW5rZWRcIiA9PiBcIlThuqV0IGPhuqMgY8OhYyBs4buxYSBjaOG7jW4gxJHGsOG7o2MgeOG6v3AgaOG6oW5nXCJcbi8vIHNlbGVjdFRvUmFua0VtcHR5VW5yYW5rZWRBcmVhVGV4dDogXCJEcmFnIGFuZCBkcm9wIGNob2ljZXMgaGVyZSB0byByYW5rIHRoZW1cIiA9PiBcIkvDqW8gdsOgIHRo4bqjIGPDoWMgbOG7sWEgY2jhu41uIHbDoG8gxJHDonkgxJHhu4MgeOG6v3AgaOG6oW5nIGNow7puZ1wiLy8gdGFrZVBob3RvQ2FwdGlvbjogXCJUYWtlIFBob3RvXCIgPT4gXCJDaOG7pXAg4bqjbmhcIlxuLy8gY2FtZXJhUGxhY2VIb2xkZXI6IFwiQ2xpY2sgdGhlIGJ1dHRvbiBiZWxvdyB0byB0YWtlIGEgcGhvdG8gdXNpbmcgdGhlIGNhbWVyYS5cIiA9PiBcIk5o4bqlcCB2w6BvIG7DunQgYsOqbiBkxrDhu5tpIMSR4buDIGNo4bulcCDhuqNuaCBi4bqxbmcgbcOheSDhuqNuaC5cIlxuLy8gZmlsZUNhbWVyYURyYWdBcmVhUGxhY2VIb2xkZXI6IFwiRHJhZyBhbmQgZHJvcCBvciBzZWxlY3QgYSBmaWxlIHRvIHVwbG9hZCBvciB0YWtlIGEgcGhvdG8gdXNpbmcgdGhlIGNhbWVyYS5cIiA9PiBcIkvDqW8gdsOgIHRo4bqjIGhv4bq3YyBjaOG7jW4gdOG7h3AgxJHhu4MgdOG6o2kgbMOqbiBob+G6t2MgY2jhu6VwIOG6o25oIGLhurFuZyBtw6F5IOG6o25oLlwiXG4vLyByZXBsYWNlRmlsZUNhcHRpb246IFwiUmVwbGFjZSBmaWxlXCIgPT4gXCJUaGF5IHRo4bq/IHThuq1wIHRpblwiXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvbG9jYWxpemF0aW9uL3dlbHNoLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9sb2NhbGl6YXRpb24vd2Vsc2gudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHdlbHNoU3VydmV5U3RyaW5ncyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJ3ZWxzaFN1cnZleVN0cmluZ3NcIiwgZnVuY3Rpb24oKSB7IHJldHVybiB3ZWxzaFN1cnZleVN0cmluZ3M7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHN1cnZleV9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBzdXJ2ZXktY29yZSAqLyBcIi4vc3JjL2VudHJpZXMvY29yZS50c1wiKTtcblxudmFyIHdlbHNoU3VydmV5U3RyaW5ncyA9IHtcbiAgICBwYWdlUHJldlRleHQ6IFwiQmxhZW5vcm9sXCIsXG4gICAgcGFnZU5leHRUZXh0OiBcIk5lc2FmXCIsXG4gICAgY29tcGxldGVUZXh0OiBcIkN3YmxoYXVcIixcbiAgICBwcmV2aWV3VGV4dDogXCJSaGFnb2x3Z1wiLFxuICAgIGVkaXRUZXh0OiBcIkdvbHlndVwiLFxuICAgIHN0YXJ0U3VydmV5VGV4dDogXCJEZWNocmF1XCIsXG4gICAgb3RoZXJJdGVtVGV4dDogXCJBcmFsbCAoZGlzZ3JpZml3Y2gpXCIsXG4gICAgbm9uZUl0ZW1UZXh0OiBcIkRpbVwiLFxuICAgIHNlbGVjdEFsbEl0ZW1UZXh0OiBcIkRld2lzIHkgQ3lmYW4gXCIsXG4gICAgcHJvZ3Jlc3NUZXh0OiBcIlR1ZGFsZW4gezB9IG8gezF9XCIsXG4gICAgaW5kZXhUZXh0OiBcInswfSBvIHsxfVwiLFxuICAgIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCJDb2Zub2QgezB9IG8gezF9XCIsXG4gICAgcGFuZWxEeW5hbWljVGFiVGV4dEZvcm1hdDogXCJQYW5lbCB7cGFuZWxJbmRleH1cIixcbiAgICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwiV2VkaSBhdGViIHswfS97MX0gY3dlc3Rpd25cIixcbiAgICBlbXB0eVN1cnZleTogXCJEb2VzIGRpbSBtb2RkIGd3ZWxkIHR1ZGFsZW4gbmEgY2h3ZXN0aXduIHluIHlyIGFyb2x3Zy5cIixcbiAgICBjb21wbGV0aW5nU3VydmV5OiBcIkRpb2xjaCBhbSBsZW53aeKAmXIgaG9saWFkdXIhXCIsXG4gICAgY29tcGxldGluZ1N1cnZleUJlZm9yZTogXCJSeWR5Y2ggY2hpIHdlZGkgbGxlbndp4oCZciBhcm9sd2cgaHduIHluIGJhcm9kIHluIMO0bCBlaW4gY29mbm9kaW9uLlwiLFxuICAgIGxvYWRpbmdTdXJ2ZXk6IFwiV3J0aGnigJluIExsd3l0aG/igJlyIEFyb2x3Zy4uLlwiLFxuICAgIHBsYWNlaG9sZGVyOiBcIkRld2lzd2NoLi4uXCIsXG4gICAgcmF0aW5nT3B0aW9uc0NhcHRpb246IFwiRGV3aXMuLi5cIixcbiAgICB2YWx1ZTogXCJnd2VydGhcIixcbiAgICByZXF1aXJlZEVycm9yOiBcIkF0ZWJ3Y2ggeSBjd2VzdGl3bi5cIixcbiAgICByZXF1aXJlZEVycm9ySW5QYW5lbDogXCJBdGVid2NoIG8gbGVpYWYgdW4gY3dlc3Rpd24uXCIsXG4gICAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCJBdGVid2NoIHkgY3dlc3RpeW5hdSB5bSBtaG9iIHJoZXMuXCIsXG4gICAgbnVtZXJpY0Vycm9yOiBcIkR5bGFp4oCZciBnd2VydGggZm9kIHluIHJoaWYuXCIsXG4gICAgbWluRXJyb3I6IFwiTmkgZGR5bGFpJ3IgZ3dlcnRoIGZvZCB5biBsbGFpIG5hIHswfVwiLFxuICAgIG1heEVycm9yOiBcIk5pIGRkeWxhaSdyIGd3ZXJ0aCBmb2QgeW4gZnd5IG5hIHswfVwiLFxuICAgIHRleHRNaW5MZW5ndGg6IFwiUmhvd2NoIG8gbGVpYWYgezB9IG5vZC5cIixcbiAgICB0ZXh0TWF4TGVuZ3RoOiBcIlJob3djaCBsYWkgbmEgezB9IG5vZC5cIixcbiAgICB0ZXh0TWluTWF4TGVuZ3RoOiBcIlJob3djaCBvIGxlaWFmIHswfSBub2Qgb25kIGRpbSBtd3kgbmEgezF9LlwiLFxuICAgIG1pblJvd0NvdW50RXJyb3I6IFwiTGxlbndjaCBvIGxlaWFmIHswfSByaGVzLlwiLFxuICAgIG1pblNlbGVjdEVycm9yOiBcIkRld2lzd2NoIG8gbGVpYWYgezB9IGFtcnl3aW9seW4uXCIsXG4gICAgbWF4U2VsZWN0RXJyb3I6IFwiUGVpZGl3Y2ggw6IgZGV3aXMgbXd5IG5hIHswfSBhbXJ5d2lvbHluLlwiLFxuICAgIG51bWVyaWNNaW5NYXg6IFwiRHlsYWnigJlyICd7MH0nIGZvZCB5ciB1biBmYXRoIMOiIHsxfSBuZXXigJluIGZ3eSwgYeKAmXIgZmF0aCDDoiB7Mn0gbmV14oCZbiBsbGFpXCIsXG4gICAgbnVtZXJpY01pbjogXCJEeWxhaeKAmXIgJ3swfScgZm9kIHlyIHVuIGZhdGggw6IgezF9IG5ldeKAmW4gZnd5XCIsXG4gICAgbnVtZXJpY01heDogXCJEeWxhaeKAmXIgJ3swfScgZm9kIHlyIHVuIGZhdGggw6IgezF9IG5ldeKAmW4gbGxhaVwiLFxuICAgIGludmFsaWRFbWFpbDogXCJSaG93Y2ggZ3lmZWlyaWFkIGUtYm9zdCBkaWx5cy5cIixcbiAgICBpbnZhbGlkRXhwcmVzc2lvbjogXCJEeWxhaeKAmXIgbXluZWdpYWQgezB9IGFyd2FpbiBhdCAndHJ1ZScuXCIsXG4gICAgdXJsUmVxdWVzdEVycm9yOiBcIlJvZWRkIHkgY2FpcyB3ZWRpIGFyd2FpbiBhdCB5IGd3YWxsICd7MH0nLiB7MX1cIixcbiAgICB1cmxHZXRDaG9pY2VzRXJyb3I6IFwiUm9lZGQgeSBjYWlzIHdlZGkgYXJ3YWluIGF0IGRkYXRhIGd3YWcgbmV1IG1hZSBwcmlvZHdlZGQgeSDigJhwYXRo4oCZIHluIGFuZ2h5d2lyIFwiLFxuICAgIGV4Y2VlZE1heFNpemU6IFwiRGR5bGFp4oCZciBmZmVpbCBkZGltIGJvZCB5biBmd3kgbmEgezB9LlwiLFxuICAgIG90aGVyUmVxdWlyZWRFcnJvcjogXCJSaG93Y2ggeSBnd2VydGggYXJhbGwuXCIsXG4gICAgdXBsb2FkaW5nRmlsZTogXCJNYWUgZWljaCBmZmVpbCB3cnRoaeKAmW4gbGx3eXRobyBpIGZ5bnkuIEFyaG9zd2NoIHljaHlkaWcgbyBlaWxpYWRhdSBhIHJob2kgY3lubmlnIGFyYWxsIGFybmkuXCIsXG4gICAgbG9hZGluZ0ZpbGU6IFwiV3J0aGnigJluIGxsd3l0aG8uLi5cIixcbiAgICBjaG9vc2VGaWxlOiBcIkRld2lzd2NoIGZmZWlsKGlhdSkuLi5cIixcbiAgICBub0ZpbGVDaG9zZW46IFwiSGViIGRkZXdpcyBmZmVpbCBcIixcbiAgICBmaWxlRHJhZ0FyZWFQbGFjZWhvbGRlcjogXCJMbHVzZ3djaCBhIGdvbGx3bmcgZmZlaWwgeW1hIG5ldSBjbGljaXdjaCB5IGJvdHdtIGlzb2QgYSBkZXdpc3djaCBmZmVpbCBpJ3cgbGFubHd5dGhvLlwiLFxuICAgIGNvbmZpcm1EZWxldGU6IFwiWWR5Y2ggY2hpIGFtIGRkaWxldeKAmXIgY29mbm9kP1wiLFxuICAgIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwiRHlsYWnigJlyIGd3ZXJ0aCBod24gZm9kIHluIHVuaWdyeXcuXCIsXG4gICAgYWRkQ29sdW1uOiBcIlljaHdhbmVndSBjb2xvZm4gXCIsXG4gICAgYWRkUm93OiBcIlljaHdhbmVndSByaGVzXCIsXG4gICAgcmVtb3ZlUm93OiBcIlR5bm51XCIsXG4gICAgZW1wdHlSb3dzVGV4dDogXCJOaWQgb2VzIHVucmh5dyBmZnJhZWF1LlwiLFxuICAgIGFkZFBhbmVsOiBcIlljaHdhbmVndSBv4oCZciBuZXd5ZGRcIixcbiAgICByZW1vdmVQYW5lbDogXCJUeW5udVwiLFxuICAgIGNob2ljZXNfSXRlbTogXCJlaXRlbVwiLFxuICAgIG1hdHJpeF9jb2x1bW46IFwiQ29sb2ZuXCIsXG4gICAgbWF0cml4X3JvdzogXCJSaGVzXCIsXG4gICAgbXVsdGlwbGV0ZXh0X2l0ZW1uYW1lOiBcIlRlc3R1blwiLFxuICAgIHNhdmluZ0RhdGE6IFwiTWFl4oCZciBjYW5seW5pYWRhdeKAmW4gY2FlbCBldSBjYWR3IGFyIHkgZ3dlaW55ZGQuLi5cIixcbiAgICBzYXZpbmdEYXRhRXJyb3I6IFwiUm9lZGQgZ3dhbGwgYSBkb2VkZCBkaW0gbW9kZCBjYWR34oCZciBjYW5seW5pYWRhdS5cIixcbiAgICBzYXZpbmdEYXRhU3VjY2VzczogXCJXZWRpIGxsd3lkZG8gaSBnYWR34oCZciBjYW5seW5pYWRhdSFcIixcbiAgICBzYXZlQWdhaW5CdXR0b246IFwiUmhvd2NoIGd5bm5pZyBhcmFsbCBhcm5pXCIsXG4gICAgdGltZXJNaW46IFwibXVuXCIsXG4gICAgdGltZXJTZWM6IFwiZWlsXCIsXG4gICAgdGltZXJTcGVudEFsbDogXCJSeWR5Y2ggY2hpIHdlZGkgdHJldWxpbyB7MH0gYXIgeSBkdWRhbGVuIGhvbiBhIHsxfSBneWRh4oCZaSBnaWx5ZGQuXCIsXG4gICAgdGltZXJTcGVudFBhZ2U6IFwiUnlkeWNoIGNoaSB3ZWRpIHRyZXVsaW8gezB9IGFyIHkgZHVkYWxlbiBob24uXCIsXG4gICAgdGltZXJTcGVudFN1cnZleTogXCJSeWR5Y2ggY2hpIHdlZGkgdHJldWxpbyB7MH0gZ3lkYeKAmWkgZ2lseWRkLlwiLFxuICAgIHRpbWVyTGltaXRBbGw6IFwiUnlkeWNoIGNoaSB3ZWRpIHRyZXVsaW8gezB9IG8gezF9IGFyIHkgZHVkYWxlbiBob24gYSB7Mn0gbyB7M30gZ3lkYeKAmWkgZ2lseWRkLlwiLFxuICAgIHRpbWVyTGltaXRQYWdlOiBcIlJ5ZHljaCBjaGkgd2VkaSB0cmV1bGlvIHswfSBvIHsxfSBhciB5IGR1ZGFsZW4gaG9uLlwiLFxuICAgIHRpbWVyTGltaXRTdXJ2ZXk6IFwiUnlkeWNoIGNoaSB3ZWRpIHRyZXVsaW8gezB9IG8gezF9IGd5ZGHigJlpIGdpbHlkZC5cIixcbiAgICBjbGVhckNhcHRpb246IFwiQ2xpcmlvXCIsXG4gICAgc2lnbmF0dXJlUGxhY2VIb2xkZXI6IFwiQXJ3eWRkIHltYVwiLFxuICAgIGNob29zZUZpbGVDYXB0aW9uOiBcIkRld2lzd2NoIGZmZWlsIFwiLFxuICAgIHRha2VQaG90b0NhcHRpb246IFwiVHlubnUgTGx1blwiLFxuICAgIGNhbWVyYVBsYWNlSG9sZGVyOiBcIkNsaWNpd2NoIHkgYm90d20gaXNvZCBpIGR5bm51IGxsdW4gZ2FuIGRkZWZueWRkaW8nciBjYW1lcmEuXCIsXG4gICAgZmlsZUNhbWVyYURyYWdBcmVhUGxhY2VIb2xkZXI6IFwiTGx1c2d3Y2ggYSBnb2xsd25nIG5ldSBkZXdpc3djaCBmZmVpbCBpIGxhbmx3eXRobyBuZXUgZHlubnUgbGx1biBnYW4gZGRlZm55ZGRpbydyIGNhbWVyYS5cIixcbiAgICByZXBsYWNlRmlsZUNhcHRpb246IFwiQW1uZXdpZCBmZmVpbFwiLFxuICAgIHJlbW92ZUZpbGVDYXB0aW9uOiBcIlR5bm514oCZciBmZmVpbCBob24gXCIsXG4gICAgYm9vbGVhbkNoZWNrZWRMYWJlbDogXCJJYXduXCIsXG4gICAgYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcIk5hXCIsXG4gICAgY29uZmlybVJlbW92ZUZpbGU6IFwiWWR5Y2ggY2hp4oCZbiBzacW1ciBlaWNoIGJvZCBhbSBkeW5udeKAmXIgZmZlaWwgaG9uOiB7MH0/XCIsXG4gICAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcIllkeWNoIGNoaeKAmW4gc2nFtXIgZWljaCBib2QgYW0gZHlubnUgcG9iIGZmZWlsP1wiLFxuICAgIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCJUZWl0bCB5IEN3ZXN0aXduIFwiLFxuICAgIG1vZGFsQ2FuY2VsQnV0dG9uVGV4dDogXCJDYW5zbG9cIixcbiAgICBtb2RhbEFwcGx5QnV0dG9uVGV4dDogXCJDeW5uaWdcIixcbiAgICBmaWx0ZXJTdHJpbmdQbGFjZWhvbGRlcjogXCJUZWlwaXdjaCBpIGNod2lsaW8uLi5cIixcbiAgICBlbXB0eU1lc3NhZ2U6IFwiRGltIGRhdGEgaSd3IGFyZGRhbmdvc1wiLFxuICAgIG5vRW50cmllc1RleHQ6IFwiTmlkIG9lcyB1bnJoeXcgZ29mbm9kaW9uIGh5ZCB5biBoeW4uXFxuQ2xpY2l3Y2ggeSBib3R3bSBpc29kIGkgeWNod2FuZWd1IGNvZm5vZCBuZXd5ZGQuXCIsXG4gICAgbm9FbnRyaWVzUmVhZG9ubHlUZXh0OiBcIk5pZCBvZXMgdW5yaHl3IGdvZm5vZGlvbi5cIixcbiAgICBtb3JlOiBcIlJoYWdvclwiLFxuICAgIHRhZ2JveERvbmVCdXR0b25DYXB0aW9uOiBcIk9Dw4pcIixcbiAgICBzZWxlY3RUb1JhbmtFbXB0eVJhbmtlZEFyZWFUZXh0OiBcIk1hZSdyIGhvbGwgZGRld2lzaWFkYXUgeW4gY2FlbCBldSByaGVzdHJ1XCIsXG4gICAgc2VsZWN0VG9SYW5rRW1wdHlVbnJhbmtlZEFyZWFUZXh0OiBcIkRld2lzaWFkYXUgbGx1c2dvIGEgZ29sbHduZyB5bWEgaSd3IGdyYWRkaW9cIlxufTtcbnN1cnZleV9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdXJ2ZXlMb2NhbGl6YXRpb25cIl0ubG9jYWxlc1tcImN5XCJdID0gd2Vsc2hTdXJ2ZXlTdHJpbmdzO1xuc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN1cnZleUxvY2FsaXphdGlvblwiXS5sb2NhbGVOYW1lc1tcImN5XCJdID0gXCJjeW1yYWVnXCI7XG4vLyBUaGUgZm9sbG93aW5nIHN0cmluZ3MgaGF2ZSBiZWVuIHRyYW5zbGF0ZWQgYnkgYSBtYWNoaW5lIHRyYW5zbGF0aW9uIHNlcnZpY2Vcbi8vIFJlbW92ZSB0aG9zZSBzdHJpbmdzIHRoYXQgeW91IGhhdmUgY29ycmVjdGVkIG1hbnVhbGx5XG4vLyBpbmRleFRleHQ6IFwiezB9IG9mIHsxfVwiID0+IFwiezB9IG8gezF9XCJcbi8vIHBhbmVsRHluYW1pY1RhYlRleHRGb3JtYXQ6IFwiUGFuZWwge3BhbmVsSW5kZXh9XCIgPT4gXCJQYW5lbCB7cGFuZWxJbmRleH1cIlxuLy8gcmF0aW5nT3B0aW9uc0NhcHRpb246IFwiU2VsZWN0Li4uXCIgPT4gXCJEZXdpcy4uLlwiXG4vLyBtaW5FcnJvcjogXCJUaGUgdmFsdWUgc2hvdWxkIG5vdCBiZSBsZXNzIHRoYW4gezB9XCIgPT4gXCJOaSBkZHlsYWknciBnd2VydGggZm9kIHluIGxsYWkgbmEgezB9XCJcbi8vIG1heEVycm9yOiBcIlRoZSB2YWx1ZSBzaG91bGQgbm90IGJlIGdyZWF0ZXIgdGhhbiB7MH1cIiA9PiBcIk5pIGRkeWxhaSdyIGd3ZXJ0aCBmb2QgeW4gZnd5IG5hIHswfVwiXG4vLyBmaWxlRHJhZ0FyZWFQbGFjZWhvbGRlcjogXCJEcmFnIGFuZCBkcm9wIGEgZmlsZSBoZXJlIG9yIGNsaWNrIHRoZSBidXR0b24gYmVsb3cgYW5kIGNob29zZSBhIGZpbGUgdG8gdXBsb2FkLlwiID0+IFwiTGx1c2d3Y2ggYSBnb2xsd25nIGZmZWlsIHltYSBuZXUgY2xpY2l3Y2ggeSBib3R3bSBpc29kIGEgZGV3aXN3Y2ggZmZlaWwgaSd3IGxhbmx3eXRoby5cIlxuLy8gZW1wdHlSb3dzVGV4dDogXCJUaGVyZSBhcmUgbm8gcm93cy5cIiA9PiBcIk5pZCBvZXMgdW5yaHl3IGZmcmFlYXUuXCJcbi8vIG11bHRpcGxldGV4dF9pdGVtbmFtZTogXCJ0ZXh0XCIgPT4gXCJUZXN0dW5cIlxuLy8gc2lnbmF0dXJlUGxhY2VIb2xkZXI6IFwiU2lnbiBoZXJlXCIgPT4gXCJBcnd5ZGQgeW1hXCJcbi8vIG1vZGFsQ2FuY2VsQnV0dG9uVGV4dDogXCJDYW5jZWxcIiA9PiBcIkNhbnNsb1wiXG4vLyBtb2RhbEFwcGx5QnV0dG9uVGV4dDogXCJBcHBseVwiID0+IFwiQ3lubmlnXCJcbi8vIGZpbHRlclN0cmluZ1BsYWNlaG9sZGVyOiBcIlR5cGUgdG8gc2VhcmNoLi4uXCIgPT4gXCJUZWlwaXdjaCBpIGNod2lsaW8uLi5cIlxuLy8gZW1wdHlNZXNzYWdlOiBcIk5vIGRhdGEgdG8gZGlzcGxheVwiID0+IFwiRGltIGRhdGEgaSd3IGFyZGRhbmdvc1wiXG4vLyBub0VudHJpZXNUZXh0OiBcIlRoZXJlIGFyZSBubyBlbnRyaWVzIHlldC5cXG5DbGljayB0aGUgYnV0dG9uIGJlbG93IHRvIGFkZCBhIG5ldyBlbnRyeS5cIiA9PiBcIk5pZCBvZXMgdW5yaHl3IGdvZm5vZGlvbiBoeWQgeW4gaHluLlxcbkNsaWNpd2NoIHkgYm90d20gaXNvZCBpIHljaHdhbmVndSBjb2Zub2QgbmV3eWRkLlwiXG4vLyBub0VudHJpZXNSZWFkb25seVRleHQ6IFwiVGhlcmUgYXJlIG5vIGVudHJpZXMuXCIgPT4gXCJOaWQgb2VzIHVucmh5dyBnb2Zub2Rpb24uXCJcbi8vIG1vcmU6IFwiTW9yZVwiID0+IFwiUmhhZ29yXCJcbi8vIHRhZ2JveERvbmVCdXR0b25DYXB0aW9uOiBcIk9LXCIgPT4gXCJPQ8OKXCJcbi8vIHNlbGVjdFRvUmFua0VtcHR5UmFua2VkQXJlYVRleHQ6IFwiQWxsIGNob2ljZXMgYXJlIHJhbmtlZFwiID0+IFwiTWFlJ3IgaG9sbCBkZGV3aXNpYWRhdSB5biBjYWVsIGV1IHJoZXN0cnVcIlxuLy8gc2VsZWN0VG9SYW5rRW1wdHlVbnJhbmtlZEFyZWFUZXh0OiBcIkRyYWcgYW5kIGRyb3AgY2hvaWNlcyBoZXJlIHRvIHJhbmsgdGhlbVwiID0+IFwiRGV3aXNpYWRhdSBsbHVzZ28gYSBnb2xsd25nIHltYSBpJ3cgZ3JhZGRpb1wiLy8gdGFrZVBob3RvQ2FwdGlvbjogXCJUYWtlIFBob3RvXCIgPT4gXCJUeW5udSBMbHVuXCJcbi8vIGNhbWVyYVBsYWNlSG9sZGVyOiBcIkNsaWNrIHRoZSBidXR0b24gYmVsb3cgdG8gdGFrZSBhIHBob3RvIHVzaW5nIHRoZSBjYW1lcmEuXCIgPT4gXCJDbGljaXdjaCB5IGJvdHdtIGlzb2QgaSBkeW5udSBsbHVuIGdhbiBkZGVmbnlkZGlvJ3IgY2FtZXJhLlwiXG4vLyBmaWxlQ2FtZXJhRHJhZ0FyZWFQbGFjZUhvbGRlcjogXCJEcmFnIGFuZCBkcm9wIG9yIHNlbGVjdCBhIGZpbGUgdG8gdXBsb2FkIG9yIHRha2UgYSBwaG90byB1c2luZyB0aGUgY2FtZXJhLlwiID0+IFwiTGx1c2d3Y2ggYSBnb2xsd25nIG5ldSBkZXdpc3djaCBmZmVpbCBpIGxhbmx3eXRobyBuZXUgZHlubnUgbGx1biBnYW4gZGRlZm55ZGRpbydyIGNhbWVyYS5cIlxuLy8gcmVwbGFjZUZpbGVDYXB0aW9uOiBcIlJlcGxhY2UgZmlsZVwiID0+IFwiQW1uZXdpZCBmZmVpbFwiXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvbWFydGl4QmFzZS50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL21hcnRpeEJhc2UudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBRdWVzdGlvbk1hdHJpeEJhc2VNb2RlbCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJRdWVzdGlvbk1hdHJpeEJhc2VNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFF1ZXN0aW9uTWF0cml4QmFzZU1vZGVsOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfaXRlbXZhbHVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2l0ZW12YWx1ZSAqLyBcIi4vc3JjL2l0ZW12YWx1ZS50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcXVlc3Rpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcXVlc3Rpb24gKi8gXCIuL3NyYy9xdWVzdGlvbi50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9qc29ub2JqZWN0ICovIFwiLi9zcmMvanNvbm9iamVjdC50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfY29uZGl0aW9uc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9jb25kaXRpb25zICovIFwiLi9zcmMvY29uZGl0aW9ucy50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfaGVscGVyc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9oZWxwZXJzICovIFwiLi9zcmMvaGVscGVycy50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdXRpbHNfY3NzQ2xhc3NCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3V0aWxzL2Nzc0NsYXNzQnVpbGRlciAqLyBcIi4vc3JjL3V0aWxzL2Nzc0NsYXNzQnVpbGRlci50c1wiKTtcbnZhciBfX2V4dGVuZHMgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xudmFyIF9fZGVjb3JhdGUgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufTtcblxuXG5cblxuXG5cbi8qKlxuICogQSBiYXNlIGNsYXNzIGZvciBhbGwgbWF0cml4IHF1ZXN0aW9uIHR5cGVzLlxuICovXG52YXIgUXVlc3Rpb25NYXRyaXhCYXNlTW9kZWwgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFF1ZXN0aW9uTWF0cml4QmFzZU1vZGVsLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFF1ZXN0aW9uTWF0cml4QmFzZU1vZGVsKG5hbWUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbmFtZSkgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MgPSBudWxsO1xuICAgICAgICBfdGhpcy5nZW5lcmF0ZWRUb3RhbFJvdyA9IG51bGw7XG4gICAgICAgIF90aGlzLmZpbHRlcmVkUm93cyA9IG51bGw7XG4gICAgICAgIF90aGlzLmZpbHRlcmVkQ29sdW1ucyA9IG51bGw7XG4gICAgICAgIF90aGlzLmNvbHVtbnMgPSBfdGhpcy5jcmVhdGVDb2x1bW5WYWx1ZXMoKTtcbiAgICAgICAgX3RoaXMucm93cyA9IF90aGlzLmNyZWF0ZUl0ZW1WYWx1ZXMoXCJyb3dzXCIpO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFF1ZXN0aW9uTWF0cml4QmFzZU1vZGVsLnByb3RvdHlwZS5jcmVhdGVDb2x1bW5WYWx1ZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUl0ZW1WYWx1ZXMoXCJjb2x1bW5zXCIpO1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhCYXNlTW9kZWwucHJvdG90eXBlLmdldFR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBcIm1hdHJpeGJhc2VcIjtcbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4QmFzZU1vZGVsLnByb3RvdHlwZS5lbmRMb2FkaW5nRnJvbUpzb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUuZW5kTG9hZGluZ0Zyb21Kc29uLmNhbGwodGhpcyk7XG4gICAgICAgIHRoaXMudXBkYXRlVmlzaWJpbGl0eUJhc2VkT25Sb3dzKCk7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25NYXRyaXhCYXNlTW9kZWwucHJvdG90eXBlLCBcImlzQ29tcG9zaXRlUXVlc3Rpb25cIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uTWF0cml4QmFzZU1vZGVsLnByb3RvdHlwZSwgXCJzaG93SGVhZGVyXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB3aGV0aGVyIHRvIGRpc3BsYXkgdGhlIHRhYmxlIGhlYWRlciB0aGF0IGNvbnRhaW5zIGNvbHVtbiBjYXB0aW9ucy5cbiAgICAgICAgICpcbiAgICAgICAgICogRGVmYXVsdCB2YWx1ZTogYHRydWVgXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzaG93SGVhZGVyXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInNob3dIZWFkZXJcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbk1hdHJpeEJhc2VNb2RlbC5wcm90b3R5cGUsIFwiY29sdW1uc1wiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBbiBhcnJheSBvZiBtYXRyaXggY29sdW1ucy5cbiAgICAgICAgICpcbiAgICAgICAgICogVGhpcyBhcnJheSBjYW4gY29udGFpbiBwcmltaXRpdmUgdmFsdWVzIG9yIG9iamVjdHMgd2l0aCB0aGUgYHRleHRgIChkaXNwbGF5IHZhbHVlKSBhbmQgYHZhbHVlYCAodmFsdWUgdG8gYmUgc2F2ZWQgaW4gc3VydmV5IHJlc3VsdHMpIHByb3BlcnRpZXMuXG4gICAgICAgICAqXG4gICAgICAgICAqIFtWaWV3IERlbW9dKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2V4YW1wbGVzL3NpbmdsZS1zZWxlY3Rpb24tbWF0cml4LXRhYmxlLXF1ZXN0aW9uLyAobGlua1N0eWxlKSlcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNvbHVtbnNcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKG5ld1ZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjb2x1bW5zXCIsIG5ld1ZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbk1hdHJpeEJhc2VNb2RlbC5wcm90b3R5cGUsIFwidmlzaWJsZUNvbHVtbnNcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAhIXRoaXMuZmlsdGVyZWRDb2x1bW5zID8gdGhpcy5maWx0ZXJlZENvbHVtbnMgOiB0aGlzLmNvbHVtbnM7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25NYXRyaXhCYXNlTW9kZWwucHJvdG90eXBlLCBcInJvd3NcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogQW4gYXJyYXkgb2YgbWF0cml4IHJvd3MuXG4gICAgICAgICAqXG4gICAgICAgICAqIFRoaXMgYXJyYXkgY2FuIGNvbnRhaW4gcHJpbWl0aXZlIHZhbHVlcyBvciBvYmplY3RzIHdpdGggdGhlIGB0ZXh0YCAoZGlzcGxheSB2YWx1ZSkgYW5kIGB2YWx1ZWAgKHZhbHVlIHRvIGJlIHNhdmVkIGluIHN1cnZleSByZXN1bHRzKSBwcm9wZXJ0aWVzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBbVmlldyBEZW1vXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9leGFtcGxlcy9zaW5nbGUtc2VsZWN0aW9uLW1hdHJpeC10YWJsZS1xdWVzdGlvbi8gKGxpbmtTdHlsZSkpXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJyb3dzXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChuZXdWYWx1ZSkge1xuICAgICAgICAgICAgdmFyIG5ld1Jvd3MgPSB0aGlzLnByb2Nlc3NSb3dzT25TZXQobmV3VmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicm93c1wiLCBuZXdSb3dzKTtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVySXRlbXMoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFF1ZXN0aW9uTWF0cml4QmFzZU1vZGVsLnByb3RvdHlwZS5wcm9jZXNzUm93c09uU2V0ID0gZnVuY3Rpb24gKG5ld1Jvd3MpIHtcbiAgICAgICAgcmV0dXJuIG5ld1Jvd3M7XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeEJhc2VNb2RlbC5wcm90b3R5cGUuZ2V0VmlzaWJsZVJvd3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbk1hdHJpeEJhc2VNb2RlbC5wcm90b3R5cGUsIFwidmlzaWJsZVJvd3NcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJucyBhbiBhcnJheSBvZiB2aXNpYmxlIG1hdHJpeCByb3dzLlxuICAgICAgICAgKiBAc2VlIHJvd3NWaXNpYmxlSWZcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VmlzaWJsZVJvd3MoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbk1hdHJpeEJhc2VNb2RlbC5wcm90b3R5cGUsIFwicm93c1Zpc2libGVJZlwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBIEJvb2xlYW4gZXhwcmVzc2lvbiB0aGF0IGlzIGV2YWx1YXRlZCBhZ2FpbnN0IGVhY2ggbWF0cml4IHJvdy4gSWYgdGhlIGV4cHJlc3Npb24gZXZhbHVhdGVzIHRvIGBmYWxzZWAsIHRoZSByb3cgYmVjb21lcyBoaWRkZW4uXG4gICAgICAgICAqXG4gICAgICAgICAqIEEgc3VydmV5IHBhcnNlcyBhbmQgcnVucyBhbGwgZXhwcmVzc2lvbnMgb24gc3RhcnR1cC4gSWYgYW55IHZhbHVlcyB1c2VkIGluIHRoZSBleHByZXNzaW9uIGNoYW5nZSwgdGhlIHN1cnZleSByZS1ldmFsdWF0ZXMgaXQuXG4gICAgICAgICAqXG4gICAgICAgICAqIFVzZSB0aGUgYHtpdGVtfWAgcGxhY2Vob2xkZXIgdG8gcmVmZXJlbmNlIHRoZSBjdXJyZW50IHJvdyBpbiB0aGUgZXhwcmVzc2lvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogUmVmZXIgdG8gdGhlIGZvbGxvd2luZyBoZWxwIHRvcGljIGZvciBtb3JlIGluZm9ybWF0aW9uOiBbQ29uZGl0aW9uYWwgVmlzaWJpbGl0eV0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9kZXNpZ24tc3VydmV5LWNvbmRpdGlvbmFsLWxvZ2ljI2NvbmRpdGlvbmFsLXZpc2liaWxpdHkpLlxuICAgICAgICAgKiBAc2VlIHZpc2libGVSb3dzXG4gICAgICAgICAqIEBzZWUgY29sdW1uc1Zpc2libGVJZlxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicm93c1Zpc2libGVJZlwiLCBcIlwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJyb3dzVmlzaWJsZUlmXCIsIHZhbCk7XG4gICAgICAgICAgICB0aGlzLmZpbHRlckl0ZW1zKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25NYXRyaXhCYXNlTW9kZWwucHJvdG90eXBlLCBcImNvbHVtbnNWaXNpYmxlSWZcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogQSBCb29sZWFuIGV4cHJlc3Npb24gdGhhdCBpcyBldmFsdWF0ZWQgYWdhaW5zdCBlYWNoIG1hdHJpeCBjb2x1bW4uIElmIHRoZSBleHByZXNzaW9uIGV2YWx1YXRlcyB0byBgZmFsc2VgLCB0aGUgY29sdW1uIGJlY29tZXMgaGlkZGVuLlxuICAgICAgICAgKlxuICAgICAgICAgKiBBIHN1cnZleSBwYXJzZXMgYW5kIHJ1bnMgYWxsIGV4cHJlc3Npb25zIG9uIHN0YXJ0dXAuIElmIGFueSB2YWx1ZXMgdXNlZCBpbiB0aGUgZXhwcmVzc2lvbiBjaGFuZ2UsIHRoZSBzdXJ2ZXkgcmUtZXZhbHVhdGVzIGl0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBVc2UgdGhlIGB7aXRlbX1gIHBsYWNlaG9sZGVyIHRvIHJlZmVyZW5jZSB0aGUgY3VycmVudCBjb2x1bW4gaW4gdGhlIGV4cHJlc3Npb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIFJlZmVyIHRvIHRoZSBmb2xsb3dpbmcgaGVscCB0b3BpYyBmb3IgbW9yZSBpbmZvcm1hdGlvbjogW0NvbmRpdGlvbmFsIFZpc2liaWxpdHldKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vZGVzaWduLXN1cnZleS1jb25kaXRpb25hbC1sb2dpYyNjb25kaXRpb25hbC12aXNpYmlsaXR5KS5cbiAgICAgICAgICogQHNlZSByb3dzVmlzaWJsZUlmXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjb2x1bW5zVmlzaWJsZUlmXCIsIFwiXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNvbHVtbnNWaXNpYmxlSWZcIiwgdmFsKTtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVySXRlbXMoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFF1ZXN0aW9uTWF0cml4QmFzZU1vZGVsLnByb3RvdHlwZS5ydW5Db25kaXRpb24gPSBmdW5jdGlvbiAodmFsdWVzLCBwcm9wZXJ0aWVzKSB7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUucnVuQ29uZGl0aW9uLmNhbGwodGhpcywgdmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICAgICAgdGhpcy5ydW5JdGVtc0NvbmRpdGlvbih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhCYXNlTW9kZWwucHJvdG90eXBlLmZpbHRlckl0ZW1zID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5hcmVJbnZpc2libGVFbGVtZW50c1Nob3dpbmcpIHtcbiAgICAgICAgICAgIHRoaXMub25Sb3dzQ2hhbmdlZCgpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzTG9hZGluZ0Zyb21Kc29uIHx8ICF0aGlzLmRhdGEpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiB0aGlzLnJ1bkl0ZW1zQ29uZGl0aW9uKHRoaXMuZ2V0RGF0YUZpbHRlcmVkVmFsdWVzKCksIHRoaXMuZ2V0RGF0YUZpbHRlcmVkUHJvcGVydGllcygpKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4QmFzZU1vZGVsLnByb3RvdHlwZS5vbkNvbHVtbnNDaGFuZ2VkID0gZnVuY3Rpb24gKCkgeyB9O1xuICAgIFF1ZXN0aW9uTWF0cml4QmFzZU1vZGVsLnByb3RvdHlwZS5vblJvd3NDaGFuZ2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnVwZGF0ZVZpc2liaWxpdHlCYXNlZE9uUm93cygpO1xuICAgICAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLnZpc2libGVSb3dzQ2hhbmdlZENhbGxiYWNrKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4QmFzZU1vZGVsLnByb3RvdHlwZS51cGRhdGVWaXNpYmlsaXR5QmFzZWRPblJvd3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmhpZGVJZlJvd3NFbXB0eSkge1xuICAgICAgICAgICAgdGhpcy52aXNpYmxlID1cbiAgICAgICAgICAgICAgICB0aGlzLnJvd3MubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgICAgICAoIXRoaXMuZmlsdGVyZWRSb3dzIHx8IHRoaXMuZmlsdGVyZWRSb3dzLmxlbmd0aCA+IDApO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeEJhc2VNb2RlbC5wcm90b3R5cGUuc2hvdWxkUnVuQ29sdW1uRXhwcmVzc2lvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLnN1cnZleSB8fCAhdGhpcy5zdXJ2ZXkuYXJlSW52aXNpYmxlRWxlbWVudHNTaG93aW5nO1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhCYXNlTW9kZWwucHJvdG90eXBlLmhhc1Jvd3NBc0l0ZW1zID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4QmFzZU1vZGVsLnByb3RvdHlwZS5ydW5JdGVtc0NvbmRpdGlvbiA9IGZ1bmN0aW9uICh2YWx1ZXMsIHByb3BlcnRpZXMpIHtcbiAgICAgICAgdmFyIG9sZFZpc2libGVSb3dzID0gbnVsbDtcbiAgICAgICAgaWYgKCEhdGhpcy5maWx0ZXJlZFJvd3MgJiYgIV9oZWxwZXJzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bXCJIZWxwZXJzXCJdLmlzVmFsdWVFbXB0eSh0aGlzLmRlZmF1bHRWYWx1ZSkpIHtcbiAgICAgICAgICAgIG9sZFZpc2libGVSb3dzID0gW107XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZmlsdGVyZWRSb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgb2xkVmlzaWJsZVJvd3MucHVzaCh0aGlzLmZpbHRlcmVkUm93c1tpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGhhc0NoYW5nZXMgPSB0aGlzLmhhc1Jvd3NBc0l0ZW1zKCkgJiYgdGhpcy5ydW5Db25kaXRpb25zRm9yUm93cyh2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgICAgICB2YXIgaGFzQ29sdW1uc0NoYW5nZWQgPSB0aGlzLnJ1bkNvbmRpdGlvbnNGb3JDb2x1bW5zKHZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgICAgIGhhc0NoYW5nZXMgPSBoYXNDb2x1bW5zQ2hhbmdlZCB8fCBoYXNDaGFuZ2VzO1xuICAgICAgICBpZiAoaGFzQ2hhbmdlcykge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNDbGVhclZhbHVlT25IaWRkZW4gJiYgKCEhdGhpcy5maWx0ZXJlZENvbHVtbnMgfHwgISF0aGlzLmZpbHRlcmVkUm93cykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFySW5jb3JyZWN0VmFsdWVzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoISFvbGRWaXNpYmxlUm93cykge1xuICAgICAgICAgICAgICAgIHRoaXMucmVzdG9yZU5ld1Zpc2libGVSb3dzVmFsdWVzKG9sZFZpc2libGVSb3dzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY2xlYXJHZW5lcmF0ZWRSb3dzKCk7XG4gICAgICAgICAgICBpZiAoaGFzQ29sdW1uc0NoYW5nZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ29sdW1uc0NoYW5nZWQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMub25Sb3dzQ2hhbmdlZCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBoYXNDaGFuZ2VzO1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhCYXNlTW9kZWwucHJvdG90eXBlLmNsZWFyR2VuZXJhdGVkUm93cyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cyA9IG51bGw7XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeEJhc2VNb2RlbC5wcm90b3R5cGUucnVuQ29uZGl0aW9uc0ZvclJvd3MgPSBmdW5jdGlvbiAodmFsdWVzLCBwcm9wZXJ0aWVzKSB7XG4gICAgICAgIHZhciBzaG93SW52aXNpYmlsZSA9ICEhdGhpcy5zdXJ2ZXkgJiYgdGhpcy5zdXJ2ZXkuYXJlSW52aXNpYmxlRWxlbWVudHNTaG93aW5nO1xuICAgICAgICB2YXIgcnVubmVyID0gIXNob3dJbnZpc2liaWxlICYmICEhdGhpcy5yb3dzVmlzaWJsZUlmXG4gICAgICAgICAgICA/IG5ldyBfY29uZGl0aW9uc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiQ29uZGl0aW9uUnVubmVyXCJdKHRoaXMucm93c1Zpc2libGVJZilcbiAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgdGhpcy5maWx0ZXJlZFJvd3MgPSBbXTtcbiAgICAgICAgdmFyIGhhc0NoYW5nZWQgPSBfaXRlbXZhbHVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJJdGVtVmFsdWVcIl0ucnVuQ29uZGl0aW9uc0Zvckl0ZW1zKHRoaXMucm93cywgdGhpcy5maWx0ZXJlZFJvd3MsIHJ1bm5lciwgdmFsdWVzLCBwcm9wZXJ0aWVzLCAhc2hvd0ludmlzaWJpbGUpO1xuICAgICAgICBpZiAodGhpcy5maWx0ZXJlZFJvd3MubGVuZ3RoID09PSB0aGlzLnJvd3MubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlcmVkUm93cyA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGhhc0NoYW5nZWQ7XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeEJhc2VNb2RlbC5wcm90b3R5cGUucnVuQ29uZGl0aW9uc0ZvckNvbHVtbnMgPSBmdW5jdGlvbiAodmFsdWVzLCBwcm9wZXJ0aWVzKSB7XG4gICAgICAgIHZhciB1c2VDb2x1bW5zRXhwcmVzc2lvbiA9ICEhdGhpcy5zdXJ2ZXkgJiYgIXRoaXMuc3VydmV5LmFyZUludmlzaWJsZUVsZW1lbnRzU2hvd2luZztcbiAgICAgICAgdmFyIHJ1bm5lciA9IHVzZUNvbHVtbnNFeHByZXNzaW9uICYmICEhdGhpcy5jb2x1bW5zVmlzaWJsZUlmXG4gICAgICAgICAgICA/IG5ldyBfY29uZGl0aW9uc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiQ29uZGl0aW9uUnVubmVyXCJdKHRoaXMuY29sdW1uc1Zpc2libGVJZilcbiAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgdGhpcy5maWx0ZXJlZENvbHVtbnMgPSBbXTtcbiAgICAgICAgdmFyIGhhc0NoYW5nZWQgPSBfaXRlbXZhbHVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJJdGVtVmFsdWVcIl0ucnVuQ29uZGl0aW9uc0Zvckl0ZW1zKHRoaXMuY29sdW1ucywgdGhpcy5maWx0ZXJlZENvbHVtbnMsIHJ1bm5lciwgdmFsdWVzLCBwcm9wZXJ0aWVzLCB0aGlzLnNob3VsZFJ1bkNvbHVtbkV4cHJlc3Npb24oKSk7XG4gICAgICAgIGlmICh0aGlzLmZpbHRlcmVkQ29sdW1ucy5sZW5ndGggPT09IHRoaXMuY29sdW1ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRDb2x1bW5zID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaGFzQ2hhbmdlZDtcbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4QmFzZU1vZGVsLnByb3RvdHlwZS5jbGVhckluY29ycmVjdFZhbHVlcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHZhbCA9IHRoaXMudmFsdWU7XG4gICAgICAgIGlmICghdmFsKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIgbmV3VmFsID0gbnVsbDtcbiAgICAgICAgdmFyIGlzQ2hhbmdlZCA9IGZhbHNlO1xuICAgICAgICB2YXIgcm93cyA9ICEhdGhpcy5maWx0ZXJlZFJvd3MgPyB0aGlzLmZpbHRlcmVkUm93cyA6IHRoaXMucm93cztcbiAgICAgICAgdmFyIGNvbHVtbnMgPSAhIXRoaXMuZmlsdGVyZWRDb2x1bW5zID8gdGhpcy5maWx0ZXJlZENvbHVtbnMgOiB0aGlzLmNvbHVtbnM7XG4gICAgICAgIGZvciAodmFyIGtleSBpbiB2YWwpIHtcbiAgICAgICAgICAgIGlmIChfaXRlbXZhbHVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJJdGVtVmFsdWVcIl0uZ2V0SXRlbUJ5VmFsdWUocm93cywga2V5KSAmJlxuICAgICAgICAgICAgICAgIF9pdGVtdmFsdWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkl0ZW1WYWx1ZVwiXS5nZXRJdGVtQnlWYWx1ZShjb2x1bW5zLCB2YWxba2V5XSkpIHtcbiAgICAgICAgICAgICAgICBpZiAobmV3VmFsID09IG51bGwpXG4gICAgICAgICAgICAgICAgICAgIG5ld1ZhbCA9IHt9O1xuICAgICAgICAgICAgICAgIG5ld1ZhbFtrZXldID0gdmFsW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpc0NoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpc0NoYW5nZWQpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBuZXdWYWw7XG4gICAgICAgIH1cbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5jbGVhckluY29ycmVjdFZhbHVlcy5jYWxsKHRoaXMpO1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhCYXNlTW9kZWwucHJvdG90eXBlLmNsZWFySW52aXNpYmxlVmFsdWVzSW5Sb3dzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5pc0VtcHR5KCkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciBuZXdEYXRhID0gdGhpcy5nZXRVbmJpbmRWYWx1ZSh0aGlzLnZhbHVlKTtcbiAgICAgICAgdmFyIHJvd3MgPSB0aGlzLnJvd3M7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGtleSA9IHJvd3NbaV0udmFsdWU7XG4gICAgICAgICAgICBpZiAoISFuZXdEYXRhW2tleV0gJiYgIXJvd3NbaV0uaXNWaXNpYmxlKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIG5ld0RhdGFba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc1R3b1ZhbHVlRXF1YWxzKG5ld0RhdGEsIHRoaXMudmFsdWUpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLnZhbHVlID0gbmV3RGF0YTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4QmFzZU1vZGVsLnByb3RvdHlwZS5yZXN0b3JlTmV3VmlzaWJsZVJvd3NWYWx1ZXMgPSBmdW5jdGlvbiAob2xkVmlzaWJsZVJvd3MpIHtcbiAgICAgICAgdmFyIHJvd3MgPSAhIXRoaXMuZmlsdGVyZWRSb3dzID8gdGhpcy5maWx0ZXJlZFJvd3MgOiB0aGlzLnJvd3M7XG4gICAgICAgIHZhciB2YWwgPSB0aGlzLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgdmFyIG5ld1ZhbHVlID0gdGhpcy5nZXRVbmJpbmRWYWx1ZSh0aGlzLnZhbHVlKTtcbiAgICAgICAgdmFyIGlzQ2hhbmdlZCA9IGZhbHNlO1xuICAgICAgICBmb3IgKHZhciBrZXkgaW4gdmFsKSB7XG4gICAgICAgICAgICBpZiAoX2l0ZW12YWx1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiSXRlbVZhbHVlXCJdLmdldEl0ZW1CeVZhbHVlKHJvd3MsIGtleSkgJiZcbiAgICAgICAgICAgICAgICAhX2l0ZW12YWx1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiSXRlbVZhbHVlXCJdLmdldEl0ZW1CeVZhbHVlKG9sZFZpc2libGVSb3dzLCBrZXkpKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5ld1ZhbHVlID09IG51bGwpXG4gICAgICAgICAgICAgICAgICAgIG5ld1ZhbHVlID0ge307XG4gICAgICAgICAgICAgICAgbmV3VmFsdWVba2V5XSA9IHZhbFtrZXldO1xuICAgICAgICAgICAgICAgIGlzQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQ2hhbmdlZCkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeEJhc2VNb2RlbC5wcm90b3R5cGUubmVlZFJlc3BvbnNpdmVXaWR0aCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy9UT0RPOiBtYWtlIGl0IG1vciBpbnRlbGxpZ2VudFxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4QmFzZU1vZGVsLnByb3RvdHlwZS5nZXRUYWJsZUNzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBfdXRpbHNfY3NzQ2xhc3NCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bXCJDc3NDbGFzc0J1aWxkZXJcIl0oKVxuICAgICAgICAgICAgLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMucm9vdClcbiAgICAgICAgICAgIC5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLm5vSGVhZGVyLCAhdGhpcy5zaG93SGVhZGVyKVxuICAgICAgICAgICAgLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMucm9vdEFsdGVybmF0ZVJvd3MsIHRoaXMuYWx0ZXJuYXRlUm93cylcbiAgICAgICAgICAgIC5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLnJvb3RWZXJ0aWNhbEFsaWduVG9wLCAodGhpcy52ZXJ0aWNhbEFsaWduID09PSBcInRvcFwiKSlcbiAgICAgICAgICAgIC5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLnJvb3RWZXJ0aWNhbEFsaWduTWlkZGxlLCAodGhpcy52ZXJ0aWNhbEFsaWduID09PSBcIm1pZGRsZVwiKSkudG9TdHJpbmcoKTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbk1hdHJpeEJhc2VNb2RlbC5wcm90b3R5cGUsIFwiY29sdW1uTWluV2lkdGhcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogTWluaW11bSBjb2x1bW4gd2lkdGggaW4gQ1NTIHZhbHVlcy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHNlZSB3aWR0aFxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY29sdW1uTWluV2lkdGhcIiwgXCJcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY29sdW1uTWluV2lkdGhcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbk1hdHJpeEJhc2VNb2RlbC5wcm90b3R5cGUsIFwicm93VGl0bGVXaWR0aFwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBIHdpZHRoIGZvciB0aGUgY29sdW1uIHRoYXQgZGlzcGxheXMgcm93IHRpdGxlcyAoZmlyc3QgY29sdW1uKS4gQWNjZXB0cyBDU1MgdmFsdWVzLlxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicm93VGl0bGVXaWR0aFwiLCBcIlwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJyb3dUaXRsZVdpZHRoXCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJwcm9wZXJ0eVwiXSkoeyBkZWZhdWx0VmFsdWU6IFwibWlkZGxlXCIgfSlcbiAgICBdLCBRdWVzdGlvbk1hdHJpeEJhc2VNb2RlbC5wcm90b3R5cGUsIFwidmVydGljYWxBbGlnblwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QoX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcInByb3BlcnR5XCJdKSgpXG4gICAgXSwgUXVlc3Rpb25NYXRyaXhCYXNlTW9kZWwucHJvdG90eXBlLCBcImFsdGVybmF0ZVJvd3NcIiwgdm9pZCAwKTtcbiAgICByZXR1cm4gUXVlc3Rpb25NYXRyaXhCYXNlTW9kZWw7XG59KF9xdWVzdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiUXVlc3Rpb25cIl0pKTtcblxuX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIlNlcmlhbGl6ZXJcIl0uYWRkQ2xhc3MoXCJtYXRyaXhiYXNlXCIsIFtcbiAgICB7IG5hbWU6IFwic2hvd0NvbW1lbnRBcmVhOnN3aXRjaFwiLCBsYXlvdXQ6IFwicm93XCIsIHZpc2libGU6IHRydWUsIGNhdGVnb3J5OiBcImdlbmVyYWxcIiB9LFxuICAgIFwiY29sdW1uc1Zpc2libGVJZjpjb25kaXRpb25cIixcbiAgICBcInJvd3NWaXNpYmxlSWY6Y29uZGl0aW9uXCIsXG4gICAgXCJjb2x1bW5NaW5XaWR0aFwiLFxuICAgIHsgbmFtZTogXCJzaG93SGVhZGVyOmJvb2xlYW5cIiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIHtcbiAgICAgICAgbmFtZTogXCJ2ZXJ0aWNhbEFsaWduXCIsXG4gICAgICAgIGNob2ljZXM6IFtcInRvcFwiLCBcIm1pZGRsZVwiXSxcbiAgICAgICAgZGVmYXVsdDogXCJtaWRkbGVcIixcbiAgICB9LFxuICAgIHsgbmFtZTogXCJhbHRlcm5hdGVSb3dzOmJvb2xlYW5cIiwgZGVmYXVsdDogZmFsc2UgfVxuXSwgdW5kZWZpbmVkLCBcInF1ZXN0aW9uXCIpO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL211bHRpU2VsZWN0TGlzdE1vZGVsLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL211bHRpU2VsZWN0TGlzdE1vZGVsLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IE11bHRpU2VsZWN0TGlzdE1vZGVsICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIk11bHRpU2VsZWN0TGlzdE1vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gTXVsdGlTZWxlY3RMaXN0TW9kZWw7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2pzb25vYmplY3QgKi8gXCIuL3NyYy9qc29ub2JqZWN0LnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9saXN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2xpc3QgKi8gXCIuL3NyYy9saXN0LnRzXCIpO1xudmFyIF9fZXh0ZW5kcyA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG52YXIgX19kZWNvcmF0ZSA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xuXG5cbnZhciBNdWx0aVNlbGVjdExpc3RNb2RlbCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoTXVsdGlTZWxlY3RMaXN0TW9kZWwsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gTXVsdGlTZWxlY3RMaXN0TW9kZWwoaXRlbXMsIG9uU2VsZWN0aW9uQ2hhbmdlZCwgYWxsb3dTZWxlY3Rpb24sIHNlbGVjdGVkSXRlbXMsIG9uRmlsdGVyU3RyaW5nQ2hhbmdlZENhbGxiYWNrLCBlbGVtZW50SWQpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgaXRlbXMsIG9uU2VsZWN0aW9uQ2hhbmdlZCwgYWxsb3dTZWxlY3Rpb24sIHVuZGVmaW5lZCwgb25GaWx0ZXJTdHJpbmdDaGFuZ2VkQ2FsbGJhY2ssIGVsZW1lbnRJZCkgfHwgdGhpcztcbiAgICAgICAgX3RoaXMub25JdGVtQ2xpY2sgPSBmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgICAgaWYgKF90aGlzLmlzSXRlbURpc2FibGVkKGl0ZW0pKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIF90aGlzLmlzRXhwYW5kZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmIChfdGhpcy5pc0l0ZW1TZWxlY3RlZChpdGVtKSkge1xuICAgICAgICAgICAgICAgIF90aGlzLnNlbGVjdGVkSXRlbXMuc3BsaWNlKF90aGlzLnNlbGVjdGVkSXRlbXMuaW5kZXhPZihpdGVtKSwgMSlbMF07XG4gICAgICAgICAgICAgICAgISFfdGhpcy5vblNlbGVjdGlvbkNoYW5nZWQgJiYgKF90aGlzLm9uU2VsZWN0aW9uQ2hhbmdlZChpdGVtLCBcInJlbW92ZWRcIikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgX3RoaXMuc2VsZWN0ZWRJdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICAgICEhX3RoaXMub25TZWxlY3Rpb25DaGFuZ2VkICYmIChfdGhpcy5vblNlbGVjdGlvbkNoYW5nZWQoaXRlbSwgXCJhZGRlZFwiKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIF90aGlzLmlzSXRlbURpc2FibGVkID0gZnVuY3Rpb24gKGl0ZW1WYWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW1WYWx1ZS5lbmFibGVkICE9PSB1bmRlZmluZWQgJiYgIWl0ZW1WYWx1ZS5lbmFibGVkO1xuICAgICAgICB9O1xuICAgICAgICBfdGhpcy5pc0l0ZW1TZWxlY3RlZCA9IGZ1bmN0aW9uIChpdGVtVmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiAhIV90aGlzLmFsbG93U2VsZWN0aW9uICYmIF90aGlzLnNlbGVjdGVkSXRlbXMuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7IHJldHVybiBfdGhpcy5hcmVTYW1lSXRlbXMoaXRlbSwgaXRlbVZhbHVlKTsgfSkubGVuZ3RoID4gMDtcbiAgICAgICAgfTtcbiAgICAgICAgX3RoaXMuc2V0U2VsZWN0ZWRJdGVtcyhzZWxlY3RlZEl0ZW1zIHx8IFtdKTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBNdWx0aVNlbGVjdExpc3RNb2RlbC5wcm90b3R5cGUudXBkYXRlSXRlbVN0YXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB0aGlzLmFjdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoYWN0aW9uKSB7XG4gICAgICAgICAgICB2YXIgaXNTZWxlY3RlZCA9IF90aGlzLmlzSXRlbVNlbGVjdGVkKGFjdGlvbik7XG4gICAgICAgICAgICBhY3Rpb24udmlzaWJsZSA9IF90aGlzLmhpZGVTZWxlY3RlZEl0ZW1zID8gIWlzU2VsZWN0ZWQgOiB0cnVlO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIE11bHRpU2VsZWN0TGlzdE1vZGVsLnByb3RvdHlwZS51cGRhdGVTdGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdGhpcy51cGRhdGVJdGVtU3RhdGUoKTtcbiAgICAgICAgdGhpcy5pc0VtcHR5ID0gdGhpcy5yZW5kZXJlZEFjdGlvbnMuZmlsdGVyKGZ1bmN0aW9uIChhY3Rpb24pIHsgcmV0dXJuIF90aGlzLmlzSXRlbVZpc2libGUoYWN0aW9uKTsgfSkubGVuZ3RoID09PSAwO1xuICAgIH07XG4gICAgTXVsdGlTZWxlY3RMaXN0TW9kZWwucHJvdG90eXBlLnNldFNlbGVjdGVkSXRlbXMgPSBmdW5jdGlvbiAobmV3SXRlbXMpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gbmV3SXRlbXM7XG4gICAgICAgIHRoaXMudXBkYXRlU3RhdGUoKTtcbiAgICB9O1xuICAgIE11bHRpU2VsZWN0TGlzdE1vZGVsLnByb3RvdHlwZS5zZWxlY3RGb2N1c2VkSXRlbSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5zZWxlY3RGb2N1c2VkSXRlbS5jYWxsKHRoaXMpO1xuICAgICAgICBpZiAodGhpcy5oaWRlU2VsZWN0ZWRJdGVtcykge1xuICAgICAgICAgICAgdGhpcy5mb2N1c05leHRWaXNpYmxlSXRlbSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJwcm9wZXJ0eVwiXSkoKVxuICAgIF0sIE11bHRpU2VsZWN0TGlzdE1vZGVsLnByb3RvdHlwZSwgXCJoaWRlU2VsZWN0ZWRJdGVtc1wiLCB2b2lkIDApO1xuICAgIHJldHVybiBNdWx0aVNlbGVjdExpc3RNb2RlbDtcbn0oX2xpc3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIkxpc3RNb2RlbFwiXSkpO1xuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvbm90aWZpZXIudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvbm90aWZpZXIudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogTm90aWZpZXIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiTm90aWZpZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBOb3RpZmllcjsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Jhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYmFzZSAqLyBcIi4vc3JjL2Jhc2UudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NldHRpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3NldHRpbmdzICovIFwiLi9zcmMvc2V0dGluZ3MudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vanNvbm9iamVjdCAqLyBcIi4vc3JjL2pzb25vYmplY3QudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3V0aWxzX2Nzc0NsYXNzQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi91dGlscy9jc3NDbGFzc0J1aWxkZXIgKi8gXCIuL3NyYy91dGlscy9jc3NDbGFzc0J1aWxkZXIudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2FjdGlvbnNfY29udGFpbmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2FjdGlvbnMvY29udGFpbmVyICovIFwiLi9zcmMvYWN0aW9ucy9jb250YWluZXIudHNcIik7XG52YXIgX19leHRlbmRzID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbnZhciBfX2RlY29yYXRlID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn07XG5cblxuXG5cblxudmFyIE5vdGlmaWVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhOb3RpZmllciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBOb3RpZmllcihjc3NDbGFzc2VzKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmNzc0NsYXNzZXMgPSBjc3NDbGFzc2VzO1xuICAgICAgICBfdGhpcy50aW1lb3V0ID0gX3NldHRpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJzZXR0aW5nc1wiXS5ub3RpZmljYXRpb25zLmxpZmV0aW1lO1xuICAgICAgICBfdGhpcy50aW1lciA9IHVuZGVmaW5lZDtcbiAgICAgICAgX3RoaXMuYWN0aW9uc1Zpc2liaWxpdHkgPSB7fTtcbiAgICAgICAgX3RoaXMuYWN0aW9uQmFyID0gbmV3IF9hY3Rpb25zX2NvbnRhaW5lcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fW1wiQWN0aW9uQ29udGFpbmVyXCJdKCk7XG4gICAgICAgIF90aGlzLmFjdGlvbkJhci51cGRhdGVDYWxsYmFjayA9IGZ1bmN0aW9uIChpc1Jlc2V0SW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgIF90aGlzLmFjdGlvbkJhci5hY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKGFjdGlvbikgeyByZXR1cm4gYWN0aW9uLmNzc0NsYXNzZXMgPSB7fTsgfSk7XG4gICAgICAgIH07XG4gICAgICAgIF90aGlzLmNzcyA9IF90aGlzLmNzc0NsYXNzZXMucm9vdDtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBOb3RpZmllci5wcm90b3R5cGUuZ2V0Q3NzQ2xhc3MgPSBmdW5jdGlvbiAodHlwZSkge1xuICAgICAgICByZXR1cm4gbmV3IF91dGlsc19jc3NDbGFzc0J1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcIkNzc0NsYXNzQnVpbGRlclwiXSgpXG4gICAgICAgICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5yb290KVxuICAgICAgICAgICAgLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMuaW5mbywgdHlwZSAhPT0gXCJlcnJvclwiICYmIHR5cGUgIT09IFwic3VjY2Vzc1wiKVxuICAgICAgICAgICAgLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMuZXJyb3IsIHR5cGUgPT09IFwiZXJyb3JcIilcbiAgICAgICAgICAgIC5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLnN1Y2Nlc3MsIHR5cGUgPT09IFwic3VjY2Vzc1wiKVxuICAgICAgICAgICAgLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMuc2hvd24sIHRoaXMuYWN0aXZlKVxuICAgICAgICAgICAgLnRvU3RyaW5nKCk7XG4gICAgfTtcbiAgICBOb3RpZmllci5wcm90b3R5cGUudXBkYXRlQWN0aW9uc1Zpc2liaWxpdHkgPSBmdW5jdGlvbiAodHlwZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB0aGlzLmFjdGlvbkJhci5hY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKGFjdGlvbikgeyByZXR1cm4gYWN0aW9uLnZpc2libGUgPSAoX3RoaXMuYWN0aW9uc1Zpc2liaWxpdHlbYWN0aW9uLmlkXSA9PT0gdHlwZSk7IH0pO1xuICAgIH07XG4gICAgTm90aWZpZXIucHJvdG90eXBlLm5vdGlmeSA9IGZ1bmN0aW9uIChtZXNzYWdlLCB0eXBlLCB3YWl0VXNlckFjdGlvbikge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBpZiAodHlwZSA9PT0gdm9pZCAwKSB7IHR5cGUgPSBcImluZm9cIjsgfVxuICAgICAgICBpZiAod2FpdFVzZXJBY3Rpb24gPT09IHZvaWQgMCkgeyB3YWl0VXNlckFjdGlvbiA9IGZhbHNlOyB9XG4gICAgICAgIHRoaXMuaXNEaXNwbGF5ZWQgPSB0cnVlO1xuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLnVwZGF0ZUFjdGlvbnNWaXNpYmlsaXR5KHR5cGUpO1xuICAgICAgICAgICAgX3RoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgICAgICAgICBfdGhpcy5hY3RpdmUgPSB0cnVlO1xuICAgICAgICAgICAgX3RoaXMuY3NzID0gX3RoaXMuZ2V0Q3NzQ2xhc3ModHlwZSk7XG4gICAgICAgICAgICBpZiAoISFfdGhpcy50aW1lcikge1xuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChfdGhpcy50aW1lcik7XG4gICAgICAgICAgICAgICAgX3RoaXMudGltZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXdhaXRVc2VyQWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMudGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMudGltZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIF90aGlzLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBfdGhpcy5jc3MgPSBfdGhpcy5nZXRDc3NDbGFzcyh0eXBlKTtcbiAgICAgICAgICAgICAgICB9LCBfdGhpcy50aW1lb3V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgMSk7XG4gICAgfTtcbiAgICBOb3RpZmllci5wcm90b3R5cGUuYWRkQWN0aW9uID0gZnVuY3Rpb24gKGFjdGlvbiwgbm90aWZpY2F0aW9uVHlwZSkge1xuICAgICAgICBhY3Rpb24udmlzaWJsZSA9IGZhbHNlO1xuICAgICAgICBhY3Rpb24uaW5uZXJDc3MgPSB0aGlzLmNzc0NsYXNzZXMuYnV0dG9uO1xuICAgICAgICB2YXIgcmVzID0gdGhpcy5hY3Rpb25CYXIuYWRkQWN0aW9uKGFjdGlvbik7XG4gICAgICAgIHRoaXMuYWN0aW9uc1Zpc2liaWxpdHlbcmVzLmlkXSA9IG5vdGlmaWNhdGlvblR5cGU7XG4gICAgfTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJwcm9wZXJ0eVwiXSkoeyBkZWZhdWx0VmFsdWU6IGZhbHNlIH0pXG4gICAgXSwgTm90aWZpZXIucHJvdG90eXBlLCBcImFjdGl2ZVwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QoX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcInByb3BlcnR5XCJdKSh7IGRlZmF1bHRWYWx1ZTogZmFsc2UgfSlcbiAgICBdLCBOb3RpZmllci5wcm90b3R5cGUsIFwiaXNEaXNwbGF5ZWRcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJwcm9wZXJ0eVwiXSkoKVxuICAgIF0sIE5vdGlmaWVyLnByb3RvdHlwZSwgXCJtZXNzYWdlXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wicHJvcGVydHlcIl0pKClcbiAgICBdLCBOb3RpZmllci5wcm90b3R5cGUsIFwiY3NzXCIsIHZvaWQgMCk7XG4gICAgcmV0dXJuIE5vdGlmaWVyO1xufShfYmFzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiQmFzZVwiXSkpO1xuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvcGFnZS50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3BhZ2UudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBQYWdlTW9kZWwgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUGFnZU1vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUGFnZU1vZGVsOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9qc29ub2JqZWN0ICovIFwiLi9zcmMvanNvbm9iamVjdC50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcGFuZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcGFuZWwgKi8gXCIuL3NyYy9wYW5lbC50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdXRpbHNfY3NzQ2xhc3NCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3V0aWxzL2Nzc0NsYXNzQnVpbGRlciAqLyBcIi4vc3JjL3V0aWxzL2Nzc0NsYXNzQnVpbGRlci50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZHJhZ19kcm9wX3BhZ2VfaGVscGVyX3YxX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2RyYWctZHJvcC1wYWdlLWhlbHBlci12MSAqLyBcIi4vc3JjL2RyYWctZHJvcC1wYWdlLWhlbHBlci12MS50c1wiKTtcbnZhciBfX2V4dGVuZHMgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xudmFyIF9fZGVjb3JhdGUgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufTtcblxuXG5cblxuLyoqXG4gKiBUaGUgYFBhZ2VNb2RlbGAgb2JqZWN0IGRlc2NyaWJlcyBhIHN1cnZleSBwYWdlIGFuZCBjb250YWlucyBwcm9wZXJ0aWVzIGFuZCBtZXRob2RzIHRoYXQgYWxsb3cgeW91IHRvIGNvbnRyb2wgdGhlIHBhZ2UgYW5kIGFjY2VzcyBpdHMgZWxlbWVudHMgKHBhbmVscyBhbmQgcXVlc3Rpb25zKS5cbiAqXG4gKiBbVmlldyBEZW1vXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9leGFtcGxlcy9ucHMtcXVlc3Rpb24vIChsaW5rU3R5bGUpKVxuICovXG52YXIgUGFnZU1vZGVsID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhQYWdlTW9kZWwsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gUGFnZU1vZGVsKG5hbWUpIHtcbiAgICAgICAgaWYgKG5hbWUgPT09IHZvaWQgMCkgeyBuYW1lID0gXCJcIjsgfVxuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBuYW1lKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5oYXNTaG93blZhbHVlID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBIHRpbWUgcGVyaW9kIHRoYXQgYSByZXNwb25kZW50IGhhcyBzcGVudCBvbiB0aGlzIHBhZ2Ugc28gZmFyOyBtZWFzdXJlZCBpbiBzZWNvbmRzLiBBcHBsaWVzIG9ubHkgdG8gW3F1aXogc3VydmV5c10oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9kZXNpZ24tc3VydmV5LWNyZWF0ZS1hLXF1aXopLlxuICAgICAgICAgKiBAc2VlIG1heFRpbWVUb0ZpbmlzaFxuICAgICAgICAgKi9cbiAgICAgICAgX3RoaXMudGltZVNwZW50ID0gMDtcbiAgICAgICAgX3RoaXMubG9jVGl0bGUub25HZXRUZXh0Q2FsbGJhY2sgPSBmdW5jdGlvbiAodGV4dCkge1xuICAgICAgICAgICAgaWYgKF90aGlzLmNhblNob3dQYWdlTnVtYmVyKCkgJiYgdGV4dClcbiAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMubnVtICsgXCIuIFwiICsgdGV4dDtcbiAgICAgICAgICAgIHJldHVybiB0ZXh0O1xuICAgICAgICB9O1xuICAgICAgICBfdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcIm5hdmlnYXRpb25UaXRsZVwiLCBfdGhpcywgdHJ1ZSk7XG4gICAgICAgIF90aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwibmF2aWdhdGlvbkRlc2NyaXB0aW9uXCIsIF90aGlzLCB0cnVlKTtcbiAgICAgICAgX3RoaXMuZHJhZ0Ryb3BQYWdlSGVscGVyID0gbmV3IF9kcmFnX2Ryb3BfcGFnZV9oZWxwZXJfdjFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcIkRyYWdEcm9wUGFnZUhlbHBlclYxXCJdKF90aGlzKTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBQYWdlTW9kZWwucHJvdG90eXBlLmdldFR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBcInBhZ2VcIjtcbiAgICB9O1xuICAgIFBhZ2VNb2RlbC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hbWU7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUGFnZU1vZGVsLnByb3RvdHlwZSwgXCJpc1BhZ2VcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUGFnZU1vZGVsLnByb3RvdHlwZS5jYW5TaG93UGFnZU51bWJlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3VydmV5ICYmIHRoaXMuc3VydmV5LnNob3dQYWdlTnVtYmVycztcbiAgICB9O1xuICAgIFBhZ2VNb2RlbC5wcm90b3R5cGUuY2FuU2hvd1RpdGxlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdXJ2ZXkgJiYgdGhpcy5zdXJ2ZXkuc2hvd1BhZ2VUaXRsZXM7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUGFnZU1vZGVsLnByb3RvdHlwZSwgXCJuYXZpZ2F0aW9uVGl0bGVcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogQSBjYXB0aW9uIGRpc3BsYXllZCBvbiBhIG5hdmlnYXRpb24gYnV0dG9uIGluIHRoZSBUT0Mgb3IgcHJvZ3Jlc3MgYmFyLiBBcHBsaWVzIHdoZW4gW2BzaG93VE9DYF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL3N1cnZleS1kYXRhLW1vZGVsI3Nob3dUT0MpIGlzIGB0cnVlYCBvciB3aGVuIFtgc2hvd1Byb2dyZXNzQmFyYF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9zdXJ2ZXltb2RlbCNzaG93UHJvZ3Jlc3NCYXIpIGlzIGB0cnVlYCBhbmQgW2Bwcm9ncmVzc0JhclR5cGVgXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL3N1cnZleW1vZGVsI3Byb2dyZXNzQmFyVHlwZSkgaXMgYFwiYnV0dG9uc1wiYC5cbiAgICAgICAgICpcbiAgICAgICAgICogSWYgbmF2aWdhdGlvbiB0aXRsZXMgYXJlIHVuc3BlY2lmaWVkLCB0aGUgbmF2aWdhdGlvbiBidXR0b25zIGRpc3BsYXkgcGFnZSBbdGl0bGVzXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2UvcGFnZS1tb2RlbCN0aXRsZSkgb3IgW25hbWVzXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL3BhZ2Vtb2RlbCNuYW1lKS5cbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwibmF2aWdhdGlvblRpdGxlXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwibmF2aWdhdGlvblRpdGxlXCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUGFnZU1vZGVsLnByb3RvdHlwZSwgXCJsb2NOYXZpZ2F0aW9uVGl0bGVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwibmF2aWdhdGlvblRpdGxlXCIpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBhZ2VNb2RlbC5wcm90b3R5cGUsIFwibmF2aWdhdGlvbkRlc2NyaXB0aW9uXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJuYXZpZ2F0aW9uRGVzY3JpcHRpb25cIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJuYXZpZ2F0aW9uRGVzY3JpcHRpb25cIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQYWdlTW9kZWwucHJvdG90eXBlLCBcImxvY05hdmlnYXRpb25EZXNjcmlwdGlvblwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJuYXZpZ2F0aW9uRGVzY3JpcHRpb25cIik7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBQYWdlTW9kZWwucHJvdG90eXBlLm5hdmlnYXRpb25Mb2NTdHJDaGFuZ2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmxvY05hdmlnYXRpb25UaXRsZS5zdHJDaGFuZ2VkKCk7XG4gICAgICAgIHRoaXMubG9jTmF2aWdhdGlvbkRlc2NyaXB0aW9uLnN0ckNoYW5nZWQoKTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQYWdlTW9kZWwucHJvdG90eXBlLCBcInJlbmRlcmVkTmF2aWdhdGlvblRpdGxlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NOYXZpZ2F0aW9uVGl0bGUucmVuZGVyZWRIdG1sIHx8IHRoaXMudGl0bGUgfHwgdGhpcy5uYW1lO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBhZ2VNb2RlbC5wcm90b3R5cGUsIFwicGFzc2VkXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicGFzc2VkXCIsIGZhbHNlKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJwYXNzZWRcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFBhZ2VNb2RlbC5wcm90b3R5cGUucmVtb3ZlRnJvbVBhcmVudCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCEhdGhpcy5zdXJ2ZXkpIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlU2VsZkZyb21MaXN0KHRoaXMuc3VydmV5LnBhZ2VzKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgUGFnZU1vZGVsLnByb3RvdHlwZS5vbkZpcnN0UmVuZGVyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy53YXNTaG93bilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5vbkZpcnN0UmVuZGVyaW5nLmNhbGwodGhpcyk7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUGFnZU1vZGVsLnByb3RvdHlwZSwgXCJ2aXNpYmxlSW5kZXhcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogVGhlIHZpc2libGUgaW5kZXggb2YgdGhlIHBhZ2UuIEl0IGhhcyB2YWx1ZXMgZnJvbSAwIHRvIHZpc2libGUgcGFnZSBjb3VudCAtIDEuXG4gICAgICAgICAqIEBzZWUgU3VydmV5TW9kZWwudmlzaWJsZVBhZ2VzXG4gICAgICAgICAqIEBzZWUgU3VydmV5TW9kZWwucGFnZXNcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInZpc2libGVJbmRleFwiLCAtMSk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidmlzaWJsZUluZGV4XCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBQYWdlTW9kZWwucHJvdG90eXBlLmNhblJlbmRlckZpcnN0Um93cyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmlzRGVzaWduTW9kZSB8fCB0aGlzLnZpc2libGVJbmRleCA9PSAwO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBhZ2VNb2RlbC5wcm90b3R5cGUsIFwiaXNTdGFydFBhZ2VcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhpcyBwYWdlIGlzIGEgc3RhcnQgcGFnZS5cbiAgICAgICAgICpcbiAgICAgICAgICogUmVmZXIgdG8gdGhlIGZvbGxvd2luZyBoZWxwIHRvcGljIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb25maWd1cmUgYSBzdGFydCBwYWdlOiBbU3RhcnQgUGFnZV0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9kZXNpZ24tc3VydmV5LWNyZWF0ZS1hLW11bHRpLXBhZ2Utc3VydmV5I3N0YXJ0LXBhZ2UpLlxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdXJ2ZXkgJiYgdGhpcy5zdXJ2ZXkuaXNQYWdlU3RhcnRlZCh0aGlzKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQYWdlTW9kZWwucHJvdG90eXBlLCBcImlzU3RhcnRlZFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5pc1N0YXJ0UGFnZTsgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFBhZ2VNb2RlbC5wcm90b3R5cGUuY2FsY0Nzc0NsYXNzZXMgPSBmdW5jdGlvbiAoY3NzKSB7XG4gICAgICAgIHZhciBjbGFzc2VzID0geyBwYWdlOiB7fSwgcGFnZVRpdGxlOiBcIlwiLCBwYWdlRGVzY3JpcHRpb246IFwiXCIsIHJvdzogXCJcIiwgcm93TXVsdGlwbGU6IFwiXCIsIHBhZ2VSb3c6IFwiXCIsIHJvd0NvbXBhY3Q6IFwiXCIgfTtcbiAgICAgICAgdGhpcy5jb3B5Q3NzQ2xhc3NlcyhjbGFzc2VzLnBhZ2UsIGNzcy5wYWdlKTtcbiAgICAgICAgaWYgKCEhY3NzLnBhZ2VUaXRsZSkge1xuICAgICAgICAgICAgY2xhc3Nlcy5wYWdlVGl0bGUgPSBjc3MucGFnZVRpdGxlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghIWNzcy5wYWdlRGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIGNsYXNzZXMucGFnZURlc2NyaXB0aW9uID0gY3NzLnBhZ2VEZXNjcmlwdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoISFjc3Mucm93KSB7XG4gICAgICAgICAgICBjbGFzc2VzLnJvdyA9IGNzcy5yb3c7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEhY3NzLnBhZ2VSb3cpIHtcbiAgICAgICAgICAgIGNsYXNzZXMucGFnZVJvdyA9IGNzcy5wYWdlUm93O1xuICAgICAgICB9XG4gICAgICAgIGlmICghIWNzcy5yb3dNdWx0aXBsZSkge1xuICAgICAgICAgICAgY2xhc3Nlcy5yb3dNdWx0aXBsZSA9IGNzcy5yb3dNdWx0aXBsZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoISFjc3Mucm93Q29tcGFjdCkge1xuICAgICAgICAgICAgY2xhc3Nlcy5yb3dDb21wYWN0ID0gY3NzLnJvd0NvbXBhY3Q7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc3VydmV5KSB7XG4gICAgICAgICAgICB0aGlzLnN1cnZleS51cGRhdGVQYWdlQ3NzQ2xhc3Nlcyh0aGlzLCBjbGFzc2VzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2xhc3NlcztcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQYWdlTW9kZWwucHJvdG90eXBlLCBcImNzc1RpdGxlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuY3NzQ2xhc3Nlcy5wYWdlKVxuICAgICAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBfdXRpbHNfY3NzQ2xhc3NCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJDc3NDbGFzc0J1aWxkZXJcIl0oKVxuICAgICAgICAgICAgICAgIC5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLnBhZ2UudGl0bGUpXG4gICAgICAgICAgICAgICAgLnRvU3RyaW5nKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUGFnZU1vZGVsLnByb3RvdHlwZSwgXCJjc3NSb290XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuY3NzQ2xhc3Nlcy5wYWdlIHx8ICF0aGlzLnN1cnZleSlcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgICAgIHJldHVybiBuZXcgX3V0aWxzX2Nzc0NsYXNzQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiQ3NzQ2xhc3NCdWlsZGVyXCJdKClcbiAgICAgICAgICAgICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5wYWdlLnJvb3QpXG4gICAgICAgICAgICAgICAgLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMucGFnZS5lbXB0eUhlYWRlclJvb3QsICF0aGlzLnN1cnZleS5yZW5kZXJlZEhhc0hlYWRlciAmJlxuICAgICAgICAgICAgICAgICEodGhpcy5zdXJ2ZXkuaXNTaG93UHJvZ3Jlc3NCYXJPblRvcCAmJiAhdGhpcy5zdXJ2ZXkuaXNTdGFyaW5nKSlcbiAgICAgICAgICAgICAgICAudG9TdHJpbmcoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQYWdlTW9kZWwucHJvdG90eXBlLCBcIm5hdmlnYXRpb25CdXR0b25zVmlzaWJpbGl0eVwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSB0byBcImhpZGVcIiB0byBtYWtlIFwiUHJldlwiLCBcIk5leHRcIiBhbmQgXCJDb21wbGV0ZVwiIGJ1dHRvbnMgYXJlIGludmlzaWJsZSBmb3IgdGhpcyBwYWdlLiBTZXQgdGhpcyBwcm9wZXJ0eSB0byBcInNob3dcIiB0byBtYWtlIHRoZXNlIGJ1dHRvbnMgdmlzaWJsZSwgZXZlbiBpZiBzdXJ2ZXkgc2hvd05hdmlnYXRpb25CdXR0b25zIHByb3BlcnR5IGlzIGZhbHNlLlxuICAgICAgICAgKiBAc2VlIFN1cnZleU1vZGUuc2hvd05hdmlnYXRpb25CdXR0b25zXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJuYXZpZ2F0aW9uQnV0dG9uc1Zpc2liaWxpdHlcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibmF2aWdhdGlvbkJ1dHRvbnNWaXNpYmlsaXR5XCIsIHZhbC50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQYWdlTW9kZWwucHJvdG90eXBlLCBcImlzQWN0aXZlXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgYHRydWVgIGlmIHRoaXMgaXMgdGhlIGN1cnJlbnQgcGFnZS5cbiAgICAgICAgICogQHNlZSBTdXJ2ZXlNb2RlbC5jdXJyZW50UGFnZVxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gISF0aGlzLnN1cnZleSAmJiB0aGlzLnN1cnZleS5jdXJyZW50UGFnZSA9PT0gdGhpcztcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQYWdlTW9kZWwucHJvdG90eXBlLCBcIndhc1Nob3duXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgYHRydWVgIGlmIHRoZSByZXNwb25kZW50IGhhcyBhbHJlYWR5IHNlZW4gdGhpcyBwYWdlIGR1cmluZyB0aGUgY3VycmVudCBzZXNzaW9uLlxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5oYXNTaG93blZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBhZ2VNb2RlbC5wcm90b3R5cGUsIFwiaGFzU2hvd25cIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLndhc1Nob3duO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUGFnZU1vZGVsLnByb3RvdHlwZS5zZXRXYXNTaG93biA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgaWYgKHZhbCA9PSB0aGlzLmhhc1Nob3duVmFsdWUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMuaGFzU2hvd25WYWx1ZSA9IHZhbDtcbiAgICAgICAgaWYgKHRoaXMuaXNEZXNpZ25Nb2RlIHx8IHZhbCAhPT0gdHJ1ZSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIGVscyA9IHRoaXMuZWxlbWVudHM7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoZWxzW2ldLmlzUGFuZWwpIHtcbiAgICAgICAgICAgICAgICBlbHNbaV0ucmFuZG9taXplRWxlbWVudHModGhpcy5hcmVRdWVzdGlvbnNSYW5kb21pemVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJhbmRvbWl6ZUVsZW1lbnRzKHRoaXMuYXJlUXVlc3Rpb25zUmFuZG9taXplZCk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBTY3JvbGxzIHRoaXMgcGFnZSB0byB0aGUgdG9wLlxuICAgICAqL1xuICAgIFBhZ2VNb2RlbC5wcm90b3R5cGUuc2Nyb2xsVG9Ub3AgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghIXRoaXMuc3VydmV5KSB7XG4gICAgICAgICAgICB0aGlzLnN1cnZleS5zY3JvbGxFbGVtZW50VG9Ub3AodGhpcywgbnVsbCwgdGhpcywgdGhpcy5pZCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIC8vIHB1YmxpYyBnZXQgdGltZVNwZW50KCk6IG51bWJlciB7XG4gICAgLy8gICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwidGltZVNwZW50XCIsIDApO1xuICAgIC8vIH1cbiAgICAvLyBwdWJsaWMgc2V0IHRpbWVTcGVudCh2YWw6IG51bWJlcikge1xuICAgIC8vICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidGltZVNwZW50XCIsIHZhbCk7XG4gICAgLy8gfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBsaXN0IG9mIGFsbCBwYW5lbHMgb24gdGhpcyBwYWdlLlxuICAgICAqIEBwYXJhbSB2aXNpYmxlT25seSBBIEJvb2xlYW4gdmFsdWUgdGhhdCBzcGVjaWZpZXMgd2hldGhlciB0byBpbmNsdWRlIG9ubHkgdmlzaWJsZSBwYW5lbHMuXG4gICAgICogQHBhcmFtIGluY2x1ZGluZ0Rlc2lnblRpbWUgRm9yIGludGVybmFsIHVzZS5cbiAgICAgKi9cbiAgICBQYWdlTW9kZWwucHJvdG90eXBlLmdldEFsbFBhbmVscyA9IGZ1bmN0aW9uICh2aXNpYmxlT25seSwgaW5jbHVkaW5nRGVzaWduVGltZSkge1xuICAgICAgICBpZiAodmlzaWJsZU9ubHkgPT09IHZvaWQgMCkgeyB2aXNpYmxlT25seSA9IGZhbHNlOyB9XG4gICAgICAgIGlmIChpbmNsdWRpbmdEZXNpZ25UaW1lID09PSB2b2lkIDApIHsgaW5jbHVkaW5nRGVzaWduVGltZSA9IGZhbHNlOyB9XG4gICAgICAgIHZhciByZXN1bHQgPSBuZXcgQXJyYXkoKTtcbiAgICAgICAgdGhpcy5hZGRQYW5lbHNJbnRvTGlzdChyZXN1bHQsIHZpc2libGVPbmx5LCBpbmNsdWRpbmdEZXNpZ25UaW1lKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICAgIFBhZ2VNb2RlbC5wcm90b3R5cGUuZ2V0UGFuZWxzID0gZnVuY3Rpb24gKHZpc2libGVPbmx5LCBpbmNsdWRpbmdEZXNpZ25UaW1lKSB7XG4gICAgICAgIGlmICh2aXNpYmxlT25seSA9PT0gdm9pZCAwKSB7IHZpc2libGVPbmx5ID0gZmFsc2U7IH1cbiAgICAgICAgaWYgKGluY2x1ZGluZ0Rlc2lnblRpbWUgPT09IHZvaWQgMCkgeyBpbmNsdWRpbmdEZXNpZ25UaW1lID0gZmFsc2U7IH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QWxsUGFuZWxzKHZpc2libGVPbmx5LCBpbmNsdWRpbmdEZXNpZ25UaW1lKTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQYWdlTW9kZWwucHJvdG90eXBlLCBcIm1heFRpbWVUb0ZpbmlzaFwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBIHRpbWUgcGVyaW9kIHRoYXQgYSByZXNwb25kZW50IGhhcyB0byBjb21wbGV0ZSB0aGlzIHBhZ2U7IG1lYXN1cmVkIGluIHNlY29uZHMuIEFwcGxpZXMgb25seSB0byBbcXVpeiBzdXJ2ZXlzXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2Rlc2lnbi1zdXJ2ZXktY3JlYXRlLWEtcXVpeikuXG4gICAgICAgICAqXG4gICAgICAgICAqIEEgbmVnYXRpdmUgdmFsdWUgb3IgMCBzZXRzIGFuIHVubGltaXRlZCB0aW1lIHBlcmlvZC5cbiAgICAgICAgICpcbiAgICAgICAgICogQWx0ZXJuYXRpdmVseSwgeW91IGNhbiB1c2UgdGhlIGBTdXJ2ZXlNb2RlbGAncyBbYG1heFRpbWVUb0ZpbmlzaFBhZ2VgXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL3N1cnZleW1vZGVsI21heFRpbWVUb0ZpbmlzaFBhZ2UpIHByb3BlcnR5IHRvIHNwZWNpZnkgaWRlbnRpY2FsIHRpbWUgcGVyaW9kcyBmb3IgYWxsIHN1cnZleSBwYWdlcy5cbiAgICAgICAgICogQHNlZSB0aW1lU3BlbnRcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIm1heFRpbWVUb0ZpbmlzaFwiLCAwKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJtYXhUaW1lVG9GaW5pc2hcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFBhZ2VNb2RlbC5wcm90b3R5cGUub25OdW1DaGFuZ2VkID0gZnVuY3Rpb24gKHZhbHVlKSB7IH07XG4gICAgUGFnZU1vZGVsLnByb3RvdHlwZS5vblZpc2libGVDaGFuZ2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5pc1JhbmRvbWl6aW5nKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBfc3VwZXIucHJvdG90eXBlLm9uVmlzaWJsZUNoYW5nZWQuY2FsbCh0aGlzKTtcbiAgICAgICAgaWYgKHRoaXMuc3VydmV5ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuc3VydmV5LnBhZ2VWaXNpYmlsaXR5Q2hhbmdlZCh0aGlzLCB0aGlzLmlzVmlzaWJsZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFBhZ2VNb2RlbC5wcm90b3R5cGUuZ2V0RHJhZ0Ryb3BJbmZvID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5kcmFnRHJvcFBhZ2VIZWxwZXIuZ2V0RHJhZ0Ryb3BJbmZvKCk7IH07XG4gICAgUGFnZU1vZGVsLnByb3RvdHlwZS5kcmFnRHJvcFN0YXJ0ID0gZnVuY3Rpb24gKHNyYywgdGFyZ2V0LCBuZXN0ZWRQYW5lbERlcHRoKSB7XG4gICAgICAgIGlmIChuZXN0ZWRQYW5lbERlcHRoID09PSB2b2lkIDApIHsgbmVzdGVkUGFuZWxEZXB0aCA9IC0xOyB9XG4gICAgICAgIHRoaXMuZHJhZ0Ryb3BQYWdlSGVscGVyLmRyYWdEcm9wU3RhcnQoc3JjLCB0YXJnZXQsIG5lc3RlZFBhbmVsRGVwdGgpO1xuICAgIH07XG4gICAgUGFnZU1vZGVsLnByb3RvdHlwZS5kcmFnRHJvcE1vdmVUbyA9IGZ1bmN0aW9uIChkZXN0aW5hdGlvbiwgaXNCb3R0b20sIGlzRWRnZSkge1xuICAgICAgICBpZiAoaXNCb3R0b20gPT09IHZvaWQgMCkgeyBpc0JvdHRvbSA9IGZhbHNlOyB9XG4gICAgICAgIGlmIChpc0VkZ2UgPT09IHZvaWQgMCkgeyBpc0VkZ2UgPSBmYWxzZTsgfVxuICAgICAgICByZXR1cm4gdGhpcy5kcmFnRHJvcFBhZ2VIZWxwZXIuZHJhZ0Ryb3BNb3ZlVG8oZGVzdGluYXRpb24sIGlzQm90dG9tLCBpc0VkZ2UpO1xuICAgIH07XG4gICAgUGFnZU1vZGVsLnByb3RvdHlwZS5kcmFnRHJvcEZpbmlzaCA9IGZ1bmN0aW9uIChpc0NhbmNlbCkge1xuICAgICAgICBpZiAoaXNDYW5jZWwgPT09IHZvaWQgMCkgeyBpc0NhbmNlbCA9IGZhbHNlOyB9XG4gICAgICAgIHJldHVybiB0aGlzLmRyYWdEcm9wUGFnZUhlbHBlci5kcmFnRHJvcEZpbmlzaChpc0NhbmNlbCk7XG4gICAgfTtcbiAgICBQYWdlTW9kZWwucHJvdG90eXBlLmVuc3VyZVJvd3NWaXNpYmlsaXR5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBfc3VwZXIucHJvdG90eXBlLmVuc3VyZVJvd3NWaXNpYmlsaXR5LmNhbGwodGhpcyk7XG4gICAgICAgIHRoaXMuZ2V0UGFuZWxzKCkuZm9yRWFjaChmdW5jdGlvbiAocGFuZWwpIHsgcmV0dXJuIHBhbmVsLmVuc3VyZVJvd3NWaXNpYmlsaXR5KCk7IH0pO1xuICAgIH07XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicHJvcGVydHlcIl0pKHsgZGVmYXVsdFZhbHVlOiAtMSwgb25TZXQ6IGZ1bmN0aW9uICh2YWwsIHRhcmdldCkgeyByZXR1cm4gdGFyZ2V0Lm9uTnVtQ2hhbmdlZCh2YWwpOyB9IH0pXG4gICAgXSwgUGFnZU1vZGVsLnByb3RvdHlwZSwgXCJudW1cIiwgdm9pZCAwKTtcbiAgICByZXR1cm4gUGFnZU1vZGVsO1xufShfcGFuZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlBhbmVsTW9kZWxCYXNlXCJdKSk7XG5cbl9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJTZXJpYWxpemVyXCJdLmFkZENsYXNzKFwicGFnZVwiLCBbXG4gICAge1xuICAgICAgICBuYW1lOiBcIm5hdmlnYXRpb25CdXR0b25zVmlzaWJpbGl0eVwiLFxuICAgICAgICBkZWZhdWx0OiBcImluaGVyaXRcIixcbiAgICAgICAgY2hvaWNlczogW1wiaW5oZXJpdFwiLCBcInNob3dcIiwgXCJoaWRlXCJdLFxuICAgIH0sXG4gICAgeyBuYW1lOiBcIm1heFRpbWVUb0ZpbmlzaDpudW1iZXJcIiwgZGVmYXVsdDogMCwgbWluVmFsdWU6IDAgfSxcbiAgICB7XG4gICAgICAgIG5hbWU6IFwibmF2aWdhdGlvblRpdGxlXCIsXG4gICAgICAgIHZpc2libGVJZjogZnVuY3Rpb24gKG9iaikge1xuICAgICAgICAgICAgcmV0dXJuICEhb2JqLnN1cnZleSAmJiAob2JqLnN1cnZleS5wcm9ncmVzc0JhclR5cGUgPT09IFwiYnV0dG9uc1wiIHx8IG9iai5zdXJ2ZXkuc2hvd1RPQyk7XG4gICAgICAgIH0sXG4gICAgICAgIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NOYXZpZ2F0aW9uVGl0bGVcIixcbiAgICB9LFxuICAgIHtcbiAgICAgICAgbmFtZTogXCJuYXZpZ2F0aW9uRGVzY3JpcHRpb25cIixcbiAgICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICByZXR1cm4gISFvYmouc3VydmV5ICYmIG9iai5zdXJ2ZXkucHJvZ3Jlc3NCYXJUeXBlID09PSBcImJ1dHRvbnNcIjtcbiAgICAgICAgfSxcbiAgICAgICAgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY05hdmlnYXRpb25EZXNjcmlwdGlvblwiLFxuICAgIH0sXG4gICAgeyBuYW1lOiBcInRpdGxlOnRleHRcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1RpdGxlXCIgfSxcbiAgICB7IG5hbWU6IFwiZGVzY3JpcHRpb246dGV4dFwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jRGVzY3JpcHRpb25cIiB9LFxuXSwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgUGFnZU1vZGVsKCk7XG59LCBcInBhbmVsYmFzZVwiKTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9wYW5lbC50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9wYW5lbC50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBRdWVzdGlvblJvd01vZGVsLCBQYW5lbE1vZGVsQmFzZSwgUGFuZWxNb2RlbCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJRdWVzdGlvblJvd01vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUXVlc3Rpb25Sb3dNb2RlbDsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUGFuZWxNb2RlbEJhc2VcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBQYW5lbE1vZGVsQmFzZTsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUGFuZWxNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFBhbmVsTW9kZWw7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2pzb25vYmplY3QgKi8gXCIuL3NyYy9qc29ub2JqZWN0LnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9oZWxwZXJzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2hlbHBlcnMgKi8gXCIuL3NyYy9oZWxwZXJzLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9iYXNlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2Jhc2UgKi8gXCIuL3NyYy9iYXNlLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zdXJ2ZXlfZWxlbWVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9zdXJ2ZXktZWxlbWVudCAqLyBcIi4vc3JjL3N1cnZleS1lbGVtZW50LnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9xdWVzdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9xdWVzdGlvbiAqLyBcIi4vc3JjL3F1ZXN0aW9uLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9xdWVzdGlvbmZhY3RvcnlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcXVlc3Rpb25mYWN0b3J5ICovIFwiLi9zcmMvcXVlc3Rpb25mYWN0b3J5LnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9lcnJvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9lcnJvciAqLyBcIi4vc3JjL2Vycm9yLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9zZXR0aW5ncyAqLyBcIi4vc3JjL3NldHRpbmdzLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF91dGlsc191dGlsc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi91dGlscy91dGlscyAqLyBcIi4vc3JjL3V0aWxzL3V0aWxzLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF91dGlsc19jc3NDbGFzc0J1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vdXRpbHMvY3NzQ2xhc3NCdWlsZGVyICovIFwiLi9zcmMvdXRpbHMvY3NzQ2xhc3NCdWlsZGVyLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9kcmFnX2Ryb3BfcGFuZWxfaGVscGVyX3YxX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9kcmFnLWRyb3AtcGFuZWwtaGVscGVyLXYxICovIFwiLi9zcmMvZHJhZy1kcm9wLXBhbmVsLWhlbHBlci12MS50c1wiKTtcbnZhciBfX2V4dGVuZHMgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xudmFyIF9fZGVjb3JhdGUgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufTtcblxuXG5cblxuXG5cblxuXG5cblxuXG52YXIgUXVlc3Rpb25Sb3dNb2RlbCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoUXVlc3Rpb25Sb3dNb2RlbCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBRdWVzdGlvblJvd01vZGVsKHBhbmVsKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLnBhbmVsID0gcGFuZWw7XG4gICAgICAgIF90aGlzLl9zY3JvbGxhYmxlUGFyZW50ID0gdW5kZWZpbmVkO1xuICAgICAgICBfdGhpcy5fdXBkYXRlVmlzaWJpbGl0eSA9IHVuZGVmaW5lZDtcbiAgICAgICAgX3RoaXMuaWRWYWx1ZSA9IFF1ZXN0aW9uUm93TW9kZWwuZ2V0Um93SWQoKTtcbiAgICAgICAgX3RoaXMudmlzaWJsZSA9IHBhbmVsLmFyZUludmlzaWJsZUVsZW1lbnRzU2hvd2luZztcbiAgICAgICAgX3RoaXMuY3JlYXRlTmV3QXJyYXkoXCJlbGVtZW50c1wiKTtcbiAgICAgICAgX3RoaXMuY3JlYXRlTmV3QXJyYXkoXCJ2aXNpYmxlRWxlbWVudHNcIik7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgUXVlc3Rpb25Sb3dNb2RlbC5nZXRSb3dJZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIFwicHJfXCIgKyBRdWVzdGlvblJvd01vZGVsLnJvd0NvdW50ZXIrKztcbiAgICB9O1xuICAgIFF1ZXN0aW9uUm93TW9kZWwucHJvdG90eXBlLnN0YXJ0TGF6eVJlbmRlcmluZyA9IGZ1bmN0aW9uIChyb3dDb250YWluZXJEaXYsIGZpbmRTY3JvbGxhYmxlQ29udGFpbmVyKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGlmIChmaW5kU2Nyb2xsYWJsZUNvbnRhaW5lciA9PT0gdm9pZCAwKSB7IGZpbmRTY3JvbGxhYmxlQ29udGFpbmVyID0gX3V0aWxzX3V0aWxzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bXCJmaW5kU2Nyb2xsYWJsZVBhcmVudFwiXTsgfVxuICAgICAgICB0aGlzLl9zY3JvbGxhYmxlUGFyZW50ID0gZmluZFNjcm9sbGFibGVDb250YWluZXIocm93Q29udGFpbmVyRGl2KTtcbiAgICAgICAgLy8gaWYgIHRoaXMuX3Njcm9sbGFibGVQYXJlbnQgaXMgaHRtbCB0aGUgc2Nyb2xsIGV2ZW50IGlzbid0IGZpcmVkLCBzbyB3ZSBzaG91bGQgdXNlIHdpbmRvd1xuICAgICAgICBpZiAodGhpcy5fc2Nyb2xsYWJsZVBhcmVudCA9PT0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLl9zY3JvbGxhYmxlUGFyZW50ID0gd2luZG93O1xuICAgICAgICB9XG4gICAgICAgIHZhciBoYXNTY3JvbGwgPSB0aGlzLl9zY3JvbGxhYmxlUGFyZW50LnNjcm9sbEhlaWdodCA+IHRoaXMuX3Njcm9sbGFibGVQYXJlbnQuY2xpZW50SGVpZ2h0O1xuICAgICAgICB0aGlzLmlzTmVlZFJlbmRlciA9ICFoYXNTY3JvbGw7XG4gICAgICAgIGlmIChoYXNTY3JvbGwpIHtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVZpc2liaWxpdHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGlzUm93Q29udGFpbmVyRGl2VmlzaWJsZSA9IE9iamVjdChfdXRpbHNfdXRpbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1tcImlzRWxlbWVudFZpc2libGVcIl0pKHJvd0NvbnRhaW5lckRpdiwgNTApO1xuICAgICAgICAgICAgICAgIGlmICghX3RoaXMuaXNOZWVkUmVuZGVyICYmIGlzUm93Q29udGFpbmVyRGl2VmlzaWJsZSkge1xuICAgICAgICAgICAgICAgICAgICBfdGhpcy5pc05lZWRSZW5kZXIgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBfdGhpcy5zdG9wTGF6eVJlbmRlcmluZygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoISFfdGhpcy5fc2Nyb2xsYWJsZVBhcmVudCAmJlxuICAgICAgICAgICAgICAgICAgICAhIV90aGlzLl9zY3JvbGxhYmxlUGFyZW50LmFkZEV2ZW50TGlzdGVuZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3Njcm9sbGFibGVQYXJlbnQuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCBfdGhpcy5fdXBkYXRlVmlzaWJpbGl0eSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF90aGlzLmVuc3VyZVZpc2liaWxpdHkoKTtcbiAgICAgICAgICAgIH0sIDEwKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgUXVlc3Rpb25Sb3dNb2RlbC5wcm90b3R5cGUuZW5zdXJlVmlzaWJpbGl0eSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCEhdGhpcy5fdXBkYXRlVmlzaWJpbGl0eSkge1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlVmlzaWJpbGl0eSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBRdWVzdGlvblJvd01vZGVsLnByb3RvdHlwZS5zdG9wTGF6eVJlbmRlcmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCEhdGhpcy5fc2Nyb2xsYWJsZVBhcmVudCAmJlxuICAgICAgICAgICAgISF0aGlzLl91cGRhdGVWaXNpYmlsaXR5ICYmXG4gICAgICAgICAgICAhIXRoaXMuX3Njcm9sbGFibGVQYXJlbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcikge1xuICAgICAgICAgICAgdGhpcy5fc2Nyb2xsYWJsZVBhcmVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIHRoaXMuX3VwZGF0ZVZpc2liaWxpdHkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3Njcm9sbGFibGVQYXJlbnQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuX3VwZGF0ZVZpc2liaWxpdHkgPSB1bmRlZmluZWQ7XG4gICAgfTtcbiAgICBRdWVzdGlvblJvd01vZGVsLnByb3RvdHlwZS5zZXRJc0xhenlSZW5kZXJpbmcgPSBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgIHRoaXMuaXNMYXp5UmVuZGVyaW5nVmFsdWUgPSB2YWw7XG4gICAgICAgIHRoaXMuaXNOZWVkUmVuZGVyID0gIXZhbDtcbiAgICB9O1xuICAgIFF1ZXN0aW9uUm93TW9kZWwucHJvdG90eXBlLmlzTGF6eVJlbmRlcmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNMYXp5UmVuZGVyaW5nVmFsdWUgPT09IHRydWU7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25Sb3dNb2RlbC5wcm90b3R5cGUsIFwiaWRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlkVmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25Sb3dNb2RlbC5wcm90b3R5cGUsIFwiZWxlbWVudHNcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJlbGVtZW50c1wiKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblJvd01vZGVsLnByb3RvdHlwZSwgXCJ2aXNpYmxlRWxlbWVudHNcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ2aXNpYmxlRWxlbWVudHNcIik7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25Sb3dNb2RlbC5wcm90b3R5cGUsIFwidmlzaWJsZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInZpc2libGVcIiwgdHJ1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidmlzaWJsZVwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uUm93TW9kZWwucHJvdG90eXBlLCBcImlzTmVlZFJlbmRlclwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImlzbmVlZHJlbmRlclwiLCB0cnVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpc25lZWRyZW5kZXJcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFF1ZXN0aW9uUm93TW9kZWwucHJvdG90eXBlLnVwZGF0ZVZpc2libGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBpc1Zpc2libGUgPSB0aGlzLmNhbGNWaXNpYmxlKCk7XG4gICAgICAgIHRoaXMuc2V0V2lkdGgoKTtcbiAgICAgICAgdGhpcy52aXNpYmxlID0gaXNWaXNpYmxlO1xuICAgIH07XG4gICAgUXVlc3Rpb25Sb3dNb2RlbC5wcm90b3R5cGUuYWRkRWxlbWVudCA9IGZ1bmN0aW9uIChxKSB7XG4gICAgICAgIHRoaXMuZWxlbWVudHMucHVzaChxKTtcbiAgICAgICAgdGhpcy51cGRhdGVWaXNpYmxlKCk7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25Sb3dNb2RlbC5wcm90b3R5cGUsIFwiaW5kZXhcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhbmVsLnJvd3MuaW5kZXhPZih0aGlzKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFF1ZXN0aW9uUm93TW9kZWwucHJvdG90eXBlLnNldFdpZHRoID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHZhciB2aXNDb3VudCA9IHRoaXMudmlzaWJsZUVsZW1lbnRzLmxlbmd0aDtcbiAgICAgICAgaWYgKHZpc0NvdW50ID09IDApXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciBpc1NpbmdsZUluUm93ID0gdGhpcy52aXNpYmxlRWxlbWVudHMubGVuZ3RoID09PSAxO1xuICAgICAgICB2YXIgY291bnRlciA9IDA7XG4gICAgICAgIHZhciBwcmVTZXRXaWR0aEVsZW1lbnRzID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGVsID0gdGhpcy5lbGVtZW50c1tpXTtcbiAgICAgICAgICAgIGlmIChlbC5pc1Zpc2libGUpIHtcbiAgICAgICAgICAgICAgICBlbC5pc1NpbmdsZUluUm93ID0gaXNTaW5nbGVJblJvdztcbiAgICAgICAgICAgICAgICB2YXIgd2lkdGggPSB0aGlzLmdldEVsZW1lbnRXaWR0aChlbCk7XG4gICAgICAgICAgICAgICAgaWYgKCEhd2lkdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgZWwucmVuZGVyV2lkdGggPSB0aGlzLmdldFJlbmRlcmVkV2lkdGhGcm9tV2lkdGgod2lkdGgpO1xuICAgICAgICAgICAgICAgICAgICBwcmVTZXRXaWR0aEVsZW1lbnRzLnB1c2goZWwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoY291bnRlciA8IHZpc0NvdW50IC0gMSAmJiAhKHRoaXMucGFuZWwuaXNEZWZhdWx0VjJUaGVtZSB8fCAoKF9hID0gdGhpcy5wYW5lbC5wYXJlbnRRdWVzdGlvbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmlzRGVmYXVsdFYyVGhlbWUpKSkge1xuICAgICAgICAgICAgICAgICAgICBlbC5yaWdodEluZGVudCA9IDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlbC5yaWdodEluZGVudCA9IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvdW50ZXIrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGVsLnJlbmRlcldpZHRoID0gXCJcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBlbCA9IHRoaXMuZWxlbWVudHNbaV07XG4gICAgICAgICAgICBpZiAoIWVsLmlzVmlzaWJsZSB8fCBwcmVTZXRXaWR0aEVsZW1lbnRzLmluZGV4T2YoZWwpID4gLTEpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBpZiAocHJlU2V0V2lkdGhFbGVtZW50cy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgICAgIGVsLnJlbmRlcldpZHRoID0gTnVtYmVyLnBhcnNlRmxvYXQoKDEwMCAvIHZpc0NvdW50KS50b0ZpeGVkKDYpKSArIFwiJVwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZWwucmVuZGVyV2lkdGggPSB0aGlzLmdldFJlbmRlcmVkQ2FsY1dpZHRoKGVsLCBwcmVTZXRXaWR0aEVsZW1lbnRzLCB2aXNDb3VudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFF1ZXN0aW9uUm93TW9kZWwucHJvdG90eXBlLmdldFJlbmRlcmVkQ2FsY1dpZHRoID0gZnVuY3Rpb24gKGVsLCBwcmVTZXRXaWR0aEVsZW1lbnRzLCB2aXNDb3VudCkge1xuICAgICAgICB2YXIgZXhwcmVzc2lvbiA9IFwiMTAwJVwiO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByZVNldFdpZHRoRWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGV4cHJlc3Npb24gKz0gXCIgLSBcIiArIHByZVNldFdpZHRoRWxlbWVudHNbaV0ucmVuZGVyV2lkdGg7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNhbGNXaWR0aEVsID0gdmlzQ291bnQgLSBwcmVTZXRXaWR0aEVsZW1lbnRzLmxlbmd0aDtcbiAgICAgICAgaWYgKGNhbGNXaWR0aEVsID4gMSkge1xuICAgICAgICAgICAgZXhwcmVzc2lvbiA9IFwiKFwiICsgZXhwcmVzc2lvbiArIFwiKS9cIiArIGNhbGNXaWR0aEVsLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFwiY2FsYyhcIiArIGV4cHJlc3Npb24gKyBcIilcIjtcbiAgICB9O1xuICAgIFF1ZXN0aW9uUm93TW9kZWwucHJvdG90eXBlLmdldEVsZW1lbnRXaWR0aCA9IGZ1bmN0aW9uIChlbCkge1xuICAgICAgICB2YXIgd2lkdGggPSBlbC53aWR0aDtcbiAgICAgICAgaWYgKCF3aWR0aCB8fCB0eXBlb2Ygd2lkdGggIT09IFwic3RyaW5nXCIpXG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgcmV0dXJuIHdpZHRoLnRyaW0oKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uUm93TW9kZWwucHJvdG90eXBlLmdldFJlbmRlcmVkV2lkdGhGcm9tV2lkdGggPSBmdW5jdGlvbiAod2lkdGgpIHtcbiAgICAgICAgcmV0dXJuIF9oZWxwZXJzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJIZWxwZXJzXCJdLmlzTnVtYmVyKHdpZHRoKSA/IHdpZHRoICsgXCJweFwiIDogd2lkdGg7XG4gICAgfTtcbiAgICBRdWVzdGlvblJvd01vZGVsLnByb3RvdHlwZS5jYWxjVmlzaWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHZpc0VsZW1lbnRzID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRoaXMuZWxlbWVudHNbaV0uaXNWaXNpYmxlKSB7XG4gICAgICAgICAgICAgICAgdmlzRWxlbWVudHMucHVzaCh0aGlzLmVsZW1lbnRzW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5uZWVkVG9VcGRhdGVWaXNpYmxlRWxlbWVudHModmlzRWxlbWVudHMpKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJ2aXNpYmxlRWxlbWVudHNcIiwgdmlzRWxlbWVudHMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2aXNFbGVtZW50cy5sZW5ndGggPiAwO1xuICAgIH07XG4gICAgUXVlc3Rpb25Sb3dNb2RlbC5wcm90b3R5cGUubmVlZFRvVXBkYXRlVmlzaWJsZUVsZW1lbnRzID0gZnVuY3Rpb24gKHZpc0VsZW1lbnRzKSB7XG4gICAgICAgIGlmICh2aXNFbGVtZW50cy5sZW5ndGggIT09IHRoaXMudmlzaWJsZUVsZW1lbnRzLmxlbmd0aClcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZpc0VsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAodmlzRWxlbWVudHNbaV0gIT09IHRoaXMudmlzaWJsZUVsZW1lbnRzW2ldKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uUm93TW9kZWwucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuICAgICAgICB0aGlzLnN0b3BMYXp5UmVuZGVyaW5nKCk7XG4gICAgfTtcbiAgICBRdWVzdGlvblJvd01vZGVsLnByb3RvdHlwZS5nZXRSb3dDc3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBuZXcgX3V0aWxzX2Nzc0NsYXNzQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fW1wiQ3NzQ2xhc3NCdWlsZGVyXCJdKClcbiAgICAgICAgICAgIC5hcHBlbmQodGhpcy5wYW5lbC5jc3NDbGFzc2VzLnJvdylcbiAgICAgICAgICAgIC5hcHBlbmQodGhpcy5wYW5lbC5jc3NDbGFzc2VzLnJvd0NvbXBhY3QsIHRoaXMucGFuZWxbXCJpc0NvbXBhY3RcIl0pXG4gICAgICAgICAgICAuYXBwZW5kKHRoaXMucGFuZWwuY3NzQ2xhc3Nlcy5wYWdlUm93LCB0aGlzLnBhbmVsLmlzUGFnZSB8fCAoISF0aGlzLnBhbmVsLm9yaWdpbmFsUGFnZSAmJiAhdGhpcy5wYW5lbC5zdXJ2ZXkuaXNTaG93aW5nUHJldmlldykpXG4gICAgICAgICAgICAuYXBwZW5kKHRoaXMucGFuZWwuY3NzQ2xhc3Nlcy5yb3dNdWx0aXBsZSwgdGhpcy52aXNpYmxlRWxlbWVudHMubGVuZ3RoID4gMSlcbiAgICAgICAgICAgIC50b1N0cmluZygpO1xuICAgIH07XG4gICAgUXVlc3Rpb25Sb3dNb2RlbC5yb3dDb3VudGVyID0gMTAwO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QoX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInByb3BlcnR5XCJdKSh7IGRlZmF1bHRWYWx1ZTogbnVsbCB9KVxuICAgIF0sIFF1ZXN0aW9uUm93TW9kZWwucHJvdG90eXBlLCBcImRyYWdUeXBlT3Zlck1lXCIsIHZvaWQgMCk7XG4gICAgcmV0dXJuIFF1ZXN0aW9uUm93TW9kZWw7XG59KF9iYXNlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJCYXNlXCJdKSk7XG5cbi8qKlxuICogQSBiYXNlIGNsYXNzIGZvciB0aGUgW1BhbmVsTW9kZWxdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vcGFuZWxtb2RlbCkgYW5kIFtQYWdlTW9kZWxdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vcGFnZW1vZGVsKSBjbGFzc2VzLlxuICovXG52YXIgUGFuZWxNb2RlbEJhc2UgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFBhbmVsTW9kZWxCYXNlLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFBhbmVsTW9kZWxCYXNlKG5hbWUpIHtcbiAgICAgICAgaWYgKG5hbWUgPT09IHZvaWQgMCkgeyBuYW1lID0gXCJcIjsgfVxuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBuYW1lKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5pc1F1ZXN0aW9uc1JlYWR5ID0gZmFsc2U7XG4gICAgICAgIF90aGlzLnF1ZXN0aW9uc1ZhbHVlID0gbmV3IEFycmF5KCk7XG4gICAgICAgIF90aGlzLmlzUmFuZG9taXppbmcgPSBmYWxzZTtcbiAgICAgICAgX3RoaXMuY3JlYXRlTmV3QXJyYXkoXCJyb3dzXCIpO1xuICAgICAgICBfdGhpcy5lbGVtZW50c1ZhbHVlID0gX3RoaXMuY3JlYXRlTmV3QXJyYXkoXCJlbGVtZW50c1wiLCBfdGhpcy5vbkFkZEVsZW1lbnQuYmluZChfdGhpcyksIF90aGlzLm9uUmVtb3ZlRWxlbWVudC5iaW5kKF90aGlzKSk7XG4gICAgICAgIF90aGlzLmlkID0gUGFuZWxNb2RlbEJhc2UuZ2V0UGFuZWxJZCgpO1xuICAgICAgICBfdGhpcy5hZGRFeHByZXNzaW9uUHJvcGVydHkoXCJ2aXNpYmxlSWZcIiwgZnVuY3Rpb24gKG9iaiwgcmVzKSB7IF90aGlzLnZpc2libGUgPSByZXMgPT09IHRydWU7IH0sIGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuICFfdGhpcy5hcmVJbnZpc2libGVFbGVtZW50c1Nob3dpbmc7IH0pO1xuICAgICAgICBfdGhpcy5hZGRFeHByZXNzaW9uUHJvcGVydHkoXCJlbmFibGVJZlwiLCBmdW5jdGlvbiAob2JqLCByZXMpIHsgX3RoaXMucmVhZE9ubHkgPSByZXMgPT09IGZhbHNlOyB9KTtcbiAgICAgICAgX3RoaXMuYWRkRXhwcmVzc2lvblByb3BlcnR5KFwicmVxdWlyZWRJZlwiLCBmdW5jdGlvbiAob2JqLCByZXMpIHsgX3RoaXMuaXNSZXF1aXJlZCA9IHJlcyA9PT0gdHJ1ZTsgfSk7XG4gICAgICAgIF90aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwicmVxdWlyZWRFcnJvclRleHRcIiwgX3RoaXMpO1xuICAgICAgICBfdGhpcy5yZWdpc3RlclByb3BlcnR5Q2hhbmdlZEhhbmRsZXJzKFtcInF1ZXN0aW9uVGl0bGVMb2NhdGlvblwiXSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMub25WaXNpYmxlQ2hhbmdlZC5iaW5kKF90aGlzKTtcbiAgICAgICAgICAgIF90aGlzLnVwZGF0ZUVsZW1lbnRDc3ModHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBfdGhpcy5yZWdpc3RlclByb3BlcnR5Q2hhbmdlZEhhbmRsZXJzKFtcInF1ZXN0aW9uU3RhcnRJbmRleFwiLCBcInNob3dRdWVzdGlvbk51bWJlcnNcIl0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLnVwZGF0ZVZpc2libGVJbmRleGVzKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBfdGhpcy5kcmFnRHJvcFBhbmVsSGVscGVyID0gbmV3IF9kcmFnX2Ryb3BfcGFuZWxfaGVscGVyX3YxX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fW1wiRHJhZ0Ryb3BQYW5lbEhlbHBlclYxXCJdKF90aGlzKTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBQYW5lbE1vZGVsQmFzZS5nZXRQYW5lbElkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gXCJzcF9cIiArIFBhbmVsTW9kZWxCYXNlLnBhbmVsQ291bnRlcisrO1xuICAgIH07XG4gICAgUGFuZWxNb2RlbEJhc2UucHJvdG90eXBlLmdldFR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBcInBhbmVsYmFzZVwiO1xuICAgIH07XG4gICAgUGFuZWxNb2RlbEJhc2UucHJvdG90eXBlLnNldFN1cnZleUltcGwgPSBmdW5jdGlvbiAodmFsdWUsIGlzTGlnaHQpIHtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5zZXRTdXJ2ZXlJbXBsLmNhbGwodGhpcywgdmFsdWUsIGlzTGlnaHQpO1xuICAgICAgICBpZiAodGhpcy5pc0Rlc2lnbk1vZGUpXG4gICAgICAgICAgICB0aGlzLm9uVmlzaWJsZUNoYW5nZWQoKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnRzW2ldLnNldFN1cnZleUltcGwodmFsdWUsIGlzTGlnaHQpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBQYW5lbE1vZGVsQmFzZS5wcm90b3R5cGUuZW5kTG9hZGluZ0Zyb21Kc29uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBfc3VwZXIucHJvdG90eXBlLmVuZExvYWRpbmdGcm9tSnNvbi5jYWxsKHRoaXMpO1xuICAgICAgICB0aGlzLnVwZGF0ZURlc2NyaXB0aW9uVmlzaWJpbGl0eSh0aGlzLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgdGhpcy5tYXJrUXVlc3Rpb25MaXN0RGlydHkoKTtcbiAgICAgICAgdGhpcy5vblJvd3NDaGFuZ2VkKCk7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUGFuZWxNb2RlbEJhc2UucHJvdG90eXBlLCBcImhhc1RpdGxlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gKCh0aGlzLmNhblNob3dUaXRsZSgpICYmIHRoaXMubG9jVGl0bGUudGV4dE9ySHRtbC5sZW5ndGggPiAwKSB8fFxuICAgICAgICAgICAgICAgICh0aGlzLnNob3dUaXRsZSAmJiB0aGlzLmlzRGVzaWduTW9kZSAmJiBfc2V0dGluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1tcInNldHRpbmdzXCJdLmRlc2lnbk1vZGUuc2hvd0VtcHR5VGl0bGVzKSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBQYW5lbE1vZGVsQmFzZS5wcm90b3R5cGUuZGVsZXRlID0gZnVuY3Rpb24gKGRvRGlzcG9zZSkge1xuICAgICAgICBpZiAoZG9EaXNwb3NlID09PSB2b2lkIDApIHsgZG9EaXNwb3NlID0gdHJ1ZTsgfVxuICAgICAgICB0aGlzLnJlbW92ZUZyb21QYXJlbnQoKTtcbiAgICAgICAgaWYgKGRvRGlzcG9zZSkge1xuICAgICAgICAgICAgdGhpcy5kaXNwb3NlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFBhbmVsTW9kZWxCYXNlLnByb3RvdHlwZS5yZW1vdmVGcm9tUGFyZW50ID0gZnVuY3Rpb24gKCkgeyB9O1xuICAgIFBhbmVsTW9kZWxCYXNlLnByb3RvdHlwZS5jYW5TaG93VGl0bGUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0cnVlOyB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQYW5lbE1vZGVsQmFzZS5wcm90b3R5cGUsIFwiX3Nob3dEZXNjcmlwdGlvblwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmhhc1RpdGxlICYmIHRoaXMuaXNEZXNpZ25Nb2RlKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN1cnZleSAmJiB0aGlzLnN1cnZleS5zaG93UGFnZVRpdGxlcyAmJiB0aGlzLmhhc0Rlc2NyaXB0aW9uIHx8XG4gICAgICAgICAgICAgICAgKHRoaXMuc2hvd0Rlc2NyaXB0aW9uICYmIHRoaXMuaXNEZXNpZ25Nb2RlICYmXG4gICAgICAgICAgICAgICAgICAgIF9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fW1wic2V0dGluZ3NcIl0uZGVzaWduTW9kZS5zaG93RW1wdHlEZXNjcmlwdGlvbnMpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUGFuZWxNb2RlbEJhc2UucHJvdG90eXBlLmxvY2FsZUNoYW5nZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUubG9jYWxlQ2hhbmdlZC5jYWxsKHRoaXMpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudHNbaV0ubG9jYWxlQ2hhbmdlZCgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBQYW5lbE1vZGVsQmFzZS5wcm90b3R5cGUubG9jU3Ryc0NoYW5nZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUubG9jU3Ryc0NoYW5nZWQuY2FsbCh0aGlzKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnRzW2ldLmxvY1N0cnNDaGFuZ2VkKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQYW5lbE1vZGVsQmFzZS5wcm90b3R5cGUsIFwicmVuZGVyZWROYXZpZ2F0aW9uVGl0bGVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpdGxlIHx8IHRoaXMubmFtZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQYW5lbE1vZGVsQmFzZS5wcm90b3R5cGUsIFwicmVxdWlyZWRUZXh0XCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgYSBjaGFyYWN0ZXIgb3IgdGV4dCBzdHJpbmcgdGhhdCBpbmRpY2F0ZXMgYSByZXF1aXJlZCBwYW5lbC9wYWdlLlxuICAgICAgICAgKiBAc2VlIFN1cnZleU1vZGVsLnJlcXVpcmVkVGV4dFxuICAgICAgICAgKiBAc2VlIGlzUmVxdWlyZWRcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuICEhdGhpcy5zdXJ2ZXkgJiYgdGhpcy5pc1JlcXVpcmVkXG4gICAgICAgICAgICAgICAgPyB0aGlzLnN1cnZleS5yZXF1aXJlZFRleHRcbiAgICAgICAgICAgICAgICA6IFwiXCI7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUGFuZWxNb2RlbEJhc2UucHJvdG90eXBlLCBcInRpdGxlUGF0dGVyblwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuICEhdGhpcy5zdXJ2ZXkgPyB0aGlzLnN1cnZleS5xdWVzdGlvblRpdGxlUGF0dGVybiA6IFwibnVtVGl0bGVSZXF1aXJlXCI7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUGFuZWxNb2RlbEJhc2UucHJvdG90eXBlLCBcImlzUmVxdWlyZVRleHRPblN0YXJ0XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pc1JlcXVpcmVkICYmIHRoaXMudGl0bGVQYXR0ZXJuID09IFwicmVxdWlyZU51bVRpdGxlXCI7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUGFuZWxNb2RlbEJhc2UucHJvdG90eXBlLCBcImlzUmVxdWlyZVRleHRCZWZvcmVUaXRsZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNSZXF1aXJlZCAmJiB0aGlzLnRpdGxlUGF0dGVybiA9PSBcIm51bVJlcXVpcmVUaXRsZVwiO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBhbmVsTW9kZWxCYXNlLnByb3RvdHlwZSwgXCJpc1JlcXVpcmVUZXh0QWZ0ZXJUaXRsZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNSZXF1aXJlZCAmJiB0aGlzLnRpdGxlUGF0dGVybiA9PSBcIm51bVRpdGxlUmVxdWlyZVwiO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBhbmVsTW9kZWxCYXNlLnByb3RvdHlwZSwgXCJyZXF1aXJlZEVycm9yVGV4dFwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgYSBjdXN0b20gZXJyb3IgbWVzc2FnZSBmb3IgYSByZXF1aXJlZCBwYW5lbC9wYWdlLlxuICAgICAgICAgKiBAc2VlIGlzUmVxdWlyZWRcbiAgICAgICAgICogQHNlZSByZXF1aXJlZElmXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcInJlcXVpcmVkRXJyb3JUZXh0XCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwicmVxdWlyZWRFcnJvclRleHRcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQYW5lbE1vZGVsQmFzZS5wcm90b3R5cGUsIFwibG9jUmVxdWlyZWRFcnJvclRleHRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwicmVxdWlyZWRFcnJvclRleHRcIik7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUGFuZWxNb2RlbEJhc2UucHJvdG90eXBlLCBcInF1ZXN0aW9uc09yZGVyXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB0aGUgc29ydCBvcmRlciBvZiBxdWVzdGlvbnMgaW4gdGhlIHBhbmVsL3BhZ2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIFBvc3NpYmxlIHZhbHVlczpcbiAgICAgICAgICpcbiAgICAgICAgICogLSBgXCJpbml0aWFsXCJgIC0gUHJlc2VydmVzIHRoZSBvcmlnaW5hbCBvcmRlciBvZiBxdWVzdGlvbnMuXG4gICAgICAgICAqIC0gYFwicmFuZG9tXCJgIC0gRGlzcGxheXMgcXVlc3Rpb25zIGluIHJhbmRvbSBvcmRlci5cbiAgICAgICAgICogLSBgXCJkZWZhdWx0XCJgIChkZWZhdWx0KSAtIEluaGVyaXRzIHRoZSBzZXR0aW5nIGZyb20gdGhlIFN1cnZleSdzIGBxdWVzdGlvbnNPcmRlcmAgcHJvcGVydHkuXG4gICAgICAgICAqIEBzZWUgU3VydmV5TW9kZWwucXVlc3Rpb25zT3JkZXJcbiAgICAgICAgICogQHNlZSBhcmVRdWVzdGlvbnNSYW5kb21pemVkXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJxdWVzdGlvbnNPcmRlclwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJxdWVzdGlvbnNPcmRlclwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUGFuZWxNb2RlbEJhc2UucHJvdG90eXBlLmNhblJhbmRvbWl6ZSA9IGZ1bmN0aW9uIChpc1JhbmRvbSkge1xuICAgICAgICByZXR1cm4gaXNSYW5kb20gJiYgKHRoaXMucXVlc3Rpb25zT3JkZXIgIT09IFwiaW5pdGlhbFwiKSB8fCB0aGlzLnF1ZXN0aW9uc09yZGVyID09PSBcInJhbmRvbVwiO1xuICAgIH07XG4gICAgUGFuZWxNb2RlbEJhc2UucHJvdG90eXBlLnJhbmRvbWl6ZUVsZW1lbnRzID0gZnVuY3Rpb24gKGlzUmFuZG9tKSB7XG4gICAgICAgIGlmICghdGhpcy5jYW5SYW5kb21pemUoaXNSYW5kb20pIHx8IHRoaXMuaXNSYW5kb21pemluZylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5pc1JhbmRvbWl6aW5nID0gdHJ1ZTtcbiAgICAgICAgdmFyIG9sZEVsZW1lbnRzID0gW107XG4gICAgICAgIHZhciBlbGVtZW50cyA9IHRoaXMuZWxlbWVudHM7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIG9sZEVsZW1lbnRzLnB1c2goZWxlbWVudHNbaV0pO1xuICAgICAgICB9XG4gICAgICAgIHZhciBuZXdFbGVtZW50cyA9IF9oZWxwZXJzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJIZWxwZXJzXCJdLnJhbmRvbWl6ZUFycmF5KG9sZEVsZW1lbnRzKTtcbiAgICAgICAgdGhpcy5zZXRBcnJheVByb3BlcnR5RGlyZWN0bHkoXCJlbGVtZW50c1wiLCBuZXdFbGVtZW50cywgZmFsc2UpO1xuICAgICAgICB0aGlzLnVwZGF0ZVJvd3MoKTtcbiAgICAgICAgdGhpcy51cGRhdGVWaXNpYmxlSW5kZXhlcygpO1xuICAgICAgICB0aGlzLmlzUmFuZG9taXppbmcgPSBmYWxzZTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQYW5lbE1vZGVsQmFzZS5wcm90b3R5cGUsIFwiYXJlUXVlc3Rpb25zUmFuZG9taXplZFwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIGB0cnVlYCBpZiBlbGVtZW50cyBpbiB0aGlzIHBhbmVsL3BhZ2UgYXJlIGFycmFuZ2VkIGluIHJhbmRvbSBvcmRlci5cbiAgICAgICAgICogQHNlZSBxdWVzdGlvbnNPcmRlclxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgb3JkZXIgPSB0aGlzLnF1ZXN0aW9uc09yZGVyID09IFwiZGVmYXVsdFwiICYmIHRoaXMuc3VydmV5XG4gICAgICAgICAgICAgICAgPyB0aGlzLnN1cnZleS5xdWVzdGlvbnNPcmRlclxuICAgICAgICAgICAgICAgIDogdGhpcy5xdWVzdGlvbnNPcmRlcjtcbiAgICAgICAgICAgIHJldHVybiBvcmRlciA9PSBcInJhbmRvbVwiO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBhbmVsTW9kZWxCYXNlLnByb3RvdHlwZSwgXCJwYXJlbnRcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJucyBhIHN1cnZleSBlbGVtZW50IChwYW5lbCBvciBwYWdlKSB0aGF0IGNvbnRhaW5zIHRoaXMgcGFuZWwgYW5kIGFsbG93cyB5b3UgdG8gbW92ZSB0aGlzIHF1ZXN0aW9uIHRvIGEgZGlmZmVyZW50IHN1cnZleSBlbGVtZW50LlxuICAgICAgICAgKlxuICAgICAgICAgKiBUaGlzIHByb3BlcnR5IGlzIGFsd2F5cyBgbnVsbGAgZm9yIHRoZSBgUGFnZU1vZGVsYCBvYmplY3QuXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJwYXJlbnRcIiwgbnVsbCk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicGFyZW50XCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUGFuZWxNb2RlbEJhc2UucHJvdG90eXBlLCBcImRlcHRoXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wYXJlbnQgPT0gbnVsbClcbiAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcmVudC5kZXB0aCArIDE7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUGFuZWxNb2RlbEJhc2UucHJvdG90eXBlLCBcInZpc2libGVJZlwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBIEJvb2xlYW4gZXhwcmVzc2lvbi4gSWYgaXQgZXZhbHVhdGVzIHRvIGBmYWxzZWAsIHRoaXMgcGFuZWwvcGFnZSBiZWNvbWVzIGhpZGRlbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQSBzdXJ2ZXkgcGFyc2VzIGFuZCBydW5zIGFsbCBleHByZXNzaW9ucyBvbiBzdGFydHVwLiBJZiBhbnkgdmFsdWVzIHVzZWQgaW4gdGhlIGV4cHJlc3Npb24gY2hhbmdlLCB0aGUgc3VydmV5IHJlLWV2YWx1YXRlcyBpdC5cbiAgICAgICAgICpcbiAgICAgICAgICogUmVmZXIgdG8gdGhlIGZvbGxvd2luZyBoZWxwIHRvcGljIGZvciBtb3JlIGluZm9ybWF0aW9uOiBbQ29uZGl0aW9uYWwgVmlzaWJpbGl0eV0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9kZXNpZ24tc3VydmV5LWNvbmRpdGlvbmFsLWxvZ2ljI2NvbmRpdGlvbmFsLXZpc2liaWxpdHkpXG4gICAgICAgICAqIEBzZWUgdmlzaWJsZVxuICAgICAgICAgKiBAc2VlIGlzVmlzaWJsZVxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwidmlzaWJsZUlmXCIsIFwiXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInZpc2libGVJZlwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUGFuZWxNb2RlbEJhc2UucHJvdG90eXBlLmNhbGNDc3NDbGFzc2VzID0gZnVuY3Rpb24gKGNzcykge1xuICAgICAgICB2YXIgY2xhc3NlcyA9IHsgcGFuZWw6IHt9LCBlcnJvcjoge30sIHJvdzogXCJcIiwgcm93TXVsdGlwbGU6IFwiXCIsIHBhZ2VSb3c6IFwiXCIsIHJvd0NvbXBhY3Q6IFwiXCIgfTtcbiAgICAgICAgdGhpcy5jb3B5Q3NzQ2xhc3NlcyhjbGFzc2VzLnBhbmVsLCBjc3MucGFuZWwpO1xuICAgICAgICB0aGlzLmNvcHlDc3NDbGFzc2VzKGNsYXNzZXMuZXJyb3IsIGNzcy5lcnJvcik7XG4gICAgICAgIGlmICghIWNzcy5wYWdlUm93KSB7XG4gICAgICAgICAgICBjbGFzc2VzLnBhZ2VSb3cgPSBjc3MucGFnZVJvdztcbiAgICAgICAgfVxuICAgICAgICBpZiAoISFjc3Mucm93Q29tcGFjdCkge1xuICAgICAgICAgICAgY2xhc3Nlcy5yb3dDb21wYWN0ID0gY3NzLnJvd0NvbXBhY3Q7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEhY3NzLnJvdykge1xuICAgICAgICAgICAgY2xhc3Nlcy5yb3cgPSBjc3Mucm93O1xuICAgICAgICB9XG4gICAgICAgIGlmICghIWNzcy5yb3dNdWx0aXBsZSkge1xuICAgICAgICAgICAgY2xhc3Nlcy5yb3dNdWx0aXBsZSA9IGNzcy5yb3dNdWx0aXBsZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zdXJ2ZXkpIHtcbiAgICAgICAgICAgIHRoaXMuc3VydmV5LnVwZGF0ZVBhbmVsQ3NzQ2xhc3Nlcyh0aGlzLCBjbGFzc2VzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2xhc3NlcztcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQYW5lbE1vZGVsQmFzZS5wcm90b3R5cGUsIFwiaWRcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogQW4gYXV0by1nZW5lcmF0ZWQgdW5pcXVlIGVsZW1lbnQgaWRlbnRpZmllci5cbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImlkXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImlkXCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUGFuZWxNb2RlbEJhc2UucHJvdG90eXBlLCBcImlzUGFuZWxcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHN1cnZleSBlbGVtZW50IGlzIGEgcGFuZWwuXG4gICAgICAgICAqIEBzZWUgQmFzZS5nZXRUeXBlXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFBhbmVsTW9kZWxCYXNlLnByb3RvdHlwZS5nZXRQYW5lbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBQYW5lbE1vZGVsQmFzZS5wcm90b3R5cGUuZ2V0TGF5b3V0VHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIFwicm93XCI7XG4gICAgfTtcbiAgICBQYW5lbE1vZGVsQmFzZS5wcm90b3R5cGUuaXNMYXlvdXRUeXBlU3VwcG9ydGVkID0gZnVuY3Rpb24gKGxheW91dFR5cGUpIHtcbiAgICAgICAgcmV0dXJuIGxheW91dFR5cGUgIT09IFwiZmxvd1wiO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBhbmVsTW9kZWxCYXNlLnByb3RvdHlwZSwgXCJxdWVzdGlvbnNcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogQW4gYXJyYXkgb2YgYWxsIHF1ZXN0aW9ucyB3aXRoaW4gdGhpcyBwYW5lbC9wYWdlLiBJbmNsdWRlcyBxdWVzdGlvbnMgd2l0aGluIG5lc3RlZCBwYW5lbHMuXG4gICAgICAgICAqIEBzZWUgZWxlbWVudHNcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlzUXVlc3Rpb25zUmVhZHkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnF1ZXN0aW9uc1ZhbHVlID0gW107XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBlbCA9IHRoaXMuZWxlbWVudHNbaV07XG4gICAgICAgICAgICAgICAgICAgIGlmIChlbC5pc1BhbmVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcXMgPSBlbC5xdWVzdGlvbnM7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHFzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbnNWYWx1ZS5wdXNoKHFzW2pdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucXVlc3Rpb25zVmFsdWUucHVzaChlbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5pc1F1ZXN0aW9uc1JlYWR5ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uc1ZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUGFuZWxNb2RlbEJhc2UucHJvdG90eXBlLmdldFF1ZXN0aW9ucyA9IGZ1bmN0aW9uIChpbmNsdWRlTmVzdGVkKSB7XG4gICAgICAgIHZhciByZXMgPSB0aGlzLnF1ZXN0aW9ucztcbiAgICAgICAgaWYgKCFpbmNsdWRlTmVzdGVkKVxuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgdmFyIHJlczIgPSBbXTtcbiAgICAgICAgcmVzLmZvckVhY2goZnVuY3Rpb24gKHEpIHtcbiAgICAgICAgICAgIHJlczIucHVzaChxKTtcbiAgICAgICAgICAgIHEuZ2V0TmVzdGVkUXVlc3Rpb25zKCkuZm9yRWFjaChmdW5jdGlvbiAoblEpIHsgcmV0dXJuIHJlczIucHVzaChuUSk7IH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlczI7XG4gICAgfTtcbiAgICBQYW5lbE1vZGVsQmFzZS5wcm90b3R5cGUuZ2V0VmFsaWROYW1lID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgaWYgKCEhbmFtZSlcbiAgICAgICAgICAgIHJldHVybiBuYW1lLnRyaW0oKTtcbiAgICAgICAgcmV0dXJuIG5hbWU7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgcXVlc3Rpb24gd2l0aCBhIHNwZWNpZmllZCBgbmFtZWAuIFRoaXMgbWV0aG9kIGRvZXMgbm90IGZpbmQgcXVlc3Rpb25zIHdpdGhpbiBuZXN0ZWQgcGFuZWxzLlxuICAgICAqIEBwYXJhbSBuYW1lIEEgcXVlc3Rpb24gbmFtZS5cbiAgICAgKi9cbiAgICBQYW5lbE1vZGVsQmFzZS5wcm90b3R5cGUuZ2V0UXVlc3Rpb25CeU5hbWUgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5xdWVzdGlvbnM7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAocXVlc3Rpb25zW2ldLm5hbWUgPT0gbmFtZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gcXVlc3Rpb25zW2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIHN1cnZleSBlbGVtZW50IHdpdGggYSBzcGVjaWZpZWQgYG5hbWVgLiBUaGlzIG1ldGhvZCBjYW4gZmluZCBzdXJ2ZXkgZWxlbWVudHMgd2l0aGluIG5lc3RlZCBlbGVtZW50cy5cbiAgICAgKiBAcGFyYW0gbmFtZSBBbiBlbGVtZW50IG5hbWUuXG4gICAgICovXG4gICAgUGFuZWxNb2RlbEJhc2UucHJvdG90eXBlLmdldEVsZW1lbnRCeU5hbWUgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICB2YXIgZWxlbWVudHMgPSB0aGlzLmVsZW1lbnRzO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgZWwgPSBlbGVtZW50c1tpXTtcbiAgICAgICAgICAgIGlmIChlbC5uYW1lID09IG5hbWUpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsO1xuICAgICAgICAgICAgdmFyIHBubCA9IGVsLmdldFBhbmVsKCk7XG4gICAgICAgICAgICBpZiAoISFwbmwpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVzID0gcG5sLmdldEVsZW1lbnRCeU5hbWUobmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKCEhcmVzKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gICAgUGFuZWxNb2RlbEJhc2UucHJvdG90eXBlLmdldFF1ZXN0aW9uQnlWYWx1ZU5hbWUgPSBmdW5jdGlvbiAodmFsdWVOYW1lKSB7XG4gICAgICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLnF1ZXN0aW9ucztcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChxdWVzdGlvbnNbaV0uZ2V0VmFsdWVOYW1lKCkgPT0gdmFsdWVOYW1lKVxuICAgICAgICAgICAgICAgIHJldHVybiBxdWVzdGlvbnNbaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgSlNPTiBvYmplY3Qgd2l0aCBxdWVzdGlvbiB2YWx1ZXMgbmVzdGVkIGluIHRoZSBwYW5lbC9wYWdlLlxuICAgICAqIEBzZWUgZ2V0RGlzcGxheVZhbHVlXG4gICAgICovXG4gICAgUGFuZWxNb2RlbEJhc2UucHJvdG90eXBlLmdldFZhbHVlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZGF0YSA9IHt9O1xuICAgICAgICB0aGlzLmNvbGxlY3RWYWx1ZXMoZGF0YSwgMCk7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH07XG4gICAgUGFuZWxNb2RlbEJhc2UucHJvdG90eXBlLmNvbGxlY3RWYWx1ZXMgPSBmdW5jdGlvbiAoZGF0YSwgbGV2ZWwpIHtcbiAgICAgICAgdmFyIGVsZW1lbnRzID0gdGhpcy5lbGVtZW50cztcbiAgICAgICAgaWYgKGxldmVsID09PSAwKSB7XG4gICAgICAgICAgICBlbGVtZW50cyA9IHRoaXMucXVlc3Rpb25zO1xuICAgICAgICB9XG4gICAgICAgIHZhciBoYXNWYWx1ZSA9IGZhbHNlO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgZWwgPSBlbGVtZW50c1tpXTtcbiAgICAgICAgICAgIGlmIChlbC5pc1BhbmVsIHx8IGVsLmlzUGFnZSkge1xuICAgICAgICAgICAgICAgIHZhciBwYW5lbERhdGEgPSB7fTtcbiAgICAgICAgICAgICAgICBpZiAoZWwuY29sbGVjdFZhbHVlcyhwYW5lbERhdGEsIGxldmVsIC0gMSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YVtlbC5uYW1lXSA9IHBhbmVsRGF0YTtcbiAgICAgICAgICAgICAgICAgICAgaGFzVmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBxID0gZWw7XG4gICAgICAgICAgICAgICAgaWYgKCFxLmlzRW1wdHkoKSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWVOYW1lID0gcS5nZXRWYWx1ZU5hbWUoKTtcbiAgICAgICAgICAgICAgICAgICAgZGF0YVt2YWx1ZU5hbWVdID0gcS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEhdGhpcy5kYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29tbWVudCA9IHRoaXMuZGF0YS5nZXRDb21tZW50KHZhbHVlTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISFjb21tZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVt2YWx1ZU5hbWUgKyBfYmFzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiQmFzZVwiXS5jb21tZW50U3VmZml4XSA9IGNvbW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaGFzVmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIEpTT04gb2JqZWN0IHdpdGggZGlzcGxheSB0ZXh0cyB0aGF0IGNvcnJlc3BvbmQgdG8gcXVlc3Rpb24gdmFsdWVzIG5lc3RlZCBpbiB0aGUgcGFuZWwvcGFnZS5cbiAgICAgKiBAcGFyYW0ga2V5c0FzVGV4dCBQYXNzIGB0cnVlYCBpZiBub3Qgb25seSB2YWx1ZXMgaW4gdGhlIG9iamVjdCBzaG91bGQgYmUgZGlzcGxheSB0ZXh0cywgYnV0IGFsc28ga2V5cy4gRGVmYXVsdCB2YWx1ZTogYGZhbHNlYC5cbiAgICAgKiBAc2VlIGdldFZhbHVlXG4gICAgICovXG4gICAgUGFuZWxNb2RlbEJhc2UucHJvdG90eXBlLmdldERpc3BsYXlWYWx1ZSA9IGZ1bmN0aW9uIChrZXlzQXNUZXh0KSB7XG4gICAgICAgIHZhciBkYXRhID0ge307XG4gICAgICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLnF1ZXN0aW9ucztcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBxID0gcXVlc3Rpb25zW2ldO1xuICAgICAgICAgICAgaWYgKHEuaXNFbXB0eSgpKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgdmFyIHZhbHVlTmFtZSA9IGtleXNBc1RleHQgPyBxLnRpdGxlIDogcS5nZXRWYWx1ZU5hbWUoKTtcbiAgICAgICAgICAgIGRhdGFbdmFsdWVOYW1lXSA9IHEuZ2V0RGlzcGxheVZhbHVlKGtleXNBc1RleHQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIEpTT04gb2JqZWN0IHdpdGggY29tbWVudHMgbGVmdCB0byBxdWVzdGlvbnMgd2l0aGluIHRoaXMgcGFuZWwvcGFnZS4gUXVlc3Rpb24gbmFtZXMgYXJlIHVzZWQgYXMga2V5cy5cbiAgICAgKi9cbiAgICBQYW5lbE1vZGVsQmFzZS5wcm90b3R5cGUuZ2V0Q29tbWVudHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBjb21tZW50cyA9IHt9O1xuICAgICAgICBpZiAoIXRoaXMuZGF0YSlcbiAgICAgICAgICAgIHJldHVybiBjb21tZW50cztcbiAgICAgICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMucXVlc3Rpb25zO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIHEgPSBxdWVzdGlvbnNbaV07XG4gICAgICAgICAgICB2YXIgY29tbWVudCA9IHRoaXMuZGF0YS5nZXRDb21tZW50KHEuZ2V0VmFsdWVOYW1lKCkpO1xuICAgICAgICAgICAgaWYgKCEhY29tbWVudCkge1xuICAgICAgICAgICAgICAgIGNvbW1lbnRzW3EuZ2V0VmFsdWVOYW1lKCldID0gY29tbWVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tbWVudHM7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIHZhbHVlcyB0aGF0IGNhbm5vdCBiZSBhc3NpZ25lZCB0byBuZXN0ZWQgcXVlc3Rpb25zLCBmb3IgZXhhbXBsZSwgY2hvaWNlcyB1bmxpc3RlZCBpbiB0aGUgYGNob2ljZXNgIGFycmF5LlxuICAgICAqXG4gICAgICogQ2FsbCB0aGlzIG1ldGhvZCBhZnRlciB5b3UgYXNzaWduIG5ldyBxdWVzdGlvbiB2YWx1ZXMgaW4gY29kZSB0byBlbnN1cmUgdGhhdCB0aGV5IGFyZSBhY2NlcHRhYmxlLlxuICAgICAqXG4gICAgICogPiBUaGlzIG1ldGhvZCBkb2VzIG5vdCByZW1vdmUgdmFsdWVzIGZvciBpbnZpc2libGUgcXVlc3Rpb25zIGFuZCB2YWx1ZXMgdGhhdCBmYWlsIHZhbGlkYXRpb24uIENhbGwgdGhlIGB2YWxpZGF0ZSgpYCBtZXRob2QgdG8gdmFsaWRhdGUgbmV3bHkgYXNzaWduZWQgdmFsdWVzLlxuICAgICAqXG4gICAgICogQHNlZSB2YWxpZGF0ZVxuICAgICAqL1xuICAgIFBhbmVsTW9kZWxCYXNlLnByb3RvdHlwZS5jbGVhckluY29ycmVjdFZhbHVlcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnRzW2ldLmNsZWFySW5jb3JyZWN0VmFsdWVzKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEVtcHRpZXMgdGhlIGBlcnJvcnNgIGFycmF5IGZvciB0aGlzIHBhbmVsL3BhZ2UgYW5kIGFsbCBpdHMgY2hpbGQgZWxlbWVudHMgKHBhbmVscyBhbmQgcXVlc3Rpb25zKS5cbiAgICAgKiBAc2VlIGVycm9yc1xuICAgICAqL1xuICAgIFBhbmVsTW9kZWxCYXNlLnByb3RvdHlwZS5jbGVhckVycm9ycyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnRzW2ldLmNsZWFyRXJyb3JzKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lcnJvcnMgPSBbXTtcbiAgICB9O1xuICAgIFBhbmVsTW9kZWxCYXNlLnByb3RvdHlwZS5tYXJrUXVlc3Rpb25MaXN0RGlydHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuaXNRdWVzdGlvbnNSZWFkeSA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5wYXJlbnQpXG4gICAgICAgICAgICB0aGlzLnBhcmVudC5tYXJrUXVlc3Rpb25MaXN0RGlydHkoKTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQYW5lbE1vZGVsQmFzZS5wcm90b3R5cGUsIFwiZWxlbWVudHNcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogQW4gYXJyYXkgb2YgYWxsIHN1cnZleSBlbGVtZW50cyAocXVlc3Rpb25zIG9yIHBhbmVscykgd2l0aGluIHRoaXMgcGFuZWwvcGFnZS4gRG9lcyBub3QgaW5jbHVkZSBxdWVzdGlvbnMgd2l0aGluIG5lc3RlZCBwYW5lbHMuXG4gICAgICAgICAqIEBzZWUgcXVlc3Rpb25zXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRzVmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBQYW5lbE1vZGVsQmFzZS5wcm90b3R5cGUuZ2V0RWxlbWVudHNJbkRlc2lnbiA9IGZ1bmN0aW9uIChpbmNsdWRlSGlkZGVuKSB7XG4gICAgICAgIGlmIChpbmNsdWRlSGlkZGVuID09PSB2b2lkIDApIHsgaW5jbHVkZUhpZGRlbiA9IGZhbHNlOyB9XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRzO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogQ2hlY2tzIHdoZXRoZXIgYSBnaXZlbiBlbGVtZW50IGJlbG9uZ3MgdG8gdGhpcyBwYW5lbC9wYWdlIG9yIG5lc3RlZCBwYW5lbHMuXG4gICAgICogQHBhcmFtIGVsZW1lbnQgQSBzdXJ2ZXkgZWxlbWVudCB0byBjaGVjay5cbiAgICAgKi9cbiAgICBQYW5lbE1vZGVsQmFzZS5wcm90b3R5cGUuY29udGFpbnNFbGVtZW50ID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgZWwgPSB0aGlzLmVsZW1lbnRzW2ldO1xuICAgICAgICAgICAgaWYgKGVsID09IGVsZW1lbnQpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB2YXIgcG5sID0gZWwuZ2V0UGFuZWwoKTtcbiAgICAgICAgICAgIGlmICghIXBubCkge1xuICAgICAgICAgICAgICAgIGlmIChwbmwuY29udGFpbnNFbGVtZW50KGVsZW1lbnQpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUGFuZWxNb2RlbEJhc2UucHJvdG90eXBlLCBcImlzUmVxdWlyZWRcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogTWFrZXMgdGhlIHBhbmVsL3BhZ2UgcmVxdWlyZSBhbiBhbnN3ZXIgYXQgbGVhc3QgaW4gb25lIG5lc3RlZCBxdWVzdGlvbi4gSWYgYSByZXNwb25kZW50IGxlYXZlcyB0aGUgcGFuZWwvcGFnZSB3aXRob3V0IGFueSBhbnN3ZXJzLCB0aGUgc3VydmV5IGRpc3BsYXlzIGEgdmFsaWRhdGlvbiBlcnJvci5cbiAgICAgICAgICogQHNlZSByZXF1aXJlZElmXG4gICAgICAgICAqIEBzZWUgW0RhdGEgVmFsaWRhdGlvbl0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9kYXRhLXZhbGlkYXRpb24pXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpc1JlcXVpcmVkXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImlzUmVxdWlyZWRcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQYW5lbE1vZGVsQmFzZS5wcm90b3R5cGUsIFwicmVxdWlyZWRJZlwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBIEJvb2xlYW4gZXhwcmVzc2lvbi4gSWYgaXQgZXZhbHVhdGVzIHRvIGB0cnVlYCwgdGhpcyBwYW5lbC9wYWdlIGJlY29tZXMgcmVxdWlyZWQgKGF0IGxlYXN0IG9uZSBxdWVzdGlvbiBpbiB0aGUgcGFuZWwvcGFnZSBzaG91bGQgaGF2ZSBhbiBhbnN3ZXIpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBBIHN1cnZleSBwYXJzZXMgYW5kIHJ1bnMgYWxsIGV4cHJlc3Npb25zIG9uIHN0YXJ0dXAuIElmIGFueSB2YWx1ZXMgdXNlZCBpbiB0aGUgZXhwcmVzc2lvbiBjaGFuZ2UsIHRoZSBzdXJ2ZXkgcmUtZXZhbHVhdGVzIGl0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBSZWZlciB0byB0aGUgZm9sbG93aW5nIGhlbHAgdG9waWMgZm9yIG1vcmUgaW5mb3JtYXRpb246IFtDb25kaXRpb25hbCBWaXNpYmlsaXR5XShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2Rlc2lnbi1zdXJ2ZXktY29uZGl0aW9uYWwtbG9naWMjY29uZGl0aW9uYWwtdmlzaWJpbGl0eSlcbiAgICAgICAgICogQHNlZSBpc1JlcXVpcmVkXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJyZXF1aXJlZElmXCIsIFwiXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInJlcXVpcmVkSWZcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFBhbmVsTW9kZWxCYXNlLnByb3RvdHlwZS5zZWFyY2hUZXh0ID0gZnVuY3Rpb24gKHRleHQsIGZvdW5kZWQpIHtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5zZWFyY2hUZXh0LmNhbGwodGhpcywgdGV4dCwgZm91bmRlZCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50c1tpXS5zZWFyY2hUZXh0KHRleHQsIGZvdW5kZWQpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBQYW5lbE1vZGVsQmFzZS5wcm90b3R5cGUuaGFzRXJyb3JzID0gZnVuY3Rpb24gKGZpcmVDYWxsYmFjaywgZm9jdXNPbkZpcnN0RXJyb3IsIHJlYykge1xuICAgICAgICBpZiAoZmlyZUNhbGxiYWNrID09PSB2b2lkIDApIHsgZmlyZUNhbGxiYWNrID0gdHJ1ZTsgfVxuICAgICAgICBpZiAoZm9jdXNPbkZpcnN0RXJyb3IgPT09IHZvaWQgMCkgeyBmb2N1c09uRmlyc3RFcnJvciA9IGZhbHNlOyB9XG4gICAgICAgIGlmIChyZWMgPT09IHZvaWQgMCkgeyByZWMgPSBudWxsOyB9XG4gICAgICAgIHJldHVybiAhdGhpcy52YWxpZGF0ZShmaXJlQ2FsbGJhY2ssIGZvY3VzT25GaXJzdEVycm9yLCByZWMpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogVmFsaWRhdGVzIHF1ZXN0aW9ucyB3aXRoaW4gdGhpcyBwYW5lbCBvciBwYWdlIGFuZCByZXR1cm5zIGBmYWxzZWAgaWYgdGhlIHZhbGlkYXRpb24gZmFpbHMuXG4gICAgICogQHBhcmFtIGZpcmVDYWxsYmFjayAqT3B0aW9uYWwuKiBQYXNzIGBmYWxzZWAgaWYgeW91IGRvIG5vdCB3YW50IHRvIHNob3cgdmFsaWRhdGlvbiBlcnJvcnMgaW4gdGhlIFVJLlxuICAgICAqIEBwYXJhbSBmb2N1c09uRmlyc3RFcnJvciAqT3B0aW9uYWwuKiBQYXNzIGB0cnVlYCBpZiB5b3Ugd2FudCB0byBmb2N1cyB0aGUgZmlyc3QgcXVlc3Rpb24gd2l0aCBhIHZhbGlkYXRpb24gZXJyb3IuXG4gICAgICogQHNlZSBbRGF0YSBWYWxpZGF0aW9uXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2RhdGEtdmFsaWRhdGlvbilcbiAgICAgKi9cbiAgICBQYW5lbE1vZGVsQmFzZS5wcm90b3R5cGUudmFsaWRhdGUgPSBmdW5jdGlvbiAoZmlyZUNhbGxiYWNrLCBmb2N1c09uRmlyc3RFcnJvciwgcmVjKSB7XG4gICAgICAgIGlmIChmaXJlQ2FsbGJhY2sgPT09IHZvaWQgMCkgeyBmaXJlQ2FsbGJhY2sgPSB0cnVlOyB9XG4gICAgICAgIGlmIChmb2N1c09uRmlyc3RFcnJvciA9PT0gdm9pZCAwKSB7IGZvY3VzT25GaXJzdEVycm9yID0gZmFsc2U7IH1cbiAgICAgICAgaWYgKHJlYyA9PT0gdm9pZCAwKSB7IHJlYyA9IG51bGw7IH1cbiAgICAgICAgcmVjID0gISFyZWNcbiAgICAgICAgICAgID8gcmVjXG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICBmaXJlQ2FsbGJhY2s6IGZpcmVDYWxsYmFjayxcbiAgICAgICAgICAgICAgICBmb2N1c2VPbkZpcnN0RXJyb3I6IGZvY3VzT25GaXJzdEVycm9yLFxuICAgICAgICAgICAgICAgIGZpcnN0RXJyb3JRdWVzdGlvbjogbnVsbCxcbiAgICAgICAgICAgICAgICByZXN1bHQ6IGZhbHNlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgaWYgKHJlYy5yZXN1bHQgIT09IHRydWUpXG4gICAgICAgICAgICByZWMucmVzdWx0ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaGFzRXJyb3JzQ29yZShyZWMpO1xuICAgICAgICBpZiAocmVjLmZpcnN0RXJyb3JRdWVzdGlvbikge1xuICAgICAgICAgICAgcmVjLmZpcnN0RXJyb3JRdWVzdGlvbi5mb2N1cyh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gIXJlYy5yZXN1bHQ7XG4gICAgfTtcbiAgICBQYW5lbE1vZGVsQmFzZS5wcm90b3R5cGUudmFsaWRhdGVDb250YWluZXJPbmx5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmhhc0Vycm9yc0luUGFuZWxzKHsgZmlyZUNhbGxiYWNrOiB0cnVlIH0pO1xuICAgICAgICBpZiAoISF0aGlzLnBhcmVudCkge1xuICAgICAgICAgICAgdGhpcy5wYXJlbnQudmFsaWRhdGVDb250YWluZXJPbmx5KCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFBhbmVsTW9kZWxCYXNlLnByb3RvdHlwZS5oYXNFcnJvcnNJblBhbmVscyA9IGZ1bmN0aW9uIChyZWMpIHtcbiAgICAgICAgdmFyIGVycm9ycyA9IFtdO1xuICAgICAgICB0aGlzLmhhc1JlcXVpcmVkRXJyb3IocmVjLCBlcnJvcnMpO1xuICAgICAgICBpZiAodGhpcy5zdXJ2ZXkpIHtcbiAgICAgICAgICAgIHZhciBjdXN0b21FcnJvciA9IHRoaXMuc3VydmV5LnZhbGlkYXRlUGFuZWwodGhpcyk7XG4gICAgICAgICAgICBpZiAoY3VzdG9tRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBlcnJvcnMucHVzaChjdXN0b21FcnJvcik7XG4gICAgICAgICAgICAgICAgcmVjLnJlc3VsdCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEhcmVjLmZpcmVDYWxsYmFjaykge1xuICAgICAgICAgICAgaWYgKCEhdGhpcy5zdXJ2ZXkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN1cnZleS5iZWZvcmVTZXR0aW5nUGFuZWxFcnJvcnModGhpcywgZXJyb3JzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZXJyb3JzID0gZXJyb3JzO1xuICAgICAgICB9XG4gICAgfTtcbiAgICAvL0lTdXJ2ZXlFcnJvck93bmVyXG4gICAgUGFuZWxNb2RlbEJhc2UucHJvdG90eXBlLmdldEVycm9yQ3VzdG9tVGV4dCA9IGZ1bmN0aW9uICh0ZXh0LCBlcnJvcikge1xuICAgICAgICBpZiAoISF0aGlzLnN1cnZleSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN1cnZleS5nZXRTdXJ2ZXlFcnJvckN1c3RvbVRleHQodGhpcywgdGV4dCwgZXJyb3IpO1xuICAgICAgICByZXR1cm4gdGV4dDtcbiAgICB9O1xuICAgIFBhbmVsTW9kZWxCYXNlLnByb3RvdHlwZS5oYXNSZXF1aXJlZEVycm9yID0gZnVuY3Rpb24gKHJlYywgZXJyb3JzKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1JlcXVpcmVkKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIgdmlzUXVlc3Rpb25zID0gW107XG4gICAgICAgIHRoaXMuYWRkUXVlc3Rpb25zVG9MaXN0KHZpc1F1ZXN0aW9ucywgdHJ1ZSk7XG4gICAgICAgIGlmICh2aXNRdWVzdGlvbnMubGVuZ3RoID09IDApXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmlzUXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoIXZpc1F1ZXN0aW9uc1tpXS5pc0VtcHR5KCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJlYy5yZXN1bHQgPSB0cnVlO1xuICAgICAgICBlcnJvcnMucHVzaChuZXcgX2Vycm9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bXCJPbmVBbnN3ZXJSZXF1aXJlZEVycm9yXCJdKHRoaXMucmVxdWlyZWRFcnJvclRleHQsIHRoaXMpKTtcbiAgICAgICAgaWYgKHJlYy5mb2N1c2VPbkZpcnN0RXJyb3IgJiYgIXJlYy5maXJzdEVycm9yUXVlc3Rpb24pIHtcbiAgICAgICAgICAgIHJlYy5maXJzdEVycm9yUXVlc3Rpb24gPSB2aXNRdWVzdGlvbnNbMF07XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFBhbmVsTW9kZWxCYXNlLnByb3RvdHlwZS5oYXNFcnJvcnNDb3JlID0gZnVuY3Rpb24gKHJlYykge1xuICAgICAgICB2YXIgZWxlbWVudHMgPSB0aGlzLmVsZW1lbnRzO1xuICAgICAgICB2YXIgZWxlbWVudCA9IG51bGw7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGVsZW1lbnQgPSBlbGVtZW50c1tpXTtcbiAgICAgICAgICAgIGlmICghZWxlbWVudC5pc1Zpc2libGUpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBpZiAoZWxlbWVudC5pc1BhbmVsKSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5oYXNFcnJvcnNDb3JlKHJlYyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgcXVlc3Rpb24gPSBlbGVtZW50O1xuICAgICAgICAgICAgICAgIGlmICghcXVlc3Rpb24udmFsaWRhdGUocmVjLmZpcmVDYWxsYmFjaywgcmVjKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVjLmZvY3VzZU9uRmlyc3RFcnJvciAmJiByZWMuZmlyc3RFcnJvclF1ZXN0aW9uID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYy5maXJzdEVycm9yUXVlc3Rpb24gPSBxdWVzdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZWMucmVzdWx0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5oYXNFcnJvcnNJblBhbmVscyhyZWMpO1xuICAgICAgICB0aGlzLnVwZGF0ZUNvbnRhaW5zRXJyb3JzKCk7XG4gICAgfTtcbiAgICBQYW5lbE1vZGVsQmFzZS5wcm90b3R5cGUuZ2V0Q29udGFpbnNFcnJvcnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciByZXMgPSBfc3VwZXIucHJvdG90eXBlLmdldENvbnRhaW5zRXJyb3JzLmNhbGwodGhpcyk7XG4gICAgICAgIGlmIChyZXMpXG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB2YXIgZWxlbWVudHMgPSB0aGlzLmVsZW1lbnRzO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoZWxlbWVudHNbaV0uY29udGFpbnNFcnJvcnMpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gICAgUGFuZWxNb2RlbEJhc2UucHJvdG90eXBlLnVwZGF0ZUVsZW1lbnRWaXNpYmlsaXR5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBlbCA9IHRoaXMuZWxlbWVudHNbaV07XG4gICAgICAgICAgICBlbC5zZXRQcm9wZXJ0eVZhbHVlKFwiaXNWaXNpYmxlXCIsIGVsLmlzVmlzaWJsZSk7XG4gICAgICAgICAgICBpZiAoZWwuaXNQYW5lbCkge1xuICAgICAgICAgICAgICAgIGVsLnVwZGF0ZUVsZW1lbnRWaXNpYmlsaXR5KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFBhbmVsTW9kZWxCYXNlLnByb3RvdHlwZS5nZXRGaXJzdFF1ZXN0aW9uVG9Gb2N1cyA9IGZ1bmN0aW9uICh3aXRoRXJyb3IsIGlnbm9yZUNvbGxhcHNlU3RhdGUpIHtcbiAgICAgICAgaWYgKHdpdGhFcnJvciA9PT0gdm9pZCAwKSB7IHdpdGhFcnJvciA9IGZhbHNlOyB9XG4gICAgICAgIGlmIChpZ25vcmVDb2xsYXBzZVN0YXRlID09PSB2b2lkIDApIHsgaWdub3JlQ29sbGFwc2VTdGF0ZSA9IGZhbHNlOyB9XG4gICAgICAgIGlmICghd2l0aEVycm9yICYmICFpZ25vcmVDb2xsYXBzZVN0YXRlICYmIHRoaXMuaXNDb2xsYXBzZWQpXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgdmFyIGVsZW1lbnRzID0gdGhpcy5lbGVtZW50cztcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGVsID0gZWxlbWVudHNbaV07XG4gICAgICAgICAgICBpZiAoIWVsLmlzVmlzaWJsZSB8fCAhaWdub3JlQ29sbGFwc2VTdGF0ZSAmJiBlbC5pc0NvbGxhcHNlZClcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIGlmIChlbC5pc1BhbmVsKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJlcyA9IGVsLmdldEZpcnN0UXVlc3Rpb25Ub0ZvY3VzKHdpdGhFcnJvciwgaWdub3JlQ29sbGFwc2VTdGF0ZSk7XG4gICAgICAgICAgICAgICAgaWYgKCEhcmVzKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIHEgPSBlbC5nZXRGaXJzdFF1ZXN0aW9uVG9Gb2N1cyh3aXRoRXJyb3IpO1xuICAgICAgICAgICAgICAgIGlmICghIXEpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogRm9jdXNlcyB0aGUgZmlyc3QgcXVlc3Rpb24gaW4gdGhpcyBwYW5lbC9wYWdlLlxuICAgICAqIEBzZWUgZm9jdXNGaXJzdEVycm9yUXVlc3Rpb25cbiAgICAgKi9cbiAgICBQYW5lbE1vZGVsQmFzZS5wcm90b3R5cGUuZm9jdXNGaXJzdFF1ZXN0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcSA9IHRoaXMuZ2V0Rmlyc3RRdWVzdGlvblRvRm9jdXMoKTtcbiAgICAgICAgaWYgKCEhcSkge1xuICAgICAgICAgICAgcS5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBGb2N1c2VzIHRoZSBmaXJzdCBxdWVzdGlvbiB3aXRoIGEgdmFsaWRhdGlvbiBlcnJvciBpbiB0aGlzIHBhbmVsL3BhZ2UuXG4gICAgICogQHNlZSB2YWxpZGF0ZVxuICAgICAqIEBzZWUgZm9jdXNGaXJzdFF1ZXN0aW9uXG4gICAgICovXG4gICAgUGFuZWxNb2RlbEJhc2UucHJvdG90eXBlLmZvY3VzRmlyc3RFcnJvclF1ZXN0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcSA9IHRoaXMuZ2V0Rmlyc3RRdWVzdGlvblRvRm9jdXModHJ1ZSk7XG4gICAgICAgIGlmICghIXEpIHtcbiAgICAgICAgICAgIHEuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgUGFuZWxNb2RlbEJhc2UucHJvdG90eXBlLmFkZFF1ZXN0aW9uc1RvTGlzdCA9IGZ1bmN0aW9uIChsaXN0LCB2aXNpYmxlT25seSwgaW5jbHVkaW5nRGVzaWduVGltZSkge1xuICAgICAgICBpZiAodmlzaWJsZU9ubHkgPT09IHZvaWQgMCkgeyB2aXNpYmxlT25seSA9IGZhbHNlOyB9XG4gICAgICAgIGlmIChpbmNsdWRpbmdEZXNpZ25UaW1lID09PSB2b2lkIDApIHsgaW5jbHVkaW5nRGVzaWduVGltZSA9IGZhbHNlOyB9XG4gICAgICAgIHRoaXMuYWRkRWxlbWVudHNUb0xpc3QobGlzdCwgdmlzaWJsZU9ubHksIGluY2x1ZGluZ0Rlc2lnblRpbWUsIGZhbHNlKTtcbiAgICB9O1xuICAgIFBhbmVsTW9kZWxCYXNlLnByb3RvdHlwZS5hZGRQYW5lbHNJbnRvTGlzdCA9IGZ1bmN0aW9uIChsaXN0LCB2aXNpYmxlT25seSwgaW5jbHVkaW5nRGVzaWduVGltZSkge1xuICAgICAgICBpZiAodmlzaWJsZU9ubHkgPT09IHZvaWQgMCkgeyB2aXNpYmxlT25seSA9IGZhbHNlOyB9XG4gICAgICAgIGlmIChpbmNsdWRpbmdEZXNpZ25UaW1lID09PSB2b2lkIDApIHsgaW5jbHVkaW5nRGVzaWduVGltZSA9IGZhbHNlOyB9XG4gICAgICAgIHRoaXMuYWRkRWxlbWVudHNUb0xpc3QobGlzdCwgdmlzaWJsZU9ubHksIGluY2x1ZGluZ0Rlc2lnblRpbWUsIHRydWUpO1xuICAgIH07XG4gICAgUGFuZWxNb2RlbEJhc2UucHJvdG90eXBlLmFkZEVsZW1lbnRzVG9MaXN0ID0gZnVuY3Rpb24gKGxpc3QsIHZpc2libGVPbmx5LCBpbmNsdWRpbmdEZXNpZ25UaW1lLCBpc1BhbmVsKSB7XG4gICAgICAgIGlmICh2aXNpYmxlT25seSAmJiAhdGhpcy52aXNpYmxlKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLmFkZEVsZW1lbnRzVG9MaXN0Q29yZShsaXN0LCB0aGlzLmVsZW1lbnRzLCB2aXNpYmxlT25seSwgaW5jbHVkaW5nRGVzaWduVGltZSwgaXNQYW5lbCk7XG4gICAgfTtcbiAgICBQYW5lbE1vZGVsQmFzZS5wcm90b3R5cGUuYWRkRWxlbWVudHNUb0xpc3RDb3JlID0gZnVuY3Rpb24gKGxpc3QsIGVsZW1lbnRzLCB2aXNpYmxlT25seSwgaW5jbHVkaW5nRGVzaWduVGltZSwgaXNQYW5lbCkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgZWwgPSBlbGVtZW50c1tpXTtcbiAgICAgICAgICAgIGlmICh2aXNpYmxlT25seSAmJiAhZWwudmlzaWJsZSlcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIGlmICgoaXNQYW5lbCAmJiBlbC5pc1BhbmVsKSB8fCAoIWlzUGFuZWwgJiYgIWVsLmlzUGFuZWwpKSB7XG4gICAgICAgICAgICAgICAgbGlzdC5wdXNoKGVsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlbC5pc1BhbmVsKSB7XG4gICAgICAgICAgICAgICAgZWwuYWRkRWxlbWVudHNUb0xpc3RDb3JlKGxpc3QsIGVsLmVsZW1lbnRzLCB2aXNpYmxlT25seSwgaW5jbHVkaW5nRGVzaWduVGltZSwgaXNQYW5lbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5jbHVkaW5nRGVzaWduVGltZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZEVsZW1lbnRzVG9MaXN0Q29yZShsaXN0LCBlbC5nZXRFbGVtZW50c0luRGVzaWduKGZhbHNlKSwgdmlzaWJsZU9ubHksIGluY2x1ZGluZ0Rlc2lnblRpbWUsIGlzUGFuZWwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgUGFuZWxNb2RlbEJhc2UucHJvdG90eXBlLnVwZGF0ZUN1c3RvbVdpZGdldHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50c1tpXS51cGRhdGVDdXN0b21XaWRnZXRzKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQYW5lbE1vZGVsQmFzZS5wcm90b3R5cGUsIFwicXVlc3Rpb25UaXRsZUxvY2F0aW9uXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNldHMgYSB0aXRsZSBsb2NhdGlvbiByZWxhdGl2ZSB0byB0aGUgaW5wdXQgZmllbGQgZm9yIHF1ZXN0aW9ucyB0aGF0IGJlbG9uZyB0byB0aGlzIHBhbmVsL3BhZ2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIFVzZSB0aGlzIHByb3BlcnR5IHRvIG92ZXJyaWRlIHRoZSBgcXVlc3Rpb25UaXRsZUxvY2F0aW9uYCBwcm9wZXJ0eSBzcGVjaWZpZWQgZm9yIHRoZSBzdXJ2ZXkuIFlvdSBjYW4gYWxzbyBzZXQgdGhlIGB0aXRsZUxvY2F0aW9uYCBwcm9wZXJ0eSBmb3IgaW5kaXZpZHVhbCBxdWVzdGlvbnMuXG4gICAgICAgICAqXG4gICAgICAgICAqIFBvc3NpYmxlIHZhbHVlczpcbiAgICAgICAgICpcbiAgICAgICAgICogLSBgXCJkZWZhdWx0XCJgIChkZWZhdWx0KSAtIEluaGVyaXRzIHRoZSBzZXR0aW5nIGZyb20gdGhlIGBxdWVzdGlvblRpdGxlTG9jYXRpb25gIHByb3BlcnR5IHNwZWNpZmllZCBmb3IgdGhlIHN1cnZleS5cbiAgICAgICAgICogLSBgXCJ0b3BcImAgLSBEaXNwbGF5cyB0aGUgdGl0bGUgYWJvdmUgdGhlIGlucHV0IGZpZWxkLlxuICAgICAgICAgKiAtIGBcImJvdHRvbVwiYCAtIERpc3BsYXlzIHRoZSB0aXRsZSBiZWxvdyB0aGUgaW5wdXQgZmllbGQuXG4gICAgICAgICAqIC0gYFwibGVmdFwiYCAtIERpc3BsYXlzIHRoZSB0aXRsZSB0byB0aGUgbGVmdCBvZiB0aGUgaW5wdXQgZmllbGQuXG4gICAgICAgICAqIC0gYFwiaGlkZGVuXCJgIC0gSGlkZXMgdGhlIHF1ZXN0aW9uIHRpdGxlLlxuICAgICAgICAgKlxuICAgICAgICAgKiA+IENlcnRhaW4gcXVlc3Rpb24gdHlwZXMgKE1hdHJpeCwgTXVsdGlwbGUgVGV4dCkgZG8gbm90IHN1cHBvcnQgdGhlIGBcImxlZnRcImAgdmFsdWUuIEZvciB0aGVtLCB0aGUgYFwidG9wXCJgIHZhbHVlIGlzIHVzZWQuXG4gICAgICAgICAqIEBzZWUgU3VydmV5TW9kZWwucXVlc3Rpb25UaXRsZUxvY2F0aW9uXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJxdWVzdGlvblRpdGxlTG9jYXRpb25cIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJxdWVzdGlvblRpdGxlTG9jYXRpb25cIiwgdmFsdWUudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBQYW5lbE1vZGVsQmFzZS5wcm90b3R5cGUuZ2V0UXVlc3Rpb25UaXRsZUxvY2F0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5vbkdldFF1ZXN0aW9uVGl0bGVMb2NhdGlvbilcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm9uR2V0UXVlc3Rpb25UaXRsZUxvY2F0aW9uKCk7XG4gICAgICAgIGlmICh0aGlzLnF1ZXN0aW9uVGl0bGVMb2NhdGlvbiAhPSBcImRlZmF1bHRcIilcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uVGl0bGVMb2NhdGlvbjtcbiAgICAgICAgaWYgKHRoaXMucGFyZW50KVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50LmdldFF1ZXN0aW9uVGl0bGVMb2NhdGlvbigpO1xuICAgICAgICByZXR1cm4gdGhpcy5zdXJ2ZXkgPyB0aGlzLnN1cnZleS5xdWVzdGlvblRpdGxlTG9jYXRpb24gOiBcInRvcFwiO1xuICAgIH07XG4gICAgUGFuZWxNb2RlbEJhc2UucHJvdG90eXBlLmdldFN0YXJ0SW5kZXggPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghIXRoaXMucGFyZW50KVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50LmdldFF1ZXN0aW9uU3RhcnRJbmRleCgpO1xuICAgICAgICBpZiAoISF0aGlzLnN1cnZleSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN1cnZleS5xdWVzdGlvblN0YXJ0SW5kZXg7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgIH07XG4gICAgUGFuZWxNb2RlbEJhc2UucHJvdG90eXBlLmdldFF1ZXN0aW9uU3RhcnRJbmRleCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U3RhcnRJbmRleCgpO1xuICAgIH07XG4gICAgUGFuZWxNb2RlbEJhc2UucHJvdG90eXBlLmdldENoaWxkcmVuTGF5b3V0VHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIFwicm93XCI7XG4gICAgfTtcbiAgICBQYW5lbE1vZGVsQmFzZS5wcm90b3R5cGUuZ2V0UHJvZ3Jlc3NJbmZvID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gX3N1cnZleV9lbGVtZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJTdXJ2ZXlFbGVtZW50XCJdLmdldFByb2dyZXNzSW5mb0J5RWxlbWVudHModGhpcy5lbGVtZW50cywgdGhpcy5pc1JlcXVpcmVkKTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQYW5lbE1vZGVsQmFzZS5wcm90b3R5cGUsIFwicm9vdFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHJlcyA9IHRoaXM7XG4gICAgICAgICAgICB3aGlsZSAocmVzLnBhcmVudClcbiAgICAgICAgICAgICAgICByZXMgPSByZXMucGFyZW50O1xuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFBhbmVsTW9kZWxCYXNlLnByb3RvdHlwZS5jaGlsZFZpc2liaWxpdHlDaGFuZ2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgbmV3SXNWaXNpYmxlVmFsdWUgPSB0aGlzLmdldElzUGFnZVZpc2libGUobnVsbCk7XG4gICAgICAgIHZhciBvbGRJc1Zpc2libGVWYWx1ZSA9IHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImlzVmlzaWJsZVwiLCB0cnVlKTtcbiAgICAgICAgaWYgKG5ld0lzVmlzaWJsZVZhbHVlICE9PSBvbGRJc1Zpc2libGVWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5vblZpc2libGVDaGFuZ2VkKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFBhbmVsTW9kZWxCYXNlLnByb3RvdHlwZS5jcmVhdGVSb3dBbmRTZXRMYXp5ID0gZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgIHZhciByb3cgPSB0aGlzLmNyZWF0ZVJvdygpO1xuICAgICAgICByb3cuc2V0SXNMYXp5UmVuZGVyaW5nKHRoaXMuaXNMYXp5UmVuZGVySW5Sb3coaW5kZXgpKTtcbiAgICAgICAgcmV0dXJuIHJvdztcbiAgICB9O1xuICAgIFBhbmVsTW9kZWxCYXNlLnByb3RvdHlwZS5jcmVhdGVSb3cgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUXVlc3Rpb25Sb3dNb2RlbCh0aGlzKTtcbiAgICB9O1xuICAgIFBhbmVsTW9kZWxCYXNlLnByb3RvdHlwZS5vblN1cnZleUxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50c1tpXS5vblN1cnZleUxvYWQoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uRWxlbWVudFZpc2liaWxpdHlDaGFuZ2VkKHRoaXMpO1xuICAgIH07XG4gICAgUGFuZWxNb2RlbEJhc2UucHJvdG90eXBlLm9uRmlyc3RSZW5kZXJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUub25GaXJzdFJlbmRlcmluZy5jYWxsKHRoaXMpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudHNbaV0ub25GaXJzdFJlbmRlcmluZygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub25Sb3dzQ2hhbmdlZCgpO1xuICAgIH07XG4gICAgUGFuZWxNb2RlbEJhc2UucHJvdG90eXBlLnVwZGF0ZVJvd3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzTG9hZGluZ0Zyb21Kc29uKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmVsZW1lbnRzW2ldLmlzUGFuZWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnRzW2ldLnVwZGF0ZVJvd3MoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uUm93c0NoYW5nZWQoKTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQYW5lbE1vZGVsQmFzZS5wcm90b3R5cGUsIFwicm93c1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInJvd3NcIik7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBQYW5lbE1vZGVsQmFzZS5wcm90b3R5cGUuZW5zdXJlUm93c1Zpc2liaWxpdHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMucm93cy5mb3JFYWNoKGZ1bmN0aW9uIChyb3cpIHtcbiAgICAgICAgICAgIHJvdy5lbnN1cmVWaXNpYmlsaXR5KCk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgUGFuZWxNb2RlbEJhc2UucHJvdG90eXBlLm9uUm93c0NoYW5nZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzTG9hZGluZ0Zyb21Kc29uKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLnNldEFycmF5UHJvcGVydHlEaXJlY3RseShcInJvd3NcIiwgdGhpcy5idWlsZFJvd3MoKSk7XG4gICAgfTtcbiAgICBQYW5lbE1vZGVsQmFzZS5wcm90b3R5cGUub25BZGRFbGVtZW50ID0gZnVuY3Rpb24gKGVsZW1lbnQsIGluZGV4KSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGVsZW1lbnQuc2V0U3VydmV5SW1wbCh0aGlzLnN1cnZleUltcGwpO1xuICAgICAgICBlbGVtZW50LnBhcmVudCA9IHRoaXM7XG4gICAgICAgIHRoaXMubWFya1F1ZXN0aW9uTGlzdERpcnR5KCk7XG4gICAgICAgIGlmICh0aGlzLmNhbkJ1aWxkUm93cygpKSB7XG4gICAgICAgICAgICB2YXIgZHJhZ0Ryb3BJbmZvID0gX3NldHRpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bXCJzZXR0aW5nc1wiXS5zdXBwb3J0Q3JlYXRvclYyID8gdGhpcy5nZXREcmFnRHJvcEluZm8oKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuZHJhZ0Ryb3BQYW5lbEhlbHBlci51cGRhdGVSb3dzT25FbGVtZW50QWRkZWQoZWxlbWVudCwgaW5kZXgsIGRyYWdEcm9wSW5mbywgdGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVsZW1lbnQuaXNQYW5lbCkge1xuICAgICAgICAgICAgdmFyIHAgPSBlbGVtZW50O1xuICAgICAgICAgICAgaWYgKHRoaXMuc3VydmV5KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdXJ2ZXkucGFuZWxBZGRlZChwLCBpbmRleCwgdGhpcywgdGhpcy5yb290KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnN1cnZleSkge1xuICAgICAgICAgICAgICAgIHZhciBxID0gZWxlbWVudDtcbiAgICAgICAgICAgICAgICB0aGlzLnN1cnZleS5xdWVzdGlvbkFkZGVkKHEsIGluZGV4LCB0aGlzLCB0aGlzLnJvb3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghIXRoaXMuYWRkRWxlbWVudENhbGxiYWNrKVxuICAgICAgICAgICAgdGhpcy5hZGRFbGVtZW50Q2FsbGJhY2soZWxlbWVudCk7XG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgICAgZWxlbWVudC5yZWdpc3RlclByb3BlcnR5Q2hhbmdlZEhhbmRsZXJzKFtcInZpc2libGVcIiwgXCJpc1Zpc2libGVcIl0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLm9uRWxlbWVudFZpc2liaWxpdHlDaGFuZ2VkKGVsZW1lbnQpO1xuICAgICAgICB9LCB0aGlzLmlkKTtcbiAgICAgICAgZWxlbWVudC5yZWdpc3RlclByb3BlcnR5Q2hhbmdlZEhhbmRsZXJzKFtcInN0YXJ0V2l0aE5ld0xpbmVcIl0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLm9uRWxlbWVudFN0YXJ0V2l0aE5ld0xpbmVDaGFuZ2VkKGVsZW1lbnQpO1xuICAgICAgICB9LCB0aGlzLmlkKTtcbiAgICAgICAgdGhpcy5vbkVsZW1lbnRWaXNpYmlsaXR5Q2hhbmdlZCh0aGlzKTtcbiAgICB9O1xuICAgIFBhbmVsTW9kZWxCYXNlLnByb3RvdHlwZS5vblJlbW92ZUVsZW1lbnQgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgICAgICBlbGVtZW50LnBhcmVudCA9IG51bGw7XG4gICAgICAgIHRoaXMubWFya1F1ZXN0aW9uTGlzdERpcnR5KCk7XG4gICAgICAgIGVsZW1lbnQudW5yZWdpc3RlclByb3BlcnR5Q2hhbmdlZEhhbmRsZXJzKFtcInZpc2libGVcIiwgXCJpc1Zpc2libGVcIiwgXCJzdGFydFdpdGhOZXdMaW5lXCJdLCB0aGlzLmlkKTtcbiAgICAgICAgdGhpcy51cGRhdGVSb3dzT25FbGVtZW50UmVtb3ZlZChlbGVtZW50KTtcbiAgICAgICAgaWYgKHRoaXMuaXNSYW5kb21pemluZylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKCFlbGVtZW50LmlzUGFuZWwpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnN1cnZleSlcbiAgICAgICAgICAgICAgICB0aGlzLnN1cnZleS5xdWVzdGlvblJlbW92ZWQoZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zdXJ2ZXkpXG4gICAgICAgICAgICAgICAgdGhpcy5zdXJ2ZXkucGFuZWxSZW1vdmVkKGVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghIXRoaXMucmVtb3ZlRWxlbWVudENhbGxiYWNrKVxuICAgICAgICAgICAgdGhpcy5yZW1vdmVFbGVtZW50Q2FsbGJhY2soZWxlbWVudCk7XG4gICAgICAgIHRoaXMub25FbGVtZW50VmlzaWJpbGl0eUNoYW5nZWQodGhpcyk7XG4gICAgfTtcbiAgICBQYW5lbE1vZGVsQmFzZS5wcm90b3R5cGUub25FbGVtZW50VmlzaWJpbGl0eUNoYW5nZWQgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgICAgICBpZiAodGhpcy5pc0xvYWRpbmdGcm9tSnNvbiB8fCB0aGlzLmlzUmFuZG9taXppbmcpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMudXBkYXRlUm93c1Zpc2liaWxpdHkoZWxlbWVudCk7XG4gICAgICAgIHRoaXMuY2hpbGRWaXNpYmlsaXR5Q2hhbmdlZCgpO1xuICAgICAgICBpZiAoISF0aGlzLnBhcmVudCkge1xuICAgICAgICAgICAgdGhpcy5wYXJlbnQub25FbGVtZW50VmlzaWJpbGl0eUNoYW5nZWQodGhpcyk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFBhbmVsTW9kZWxCYXNlLnByb3RvdHlwZS5vbkVsZW1lbnRTdGFydFdpdGhOZXdMaW5lQ2hhbmdlZCA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICAgIHRoaXMub25Sb3dzQ2hhbmdlZCgpO1xuICAgIH07XG4gICAgUGFuZWxNb2RlbEJhc2UucHJvdG90eXBlLnVwZGF0ZVJvd3NWaXNpYmlsaXR5ID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICAgICAgdmFyIHJvd3MgPSB0aGlzLnJvd3M7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIHJvdyA9IHJvd3NbaV07XG4gICAgICAgICAgICBpZiAocm93LmVsZW1lbnRzLmluZGV4T2YoZWxlbWVudCkgPiAtMSkge1xuICAgICAgICAgICAgICAgIHJvdy51cGRhdGVWaXNpYmxlKCk7XG4gICAgICAgICAgICAgICAgaWYgKHJvdy52aXNpYmxlICYmICFyb3cuaXNOZWVkUmVuZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJvdy5pc05lZWRSZW5kZXIgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgUGFuZWxNb2RlbEJhc2UucHJvdG90eXBlLmNhbkJ1aWxkUm93cyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmlzTG9hZGluZ0Zyb21Kc29uICYmIHRoaXMuZ2V0Q2hpbGRyZW5MYXlvdXRUeXBlKCkgPT0gXCJyb3dcIjtcbiAgICB9O1xuICAgIFBhbmVsTW9kZWxCYXNlLnByb3RvdHlwZS5idWlsZFJvd3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5jYW5CdWlsZFJvd3MoKSlcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBBcnJheSgpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBlbCA9IHRoaXMuZWxlbWVudHNbaV07XG4gICAgICAgICAgICB2YXIgaXNOZXdSb3cgPSBpID09IDAgfHwgZWwuc3RhcnRXaXRoTmV3TGluZTtcbiAgICAgICAgICAgIHZhciByb3cgPSBpc05ld1JvdyA/IHRoaXMuY3JlYXRlUm93QW5kU2V0TGF6eShyZXN1bHQubGVuZ3RoKSA6IHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICBpZiAoaXNOZXdSb3cpXG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gocm93KTtcbiAgICAgICAgICAgIHJvdy5hZGRFbGVtZW50KGVsKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgcmVzdWx0W2ldLnVwZGF0ZVZpc2libGUoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gICAgUGFuZWxNb2RlbEJhc2UucHJvdG90eXBlLmlzTGF6eVJlbmRlckluUm93ID0gZnVuY3Rpb24gKHJvd0luZGV4KSB7XG4gICAgICAgIGlmICghdGhpcy5zdXJ2ZXkgfHwgIXRoaXMuc3VydmV5LmlzTGF6eVJlbmRlcmluZylcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIChyb3dJbmRleCA+PSBfc2V0dGluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1tcInNldHRpbmdzXCJdLmxhenlSZW5kZXIuZmlyc3RCYXRjaFNpemUgfHxcbiAgICAgICAgICAgICF0aGlzLmNhblJlbmRlckZpcnN0Um93cygpKTtcbiAgICB9O1xuICAgIFBhbmVsTW9kZWxCYXNlLnByb3RvdHlwZS5jYW5SZW5kZXJGaXJzdFJvd3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzUGFnZTtcbiAgICB9O1xuICAgIFBhbmVsTW9kZWxCYXNlLnByb3RvdHlwZS5nZXREcmFnRHJvcEluZm8gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBwYWdlID0gdGhpcy5nZXRQYWdlKHRoaXMucGFyZW50KTtcbiAgICAgICAgcmV0dXJuICEhcGFnZSA/IHBhZ2UuZ2V0RHJhZ0Ryb3BJbmZvKCkgOiB1bmRlZmluZWQ7XG4gICAgfTtcbiAgICBQYW5lbE1vZGVsQmFzZS5wcm90b3R5cGUudXBkYXRlUm93c09uRWxlbWVudFJlbW92ZWQgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgICAgICBpZiAoIXRoaXMuY2FuQnVpbGRSb3dzKCkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMudXBkYXRlUm93c1JlbW92ZUVsZW1lbnRGcm9tUm93KGVsZW1lbnQsIHRoaXMuZmluZFJvd0J5RWxlbWVudChlbGVtZW50KSk7XG4gICAgfTtcbiAgICBQYW5lbE1vZGVsQmFzZS5wcm90b3R5cGUudXBkYXRlUm93c1JlbW92ZUVsZW1lbnRGcm9tUm93ID0gZnVuY3Rpb24gKGVsZW1lbnQsIHJvdykge1xuICAgICAgICBpZiAoIXJvdyB8fCAhcm93LnBhbmVsKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIgZWxJbmRleCA9IHJvdy5lbGVtZW50cy5pbmRleE9mKGVsZW1lbnQpO1xuICAgICAgICBpZiAoZWxJbmRleCA8IDApXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHJvdy5lbGVtZW50cy5zcGxpY2UoZWxJbmRleCwgMSk7XG4gICAgICAgIGlmIChyb3cuZWxlbWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcm93LmVsZW1lbnRzWzBdLnN0YXJ0V2l0aE5ld0xpbmUgPSB0cnVlO1xuICAgICAgICAgICAgcm93LnVwZGF0ZVZpc2libGUoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChyb3cuaW5kZXggPj0gMCkge1xuICAgICAgICAgICAgICAgIHJvdy5wYW5lbC5yb3dzLnNwbGljZShyb3cuaW5kZXgsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBQYW5lbE1vZGVsQmFzZS5wcm90b3R5cGUuZmluZFJvd0J5RWxlbWVudCA9IGZ1bmN0aW9uIChlbCkge1xuICAgICAgICB2YXIgcm93cyA9IHRoaXMucm93cztcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAocm93c1tpXS5lbGVtZW50cy5pbmRleE9mKGVsKSA+IC0xKVxuICAgICAgICAgICAgICAgIHJldHVybiByb3dzW2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gICAgUGFuZWxNb2RlbEJhc2UucHJvdG90eXBlLmVsZW1lbnRXaWR0aENoYW5nZWQgPSBmdW5jdGlvbiAoZWwpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNMb2FkaW5nRnJvbUpzb24pXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciByb3cgPSB0aGlzLmZpbmRSb3dCeUVsZW1lbnQoZWwpO1xuICAgICAgICBpZiAoISFyb3cpIHtcbiAgICAgICAgICAgIHJvdy51cGRhdGVWaXNpYmxlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQYW5lbE1vZGVsQmFzZS5wcm90b3R5cGUsIFwicHJvY2Vzc2VkVGl0bGVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFJlbmRlcmVkVGl0bGUodGhpcy5sb2NUaXRsZS50ZXh0T3JIdG1sKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFBhbmVsTW9kZWxCYXNlLnByb3RvdHlwZS5nZXRSZW5kZXJlZFRpdGxlID0gZnVuY3Rpb24gKHN0cikge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0UHJvY2Vzc29yICE9IG51bGxcbiAgICAgICAgICAgID8gdGhpcy50ZXh0UHJvY2Vzc29yLnByb2Nlc3NUZXh0KHN0ciwgdHJ1ZSlcbiAgICAgICAgICAgIDogc3RyO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBhbmVsTW9kZWxCYXNlLnByb3RvdHlwZSwgXCJ2aXNpYmxlXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldHMgb3Igc2V0cyBwYW5lbC9wYWdlIHZpc2liaWxpdHkuXG4gICAgICAgICAqXG4gICAgICAgICAqIElmIHlvdSB3YW50IHRvIGRpc3BsYXkgb3IgaGlkZSBhIHN1cnZleSBlbGVtZW50IGJhc2VkIG9uIGEgY29uZGl0aW9uLCBzcGVjaWZ5IHRoZSBgdmlzaWJsZUlmYCBwcm9wZXJ0eS4gUmVmZXIgdG8gdGhlIGZvbGxvd2luZyBoZWxwIHRvcGljIGZvciBpbmZvcm1hdGlvbjogW0NvbmRpdGlvbmFsIFZpc2liaWxpdHldKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vZGVzaWduLXN1cnZleS1jb25kaXRpb25hbC1sb2dpYyNjb25kaXRpb25hbC12aXNpYmlsaXR5KS5cbiAgICAgICAgICogQHNlZSB2aXNpYmxlSWZcbiAgICAgICAgICogQHNlZSBpc1Zpc2libGVcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInZpc2libGVcIiwgdHJ1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IHRoaXMudmlzaWJsZSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJ2aXNpYmxlXCIsIHZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImlzVmlzaWJsZVwiLCB0aGlzLmlzVmlzaWJsZSk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNMb2FkaW5nRnJvbUpzb24pXG4gICAgICAgICAgICAgICAgdGhpcy5vblZpc2libGVDaGFuZ2VkKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBQYW5lbE1vZGVsQmFzZS5wcm90b3R5cGUub25IaWRpbmdDb250ZW50ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnF1ZXN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChxKSB7IHJldHVybiBxLm9uSGlkaW5nQ29udGVudCgpOyB9KTtcbiAgICB9O1xuICAgIFBhbmVsTW9kZWxCYXNlLnByb3RvdHlwZS5vblZpc2libGVDaGFuZ2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5pc1JhbmRvbWl6aW5nKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpc1Zpc2libGVcIiwgdGhpcy5pc1Zpc2libGUpO1xuICAgICAgICBpZiAoISF0aGlzLnN1cnZleSAmJiB0aGlzLnN1cnZleS5nZXRRdWVzdGlvbkNsZWFySWZJbnZpc2libGUoXCJkZWZhdWx0XCIpICE9PSBcIm5vbmVcIiAmJlxuICAgICAgICAgICAgIXRoaXMuaXNMb2FkaW5nRnJvbUpzb24pIHtcbiAgICAgICAgICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLnF1ZXN0aW9ucztcbiAgICAgICAgICAgIHZhciBpc1Zpc2libGUgPSB0aGlzLmlzVmlzaWJsZTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIHEgPSBxdWVzdGlvbnNbaV07XG4gICAgICAgICAgICAgICAgaWYgKCFpc1Zpc2libGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5jbGVhclZhbHVlSWZJbnZpc2libGUoXCJvbkhpZGRlbkNvbnRhaW5lclwiKTtcbiAgICAgICAgICAgICAgICAgICAgcS5vbkhpZGluZ0NvbnRlbnQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHEudXBkYXRlVmFsdWVXaXRoRGVmYXVsdHMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFBhbmVsTW9kZWxCYXNlLnByb3RvdHlwZS5ub3RpZnlTdGF0ZUNoYW5nZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUubm90aWZ5U3RhdGVDaGFuZ2VkLmNhbGwodGhpcyk7XG4gICAgICAgIGlmICh0aGlzLmlzQ29sbGFwc2VkKSB7XG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChxKSB7IHJldHVybiBxLm9uSGlkaW5nQ29udGVudCgpOyB9KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBhbmVsTW9kZWxCYXNlLnByb3RvdHlwZSwgXCJpc1Zpc2libGVcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHBhbmVsL3BhZ2UgaXMgdmlzaWJsZSBvciB0aGUgc3VydmV5IGlzIGN1cnJlbnRseSBpbiBkZXNpZ24gbW9kZS5cbiAgICAgICAgICpcbiAgICAgICAgICogSWYgeW91IHdhbnQgdG8gZGlzcGxheSBvciBoaWRlIGEgcXVlc3Rpb24gYmFzZWQgb24gYSBjb25kaXRpb24sIHNwZWNpZnkgdGhlIGB2aXNpYmxlSWZgIHByb3BlcnR5LiBSZWZlciB0byB0aGUgZm9sbG93aW5nIGhlbHAgdG9waWMgZm9yIGluZm9ybWF0aW9uOiBbQ29uZGl0aW9uYWwgVmlzaWJpbGl0eV0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9kZXNpZ24tc3VydmV5LWNvbmRpdGlvbmFsLWxvZ2ljI2NvbmRpdGlvbmFsLXZpc2liaWxpdHkpLlxuICAgICAgICAgKiBAc2VlIHZpc2libGVJZlxuICAgICAgICAgKiBAc2VlIHZpc2libGVcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXJlSW52aXNpYmxlRWxlbWVudHNTaG93aW5nIHx8IHRoaXMuZ2V0SXNQYWdlVmlzaWJsZShudWxsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFBhbmVsTW9kZWxCYXNlLnByb3RvdHlwZS5nZXRJc1BhZ2VWaXNpYmxlID0gZnVuY3Rpb24gKGV4Y2VwdGlvblF1ZXN0aW9uKSB7XG4gICAgICAgIGlmICghdGhpcy52aXNpYmxlKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmVsZW1lbnRzW2ldID09IGV4Y2VwdGlvblF1ZXN0aW9uKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgaWYgKHRoaXMuZWxlbWVudHNbaV0uaXNWaXNpYmxlKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuICAgIFBhbmVsTW9kZWxCYXNlLnByb3RvdHlwZS5zZXRWaXNpYmxlSW5kZXggPSBmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmlzaWJsZSB8fCBpbmRleCA8IDApIHtcbiAgICAgICAgICAgIHRoaXMucmVzZXRWaXNpYmxlSW5kZXhlcygpO1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sYXN0VmlzaWJsZUluZGV4ID0gaW5kZXg7XG4gICAgICAgIHZhciBzdGFydEluZGV4ID0gaW5kZXg7XG4gICAgICAgIGluZGV4ICs9IHRoaXMuYmVmb3JlU2V0VmlzaWJsZUluZGV4KGluZGV4KTtcbiAgICAgICAgdmFyIHBhbmVsU3RhcnRJbmRleCA9IHRoaXMuZ2V0UGFuZWxTdGFydEluZGV4KGluZGV4KTtcbiAgICAgICAgdmFyIHBhbmVsSW5kZXggPSBwYW5lbFN0YXJ0SW5kZXg7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgcGFuZWxJbmRleCArPSB0aGlzLmVsZW1lbnRzW2ldLnNldFZpc2libGVJbmRleChwYW5lbEluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc0NvbnRpbnVlTnVtYmVyaW5nKCkpIHtcbiAgICAgICAgICAgIGluZGV4ICs9IHBhbmVsSW5kZXggLSBwYW5lbFN0YXJ0SW5kZXg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGluZGV4IC0gc3RhcnRJbmRleDtcbiAgICB9O1xuICAgIFBhbmVsTW9kZWxCYXNlLnByb3RvdHlwZS51cGRhdGVWaXNpYmxlSW5kZXhlcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMubGFzdFZpc2libGVJbmRleCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLnJlc2V0VmlzaWJsZUluZGV4ZXMoKTtcbiAgICAgICAgdGhpcy5zZXRWaXNpYmxlSW5kZXgodGhpcy5sYXN0VmlzaWJsZUluZGV4KTtcbiAgICB9O1xuICAgIFBhbmVsTW9kZWxCYXNlLnByb3RvdHlwZS5yZXNldFZpc2libGVJbmRleGVzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudHNbaV0uc2V0VmlzaWJsZUluZGV4KC0xKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgUGFuZWxNb2RlbEJhc2UucHJvdG90eXBlLmJlZm9yZVNldFZpc2libGVJbmRleCA9IGZ1bmN0aW9uIChpbmRleCkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9O1xuICAgIFBhbmVsTW9kZWxCYXNlLnByb3RvdHlwZS5nZXRQYW5lbFN0YXJ0SW5kZXggPSBmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH07XG4gICAgUGFuZWxNb2RlbEJhc2UucHJvdG90eXBlLmlzQ29udGludWVOdW1iZXJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBhbmVsTW9kZWxCYXNlLnByb3RvdHlwZSwgXCJpc1JlYWRPbmx5XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgaXNQYXJlbnRSZWFkT25seSA9ICEhdGhpcy5wYXJlbnQgJiYgdGhpcy5wYXJlbnQuaXNSZWFkT25seTtcbiAgICAgICAgICAgIHZhciBpc1N1cnZleVJlYWRPbmx5ID0gISF0aGlzLnN1cnZleSAmJiB0aGlzLnN1cnZleS5pc0Rpc3BsYXlNb2RlO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVhZE9ubHkgfHwgaXNQYXJlbnRSZWFkT25seSB8fCBpc1N1cnZleVJlYWRPbmx5O1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUGFuZWxNb2RlbEJhc2UucHJvdG90eXBlLm9uUmVhZE9ubHlDaGFuZ2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBlbCA9IHRoaXMuZWxlbWVudHNbaV07XG4gICAgICAgICAgICBlbC5zZXRQcm9wZXJ0eVZhbHVlKFwiaXNSZWFkT25seVwiLCBlbC5pc1JlYWRPbmx5KTtcbiAgICAgICAgfVxuICAgICAgICBfc3VwZXIucHJvdG90eXBlLm9uUmVhZE9ubHlDaGFuZ2VkLmNhbGwodGhpcyk7XG4gICAgfTtcbiAgICBQYW5lbE1vZGVsQmFzZS5wcm90b3R5cGUudXBkYXRlRWxlbWVudENzcyA9IGZ1bmN0aW9uIChyZU5ldykge1xuICAgICAgICBfc3VwZXIucHJvdG90eXBlLnVwZGF0ZUVsZW1lbnRDc3MuY2FsbCh0aGlzLCByZU5ldyk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGVsID0gdGhpcy5lbGVtZW50c1tpXTtcbiAgICAgICAgICAgIGVsLnVwZGF0ZUVsZW1lbnRDc3MocmVOZXcpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUGFuZWxNb2RlbEJhc2UucHJvdG90eXBlLCBcImVuYWJsZUlmXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEEgQm9vbGVhbiBleHByZXNzaW9uLiBJZiBpdCBldmFsdWF0ZXMgdG8gYGZhbHNlYCwgdGhpcyBwYW5lbC9wYWdlIGJlY29tZXMgcmVhZC1vbmx5LlxuICAgICAgICAgKlxuICAgICAgICAgKiBBIHN1cnZleSBwYXJzZXMgYW5kIHJ1bnMgYWxsIGV4cHJlc3Npb25zIG9uIHN0YXJ0dXAuIElmIGFueSB2YWx1ZXMgdXNlZCBpbiB0aGUgZXhwcmVzc2lvbiBjaGFuZ2UsIHRoZSBzdXJ2ZXkgcmUtZXZhbHVhdGVzIGl0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBSZWZlciB0byB0aGUgZm9sbG93aW5nIGhlbHAgdG9waWMgZm9yIG1vcmUgaW5mb3JtYXRpb246IFtDb25kaXRpb25hbCBWaXNpYmlsaXR5XShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2Rlc2lnbi1zdXJ2ZXktY29uZGl0aW9uYWwtbG9naWMjY29uZGl0aW9uYWwtdmlzaWJpbGl0eSlcbiAgICAgICAgICogQHNlZSByZWFkT25seVxuICAgICAgICAgKiBAc2VlIGlzUmVhZE9ubHlcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImVuYWJsZUlmXCIsIFwiXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImVuYWJsZUlmXCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICAvKipcbiAgICAgKiBBZGRzIGEgc3VydmV5IGVsZW1lbnQgKHF1ZXN0aW9uIG9yIHBhbmVsKSB0byB0aGlzIHBhbmVsL3BhZ2UuIFJldHVybnMgYHRydWVgIGlmIHRoZSBlbGVtZW50IHdhcyBhZGRlZCBzdWNjZXNzZnVsbHk7IGBmYWxzZWAgb3RoZXJ3aXNlLlxuICAgICAqIEBwYXJhbSBlbGVtZW50IEEgc3VydmV5IGVsZW1lbnQgdG8gYWRkLlxuICAgICAqIEBwYXJhbSBpbmRleCBBIGRlc2lyZWQgaW5kZXggb2YgdGhpcyBlbGVtZW50IGluIHRoZSBgZWxlbWVudHNgIGFycmF5LlxuICAgICAqIEBzZWUgYWRkTmV3UXVlc3Rpb25cbiAgICAgKiBAc2VlIGFkZE5ld1BhbmVsXG4gICAgICovXG4gICAgUGFuZWxNb2RlbEJhc2UucHJvdG90eXBlLmFkZEVsZW1lbnQgPSBmdW5jdGlvbiAoZWxlbWVudCwgaW5kZXgpIHtcbiAgICAgICAgaWYgKGluZGV4ID09PSB2b2lkIDApIHsgaW5kZXggPSAtMTsgfVxuICAgICAgICBpZiAoIXRoaXMuY2FuQWRkRWxlbWVudChlbGVtZW50KSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLmVsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50cy5wdXNoKGVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50cy5zcGxpY2UoaW5kZXgsIDAsIGVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG4gICAgUGFuZWxNb2RlbEJhc2UucHJvdG90eXBlLmluc2VydEVsZW1lbnRBZnRlciA9IGZ1bmN0aW9uIChlbGVtZW50LCBhZnRlcikge1xuICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmVsZW1lbnRzLmluZGV4T2YoYWZ0ZXIpO1xuICAgICAgICBpZiAoaW5kZXggPj0gMClcbiAgICAgICAgICAgIHRoaXMuYWRkRWxlbWVudChlbGVtZW50LCBpbmRleCArIDEpO1xuICAgIH07XG4gICAgUGFuZWxNb2RlbEJhc2UucHJvdG90eXBlLmluc2VydEVsZW1lbnRCZWZvcmUgPSBmdW5jdGlvbiAoZWxlbWVudCwgYmVmb3JlKSB7XG4gICAgICAgIHZhciBpbmRleCA9IHRoaXMuZWxlbWVudHMuaW5kZXhPZihiZWZvcmUpO1xuICAgICAgICBpZiAoaW5kZXggPj0gMClcbiAgICAgICAgICAgIHRoaXMuYWRkRWxlbWVudChlbGVtZW50LCBpbmRleCk7XG4gICAgfTtcbiAgICBQYW5lbE1vZGVsQmFzZS5wcm90b3R5cGUuY2FuQWRkRWxlbWVudCA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICAgIHJldHVybiAoISFlbGVtZW50ICYmIGVsZW1lbnQuaXNMYXlvdXRUeXBlU3VwcG9ydGVkKHRoaXMuZ2V0Q2hpbGRyZW5MYXlvdXRUeXBlKCkpKTtcbiAgICB9O1xuICAgIFBhbmVsTW9kZWxCYXNlLnByb3RvdHlwZS5hZGRRdWVzdGlvbiA9IGZ1bmN0aW9uIChxdWVzdGlvbiwgaW5kZXgpIHtcbiAgICAgICAgaWYgKGluZGV4ID09PSB2b2lkIDApIHsgaW5kZXggPSAtMTsgfVxuICAgICAgICByZXR1cm4gdGhpcy5hZGRFbGVtZW50KHF1ZXN0aW9uLCBpbmRleCk7XG4gICAgfTtcbiAgICBQYW5lbE1vZGVsQmFzZS5wcm90b3R5cGUuYWRkUGFuZWwgPSBmdW5jdGlvbiAocGFuZWwsIGluZGV4KSB7XG4gICAgICAgIGlmIChpbmRleCA9PT0gdm9pZCAwKSB7IGluZGV4ID0gLTE7IH1cbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkRWxlbWVudChwYW5lbCwgaW5kZXgpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBxdWVzdGlvbiBvZiBhIGdpdmVuIHR5cGUgYW5kIGFkZHMgaXQgdG8gdGhlIGBlbGVtZW50c2AgYXJyYXkgYXQgYSBzcGVjaWZpZWQgaW5kZXguXG4gICAgICpcbiAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGBudWxsYCBpZiB0aGUgcXVlc3Rpb24gY2Fubm90IGJlIGNyZWF0ZWQgb3IgYWRkZWQgdG8gdGhpcyBwYW5lbC9wYWdlOyBvdGhlcndpc2UsIHRoZSBtZXRob2QgcmV0dXJucyB0aGUgY3JlYXRlZCBxdWVzdGlvbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBxdWVzdGlvblR5cGUgQSBbcXVlc3Rpb24gdHlwZV0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9xdWVzdGlvbiNnZXRUeXBlKS5cbiAgICAgKiBAcGFyYW0gbmFtZSBBIHF1ZXN0aW9uIG5hbWUuXG4gICAgICogQHBhcmFtIGluZGV4IEEgZGVzaXJlZCBpbmRleCBvZiB0aGUgbmV3IHF1ZXN0aW9uIGluIHRoZSBgZWxlbWVudHNgIGFycmF5LlxuICAgICAqIEBzZWUgZWxlbWVudHNcbiAgICAgKiBAc2VlIGFkZEVsZW1lbnRcbiAgICAgKi9cbiAgICBQYW5lbE1vZGVsQmFzZS5wcm90b3R5cGUuYWRkTmV3UXVlc3Rpb24gPSBmdW5jdGlvbiAocXVlc3Rpb25UeXBlLCBuYW1lLCBpbmRleCkge1xuICAgICAgICBpZiAobmFtZSA9PT0gdm9pZCAwKSB7IG5hbWUgPSBudWxsOyB9XG4gICAgICAgIGlmIChpbmRleCA9PT0gdm9pZCAwKSB7IGluZGV4ID0gLTE7IH1cbiAgICAgICAgdmFyIHF1ZXN0aW9uID0gX3F1ZXN0aW9uZmFjdG9yeV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fW1wiUXVlc3Rpb25GYWN0b3J5XCJdLkluc3RhbmNlLmNyZWF0ZVF1ZXN0aW9uKHF1ZXN0aW9uVHlwZSwgbmFtZSk7XG4gICAgICAgIGlmICghdGhpcy5hZGRRdWVzdGlvbihxdWVzdGlvbiwgaW5kZXgpKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIHJldHVybiBxdWVzdGlvbjtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgcGFuZWwgYW5kIGFkZHMgaXQgdG8gdGhlIGVuZCBvZiB0aGUgYGVsZW1lbnRzYCBhcnJheS5cbiAgICAgKlxuICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYG51bGxgIGlmIHRoZSBwYW5lbCBjYW5ub3QgYmUgY3JlYXRlZCBvciBhZGRlZCB0byB0aGlzIHBhbmVsL3BhZ2U7IG90aGVyd2lzZSwgdGhlIG1ldGhvZCByZXR1cm5zIHRoZSBjcmVhdGVkIHBhbmVsLlxuICAgICAqIEBwYXJhbSBuYW1lIEEgcGFuZWwgbmFtZS5cbiAgICAgKiBAc2VlIGVsZW1lbnRzXG4gICAgICogQHNlZSBhZGRFbGVtZW50XG4gICAgICovXG4gICAgUGFuZWxNb2RlbEJhc2UucHJvdG90eXBlLmFkZE5ld1BhbmVsID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgaWYgKG5hbWUgPT09IHZvaWQgMCkgeyBuYW1lID0gbnVsbDsgfVxuICAgICAgICB2YXIgcGFuZWwgPSB0aGlzLmNyZWF0ZU5ld1BhbmVsKG5hbWUpO1xuICAgICAgICBpZiAoIXRoaXMuYWRkUGFuZWwocGFuZWwpKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIHJldHVybiBwYW5lbDtcbiAgICB9O1xuICAgIFBhbmVsTW9kZWxCYXNlLnByb3RvdHlwZS5pbmRleE9mID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudHMuaW5kZXhPZihlbGVtZW50KTtcbiAgICB9O1xuICAgIFBhbmVsTW9kZWxCYXNlLnByb3RvdHlwZS5jcmVhdGVOZXdQYW5lbCA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIHZhciByZXMgPSBfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiU2VyaWFsaXplclwiXS5jcmVhdGVDbGFzcyhcInBhbmVsXCIpO1xuICAgICAgICByZXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBEZWxldGVzIGEgc3VydmV5IGVsZW1lbnQgKHF1ZXN0aW9uIG9yIHBhbmVsKSBmcm9tIHRoaXMgcGFuZWwvcGFnZS4gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVsZW1lbnQgd2FzIGRlbGV0ZWQgc3VjY2Vzc2Z1bGx5OyBgZmFsc2VgIG90aGVyd2lzZS5cbiAgICAgKiBAcGFyYW0gZWxlbWVudCBBIHN1cnZleSBlbGVtZW50IHRvIGRlbGV0ZS5cbiAgICAgKiBAc2VlIGVsZW1lbnRzXG4gICAgICovXG4gICAgUGFuZWxNb2RlbEJhc2UucHJvdG90eXBlLnJlbW92ZUVsZW1lbnQgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmVsZW1lbnRzLmluZGV4T2YoZWxlbWVudCk7XG4gICAgICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmVsZW1lbnRzW2ldLnJlbW92ZUVsZW1lbnQoZWxlbWVudCkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZWxlbWVudHMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgICBQYW5lbE1vZGVsQmFzZS5wcm90b3R5cGUucmVtb3ZlUXVlc3Rpb24gPSBmdW5jdGlvbiAocXVlc3Rpb24pIHtcbiAgICAgICAgdGhpcy5yZW1vdmVFbGVtZW50KHF1ZXN0aW9uKTtcbiAgICB9O1xuICAgIFBhbmVsTW9kZWxCYXNlLnByb3RvdHlwZS5ydW5Db25kaXRpb24gPSBmdW5jdGlvbiAodmFsdWVzLCBwcm9wZXJ0aWVzKSB7XG4gICAgICAgIGlmICh0aGlzLmlzRGVzaWduTW9kZSB8fCB0aGlzLmlzTG9hZGluZ0Zyb21Kc29uKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIgZWxlbWVudHMgPSB0aGlzLmVsZW1lbnRzLnNsaWNlKCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGVsZW1lbnRzW2ldLnJ1bkNvbmRpdGlvbih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucnVuQ29uZGl0aW9uQ29yZSh2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgIH07XG4gICAgUGFuZWxNb2RlbEJhc2UucHJvdG90eXBlLm9uQW55VmFsdWVDaGFuZ2VkID0gZnVuY3Rpb24gKG5hbWUsIHF1ZXN0aW9uTmFtZSkge1xuICAgICAgICB2YXIgZWxzID0gdGhpcy5lbGVtZW50cztcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGVsc1tpXS5vbkFueVZhbHVlQ2hhbmdlZChuYW1lLCBxdWVzdGlvbk5hbWUpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBQYW5lbE1vZGVsQmFzZS5wcm90b3R5cGUuY2hlY2tCaW5kaW5ncyA9IGZ1bmN0aW9uICh2YWx1ZU5hbWUsIHZhbHVlKSB7XG4gICAgICAgIHZhciBlbHMgPSB0aGlzLmVsZW1lbnRzO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVscy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgZWxzW2ldLmNoZWNrQmluZGluZ3ModmFsdWVOYW1lLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFBhbmVsTW9kZWxCYXNlLnByb3RvdHlwZS5kcmFnRHJvcEFkZFRhcmdldCA9IGZ1bmN0aW9uIChkcmFnRHJvcEluZm8pIHtcbiAgICAgICAgdGhpcy5kcmFnRHJvcFBhbmVsSGVscGVyLmRyYWdEcm9wQWRkVGFyZ2V0KGRyYWdEcm9wSW5mbyk7XG4gICAgfTtcbiAgICBQYW5lbE1vZGVsQmFzZS5wcm90b3R5cGUuZHJhZ0Ryb3BGaW5kUm93ID0gZnVuY3Rpb24gKGZpbmRFbGVtZW50KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRyYWdEcm9wUGFuZWxIZWxwZXIuZHJhZ0Ryb3BGaW5kUm93KGZpbmRFbGVtZW50KTtcbiAgICB9O1xuICAgIFBhbmVsTW9kZWxCYXNlLnByb3RvdHlwZS5kcmFnRHJvcE1vdmVFbGVtZW50ID0gZnVuY3Rpb24gKHNyYywgdGFyZ2V0LCB0YXJnZXRJbmRleCkge1xuICAgICAgICB0aGlzLmRyYWdEcm9wUGFuZWxIZWxwZXIuZHJhZ0Ryb3BNb3ZlRWxlbWVudChzcmMsIHRhcmdldCwgdGFyZ2V0SW5kZXgpO1xuICAgIH07XG4gICAgUGFuZWxNb2RlbEJhc2UucHJvdG90eXBlLm5lZWRSZXNwb25zaXZlV2lkdGggPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5lbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICBpZiAoZS5uZWVkUmVzcG9uc2l2ZVdpZHRoKCkpXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucm93cy5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7XG4gICAgICAgICAgICBpZiAoci5lbGVtZW50cy5sZW5ndGggPiAxKVxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBhbmVsTW9kZWxCYXNlLnByb3RvdHlwZSwgXCJoYXNEZXNjcmlwdGlvblVuZGVyVGl0bGVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmhhc0Rlc2NyaXB0aW9uO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBhbmVsTW9kZWxCYXNlLnByb3RvdHlwZSwgXCJjc3NIZWFkZXJcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNzc0NsYXNzZXMucGFuZWwuaGVhZGVyO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBhbmVsTW9kZWxCYXNlLnByb3RvdHlwZSwgXCJjc3NEZXNjcmlwdGlvblwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3NzQ2xhc3Nlcy5wYW5lbC5kZXNjcmlwdGlvbjtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQYW5lbE1vZGVsQmFzZS5wcm90b3R5cGUsIFwicXVlc3Rpb25FcnJvckxvY2F0aW9uXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB0aGUgZXJyb3IgbWVzc2FnZSBwb3NpdGlvbiBmb3IgcXVlc3Rpb25zIHRoYXQgYmVsb25nIHRvIHRoaXMgcGFnZS9wYW5lbC5cbiAgICAgICAgICpcbiAgICAgICAgICogVXNlIHRoaXMgcHJvcGVydHkgdG8gb3ZlcnJpZGUgdGhlIFtgcXVlc3Rpb25FcnJvckxvY2F0aW9uYF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL3N1cnZleS1kYXRhLW1vZGVsI3F1ZXN0aW9uRXJyb3JMb2NhdGlvbikgcHJvcGVydHkgc3BlY2lmaWVkIGZvciB0aGUgc3VydmV5LiBZb3UgY2FuIGFsc28gc2V0IHRoZSBbYGVycm9yTG9jYXRpb25gXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL3F1ZXN0aW9uI2Vycm9yTG9jYXRpb24pIHByb3BlcnR5IGZvciBpbmRpdmlkdWFsIHF1ZXN0aW9ucy5cbiAgICAgICAgICpcbiAgICAgICAgICogUG9zc2libGUgdmFsdWVzOlxuICAgICAgICAgKlxuICAgICAgICAgKiAtIGBcImRlZmF1bHRcImAgKGRlZmF1bHQpIC0gSW5oZXJpdHMgdGhlIHNldHRpbmcgZnJvbSB0aGUgYHF1ZXN0aW9uRXJyb3JMb2NhdGlvbmAgcHJvcGVydHkgc3BlY2lmaWVkIGZvciB0aGUgc3VydmV5LlxuICAgICAgICAgKiAtIGBcInRvcFwiYCAtIERpc3BsYXlzIGVycm9yIG1lc3NhZ2VzIGFib3ZlIHF1ZXN0aW9ucy5cbiAgICAgICAgICogLSBgXCJib3R0b21cImAgLSBEaXNwbGF5cyBlcnJvciBtZXNzYWdlcyBiZWxvdyBxdWVzdGlvbnMuXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJxdWVzdGlvbkVycm9yTG9jYXRpb25cIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicXVlc3Rpb25FcnJvckxvY2F0aW9uXCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBQYW5lbE1vZGVsQmFzZS5wcm90b3R5cGUuZ2V0UXVlc3Rpb25FcnJvckxvY2F0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5xdWVzdGlvbkVycm9yTG9jYXRpb24gIT09IFwiZGVmYXVsdFwiKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucXVlc3Rpb25FcnJvckxvY2F0aW9uO1xuICAgICAgICBpZiAodGhpcy5wYXJlbnQpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQuZ2V0UXVlc3Rpb25FcnJvckxvY2F0aW9uKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnN1cnZleSA/IHRoaXMuc3VydmV5LnF1ZXN0aW9uRXJyb3JMb2NhdGlvbiA6IFwidG9wXCI7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUGFuZWxNb2RlbEJhc2UucHJvdG90eXBlLCBcIm5vXCIsIHtcbiAgICAgICAgLy9JVGl0bGVPd25lclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFwiXCI7IH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBQYW5lbE1vZGVsQmFzZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG4gICAgICAgIGlmICh0aGlzLnJvd3MpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5yb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yb3dzW2ldLmRpc3Bvc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucm93cy5zcGxpY2UoMCwgdGhpcy5yb3dzLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnRzW2ldLmRpc3Bvc2UoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVsZW1lbnRzLnNwbGljZSgwLCB0aGlzLmVsZW1lbnRzLmxlbmd0aCk7XG4gICAgfTtcbiAgICBQYW5lbE1vZGVsQmFzZS5wYW5lbENvdW50ZXIgPSAxMDA7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicHJvcGVydHlcIl0pKHsgZGVmYXVsdFZhbHVlOiB0cnVlIH0pXG4gICAgXSwgUGFuZWxNb2RlbEJhc2UucHJvdG90eXBlLCBcInNob3dUaXRsZVwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QoX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInByb3BlcnR5XCJdKSh7IGRlZmF1bHRWYWx1ZTogdHJ1ZSB9KVxuICAgIF0sIFBhbmVsTW9kZWxCYXNlLnByb3RvdHlwZSwgXCJzaG93RGVzY3JpcHRpb25cIiwgdm9pZCAwKTtcbiAgICByZXR1cm4gUGFuZWxNb2RlbEJhc2U7XG59KF9zdXJ2ZXlfZWxlbWVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiU3VydmV5RWxlbWVudFwiXSkpO1xuXG4vKipcbiAqIEEgY2xhc3MgdGhhdCBkZXNjcmliZXMgdGhlIFBhbmVsIGNvbnRhaW5lciBlbGVtZW50LlxuICpcbiAqIEEgcGFuZWwgY2FuIGNvbnRhaW4gcXVlc3Rpb25zIGFuZCBvdGhlciBwYW5lbHMuIFJlZmVyIHRvIHRoZSBmb2xsb3dpbmcgaGVscCB0b3BpYyBmb3IgYW4gaWxsdXN0cmF0aW9uOiBbU3VydmV5IFN0cnVjdHVyZV0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9kZXNpZ24tc3VydmV5LWNyZWF0ZS1hLXNpbXBsZS1zdXJ2ZXkjc3VydmV5LXN0cnVjdHVyZSkuXG4gKlxuICogW1ZpZXcgRGVtb10oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZXhhbXBsZXMvcXVlc3Rpb250eXBlLXBhbmVsLyAobGlua1N0eWxlKSlcbiAqL1xudmFyIFBhbmVsTW9kZWwgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFBhbmVsTW9kZWwsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gUGFuZWxNb2RlbChuYW1lKSB7XG4gICAgICAgIGlmIChuYW1lID09PSB2b2lkIDApIHsgbmFtZSA9IFwiXCI7IH1cbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbmFtZSkgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuY3JlYXRlTmV3QXJyYXkoXCJmb290ZXJBY3Rpb25zXCIpO1xuICAgICAgICBfdGhpcy5yZWdpc3RlclByb3BlcnR5Q2hhbmdlZEhhbmRsZXJzKFtcIndpZHRoXCJdLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoISFfdGhpcy5wYXJlbnQpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5wYXJlbnQuZWxlbWVudFdpZHRoQ2hhbmdlZChfdGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBfdGhpcy5yZWdpc3RlclByb3BlcnR5Q2hhbmdlZEhhbmRsZXJzKFtcImluZGVudFwiLCBcImlubmVySW5kZW50XCIsIFwicmlnaHRJbmRlbnRcIl0sIGZ1bmN0aW9uICgpIHsgX3RoaXMub25JbmRlbnRDaGFuZ2VkKCk7IH0pO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFBhbmVsTW9kZWwucHJvdG90eXBlLmdldFR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBcInBhbmVsXCI7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUGFuZWxNb2RlbC5wcm90b3R5cGUsIFwiY29udGVudElkXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pZCArIFwiX2NvbnRlbnRcIjtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFBhbmVsTW9kZWwucHJvdG90eXBlLmdldFN1cnZleSA9IGZ1bmN0aW9uIChsaXZlKSB7XG4gICAgICAgIGlmIChsaXZlID09PSB2b2lkIDApIHsgbGl2ZSA9IGZhbHNlOyB9XG4gICAgICAgIGlmIChsaXZlKSB7XG4gICAgICAgICAgICByZXR1cm4gISF0aGlzLnBhcmVudCA/IHRoaXMucGFyZW50LmdldFN1cnZleShsaXZlKSA6IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUuZ2V0U3VydmV5LmNhbGwodGhpcywgbGl2ZSk7XG4gICAgfTtcbiAgICBQYW5lbE1vZGVsLnByb3RvdHlwZS5vblN1cnZleUxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUub25TdXJ2ZXlMb2FkLmNhbGwodGhpcyk7XG4gICAgICAgIHRoaXMub25JbmRlbnRDaGFuZ2VkKCk7XG4gICAgfTtcbiAgICBQYW5lbE1vZGVsLnByb3RvdHlwZS5vblNldERhdGEgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUub25TZXREYXRhLmNhbGwodGhpcyk7XG4gICAgICAgIHRoaXMub25JbmRlbnRDaGFuZ2VkKCk7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUGFuZWxNb2RlbC5wcm90b3R5cGUsIFwiaXNQYW5lbFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUGFuZWxNb2RlbC5wcm90b3R5cGUsIFwicGFnZVwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIGEgcGFnZSB0byB3aGljaCB0aGUgcGFuZWwgYmVsb25ncyBhbmQgYWxsb3dzIHlvdSB0byBtb3ZlIHRoaXMgcGFuZWwgdG8gYSBkaWZmZXJlbnQgcGFnZS5cbiAgICAgICAgICogQHNlZSBQYW5lbE1vZGVsQmFzZS5wYXJlbnRcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UGFnZSh0aGlzLnBhcmVudCk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQYWdlKHRoaXMucGFyZW50LCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUGFuZWxNb2RlbC5wcm90b3R5cGUucmVtb3ZlRnJvbVBhcmVudCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCEhdGhpcy5wYXJlbnQpIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlU2VsZkZyb21MaXN0KHRoaXMucGFyZW50LmVsZW1lbnRzKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgUGFuZWxNb2RlbC5wcm90b3R5cGUubW92ZVRvID0gZnVuY3Rpb24gKGNvbnRhaW5lciwgaW5zZXJ0QmVmb3JlKSB7XG4gICAgICAgIGlmIChpbnNlcnRCZWZvcmUgPT09IHZvaWQgMCkgeyBpbnNlcnRCZWZvcmUgPSBudWxsOyB9XG4gICAgICAgIHJldHVybiB0aGlzLm1vdmVUb0Jhc2UodGhpcy5wYXJlbnQsIGNvbnRhaW5lciwgaW5zZXJ0QmVmb3JlKTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQYW5lbE1vZGVsLnByb3RvdHlwZSwgXCJ2aXNpYmxlSW5kZXhcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJucyB0aGUgdmlzaWJsZSBpbmRleCBvZiB0aGUgcGFuZWwgaW4gdGhlIHN1cnZleS4gQ29tbW9ubHkgaXQgaXMgLTEgYW5kIGl0IGRvZXNuJ3Qgc2hvdy5cbiAgICAgICAgICogWW91IGhhdmUgdG8gc2V0IHNob3dOdW1iZXIgdG8gdHJ1ZSB0byBzaG93IGluZGV4L251bWJlcmluZyBmb3IgdGhlIFBhbmVsXG4gICAgICAgICAqIEBzZWUgc2hvd051bWJlclxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwidmlzaWJsZUluZGV4XCIsIC0xKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFBhbmVsTW9kZWwucHJvdG90eXBlLmdldFRpdGxlT3duZXIgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQYW5lbE1vZGVsLnByb3RvdHlwZSwgXCJzaG93TnVtYmVyXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB3aGV0aGVyIHRvIHNob3cgdGhlIHBhbmVsIG51bWJlciBpbiB0aGUgdGl0bGUuXG4gICAgICAgICAqXG4gICAgICAgICAqIERlZmF1bHQgdmFsdWU6IGBmYWxzZWBcbiAgICAgICAgICogQHNlZSBTdXJ2ZXlNb2RlbC5zaG93UXVlc3Rpb25OdW1iZXJzXG4gICAgICAgICAqIEBzZWUgU3VydmV5TW9kZWwucXVlc3Rpb25UaXRsZVBhdHRlcm5cbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInNob3dOdW1iZXJcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwic2hvd051bWJlclwiLCB2YWwpO1xuICAgICAgICAgICAgdGhpcy5ub3RpZnlTdXJ2ZXlPblZpc2liaWxpdHlDaGFuZ2VkKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUGFuZWxNb2RlbC5wcm90b3R5cGUsIFwic2hvd1F1ZXN0aW9uTnVtYmVyc1wiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXRzIG9yIHNldHMgYSB2YWx1ZSB0aGF0IHNwZWNpZmllcyBob3cgdGhlIGVsZW1lbnRzIG51bWJlcnMgaW5zaWRlIHBhbmVsIGFyZSBkaXNwbGF5ZWQuXG4gICAgICAgICAqXG4gICAgICAgICAqIFRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgYXZhaWxhYmxlOlxuICAgICAgICAgKlxuICAgICAgICAgKiAtIGBkZWZhdWx0YCAtIGRpc3BsYXkgcXVlc3Rpb25zIG51bWJlcnMgYXMgZGVmaW5lZCBpbiBwYXJlbnQgcGFuZWwgb3Igc3VydmV5XG4gICAgICAgICAqIC0gYG9ucGFuZWxgIC0gZGlzcGxheSBxdWVzdGlvbnMgbnVtYmVycywgc3RhcnQgbnVtYmVyaW5nIGZyb20gYmVnaW5uaW5nIG9mIHRoaXMgcGFnZVxuICAgICAgICAgKiAtIGBvZmZgIC0gdHVybiBvZmYgdGhlIG51bWJlcmluZyBmb3IgcXVlc3Rpb25zIHRpdGxlc1xuICAgICAgICAgKiBAc2VlIHNob3dOdW1iZXJcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInNob3dRdWVzdGlvbk51bWJlcnNcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzaG93UXVlc3Rpb25OdW1iZXJzXCIsIHZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMubm90aWZ5U3VydmV5T25WaXNpYmlsaXR5Q2hhbmdlZCgpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBhbmVsTW9kZWwucHJvdG90eXBlLCBcInF1ZXN0aW9uU3RhcnRJbmRleFwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgYSBudW1iZXIgb3IgbGV0dGVyIHVzZWQgdG8gc3RhcnQgbnVtYmVyaW5nIG9mIGVsZW1lbnRzIGluc2lkZSB0aGUgcGFuZWwuXG4gICAgICAgICAqXG4gICAgICAgICAqIFlvdSBjYW4gaW5jbHVkZSBkZXNpcmVkIHByZWZpeGVzIGFuZCBwb3N0Zml4ZXMgYWxvbmdzaWRlIHRoZSBudW1iZXIgb3IgbGV0dGVyOlxuICAgICAgICAgKlxuICAgICAgICAgKiBgYGBqc1xuICAgICAgICAgKiBcInF1ZXN0aW9uU3RhcnRJbmRleFwiOiBcImEuXCIsIC8vIGEuLCBiLiwgYy4sIC4uLlxuICAgICAgICAgKiBcInF1ZXN0aW9uU3RhcnRJbmRleFwiOiBcIiMzXCIsIC8vICMzLCAjNCwgIzUsIC4uLlxuICAgICAgICAgKiBcInF1ZXN0aW9uU3RhcnRJbmRleFwiOiBcIihCKS5cIiAvLyAoQikuLCAoQykuLCAoRCkuLCAuLi5cbiAgICAgICAgICogYGBgXG4gICAgICAgICAqIERlZmF1bHQgdmFsdWU6IGBcIjEuXCJgIChpbmhlcml0ZWQgZnJvbSBgU3VydmV5TW9kZWxgJ3MgYHF1ZXN0aW9uU3RhcnRJbmRleGAgcHJvcGVydHkpXG4gICAgICAgICAqIEBzZWUgU3VydmV5TW9kZWwucXVlc3Rpb25TdGFydEluZGV4XG4gICAgICAgICAqIEBzZWUgc2hvd1F1ZXN0aW9uTnVtYmVyc1xuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicXVlc3Rpb25TdGFydEluZGV4XCIsIFwiXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInF1ZXN0aW9uU3RhcnRJbmRleFwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUGFuZWxNb2RlbC5wcm90b3R5cGUuZ2V0UXVlc3Rpb25TdGFydEluZGV4ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoISF0aGlzLnF1ZXN0aW9uU3RhcnRJbmRleClcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uU3RhcnRJbmRleDtcbiAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUuZ2V0UXVlc3Rpb25TdGFydEluZGV4LmNhbGwodGhpcyk7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUGFuZWxNb2RlbC5wcm90b3R5cGUsIFwibm9cIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogQSBxdWVzdGlvbiBudW1iZXIgb3IgbGV0dGVyIChkZXBlbmRzIG9uIHRoZSBgcXVlc3Rpb25TdGFydEluZGV4YCBwcm9wZXJ0eSkuXG4gICAgICAgICAqXG4gICAgICAgICAqIFdoZW4gdGhlIHF1ZXN0aW9uIG51bWJlciwgdGl0bGUsIG9yIHRoZSBlbnRpcmUgcXVlc3Rpb24gaXMgaW52aXNpYmxlLCB0aGlzIHByb3BlcnR5IHJldHVybnMgYW4gZW1wdHkgc3RyaW5nLlxuICAgICAgICAgKiBAc2VlIHF1ZXN0aW9uU3RhcnRJbmRleFxuICAgICAgICAgKiBAc2VlIHNob3dOdW1iZXJcbiAgICAgICAgICogQHNlZSB2aXNpYmxlSWZcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIm5vXCIsIFwiXCIpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUGFuZWxNb2RlbC5wcm90b3R5cGUuc2V0Tm8gPSBmdW5jdGlvbiAodmlzaWJsZUluZGV4KSB7XG4gICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm5vXCIsIF9oZWxwZXJzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJIZWxwZXJzXCJdLmdldE51bWJlckJ5SW5kZXgodGhpcy52aXNpYmxlSW5kZXgsIHRoaXMuZ2V0U3RhcnRJbmRleCgpKSk7XG4gICAgfTtcbiAgICBQYW5lbE1vZGVsLnByb3RvdHlwZS5jcmVhdGVMb2NUaXRsZVByb3BlcnR5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgbG9jVGl0bGVWYWx1ZSA9IF9zdXBlci5wcm90b3R5cGUuY3JlYXRlTG9jVGl0bGVQcm9wZXJ0eS5jYWxsKHRoaXMpO1xuICAgICAgICBsb2NUaXRsZVZhbHVlLm9uR2V0VGV4dENhbGxiYWNrID0gZnVuY3Rpb24gKHRleHQpIHtcbiAgICAgICAgICAgIGlmICghdGV4dCAmJiAoX3RoaXMuaXNFeHBhbmRlZCB8fCBfdGhpcy5pc0NvbGxhcHNlZCkpIHtcbiAgICAgICAgICAgICAgICB0ZXh0ID0gX3RoaXMubmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0ZXh0O1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gbG9jVGl0bGVWYWx1ZTtcbiAgICB9O1xuICAgIFBhbmVsTW9kZWwucHJvdG90eXBlLmJlZm9yZVNldFZpc2libGVJbmRleCA9IGZ1bmN0aW9uIChpbmRleCkge1xuICAgICAgICB2YXIgdmlzaWJsZUluZGV4ID0gLTE7XG4gICAgICAgIGlmICh0aGlzLnNob3dOdW1iZXIgJiYgKHRoaXMuaXNEZXNpZ25Nb2RlIHx8ICF0aGlzLmxvY1RpdGxlLmlzRW1wdHkpKSB7XG4gICAgICAgICAgICB2aXNpYmxlSW5kZXggPSBpbmRleDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJ2aXNpYmxlSW5kZXhcIiwgdmlzaWJsZUluZGV4KTtcbiAgICAgICAgdGhpcy5zZXRObyh2aXNpYmxlSW5kZXgpO1xuICAgICAgICByZXR1cm4gdmlzaWJsZUluZGV4IDwgMCA/IDAgOiAxO1xuICAgIH07XG4gICAgUGFuZWxNb2RlbC5wcm90b3R5cGUuZ2V0UGFuZWxTdGFydEluZGV4ID0gZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgIGlmICh0aGlzLnNob3dRdWVzdGlvbk51bWJlcnMgPT0gXCJvZmZcIilcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgaWYgKHRoaXMuc2hvd1F1ZXN0aW9uTnVtYmVycyA9PSBcIm9ucGFuZWxcIilcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICByZXR1cm4gaW5kZXg7XG4gICAgfTtcbiAgICBQYW5lbE1vZGVsLnByb3RvdHlwZS5pc0NvbnRpbnVlTnVtYmVyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuc2hvd1F1ZXN0aW9uTnVtYmVycyAhPSBcIm9mZlwiICYmIHRoaXMuc2hvd1F1ZXN0aW9uTnVtYmVycyAhPSBcIm9ucGFuZWxcIik7XG4gICAgfTtcbiAgICBQYW5lbE1vZGVsLnByb3RvdHlwZS5ub3RpZnlTdXJ2ZXlPblZpc2liaWxpdHlDaGFuZ2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5zdXJ2ZXkgIT0gbnVsbCAmJiAhdGhpcy5pc0xvYWRpbmdGcm9tSnNvbikge1xuICAgICAgICAgICAgdGhpcy5zdXJ2ZXkucGFuZWxWaXNpYmlsaXR5Q2hhbmdlZCh0aGlzLCB0aGlzLmlzVmlzaWJsZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFBhbmVsTW9kZWwucHJvdG90eXBlLmhhc0Vycm9yc0NvcmUgPSBmdW5jdGlvbiAocmVjKSB7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUuaGFzRXJyb3JzQ29yZS5jYWxsKHRoaXMsIHJlYyk7XG4gICAgICAgIGlmICh0aGlzLmlzQ29sbGFwc2VkICYmIHJlYy5yZXN1bHQgJiYgcmVjLmZpcmVDYWxsYmFjaykge1xuICAgICAgICAgICAgdGhpcy5leHBhbmQoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgUGFuZWxNb2RlbC5wcm90b3R5cGUuZ2V0UmVuZGVyZWRUaXRsZSA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgICAgaWYgKCFzdHIpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzQ29sbGFwc2VkIHx8IHRoaXMuaXNFeHBhbmRlZClcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5uYW1lO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNEZXNpZ25Nb2RlKVxuICAgICAgICAgICAgICAgIHJldHVybiBcIltcIiArIHRoaXMubmFtZSArIFwiXVwiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLmdldFJlbmRlcmVkVGl0bGUuY2FsbCh0aGlzLCBzdHIpO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBhbmVsTW9kZWwucHJvdG90eXBlLCBcImlubmVySW5kZW50XCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEluY3JlYXNlcyBvciBkZWNyZWFzZXMgYW4gaW5kZW50IG9mIHBhbmVsIGNvbnRlbnQgZnJvbSB0aGUgbGVmdCBlZGdlLiBBY2NlcHRzIHBvc2l0aXZlIGludGVnZXIgdmFsdWVzIGFuZCAwLlxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaW5uZXJJbmRlbnRcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaW5uZXJJbmRlbnRcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQYW5lbE1vZGVsLnByb3RvdHlwZSwgXCJzdGFydFdpdGhOZXdMaW5lXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIERpc2FibGUgdGhpcyBwcm9wZXJ0eSBpZiB5b3Ugd2FudCB0byByZW5kZXIgdGhlIGN1cnJlbnQgcGFuZWwgb24gdGhlIHNhbWUgbGluZSBvciByb3cgd2l0aCB0aGUgcHJldmlvdXMgcXVlc3Rpb24gb3IgcGFuZWwuXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzdGFydFdpdGhOZXdMaW5lXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwic3RhcnRXaXRoTmV3TGluZVwiLCB2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUGFuZWxNb2RlbC5wcm90b3R5cGUsIFwiYWxsb3dBZGFwdGl2ZUFjdGlvbnNcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJhbGxvd0FkYXB0aXZlQWN0aW9uc1wiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJhbGxvd0FkYXB0aXZlQWN0aW9uc1wiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBhbmVsTW9kZWwucHJvdG90eXBlLCBcImlubmVyUGFkZGluZ0xlZnRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpbm5lclBhZGRpbmdMZWZ0XCIsIFwiXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImlubmVyUGFkZGluZ0xlZnRcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFBhbmVsTW9kZWwucHJvdG90eXBlLm9uSW5kZW50Q2hhbmdlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmdldFN1cnZleSgpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLmlubmVyUGFkZGluZ0xlZnQgPSB0aGlzLmdldEluZGVudFNpemUodGhpcy5pbm5lckluZGVudCk7XG4gICAgICAgIHRoaXMucGFkZGluZ0xlZnQgPSB0aGlzLmdldEluZGVudFNpemUodGhpcy5pbmRlbnQpO1xuICAgICAgICB0aGlzLnBhZGRpbmdSaWdodCA9IHRoaXMuZ2V0SW5kZW50U2l6ZSh0aGlzLnJpZ2h0SW5kZW50KTtcbiAgICB9O1xuICAgIFBhbmVsTW9kZWwucHJvdG90eXBlLmdldEluZGVudFNpemUgPSBmdW5jdGlvbiAoaW5kZW50KSB7XG4gICAgICAgIGlmIChpbmRlbnQgPCAxKVxuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIHZhciBjc3MgPSB0aGlzLnN1cnZleVtcImNzc1wiXTtcbiAgICAgICAgaWYgKCFjc3MgfHwgIWNzcy5xdWVzdGlvbi5pbmRlbnQpXG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgcmV0dXJuIGluZGVudCAqIGNzcy5xdWVzdGlvbi5pbmRlbnQgKyBcInB4XCI7XG4gICAgfTtcbiAgICBQYW5lbE1vZGVsLnByb3RvdHlwZS5jbGVhck9uRGVsZXRpbmdDb250YWluZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuZWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgICAgICAgICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBfcXVlc3Rpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1tcIlF1ZXN0aW9uXCJdIHx8IGVsZW1lbnQgaW5zdGFuY2VvZiBQYW5lbE1vZGVsKSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5jbGVhck9uRGVsZXRpbmdDb250YWluZXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUGFuZWxNb2RlbC5wcm90b3R5cGUsIFwiZm9vdGVyQWN0aW9uc1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImZvb3RlckFjdGlvbnNcIik7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBQYW5lbE1vZGVsLnByb3RvdHlwZS5nZXRGb290ZXJUb29sYmFyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBpZiAoIXRoaXMuZm9vdGVyVG9vbGJhclZhbHVlKSB7XG4gICAgICAgICAgICB2YXIgYWN0aW9ucyA9IHRoaXMuZm9vdGVyQWN0aW9ucztcbiAgICAgICAgICAgIGlmICh0aGlzLmhhc0VkaXRCdXR0b24pIHtcbiAgICAgICAgICAgICAgICBhY3Rpb25zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBpZDogXCJjYW5jZWwtcHJldmlld1wiLFxuICAgICAgICAgICAgICAgICAgICBsb2NUaXRsZTogdGhpcy5zdXJ2ZXkubG9jRWRpdFRleHQsXG4gICAgICAgICAgICAgICAgICAgIGlubmVyQ3NzOiB0aGlzLnN1cnZleS5jc3NOYXZpZ2F0aW9uRWRpdCxcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBmdW5jdGlvbiAoKSB7IF90aGlzLmNhbmNlbFByZXZpZXcoKTsgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCEhdGhpcy5vbkdldEZvb3RlckFjdGlvbnNDYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGFjdGlvbnMgPSB0aGlzLm9uR2V0Rm9vdGVyQWN0aW9uc0NhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBhY3Rpb25zID0gKF9hID0gdGhpcy5zdXJ2ZXkpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5nZXRVcGRhdGVkUGFuZWxGb290ZXJBY3Rpb25zKHRoaXMsIGFjdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5mb290ZXJUb29sYmFyVmFsdWUgPSB0aGlzLmNyZWF0ZUFjdGlvbkNvbnRhaW5lcih0aGlzLmFsbG93QWRhcHRpdmVBY3Rpb25zKTtcbiAgICAgICAgICAgIHZhciBmb290ZXJDc3MgPSB0aGlzLm9uR2V0Rm9vdGVyVG9vbGJhckNzc0NhbGxiYWNrID8gdGhpcy5vbkdldEZvb3RlclRvb2xiYXJDc3NDYWxsYmFjaygpIDogXCJcIjtcbiAgICAgICAgICAgIGlmICghZm9vdGVyQ3NzKSB7XG4gICAgICAgICAgICAgICAgZm9vdGVyQ3NzID0gKF9iID0gdGhpcy5jc3NDbGFzc2VzLnBhbmVsKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuZm9vdGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZvb3RlckNzcykge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9vdGVyVG9vbGJhclZhbHVlLmNvbnRhaW5lckNzcyA9IGZvb3RlckNzcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZm9vdGVyVG9vbGJhclZhbHVlLnNldEl0ZW1zKGFjdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmZvb3RlclRvb2xiYXJWYWx1ZTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQYW5lbE1vZGVsLnByb3RvdHlwZSwgXCJoYXNFZGl0QnV0dG9uXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zdXJ2ZXkgJiYgdGhpcy5zdXJ2ZXkuc3RhdGUgPT09IFwicHJldmlld1wiKVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRlcHRoID09PSAxO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUGFuZWxNb2RlbC5wcm90b3R5cGUuY2FuY2VsUHJldmlldyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmhhc0VkaXRCdXR0b24pXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMuc3VydmV5LmNhbmNlbFByZXZpZXdCeVBhZ2UodGhpcyk7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUGFuZWxNb2RlbC5wcm90b3R5cGUsIFwiY3NzVGl0bGVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldENzc1RpdGxlKHRoaXMuY3NzQ2xhc3Nlcy5wYW5lbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUGFuZWxNb2RlbC5wcm90b3R5cGUsIFwiY3NzRXJyb3JcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldENzc0Vycm9yKHRoaXMuY3NzQ2xhc3Nlcyk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUGFuZWxNb2RlbC5wcm90b3R5cGUsIFwic2hvd0Vycm9yc0Fib3ZlUGFuZWxcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlzRGVmYXVsdFYyVGhlbWU7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBQYW5lbE1vZGVsLnByb3RvdHlwZS5nZXRDc3NFcnJvciA9IGZ1bmN0aW9uIChjc3NDbGFzc2VzKSB7XG4gICAgICAgIHZhciBpc0RlZmF1bHRWMlRoZW1lID0gdGhpcy5pc0RlZmF1bHRWMlRoZW1lO1xuICAgICAgICB2YXIgYnVpbGRlciA9IG5ldyBfdXRpbHNfY3NzQ2xhc3NCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bXCJDc3NDbGFzc0J1aWxkZXJcIl0oKVxuICAgICAgICAgICAgLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMuZXJyb3Iucm9vdClcbiAgICAgICAgICAgIC5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLmVycm9yLm91dHNpZGVRdWVzdGlvbiwgaXNEZWZhdWx0VjJUaGVtZSlcbiAgICAgICAgICAgIC5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLmVycm9yLmFib3ZlUXVlc3Rpb24sIGlzRGVmYXVsdFYyVGhlbWUpO1xuICAgICAgICByZXR1cm4gYnVpbGRlci5hcHBlbmQoXCJwYW5lbC1lcnJvci1yb290XCIsIGJ1aWxkZXIuaXNFbXB0eSgpKS50b1N0cmluZygpO1xuICAgIH07XG4gICAgUGFuZWxNb2RlbC5wcm90b3R5cGUub25WaXNpYmxlQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5vblZpc2libGVDaGFuZ2VkLmNhbGwodGhpcyk7XG4gICAgICAgIHRoaXMubm90aWZ5U3VydmV5T25WaXNpYmlsaXR5Q2hhbmdlZCgpO1xuICAgIH07XG4gICAgUGFuZWxNb2RlbC5wcm90b3R5cGUubmVlZFJlc3BvbnNpdmVXaWR0aCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnN0YXJ0V2l0aE5ld0xpbmUpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUubmVlZFJlc3BvbnNpdmVXaWR0aC5jYWxsKHRoaXMpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBQYW5lbE1vZGVsLnByb3RvdHlwZS5mb2N1c0luID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuc3VydmV5KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLnN1cnZleS53aGVuUGFuZWxGb2N1c0luKHRoaXMpO1xuICAgIH07XG4gICAgUGFuZWxNb2RlbC5wcm90b3R5cGUuZ2V0SGFzRnJhbWVWMiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUuZ2V0SGFzRnJhbWVWMi5jYWxsKHRoaXMpICYmICghdGhpcy5vcmlnaW5hbFBhZ2UgfHwgdGhpcy5zdXJ2ZXkuaXNTaG93aW5nUHJldmlldyk7XG4gICAgfTtcbiAgICBQYW5lbE1vZGVsLnByb3RvdHlwZS5nZXRJc05lc3RlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUuZ2V0SXNOZXN0ZWQuY2FsbCh0aGlzKSAmJiB0aGlzLnBhcmVudCAhPT0gdW5kZWZpbmVkO1xuICAgIH07XG4gICAgUGFuZWxNb2RlbC5wcm90b3R5cGUuZ2V0Q3NzUm9vdCA9IGZ1bmN0aW9uIChjc3NDbGFzc2VzKSB7XG4gICAgICAgIHJldHVybiBuZXcgX3V0aWxzX2Nzc0NsYXNzQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fW1wiQ3NzQ2xhc3NCdWlsZGVyXCJdKClcbiAgICAgICAgICAgIC5hcHBlbmQoX3N1cGVyLnByb3RvdHlwZS5nZXRDc3NSb290LmNhbGwodGhpcywgY3NzQ2xhc3NlcykpXG4gICAgICAgICAgICAuYXBwZW5kKGNzc0NsYXNzZXMuY29udGFpbmVyKVxuICAgICAgICAgICAgLmFwcGVuZChjc3NDbGFzc2VzLmFzUGFnZSwgISF0aGlzLm9yaWdpbmFsUGFnZSAmJiAhdGhpcy5zdXJ2ZXkuaXNTaG93aW5nUHJldmlldylcbiAgICAgICAgICAgIC5hcHBlbmQoY3NzQ2xhc3Nlcy5pbnZpc2libGUsICF0aGlzLmlzRGVzaWduTW9kZSAmJiB0aGlzLmFyZUludmlzaWJsZUVsZW1lbnRzU2hvd2luZyAmJiAhdGhpcy52aXNpYmxlKVxuICAgICAgICAgICAgLnRvU3RyaW5nKCk7XG4gICAgfTtcbiAgICBQYW5lbE1vZGVsLnByb3RvdHlwZS5nZXRDb250YWluZXJDc3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldENzc1Jvb3QodGhpcy5jc3NDbGFzc2VzLnBhbmVsKTtcbiAgICB9O1xuICAgIHJldHVybiBQYW5lbE1vZGVsO1xufShQYW5lbE1vZGVsQmFzZSkpO1xuXG5fanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiU2VyaWFsaXplclwiXS5hZGRDbGFzcyhcInBhbmVsYmFzZVwiLCBbXG4gICAgXCJuYW1lXCIsXG4gICAge1xuICAgICAgICBuYW1lOiBcImVsZW1lbnRzXCIsXG4gICAgICAgIGFsdGVybmF0aXZlTmFtZTogXCJxdWVzdGlvbnNcIixcbiAgICAgICAgYmFzZUNsYXNzTmFtZTogXCJxdWVzdGlvblwiLFxuICAgICAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICAgICAgaXNMaWdodFNlcmlhbGl6YWJsZTogZmFsc2UsXG4gICAgfSxcbiAgICB7IG5hbWU6IFwidmlzaWJsZTpzd2l0Y2hcIiwgZGVmYXVsdDogdHJ1ZSwgb3ZlcnJpZGluZ1Byb3BlcnR5OiBcInZpc2libGVJZlwiIH0sXG4gICAgeyBuYW1lOiBcInJlYWRPbmx5OmJvb2xlYW5cIiwgb3ZlcnJpZGluZ1Byb3BlcnR5OiBcImVuYWJsZUlmXCIgfSxcbiAgICBcInZpc2libGVJZjpjb25kaXRpb25cIixcbiAgICBcImVuYWJsZUlmOmNvbmRpdGlvblwiLFxuICAgIFwicmVxdWlyZWRJZjpjb25kaXRpb25cIixcbiAgICB7XG4gICAgICAgIG5hbWU6IFwicXVlc3Rpb25UaXRsZUxvY2F0aW9uXCIsXG4gICAgICAgIGRlZmF1bHQ6IFwiZGVmYXVsdFwiLFxuICAgICAgICBjaG9pY2VzOiBbXCJkZWZhdWx0XCIsIFwidG9wXCIsIFwiYm90dG9tXCIsIFwibGVmdFwiLCBcImhpZGRlblwiXSxcbiAgICB9LFxuICAgIHsgbmFtZTogXCJ0aXRsZTp0ZXh0XCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NUaXRsZVwiIH0sXG4gICAgeyBuYW1lOiBcImRlc2NyaXB0aW9uOnRleHRcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY0Rlc2NyaXB0aW9uXCIgfSxcbiAgICB7XG4gICAgICAgIG5hbWU6IFwicXVlc3Rpb25zT3JkZXJcIixcbiAgICAgICAgZGVmYXVsdDogXCJkZWZhdWx0XCIsXG4gICAgICAgIGNob2ljZXM6IFtcImRlZmF1bHRcIiwgXCJpbml0aWFsXCIsIFwicmFuZG9tXCJdLFxuICAgIH0sXG4gICAgeyBuYW1lOiBcInF1ZXN0aW9uRXJyb3JMb2NhdGlvblwiLCBkZWZhdWx0OiBcImRlZmF1bHRcIiwgY2hvaWNlczogW1wiZGVmYXVsdFwiLCBcInRvcFwiLCBcImJvdHRvbVwiXSB9XG5dLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBQYW5lbE1vZGVsQmFzZSgpO1xufSk7XG5fanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiU2VyaWFsaXplclwiXS5hZGRDbGFzcyhcInBhbmVsXCIsIFtcbiAgICB7XG4gICAgICAgIG5hbWU6IFwic3RhdGVcIixcbiAgICAgICAgZGVmYXVsdDogXCJkZWZhdWx0XCIsXG4gICAgICAgIGNob2ljZXM6IFtcImRlZmF1bHRcIiwgXCJjb2xsYXBzZWRcIiwgXCJleHBhbmRlZFwiXSxcbiAgICB9LFxuICAgIHsgbmFtZTogXCJpc1JlcXVpcmVkOnN3aXRjaFwiLCBvdmVycmlkaW5nUHJvcGVydHk6IFwicmVxdWlyZWRJZlwiIH0sXG4gICAge1xuICAgICAgICBuYW1lOiBcInJlcXVpcmVkRXJyb3JUZXh0OnRleHRcIixcbiAgICAgICAgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1JlcXVpcmVkRXJyb3JUZXh0XCIsXG4gICAgfSxcbiAgICB7IG5hbWU6IFwic3RhcnRXaXRoTmV3TGluZTpib29sZWFuXCIsIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBcIndpZHRoXCIsXG4gICAgeyBuYW1lOiBcIm1pbldpZHRoXCIsIGRlZmF1bHRGdW5jOiBmdW5jdGlvbiAoKSB7IHJldHVybiBcImF1dG9cIjsgfSB9LFxuICAgIHsgbmFtZTogXCJtYXhXaWR0aFwiLCBkZWZhdWx0RnVuYzogZnVuY3Rpb24gKCkgeyByZXR1cm4gX3NldHRpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bXCJzZXR0aW5nc1wiXS5tYXhXaWR0aDsgfSB9LFxuICAgIHsgbmFtZTogXCJpbm5lckluZGVudDpudW1iZXJcIiwgZGVmYXVsdDogMCwgY2hvaWNlczogWzAsIDEsIDIsIDNdIH0sXG4gICAgeyBuYW1lOiBcImluZGVudDpudW1iZXJcIiwgZGVmYXVsdDogMCwgY2hvaWNlczogWzAsIDEsIDIsIDNdIH0sXG4gICAge1xuICAgICAgICBuYW1lOiBcInBhZ2VcIixcbiAgICAgICAgaXNTZXJpYWxpemFibGU6IGZhbHNlLFxuICAgICAgICB2aXNpYmxlSWY6IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgIHZhciBzdXJ2ZXkgPSBvYmogPyBvYmouc3VydmV5IDogbnVsbDtcbiAgICAgICAgICAgIHJldHVybiAhc3VydmV5IHx8ICFzdXJ2ZXkucGFnZXMgfHwgc3VydmV5LnBhZ2VzLmxlbmd0aCA+IDE7XG4gICAgICAgIH0sXG4gICAgICAgIGNob2ljZXM6IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgIHZhciBzdXJ2ZXkgPSBvYmogPyBvYmouc3VydmV5IDogbnVsbDtcbiAgICAgICAgICAgIHJldHVybiBzdXJ2ZXlcbiAgICAgICAgICAgICAgICA/IHN1cnZleS5wYWdlcy5tYXAoZnVuY3Rpb24gKHApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IHAubmFtZSwgdGV4dDogcC50aXRsZSB9O1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgOiBbXTtcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIFwic2hvd051bWJlcjpib29sZWFuXCIsXG4gICAge1xuICAgICAgICBuYW1lOiBcInNob3dRdWVzdGlvbk51bWJlcnNcIixcbiAgICAgICAgZGVmYXVsdDogXCJkZWZhdWx0XCIsXG4gICAgICAgIGNob2ljZXM6IFtcImRlZmF1bHRcIiwgXCJvbnBhbmVsXCIsIFwib2ZmXCJdLFxuICAgIH0sXG4gICAgXCJxdWVzdGlvblN0YXJ0SW5kZXhcIixcbiAgICB7IG5hbWU6IFwiYWxsb3dBZGFwdGl2ZUFjdGlvbnM6Ym9vbGVhblwiLCBkZWZhdWx0OiB0cnVlLCB2aXNpYmxlOiBmYWxzZSB9LFxuXSwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgUGFuZWxNb2RlbCgpO1xufSwgXCJwYW5lbGJhc2VcIik7XG5fcXVlc3Rpb25mYWN0b3J5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bXCJFbGVtZW50RmFjdG9yeVwiXS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJwYW5lbFwiLCBmdW5jdGlvbiAobmFtZSkge1xuICAgIHJldHVybiBuZXcgUGFuZWxNb2RlbChuYW1lKTtcbn0pO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3BsdWdpbnMvdGhlbWVzL2Jvb3RzdHJhcC9jc3Nib290c3RyYXAudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9wbHVnaW5zL3RoZW1lcy9ib290c3RyYXAvY3NzYm9vdHN0cmFwLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogZGVmYXVsdENzcyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJkZWZhdWx0Q3NzXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZGVmYXVsdENzczsgfSk7XG52YXIgZGVmYXVsdENzcyA9IHtcbiAgICByb290OiBcInN2X21haW4gc3ZfYm9vdHN0cmFwX2Nzc1wiLFxuICAgIGNvbnRhaW5lcjogXCJzdl9jb250YWluZXJcIixcbiAgICBoZWFkZXI6IFwicGFuZWwtaGVhZGluZyBjYXJkLWhlYWRlclwiLFxuICAgIGJvZHk6IFwicGFuZWwtYm9keSBjYXJkLWJsb2NrIG10LTRcIixcbiAgICBib2R5RW1wdHk6IFwicGFuZWwtYm9keSBjYXJkLWJsb2NrIG10LTQgc3ZfYm9keV9lbXB0eVwiLFxuICAgIGZvb3RlcjogXCJwYW5lbC1mb290ZXIgY2FyZC1mb290ZXJcIixcbiAgICB0aXRsZTogXCJcIixcbiAgICBkZXNjcmlwdGlvbjogXCJcIixcbiAgICBsb2dvOiBcInN2X2xvZ29cIixcbiAgICBsb2dvSW1hZ2U6IFwic3ZfbG9nb19faW1hZ2VcIixcbiAgICBoZWFkZXJUZXh0OiBcInN2X2hlYWRlcl9fdGV4dFwiLFxuICAgIG5hdmlnYXRpb25CdXR0b246IFwiYnRuIHN2X25hdl9idG5cIixcbiAgICBjb21wbGV0ZWRQYWdlOiBcIlwiLFxuICAgIG5hdmlnYXRpb246IHtcbiAgICAgICAgY29tcGxldGU6IFwic3ZfY29tcGxldGVfYnRuXCIsXG4gICAgICAgIHByZXY6IFwic3ZfcHJldl9idG5cIixcbiAgICAgICAgbmV4dDogXCJzdl9uZXh0X2J0blwiLFxuICAgICAgICBzdGFydDogXCJzdl9zdGFydF9idG5cIixcbiAgICAgICAgcHJldmlldzogXCJzdl9wcmV2aWV3X2J0blwiLFxuICAgICAgICBlZGl0OiBcInN2X2VkaXRfYnRuXCIsXG4gICAgfSxcbiAgICBwcm9ncmVzczogXCJwcm9ncmVzcyBjZW50ZXItYmxvY2sgbXgtYXV0byBtYi00XCIsXG4gICAgcHJvZ3Jlc3NCYXI6IFwicHJvZ3Jlc3MtYmFyXCIsXG4gICAgcHJvZ3Jlc3NUZXh0VW5kZXJCYXI6IFwic3YtaGlkZGVuXCIsXG4gICAgcHJvZ3Jlc3NUZXh0SW5CYXI6IFwic3YtaGlkZGVuXCIsXG4gICAgcHJvZ3Jlc3NCdXR0b25zQ29udGFpbmVyQ2VudGVyOiBcInN2X3Byb2dyZXNzLWJ1dHRvbnNfX2NvbnRhaW5lci1jZW50ZXJcIixcbiAgICBwcm9ncmVzc0J1dHRvbnNDb250YWluZXI6IFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19fY29udGFpbmVyXCIsXG4gICAgcHJvZ3Jlc3NCdXR0b25zSW1hZ2VCdXR0b25MZWZ0OiBcInN2X3Byb2dyZXNzLWJ1dHRvbnNfX2ltYWdlLWJ1dHRvbi1sZWZ0XCIsXG4gICAgcHJvZ3Jlc3NCdXR0b25zSW1hZ2VCdXR0b25SaWdodDogXCJzdl9wcm9ncmVzcy1idXR0b25zX19pbWFnZS1idXR0b24tcmlnaHRcIixcbiAgICBwcm9ncmVzc0J1dHRvbnNJbWFnZUJ1dHRvbkhpZGRlbjogXCJzdl9wcm9ncmVzcy1idXR0b25zX19pbWFnZS1idXR0b24tLWhpZGRlblwiLFxuICAgIHByb2dyZXNzQnV0dG9uc0xpc3RDb250YWluZXI6IFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdC1jb250YWluZXJcIixcbiAgICBwcm9ncmVzc0J1dHRvbnNMaXN0OiBcInN2X3Byb2dyZXNzLWJ1dHRvbnNfX2xpc3RcIixcbiAgICBwcm9ncmVzc0J1dHRvbnNMaXN0RWxlbWVudFBhc3NlZDogXCJzdl9wcm9ncmVzcy1idXR0b25zX19saXN0LWVsZW1lbnQtLXBhc3NlZFwiLFxuICAgIHByb2dyZXNzQnV0dG9uc0xpc3RFbGVtZW50Q3VycmVudDogXCJzdl9wcm9ncmVzcy1idXR0b25zX19saXN0LWVsZW1lbnQtLWN1cnJlbnRcIixcbiAgICBwcm9ncmVzc0J1dHRvbnNMaXN0RWxlbWVudE5vbkNsaWNrYWJsZTogXCJzdl9wcm9ncmVzcy1idXR0b25zX19saXN0LWVsZW1lbnQtLW5vbmNsaWNrYWJsZVwiLFxuICAgIHByb2dyZXNzQnV0dG9uc1BhZ2VUaXRsZTogXCJzdl9wcm9ncmVzcy1idXR0b25zX19wYWdlLXRpdGxlXCIsXG4gICAgcHJvZ3Jlc3NCdXR0b25zUGFnZURlc2NyaXB0aW9uOiBcInN2X3Byb2dyZXNzLWJ1dHRvbnNfX3BhZ2UtZGVzY3JpcHRpb25cIixcbiAgICBwYWdlOiB7XG4gICAgICAgIHJvb3Q6IFwiXCIsXG4gICAgICAgIHRpdGxlOiBcIlwiLFxuICAgICAgICBkZXNjcmlwdGlvbjogXCJzbWFsbFwiLFxuICAgIH0sXG4gICAgcGFnZVRpdGxlOiBcIlwiLFxuICAgIHBhZ2VEZXNjcmlwdGlvbjogXCJzbWFsbFwiLFxuICAgIHJvdzogXCJzdl9yb3dcIixcbiAgICBxdWVzdGlvbjoge1xuICAgICAgICBtYWluUm9vdDogXCJzdl9xc3RuXCIsXG4gICAgICAgIGZsb3dSb290OiBcInN2X3FfZmxvdyBzdl9xc3RuXCIsXG4gICAgICAgIGhlYWRlcjogXCJcIixcbiAgICAgICAgaGVhZGVyTGVmdDogXCJ0aXRsZS1sZWZ0XCIsXG4gICAgICAgIGNvbnRlbnQ6IFwiXCIsXG4gICAgICAgIGNvbnRlbnRMZWZ0OiBcImNvbnRlbnQtbGVmdFwiLFxuICAgICAgICB0aXRsZUxlZnRSb290OiBcInN2X3FzdG5fbGVmdFwiLFxuICAgICAgICB0aXRsZTogXCJcIixcbiAgICAgICAgdGl0bGVFeHBhbmRhYmxlOiBcInN2X3FfdGl0bGVfZXhwYW5kYWJsZVwiLFxuICAgICAgICB0aXRsZUV4cGFuZGVkOiBcInN2X3FfdGl0bGVfZXhwYW5kZWRcIixcbiAgICAgICAgdGl0bGVDb2xsYXBzZWQ6IFwic3ZfcV90aXRsZV9jb2xsYXBzZWRcIixcbiAgICAgICAgbnVtYmVyOiBcInN2X3FfbnVtXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcInNtYWxsXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uVW5kZXJJbnB1dDogXCJzbWFsbFwiLFxuICAgICAgICByZXF1aXJlZFRleHQ6IFwic3ZfcV9yZXF1aXJlZF90ZXh0XCIsXG4gICAgICAgIGNvbW1lbnQ6IFwiZm9ybS1jb250cm9sXCIsXG4gICAgICAgIHJlcXVpcmVkOiBcIlwiLFxuICAgICAgICB0aXRsZVJlcXVpcmVkOiBcIlwiLFxuICAgICAgICBoYXNFcnJvcjogXCJoYXMtZXJyb3JcIixcbiAgICAgICAgaW5kZW50OiAyMCxcbiAgICAgICAgZm9ybUdyb3VwOiBcImZvcm0tZ3JvdXBcIixcbiAgICAgICAgZGlzYWJsZWQ6IFwic3ZfcS0tZGlzYWJsZWRcIixcbiAgICB9LFxuICAgIHBhbmVsOiB7XG4gICAgICAgIHRpdGxlOiBcInN2X3BfdGl0bGVcIixcbiAgICAgICAgdGl0bGVFeHBhbmRhYmxlOiBcInN2X3BfdGl0bGVfZXhwYW5kYWJsZVwiLFxuICAgICAgICB0aXRsZUV4cGFuZGVkOiBcInN2X3BfdGl0bGVfZXhwYW5kZWRcIixcbiAgICAgICAgdGl0bGVDb2xsYXBzZWQ6IFwic3ZfcF90aXRsZV9jb2xsYXBzZWRcIixcbiAgICAgICAgdGl0bGVPbkVycm9yOiBcIlwiLFxuICAgICAgICBpY29uOiBcInN2X3BhbmVsX2ljb25cIixcbiAgICAgICAgaWNvbkV4cGFuZGVkOiBcInN2X2V4cGFuZGVkXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcInNtYWxsIHN2X3BfZGVzY3JpcHRpb25cIixcbiAgICAgICAgY29udGFpbmVyOiBcInN2X3BfY29udGFpbmVyXCIsXG4gICAgICAgIGZvb3RlcjogXCJzdl9wX2Zvb3RlclwiLFxuICAgICAgICBudW1iZXI6IFwic3ZfcV9udW1cIixcbiAgICAgICAgcmVxdWlyZWRUZXh0OiBcInN2X3FfcmVxdWlyZWRfdGV4dFwiLFxuICAgIH0sXG4gICAgZXJyb3I6IHtcbiAgICAgICAgcm9vdDogXCJhbGVydCBhbGVydC1kYW5nZXJcIixcbiAgICAgICAgaWNvbjogXCJnbHlwaGljb24gZ2x5cGhpY29uLWV4Y2xhbWF0aW9uLXNpZ25cIixcbiAgICAgICAgaXRlbTogXCJcIixcbiAgICAgICAgbG9jYXRpb25Ub3A6IFwic3ZfcXN0bl9lcnJvcl90b3BcIixcbiAgICAgICAgbG9jYXRpb25Cb3R0b206IFwic3ZfcXN0bl9lcnJvcl9ib3R0b21cIixcbiAgICB9LFxuICAgIGJvb2xlYW46IHtcbiAgICAgICAgcm9vdDogXCJzdl9xYmxuIGZvcm0taW5saW5lIGNoZWNrYm94XCIsXG4gICAgICAgIHJvb3RSYWRpbzogXCJzdl9xYmxuIGZvcm0taW5saW5lIGNoZWNrYm94XCIsXG4gICAgICAgIGl0ZW06IFwic3YtYm9vbGVhblwiLFxuICAgICAgICBjb250cm9sOiBcInN2LXZpc3VhbGx5aGlkZGVuXCIsXG4gICAgICAgIGNvbnRyb2xDaGVja2JveDogXCJzdi12aXN1YWxseWhpZGRlblwiLFxuICAgICAgICBpdGVtQ2hlY2tlZDogXCJzdi1ib29sZWFuLS1jaGVja2VkIGNoZWNrZWRcIixcbiAgICAgICAgaXRlbUluZGV0ZXJtaW5hdGU6IFwic3YtYm9vbGVhbi0taW5kZXRlcm1pbmF0ZVwiLFxuICAgICAgICBpdGVtRGlzYWJsZWQ6IFwic3YtYm9vbGVhbi0tZGlzYWJsZWRcIixcbiAgICAgICAgc3dpdGNoOiBcInN2LWJvb2xlYW5fX3N3aXRjaFwiLFxuICAgICAgICBzbGlkZXI6IFwic3YtYm9vbGVhbl9fc2xpZGVyXCIsXG4gICAgICAgIGxhYmVsOiBcInN2LWJvb2xlYW5fX2xhYmVsIFwiLFxuICAgICAgICBkaXNhYmxlZExhYmVsOiBcInN2LWJvb2xlYW5fX2xhYmVsLS1kaXNhYmxlZFwiLFxuICAgICAgICBzbGlkZXJHaG9zdDogXCJzdi1ib29sZWFuX190aHVtYi1naG9zdFwiLFxuICAgICAgICBtYXRlcmlhbERlY29yYXRvcjogXCJzdi1pdGVtX19kZWNvcmF0b3Igc3YtYm9vbGVhbl9fZGVjb3JhdG9yXCIsXG4gICAgICAgIGl0ZW1EZWNvcmF0b3I6IFwic3YtaXRlbV9fc3ZnIHN2LWJvb2xlYW5fX3N2Z1wiLFxuICAgICAgICBjaGVja2VkUGF0aDogXCJzdi1ib29sZWFuX19jaGVja2VkLXBhdGhcIixcbiAgICAgICAgdW5jaGVja2VkUGF0aDogXCJzdi1ib29sZWFuX191bmNoZWNrZWQtcGF0aFwiLFxuICAgICAgICBpbmRldGVybWluYXRlUGF0aDogXCJzdi1ib29sZWFuX19pbmRldGVybWluYXRlLXBhdGhcIixcbiAgICB9LFxuICAgIGNoZWNrYm94OiB7XG4gICAgICAgIHJvb3Q6IFwic3ZfcWNiYyBzdl9xY2J4IGZvcm0taW5saW5lXCIsXG4gICAgICAgIGl0ZW06IFwiY2hlY2tib3hcIixcbiAgICAgICAgaXRlbUNoZWNrZWQ6IFwiY2hlY2tlZFwiLFxuICAgICAgICBpdGVtU2VsZWN0QWxsOiBcInN2X3FfY2hlY2tib3hfc2VsZWN0YWxsXCIsXG4gICAgICAgIGl0ZW1Ob25lOiBcInN2X3FfY2hlY2tib3hfbm9uZVwiLFxuICAgICAgICBpdGVtSW5saW5lOiBcInN2X3FfY2hlY2tib3hfaW5saW5lXCIsXG4gICAgICAgIGl0ZW1Db250cm9sOiBcIlwiLFxuICAgICAgICBpdGVtRGVjb3JhdG9yOiBcInN2LWhpZGRlblwiLFxuICAgICAgICBsYWJlbDogXCJcIixcbiAgICAgICAgbGFiZWxDaGVja2VkOiBcIlwiLFxuICAgICAgICBjb250cm9sTGFiZWw6IFwiXCIsXG4gICAgICAgIG1hdGVyaWFsRGVjb3JhdG9yOiBcImNoZWNrYm94LW1hdGVyaWFsXCIsXG4gICAgICAgIG90aGVyOiBcInN2X3FfY2hlY2tib3hfb3RoZXIgZm9ybS1jb250cm9sXCIsXG4gICAgICAgIGNvbHVtbjogXCJzdl9xX3NlbGVjdF9jb2x1bW5cIixcbiAgICB9LFxuICAgIHJhbmtpbmc6IHtcbiAgICAgICAgcm9vdDogXCJzdi1yYW5raW5nXCIsXG4gICAgICAgIHJvb3RNb2JpbGVNb2Q6IFwic3YtcmFua2luZy0tbW9iaWxlXCIsXG4gICAgICAgIHJvb3REcmFnTW9kOiBcInN2LXJhbmtpbmctLWRyYWdcIixcbiAgICAgICAgcm9vdERpc2FibGVkOiBcInN2LXJhbmtpbmctLWRpc2FibGVkXCIsXG4gICAgICAgIHJvb3REcmFnSGFuZGxlQXJlYUljb246IFwic3YtcmFua2luZy0tZHJhZy1oYW5kbGUtYXJlYS1pY29uXCIsXG4gICAgICAgIHJvb3RTZWxlY3RUb1JhbmtNb2Q6IFwic3YtcmFua2luZy0tc2VsZWN0LXRvLXJhbmtcIixcbiAgICAgICAgcm9vdFNlbGVjdFRvUmFua0FsaWduVmVydGljYWw6IFwic3YtcmFua2luZy0tc2VsZWN0LXRvLXJhbmstdmVydGljYWxcIixcbiAgICAgICAgcm9vdFNlbGVjdFRvUmFua0FsaWduSG9yaXpvbnRhbDogXCJzdi1yYW5raW5nLS1zZWxlY3QtdG8tcmFuay1ob3Jpem9udGFsXCIsXG4gICAgICAgIGl0ZW06IFwic3YtcmFua2luZy1pdGVtXCIsXG4gICAgICAgIGl0ZW1Db250ZW50OiBcInN2LXJhbmtpbmctaXRlbV9fY29udGVudFwiLFxuICAgICAgICBpdGVtSW5kZXg6IFwic3YtcmFua2luZy1pdGVtX19pbmRleFwiLFxuICAgICAgICBpdGVtSW5kZXhFbXB0eU1vZGU6IFwic3YtcmFua2luZy1pdGVtX19pbmRleC0tZW1wdHlcIixcbiAgICAgICAgLy8gaXRlbVRleHQ6IFwic3YtcmFua2luZy1pdGVtX190ZXh0XCIsXG4gICAgICAgIGNvbnRyb2xMYWJlbDogXCJzdi1yYW5raW5nLWl0ZW1fX3RleHRcIixcbiAgICAgICAgaXRlbUdob3N0Tm9kZTogXCJzdi1yYW5raW5nLWl0ZW1fX2dob3N0XCIsXG4gICAgICAgIGl0ZW1JY29uQ29udGFpbmVyOiBcInN2LXJhbmtpbmctaXRlbV9faWNvbi1jb250YWluZXJcIixcbiAgICAgICAgaXRlbUljb246IFwic3YtcmFua2luZy1pdGVtX19pY29uXCIsXG4gICAgICAgIGl0ZW1JY29uSG92ZXJNb2Q6IFwic3YtcmFua2luZy1pdGVtX19pY29uLS1ob3ZlclwiLFxuICAgICAgICBpdGVtSWNvbkZvY3VzTW9kOiBcInN2LXJhbmtpbmctaXRlbV9faWNvbi0tZm9jdXNcIixcbiAgICAgICAgaXRlbUdob3N0TW9kOiBcInN2LXJhbmtpbmctaXRlbS0tZ2hvc3RcIixcbiAgICAgICAgaXRlbURyYWdNb2Q6IFwic3YtcmFua2luZy1pdGVtLS1kcmFnXCIsXG4gICAgICAgIGNvbnRhaW5lcjogXCJzdi1yYW5raW5nX19jb250YWluZXJcIixcbiAgICAgICAgY29udGFpbmVyRW1wdHlNb2RlOiBcInN2LXJhbmtpbmdfX2NvbnRhaW5lci0tZW1wdHlcIixcbiAgICAgICAgY29udGFpbmVyRnJvbU1vZGU6IFwic3YtcmFua2luZ19fY29udGFpbmVyLS1mcm9tXCIsXG4gICAgICAgIGNvbnRhaW5lclRvTW9kZTogXCJzdi1yYW5raW5nX19jb250YWluZXItLXRvXCIsXG4gICAgICAgIGNvbnRhaW5lclBsYWNlaG9sZGVyOiBcInN2LXJhbmtpbmdfX2NvbnRhaW5lci1wbGFjZWhvbGRlclwiLFxuICAgICAgICBjb250YWluZXJzRGl2aWRlcjogXCJzdi1yYW5raW5nX19jb250YWluZXJzLWRpdmlkZXJcIixcbiAgICB9LFxuICAgIGNvbW1lbnQ6IFwiZm9ybS1jb250cm9sXCIsXG4gICAgZHJvcGRvd246IHtcbiAgICAgICAgcm9vdDogXCJzdl9xX2RkX3Jvb3RcIixcbiAgICAgICAgcG9wdXA6IFwic3YtZHJvcGRvd24tcG9wdXBcIixcbiAgICAgICAgc2VsZWN0V3JhcHBlcjogXCJzdl9xX2RkX3NlbGVjdF93cmFwcGVyXCIsXG4gICAgICAgIGNvbnRyb2w6IFwiZm9ybS1jb250cm9sIHN2X3FfZGRfY29udHJvbFwiLFxuICAgICAgICBjb250cm9sVmFsdWU6IFwic3ZfcV9kZF92YWx1ZVwiLFxuICAgICAgICBvdGhlcjogXCJzdl9xX2RkX290aGVyIGZvcm0tY29udHJvbFwiLFxuICAgICAgICBjbGVhbkJ1dHRvbjogXCJzdl9xX2RkX2NsZWFuLWJ1dHRvblwiLFxuICAgICAgICBjbGVhbkJ1dHRvblN2ZzogXCJzdl9xX2RkX2NsZWFuLWJ1dHRvbi1zdmdcIixcbiAgICAgICAgY2xlYW5CdXR0b25JY29uSWQ6IFwiaWNvbi1jbGVhcl8xNngxNlwiLFxuICAgICAgICBmaWx0ZXJTdHJpbmdJbnB1dDogXCJzdl9xX2RkX2ZpbHRlci1zdHJpbmctaW5wdXRcIixcbiAgICAgICAgaGludFByZWZpeDogXCJzdl9xX2RkX2hpbnQtcHJlZml4XCIsXG4gICAgICAgIGhpbnRTdWZmaXg6IFwic3ZfcV9kZF9oaW50LXN1ZmZpeFwiXG4gICAgfSxcbiAgICB0YWdib3g6IHtcbiAgICAgICAgcm9vdDogXCJzdl9xX2RkX3Jvb3RcIixcbiAgICAgICAgcG9wdXA6IFwic3YtZHJvcGRvd24tcG9wdXBcIixcbiAgICAgICAgc2VsZWN0V3JhcHBlcjogXCJzdl9xX2RkX3NlbGVjdF93cmFwcGVyXCIsXG4gICAgICAgIGNvbnRyb2w6IFwiZm9ybS1jb250cm9sIHN2X3FfZGRfY29udHJvbFwiLFxuICAgICAgICBjb250cm9sVmFsdWU6IFwic3ZfcV9kZF92YWx1ZVwiLFxuICAgICAgICBvdGhlcjogXCJzdl9xX2RkX290aGVyIGZvcm0tY29udHJvbFwiLFxuICAgICAgICBjbGVhbkJ1dHRvbjogXCJzdl9xX2RkX2NsZWFuLWJ1dHRvblwiLFxuICAgICAgICBjbGVhbkJ1dHRvblN2ZzogXCJzdl9xX2RkX2NsZWFuLWJ1dHRvbi1zdmdcIixcbiAgICAgICAgY2xlYW5CdXR0b25JY29uSWQ6IFwiaWNvbi1jbGVhcl8xNngxNlwiLFxuICAgICAgICBmaWx0ZXJTdHJpbmdJbnB1dDogXCJzdl9xX2RkX2ZpbHRlci1zdHJpbmctaW5wdXRcIixcbiAgICB9LFxuICAgIGh0bWw6IHsgcm9vdDogXCJcIiB9LFxuICAgIGltYWdlOiB7IHJvb3Q6IFwic3ZfcV9pbWFnZVwiLCBpbWFnZTogXCJzdl9pbWFnZV9pbWFnZVwiIH0sXG4gICAgbWF0cml4OiB7XG4gICAgICAgIHJvb3Q6IFwidGFibGUgc3ZfcV9tYXRyaXhcIixcbiAgICAgICAgbGFiZWw6IFwic3ZfcV9tX2xhYmVsXCIsXG4gICAgICAgIGl0ZW1DaGVja2VkOiBcImNoZWNrZWRcIixcbiAgICAgICAgaXRlbURlY29yYXRvcjogXCJzdi1oaWRkZW5cIixcbiAgICAgICAgY2VsbFRleHQ6IFwic3ZfcV9tX2NlbGxfdGV4dFwiLFxuICAgICAgICBjZWxsVGV4dFNlbGVjdGVkOiBcInN2X3FfbV9jZWxsX3NlbGVjdGVkIGJnLXByaW1hcnlcIixcbiAgICAgICAgY2VsbExhYmVsOiBcInN2X3FfbV9jZWxsX2xhYmVsXCIsXG4gICAgICAgIGNlbGxSZXNwb25zaXZlVGl0bGU6IFwic3YtaGlkZGVuXCJcbiAgICB9LFxuICAgIG1hdHJpeGRyb3Bkb3duOiB7XG4gICAgICAgIHJvb3Q6IFwidGFibGVcIixcbiAgICAgICAgY2VsbDogXCJzdl9tYXRyaXhfY2VsbFwiLFxuICAgICAgICBoZWFkZXJDZWxsOiBcInN2X21hdHJpeF9jZWxsX2hlYWRlclwiLFxuICAgICAgICByb3c6IFwic3ZfbWF0cml4X3Jvd1wiLFxuICAgICAgICByb3dBZGRpdGlvbmFsOiBcInN2LW1hdHJpeF9fcm93LS1hZGRpdGlvbmFsXCIsXG4gICAgICAgIGRldGFpbFJvdzogXCJzdl9tYXRyaXhfZGV0YWlsX3Jvd1wiLFxuICAgICAgICBkZXRhaWxSb3dUZXh0OiBcInN2X21hdHJpeF9jZWxsX2RldGFpbF9yb3d0ZXh0XCIsXG4gICAgICAgIGRldGFpbENlbGw6IFwic3ZfbWF0cml4X2NlbGxfZGV0YWlsXCIsXG4gICAgICAgIGRldGFpbEJ1dHRvbjogXCJzdl9tYXRyaXhfY2VsbF9kZXRhaWxfYnV0dG9uXCIsXG4gICAgICAgIGRldGFpbEJ1dHRvbkV4cGFuZGVkOiBcInN2X21hdHJpeF9jZWxsX2RldGFpbF9idXR0b25fZXhwYW5kZWRcIixcbiAgICAgICAgZGV0YWlsSWNvbjogXCJzdl9kZXRhaWxfcGFuZWxfaWNvblwiLFxuICAgICAgICBkZXRhaWxJY29uRXhwYW5kZWQ6IFwic3ZfZGV0YWlsX2V4cGFuZGVkXCIsXG4gICAgICAgIGRldGFpbFBhbmVsQ2VsbDogXCJzdl9tYXRyaXhfY2VsbF9kZXRhaWxfcGFuZWxcIixcbiAgICAgICAgYWN0aW9uc0NlbGw6IFwic3ZfbWF0cml4X2NlbGwgc3ZfbWF0cml4X2NlbGxfYWN0aW9uc1wiLFxuICAgIH0sXG4gICAgbWF0cml4ZHluYW1pYzoge1xuICAgICAgICByb290OiBcInRhYmxlXCIsXG4gICAgICAgIGJ1dHRvbjogXCJidXR0b25cIixcbiAgICAgICAgYnV0dG9uQWRkOiBcIlwiLFxuICAgICAgICBidXR0b25SZW1vdmU6IFwiXCIsXG4gICAgICAgIGljb25BZGQ6IFwiXCIsXG4gICAgICAgIGljb25SZW1vdmU6IFwiXCIsXG4gICAgICAgIGljb25EcmFnOiBcInN2LW1hdHJpeGR5bmFtaWNfX2RyYWctaWNvblwiLFxuICAgICAgICBoZWFkZXJDZWxsOiBcInN2X21hdHJpeF9jZWxsX2hlYWRlclwiLFxuICAgICAgICByb3c6IFwic3ZfbWF0cml4X3Jvd1wiLFxuICAgICAgICBkZXRhaWxSb3c6IFwic3ZfbWF0cml4X2RldGFpbF9yb3dcIixcbiAgICAgICAgZGV0YWlsQ2VsbDogXCJzdl9tYXRyaXhfY2VsbF9kZXRhaWxcIixcbiAgICAgICAgZGV0YWlsQnV0dG9uOiBcInN2X21hdHJpeF9jZWxsX2RldGFpbF9idXR0b25cIixcbiAgICAgICAgZGV0YWlsQnV0dG9uRXhwYW5kZWQ6IFwic3ZfbWF0cml4X2NlbGxfZGV0YWlsX2J1dHRvbl9leHBhbmRlZFwiLFxuICAgICAgICBkZXRhaWxJY29uOiBcInN2X2RldGFpbF9wYW5lbF9pY29uXCIsXG4gICAgICAgIGRldGFpbEljb25FeHBhbmRlZDogXCJzdl9kZXRhaWxfZXhwYW5kZWRcIixcbiAgICAgICAgZGV0YWlsUGFuZWxDZWxsOiBcInN2X21hdHJpeF9jZWxsX2RldGFpbF9wYW5lbFwiLFxuICAgICAgICBhY3Rpb25zQ2VsbDogXCJzdl9tYXRyaXhfY2VsbCBzdl9tYXRyaXhfY2VsbF9hY3Rpb25zXCIsXG4gICAgICAgIGVtcHR5Um93c1NlY3Rpb246IFwic3ZfbWF0cml4X2VtcHR5X3Jvd3Nfc2VjdGlvblwiLFxuICAgICAgICBlbXB0eVJvd3NUZXh0OiBcInN2X21hdHJpeF9lbXB0eV9yb3dzX3RleHRcIixcbiAgICAgICAgZW1wdHlSb3dzQnV0dG9uOiBcIlwiLFxuICAgICAgICBnaG9zdFJvdzogXCJzdi1tYXRyaXgtcm93LS1kcmFnLWRyb3AtZ2hvc3QtbW9kXCJcbiAgICB9LFxuICAgIHBhbmVsZHluYW1pYzoge1xuICAgICAgICByb290OiBcIlwiLFxuICAgICAgICBuYXZpZ2F0aW9uOiBcInN2LXBhbmVsZHluYW1pY19fbmF2aWdhdGlvblwiLFxuICAgICAgICBwcm9ncmVzc1RvcDogXCJzdi1wYW5lbGR5bmFtaWNfX3Byb2dyZXNzIHN2LXBhbmVsZHluYW1pY19fcHJvZ3Jlc3MtLXRvcFwiLFxuICAgICAgICBwcm9ncmVzc0JvdHRvbTogXCJzdi1wYW5lbGR5bmFtaWNfX3Byb2dyZXNzIHN2LXBhbmVsZHluYW1pY19fcHJvZ3Jlc3MtLWJvdHRvbVwiLFxuICAgICAgICB0aXRsZTogXCJzdi10aXRsZSBzdi1xdWVzdGlvbl9fdGl0bGVcIixcbiAgICAgICAgYnV0dG9uOiBcImJ1dHRvblwiLFxuICAgICAgICBidXR0b25BZGQ6IFwiYnV0dG9uIHN2LXBhbmVsZHluYW1pY19fYWRkLWJ0blwiLFxuICAgICAgICBidXR0b25SZW1vdmU6IFwic3ZfcF9yZW1vdmVfYnRuXCIsXG4gICAgICAgIGJ1dHRvblJlbW92ZVJpZ2h0OiBcImJ1dHRvbiBzdi1wYW5lbGR5bmFtaWNfX3JlbW92ZS1idG4tLXJpZ2h0XCIsXG4gICAgICAgIGJ1dHRvblByZXY6IFwic3YtcGFuZWxkeW5hbWljX19wcmV2LWJ0blwiLFxuICAgICAgICBidXR0b25OZXh0OiBcInN2LXBhbmVsZHluYW1pY19fbmV4dC1idG5cIixcbiAgICAgICAgYnV0dG9uUHJldkRpc2FibGVkOiBcInN2LXBhbmVsZHluYW1pY19fcHJldi1idG4tLWRpc2FibGVkXCIsXG4gICAgICAgIGJ1dHRvbk5leHREaXNhYmxlZDogXCJzdi1wYW5lbGR5bmFtaWNfX25leHQtYnRuLS1kaXNhYmxlZFwiLFxuICAgICAgICBwcm9ncmVzc0NvbnRhaW5lcjogXCJzdi1wYW5lbGR5bmFtaWNfX3Byb2dyZXNzLWNvbnRhaW5lclwiLFxuICAgICAgICBwcm9ncmVzczogXCJzdi1wcm9ncmVzc1wiLFxuICAgICAgICBwcm9ncmVzc0JhcjogXCJzdi1wcm9ncmVzc19fYmFyXCIsXG4gICAgICAgIHByb2dyZXNzVGV4dDogXCJzdi1wYW5lbGR5bmFtaWNfX3Byb2dyZXNzLXRleHRcIixcbiAgICAgICAgcGFuZWxXcmFwcGVyOiBcInN2X3Bfd3JhcHBlclwiLFxuICAgICAgICBwYW5lbFdyYXBwZXJJblJvdzogXCJzdl9wX3dyYXBwZXJfaW5fcm93XCIsXG4gICAgICAgIGZvb3RlcjogXCJcIixcbiAgICAgICAgcHJvZ3Jlc3NCdG5JY29uOiBcImljb24tcHJvZ3Jlc3NidXR0b25cIlxuICAgIH0sXG4gICAgbXVsdGlwbGV0ZXh0OiB7XG4gICAgICAgIHJvb3Q6IFwic3ZfcV9tdCB0YWJsZVwiLFxuICAgICAgICBpdGVtVGl0bGU6IFwic3ZfcV9tdF90aXRsZVwiLFxuICAgICAgICBpdGVtOiBcInN2X3FfbXRfaXRlbVwiLFxuICAgICAgICBpdGVtTGFiZWw6IFwic3ZfcV9tdF9sYWJlbFwiLFxuICAgICAgICByb3c6IFwiZm9ybS1ncm91cCBibWQtZm9ybS1ncm91cFwiLFxuICAgICAgICBpdGVtVmFsdWU6IFwic3ZfcV9tdF9pdGVtX3ZhbHVlIGZvcm0tY29udHJvbFwiLFxuICAgIH0sXG4gICAgcmFkaW9ncm91cDoge1xuICAgICAgICByb290OiBcInN2X3FjYmMgZm9ybS1pbmxpbmVcIixcbiAgICAgICAgaXRlbTogXCJyYWRpb1wiLFxuICAgICAgICBpdGVtQ2hlY2tlZDogXCJjaGVja2VkXCIsXG4gICAgICAgIGl0ZW1JbmxpbmU6IFwic3ZfcV9yYWRpb2dyb3VwX2lubGluZVwiLFxuICAgICAgICBsYWJlbDogXCJcIixcbiAgICAgICAgbGFiZWxDaGVja2VkOiBcIlwiLFxuICAgICAgICBpdGVtQ29udHJvbDogXCJcIixcbiAgICAgICAgaXRlbURlY29yYXRvcjogXCJzdi1oaWRkZW5cIixcbiAgICAgICAgY29udHJvbExhYmVsOiBcIlwiLFxuICAgICAgICBtYXRlcmlhbERlY29yYXRvcjogXCJjaXJjbGVcIixcbiAgICAgICAgb3RoZXI6IFwic3ZfcV9yYWRpb2dyb3VwX290aGVyIGZvcm0tY29udHJvbFwiLFxuICAgICAgICBjbGVhckJ1dHRvbjogXCJzdl9xX3JhZGlvZ3JvdXBfY2xlYXIgYnV0dG9uXCIsXG4gICAgICAgIGNvbHVtbjogXCJzdl9xX3NlbGVjdF9jb2x1bW5cIixcbiAgICB9LFxuICAgIGJ1dHRvbmdyb3VwOiB7XG4gICAgICAgIHJvb3Q6IFwic3YtYnV0dG9uLWdyb3VwXCIsXG4gICAgICAgIGl0ZW06IFwic3YtYnV0dG9uLWdyb3VwX19pdGVtXCIsXG4gICAgICAgIGl0ZW1JY29uOiBcInN2LWJ1dHRvbi1ncm91cF9faXRlbS1pY29uXCIsXG4gICAgICAgIGl0ZW1EZWNvcmF0b3I6IFwic3YtYnV0dG9uLWdyb3VwX19pdGVtLWRlY29yYXRvclwiLFxuICAgICAgICBpdGVtQ2FwdGlvbjogXCJzdi1idXR0b24tZ3JvdXBfX2l0ZW0tY2FwdGlvblwiLFxuICAgICAgICBpdGVtSG92ZXI6IFwic3YtYnV0dG9uLWdyb3VwX19pdGVtLS1ob3ZlclwiLFxuICAgICAgICBpdGVtU2VsZWN0ZWQ6IFwic3YtYnV0dG9uLWdyb3VwX19pdGVtLS1zZWxlY3RlZFwiLFxuICAgICAgICBpdGVtRGlzYWJsZWQ6IFwic3YtYnV0dG9uLWdyb3VwX19pdGVtLS1kaXNhYmxlZFwiLFxuICAgICAgICBpdGVtQ29udHJvbDogXCJzdi12aXN1YWxseWhpZGRlblwiLFxuICAgIH0sXG4gICAgaW1hZ2VwaWNrZXI6IHtcbiAgICAgICAgcm9vdDogXCJzdl9pbWdzZWxcIixcbiAgICAgICAgaXRlbTogXCJzdl9xX2ltZ3NlbFwiLFxuICAgICAgICBpdGVtQ2hlY2tlZDogXCJjaGVja2VkXCIsXG4gICAgICAgIGl0ZW1JbmxpbmU6IFwic3ZfcV9pbWFnZXBpY2tlcl9pbmxpbmVcIixcbiAgICAgICAgbGFiZWw6IFwic3ZfcV9pbWdzZWxfbGFiZWxcIixcbiAgICAgICAgaXRlbUNvbnRyb2w6IFwic3ZfcV9pbWdzZWxfY29udHJvbF9pdGVtXCIsXG4gICAgICAgIGltYWdlOiBcInN2X3FfaW1nc2VsX2ltYWdlXCIsXG4gICAgICAgIGl0ZW1UZXh0OiBcInN2X3FfaW1nc2VsX3RleHRcIixcbiAgICAgICAgY2xlYXJCdXR0b246IFwic3ZfcV9yYWRpb2dyb3VwX2NsZWFyXCIsXG4gICAgfSxcbiAgICByYXRpbmc6IHtcbiAgICAgICAgcm9vdDogXCJidG4tZ3JvdXBcIixcbiAgICAgICAgaXRlbTogXCJidG4gYnRuLWRlZmF1bHQgYnRuLXNlY29uZGFyeVwiLFxuICAgICAgICBzZWxlY3RlZDogXCJhY3RpdmVcIixcbiAgICAgICAgbWluVGV4dDogXCJzdl9xX3JhdGluZ19taW5fdGV4dFwiLFxuICAgICAgICBpdGVtVGV4dDogXCJzdl9xX3JhdGluZ19pdGVtX3RleHRcIixcbiAgICAgICAgbWF4VGV4dDogXCJzdl9xX3JhdGluZ19tYXhfdGV4dFwiLFxuICAgICAgICBkaXNhYmxlZDogXCJcIixcbiAgICB9LFxuICAgIHRleHQ6IFwiZm9ybS1jb250cm9sXCIsXG4gICAgZXhwcmVzc2lvbjogXCJmb3JtLWNvbnRyb2xcIixcbiAgICBmaWxlOiB7XG4gICAgICAgIHJvb3Q6IFwic3ZfcV9maWxlXCIsXG4gICAgICAgIHBsYWNlaG9sZGVySW5wdXQ6IFwic3ZfcV9maWxlX3BsYWNlaG9sZGVyXCIsXG4gICAgICAgIHByZXZpZXc6IFwic3ZfcV9maWxlX3ByZXZpZXdcIixcbiAgICAgICAgcmVtb3ZlQnV0dG9uOiBcInN2X3FfZmlsZV9yZW1vdmVfYnV0dG9uXCIsXG4gICAgICAgIGZpbGVJbnB1dDogXCJzdl9xX2ZpbGVfaW5wdXRcIixcbiAgICAgICAgcmVtb3ZlRmlsZTogXCJzdl9xX2ZpbGVfcmVtb3ZlXCIsXG4gICAgICAgIGZpbGVEZWNvcmF0b3I6IFwic3YtaGlkZGVuXCIsXG4gICAgICAgIGZpbGVTaWduOiBcInN2X3FfZmlsZV9zaWduXCIsXG4gICAgICAgIHJlbW92ZUJ1dHRvbkJvdHRvbTogXCJzdi1oaWRkZW5cIixcbiAgICAgICAgZHJhZ0FyZWFQbGFjZWhvbGRlcjogXCJzdi1oaWRkZW5cIixcbiAgICAgICAgZmlsZUxpc3Q6IFwiXCIsXG4gICAgfSxcbiAgICBzaWduYXR1cmVwYWQ6IHtcbiAgICAgICAgcm9vdDogXCJzdl9xX3NpZ25hdHVyZXBhZCBzanNfc3BfY29udGFpbmVyXCIsXG4gICAgICAgIGNvbnRyb2xzOiBcInNqc19zcF9jb250cm9sc1wiLFxuICAgICAgICBwbGFjZWhvbGRlcjogXCJzanNfc3BfcGxhY2Vob2xkZXJcIixcbiAgICAgICAgY2FudmFzOiBcInNqc19zcF9jYW52YXNcIixcbiAgICAgICAgYmFja2dyb3VuZEltYWdlOiBcInNqc19zcF9fYmFja2dyb3VuZC1pbWFnZVwiLFxuICAgICAgICBjbGVhckJ1dHRvbjogXCJzanNfc3BfY2xlYXJcIixcbiAgICB9LFxuICAgIHNhdmVEYXRhOiB7XG4gICAgICAgIHJvb3Q6IFwiXCIsXG4gICAgICAgIGluZm86IFwiYWxlcnQgYWxlcnQtaW5mb1wiLFxuICAgICAgICBlcnJvcjogXCJhbGVydCBhbGVydC1kYW5nZXJcIixcbiAgICAgICAgc3VjY2VzczogXCJhbGVydCBhbGVydC1zdWNjZXNzXCIsXG4gICAgICAgIGJ1dHRvbjogXCJcIixcbiAgICB9LFxuICAgIHdpbmRvdzoge1xuICAgICAgICByb290OiBcIm1vZGFsLWNvbnRlbnRcIixcbiAgICAgICAgYm9keTogXCJtb2RhbC1ib2R5XCIsXG4gICAgICAgIGhlYWRlcjoge1xuICAgICAgICAgICAgcm9vdDogXCJtb2RhbC1oZWFkZXIgcGFuZWwtdGl0bGVcIixcbiAgICAgICAgICAgIHRpdGxlOiBcInB1bGwtbGVmdFwiLFxuICAgICAgICAgICAgYnV0dG9uOiBcImdseXBoaWNvbiBwdWxsLXJpZ2h0XCIsXG4gICAgICAgICAgICBidXR0b25FeHBhbmRlZDogXCJnbHlwaGljb24gcHVsbC1yaWdodCBnbHlwaGljb24tY2hldnJvbi11cFwiLFxuICAgICAgICAgICAgYnV0dG9uQ29sbGFwc2VkOiBcImdseXBoaWNvbiBwdWxsLXJpZ2h0IGdseXBoaWNvbi1jaGV2cm9uLWRvd25cIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9wbHVnaW5zL3RoZW1lcy9ib290c3RyYXAvdGhlbWUtc2V0dGluZ3MudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3BsdWdpbnMvdGhlbWVzL2Jvb3RzdHJhcC90aGVtZS1zZXR0aW5ncy50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogYm9vdHN0cmFwVGhlbWVOYW1lLCBib290c3RyYXBUaGVtZUNvbG9ycywgYm9vdHN0cmFwVGhlbWVDc3NSdWxlcyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJib290c3RyYXBUaGVtZU5hbWVcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBib290c3RyYXBUaGVtZU5hbWU7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImJvb3RzdHJhcFRoZW1lQ29sb3JzXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYm9vdHN0cmFwVGhlbWVDb2xvcnM7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImJvb3RzdHJhcFRoZW1lQ3NzUnVsZXNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBib290c3RyYXBUaGVtZUNzc1J1bGVzOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBzdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgc3VydmV5LWNvcmUgKi8gXCIuL3NyYy9lbnRyaWVzL2NvcmUudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2NvbW1vbl90aGVtZV9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vY29tbW9uLXRoZW1lLXNldHRpbmdzICovIFwiLi9zcmMvcGx1Z2lucy90aGVtZXMvY29tbW9uLXRoZW1lLXNldHRpbmdzLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9jc3Nib290c3RyYXBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vY3NzYm9vdHN0cmFwICovIFwiLi9zcmMvcGx1Z2lucy90aGVtZXMvYm9vdHN0cmFwL2Nzc2Jvb3RzdHJhcC50c1wiKTtcblxuXG5cbnZhciBib290c3RyYXBUaGVtZU5hbWUgPSBcImJvb3RzdHJhcFwiO1xuc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN1cnZleUNzc1wiXVtib290c3RyYXBUaGVtZU5hbWVdID0gX2Nzc2Jvb3RzdHJhcF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiZGVmYXVsdENzc1wiXTtcbnZhciBib290c3RyYXBUaGVtZUNvbG9ycyA9IHtcbiAgICBcIiRtYWluLWNvbG9yXCI6IFwiIzE4YTY4OVwiLFxuICAgIFwiJHRleHQtY29sb3JcIjogXCIjNDA0MDQwO1wiLFxuICAgIFwiJHRleHQtaW5wdXQtY29sb3JcIjogXCIjNDA0MDQwO1wiLFxuICAgIFwiJHByb2dyZXNzLXRleHQtY29sb3JcIjogXCIjOWQ5ZDlkXCIsXG4gICAgXCIkZGlzYWJsZS1jb2xvclwiOiBcIiNkYmRiZGJcIixcbiAgICBcIiRoZWFkZXItYmFja2dyb3VuZC1jb2xvclwiOiBcIiNlN2U3ZTdcIixcbiAgICBcIiRkaXNhYmxlZC1sYWJlbC1jb2xvclwiOiBcInJnYmEoNjQsIDY0LCA2NCwgMC41KVwiLFxuICAgIFwiJHNsaWRlci1jb2xvclwiOiBcIndoaXRlXCIsXG4gICAgXCIkZGlzYWJsZWQtc3dpdGNoLWNvbG9yXCI6IFwiIzlmOWY5ZlwiLFxuICAgIFwiJGRpc2FibGVkLXNsaWRlci1jb2xvclwiOiBcIiNjZmNmY2ZcIixcbiAgICBcIiRmb3JlZ3JvdW5kLWxpZ2h0XCI6IFwiIzkwOTA5MFwiLFxuICAgIFwiJGZvcmVncm91bmQtZGlzYWJsZWRcIjogXCIjMTYxNjE2XCIsXG4gICAgXCIkYmFja2dyb3VuZC1kaW1cIjogXCIjZjNmM2YzXCIsXG4gICAgXCIkcHJvZ3Jlc3MtYnV0dG9ucy1jb2xvclwiOiBcIiM4ZGQ2YzdcIixcbiAgICBcIiRwcm9ncmVzcy1idXR0b25zLWxpbmUtY29sb3JcIjogXCIjZDRkNGQ0XCIsXG59O1xudmFyIGJvb3RzdHJhcFRoZW1lQ3NzUnVsZXMgPSB7XG4gICAgXCIuc3ZfbWFpbiAuc3ZfcV9pbWdzZWwuY2hlY2tlZCBsYWJlbD5kaXZcIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1jb2xvclwiLFxuICAgIFwiLnN2X21haW4gLnN2X3BfZGVzY3JpcHRpb25cIjogXCJwYWRkaW5nLWxlZnQ6IDEuNjZlbTtcIixcbiAgICBcIi5zdl9tYWluIC5zdl9xc3RuX2Vycm9yX2JvdHRvbVwiOiBcIm1hcmdpbi10b3A6IDIwcHg7IG1hcmdpbi1ib3R0b206IDA7XCIsXG4gICAgXCIuc3ZfbWFpbiAucHJvZ3Jlc3NcIjogXCJ3aWR0aDogNjAlO1wiLFxuICAgIFwiLnN2X21haW4gLnByb2dyZXNzLWJhclwiOiBcIndpZHRoOiBhdXRvOyBtYXJnaW4tbGVmdDogMnB4OyBtYXJnaW4tcmlnaHQ6IDJweDtcIixcbiAgICBcIi5zdl9tYWluIC50YWJsZT50Ym9keT50cj50ZFwiOiBcIm1pbi13aWR0aDogOTBweDtcIixcbiAgICBcIi5zdl9tYWluIGYtcGFuZWwgLnN2X3FzdG5cIjogXCJwYWRkaW5nOiAwOyB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1wiLFxuICAgIFwiLnN2X21haW4gLnN2X3FfaW1hZ2VcIjogXCJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3Zfcm93IC5zdl9xc3RuOmZpcnN0LWNoaWxkOmxhc3QtY2hpbGRcIjogXCJmbGV4OiBub25lICFpbXBvcnRhbnQ7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3Zfcm93IC5zdl9wX2NvbnRhaW5lcjpmaXJzdC1jaGlsZDpsYXN0LWNoaWxkXCI6IFwiZmxleDogbm9uZSAhaW1wb3J0YW50O1wiLFxuICAgIC8vcHJvZ3Jlc3MgYmFyXG4gICAgXCIuc3ZfbWFpbiAuc3YtcHJvZ3Jlc3NcIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkaGVhZGVyLWJhY2tncm91bmQtY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtcHJvZ3Jlc3NfX2JhclwiOiBcImJhY2tncm91bmQtY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuICAgIC8vcHJvZ3Jlc3MgYnV0dG9uc1xuICAgIFwiLnN2X21haW4gLnN2X3Byb2dyZXNzLWJ1dHRvbnNfX2xpc3QgbGk6YmVmb3JlXCI6IFwiYm9yZGVyLWNvbG9yOiAkcHJvZ3Jlc3MtYnV0dG9ucy1jb2xvcjsgYmFja2dyb3VuZC1jb2xvcjogJHByb2dyZXNzLWJ1dHRvbnMtY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdCBsaTphZnRlclwiOiBcImJhY2tncm91bmQtY29sb3I6ICRwcm9ncmVzcy1idXR0b25zLWxpbmUtY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdCAuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fcGFnZS10aXRsZVwiOiBcImNvbG9yOiAkdGV4dC1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluIC5zdl9wcm9ncmVzcy1idXR0b25zX19saXN0IC5zdl9wcm9ncmVzcy1idXR0b25zX19wYWdlLWRlc2NyaXB0aW9uXCI6IFwiY29sb3I6ICR0ZXh0LWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4gLnN2X3Byb2dyZXNzLWJ1dHRvbnNfX2xpc3QgbGkuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdC1lbGVtZW50LS1wYXNzZWQ6YmVmb3JlXCI6IFwiYm9yZGVyLWNvbG9yOiAkbWFpbi1jb2xvcjsgYmFja2dyb3VuZC1jb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdCBsaS5zdl9wcm9ncmVzcy1idXR0b25zX19saXN0LWVsZW1lbnQtLXBhc3NlZCArIGxpOmFmdGVyXCI6IFwiYmFja2dyb3VuZC1jb2xvcjogJHByb2dyZXNzLWJ1dHRvbnMtY29sb3JcIixcbiAgICBcIi5zdl9tYWluIC5zdl9wcm9ncmVzcy1idXR0b25zX19saXN0IGxpLnN2X3Byb2dyZXNzLWJ1dHRvbnNfX2xpc3QtZWxlbWVudC0tY3VycmVudDpiZWZvcmVcIjogXCJib3JkZXItY29sb3I6ICRtYWluLWNvbG9yOyBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcIixcbiAgICBcIi5zdl9tYWluIC5zdl9wcm9ncmVzcy1idXR0b25zX19saXN0IGxpLnN2X3Byb2dyZXNzLWJ1dHRvbnNfX2xpc3QtZWxlbWVudC0tcGFzc2VkLnN2X3Byb2dyZXNzLWJ1dHRvbnNfX2xpc3QtZWxlbWVudC0tY3VycmVudDpiZWZvcmVcIjogXCJib3JkZXItY29sb3I6ICRtYWluLWNvbG9yOyBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcIixcbiAgICAvL3BhbmVsZHluYW1pY1xuICAgIFwiLnN2X21haW4gLnN2LXBhbmVsZHluYW1pY19fcHJldi1idG4uc3YtcGFuZWxkeW5hbWljX19wcmV2LWJ0bi0tZGlzYWJsZWQsIC5zdl9tYWluIC5zdi1wYW5lbGR5bmFtaWNfX25leHQtYnRuLnN2LXBhbmVsZHluYW1pY19fbmV4dC1idG4tLWRpc2FibGVkXCI6IFwiZmlsbDogJGRpc2FibGUtY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtcGFuZWxkeW5hbWljX19wcm9ncmVzcy10ZXh0XCI6IFwiY29sb3I6ICRwcm9ncmVzcy10ZXh0LWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LXBhbmVsZHluYW1pY19fcHJldi1idG4sIC5zdl9tYWluIC5zdi1wYW5lbGR5bmFtaWNfX25leHQtYnRuXCI6IFwiZmlsbDogJHRleHQtY29sb3JcIixcbiAgICAvL2Jvb2xlYW5cbiAgICBcIi5zdl9tYWluIC5zdi1ib29sZWFuX19zd2l0Y2hcIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1ib29sZWFuX19zbGlkZXJcIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkc2xpZGVyLWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LWJvb2xlYW5fX2xhYmVsLS1kaXNhYmxlZFwiOiBcImNvbG9yOiAkZGlzYWJsZWQtbGFiZWwtY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtYm9vbGVhbi0tZGlzYWJsZWQgLnN2LWJvb2xlYW5fX3N3aXRjaFwiOiBcImJhY2tncm91bmQtY29sb3I6ICRkaXNhYmxlZC1zd2l0Y2gtY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtYm9vbGVhbi0tZGlzYWJsZWQgIC5zdi1ib29sZWFuX19zbGlkZXJcIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkZGlzYWJsZWQtc2xpZGVyLWNvbG9yO1wiLFxuICAgIC8vZW8gYm9vbGVhblxuICAgIC8vc2lnbmF0dXJlIHBhZFxuICAgIFwiLnN2X21haW4gLnNqc19zcF9jb250YWluZXJcIjogXCJib3JkZXI6IDFweCBkYXNoZWQgJGRpc2FibGUtY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc2pzX3NwX3BsYWNlaG9sZGVyXCI6IFwiY29sb3I6ICRmb3JlZ3JvdW5kLWxpZ2h0O1wiLFxuICAgIFwiLnN2X21haW4gLnN2X21hdHJpeF9kZXRhaWxfcm93XCI6IFwiYmFja2dyb3VuZC1jb2xvcjogI2VkZWRlZDsgYm9yZGVyLXRvcDogMXB4IHNvbGlkICRoZWFkZXItYmFja2dyb3VuZC1jb2xvcjsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICRoZWFkZXItYmFja2dyb3VuZC1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1hY3Rpb24tYmFyLWl0ZW1cIjogXCJjb2xvcjogJHRleHQtY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtYWN0aW9uLWJhci1pdGVtX19pY29uIHVzZVwiOiBcImZpbGw6ICRmb3JlZ3JvdW5kLWxpZ2h0O1wiLFxuICAgIFwiLnN2X21haW4gLnN2LWFjdGlvbi1iYXItaXRlbTpob3ZlclwiOiBcImJhY2tncm91bmQtY29sb3I6ICRiYWNrZ3JvdW5kLWRpbTtcIixcbiAgICBcIi5zdi1za2VsZXRvbi1lbGVtZW50XCI6IFwiYmFja2dyb3VuZC1jb2xvcjogJGJhY2tncm91bmQtZGltO1wiLFxufTtcbk9iamVjdChfY29tbW9uX3RoZW1lX3NldHRpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJzZXRTdHlsZXNcIl0pKCk7XG5PYmplY3QoX2NvbW1vbl90aGVtZV9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wic2V0TWVkaWFTdHlsZXNcIl0pKCk7XG5zdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiU3R5bGVzTWFuYWdlclwiXS5UaGVtZUNvbG9yc1tib290c3RyYXBUaGVtZU5hbWVdID0gYm9vdHN0cmFwVGhlbWVDb2xvcnM7XG5zdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiU3R5bGVzTWFuYWdlclwiXS5UaGVtZUNzc1tib290c3RyYXBUaGVtZU5hbWVdID0gYm9vdHN0cmFwVGhlbWVDc3NSdWxlcztcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9wbHVnaW5zL3RoZW1lcy9ib290c3RyYXBtYXRlcmlhbC9jc3Nib290c3RyYXBtYXRlcmlhbC50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9wbHVnaW5zL3RoZW1lcy9ib290c3RyYXBtYXRlcmlhbC9jc3Nib290c3RyYXBtYXRlcmlhbC50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBkZWZhdWx0Q3NzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImRlZmF1bHRDc3NcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBkZWZhdWx0Q3NzOyB9KTtcbnZhciBkZWZhdWx0Q3NzID0ge1xuICAgIHJvb3Q6IFwic3ZfbWFpbiBzdl9ib290c3RyYXBtYXRlcmlhbF9jc3NcIixcbiAgICBjb250YWluZXI6IFwic3ZfY29udGFpbmVyXCIsXG4gICAgaGVhZGVyOiBcImNhcmQtaGVhZGluZ1wiLFxuICAgIGJvZHk6IFwiY2FyZC1ib2R5XCIsXG4gICAgYm9keUVtcHR5OiBcImNhcmQtYm9keSBzdl9ib2R5X2VtcHR5XCIsXG4gICAgZm9vdGVyOiBcImNhcmQtZm9vdGVyXCIsXG4gICAgdGl0bGU6IFwiXCIsXG4gICAgZGVzY3JpcHRpb246IFwiXCIsXG4gICAgbG9nbzogXCJzdl9sb2dvXCIsXG4gICAgbG9nb0ltYWdlOiBcInN2X2xvZ29fX2ltYWdlXCIsXG4gICAgaGVhZGVyVGV4dDogXCJzdl9oZWFkZXJfX3RleHRcIixcbiAgICBuYXZpZ2F0aW9uQnV0dG9uOiBcImJ0bi1wcmltYXJ5IHN2X25hdl9idG5cIixcbiAgICBjb21wbGV0ZWRQYWdlOiBcIlwiLFxuICAgIG5hdmlnYXRpb246IHtcbiAgICAgICAgY29tcGxldGU6IFwic3ZfY29tcGxldGVfYnRuXCIsXG4gICAgICAgIHByZXY6IFwic3ZfcHJldl9idG5cIixcbiAgICAgICAgbmV4dDogXCJzdl9uZXh0X2J0blwiLFxuICAgICAgICBzdGFydDogXCJzdl9zdGFydF9idG5cIixcbiAgICAgICAgcHJldmlldzogXCJzdl9wcmV2aWV3X2J0blwiLFxuICAgICAgICBlZGl0OiBcInN2X2VkaXRfYnRuXCIsXG4gICAgfSxcbiAgICBwcm9ncmVzczogXCJwcm9ncmVzcyBjZW50ZXItYmxvY2sgbXgtYXV0byBtYi00XCIsXG4gICAgcHJvZ3Jlc3NCYXI6IFwicHJvZ3Jlc3MtYmFyXCIsXG4gICAgcHJvZ3Jlc3NUZXh0VW5kZXJCYXI6IFwic3YtaGlkZGVuXCIsXG4gICAgcHJvZ3Jlc3NUZXh0SW5CYXI6IFwic3YtaGlkZGVuXCIsXG4gICAgcHJvZ3Jlc3NCdXR0b25zQ29udGFpbmVyQ2VudGVyOiBcInN2X3Byb2dyZXNzLWJ1dHRvbnNfX2NvbnRhaW5lci1jZW50ZXJcIixcbiAgICBwcm9ncmVzc0J1dHRvbnNDb250YWluZXI6IFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19fY29udGFpbmVyXCIsXG4gICAgcHJvZ3Jlc3NCdXR0b25zSW1hZ2VCdXR0b25MZWZ0OiBcInN2X3Byb2dyZXNzLWJ1dHRvbnNfX2ltYWdlLWJ1dHRvbi1sZWZ0XCIsXG4gICAgcHJvZ3Jlc3NCdXR0b25zSW1hZ2VCdXR0b25SaWdodDogXCJzdl9wcm9ncmVzcy1idXR0b25zX19pbWFnZS1idXR0b24tcmlnaHRcIixcbiAgICBwcm9ncmVzc0J1dHRvbnNJbWFnZUJ1dHRvbkhpZGRlbjogXCJzdl9wcm9ncmVzcy1idXR0b25zX19pbWFnZS1idXR0b24tLWhpZGRlblwiLFxuICAgIHByb2dyZXNzQnV0dG9uc0xpc3RDb250YWluZXI6IFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdC1jb250YWluZXJcIixcbiAgICBwcm9ncmVzc0J1dHRvbnNMaXN0OiBcInN2X3Byb2dyZXNzLWJ1dHRvbnNfX2xpc3RcIixcbiAgICBwcm9ncmVzc0J1dHRvbnNMaXN0RWxlbWVudFBhc3NlZDogXCJzdl9wcm9ncmVzcy1idXR0b25zX19saXN0LWVsZW1lbnQtLXBhc3NlZFwiLFxuICAgIHByb2dyZXNzQnV0dG9uc0xpc3RFbGVtZW50Q3VycmVudDogXCJzdl9wcm9ncmVzcy1idXR0b25zX19saXN0LWVsZW1lbnQtLWN1cnJlbnRcIixcbiAgICBwcm9ncmVzc0J1dHRvbnNMaXN0RWxlbWVudE5vbkNsaWNrYWJsZTogXCJzdl9wcm9ncmVzcy1idXR0b25zX19saXN0LWVsZW1lbnQtLW5vbmNsaWNrYWJsZVwiLFxuICAgIHByb2dyZXNzQnV0dG9uc1BhZ2VUaXRsZTogXCJzdl9wcm9ncmVzcy1idXR0b25zX19wYWdlLXRpdGxlXCIsXG4gICAgcHJvZ3Jlc3NCdXR0b25zUGFnZURlc2NyaXB0aW9uOiBcInN2X3Byb2dyZXNzLWJ1dHRvbnNfX3BhZ2UtZGVzY3JpcHRpb25cIixcbiAgICBwYWdlOiB7XG4gICAgICAgIHJvb3Q6IFwiXCIsXG4gICAgICAgIHRpdGxlOiBcIlwiLFxuICAgICAgICBkZXNjcmlwdGlvbjogXCJzbWFsbFwiLFxuICAgIH0sXG4gICAgcGFnZVRpdGxlOiBcIlwiLFxuICAgIHBhZ2VEZXNjcmlwdGlvbjogXCJzbWFsbFwiLFxuICAgIHJvdzogXCJzdl9yb3dcIixcbiAgICBxdWVzdGlvbjoge1xuICAgICAgICBtYWluUm9vdDogXCJzdl9xc3RuIGZvcm0tZ3JvdXAgYm1kLWZvcm0tZ3JvdXBcIixcbiAgICAgICAgZmxvd1Jvb3Q6IFwic3ZfcV9mbG93IGZvcm0tZ3JvdXAgYm1kLWZvcm0tZ3JvdXBcIixcbiAgICAgICAgaGVhZGVyOiBcIlwiLFxuICAgICAgICBoZWFkZXJMZWZ0OiBcInRpdGxlLWxlZnRcIixcbiAgICAgICAgY29udGVudDogXCJcIixcbiAgICAgICAgY29udGVudExlZnQ6IFwiY29udGVudC1sZWZ0XCIsXG4gICAgICAgIHRpdGxlTGVmdFJvb3Q6IFwic3ZfcXN0bl9sZWZ0XCIsXG4gICAgICAgIHJlcXVpcmVkVGV4dDogXCJzdl9xX3JlcXVpcmVkX3RleHRcIixcbiAgICAgICAgdGl0bGU6IFwiXCIsXG4gICAgICAgIHRpdGxlRXhwYW5kYWJsZTogXCJzdl9xX3RpdGxlX2V4cGFuZGFibGVcIixcbiAgICAgICAgdGl0bGVFeHBhbmRlZDogXCJzdl9xX3RpdGxlX2V4cGFuZGVkXCIsXG4gICAgICAgIHRpdGxlQ29sbGFwc2VkOiBcInN2X3FfdGl0bGVfY29sbGFwc2VkXCIsXG4gICAgICAgIG51bWJlcjogXCJzdl9xX251bVwiLFxuICAgICAgICBkZXNjcmlwdGlvbjogXCJzbWFsbFwiLFxuICAgICAgICBkZXNjcmlwdGlvblVuZGVySW5wdXQ6IFwic21hbGxcIixcbiAgICAgICAgY29tbWVudDogXCJmb3JtLWNvbnRyb2xcIixcbiAgICAgICAgcmVxdWlyZWQ6IFwiXCIsXG4gICAgICAgIHRpdGxlUmVxdWlyZWQ6IFwiXCIsXG4gICAgICAgIGhhc0Vycm9yOiBcImhhcy1lcnJvclwiLFxuICAgICAgICBpbmRlbnQ6IDIwLFxuICAgICAgICBmb3JtR3JvdXA6IFwiZm9ybS1ncm91cCBibWQtZm9ybS1ncm91cFwiLFxuICAgICAgICBkaXNhYmxlZDogXCJzdl9xLS1kaXNhYmxlZFwiLFxuICAgIH0sXG4gICAgcGFuZWw6IHtcbiAgICAgICAgdGl0bGU6IFwic3ZfcF90aXRsZVwiLFxuICAgICAgICB0aXRsZUV4cGFuZGFibGU6IFwic3ZfcF90aXRsZV9leHBhbmRhYmxlXCIsXG4gICAgICAgIHRpdGxlRXhwYW5kZWQ6IFwic3ZfcF90aXRsZV9leHBhbmRlZFwiLFxuICAgICAgICB0aXRsZUNvbGxhcHNlZDogXCJzdl9wX3RpdGxlX2NvbGxhcHNlZFwiLFxuICAgICAgICB0aXRsZU9uRXJyb3I6IFwiXCIsXG4gICAgICAgIGljb246IFwic3ZfcGFuZWxfaWNvblwiLFxuICAgICAgICBpY29uRXhwYW5kZWQ6IFwic3ZfZXhwYW5kZWRcIixcbiAgICAgICAgZGVzY3JpcHRpb246IFwic21hbGwgc3ZfcF9kZXNjcmlwdGlvblwiLFxuICAgICAgICBjb250YWluZXI6IFwic3ZfcF9jb250YWluZXJcIixcbiAgICAgICAgZm9vdGVyOiBcInN2X3BfZm9vdGVyXCIsXG4gICAgICAgIG51bWJlcjogXCJzdl9xX251bVwiLFxuICAgICAgICByZXF1aXJlZFRleHQ6IFwic3ZfcV9yZXF1aXJlZF90ZXh0XCIsXG4gICAgfSxcbiAgICBlcnJvcjoge1xuICAgICAgICByb290OiBcImFsZXJ0IGFsZXJ0LWRhbmdlclwiLFxuICAgICAgICBpY29uOiBcImdseXBoaWNvbiBnbHlwaGljb24tZXhjbGFtYXRpb24tc2lnblwiLFxuICAgICAgICBpdGVtOiBcIlwiLFxuICAgICAgICBsb2NhdGlvblRvcDogXCJzdl9xc3RuX2Vycm9yX3RvcFwiLFxuICAgICAgICBsb2NhdGlvbkJvdHRvbTogXCJzdl9xc3RuX2Vycm9yX2JvdHRvbVwiLFxuICAgIH0sXG4gICAgYm9vbGVhbjoge1xuICAgICAgICByb290OiBcInN2X3FibG4gY2hlY2tib3hcIixcbiAgICAgICAgcm9vdFJhZGlvOiBcInN2X3FibG4gZm9ybS1pbmxpbmUgY2hlY2tib3hcIixcbiAgICAgICAgaXRlbTogXCJzdi1ib29sZWFuXCIsXG4gICAgICAgIGNvbnRyb2w6IFwic3YtdmlzdWFsbHloaWRkZW5cIixcbiAgICAgICAgY29udHJvbENoZWNrYm94OiBcInN2LXZpc3VhbGx5aGlkZGVuXCIsXG4gICAgICAgIGl0ZW1DaGVja2VkOiBcInN2LWJvb2xlYW4tLWNoZWNrZWQgY2hlY2tlZFwiLFxuICAgICAgICBpdGVtSW5kZXRlcm1pbmF0ZTogXCJzdi1ib29sZWFuLS1pbmRldGVybWluYXRlXCIsXG4gICAgICAgIGl0ZW1EaXNhYmxlZDogXCJzdi1ib29sZWFuLS1kaXNhYmxlZFwiLFxuICAgICAgICBzd2l0Y2g6IFwic3YtYm9vbGVhbl9fc3dpdGNoXCIsXG4gICAgICAgIHNsaWRlcjogXCJzdi1ib29sZWFuX19zbGlkZXJcIixcbiAgICAgICAgbGFiZWw6IFwic3YtYm9vbGVhbl9fbGFiZWwgXCIsXG4gICAgICAgIGRpc2FibGVkTGFiZWw6IFwic3YtYm9vbGVhbl9fbGFiZWwtLWRpc2FibGVkXCIsXG4gICAgICAgIHNsaWRlckdob3N0OiBcInN2LWJvb2xlYW5fX3RodW1iLWdob3N0XCIsXG4gICAgICAgIG1hdGVyaWFsRGVjb3JhdG9yOiBcInN2LWl0ZW1fX2RlY29yYXRvciBzdi1ib29sZWFuX19kZWNvcmF0b3JcIixcbiAgICAgICAgaXRlbURlY29yYXRvcjogXCJzdi1pdGVtX19zdmcgc3YtYm9vbGVhbl9fc3ZnXCIsXG4gICAgICAgIGNoZWNrZWRQYXRoOiBcInN2LWJvb2xlYW5fX2NoZWNrZWQtcGF0aFwiLFxuICAgICAgICB1bmNoZWNrZWRQYXRoOiBcInN2LWJvb2xlYW5fX3VuY2hlY2tlZC1wYXRoXCIsXG4gICAgICAgIGluZGV0ZXJtaW5hdGVQYXRoOiBcInN2LWJvb2xlYW5fX2luZGV0ZXJtaW5hdGUtcGF0aFwiLFxuICAgIH0sXG4gICAgY2hlY2tib3g6IHtcbiAgICAgICAgcm9vdDogXCJzdl9xY2J4XCIsXG4gICAgICAgIGl0ZW06IFwiY2hlY2tib3hcIixcbiAgICAgICAgaXRlbUNoZWNrZWQ6IFwiY2hlY2tlZFwiLFxuICAgICAgICBpdGVtU2VsZWN0QWxsOiBcInN2X3FfY2hlY2tib3hfc2VsZWN0YWxsXCIsXG4gICAgICAgIGl0ZW1Ob25lOiBcInN2X3FfY2hlY2tib3hfbm9uZVwiLFxuICAgICAgICBpdGVtSW5saW5lOiBcInN2X3FfY2hlY2tib3hfaW5saW5lXCIsXG4gICAgICAgIGl0ZW1EZWNvcmF0b3I6IFwic3YtaGlkZGVuXCIsXG4gICAgICAgIGl0ZW1Db250cm9sOiBcIlwiLFxuICAgICAgICBsYWJlbDogXCJcIixcbiAgICAgICAgbGFiZWxDaGVja2VkOiBcIlwiLFxuICAgICAgICBjb250cm9sTGFiZWw6IFwiXCIsXG4gICAgICAgIG1hdGVyaWFsRGVjb3JhdG9yOiBcImNoZWNrYm94LWRlY29yYXRvclwiLFxuICAgICAgICBvdGhlcjogXCJzdl9xX2NoZWNrYm94X290aGVyIGZvcm0tY29udHJvbFwiLFxuICAgICAgICBjb2x1bW46IFwic3ZfcV9zZWxlY3RfY29sdW1uXCIsXG4gICAgfSxcbiAgICByYW5raW5nOiB7XG4gICAgICAgIHJvb3Q6IFwic3YtcmFua2luZ1wiLFxuICAgICAgICByb290TW9iaWxlTW9kOiBcInN2LXJhbmtpbmctLW1vYmlsZVwiLFxuICAgICAgICByb290RHJhZ01vZDogXCJzdi1yYW5raW5nLS1kcmFnXCIsXG4gICAgICAgIHJvb3REaXNhYmxlZDogXCJzdi1yYW5raW5nLS1kaXNhYmxlZFwiLFxuICAgICAgICByb290RHJhZ0hhbmRsZUFyZWFJY29uOiBcInN2LXJhbmtpbmctLWRyYWctaGFuZGxlLWFyZWEtaWNvblwiLFxuICAgICAgICByb290U2VsZWN0VG9SYW5rTW9kOiBcInN2LXJhbmtpbmctLXNlbGVjdC10by1yYW5rXCIsXG4gICAgICAgIHJvb3RTZWxlY3RUb1JhbmtBbGlnblZlcnRpY2FsOiBcInN2LXJhbmtpbmctLXNlbGVjdC10by1yYW5rLXZlcnRpY2FsXCIsXG4gICAgICAgIHJvb3RTZWxlY3RUb1JhbmtBbGlnbkhvcml6b250YWw6IFwic3YtcmFua2luZy0tc2VsZWN0LXRvLXJhbmstaG9yaXpvbnRhbFwiLFxuICAgICAgICBpdGVtOiBcInN2LXJhbmtpbmctaXRlbVwiLFxuICAgICAgICBpdGVtQ29udGVudDogXCJzdi1yYW5raW5nLWl0ZW1fX2NvbnRlbnRcIixcbiAgICAgICAgaXRlbUluZGV4OiBcInN2LXJhbmtpbmctaXRlbV9faW5kZXhcIixcbiAgICAgICAgaXRlbUluZGV4RW1wdHlNb2RlOiBcInN2LXJhbmtpbmctaXRlbV9faW5kZXgtLWVtcHR5XCIsXG4gICAgICAgIC8vIGl0ZW1UZXh0OiBcInN2LXJhbmtpbmctaXRlbV9fdGV4dFwiLFxuICAgICAgICBjb250cm9sTGFiZWw6IFwic3YtcmFua2luZy1pdGVtX190ZXh0XCIsXG4gICAgICAgIGl0ZW1HaG9zdE5vZGU6IFwic3YtcmFua2luZy1pdGVtX19naG9zdFwiLFxuICAgICAgICBpdGVtSWNvbkNvbnRhaW5lcjogXCJzdi1yYW5raW5nLWl0ZW1fX2ljb24tY29udGFpbmVyXCIsXG4gICAgICAgIGl0ZW1JY29uOiBcInN2LXJhbmtpbmctaXRlbV9faWNvblwiLFxuICAgICAgICBpdGVtSWNvbkhvdmVyTW9kOiBcInN2LXJhbmtpbmctaXRlbV9faWNvbi0taG92ZXJcIixcbiAgICAgICAgaXRlbUljb25Gb2N1c01vZDogXCJzdi1yYW5raW5nLWl0ZW1fX2ljb24tLWZvY3VzXCIsXG4gICAgICAgIGl0ZW1HaG9zdE1vZDogXCJzdi1yYW5raW5nLWl0ZW0tLWdob3N0XCIsXG4gICAgICAgIGl0ZW1EcmFnTW9kOiBcInN2LXJhbmtpbmctaXRlbS0tZHJhZ1wiLFxuICAgICAgICBjb250YWluZXI6IFwic3YtcmFua2luZ19fY29udGFpbmVyXCIsXG4gICAgICAgIGNvbnRhaW5lckVtcHR5TW9kZTogXCJzdi1yYW5raW5nX19jb250YWluZXItLWVtcHR5XCIsXG4gICAgICAgIGNvbnRhaW5lckZyb21Nb2RlOiBcInN2LXJhbmtpbmdfX2NvbnRhaW5lci0tZnJvbVwiLFxuICAgICAgICBjb250YWluZXJUb01vZGU6IFwic3YtcmFua2luZ19fY29udGFpbmVyLS10b1wiLFxuICAgICAgICBjb250YWluZXJQbGFjZWhvbGRlcjogXCJzdi1yYW5raW5nX19jb250YWluZXItcGxhY2Vob2xkZXJcIixcbiAgICAgICAgY29udGFpbmVyc0RpdmlkZXI6IFwic3YtcmFua2luZ19fY29udGFpbmVycy1kaXZpZGVyXCIsXG4gICAgfSxcbiAgICBjb21tZW50OiBcImZvcm0tY29udHJvbFwiLFxuICAgIGRyb3Bkb3duOiB7XG4gICAgICAgIHJvb3Q6IFwic3ZfcV9kZF9yb290XCIsXG4gICAgICAgIHBvcHVwOiBcInN2LWRyb3Bkb3duLXBvcHVwXCIsXG4gICAgICAgIHNlbGVjdFdyYXBwZXI6IFwic3ZfcV9kZF9zZWxlY3Rfd3JhcHBlclwiLFxuICAgICAgICBjb250cm9sOiBcImZvcm0tY29udHJvbCBzdl9xX2RkX2NvbnRyb2xcIixcbiAgICAgICAgY29udHJvbFZhbHVlOiBcInN2X3FfZGRfdmFsdWVcIixcbiAgICAgICAgb3RoZXI6IFwic3ZfcV9kZF9vdGhlciBmb3JtLWNvbnRyb2xcIixcbiAgICAgICAgY2xlYW5CdXR0b246IFwic3ZfcV9kZF9jbGVhbi1idXR0b25cIixcbiAgICAgICAgY2xlYW5CdXR0b25Tdmc6IFwic3ZfcV9kZF9jbGVhbi1idXR0b24tc3ZnXCIsXG4gICAgICAgIGNsZWFuQnV0dG9uSWNvbklkOiBcImljb24tY2xlYXJfMTZ4MTZcIixcbiAgICAgICAgZmlsdGVyU3RyaW5nSW5wdXQ6IFwic3ZfcV9kZF9maWx0ZXItc3RyaW5nLWlucHV0XCIsXG4gICAgfSxcbiAgICB0YWdib3g6IHtcbiAgICAgICAgcm9vdDogXCJzdl9xX2RkX3Jvb3RcIixcbiAgICAgICAgcG9wdXA6IFwic3YtZHJvcGRvd24tcG9wdXBcIixcbiAgICAgICAgc2VsZWN0V3JhcHBlcjogXCJzdl9xX2RkX3NlbGVjdF93cmFwcGVyXCIsXG4gICAgICAgIGNvbnRyb2w6IFwiZm9ybS1jb250cm9sIHN2X3FfZGRfY29udHJvbFwiLFxuICAgICAgICBjb250cm9sVmFsdWU6IFwic3ZfcV9kZF92YWx1ZVwiLFxuICAgICAgICBvdGhlcjogXCJzdl9xX2RkX290aGVyIGZvcm0tY29udHJvbFwiLFxuICAgICAgICBjbGVhbkJ1dHRvbjogXCJzdl9xX2RkX2NsZWFuLWJ1dHRvblwiLFxuICAgICAgICBjbGVhbkJ1dHRvblN2ZzogXCJzdl9xX2RkX2NsZWFuLWJ1dHRvbi1zdmdcIixcbiAgICAgICAgY2xlYW5CdXR0b25JY29uSWQ6IFwiaWNvbi1jbGVhcl8xNngxNlwiLFxuICAgICAgICBmaWx0ZXJTdHJpbmdJbnB1dDogXCJzdl9xX2RkX2ZpbHRlci1zdHJpbmctaW5wdXRcIixcbiAgICB9LFxuICAgIGh0bWw6IHsgcm9vdDogXCJcIiB9LFxuICAgIGltYWdlOiB7IHJvb3Q6IFwic3ZfcV9pbWFnZVwiLCBpbWFnZTogXCJzdl9pbWFnZV9pbWFnZVwiIH0sXG4gICAgbWF0cml4OiB7XG4gICAgICAgIHJvb3Q6IFwidGFibGUgc3ZfcV9tYXRyaXhcIixcbiAgICAgICAgcm93OiBcImZvcm0tZ3JvdXAgYm1kLWZvcm0tZ3JvdXBcIixcbiAgICAgICAgbGFiZWw6IFwic3ZfcV9tX2xhYmVsIHJhZGlvLWlubGluZVwiLFxuICAgICAgICBjZWxsVGV4dDogXCJzdl9xX21fY2VsbF90ZXh0XCIsXG4gICAgICAgIGNlbGxUZXh0U2VsZWN0ZWQ6IFwic3ZfcV9tX2NlbGxfc2VsZWN0ZWQgYmctcHJpbWFyeVwiLFxuICAgICAgICBjZWxsTGFiZWw6IFwic3ZfcV9tX2NlbGxfbGFiZWxcIixcbiAgICAgICAgaXRlbVZhbHVlOiBcImZvcm0tY29udHJvbFwiLFxuICAgICAgICBpdGVtQ2hlY2tlZDogXCJjaGVja2VkXCIsXG4gICAgICAgIGl0ZW1EZWNvcmF0b3I6IFwic3YtaGlkZGVuXCIsXG4gICAgICAgIG1hdGVyaWFsRGVjb3JhdG9yOiBcImJtZC1yYWRpb1wiLFxuICAgICAgICBjZWxsUmVzcG9uc2l2ZVRpdGxlOiBcInN2LWhpZGRlblwiXG4gICAgfSxcbiAgICBtYXRyaXhkcm9wZG93bjoge1xuICAgICAgICByb290OiBcInRhYmxlXCIsXG4gICAgICAgIGl0ZW1WYWx1ZTogXCJmb3JtLWdyb3VwIGJtZC1mb3JtLWdyb3VwXCIsXG4gICAgICAgIGhlYWRlckNlbGw6IFwic3ZfbWF0cml4X2NlbGxfaGVhZGVyXCIsXG4gICAgICAgIHJvdzogXCJzdl9tYXRyaXhfcm93XCIsXG4gICAgICAgIHJvd0FkZGl0aW9uYWw6IFwic3YtbWF0cml4X19yb3ctLWFkZGl0aW9uYWxcIixcbiAgICAgICAgZGV0YWlsUm93OiBcInN2X21hdHJpeF9kZXRhaWxfcm93XCIsXG4gICAgICAgIGRldGFpbFJvd1RleHQ6IFwic3ZfbWF0cml4X2NlbGxfZGV0YWlsX3Jvd3RleHRcIixcbiAgICAgICAgZGV0YWlsQ2VsbDogXCJzdl9tYXRyaXhfY2VsbF9kZXRhaWxcIixcbiAgICAgICAgZGV0YWlsQnV0dG9uOiBcInN2X21hdHJpeF9jZWxsX2RldGFpbF9idXR0b25cIixcbiAgICAgICAgZGV0YWlsQnV0dG9uRXhwYW5kZWQ6IFwic3ZfbWF0cml4X2NlbGxfZGV0YWlsX2J1dHRvbl9leHBhbmRlZFwiLFxuICAgICAgICBkZXRhaWxJY29uOiBcInN2X2RldGFpbF9wYW5lbF9pY29uXCIsXG4gICAgICAgIGRldGFpbEljb25FeHBhbmRlZDogXCJzdl9kZXRhaWxfZXhwYW5kZWRcIixcbiAgICAgICAgZGV0YWlsUGFuZWxDZWxsOiBcInN2X21hdHJpeF9jZWxsX2RldGFpbF9wYW5lbFwiLFxuICAgICAgICBhY3Rpb25zQ2VsbDogXCJzdl9tYXRyaXhfY2VsbCBzdl9tYXRyaXhfY2VsbF9hY3Rpb25zXCIsXG4gICAgfSxcbiAgICBtYXRyaXhkeW5hbWljOiB7XG4gICAgICAgIG1haW5Sb290OiBcInN2X3FzdG5cIixcbiAgICAgICAgZmxvd1Jvb3Q6IFwic3ZfcV9mbG93XCIsXG4gICAgICAgIHJvb3Q6IFwidGFibGVcIixcbiAgICAgICAgYnV0dG9uOiBcImJ0biBidG4tcHJpbWFyeVwiLFxuICAgICAgICBpdGVtVmFsdWU6IFwiZm9ybS1ncm91cCBibWQtZm9ybS1ncm91cFwiLFxuICAgICAgICBidXR0b25BZGQ6IFwiXCIsXG4gICAgICAgIGJ1dHRvblJlbW92ZTogXCJcIixcbiAgICAgICAgaWNvbkFkZDogXCJcIixcbiAgICAgICAgaWNvblJlbW92ZTogXCJcIixcbiAgICAgICAgaWNvbkRyYWc6IFwic3YtbWF0cml4ZHluYW1pY19fZHJhZy1pY29uXCIsXG4gICAgICAgIGhlYWRlckNlbGw6IFwic3ZfbWF0cml4X2NlbGxfaGVhZGVyXCIsXG4gICAgICAgIHJvdzogXCJzdl9tYXRyaXhfcm93XCIsXG4gICAgICAgIGRldGFpbFJvdzogXCJzdl9tYXRyaXhfZGV0YWlsX3Jvd1wiLFxuICAgICAgICBkZXRhaWxDZWxsOiBcInN2X21hdHJpeF9jZWxsX2RldGFpbFwiLFxuICAgICAgICBkZXRhaWxCdXR0b246IFwic3ZfbWF0cml4X2NlbGxfZGV0YWlsX2J1dHRvblwiLFxuICAgICAgICBkZXRhaWxCdXR0b25FeHBhbmRlZDogXCJzdl9tYXRyaXhfY2VsbF9kZXRhaWxfYnV0dG9uX2V4cGFuZGVkXCIsXG4gICAgICAgIGRldGFpbEljb246IFwic3ZfZGV0YWlsX3BhbmVsX2ljb25cIixcbiAgICAgICAgZGV0YWlsSWNvbkV4cGFuZGVkOiBcInN2X2RldGFpbF9leHBhbmRlZFwiLFxuICAgICAgICBkZXRhaWxQYW5lbENlbGw6IFwic3ZfbWF0cml4X2NlbGxfZGV0YWlsX3BhbmVsXCIsXG4gICAgICAgIGFjdGlvbnNDZWxsOiBcInN2X21hdHJpeF9jZWxsIHN2X21hdHJpeF9jZWxsX2FjdGlvbnNcIixcbiAgICAgICAgZW1wdHlSb3dzU2VjdGlvbjogXCJzdl9tYXRyaXhfZW1wdHlfcm93c19zZWN0aW9uXCIsXG4gICAgICAgIGVtcHR5Um93c1RleHQ6IFwic3ZfbWF0cml4X2VtcHR5X3Jvd3NfdGV4dFwiLFxuICAgICAgICBlbXB0eVJvd3NCdXR0b246IFwiXCIsXG4gICAgICAgIGdob3N0Um93OiBcInN2LW1hdHJpeC1yb3ctLWRyYWctZHJvcC1naG9zdC1tb2RcIlxuICAgIH0sXG4gICAgcGFuZWxkeW5hbWljOiB7XG4gICAgICAgIHJvb3Q6IFwiXCIsXG4gICAgICAgIG5hdmlnYXRpb246IFwic3YtcGFuZWxkeW5hbWljX19uYXZpZ2F0aW9uXCIsXG4gICAgICAgIHByb2dyZXNzVG9wOiBcInN2LXBhbmVsZHluYW1pY19fcHJvZ3Jlc3Mgc3YtcGFuZWxkeW5hbWljX19wcm9ncmVzcy0tdG9wXCIsXG4gICAgICAgIHByb2dyZXNzQm90dG9tOiBcInN2LXBhbmVsZHluYW1pY19fcHJvZ3Jlc3Mgc3YtcGFuZWxkeW5hbWljX19wcm9ncmVzcy0tYm90dG9tXCIsXG4gICAgICAgIHRpdGxlOiBcInN2LXRpdGxlIHN2LXF1ZXN0aW9uX190aXRsZVwiLFxuICAgICAgICBidXR0b246IFwiYnV0dG9uXCIsXG4gICAgICAgIGJ1dHRvbkFkZDogXCJidXR0b24gc3YtcGFuZWxkeW5hbWljX19hZGQtYnRuIGJ0biBidG4tcHJpbWFyeVwiLFxuICAgICAgICBidXR0b25SZW1vdmU6IFwiYnV0dG9uIHN2LXBhbmVsZHluYW1pY19fcmVtb3ZlLWJ0biBidG4gYnRuLXByaW1hcnlcIixcbiAgICAgICAgYnV0dG9uUmVtb3ZlUmlnaHQ6IFwic3YtcGFuZWxkeW5hbWljX19yZW1vdmUtYnRuLS1yaWdodFwiLFxuICAgICAgICBidXR0b25QcmV2OiBcInN2LXBhbmVsZHluYW1pY19fcHJldi1idG5cIixcbiAgICAgICAgYnV0dG9uTmV4dDogXCJzdi1wYW5lbGR5bmFtaWNfX25leHQtYnRuXCIsXG4gICAgICAgIGJ1dHRvblByZXZEaXNhYmxlZDogXCJzdi1wYW5lbGR5bmFtaWNfX3ByZXYtYnRuLS1kaXNhYmxlZFwiLFxuICAgICAgICBidXR0b25OZXh0RGlzYWJsZWQ6IFwic3YtcGFuZWxkeW5hbWljX19uZXh0LWJ0bi0tZGlzYWJsZWRcIixcbiAgICAgICAgcHJvZ3Jlc3NDb250YWluZXI6IFwic3YtcGFuZWxkeW5hbWljX19wcm9ncmVzcy1jb250YWluZXJcIixcbiAgICAgICAgcHJvZ3Jlc3M6IFwic3YtcHJvZ3Jlc3NcIixcbiAgICAgICAgcHJvZ3Jlc3NCYXI6IFwic3YtcHJvZ3Jlc3NfX2JhclwiLFxuICAgICAgICBwcm9ncmVzc1RleHQ6IFwic3YtcGFuZWxkeW5hbWljX19wcm9ncmVzcy10ZXh0XCIsXG4gICAgICAgIHBhbmVsV3JhcHBlcjogXCJzdl9wX3dyYXBwZXJcIixcbiAgICAgICAgcGFuZWxXcmFwcGVySW5Sb3c6IFwic3ZfcF93cmFwcGVyX2luX3Jvd1wiLFxuICAgICAgICBwcm9ncmVzc0J0bkljb246IFwiaWNvbi1wcm9ncmVzc2J1dHRvblwiLFxuICAgICAgICBmb290ZXI6IFwiXCJcbiAgICB9LFxuICAgIG11bHRpcGxldGV4dDoge1xuICAgICAgICByb290OiBcInN2X3FfbXQgdGFibGVcIixcbiAgICAgICAgaXRlbVRpdGxlOiBcInN2X3FfbXRfdGl0bGVcIixcbiAgICAgICAgaXRlbTogXCJzdl9xX210X2l0ZW1cIixcbiAgICAgICAgaXRlbUxhYmVsOiBcInN2X3FfbXRfbGFiZWxcIixcbiAgICAgICAgcm93OiBcImZvcm0tZ3JvdXAgYm1kLWZvcm0tZ3JvdXBcIixcbiAgICAgICAgaXRlbVZhbHVlOiBcInN2X3FfbXRfaXRlbV92YWx1ZSBmb3JtLWNvbnRyb2xcIixcbiAgICB9LFxuICAgIHJhZGlvZ3JvdXA6IHtcbiAgICAgICAgcm9vdDogXCJcIixcbiAgICAgICAgaXRlbTogXCJyYWRpb1wiLFxuICAgICAgICBpdGVtQ2hlY2tlZDogXCJjaGVja2VkXCIsXG4gICAgICAgIGl0ZW1JbmxpbmU6IFwic3ZfcV9yYWRpb2dyb3VwX2lubGluZVwiLFxuICAgICAgICBpdGVtRGVjb3JhdG9yOiBcInN2LWhpZGRlblwiLFxuICAgICAgICBsYWJlbDogXCJcIixcbiAgICAgICAgbGFiZWxDaGVja2VkOiBcIlwiLFxuICAgICAgICBpdGVtQ29udHJvbDogXCJcIixcbiAgICAgICAgY29udHJvbExhYmVsOiBcInN2X3FfcmFkaW9ncm91cF9jb250cm9sX2xhYmVsXCIsXG4gICAgICAgIG1hdGVyaWFsRGVjb3JhdG9yOiBcImJtZC1yYWRpb1wiLFxuICAgICAgICBvdGhlcjogXCJzdl9xX3JhZGlvZ3JvdXBfb3RoZXIgZm9ybS1jb250cm9sXCIsXG4gICAgICAgIGNsZWFyQnV0dG9uOiBcInN2X3FfcmFkaW9ncm91cF9jbGVhciBidXR0b24gYnRuIGJ0bi1wcmltYXJ5XCIsXG4gICAgICAgIGNvbHVtbjogXCJzdl9xX3NlbGVjdF9jb2x1bW5cIixcbiAgICB9LFxuICAgIGJ1dHRvbmdyb3VwOiB7XG4gICAgICAgIHJvb3Q6IFwic3YtYnV0dG9uLWdyb3VwXCIsXG4gICAgICAgIGl0ZW06IFwic3YtYnV0dG9uLWdyb3VwX19pdGVtXCIsXG4gICAgICAgIGl0ZW1JY29uOiBcInN2LWJ1dHRvbi1ncm91cF9faXRlbS1pY29uXCIsXG4gICAgICAgIGl0ZW1EZWNvcmF0b3I6IFwic3YtYnV0dG9uLWdyb3VwX19pdGVtLWRlY29yYXRvclwiLFxuICAgICAgICBpdGVtQ2FwdGlvbjogXCJzdi1idXR0b24tZ3JvdXBfX2l0ZW0tY2FwdGlvblwiLFxuICAgICAgICBpdGVtU2VsZWN0ZWQ6IFwic3YtYnV0dG9uLWdyb3VwX19pdGVtLS1zZWxlY3RlZFwiLFxuICAgICAgICBpdGVtSG92ZXI6IFwic3YtYnV0dG9uLWdyb3VwX19pdGVtLS1ob3ZlclwiLFxuICAgICAgICBpdGVtRGlzYWJsZWQ6IFwic3YtYnV0dG9uLWdyb3VwX19pdGVtLS1kaXNhYmxlZFwiLFxuICAgICAgICBpdGVtQ29udHJvbDogXCJzdi12aXN1YWxseWhpZGRlblwiLFxuICAgIH0sXG4gICAgaW1hZ2VwaWNrZXI6IHtcbiAgICAgICAgcm9vdDogXCJzdl9pbWdzZWxcIixcbiAgICAgICAgaXRlbTogXCJzdl9xX2ltZ3NlbFwiLFxuICAgICAgICBpdGVtQ2hlY2tlZDogXCJjaGVja2VkXCIsXG4gICAgICAgIGl0ZW1JbmxpbmU6IFwic3ZfcV9pbWFnZXBpY2tlcl9pbmxpbmVcIixcbiAgICAgICAgbGFiZWw6IFwic3ZfcV9pbWdzZWxfbGFiZWxcIixcbiAgICAgICAgaXRlbUNvbnRyb2w6IFwic3ZfcV9pbWdzZWxfY29udHJvbF9pdGVtXCIsXG4gICAgICAgIGltYWdlOiBcInN2X3FfaW1nc2VsX2ltYWdlXCIsXG4gICAgICAgIGl0ZW1UZXh0OiBcInN2X3FfaW1nc2VsX3RleHRcIixcbiAgICAgICAgY2xlYXJCdXR0b246IFwic3ZfcV9yYWRpb2dyb3VwX2NsZWFyXCIsXG4gICAgfSxcbiAgICByYXRpbmc6IHtcbiAgICAgICAgcm9vdDogXCJidG4tZ3JvdXBcIixcbiAgICAgICAgaXRlbTogXCJidG4gYnRuLWRlZmF1bHQgYnRuLXNlY29uZGFyeVwiLFxuICAgICAgICBzZWxlY3RlZDogXCJhY3RpdmVcIixcbiAgICAgICAgbWluVGV4dDogXCJzdl9xX3JhdGluZ19taW5fdGV4dFwiLFxuICAgICAgICBpdGVtVGV4dDogXCJzdl9xX3JhdGluZ19pdGVtX3RleHRcIixcbiAgICAgICAgbWF4VGV4dDogXCJzdl9xX3JhdGluZ19tYXhfdGV4dFwiLFxuICAgICAgICBkaXNhYmxlZDogXCJcIixcbiAgICB9LFxuICAgIHRleHQ6IFwiZm9ybS1jb250cm9sXCIsXG4gICAgZXhwcmVzc2lvbjogXCJmb3JtLWNvbnRyb2xcIixcbiAgICBmaWxlOiB7XG4gICAgICAgIHJvb3Q6IFwiZm9ybS1ncm91cCBibWQtZm9ybS1ncm91cCBpcy1maWxlaW5wdXQgc3ZfcV9maWxlXCIsXG4gICAgICAgIHBsYWNlaG9sZGVySW5wdXQ6IFwiXCIsXG4gICAgICAgIHByZXZpZXc6IFwic3ZfcV9maWxlX3ByZXZpZXdcIixcbiAgICAgICAgcmVtb3ZlQnV0dG9uOiBcInN2X3FfZmlsZV9yZW1vdmVfYnV0dG9uXCIsXG4gICAgICAgIGZpbGVJbnB1dDogXCJzdl9xX2ZpbGVfaW5wdXRcIixcbiAgICAgICAgZmlsZVNpZ246IFwic3ZfcV9maWxlX3NpZ25cIixcbiAgICAgICAgcmVtb3ZlRmlsZTogXCJzdl9xX2ZpbGVfcmVtb3ZlXCIsXG4gICAgICAgIGZpbGVEZWNvcmF0b3I6IFwic3YtaGlkZGVuXCIsXG4gICAgICAgIHJlbW92ZUJ1dHRvbkJvdHRvbTogXCJzdi1oaWRkZW5cIixcbiAgICAgICAgZHJhZ0FyZWFQbGFjZWhvbGRlcjogXCJzdi1oaWRkZW5cIixcbiAgICAgICAgZmlsZUxpc3Q6IFwiXCIsXG4gICAgfSxcbiAgICBzaWduYXR1cmVwYWQ6IHtcbiAgICAgICAgcm9vdDogXCJzdl9xX3NpZ25hdHVyZXBhZCBzanNfc3BfY29udGFpbmVyXCIsXG4gICAgICAgIGNvbnRyb2xzOiBcInNqc19zcF9jb250cm9sc1wiLFxuICAgICAgICBwbGFjZWhvbGRlcjogXCJzanNfc3BfcGxhY2Vob2xkZXJcIixcbiAgICAgICAgY2FudmFzOiBcInNqc19zcF9jYW52YXNcIixcbiAgICAgICAgYmFja2dyb3VuZEltYWdlOiBcInNqc19zcF9fYmFja2dyb3VuZC1pbWFnZVwiLFxuICAgICAgICBjbGVhckJ1dHRvbjogXCJzanNfc3BfY2xlYXJcIixcbiAgICB9LFxuICAgIHNhdmVEYXRhOiB7XG4gICAgICAgIHJvb3Q6IFwiXCIsXG4gICAgICAgIGluZm86IFwiYWxlcnQgYWxlcnQtaW5mb1wiLFxuICAgICAgICBlcnJvcjogXCJhbGVydCBhbGVydC1kYW5nZXJcIixcbiAgICAgICAgc3VjY2VzczogXCJhbGVydCBhbGVydC1zdWNjZXNzXCIsXG4gICAgICAgIGJ1dHRvbjogXCJcIixcbiAgICB9LFxuICAgIHdpbmRvdzoge1xuICAgICAgICByb290OiBcIm1vZGFsLWNvbnRlbnRcIixcbiAgICAgICAgYm9keTogXCJtb2RhbC1ib2R5XCIsXG4gICAgICAgIGhlYWRlcjoge1xuICAgICAgICAgICAgcm9vdDogXCJtb2RhbC1oZWFkZXIgY2FyZC10aXRsZVwiLFxuICAgICAgICAgICAgdGl0bGU6IFwicHVsbC1sZWZ0XCIsXG4gICAgICAgICAgICBidXR0b246IFwiZ2x5cGhpY29uIHB1bGwtcmlnaHRcIixcbiAgICAgICAgICAgIGJ1dHRvbkV4cGFuZGVkOiBcImdseXBoaWNvbiBwdWxsLXJpZ2h0IGdseXBoaWNvbi1jaGV2cm9uLXVwXCIsXG4gICAgICAgICAgICBidXR0b25Db2xsYXBzZWQ6IFwiZ2x5cGhpY29uIHB1bGwtcmlnaHQgZ2x5cGhpY29uLWNoZXZyb24tZG93blwiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3BsdWdpbnMvdGhlbWVzL2Jvb3RzdHJhcG1hdGVyaWFsL3RoZW1lLXNldHRpbmdzLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3BsdWdpbnMvdGhlbWVzL2Jvb3RzdHJhcG1hdGVyaWFsL3RoZW1lLXNldHRpbmdzLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGJvb3RzdHJhcE1hdGVyaWFsVGhlbWVOYW1lLCBib290c3RyYXBNYXRlcmlhbFRoZW1lQ29sb3JzLCBib290c3RyYXBNYXRlcmlhbFRoZW1lQ3NzUnVsZXMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiYm9vdHN0cmFwTWF0ZXJpYWxUaGVtZU5hbWVcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBib290c3RyYXBNYXRlcmlhbFRoZW1lTmFtZTsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiYm9vdHN0cmFwTWF0ZXJpYWxUaGVtZUNvbG9yc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGJvb3RzdHJhcE1hdGVyaWFsVGhlbWVDb2xvcnM7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImJvb3RzdHJhcE1hdGVyaWFsVGhlbWVDc3NSdWxlc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGJvb3RzdHJhcE1hdGVyaWFsVGhlbWVDc3NSdWxlczsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHN1cnZleS1jb3JlICovIFwiLi9zcmMvZW50cmllcy9jb3JlLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9jb21tb25fdGhlbWVfc2V0dGluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2NvbW1vbi10aGVtZS1zZXR0aW5ncyAqLyBcIi4vc3JjL3BsdWdpbnMvdGhlbWVzL2NvbW1vbi10aGVtZS1zZXR0aW5ncy50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfY3NzYm9vdHN0cmFwbWF0ZXJpYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vY3NzYm9vdHN0cmFwbWF0ZXJpYWwgKi8gXCIuL3NyYy9wbHVnaW5zL3RoZW1lcy9ib290c3RyYXBtYXRlcmlhbC9jc3Nib290c3RyYXBtYXRlcmlhbC50c1wiKTtcblxuXG5cbnZhciBib290c3RyYXBNYXRlcmlhbFRoZW1lTmFtZSA9IFwiYm9vdHN0cmFwbWF0ZXJpYWxcIjtcbnN1cnZleV9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdXJ2ZXlDc3NcIl1bYm9vdHN0cmFwTWF0ZXJpYWxUaGVtZU5hbWVdID0gX2Nzc2Jvb3RzdHJhcG1hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJkZWZhdWx0Q3NzXCJdO1xudmFyIGJvb3RzdHJhcE1hdGVyaWFsVGhlbWVDb2xvcnMgPSB7XG4gICAgXCIkbWFpbi1jb2xvclwiOiBcIiMxOGE2ODlcIixcbiAgICBcIiR0ZXh0LWNvbG9yXCI6IFwiIzQwNDA0MDtcIixcbiAgICBcIiR0ZXh0LWlucHV0LWNvbG9yXCI6IFwiIzQwNDA0MDtcIixcbiAgICBcIiRwcm9ncmVzcy10ZXh0LWNvbG9yXCI6IFwiIzlkOWQ5ZFwiLFxuICAgIFwiJGRpc2FibGUtY29sb3JcIjogXCIjZGJkYmRiXCIsXG4gICAgXCIkaGVhZGVyLWJhY2tncm91bmQtY29sb3JcIjogXCIjZTdlN2U3XCIsXG4gICAgXCIkZGlzYWJsZWQtbGFiZWwtY29sb3JcIjogXCJyZ2JhKDY0LCA2NCwgNjQsIDAuNSlcIixcbiAgICBcIiRzbGlkZXItY29sb3JcIjogXCJ3aGl0ZVwiLFxuICAgIFwiJGRpc2FibGVkLXN3aXRjaC1jb2xvclwiOiBcIiM5ZjlmOWZcIixcbiAgICBcIiRkaXNhYmxlZC1zbGlkZXItY29sb3JcIjogXCIjY2ZjZmNmXCIsXG4gICAgXCIkYm9keS1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwiI2ZmZmZmZlwiLFxuICAgIFwiJGZvcmVncm91bmQtbGlnaHRcIjogXCIjOTA5MDkwXCIsXG4gICAgXCIkZm9yZWdyb3VuZC1kaXNhYmxlZFwiOiBcIiMxNjE2MTZcIixcbiAgICBcIiRiYWNrZ3JvdW5kLWRpbVwiOiBcIiNmM2YzZjNcIixcbiAgICBcIiRwcm9ncmVzcy1idXR0b25zLWNvbG9yXCI6IFwiIzhkZDZjN1wiLFxuICAgIFwiJHByb2dyZXNzLWJ1dHRvbnMtbGluZS1jb2xvclwiOiBcIiNkNGQ0ZDRcIixcbn07XG52YXIgYm9vdHN0cmFwTWF0ZXJpYWxUaGVtZUNzc1J1bGVzID0ge1xuICAgIFwiLnN2X21haW4uc3ZfYm9vdHN0cmFwbWF0ZXJpYWxfY3NzIC5mb3JtLWdyb3VwLmlzLWZvY3VzZWQgLmZvcm0tY29udHJvbFwiOiBcImxpbmVhci1ncmFkaWVudCgwZGVnLCAkbWFpbi1jb2xvciAycHgsICRtYWluLWNvbG9yIDApLGxpbmVhci1ncmFkaWVudCgwZGVnLCAjRDJEMkQyIDFweCwgdHJhbnNwYXJlbnQgMCk7XCIsXG4gICAgXCIuc3ZfbWFpbi5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgLnN2X3FzdG5cIjogXCJtYXJnaW4tYm90dG9tOiAxcmVtO1wiLFxuICAgIFwiLnN2X21haW4uc3ZfYm9vdHN0cmFwbWF0ZXJpYWxfY3NzIC5zdl9xc3RuIGxhYmVsLnN2X3FfbV9sYWJlbFwiOiBcImhlaWdodDogMTAwJTtcIixcbiAgICBcIi5zdl9tYWluLnN2X2Jvb3RzdHJhcG1hdGVyaWFsX2NzcyAuc3ZfcV9pbWFnZVwiOiBcImRpc3BsYXk6IGlubGluZS1ibG9jaztcIixcbiAgICBcIi5zdl9tYWluIC5zdl9yb3cgLnN2X3FzdG46Zmlyc3QtY2hpbGQ6bGFzdC1jaGlsZFwiOiBcImZsZXg6IG5vbmUgIWltcG9ydGFudDtcIixcbiAgICBcIi5zdl9tYWluIC5zdl9yb3cgLnN2X3BfY29udGFpbmVyOmZpcnN0LWNoaWxkOmxhc3QtY2hpbGRcIjogXCJmbGV4OiBub25lICFpbXBvcnRhbnQ7XCIsXG4gICAgXCIuc3ZfbWFpbi5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgLmNoZWNrYm94IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQgKyAuY2hlY2tib3gtbWF0ZXJpYWwgLmNoZWNrXCI6IFwiYm9yZGVyLWNvbG9yOiAkbWFpbi1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluLnN2X2Jvb3RzdHJhcG1hdGVyaWFsX2NzcyBsYWJlbC5jaGVja2JveC1pbmxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCArIC5jaGVja2JveC1tYXRlcmlhbCAuY2hlY2tcIjogXCJib3JkZXItY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4uc3ZfYm9vdHN0cmFwbWF0ZXJpYWxfY3NzIC5jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkICsgLmNoZWNrYm94LW1hdGVyaWFsIC5jaGVjazpiZWZvcmVcIjogXCJjb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbi5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgbGFiZWwuY2hlY2tib3gtaW5saW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQgKyAuY2hlY2tib3gtbWF0ZXJpYWwgLmNoZWNrOmJlZm9yZVwiOiBcImNvbG9yOiAkbWFpbi1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluLnN2X2Jvb3RzdHJhcG1hdGVyaWFsX2NzcyAucmFkaW8gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCB+IC5jaXJjbGVcIjogXCJib3JkZXItY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4uc3ZfYm9vdHN0cmFwbWF0ZXJpYWxfY3NzIGxhYmVsLnJhZGlvLWlubGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkIH4gLmNpcmNsZVwiOiBcImJvcmRlci1jb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbi5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgLnJhZGlvIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQgfiAuY2hlY2tcIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluLnN2X2Jvb3RzdHJhcG1hdGVyaWFsX2NzcyBsYWJlbC5yYWRpby1pbmxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCB+IC5jaGVja1wiOiBcImJhY2tncm91bmQtY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4uc3ZfYm9vdHN0cmFwbWF0ZXJpYWxfY3NzIC5idG4tZGVmYXVsdC5hY3RpdmVcIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1jb2xvcjsgY29sb3I6ICRib2R5LWJhY2tncm91bmQtY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbi5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgLmJ0bi1kZWZhdWx0OmFjdGl2ZVwiOiBcImJhY2tncm91bmQtY29sb3I6ICRtYWluLWNvbG9yOyBjb2xvcjogJGJvZHktYmFja2dyb3VuZC1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluLnN2X2Jvb3RzdHJhcG1hdGVyaWFsX2NzcyAuYnRuLXNlY29uZGFyeS5hY3RpdmVcIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1jb2xvcjsgY29sb3I6ICRib2R5LWJhY2tncm91bmQtY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbi5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgLmJ0bi1zZWNvbmRhcnk6YWN0aXZlXCI6IFwiYmFja2dyb3VuZC1jb2xvcjogJG1haW4tY29sb3I7IGNvbG9yOiAkYm9keS1iYWNrZ3JvdW5kLWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4uc3ZfYm9vdHN0cmFwbWF0ZXJpYWxfY3NzIC5vcGVuPi5kcm9wZG93bi10b2dnbGUuYnRuLWRlZmF1bHRcIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1jb2xvcjsgY29sb3I6ICRib2R5LWJhY2tncm91bmQtY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbi5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgaW5wdXRbdHlwZT0nYnV0dG9uJ10uYnRuLXByaW1hcnksIC5zdl9tYWluLnN2X2Jvb3RzdHJhcG1hdGVyaWFsX2NzcyBidXR0b24uYnRuLXByaW1hcnlcIjogXCJjb2xvcjogJGJvZHktYmFja2dyb3VuZC1jb2xvcjsgYmFja2dyb3VuZC1jb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbi5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgaW5wdXRbdHlwZT0nYnV0dG9uJ10uYnRuLXByaW1hcnk6aG92ZXIsIC5zdl9tYWluLnN2X2Jvb3RzdHJhcG1hdGVyaWFsX2NzcyBidXR0b24uYnRuLXByaW1hcnk6aG92ZXJcIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1ob3Zlci1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluIC5zdl9xX2ltZ3NlbC5jaGVja2VkIGxhYmVsPmRpdlwiOiBcImJhY2tncm91bmQtY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4uc3ZfYm9vdHN0cmFwbWF0ZXJpYWxfY3NzIC5zdl9xX2ZpbGVfcmVtb3ZlOmhvdmVyXCI6IFwiY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4uc3ZfYm9vdHN0cmFwbWF0ZXJpYWxfY3NzIC5mb3JtLWdyb3VwIGlucHV0W3R5cGU9ZmlsZV1cIjogXCJwb3NpdGlvbjogcmVsYXRpdmU7IG9wYWNpdHk6IDE7XCIsXG4gICAgXCIuc3ZfbWFpbi5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgLnByb2dyZXNzXCI6IFwid2lkdGg6IDYwJTsgaGVpZ2h0OiAxLjVlbTtcIixcbiAgICBcIi5zdl9tYWluLnN2X2Jvb3RzdHJhcG1hdGVyaWFsX2NzcyAucHJvZ3Jlc3MtYmFyXCI6IFwid2lkdGg6IGF1dG87IG1hcmdpbi1sZWZ0OiAycHg7IG1hcmdpbi1yaWdodDogMnB4O1wiLFxuICAgIC8vcHJvZ3Jlc3MgYmFyXG4gICAgXCIuc3ZfbWFpbiAuc3YtcHJvZ3Jlc3NcIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkaGVhZGVyLWJhY2tncm91bmQtY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtcHJvZ3Jlc3NfX2JhclwiOiBcImJhY2tncm91bmQtY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuICAgIC8vcHJvZ3Jlc3MgYnV0dG9uc1xuICAgIFwiLnN2X21haW4uc3ZfYm9vdHN0cmFwbWF0ZXJpYWxfY3NzIC5zdl9wcm9ncmVzcy1idXR0b25zX19saXN0IGxpOmJlZm9yZVwiOiBcImJvcmRlci1jb2xvcjogJHByb2dyZXNzLWJ1dHRvbnMtY29sb3I7IGJhY2tncm91bmQtY29sb3I6ICRwcm9ncmVzcy1idXR0b25zLWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4uc3ZfYm9vdHN0cmFwbWF0ZXJpYWxfY3NzIC5zdl9wcm9ncmVzcy1idXR0b25zX19saXN0IGxpOmFmdGVyXCI6IFwiYmFja2dyb3VuZC1jb2xvcjogJHByb2dyZXNzLWJ1dHRvbnMtbGluZS1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluLnN2X2Jvb3RzdHJhcG1hdGVyaWFsX2NzcyAuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdCAuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fcGFnZS10aXRsZVwiOiBcImNvbG9yOiAkdGV4dC1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluLnN2X2Jvb3RzdHJhcG1hdGVyaWFsX2NzcyAuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdCAuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fcGFnZS1kZXNjcmlwdGlvblwiOiBcImNvbG9yOiAkdGV4dC1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluLnN2X2Jvb3RzdHJhcG1hdGVyaWFsX2NzcyAuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdCBsaS5zdl9wcm9ncmVzcy1idXR0b25zX19saXN0LWVsZW1lbnQtLXBhc3NlZDpiZWZvcmVcIjogXCJib3JkZXItY29sb3I6ICRtYWluLWNvbG9yOyBiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluLnN2X2Jvb3RzdHJhcG1hdGVyaWFsX2NzcyAuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdCBsaS5zdl9wcm9ncmVzcy1idXR0b25zX19saXN0LWVsZW1lbnQtLXBhc3NlZCArIGxpOmFmdGVyXCI6IFwiYmFja2dyb3VuZC1jb2xvcjogJHByb2dyZXNzLWJ1dHRvbnMtY29sb3JcIixcbiAgICBcIi5zdl9tYWluLnN2X2Jvb3RzdHJhcG1hdGVyaWFsX2NzcyAuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdCBsaS5zdl9wcm9ncmVzcy1idXR0b25zX19saXN0LWVsZW1lbnQtLWN1cnJlbnQ6YmVmb3JlXCI6IFwiYm9yZGVyLWNvbG9yOiAkbWFpbi1jb2xvcjsgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XCIsXG4gICAgXCIuc3ZfbWFpbi5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgLnN2X3Byb2dyZXNzLWJ1dHRvbnNfX2xpc3QgbGkuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdC1lbGVtZW50LS1wYXNzZWQuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdC1lbGVtZW50LS1jdXJyZW50OmJlZm9yZVwiOiBcImJvcmRlci1jb2xvcjogJG1haW4tY29sb3I7IGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1wiLFxuICAgIC8vcGFuZWxkeW5hbWljXG4gICAgXCIuc3ZfbWFpbiAuc3YtcGFuZWxkeW5hbWljX19wcmV2LWJ0bi5zdi1wYW5lbGR5bmFtaWNfX3ByZXYtYnRuLS1kaXNhYmxlZCwgLnN2X21haW4gLnN2LXBhbmVsZHluYW1pY19fbmV4dC1idG4uc3YtcGFuZWxkeW5hbWljX19uZXh0LWJ0bi0tZGlzYWJsZWRcIjogXCJmaWxsOiAkZGlzYWJsZS1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1wYW5lbGR5bmFtaWNfX3Byb2dyZXNzLXRleHRcIjogXCJjb2xvcjogJHByb2dyZXNzLXRleHQtY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtcGFuZWxkeW5hbWljX19wcmV2LWJ0biwgLnN2X21haW4gLnN2LXBhbmVsZHluYW1pY19fbmV4dC1idG5cIjogXCJmaWxsOiAkdGV4dC1jb2xvclwiLFxuICAgIC8vYm9vbGVhblxuICAgIFwiLnN2X21haW4gLnN2LWJvb2xlYW4gLmNoZWNrYm94LWRlY29yYXRvclwiOiBcImRpc3BsYXk6IG5vbmU7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtYm9vbGVhbl9fc3dpdGNoXCI6IFwiYmFja2dyb3VuZC1jb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtYm9vbGVhbl9fc2xpZGVyXCI6IFwiYmFja2dyb3VuZC1jb2xvcjogJHNsaWRlci1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1ib29sZWFuX19sYWJlbC5zdi1ib29sZWFuX19sYWJlbC0tZGlzYWJsZWRcIjogXCJjb2xvcjogJGRpc2FibGVkLWxhYmVsLWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LWJvb2xlYW5fX2xhYmVsXCI6IFwiY29sb3I6ICR0ZXh0LWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LWJvb2xlYW4tLWRpc2FibGVkIC5zdi1ib29sZWFuX19zd2l0Y2hcIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkZGlzYWJsZWQtc3dpdGNoLWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LWJvb2xlYW4tLWRpc2FibGVkICAuc3YtYm9vbGVhbl9fc2xpZGVyXCI6IFwiYmFja2dyb3VuZC1jb2xvcjogJGRpc2FibGVkLXNsaWRlci1jb2xvcjtcIixcbiAgICAvL2VvIGJvb2xlYW5cbiAgICBcIi5zdl9tYWluIC5zdl9tYXRyaXhfZGV0YWlsX3Jvd1wiOiBcImJhY2tncm91bmQtY29sb3I6ICNlZGVkZWQ7IGJvcmRlci10b3A6IDFweCBzb2xpZCAkaGVhZGVyLWJhY2tncm91bmQtY29sb3I7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAkaGVhZGVyLWJhY2tncm91bmQtY29sb3I7XCIsXG4gICAgLy9zaWduYXR1cmUgcGFkXG4gICAgXCIuc3ZfbWFpbiAuc2pzX3NwX2NvbnRhaW5lclwiOiBcImJvcmRlcjogMXB4IGRhc2hlZCAkZGlzYWJsZS1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluIC5zanNfc3BfcGxhY2Vob2xkZXJcIjogXCJjb2xvcjogJGZvcmVncm91bmQtbGlnaHQ7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtYWN0aW9uLWJhci1pdGVtXCI6IFwiY29sb3I6ICR0ZXh0LWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LWFjdGlvbi1iYXItaXRlbV9faWNvbiB1c2VcIjogXCJmaWxsOiAkZm9yZWdyb3VuZC1saWdodDtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1hY3Rpb24tYmFyLWl0ZW06aG92ZXJcIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkYmFja2dyb3VuZC1kaW07XCIsXG4gICAgXCIuc3Ytc2tlbGV0b24tZWxlbWVudFwiOiBcImJhY2tncm91bmQtY29sb3I6ICRiYWNrZ3JvdW5kLWRpbTtcIixcbn07XG5PYmplY3QoX2NvbW1vbl90aGVtZV9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wic2V0U3R5bGVzXCJdKSgpO1xuT2JqZWN0KF9jb21tb25fdGhlbWVfc2V0dGluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcInNldE1lZGlhU3R5bGVzXCJdKSgpO1xuc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlN0eWxlc01hbmFnZXJcIl0uVGhlbWVDb2xvcnNbYm9vdHN0cmFwTWF0ZXJpYWxUaGVtZU5hbWVdID0gYm9vdHN0cmFwTWF0ZXJpYWxUaGVtZUNvbG9ycztcbnN1cnZleV9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJTdHlsZXNNYW5hZ2VyXCJdLlRoZW1lQ3NzW2Jvb3RzdHJhcE1hdGVyaWFsVGhlbWVOYW1lXSA9IGJvb3RzdHJhcE1hdGVyaWFsVGhlbWVDc3NSdWxlcztcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9wbHVnaW5zL3RoZW1lcy9jb21tb24tdGhlbWUtc2V0dGluZ3MudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3BsdWdpbnMvdGhlbWVzL2NvbW1vbi10aGVtZS1zZXR0aW5ncy50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogc2V0TWVkaWFTdHlsZXMsIHNldFN0eWxlcyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzZXRNZWRpYVN0eWxlc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHNldE1lZGlhU3R5bGVzOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzZXRTdHlsZXNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzZXRTdHlsZXM7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHN1cnZleV9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBzdXJ2ZXktY29yZSAqLyBcIi4vc3JjL2VudHJpZXMvY29yZS50c1wiKTtcblxuZnVuY3Rpb24gc2V0TWVkaWFTdHlsZXMoKSB7XG4gICAgc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlN0eWxlc01hbmFnZXJcIl0uTWVkaWEgPSB7XG4gICAgICAgIFwiLnN2X3FzdG4gZmllbGRzZXQgLnN2LXEtY29sLTFcIjoge1xuICAgICAgICAgICAgc3R5bGU6IFwid2lkdGg6IDEwMCU7XCIsXG4gICAgICAgICAgICBtZWRpYTogXCJAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDQ4MHB4KVwiLFxuICAgICAgICB9LFxuICAgICAgICBcIi5zdl9xc3RuIGZpZWxkc2V0IC5zdi1xLWNvbC0yXCI6IHtcbiAgICAgICAgICAgIHN0eWxlOiBcIndpZHRoOiAxMDAlO1wiLFxuICAgICAgICAgICAgbWVkaWE6IFwiQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA0ODBweClcIixcbiAgICAgICAgfSxcbiAgICAgICAgXCIuc3ZfcXN0biBmaWVsZHNldCAuc3YtcS1jb2wtM1wiOiB7XG4gICAgICAgICAgICBzdHlsZTogXCJ3aWR0aDogMTAwJTtcIixcbiAgICAgICAgICAgIG1lZGlhOiBcIkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogNDgwcHgpXCIsXG4gICAgICAgIH0sXG4gICAgICAgIFwiLnN2X3FzdG4gZmllbGRzZXQgLnN2LXEtY29sLTRcIjoge1xuICAgICAgICAgICAgc3R5bGU6IFwid2lkdGg6IDEwMCU7XCIsXG4gICAgICAgICAgICBtZWRpYTogXCJAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDQ4MHB4KVwiLFxuICAgICAgICB9LFxuICAgICAgICBcIi5zdl9xc3RuIGZpZWxkc2V0IC5zdi1xLWNvbC01XCI6IHtcbiAgICAgICAgICAgIHN0eWxlOiBcIndpZHRoOiAxMDAlO1wiLFxuICAgICAgICAgICAgbWVkaWE6IFwiQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA0ODBweClcIixcbiAgICAgICAgfSxcbiAgICAgICAgXCIuc3ZfbWFpbiAuc3ZfY29udGFpbmVyIC5wYW5lbC1ib2R5LmNhcmQtYmxvY2sgLnN2X3JvdyAuc3ZfcXN0blwiOiB7XG4gICAgICAgICAgICBzdHlsZTogXCJkaXNwbGF5OiBibG9jazsgd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcIixcbiAgICAgICAgICAgIG1lZGlhOiBcIkBtZWRpYSAobWF4LXdpZHRoOiA2MDBweClcIixcbiAgICAgICAgfSxcbiAgICAgICAgXCIuc3ZfbWFpbiAuc3ZfY29udGFpbmVyIC5wYW5lbC1ib2R5LmNhcmQtYmxvY2sgLnN2X3JvdyAuc3ZfcXN0biAudGl0bGUtbGVmdFwiOiB7XG4gICAgICAgICAgICBzdHlsZTogXCJmbG9hdDogbm9uZTtcIixcbiAgICAgICAgICAgIG1lZGlhOiBcIkBtZWRpYSAobWF4LXdpZHRoOiA2MDBweClcIixcbiAgICAgICAgfSxcbiAgICAgICAgXCIuc3ZfbWFpbiAuc3ZfY29udGFpbmVyIC5wYW5lbC1ib2R5LmNhcmQtYmxvY2sgLnN2X3JvdyAuc3ZfcXN0biAuc3ZfcV9yYWRpb2dyb3VwX2lubGluZSwgLnN2X21haW4gLnN2X2NvbnRhaW5lciAucGFuZWwtYm9keS5jYXJkLWJsb2NrIC5zdl9yb3cgLnN2X3FzdG4gLnN2X3FfY2hlY2tib3hfaW5saW5lLCAuc3ZfbWFpbiAuc3ZfY29udGFpbmVyIC5wYW5lbC1ib2R5LmNhcmQtYmxvY2sgLnN2X3JvdyAuc3ZfcXN0biAuc3ZfcV9pbWFnZXBpY2tlcl9pbmxpbmVcIjoge1xuICAgICAgICAgICAgc3R5bGU6IFwiZGlzcGxheTogYmxvY2s7XCIsXG4gICAgICAgICAgICBtZWRpYTogXCJAbWVkaWEgKG1heC13aWR0aDogNjAwcHgpXCIsXG4gICAgICAgIH0sXG4gICAgICAgIFwiLnN2X21haW4gLnN2X2NvbnRhaW5lciAucGFuZWwtYm9keS5jYXJkLWJsb2NrIC5zdl9yb3cgLnN2X3FzdG4gdGFibGUudGFibGVcIjoge1xuICAgICAgICAgICAgc3R5bGU6IFwiZGlzcGxheTogYmxvY2s7XCIsXG4gICAgICAgICAgICBtZWRpYTogXCJAbWVkaWEgKG1heC13aWR0aDogNjAwcHgpXCIsXG4gICAgICAgIH0sXG4gICAgICAgIFwiLnN2X21haW4gLnN2X2NvbnRhaW5lciAucGFuZWwtYm9keS5jYXJkLWJsb2NrIC5zdl9yb3cgLnN2X3FzdG4gdGFibGUudGFibGUgdGhlYWRcIjoge1xuICAgICAgICAgICAgc3R5bGU6IFwiZGlzcGxheTogbm9uZTtcIixcbiAgICAgICAgICAgIG1lZGlhOiBcIkBtZWRpYSAobWF4LXdpZHRoOiA2MDBweClcIixcbiAgICAgICAgfSxcbiAgICAgICAgXCIuc3ZfbWFpbiAuc3ZfY29udGFpbmVyIC5wYW5lbC1ib2R5LmNhcmQtYmxvY2sgLnN2X3JvdyAuc3ZfcXN0biB0YWJsZS50YWJsZSB0Ym9keSwgLnN2X21haW4gLnN2X2NvbnRhaW5lciAucGFuZWwtYm9keS5jYXJkLWJsb2NrIC5zdl9yb3cgLnN2X3FzdG4gdGFibGUudGFibGUgdHIsIC5zdl9tYWluIC5zdl9jb250YWluZXIgLnBhbmVsLWJvZHkuY2FyZC1ibG9jayAuc3Zfcm93IC5zdl9xc3RuIHRhYmxlLnRhYmxlIHRkXCI6IHtcbiAgICAgICAgICAgIHN0eWxlOiBcImRpc3BsYXk6IGJsb2NrO1wiLFxuICAgICAgICAgICAgbWVkaWE6IFwiQG1lZGlhIChtYXgtd2lkdGg6IDYwMHB4KVwiLFxuICAgICAgICB9LFxuICAgICAgICBcIi5zdl9tYWluIC5zdl9jb250YWluZXIgLnBhbmVsLWJvZHkuY2FyZC1ibG9jayAuc3Zfcm93IC5zdl9xc3RuIHRhYmxlLnRhYmxlOm5vdCguc3ZfcV9tYXRyaXgpIHRkOmJlZm9yZVwiOiB7XG4gICAgICAgICAgICBzdHlsZTogXCJjb250ZW50OiBhdHRyKGRhdGEtcmVzcG9uc2l2ZS10aXRsZSk7XCIsXG4gICAgICAgICAgICBtZWRpYTogXCJAbWVkaWEgKG1heC13aWR0aDogNjAwcHgpXCIsXG4gICAgICAgIH0sXG4gICAgICAgIFwiLnN2X21haW4gLnN2X2NvbnRhaW5lciAucGFuZWwtYm9keS5jYXJkLWJsb2NrIC5zdl9yb3cgLnN2X3FzdG4gdGFibGUuc3ZfcV9tYXRyaXggdGQ6YWZ0ZXJcIjoge1xuICAgICAgICAgICAgc3R5bGU6IFwiY29udGVudDogYXR0cihkYXRhLXJlc3BvbnNpdmUtdGl0bGUpOyBwYWRkaW5nLWxlZnQ6IDFlbVwiLFxuICAgICAgICAgICAgbWVkaWE6IFwiQG1lZGlhIChtYXgtd2lkdGg6IDYwMHB4KVwiLFxuICAgICAgICB9LFxuICAgICAgICBcIi5zdl9tYWluIC5zdl9jb250YWluZXIgLnBhbmVsLWJvZHkuY2FyZC1ibG9jayAuc3Zfcm93IC5zdl9xc3RuIC5yYWRpbyBsYWJlbCwgLnN2X21haW4gLnN2X2NvbnRhaW5lciAucGFuZWwtYm9keS5jYXJkLWJsb2NrIC5zdl9yb3cgLnN2X3FzdG4gLmNoZWNrYm94IGxhYmVsXCI6IHtcbiAgICAgICAgICAgIHN0eWxlOiBcImxpbmUtaGVpZ2h0OiAxMnB4OyB2ZXJ0aWNhbC1hbGlnbjogdG9wO1wiLFxuICAgICAgICAgICAgbWVkaWE6IFwiQG1lZGlhIChtYXgtd2lkdGg6IDYwMHB4KVwiLFxuICAgICAgICB9LFxuICAgICAgICBcIi5zdl9xc3RuIGxhYmVsLnN2X3FfbV9sYWJlbFwiOiB7XG4gICAgICAgICAgICBzdHlsZTogXCJkaXNwbGF5OiBpbmxpbmU7XCIsXG4gICAgICAgICAgICBtZWRpYTogXCJAbWVkaWEgKG1heC13aWR0aDogNjAwcHgpXCIsXG4gICAgICAgIH0sXG4gICAgICAgIFwiLnN2X21haW4gLnN2X2N1c3RvbV9oZWFkZXJcIjoge1xuICAgICAgICAgICAgc3R5bGU6IFwiZGlzcGxheTogbm9uZTtcIixcbiAgICAgICAgICAgIG1lZGlhOiBcIkBtZWRpYSAobWF4LXdpZHRoOiAxMzAwcHgpXCIsXG4gICAgICAgIH0sXG4gICAgICAgIFwiLnN2X21haW4gLnN2X2NvbnRhaW5lciAuc3ZfaGVhZGVyIGgzXCI6IHtcbiAgICAgICAgICAgIHN0eWxlOiBcImZvbnQtc2l6ZTogMS41ZW07XCIsXG4gICAgICAgICAgICBtZWRpYTogXCJAbWVkaWEgKG1heC13aWR0aDogMTMwMHB4KVwiLFxuICAgICAgICB9LFxuICAgICAgICBcIi5zdl9tYWluIC5zdl9jb250YWluZXIgLnN2X2hlYWRlciBoMyBzcGFuXCI6IHtcbiAgICAgICAgICAgIHN0eWxlOiBcImZvbnQtc2l6ZTogMC43NWVtO1wiLFxuICAgICAgICAgICAgbWVkaWE6IFwiQG1lZGlhIChtYXgtd2lkdGg6IDcwMHB4KVwiLFxuICAgICAgICB9LFxuICAgICAgICBcIi5zdl9tYWluLnN2X2Jvb3RzdHJhcF9jc3MgLnN2LXByb2dyZXNzX190ZXh0XCI6IHtcbiAgICAgICAgICAgIHN0eWxlOiBcIm1hcmdpbi1sZWZ0OiA4ZW07XCIsXG4gICAgICAgICAgICBtZWRpYTogXCJAbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpXCIsXG4gICAgICAgIH0sXG4gICAgICAgIFwiLnN2X3Jvd1wiOiB7XG4gICAgICAgICAgICBzdHlsZTogXCIgZGlzcGxheTogZmxleDsgZmxleC13cmFwOiB3cmFwO1wiLFxuICAgICAgICAgICAgbWVkaWE6IFwiQHN1cHBvcnRzIChkaXNwbGF5OiBmbGV4KVwiLFxuICAgICAgICB9LFxuICAgICAgICBcIi5zdi1yb3cgPiAuc3Ytcm93X19wYW5lbCwgLnN2LXJvd19fcXVlc3Rpb246bm90KDpsYXN0LWNoaWxkKVwiOiB7XG4gICAgICAgICAgICBzdHlsZTogXCJmbG9hdDogbGVmdDtcIixcbiAgICAgICAgICAgIG1lZGlhOiBcIkBtZWRpYSBzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKSwgKC1tcy1oaWdoLWNvbnRyYXN0OiBub25lKVwiLFxuICAgICAgICB9LFxuICAgICAgICBcIltkaXI9J3J0bCddLFtzdHlsZSo9J2RpcmVjdGlvbjpydGwnXSAuc3Ytcm93X19xdWVzdGlvbjpub3QoOmxhc3QtY2hpbGQpXCI6IHtcbiAgICAgICAgICAgIHN0eWxlOiBcImZsb2F0OiByaWdodDtcIixcbiAgICAgICAgICAgIG1lZGlhOiBcIkBtZWRpYSBzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKSwgKC1tcy1oaWdoLWNvbnRyYXN0OiBub25lKVwiLFxuICAgICAgICB9LFxuICAgICAgICBcIi5zdi1yb3cgPiAuc3Ytcm93X19wYW5lbCwgLnN2LXJvd19fcXVlc3Rpb25cIjoge1xuICAgICAgICAgICAgc3R5bGU6IFwid2lkdGg6IDEwMCUgIWltcG9ydGFudDsgcGFkZGluZy1yaWdodDogMCAhaW1wb3J0YW50O1wiLFxuICAgICAgICAgICAgbWVkaWE6IFwiQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA2MDBweClcIixcbiAgICAgICAgfSxcbiAgICB9O1xufVxuZnVuY3Rpb24gc2V0U3R5bGVzKCkge1xuICAgIHN1cnZleV9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJTdHlsZXNNYW5hZ2VyXCJdLlN0eWxlcyA9IHtcbiAgICAgICAgLy8gXCIuc3ZfYm9vdHN0cmFwX2Nzc1wiOiBcInBvc2l0aW9uOiByZWxhdGl2ZTsgd2lkdGg6IDEwMCU7IGJhY2tncm91bmQtY29sb3I6ICNmNGY0ZjRcIixcbiAgICAgICAgLy8gXCIuc3ZfYm9vdHN0cmFwX2NzcyAuc3ZfY3VzdG9tX2hlYWRlclwiOiBcInBvc2l0aW9uOiBhYnNvbHV0ZTsgd2lkdGg6IDEwMCU7IGhlaWdodDogMjc1cHg7IGJhY2tncm91bmQtY29sb3I6ICNlN2U3ZTc7XCIsXG4gICAgICAgIC8vIFwiLnN2X2Jvb3RzdHJhcF9jc3MgLnN2X2NvbnRhaW5lclwiOiBcIm1heC13aWR0aDogODAlOyBtYXJnaW46IGF1dG87IHBvc2l0aW9uOiByZWxhdGl2ZTsgY29sb3I6ICM2ZDcwNzI7IHBhZGRpbmc6IDAgMWVtO1wiLFxuICAgICAgICAvLyBcIi5zdl9ib290c3RyYXBfY3NzIC5wYW5lbC1ib2R5XCI6IFwiYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7IHBhZGRpbmc6IDFlbSAxZW0gNWVtIDFlbTsgYm9yZGVyLXRvcDogMnB4IHNvbGlkIGxpZ2h0Z3JheTtcIixcbiAgICAgICAgXCIuc3ZfbWFpbiBzcGFuXCI6IFwid29yZC1icmVhazogYnJlYWstd29yZDtcIixcbiAgICAgICAgXCIuc3ZfbWFpbiBsZWdlbmRcIjogXCJib3JkZXI6IG5vbmU7IG1hcmdpbjogMDtcIixcbiAgICAgICAgXCIuc3ZfYm9vdHN0cmFwX2NzcyAuc3ZfcXN0blwiOiBcInBhZGRpbmc6IDAuNWVtIHZhcigtLXN2LWVsZW1lbnQtYWRkLXBhZGRpbmctcmlnaHQsIDFlbSkgMS41ZW0gdmFyKC0tc3YtZWxlbWVudC1hZGQtcGFkZGluZy1sZWZ0LCAxZW0pO1wiLFxuICAgICAgICBcIi5zdl9ib290c3RyYXBfY3NzIC5zdl9xY2JjIGlucHV0W3R5cGU9Y2hlY2tib3hdLCAuc3ZfYm9vdHN0cmFwX2NzcyAuc3ZfcWNiYyBpbnB1dFt0eXBlPXJhZGlvXVwiOiBcInZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IG1hcmdpbi10b3A6IC0xcHhcIixcbiAgICAgICAgXCIuc3ZfYm9vdHN0cmFwX2NzcyAuc3ZfcXN0biBmaWVsZHNldFwiOiBcImRpc3BsYXk6IGJsb2NrO1wiLFxuICAgICAgICBcIi5zdl9ib290c3RyYXBfY3NzIC5zdl9xc3RuICAuc3ZfcV9jaGVja2JveF9pbmxpbmUsIC5zdl9ib290c3RyYXBfY3NzIC5zdl9xc3RuIC5zdl9xX3JhZGlvZ3JvdXBfaW5saW5lXCI6IFwiZGlzcGxheTogaW5saW5lLWJsb2NrO1wiLFxuICAgICAgICBcIi5zdl9ib290c3RyYXBfY3NzIC5zdi1wYW5lbGR5bmFtaWNfX3Byb2dyZXNzLWNvbnRhaW5lciBcIjogXCJwb3NpdGlvbjogcmVsYXRpdmU7IG1hcmdpbi1yaWdodDogMjUwcHg7IG1hcmdpbi1sZWZ0OiA0MHB4OyBtYXJnaW4tdG9wOiAxMHB4O1wiLFxuICAgICAgICBcIi5zdl9tYWluLnN2X2Jvb3RzdHJhcG1hdGVyaWFsX2NzcyAuc3ZfcV9yYWRpb2dyb3VwX2NvbnRyb2xfbGFiZWxcIjogXCJkaXNwbGF5OiBpbmxpbmU7IHBvc2l0aW9uOiBzdGF0aWM7XCIsXG4gICAgICAgIFwiLnN2X21haW4uc3ZfYm9vdHN0cmFwbWF0ZXJpYWxfY3NzIC5jaGVja2JveFwiOiBcIm1hcmdpbi10b3A6MTBweDttYXJnaW4tYm90dG9tOjEwcHg7XCIsXG4gICAgICAgIFwiLnN2X3Jvd1wiOiBcImNsZWFyOiBib3RoOyBtaW4td2lkdGg6MzAwcHg7XCIsXG4gICAgICAgIFwiLnN2X3JvdyAuc3ZfcXN0blwiOiBcImZsb2F0OiBsZWZ0XCIsXG4gICAgICAgIFwiLnN2X3JvdyAuc3ZfcXN0bjpsYXN0LWNoaWxkXCI6IFwiZmxvYXQ6IG5vbmVcIixcbiAgICAgICAgXCIuc3ZfcXN0blwiOiBcImRpc3BsYXk6IHZlcnRpY2FsLWFsaWduOiB0b3A7IG92ZXJmbG93OiBhdXRvOyBtaW4td2lkdGg6MzAwcHg7XCIsXG4gICAgICAgIFwiLnN2X3BfY29udGFpbmVyXCI6IFwiZGlzcGxheTogdmVydGljYWwtYWxpZ246IHRvcDsgbWluLXdpZHRoOjMwMHB4O1wiLFxuICAgICAgICBcIi5zdl9xX3RpdGxlIC5zdl9xdWVzdGlvbl9pY29uXCI6IFwiZmxvYXQ6IHJpZ2h0OyBtYXJnaW4tcmlnaHQ6IDFlbTtcIixcbiAgICAgICAgXCIuc3ZfcV90aXRsZSAuc3ZfcXVlc3Rpb25faWNvbjo6YmVmb3JlXCI6IFwiY29udGVudDogJyc7IGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7IGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjsgcGFkZGluZzogMC41ZW07IGRpc3BsYXk6IGlubGluZS1ibG9jazsgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEQ5NGJXd2dkbVZ5YzJsdmJqMGlNUzR3SWlCbGJtTnZaR2x1WnowaWRYUm1MVGdpUHo0TkNqd2hMUzBnUjJWdVpYSmhkRzl5T2lCQlpHOWlaU0JKYkd4MWMzUnlZWFJ2Y2lBeU1pNHdMakVzSUZOV1J5QkZlSEJ2Y25RZ1VHeDFaeTFKYmlBdUlGTldSeUJXWlhKemFXOXVPaUEyTGpBd0lFSjFhV3hrSURBcElDQXRMVDROQ2p4emRtY2dkbVZ5YzJsdmJqMGlNUzR4SWlCcFpEMGlUR0Y1WlhKZk1TSWdlRzFzYm5NOUltaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6SXdNREF2YzNabklpQjRiV3h1Y3pwNGJHbHVhejBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TVRrNU9TOTRiR2x1YXlJZ2VEMGlNSEI0SWlCNVBTSXdjSGdpRFFvSklIWnBaWGRDYjNnOUlqQWdNQ0F4TUNBeE1DSWdjM1I1YkdVOUltVnVZV0pzWlMxaVlXTnJaM0p2ZFc1a09tNWxkeUF3SURBZ01UQWdNVEE3SWlCNGJXdzZjM0JoWTJVOUluQnlaWE5sY25abElqNE5Danh6ZEhsc1pTQjBlWEJsUFNKMFpYaDBMMk56Y3lJK0RRb0pMbk4wTUh0bWFXeHNPaU0yUkRjd056STdmUTBLUEM5emRIbHNaVDROQ2p4d2IyeDVaMjl1SUdOc1lYTnpQU0p6ZERBaUlIQnZhVzUwY3owaU1pd3lJREFzTkNBMUxEa2dNVEFzTkNBNExESWdOU3cxSUNJdlBnMEtQQzl6ZG1jK0RRbz0pO1wiLFxuICAgICAgICBcIi5zdl9xX3RpdGxlIC5zdl9xdWVzdGlvbl9pY29uLnN2X2V4cGFuZGVkOjpiZWZvcmVcIjogXCJ0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpO1wiLFxuICAgICAgICBcIi5zdl9xYmxuIC5jaGVja2JveC1tYXRlcmlhbFwiOiBcIm1hcmdpbi1yaWdodDogM3B4O1wiLFxuICAgICAgICBcIi5zdl9xY2J4IC5jaGVja2JveC1tYXRlcmlhbFwiOiBcIm1hcmdpbi1yaWdodDogNXB4O1wiLFxuICAgICAgICBcIi5zdl9xY2J4IC5jaGVja2JveCBsYWJlbFwiOiBcImp1c3RpZnktY29udGVudDogbGVmdDsgZGlzcGxheTogaW5saW5lLWJsb2NrO1wiLFxuICAgICAgICBcIi5zdl9xc3RuIC5yYWRpbyBsYWJlbFwiOiBcImp1c3RpZnktY29udGVudDogbGVmdDsgZGlzcGxheTogaW5saW5lLWJsb2NrO1wiLFxuICAgICAgICBcIi5zdl9xc3RuIC5zdl9xX2ltZ3NlbCA+IGxhYmVsIGltZ1wiOiBcInBvaW50ZXItZXZlbnRzOiBub25lO1wiLFxuICAgICAgICBcIi5zdl9xc3RuIC5zdl9xX2ltZ3NlbC5zdl9xX2ltYWdlcGlja2VyX2lubGluZVwiOiBcImRpc3BsYXk6IGlubGluZS1ibG9jaztcIixcbiAgICAgICAgXCIuc3ZfcXN0biBsYWJlbC5zdl9xX21fbGFiZWxcIjogXCJwb3NpdGlvbjogYWJzb2x1dGU7IG1hcmdpbjogMDsgZGlzcGxheTogYmxvY2s7IHdpZHRoOiAxMDAlO1wiLFxuICAgICAgICBcIi5zdl9xc3RuIHRkXCI6IFwicG9zaXRpb246IHJlbGF0aXZlO1wiLFxuICAgICAgICBcIi5zdl9xX210XCI6IFwidGFibGUtbGF5b3V0OiBmaXhlZDtcIixcbiAgICAgICAgXCIuc3ZfcV9tdF9sYWJlbFwiOiBcImRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGZvbnQtd2VpZ2h0OiBpbmhlcml0O1wiLFxuICAgICAgICBcIi5zdl9xX210X3RpdGxlXCI6IFwibWFyZ2luLXJpZ2h0OiAwLjVlbTsgd2lkdGg6IDMzJTtcIixcbiAgICAgICAgXCIuc3ZfcV9tdF9pdGVtXCI6IFwiZmxleDogMTtcIixcbiAgICAgICAgXCIuc3ZfcV9tdF9pdGVtX3ZhbHVlXCI6IFwiZmxvYXQ6IGxlZnQ7XCIsXG4gICAgICAgICdbZGlyPVwicnRsXCJdIC5zdl9xX210X2l0ZW1fdmFsdWUnOiBcImZsb2F0OiByaWdodDtcIixcbiAgICAgICAgXCIuc3ZfcXN0bi5zdl9xc3RuX2xlZnRcIjogXCJtYXJnaW4tdG9wOiAwLjc1ZW07XCIsXG4gICAgICAgIFwiLnN2X3FzdG4gLnRpdGxlLWxlZnRcIjogXCJmbG9hdDogbGVmdDsgbWFyZ2luLXJpZ2h0OiAxZW07IG1heC13aWR0aDogNTAlXCIsXG4gICAgICAgICdbZGlyPVwicnRsXCJdIC5zdl9xc3RuIC50aXRsZS1sZWZ0JzogXCJmbG9hdDogcmlnaHQ7IG1hcmdpbi1sZWZ0OiAxZW07XCIsXG4gICAgICAgIFwiLnN2X3FzdG4gLmNvbnRlbnQtbGVmdFwiOiBcIm92ZXJmbG93OiBoaWRkZW5cIixcbiAgICAgICAgXCIuc3ZfcV9yYWRpb2dyb3VwX2lubGluZSAuc3ZfcV9yYWRpb2dyb3VwX290aGVyXCI6IFwiZGlzcGxheTogaW5saW5lLWJsb2NrO1wiLFxuICAgICAgICBcIi5zdl9xX2NoZWNrYm94X2lubGluZSAuc3ZfcV9jaGVja2JveF9vdGhlclwiOiBcImRpc3BsYXk6IGlubGluZS1ibG9jaztcIixcbiAgICAgICAgXCIuc3ZfcV9jaGVja2JveF9pbmxpbmUsIC5zdl9xX3JhZGlvZ3JvdXBfaW5saW5lLCAuc3ZfcV9pbWFnZXBpY2tlcl9pbmxpbmVcIjogXCJsaW5lLWhlaWdodDogMi41ZW07XCIsXG4gICAgICAgIFwiLmZvcm0taW5saW5lIC5zdl9xX2NoZWNrYm94X2lubGluZTpub3QoOmxhc3QtY2hpbGQpXCI6IFwibWFyZ2luLXJpZ2h0OiAxZW07XCIsXG4gICAgICAgIFwiLmZvcm0taW5saW5lIC5zdl9xX3JhZGlvZ3JvdXBfaW5saW5lOm5vdCg6bGFzdC1jaGlsZClcIjogXCJtYXJnaW4tcmlnaHQ6IDFlbTtcIixcbiAgICAgICAgXCIuc3ZfaW1nc2VsIC5zdl9xX2ltYWdlcGlja2VyX2lubGluZTpub3QoOmxhc3QtY2hpbGQpXCI6IFwibWFyZ2luLXJpZ2h0OiAxZW07XCIsXG4gICAgICAgIFwiLnN2X3FzdG4gZmllbGRzZXRcIjogXCJib3JkZXI6IG5vbmU7IG1hcmdpbjogMDsgcGFkZGluZzogMDtcIixcbiAgICAgICAgXCIuc3ZfcXN0biAuc3ZfcV9maWxlX3BsYWNlaG9sZGVyXCI6IFwiZGlzcGxheTpub25lXCIsXG4gICAgICAgIFwiLnN2X3BfdGl0bGVcIjogXCJwYWRkaW5nLWxlZnQ6IDFlbTsgcGFkZGluZy1ib3R0b206IDAuM2VtO1wiLFxuICAgICAgICBcIi5zdl9wX3RpdGxlX2V4cGFuZGFibGUsIC5zdl9xX3RpdGxlX2V4cGFuZGFibGVcIjogXCJjdXJzb3I6IHBvaW50ZXI7IHBvc2l0aW9uOiByZWxhdGl2ZTsgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgcGFkZGluZy1yaWdodDogMjRweDtcIixcbiAgICAgICAgXCIuc3ZfcF90aXRsZV9leHBhbmRhYmxlOjphZnRlciwgLnN2X3FfdGl0bGVfZXhwYW5kYWJsZTo6YWZ0ZXJcIjogXCJjb250ZW50OiBcXFwiXFxcIjsgZGlzcGxheTogYmxvY2s7YmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDJTNGeG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J3V0Zi04JyUzRiUzRSUzQyEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDIxLjEuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgLS0lM0UlM0NzdmcgdmVyc2lvbj0nMS4xJyBpZD0nTGF5ZXJfMScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB4bWxuczp4bGluaz0naHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluaycgeD0nMHB4JyB5PScwcHgnIHZpZXdCb3g9JzAgMCAxMCAxMCcgc3R5bGU9J2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMTAgMTA7JyB4bWw6c3BhY2U9J3ByZXNlcnZlJyUzRSUzQ3N0eWxlIHR5cGU9J3RleHQvY3NzJyUzRSAuc3QwJTdCZmlsbDolMjM0MDQwNDA7JTdEJTBBJTNDL3N0eWxlJTNFJTNDcG9seWdvbiBjbGFzcz0nc3QwJyBwb2ludHM9JzIsMiAwLDQgNSw5IDEwLDQgOCwyIDUsNSAnLyUzRSUzQy9zdmclM0UlMEFcXFwiKTsgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIGNlbnRlcjsgYmFja2dyb3VuZC1zaXplOiAxMHB4IDEycHg7IHdpZHRoOiAyNHB4OyBoZWlnaHQ6IDI0cHg7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgcmlnaHQ6IDA7XCIsXG4gICAgICAgIFwiLnN2X3BfdGl0bGVfZXhwYW5kZWQ6OmFmdGVyLCAuc3ZfcV90aXRsZV9leHBhbmRlZDo6YWZ0ZXJcIjogXCJ0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpO1wiLFxuICAgICAgICBcIi5zdl9wX3RpdGxlIC5zdl9wYW5lbF9pY29uXCI6IFwiZmxvYXQ6IHJpZ2h0OyBtYXJnaW4tcmlnaHQ6IDFlbTtcIixcbiAgICAgICAgXCIuc3ZfcF90aXRsZSAuc3ZfcGFuZWxfaWNvbjo6YmVmb3JlXCI6IFwiY29udGVudDogJyc7IGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7IGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjsgcGFkZGluZzogMC41ZW07IGRpc3BsYXk6IGlubGluZS1ibG9jazsgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEQ5NGJXd2dkbVZ5YzJsdmJqMGlNUzR3SWlCbGJtTnZaR2x1WnowaWRYUm1MVGdpUHo0TkNqd2hMUzBnUjJWdVpYSmhkRzl5T2lCQlpHOWlaU0JKYkd4MWMzUnlZWFJ2Y2lBeU1pNHdMakVzSUZOV1J5QkZlSEJ2Y25RZ1VHeDFaeTFKYmlBdUlGTldSeUJXWlhKemFXOXVPaUEyTGpBd0lFSjFhV3hrSURBcElDQXRMVDROQ2p4emRtY2dkbVZ5YzJsdmJqMGlNUzR4SWlCcFpEMGlUR0Y1WlhKZk1TSWdlRzFzYm5NOUltaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6SXdNREF2YzNabklpQjRiV3h1Y3pwNGJHbHVhejBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TVRrNU9TOTRiR2x1YXlJZ2VEMGlNSEI0SWlCNVBTSXdjSGdpRFFvSklIWnBaWGRDYjNnOUlqQWdNQ0F4TUNBeE1DSWdjM1I1YkdVOUltVnVZV0pzWlMxaVlXTnJaM0p2ZFc1a09tNWxkeUF3SURBZ01UQWdNVEE3SWlCNGJXdzZjM0JoWTJVOUluQnlaWE5sY25abElqNE5Danh6ZEhsc1pTQjBlWEJsUFNKMFpYaDBMMk56Y3lJK0RRb0pMbk4wTUh0bWFXeHNPaU0yUkRjd056STdmUTBLUEM5emRIbHNaVDROQ2p4d2IyeDVaMjl1SUdOc1lYTnpQU0p6ZERBaUlIQnZhVzUwY3owaU1pd3lJREFzTkNBMUxEa2dNVEFzTkNBNExESWdOU3cxSUNJdlBnMEtQQzl6ZG1jK0RRbz0pO1wiLFxuICAgICAgICBcIi5zdl9wX3RpdGxlIC5zdl9wYW5lbF9pY29uLnN2X2V4cGFuZGVkOjpiZWZvcmVcIjogXCJ0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpO1wiLFxuICAgICAgICBcIi5zdl9wX2Zvb3RlclwiOiBcInBhZGRpbmctbGVmdDogMWVtOyBwYWRkaW5nLWJvdHRvbTogMWVtO3BhZGRpbmctdG9wOiAxZW07XCIsXG4gICAgICAgIFwiLnN2X21hdHJpeF9jZWxsX2RldGFpbF9idXR0b25cIjogXCJwb3NpdGlvbjogcmVsYXRpdmVcIixcbiAgICAgICAgXCIuc3ZfZGV0YWlsX3BhbmVsX2ljb25cIjogXCJkaXNwbGF5OiBibG9jazsgcG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiA1MCU7IHRvcDogNTAlOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTsgd2lkdGg6IDE0cHg7IGhlaWdodDogMTRweDtcIixcbiAgICAgICAgXCIuc3ZfZGV0YWlsX3BhbmVsX2ljb246OmJlZm9yZVwiOiBcImNvbnRlbnQ6ICcnOyBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7IHdpZHRoOiAxNHB4OyBoZWlnaHQ6IDE0cHg7IGRpc3BsYXk6IGJsb2NrOyB0cmFuc2Zvcm06IHJvdGF0ZSgyNzBkZWcpOyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0MlM0Z4bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0ndXRmLTgnJTNGJTNFJTNDIS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMjEuMS4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAtLSUzRSUzQ3N2ZyB2ZXJzaW9uPScxLjEnIGlkPSdMYXllcl8xJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHhtbG5zOnhsaW5rPSdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJyB4PScwcHgnIHk9JzBweCcgdmlld0JveD0nMCAwIDE1IDE1JyBzdHlsZT0nZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAxNSAxNTsnIHhtbDpzcGFjZT0ncHJlc2VydmUnJTNFJTNDc3R5bGUgdHlwZT0ndGV4dC9jc3MnJTNFIC5zdDAlN0JmaWxsOiUyM0ZGRkZGRjslN0QlMEElM0Mvc3R5bGUlM0UlM0Nwb2x5Z29uIGNsYXNzPSdzdDAnIHBvaW50cz0nMTQsNS41IDEyLjYsNC4xIDcuNSw5LjEgMi40LDQuMSAxLDUuNSA3LjUsMTIgJy8lM0UlM0Mvc3ZnJTNFJTBBXFxcIik7XCIsXG4gICAgICAgIFwiLnN2X2RldGFpbF9wYW5lbF9pY29uLnN2X2RldGFpbF9leHBhbmRlZDo6YmVmb3JlXCI6IFwidHJhbnNmb3JtOiByb3RhdGUoMGRlZylcIixcbiAgICAgICAgXCIuc3ZfbWF0cml4X2VtcHR5X3Jvd3Nfc2VjdGlvblwiOiBcInRleHQtYWxpZ246IGNlbnRlcjsgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcIixcbiAgICAgICAgXCIuc3ZfbWF0cml4X2VtcHR5X3Jvd3NfdGV4dFwiOiBcInBhZGRpbmc6MjBweFwiLFxuICAgICAgICBcIi5zdl9xX2ZpbGUgPiBpbnB1dFt0eXBlPWZpbGVdLCAuc3ZfcV9maWxlID4gYnV0dG9uXCI6IFwiZGlzcGxheTogaW5saW5lLWJsb2NrO1wiLFxuICAgICAgICBcIi5zdl9xX2ZpbGVfcHJldmlld1wiOiBcImRpc3BsYXk6IGlubGluZS1ibG9jazsgdmVydGljYWwtYWxpZ246IHRvcDsgYm9yZGVyOiAxcHggc29saWQgbGlnaHRncmF5OyBwYWRkaW5nOiA1cHg7IG1hcmdpbi10b3A6IDEwcHg7XCIsXG4gICAgICAgIFwiLnN2X3FfZmlsZV9wcmV2aWV3ID4gYVwiOiBcImRpc3BsYXk6IGJsb2NrOyBvdmVyZmxvdzogaGlkZGVuOyB2ZXJ0aWNhbC1hbGlnbjogdG9wOyB3aGl0ZS1zcGFjZTogbm93cmFwOyB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcIixcbiAgICAgICAgXCIuc3ZfcV9maWxlX3JlbW92ZV9idXR0b25cIjogXCJsaW5lLWhlaWdodDogbm9ybWFsO1wiLFxuICAgICAgICBcIi5zdl9xX2ZpbGVfcmVtb3ZlXCI6IFwiZGlzcGxheTogYmxvY2s7IGN1cnNvcjogcG9pbnRlcjtcIixcbiAgICAgICAgXCIuc3ZfcV9tX2NlbGxfdGV4dFwiOiBcImN1cnNvcjogcG9pbnRlcjtcIixcbiAgICAgICAgXCIuc3ZfcV9kZF9vdGhlclwiOiBcIm1hcmdpbi10b3A6IDFlbTtcIixcbiAgICAgICAgXCIuc3ZfcV9kZF9vdGhlciBpbnB1dFwiOiBcIndpZHRoOiAxMDAlO1wiLFxuICAgICAgICBcIi5zdl9xX2RkX2NsZWFuLWJ1dHRvblwiOiBcIm1hcmdpbjogMC4xNWVtIDNlbTtcIixcbiAgICAgICAgXCIuc3ZfcV9kZF9jbGVhbi1idXR0b24tc3ZnXCI6IFwid2lkdGg6IDFlbTsgaGVpZ2h0OiAxZW07XCIsXG4gICAgICAgIFwiLnN2X3FfZGRfY29udHJvbFwiOiBcImRpc3BsYXk6IGZsZXg7IGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsgYXBwZWFyYW5jZTogbm9uZTtcIixcbiAgICAgICAgXCIuc3ZfcV9kZF92YWx1ZVwiOiBcIndpZHRoOiAxMDAlOyBvdmVyZmxvdzogaGlkZGVuOyB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsgd2hpdGUtc3BhY2U6IG5vd3JhcDsgcG9zaXRpb246IHJlbGF0aXZlO1wiLFxuICAgICAgICBcIi5zdl9xX2RkX2hpbnQtcHJlZml4IHNwYW5cIjogXCJ3aGl0ZS1zcGFjZTogcHJlO1wiLFxuICAgICAgICBcIi5zdl9xX2RkX2hpbnQtc3VmZml4XCI6IFwiZGlzcGxheTogZmxleDtcIixcbiAgICAgICAgXCIuc3ZfcV9kZF9yb290XCI6IFwicG9zaXRpb246IHJlbGF0aXZlO1wiLFxuICAgICAgICBcIi5zdl9xX2RkX3NlbGVjdF93cmFwcGVyXCI6IFwicG9zaXRpb246IHJlbGF0aXZlO1wiLFxuICAgICAgICBcIi5zdl9xX2RkX3NlbGVjdF93cmFwcGVyOjphZnRlclwiOiBcImNvbnRlbnQ6IFxcXCJcXFwiOyBkaXNwbGF5OiBibG9jaztiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0MlM0Z4bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0ndXRmLTgnJTNGJTNFJTNDIS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMjEuMS4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAtLSUzRSUzQ3N2ZyB2ZXJzaW9uPScxLjEnIGlkPSdMYXllcl8xJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHhtbG5zOnhsaW5rPSdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJyB4PScwcHgnIHk9JzBweCcgdmlld0JveD0nMCAwIDEwIDEwJyBzdHlsZT0nZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAxMCAxMDsnIHhtbDpzcGFjZT0ncHJlc2VydmUnJTNFJTNDc3R5bGUgdHlwZT0ndGV4dC9jc3MnJTNFIC5zdDAlN0JmaWxsOiUyMzQwNDA0MDslN0QlMEElM0Mvc3R5bGUlM0UlM0Nwb2x5Z29uIGNsYXNzPSdzdDAnIHBvaW50cz0nMiwyIDAsNCA1LDkgMTAsNCA4LDIgNSw1ICcvJTNFJTNDL3N2ZyUzRSUwQVxcXCIpOyBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgY2VudGVyOyBiYWNrZ3JvdW5kLXNpemU6IDEwcHggMTJweDsgd2lkdGg6IDM0cHg7IGhlaWdodDogMTAwJTsgcG9zaXRpb246IGFic29sdXRlOyBpbnNldC1pbmxpbmUtZW5kOiAwOyB0b3A6IDA7XCIsXG4gICAgICAgIFwiLnN2X3FfZGRfZmlsdGVyLXN0cmluZy1pbnB1dFwiOiBcIm91dGxpbmU6IG5vbmU7IGJvcmRlcjogbm9uZTsgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgaW5zZXQtaW5saW5lLXN0YXJ0OiAwOyBpbnNldC1ibG9jay1zdGFydDogMDsgd2lkdGg6IDEwMCU7IG1heC13aWR0aDogMTAwJTsgcGFkZGluZzogMDtcIixcbiAgICAgICAgXCIuc3ZfcV9kcm9wZG93bl9jbGVhbi1idXR0b25cIjogXCJtYXJnaW46IGF1dG8gMmVtO1wiLFxuICAgICAgICBcIi5zdl9xX3RhZ2JveF9fcGxhY2Vob2xkZXJcIjogXCJwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogMDsgaW5zZXQtaW5saW5lLXN0YXJ0OiAxZW07IG1heC13aWR0aDogMTAwJTsgd2lkdGg6IGF1dG87IGhlaWdodDogMTAwJTsgdGV4dC1hbGlnbjogc3RhcnQ7IGN1cnNvcjogdGV4dDsgcG9pbnRlci1ldmVudHM6IG5vbmU7XCIsXG4gICAgICAgIFwiLnN2X3FzdG4gLnN2LXEtY29sLTEsIC5zdi1xdWVzdGlvbiAuc3YtcS1jb2wtMVwiOiBcIndpZHRoOiAxMDAlOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHBhZGRpbmctcmlnaHQ6IDFlbTsgYm94LXNpemluZzogYm9yZGVyLWJveDsgd29yZC1icmVhazogYnJlYWstd29yZDtcIixcbiAgICAgICAgXCIuc3ZfcXN0biAuc3YtcS1jb2wtMiwgLnN2LXF1ZXN0aW9uIC5zdi1xLWNvbC0yXCI6IFwid2lkdGg6IGNhbGMoNTAlIC0gMWVtKTsgZGlzcGxheTogaW5saW5lLWJsb2NrOyBwYWRkaW5nLXJpZ2h0OiAxZW07IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XCIsXG4gICAgICAgIFwiLnN2X3FzdG4gLnN2LXEtY29sLTMsIC5zdi1xdWVzdGlvbiAuc3YtcS1jb2wtM1wiOiBcIndpZHRoOiBjYWxjKDMzLjMzMzMzJSAtIDFlbSk7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgcGFkZGluZy1yaWdodDogMWVtOyBib3gtc2l6aW5nOiBib3JkZXItYm94OyB3b3JkLWJyZWFrOiBicmVhay13b3JkO1wiLFxuICAgICAgICBcIi5zdl9xc3RuIC5zdi1xLWNvbC00LCAuc3YtcXVlc3Rpb24gLnN2LXEtY29sLTRcIjogXCJ3aWR0aDogY2FsYygyNSUgLSAxZW0pOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHBhZGRpbmctcmlnaHQ6IDFlbTsgYm94LXNpemluZzogYm9yZGVyLWJveDsgd29yZC1icmVhazogYnJlYWstd29yZDtcIixcbiAgICAgICAgXCIuc3ZfcXN0biAuc3YtcS1jb2wtNSwgLnN2LXF1ZXN0aW9uIC5zdi1xLWNvbC01XCI6IFwid2lkdGg6IGNhbGMoMjAlIC0gMWVtKTsgZGlzcGxheTogaW5saW5lLWJsb2NrOyBwYWRkaW5nLXJpZ2h0OiAxZW07IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XCIsXG4gICAgICAgIFwiLnN2X3FzdG4gLnN2LXEtY29sdW1uLTEsIC5zdi1xdWVzdGlvbiAuc3YtcS1jb2x1bW4tMVwiOiBcIndpZHRoOiAxMDAlOyBtYXgtd2lkdGg6IDEwMCU7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgcGFkZGluZy1yaWdodDogMWVtOyBib3gtc2l6aW5nOiBib3JkZXItYm94OyB3b3JkLWJyZWFrOiBicmVhay13b3JkO1wiLFxuICAgICAgICBcIi5zdl9xc3RuIC5zdi1xLWNvbHVtbi0yLCAuc3YtcXVlc3Rpb24gLnN2LXEtY29sdW1uLTJcIjogXCJtYXgtd2lkdGg6IDUwJTsgZGlzcGxheTogaW5saW5lLWJsb2NrOyBwYWRkaW5nLXJpZ2h0OiAxZW07IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XCIsXG4gICAgICAgIFwiLnN2X3FzdG4gLnN2LXEtY29sdW1uLTMsIC5zdi1xdWVzdGlvbiAuc3YtcS1jb2x1bW4tM1wiOiBcIm1heC13aWR0aDogMzMuMzMzMzMlOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHBhZGRpbmctcmlnaHQ6IDFlbTsgYm94LXNpemluZzogYm9yZGVyLWJveDsgd29yZC1icmVhazogYnJlYWstd29yZDtcIixcbiAgICAgICAgXCIuc3ZfcXN0biAuc3YtcS1jb2x1bW4tNCwgLnN2LXF1ZXN0aW9uIC5zdi1xLWNvbHVtbi00XCI6IFwibWF4LXdpZHRoOiAyNSU7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgcGFkZGluZy1yaWdodDogMWVtOyBib3gtc2l6aW5nOiBib3JkZXItYm94OyB3b3JkLWJyZWFrOiBicmVhay13b3JkO1wiLFxuICAgICAgICBcIi5zdl9xc3RuIC5zdi1xLWNvbHVtbi01LCAuc3YtcXVlc3Rpb24gLnN2LXEtY29sdW1uLTVcIjogXCJtYXgtd2lkdGg6IDIwJTsgZGlzcGxheTogaW5saW5lLWJsb2NrOyBwYWRkaW5nLXJpZ2h0OiAxZW07IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XCIsXG4gICAgICAgIFwiLnN2X3FzdG4gLnN2X3FfZmlsZV9pbnB1dFwiOiBcImNvbG9yOiB0cmFuc3BhcmVudDtcIixcbiAgICAgICAgXCIuc3ZfcXN0biAuc3ZfcV9pbWdzZWwgbGFiZWwgPiBkaXZcIjogXCJvdmVyZmxvdzogaGlkZGVuOyB3aGl0ZS1zcGFjZTogbm93cmFwOyB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsgcGFkZGluZzogNHB4OyBib3JkZXI6IDFweCBzb2xpZCBsaWdodGdyYXk7IGJvcmRlci1yYWRpdXM6IDRweDtcIixcbiAgICAgICAgXCIuc3ZfcXN0biAuc3ZfcV9pbWdzZWwgbGFiZWwgPiBkaXYgPiBpbWcsIC5zdl9xc3RuIC5zdl9xX2ltZ3NlbCBsYWJlbCA+IGRpdiA+IGVtYmVkXCI6IFwiZGlzcGxheTogYmxvY2s7XCIsXG4gICAgICAgIFwiLnN2X3FzdG4gdGFibGUgdHIgdGQgLnN2X3FfbV9jZWxsX2xhYmVsXCI6IFwicG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAwOyByaWdodDogMDsgdG9wOiAwOyBib3R0b206IDA7XCIsXG4gICAgICAgIFwiZi1wYW5lbFwiOiBcInBhZGRpbmc6IDAuNWVtIDFlbTsgZGlzcGxheTogaW5saW5lLWJsb2NrOyBsaW5lLWhlaWdodDogMmVtO1wiLFxuICAgICAgICBcIi5zdl9wcm9ncmVzc19iYXIgPiBzcGFuXCI6IFwid2hpdGUtc3BhY2U6IG5vd3JhcDtcIixcbiAgICAgICAgLy9wcm9ncmVzcyBidXR0b25zXG4gICAgICAgIFwiLnN2X3Byb2dyZXNzLWJ1dHRvbnNfX2NvbnRhaW5lci1jZW50ZXJcIjogXCJ0ZXh0LWFsaWduOiBjZW50ZXI7XCIsXG4gICAgICAgIFwiLnN2X3Byb2dyZXNzLWJ1dHRvbnNfX2NvbnRhaW5lclwiOiBcImRpc3BsYXk6IGlubGluZS1ibG9jazsgZm9udC1zaXplOiAwOyB3aWR0aDogMTAwJTsgbWF4LXdpZHRoOiAxMTAwcHg7IHdoaXRlLXNwYWNlOiBub3dyYXA7IG92ZXJmbG93OiBoaWRkZW47XCIsXG4gICAgICAgIFwiLnN2X3Byb2dyZXNzLWJ1dHRvbnNfX2ltYWdlLWJ1dHRvbi1sZWZ0XCI6IFwiZGlzcGxheTogaW5saW5lLWJsb2NrOyB2ZXJ0aWNhbC1hbGlnbjogdG9wOyBtYXJnaW4tdG9wOiAyMnB4OyBmb250LXNpemU6IDE0cHg7IHdpZHRoOiAxNnB4OyBoZWlnaHQ6IDE2cHg7IGN1cnNvcjogcG9pbnRlcjsgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEQ5NGJXd2dkbVZ5YzJsdmJqMGlNUzR3SWlCbGJtTnZaR2x1WnowaWRYUm1MVGdpUHo0TkNqd2hMUzBnUjJWdVpYSmhkRzl5T2lCQlpHOWlaU0JKYkd4MWMzUnlZWFJ2Y2lBeU1pNHdMakVzSUZOV1J5QkZlSEJ2Y25RZ1VHeDFaeTFKYmlBdUlGTldSeUJXWlhKemFXOXVPaUEyTGpBd0lFSjFhV3hrSURBcElDQXRMVDROQ2p4emRtY2dkbVZ5YzJsdmJqMGlNUzR4SWlCcFpEMGlUR0Y1WlhKZk1TSWdlRzFzYm5NOUltaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6SXdNREF2YzNabklpQjRiV3h1Y3pwNGJHbHVhejBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TVRrNU9TOTRiR2x1YXlJZ2VEMGlNSEI0SWlCNVBTSXdjSGdpRFFvSklIWnBaWGRDYjNnOUlqQWdNQ0F4TmlBeE5pSWdjM1I1YkdVOUltVnVZV0pzWlMxaVlXTnJaM0p2ZFc1a09tNWxkeUF3SURBZ01UWWdNVFk3SWlCNGJXdzZjM0JoWTJVOUluQnlaWE5sY25abElqNE5Danh3YjJ4NVoyOXVJSEJ2YVc1MGN6MGlNVEVzTVRJZ09Td3hOQ0F6TERnZ09Td3lJREV4TERRZ055dzRJQ0l2UGcwS1BDOXpkbWMrRFFvPSk7XCIsXG4gICAgICAgIFwiLnN2X3Byb2dyZXNzLWJ1dHRvbnNfX2ltYWdlLWJ1dHRvbi1yaWdodFwiOiBcImRpc3BsYXk6IGlubGluZS1ibG9jazsgdmVydGljYWwtYWxpZ246IHRvcDsgbWFyZ2luLXRvcDogMjJweDsgZm9udC1zaXplOiAxNHB4OyB3aWR0aDogMTZweDsgaGVpZ2h0OiAxNnB4OyBjdXJzb3I6IHBvaW50ZXI7IGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBEOTRiV3dnZG1WeWMybHZiajBpTVM0d0lpQmxibU52WkdsdVp6MGlkWFJtTFRnaVB6NE5DandoTFMwZ1IyVnVaWEpoZEc5eU9pQkJaRzlpWlNCSmJHeDFjM1J5WVhSdmNpQXlNaTR3TGpFc0lGTldSeUJGZUhCdmNuUWdVR3gxWnkxSmJpQXVJRk5XUnlCV1pYSnphVzl1T2lBMkxqQXdJRUoxYVd4a0lEQXBJQ0F0TFQ0TkNqeHpkbWNnZG1WeWMybHZiajBpTVM0eElpQnBaRDBpVEdGNVpYSmZNU0lnZUcxc2JuTTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5Mekl3TURBdmMzWm5JaUI0Yld4dWN6cDRiR2x1YXowaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1UazVPUzk0YkdsdWF5SWdlRDBpTUhCNElpQjVQU0l3Y0hnaURRb0pJSFpwWlhkQ2IzZzlJakFnTUNBeE5pQXhOaUlnYzNSNWJHVTlJbVZ1WVdKc1pTMWlZV05yWjNKdmRXNWtPbTVsZHlBd0lEQWdNVFlnTVRZN0lpQjRiV3c2YzNCaFkyVTlJbkJ5WlhObGNuWmxJajROQ2p4d2IyeDVaMjl1SUhCdmFXNTBjejBpTlN3MElEY3NNaUF4TXl3NElEY3NNVFFnTlN3eE1pQTVMRGdnSWk4K0RRbzhMM04yWno0TkNnPT0pO1wiLFxuICAgICAgICBcIi5zdl9wcm9ncmVzcy1idXR0b25zX19pbWFnZS1idXR0b24tLWhpZGRlblwiOiBcInZpc2liaWxpdHk6IGhpZGRlbjtcIixcbiAgICAgICAgXCIuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdC1jb250YWluZXJcIjogXCJtYXgtd2lkdGg6IGNhbGMoMTAwJSAtIDM2cHgpOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IG92ZXJmbG93OiBoaWRkZW47XCIsXG4gICAgICAgIFwiLnN2X3Byb2dyZXNzLWJ1dHRvbnNfX2xpc3RcIjogXCJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHdpZHRoOiBtYXgtY29udGVudDsgcGFkZGluZy1sZWZ0OiAyOHB4OyBwYWRkaW5nLXJpZ2h0OiAyOHB4OyBtYXJnaW4tdG9wOiAxNHB4OyBtYXJnaW4tYm90dG9tOiAxNHB4O1wiLFxuICAgICAgICBcIi5zdl9wcm9ncmVzcy1idXR0b25zX19saXN0IGxpXCI6IFwid2lkdGg6IDEzOHB4OyBmb250LXNpemU6IDE0cHg7IGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWZhbWlseSwgJGZvbnQtZmFtaWx5KTsgcG9zaXRpb246IHJlbGF0aXZlOyB0ZXh0LWFsaWduOiBjZW50ZXI7IHZlcnRpY2FsLWFsaWduOiB0b3A7IGRpc3BsYXk6IGlubGluZS1ibG9jaztcIixcbiAgICAgICAgXCIuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdCBsaTpiZWZvcmVcIjogXCJ3aWR0aDogMjRweDsgaGVpZ2h0OiAyNHB4OyBjb250ZW50OiAnJzsgbGluZS1oZWlnaHQ6IDMwcHg7IGRpc3BsYXk6IGJsb2NrOyBtYXJnaW46IDAgYXV0byAxMHB4IGF1dG87IGJvcmRlcjogM3B4IHNvbGlkOyBib3JkZXItcmFkaXVzOiA1MCU7IGJveC1zaXppbmc6IGNvbnRlbnQtYm94OyBjdXJzb3I6IHBvaW50ZXI7XCIsXG4gICAgICAgIFwiLnN2X3Byb2dyZXNzLWJ1dHRvbnNfX2xpc3QgbGk6YWZ0ZXJcIjogXCJ3aWR0aDogNzMlOyBoZWlnaHQ6IDNweDsgY29udGVudDogJyc7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAxNXB4OyBsZWZ0OiAtMzYuNSU7XCIsXG4gICAgICAgIFwiLnN2X3Byb2dyZXNzLWJ1dHRvbnNfX2xpc3QgbGk6Zmlyc3QtY2hpbGQ6YWZ0ZXJcIjogXCJjb250ZW50OiBub25lO1wiLFxuICAgICAgICBcIi5zdl9wcm9ncmVzcy1idXR0b25zX19saXN0IC5zdl9wcm9ncmVzcy1idXR0b25zX19wYWdlLXRpdGxlXCI6IFwid2lkdGg6IDEwMCU7IG92ZXJmbG93OiBoaWRkZW47IHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOyB3aGl0ZS1zcGFjZTogbm93cmFwOyBmb250LXdlaWdodDogYm9sZDtcIixcbiAgICAgICAgXCIuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdCAuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fcGFnZS1kZXNjcmlwdGlvblwiOiBcIndpZHRoOiAxMDAlOyBvdmVyZmxvdzogaGlkZGVuOyB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsgd2hpdGUtc3BhY2U6IG5vd3JhcDtcIixcbiAgICAgICAgXCIuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdCBsaS5zdl9wcm9ncmVzcy1idXR0b25zX19saXN0LWVsZW1lbnQtLW5vbmNsaWNrYWJsZTpiZWZvcmVcIjogXCJjdXJzb3I6IG5vdC1hbGxvd2VkO1wiLFxuICAgICAgICAvLyByYW5raW5nXG4gICAgICAgIFwiLnN2LXJhbmtpbmdcIjogXCJvdXRsaW5lOiBub25lOyB1c2VyLXNlbGVjdDogbm9uZTtcIixcbiAgICAgICAgXCIuc3YtcmFua2luZy1pdGVtXCI6IFwiY3Vyc29yOiBwb2ludGVyOyBwb3NpdGlvbjogcmVsYXRpdmU7XCIsXG4gICAgICAgIFwiLnN2LXJhbmtpbmctaXRlbTpmb2N1cyAuc3YtcmFua2luZy1pdGVtX19pY29uLS1ob3ZlclwiOiBcInZpc2liaWxpdHk6IGhpZGRlbjtcIixcbiAgICAgICAgXCIuc3YtcmFua2luZy1pdGVtOmhvdmVyIC5zdi1yYW5raW5nLWl0ZW1fX2ljb24tLWhvdmVyXCI6IFwidmlzaWJpbGl0eTogdmlzaWJsZTtcIixcbiAgICAgICAgXCIuc3YtcXVlc3Rpb24tLWRpc2FibGVkIC5zdi1yYW5raW5nLWl0ZW06aG92ZXIgLnN2LXJhbmtpbmctaXRlbV9faWNvbi0taG92ZXJcIjogXCJ2aXNpYmlsaXR5OiBoaWRkZW47XCIsXG4gICAgICAgIFwiLnN2LXJhbmtpbmctaXRlbTpmb2N1c1wiOiBcIm91dGxpbmU6IG5vbmU7XCIsXG4gICAgICAgIFwiLnN2LXJhbmtpbmctaXRlbTpmb2N1cyAuc3YtcmFua2luZy1pdGVtX19pY29uLS1mb2N1c1wiOiBcInZpc2liaWxpdHk6IHZpc2libGU7IHRvcDogMTVweDtcIixcbiAgICAgICAgXCIuc3YtcmFua2luZy1pdGVtOmZvY3VzIC5zdi1yYW5raW5nLWl0ZW1fX2luZGV4XCI6IFwiYmFja2dyb3VuZDogd2hpdGU7IGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLXByaW1hcnksICMxOWIzOTQpO1wiLFxuICAgICAgICBcIi5zdi1yYW5raW5nLWl0ZW1fX2NvbnRlbnRcIjogXCJkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBsaW5lLWhlaWdodDogMWVtOyBwYWRkaW5nOiA1cHggMHB4OyBib3JkZXItcmFkaXVzOiAxMDBweDtcIixcbiAgICAgICAgXCIuc3YtcmFua2luZy1pdGVtX19pY29uLWNvbnRhaW5lclwiOiBcImxlZnQ6IDA7dG9wOiAwO2JvdHRvbTogMDt3aWR0aDogY2FsYygzICogdmFyKC0tYmFzZS11bml0LCA4cHgpKTsgZmxleC1zaHJpbms6IDA7XCIsXG4gICAgICAgIFwiLnN2LXJhbmtpbmctaXRlbV9faWNvblwiOiBcInZpc2liaWxpdHk6IGhpZGRlbjt0b3A6MjBweDsgZmlsbDogdmFyKC0tcHJpbWFyeSwgIzE5YjM5NCk7IHBvc2l0aW9uOiBhYnNvbHV0ZTtcIixcbiAgICAgICAgXCIuc3YtcmFua2luZy1pdGVtX19pbmRleFwiOiBcImRpc3BsYXk6IGZsZXg7IGZsZXgtc2hyaW5rOiAwOyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgYmFja2dyb3VuZDogdmFyKC0tcHJpbWFyeS1saWdodCwgcmdiYSgyNSwgMTc5LCAxNDgsIDAuMSkpOyBjb2xvcjogdmFyKC0tZm9yZWdyb3VuZCk7IGJvcmRlci1yYWRpdXM6IDEwMCU7IGJvcmRlcjoycHggc29saWQgdHJhbnNwYXJlbnQ7IHdpZHRoOiA0MHB4OyBoZWlnaHQ6IDQwcHg7IGxpbmUtaGVpZ2h0OiAxZW07XCIsXG4gICAgICAgIFwiLnN2LXJhbmtpbmctaXRlbV9fdGV4dFwiOiBcImRpc3BsYXk6IGlubGluZS1ibG9jazsgb3ZlcmZsb3c6aGlkZGVuOyB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsgd2hpdGUtc3BhY2U6IG5vd3JhcDsgbWFyZ2luOiAwIGNhbGMoMiAqIHZhcigtLWJhc2UtdW5pdCwgOHB4KSk7XCIsXG4gICAgICAgIFwiLnN2LXJhbmtpbmctaXRlbV9fZ2hvc3RcIjogXCJkaXNwbGF5OiBub25lOyBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1iYWNrZ3JvdW5kLWRpbSwgI2YzZjNmMyk7IGJvcmRlci1yYWRpdXM6IDEwMHB4O3dpZHRoOiAyMDBweDtoZWlnaHQ6IDU1cHg7ei1pbmRleDogMTtwb3NpdGlvbjogYWJzb2x1dGU7bGVmdDogMjVweDtcIixcbiAgICAgICAgXCJbZGlyPSdydGwnXSAuc3YtcmFua2luZy1pdGVtX19naG9zdFwiOiBcImxlZnQ6IGluaXRpbGFsOyByaWdodDogMjVweDtcIixcbiAgICAgICAgXCIuc3YtcmFua2luZy1pdGVtLS1naG9zdCAuc3YtcmFua2luZy1pdGVtX19naG9zdFwiOiBcImRpc3BsYXk6IGJsb2NrO1wiLFxuICAgICAgICBcIi5zdi1yYW5raW5nLWl0ZW0tLWdob3N0IC5zdi1yYW5raW5nLWl0ZW1fX2NvbnRlbnRcIjogXCJ2aXNpYmlsaXR5OiBoaWRkZW47XCIsXG4gICAgICAgIFwiLnN2LXJhbmtpbmctaXRlbS0tZHJhZyAuc3YtcmFua2luZy1pdGVtX19jb250ZW50XCI6IFwiYm94LXNoYWRvdzogMHB4IDhweCAxNnB4IHJnYmEoMCwgMCwgMCwgMC4xKTtib3JkZXItcmFkaXVzOiAxMDBweDtcIixcbiAgICAgICAgXCIuc3YtcmFua2luZy0tZHJhZyAuc3YtcmFua2luZy1pdGVtOmhvdmVyIC5zdi1yYW5raW5nLWl0ZW1fX2ljb25cIjogXCJ2aXNpYmlsaXR5OiBoaWRkZW47XCIsXG4gICAgICAgIFwiLnN2LXJhbmtpbmctaXRlbS0tZHJhZyAuc3YtcmFua2luZy1pdGVtX19pY29uLS1ob3ZlclwiOiBcInZpc2liaWxpdHk6IHZpc2libGU7XCIsXG4gICAgICAgIFwiLnN2LXJhbmtpbmctLW1vYmlsZSAuc3YtcmFua2luZy1pdGVtX19pY29uLS1ob3ZlclwiOiBcInZpc2liaWxpdHk6dmlzaWJsZTsgZmlsbDojOWY5ZjlmO1wiLFxuICAgICAgICBcIi5zdi1yYW5raW5nLS1tb2JpbGUuc3YtcmFua2luZy0tZHJhZyAuc3YtcmFua2luZy1pdGVtLS1naG9zdCAuc3YtcmFua2luZy1pdGVtX19pY29uLnN2LXJhbmtpbmctaXRlbV9faWNvbi0taG92ZXJcIjogXCJ2aXNpYmlsaXR5OmhpZGRlbjtcIixcbiAgICAgICAgXCIuc3YtcmFua2luZy0tbW9iaWxlLnN2LXJhbmtpbmctc2hvcnRjdXRcIjogXCJtYXgtd2lkdGg6IDgwJTtcIixcbiAgICAgICAgXCIuc3YtcmFua2luZy0tZGVzaWduLW1vZGUgLnN2LXJhbmtpbmctaXRlbTpob3ZlciAuc3YtcmFua2luZy1pdGVtX19pY29uXCI6IFwidmlzaWJpbGl0eTogaGlkZGVuO1wiLFxuICAgICAgICBcIi5zdi1yYW5raW5nLS1kaXNhYmxlZFwiOiBcIm9wYWNpdHk6IDAuODtcIixcbiAgICAgICAgXCIuc3YtcmFua2luZy1zaG9ydGN1dCAuc3YtcmFua2luZy1pdGVtX19pY29uXCI6IFwiZmlsbDogdmFyKC0tcHJpbWFyeSwgIzE5YjM5NCk7IFwiLFxuICAgICAgICBcIi5zdi1yYW5raW5nLS1kcmFnLWhhbmRsZS1hcmVhLWljb24gLnN2LXJhbmtpbmctaXRlbVwiOiBcImN1cnNvcjogaW5pdGlhbFwiLFxuICAgICAgICBcIi5zdi1yYW5raW5nLS1kcmFnLWhhbmRsZS1hcmVhLWljb24gLnN2LXJhbmtpbmctaXRlbV9faWNvbi0taG92ZXJcIjogXCJjdXJzb3I6IHBvaW50ZXI7XCIsXG4gICAgICAgIC8vIEVPIHJhbmtpbmdcbiAgICAgICAgLy8gZHJhZyBkcm9wXG4gICAgICAgIFwiLnN2LWRyYWdnZWQtZWxlbWVudC1zaG9ydGN1dFwiOiBcImhlaWdodDogMjRweDsgbWluLXdpZHRoOiAxMDBweDsgYm9yZGVyLXJhZGl1czogMzZweDsgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7IHBhZGRpbmc6IDE2cHg7IGN1cnNvcjogZ3JhYmJpbmc7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgei1pbmRleDogMTAwMDA7IGJveC1zaGFkb3c6IDBweCA4cHggMTZweCByZ2JhKDAsIDAsIDAsIDAuMSk7IGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWZhbWlseSwgJGZvbnQtZmFtaWx5KTsgZm9udC1zaXplOiAxNnB4OyBwYWRkaW5nLWxlZnQ6IDIwcHg7bGluZS1oZWlnaHQ6IDI0cHg7XCIsXG4gICAgICAgIFwiLnN2LW1hdHJpeGR5bmFtaWNfX2RyYWctaWNvblwiOiBcInBhZGRpbmctdG9wOjE0cHhcIixcbiAgICAgICAgXCIuc3YtbWF0cml4ZHluYW1pY19fZHJhZy1pY29uOmFmdGVyXCI6IFwiY29udGVudDogJyAnOyBkaXNwbGF5OiBibG9jazsgaGVpZ2h0OiA2cHg7IHdpZHRoOiAyMHB4OyBib3JkZXI6IDFweCBzb2xpZCAjZTdlN2U3OyBib3gtc2l6aW5nOiBib3JkZXItYm94OyBib3JkZXItcmFkaXVzOiAxMHB4OyBjdXJzb3I6IG1vdmU7IG1hcmdpbi10b3A6IDEycHg7XCIsXG4gICAgICAgIFwiLnN2LW1hdHJpeC1yb3ctLWRyYWctZHJvcC1naG9zdC1tb2QgdGRcIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAjZjNmM2YzO1wiLFxuICAgICAgICBcIi5zdi1tYXRyaXgtcm93LS1kcmFnLWRyb3AtZ2hvc3QtbW9kIHRkID4gKlwiOiBcInZpc2liaWxpdHk6IGhpZGRlblwiLFxuICAgICAgICAvL2VvIGRyYWctZHJvcFxuICAgICAgICBcIi5zdl9xc3RuIC5zdl9xX3NlbGVjdF9jb2x1bW5cIjogXCJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHZlcnRpY2FsLWFsaWduOiB0b3A7IG1pbi13aWR0aDogMTAlO1wiLFxuICAgICAgICBcIi5zdl9xc3RuIC5zdl9xX3NlbGVjdF9jb2x1bW4gPiAqOm5vdCguc3ZfdGVjaG5pY2FsKVwiOiBcImRpc3BsYXk6IGJsb2NrO1wiLFxuICAgICAgICBcIi5zdl9tYWluIC5zdl9jb250YWluZXIgLnN2X2JvZHkgLnN2X3Bfcm9vdCAuc3ZfcXN0biAuc3ZfcV9zZWxlY3RfY29sdW1uIHRleHRhcmVhXCI6IFwibWFyZ2luLWxlZnQ6IDA7IHBhZGRpbmctbGVmdDogMDsgbGluZS1oZWlnaHQ6IGluaXRpYWw7XCIsXG4gICAgICAgIFwiLnN2X21haW4gLnN2LWhpZGRlblwiOiBcImRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcIixcbiAgICAgICAgXCIuc3ZfbWFpbiAuc3YtdmlzdWFsbHloaWRkZW5cIjogXCJwb3NpdGlvbjogYWJzb2x1dGU7IGhlaWdodDogMXB4ICFpbXBvcnRhbnQ7IHdpZHRoOiAxcHggIWltcG9ydGFudDsgb3ZlcmZsb3c6IGhpZGRlbjsgY2xpcDogcmVjdCgxcHggMXB4IDFweCAxcHgpOyBjbGlwOiByZWN0KDFweCwgMXB4LCAxcHgsIDFweCk7XCIsXG4gICAgICAgIC8vIHBhbmVsZHluYW1pYyBwcm9ncmVzc1xuICAgICAgICBcIi5zdl9tYWluIC5zdi1wcm9ncmVzc1wiOiBcImhlaWdodDogMC4xOWVtOyBiYWNrZ3JvdW5kLWNvbG9yOiAkaGVhZGVyLWJhY2tncm91bmQtY29sb3I7IHBvc2l0aW9uOiByZWxhdGl2ZTtcIixcbiAgICAgICAgXCIuc3ZfbWFpbiAuc3YtcHJvZ3Jlc3NfX2JhclwiOiBcImJhY2tncm91bmQtY29sb3I6ICRtYWluLWNvbG9yOyBoZWlnaHQ6IDEwMCU7IHBvc2l0aW9uOiByZWxhdGl2ZTtcIixcbiAgICAgICAgLy8gRU8gcGFuZWxkeW5hbWljIHByb2dyZXNzXG4gICAgICAgIC8vIHBhbmVsZHluYW1pY1xuICAgICAgICBcIi5zdl9tYWluIC5zdi1wYW5lbGR5bmFtaWNfX3Byb2dyZXNzLWNvbnRhaW5lclwiOiBcInBvc2l0aW9uOiByZWxhdGl2ZTsgZGlzcGxheTogaW5saW5lLWJsb2NrOyB3aWR0aDogY2FsYygxMDAlIC0gMjUwcHgpOyBtYXJnaW4tdG9wOiAyMHB4O1wiLFxuICAgICAgICBcIi5zdl9tYWluIC5zdi1wYW5lbGR5bmFtaWNfX2FkZC1idG5cIjogXCJmbG9hdDogcmlnaHQ7XCIsXG4gICAgICAgIFwiLnN2X21haW4gLnN2LXBhbmVsZHluYW1pY19fYWRkLWJ0bi0tbGlzdC1tb2RlXCI6IFwiZmxvYXQ6IG5vbmU7IG1hcmdpbi10b3A6IDA7XCIsXG4gICAgICAgIFwiLnN2X21haW4gLnN2LXBhbmVsZHluYW1pY19fcmVtb3ZlLWJ0blwiOiBcIm1hcmdpbi10b3A6IDEuMjVlbTtcIixcbiAgICAgICAgXCIuc3ZfbWFpbiAuc3YtcGFuZWxkeW5hbWljX19yZW1vdmUtYnRuLS1yaWdodFwiOiBcIm1hcmdpbi10b3A6IDA7IG1hcmdpbi1sZWZ0OiAxLjI1ZW07XCIsXG4gICAgICAgIFwiLnN2X21haW4gLnN2LXBhbmVsZHluYW1pY19fcHJldi1idG4sIC5zdl9tYWluIC5zdi1wYW5lbGR5bmFtaWNfX25leHQtYnRuXCI6IFwiYm94LXNpemluZzogYm9yZGVyLWJveDsgZGlzcGxheTogaW5saW5lLWJsb2NrOyBjdXJzb3I6IHBvaW50ZXI7IHdpZHRoOiAwLjdlbTsgdG9wOiAtMC4yOGVtOyBwb3NpdGlvbjogYWJzb2x1dGU7XCIsXG4gICAgICAgIFwiLnN2X21haW4gLnN2LXBhbmVsZHluYW1pY19fcHJldi1idG4gc3ZnLCAuc3ZfbWFpbiAuc3YtcGFuZWxkeW5hbWljX19uZXh0LWJ0biBzdmdcIjogXCJ3aWR0aDogMC43ZW07IGhlaWdodDogMC43ZW07IGRpc3BsYXk6IGJsb2NrO1wiLFxuICAgICAgICBcIi5zdl9tYWluIC5zdi1wYW5lbGR5bmFtaWNfX3ByZXYtYnRuXCI6IFwibGVmdDogLTEuM2VtOyB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7XCIsXG4gICAgICAgIFwiLnN2X21haW4gLnN2LXBhbmVsZHluYW1pY19fbmV4dC1idG4gXCI6IFwicmlnaHQ6IC0xLjNlbTsgdHJhbnNmb3JtOiByb3RhdGUoMjcwZGVnKTtcIixcbiAgICAgICAgXCIuc3ZfbWFpbiAuc3YtcGFuZWxkeW5hbWljX19wcmV2LWJ0bi5zdi1wYW5lbGR5bmFtaWNfX3ByZXYtYnRuLS1kaXNhYmxlZCwgLnN2X21haW4gLnN2LXBhbmVsZHluYW1pY19fbmV4dC1idG4uc3YtcGFuZWxkeW5hbWljX19uZXh0LWJ0bi0tZGlzYWJsZWRcIjogXCJjdXJzb3I6IGF1dG87XCIsXG4gICAgICAgIFwiLnN2X21haW4gLnN2LXBhbmVsZHluYW1pY19fcHJvZ3Jlc3MtdGV4dFwiOiBcImZvbnQtd2VpZ2h0OiBib2xkOyBmb250LXNpemU6IDAuODdlbTsgbWFyZ2luLXRvcDogMC42OWVtOyBtYXJnaW4tbGVmdDogNGVtXCIsXG4gICAgICAgIC8vIEVPIHBhbmVsZHluYW1pY1xuICAgICAgICAvL2Jvb2xlYW5cbiAgICAgICAgXCIuc3ZfbWFpbiAuc3YtYm9vbGVhbl9fc3dpdGNoXCI6IFwiZGlzcGxheTogaW5saW5lLWJsb2NrOyBib3gtc2l6aW5nOiBib3JkZXItYm94OyB3aWR0aDogNjNweDsgaGVpZ2h0OiAyNHB4OyBtYXJnaW4tcmlnaHQ6IDE3cHg7IG1hcmdpbi1sZWZ0OiAyMXB4OyBwYWRkaW5nOiAycHggM3B4OyB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyBib3JkZXItcmFkaXVzOiAxMnB4OyBjdXJzb3I6IHBvaW50ZXI7XCIsXG4gICAgICAgIFwiLnN2X21haW4gLnN2LWJvb2xlYW5fX3NsaWRlclwiOiBcImRpc3BsYXk6IGlubGluZS1ibG9jazsgd2lkdGg6IDIwcHg7IGhlaWdodDogMjBweDsgdHJhbnNpdGlvbi1kdXJhdGlvbjogLjRzOyB0cmFuc2l0aW9uLXByb3BlcnR5OiBtYXJnaW4tbGVmdDsgYm9yZGVyOiBub25lOyBib3JkZXItcmFkaXVzOiAxMDAlO1wiLFxuICAgICAgICBcIi5zdl9tYWluIC5zdi1ib29sZWFuX19sYWJlbFwiOiBcInZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IGN1cnNvcjogcG9pbnRlcjtcIixcbiAgICAgICAgXCIuc3ZfbWFpbiAuc3YtYm9vbGVhbi0taW5kZXRlcm1pbmF0ZSAgLnN2LWJvb2xlYW5fX3NsaWRlclwiOiBcIm1hcmdpbi1sZWZ0OiBjYWxjKDUwJSAtIDEwcHgpO1wiLFxuICAgICAgICBcIi5zdl9tYWluIC5zdi1ib29sZWFuIGlucHV0OmZvY3VzIH4gLnN2LWJvb2xlYW5fX3N3aXRjaFwiOiBcIm91dGxpbmUtd2lkdGg6IDFweDsgb3V0bGluZS1zdHlsZTogc29saWQ7IG91dGxpbmUtb2Zmc2V0OiAxcHg7XCIsXG4gICAgICAgIFwiLnN2X21haW4gLnN2LWJvb2xlYW4tLWNoZWNrZWQgIC5zdi1ib29sZWFuX19zbGlkZXJcIjogXCJtYXJnaW4tbGVmdDogY2FsYygxMDAlIC0gMjBweCk7XCIsXG4gICAgICAgIFwiW2Rpcj0ncnRsJ10gLnN2LWJvb2xlYW5fX2xhYmVsIFwiOiBcImZsb2F0OiByaWdodDtcIixcbiAgICAgICAgXCJbZGlyPSdydGwnXSAuc3YtYm9vbGVhbi0taW5kZXRlcm1pbmF0ZSAuc3YtYm9vbGVhbl9fc2xpZGVyXCI6IFwibWFyZ2luLXJpZ2h0OiBjYWxjKDUwJSAtIDAuNjI1ZW0pO1wiLFxuICAgICAgICBcIltkaXI9J3J0bCddIC5zdi1ib29sZWFuLS1jaGVja2VkIC5zdi1ib29sZWFuX19zbGlkZXJcIjogXCJtYXJnaW4tcmlnaHQ6IGNhbGMoMTAwJSAtIDEuMjVlbSk7XCIsXG4gICAgICAgIFwiW2Rpcj0ncnRsJ10gLnN2LWJvb2xlYW5fX3N3aXRjaFwiOiBcImZsb2F0OiByaWdodDtcIixcbiAgICAgICAgXCJbc3R5bGUqPSdkaXJlY3Rpb246cnRsJ10gLnN2LWJvb2xlYW5fX2xhYmVsIFwiOiBcImZsb2F0OiByaWdodDtcIixcbiAgICAgICAgXCJbc3R5bGUqPSdkaXJlY3Rpb246cnRsJ10gLnN2LWJvb2xlYW4tLWluZGV0ZXJtaW5hdGUgLnN2LWJvb2xlYW5fX3NsaWRlclwiOiBcIm1hcmdpbi1yaWdodDogY2FsYyg1MCUgLSAwLjYyNWVtKTtcIixcbiAgICAgICAgXCJbc3R5bGUqPSdkaXJlY3Rpb246cnRsJ10gLnN2LWJvb2xlYW4tLWNoZWNrZWQgLnN2LWJvb2xlYW5fX3NsaWRlclwiOiBcIm1hcmdpbi1yaWdodDogY2FsYygxMDAlIC0gMS4yNWVtKTtcIixcbiAgICAgICAgXCJbc3R5bGUqPSdkaXJlY3Rpb246cnRsJ10gLnN2LWJvb2xlYW5fX3N3aXRjaFwiOiBcImZsb2F0OiByaWdodDtcIixcbiAgICAgICAgLy8gRU8gYm9vbGVhblxuICAgICAgICBcIi5zdl9tYWluIC5zdl9xX251bVwiOiBcIlwiLFxuICAgICAgICBcIi5zdl9tYWluIC5zdl9xX251bSArIHNwYW5cIjogXCJcIixcbiAgICAgICAgLy8gU2lnbmF0dXJlUGFkXG4gICAgICAgIFwiLnN2X21haW4gLnNqc19zcF9jb250YWluZXJcIjogXCJwb3NpdGlvbjogcmVsYXRpdmU7IGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1wiLFxuICAgICAgICBcIi5zdl9tYWluIC5zanNfc3BfY29udHJvbHNcIjogXCJwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6IDA7IGJvdHRvbTogMDtcIixcbiAgICAgICAgXCIuc3ZfbWFpbiAuc2pzX3NwX2NvbnRyb2xzID4gYnV0dG9uXCI6IFwidXNlci1zZWxlY3Q6IG5vbmU7XCIsXG4gICAgICAgIFwiLnN2X21haW4gLnNqc19zcF9jb250YWluZXI+ZGl2PmNhbnZhczpmb2N1c1wiOiBcIm91dGxpbmU6IG5vbmU7XCIsXG4gICAgICAgIFwiLnN2X21haW4gLnNqc19zcF9wbGFjZWhvbGRlclwiOiBcImRpc3BsYXk6IGZsZXg7ICBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgcG9zaXRpb246IGFic29sdXRlOyB6LWluZGV4OiAwOyB1c2VyLXNlbGVjdDogbm9uZTsgcG9pbnRlci1ldmVudHM6IG5vbmU7IHdpZHRoOiAxMDAlOyBoZWlnaHQ6IDEwMCU7XCIsXG4gICAgICAgIFwiLnN2X21haW4gLnNqc19zcF9jYW52YXNcIjogXCJwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogMDsgbGVmdDogMDtcIixcbiAgICAgICAgXCIuc3ZfbWFpbiAuc2pzX3NwX19iYWNrZ3JvdW5kLWltYWdlXCI6IFwicG9zaXRpb246IGFic29sdXRlOyB0b3A6IDA7IGxlZnQ6IDA7XCIsXG4gICAgICAgIC8vIGxvZ29cbiAgICAgICAgLy8gXCIuc3ZfbWFpbiAuc3ZfaGVhZGVyXCI6IFwid2hpdGUtc3BhY2U6IG5vd3JhcDtcIixcbiAgICAgICAgXCIuc3ZfbWFpbiAuc3ZfbG9nb1wiOiBcIlwiLFxuICAgICAgICBcIi5zdl9tYWluIC5zdi1sb2dvLS1sZWZ0XCI6IFwiZGlzcGxheTogaW5saW5lLWJsb2NrOyB2ZXJ0aWNhbC1hbGlnbjogdG9wOyBtYXJnaW4tcmlnaHQ6IDJlbTtcIixcbiAgICAgICAgXCIuc3ZfbWFpbiAuc3YtbG9nby0tcmlnaHRcIjogXCJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHZlcnRpY2FsLWFsaWduOiB0b3A7IG1hcmdpbi1sZWZ0OiAyZW07IFwiLFxuICAgICAgICBcIi5zdl9tYWluIC5zdi1sb2dvLS10b3BcIjogXCJkaXNwbGF5OiBibG9jazsgd2lkdGg6IDEwMCU7IHRleHQtYWxpZ246IGNlbnRlcjtcIixcbiAgICAgICAgXCIuc3ZfbWFpbiAuc3YtbG9nby0tYm90dG9tXCI6IFwiZGlzcGxheTogYmxvY2s7IHdpZHRoOiAxMDAlOyB0ZXh0LWFsaWduOiBjZW50ZXI7XCIsXG4gICAgICAgIFwiLnN2X21haW4gLnN2X2hlYWRlcl9fdGV4dFwiOiBcImRpc3BsYXk6IGlubGluZS1ibG9jazsgdmVydGljYWwtYWxpZ246IHRvcDsgbWF4LXdpZHRoOiAxMDAlOyB3aWR0aDogMTAwJVwiLFxuICAgICAgICBcIi5zdl9tYWluIC5zdi1leHBhbmQtYWN0aW9uOmJlZm9yZVwiOiBcImNvbnRlbnQ6IFxcXCJcXFwiOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQyUzRnhtbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSd1dGYtOCclM0YlM0UlM0MhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMS4xLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApIC0tJTNFJTNDc3ZnIHZlcnNpb249JzEuMScgaWQ9J0xheWVyXzEnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycgeG1sbnM6eGxpbms9J2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsnIHg9JzBweCcgeT0nMHB4JyB2aWV3Qm94PScwIDAgMTAgMTAnIHN0eWxlPSdlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDEwIDEwOycgeG1sOnNwYWNlPSdwcmVzZXJ2ZSclM0UlM0NzdHlsZSB0eXBlPSd0ZXh0L2NzcyclM0UgLnN0MCU3QmZpbGw6JTIzNDA0MDQwOyU3RCUwQSUzQy9zdHlsZSUzRSUzQ3BvbHlnb24gY2xhc3M9J3N0MCcgcG9pbnRzPScyLDIgMCw0IDUsOSAxMCw0IDgsMiA1LDUgJy8lM0UlM0Mvc3ZnJTNFJTBBXFxcIik7IGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7IGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciBjZW50ZXI7IGhlaWdodDogMTBweDsgd2lkdGg6IDEycHg7IG1hcmdpbjogYXV0byA4cHg7XCIsXG4gICAgICAgIFwiLnN2X21haW4gLnN2LWV4cGFuZC1hY3Rpb24tLWV4cGFuZGVkOmJlZm9yZVwiOiBcInRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7XCIsXG4gICAgICAgIFwiLnN2X21haW4gLnN2LWFjdGlvbi1iYXJcIjogXCJkaXNwbGF5OiBmbGV4OyBwb3NpdGlvbjogcmVsYXRpdmU7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IG1hcmdpbi1sZWZ0OiBhdXRvOyBwYWRkaW5nOiAwIDAgMCAxNnB4OyBvdmVyZmxvdzogaGlkZGVuOyB3aGl0ZS1zcGFjZTogbm93cmFwO1wiLFxuICAgICAgICBcIi5zdl9tYWluIC5zdi1hY3Rpb24tYmFyLXNlcGFyYXRvclwiOiBcImRpc3BsYXk6IGlubGluZS1ibG9jazsgd2lkdGg6IDFweDsgaGVpZ2h0OiAyNHB4OyB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyBtYXJnaW4tcmlnaHQ6IDE2cHg7IGJhY2tncm91bmQtY29sb3I6ICNkNmQ2ZDY7XCIsXG4gICAgICAgIFwiLnN2X21haW4gLnN2LWFjdGlvbi1iYXItaXRlbVwiOiBcIi13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsgLW1vei1hcHBlYXJhbmNlOiBub25lOyBhcHBlYXJhbmNlOiBub25lOyBkaXNwbGF5OiBmbGV4OyBoZWlnaHQ6IDQwcHg7IHBhZGRpbmc6IDhweDsgYm94LXNpemluZzogYm9yZGVyLWJveDsgbWFyZ2luLXJpZ2h0OiAxNnB4OyBib3JkZXI6IG5vbmU7IGJvcmRlci1yYWRpdXM6IDJweDsgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7IGN1cnNvcjogcG9pbnRlcjsgbGluZS1oZWlnaHQ6IDI0cHg7IGZvbnQtc2l6ZTogMTZweDsgb3ZlcmZsb3cteDogaGlkZGVuOyB3aGl0ZS1zcGFjZTogbm93cmFwOyBtaW4td2lkdGg6IGF1dG87IGZvbnQtd2VpZ2h0OiBub3JtYWxcIixcbiAgICAgICAgXCIuc3ZfbWFpbiAuc3YtYWN0aW9uLWJhci1pdGVtX190aXRsZVwiOiBcInZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IHdoaXRlLXNwYWNlOiBub3dyYXA7XCIsXG4gICAgICAgIFwiLnN2X21haW4gLnN2LWFjdGlvbi1iYXItaXRlbV9fdGl0bGUtLXdpdGgtaWNvblwiOiBcIm1hcmdpbi1sZWZ0OiA4cHg7XCIsXG4gICAgICAgIFwiLnN2X21haW4gLnN2LWFjdGlvbl9fY29udGVudFwiOiBcImRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiByb3c7IGFsaWduLWl0ZW1zOiBjZW50ZXI7XCIsXG4gICAgICAgIFwiLnN2X21haW4gLnN2LWFjdGlvbl9fY29udGVudCA+ICpcIjogXCJmbGV4OiAwIDAgYXV0bztcIixcbiAgICAgICAgXCIuc3ZfbWFpbiAuc3YtYWN0aW9uLS1oaWRkZW5cIjogXCJ3aWR0aDogMHB4OyBoZWlnaHQ6IDBweDsgb3ZlcmZsb3c6IGhpZGRlbjtcIixcbiAgICAgICAgXCIuc3ZfbWFpbiAuc3YtYWN0aW9uLWJhci1pdGVtX19pY29uIHN2Z1wiOiBcImRpc3BsYXk6IGJsb2NrO1wiLFxuICAgICAgICBcIi5zdl9tYWluIC5zdi1hY3Rpb24tYmFyLWl0ZW06YWN0aXZlXCI6IFwib3BhY2l0eTogMC41O1wiLFxuICAgICAgICBcIi5zdl9tYWluIC5zdi1hY3Rpb24tYmFyLWl0ZW06Zm9jdXNcIjogXCJvdXRsaW5lOiBub25lO1wiLFxuICAgICAgICBcIi5zdl9tYWluIC5zdi10aXRsZS1hY3Rpb25zXCI6IFwiZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgd2lkdGg6IDEwMCU7XCIsXG4gICAgICAgIFwiLnN2X21haW4gLnN2LXRpdGxlLWFjdGlvbnNfX3RpdGxlXCI6IFwiZmxleC13cmFwOiB3cmFwOyBtYXgtd2lkdGg6IDkwJTsgbWluLXdpZHRoOiA1MCU7XCIsXG4gICAgICAgIFwiLnN2X21haW4gLnN2LXRpdGxlLWFjdGlvbnNfX2JhclwiOiBcIm1pbi13aWR0aDogNTZweDtcIixcbiAgICAgICAgXCIuc3ZfbWFpbiAuc3YtdGl0bGUtYWN0aW9ucyAuc3YtdGl0bGUtYWN0aW9uc19fdGl0bGVcIjogXCJtaW4td2lkdGg6IHVuc2V0OyBtYXgtd2lkdGg6IHVuc2V0OyBmbGV4LXdyYXA6IHdyYXA7IGZsZXg6IDAgMCBhdXRvO1wiLFxuICAgICAgICBcIi5zdl9tYWluIC5zdi10aXRsZS1hY3Rpb25zIC5zdi1hY3Rpb24tdGl0bGUtYmFyXCI6IFwibWluLXdpZHRoOiB1bnNldDsgZmxleDogMSAxIGF1dG87IGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XCIsXG4gICAgICAgIFwiLnN2X21haW4gLnN2X21hdHJpeF9jZWxsX2FjdGlvbnMgLnN2LWFjdGlvbi1iYXJcIjogXCJtYXJnaW4tbGVmdDogMDsgcGFkZGluZy1sZWZ0OiAwO1wiLFxuICAgICAgICBcIi5zdl9tYWluIC5zdl9wX3dyYXBwZXJfaW5fcm93XCI6IFwiZGlzcGxheTogZmxleDsgZmxleC1kaXJlY3Rpb246IHJvdzsgYWxpZ24taXRlbXM6IGNlbnRlcjtcIixcbiAgICAgICAgXCIuc3ZfbWFpbiAgLnN2X3BfcmVtb3ZlX2J0bl9yaWdodFwiOiBcIm1hcmdpbi1sZWZ0OiAxZW07XCIsXG4gICAgICAgIC8vYnV0dG9uLWdyb3VwXG4gICAgICAgIFwiLnN2X21haW4gLnN2LWJ1dHRvbi1ncm91cFwiOiBcImRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGZsZXgtZGlyZWN0aW9uOiByb3c7IGZvbnQtc2l6ZTogMTZweDsgaGVpZ2h0OiA0OHB4OyBvdmVyZmxvdzogYXV0bztcIixcbiAgICAgICAgXCIuc3ZfbWFpbiAuc3YtYnV0dG9uLWdyb3VwX19pdGVtXCI6IFwiZGlzcGxheTogZmxleDsgYm94LXNpemluZzogYm9yZGVyLWJveDsgZmxleC1kaXJlY3Rpb246IHJvdzsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IHdpZHRoOiAxMDAlOyBwYWRkaW5nOiAxMXB4IDE2cHg7IGxpbmUtaGVpZ2h0OiAyNHB4OyBib3JkZXItd2lkdGg6IDFweDsgYm9yZGVyLXN0eWxlOiBzb2xpZDsgb3V0bGluZTogbm9uZTsgZm9udC1zaXplOiAxNnB4OyBmb250LXdlaWdodDogNDAwOyBjdXJzb3I6IHBvaW50ZXI7IG92ZXJmbG93OiBoaWRkZW47XCIsXG4gICAgICAgIFwiLnN2X21haW4gLnN2LWJ1dHRvbi1ncm91cF9faXRlbTpub3QoOmZpcnN0LW9mLXR5cGUpXCI6IFwibWFyZ2luLWxlZnQ6IC0xcHg7XCIsXG4gICAgICAgIFwiLnN2X21haW4gLnN2LWJ1dHRvbi1ncm91cF9faXRlbS1pY29uXCI6IFwiZGlzcGxheTogYmxvY2s7IGhlaWdodDogMjRweDtcIixcbiAgICAgICAgXCIuc3ZfbWFpbiAuc3YtYnV0dG9uLWdyb3VwX19pdGVtLS1zZWxlY3RlZFwiOiBcImZvbnQtd2VpZ2h0OiA2MDA7XCIsXG4gICAgICAgIFwiLnN2X21haW4gLnN2LWJ1dHRvbi1ncm91cF9faXRlbS1kZWNvcmF0b3JcIjogXCJkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBtYXgtd2lkdGg6IDEwMCU7XCIsXG4gICAgICAgIFwiLnN2X21haW4gIC5zdi1idXR0b24tZ3JvdXBfX2l0ZW0taWNvbiArIC5zdi1idXR0b24tZ3JvdXBfX2l0ZW0tY2FwdGlvblwiOiBcIm1hcmdpbi1sZWZ0OiA4cHhcIixcbiAgICAgICAgXCIuc3ZfbWFpbiAuc3YtYnV0dG9uLWdyb3VwX19pdGVtLWNhcHRpb25cIjogXCJkaXNwbGF5OiBibG9jazsgb3ZlcmZsb3c6IGhpZGRlbjsgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7IHdoaXRlLXNwYWNlOiBub3dyYXA7XCIsXG4gICAgICAgIFwiLnN2X21haW4gLnN2LWJ1dHRvbi1ncm91cF9faXRlbS0tZGlzYWJsZWRcIjogXCJjb2xvcjogY3Vyc29yOiBkZWZhdWx0O1wiLFxuICAgICAgICAvL2VvIGJ1dHRvbi1ncm91cFxuICAgICAgICAvL3BvcHVwXG4gICAgICAgIFwic3YtcG9wdXBcIjogXCJkaXNwbGF5OiBibG9jazsgcG9zaXRpb246IGFic29sdXRlOyB6LWluZGV4OiAtMTtcIixcbiAgICAgICAgXCIuc3YtcG9wdXBcIjogXCJwb3NpdGlvbjogZml4ZWQ7IGxlZnQ6IDA7IHRvcDogMDsgd2lkdGg6IDEwMHZ3OyBoZWlnaHQ6IDEwMHZoOyBvdXRsaW5lOiBub25lOyB6LWluZGV4OiAxNTAwO1wiLFxuICAgICAgICBcIi5zdi1wb3B1cC5zdi1kcm9wZG93bi1wb3B1cFwiOiBcImhlaWdodDogMDtcIixcbiAgICAgICAgXCIuc3YtcG9wdXBfX2NvbnRhaW5lclwiOiBcImJveC1zaGFkb3c6IDBweCAycHggNnB4IHJnYmEoMCwgMCwgMCwgMC4xKTsgcG9zaXRpb246IGFic29sdXRlOyBwYWRkaW5nOiAwO1wiLFxuICAgICAgICBcIi5zdi1wb3B1cF9fYm9keS1jb250ZW50XCI6IFwiYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmFja2dyb3VuZCwgI2ZmZik7IGJvcmRlci1yYWRpdXM6IGNhbGMoMC41ICogdmFyKC0tYmFzZS11bml0LCA4cHgpKTsgd2lkdGg6IDEwMCU7IGhlaWdodDogMTAwJTsgYm94LXNpemluZzogYm9yZGVyLWJveDsgZGlzcGxheTogZmxleDsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgbWF4LWhlaWdodDogOTB2aDsgbWF4LXdpZHRoOiAxMDB2dztcIixcbiAgICAgICAgXCIuc3YtcG9wdXAtLW1vZGFsIC5zdi1saXN0X19maWx0ZXJcIjogXCJwYWRkaW5nLXRvcDogOHB4O1wiLFxuICAgICAgICBcIi5zdi1wb3B1cC0tbW9kYWwgLnN2LWxpc3RfX2ZpbHRlci1pY29uXCI6IFwidG9wOiAyMHB4O1wiLFxuICAgICAgICBcIi5zdi1wb3B1cC0tb3ZlcmxheSAuc3YtbGlzdF9fZmlsdGVyXCI6IFwicGFkZGluZy10b3A6IDhweDtcIixcbiAgICAgICAgXCIuc3YtcG9wdXAtLW92ZXJsYXkgLnN2LWxpc3RfX2ZpbHRlci1pY29uXCI6IFwidG9wOiAyMHB4O1wiLFxuICAgICAgICBcIi5zdi1wb3B1cC0tbW9kYWxcIjogXCJkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcIixcbiAgICAgICAgXCIuc3YtcG9wdXAtLW1vZGFsIC5zdi1wb3B1cF9fY29udGFpbmVyXCI6IFwicG9zaXRpb246IHN0YXRpYztcIixcbiAgICAgICAgXCIuc3YtcG9wdXAtLW1vZGFsIC5zdi1wb3B1cF9fYm9keS1jb250ZW50XCI6IFwicGFkZGluZzogY2FsYyg0ICogdmFyKC0tYmFzZS11bml0LCA4cHgpKTtcIixcbiAgICAgICAgXCIuc3YtcG9wdXAtLW92ZXJsYXlcIjogXCJ3aWR0aDogMTAwJTtcIixcbiAgICAgICAgXCIuc3YtcG9wdXAtLW92ZXJsYXkgLnN2LXBvcHVwX19jb250YWluZXJcIjogXCJiYWNrZ3JvdW5kOiByZ2JhKDE0NCwgMTQ0LCAxNDQsIDAuNSk7IG1heC13aWR0aDogMTAwdnc7IG1heC1oZWlnaHQ6IGNhbGMoMTAwdmggLSAxICogdmFyKC0tYmFzZS11bml0LCA4cHgpKTsgaGVpZ2h0OiBjYWxjKDEwMHZoIC0gMSAqIHZhcigtLWJhc2UtdW5pdCwgOHB4KSk7IHdpZHRoOiAxMDAlOyBwYWRkaW5nLXRvcDogY2FsYygyICogdmFyKC0tYmFzZS11bml0LCA4cHgpKTsgYm9yZGVyOiB1bnNldDtcIixcbiAgICAgICAgXCIuc3YtcG9wdXBfX3NoYWRvd1wiOiBcIndpZHRoOiAxMDAlOyBoZWlnaHQ6IDEwMCU7IGJvcmRlci1yYWRpdXM6IGNhbGMoMSAqIHZhcigtLWJhc2UtdW5pdCwgOHB4KSk7XCIsXG4gICAgICAgIFwiLnN2LXBvcHVwLS1vdmVybGF5IC5zdi1wb3B1cF9fYm9keS1jb250ZW50XCI6IFwiYm9yZGVyLXJhZGl1czogY2FsYygyICogdmFyKC0tYmFzZS11bml0LCA4cHgpKSBjYWxjKDIgKiB2YXIoLS1iYXNlLXVuaXQsIDhweCkpIDBweCAwcHg7IGJhY2tncm91bmQ6IHZhcigtLWJhY2tncm91bmQsICNmZmYpOyBib3gtc2hhZG93OiAwcHggY2FsYygxICogdmFyKC0tYmFzZS11bml0LCA4cHgpKSBjYWxjKDIgKiB2YXIoLS1iYXNlLXVuaXQsIDhweCkpIHJnYmEoMCwgMCwgMCwgMC4xKTsgcGFkZGluZzogY2FsYygzICogdmFyKC0tYmFzZS11bml0LCA4cHgpKSBjYWxjKDIgKiB2YXIoLS1iYXNlLXVuaXQsIDhweCkpIGNhbGMoMiAqIHZhcigtLWJhc2UtdW5pdCwgOHB4KSk7IGhlaWdodDogY2FsYygxMDAlIC0gY2FsYygxICogdmFyKC0tYmFzZS11bml0LCA4cHgpKSk7IG1heC1oZWlnaHQ6IDEwMHZoOyBtYXgtd2lkdGg6IDEwMHZ3O1wiLFxuICAgICAgICBcIi5zdi1wb3B1cC0tb3ZlcmxheSAuc3YtcG9wdXBfX3Njcm9sbGluZy1jb250ZW50XCI6IFwiaGVpZ2h0OiBjYWxjKDEwMCUgLSAoMTAgKiB2YXIoLS1iYXNlLXVuaXQsIDhweCkpKTtcIixcbiAgICAgICAgXCIuc3YtcG9wdXAtLW92ZXJsYXkgLnN2LXBvcHVwX19ib2R5LWZvb3RlclwiOiBcIm1hcmdpbi10b3A6IGNhbGMoMiAqIHZhcigtLWJhc2UtdW5pdCwgOHB4KSk7XCIsXG4gICAgICAgIFwiLnN2LXBvcHVwLS1vdmVybGF5IC5zdi1wb3B1cF9fYm9keS1mb290ZXIgLnN2LWFjdGlvblwiOiBcIndpZHRoOiAxMDAlO1wiLFxuICAgICAgICBcIi5zdi1wb3B1cC0tb3ZlcmxheSAuc3YtcG9wdXBfX2JvZHktZm9vdGVyIC5zdi1hY3Rpb24tYmFyXCI6IFwid2lkdGg6IDEwMCU7XCIsXG4gICAgICAgIFwiLnN2LXBvcHVwLS1vdmVybGF5IC5zdi1wb3B1cF9fYm9keS1mb290ZXItaXRlbVwiOiBcIndpZHRoOiAxMDAlO1wiLFxuICAgICAgICBcIi5zdi1wb3B1cC0tb3ZlcmxheSAuc3YtcG9wdXBfX2J1dHRvblwiOiBcImJhY2tncm91bmQtY29sb3I6IHZhcigtLXByaW1hcnksICMxOWIzOTQpOyBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1wcmltYXJ5LCAjMTliMzk0KTsgY29sb3I6IHZhcigtLXByaW1hcnktZm9yZWdyb3VuZCwgI2ZmZik7XCIsXG4gICAgICAgIFwiLnN2LXBvcHVwX19zY3JvbGxpbmctY29udGVudFwiOiBcImhlaWdodDogMTAwJTsgb3ZlcmZsb3c6IGF1dG87IGRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XCIsXG4gICAgICAgIFwiLnN2LXBvcHVwX19zY3JvbGxpbmctY29udGVudDo6LXdlYmtpdC1zY3JvbGxiYXJcIjogXCJoZWlnaHQ6IDZweDsgd2lkdGg6IDZweDsgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmFja2dyb3VuZC1kaW0sICNmM2YzZjMpO1wiLFxuICAgICAgICBcIi5zdi1wb3B1cF9fc2Nyb2xsaW5nLWNvbnRlbnQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iXCI6IFwiYmFja2dyb3VuZDogdmFyKC0tcHJpbWFyeS1saWdodCwgcmdiYSgyNSwgMTc5LCAxNDgsIDAuMSkpO1wiLFxuICAgICAgICBcIi5zdi1wb3B1cF9fY29udGVudFwiOiBcIm1pbi13aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlOyBkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBtaW4taGVpZ2h0OiAwO1wiLFxuICAgICAgICBcIi5zdi1wb3B1cC0tc2hvdy1wb2ludGVyLnN2LXBvcHVwLS10b3AgLnN2LXBvcHVwX19wb2ludGVyXCI6IFwidHJhbnNmb3JtOiB0cmFuc2xhdGUoY2FsYygtMSAqIHZhcigtLWJhc2UtdW5pdCwgOHB4KSkpIHJvdGF0ZSgxODBkZWcpO1wiLFxuICAgICAgICBcIi5zdi1wb3B1cC0tc2hvdy1wb2ludGVyLnN2LXBvcHVwLS1ib3R0b20gLnN2LXBvcHVwX19wb2ludGVyXCI6IFwidHJhbnNmb3JtOiB0cmFuc2xhdGUoY2FsYygtMSAqIHZhcigtLWJhc2UtdW5pdCwgOHB4KSksIGNhbGMoLTEgKiB2YXIoLS1iYXNlLXVuaXQsIDhweCkpKTtcIixcbiAgICAgICAgXCIuc3YtcG9wdXAtLXNob3ctcG9pbnRlci5zdi1wb3B1cC0tcmlnaHRcIjogXCJ0cmFuc2Zvcm06IHRyYW5zbGF0ZShjYWxjKDEgKiB2YXIoLS1iYXNlLXVuaXQsIDhweCkpKTtcIixcbiAgICAgICAgXCIuc3YtcG9wdXAtLXNob3ctcG9pbnRlci5zdi1wb3B1cC0tcmlnaHQgLnN2LXBvcHVwX19wb2ludGVyXCI6IFwidHJhbnNmb3JtOiB0cmFuc2xhdGUoLTEycHgsIC00cHgpIHJvdGF0ZSgtOTBkZWcpO1wiLFxuICAgICAgICBcIi5zdi1wb3B1cC0tc2hvdy1wb2ludGVyLnN2LXBvcHVwLS1sZWZ0XCI6IFwidHJhbnNmb3JtOiB0cmFuc2xhdGUoY2FsYygtMSAqIHZhcigtLWJhc2UtdW5pdCwgOHB4KSkpO1wiLFxuICAgICAgICBcIi5zdi1wb3B1cC0tc2hvdy1wb2ludGVyLnN2LXBvcHVwLS1sZWZ0IC5zdi1wb3B1cF9fcG9pbnRlclwiOiBcInRyYW5zZm9ybTogdHJhbnNsYXRlKC00cHgsIC00cHgpIHJvdGF0ZSg5MGRlZyk7XCIsXG4gICAgICAgIFwiLnN2LXBvcHVwX19wb2ludGVyXCI6IFwiZGlzcGxheTogYmxvY2s7IHBvc2l0aW9uOiBhYnNvbHV0ZTtcIixcbiAgICAgICAgXCIuc3YtcG9wdXBfX3BvaW50ZXI6YWZ0ZXJcIjogXCJjb250ZW50OiAnICc7IGRpc3BsYXk6IGJsb2NrOyB3aWR0aDogMDsgaGVpZ2h0OiAwOyBib3JkZXItbGVmdDogY2FsYygxICogdmFyKC0tYmFzZS11bml0LCA4cHgpKSBzb2xpZCB0cmFuc3BhcmVudDsgYm9yZGVyLXJpZ2h0OiBjYWxjKDEgKiB2YXIoLS1iYXNlLXVuaXQsIDhweCkpIHNvbGlkIHRyYW5zcGFyZW50OyBib3JkZXItYm90dG9tOiBjYWxjKDEgKiB2YXIoLS1iYXNlLXVuaXQsIDhweCkpIHNvbGlkIHZhcigtLWJhY2tncm91bmQsICNmZmYpOyBhbGlnbi1zZWxmOiBjZW50ZXI7XCIsXG4gICAgICAgIFwiLnN2LXBvcHVwX19ib2R5LWhlYWRlclwiOiBcImZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWZhbWlseSwgJGZvbnQtZmFtaWx5KTsgZm9udC1zaXplOiBjYWxjKDMgKiB2YXIoLS1iYXNlLXVuaXQsIDhweCkpOyBsaW5lLWhlaWdodDogY2FsYyg0ICogdmFyKC0tYmFzZS11bml0LCA4cHgpKTsgZm9udC1zdHlsZTogbm9ybWFsOyBmb250LXdlaWdodDogNzAwOyBtYXJnaW4tYm90dG9tOiBjYWxjKDIgKiB2YXIoLS1iYXNlLXVuaXQsIDhweCkpOyBjb2xvcjogdmFyKC0tZm9yZWdyb3VuZCwgIzE2MTYxNik7XCIsXG4gICAgICAgIFwiLnN2LXBvcHVwX19ib2R5LWZvb3RlclwiOiBcImRpc3BsYXk6IGZsZXg7IG1hcmdpbi10b3A6IGNhbGMoNCAqIHZhcigtLWJhc2UtdW5pdCwgOHB4KSk7XCIsXG4gICAgICAgIFwiLnN2LXBvcHVwX19ib2R5LWZvb3RlciAuc3YtYWN0aW9uLWJhclwiOiBcImdhcDogY2FsYygxLjUgKiB2YXIoLS1iYXNlLXVuaXQsIDhweCkpO1wiLFxuICAgICAgICBcIi5zdi1wb3B1cF9fYnV0dG9uXCI6IFwicGFkZGluZzogY2FsYygyICogdmFyKC0tYmFzZS11bml0LCA4cHgpKSBjYWxjKDYgKiB2YXIoLS1iYXNlLXVuaXQsIDhweCkpOyBiYWNrZ3JvdW5kOiB2YXIoLS1iYWNrZ3JvdW5kLCAjZmZmKTsgYm94LXNoYWRvdzogMHB4IDFweCAycHggcmdiYSgwLCAwLCAwLCAwLjE1KTsgYm9yZGVyLXJhZGl1czogNHB4OyBtYXJnaW46IDJweDsgY3Vyc29yOiBwb2ludGVyOyBmb250LWZhbWlseTogdmFyKC0tZm9udC1mYW1pbHksICRmb250LWZhbWlseSk7IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC13ZWlnaHQ6IDYwMDsgZm9udC1zaXplOiBjYWxjKDIgKiB2YXIoLS1iYXNlLXVuaXQsIDhweCkpOyBsaW5lLWhlaWdodDogY2FsYygzICogdmFyKC0tYmFzZS11bml0LCA4cHgpKTsgdGV4dC1hbGlnbjogY2VudGVyOyBjb2xvcjogdmFyKC0tcHJpbWFyeSwgIzE5YjM5NCk7IGJvcmRlcjogbm9uZTsgb3V0bGluZTogbm9uZTtcIixcbiAgICAgICAgXCIuc3YtcG9wdXBfX2J1dHRvbjpob3ZlclwiOiBcImJveC1zaGFkb3c6IDAgMCAwIDJweCB2YXIoLS1wcmltYXJ5LCAjMTliMzk0KTtcIixcbiAgICAgICAgXCIuc3YtcG9wdXBfX2J1dHRvbjpkaXNhYmxlZFwiOiBcImNvbG9yOiB2YXIoLS1mb3JlZ3JvdW5kLWRpc2FibGVkLCByZ2JhKCMxNjE2MTYsIDAuMTYpKTsgY3Vyc29yOiBkZWZhdWx0O1wiLFxuICAgICAgICBcIi5zdi1wb3B1cF9fYnV0dG9uOmRpc2FibGVkOmhvdmVyXCI6IFwiYm94LXNoYWRvdzogMHB4IDFweCAycHggcmdiYSgwLCAwLCAwLCAwLjE1KTtcIixcbiAgICAgICAgXCIuc3YtcG9wdXBfX2J1dHRvbi5zdi1wb3B1cF9fYnV0dG9uLS1hcHBseVwiOiBcImJhY2tncm91bmQtY29sb3I6IHZhcigtLXByaW1hcnksICMxOWIzOTQpOyBjb2xvcjogdmFyKC0tcHJpbWFyeS1mb3JlZ3JvdW5kLCAjZmZmKTtcIixcbiAgICAgICAgXCIuc3YtcG9wdXBfX2J1dHRvbi5zdi1wb3B1cF9fYnV0dG9uLS1hcHBseTpkaXNhYmxlZFwiOiBcImJhY2tncm91bmQtY29sb3I6IHZhcigtLWJhY2tncm91bmQtZGltLCAjZjNmM2YzKTtcIixcbiAgICAgICAgLy9lbyBwb3B1cFxuICAgICAgICAvL2xpc3RcbiAgICAgICAgXCIuc3YtbGlzdFwiOiBcInBhZGRpbmc6IDA7IG1hcmdpbjogMDsgYmFja2dyb3VuZDogdmFyKC0tYmFja2dyb3VuZCwgI2ZmZik7IGxpc3Qtc3R5bGUtdHlwZTogbm9uZTsgb3ZlcmZsb3cteTogYXV0bztcIixcbiAgICAgICAgXCIuc3YtbGlzdF9faXRlbS0td2l0aC1pY29uXCI6IFwicGFkZGluZy10b3A6IDEycHg7IHBhZGRpbmctYm90dG9tOiAxMnB4O1wiLFxuICAgICAgICBcIi5zdi1saXN0X19pdGVtXCI6IFwid2lkdGg6IDEwMCU7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IGN1cnNvcjogcG9pbnRlcjsgb3ZlcmZsb3c6IGhpZGRlbjsgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7IHdoaXRlLXNwYWNlOiBub3dyYXA7XCIsXG4gICAgICAgIFwiLnN2LWxpc3RfX2l0ZW0tYm9keVwiOiBcIndpZHRoOiAxMDAlOyBib3gtc2l6aW5nOiBib3JkZXItYm94OyBmb250LXNpemU6IGNhbGMoMiAqIHZhcigtLWJhc2UtdW5pdCwgOHB4KSk7IGxpbmUtaGVpZ2h0OiBjYWxjKDMgKiB2YXIoLS1iYXNlLXVuaXQsIDhweCkpOyBwYWRkaW5nLXRvcDogY2FsYygxICogdmFyKC0tYmFzZS11bml0LCA4cHgpKTsgcGFkZGluZy1ib3R0b206IGNhbGMoMSAqIHZhcigtLWJhc2UtdW5pdCwgOHB4KSk7IHBhZGRpbmctaW5saW5lLWVuZDogY2FsYyg4ICogdmFyKC0tYmFzZS11bml0LCA4cHgpKTsgcGFkZGluZy1pbmxpbmUtc3RhcnQ6IGNhbGMoMiAqIHZhcigtLWJhc2UtdW5pdCwgOHB4KSk7IGN1cnNvcjogcG9pbnRlcjsgb3ZlcmZsb3c6IGhpZGRlbjsgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7IHdoaXRlLXNwYWNlOiBub3dyYXA7IGRpc3BsYXk6IGZsZXg7IGdhcDogY2FsYygyICogOHB4KTtcIixcbiAgICAgICAgXCIuc3YtbGlzdF9faXRlbS1pY29uXCI6IFwiZmxvYXQ6IGxlZnQ7IHdpZHRoOiBjYWxjKDMgKiA4cHgpOyBoZWlnaHQ6IGNhbGMoMyAqIDhweCk7XCIsXG4gICAgICAgIFwiLnN2LWxpc3RfX2l0ZW0taWNvbiBzdmdcIjogXCJkaXNwbGF5OiBibG9jaztcIixcbiAgICAgICAgXCIuc3YtbGlzdF9faXRlbS1pY29uIHVzZVwiOiBcImZpbGw6ICM5MDkwOTA7XCIsXG4gICAgICAgIFwiLnN2LWxpc3RfX2l0ZW06aG92ZXIgLnN2LWxpc3RfX2l0ZW0tYm9keVwiOiBcImJhY2tncm91bmQtY29sb3I6IHZhcigtLWJhY2tncm91bmQtZGltLCAjZjNmM2YzKTtcIixcbiAgICAgICAgXCIuc3YtbGlzdF9faXRlbS5zdi1saXN0X19pdGVtLS1mb2N1c2VkIC5zdi1saXN0X19pdGVtLWJvZHlcIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1iYWNrZ3JvdW5kLWRpbSwgI2YzZjNmMyk7XCIsXG4gICAgICAgIFwiLnN2LWxpc3RfX2xvYWRpbmctaW5kaWNhdG9yXCI6IFwicG9pbnRlci1ldmVudHM6IG5vbmU7XCIsXG4gICAgICAgIFwiLnN2LWxpc3RfX2xvYWRpbmctaW5kaWNhdG9yIC5zdi1saXN0X19pdGVtLWJvZHlcIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudFwiLFxuICAgICAgICAvLyBcIi5zdi1saXN0X19pdGVtLS1zZWxlY3RlZFwiOiBcImJhY2tncm91bmQtY29sb3I6IHZhcigtLXByaW1hcnksICMxOWIzOTQpOyBjb2xvcjogdmFyKC0tcHJpbWFyeS1mb3JlZ3JvdW5kLCAjZmZmKTtcIixcbiAgICAgICAgXCIuc3YtbGlzdF9faXRlbS0tc2VsZWN0ZWQgLnN2LWxpc3RfX2l0ZW0taWNvbiB1c2VcIjogXCJmaWxsOiB2YXIoLS1wcmltYXJ5LWZvcmVncm91bmQsICNmZmYpO1wiLFxuICAgICAgICBcIi5zdi1saXN0X19pdGVtLnN2LWxpc3RfX2l0ZW0tLWRpc2FibGVkXCI6IFwiY29sb3I6IHZhcigtLWZvcmVncm91bmQtbGlnaHQsICM5MDkwOTApOyBjdXJzb3I6IGRlZmF1bHQ7XCIsXG4gICAgICAgIFwiLnN2LWxpc3RfX2l0ZW0gc3BhblwiOiBcIndoaXRlLXNwYWNlOiBub3dyYXA7XCIsXG4gICAgICAgIFwiLnN2LWxpc3RfX2NvbnRhaW5lclwiOiBcInBvc2l0aW9uOiByZWxhdGl2ZTsgZGlzcGxheTogZmxleDsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgaGVpZ2h0OiAxMDAlOyBkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBtaW4taGVpZ2h0OiAwO1wiLFxuICAgICAgICBcIi5zdi1saXN0X19maWx0ZXJcIjogXCJib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjE2KTsgYmFja2dyb3VuZDogdmFyKC0tYmFja2dyb3VuZCwgI2ZmZik7IHBhZGRpbmctYm90dG9tOiBjYWxjU2l6ZSgxKTtcIixcbiAgICAgICAgXCIuc3YtbGlzdF9faW5wdXRcIjogXCItd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7IC1tb3otYXBwZWFyYW5jZTogbm9uZTsgYXBwZWFyYW5jZTogbm9uZTsgZGlzcGxheTogYmxvY2s7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IHdpZHRoOiAxMDAlOyBsaW5lLWhlaWdodDogMjRweDsgcGFkZGluZy1sZWZ0OiA1NnB4OyBwYWRkaW5nLXJpZ2h0OiAyNHB4OyBwYWRkaW5nLXRvcDogMTJweDsgcGFkZGluZy1ib3R0b206IDEycHg7IG91dGxpbmU6IG5vbmU7IGZvbnQtc2l6ZTogMWVtOyBib3JkZXI6IG5vbmVcIixcbiAgICAgICAgXCIuc3YtbGlzdF9fZmlsdGVyLWljb25cIjogXCJkaXNwbGF5OiBibG9jazsgcG9zaXRpb246IGFic29sdXRlOyB0b3A6IDEycHg7IGxlZnQ6IDE2cHg7XCIsXG4gICAgICAgIFwiLnN2LWxpc3RfX2ZpbHRlci1pY29uIC5zdi1zdmctaWNvblwiOiBcIndpZHRoOiAyNHB4OyBoZWlnaHQ6IDI0cHg7XCIsXG4gICAgICAgIFwiLnN2LWxpc3RfX2VtcHR5LWNvbnRhaW5lclwiOiBcIndpZHRoOiAxMDAlOyBib3gtc2l6aW5nOiBib3JkZXItYm94OyBwYWRkaW5nOiAxMnB4IDY0cHg7IG92ZXJmbG93OiBoaWRkZW47IHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOyB3aGl0ZS1zcGFjZTogbm93cmFwO1wiLFxuICAgICAgICBcIi5zdi1saXN0X19lbXB0eS10ZXh0XCI6IFwibGluZS1oZWlnaHQ6IDI0cHg7IGZvbnQtc2l6ZTogMTZweDsgZm9udC13ZWlnaHQ6IDQwMDsgdGV4dC1hbGlnbjogY2VudGVyOyBjb2xvcjogdmFyKC0tZm9yZWdyb3VuZC1saWdodCwgIzkwOTA5MCk7XCIsXG4gICAgICAgIC8vZW8gbGlzdFxuICAgICAgICBcIi5zdi1za2VsZXRvbi1lbGVtZW50XCI6IFwibWluLWhlaWdodDogNTBweDtcIixcbiAgICB9O1xufVxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3BvcHVwLWRyb3Bkb3duLXZpZXctbW9kZWwudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9wb3B1cC1kcm9wZG93bi12aWV3LW1vZGVsLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogUG9wdXBEcm9wZG93blZpZXdNb2RlbCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJQb3B1cERyb3Bkb3duVmlld01vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUG9wdXBEcm9wZG93blZpZXdNb2RlbDsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vanNvbm9iamVjdCAqLyBcIi4vc3JjL2pzb25vYmplY3QudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3V0aWxzX3BvcHVwX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3V0aWxzL3BvcHVwICovIFwiLi9zcmMvdXRpbHMvcG9wdXAudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3BvcHVwX3ZpZXdfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcG9wdXAtdmlldy1tb2RlbCAqLyBcIi4vc3JjL3BvcHVwLXZpZXctbW9kZWwudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3V0aWxzX2RldmljZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vdXRpbHMvZGV2aWNlcyAqLyBcIi4vc3JjL3V0aWxzL2RldmljZXMudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NldHRpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3NldHRpbmdzICovIFwiLi9zcmMvc2V0dGluZ3MudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3N1cnZleV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9zdXJ2ZXkgKi8gXCIuL3NyYy9zdXJ2ZXkudHNcIik7XG52YXIgX19leHRlbmRzID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbnZhciBfX2RlY29yYXRlID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn07XG5cblxuXG5cblxuXG52YXIgUG9wdXBEcm9wZG93blZpZXdNb2RlbCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoUG9wdXBEcm9wZG93blZpZXdNb2RlbCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBQb3B1cERyb3Bkb3duVmlld01vZGVsKG1vZGVsLCB0YXJnZXRFbGVtZW50KSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG1vZGVsKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy50YXJnZXRFbGVtZW50ID0gdGFyZ2V0RWxlbWVudDtcbiAgICAgICAgX3RoaXMuc2Nyb2xsRXZlbnRDYWxsQmFjayA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgaWYgKF90aGlzLmlzT3ZlcmxheSAmJiBfdXRpbHNfZGV2aWNlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiSXNUb3VjaFwiXSkge1xuICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX3RoaXMuaGlkZVBvcHVwKCk7XG4gICAgICAgIH07XG4gICAgICAgIF90aGlzLnJlc2l6ZUV2ZW50Q2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgdmlzdWFsVmlld3BvcnQgPSB3aW5kb3cudmlzdWFsVmlld3BvcnQ7XG4gICAgICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXCItLXN2LXBvcHVwLW92ZXJsYXktaGVpZ2h0XCIsIHZpc3VhbFZpZXdwb3J0LmhlaWdodCAqIHZpc3VhbFZpZXdwb3J0LnNjYWxlICsgXCJweFwiKTtcbiAgICAgICAgfTtcbiAgICAgICAgX3RoaXMucmVzaXplV2luZG93Q2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoIV90aGlzLmlzT3ZlcmxheSkge1xuICAgICAgICAgICAgICAgIF90aGlzLnVwZGF0ZVBvc2l0aW9uKHRydWUsIF9zdXJ2ZXlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1tcIlN1cnZleU1vZGVsXCJdLnBsYXRmb3JtID09PSBcInZ1ZVwiIHx8IF9zdXJ2ZXlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1tcIlN1cnZleU1vZGVsXCJdLnBsYXRmb3JtID09PSBcInZ1ZTNcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIF90aGlzLmNsaWVudFkgPSAwO1xuICAgICAgICBfdGhpcy5pc1RhYmxldCA9IGZhbHNlO1xuICAgICAgICBfdGhpcy50b3VjaFN0YXJ0RXZlbnRDYWxsYmFjayA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgX3RoaXMuY2xpZW50WSA9IGV2ZW50LnRvdWNoZXNbMF0uY2xpZW50WTtcbiAgICAgICAgfTtcbiAgICAgICAgX3RoaXMudG91Y2hNb3ZlRXZlbnRDYWxsYmFjayA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgX3RoaXMucHJldmVudFNjcm9sbE91c2lkZShldmVudCwgX3RoaXMuY2xpZW50WSAtIGV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFkpO1xuICAgICAgICB9O1xuICAgICAgICBfdGhpcy5tb2RlbC5vblJlY2FsY3VsYXRlUG9zaXRpb24uYWRkKF90aGlzLnJlY2FsY3VsYXRlUG9zaXRpb25IYW5kbGVyKTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBQb3B1cERyb3Bkb3duVmlld01vZGVsLnByb3RvdHlwZS5jYWxjdWxhdGVJc1RhYmxldCA9IGZ1bmN0aW9uICh3aW5kb3dXaWR0aCwgd2luZG93SGVpZ2h0KSB7XG4gICAgICAgIHZhciB3aWR0aCA9IE1hdGgubWluKHdpbmRvd1dpZHRoLCB3aW5kb3dIZWlnaHQpO1xuICAgICAgICB0aGlzLmlzVGFibGV0ID0gd2lkdGggPj0gUG9wdXBEcm9wZG93blZpZXdNb2RlbC50YWJsZXRTaXplQnJlYWtwb2ludDtcbiAgICB9O1xuICAgIFBvcHVwRHJvcGRvd25WaWV3TW9kZWwucHJvdG90eXBlLl91cGRhdGVQb3NpdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgICAgIGlmICghdGhpcy50YXJnZXRFbGVtZW50KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIgdGFyZ2V0RWxlbWVudFJlY3QgPSB0aGlzLnRhcmdldEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIHZhciBwb3B1cENvbnRhaW5lciA9IChfYSA9IHRoaXMuY29udGFpbmVyKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EucXVlcnlTZWxlY3Rvcih0aGlzLmNvbnRhaW5lclNlbGVjdG9yKTtcbiAgICAgICAgaWYgKCFwb3B1cENvbnRhaW5lcilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIGZpeGVkUG9wdXBDb250YWluZXIgPSAoX2IgPSB0aGlzLmNvbnRhaW5lcikgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLnF1ZXJ5U2VsZWN0b3IodGhpcy5maXhlZFBvcHVwQ29udGFpbmVyKTtcbiAgICAgICAgdmFyIHNjcm9sbENvbnRlbnQgPSBwb3B1cENvbnRhaW5lci5xdWVyeVNlbGVjdG9yKHRoaXMuc2Nyb2xsaW5nQ29udGVudFNlbGVjdG9yKTtcbiAgICAgICAgdmFyIHBvcHVwQ29tcHV0ZWRTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHBvcHVwQ29udGFpbmVyKTtcbiAgICAgICAgdmFyIG1hcmdpbkxlZnQgPSAocGFyc2VGbG9hdChwb3B1cENvbXB1dGVkU3R5bGUubWFyZ2luTGVmdCkgfHwgMCk7XG4gICAgICAgIHZhciBtYXJnaW5SaWdodCA9IChwYXJzZUZsb2F0KHBvcHVwQ29tcHV0ZWRTdHlsZS5tYXJnaW5SaWdodCkgfHwgMCk7XG4gICAgICAgIHZhciBoZWlnaHQgPSBwb3B1cENvbnRhaW5lci5vZmZzZXRIZWlnaHQgLSBzY3JvbGxDb250ZW50Lm9mZnNldEhlaWdodCArIHNjcm9sbENvbnRlbnQuc2Nyb2xsSGVpZ2h0O1xuICAgICAgICB2YXIgd2lkdGggPSBwb3B1cENvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICAgICAgdGhpcy5tb2RlbC5zZXRXaWR0aEJ5VGFyZ2V0ICYmICh0aGlzLm1pbldpZHRoID0gdGFyZ2V0RWxlbWVudFJlY3Qud2lkdGggKyBcInB4XCIpO1xuICAgICAgICB2YXIgdmVydGljYWxQb3NpdGlvbiA9IHRoaXMubW9kZWwudmVydGljYWxQb3NpdGlvbjtcbiAgICAgICAgdmFyIGFjdHVhbEhvcml6b250YWxQb3NpdGlvbiA9IHRoaXMuZ2V0QWN0dWFsSG9yaXpvbnRhbFBvc2l0aW9uKCk7XG4gICAgICAgIGlmICghIXdpbmRvdykge1xuICAgICAgICAgICAgdmFyIGhlaWdodFZhbHVlcyA9IFtoZWlnaHQsIHdpbmRvdy5pbm5lckhlaWdodCAqIDAuOSwgKF9jID0gd2luZG93LnZpc3VhbFZpZXdwb3J0KSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuaGVpZ2h0XTtcbiAgICAgICAgICAgIGhlaWdodCA9IE1hdGguY2VpbChNYXRoLm1pbi5hcHBseShNYXRoLCBoZWlnaHRWYWx1ZXMuZmlsdGVyKGZ1bmN0aW9uIChlYWNoKSB7IHJldHVybiB0eXBlb2YgZWFjaCA9PT0gXCJudW1iZXJcIjsgfSkpKTtcbiAgICAgICAgICAgIHZlcnRpY2FsUG9zaXRpb24gPSBfdXRpbHNfcG9wdXBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlBvcHVwVXRpbHNcIl0udXBkYXRlVmVydGljYWxQb3NpdGlvbih0YXJnZXRFbGVtZW50UmVjdCwgaGVpZ2h0LCB0aGlzLm1vZGVsLnZlcnRpY2FsUG9zaXRpb24sIHRoaXMubW9kZWwuc2hvd1BvaW50ZXIsIHdpbmRvdy5pbm5lckhlaWdodCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wb3B1cERpcmVjdGlvbiA9IF91dGlsc19wb3B1cF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiUG9wdXBVdGlsc1wiXS5jYWxjdWxhdGVQb3B1cERpcmVjdGlvbih2ZXJ0aWNhbFBvc2l0aW9uLCBhY3R1YWxIb3Jpem9udGFsUG9zaXRpb24pO1xuICAgICAgICB2YXIgcG9zID0gX3V0aWxzX3BvcHVwX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJQb3B1cFV0aWxzXCJdLmNhbGN1bGF0ZVBvc2l0aW9uKHRhcmdldEVsZW1lbnRSZWN0LCBoZWlnaHQsIHdpZHRoICsgbWFyZ2luTGVmdCArIG1hcmdpblJpZ2h0LCB2ZXJ0aWNhbFBvc2l0aW9uLCBhY3R1YWxIb3Jpem9udGFsUG9zaXRpb24sIHRoaXMuc2hvd0hlYWRlciwgdGhpcy5tb2RlbC5wb3NpdGlvbk1vZGUpO1xuICAgICAgICBpZiAoISF3aW5kb3cpIHtcbiAgICAgICAgICAgIHZhciBuZXdWZXJ0aWNhbERpbWVuc2lvbnMgPSBfdXRpbHNfcG9wdXBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlBvcHVwVXRpbHNcIl0uZ2V0Q29ycmVjdGVkVmVydGljYWxEaW1lbnNpb25zKHBvcy50b3AsIGhlaWdodCwgd2luZG93LmlubmVySGVpZ2h0KTtcbiAgICAgICAgICAgIGlmICghIW5ld1ZlcnRpY2FsRGltZW5zaW9ucy5oZWlnaHQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhlaWdodCA9IG5ld1ZlcnRpY2FsRGltZW5zaW9ucy5oZWlnaHQgKyBcInB4XCI7XG4gICAgICAgICAgICAgICAgcG9zLnRvcCA9IG5ld1ZlcnRpY2FsRGltZW5zaW9ucy50b3A7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5tb2RlbC5zZXRXaWR0aEJ5VGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy53aWR0aCA9IHRhcmdldEVsZW1lbnRSZWN0LndpZHRoICsgXCJweFwiO1xuICAgICAgICAgICAgICAgIHBvcy5sZWZ0ID0gdGFyZ2V0RWxlbWVudFJlY3QubGVmdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBuZXdIb3Jpem9udGFsRGltZW5zaW9ucyA9IF91dGlsc19wb3B1cF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiUG9wdXBVdGlsc1wiXS51cGRhdGVIb3Jpem9udGFsRGltZW5zaW9ucyhwb3MubGVmdCwgd2lkdGgsIHdpbmRvdy5pbm5lcldpZHRoLCBhY3R1YWxIb3Jpem9udGFsUG9zaXRpb24sIHRoaXMubW9kZWwucG9zaXRpb25Nb2RlLCB7IGxlZnQ6IG1hcmdpbkxlZnQsIHJpZ2h0OiBtYXJnaW5SaWdodCB9KTtcbiAgICAgICAgICAgICAgICBpZiAoISFuZXdIb3Jpem9udGFsRGltZW5zaW9ucykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLndpZHRoID0gbmV3SG9yaXpvbnRhbERpbWVuc2lvbnMud2lkdGggPyBuZXdIb3Jpem9udGFsRGltZW5zaW9ucy53aWR0aCArIFwicHhcIiA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgcG9zLmxlZnQgPSBuZXdIb3Jpem9udGFsRGltZW5zaW9ucy5sZWZ0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoISFmaXhlZFBvcHVwQ29udGFpbmVyKSB7XG4gICAgICAgICAgICB2YXIgcmVjdCA9IGZpeGVkUG9wdXBDb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICBwb3MudG9wIC09IHJlY3QudG9wO1xuICAgICAgICAgICAgcG9zLmxlZnQgLT0gcmVjdC5sZWZ0O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubGVmdCA9IHBvcy5sZWZ0ICsgXCJweFwiO1xuICAgICAgICB0aGlzLnRvcCA9IHBvcy50b3AgKyBcInB4XCI7XG4gICAgICAgIGlmICh0aGlzLnNob3dIZWFkZXIpIHtcbiAgICAgICAgICAgIHRoaXMucG9pbnRlclRhcmdldCA9IF91dGlsc19wb3B1cF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiUG9wdXBVdGlsc1wiXS5jYWxjdWxhdGVQb2ludGVyVGFyZ2V0KHRhcmdldEVsZW1lbnRSZWN0LCBwb3MudG9wLCBwb3MubGVmdCwgdmVydGljYWxQb3NpdGlvbiwgYWN0dWFsSG9yaXpvbnRhbFBvc2l0aW9uLCBtYXJnaW5MZWZ0LCBtYXJnaW5SaWdodCk7XG4gICAgICAgICAgICB0aGlzLnBvaW50ZXJUYXJnZXQudG9wICs9IFwicHhcIjtcbiAgICAgICAgICAgIHRoaXMucG9pbnRlclRhcmdldC5sZWZ0ICs9IFwicHhcIjtcbiAgICAgICAgfVxuICAgIH07XG4gICAgUG9wdXBEcm9wZG93blZpZXdNb2RlbC5wcm90b3R5cGUuZ2V0QWN0dWFsSG9yaXpvbnRhbFBvc2l0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYWN0dWFsSG9yaXpvbnRhbFBvc2l0aW9uID0gdGhpcy5tb2RlbC5ob3Jpem9udGFsUG9zaXRpb247XG4gICAgICAgIHZhciBpc1J0bCA9ICEhZG9jdW1lbnQgJiYgZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5kaXJlY3Rpb24gPT0gXCJydGxcIjtcbiAgICAgICAgaWYgKGlzUnRsKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5tb2RlbC5ob3Jpem9udGFsUG9zaXRpb24gPT09IFwibGVmdFwiKSB7XG4gICAgICAgICAgICAgICAgYWN0dWFsSG9yaXpvbnRhbFBvc2l0aW9uID0gXCJyaWdodFwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5tb2RlbC5ob3Jpem9udGFsUG9zaXRpb24gPT09IFwicmlnaHRcIikge1xuICAgICAgICAgICAgICAgIGFjdHVhbEhvcml6b250YWxQb3NpdGlvbiA9IFwibGVmdFwiO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY3R1YWxIb3Jpem9udGFsUG9zaXRpb247XG4gICAgfTtcbiAgICBQb3B1cERyb3Bkb3duVmlld01vZGVsLnByb3RvdHlwZS5nZXRTdHlsZUNsYXNzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5nZXRTdHlsZUNsYXNzLmNhbGwodGhpcylcbiAgICAgICAgICAgIC5hcHBlbmQoXCJzdi1wb3B1cC0tZHJvcGRvd25cIiwgIXRoaXMuaXNPdmVybGF5KVxuICAgICAgICAgICAgLmFwcGVuZChcInN2LXBvcHVwLS10YWJsZXRcIiwgdGhpcy5pc1RhYmxldCAmJiB0aGlzLmlzT3ZlcmxheSlcbiAgICAgICAgICAgIC5hcHBlbmQoXCJzdi1wb3B1cC0tc2hvdy1wb2ludGVyXCIsICF0aGlzLmlzT3ZlcmxheSAmJiB0aGlzLnNob3dIZWFkZXIpXG4gICAgICAgICAgICAuYXBwZW5kKFwic3YtcG9wdXAtLVwiICsgdGhpcy5wb3B1cERpcmVjdGlvbiwgIXRoaXMuaXNPdmVybGF5ICYmIHRoaXMuc2hvd0hlYWRlcik7XG4gICAgfTtcbiAgICBQb3B1cERyb3Bkb3duVmlld01vZGVsLnByb3RvdHlwZS5nZXRTaG93SGVhZGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tb2RlbC5zaG93UG9pbnRlciAmJiAhdGhpcy5pc092ZXJsYXk7XG4gICAgfTtcbiAgICBQb3B1cERyb3Bkb3duVmlld01vZGVsLnByb3RvdHlwZS5nZXRQb3B1cEhlYWRlclRlbXBsYXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gXCJwb3B1cC1wb2ludGVyXCI7XG4gICAgfTtcbiAgICBQb3B1cERyb3Bkb3duVmlld01vZGVsLnByb3RvdHlwZS5zZXRDb21wb25lbnRFbGVtZW50ID0gZnVuY3Rpb24gKGNvbXBvbmVudFJvb3QsIHRhcmdldEVsZW1lbnQpIHtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5zZXRDb21wb25lbnRFbGVtZW50LmNhbGwodGhpcywgY29tcG9uZW50Um9vdCk7XG4gICAgICAgIGlmICghIWNvbXBvbmVudFJvb3QgJiYgISFjb21wb25lbnRSb290LnBhcmVudEVsZW1lbnQgJiYgIXRoaXMuaXNNb2RhbCkge1xuICAgICAgICAgICAgdGhpcy50YXJnZXRFbGVtZW50ID0gdGFyZ2V0RWxlbWVudCB8fCBjb21wb25lbnRSb290LnBhcmVudEVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFBvcHVwRHJvcGRvd25WaWV3TW9kZWwucHJvdG90eXBlLnJlc2V0Q29tcG9uZW50RWxlbWVudCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5yZXNldENvbXBvbmVudEVsZW1lbnQuY2FsbCh0aGlzKTtcbiAgICAgICAgdGhpcy50YXJnZXRFbGVtZW50ID0gdW5kZWZpbmVkO1xuICAgIH07XG4gICAgUG9wdXBEcm9wZG93blZpZXdNb2RlbC5wcm90b3R5cGUudXBkYXRlT25TaG93aW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcm9vdCA9IF9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fW1wic2V0dGluZ3NcIl0uZW52aXJvbm1lbnQucm9vdDtcbiAgICAgICAgdGhpcy5wcmV2QWN0aXZlRWxlbWVudCA9IHJvb3QuYWN0aXZlRWxlbWVudDtcbiAgICAgICAgaWYgKHRoaXMuaXNPdmVybGF5KSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0RGltZW5zaW9uc0FuZFBvc2l0aW9uU3R5bGVQcm9wZXJ0aWVzKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVBvc2l0aW9uKHRydWUsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN3aXRjaEZvY3VzKCk7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIHRoaXMucmVzaXplV2luZG93Q2FsbGJhY2spO1xuICAgICAgICBpZiAodGhpcy5zaG91bGRDcmVhdGVSZXNpemVDYWxsYmFjaykge1xuICAgICAgICAgICAgd2luZG93LnZpc3VhbFZpZXdwb3J0LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgdGhpcy5yZXNpemVFdmVudENhbGxiYWNrKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaHN0YXJ0XCIsIHRoaXMudG91Y2hTdGFydEV2ZW50Q2FsbGJhY2spO1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaG1vdmVcIiwgdGhpcy50b3VjaE1vdmVFdmVudENhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY2FsY3VsYXRlSXNUYWJsZXQod2luZG93LmlubmVyV2lkdGgsIHdpbmRvdy5pbm5lckhlaWdodCk7XG4gICAgICAgICAgICB0aGlzLnJlc2l6ZUV2ZW50Q2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCB0aGlzLnNjcm9sbEV2ZW50Q2FsbEJhY2spO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBvcHVwRHJvcGRvd25WaWV3TW9kZWwucHJvdG90eXBlLCBcInNob3VsZENyZWF0ZVJlc2l6ZUNhbGxiYWNrXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gISF3aW5kb3cudmlzdWFsVmlld3BvcnQgJiYgdGhpcy5pc092ZXJsYXkgJiYgX3V0aWxzX2RldmljZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcIklzVG91Y2hcIl07XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBQb3B1cERyb3Bkb3duVmlld01vZGVsLnByb3RvdHlwZS51cGRhdGVQb3NpdGlvbiA9IGZ1bmN0aW9uIChpc1Jlc2V0SGVpZ2h0LCBpc0RlbGF5VXBkYXRpbmcpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgaWYgKGlzRGVsYXlVcGRhdGluZyA9PT0gdm9pZCAwKSB7IGlzRGVsYXlVcGRhdGluZyA9IHRydWU7IH1cbiAgICAgICAgaWYgKGlzUmVzZXRIZWlnaHQpIHtcbiAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gXCJhdXRvXCI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzRGVsYXlVcGRhdGluZykge1xuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMuX3VwZGF0ZVBvc2l0aW9uKCk7XG4gICAgICAgICAgICB9LCAxKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVBvc2l0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFBvcHVwRHJvcGRvd25WaWV3TW9kZWwucHJvdG90eXBlLnVwZGF0ZU9uSGlkaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBfc3VwZXIucHJvdG90eXBlLnVwZGF0ZU9uSGlkaW5nLmNhbGwodGhpcyk7XG4gICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIHRoaXMucmVzaXplV2luZG93Q2FsbGJhY2spO1xuICAgICAgICBpZiAodGhpcy5zaG91bGRDcmVhdGVSZXNpemVDYWxsYmFjaykge1xuICAgICAgICAgICAgd2luZG93LnZpc3VhbFZpZXdwb3J0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgdGhpcy5yZXNpemVFdmVudENhbGxiYWNrKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0b3VjaHN0YXJ0XCIsIHRoaXMudG91Y2hTdGFydEV2ZW50Q2FsbGJhY2spO1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0b3VjaG1vdmVcIiwgdGhpcy50b3VjaE1vdmVFdmVudENhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCB0aGlzLnNjcm9sbEV2ZW50Q2FsbEJhY2spO1xuICAgICAgICBpZiAoIXRoaXMuaXNEaXNwb3NlZCkge1xuICAgICAgICAgICAgdGhpcy50b3AgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLmxlZnQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLmhlaWdodCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMud2lkdGggPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLm1pbldpZHRoID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBQb3B1cERyb3Bkb3duVmlld01vZGVsLnByb3RvdHlwZS5vbk1vZGVsQ2hhbmdpbmcgPSBmdW5jdGlvbiAobmV3TW9kZWwpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgaWYgKCEhdGhpcy5tb2RlbCkge1xuICAgICAgICAgICAgdGhpcy5tb2RlbC5vblJlY2FsY3VsYXRlUG9zaXRpb24ucmVtb3ZlKHRoaXMucmVjYWxjdWxhdGVQb3NpdGlvbkhhbmRsZXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5yZWNhbGN1bGF0ZVBvc2l0aW9uSGFuZGxlcikge1xuICAgICAgICAgICAgdGhpcy5yZWNhbGN1bGF0ZVBvc2l0aW9uSGFuZGxlciA9IGZ1bmN0aW9uIChfLCBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFfdGhpcy5pc092ZXJsYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMudXBkYXRlUG9zaXRpb24ob3B0aW9ucy5pc1Jlc2V0SGVpZ2h0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUub25Nb2RlbENoYW5naW5nLmNhbGwodGhpcywgbmV3TW9kZWwpO1xuICAgICAgICBuZXdNb2RlbC5vblJlY2FsY3VsYXRlUG9zaXRpb24uYWRkKHRoaXMucmVjYWxjdWxhdGVQb3NpdGlvbkhhbmRsZXIpO1xuICAgIH07XG4gICAgUG9wdXBEcm9wZG93blZpZXdNb2RlbC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG4gICAgICAgIHRoaXMudXBkYXRlT25IaWRpbmcoKTtcbiAgICAgICAgaWYgKCEhdGhpcy5tb2RlbCkge1xuICAgICAgICAgICAgdGhpcy5tb2RlbC5vblJlY2FsY3VsYXRlUG9zaXRpb24ucmVtb3ZlKHRoaXMucmVjYWxjdWxhdGVQb3NpdGlvbkhhbmRsZXIpO1xuICAgICAgICAgICAgdGhpcy5yZWNhbGN1bGF0ZVBvc2l0aW9uSGFuZGxlciA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlc2V0Q29tcG9uZW50RWxlbWVudCgpO1xuICAgIH07XG4gICAgUG9wdXBEcm9wZG93blZpZXdNb2RlbC50YWJsZXRTaXplQnJlYWtwb2ludCA9IDYwMDtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJwcm9wZXJ0eVwiXSkoKVxuICAgIF0sIFBvcHVwRHJvcGRvd25WaWV3TW9kZWwucHJvdG90eXBlLCBcImlzVGFibGV0XCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicHJvcGVydHlcIl0pKHsgZGVmYXVsdFZhbHVlOiBcImxlZnRcIiB9KVxuICAgIF0sIFBvcHVwRHJvcGRvd25WaWV3TW9kZWwucHJvdG90eXBlLCBcInBvcHVwRGlyZWN0aW9uXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicHJvcGVydHlcIl0pKHsgZGVmYXVsdFZhbHVlOiB7IGxlZnQ6IFwiMHB4XCIsIHRvcDogXCIwcHhcIiB9IH0pXG4gICAgXSwgUG9wdXBEcm9wZG93blZpZXdNb2RlbC5wcm90b3R5cGUsIFwicG9pbnRlclRhcmdldFwiLCB2b2lkIDApO1xuICAgIHJldHVybiBQb3B1cERyb3Bkb3duVmlld01vZGVsO1xufShfcG9wdXBfdmlld19tb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiUG9wdXBCYXNlVmlld01vZGVsXCJdKSk7XG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9wb3B1cC1tb2RhbC12aWV3LW1vZGVsLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvcG9wdXAtbW9kYWwtdmlldy1tb2RlbC50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFBvcHVwTW9kYWxWaWV3TW9kZWwgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUG9wdXBNb2RhbFZpZXdNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFBvcHVwTW9kYWxWaWV3TW9kZWw7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9wb3B1cF92aWV3X21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3BvcHVwLXZpZXctbW9kZWwgKi8gXCIuL3NyYy9wb3B1cC12aWV3LW1vZGVsLnRzXCIpO1xudmFyIF9fZXh0ZW5kcyA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG5cbnZhciBQb3B1cE1vZGFsVmlld01vZGVsID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhQb3B1cE1vZGFsVmlld01vZGVsLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFBvcHVwTW9kYWxWaWV3TW9kZWwobW9kZWwpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbW9kZWwpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLm9uU2Nyb2xsT3V0c2lkZUNhbGxiYWNrID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICBfdGhpcy5wcmV2ZW50U2Nyb2xsT3VzaWRlKGV2ZW50LCBldmVudC5kZWx0YVkpO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFBvcHVwTW9kYWxWaWV3TW9kZWwucHJvdG90eXBlLmdldFN0eWxlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLmdldFN0eWxlQ2xhc3MuY2FsbCh0aGlzKVxuICAgICAgICAgICAgLmFwcGVuZChcInN2LXBvcHVwLS1tb2RhbFwiLCAhdGhpcy5pc092ZXJsYXkpO1xuICAgIH07XG4gICAgUG9wdXBNb2RhbFZpZXdNb2RlbC5wcm90b3R5cGUuZ2V0U2hvd0Zvb3RlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgICBQb3B1cE1vZGFsVmlld01vZGVsLnByb3RvdHlwZS5jcmVhdGVGb290ZXJBY3Rpb25CYXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUuY3JlYXRlRm9vdGVyQWN0aW9uQmFyLmNhbGwodGhpcyk7XG4gICAgICAgIHRoaXMuZm9vdGVyVG9vbGJhclZhbHVlLmFkZEFjdGlvbih7XG4gICAgICAgICAgICBpZDogXCJhcHBseVwiLFxuICAgICAgICAgICAgdmlzaWJsZUluZGV4OiAyMCxcbiAgICAgICAgICAgIHRpdGxlOiB0aGlzLmFwcGx5QnV0dG9uVGV4dCxcbiAgICAgICAgICAgIGlubmVyQ3NzOiBcInN2LXBvcHVwX19ib2R5LWZvb3Rlci1pdGVtIHN2LXBvcHVwX19idXR0b24gc3YtcG9wdXBfX2J1dHRvbi0tYXBwbHkgc2QtYnRuIHNkLWJ0bi0tYWN0aW9uXCIsXG4gICAgICAgICAgICBhY3Rpb246IGZ1bmN0aW9uICgpIHsgX3RoaXMuYXBwbHkoKTsgfVxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQb3B1cE1vZGFsVmlld01vZGVsLnByb3RvdHlwZSwgXCJhcHBseUJ1dHRvblRleHRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphdGlvblN0cmluZyhcIm1vZGFsQXBwbHlCdXR0b25UZXh0XCIpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUG9wdXBNb2RhbFZpZXdNb2RlbC5wcm90b3R5cGUuYXBwbHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghIXRoaXMubW9kZWwub25BcHBseSAmJiAhdGhpcy5tb2RlbC5vbkFwcGx5KCkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMuaGlkZVBvcHVwKCk7XG4gICAgfTtcbiAgICBQb3B1cE1vZGFsVmlld01vZGVsLnByb3RvdHlwZS5jbGlja091dHNpZGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9O1xuICAgIFBvcHVwTW9kYWxWaWV3TW9kZWwucHJvdG90eXBlLm9uS2V5RG93biA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSBcIkVzY2FwZVwiIHx8IGV2ZW50LmtleUNvZGUgPT09IDI3KSB7XG4gICAgICAgICAgICB0aGlzLm1vZGVsLm9uQ2FuY2VsKCk7XG4gICAgICAgIH1cbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5vbktleURvd24uY2FsbCh0aGlzLCBldmVudCk7XG4gICAgfTtcbiAgICBQb3B1cE1vZGFsVmlld01vZGVsLnByb3RvdHlwZS51cGRhdGVPblNob3dpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRhaW5lcikge1xuICAgICAgICAgICAgdGhpcy5jb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsIHRoaXMub25TY3JvbGxPdXRzaWRlQ2FsbGJhY2ssIHsgcGFzc2l2ZTogZmFsc2UgfSk7XG4gICAgICAgIH1cbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS51cGRhdGVPblNob3dpbmcuY2FsbCh0aGlzKTtcbiAgICB9O1xuICAgIFBvcHVwTW9kYWxWaWV3TW9kZWwucHJvdG90eXBlLnVwZGF0ZU9uSGlkaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5jb250YWluZXIpIHtcbiAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ3aGVlbFwiLCB0aGlzLm9uU2Nyb2xsT3V0c2lkZUNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgICAgICBfc3VwZXIucHJvdG90eXBlLnVwZGF0ZU9uSGlkaW5nLmNhbGwodGhpcyk7XG4gICAgfTtcbiAgICByZXR1cm4gUG9wdXBNb2RhbFZpZXdNb2RlbDtcbn0oX3BvcHVwX3ZpZXdfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlBvcHVwQmFzZVZpZXdNb2RlbFwiXSkpO1xuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvcG9wdXAtc3VydmV5LnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9wb3B1cC1zdXJ2ZXkudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFBvcHVwU3VydmV5TW9kZWwsIFN1cnZleVdpbmRvd01vZGVsICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlBvcHVwU3VydmV5TW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBQb3B1cFN1cnZleU1vZGVsOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJTdXJ2ZXlXaW5kb3dNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFN1cnZleVdpbmRvd01vZGVsOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYmFzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9iYXNlICovIFwiLi9zcmMvYmFzZS50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc3VydmV5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3N1cnZleSAqLyBcIi4vc3JjL3N1cnZleS50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9qc29ub2JqZWN0ICovIFwiLi9zcmMvanNvbm9iamVjdC50c1wiKTtcbnZhciBfX2V4dGVuZHMgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xudmFyIF9fZGVjb3JhdGUgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufTtcblxuXG5cbi8qKlxuICogQSBjbGFzcyB0aGF0IHJlbmRlcnMgYSBzdXJ2ZXkgaW4gYSBwb3AtdXAgd2luZG93LlxuICpcbiAqIFtWaWV3IERlbW9dKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2V4YW1wbGVzL3BvcHVwLXN1cnZleS8gKGxpbmtTdHlsZSkpXG4gKi9cbnZhciBQb3B1cFN1cnZleU1vZGVsID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhQb3B1cFN1cnZleU1vZGVsLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFBvcHVwU3VydmV5TW9kZWwoanNvbk9iaiwgaW5pdGlhbE1vZGVsKSB7XG4gICAgICAgIGlmIChpbml0aWFsTW9kZWwgPT09IHZvaWQgMCkgeyBpbml0aWFsTW9kZWwgPSBudWxsOyB9XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgaG93IG1hbnkgc2Vjb25kcyB0aGUgcG9wLXVwIHdpbmRvdyBzaG91bGQgcmVtYWluIG9wZW4gYWZ0ZXIgdXNlcnMgY29tcGxldGUgdGhlIHN1cnZleS5cbiAgICAgICAgICpcbiAgICAgICAgICogRGVmYXVsdCB2YWx1ZTogMCAodGhlIHdpbmRvdyBpcyBjbG9zZWQgaW1tZWRpYXRlbHkpXG4gICAgICAgICAqXG4gICAgICAgICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIGEgbmVnYXRpdmUgdmFsdWUgKGZvciBpbnN0YW5jZSwgLTEpIHRvIGtlZXAgdGhlIHBvcC11cCB3aW5kb3cgb3BlbiB3aXRob3V0IGEgdGltZSBsaW1pdC5cbiAgICAgICAgICovXG4gICAgICAgIF90aGlzLmNsb3NlT25Db21wbGV0ZVRpbWVvdXQgPSAwO1xuICAgICAgICBpZiAoaW5pdGlhbE1vZGVsKSB7XG4gICAgICAgICAgICBfdGhpcy5zdXJ2ZXlWYWx1ZSA9IGluaXRpYWxNb2RlbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIF90aGlzLnN1cnZleVZhbHVlID0gX3RoaXMuY3JlYXRlU3VydmV5KGpzb25PYmopO1xuICAgICAgICB9XG4gICAgICAgIF90aGlzLnN1cnZleVZhbHVlLnNob3dUaXRsZSA9IGZhbHNlO1xuICAgICAgICBpZiAoXCJ1bmRlZmluZWRcIiAhPT0gdHlwZW9mIGRvY3VtZW50KSB7XG4gICAgICAgICAgICBfdGhpcy53aW5kb3dFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgfVxuICAgICAgICBfdGhpcy5zdXJ2ZXkub25Db21wbGV0ZS5hZGQoZnVuY3Rpb24gKHN1cnZleSwgb3B0aW9ucykge1xuICAgICAgICAgICAgX3RoaXMub25TdXJ2ZXlDb21wbGV0ZSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgX3RoaXMucmVnaXN0ZXJQcm9wZXJ0eUNoYW5nZWRIYW5kbGVycyhbXCJpc1Nob3dpbmdcIl0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghIV90aGlzLnNob3dpbmdDaGFuZ2VkQ2FsbGJhY2spXG4gICAgICAgICAgICAgICAgX3RoaXMuc2hvd2luZ0NoYW5nZWRDYWxsYmFjaygpO1xuICAgICAgICB9KTtcbiAgICAgICAgX3RoaXMucmVnaXN0ZXJQcm9wZXJ0eUNoYW5nZWRIYW5kbGVycyhbXCJpc0V4cGFuZGVkXCJdLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5vbkV4cGFuZGVkQ2hhbmdlZCgpO1xuICAgICAgICB9KTtcbiAgICAgICAgX3RoaXMud2lkdGggPSBuZXcgX2Jhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkNvbXB1dGVkVXBkYXRlclwiXShmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy5zdXJ2ZXkud2lkdGg7IH0pO1xuICAgICAgICBfdGhpcy53aWR0aCA9IF90aGlzLnN1cnZleS53aWR0aDtcbiAgICAgICAgX3RoaXMudXBkYXRlQ3NzKCk7XG4gICAgICAgIF90aGlzLm9uQ3JlYXRpbmcoKTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBQb3B1cFN1cnZleU1vZGVsLnByb3RvdHlwZS5vbkNyZWF0aW5nID0gZnVuY3Rpb24gKCkgeyB9O1xuICAgIFBvcHVwU3VydmV5TW9kZWwucHJvdG90eXBlLmdldFR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBcInBvcHVwc3VydmV5XCI7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUG9wdXBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwic3VydmV5XCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEEgW2BTdXJ2ZXlNb2RlbGBdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vYXBpLXJlZmVyZW5jZS9zdXJ2ZXktZGF0YS1tb2RlbCkgaW5zdGFuY2UgcmVuZGVyZWQgaW4gdGhlIHBvcC11cCB3aW5kb3cuXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN1cnZleVZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBvcHVwU3VydmV5TW9kZWwucHJvdG90eXBlLCBcImlzU2hvd2luZ1wiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgcG9wLXVwIHN1cnZleSBhcHBlYXJzIG9uIHRoZSBwYWdlLCByZWdhcmRsZXNzIG9mIGl0cyBbZXhwYW5kIHN0YXRlXSgjaXNFeHBhbmRlZCkuXG4gICAgICAgICAqXG4gICAgICAgICAqIFlvdSBjYW4gc2V0IHRoaXMgcHJvcGVydHkgdG8gYHRydWVgIG9yIGBmYWxzZWAgdG8gY29udHJvbCB2aXNpYmlsaXR5IG9mIHRoZSBwb3AtdXAgc3VydmV5LiBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHVzZSB0aGUgW2BzaG93KClgXSgjc2hvdykgYW5kIFtgaGlkZSgpYF0oI2hpZGUpIG1ldGhvZHMuXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpc1Nob3dpbmdcIiwgZmFsc2UpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImlzU2hvd2luZ1wiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgLyoqXG4gICAgICogU2hvd3MgdGhlIHBvcC11cCBzdXJ2ZXkuIFRoZSBzdXJ2ZXkgbWF5IGFwcGVhciBbZXhwYW5kZWQgb3IgY29sbGFwc2VkXSgjaXNFeHBhbmRlZCkuXG4gICAgICpcbiAgICAgKiBBcyBhbiBhbHRlcm5hdGl2ZSB0byB0aGlzIG1ldGhvZCwgeW91IGNhbiBzZXQgdGhlIFtgaXNTaG93aW5nYF0oI2lzU2hvd2luZykgcHJvcGVydHkgdG8gYHRydWVgLlxuICAgICAqIEBzZWUgaGlkZVxuICAgICAqL1xuICAgIFBvcHVwU3VydmV5TW9kZWwucHJvdG90eXBlLnNob3cgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuaXNTaG93aW5nID0gdHJ1ZTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEhpZGVzIHRoZSBwb3AtdXAgc3VydmV5LlxuICAgICAqXG4gICAgICogQXMgYW4gYWx0ZXJuYXRpdmUgdG8gdGhpcyBtZXRob2QsIHlvdSBjYW4gc2V0IHRoZSBbYGlzU2hvd2luZ2BdKCNpc1Nob3dpbmcpIHByb3BlcnR5IHRvIGBmYWxzZWAuXG4gICAgICogQHNlZSBzaG93XG4gICAgICogQHNlZSBleHBhbmRcbiAgICAgKiBAc2VlIGNvbGxhcHNlXG4gICAgICovXG4gICAgUG9wdXBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuaGlkZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5pc1Nob3dpbmcgPSBmYWxzZTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQb3B1cFN1cnZleU1vZGVsLnByb3RvdHlwZSwgXCJpc0V4cGFuZGVkXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBwb3AtdXAgd2luZG93IGlzIGV4cGFuZGVkIG9yIGNvbGxhcHNlZC5cbiAgICAgICAgICpcbiAgICAgICAgICogWW91IGNhbiBzZXQgdGhpcyBwcm9wZXJ0eSB0byBgdHJ1ZWAgb3IgYGZhbHNlYCB0byBjb250cm9sIHRoZSBleHBhbmQgc3RhdGUgb2YgdGhlIHBvcC11cCBzdXJ2ZXkuIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gdXNlIHRoZSBbYGV4cGFuZCgpYF0oI2V4cGFuZCkgYW5kIFtgY29sbGFwc2UoKWBdKCNjb2xsYXBzZSkgbWV0aG9kcy5cbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImlzRXhwYW5kZWRcIiwgZmFsc2UpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImlzRXhwYW5kZWRcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFBvcHVwU3VydmV5TW9kZWwucHJvdG90eXBlLm9uRXhwYW5kZWRDaGFuZ2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoISF0aGlzLmV4cGFuZGVkQ2hhbmdlZENhbGxiYWNrKSB7XG4gICAgICAgICAgICB0aGlzLmV4cGFuZGVkQ2hhbmdlZENhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVDc3NCdXR0b24oKTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQb3B1cFN1cnZleU1vZGVsLnByb3RvdHlwZSwgXCJ0aXRsZVwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBIHRpdGxlIGZvciB0aGUgcG9wLXVwIHdpbmRvdy4gSWYgdGhpcyBwcm9wZXJ0eSBpcyB1bmRlZmluZWQsIHRoZSB0aXRsZSBpcyB0YWtlbiBmcm9tIFtgU3VydmV5TW9kZWxgXSgjc3VydmV5KSdzIFtgdGl0bGVgXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2Uvc3VydmV5LWRhdGEtbW9kZWwjdGl0bGUpIHByb3BlcnR5LlxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdXJ2ZXkudGl0bGU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnN1cnZleS50aXRsZSA9IHZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBvcHVwU3VydmV5TW9kZWwucHJvdG90eXBlLCBcImxvY1RpdGxlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdXJ2ZXkubG9jVGl0bGU7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICAvKipcbiAgICAgKiBFeHBhbmRzIHRoZSBwb3AtdXAgd2luZG93LlxuICAgICAqXG4gICAgICogQXMgYW4gYWx0ZXJuYXRpdmUgdG8gdGhpcyBtZXRob2QsIHlvdSBjYW4gc2V0IHRoZSBbYGlzRXhwYW5kZWRgXSgjaXNFeHBhbmRlZCkgcHJvcGVydHkgdG8gYHRydWVgLlxuICAgICAqIEBzZWUgY29sbGFwc2VcbiAgICAgKi9cbiAgICBQb3B1cFN1cnZleU1vZGVsLnByb3RvdHlwZS5leHBhbmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuaXNFeHBhbmRlZCA9IHRydWU7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBDb2xsYXBzZXMgdGhlIHBvcC11cCB3aW5kb3csIGxlYXZpbmcgb25seSB0aGUgc3VydmV5IHRpdGxlIHZpc2libGUuXG4gICAgICpcbiAgICAgKiBBcyBhbiBhbHRlcm5hdGl2ZSB0byB0aGlzIG1ldGhvZCwgeW91IGNhbiBzZXQgdGhlIFtgaXNFeHBhbmRlZGBdKCNpc0V4cGFuZGVkKSBwcm9wZXJ0eSB0byBgZmFsc2VgLlxuICAgICAqIEBzZWUgZXhwYW5kXG4gICAgICovXG4gICAgUG9wdXBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuY29sbGFwc2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuaXNFeHBhbmRlZCA9IGZhbHNlO1xuICAgIH07XG4gICAgUG9wdXBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuY2hhbmdlRXhwYW5kQ29sbGFwc2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuaXNFeHBhbmRlZCA9ICF0aGlzLmlzRXhwYW5kZWQ7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUG9wdXBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwiYWxsb3dDbG9zZVwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgd2hldGhlciB0byBkaXNwbGF5IGEgYnV0dG9uIHRoYXQgY2xvc2VzIHRoZSBwb3AtdXAgd2luZG93LlxuICAgICAgICAgKlxuICAgICAgICAgKiBEZWZhdWx0IHZhbHVlOiBgZmFsc2VgXG4gICAgICAgICAqXG4gICAgICAgICAqIElmIHlvdSBhbGxvdyB1c2VycyB0byBjbG9zZSB0aGUgcG9wLXVwIHdpbmRvdywgbWFrZSBzdXJlIHRvIGltcGxlbWVudCBhIFVJIGVsZW1lbnQgdGhhdCBvcGVucyBpdC4gVGhpcyBlbGVtZW50IHNob3VsZCBjYWxsIHRoZSBbYHNob3coKWBdKCNzaG93KSBtZXRob2Qgb3IgZW5hYmxlIHRoZSBbYGlzU2hvd2luZ2BdKCNpc1Nob3dpbmcpIHByb3BlcnR5LlxuICAgICAgICAgKiBAc2VlIGV4cGFuZFxuICAgICAgICAgKiBAc2VlIGNvbGxhcHNlXG4gICAgICAgICAqIEBzZWUgaGlkZVxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiYWxsb3dDbG9zZVwiLCBmYWxzZSk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiYWxsb3dDbG9zZVwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBvcHVwU3VydmV5TW9kZWwucHJvdG90eXBlLCBcImNzc1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3VydmV5LmNzcztcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQb3B1cFN1cnZleU1vZGVsLnByb3RvdHlwZSwgXCJjc3NCdXR0b25cIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjc3NCdXR0b25cIiwgXCJcIik7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUG9wdXBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwiY3NzUm9vdFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNzc1Jvb3RcIiwgXCJcIik7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUG9wdXBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwiY3NzQm9keVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNzc0JvZHlcIiwgXCJcIik7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUG9wdXBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwiY3NzSGVhZGVyUm9vdFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNzc0hlYWRlclJvb3RcIiwgXCJcIik7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUG9wdXBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwiY3NzSGVhZGVyVGl0bGVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjc3NIZWFkZXJUaXRsZVwiLCBcIlwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQb3B1cFN1cnZleU1vZGVsLnByb3RvdHlwZSwgXCJjc3NIZWFkZXJCdXR0b25cIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjc3NIZWFkZXJCdXR0b25cIiwgXCJcIik7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUG9wdXBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwicmVuZGVyZWRXaWR0aFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHdpZHRoID0gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwid2lkdGhcIiwgXCI2MCVcIik7XG4gICAgICAgICAgICBpZiAod2lkdGggJiYgIWlzTmFOKHdpZHRoKSlcbiAgICAgICAgICAgICAgICB3aWR0aCA9IHdpZHRoICsgXCJweFwiO1xuICAgICAgICAgICAgcmV0dXJuIHdpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUG9wdXBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUudXBkYXRlQ3NzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuY3NzIHx8ICF0aGlzLmNzcy53aW5kb3cpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciBjc3NXaW5kb3cgPSB0aGlzLmNzcy53aW5kb3c7XG4gICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNzc1Jvb3RcIiwgY3NzV2luZG93LnJvb3QpO1xuICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjc3NCb2R5XCIsIGNzc1dpbmRvdy5ib2R5KTtcbiAgICAgICAgdmFyIGNzc0hlYWRlciA9IGNzc1dpbmRvdy5oZWFkZXI7XG4gICAgICAgIGlmICghY3NzSGVhZGVyKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjc3NIZWFkZXJSb290XCIsIGNzc0hlYWRlci5yb290KTtcbiAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY3NzSGVhZGVyVGl0bGVcIiwgY3NzSGVhZGVyLnRpdGxlKTtcbiAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY3NzSGVhZGVyQnV0dG9uXCIsIGNzc0hlYWRlci5idXR0b24pO1xuICAgICAgICB0aGlzLnVwZGF0ZUNzc0J1dHRvbigpO1xuICAgIH07XG4gICAgUG9wdXBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUudXBkYXRlQ3NzQnV0dG9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgY3NzSGVhZGVyID0gISF0aGlzLmNzcy53aW5kb3cgPyB0aGlzLmNzcy53aW5kb3cuaGVhZGVyIDogbnVsbDtcbiAgICAgICAgaWYgKCFjc3NIZWFkZXIpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMuc2V0Q3NzQnV0dG9uKHRoaXMuaXNFeHBhbmRlZCA/IGNzc0hlYWRlci5idXR0b25FeHBhbmRlZCA6IGNzc0hlYWRlci5idXR0b25Db2xsYXBzZWQpO1xuICAgIH07XG4gICAgUG9wdXBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuc2V0Q3NzQnV0dG9uID0gZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICBpZiAoIXZhbClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY3NzQnV0dG9uXCIsIHZhbCk7XG4gICAgfTtcbiAgICBQb3B1cFN1cnZleU1vZGVsLnByb3RvdHlwZS5jcmVhdGVTdXJ2ZXkgPSBmdW5jdGlvbiAoanNvbk9iaikge1xuICAgICAgICByZXR1cm4gbmV3IF9zdXJ2ZXlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlN1cnZleU1vZGVsXCJdKGpzb25PYmopO1xuICAgIH07XG4gICAgUG9wdXBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUub25TdXJ2ZXlDb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuY2xvc2VPbkNvbXBsZXRlVGltZW91dCA8IDApXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmICh0aGlzLmNsb3NlT25Db21wbGV0ZVRpbWVvdXQgPT0gMCkge1xuICAgICAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgdGltZXJJZCA9IG51bGw7XG4gICAgICAgICAgICB2YXIgZnVuYyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmhpZGUoKTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICAgICAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbCh0aW1lcklkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGltZXJJZCA9XG4gICAgICAgICAgICAgICAgdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIlxuICAgICAgICAgICAgICAgICAgICA/IHdpbmRvdy5zZXRJbnRlcnZhbChmdW5jLCB0aGlzLmNsb3NlT25Db21wbGV0ZVRpbWVvdXQgKiAxMDAwKVxuICAgICAgICAgICAgICAgICAgICA6IDA7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFBvcHVwU3VydmV5TW9kZWwucHJvdG90eXBlLm9uU2Nyb2xsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnN1cnZleS5vblNjcm9sbCgpO1xuICAgIH07XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wicHJvcGVydHlcIl0pKClcbiAgICBdLCBQb3B1cFN1cnZleU1vZGVsLnByb3RvdHlwZSwgXCJ3aWR0aFwiLCB2b2lkIDApO1xuICAgIHJldHVybiBQb3B1cFN1cnZleU1vZGVsO1xufShfYmFzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiQmFzZVwiXSkpO1xuXG4vKipcbiAqIE9ic29sZXRlLiBQbGVhc2UgdXNlIFBvcHVwU3VydmV5XG4gKi9cbnZhciBTdXJ2ZXlXaW5kb3dNb2RlbCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoU3VydmV5V2luZG93TW9kZWwsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gU3VydmV5V2luZG93TW9kZWwoKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICB9XG4gICAgcmV0dXJuIFN1cnZleVdpbmRvd01vZGVsO1xufShQb3B1cFN1cnZleU1vZGVsKSk7XG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9wb3B1cC11dGlscy50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9wb3B1cC11dGlscy50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBjcmVhdGVQb3B1cE1vZGFsVmlld01vZGVsLCBjcmVhdGVQb3B1cFZpZXdNb2RlbCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJjcmVhdGVQb3B1cE1vZGFsVmlld01vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlUG9wdXBNb2RhbFZpZXdNb2RlbDsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiY3JlYXRlUG9wdXBWaWV3TW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVQb3B1cFZpZXdNb2RlbDsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3BvcHVwX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3BvcHVwICovIFwiLi9zcmMvcG9wdXAudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3BvcHVwX2Ryb3Bkb3duX3ZpZXdfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcG9wdXAtZHJvcGRvd24tdmlldy1tb2RlbCAqLyBcIi4vc3JjL3BvcHVwLWRyb3Bkb3duLXZpZXctbW9kZWwudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3BvcHVwX21vZGFsX3ZpZXdfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcG9wdXAtbW9kYWwtdmlldy1tb2RlbCAqLyBcIi4vc3JjL3BvcHVwLW1vZGFsLXZpZXctbW9kZWwudHNcIik7XG5cblxuXG5mdW5jdGlvbiBjcmVhdGVQb3B1cE1vZGFsVmlld01vZGVsKG9wdGlvbnMsIHJvb3RFbGVtZW50KSB7XG4gICAgdmFyIHBvcHVwTW9kZWwgPSBuZXcgX3BvcHVwX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJQb3B1cE1vZGVsXCJdKG9wdGlvbnMuY29tcG9uZW50TmFtZSwgb3B0aW9ucy5kYXRhLCBcInRvcFwiLCBcImxlZnRcIiwgZmFsc2UsIHRydWUsIG9wdGlvbnMub25DYW5jZWwsIG9wdGlvbnMub25BcHBseSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBvcHRpb25zLm9uSGlkZSgpO1xuICAgICAgICBpZiAoISFjb250YWluZXIpIHtcbiAgICAgICAgICAgIHBvcHVwVmlld01vZGVsLnJlc2V0Q29tcG9uZW50RWxlbWVudCgpO1xuICAgICAgICB9XG4gICAgfSwgb3B0aW9ucy5vblNob3csIG9wdGlvbnMuY3NzQ2xhc3MsIG9wdGlvbnMudGl0bGUpO1xuICAgIHBvcHVwTW9kZWwuZGlzcGxheU1vZGUgPSBvcHRpb25zLmRpc3BsYXlNb2RlIHx8IFwicG9wdXBcIjtcbiAgICB2YXIgcG9wdXBWaWV3TW9kZWwgPSBuZXcgX3BvcHVwX21vZGFsX3ZpZXdfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIlBvcHVwTW9kYWxWaWV3TW9kZWxcIl0ocG9wdXBNb2RlbCk7XG4gICAgaWYgKCEhcm9vdEVsZW1lbnQgJiYgISFyb290RWxlbWVudC5hcHBlbmRDaGlsZCkge1xuICAgICAgICB2YXIgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgcm9vdEVsZW1lbnQuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTtcbiAgICAgICAgcG9wdXBWaWV3TW9kZWwuc2V0Q29tcG9uZW50RWxlbWVudChjb250YWluZXIpO1xuICAgIH1cbiAgICBpZiAoIXBvcHVwVmlld01vZGVsLmNvbnRhaW5lcikge1xuICAgICAgICBwb3B1cFZpZXdNb2RlbC5pbml0aWFsaXplUG9wdXBDb250YWluZXIoKTtcbiAgICB9XG4gICAgcmV0dXJuIHBvcHVwVmlld01vZGVsO1xufVxuZnVuY3Rpb24gY3JlYXRlUG9wdXBWaWV3TW9kZWwobW9kZWwsIHRhcmdldEVsZW1lbnQpIHtcbiAgICBpZiAobW9kZWwuaXNNb2RhbCkge1xuICAgICAgICByZXR1cm4gbmV3IF9wb3B1cF9tb2RhbF92aWV3X21vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJQb3B1cE1vZGFsVmlld01vZGVsXCJdKG1vZGVsKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBuZXcgX3BvcHVwX2Ryb3Bkb3duX3ZpZXdfbW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlBvcHVwRHJvcGRvd25WaWV3TW9kZWxcIl0obW9kZWwsIHRhcmdldEVsZW1lbnQpO1xuICAgIH1cbn1cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9wb3B1cC12aWV3LW1vZGVsLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvcG9wdXAtdmlldy1tb2RlbC50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEZPQ1VTX0lOUFVUX1NFTEVDVE9SLCBQb3B1cEJhc2VWaWV3TW9kZWwgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiRk9DVVNfSU5QVVRfU0VMRUNUT1JcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBGT0NVU19JTlBVVF9TRUxFQ1RPUjsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUG9wdXBCYXNlVmlld01vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUG9wdXBCYXNlVmlld01vZGVsOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYmFzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9iYXNlICovIFwiLi9zcmMvYmFzZS50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9qc29ub2JqZWN0ICovIFwiLi9zcmMvanNvbm9iamVjdC50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdXRpbHNfY3NzQ2xhc3NCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3V0aWxzL2Nzc0NsYXNzQnVpbGRlciAqLyBcIi4vc3JjL3V0aWxzL2Nzc0NsYXNzQnVpbGRlci50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYWN0aW9uc19jb250YWluZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYWN0aW9ucy9jb250YWluZXIgKi8gXCIuL3NyYy9hY3Rpb25zL2NvbnRhaW5lci50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc2V0dGluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vc2V0dGluZ3MgKi8gXCIuL3NyYy9zZXR0aW5ncy50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdXRpbHNfdXRpbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vdXRpbHMvdXRpbHMgKi8gXCIuL3NyYy91dGlscy91dGlscy50c1wiKTtcbnZhciBfX2V4dGVuZHMgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xudmFyIF9fZGVjb3JhdGUgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufTtcblxuXG5cblxuXG5cbnZhciBGT0NVU19JTlBVVF9TRUxFQ1RPUiA9IFwiaW5wdXQ6bm90KDpkaXNhYmxlZCk6bm90KFtyZWFkb25seV0pOm5vdChbdHlwZT1oaWRkZW5dKSxzZWxlY3Q6bm90KDpkaXNhYmxlZCk6bm90KFtyZWFkb25seV0pLHRleHRhcmVhOm5vdCg6ZGlzYWJsZWQpOm5vdChbcmVhZG9ubHldKSwgYnV0dG9uOm5vdCg6ZGlzYWJsZWQpOm5vdChbcmVhZG9ubHldKSwgW3RhYmluZGV4XTpub3QoW3RhYmluZGV4Xj1cXFwiLVxcXCJdKVwiO1xudmFyIFBvcHVwQmFzZVZpZXdNb2RlbCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoUG9wdXBCYXNlVmlld01vZGVsLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFBvcHVwQmFzZVZpZXdNb2RlbChtb2RlbCkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5zdWJzY3JpcHRpb25JZCA9IFBvcHVwQmFzZVZpZXdNb2RlbC5TdWJzY3JpcHRpb25JZCsrO1xuICAgICAgICBfdGhpcy5wb3B1cFNlbGVjdG9yID0gXCIuc3YtcG9wdXBcIjtcbiAgICAgICAgX3RoaXMuZml4ZWRQb3B1cENvbnRhaW5lciA9IFwiLnN2LXBvcHVwXCI7XG4gICAgICAgIF90aGlzLmNvbnRhaW5lclNlbGVjdG9yID0gXCIuc3YtcG9wdXBfX2NvbnRhaW5lclwiO1xuICAgICAgICBfdGhpcy5zY3JvbGxpbmdDb250ZW50U2VsZWN0b3IgPSBcIi5zdi1wb3B1cF9fc2Nyb2xsaW5nLWNvbnRlbnRcIjtcbiAgICAgICAgX3RoaXMubW9kZWwgPSBtb2RlbDtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUG9wdXBCYXNlVmlld01vZGVsLnByb3RvdHlwZSwgXCJjb250YWluZXJcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5lckVsZW1lbnQgfHwgdGhpcy5jcmVhdGVkQ29udGFpbmVyO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUG9wdXBCYXNlVmlld01vZGVsLnByb3RvdHlwZS5nZXRMb2NhbGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghIXRoaXMubG9jYWxlKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlO1xuICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5nZXRMb2NhbGUuY2FsbCh0aGlzKTtcbiAgICB9O1xuICAgIFBvcHVwQmFzZVZpZXdNb2RlbC5wcm90b3R5cGUuaGlkZVBvcHVwID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLm1vZGVsLmlzVmlzaWJsZSA9IGZhbHNlO1xuICAgIH07XG4gICAgUG9wdXBCYXNlVmlld01vZGVsLnByb3RvdHlwZS5nZXRTdHlsZUNsYXNzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gbmV3IF91dGlsc19jc3NDbGFzc0J1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIkNzc0NsYXNzQnVpbGRlclwiXSgpXG4gICAgICAgICAgICAuYXBwZW5kKHRoaXMubW9kZWwuY3NzQ2xhc3MpXG4gICAgICAgICAgICAuYXBwZW5kKFwic3YtcG9wdXAtLVwiICsgdGhpcy5tb2RlbC5kaXNwbGF5TW9kZSwgdGhpcy5pc092ZXJsYXkpO1xuICAgIH07XG4gICAgUG9wdXBCYXNlVmlld01vZGVsLnByb3RvdHlwZS5nZXRTaG93Rm9vdGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc092ZXJsYXk7XG4gICAgfTtcbiAgICBQb3B1cEJhc2VWaWV3TW9kZWwucHJvdG90eXBlLmdldFNob3dIZWFkZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuICAgIFBvcHVwQmFzZVZpZXdNb2RlbC5wcm90b3R5cGUuZ2V0UG9wdXBIZWFkZXJUZW1wbGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIFBvcHVwQmFzZVZpZXdNb2RlbC5wcm90b3R5cGUuY3JlYXRlRm9vdGVyQWN0aW9uQmFyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB0aGlzLmZvb3RlclRvb2xiYXJWYWx1ZSA9IG5ldyBfYWN0aW9uc19jb250YWluZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcIkFjdGlvbkNvbnRhaW5lclwiXSgpO1xuICAgICAgICB0aGlzLmZvb3RlclRvb2xiYXIudXBkYXRlQ2FsbGJhY2sgPSBmdW5jdGlvbiAoaXNSZXNldEluaXRpYWxpemVkKSB7XG4gICAgICAgICAgICBfdGhpcy5mb290ZXJUb29sYmFyVmFsdWUuYWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChhY3Rpb24pIHsgcmV0dXJuIGFjdGlvbi5jc3NDbGFzc2VzID0ge1xuICAgICAgICAgICAgICAgIGl0ZW06IFwic3YtcG9wdXBfX2JvZHktZm9vdGVyLWl0ZW0gc3YtcG9wdXBfX2J1dHRvbiBzZC1idG5cIlxuICAgICAgICAgICAgfTsgfSk7XG4gICAgICAgIH07XG4gICAgICAgIHZhciBmb290ZXJBY3Rpb25zID0gW3tcbiAgICAgICAgICAgICAgICBpZDogXCJjYW5jZWxcIixcbiAgICAgICAgICAgICAgICB2aXNpYmxlSW5kZXg6IDEwLFxuICAgICAgICAgICAgICAgIHRpdGxlOiB0aGlzLmNhbmNlbEJ1dHRvblRleHQsXG4gICAgICAgICAgICAgICAgaW5uZXJDc3M6IFwic3YtcG9wdXBfX2J1dHRvbi0tY2FuY2VsIHNkLWJ0blwiLFxuICAgICAgICAgICAgICAgIGFjdGlvbjogZnVuY3Rpb24gKCkgeyBfdGhpcy5jYW5jZWwoKTsgfVxuICAgICAgICAgICAgfV07XG4gICAgICAgIGZvb3RlckFjdGlvbnMgPSB0aGlzLm1vZGVsLnVwZGF0ZUZvb3RlckFjdGlvbnMoZm9vdGVyQWN0aW9ucyk7XG4gICAgICAgIHRoaXMuZm9vdGVyVG9vbGJhclZhbHVlLnNldEl0ZW1zKGZvb3RlckFjdGlvbnMpO1xuICAgIH07XG4gICAgUG9wdXBCYXNlVmlld01vZGVsLnByb3RvdHlwZS5yZXNldERpbWVuc2lvbnNBbmRQb3NpdGlvblN0eWxlUHJvcGVydGllcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG51bGxhYmxlVmFsdWUgPSBcImluaGVyaXRcIjtcbiAgICAgICAgdGhpcy50b3AgPSBudWxsYWJsZVZhbHVlO1xuICAgICAgICB0aGlzLmxlZnQgPSBudWxsYWJsZVZhbHVlO1xuICAgICAgICB0aGlzLmhlaWdodCA9IG51bGxhYmxlVmFsdWU7XG4gICAgICAgIHRoaXMud2lkdGggPSBudWxsYWJsZVZhbHVlO1xuICAgICAgICB0aGlzLm1pbldpZHRoID0gbnVsbGFibGVWYWx1ZTtcbiAgICB9O1xuICAgIFBvcHVwQmFzZVZpZXdNb2RlbC5wcm90b3R5cGUub25Nb2RlbENoYW5naW5nID0gZnVuY3Rpb24gKG5ld01vZGVsKSB7XG4gICAgfTtcbiAgICBQb3B1cEJhc2VWaWV3TW9kZWwucHJvdG90eXBlLnNldHVwTW9kZWwgPSBmdW5jdGlvbiAobW9kZWwpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgaWYgKCEhdGhpcy5tb2RlbCkge1xuICAgICAgICAgICAgdGhpcy5tb2RlbC51bnJlZ2lzdGVyUHJvcGVydHlDaGFuZ2VkSGFuZGxlcnMoW1wiaXNWaXNpYmxlXCJdLCBcIlBvcHVwQmFzZVZpZXdNb2RlbFwiICsgdGhpcy5zdWJzY3JpcHRpb25JZCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbk1vZGVsQ2hhbmdpbmcobW9kZWwpO1xuICAgICAgICB0aGlzLl9tb2RlbCA9IG1vZGVsO1xuICAgICAgICB2YXIgb25Jc1Zpc2libGVDaGFuZ2VkSGFuZGxlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghbW9kZWwuaXNWaXNpYmxlKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMudXBkYXRlT25IaWRpbmcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF90aGlzLmlzVmlzaWJsZSA9IG1vZGVsLmlzVmlzaWJsZTtcbiAgICAgICAgfTtcbiAgICAgICAgbW9kZWwucmVnaXN0ZXJQcm9wZXJ0eUNoYW5nZWRIYW5kbGVycyhbXCJpc1Zpc2libGVcIl0sIG9uSXNWaXNpYmxlQ2hhbmdlZEhhbmRsZXIsIFwiUG9wdXBCYXNlVmlld01vZGVsXCIgKyB0aGlzLnN1YnNjcmlwdGlvbklkKTtcbiAgICAgICAgb25Jc1Zpc2libGVDaGFuZ2VkSGFuZGxlcigpO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBvcHVwQmFzZVZpZXdNb2RlbC5wcm90b3R5cGUsIFwibW9kZWxcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb2RlbDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAobW9kZWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0dXBNb2RlbChtb2RlbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUG9wdXBCYXNlVmlld01vZGVsLnByb3RvdHlwZSwgXCJ0aXRsZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW9kZWwudGl0bGU7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUG9wdXBCYXNlVmlld01vZGVsLnByb3RvdHlwZSwgXCJjb250ZW50Q29tcG9uZW50TmFtZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW9kZWwuY29udGVudENvbXBvbmVudE5hbWU7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUG9wdXBCYXNlVmlld01vZGVsLnByb3RvdHlwZSwgXCJjb250ZW50Q29tcG9uZW50RGF0YVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW9kZWwuY29udGVudENvbXBvbmVudERhdGE7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUG9wdXBCYXNlVmlld01vZGVsLnByb3RvdHlwZSwgXCJpc01vZGFsXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb2RlbC5pc01vZGFsO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBvcHVwQmFzZVZpZXdNb2RlbC5wcm90b3R5cGUsIFwiaXNGb2N1c2VkQ29udGVudFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW9kZWwuaXNGb2N1c2VkQ29udGVudDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQb3B1cEJhc2VWaWV3TW9kZWwucHJvdG90eXBlLCBcImlzRm9jdXNlZENvbnRhaW5lclwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW9kZWwuaXNGb2N1c2VkQ29udGFpbmVyO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBvcHVwQmFzZVZpZXdNb2RlbC5wcm90b3R5cGUsIFwic2hvd0Zvb3RlclwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U2hvd0Zvb3RlcigpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBvcHVwQmFzZVZpZXdNb2RlbC5wcm90b3R5cGUsIFwic2hvd0hlYWRlclwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U2hvd0hlYWRlcigpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBvcHVwQmFzZVZpZXdNb2RlbC5wcm90b3R5cGUsIFwicG9wdXBIZWFkZXJUZW1wbGF0ZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UG9wdXBIZWFkZXJUZW1wbGF0ZSgpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBvcHVwQmFzZVZpZXdNb2RlbC5wcm90b3R5cGUsIFwiaXNPdmVybGF5XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb2RlbC5kaXNwbGF5TW9kZSA9PT0gXCJvdmVybGF5XCI7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUG9wdXBCYXNlVmlld01vZGVsLnByb3RvdHlwZSwgXCJzdHlsZUNsYXNzXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRTdHlsZUNsYXNzKCkudG9TdHJpbmcoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQb3B1cEJhc2VWaWV3TW9kZWwucHJvdG90eXBlLCBcImNhbmNlbEJ1dHRvblRleHRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphdGlvblN0cmluZyhcIm1vZGFsQ2FuY2VsQnV0dG9uVGV4dFwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQb3B1cEJhc2VWaWV3TW9kZWwucHJvdG90eXBlLCBcImZvb3RlclRvb2xiYXJcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5mb290ZXJUb29sYmFyVmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUZvb3RlckFjdGlvbkJhcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZm9vdGVyVG9vbGJhclZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUG9wdXBCYXNlVmlld01vZGVsLnByb3RvdHlwZS5vbktleURvd24gPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gXCJUYWJcIiB8fCBldmVudC5rZXlDb2RlID09PSA5KSB7XG4gICAgICAgICAgICB0aGlzLnRyYXBGb2N1cyhldmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZXZlbnQua2V5ID09PSBcIkVzY2FwZVwiIHx8IGV2ZW50LmtleUNvZGUgPT09IDI3KSB7XG4gICAgICAgICAgICB0aGlzLmhpZGVQb3B1cCgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBQb3B1cEJhc2VWaWV3TW9kZWwucHJvdG90eXBlLnRyYXBGb2N1cyA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICB2YXIgZm9jdXNhYmxlRWxlbWVudHMgPSB0aGlzLmNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKEZPQ1VTX0lOUFVUX1NFTEVDVE9SKTtcbiAgICAgICAgdmFyIGZpcnN0Rm9jdXNhYmxlRWxlbWVudCA9IGZvY3VzYWJsZUVsZW1lbnRzWzBdO1xuICAgICAgICB2YXIgbGFzdEZvY3VzYWJsZUVsZW1lbnQgPSBmb2N1c2FibGVFbGVtZW50c1tmb2N1c2FibGVFbGVtZW50cy5sZW5ndGggLSAxXTtcbiAgICAgICAgaWYgKGV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgICBpZiAoX3NldHRpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bXCJzZXR0aW5nc1wiXS5lbnZpcm9ubWVudC5yb290LmFjdGl2ZUVsZW1lbnQgPT09IGZpcnN0Rm9jdXNhYmxlRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGxhc3RGb2N1c2FibGVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChfc2V0dGluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1tcInNldHRpbmdzXCJdLmVudmlyb25tZW50LnJvb3QuYWN0aXZlRWxlbWVudCA9PT0gbGFzdEZvY3VzYWJsZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBmaXJzdEZvY3VzYWJsZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBQb3B1cEJhc2VWaWV3TW9kZWwucHJvdG90eXBlLnN3aXRjaEZvY3VzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5pc0ZvY3VzZWRDb250ZW50KSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzRmlyc3RJbnB1dCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuaXNGb2N1c2VkQ29udGFpbmVyKSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzQ29udGFpbmVyKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFBvcHVwQmFzZVZpZXdNb2RlbC5wcm90b3R5cGUudXBkYXRlT25TaG93aW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnByZXZBY3RpdmVFbGVtZW50ID0gX3NldHRpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bXCJzZXR0aW5nc1wiXS5lbnZpcm9ubWVudC5yb290LmFjdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGlmICh0aGlzLmlzT3ZlcmxheSkge1xuICAgICAgICAgICAgdGhpcy5yZXNldERpbWVuc2lvbnNBbmRQb3NpdGlvblN0eWxlUHJvcGVydGllcygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3dpdGNoRm9jdXMoKTtcbiAgICB9O1xuICAgIFBvcHVwQmFzZVZpZXdNb2RlbC5wcm90b3R5cGUudXBkYXRlT25IaWRpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzRm9jdXNlZENvbnRlbnQgJiYgdGhpcy5wcmV2QWN0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5wcmV2QWN0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBQb3B1cEJhc2VWaWV3TW9kZWwucHJvdG90eXBlLmZvY3VzQ29udGFpbmVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuY29udGFpbmVyKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIgcG9wdXAgPSB0aGlzLmNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKHRoaXMucG9wdXBTZWxlY3Rvcik7XG4gICAgICAgIHBvcHVwID09PSBudWxsIHx8IHBvcHVwID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwb3B1cC5mb2N1cygpO1xuICAgIH07XG4gICAgUG9wdXBCYXNlVmlld01vZGVsLnByb3RvdHlwZS5mb2N1c0ZpcnN0SW5wdXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFfdGhpcy5jb250YWluZXIpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdmFyIGVsID0gX3RoaXMuY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoX3RoaXMubW9kZWwuZm9jdXNGaXJzdElucHV0U2VsZWN0b3IgfHwgRk9DVVNfSU5QVVRfU0VMRUNUT1IpO1xuICAgICAgICAgICAgaWYgKCEhZWwpXG4gICAgICAgICAgICAgICAgZWwuZm9jdXMoKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBfdGhpcy5mb2N1c0NvbnRhaW5lcigpO1xuICAgICAgICB9LCAxMDApO1xuICAgIH07XG4gICAgUG9wdXBCYXNlVmlld01vZGVsLnByb3RvdHlwZS5jbGlja091dHNpZGUgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5oaWRlUG9wdXAoKTtcbiAgICAgICAgZXZlbnQgPT09IG51bGwgfHwgZXZlbnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH07XG4gICAgUG9wdXBCYXNlVmlld01vZGVsLnByb3RvdHlwZS5jYW5jZWwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMubW9kZWwub25DYW5jZWwoKTtcbiAgICAgICAgdGhpcy5oaWRlUG9wdXAoKTtcbiAgICB9O1xuICAgIFBvcHVwQmFzZVZpZXdNb2RlbC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG4gICAgICAgIGlmICh0aGlzLm1vZGVsKSB7XG4gICAgICAgICAgICB0aGlzLm1vZGVsLnVucmVnaXN0ZXJQcm9wZXJ0eUNoYW5nZWRIYW5kbGVycyhbXCJpc1Zpc2libGVcIl0sIFwiUG9wdXBCYXNlVmlld01vZGVsXCIgKyB0aGlzLnN1YnNjcmlwdGlvbklkKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoISF0aGlzLmNyZWF0ZWRDb250YWluZXIpIHtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlZENvbnRhaW5lci5yZW1vdmUoKTtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlZENvbnRhaW5lciA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoISF0aGlzLmZvb3RlclRvb2xiYXJWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5mb290ZXJUb29sYmFyVmFsdWUuZGlzcG9zZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVzZXRDb21wb25lbnRFbGVtZW50KCk7XG4gICAgfTtcbiAgICBQb3B1cEJhc2VWaWV3TW9kZWwucHJvdG90eXBlLmluaXRpYWxpemVQb3B1cENvbnRhaW5lciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbnRhaW5lcikge1xuICAgICAgICAgICAgdmFyIGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZWRDb250YWluZXIgPSBjb250YWluZXI7XG4gICAgICAgICAgICBPYmplY3QoX3V0aWxzX3V0aWxzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bXCJnZXRFbGVtZW50XCJdKShfc2V0dGluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1tcInNldHRpbmdzXCJdLmVudmlyb25tZW50LnBvcHVwTW91bnRDb250YWluZXIpLmFwcGVuZENoaWxkKGNvbnRhaW5lcik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFBvcHVwQmFzZVZpZXdNb2RlbC5wcm90b3R5cGUuc2V0Q29tcG9uZW50RWxlbWVudCA9IGZ1bmN0aW9uIChjb21wb25lbnRSb290LCB0YXJnZXRFbGVtZW50KSB7XG4gICAgICAgIGlmICghIWNvbXBvbmVudFJvb3QpIHtcbiAgICAgICAgICAgIHRoaXMuY29udGFpbmVyRWxlbWVudCA9IGNvbXBvbmVudFJvb3Q7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFBvcHVwQmFzZVZpZXdNb2RlbC5wcm90b3R5cGUucmVzZXRDb21wb25lbnRFbGVtZW50ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmNvbnRhaW5lckVsZW1lbnQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMucHJldkFjdGl2ZUVsZW1lbnQgPSB1bmRlZmluZWQ7XG4gICAgfTtcbiAgICBQb3B1cEJhc2VWaWV3TW9kZWwucHJvdG90eXBlLnByZXZlbnRTY3JvbGxPdXNpZGUgPSBmdW5jdGlvbiAoZXZlbnQsIGRlbHRhWSkge1xuICAgICAgICB2YXIgY3VycmVudEVsZW1lbnQgPSBldmVudC50YXJnZXQ7XG4gICAgICAgIHdoaWxlIChjdXJyZW50RWxlbWVudCAhPT0gdGhpcy5jb250YWluZXIpIHtcbiAgICAgICAgICAgIGlmICh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShjdXJyZW50RWxlbWVudCkub3ZlcmZsb3dZID09PSBcImF1dG9cIiAmJiBjdXJyZW50RWxlbWVudC5zY3JvbGxIZWlnaHQgIT09IGN1cnJlbnRFbGVtZW50Lm9mZnNldEhlaWdodCkge1xuICAgICAgICAgICAgICAgIHZhciBzY3JvbGxIZWlnaHQgPSBjdXJyZW50RWxlbWVudC5zY3JvbGxIZWlnaHQsIHNjcm9sbFRvcCA9IGN1cnJlbnRFbGVtZW50LnNjcm9sbFRvcCwgY2xpZW50SGVpZ2h0ID0gY3VycmVudEVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICAgICAgICAgICAgICAgIGlmICghKGRlbHRhWSA+IDAgJiYgTWF0aC5hYnMoc2Nyb2xsSGVpZ2h0IC0gY2xpZW50SGVpZ2h0IC0gc2Nyb2xsVG9wKSA8IDEpICYmICEoZGVsdGFZIDwgMCAmJiBzY3JvbGxUb3AgPD0gMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGN1cnJlbnRFbGVtZW50ID0gY3VycmVudEVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgICAgICAgfVxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH07XG4gICAgUG9wdXBCYXNlVmlld01vZGVsLlN1YnNjcmlwdGlvbklkID0gMDtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJwcm9wZXJ0eVwiXSkoeyBkZWZhdWx0VmFsdWU6IFwiMHB4XCIgfSlcbiAgICBdLCBQb3B1cEJhc2VWaWV3TW9kZWwucHJvdG90eXBlLCBcInRvcFwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QoX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcInByb3BlcnR5XCJdKSh7IGRlZmF1bHRWYWx1ZTogXCIwcHhcIiB9KVxuICAgIF0sIFBvcHVwQmFzZVZpZXdNb2RlbC5wcm90b3R5cGUsIFwibGVmdFwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QoX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcInByb3BlcnR5XCJdKSh7IGRlZmF1bHRWYWx1ZTogXCJhdXRvXCIgfSlcbiAgICBdLCBQb3B1cEJhc2VWaWV3TW9kZWwucHJvdG90eXBlLCBcImhlaWdodFwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QoX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcInByb3BlcnR5XCJdKSh7IGRlZmF1bHRWYWx1ZTogXCJhdXRvXCIgfSlcbiAgICBdLCBQb3B1cEJhc2VWaWV3TW9kZWwucHJvdG90eXBlLCBcIndpZHRoXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wicHJvcGVydHlcIl0pKHsgZGVmYXVsdFZhbHVlOiBcImF1dG9cIiB9KVxuICAgIF0sIFBvcHVwQmFzZVZpZXdNb2RlbC5wcm90b3R5cGUsIFwibWluV2lkdGhcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJwcm9wZXJ0eVwiXSkoeyBkZWZhdWx0VmFsdWU6IGZhbHNlIH0pXG4gICAgXSwgUG9wdXBCYXNlVmlld01vZGVsLnByb3RvdHlwZSwgXCJpc1Zpc2libGVcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJwcm9wZXJ0eVwiXSkoKVxuICAgIF0sIFBvcHVwQmFzZVZpZXdNb2RlbC5wcm90b3R5cGUsIFwibG9jYWxlXCIsIHZvaWQgMCk7XG4gICAgcmV0dXJuIFBvcHVwQmFzZVZpZXdNb2RlbDtcbn0oX2Jhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkJhc2VcIl0pKTtcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3BvcHVwLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3BvcHVwLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFBvcHVwTW9kZWwsIGNyZWF0ZURpYWxvZ09wdGlvbnMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUG9wdXBNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFBvcHVwTW9kZWw7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImNyZWF0ZURpYWxvZ09wdGlvbnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVEaWFsb2dPcHRpb25zOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYmFzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9iYXNlICovIFwiLi9zcmMvYmFzZS50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9qc29ub2JqZWN0ICovIFwiLi9zcmMvanNvbm9iamVjdC50c1wiKTtcbnZhciBfX2V4dGVuZHMgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xudmFyIF9fZGVjb3JhdGUgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufTtcblxuXG52YXIgUG9wdXBNb2RlbCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoUG9wdXBNb2RlbCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBQb3B1cE1vZGVsKGNvbnRlbnRDb21wb25lbnROYW1lLCBjb250ZW50Q29tcG9uZW50RGF0YSwgdmVydGljYWxQb3NpdGlvbiwgaG9yaXpvbnRhbFBvc2l0aW9uLCBzaG93UG9pbnRlciwgaXNNb2RhbCwgb25DYW5jZWwsIG9uQXBwbHksIG9uSGlkZSwgb25TaG93LCBjc3NDbGFzcywgdGl0bGUsIG9uRGlzcG9zZSkge1xuICAgICAgICBpZiAodmVydGljYWxQb3NpdGlvbiA9PT0gdm9pZCAwKSB7IHZlcnRpY2FsUG9zaXRpb24gPSBcImJvdHRvbVwiOyB9XG4gICAgICAgIGlmIChob3Jpem9udGFsUG9zaXRpb24gPT09IHZvaWQgMCkgeyBob3Jpem9udGFsUG9zaXRpb24gPSBcImxlZnRcIjsgfVxuICAgICAgICBpZiAoc2hvd1BvaW50ZXIgPT09IHZvaWQgMCkgeyBzaG93UG9pbnRlciA9IHRydWU7IH1cbiAgICAgICAgaWYgKGlzTW9kYWwgPT09IHZvaWQgMCkgeyBpc01vZGFsID0gZmFsc2U7IH1cbiAgICAgICAgaWYgKG9uQ2FuY2VsID09PSB2b2lkIDApIHsgb25DYW5jZWwgPSBmdW5jdGlvbiAoKSB7IH07IH1cbiAgICAgICAgaWYgKG9uQXBwbHkgPT09IHZvaWQgMCkgeyBvbkFwcGx5ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdHJ1ZTsgfTsgfVxuICAgICAgICBpZiAob25IaWRlID09PSB2b2lkIDApIHsgb25IaWRlID0gZnVuY3Rpb24gKCkgeyB9OyB9XG4gICAgICAgIGlmIChvblNob3cgPT09IHZvaWQgMCkgeyBvblNob3cgPSBmdW5jdGlvbiAoKSB7IH07IH1cbiAgICAgICAgaWYgKGNzc0NsYXNzID09PSB2b2lkIDApIHsgY3NzQ2xhc3MgPSBcIlwiOyB9XG4gICAgICAgIGlmICh0aXRsZSA9PT0gdm9pZCAwKSB7IHRpdGxlID0gXCJcIjsgfVxuICAgICAgICBpZiAob25EaXNwb3NlID09PSB2b2lkIDApIHsgb25EaXNwb3NlID0gZnVuY3Rpb24gKCkgeyB9OyB9XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLm9uRGlzcG9zZSA9IG9uRGlzcG9zZTtcbiAgICAgICAgX3RoaXMuZm9jdXNGaXJzdElucHV0U2VsZWN0b3IgPSBcIlwiO1xuICAgICAgICBfdGhpcy5vblZpc2liaWxpdHlDaGFuZ2VkID0gX3RoaXMuYWRkRXZlbnQoKTtcbiAgICAgICAgX3RoaXMub25Gb290ZXJBY3Rpb25zQ3JlYXRlZCA9IF90aGlzLmFkZEV2ZW50KCk7XG4gICAgICAgIF90aGlzLm9uUmVjYWxjdWxhdGVQb3NpdGlvbiA9IF90aGlzLmFkZEV2ZW50KCk7XG4gICAgICAgIF90aGlzLmNvbnRlbnRDb21wb25lbnROYW1lID0gY29udGVudENvbXBvbmVudE5hbWU7XG4gICAgICAgIF90aGlzLmNvbnRlbnRDb21wb25lbnREYXRhID0gY29udGVudENvbXBvbmVudERhdGE7XG4gICAgICAgIF90aGlzLnZlcnRpY2FsUG9zaXRpb24gPSB2ZXJ0aWNhbFBvc2l0aW9uO1xuICAgICAgICBfdGhpcy5ob3Jpem9udGFsUG9zaXRpb24gPSBob3Jpem9udGFsUG9zaXRpb247XG4gICAgICAgIF90aGlzLnNob3dQb2ludGVyID0gc2hvd1BvaW50ZXI7XG4gICAgICAgIF90aGlzLmlzTW9kYWwgPSBpc01vZGFsO1xuICAgICAgICBfdGhpcy5vbkNhbmNlbCA9IG9uQ2FuY2VsO1xuICAgICAgICBfdGhpcy5vbkFwcGx5ID0gb25BcHBseTtcbiAgICAgICAgX3RoaXMub25IaWRlID0gb25IaWRlO1xuICAgICAgICBfdGhpcy5vblNob3cgPSBvblNob3c7XG4gICAgICAgIF90aGlzLmNzc0NsYXNzID0gY3NzQ2xhc3M7XG4gICAgICAgIF90aGlzLnRpdGxlID0gdGl0bGU7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgUG9wdXBNb2RlbC5wcm90b3R5cGUucmVmcmVzaElubmVyTW9kZWwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBpbm5lck1vZGVsID0gdGhpcy5jb250ZW50Q29tcG9uZW50RGF0YVtcIm1vZGVsXCJdO1xuICAgICAgICBpbm5lck1vZGVsICYmIGlubmVyTW9kZWwucmVmcmVzaCAmJiBpbm5lck1vZGVsLnJlZnJlc2goKTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQb3B1cE1vZGVsLnByb3RvdHlwZSwgXCJpc1Zpc2libGVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpc1Zpc2libGVcIiwgZmFsc2UpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNWaXNpYmxlID09PSB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImlzVmlzaWJsZVwiLCB2YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLm9uVmlzaWJpbGl0eUNoYW5nZWQuZmlyZSh0aGlzLCB7IG1vZGVsOiB0aGlzLCBpc1Zpc2libGU6IHZhbHVlIH0pO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNWaXNpYmxlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vblNob3coKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaElubmVyTW9kZWwoKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uSGlkZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUG9wdXBNb2RlbC5wcm90b3R5cGUudG9nZ2xlVmlzaWJpbGl0eSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5pc1Zpc2libGUgPSAhdGhpcy5pc1Zpc2libGU7XG4gICAgfTtcbiAgICBQb3B1cE1vZGVsLnByb3RvdHlwZS5yZWNhbGN1bGF0ZVBvc2l0aW9uID0gZnVuY3Rpb24gKGlzUmVzZXRIZWlnaHQpIHtcbiAgICAgICAgdGhpcy5vblJlY2FsY3VsYXRlUG9zaXRpb24uZmlyZSh0aGlzLCB7IGlzUmVzZXRIZWlnaHQ6IGlzUmVzZXRIZWlnaHQgfSk7XG4gICAgfTtcbiAgICBQb3B1cE1vZGVsLnByb3RvdHlwZS51cGRhdGVGb290ZXJBY3Rpb25zID0gZnVuY3Rpb24gKGZvb3RlckFjdGlvbnMpIHtcbiAgICAgICAgdmFyIG9wdGlvbnMgPSB7IGFjdGlvbnM6IGZvb3RlckFjdGlvbnMgfTtcbiAgICAgICAgdGhpcy5vbkZvb3RlckFjdGlvbnNDcmVhdGVkLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBvcHRpb25zLmFjdGlvbnM7XG4gICAgfTtcbiAgICBQb3B1cE1vZGVsLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBfc3VwZXIucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcbiAgICAgICAgdGhpcy5vbkRpc3Bvc2UoKTtcbiAgICB9O1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QoX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcInByb3BlcnR5XCJdKSgpXG4gICAgXSwgUG9wdXBNb2RlbC5wcm90b3R5cGUsIFwiY29udGVudENvbXBvbmVudE5hbWVcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJwcm9wZXJ0eVwiXSkoKVxuICAgIF0sIFBvcHVwTW9kZWwucHJvdG90eXBlLCBcImNvbnRlbnRDb21wb25lbnREYXRhXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wicHJvcGVydHlcIl0pKHsgZGVmYXVsdFZhbHVlOiBcImJvdHRvbVwiIH0pXG4gICAgXSwgUG9wdXBNb2RlbC5wcm90b3R5cGUsIFwidmVydGljYWxQb3NpdGlvblwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QoX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcInByb3BlcnR5XCJdKSh7IGRlZmF1bHRWYWx1ZTogXCJsZWZ0XCIgfSlcbiAgICBdLCBQb3B1cE1vZGVsLnByb3RvdHlwZSwgXCJob3Jpem9udGFsUG9zaXRpb25cIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJwcm9wZXJ0eVwiXSkoeyBkZWZhdWx0VmFsdWU6IGZhbHNlIH0pXG4gICAgXSwgUG9wdXBNb2RlbC5wcm90b3R5cGUsIFwic2hvd1BvaW50ZXJcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJwcm9wZXJ0eVwiXSkoeyBkZWZhdWx0VmFsdWU6IGZhbHNlIH0pXG4gICAgXSwgUG9wdXBNb2RlbC5wcm90b3R5cGUsIFwiaXNNb2RhbFwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QoX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcInByb3BlcnR5XCJdKSh7IGRlZmF1bHRWYWx1ZTogdHJ1ZSB9KVxuICAgIF0sIFBvcHVwTW9kZWwucHJvdG90eXBlLCBcImlzRm9jdXNlZENvbnRlbnRcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJwcm9wZXJ0eVwiXSkoeyBkZWZhdWx0VmFsdWU6IHRydWUgfSlcbiAgICBdLCBQb3B1cE1vZGVsLnByb3RvdHlwZSwgXCJpc0ZvY3VzZWRDb250YWluZXJcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJwcm9wZXJ0eVwiXSkoeyBkZWZhdWx0VmFsdWU6IGZ1bmN0aW9uICgpIHsgfSB9KVxuICAgIF0sIFBvcHVwTW9kZWwucHJvdG90eXBlLCBcIm9uQ2FuY2VsXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wicHJvcGVydHlcIl0pKHsgZGVmYXVsdFZhbHVlOiBmdW5jdGlvbiAoKSB7IHJldHVybiB0cnVlOyB9IH0pXG4gICAgXSwgUG9wdXBNb2RlbC5wcm90b3R5cGUsIFwib25BcHBseVwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QoX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcInByb3BlcnR5XCJdKSh7IGRlZmF1bHRWYWx1ZTogZnVuY3Rpb24gKCkgeyB9IH0pXG4gICAgXSwgUG9wdXBNb2RlbC5wcm90b3R5cGUsIFwib25IaWRlXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wicHJvcGVydHlcIl0pKHsgZGVmYXVsdFZhbHVlOiBmdW5jdGlvbiAoKSB7IH0gfSlcbiAgICBdLCBQb3B1cE1vZGVsLnByb3RvdHlwZSwgXCJvblNob3dcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJwcm9wZXJ0eVwiXSkoeyBkZWZhdWx0VmFsdWU6IFwiXCIgfSlcbiAgICBdLCBQb3B1cE1vZGVsLnByb3RvdHlwZSwgXCJjc3NDbGFzc1wiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QoX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcInByb3BlcnR5XCJdKSh7IGRlZmF1bHRWYWx1ZTogXCJcIiB9KVxuICAgIF0sIFBvcHVwTW9kZWwucHJvdG90eXBlLCBcInRpdGxlXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wicHJvcGVydHlcIl0pKHsgZGVmYXVsdFZhbHVlOiBcInBvcHVwXCIgfSlcbiAgICBdLCBQb3B1cE1vZGVsLnByb3RvdHlwZSwgXCJkaXNwbGF5TW9kZVwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QoX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcInByb3BlcnR5XCJdKSh7IGRlZmF1bHRWYWx1ZTogXCJmbGV4XCIgfSlcbiAgICBdLCBQb3B1cE1vZGVsLnByb3RvdHlwZSwgXCJwb3NpdGlvbk1vZGVcIiwgdm9pZCAwKTtcbiAgICByZXR1cm4gUG9wdXBNb2RlbDtcbn0oX2Jhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkJhc2VcIl0pKTtcblxuZnVuY3Rpb24gY3JlYXRlRGlhbG9nT3B0aW9ucyhjb21wb25lbnROYW1lLCBkYXRhLCBvbkFwcGx5LCBvbkNhbmNlbCwgb25IaWRlLCBvblNob3csIGNzc0NsYXNzLCB0aXRsZSwgZGlzcGxheU1vZGUpIHtcbiAgICBpZiAob25IaWRlID09PSB2b2lkIDApIHsgb25IaWRlID0gZnVuY3Rpb24gKCkgeyB9OyB9XG4gICAgaWYgKG9uU2hvdyA9PT0gdm9pZCAwKSB7IG9uU2hvdyA9IGZ1bmN0aW9uICgpIHsgfTsgfVxuICAgIGlmIChkaXNwbGF5TW9kZSA9PT0gdm9pZCAwKSB7IGRpc3BsYXlNb2RlID0gXCJwb3B1cFwiOyB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgY29tcG9uZW50TmFtZTogY29tcG9uZW50TmFtZSxcbiAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgb25BcHBseTogb25BcHBseSxcbiAgICAgICAgb25DYW5jZWw6IG9uQ2FuY2VsLFxuICAgICAgICBvbkhpZGU6IG9uSGlkZSxcbiAgICAgICAgb25TaG93OiBvblNob3csXG4gICAgICAgIGNzc0NsYXNzOiBjc3NDbGFzcyxcbiAgICAgICAgdGl0bGU6IHRpdGxlLFxuICAgICAgICBkaXNwbGF5TW9kZTogZGlzcGxheU1vZGVcbiAgICB9O1xufVxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3F1ZXN0aW9uLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3F1ZXN0aW9uLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFF1ZXN0aW9uICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlF1ZXN0aW9uXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUXVlc3Rpb247IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9oZWxwZXJzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2hlbHBlcnMgKi8gXCIuL3NyYy9oZWxwZXJzLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2pzb25vYmplY3QgKi8gXCIuL3NyYy9qc29ub2JqZWN0LnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zdXJ2ZXlfZWxlbWVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9zdXJ2ZXktZWxlbWVudCAqLyBcIi4vc3JjL3N1cnZleS1lbGVtZW50LnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9lcnJvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9lcnJvciAqLyBcIi4vc3JjL2Vycm9yLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF92YWxpZGF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vdmFsaWRhdG9yICovIFwiLi9zcmMvdmFsaWRhdG9yLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9sb2NhbGl6YWJsZXN0cmluZ19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9sb2NhbGl6YWJsZXN0cmluZyAqLyBcIi4vc3JjL2xvY2FsaXphYmxlc3RyaW5nLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9jb25kaXRpb25zX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2NvbmRpdGlvbnMgKi8gXCIuL3NyYy9jb25kaXRpb25zLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9xdWVzdGlvbkN1c3RvbVdpZGdldHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcXVlc3Rpb25DdXN0b21XaWRnZXRzICovIFwiLi9zcmMvcXVlc3Rpb25DdXN0b21XaWRnZXRzLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9zZXR0aW5ncyAqLyBcIi4vc3JjL3NldHRpbmdzLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9yZW5kZXJlckZhY3RvcnlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcmVuZGVyZXJGYWN0b3J5ICovIFwiLi9zcmMvcmVuZGVyZXJGYWN0b3J5LnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF91dGlsc19jc3NDbGFzc0J1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3V0aWxzL2Nzc0NsYXNzQnVpbGRlciAqLyBcIi4vc3JjL3V0aWxzL2Nzc0NsYXNzQnVpbGRlci50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdXRpbHNfdXRpbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3V0aWxzL3V0aWxzICovIFwiLi9zcmMvdXRpbHMvdXRpbHMudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2NvbnNvbGVfd2FybmluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2NvbnNvbGUtd2FybmluZ3MgKi8gXCIuL3NyYy9jb25zb2xlLXdhcm5pbmdzLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9jb25kaXRpb25Qcm9jZXNzVmFsdWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2NvbmRpdGlvblByb2Nlc3NWYWx1ZSAqLyBcIi4vc3JjL2NvbmRpdGlvblByb2Nlc3NWYWx1ZS50c1wiKTtcbnZhciBfX2V4dGVuZHMgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xudmFyIF9fZGVjb3JhdGUgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufTtcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKipcbiAqIEEgYmFzZSBjbGFzcyBmb3IgYWxsIHF1ZXN0aW9ucy5cbiAqL1xudmFyIFF1ZXN0aW9uID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhRdWVzdGlvbiwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBRdWVzdGlvbihuYW1lKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG5hbWUpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmN1c3RvbVdpZGdldERhdGEgPSB7IGlzTmVlZFJlbmRlcjogdHJ1ZSB9O1xuICAgICAgICBfdGhpcy5pc1JlYWR5VmFsdWUgPSB0cnVlO1xuICAgICAgICBfdGhpcy5kZXBlbmRlZFF1ZXN0aW9ucyA9IFtdO1xuICAgICAgICAvKipcbiAgICAgICAgICogQW4gZXZlbnQgdGhhdCBpcyByYWlzZWQgd2hlbiB0aGUgcXVlc3Rpb24ncyByZWFkeSBzdGF0ZSBoYXMgY2hhbmdlZCAoZXhwcmVzc2lvbnMgYXJlIGV2YWx1YXRlZCwgY2hvaWNlcyBhcmUgbG9hZGVkIGZyb20gYSB3ZWIgcmVzb3VyY2Ugc3BlY2lmaWVkIGJ5IHRoZSBgY2hvaWNlc0J5VXJsYCBwcm9wZXJ0eSwgZXRjLikuXG4gICAgICAgICAqXG4gICAgICAgICAqIFBhcmFtZXRlcnM6XG4gICAgICAgICAqXG4gICAgICAgICAqIC0gYHNlbmRlcmA6IGBTdXJ2ZXlNb2RlbGBcXFxuICAgICAgICAgKiBBIHN1cnZleSBpbnN0YW5jZSB0aGF0IGNvbnRhaW5zIHRoZSBxdWVzdGlvbiB3aG9zZSByZWFkeSBzdGF0ZSBoYXMgY2hhbmdlZC5cbiAgICAgICAgICogLSBgb3B0aW9ucy5pc1JlYWR5YDogYEJvb2xlYW5gXFxcbiAgICAgICAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHF1ZXN0aW9uIGlzIHJlYWR5LlxuICAgICAgICAgKiAtIGBvcHRpb25zLm9sZElzUmVhZHlgOiBgQm9vbGVhbmBcXFxuICAgICAgICAgKiBJbmRpY2F0ZXMgdGhlIHByZXZpb3VzIHJlYWR5IHN0YXRlLlxuICAgICAgICAgKi9cbiAgICAgICAgX3RoaXMub25SZWFkeUNoYW5nZWQgPSBfdGhpcy5hZGRFdmVudCgpO1xuICAgICAgICBfdGhpcy5pc1J1bm5pbmdWYWxpZGF0b3JzVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgX3RoaXMuaXNWYWx1ZUNoYW5nZWRJblN1cnZleSA9IGZhbHNlO1xuICAgICAgICBfdGhpcy5hbGxvd05vdGlmeVZhbHVlQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgIF90aGlzLmlkID0gUXVlc3Rpb24uZ2V0UXVlc3Rpb25JZCgpO1xuICAgICAgICBfdGhpcy5vbkNyZWF0aW5nKCk7XG4gICAgICAgIF90aGlzLmNyZWF0ZU5ld0FycmF5KFwidmFsaWRhdG9yc1wiLCBmdW5jdGlvbiAodmFsaWRhdG9yKSB7XG4gICAgICAgICAgICB2YWxpZGF0b3IuZXJyb3JPd25lciA9IF90aGlzO1xuICAgICAgICB9KTtcbiAgICAgICAgX3RoaXMuYWRkRXhwcmVzc2lvblByb3BlcnR5KFwidmlzaWJsZUlmXCIsIGZ1bmN0aW9uIChvYmosIHJlcykgeyBfdGhpcy52aXNpYmxlID0gcmVzID09PSB0cnVlOyB9LCBmdW5jdGlvbiAob2JqKSB7IHJldHVybiAhX3RoaXMuYXJlSW52aXNpYmxlRWxlbWVudHNTaG93aW5nOyB9KTtcbiAgICAgICAgX3RoaXMuYWRkRXhwcmVzc2lvblByb3BlcnR5KFwiZW5hYmxlSWZcIiwgZnVuY3Rpb24gKG9iaiwgcmVzKSB7IF90aGlzLnJlYWRPbmx5ID0gcmVzID09PSBmYWxzZTsgfSk7XG4gICAgICAgIF90aGlzLmFkZEV4cHJlc3Npb25Qcm9wZXJ0eShcInJlcXVpcmVkSWZcIiwgZnVuY3Rpb24gKG9iaiwgcmVzKSB7IF90aGlzLmlzUmVxdWlyZWQgPSByZXMgPT09IHRydWU7IH0pO1xuICAgICAgICBfdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcImNvbW1lbnRUZXh0XCIsIF90aGlzLCB0cnVlLCBcIm90aGVySXRlbVRleHRcIik7XG4gICAgICAgIF90aGlzLmxvY1RpdGxlLm9uR2V0RGVmYXVsdFRleHRDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBfdGhpcy5uYW1lO1xuICAgICAgICB9O1xuICAgICAgICBfdGhpcy5sb2NUaXRsZS5zdG9yZURlZmF1bHRUZXh0ID0gdHJ1ZTtcbiAgICAgICAgX3RoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJyZXF1aXJlZEVycm9yVGV4dFwiLCBfdGhpcyk7XG4gICAgICAgIF90aGlzLnJlZ2lzdGVyUHJvcGVydHlDaGFuZ2VkSGFuZGxlcnMoW1wid2lkdGhcIl0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLnVwZGF0ZVF1ZXN0aW9uQ3NzKCk7XG4gICAgICAgICAgICBpZiAoISFfdGhpcy5wYXJlbnQpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5wYXJlbnQuZWxlbWVudFdpZHRoQ2hhbmdlZChfdGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBfdGhpcy5yZWdpc3RlclByb3BlcnR5Q2hhbmdlZEhhbmRsZXJzKFtcImlzUmVxdWlyZWRcIl0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghX3RoaXMuaXNSZXF1aXJlZCAmJiBfdGhpcy5lcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIF90aGlzLnZhbGlkYXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBfdGhpcy5sb2NUaXRsZS5zdHJDaGFuZ2VkKCk7XG4gICAgICAgICAgICBfdGhpcy5jbGVhckNzc0NsYXNzZXMoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIF90aGlzLnJlZ2lzdGVyUHJvcGVydHlDaGFuZ2VkSGFuZGxlcnMoW1wiaW5kZW50XCIsIFwicmlnaHRJbmRlbnRcIl0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLm9uSW5kZW50Q2hhbmdlZCgpO1xuICAgICAgICB9KTtcbiAgICAgICAgX3RoaXMucmVnaXN0ZXJQcm9wZXJ0eUNoYW5nZWRIYW5kbGVycyhbXCJzaG93Q29tbWVudEFyZWFcIiwgXCJzaG93T3RoZXJJdGVtXCJdLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5pbml0Q29tbWVudEZyb21TdXJ2ZXkoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIF90aGlzLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnRpZXNWYWx1ZUNoYW5nZWQoW1wibm9cIiwgXCJyZWFkT25seVwiXSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMudXBkYXRlUXVlc3Rpb25Dc3MoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIF90aGlzLnJlZ2lzdGVyUHJvcGVydHlDaGFuZ2VkSGFuZGxlcnMoW1wiaXNNb2JpbGVcIl0sIGZ1bmN0aW9uICgpIHsgX3RoaXMub25Nb2JpbGVDaGFuZ2VkKCk7IH0pO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFF1ZXN0aW9uLmdldFF1ZXN0aW9uSWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBcInNxX1wiICsgUXVlc3Rpb24ucXVlc3Rpb25Db3VudGVyKys7XG4gICAgfTtcbiAgICBRdWVzdGlvbi5wcm90b3R5cGUuaXNSZWFkT25seVJlbmRlckRpdiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNSZWFkT25seSAmJiBfc2V0dGluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1tcInNldHRpbmdzXCJdLnJlYWRPbmx5LmNvbW1lbnRSZW5kZXJNb2RlID09PSBcImRpdlwiO1xuICAgIH07XG4gICAgUXVlc3Rpb24ucHJvdG90eXBlLmFsbG93TW9iaWxlSW5EZXNpZ25Nb2RlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgICBRdWVzdGlvbi5wcm90b3R5cGUudXBkYXRlSXNNb2JpbGVGcm9tU3VydmV5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnNldElzTW9iaWxlKHRoaXMuc3VydmV5Ll9pc01vYmlsZSk7XG4gICAgfTtcbiAgICBRdWVzdGlvbi5wcm90b3R5cGUuc2V0SXNNb2JpbGUgPSBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgIHRoaXMuaXNNb2JpbGUgPSB2YWwgJiYgKHRoaXMuYWxsb3dNb2JpbGVJbkRlc2lnbk1vZGUoKSB8fCAhdGhpcy5pc0Rlc2lnbk1vZGUpO1xuICAgICAgICB0aGlzLnJlbmRlck1pbldpZHRoID0gIXZhbDtcbiAgICB9O1xuICAgIFF1ZXN0aW9uLnByb3RvdHlwZS5jcmVhdGVMb2NUaXRsZVByb3BlcnR5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgbG9jVGl0bGVWYWx1ZSA9IF9zdXBlci5wcm90b3R5cGUuY3JlYXRlTG9jVGl0bGVQcm9wZXJ0eS5jYWxsKHRoaXMpO1xuICAgICAgICBsb2NUaXRsZVZhbHVlLm9uR2V0VGV4dENhbGxiYWNrID0gZnVuY3Rpb24gKHRleHQpIHtcbiAgICAgICAgICAgIGlmICghdGV4dCkge1xuICAgICAgICAgICAgICAgIHRleHQgPSBfdGhpcy5uYW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFfdGhpcy5zdXJ2ZXkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgICAgICAgICByZXR1cm4gX3RoaXMuc3VydmV5LmdldFVwZGF0ZWRRdWVzdGlvblRpdGxlKF90aGlzLCB0ZXh0KTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5sb2NQcm9jZXNzZWRUaXRsZSA9IG5ldyBfbG9jYWxpemFibGVzdHJpbmdfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1tcIkxvY2FsaXphYmxlU3RyaW5nXCJdKHRoaXMsIHRydWUpO1xuICAgICAgICB0aGlzLmxvY1Byb2Nlc3NlZFRpdGxlLnNoYXJlZERhdGEgPSBsb2NUaXRsZVZhbHVlO1xuICAgICAgICByZXR1cm4gbG9jVGl0bGVWYWx1ZTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uLnByb3RvdHlwZS5nZXRTdXJ2ZXkgPSBmdW5jdGlvbiAobGl2ZSkge1xuICAgICAgICBpZiAobGl2ZSA9PT0gdm9pZCAwKSB7IGxpdmUgPSBmYWxzZTsgfVxuICAgICAgICBpZiAobGl2ZSkge1xuICAgICAgICAgICAgcmV0dXJuICEhdGhpcy5wYXJlbnQgPyB0aGlzLnBhcmVudC5nZXRTdXJ2ZXkobGl2ZSkgOiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICghIXRoaXMub25HZXRTdXJ2ZXkpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5vbkdldFN1cnZleSgpO1xuICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5nZXRTdXJ2ZXkuY2FsbCh0aGlzKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uLnByb3RvdHlwZS5nZXRWYWx1ZU5hbWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghIXRoaXMudmFsdWVOYW1lKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVOYW1lLnRvU3RyaW5nKCk7XG4gICAgICAgIHJldHVybiB0aGlzLm5hbWU7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb24ucHJvdG90eXBlLCBcInZhbHVlTmFtZVwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgYW4gb2JqZWN0IHByb3BlcnR5IHRoYXQgc2hvdWxkIHN0b3JlIHRoZSBxdWVzdGlvbiB2YWx1ZS5cbiAgICAgICAgICpcbiAgICAgICAgICogUmVmZXIgdG8gdGhlIFtNZXJnZSBRdWVzdGlvbiBWYWx1ZXNdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vZGVzaWduLXN1cnZleS1tZXJnZS1xdWVzdGlvbi12YWx1ZXMpIGhlbHAgdG9waWMgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ2YWx1ZU5hbWVcIiwgXCJcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdmFyIG9sZFZhbHVlTmFtZSA9IHRoaXMuZ2V0VmFsdWVOYW1lKCk7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJ2YWx1ZU5hbWVcIiwgdmFsKTtcbiAgICAgICAgICAgIHRoaXMub25WYWx1ZU5hbWVDaGFuZ2VkKG9sZFZhbHVlTmFtZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBRdWVzdGlvbi5wcm90b3R5cGUub25WYWx1ZU5hbWVDaGFuZ2VkID0gZnVuY3Rpb24gKG9sZFZhbHVlKSB7XG4gICAgICAgIGlmICghdGhpcy5zdXJ2ZXkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMuc3VydmV5LnF1ZXN0aW9uUmVuYW1lZCh0aGlzLCB0aGlzLm5hbWUsICEhb2xkVmFsdWUgPyBvbGRWYWx1ZSA6IHRoaXMubmFtZSk7XG4gICAgICAgIHRoaXMuaW5pdERhdGFGcm9tU3VydmV5KCk7XG4gICAgfTtcbiAgICBRdWVzdGlvbi5wcm90b3R5cGUub25OYW1lQ2hhbmdlZCA9IGZ1bmN0aW9uIChvbGRWYWx1ZSkge1xuICAgICAgICB0aGlzLmxvY1RpdGxlLnN0ckNoYW5nZWQoKTtcbiAgICAgICAgaWYgKCF0aGlzLnN1cnZleSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5zdXJ2ZXkucXVlc3Rpb25SZW5hbWVkKHRoaXMsIG9sZFZhbHVlLCB0aGlzLnZhbHVlTmFtZSA/IHRoaXMudmFsdWVOYW1lIDogb2xkVmFsdWUpO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uLnByb3RvdHlwZSwgXCJpc1JlYWR5XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pc1JlYWR5VmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBRdWVzdGlvbi5wcm90b3R5cGUub25Bc3luY1J1bm5pbmdDaGFuZ2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnVwZGF0ZUlzUmVhZHkoKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uLnByb3RvdHlwZS51cGRhdGVJc1JlYWR5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcmVzID0gdGhpcy5nZXRJc1F1ZXN0aW9uUmVhZHkoKTtcbiAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMuZ2V0SXNSZWFkeURlcGVuZHNPbigpO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoIXF1ZXN0aW9uc1tpXS5nZXRJc1F1ZXN0aW9uUmVhZHkoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXMgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0SXNSZWFkeShyZXMpO1xuICAgIH07XG4gICAgUXVlc3Rpb24ucHJvdG90eXBlLmdldElzUXVlc3Rpb25SZWFkeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmlzQXN5bmNFeHByZXNzaW9uUnVubmluZyAmJiB0aGlzLmdldEFyZU5lc3RlZFF1ZXN0aW9uc1JlYWR5KCk7XG4gICAgfTtcbiAgICBRdWVzdGlvbi5wcm90b3R5cGUuZ2V0QXJlTmVzdGVkUXVlc3Rpb25zUmVhZHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLmdldElzUmVhZHlOZXN0ZWRRdWVzdGlvbnMoKTtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHF1ZXN0aW9ucykpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICghcXVlc3Rpb25zW2ldLmlzUmVhZHkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG4gICAgUXVlc3Rpb24ucHJvdG90eXBlLmdldElzUmVhZHlOZXN0ZWRRdWVzdGlvbnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldE5lc3RlZFF1ZXN0aW9ucygpO1xuICAgIH07XG4gICAgUXVlc3Rpb24ucHJvdG90eXBlLnNldElzUmVhZHkgPSBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgIHZhciBvbGRJc1JlYWR5ID0gdGhpcy5pc1JlYWR5VmFsdWU7XG4gICAgICAgIHRoaXMuaXNSZWFkeVZhbHVlID0gdmFsO1xuICAgICAgICBpZiAob2xkSXNSZWFkeSAhPSB2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0SXNSZWFkeURlcGVuZGVuZHMoKS5mb3JFYWNoKGZ1bmN0aW9uIChxKSB7IHJldHVybiBxLnVwZGF0ZUlzUmVhZHkoKTsgfSk7XG4gICAgICAgICAgICB0aGlzLm9uUmVhZHlDaGFuZ2VkLmZpcmUodGhpcywge1xuICAgICAgICAgICAgICAgIHF1ZXN0aW9uOiB0aGlzLFxuICAgICAgICAgICAgICAgIGlzUmVhZHk6IHZhbCxcbiAgICAgICAgICAgICAgICBvbGRJc1JlYWR5OiBvbGRJc1JlYWR5LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFF1ZXN0aW9uLnByb3RvdHlwZS5nZXRJc1JlYWR5RGVwZW5kc09uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRJc1JlYWR5RGVwZW5kZW5kQ29yZSh0cnVlKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uLnByb3RvdHlwZS5nZXRJc1JlYWR5RGVwZW5kZW5kcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0SXNSZWFkeURlcGVuZGVuZENvcmUoZmFsc2UpO1xuICAgIH07XG4gICAgUXVlc3Rpb24ucHJvdG90eXBlLmdldElzUmVhZHlEZXBlbmRlbmRDb3JlID0gZnVuY3Rpb24gKGlzRGVwZW5kT24pIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgaWYgKCF0aGlzLnN1cnZleSlcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMuc3VydmV5LnF1ZXN0aW9uc0J5VmFsdWVOYW1lKHRoaXMuZ2V0VmFsdWVOYW1lKCkpO1xuICAgICAgICB2YXIgcmVzID0gbmV3IEFycmF5KCk7XG4gICAgICAgIHF1ZXN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChxKSB7IGlmIChxICE9PSBfdGhpcylcbiAgICAgICAgICAgIHJlcy5wdXNoKHEpOyB9KTtcbiAgICAgICAgaWYgKCFpc0RlcGVuZE9uKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wYXJlbnRRdWVzdGlvbikge1xuICAgICAgICAgICAgICAgIHJlcy5wdXNoKHRoaXMucGFyZW50UXVlc3Rpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuZGVwZW5kZWRRdWVzdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVwZW5kZWRRdWVzdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAocSkgeyByZXR1cm4gcmVzLnB1c2gocSk7IH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfTtcbiAgICBRdWVzdGlvbi5wcm90b3R5cGUuY2hvaWNlc0xvYWRlZCA9IGZ1bmN0aW9uICgpIHsgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb24ucHJvdG90eXBlLCBcInBhZ2VcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJucyBhIHBhZ2UgdG8gd2hpY2ggdGhlIHF1ZXN0aW9uIGJlbG9uZ3MgYW5kIGFsbG93cyB5b3UgdG8gbW92ZSB0aGlzIHF1ZXN0aW9uIHRvIGEgZGlmZmVyZW50IHBhZ2UuXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghIXRoaXMucGFyZW50UXVlc3Rpb24pXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50UXVlc3Rpb24ucGFnZTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFBhZ2UodGhpcy5wYXJlbnQpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UGFnZSh0aGlzLnBhcmVudCwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFF1ZXN0aW9uLnByb3RvdHlwZS5nZXRQYW5lbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgICBRdWVzdGlvbi5wcm90b3R5cGUuZGVsZXRlID0gZnVuY3Rpb24gKGRvRGlzcG9zZSkge1xuICAgICAgICBpZiAoZG9EaXNwb3NlID09PSB2b2lkIDApIHsgZG9EaXNwb3NlID0gdHJ1ZTsgfVxuICAgICAgICB0aGlzLnJlbW92ZUZyb21QYXJlbnQoKTtcbiAgICAgICAgaWYgKGRvRGlzcG9zZSkge1xuICAgICAgICAgICAgdGhpcy5kaXNwb3NlKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0RGVwZW5kZWRRdWVzdGlvbnMoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgUXVlc3Rpb24ucHJvdG90eXBlLnJlbW92ZUZyb21QYXJlbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghIXRoaXMucGFyZW50KSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZVNlbGZGcm9tTGlzdCh0aGlzLnBhcmVudC5lbGVtZW50cyk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFF1ZXN0aW9uLnByb3RvdHlwZS5hZGREZXBlbmRlZFF1ZXN0aW9uID0gZnVuY3Rpb24gKHF1ZXN0aW9uKSB7XG4gICAgICAgIGlmICghcXVlc3Rpb24gfHwgdGhpcy5kZXBlbmRlZFF1ZXN0aW9ucy5pbmRleE9mKHF1ZXN0aW9uKSA+IC0xKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLmRlcGVuZGVkUXVlc3Rpb25zLnB1c2gocXVlc3Rpb24pO1xuICAgIH07XG4gICAgUXVlc3Rpb24ucHJvdG90eXBlLnJlbW92ZURlcGVuZGVkUXVlc3Rpb24gPSBmdW5jdGlvbiAocXVlc3Rpb24pIHtcbiAgICAgICAgaWYgKCFxdWVzdGlvbilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5kZXBlbmRlZFF1ZXN0aW9ucy5pbmRleE9mKHF1ZXN0aW9uKTtcbiAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIHRoaXMuZGVwZW5kZWRRdWVzdGlvbnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgUXVlc3Rpb24ucHJvdG90eXBlLnVwZGF0ZURlcGVuZGVkUXVlc3Rpb25zID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZGVwZW5kZWRRdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuZGVwZW5kZWRRdWVzdGlvbnNbaV0udXBkYXRlRGVwZW5kZWRRdWVzdGlvbigpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBRdWVzdGlvbi5wcm90b3R5cGUudXBkYXRlRGVwZW5kZWRRdWVzdGlvbiA9IGZ1bmN0aW9uICgpIHsgfTtcbiAgICBRdWVzdGlvbi5wcm90b3R5cGUucmVzZXREZXBlbmRlZFF1ZXN0aW9uID0gZnVuY3Rpb24gKCkgeyB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbi5wcm90b3R5cGUsIFwiaXNGbG93TGF5b3V0XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRMYXlvdXRUeXBlKCkgPT09IFwiZmxvd1wiO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUXVlc3Rpb24ucHJvdG90eXBlLmdldExheW91dFR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghIXRoaXMucGFyZW50KVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50LmdldENoaWxkcmVuTGF5b3V0VHlwZSgpO1xuICAgICAgICByZXR1cm4gXCJyb3dcIjtcbiAgICB9O1xuICAgIFF1ZXN0aW9uLnByb3RvdHlwZS5pc0xheW91dFR5cGVTdXBwb3J0ZWQgPSBmdW5jdGlvbiAobGF5b3V0VHlwZSkge1xuICAgICAgICByZXR1cm4gbGF5b3V0VHlwZSAhPT0gXCJmbG93XCI7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb24ucHJvdG90eXBlLCBcInZpc2libGVcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogR2V0cyBvciBzZXRzIHF1ZXN0aW9uIHZpc2liaWxpdHkuXG4gICAgICAgICAqXG4gICAgICAgICAqIElmIHlvdSB3YW50IHRvIGRpc3BsYXkgb3IgaGlkZSBhIHF1ZXN0aW9uIGJhc2VkIG9uIGEgY29uZGl0aW9uLCBzcGVjaWZ5IHRoZSBbYHZpc2libGVJZmBdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vcXVlc3Rpb24jdmlzaWJsZUlmKSBwcm9wZXJ0eS4gUmVmZXIgdG8gdGhlIGZvbGxvd2luZyBoZWxwIHRvcGljIGZvciBpbmZvcm1hdGlvbjogW0NvbmRpdGlvbmFsIFZpc2liaWxpdHldKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vZGVzaWduLXN1cnZleS1jb25kaXRpb25hbC1sb2dpYyNjb25kaXRpb25hbC12aXNpYmlsaXR5KS5cbiAgICAgICAgICogQHNlZSBpc1Zpc2libGVcbiAgICAgICAgICogQHNlZSB2aXNpYmxlSWZcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInZpc2libGVcIiwgdHJ1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgaWYgKHZhbCA9PSB0aGlzLnZpc2libGUpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidmlzaWJsZVwiLCB2YWwpO1xuICAgICAgICAgICAgdGhpcy5vblZpc2libGVDaGFuZ2VkKCk7XG4gICAgICAgICAgICB0aGlzLm5vdGlmeVN1cnZleVZpc2liaWxpdHlDaGFuZ2VkKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBRdWVzdGlvbi5wcm90b3R5cGUub25WaXNpYmxlQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy51cGRhdGVJc1Zpc2libGVQcm9wKCk7XG4gICAgICAgIGlmICghdGhpcy5pc1Zpc2libGUgJiYgdGhpcy5lcnJvcnMgJiYgdGhpcy5lcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5lcnJvcnMgPSBbXTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgUXVlc3Rpb24ucHJvdG90eXBlLm5vdGlmeVN0YXRlQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5ub3RpZnlTdGF0ZUNoYW5nZWQuY2FsbCh0aGlzKTtcbiAgICAgICAgaWYgKHRoaXMuaXNDb2xsYXBzZWQpIHtcbiAgICAgICAgICAgIHRoaXMub25IaWRpbmdDb250ZW50KCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFF1ZXN0aW9uLnByb3RvdHlwZS51cGRhdGVJc1Zpc2libGVQcm9wID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcHJldiA9IHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImlzVmlzaWJsZVwiKTtcbiAgICAgICAgdmFyIHZhbCA9IHRoaXMuaXNWaXNpYmxlO1xuICAgICAgICBpZiAocHJldiAhPT0gdmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpc1Zpc2libGVcIiwgdmFsKTtcbiAgICAgICAgICAgIGlmICghdmFsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkhpZGluZ0NvbnRlbnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uLnByb3RvdHlwZSwgXCJ1c2VEaXNwbGF5VmFsdWVzSW5EeW5hbWljVGV4dHNcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHdoZXRoZXIgdG8gdXNlIGRpc3BsYXkgbmFtZXMgZm9yIHF1ZXN0aW9uIHZhbHVlcyBpbiBwbGFjZWhvbGRlcnMuXG4gICAgICAgICAqXG4gICAgICAgICAqIERlZmF1bHQgdmFsdWU6IGB0cnVlYFxuICAgICAgICAgKlxuICAgICAgICAgKiBUaGlzIHByb3BlcnR5IGFwcGxpZXMgdG8gcXVlc3Rpb25zIHdob3NlIHZhbHVlcyBhcmUgZGVmaW5lZCBhcyBvYmplY3RzIHdpdGggdGhlIGB2YWx1ZWAgYW5kIGB0ZXh0YCBwcm9wZXJ0aWVzIChmb3IgZXhhbXBsZSwgW2Nob2ljZSBpdGVtc10oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9xdWVzdGlvbnJhZGlvZ3JvdXBtb2RlbCNjaG9pY2VzKSBpbiBSYWRpb2dyb3VwLCBDaGVja2JveCwgYW5kIERyb3Bkb3duIHF1ZXN0aW9ucykuXG4gICAgICAgICAqXG4gICAgICAgICAqIFlvdSBjYW4gdXNlIHF1ZXN0aW9uIHZhbHVlcyBhcyBwbGFjZWhvbGRlcnMgaW4gdGhlIGZvbGxvd2luZyBwbGFjZXM6XG4gICAgICAgICAqXG4gICAgICAgICAqIC0gU3VydmV5IGVsZW1lbnQgdGl0bGVzIGFuZCBkZXNjcmlwdGlvbnNcbiAgICAgICAgICogLSBUaGUgW2BodG1sYF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9xdWVzdGlvbmh0bWxtb2RlbCNodG1sKSBwcm9wZXJ0eSBvZiB0aGUgW0hUTUxdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vcXVlc3Rpb25odG1sbW9kZWwpIHF1ZXN0aW9uXG4gICAgICAgICAqXG4gICAgICAgICAqIFRvIHVzZSBhIHF1ZXN0aW9uIHZhbHVlIGFzIGEgcGxhY2Vob2xkZXIsIHNwZWNpZnkgdGhlIHF1ZXN0aW9uIGBuYW1lYCBpbiBjdXJseSBicmFja2V0czogYHtxdWVzdGlvbk5hbWV9YC4gUmVmZXIgdG8gdGhlIGZvbGxvd2luZyBoZWxwIHRvcGljIGZvciBtb3JlIGluZm9ybWF0aW9uOiBbRHluYW1pYyBUZXh0cyAtIFF1ZXN0aW9uIFZhbHVlc10oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9kZXNpZ24tc3VydmV5LWNvbmRpdGlvbmFsLWxvZ2ljI3F1ZXN0aW9uLXZhbHVlcykuXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ1c2VEaXNwbGF5VmFsdWVzSW5EeW5hbWljVGV4dHNcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidXNlRGlzcGxheVZhbHVlc0luRHluYW1pY1RleHRzXCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBRdWVzdGlvbi5wcm90b3R5cGUuZ2V0VXNlRGlzcGxheVZhbHVlc0luRHluYW1pY1RleHRzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy51c2VEaXNwbGF5VmFsdWVzSW5EeW5hbWljVGV4dHM7IH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uLnByb3RvdHlwZSwgXCJ2aXNpYmxlSWZcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogQSBCb29sZWFuIGV4cHJlc3Npb24uIElmIGl0IGV2YWx1YXRlcyB0byBgZmFsc2VgLCB0aGlzIHF1ZXN0aW9uIGJlY29tZXMgaGlkZGVuLlxuICAgICAgICAgKlxuICAgICAgICAgKiBBIHN1cnZleSBwYXJzZXMgYW5kIHJ1bnMgYWxsIGV4cHJlc3Npb25zIG9uIHN0YXJ0dXAuIElmIGFueSB2YWx1ZXMgdXNlZCBpbiB0aGUgZXhwcmVzc2lvbiBjaGFuZ2UsIHRoZSBzdXJ2ZXkgcmUtZXZhbHVhdGVzIGl0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBSZWZlciB0byB0aGUgZm9sbG93aW5nIGhlbHAgdG9waWMgZm9yIG1vcmUgaW5mb3JtYXRpb246IFtDb25kaXRpb25hbCBWaXNpYmlsaXR5XShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2Rlc2lnbi1zdXJ2ZXktY29uZGl0aW9uYWwtbG9naWMjY29uZGl0aW9uYWwtdmlzaWJpbGl0eSlcbiAgICAgICAgICogQHNlZSB2aXNpYmxlXG4gICAgICAgICAqIEBzZWUgaXNWaXNpYmxlXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ2aXNpYmxlSWZcIiwgXCJcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidmlzaWJsZUlmXCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb24ucHJvdG90eXBlLCBcImlzVmlzaWJsZVwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgcXVlc3Rpb24gaXMgdmlzaWJsZSBvciB0aGUgc3VydmV5IGlzIGN1cnJlbnRseSBpbiBkZXNpZ24gbW9kZS5cbiAgICAgICAgICpcbiAgICAgICAgICogSWYgeW91IHdhbnQgdG8gZGlzcGxheSBvciBoaWRlIGEgcXVlc3Rpb24gYmFzZWQgb24gYSBjb25kaXRpb24sIHNwZWNpZnkgdGhlIFtgdmlzaWJsZUlmYF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9xdWVzdGlvbiN2aXNpYmxlSWYpIHByb3BlcnR5LiBSZWZlciB0byB0aGUgZm9sbG93aW5nIGhlbHAgdG9waWMgZm9yIGluZm9ybWF0aW9uOiBbQ29uZGl0aW9uYWwgVmlzaWJpbGl0eV0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9kZXNpZ24tc3VydmV5LWNvbmRpdGlvbmFsLWxvZ2ljI2NvbmRpdGlvbmFsLXZpc2liaWxpdHkpLlxuICAgICAgICAgKiBAc2VlIHZpc2libGVJZlxuICAgICAgICAgKiBAc2VlIHZpc2libGVcbiAgICAgICAgICogQHNlZSBpc1BhcmVudFZpc2libGVcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuc3VydmV5ICYmIHRoaXMuc3VydmV5LmFyZUVtcHR5RWxlbWVudHNIaWRkZW4gJiYgdGhpcy5pc0VtcHR5KCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgaWYgKHRoaXMuYXJlSW52aXNpYmxlRWxlbWVudHNTaG93aW5nKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNWaXNpYmxlQ29yZSgpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uLnByb3RvdHlwZSwgXCJpc1Zpc2libGVJblN1cnZleVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNWaXNpYmxlICYmIHRoaXMuaXNQYXJlbnRWaXNpYmxlO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUXVlc3Rpb24ucHJvdG90eXBlLmlzVmlzaWJsZUNvcmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpc2libGU7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb24ucHJvdG90eXBlLCBcInZpc2libGVJbmRleFwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIHRoZSB2aXNpYmxlIGluZGV4IG9mIHRoZSBxdWVzdGlvbiBpbiB0aGUgc3VydmV5LiBJdCBjYW4gYmUgZnJvbSAwIHRvIGFsbCB2aXNpYmxlIHF1ZXN0aW9ucyBjb3VudCAtIDFcbiAgICAgICAgICogVGhlIHZpc2libGVJbmRleCBpcyAtMSBpZiB0aGUgdGl0bGUgaXMgJ2hpZGRlbicgb3IgaGlkZU51bWJlciBpcyB0cnVlXG4gICAgICAgICAqIEBzZWUgdGl0bGVMb2NhdGlvblxuICAgICAgICAgKiBAc2VlIGhpZGVOdW1iZXJcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInZpc2libGVJbmRleFwiLCAtMSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBRdWVzdGlvbi5wcm90b3R5cGUub25IaWRpbmdDb250ZW50ID0gZnVuY3Rpb24gKCkgeyB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbi5wcm90b3R5cGUsIFwiaGlkZU51bWJlclwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBIaWRlcyB0aGUgcXVlc3Rpb24gbnVtYmVyIGZyb20gdGhlIHRpdGxlIGFuZCBleGNsdWRlcyB0aGUgcXVlc3Rpb24gZnJvbSBudW1iZXJpbmcuXG4gICAgICAgICAqXG4gICAgICAgICAqIElmIHlvdSB3YW50IHRvIGRpc2FibGUgcXVlc3Rpb24gbnVtYmVyaW5nIGluIHRoZSBlbnRpcmUgc3VydmV5LCBzZXQgYFN1cnZleU1vZGVsYCdzIGBzaG93UXVlc3Rpb25OdW1iZXJzYCBwcm9wZXJ0eSB0byBgZmFsc2VgLlxuICAgICAgICAgKiBAc2VlIFN1cnZleU1vZGVsLnNob3dRdWVzdGlvbk51bWJlcnNcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImhpZGVOdW1iZXJcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaGlkZU51bWJlclwiLCB2YWwpO1xuICAgICAgICAgICAgdGhpcy5ub3RpZnlTdXJ2ZXlWaXNpYmlsaXR5Q2hhbmdlZCgpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uLnByb3RvdHlwZSwgXCJpc0FsbG93VGl0bGVMZWZ0XCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgYHRydWVgIGlmIHRoZSBxdWVzdGlvbiBjYW4gZGlzcGxheSBpdHMgdGl0bGUgdG8gdGhlIGxlZnQgb2YgdGhlIGlucHV0IGZpZWxkLlxuICAgICAgICAgKiBAc2VlIHRpdGxlTG9jYXRpb25cbiAgICAgICAgICogQHNlZSBnZXRUaXRsZUxvY2F0aW9uXG4gICAgICAgICAqIEBzZWUgaGFzVGl0bGVcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBxdWVzdGlvbiB0eXBlLlxuICAgICAqIFBvc3NpYmxlIHZhbHVlczpcbiAgICAgKiAtIFsqXCJib29sZWFuXCIqXShodHRwczovL3N1cnZleWpzLmlvL0RvY3VtZW50YXRpb24vTGlicmFyeT9pZD1xdWVzdGlvbmJvb2xlYW5tb2RlbClcbiAgICAgKiAtIFsqXCJjaGVja2JveFwiKl0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9Eb2N1bWVudGF0aW9uL0xpYnJhcnk/aWQ9cXVlc3Rpb25jaGVja2JveG1vZGVsKVxuICAgICAqIC0gWypcImNvbW1lbnRcIipdKGh0dHBzOi8vc3VydmV5anMuaW8vRG9jdW1lbnRhdGlvbi9MaWJyYXJ5P2lkPXF1ZXN0aW9uY29tbWVudG1vZGVsKVxuICAgICAqIC0gWypcImRyb3Bkb3duXCIqXShodHRwczovL3N1cnZleWpzLmlvL0RvY3VtZW50YXRpb24vTGlicmFyeT9pZD1xdWVzdGlvbmRyb3Bkb3dubW9kZWwpXG4gICAgICogLSBbKlwidGFnYm94XCIqXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL3F1ZXN0aW9udGFnYm94bW9kZWwpXG4gICAgICogLSBbKlwiZXhwcmVzc2lvblwiKl0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9Eb2N1bWVudGF0aW9uL0xpYnJhcnk/aWQ9cXVlc3Rpb25leHByZXNzaW9ubW9kZWwpXG4gICAgICogLSBbKlwiZmlsZVwiKl0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9Eb2N1bWVudGF0aW9uL0xpYnJhcnk/aWQ9cXVlc3Rpb25maWxlbW9kZWwpXG4gICAgICogLSBbKlwiaHRtbFwiKl0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9Eb2N1bWVudGF0aW9uL0xpYnJhcnk/aWQ9cXVlc3Rpb25odG1sbW9kZWwpXG4gICAgICogLSBbKlwiaW1hZ2VcIipdKGh0dHBzOi8vc3VydmV5anMuaW8vRG9jdW1lbnRhdGlvbi9MaWJyYXJ5P2lkPXF1ZXN0aW9uaW1hZ2Vtb2RlbClcbiAgICAgKiAtIFsqXCJpbWFnZXBpY2tlclwiKl0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9Eb2N1bWVudGF0aW9uL0xpYnJhcnk/aWQ9cXVlc3Rpb25pbWFnZXBpY2tlcm1vZGVsKVxuICAgICAqIC0gWypcIm1hdHJpeFwiKl0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9Eb2N1bWVudGF0aW9uL0xpYnJhcnk/aWQ9cXVlc3Rpb25tYXRyaXhtb2RlbClcbiAgICAgKiAtIFsqXCJtYXRyaXhkcm9wZG93blwiKl0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9Eb2N1bWVudGF0aW9uL0xpYnJhcnk/aWQ9cXVlc3Rpb25tYXRyaXhkcm9wZG93bm1vZGVsKVxuICAgICAqIC0gWypcIm1hdHJpeGR5bmFtaWNcIipdKGh0dHBzOi8vc3VydmV5anMuaW8vRG9jdW1lbnRhdGlvbi9MaWJyYXJ5P2lkPXF1ZXN0aW9ubWF0cml4ZHluYW1pY21vZGVsKVxuICAgICAqIC0gWypcIm11bHRpcGxldGV4dFwiKl0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9Eb2N1bWVudGF0aW9uL0xpYnJhcnk/aWQ9cXVlc3Rpb25tdWx0aXBsZXRleHRtb2RlbClcbiAgICAgKiAtIFsqXCJwYW5lbFwiKl0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9Eb2N1bWVudGF0aW9uL0xpYnJhcnk/aWQ9cGFuZWxtb2RlbClcbiAgICAgKiAtIFsqXCJwYW5lbGR5bmFtaWNcIipdKGh0dHBzOi8vc3VydmV5anMuaW8vRG9jdW1lbnRhdGlvbi9MaWJyYXJ5P2lkPXF1ZXN0aW9ucGFuZWxkeW5hbWljbW9kZWwpXG4gICAgICogLSBbKlwicmFkaW9ncm91cFwiKl0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9Eb2N1bWVudGF0aW9uL0xpYnJhcnk/aWQ9cXVlc3Rpb25yYWRpb2dyb3VwbW9kZWwpXG4gICAgICogLSBbKlwicmF0aW5nXCIqXShodHRwczovL3N1cnZleWpzLmlvL0RvY3VtZW50YXRpb24vTGlicmFyeT9pZD1xdWVzdGlvbnJhdGluZ21vZGVsKVxuICAgICAqIC0gWypcInJhbmtpbmdcIipdKGh0dHBzOi8vc3VydmV5anMuaW8vRG9jdW1lbnRhdGlvbi9MaWJyYXJ5P2lkPXF1ZXN0aW9ucmFua2luZ21vZGVsKVxuICAgICAqIC0gWypcInNpZ25hdHVyZXBhZFwiKl0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9Eb2N1bWVudGF0aW9uL0xpYnJhcnk/aWQ9cXVlc3Rpb25zaWduYXR1cmVwYWRtb2RlbClcbiAgICAgKiAtIFsqXCJ0ZXh0XCIqXShodHRwczovL3N1cnZleWpzLmlvL0RvY3VtZW50YXRpb24vTGlicmFyeT9pZD1xdWVzdGlvbnRleHRtb2RlbClcbiAgICAgKi9cbiAgICBRdWVzdGlvbi5wcm90b3R5cGUuZ2V0VHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIFwicXVlc3Rpb25cIjtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbi5wcm90b3R5cGUsIFwiaXNRdWVzdGlvblwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBRdWVzdGlvbi5wcm90b3R5cGUubW92ZVRvID0gZnVuY3Rpb24gKGNvbnRhaW5lciwgaW5zZXJ0QmVmb3JlKSB7XG4gICAgICAgIGlmIChpbnNlcnRCZWZvcmUgPT09IHZvaWQgMCkgeyBpbnNlcnRCZWZvcmUgPSBudWxsOyB9XG4gICAgICAgIHJldHVybiB0aGlzLm1vdmVUb0Jhc2UodGhpcy5wYXJlbnQsIGNvbnRhaW5lciwgaW5zZXJ0QmVmb3JlKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uLnByb3RvdHlwZS5nZXRQcm9ncmVzc0luZm8gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5oYXNJbnB1dClcbiAgICAgICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLmdldFByb2dyZXNzSW5mby5jYWxsKHRoaXMpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcXVlc3Rpb25Db3VudDogMSxcbiAgICAgICAgICAgIGFuc3dlcmVkUXVlc3Rpb25Db3VudDogIXRoaXMuaXNFbXB0eSgpID8gMSA6IDAsXG4gICAgICAgICAgICByZXF1aXJlZFF1ZXN0aW9uQ291bnQ6IHRoaXMuaXNSZXF1aXJlZCA/IDEgOiAwLFxuICAgICAgICAgICAgcmVxdWlyZWRBbnN3ZXJlZFF1ZXN0aW9uQ291bnQ6ICF0aGlzLmlzRW1wdHkoKSAmJiB0aGlzLmlzUmVxdWlyZWQgPyAxIDogMCxcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uLnByb3RvdHlwZS5ydW5UcmlnZ2VycyA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBpZiAodGhpcy5pc1J1bm5pbmdSZXNldFZhbHVlSWYgfHwgIXRoaXMuaXNWaXNpYmxlIHx8IHRoaXMuaXNSZWFkT25seSB8fCAhdGhpcy5yZXNldFZhbHVlSWYgfHwgdGhpcy5pc0VtcHR5KCkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmICh0aGlzLnBhcmVudFF1ZXN0aW9uICYmIHRoaXMucGFyZW50UXVlc3Rpb24uZ2V0VmFsdWVOYW1lKCkgPT09IG5hbWUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmICghdGhpcy5yZXNldFZhbHVlSWZFeHByZXNzaW9uKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0VmFsdWVJZkV4cHJlc3Npb24gPSBuZXcgX2NvbmRpdGlvbnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1tcIkV4cHJlc3Npb25SdW5uZXJcIl0odGhpcy5yZXNldFZhbHVlSWYpO1xuICAgICAgICAgICAgdGhpcy5yZXNldFZhbHVlSWZFeHByZXNzaW9uLm9uUnVuQ29tcGxldGUgPSBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMuaXNSdW5uaW5nUmVzZXRWYWx1ZUlmID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaWYgKHJlcyA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICBfdGhpcy5jbGVhclZhbHVlKCk7XG4gICAgICAgICAgICAgICAgICAgIF90aGlzLnVwZGF0ZVZhbHVlV2l0aERlZmF1bHRzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVzZXRWYWx1ZUlmRXhwcmVzc2lvbi5leHByZXNzaW9uID0gdGhpcy5yZXNldFZhbHVlSWY7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGtleXMgPSB7fTtcbiAgICAgICAga2V5c1tuYW1lXSA9IHZhbHVlO1xuICAgICAgICBpZiAoIW5ldyBfY29uZGl0aW9uUHJvY2Vzc1ZhbHVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fW1wiUHJvY2Vzc1ZhbHVlXCJdKCkuaXNBbnlLZXlDaGFuZ2VkKGtleXMsIHRoaXMucmVzZXRWYWx1ZUlmRXhwcmVzc2lvbi5nZXRWYXJpYWJsZXMoKSkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMuaXNSdW5uaW5nUmVzZXRWYWx1ZUlmID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5yZXNldFZhbHVlSWZFeHByZXNzaW9uLnJ1bih0aGlzLmdldERhdGFGaWx0ZXJlZFZhbHVlcygpLCB0aGlzLmdldERhdGFGaWx0ZXJlZFByb3BlcnRpZXMoKSk7XG4gICAgfTtcbiAgICBRdWVzdGlvbi5wcm90b3R5cGUucnVuQ29uZGl0aW9ucyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuZGF0YSAmJiAhdGhpcy5pc0xvYWRpbmdGcm9tSnNvbikge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlzRGVzaWduTW9kZSkge1xuICAgICAgICAgICAgICAgIHRoaXMucnVuQ29uZGl0aW9uKHRoaXMuZ2V0RGF0YUZpbHRlcmVkVmFsdWVzKCksIHRoaXMuZ2V0RGF0YUZpbHRlcmVkUHJvcGVydGllcygpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMubG9jU3Ryc0NoYW5nZWQoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgUXVlc3Rpb24ucHJvdG90eXBlLnNldFN1cnZleUltcGwgPSBmdW5jdGlvbiAodmFsdWUsIGlzTGlnaHQpIHtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5zZXRTdXJ2ZXlJbXBsLmNhbGwodGhpcywgdmFsdWUpO1xuICAgICAgICBpZiAoIXRoaXMuc3VydmV5KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLnN1cnZleS5xdWVzdGlvbkNyZWF0ZWQodGhpcyk7XG4gICAgICAgIGlmIChpc0xpZ2h0ICE9PSB0cnVlKSB7XG4gICAgICAgICAgICB0aGlzLnJ1bkNvbmRpdGlvbnMoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNhbGNSZW5kZXJlZENvbW1lbnRQbGFjZWhvbGRlcigpO1xuICAgICAgICBpZiAoIXRoaXMudmlzaWJsZSkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVJc1Zpc2libGVQcm9wKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVJc01vYmlsZUZyb21TdXJ2ZXkoKTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbi5wcm90b3R5cGUsIFwicGFyZW50XCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgYSBzdXJ2ZXkgZWxlbWVudCAocGFuZWwgb3IgcGFnZSkgdGhhdCBjb250YWlucyB0aGUgcXVlc3Rpb24gYW5kIGFsbG93cyB5b3UgdG8gbW92ZSB0aGlzIHF1ZXN0aW9uIHRvIGEgZGlmZmVyZW50IHN1cnZleSBlbGVtZW50LlxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicGFyZW50XCIsIG51bGwpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnBhcmVudCA9PT0gdmFsKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlRnJvbVBhcmVudCgpO1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicGFyZW50XCIsIHZhbCk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVF1ZXN0aW9uQ3NzKCk7XG4gICAgICAgICAgICB0aGlzLm9uUGFyZW50Q2hhbmdlZCgpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUXVlc3Rpb24ucHJvdG90eXBlLm9uUGFyZW50Q2hhbmdlZCA9IGZ1bmN0aW9uICgpIHsgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb24ucHJvdG90eXBlLCBcImhhc1RpdGxlXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgYGZhbHNlYCBpZiB0aGUgYHRpdGxlTG9jYXRpb25gIHByb3BlcnR5IGlzIHNldCB0byBgXCJoaWRkZW5cImAgb3IgaWYgdGhlIHF1ZXN0aW9uIGNhbm5vdCBoYXZlIGEgdGl0bGUgKGZvciBleGFtcGxlLCBhbiBbSFRNTF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9xdWVzdGlvbmh0bWxtb2RlbCkgcXVlc3Rpb24pLlxuICAgICAgICAgKlxuICAgICAgICAgKiBJZiB0aGUgYHRpdGxlYCBwcm9wZXJ0eSBpcyBgdW5kZWZpbmVkYCBvciBzZXQgdG8gYW4gZW1wdHkgc3RyaW5nLCB0aGUgYGhhc1RpdGxlYCBwcm9wZXJ0eSByZXR1cm5zIGB0cnVlYCwgYmVjYXVzZSB0aGUgcXVlc3Rpb24gdXNlcyBpdHMgYG5hbWVgIGFzIGEgdGl0bGUgaW4gdGhpcyBjYXNlLlxuICAgICAgICAgKiBAc2VlIHRpdGxlXG4gICAgICAgICAqIEBzZWUgdGl0bGVMb2NhdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRUaXRsZUxvY2F0aW9uKCkgIT09IFwiaGlkZGVuXCI7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb24ucHJvdG90eXBlLCBcInRpdGxlTG9jYXRpb25cIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogU2V0cyBxdWVzdGlvbiB0aXRsZSBsb2NhdGlvbiByZWxhdGl2ZSB0byB0aGUgaW5wdXQgZmllbGQuIE92ZXJyaWRlcyB0aGUgYHF1ZXN0aW9uVGl0bGVMb2NhdGlvbmAgcHJvcGVydHkgc3BlY2lmaWVkIGZvciB0aGUgcXVlc3Rpb24ncyBjb250YWluZXIgKHN1cnZleSwgcGFnZSwgb3IgcGFuZWwpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBQb3NzaWJsZSB2YWx1ZXM6XG4gICAgICAgICAqXG4gICAgICAgICAqIC0gYFwiZGVmYXVsdFwiYCAoZGVmYXVsdCkgLSBJbmhlcml0cyB0aGUgc2V0dGluZyBmcm9tIHRoZSBgcXVlc3Rpb25UaXRsZUxvY2F0aW9uYCBwcm9wZXJ0eSBzcGVjaWZpZWQgZm9yIHRoZSBxdWVzdGlvbidzIGNvbnRhaW5lci5cbiAgICAgICAgICogLSBgXCJ0b3BcImAgLSBEaXNwbGF5cyB0aGUgdGl0bGUgYWJvdmUgdGhlIGlucHV0IGZpZWxkLlxuICAgICAgICAgKiAtIGBcImJvdHRvbVwiYCAtIERpc3BsYXlzIHRoZSB0aXRsZSBiZWxvdyB0aGUgaW5wdXQgZmllbGQuXG4gICAgICAgICAqIC0gYFwibGVmdFwiYCAtIERpc3BsYXlzIHRoZSB0aXRsZSB0byB0aGUgbGVmdCBvZiB0aGUgaW5wdXQgZmllbGQuXG4gICAgICAgICAqIC0gYFwiaGlkZGVuXCJgIC0gSGlkZXMgdGhlIHF1ZXN0aW9uIHRpdGxlLlxuICAgICAgICAgKlxuICAgICAgICAgKiA+IENlcnRhaW4gcXVlc3Rpb24gdHlwZXMgKE1hdHJpeCwgTXVsdGlwbGUgVGV4dCkgZG8gbm90IHN1cHBvcnQgdGhlIGBcImxlZnRcImAgdmFsdWUuIEZvciB0aGVtLCB0aGUgYFwidG9wXCJgIHZhbHVlIGlzIHVzZWQuXG4gICAgICAgICAqIEBzZWUgU3VydmV5TW9kZWwucXVlc3Rpb25UaXRsZUxvY2F0aW9uXG4gICAgICAgICAqIEBzZWUgZ2V0VGl0bGVMb2NhdGlvblxuICAgICAgICAgKiBAc2VlIGlzQWxsb3dUaXRsZUxlZnRcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInRpdGxlTG9jYXRpb25cIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB2YXIgaXNWaXNpYmlsaXR5Q2hhbmdlZCA9IHRoaXMudGl0bGVMb2NhdGlvbiA9PSBcImhpZGRlblwiIHx8IHZhbHVlID09IFwiaGlkZGVuXCI7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJ0aXRsZUxvY2F0aW9uXCIsIHZhbHVlLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVRdWVzdGlvbkNzcygpO1xuICAgICAgICAgICAgaWYgKGlzVmlzaWJpbGl0eUNoYW5nZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmeVN1cnZleVZpc2liaWxpdHlDaGFuZ2VkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBRdWVzdGlvbi5wcm90b3R5cGUuZ2V0VGl0bGVPd25lciA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH07XG4gICAgUXVlc3Rpb24ucHJvdG90eXBlLmdldElzVGl0bGVSZW5kZXJlZEFzU3RyaW5nID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy50aXRsZUxvY2F0aW9uID09PSBcImhpZGRlblwiOyB9O1xuICAgIFF1ZXN0aW9uLnByb3RvdHlwZS5ub3RpZnlTdXJ2ZXlWaXNpYmlsaXR5Q2hhbmdlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnN1cnZleSB8fCB0aGlzLmlzTG9hZGluZ0Zyb21Kc29uKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLnN1cnZleS5xdWVzdGlvblZpc2liaWxpdHlDaGFuZ2VkKHRoaXMsIHRoaXMuaXNWaXNpYmxlKTtcbiAgICAgICAgdmFyIGlzQ2xlYXJPbkhpZGRlbiA9IHRoaXMuaXNDbGVhclZhbHVlT25IaWRkZW47XG4gICAgICAgIGlmICghdGhpcy52aXNpYmxlKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFyVmFsdWVPbkhpZGRpbmcoaXNDbGVhck9uSGlkZGVuKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNDbGVhck9uSGlkZGVuICYmIHRoaXMuaXNWaXNpYmxlSW5TdXJ2ZXkpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVmFsdWVXaXRoRGVmYXVsdHMoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgUXVlc3Rpb24ucHJvdG90eXBlLmNsZWFyVmFsdWVPbkhpZGRpbmcgPSBmdW5jdGlvbiAoaXNDbGVhck9uSGlkZGVuKSB7XG4gICAgICAgIGlmIChpc0NsZWFyT25IaWRkZW4pIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJWYWx1ZUlmSW52aXNpYmxlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGl0bGUgbG9jYXRpb24gY2FsY3VsYXRlZCBiYXNlZCBvbiB0aGUgcXVlc3Rpb24ncyBgdGl0bGVMb2NhdGlvbmAgcHJvcGVydHkgYW5kIHRoZSBgcXVlc3Rpb25UaXRsZUxvY2F0aW9uYCBwcm9wZXJ0eSBvZiB0aGUgcXVlc3Rpb24ncyBjb250YWluZXJzIChzdXJ2ZXksIHBhZ2UsIG9yIHBhbmVsKS5cbiAgICAgKiBAc2VlIHRpdGxlTG9jYXRpb25cbiAgICAgKiBAc2VlIFN1cnZleU1vZGVsLnF1ZXN0aW9uVGl0bGVMb2NhdGlvblxuICAgICAqL1xuICAgIFF1ZXN0aW9uLnByb3RvdHlwZS5nZXRUaXRsZUxvY2F0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5pc0Zsb3dMYXlvdXQpXG4gICAgICAgICAgICByZXR1cm4gXCJoaWRkZW5cIjtcbiAgICAgICAgdmFyIGxvY2F0aW9uID0gdGhpcy5nZXRUaXRsZUxvY2F0aW9uQ29yZSgpO1xuICAgICAgICBpZiAobG9jYXRpb24gPT09IFwibGVmdFwiICYmICF0aGlzLmlzQWxsb3dUaXRsZUxlZnQpXG4gICAgICAgICAgICBsb2NhdGlvbiA9IFwidG9wXCI7XG4gICAgICAgIHJldHVybiBsb2NhdGlvbjtcbiAgICB9O1xuICAgIFF1ZXN0aW9uLnByb3RvdHlwZS5nZXRUaXRsZUxvY2F0aW9uQ29yZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMudGl0bGVMb2NhdGlvbiAhPT0gXCJkZWZhdWx0XCIpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy50aXRsZUxvY2F0aW9uO1xuICAgICAgICBpZiAoISF0aGlzLnBhcmVudClcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcmVudC5nZXRRdWVzdGlvblRpdGxlTG9jYXRpb24oKTtcbiAgICAgICAgaWYgKCEhdGhpcy5zdXJ2ZXkpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdXJ2ZXkucXVlc3Rpb25UaXRsZUxvY2F0aW9uO1xuICAgICAgICByZXR1cm4gXCJ0b3BcIjtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbi5wcm90b3R5cGUsIFwiaGFzVGl0bGVPbkxlZnRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmhhc1RpdGxlICYmIHRoaXMuZ2V0VGl0bGVMb2NhdGlvbigpID09PSBcImxlZnRcIjtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbi5wcm90b3R5cGUsIFwiaGFzVGl0bGVPblRvcFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGFzVGl0bGUgJiYgdGhpcy5nZXRUaXRsZUxvY2F0aW9uKCkgPT09IFwidG9wXCI7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb24ucHJvdG90eXBlLCBcImhhc1RpdGxlT25Cb3R0b21cIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmhhc1RpdGxlICYmIHRoaXMuZ2V0VGl0bGVMb2NhdGlvbigpID09PSBcImJvdHRvbVwiO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uLnByb3RvdHlwZSwgXCJoYXNUaXRsZU9uTGVmdFRvcFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmhhc1RpdGxlKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIHZhciBsb2NhdGlvbiA9IHRoaXMuZ2V0VGl0bGVMb2NhdGlvbigpO1xuICAgICAgICAgICAgcmV0dXJuIGxvY2F0aW9uID09PSBcImxlZnRcIiB8fCBsb2NhdGlvbiA9PT0gXCJ0b3BcIjtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbi5wcm90b3R5cGUsIFwiZXJyb3JMb2NhdGlvblwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgdGhlIGVycm9yIG1lc3NhZ2UgcG9zaXRpb24uIE92ZXJyaWRlcyB0aGUgYHF1ZXN0aW9uRXJyb3JMb2NhdGlvbmAgcHJvcGVydHkgc3BlY2lmaWVkIGZvciB0aGUgcXVlc3Rpb24ncyBjb250YWluZXIgKFtzdXJ2ZXldKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vYXBpLXJlZmVyZW5jZS9zdXJ2ZXktZGF0YS1tb2RlbCNxdWVzdGlvbkVycm9yTG9jYXRpb24pLCBbcGFnZV0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL3BhZ2UtbW9kZWwjcXVlc3Rpb25FcnJvckxvY2F0aW9uKSwgb3IgW3BhbmVsXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2UvcGFuZWwtbW9kZWwjcXVlc3Rpb25FcnJvckxvY2F0aW9uKSkuXG4gICAgICAgICAqXG4gICAgICAgICAqIFBvc3NpYmxlIHZhbHVlczpcbiAgICAgICAgICpcbiAgICAgICAgICogLSBgXCJkZWZhdWx0XCJgIChkZWZhdWx0KSAtIEluaGVyaXRzIHRoZSBzZXR0aW5nIGZyb20gdGhlIGBxdWVzdGlvbkVycm9yTG9jYXRpb25gIHByb3BlcnR5IHNwZWNpZmllZCBmb3IgdGhlIHF1ZXN0aW9uJ3MgY29udGFpbmVyLlxuICAgICAgICAgKiAtIGBcInRvcFwiYCAtIERpc3BsYXlzIGVycm9yIG1lc3NhZ2VzIGFib3ZlIHF1ZXN0aW9ucy5cbiAgICAgICAgICogLSBgXCJib3R0b21cImAgLSBEaXNwbGF5cyBlcnJvciBtZXNzYWdlcyBiZWxvdyBxdWVzdGlvbnMuXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJlcnJvckxvY2F0aW9uXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImVycm9yTG9jYXRpb25cIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFF1ZXN0aW9uLnByb3RvdHlwZS5nZXRFcnJvckxvY2F0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5lcnJvckxvY2F0aW9uICE9PSBcImRlZmF1bHRcIilcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVycm9yTG9jYXRpb247XG4gICAgICAgIGlmICh0aGlzLnBhcmVudFF1ZXN0aW9uKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50UXVlc3Rpb24uZ2V0Q2hpbGRFcnJvckxvY2F0aW9uKHRoaXMpO1xuICAgICAgICBpZiAodGhpcy5wYXJlbnQpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQuZ2V0UXVlc3Rpb25FcnJvckxvY2F0aW9uKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnN1cnZleSA/IHRoaXMuc3VydmV5LnF1ZXN0aW9uRXJyb3JMb2NhdGlvbiA6IFwidG9wXCI7XG4gICAgfTtcbiAgICBRdWVzdGlvbi5wcm90b3R5cGUuZ2V0Q2hpbGRFcnJvckxvY2F0aW9uID0gZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEVycm9yTG9jYXRpb24oKTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbi5wcm90b3R5cGUsIFwiaGFzSW5wdXRcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJucyBgZmFsc2VgIGlmIHRoZSBxdWVzdGlvbiBoYXMgbm8gaW5wdXQgZmllbGRzIChbSFRNTF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9xdWVzdGlvbmh0bWxtb2RlbCksIFtJbWFnZV0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9xdWVzdGlvbmltYWdlbW9kZWwpLCBhbmQgc2ltaWxhciBxdWVzdGlvbiB0eXBlcykuXG4gICAgICAgICAqIEBzZWUgaGFzU2luZ2xlSW5wdXRcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb24ucHJvdG90eXBlLCBcImhhc1NpbmdsZUlucHV0XCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgYGZhbHNlYCBpZiB0aGUgcXVlc3Rpb24gaGFzIG5vIGlucHV0IGZpZWxkcyAoW0hUTUxdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vcXVlc3Rpb25odG1sbW9kZWwpLCBbSW1hZ2VdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vcXVlc3Rpb25pbWFnZW1vZGVsKSkgb3IgaGFzIG11bHRpcGxlIGlucHV0IGZpZWxkcyAoW01hdHJpeF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9xdWVzdGlvbm1hdHJpeG1vZGVsKSwgW011bHRpcGxlIFRleHRdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vcXVlc3Rpb25tdWx0aXBsZXRleHRtb2RlbCkpLlxuICAgICAgICAgKiBAc2VlIGhhc0lucHV0XG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmhhc0lucHV0O1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uLnByb3RvdHlwZSwgXCJpbnB1dElkXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pZCArIFwiaVwiO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUXVlc3Rpb24ucHJvdG90eXBlLmdldERlZmF1bHRUaXRsZVZhbHVlID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5uYW1lOyB9O1xuICAgIFF1ZXN0aW9uLnByb3RvdHlwZS5nZXREZWZhdWx0VGl0bGVUYWdOYW1lID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gX3NldHRpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bXCJzZXR0aW5nc1wiXS50aXRsZVRhZ3MucXVlc3Rpb247XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb24ucHJvdG90eXBlLCBcImRlc2NyaXB0aW9uTG9jYXRpb25cIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHdoZXJlIHRvIGRpc3BsYXkgYSBxdWVzdGlvbiBkZXNjcmlwdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogUG9zc2libGUgdmFsdWVzOlxuICAgICAgICAgKlxuICAgICAgICAgKiAtIGBcImRlZmF1bHRcImAgKGRlZmF1bHQpIC0gSW5oZXJpdHMgdGhlIHNldHRpbmcgZnJvbSB0aGUgU3VydmV5J3MgW2BxdWVzdGlvbkRlc2NyaXB0aW9uTG9jYXRpb25gXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL3N1cnZleW1vZGVsI3F1ZXN0aW9uRGVzY3JpcHRpb25Mb2NhdGlvbikgcHJvcGVydHkuXG4gICAgICAgICAqIC0gYFwidW5kZXJUaXRsZVwiYCAtIERpc3BsYXlzIHRoZSBkZXNjcmlwdGlvbiB1bmRlciB0aGUgcXVlc3Rpb24gdGl0bGUuXG4gICAgICAgICAqIC0gYFwidW5kZXJJbnB1dFwiYCAtIERpc3BsYXlzIHRoZSBkZXNjcmlwdGlvbiB1bmRlciB0aGUgaW50ZXJhY3RpdmUgYXJlYS5cbiAgICAgICAgICogQHNlZSBkZXNjcmlwdGlvblxuICAgICAgICAgKiBAc2VlIGhhc0Rlc2NyaXB0aW9uXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJkZXNjcmlwdGlvbkxvY2F0aW9uXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImRlc2NyaXB0aW9uTG9jYXRpb25cIiwgdmFsKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUXVlc3Rpb25Dc3MoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbi5wcm90b3R5cGUsIFwiaGFzRGVzY3JpcHRpb25VbmRlclRpdGxlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXREZXNjcmlwdGlvbkxvY2F0aW9uKCkgPT0gXCJ1bmRlclRpdGxlXCIgJiYgdGhpcy5oYXNEZXNjcmlwdGlvbjtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbi5wcm90b3R5cGUsIFwiaGFzRGVzY3JpcHRpb25VbmRlcklucHV0XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXREZXNjcmlwdGlvbkxvY2F0aW9uKCkgPT0gXCJ1bmRlcklucHV0XCIgJiYgdGhpcy5oYXNEZXNjcmlwdGlvbjtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFF1ZXN0aW9uLnByb3RvdHlwZS5nZXREZXNjcmlwdGlvbkxvY2F0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5kZXNjcmlwdGlvbkxvY2F0aW9uICE9PSBcImRlZmF1bHRcIilcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRlc2NyaXB0aW9uTG9jYXRpb247XG4gICAgICAgIHJldHVybiAhIXRoaXMuc3VydmV5XG4gICAgICAgICAgICA/IHRoaXMuc3VydmV5LnF1ZXN0aW9uRGVzY3JpcHRpb25Mb2NhdGlvblxuICAgICAgICAgICAgOiBcInVuZGVyVGl0bGVcIjtcbiAgICB9O1xuICAgIFF1ZXN0aW9uLnByb3RvdHlwZS5uZWVkQ2xpY2tUaXRsZUZ1bmN0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5uZWVkQ2xpY2tUaXRsZUZ1bmN0aW9uLmNhbGwodGhpcykgfHwgdGhpcy5oYXNJbnB1dDtcbiAgICB9O1xuICAgIFF1ZXN0aW9uLnByb3RvdHlwZS5wcm9jZXNzVGl0bGVDbGljayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5wcm9jZXNzVGl0bGVDbGljay5jYWxsKHRoaXMpO1xuICAgICAgICBpZiAodGhpcy5pc0NvbGxhcHNlZClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5mb2N1cygpO1xuICAgICAgICB9LCAxKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb24ucHJvdG90eXBlLCBcInJlcXVpcmVkRXJyb3JUZXh0XCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyBhIGN1c3RvbSBlcnJvciBtZXNzYWdlIGZvciBhIHJlcXVpcmVkIGZvcm0gZmllbGQuXG4gICAgICAgICAqIEBzZWUgaXNSZXF1aXJlZFxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJyZXF1aXJlZEVycm9yVGV4dFwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcInJlcXVpcmVkRXJyb3JUZXh0XCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb24ucHJvdG90eXBlLCBcImxvY1JlcXVpcmVkRXJyb3JUZXh0XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcInJlcXVpcmVkRXJyb3JUZXh0XCIpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uLnByb3RvdHlwZSwgXCJjb21tZW50VGV4dFwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgYSBjYXB0aW9uIGRpc3BsYXllZCBhYm92ZSB0aGUgY29tbWVudCBhcmVhLiBBcHBsaWVzIHdoZW4gdGhlIGBzaG93Q29tbWVudEFyZWFgIHByb3BlcnR5IGlzIGB0cnVlYC5cbiAgICAgICAgICogQHNlZSBzaG93Q29tbWVudEFyZWFcbiAgICAgICAgICogQHNlZSBjb21tZW50XG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImNvbW1lbnRUZXh0XCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwiY29tbWVudFRleHRcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbi5wcm90b3R5cGUsIFwibG9jQ29tbWVudFRleHRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwiY29tbWVudFRleHRcIik7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb24ucHJvdG90eXBlLCBcImNvbW1lbnRQbGFjZUhvbGRlclwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29tbWVudFBsYWNlaG9sZGVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChuZXdWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5jb21tZW50UGxhY2Vob2xkZXIgPSBuZXdWYWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbi5wcm90b3R5cGUsIFwicmVuZGVyZWRDb21tZW50UGxhY2Vob2xkZXJcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJyZW5kZXJlZENvbW1lbnRQbGFjZWhvbGRlclwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFF1ZXN0aW9uLnByb3RvdHlwZS5jYWxjUmVuZGVyZWRDb21tZW50UGxhY2Vob2xkZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciByZXMgPSAhdGhpcy5pc1JlYWRPbmx5ID8gdGhpcy5jb21tZW50UGxhY2VIb2xkZXIgOiB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInJlbmRlcmVkQ29tbWVudFBsYWNlaG9sZGVyXCIsIHJlcyk7XG4gICAgfTtcbiAgICBRdWVzdGlvbi5wcm90b3R5cGUuZ2V0QWxsRXJyb3JzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lcnJvcnMuc2xpY2UoKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uLnByb3RvdHlwZS5nZXRFcnJvckJ5VHlwZSA9IGZ1bmN0aW9uIChlcnJvclR5cGUpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmVycm9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRoaXMuZXJyb3JzW2ldLmdldEVycm9yVHlwZSgpID09PSBlcnJvclR5cGUpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3JzW2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uLnByb3RvdHlwZSwgXCJjdXN0b21XaWRnZXRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5pc0N1c3RvbVdpZGdldFJlcXVlc3RlZCAmJiAhdGhpcy5jdXN0b21XaWRnZXRWYWx1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNDdXN0b21XaWRnZXRSZXF1ZXN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQ3VzdG9tV2lkZ2V0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jdXN0b21XaWRnZXRWYWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFF1ZXN0aW9uLnByb3RvdHlwZS51cGRhdGVDdXN0b21XaWRnZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuY3VzdG9tV2lkZ2V0VmFsdWUgPSBfcXVlc3Rpb25DdXN0b21XaWRnZXRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bXCJDdXN0b21XaWRnZXRDb2xsZWN0aW9uXCJdLkluc3RhbmNlLmdldEN1c3RvbVdpZGdldCh0aGlzKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uLnByb3RvdHlwZS5sb2NhbGVDaGFuZ2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBfc3VwZXIucHJvdG90eXBlLmxvY2FsZUNoYW5nZWQuY2FsbCh0aGlzKTtcbiAgICAgICAgdGhpcy5jYWxjUmVuZGVyZWRDb21tZW50UGxhY2Vob2xkZXIoKTtcbiAgICAgICAgaWYgKCEhdGhpcy5sb2NhbGVDaGFuZ2VkQ2FsbGJhY2spIHtcbiAgICAgICAgICAgIHRoaXMubG9jYWxlQ2hhbmdlZENhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbi5wcm90b3R5cGUsIFwiaXNDb21wb3NpdGVRdWVzdGlvblwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uLnByb3RvdHlwZSwgXCJpc0NvbnRhaW5lclwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZmFsc2U7IH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBRdWVzdGlvbi5wcm90b3R5cGUudXBkYXRlQ29tbWVudEVsZW1lbnRzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuYXV0b0dyb3dDb21tZW50IHx8ICFBcnJheS5pc0FycmF5KHRoaXMuY29tbWVudEVsZW1lbnRzKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNvbW1lbnRFbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGVsID0gdGhpcy5jb21tZW50RWxlbWVudHNbaV07XG4gICAgICAgICAgICBpZiAoZWwpXG4gICAgICAgICAgICAgICAgT2JqZWN0KF91dGlsc191dGlsc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX1tcImluY3JlYXNlSGVpZ2h0QnlDb250ZW50XCJdKShlbCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFF1ZXN0aW9uLnByb3RvdHlwZS5vbkNvbW1lbnRJbnB1dCA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICBpZiAodGhpcy5pc0lucHV0VGV4dFVwZGF0ZSkge1xuICAgICAgICAgICAgaWYgKGV2ZW50LnRhcmdldCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY29tbWVudCA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ29tbWVudEVsZW1lbnRzKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFF1ZXN0aW9uLnByb3RvdHlwZS5vbkNvbW1lbnRDaGFuZ2UgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5jb21tZW50ID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgICAgICBpZiAodGhpcy5jb21tZW50ICE9PSBldmVudC50YXJnZXQudmFsdWUpIHtcbiAgICAgICAgICAgIGV2ZW50LnRhcmdldC52YWx1ZSA9IHRoaXMuY29tbWVudDtcbiAgICAgICAgfVxuICAgIH07XG4gICAgUXVlc3Rpb24ucHJvdG90eXBlLmFmdGVyUmVuZGVyUXVlc3Rpb25FbGVtZW50ID0gZnVuY3Rpb24gKGVsKSB7XG4gICAgICAgIGlmICghdGhpcy5zdXJ2ZXkgfHwgIXRoaXMuaGFzU2luZ2xlSW5wdXQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMuc3VydmV5LmFmdGVyUmVuZGVyUXVlc3Rpb25JbnB1dCh0aGlzLCBlbCk7XG4gICAgfTtcbiAgICBRdWVzdGlvbi5wcm90b3R5cGUuYWZ0ZXJSZW5kZXIgPSBmdW5jdGlvbiAoZWwpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgaWYgKCF0aGlzLnN1cnZleSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5zdXJ2ZXkuYWZ0ZXJSZW5kZXJRdWVzdGlvbih0aGlzLCBlbCk7XG4gICAgICAgIGlmICghIXRoaXMuYWZ0ZXJSZW5kZXJRdWVzdGlvbkNhbGxiYWNrKSB7XG4gICAgICAgICAgICB0aGlzLmFmdGVyUmVuZGVyUXVlc3Rpb25DYWxsYmFjayh0aGlzLCBlbCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc3VwcG9ydENvbW1lbnQoKSB8fCB0aGlzLnN1cHBvcnRPdGhlcigpKSB7XG4gICAgICAgICAgICB0aGlzLmNvbW1lbnRFbGVtZW50cyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5nZXRDb21tZW50RWxlbWVudHNJZCgpLmZvckVhY2goZnVuY3Rpb24gKGlkKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJvb3QgPSBfc2V0dGluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1tcInNldHRpbmdzXCJdLmVudmlyb25tZW50LnJvb3Q7XG4gICAgICAgICAgICAgICAgdmFyIGVsID0gcm9vdC5nZXRFbGVtZW50QnlJZChpZCk7XG4gICAgICAgICAgICAgICAgaWYgKGVsKVxuICAgICAgICAgICAgICAgICAgICBfdGhpcy5jb21tZW50RWxlbWVudHMucHVzaChlbCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ29tbWVudEVsZW1lbnRzKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGVja0ZvclJlc3BvbnNpdmVuZXNzKGVsKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uLnByb3RvdHlwZS5nZXRDb21tZW50RWxlbWVudHNJZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIFt0aGlzLmNvbW1lbnRJZF07XG4gICAgfTtcbiAgICBRdWVzdGlvbi5wcm90b3R5cGUuYmVmb3JlRGVzdHJveVF1ZXN0aW9uRWxlbWVudCA9IGZ1bmN0aW9uIChlbCkge1xuICAgICAgICB0aGlzLmNvbW1lbnRFbGVtZW50cyA9IHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbi5wcm90b3R5cGUsIFwicHJvY2Vzc2VkVGl0bGVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciByZXMgPSB0aGlzLmxvY1Byb2Nlc3NlZFRpdGxlLnRleHRPckh0bWw7XG4gICAgICAgICAgICByZXR1cm4gcmVzID8gcmVzIDogdGhpcy5uYW1lO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uLnByb3RvdHlwZSwgXCJmdWxsVGl0bGVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY1RpdGxlLnJlbmRlcmVkSHRtbDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbi5wcm90b3R5cGUsIFwidGl0bGVQYXR0ZXJuXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gISF0aGlzLnN1cnZleSA/IHRoaXMuc3VydmV5LnF1ZXN0aW9uVGl0bGVQYXR0ZXJuIDogXCJudW1UaXRsZVJlcXVpcmVcIjtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbi5wcm90b3R5cGUsIFwiaXNSZXF1aXJlVGV4dE9uU3RhcnRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlzUmVxdWlyZWQgJiYgdGhpcy50aXRsZVBhdHRlcm4gPT0gXCJyZXF1aXJlTnVtVGl0bGVcIjtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbi5wcm90b3R5cGUsIFwiaXNSZXF1aXJlVGV4dEJlZm9yZVRpdGxlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pc1JlcXVpcmVkICYmIHRoaXMudGl0bGVQYXR0ZXJuID09IFwibnVtUmVxdWlyZVRpdGxlXCIgJiYgdGhpcy5yZXF1aXJlZFRleHQgIT09IFwiXCI7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb24ucHJvdG90eXBlLCBcImlzUmVxdWlyZVRleHRBZnRlclRpdGxlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pc1JlcXVpcmVkICYmIHRoaXMudGl0bGVQYXR0ZXJuID09IFwibnVtVGl0bGVSZXF1aXJlXCIgJiYgdGhpcy5yZXF1aXJlZFRleHQgIT09IFwiXCI7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb24ucHJvdG90eXBlLCBcInN0YXJ0V2l0aE5ld0xpbmVcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogRGlzYWJsZSB0aGlzIHByb3BlcnR5IGlmIHlvdSB3YW50IHRvIHJlbmRlciB0aGUgY3VycmVudCBxdWVzdGlvbiBvbiB0aGUgc2FtZSBsaW5lIG9yIHJvdyB3aXRoIHRoZSBwcmV2aW91cyBxdWVzdGlvbiBvciBwYW5lbC5cbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInN0YXJ0V2l0aE5ld0xpbmVcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuc3RhcnRXaXRoTmV3TGluZSA9PSB2YWwpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwic3RhcnRXaXRoTmV3TGluZVwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUXVlc3Rpb24ucHJvdG90eXBlLmNhbGNDc3NDbGFzc2VzID0gZnVuY3Rpb24gKGNzcykge1xuICAgICAgICB2YXIgY2xhc3NlcyA9IHsgZXJyb3I6IHt9IH07XG4gICAgICAgIHRoaXMuY29weUNzc0NsYXNzZXMoY2xhc3NlcywgY3NzLnF1ZXN0aW9uKTtcbiAgICAgICAgdGhpcy5jb3B5Q3NzQ2xhc3NlcyhjbGFzc2VzLmVycm9yLCBjc3MuZXJyb3IpO1xuICAgICAgICB0aGlzLnVwZGF0ZUNzc0NsYXNzZXMoY2xhc3NlcywgY3NzKTtcbiAgICAgICAgaWYgKHRoaXMuc3VydmV5KSB7XG4gICAgICAgICAgICB0aGlzLnN1cnZleS51cGRhdGVRdWVzdGlvbkNzc0NsYXNzZXModGhpcywgY2xhc3Nlcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub25VcGRhdGVDc3NDbGFzc2VzQ2FsbGJhY2spIHtcbiAgICAgICAgICAgIHRoaXMub25VcGRhdGVDc3NDbGFzc2VzQ2FsbGJhY2soY2xhc3Nlcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsYXNzZXM7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb24ucHJvdG90eXBlLCBcImNzc1Jvb3RcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRoaXMuZW5zdXJlRWxlbWVudENzcygpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNzc1Jvb3RcIiwgXCJcIik7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBRdWVzdGlvbi5wcm90b3R5cGUuc2V0Q3NzUm9vdCA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY3NzUm9vdFwiLCB2YWwpO1xuICAgIH07XG4gICAgUXVlc3Rpb24ucHJvdG90eXBlLmdldENzc1Jvb3QgPSBmdW5jdGlvbiAoY3NzQ2xhc3Nlcykge1xuICAgICAgICByZXR1cm4gbmV3IF91dGlsc19jc3NDbGFzc0J1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19bXCJDc3NDbGFzc0J1aWxkZXJcIl0oKVxuICAgICAgICAgICAgLmFwcGVuZChfc3VwZXIucHJvdG90eXBlLmdldENzc1Jvb3QuY2FsbCh0aGlzLCBjc3NDbGFzc2VzKSlcbiAgICAgICAgICAgIC5hcHBlbmQodGhpcy5pc0Zsb3dMYXlvdXQgJiYgIXRoaXMuaXNEZXNpZ25Nb2RlXG4gICAgICAgICAgICA/IGNzc0NsYXNzZXMuZmxvd1Jvb3RcbiAgICAgICAgICAgIDogY3NzQ2xhc3Nlcy5tYWluUm9vdClcbiAgICAgICAgICAgIC5hcHBlbmQoY3NzQ2xhc3Nlcy50aXRsZUxlZnRSb290LCAhdGhpcy5pc0Zsb3dMYXlvdXQgJiYgdGhpcy5oYXNUaXRsZU9uTGVmdClcbiAgICAgICAgICAgIC5hcHBlbmQoY3NzQ2xhc3Nlcy5oYXNFcnJvciwgdGhpcy5lcnJvcnMubGVuZ3RoID4gMClcbiAgICAgICAgICAgIC5hcHBlbmQoY3NzQ2xhc3Nlcy5zbWFsbCwgIXRoaXMud2lkdGgpXG4gICAgICAgICAgICAuYXBwZW5kKGNzc0NsYXNzZXMuYW5zd2VyZWQsIHRoaXMuaXNBbnN3ZXJlZClcbiAgICAgICAgICAgIC50b1N0cmluZygpO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uLnByb3RvdHlwZSwgXCJjc3NIZWFkZXJcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRoaXMuZW5zdXJlRWxlbWVudENzcygpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNzc0hlYWRlclwiLCBcIlwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFF1ZXN0aW9uLnByb3RvdHlwZS5zZXRDc3NIZWFkZXIgPSBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNzc0hlYWRlclwiLCB2YWwpO1xuICAgIH07XG4gICAgUXVlc3Rpb24ucHJvdG90eXBlLmdldENzc0hlYWRlciA9IGZ1bmN0aW9uIChjc3NDbGFzc2VzKSB7XG4gICAgICAgIHJldHVybiBuZXcgX3V0aWxzX2Nzc0NsYXNzQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX1tcIkNzc0NsYXNzQnVpbGRlclwiXSgpXG4gICAgICAgICAgICAuYXBwZW5kKGNzc0NsYXNzZXMuaGVhZGVyKVxuICAgICAgICAgICAgLmFwcGVuZChjc3NDbGFzc2VzLmhlYWRlclRvcCwgdGhpcy5oYXNUaXRsZU9uVG9wKVxuICAgICAgICAgICAgLmFwcGVuZChjc3NDbGFzc2VzLmhlYWRlckxlZnQsIHRoaXMuaGFzVGl0bGVPbkxlZnQpXG4gICAgICAgICAgICAuYXBwZW5kKGNzc0NsYXNzZXMuaGVhZGVyQm90dG9tLCB0aGlzLmhhc1RpdGxlT25Cb3R0b20pXG4gICAgICAgICAgICAudG9TdHJpbmcoKTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbi5wcm90b3R5cGUsIFwiY3NzQ29udGVudFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhpcy5lbnN1cmVFbGVtZW50Q3NzKCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY3NzQ29udGVudFwiLCBcIlwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFF1ZXN0aW9uLnByb3RvdHlwZS5zZXRDc3NDb250ZW50ID0gZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjc3NDb250ZW50XCIsIHZhbCk7XG4gICAgfTtcbiAgICBRdWVzdGlvbi5wcm90b3R5cGUuZ2V0Q3NzQ29udGVudCA9IGZ1bmN0aW9uIChjc3NDbGFzc2VzKSB7XG4gICAgICAgIHJldHVybiBuZXcgX3V0aWxzX2Nzc0NsYXNzQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX1tcIkNzc0NsYXNzQnVpbGRlclwiXSgpXG4gICAgICAgICAgICAuYXBwZW5kKGNzc0NsYXNzZXMuY29udGVudClcbiAgICAgICAgICAgIC5hcHBlbmQoY3NzQ2xhc3Nlcy5jb250ZW50TGVmdCwgdGhpcy5oYXNUaXRsZU9uTGVmdClcbiAgICAgICAgICAgIC50b1N0cmluZygpO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uLnByb3RvdHlwZSwgXCJjc3NUaXRsZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhpcy5lbnN1cmVFbGVtZW50Q3NzKCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY3NzVGl0bGVcIiwgXCJcIik7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBRdWVzdGlvbi5wcm90b3R5cGUuc2V0Q3NzVGl0bGUgPSBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNzc1RpdGxlXCIsIHZhbCk7XG4gICAgfTtcbiAgICBRdWVzdGlvbi5wcm90b3R5cGUuZ2V0Q3NzVGl0bGUgPSBmdW5jdGlvbiAoY3NzQ2xhc3Nlcykge1xuICAgICAgICByZXR1cm4gbmV3IF91dGlsc19jc3NDbGFzc0J1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19bXCJDc3NDbGFzc0J1aWxkZXJcIl0oKVxuICAgICAgICAgICAgLmFwcGVuZChfc3VwZXIucHJvdG90eXBlLmdldENzc1RpdGxlLmNhbGwodGhpcywgY3NzQ2xhc3NlcykpXG4gICAgICAgICAgICAuYXBwZW5kKGNzc0NsYXNzZXMudGl0bGVPbkFuc3dlciwgIXRoaXMuY29udGFpbnNFcnJvcnMgJiYgdGhpcy5pc0Fuc3dlcmVkKVxuICAgICAgICAgICAgLmFwcGVuZChjc3NDbGFzc2VzLnRpdGxlRW1wdHksICF0aGlzLnRpdGxlLnRyaW0oKSlcbiAgICAgICAgICAgIC50b1N0cmluZygpO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uLnByb3RvdHlwZSwgXCJjc3NEZXNjcmlwdGlvblwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhpcy5lbnN1cmVFbGVtZW50Q3NzKCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY3NzRGVzY3JpcHRpb25cIiwgXCJcIik7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBRdWVzdGlvbi5wcm90b3R5cGUuc2V0Q3NzRGVzY3JpcHRpb24gPSBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNzc0Rlc2NyaXB0aW9uXCIsIHZhbCk7XG4gICAgfTtcbiAgICBRdWVzdGlvbi5wcm90b3R5cGUuZ2V0Q3NzRGVzY3JpcHRpb24gPSBmdW5jdGlvbiAoY3NzQ2xhc3Nlcykge1xuICAgICAgICByZXR1cm4gbmV3IF91dGlsc19jc3NDbGFzc0J1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19bXCJDc3NDbGFzc0J1aWxkZXJcIl0oKVxuICAgICAgICAgICAgLmFwcGVuZChjc3NDbGFzc2VzLmRlc2NyaXB0aW9uLCB0aGlzLmhhc0Rlc2NyaXB0aW9uVW5kZXJUaXRsZSlcbiAgICAgICAgICAgIC5hcHBlbmQoY3NzQ2xhc3Nlcy5kZXNjcmlwdGlvblVuZGVySW5wdXQsIHRoaXMuaGFzRGVzY3JpcHRpb25VbmRlcklucHV0KVxuICAgICAgICAgICAgLnRvU3RyaW5nKCk7XG4gICAgfTtcbiAgICBRdWVzdGlvbi5wcm90b3R5cGUuc2hvd0Vycm9yT25Db3JlID0gZnVuY3Rpb24gKGxvY2F0aW9uKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5zaG93RXJyb3JzQWJvdmVRdWVzdGlvbiAmJiAhdGhpcy5zaG93RXJyb3JzQmVsb3dRdWVzdGlvbiAmJiB0aGlzLmdldEVycm9yTG9jYXRpb24oKSA9PT0gbG9jYXRpb247XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb24ucHJvdG90eXBlLCBcInNob3dFcnJvck9uVG9wXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zaG93RXJyb3JPbkNvcmUoXCJ0b3BcIik7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb24ucHJvdG90eXBlLCBcInNob3dFcnJvck9uQm90dG9tXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zaG93RXJyb3JPbkNvcmUoXCJib3R0b21cIik7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb24ucHJvdG90eXBlLCBcInNob3dFcnJvcnNPdXRzaWRlUXVlc3Rpb25cIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlzRGVmYXVsdFYyVGhlbWU7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb24ucHJvdG90eXBlLCBcInNob3dFcnJvcnNBYm92ZVF1ZXN0aW9uXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zaG93RXJyb3JzT3V0c2lkZVF1ZXN0aW9uICYmIHRoaXMuZ2V0RXJyb3JMb2NhdGlvbigpID09PSBcInRvcFwiO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uLnByb3RvdHlwZSwgXCJzaG93RXJyb3JzQmVsb3dRdWVzdGlvblwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2hvd0Vycm9yc091dHNpZGVRdWVzdGlvbiAmJiB0aGlzLmdldEVycm9yTG9jYXRpb24oKSA9PT0gXCJib3R0b21cIjtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbi5wcm90b3R5cGUsIFwiY3NzRXJyb3JcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRoaXMuZW5zdXJlRWxlbWVudENzcygpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNzc0Vycm9yXCIsIFwiXCIpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUXVlc3Rpb24ucHJvdG90eXBlLnNldENzc0Vycm9yID0gZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjc3NFcnJvclwiLCB2YWwpO1xuICAgIH07XG4gICAgUXVlc3Rpb24ucHJvdG90eXBlLmdldENzc0Vycm9yID0gZnVuY3Rpb24gKGNzc0NsYXNzZXMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBfdXRpbHNfY3NzQ2xhc3NCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fW1wiQ3NzQ2xhc3NCdWlsZGVyXCJdKClcbiAgICAgICAgICAgIC5hcHBlbmQoY3NzQ2xhc3Nlcy5lcnJvci5yb290KVxuICAgICAgICAgICAgLmFwcGVuZChjc3NDbGFzc2VzLmVycm9yLm91dHNpZGVRdWVzdGlvbiwgdGhpcy5zaG93RXJyb3JzQmVsb3dRdWVzdGlvbiB8fCB0aGlzLnNob3dFcnJvcnNBYm92ZVF1ZXN0aW9uKVxuICAgICAgICAgICAgLmFwcGVuZChjc3NDbGFzc2VzLmVycm9yLmJlbG93UXVlc3Rpb24sIHRoaXMuc2hvd0Vycm9yc0JlbG93UXVlc3Rpb24pXG4gICAgICAgICAgICAuYXBwZW5kKGNzc0NsYXNzZXMuZXJyb3IuYWJvdmVRdWVzdGlvbiwgdGhpcy5zaG93RXJyb3JzQWJvdmVRdWVzdGlvbilcbiAgICAgICAgICAgIC5hcHBlbmQoY3NzQ2xhc3Nlcy5lcnJvci5sb2NhdGlvblRvcCwgdGhpcy5zaG93RXJyb3JPblRvcClcbiAgICAgICAgICAgIC5hcHBlbmQoY3NzQ2xhc3Nlcy5lcnJvci5sb2NhdGlvbkJvdHRvbSwgdGhpcy5zaG93RXJyb3JPbkJvdHRvbSlcbiAgICAgICAgICAgIC50b1N0cmluZygpO1xuICAgIH07XG4gICAgUXVlc3Rpb24ucHJvdG90eXBlLmdldFJvb3RDc3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBuZXcgX3V0aWxzX2Nzc0NsYXNzQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX1tcIkNzc0NsYXNzQnVpbGRlclwiXSgpXG4gICAgICAgICAgICAuYXBwZW5kKHRoaXMuY3NzUm9vdClcbiAgICAgICAgICAgIC5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLmRpc2FibGVkLCB0aGlzLmlzUmVhZE9ubHkpXG4gICAgICAgICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5pbnZpc2libGUsICF0aGlzLmlzRGVzaWduTW9kZSAmJiB0aGlzLmFyZUludmlzaWJsZUVsZW1lbnRzU2hvd2luZyAmJiAhdGhpcy52aXNpYmxlKVxuICAgICAgICAgICAgLnRvU3RyaW5nKCk7XG4gICAgfTtcbiAgICBRdWVzdGlvbi5wcm90b3R5cGUuZ2V0UXVlc3Rpb25Sb290Q3NzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gbmV3IF91dGlsc19jc3NDbGFzc0J1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19bXCJDc3NDbGFzc0J1aWxkZXJcIl0oKVxuICAgICAgICAgICAgLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMucm9vdClcbiAgICAgICAgICAgIC5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLnJvb3RNb2JpbGUsIHRoaXMuaXNNb2JpbGUpXG4gICAgICAgICAgICAudG9TdHJpbmcoKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uLnByb3RvdHlwZS51cGRhdGVFbGVtZW50Q3NzID0gZnVuY3Rpb24gKHJlTmV3KSB7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUudXBkYXRlRWxlbWVudENzcy5jYWxsKHRoaXMsIHJlTmV3KTtcbiAgICAgICAgaWYgKHJlTmV3KSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVF1ZXN0aW9uQ3NzKHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub25JbmRlbnRDaGFuZ2VkKCk7XG4gICAgfTtcbiAgICBRdWVzdGlvbi5wcm90b3R5cGUudXBkYXRlUXVlc3Rpb25Dc3MgPSBmdW5jdGlvbiAocmVOZXcpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNMb2FkaW5nRnJvbUpzb24gfHxcbiAgICAgICAgICAgICF0aGlzLnN1cnZleSB8fFxuICAgICAgICAgICAgKHJlTmV3ICE9PSB0cnVlICYmICF0aGlzLmNzc0NsYXNzZXNWYWx1ZSkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMudXBkYXRlRWxlbWVudENzc0NvcmUodGhpcy5jc3NDbGFzc2VzKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uLnByb3RvdHlwZS5lbnN1cmVFbGVtZW50Q3NzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuY3NzQ2xhc3Nlc1ZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVF1ZXN0aW9uQ3NzKHRydWUpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBRdWVzdGlvbi5wcm90b3R5cGUudXBkYXRlRWxlbWVudENzc0NvcmUgPSBmdW5jdGlvbiAoY3NzQ2xhc3Nlcykge1xuICAgICAgICB0aGlzLnNldENzc1Jvb3QodGhpcy5nZXRDc3NSb290KGNzc0NsYXNzZXMpKTtcbiAgICAgICAgdGhpcy5zZXRDc3NIZWFkZXIodGhpcy5nZXRDc3NIZWFkZXIoY3NzQ2xhc3NlcykpO1xuICAgICAgICB0aGlzLnNldENzc0NvbnRlbnQodGhpcy5nZXRDc3NDb250ZW50KGNzc0NsYXNzZXMpKTtcbiAgICAgICAgdGhpcy5zZXRDc3NUaXRsZSh0aGlzLmdldENzc1RpdGxlKGNzc0NsYXNzZXMpKTtcbiAgICAgICAgdGhpcy5zZXRDc3NEZXNjcmlwdGlvbih0aGlzLmdldENzc0Rlc2NyaXB0aW9uKGNzc0NsYXNzZXMpKTtcbiAgICAgICAgdGhpcy5zZXRDc3NFcnJvcih0aGlzLmdldENzc0Vycm9yKGNzc0NsYXNzZXMpKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uLnByb3RvdHlwZS51cGRhdGVDc3NDbGFzc2VzID0gZnVuY3Rpb24gKHJlcywgY3NzKSB7XG4gICAgICAgIGlmICghY3NzLnF1ZXN0aW9uKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIgb2JqQ3NzID0gY3NzW3RoaXMuZ2V0Q3NzVHlwZSgpXTtcbiAgICAgICAgdmFyIHRpdGxlQnVpbGRlciA9IG5ldyBfdXRpbHNfY3NzQ2xhc3NCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fW1wiQ3NzQ2xhc3NCdWlsZGVyXCJdKCkuYXBwZW5kKHJlcy50aXRsZSlcbiAgICAgICAgICAgIC5hcHBlbmQoY3NzLnF1ZXN0aW9uLnRpdGxlUmVxdWlyZWQsIHRoaXMuaXNSZXF1aXJlZCk7XG4gICAgICAgIHJlcy50aXRsZSA9IHRpdGxlQnVpbGRlci50b1N0cmluZygpO1xuICAgICAgICB2YXIgcm9vdEJ1aWxkZXIgPSBuZXcgX3V0aWxzX2Nzc0NsYXNzQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX1tcIkNzc0NsYXNzQnVpbGRlclwiXSgpLmFwcGVuZChyZXMucm9vdClcbiAgICAgICAgICAgIC5hcHBlbmQob2JqQ3NzLCB0aGlzLmlzUmVxdWlyZWQgJiYgISFjc3MucXVlc3Rpb24ucmVxdWlyZWQpO1xuICAgICAgICBpZiAob2JqQ3NzID09PSB1bmRlZmluZWQgfHwgb2JqQ3NzID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXMucm9vdCA9IHJvb3RCdWlsZGVyLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIG9iakNzcyA9PT0gXCJzdHJpbmdcIiB8fCBvYmpDc3MgaW5zdGFuY2VvZiBTdHJpbmcpIHtcbiAgICAgICAgICAgIHJlcy5yb290ID0gcm9vdEJ1aWxkZXIuYXBwZW5kKG9iakNzcy50b1N0cmluZygpKS50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzLnJvb3QgPSByb290QnVpbGRlci50b1N0cmluZygpO1xuICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIG9iakNzcykge1xuICAgICAgICAgICAgICAgIHJlc1trZXldID0gb2JqQ3NzW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFF1ZXN0aW9uLnByb3RvdHlwZS5nZXRDc3NUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUeXBlKCk7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb24ucHJvdG90eXBlLCBcInJlbmRlckNzc1Jvb3RcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNzc0NsYXNzZXMucm9vdCB8fCB1bmRlZmluZWQ7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBRdWVzdGlvbi5wcm90b3R5cGUub25JbmRlbnRDaGFuZ2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnBhZGRpbmdMZWZ0ID0gdGhpcy5nZXRJbmRlbnRTaXplKHRoaXMuaW5kZW50KTtcbiAgICAgICAgdGhpcy5wYWRkaW5nUmlnaHQgPSB0aGlzLmdldEluZGVudFNpemUodGhpcy5yaWdodEluZGVudCk7XG4gICAgfTtcbiAgICBRdWVzdGlvbi5wcm90b3R5cGUuZ2V0SW5kZW50U2l6ZSA9IGZ1bmN0aW9uIChpbmRlbnQpIHtcbiAgICAgICAgaWYgKGluZGVudCA8IDEgfHwgIXRoaXMuZ2V0U3VydmV5KCkgfHwgIXRoaXMuY3NzQ2xhc3NlcyB8fCAhdGhpcy5jc3NDbGFzc2VzLmluZGVudClcbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICByZXR1cm4gaW5kZW50ICogdGhpcy5jc3NDbGFzc2VzLmluZGVudCArIFwicHhcIjtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIE1vdmVzIGZvY3VzIHRvIHRoZSBpbnB1dCBmaWVsZCBvZiB0aGlzIHF1ZXN0aW9uLlxuICAgICAqIEBwYXJhbSBvbkVycm9yIFBhc3MgYHRydWVgIGlmIHlvdSB3YW50IHRvIGZvY3VzIGFuIGlucHV0IGZpZWxkIHdpdGggdGhlIGZpcnN0IHZhbGlkYXRpb24gZXJyb3IuIERlZmF1bHQgdmFsdWU6IGBmYWxzZWAgKGZvY3VzZXMgdGhlIGZpcnN0IGlucHV0IGZpZWxkKS4gQXBwbGllcyB0byBxdWVzdGlvbiB0eXBlcyB3aXRoIG11bHRpcGxlIGlucHV0IGZpZWxkcy5cbiAgICAgKi9cbiAgICBRdWVzdGlvbi5wcm90b3R5cGUuZm9jdXMgPSBmdW5jdGlvbiAob25FcnJvciwgc2Nyb2xsSWZWaXNpYmxlKSB7XG4gICAgICAgIGlmIChvbkVycm9yID09PSB2b2lkIDApIHsgb25FcnJvciA9IGZhbHNlOyB9XG4gICAgICAgIGlmICh0aGlzLmlzRGVzaWduTW9kZSB8fCAhdGhpcy5pc1Zpc2libGUgfHwgIXRoaXMuc3VydmV5KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIgcGFnZSA9IHRoaXMucGFnZTtcbiAgICAgICAgdmFyIHNob3VsZENoYW5nZVBhZ2UgPSAhIXBhZ2UgJiYgdGhpcy5zdXJ2ZXkuYWN0aXZlUGFnZSAhPT0gcGFnZTtcbiAgICAgICAgaWYgKHNob3VsZENoYW5nZVBhZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuc3VydmV5LmZvY3VzUXVlc3Rpb25CeUluc3RhbmNlKHRoaXMsIG9uRXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5mb2N1c2NvcmUob25FcnJvciwgc2Nyb2xsSWZWaXNpYmxlKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgUXVlc3Rpb24ucHJvdG90eXBlLmZvY3VzY29yZSA9IGZ1bmN0aW9uIChvbkVycm9yLCBzY3JvbGxJZlZpc2libGUpIHtcbiAgICAgICAgaWYgKG9uRXJyb3IgPT09IHZvaWQgMCkgeyBvbkVycm9yID0gZmFsc2U7IH1cbiAgICAgICAgaWYgKCEhdGhpcy5zdXJ2ZXkpIHtcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kQWxsUGFyZW50cyh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuc3VydmV5LnNjcm9sbEVsZW1lbnRUb1RvcCh0aGlzLCB0aGlzLCBudWxsLCB0aGlzLmlkLCBzY3JvbGxJZlZpc2libGUpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBpZCA9ICFvbkVycm9yXG4gICAgICAgICAgICA/IHRoaXMuZ2V0Rmlyc3RJbnB1dEVsZW1lbnRJZCgpXG4gICAgICAgICAgICA6IHRoaXMuZ2V0Rmlyc3RFcnJvcklucHV0RWxlbWVudElkKCk7XG4gICAgICAgIGlmIChfc3VydmV5X2VsZW1lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIlN1cnZleUVsZW1lbnRcIl0uRm9jdXNFbGVtZW50KGlkKSkge1xuICAgICAgICAgICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy5mb2N1c0NhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgUXVlc3Rpb24ucHJvdG90eXBlLmV4cGFuZEFsbFBhcmVudHMgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgICAgICBpZiAoIWVsZW1lbnQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmIChlbGVtZW50LmlzQ29sbGFwc2VkKSB7XG4gICAgICAgICAgICBlbGVtZW50LmV4cGFuZCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZXhwYW5kQWxsUGFyZW50cyhlbGVtZW50LnBhcmVudCk7XG4gICAgICAgIHRoaXMuZXhwYW5kQWxsUGFyZW50cyhlbGVtZW50LnBhcmVudFF1ZXN0aW9uKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uLnByb3RvdHlwZS5mb2N1c0luID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuc3VydmV5IHx8IHRoaXMuaXNEaXNwb3NlZCB8fCB0aGlzLmlzQ29udGFpbmVyKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLnN1cnZleS53aGVuUXVlc3Rpb25Gb2N1c0luKHRoaXMpO1xuICAgIH07XG4gICAgUXVlc3Rpb24ucHJvdG90eXBlLmZpcmVDYWxsYmFjayA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgICBpZiAoY2FsbGJhY2spXG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgIH07XG4gICAgUXVlc3Rpb24ucHJvdG90eXBlLmdldE90aGVyc01heExlbmd0aCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnN1cnZleSlcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICByZXR1cm4gdGhpcy5zdXJ2ZXkubWF4T3RoZXJzTGVuZ3RoID4gMCA/IHRoaXMuc3VydmV5Lm1heE90aGVyc0xlbmd0aCA6IG51bGw7XG4gICAgfTtcbiAgICBRdWVzdGlvbi5wcm90b3R5cGUub25DcmVhdGluZyA9IGZ1bmN0aW9uICgpIHsgfTtcbiAgICBRdWVzdGlvbi5wcm90b3R5cGUuZ2V0Rmlyc3RRdWVzdGlvblRvRm9jdXMgPSBmdW5jdGlvbiAod2l0aEVycm9yKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhhc0lucHV0ICYmICghd2l0aEVycm9yIHx8IHRoaXMuY3VycmVudEVycm9yQ291bnQgPiAwKSA/IHRoaXMgOiBudWxsO1xuICAgIH07XG4gICAgUXVlc3Rpb24ucHJvdG90eXBlLmdldEZpcnN0SW5wdXRFbGVtZW50SWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlucHV0SWQ7XG4gICAgfTtcbiAgICBRdWVzdGlvbi5wcm90b3R5cGUuZ2V0Rmlyc3RFcnJvcklucHV0RWxlbWVudElkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRGaXJzdElucHV0RWxlbWVudElkKCk7XG4gICAgfTtcbiAgICBRdWVzdGlvbi5wcm90b3R5cGUuZ2V0UHJvY2Vzc2VkVGV4dFZhbHVlID0gZnVuY3Rpb24gKHRleHRWYWx1ZSkge1xuICAgICAgICB2YXIgbmFtZSA9IHRleHRWYWx1ZS5uYW1lLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgIHRleHRWYWx1ZS5pc0V4aXN0cyA9XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhRdWVzdGlvbi5UZXh0UHJlcHJvY2Vzc29yVmFsdWVzTWFwKS5pbmRleE9mKG5hbWUpICE9PSAtMSB8fFxuICAgICAgICAgICAgICAgIHRoaXNbdGV4dFZhbHVlLm5hbWVdICE9PSB1bmRlZmluZWQ7XG4gICAgICAgIHRleHRWYWx1ZS52YWx1ZSA9IHRoaXNbUXVlc3Rpb24uVGV4dFByZXByb2Nlc3NvclZhbHVlc01hcFtuYW1lXSB8fCB0ZXh0VmFsdWUubmFtZV07XG4gICAgfTtcbiAgICBRdWVzdGlvbi5wcm90b3R5cGUuc3VwcG9ydENvbW1lbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBwcm9wID0gdGhpcy5nZXRQcm9wZXJ0eUJ5TmFtZShcInNob3dDb21tZW50QXJlYVwiKTtcbiAgICAgICAgcmV0dXJuICFwcm9wIHx8IHByb3AudmlzaWJsZTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uLnByb3RvdHlwZS5zdXBwb3J0T3RoZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbi5wcm90b3R5cGUsIFwiaXNSZXF1aXJlZFwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBNYWtlcyB0aGUgcXVlc3Rpb24gcmVxdWlyZWQuIElmIGEgcmVzcG9uZGVudCBza2lwcyBhIHJlcXVpcmVkIHF1ZXN0aW9uLCB0aGUgc3VydmV5IGRpc3BsYXlzIGEgdmFsaWRhdGlvbiBlcnJvci5cbiAgICAgICAgICogQHNlZSByZXF1aXJlZElmXG4gICAgICAgICAqIEBzZWUgW0RhdGEgVmFsaWRhdGlvbl0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9kYXRhLXZhbGlkYXRpb24pXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpc1JlcXVpcmVkXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImlzUmVxdWlyZWRcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbi5wcm90b3R5cGUsIFwicmVxdWlyZWRJZlwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBIEJvb2xlYW4gZXhwcmVzc2lvbi4gSWYgaXQgZXZhbHVhdGVzIHRvIGB0cnVlYCwgdGhpcyBxdWVzdGlvbiBiZWNvbWVzIHJlcXVpcmVkLlxuICAgICAgICAgKlxuICAgICAgICAgKiBBIHN1cnZleSBwYXJzZXMgYW5kIHJ1bnMgYWxsIGV4cHJlc3Npb25zIG9uIHN0YXJ0dXAuIElmIGFueSB2YWx1ZXMgdXNlZCBpbiB0aGUgZXhwcmVzc2lvbiBjaGFuZ2UsIHRoZSBzdXJ2ZXkgcmUtZXZhbHVhdGVzIGl0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBSZWZlciB0byB0aGUgZm9sbG93aW5nIGhlbHAgdG9waWMgZm9yIG1vcmUgaW5mb3JtYXRpb246IFtDb25kaXRpb25hbCBWaXNpYmlsaXR5XShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2Rlc2lnbi1zdXJ2ZXktY29uZGl0aW9uYWwtbG9naWMjY29uZGl0aW9uYWwtdmlzaWJpbGl0eSlcbiAgICAgICAgICogQHNlZSBpc1JlcXVpcmVkXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJyZXF1aXJlZElmXCIsIFwiXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInJlcXVpcmVkSWZcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbi5wcm90b3R5cGUsIFwic2hvd0NvbW1lbnRBcmVhXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB3aGV0aGVyIHRvIGRpc3BsYXkgYSBjb21tZW50IGFyZWEuIEluY29tcGF0aWJsZSB3aXRoIHRoZSBgc2hvd090aGVySXRlbWAgcHJvcGVydHkuXG4gICAgICAgICAqIEBzZWUgY29tbWVudFxuICAgICAgICAgKiBAc2VlIGNvbW1lbnRUZXh0XG4gICAgICAgICAqIEBzZWUgc2hvd090aGVySXRlbVxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic2hvd0NvbW1lbnRBcmVhXCIsIGZhbHNlKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuc3VwcG9ydENvbW1lbnQoKSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzaG93Q29tbWVudEFyZWFcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbi5wcm90b3R5cGUsIFwiaGFzQ29tbWVudFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2hvd0NvbW1lbnRBcmVhO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd0NvbW1lbnRBcmVhID0gdmFsO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uLnByb3RvdHlwZSwgXCJpZFwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBIHZhbHVlIHRvIGFzc2lnbiB0byB0aGUgYGlkYCBhdHRyaWJ1dGUgb2YgdGhlIHJlbmRlcmVkIEhUTUwgZWxlbWVudC4gQSBkZWZhdWx0IGBpZGAgaXMgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkuXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpZFwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpZFwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uLnByb3RvdHlwZSwgXCJhcmlhVGl0bGVJZFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaWQgKyBcIl9hcmlhVGl0bGVcIjtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbi5wcm90b3R5cGUsIFwiY29tbWVudElkXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pZCArIFwiX2NvbW1lbnRcIjtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbi5wcm90b3R5cGUsIFwic2hvd090aGVySXRlbVwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgd2hldGhlciB0byBkaXNwbGF5IHRoZSBcIk90aGVyXCIgY2hvaWNlIGl0ZW0uIEluY29tcGF0aWJsZSB3aXRoIHRoZSBgc2hvd0NvbW1lbnRBcmVhYCBwcm9wZXJ0eS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHNlZSBvdGhlclRleHRcbiAgICAgICAgICogQHNlZSBvdGhlckl0ZW1cbiAgICAgICAgICogQHNlZSBvdGhlckVycm9yVGV4dFxuICAgICAgICAgKiBAc2VlIHNob3dDb21tZW50QXJlYVxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic2hvd090aGVySXRlbVwiLCBmYWxzZSk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnN1cHBvcnRPdGhlcigpIHx8IHRoaXMuc2hvd090aGVySXRlbSA9PSB2YWwpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwic2hvd090aGVySXRlbVwiLCB2YWwpO1xuICAgICAgICAgICAgdGhpcy5oYXNPdGhlckNoYW5nZWQoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbi5wcm90b3R5cGUsIFwiaGFzT3RoZXJcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNob3dPdGhlckl0ZW07XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zaG93T3RoZXJJdGVtID0gdmFsO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUXVlc3Rpb24ucHJvdG90eXBlLmhhc090aGVyQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHsgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb24ucHJvdG90eXBlLCBcInJlcXVpcmVVcGRhdGVDb21tZW50VmFsdWVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmhhc0NvbW1lbnQgfHwgdGhpcy5oYXNPdGhlcjtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbi5wcm90b3R5cGUsIFwiaXNSZWFkT25seVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGlzUGFyZW50UmVhZE9ubHkgPSAhIXRoaXMucGFyZW50ICYmIHRoaXMucGFyZW50LmlzUmVhZE9ubHk7XG4gICAgICAgICAgICB2YXIgaXNQYXJlUXVlc3Rpb25SZWFkT25seSA9ICEhdGhpcy5wYXJlbnRRdWVzdGlvbiAmJiB0aGlzLnBhcmVudFF1ZXN0aW9uLmlzUmVhZE9ubHk7XG4gICAgICAgICAgICB2YXIgaXNTdXJ2ZXlSZWFkT25seSA9ICEhdGhpcy5zdXJ2ZXkgJiYgdGhpcy5zdXJ2ZXkuaXNEaXNwbGF5TW9kZTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlYWRPbmx5IHx8IGlzUGFyZW50UmVhZE9ubHkgfHwgaXNTdXJ2ZXlSZWFkT25seSB8fCBpc1BhcmVRdWVzdGlvblJlYWRPbmx5O1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uLnByb3RvdHlwZSwgXCJpc0lucHV0UmVhZE9ubHlcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmZvcmNlSXNJbnB1dFJlYWRPbmx5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5mb3JjZUlzSW5wdXRSZWFkT25seTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBpc0Rlc2lnbk1vZGVWMiA9IF9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fW1wic2V0dGluZ3NcIl0uc3VwcG9ydENyZWF0b3JWMiAmJiB0aGlzLmlzRGVzaWduTW9kZTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlzUmVhZE9ubHkgfHwgaXNEZXNpZ25Nb2RlVjI7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb24ucHJvdG90eXBlLCBcInJlbmRlcmVkSW5wdXRSZWFkT25seVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNJbnB1dFJlYWRPbmx5ID8gXCJcIiA6IHVuZGVmaW5lZDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbi5wcm90b3R5cGUsIFwicmVuZGVyZWRJbnB1dERpc2FibGVkXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pc0lucHV0UmVhZE9ubHkgPyBcIlwiIDogdW5kZWZpbmVkO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUXVlc3Rpb24ucHJvdG90eXBlLm9uUmVhZE9ubHlDaGFuZ2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpc0lucHV0UmVhZE9ubHlcIiwgdGhpcy5pc0lucHV0UmVhZE9ubHkpO1xuICAgICAgICBfc3VwZXIucHJvdG90eXBlLm9uUmVhZE9ubHlDaGFuZ2VkLmNhbGwodGhpcyk7XG4gICAgICAgIHRoaXMudXBkYXRlUXVlc3Rpb25Dc3MoKTtcbiAgICAgICAgdGhpcy5jYWxjUmVuZGVyZWRDb21tZW50UGxhY2Vob2xkZXIoKTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbi5wcm90b3R5cGUsIFwiZW5hYmxlSWZcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogQSBCb29sZWFuIGV4cHJlc3Npb24uIElmIGl0IGV2YWx1YXRlcyB0byBgZmFsc2VgLCB0aGlzIHF1ZXN0aW9uIGJlY29tZXMgcmVhZC1vbmx5LlxuICAgICAgICAgKlxuICAgICAgICAgKiBBIHN1cnZleSBwYXJzZXMgYW5kIHJ1bnMgYWxsIGV4cHJlc3Npb25zIG9uIHN0YXJ0dXAuIElmIGFueSB2YWx1ZXMgdXNlZCBpbiB0aGUgZXhwcmVzc2lvbiBjaGFuZ2UsIHRoZSBzdXJ2ZXkgcmUtZXZhbHVhdGVzIGl0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBSZWZlciB0byB0aGUgZm9sbG93aW5nIGhlbHAgdG9waWMgZm9yIG1vcmUgaW5mb3JtYXRpb246IFtDb25kaXRpb25hbCBWaXNpYmlsaXR5XShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2Rlc2lnbi1zdXJ2ZXktY29uZGl0aW9uYWwtbG9naWMjY29uZGl0aW9uYWwtdmlzaWJpbGl0eSlcbiAgICAgICAgICogQHNlZSByZWFkT25seVxuICAgICAgICAgKiBAc2VlIGlzUmVhZE9ubHlcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImVuYWJsZUlmXCIsIFwiXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImVuYWJsZUlmXCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBRdWVzdGlvbi5wcm90b3R5cGUuc3VydmV5Q2hvaWNlSXRlbVZpc2liaWxpdHlDaGFuZ2UgPSBmdW5jdGlvbiAoKSB7IH07XG4gICAgUXVlc3Rpb24ucHJvdG90eXBlLnJ1bkNvbmRpdGlvbiA9IGZ1bmN0aW9uICh2YWx1ZXMsIHByb3BlcnRpZXMpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNEZXNpZ25Nb2RlKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAoIXByb3BlcnRpZXMpXG4gICAgICAgICAgICBwcm9wZXJ0aWVzID0ge307XG4gICAgICAgIHByb3BlcnRpZXNbXCJxdWVzdGlvblwiXSA9IHRoaXM7XG4gICAgICAgIHRoaXMucnVuQ29uZGl0aW9uQ29yZSh2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWx1ZUNoYW5nZWREaXJlY3RseSAmJiAoIXRoaXMuaXNDbGVhclZhbHVlT25IaWRkZW4gfHwgdGhpcy5pc1Zpc2libGVJblN1cnZleSkpIHtcbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdFZhbHVlUnVubmVyID0gdGhpcy5nZXREZWZhdWx0UnVubmVyKHRoaXMuZGVmYXVsdFZhbHVlUnVubmVyLCB0aGlzLmRlZmF1bHRWYWx1ZUV4cHJlc3Npb24pO1xuICAgICAgICAgICAgdGhpcy5ydW5EZWZhdWx0VmFsdWVFeHByZXNzaW9uKHRoaXMuZGVmYXVsdFZhbHVlUnVubmVyLCB2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb24ucHJvdG90eXBlLCBcIm5vXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEEgcXVlc3Rpb24gbnVtYmVyIG9yIGxldHRlciAoZGVwZW5kcyBvbiB0aGUgYHF1ZXN0aW9uU3RhcnRJbmRleGAgcHJvcGVydHkgb2YgdGhlIHF1ZXN0aW9uIGNvbnRhaW5lciAocGFuZWwsIHBhZ2UsIG9yIHN1cnZleSkpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBXaGVuIHRoZSBxdWVzdGlvbiBudW1iZXIsIHRpdGxlLCBvciB0aGUgZW50aXJlIHF1ZXN0aW9uIGlzIGludmlzaWJsZSwgdGhpcyBwcm9wZXJ0eSByZXR1cm5zIGFuIGVtcHR5IHN0cmluZy5cbiAgICAgICAgICogQHNlZSBTdXJ2ZXlNb2RlbC5xdWVzdGlvblN0YXJ0SW5kZXhcbiAgICAgICAgICogQHNlZSBoaWRlTnVtYmVyXG4gICAgICAgICAqIEBzZWUgdGl0bGVMb2NhdGlvblxuICAgICAgICAgKiBAc2VlIHZpc2libGVJZlxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibm9cIik7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBRdWVzdGlvbi5wcm90b3R5cGUuY2FsY05vID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuaGFzVGl0bGUgfHwgdGhpcy5oaWRlTnVtYmVyKVxuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIHZhciBubyA9IF9oZWxwZXJzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJIZWxwZXJzXCJdLmdldE51bWJlckJ5SW5kZXgodGhpcy52aXNpYmxlSW5kZXgsIHRoaXMuZ2V0U3RhcnRJbmRleCgpKTtcbiAgICAgICAgaWYgKCEhdGhpcy5zdXJ2ZXkpIHtcbiAgICAgICAgICAgIG5vID0gdGhpcy5zdXJ2ZXkuZ2V0VXBkYXRlZFF1ZXN0aW9uTm8odGhpcywgbm8pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBubztcbiAgICB9O1xuICAgIFF1ZXN0aW9uLnByb3RvdHlwZS5nZXRTdGFydEluZGV4ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoISF0aGlzLnBhcmVudClcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcmVudC5nZXRRdWVzdGlvblN0YXJ0SW5kZXgoKTtcbiAgICAgICAgaWYgKCEhdGhpcy5zdXJ2ZXkpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdXJ2ZXkucXVlc3Rpb25TdGFydEluZGV4O1xuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICB9O1xuICAgIFF1ZXN0aW9uLnByb3RvdHlwZS5vblN1cnZleUxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuaXNDdXN0b21XaWRnZXRSZXF1ZXN0ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy5zdXJ2ZXlMb2FkQ2FsbGJhY2spO1xuICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlV2l0aERlZmF1bHRzKCk7XG4gICAgICAgIGlmICh0aGlzLmlzRW1wdHkoKSkge1xuICAgICAgICAgICAgdGhpcy5pbml0RGF0YUZyb21TdXJ2ZXkoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNhbGNSZW5kZXJlZENvbW1lbnRQbGFjZWhvbGRlcigpO1xuICAgICAgICB0aGlzLm9uSW5kZW50Q2hhbmdlZCgpO1xuICAgIH07XG4gICAgUXVlc3Rpb24ucHJvdG90eXBlLm9uU2V0RGF0YSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5vblNldERhdGEuY2FsbCh0aGlzKTtcbiAgICAgICAgaWYgKCF0aGlzLnN1cnZleSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5pbml0RGF0YUZyb21TdXJ2ZXkoKTtcbiAgICAgICAgdGhpcy5vblN1cnZleVZhbHVlQ2hhbmdlZCh0aGlzLnZhbHVlKTtcbiAgICAgICAgdGhpcy51cGRhdGVWYWx1ZVdpdGhEZWZhdWx0cygpO1xuICAgICAgICB0aGlzLm9uSW5kZW50Q2hhbmdlZCgpO1xuICAgICAgICB0aGlzLnVwZGF0ZVF1ZXN0aW9uQ3NzKCk7XG4gICAgICAgIHRoaXMudXBkYXRlSXNBbnN3ZXJlZCgpO1xuICAgIH07XG4gICAgUXVlc3Rpb24ucHJvdG90eXBlLmluaXREYXRhRnJvbVN1cnZleSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCEhdGhpcy5kYXRhKSB7XG4gICAgICAgICAgICB2YXIgdmFsID0gdGhpcy5kYXRhLmdldFZhbHVlKHRoaXMuZ2V0VmFsdWVOYW1lKCkpO1xuICAgICAgICAgICAgaWYgKCFfaGVscGVyc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiSGVscGVyc1wiXS5pc1ZhbHVlRW1wdHkodmFsKSB8fCAhdGhpcy5pc0xvYWRpbmdGcm9tSnNvbikge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVmFsdWVGcm9tU3VydmV5KHZhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmluaXRDb21tZW50RnJvbVN1cnZleSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBRdWVzdGlvbi5wcm90b3R5cGUuaW5pdENvbW1lbnRGcm9tU3VydmV5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoISF0aGlzLmRhdGEgJiYgdGhpcy5yZXF1aXJlVXBkYXRlQ29tbWVudFZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbW1lbnRGcm9tU3VydmV5KHRoaXMuZGF0YS5nZXRDb21tZW50KHRoaXMuZ2V0VmFsdWVOYW1lKCkpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ29tbWVudEZyb21TdXJ2ZXkoXCJcIik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFF1ZXN0aW9uLnByb3RvdHlwZS5ydW5FeHByZXNzaW9uID0gZnVuY3Rpb24gKGV4cHJlc3Npb24pIHtcbiAgICAgICAgaWYgKCF0aGlzLnN1cnZleSB8fCAhZXhwcmVzc2lvbilcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiB0aGlzLnN1cnZleS5ydW5FeHByZXNzaW9uKGV4cHJlc3Npb24pO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uLnByb3RvdHlwZSwgXCJhdXRvR3Jvd0NvbW1lbnRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN1cnZleSAmJiB0aGlzLnN1cnZleS5hdXRvR3Jvd0NvbW1lbnQ7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb24ucHJvdG90eXBlLCBcImFsbG93UmVzaXplQ29tbWVudFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3VydmV5ICYmIHRoaXMuc3VydmV5LmFsbG93UmVzaXplQ29tbWVudDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbi5wcm90b3R5cGUsIFwicXVlc3Rpb25WYWx1ZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZVdpdGhvdXREZWZhdWx0KFwidmFsdWVcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidmFsdWVcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbi5wcm90b3R5cGUsIFwicXVlc3Rpb25Db21tZW50XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlV2l0aG91dERlZmF1bHQoXCJjb21tZW50XCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNvbW1lbnRcIiwgdmFsKTtcbiAgICAgICAgICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMuY29tbWVudENoYW5nZWRDYWxsYmFjayk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb24ucHJvdG90eXBlLCBcImlzVmFsdWVBcnJheVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZmFsc2U7IH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb24ucHJvdG90eXBlLCBcInZhbHVlXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldHMgb3Igc2V0cyB0aGUgcXVlc3Rpb24gdmFsdWUuXG4gICAgICAgICAqXG4gICAgICAgICAqIFRoZSBmb2xsb3dpbmcgdGFibGUgaWxsdXN0cmF0ZXMgaG93IHRoZSB2YWx1ZSB0eXBlIGRlcGVuZHMgb24gdGhlIHF1ZXN0aW9uIHR5cGU6XG4gICAgICAgICAqXG4gICAgICAgICAqIHwgUXVlc3Rpb24gdHlwZSB8IFZhbHVlIHR5cGUocykgfFxuICAgICAgICAgKiB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tIHxcbiAgICAgICAgICogfCBDaGVja2JveGVzIHwgYEFycmF5PFN0cmluZyBcXHwgTnVtYmVyPmAgfFxuICAgICAgICAgKiB8IERyb3Bkb3duIHwgYFN0cmluZ2AgXFx8IGBOdW1iZXJgIHxcbiAgICAgICAgICogfCBEeW5hbWljIE1hdHJpeCB8IGBBcnJheTxPYmplY3Q+YCB8XG4gICAgICAgICAqIHwgRHluYW1pYyBQYW5lbCB8IGBBcnJheTxPYmplY3Q+YCB8XG4gICAgICAgICAqIHwgRXhwcmVzc2lvbiB8IGBTdHJpbmdgIFxcfCBgTnVtYmVyYCBcXHwgYEJvb2xlYW5gIHxcbiAgICAgICAgICogfCBGaWxlIFVwbG9hZCB8IGBGaWxlYCBcXHwgYEFycmF5PEZpbGU+YCB8XG4gICAgICAgICAqIHwgSFRNTCB8IChubyB2YWx1ZSkgfFxuICAgICAgICAgKiB8IEltYWdlIHwgKG5vIHZhbHVlKSB8XG4gICAgICAgICAqIHwgSW1hZ2UgUGlja2VyIHwgYEFycmF5PFN0cmluZyBcXHwgTnVtYmVyPmAgfFxuICAgICAgICAgKiB8IExvbmcgVGV4dCB8IGBTdHJpbmdgIHxcbiAgICAgICAgICogfCBNdWx0aS1TZWxlY3QgRHJvcGRvd24gfCBgT2JqZWN0YCB8XG4gICAgICAgICAqIHwgTXVsdGktU2VsZWN0IE1hdHJpeCB8IGBPYmplY3RgIHxcbiAgICAgICAgICogfCBNdWx0aXBsZSBUZXh0Ym94ZXMgfCBgQXJyYXk8U3RyaW5nPmAgfFxuICAgICAgICAgKiB8IFBhbmVsIHwgKG5vIHZhbHVlKSB8XG4gICAgICAgICAqIHwgUmFkaW8gQnV0dG9uIEdyb3VwIHwgYFN0cmluZ2AgXFx8IGBOdW1iZXJgIHxcbiAgICAgICAgICogfCBSYW5raW5nIHwgYEFycmF5PFN0cmluZyBcXHwgTnVtYmVyPmAgfFxuICAgICAgICAgKiB8IFJhdGluZyBTY2FsZSB8IGBOdW1iZXJgIFxcfCBgU3RyaW5nYCB8XG4gICAgICAgICAqIHwgU2lnbmF0dXJlIHwgYFN0cmluZ2AgKGJhc2U2NC1lbmNvZGVkIGltYWdlKSB8XG4gICAgICAgICAqIHwgU2luZ2xlLUxpbmUgSW5wdXQgfCBgU3RyaW5nYCBcXHwgYE51bWJlcmAgXFx8IGBEYXRlYCB8XG4gICAgICAgICAqIHwgU2luZ2xlLVNlbGVjdCBNYXRyaXggfCBgT2JqZWN0YCB8XG4gICAgICAgICAqIHwgWWVzL05vIChCb29sZWFuKSB8IGBCb29sZWFuYCBcXHwgYFN0cmluZ2AgfFxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRWYWx1ZUNvcmUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAobmV3VmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0TmV3VmFsdWUobmV3VmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uLnByb3RvdHlwZSwgXCJoYXNGaWx0ZXJlZFZhbHVlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBmYWxzZTsgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFF1ZXN0aW9uLnByb3RvdHlwZS5nZXRGaWx0ZXJlZFZhbHVlID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy52YWx1ZTsgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb24ucHJvdG90eXBlLCBcInZhbHVlRm9yU3VydmV5XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoISF0aGlzLnZhbHVlVG9EYXRhQ2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZVRvRGF0YUNhbGxiYWNrKHRoaXMudmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBxdWVzdGlvbidzIGB2YWx1ZWAgYW5kIGBjb21tZW50YCBwcm9wZXJ0aWVzIHRvIGB1bmRlZmluZWRgLlxuICAgICAqIEBzZWUgdmFsdWVcbiAgICAgKiBAc2VlIGNvbW1lbnRcbiAgICAgKi9cbiAgICBRdWVzdGlvbi5wcm90b3R5cGUuY2xlYXJWYWx1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMudmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoISF0aGlzLmNvbW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuY29tbWVudCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlzVmFsdWVDaGFuZ2VkRGlyZWN0bHkgPSBmYWxzZTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uLnByb3RvdHlwZS51bmJpbmRWYWx1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5jbGVhclZhbHVlKCk7XG4gICAgfTtcbiAgICBRdWVzdGlvbi5wcm90b3R5cGUuY3JlYXRlVmFsdWVDb3B5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRVbmJpbmRWYWx1ZSh0aGlzLnZhbHVlKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uLnByb3RvdHlwZS5pbml0RGF0YVVJID0gZnVuY3Rpb24gKCkgeyB9O1xuICAgIFF1ZXN0aW9uLnByb3RvdHlwZS5nZXRVbmJpbmRWYWx1ZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5pc1ZhbHVlU3VydmV5RWxlbWVudCh2YWx1ZSkpXG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIHJldHVybiBfaGVscGVyc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiSGVscGVyc1wiXS5nZXRVbmJpbmRWYWx1ZSh2YWx1ZSk7XG4gICAgfTtcbiAgICBRdWVzdGlvbi5wcm90b3R5cGUuaXNWYWx1ZVN1cnZleUVsZW1lbnQgPSBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgIGlmICghdmFsKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKVxuICAgICAgICAgICAgcmV0dXJuIHZhbC5sZW5ndGggPiAwID8gdGhpcy5pc1ZhbHVlU3VydmV5RWxlbWVudCh2YWxbMF0pIDogZmFsc2U7XG4gICAgICAgIHJldHVybiAhIXZhbC5nZXRUeXBlICYmICEhdmFsLm9uUHJvcGVydHlDaGFuZ2VkO1xuICAgIH07XG4gICAgUXVlc3Rpb24ucHJvdG90eXBlLmNhbkNsZWFyVmFsdWVBc0ludmlzaWJsZSA9IGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgaWYgKHJlYXNvbiA9PT0gXCJvbkhpZGRlbkNvbnRhaW5lclwiICYmICF0aGlzLmlzUGFyZW50VmlzaWJsZSlcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAodGhpcy5pc1Zpc2libGVJblN1cnZleSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKCEhdGhpcy5wYWdlICYmIHRoaXMucGFnZS5pc1N0YXJ0UGFnZSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKCF0aGlzLnN1cnZleSB8fCAhdGhpcy52YWx1ZU5hbWUpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgcmV0dXJuICF0aGlzLnN1cnZleS5oYXNWaXNpYmxlUXVlc3Rpb25CeVZhbHVlTmFtZSh0aGlzLnZhbHVlTmFtZSk7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb24ucHJvdG90eXBlLCBcImlzUGFyZW50VmlzaWJsZVwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIGB0cnVlYCBpZiBhIHBhcmVudCBlbGVtZW50IChwYWdlIG9yIHBhbmVsKSBpcyB2aXNpYmxlLlxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wYXJlbnRRdWVzdGlvbiAmJiAhdGhpcy5wYXJlbnRRdWVzdGlvbi5pc1Zpc2libGUpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgdmFyIHBhcmVudCA9IHRoaXMucGFyZW50O1xuICAgICAgICAgICAgd2hpbGUgKHBhcmVudCkge1xuICAgICAgICAgICAgICAgIGlmICghcGFyZW50LmlzVmlzaWJsZSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFF1ZXN0aW9uLnByb3RvdHlwZS5jbGVhclZhbHVlSWZJbnZpc2libGUgPSBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgIGlmIChyZWFzb24gPT09IHZvaWQgMCkgeyByZWFzb24gPSBcIm9uSGlkZGVuXCI7IH1cbiAgICAgICAgdmFyIGNsZWFySWYgPSB0aGlzLmdldENsZWFySWZJbnZpc2libGUoKTtcbiAgICAgICAgaWYgKGNsZWFySWYgPT09IFwibm9uZVwiKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAocmVhc29uID09PSBcIm9uSGlkZGVuXCIgJiYgY2xlYXJJZiA9PT0gXCJvbkNvbXBsZXRlXCIpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmIChyZWFzb24gPT09IFwib25IaWRkZW5Db250YWluZXJcIiAmJiBjbGVhcklmICE9PSByZWFzb24pXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMuY2xlYXJWYWx1ZUlmSW52aXNpYmxlQ29yZShyZWFzb24pO1xuICAgIH07XG4gICAgUXVlc3Rpb24ucHJvdG90eXBlLmNsZWFyVmFsdWVJZkludmlzaWJsZUNvcmUgPSBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgIGlmICh0aGlzLmNhbkNsZWFyVmFsdWVBc0ludmlzaWJsZShyZWFzb24pKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFyVmFsdWUoKTtcbiAgICAgICAgICAgIHRoaXMuaXNWYWx1ZUNoYW5nZWREaXJlY3RseSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uLnByb3RvdHlwZSwgXCJjbGVhcklmSW52aXNpYmxlXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB3aGVuIHRvIGNsZWFyIHRoZSBxdWVzdGlvbiB2YWx1ZSBpZiB0aGUgcXVlc3Rpb24gYmVjb21lcyBpbnZpc2libGUuXG4gICAgICAgICAqXG4gICAgICAgICAqIFBvc3NpYmxlIHZhbHVlczpcbiAgICAgICAgICpcbiAgICAgICAgICogLSBgXCJkZWZhdWx0XCJgIChkZWZhdWx0KSAtIEluaGVyaXRzIHRoZSBzZXR0aW5nIGZyb20gdGhlIFN1cnZleSdzIFtgY2xlYXJJbnZpc2libGVWYWx1ZXNgXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL3N1cnZleW1vZGVsI2NsZWFySW52aXNpYmxlVmFsdWVzKSBwcm9wZXJ0eS5cbiAgICAgICAgICogLSBgXCJvbkhpZGRlblwiYCAtIENsZWFycyB0aGUgdmFsdWUgd2hlbiB0aGUgcXVlc3Rpb24gYmVjb21lcyBpbnZpc2libGUuIElmIGEgcXVlc3Rpb24gaXMgaW52aXNpYmxlIG9uIHN0YXJ0dXAgYW5kIGhhcyBhbiBpbml0aWFsIHZhbHVlLCB0aGlzIHZhbHVlIHdpbGwgYmUgY2xlYXJlZCB3aGVuIHRoZSBzdXJ2ZXkgaXMgY29tcGxldGUuXG4gICAgICAgICAqIC0gYFwib25IaWRkZW5Db250YWluZXJcImAgLSBDbGVhcnMgdGhlIHZhbHVlIHdoZW4gdGhlIHF1ZXN0aW9uIG9yIGl0cyBjb250YWluZXIgKHBhZ2Ugb3IgcGFuZWwpIGJlY29tZXMgaW52aXNpYmxlLiBJZiBhIHF1ZXN0aW9uIGlzIGludmlzaWJsZSBvbiBzdGFydHVwIGFuZCBoYXMgYW4gaW5pdGlhbCB2YWx1ZSwgdGhpcyB2YWx1ZSB3aWxsIGJlIGNsZWFyZWQgd2hlbiB0aGUgc3VydmV5IGlzIGNvbXBsZXRlLlxuICAgICAgICAgKiAtIGBcIm9uQ29tcGxldGVcImAgLSBDbGVhcnMgdGhlIHZhbHVlIHdoZW4gdGhlIHN1cnZleSBpcyBjb21wbGV0ZS5cbiAgICAgICAgICogLSBgXCJub25lXCJgIC0gTmV2ZXIgY2xlYXJzIHRoZSB2YWx1ZSBvZiBhbiBpbnZpc2libGUgcXVlc3Rpb24uXG4gICAgICAgICAqIEBzZWUgU3VydmV5TW9kZWwuY2xlYXJJbnZpc2libGVWYWx1ZXNcbiAgICAgICAgICogQHNlZSB2aXNpYmxlXG4gICAgICAgICAqIEBzZWUgU3VydmV5TW9kZWwub25Db21wbGV0ZVxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY2xlYXJJZkludmlzaWJsZVwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjbGVhcklmSW52aXNpYmxlXCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBRdWVzdGlvbi5wcm90b3R5cGUuZ2V0Q2xlYXJJZkludmlzaWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHJlcyA9IHRoaXMuY2xlYXJJZkludmlzaWJsZTtcbiAgICAgICAgaWYgKCEhdGhpcy5zdXJ2ZXkpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdXJ2ZXkuZ2V0UXVlc3Rpb25DbGVhcklmSW52aXNpYmxlKHJlcyk7XG4gICAgICAgIHJldHVybiByZXMgIT09IFwiZGVmYXVsdFwiID8gcmVzIDogXCJvbkNvbXBsZXRlXCI7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb24ucHJvdG90eXBlLCBcImRpc3BsYXlWYWx1ZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNMb2FkaW5nRnJvbUpzb24pXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXREaXNwbGF5VmFsdWUodHJ1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgZGlzcGxheSB0ZXh0IHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIHF1ZXN0aW9uIHZhbHVlLiBGb3IgZXhhbXBsZSwgaWYgeW91IGNhbGwgdGhpcyBtZXRob2QgZm9yIGEgRHJvcGRvd24gcXVlc3Rpb24sIGl0IHJldHVybnMgYW4gaXRlbSB0ZXh0IGluc3RlYWQgb2YgYW4gaXRlbSB2YWx1ZS5cbiAgICAgKiBAcGFyYW0ga2V5c0FzVGV4dCBBcHBsaWVzIHdoZW4gdGhlIHF1ZXN0aW9uIHZhbHVlIGlzIGFuIG9iamVjdCAoaW4gTWF0cml4LCBNdWx0aXBsZSBUZXh0LCBhbmQgc2ltaWxhciBxdWVzdGlvbnMpLiBQYXNzIGB0cnVlYCBpZiBub3Qgb25seSB2YWx1ZXMgaW4gdGhlIG9iamVjdCBzaG91bGQgYmUgZGlzcGxheSB0ZXh0cywgYnV0IGFsc28ga2V5cy4gRGVmYXVsdCB2YWx1ZTogYGZhbHNlYC5cbiAgICAgKiBAcGFyYW0gdmFsdWUgU3BlY2lmeSB0aGlzIHBhcmFtZXRlciB0byBnZXQgYSBkaXNwbGF5IHRleHQgZm9yIGEgc3BlY2lmaWMgdmFsdWUsIG5vdCBmb3IgdGhlIGN1cnJlbnQgcXVlc3Rpb24gdmFsdWUuIElmIHRoZSBxdWVzdGlvbiB2YWx1ZSBpcyBhbiBvYmplY3QsIHRoaXMgcGFyYW1ldGVyIHNob3VsZCBiZSBhIHNpbWlsYXIgb2JqZWN0LlxuICAgICAqL1xuICAgIFF1ZXN0aW9uLnByb3RvdHlwZS5nZXREaXNwbGF5VmFsdWUgPSBmdW5jdGlvbiAoa2V5c0FzVGV4dCwgdmFsdWUpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSB2b2lkIDApIHsgdmFsdWUgPSB1bmRlZmluZWQ7IH1cbiAgICAgICAgdmFyIHJlcyA9IHRoaXMuY2FsY0Rpc3BsYXlWYWx1ZShrZXlzQXNUZXh0LCB2YWx1ZSk7XG4gICAgICAgIGlmICh0aGlzLnN1cnZleSkge1xuICAgICAgICAgICAgcmVzID0gdGhpcy5zdXJ2ZXkuZ2V0UXVlc3Rpb25EaXNwbGF5VmFsdWUodGhpcywgcmVzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gISF0aGlzLmRpc3BsYXlWYWx1ZUNhbGxiYWNrID8gdGhpcy5kaXNwbGF5VmFsdWVDYWxsYmFjayhyZXMpIDogcmVzO1xuICAgIH07XG4gICAgUXVlc3Rpb24ucHJvdG90eXBlLmNhbGNEaXNwbGF5VmFsdWUgPSBmdW5jdGlvbiAoa2V5c0FzVGV4dCwgdmFsdWUpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSB2b2lkIDApIHsgdmFsdWUgPSB1bmRlZmluZWQ7IH1cbiAgICAgICAgaWYgKHRoaXMuY3VzdG9tV2lkZ2V0KSB7XG4gICAgICAgICAgICB2YXIgcmVzID0gdGhpcy5jdXN0b21XaWRnZXQuZ2V0RGlzcGxheVZhbHVlKHRoaXMsIHZhbHVlKTtcbiAgICAgICAgICAgIGlmIChyZXMpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfVxuICAgICAgICB2YWx1ZSA9IHZhbHVlID09IHVuZGVmaW5lZCA/IHRoaXMuY3JlYXRlVmFsdWVDb3B5KCkgOiB2YWx1ZTtcbiAgICAgICAgaWYgKHRoaXMuaXNWYWx1ZUVtcHR5KHZhbHVlLCAhdGhpcy5hbGxvd1NwYWNlQXNBbnN3ZXIpKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RGlzcGxheVZhbHVlRW1wdHkoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RGlzcGxheVZhbHVlQ29yZShrZXlzQXNUZXh0LCB2YWx1ZSk7XG4gICAgfTtcbiAgICBRdWVzdGlvbi5wcm90b3R5cGUuZ2V0RGlzcGxheVZhbHVlQ29yZSA9IGZ1bmN0aW9uIChrZXlBc1RleHQsIHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uLnByb3RvdHlwZS5nZXREaXNwbGF5VmFsdWVFbXB0eSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb24ucHJvdG90eXBlLCBcImRlZmF1bHRWYWx1ZVwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSBxdWVzdGlvbi4gSWdub3JlZCBmb3IgcXVlc3Rpb24gdHlwZXMgdGhhdCBjYW5ub3QgaGF2ZSBhIFt2YWx1ZV0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9xdWVzdGlvbiN2YWx1ZSkgKGZvciBleGFtcGxlLCBIVE1MKS5cbiAgICAgICAgICpcbiAgICAgICAgICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgdXNlZCBhcyBhIHF1ZXN0aW9uIHZhbHVlIGluIHRoZSBmb2xsb3dpbmcgY2FzZXM6XG4gICAgICAgICAqXG4gICAgICAgICAqIC0gV2hpbGUgdGhlIHN1cnZleSBpcyBiZWluZyBsb2FkZWQgZnJvbSBKU09OLlxuICAgICAgICAgKiAtIFRoZSBxdWVzdGlvbiBpcyBqdXN0IGFkZGVkIHRvIHRoZSBzdXJ2ZXkgYW5kIGRvZXMgbm90IHlldCBoYXZlIGFuIGFuc3dlci5cbiAgICAgICAgICogLSBUaGUgcmVzcG9uZGVudCBsZWZ0IHRoZSBhbnN3ZXIgZW1wdHkuXG4gICAgICAgICAqIEBzZWUgZGVmYXVsdFZhbHVlRXhwcmVzc2lvblxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiZGVmYXVsdFZhbHVlXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzVmFsdWVFeHByZXNzaW9uKHZhbCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRWYWx1ZUV4cHJlc3Npb24gPSB2YWwuc3Vic3RyaW5nKDEpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImRlZmF1bHRWYWx1ZVwiLCB0aGlzLmNvbnZlcnREZWZhdWx0VmFsdWUodmFsKSk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlV2l0aERlZmF1bHRzKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb24ucHJvdG90eXBlLCBcImRlZmF1bHRWYWx1ZUV4cHJlc3Npb25cIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogQW4gZXhwcmVzc2lvbiB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgW2RlZmF1bHRWYWx1ZV0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9xdWVzdGlvbiNkZWZhdWx0VmFsdWUpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBUaGlzIGV4cHJlc3Npb24gYXBwbGllcyB1bnRpbCB0aGUgcXVlc3Rpb24gW3ZhbHVlXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL3F1ZXN0aW9uI3ZhbHVlKSBpcyBzcGVjaWZpZWQgYnkgYW4gZW5kIHVzZXIgb3IgcHJvZ3JhbW1hdGljYWxseS5cbiAgICAgICAgICpcbiAgICAgICAgICogQW4gZXhwcmVzc2lvbiBjYW4gcmVmZXJlbmNlIG90aGVyIHF1ZXN0aW9ucyBhcyBmb2xsb3dzOlxuICAgICAgICAgKlxuICAgICAgICAgKiAtIGB7b3RoZXJfcXVlc3Rpb25fbmFtZX1gXG4gICAgICAgICAqIC0gYHtwYW5lbC5vdGhlcl9xdWVzdGlvbl9uYW1lfWAgKHRvIGFjY2VzcyBxdWVzdGlvbnMgaW5zaWRlIHRoZSBzYW1lIGR5bmFtaWMgcGFuZWwpXG4gICAgICAgICAqIC0gYHtyb3cub3RoZXJfcXVlc3Rpb25fbmFtZX1gICh0byBhY2Nlc3MgcXVlc3Rpb25zIGluc2lkZSB0aGUgc2FtZSBkeW5hbWljIG1hdHJpeCBvciBtdWx0aS1jb2x1bW4gZHJvcGRvd24pXG4gICAgICAgICAqXG4gICAgICAgICAqIEFuIGV4cHJlc3Npb24gY2FuIGFsc28gaW5jbHVkZSBidWlsdC1pbiBhbmQgY3VzdG9tIGZ1bmN0aW9ucyBmb3IgYWR2YW5jZWQgY2FsY3VsYXRpb25zLiBGb3IgZXhhbXBsZSwgaWYgdGhlIGBkZWZhdWx0VmFsdWVgIHNob3VsZCBiZSB0b2RheSdzIGRhdGUsIHNldCB0aGUgYGRlZmF1bHRWYWx1ZUV4cHJlc3Npb25gIHRvIGBcInRvZGF5KClcImAsIGFuZCB0aGUgY29ycmVzcG9uZGluZyBidWlsdC1pbiBmdW5jdGlvbiB3aWxsIGJlIGV4ZWN1dGVkIGVhY2ggdGltZSB0aGUgc3VydmV5IGlzIGxvYWRlZC4gUmVmZXIgdG8gdGhlIGZvbGxvd2luZyBoZWxwIHRvcGljIGZvciBtb3JlIGluZm9ybWF0aW9uOiBbQnVpbHQtSW4gRnVuY3Rpb25zXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2Rlc2lnbi1zdXJ2ZXktY29uZGl0aW9uYWwtbG9naWMjYnVpbHQtaW4tZnVuY3Rpb25zKS5cbiAgICAgICAgICogQHNlZSBkZWZhdWx0VmFsdWVcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImRlZmF1bHRWYWx1ZUV4cHJlc3Npb25cIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiZGVmYXVsdFZhbHVlRXhwcmVzc2lvblwiLCB2YWwpO1xuICAgICAgICAgICAgdGhpcy5kZWZhdWx0VmFsdWVSdW5uZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlV2l0aERlZmF1bHRzKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb24ucHJvdG90eXBlLCBcInJlc2V0VmFsdWVJZlwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBIEJvb2xlYW4gZXhwcmVzc2lvbi4gSWYgaXQgZXZhbHVhdGVzIHRvIGB0cnVlYCwgdGhlIHF1ZXN0aW9uIHZhbHVlIGlzIHJlc2V0IHRvIFtkZWZhdWx0XSgjZGVmYXVsdFZhbHVlKS5cbiAgICAgICAgICpcbiAgICAgICAgICogQSBzdXJ2ZXkgcGFyc2VzIGFuZCBydW5zIGFsbCBleHByZXNzaW9ucyBvbiBzdGFydHVwLiBJZiBhbnkgdmFsdWVzIHVzZWQgaW4gdGhlIGV4cHJlc3Npb24gY2hhbmdlLCB0aGUgc3VydmV5IHJlLWV2YWx1YXRlcyBpdC5cbiAgICAgICAgICpcbiAgICAgICAgICogW0V4cHJlc3Npb25zXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2Rlc2lnbi1zdXJ2ZXkvY29uZGl0aW9uYWwtbG9naWMjZXhwcmVzc2lvbnMgKGxpbmtTdHlsZSkpXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJyZXNldFZhbHVlSWZcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicmVzZXRWYWx1ZUlmXCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb24ucHJvdG90eXBlLCBcInJlc2l6ZVN0eWxlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hbGxvd1Jlc2l6ZUNvbW1lbnQgPyBcImJvdGhcIiA6IFwibm9uZVwiO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgcXVlc3Rpb24gdmFsdWUgYXMgYW4gb2JqZWN0IGluIHdoaWNoIHRoZSBxdWVzdGlvbiBuYW1lLCB0aXRsZSwgdmFsdWUsIGFuZCBvdGhlciBwYXJhbWV0ZXJzIGFyZSBzdG9yZWQgYXMgaW5kaXZpZHVhbCBwcm9wZXJ0aWVzLlxuICAgICAqXG4gICAgICogSWYgdGhlIHF1ZXN0aW9uIGNhbiBoYXZlIG1vcmUgdGhhbiBvbmUgdmFsdWUgKE1hdHJpeCwgTXVsdGlwbGUgVGV4dCksIHRoZSBvYmplY3QgZW5hYmxlcyB0aGUgYGlzTm9kZWAgZmxhZyBhbmQgc3RvcmVzIGluZm9ybWF0aW9uIGFib3V0IHRoZXNlIHZhbHVlcyBpbiB0aGUgYGRhdGFgIHByb3BlcnR5LiBSZWZlciB0byB0aGUgZm9sbG93aW5nIGhlbHAgdG9waWMgZm9yIG1vcmUgaW5mb3JtYXRpb246IFtBY2Nlc3MgRnVsbCBTdXJ2ZXkgUmVzdWx0c10oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9oYW5kbGUtc3VydmV5LXJlc3VsdHMtYWNjZXNzI2FjY2Vzcy1mdWxsLXN1cnZleS1yZXN1bHRzKS5cbiAgICAgKlxuICAgICAqIFBhc3MgYW4gb2JqZWN0IHdpdGggdGhlIGBpbmNsdWRlRW1wdHlgIHByb3BlcnR5IHNldCB0byBgZmFsc2VgIGlmIHlvdSB3YW50IHRvIHNraXAgZW1wdHkgYW5zd2Vycy5cbiAgICAgKi9cbiAgICBRdWVzdGlvbi5wcm90b3R5cGUuZ2V0UGxhaW5EYXRhID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICAgICAgICBvcHRpb25zID0geyBpbmNsdWRlRW1wdHk6IHRydWUsIGluY2x1ZGVRdWVzdGlvblR5cGVzOiBmYWxzZSB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmluY2x1ZGVFbXB0eSB8fCAhdGhpcy5pc0VtcHR5KCkpIHtcbiAgICAgICAgICAgIHZhciBxdWVzdGlvblBsYWluRGF0YSA9IHtcbiAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRoaXMubG9jVGl0bGUucmVuZGVyZWRIdG1sLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgICAgIGRpc3BsYXlWYWx1ZTogdGhpcy5kaXNwbGF5VmFsdWUsXG4gICAgICAgICAgICAgICAgaXNOb2RlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBnZXRTdHJpbmc6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWwgPT09IFwib2JqZWN0XCIgPyBKU09OLnN0cmluZ2lmeSh2YWwpIDogdmFsO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZVF1ZXN0aW9uVHlwZXMgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICBxdWVzdGlvblBsYWluRGF0YS5xdWVzdGlvblR5cGUgPSB0aGlzLmdldFR5cGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIChvcHRpb25zLmNhbGN1bGF0aW9ucyB8fCBbXSkuZm9yRWFjaChmdW5jdGlvbiAoY2FsY3VsYXRpb24pIHtcbiAgICAgICAgICAgICAgICBxdWVzdGlvblBsYWluRGF0YVtjYWxjdWxhdGlvbi5wcm9wZXJ0eU5hbWVdID0gX3RoaXMuZ2V0UGxhaW5EYXRhQ2FsY3VsYXRlZFZhbHVlKGNhbGN1bGF0aW9uLnByb3BlcnR5TmFtZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICh0aGlzLmhhc0NvbW1lbnQpIHtcbiAgICAgICAgICAgICAgICBxdWVzdGlvblBsYWluRGF0YS5pc05vZGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHF1ZXN0aW9uUGxhaW5EYXRhLmRhdGEgPSBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0NvbW1lbnQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXCJDb21tZW50XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogX3NldHRpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bXCJzZXR0aW5nc1wiXS5jb21tZW50U3VmZml4LFxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheVZhbHVlOiB0aGlzLmNvbW1lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRTdHJpbmc6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gXCJvYmplY3RcIiA/IEpTT04uc3RyaW5naWZ5KHZhbCkgOiB2YWw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNOb2RlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHF1ZXN0aW9uUGxhaW5EYXRhO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfTtcbiAgICBRdWVzdGlvbi5wcm90b3R5cGUuZ2V0UGxhaW5EYXRhQ2FsY3VsYXRlZFZhbHVlID0gZnVuY3Rpb24gKHByb3BOYW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzW3Byb3BOYW1lXTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbi5wcm90b3R5cGUsIFwiY29ycmVjdEFuc3dlclwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBIGNvcnJlY3QgYW5zd2VyIHRvIHRoaXMgcXVlc3Rpb24uIFNwZWNpZnkgdGhpcyBwcm9wZXJ0eSBpZiB5b3Ugd2FudCB0byBbY3JlYXRlIGEgcXVpel0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9kZXNpZ24tc3VydmV5LWNyZWF0ZS1hLXF1aXopLlxuICAgICAgICAgKiBAc2VlIFN1cnZleU1vZGVsLmdldENvcnJlY3RBbnN3ZXJDb3VudFxuICAgICAgICAgKiBAc2VlIFN1cnZleU1vZGVsLmdldEluQ29ycmVjdEFuc3dlckNvdW50XG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjb3JyZWN0QW5zd2VyXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNvcnJlY3RBbnN3ZXJcIiwgdGhpcy5jb252ZXJ0RGVmYXVsdFZhbHVlKHZhbCkpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUXVlc3Rpb24ucHJvdG90eXBlLmNvbnZlcnREZWZhdWx0VmFsdWUgPSBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb24ucHJvdG90eXBlLCBcInF1aXpRdWVzdGlvbkNvdW50XCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSBudW1iZXIgb2YgcXVpeiBxdWVzdGlvbnMuIEEgcXVlc3Rpb24gY291bnRzIGlmIGl0IGlzIHZpc2libGUsIGhhcyBhbiBpbnB1dCBmaWVsZCwgYW5kIHNwZWNpZmllcyBgY29ycmVjdEFuc3dlcmAuXG4gICAgICAgICAqIEBzZWUgW0NyZWF0ZSBhIFF1aXpdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vZGVzaWduLXN1cnZleS1jcmVhdGUtYS1xdWl6KVxuICAgICAgICAgKiBAc2VlIGNvcnJlY3RBbnN3ZXJcbiAgICAgICAgICogQHNlZSBTdXJ2ZXlNb2RlbC5nZXRRdWl6UXVlc3Rpb25zXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzVmlzaWJsZSAmJlxuICAgICAgICAgICAgICAgIHRoaXMuaGFzSW5wdXQgJiZcbiAgICAgICAgICAgICAgICAhdGhpcy5pc1ZhbHVlRW1wdHkodGhpcy5jb3JyZWN0QW5zd2VyKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRRdWl6UXVlc3Rpb25Db3VudCgpO1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb24ucHJvdG90eXBlLCBcImNvcnJlY3RBbnN3ZXJDb3VudFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlzRW1wdHkoKSAmJiAhdGhpcy5pc1ZhbHVlRW1wdHkodGhpcy5jb3JyZWN0QW5zd2VyKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDb3JyZWN0QW5zd2VyQ291bnQoKTtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUXVlc3Rpb24ucHJvdG90eXBlLmdldFF1aXpRdWVzdGlvbkNvdW50ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gMTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uLnByb3RvdHlwZS5nZXRDb3JyZWN0QW5zd2VyQ291bnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoZWNrSWZBbnN3ZXJDb3JyZWN0KCkgPyAxIDogMDtcbiAgICB9O1xuICAgIFF1ZXN0aW9uLnByb3RvdHlwZS5jaGVja0lmQW5zd2VyQ29ycmVjdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGlzRXF1YWwgPSBfaGVscGVyc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiSGVscGVyc1wiXS5pc1R3b1ZhbHVlRXF1YWxzKHRoaXMudmFsdWUsIHRoaXMuY29ycmVjdEFuc3dlciwgdGhpcy5nZXRBbnN3ZXJDb3JyZWN0SWdub3JlT3JkZXIoKSwgX3NldHRpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bXCJzZXR0aW5nc1wiXS5jb21wYXJhdG9yLmNhc2VTZW5zaXRpdmUsIHRydWUpO1xuICAgICAgICB2YXIgY29ycmVjdCA9IGlzRXF1YWwgPyAxIDogMDtcbiAgICAgICAgdmFyIG9wdGlvbnMgPSB7IHJlc3VsdDogaXNFcXVhbCwgY29ycmVjdEFuc3dlcjogY29ycmVjdCwgY29ycmVjdEFuc3dlcnM6IGNvcnJlY3QsIGluY29ycmVjdEFuc3dlcnM6IHRoaXMucXVpelF1ZXN0aW9uQ291bnQgLSBjb3JyZWN0IH07XG4gICAgICAgIGlmICghIXRoaXMuc3VydmV5KSB7XG4gICAgICAgICAgICB0aGlzLnN1cnZleS5vbkNvcnJlY3RRdWVzdGlvbkFuc3dlcih0aGlzLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3B0aW9ucy5yZXN1bHQ7XG4gICAgfTtcbiAgICBRdWVzdGlvbi5wcm90b3R5cGUuZ2V0QW5zd2VyQ29ycmVjdElnbm9yZU9yZGVyID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gZmFsc2U7IH07XG4gICAgLyoqXG4gICAgKiBSZXR1cm5zIGB0cnVlYCBpZiBhIHF1ZXN0aW9uIGFuc3dlciBtYXRjaGVzIHRoZSBgY29ycmVjdEFuc3dlcmAgcHJvcGVydHkgdmFsdWUuXG4gICAgKlxuICAgICogW1ZpZXcgRGVtb10oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZXhhbXBsZXMvY3JlYXRlLWEtc2NvcmVkLXF1aXogKGxpbmtTdHlsZSkpXG4gICAgKiBAc2VlIGNvcnJlY3RBbnN3ZXJcbiAgICAqIEBzZWUgU3VydmV5TW9kZWwuZ2V0UXVpelF1ZXN0aW9uc1xuICAgICovXG4gICAgUXVlc3Rpb24ucHJvdG90eXBlLmlzQW5zd2VyQ29ycmVjdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29ycmVjdEFuc3dlckNvdW50ID09IHRoaXMucXVpelF1ZXN0aW9uQ291bnQ7XG4gICAgfTtcbiAgICBRdWVzdGlvbi5wcm90b3R5cGUudXBkYXRlVmFsdWVXaXRoRGVmYXVsdHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzTG9hZGluZ0Zyb21Kc29uIHx8ICghdGhpcy5pc0Rlc2lnbk1vZGUgJiYgdGhpcy5pc0RlZmF1bHRWYWx1ZUVtcHR5KCkpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAoIXRoaXMuaXNEZXNpZ25Nb2RlICYmICF0aGlzLmlzRW1wdHkoKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKHRoaXMuaXNFbXB0eSgpICYmIHRoaXMuaXNEZWZhdWx0VmFsdWVFbXB0eSgpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAodGhpcy5pc0NsZWFyVmFsdWVPbkhpZGRlbiAmJiAhdGhpcy5pc1Zpc2libGUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmICh0aGlzLmlzRGVzaWduTW9kZSAmJiB0aGlzLmlzQ29udGVudEVsZW1lbnQgJiYgdGhpcy5pc0RlZmF1bHRWYWx1ZUVtcHR5KCkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMuc2V0RGVmYXVsdFZhbHVlKCk7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb24ucHJvdG90eXBlLCBcImlzQ2xlYXJWYWx1ZU9uSGlkZGVuXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgY2xlYXJJZiA9IHRoaXMuZ2V0Q2xlYXJJZkludmlzaWJsZSgpO1xuICAgICAgICAgICAgaWYgKGNsZWFySWYgPT09IFwibm9uZVwiIHx8IGNsZWFySWYgPT09IFwib25Db21wbGV0ZVwiKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiBjbGVhcklmID09PSBcIm9uSGlkZGVuXCIgfHwgY2xlYXJJZiA9PT0gXCJvbkhpZGRlbkNvbnRhaW5lclwiO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUXVlc3Rpb24ucHJvdG90eXBlLmdldFF1ZXN0aW9uRnJvbUFycmF5ID0gZnVuY3Rpb24gKG5hbWUsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gICAgUXVlc3Rpb24ucHJvdG90eXBlLmdldERlZmF1bHRWYWx1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFZhbHVlO1xuICAgIH07XG4gICAgUXVlc3Rpb24ucHJvdG90eXBlLmlzRGVmYXVsdFZhbHVlRW1wdHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5kZWZhdWx0VmFsdWVFeHByZXNzaW9uICYmIHRoaXMuaXNWYWx1ZUVtcHR5KHRoaXMuZGVmYXVsdFZhbHVlLCAhdGhpcy5hbGxvd1NwYWNlQXNBbnN3ZXIpO1xuICAgIH07XG4gICAgUXVlc3Rpb24ucHJvdG90eXBlLmdldERlZmF1bHRSdW5uZXIgPSBmdW5jdGlvbiAocnVubmVyLCBleHByZXNzaW9uKSB7XG4gICAgICAgIGlmICghcnVubmVyICYmICEhZXhwcmVzc2lvbikge1xuICAgICAgICAgICAgcnVubmVyID0gdGhpcy5jcmVhdGVFeHByZXNzaW9uUnVubmVyKGV4cHJlc3Npb24pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghIXJ1bm5lcikge1xuICAgICAgICAgICAgcnVubmVyLmV4cHJlc3Npb24gPSBleHByZXNzaW9uO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBydW5uZXI7XG4gICAgfTtcbiAgICBRdWVzdGlvbi5wcm90b3R5cGUuc2V0RGVmYXVsdFZhbHVlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB0aGlzLmRlZmF1bHRWYWx1ZVJ1bm5lciA9IHRoaXMuZ2V0RGVmYXVsdFJ1bm5lcih0aGlzLmRlZmF1bHRWYWx1ZVJ1bm5lciwgdGhpcy5kZWZhdWx0VmFsdWVFeHByZXNzaW9uKTtcbiAgICAgICAgdGhpcy5zZXRWYWx1ZUFuZFJ1bkV4cHJlc3Npb24odGhpcy5kZWZhdWx0VmFsdWVSdW5uZXIsIHRoaXMuZ2V0VW5iaW5kVmFsdWUodGhpcy5kZWZhdWx0VmFsdWUpLCBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICBpZiAoIV90aGlzLmlzVHdvVmFsdWVFcXVhbHMoX3RoaXMudmFsdWUsIHZhbCkpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy52YWx1ZSA9IHZhbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBRdWVzdGlvbi5wcm90b3R5cGUuaXNWYWx1ZUV4cHJlc3Npb24gPSBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgIHJldHVybiAhIXZhbCAmJiB0eXBlb2YgdmFsID09IFwic3RyaW5nXCIgJiYgdmFsLmxlbmd0aCA+IDAgJiYgdmFsWzBdID09IFwiPVwiO1xuICAgIH07XG4gICAgUXVlc3Rpb24ucHJvdG90eXBlLnNldFZhbHVlQW5kUnVuRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChydW5uZXIsIGRlZmF1bHRWYWx1ZSwgc2V0RnVuYywgdmFsdWVzLCBwcm9wZXJ0aWVzKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGlmICh2YWx1ZXMgPT09IHZvaWQgMCkgeyB2YWx1ZXMgPSBudWxsOyB9XG4gICAgICAgIGlmIChwcm9wZXJ0aWVzID09PSB2b2lkIDApIHsgcHJvcGVydGllcyA9IG51bGw7IH1cbiAgICAgICAgdmFyIGZ1bmMgPSBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICBfdGhpcy5ydW5FeHByZXNzaW9uU2V0VmFsdWUodmFsLCBzZXRGdW5jKTtcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKCF0aGlzLnJ1bkRlZmF1bHRWYWx1ZUV4cHJlc3Npb24ocnVubmVyLCB2YWx1ZXMsIHByb3BlcnRpZXMsIGZ1bmMpKSB7XG4gICAgICAgICAgICBmdW5jKGRlZmF1bHRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFF1ZXN0aW9uLnByb3RvdHlwZS5jb252ZXJ0RnVuY1ZhbHVldG9RdWVzdGlvblZhbHVlID0gZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICByZXR1cm4gX2hlbHBlcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkhlbHBlcnNcIl0uY29udmVydFZhbFRvUXVlc3Rpb25WYWwodmFsKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uLnByb3RvdHlwZS5ydW5FeHByZXNzaW9uU2V0VmFsdWUgPSBmdW5jdGlvbiAodmFsLCBzZXRGdW5jKSB7XG4gICAgICAgIHNldEZ1bmModGhpcy5jb252ZXJ0RnVuY1ZhbHVldG9RdWVzdGlvblZhbHVlKHZhbCkpO1xuICAgIH07XG4gICAgUXVlc3Rpb24ucHJvdG90eXBlLnJ1bkRlZmF1bHRWYWx1ZUV4cHJlc3Npb24gPSBmdW5jdGlvbiAocnVubmVyLCB2YWx1ZXMsIHByb3BlcnRpZXMsIHNldEZ1bmMpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgaWYgKHZhbHVlcyA9PT0gdm9pZCAwKSB7IHZhbHVlcyA9IG51bGw7IH1cbiAgICAgICAgaWYgKHByb3BlcnRpZXMgPT09IHZvaWQgMCkgeyBwcm9wZXJ0aWVzID0gbnVsbDsgfVxuICAgICAgICBpZiAoIXJ1bm5lciB8fCAhdGhpcy5kYXRhKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoIXNldEZ1bmMpIHtcbiAgICAgICAgICAgIHNldEZ1bmMgPSBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMucnVuRXhwcmVzc2lvblNldFZhbHVlKHZhbCwgZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIV90aGlzLmlzVHdvVmFsdWVFcXVhbHMoX3RoaXMudmFsdWUsIHZhbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLnZhbHVlID0gdmFsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmICghdmFsdWVzKVxuICAgICAgICAgICAgdmFsdWVzID0gdGhpcy5kYXRhLmdldEZpbHRlcmVkVmFsdWVzKCk7XG4gICAgICAgIGlmICghcHJvcGVydGllcylcbiAgICAgICAgICAgIHByb3BlcnRpZXMgPSB0aGlzLmRhdGEuZ2V0RmlsdGVyZWRQcm9wZXJ0aWVzKCk7XG4gICAgICAgIGlmICghIXJ1bm5lciAmJiBydW5uZXIuY2FuUnVuKSB7XG4gICAgICAgICAgICBydW5uZXIub25SdW5Db21wbGV0ZSA9IGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzID09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgcmVzID0gX3RoaXMuZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgICAgIF90aGlzLmlzQ2hhbmdpbmdWaWFEZWZhdWx0VmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHNldEZ1bmMocmVzKTtcbiAgICAgICAgICAgICAgICBfdGhpcy5pc0NoYW5naW5nVmlhRGVmYXVsdFZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcnVubmVyLnJ1bih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uLnByb3RvdHlwZSwgXCJjb21tZW50XCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEEgY29tbWVudCB0byB0aGUgc2VsZWN0ZWQgcXVlc3Rpb24gdmFsdWUuIEVuYWJsZSB0aGUgYHNob3dDb21tZW50QXJlYWAgcHJvcGVydHkgdG8gYWxsb3cgdXNlcnMgdG8gbGVhdmUgY29tbWVudHMuXG4gICAgICAgICAqIEBzZWUgc2hvd0NvbW1lbnRBcmVhXG4gICAgICAgICAqIEBzZWUgY29tbWVudFRleHRcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UXVlc3Rpb25Db21tZW50KCk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKG5ld1ZhbHVlKSB7XG4gICAgICAgICAgICBpZiAoISFuZXdWYWx1ZSkge1xuICAgICAgICAgICAgICAgIHZhciB0cmltbWVkVmFsdWUgPSBuZXdWYWx1ZS50b1N0cmluZygpLnRyaW0oKTtcbiAgICAgICAgICAgICAgICBpZiAodHJpbW1lZFZhbHVlICE9PSBuZXdWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBuZXdWYWx1ZSA9IHRyaW1tZWRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5ld1ZhbHVlID09PSB0aGlzLmNvbW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZURpcmVjdGx5KFwiY29tbWVudFwiLCBuZXdWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5jb21tZW50ID09IG5ld1ZhbHVlKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHRoaXMuc2V0UXVlc3Rpb25Db21tZW50KG5ld1ZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ29tbWVudEVsZW1lbnRzKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBRdWVzdGlvbi5wcm90b3R5cGUuZ2V0Q29tbWVudEFyZWFDc3MgPSBmdW5jdGlvbiAoaXNPdGhlcikge1xuICAgICAgICBpZiAoaXNPdGhlciA9PT0gdm9pZCAwKSB7IGlzT3RoZXIgPSBmYWxzZTsgfVxuICAgICAgICByZXR1cm4gbmV3IF91dGlsc19jc3NDbGFzc0J1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19bXCJDc3NDbGFzc0J1aWxkZXJcIl0oKVxuICAgICAgICAgICAgLmFwcGVuZChcImZvcm0tZ3JvdXBcIiwgaXNPdGhlcilcbiAgICAgICAgICAgIC5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLmZvcm1Hcm91cCwgIWlzT3RoZXIpXG4gICAgICAgICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5jb21tZW50QXJlYSlcbiAgICAgICAgICAgIC50b1N0cmluZygpO1xuICAgIH07XG4gICAgUXVlc3Rpb24ucHJvdG90eXBlLmdldFF1ZXN0aW9uQ29tbWVudCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucXVlc3Rpb25Db21tZW50O1xuICAgIH07XG4gICAgUXVlc3Rpb24ucHJvdG90eXBlLnNldFF1ZXN0aW9uQ29tbWVudCA9IGZ1bmN0aW9uIChuZXdWYWx1ZSkge1xuICAgICAgICB0aGlzLnNldE5ld0NvbW1lbnQobmV3VmFsdWUpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHF1ZXN0aW9uIHZhbHVlIGlzIGFuIGVtcHR5IHN0cmluZywgYXJyYXksIG9yIG9iamVjdCBvciBpZiBpdCBlcXVhbHMgYHVuZGVmaW5lZGAgb3IgYG51bGxgLlxuICAgICAqL1xuICAgIFF1ZXN0aW9uLnByb3RvdHlwZS5pc0VtcHR5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbHVlRW1wdHkodGhpcy52YWx1ZSwgIXRoaXMuYWxsb3dTcGFjZUFzQW5zd2VyKTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbi5wcm90b3R5cGUsIFwiaXNBbnN3ZXJlZFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImlzQW5zd2VyZWRcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaXNBbnN3ZXJlZFwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUXVlc3Rpb24ucHJvdG90eXBlLnVwZGF0ZUlzQW5zd2VyZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBvbGRWYWwgPSB0aGlzLmlzQW5zd2VyZWQ7XG4gICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImlzQW5zd2VyZWRcIiwgdGhpcy5nZXRJc0Fuc3dlcmVkKCkpO1xuICAgICAgICBpZiAob2xkVmFsICE9PSB0aGlzLmlzQW5zd2VyZWQpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUXVlc3Rpb25Dc3MoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgUXVlc3Rpb24ucHJvdG90eXBlLmdldElzQW5zd2VyZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5pc0VtcHR5KCk7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb24ucHJvdG90eXBlLCBcInZhbGlkYXRvcnNcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogUXVlc3Rpb24gdmFsaWRhdG9ycy5cbiAgICAgICAgICogQHNlZSBbRGF0YSBWYWxpZGF0aW9uXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2RhdGEtdmFsaWRhdGlvbilcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInZhbGlkYXRvcnNcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidmFsaWRhdG9yc1wiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUXVlc3Rpb24ucHJvdG90eXBlLmdldFZhbGlkYXRvcnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRvcnM7XG4gICAgfTtcbiAgICBRdWVzdGlvbi5wcm90b3R5cGUuZ2V0U3VwcG9ydGVkVmFsaWRhdG9ycyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHJlcyA9IFtdO1xuICAgICAgICB2YXIgY2xhc3NOYW1lID0gdGhpcy5nZXRUeXBlKCk7XG4gICAgICAgIHdoaWxlICghIWNsYXNzTmFtZSkge1xuICAgICAgICAgICAgdmFyIGNsYXNzVmFsaWRhdG9ycyA9IF9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fW1wic2V0dGluZ3NcIl0uc3VwcG9ydGVkVmFsaWRhdG9yc1tjbGFzc05hbWVdO1xuICAgICAgICAgICAgaWYgKCEhY2xhc3NWYWxpZGF0b3JzKSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IGNsYXNzVmFsaWRhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgICAgICAgICByZXMuc3BsaWNlKDAsIDAsIGNsYXNzVmFsaWRhdG9yc1tpXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGNsYXNzSW5mbyA9IF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJTZXJpYWxpemVyXCJdLmZpbmRDbGFzcyhjbGFzc05hbWUpO1xuICAgICAgICAgICAgY2xhc3NOYW1lID0gY2xhc3NJbmZvLnBhcmVudE5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9O1xuICAgIFF1ZXN0aW9uLnByb3RvdHlwZS5hZGRDb25kaXRpb25PYmplY3RzQnlDb250ZXh0ID0gZnVuY3Rpb24gKG9iamVjdHMsIGNvbnRleHQpIHtcbiAgICAgICAgb2JqZWN0cy5wdXNoKHtcbiAgICAgICAgICAgIG5hbWU6IHRoaXMuZ2V0VmFsdWVOYW1lKCksXG4gICAgICAgICAgICB0ZXh0OiB0aGlzLnByb2Nlc3NlZFRpdGxlLFxuICAgICAgICAgICAgcXVlc3Rpb246IHRoaXMsXG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbiBhcnJheSBvZiBxdWVzdGlvbnMgbmVzdGVkIHdpdGhpbiB0aGUgY3VycmVudCBxdWVzdGlvbi4gVXNlIHRoaXMgbWV0aG9kIHRvIG9idGFpbiBxdWVzdGlvbnMgd2l0aGluIFtNdWx0aXBsZSBUZXh0XShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2UvbXVsdGlwbGUtdGV4dC1lbnRyeS1xdWVzdGlvbi1tb2RlbCksIFtEeW5hbWljIFBhbmVsXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2UvZHluYW1pYy1wYW5lbC1tb2RlbCksIGFuZCBbTWF0cml4XShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2UvbWF0cml4LXRhYmxlLXF1ZXN0aW9uLW1vZGVsKS1saWtlIHF1ZXN0aW9ucy5cbiAgICAgKiBAcGFyYW0gdmlzaWJsZU9ubHkgQSBCb29sZWFuIHZhbHVlIHRoYXQgc3BlY2lmaWVzIHdoZXRoZXIgdG8gaW5jbHVkZSBvbmx5IHZpc2libGUgbmVzdGVkIHF1ZXN0aW9ucy5cbiAgICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBuZXN0ZWQgcXVlc3Rpb25zLlxuICAgICAqL1xuICAgIFF1ZXN0aW9uLnByb3RvdHlwZS5nZXROZXN0ZWRRdWVzdGlvbnMgPSBmdW5jdGlvbiAodmlzaWJsZU9ubHkpIHtcbiAgICAgICAgaWYgKHZpc2libGVPbmx5ID09PSB2b2lkIDApIHsgdmlzaWJsZU9ubHkgPSBmYWxzZTsgfVxuICAgICAgICB2YXIgcmVzID0gW107XG4gICAgICAgIHRoaXMuY29sbGVjdE5lc3RlZFF1ZXN0aW9ucyhyZXMsIHZpc2libGVPbmx5KTtcbiAgICAgICAgaWYgKHJlcy5sZW5ndGggPT09IDEgJiYgcmVzWzBdID09PSB0aGlzKVxuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH07XG4gICAgUXVlc3Rpb24ucHJvdG90eXBlLmNvbGxlY3ROZXN0ZWRRdWVzdGlvbnMgPSBmdW5jdGlvbiAocXVlc3Rpb25zLCB2aXNpYmxlT25seSkge1xuICAgICAgICBpZiAodmlzaWJsZU9ubHkgPT09IHZvaWQgMCkgeyB2aXNpYmxlT25seSA9IGZhbHNlOyB9XG4gICAgICAgIGlmICh2aXNpYmxlT25seSAmJiAhdGhpcy5pc1Zpc2libGUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMuY29sbGVjdE5lc3RlZFF1ZXN0aW9uc0NvcmUocXVlc3Rpb25zLCB2aXNpYmxlT25seSk7XG4gICAgfTtcbiAgICBRdWVzdGlvbi5wcm90b3R5cGUuY29sbGVjdE5lc3RlZFF1ZXN0aW9uc0NvcmUgPSBmdW5jdGlvbiAocXVlc3Rpb25zLCB2aXNpYmxlT25seSkge1xuICAgICAgICBxdWVzdGlvbnMucHVzaCh0aGlzKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uLnByb3RvdHlwZS5nZXRDb25kaXRpb25Kc29uID0gZnVuY3Rpb24gKG9wZXJhdG9yLCBwYXRoKSB7XG4gICAgICAgIGlmIChvcGVyYXRvciA9PT0gdm9pZCAwKSB7IG9wZXJhdG9yID0gbnVsbDsgfVxuICAgICAgICBpZiAocGF0aCA9PT0gdm9pZCAwKSB7IHBhdGggPSBudWxsOyB9XG4gICAgICAgIHZhciBqc29uID0gbmV3IF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJKc29uT2JqZWN0XCJdKCkudG9Kc29uT2JqZWN0KHRoaXMpO1xuICAgICAgICBqc29uW1widHlwZVwiXSA9IHRoaXMuZ2V0VHlwZSgpO1xuICAgICAgICByZXR1cm4ganNvbjtcbiAgICB9O1xuICAgIFF1ZXN0aW9uLnByb3RvdHlwZS5oYXNFcnJvcnMgPSBmdW5jdGlvbiAoZmlyZUNhbGxiYWNrLCByZWMpIHtcbiAgICAgICAgaWYgKGZpcmVDYWxsYmFjayA9PT0gdm9pZCAwKSB7IGZpcmVDYWxsYmFjayA9IHRydWU7IH1cbiAgICAgICAgaWYgKHJlYyA9PT0gdm9pZCAwKSB7IHJlYyA9IG51bGw7IH1cbiAgICAgICAgdmFyIG9sZEhhc0Vycm9ycyA9IHRoaXMuZXJyb3JzLmxlbmd0aCA+IDA7XG4gICAgICAgIHZhciBlcnJvcnMgPSB0aGlzLmNoZWNrRm9yRXJyb3JzKCEhcmVjICYmIHJlYy5pc09uVmFsdWVDaGFuZ2VkID09PSB0cnVlKTtcbiAgICAgICAgaWYgKGZpcmVDYWxsYmFjaykge1xuICAgICAgICAgICAgaWYgKCEhdGhpcy5zdXJ2ZXkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN1cnZleS5iZWZvcmVTZXR0aW5nUXVlc3Rpb25FcnJvcnModGhpcywgZXJyb3JzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZXJyb3JzID0gZXJyb3JzO1xuICAgICAgICAgICAgaWYgKHRoaXMuZXJyb3JzICE9PSBlcnJvcnMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9ycy5mb3JFYWNoKGZ1bmN0aW9uIChlcikgeyByZXR1cm4gZXIubG9jVGV4dC5zdHJDaGFuZ2VkKCk7IH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlQ29udGFpbnNFcnJvcnMoKTtcbiAgICAgICAgaWYgKG9sZEhhc0Vycm9ycyAhPSBlcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVRdWVzdGlvbkNzcygpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzQ29sbGFwc2VkICYmIHJlYyAmJiBmaXJlQ2FsbGJhY2sgJiYgZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVycm9ycy5sZW5ndGggPiAwO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogVmFsaWRhdGVzIHRoaXMgcXVlc3Rpb24gYW5kIHJldHVybnMgYGZhbHNlYCBpZiB0aGUgdmFsaWRhdGlvbiBmYWlscy5cbiAgICAgKiBAcGFyYW0gZmlyZUNhbGxiYWNrICpPcHRpb25hbC4qIFBhc3MgYGZhbHNlYCBpZiB5b3UgZG8gbm90IHdhbnQgdG8gc2hvdyB2YWxpZGF0aW9uIGVycm9ycyBpbiB0aGUgVUkuXG4gICAgICogQHNlZSBbRGF0YSBWYWxpZGF0aW9uXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2RhdGEtdmFsaWRhdGlvbilcbiAgICAgKi9cbiAgICBRdWVzdGlvbi5wcm90b3R5cGUudmFsaWRhdGUgPSBmdW5jdGlvbiAoZmlyZUNhbGxiYWNrLCByZWMpIHtcbiAgICAgICAgaWYgKGZpcmVDYWxsYmFjayA9PT0gdm9pZCAwKSB7IGZpcmVDYWxsYmFjayA9IHRydWU7IH1cbiAgICAgICAgaWYgKHJlYyA9PT0gdm9pZCAwKSB7IHJlYyA9IG51bGw7IH1cbiAgICAgICAgaWYgKCEhcmVjICYmIHJlYy5pc09uVmFsdWVDaGFuZ2VkKSB7XG4gICAgICAgICAgICBpZiAoISF0aGlzLnBhcmVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMucGFyZW50LnZhbGlkYXRlQ29udGFpbmVyT25seSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAhdGhpcy5oYXNFcnJvcnMoZmlyZUNhbGxiYWNrLCByZWMpO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uLnByb3RvdHlwZSwgXCJjdXJyZW50RXJyb3JDb3VudFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3JzLmxlbmd0aDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbi5wcm90b3R5cGUsIFwicmVxdWlyZWRUZXh0XCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgYSBjaGFyYWN0ZXIgb3IgdGV4dCBzdHJpbmcgdGhhdCBpbmRpY2F0ZXMgYSByZXF1aXJlZCBxdWVzdGlvbi5cbiAgICAgICAgICogQHNlZSBTdXJ2ZXlNb2RlbC5yZXF1aXJlZFRleHRcbiAgICAgICAgICogQHNlZSBpc1JlcXVpcmVkXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN1cnZleSAhPSBudWxsICYmIHRoaXMuaXNSZXF1aXJlZFxuICAgICAgICAgICAgICAgID8gdGhpcy5zdXJ2ZXkucmVxdWlyZWRUZXh0XG4gICAgICAgICAgICAgICAgOiBcIlwiO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUXVlc3Rpb24ucHJvdG90eXBlLmFkZEVycm9yID0gZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgIGlmICghZXJyb3IpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciBuZXdFcnJvciA9IG51bGw7XG4gICAgICAgIGlmICh0eXBlb2YgZXJyb3IgPT09IFwic3RyaW5nXCIgfHwgZXJyb3IgaW5zdGFuY2VvZiBTdHJpbmcpIHtcbiAgICAgICAgICAgIG5ld0Vycm9yID0gbmV3IF9lcnJvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiQ3VzdG9tRXJyb3JcIl0oZXJyb3IsIHRoaXMuc3VydmV5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG5ld0Vycm9yID0gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lcnJvcnMucHVzaChuZXdFcnJvcik7XG4gICAgfTtcbiAgICBRdWVzdGlvbi5wcm90b3R5cGUucmVtb3ZlRXJyb3IgPSBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgdmFyIGVycm9ycyA9IHRoaXMuZXJyb3JzO1xuICAgICAgICB2YXIgaW5kZXggPSBlcnJvcnMuaW5kZXhPZihlcnJvcik7XG4gICAgICAgIGlmIChpbmRleCAhPT0gLTEpXG4gICAgICAgICAgICBlcnJvcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uLnByb3RvdHlwZS5jaGVja0ZvckVycm9ycyA9IGZ1bmN0aW9uIChpc09uVmFsdWVDaGFuZ2VkKSB7XG4gICAgICAgIHZhciBxRXJyb3JzID0gbmV3IEFycmF5KCk7XG4gICAgICAgIGlmICh0aGlzLmlzVmlzaWJsZSAmJiB0aGlzLmNhbkNvbGxlY3RFcnJvcnMoKSkge1xuICAgICAgICAgICAgdGhpcy5jb2xsZWN0RXJyb3JzKHFFcnJvcnMsIGlzT25WYWx1ZUNoYW5nZWQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBxRXJyb3JzO1xuICAgIH07XG4gICAgUXVlc3Rpb24ucHJvdG90eXBlLmNhbkNvbGxlY3RFcnJvcnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5pc1JlYWRPbmx5IHx8IF9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fW1wic2V0dGluZ3NcIl0ucmVhZE9ubHkuZW5hYmxlVmFsaWRhdGlvbjtcbiAgICB9O1xuICAgIFF1ZXN0aW9uLnByb3RvdHlwZS5jb2xsZWN0RXJyb3JzID0gZnVuY3Rpb24gKHFFcnJvcnMsIGlzT25WYWx1ZUNoYW5nZWQpIHtcbiAgICAgICAgdGhpcy5vbkNoZWNrRm9yRXJyb3JzKHFFcnJvcnMsIGlzT25WYWx1ZUNoYW5nZWQpO1xuICAgICAgICBpZiAocUVycm9ycy5sZW5ndGggPiAwIHx8ICF0aGlzLmNhblJ1blZhbGlkYXRvcnMoaXNPblZhbHVlQ2hhbmdlZCkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciBlcnJvcnMgPSB0aGlzLnJ1blZhbGlkYXRvcnMoKTtcbiAgICAgICAgaWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAvL3ZhbGlkYXRvcnMgbWF5IGNoYW5nZSB0aGUgcXVlc3Rpb24gdmFsdWUuXG4gICAgICAgICAgICBxRXJyb3JzLmxlbmd0aCA9IDA7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVycm9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHFFcnJvcnMucHVzaChlcnJvcnNbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnN1cnZleSAmJiBxRXJyb3JzLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICB2YXIgZXJyb3IgPSB0aGlzLmZpcmVTdXJ2ZXlWYWxpZGF0aW9uKCk7XG4gICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBxRXJyb3JzLnB1c2goZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBRdWVzdGlvbi5wcm90b3R5cGUuY2FuUnVuVmFsaWRhdG9ycyA9IGZ1bmN0aW9uIChpc09uVmFsdWVDaGFuZ2VkKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG4gICAgUXVlc3Rpb24ucHJvdG90eXBlLmZpcmVTdXJ2ZXlWYWxpZGF0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy52YWxpZGF0ZVZhbHVlQ2FsbGJhY2spXG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZVZhbHVlQ2FsbGJhY2soKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3VydmV5ID8gdGhpcy5zdXJ2ZXkudmFsaWRhdGVRdWVzdGlvbih0aGlzKSA6IG51bGw7XG4gICAgfTtcbiAgICBRdWVzdGlvbi5wcm90b3R5cGUub25DaGVja0ZvckVycm9ycyA9IGZ1bmN0aW9uIChlcnJvcnMsIGlzT25WYWx1ZUNoYW5nZWQpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgaWYgKCghaXNPblZhbHVlQ2hhbmdlZCB8fCB0aGlzLmlzT2xkQW5zd2VyZWQpICYmIHRoaXMuaGFzUmVxdWlyZWRFcnJvcigpKSB7XG4gICAgICAgICAgICB2YXIgZXJyID0gbmV3IF9lcnJvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiQW5zd2VyUmVxdWlyZWRFcnJvclwiXSh0aGlzLnJlcXVpcmVkRXJyb3JUZXh0LCB0aGlzKTtcbiAgICAgICAgICAgIGVyci5vblVwZGF0ZUVycm9yVGV4dENhbGxiYWNrID0gZnVuY3Rpb24gKGVycikgeyBlcnIudGV4dCA9IF90aGlzLnJlcXVpcmVkRXJyb3JUZXh0OyB9O1xuICAgICAgICAgICAgZXJyb3JzLnB1c2goZXJyKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgUXVlc3Rpb24ucHJvdG90eXBlLmhhc1JlcXVpcmVkRXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzUmVxdWlyZWQgJiYgdGhpcy5pc0VtcHR5KCk7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb24ucHJvdG90eXBlLCBcImlzUnVubmluZ1ZhbGlkYXRvcnNcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldElzUnVubmluZ1ZhbGlkYXRvcnMoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFF1ZXN0aW9uLnByb3RvdHlwZS5nZXRJc1J1bm5pbmdWYWxpZGF0b3JzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1J1bm5pbmdWYWxpZGF0b3JzVmFsdWU7XG4gICAgfTtcbiAgICBRdWVzdGlvbi5wcm90b3R5cGUucnVuVmFsaWRhdG9ycyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgaWYgKCEhdGhpcy52YWxpZGF0b3JSdW5uZXIpIHtcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdG9yUnVubmVyLm9uQXN5bmNDb21wbGV0ZWQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmFsaWRhdG9yUnVubmVyID0gbmV3IF92YWxpZGF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1tcIlZhbGlkYXRvclJ1bm5lclwiXSgpO1xuICAgICAgICB0aGlzLmlzUnVubmluZ1ZhbGlkYXRvcnNWYWx1ZSA9IHRydWU7XG4gICAgICAgIHRoaXMudmFsaWRhdG9yUnVubmVyLm9uQXN5bmNDb21wbGV0ZWQgPSBmdW5jdGlvbiAoZXJyb3JzKSB7XG4gICAgICAgICAgICBfdGhpcy5kb09uQXN5bmNDb21wbGV0ZWQoZXJyb3JzKTtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdG9yUnVubmVyLnJ1bih0aGlzKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uLnByb3RvdHlwZS5kb09uQXN5bmNDb21wbGV0ZWQgPSBmdW5jdGlvbiAoZXJyb3JzKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXJyb3JzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLmVycm9ycy5wdXNoKGVycm9yc1tpXSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc1J1bm5pbmdWYWxpZGF0b3JzVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5yYWlzZU9uQ29tcGxldGVkQXN5bmNWYWxpZGF0b3JzKCk7XG4gICAgfTtcbiAgICBRdWVzdGlvbi5wcm90b3R5cGUucmFpc2VPbkNvbXBsZXRlZEFzeW5jVmFsaWRhdG9ycyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCEhdGhpcy5vbkNvbXBsZXRlZEFzeW5jVmFsaWRhdG9ycyAmJiAhdGhpcy5pc1J1bm5pbmdWYWxpZGF0b3JzKSB7XG4gICAgICAgICAgICB0aGlzLm9uQ29tcGxldGVkQXN5bmNWYWxpZGF0b3JzKHRoaXMuZ2V0QWxsRXJyb3JzKCkubGVuZ3RoID4gMCk7XG4gICAgICAgICAgICB0aGlzLm9uQ29tcGxldGVkQXN5bmNWYWxpZGF0b3JzID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH07XG4gICAgUXVlc3Rpb24ucHJvdG90eXBlLnNldE5ld1ZhbHVlID0gZnVuY3Rpb24gKG5ld1ZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLmlzTmV3VmFsdWVFcXVhbHNUb1ZhbHVlKG5ld1ZhbHVlKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKCF0aGlzLmNoZWNrSXNWYWx1ZUNvcnJlY3QobmV3VmFsdWUpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLmlzT2xkQW5zd2VyZWQgPSB0aGlzLmlzQW5zd2VyZWQ7XG4gICAgICAgIHRoaXMuc2V0TmV3VmFsdWVJbkRhdGEobmV3VmFsdWUpO1xuICAgICAgICB0aGlzLmFsbG93Tm90aWZ5VmFsdWVDaGFuZ2VkICYmIHRoaXMub25WYWx1ZUNoYW5nZWQoKTtcbiAgICAgICAgaWYgKHRoaXMuaXNBbnN3ZXJlZCAhPT0gdGhpcy5pc09sZEFuc3dlcmVkKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVF1ZXN0aW9uQ3NzKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc09sZEFuc3dlcmVkID0gdW5kZWZpbmVkO1xuICAgIH07XG4gICAgUXVlc3Rpb24ucHJvdG90eXBlLmNoZWNrSXNWYWx1ZUNvcnJlY3QgPSBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgIHZhciByZXMgPSB0aGlzLmlzVmFsdWVFbXB0eSh2YWwsICF0aGlzLmFsbG93U3BhY2VBc0Fuc3dlcikgfHwgdGhpcy5pc05ld1ZhbHVlQ29ycmVjdCh2YWwpO1xuICAgICAgICBpZiAoIXJlcykge1xuICAgICAgICAgICAgX2NvbnNvbGVfd2FybmluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX19bXCJDb25zb2xlV2FybmluZ3NcIl0uaW5Db3JyZWN0UXVlc3Rpb25WYWx1ZSh0aGlzLm5hbWUsIHZhbCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9O1xuICAgIFF1ZXN0aW9uLnByb3RvdHlwZS5pc05ld1ZhbHVlQ29ycmVjdCA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgICBRdWVzdGlvbi5wcm90b3R5cGUuaXNOZXdWYWx1ZUVxdWFsc1RvVmFsdWUgPSBmdW5jdGlvbiAobmV3VmFsdWUpIHtcbiAgICAgICAgdmFyIHZhbCA9IHRoaXMudmFsdWU7XG4gICAgICAgIGlmICghdGhpcy5pc1R3b1ZhbHVlRXF1YWxzKG5ld1ZhbHVlLCB2YWwsIGZhbHNlLCBmYWxzZSkpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHZhciBpc09iaiA9IG5ld1ZhbHVlID09PSB2YWwgJiYgISF2YWwgJiYgKEFycmF5LmlzQXJyYXkodmFsKSB8fCB0eXBlb2YgdmFsID09PSBcIm9iamVjdFwiKTtcbiAgICAgICAgcmV0dXJuICFpc09iajtcbiAgICB9O1xuICAgIFF1ZXN0aW9uLnByb3RvdHlwZS5pc1RleHRWYWx1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uLnByb3RvdHlwZSwgXCJpc1N1cnZleUlucHV0VGV4dFVwZGF0ZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuICEhdGhpcy5zdXJ2ZXkgPyB0aGlzLnN1cnZleS5pc1VwZGF0ZVZhbHVlVGV4dE9uVHlwaW5nIDogZmFsc2U7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb24ucHJvdG90eXBlLCBcInJlcXVpcmVTdHJpY3RDb21wYXJlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBmYWxzZTsgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFF1ZXN0aW9uLnByb3RvdHlwZS5nZXREYXRhTG9jTm90aWZpY2F0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0lucHV0VGV4dFVwZGF0ZSA/IFwidGV4dFwiIDogZmFsc2U7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb24ucHJvdG90eXBlLCBcImlzSW5wdXRUZXh0VXBkYXRlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pc1N1cnZleUlucHV0VGV4dFVwZGF0ZSAmJiB0aGlzLmlzVGV4dFZhbHVlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBRdWVzdGlvbi5wcm90b3R5cGUuc2V0TmV3VmFsdWVJbkRhdGEgPSBmdW5jdGlvbiAobmV3VmFsdWUpIHtcbiAgICAgICAgbmV3VmFsdWUgPSB0aGlzLnZhbHVlVG9EYXRhKG5ld1ZhbHVlKTtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsdWVDaGFuZ2VkSW5TdXJ2ZXkpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWVDb3JlKG5ld1ZhbHVlKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgUXVlc3Rpb24ucHJvdG90eXBlLmdldFZhbHVlQ29yZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucXVlc3Rpb25WYWx1ZTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uLnByb3RvdHlwZS5zZXRWYWx1ZUNvcmUgPSBmdW5jdGlvbiAobmV3VmFsdWUpIHtcbiAgICAgICAgdGhpcy5zZXRRdWVzdGlvblZhbHVlKG5ld1ZhbHVlKTtcbiAgICAgICAgaWYgKHRoaXMuZGF0YSAhPSBudWxsICYmIHRoaXMuY2FuU2V0VmFsdWVUb1N1cnZleSgpKSB7XG4gICAgICAgICAgICBuZXdWYWx1ZSA9IHRoaXMudmFsdWVGb3JTdXJ2ZXk7XG4gICAgICAgICAgICB0aGlzLmRhdGEuc2V0VmFsdWUodGhpcy5nZXRWYWx1ZU5hbWUoKSwgbmV3VmFsdWUsIHRoaXMuZ2V0RGF0YUxvY05vdGlmaWNhdGlvbigpLCB0aGlzLmFsbG93Tm90aWZ5VmFsdWVDaGFuZ2VkLCB0aGlzLm5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNNb3VzZURvd24gPSBmYWxzZTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uLnByb3RvdHlwZS5jYW5TZXRWYWx1ZVRvU3VydmV5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uLnByb3RvdHlwZS52YWx1ZUZyb21EYXRhID0gZnVuY3Rpb24gKHZhbCkgeyByZXR1cm4gdmFsOyB9O1xuICAgIFF1ZXN0aW9uLnByb3RvdHlwZS52YWx1ZVRvRGF0YSA9IGZ1bmN0aW9uICh2YWwpIHsgcmV0dXJuIHZhbDsgfTtcbiAgICBRdWVzdGlvbi5wcm90b3R5cGUuY29udmVydFRvQ29ycmVjdFZhbHVlID0gZnVuY3Rpb24gKHZhbCkgeyByZXR1cm4gdmFsOyB9O1xuICAgIFF1ZXN0aW9uLnByb3RvdHlwZS5vblZhbHVlQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHsgfTtcbiAgICBRdWVzdGlvbi5wcm90b3R5cGUub25Nb3VzZURvd24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuaXNNb3VzZURvd24gPSB0cnVlO1xuICAgIH07XG4gICAgUXVlc3Rpb24ucHJvdG90eXBlLnNldE5ld0NvbW1lbnQgPSBmdW5jdGlvbiAobmV3VmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMucXVlc3Rpb25Db21tZW50ID09PSBuZXdWYWx1ZSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5xdWVzdGlvbkNvbW1lbnQgPSBuZXdWYWx1ZTtcbiAgICAgICAgaWYgKHRoaXMuZGF0YSAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEuc2V0Q29tbWVudCh0aGlzLmdldFZhbHVlTmFtZSgpLCBuZXdWYWx1ZSwgdGhpcy5pc1N1cnZleUlucHV0VGV4dFVwZGF0ZSA/IFwidGV4dFwiIDogZmFsc2UpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBRdWVzdGlvbi5wcm90b3R5cGUuZ2V0VmFsaWROYW1lID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIG1ha2VOYW1lVmFsaWQobmFtZSk7XG4gICAgfTtcbiAgICAvL0lRdWVzdGlvblxuICAgIFF1ZXN0aW9uLnByb3RvdHlwZS51cGRhdGVWYWx1ZUZyb21TdXJ2ZXkgPSBmdW5jdGlvbiAobmV3VmFsdWUpIHtcbiAgICAgICAgbmV3VmFsdWUgPSB0aGlzLmdldFVuYmluZFZhbHVlKG5ld1ZhbHVlKTtcbiAgICAgICAgaWYgKCEhdGhpcy52YWx1ZUZyb21EYXRhQ2FsbGJhY2spIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gdGhpcy52YWx1ZUZyb21EYXRhQ2FsbGJhY2sobmV3VmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5jaGVja0lzVmFsdWVDb3JyZWN0KG5ld1ZhbHVlKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5pc0NoYW5naW5nVmlhRGVmYXVsdFZhbHVlID0gdGhpcy5pc1ZhbHVlRW1wdHkobmV3VmFsdWUpO1xuICAgICAgICB0aGlzLnNldFF1ZXN0aW9uVmFsdWUodGhpcy52YWx1ZUZyb21EYXRhKG5ld1ZhbHVlKSk7XG4gICAgICAgIHRoaXMuaXNDaGFuZ2luZ1ZpYURlZmF1bHRWYWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnVwZGF0ZURlcGVuZGVkUXVlc3Rpb25zKCk7XG4gICAgICAgIHRoaXMudXBkYXRlSXNBbnN3ZXJlZCgpO1xuICAgIH07XG4gICAgUXVlc3Rpb24ucHJvdG90eXBlLnVwZGF0ZUNvbW1lbnRGcm9tU3VydmV5ID0gZnVuY3Rpb24gKG5ld1ZhbHVlKSB7XG4gICAgICAgIHRoaXMucXVlc3Rpb25Db21tZW50ID0gbmV3VmFsdWU7XG4gICAgfTtcbiAgICBRdWVzdGlvbi5wcm90b3R5cGUub25DaGFuZ2VRdWVzdGlvblZhbHVlID0gZnVuY3Rpb24gKG5ld1ZhbHVlKSB7IH07XG4gICAgUXVlc3Rpb24ucHJvdG90eXBlLnNldFZhbHVlQ2hhbmdlZERpcmVjdGx5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmlzVmFsdWVDaGFuZ2VkRGlyZWN0bHkgPSB0cnVlO1xuICAgIH07XG4gICAgUXVlc3Rpb24ucHJvdG90eXBlLnNldFF1ZXN0aW9uVmFsdWUgPSBmdW5jdGlvbiAobmV3VmFsdWUsIHVwZGF0ZUlzQW5zd2VyZWQpIHtcbiAgICAgICAgaWYgKHVwZGF0ZUlzQW5zd2VyZWQgPT09IHZvaWQgMCkgeyB1cGRhdGVJc0Fuc3dlcmVkID0gdHJ1ZTsgfVxuICAgICAgICBuZXdWYWx1ZSA9IHRoaXMuY29udmVydFRvQ29ycmVjdFZhbHVlKG5ld1ZhbHVlKTtcbiAgICAgICAgdmFyIGlzRXF1YWwgPSB0aGlzLmlzVHdvVmFsdWVFcXVhbHModGhpcy5xdWVzdGlvblZhbHVlLCBuZXdWYWx1ZSk7XG4gICAgICAgIGlmICghaXNFcXVhbCAmJiAhdGhpcy5pc0NoYW5naW5nVmlhRGVmYXVsdFZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlQ2hhbmdlZERpcmVjdGx5KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5xdWVzdGlvblZhbHVlID0gbmV3VmFsdWU7XG4gICAgICAgIGlmICghaXNFcXVhbCkge1xuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZVF1ZXN0aW9uVmFsdWUobmV3VmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgICFpc0VxdWFsICYmIHRoaXMuYWxsb3dOb3RpZnlWYWx1ZUNoYW5nZWQgJiZcbiAgICAgICAgICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMudmFsdWVDaGFuZ2VkQ2FsbGJhY2spO1xuICAgICAgICBpZiAodXBkYXRlSXNBbnN3ZXJlZClcbiAgICAgICAgICAgIHRoaXMudXBkYXRlSXNBbnN3ZXJlZCgpO1xuICAgIH07XG4gICAgUXVlc3Rpb24ucHJvdG90eXBlLm9uU3VydmV5VmFsdWVDaGFuZ2VkID0gZnVuY3Rpb24gKG5ld1ZhbHVlKSB7IH07XG4gICAgUXVlc3Rpb24ucHJvdG90eXBlLnNldFZpc2libGVJbmRleCA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmlzaWJsZSB8fFxuICAgICAgICAgICAgKCF0aGlzLmhhc1RpdGxlICYmICFfc2V0dGluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1tcInNldHRpbmdzXCJdLm51bWJlcmluZy5pbmNsdWRlUXVlc3Rpb25zV2l0aEhpZGRlblRpdGxlKSB8fFxuICAgICAgICAgICAgKHRoaXMuaGlkZU51bWJlciAmJiAhX3NldHRpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bXCJzZXR0aW5nc1wiXS5udW1iZXJpbmcuaW5jbHVkZVF1ZXN0aW9uc1dpdGhIaWRkZW5OdW1iZXIpKSB7XG4gICAgICAgICAgICB2YWwgPSAtMTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJ2aXNpYmxlSW5kZXhcIiwgdmFsKTtcbiAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibm9cIiwgdGhpcy5jYWxjTm8oKSk7XG4gICAgICAgIHJldHVybiB2YWwgPCAwID8gMCA6IDE7XG4gICAgfTtcbiAgICBRdWVzdGlvbi5wcm90b3R5cGUucmVtb3ZlRWxlbWVudCA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uLnByb3RvdHlwZS5zdXBwb3J0R29OZXh0UGFnZUF1dG9tYXRpYyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gICAgUXVlc3Rpb24ucHJvdG90eXBlLnN1cHBvcnRHb05leHRQYWdlRXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyB2YWx1ZXMgdGhhdCBjYW5ub3QgYmUgYXNzaWduZWQgdG8gdGhpcyBxdWVzdGlvbiwgZm9yIGV4YW1wbGUsIGNob2ljZXMgdW5saXN0ZWQgaW4gdGhlIGBjaG9pY2VzYCBhcnJheS5cbiAgICAgKlxuICAgICAqIENhbGwgdGhpcyBtZXRob2QgYWZ0ZXIgeW91IGFzc2lnbiBuZXcgcXVlc3Rpb24gdmFsdWVzIGluIGNvZGUgdG8gZW5zdXJlIHRoYXQgdGhleSBhcmUgYWNjZXB0YWJsZS5cbiAgICAgKlxuICAgICAqID4gVGhpcyBtZXRob2QgZG9lcyBub3QgcmVtb3ZlIHZhbHVlcyB0aGF0IGZhaWwgdmFsaWRhdGlvbi4gQ2FsbCB0aGUgYHZhbGlkYXRlKClgIG1ldGhvZCB0byB2YWxpZGF0ZSBuZXdseSBhc3NpZ25lZCB2YWx1ZXMuXG4gICAgICpcbiAgICAgKiBAc2VlIHZhbGlkYXRlXG4gICAgICovXG4gICAgUXVlc3Rpb24ucHJvdG90eXBlLmNsZWFySW5jb3JyZWN0VmFsdWVzID0gZnVuY3Rpb24gKCkgeyB9O1xuICAgIFF1ZXN0aW9uLnByb3RvdHlwZS5jbGVhck9uRGVsZXRpbmdDb250YWluZXIgPSBmdW5jdGlvbiAoKSB7IH07XG4gICAgLyoqXG4gICAgICogRW1wdGllcyB0aGUgYGVycm9yc2AgYXJyYXkuXG4gICAgICogQHNlZSBlcnJvcnNcbiAgICAgKi9cbiAgICBRdWVzdGlvbi5wcm90b3R5cGUuY2xlYXJFcnJvcnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuZXJyb3JzID0gW107XG4gICAgfTtcbiAgICBRdWVzdGlvbi5wcm90b3R5cGUuY2xlYXJVbnVzZWRWYWx1ZXMgPSBmdW5jdGlvbiAoKSB7IH07XG4gICAgUXVlc3Rpb24ucHJvdG90eXBlLm9uQW55VmFsdWVDaGFuZ2VkID0gZnVuY3Rpb24gKG5hbWUsIHF1ZXN0aW9uTmFtZSkgeyB9O1xuICAgIFF1ZXN0aW9uLnByb3RvdHlwZS5jaGVja0JpbmRpbmdzID0gZnVuY3Rpb24gKHZhbHVlTmFtZSwgdmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMuYmluZGluZ3MuaXNFbXB0eSgpIHx8ICF0aGlzLmRhdGEpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciBwcm9wcyA9IHRoaXMuYmluZGluZ3MuZ2V0UHJvcGVydGllc0J5VmFsdWVOYW1lKHZhbHVlTmFtZSk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBwcm9wTmFtZSA9IHByb3BzW2ldO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNWYWx1ZUVtcHR5KHZhbHVlKSAmJiBfaGVscGVyc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiSGVscGVyc1wiXS5pc051bWJlcih0aGlzW3Byb3BOYW1lXSkpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzW3Byb3BOYW1lXSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBRdWVzdGlvbi5wcm90b3R5cGUuZ2V0Q29tcG9uZW50TmFtZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIF9yZW5kZXJlckZhY3RvcnlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1tcIlJlbmRlcmVyRmFjdG9yeVwiXS5JbnN0YW5jZS5nZXRSZW5kZXJlckJ5UXVlc3Rpb24odGhpcyk7XG4gICAgfTtcbiAgICBRdWVzdGlvbi5wcm90b3R5cGUuaXNEZWZhdWx0UmVuZGVyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKCEhdGhpcy5jdXN0b21XaWRnZXQgfHxcbiAgICAgICAgICAgIHRoaXMucmVuZGVyQXMgPT09IFwiZGVmYXVsdFwiIHx8XG4gICAgICAgICAgICB0aGlzLmdldENvbXBvbmVudE5hbWUoKSA9PT0gXCJkZWZhdWx0XCIpO1xuICAgIH07XG4gICAgLy9JU3VydmV5RXJyb3JPd25lclxuICAgIFF1ZXN0aW9uLnByb3RvdHlwZS5nZXRFcnJvckN1c3RvbVRleHQgPSBmdW5jdGlvbiAodGV4dCwgZXJyb3IpIHtcbiAgICAgICAgaWYgKCEhdGhpcy5zdXJ2ZXkpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdXJ2ZXkuZ2V0U3VydmV5RXJyb3JDdXN0b21UZXh0KHRoaXMsIHRleHQsIGVycm9yKTtcbiAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfTtcbiAgICAvL0lWYWxpZGF0b3JPd25lclxuICAgIFF1ZXN0aW9uLnByb3RvdHlwZS5nZXRWYWxpZGF0b3JUaXRsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb24ucHJvdG90eXBlLCBcInZhbGlkYXRlZFZhbHVlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUXVlc3Rpb24ucHJvdG90eXBlLmdldEFsbFZhbHVlcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5kYXRhID8gdGhpcy5kYXRhLmdldEFsbFZhbHVlcygpIDogbnVsbDtcbiAgICB9O1xuICAgIFF1ZXN0aW9uLnByb3RvdHlwZS5wcm9jZXNzUG9wdXBWaXNpYmxpbGl0eUNoYW5nZWQgPSBmdW5jdGlvbiAocG9wdXBNb2RlbCwgdmlzaWJsZSkge1xuICAgICAgICB0aGlzLnN1cnZleS5wcm9jZXNzUG9wdXBWaXNpYmxpdHlDaGFuZ2VkKHRoaXMsIHBvcHVwTW9kZWwsIHZpc2libGUpO1xuICAgIH07XG4gICAgUXVlc3Rpb24ucHJvdG90eXBlLm9uVGV4dEtleURvd25IYW5kbGVyID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIGlmIChldmVudC5rZXlDb2RlID09PSAxMykge1xuICAgICAgICAgICAgdGhpcy5zdXJ2ZXkucXVlc3Rpb25FZGl0RmluaXNoQ2FsbGJhY2sodGhpcywgZXZlbnQpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBRdWVzdGlvbi5wcm90b3R5cGUudHJhbnNmb3JtVG9Nb2JpbGVWaWV3ID0gZnVuY3Rpb24gKCkgeyB9O1xuICAgIFF1ZXN0aW9uLnByb3RvdHlwZS50cmFuc2Zvcm1Ub0Rlc2t0b3BWaWV3ID0gZnVuY3Rpb24gKCkgeyB9O1xuICAgIFF1ZXN0aW9uLnByb3RvdHlwZS5uZWVkUmVzcG9uc2l2ZVdpZHRoID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgICAvL3Jlc3BvbnNpdmVuZXNzIG1ldGhvZHNcbiAgICBRdWVzdGlvbi5wcm90b3R5cGUuc3VwcG9ydFJlc3BvbnNpdmVuZXNzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgICBRdWVzdGlvbi5wcm90b3R5cGUubmVlZFJlc3BvbnNpdmVuZXNzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdXBwb3J0UmVzcG9uc2l2ZW5lc3MoKSAmJiB0aGlzLmlzRGVmYXVsdFYyVGhlbWUgJiYgIXRoaXMuaXNEZXNpZ25Nb2RlO1xuICAgIH07XG4gICAgUXVlc3Rpb24ucHJvdG90eXBlLmNoZWNrRm9yUmVzcG9uc2l2ZW5lc3MgPSBmdW5jdGlvbiAoZWwpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgaWYgKHRoaXMubmVlZFJlc3BvbnNpdmVuZXNzKCkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzQ29sbGFwc2VkKSB7XG4gICAgICAgICAgICAgICAgdmFyIG9uU3RhdGVDaGFuZ2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXMuaXNFeHBhbmRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuaW5pdFJlc3BvbnNpdmVuZXNzKGVsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLnVucmVnaXN0ZXJQcm9wZXJ0eUNoYW5nZWRIYW5kbGVycyhbXCJzdGF0ZVwiXSwgXCJmb3ItcmVzcG9uc2l2ZW5lc3NcIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJQcm9wZXJ0eUNoYW5nZWRIYW5kbGVycyhbXCJzdGF0ZVwiXSwgb25TdGF0ZUNoYW5nZWQsIFwiZm9yLXJlc3BvbnNpdmVuZXNzXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbml0UmVzcG9uc2l2ZW5lc3MoZWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBRdWVzdGlvbi5wcm90b3R5cGUuZ2V0T2JzZXJ2ZWRFbGVtZW50U2VsZWN0b3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBcIi5zZC1zY3JvbGxhYmxlLWNvbnRhaW5lclwiO1xuICAgIH07XG4gICAgUXVlc3Rpb24ucHJvdG90eXBlLm9uTW9iaWxlQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5vbk1vYmlsZUNoYW5nZWRDYWxsYmFjayAmJiB0aGlzLm9uTW9iaWxlQ2hhbmdlZENhbGxiYWNrKCk7XG4gICAgfTtcbiAgICBRdWVzdGlvbi5wcm90b3R5cGUudHJpZ2dlclJlc3BvbnNpdmVuZXNzID0gZnVuY3Rpb24gKGhhcmQpIHtcbiAgICAgICAgaWYgKGhhcmQgPT09IHZvaWQgMCkgeyBoYXJkID0gdHJ1ZTsgfVxuICAgICAgICBpZiAodGhpcy50cmlnZ2VyUmVzcG9uc2l2ZW5lc3NDYWxsYmFjaykge1xuICAgICAgICAgICAgdGhpcy50cmlnZ2VyUmVzcG9uc2l2ZW5lc3NDYWxsYmFjayhoYXJkKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgUXVlc3Rpb24ucHJvdG90eXBlLmluaXRSZXNwb25zaXZlbmVzcyA9IGZ1bmN0aW9uIChlbCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB0aGlzLmRlc3Ryb3lSZXNpemVPYnNlcnZlcigpO1xuICAgICAgICBpZiAoISFlbCAmJiB0aGlzLmlzRGVmYXVsdFJlbmRlcmluZygpKSB7XG4gICAgICAgICAgICB2YXIgc2Nyb2xsYWJsZVNlbGVjdG9yXzEgPSB0aGlzLmdldE9ic2VydmVkRWxlbWVudFNlbGVjdG9yKCk7XG4gICAgICAgICAgICBpZiAoIXNjcm9sbGFibGVTZWxlY3Rvcl8xKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHZhciBkZWZhdWx0Um9vdEVsID0gZWwucXVlcnlTZWxlY3RvcihzY3JvbGxhYmxlU2VsZWN0b3JfMSk7XG4gICAgICAgICAgICBpZiAoIWRlZmF1bHRSb290RWwpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdmFyIGlzUHJvY2Vzc2VkXzEgPSBmYWxzZTtcbiAgICAgICAgICAgIHZhciByZXF1aXJlZFdpZHRoXzEgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLnRyaWdnZXJSZXNwb25zaXZlbmVzc0NhbGxiYWNrID0gZnVuY3Rpb24gKGhhcmQpIHtcbiAgICAgICAgICAgICAgICBpZiAoaGFyZCkge1xuICAgICAgICAgICAgICAgICAgICByZXF1aXJlZFdpZHRoXzEgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIF90aGlzLnJlbmRlckFzID0gXCJkZWZhdWx0XCI7XG4gICAgICAgICAgICAgICAgICAgIGlzUHJvY2Vzc2VkXzEgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcm9vdEVsID0gZWwucXVlcnlTZWxlY3RvcihzY3JvbGxhYmxlU2VsZWN0b3JfMSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghcmVxdWlyZWRXaWR0aF8xICYmIF90aGlzLmlzRGVmYXVsdFJlbmRlcmluZygpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZFdpZHRoXzEgPSByb290RWwuc2Nyb2xsV2lkdGg7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzUHJvY2Vzc2VkXzEgfHwgIU9iamVjdChfdXRpbHNfdXRpbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19bXCJpc0NvbnRhaW5lclZpc2libGVcIl0pKHJvb3RFbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzUHJvY2Vzc2VkXzEgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzUHJvY2Vzc2VkXzEgPSBfdGhpcy5wcm9jZXNzUmVzcG9uc2l2ZW5lc3MocmVxdWlyZWRXaWR0aF8xLCBPYmplY3QoX3V0aWxzX3V0aWxzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fW1wiZ2V0RWxlbWVudFdpZHRoXCJdKShyb290RWwpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgaWYgKGhhcmQpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChjYWxsYmFjaywgMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKGZ1bmN0aW9uIChlbnRyaWVzKSB7XG4gICAgICAgICAgICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIF90aGlzLnRyaWdnZXJSZXNwb25zaXZlbmVzcyhmYWxzZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMub25Nb2JpbGVDaGFuZ2VkQ2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciByb290RWwgPSBlbC5xdWVyeVNlbGVjdG9yKHNjcm9sbGFibGVTZWxlY3Rvcl8xKTtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMucHJvY2Vzc1Jlc3BvbnNpdmVuZXNzKHJlcXVpcmVkV2lkdGhfMSwgT2JqZWN0KF91dGlsc191dGlsc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX1tcImdldEVsZW1lbnRXaWR0aFwiXSkocm9vdEVsKSk7XG4gICAgICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlci5vYnNlcnZlKGVsKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgUXVlc3Rpb24ucHJvdG90eXBlLmdldENvbXBhY3RSZW5kZXJBcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIFwiZGVmYXVsdFwiO1xuICAgIH07XG4gICAgUXVlc3Rpb24ucHJvdG90eXBlLmdldERlc2t0b3BSZW5kZXJBcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIFwiZGVmYXVsdFwiO1xuICAgIH07XG4gICAgUXVlc3Rpb24ucHJvdG90eXBlLnByb2Nlc3NSZXNwb25zaXZlbmVzcyA9IGZ1bmN0aW9uIChyZXF1aXJlZFdpZHRoLCBhdmFpbGFibGVXaWR0aCkge1xuICAgICAgICBhdmFpbGFibGVXaWR0aCA9IE1hdGgucm91bmQoYXZhaWxhYmxlV2lkdGgpO1xuICAgICAgICBpZiAoTWF0aC5hYnMocmVxdWlyZWRXaWR0aCAtIGF2YWlsYWJsZVdpZHRoKSA+IDIpIHtcbiAgICAgICAgICAgIHZhciBvbGRSZW5kZXJBcyA9IHRoaXMucmVuZGVyQXM7XG4gICAgICAgICAgICBpZiAocmVxdWlyZWRXaWR0aCA+IGF2YWlsYWJsZVdpZHRoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJBcyA9IHRoaXMuZ2V0Q29tcGFjdFJlbmRlckFzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckFzID0gdGhpcy5nZXREZXNrdG9wUmVuZGVyQXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBvbGRSZW5kZXJBcyAhPT0gdGhpcy5yZW5kZXJBcztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgICBRdWVzdGlvbi5wcm90b3R5cGUuZGVzdHJveVJlc2l6ZU9ic2VydmVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoISF0aGlzLnJlc2l6ZU9ic2VydmVyKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLm9uTW9iaWxlQ2hhbmdlZENhbGxiYWNrID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy50cmlnZ2VyUmVzcG9uc2l2ZW5lc3NDYWxsYmFjayA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyQXMgPSB0aGlzLmdldERlc2t0b3BSZW5kZXJBcygpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBRdWVzdGlvbi5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG4gICAgICAgIHRoaXMucmVzZXREZXBlbmRlZFF1ZXN0aW9ucygpO1xuICAgICAgICB0aGlzLmRlc3Ryb3lSZXNpemVPYnNlcnZlcigpO1xuICAgIH07XG4gICAgUXVlc3Rpb24ucHJvdG90eXBlLnJlc2V0RGVwZW5kZWRRdWVzdGlvbnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5kZXBlbmRlZFF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5kZXBlbmRlZFF1ZXN0aW9uc1tpXS5yZXNldERlcGVuZGVkUXVlc3Rpb24oKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uLnByb3RvdHlwZSwgXCJpc05ld0ExMXlTdHJ1Y3R1cmVcIiwge1xuICAgICAgICAvL2ExMXlcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb24ucHJvdG90eXBlLCBcImFyaWFMYWJlbFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNOZXdBMTF5U3RydWN0dXJlKVxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jVGl0bGUucmVuZGVyZWRIdG1sO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uLnByb3RvdHlwZSwgXCJhcmlhUm9sZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNOZXdBMTF5U3RydWN0dXJlKVxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgcmV0dXJuIFwidGV4dGJveFwiO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uLnByb3RvdHlwZSwgXCJhcmlhUmVxdWlyZWRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzTmV3QTExeVN0cnVjdHVyZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlzUmVxdWlyZWQgPyBcInRydWVcIiA6IFwiZmFsc2VcIjtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbi5wcm90b3R5cGUsIFwiYXJpYUludmFsaWRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzTmV3QTExeVN0cnVjdHVyZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVycm9ycy5sZW5ndGggPiAwID8gXCJ0cnVlXCIgOiBcImZhbHNlXCI7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb24ucHJvdG90eXBlLCBcImFyaWFMYWJlbGxlZEJ5XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc05ld0ExMXlTdHJ1Y3R1cmUpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICBpZiAodGhpcy5oYXNUaXRsZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFyaWFUaXRsZUlkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb24ucHJvdG90eXBlLCBcImFyaWFFeHBhbmRlZFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb24ucHJvdG90eXBlLCBcImFyaWFEZXNjcmliZWRCeVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNOZXdBMTF5U3RydWN0dXJlKVxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3JzLmxlbmd0aCA+IDAgPyB0aGlzLmlkICsgXCJfZXJyb3JzXCIgOiBudWxsO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uLnByb3RvdHlwZSwgXCJhMTF5X2lucHV0X2FyaWFSb2xlXCIsIHtcbiAgICAgICAgLy9FTyBhMTF5XG4gICAgICAgIC8vbmV3IGExMXlcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbi5wcm90b3R5cGUsIFwiYTExeV9pbnB1dF9hcmlhUmVxdWlyZWRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlzUmVxdWlyZWQgPyBcInRydWVcIiA6IFwiZmFsc2VcIjtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbi5wcm90b3R5cGUsIFwiYTExeV9pbnB1dF9hcmlhSW52YWxpZFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3JzLmxlbmd0aCA+IDAgPyBcInRydWVcIiA6IFwiZmFsc2VcIjtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbi5wcm90b3R5cGUsIFwiYTExeV9pbnB1dF9hcmlhTGFiZWxcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmhhc1RpdGxlICYmICF0aGlzLnBhcmVudFF1ZXN0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NUaXRsZS5yZW5kZXJlZEh0bWw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb24ucHJvdG90eXBlLCBcImExMXlfaW5wdXRfYXJpYUxhYmVsbGVkQnlcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmhhc1RpdGxlICYmICF0aGlzLnBhcmVudFF1ZXN0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXJpYVRpdGxlSWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbi5wcm90b3R5cGUsIFwiYTExeV9pbnB1dF9hcmlhRGVzY3JpYmVkQnlcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVycm9ycy5sZW5ndGggPiAwID8gdGhpcy5pZCArIFwiX2Vycm9yc1wiIDogbnVsbDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFF1ZXN0aW9uLlRleHRQcmVwcm9jZXNzb3JWYWx1ZXNNYXAgPSB7XG4gICAgICAgIHRpdGxlOiBcInByb2Nlc3NlZFRpdGxlXCIsXG4gICAgICAgIHJlcXVpcmU6IFwicmVxdWlyZWRUZXh0XCIsXG4gICAgfTtcbiAgICBRdWVzdGlvbi5xdWVzdGlvbkNvdW50ZXIgPSAxMDA7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wicHJvcGVydHlcIl0pKHsgZGVmYXVsdFZhbHVlOiBmYWxzZSB9KVxuICAgIF0sIFF1ZXN0aW9uLnByb3RvdHlwZSwgXCJpc01vYmlsZVwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QoX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcInByb3BlcnR5XCJdKSgpXG4gICAgXSwgUXVlc3Rpb24ucHJvdG90eXBlLCBcImZvcmNlSXNJbnB1dFJlYWRPbmx5XCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wicHJvcGVydHlcIl0pKHsgbG9jYWxpemFibGU6IHRydWUsIG9uU2V0OiBmdW5jdGlvbiAodmFsLCB0YXJnZXQpIHsgcmV0dXJuIHRhcmdldC5jYWxjUmVuZGVyZWRDb21tZW50UGxhY2Vob2xkZXIoKTsgfSB9KVxuICAgIF0sIFF1ZXN0aW9uLnByb3RvdHlwZSwgXCJjb21tZW50UGxhY2Vob2xkZXJcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJwcm9wZXJ0eVwiXSkoKVxuICAgIF0sIFF1ZXN0aW9uLnByb3RvdHlwZSwgXCJyZW5kZXJBc1wiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QoX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcInByb3BlcnR5XCJdKSh7IGRlZmF1bHRWYWx1ZTogZmFsc2UgfSlcbiAgICBdLCBRdWVzdGlvbi5wcm90b3R5cGUsIFwiaW5NYXRyaXhNb2RlXCIsIHZvaWQgMCk7XG4gICAgcmV0dXJuIFF1ZXN0aW9uO1xufShfc3VydmV5X2VsZW1lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIlN1cnZleUVsZW1lbnRcIl0pKTtcblxuZnVuY3Rpb24gbWFrZU5hbWVWYWxpZChzdHIpIHtcbiAgICBpZiAoIXN0cilcbiAgICAgICAgcmV0dXJuIHN0cjtcbiAgICBzdHIgPSBzdHIudHJpbSgpLnJlcGxhY2UoL1tcXHtcXH1dKy9nLCBcIlwiKTtcbiAgICB3aGlsZSAoISFzdHIgJiYgc3RyWzBdID09PSBfc2V0dGluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1tcInNldHRpbmdzXCJdLmV4cHJlc3Npb25EaXNhYmxlQ29udmVyc2lvbkNoYXIpIHtcbiAgICAgICAgc3RyID0gc3RyLnN1YnN0cmluZygxKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0cjtcbn1cbl9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJTZXJpYWxpemVyXCJdLmFkZENsYXNzKFwicXVlc3Rpb25cIiwgW1xuICAgIHsgbmFtZTogXCIhbmFtZVwiLCBvblNldHRpbmdWYWx1ZTogZnVuY3Rpb24gKG9iaiwgdmFsKSB7IHJldHVybiBtYWtlTmFtZVZhbGlkKHZhbCk7IH0gfSxcbiAgICB7XG4gICAgICAgIG5hbWU6IFwic3RhdGVcIixcbiAgICAgICAgZGVmYXVsdDogXCJkZWZhdWx0XCIsXG4gICAgICAgIGNob2ljZXM6IFtcImRlZmF1bHRcIiwgXCJjb2xsYXBzZWRcIiwgXCJleHBhbmRlZFwiXSxcbiAgICB9LFxuICAgIHsgbmFtZTogXCJ2aXNpYmxlOnN3aXRjaFwiLCBkZWZhdWx0OiB0cnVlLCBvdmVycmlkaW5nUHJvcGVydHk6IFwidmlzaWJsZUlmXCIgfSxcbiAgICB7IG5hbWU6IFwidXNlRGlzcGxheVZhbHVlc0luRHluYW1pY1RleHRzOmJvb2xlYW5cIiwgYWx0ZXJuYXRpdmVOYW1lOiBcInVzZURpc3BsYXlWYWx1ZXNJblRpdGxlXCIsIGRlZmF1bHQ6IHRydWUsIGxheW91dDogXCJyb3dcIiB9LFxuICAgIFwidmlzaWJsZUlmOmNvbmRpdGlvblwiLFxuICAgIHsgbmFtZTogXCJ3aWR0aFwiIH0sXG4gICAgeyBuYW1lOiBcIm1pbldpZHRoXCIsIGRlZmF1bHRGdW5jOiBmdW5jdGlvbiAoKSB7IHJldHVybiBfc2V0dGluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1tcInNldHRpbmdzXCJdLm1pbldpZHRoOyB9IH0sXG4gICAgeyBuYW1lOiBcIm1heFdpZHRoXCIsIGRlZmF1bHRGdW5jOiBmdW5jdGlvbiAoKSB7IHJldHVybiBfc2V0dGluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1tcInNldHRpbmdzXCJdLm1heFdpZHRoOyB9IH0sXG4gICAgeyBuYW1lOiBcInN0YXJ0V2l0aE5ld0xpbmU6Ym9vbGVhblwiLCBkZWZhdWx0OiB0cnVlLCBsYXlvdXQ6IFwicm93XCIgfSxcbiAgICB7IG5hbWU6IFwiaW5kZW50Om51bWJlclwiLCBkZWZhdWx0OiAwLCBjaG9pY2VzOiBbMCwgMSwgMiwgM10sIGxheW91dDogXCJyb3dcIiB9LFxuICAgIHtcbiAgICAgICAgbmFtZTogXCJwYWdlXCIsXG4gICAgICAgIGlzU2VyaWFsaXphYmxlOiBmYWxzZSxcbiAgICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICB2YXIgc3VydmV5ID0gb2JqID8gb2JqLnN1cnZleSA6IG51bGw7XG4gICAgICAgICAgICByZXR1cm4gIXN1cnZleSB8fCAhc3VydmV5LnBhZ2VzIHx8IHN1cnZleS5wYWdlcy5sZW5ndGggPiAxO1xuICAgICAgICB9LFxuICAgICAgICBjaG9pY2VzOiBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICB2YXIgc3VydmV5ID0gb2JqID8gb2JqLnN1cnZleSA6IG51bGw7XG4gICAgICAgICAgICByZXR1cm4gc3VydmV5XG4gICAgICAgICAgICAgICAgPyBzdXJ2ZXkucGFnZXMubWFwKGZ1bmN0aW9uIChwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBwLm5hbWUsIHRleHQ6IHAudGl0bGUgfTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIDogW107XG4gICAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICAgIG5hbWU6IFwidGl0bGU6dGV4dFwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jVGl0bGVcIiwgbGF5b3V0OiBcInJvd1wiLCBkZXBlbmRzT246IFwibmFtZVwiLFxuICAgICAgICBvblByb3BlcnR5RWRpdG9yVXBkYXRlOiBmdW5jdGlvbiAob2JqLCBlZGl0b3IpIHtcbiAgICAgICAgICAgIGlmICghIW9iaiAmJiAhIWVkaXRvcikge1xuICAgICAgICAgICAgICAgIGVkaXRvci5wbGFjZWhvbGRlciA9IG9iai5uYW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICAgIG5hbWU6IFwidGl0bGVMb2NhdGlvblwiLFxuICAgICAgICBkZWZhdWx0OiBcImRlZmF1bHRcIixcbiAgICAgICAgY2hvaWNlczogW1wiZGVmYXVsdFwiLCBcInRvcFwiLCBcImJvdHRvbVwiLCBcImxlZnRcIiwgXCJoaWRkZW5cIl0sXG4gICAgICAgIGxheW91dDogXCJyb3dcIixcbiAgICB9LFxuICAgIHtcbiAgICAgICAgbmFtZTogXCJkZXNjcmlwdGlvbjp0ZXh0XCIsXG4gICAgICAgIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NEZXNjcmlwdGlvblwiLFxuICAgICAgICBsYXlvdXQ6IFwicm93XCIsXG4gICAgfSxcbiAgICB7XG4gICAgICAgIG5hbWU6IFwiZGVzY3JpcHRpb25Mb2NhdGlvblwiLFxuICAgICAgICBkZWZhdWx0OiBcImRlZmF1bHRcIixcbiAgICAgICAgY2hvaWNlczogW1wiZGVmYXVsdFwiLCBcInVuZGVySW5wdXRcIiwgXCJ1bmRlclRpdGxlXCJdLFxuICAgIH0sXG4gICAge1xuICAgICAgICBuYW1lOiBcImhpZGVOdW1iZXI6Ym9vbGVhblwiLFxuICAgICAgICBkZXBlbmRzT246IFwidGl0bGVMb2NhdGlvblwiLFxuICAgICAgICB2aXNpYmxlSWY6IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgIGlmICghb2JqKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob2JqLnRpdGxlTG9jYXRpb24gPT09IFwiaGlkZGVuXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgcGFyZW50ID0gb2JqID8gb2JqLnBhcmVudCA6IG51bGw7XG4gICAgICAgICAgICB2YXIgbnVtYmVyaW5nQWxsb3dlZEJ5UGFyZW50ID0gIXBhcmVudCB8fCBwYXJlbnQuc2hvd1F1ZXN0aW9uTnVtYmVycyAhPT0gXCJvZmZcIjtcbiAgICAgICAgICAgIGlmICghbnVtYmVyaW5nQWxsb3dlZEJ5UGFyZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHN1cnZleSA9IG9iaiA/IG9iai5zdXJ2ZXkgOiBudWxsO1xuICAgICAgICAgICAgcmV0dXJuICghc3VydmV5IHx8XG4gICAgICAgICAgICAgICAgc3VydmV5LnNob3dRdWVzdGlvbk51bWJlcnMgIT09IFwib2ZmXCIgfHxcbiAgICAgICAgICAgICAgICAoISFwYXJlbnQgJiYgcGFyZW50LnNob3dRdWVzdGlvbk51bWJlcnMgPT09IFwib25wYW5lbFwiKSk7XG4gICAgICAgIH0sXG4gICAgfSxcbiAgICB7IG5hbWU6IFwidmFsdWVOYW1lXCIsIG9uU2V0dGluZ1ZhbHVlOiBmdW5jdGlvbiAob2JqLCB2YWwpIHsgcmV0dXJuIG1ha2VOYW1lVmFsaWQodmFsKTsgfSB9LFxuICAgIFwiZW5hYmxlSWY6Y29uZGl0aW9uXCIsXG4gICAge1xuICAgICAgICBuYW1lOiBcInJlc2V0VmFsdWVJZjpjb25kaXRpb25cIixcbiAgICAgICAgY2F0ZWdvcnk6IFwibG9naWNcIiwgdmlzaWJsZTogZmFsc2VcbiAgICB9LFxuICAgIFwiZGVmYXVsdFZhbHVlOnZhbHVlXCIsXG4gICAge1xuICAgICAgICBuYW1lOiBcImRlZmF1bHRWYWx1ZUV4cHJlc3Npb246ZXhwcmVzc2lvblwiLFxuICAgICAgICBjYXRlZ29yeTogXCJsb2dpY1wiLFxuICAgIH0sXG4gICAgXCJjb3JyZWN0QW5zd2VyOnZhbHVlXCIsXG4gICAge1xuICAgICAgICBuYW1lOiBcImNsZWFySWZJbnZpc2libGVcIixcbiAgICAgICAgZGVmYXVsdDogXCJkZWZhdWx0XCIsXG4gICAgICAgIGNob2ljZXM6IFtcImRlZmF1bHRcIiwgXCJub25lXCIsIFwib25Db21wbGV0ZVwiLCBcIm9uSGlkZGVuXCIsIFwib25IaWRkZW5Db250YWluZXJcIl0sXG4gICAgfSxcbiAgICB7IG5hbWU6IFwiaXNSZXF1aXJlZDpzd2l0Y2hcIiwgb3ZlcnJpZGluZ1Byb3BlcnR5OiBcInJlcXVpcmVkSWZcIiB9LFxuICAgIFwicmVxdWlyZWRJZjpjb25kaXRpb25cIixcbiAgICB7XG4gICAgICAgIG5hbWU6IFwicmVxdWlyZWRFcnJvclRleHQ6dGV4dFwiLFxuICAgICAgICBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jUmVxdWlyZWRFcnJvclRleHRcIixcbiAgICB9LFxuICAgIHsgbmFtZTogXCJlcnJvckxvY2F0aW9uXCIsIGRlZmF1bHQ6IFwiZGVmYXVsdFwiLCBjaG9pY2VzOiBbXCJkZWZhdWx0XCIsIFwidG9wXCIsIFwiYm90dG9tXCJdIH0sXG4gICAgeyBuYW1lOiBcInJlYWRPbmx5OnN3aXRjaFwiLCBvdmVycmlkaW5nUHJvcGVydHk6IFwiZW5hYmxlSWZcIiB9LFxuICAgIHtcbiAgICAgICAgbmFtZTogXCJ2YWxpZGF0b3JzOnZhbGlkYXRvcnNcIixcbiAgICAgICAgYmFzZUNsYXNzTmFtZTogXCJzdXJ2ZXl2YWxpZGF0b3JcIixcbiAgICAgICAgY2xhc3NOYW1lUGFydDogXCJ2YWxpZGF0b3JcIixcbiAgICB9LFxuICAgIHtcbiAgICAgICAgbmFtZTogXCJiaW5kaW5nczpiaW5kaW5nc1wiLFxuICAgICAgICBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwiYmluZGluZ3NcIixcbiAgICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICByZXR1cm4gb2JqLmJpbmRpbmdzLmdldE5hbWVzKCkubGVuZ3RoID4gMDtcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHsgbmFtZTogXCJyZW5kZXJBc1wiLCBkZWZhdWx0OiBcImRlZmF1bHRcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwic2hvd0NvbW1lbnRBcmVhXCIsIHZpc2libGU6IGZhbHNlLCBkZWZhdWx0OiBmYWxzZSwgYWx0ZXJuYXRpdmVOYW1lOiBcImhhc0NvbW1lbnRcIiwgY2F0ZWdvcnk6IFwiZ2VuZXJhbFwiIH0sXG4gICAge1xuICAgICAgICBuYW1lOiBcImNvbW1lbnRUZXh0XCIsXG4gICAgICAgIGRlcGVuZHNPbjogXCJzaG93Q29tbWVudEFyZWFcIixcbiAgICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICByZXR1cm4gb2JqLnNob3dDb21tZW50QXJlYTtcbiAgICAgICAgfSxcbiAgICAgICAgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY0NvbW1lbnRUZXh0XCIsXG4gICAgICAgIGxheW91dDogXCJyb3dcIixcbiAgICB9LFxuICAgIHtcbiAgICAgICAgbmFtZTogXCJjb21tZW50UGxhY2Vob2xkZXJcIixcbiAgICAgICAgYWx0ZXJuYXRpdmVOYW1lOiBcImNvbW1lbnRQbGFjZUhvbGRlclwiLFxuICAgICAgICBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jQ29tbWVudFBsYWNlaG9sZGVyXCIsXG4gICAgICAgIGRlcGVuZHNPbjogXCJzaG93Q29tbWVudEFyZWFcIixcbiAgICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICByZXR1cm4gb2JqLmhhc0NvbW1lbnQ7XG4gICAgICAgIH1cbiAgICB9XG5dKTtcbl9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJTZXJpYWxpemVyXCJdLmFkZEFsdGVyTmF0aXZlQ2xhc3NOYW1lKFwicXVlc3Rpb25cIiwgXCJxdWVzdGlvbmJhc2VcIik7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvcXVlc3Rpb25DdXN0b21XaWRnZXRzLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9xdWVzdGlvbkN1c3RvbVdpZGdldHMudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFF1ZXN0aW9uQ3VzdG9tV2lkZ2V0LCBDdXN0b21XaWRnZXRDb2xsZWN0aW9uICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlF1ZXN0aW9uQ3VzdG9tV2lkZ2V0XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUXVlc3Rpb25DdXN0b21XaWRnZXQ7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkN1c3RvbVdpZGdldENvbGxlY3Rpb25cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBDdXN0b21XaWRnZXRDb2xsZWN0aW9uOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYmFzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9iYXNlICovIFwiLi9zcmMvYmFzZS50c1wiKTtcblxudmFyIFF1ZXN0aW9uQ3VzdG9tV2lkZ2V0ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFF1ZXN0aW9uQ3VzdG9tV2lkZ2V0KG5hbWUsIHdpZGdldEpzb24pIHtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy53aWRnZXRKc29uID0gd2lkZ2V0SnNvbjtcbiAgICAgICAgdGhpcy5odG1sVGVtcGxhdGUgPSB3aWRnZXRKc29uLmh0bWxUZW1wbGF0ZSA/IHdpZGdldEpzb24uaHRtbFRlbXBsYXRlIDogXCJcIjtcbiAgICB9XG4gICAgUXVlc3Rpb25DdXN0b21XaWRnZXQucHJvdG90eXBlLmFmdGVyUmVuZGVyID0gZnVuY3Rpb24gKHF1ZXN0aW9uLCBlbCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBpZiAoIXRoaXMud2lkZ2V0SnNvbi5hZnRlclJlbmRlcilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgcXVlc3Rpb24ubG9jYWxlQ2hhbmdlZENhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKF90aGlzLndpZGdldEpzb24ud2lsbFVubW91bnQpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy53aWRnZXRKc29uLndpbGxVbm1vdW50KHF1ZXN0aW9uLCBlbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBfdGhpcy53aWRnZXRKc29uLmFmdGVyUmVuZGVyKHF1ZXN0aW9uLCBlbCk7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMud2lkZ2V0SnNvbi5hZnRlclJlbmRlcihxdWVzdGlvbiwgZWwpO1xuICAgIH07XG4gICAgUXVlc3Rpb25DdXN0b21XaWRnZXQucHJvdG90eXBlLndpbGxVbm1vdW50ID0gZnVuY3Rpb24gKHF1ZXN0aW9uLCBlbCkge1xuICAgICAgICBpZiAodGhpcy53aWRnZXRKc29uLndpbGxVbm1vdW50KVxuICAgICAgICAgICAgdGhpcy53aWRnZXRKc29uLndpbGxVbm1vdW50KHF1ZXN0aW9uLCBlbCk7XG4gICAgfTtcbiAgICBRdWVzdGlvbkN1c3RvbVdpZGdldC5wcm90b3R5cGUuZ2V0RGlzcGxheVZhbHVlID0gZnVuY3Rpb24gKHF1ZXN0aW9uLCB2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUgPT09IHZvaWQgMCkgeyB2YWx1ZSA9IHVuZGVmaW5lZDsgfVxuICAgICAgICBpZiAodGhpcy53aWRnZXRKc29uLmdldERpc3BsYXlWYWx1ZSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLndpZGdldEpzb24uZ2V0RGlzcGxheVZhbHVlKHF1ZXN0aW9uLCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gICAgUXVlc3Rpb25DdXN0b21XaWRnZXQucHJvdG90eXBlLmlzRml0ID0gZnVuY3Rpb24gKHF1ZXN0aW9uKSB7XG4gICAgICAgIGlmICh0aGlzLmlzTGlicmFyeUxvYWRlZCgpICYmIHRoaXMud2lkZ2V0SnNvbi5pc0ZpdClcbiAgICAgICAgICAgIHJldHVybiB0aGlzLndpZGdldEpzb24uaXNGaXQocXVlc3Rpb24pO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25DdXN0b21XaWRnZXQucHJvdG90eXBlLCBcImNhblNob3dJblRvb2xib3hcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLndpZGdldEpzb24uc2hvd0luVG9vbGJveCA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgaWYgKEN1c3RvbVdpZGdldENvbGxlY3Rpb24uSW5zdGFuY2UuZ2V0QWN0aXZhdGVkQnkodGhpcy5uYW1lKSAhPSBcImN1c3RvbXR5cGVcIilcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm4gIXRoaXMud2lkZ2V0SnNvbi53aWRnZXRJc0xvYWRlZCB8fCB0aGlzLndpZGdldEpzb24ud2lkZ2V0SXNMb2FkZWQoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbkN1c3RvbVdpZGdldC5wcm90b3R5cGUsIFwic2hvd0luVG9vbGJveFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMud2lkZ2V0SnNvbi5zaG93SW5Ub29sYm94ICE9PSBmYWxzZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLndpZGdldEpzb24uc2hvd0luVG9vbGJveCA9IHZhbDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFF1ZXN0aW9uQ3VzdG9tV2lkZ2V0LnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy53aWRnZXRKc29uLmluaXQpIHtcbiAgICAgICAgICAgIHRoaXMud2lkZ2V0SnNvbi5pbml0KCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFF1ZXN0aW9uQ3VzdG9tV2lkZ2V0LnByb3RvdHlwZS5hY3RpdmF0ZWRCeUNoYW5nZWQgPSBmdW5jdGlvbiAoYWN0aXZhdGVkQnkpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNMaWJyYXJ5TG9hZGVkKCkgJiYgdGhpcy53aWRnZXRKc29uLmFjdGl2YXRlZEJ5Q2hhbmdlZCkge1xuICAgICAgICAgICAgdGhpcy53aWRnZXRKc29uLmFjdGl2YXRlZEJ5Q2hhbmdlZChhY3RpdmF0ZWRCeSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFF1ZXN0aW9uQ3VzdG9tV2lkZ2V0LnByb3RvdHlwZS5pc0xpYnJhcnlMb2FkZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLndpZGdldEpzb24ud2lkZ2V0SXNMb2FkZWQpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy53aWRnZXRKc29uLndpZGdldElzTG9hZGVkKCkgPT0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25DdXN0b21XaWRnZXQucHJvdG90eXBlLCBcImlzRGVmYXVsdFJlbmRlclwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMud2lkZ2V0SnNvbi5pc0RlZmF1bHRSZW5kZXI7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25DdXN0b21XaWRnZXQucHJvdG90eXBlLCBcInBkZlF1ZXN0aW9uVHlwZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMud2lkZ2V0SnNvbi5wZGZRdWVzdGlvblR5cGU7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25DdXN0b21XaWRnZXQucHJvdG90eXBlLCBcInBkZlJlbmRlclwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMud2lkZ2V0SnNvbi5wZGZSZW5kZXI7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICByZXR1cm4gUXVlc3Rpb25DdXN0b21XaWRnZXQ7XG59KCkpO1xuXG52YXIgQ3VzdG9tV2lkZ2V0Q29sbGVjdGlvbiA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBDdXN0b21XaWRnZXRDb2xsZWN0aW9uKCkge1xuICAgICAgICB0aGlzLndpZGdldHNWYWx1ZXMgPSBbXTtcbiAgICAgICAgdGhpcy53aWRnZXRzQWN0aXZhdGVkQnkgPSB7fTtcbiAgICAgICAgdGhpcy5vbkN1c3RvbVdpZGdldEFkZGVkID0gbmV3IF9iYXNlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJFdmVudFwiXSgpO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ3VzdG9tV2lkZ2V0Q29sbGVjdGlvbi5wcm90b3R5cGUsIFwid2lkZ2V0c1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMud2lkZ2V0c1ZhbHVlcztcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIEN1c3RvbVdpZGdldENvbGxlY3Rpb24ucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uICh3aWRnZXRKc29uLCBhY3RpdmF0ZWRCeSkge1xuICAgICAgICBpZiAoYWN0aXZhdGVkQnkgPT09IHZvaWQgMCkgeyBhY3RpdmF0ZWRCeSA9IFwicHJvcGVydHlcIjsgfVxuICAgICAgICB0aGlzLmFkZEN1c3RvbVdpZGdldCh3aWRnZXRKc29uLCBhY3RpdmF0ZWRCeSk7XG4gICAgfTtcbiAgICBDdXN0b21XaWRnZXRDb2xsZWN0aW9uLnByb3RvdHlwZS5hZGRDdXN0b21XaWRnZXQgPSBmdW5jdGlvbiAod2lkZ2V0SnNvbiwgYWN0aXZhdGVkQnkpIHtcbiAgICAgICAgaWYgKGFjdGl2YXRlZEJ5ID09PSB2b2lkIDApIHsgYWN0aXZhdGVkQnkgPSBcInByb3BlcnR5XCI7IH1cbiAgICAgICAgdmFyIG5hbWUgPSB3aWRnZXRKc29uLm5hbWU7XG4gICAgICAgIGlmICghbmFtZSkge1xuICAgICAgICAgICAgbmFtZSA9IFwid2lkZ2V0X1wiICsgdGhpcy53aWRnZXRzLmxlbmd0aCArIDE7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGN1c3RvbVdpZGdldCA9IG5ldyBRdWVzdGlvbkN1c3RvbVdpZGdldChuYW1lLCB3aWRnZXRKc29uKTtcbiAgICAgICAgdGhpcy53aWRnZXRzVmFsdWVzLnB1c2goY3VzdG9tV2lkZ2V0KTtcbiAgICAgICAgY3VzdG9tV2lkZ2V0LmluaXQoKTtcbiAgICAgICAgdGhpcy53aWRnZXRzQWN0aXZhdGVkQnlbbmFtZV0gPSBhY3RpdmF0ZWRCeTtcbiAgICAgICAgY3VzdG9tV2lkZ2V0LmFjdGl2YXRlZEJ5Q2hhbmdlZChhY3RpdmF0ZWRCeSk7XG4gICAgICAgIHRoaXMub25DdXN0b21XaWRnZXRBZGRlZC5maXJlKGN1c3RvbVdpZGdldCwgbnVsbCk7XG4gICAgICAgIHJldHVybiBjdXN0b21XaWRnZXQ7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSB3YXkgdGhlIGN1c3RvbSB3aWdldCBpcyBhY3RpdmF0ZWQuIEl0IGNhbiBiZSBhY3RpdmF0ZWQgYnkgYSBwcm9wZXJ0eSAoXCJwcm9wZXJ0eVwiKSwgcXVlc3Rpb24gdHlwZSAoXCJ0eXBlXCIpIG9yIGJ5IG5ldy9jdXN0b20gcXVlc3Rpb24gdHlwZSAoXCJjdXN0b210eXBlXCIpLlxuICAgICAqIEBwYXJhbSB3aWRnZXROYW1lIHRoZSBjdXN0b20gd2lkZ2V0IG5hbWVcbiAgICAgKiBAc2VlIHNldEFjdGl2YXRlZEJ5XG4gICAgICovXG4gICAgQ3VzdG9tV2lkZ2V0Q29sbGVjdGlvbi5wcm90b3R5cGUuZ2V0QWN0aXZhdGVkQnkgPSBmdW5jdGlvbiAod2lkZ2V0TmFtZSkge1xuICAgICAgICB2YXIgcmVzID0gdGhpcy53aWRnZXRzQWN0aXZhdGVkQnlbd2lkZ2V0TmFtZV07XG4gICAgICAgIHJldHVybiByZXMgPyByZXMgOiBcInByb3BlcnR5XCI7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSB3YXkgdGhlIGN1c3RvbSB3aWdldCBpcyBhY3RpdmF0ZWQuIFRoZSBhY3RpdmF0aW9uIHR5cGVzIGFyZTogcHJvcGVydHkgKFwicHJvcGVydHlcIiksIHF1ZXN0aW9uIHR5cGUgKFwidHlwZVwiKSBvciBuZXcvY3VzdG9tIHF1ZXN0aW9uIHR5cGUgKFwiY3VzdG9tdHlwZVwiKS4gQSBjdXN0b20gd2lnZXQgbWF5IHN1cHBvcnQgYWxsIG9yIG9ubHkgc29tZSBvZiB0aGlzIGFjdGl2YXRpb24gdHlwZXMuXG4gICAgICogQHBhcmFtIHdpZGdldE5hbWVcbiAgICAgKiBAcGFyYW0gYWN0aXZhdGVkQnkgdGhlcmUgYXJlIHRocmVlIHBvc3NpYmxlIHZhcmlhbnRzOiBcInByb3BlcnR5XCIsIFwidHlwZVwiIGFuZCBcImN1c3RvbXR5cGVcIlxuICAgICAqL1xuICAgIEN1c3RvbVdpZGdldENvbGxlY3Rpb24ucHJvdG90eXBlLnNldEFjdGl2YXRlZEJ5ID0gZnVuY3Rpb24gKHdpZGdldE5hbWUsIGFjdGl2YXRlZEJ5KSB7XG4gICAgICAgIGlmICghd2lkZ2V0TmFtZSB8fCAhYWN0aXZhdGVkQnkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciB3aWRnZXQgPSB0aGlzLmdldEN1c3RvbVdpZGdldEJ5TmFtZSh3aWRnZXROYW1lKTtcbiAgICAgICAgaWYgKCF3aWRnZXQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMud2lkZ2V0c0FjdGl2YXRlZEJ5W3dpZGdldE5hbWVdID0gYWN0aXZhdGVkQnk7XG4gICAgICAgIHdpZGdldC5hY3RpdmF0ZWRCeUNoYW5nZWQoYWN0aXZhdGVkQnkpO1xuICAgIH07XG4gICAgQ3VzdG9tV2lkZ2V0Q29sbGVjdGlvbi5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMud2lkZ2V0c1ZhbHVlcyA9IFtdO1xuICAgIH07XG4gICAgQ3VzdG9tV2lkZ2V0Q29sbGVjdGlvbi5wcm90b3R5cGUuZ2V0Q3VzdG9tV2lkZ2V0QnlOYW1lID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLndpZGdldHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh0aGlzLndpZGdldHNbaV0ubmFtZSA9PSBuYW1lKVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLndpZGdldHNbaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgICBDdXN0b21XaWRnZXRDb2xsZWN0aW9uLnByb3RvdHlwZS5nZXRDdXN0b21XaWRnZXQgPSBmdW5jdGlvbiAocXVlc3Rpb24pIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLndpZGdldHNWYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh0aGlzLndpZGdldHNWYWx1ZXNbaV0uaXNGaXQocXVlc3Rpb24pKVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLndpZGdldHNWYWx1ZXNbaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgICBDdXN0b21XaWRnZXRDb2xsZWN0aW9uLkluc3RhbmNlID0gbmV3IEN1c3RvbVdpZGdldENvbGxlY3Rpb24oKTtcbiAgICByZXR1cm4gQ3VzdG9tV2lkZ2V0Q29sbGVjdGlvbjtcbn0oKSk7XG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9xdWVzdGlvbl9iYXNlc2VsZWN0LnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvcXVlc3Rpb25fYmFzZXNlbGVjdC50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFF1ZXN0aW9uU2VsZWN0QmFzZSwgUXVlc3Rpb25DaGVja2JveEJhc2UgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUXVlc3Rpb25TZWxlY3RCYXNlXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUXVlc3Rpb25TZWxlY3RCYXNlOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJRdWVzdGlvbkNoZWNrYm94QmFzZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFF1ZXN0aW9uQ2hlY2tib3hCYXNlOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9qc29ub2JqZWN0ICovIFwiLi9zcmMvanNvbm9iamVjdC50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc3VydmV5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3N1cnZleSAqLyBcIi4vc3JjL3N1cnZleS50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcXVlc3Rpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcXVlc3Rpb24gKi8gXCIuL3NyYy9xdWVzdGlvbi50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfaXRlbXZhbHVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2l0ZW12YWx1ZSAqLyBcIi4vc3JjL2l0ZW12YWx1ZS50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc3VydmV5U3RyaW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9zdXJ2ZXlTdHJpbmdzICovIFwiLi9zcmMvc3VydmV5U3RyaW5ncy50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZXJyb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZXJyb3IgKi8gXCIuL3NyYy9lcnJvci50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfY2hvaWNlc1Jlc3RmdWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vY2hvaWNlc1Jlc3RmdWwgKi8gXCIuL3NyYy9jaG9pY2VzUmVzdGZ1bC50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfY29uZGl0aW9uc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9jb25kaXRpb25zICovIFwiLi9zcmMvY29uZGl0aW9ucy50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfaGVscGVyc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9oZWxwZXJzICovIFwiLi9zcmMvaGVscGVycy50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc2V0dGluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vc2V0dGluZ3MgKi8gXCIuL3NyYy9zZXR0aW5ncy50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdXRpbHNfY3NzQ2xhc3NCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi91dGlscy9jc3NDbGFzc0J1aWxkZXIgKi8gXCIuL3NyYy91dGlscy9jc3NDbGFzc0J1aWxkZXIudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3V0aWxzX3V0aWxzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi91dGlscy91dGlscyAqLyBcIi4vc3JjL3V0aWxzL3V0aWxzLnRzXCIpO1xudmFyIF9fZXh0ZW5kcyA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG52YXIgX19kZWNvcmF0ZSA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLyoqXG4gKiBBIGJhc2UgY2xhc3MgZm9yIG11bHRpcGxlLWNob2ljZSBxdWVzdGlvbiB0eXBlcyAoW0NoZWNrYm94ZXNdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vcXVlc3Rpb25jaGVja2JveG1vZGVsKSwgW0Ryb3Bkb3duXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL3F1ZXN0aW9uZHJvcGRvd25tb2RlbCksIFtSYWRpbyBCdXR0b24gR3JvdXBdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vcXVlc3Rpb25yYWRpb2dyb3VwbW9kZWwpLCBldGMuKS5cbiAqL1xudmFyIFF1ZXN0aW9uU2VsZWN0QmFzZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoUXVlc3Rpb25TZWxlY3RCYXNlLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFF1ZXN0aW9uU2VsZWN0QmFzZShuYW1lKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG5hbWUpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLm90aGVySXRlbVZhbHVlID0gbmV3IF9pdGVtdmFsdWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcIkl0ZW1WYWx1ZVwiXShcIm90aGVyXCIpO1xuICAgICAgICBfdGhpcy5ub25lSXRlbVZhbHVlID0gbmV3IF9pdGVtdmFsdWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcIkl0ZW1WYWx1ZVwiXShfc2V0dGluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1tcInNldHRpbmdzXCJdLm5vbmVJdGVtVmFsdWUpO1xuICAgICAgICBfdGhpcy5pc1NldHRpbmdEZWZhdWx0VmFsdWUgPSBmYWxzZTtcbiAgICAgICAgX3RoaXMuaXNTZXR0aW5nQ29tbWVudCA9IGZhbHNlO1xuICAgICAgICBfdGhpcy5pc1J1bm5pbmdDaG9pY2VzID0gZmFsc2U7XG4gICAgICAgIF90aGlzLmlzRmlyc3RMb2FkQ2hvaWNlc0Zyb21VcmwgPSB0cnVlO1xuICAgICAgICBfdGhpcy5pc1VwZGF0aW5nQ2hvaWNlc0RlcGVuZGVkUXVlc3Rpb25zID0gZmFsc2U7XG4gICAgICAgIF90aGlzLnByZXZJc090aGVyU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgdmFyIG5vbmVJdGVtVGV4dCA9IF90aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwibm9uZVRleHRcIiwgX3RoaXMubm9uZUl0ZW1WYWx1ZSwgdHJ1ZSwgXCJub25lSXRlbVRleHRcIik7XG4gICAgICAgIF90aGlzLm5vbmVJdGVtVmFsdWUubG9jT3duZXIgPSBfdGhpcztcbiAgICAgICAgX3RoaXMubm9uZUl0ZW1WYWx1ZS5zZXRMb2NUZXh0KG5vbmVJdGVtVGV4dCk7XG4gICAgICAgIF90aGlzLmNyZWF0ZUl0ZW1WYWx1ZXMoXCJjaG9pY2VzXCIpO1xuICAgICAgICBfdGhpcy5yZWdpc3RlclByb3BlcnR5Q2hhbmdlZEhhbmRsZXJzKFtcImNob2ljZXNcIl0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghX3RoaXMuZmlsdGVySXRlbXMoKSkge1xuICAgICAgICAgICAgICAgIF90aGlzLm9uVmlzaWJsZUNob2ljZXNDaGFuZ2VkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBfdGhpcy5yZWdpc3RlclByb3BlcnR5Q2hhbmdlZEhhbmRsZXJzKFtcImNob2ljZXNGcm9tUXVlc3Rpb25cIiwgXCJjaG9pY2VzRnJvbVF1ZXN0aW9uTW9kZVwiLCBcImNob2ljZVZhbHVlc0Zyb21RdWVzdGlvblwiLCBcImNob2ljZVRleHRzRnJvbVF1ZXN0aW9uXCIsIFwic2hvd05vbmVJdGVtXCJdLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5vblZpc2libGVDaG9pY2VzQ2hhbmdlZCgpO1xuICAgICAgICB9KTtcbiAgICAgICAgX3RoaXMucmVnaXN0ZXJQcm9wZXJ0eUNoYW5nZWRIYW5kbGVycyhbXCJoaWRlSWZDaG9pY2VzRW1wdHlcIl0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLm9uVmlzaWJsZUNoYW5nZWQoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIF90aGlzLmNyZWF0ZU5ld0FycmF5KFwidmlzaWJsZUNob2ljZXNcIik7XG4gICAgICAgIF90aGlzLnNldE5ld1Jlc3RmdWxQcm9wZXJ0eSgpO1xuICAgICAgICB2YXIgbG9jT3RoZXJUZXh0ID0gX3RoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJvdGhlclRleHRcIiwgX3RoaXMub3RoZXJJdGVtVmFsdWUsIHRydWUsIFwib3RoZXJJdGVtVGV4dFwiKTtcbiAgICAgICAgX3RoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJvdGhlckVycm9yVGV4dFwiLCBfdGhpcywgdHJ1ZSwgXCJvdGhlclJlcXVpcmVkRXJyb3JcIik7XG4gICAgICAgIF90aGlzLm90aGVySXRlbVZhbHVlLmxvY093bmVyID0gX3RoaXM7XG4gICAgICAgIF90aGlzLm90aGVySXRlbVZhbHVlLnNldExvY1RleHQobG9jT3RoZXJUZXh0KTtcbiAgICAgICAgX3RoaXMuY2hvaWNlc0J5VXJsLmNyZWF0ZUl0ZW1WYWx1ZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIF90aGlzLmNyZWF0ZUl0ZW1WYWx1ZSh2YWx1ZSk7XG4gICAgICAgIH07XG4gICAgICAgIF90aGlzLmNob2ljZXNCeVVybC5iZWZvcmVTZW5kUmVxdWVzdENhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMub25CZWZvcmVTZW5kUmVxdWVzdCgpO1xuICAgICAgICB9O1xuICAgICAgICBfdGhpcy5jaG9pY2VzQnlVcmwuZ2V0UmVzdWx0Q2FsbGJhY2sgPSBmdW5jdGlvbiAoaXRlbXMpIHtcbiAgICAgICAgICAgIF90aGlzLm9uTG9hZENob2ljZXNGcm9tVXJsKGl0ZW1zKTtcbiAgICAgICAgfTtcbiAgICAgICAgX3RoaXMuY2hvaWNlc0J5VXJsLnVwZGF0ZVJlc3VsdENhbGxiYWNrID0gZnVuY3Rpb24gKGl0ZW1zLCBzZXJ2ZXJSZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChfdGhpcy5zdXJ2ZXkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMuc3VydmV5LnVwZGF0ZUNob2ljZXNGcm9tU2VydmVyKF90aGlzLCBpdGVtcywgc2VydmVyUmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBpdGVtcztcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZSwgXCJ3YWl0aW5nQ2hvaWNlc0J5VVJMXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gIXRoaXMuaXNDaG9pY2VzTG9hZGVkICYmICF0aGlzLmNob2ljZXNCeVVybC5pc0VtcHR5O1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZS5nZXRUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gXCJzZWxlY3RiYXNlXCI7XG4gICAgfTtcbiAgICBRdWVzdGlvblNlbGVjdEJhc2UucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuICAgICAgICB2YXIgcSA9IHRoaXMuZ2V0UXVlc3Rpb25XaXRoQ2hvaWNlcygpO1xuICAgICAgICBpZiAoISFxKSB7XG4gICAgICAgICAgICBxLnJlbW92ZURlcGVuZGVkUXVlc3Rpb24odGhpcyk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFF1ZXN0aW9uU2VsZWN0QmFzZS5wcm90b3R5cGUucmVzZXREZXBlbmRlZFF1ZXN0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmNob2ljZXNGcm9tUXVlc3Rpb24gPSBcIlwiO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uU2VsZWN0QmFzZS5wcm90b3R5cGUsIFwib3RoZXJJZFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaWQgKyBcIl9vdGhlclwiO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZS5nZXRDb21tZW50RWxlbWVudHNJZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIFt0aGlzLmNvbW1lbnRJZCwgdGhpcy5vdGhlcklkXTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uU2VsZWN0QmFzZS5wcm90b3R5cGUuZ2V0SXRlbVZhbHVlVHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIFwiaXRlbXZhbHVlXCI7XG4gICAgfTtcbiAgICBRdWVzdGlvblNlbGVjdEJhc2UucHJvdG90eXBlLmNyZWF0ZUl0ZW1WYWx1ZSA9IGZ1bmN0aW9uICh2YWx1ZSwgdGV4dCkge1xuICAgICAgICB2YXIgcmVzID0gX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlNlcmlhbGl6ZXJcIl0uY3JlYXRlQ2xhc3ModGhpcy5nZXRJdGVtVmFsdWVUeXBlKCksIHZhbHVlKTtcbiAgICAgICAgcmVzLmxvY093bmVyID0gdGhpcztcbiAgICAgICAgaWYgKCEhdGV4dClcbiAgICAgICAgICAgIHJlcy50ZXh0ID0gdGV4dDtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblNlbGVjdEJhc2UucHJvdG90eXBlLCBcImlzVXNpbmdDYXJyeUZvcndhcmRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAhIXRoaXMuY2FycnlGb3J3YXJkUXVlc3Rpb25UeXBlO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uU2VsZWN0QmFzZS5wcm90b3R5cGUsIFwiY2FycnlGb3J3YXJkUXVlc3Rpb25UeXBlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY2FycnlGb3J3YXJkUXVlc3Rpb25UeXBlXCIpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZS5zZXRDYXJyeUZvcndhcmRRdWVzdGlvblR5cGUgPSBmdW5jdGlvbiAoc2VsQmFzZVF1ZXN0aW9uLCBhcnJheVF1ZXN0aW9uKSB7XG4gICAgICAgIHZhciBtb2RlID0gc2VsQmFzZVF1ZXN0aW9uID8gXCJzZWxlY3RcIiA6IChhcnJheVF1ZXN0aW9uID8gXCJhcnJheVwiIDogdW5kZWZpbmVkKTtcbiAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY2FycnlGb3J3YXJkUXVlc3Rpb25UeXBlXCIsIG1vZGUpO1xuICAgIH07XG4gICAgUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZS5zdXBwb3J0R29OZXh0UGFnZUVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gIXRoaXMuaXNPdGhlclNlbGVjdGVkIHx8ICEhdGhpcy5vdGhlclZhbHVlO1xuICAgIH07XG4gICAgUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZS5pc0xheW91dFR5cGVTdXBwb3J0ZWQgPSBmdW5jdGlvbiAobGF5b3V0VHlwZSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uU2VsZWN0QmFzZS5wcm90b3R5cGUubG9jYWxlQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5sb2NhbGVDaGFuZ2VkLmNhbGwodGhpcyk7XG4gICAgICAgIGlmICh0aGlzLmNob2ljZXNPcmRlciAhPT0gXCJub25lXCIpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVmlzaWJsZUNob2ljZXMoKTtcbiAgICAgICAgICAgIHRoaXMub25WaXNpYmxlQ2hvaWNlc0NoYW5nZWQoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZS5sb2NTdHJzQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5sb2NTdHJzQ2hhbmdlZC5jYWxsKHRoaXMpO1xuICAgICAgICBpZiAoISF0aGlzLmNob2ljZXNGcm9tVXJsKSB7XG4gICAgICAgICAgICBfaXRlbXZhbHVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJJdGVtVmFsdWVcIl0ubG9jU3Ryc0NoYW5nZWQodGhpcy5jaG9pY2VzRnJvbVVybCk7XG4gICAgICAgICAgICBfaXRlbXZhbHVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJJdGVtVmFsdWVcIl0ubG9jU3Ryc0NoYW5nZWQodGhpcy52aXNpYmxlQ2hvaWNlcyk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblNlbGVjdEJhc2UucHJvdG90eXBlLCBcIm90aGVyVmFsdWVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5zaG93Q29tbWVudEFyZWEpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29tbWVudDtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm90aGVyVmFsdWVDb3JlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5zaG93Q29tbWVudEFyZWEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1lbnQgPSB2YWw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldE90aGVyVmFsdWVJbnRlcm5hbGx5KHZhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZSwgXCJvdGhlclZhbHVlQ29yZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIm90aGVyVmFsdWVcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwib3RoZXJWYWx1ZVwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uU2VsZWN0QmFzZS5wcm90b3R5cGUsIFwib3RoZXJJdGVtXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgdGhlIFwiT3RoZXJcIiBjaG9pY2UgaXRlbS4gVXNlIHRoaXMgcHJvcGVydHkgdG8gY2hhbmdlIHRoZSBpdGVtJ3MgYHZhbHVlYCBvciBgdGV4dGAuXG4gICAgICAgICAqIEBzZWUgc2hvd090aGVySXRlbVxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5vdGhlckl0ZW1WYWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblNlbGVjdEJhc2UucHJvdG90eXBlLCBcImlzT3RoZXJTZWxlY3RlZFwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgXCJPdGhlclwiIGNob2ljZSBpdGVtIGlzIHNlbGVjdGVkLlxuICAgICAgICAgKiBAc2VlIHNob3dPdGhlckl0ZW1cbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGFzT3RoZXIgJiYgdGhpcy5nZXRIYXNPdGhlcih0aGlzLnJlbmRlcmVkVmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uU2VsZWN0QmFzZS5wcm90b3R5cGUsIFwiaXNOb25lU2VsZWN0ZWRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmhhc05vbmUgJiYgdGhpcy5nZXRJc0l0ZW1WYWx1ZSh0aGlzLnJlbmRlcmVkVmFsdWUsIHRoaXMubm9uZUl0ZW0pO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uU2VsZWN0QmFzZS5wcm90b3R5cGUsIFwic2hvd05vbmVJdGVtXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB3aGV0aGVyIHRvIGRpc3BsYXkgdGhlIFwiTm9uZVwiIGNob2ljZSBpdGVtLlxuICAgICAgICAgKlxuICAgICAgICAgKiBXaGVuIHVzZXJzIHNlbGVjdCB0aGUgXCJOb25lXCIgaXRlbSBpbiBtdWx0aS1zZWxlY3QgcXVlc3Rpb25zLCBhbGwgb3RoZXIgaXRlbXMgYmVjb21lIHVuc2VsZWN0ZWQuXG4gICAgICAgICAqIEBzZWUgbm9uZUl0ZW1cbiAgICAgICAgICogQHNlZSBub25lVGV4dFxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic2hvd05vbmVJdGVtXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInNob3dOb25lSXRlbVwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uU2VsZWN0QmFzZS5wcm90b3R5cGUsIFwiaGFzTm9uZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2hvd05vbmVJdGVtO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd05vbmVJdGVtID0gdmFsO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uU2VsZWN0QmFzZS5wcm90b3R5cGUsIFwibm9uZUl0ZW1cIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJucyB0aGUgXCJOb25lXCIgY2hvaWNlIGl0ZW0uIFVzZSB0aGlzIHByb3BlcnR5IHRvIGNoYW5nZSB0aGUgaXRlbSdzIGB2YWx1ZWAgb3IgYHRleHRgLlxuICAgICAgICAgKiBAc2VlIHNob3dOb25lSXRlbVxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ub25lSXRlbVZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uU2VsZWN0QmFzZS5wcm90b3R5cGUsIFwibm9uZVRleHRcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogR2V0cyBvciBzZXRzIGEgY2FwdGlvbiBmb3IgdGhlIFwiTm9uZVwiIGNob2ljZSBpdGVtLlxuICAgICAgICAgKiBAc2VlIHNob3dOb25lSXRlbVxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJub25lVGV4dFwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcIm5vbmVUZXh0XCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZSwgXCJsb2NOb25lVGV4dFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJub25lVGV4dFwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblNlbGVjdEJhc2UucHJvdG90eXBlLCBcImNob2ljZXNWaXNpYmxlSWZcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogQSBCb29sZWFuIGV4cHJlc3Npb24gdGhhdCBpcyBldmFsdWF0ZWQgYWdhaW5zdCBlYWNoIGNob2ljZSBpdGVtLiBJZiB0aGUgZXhwcmVzc2lvbiBldmFsdWF0ZXMgdG8gYGZhbHNlYCwgdGhlIGNob2ljZSBpdGVtIGJlY29tZXMgaGlkZGVuLlxuICAgICAgICAgKlxuICAgICAgICAgKiBBIHN1cnZleSBwYXJzZXMgYW5kIHJ1bnMgYWxsIGV4cHJlc3Npb25zIG9uIHN0YXJ0dXAuIElmIGFueSB2YWx1ZXMgdXNlZCBpbiB0aGUgZXhwcmVzc2lvbiBjaGFuZ2UsIHRoZSBzdXJ2ZXkgcmUtZXZhbHVhdGVzIGl0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBVc2UgdGhlIGB7aXRlbX1gIHBsYWNlaG9sZGVyIHRvIHJlZmVyZW5jZSB0aGUgY3VycmVudCBjaG9pY2UgaXRlbSBpbiB0aGUgZXhwcmVzc2lvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogUmVmZXIgdG8gdGhlIGZvbGxvd2luZyBoZWxwIHRvcGljIGZvciBtb3JlIGluZm9ybWF0aW9uOiBbQ29uZGl0aW9uYWwgVmlzaWJpbGl0eV0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9kZXNpZ24tc3VydmV5LWNvbmRpdGlvbmFsLWxvZ2ljI2NvbmRpdGlvbmFsLXZpc2liaWxpdHkpLlxuICAgICAgICAgKiBAc2VlIHZpc2libGVJZlxuICAgICAgICAgKiBAc2VlIGNob2ljZXNFbmFibGVJZlxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY2hvaWNlc1Zpc2libGVJZlwiLCBcIlwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjaG9pY2VzVmlzaWJsZUlmXCIsIHZhbCk7XG4gICAgICAgICAgICB0aGlzLmZpbHRlckl0ZW1zKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZSwgXCJjaG9pY2VzRW5hYmxlSWZcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogQSBCb29sZWFuIGV4cHJlc3Npb24gdGhhdCBpcyBldmFsdWF0ZWQgYWdhaW5zdCBlYWNoIGNob2ljZSBpdGVtLiBJZiB0aGUgZXhwcmVzc2lvbiBldmFsdWF0ZXMgdG8gYGZhbHNlYCwgdGhlIGNob2ljZSBpdGVtIGJlY29tZXMgcmVhZC1vbmx5LlxuICAgICAgICAgKlxuICAgICAgICAgKiBBIHN1cnZleSBwYXJzZXMgYW5kIHJ1bnMgYWxsIGV4cHJlc3Npb25zIG9uIHN0YXJ0dXAuIElmIGFueSB2YWx1ZXMgdXNlZCBpbiB0aGUgZXhwcmVzc2lvbiBjaGFuZ2UsIHRoZSBzdXJ2ZXkgcmUtZXZhbHVhdGVzIGl0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBVc2UgdGhlIGB7aXRlbX1gIHBsYWNlaG9sZGVyIHRvIHJlZmVyZW5jZSB0aGUgY3VycmVudCBjaG9pY2UgaXRlbSBpbiB0aGUgZXhwcmVzc2lvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogUmVmZXIgdG8gdGhlIGZvbGxvd2luZyBoZWxwIHRvcGljIGZvciBtb3JlIGluZm9ybWF0aW9uOiBbQ29uZGl0aW9uYWwgVmlzaWJpbGl0eV0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9kZXNpZ24tc3VydmV5LWNvbmRpdGlvbmFsLWxvZ2ljI2NvbmRpdGlvbmFsLXZpc2liaWxpdHkpLlxuICAgICAgICAgKiBAc2VlIGVuYWJsZUlmXG4gICAgICAgICAqIEBzZWUgY2hvaWNlc1Zpc2libGVJZlxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY2hvaWNlc0VuYWJsZUlmXCIsIFwiXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNob2ljZXNFbmFibGVJZlwiLCB2YWwpO1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJJdGVtcygpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZS5zdXJ2ZXlDaG9pY2VJdGVtVmlzaWJpbGl0eUNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5maWx0ZXJJdGVtcygpO1xuICAgIH07XG4gICAgUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZS5ydW5Db25kaXRpb24gPSBmdW5jdGlvbiAodmFsdWVzLCBwcm9wZXJ0aWVzKSB7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUucnVuQ29uZGl0aW9uLmNhbGwodGhpcywgdmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICAgICAgaWYgKHRoaXMuaXNVc2luZ0NhcnJ5Rm9yd2FyZClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5ydW5JdGVtc0VuYWJsZUNvbmRpdGlvbih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgICAgICB0aGlzLnJ1bkl0ZW1zQ29uZGl0aW9uKHZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgfTtcbiAgICBRdWVzdGlvblNlbGVjdEJhc2UucHJvdG90eXBlLmlzVGV4dFZhbHVlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTsgLy9mb3IgY29tbWVudHMgYW5kIG90aGVyc1xuICAgIH07XG4gICAgUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZS5zZXREZWZhdWx0VmFsdWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuaXNTZXR0aW5nRGVmYXVsdFZhbHVlID1cbiAgICAgICAgICAgICF0aGlzLmlzVmFsdWVFbXB0eSh0aGlzLmRlZmF1bHRWYWx1ZSkgJiZcbiAgICAgICAgICAgICAgICB0aGlzLmhhc1Vua25vd25WYWx1ZSh0aGlzLmRlZmF1bHRWYWx1ZSk7XG4gICAgICAgIHRoaXMucHJldk90aGVyVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUuc2V0RGVmYXVsdFZhbHVlLmNhbGwodGhpcyk7XG4gICAgICAgIHRoaXMuaXNTZXR0aW5nRGVmYXVsdFZhbHVlID0gZmFsc2U7XG4gICAgfTtcbiAgICBRdWVzdGlvblNlbGVjdEJhc2UucHJvdG90eXBlLmdldElzTXVsdGlwbGVWYWx1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gICAgUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZS5jb252ZXJ0RGVmYXVsdFZhbHVlID0gZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICBpZiAodmFsID09IG51bGwgfHwgdmFsID09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybiB2YWw7XG4gICAgICAgIGlmICh0aGlzLmdldElzTXVsdGlwbGVWYWx1ZSgpKSB7XG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gW3ZhbF07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpICYmIHZhbC5sZW5ndGggPiAwKVxuICAgICAgICAgICAgICAgIHJldHVybiB2YWxbMF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9O1xuICAgIFF1ZXN0aW9uU2VsZWN0QmFzZS5wcm90b3R5cGUuZmlsdGVySXRlbXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzTG9hZGluZ0Zyb21Kc29uIHx8XG4gICAgICAgICAgICAhdGhpcy5kYXRhIHx8XG4gICAgICAgICAgICB0aGlzLmFyZUludmlzaWJsZUVsZW1lbnRzU2hvd2luZylcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgdmFyIHZhbHVlcyA9IHRoaXMuZ2V0RGF0YUZpbHRlcmVkVmFsdWVzKCk7XG4gICAgICAgIHZhciBwcm9wZXJ0aWVzID0gdGhpcy5nZXREYXRhRmlsdGVyZWRQcm9wZXJ0aWVzKCk7XG4gICAgICAgIHRoaXMucnVuSXRlbXNFbmFibGVDb25kaXRpb24odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucnVuSXRlbXNDb25kaXRpb24odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uU2VsZWN0QmFzZS5wcm90b3R5cGUucnVuSXRlbXNDb25kaXRpb24gPSBmdW5jdGlvbiAodmFsdWVzLCBwcm9wZXJ0aWVzKSB7XG4gICAgICAgIHRoaXMuc2V0Q29uZGl0aW9uYWxDaG9pY2VzUnVubmVyKCk7XG4gICAgICAgIHZhciBoYXNDaGFuZ2VzID0gdGhpcy5ydW5Db25kaXRpb25zRm9ySXRlbXModmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICAgICAgaWYgKCEhdGhpcy5maWx0ZXJlZENob2ljZXNWYWx1ZSAmJlxuICAgICAgICAgICAgdGhpcy5maWx0ZXJlZENob2ljZXNWYWx1ZS5sZW5ndGggPT09IHRoaXMuYWN0aXZlQ2hvaWNlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRDaG9pY2VzVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhhc0NoYW5nZXMpIHtcbiAgICAgICAgICAgIHRoaXMub25WaXNpYmxlQ2hvaWNlc0NoYW5nZWQoKTtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJJbmNvcnJlY3RWYWx1ZXMoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaGFzQ2hhbmdlcztcbiAgICB9O1xuICAgIFF1ZXN0aW9uU2VsZWN0QmFzZS5wcm90b3R5cGUucnVuSXRlbXNFbmFibGVDb25kaXRpb24gPSBmdW5jdGlvbiAodmFsdWVzLCBwcm9wZXJ0aWVzKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHRoaXMuc2V0Q29uZGl0aW9uYWxFbmFibGVDaG9pY2VzUnVubmVyKCk7XG4gICAgICAgIHZhciBoYXNDaGFuZ2VkID0gX2l0ZW12YWx1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiSXRlbVZhbHVlXCJdLnJ1bkVuYWJsZWRDb25kaXRpb25zRm9ySXRlbXModGhpcy5hY3RpdmVDaG9pY2VzLCB0aGlzLmNvbmRpdGlvbkNob2ljZXNFbmFibGVJZlJ1bm5lciwgdmFsdWVzLCBwcm9wZXJ0aWVzLCBmdW5jdGlvbiAoaXRlbSwgdmFsKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsICYmIF90aGlzLm9uRW5hYmxlSXRlbUNhbGxCYWNrKGl0ZW0pO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGhhc0NoYW5nZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJEaXNhYmxlZFZhbHVlcygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub25BZnRlclJ1bkl0ZW1zRW5hYmxlQ29uZGl0aW9uKCk7XG4gICAgfTtcbiAgICBRdWVzdGlvblNlbGVjdEJhc2UucHJvdG90eXBlLm9uQWZ0ZXJSdW5JdGVtc0VuYWJsZUNvbmRpdGlvbiA9IGZ1bmN0aW9uICgpIHsgfTtcbiAgICBRdWVzdGlvblNlbGVjdEJhc2UucHJvdG90eXBlLm9uRW5hYmxlSXRlbUNhbGxCYWNrID0gZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgICBRdWVzdGlvblNlbGVjdEJhc2UucHJvdG90eXBlLm9uU2VsZWN0ZWRJdGVtVmFsdWVzQ2hhbmdlZEhhbmRsZXIgPSBmdW5jdGlvbiAobmV3VmFsdWUpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICAoX2EgPSB0aGlzLnN1cnZleSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmxvYWRlZENob2ljZXNGcm9tU2VydmVyKHRoaXMpO1xuICAgIH07XG4gICAgUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZS5nZXRJdGVtSWZDaG9pY2VzTm90Q29udGFpblRoaXNWYWx1ZSA9IGZ1bmN0aW9uICh2YWx1ZSwgdGV4dCkge1xuICAgICAgICBpZiAodGhpcy53YWl0aW5nQ2hvaWNlc0J5VVJMKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVJdGVtVmFsdWUodmFsdWUsIHRleHQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFF1ZXN0aW9uU2VsZWN0QmFzZS5wcm90b3R5cGUuZ2V0U2luZ2xlU2VsZWN0ZWRJdGVtID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgc2VsZWN0ZWRJdGVtVmFsdWVzID0gdGhpcy5zZWxlY3RlZEl0ZW1WYWx1ZXM7XG4gICAgICAgIGlmICh0aGlzLmlzRW1wdHkoKSlcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB2YXIgaXRlbVZhbHVlID0gX2l0ZW12YWx1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiSXRlbVZhbHVlXCJdLmdldEl0ZW1CeVZhbHVlKHRoaXMudmlzaWJsZUNob2ljZXMsIHRoaXMudmFsdWUpO1xuICAgICAgICB0aGlzLm9uR2V0U2luZ2xlU2VsZWN0ZWRJdGVtKGl0ZW1WYWx1ZSk7XG4gICAgICAgIGlmICghaXRlbVZhbHVlICYmICghc2VsZWN0ZWRJdGVtVmFsdWVzIHx8IHRoaXMudmFsdWUgIT0gc2VsZWN0ZWRJdGVtVmFsdWVzLmlkKSkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZEl0ZW1WYWx1ZXMoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXRlbVZhbHVlIHx8IHNlbGVjdGVkSXRlbVZhbHVlcyB8fCAodGhpcy5pc090aGVyU2VsZWN0ZWQgPyB0aGlzLm90aGVySXRlbSA6IHRoaXMuZ2V0SXRlbUlmQ2hvaWNlc05vdENvbnRhaW5UaGlzVmFsdWUodGhpcy52YWx1ZSkpO1xuICAgIH07XG4gICAgUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZS5vbkdldFNpbmdsZVNlbGVjdGVkSXRlbSA9IGZ1bmN0aW9uIChzZWxlY3RlZEl0ZW1CeVZhbHVlKSB7IH07XG4gICAgUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZS5nZXRNdWx0aXBsZVNlbGVjdGVkSXRlbXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uU2VsZWN0QmFzZS5wcm90b3R5cGUuc2V0Q29uZGl0aW9uYWxDaG9pY2VzUnVubmVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5jaG9pY2VzVmlzaWJsZUlmKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuY29uZGl0aW9uQ2hvaWNlc1Zpc2libGVJZlJ1bm5lcikge1xuICAgICAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uQ2hvaWNlc1Zpc2libGVJZlJ1bm5lciA9IG5ldyBfY29uZGl0aW9uc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fW1wiQ29uZGl0aW9uUnVubmVyXCJdKHRoaXMuY2hvaWNlc1Zpc2libGVJZik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNvbmRpdGlvbkNob2ljZXNWaXNpYmxlSWZSdW5uZXIuZXhwcmVzc2lvbiA9IHRoaXMuY2hvaWNlc1Zpc2libGVJZjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uQ2hvaWNlc1Zpc2libGVJZlJ1bm5lciA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFF1ZXN0aW9uU2VsZWN0QmFzZS5wcm90b3R5cGUuc2V0Q29uZGl0aW9uYWxFbmFibGVDaG9pY2VzUnVubmVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5jaG9pY2VzRW5hYmxlSWYpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5jb25kaXRpb25DaG9pY2VzRW5hYmxlSWZSdW5uZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmRpdGlvbkNob2ljZXNFbmFibGVJZlJ1bm5lciA9IG5ldyBfY29uZGl0aW9uc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fW1wiQ29uZGl0aW9uUnVubmVyXCJdKHRoaXMuY2hvaWNlc0VuYWJsZUlmKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uQ2hvaWNlc0VuYWJsZUlmUnVubmVyLmV4cHJlc3Npb24gPSB0aGlzLmNob2ljZXNFbmFibGVJZjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uQ2hvaWNlc0VuYWJsZUlmUnVubmVyID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH07XG4gICAgUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZS5jYW5TdXJ2ZXlDaGFuZ2VJdGVtVmlzaWJpbGl0eSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5zdXJ2ZXkgJiYgdGhpcy5zdXJ2ZXkuY2FuQ2hhbmdlQ2hvaWNlSXRlbXNWaXNpYmlsaXR5KCk7XG4gICAgfTtcbiAgICBRdWVzdGlvblNlbGVjdEJhc2UucHJvdG90eXBlLmNoYW5nZUl0ZW1WaXNpc2JpbGl0eSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FuU3VydmV5Q2hhbmdlSXRlbVZpc2liaWxpdHkoKSA/XG4gICAgICAgICAgICBmdW5jdGlvbiAoaXRlbSwgdmFsKSB7IHJldHVybiBfdGhpcy5zdXJ2ZXkuZ2V0Q2hvaWNlSXRlbVZpc2liaWxpdHkoX3RoaXMsIGl0ZW0sIHZhbCk7IH1cbiAgICAgICAgICAgIDogbnVsbDtcbiAgICB9O1xuICAgIFF1ZXN0aW9uU2VsZWN0QmFzZS5wcm90b3R5cGUucnVuQ29uZGl0aW9uc0Zvckl0ZW1zID0gZnVuY3Rpb24gKHZhbHVlcywgcHJvcGVydGllcykge1xuICAgICAgICB0aGlzLmZpbHRlcmVkQ2hvaWNlc1ZhbHVlID0gW107XG4gICAgICAgIHZhciBjYWxjVmlzaWJpbGl0eSA9IHRoaXMuY2hhbmdlSXRlbVZpc2lzYmlsaXR5KCk7XG4gICAgICAgIHJldHVybiBfaXRlbXZhbHVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJJdGVtVmFsdWVcIl0ucnVuQ29uZGl0aW9uc0Zvckl0ZW1zKHRoaXMuYWN0aXZlQ2hvaWNlcywgdGhpcy5nZXRGaWx0ZXJlZENob2ljZXMoKSwgdGhpcy5hcmVJbnZpc2libGVFbGVtZW50c1Nob3dpbmdcbiAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgOiB0aGlzLmNvbmRpdGlvbkNob2ljZXNWaXNpYmxlSWZSdW5uZXIsIHZhbHVlcywgcHJvcGVydGllcywgIXRoaXMuc3VydmV5IHx8ICF0aGlzLnN1cnZleS5hcmVJbnZpc2libGVFbGVtZW50c1Nob3dpbmcsIGZ1bmN0aW9uIChpdGVtLCB2YWwpIHtcbiAgICAgICAgICAgIHJldHVybiAhIWNhbGNWaXNpYmlsaXR5ID8gY2FsY1Zpc2liaWxpdHkoaXRlbSwgdmFsKSA6IHZhbDtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBRdWVzdGlvblNlbGVjdEJhc2UucHJvdG90eXBlLmdldEhhc090aGVyID0gZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRJc0l0ZW1WYWx1ZSh2YWwsIHRoaXMub3RoZXJJdGVtKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uU2VsZWN0QmFzZS5wcm90b3R5cGUuZ2V0SXNJdGVtVmFsdWUgPSBmdW5jdGlvbiAodmFsLCBpdGVtKSB7XG4gICAgICAgIHJldHVybiB2YWwgPT09IGl0ZW0udmFsdWU7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZSwgXCJ2YWxpZGF0ZWRWYWx1ZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVuZHJlZFZhbHVlVG9EYXRhQ29yZSh0aGlzLnZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFF1ZXN0aW9uU2VsZWN0QmFzZS5wcm90b3R5cGUuY3JlYXRlUmVzdGZ1bCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBfY2hvaWNlc1Jlc3RmdWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1tcIkNob2ljZXNSZXN0ZnVsXCJdKCk7XG4gICAgfTtcbiAgICBRdWVzdGlvblNlbGVjdEJhc2UucHJvdG90eXBlLnNldE5ld1Jlc3RmdWxQcm9wZXJ0eSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY2hvaWNlc0J5VXJsXCIsIHRoaXMuY3JlYXRlUmVzdGZ1bCgpKTtcbiAgICAgICAgdGhpcy5jaG9pY2VzQnlVcmwub3duZXIgPSB0aGlzO1xuICAgICAgICB0aGlzLmNob2ljZXNCeVVybC5sb2FkaW5nT3duZXIgPSB0aGlzO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uU2VsZWN0QmFzZS5wcm90b3R5cGUsIFwiYXV0b090aGVyTW9kZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImF1dG9PdGhlck1vZGVcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiYXV0b090aGVyTW9kZVwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZS5nZXRRdWVzdGlvbkNvbW1lbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLnNob3dDb21tZW50QXJlYSlcbiAgICAgICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLmdldFF1ZXN0aW9uQ29tbWVudC5jYWxsKHRoaXMpO1xuICAgICAgICBpZiAoISF0aGlzLm90aGVyVmFsdWVDb3JlKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMub3RoZXJWYWx1ZUNvcmU7XG4gICAgICAgIGlmICh0aGlzLmhhc0NvbW1lbnQgfHwgdGhpcy5nZXRTdG9yZU90aGVyc0FzQ29tbWVudCgpKVxuICAgICAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUuZ2V0UXVlc3Rpb25Db21tZW50LmNhbGwodGhpcyk7XG4gICAgICAgIHJldHVybiB0aGlzLm90aGVyVmFsdWVDb3JlO1xuICAgIH07XG4gICAgUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZS5zZWxlY3RPdGhlclZhbHVlRnJvbUNvbW1lbnQgPSBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWwgPyB0aGlzLm90aGVySXRlbS52YWx1ZSA6IHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIFF1ZXN0aW9uU2VsZWN0QmFzZS5wcm90b3R5cGUuc2V0UXVlc3Rpb25Db21tZW50ID0gZnVuY3Rpb24gKG5ld1ZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLnNob3dDb21tZW50QXJlYSkge1xuICAgICAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5zZXRRdWVzdGlvbkNvbW1lbnQuY2FsbCh0aGlzLCBuZXdWYWx1ZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vblVwZGF0ZUNvbW1lbnRPbkF1dG9PdGhlck1vZGUobmV3VmFsdWUpO1xuICAgICAgICBpZiAodGhpcy5nZXRTdG9yZU90aGVyc0FzQ29tbWVudCgpKVxuICAgICAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5zZXRRdWVzdGlvbkNvbW1lbnQuY2FsbCh0aGlzLCBuZXdWYWx1ZSk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXRPdGhlclZhbHVlSW50ZXJuYWxseShuZXdWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVDaG9pY2VzRGVwZW5kZWRRdWVzdGlvbnMoKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uU2VsZWN0QmFzZS5wcm90b3R5cGUub25VcGRhdGVDb21tZW50T25BdXRvT3RoZXJNb2RlID0gZnVuY3Rpb24gKG5ld1ZhbHVlKSB7XG4gICAgICAgIGlmICghdGhpcy5hdXRvT3RoZXJNb2RlKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLnByZXZPdGhlclZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICB2YXIgaXNTZWxlY3RlZCA9IHRoaXMuaXNPdGhlclNlbGVjdGVkO1xuICAgICAgICBpZiAoIWlzU2VsZWN0ZWQgJiYgISFuZXdWYWx1ZSB8fCBpc1NlbGVjdGVkICYmICFuZXdWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RPdGhlclZhbHVlRnJvbUNvbW1lbnQoISFuZXdWYWx1ZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFF1ZXN0aW9uU2VsZWN0QmFzZS5wcm90b3R5cGUuc2V0T3RoZXJWYWx1ZUludGVybmFsbHkgPSBmdW5jdGlvbiAobmV3VmFsdWUpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzU2V0dGluZ0NvbW1lbnQgJiYgbmV3VmFsdWUgIT0gdGhpcy5vdGhlclZhbHVlQ29yZSkge1xuICAgICAgICAgICAgdGhpcy5pc1NldHRpbmdDb21tZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMub3RoZXJWYWx1ZUNvcmUgPSBuZXdWYWx1ZTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzT3RoZXJTZWxlY3RlZCAmJiAhdGhpcy5pc1JlbmRlcmVkVmFsdWVTZXR0aW5nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMucmVuZHJlZFZhbHVlVG9EYXRhKHRoaXMucmVuZGVyZWRWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmlzU2V0dGluZ0NvbW1lbnQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZS5jbGVhclZhbHVlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBfc3VwZXIucHJvdG90eXBlLmNsZWFyVmFsdWUuY2FsbCh0aGlzKTtcbiAgICAgICAgdGhpcy5wcmV2T3RoZXJWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIFF1ZXN0aW9uU2VsZWN0QmFzZS5wcm90b3R5cGUudXBkYXRlQ29tbWVudEZyb21TdXJ2ZXkgPSBmdW5jdGlvbiAobmV3VmFsdWUpIHtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS51cGRhdGVDb21tZW50RnJvbVN1cnZleS5jYWxsKHRoaXMsIG5ld1ZhbHVlKTtcbiAgICAgICAgdGhpcy5wcmV2T3RoZXJWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblNlbGVjdEJhc2UucHJvdG90eXBlLCBcInJlbmRlcmVkVmFsdWVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJyZW5kZXJlZFZhbHVlXCIsIG51bGwpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInJlbmRlcmVkVmFsdWVcIiwgdmFsKTtcbiAgICAgICAgICAgIHZhciB2YWwgPSB0aGlzLnJlbmRyZWRWYWx1ZVRvRGF0YSh2YWwpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlzVHdvVmFsdWVFcXVhbHModmFsLCB0aGlzLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBRdWVzdGlvblNlbGVjdEJhc2UucHJvdG90eXBlLnNldFF1ZXN0aW9uVmFsdWUgPSBmdW5jdGlvbiAobmV3VmFsdWUsIHVwZGF0ZUlzQW5zd2VyZWQsIHVwZGF0ZUNvbW1lbnQpIHtcbiAgICAgICAgaWYgKHVwZGF0ZUlzQW5zd2VyZWQgPT09IHZvaWQgMCkgeyB1cGRhdGVJc0Fuc3dlcmVkID0gdHJ1ZTsgfVxuICAgICAgICBpZiAodXBkYXRlQ29tbWVudCA9PT0gdm9pZCAwKSB7IHVwZGF0ZUNvbW1lbnQgPSB0cnVlOyB9XG4gICAgICAgIGlmICh0aGlzLmlzTG9hZGluZ0Zyb21Kc29uIHx8XG4gICAgICAgICAgICB0aGlzLmlzVHdvVmFsdWVFcXVhbHModGhpcy52YWx1ZSwgbmV3VmFsdWUpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBfc3VwZXIucHJvdG90eXBlLnNldFF1ZXN0aW9uVmFsdWUuY2FsbCh0aGlzLCBuZXdWYWx1ZSwgdXBkYXRlSXNBbnN3ZXJlZCk7XG4gICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInJlbmRlcmVkVmFsdWVcIiwgdGhpcy5yZW5kcmVkVmFsdWVGcm9tRGF0YShuZXdWYWx1ZSkpO1xuICAgICAgICB0aGlzLnVwZGF0ZUNob2ljZXNEZXBlbmRlZFF1ZXN0aW9ucygpO1xuICAgICAgICBpZiAodGhpcy5oYXNDb21tZW50IHx8ICF1cGRhdGVDb21tZW50KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIgaXNPdGhlclNlbCA9IHRoaXMuaXNPdGhlclNlbGVjdGVkO1xuICAgICAgICBpZiAoaXNPdGhlclNlbCAmJiAhIXRoaXMucHJldk90aGVyVmFsdWUpIHtcbiAgICAgICAgICAgIHZhciBvbGRPdGhlclZhbHVlID0gdGhpcy5wcmV2T3RoZXJWYWx1ZTtcbiAgICAgICAgICAgIHRoaXMucHJldk90aGVyVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLm90aGVyVmFsdWUgPSBvbGRPdGhlclZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNPdGhlclNlbCAmJiAhIXRoaXMub3RoZXJWYWx1ZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZ2V0U3RvcmVPdGhlcnNBc0NvbW1lbnQoKSAmJiAhdGhpcy5hdXRvT3RoZXJNb2RlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2T3RoZXJWYWx1ZSA9IHRoaXMub3RoZXJWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMub3RoZXJWYWx1ZSA9IFwiXCI7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFF1ZXN0aW9uU2VsZWN0QmFzZS5wcm90b3R5cGUuc2V0TmV3VmFsdWUgPSBmdW5jdGlvbiAobmV3VmFsdWUpIHtcbiAgICAgICAgbmV3VmFsdWUgPSB0aGlzLnZhbHVlRnJvbURhdGEobmV3VmFsdWUpO1xuICAgICAgICBpZiAoKCF0aGlzLmNob2ljZXNCeVVybC5pc1J1bm5pbmcgJiZcbiAgICAgICAgICAgICF0aGlzLmNob2ljZXNCeVVybC5pc1dhaXRpbmdGb3JQYXJhbWV0ZXJzKSB8fFxuICAgICAgICAgICAgIXRoaXMuaXNWYWx1ZUVtcHR5KG5ld1ZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy5jYWNoZWRWYWx1ZUZvclVybFJlcXVlc3RzID0gbmV3VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5zZXROZXdWYWx1ZS5jYWxsKHRoaXMsIG5ld1ZhbHVlKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uU2VsZWN0QmFzZS5wcm90b3R5cGUudmFsdWVGcm9tRGF0YSA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgdmFyIGNob2ljZWl0ZW0gPSBfaXRlbXZhbHVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJJdGVtVmFsdWVcIl0uZ2V0SXRlbUJ5VmFsdWUodGhpcy5hY3RpdmVDaG9pY2VzLCB2YWwpO1xuICAgICAgICBpZiAoISFjaG9pY2VpdGVtKSB7XG4gICAgICAgICAgICByZXR1cm4gY2hvaWNlaXRlbS52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS52YWx1ZUZyb21EYXRhLmNhbGwodGhpcywgdmFsKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uU2VsZWN0QmFzZS5wcm90b3R5cGUucmVuZHJlZFZhbHVlRnJvbURhdGEgPSBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgIGlmICh0aGlzLmdldFN0b3JlT3RoZXJzQXNDb21tZW50KCkpXG4gICAgICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJlZFZhbHVlRnJvbURhdGFDb3JlKHZhbCk7XG4gICAgfTtcbiAgICBRdWVzdGlvblNlbGVjdEJhc2UucHJvdG90eXBlLnJlbmRyZWRWYWx1ZVRvRGF0YSA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgaWYgKHRoaXMuZ2V0U3RvcmVPdGhlcnNBc0NvbW1lbnQoKSlcbiAgICAgICAgICAgIHJldHVybiB2YWw7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbmRyZWRWYWx1ZVRvRGF0YUNvcmUodmFsKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uU2VsZWN0QmFzZS5wcm90b3R5cGUucmVuZGVyZWRWYWx1ZUZyb21EYXRhQ29yZSA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgaWYgKCF0aGlzLmhhc1Vua25vd25WYWx1ZSh2YWwsIHRydWUsIGZhbHNlKSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlRnJvbURhdGEodmFsKTtcbiAgICAgICAgdGhpcy5vdGhlclZhbHVlID0gdmFsO1xuICAgICAgICByZXR1cm4gdGhpcy5vdGhlckl0ZW0udmFsdWU7XG4gICAgfTtcbiAgICBRdWVzdGlvblNlbGVjdEJhc2UucHJvdG90eXBlLnJlbmRyZWRWYWx1ZVRvRGF0YUNvcmUgPSBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgIGlmICh2YWwgPT0gdGhpcy5vdGhlckl0ZW0udmFsdWUgJiYgdGhpcy5uZWVkQ29udmVydFJlbmRlcmVkT3RoZXJUb0RhdGFWYWx1ZSgpKSB7XG4gICAgICAgICAgICB2YWwgPSB0aGlzLm90aGVyVmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9O1xuICAgIFF1ZXN0aW9uU2VsZWN0QmFzZS5wcm90b3R5cGUubmVlZENvbnZlcnRSZW5kZXJlZE90aGVyVG9EYXRhVmFsdWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB2YWwgPSB0aGlzLm90aGVyVmFsdWU7XG4gICAgICAgIGlmICghdmFsKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB2YWwgPSB2YWwudHJpbSgpO1xuICAgICAgICBpZiAoIXZhbClcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFzVW5rbm93blZhbHVlKHZhbCwgdHJ1ZSwgZmFsc2UpO1xuICAgIH07XG4gICAgUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZS5nZXRJc1F1ZXN0aW9uUmVhZHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLmdldElzUXVlc3Rpb25SZWFkeS5jYWxsKHRoaXMpICYmICF0aGlzLndhaXRpbmdDaG9pY2VzQnlVUkwgJiYgIXRoaXMud2FpdGluZ0dldENob2ljZURpc3BsYXlWYWx1ZVJlc3BvbnNlO1xuICAgIH07XG4gICAgUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZS51cGRhdGVTZWxlY3RlZEl0ZW1WYWx1ZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGlmICh0aGlzLndhaXRpbmdHZXRDaG9pY2VEaXNwbGF5VmFsdWVSZXNwb25zZSB8fCAhdGhpcy5zdXJ2ZXkgfHwgdGhpcy5pc0VtcHR5KCkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciB2YWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgICAgIHZhciB2YWx1ZUFycmF5ID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFt2YWx1ZV07XG4gICAgICAgIHZhciBoYXNJdGVtV2l0aG91dFZhbHVlcyA9IHZhbHVlQXJyYXkuc29tZShmdW5jdGlvbiAodmFsKSB7IHJldHVybiAhX2l0ZW12YWx1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiSXRlbVZhbHVlXCJdLmdldEl0ZW1CeVZhbHVlKF90aGlzLmNob2ljZXMsIHZhbCk7IH0pO1xuICAgICAgICBpZiAoaGFzSXRlbVdpdGhvdXRWYWx1ZXMgJiYgKHRoaXMuY2hvaWNlc0xhenlMb2FkRW5hYmxlZCB8fCAhdGhpcy5jaG9pY2VzQnlVcmwuaXNFbXB0eSkpIHtcbiAgICAgICAgICAgIHRoaXMud2FpdGluZ0dldENob2ljZURpc3BsYXlWYWx1ZVJlc3BvbnNlID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlSXNSZWFkeSgpO1xuICAgICAgICAgICAgdGhpcy5zdXJ2ZXkuZ2V0Q2hvaWNlRGlzcGxheVZhbHVlKHtcbiAgICAgICAgICAgICAgICBxdWVzdGlvbjogdGhpcyxcbiAgICAgICAgICAgICAgICB2YWx1ZXM6IHZhbHVlQXJyYXksXG4gICAgICAgICAgICAgICAgc2V0SXRlbXM6IGZ1bmN0aW9uIChkaXNwbGF5VmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjdXN0b21WYWx1ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAxOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbVZhbHVlc1tfaSAtIDFdID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBfdGhpcy53YWl0aW5nR2V0Q2hvaWNlRGlzcGxheVZhbHVlUmVzcG9uc2UgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFkaXNwbGF5VmFsdWVzIHx8ICFkaXNwbGF5VmFsdWVzLmxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW1zID0gZGlzcGxheVZhbHVlcy5tYXAoZnVuY3Rpb24gKGRpc3BsYXlWYWx1ZSwgaW5kZXgpIHsgcmV0dXJuIF90aGlzLmNyZWF0ZUl0ZW1WYWx1ZSh2YWx1ZUFycmF5W2luZGV4XSwgZGlzcGxheVZhbHVlKTsgfSk7XG4gICAgICAgICAgICAgICAgICAgIF90aGlzLnNldEN1c3RvbVZhbHVlc0ludG9JdGVtcyhpdGVtcywgY3VzdG9tVmFsdWVzKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5zZWxlY3RlZEl0ZW1WYWx1ZXMgPSBpdGVtcztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLnNlbGVjdGVkSXRlbVZhbHVlcyA9IGl0ZW1zWzBdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF90aGlzLnVwZGF0ZUlzUmVhZHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZS5zZXRDdXN0b21WYWx1ZXNJbnRvSXRlbXMgPSBmdW5jdGlvbiAoaXRlbXMsIGN1c3RvbVZhbHVlcykge1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY3VzdG9tVmFsdWVzKSB8fCBjdXN0b21WYWx1ZXMubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjdXN0b21WYWx1ZXMuZm9yRWFjaChmdW5jdGlvbiAoY3VzdG9tVmFsdWUpIHtcbiAgICAgICAgICAgIHZhciB2YWxzID0gY3VzdG9tVmFsdWUudmFsdWVzO1xuICAgICAgICAgICAgdmFyIHByb3BOYW1lID0gY3VzdG9tVmFsdWUucHJvcGVydHlOYW1lO1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFscykpIHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aCAmJiBpIDwgdmFscy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBpdGVtc1tpXVtwcm9wTmFtZV0gPSB2YWxzW2ldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBRdWVzdGlvblNlbGVjdEJhc2UucHJvdG90eXBlLmhhc1Vua25vd25WYWx1ZSA9IGZ1bmN0aW9uICh2YWwsIGluY2x1ZGVPdGhlciwgaXNGaWx0ZXJlZENob2ljZXMsIGNoZWNrRW1wdHlWYWx1ZSkge1xuICAgICAgICBpZiAoaW5jbHVkZU90aGVyID09PSB2b2lkIDApIHsgaW5jbHVkZU90aGVyID0gZmFsc2U7IH1cbiAgICAgICAgaWYgKGlzRmlsdGVyZWRDaG9pY2VzID09PSB2b2lkIDApIHsgaXNGaWx0ZXJlZENob2ljZXMgPSB0cnVlOyB9XG4gICAgICAgIGlmIChjaGVja0VtcHR5VmFsdWUgPT09IHZvaWQgMCkgeyBjaGVja0VtcHR5VmFsdWUgPSBmYWxzZTsgfVxuICAgICAgICBpZiAoIWNoZWNrRW1wdHlWYWx1ZSAmJiB0aGlzLmlzVmFsdWVFbXB0eSh2YWwpKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoaW5jbHVkZU90aGVyICYmIHZhbCA9PSB0aGlzLm90aGVySXRlbS52YWx1ZSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuaGFzTm9uZSAmJiB2YWwgPT0gdGhpcy5ub25lSXRlbS52YWx1ZSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgdmFyIGNob2ljZXMgPSBpc0ZpbHRlcmVkQ2hvaWNlc1xuICAgICAgICAgICAgPyB0aGlzLmdldEZpbHRlcmVkQ2hvaWNlcygpXG4gICAgICAgICAgICA6IHRoaXMuYWN0aXZlQ2hvaWNlcztcbiAgICAgICAgcmV0dXJuIF9pdGVtdmFsdWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcIkl0ZW1WYWx1ZVwiXS5nZXRJdGVtQnlWYWx1ZShjaG9pY2VzLCB2YWwpID09IG51bGw7XG4gICAgfTtcbiAgICBRdWVzdGlvblNlbGVjdEJhc2UucHJvdG90eXBlLmlzVmFsdWVEaXNhYmxlZCA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgdmFyIGl0ZW1WYWx1ZSA9IF9pdGVtdmFsdWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcIkl0ZW1WYWx1ZVwiXS5nZXRJdGVtQnlWYWx1ZSh0aGlzLmdldEZpbHRlcmVkQ2hvaWNlcygpLCB2YWwpO1xuICAgICAgICByZXR1cm4gISFpdGVtVmFsdWUgJiYgIWl0ZW1WYWx1ZS5pc0VuYWJsZWQ7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZSwgXCJjaG9pY2VzQnlVcmxcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogQ29uZmlndXJlcyBhY2Nlc3MgdG8gYSBSRVNUZnVsIHNlcnZpY2UgdGhhdCByZXR1cm5zIGNob2ljZSBpdGVtcy4gUmVmZXIgdG8gdGhlIFtDaG9pY2VzUmVzdGZ1bF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9jaG9pY2VzcmVzdGZ1bCkgY2xhc3MgZGVzY3JpcHRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIFtWaWV3IERlbW9dKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2V4YW1wbGVzL3F1ZXN0aW9udHlwZS1kcm9wZG93bnJlc3RmdWxsLyAobGlua1N0eWxlKSlcbiAgICAgICAgICogQHNlZSBjaG9pY2VzXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjaG9pY2VzQnlVcmxcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgaWYgKCF2YWwpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdGhpcy5zZXROZXdSZXN0ZnVsUHJvcGVydHkoKTtcbiAgICAgICAgICAgIHRoaXMuY2hvaWNlc0J5VXJsLmZyb21KU09OKHZhbC50b0pTT04oKSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZSwgXCJjaG9pY2VzXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldHMgb3Igc2V0cyBjaG9pY2UgaXRlbXMuIFRoaXMgcHJvcGVydHkgYWNjZXB0cyBhbiBhcnJheSBvZiBvYmplY3RzIHdpdGggdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmU6XG4gICAgICAgICAqXG4gICAgICAgICAqIGBgYGpzXG4gICAgICAgICAqIHtcbiAgICAgICAgICogICBcInZhbHVlXCI6IGFueSwgLy8gQSB1bmlxdWUgdmFsdWUgdG8gYmUgc2F2ZWQgaW4gdGhlIHN1cnZleSByZXN1bHRzLlxuICAgICAgICAgKiAgIFwidGV4dFwiOiBTdHJpbmcsIC8vIEEgZGlzcGxheSB0ZXh0LiBUaGlzIHByb3BlcnR5IHN1cHBvcnRzIE1hcmtkb3duLiBXaGVuIGB0ZXh0YCBpcyB1bmRlZmluZWQsIGB2YWx1ZWAgaXMgdXNlZC5cbiAgICAgICAgICogICBcImltYWdlTGlua1wiOiBTdHJpbmcgLy8gQSBsaW5rIHRvIHRoZSBpbWFnZSBvciB2aWRlbyB0aGF0IHJlcHJlc2VudHMgdGhpcyBjaG9pY2UgdmFsdWUuIEFwcGxpZXMgb25seSB0byBJbWFnZSBQaWNrZXIgcXVlc3Rpb25zLlxuICAgICAgICAgKiAgIFwiY3VzdG9tUHJvcGVydHlcIjogYW55IC8vIEFueSBwcm9wZXJ0eSB0aGF0IHlvdSBmaW5kIHVzZWZ1bC5cbiAgICAgICAgICogfVxuICAgICAgICAgKiBgYGBcbiAgICAgICAgICpcbiAgICAgICAgICogVG8gZW5hYmxlIE1hcmtkb3duIHN1cHBvcnQgZm9yIHRoZSBgdGV4dGAgcHJvcGVydHksIGltcGxlbWVudCBNYXJrZG93bi10by1IVE1MIGNvbnZlcnNpb24gaW4gdGhlIFtvblRleHRNYXJrZG93bl0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL3N1cnZleS1kYXRhLW1vZGVsI29uVGV4dE1hcmtkb3duKSBldmVudCBoYW5kbGVyLiBGb3IgYW4gZXhhbXBsZSwgcmVmZXIgdG8gdGhlIGZvbGxvd2luZyBkZW1vOiBbQ29udmVydCBNYXJrZG93biB0byBIVE1MIHdpdGggU2hvd2Rvd25dKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2V4YW1wbGVzL2VkaXQtc3VydmV5LXF1ZXN0aW9ucy1tYXJrZG93bi8pLlxuICAgICAgICAgKlxuICAgICAgICAgKiBJZiB5b3UgYWRkIGN1c3RvbSBwcm9wZXJ0aWVzLCByZWZlciB0byB0aGUgZm9sbG93aW5nIGhlbHAgdG9waWMgdG8gbGVhcm4gaG93IHRvIHNlcmlhbGl6ZSB0aGVtIGludG8gSlNPTjogW0FkZCBDdXN0b20gUHJvcGVydGllcyB0byBQcm9wZXJ0eSBHcmlkXShodHRwczovL3N1cnZleWpzLmlvL3N1cnZleS1jcmVhdG9yL2RvY3VtZW50YXRpb24vcHJvcGVydHktZ3JpZCNhZGQtY3VzdG9tLXByb3BlcnRpZXMtdG8tdGhlLXByb3BlcnR5LWdyaWQpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBJZiB5b3UgbmVlZCB0byBzcGVjaWZ5IG9ubHkgdGhlIGB2YWx1ZWAgcHJvcGVydHksIHlvdSBjYW4gc2V0IHRoZSBgY2hvaWNlc2AgcHJvcGVydHkgdG8gYW4gYXJyYXkgb2YgcHJpbWl0aXZlIHZhbHVlcywgZm9yIGV4YW1wbGUsIGBbIFwiaXRlbTFcIiwgXCJpdGVtMlwiLCBcIml0ZW0zXCIgXWAuIFRoZXNlIHZhbHVlcyBhcmUgYm90aCBzYXZlZCBpbiBzdXJ2ZXkgcmVzdWx0cyBhbmQgdXNlZCBhcyBkaXNwbGF5IHRleHQuXG4gICAgICAgICAqIEBzZWUgY2hvaWNlc0J5VXJsXG4gICAgICAgICAqIEBzZWUgY2hvaWNlc0Zyb21RdWVzdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY2hvaWNlc1wiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAobmV3VmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNob2ljZXNcIiwgbmV3VmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uU2VsZWN0QmFzZS5wcm90b3R5cGUsIFwiY2hvaWNlc0Zyb21RdWVzdGlvblwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDb3BpZXMgY2hvaWNlIGl0ZW1zIGZyb20gYSBzcGVjaWZpZWQgcXVlc3Rpb24uIEFjY2VwdHMgYSBxdWVzdGlvbiBuYW1lLlxuICAgICAgICAgKlxuICAgICAgICAgKiBJZiB5b3Ugc3BlY2lmeSB0aGlzIHByb3BlcnR5LCB0aGUgYGNob2ljZXNgLCBgY2hvaWNlc1Zpc2libGVJZmAsIGBjaG9pY2VzRW5hYmxlSWZgLCBhbmQgYGNob2ljZXNPcmRlcmAgcHJvcGVydGllcyBkbyBub3QgYXBwbHkgYmVjYXVzZSB0aGVpciB2YWx1ZXMgYXJlIGNvcGllZC5cbiAgICAgICAgICpcbiAgICAgICAgICogSW4gYWRkaXRpb24sIHlvdSBjYW4gc3BlY2lmeSB0aGUgYGNob2ljZXNGcm9tUXVlc3Rpb25Nb2RlYCBwcm9wZXJ0eSBpZiB5b3UgZG8gbm90IHdhbnQgdG8gY29weSBhbGwgY2hvaWNlIGl0ZW1zLlxuICAgICAgICAgKiBAc2VlIGNob2ljZXNGcm9tUXVlc3Rpb25Nb2RlXG4gICAgICAgICAqIEBzZWUgY2hvaWNlc1xuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY2hvaWNlc0Zyb21RdWVzdGlvblwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB2YXIgcXVlc3Rpb24gPSB0aGlzLmdldFF1ZXN0aW9uV2l0aENob2ljZXMoKTtcbiAgICAgICAgICAgIHRoaXMuaXNMb2NrVmlzaWJsZUNob2ljZXMgPSAhIXF1ZXN0aW9uICYmIHF1ZXN0aW9uLm5hbWUgPT09IHZhbDtcbiAgICAgICAgICAgIGlmICghIXF1ZXN0aW9uICYmIHF1ZXN0aW9uLm5hbWUgIT09IHZhbCkge1xuICAgICAgICAgICAgICAgIHF1ZXN0aW9uLnJlbW92ZURlcGVuZGVkUXVlc3Rpb24odGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjaG9pY2VzRnJvbVF1ZXN0aW9uXCIsIHZhbCk7XG4gICAgICAgICAgICB0aGlzLmlzTG9ja1Zpc2libGVDaG9pY2VzID0gZmFsc2U7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZSwgXCJjaG9pY2VzRnJvbVF1ZXN0aW9uTW9kZVwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgd2hpY2ggY2hvaWNlIGl0ZW1zIHRvIGNvcHkgZnJvbSBhbm90aGVyIHF1ZXN0aW9uLiBBcHBsaWVzIG9ubHkgd2hlbiB0aGUgYGNob2ljZXNGcm9tUXVlc3Rpb25gIHByb3BlcnR5IGlzIHNwZWNpZmllZC5cbiAgICAgICAgICpcbiAgICAgICAgICogUG9zc2libGUgdmFsdWVzOlxuICAgICAgICAgKlxuICAgICAgICAgKiAtIGBcImFsbFwiYCAoZGVmYXVsdCkgLSBDb3BpZXMgYWxsIGNob2ljZSBpdGVtcy5cbiAgICAgICAgICogLSBgXCJzZWxlY3RlZFwiYCAtIENvcGllcyBvbmx5IHNlbGVjdGVkIGNob2ljZSBpdGVtcy5cbiAgICAgICAgICogLSBgXCJ1bnNlbGVjdGVkXCJgIC0gQ29waWVzIG9ubHkgdW5zZWxlY3RlZCBjaG9pY2UgaXRlbXMuXG4gICAgICAgICAqXG4gICAgICAgICAqIFVzZSB0aGUgYHZpc2libGVDaG9pY2VzYCBwcm9wZXJ0eSB0byBhY2Nlc3MgY29waWVkIGNob2ljZSBpdGVtcy5cbiAgICAgICAgICogQHNlZSBjaG9pY2VzRnJvbVF1ZXN0aW9uXG4gICAgICAgICAqIEBzZWUgdmlzaWJsZUNob2ljZXNcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNob2ljZXNGcm9tUXVlc3Rpb25Nb2RlXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNob2ljZXNGcm9tUXVlc3Rpb25Nb2RlXCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZSwgXCJjaG9pY2VWYWx1ZXNGcm9tUXVlc3Rpb25cIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHdoaWNoIG1hdHJpeCBjb2x1bW4gb3IgZHluYW1pYyBwYW5lbCBxdWVzdGlvbiBzdXBwbGllcyBjaG9pY2UgdmFsdWVzLiBVc2UgdGhpcyBwcm9wZXJ0eSB0byBjb25zdHJ1Y3QgY2hvaWNlIGl0ZW1zIGJhc2VkIG9uIGNlbGwgdmFsdWVzIGluIER5bmFtaWMgTWF0cml4IGFuZCBxdWVzdGlvbiB2YWx1ZXMgaW4gRHluYW1pYyBQYW5lbC5cbiAgICAgICAgICpcbiAgICAgICAgICogRWFjaCBjaG9pY2UgaXRlbSBjb25zaXN0cyBvZiBhIHZhbHVlIHNhdmVkIGluIHN1cnZleSByZXN1bHRzIGFuZCBhIHRleHQgZGlzcGxheWVkIGluIHRoZSBVSS4gVG8gY29uc3RydWN0IGEgY2hvaWNlIGl0ZW0sIGFzc2lnbiB0aGUgYG5hbWVgIG9mIGEgRHluYW1pYyBNYXRyaXggb3IgRHluYW1pYyBQYW5lbCB0byB0aGUgW2BjaG9pY2VzRnJvbVF1ZXN0aW9uYF0oI2Nob2ljZXNGcm9tUXVlc3Rpb24pIHByb3BlcnR5IGFuZCBzcGVjaWZ5IHdoaWNoIGR5bmFtaWMgcGFuZWwgcXVlc3Rpb24gb3IgbWF0cml4IGNvbHVtbiBzdXBwbGllcyB2YWx1ZXMgYW5kIHdoaWNoIHByb3ZpZGVzIHRleHRzLiBVc2UgdGhlIGBjaG9pY2VWYWx1ZXNGcm9tUXVlc3Rpb25gIGFuZCBbYGNob2ljZVRleHRzRnJvbVF1ZXN0aW9uYF0oI2Nob2ljZVRleHRzRnJvbVF1ZXN0aW9uKSBwcm9wZXJ0aWVzIGZvciB0aGlzIHB1cnBvc2UuIElmIGEgY2hvaWNlIHRleHQgaXMgZW1wdHksIGEgY2hvaWNlIHZhbHVlIGlzIHVzZWQgYXMgYSBkaXNwbGF5IHRleHQgYW5kIHNhdmVkIGluIHN1cnZleSByZXN1bHRzLlxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY2hvaWNlVmFsdWVzRnJvbVF1ZXN0aW9uXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNob2ljZVZhbHVlc0Zyb21RdWVzdGlvblwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uU2VsZWN0QmFzZS5wcm90b3R5cGUsIFwiY2hvaWNlVGV4dHNGcm9tUXVlc3Rpb25cIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHdoaWNoIG1hdHJpeCBjb2x1bW4gb3IgZHluYW1pYyBwYW5lbCBxdWVzdGlvbiBzdXBwbGllcyBjaG9pY2UgdGV4dHMuIFVzZSB0aGlzIHByb3BlcnR5IHRvIGNvbnN0cnVjdCBjaG9pY2UgaXRlbXMgYmFzZWQgb24gY2VsbCB2YWx1ZXMgaW4gRHluYW1pYyBNYXRyaXggYW5kIHF1ZXN0aW9uIHZhbHVlcyBpbiBEeW5hbWljIFBhbmVsLlxuICAgICAgICAgKlxuICAgICAgICAgKiBFYWNoIGNob2ljZSBpdGVtIGNvbnNpc3RzIG9mIGEgdmFsdWUgc2F2ZWQgaW4gc3VydmV5IHJlc3VsdHMgYW5kIGEgdGV4dCBkaXNwbGF5ZWQgaW4gdGhlIFVJLiBUbyBjb25zdHJ1Y3QgYSBjaG9pY2UgaXRlbSwgYXNzaWduIHRoZSBgbmFtZWAgb2YgYSBEeW5hbWljIE1hdHJpeCBvciBEeW5hbWljIFBhbmVsIHRvIHRoZSBbYGNob2ljZXNGcm9tUXVlc3Rpb25gXSgjY2hvaWNlc0Zyb21RdWVzdGlvbikgcHJvcGVydHkgYW5kIHNwZWNpZnkgd2hpY2ggZHluYW1pYyBwYW5lbCBxdWVzdGlvbiBvciBtYXRyaXggY29sdW1uIHN1cHBsaWVzIHZhbHVlcyBhbmQgd2hpY2ggcHJvdmlkZXMgdGV4dHMuIFVzZSB0aGUgW2BjaG9pY2VWYWx1ZXNGcm9tUXVlc3Rpb25gXSgjY2hvaWNlVmFsdWVzRnJvbVF1ZXN0aW9uKSBhbmQgYGNob2ljZVRleHRzRnJvbVF1ZXN0aW9uYCBwcm9wZXJ0aWVzIGZvciB0aGlzIHB1cnBvc2UuIElmIGEgY2hvaWNlIHRleHQgaXMgZW1wdHksIGEgY2hvaWNlIHZhbHVlIGlzIHVzZWQgYXMgYSBkaXNwbGF5IHRleHQgYW5kIHNhdmVkIGluIHN1cnZleSByZXN1bHRzLlxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY2hvaWNlVGV4dHNGcm9tUXVlc3Rpb25cIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY2hvaWNlVGV4dHNGcm9tUXVlc3Rpb25cIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblNlbGVjdEJhc2UucHJvdG90eXBlLCBcImhpZGVJZkNob2ljZXNFbXB0eVwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgd2hldGhlciB0byBoaWRlIHRoZSBxdWVzdGlvbiBpZiBubyBjaG9pY2UgaXRlbXMgYXJlIHZpc2libGUuXG4gICAgICAgICAqXG4gICAgICAgICAqIFRoaXMgcHJvcGVydHkgaXMgdXNlZnVsIGlmIHlvdSBzaG93IG9yIGhpZGUgY2hvaWNlIGl0ZW1zIGF0IHJ1bnRpbWUgYmFzZWQgb24gYSBbY29uZGl0aW9uXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL3F1ZXN0aW9uc2VsZWN0YmFzZSNjaG9pY2VzVmlzaWJsZUlmKS5cbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImhpZGVJZkNob2ljZXNFbXB0eVwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJoaWRlSWZDaG9pY2VzRW1wdHlcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblNlbGVjdEJhc2UucHJvdG90eXBlLCBcImtlZXBJbmNvcnJlY3RWYWx1ZXNcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHdoZXRoZXIgdG8ga2VlcCB2YWx1ZXMgdGhhdCBjYW5ub3QgYmUgYXNzaWduZWQgdG8gdGhpcyBxdWVzdGlvbiwgZm9yIGV4YW1wbGUsIGNob2ljZXMgdW5saXN0ZWQgaW4gdGhlIGBjaG9pY2VzYCBhcnJheS5cbiAgICAgICAgICpcbiAgICAgICAgICogPiBUaGlzIHByb3BlcnR5IGNhbm5vdCBiZSBzcGVjaWZpZWQgaW4gdGhlIHN1cnZleSBKU09OIHNjaGVtYS4gVXNlIGRvdCBub3RhdGlvbiB0byBzcGVjaWZ5IGl0LlxuICAgICAgICAgKiBAc2VlIGNsZWFySW5jb3JyZWN0VmFsdWVzXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJrZWVwSW5jb3JyZWN0VmFsdWVzXCIsIGZhbHNlKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJrZWVwSW5jb3JyZWN0VmFsdWVzXCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZSwgXCJzdG9yZU90aGVyc0FzQ29tbWVudFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInN0b3JlT3RoZXJzQXNDb21tZW50XCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInN0b3JlT3RoZXJzQXNDb21tZW50XCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBRdWVzdGlvblNlbGVjdEJhc2UucHJvdG90eXBlLmhhc090aGVyQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5vblZpc2libGVDaG9pY2VzQ2hhbmdlZCgpO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uU2VsZWN0QmFzZS5wcm90b3R5cGUsIFwiY2hvaWNlc09yZGVyXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB0aGUgc29ydCBvcmRlciBvZiBjaG9pY2UgaXRlbXMuXG4gICAgICAgICAqXG4gICAgICAgICAqIFBvc3NpYmxlIHZhbHVlczpcbiAgICAgICAgICpcbiAgICAgICAgICogLSBgXCJub25lXCJgIChkZWZhdWx0KSAtIFByZXNlcnZlcyB0aGUgb3JpZ2luYWwgb3JkZXIgb2YgY2hvaWNlIGl0ZW1zLlxuICAgICAgICAgKiAtIGBcImFzY1wiYC0gU29ydHMgY2hvaWNlIGl0ZW1zIGluIGFzY2VuZGluZyBvcmRlci5cbiAgICAgICAgICogLSBgXCJkZXNjXCJgLSBTb3J0cyBjaG9pY2UgaXRlbXMgaW4gYXNjZW5kaW5nIG9yZGVyLlxuICAgICAgICAgKiAtIGBcInJhbmRvbVwiYCAtIERpc3BsYXlzIGNob2ljZSBpdGVtcyBpbiByYW5kb20gb3JkZXIuXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjaG9pY2VzT3JkZXJcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdmFsID0gdmFsLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICBpZiAodmFsID09IHRoaXMuY2hvaWNlc09yZGVyKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNob2ljZXNPcmRlclwiLCB2YWwpO1xuICAgICAgICAgICAgdGhpcy5vblZpc2libGVDaG9pY2VzQ2hhbmdlZCgpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uU2VsZWN0QmFzZS5wcm90b3R5cGUsIFwib3RoZXJUZXh0XCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldHMgb3Igc2V0cyBhIGNhcHRpb24gZm9yIHRoZSBcIk90aGVyXCIgY2hvaWNlIGl0ZW0uXG4gICAgICAgICAqIEBzZWUgc2hvd090aGVySXRlbVxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJvdGhlclRleHRcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJvdGhlclRleHRcIiwgdmFsKTtcbiAgICAgICAgICAgIHRoaXMub25WaXNpYmxlQ2hvaWNlc0NoYW5nZWQoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblNlbGVjdEJhc2UucHJvdG90eXBlLCBcImxvY090aGVyVGV4dFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJvdGhlclRleHRcIik7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZSwgXCJvdGhlclBsYWNlSG9sZGVyXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5vdGhlclBsYWNlaG9sZGVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChuZXdWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5vdGhlclBsYWNlaG9sZGVyID0gbmV3VmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZSwgXCJvdGhlckVycm9yVGV4dFwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXQgb3Igc2V0cyBhbiBlcnJvciBtZXNzYWdlIGRpc3BsYXllZCB3aGVuIHVzZXJzIHNlbGVjdCB0aGUgXCJPdGhlclwiIGNob2ljZSBpdGVtIGJ1dCBsZWF2ZSB0aGUgY29tbWVudCBhcmVhIGVtcHR5LlxuICAgICAgICAgKiBAc2VlIHNob3dPdGhlckl0ZW1cbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwib3RoZXJFcnJvclRleHRcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJvdGhlckVycm9yVGV4dFwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uU2VsZWN0QmFzZS5wcm90b3R5cGUsIFwibG9jT3RoZXJFcnJvclRleHRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwib3RoZXJFcnJvclRleHRcIik7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZSwgXCJ2aXNpYmxlQ2hvaWNlc1wiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBbiBhcnJheSBvZiB2aXNpYmxlIGNob2ljZSBpdGVtcy4gSW5jbHVkZXMgdGhlIFwiU2VsZWN0IEFsbFwiLCBcIk90aGVyXCIsIGFuZCBcIk5vbmVcIiBjaG9pY2UgaXRlbXMgaWYgdGhleSBhcmUgdmlzaWJsZS4gSXRlbXMgYXJlIHNvcnRlZCBhY2NvcmRpbmcgdG8gdGhlIGBjaG9pY2VzT3JkZXJgIHZhbHVlLlxuICAgICAgICAgKiBAc2VlIHNob3dOb25lSXRlbVxuICAgICAgICAgKiBAc2VlIHNob3dPdGhlckl0ZW1cbiAgICAgICAgICogQHNlZSBjaG9pY2VzT3JkZXJcbiAgICAgICAgICogQHNlZSBjaG9pY2VzXG4gICAgICAgICAqIEBzZWUgZW5hYmxlZENob2ljZXNcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInZpc2libGVDaG9pY2VzXCIpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uU2VsZWN0QmFzZS5wcm90b3R5cGUsIFwiZW5hYmxlZENob2ljZXNcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogQW4gYXJyYXkgb2YgY2hvaWNlIGl0ZW1zIHdpdGggd2hpY2ggdXNlcnMgY2FuIGludGVyYWN0LiBJbmNsdWRlcyB0aGUgXCJTZWxlY3QgQWxsXCIsIFwiT3RoZXJcIiwgYW5kIFwiTm9uZVwiIGNob2ljZSBpdGVtcyBpZiB0aGV5IGFyZSBub3QgZGlzYWJsZWQuIEl0ZW1zIGFyZSBzb3J0ZWQgYWNjb3JkaW5nIHRvIHRoZSBgY2hvaWNlc09yZGVyYCB2YWx1ZS5cbiAgICAgICAgICogQHNlZSBzaG93Tm9uZUl0ZW1cbiAgICAgICAgICogQHNlZSBzaG93T3RoZXJJdGVtXG4gICAgICAgICAqIEBzZWUgY2hvaWNlc09yZGVyXG4gICAgICAgICAqIEBzZWUgY2hvaWNlc1xuICAgICAgICAgKiBAc2VlIHZpc2libGVDaG9pY2VzXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciByZXMgPSBbXTtcbiAgICAgICAgICAgIHZhciBpdGVtcyA9IHRoaXMudmlzaWJsZUNob2ljZXM7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW1zW2ldLmlzRW5hYmxlZClcbiAgICAgICAgICAgICAgICAgICAgcmVzLnB1c2goaXRlbXNbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFF1ZXN0aW9uU2VsZWN0QmFzZS5wcm90b3R5cGUudXBkYXRlVmlzaWJsZUNob2ljZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzTG9hZGluZ0Zyb21Kc29uKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIgbmV3VmFsdWUgPSBuZXcgQXJyYXkoKTtcbiAgICAgICAgdmFyIGNhbGNWYWx1ZSA9IHRoaXMuY2FsY1Zpc2libGVDaG9pY2VzKCk7XG4gICAgICAgIGlmICghY2FsY1ZhbHVlKVxuICAgICAgICAgICAgY2FsY1ZhbHVlID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2FsY1ZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBuZXdWYWx1ZS5wdXNoKGNhbGNWYWx1ZVtpXSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidmlzaWJsZUNob2ljZXNcIiwgbmV3VmFsdWUpO1xuICAgIH07XG4gICAgUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZS5jYWxjVmlzaWJsZUNob2ljZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmNhblVzZUZpbHRlcmVkQ2hvaWNlcygpKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RmlsdGVyZWRDaG9pY2VzKCk7XG4gICAgICAgIHZhciByZXMgPSB0aGlzLnNvcnRWaXNpYmxlQ2hvaWNlcyh0aGlzLmdldEZpbHRlcmVkQ2hvaWNlcygpLnNsaWNlKCkpO1xuICAgICAgICB0aGlzLmFkZFRvVmlzaWJsZUNob2ljZXMocmVzLCB0aGlzLmlzQWRkRGVmYXVsdEl0ZW1zKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9O1xuICAgIFF1ZXN0aW9uU2VsZWN0QmFzZS5wcm90b3R5cGUuY2FuVXNlRmlsdGVyZWRDaG9pY2VzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKCF0aGlzLmlzQWRkRGVmYXVsdEl0ZW1zICYmXG4gICAgICAgICAgICAhdGhpcy5oYXNOb25lICYmXG4gICAgICAgICAgICAhdGhpcy5oYXNPdGhlciAmJlxuICAgICAgICAgICAgdGhpcy5jaG9pY2VzT3JkZXIgPT0gXCJub25lXCIpO1xuICAgIH07XG4gICAgUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZS5zZXRDYW5TaG93T3B0aW9uSXRlbUNhbGxiYWNrID0gZnVuY3Rpb24gKGZ1bmMpIHtcbiAgICAgICAgdGhpcy5jYW5TaG93T3B0aW9uSXRlbUNhbGxiYWNrID0gZnVuYztcbiAgICAgICAgaWYgKCEhZnVuYykge1xuICAgICAgICAgICAgdGhpcy5vblZpc2libGVDaG9pY2VzQ2hhbmdlZCgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZSwgXCJuZXdJdGVtXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLm5ld0l0ZW1WYWx1ZTsgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFF1ZXN0aW9uU2VsZWN0QmFzZS5wcm90b3R5cGUuYWRkVG9WaXNpYmxlQ2hvaWNlcyA9IGZ1bmN0aW9uIChpdGVtcywgaXNBZGRBbGwpIHtcbiAgICAgICAgaWYgKGlzQWRkQWxsKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMubmV3SXRlbVZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5uZXdJdGVtVmFsdWUgPSB0aGlzLmNyZWF0ZUl0ZW1WYWx1ZShcIm5ld2l0ZW1cIik7IC8vVE9ET1xuICAgICAgICAgICAgICAgIHRoaXMubmV3SXRlbVZhbHVlLmlzR2hvc3QgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLmlzVXNpbmdDYXJyeUZvcndhcmQgJiYgdGhpcy5jYW5TaG93T3B0aW9uSXRlbSh0aGlzLm5ld0l0ZW1WYWx1ZSwgaXNBZGRBbGwsIGZhbHNlKSkge1xuICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2godGhpcy5uZXdJdGVtVmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnN1cHBvcnROb25lKCkgJiYgdGhpcy5jYW5TaG93T3B0aW9uSXRlbSh0aGlzLm5vbmVJdGVtLCBpc0FkZEFsbCwgdGhpcy5oYXNOb25lKSkge1xuICAgICAgICAgICAgaXRlbXMucHVzaCh0aGlzLm5vbmVJdGVtKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zdXBwb3J0T3RoZXIoKSAmJiB0aGlzLmNhblNob3dPcHRpb25JdGVtKHRoaXMub3RoZXJJdGVtLCBpc0FkZEFsbCwgdGhpcy5oYXNPdGhlcikpIHtcbiAgICAgICAgICAgIGl0ZW1zLnB1c2godGhpcy5vdGhlckl0ZW0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBRdWVzdGlvblNlbGVjdEJhc2UucHJvdG90eXBlLmNhblNob3dPcHRpb25JdGVtID0gZnVuY3Rpb24gKGl0ZW0sIGlzQWRkQWxsLCBoYXNJdGVtKSB7XG4gICAgICAgIHZhciByZXMgPSAoaXNBZGRBbGwgJiYgKCEhdGhpcy5jYW5TaG93T3B0aW9uSXRlbUNhbGxiYWNrID8gdGhpcy5jYW5TaG93T3B0aW9uSXRlbUNhbGxiYWNrKGl0ZW0pIDogdHJ1ZSkpIHx8IGhhc0l0ZW07XG4gICAgICAgIGlmICh0aGlzLmNhblN1cnZleUNoYW5nZUl0ZW1WaXNpYmlsaXR5KCkpIHtcbiAgICAgICAgICAgIHZhciBjYWxjID0gdGhpcy5jaGFuZ2VJdGVtVmlzaXNiaWxpdHkoKTtcbiAgICAgICAgICAgIHJldHVybiBjYWxjKGl0ZW0sIHJlcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9O1xuICAgIFF1ZXN0aW9uU2VsZWN0QmFzZS5wcm90b3R5cGUuaXNJdGVtSW5MaXN0ID0gZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgaWYgKGl0ZW0gPT09IHRoaXMub3RoZXJJdGVtKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGFzT3RoZXI7XG4gICAgICAgIGlmIChpdGVtID09PSB0aGlzLm5vbmVJdGVtKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGFzTm9uZTtcbiAgICAgICAgaWYgKGl0ZW0gPT09IHRoaXMubmV3SXRlbVZhbHVlKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblNlbGVjdEJhc2UucHJvdG90eXBlLCBcImlzQWRkRGVmYXVsdEl0ZW1zXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gX3NldHRpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bXCJzZXR0aW5nc1wiXS5zdXBwb3J0Q3JlYXRvclYyICYmIF9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fW1wic2V0dGluZ3NcIl0uc2hvd0RlZmF1bHRJdGVtc0luQ3JlYXRvclYyICYmXG4gICAgICAgICAgICAgICAgdGhpcy5pc0Rlc2lnbk1vZGUgJiYgIXRoaXMuY3VzdG9tV2lkZ2V0ICYmICF0aGlzLmlzQ29udGVudEVsZW1lbnQ7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBRdWVzdGlvblNlbGVjdEJhc2UucHJvdG90eXBlLmdldFBsYWluRGF0YSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGluY2x1ZGVFbXB0eTogdHJ1ZSxcbiAgICAgICAgICAgIGluY2x1ZGVRdWVzdGlvblR5cGVzOiBmYWxzZSxcbiAgICAgICAgfTsgfVxuICAgICAgICB2YXIgcXVlc3Rpb25QbGFpbkRhdGEgPSBfc3VwZXIucHJvdG90eXBlLmdldFBsYWluRGF0YS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuICAgICAgICBpZiAoISFxdWVzdGlvblBsYWluRGF0YSkge1xuICAgICAgICAgICAgdmFyIHZhbHVlcyA9IEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkgPyB0aGlzLnZhbHVlIDogW3RoaXMudmFsdWVdO1xuICAgICAgICAgICAgcXVlc3Rpb25QbGFpbkRhdGEuaXNOb2RlID0gdHJ1ZTtcbiAgICAgICAgICAgIHF1ZXN0aW9uUGxhaW5EYXRhLmRhdGEgPSAocXVlc3Rpb25QbGFpbkRhdGEuZGF0YSB8fCBbXSkuY29uY2F0KHZhbHVlcy5tYXAoZnVuY3Rpb24gKGRhdGFWYWx1ZSwgaW5kZXgpIHtcbiAgICAgICAgICAgICAgICB2YXIgY2hvaWNlID0gX2l0ZW12YWx1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiSXRlbVZhbHVlXCJdLmdldEl0ZW1CeVZhbHVlKF90aGlzLnZpc2libGVDaG9pY2VzLCBkYXRhVmFsdWUpO1xuICAgICAgICAgICAgICAgIHZhciBjaG9pY2VEYXRhSXRlbSA9IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogaW5kZXgsXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcIkNob2ljZVwiLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZGF0YVZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5VmFsdWU6IF90aGlzLmdldENob2ljZXNEaXNwbGF5VmFsdWUoX3RoaXMudmlzaWJsZUNob2ljZXMsIGRhdGFWYWx1ZSksXG4gICAgICAgICAgICAgICAgICAgIGdldFN0cmluZzogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWwgPT09IFwib2JqZWN0XCIgPyBKU09OLnN0cmluZ2lmeSh2YWwpIDogdmFsO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBpc05vZGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgaWYgKCEhY2hvaWNlKSB7XG4gICAgICAgICAgICAgICAgICAgIChvcHRpb25zLmNhbGN1bGF0aW9ucyB8fCBbXSkuZm9yRWFjaChmdW5jdGlvbiAoY2FsY3VsYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNob2ljZURhdGFJdGVtW2NhbGN1bGF0aW9uLnByb3BlcnR5TmFtZV0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNob2ljZVtjYWxjdWxhdGlvbi5wcm9wZXJ0eU5hbWVdO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKF90aGlzLmlzT3RoZXJTZWxlY3RlZCAmJiBfdGhpcy5vdGhlckl0ZW1WYWx1ZSA9PT0gY2hvaWNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNob2ljZURhdGFJdGVtLmlzT3RoZXIgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBjaG9pY2VEYXRhSXRlbS5kaXNwbGF5VmFsdWUgPSBfdGhpcy5vdGhlclZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gY2hvaWNlRGF0YUl0ZW07XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHF1ZXN0aW9uUGxhaW5EYXRhO1xuICAgIH07XG4gICAgUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZS5nZXREaXNwbGF5VmFsdWVDb3JlID0gZnVuY3Rpb24gKGtleXNBc1RleHQsIHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldENob2ljZXNEaXNwbGF5VmFsdWUodGhpcy52aXNpYmxlQ2hvaWNlcywgdmFsdWUpO1xuICAgIH07XG4gICAgUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZS5nZXREaXNwbGF5VmFsdWVFbXB0eSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIF9pdGVtdmFsdWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcIkl0ZW1WYWx1ZVwiXS5nZXRUZXh0T3JIdG1sQnlWYWx1ZSh0aGlzLnZpc2libGVDaG9pY2VzLCB1bmRlZmluZWQpO1xuICAgIH07XG4gICAgUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZS5nZXRDaG9pY2VzRGlzcGxheVZhbHVlID0gZnVuY3Rpb24gKGl0ZW1zLCB2YWwpIHtcbiAgICAgICAgaWYgKHZhbCA9PSB0aGlzLm90aGVySXRlbVZhbHVlLnZhbHVlKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMub3RoZXJWYWx1ZSA/IHRoaXMub3RoZXJWYWx1ZSA6IHRoaXMubG9jT3RoZXJUZXh0LnRleHRPckh0bWw7XG4gICAgICAgIHZhciBzZWxJdGVtID0gdGhpcy5nZXRTaW5nbGVTZWxlY3RlZEl0ZW0oKTtcbiAgICAgICAgaWYgKCEhc2VsSXRlbSAmJiB0aGlzLmlzVHdvVmFsdWVFcXVhbHMoc2VsSXRlbS52YWx1ZSwgdmFsKSlcbiAgICAgICAgICAgIHJldHVybiBzZWxJdGVtLmxvY1RleHQudGV4dE9ySHRtbDtcbiAgICAgICAgdmFyIHN0ciA9IF9pdGVtdmFsdWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcIkl0ZW1WYWx1ZVwiXS5nZXRUZXh0T3JIdG1sQnlWYWx1ZShpdGVtcywgdmFsKTtcbiAgICAgICAgcmV0dXJuIHN0ciA9PSBcIlwiICYmIHZhbCA/IHZhbCA6IHN0cjtcbiAgICB9O1xuICAgIFF1ZXN0aW9uU2VsZWN0QmFzZS5wcm90b3R5cGUuZ2V0RGlzcGxheUFycmF5VmFsdWUgPSBmdW5jdGlvbiAoa2V5c0FzVGV4dCwgdmFsdWUsIG9uR2V0VmFsdWVDYWxsYmFjaykge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgaXRlbXMgPSB0aGlzLnZpc2libGVDaG9pY2VzO1xuICAgICAgICB2YXIgc3RycyA9IFtdO1xuICAgICAgICB2YXIgdmFscyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YWxzLnB1c2goIW9uR2V0VmFsdWVDYWxsYmFjayA/IHZhbHVlW2ldIDogb25HZXRWYWx1ZUNhbGxiYWNrKGkpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoX2hlbHBlcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1tcIkhlbHBlcnNcIl0uaXNUd29WYWx1ZUVxdWFscyh0aGlzLnZhbHVlLCB2YWxzKSkge1xuICAgICAgICAgICAgdGhpcy5nZXRNdWx0aXBsZVNlbGVjdGVkSXRlbXMoKS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7IHJldHVybiBzdHJzLnB1c2goX3RoaXMuZ2V0SXRlbURpc3BsYXlWYWx1ZShpdGVtKSk7IH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdHJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIHZhbFN0ciA9IHRoaXMuZ2V0Q2hvaWNlc0Rpc3BsYXlWYWx1ZShpdGVtcywgdmFsc1tpXSk7XG4gICAgICAgICAgICAgICAgaWYgKHZhbFN0cikge1xuICAgICAgICAgICAgICAgICAgICBzdHJzLnB1c2godmFsU3RyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0cnMuam9pbihcIiwgXCIpO1xuICAgIH07XG4gICAgUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZS5nZXRJdGVtRGlzcGxheVZhbHVlID0gZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgaWYgKGl0ZW0gPT09IHRoaXMub3RoZXJJdGVtICYmIHRoaXMuY29tbWVudClcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbW1lbnQ7XG4gICAgICAgIHJldHVybiBpdGVtLmxvY1RleHQudGV4dE9ySHRtbDtcbiAgICB9O1xuICAgIFF1ZXN0aW9uU2VsZWN0QmFzZS5wcm90b3R5cGUuZ2V0RmlsdGVyZWRDaG9pY2VzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXJlZENob2ljZXNWYWx1ZVxuICAgICAgICAgICAgPyB0aGlzLmZpbHRlcmVkQ2hvaWNlc1ZhbHVlXG4gICAgICAgICAgICA6IHRoaXMuYWN0aXZlQ2hvaWNlcztcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblNlbGVjdEJhc2UucHJvdG90eXBlLCBcImFjdGl2ZUNob2ljZXNcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBxdWVzdGlvbiA9IHRoaXMuZ2V0Q2FycnlGb3J3YXJkUXVlc3Rpb24oKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmNhcnJ5Rm9yd2FyZFF1ZXN0aW9uVHlwZSA9PT0gXCJzZWxlY3RcIikge1xuICAgICAgICAgICAgICAgIHF1ZXN0aW9uLmFkZERlcGVuZGVkUXVlc3Rpb24odGhpcyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2hvaWNlc0Zyb21TZWxlY3RRdWVzdGlvbihxdWVzdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5jYXJyeUZvcndhcmRRdWVzdGlvblR5cGUgPT09IFwiYXJyYXlcIikge1xuICAgICAgICAgICAgICAgIHF1ZXN0aW9uLmFkZERlcGVuZGVkUXVlc3Rpb24odGhpcyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2hvaWNlc0Zyb21BcnJheVF1ZXN0aW9uKHF1ZXN0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNob2ljZXNGcm9tVXJsID8gdGhpcy5jaG9pY2VzRnJvbVVybCA6IHRoaXMuZ2V0Q2hvaWNlcygpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZS5nZXRDYXJyeUZvcndhcmRRdWVzdGlvbiA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIHZhciBxdWVzdGlvbiA9IHRoaXMuZmluZENhcnJ5Rm9yd2FyZFF1ZXN0aW9uKGRhdGEpO1xuICAgICAgICB2YXIgc2VsQmFzZVF1ZXN0aW9uID0gdGhpcy5nZXRRdWVzdGlvbldpdGhDaG9pY2VzQ29yZShxdWVzdGlvbik7XG4gICAgICAgIHZhciBhcnJheVF1ZXN0aW9uID0gIXNlbEJhc2VRdWVzdGlvbiA/IHRoaXMuZ2V0UXVlc3Rpb25XaXRoQXJyYXlWYWx1ZShxdWVzdGlvbikgOiBudWxsO1xuICAgICAgICB0aGlzLnNldENhcnJ5Rm9yd2FyZFF1ZXN0aW9uVHlwZSghIXNlbEJhc2VRdWVzdGlvbiwgISFhcnJheVF1ZXN0aW9uKTtcbiAgICAgICAgcmV0dXJuICEhc2VsQmFzZVF1ZXN0aW9uIHx8ICEhYXJyYXlRdWVzdGlvbiA/IHF1ZXN0aW9uIDogbnVsbDtcbiAgICB9O1xuICAgIFF1ZXN0aW9uU2VsZWN0QmFzZS5wcm90b3R5cGUuZ2V0SXNSZWFkeURlcGVuZHNPbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHJlcyA9IF9zdXBlci5wcm90b3R5cGUuZ2V0SXNSZWFkeURlcGVuZHNPbi5jYWxsKHRoaXMpO1xuICAgICAgICBpZiAodGhpcy5jYXJyeUZvcndhcmRRdWVzdGlvbikge1xuICAgICAgICAgICAgcmVzLnB1c2godGhpcy5jYXJyeUZvcndhcmRRdWVzdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9O1xuICAgIFF1ZXN0aW9uU2VsZWN0QmFzZS5wcm90b3R5cGUuZ2V0UXVlc3Rpb25XaXRoQ2hvaWNlcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UXVlc3Rpb25XaXRoQ2hvaWNlc0NvcmUodGhpcy5maW5kQ2FycnlGb3J3YXJkUXVlc3Rpb24oKSk7XG4gICAgfTtcbiAgICBRdWVzdGlvblNlbGVjdEJhc2UucHJvdG90eXBlLmZpbmRDYXJyeUZvcndhcmRRdWVzdGlvbiA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIGlmICghZGF0YSlcbiAgICAgICAgICAgIGRhdGEgPSB0aGlzLmRhdGE7XG4gICAgICAgIHRoaXMuY2FycnlGb3J3YXJkUXVlc3Rpb24gPSBudWxsO1xuICAgICAgICBpZiAodGhpcy5jaG9pY2VzRnJvbVF1ZXN0aW9uICYmIGRhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuY2FycnlGb3J3YXJkUXVlc3Rpb24gPSBkYXRhLmZpbmRRdWVzdGlvbkJ5TmFtZSh0aGlzLmNob2ljZXNGcm9tUXVlc3Rpb24pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmNhcnJ5Rm9yd2FyZFF1ZXN0aW9uO1xuICAgIH07XG4gICAgUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZS5nZXRRdWVzdGlvbldpdGhDaG9pY2VzQ29yZSA9IGZ1bmN0aW9uIChxdWVzdGlvbikge1xuICAgICAgICBpZiAoISFxdWVzdGlvbiAmJiAhIXF1ZXN0aW9uLnZpc2libGVDaG9pY2VzICYmIChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiU2VyaWFsaXplclwiXS5pc0Rlc2NlbmRhbnRPZihxdWVzdGlvbi5nZXRUeXBlKCksIFwic2VsZWN0YmFzZVwiKSkgJiYgcXVlc3Rpb24gIT09IHRoaXMpXG4gICAgICAgICAgICByZXR1cm4gcXVlc3Rpb247XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gICAgUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZS5nZXRRdWVzdGlvbldpdGhBcnJheVZhbHVlID0gZnVuY3Rpb24gKHF1ZXN0aW9uKSB7XG4gICAgICAgIHJldHVybiAhIXF1ZXN0aW9uICYmIHF1ZXN0aW9uLmlzVmFsdWVBcnJheSA/IHF1ZXN0aW9uIDogbnVsbDtcbiAgICB9O1xuICAgIFF1ZXN0aW9uU2VsZWN0QmFzZS5wcm90b3R5cGUuZ2V0Q2hvaWNlc0Zyb21BcnJheVF1ZXN0aW9uID0gZnVuY3Rpb24gKHF1ZXN0aW9uKSB7XG4gICAgICAgIGlmICh0aGlzLmlzRGVzaWduTW9kZSlcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgdmFyIHZhbCA9IHF1ZXN0aW9uLnZhbHVlO1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsKSlcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgdmFyIHJlcyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIG9iaiA9IHZhbFtpXTtcbiAgICAgICAgICAgIGlmICghX2hlbHBlcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1tcIkhlbHBlcnNcIl0uaXNWYWx1ZU9iamVjdChvYmopKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgdmFyIGtleSA9IHRoaXMuZ2V0VmFsdWVLZXlOYW1lKG9iaik7XG4gICAgICAgICAgICBpZiAoISFrZXkgJiYgIXRoaXMuaXNWYWx1ZUVtcHR5KG9ialtrZXldKSkge1xuICAgICAgICAgICAgICAgIHZhciB0ZXh0ID0gISF0aGlzLmNob2ljZVRleHRzRnJvbVF1ZXN0aW9uID8gb2JqW3RoaXMuY2hvaWNlVGV4dHNGcm9tUXVlc3Rpb25dIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHJlcy5wdXNoKHRoaXMuY3JlYXRlSXRlbVZhbHVlKG9ialtrZXldLCB0ZXh0KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9O1xuICAgIFF1ZXN0aW9uU2VsZWN0QmFzZS5wcm90b3R5cGUuZ2V0VmFsdWVLZXlOYW1lID0gZnVuY3Rpb24gKG9iaikge1xuICAgICAgICBpZiAodGhpcy5jaG9pY2VWYWx1ZXNGcm9tUXVlc3Rpb24pXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jaG9pY2VWYWx1ZXNGcm9tUXVlc3Rpb247XG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgICAgICAgcmV0dXJuIGtleXMubGVuZ3RoID4gMCA/IGtleXNbMF0gOiB1bmRlZmluZWQ7XG4gICAgfTtcbiAgICBRdWVzdGlvblNlbGVjdEJhc2UucHJvdG90eXBlLmdldENob2ljZXNGcm9tU2VsZWN0UXVlc3Rpb24gPSBmdW5jdGlvbiAocXVlc3Rpb24pIHtcbiAgICAgICAgaWYgKHRoaXMuaXNEZXNpZ25Nb2RlKVxuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB2YXIgcmVzID0gW107XG4gICAgICAgIHZhciBpc1NlbGVjdGVkID0gdGhpcy5jaG9pY2VzRnJvbVF1ZXN0aW9uTW9kZSA9PSBcInNlbGVjdGVkXCJcbiAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgOiB0aGlzLmNob2ljZXNGcm9tUXVlc3Rpb25Nb2RlID09IFwidW5zZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgPyBmYWxzZVxuICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICB2YXIgY2hvaWNlcyA9IHF1ZXN0aW9uLnZpc2libGVDaG9pY2VzO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNob2ljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzQnVpbHRJbkNob2ljZShjaG9pY2VzW2ldLCBxdWVzdGlvbikpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBpZiAoaXNTZWxlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmVzLnB1c2godGhpcy5jb3B5Q2hvaWNlSXRlbShjaG9pY2VzW2ldKSk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgaXRlbXNTZWxlY3RlZCA9IHF1ZXN0aW9uLmlzSXRlbVNlbGVjdGVkKGNob2ljZXNbaV0pO1xuICAgICAgICAgICAgaWYgKChpdGVtc1NlbGVjdGVkICYmIGlzU2VsZWN0ZWQpIHx8ICghaXRlbXNTZWxlY3RlZCAmJiAhaXNTZWxlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICByZXMucHVzaCh0aGlzLmNvcHlDaG9pY2VJdGVtKGNob2ljZXNbaV0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jaG9pY2VzRnJvbVF1ZXN0aW9uTW9kZSA9PT0gXCJzZWxlY3RlZFwiICYmICF0aGlzLnNob3dPdGhlckl0ZW0gJiYgcXVlc3Rpb24uaXNPdGhlclNlbGVjdGVkICYmICEhcXVlc3Rpb24uY29tbWVudCkge1xuICAgICAgICAgICAgcmVzLnB1c2godGhpcy5jcmVhdGVJdGVtVmFsdWUocXVlc3Rpb24ub3RoZXJJdGVtLnZhbHVlLCBxdWVzdGlvbi5jb21tZW50KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9O1xuICAgIFF1ZXN0aW9uU2VsZWN0QmFzZS5wcm90b3R5cGUuY29weUNob2ljZUl0ZW0gPSBmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICB2YXIgcmVzID0gdGhpcy5jcmVhdGVJdGVtVmFsdWUoaXRlbS52YWx1ZSk7XG4gICAgICAgIHJlcy5zZXREYXRhKGl0ZW0pO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uU2VsZWN0QmFzZS5wcm90b3R5cGUsIFwiaGFzQWN0aXZlQ2hvaWNlc1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGNob2ljZXMgPSB0aGlzLnZpc2libGVDaG9pY2VzO1xuICAgICAgICAgICAgaWYgKCFjaG9pY2VzIHx8IGNob2ljZXMubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uVmlzaWJsZUNob2ljZXNDaGFuZ2VkKCk7XG4gICAgICAgICAgICAgICAgY2hvaWNlcyA9IHRoaXMudmlzaWJsZUNob2ljZXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNob2ljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNCdWlsdEluQ2hvaWNlKGNob2ljZXNbaV0sIHRoaXMpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFF1ZXN0aW9uU2VsZWN0QmFzZS5wcm90b3R5cGUuaXNIZWFkQ2hvaWNlID0gZnVuY3Rpb24gKGl0ZW0sIHF1ZXN0aW9uKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uU2VsZWN0QmFzZS5wcm90b3R5cGUuaXNGb290Q2hvaWNlID0gZnVuY3Rpb24gKGl0ZW0sIHF1ZXN0aW9uKSB7XG4gICAgICAgIHJldHVybiAoaXRlbSA9PT0gcXVlc3Rpb24ubm9uZUl0ZW0gfHxcbiAgICAgICAgICAgIGl0ZW0gPT09IHF1ZXN0aW9uLm90aGVySXRlbSB8fFxuICAgICAgICAgICAgaXRlbSA9PT0gcXVlc3Rpb24ubmV3SXRlbVZhbHVlKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uU2VsZWN0QmFzZS5wcm90b3R5cGUuaXNCdWlsdEluQ2hvaWNlID0gZnVuY3Rpb24gKGl0ZW0sIHF1ZXN0aW9uKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzSGVhZENob2ljZShpdGVtLCBxdWVzdGlvbikgfHwgdGhpcy5pc0Zvb3RDaG9pY2UoaXRlbSwgcXVlc3Rpb24pO1xuICAgIH07XG4gICAgUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZS5nZXRDaG9pY2VzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jaG9pY2VzO1xuICAgIH07XG4gICAgUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZS5zdXBwb3J0T3RoZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzU3VwcG9ydFByb3BlcnR5KFwic2hvd090aGVySXRlbVwiKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uU2VsZWN0QmFzZS5wcm90b3R5cGUuc3VwcG9ydE5vbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzU3VwcG9ydFByb3BlcnR5KFwic2hvd05vbmVJdGVtXCIpO1xuICAgIH07XG4gICAgUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZS5pc1N1cHBvcnRQcm9wZXJ0eSA9IGZ1bmN0aW9uIChwcm9wTmFtZSkge1xuICAgICAgICByZXR1cm4gKCF0aGlzLmlzRGVzaWduTW9kZSB8fFxuICAgICAgICAgICAgdGhpcy5nZXRQcm9wZXJ0eUJ5TmFtZShwcm9wTmFtZSkudmlzaWJsZSk7XG4gICAgfTtcbiAgICBRdWVzdGlvblNlbGVjdEJhc2UucHJvdG90eXBlLm9uQ2hlY2tGb3JFcnJvcnMgPSBmdW5jdGlvbiAoZXJyb3JzLCBpc09uVmFsdWVDaGFuZ2VkKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUub25DaGVja0ZvckVycm9ycy5jYWxsKHRoaXMsIGVycm9ycywgaXNPblZhbHVlQ2hhbmdlZCk7XG4gICAgICAgIGlmICghdGhpcy5oYXNPdGhlciB8fCAhdGhpcy5pc090aGVyU2VsZWN0ZWQgfHwgdGhpcy5vdGhlclZhbHVlKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIgb3RoZXJFbXB0eUVycm9yID0gbmV3IF9lcnJvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fW1wiT3RoZXJFbXB0eUVycm9yXCJdKHRoaXMub3RoZXJFcnJvclRleHQsIHRoaXMpO1xuICAgICAgICBvdGhlckVtcHR5RXJyb3Iub25VcGRhdGVFcnJvclRleHRDYWxsYmFjayA9IGZ1bmN0aW9uIChlcnIpIHsgZXJyLnRleHQgPSBfdGhpcy5vdGhlckVycm9yVGV4dDsgfTtcbiAgICAgICAgZXJyb3JzLnB1c2gob3RoZXJFbXB0eUVycm9yKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uU2VsZWN0QmFzZS5wcm90b3R5cGUuc2V0U3VydmV5SW1wbCA9IGZ1bmN0aW9uICh2YWx1ZSwgaXNMaWdodCkge1xuICAgICAgICB0aGlzLmlzUnVubmluZ0Nob2ljZXMgPSB0cnVlO1xuICAgICAgICBfc3VwZXIucHJvdG90eXBlLnNldFN1cnZleUltcGwuY2FsbCh0aGlzLCB2YWx1ZSwgaXNMaWdodCk7XG4gICAgICAgIHRoaXMuaXNSdW5uaW5nQ2hvaWNlcyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnJ1bkNob2ljZXNCeVVybCgpO1xuICAgICAgICBpZiAodGhpcy5pc0FkZERlZmF1bHRJdGVtcykge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVWaXNpYmxlQ2hvaWNlcygpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBRdWVzdGlvblNlbGVjdEJhc2UucHJvdG90eXBlLnNldFN1cnZleUNvcmUgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5zZXRTdXJ2ZXlDb3JlLmNhbGwodGhpcywgdmFsdWUpO1xuICAgICAgICBpZiAoISF2YWx1ZSAmJiAhIXRoaXMuY2hvaWNlc0Zyb21RdWVzdGlvbikge1xuICAgICAgICAgICAgdGhpcy5vblZpc2libGVDaG9pY2VzQ2hhbmdlZCgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBRdWVzdGlvblNlbGVjdEJhc2UucHJvdG90eXBlLmdldFN0b3JlT3RoZXJzQXNDb21tZW50ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5pc1NldHRpbmdEZWZhdWx0VmFsdWUpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLnNob3dDb21tZW50QXJlYSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuICh0aGlzLnN0b3JlT3RoZXJzQXNDb21tZW50ID09PSB0cnVlIHx8XG4gICAgICAgICAgICAodGhpcy5zdG9yZU90aGVyc0FzQ29tbWVudCA9PSBcImRlZmF1bHRcIiAmJlxuICAgICAgICAgICAgICAgICh0aGlzLnN1cnZleSAhPSBudWxsID8gdGhpcy5zdXJ2ZXkuc3RvcmVPdGhlcnNBc0NvbW1lbnQgOiB0cnVlKSkgfHxcbiAgICAgICAgICAgICghdGhpcy5jaG9pY2VzQnlVcmwuaXNFbXB0eSAmJiAhdGhpcy5jaG9pY2VzRnJvbVVybCkpO1xuICAgIH07XG4gICAgUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZS5vblN1cnZleUxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMucnVuQ2hvaWNlc0J5VXJsKCk7XG4gICAgICAgIHRoaXMub25WaXNpYmxlQ2hvaWNlc0NoYW5nZWQoKTtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5vblN1cnZleUxvYWQuY2FsbCh0aGlzKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uU2VsZWN0QmFzZS5wcm90b3R5cGUub25BbnlWYWx1ZUNoYW5nZWQgPSBmdW5jdGlvbiAobmFtZSwgcXVlc3Rpb25OYW1lKSB7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUub25BbnlWYWx1ZUNoYW5nZWQuY2FsbCh0aGlzLCBuYW1lLCBxdWVzdGlvbk5hbWUpO1xuICAgICAgICBpZiAobmFtZSAhPSB0aGlzLmdldFZhbHVlTmFtZSgpKSB7XG4gICAgICAgICAgICB0aGlzLnJ1bkNob2ljZXNCeVVybCgpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjaFF1ZXN0aW9uID0gdGhpcy5jaG9pY2VzRnJvbVF1ZXN0aW9uO1xuICAgICAgICBpZiAoISFuYW1lICYmIGNoUXVlc3Rpb24gJiYgKG5hbWUgPT09IGNoUXVlc3Rpb24gfHwgcXVlc3Rpb25OYW1lID09PSBjaFF1ZXN0aW9uKSkge1xuICAgICAgICAgICAgdGhpcy5vblZpc2libGVDaG9pY2VzQ2hhbmdlZCgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBRdWVzdGlvblNlbGVjdEJhc2UucHJvdG90eXBlLnVwZGF0ZVZhbHVlRnJvbVN1cnZleSA9IGZ1bmN0aW9uIChuZXdWYWx1ZSkge1xuICAgICAgICB2YXIgbmV3Q29tbWVudCA9IFwiXCI7XG4gICAgICAgIGlmICh0aGlzLmhhc090aGVyICYmXG4gICAgICAgICAgICAhdGhpcy5pc1J1bm5pbmdDaG9pY2VzICYmXG4gICAgICAgICAgICAhdGhpcy5jaG9pY2VzQnlVcmwuaXNSdW5uaW5nICYmXG4gICAgICAgICAgICB0aGlzLmdldFN0b3JlT3RoZXJzQXNDb21tZW50KCkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmhhc1Vua25vd25WYWx1ZShuZXdWYWx1ZSkgJiYgIXRoaXMuZ2V0SGFzT3RoZXIobmV3VmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgbmV3Q29tbWVudCA9IHRoaXMuZ2V0Q29tbWVudEZyb21WYWx1ZShuZXdWYWx1ZSk7XG4gICAgICAgICAgICAgICAgbmV3VmFsdWUgPSB0aGlzLnNldE90aGVyVmFsdWVJbnRvVmFsdWUobmV3VmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbmV3Q29tbWVudCA9IHRoaXMuZGF0YS5nZXRDb21tZW50KHRoaXMuZ2V0VmFsdWVOYW1lKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUudXBkYXRlVmFsdWVGcm9tU3VydmV5LmNhbGwodGhpcywgbmV3VmFsdWUpO1xuICAgICAgICBpZiAoKHRoaXMuaXNSdW5uaW5nQ2hvaWNlcyB8fCB0aGlzLmNob2ljZXNCeVVybC5pc1J1bm5pbmcpICYmICF0aGlzLmlzRW1wdHkoKSkge1xuICAgICAgICAgICAgdGhpcy5jYWNoZWRWYWx1ZUZvclVybFJlcXVlc3RzID0gdGhpcy52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoISFuZXdDb21tZW50KSB7XG4gICAgICAgICAgICB0aGlzLnNldE5ld0NvbW1lbnQobmV3Q29tbWVudCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFF1ZXN0aW9uU2VsZWN0QmFzZS5wcm90b3R5cGUuZ2V0Q29tbWVudEZyb21WYWx1ZSA9IGZ1bmN0aW9uIChuZXdWYWx1ZSkge1xuICAgICAgICByZXR1cm4gbmV3VmFsdWU7XG4gICAgfTtcbiAgICBRdWVzdGlvblNlbGVjdEJhc2UucHJvdG90eXBlLnNldE90aGVyVmFsdWVJbnRvVmFsdWUgPSBmdW5jdGlvbiAobmV3VmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3RoZXJJdGVtLnZhbHVlO1xuICAgIH07XG4gICAgUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZS5vbk90aGVyVmFsdWVJbnB1dCA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICBpZiAodGhpcy5pc0lucHV0VGV4dFVwZGF0ZSkge1xuICAgICAgICAgICAgaWYgKGV2ZW50LnRhcmdldCkge1xuICAgICAgICAgICAgICAgIHRoaXMub3RoZXJWYWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ29tbWVudEVsZW1lbnRzKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFF1ZXN0aW9uU2VsZWN0QmFzZS5wcm90b3R5cGUub25PdGhlclZhbHVlQ2hhbmdlID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHRoaXMub3RoZXJWYWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICAgICAgaWYgKHRoaXMub3RoZXJWYWx1ZSAhPT0gZXZlbnQudGFyZ2V0LnZhbHVlKSB7XG4gICAgICAgICAgICBldmVudC50YXJnZXQudmFsdWUgPSB0aGlzLm90aGVyVmFsdWU7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFF1ZXN0aW9uU2VsZWN0QmFzZS5wcm90b3R5cGUucnVuQ2hvaWNlc0J5VXJsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuY2hvaWNlc0J5VXJsIHx8IHRoaXMuaXNMb2FkaW5nRnJvbUpzb24gfHwgdGhpcy5pc1J1bm5pbmdDaG9pY2VzKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIgcHJvY2Vzc29yID0gdGhpcy5zdXJ2ZXlJbXBsXG4gICAgICAgICAgICA/IHRoaXMuc3VydmV5SW1wbC5nZXRUZXh0UHJvY2Vzc29yKClcbiAgICAgICAgICAgIDogdGhpcy50ZXh0UHJvY2Vzc29yO1xuICAgICAgICBpZiAoIXByb2Nlc3NvcilcbiAgICAgICAgICAgIHByb2Nlc3NvciA9IHRoaXMuc3VydmV5O1xuICAgICAgICBpZiAoIXByb2Nlc3NvcilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy51cGRhdGVJc1JlYWR5KCk7XG4gICAgICAgIHRoaXMuaXNSdW5uaW5nQ2hvaWNlcyA9IHRydWU7XG4gICAgICAgIHRoaXMuY2hvaWNlc0J5VXJsLnJ1bihwcm9jZXNzb3IpO1xuICAgICAgICB0aGlzLmlzUnVubmluZ0Nob2ljZXMgPSBmYWxzZTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uU2VsZWN0QmFzZS5wcm90b3R5cGUub25CZWZvcmVTZW5kUmVxdWVzdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKF9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fW1wic2V0dGluZ3NcIl0ud2ViLmRpc2FibGVRdWVzdGlvbldoaWxlTG9hZGluZ0Nob2ljZXMgPT09IHRydWUgJiYgIXRoaXMuaXNSZWFkT25seSkge1xuICAgICAgICAgICAgdGhpcy5lbmFibGVPbkxvYWRpbmdDaG9pY2VzID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMucmVhZE9ubHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBRdWVzdGlvblNlbGVjdEJhc2UucHJvdG90eXBlLm9uTG9hZENob2ljZXNGcm9tVXJsID0gZnVuY3Rpb24gKGFycmF5KSB7XG4gICAgICAgIGlmICh0aGlzLmVuYWJsZU9uTG9hZGluZ0Nob2ljZXMpIHtcbiAgICAgICAgICAgIHRoaXMucmVhZE9ubHkgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZXJyb3JzID0gW107XG4gICAgICAgIGlmICghdGhpcy5pc1JlYWRPbmx5KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jaG9pY2VzQnlVcmwgJiYgdGhpcy5jaG9pY2VzQnlVcmwuZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBlcnJvcnMucHVzaCh0aGlzLmNob2ljZXNCeVVybC5lcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG5ld0Nob2ljZXMgPSBudWxsO1xuICAgICAgICB2YXIgY2hlY2tDYWNoZWRWYWx1ZXNPbkV4aXN0aW5nID0gdHJ1ZTtcbiAgICAgICAgaWYgKHRoaXMuaXNGaXJzdExvYWRDaG9pY2VzRnJvbVVybCAmJlxuICAgICAgICAgICAgIXRoaXMuY2FjaGVkVmFsdWVGb3JVcmxSZXF1ZXN0cyAmJlxuICAgICAgICAgICAgdGhpcy5kZWZhdWx0VmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVkVmFsdWVGb3JVcmxSZXF1ZXN0cyA9IHRoaXMuZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgY2hlY2tDYWNoZWRWYWx1ZXNPbkV4aXN0aW5nID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXNWYWx1ZUVtcHR5KHRoaXMuY2FjaGVkVmFsdWVGb3JVcmxSZXF1ZXN0cykpIHtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVkVmFsdWVGb3JVcmxSZXF1ZXN0cyA9IHRoaXMudmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc0ZpcnN0TG9hZENob2ljZXNGcm9tVXJsID0gZmFsc2U7XG4gICAgICAgIHZhciBjYWNoZWRWYWx1ZXMgPSB0aGlzLmNyZWF0ZUNhY2hlZFZhbHVlRm9yVXJsUmVxdWVzdHModGhpcy5jYWNoZWRWYWx1ZUZvclVybFJlcXVlc3RzLCBjaGVja0NhY2hlZFZhbHVlc09uRXhpc3RpbmcpO1xuICAgICAgICBpZiAoYXJyYXkgJiYgKGFycmF5Lmxlbmd0aCA+IDAgfHwgdGhpcy5jaG9pY2VzQnlVcmwuYWxsb3dFbXB0eVJlc3BvbnNlKSkge1xuICAgICAgICAgICAgbmV3Q2hvaWNlcyA9IG5ldyBBcnJheSgpO1xuICAgICAgICAgICAgX2l0ZW12YWx1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiSXRlbVZhbHVlXCJdLnNldERhdGEobmV3Q2hvaWNlcywgYXJyYXkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghIW5ld0Nob2ljZXMpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmV3Q2hvaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIG5ld0Nob2ljZXNbaV0ubG9jT3duZXIgPSB0aGlzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hvaWNlc0Zyb21VcmwgPSBuZXdDaG9pY2VzO1xuICAgICAgICB0aGlzLmZpbHRlckl0ZW1zKCk7XG4gICAgICAgIHRoaXMub25WaXNpYmxlQ2hvaWNlc0NoYW5nZWQoKTtcbiAgICAgICAgaWYgKG5ld0Nob2ljZXMpIHtcbiAgICAgICAgICAgIHZhciBuZXdWYWx1ZSA9IHRoaXMudXBkYXRlQ2FjaGVkVmFsdWVGb3JVcmxSZXF1ZXN0cyhjYWNoZWRWYWx1ZXMsIG5ld0Nob2ljZXMpO1xuICAgICAgICAgICAgaWYgKCEhbmV3VmFsdWUgJiYgIXRoaXMuaXNSZWFkT25seSkge1xuICAgICAgICAgICAgICAgIHZhciBoYXNDaGFuZ2VkID0gIXRoaXMuaXNUd29WYWx1ZUVxdWFscyh0aGlzLnZhbHVlLCBuZXdWYWx1ZS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzVmFsdWVFbXB0eShuZXdWYWx1ZS52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWxsb3dOb3RpZnlWYWx1ZUNoYW5nZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0UXVlc3Rpb25WYWx1ZSh1bmRlZmluZWQsIHRydWUsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFsbG93Tm90aWZ5VmFsdWVDaGFuZ2VkID0gaGFzQ2hhbmdlZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0NoYW5nZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBuZXdWYWx1ZS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0UXVlc3Rpb25WYWx1ZShuZXdWYWx1ZS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWxsb3dOb3RpZnlWYWx1ZUNoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuaXNSZWFkT25seSAmJiAhbmV3Q2hvaWNlcyAmJiAhdGhpcy5pc0ZpcnN0TG9hZENob2ljZXNGcm9tVXJsKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVycm9ycyA9IGVycm9ycztcbiAgICAgICAgdGhpcy5jaG9pY2VzTG9hZGVkKCk7XG4gICAgfTtcbiAgICBRdWVzdGlvblNlbGVjdEJhc2UucHJvdG90eXBlLmNyZWF0ZUNhY2hlZFZhbHVlRm9yVXJsUmVxdWVzdHMgPSBmdW5jdGlvbiAodmFsLCBjaGVja09uRXhpc3RpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNWYWx1ZUVtcHR5KHZhbCkpXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgICAgICAgdmFyIHJlcyA9IFtdO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWwubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICByZXMucHVzaCh0aGlzLmNyZWF0ZUNhY2hlZFZhbHVlRm9yVXJsUmVxdWVzdHModmFsW2ldLCB0cnVlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9XG4gICAgICAgIHZhciBpc0V4aXN0cyA9IGNoZWNrT25FeGlzdGluZyA/ICF0aGlzLmhhc1Vua25vd25WYWx1ZSh2YWwpIDogdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHsgdmFsdWU6IHZhbCwgaXNFeGlzdHM6IGlzRXhpc3RzIH07XG4gICAgfTtcbiAgICBRdWVzdGlvblNlbGVjdEJhc2UucHJvdG90eXBlLnVwZGF0ZUNhY2hlZFZhbHVlRm9yVXJsUmVxdWVzdHMgPSBmdW5jdGlvbiAodmFsLCBuZXdDaG9pY2VzKSB7XG4gICAgICAgIGlmICh0aGlzLmlzVmFsdWVFbXB0eSh2YWwpKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgICAgICAgIHZhciByZXMgPSBbXTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIHVwZGF0ZWRWYWx1ZSA9IHRoaXMudXBkYXRlQ2FjaGVkVmFsdWVGb3JVcmxSZXF1ZXN0cyh2YWxbaV0sIG5ld0Nob2ljZXMpO1xuICAgICAgICAgICAgICAgIGlmICh1cGRhdGVkVmFsdWUgJiYgIXRoaXMuaXNWYWx1ZUVtcHR5KHVwZGF0ZWRWYWx1ZS52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5ld1ZhbHVlID0gdXBkYXRlZFZhbHVlLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB2YXIgaXRlbSA9IF9pdGVtdmFsdWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcIkl0ZW1WYWx1ZVwiXS5nZXRJdGVtQnlWYWx1ZShuZXdDaG9pY2VzLCB1cGRhdGVkVmFsdWUudmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoISFpdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdWYWx1ZSA9IGl0ZW0udmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmVzLnB1c2gobmV3VmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiByZXMgfTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdmFsdWUgPSB2YWwuaXNFeGlzdHMgJiYgdGhpcy5oYXNVbmtub3duVmFsdWUodmFsLnZhbHVlKSA/IG51bGwgOiB2YWwudmFsdWU7XG4gICAgICAgIHZhciBpdGVtID0gX2l0ZW12YWx1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiSXRlbVZhbHVlXCJdLmdldEl0ZW1CeVZhbHVlKG5ld0Nob2ljZXMsIHZhbHVlKTtcbiAgICAgICAgaWYgKCEhaXRlbSkge1xuICAgICAgICAgICAgdmFsdWUgPSBpdGVtLnZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IHZhbHVlOiB2YWx1ZSB9O1xuICAgIH07XG4gICAgUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZS51cGRhdGVDaG9pY2VzRGVwZW5kZWRRdWVzdGlvbnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzTG9hZGluZ0Zyb21Kc29uIHx8IHRoaXMuaXNVcGRhdGluZ0Nob2ljZXNEZXBlbmRlZFF1ZXN0aW9ucyB8fFxuICAgICAgICAgICAgIXRoaXMuYWxsb3dOb3RpZnlWYWx1ZUNoYW5nZWQgfHwgdGhpcy5jaG9pY2VzQnlVcmwuaXNSdW5uaW5nKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLmlzVXBkYXRpbmdDaG9pY2VzRGVwZW5kZWRRdWVzdGlvbnMgPSB0cnVlO1xuICAgICAgICB0aGlzLnVwZGF0ZURlcGVuZGVkUXVlc3Rpb25zKCk7XG4gICAgICAgIHRoaXMuaXNVcGRhdGluZ0Nob2ljZXNEZXBlbmRlZFF1ZXN0aW9ucyA9IGZhbHNlO1xuICAgIH07XG4gICAgUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZS51cGRhdGVEZXBlbmRlZFF1ZXN0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLm9uVmlzaWJsZUNob2ljZXNDaGFuZ2VkKCk7XG4gICAgICAgIHRoaXMuY2xlYXJJbmNvcnJlY3RWYWx1ZXMoKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uU2VsZWN0QmFzZS5wcm90b3R5cGUub25TdXJ2ZXlWYWx1ZUNoYW5nZWQgPSBmdW5jdGlvbiAobmV3VmFsdWUpIHtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5vblN1cnZleVZhbHVlQ2hhbmdlZC5jYWxsKHRoaXMsIG5ld1ZhbHVlKTtcbiAgICAgICAgdGhpcy51cGRhdGVDaG9pY2VzRGVwZW5kZWRRdWVzdGlvbnMoKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uU2VsZWN0QmFzZS5wcm90b3R5cGUub25WaXNpYmxlQ2hvaWNlc0NoYW5nZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzTG9hZGluZ0Zyb21Kc29uIHx8IHRoaXMuaXNMb2NrVmlzaWJsZUNob2ljZXMpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMudXBkYXRlVmlzaWJsZUNob2ljZXMoKTtcbiAgICAgICAgdGhpcy5vblZpc2libGVDaGFuZ2VkKCk7XG4gICAgICAgIGlmICghIXRoaXMudmlzaWJsZUNob2ljZXNDaGFuZ2VkQ2FsbGJhY2spIHtcbiAgICAgICAgICAgIHRoaXMudmlzaWJsZUNob2ljZXNDaGFuZ2VkQ2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZUNob2ljZXNEZXBlbmRlZFF1ZXN0aW9ucygpO1xuICAgIH07XG4gICAgUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZS5pc1Zpc2libGVDb3JlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgc3VwZXJWYWwgPSBfc3VwZXIucHJvdG90eXBlLmlzVmlzaWJsZUNvcmUuY2FsbCh0aGlzKTtcbiAgICAgICAgaWYgKCF0aGlzLmhpZGVJZkNob2ljZXNFbXB0eSB8fCAhc3VwZXJWYWwpXG4gICAgICAgICAgICByZXR1cm4gc3VwZXJWYWw7XG4gICAgICAgIHZhciBmaWx0ZXJlZENob2ljZXMgPSB0aGlzLmdldEZpbHRlcmVkQ2hvaWNlcygpO1xuICAgICAgICByZXR1cm4gIWZpbHRlcmVkQ2hvaWNlcyB8fCBmaWx0ZXJlZENob2ljZXMubGVuZ3RoID4gMDtcbiAgICB9O1xuICAgIFF1ZXN0aW9uU2VsZWN0QmFzZS5wcm90b3R5cGUuc29ydFZpc2libGVDaG9pY2VzID0gZnVuY3Rpb24gKGFycmF5KSB7XG4gICAgICAgIGlmICh0aGlzLmlzRGVzaWduTW9kZSlcbiAgICAgICAgICAgIHJldHVybiBhcnJheTtcbiAgICAgICAgdmFyIG9yZGVyID0gdGhpcy5jaG9pY2VzT3JkZXIudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKG9yZGVyID09IFwiYXNjXCIpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zb3J0QXJyYXkoYXJyYXksIDEpO1xuICAgICAgICBpZiAob3JkZXIgPT0gXCJkZXNjXCIpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zb3J0QXJyYXkoYXJyYXksIC0xKTtcbiAgICAgICAgaWYgKG9yZGVyID09IFwicmFuZG9tXCIpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yYW5kb21pemVBcnJheShhcnJheSk7XG4gICAgICAgIHJldHVybiBhcnJheTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uU2VsZWN0QmFzZS5wcm90b3R5cGUuc29ydEFycmF5ID0gZnVuY3Rpb24gKGFycmF5LCBtdWx0KSB7XG4gICAgICAgIHJldHVybiBhcnJheS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICByZXR1cm4gX2hlbHBlcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1tcIkhlbHBlcnNcIl0uY29tcGFyZVN0cmluZ3MoYS5jYWxjdWxhdGVkVGV4dCwgYi5jYWxjdWxhdGVkVGV4dCkgKiBtdWx0O1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uU2VsZWN0QmFzZS5wcm90b3R5cGUucmFuZG9taXplQXJyYXkgPSBmdW5jdGlvbiAoYXJyYXkpIHtcbiAgICAgICAgcmV0dXJuIF9oZWxwZXJzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bXCJIZWxwZXJzXCJdLnJhbmRvbWl6ZUFycmF5KGFycmF5KTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uU2VsZWN0QmFzZS5wcm90b3R5cGUuY2xlYXJJbmNvcnJlY3RWYWx1ZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5oYXNWYWx1ZVRvQ2xlYXJJbmNvcnJlY3RWYWx1ZXMoKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKHRoaXMuY2FycnlGb3J3YXJkUXVlc3Rpb24gJiYgIXRoaXMuY2FycnlGb3J3YXJkUXVlc3Rpb24uaXNSZWFkeSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKCEhdGhpcy5zdXJ2ZXkgJiZcbiAgICAgICAgICAgIHRoaXMuc3VydmV5LnF1ZXN0aW9uc0J5VmFsdWVOYW1lKHRoaXMuZ2V0VmFsdWVOYW1lKCkpLmxlbmd0aCA+IDEpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmICghIXRoaXMuY2hvaWNlc0J5VXJsICYmXG4gICAgICAgICAgICAhdGhpcy5jaG9pY2VzQnlVcmwuaXNFbXB0eSAmJlxuICAgICAgICAgICAgKCF0aGlzLmNob2ljZXNGcm9tVXJsIHx8IHRoaXMuY2hvaWNlc0Zyb21VcmwubGVuZ3RoID09IDApKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAodGhpcy5jbGVhckluY29ycmVjdFZhbHVlc0NhbGxiYWNrKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFySW5jb3JyZWN0VmFsdWVzQ2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJJbmNvcnJlY3RWYWx1ZXNDb3JlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFF1ZXN0aW9uU2VsZWN0QmFzZS5wcm90b3R5cGUuaGFzVmFsdWVUb0NsZWFySW5jb3JyZWN0VmFsdWVzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoISF0aGlzLnN1cnZleSAmJiB0aGlzLnN1cnZleS5rZWVwSW5jb3JyZWN0VmFsdWVzKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gIXRoaXMua2VlcEluY29ycmVjdFZhbHVlcyAmJiAhdGhpcy5pc0VtcHR5KCk7XG4gICAgfTtcbiAgICBRdWVzdGlvblNlbGVjdEJhc2UucHJvdG90eXBlLmNsZWFyVmFsdWVJZkludmlzaWJsZUNvcmUgPSBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUuY2xlYXJWYWx1ZUlmSW52aXNpYmxlQ29yZS5jYWxsKHRoaXMsIHJlYXNvbik7XG4gICAgICAgIHRoaXMuY2xlYXJJbmNvcnJlY3RWYWx1ZXMoKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgYHRydWVgIGlmIGEgcGFzc2VkIGNob2ljZSBpdGVtIGlzIHNlbGVjdGVkLlxuICAgICAqXG4gICAgICogVG8gb2J0YWluIGEgY2hvaWNlIGl0ZW0gdG8gY2hlY2ssIHVzZSB0aGUgYG5vbmVJdGVtYCBvciBgb3RoZXJJdGVtYCBwcm9wZXJ0eSBvciB0aGUgYGNob2ljZXNgIGFycmF5LlxuICAgICAqIEBwYXJhbSBpdGVtIEEgY2hvaWNlIGl0ZW0uXG4gICAgICogQHNlZSBub25lSXRlbVxuICAgICAqIEBzZWUgb3RoZXJJdGVtXG4gICAgICogQHNlZSBjaG9pY2VzXG4gICAgICovXG4gICAgUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZS5pc0l0ZW1TZWxlY3RlZCA9IGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIGlmIChpdGVtID09PSB0aGlzLm90aGVySXRlbSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlzT3RoZXJTZWxlY3RlZDtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNJdGVtU2VsZWN0ZWRDb3JlKGl0ZW0pO1xuICAgIH07XG4gICAgUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZS5pc0l0ZW1TZWxlY3RlZENvcmUgPSBmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICByZXR1cm4gaXRlbS52YWx1ZSA9PT0gdGhpcy52YWx1ZTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uU2VsZWN0QmFzZS5wcm90b3R5cGUuY2xlYXJEaXNhYmxlZFZhbHVlcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnN1cnZleSB8fCAhdGhpcy5zdXJ2ZXkuY2xlYXJWYWx1ZU9uRGlzYWJsZUl0ZW1zKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLmNsZWFyRGlzYWJsZWRWYWx1ZXNDb3JlKCk7XG4gICAgfTtcbiAgICBRdWVzdGlvblNlbGVjdEJhc2UucHJvdG90eXBlLmNsZWFySW5jb3JyZWN0VmFsdWVzQ29yZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHZhbCA9IHRoaXMudmFsdWU7XG4gICAgICAgIGlmICh0aGlzLmNhbkNsZWFyVmFsdWVBblVua25vd24odmFsKSkge1xuICAgICAgICAgICAgdGhpcy5jbGVhclZhbHVlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFF1ZXN0aW9uU2VsZWN0QmFzZS5wcm90b3R5cGUuY2FuQ2xlYXJWYWx1ZUFuVW5rbm93biA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgaWYgKCF0aGlzLmdldFN0b3JlT3RoZXJzQXNDb21tZW50KCkgJiYgdGhpcy5pc090aGVyU2VsZWN0ZWQpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiB0aGlzLmhhc1Vua25vd25WYWx1ZSh2YWwsIHRydWUsIHRydWUsIHRydWUpO1xuICAgIH07XG4gICAgUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZS5jbGVhckRpc2FibGVkVmFsdWVzQ29yZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNWYWx1ZURpc2FibGVkKHRoaXMudmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFyVmFsdWUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZS5jbGVhclVudXNlZFZhbHVlcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5jbGVhclVudXNlZFZhbHVlcy5jYWxsKHRoaXMpO1xuICAgICAgICBpZiAoIXRoaXMuaXNPdGhlclNlbGVjdGVkKSB7XG4gICAgICAgICAgICB0aGlzLm90aGVyVmFsdWUgPSBcIlwiO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5zaG93Q29tbWVudEFyZWEgJiYgKCF0aGlzLmdldFN0b3JlT3RoZXJzQXNDb21tZW50KCkgJiYgIXRoaXMuaXNPdGhlclNlbGVjdGVkKSkge1xuICAgICAgICAgICAgdGhpcy5jb21tZW50ID0gXCJcIjtcbiAgICAgICAgfVxuICAgIH07XG4gICAgUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZS5nZXRDb2x1bW5DbGFzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBfdXRpbHNfY3NzQ2xhc3NCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fW1wiQ3NzQ2xhc3NCdWlsZGVyXCJdKClcbiAgICAgICAgICAgIC5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLmNvbHVtbilcbiAgICAgICAgICAgIC5hcHBlbmQoXCJzdi1xLWNvbHVtbi1cIiArIHRoaXMuY29sQ291bnQsIHRoaXMuaGFzQ29sdW1ucylcbiAgICAgICAgICAgIC50b1N0cmluZygpO1xuICAgIH07XG4gICAgUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZS5nZXRJdGVtSW5kZXggPSBmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICByZXR1cm4gdGhpcy52aXNpYmxlQ2hvaWNlcy5pbmRleE9mKGl0ZW0pO1xuICAgIH07XG4gICAgUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZS5nZXRJdGVtQ2xhc3MgPSBmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICB2YXIgb3B0aW9ucyA9IHsgaXRlbTogaXRlbSB9O1xuICAgICAgICB2YXIgcmVzID0gdGhpcy5nZXRJdGVtQ2xhc3NDb3JlKGl0ZW0sIG9wdGlvbnMpO1xuICAgICAgICBvcHRpb25zLmNzcyA9IHJlcztcbiAgICAgICAgaWYgKCEhdGhpcy5zdXJ2ZXkpIHtcbiAgICAgICAgICAgIHRoaXMuc3VydmV5LnVwZGF0ZUNob2ljZUl0ZW1Dc3ModGhpcywgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9wdGlvbnMuY3NzO1xuICAgIH07XG4gICAgUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZS5nZXRDdXJyZW50Q29sQ291bnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbENvdW50O1xuICAgIH07XG4gICAgUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZS5nZXRJdGVtQ2xhc3NDb3JlID0gZnVuY3Rpb24gKGl0ZW0sIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgX3V0aWxzX2Nzc0NsYXNzQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX1tcIkNzc0NsYXNzQnVpbGRlclwiXSgpXG4gICAgICAgICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5pdGVtKVxuICAgICAgICAgICAgLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMuaXRlbUlubGluZSwgIXRoaXMuaGFzQ29sdW1ucyAmJiB0aGlzLmNvbENvdW50ID09PSAwKVxuICAgICAgICAgICAgLmFwcGVuZChcInN2LXEtY29sLVwiICsgdGhpcy5nZXRDdXJyZW50Q29sQ291bnQoKSwgIXRoaXMuaGFzQ29sdW1ucyAmJiB0aGlzLmNvbENvdW50ICE9PSAwKVxuICAgICAgICAgICAgLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMuaXRlbU9uRXJyb3IsIHRoaXMuZXJyb3JzLmxlbmd0aCA+IDApO1xuICAgICAgICB2YXIgaXNEaXNhYmxlZCA9IHRoaXMuaXNSZWFkT25seSB8fCAhaXRlbS5pc0VuYWJsZWQ7XG4gICAgICAgIHZhciBpc0NoZWNrZWQgPSB0aGlzLmlzSXRlbVNlbGVjdGVkKGl0ZW0pIHx8XG4gICAgICAgICAgICAodGhpcy5pc090aGVyU2VsZWN0ZWQgJiYgdGhpcy5vdGhlckl0ZW0udmFsdWUgPT09IGl0ZW0udmFsdWUpO1xuICAgICAgICB2YXIgYWxsb3dIb3ZlciA9ICFpc0Rpc2FibGVkICYmICFpc0NoZWNrZWQgJiYgISghIXRoaXMuc3VydmV5ICYmIHRoaXMuc3VydmV5LmlzRGVzaWduTW9kZSk7XG4gICAgICAgIHZhciBpc05vbmUgPSBpdGVtID09PSB0aGlzLm5vbmVJdGVtO1xuICAgICAgICBvcHRpb25zLmlzRGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgICAgICBvcHRpb25zLmlzQ2hlY2tlZCA9IGlzQ2hlY2tlZDtcbiAgICAgICAgb3B0aW9ucy5pc05vbmUgPSBpc05vbmU7XG4gICAgICAgIHJldHVybiBidWlsZGVyLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMuaXRlbURpc2FibGVkLCBpc0Rpc2FibGVkKVxuICAgICAgICAgICAgLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMuaXRlbUNoZWNrZWQsIGlzQ2hlY2tlZClcbiAgICAgICAgICAgIC5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLml0ZW1Ib3ZlciwgYWxsb3dIb3ZlcilcbiAgICAgICAgICAgIC5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLml0ZW1Ob25lLCBpc05vbmUpXG4gICAgICAgICAgICAudG9TdHJpbmcoKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uU2VsZWN0QmFzZS5wcm90b3R5cGUuZ2V0TGFiZWxDbGFzcyA9IGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIHJldHVybiBuZXcgX3V0aWxzX2Nzc0NsYXNzQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX1tcIkNzc0NsYXNzQnVpbGRlclwiXSgpXG4gICAgICAgICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5sYWJlbClcbiAgICAgICAgICAgIC5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLmxhYmVsQ2hlY2tlZCwgdGhpcy5pc0l0ZW1TZWxlY3RlZChpdGVtKSlcbiAgICAgICAgICAgIC50b1N0cmluZygpO1xuICAgIH07XG4gICAgUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZS5nZXRDb250cm9sTGFiZWxDbGFzcyA9IGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIHJldHVybiBuZXcgX3V0aWxzX2Nzc0NsYXNzQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX1tcIkNzc0NsYXNzQnVpbGRlclwiXSgpXG4gICAgICAgICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5jb250cm9sTGFiZWwpXG4gICAgICAgICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5jb250cm9sTGFiZWxDaGVja2VkLCB0aGlzLmlzSXRlbVNlbGVjdGVkKGl0ZW0pKVxuICAgICAgICAgICAgLnRvU3RyaW5nKCkgfHwgdW5kZWZpbmVkO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uU2VsZWN0QmFzZS5wcm90b3R5cGUsIFwiaGVhZEl0ZW1zXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICAgICAgcmV0dXJuICh0aGlzLnNlcGFyYXRlU3BlY2lhbENob2ljZXMgfHwgdGhpcy5pc0Rlc2lnbk1vZGUpID9cbiAgICAgICAgICAgICAgICB0aGlzLnZpc2libGVDaG9pY2VzLmZpbHRlcihmdW5jdGlvbiAoY2hvaWNlKSB7IHJldHVybiBfdGhpcy5pc0hlYWRDaG9pY2UoY2hvaWNlLCBfdGhpcyk7IH0pIDogW107XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZSwgXCJmb290SXRlbXNcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgICAgICByZXR1cm4gKHRoaXMuc2VwYXJhdGVTcGVjaWFsQ2hvaWNlcyB8fCB0aGlzLmlzRGVzaWduTW9kZSkgP1xuICAgICAgICAgICAgICAgIHRoaXMudmlzaWJsZUNob2ljZXMuZmlsdGVyKGZ1bmN0aW9uIChjaG9pY2UpIHsgcmV0dXJuIF90aGlzLmlzRm9vdENob2ljZShjaG9pY2UsIF90aGlzKTsgfSkgOiBbXTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblNlbGVjdEJhc2UucHJvdG90eXBlLCBcImRhdGFDaG9pY2VzXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmlzaWJsZUNob2ljZXMuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7IHJldHVybiAhX3RoaXMuaXNCdWlsdEluQ2hvaWNlKGl0ZW0sIF90aGlzKTsgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZSwgXCJib2R5SXRlbXNcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAodGhpcy5oYXNIZWFkSXRlbXMgfHwgdGhpcy5oYXNGb290SXRlbXMpID8gdGhpcy5kYXRhQ2hvaWNlcyA6IHRoaXMudmlzaWJsZUNob2ljZXM7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZSwgXCJoYXNIZWFkSXRlbXNcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmhlYWRJdGVtcy5sZW5ndGggPiAwO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uU2VsZWN0QmFzZS5wcm90b3R5cGUsIFwiaGFzRm9vdEl0ZW1zXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5mb290SXRlbXMubGVuZ3RoID4gMDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblNlbGVjdEJhc2UucHJvdG90eXBlLCBcImNvbHVtbnNcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBjb2x1bW5zID0gW107XG4gICAgICAgICAgICB2YXIgY29sQ291bnQgPSB0aGlzLmdldEN1cnJlbnRDb2xDb3VudCgpO1xuICAgICAgICAgICAgaWYgKHRoaXMuaGFzQ29sdW1ucyAmJiB0aGlzLnZpc2libGVDaG9pY2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB2YXIgY2hvaWNlc1RvQnVpbGRDb2x1bW5zID0gKCF0aGlzLnNlcGFyYXRlU3BlY2lhbENob2ljZXMgJiYgIXRoaXMuaXNEZXNpZ25Nb2RlKSA/XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmlzaWJsZUNob2ljZXMgOiB0aGlzLmRhdGFDaG9pY2VzO1xuICAgICAgICAgICAgICAgIGlmIChfc2V0dGluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1tcInNldHRpbmdzXCJdLnNob3dJdGVtc0luT3JkZXIgPT0gXCJjb2x1bW5cIikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcHJldkluZGV4ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxlZnRFbGVtZW50c0NvdW50ID0gY2hvaWNlc1RvQnVpbGRDb2x1bW5zLmxlbmd0aCAlIGNvbENvdW50O1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbENvdW50OyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2x1bW4gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSBwcmV2SW5kZXg7IGogPCBwcmV2SW5kZXggKyBNYXRoLmZsb29yKGNob2ljZXNUb0J1aWxkQ29sdW1ucy5sZW5ndGggLyBjb2xDb3VudCk7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5wdXNoKGNob2ljZXNUb0J1aWxkQ29sdW1uc1tqXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobGVmdEVsZW1lbnRzQ291bnQgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdEVsZW1lbnRzQ291bnQtLTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4ucHVzaChjaG9pY2VzVG9CdWlsZENvbHVtbnNbal0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGorKztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXZJbmRleCA9IGo7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5zLnB1c2goY29sdW1uKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2xDb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29sdW1uID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gaTsgaiA8IGNob2ljZXNUb0J1aWxkQ29sdW1ucy5sZW5ndGg7IGogKz0gY29sQ291bnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4ucHVzaChjaG9pY2VzVG9CdWlsZENvbHVtbnNbal0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1ucy5wdXNoKGNvbHVtbik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY29sdW1ucztcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblNlbGVjdEJhc2UucHJvdG90eXBlLCBcImhhc0NvbHVtbnNcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAhdGhpcy5pc01vYmlsZSAmJlxuICAgICAgICAgICAgICAgICh0aGlzLmdldEN1cnJlbnRDb2xDb3VudCgpID4gMSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZSwgXCJyb3dMYXlvdXRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEN1cnJlbnRDb2xDb3VudCgpID09IDAgJiYgISh0aGlzLmhhc0Zvb3RJdGVtcyB8fCB0aGlzLmhhc0hlYWRJdGVtcyk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZSwgXCJibG9ja2VkUm93XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDdXJyZW50Q29sQ291bnQoKSA9PSAwICYmICh0aGlzLmhhc0Zvb3RJdGVtcyB8fCB0aGlzLmhhc0hlYWRJdGVtcyk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBRdWVzdGlvblNlbGVjdEJhc2UucHJvdG90eXBlLmNob2ljZXNMb2FkZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuaXNDaG9pY2VzTG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy51cGRhdGVJc1JlYWR5KCk7XG4gICAgICAgIGlmICh0aGlzLnN1cnZleSkge1xuICAgICAgICAgICAgdGhpcy5zdXJ2ZXkubG9hZGVkQ2hvaWNlc0Zyb21TZXJ2ZXIodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubG9hZGVkQ2hvaWNlc0Zyb21TZXJ2ZXJDYWxsYmFjaykge1xuICAgICAgICAgICAgdGhpcy5sb2FkZWRDaG9pY2VzRnJvbVNlcnZlckNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFF1ZXN0aW9uU2VsZWN0QmFzZS5wcm90b3R5cGUuZ2V0SXRlbVZhbHVlV3JhcHBlckNvbXBvbmVudE5hbWUgPSBmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICB2YXIgc3VydmV5ID0gdGhpcy5zdXJ2ZXk7XG4gICAgICAgIGlmIChzdXJ2ZXkpIHtcbiAgICAgICAgICAgIHJldHVybiBzdXJ2ZXkuZ2V0SXRlbVZhbHVlV3JhcHBlckNvbXBvbmVudE5hbWUoaXRlbSwgdGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9zdXJ2ZXlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlN1cnZleU1vZGVsXCJdLlRlbXBsYXRlUmVuZGVyZXJDb21wb25lbnROYW1lO1xuICAgIH07XG4gICAgUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZS5nZXRJdGVtVmFsdWVXcmFwcGVyQ29tcG9uZW50RGF0YSA9IGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIHZhciBzdXJ2ZXkgPSB0aGlzLnN1cnZleTtcbiAgICAgICAgaWYgKHN1cnZleSkge1xuICAgICAgICAgICAgcmV0dXJuIHN1cnZleS5nZXRJdGVtVmFsdWVXcmFwcGVyQ29tcG9uZW50RGF0YShpdGVtLCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXRlbTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uU2VsZWN0QmFzZS5wcm90b3R5cGUuYXJpYUl0ZW1DaGVja2VkID0gZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyZWRWYWx1ZSA9PT0gaXRlbS52YWx1ZSA/IFwidHJ1ZVwiIDogXCJmYWxzZVwiO1xuICAgIH07XG4gICAgUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZS5pc090aGVySXRlbSA9IGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhhc090aGVyICYmIGl0ZW0udmFsdWUgPT0gdGhpcy5vdGhlckl0ZW0udmFsdWU7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZSwgXCJpdGVtU3ZnSWNvblwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3NzQ2xhc3Nlcy5pdGVtU3ZnSWNvbklkO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZS5nZXRTZWxlY3RCYXNlUm9vdENzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBfdXRpbHNfY3NzQ2xhc3NCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fW1wiQ3NzQ2xhc3NCdWlsZGVyXCJdKClcbiAgICAgICAgICAgIC5hcHBlbmQodGhpcy5nZXRRdWVzdGlvblJvb3RDc3MoKSlcbiAgICAgICAgICAgIC5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLnJvb3RSb3csIHRoaXMucm93TGF5b3V0KVxuICAgICAgICAgICAgLnRvU3RyaW5nKCk7XG4gICAgfTtcbiAgICBRdWVzdGlvblNlbGVjdEJhc2UucHJvdG90eXBlLmFsbG93TW9iaWxlSW5EZXNpZ25Nb2RlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uU2VsZWN0QmFzZS5wcm90b3R5cGUuZ2V0QXJpYUl0ZW1MYWJlbCA9IGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIHJldHVybiBpdGVtLmxvY1RleHQucmVuZGVyZWRIdG1sO1xuICAgIH07XG4gICAgUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZS5nZXRJdGVtSWQgPSBmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnB1dElkICsgXCJfXCIgKyB0aGlzLmdldEl0ZW1JbmRleChpdGVtKTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblNlbGVjdEJhc2UucHJvdG90eXBlLCBcInF1ZXN0aW9uTmFtZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubmFtZSArIFwiX1wiICsgdGhpcy5pZDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFF1ZXN0aW9uU2VsZWN0QmFzZS5wcm90b3R5cGUuZ2V0SXRlbUVuYWJsZWQgPSBmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICByZXR1cm4gIXRoaXMuaXNJbnB1dFJlYWRPbmx5ICYmIGl0ZW0uaXNFbmFibGVkO1xuICAgIH07XG4gICAgUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZS5hZnRlclJlbmRlciA9IGZ1bmN0aW9uIChlbCkge1xuICAgICAgICBfc3VwZXIucHJvdG90eXBlLmFmdGVyUmVuZGVyLmNhbGwodGhpcywgZWwpO1xuICAgICAgICB0aGlzLnJvb3RFbGVtZW50ID0gZWw7XG4gICAgfTtcbiAgICBRdWVzdGlvblNlbGVjdEJhc2UucHJvdG90eXBlLmJlZm9yZURlc3Ryb3lRdWVzdGlvbkVsZW1lbnQgPSBmdW5jdGlvbiAoZWwpIHtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5iZWZvcmVEZXN0cm95UXVlc3Rpb25FbGVtZW50LmNhbGwodGhpcywgZWwpO1xuICAgICAgICB0aGlzLnJvb3RFbGVtZW50ID0gdW5kZWZpbmVkO1xuICAgIH07XG4gICAgUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZS5mb2N1c090aGVyQ29tbWVudCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgaWYgKCEhdGhpcy5yb290RWxlbWVudCkge1xuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNvbW1lbnRFbCA9IF90aGlzLnJvb3RFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCJ0ZXh0YXJlYVwiKTtcbiAgICAgICAgICAgICAgICBpZiAoISFjb21tZW50RWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tbWVudEVsLmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgMTApO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBRdWVzdGlvblNlbGVjdEJhc2UucHJvdG90eXBlLm9uVmFsdWVDaGFuZ2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBfc3VwZXIucHJvdG90eXBlLm9uVmFsdWVDaGFuZ2VkLmNhbGwodGhpcyk7XG4gICAgICAgIGlmICghdGhpcy5pc0Rlc2lnbk1vZGUgJiYgIXRoaXMucHJldklzT3RoZXJTZWxlY3RlZCAmJiB0aGlzLmlzT3RoZXJTZWxlY3RlZCkge1xuICAgICAgICAgICAgdGhpcy5mb2N1c090aGVyQ29tbWVudCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJldklzT3RoZXJTZWxlY3RlZCA9IHRoaXMuaXNPdGhlclNlbGVjdGVkO1xuICAgIH07XG4gICAgUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZS5nZXREZWZhdWx0SXRlbUNvbXBvbmVudCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZSwgXCJpdGVtQ29tcG9uZW50XCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSBuYW1lIG9mIGEgY29tcG9uZW50IHVzZWQgdG8gcmVuZGVyIGl0ZW1zLlxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaXRlbUNvbXBvbmVudFwiLCB0aGlzLmdldERlZmF1bHRJdGVtQ29tcG9uZW50KCkpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaXRlbUNvbXBvbmVudFwiLCB2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBRdWVzdGlvblNlbGVjdEJhc2UucHJvdG90eXBlLnVwZGF0ZUNzc0NsYXNzZXMgPSBmdW5jdGlvbiAocmVzLCBjc3MpIHtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS51cGRhdGVDc3NDbGFzc2VzLmNhbGwodGhpcywgcmVzLCBjc3MpO1xuICAgICAgICBpZiAoISF0aGlzLmRyb3Bkb3duTGlzdE1vZGVsKSB7XG4gICAgICAgICAgICB2YXIgbGlzdENzc0NsYXNzZXMgPSB7fTtcbiAgICAgICAgICAgIE9iamVjdChfdXRpbHNfdXRpbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19bXCJtZXJnZVZhbHVlc1wiXSkoY3NzLmxpc3QsIGxpc3RDc3NDbGFzc2VzKTtcbiAgICAgICAgICAgIE9iamVjdChfdXRpbHNfdXRpbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19bXCJtZXJnZVZhbHVlc1wiXSkocmVzLmxpc3QsIGxpc3RDc3NDbGFzc2VzKTtcbiAgICAgICAgICAgIHJlc1tcImxpc3RcIl0gPSBsaXN0Q3NzQ2xhc3NlcztcbiAgICAgICAgfVxuICAgIH07XG4gICAgUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZS5jYWxjQ3NzQ2xhc3NlcyA9IGZ1bmN0aW9uIChjc3MpIHtcbiAgICAgICAgdmFyIGNsYXNzZXMgPSBfc3VwZXIucHJvdG90eXBlLmNhbGNDc3NDbGFzc2VzLmNhbGwodGhpcywgY3NzKTtcbiAgICAgICAgaWYgKHRoaXMuZHJvcGRvd25MaXN0TW9kZWwpIHtcbiAgICAgICAgICAgIHRoaXMuZHJvcGRvd25MaXN0TW9kZWwudXBkYXRlQ3NzQ2xhc3NlcyhjbGFzc2VzLnBvcHVwLCBjbGFzc2VzLmxpc3QpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbGFzc2VzO1xuICAgIH07XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicHJvcGVydHlcIl0pKHsgb25TZXQ6IGZ1bmN0aW9uIChuZXdWYWwsIHRhcmdldCkge1xuICAgICAgICAgICAgICAgIHRhcmdldC5vblNlbGVjdGVkSXRlbVZhbHVlc0NoYW5nZWRIYW5kbGVyKG5ld1ZhbCk7XG4gICAgICAgICAgICB9IH0pXG4gICAgXSwgUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZSwgXCJzZWxlY3RlZEl0ZW1WYWx1ZXNcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJwcm9wZXJ0eVwiXSkoKVxuICAgIF0sIFF1ZXN0aW9uU2VsZWN0QmFzZS5wcm90b3R5cGUsIFwic2VwYXJhdGVTcGVjaWFsQ2hvaWNlc1wiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QoX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInByb3BlcnR5XCJdKSh7IGxvY2FsaXphYmxlOiB0cnVlIH0pXG4gICAgXSwgUXVlc3Rpb25TZWxlY3RCYXNlLnByb3RvdHlwZSwgXCJvdGhlclBsYWNlaG9sZGVyXCIsIHZvaWQgMCk7XG4gICAgcmV0dXJuIFF1ZXN0aW9uU2VsZWN0QmFzZTtcbn0oX3F1ZXN0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJRdWVzdGlvblwiXSkpO1xuXG4vKipcbiAqIEEgYmFzZSBjbGFzcyBmb3IgbXVsdGlwbGUtc2VsZWN0aW9uIHF1ZXN0aW9uIHR5cGVzIHRoYXQgY2FuIGRpc3BsYXkgY2hvaWNlIGl0ZW1zIGluIG11bHRpcGxlIGNvbHVtbnMgKFtDaGVja2JveF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9xdWVzdGlvbmNoZWNrYm94bW9kZWwpLCBbUmFkaW9ncm91cF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9xdWVzdGlvbnJhZGlvZ3JvdXBtb2RlbCksIFtJbWFnZSBQaWNrZXJdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vcXVlc3Rpb25pbWFnZXBpY2tlcm1vZGVsKSkuXG4gKi9cbnZhciBRdWVzdGlvbkNoZWNrYm94QmFzZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoUXVlc3Rpb25DaGVja2JveEJhc2UsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gUXVlc3Rpb25DaGVja2JveEJhc2UobmFtZSkge1xuICAgICAgICByZXR1cm4gX3N1cGVyLmNhbGwodGhpcywgbmFtZSkgfHwgdGhpcztcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uQ2hlY2tib3hCYXNlLnByb3RvdHlwZSwgXCJjb2xDb3VudFwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXQgb3Igc2V0cyB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgdXNlZCB0byBhcnJhbmdlIGNob2ljZSBpdGVtcy5cbiAgICAgICAgICpcbiAgICAgICAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gMCBpZiB5b3Ugd2FudCB0byBkaXNwbGF5IGFsbCBpdGVtcyBpbiBvbmUgbGluZS4gVGhlIGRlZmF1bHQgdmFsdWUgZGVwZW5kcyBvbiB0aGUgYXZhaWxhYmxlIHdpZHRoLlxuICAgICAgICAgKiBAc2VlIHNlcGFyYXRlU3BlY2lhbENob2ljZXNcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNvbENvdW50XCIsIHRoaXMuaXNGbG93TGF5b3V0ID8gMCA6IDEpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKHZhbHVlIDwgMCB8fCB2YWx1ZSA+IDUgfHwgdGhpcy5pc0Zsb3dMYXlvdXQpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY29sQ291bnRcIiwgdmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy5jb2xDb3VudENoYW5nZWRDYWxsYmFjayk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBRdWVzdGlvbkNoZWNrYm94QmFzZS5wcm90b3R5cGUuY2xpY2tJdGVtSGFuZGxlciA9IGZ1bmN0aW9uIChpdGVtLCBjaGVja2VkKSB7XG4gICAgICAgIHZhciBuZXdWYWx1ZSA9IFtdLmNvbmNhdCh0aGlzLnJlbmRlcmVkVmFsdWUgfHwgW10pO1xuICAgICAgICB2YXIgaW5kZXggPSBuZXdWYWx1ZS5pbmRleE9mKGl0ZW0udmFsdWUpO1xuICAgICAgICBpZiAoY2hlY2tlZCkge1xuICAgICAgICAgICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgICAgICAgICAgIG5ld1ZhbHVlLnB1c2goaXRlbS52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgICAgIG5ld1ZhbHVlLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZW5kZXJlZFZhbHVlID0gbmV3VmFsdWU7XG4gICAgfTtcbiAgICBRdWVzdGlvbkNoZWNrYm94QmFzZS5wcm90b3R5cGUub25QYXJlbnRDaGFuZ2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBfc3VwZXIucHJvdG90eXBlLm9uUGFyZW50Q2hhbmdlZC5jYWxsKHRoaXMpO1xuICAgICAgICBpZiAodGhpcy5pc0Zsb3dMYXlvdXQpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNvbENvdW50XCIsIG51bGwpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBRdWVzdGlvbkNoZWNrYm94QmFzZS5wcm90b3R5cGUub25QYXJlbnRRdWVzdGlvbkNoYW5nZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMub25WaXNpYmxlQ2hvaWNlc0NoYW5nZWQoKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uQ2hlY2tib3hCYXNlLnByb3RvdHlwZS5nZXRTZWFyY2hhYmxlSXRlbVZhbHVlS2V5cyA9IGZ1bmN0aW9uIChrZXlzKSB7XG4gICAgICAgIGtleXMucHVzaChcImNob2ljZXNcIik7XG4gICAgfTtcbiAgICByZXR1cm4gUXVlc3Rpb25DaGVja2JveEJhc2U7XG59KFF1ZXN0aW9uU2VsZWN0QmFzZSkpO1xuXG5mdW5jdGlvbiBjaGVja0NvcHlQcm9wVmlzaWJpbGl0eShvYmosIG1vZGUpIHtcbiAgICB2YXIgX2E7XG4gICAgaWYgKCFvYmopXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBpZiAoISFvYmoudGVtcGxhdGVRdWVzdGlvbikge1xuICAgICAgICB2YXIgZGF0YSA9IChfYSA9IG9iai5jb2xPd25lcikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmRhdGE7XG4gICAgICAgIG9iaiA9IG9iai50ZW1wbGF0ZVF1ZXN0aW9uO1xuICAgICAgICBpZiAoIW9iai5nZXRDYXJyeUZvcndhcmRRdWVzdGlvbihkYXRhKSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIG9iai5jYXJyeUZvcndhcmRRdWVzdGlvblR5cGUgPT09IG1vZGU7XG59XG5fanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiU2VyaWFsaXplclwiXS5hZGRDbGFzcyhcInNlbGVjdGJhc2VcIiwgW1xuICAgIHsgbmFtZTogXCJzaG93Q29tbWVudEFyZWE6c3dpdGNoXCIsIGxheW91dDogXCJyb3dcIiwgdmlzaWJsZTogdHJ1ZSwgY2F0ZWdvcnk6IFwiZ2VuZXJhbFwiIH0sXG4gICAgXCJjaG9pY2VzRnJvbVF1ZXN0aW9uOnF1ZXN0aW9uX2NhcnJ5Zm9yd2FyZFwiLFxuICAgIHtcbiAgICAgICAgbmFtZTogXCJjaG9pY2VzOml0ZW12YWx1ZVtdXCIsIHVuaXF1ZVByb3BlcnR5OiBcInZhbHVlXCIsXG4gICAgICAgIGJhc2VWYWx1ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIF9zdXJ2ZXlTdHJpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bXCJzdXJ2ZXlMb2NhbGl6YXRpb25cIl0uZ2V0U3RyaW5nKFwiY2hvaWNlc19JdGVtXCIpO1xuICAgICAgICB9LFxuICAgICAgICBkZXBlbmRzT246IFwiY2hvaWNlc0Zyb21RdWVzdGlvblwiLFxuICAgICAgICB2aXNpYmxlSWY6IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgIHJldHVybiAhb2JqLmNob2ljZXNGcm9tUXVlc3Rpb247XG4gICAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICAgIG5hbWU6IFwiY2hvaWNlc0Zyb21RdWVzdGlvbk1vZGVcIixcbiAgICAgICAgZGVmYXVsdDogXCJhbGxcIixcbiAgICAgICAgY2hvaWNlczogW1wiYWxsXCIsIFwic2VsZWN0ZWRcIiwgXCJ1bnNlbGVjdGVkXCJdLFxuICAgICAgICBkZXBlbmRzT246IFwiY2hvaWNlc0Zyb21RdWVzdGlvblwiLFxuICAgICAgICB2aXNpYmxlSWY6IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgIHJldHVybiBjaGVja0NvcHlQcm9wVmlzaWJpbGl0eShvYmosIFwic2VsZWN0XCIpO1xuICAgICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgICBuYW1lOiBcImNob2ljZVZhbHVlc0Zyb21RdWVzdGlvblwiLFxuICAgICAgICBkZXBlbmRzT246IFwiY2hvaWNlc0Zyb21RdWVzdGlvblwiLFxuICAgICAgICB2aXNpYmxlSWY6IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgIHJldHVybiBjaGVja0NvcHlQcm9wVmlzaWJpbGl0eShvYmosIFwiYXJyYXlcIik7XG4gICAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICAgIG5hbWU6IFwiY2hvaWNlVGV4dHNGcm9tUXVlc3Rpb25cIixcbiAgICAgICAgZGVwZW5kc09uOiBcImNob2ljZXNGcm9tUXVlc3Rpb25cIixcbiAgICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICByZXR1cm4gY2hlY2tDb3B5UHJvcFZpc2liaWxpdHkob2JqLCBcImFycmF5XCIpO1xuICAgICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgICBuYW1lOiBcImNob2ljZXNPcmRlclwiLFxuICAgICAgICBkZWZhdWx0OiBcIm5vbmVcIixcbiAgICAgICAgY2hvaWNlczogW1wibm9uZVwiLCBcImFzY1wiLCBcImRlc2NcIiwgXCJyYW5kb21cIl0sXG4gICAgICAgIGRlcGVuZHNPbjogXCJjaG9pY2VzRnJvbVF1ZXN0aW9uXCIsXG4gICAgICAgIHZpc2libGVJZjogZnVuY3Rpb24gKG9iaikge1xuICAgICAgICAgICAgcmV0dXJuICFvYmouY2hvaWNlc0Zyb21RdWVzdGlvbjtcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgICAgbmFtZTogXCJjaG9pY2VzQnlVcmw6cmVzdGZ1bGxcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcImNob2ljZXNCeVVybFwiLFxuICAgICAgICBvbkdldFZhbHVlOiBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICByZXR1cm4gb2JqLmNob2ljZXNCeVVybC5nZXREYXRhKCk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uU2V0VmFsdWU6IGZ1bmN0aW9uIChvYmosIHZhbHVlKSB7XG4gICAgICAgICAgICBvYmouY2hvaWNlc0J5VXJsLnNldERhdGEodmFsdWUpO1xuICAgICAgICB9LFxuICAgIH0sXG4gICAgXCJoaWRlSWZDaG9pY2VzRW1wdHk6Ym9vbGVhblwiLFxuICAgIHtcbiAgICAgICAgbmFtZTogXCJjaG9pY2VzVmlzaWJsZUlmOmNvbmRpdGlvblwiLFxuICAgICAgICBkZXBlbmRzT246IFwiY2hvaWNlc0Zyb21RdWVzdGlvblwiLFxuICAgICAgICB2aXNpYmxlSWY6IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgIHJldHVybiAhb2JqLmNob2ljZXNGcm9tUXVlc3Rpb247XG4gICAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICAgIG5hbWU6IFwiY2hvaWNlc0VuYWJsZUlmOmNvbmRpdGlvblwiLFxuICAgICAgICBkZXBlbmRzT246IFwiY2hvaWNlc0Zyb21RdWVzdGlvblwiLFxuICAgICAgICB2aXNpYmxlSWY6IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgIHJldHVybiAhb2JqLmNob2ljZXNGcm9tUXVlc3Rpb247XG4gICAgICAgIH0sXG4gICAgfSxcbiAgICB7IG5hbWU6IFwic2VwYXJhdGVTcGVjaWFsQ2hvaWNlczpib29sZWFuXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcInNob3dPdGhlckl0ZW06Ym9vbGVhblwiLCBhbHRlcm5hdGl2ZU5hbWU6IFwiaGFzT3RoZXJcIiB9LFxuICAgIHsgbmFtZTogXCJzaG93Tm9uZUl0ZW06Ym9vbGVhblwiLCBhbHRlcm5hdGl2ZU5hbWU6IFwiaGFzTm9uZVwiIH0sXG4gICAge1xuICAgICAgICBuYW1lOiBcIm90aGVyUGxhY2Vob2xkZXJcIixcbiAgICAgICAgYWx0ZXJuYXRpdmVOYW1lOiBcIm90aGVyUGxhY2VIb2xkZXJcIixcbiAgICAgICAgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY090aGVyUGxhY2Vob2xkZXJcIixcbiAgICAgICAgZGVwZW5kc09uOiBcInNob3dPdGhlckl0ZW1cIixcbiAgICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICByZXR1cm4gb2JqLmhhc090aGVyO1xuICAgICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgICBuYW1lOiBcIm5vbmVUZXh0XCIsXG4gICAgICAgIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NOb25lVGV4dFwiLFxuICAgICAgICBkZXBlbmRzT246IFwic2hvd05vbmVJdGVtXCIsXG4gICAgICAgIHZpc2libGVJZjogZnVuY3Rpb24gKG9iaikge1xuICAgICAgICAgICAgcmV0dXJuIG9iai5oYXNOb25lO1xuICAgICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgICBuYW1lOiBcIm90aGVyVGV4dFwiLFxuICAgICAgICBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jT3RoZXJUZXh0XCIsXG4gICAgICAgIGRlcGVuZHNPbjogXCJzaG93T3RoZXJJdGVtXCIsXG4gICAgICAgIHZpc2libGVJZjogZnVuY3Rpb24gKG9iaikge1xuICAgICAgICAgICAgcmV0dXJuIG9iai5oYXNPdGhlcjtcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgICAgbmFtZTogXCJvdGhlckVycm9yVGV4dFwiLFxuICAgICAgICBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jT3RoZXJFcnJvclRleHRcIixcbiAgICAgICAgZGVwZW5kc09uOiBcInNob3dPdGhlckl0ZW1cIixcbiAgICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICByZXR1cm4gb2JqLmhhc090aGVyO1xuICAgICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgICBuYW1lOiBcInN0b3JlT3RoZXJzQXNDb21tZW50XCIsXG4gICAgICAgIGRlZmF1bHQ6IFwiZGVmYXVsdFwiLFxuICAgICAgICBjaG9pY2VzOiBbXCJkZWZhdWx0XCIsIHRydWUsIGZhbHNlXSxcbiAgICAgICAgdmlzaWJsZTogZmFsc2UsXG4gICAgfSxcbiAgICAvLyB7IG5hbWU6IFwiaXRlbUNvbXBvbmVudFwiLCB2aXNpYmxlOiBmYWxzZSB9XG5dLCBudWxsLCBcInF1ZXN0aW9uXCIpO1xuX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlNlcmlhbGl6ZXJcIl0uYWRkQ2xhc3MoXCJjaGVja2JveGJhc2VcIiwgW1xuICAgIHtcbiAgICAgICAgbmFtZTogXCJjb2xDb3VudDpudW1iZXJcIixcbiAgICAgICAgZGVmYXVsdDogMSxcbiAgICAgICAgY2hvaWNlczogWzAsIDEsIDIsIDMsIDQsIDVdLFxuICAgICAgICBsYXlvdXQ6IFwicm93XCIsXG4gICAgfVxuXSwgbnVsbCwgXCJzZWxlY3RiYXNlXCIpO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3F1ZXN0aW9uX2Jvb2xlYW4udHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9xdWVzdGlvbl9ib29sZWFuLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogUXVlc3Rpb25Cb29sZWFuTW9kZWwgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUXVlc3Rpb25Cb29sZWFuTW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBRdWVzdGlvbkJvb2xlYW5Nb2RlbDsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3F1ZXN0aW9uZmFjdG9yeV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9xdWVzdGlvbmZhY3RvcnkgKi8gXCIuL3NyYy9xdWVzdGlvbmZhY3RvcnkudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vanNvbm9iamVjdCAqLyBcIi4vc3JjL2pzb25vYmplY3QudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3F1ZXN0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3F1ZXN0aW9uICovIFwiLi9zcmMvcXVlc3Rpb24udHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3V0aWxzX2Nzc0NsYXNzQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi91dGlscy9jc3NDbGFzc0J1aWxkZXIgKi8gXCIuL3NyYy91dGlscy9jc3NDbGFzc0J1aWxkZXIudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3V0aWxzX3V0aWxzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3V0aWxzL3V0aWxzICovIFwiLi9zcmMvdXRpbHMvdXRpbHMudHNcIik7XG52YXIgX19leHRlbmRzID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbnZhciBfX2RlY29yYXRlID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn07XG5cblxuXG5cblxuLyoqXG4gKiBBIGNsYXNzIHRoYXQgZGVzY3JpYmVzIHRoZSBZZXMvTm8gKEJvb2xlYW4pIHF1ZXN0aW9uIHR5cGUuXG4gKlxuICogW1ZpZXcgRGVtb10oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZXhhbXBsZXMvcXVlc3Rpb250eXBlLWJvb2xlYW4vIChsaW5rU3R5bGUpKVxuICovXG52YXIgUXVlc3Rpb25Cb29sZWFuTW9kZWwgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFF1ZXN0aW9uQm9vbGVhbk1vZGVsLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFF1ZXN0aW9uQm9vbGVhbk1vZGVsKG5hbWUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbmFtZSkgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJsYWJlbEZhbHNlXCIsIF90aGlzLCB0cnVlLCBcImJvb2xlYW5VbmNoZWNrZWRMYWJlbFwiKTtcbiAgICAgICAgX3RoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJsYWJlbFRydWVcIiwgX3RoaXMsIHRydWUsIFwiYm9vbGVhbkNoZWNrZWRMYWJlbFwiKTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBRdWVzdGlvbkJvb2xlYW5Nb2RlbC5wcm90b3R5cGUuZ2V0VHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIFwiYm9vbGVhblwiO1xuICAgIH07XG4gICAgUXVlc3Rpb25Cb29sZWFuTW9kZWwucHJvdG90eXBlLmlzTGF5b3V0VHlwZVN1cHBvcnRlZCA9IGZ1bmN0aW9uIChsYXlvdXRUeXBlKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG4gICAgUXVlc3Rpb25Cb29sZWFuTW9kZWwucHJvdG90eXBlLnN1cHBvcnRHb05leHRQYWdlQXV0b21hdGljID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJBcyAhPT0gXCJjaGVja2JveFwiO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uQm9vbGVhbk1vZGVsLnByb3RvdHlwZSwgXCJpc0luZGV0ZXJtaW5hdGVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlzRW1wdHkoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbkJvb2xlYW5Nb2RlbC5wcm90b3R5cGUsIFwiaGFzVGl0bGVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uQm9vbGVhbk1vZGVsLnByb3RvdHlwZSwgXCJib29sZWFuVmFsdWVcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogR2V0cyBvciBzZXRzIHRoZSBxdWVzdGlvbiB2YWx1ZSBhcyBhIEJvb2xlYW4gdmFsdWUuXG4gICAgICAgICAqXG4gICAgICAgICAqIElmIHlvdSBzZXQgdGhlIGB2YWx1ZVRydWVgIGFuZCBgdmFsdWVGYWxzZWAgcHJvcGVydGllcywgdGhlIGB2YWx1ZWAgcHJvcGVydHkgY29udGFpbnMgdGhlaXIgdmFsdWVzIGluc3RlYWQgb2YgQm9vbGVhbiB2YWx1ZXMuIFRoaXMgbWF5IGJlIGluY29udmVuaWVudCB3aGVuIHlvdSBvcGVyYXRlIHRoZSBxdWVzdGlvbiB2YWx1ZSBpbiBjb2RlLiBUbyBhY2Nlc3MgdGhlIHN0YW5kYXJkIEJvb2xlYW4gdmFsdWVzLCB1c2UgdGhlIGBib29sZWFuVmFsdWVgIHByb3BlcnR5LlxuICAgICAgICAgKiBAc2VlIHZhbHVlVHJ1ZVxuICAgICAgICAgKiBAc2VlIHZhbHVlRmFsc2VcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNFbXB0eSgpKVxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUgPT0gdGhpcy5nZXRWYWx1ZVRydWUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc1JlYWRPbmx5IHx8IHRoaXMuaXNEZXNpZ25Nb2RlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZXRCb29sZWFuVmFsdWUodmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbkJvb2xlYW5Nb2RlbC5wcm90b3R5cGUsIFwiY2hlY2tlZFZhbHVlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLmJvb2xlYW5WYWx1ZTsgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7IHRoaXMuYm9vbGVhblZhbHVlID0gdmFsOyB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUXVlc3Rpb25Cb29sZWFuTW9kZWwucHJvdG90eXBlLnNldEJvb2xlYW5WYWx1ZSA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNWYWx1ZUVtcHR5KHZhbCkpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5ib29sZWFuVmFsdWVSZW5kZXJlZCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsID09IHRydWUgPyB0aGlzLmdldFZhbHVlVHJ1ZSgpIDogdGhpcy5nZXRWYWx1ZUZhbHNlKCk7XG4gICAgICAgICAgICB0aGlzLmJvb2xlYW5WYWx1ZVJlbmRlcmVkID0gdmFsO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25Cb29sZWFuTW9kZWwucHJvdG90eXBlLCBcImRlZmF1bHRWYWx1ZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImRlZmF1bHRWYWx1ZVwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICBpZiAodmFsID09PSB0cnVlKVxuICAgICAgICAgICAgICAgIHZhbCA9IFwidHJ1ZVwiO1xuICAgICAgICAgICAgaWYgKHZhbCA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgdmFsID0gXCJmYWxzZVwiO1xuICAgICAgICAgICAgaWYgKHZhbCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHZhbCA9IFwiaW5kZXRlcm1pbmF0ZVwiO1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiZGVmYXVsdFZhbHVlXCIsIHZhbCk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlV2l0aERlZmF1bHRzKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBRdWVzdGlvbkJvb2xlYW5Nb2RlbC5wcm90b3R5cGUuZ2V0RGVmYXVsdFZhbHVlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5kZWZhdWx0VmFsdWUgPT0gXCJpbmRldGVybWluYXRlXCIpXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgaWYgKHRoaXMuZGVmYXVsdFZhbHVlID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFZhbHVlID09IFwidHJ1ZVwiXG4gICAgICAgICAgICA/IHRoaXMuZ2V0VmFsdWVUcnVlKClcbiAgICAgICAgICAgIDogdGhpcy5nZXRWYWx1ZUZhbHNlKCk7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25Cb29sZWFuTW9kZWwucHJvdG90eXBlLCBcImxvY1RpdGxlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgb3JpZ2luYWwgPSB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwidGl0bGVcIik7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNWYWx1ZUVtcHR5KHRoaXMubG9jTGFiZWwudGV4dCkgJiYgKHRoaXMuaXNWYWx1ZUVtcHR5KG9yaWdpbmFsLnRleHQpIHx8IHRoaXMuaXNMYWJlbFJlbmRlcmVkICYmICF0aGlzLnNob3dUaXRsZSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jTGFiZWw7XG4gICAgICAgICAgICByZXR1cm4gb3JpZ2luYWw7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25Cb29sZWFuTW9kZWwucHJvdG90eXBlLCBcImxhYmVsUmVuZGVyZWRBcmlhSURcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlzTGFiZWxSZW5kZXJlZCA/IHRoaXMuYXJpYVRpdGxlSWQgOiBudWxsO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uQm9vbGVhbk1vZGVsLnByb3RvdHlwZSwgXCJpc0xhYmVsUmVuZGVyZWRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpdGxlTG9jYXRpb24gPT09IFwiaGlkZGVuXCI7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25Cb29sZWFuTW9kZWwucHJvdG90eXBlLCBcImNhblJlbmRlckxhYmVsRGVzY3JpcHRpb25cIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlzTGFiZWxSZW5kZXJlZCAmJiB0aGlzLmhhc0Rlc2NyaXB0aW9uICYmICh0aGlzLmhhc0Rlc2NyaXB0aW9uVW5kZXJUaXRsZSB8fCB0aGlzLmhhc0Rlc2NyaXB0aW9uVW5kZXJJbnB1dCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25Cb29sZWFuTW9kZWwucHJvdG90eXBlLCBcImxhYmVsVHJ1ZVwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXRzIG9yIHNldHMgYSB0ZXh0IGxhYmVsIHRoYXQgY29ycmVzcG9uZHMgdG8gYSBwb3NpdGl2ZSBhbnN3ZXIuXG4gICAgICAgICAqXG4gICAgICAgICAqIERlZmF1bHQgdmFsdWU6IFwiWWVzXCJcbiAgICAgICAgICogQHNlZSB2YWx1ZVRydWVcbiAgICAgICAgICogQHNlZSB2YWx1ZUZhbHNlXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImxhYmVsVHJ1ZVwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImxhYmVsVHJ1ZVwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uQm9vbGVhbk1vZGVsLnByb3RvdHlwZSwgXCJsb2NMYWJlbFRydWVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwibGFiZWxUcnVlXCIpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uQm9vbGVhbk1vZGVsLnByb3RvdHlwZSwgXCJpc0RldGVybWluYXRlZFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYm9vbGVhblZhbHVlICE9PSBudWxsO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uQm9vbGVhbk1vZGVsLnByb3RvdHlwZSwgXCJsYWJlbEZhbHNlXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldHMgb3Igc2V0cyBhIHRleHQgbGFiZWwgdGhhdCBjb3JyZXNwb25kcyB0byBhIG5lZ2F0aXZlIGFuc3dlci5cbiAgICAgICAgICpcbiAgICAgICAgICogRGVmYXVsdCB2YWx1ZTogXCJOb1wiXG4gICAgICAgICAqIEBzZWUgdmFsdWVUcnVlXG4gICAgICAgICAqIEBzZWUgdmFsdWVGYWxzZVxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJsYWJlbEZhbHNlXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwibGFiZWxGYWxzZVwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uQm9vbGVhbk1vZGVsLnByb3RvdHlwZSwgXCJsb2NMYWJlbEZhbHNlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcImxhYmVsRmFsc2VcIik7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBRdWVzdGlvbkJvb2xlYW5Nb2RlbC5wcm90b3R5cGUuZ2V0VmFsdWVUcnVlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZVRydWUgIT09IHVuZGVmaW5lZCA/IHRoaXMudmFsdWVUcnVlIDogdHJ1ZTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uQm9vbGVhbk1vZGVsLnByb3RvdHlwZS5nZXRWYWx1ZUZhbHNlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZUZhbHNlICE9PSB1bmRlZmluZWQgPyB0aGlzLnZhbHVlRmFsc2UgOiBmYWxzZTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uQm9vbGVhbk1vZGVsLnByb3RvdHlwZS5zZXREZWZhdWx0VmFsdWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzRGVmYXVsdFZhbHVlU2V0KFwidHJ1ZVwiLCB0aGlzLnZhbHVlVHJ1ZSkpXG4gICAgICAgICAgICB0aGlzLnNldEJvb2xlYW5WYWx1ZSh0cnVlKTtcbiAgICAgICAgaWYgKHRoaXMuaXNEZWZhdWx0VmFsdWVTZXQoXCJmYWxzZVwiLCB0aGlzLnZhbHVlRmFsc2UpKVxuICAgICAgICAgICAgdGhpcy5zZXRCb29sZWFuVmFsdWUoZmFsc2UpO1xuICAgICAgICBpZiAodGhpcy5kZWZhdWx0VmFsdWUgPT0gXCJpbmRldGVybWluYXRlXCIpXG4gICAgICAgICAgICB0aGlzLnNldEJvb2xlYW5WYWx1ZShudWxsKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uQm9vbGVhbk1vZGVsLnByb3RvdHlwZS5pc0RlZmF1bHRWYWx1ZVNldCA9IGZ1bmN0aW9uIChkZWZhdWx0VmFsdWVDaGVjaywgdmFsdWVUcnVlT3JGYWxzZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0VmFsdWUgPT0gZGVmYXVsdFZhbHVlQ2hlY2sgfHwgKHZhbHVlVHJ1ZU9yRmFsc2UgIT09IHVuZGVmaW5lZCAmJiB0aGlzLmRlZmF1bHRWYWx1ZSA9PT0gdmFsdWVUcnVlT3JGYWxzZSk7XG4gICAgfTtcbiAgICBRdWVzdGlvbkJvb2xlYW5Nb2RlbC5wcm90b3R5cGUuZ2V0RGlzcGxheVZhbHVlQ29yZSA9IGZ1bmN0aW9uIChrZXlzQXNUZXh0LCB2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUgPT0gdGhpcy5nZXRWYWx1ZVRydWUoKSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY0xhYmVsVHJ1ZS50ZXh0T3JIdG1sO1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NMYWJlbEZhbHNlLnRleHRPckh0bWw7XG4gICAgfTtcbiAgICBRdWVzdGlvbkJvb2xlYW5Nb2RlbC5wcm90b3R5cGUuZ2V0SXRlbUNzc1ZhbHVlID0gZnVuY3Rpb24gKGNzcykge1xuICAgICAgICByZXR1cm4gbmV3IF91dGlsc19jc3NDbGFzc0J1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcIkNzc0NsYXNzQnVpbGRlclwiXSgpXG4gICAgICAgICAgICAuYXBwZW5kKGNzcy5pdGVtKVxuICAgICAgICAgICAgLmFwcGVuZChjc3MuaXRlbU9uRXJyb3IsIHRoaXMuZXJyb3JzLmxlbmd0aCA+IDApXG4gICAgICAgICAgICAuYXBwZW5kKGNzcy5pdGVtRGlzYWJsZWQsIHRoaXMuaXNSZWFkT25seSlcbiAgICAgICAgICAgIC5hcHBlbmQoY3NzLml0ZW1Ib3ZlciwgIXRoaXMuaXNEZXNpZ25Nb2RlKVxuICAgICAgICAgICAgLmFwcGVuZChjc3MuaXRlbUNoZWNrZWQsICEhdGhpcy5ib29sZWFuVmFsdWUpXG4gICAgICAgICAgICAuYXBwZW5kKGNzcy5pdGVtSW5kZXRlcm1pbmF0ZSwgdGhpcy5ib29sZWFuVmFsdWUgPT09IG51bGwpXG4gICAgICAgICAgICAudG9TdHJpbmcoKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uQm9vbGVhbk1vZGVsLnByb3RvdHlwZS5nZXRJdGVtQ3NzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRJdGVtQ3NzVmFsdWUodGhpcy5jc3NDbGFzc2VzKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uQm9vbGVhbk1vZGVsLnByb3RvdHlwZS5nZXRDaGVja2JveEl0ZW1Dc3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEl0ZW1Dc3NWYWx1ZSh7XG4gICAgICAgICAgICBpdGVtOiB0aGlzLmNzc0NsYXNzZXMuY2hlY2tib3hJdGVtLFxuICAgICAgICAgICAgaXRlbU9uRXJyb3I6IHRoaXMuY3NzQ2xhc3Nlcy5jaGVja2JveEl0ZW1PbkVycm9yLFxuICAgICAgICAgICAgaXRlbURpc2FibGVkOiB0aGlzLmNzc0NsYXNzZXMuY2hlY2tib3hJdGVtRGlzYWJsZWQsXG4gICAgICAgICAgICBpdGVtQ2hlY2tlZDogdGhpcy5jc3NDbGFzc2VzLmNoZWNrYm94SXRlbUNoZWNrZWQsXG4gICAgICAgICAgICBpdGVtSW5kZXRlcm1pbmF0ZTogdGhpcy5jc3NDbGFzc2VzLmNoZWNrYm94SXRlbUluZGV0ZXJtaW5hdGVcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBRdWVzdGlvbkJvb2xlYW5Nb2RlbC5wcm90b3R5cGUuZ2V0TGFiZWxDc3MgPSBmdW5jdGlvbiAoY2hlY2tlZCkge1xuICAgICAgICByZXR1cm4gbmV3IF91dGlsc19jc3NDbGFzc0J1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcIkNzc0NsYXNzQnVpbGRlclwiXSgpXG4gICAgICAgICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5sYWJlbClcbiAgICAgICAgICAgIC5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLmRpc2FibGVkTGFiZWwsIHRoaXMuYm9vbGVhblZhbHVlID09PSAhY2hlY2tlZCB8fCB0aGlzLmlzUmVhZE9ubHkpXG4gICAgICAgICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5sYWJlbFRydWUsICF0aGlzLmlzSW5kZXRlcm1pbmF0ZSAmJiBjaGVja2VkID09PSB0cnVlKVxuICAgICAgICAgICAgLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMubGFiZWxGYWxzZSwgIXRoaXMuaXNJbmRldGVybWluYXRlICYmIGNoZWNrZWQgPT09IGZhbHNlKVxuICAgICAgICAgICAgLnRvU3RyaW5nKCk7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25Cb29sZWFuTW9kZWwucHJvdG90eXBlLCBcInN2Z0ljb25cIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmJvb2xlYW5WYWx1ZSAmJiB0aGlzLmNzc0NsYXNzZXMuc3ZnSWNvbkNoZWNrZWRJZClcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jc3NDbGFzc2VzLnN2Z0ljb25DaGVja2VkSWQ7XG4gICAgICAgICAgICBpZiAodGhpcy5ib29sZWFuVmFsdWUgPT09IG51bGwgJiYgdGhpcy5jc3NDbGFzc2VzLnN2Z0ljb25JbmRJZClcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jc3NDbGFzc2VzLnN2Z0ljb25JbmRJZDtcbiAgICAgICAgICAgIGlmICghdGhpcy5ib29sZWFuVmFsdWUgJiYgdGhpcy5jc3NDbGFzc2VzLnN2Z0ljb25VbmNoZWNrZWRJZClcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jc3NDbGFzc2VzLnN2Z0ljb25VbmNoZWNrZWRJZDtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNzc0NsYXNzZXMuc3ZnSWNvbklkO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uQm9vbGVhbk1vZGVsLnByb3RvdHlwZSwgXCJhbGxvd0NsaWNrXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pc0luZGV0ZXJtaW5hdGUgJiYgIXRoaXMuaXNJbnB1dFJlYWRPbmx5O1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUXVlc3Rpb25Cb29sZWFuTW9kZWwucHJvdG90eXBlLmdldENoZWNrZWRMYWJlbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuYm9vbGVhblZhbHVlID09PSB0cnVlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NMYWJlbFRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5ib29sZWFuVmFsdWUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NMYWJlbEZhbHNlO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBRdWVzdGlvbkJvb2xlYW5Nb2RlbC5wcm90b3R5cGUuc2V0UXVlc3Rpb25WYWx1ZSA9IGZ1bmN0aW9uIChuZXdWYWx1ZSwgdXBkYXRlSXNBbnN3ZXJlZCkge1xuICAgICAgICBpZiAodXBkYXRlSXNBbnN3ZXJlZCA9PT0gdm9pZCAwKSB7IHVwZGF0ZUlzQW5zd2VyZWQgPSB0cnVlOyB9XG4gICAgICAgIGlmIChuZXdWYWx1ZSA9PT0gXCJ0cnVlXCIgJiYgdGhpcy52YWx1ZVRydWUgIT09IFwidHJ1ZVwiKVxuICAgICAgICAgICAgbmV3VmFsdWUgPSB0cnVlO1xuICAgICAgICBpZiAobmV3VmFsdWUgPT09IFwiZmFsc2VcIiAmJiB0aGlzLnZhbHVlRmFsc2UgIT09IFwiZmFsc2VcIilcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gZmFsc2U7XG4gICAgICAgIGlmIChuZXdWYWx1ZSA9PT0gXCJpbmRldGVybWluYXRlXCIpXG4gICAgICAgICAgICBuZXdWYWx1ZSA9IG51bGw7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUuc2V0UXVlc3Rpb25WYWx1ZS5jYWxsKHRoaXMsIG5ld1ZhbHVlLCB1cGRhdGVJc0Fuc3dlcmVkKTtcbiAgICB9O1xuICAgIC8qICNyZWdpb24gd2ViLWJhc2VkIG1ldGhvZHMgKi9cbiAgICBRdWVzdGlvbkJvb2xlYW5Nb2RlbC5wcm90b3R5cGUub25MYWJlbENsaWNrID0gZnVuY3Rpb24gKGV2ZW50LCB2YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5hbGxvd0NsaWNrKSB7XG4gICAgICAgICAgICBPYmplY3QoX3V0aWxzX3V0aWxzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bXCJwcmV2ZW50RGVmYXVsdHNcIl0pKGV2ZW50KTtcbiAgICAgICAgICAgIHRoaXMuYm9vbGVhblZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgICBRdWVzdGlvbkJvb2xlYW5Nb2RlbC5wcm90b3R5cGUuY2FsY3VsYXRlQm9vbGVhblZhbHVlQnlFdmVudCA9IGZ1bmN0aW9uIChldmVudCwgaXNSaWdodENsaWNrKSB7XG4gICAgICAgIHZhciBpc1J0bCA9IGRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoZXZlbnQudGFyZ2V0KS5kaXJlY3Rpb24gPT0gXCJydGxcIjtcbiAgICAgICAgdGhpcy5ib29sZWFuVmFsdWUgPSBpc1J0bCA/ICFpc1JpZ2h0Q2xpY2sgOiBpc1JpZ2h0Q2xpY2s7XG4gICAgfTtcbiAgICBRdWVzdGlvbkJvb2xlYW5Nb2RlbC5wcm90b3R5cGUub25Td2l0Y2hDbGlja01vZGVsID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmFsbG93Q2xpY2spIHtcbiAgICAgICAgICAgIE9iamVjdChfdXRpbHNfdXRpbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1tcInByZXZlbnREZWZhdWx0c1wiXSkoZXZlbnQpO1xuICAgICAgICAgICAgdmFyIGlzUmlnaHRDbGljayA9IGV2ZW50Lm9mZnNldFggLyBldmVudC50YXJnZXQub2Zmc2V0V2lkdGggPiAwLjU7XG4gICAgICAgICAgICB0aGlzLmNhbGN1bGF0ZUJvb2xlYW5WYWx1ZUJ5RXZlbnQoZXZlbnQsIGlzUmlnaHRDbGljayk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgICBRdWVzdGlvbkJvb2xlYW5Nb2RlbC5wcm90b3R5cGUub25LZXlEb3duQ29yZSA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSBcIkFycm93TGVmdFwiIHx8IGV2ZW50LmtleSA9PT0gXCJBcnJvd1JpZ2h0XCIpIHtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVCb29sZWFuVmFsdWVCeUV2ZW50KGV2ZW50LCBldmVudC5rZXkgPT09IFwiQXJyb3dSaWdodFwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICAgIC8qICNlbmRyZWdpb24gKi9cbiAgICBRdWVzdGlvbkJvb2xlYW5Nb2RlbC5wcm90b3R5cGUuZ2V0UmFkaW9JdGVtQ2xhc3MgPSBmdW5jdGlvbiAoY3NzLCB2YWx1ZSkge1xuICAgICAgICB2YXIgY2xhc3NOYW1lID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAoY3NzLnJhZGlvSXRlbSkge1xuICAgICAgICAgICAgY2xhc3NOYW1lID0gY3NzLnJhZGlvSXRlbTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY3NzLnJhZGlvSXRlbUNoZWNrZWQgJiYgdmFsdWUgPT09IHRoaXMuYm9vbGVhblZhbHVlKSB7XG4gICAgICAgICAgICBjbGFzc05hbWUgPSAoY2xhc3NOYW1lID8gY2xhc3NOYW1lICsgXCIgXCIgOiBcIlwiKSArIGNzcy5yYWRpb0l0ZW1DaGVja2VkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbGFzc05hbWU7XG4gICAgfTtcbiAgICBRdWVzdGlvbkJvb2xlYW5Nb2RlbC5wcm90b3R5cGUuc3VwcG9ydFJlc3BvbnNpdmVuZXNzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uQm9vbGVhbk1vZGVsLnByb3RvdHlwZS5nZXRDb21wYWN0UmVuZGVyQXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBcInJhZGlvXCI7XG4gICAgfTtcbiAgICBRdWVzdGlvbkJvb2xlYW5Nb2RlbC5wcm90b3R5cGUuY3JlYXRlQWN0aW9uQ29udGFpbmVyID0gZnVuY3Rpb24gKGFsbG93QWRhcHRpdmVBY3Rpb25zKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLmNyZWF0ZUFjdGlvbkNvbnRhaW5lci5jYWxsKHRoaXMsIHRoaXMucmVuZGVyQXMgIT09IFwiY2hlY2tib3hcIik7XG4gICAgfTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJwcm9wZXJ0eVwiXSkoKVxuICAgIF0sIFF1ZXN0aW9uQm9vbGVhbk1vZGVsLnByb3RvdHlwZSwgXCJib29sZWFuVmFsdWVSZW5kZXJlZFwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QoX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcInByb3BlcnR5XCJdKSgpXG4gICAgXSwgUXVlc3Rpb25Cb29sZWFuTW9kZWwucHJvdG90eXBlLCBcInNob3dUaXRsZVwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QoX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcInByb3BlcnR5XCJdKSh7IGxvY2FsaXphYmxlOiB0cnVlIH0pXG4gICAgXSwgUXVlc3Rpb25Cb29sZWFuTW9kZWwucHJvdG90eXBlLCBcImxhYmVsXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wicHJvcGVydHlcIl0pKClcbiAgICBdLCBRdWVzdGlvbkJvb2xlYW5Nb2RlbC5wcm90b3R5cGUsIFwidmFsdWVUcnVlXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wicHJvcGVydHlcIl0pKClcbiAgICBdLCBRdWVzdGlvbkJvb2xlYW5Nb2RlbC5wcm90b3R5cGUsIFwidmFsdWVGYWxzZVwiLCB2b2lkIDApO1xuICAgIHJldHVybiBRdWVzdGlvbkJvb2xlYW5Nb2RlbDtcbn0oX3F1ZXN0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJRdWVzdGlvblwiXSkpO1xuXG5fanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiU2VyaWFsaXplclwiXS5hZGRDbGFzcyhcImJvb2xlYW5cIiwgW1xuICAgIHsgbmFtZTogXCJzaG93Q29tbWVudEFyZWE6c3dpdGNoXCIsIGxheW91dDogXCJyb3dcIiwgdmlzaWJsZTogdHJ1ZSwgY2F0ZWdvcnk6IFwiZ2VuZXJhbFwiIH0sXG4gICAgeyBuYW1lOiBcImxhYmVsOnRleHRcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY0xhYmVsXCIsIGlzU2VyaWFsaXphYmxlOiBmYWxzZSwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICB7XG4gICAgICAgIG5hbWU6IFwibGFiZWxUcnVlOnRleHRcIixcbiAgICAgICAgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY0xhYmVsVHJ1ZVwiLFxuICAgIH0sXG4gICAge1xuICAgICAgICBuYW1lOiBcImxhYmVsRmFsc2U6dGV4dFwiLFxuICAgICAgICBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jTGFiZWxGYWxzZVwiLFxuICAgIH0sXG4gICAgXCJ2YWx1ZVRydWVcIixcbiAgICBcInZhbHVlRmFsc2VcIixcbiAgICB7IG5hbWU6IFwicmVuZGVyQXNcIiwgZGVmYXVsdDogXCJkZWZhdWx0XCIsIHZpc2libGU6IGZhbHNlIH0sXG5dLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBRdWVzdGlvbkJvb2xlYW5Nb2RlbChcIlwiKTtcbn0sIFwicXVlc3Rpb25cIik7XG5fcXVlc3Rpb25mYWN0b3J5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJRdWVzdGlvbkZhY3RvcnlcIl0uSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImJvb2xlYW5cIiwgZnVuY3Rpb24gKG5hbWUpIHtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uQm9vbGVhbk1vZGVsKG5hbWUpO1xufSk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvcXVlc3Rpb25fYnV0dG9uZ3JvdXAudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvcXVlc3Rpb25fYnV0dG9uZ3JvdXAudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogQnV0dG9uR3JvdXBJdGVtVmFsdWUsIFF1ZXN0aW9uQnV0dG9uR3JvdXBNb2RlbCwgQnV0dG9uR3JvdXBJdGVtTW9kZWwgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQnV0dG9uR3JvdXBJdGVtVmFsdWVcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBCdXR0b25Hcm91cEl0ZW1WYWx1ZTsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUXVlc3Rpb25CdXR0b25Hcm91cE1vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUXVlc3Rpb25CdXR0b25Hcm91cE1vZGVsOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJCdXR0b25Hcm91cEl0ZW1Nb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEJ1dHRvbkdyb3VwSXRlbU1vZGVsOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9qc29ub2JqZWN0ICovIFwiLi9zcmMvanNvbm9iamVjdC50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfaXRlbXZhbHVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2l0ZW12YWx1ZSAqLyBcIi4vc3JjL2l0ZW12YWx1ZS50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcXVlc3Rpb25fYmFzZXNlbGVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9xdWVzdGlvbl9iYXNlc2VsZWN0ICovIFwiLi9zcmMvcXVlc3Rpb25fYmFzZXNlbGVjdC50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdXRpbHNfY3NzQ2xhc3NCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3V0aWxzL2Nzc0NsYXNzQnVpbGRlciAqLyBcIi4vc3JjL3V0aWxzL2Nzc0NsYXNzQnVpbGRlci50c1wiKTtcbnZhciBfX2V4dGVuZHMgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xudmFyIF9fZGVjb3JhdGUgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufTtcblxuXG5cblxudmFyIEJ1dHRvbkdyb3VwSXRlbVZhbHVlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhCdXR0b25Hcm91cEl0ZW1WYWx1ZSwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBCdXR0b25Hcm91cEl0ZW1WYWx1ZSh2YWx1ZSwgdGV4dCwgdHlwZU5hbWUpIHtcbiAgICAgICAgaWYgKHRleHQgPT09IHZvaWQgMCkgeyB0ZXh0ID0gbnVsbDsgfVxuICAgICAgICBpZiAodHlwZU5hbWUgPT09IHZvaWQgMCkgeyB0eXBlTmFtZSA9IFwiYnV0dG9uZ3JvdXBpdGVtdmFsdWVcIjsgfVxuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCB2YWx1ZSwgdGV4dCwgdHlwZU5hbWUpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLnR5cGVOYW1lID0gdHlwZU5hbWU7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgQnV0dG9uR3JvdXBJdGVtVmFsdWUucHJvdG90eXBlLmdldFR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMudHlwZU5hbWUgPyB0aGlzLnR5cGVOYW1lIDogXCJidXR0b25ncm91cGl0ZW12YWx1ZVwiO1xuICAgIH07XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicHJvcGVydHlcIl0pKClcbiAgICBdLCBCdXR0b25Hcm91cEl0ZW1WYWx1ZS5wcm90b3R5cGUsIFwiaWNvbk5hbWVcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJwcm9wZXJ0eVwiXSkoKVxuICAgIF0sIEJ1dHRvbkdyb3VwSXRlbVZhbHVlLnByb3RvdHlwZSwgXCJpY29uU2l6ZVwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QoX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInByb3BlcnR5XCJdKSgpXG4gICAgXSwgQnV0dG9uR3JvdXBJdGVtVmFsdWUucHJvdG90eXBlLCBcInNob3dDYXB0aW9uXCIsIHZvaWQgMCk7XG4gICAgcmV0dXJuIEJ1dHRvbkdyb3VwSXRlbVZhbHVlO1xufShfaXRlbXZhbHVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJJdGVtVmFsdWVcIl0pKTtcblxuLyoqXG4gKiBBIE1vZGVsIGZvciBhIGJ1dHRvbiBncm91cCBxdWVzdGlvbi5cbiAqL1xudmFyIFF1ZXN0aW9uQnV0dG9uR3JvdXBNb2RlbCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoUXVlc3Rpb25CdXR0b25Hcm91cE1vZGVsLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFF1ZXN0aW9uQnV0dG9uR3JvdXBNb2RlbChuYW1lKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIuY2FsbCh0aGlzLCBuYW1lKSB8fCB0aGlzO1xuICAgIH1cbiAgICBRdWVzdGlvbkJ1dHRvbkdyb3VwTW9kZWwucHJvdG90eXBlLmdldFR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBcImJ1dHRvbmdyb3VwXCI7XG4gICAgfTtcbiAgICBRdWVzdGlvbkJ1dHRvbkdyb3VwTW9kZWwucHJvdG90eXBlLmdldEl0ZW1WYWx1ZVR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBcImJ1dHRvbmdyb3VwaXRlbXZhbHVlXCI7XG4gICAgfTtcbiAgICBRdWVzdGlvbkJ1dHRvbkdyb3VwTW9kZWwucHJvdG90eXBlLnN1cHBvcnRPdGhlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gICAgcmV0dXJuIFF1ZXN0aW9uQnV0dG9uR3JvdXBNb2RlbDtcbn0oX3F1ZXN0aW9uX2Jhc2VzZWxlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIlF1ZXN0aW9uQ2hlY2tib3hCYXNlXCJdKSk7XG5cbl9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJTZXJpYWxpemVyXCJdLmFkZENsYXNzKFwiYnV0dG9uZ3JvdXBcIiwgW1xuICAgIHtcbiAgICAgICAgbmFtZTogXCJjaG9pY2VzOmJ1dHRvbmdyb3VwaXRlbXZhbHVlW11cIixcbiAgICB9LFxuXSwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25CdXR0b25Hcm91cE1vZGVsKFwiXCIpO1xufSwgXCJjaGVja2JveGJhc2VcIik7XG5fanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiU2VyaWFsaXplclwiXS5hZGRDbGFzcyhcImJ1dHRvbmdyb3VwaXRlbXZhbHVlXCIsIFtcbiAgICB7IG5hbWU6IFwic2hvd0NhcHRpb246Ym9vbGVhblwiLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgeyBuYW1lOiBcImljb25OYW1lOnRleHRcIiB9LFxuICAgIHsgbmFtZTogXCJpY29uU2l6ZTpudW1iZXJcIiB9LFxuXSwgZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiBuZXcgQnV0dG9uR3JvdXBJdGVtVmFsdWUodmFsdWUpOyB9LCBcIml0ZW12YWx1ZVwiKTtcbi8vIFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiYnV0dG9uZ3JvdXBcIiwgbmFtZSA9PiB7XG4vLyAgIHZhciBxID0gbmV3IFF1ZXN0aW9uQnV0dG9uR3JvdXBNb2RlbChuYW1lKTtcbi8vICAgcS5jaG9pY2VzID0gUXVlc3Rpb25GYWN0b3J5LkRlZmF1bHRDaG9pY2VzO1xuLy8gICByZXR1cm4gcTtcbi8vIH0pO1xudmFyIEJ1dHRvbkdyb3VwSXRlbU1vZGVsID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEJ1dHRvbkdyb3VwSXRlbU1vZGVsKHF1ZXN0aW9uLCBpdGVtLCBpbmRleCkge1xuICAgICAgICB0aGlzLnF1ZXN0aW9uID0gcXVlc3Rpb247XG4gICAgICAgIHRoaXMuaXRlbSA9IGl0ZW07XG4gICAgICAgIHRoaXMuaW5kZXggPSBpbmRleDtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJ1dHRvbkdyb3VwSXRlbU1vZGVsLnByb3RvdHlwZSwgXCJ2YWx1ZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXRlbS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCdXR0b25Hcm91cEl0ZW1Nb2RlbC5wcm90b3R5cGUsIFwiaWNvbk5hbWVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLml0ZW0uaWNvbk5hbWU7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQnV0dG9uR3JvdXBJdGVtTW9kZWwucHJvdG90eXBlLCBcImljb25TaXplXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pdGVtLmljb25TaXplIHx8IDI0O1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJ1dHRvbkdyb3VwSXRlbU1vZGVsLnByb3RvdHlwZSwgXCJjYXB0aW9uXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pdGVtLmxvY1RleHQ7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQnV0dG9uR3JvdXBJdGVtTW9kZWwucHJvdG90eXBlLCBcInNob3dDYXB0aW9uXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pdGVtLnNob3dDYXB0aW9uIHx8IHRoaXMuaXRlbS5zaG93Q2FwdGlvbiA9PT0gdW5kZWZpbmVkO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJ1dHRvbkdyb3VwSXRlbU1vZGVsLnByb3RvdHlwZSwgXCJpc1JlcXVpcmVkXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5pc1JlcXVpcmVkO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJ1dHRvbkdyb3VwSXRlbU1vZGVsLnByb3RvdHlwZSwgXCJzZWxlY3RlZFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucXVlc3Rpb24uaXNJdGVtU2VsZWN0ZWQodGhpcy5pdGVtKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCdXR0b25Hcm91cEl0ZW1Nb2RlbC5wcm90b3R5cGUsIFwicmVhZE9ubHlcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLmlzSW5wdXRSZWFkT25seSB8fCAhdGhpcy5pdGVtLmlzRW5hYmxlZDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCdXR0b25Hcm91cEl0ZW1Nb2RlbC5wcm90b3R5cGUsIFwibmFtZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucXVlc3Rpb24ubmFtZSArIFwiX1wiICsgdGhpcy5xdWVzdGlvbi5pZDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCdXR0b25Hcm91cEl0ZW1Nb2RlbC5wcm90b3R5cGUsIFwiaWRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLmlucHV0SWQgKyBcIl9cIiArIHRoaXMuaW5kZXg7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQnV0dG9uR3JvdXBJdGVtTW9kZWwucHJvdG90eXBlLCBcImhhc0Vycm9yc1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucXVlc3Rpb24uZXJyb3JzLmxlbmd0aCA+IDA7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQnV0dG9uR3JvdXBJdGVtTW9kZWwucHJvdG90eXBlLCBcImRlc2NyaWJlZEJ5XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5lcnJvcnMubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgID8gdGhpcy5xdWVzdGlvbi5pZCArIFwiX2Vycm9yc1wiXG4gICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJ1dHRvbkdyb3VwSXRlbU1vZGVsLnByb3RvdHlwZSwgXCJsYWJlbENsYXNzXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IF91dGlsc19jc3NDbGFzc0J1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcIkNzc0NsYXNzQnVpbGRlclwiXSgpXG4gICAgICAgICAgICAgICAgLmFwcGVuZCh0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaXRlbSlcbiAgICAgICAgICAgICAgICAuYXBwZW5kKHRoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pdGVtU2VsZWN0ZWQsIHRoaXMuc2VsZWN0ZWQpXG4gICAgICAgICAgICAgICAgLmFwcGVuZCh0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaXRlbUhvdmVyLCAhdGhpcy5yZWFkT25seSAmJiAhdGhpcy5zZWxlY3RlZClcbiAgICAgICAgICAgICAgICAuYXBwZW5kKHRoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pdGVtRGlzYWJsZWQsIHRoaXMucXVlc3Rpb24uaXNSZWFkT25seSB8fCAhdGhpcy5pdGVtLmlzRW5hYmxlZClcbiAgICAgICAgICAgICAgICAudG9TdHJpbmcoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCdXR0b25Hcm91cEl0ZW1Nb2RlbC5wcm90b3R5cGUsIFwiY3NzXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLmxhYmVsQ2xhc3MsXG4gICAgICAgICAgICAgICAgaWNvbjogdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLml0ZW1JY29uLFxuICAgICAgICAgICAgICAgIGNvbnRyb2w6IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pdGVtQ29udHJvbCxcbiAgICAgICAgICAgICAgICBjYXB0aW9uOiB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaXRlbUNhcHRpb24sXG4gICAgICAgICAgICAgICAgZGVjb3JhdG9yOiB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaXRlbURlY29yYXRvcixcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBCdXR0b25Hcm91cEl0ZW1Nb2RlbC5wcm90b3R5cGUub25DaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMucXVlc3Rpb24ucmVuZGVyZWRWYWx1ZSA9IHRoaXMuaXRlbS52YWx1ZTtcbiAgICB9O1xuICAgIHJldHVybiBCdXR0b25Hcm91cEl0ZW1Nb2RlbDtcbn0oKSk7XG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9xdWVzdGlvbl9jaGVja2JveC50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9xdWVzdGlvbl9jaGVja2JveC50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBRdWVzdGlvbkNoZWNrYm94TW9kZWwgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUXVlc3Rpb25DaGVja2JveE1vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUXVlc3Rpb25DaGVja2JveE1vZGVsOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9qc29ub2JqZWN0ICovIFwiLi9zcmMvanNvbm9iamVjdC50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcXVlc3Rpb25mYWN0b3J5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3F1ZXN0aW9uZmFjdG9yeSAqLyBcIi4vc3JjL3F1ZXN0aW9uZmFjdG9yeS50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcXVlc3Rpb25fYmFzZXNlbGVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9xdWVzdGlvbl9iYXNlc2VsZWN0ICovIFwiLi9zcmMvcXVlc3Rpb25fYmFzZXNlbGVjdC50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfaGVscGVyc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9oZWxwZXJzICovIFwiLi9zcmMvaGVscGVycy50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfaXRlbXZhbHVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2l0ZW12YWx1ZSAqLyBcIi4vc3JjL2l0ZW12YWx1ZS50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdXRpbHNfY3NzQ2xhc3NCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3V0aWxzL2Nzc0NsYXNzQnVpbGRlciAqLyBcIi4vc3JjL3V0aWxzL2Nzc0NsYXNzQnVpbGRlci50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZXJyb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZXJyb3IgKi8gXCIuL3NyYy9lcnJvci50c1wiKTtcbnZhciBfX2V4dGVuZHMgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xuXG5cblxuXG5cblxuXG4vKipcbiAqIEEgY2xhc3MgdGhhdCBkZXNjcmliZXMgdGhlIENoZWNrYm94ZXMgcXVlc3Rpb24gdHlwZS5cbiAqXG4gKiBbVmlldyBEZW1vXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9leGFtcGxlcy9xdWVzdGlvbnR5cGUtY2hlY2tib3gvIChsaW5rU3R5bGUpKVxuICovXG52YXIgUXVlc3Rpb25DaGVja2JveE1vZGVsID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhRdWVzdGlvbkNoZWNrYm94TW9kZWwsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gUXVlc3Rpb25DaGVja2JveE1vZGVsKG5hbWUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbmFtZSkgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuc2VsZWN0QWxsSXRlbVZhbHVlID0gbmV3IF9pdGVtdmFsdWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1tcIkl0ZW1WYWx1ZVwiXShcInNlbGVjdGFsbFwiKTtcbiAgICAgICAgX3RoaXMuaW52aXNpYmxlT2xkVmFsdWVzID0ge307XG4gICAgICAgIF90aGlzLmlzQ2hhbmdpbmdWYWx1ZU9uQ2xlYXJJbmNvcnJlY3QgPSBmYWxzZTtcbiAgICAgICAgdmFyIHNlbGVjdEFsbEl0ZW1UZXh0ID0gX3RoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJzZWxlY3RBbGxUZXh0XCIsIF90aGlzLnNlbGVjdEFsbEl0ZW0sIHRydWUsIFwic2VsZWN0QWxsSXRlbVRleHRcIik7XG4gICAgICAgIF90aGlzLnNlbGVjdEFsbEl0ZW0ubG9jT3duZXIgPSBfdGhpcztcbiAgICAgICAgX3RoaXMuc2VsZWN0QWxsSXRlbS5zZXRMb2NUZXh0KHNlbGVjdEFsbEl0ZW1UZXh0KTtcbiAgICAgICAgX3RoaXMucmVnaXN0ZXJQcm9wZXJ0eUNoYW5nZWRIYW5kbGVycyhbXCJzaG93U2VsZWN0QWxsSXRlbVwiLCBcInNlbGVjdEFsbFRleHRcIl0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLm9uVmlzaWJsZUNob2ljZXNDaGFuZ2VkKCk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFF1ZXN0aW9uQ2hlY2tib3hNb2RlbC5wcm90b3R5cGUuZ2V0RGVmYXVsdEl0ZW1Db21wb25lbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBcInN1cnZleS1jaGVja2JveC1pdGVtXCI7XG4gICAgfTtcbiAgICBRdWVzdGlvbkNoZWNrYm94TW9kZWwucHJvdG90eXBlLmdldFR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBcImNoZWNrYm94XCI7XG4gICAgfTtcbiAgICBRdWVzdGlvbkNoZWNrYm94TW9kZWwucHJvdG90eXBlLm9uQ3JlYXRpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUub25DcmVhdGluZy5jYWxsKHRoaXMpO1xuICAgICAgICB0aGlzLmNyZWF0ZU5ld0FycmF5KFwicmVuZGVyZWRWYWx1ZVwiKTtcbiAgICAgICAgdGhpcy5jcmVhdGVOZXdBcnJheShcInZhbHVlXCIpO1xuICAgIH07XG4gICAgUXVlc3Rpb25DaGVja2JveE1vZGVsLnByb3RvdHlwZS5nZXRGaXJzdElucHV0RWxlbWVudElkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnB1dElkICsgXCJfMFwiO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uQ2hlY2tib3hNb2RlbC5wcm90b3R5cGUsIFwidmFsdWVQcm9wZXJ0eU5hbWVcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIGEgcHJvcGVydHkgbmFtZSB1c2VkIHRvIHN0b3JlIHNlbGVjdGVkIHZhbHVlcy5cbiAgICAgICAgICpcbiAgICAgICAgICogU2V0IHRoaXMgcHJvcGVydHkgaWYgeW91IHdhbnQgdG8gc3RvcmUgc2VsZWN0ZWQgdmFsdWVzIGluIGFuIGFycmF5IG9mIG9iamVjdHMgaW5zdGVhZCBvZiBhbiBhcnJheSBvZiBwcmltaXRpdmUgdmFsdWVzLiBGb3IgZXhhbXBsZSwgaWYgeW91IHNldCBgdmFsdWVQcm9wZXJ0eU5hbWVgIHRvIGBcImNhclwiYCwgdGhlIGB2YWx1ZWAgcHJvcGVydHkgd2lsbCBjb250YWluIGFuIGFycmF5IG9mIG9iamVjdHMgYFt7IGNhcjogXCJGb3JkXCIgfSwgeyBjYXI6IFwiVGVzbGFcIiB9XWAsIG5vdCBhbiBhcnJheSBvZiBzdHJpbmcgdmFsdWVzIGBbIFwiRm9yZFwiLCBcIlRlc2xhXCIgXWAuXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ2YWx1ZVByb3BlcnR5TmFtZVwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJ2YWx1ZVByb3BlcnR5TmFtZVwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUXVlc3Rpb25DaGVja2JveE1vZGVsLnByb3RvdHlwZS5nZXRRdWVzdGlvbkZyb21BcnJheSA9IGZ1bmN0aW9uIChuYW1lLCBpbmRleCkge1xuICAgICAgICBpZiAoISFuYW1lICYmIG5hbWUgPT09IHRoaXMudmFsdWVQcm9wZXJ0eU5hbWUpIHtcbiAgICAgICAgICAgIHZhciB2ID0gdGhpcy52YWx1ZTtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHYpICYmIGluZGV4IDwgdi5sZW5ndGgpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25DaGVja2JveE1vZGVsLnByb3RvdHlwZSwgXCJzZWxlY3RBbGxJdGVtXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgdGhlIFwiU2VsZWN0IEFsbFwiIGNob2ljZSBpdGVtLiBVc2UgdGhpcyBwcm9wZXJ0eSB0byBjaGFuZ2UgdGhlIGl0ZW0ncyBgdmFsdWVgIG9yIGB0ZXh0YC5cbiAgICAgICAgICogQHNlZSBzaG93U2VsZWN0QWxsSXRlbVxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RBbGxJdGVtVmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25DaGVja2JveE1vZGVsLnByb3RvdHlwZSwgXCJzZWxlY3RBbGxUZXh0XCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldHMgb3Igc2V0cyBhIGNhcHRpb24gZm9yIHRoZSBcIlNlbGVjdCBBbGxcIiBjaG9pY2UgaXRlbS5cbiAgICAgICAgICogQHNlZSBzaG93U2VsZWN0QWxsSXRlbVxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJzZWxlY3RBbGxUZXh0XCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwic2VsZWN0QWxsVGV4dFwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uQ2hlY2tib3hNb2RlbC5wcm90b3R5cGUsIFwibG9jU2VsZWN0QWxsVGV4dFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJzZWxlY3RBbGxUZXh0XCIpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uQ2hlY2tib3hNb2RlbC5wcm90b3R5cGUsIFwic2hvd1NlbGVjdEFsbEl0ZW1cIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogRW5hYmxlIHRoaXMgcHJvcGVydHkgdG8gZGlzcGxheSBhIFwiU2VsZWN0IEFsbFwiIGl0ZW0uIFdoZW4gdXNlcnMgc2VsZWN0IGl0LCBhbGwgb3RoZXIgY2hvaWNlIGl0ZW1zLCBleGNlcHQgXCJPdGhlclwiIGFuZCBcIk5vbmVcIiwgYWxzbyBiZWNvbWUgc2VsZWN0ZWQuXG4gICAgICAgICAqIEBzZWUgc2VsZWN0QWxsXG4gICAgICAgICAqIEBzZWUgaXNBbGxTZWxlY3RlZFxuICAgICAgICAgKiBAc2VlIHNlcGFyYXRlU3BlY2lhbENob2ljZXNcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInNob3dTZWxlY3RBbGxJdGVtXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInNob3dTZWxlY3RBbGxJdGVtXCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25DaGVja2JveE1vZGVsLnByb3RvdHlwZSwgXCJoYXNTZWxlY3RBbGxcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNob3dTZWxlY3RBbGxJdGVtO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd1NlbGVjdEFsbEl0ZW0gPSB2YWw7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25DaGVja2JveE1vZGVsLnByb3RvdHlwZSwgXCJpc0FsbFNlbGVjdGVkXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgYHRydWVgIGlmIGFsbCBjaG9pY2UgaXRlbXMsIGV4Y2VwdCBcIk90aGVyXCIgYW5kIFwiTm9uZVwiLCBhcmUgc2VsZWN0ZWQuXG4gICAgICAgICAqIEBzZWUgc2hvd1NlbGVjdEFsbEl0ZW1cbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHZhbCA9IHRoaXMudmFsdWU7XG4gICAgICAgICAgICBpZiAoIXZhbCB8fCAhQXJyYXkuaXNBcnJheSh2YWwpKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzSXRlbVNlbGVjdGVkKHRoaXMubm9uZUl0ZW0pKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIHZhciBhbGxJdGVtQ291bnQgPSB0aGlzLnZpc2libGVDaG9pY2VzLmxlbmd0aDtcbiAgICAgICAgICAgIGlmICh0aGlzLmhhc090aGVyKVxuICAgICAgICAgICAgICAgIGFsbEl0ZW1Db3VudC0tO1xuICAgICAgICAgICAgaWYgKHRoaXMuaGFzTm9uZSlcbiAgICAgICAgICAgICAgICBhbGxJdGVtQ291bnQtLTtcbiAgICAgICAgICAgIGlmICh0aGlzLmhhc1NlbGVjdEFsbClcbiAgICAgICAgICAgICAgICBhbGxJdGVtQ291bnQtLTtcbiAgICAgICAgICAgIHZhciBzZWxlY3RlZENvdW50ID0gdmFsLmxlbmd0aDtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzT3RoZXJTZWxlY3RlZClcbiAgICAgICAgICAgICAgICBzZWxlY3RlZENvdW50LS07XG4gICAgICAgICAgICByZXR1cm4gc2VsZWN0ZWRDb3VudCA9PT0gYWxsSXRlbUNvdW50O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIGlmICh2YWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdEFsbCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhclZhbHVlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBRdWVzdGlvbkNoZWNrYm94TW9kZWwucHJvdG90eXBlLnRvZ2dsZVNlbGVjdEFsbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5pc0FsbFNlbGVjdGVkID0gIXRoaXMuaXNBbGxTZWxlY3RlZDtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFNlbGVjdHMgYWxsIGNob2ljZSBpdGVtcywgZXhjZXB0IFwiT3RoZXJcIiBhbmQgXCJOb25lXCIuXG4gICAgICpcbiAgICAgKiBUbyBjbGVhciBzZWxlY3Rpb24sIGNhbGwgdGhlIGBjbGVhclZhbHVlKClgIG1ldGhvZC5cbiAgICAgKiBAc2VlIGNsZWFyVmFsdWVcbiAgICAgKi9cbiAgICBRdWVzdGlvbkNoZWNrYm94TW9kZWwucHJvdG90eXBlLnNlbGVjdEFsbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHZhbCA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudmlzaWJsZUNob2ljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBpdGVtID0gdGhpcy52aXNpYmxlQ2hvaWNlc1tpXTtcbiAgICAgICAgICAgIGlmIChpdGVtID09PSB0aGlzLm5vbmVJdGVtIHx8XG4gICAgICAgICAgICAgICAgaXRlbSA9PT0gdGhpcy5vdGhlckl0ZW0gfHxcbiAgICAgICAgICAgICAgICBpdGVtID09PSB0aGlzLnNlbGVjdEFsbEl0ZW0pXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB2YWwucHVzaChpdGVtLnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlbmRlcmVkVmFsdWUgPSB2YWw7XG4gICAgfTtcbiAgICBRdWVzdGlvbkNoZWNrYm94TW9kZWwucHJvdG90eXBlLmlzSXRlbVNlbGVjdGVkQ29yZSA9IGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIGlmIChpdGVtID09PSB0aGlzLnNlbGVjdEFsbEl0ZW0pXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pc0FsbFNlbGVjdGVkO1xuICAgICAgICB2YXIgdmFsID0gdGhpcy5yZW5kZXJlZFZhbHVlO1xuICAgICAgICBpZiAoIXZhbCB8fCAhQXJyYXkuaXNBcnJheSh2YWwpKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNUd29WYWx1ZUVxdWFscyh2YWxbaV0sIGl0ZW0udmFsdWUpKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uQ2hlY2tib3hNb2RlbC5wcm90b3R5cGUuZ2V0UmVhbFZhbHVlID0gZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICBpZiAoIXZhbClcbiAgICAgICAgICAgIHJldHVybiB2YWw7XG4gICAgICAgIHJldHVybiAhdGhpcy52YWx1ZVByb3BlcnR5TmFtZSA/IHZhbCA6IHZhbFt0aGlzLnZhbHVlUHJvcGVydHlOYW1lXTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbkNoZWNrYm94TW9kZWwucHJvdG90eXBlLCBcImlzVmFsdWVBcnJheVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHJ1ZTsgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbkNoZWNrYm94TW9kZWwucHJvdG90eXBlLCBcIm1heFNlbGVjdGVkQ2hvaWNlc1wiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHNlbGVjdGVkIGNob2ljZXMuXG4gICAgICAgICAqXG4gICAgICAgICAqIERlZmF1bHQgdmFsdWU6IDAgKHVubGltaXRlZClcbiAgICAgICAgICpcbiAgICAgICAgICogPiBUaGlzIHByb3BlcnR5IG9ubHkgbGltaXRzIHRoZSBudW1iZXIgb2YgY2hvaWNlIGl0ZW1zIHRoYXQgY2FuIGJlIHNlbGVjdGVkIGJ5IHVzZXJzLiBZb3UgY2FuIHNlbGVjdCBhbnkgbnVtYmVyIG9mIGNob2ljZSBpdGVtcyBpbiBjb2RlLCByZWdhcmRsZXNzIG9mIHRoZSBgbWF4U2VsZWN0ZWRDaG9pY2VzYCB2YWx1ZS5cbiAgICAgICAgICogQHNlZSBtaW5TZWxlY3RlZENob2ljZXNcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIm1heFNlbGVjdGVkQ2hvaWNlc1wiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICBpZiAodmFsIDwgMClcbiAgICAgICAgICAgICAgICB2YWwgPSAwO1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibWF4U2VsZWN0ZWRDaG9pY2VzXCIsIHZhbCk7XG4gICAgICAgICAgICB0aGlzLmZpbHRlckl0ZW1zKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25DaGVja2JveE1vZGVsLnByb3RvdHlwZSwgXCJtaW5TZWxlY3RlZENob2ljZXNcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHRoZSBtaW5pbXVtIG51bWJlciBvZiBzZWxlY3RlZCBjaG9pY2VzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBEZWZhdWx0IHZhbHVlOiAwICh1bmxpbWl0ZWQpXG4gICAgICAgICAqXG4gICAgICAgICAqID4gVGhpcyBwcm9wZXJ0eSBvbmx5IGxpbWl0cyB0aGUgbnVtYmVyIG9mIGNob2ljZSBpdGVtcyB0aGF0IGNhbiBiZSBzZWxlY3RlZCBieSB1c2Vycy4gWW91IGNhbiBzZWxlY3QgYW55IG51bWJlciBvZiBjaG9pY2UgaXRlbXMgaW4gY29kZSwgcmVnYXJkbGVzcyBvZiB0aGUgYG1pblNlbGVjdGVkQ2hvaWNlc2AgdmFsdWUuXG4gICAgICAgICAqIEBzZWUgbWF4U2VsZWN0ZWRDaG9pY2VzXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJtaW5TZWxlY3RlZENob2ljZXNcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgaWYgKHZhbCA8IDApXG4gICAgICAgICAgICAgICAgdmFsID0gMDtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm1pblNlbGVjdGVkQ2hvaWNlc1wiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uQ2hlY2tib3hNb2RlbC5wcm90b3R5cGUsIFwic2VsZWN0ZWRDaG9pY2VzXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFuIGFycmF5IG9mIHNlbGVjdGVkIGNob2ljZSBpdGVtcy4gSW5jbHVkZXMgdGhlIFwiT3RoZXJcIiBhbmQgXCJOb25lXCIgY2hvaWNlIGl0ZW1zIGlmIHRoZXkgYXJlIHNlbGVjdGVkLCBidXQgbm90IFwiU2VsZWN0IEFsbFwiLiBJdGVtcyBhcmUgc29ydGVkIGluIHRoZSBvcmRlciB0aGV5IHdlcmUgc2VsZWN0ZWQuXG4gICAgICAgICAqIEBzZWUgdmlzaWJsZUNob2ljZXNcbiAgICAgICAgICogQHNlZSBlbmFibGVkQ2hvaWNlc1xuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0VtcHR5KCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgdmFyIHZhbCA9IHRoaXMucmVuZGVyZWRWYWx1ZTtcbiAgICAgICAgICAgIHZhciBhbGxDaG9pY2VzID0gISF0aGlzLmRlZmF1bHRTZWxlY3RlZEl0ZW1WYWx1ZXMgPyBbXS5jb25jYXQodGhpcy5kZWZhdWx0U2VsZWN0ZWRJdGVtVmFsdWVzLCB0aGlzLnZpc2libGVDaG9pY2VzKSA6IHRoaXMudmlzaWJsZUNob2ljZXM7XG4gICAgICAgICAgICB2YXIgaXRlbVZhbHVlcyA9IHZhbC5tYXAoZnVuY3Rpb24gKGl0ZW0pIHsgcmV0dXJuIF9pdGVtdmFsdWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1tcIkl0ZW1WYWx1ZVwiXS5nZXRJdGVtQnlWYWx1ZShhbGxDaG9pY2VzLCBpdGVtKTsgfSkuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7IHJldHVybiAhIWl0ZW07IH0pO1xuICAgICAgICAgICAgaWYgKCFpdGVtVmFsdWVzLmxlbmd0aCAmJiAhdGhpcy5zZWxlY3RlZEl0ZW1WYWx1ZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkSXRlbVZhbHVlcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVJdGVtVmFsdWVzKGl0ZW1WYWx1ZXMpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uQ2hlY2tib3hNb2RlbC5wcm90b3R5cGUsIFwic2VsZWN0ZWRJdGVtc1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5zZWxlY3RlZENob2ljZXM7IH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25DaGVja2JveE1vZGVsLnByb3RvdHlwZSwgXCJoYXNGaWx0ZXJlZFZhbHVlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiAhIXRoaXMudmFsdWVQcm9wZXJ0eU5hbWU7IH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBRdWVzdGlvbkNoZWNrYm94TW9kZWwucHJvdG90eXBlLmdldEZpbHRlcmVkVmFsdWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmhhc0ZpbHRlcmVkVmFsdWUpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJlZFZhbHVlO1xuICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5nZXRGaWx0ZXJlZFZhbHVlLmNhbGwodGhpcyk7XG4gICAgfTtcbiAgICBRdWVzdGlvbkNoZWNrYm94TW9kZWwucHJvdG90eXBlLmdldE11bHRpcGxlU2VsZWN0ZWRJdGVtcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRDaG9pY2VzO1xuICAgIH07XG4gICAgUXVlc3Rpb25DaGVja2JveE1vZGVsLnByb3RvdHlwZS52YWxpZGF0ZUl0ZW1WYWx1ZXMgPSBmdW5jdGlvbiAoaXRlbVZhbHVlcykge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBpZiAoISFpdGVtVmFsdWVzLmxlbmd0aClcbiAgICAgICAgICAgIHJldHVybiBpdGVtVmFsdWVzO1xuICAgICAgICB2YXIgc2VsZWN0ZWRJdGVtVmFsdWVzID0gdGhpcy5zZWxlY3RlZEl0ZW1WYWx1ZXM7XG4gICAgICAgIGlmICghIXNlbGVjdGVkSXRlbVZhbHVlcyAmJiAhIXNlbGVjdGVkSXRlbVZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdFNlbGVjdGVkSXRlbVZhbHVlcyA9IFtdLmNvbmNhdChzZWxlY3RlZEl0ZW1WYWx1ZXMpO1xuICAgICAgICAgICAgcmV0dXJuIHNlbGVjdGVkSXRlbVZhbHVlcztcbiAgICAgICAgfVxuICAgICAgICB2YXIgdmFsID0gdGhpcy5yZW5kZXJlZFZhbHVlO1xuICAgICAgICByZXR1cm4gdmFsLm1hcChmdW5jdGlvbiAoaXRlbSkgeyByZXR1cm4gX3RoaXMuY3JlYXRlSXRlbVZhbHVlKGl0ZW0pOyB9KTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uQ2hlY2tib3hNb2RlbC5wcm90b3R5cGUuZ2V0QW5zd2VyQ29ycmVjdElnbm9yZU9yZGVyID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdHJ1ZTsgfTtcbiAgICBRdWVzdGlvbkNoZWNrYm94TW9kZWwucHJvdG90eXBlLm9uQ2hlY2tGb3JFcnJvcnMgPSBmdW5jdGlvbiAoZXJyb3JzLCBpc09uVmFsdWVDaGFuZ2VkKSB7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUub25DaGVja0ZvckVycm9ycy5jYWxsKHRoaXMsIGVycm9ycywgaXNPblZhbHVlQ2hhbmdlZCk7XG4gICAgICAgIGlmIChpc09uVmFsdWVDaGFuZ2VkKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAodGhpcy5taW5TZWxlY3RlZENob2ljZXMgPiAwICYmIHRoaXMuY2hlY2tNaW5TZWxlY3RlZENob2ljZXNVbnJlYWNoZWQoKSkge1xuICAgICAgICAgICAgdmFyIG1pbkVycm9yID0gbmV3IF9lcnJvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fW1wiQ3VzdG9tRXJyb3JcIl0odGhpcy5nZXRMb2NhbGl6YXRpb25Gb3JtYXRTdHJpbmcoXCJtaW5TZWxlY3RFcnJvclwiLCB0aGlzLm1pblNlbGVjdGVkQ2hvaWNlcyksIHRoaXMpO1xuICAgICAgICAgICAgZXJyb3JzLnB1c2gobWluRXJyb3IpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBRdWVzdGlvbkNoZWNrYm94TW9kZWwucHJvdG90eXBlLm9uRW5hYmxlSXRlbUNhbGxCYWNrID0gZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgaWYgKCF0aGlzLnNob3VsZENoZWNrTWF4U2VsZWN0ZWRDaG9pY2VzKCkpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNJdGVtU2VsZWN0ZWQoaXRlbSk7XG4gICAgfTtcbiAgICBRdWVzdGlvbkNoZWNrYm94TW9kZWwucHJvdG90eXBlLm9uQWZ0ZXJSdW5JdGVtc0VuYWJsZUNvbmRpdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMubWF4U2VsZWN0ZWRDaG9pY2VzIDwgMSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RBbGxJdGVtLnNldElzRW5hYmxlZCh0cnVlKTtcbiAgICAgICAgICAgIHRoaXMub3RoZXJJdGVtLnNldElzRW5hYmxlZCh0cnVlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5oYXNTZWxlY3RBbGwpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0QWxsSXRlbS5zZXRJc0VuYWJsZWQodGhpcy5tYXhTZWxlY3RlZENob2ljZXMgPj0gdGhpcy5hY3RpdmVDaG9pY2VzLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaGFzT3RoZXIpIHtcbiAgICAgICAgICAgIHRoaXMub3RoZXJJdGVtLnNldElzRW5hYmxlZCghdGhpcy5zaG91bGRDaGVja01heFNlbGVjdGVkQ2hvaWNlcygpIHx8IHRoaXMuaXNPdGhlclNlbGVjdGVkKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgUXVlc3Rpb25DaGVja2JveE1vZGVsLnByb3RvdHlwZS5zaG91bGRDaGVja01heFNlbGVjdGVkQ2hvaWNlcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMubWF4U2VsZWN0ZWRDaG9pY2VzIDwgMSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgdmFyIHZhbCA9IHRoaXMudmFsdWU7XG4gICAgICAgIHZhciBsZW4gPSAhQXJyYXkuaXNBcnJheSh2YWwpID8gMCA6IHZhbC5sZW5ndGg7XG4gICAgICAgIHJldHVybiBsZW4gPj0gdGhpcy5tYXhTZWxlY3RlZENob2ljZXM7XG4gICAgfTtcbiAgICBRdWVzdGlvbkNoZWNrYm94TW9kZWwucHJvdG90eXBlLmNoZWNrTWluU2VsZWN0ZWRDaG9pY2VzVW5yZWFjaGVkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5taW5TZWxlY3RlZENob2ljZXMgPCAxKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB2YXIgdmFsID0gdGhpcy52YWx1ZTtcbiAgICAgICAgdmFyIGxlbiA9ICFBcnJheS5pc0FycmF5KHZhbCkgPyAwIDogdmFsLmxlbmd0aDtcbiAgICAgICAgcmV0dXJuIGxlbiA8IHRoaXMubWluU2VsZWN0ZWRDaG9pY2VzO1xuICAgIH07XG4gICAgUXVlc3Rpb25DaGVja2JveE1vZGVsLnByb3RvdHlwZS5nZXRJdGVtQ2xhc3NDb3JlID0gZnVuY3Rpb24gKGl0ZW0sIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIF9fZHVtbXlfdmFsdWUgPSB0aGlzLnZhbHVlOyAvL3RyaWdnZXIgZGVwZW5kZW5jaWVzIGZyb20ga29WYWx1ZSBmb3Iga25vY2tvdXRcbiAgICAgICAgb3B0aW9ucy5pc1NlbGVjdEFsbEl0ZW0gPSBpdGVtID09PSB0aGlzLnNlbGVjdEFsbEl0ZW07XG4gICAgICAgIHJldHVybiBuZXcgX3V0aWxzX2Nzc0NsYXNzQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fW1wiQ3NzQ2xhc3NCdWlsZGVyXCJdKClcbiAgICAgICAgICAgIC5hcHBlbmQoX3N1cGVyLnByb3RvdHlwZS5nZXRJdGVtQ2xhc3NDb3JlLmNhbGwodGhpcywgaXRlbSwgb3B0aW9ucykpXG4gICAgICAgICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5pdGVtU2VsZWN0QWxsLCBvcHRpb25zLmlzU2VsZWN0QWxsSXRlbSlcbiAgICAgICAgICAgIC50b1N0cmluZygpO1xuICAgIH07XG4gICAgUXVlc3Rpb25DaGVja2JveE1vZGVsLnByb3RvdHlwZS51cGRhdGVWYWx1ZUZyb21TdXJ2ZXkgPSBmdW5jdGlvbiAobmV3VmFsdWUpIHtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS51cGRhdGVWYWx1ZUZyb21TdXJ2ZXkuY2FsbCh0aGlzLCBuZXdWYWx1ZSk7XG4gICAgICAgIHRoaXMuaW52aXNpYmxlT2xkVmFsdWVzID0ge307XG4gICAgfTtcbiAgICBRdWVzdGlvbkNoZWNrYm94TW9kZWwucHJvdG90eXBlLnNldERlZmF1bHRWYWx1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5zZXREZWZhdWx0VmFsdWUuY2FsbCh0aGlzKTtcbiAgICAgICAgdmFyIHZhbCA9IHRoaXMuZGVmYXVsdFZhbHVlO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciByVmFsID0gdGhpcy5nZXRSZWFsVmFsdWUodmFsW2ldKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jYW5DbGVhclZhbHVlQW5Vbmtub3duKHJWYWwpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkSW50b0ludmlzaWJsZU9sZFZhbHVlcyhyVmFsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFF1ZXN0aW9uQ2hlY2tib3hNb2RlbC5wcm90b3R5cGUuYWRkSW50b0ludmlzaWJsZU9sZFZhbHVlcyA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgdGhpcy5pbnZpc2libGVPbGRWYWx1ZXNbdmFsXSA9IHZhbDtcbiAgICB9O1xuICAgIFF1ZXN0aW9uQ2hlY2tib3hNb2RlbC5wcm90b3R5cGUuaGFzVmFsdWVUb0NsZWFySW5jb3JyZWN0VmFsdWVzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5oYXNWYWx1ZVRvQ2xlYXJJbmNvcnJlY3RWYWx1ZXMuY2FsbCh0aGlzKSB8fCAhX2hlbHBlcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcIkhlbHBlcnNcIl0uaXNWYWx1ZUVtcHR5KHRoaXMuaW52aXNpYmxlT2xkVmFsdWVzKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uQ2hlY2tib3hNb2RlbC5wcm90b3R5cGUuc2V0TmV3VmFsdWUgPSBmdW5jdGlvbiAobmV3VmFsdWUpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzQ2hhbmdpbmdWYWx1ZU9uQ2xlYXJJbmNvcnJlY3QpIHtcbiAgICAgICAgICAgIHRoaXMuaW52aXNpYmxlT2xkVmFsdWVzID0ge307XG4gICAgICAgIH1cbiAgICAgICAgbmV3VmFsdWUgPSB0aGlzLnZhbHVlRnJvbURhdGEobmV3VmFsdWUpO1xuICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgICAgICBpZiAoIW5ld1ZhbHVlKVxuICAgICAgICAgICAgbmV3VmFsdWUgPSBbXTtcbiAgICAgICAgaWYgKCF2YWx1ZSlcbiAgICAgICAgICAgIHZhbHVlID0gW107XG4gICAgICAgIGlmICh0aGlzLmlzVHdvVmFsdWVFcXVhbHModmFsdWUsIG5ld1ZhbHVlKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKHRoaXMuaGFzTm9uZSkge1xuICAgICAgICAgICAgdmFyIHByZXZOb25lSW5kZXggPSB0aGlzLm5vbmVJbmRleEluQXJyYXkodmFsdWUpO1xuICAgICAgICAgICAgdmFyIG5ld05vbmVJbmRleCA9IHRoaXMubm9uZUluZGV4SW5BcnJheShuZXdWYWx1ZSk7XG4gICAgICAgICAgICBpZiAocHJldk5vbmVJbmRleCA+IC0xKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5ld05vbmVJbmRleCA+IC0xICYmIG5ld1ZhbHVlLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3VmFsdWUuc3BsaWNlKG5ld05vbmVJbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKG5ld05vbmVJbmRleCA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld1ZhbHVlLnNwbGljZSgwLCBuZXdWYWx1ZS5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICBuZXdWYWx1ZS5wdXNoKHRoaXMubm9uZUl0ZW0udmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBfc3VwZXIucHJvdG90eXBlLnNldE5ld1ZhbHVlLmNhbGwodGhpcywgbmV3VmFsdWUpO1xuICAgIH07XG4gICAgUXVlc3Rpb25DaGVja2JveE1vZGVsLnByb3RvdHlwZS5nZXRJc011bHRpcGxlVmFsdWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG4gICAgUXVlc3Rpb25DaGVja2JveE1vZGVsLnByb3RvdHlwZS5nZXRDb21tZW50RnJvbVZhbHVlID0gZnVuY3Rpb24gKG5ld1ZhbHVlKSB7XG4gICAgICAgIHZhciBpbmQgPSB0aGlzLmdldEZpcnN0VW5rbm93bkluZGV4KG5ld1ZhbHVlKTtcbiAgICAgICAgaWYgKGluZCA8IDApXG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgcmV0dXJuIG5ld1ZhbHVlW2luZF07XG4gICAgfTtcbiAgICBRdWVzdGlvbkNoZWNrYm94TW9kZWwucHJvdG90eXBlLnNldE90aGVyVmFsdWVJbnRvVmFsdWUgPSBmdW5jdGlvbiAobmV3VmFsdWUpIHtcbiAgICAgICAgdmFyIGluZCA9IHRoaXMuZ2V0Rmlyc3RVbmtub3duSW5kZXgobmV3VmFsdWUpO1xuICAgICAgICBpZiAoaW5kIDwgMClcbiAgICAgICAgICAgIHJldHVybiBuZXdWYWx1ZTtcbiAgICAgICAgbmV3VmFsdWUuc3BsaWNlKGluZCwgMSwgdGhpcy5vdGhlckl0ZW0udmFsdWUpO1xuICAgICAgICByZXR1cm4gbmV3VmFsdWU7XG4gICAgfTtcbiAgICBRdWVzdGlvbkNoZWNrYm94TW9kZWwucHJvdG90eXBlLmdldEZpcnN0VW5rbm93bkluZGV4ID0gZnVuY3Rpb24gKG5ld1ZhbHVlKSB7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShuZXdWYWx1ZSkpXG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmV3VmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmhhc1Vua25vd25WYWx1ZShuZXdWYWx1ZVtpXSwgZmFsc2UsIGZhbHNlKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgfTtcbiAgICBRdWVzdGlvbkNoZWNrYm94TW9kZWwucHJvdG90eXBlLm5vbmVJbmRleEluQXJyYXkgPSBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgIGlmICghdmFsIHx8ICFBcnJheS5pc0FycmF5KHZhbCkpXG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIHZhciBub25lVmFsdWUgPSB0aGlzLm5vbmVJdGVtLnZhbHVlO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHZhbFtpXSA9PSBub25lVmFsdWUpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH07XG4gICAgUXVlc3Rpb25DaGVja2JveE1vZGVsLnByb3RvdHlwZS5jYW5Vc2VGaWx0ZXJlZENob2ljZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5oYXNTZWxlY3RBbGwgJiYgX3N1cGVyLnByb3RvdHlwZS5jYW5Vc2VGaWx0ZXJlZENob2ljZXMuY2FsbCh0aGlzKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uQ2hlY2tib3hNb2RlbC5wcm90b3R5cGUuc3VwcG9ydFNlbGVjdEFsbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNTdXBwb3J0UHJvcGVydHkoXCJzaG93U2VsZWN0QWxsSXRlbVwiKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uQ2hlY2tib3hNb2RlbC5wcm90b3R5cGUuYWRkVG9WaXNpYmxlQ2hvaWNlcyA9IGZ1bmN0aW9uIChpdGVtcywgaXNBZGRBbGwpIHtcbiAgICAgICAgaWYgKHRoaXMuc3VwcG9ydFNlbGVjdEFsbCgpICYmIHRoaXMuY2FuU2hvd09wdGlvbkl0ZW0odGhpcy5zZWxlY3RBbGxJdGVtLCBpc0FkZEFsbCwgdGhpcy5oYXNTZWxlY3RBbGwpKSB7XG4gICAgICAgICAgICBpdGVtcy51bnNoaWZ0KHRoaXMuc2VsZWN0QWxsSXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5hZGRUb1Zpc2libGVDaG9pY2VzLmNhbGwodGhpcywgaXRlbXMsIGlzQWRkQWxsKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uQ2hlY2tib3hNb2RlbC5wcm90b3R5cGUuaXNIZWFkQ2hvaWNlID0gZnVuY3Rpb24gKGl0ZW0sIHF1ZXN0aW9uKSB7XG4gICAgICAgIHJldHVybiAoaXRlbSA9PT0gcXVlc3Rpb24uc2VsZWN0QWxsSXRlbSk7XG4gICAgfTtcbiAgICBRdWVzdGlvbkNoZWNrYm94TW9kZWwucHJvdG90eXBlLmlzSXRlbUluTGlzdCA9IGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIGlmIChpdGVtID09IHRoaXMuc2VsZWN0QWxsSXRlbSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmhhc1NlbGVjdEFsbDtcbiAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUuaXNJdGVtSW5MaXN0LmNhbGwodGhpcywgaXRlbSk7XG4gICAgfTtcbiAgICBRdWVzdGlvbkNoZWNrYm94TW9kZWwucHJvdG90eXBlLmdldERpc3BsYXlWYWx1ZUNvcmUgPSBmdW5jdGlvbiAoa2V5c0FzVGV4dCwgdmFsdWUpIHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSlcbiAgICAgICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLmdldERpc3BsYXlWYWx1ZUNvcmUuY2FsbCh0aGlzLCBrZXlzQXNUZXh0LCB2YWx1ZSk7XG4gICAgICAgIHZhciB2YWx1ZVByb3BOYW1lID0gdGhpcy52YWx1ZVByb3BlcnR5TmFtZTtcbiAgICAgICAgdmFyIG9uR2V0VmFsdWVDYWxsYmFjayA9IGZ1bmN0aW9uIChpbmRleCkge1xuICAgICAgICAgICAgdmFyIHZhbCA9IHZhbHVlW2luZGV4XTtcbiAgICAgICAgICAgIGlmICghIXZhbHVlUHJvcE5hbWUgJiYgISF2YWxbdmFsdWVQcm9wTmFtZV0pIHtcbiAgICAgICAgICAgICAgICB2YWwgPSB2YWxbdmFsdWVQcm9wTmFtZV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdGhpcy5nZXREaXNwbGF5QXJyYXlWYWx1ZShrZXlzQXNUZXh0LCB2YWx1ZSwgb25HZXRWYWx1ZUNhbGxiYWNrKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uQ2hlY2tib3hNb2RlbC5wcm90b3R5cGUuY2xlYXJJbmNvcnJlY3RWYWx1ZXNDb3JlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmNsZWFySW5jb3JyZWN0QW5kRGlzYWJsZWRWYWx1ZXMoZmFsc2UpO1xuICAgIH07XG4gICAgUXVlc3Rpb25DaGVja2JveE1vZGVsLnByb3RvdHlwZS5jbGVhckRpc2FibGVkVmFsdWVzQ29yZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5jbGVhckluY29ycmVjdEFuZERpc2FibGVkVmFsdWVzKHRydWUpO1xuICAgIH07XG4gICAgUXVlc3Rpb25DaGVja2JveE1vZGVsLnByb3RvdHlwZS5jbGVhckluY29ycmVjdEFuZERpc2FibGVkVmFsdWVzID0gZnVuY3Rpb24gKGNsZWFyRGlzYWJsZWQpIHtcbiAgICAgICAgdmFyIHZhbCA9IHRoaXMudmFsdWU7XG4gICAgICAgIHZhciBoYXNDaGFuZ2VkID0gZmFsc2U7XG4gICAgICAgIHZhciByZXN0b3JlZFZhbHVlcyA9IHRoaXMucmVzdG9yZVZhbHVlc0Zyb21JbnZpc2libGUoKTtcbiAgICAgICAgaWYgKCF2YWwgJiYgcmVzdG9yZWRWYWx1ZXMubGVuZ3RoID09IDApXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWwpIHx8IHZhbC5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgdGhpcy5pc0NoYW5naW5nVmFsdWVPbkNsZWFySW5jb3JyZWN0ID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghY2xlYXJEaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmhhc0NvbW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsZWFyVmFsdWUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmlzQ2hhbmdpbmdWYWx1ZU9uQ2xlYXJJbmNvcnJlY3QgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmIChyZXN0b3JlZFZhbHVlcy5sZW5ndGggPT0gMClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB2YWwgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbmV3VmFsdWUgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWwubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBySXRlbVZhbCA9IHRoaXMuZ2V0UmVhbFZhbHVlKHZhbFtpXSk7XG4gICAgICAgICAgICB2YXIgaXNVbmtvd24gPSB0aGlzLmNhbkNsZWFyVmFsdWVBblVua25vd24ockl0ZW1WYWwpO1xuICAgICAgICAgICAgaWYgKCghY2xlYXJEaXNhYmxlZCAmJiAhaXNVbmtvd24pIHx8XG4gICAgICAgICAgICAgICAgKGNsZWFyRGlzYWJsZWQgJiYgIXRoaXMuaXNWYWx1ZURpc2FibGVkKHJJdGVtVmFsKSkpIHtcbiAgICAgICAgICAgICAgICBuZXdWYWx1ZS5wdXNoKHZhbFtpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBoYXNDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBpZiAoaXNVbmtvd24pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRJbnRvSW52aXNpYmxlT2xkVmFsdWVzKHZhbFtpXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdG9yZWRWYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlLnB1c2gocmVzdG9yZWRWYWx1ZXNbaV0pO1xuICAgICAgICAgICAgaGFzQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFoYXNDaGFuZ2VkKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLmlzQ2hhbmdpbmdWYWx1ZU9uQ2xlYXJJbmNvcnJlY3QgPSB0cnVlO1xuICAgICAgICBpZiAobmV3VmFsdWUubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJWYWx1ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNDaGFuZ2luZ1ZhbHVlT25DbGVhckluY29ycmVjdCA9IGZhbHNlO1xuICAgIH07XG4gICAgUXVlc3Rpb25DaGVja2JveE1vZGVsLnByb3RvdHlwZS5yZXN0b3JlVmFsdWVzRnJvbUludmlzaWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHJlcyA9IFtdO1xuICAgICAgICB2YXIgdmlzSXRlbXMgPSB0aGlzLnZpc2libGVDaG9pY2VzO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZpc0l0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgdmFsID0gdmlzSXRlbXNbaV0udmFsdWU7XG4gICAgICAgICAgICBpZiAoX2hlbHBlcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcIkhlbHBlcnNcIl0uaXNUd29WYWx1ZUVxdWFscyh2YWwsIHRoaXMuaW52aXNpYmxlT2xkVmFsdWVzW3ZhbF0pKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzSXRlbVNlbGVjdGVkKHZpc0l0ZW1zW2ldKSkge1xuICAgICAgICAgICAgICAgICAgICByZXMucHVzaCh2YWwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5pbnZpc2libGVPbGRWYWx1ZXNbdmFsXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH07XG4gICAgUXVlc3Rpb25DaGVja2JveE1vZGVsLnByb3RvdHlwZS5nZXRDb25kaXRpb25Kc29uID0gZnVuY3Rpb24gKG9wZXJhdG9yLCBwYXRoKSB7XG4gICAgICAgIGlmIChvcGVyYXRvciA9PT0gdm9pZCAwKSB7IG9wZXJhdG9yID0gbnVsbDsgfVxuICAgICAgICBpZiAocGF0aCA9PT0gdm9pZCAwKSB7IHBhdGggPSBudWxsOyB9XG4gICAgICAgIHZhciBqc29uID0gX3N1cGVyLnByb3RvdHlwZS5nZXRDb25kaXRpb25Kc29uLmNhbGwodGhpcyk7XG4gICAgICAgIGlmIChvcGVyYXRvciA9PSBcImNvbnRhaW5zXCIgfHwgb3BlcmF0b3IgPT0gXCJub3Rjb250YWluc1wiKSB7XG4gICAgICAgICAgICBqc29uW1widHlwZVwiXSA9IFwicmFkaW9ncm91cFwiO1xuICAgICAgICB9XG4gICAgICAgIGpzb25bXCJtYXhTZWxlY3RlZENob2ljZXNcIl0gPSAwO1xuICAgICAgICBqc29uW1wibWluU2VsZWN0ZWRDaG9pY2VzXCJdID0gMDtcbiAgICAgICAgcmV0dXJuIGpzb247XG4gICAgfTtcbiAgICBRdWVzdGlvbkNoZWNrYm94TW9kZWwucHJvdG90eXBlLmlzQW5zd2VyQ29ycmVjdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIF9oZWxwZXJzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJIZWxwZXJzXCJdLmlzQXJyYXlDb250YWluc0VxdWFsKHRoaXMudmFsdWUsIHRoaXMuY29ycmVjdEFuc3dlcik7XG4gICAgfTtcbiAgICBRdWVzdGlvbkNoZWNrYm94TW9kZWwucHJvdG90eXBlLnNldERlZmF1bHRWYWx1ZVdpdGhPdGhlcnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnJlbmRlcmVkVmFsdWVGcm9tRGF0YUNvcmUodGhpcy5kZWZhdWx0VmFsdWUpO1xuICAgIH07XG4gICAgUXVlc3Rpb25DaGVja2JveE1vZGVsLnByb3RvdHlwZS5nZXRJc0l0ZW1WYWx1ZSA9IGZ1bmN0aW9uICh2YWwsIGl0ZW0pIHtcbiAgICAgICAgaWYgKCF2YWwgfHwgIUFycmF5LmlzQXJyYXkodmFsKSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHZhbC5pbmRleE9mKGl0ZW0udmFsdWUpID49IDA7XG4gICAgfTtcbiAgICBRdWVzdGlvbkNoZWNrYm94TW9kZWwucHJvdG90eXBlLnZhbHVlRnJvbURhdGEgPSBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgIGlmICghdmFsKVxuICAgICAgICAgICAgcmV0dXJuIHZhbDtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbCkpXG4gICAgICAgICAgICByZXR1cm4gW19zdXBlci5wcm90b3R5cGUudmFsdWVGcm9tRGF0YS5jYWxsKHRoaXMsIHZhbCldO1xuICAgICAgICB2YXIgdmFsdWUgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWwubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBjaG9pY2VpdGVtID0gX2l0ZW12YWx1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fW1wiSXRlbVZhbHVlXCJdLmdldEl0ZW1CeVZhbHVlKHRoaXMuYWN0aXZlQ2hvaWNlcywgdmFsW2ldKTtcbiAgICAgICAgICAgIGlmICghIWNob2ljZWl0ZW0pIHtcbiAgICAgICAgICAgICAgICB2YWx1ZS5wdXNoKGNob2ljZWl0ZW0udmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFsdWUucHVzaCh2YWxbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uQ2hlY2tib3hNb2RlbC5wcm90b3R5cGUucmVuZHJlZFZhbHVlRnJvbURhdGEgPSBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgIHZhbCA9IHRoaXMuY29udmVydFZhbHVlRnJvbU9iamVjdCh2YWwpO1xuICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5yZW5kcmVkVmFsdWVGcm9tRGF0YS5jYWxsKHRoaXMsIHZhbCk7XG4gICAgfTtcbiAgICBRdWVzdGlvbkNoZWNrYm94TW9kZWwucHJvdG90eXBlLnJlbmRyZWRWYWx1ZVRvRGF0YSA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgdmFsID0gX3N1cGVyLnByb3RvdHlwZS5yZW5kcmVkVmFsdWVUb0RhdGEuY2FsbCh0aGlzLCB2YWwpO1xuICAgICAgICByZXR1cm4gdGhpcy5jb252ZXJ0VmFsdWVUb09iamVjdCh2YWwpO1xuICAgIH07XG4gICAgUXVlc3Rpb25DaGVja2JveE1vZGVsLnByb3RvdHlwZS5jb252ZXJ0VmFsdWVGcm9tT2JqZWN0ID0gZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICBpZiAoIXRoaXMudmFsdWVQcm9wZXJ0eU5hbWUpXG4gICAgICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgICByZXR1cm4gX2hlbHBlcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcIkhlbHBlcnNcIl0uY29udmVydEFycmF5T2JqZWN0VG9WYWx1ZSh2YWwsIHRoaXMudmFsdWVQcm9wZXJ0eU5hbWUpO1xuICAgIH07XG4gICAgUXVlc3Rpb25DaGVja2JveE1vZGVsLnByb3RvdHlwZS5jb252ZXJ0VmFsdWVUb09iamVjdCA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgaWYgKCF0aGlzLnZhbHVlUHJvcGVydHlOYW1lKVxuICAgICAgICAgICAgcmV0dXJuIHZhbDtcbiAgICAgICAgdmFyIGRlc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmICghIXRoaXMuc3VydmV5ICYmIHRoaXMuc3VydmV5LnF1ZXN0aW9uc0J5VmFsdWVOYW1lKHRoaXMuZ2V0VmFsdWVOYW1lKCkpLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIGRlc3QgPSB0aGlzLmRhdGEuZ2V0VmFsdWUodGhpcy5nZXRWYWx1ZU5hbWUoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9oZWxwZXJzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJIZWxwZXJzXCJdLmNvbnZlcnRBcnJheVZhbHVlVG9PYmplY3QodmFsLCB0aGlzLnZhbHVlUHJvcGVydHlOYW1lLCBkZXN0KTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uQ2hlY2tib3hNb2RlbC5wcm90b3R5cGUucmVuZGVyZWRWYWx1ZUZyb21EYXRhQ29yZSA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgaWYgKCF2YWwgfHwgIUFycmF5LmlzQXJyYXkodmFsKSlcbiAgICAgICAgICAgIHZhbCA9IFtdO1xuICAgICAgICBpZiAoIXRoaXMuaGFzQWN0aXZlQ2hvaWNlcylcbiAgICAgICAgICAgIHJldHVybiB2YWw7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAodmFsW2ldID09IHRoaXMub3RoZXJJdGVtLnZhbHVlKVxuICAgICAgICAgICAgICAgIHJldHVybiB2YWw7XG4gICAgICAgICAgICBpZiAodGhpcy5oYXNVbmtub3duVmFsdWUodmFsW2ldLCB0cnVlLCBmYWxzZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm90aGVyVmFsdWUgPSB2YWxbaV07XG4gICAgICAgICAgICAgICAgdmFyIG5ld1ZhbCA9IHZhbC5zbGljZSgpO1xuICAgICAgICAgICAgICAgIG5ld1ZhbFtpXSA9IHRoaXMub3RoZXJJdGVtLnZhbHVlO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXdWYWw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9O1xuICAgIFF1ZXN0aW9uQ2hlY2tib3hNb2RlbC5wcm90b3R5cGUucmVuZHJlZFZhbHVlVG9EYXRhQ29yZSA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgaWYgKCF2YWwgfHwgIXZhbC5sZW5ndGgpXG4gICAgICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHZhbFtpXSA9PSB0aGlzLm90aGVySXRlbS52YWx1ZSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm5lZWRDb252ZXJ0UmVuZGVyZWRPdGhlclRvRGF0YVZhbHVlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5ld1ZhbCA9IHZhbC5zbGljZSgpO1xuICAgICAgICAgICAgICAgICAgICBuZXdWYWxbaV0gPSB0aGlzLm90aGVyVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXdWYWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfTtcbiAgICBRdWVzdGlvbkNoZWNrYm94TW9kZWwucHJvdG90eXBlLnNlbGVjdE90aGVyVmFsdWVGcm9tQ29tbWVudCA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgdmFyIG5ld1ZhbCA9IFtdO1xuICAgICAgICB2YXIgcmVuZFZhbCA9IHRoaXMucmVuZGVyZWRWYWx1ZTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVuZFZhbCkpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVuZFZhbC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChyZW5kVmFsW2ldICE9PSB0aGlzLm90aGVySXRlbS52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBuZXdWYWwucHVzaChyZW5kVmFsW2ldKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbCkge1xuICAgICAgICAgICAgbmV3VmFsLnB1c2godGhpcy5vdGhlckl0ZW0udmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmFsdWUgPSBuZXdWYWw7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25DaGVja2JveE1vZGVsLnByb3RvdHlwZSwgXCJjaGVja0JveFN2Z1BhdGhcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBcIk01LDEzbDItMmwzLDNsNy03bDIsMmwtOSw5TDUsMTN6XCI7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25DaGVja2JveE1vZGVsLnByb3RvdHlwZSwgXCJpc05ld0ExMXlTdHJ1Y3R1cmVcIiwge1xuICAgICAgICAvL2ExMXlcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbkNoZWNrYm94TW9kZWwucHJvdG90eXBlLCBcImExMXlfaW5wdXRfYXJpYVJvbGVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBcImxpc3Rib3hcIjtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIHJldHVybiBRdWVzdGlvbkNoZWNrYm94TW9kZWw7XG59KF9xdWVzdGlvbl9iYXNlc2VsZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJRdWVzdGlvbkNoZWNrYm94QmFzZVwiXSkpO1xuXG5fanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiU2VyaWFsaXplclwiXS5hZGRDbGFzcyhcImNoZWNrYm94XCIsIFtcbiAgICB7IG5hbWU6IFwic2hvd1NlbGVjdEFsbEl0ZW06Ym9vbGVhblwiLCBhbHRlcm5hdGl2ZU5hbWU6IFwiaGFzU2VsZWN0QWxsXCIgfSxcbiAgICB7IG5hbWU6IFwic2VwYXJhdGVTcGVjaWFsQ2hvaWNlc1wiLCB2aXNpYmxlOiB0cnVlIH0sXG4gICAgeyBuYW1lOiBcIm1heFNlbGVjdGVkQ2hvaWNlczpudW1iZXJcIiwgZGVmYXVsdDogMCB9LFxuICAgIHsgbmFtZTogXCJtaW5TZWxlY3RlZENob2ljZXM6bnVtYmVyXCIsIGRlZmF1bHQ6IDAgfSxcbiAgICB7XG4gICAgICAgIG5hbWU6IFwic2VsZWN0QWxsVGV4dFwiLFxuICAgICAgICBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jU2VsZWN0QWxsVGV4dFwiLFxuICAgICAgICBkZXBlbmRzT246IFwic2hvd1NlbGVjdEFsbEl0ZW1cIixcbiAgICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICByZXR1cm4gb2JqLmhhc1NlbGVjdEFsbDtcbiAgICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgICBuYW1lOiBcInZhbHVlUHJvcGVydHlOYW1lXCIsXG4gICAgICAgIGNhdGVnb3J5OiBcImRhdGFcIlxuICAgIH0sXG4gICAgeyBuYW1lOiBcIml0ZW1Db21wb25lbnRcIiwgdmlzaWJsZTogZmFsc2UsIGRlZmF1bHQ6IFwic3VydmV5LWNoZWNrYm94LWl0ZW1cIiB9XG5dLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBRdWVzdGlvbkNoZWNrYm94TW9kZWwoXCJcIik7XG59LCBcImNoZWNrYm94YmFzZVwiKTtcbl9xdWVzdGlvbmZhY3RvcnlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlF1ZXN0aW9uRmFjdG9yeVwiXS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiY2hlY2tib3hcIiwgZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB2YXIgcSA9IG5ldyBRdWVzdGlvbkNoZWNrYm94TW9kZWwobmFtZSk7XG4gICAgcS5jaG9pY2VzID0gX3F1ZXN0aW9uZmFjdG9yeV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiUXVlc3Rpb25GYWN0b3J5XCJdLkRlZmF1bHRDaG9pY2VzO1xuICAgIHJldHVybiBxO1xufSk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvcXVlc3Rpb25fY29tbWVudC50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3F1ZXN0aW9uX2NvbW1lbnQudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBRdWVzdGlvbkNvbW1lbnRNb2RlbCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJRdWVzdGlvbkNvbW1lbnRNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFF1ZXN0aW9uQ29tbWVudE1vZGVsOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9qc29ub2JqZWN0ICovIFwiLi9zcmMvanNvbm9iamVjdC50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcXVlc3Rpb25mYWN0b3J5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3F1ZXN0aW9uZmFjdG9yeSAqLyBcIi4vc3JjL3F1ZXN0aW9uZmFjdG9yeS50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcXVlc3Rpb25fdGV4dGJhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcXVlc3Rpb25fdGV4dGJhc2UgKi8gXCIuL3NyYy9xdWVzdGlvbl90ZXh0YmFzZS50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdXRpbHNfdXRpbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vdXRpbHMvdXRpbHMgKi8gXCIuL3NyYy91dGlscy91dGlscy50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc2V0dGluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vc2V0dGluZ3MgKi8gXCIuL3NyYy9zZXR0aW5ncy50c1wiKTtcbnZhciBfX2V4dGVuZHMgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xuXG5cblxuXG5cbi8qKlxuICogQSBjbGFzcyB0aGF0IGRlc2NyaWJlcyB0aGUgTG9uZyBUZXh0IHF1ZXN0aW9uIHR5cGUuXG4gKlxuICogW1ZpZXcgRGVtb10oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZXhhbXBsZXMvcXVlc3Rpb250eXBlLWNvbW1lbnQvIChsaW5rU3R5bGUpKVxuICovXG52YXIgUXVlc3Rpb25Db21tZW50TW9kZWwgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFF1ZXN0aW9uQ29tbWVudE1vZGVsLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFF1ZXN0aW9uQ29tbWVudE1vZGVsKCkge1xuICAgICAgICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbkNvbW1lbnRNb2RlbC5wcm90b3R5cGUsIFwicm93c1wiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgdGhlIHZpc2libGUgaGVpZ2h0IG9mIHRoZSBjb21tZW50IGFyZWEsIG1lYXN1cmVkIGluIGxpbmVzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBUaGUgdmFsdWUgb2YgdGhpcyBwcm9wZXJ0eSBpcyBwYXNzZWQgb24gdG8gdGhlIGByb3dzYCBhdHRyaWJ1dGUgb2YgdGhlIHVuZGVybHlpbmcgYDx0ZXh0YXJlYT5gIGVsZW1lbnQuXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJyb3dzXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInJvd3NcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbkNvbW1lbnRNb2RlbC5wcm90b3R5cGUsIFwiY29sc1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNvbHNcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY29sc1wiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uQ29tbWVudE1vZGVsLnByb3RvdHlwZSwgXCJhY2NlcHRDYXJyaWFnZVJldHVyblwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgd2hldGhlciB0aGUgcXVlc3Rpb24gYWxsb3dzIGxpbmUgYnJlYWtzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBXaGVuIHRoaXMgcHJvcGVydHkgaXMgZW5hYmxlZCwgYSB1c2VyIGNhbiBwcmVzcyBFbnRlciB0byBpbnNlcnQgbGluZSBicmVha3MuIFRoZXkgYXJlIHNhdmVkIGFzIGBcXG5gIGluIHN1cnZleSByZXN1bHRzLiBUaGUgQ29tbWVudCBxdWVzdGlvbiBhbHNvIHJlY29nbml6ZXMgYW5kIGludGVycHJldHMgdGhlIGBcXG5gIHNlcXVlbmNlIGFzIGEgbGluZSBicmVhayB3aGVuIHlvdSBzZXQgdGhlIHF1ZXN0aW9uIGB2YWx1ZWAgaW4gY29kZS5cbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImFjY2VwdENhcnJpYWdlUmV0dXJuXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImFjY2VwdENhcnJpYWdlUmV0dXJuXCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25Db21tZW50TW9kZWwucHJvdG90eXBlLCBcImF1dG9Hcm93XCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB3aGV0aGVyIHRoZSBjb21tZW50IGFyZWEgYXV0b21hdGljYWxseSBpbmNyZWFzZXMgaXRzIGhlaWdodCB0byBhY2NvbW9kYXRlIG11bHRpLWxpbmUgY29udGVudC5cbiAgICAgICAgICpcbiAgICAgICAgICogRGVmYXVsdCB2YWx1ZTogYGZhbHNlYCAoaW5oZXJpdGVkIGZyb20gYFN1cnZleU1vZGVsYCdzIFtgYXV0b0dyb3dDb21tZW50YF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9zdXJ2ZXltb2RlbCNhdXRvR3Jvd0NvbW1lbnQpIHByb3BlcnR5KVxuICAgICAgICAgKiBAc2VlIGFsbG93UmVzaXplXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJhdXRvR3Jvd1wiKSB8fCAodGhpcy5zdXJ2ZXkgJiYgdGhpcy5zdXJ2ZXkuYXV0b0dyb3dDb21tZW50KTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJhdXRvR3Jvd1wiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uQ29tbWVudE1vZGVsLnByb3RvdHlwZSwgXCJhbGxvd1Jlc2l6ZVwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgd2hldGhlciB0byBkaXNwbGF5IGEgcmVzaXplIGhhbmRsZSBmb3IgdGhlIGNvbW1lbnQgYXJlYS5cbiAgICAgICAgICpcbiAgICAgICAgICogRGVmYXVsdCB2YWx1ZTogYHRydWVgIChpbmhlcml0ZWQgZnJvbSBgU3VydmV5TW9kZWxgJ3MgW2BhbGxvd1Jlc2l6ZUNvbW1lbnRgXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL3N1cnZleW1vZGVsI2FsbG93UmVzaXplQ29tbWVudCkgcHJvcGVydHkpXG4gICAgICAgICAqIEBzZWUgYXV0b0dyb3dcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImFsbG93UmVzaXplXCIpICYmICh0aGlzLnN1cnZleSAmJiB0aGlzLnN1cnZleS5hbGxvd1Jlc2l6ZUNvbW1lbnQpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImFsbG93UmVzaXplXCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25Db21tZW50TW9kZWwucHJvdG90eXBlLCBcInJlc2l6ZVN0eWxlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hbGxvd1Jlc2l6ZSA/IFwiYm90aFwiIDogXCJub25lXCI7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBRdWVzdGlvbkNvbW1lbnRNb2RlbC5wcm90b3R5cGUuZ2V0VHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIFwiY29tbWVudFwiO1xuICAgIH07XG4gICAgUXVlc3Rpb25Db21tZW50TW9kZWwucHJvdG90eXBlLmFmdGVyUmVuZGVyUXVlc3Rpb25FbGVtZW50ID0gZnVuY3Rpb24gKGVsKSB7XG4gICAgICAgIHZhciByb290ID0gX3NldHRpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bXCJzZXR0aW5nc1wiXS5lbnZpcm9ubWVudC5yb290O1xuICAgICAgICB0aGlzLmVsZW1lbnQgPSByb290LmdldEVsZW1lbnRCeUlkKHRoaXMuaW5wdXRJZCkgfHwgZWw7XG4gICAgICAgIHRoaXMudXBkYXRlRWxlbWVudCgpO1xuICAgICAgICBfc3VwZXIucHJvdG90eXBlLmFmdGVyUmVuZGVyUXVlc3Rpb25FbGVtZW50LmNhbGwodGhpcywgZWwpO1xuICAgIH07XG4gICAgUXVlc3Rpb25Db21tZW50TW9kZWwucHJvdG90eXBlLnVwZGF0ZUVsZW1lbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGlmICh0aGlzLmVsZW1lbnQgJiYgdGhpcy5hdXRvR3Jvdykge1xuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IHJldHVybiBPYmplY3QoX3V0aWxzX3V0aWxzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJpbmNyZWFzZUhlaWdodEJ5Q29udGVudFwiXSkoX3RoaXMuZWxlbWVudCk7IH0sIDEpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBRdWVzdGlvbkNvbW1lbnRNb2RlbC5wcm90b3R5cGUuYmVmb3JlRGVzdHJveVF1ZXN0aW9uRWxlbWVudCA9IGZ1bmN0aW9uIChlbCkge1xuICAgICAgICBfc3VwZXIucHJvdG90eXBlLmJlZm9yZURlc3Ryb3lRdWVzdGlvbkVsZW1lbnQuY2FsbCh0aGlzLCBlbCk7XG4gICAgICAgIHRoaXMuZWxlbWVudCA9IHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIFF1ZXN0aW9uQ29tbWVudE1vZGVsLnByb3RvdHlwZS5vbklucHV0ID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmlzSW5wdXRUZXh0VXBkYXRlKVxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy51cGRhdGVFbGVtZW50KCk7XG4gICAgICAgIHRoaXMudXBkYXRlUmVtYWluaW5nQ2hhcmFjdGVyQ291bnRlcihldmVudC50YXJnZXQudmFsdWUpO1xuICAgIH07XG4gICAgUXVlc3Rpb25Db21tZW50TW9kZWwucHJvdG90eXBlLm9uS2V5RG93biA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICB0aGlzLmNoZWNrRm9yVW5kbyhldmVudCk7XG4gICAgICAgIGlmICghdGhpcy5hY2NlcHRDYXJyaWFnZVJldHVybiAmJiAoZXZlbnQua2V5ID09PSBcIkVudGVyXCIgfHwgZXZlbnQua2V5Q29kZSA9PT0gMTMpKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFF1ZXN0aW9uQ29tbWVudE1vZGVsLnByb3RvdHlwZS5vblZhbHVlQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5vblZhbHVlQ2hhbmdlZC5jYWxsKHRoaXMpO1xuICAgICAgICB0aGlzLnVwZGF0ZUVsZW1lbnQoKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uQ29tbWVudE1vZGVsLnByb3RvdHlwZS5zZXROZXdWYWx1ZSA9IGZ1bmN0aW9uIChuZXdWYWx1ZSkge1xuICAgICAgICBpZiAoIXRoaXMuYWNjZXB0Q2FycmlhZ2VSZXR1cm4gJiYgISFuZXdWYWx1ZSkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnRyb2wtcmVnZXhcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gbmV3VmFsdWUucmVwbGFjZShuZXcgUmVnRXhwKFwiKFxcclxcbnxcXG58XFxyKVwiLCBcImdtXCIpLCBcIlwiKTtcbiAgICAgICAgfVxuICAgICAgICBfc3VwZXIucHJvdG90eXBlLnNldE5ld1ZhbHVlLmNhbGwodGhpcywgbmV3VmFsdWUpO1xuICAgIH07XG4gICAgUXVlc3Rpb25Db21tZW50TW9kZWwucHJvdG90eXBlLmdldFZhbHVlU2VwYXJhdG9yID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gXCJcXG5cIjsgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25Db21tZW50TW9kZWwucHJvdG90eXBlLCBcImNsYXNzTmFtZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuICh0aGlzLmNzc0NsYXNzZXMgPyB0aGlzLmdldENvbnRyb2xDbGFzcygpIDogXCJwYW5lbC1jb21tZW50LXJvb3RcIikgfHwgdW5kZWZpbmVkO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgcmV0dXJuIFF1ZXN0aW9uQ29tbWVudE1vZGVsO1xufShfcXVlc3Rpb25fdGV4dGJhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIlF1ZXN0aW9uVGV4dEJhc2VcIl0pKTtcblxuX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlNlcmlhbGl6ZXJcIl0uYWRkQ2xhc3MoXCJjb21tZW50XCIsIFtcbiAgICB7IG5hbWU6IFwibWF4TGVuZ3RoOm51bWJlclwiLCBkZWZhdWx0OiAtMSB9LFxuICAgIHsgbmFtZTogXCJjb2xzOm51bWJlclwiLCBkZWZhdWx0OiA1MCwgdmlzaWJsZTogZmFsc2UsIGlzU2VyaWFsaXphYmxlOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogXCJyb3dzOm51bWJlclwiLCBkZWZhdWx0OiA0IH0sXG4gICAgeyBuYW1lOiBcInBsYWNlaG9sZGVyXCIsXG4gICAgICAgIGFsdGVybmF0aXZlTmFtZTogXCJwbGFjZUhvbGRlclwiLFxuICAgICAgICBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jUGxhY2Vob2xkZXJcIiB9LFxuICAgIHtcbiAgICAgICAgbmFtZTogXCJ0ZXh0VXBkYXRlTW9kZVwiLFxuICAgICAgICBkZWZhdWx0OiBcImRlZmF1bHRcIixcbiAgICAgICAgY2hvaWNlczogW1wiZGVmYXVsdFwiLCBcIm9uQmx1clwiLCBcIm9uVHlwaW5nXCJdLFxuICAgIH0sXG4gICAgeyBuYW1lOiBcImF1dG9Hcm93OmJvb2xlYW5cIiB9LFxuICAgIHsgbmFtZTogXCJhbGxvd1Jlc2l6ZTpib29sZWFuXCIsIGRlZmF1bHQ6IHRydWUgfSxcbiAgICB7IG5hbWU6IFwiYWNjZXB0Q2FycmlhZ2VSZXR1cm46Ym9vbGVhblwiLCBkZWZhdWx0OiB0cnVlLCB2aXNpYmxlOiBmYWxzZSB9XG5dLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBRdWVzdGlvbkNvbW1lbnRNb2RlbChcIlwiKTtcbn0sIFwidGV4dGJhc2VcIik7XG5fcXVlc3Rpb25mYWN0b3J5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJRdWVzdGlvbkZhY3RvcnlcIl0uSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImNvbW1lbnRcIiwgZnVuY3Rpb24gKG5hbWUpIHtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uQ29tbWVudE1vZGVsKG5hbWUpO1xufSk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvcXVlc3Rpb25fY3VzdG9tLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9xdWVzdGlvbl9jdXN0b20udHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IENvbXBvbmVudFF1ZXN0aW9uSlNPTiwgQ29tcG9uZW50Q29sbGVjdGlvbiwgUXVlc3Rpb25DdXN0b21Nb2RlbEJhc2UsIFF1ZXN0aW9uQ3VzdG9tTW9kZWwsIFF1ZXN0aW9uQ29tcG9zaXRlTW9kZWwgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQ29tcG9uZW50UXVlc3Rpb25KU09OXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQ29tcG9uZW50UXVlc3Rpb25KU09OOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJDb21wb25lbnRDb2xsZWN0aW9uXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQ29tcG9uZW50Q29sbGVjdGlvbjsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUXVlc3Rpb25DdXN0b21Nb2RlbEJhc2VcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBRdWVzdGlvbkN1c3RvbU1vZGVsQmFzZTsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUXVlc3Rpb25DdXN0b21Nb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFF1ZXN0aW9uQ3VzdG9tTW9kZWw7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlF1ZXN0aW9uQ29tcG9zaXRlTW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBRdWVzdGlvbkNvbXBvc2l0ZU1vZGVsOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcXVlc3Rpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcXVlc3Rpb24gKi8gXCIuL3NyYy9xdWVzdGlvbi50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9qc29ub2JqZWN0ICovIFwiLi9zcmMvanNvbm9iamVjdC50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc3VydmV5X2VsZW1lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vc3VydmV5LWVsZW1lbnQgKi8gXCIuL3NyYy9zdXJ2ZXktZWxlbWVudC50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfaGVscGVyc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9oZWxwZXJzICovIFwiLi9zcmMvaGVscGVycy50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdGV4dFByZVByb2Nlc3Nvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi90ZXh0UHJlUHJvY2Vzc29yICovIFwiLi9zcmMvdGV4dFByZVByb2Nlc3Nvci50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdXRpbHNfY3NzQ2xhc3NCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3V0aWxzL2Nzc0NsYXNzQnVpbGRlciAqLyBcIi4vc3JjL3V0aWxzL2Nzc0NsYXNzQnVpbGRlci50c1wiKTtcbnZhciBfX2V4dGVuZHMgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xuXG5cblxuXG5cblxudmFyIENvbXBvbmVudFF1ZXN0aW9uSlNPTiA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBDb21wb25lbnRRdWVzdGlvbkpTT04obmFtZSwganNvbikge1xuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICB0aGlzLmpzb24gPSBqc29uO1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgIF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJTZXJpYWxpemVyXCJdLmFkZENsYXNzKG5hbWUsIFtdLCBmdW5jdGlvbiAoanNvbikge1xuICAgICAgICAgICAgcmV0dXJuIENvbXBvbmVudENvbGxlY3Rpb24uSW5zdGFuY2UuY3JlYXRlUXVlc3Rpb24oISFqc29uID8ganNvbi5uYW1lIDogXCJcIiwgc2VsZik7XG4gICAgICAgIH0sIFwicXVlc3Rpb25cIik7XG4gICAgICAgIHRoaXMub25Jbml0KCk7XG4gICAgfVxuICAgIENvbXBvbmVudFF1ZXN0aW9uSlNPTi5wcm90b3R5cGUub25Jbml0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuanNvbi5vbkluaXQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMuanNvbi5vbkluaXQoKTtcbiAgICB9O1xuICAgIENvbXBvbmVudFF1ZXN0aW9uSlNPTi5wcm90b3R5cGUub25DcmVhdGVkID0gZnVuY3Rpb24gKHF1ZXN0aW9uKSB7XG4gICAgICAgIGlmICghdGhpcy5qc29uLm9uQ3JlYXRlZClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5qc29uLm9uQ3JlYXRlZChxdWVzdGlvbik7XG4gICAgfTtcbiAgICBDb21wb25lbnRRdWVzdGlvbkpTT04ucHJvdG90eXBlLm9uTG9hZGVkID0gZnVuY3Rpb24gKHF1ZXN0aW9uKSB7XG4gICAgICAgIGlmICghdGhpcy5qc29uLm9uTG9hZGVkKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLmpzb24ub25Mb2FkZWQocXVlc3Rpb24pO1xuICAgIH07XG4gICAgQ29tcG9uZW50UXVlc3Rpb25KU09OLnByb3RvdHlwZS5vbkFmdGVyUmVuZGVyID0gZnVuY3Rpb24gKHF1ZXN0aW9uLCBodG1sRWxlbWVudCkge1xuICAgICAgICBpZiAoIXRoaXMuanNvbi5vbkFmdGVyUmVuZGVyKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLmpzb24ub25BZnRlclJlbmRlcihxdWVzdGlvbiwgaHRtbEVsZW1lbnQpO1xuICAgIH07XG4gICAgQ29tcG9uZW50UXVlc3Rpb25KU09OLnByb3RvdHlwZS5vbkFmdGVyUmVuZGVyQ29udGVudEVsZW1lbnQgPSBmdW5jdGlvbiAocXVlc3Rpb24sIGVsZW1lbnQsIGh0bWxFbGVtZW50KSB7XG4gICAgICAgIGlmICghdGhpcy5qc29uLm9uQWZ0ZXJSZW5kZXJDb250ZW50RWxlbWVudClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5qc29uLm9uQWZ0ZXJSZW5kZXJDb250ZW50RWxlbWVudChxdWVzdGlvbiwgZWxlbWVudCwgaHRtbEVsZW1lbnQpO1xuICAgIH07XG4gICAgQ29tcG9uZW50UXVlc3Rpb25KU09OLnByb3RvdHlwZS5vblVwZGF0ZVF1ZXN0aW9uQ3NzQ2xhc3NlcyA9IGZ1bmN0aW9uIChxdWVzdGlvbiwgZWxlbWVudCwgY3NzKSB7XG4gICAgICAgIGlmICghdGhpcy5qc29uLm9uVXBkYXRlUXVlc3Rpb25Dc3NDbGFzc2VzKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLmpzb24ub25VcGRhdGVRdWVzdGlvbkNzc0NsYXNzZXMocXVlc3Rpb24sIGVsZW1lbnQsIGNzcyk7XG4gICAgfTtcbiAgICBDb21wb25lbnRRdWVzdGlvbkpTT04ucHJvdG90eXBlLm9uUHJvcGVydHlDaGFuZ2VkID0gZnVuY3Rpb24gKHF1ZXN0aW9uLCBwcm9wZXJ0eU5hbWUsIG5ld1ZhbHVlKSB7XG4gICAgICAgIGlmICghdGhpcy5qc29uLm9uUHJvcGVydHlDaGFuZ2VkKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLmpzb24ub25Qcm9wZXJ0eUNoYW5nZWQocXVlc3Rpb24sIHByb3BlcnR5TmFtZSwgbmV3VmFsdWUpO1xuICAgIH07XG4gICAgQ29tcG9uZW50UXVlc3Rpb25KU09OLnByb3RvdHlwZS5vblZhbHVlQ2hhbmdlZCA9IGZ1bmN0aW9uIChxdWVzdGlvbiwgbmFtZSwgbmV3VmFsdWUpIHtcbiAgICAgICAgaWYgKCF0aGlzLmpzb24ub25WYWx1ZUNoYW5nZWQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMuanNvbi5vblZhbHVlQ2hhbmdlZChxdWVzdGlvbiwgbmFtZSwgbmV3VmFsdWUpO1xuICAgIH07XG4gICAgQ29tcG9uZW50UXVlc3Rpb25KU09OLnByb3RvdHlwZS5vblZhbHVlQ2hhbmdpbmcgPSBmdW5jdGlvbiAocXVlc3Rpb24sIG5hbWUsIG5ld1ZhbHVlKSB7XG4gICAgICAgIGlmICghdGhpcy5qc29uLm9uVmFsdWVDaGFuZ2luZylcbiAgICAgICAgICAgIHJldHVybiBuZXdWYWx1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXMuanNvbi5vblZhbHVlQ2hhbmdpbmcocXVlc3Rpb24sIG5hbWUsIG5ld1ZhbHVlKTtcbiAgICB9O1xuICAgIENvbXBvbmVudFF1ZXN0aW9uSlNPTi5wcm90b3R5cGUub25JdGVtVmFsdWVQcm9wZXJ0eUNoYW5nZWQgPSBmdW5jdGlvbiAocXVlc3Rpb24sIGl0ZW0sIHByb3BlcnR5TmFtZSwgbmFtZSwgbmV3VmFsdWUpIHtcbiAgICAgICAgaWYgKCF0aGlzLmpzb24ub25JdGVtVmFsdWVQcm9wZXJ0eUNoYW5nZWQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMuanNvbi5vbkl0ZW1WYWx1ZVByb3BlcnR5Q2hhbmdlZChxdWVzdGlvbiwge1xuICAgICAgICAgICAgb2JqOiBpdGVtLFxuICAgICAgICAgICAgcHJvcGVydHlOYW1lOiBwcm9wZXJ0eU5hbWUsXG4gICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgbmV3VmFsdWU6IG5ld1ZhbHVlLFxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIENvbXBvbmVudFF1ZXN0aW9uSlNPTi5wcm90b3R5cGUuZ2V0RGlzcGxheVZhbHVlID0gZnVuY3Rpb24gKGtleUFzVGV4dCwgdmFsdWUsIHF1ZXN0aW9uKSB7XG4gICAgICAgIGlmICghdGhpcy5qc29uLmdldERpc3BsYXlWYWx1ZSlcbiAgICAgICAgICAgIHJldHVybiBxdWVzdGlvbi5nZXREaXNwbGF5VmFsdWUoa2V5QXNUZXh0LCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzLmpzb24uZ2V0RGlzcGxheVZhbHVlKHF1ZXN0aW9uKTtcbiAgICB9O1xuICAgIENvbXBvbmVudFF1ZXN0aW9uSlNPTi5wcm90b3R5cGUuc2V0VmFsdWVUb1F1ZXN0aW9uID0gZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICB2YXIgY29udmVydGVyID0gdGhpcy5qc29uLnZhbHVlVG9RdWVzdGlvbiB8fCB0aGlzLmpzb24uc2V0VmFsdWU7XG4gICAgICAgIHJldHVybiAhIWNvbnZlcnRlciA/IGNvbnZlcnRlcih2YWwpIDogdmFsO1xuICAgIH07XG4gICAgQ29tcG9uZW50UXVlc3Rpb25KU09OLnByb3RvdHlwZS5nZXRWYWx1ZUZyb21RdWVzdGlvbiA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgdmFyIGNvbnZlcnRlciA9IHRoaXMuanNvbi52YWx1ZUZyb21RdWVzdGlvbiB8fCB0aGlzLmpzb24uZ2V0VmFsdWU7XG4gICAgICAgIHJldHVybiAhIWNvbnZlcnRlciA/IGNvbnZlcnRlcih2YWwpIDogdmFsO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbXBvbmVudFF1ZXN0aW9uSlNPTi5wcm90b3R5cGUsIFwiaXNDb21wb3NpdGVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAhIXRoaXMuanNvbi5lbGVtZW50c0pTT04gfHwgISF0aGlzLmpzb24uY3JlYXRlRWxlbWVudHM7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICByZXR1cm4gQ29tcG9uZW50UXVlc3Rpb25KU09OO1xufSgpKTtcblxudmFyIENvbXBvbmVudENvbGxlY3Rpb24gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gQ29tcG9uZW50Q29sbGVjdGlvbigpIHtcbiAgICAgICAgdGhpcy5jdXN0b21RdWVzdGlvblZhbHVlcyA9IFtdO1xuICAgIH1cbiAgICBDb21wb25lbnRDb2xsZWN0aW9uLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAoanNvbikge1xuICAgICAgICBpZiAoIWpzb24pXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciBuYW1lID0ganNvbi5uYW1lO1xuICAgICAgICBpZiAoIW5hbWUpIHtcbiAgICAgICAgICAgIHRocm93IFwiQXR0cmlidXRlIG5hbWUgaXMgbWlzc2VkXCI7XG4gICAgICAgIH1cbiAgICAgICAgbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKCEhdGhpcy5nZXRDdXN0b21RdWVzdGlvbkJ5TmFtZShuYW1lKSkge1xuICAgICAgICAgICAgdGhyb3cgXCJUaGVyZSBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQgY3VzdG9tIHF1ZXN0aW9uIHdpdGggbmFtZSAnXCIgK1xuICAgICAgICAgICAgICAgIG5hbWUgK1xuICAgICAgICAgICAgICAgIFwiJ1wiO1xuICAgICAgICB9XG4gICAgICAgIGlmICghIV9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJTZXJpYWxpemVyXCJdLmZpbmRDbGFzcyhuYW1lKSkge1xuICAgICAgICAgICAgdGhyb3cgXCJUaGVyZSBpcyBhbHJlYWR5IGNsYXNzIHdpdGggbmFtZSAnXCIgKyBuYW1lICsgXCInXCI7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGN1c3RvbVF1ZXN0aW9uID0gbmV3IENvbXBvbmVudFF1ZXN0aW9uSlNPTihuYW1lLCBqc29uKTtcbiAgICAgICAgaWYgKCEhdGhpcy5vbkFkZGluZ0pzb24pXG4gICAgICAgICAgICB0aGlzLm9uQWRkaW5nSnNvbihuYW1lLCBjdXN0b21RdWVzdGlvbi5pc0NvbXBvc2l0ZSk7XG4gICAgICAgIHRoaXMuY3VzdG9tUXVlc3Rpb25WYWx1ZXMucHVzaChjdXN0b21RdWVzdGlvbik7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29tcG9uZW50Q29sbGVjdGlvbi5wcm90b3R5cGUsIFwiaXRlbXNcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmN1c3RvbVF1ZXN0aW9uVmFsdWVzO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgQ29tcG9uZW50Q29sbGVjdGlvbi5wcm90b3R5cGUuZ2V0Q3VzdG9tUXVlc3Rpb25CeU5hbWUgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY3VzdG9tUXVlc3Rpb25WYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmN1c3RvbVF1ZXN0aW9uVmFsdWVzW2ldLm5hbWUgPT0gbmFtZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jdXN0b21RdWVzdGlvblZhbHVlc1tpXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICAgIENvbXBvbmVudENvbGxlY3Rpb24ucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY3VzdG9tUXVlc3Rpb25WYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJTZXJpYWxpemVyXCJdLnJlbW92ZUNsYXNzKHRoaXMuY3VzdG9tUXVlc3Rpb25WYWx1ZXNbaV0ubmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdXN0b21RdWVzdGlvblZhbHVlcyA9IFtdO1xuICAgIH07XG4gICAgQ29tcG9uZW50Q29sbGVjdGlvbi5wcm90b3R5cGUuY3JlYXRlUXVlc3Rpb24gPSBmdW5jdGlvbiAobmFtZSwgcXVlc3Rpb25KU09OKSB7XG4gICAgICAgIGlmICghIXF1ZXN0aW9uSlNPTi5pc0NvbXBvc2l0ZSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUNvbXBvc2l0ZU1vZGVsKG5hbWUsIHF1ZXN0aW9uSlNPTik7XG4gICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUN1c3RvbU1vZGVsKG5hbWUsIHF1ZXN0aW9uSlNPTik7XG4gICAgfTtcbiAgICBDb21wb25lbnRDb2xsZWN0aW9uLnByb3RvdHlwZS5jcmVhdGVDb21wb3NpdGVNb2RlbCA9IGZ1bmN0aW9uIChuYW1lLCBxdWVzdGlvbkpTT04pIHtcbiAgICAgICAgaWYgKCEhdGhpcy5vbkNyZWF0ZUNvbXBvc2l0ZSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm9uQ3JlYXRlQ29tcG9zaXRlKG5hbWUsIHF1ZXN0aW9uSlNPTik7XG4gICAgICAgIHJldHVybiBuZXcgUXVlc3Rpb25Db21wb3NpdGVNb2RlbChuYW1lLCBxdWVzdGlvbkpTT04pO1xuICAgIH07XG4gICAgQ29tcG9uZW50Q29sbGVjdGlvbi5wcm90b3R5cGUuY3JlYXRlQ3VzdG9tTW9kZWwgPSBmdW5jdGlvbiAobmFtZSwgcXVlc3Rpb25KU09OKSB7XG4gICAgICAgIGlmICghIXRoaXMub25DcmVhdGVDdXN0b20pXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5vbkNyZWF0ZUN1c3RvbShuYW1lLCBxdWVzdGlvbkpTT04pO1xuICAgICAgICByZXR1cm4gbmV3IFF1ZXN0aW9uQ3VzdG9tTW9kZWwobmFtZSwgcXVlc3Rpb25KU09OKTtcbiAgICB9O1xuICAgIENvbXBvbmVudENvbGxlY3Rpb24uSW5zdGFuY2UgPSBuZXcgQ29tcG9uZW50Q29sbGVjdGlvbigpO1xuICAgIHJldHVybiBDb21wb25lbnRDb2xsZWN0aW9uO1xufSgpKTtcblxudmFyIFF1ZXN0aW9uQ3VzdG9tTW9kZWxCYXNlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhRdWVzdGlvbkN1c3RvbU1vZGVsQmFzZSwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBRdWVzdGlvbkN1c3RvbU1vZGVsQmFzZShuYW1lLCBjdXN0b21RdWVzdGlvbikge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBuYW1lKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5jdXN0b21RdWVzdGlvbiA9IGN1c3RvbVF1ZXN0aW9uO1xuICAgICAgICBfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiQ3VzdG9tUHJvcGVydGllc0NvbGxlY3Rpb25cIl0uY3JlYXRlUHJvcGVydGllcyhfdGhpcyk7XG4gICAgICAgIF9zdXJ2ZXlfZWxlbWVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiU3VydmV5RWxlbWVudFwiXS5DcmVhdGVEaXNhYmxlZERlc2lnbkVsZW1lbnRzID0gdHJ1ZTtcbiAgICAgICAgX3RoaXMuY3JlYXRlV3JhcHBlcigpO1xuICAgICAgICBfc3VydmV5X2VsZW1lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIlN1cnZleUVsZW1lbnRcIl0uQ3JlYXRlRGlzYWJsZWREZXNpZ25FbGVtZW50cyA9IGZhbHNlO1xuICAgICAgICBpZiAoISFfdGhpcy5jdXN0b21RdWVzdGlvbikge1xuICAgICAgICAgICAgX3RoaXMuY3VzdG9tUXVlc3Rpb24ub25DcmVhdGVkKF90aGlzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFF1ZXN0aW9uQ3VzdG9tTW9kZWxCYXNlLnByb3RvdHlwZS5nZXRUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLmN1c3RvbVF1ZXN0aW9uID8gdGhpcy5jdXN0b21RdWVzdGlvbi5uYW1lIDogXCJjdXN0b21cIjtcbiAgICB9O1xuICAgIFF1ZXN0aW9uQ3VzdG9tTW9kZWxCYXNlLnByb3RvdHlwZS5sb2NTdHJzQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5sb2NTdHJzQ2hhbmdlZC5jYWxsKHRoaXMpO1xuICAgICAgICBpZiAoISF0aGlzLmdldEVsZW1lbnQoKSkge1xuICAgICAgICAgICAgdGhpcy5nZXRFbGVtZW50KCkubG9jU3Ryc0NoYW5nZWQoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgUXVlc3Rpb25DdXN0b21Nb2RlbEJhc2UucHJvdG90eXBlLmNyZWF0ZVdyYXBwZXIgPSBmdW5jdGlvbiAoKSB7IH07XG4gICAgUXVlc3Rpb25DdXN0b21Nb2RlbEJhc2UucHJvdG90eXBlLm9uUHJvcGVydHlWYWx1ZUNoYW5nZWQgPSBmdW5jdGlvbiAobmFtZSwgb2xkVmFsdWUsIG5ld1ZhbHVlKSB7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUub25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZC5jYWxsKHRoaXMsIG5hbWUsIG9sZFZhbHVlLCBuZXdWYWx1ZSk7XG4gICAgICAgIGlmICghIXRoaXMuY3VzdG9tUXVlc3Rpb24gJiYgIXRoaXMuaXNMb2FkaW5nRnJvbUpzb24pIHtcbiAgICAgICAgICAgIHRoaXMuY3VzdG9tUXVlc3Rpb24ub25Qcm9wZXJ0eUNoYW5nZWQodGhpcywgbmFtZSwgbmV3VmFsdWUpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBRdWVzdGlvbkN1c3RvbU1vZGVsQmFzZS5wcm90b3R5cGUuaXRlbVZhbHVlUHJvcGVydHlDaGFuZ2VkID0gZnVuY3Rpb24gKGl0ZW0sIG5hbWUsIG9sZFZhbHVlLCBuZXdWYWx1ZSkge1xuICAgICAgICBfc3VwZXIucHJvdG90eXBlLml0ZW1WYWx1ZVByb3BlcnR5Q2hhbmdlZC5jYWxsKHRoaXMsIGl0ZW0sIG5hbWUsIG9sZFZhbHVlLCBuZXdWYWx1ZSk7XG4gICAgICAgIGlmICghIXRoaXMuY3VzdG9tUXVlc3Rpb24gJiYgIXRoaXMuaXNMb2FkaW5nRnJvbUpzb24pIHtcbiAgICAgICAgICAgIHRoaXMuY3VzdG9tUXVlc3Rpb24ub25JdGVtVmFsdWVQcm9wZXJ0eUNoYW5nZWQodGhpcywgaXRlbSwgaXRlbS5vd25lclByb3BlcnR5TmFtZSwgbmFtZSwgbmV3VmFsdWUpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBRdWVzdGlvbkN1c3RvbU1vZGVsQmFzZS5wcm90b3R5cGUub25GaXJzdFJlbmRlcmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGVsID0gdGhpcy5nZXRFbGVtZW50KCk7XG4gICAgICAgIGlmICghIWVsKSB7XG4gICAgICAgICAgICBlbC5vbkZpcnN0UmVuZGVyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5vbkZpcnN0UmVuZGVyaW5nLmNhbGwodGhpcyk7XG4gICAgfTtcbiAgICBRdWVzdGlvbkN1c3RvbU1vZGVsQmFzZS5wcm90b3R5cGUub25IaWRpbmdDb250ZW50ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBfc3VwZXIucHJvdG90eXBlLm9uSGlkaW5nQ29udGVudC5jYWxsKHRoaXMpO1xuICAgICAgICB2YXIgZWwgPSB0aGlzLmdldEVsZW1lbnQoKTtcbiAgICAgICAgaWYgKCEhZWwpIHtcbiAgICAgICAgICAgIGVsLm9uSGlkaW5nQ29udGVudCgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBRdWVzdGlvbkN1c3RvbU1vZGVsQmFzZS5wcm90b3R5cGUuZ2V0UHJvZ3Jlc3NJbmZvID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcmVzID0gX3N1cGVyLnByb3RvdHlwZS5nZXRQcm9ncmVzc0luZm8uY2FsbCh0aGlzKTtcbiAgICAgICAgaWYgKCEhdGhpcy5nZXRFbGVtZW50KCkpIHtcbiAgICAgICAgICAgIHJlcyA9IHRoaXMuZ2V0RWxlbWVudCgpLmdldFByb2dyZXNzSW5mbygpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzUmVxdWlyZWQgJiYgcmVzLnJlcXVpcmVkUXVlc3Rpb25Db3VudCA9PSAwKSB7XG4gICAgICAgICAgICByZXMucmVxdWlyZWRRdWVzdGlvbkNvdW50ID0gMTtcbiAgICAgICAgICAgIGlmICghdGhpcy5pc0VtcHR5KCkpIHtcbiAgICAgICAgICAgICAgICByZXMuYW5zd2VyZWRRdWVzdGlvbkNvdW50ID0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH07XG4gICAgUXVlc3Rpb25DdXN0b21Nb2RlbEJhc2UucHJvdG90eXBlLmluaXRFbGVtZW50ID0gZnVuY3Rpb24gKGVsKSB7XG4gICAgICAgIGlmICghZWwpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGVsLnNldFN1cnZleUltcGwodGhpcyk7XG4gICAgICAgIGVsLmRpc2FibGVEZXNpZ25BY3Rpb25zID0gdHJ1ZTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uQ3VzdG9tTW9kZWxCYXNlLnByb3RvdHlwZS5zZXRTdXJ2ZXlJbXBsID0gZnVuY3Rpb24gKHZhbHVlLCBpc0xpZ2h0KSB7XG4gICAgICAgIHRoaXMuaXNTZXR0aW5nVmFsT25Mb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5zZXRTdXJ2ZXlJbXBsLmNhbGwodGhpcywgdmFsdWUsIGlzTGlnaHQpO1xuICAgICAgICB0aGlzLmluaXRFbGVtZW50KHRoaXMuZ2V0RWxlbWVudCgpKTtcbiAgICAgICAgdGhpcy5pc1NldHRpbmdWYWxPbkxvYWRpbmcgPSBmYWxzZTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uQ3VzdG9tTW9kZWxCYXNlLnByb3RvdHlwZS5vblN1cnZleUxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUub25TdXJ2ZXlMb2FkLmNhbGwodGhpcyk7XG4gICAgICAgIGlmICghIXRoaXMuZ2V0RWxlbWVudCgpKSB7XG4gICAgICAgICAgICB0aGlzLmdldEVsZW1lbnQoKS5vblN1cnZleUxvYWQoKTtcbiAgICAgICAgICAgIHRoaXMuY3VzdG9tUXVlc3Rpb24ub25Mb2FkZWQodGhpcyk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFF1ZXN0aW9uQ3VzdG9tTW9kZWxCYXNlLnByb3RvdHlwZS5hZnRlclJlbmRlclF1ZXN0aW9uRWxlbWVudCA9IGZ1bmN0aW9uIChlbCkge1xuICAgICAgICAvL0RvIG5vdGhpbmdcbiAgICB9O1xuICAgIFF1ZXN0aW9uQ3VzdG9tTW9kZWxCYXNlLnByb3RvdHlwZS5hZnRlclJlbmRlciA9IGZ1bmN0aW9uIChlbCkge1xuICAgICAgICBfc3VwZXIucHJvdG90eXBlLmFmdGVyUmVuZGVyLmNhbGwodGhpcywgZWwpO1xuICAgICAgICBpZiAoISF0aGlzLmN1c3RvbVF1ZXN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmN1c3RvbVF1ZXN0aW9uLm9uQWZ0ZXJSZW5kZXIodGhpcywgZWwpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBRdWVzdGlvbkN1c3RvbU1vZGVsQmFzZS5wcm90b3R5cGUub25VcGRhdGVRdWVzdGlvbkNzc0NsYXNzZXMgPSBmdW5jdGlvbiAoZWxlbWVudCwgY3NzKSB7XG4gICAgICAgIGlmICghIXRoaXMuY3VzdG9tUXVlc3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMuY3VzdG9tUXVlc3Rpb24ub25VcGRhdGVRdWVzdGlvbkNzc0NsYXNzZXModGhpcywgZWxlbWVudCwgY3NzKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgUXVlc3Rpb25DdXN0b21Nb2RlbEJhc2UucHJvdG90eXBlLnNldFF1ZXN0aW9uVmFsdWUgPSBmdW5jdGlvbiAobmV3VmFsdWUsIHVwZGF0ZUlzQW5zd2VyZWQpIHtcbiAgICAgICAgaWYgKHVwZGF0ZUlzQW5zd2VyZWQgPT09IHZvaWQgMCkgeyB1cGRhdGVJc0Fuc3dlcmVkID0gdHJ1ZTsgfVxuICAgICAgICBfc3VwZXIucHJvdG90eXBlLnNldFF1ZXN0aW9uVmFsdWUuY2FsbCh0aGlzLCBuZXdWYWx1ZSwgdXBkYXRlSXNBbnN3ZXJlZCk7XG4gICAgICAgIHRoaXMudXBkYXRlRWxlbWVudENzcygpO1xuICAgIH07XG4gICAgUXVlc3Rpb25DdXN0b21Nb2RlbEJhc2UucHJvdG90eXBlLnNldE5ld1ZhbHVlID0gZnVuY3Rpb24gKG5ld1ZhbHVlKSB7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUuc2V0TmV3VmFsdWUuY2FsbCh0aGlzLCBuZXdWYWx1ZSk7XG4gICAgICAgIHRoaXMudXBkYXRlRWxlbWVudENzcygpO1xuICAgIH07XG4gICAgLy9JU3VydmV5SW1wbFxuICAgIFF1ZXN0aW9uQ3VzdG9tTW9kZWxCYXNlLnByb3RvdHlwZS5nZXRTdXJ2ZXlEYXRhID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIFF1ZXN0aW9uQ3VzdG9tTW9kZWxCYXNlLnByb3RvdHlwZS5nZXRUZXh0UHJvY2Vzc29yID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0UHJvY2Vzc29yO1xuICAgIH07XG4gICAgLy9JU3VydmV5RGF0YVxuICAgIFF1ZXN0aW9uQ3VzdG9tTW9kZWxCYXNlLnByb3RvdHlwZS5nZXRWYWx1ZSA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICAgIH07XG4gICAgUXVlc3Rpb25DdXN0b21Nb2RlbEJhc2UucHJvdG90eXBlLnNldFZhbHVlID0gZnVuY3Rpb24gKG5hbWUsIG5ld1ZhbHVlLCBsb2NOb3RpZmljYXRpb24sIGFsbG93Tm90aWZ5VmFsdWVDaGFuZ2VkKSB7XG4gICAgICAgIGlmICghdGhpcy5kYXRhKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIgbmV3TmFtZSA9IHRoaXMuY29udmVydERhdGFOYW1lKG5hbWUpO1xuICAgICAgICB2YXIgdmFsdWVGb3JTdXJ2ZXkgPSB0aGlzLmNvbnZlcnREYXRhVmFsdWUobmFtZSwgbmV3VmFsdWUpO1xuICAgICAgICBpZiAodGhpcy52YWx1ZVRvRGF0YUNhbGxiYWNrKSB7XG4gICAgICAgICAgICB2YWx1ZUZvclN1cnZleSA9IHRoaXMudmFsdWVUb0RhdGFDYWxsYmFjayh2YWx1ZUZvclN1cnZleSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kYXRhLnNldFZhbHVlKG5ld05hbWUsIHZhbHVlRm9yU3VydmV5LCBsb2NOb3RpZmljYXRpb24sIGFsbG93Tm90aWZ5VmFsdWVDaGFuZ2VkKTtcbiAgICAgICAgdGhpcy51cGRhdGVJc0Fuc3dlcmVkKCk7XG4gICAgICAgIHRoaXMudXBkYXRlRWxlbWVudENzcygpO1xuICAgICAgICBpZiAoISF0aGlzLmN1c3RvbVF1ZXN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmN1c3RvbVF1ZXN0aW9uLm9uVmFsdWVDaGFuZ2VkKHRoaXMsIG5hbWUsIG5ld1ZhbHVlKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgUXVlc3Rpb25DdXN0b21Nb2RlbEJhc2UucHJvdG90eXBlLmdldFF1ZXN0aW9uQnlOYW1lID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIFF1ZXN0aW9uQ3VzdG9tTW9kZWxCYXNlLnByb3RvdHlwZS5pc1ZhbHVlQ2hhbmdpbmcgPSBmdW5jdGlvbiAobmFtZSwgbmV3VmFsdWUpIHtcbiAgICAgICAgaWYgKCEhdGhpcy5jdXN0b21RdWVzdGlvbikge1xuICAgICAgICAgICAgdmFyIHFWYWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgICAgICAgbmV3VmFsdWUgPSB0aGlzLmN1c3RvbVF1ZXN0aW9uLm9uVmFsdWVDaGFuZ2luZyh0aGlzLCBuYW1lLCBuZXdWYWx1ZSk7XG4gICAgICAgICAgICBpZiAoIV9oZWxwZXJzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJIZWxwZXJzXCJdLmlzVHdvVmFsdWVFcXVhbHMobmV3VmFsdWUsIHFWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICB2YXIgcSA9IHRoaXMuZ2V0UXVlc3Rpb25CeU5hbWUobmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKCEhcSkge1xuICAgICAgICAgICAgICAgICAgICBxLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgICBRdWVzdGlvbkN1c3RvbU1vZGVsQmFzZS5wcm90b3R5cGUuY29udmVydERhdGFOYW1lID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VmFsdWVOYW1lKCk7XG4gICAgfTtcbiAgICBRdWVzdGlvbkN1c3RvbU1vZGVsQmFzZS5wcm90b3R5cGUuY29udmVydERhdGFWYWx1ZSA9IGZ1bmN0aW9uIChuYW1lLCBuZXdWYWx1ZSkge1xuICAgICAgICByZXR1cm4gbmV3VmFsdWU7XG4gICAgfTtcbiAgICBRdWVzdGlvbkN1c3RvbU1vZGVsQmFzZS5wcm90b3R5cGUuZ2V0VmFyaWFibGUgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICByZXR1cm4gISF0aGlzLmRhdGEgPyB0aGlzLmRhdGEuZ2V0VmFyaWFibGUobmFtZSkgOiBudWxsO1xuICAgIH07XG4gICAgUXVlc3Rpb25DdXN0b21Nb2RlbEJhc2UucHJvdG90eXBlLnNldFZhcmlhYmxlID0gZnVuY3Rpb24gKG5hbWUsIG5ld1ZhbHVlKSB7XG4gICAgICAgIGlmICghdGhpcy5kYXRhKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLmRhdGEuc2V0VmFyaWFibGUobmFtZSwgbmV3VmFsdWUpO1xuICAgIH07XG4gICAgUXVlc3Rpb25DdXN0b21Nb2RlbEJhc2UucHJvdG90eXBlLmdldENvbW1lbnQgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICByZXR1cm4gISF0aGlzLmRhdGEgPyB0aGlzLmRhdGEuZ2V0Q29tbWVudCh0aGlzLmdldFZhbHVlTmFtZSgpKSA6IFwiXCI7XG4gICAgfTtcbiAgICBRdWVzdGlvbkN1c3RvbU1vZGVsQmFzZS5wcm90b3R5cGUuc2V0Q29tbWVudCA9IGZ1bmN0aW9uIChuYW1lLCBuZXdWYWx1ZSwgbG9jTm90aWZpY2F0aW9uKSB7XG4gICAgICAgIGlmICghdGhpcy5kYXRhKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLmRhdGEuc2V0Q29tbWVudCh0aGlzLmdldFZhbHVlTmFtZSgpLCBuZXdWYWx1ZSwgbG9jTm90aWZpY2F0aW9uKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uQ3VzdG9tTW9kZWxCYXNlLnByb3RvdHlwZS5nZXRBbGxWYWx1ZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuZGF0YSA/IHRoaXMuZGF0YS5nZXRBbGxWYWx1ZXMoKSA6IHt9O1xuICAgIH07XG4gICAgUXVlc3Rpb25DdXN0b21Nb2RlbEJhc2UucHJvdG90eXBlLmdldEZpbHRlcmVkVmFsdWVzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLmRhdGEgPyB0aGlzLmRhdGEuZ2V0RmlsdGVyZWRWYWx1ZXMoKSA6IHt9O1xuICAgIH07XG4gICAgUXVlc3Rpb25DdXN0b21Nb2RlbEJhc2UucHJvdG90eXBlLmdldEZpbHRlcmVkUHJvcGVydGllcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5kYXRhID8gdGhpcy5kYXRhLmdldEZpbHRlcmVkUHJvcGVydGllcygpIDoge307XG4gICAgfTtcbiAgICBRdWVzdGlvbkN1c3RvbU1vZGVsQmFzZS5wcm90b3R5cGUuZmluZFF1ZXN0aW9uQnlOYW1lID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5kYXRhID8gdGhpcy5kYXRhLmZpbmRRdWVzdGlvbkJ5TmFtZShuYW1lKSA6IG51bGw7XG4gICAgfTtcbiAgICAvL0lQYW5lbFxuICAgIFF1ZXN0aW9uQ3VzdG9tTW9kZWxCYXNlLnByb3RvdHlwZS5hZGRFbGVtZW50ID0gZnVuY3Rpb24gKGVsZW1lbnQsIGluZGV4KSB7IH07XG4gICAgUXVlc3Rpb25DdXN0b21Nb2RlbEJhc2UucHJvdG90eXBlLnJlbW92ZUVsZW1lbnQgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgICBRdWVzdGlvbkN1c3RvbU1vZGVsQmFzZS5wcm90b3R5cGUuZ2V0UXVlc3Rpb25UaXRsZUxvY2F0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gXCJsZWZ0XCI7XG4gICAgfTtcbiAgICBRdWVzdGlvbkN1c3RvbU1vZGVsQmFzZS5wcm90b3R5cGUuZ2V0UXVlc3Rpb25TdGFydEluZGV4ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRTdGFydEluZGV4KCk7XG4gICAgfTtcbiAgICBRdWVzdGlvbkN1c3RvbU1vZGVsQmFzZS5wcm90b3R5cGUuZ2V0Q2hpbGRyZW5MYXlvdXRUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gXCJyb3dcIjtcbiAgICB9O1xuICAgIFF1ZXN0aW9uQ3VzdG9tTW9kZWxCYXNlLnByb3RvdHlwZS5lbGVtZW50V2lkdGhDaGFuZ2VkID0gZnVuY3Rpb24gKGVsKSB7IH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uQ3VzdG9tTW9kZWxCYXNlLnByb3RvdHlwZSwgXCJlbGVtZW50c1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUXVlc3Rpb25DdXN0b21Nb2RlbEJhc2UucHJvdG90eXBlLmluZGV4T2YgPSBmdW5jdGlvbiAoZWwpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH07XG4gICAgUXVlc3Rpb25DdXN0b21Nb2RlbEJhc2UucHJvdG90eXBlLmVuc3VyZVJvd3NWaXNpYmlsaXR5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBkbyBub3RoaW5nXG4gICAgfTtcbiAgICBRdWVzdGlvbkN1c3RvbU1vZGVsQmFzZS5wcm90b3R5cGUudmFsaWRhdGVDb250YWluZXJPbmx5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBkbyBub3RoaW5nXG4gICAgfTtcbiAgICBRdWVzdGlvbkN1c3RvbU1vZGVsQmFzZS5wcm90b3R5cGUuZ2V0UXVlc3Rpb25FcnJvckxvY2F0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRFcnJvckxvY2F0aW9uKCk7XG4gICAgfTtcbiAgICBRdWVzdGlvbkN1c3RvbU1vZGVsQmFzZS5wcm90b3R5cGUuZ2V0Q29udGVudERpc3BsYXlWYWx1ZUNvcmUgPSBmdW5jdGlvbiAoa2V5QXNUZXh0LCB2YWx1ZSwgcXVlc3Rpb24pIHtcbiAgICAgICAgaWYgKCFxdWVzdGlvbilcbiAgICAgICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLmdldERpc3BsYXlWYWx1ZUNvcmUuY2FsbCh0aGlzLCBrZXlBc1RleHQsIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VzdG9tUXVlc3Rpb24uZ2V0RGlzcGxheVZhbHVlKGtleUFzVGV4dCwgdmFsdWUsIHF1ZXN0aW9uKTtcbiAgICB9O1xuICAgIHJldHVybiBRdWVzdGlvbkN1c3RvbU1vZGVsQmFzZTtcbn0oX3F1ZXN0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJRdWVzdGlvblwiXSkpO1xuXG52YXIgUXVlc3Rpb25DdXN0b21Nb2RlbCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoUXVlc3Rpb25DdXN0b21Nb2RlbCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBRdWVzdGlvbkN1c3RvbU1vZGVsKCkge1xuICAgICAgICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgfVxuICAgIFF1ZXN0aW9uQ3VzdG9tTW9kZWwucHJvdG90eXBlLmdldFRlbXBsYXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gXCJjdXN0b21cIjtcbiAgICB9O1xuICAgIFF1ZXN0aW9uQ3VzdG9tTW9kZWwucHJvdG90eXBlLmNyZWF0ZVdyYXBwZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMucXVlc3Rpb25XcmFwcGVyID0gdGhpcy5jcmVhdGVRdWVzdGlvbigpO1xuICAgIH07XG4gICAgUXVlc3Rpb25DdXN0b21Nb2RlbC5wcm90b3R5cGUuZ2V0RWxlbWVudCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGVudFF1ZXN0aW9uO1xuICAgIH07XG4gICAgUXVlc3Rpb25DdXN0b21Nb2RlbC5wcm90b3R5cGUub25BbnlWYWx1ZUNoYW5nZWQgPSBmdW5jdGlvbiAobmFtZSwgcXVlc3Rpb25OYW1lKSB7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUub25BbnlWYWx1ZUNoYW5nZWQuY2FsbCh0aGlzLCBuYW1lLCBxdWVzdGlvbk5hbWUpO1xuICAgICAgICBpZiAoISF0aGlzLmNvbnRlbnRRdWVzdGlvbikge1xuICAgICAgICAgICAgdGhpcy5jb250ZW50UXVlc3Rpb24ub25BbnlWYWx1ZUNoYW5nZWQobmFtZSwgcXVlc3Rpb25OYW1lKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgUXVlc3Rpb25DdXN0b21Nb2RlbC5wcm90b3R5cGUuZ2V0UXVlc3Rpb25CeU5hbWUgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250ZW50UXVlc3Rpb247XG4gICAgfTtcbiAgICBRdWVzdGlvbkN1c3RvbU1vZGVsLnByb3RvdHlwZS5zZXRWYWx1ZSA9IGZ1bmN0aW9uIChuYW1lLCBuZXdWYWx1ZSwgbG9jTm90aWZpY2F0aW9uLCBhbGxvd05vdGlmeVZhbHVlQ2hhbmdlZCkge1xuICAgICAgICBpZiAodGhpcy5pc1ZhbHVlQ2hhbmdpbmcobmFtZSwgbmV3VmFsdWUpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBfc3VwZXIucHJvdG90eXBlLnNldFZhbHVlLmNhbGwodGhpcywgbmFtZSwgbmV3VmFsdWUsIGxvY05vdGlmaWNhdGlvbiwgYWxsb3dOb3RpZnlWYWx1ZUNoYW5nZWQpO1xuICAgIH07XG4gICAgUXVlc3Rpb25DdXN0b21Nb2RlbC5wcm90b3R5cGUub25TZXREYXRhID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBfc3VwZXIucHJvdG90eXBlLm9uU2V0RGF0YS5jYWxsKHRoaXMpO1xuICAgICAgICBpZiAoISF0aGlzLnN1cnZleSAmJiAhdGhpcy5pc0VtcHR5KCkpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUodGhpcy5uYW1lLCB0aGlzLnZhbHVlLCBmYWxzZSwgdGhpcy5hbGxvd05vdGlmeVZhbHVlQ2hhbmdlZCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFF1ZXN0aW9uQ3VzdG9tTW9kZWwucHJvdG90eXBlLmhhc0Vycm9ycyA9IGZ1bmN0aW9uIChmaXJlQ2FsbGJhY2ssIHJlYykge1xuICAgICAgICBpZiAoZmlyZUNhbGxiYWNrID09PSB2b2lkIDApIHsgZmlyZUNhbGxiYWNrID0gdHJ1ZTsgfVxuICAgICAgICBpZiAocmVjID09PSB2b2lkIDApIHsgcmVjID0gbnVsbDsgfVxuICAgICAgICBpZiAoIXRoaXMuY29udGVudFF1ZXN0aW9uKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB2YXIgcmVzID0gdGhpcy5jb250ZW50UXVlc3Rpb24uaGFzRXJyb3JzKGZpcmVDYWxsYmFjaywgcmVjKTtcbiAgICAgICAgdGhpcy5lcnJvcnMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNvbnRlbnRRdWVzdGlvbi5lcnJvcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JzLnB1c2godGhpcy5jb250ZW50UXVlc3Rpb24uZXJyb3JzW2ldKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXJlcykge1xuICAgICAgICAgICAgcmVzID0gX3N1cGVyLnByb3RvdHlwZS5oYXNFcnJvcnMuY2FsbCh0aGlzLCBmaXJlQ2FsbGJhY2ssIHJlYyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVFbGVtZW50Q3NzKCk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfTtcbiAgICBRdWVzdGlvbkN1c3RvbU1vZGVsLnByb3RvdHlwZS5mb2N1cyA9IGZ1bmN0aW9uIChvbkVycm9yKSB7XG4gICAgICAgIGlmIChvbkVycm9yID09PSB2b2lkIDApIHsgb25FcnJvciA9IGZhbHNlOyB9XG4gICAgICAgIGlmICghIXRoaXMuY29udGVudFF1ZXN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRlbnRRdWVzdGlvbi5mb2N1cyhvbkVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIF9zdXBlci5wcm90b3R5cGUuZm9jdXMuY2FsbCh0aGlzLCBvbkVycm9yKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgUXVlc3Rpb25DdXN0b21Nb2RlbC5wcm90b3R5cGUuYWZ0ZXJSZW5kZXIgPSBmdW5jdGlvbiAoZWwpIHtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5hZnRlclJlbmRlci5jYWxsKHRoaXMsIGVsKTtcbiAgICAgICAgaWYgKCEhdGhpcy5jb250ZW50UXVlc3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMuY29udGVudFF1ZXN0aW9uLmFmdGVyUmVuZGVyKGVsKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uQ3VzdG9tTW9kZWwucHJvdG90eXBlLCBcImNvbnRlbnRRdWVzdGlvblwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucXVlc3Rpb25XcmFwcGVyO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUXVlc3Rpb25DdXN0b21Nb2RlbC5wcm90b3R5cGUuY3JlYXRlUXVlc3Rpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBqc29uID0gdGhpcy5jdXN0b21RdWVzdGlvbi5qc29uO1xuICAgICAgICB2YXIgcmVzID0gbnVsbDtcbiAgICAgICAgaWYgKCEhanNvbi5xdWVzdGlvbkpTT04pIHtcbiAgICAgICAgICAgIHZhciBxVHlwZSA9IGpzb24ucXVlc3Rpb25KU09OLnR5cGU7XG4gICAgICAgICAgICBpZiAoIXFUeXBlIHx8ICFfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiU2VyaWFsaXplclwiXS5maW5kQ2xhc3MocVR5cGUpKVxuICAgICAgICAgICAgICAgIHRocm93IFwidHlwZSBhdHRyaWJ1dGUgaW4gcXVlc3Rpb25KU09OIGlzIGVtcHR5IG9yIGluY29ycmVjdFwiO1xuICAgICAgICAgICAgcmVzID0gX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlNlcmlhbGl6ZXJcIl0uY3JlYXRlQ2xhc3MocVR5cGUpO1xuICAgICAgICAgICAgdGhpcy5pbml0RWxlbWVudChyZXMpO1xuICAgICAgICAgICAgcmVzLmZyb21KU09OKGpzb24ucXVlc3Rpb25KU09OKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICghIWpzb24uY3JlYXRlUXVlc3Rpb24pIHtcbiAgICAgICAgICAgICAgICByZXMgPSBqc29uLmNyZWF0ZVF1ZXN0aW9uKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pbml0RWxlbWVudChyZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghIXJlcykge1xuICAgICAgICAgICAgcmVzLmlzQ29udGVudEVsZW1lbnQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCFyZXMubmFtZSkge1xuICAgICAgICAgICAgICAgIHJlcy5uYW1lID0gXCJxdWVzdGlvblwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzLm9uVXBkYXRlQ3NzQ2xhc3Nlc0NhbGxiYWNrID0gZnVuY3Rpb24gKGNzcykge1xuICAgICAgICAgICAgICAgIF90aGlzLm9uVXBkYXRlUXVlc3Rpb25Dc3NDbGFzc2VzKHJlcywgY3NzKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9O1xuICAgIFF1ZXN0aW9uQ3VzdG9tTW9kZWwucHJvdG90eXBlLm9uU3VydmV5TG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5vblN1cnZleUxvYWQuY2FsbCh0aGlzKTtcbiAgICAgICAgaWYgKCF0aGlzLmNvbnRlbnRRdWVzdGlvbilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKHRoaXMuaXNFbXB0eSgpICYmICF0aGlzLmNvbnRlbnRRdWVzdGlvbi5pc0VtcHR5KCkpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmdldENvbnRlbnRRdWVzdGlvblZhbHVlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFF1ZXN0aW9uQ3VzdG9tTW9kZWwucHJvdG90eXBlLnJ1bkNvbmRpdGlvbiA9IGZ1bmN0aW9uICh2YWx1ZXMsIHByb3BlcnRpZXMpIHtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5ydW5Db25kaXRpb24uY2FsbCh0aGlzLCB2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgICAgICBpZiAoISF0aGlzLmNvbnRlbnRRdWVzdGlvbikge1xuICAgICAgICAgICAgdGhpcy5jb250ZW50UXVlc3Rpb24ucnVuQ29uZGl0aW9uKHZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFF1ZXN0aW9uQ3VzdG9tTW9kZWwucHJvdG90eXBlLmNvbnZlcnREYXRhTmFtZSA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIGlmICghdGhpcy5jb250ZW50UXVlc3Rpb24pXG4gICAgICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5jb252ZXJ0RGF0YU5hbWUuY2FsbCh0aGlzLCBuYW1lKTtcbiAgICAgICAgdmFyIG5ld05hbWUgPSBuYW1lLnJlcGxhY2UodGhpcy5jb250ZW50UXVlc3Rpb24uZ2V0VmFsdWVOYW1lKCksIHRoaXMuZ2V0VmFsdWVOYW1lKCkpO1xuICAgICAgICByZXR1cm4gbmV3TmFtZS5pbmRleE9mKHRoaXMuZ2V0VmFsdWVOYW1lKCkpID09IDBcbiAgICAgICAgICAgID8gbmV3TmFtZVxuICAgICAgICAgICAgOiBfc3VwZXIucHJvdG90eXBlLmNvbnZlcnREYXRhTmFtZS5jYWxsKHRoaXMsIG5hbWUpO1xuICAgIH07XG4gICAgUXVlc3Rpb25DdXN0b21Nb2RlbC5wcm90b3R5cGUuY29udmVydERhdGFWYWx1ZSA9IGZ1bmN0aW9uIChuYW1lLCBuZXdWYWx1ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb252ZXJ0RGF0YU5hbWUobmFtZSkgPT0gX3N1cGVyLnByb3RvdHlwZS5jb252ZXJ0RGF0YU5hbWUuY2FsbCh0aGlzLCBuYW1lKVxuICAgICAgICAgICAgPyB0aGlzLmdldENvbnRlbnRRdWVzdGlvblZhbHVlKClcbiAgICAgICAgICAgIDogbmV3VmFsdWU7XG4gICAgfTtcbiAgICBRdWVzdGlvbkN1c3RvbU1vZGVsLnByb3RvdHlwZS5nZXRDb250ZW50UXVlc3Rpb25WYWx1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbnRlbnRRdWVzdGlvbilcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIHZhciB2YWwgPSB0aGlzLmNvbnRlbnRRdWVzdGlvbi52YWx1ZTtcbiAgICAgICAgaWYgKCEhdGhpcy5jdXN0b21RdWVzdGlvbilcbiAgICAgICAgICAgIHZhbCA9IHRoaXMuY3VzdG9tUXVlc3Rpb24uZ2V0VmFsdWVGcm9tUXVlc3Rpb24odmFsKTtcbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9O1xuICAgIFF1ZXN0aW9uQ3VzdG9tTW9kZWwucHJvdG90eXBlLnNldENvbnRlbnRRdWVzdGlvblZhbHVlID0gZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICBpZiAoIXRoaXMuY29udGVudFF1ZXN0aW9uKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAoISF0aGlzLmN1c3RvbVF1ZXN0aW9uKVxuICAgICAgICAgICAgdmFsID0gdGhpcy5jdXN0b21RdWVzdGlvbi5zZXRWYWx1ZVRvUXVlc3Rpb24odmFsKTtcbiAgICAgICAgdGhpcy5jb250ZW50UXVlc3Rpb24udmFsdWUgPSB2YWw7XG4gICAgfTtcbiAgICBRdWVzdGlvbkN1c3RvbU1vZGVsLnByb3RvdHlwZS5jYW5TZXRWYWx1ZVRvU3VydmV5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgICBRdWVzdGlvbkN1c3RvbU1vZGVsLnByb3RvdHlwZS5zZXRRdWVzdGlvblZhbHVlID0gZnVuY3Rpb24gKG5ld1ZhbHVlLCB1cGRhdGVJc0Fuc3dlcmVkKSB7XG4gICAgICAgIGlmICh1cGRhdGVJc0Fuc3dlcmVkID09PSB2b2lkIDApIHsgdXBkYXRlSXNBbnN3ZXJlZCA9IHRydWU7IH1cbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5zZXRRdWVzdGlvblZhbHVlLmNhbGwodGhpcywgbmV3VmFsdWUsIHVwZGF0ZUlzQW5zd2VyZWQpO1xuICAgICAgICBpZiAoIXRoaXMuaXNMb2FkaW5nRnJvbUpzb24gJiYgISF0aGlzLmNvbnRlbnRRdWVzdGlvbiAmJlxuICAgICAgICAgICAgIXRoaXMuaXNUd29WYWx1ZUVxdWFscyh0aGlzLmdldENvbnRlbnRRdWVzdGlvblZhbHVlKCksIG5ld1ZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy5zZXRDb250ZW50UXVlc3Rpb25WYWx1ZSh0aGlzLmdldFVuYmluZFZhbHVlKG5ld1ZhbHVlKSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFF1ZXN0aW9uQ3VzdG9tTW9kZWwucHJvdG90eXBlLm9uU3VydmV5VmFsdWVDaGFuZ2VkID0gZnVuY3Rpb24gKG5ld1ZhbHVlKSB7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUub25TdXJ2ZXlWYWx1ZUNoYW5nZWQuY2FsbCh0aGlzLCBuZXdWYWx1ZSk7XG4gICAgICAgIGlmICghIXRoaXMuY29udGVudFF1ZXN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRlbnRRdWVzdGlvbi5vblN1cnZleVZhbHVlQ2hhbmdlZChuZXdWYWx1ZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFF1ZXN0aW9uQ3VzdG9tTW9kZWwucHJvdG90eXBlLmdldFZhbHVlQ29yZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCEhdGhpcy5jb250ZW50UXVlc3Rpb24pXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDb250ZW50UXVlc3Rpb25WYWx1ZSgpO1xuICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5nZXRWYWx1ZUNvcmUuY2FsbCh0aGlzKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uQ3VzdG9tTW9kZWwucHJvdG90eXBlLmluaXRFbGVtZW50ID0gZnVuY3Rpb24gKGVsKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUuaW5pdEVsZW1lbnQuY2FsbCh0aGlzLCBlbCk7XG4gICAgICAgIGlmICghIWVsKSB7XG4gICAgICAgICAgICBlbC5wYXJlbnQgPSB0aGlzO1xuICAgICAgICAgICAgZWwuYWZ0ZXJSZW5kZXJRdWVzdGlvbkNhbGxiYWNrID0gZnVuY3Rpb24gKHF1ZXN0aW9uLCBlbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgaWYgKCEhX3RoaXMuY3VzdG9tUXVlc3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuY3VzdG9tUXVlc3Rpb24ub25BZnRlclJlbmRlckNvbnRlbnRFbGVtZW50KF90aGlzLCBxdWVzdGlvbiwgZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgUXVlc3Rpb25DdXN0b21Nb2RlbC5wcm90b3R5cGUudXBkYXRlRWxlbWVudENzcyA9IGZ1bmN0aW9uIChyZU5ldykge1xuICAgICAgICBpZiAoISF0aGlzLmNvbnRlbnRRdWVzdGlvbikge1xuICAgICAgICAgICAgdGhpcy5xdWVzdGlvbldyYXBwZXIudXBkYXRlRWxlbWVudENzcyhyZU5ldyk7XG4gICAgICAgIH1cbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS51cGRhdGVFbGVtZW50Q3NzLmNhbGwodGhpcywgcmVOZXcpO1xuICAgIH07XG4gICAgUXVlc3Rpb25DdXN0b21Nb2RlbC5wcm90b3R5cGUudXBkYXRlRWxlbWVudENzc0NvcmUgPSBmdW5jdGlvbiAoY3NzQ2xhc3Nlcykge1xuICAgICAgICBpZiAoISF0aGlzLmNvbnRlbnRRdWVzdGlvbikge1xuICAgICAgICAgICAgY3NzQ2xhc3NlcyA9IHRoaXMuY29udGVudFF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgICAgIH1cbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS51cGRhdGVFbGVtZW50Q3NzQ29yZS5jYWxsKHRoaXMsIGNzc0NsYXNzZXMpO1xuICAgIH07XG4gICAgUXVlc3Rpb25DdXN0b21Nb2RlbC5wcm90b3R5cGUuZ2V0RGlzcGxheVZhbHVlQ29yZSA9IGZ1bmN0aW9uIChrZXlBc1RleHQsIHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLmdldENvbnRlbnREaXNwbGF5VmFsdWVDb3JlLmNhbGwodGhpcywga2V5QXNUZXh0LCB2YWx1ZSwgdGhpcy5jb250ZW50UXVlc3Rpb24pO1xuICAgIH07XG4gICAgcmV0dXJuIFF1ZXN0aW9uQ3VzdG9tTW9kZWw7XG59KFF1ZXN0aW9uQ3VzdG9tTW9kZWxCYXNlKSk7XG5cbnZhciBRdWVzdGlvbkNvbXBvc2l0ZVRleHRQcm9jZXNzb3IgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFF1ZXN0aW9uQ29tcG9zaXRlVGV4dFByb2Nlc3NvciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBRdWVzdGlvbkNvbXBvc2l0ZVRleHRQcm9jZXNzb3IoY29tcG9zaXRlLCB2YXJpYWJsZU5hbWUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgdmFyaWFibGVOYW1lKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5jb21wb3NpdGUgPSBjb21wb3NpdGU7XG4gICAgICAgIF90aGlzLnZhcmlhYmxlTmFtZSA9IHZhcmlhYmxlTmFtZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25Db21wb3NpdGVUZXh0UHJvY2Vzc29yLnByb3RvdHlwZSwgXCJzdXJ2ZXlcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbXBvc2l0ZS5zdXJ2ZXk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25Db21wb3NpdGVUZXh0UHJvY2Vzc29yLnByb3RvdHlwZSwgXCJwYW5lbFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29tcG9zaXRlLmNvbnRlbnRQYW5lbDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIHJldHVybiBRdWVzdGlvbkNvbXBvc2l0ZVRleHRQcm9jZXNzb3I7XG59KF90ZXh0UHJlUHJvY2Vzc29yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bXCJRdWVzdGlvblRleHRQcm9jZXNzb3JcIl0pKTtcbnZhciBRdWVzdGlvbkNvbXBvc2l0ZU1vZGVsID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhRdWVzdGlvbkNvbXBvc2l0ZU1vZGVsLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFF1ZXN0aW9uQ29tcG9zaXRlTW9kZWwobmFtZSwgY3VzdG9tUXVlc3Rpb24pIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbmFtZSwgY3VzdG9tUXVlc3Rpb24pIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmN1c3RvbVF1ZXN0aW9uID0gY3VzdG9tUXVlc3Rpb247XG4gICAgICAgIF90aGlzLnNldHRpbmdOZXdWYWx1ZSA9IGZhbHNlO1xuICAgICAgICBfdGhpcy50ZXh0UHJvY2Vzc2luZyA9IG5ldyBRdWVzdGlvbkNvbXBvc2l0ZVRleHRQcm9jZXNzb3IoX3RoaXMsIFF1ZXN0aW9uQ29tcG9zaXRlTW9kZWwuSXRlbVZhcmlhYmxlTmFtZSk7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgUXVlc3Rpb25Db21wb3NpdGVNb2RlbC5wcm90b3R5cGUuY3JlYXRlV3JhcHBlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5wYW5lbFdyYXBwZXIgPSB0aGlzLmNyZWF0ZVBhbmVsKCk7XG4gICAgfTtcbiAgICBRdWVzdGlvbkNvbXBvc2l0ZU1vZGVsLnByb3RvdHlwZS5nZXRUZW1wbGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIFwiY29tcG9zaXRlXCI7XG4gICAgfTtcbiAgICBRdWVzdGlvbkNvbXBvc2l0ZU1vZGVsLnByb3RvdHlwZS5nZXRFbGVtZW50ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250ZW50UGFuZWw7XG4gICAgfTtcbiAgICBRdWVzdGlvbkNvbXBvc2l0ZU1vZGVsLnByb3RvdHlwZS5nZXRDc3NSb290ID0gZnVuY3Rpb24gKGNzc0NsYXNzZXMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBfdXRpbHNfY3NzQ2xhc3NCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bXCJDc3NDbGFzc0J1aWxkZXJcIl0oKS5hcHBlbmQoX3N1cGVyLnByb3RvdHlwZS5nZXRDc3NSb290LmNhbGwodGhpcywgY3NzQ2xhc3NlcykpLmFwcGVuZChjc3NDbGFzc2VzLmNvbXBvc2l0ZSkudG9TdHJpbmcoKTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbkNvbXBvc2l0ZU1vZGVsLnByb3RvdHlwZSwgXCJjb250ZW50UGFuZWxcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhbmVsV3JhcHBlcjtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFF1ZXN0aW9uQ29tcG9zaXRlTW9kZWwucHJvdG90eXBlLmhhc0Vycm9ycyA9IGZ1bmN0aW9uIChmaXJlQ2FsbGJhY2ssIHJlYykge1xuICAgICAgICBpZiAoZmlyZUNhbGxiYWNrID09PSB2b2lkIDApIHsgZmlyZUNhbGxiYWNrID0gdHJ1ZTsgfVxuICAgICAgICBpZiAocmVjID09PSB2b2lkIDApIHsgcmVjID0gbnVsbDsgfVxuICAgICAgICB2YXIgcmVzID0gX3N1cGVyLnByb3RvdHlwZS5oYXNFcnJvcnMuY2FsbCh0aGlzLCBmaXJlQ2FsbGJhY2ssIHJlYyk7XG4gICAgICAgIGlmICghdGhpcy5jb250ZW50UGFuZWwpXG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICByZXR1cm4gdGhpcy5jb250ZW50UGFuZWwuaGFzRXJyb3JzKGZpcmVDYWxsYmFjaywgZmFsc2UsIHJlYykgfHwgcmVzO1xuICAgIH07XG4gICAgUXVlc3Rpb25Db21wb3NpdGVNb2RlbC5wcm90b3R5cGUudXBkYXRlRWxlbWVudENzcyA9IGZ1bmN0aW9uIChyZU5ldykge1xuICAgICAgICBfc3VwZXIucHJvdG90eXBlLnVwZGF0ZUVsZW1lbnRDc3MuY2FsbCh0aGlzLCByZU5ldyk7XG4gICAgICAgIGlmICh0aGlzLmNvbnRlbnRQYW5lbCkge1xuICAgICAgICAgICAgdGhpcy5jb250ZW50UGFuZWwudXBkYXRlRWxlbWVudENzcyhyZU5ldyk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFF1ZXN0aW9uQ29tcG9zaXRlTW9kZWwucHJvdG90eXBlLmdldFRleHRQcm9jZXNzb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHRQcm9jZXNzaW5nO1xuICAgIH07XG4gICAgUXVlc3Rpb25Db21wb3NpdGVNb2RlbC5wcm90b3R5cGUuZmluZFF1ZXN0aW9uQnlOYW1lID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgdmFyIHJlcyA9IHRoaXMuZ2V0UXVlc3Rpb25CeU5hbWUobmFtZSk7XG4gICAgICAgIGlmICghIXJlcylcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLmZpbmRRdWVzdGlvbkJ5TmFtZS5jYWxsKHRoaXMsIG5hbWUpO1xuICAgIH07XG4gICAgUXVlc3Rpb25Db21wb3NpdGVNb2RlbC5wcm90b3R5cGUuY2xlYXJWYWx1ZUlmSW52aXNpYmxlQ29yZSA9IGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5jbGVhclZhbHVlSWZJbnZpc2libGVDb3JlLmNhbGwodGhpcywgcmVhc29uKTtcbiAgICAgICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMuY29udGVudFBhbmVsLnF1ZXN0aW9ucztcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHF1ZXN0aW9uc1tpXS5jbGVhclZhbHVlSWZJbnZpc2libGUocmVhc29uKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgUXVlc3Rpb25Db21wb3NpdGVNb2RlbC5wcm90b3R5cGUub25BbnlWYWx1ZUNoYW5nZWQgPSBmdW5jdGlvbiAobmFtZSwgcXVlc3Rpb25OYW1lKSB7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUub25BbnlWYWx1ZUNoYW5nZWQuY2FsbCh0aGlzLCBuYW1lLCBxdWVzdGlvbk5hbWUpO1xuICAgICAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5jb250ZW50UGFuZWwucXVlc3Rpb25zO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgcXVlc3Rpb25zW2ldLm9uQW55VmFsdWVDaGFuZ2VkKG5hbWUsIHF1ZXN0aW9uTmFtZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbkNvbXBvc2l0ZU1vZGVsLnByb3RvdHlwZSwgXCJoYXNTaW5nbGVJbnB1dFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZmFsc2U7IH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25Db21wb3NpdGVNb2RlbC5wcm90b3R5cGUsIFwiaXNDb250YWluZXJcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRydWU7IH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBRdWVzdGlvbkNvbXBvc2l0ZU1vZGVsLnByb3RvdHlwZS5jcmVhdGVQYW5lbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIHJlcyA9IF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJTZXJpYWxpemVyXCJdLmNyZWF0ZUNsYXNzKFwicGFuZWxcIik7XG4gICAgICAgIHJlcy5zaG93UXVlc3Rpb25OdW1iZXJzID0gXCJvZmZcIjtcbiAgICAgICAgcmVzLnJlbmRlcldpZHRoID0gXCIxMDAlXCI7XG4gICAgICAgIHZhciBqc29uID0gdGhpcy5jdXN0b21RdWVzdGlvbi5qc29uO1xuICAgICAgICBpZiAoISFqc29uLmVsZW1lbnRzSlNPTikge1xuICAgICAgICAgICAgcmVzLmZyb21KU09OKHsgZWxlbWVudHM6IGpzb24uZWxlbWVudHNKU09OIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghIWpzb24uY3JlYXRlRWxlbWVudHMpIHtcbiAgICAgICAgICAgIGpzb24uY3JlYXRlRWxlbWVudHMocmVzLCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmluaXRFbGVtZW50KHJlcyk7XG4gICAgICAgIHJlcy5yZWFkT25seSA9IHRoaXMuaXNSZWFkT25seTtcbiAgICAgICAgcmVzLnF1ZXN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChxKSB7IHJldHVybiBxLm9uVXBkYXRlQ3NzQ2xhc3Nlc0NhbGxiYWNrID0gZnVuY3Rpb24gKGNzcykge1xuICAgICAgICAgICAgX3RoaXMub25VcGRhdGVRdWVzdGlvbkNzc0NsYXNzZXMocSwgY3NzKTtcbiAgICAgICAgfTsgfSk7XG4gICAgICAgIHRoaXMuc2V0QWZ0ZXJSZW5kZXJDYWxsYmFja3MocmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9O1xuICAgIFF1ZXN0aW9uQ29tcG9zaXRlTW9kZWwucHJvdG90eXBlLm9uUmVhZE9ubHlDaGFuZ2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoISF0aGlzLmNvbnRlbnRQYW5lbCkge1xuICAgICAgICAgICAgdGhpcy5jb250ZW50UGFuZWwucmVhZE9ubHkgPSB0aGlzLmlzUmVhZE9ubHk7XG4gICAgICAgIH1cbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5vblJlYWRPbmx5Q2hhbmdlZC5jYWxsKHRoaXMpO1xuICAgIH07XG4gICAgUXVlc3Rpb25Db21wb3NpdGVNb2RlbC5wcm90b3R5cGUub25TdXJ2ZXlMb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmlzU2V0dGluZ1ZhbE9uTG9hZGluZyA9IHRydWU7XG4gICAgICAgIGlmICghIXRoaXMuY29udGVudFBhbmVsKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRlbnRQYW5lbC5yZWFkT25seSA9IHRoaXMuaXNSZWFkT25seTtcbiAgICAgICAgICAgIHRoaXMuc2V0SXNDb250ZW50RWxlbWVudCh0aGlzLmNvbnRlbnRQYW5lbCk7XG4gICAgICAgIH1cbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5vblN1cnZleUxvYWQuY2FsbCh0aGlzKTtcbiAgICAgICAgaWYgKCEhdGhpcy5jb250ZW50UGFuZWwpIHtcbiAgICAgICAgICAgIHZhciB2YWwgPSB0aGlzLmdldENvbnRlbnRQYW5lbFZhbHVlKCk7XG4gICAgICAgICAgICBpZiAoIV9oZWxwZXJzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJIZWxwZXJzXCJdLmlzVmFsdWVFbXB0eSh2YWwpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlzU2V0dGluZ1ZhbE9uTG9hZGluZyA9IGZhbHNlO1xuICAgIH07XG4gICAgUXVlc3Rpb25Db21wb3NpdGVNb2RlbC5wcm90b3R5cGUuc2V0SXNDb250ZW50RWxlbWVudCA9IGZ1bmN0aW9uIChwYW5lbCkge1xuICAgICAgICBwYW5lbC5pc0NvbnRlbnRFbGVtZW50ID0gdHJ1ZTtcbiAgICAgICAgdmFyIGVsZW1lbnRzID0gcGFuZWwuZWxlbWVudHM7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBlbCA9IGVsZW1lbnRzW2ldO1xuICAgICAgICAgICAgaWYgKGVsLmlzUGFuZWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldElzQ29udGVudEVsZW1lbnQoZWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZWwuaXNDb250ZW50RWxlbWVudCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFF1ZXN0aW9uQ29tcG9zaXRlTW9kZWwucHJvdG90eXBlLnNldFZpc2libGVJbmRleCA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgdmFyIHJlcyA9IF9zdXBlci5wcm90b3R5cGUuc2V0VmlzaWJsZUluZGV4LmNhbGwodGhpcywgdmFsKTtcbiAgICAgICAgaWYgKHRoaXMuaXNWaXNpYmxlICYmICEhdGhpcy5jb250ZW50UGFuZWwpIHtcbiAgICAgICAgICAgIHJlcyArPSB0aGlzLmNvbnRlbnRQYW5lbC5zZXRWaXNpYmxlSW5kZXgodmFsKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH07XG4gICAgUXVlc3Rpb25Db21wb3NpdGVNb2RlbC5wcm90b3R5cGUucnVuQ29uZGl0aW9uID0gZnVuY3Rpb24gKHZhbHVlcywgcHJvcGVydGllcykge1xuICAgICAgICBfc3VwZXIucHJvdG90eXBlLnJ1bkNvbmRpdGlvbi5jYWxsKHRoaXMsIHZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgICAgIGlmICghIXRoaXMuY29udGVudFBhbmVsKSB7XG4gICAgICAgICAgICB2YXIgb2xkQ29tcG9zaXRlID0gdmFsdWVzW1F1ZXN0aW9uQ29tcG9zaXRlTW9kZWwuSXRlbVZhcmlhYmxlTmFtZV07XG4gICAgICAgICAgICB2YWx1ZXNbUXVlc3Rpb25Db21wb3NpdGVNb2RlbC5JdGVtVmFyaWFibGVOYW1lXSA9IHRoaXMuY29udGVudFBhbmVsLmdldFZhbHVlKCk7XG4gICAgICAgICAgICB0aGlzLmNvbnRlbnRQYW5lbC5ydW5Db25kaXRpb24odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgIGRlbGV0ZSB2YWx1ZXNbUXVlc3Rpb25Db21wb3NpdGVNb2RlbC5JdGVtVmFyaWFibGVOYW1lXTtcbiAgICAgICAgICAgIGlmICghIW9sZENvbXBvc2l0ZSkge1xuICAgICAgICAgICAgICAgIHZhbHVlc1tRdWVzdGlvbkNvbXBvc2l0ZU1vZGVsLkl0ZW1WYXJpYWJsZU5hbWVdID0gb2xkQ29tcG9zaXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBRdWVzdGlvbkNvbXBvc2l0ZU1vZGVsLnByb3RvdHlwZS5nZXRWYWx1ZSA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIHZhciB2YWwgPSB0aGlzLnZhbHVlO1xuICAgICAgICByZXR1cm4gISF2YWwgPyB2YWxbbmFtZV0gOiBudWxsO1xuICAgIH07XG4gICAgUXVlc3Rpb25Db21wb3NpdGVNb2RlbC5wcm90b3R5cGUuZ2V0UXVlc3Rpb25CeU5hbWUgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICByZXR1cm4gISF0aGlzLmNvbnRlbnRQYW5lbCA/IHRoaXMuY29udGVudFBhbmVsLmdldFF1ZXN0aW9uQnlOYW1lKG5hbWUpIDogdW5kZWZpbmVkO1xuICAgIH07XG4gICAgUXVlc3Rpb25Db21wb3NpdGVNb2RlbC5wcm90b3R5cGUuc2V0VmFsdWUgPSBmdW5jdGlvbiAobmFtZSwgbmV3VmFsdWUsIGxvY05vdGlmaWNhdGlvbiwgYWxsb3dOb3RpZnlWYWx1ZUNoYW5nZWQpIHtcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZ05ld1ZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnNldE5ld1ZhbHVlSW50b1F1ZXN0aW9uKG5hbWUsIG5ld1ZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc1ZhbHVlQ2hhbmdpbmcobmFtZSwgbmV3VmFsdWUpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLnNldHRpbmdOZXdWYWx1ZSA9IHRydWU7XG4gICAgICAgIGlmICghdGhpcy5pc0VkaXRpbmdTdXJ2ZXlFbGVtZW50ICYmICEhdGhpcy5jb250ZW50UGFuZWwpIHtcbiAgICAgICAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICAgICAgICB2YXIgbWF4VGltZXMgPSB0aGlzLmNvbnRlbnRQYW5lbC5xdWVzdGlvbnMubGVuZ3RoICsgMTtcbiAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IG1heFRpbWVzICYmIHRoaXMudXBkYXRlVmFsdWVDb3JlV2l0aFBhbmVsVmFsdWUoKSlcbiAgICAgICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0TmV3VmFsdWVJbnRvUXVlc3Rpb24obmFtZSwgbmV3VmFsdWUpO1xuICAgICAgICBfc3VwZXIucHJvdG90eXBlLnNldFZhbHVlLmNhbGwodGhpcywgbmFtZSwgbmV3VmFsdWUsIGxvY05vdGlmaWNhdGlvbiwgYWxsb3dOb3RpZnlWYWx1ZUNoYW5nZWQpO1xuICAgICAgICB0aGlzLnNldHRpbmdOZXdWYWx1ZSA9IGZhbHNlO1xuICAgIH07XG4gICAgUXVlc3Rpb25Db21wb3NpdGVNb2RlbC5wcm90b3R5cGUudXBkYXRlVmFsdWVDb3JlV2l0aFBhbmVsVmFsdWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBwYW5lbFZhbHVlID0gdGhpcy5nZXRDb250ZW50UGFuZWxWYWx1ZSgpO1xuICAgICAgICBpZiAodGhpcy5pc1R3b1ZhbHVlRXF1YWxzKHRoaXMuZ2V0VmFsdWVDb3JlKCksIHBhbmVsVmFsdWUpKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB0aGlzLnNldFZhbHVlQ29yZShwYW5lbFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgICBRdWVzdGlvbkNvbXBvc2l0ZU1vZGVsLnByb3RvdHlwZS5nZXRDb250ZW50UGFuZWxWYWx1ZSA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgaWYgKCF2YWwpXG4gICAgICAgICAgICB2YWwgPSB0aGlzLmNvbnRlbnRQYW5lbC5nZXRWYWx1ZSgpO1xuICAgICAgICByZXR1cm4gdGhpcy5jdXN0b21RdWVzdGlvbi5zZXRWYWx1ZVRvUXVlc3Rpb24odmFsKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uQ29tcG9zaXRlTW9kZWwucHJvdG90eXBlLmdldFZhbHVlRm9yQ29udGVudFBhbmVsID0gZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXN0b21RdWVzdGlvbi5nZXRWYWx1ZUZyb21RdWVzdGlvbih2YWwpO1xuICAgIH07XG4gICAgUXVlc3Rpb25Db21wb3NpdGVNb2RlbC5wcm90b3R5cGUuc2V0TmV3VmFsdWVJbnRvUXVlc3Rpb24gPSBmdW5jdGlvbiAobmFtZSwgbmV3VmFsdWUpIHtcbiAgICAgICAgdmFyIHEgPSB0aGlzLmdldFF1ZXN0aW9uQnlOYW1lKG5hbWUpO1xuICAgICAgICBpZiAoISFxICYmICF0aGlzLmlzVHdvVmFsdWVFcXVhbHMobmV3VmFsdWUsIHEudmFsdWUpKSB7XG4gICAgICAgICAgICBxLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFF1ZXN0aW9uQ29tcG9zaXRlTW9kZWwucHJvdG90eXBlLmFkZENvbmRpdGlvbk9iamVjdHNCeUNvbnRleHQgPSBmdW5jdGlvbiAob2JqZWN0cywgY29udGV4dCkge1xuICAgICAgICBpZiAoIXRoaXMuY29udGVudFBhbmVsKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5jb250ZW50UGFuZWwucXVlc3Rpb25zO1xuICAgICAgICB2YXIgcHJlZml4TmFtZSA9IHRoaXMubmFtZTtcbiAgICAgICAgdmFyIHByZWZpeFRleHQgPSB0aGlzLnRpdGxlO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgb2JqZWN0cy5wdXNoKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBwcmVmaXhOYW1lICsgXCIuXCIgKyBxdWVzdGlvbnNbaV0ubmFtZSxcbiAgICAgICAgICAgICAgICB0ZXh0OiBwcmVmaXhUZXh0ICsgXCIuXCIgKyBxdWVzdGlvbnNbaV0udGl0bGUsXG4gICAgICAgICAgICAgICAgcXVlc3Rpb246IHF1ZXN0aW9uc1tpXSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBRdWVzdGlvbkNvbXBvc2l0ZU1vZGVsLnByb3RvdHlwZS5jb2xsZWN0TmVzdGVkUXVlc3Rpb25zQ29yZSA9IGZ1bmN0aW9uIChxdWVzdGlvbnMsIHZpc2libGVPbmx5KSB7XG4gICAgICAgIGlmICghdGhpcy5jb250ZW50UGFuZWwpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMuY29udGVudFBhbmVsLnF1ZXN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChxKSB7IHJldHVybiBxLmNvbGxlY3ROZXN0ZWRRdWVzdGlvbnMocXVlc3Rpb25zLCB2aXNpYmxlT25seSk7IH0pO1xuICAgIH07XG4gICAgUXVlc3Rpb25Db21wb3NpdGVNb2RlbC5wcm90b3R5cGUuY29udmVydERhdGFWYWx1ZSA9IGZ1bmN0aW9uIChuYW1lLCBuZXdWYWx1ZSkge1xuICAgICAgICB2YXIgdmFsID0gdGhpcy5nZXRWYWx1ZUZvckNvbnRlbnRQYW5lbCh0aGlzLnZhbHVlKTtcbiAgICAgICAgaWYgKCF2YWwpXG4gICAgICAgICAgICB2YWwgPSB7fTtcbiAgICAgICAgaWYgKHRoaXMuaXNWYWx1ZUVtcHR5KG5ld1ZhbHVlKSAmJiAhdGhpcy5pc0VkaXRpbmdTdXJ2ZXlFbGVtZW50KSB7XG4gICAgICAgICAgICBkZWxldGUgdmFsW25hbWVdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFsW25hbWVdID0gbmV3VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29udGVudFBhbmVsVmFsdWUodmFsKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uQ29tcG9zaXRlTW9kZWwucHJvdG90eXBlLnNldFF1ZXN0aW9uVmFsdWUgPSBmdW5jdGlvbiAobmV3VmFsdWUsIHVwZGF0ZUlzQW5zd2VyZWQpIHtcbiAgICAgICAgaWYgKHVwZGF0ZUlzQW5zd2VyZWQgPT09IHZvaWQgMCkgeyB1cGRhdGVJc0Fuc3dlcmVkID0gdHJ1ZTsgfVxuICAgICAgICB0aGlzLnNldFZhbHVlc0ludG9RdWVzdGlvbnMobmV3VmFsdWUpO1xuICAgICAgICBpZiAoIXRoaXMuaXNFZGl0aW5nU3VydmV5RWxlbWVudCAmJiAhIXRoaXMuY29udGVudFBhbmVsKSB7XG4gICAgICAgICAgICBuZXdWYWx1ZSA9IHRoaXMuZ2V0Q29udGVudFBhbmVsVmFsdWUoKTtcbiAgICAgICAgfVxuICAgICAgICBfc3VwZXIucHJvdG90eXBlLnNldFF1ZXN0aW9uVmFsdWUuY2FsbCh0aGlzLCBuZXdWYWx1ZSwgdXBkYXRlSXNBbnN3ZXJlZCk7XG4gICAgfTtcbiAgICBRdWVzdGlvbkNvbXBvc2l0ZU1vZGVsLnByb3RvdHlwZS5zZXRWYWx1ZXNJbnRvUXVlc3Rpb25zID0gZnVuY3Rpb24gKG5ld1ZhbHVlKSB7XG4gICAgICAgIGlmICghdGhpcy5jb250ZW50UGFuZWwpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIG5ld1ZhbHVlID0gdGhpcy5nZXRWYWx1ZUZvckNvbnRlbnRQYW5lbChuZXdWYWx1ZSk7XG4gICAgICAgIHZhciBvbGRTZXR0aW5nTmV3VmFsdWUgPSB0aGlzLnNldHRpbmdOZXdWYWx1ZTtcbiAgICAgICAgdGhpcy5zZXR0aW5nTmV3VmFsdWUgPSB0cnVlO1xuICAgICAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5jb250ZW50UGFuZWwucXVlc3Rpb25zO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGtleSA9IHF1ZXN0aW9uc1tpXS5nZXRWYWx1ZU5hbWUoKTtcbiAgICAgICAgICAgIHZhciB2YWwgPSAhIW5ld1ZhbHVlID8gbmV3VmFsdWVba2V5XSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHZhciBxID0gcXVlc3Rpb25zW2ldO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlzVHdvVmFsdWVFcXVhbHMocS52YWx1ZSwgdmFsKSkge1xuICAgICAgICAgICAgICAgIHEudmFsdWUgPSB2YWw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXR0aW5nTmV3VmFsdWUgPSBvbGRTZXR0aW5nTmV3VmFsdWU7XG4gICAgfTtcbiAgICBRdWVzdGlvbkNvbXBvc2l0ZU1vZGVsLnByb3RvdHlwZS5nZXREaXNwbGF5VmFsdWVDb3JlID0gZnVuY3Rpb24gKGtleUFzVGV4dCwgdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUuZ2V0Q29udGVudERpc3BsYXlWYWx1ZUNvcmUuY2FsbCh0aGlzLCBrZXlBc1RleHQsIHZhbHVlLCB0aGlzLmNvbnRlbnRQYW5lbCk7XG4gICAgfTtcbiAgICBRdWVzdGlvbkNvbXBvc2l0ZU1vZGVsLnByb3RvdHlwZS5zZXRBZnRlclJlbmRlckNhbGxiYWNrcyA9IGZ1bmN0aW9uIChwYW5lbCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBpZiAoIXBhbmVsIHx8ICF0aGlzLmN1c3RvbVF1ZXN0aW9uKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIgcXVlc3Rpb25zID0gcGFuZWwucXVlc3Rpb25zO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgcXVlc3Rpb25zW2ldLmFmdGVyUmVuZGVyUXVlc3Rpb25DYWxsYmFjayA9IGZ1bmN0aW9uIChxdWVzdGlvbiwgZWxlbWVudCkge1xuICAgICAgICAgICAgICAgIF90aGlzLmN1c3RvbVF1ZXN0aW9uLm9uQWZ0ZXJSZW5kZXJDb250ZW50RWxlbWVudChfdGhpcywgcXVlc3Rpb24sIGVsZW1lbnQpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgUXVlc3Rpb25Db21wb3NpdGVNb2RlbC5JdGVtVmFyaWFibGVOYW1lID0gXCJjb21wb3NpdGVcIjtcbiAgICByZXR1cm4gUXVlc3Rpb25Db21wb3NpdGVNb2RlbDtcbn0oUXVlc3Rpb25DdXN0b21Nb2RlbEJhc2UpKTtcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3F1ZXN0aW9uX2Ryb3Bkb3duLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3F1ZXN0aW9uX2Ryb3Bkb3duLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFF1ZXN0aW9uRHJvcGRvd25Nb2RlbCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJRdWVzdGlvbkRyb3Bkb3duTW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBRdWVzdGlvbkRyb3Bkb3duTW9kZWw7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2pzb25vYmplY3QgKi8gXCIuL3NyYy9qc29ub2JqZWN0LnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9xdWVzdGlvbmZhY3RvcnlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcXVlc3Rpb25mYWN0b3J5ICovIFwiLi9zcmMvcXVlc3Rpb25mYWN0b3J5LnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9xdWVzdGlvbl9iYXNlc2VsZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3F1ZXN0aW9uX2Jhc2VzZWxlY3QgKi8gXCIuL3NyYy9xdWVzdGlvbl9iYXNlc2VsZWN0LnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF91dGlsc19jc3NDbGFzc0J1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vdXRpbHMvY3NzQ2xhc3NCdWlsZGVyICovIFwiLi9zcmMvdXRpbHMvY3NzQ2xhc3NCdWlsZGVyLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9kcm9wZG93bkxpc3RNb2RlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9kcm9wZG93bkxpc3RNb2RlbCAqLyBcIi4vc3JjL2Ryb3Bkb3duTGlzdE1vZGVsLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9zZXR0aW5ncyAqLyBcIi4vc3JjL3NldHRpbmdzLnRzXCIpO1xudmFyIF9fZXh0ZW5kcyA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG52YXIgX19kZWNvcmF0ZSA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xuXG5cblxuXG5cblxuLyoqXG4gKiBBIGNsYXNzIHRoYXQgZGVzY3JpYmVzIHRoZSBEcm9wZG93biBxdWVzdGlvbiB0eXBlLlxuICpcbiAqIFtWaWV3IERlbW9dKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2V4YW1wbGVzL3F1ZXN0aW9udHlwZS1kcm9wZG93bi8gKGxpbmtTdHlsZSkpXG4gKi9cbnZhciBRdWVzdGlvbkRyb3Bkb3duTW9kZWwgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFF1ZXN0aW9uRHJvcGRvd25Nb2RlbCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBRdWVzdGlvbkRyb3Bkb3duTW9kZWwobmFtZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBuYW1lKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5sYXN0U2VsZWN0ZWRJdGVtVmFsdWUgPSBudWxsO1xuICAgICAgICBfdGhpcy5taW5NYXhDaG9pY2VzID0gW107XG4gICAgICAgIF90aGlzLm9uT3BlbmVkID0gX3RoaXMuYWRkRXZlbnQoKTtcbiAgICAgICAgX3RoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJwbGFjZWhvbGRlclwiLCBfdGhpcywgZmFsc2UsIHRydWUpO1xuICAgICAgICBfdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcImNsZWFyQ2FwdGlvblwiLCBfdGhpcywgZmFsc2UsIHRydWUpO1xuICAgICAgICBfdGhpcy5yZWdpc3RlclByb3BlcnR5Q2hhbmdlZEhhbmRsZXJzKFtcImNob2ljZXNNaW5cIiwgXCJjaG9pY2VzTWF4XCIsIFwiY2hvaWNlc1N0ZXBcIl0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLm9uVmlzaWJsZUNob2ljZXNDaGFuZ2VkKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBfdGhpcy5yZWdpc3RlclByb3BlcnR5Q2hhbmdlZEhhbmRsZXJzKFtcInZhbHVlXCIsIFwicmVuZGVyQXNcIiwgXCJzaG93T3RoZXJJdGVtXCIsIFwib3RoZXJUZXh0XCIsIFwicGxhY2Vob2xkZXJcIiwgXCJjaG9pY2VzXCIsIFwidmlzaWJsZUNob2ljZXNcIl0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLnVwZGF0ZVJlYWRPbmx5VGV4dCgpO1xuICAgICAgICB9KTtcbiAgICAgICAgX3RoaXMudXBkYXRlUmVhZE9ubHlUZXh0KCk7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgUXVlc3Rpb25Ecm9wZG93bk1vZGVsLnByb3RvdHlwZS51cGRhdGVSZWFkT25seVRleHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSAhIXRoaXMuc2VsZWN0ZWRJdGVtID8gXCJcIiA6IHRoaXMucGxhY2Vob2xkZXI7XG4gICAgICAgIGlmICh0aGlzLnJlbmRlckFzID09IFwic2VsZWN0XCIpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzT3RoZXJTZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMub3RoZXJUZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5pc05vbmVTZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMubm9uZVRleHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICghIXRoaXMuc2VsZWN0ZWRJdGVtKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy5zZWxlY3RlZEl0ZW1UZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVhZE9ubHlUZXh0ID0gcmVzdWx0O1xuICAgIH07XG4gICAgUXVlc3Rpb25Ecm9wZG93bk1vZGVsLnByb3RvdHlwZS5sb2NTdHJzQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5sb2NTdHJzQ2hhbmdlZC5jYWxsKHRoaXMpO1xuICAgICAgICB0aGlzLnVwZGF0ZVJlYWRPbmx5VGV4dCgpO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uRHJvcGRvd25Nb2RlbC5wcm90b3R5cGUsIFwic2hvd09wdGlvbnNDYXB0aW9uXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hbGxvd0NsZWFyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuYWxsb3dDbGVhciA9IHZhbDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbkRyb3Bkb3duTW9kZWwucHJvdG90eXBlLCBcIm9wdGlvbnNDYXB0aW9uXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wbGFjZWhvbGRlcjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnBsYWNlaG9sZGVyID0gdmFsO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uRHJvcGRvd25Nb2RlbC5wcm90b3R5cGUsIFwicGxhY2Vob2xkZXJcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogQSBwbGFjZWhvbGRlciBmb3IgdGhlIGlucHV0IGZpZWxkLlxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJwbGFjZWhvbGRlclwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcInBsYWNlaG9sZGVyXCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25Ecm9wZG93bk1vZGVsLnByb3RvdHlwZSwgXCJsb2NQbGFjZWhvbGRlclwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJwbGFjZWhvbGRlclwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbkRyb3Bkb3duTW9kZWwucHJvdG90eXBlLCBcImNsZWFyQ2FwdGlvblwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwiY2xlYXJDYXB0aW9uXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJjbGVhckNhcHRpb25cIiwgdmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uRHJvcGRvd25Nb2RlbC5wcm90b3R5cGUsIFwibG9jQ2xlYXJDYXB0aW9uXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcImNsZWFyQ2FwdGlvblwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFF1ZXN0aW9uRHJvcGRvd25Nb2RlbC5wcm90b3R5cGUuZ2V0VHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIFwiZHJvcGRvd25cIjtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbkRyb3Bkb3duTW9kZWwucHJvdG90eXBlLCBcImFyaWFSb2xlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJjb21ib2JveFwiO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uRHJvcGRvd25Nb2RlbC5wcm90b3R5cGUsIFwic2VsZWN0ZWRJdGVtXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLmdldFNpbmdsZVNlbGVjdGVkSXRlbSgpOyB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUXVlc3Rpb25Ecm9wZG93bk1vZGVsLnByb3RvdHlwZS5vbkdldFNpbmdsZVNlbGVjdGVkSXRlbSA9IGZ1bmN0aW9uIChzZWxlY3RlZEl0ZW1CeVZhbHVlKSB7XG4gICAgICAgIGlmICghIXNlbGVjdGVkSXRlbUJ5VmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMubGFzdFNlbGVjdGVkSXRlbVZhbHVlID0gc2VsZWN0ZWRJdGVtQnlWYWx1ZTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgUXVlc3Rpb25Ecm9wZG93bk1vZGVsLnByb3RvdHlwZS5zdXBwb3J0R29OZXh0UGFnZUF1dG9tYXRpYyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgICBRdWVzdGlvbkRyb3Bkb3duTW9kZWwucHJvdG90eXBlLmdldENob2ljZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBpdGVtcyA9IF9zdXBlci5wcm90b3R5cGUuZ2V0Q2hvaWNlcy5jYWxsKHRoaXMpO1xuICAgICAgICBpZiAodGhpcy5jaG9pY2VzTWF4IDw9IHRoaXMuY2hvaWNlc01pbilcbiAgICAgICAgICAgIHJldHVybiBpdGVtcztcbiAgICAgICAgdmFyIHJlcyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICByZXMucHVzaChpdGVtc1tpXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubWluTWF4Q2hvaWNlcy5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgICAgIHRoaXMubWluTWF4Q2hvaWNlcy5sZW5ndGggIT09XG4gICAgICAgICAgICAgICAgKHRoaXMuY2hvaWNlc01heCAtIHRoaXMuY2hvaWNlc01pbikgLyB0aGlzLmNob2ljZXNTdGVwICsgMSkge1xuICAgICAgICAgICAgdGhpcy5taW5NYXhDaG9pY2VzID0gW107XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5jaG9pY2VzTWluOyBpIDw9IHRoaXMuY2hvaWNlc01heDsgaSArPSB0aGlzLmNob2ljZXNTdGVwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5taW5NYXhDaG9pY2VzLnB1c2godGhpcy5jcmVhdGVJdGVtVmFsdWUoaSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlcyA9IHJlcy5jb25jYXQodGhpcy5taW5NYXhDaG9pY2VzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbkRyb3Bkb3duTW9kZWwucHJvdG90eXBlLCBcImNob2ljZXNNaW5cIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogVXNlIHRoZSBgY2hvaWNlc01pbmAsIGBjaG9pY2VzTWF4YCwgYW5kIGBjaG9pY2VzU3RlcGAgcHJvcGVydGllcyB0byBnZW5lcmF0ZSBjaG9pY2UgaXRlbXMgYXV0b21hdGljYWxseS4gRm9yIGV4YW1wbGUsIHRoZSBjb25maWd1cmF0aW9uIGJlbG93IGdlbmVyYXRlcyB0aHJlZSBjaG9pY2UgaXRlbXM6IFsxMCwgMjAsIDMwXS5cbiAgICAgICAgICpcbiAgICAgICAgICogYGBganNcbiAgICAgICAgICogXCJjaG9pY2VzTWluXCI6IDEwLFxuICAgICAgICAgKiBcImNob2ljZXNNYXhcIjogMzBcbiAgICAgICAgICogXCJjaG9pY2VzU3RlcFwiOiAxMFxuICAgICAgICAgKiBgYGBcbiAgICAgICAgICogQHNlZSBjaG9pY2VzTWF4XG4gICAgICAgICAqIEBzZWUgY2hvaWNlc1N0ZXBcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNob2ljZXNNaW5cIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY2hvaWNlc01pblwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uRHJvcGRvd25Nb2RlbC5wcm90b3R5cGUsIFwiY2hvaWNlc01heFwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBVc2UgdGhlIGBjaG9pY2VzTWluYCwgYGNob2ljZXNNYXhgLCBhbmQgYGNob2ljZXNTdGVwYCBwcm9wZXJ0aWVzIHRvIGdlbmVyYXRlIGNob2ljZSBpdGVtcyBhdXRvbWF0aWNhbGx5LiBGb3IgZXhhbXBsZSwgdGhlIGNvbmZpZ3VyYXRpb24gYmVsb3cgZ2VuZXJhdGVzIHRocmVlIGNob2ljZSBpdGVtczogWzEwLCAyMCwgMzBdLlxuICAgICAgICAgKlxuICAgICAgICAgKiBgYGBqc1xuICAgICAgICAgKiBcImNob2ljZXNNaW5cIjogMTAsXG4gICAgICAgICAqIFwiY2hvaWNlc01heFwiOiAzMFxuICAgICAgICAgKiBcImNob2ljZXNTdGVwXCI6IDEwXG4gICAgICAgICAqIGBgYFxuICAgICAgICAgKiBAc2VlIGNob2ljZXNNaW5cbiAgICAgICAgICogQHNlZSBjaG9pY2VzU3RlcFxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY2hvaWNlc01heFwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjaG9pY2VzTWF4XCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25Ecm9wZG93bk1vZGVsLnByb3RvdHlwZSwgXCJjaG9pY2VzU3RlcFwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBVc2UgdGhlIGBjaG9pY2VzTWluYCwgYGNob2ljZXNNYXhgLCBhbmQgYGNob2ljZXNTdGVwYCBwcm9wZXJ0aWVzIHRvIGdlbmVyYXRlIGNob2ljZSBpdGVtcyBhdXRvbWF0aWNhbGx5LiBGb3IgZXhhbXBsZSwgdGhlIGNvbmZpZ3VyYXRpb24gYmVsb3cgZ2VuZXJhdGVzIHRocmVlIGNob2ljZSBpdGVtczogWzEwLCAyMCwgMzBdLlxuICAgICAgICAgKlxuICAgICAgICAgKiBgYGBqc1xuICAgICAgICAgKiBcImNob2ljZXNNaW5cIjogMTAsXG4gICAgICAgICAqIFwiY2hvaWNlc01heFwiOiAzMFxuICAgICAgICAgKiBcImNob2ljZXNTdGVwXCI6IDEwXG4gICAgICAgICAqIGBgYFxuICAgICAgICAgKlxuICAgICAgICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgYGNob2ljZXNTdGVwYCBwcm9wZXJ0eSBpcyAxLlxuICAgICAgICAgKiBAc2VlIGNob2ljZXNNaW5cbiAgICAgICAgICogQHNlZSBjaG9pY2VzTWF4XG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjaG9pY2VzU3RlcFwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICBpZiAodmFsIDwgMSlcbiAgICAgICAgICAgICAgICB2YWwgPSAxO1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY2hvaWNlc1N0ZXBcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbkRyb3Bkb3duTW9kZWwucHJvdG90eXBlLCBcImF1dG9jb21wbGV0ZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImF1dG9jb21wbGV0ZVwiLCBcIlwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJhdXRvY29tcGxldGVcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFF1ZXN0aW9uRHJvcGRvd25Nb2RlbC5wcm90b3R5cGUuZ2V0Q29udHJvbENsYXNzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gbmV3IF91dGlsc19jc3NDbGFzc0J1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcIkNzc0NsYXNzQnVpbGRlclwiXSgpXG4gICAgICAgICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5jb250cm9sKVxuICAgICAgICAgICAgLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMuY29udHJvbEVtcHR5LCB0aGlzLmlzRW1wdHkoKSlcbiAgICAgICAgICAgIC5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLm9uRXJyb3IsIHRoaXMuZXJyb3JzLmxlbmd0aCA+IDApXG4gICAgICAgICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5jb250cm9sRGlzYWJsZWQsIHRoaXMuaXNSZWFkT25seSlcbiAgICAgICAgICAgIC5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLmNvbnRyb2xJbnB1dEZpZWxkQ29tcG9uZW50LCAhIXRoaXMuaW5wdXRGaWVsZENvbXBvbmVudE5hbWUpXG4gICAgICAgICAgICAudG9TdHJpbmcoKTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbkRyb3Bkb3duTW9kZWwucHJvdG90eXBlLCBcInNlbGVjdGVkSXRlbUxvY1RleHRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBpdGVtID0gdGhpcy5zdWdnZXN0ZWRJdGVtIHx8IHRoaXMuc2VsZWN0ZWRJdGVtO1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW0gPT09IG51bGwgfHwgaXRlbSA9PT0gdm9pZCAwID8gdm9pZCAwIDogaXRlbS5sb2NUZXh0O1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uRHJvcGRvd25Nb2RlbC5wcm90b3R5cGUsIFwiaW5wdXRGaWVsZENvbXBvbmVudE5hbWVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlucHV0RmllbGRDb21wb25lbnQgfHwgdGhpcy5pdGVtQ29tcG9uZW50O1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uRHJvcGRvd25Nb2RlbC5wcm90b3R5cGUsIFwic2hvd1NlbGVjdGVkSXRlbUxvY1RleHRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAhdGhpcy5pbnB1dEhhc1ZhbHVlICYmICF0aGlzLmlucHV0RmllbGRDb21wb25lbnROYW1lICYmICEhdGhpcy5zZWxlY3RlZEl0ZW1Mb2NUZXh0ICYmIHRoaXMuZHJvcGRvd25MaXN0TW9kZWwuY2FuU2hvd1NlbGVjdGVkSXRlbTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbkRyb3Bkb3duTW9kZWwucHJvdG90eXBlLCBcInNob3dJbnB1dEZpZWxkQ29tcG9uZW50XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gIXRoaXMuaW5wdXRIYXNWYWx1ZSAmJiAhIXRoaXMuaW5wdXRGaWVsZENvbXBvbmVudE5hbWUgJiYgIXRoaXMuaXNFbXB0eSgpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uRHJvcGRvd25Nb2RlbC5wcm90b3R5cGUsIFwic2VsZWN0ZWRJdGVtVGV4dFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGl0ZW0gPSB0aGlzLnNlbGVjdGVkSXRlbTtcbiAgICAgICAgICAgIHJldHVybiAhIWl0ZW0gPyBpdGVtLnRleHQgOiBcIlwiO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uRHJvcGRvd25Nb2RlbC5wcm90b3R5cGUsIFwiZHJvcGRvd25MaXN0TW9kZWxcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnJlbmRlckFzICE9PSBcInNlbGVjdFwiICYmICF0aGlzLmRyb3Bkb3duTGlzdE1vZGVsVmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRyb3Bkb3duTGlzdE1vZGVsVmFsdWUgPSBuZXcgX2Ryb3Bkb3duTGlzdE1vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bXCJEcm9wZG93bkxpc3RNb2RlbFwiXSh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRyb3Bkb3duTGlzdE1vZGVsVmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5kcm9wZG93bkxpc3RNb2RlbFZhbHVlID0gdmFsO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uRHJvcGRvd25Nb2RlbC5wcm90b3R5cGUsIFwicG9wdXBNb2RlbFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuIChfYSA9IHRoaXMuZHJvcGRvd25MaXN0TW9kZWwpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5wb3B1cE1vZGVsO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uRHJvcGRvd25Nb2RlbC5wcm90b3R5cGUsIFwiYXJpYUV4cGFuZGVkXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgcG9wdXBNb2RlbCA9IHRoaXMucG9wdXBNb2RlbDtcbiAgICAgICAgICAgIHJldHVybiAhIXBvcHVwTW9kZWwgJiYgcG9wdXBNb2RlbC5pc1Zpc2libGUgPyBcInRydWVcIiA6IFwiZmFsc2VcIjtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFF1ZXN0aW9uRHJvcGRvd25Nb2RlbC5wcm90b3R5cGUub25PcGVuZWRDYWxsQmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5vbk9wZW5lZC5maXJlKHRoaXMsIHsgcXVlc3Rpb246IHRoaXMsIGNob2ljZXM6IHRoaXMuY2hvaWNlcyB9KTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uRHJvcGRvd25Nb2RlbC5wcm90b3R5cGUub25TZWxlY3RlZEl0ZW1WYWx1ZXNDaGFuZ2VkSGFuZGxlciA9IGZ1bmN0aW9uIChuZXdWYWx1ZSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIChfYSA9IHRoaXMuZHJvcGRvd25MaXN0TW9kZWwpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zZXRJbnB1dFN0cmluZ0Zyb21TZWxlY3RlZEl0ZW0obmV3VmFsdWUpO1xuICAgICAgICBfc3VwZXIucHJvdG90eXBlLm9uU2VsZWN0ZWRJdGVtVmFsdWVzQ2hhbmdlZEhhbmRsZXIuY2FsbCh0aGlzLCBuZXdWYWx1ZSk7XG4gICAgfTtcbiAgICBRdWVzdGlvbkRyb3Bkb3duTW9kZWwucHJvdG90eXBlLmhhc1Vua25vd25WYWx1ZSA9IGZ1bmN0aW9uICh2YWwsIGluY2x1ZGVPdGhlciwgaXNGaWx0ZXJlZENob2ljZXMsIGNoZWNrRW1wdHlWYWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5jaG9pY2VzTGF6eUxvYWRFbmFibGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUuaGFzVW5rbm93blZhbHVlLmNhbGwodGhpcywgdmFsLCBpbmNsdWRlT3RoZXIsIGlzRmlsdGVyZWRDaG9pY2VzLCBjaGVja0VtcHR5VmFsdWUpO1xuICAgIH07XG4gICAgUXVlc3Rpb25Ecm9wZG93bk1vZGVsLnByb3RvdHlwZS5uZWVkQ29udmVydFJlbmRlcmVkT3RoZXJUb0RhdGFWYWx1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICB2YXIgdmFsID0gKF9hID0gdGhpcy5vdGhlclZhbHVlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudHJpbSgpO1xuICAgICAgICBpZiAoIXZhbClcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUuaGFzVW5rbm93blZhbHVlLmNhbGwodGhpcywgdmFsLCB0cnVlLCBmYWxzZSk7XG4gICAgfTtcbiAgICBRdWVzdGlvbkRyb3Bkb3duTW9kZWwucHJvdG90eXBlLmdldEl0ZW1JZkNob2ljZXNOb3RDb250YWluVGhpc1ZhbHVlID0gZnVuY3Rpb24gKHZhbHVlLCB0ZXh0KSB7XG4gICAgICAgIGlmICh0aGlzLmNob2ljZXNMYXp5TG9hZEVuYWJsZWQgJiYgIXRoaXMuZHJvcGRvd25MaXN0TW9kZWwuaXNBbGxEYXRhTG9hZGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVJdGVtVmFsdWUodmFsdWUsIHRleHQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUuZ2V0SXRlbUlmQ2hvaWNlc05vdENvbnRhaW5UaGlzVmFsdWUuY2FsbCh0aGlzLCB2YWx1ZSwgdGV4dCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFF1ZXN0aW9uRHJvcGRvd25Nb2RlbC5wcm90b3R5cGUub25WaXNpYmxlQ2hvaWNlc0NoYW5nZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUub25WaXNpYmxlQ2hvaWNlc0NoYW5nZWQuY2FsbCh0aGlzKTtcbiAgICAgICAgaWYgKHRoaXMucG9wdXBNb2RlbCkge1xuICAgICAgICAgICAgdGhpcy5kcm9wZG93bkxpc3RNb2RlbC51cGRhdGVJdGVtcygpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBRdWVzdGlvbkRyb3Bkb3duTW9kZWwucHJvdG90eXBlLmdldEZpcnN0SW5wdXRFbGVtZW50SWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlucHV0SWQgKyAodGhpcy5zZWFyY2hFbmFibGVkID8gXCJfMFwiIDogXCJcIik7XG4gICAgfTtcbiAgICBRdWVzdGlvbkRyb3Bkb3duTW9kZWwucHJvdG90eXBlLmdldElucHV0SWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlucHV0SWQgKyBcIl8wXCI7XG4gICAgfTtcbiAgICBRdWVzdGlvbkRyb3Bkb3duTW9kZWwucHJvdG90eXBlLmNsZWFyVmFsdWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5jbGVhclZhbHVlLmNhbGwodGhpcyk7XG4gICAgICAgIHRoaXMubGFzdFNlbGVjdGVkSXRlbVZhbHVlID0gbnVsbDtcbiAgICAgICAgKF9hID0gdGhpcy5kcm9wZG93bkxpc3RNb2RlbCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNsZWFyKCk7XG4gICAgfTtcbiAgICBRdWVzdGlvbkRyb3Bkb3duTW9kZWwucHJvdG90eXBlLm9uQ2xpY2sgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICAhIXRoaXMub25PcGVuZWRDYWxsQmFjayAmJiB0aGlzLm9uT3BlbmVkQ2FsbEJhY2soKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uRHJvcGRvd25Nb2RlbC5wcm90b3R5cGUub25LZXlVcCA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICB2YXIgY2hhciA9IGV2ZW50LndoaWNoIHx8IGV2ZW50LmtleUNvZGU7XG4gICAgICAgIGlmIChjaGFyID09PSA0Nikge1xuICAgICAgICAgICAgdGhpcy5jbGVhclZhbHVlKCk7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFF1ZXN0aW9uRHJvcGRvd25Nb2RlbC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG4gICAgICAgIGlmICghIXRoaXMuZHJvcGRvd25MaXN0TW9kZWxWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5kcm9wZG93bkxpc3RNb2RlbFZhbHVlLmRpc3Bvc2UoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicHJvcGVydHlcIl0pKClcbiAgICBdLCBRdWVzdGlvbkRyb3Bkb3duTW9kZWwucHJvdG90eXBlLCBcImFsbG93Q2xlYXJcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJwcm9wZXJ0eVwiXSkoe1xuICAgICAgICAgICAgb25TZXQ6IGZ1bmN0aW9uIChuZXdWYWx1ZSwgdGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgaWYgKCEhdGFyZ2V0LmRyb3Bkb3duTGlzdE1vZGVsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldC5kcm9wZG93bkxpc3RNb2RlbC5zZXRTZWFyY2hFbmFibGVkKG5ld1ZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgXSwgUXVlc3Rpb25Ecm9wZG93bk1vZGVsLnByb3RvdHlwZSwgXCJzZWFyY2hFbmFibGVkXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicHJvcGVydHlcIl0pKHsgZGVmYXVsdFZhbHVlOiBmYWxzZSB9KVxuICAgIF0sIFF1ZXN0aW9uRHJvcGRvd25Nb2RlbC5wcm90b3R5cGUsIFwiaW5wdXRIYXNWYWx1ZVwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QoX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInByb3BlcnR5XCJdKSh7IGRlZmF1bHRWYWx1ZTogXCJcIiB9KVxuICAgIF0sIFF1ZXN0aW9uRHJvcGRvd25Nb2RlbC5wcm90b3R5cGUsIFwicmVhZE9ubHlUZXh0XCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicHJvcGVydHlcIl0pKClcbiAgICBdLCBRdWVzdGlvbkRyb3Bkb3duTW9kZWwucHJvdG90eXBlLCBcImNob2ljZXNMYXp5TG9hZEVuYWJsZWRcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJwcm9wZXJ0eVwiXSkoeyBkZWZhdWx0VmFsdWU6IDI1IH0pXG4gICAgXSwgUXVlc3Rpb25Ecm9wZG93bk1vZGVsLnByb3RvdHlwZSwgXCJjaG9pY2VzTGF6eUxvYWRQYWdlU2l6ZVwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QoX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInByb3BlcnR5XCJdKSgpXG4gICAgXSwgUXVlc3Rpb25Ecm9wZG93bk1vZGVsLnByb3RvdHlwZSwgXCJzdWdnZXN0ZWRJdGVtXCIsIHZvaWQgMCk7XG4gICAgcmV0dXJuIFF1ZXN0aW9uRHJvcGRvd25Nb2RlbDtcbn0oX3F1ZXN0aW9uX2Jhc2VzZWxlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIlF1ZXN0aW9uU2VsZWN0QmFzZVwiXSkpO1xuXG5fanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiU2VyaWFsaXplclwiXS5hZGRDbGFzcyhcImRyb3Bkb3duXCIsIFtcbiAgICB7IG5hbWU6IFwicGxhY2Vob2xkZXJcIiwgYWx0ZXJuYXRpdmVOYW1lOiBcIm9wdGlvbnNDYXB0aW9uXCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NQbGFjZWhvbGRlclwiIH0sXG4gICAgeyBuYW1lOiBcImFsbG93Q2xlYXI6Ym9vbGVhblwiLCBhbHRlcm5hdGl2ZU5hbWU6IFwic2hvd09wdGlvbnNDYXB0aW9uXCIsIGRlZmF1bHQ6IHRydWUgfSxcbiAgICB7IG5hbWU6IFwiY2hvaWNlc01pbjpudW1iZXJcIiwgZGVmYXVsdDogMCB9LFxuICAgIHsgbmFtZTogXCJjaG9pY2VzTWF4Om51bWJlclwiLCBkZWZhdWx0OiAwIH0sXG4gICAgeyBuYW1lOiBcImNob2ljZXNTdGVwOm51bWJlclwiLCBkZWZhdWx0OiAxLCBtaW5WYWx1ZTogMSB9LFxuICAgIHsgbmFtZTogXCJhdXRvY29tcGxldGVcIiwgYWx0ZXJuYXRpdmVOYW1lOiBcImF1dG9Db21wbGV0ZVwiLCBjaG9pY2VzOiBfc2V0dGluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1tcInNldHRpbmdzXCJdLnF1ZXN0aW9ucy5kYXRhTGlzdCwgfSxcbiAgICB7IG5hbWU6IFwicmVuZGVyQXNcIiwgZGVmYXVsdDogXCJkZWZhdWx0XCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcInNlYXJjaEVuYWJsZWQ6Ym9vbGVhblwiLCBkZWZhdWx0OiB0cnVlLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogXCJjaG9pY2VzTGF6eUxvYWRFbmFibGVkOmJvb2xlYW5cIiwgZGVmYXVsdDogZmFsc2UsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcImNob2ljZXNMYXp5TG9hZFBhZ2VTaXplOm51bWJlclwiLCBkZWZhdWx0OiAyNSwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwiaW5wdXRGaWVsZENvbXBvbmVudFwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogXCJpdGVtQ29tcG9uZW50XCIsIHZpc2libGU6IGZhbHNlLCBkZWZhdWx0OiBcIlwiIH1cbl0sIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uRHJvcGRvd25Nb2RlbChcIlwiKTtcbn0sIFwic2VsZWN0YmFzZVwiKTtcbl9xdWVzdGlvbmZhY3RvcnlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlF1ZXN0aW9uRmFjdG9yeVwiXS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiZHJvcGRvd25cIiwgZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB2YXIgcSA9IG5ldyBRdWVzdGlvbkRyb3Bkb3duTW9kZWwobmFtZSk7XG4gICAgcS5jaG9pY2VzID0gX3F1ZXN0aW9uZmFjdG9yeV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiUXVlc3Rpb25GYWN0b3J5XCJdLkRlZmF1bHRDaG9pY2VzO1xuICAgIHJldHVybiBxO1xufSk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvcXVlc3Rpb25fZW1wdHkudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvcXVlc3Rpb25fZW1wdHkudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogUXVlc3Rpb25FbXB0eU1vZGVsICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlF1ZXN0aW9uRW1wdHlNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFF1ZXN0aW9uRW1wdHlNb2RlbDsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vanNvbm9iamVjdCAqLyBcIi4vc3JjL2pzb25vYmplY3QudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3F1ZXN0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3F1ZXN0aW9uICovIFwiLi9zcmMvcXVlc3Rpb24udHNcIik7XG52YXIgX19leHRlbmRzID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcblxuXG4vKipcbiAqIEEgTW9kZWwgZm9yIGFuIHF1ZXN0aW9uIHRoYXQgcmVuZGVycyBlbXB0eSBcImRpdlwiIHRhZy4gSXQgdXNlZCBhcyBhIGJhc2UgY2xhc3MgZm9yIHNvbWUgY3VzdG9tIHdpZGdldHNcbiAqL1xudmFyIFF1ZXN0aW9uRW1wdHlNb2RlbCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoUXVlc3Rpb25FbXB0eU1vZGVsLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFF1ZXN0aW9uRW1wdHlNb2RlbChuYW1lKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIuY2FsbCh0aGlzLCBuYW1lKSB8fCB0aGlzO1xuICAgIH1cbiAgICBRdWVzdGlvbkVtcHR5TW9kZWwucHJvdG90eXBlLmdldFR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBcImVtcHR5XCI7XG4gICAgfTtcbiAgICByZXR1cm4gUXVlc3Rpb25FbXB0eU1vZGVsO1xufShfcXVlc3Rpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlF1ZXN0aW9uXCJdKSk7XG5cbl9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJTZXJpYWxpemVyXCJdLmFkZENsYXNzKFwiZW1wdHlcIiwgW10sIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uRW1wdHlNb2RlbChcIlwiKTtcbn0sIFwicXVlc3Rpb25cIik7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvcXVlc3Rpb25fZXhwcmVzc2lvbi50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3F1ZXN0aW9uX2V4cHJlc3Npb24udHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBRdWVzdGlvbkV4cHJlc3Npb25Nb2RlbCwgZ2V0Q3VycmVjeUNvZGVzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlF1ZXN0aW9uRXhwcmVzc2lvbk1vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUXVlc3Rpb25FeHByZXNzaW9uTW9kZWw7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImdldEN1cnJlY3lDb2Rlc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGdldEN1cnJlY3lDb2RlczsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2hlbHBlcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vaGVscGVycyAqLyBcIi4vc3JjL2hlbHBlcnMudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3F1ZXN0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3F1ZXN0aW9uICovIFwiLi9zcmMvcXVlc3Rpb24udHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vanNvbm9iamVjdCAqLyBcIi4vc3JjL2pzb25vYmplY3QudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3F1ZXN0aW9uZmFjdG9yeV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9xdWVzdGlvbmZhY3RvcnkgKi8gXCIuL3NyYy9xdWVzdGlvbmZhY3RvcnkudHNcIik7XG52YXIgX19leHRlbmRzID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcblxuXG5cblxuLyoqXG4gKiBBIGNsYXNzIHRoYXQgZGVzY3JpYmVzIHRoZSBFeHByZXNzaW9uIHF1ZXN0aW9uIHR5cGUuIEl0IGlzIGEgcmVhZC1vbmx5IHF1ZXN0aW9uIHR5cGUgdGhhdCBjYWxjdWxhdGVzIGEgdmFsdWUgYmFzZWQgb24gYSBzcGVjaWZpZWQgZXhwcmVzc2lvbi5cbiAqXG4gKiBbVmlldyBEZW1vXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9leGFtcGxlcy9xdWVzdGlvbnR5cGUtZXhwcmVzc2lvbi8gKGxpbmtTdHlsZSkpXG4gKi9cbnZhciBRdWVzdGlvbkV4cHJlc3Npb25Nb2RlbCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoUXVlc3Rpb25FeHByZXNzaW9uTW9kZWwsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gUXVlc3Rpb25FeHByZXNzaW9uTW9kZWwobmFtZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBuYW1lKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcImZvcm1hdFwiLCBfdGhpcyk7XG4gICAgICAgIF90aGlzLnJlZ2lzdGVyUHJvcGVydHlDaGFuZ2VkSGFuZGxlcnMoW1wiZXhwcmVzc2lvblwiXSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKF90aGlzLmV4cHJlc3Npb25SdW5uZXIpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5leHByZXNzaW9uUnVubmVyID0gX3RoaXMuY3JlYXRlUnVubmVyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBfdGhpcy5yZWdpc3RlclByb3BlcnR5Q2hhbmdlZEhhbmRsZXJzKFtcImZvcm1hdFwiLCBcImN1cnJlbmN5XCIsIFwiZGlzcGxheVN0eWxlXCJdLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy51cGRhdGVGb3JtYXRlZFZhbHVlKCk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFF1ZXN0aW9uRXhwcmVzc2lvbk1vZGVsLnByb3RvdHlwZS5nZXRUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gXCJleHByZXNzaW9uXCI7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25FeHByZXNzaW9uTW9kZWwucHJvdG90eXBlLCBcImhhc0lucHV0XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25FeHByZXNzaW9uTW9kZWwucHJvdG90eXBlLCBcImZvcm1hdFwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBIHN0cmluZyB0aGF0IGZvcm1hdHMgYSBxdWVzdGlvbiB2YWx1ZS4gVXNlIGB7MH1gIHRvIHJlZmVyZW5jZSB0aGUgcXVlc3Rpb24gdmFsdWUgaW4gdGhlIGZvcm1hdCBzdHJpbmcuXG4gICAgICAgICAqIEBzZWUgZGlzcGxheVN0eWxlXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImZvcm1hdFwiLCBcIlwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImZvcm1hdFwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uRXhwcmVzc2lvbk1vZGVsLnByb3RvdHlwZSwgXCJsb2NGb3JtYXRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwiZm9ybWF0XCIpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uRXhwcmVzc2lvbk1vZGVsLnByb3RvdHlwZSwgXCJleHByZXNzaW9uXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFuIGV4cHJlc3Npb24gdXNlZCB0byBjYWxjdWxhdGUgdGhlIHF1ZXN0aW9uIHZhbHVlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBSZWZlciB0byB0aGUgZm9sbG93aW5nIGhlbHAgdG9waWMgZm9yIG1vcmUgaW5mb3JtYXRpb246IFtFeHByZXNzaW9uc10oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9kZXNpZ24tc3VydmV5LWNvbmRpdGlvbmFsLWxvZ2ljI2V4cHJlc3Npb25zKS5cbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImV4cHJlc3Npb25cIiwgXCJcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiZXhwcmVzc2lvblwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUXVlc3Rpb25FeHByZXNzaW9uTW9kZWwucHJvdG90eXBlLmxvY0NhbGN1bGF0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmV4cHJlc3Npb25Jc1J1bm5pbmcgPSB0cnVlO1xuICAgIH07XG4gICAgUXVlc3Rpb25FeHByZXNzaW9uTW9kZWwucHJvdG90eXBlLnVubG9jQ2FsY3VsYXRpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuZXhwcmVzc2lvbklzUnVubmluZyA9IGZhbHNlO1xuICAgIH07XG4gICAgUXVlc3Rpb25FeHByZXNzaW9uTW9kZWwucHJvdG90eXBlLnJ1bkNvbmRpdGlvbiA9IGZ1bmN0aW9uICh2YWx1ZXMsIHByb3BlcnRpZXMpIHtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5ydW5Db25kaXRpb24uY2FsbCh0aGlzLCB2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgICAgICBpZiAoIXRoaXMuZXhwcmVzc2lvbiB8fFxuICAgICAgICAgICAgdGhpcy5leHByZXNzaW9uSXNSdW5uaW5nIHx8XG4gICAgICAgICAgICAoIXRoaXMucnVuSWZSZWFkT25seSAmJiB0aGlzLmlzUmVhZE9ubHkpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLmxvY0NhbGN1bGF0aW9uKCk7XG4gICAgICAgIGlmICghdGhpcy5leHByZXNzaW9uUnVubmVyKSB7XG4gICAgICAgICAgICB0aGlzLmV4cHJlc3Npb25SdW5uZXIgPSB0aGlzLmNyZWF0ZVJ1bm5lcigpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZXhwcmVzc2lvblJ1bm5lci5ydW4odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uRXhwcmVzc2lvbk1vZGVsLnByb3RvdHlwZS5jYW5Db2xsZWN0RXJyb3JzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uRXhwcmVzc2lvbk1vZGVsLnByb3RvdHlwZS5oYXNSZXF1aXJlZEVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgICBRdWVzdGlvbkV4cHJlc3Npb25Nb2RlbC5wcm90b3R5cGUuY3JlYXRlUnVubmVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgcmVzID0gdGhpcy5jcmVhdGVFeHByZXNzaW9uUnVubmVyKHRoaXMuZXhwcmVzc2lvbik7XG4gICAgICAgIHJlcy5vblJ1bkNvbXBsZXRlID0gZnVuY3Rpb24gKG5ld1ZhbHVlKSB7XG4gICAgICAgICAgICBfdGhpcy52YWx1ZSA9IF90aGlzLnJvdW5kVmFsdWUobmV3VmFsdWUpO1xuICAgICAgICAgICAgX3RoaXMudW5sb2NDYWxjdWxhdGlvbigpO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uRXhwcmVzc2lvbk1vZGVsLnByb3RvdHlwZSwgXCJtYXhpbXVtRnJhY3Rpb25EaWdpdHNcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogVGhlIG1heGltdW0gbnVtYmVyIG9mIGZyYWN0aW9uIGRpZ2l0cy4gQXBwbGllcyBvbmx5IGlmIHRoZSBgZGlzcGxheVN0eWxlYCBwcm9wZXJ0eSBpcyBub3QgYFwibm9uZVwiYC4gQWNjZXB0cyB2YWx1ZXMgaW4gdGhlIHJhbmdlIGZyb20gLTEgdG8gMjAsIHdoZXJlIC0xIGRpc2FibGVzIHRoZSBwcm9wZXJ0eS5cbiAgICAgICAgICpcbiAgICAgICAgICogRGVmYXVsdCB2YWx1ZTogLTFcbiAgICAgICAgICogQHNlZSBkaXNwbGF5U3R5bGVcbiAgICAgICAgICogQHNlZSBtaW5pbXVtRnJhY3Rpb25EaWdpdHNcbiAgICAgICAgICogQHNlZSBwcmVjaXNpb25cbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIm1heGltdW1GcmFjdGlvbkRpZ2l0c1wiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICBpZiAodmFsIDwgLTEgfHwgdmFsID4gMjApXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibWF4aW11bUZyYWN0aW9uRGlnaXRzXCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25FeHByZXNzaW9uTW9kZWwucHJvdG90eXBlLCBcIm1pbmltdW1GcmFjdGlvbkRpZ2l0c1wiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgbWluaW11bSBudW1iZXIgb2YgZnJhY3Rpb24gZGlnaXRzLiBBcHBsaWVzIG9ubHkgaWYgdGhlIGBkaXNwbGF5U3R5bGVgIHByb3BlcnR5IGlzIG5vdCBgXCJub25lXCJgLiBBY2NlcHRzIHZhbHVlcyBpbiB0aGUgcmFuZ2UgZnJvbSAtMSB0byAyMCwgd2hlcmUgLTEgZGlzYWJsZXMgdGhlIHByb3BlcnR5LlxuICAgICAgICAgKlxuICAgICAgICAgKiBEZWZhdWx0IHZhbHVlOiAtMVxuICAgICAgICAgKiBAc2VlIGRpc3BsYXlTdHlsZVxuICAgICAgICAgKiBAc2VlIG1heGltdW1GcmFjdGlvbkRpZ2l0c1xuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibWluaW11bUZyYWN0aW9uRGlnaXRzXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIGlmICh2YWwgPCAtMSB8fCB2YWwgPiAyMClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJtaW5pbXVtRnJhY3Rpb25EaWdpdHNcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbkV4cHJlc3Npb25Nb2RlbC5wcm90b3R5cGUsIFwicnVuSWZSZWFkT25seVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucnVuSWZSZWFkT25seVZhbHVlID09PSB0cnVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMucnVuSWZSZWFkT25seVZhbHVlID0gdmFsO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uRXhwcmVzc2lvbk1vZGVsLnByb3RvdHlwZSwgXCJmb3JtYXRlZFZhbHVlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiZm9ybWF0ZWRWYWx1ZVwiLCBcIlwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFF1ZXN0aW9uRXhwcmVzc2lvbk1vZGVsLnByb3RvdHlwZS51cGRhdGVGb3JtYXRlZFZhbHVlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJmb3JtYXRlZFZhbHVlXCIsIHRoaXMuZ2V0RGlzcGxheVZhbHVlQ29yZShmYWxzZSwgdGhpcy52YWx1ZSkpO1xuICAgIH07XG4gICAgUXVlc3Rpb25FeHByZXNzaW9uTW9kZWwucHJvdG90eXBlLm9uVmFsdWVDaGFuZ2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnVwZGF0ZUZvcm1hdGVkVmFsdWUoKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uRXhwcmVzc2lvbk1vZGVsLnByb3RvdHlwZS51cGRhdGVWYWx1ZUZyb21TdXJ2ZXkgPSBmdW5jdGlvbiAobmV3VmFsdWUpIHtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS51cGRhdGVWYWx1ZUZyb21TdXJ2ZXkuY2FsbCh0aGlzLCBuZXdWYWx1ZSk7XG4gICAgICAgIHRoaXMudXBkYXRlRm9ybWF0ZWRWYWx1ZSgpO1xuICAgIH07XG4gICAgUXVlc3Rpb25FeHByZXNzaW9uTW9kZWwucHJvdG90eXBlLmdldERpc3BsYXlWYWx1ZUNvcmUgPSBmdW5jdGlvbiAoa2V5c0FzVGV4dCwgdmFsdWUpIHtcbiAgICAgICAgdmFyIHZhbCA9IHRoaXMuaXNWYWx1ZUVtcHR5KHZhbHVlKSA/IHRoaXMuZGVmYXVsdFZhbHVlIDogdmFsdWU7XG4gICAgICAgIHZhciByZXMgPSBcIlwiO1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWx1ZUVtcHR5KHZhbCkpIHtcbiAgICAgICAgICAgIHZhciBzdHIgPSB0aGlzLmdldFZhbHVlQXNTdHIodmFsKTtcbiAgICAgICAgICAgIHJlcyA9ICF0aGlzLmZvcm1hdCA/IHN0ciA6IHRoaXMuZm9ybWF0W1wiZm9ybWF0XCJdKHN0cik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEhdGhpcy5zdXJ2ZXkpIHtcbiAgICAgICAgICAgIHJlcyA9IHRoaXMuc3VydmV5LmdldEV4cHJlc3Npb25EaXNwbGF5VmFsdWUodGhpcywgdmFsLCByZXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25FeHByZXNzaW9uTW9kZWwucHJvdG90eXBlLCBcImRpc3BsYXlTdHlsZVwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgYSBkaXNwbGF5IHN0eWxlIGZvciB0aGUgcXVlc3Rpb24gdmFsdWUuXG4gICAgICAgICAqXG4gICAgICAgICAqIFBvc3NpYmxlIHZhbHVlczpcbiAgICAgICAgICpcbiAgICAgICAgICogLSBgXCJkZWNpbWFsXCJgXG4gICAgICAgICAqIC0gYFwiY3VycmVuY3lcImBcbiAgICAgICAgICogLSBgXCJwZXJjZW50XCJgXG4gICAgICAgICAqIC0gYFwiZGF0ZVwiYFxuICAgICAgICAgKiAtIGBcIm5vbmVcImAgKGRlZmF1bHQpXG4gICAgICAgICAqXG4gICAgICAgICAqIElmIHlvdSB1c2UgdGhlIGBcImN1cnJlbmN5XCJgIGRpc3BsYXkgc3R5bGUsIHlvdSBjYW4gYWxzbyBzZXQgdGhlIGBjdXJyZW5jeWAgcHJvcGVydHkgdG8gc3BlY2lmeSBhIGN1cnJlbmN5IG90aGVyIHRoYW4gVVNELlxuICAgICAgICAgKiBAc2VlIGN1cnJlbmN5XG4gICAgICAgICAqIEBzZWUgbWluaW11bUZyYWN0aW9uRGlnaXRzXG4gICAgICAgICAqIEBzZWUgbWF4aW11bUZyYWN0aW9uRGlnaXRzXG4gICAgICAgICAqIEBzZWUgZm9ybWF0XG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJkaXNwbGF5U3R5bGVcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiZGlzcGxheVN0eWxlXCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25FeHByZXNzaW9uTW9kZWwucHJvdG90eXBlLCBcImN1cnJlbmN5XCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEEgdGhyZWUtbGV0dGVyIGN1cnJlbmN5IGNvZGUuIEFwcGxpZXMgb25seSBpZiB0aGUgYGRpc3BsYXlTdHlsZWAgcHJvcGVydHkgaXMgc2V0IHRvIGBcImN1cnJlbmN5XCJgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBEZWZhdWx0IHZhbHVlOiBcIlVTRFwiLlxuICAgICAgICAgKiBAc2VlIGRpc3BsYXlTdHlsZVxuICAgICAgICAgKiBAc2VlIG1pbmltdW1GcmFjdGlvbkRpZ2l0c1xuICAgICAgICAgKiBAc2VlIG1heGltdW1GcmFjdGlvbkRpZ2l0c1xuICAgICAgICAgKiBAc2VlIGZvcm1hdFxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY3VycmVuY3lcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgaWYgKGdldEN1cnJlY3lDb2RlcygpLmluZGV4T2YodmFsKSA8IDApXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY3VycmVuY3lcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbkV4cHJlc3Npb25Nb2RlbC5wcm90b3R5cGUsIFwidXNlR3JvdXBpbmdcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHdoZXRoZXIgdG8gdXNlIGdyb3VwaW5nIHNlcGFyYXRvcnMgaW4gbnVtYmVyIHJlcHJlc2VudGF0aW9uLiBTZXBhcmF0b3JzIGRlcGVuZCBvbiB0aGUgc2VsZWN0ZWQgW2xvY2FsZV0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9zdXJ2ZXltb2RlbCNsb2NhbGUpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBEZWZhdWx0IHZhbHVlOiBgdHJ1ZWBcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInVzZUdyb3VwaW5nXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInVzZUdyb3VwaW5nXCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25FeHByZXNzaW9uTW9kZWwucHJvdG90eXBlLCBcInByZWNpc2lvblwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgaG93IG1hbnkgZGVjaW1hbCBkaWdpdHMgdG8ga2VlcCBpbiB0aGUgZXhwcmVzc2lvbiB2YWx1ZS5cbiAgICAgICAgICpcbiAgICAgICAgICogRGVmYXVsdCB2YWx1ZTogLTEgKHVubGltaXRlZClcbiAgICAgICAgICogQHNlZSBtYXhpbXVtRnJhY3Rpb25EaWdpdHNcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInByZWNpc2lvblwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJwcmVjaXNpb25cIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFF1ZXN0aW9uRXhwcmVzc2lvbk1vZGVsLnByb3RvdHlwZS5yb3VuZFZhbHVlID0gZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICBpZiAodmFsID09PSBJbmZpbml0eSlcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIGlmICh0aGlzLnByZWNpc2lvbiA8IDApXG4gICAgICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgICBpZiAoIV9oZWxwZXJzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJIZWxwZXJzXCJdLmlzTnVtYmVyKHZhbCkpXG4gICAgICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgICByZXR1cm4gcGFyc2VGbG9hdCh2YWwudG9GaXhlZCh0aGlzLnByZWNpc2lvbikpO1xuICAgIH07XG4gICAgUXVlc3Rpb25FeHByZXNzaW9uTW9kZWwucHJvdG90eXBlLmdldFZhbHVlQXNTdHIgPSBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgIGlmICh0aGlzLmRpc3BsYXlTdHlsZSA9PSBcImRhdGVcIikge1xuICAgICAgICAgICAgdmFyIGQgPSBuZXcgRGF0ZSh2YWwpO1xuICAgICAgICAgICAgaWYgKCEhZCAmJiAhIWQudG9Mb2NhbGVEYXRlU3RyaW5nKVxuICAgICAgICAgICAgICAgIHJldHVybiBkLnRvTG9jYWxlRGF0ZVN0cmluZygpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmRpc3BsYXlTdHlsZSAhPSBcIm5vbmVcIiAmJiBfaGVscGVyc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiSGVscGVyc1wiXS5pc051bWJlcih2YWwpKSB7XG4gICAgICAgICAgICB2YXIgbG9jYWxlID0gdGhpcy5nZXRMb2NhbGUoKTtcbiAgICAgICAgICAgIGlmICghbG9jYWxlKVxuICAgICAgICAgICAgICAgIGxvY2FsZSA9IFwiZW5cIjtcbiAgICAgICAgICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgICAgICAgICAgIHN0eWxlOiB0aGlzLmRpc3BsYXlTdHlsZSxcbiAgICAgICAgICAgICAgICBjdXJyZW5jeTogdGhpcy5jdXJyZW5jeSxcbiAgICAgICAgICAgICAgICB1c2VHcm91cGluZzogdGhpcy51c2VHcm91cGluZyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAodGhpcy5tYXhpbXVtRnJhY3Rpb25EaWdpdHMgPiAtMSkge1xuICAgICAgICAgICAgICAgIG9wdGlvbnNbXCJtYXhpbXVtRnJhY3Rpb25EaWdpdHNcIl0gPSB0aGlzLm1heGltdW1GcmFjdGlvbkRpZ2l0cztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLm1pbmltdW1GcmFjdGlvbkRpZ2l0cyA+IC0xKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9uc1tcIm1pbmltdW1GcmFjdGlvbkRpZ2l0c1wiXSA9IHRoaXMubWluaW11bUZyYWN0aW9uRGlnaXRzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHZhbC50b0xvY2FsZVN0cmluZyhsb2NhbGUsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWwudG9TdHJpbmcoKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uRXhwcmVzc2lvbk1vZGVsLnByb3RvdHlwZS5jb252ZXJ0VG9Db3JyZWN0VmFsdWUgPSBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpXG4gICAgICAgICAgICByZXR1cm4gdmFsLmpvaW4oXCIsIFwiKTtcbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9O1xuICAgIHJldHVybiBRdWVzdGlvbkV4cHJlc3Npb25Nb2RlbDtcbn0oX3F1ZXN0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJRdWVzdGlvblwiXSkpO1xuXG5mdW5jdGlvbiBnZXRDdXJyZWN5Q29kZXMoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgXCJBRURcIixcbiAgICAgICAgXCJBRk5cIixcbiAgICAgICAgXCJBTExcIixcbiAgICAgICAgXCJBTURcIixcbiAgICAgICAgXCJBTkdcIixcbiAgICAgICAgXCJBT0FcIixcbiAgICAgICAgXCJBUlNcIixcbiAgICAgICAgXCJBVURcIixcbiAgICAgICAgXCJBV0dcIixcbiAgICAgICAgXCJBWk5cIixcbiAgICAgICAgXCJCQU1cIixcbiAgICAgICAgXCJCQkRcIixcbiAgICAgICAgXCJCRFRcIixcbiAgICAgICAgXCJCR05cIixcbiAgICAgICAgXCJCSERcIixcbiAgICAgICAgXCJCSUZcIixcbiAgICAgICAgXCJCTURcIixcbiAgICAgICAgXCJCTkRcIixcbiAgICAgICAgXCJCT0JcIixcbiAgICAgICAgXCJCT1ZcIixcbiAgICAgICAgXCJCUkxcIixcbiAgICAgICAgXCJCU0RcIixcbiAgICAgICAgXCJCVE5cIixcbiAgICAgICAgXCJCV1BcIixcbiAgICAgICAgXCJCWU5cIixcbiAgICAgICAgXCJCWkRcIixcbiAgICAgICAgXCJDQURcIixcbiAgICAgICAgXCJDREZcIixcbiAgICAgICAgXCJDSEVcIixcbiAgICAgICAgXCJDSEZcIixcbiAgICAgICAgXCJDSFdcIixcbiAgICAgICAgXCJDTEZcIixcbiAgICAgICAgXCJDTFBcIixcbiAgICAgICAgXCJDTllcIixcbiAgICAgICAgXCJDT1BcIixcbiAgICAgICAgXCJDT1VcIixcbiAgICAgICAgXCJDUkNcIixcbiAgICAgICAgXCJDVUNcIixcbiAgICAgICAgXCJDVVBcIixcbiAgICAgICAgXCJDVkVcIixcbiAgICAgICAgXCJDWktcIixcbiAgICAgICAgXCJESkZcIixcbiAgICAgICAgXCJES0tcIixcbiAgICAgICAgXCJET1BcIixcbiAgICAgICAgXCJEWkRcIixcbiAgICAgICAgXCJFR1BcIixcbiAgICAgICAgXCJFUk5cIixcbiAgICAgICAgXCJFVEJcIixcbiAgICAgICAgXCJFVVJcIixcbiAgICAgICAgXCJGSkRcIixcbiAgICAgICAgXCJGS1BcIixcbiAgICAgICAgXCJHQlBcIixcbiAgICAgICAgXCJHRUxcIixcbiAgICAgICAgXCJHSFNcIixcbiAgICAgICAgXCJHSVBcIixcbiAgICAgICAgXCJHTURcIixcbiAgICAgICAgXCJHTkZcIixcbiAgICAgICAgXCJHVFFcIixcbiAgICAgICAgXCJHWURcIixcbiAgICAgICAgXCJIS0RcIixcbiAgICAgICAgXCJITkxcIixcbiAgICAgICAgXCJIUktcIixcbiAgICAgICAgXCJIVEdcIixcbiAgICAgICAgXCJIVUZcIixcbiAgICAgICAgXCJJRFJcIixcbiAgICAgICAgXCJJTFNcIixcbiAgICAgICAgXCJJTlJcIixcbiAgICAgICAgXCJJUURcIixcbiAgICAgICAgXCJJUlJcIixcbiAgICAgICAgXCJJU0tcIixcbiAgICAgICAgXCJKTURcIixcbiAgICAgICAgXCJKT0RcIixcbiAgICAgICAgXCJKUFlcIixcbiAgICAgICAgXCJLRVNcIixcbiAgICAgICAgXCJLR1NcIixcbiAgICAgICAgXCJLSFJcIixcbiAgICAgICAgXCJLTUZcIixcbiAgICAgICAgXCJLUFdcIixcbiAgICAgICAgXCJLUldcIixcbiAgICAgICAgXCJLV0RcIixcbiAgICAgICAgXCJLWURcIixcbiAgICAgICAgXCJLWlRcIixcbiAgICAgICAgXCJMQUtcIixcbiAgICAgICAgXCJMQlBcIixcbiAgICAgICAgXCJMS1JcIixcbiAgICAgICAgXCJMUkRcIixcbiAgICAgICAgXCJMU0xcIixcbiAgICAgICAgXCJMWURcIixcbiAgICAgICAgXCJNQURcIixcbiAgICAgICAgXCJNRExcIixcbiAgICAgICAgXCJNR0FcIixcbiAgICAgICAgXCJNS0RcIixcbiAgICAgICAgXCJNTUtcIixcbiAgICAgICAgXCJNTlRcIixcbiAgICAgICAgXCJNT1BcIixcbiAgICAgICAgXCJNUk9cIixcbiAgICAgICAgXCJNVVJcIixcbiAgICAgICAgXCJNVlJcIixcbiAgICAgICAgXCJNV0tcIixcbiAgICAgICAgXCJNWE5cIixcbiAgICAgICAgXCJNWFZcIixcbiAgICAgICAgXCJNWVJcIixcbiAgICAgICAgXCJNWk5cIixcbiAgICAgICAgXCJOQURcIixcbiAgICAgICAgXCJOR05cIixcbiAgICAgICAgXCJOSU9cIixcbiAgICAgICAgXCJOT0tcIixcbiAgICAgICAgXCJOUFJcIixcbiAgICAgICAgXCJOWkRcIixcbiAgICAgICAgXCJPTVJcIixcbiAgICAgICAgXCJQQUJcIixcbiAgICAgICAgXCJQRU5cIixcbiAgICAgICAgXCJQR0tcIixcbiAgICAgICAgXCJQSFBcIixcbiAgICAgICAgXCJQS1JcIixcbiAgICAgICAgXCJQTE5cIixcbiAgICAgICAgXCJQWUdcIixcbiAgICAgICAgXCJRQVJcIixcbiAgICAgICAgXCJST05cIixcbiAgICAgICAgXCJSU0RcIixcbiAgICAgICAgXCJSVUJcIixcbiAgICAgICAgXCJSV0ZcIixcbiAgICAgICAgXCJTQVJcIixcbiAgICAgICAgXCJTQkRcIixcbiAgICAgICAgXCJTQ1JcIixcbiAgICAgICAgXCJTREdcIixcbiAgICAgICAgXCJTRUtcIixcbiAgICAgICAgXCJTR0RcIixcbiAgICAgICAgXCJTSFBcIixcbiAgICAgICAgXCJTTExcIixcbiAgICAgICAgXCJTT1NcIixcbiAgICAgICAgXCJTUkRcIixcbiAgICAgICAgXCJTU1BcIixcbiAgICAgICAgXCJTVERcIixcbiAgICAgICAgXCJTVkNcIixcbiAgICAgICAgXCJTWVBcIixcbiAgICAgICAgXCJTWkxcIixcbiAgICAgICAgXCJUSEJcIixcbiAgICAgICAgXCJUSlNcIixcbiAgICAgICAgXCJUTVRcIixcbiAgICAgICAgXCJUTkRcIixcbiAgICAgICAgXCJUT1BcIixcbiAgICAgICAgXCJUUllcIixcbiAgICAgICAgXCJUVERcIixcbiAgICAgICAgXCJUV0RcIixcbiAgICAgICAgXCJUWlNcIixcbiAgICAgICAgXCJVQUhcIixcbiAgICAgICAgXCJVR1hcIixcbiAgICAgICAgXCJVU0RcIixcbiAgICAgICAgXCJVU05cIixcbiAgICAgICAgXCJVWUlcIixcbiAgICAgICAgXCJVWVVcIixcbiAgICAgICAgXCJVWlNcIixcbiAgICAgICAgXCJWRUZcIixcbiAgICAgICAgXCJWTkRcIixcbiAgICAgICAgXCJWVVZcIixcbiAgICAgICAgXCJXU1RcIixcbiAgICAgICAgXCJYQUZcIixcbiAgICAgICAgXCJYQUdcIixcbiAgICAgICAgXCJYQVVcIixcbiAgICAgICAgXCJYQkFcIixcbiAgICAgICAgXCJYQkJcIixcbiAgICAgICAgXCJYQkNcIixcbiAgICAgICAgXCJYQkRcIixcbiAgICAgICAgXCJYQ0RcIixcbiAgICAgICAgXCJYRFJcIixcbiAgICAgICAgXCJYT0ZcIixcbiAgICAgICAgXCJYUERcIixcbiAgICAgICAgXCJYUEZcIixcbiAgICAgICAgXCJYUFRcIixcbiAgICAgICAgXCJYU1VcIixcbiAgICAgICAgXCJYVFNcIixcbiAgICAgICAgXCJYVUFcIixcbiAgICAgICAgXCJYWFhcIixcbiAgICAgICAgXCJZRVJcIixcbiAgICAgICAgXCJaQVJcIixcbiAgICAgICAgXCJaTVdcIixcbiAgICAgICAgXCJaV0xcIixcbiAgICBdO1xufVxuX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIlNlcmlhbGl6ZXJcIl0uYWRkQ2xhc3MoXCJleHByZXNzaW9uXCIsIFtcbiAgICBcImV4cHJlc3Npb246ZXhwcmVzc2lvblwiLFxuICAgIHsgbmFtZTogXCJmb3JtYXRcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY0Zvcm1hdFwiIH0sXG4gICAge1xuICAgICAgICBuYW1lOiBcImRpc3BsYXlTdHlsZVwiLFxuICAgICAgICBkZWZhdWx0OiBcIm5vbmVcIixcbiAgICAgICAgY2hvaWNlczogW1wibm9uZVwiLCBcImRlY2ltYWxcIiwgXCJjdXJyZW5jeVwiLCBcInBlcmNlbnRcIiwgXCJkYXRlXCJdLFxuICAgIH0sXG4gICAge1xuICAgICAgICBuYW1lOiBcImN1cnJlbmN5XCIsXG4gICAgICAgIGNob2ljZXM6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXRDdXJyZWN5Q29kZXMoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDogXCJVU0RcIixcbiAgICB9LFxuICAgIHsgbmFtZTogXCJtYXhpbXVtRnJhY3Rpb25EaWdpdHM6bnVtYmVyXCIsIGRlZmF1bHQ6IC0xIH0sXG4gICAgeyBuYW1lOiBcIm1pbmltdW1GcmFjdGlvbkRpZ2l0czpudW1iZXJcIiwgZGVmYXVsdDogLTEgfSxcbiAgICB7IG5hbWU6IFwidXNlR3JvdXBpbmc6Ym9vbGVhblwiLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgeyBuYW1lOiBcInByZWNpc2lvbjpudW1iZXJcIiwgZGVmYXVsdDogLTEsIGNhdGVnb3J5OiBcImRhdGFcIiB9LFxuICAgIHsgbmFtZTogXCJlbmFibGVJZlwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogXCJpc1JlcXVpcmVkXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcInJlYWRPbmx5XCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcInJlcXVpcmVkRXJyb3JUZXh0XCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcImRlZmF1bHRWYWx1ZUV4cHJlc3Npb25cIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwiZGVmYXVsdFZhbHVlXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcImNvcnJlY3RBbnN3ZXJcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwicmVxdWlyZWRJZlwiLCB2aXNpYmxlOiBmYWxzZSB9XG5dLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBRdWVzdGlvbkV4cHJlc3Npb25Nb2RlbChcIlwiKTtcbn0sIFwicXVlc3Rpb25cIik7XG5fcXVlc3Rpb25mYWN0b3J5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJRdWVzdGlvbkZhY3RvcnlcIl0uSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImV4cHJlc3Npb25cIiwgZnVuY3Rpb24gKG5hbWUpIHtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uRXhwcmVzc2lvbk1vZGVsKG5hbWUpO1xufSk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvcXVlc3Rpb25fZmlsZS50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3F1ZXN0aW9uX2ZpbGUudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBRdWVzdGlvbkZpbGVNb2RlbCwgRmlsZUxvYWRlciAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJRdWVzdGlvbkZpbGVNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFF1ZXN0aW9uRmlsZU1vZGVsOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJGaWxlTG9hZGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRmlsZUxvYWRlcjsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3F1ZXN0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3F1ZXN0aW9uICovIFwiLi9zcmMvcXVlc3Rpb24udHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vanNvbm9iamVjdCAqLyBcIi4vc3JjL2pzb25vYmplY3QudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3F1ZXN0aW9uZmFjdG9yeV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9xdWVzdGlvbmZhY3RvcnkgKi8gXCIuL3NyYy9xdWVzdGlvbmZhY3RvcnkudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Jhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYmFzZSAqLyBcIi4vc3JjL2Jhc2UudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Vycm9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2Vycm9yICovIFwiLi9zcmMvZXJyb3IudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3V0aWxzX2Nzc0NsYXNzQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi91dGlscy9jc3NDbGFzc0J1aWxkZXIgKi8gXCIuL3NyYy91dGlscy9jc3NDbGFzc0J1aWxkZXIudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3V0aWxzX3V0aWxzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3V0aWxzL3V0aWxzICovIFwiLi9zcmMvdXRpbHMvdXRpbHMudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2FjdGlvbnNfY29udGFpbmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2FjdGlvbnMvY29udGFpbmVyICovIFwiLi9zcmMvYWN0aW9ucy9jb250YWluZXIudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2FjdGlvbnNfYWN0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2FjdGlvbnMvYWN0aW9uICovIFwiLi9zcmMvYWN0aW9ucy9hY3Rpb24udHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2hlbHBlcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vaGVscGVycyAqLyBcIi4vc3JjL2hlbHBlcnMudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3V0aWxzX2NhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vdXRpbHMvY2FtZXJhICovIFwiLi9zcmMvdXRpbHMvY2FtZXJhLnRzXCIpO1xudmFyIF9fZXh0ZW5kcyA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG52YXIgX19kZWNvcmF0ZSA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qKlxuICogQSBjbGFzcyB0aGF0IGRlc2NyaWJlcyB0aGUgRmlsZSBVcGxvYWQgcXVlc3Rpb24gdHlwZS5cbiAqXG4gKiBbVmlldyBEZW1vXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9leGFtcGxlcy9maWxlLXVwbG9hZC8gKGxpbmtTdHlsZSkpXG4gKi9cbnZhciBRdWVzdGlvbkZpbGVNb2RlbCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoUXVlc3Rpb25GaWxlTW9kZWwsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gUXVlc3Rpb25GaWxlTW9kZWwobmFtZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBuYW1lKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5pc1VwbG9hZGluZyA9IGZhbHNlO1xuICAgICAgICBfdGhpcy5pc0RyYWdnaW5nID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBbiBldmVudCB0aGF0IGlzIHJhaXNlZCBhZnRlciB0aGUgdXBsb2FkIHN0YXRlIGhhcyBjaGFuZ2VkLlxuICAgICAgICAgKlxuICAgICAgICAgKiBQYXJhbWV0ZXJzOlxuICAgICAgICAgKlxuICAgICAgICAgKiAtIGBzZW5kZXJgOiBgU3VydmV5TW9kZWxgXFxcbiAgICAgICAgICogQSBzdXJ2ZXkgaW5zdGFuY2UgdGhhdCByYWlzZWQgdGhlIGV2ZW50LlxuICAgICAgICAgKiAtIGBvcHRpb25zLnN0YXRlYDogYFN0cmluZ2BcXFxuICAgICAgICAgKiBUaGUgY3VycmVudCB1cGxvYWQgc3RhdGU6IGBcImVtcHR5XCJgLCBgXCJsb2FkaW5nXCJgLCBgXCJsb2FkZWRcImAsIG9yIGBcImVycm9yXCJgLlxuICAgICAgICAgKi9cbiAgICAgICAgX3RoaXMub25VcGxvYWRTdGF0ZUNoYW5nZWQgPSBfdGhpcy5hZGRFdmVudCgpO1xuICAgICAgICBfdGhpcy5vblN0YXRlQ2hhbmdlZCA9IF90aGlzLmFkZEV2ZW50KCk7XG4gICAgICAgIF90aGlzLmZpbGVOYXZpZ2F0b3IgPSBuZXcgX2FjdGlvbnNfY29udGFpbmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bXCJBY3Rpb25Db250YWluZXJcIl0oKTtcbiAgICAgICAgX3RoaXMuYWN0aW9uc0NvbnRhaW5lciA9IG5ldyBfYWN0aW9uc19jb250YWluZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1tcIkFjdGlvbkNvbnRhaW5lclwiXSgpO1xuICAgICAgICBfdGhpcy5jYW5GbGlwQ2FtZXJhVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgIF90aGlzLnByZXZQcmV2aWV3TGVuZ3RoID0gMDtcbiAgICAgICAgX3RoaXMuY2FsY0F2YWlsYWJsZUl0ZW1zQ291bnQgPSBmdW5jdGlvbiAoYXZhaWxhYmxlV2lkdGgsIGl0ZW1XaWR0aCwgZ2FwKSB7XG4gICAgICAgICAgICB2YXIgaXRlbXNDb3VudCA9IE1hdGguZmxvb3IoYXZhaWxhYmxlV2lkdGggLyAoaXRlbVdpZHRoICsgZ2FwKSk7XG4gICAgICAgICAgICBpZiAoKGl0ZW1zQ291bnQgKyAxKSAqIChpdGVtV2lkdGggKyBnYXApIC0gZ2FwIDw9IGF2YWlsYWJsZVdpZHRoKVxuICAgICAgICAgICAgICAgIGl0ZW1zQ291bnQrKztcbiAgICAgICAgICAgIHJldHVybiBpdGVtc0NvdW50O1xuICAgICAgICB9O1xuICAgICAgICBfdGhpcy5kcmFnQ291bnRlciA9IDA7XG4gICAgICAgIF90aGlzLm9uRHJhZ0VudGVyID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICBpZiAoX3RoaXMuY2FuRHJhZ0Ryb3AoKSkge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgX3RoaXMuaXNEcmFnZ2luZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgX3RoaXMuZHJhZ0NvdW50ZXIrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgX3RoaXMub25EcmFnT3ZlciA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgaWYgKCFfdGhpcy5jYW5EcmFnRHJvcCgpKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucmV0dXJuVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBldmVudC5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9IFwiY29weVwiO1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfTtcbiAgICAgICAgX3RoaXMub25Ecm9wID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICBpZiAoX3RoaXMuY2FuRHJhZ0Ryb3AoKSkge1xuICAgICAgICAgICAgICAgIF90aGlzLmlzRHJhZ2dpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBfdGhpcy5kcmFnQ291bnRlciA9IDA7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB2YXIgc3JjID0gZXZlbnQuZGF0YVRyYW5zZmVyO1xuICAgICAgICAgICAgICAgIF90aGlzLm9uQ2hhbmdlKHNyYyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIF90aGlzLm9uRHJhZ0xlYXZlID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICBpZiAoX3RoaXMuY2FuRHJhZ0Ryb3AoKSkge1xuICAgICAgICAgICAgICAgIF90aGlzLmRyYWdDb3VudGVyLS07XG4gICAgICAgICAgICAgICAgaWYgKF90aGlzLmRyYWdDb3VudGVyID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIF90aGlzLmlzRHJhZ2dpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIF90aGlzLmRvQ2hhbmdlID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICB2YXIgc3JjID0gZXZlbnQudGFyZ2V0IHx8IGV2ZW50LnNyY0VsZW1lbnQ7XG4gICAgICAgICAgICBfdGhpcy5vbkNoYW5nZShzcmMpO1xuICAgICAgICB9O1xuICAgICAgICBfdGhpcy5kb0NsZWFuID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKF90aGlzLm5lZWRDb25maXJtUmVtb3ZlRmlsZSkge1xuICAgICAgICAgICAgICAgIE9iamVjdChfdXRpbHNfdXRpbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1tcImNvbmZpcm1BY3Rpb25Bc3luY1wiXSkoX3RoaXMuY29uZmlybVJlbW92ZUFsbE1lc3NhZ2UsIGZ1bmN0aW9uICgpIHsgX3RoaXMuY2xlYXJGaWxlc0NvcmUoKTsgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX3RoaXMuY2xlYXJGaWxlc0NvcmUoKTtcbiAgICAgICAgfTtcbiAgICAgICAgX3RoaXMuZG9Eb3dubG9hZEZpbGUgPSBmdW5jdGlvbiAoZXZlbnQsIGRhdGEpIHtcbiAgICAgICAgICAgIGlmIChPYmplY3QoX3V0aWxzX3V0aWxzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bXCJkZXRlY3RJRU9yRWRnZVwiXSkoKSkge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgT2JqZWN0KF91dGlsc191dGlsc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fW1wibG9hZEZpbGVGcm9tQmFzZTY0XCJdKShkYXRhLmNvbnRlbnQsIGRhdGEubmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIF90aGlzLmZpbGVJbmRleEFjdGlvbiA9IG5ldyBfYWN0aW9uc19hY3Rpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1tcIkFjdGlvblwiXSh7XG4gICAgICAgICAgICBpZDogXCJmaWxlSW5kZXhcIixcbiAgICAgICAgICAgIHRpdGxlOiBfdGhpcy5nZXRGaWxlSW5kZXhDYXB0aW9uKCksXG4gICAgICAgICAgICBlbmFibGVkOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgICAgX3RoaXMucHJldkZpbGVBY3Rpb24gPSBuZXcgX2FjdGlvbnNfYWN0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bXCJBY3Rpb25cIl0oe1xuICAgICAgICAgICAgaWQ6IFwicHJldlBhZ2VcIixcbiAgICAgICAgICAgIGljb25TaXplOiAxNixcbiAgICAgICAgICAgIGFjdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIF90aGlzLmluZGV4VG9TaG93ID0gX3RoaXMucHJldmlld1ZhbHVlLmxlbmd0aCAmJiAoKF90aGlzLmluZGV4VG9TaG93IC0gMSArIF90aGlzLnBhZ2VzQ291bnQpICUgX3RoaXMucGFnZXNDb3VudCkgfHwgMDtcbiAgICAgICAgICAgICAgICBfdGhpcy5maWxlSW5kZXhBY3Rpb24udGl0bGUgPSBfdGhpcy5nZXRGaWxlSW5kZXhDYXB0aW9uKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBfdGhpcy5uZXh0RmlsZUFjdGlvbiA9IG5ldyBfYWN0aW9uc19hY3Rpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1tcIkFjdGlvblwiXSh7XG4gICAgICAgICAgICBpZDogXCJuZXh0UGFnZVwiLFxuICAgICAgICAgICAgaWNvblNpemU6IDE2LFxuICAgICAgICAgICAgYWN0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMuaW5kZXhUb1Nob3cgPSBfdGhpcy5wcmV2aWV3VmFsdWUubGVuZ3RoICYmICgoX3RoaXMuaW5kZXhUb1Nob3cgKyAxKSAlIF90aGlzLnBhZ2VzQ291bnQpIHx8IDA7XG4gICAgICAgICAgICAgICAgX3RoaXMuZmlsZUluZGV4QWN0aW9uLnRpdGxlID0gX3RoaXMuZ2V0RmlsZUluZGV4Q2FwdGlvbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgX3RoaXMudGFrZVBpY3R1cmVBY3Rpb24gPSBuZXcgX2FjdGlvbnNfYWN0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bXCJBY3Rpb25cIl0oe1xuICAgICAgICAgICAgaWNvbk5hbWU6IFwiaWNvbi10YWtlcGljdHVyZVwiLFxuICAgICAgICAgICAgaWQ6IFwic3YtZmlsZS10YWtlLXBpY3R1cmVcIixcbiAgICAgICAgICAgIGljb25TaXplOiBcImF1dG9cIixcbiAgICAgICAgICAgIGlubmVyQ3NzOiBuZXcgX2Jhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcIkNvbXB1dGVkVXBkYXRlclwiXShmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgX3V0aWxzX2Nzc0NsYXNzQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fW1wiQ3NzQ2xhc3NCdWlsZGVyXCJdKCkuYXBwZW5kKF90aGlzLmNzc0NsYXNzZXMuY29udGV4dEJ1dHRvbikuYXBwZW5kKF90aGlzLmNzc0NsYXNzZXMudGFrZVBpY3R1cmVCdXR0b24pLnRvU3RyaW5nKCk7IH0pLFxuICAgICAgICAgICAgdGl0bGU6IG5ldyBfYmFzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiQ29tcHV0ZWRVcGRhdGVyXCJdKGZ1bmN0aW9uICgpIHsgcmV0dXJuIF90aGlzLnRha2VQaG90b0NhcHRpb247IH0pLFxuICAgICAgICAgICAgc2hvd1RpdGxlOiBmYWxzZSxcbiAgICAgICAgICAgIGFjdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIF90aGlzLnNuYXBQaWN0dXJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBfdGhpcy5jbG9zZUNhbWVyYUFjdGlvbiA9IG5ldyBfYWN0aW9uc19hY3Rpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1tcIkFjdGlvblwiXSh7XG4gICAgICAgICAgICBpY29uTmFtZTogXCJpY29uLWNsb3NlY2FtZXJhXCIsXG4gICAgICAgICAgICBpZDogXCJzdi1maWxlLWNsb3NlLWNhbWVyYVwiLFxuICAgICAgICAgICAgaWNvblNpemU6IFwiYXV0b1wiLFxuICAgICAgICAgICAgaW5uZXJDc3M6IG5ldyBfYmFzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiQ29tcHV0ZWRVcGRhdGVyXCJdKGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBfdXRpbHNfY3NzQ2xhc3NCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bXCJDc3NDbGFzc0J1aWxkZXJcIl0oKS5hcHBlbmQoX3RoaXMuY3NzQ2xhc3Nlcy5jb250ZXh0QnV0dG9uKS5hcHBlbmQoX3RoaXMuY3NzQ2xhc3Nlcy5jbG9zZUNhbWVyYUJ1dHRvbikudG9TdHJpbmcoKTsgfSksXG4gICAgICAgICAgICBhY3Rpb246IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5zdG9wVmlkZW8oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIF90aGlzLmNoYW5nZUNhbWVyYUFjdGlvbiA9IG5ldyBfYWN0aW9uc19hY3Rpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1tcIkFjdGlvblwiXSh7XG4gICAgICAgICAgICBpY29uTmFtZTogXCJpY29uLWNoYW5nZWNhbWVyYVwiLFxuICAgICAgICAgICAgaWQ6IFwic3YtZmlsZS1jaGFuZ2UtY2FtZXJhXCIsXG4gICAgICAgICAgICBpY29uU2l6ZTogXCJhdXRvXCIsXG4gICAgICAgICAgICBpbm5lckNzczogbmV3IF9iYXNlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJDb21wdXRlZFVwZGF0ZXJcIl0oZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IF91dGlsc19jc3NDbGFzc0J1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1tcIkNzc0NsYXNzQnVpbGRlclwiXSgpLmFwcGVuZChfdGhpcy5jc3NDbGFzc2VzLmNvbnRleHRCdXR0b24pLmFwcGVuZChfdGhpcy5jc3NDbGFzc2VzLmNoYW5nZUNhbWVyYUJ1dHRvbikudG9TdHJpbmcoKTsgfSksXG4gICAgICAgICAgICB2aXNpYmxlOiBuZXcgX2Jhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcIkNvbXB1dGVkVXBkYXRlclwiXShmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy5jYW5GbGlwQ2FtZXJhKCk7IH0pLFxuICAgICAgICAgICAgYWN0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMuZmxpcENhbWVyYSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgX3RoaXMuY2hvb3NlRmlsZUFjdGlvbiA9IG5ldyBfYWN0aW9uc19hY3Rpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1tcIkFjdGlvblwiXSh7XG4gICAgICAgICAgICBpY29uTmFtZTogXCJpY29uLWNob29zZWZpbGVcIixcbiAgICAgICAgICAgIGlkOiBcInN2LWZpbGUtY2hvb3NlLWZpbGVcIixcbiAgICAgICAgICAgIGljb25TaXplOiBcImF1dG9cIixcbiAgICAgICAgICAgIGRhdGE6IHsgcXVlc3Rpb246IF90aGlzIH0sXG4gICAgICAgICAgICBjb21wb25lbnQ6IFwic3YtZmlsZS1jaG9vc2UtYnRuXCJcbiAgICAgICAgfSk7XG4gICAgICAgIF90aGlzLnN0YXJ0Q2FtZXJhQWN0aW9uID0gbmV3IF9hY3Rpb25zX2FjdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fW1wiQWN0aW9uXCJdKHtcbiAgICAgICAgICAgIGljb25OYW1lOiBcImljb24tdGFrZXBpY3R1cmVfMjR4MjRcIixcbiAgICAgICAgICAgIGlkOiBcInN2LWZpbGUtc3RhcnQtY2FtZXJhXCIsXG4gICAgICAgICAgICBpY29uU2l6ZTogXCJhdXRvXCIsXG4gICAgICAgICAgICB0aXRsZTogbmV3IF9iYXNlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJDb21wdXRlZFVwZGF0ZXJcIl0oZnVuY3Rpb24gKCkgeyByZXR1cm4gX3RoaXMudGFrZVBob3RvQ2FwdGlvbjsgfSksXG4gICAgICAgICAgICBzaG93VGl0bGU6IG5ldyBfYmFzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiQ29tcHV0ZWRVcGRhdGVyXCJdKGZ1bmN0aW9uICgpIHsgcmV0dXJuICFfdGhpcy5pc0Fuc3dlcmVkOyB9KSxcbiAgICAgICAgICAgIGFjdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIF90aGlzLnN0YXJ0VmlkZW8oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIF90aGlzLmNsZWFuQWN0aW9uID0gbmV3IF9hY3Rpb25zX2FjdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fW1wiQWN0aW9uXCJdKHtcbiAgICAgICAgICAgIGljb25OYW1lOiBcImljb24tY2xlYXJcIixcbiAgICAgICAgICAgIGlkOiBcInN2LWZpbGUtY2xlYW5cIixcbiAgICAgICAgICAgIGljb25TaXplOiBcImF1dG9cIixcbiAgICAgICAgICAgIHRpdGxlOiBuZXcgX2Jhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcIkNvbXB1dGVkVXBkYXRlclwiXShmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy5jbGVhckJ1dHRvbkNhcHRpb247IH0pLFxuICAgICAgICAgICAgc2hvd1RpdGxlOiBmYWxzZSxcbiAgICAgICAgICAgIGlubmVyQ3NzOiBuZXcgX2Jhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcIkNvbXB1dGVkVXBkYXRlclwiXShmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy5jc3NDbGFzc2VzLnJlbW92ZUJ1dHRvbjsgfSksXG4gICAgICAgICAgICBhY3Rpb246IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5kb0NsZWFuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBbX3RoaXMuY2xvc2VDYW1lcmFBY3Rpb24sIF90aGlzLmNoYW5nZUNhbWVyYUFjdGlvbiwgX3RoaXMudGFrZVBpY3R1cmVBY3Rpb25dLmZvckVhY2goZnVuY3Rpb24gKGFjdGlvbikge1xuICAgICAgICAgICAgYWN0aW9uLmNzc0NsYXNzZXMgPSB7fTtcbiAgICAgICAgfSk7XG4gICAgICAgIF90aGlzLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnRpZXNWYWx1ZUNoYW5nZWQoW1wiY3VycmVudE1vZGVcIiwgXCJpc0Fuc3dlcmVkXCJdLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy51cGRhdGVBY3Rpb25zKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBfdGhpcy51cGRhdGVBY3Rpb25zKCk7XG4gICAgICAgIF90aGlzLmFjdGlvbnNDb250YWluZXIuYWN0aW9ucyA9IFtfdGhpcy5jaG9vc2VGaWxlQWN0aW9uLCBfdGhpcy5zdGFydENhbWVyYUFjdGlvbiwgX3RoaXMuY2xlYW5BY3Rpb25dO1xuICAgICAgICBfdGhpcy5maWxlTmF2aWdhdG9yLmFjdGlvbnMgPSBbX3RoaXMucHJldkZpbGVBY3Rpb24sIF90aGlzLmZpbGVJbmRleEFjdGlvbiwgX3RoaXMubmV4dEZpbGVBY3Rpb25dO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbkZpbGVNb2RlbC5wcm90b3R5cGUsIFwiZmlsZU5hdmlnYXRvclZpc2libGVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBpc1VwbG9hZGluZyA9IHRoaXMuaXNVcGxvYWRpbmc7XG4gICAgICAgICAgICB2YXIgaXNQbGF5aW5nVmlkZW8gPSB0aGlzLmlzUGxheWluZ1ZpZGVvO1xuICAgICAgICAgICAgdmFyIGNvbnRhaW5zTXVsdGlwbGVGaWxlcyA9IHRoaXMuY29udGFpbnNNdWx0aXBseUZpbGVzO1xuICAgICAgICAgICAgdmFyIG5lZWRUb1Nob3dGaWxlTmF2aWdhdG9yID0gdGhpcy5wYWdlU2l6ZSA8IHRoaXMucHJldmlld1ZhbHVlLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiAhaXNVcGxvYWRpbmcgJiYgIWlzUGxheWluZ1ZpZGVvICYmIGNvbnRhaW5zTXVsdGlwbGVGaWxlcyAmJiBuZWVkVG9TaG93RmlsZU5hdmlnYXRvciAmJiB0aGlzLmlzRGVmYXVsdFYyVGhlbWU7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25GaWxlTW9kZWwucHJvdG90eXBlLCBcInBhZ2VzQ291bnRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmNlaWwodGhpcy5wcmV2aWV3VmFsdWUubGVuZ3RoIC8gdGhpcy5wYWdlU2l6ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25GaWxlTW9kZWwucHJvdG90eXBlLCBcImFjdGlvbnNDb250YWluZXJWaXNpYmxlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgaXNVcGxvYWRpbmcgPSB0aGlzLmlzVXBsb2FkaW5nO1xuICAgICAgICAgICAgdmFyIGlzUGxheWluZ1ZpZGVvID0gdGhpcy5pc1BsYXlpbmdWaWRlbztcbiAgICAgICAgICAgIHZhciBpc0RlZmF1bHRWMlRoZW1lID0gdGhpcy5pc0RlZmF1bHRWMlRoZW1lO1xuICAgICAgICAgICAgdmFyIGlzUmVhZE9ubHkgPSB0aGlzLmlzSW5wdXRSZWFkT25seTtcbiAgICAgICAgICAgIHJldHVybiAhaXNVcGxvYWRpbmcgJiYgIWlzUGxheWluZ1ZpZGVvICYmICFpc1JlYWRPbmx5ICYmIGlzRGVmYXVsdFYyVGhlbWU7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25GaWxlTW9kZWwucHJvdG90eXBlLCBcInZpZGVvSWRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuaWQgKyBcIl92aWRlb1wiOyB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uRmlsZU1vZGVsLnByb3RvdHlwZSwgXCJoYXNWaWRlb1VJXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLmN1cnJlbnRNb2RlICE9PSBcImZpbGVcIjsgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbkZpbGVNb2RlbC5wcm90b3R5cGUsIFwiaGFzRmlsZVVJXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLmN1cnJlbnRNb2RlICE9PSBcImNhbWVyYVwiOyB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUXVlc3Rpb25GaWxlTW9kZWwucHJvdG90eXBlLnN0YXJ0VmlkZW8gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRNb2RlID09PSBcImZpbGVcIiB8fCB0aGlzLmlzRGVzaWduTW9kZSB8fCB0aGlzLmlzUGxheWluZ1ZpZGVvKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLnNldElzUGxheWluZ1ZpZGVvKHRydWUpO1xuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLnN0YXJ0VmlkZW9JbkNhbWVyYSgpO1xuICAgICAgICB9LCAwKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uRmlsZU1vZGVsLnByb3RvdHlwZS5zdGFydFZpZGVvSW5DYW1lcmEgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHRoaXMuY2FtZXJhLnN0YXJ0VmlkZW8odGhpcy52aWRlb0lkLCBmdW5jdGlvbiAoc3RyZWFtKSB7XG4gICAgICAgICAgICBfdGhpcy52aWRlb1N0cmVhbSA9IHN0cmVhbTtcbiAgICAgICAgICAgIGlmICghc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMuc3RvcFZpZGVvKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHRoaXMuaW1hZ2VXaWR0aCwgdGhpcy5pbWFnZUhlaWdodCk7XG4gICAgfTtcbiAgICBRdWVzdGlvbkZpbGVNb2RlbC5wcm90b3R5cGUuc3RvcFZpZGVvID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnNldElzUGxheWluZ1ZpZGVvKGZhbHNlKTtcbiAgICAgICAgdGhpcy5jbG9zZVZpZGVvU3RyZWFtKCk7XG4gICAgfTtcbiAgICBRdWVzdGlvbkZpbGVNb2RlbC5wcm90b3R5cGUuc25hcFBpY3R1cmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGlmICghdGhpcy5pc1BsYXlpbmdWaWRlbylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIGJsb2JDYWxsYmFjayA9IGZ1bmN0aW9uIChibG9iKSB7XG4gICAgICAgICAgICBpZiAoYmxvYikge1xuICAgICAgICAgICAgICAgIHZhciBmaWxlID0gbmV3IEZpbGUoW2Jsb2JdLCBcInNuYXBfcGljdHVyZS5wbmdcIiwgeyB0eXBlOiBcImltYWdlL3BuZ1wiIH0pO1xuICAgICAgICAgICAgICAgIF90aGlzLmxvYWRGaWxlcyhbZmlsZV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmNhbWVyYS5zbmFwKHRoaXMudmlkZW9JZCwgYmxvYkNhbGxiYWNrKTtcbiAgICAgICAgdGhpcy5zdG9wVmlkZW8oKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uRmlsZU1vZGVsLnByb3RvdHlwZS5jYW5GbGlwQ2FtZXJhID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBpZiAodGhpcy5jYW5GbGlwQ2FtZXJhVmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5jYW5GbGlwQ2FtZXJhVmFsdWUgPSB0aGlzLmNhbWVyYS5jYW5GbGlwKGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5jYW5GbGlwQ2FtZXJhVmFsdWUgPSByZXM7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5jYW5GbGlwQ2FtZXJhVmFsdWU7XG4gICAgfTtcbiAgICBRdWVzdGlvbkZpbGVNb2RlbC5wcm90b3R5cGUuZmxpcENhbWVyYSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNhbkZsaXBDYW1lcmEoKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5jbG9zZVZpZGVvU3RyZWFtKCk7XG4gICAgICAgIHRoaXMuY2FtZXJhLmZsaXAoKTtcbiAgICAgICAgdGhpcy5zdGFydFZpZGVvSW5DYW1lcmEoKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uRmlsZU1vZGVsLnByb3RvdHlwZS5jbG9zZVZpZGVvU3RyZWFtID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoISF0aGlzLnZpZGVvU3RyZWFtKSB7XG4gICAgICAgICAgICB0aGlzLnZpZGVvU3RyZWFtLmdldFRyYWNrcygpLmZvckVhY2goZnVuY3Rpb24gKHRyYWNrKSB7XG4gICAgICAgICAgICAgICAgdHJhY2suc3RvcCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnZpZGVvU3RyZWFtID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBRdWVzdGlvbkZpbGVNb2RlbC5wcm90b3R5cGUub25IaWRpbmdDb250ZW50ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBfc3VwZXIucHJvdG90eXBlLm9uSGlkaW5nQ29udGVudC5jYWxsKHRoaXMpO1xuICAgICAgICB0aGlzLnN0b3BWaWRlbygpO1xuICAgIH07XG4gICAgUXVlc3Rpb25GaWxlTW9kZWwucHJvdG90eXBlLnVwZGF0ZUVsZW1lbnRDc3NDb3JlID0gZnVuY3Rpb24gKGNzc0NsYXNzZXMpIHtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS51cGRhdGVFbGVtZW50Q3NzQ29yZS5jYWxsKHRoaXMsIGNzc0NsYXNzZXMpO1xuICAgICAgICB0aGlzLnByZXZGaWxlQWN0aW9uLmljb25OYW1lID0gdGhpcy5jc3NDbGFzc2VzLmxlZnRJY29uSWQ7XG4gICAgICAgIHRoaXMubmV4dEZpbGVBY3Rpb24uaWNvbk5hbWUgPSB0aGlzLmNzc0NsYXNzZXMucmlnaHRJY29uSWQ7XG4gICAgICAgIC8vdGhpcy5tb2JpbGVGaWxlTmF2aWdhdG9yLmNzc0NsYXNzZXMgPSB0aGlzLnN1cnZleS5nZXRDc3MoKS5hY3Rpb25CYXI7XG4gICAgfTtcbiAgICBRdWVzdGlvbkZpbGVNb2RlbC5wcm90b3R5cGUuZ2V0RmlsZUluZGV4Q2FwdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemF0aW9uRm9ybWF0U3RyaW5nKFwiaW5kZXhUZXh0XCIsIHRoaXMuaW5kZXhUb1Nob3cgKyAxLCB0aGlzLnBhZ2VzQ291bnQpO1xuICAgIH07XG4gICAgUXVlc3Rpb25GaWxlTW9kZWwucHJvdG90eXBlLnVwZGF0ZUZpbGVOYXZpZ2F0b3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuaW5kZXhUb1Nob3cgPSB0aGlzLnByZXZpZXdWYWx1ZS5sZW5ndGggJiYgKCh0aGlzLmluZGV4VG9TaG93ICsgdGhpcy5wYWdlc0NvdW50KSAlIHRoaXMucGFnZXNDb3VudCkgfHwgMDtcbiAgICAgICAgdGhpcy5maWxlSW5kZXhBY3Rpb24udGl0bGUgPSB0aGlzLmdldEZpbGVJbmRleENhcHRpb24oKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uRmlsZU1vZGVsLnByb3RvdHlwZS5wcmV2aWV3VmFsdWVDaGFuZ2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBpZiAodGhpcy5wcmV2aWV3VmFsdWUubGVuZ3RoICE9PSB0aGlzLnByZXZQcmV2aWV3TGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2aWV3VmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnByZXZQcmV2aWV3TGVuZ3RoID4gdGhpcy5wcmV2aWV3VmFsdWUubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5kZXhUb1Nob3cgPSB0aGlzLmluZGV4VG9TaG93ID49IHRoaXMucGFnZXNDb3VudCAmJiB0aGlzLmluZGV4VG9TaG93ID4gMCA/IHRoaXMucGFnZXNDb3VudCAtIDEgOiB0aGlzLmluZGV4VG9TaG93O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmRleFRvU2hvdyA9IE1hdGguZmxvb3IodGhpcy5wcmV2UHJldmlld0xlbmd0aCAvIHRoaXMucGFnZVNpemUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5kZXhUb1Nob3cgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmlsZUluZGV4QWN0aW9uLnRpdGxlID0gdGhpcy5nZXRGaWxlSW5kZXhDYXB0aW9uKCk7XG4gICAgICAgIHRoaXMuY29udGFpbnNNdWx0aXBseUZpbGVzID0gdGhpcy5wcmV2aWV3VmFsdWUubGVuZ3RoID4gMTtcbiAgICAgICAgaWYgKHRoaXMucHJldmlld1ZhbHVlLmxlbmd0aCA+IDAgJiYgIXRoaXMuY2FsY3VsYXRlZEdhcEJldHdlZW5JdGVtcyAmJiAhdGhpcy5jYWxjdWxhdGVkSXRlbVdpZHRoKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5wcm9jZXNzUmVzcG9uc2l2ZW5lc3MoMCwgX3RoaXMuX3dpZHRoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJldlByZXZpZXdMZW5ndGggPSB0aGlzLnByZXZpZXdWYWx1ZS5sZW5ndGg7XG4gICAgfTtcbiAgICBRdWVzdGlvbkZpbGVNb2RlbC5wcm90b3R5cGUuaXNQcmV2aWV3VmlzaWJsZSA9IGZ1bmN0aW9uIChpbmRleCkge1xuICAgICAgICB2YXIgaXNGaWxlTmF2aWdhdG9yVmlzaWJsZSA9IHRoaXMuZmlsZU5hdmlnYXRvclZpc2libGU7XG4gICAgICAgIHZhciBpc1ByZXZpZXdWaXNpYmxlID0gKHRoaXMuaW5kZXhUb1Nob3cgKiB0aGlzLnBhZ2VTaXplIDw9IGluZGV4ICYmIGluZGV4IDwgKHRoaXMuaW5kZXhUb1Nob3cgKyAxKSAqIHRoaXMucGFnZVNpemUpO1xuICAgICAgICByZXR1cm4gIWlzRmlsZU5hdmlnYXRvclZpc2libGUgfHwgaXNQcmV2aWV3VmlzaWJsZTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uRmlsZU1vZGVsLnByb3RvdHlwZS5nZXRUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gXCJmaWxlXCI7XG4gICAgfTtcbiAgICBRdWVzdGlvbkZpbGVNb2RlbC5wcm90b3R5cGUuY2xlYXJWYWx1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5jbGVhck9uRGVsZXRpbmdDb250YWluZXIoKTtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5jbGVhclZhbHVlLmNhbGwodGhpcyk7XG4gICAgfTtcbiAgICBRdWVzdGlvbkZpbGVNb2RlbC5wcm90b3R5cGUuY2xlYXJPbkRlbGV0aW5nQ29udGFpbmVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuc3VydmV5KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLnN1cnZleS5jbGVhckZpbGVzKHRoaXMsIHRoaXMubmFtZSwgdGhpcy52YWx1ZSwgbnVsbCwgZnVuY3Rpb24gKCkgeyB9KTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbkZpbGVNb2RlbC5wcm90b3R5cGUsIFwic2hvd1ByZXZpZXdcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogRGlzYWJsZSB0aGlzIHByb3BlcnR5IG9ubHkgdG8gaW1wbGVtZW50IGEgY3VzdG9tIHByZXZpZXcuXG4gICAgICAgICAqXG4gICAgICAgICAqIFtWaWV3IERlbW9dKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2V4YW1wbGVzL2ZpbGUtY3VzdG9tLXByZXZpZXcvIChsaW5rU3R5bGUpKVxuICAgICAgICAgKiBAc2VlIGFsbG93SW1hZ2VzUHJldmlld1xuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic2hvd1ByZXZpZXdcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwic2hvd1ByZXZpZXdcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbkZpbGVNb2RlbC5wcm90b3R5cGUsIFwiYWxsb3dNdWx0aXBsZVwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgd2hldGhlciB1c2VycyBjYW4gdXBsb2FkIG11bHRpcGxlIGZpbGVzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBEZWZhdWx0IHZhbHVlOiBgZmFsc2VgXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJhbGxvd011bHRpcGxlXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImFsbG93TXVsdGlwbGVcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbkZpbGVNb2RlbC5wcm90b3R5cGUsIFwiaW1hZ2VIZWlnaHRcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogVGhlIGltYWdlIGhlaWdodC5cbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImltYWdlSGVpZ2h0XCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImltYWdlSGVpZ2h0XCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25GaWxlTW9kZWwucHJvdG90eXBlLCBcImltYWdlV2lkdGhcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogVGhlIGltYWdlIHdpZHRoLlxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaW1hZ2VXaWR0aFwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpbWFnZVdpZHRoXCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25GaWxlTW9kZWwucHJvdG90eXBlLCBcImFjY2VwdGVkVHlwZXNcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogQW4gW2FjY2VwdF0oaHR0cHM6Ly93d3cudzNzY2hvb2xzLmNvbS90YWdzL2F0dF9pbnB1dF9hY2NlcHQuYXNwKSBhdHRyaWJ1dGUgdmFsdWUgZm9yIHRoZSB1bmRlcmx5aW5nIGA8aW5wdXQ+YCBlbGVtZW50LlxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiYWNjZXB0ZWRUeXBlc1wiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJhY2NlcHRlZFR5cGVzXCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25GaWxlTW9kZWwucHJvdG90eXBlLCBcInN0b3JlRGF0YUFzVGV4dFwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgd2hldGhlciB0byBzdG9yZSBmaWxlIGNvbnRlbnQgYXMgdGV4dCBpbiBgU3VydmV5TW9kZWxgJ3MgW2BkYXRhYF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9zdXJ2ZXltb2RlbCNkYXRhKSBwcm9wZXJ0eS5cbiAgICAgICAgICpcbiAgICAgICAgICogSWYgeW91IGRpc2FibGUgdGhpcyBwcm9wZXJ0eSwgaW1wbGVtZW50IGBTdXJ2ZXlNb2RlbGAncyBbYG9uVXBsb2FkRmlsZXNgXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL3N1cnZleW1vZGVsI29uVXBsb2FkRmlsZXMpIGV2ZW50IGhhbmRsZXIgdG8gc3BlY2lmeSBob3cgdG8gc3RvcmUgZmlsZSBjb250ZW50LlxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic3RvcmVEYXRhQXNUZXh0XCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInN0b3JlRGF0YUFzVGV4dFwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uRmlsZU1vZGVsLnByb3RvdHlwZSwgXCJ3YWl0Rm9yVXBsb2FkXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEVuYWJsZSB0aGlzIHByb3BlcnR5IGlmIHlvdSB3YW50IHRvIHdhaXQgdW50aWwgZmlsZXMgYXJlIHVwbG9hZGVkIHRvIGNvbXBsZXRlIHRoZSBzdXJ2ZXkuXG4gICAgICAgICAqXG4gICAgICAgICAqIERlZmF1bHQgdmFsdWU6IGBmYWxzZWBcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIndhaXRGb3JVcGxvYWRcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwid2FpdEZvclVwbG9hZFwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uRmlsZU1vZGVsLnByb3RvdHlwZSwgXCJhbGxvd0ltYWdlc1ByZXZpZXdcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHdoZXRoZXIgdG8gc2hvdyBhIHByZXZpZXcgb2YgaW1hZ2UgZmlsZXMuXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJhbGxvd0ltYWdlc1ByZXZpZXdcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiYWxsb3dJbWFnZXNQcmV2aWV3XCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25GaWxlTW9kZWwucHJvdG90eXBlLCBcIm1heFNpemVcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogTWF4aW11bSBhbGxvd2VkIGZpbGUgc2l6ZSwgbWVhc3VyZWQgaW4gYnl0ZXMuXG4gICAgICAgICAqXG4gICAgICAgICAqIERlZmF1bHQgdmFsdWU6IDAgKHVubGltaXRlZClcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIm1heFNpemVcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibWF4U2l6ZVwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uRmlsZU1vZGVsLnByb3RvdHlwZSwgXCJuZWVkQ29uZmlybVJlbW92ZUZpbGVcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHdoZXRoZXIgdXNlcnMgc2hvdWxkIGNvbmZpcm0gZmlsZSBkZWxldGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogRGVmYXVsdCB2YWx1ZTogYGZhbHNlYFxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibmVlZENvbmZpcm1SZW1vdmVGaWxlXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm5lZWRDb25maXJtUmVtb3ZlRmlsZVwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUXVlc3Rpb25GaWxlTW9kZWwucHJvdG90eXBlLmdldENvbmZpcm1SZW1vdmVNZXNzYWdlID0gZnVuY3Rpb24gKGZpbGVOYW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpcm1SZW1vdmVNZXNzYWdlLmZvcm1hdChmaWxlTmFtZSk7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25GaWxlTW9kZWwucHJvdG90eXBlLCBcInJlbmRlcmVkUGxhY2Vob2xkZXJcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgICAgICBpZiAodGhpcy5yZW5kZXJlZFBsYWNlaG9sZGVyVmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZWRQbGFjZWhvbGRlclZhbHVlID0gKG5ldyBfYmFzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiQ29tcHV0ZWRVcGRhdGVyXCJdKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRyYWdBcmVhVGV4dCA9IF90aGlzLmRyYWdBcmVhUGxhY2Vob2xkZXI7XG4gICAgICAgICAgICAgICAgICAgIHZhciBmaWxlQ2FtZXJhRHJhZ0FyZWFQbGFjZUhvbGRlciA9IF90aGlzLmZpbGVDYW1lcmFEcmFnQXJlYVBsYWNlaG9sZGVyO1xuICAgICAgICAgICAgICAgICAgICB2YXIgY2FtZXJhUGxhY2VIb2xkZXIgPSBfdGhpcy5jYW1lcmFQbGFjZWhvbGRlcjtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlYWRPbmx5VGV4dCA9IF90aGlzLm5vRmlsZUNob3NlbkNhcHRpb247XG4gICAgICAgICAgICAgICAgICAgIHZhciBpc1JlYWRPbmx5ID0gX3RoaXMuaXNSZWFkT25seTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGhhc0ZpbGVVSSA9IF90aGlzLmhhc0ZpbGVVSTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGhhc1ZpZGVvVUkgPSBfdGhpcy5oYXNWaWRlb1VJO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVuZGVyZWRQbGFjZWhvbGRlciA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1JlYWRPbmx5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJlZFBsYWNlaG9sZGVyID0gcmVhZE9ubHlUZXh0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGhhc0ZpbGVVSSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1ZpZGVvVUkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJlZFBsYWNlaG9sZGVyID0gZmlsZUNhbWVyYURyYWdBcmVhUGxhY2VIb2xkZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJlZFBsYWNlaG9sZGVyID0gZHJhZ0FyZWFUZXh0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyZWRQbGFjZWhvbGRlciA9IGNhbWVyYVBsYWNlSG9sZGVyO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXJlZFBsYWNlaG9sZGVyO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlcmVkUGxhY2Vob2xkZXJWYWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbkZpbGVNb2RlbC5wcm90b3R5cGUsIFwiY3VycmVudE1vZGVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjdXJyZW50TW9kZVwiLCB0aGlzLnNvdXJjZVR5cGUpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uRmlsZU1vZGVsLnByb3RvdHlwZSwgXCJpc1BsYXlpbmdWaWRlb1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImlzUGxheWluZ1ZpZGVvXCIsIGZhbHNlKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFF1ZXN0aW9uRmlsZU1vZGVsLnByb3RvdHlwZS5zZXRJc1BsYXlpbmdWaWRlbyA9IGZ1bmN0aW9uIChzaG93KSB7XG4gICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImlzUGxheWluZ1ZpZGVvXCIsIHNob3cpO1xuICAgIH07XG4gICAgUXVlc3Rpb25GaWxlTW9kZWwucHJvdG90eXBlLnVwZGF0ZUN1cnJlbnRNb2RlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBpZiAoIXRoaXMuaXNEZXNpZ25Nb2RlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zb3VyY2VUeXBlICE9PSBcImZpbGVcIikge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FtZXJhLmhhc0NhbWVyYShmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgICAgIF90aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjdXJyZW50TW9kZVwiLCByZXMgJiYgX3RoaXMuaXNEZWZhdWx0VjJUaGVtZSA/IF90aGlzLnNvdXJjZVR5cGUgOiBcImZpbGVcIik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjdXJyZW50TW9kZVwiLCB0aGlzLnNvdXJjZVR5cGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBRdWVzdGlvbkZpbGVNb2RlbC5wcm90b3R5cGUudXBkYXRlQWN0aW9ucyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5jaG9vc2VGaWxlQWN0aW9uLnZpc2libGUgPSB0aGlzLmhhc0ZpbGVVSTtcbiAgICAgICAgdGhpcy5zdGFydENhbWVyYUFjdGlvbi52aXNpYmxlID0gdGhpcy5oYXNWaWRlb1VJO1xuICAgICAgICB0aGlzLmNsZWFuQWN0aW9uLnZpc2libGUgPSAhIXRoaXMuaXNBbnN3ZXJlZDtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbkZpbGVNb2RlbC5wcm90b3R5cGUsIFwiaW5wdXRUaXRsZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNVcGxvYWRpbmcpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9hZGluZ0ZpbGVUaXRsZTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRW1wdHkoKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jaG9vc2VGaWxlVGl0bGU7XG4gICAgICAgICAgICByZXR1cm4gXCIgXCI7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25GaWxlTW9kZWwucHJvdG90eXBlLCBcImNob29zZUJ1dHRvblRleHRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlzRW1wdHkoKSB8fCB0aGlzLmFsbG93TXVsdGlwbGUgPyB0aGlzLmNob29zZUJ1dHRvbkNhcHRpb24gOiB0aGlzLnJlcGxhY2VCdXR0b25DYXB0aW9uO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUXVlc3Rpb25GaWxlTW9kZWwucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKGRvbmVDYWxsYmFjaykge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBpZiAoIXRoaXMuc3VydmV5KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLmNvbnRhaW5zTXVsdGlwbHlGaWxlcyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN1cnZleS5jbGVhckZpbGVzKHRoaXMsIHRoaXMubmFtZSwgdGhpcy52YWx1ZSwgbnVsbCwgZnVuY3Rpb24gKHN0YXR1cywgZGF0YSkge1xuICAgICAgICAgICAgaWYgKHN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBfdGhpcy5lcnJvcnMgPSBbXTtcbiAgICAgICAgICAgICAgICAhIWRvbmVDYWxsYmFjayAmJiBkb25lQ2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICBfdGhpcy5pbmRleFRvU2hvdyA9IDA7XG4gICAgICAgICAgICAgICAgX3RoaXMuZmlsZUluZGV4QWN0aW9uLnRpdGxlID0gX3RoaXMuZ2V0RmlsZUluZGV4Q2FwdGlvbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbkZpbGVNb2RlbC5wcm90b3R5cGUsIFwicmVuZGVyQ2FwdHVyZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWxsb3dDYW1lcmFBY2Nlc3MgPyBcInVzZXJcIiA6IHVuZGVmaW5lZDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbkZpbGVNb2RlbC5wcm90b3R5cGUsIFwibXVsdGlwbGVSZW5kZXJlZFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWxsb3dNdWx0aXBsZSA/IFwibXVsdGlwbGVcIiA6IHVuZGVmaW5lZDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbkZpbGVNb2RlbC5wcm90b3R5cGUsIFwic2hvd0Nob29zZUJ1dHRvblwiLCB7XG4gICAgICAgIC8vdG9kbzogcmVtb3ZlIGl0IGluIFYyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuICF0aGlzLmlzUmVhZE9ubHkgJiYgIXRoaXMuaXNEZWZhdWx0VjJUaGVtZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbkZpbGVNb2RlbC5wcm90b3R5cGUsIFwic2hvd0ZpbGVEZWNvcmF0b3JcIiwge1xuICAgICAgICAvL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBpc1BsYXlpbmdWaWRlbyA9IHRoaXMuaXNQbGF5aW5nVmlkZW87XG4gICAgICAgICAgICB2YXIgc2hvd0xvYWRpbmdJbmRpY2F0b3IgPSB0aGlzLnNob3dMb2FkaW5nSW5kaWNhdG9yO1xuICAgICAgICAgICAgcmV0dXJuICFpc1BsYXlpbmdWaWRlbyAmJiAhc2hvd0xvYWRpbmdJbmRpY2F0b3I7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25GaWxlTW9kZWwucHJvdG90eXBlLCBcInNob3dMb2FkaW5nSW5kaWNhdG9yXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pc1VwbG9hZGluZyAmJiB0aGlzLmlzRGVmYXVsdFYyVGhlbWU7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25GaWxlTW9kZWwucHJvdG90eXBlLCBcImFsbG93U2hvd1ByZXZpZXdcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBpc1Nob3dMb2FkaW5nSW5kaWNhdG9yID0gdGhpcy5zaG93TG9hZGluZ0luZGljYXRvcjtcbiAgICAgICAgICAgIHZhciBpc1BsYXlpbmdWaWRlbyA9IHRoaXMuaXNQbGF5aW5nVmlkZW87XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcmV2aWV3VmFsdWUgJiYgdGhpcy5wcmV2aWV3VmFsdWUubGVuZ3RoID4gMCAmJiAhaXNTaG93TG9hZGluZ0luZGljYXRvciAmJiAhaXNQbGF5aW5nVmlkZW87XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25GaWxlTW9kZWwucHJvdG90eXBlLCBcInNob3dSZW1vdmVCdXR0b25Db3JlXCIsIHtcbiAgICAgICAgLy90b2RvOiByZW1vdmUgaW4gVjJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgc2hvd0xvYWRpbmdJbmRpY2F0b3IgPSB0aGlzLnNob3dMb2FkaW5nSW5kaWNhdG9yO1xuICAgICAgICAgICAgdmFyIGlzUmVhZE9ubHkgPSB0aGlzLmlzUmVhZE9ubHk7XG4gICAgICAgICAgICB2YXIgaXNFbXB0eSA9IHRoaXMuaXNFbXB0eSgpO1xuICAgICAgICAgICAgcmV0dXJuICFpc1JlYWRPbmx5ICYmICFpc0VtcHR5ICYmICFzaG93TG9hZGluZ0luZGljYXRvciAmJiAhdGhpcy5pc0RlZmF1bHRWMlRoZW1lO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uRmlsZU1vZGVsLnByb3RvdHlwZSwgXCJzaG93UmVtb3ZlQnV0dG9uXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zaG93UmVtb3ZlQnV0dG9uQ29yZSAmJiB0aGlzLmNzc0NsYXNzZXMucmVtb3ZlQnV0dG9uO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uRmlsZU1vZGVsLnByb3RvdHlwZSwgXCJzaG93UmVtb3ZlQnV0dG9uQm90dG9tXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgY3NzQ2xhc3NlcyA9IG5ldyBfdXRpbHNfY3NzQ2xhc3NCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bXCJDc3NDbGFzc0J1aWxkZXJcIl0oKS5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLnJlbW92ZUJ1dHRvbkJvdHRvbSkuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5jb250ZXh0QnV0dG9uKS50b1N0cmluZygpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2hvd1JlbW92ZUJ1dHRvbkNvcmUgJiYgY3NzQ2xhc3NlcztcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIC8vXG4gICAgUXVlc3Rpb25GaWxlTW9kZWwucHJvdG90eXBlLmRlZmF1bHRJbWFnZSA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5jYW5QcmV2aWV3SW1hZ2UoZGF0YSkgJiYgISF0aGlzLmNzc0NsYXNzZXMuZGVmYXVsdEltYWdlO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBhIGZpbGUgd2l0aCBhIHNwZWNpZmllZCBuYW1lLlxuICAgICAqL1xuICAgIFF1ZXN0aW9uRmlsZU1vZGVsLnByb3RvdHlwZS5yZW1vdmVGaWxlID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVGaWxlQnlDb250ZW50KHRoaXMudmFsdWUuZmlsdGVyKGZ1bmN0aW9uIChmKSB7IHJldHVybiBmLm5hbWUgPT09IG5hbWU7IH0pWzBdKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uRmlsZU1vZGVsLnByb3RvdHlwZS5yZW1vdmVGaWxlQnlDb250ZW50ID0gZnVuY3Rpb24gKGNvbnRlbnQpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgaWYgKCF0aGlzLnN1cnZleSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5zdXJ2ZXkuY2xlYXJGaWxlcyh0aGlzLCB0aGlzLm5hbWUsIHRoaXMudmFsdWUsIGNvbnRlbnQubmFtZSwgZnVuY3Rpb24gKHN0YXR1cywgZGF0YSkge1xuICAgICAgICAgICAgaWYgKHN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgICAgICAgICB2YXIgb2xkVmFsdWUgPSBfdGhpcy52YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvbGRWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMudmFsdWUgPSBvbGRWYWx1ZS5maWx0ZXIoZnVuY3Rpb24gKGYpIHsgcmV0dXJuICFfaGVscGVyc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fW1wiSGVscGVyc1wiXS5pc1R3b1ZhbHVlRXF1YWxzKGYsIGNvbnRlbnQsIHRydWUsIGZhbHNlLCBmYWxzZSk7IH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMudmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIExvYWRzIG11bHRpcGxlIGZpbGVzIGludG8gdGhlIHF1ZXN0aW9uLlxuICAgICAqIEBwYXJhbSBmaWxlcyBBbiBhcnJheSBvZiBbRmlsZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0ZpbGUpIG9iamVjdHMuXG4gICAgICovXG4gICAgUXVlc3Rpb25GaWxlTW9kZWwucHJvdG90eXBlLmxvYWRGaWxlcyA9IGZ1bmN0aW9uIChmaWxlcykge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBpZiAoIXRoaXMuc3VydmV5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lcnJvcnMgPSBbXTtcbiAgICAgICAgaWYgKCF0aGlzLmFsbEZpbGVzT2soZmlsZXMpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGxvYWRGaWxlc1Byb2MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5zdGF0ZUNoYW5nZWQoXCJsb2FkaW5nXCIpO1xuICAgICAgICAgICAgdmFyIGNvbnRlbnQgPSBbXTtcbiAgICAgICAgICAgIGlmIChfdGhpcy5zdG9yZURhdGFBc1RleHQpIHtcbiAgICAgICAgICAgICAgICBmaWxlcy5mb3JFYWNoKGZ1bmN0aW9uIChmaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBmaWxlUmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgZmlsZVJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudCA9IGNvbnRlbnQuY29uY2F0KFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6IGZpbGUubmFtZSwgdHlwZTogZmlsZS50eXBlLCBjb250ZW50OiBmaWxlUmVhZGVyLnJlc3VsdCB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udGVudC5sZW5ndGggPT09IGZpbGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLnZhbHVlID0gKF90aGlzLnZhbHVlIHx8IFtdKS5jb25jYXQoY29udGVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGZpbGVSZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChfdGhpcy5zdXJ2ZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuc3VydmV5LnVwbG9hZEZpbGVzKF90aGlzLCBfdGhpcy5uYW1lLCBmaWxlcywgZnVuY3Rpb24gKHN0YXR1cywgZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyA9PT0gXCJlcnJvclwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuc3RhdGVDaGFuZ2VkKFwiZXJyb3JcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLnZhbHVlID0gKF90aGlzLnZhbHVlIHx8IFtdKS5jb25jYXQoZGF0YS5tYXAoZnVuY3Rpb24gKHIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHIuZmlsZS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogci5maWxlLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiByLmNvbnRlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLmFsbG93TXVsdGlwbGUpIHtcbiAgICAgICAgICAgIGxvYWRGaWxlc1Byb2MoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXIobG9hZEZpbGVzUHJvYyk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbkZpbGVNb2RlbC5wcm90b3R5cGUsIFwiY2FtZXJhXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuY2FtZXJhVmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbWVyYVZhbHVlID0gbmV3IF91dGlsc19jYW1lcmFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19bXCJDYW1lcmFcIl0oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNhbWVyYVZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUXVlc3Rpb25GaWxlTW9kZWwucHJvdG90eXBlLmNhblByZXZpZXdJbWFnZSA9IGZ1bmN0aW9uIChmaWxlSXRlbSkge1xuICAgICAgICByZXR1cm4gdGhpcy5hbGxvd0ltYWdlc1ByZXZpZXcgJiYgISFmaWxlSXRlbSAmJiB0aGlzLmlzRmlsZUltYWdlKGZpbGVJdGVtKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uRmlsZU1vZGVsLnByb3RvdHlwZS5sb2FkUHJldmlldyA9IGZ1bmN0aW9uIChuZXdWYWx1ZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB0aGlzLnByZXZpZXdWYWx1ZS5zcGxpY2UoMCwgdGhpcy5wcmV2aWV3VmFsdWUubGVuZ3RoKTtcbiAgICAgICAgaWYgKCF0aGlzLnNob3dQcmV2aWV3IHx8ICFuZXdWYWx1ZSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIG5ld1ZhbHVlcyA9IEFycmF5LmlzQXJyYXkobmV3VmFsdWUpXG4gICAgICAgICAgICA/IG5ld1ZhbHVlXG4gICAgICAgICAgICA6ICEhbmV3VmFsdWVcbiAgICAgICAgICAgICAgICA/IFtuZXdWYWx1ZV1cbiAgICAgICAgICAgICAgICA6IFtdO1xuICAgICAgICBpZiAodGhpcy5zdG9yZURhdGFBc1RleHQpIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlcy5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHZhciBjb250ZW50ID0gdmFsdWUuY29udGVudCB8fCB2YWx1ZTtcbiAgICAgICAgICAgICAgICBfdGhpcy5wcmV2aWV3VmFsdWUucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IHZhbHVlLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IHZhbHVlLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGNvbnRlbnQsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICghIXRoaXMuX3ByZXZpZXdMb2FkZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9wcmV2aWV3TG9hZGVyLmRpc3Bvc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaXNGaWxlTG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9wcmV2aWV3TG9hZGVyID0gbmV3IEZpbGVMb2FkZXIodGhpcywgZnVuY3Rpb24gKHN0YXR1cywgbG9hZGVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXR1cyA9PT0gXCJsb2FkZWRcIikge1xuICAgICAgICAgICAgICAgICAgICBsb2FkZWQuZm9yRWFjaChmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5wcmV2aWV3VmFsdWUucHVzaCh2YWwpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMucHJldmlld1ZhbHVlQ2hhbmdlZCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBfdGhpcy5pc0ZpbGVMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgX3RoaXMuX3ByZXZpZXdMb2FkZXIuZGlzcG9zZSgpO1xuICAgICAgICAgICAgICAgIF90aGlzLl9wcmV2aWV3TG9hZGVyID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLl9wcmV2aWV3TG9hZGVyLmxvYWQobmV3VmFsdWVzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByZXZpZXdWYWx1ZUNoYW5nZWQoKTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbkZpbGVNb2RlbC5wcm90b3R5cGUsIFwiaXNGaWxlTG9hZGluZ1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5pc0ZpbGVMb2FkaW5nVmFsdWU7IH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5pc0ZpbGVMb2FkaW5nVmFsdWUgPSB2YWw7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUlzUmVhZHkoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFF1ZXN0aW9uRmlsZU1vZGVsLnByb3RvdHlwZS5nZXRJc1F1ZXN0aW9uUmVhZHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLmdldElzUXVlc3Rpb25SZWFkeS5jYWxsKHRoaXMpICYmICF0aGlzLmlzRmlsZUxvYWRpbmc7XG4gICAgfTtcbiAgICBRdWVzdGlvbkZpbGVNb2RlbC5wcm90b3R5cGUub25DaGVja0ZvckVycm9ycyA9IGZ1bmN0aW9uIChlcnJvcnMsIGlzT25WYWx1ZUNoYW5nZWQpIHtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5vbkNoZWNrRm9yRXJyb3JzLmNhbGwodGhpcywgZXJyb3JzLCBpc09uVmFsdWVDaGFuZ2VkKTtcbiAgICAgICAgaWYgKHRoaXMuaXNVcGxvYWRpbmcgJiYgdGhpcy53YWl0Rm9yVXBsb2FkKSB7XG4gICAgICAgICAgICBlcnJvcnMucHVzaChuZXcgX2Vycm9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bXCJVcGxvYWRpbmdGaWxlRXJyb3JcIl0odGhpcy5nZXRMb2NhbGl6YXRpb25TdHJpbmcoXCJ1cGxvYWRpbmdGaWxlXCIpLCB0aGlzKSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFF1ZXN0aW9uRmlsZU1vZGVsLnByb3RvdHlwZS5zdGF0ZUNoYW5nZWQgPSBmdW5jdGlvbiAoc3RhdGUpIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFN0YXRlID09IHN0YXRlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXRlID09PSBcImxvYWRpbmdcIikge1xuICAgICAgICAgICAgdGhpcy5pc1VwbG9hZGluZyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXRlID09PSBcImxvYWRlZFwiKSB7XG4gICAgICAgICAgICB0aGlzLmlzVXBsb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXRlID09PSBcImVycm9yXCIpIHtcbiAgICAgICAgICAgIHRoaXMuaXNVcGxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmN1cnJlbnRTdGF0ZSA9IHN0YXRlO1xuICAgICAgICB0aGlzLm9uU3RhdGVDaGFuZ2VkLmZpcmUodGhpcywgeyBzdGF0ZTogc3RhdGUgfSk7XG4gICAgICAgIHRoaXMub25VcGxvYWRTdGF0ZUNoYW5nZWQuZmlyZSh0aGlzLCB7IHN0YXRlOiBzdGF0ZSB9KTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uRmlsZU1vZGVsLnByb3RvdHlwZS5hbGxGaWxlc09rID0gZnVuY3Rpb24gKGZpbGVzKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBlcnJvckxlbmd0aCA9IHRoaXMuZXJyb3JzID8gdGhpcy5lcnJvcnMubGVuZ3RoIDogMDtcbiAgICAgICAgKGZpbGVzIHx8IFtdKS5mb3JFYWNoKGZ1bmN0aW9uIChmaWxlKSB7XG4gICAgICAgICAgICBpZiAoX3RoaXMubWF4U2l6ZSA+IDAgJiYgZmlsZS5zaXplID4gX3RoaXMubWF4U2l6ZSkge1xuICAgICAgICAgICAgICAgIF90aGlzLmVycm9ycy5wdXNoKG5ldyBfZXJyb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1tcIkV4Y2VlZFNpemVFcnJvclwiXShfdGhpcy5tYXhTaXplLCBfdGhpcykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGVycm9yTGVuZ3RoID09PSB0aGlzLmVycm9ycy5sZW5ndGg7XG4gICAgfTtcbiAgICBRdWVzdGlvbkZpbGVNb2RlbC5wcm90b3R5cGUuaXNGaWxlSW1hZ2UgPSBmdW5jdGlvbiAoZmlsZSkge1xuICAgICAgICBpZiAoIWZpbGUgfHwgIWZpbGUuY29udGVudCB8fCAhZmlsZS5jb250ZW50LnN1YnN0cmluZylcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgdmFyIGltYWdlUHJlZml4ID0gXCJkYXRhOmltYWdlXCI7XG4gICAgICAgIHZhciBzdWJTdHIgPSBmaWxlLmNvbnRlbnQgJiYgZmlsZS5jb250ZW50LnN1YnN0cmluZygwLCBpbWFnZVByZWZpeC5sZW5ndGgpO1xuICAgICAgICBzdWJTdHIgPSBzdWJTdHIgJiYgc3ViU3RyLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHZhciByZXN1bHQgPSBzdWJTdHIgPT09IGltYWdlUHJlZml4IHx8XG4gICAgICAgICAgICAoISFmaWxlLnR5cGUgJiYgZmlsZS50eXBlLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihcImltYWdlL1wiKSA9PT0gMCk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgICBRdWVzdGlvbkZpbGVNb2RlbC5wcm90b3R5cGUuZ2V0UGxhaW5EYXRhID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge1xuICAgICAgICAgICAgaW5jbHVkZUVtcHR5OiB0cnVlLFxuICAgICAgICB9OyB9XG4gICAgICAgIHZhciBxdWVzdGlvblBsYWluRGF0YSA9IF9zdXBlci5wcm90b3R5cGUuZ2V0UGxhaW5EYXRhLmNhbGwodGhpcywgb3B0aW9ucyk7XG4gICAgICAgIGlmICghIXF1ZXN0aW9uUGxhaW5EYXRhICYmICF0aGlzLmlzRW1wdHkoKSkge1xuICAgICAgICAgICAgcXVlc3Rpb25QbGFpbkRhdGEuaXNOb2RlID0gZmFsc2U7XG4gICAgICAgICAgICB2YXIgdmFsdWVzID0gQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSA/IHRoaXMudmFsdWUgOiBbdGhpcy52YWx1ZV07XG4gICAgICAgICAgICBxdWVzdGlvblBsYWluRGF0YS5kYXRhID0gdmFsdWVzLm1hcChmdW5jdGlvbiAoZGF0YVZhbHVlLCBpbmRleCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IGluZGV4LFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXCJGaWxlXCIsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiAoZGF0YVZhbHVlLmNvbnRlbnQgJiYgZGF0YVZhbHVlLmNvbnRlbnQpIHx8IGRhdGFWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheVZhbHVlOiAoZGF0YVZhbHVlLm5hbWUgJiYgZGF0YVZhbHVlLm5hbWUpIHx8IGRhdGFWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgZ2V0U3RyaW5nOiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gXCJvYmplY3RcIiA/IEpTT04uc3RyaW5naWZ5KHZhbCkgOiB2YWw7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGlzTm9kZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBxdWVzdGlvblBsYWluRGF0YTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uRmlsZU1vZGVsLnByb3RvdHlwZS5nZXRBY3Rpb25zQ29udGFpbmVyQ3NzID0gZnVuY3Rpb24gKGNzcykge1xuICAgICAgICByZXR1cm4gbmV3IF91dGlsc19jc3NDbGFzc0J1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1tcIkNzc0NsYXNzQnVpbGRlclwiXSgpXG4gICAgICAgICAgICAuYXBwZW5kKGNzcy5hY3Rpb25zQ29udGFpbmVyKVxuICAgICAgICAgICAgLmFwcGVuZChjc3MuYWN0aW9uc0NvbnRhaW5lckFuc3dlcmVkLCB0aGlzLmlzQW5zd2VyZWQpXG4gICAgICAgICAgICAudG9TdHJpbmcoKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uRmlsZU1vZGVsLnByb3RvdHlwZS5nZXRSZW1vdmVCdXR0b25Dc3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBuZXcgX3V0aWxzX2Nzc0NsYXNzQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fW1wiQ3NzQ2xhc3NCdWlsZGVyXCJdKClcbiAgICAgICAgICAgIC5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLnJlbW92ZUZpbGVCdXR0b24pXG4gICAgICAgICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5jb250ZXh0QnV0dG9uKVxuICAgICAgICAgICAgLnRvU3RyaW5nKCk7XG4gICAgfTtcbiAgICBRdWVzdGlvbkZpbGVNb2RlbC5wcm90b3R5cGUuZ2V0Q2hvb3NlRmlsZUNzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGlzQW5zd2VyZWQgPSB0aGlzLmlzQW5zd2VyZWQ7XG4gICAgICAgIHJldHVybiBuZXcgX3V0aWxzX2Nzc0NsYXNzQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fW1wiQ3NzQ2xhc3NCdWlsZGVyXCJdKClcbiAgICAgICAgICAgIC5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLmNob29zZUZpbGUpXG4gICAgICAgICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5jb250cm9sRGlzYWJsZWQsIHRoaXMuaXNSZWFkT25seSlcbiAgICAgICAgICAgIC5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLmNob29zZUZpbGVBc1RleHQsICFpc0Fuc3dlcmVkKVxuICAgICAgICAgICAgLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMuY2hvb3NlRmlsZUFzVGV4dERpc2FibGVkLCAhaXNBbnN3ZXJlZCAmJiB0aGlzLmlzSW5wdXRSZWFkT25seSlcbiAgICAgICAgICAgIC5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLmNvbnRleHRCdXR0b24sIGlzQW5zd2VyZWQpXG4gICAgICAgICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5jaG9vc2VGaWxlQXNJY29uLCBpc0Fuc3dlcmVkKVxuICAgICAgICAgICAgLnRvU3RyaW5nKCk7XG4gICAgfTtcbiAgICBRdWVzdGlvbkZpbGVNb2RlbC5wcm90b3R5cGUuZ2V0UmVhZE9ubHlGaWxlQ3NzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gbmV3IF91dGlsc19jc3NDbGFzc0J1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1tcIkNzc0NsYXNzQnVpbGRlclwiXSgpXG4gICAgICAgICAgICAuYXBwZW5kKFwiZm9ybS1jb250cm9sXCIpXG4gICAgICAgICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5wbGFjZWhvbGRlcklucHV0KVxuICAgICAgICAgICAgLnRvU3RyaW5nKCk7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25GaWxlTW9kZWwucHJvdG90eXBlLCBcImZpbGVSb290Q3NzXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IF91dGlsc19jc3NDbGFzc0J1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1tcIkNzc0NsYXNzQnVpbGRlclwiXSgpXG4gICAgICAgICAgICAgICAgLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMucm9vdClcbiAgICAgICAgICAgICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5yb290RHJhZ2dpbmcsIHRoaXMuaXNEcmFnZ2luZylcbiAgICAgICAgICAgICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5yb290QW5zd2VyZWQsIHRoaXMuaXNBbnN3ZXJlZClcbiAgICAgICAgICAgICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5zaW5nbGUsICF0aGlzLmFsbG93TXVsdGlwbGUpXG4gICAgICAgICAgICAgICAgLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMuc2luZ2xlSW1hZ2UsICF0aGlzLmFsbG93TXVsdGlwbGUgJiYgdGhpcy5pc0Fuc3dlcmVkICYmIHRoaXMuY2FuUHJldmlld0ltYWdlKHRoaXMudmFsdWVbMF0pKVxuICAgICAgICAgICAgICAgIC5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLm1vYmlsZSwgdGhpcy5pc01vYmlsZSlcbiAgICAgICAgICAgICAgICAudG9TdHJpbmcoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFF1ZXN0aW9uRmlsZU1vZGVsLnByb3RvdHlwZS5nZXRGaWxlRGVjb3JhdG9yQ3NzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gbmV3IF91dGlsc19jc3NDbGFzc0J1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1tcIkNzc0NsYXNzQnVpbGRlclwiXSgpXG4gICAgICAgICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5maWxlRGVjb3JhdG9yKVxuICAgICAgICAgICAgLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMub25FcnJvciwgdGhpcy5lcnJvcnMubGVuZ3RoID4gMClcbiAgICAgICAgICAgIC5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLmZpbGVEZWNvcmF0b3JEcmFnLCB0aGlzLmlzRHJhZ2dpbmcpXG4gICAgICAgICAgICAudG9TdHJpbmcoKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uRmlsZU1vZGVsLnByb3RvdHlwZS5vbkNoYW5nZSA9IGZ1bmN0aW9uIChzcmMpIHtcbiAgICAgICAgaWYgKCF3aW5kb3dbXCJGaWxlUmVhZGVyXCJdKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAoIXNyYyB8fCAhc3JjLmZpbGVzIHx8IHNyYy5maWxlcy5sZW5ndGggPCAxKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIgZmlsZXMgPSBbXTtcbiAgICAgICAgdmFyIGFsbG93Q291bnQgPSB0aGlzLmFsbG93TXVsdGlwbGUgPyBzcmMuZmlsZXMubGVuZ3RoIDogMTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbGxvd0NvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGZpbGVzLnB1c2goc3JjLmZpbGVzW2ldKTtcbiAgICAgICAgfVxuICAgICAgICBzcmMudmFsdWUgPSBcIlwiO1xuICAgICAgICB0aGlzLmxvYWRGaWxlcyhmaWxlcyk7XG4gICAgfTtcbiAgICBRdWVzdGlvbkZpbGVNb2RlbC5wcm90b3R5cGUub25DaGFuZ2VRdWVzdGlvblZhbHVlID0gZnVuY3Rpb24gKG5ld1ZhbHVlKSB7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUub25DaGFuZ2VRdWVzdGlvblZhbHVlLmNhbGwodGhpcywgbmV3VmFsdWUpO1xuICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlZCh0aGlzLmlzRW1wdHkoKSA/IFwiZW1wdHlcIiA6IFwibG9hZGVkXCIpO1xuICAgICAgICBpZiAoIXRoaXMuaXNMb2FkaW5nRnJvbUpzb24pIHtcbiAgICAgICAgICAgIHRoaXMubG9hZFByZXZpZXcobmV3VmFsdWUpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBRdWVzdGlvbkZpbGVNb2RlbC5wcm90b3R5cGUuY2FsY0Nzc0NsYXNzZXMgPSBmdW5jdGlvbiAoY3NzKSB7XG4gICAgICAgIHZhciBjbGFzc2VzID0gX3N1cGVyLnByb3RvdHlwZS5jYWxjQ3NzQ2xhc3Nlcy5jYWxsKHRoaXMsIGNzcyk7XG4gICAgICAgIHRoaXMuYWN0aW9uc0NvbnRhaW5lci5jc3NDbGFzc2VzID0gY3NzLmFjdGlvbkJhcjtcbiAgICAgICAgdGhpcy5hY3Rpb25zQ29udGFpbmVyLmNzc0NsYXNzZXMuaXRlbVdpdGhUaXRsZSA9IHRoaXMuYWN0aW9uc0NvbnRhaW5lci5jc3NDbGFzc2VzLml0ZW07XG4gICAgICAgIHRoaXMuYWN0aW9uc0NvbnRhaW5lci5jc3NDbGFzc2VzLml0ZW0gPSBcIlwiO1xuICAgICAgICB0aGlzLmFjdGlvbnNDb250YWluZXIuY3NzQ2xhc3Nlcy5pdGVtQXNJY29uID0gY2xhc3Nlcy5jb250ZXh0QnV0dG9uO1xuICAgICAgICB0aGlzLmFjdGlvbnNDb250YWluZXIuY29udGFpbmVyQ3NzID0gY2xhc3Nlcy5hY3Rpb25zQ29udGFpbmVyO1xuICAgICAgICByZXR1cm4gY2xhc3NlcztcbiAgICB9O1xuICAgIC8vdG9kbyByZW1vdmUgaW4gdjJcbiAgICBRdWVzdGlvbkZpbGVNb2RlbC5wcm90b3R5cGUudXBkYXRlRWxlbWVudENzcyA9IGZ1bmN0aW9uIChyZU5ldykge1xuICAgICAgICBfc3VwZXIucHJvdG90eXBlLnVwZGF0ZUVsZW1lbnRDc3MuY2FsbCh0aGlzLCByZU5ldyk7XG4gICAgICAgIHRoaXMudXBkYXRlQ3VycmVudE1vZGUoKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uRmlsZU1vZGVsLnByb3RvdHlwZS5lbmRMb2FkaW5nRnJvbUpzb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUuZW5kTG9hZGluZ0Zyb21Kc29uLmNhbGwodGhpcyk7XG4gICAgICAgIHRoaXMudXBkYXRlQ3VycmVudE1vZGUoKTtcbiAgICAgICAgdGhpcy51cGRhdGVBY3Rpb25zKCk7XG4gICAgICAgIHRoaXMubG9hZFByZXZpZXcodGhpcy52YWx1ZSk7XG4gICAgfTtcbiAgICBRdWVzdGlvbkZpbGVNb2RlbC5wcm90b3R5cGUubmVlZFJlc3BvbnNpdmVuZXNzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdXBwb3J0UmVzcG9uc2l2ZW5lc3MoKSAmJiB0aGlzLmlzRGVmYXVsdFYyVGhlbWU7XG4gICAgfTtcbiAgICBRdWVzdGlvbkZpbGVNb2RlbC5wcm90b3R5cGUuc3VwcG9ydFJlc3BvbnNpdmVuZXNzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uRmlsZU1vZGVsLnByb3RvdHlwZS5nZXRPYnNlcnZlZEVsZW1lbnRTZWxlY3RvciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdChfdXRpbHNfdXRpbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1tcImNsYXNzZXNUb1NlbGVjdG9yXCJdKSh0aGlzLmNzc0NsYXNzZXMuZHJhZ0FyZWEpO1xuICAgIH07XG4gICAgUXVlc3Rpb25GaWxlTW9kZWwucHJvdG90eXBlLmdldEZpbGVMaXN0U2VsZWN0b3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QoX3V0aWxzX3V0aWxzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bXCJjbGFzc2VzVG9TZWxlY3RvclwiXSkodGhpcy5jc3NDbGFzc2VzLmZpbGVMaXN0KTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uRmlsZU1vZGVsLnByb3RvdHlwZS50cmlnZ2VyUmVzcG9uc2l2ZW5lc3MgPSBmdW5jdGlvbiAoaGFyZCkge1xuICAgICAgICBpZiAoaGFyZCkge1xuICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVkR2FwQmV0d2Vlbkl0ZW1zID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVkSXRlbVdpZHRoID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUudHJpZ2dlclJlc3BvbnNpdmVuZXNzLmNhbGwodGhpcyk7XG4gICAgfTtcbiAgICBRdWVzdGlvbkZpbGVNb2RlbC5wcm90b3R5cGUucHJvY2Vzc1Jlc3BvbnNpdmVuZXNzID0gZnVuY3Rpb24gKF8sIGF2YWlsYWJsZVdpZHRoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHRoaXMuX3dpZHRoID0gYXZhaWxhYmxlV2lkdGg7XG4gICAgICAgIGlmICh0aGlzLnJvb3RFbGVtZW50KSB7XG4gICAgICAgICAgICBpZiAoKCF0aGlzLmNhbGN1bGF0ZWRHYXBCZXR3ZWVuSXRlbXMgfHwgIXRoaXMuY2FsY3VsYXRlZEl0ZW1XaWR0aCkgJiYgdGhpcy5hbGxvd011bHRpcGxlKSB7XG4gICAgICAgICAgICAgICAgdmFyIGZpbGVMaXN0U2VsZWN0b3IgPSB0aGlzLmdldEZpbGVMaXN0U2VsZWN0b3IoKTtcbiAgICAgICAgICAgICAgICB2YXIgZmlsZUxpc3RFbGVtZW50ID0gZmlsZUxpc3RTZWxlY3RvciA/IHRoaXMucm9vdEVsZW1lbnQucXVlcnlTZWxlY3Rvcih0aGlzLmdldEZpbGVMaXN0U2VsZWN0b3IoKSkgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgaWYgKGZpbGVMaXN0RWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGN1bGF0ZWRHYXBCZXR3ZWVuSXRlbXMgPSBNYXRoLmNlaWwoTnVtYmVyLnBhcnNlRmxvYXQod2luZG93LmdldENvbXB1dGVkU3R5bGUoZmlsZUxpc3RFbGVtZW50KS5nYXApKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZpcnN0VmlzaWJsZUl0ZW0gPSBBcnJheS5mcm9tKGZpbGVMaXN0RWxlbWVudC5jaGlsZHJlbikuZmlsdGVyKGZ1bmN0aW9uIChfLCBpbmRleCkgeyByZXR1cm4gX3RoaXMuaXNQcmV2aWV3VmlzaWJsZShpbmRleCk7IH0pWzBdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmlyc3RWaXNpYmxlSXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVkSXRlbVdpZHRoID0gTWF0aC5jZWlsKE51bWJlci5wYXJzZUZsb2F0KHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGZpcnN0VmlzaWJsZUl0ZW0pLndpZHRoKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY2FsY3VsYXRlZEdhcEJldHdlZW5JdGVtcyAmJiB0aGlzLmNhbGN1bGF0ZWRJdGVtV2lkdGgpIHtcbiAgICAgICAgICAgIHRoaXMucGFnZVNpemUgPSB0aGlzLmNhbGNBdmFpbGFibGVJdGVtc0NvdW50KGF2YWlsYWJsZVdpZHRoLCB0aGlzLmNhbGN1bGF0ZWRJdGVtV2lkdGgsIHRoaXMuY2FsY3VsYXRlZEdhcEJldHdlZW5JdGVtcyk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgICBRdWVzdGlvbkZpbGVNb2RlbC5wcm90b3R5cGUuY2FuRHJhZ0Ryb3AgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAhdGhpcy5pc0lucHV0UmVhZE9ubHkgJiYgdGhpcy5jdXJyZW50TW9kZSAhPT0gXCJjYW1lcmFcIiAmJiAhdGhpcy5pc1BsYXlpbmdWaWRlbzsgfTtcbiAgICBRdWVzdGlvbkZpbGVNb2RlbC5wcm90b3R5cGUuYWZ0ZXJSZW5kZXIgPSBmdW5jdGlvbiAoZWwpIHtcbiAgICAgICAgdGhpcy5yb290RWxlbWVudCA9IGVsO1xuICAgICAgICBfc3VwZXIucHJvdG90eXBlLmFmdGVyUmVuZGVyLmNhbGwodGhpcywgZWwpO1xuICAgIH07XG4gICAgUXVlc3Rpb25GaWxlTW9kZWwucHJvdG90eXBlLmNsZWFyRmlsZXNDb3JlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5yb290RWxlbWVudCkge1xuICAgICAgICAgICAgdmFyIGlucHV0ID0gdGhpcy5yb290RWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiaW5wdXRcIilbMF07XG4gICAgICAgICAgICBpZiAoaW5wdXQpIHtcbiAgICAgICAgICAgICAgICBpbnB1dC52YWx1ZSA9IFwiXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jbGVhcigpO1xuICAgIH07XG4gICAgUXVlc3Rpb25GaWxlTW9kZWwucHJvdG90eXBlLmRvUmVtb3ZlRmlsZSA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGlmICh0aGlzLm5lZWRDb25maXJtUmVtb3ZlRmlsZSkge1xuICAgICAgICAgICAgT2JqZWN0KF91dGlsc191dGlsc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fW1wiY29uZmlybUFjdGlvbkFzeW5jXCJdKSh0aGlzLmdldENvbmZpcm1SZW1vdmVNZXNzYWdlKGRhdGEubmFtZSksIGZ1bmN0aW9uICgpIHsgX3RoaXMucmVtb3ZlRmlsZUNvcmUoZGF0YSk7IH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVtb3ZlRmlsZUNvcmUoZGF0YSk7XG4gICAgfTtcbiAgICBRdWVzdGlvbkZpbGVNb2RlbC5wcm90b3R5cGUucmVtb3ZlRmlsZUNvcmUgPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICB2YXIgcHJldmlld0luZGV4ID0gdGhpcy5wcmV2aWV3VmFsdWUuaW5kZXhPZihkYXRhKTtcbiAgICAgICAgdGhpcy5yZW1vdmVGaWxlQnlDb250ZW50KHByZXZpZXdJbmRleCA9PT0gLTEgPyBkYXRhIDogdGhpcy52YWx1ZVtwcmV2aWV3SW5kZXhdKTtcbiAgICB9O1xuICAgIC8vI2VuZHJlZ2lvblxuICAgIFF1ZXN0aW9uRmlsZU1vZGVsLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmNhbWVyYVZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmNsb3NlVmlkZW9TdHJlYW0oKTtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG4gICAgfTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJwcm9wZXJ0eVwiXSkoKVxuICAgIF0sIFF1ZXN0aW9uRmlsZU1vZGVsLnByb3RvdHlwZSwgXCJpc1VwbG9hZGluZ1wiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QoX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcInByb3BlcnR5XCJdKSgpXG4gICAgXSwgUXVlc3Rpb25GaWxlTW9kZWwucHJvdG90eXBlLCBcImlzRHJhZ2dpbmdcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJwcm9wZXJ0eUFycmF5XCJdKSh7fSlcbiAgICBdLCBRdWVzdGlvbkZpbGVNb2RlbC5wcm90b3R5cGUsIFwicHJldmlld1ZhbHVlXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wicHJvcGVydHlcIl0pKHsgZGVmYXVsdFZhbHVlOiBcImVtcHR5XCIgfSlcbiAgICBdLCBRdWVzdGlvbkZpbGVNb2RlbC5wcm90b3R5cGUsIFwiY3VycmVudFN0YXRlXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wicHJvcGVydHlcIl0pKHsgZGVmYXVsdFZhbHVlOiAwIH0pXG4gICAgXSwgUXVlc3Rpb25GaWxlTW9kZWwucHJvdG90eXBlLCBcImluZGV4VG9TaG93XCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wicHJvcGVydHlcIl0pKHsgZGVmYXVsdFZhbHVlOiAxLCBvblNldDogZnVuY3Rpb24gKF8sIHRhcmdldCkge1xuICAgICAgICAgICAgICAgIHRhcmdldC51cGRhdGVGaWxlTmF2aWdhdG9yKCk7XG4gICAgICAgICAgICB9IH0pXG4gICAgXSwgUXVlc3Rpb25GaWxlTW9kZWwucHJvdG90eXBlLCBcInBhZ2VTaXplXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wicHJvcGVydHlcIl0pKHsgZGVmYXVsdFZhbHVlOiBmYWxzZSB9KVxuICAgIF0sIFF1ZXN0aW9uRmlsZU1vZGVsLnByb3RvdHlwZSwgXCJjb250YWluc011bHRpcGx5RmlsZXNcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJwcm9wZXJ0eVwiXSkoKVxuICAgIF0sIFF1ZXN0aW9uRmlsZU1vZGVsLnByb3RvdHlwZSwgXCJhbGxvd0NhbWVyYUFjY2Vzc1wiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QoX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcInByb3BlcnR5XCJdKSh7IG9uU2V0OiBmdW5jdGlvbiAodmFsLCBvYmopIHtcbiAgICAgICAgICAgICAgICBpZiAoIW9iai5pc0xvYWRpbmdGcm9tSnNvbikge1xuICAgICAgICAgICAgICAgICAgICBvYmoudXBkYXRlQ3VycmVudE1vZGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IH0pXG4gICAgXSwgUXVlc3Rpb25GaWxlTW9kZWwucHJvdG90eXBlLCBcInNvdXJjZVR5cGVcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJwcm9wZXJ0eVwiXSkoKVxuICAgIF0sIFF1ZXN0aW9uRmlsZU1vZGVsLnByb3RvdHlwZSwgXCJjYW5GbGlwQ2FtZXJhVmFsdWVcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJwcm9wZXJ0eVwiXSkoeyBsb2NhbGl6YWJsZTogeyBkZWZhdWx0U3RyOiBcImNvbmZpcm1SZW1vdmVGaWxlXCIgfSB9KVxuICAgIF0sIFF1ZXN0aW9uRmlsZU1vZGVsLnByb3RvdHlwZSwgXCJjb25maXJtUmVtb3ZlTWVzc2FnZVwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QoX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcInByb3BlcnR5XCJdKSh7IGxvY2FsaXphYmxlOiB7IGRlZmF1bHRTdHI6IFwiY29uZmlybVJlbW92ZUFsbEZpbGVzXCIgfSB9KVxuICAgIF0sIFF1ZXN0aW9uRmlsZU1vZGVsLnByb3RvdHlwZSwgXCJjb25maXJtUmVtb3ZlQWxsTWVzc2FnZVwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QoX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcInByb3BlcnR5XCJdKSh7IGxvY2FsaXphYmxlOiB7IGRlZmF1bHRTdHI6IFwibm9GaWxlQ2hvc2VuXCIgfSB9KVxuICAgIF0sIFF1ZXN0aW9uRmlsZU1vZGVsLnByb3RvdHlwZSwgXCJub0ZpbGVDaG9zZW5DYXB0aW9uXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wicHJvcGVydHlcIl0pKHsgbG9jYWxpemFibGU6IHsgZGVmYXVsdFN0cjogXCJjaG9vc2VGaWxlQ2FwdGlvblwiIH0gfSlcbiAgICBdLCBRdWVzdGlvbkZpbGVNb2RlbC5wcm90b3R5cGUsIFwiY2hvb3NlQnV0dG9uQ2FwdGlvblwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QoX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcInByb3BlcnR5XCJdKSh7IGxvY2FsaXphYmxlOiB7IGRlZmF1bHRTdHI6IFwidGFrZVBob3RvQ2FwdGlvblwiIH0gfSlcbiAgICBdLCBRdWVzdGlvbkZpbGVNb2RlbC5wcm90b3R5cGUsIFwidGFrZVBob3RvQ2FwdGlvblwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QoX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcInByb3BlcnR5XCJdKSh7IGxvY2FsaXphYmxlOiB7IGRlZmF1bHRTdHI6IFwicmVwbGFjZUZpbGVDYXB0aW9uXCIgfSB9KVxuICAgIF0sIFF1ZXN0aW9uRmlsZU1vZGVsLnByb3RvdHlwZSwgXCJyZXBsYWNlQnV0dG9uQ2FwdGlvblwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QoX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcInByb3BlcnR5XCJdKSh7IGxvY2FsaXphYmxlOiB7IGRlZmF1bHRTdHI6IFwiY2xlYXJDYXB0aW9uXCIgfSB9KVxuICAgIF0sIFF1ZXN0aW9uRmlsZU1vZGVsLnByb3RvdHlwZSwgXCJjbGVhckJ1dHRvbkNhcHRpb25cIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJwcm9wZXJ0eVwiXSkoeyBsb2NhbGl6YWJsZTogeyBkZWZhdWx0U3RyOiBcInJlbW92ZUZpbGVDYXB0aW9uXCIgfSB9KVxuICAgIF0sIFF1ZXN0aW9uRmlsZU1vZGVsLnByb3RvdHlwZSwgXCJyZW1vdmVGaWxlQ2FwdGlvblwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QoX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcInByb3BlcnR5XCJdKSh7IGxvY2FsaXphYmxlOiB7IGRlZmF1bHRTdHI6IFwibG9hZGluZ0ZpbGVcIiB9IH0pXG4gICAgXSwgUXVlc3Rpb25GaWxlTW9kZWwucHJvdG90eXBlLCBcImxvYWRpbmdGaWxlVGl0bGVcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJwcm9wZXJ0eVwiXSkoeyBsb2NhbGl6YWJsZTogeyBkZWZhdWx0U3RyOiBcImNob29zZUZpbGVcIiB9IH0pXG4gICAgXSwgUXVlc3Rpb25GaWxlTW9kZWwucHJvdG90eXBlLCBcImNob29zZUZpbGVUaXRsZVwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QoX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcInByb3BlcnR5XCJdKSh7IGxvY2FsaXphYmxlOiB7IGRlZmF1bHRTdHI6IFwiZmlsZUNhbWVyYURyYWdBcmVhUGxhY2VIb2xkZXJcIiB9IH0pXG4gICAgXSwgUXVlc3Rpb25GaWxlTW9kZWwucHJvdG90eXBlLCBcImZpbGVDYW1lcmFEcmFnQXJlYVBsYWNlaG9sZGVyXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wicHJvcGVydHlcIl0pKHsgbG9jYWxpemFibGU6IHsgZGVmYXVsdFN0cjogXCJjYW1lcmFQbGFjZUhvbGRlclwiIH0gfSlcbiAgICBdLCBRdWVzdGlvbkZpbGVNb2RlbC5wcm90b3R5cGUsIFwiY2FtZXJhUGxhY2Vob2xkZXJcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJwcm9wZXJ0eVwiXSkoeyBsb2NhbGl6YWJsZTogeyBkZWZhdWx0U3RyOiBcImZpbGVEcmFnQXJlYVBsYWNlaG9sZGVyXCIgfSB9KVxuICAgIF0sIFF1ZXN0aW9uRmlsZU1vZGVsLnByb3RvdHlwZSwgXCJkcmFnQXJlYVBsYWNlaG9sZGVyXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wicHJvcGVydHlcIl0pKClcbiAgICBdLCBRdWVzdGlvbkZpbGVNb2RlbC5wcm90b3R5cGUsIFwicmVuZGVyZWRQbGFjZWhvbGRlclZhbHVlXCIsIHZvaWQgMCk7XG4gICAgcmV0dXJuIFF1ZXN0aW9uRmlsZU1vZGVsO1xufShfcXVlc3Rpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlF1ZXN0aW9uXCJdKSk7XG5cbl9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJTZXJpYWxpemVyXCJdLmFkZENsYXNzKFwiZmlsZVwiLCBbXG4gICAgeyBuYW1lOiBcInNob3dDb21tZW50QXJlYTpzd2l0Y2hcIiwgbGF5b3V0OiBcInJvd1wiLCB2aXNpYmxlOiB0cnVlLCBjYXRlZ29yeTogXCJnZW5lcmFsXCIgfSxcbiAgICB7IG5hbWU6IFwic2hvd1ByZXZpZXc6Ym9vbGVhblwiLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgXCJhbGxvd011bHRpcGxlOmJvb2xlYW5cIixcbiAgICB7IG5hbWU6IFwiYWxsb3dJbWFnZXNQcmV2aWV3OmJvb2xlYW5cIiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIFwiaW1hZ2VIZWlnaHRcIixcbiAgICBcImltYWdlV2lkdGhcIixcbiAgICBcImFjY2VwdGVkVHlwZXNcIixcbiAgICB7IG5hbWU6IFwic3RvcmVEYXRhQXNUZXh0OmJvb2xlYW5cIiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIHsgbmFtZTogXCJ3YWl0Rm9yVXBsb2FkOmJvb2xlYW5cIiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwibWF4U2l6ZTpudW1iZXJcIiwgZGVmYXVsdDogMCB9LFxuICAgIHsgbmFtZTogXCJkZWZhdWx0VmFsdWVcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwiY29ycmVjdEFuc3dlclwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogXCJ2YWxpZGF0b3JzXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcIm5lZWRDb25maXJtUmVtb3ZlRmlsZTpib29sZWFuXCIgfSxcbiAgICB7IG5hbWU6IFwiYWxsb3dDYW1lcmFBY2Nlc3M6c3dpdGNoXCIsIGNhdGVnb3J5OiBcImdlbmVyYWxcIiB9LFxuICAgIHsgbmFtZTogXCJzb3VyY2VUeXBlXCIsIGNob2ljZXM6IFtcImZpbGVcIiwgXCJjYW1lcmFcIiwgXCJmaWxlLWNhbWVyYVwiXSwgZGVmYXVsdDogXCJmaWxlXCIsIGNhdGVnb3J5OiBcImdlbmVyYWxcIiwgdmlzaWJsZTogdHJ1ZSB9XG5dLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBRdWVzdGlvbkZpbGVNb2RlbChcIlwiKTtcbn0sIFwicXVlc3Rpb25cIik7XG5fcXVlc3Rpb25mYWN0b3J5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJRdWVzdGlvbkZhY3RvcnlcIl0uSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImZpbGVcIiwgZnVuY3Rpb24gKG5hbWUpIHtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uRmlsZU1vZGVsKG5hbWUpO1xufSk7XG52YXIgRmlsZUxvYWRlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBGaWxlTG9hZGVyKGZpbGVRdWVzdGlvbiwgY2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5maWxlUXVlc3Rpb24gPSBmaWxlUXVlc3Rpb247XG4gICAgICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICAgICAgdGhpcy5sb2FkZWQgPSBbXTtcbiAgICB9XG4gICAgRmlsZUxvYWRlci5wcm90b3R5cGUubG9hZCA9IGZ1bmN0aW9uIChmaWxlcykge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgZG93bmxvYWRlZENvdW50ID0gMDtcbiAgICAgICAgdGhpcy5sb2FkZWQgPSBuZXcgQXJyYXkoZmlsZXMubGVuZ3RoKTtcbiAgICAgICAgZmlsZXMuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGluZGV4KSB7XG4gICAgICAgICAgICBpZiAoX3RoaXMuZmlsZVF1ZXN0aW9uLnN1cnZleSkge1xuICAgICAgICAgICAgICAgIF90aGlzLmZpbGVRdWVzdGlvbi5zdXJ2ZXkuZG93bmxvYWRGaWxlKF90aGlzLmZpbGVRdWVzdGlvbiwgX3RoaXMuZmlsZVF1ZXN0aW9uLm5hbWUsIHZhbHVlLCBmdW5jdGlvbiAoc3RhdHVzLCBkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghX3RoaXMuZmlsZVF1ZXN0aW9uIHx8ICFfdGhpcy5jYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5sb2FkZWRbaW5kZXhdID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogdmFsdWUubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB2YWx1ZS50eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvd25sb2FkZWRDb3VudCsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRvd25sb2FkZWRDb3VudCA9PT0gZmlsZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuY2FsbGJhY2soXCJsb2FkZWRcIiwgX3RoaXMubG9hZGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLmNhbGxiYWNrKFwiZXJyb3JcIiwgX3RoaXMubG9hZGVkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIEZpbGVMb2FkZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuZmlsZVF1ZXN0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmNhbGxiYWNrID0gdW5kZWZpbmVkO1xuICAgIH07XG4gICAgcmV0dXJuIEZpbGVMb2FkZXI7XG59KCkpO1xuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvcXVlc3Rpb25faHRtbC50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3F1ZXN0aW9uX2h0bWwudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBRdWVzdGlvbkh0bWxNb2RlbCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJRdWVzdGlvbkh0bWxNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFF1ZXN0aW9uSHRtbE1vZGVsOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcXVlc3Rpb25ub252YWx1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9xdWVzdGlvbm5vbnZhbHVlICovIFwiLi9zcmMvcXVlc3Rpb25ub252YWx1ZS50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9qc29ub2JqZWN0ICovIFwiLi9zcmMvanNvbm9iamVjdC50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcXVlc3Rpb25mYWN0b3J5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3F1ZXN0aW9uZmFjdG9yeSAqLyBcIi4vc3JjL3F1ZXN0aW9uZmFjdG9yeS50c1wiKTtcbnZhciBfX2V4dGVuZHMgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xuXG5cblxuLyoqXG4gICogQSBjbGFzcyB0aGF0IGRlc2NyaWJlcyB0aGUgSFRNTCBxdWVzdGlvbiB0eXBlLiBVbmxpa2Ugb3RoZXIgcXVlc3Rpb24gdHlwZXMsIEhUTUwgY2Fubm90IGhhdmUgYSB0aXRsZSBvciB2YWx1ZS5cbiAqXG4gKiBbVmlldyBEZW1vXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9leGFtcGxlcy9xdWVzdGlvbnR5cGUtaHRtbC8gKGxpbmtTdHlsZSkpXG4gKi9cbnZhciBRdWVzdGlvbkh0bWxNb2RlbCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoUXVlc3Rpb25IdG1sTW9kZWwsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gUXVlc3Rpb25IdG1sTW9kZWwobmFtZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBuYW1lKSB8fCB0aGlzO1xuICAgICAgICB2YXIgbG9jSHRtbCA9IF90aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwiaHRtbFwiLCBfdGhpcyk7XG4gICAgICAgIGxvY0h0bWwub25HZXRUZXh0Q2FsbGJhY2sgPSBmdW5jdGlvbiAoc3RyKSB7XG4gICAgICAgICAgICByZXR1cm4gISFfdGhpcy5zdXJ2ZXkgJiYgIV90aGlzLmlnbm9yZUh0bWxQcm9ncmVzc2luZ1xuICAgICAgICAgICAgICAgID8gX3RoaXMucHJvY2Vzc0h0bWwoc3RyKVxuICAgICAgICAgICAgICAgIDogc3RyO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFF1ZXN0aW9uSHRtbE1vZGVsLnByb3RvdHlwZS5nZXRUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gXCJodG1sXCI7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25IdG1sTW9kZWwucHJvdG90eXBlLCBcImlzQ29tcG9zaXRlUXVlc3Rpb25cIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUXVlc3Rpb25IdG1sTW9kZWwucHJvdG90eXBlLmdldFByb2Nlc3NlZFRleHQgPSBmdW5jdGlvbiAodGV4dCkge1xuICAgICAgICBpZiAodGhpcy5pZ25vcmVIdG1sUHJvZ3Jlc3NpbmcpXG4gICAgICAgICAgICByZXR1cm4gdGV4dDtcbiAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUuZ2V0UHJvY2Vzc2VkVGV4dC5jYWxsKHRoaXMsIHRleHQpO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uSHRtbE1vZGVsLnByb3RvdHlwZSwgXCJodG1sXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEhUTUwgbWFya3VwIHRvIGRpc3BsYXkuXG4gICAgICAgICAqXG4gICAgICAgICAqID4gSU1QT1JUQU5UOiBJZiB5b3UgZ2V0IHRoZSBtYXJrdXAgZnJvbSBhIHRoaXJkIHBhcnR5LCBlbnN1cmUgdGhhdCBpdCBkb2VzIG5vdCBjb250YWluIG1hbGljaW91cyBjb2RlLlxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJodG1sXCIsIFwiXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwiaHRtbFwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uSHRtbE1vZGVsLnByb3RvdHlwZSwgXCJsb2NIdG1sXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcImh0bWxcIik7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25IdG1sTW9kZWwucHJvdG90eXBlLCBcInByb2Nlc3NlZEh0bWxcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NIdG1sKHRoaXMuaHRtbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBRdWVzdGlvbkh0bWxNb2RlbC5wcm90b3R5cGUucHJvY2Vzc0h0bWwgPSBmdW5jdGlvbiAoaHRtbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdXJ2ZXkgPyB0aGlzLnN1cnZleS5wcm9jZXNzSHRtbChodG1sLCBcImh0bWwtcXVlc3Rpb25cIikgOiB0aGlzLmh0bWw7XG4gICAgfTtcbiAgICByZXR1cm4gUXVlc3Rpb25IdG1sTW9kZWw7XG59KF9xdWVzdGlvbm5vbnZhbHVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJRdWVzdGlvbk5vblZhbHVlXCJdKSk7XG5cbl9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJTZXJpYWxpemVyXCJdLmFkZENsYXNzKFwiaHRtbFwiLCBbeyBuYW1lOiBcImh0bWw6aHRtbFwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jSHRtbFwiIH1dLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBRdWVzdGlvbkh0bWxNb2RlbChcIlwiKTtcbn0sIFwibm9udmFsdWVcIik7XG5fcXVlc3Rpb25mYWN0b3J5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJRdWVzdGlvbkZhY3RvcnlcIl0uSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImh0bWxcIiwgZnVuY3Rpb24gKG5hbWUpIHtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uSHRtbE1vZGVsKG5hbWUpO1xufSk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvcXVlc3Rpb25faW1hZ2UudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvcXVlc3Rpb25faW1hZ2UudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogUXVlc3Rpb25JbWFnZU1vZGVsICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlF1ZXN0aW9uSW1hZ2VNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFF1ZXN0aW9uSW1hZ2VNb2RlbDsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3F1ZXN0aW9ubm9udmFsdWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcXVlc3Rpb25ub252YWx1ZSAqLyBcIi4vc3JjL3F1ZXN0aW9ubm9udmFsdWUudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vanNvbm9iamVjdCAqLyBcIi4vc3JjL2pzb25vYmplY3QudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3F1ZXN0aW9uZmFjdG9yeV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9xdWVzdGlvbmZhY3RvcnkgKi8gXCIuL3NyYy9xdWVzdGlvbmZhY3RvcnkudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3V0aWxzX2Nzc0NsYXNzQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi91dGlscy9jc3NDbGFzc0J1aWxkZXIgKi8gXCIuL3NyYy91dGlscy9jc3NDbGFzc0J1aWxkZXIudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3V0aWxzX3V0aWxzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3V0aWxzL3V0aWxzICovIFwiLi9zcmMvdXRpbHMvdXRpbHMudHNcIik7XG52YXIgX19leHRlbmRzID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbnZhciBfX2RlY29yYXRlID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn07XG5cblxuXG5cblxudmFyIHlvdXR1YmVUYWdzID0gW1wieW91dHViZS5jb21cIiwgXCJ5b3V0dS5iZVwiXTtcbnZhciB2aWRlb1N1ZmZpY3MgPSBbXCIubXA0XCIsIFwiLm1vdlwiLCBcIi53bXZcIiwgXCIuZmx2XCIsIFwiLmF2aVwiLCBcIi5ta3ZcIl07XG52YXIgeW91dHViZVVybCA9IFwiaHR0cHM6Ly93d3cueW91dHViZS5jb20vXCI7XG52YXIgeW91dHViZUVtYmVkID0gXCJlbWJlZFwiO1xuZnVuY3Rpb24gaXNVcmxZb3V0dWJlVmlkZW8odXJsKSB7XG4gICAgaWYgKCF1cmwpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB1cmwgPSB1cmwudG9Mb3dlckNhc2UoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHlvdXR1YmVUYWdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICh1cmwuaW5kZXhPZih5b3V0dWJlVGFnc1tpXSkgIT09IC0xKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbi8qKlxuICAqIEEgY2xhc3MgdGhhdCBkZXNjcmliZXMgdGhlIEltYWdlIHF1ZXN0aW9uIHR5cGUuIFVubGlrZSBvdGhlciBxdWVzdGlvbiB0eXBlcywgSW1hZ2UgY2Fubm90IGhhdmUgYSB0aXRsZSBvciB2YWx1ZS5cbiAqXG4gKiBbVmlldyBEZW1vXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9leGFtcGxlcy9xdWVzdGlvbnR5cGUtaW1hZ2UvIChsaW5rU3R5bGUpKVxuICovXG52YXIgUXVlc3Rpb25JbWFnZU1vZGVsID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhRdWVzdGlvbkltYWdlTW9kZWwsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gUXVlc3Rpb25JbWFnZU1vZGVsKG5hbWUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbmFtZSkgfHwgdGhpcztcbiAgICAgICAgdmFyIGxvY0ltYWdlTGluayA9IF90aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwiaW1hZ2VMaW5rXCIsIF90aGlzLCBmYWxzZSk7XG4gICAgICAgIGxvY0ltYWdlTGluay5vbkdldFRleHRDYWxsYmFjayA9IGZ1bmN0aW9uICh0ZXh0KSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0Q29ycmVjdEltYWdlTGluayh0ZXh0KTtcbiAgICAgICAgfTtcbiAgICAgICAgX3RoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJhbHRUZXh0XCIsIF90aGlzLCBmYWxzZSk7XG4gICAgICAgIF90aGlzLnJlZ2lzdGVyUHJvcGVydHlDaGFuZ2VkSGFuZGxlcnMoW1wiY29udGVudE1vZGVcIiwgXCJpbWFnZUxpbmtcIl0sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIF90aGlzLmNhbGN1bGF0ZVJlbmRlcmVkTW9kZSgpOyB9KTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBRdWVzdGlvbkltYWdlTW9kZWwucHJvdG90eXBlLmdldFR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBcImltYWdlXCI7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25JbWFnZU1vZGVsLnByb3RvdHlwZSwgXCJpc0NvbXBvc2l0ZVF1ZXN0aW9uXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBRdWVzdGlvbkltYWdlTW9kZWwucHJvdG90eXBlLm9uU3VydmV5TG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5vblN1cnZleUxvYWQuY2FsbCh0aGlzKTtcbiAgICAgICAgdGhpcy5jYWxjdWxhdGVSZW5kZXJlZE1vZGUoKTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbkltYWdlTW9kZWwucHJvdG90eXBlLCBcImltYWdlTGlua1wiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgYW4gaW1hZ2Ugb3IgdmlkZW8gVVJMLlxuICAgICAgICAgKiBAc2VlIGNvbnRlbnRNb2RlXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImltYWdlTGlua1wiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImltYWdlTGlua1wiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uSW1hZ2VNb2RlbC5wcm90b3R5cGUsIFwibG9jSW1hZ2VMaW5rXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcImltYWdlTGlua1wiKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbkltYWdlTW9kZWwucHJvdG90eXBlLCBcImFsdFRleHRcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIGEgdmFsdWUgZm9yIHRoZSBgYWx0YCBhdHRyaWJ1dGUgb2YgdGhlIHVuZGVybHlpbmcgYDxpbWc+YCBlbGVtZW50LlxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJhbHRUZXh0XCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwiYWx0VGV4dFwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uSW1hZ2VNb2RlbC5wcm90b3R5cGUsIFwibG9jQWx0VGV4dFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJhbHRUZXh0XCIpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uSW1hZ2VNb2RlbC5wcm90b3R5cGUsIFwiaW1hZ2VIZWlnaHRcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHRoZSBoZWlnaHQgb2YgYSBjb250YWluZXIgZm9yIHRoZSBpbWFnZSBvciB2aWRlby4gQWNjZXB0cyBwb3NpdGl2ZSBudW1iZXJzIGFuZCBDU1MgdmFsdWVzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBEZWZhdWx0IHZhbHVlOiAxNTBcbiAgICAgICAgICpcbiAgICAgICAgICogVXNlIHRoZSBgaW1hZ2VGaXRgIHByb3BlcnR5IHRvIHNwZWNpZnkgaG93IHRvIGZpdCB0aGUgaW1hZ2Ugb3IgdmlkZW8gaW50byB0aGUgY29udGFpbmVyLlxuICAgICAgICAgKiBAc2VlIGltYWdlV2lkdGhcbiAgICAgICAgICogQHNlZSBpbWFnZUZpdFxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaW1hZ2VIZWlnaHRcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaW1hZ2VIZWlnaHRcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbkltYWdlTW9kZWwucHJvdG90eXBlLCBcInJlbmRlcmVkU3R5bGVIZWlnaHRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmltYWdlSGVpZ2h0ID8gT2JqZWN0KF91dGlsc191dGlsc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fW1wiZ2V0UmVuZGVyZWRTdHlsZVNpemVcIl0pKHRoaXMuaW1hZ2VIZWlnaHQpIDogdW5kZWZpbmVkO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uSW1hZ2VNb2RlbC5wcm90b3R5cGUsIFwicmVuZGVyZWRIZWlnaHRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmltYWdlSGVpZ2h0ID8gT2JqZWN0KF91dGlsc191dGlsc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fW1wiZ2V0UmVuZGVyZWRTaXplXCJdKSh0aGlzLmltYWdlSGVpZ2h0KSA6IHVuZGVmaW5lZDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbkltYWdlTW9kZWwucHJvdG90eXBlLCBcImltYWdlV2lkdGhcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHRoZSB3aWR0aCBvZiBhIGNvbnRhaW5lciBmb3IgdGhlIGltYWdlIG9yIHZpZGVvLiBBY2NlcHRzIHBvc2l0aXZlIG51bWJlcnMgYW5kIENTUyB2YWx1ZXMuXG4gICAgICAgICAqXG4gICAgICAgICAqIERlZmF1bHQgdmFsdWU6IDIwMFxuICAgICAgICAgKlxuICAgICAgICAgKiBVc2UgdGhlIGBpbWFnZUZpdGAgcHJvcGVydHkgdG8gc3BlY2lmeSBob3cgdG8gZml0IHRoZSBpbWFnZSBvciB2aWRlbyBpbnRvIHRoZSBjb250YWluZXIuXG4gICAgICAgICAqIEBzZWUgaW1hZ2VIZWlnaHRcbiAgICAgICAgICogQHNlZSBpbWFnZUZpdFxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaW1hZ2VXaWR0aFwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpbWFnZVdpZHRoXCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25JbWFnZU1vZGVsLnByb3RvdHlwZSwgXCJyZW5kZXJlZFN0eWxlV2lkdGhcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmltYWdlV2lkdGggPyBPYmplY3QoX3V0aWxzX3V0aWxzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bXCJnZXRSZW5kZXJlZFN0eWxlU2l6ZVwiXSkodGhpcy5pbWFnZVdpZHRoKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbkltYWdlTW9kZWwucHJvdG90eXBlLCBcInJlbmRlcmVkV2lkdGhcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmltYWdlV2lkdGggPyBPYmplY3QoX3V0aWxzX3V0aWxzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bXCJnZXRSZW5kZXJlZFNpemVcIl0pKHRoaXMuaW1hZ2VXaWR0aCkgOiB1bmRlZmluZWQ7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25JbWFnZU1vZGVsLnByb3RvdHlwZSwgXCJpbWFnZUZpdFwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgaG93IHRvIHJlc2l6ZSB0aGUgaW1hZ2Ugb3IgdmlkZW8gdG8gZml0IGl0IGludG8gaXRzIGNvbnRhaW5lci5cbiAgICAgICAgICpcbiAgICAgICAgICogUmVmZXIgdG8gdGhlIFtgb2JqZWN0LWZpdGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9vYmplY3QtZml0KSBDU1MgcHJvcGVydHkgZGVzY3JpcHRpb24gZm9yIGluZm9ybWF0aW9uIG9uIGFjY2VwdGVkIHZhbHVlcy5cbiAgICAgICAgICogQHNlZSBpbWFnZUhlaWdodFxuICAgICAgICAgKiBAc2VlIGltYWdlV2lkdGhcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImltYWdlRml0XCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImltYWdlRml0XCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25JbWFnZU1vZGVsLnByb3RvdHlwZSwgXCJjb250ZW50TW9kZVwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgdGhlIHR5cGUgb2YgY29udGVudCB0aGF0IHRoZSBJbWFnZSBxdWVzdGlvbiBkaXNwbGF5cy5cbiAgICAgICAgICpcbiAgICAgICAgICogUG9zc2libGUgdmFsdWVzOlxuICAgICAgICAgKlxuICAgICAgICAgKiAtIGBcImltYWdlXCJgIC0gQW4gaW1hZ2UgaW4gb25lIG9mIHRoZSBmb2xsb3dpbmcgZm9ybWF0czogSlBFRywgR0lGLCBQTkcsIEFQTkcsIFNWRywgQk1QLCBJQ08uXG4gICAgICAgICAqIC0gYFwidmlkZW9cImAgLSBBIHZpZGVvIGluIG9uZSBvZiB0aGUgZm9sbG93aW5nIGZvcm1hdHM6IE1QNCwgTU9WLCBXTVYsIEZMViwgQVZJLCBNS1YuXG4gICAgICAgICAqIC0gYFwieW91dHViZVwiYCAtIEEgbGluayB0byBhIFlvdVR1YmUgdmlkZW8uXG4gICAgICAgICAqIC0gYFwiYXV0b1wiYCAoZGVmYXVsdCkgLSBTZWxlY3RzIG9uZSBvZiB0aGUgYWJvdmUgYmFzZWQgb24gdGhlIFtgaW1hZ2VMaW5rYF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9xdWVzdGlvbmltYWdlbW9kZWwjaW1hZ2VMaW5rKSBwcm9wZXJ0eS5cbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNvbnRlbnRNb2RlXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNvbnRlbnRNb2RlXCIsIHZhbCk7XG4gICAgICAgICAgICBpZiAodmFsID09PSBcInZpZGVvXCIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dMYWJlbCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25JbWFnZU1vZGVsLnByb3RvdHlwZSwgXCJyZW5kZXJlZE1vZGVcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJucyB0aGUgdHlwZSBvZiBjb250ZW50IHRoYXQgdGhlIEltYWdlIHF1ZXN0aW9uIGRpc3BsYXlzOiBgXCJpbWFnZVwiYCwgYFwidmlkZW9cImAsIG9yIGBcInlvdXR1YmVcImAuXG4gICAgICAgICAqIEBzZWUgY29udGVudE1vZGVcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInJlbmRlcmVkTW9kZVwiLCBcImltYWdlXCIpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUXVlc3Rpb25JbWFnZU1vZGVsLnByb3RvdHlwZS5nZXRJbWFnZUNzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGltYWdlSGVpZ2h0UHJvcGVydHkgPSB0aGlzLmdldFByb3BlcnR5QnlOYW1lKFwiaW1hZ2VIZWlnaHRcIik7XG4gICAgICAgIHZhciBpbWFnZVdpZHRoUHJvcGVydHkgPSB0aGlzLmdldFByb3BlcnR5QnlOYW1lKFwiaW1hZ2VXaWR0aFwiKTtcbiAgICAgICAgdmFyIGlzRGVmYXVsdFNpemUgPSBpbWFnZUhlaWdodFByb3BlcnR5LmlzRGVmYXVsdFZhbHVlKHRoaXMuaW1hZ2VIZWlnaHQpICYmIGltYWdlV2lkdGhQcm9wZXJ0eS5pc0RlZmF1bHRWYWx1ZSh0aGlzLmltYWdlV2lkdGgpO1xuICAgICAgICByZXR1cm4gbmV3IF91dGlsc19jc3NDbGFzc0J1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcIkNzc0NsYXNzQnVpbGRlclwiXSgpXG4gICAgICAgICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5pbWFnZSlcbiAgICAgICAgICAgIC5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLmFkYXB0aXZlLCBpc0RlZmF1bHRTaXplKVxuICAgICAgICAgICAgLnRvU3RyaW5nKCk7XG4gICAgfTtcbiAgICBRdWVzdGlvbkltYWdlTW9kZWwucHJvdG90eXBlLm9uTG9hZEhhbmRsZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuY29udGVudE5vdExvYWRlZCA9IGZhbHNlO1xuICAgIH07XG4gICAgUXVlc3Rpb25JbWFnZU1vZGVsLnByb3RvdHlwZS5vbkVycm9ySGFuZGxlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5jb250ZW50Tm90TG9hZGVkID0gdHJ1ZTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uSW1hZ2VNb2RlbC5wcm90b3R5cGUuc2V0UmVuZGVyZWRNb2RlID0gZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJyZW5kZXJlZE1vZGVcIiwgdmFsKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uSW1hZ2VNb2RlbC5wcm90b3R5cGUuY2FsY3VsYXRlUmVuZGVyZWRNb2RlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5jb250ZW50TW9kZSAhPT0gXCJhdXRvXCIpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UmVuZGVyZWRNb2RlKHRoaXMuY29udGVudE1vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNZb3V0dWJlVmlkZW8oKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0UmVuZGVyZWRNb2RlKFwieW91dHViZVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuaXNWaWRlbygpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRSZW5kZXJlZE1vZGUoXCJ2aWRlb1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0UmVuZGVyZWRNb2RlKFwiaW1hZ2VcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFF1ZXN0aW9uSW1hZ2VNb2RlbC5wcm90b3R5cGUuaXNZb3V0dWJlVmlkZW8gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBpc1VybFlvdXR1YmVWaWRlbyh0aGlzLmltYWdlTGluayk7XG4gICAgfTtcbiAgICBRdWVzdGlvbkltYWdlTW9kZWwucHJvdG90eXBlLmlzVmlkZW8gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBsaW5rID0gdGhpcy5pbWFnZUxpbms7XG4gICAgICAgIGlmICghbGluaylcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgbGluayA9IGxpbmsudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aWRlb1N1ZmZpY3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChsaW5rLmVuZHNXaXRoKHZpZGVvU3VmZmljc1tpXSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wicHJvcGVydHlcIl0pKHsgZGVmYXVsdFZhbHVlOiBmYWxzZSB9KVxuICAgIF0sIFF1ZXN0aW9uSW1hZ2VNb2RlbC5wcm90b3R5cGUsIFwiY29udGVudE5vdExvYWRlZFwiLCB2b2lkIDApO1xuICAgIHJldHVybiBRdWVzdGlvbkltYWdlTW9kZWw7XG59KF9xdWVzdGlvbm5vbnZhbHVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJRdWVzdGlvbk5vblZhbHVlXCJdKSk7XG5cbmZ1bmN0aW9uIGdldENvcnJlY3RJbWFnZUxpbmsodmFsKSB7XG4gICAgaWYgKCF2YWwgfHwgIWlzVXJsWW91dHViZVZpZGVvKHZhbCkpXG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgdmFyIHJlcyA9IHZhbC50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgIGlmIChyZXMuaW5kZXhPZih5b3V0dWJlRW1iZWQpID4gLTEpXG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgdmFyIGlkID0gXCJcIjtcbiAgICBmb3IgKHZhciBpID0gdmFsLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIGlmICh2YWxbaV0gPT09IFwiPVwiIHx8IHZhbFtpXSA9PT0gXCIvXCIpXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgaWQgPSB2YWxbaV0gKyBpZDtcbiAgICB9XG4gICAgcmV0dXJuIHlvdXR1YmVVcmwgKyB5b3V0dWJlRW1iZWQgKyBcIi9cIiArIGlkO1xufVxuX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlNlcmlhbGl6ZXJcIl0uYWRkQ2xhc3MoXCJpbWFnZVwiLCBbXG4gICAgeyBuYW1lOiBcImltYWdlTGlua1wiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jSW1hZ2VMaW5rXCIgfSxcbiAgICB7IG5hbWU6IFwiYWx0VGV4dFwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jQWx0VGV4dFwiLCBhbHRlcm5hdGl2ZU5hbWU6IFwidGV4dFwiLCBjYXRlZ29yeTogXCJnZW5lcmFsXCIgfSxcbiAgICB7XG4gICAgICAgIG5hbWU6IFwiY29udGVudE1vZGVcIixcbiAgICAgICAgZGVmYXVsdDogXCJhdXRvXCIsXG4gICAgICAgIGNob2ljZXM6IFtcImF1dG9cIiwgXCJpbWFnZVwiLCBcInZpZGVvXCIsIFwieW91dHViZVwiXSxcbiAgICB9LFxuICAgIHtcbiAgICAgICAgbmFtZTogXCJpbWFnZUZpdFwiLFxuICAgICAgICBkZWZhdWx0OiBcImNvbnRhaW5cIixcbiAgICAgICAgY2hvaWNlczogW1wibm9uZVwiLCBcImNvbnRhaW5cIiwgXCJjb3ZlclwiLCBcImZpbGxcIl0sXG4gICAgfSxcbiAgICB7IG5hbWU6IFwiaW1hZ2VIZWlnaHRcIiwgZGVmYXVsdDogXCIxNTBcIiB9LFxuICAgIHsgbmFtZTogXCJpbWFnZVdpZHRoXCIsIGRlZmF1bHQ6IFwiMjAwXCIgfSxcbl0sIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uSW1hZ2VNb2RlbChcIlwiKTtcbn0sIFwibm9udmFsdWVcIik7XG5fcXVlc3Rpb25mYWN0b3J5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJRdWVzdGlvbkZhY3RvcnlcIl0uSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImltYWdlXCIsIGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgcmV0dXJuIG5ldyBRdWVzdGlvbkltYWdlTW9kZWwobmFtZSk7XG59KTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9xdWVzdGlvbl9pbWFnZXBpY2tlci50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9xdWVzdGlvbl9pbWFnZXBpY2tlci50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBJbWFnZUl0ZW1WYWx1ZSwgUXVlc3Rpb25JbWFnZVBpY2tlck1vZGVsICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkltYWdlSXRlbVZhbHVlXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gSW1hZ2VJdGVtVmFsdWU7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlF1ZXN0aW9uSW1hZ2VQaWNrZXJNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFF1ZXN0aW9uSW1hZ2VQaWNrZXJNb2RlbDsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vanNvbm9iamVjdCAqLyBcIi4vc3JjL2pzb25vYmplY3QudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3F1ZXN0aW9uZmFjdG9yeV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9xdWVzdGlvbmZhY3RvcnkgKi8gXCIuL3NyYy9xdWVzdGlvbmZhY3RvcnkudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3F1ZXN0aW9uX2Jhc2VzZWxlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcXVlc3Rpb25fYmFzZXNlbGVjdCAqLyBcIi4vc3JjL3F1ZXN0aW9uX2Jhc2VzZWxlY3QudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2l0ZW12YWx1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9pdGVtdmFsdWUgKi8gXCIuL3NyYy9pdGVtdmFsdWUudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2hlbHBlcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vaGVscGVycyAqLyBcIi4vc3JjL2hlbHBlcnMudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3V0aWxzX2Nzc0NsYXNzQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi91dGlscy9jc3NDbGFzc0J1aWxkZXIgKi8gXCIuL3NyYy91dGlscy9jc3NDbGFzc0J1aWxkZXIudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NldHRpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3NldHRpbmdzICovIFwiLi9zcmMvc2V0dGluZ3MudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3V0aWxzX3V0aWxzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3V0aWxzL3V0aWxzICovIFwiLi9zcmMvdXRpbHMvdXRpbHMudHNcIik7XG52YXIgX19leHRlbmRzID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbnZhciBfX2RlY29yYXRlID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn07XG5cblxuXG5cblxuXG5cblxudmFyIEltYWdlSXRlbVZhbHVlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhJbWFnZUl0ZW1WYWx1ZSwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBJbWFnZUl0ZW1WYWx1ZSh2YWx1ZSwgdGV4dCwgdHlwZU5hbWUpIHtcbiAgICAgICAgaWYgKHRleHQgPT09IHZvaWQgMCkgeyB0ZXh0ID0gbnVsbDsgfVxuICAgICAgICBpZiAodHlwZU5hbWUgPT09IHZvaWQgMCkgeyB0eXBlTmFtZSA9IFwiaW1hZ2VpdGVtdmFsdWVcIjsgfVxuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCB2YWx1ZSwgdGV4dCwgdHlwZU5hbWUpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLnR5cGVOYW1lID0gdHlwZU5hbWU7XG4gICAgICAgIF90aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwiaW1hZ2VMaW5rXCIsIF90aGlzLCBmYWxzZSk7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgSW1hZ2VJdGVtVmFsdWUucHJvdG90eXBlLmdldFR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMudHlwZU5hbWUgPyB0aGlzLnR5cGVOYW1lIDogXCJpdGVtdmFsdWVcIjtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJbWFnZUl0ZW1WYWx1ZS5wcm90b3R5cGUsIFwiaW1hZ2VMaW5rXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSBpbWFnZSBvciB2aWRlbyBsaW5rIHByb3BlcnR5LlxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJpbWFnZUxpbmtcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJpbWFnZUxpbmtcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJbWFnZUl0ZW1WYWx1ZS5wcm90b3R5cGUsIFwibG9jSW1hZ2VMaW5rXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcImltYWdlTGlua1wiKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIEltYWdlSXRlbVZhbHVlLnByb3RvdHlwZS5nZXRMb2NhbGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMubG9jT3duZXIgPyB0aGlzLmxvY093bmVyLmdldExvY2FsZSgpIDogXCJcIjtcbiAgICB9O1xuICAgIEltYWdlSXRlbVZhbHVlLnByb3RvdHlwZS5nZXRNYXJrZG93bkh0bWwgPSBmdW5jdGlvbiAodGV4dCwgbmFtZSkge1xuICAgICAgICByZXR1cm4gISF0aGlzLmxvY093bmVyID8gdGhpcy5sb2NPd25lci5nZXRNYXJrZG93bkh0bWwodGV4dCwgbmFtZSkgOiB1bmRlZmluZWQ7XG4gICAgfTtcbiAgICBJbWFnZUl0ZW1WYWx1ZS5wcm90b3R5cGUuZ2V0UmVuZGVyZXIgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICByZXR1cm4gISF0aGlzLmxvY093bmVyID8gdGhpcy5sb2NPd25lci5nZXRSZW5kZXJlcihuYW1lKSA6IG51bGw7XG4gICAgfTtcbiAgICBJbWFnZUl0ZW1WYWx1ZS5wcm90b3R5cGUuZ2V0UmVuZGVyZXJDb250ZXh0ID0gZnVuY3Rpb24gKGxvY1N0cikge1xuICAgICAgICByZXR1cm4gISF0aGlzLmxvY093bmVyID8gdGhpcy5sb2NPd25lci5nZXRSZW5kZXJlckNvbnRleHQobG9jU3RyKSA6IGxvY1N0cjtcbiAgICB9O1xuICAgIEltYWdlSXRlbVZhbHVlLnByb3RvdHlwZS5nZXRQcm9jZXNzZWRUZXh0ID0gZnVuY3Rpb24gKHRleHQpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5sb2NPd25lciA/IHRoaXMubG9jT3duZXIuZ2V0UHJvY2Vzc2VkVGV4dCh0ZXh0KSA6IHRleHQ7XG4gICAgfTtcbiAgICBJbWFnZUl0ZW1WYWx1ZS5wcm90b3R5cGUub25FcnJvckhhbmRsZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuY29udGVudE5vdExvYWRlZCA9IHRydWU7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSW1hZ2VJdGVtVmFsdWUucHJvdG90eXBlLCBcImNvbnRlbnROb3RMb2FkZWRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY093bmVyIGluc3RhbmNlb2YgUXVlc3Rpb25JbWFnZVBpY2tlck1vZGVsICYmIHRoaXMubG9jT3duZXIuY29udGVudE1vZGUgPT0gXCJ2aWRlb1wiID8gdGhpcy52aWRlb05vdExvYWRlZCA6IHRoaXMuaW1hZ2VOb3RMb2FkZWQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgaWYgKHRoaXMubG9jT3duZXIgaW5zdGFuY2VvZiBRdWVzdGlvbkltYWdlUGlja2VyTW9kZWwgJiYgdGhpcy5sb2NPd25lci5jb250ZW50TW9kZSA9PSBcInZpZGVvXCIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZpZGVvTm90TG9hZGVkID0gdmFsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbWFnZU5vdExvYWRlZCA9IHZhbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QoX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInByb3BlcnR5XCJdKSh7IGRlZmF1bHRWYWx1ZTogZmFsc2UgfSlcbiAgICBdLCBJbWFnZUl0ZW1WYWx1ZS5wcm90b3R5cGUsIFwidmlkZW9Ob3RMb2FkZWRcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJwcm9wZXJ0eVwiXSkoeyBkZWZhdWx0VmFsdWU6IGZhbHNlIH0pXG4gICAgXSwgSW1hZ2VJdGVtVmFsdWUucHJvdG90eXBlLCBcImltYWdlTm90TG9hZGVkXCIsIHZvaWQgMCk7XG4gICAgcmV0dXJuIEltYWdlSXRlbVZhbHVlO1xufShfaXRlbXZhbHVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJJdGVtVmFsdWVcIl0pKTtcblxuLyoqXG4gICogQSBjbGFzcyB0aGF0IGRlc2NyaWJlcyB0aGUgSW1hZ2UgUGlja2VyIHF1ZXN0aW9uIHR5cGUuXG4gKlxuICogW1ZpZXcgRGVtb10oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZXhhbXBsZXMvaW1hZ2UtcGlja2VyLXF1ZXN0aW9uLyAobGlua1N0eWxlKSlcbiAqL1xudmFyIFF1ZXN0aW9uSW1hZ2VQaWNrZXJNb2RlbCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoUXVlc3Rpb25JbWFnZVBpY2tlck1vZGVsLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFF1ZXN0aW9uSW1hZ2VQaWNrZXJNb2RlbChuYW1lKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG5hbWUpIHx8IHRoaXM7XG4gICAgICAgIC8vcmVzcG9uc2l2ZSBtb2RlXG4gICAgICAgIF90aGlzLmlzUmVzcG9uc2l2ZVZhbHVlID0gZmFsc2U7XG4gICAgICAgIF90aGlzLm9uQ29udGVudExvYWRlZCA9IGZ1bmN0aW9uIChpdGVtLCBldmVudCkge1xuICAgICAgICAgICAgaXRlbS5jb250ZW50Tm90TG9hZGVkID0gZmFsc2U7XG4gICAgICAgICAgICB2YXIgY29udGVudCA9IGV2ZW50LnRhcmdldDtcbiAgICAgICAgICAgIGlmIChfdGhpcy5jb250ZW50TW9kZSA9PSBcInZpZGVvXCIpIHtcbiAgICAgICAgICAgICAgICBpdGVtW1wiYXNwZWN0UmF0aW9cIl0gPSBjb250ZW50LnZpZGVvV2lkdGggLyBjb250ZW50LnZpZGVvSGVpZ2h0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaXRlbVtcImFzcGVjdFJhdGlvXCJdID0gY29udGVudC5uYXR1cmFsV2lkdGggLyBjb250ZW50Lm5hdHVyYWxIZWlnaHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBfdGhpcy5fd2lkdGggJiYgX3RoaXMucHJvY2Vzc1Jlc3BvbnNpdmVuZXNzKDAsIF90aGlzLl93aWR0aCk7XG4gICAgICAgIH07XG4gICAgICAgIF90aGlzLmNvbENvdW50ID0gMDtcbiAgICAgICAgX3RoaXMucmVnaXN0ZXJQcm9wZXJ0eUNoYW5nZWRIYW5kbGVycyhbXCJtaW5JbWFnZVdpZHRoXCIsIFwibWF4SW1hZ2VXaWR0aFwiLCBcIm1pbkltYWdlSGVpZ2h0XCIsIFwibWF4SW1hZ2VIZWlnaHRcIiwgXCJ2aXNpYmxlQ2hvaWNlc1wiLCBcImNvbENvdW50XCIsIFwiaXNSZXNwb25zaXZlVmFsdWVcIl0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghIV90aGlzLl93aWR0aCkge1xuICAgICAgICAgICAgICAgIF90aGlzLnByb2Nlc3NSZXNwb25zaXZlbmVzcygwLCBfdGhpcy5fd2lkdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgX3RoaXMucmVnaXN0ZXJQcm9wZXJ0eUNoYW5nZWRIYW5kbGVycyhbXCJpbWFnZVdpZHRoXCIsIFwiaW1hZ2VIZWlnaHRcIl0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLmNhbGNJc1Jlc3BvbnNpdmUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIF90aGlzLmNhbGNJc1Jlc3BvbnNpdmUoKTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBRdWVzdGlvbkltYWdlUGlja2VyTW9kZWwucHJvdG90eXBlLmdldFR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBcImltYWdlcGlja2VyXCI7XG4gICAgfTtcbiAgICBRdWVzdGlvbkltYWdlUGlja2VyTW9kZWwucHJvdG90eXBlLnN1cHBvcnRHb05leHRQYWdlQXV0b21hdGljID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gIXRoaXMubXVsdGlTZWxlY3Q7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25JbWFnZVBpY2tlck1vZGVsLnByb3RvdHlwZSwgXCJoYXNTaW5nbGVJbnB1dFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUXVlc3Rpb25JbWFnZVBpY2tlck1vZGVsLnByb3RvdHlwZS5nZXRJdGVtVmFsdWVUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gXCJpbWFnZWl0ZW12YWx1ZVwiO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uSW1hZ2VQaWNrZXJNb2RlbC5wcm90b3R5cGUsIFwiaXNDb21wb3NpdGVRdWVzdGlvblwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBRdWVzdGlvbkltYWdlUGlja2VyTW9kZWwucHJvdG90eXBlLnN1cHBvcnRPdGhlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gICAgUXVlc3Rpb25JbWFnZVBpY2tlck1vZGVsLnByb3RvdHlwZS5zdXBwb3J0Tm9uZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gICAgUXVlc3Rpb25JbWFnZVBpY2tlck1vZGVsLnByb3RvdHlwZS5pc0Fuc3dlckNvcnJlY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5tdWx0aVNlbGVjdClcbiAgICAgICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLmlzQW5zd2VyQ29ycmVjdC5jYWxsKHRoaXMpO1xuICAgICAgICByZXR1cm4gX2hlbHBlcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1tcIkhlbHBlcnNcIl0uaXNBcnJheUNvbnRhaW5zRXF1YWwodGhpcy52YWx1ZSwgdGhpcy5jb3JyZWN0QW5zd2VyKTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbkltYWdlUGlja2VyTW9kZWwucHJvdG90eXBlLCBcIm11bHRpU2VsZWN0XCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB3aGV0aGVyIHVzZXJzIGNhbiBzZWxlY3QgbXVsdGlwbGUgaW1hZ2VzIG9yIHZpZGVvcy5cbiAgICAgICAgICpcbiAgICAgICAgICogRGVmYXVsdCB2YWx1ZTogYGZhbHNlYFxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibXVsdGlTZWxlY3RcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKG5ld1ZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJtdWx0aVNlbGVjdFwiLCBuZXdWYWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBRdWVzdGlvbkltYWdlUGlja2VyTW9kZWwucHJvdG90eXBlLmlzSXRlbVNlbGVjdGVkID0gZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgdmFyIHZhbCA9IHRoaXMudmFsdWU7XG4gICAgICAgIHZhciBpbWFnZUl0ZW1WYWx1ZSA9IGl0ZW07XG4gICAgICAgIGlmICh0aGlzLmlzVmFsdWVFbXB0eSh2YWwpKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoIWltYWdlSXRlbVZhbHVlLmltYWdlTGluayB8fCBpbWFnZUl0ZW1WYWx1ZS5jb250ZW50Tm90TG9hZGVkKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoIXRoaXMubXVsdGlTZWxlY3QpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pc1R3b1ZhbHVlRXF1YWxzKHZhbCwgaXRlbS52YWx1ZSk7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWwpKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNUd29WYWx1ZUVxdWFscyh2YWxbaV0sIGl0ZW0udmFsdWUpKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uSW1hZ2VQaWNrZXJNb2RlbC5wcm90b3R5cGUuZ2V0SXRlbUVuYWJsZWQgPSBmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICB2YXIgaW1hZ2VJdGVtVmFsdWUgPSBpdGVtO1xuICAgICAgICBpZiAoIWltYWdlSXRlbVZhbHVlLmltYWdlTGluayB8fCBpbWFnZUl0ZW1WYWx1ZS5jb250ZW50Tm90TG9hZGVkKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5nZXRJdGVtRW5hYmxlZC5jYWxsKHRoaXMsIGl0ZW0pO1xuICAgIH07XG4gICAgUXVlc3Rpb25JbWFnZVBpY2tlck1vZGVsLnByb3RvdHlwZS5jbGVhckluY29ycmVjdFZhbHVlcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMubXVsdGlTZWxlY3QpIHtcbiAgICAgICAgICAgIHZhciB2YWwgPSB0aGlzLnZhbHVlO1xuICAgICAgICAgICAgaWYgKCF2YWwpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbCkgfHwgdmFsLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhclZhbHVlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIG5ld1ZhbHVlID0gW107XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5oYXNVbmtub3duVmFsdWUodmFsW2ldLCB0cnVlKSkge1xuICAgICAgICAgICAgICAgICAgICBuZXdWYWx1ZS5wdXNoKHZhbFtpXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5ld1ZhbHVlLmxlbmd0aCA9PSB2YWwubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGlmIChuZXdWYWx1ZS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJWYWx1ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5jbGVhckluY29ycmVjdFZhbHVlcy5jYWxsKHRoaXMpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBRdWVzdGlvbkltYWdlUGlja2VyTW9kZWwucHJvdG90eXBlLmdldERpc3BsYXlWYWx1ZUNvcmUgPSBmdW5jdGlvbiAoa2V5c0FzVGV4dCwgdmFsdWUpIHtcbiAgICAgICAgaWYgKCF0aGlzLm11bHRpU2VsZWN0ICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSlcbiAgICAgICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLmdldERpc3BsYXlWYWx1ZUNvcmUuY2FsbCh0aGlzLCBrZXlzQXNUZXh0LCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzLmdldERpc3BsYXlBcnJheVZhbHVlKGtleXNBc1RleHQsIHZhbHVlKTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbkltYWdlUGlja2VyTW9kZWwucHJvdG90eXBlLCBcInNob3dMYWJlbFwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgd2hldGhlciB0byBkaXNwbGF5IGxhYmVscyB1bmRlciBpbWFnZXMgb3IgdmlkZW9zLiBMYWJlbHMgdGV4dCBhcmUgdGFrZW4gZnJvbSB0aGUgYHRleHRgIHByb3BlcnR5IG9mIGVhY2ggb2JqZWN0IGluIHRoZSBgY2hvaWNlc2AgYXJyYXkuXG4gICAgICAgICAqIEBzZWUgY2hvaWNlc1xuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic2hvd0xhYmVsXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChuZXdWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwic2hvd0xhYmVsXCIsIG5ld1ZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFF1ZXN0aW9uSW1hZ2VQaWNrZXJNb2RlbC5wcm90b3R5cGUuZW5kTG9hZGluZ0Zyb21Kc29uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBfc3VwZXIucHJvdG90eXBlLmVuZExvYWRpbmdGcm9tSnNvbi5jYWxsKHRoaXMpO1xuICAgICAgICBpZiAoIXRoaXMuaXNEZXNpZ25Nb2RlICYmIHRoaXMubXVsdGlTZWxlY3QpIHtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlTmV3QXJyYXkoXCJyZW5kZXJlZFZhbHVlXCIpO1xuICAgICAgICAgICAgdGhpcy5jcmVhdGVOZXdBcnJheShcInZhbHVlXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2FsY0lzUmVzcG9uc2l2ZSgpO1xuICAgIH07XG4gICAgUXVlc3Rpb25JbWFnZVBpY2tlck1vZGVsLnByb3RvdHlwZS5nZXRWYWx1ZUNvcmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IF9zdXBlci5wcm90b3R5cGUuZ2V0VmFsdWVDb3JlLmNhbGwodGhpcyk7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubXVsdGlTZWxlY3QpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfTtcbiAgICBRdWVzdGlvbkltYWdlUGlja2VyTW9kZWwucHJvdG90eXBlLmNvbnZlcnRWYWxUb0FycmF5Rm9yTXVsdFNlbGVjdCA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgaWYgKCF0aGlzLm11bHRpU2VsZWN0KVxuICAgICAgICAgICAgcmV0dXJuIHZhbDtcbiAgICAgICAgaWYgKHRoaXMuaXNWYWx1ZUVtcHR5KHZhbCkgfHwgQXJyYXkuaXNBcnJheSh2YWwpKVxuICAgICAgICAgICAgcmV0dXJuIHZhbDtcbiAgICAgICAgcmV0dXJuIFt2YWxdO1xuICAgIH07XG4gICAgUXVlc3Rpb25JbWFnZVBpY2tlck1vZGVsLnByb3RvdHlwZS5yZW5kZXJlZFZhbHVlRnJvbURhdGFDb3JlID0gZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb252ZXJ0VmFsVG9BcnJheUZvck11bHRTZWxlY3QodmFsKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uSW1hZ2VQaWNrZXJNb2RlbC5wcm90b3R5cGUucmVuZHJlZFZhbHVlVG9EYXRhQ29yZSA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udmVydFZhbFRvQXJyYXlGb3JNdWx0U2VsZWN0KHZhbCk7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25JbWFnZVBpY2tlck1vZGVsLnByb3RvdHlwZSwgXCJpbWFnZUhlaWdodFwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgdGhlIGhlaWdodCBvZiBjb250YWluZXJzIGZvciBpbWFnZXMgb3IgdmlkZW9zLiBBY2NlcHRzIHBvc2l0aXZlIG51bWJlcnMgYW5kIENTUyB2YWx1ZXMuXG4gICAgICAgICAqXG4gICAgICAgICAqIERlZmF1bHQgdmFsdWU6IHVuZGVmaW5lZFxuICAgICAgICAgKlxuICAgICAgICAgKiBVc2UgdGhlIGBpbWFnZUZpdGAgcHJvcGVydHkgdG8gc3BlY2lmeSBob3cgdG8gZml0IHRoZSBpbWFnZXMgb3IgdmlkZW9zIGludG8gdGhlaXIgY29udGFpbmVycy5cbiAgICAgICAgICogQHNlZSBpbWFnZVdpZHRoXG4gICAgICAgICAqIEBzZWUgaW1hZ2VGaXRcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImltYWdlSGVpZ2h0XCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImltYWdlSGVpZ2h0XCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25JbWFnZVBpY2tlck1vZGVsLnByb3RvdHlwZSwgXCJyZW5kZXJlZEltYWdlSGVpZ2h0XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gdGhpcy5pc1Jlc3BvbnNpdmUgPyBNYXRoLmZsb29yKHRoaXMucmVzcG9uc2l2ZUltYWdlSGVpZ2h0KSA6IHRoaXMuaW1hZ2VIZWlnaHQ7XG4gICAgICAgICAgICByZXR1cm4gKGhlaWdodCA/IGhlaWdodCA6IDE1MCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25JbWFnZVBpY2tlck1vZGVsLnByb3RvdHlwZSwgXCJpbWFnZVdpZHRoXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB0aGUgd2lkdGggb2YgY29udGFpbmVycyBmb3IgaW1hZ2VzIG9yIHZpZGVvcy4gQWNjZXB0cyBwb3NpdGl2ZSBudW1iZXJzIGFuZCBDU1MgdmFsdWVzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBEZWZhdWx0IHZhbHVlOiAyMDBcbiAgICAgICAgICpcbiAgICAgICAgICogVXNlIHRoZSBgaW1hZ2VGaXRgIHByb3BlcnR5IHRvIHNwZWNpZnkgaG93IHRvIGZpdCB0aGUgaW1hZ2VzIG9yIHZpZGVvcyBpbnRvIHRoZWlyIGNvbnRhaW5lcnMuXG4gICAgICAgICAqIEBzZWUgaW1hZ2VIZWlnaHRcbiAgICAgICAgICogQHNlZSBpbWFnZUZpdFxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaW1hZ2VXaWR0aFwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpbWFnZVdpZHRoXCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25JbWFnZVBpY2tlck1vZGVsLnByb3RvdHlwZSwgXCJyZW5kZXJlZEltYWdlV2lkdGhcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB3aWR0aCA9IHRoaXMuaXNSZXNwb25zaXZlID8gTWF0aC5mbG9vcih0aGlzLnJlc3BvbnNpdmVJbWFnZVdpZHRoKSA6IHRoaXMuaW1hZ2VXaWR0aDtcbiAgICAgICAgICAgIHJldHVybiAod2lkdGggPyB3aWR0aCA6IDIwMCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25JbWFnZVBpY2tlck1vZGVsLnByb3RvdHlwZSwgXCJpbWFnZUZpdFwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgaG93IHRvIHJlc2l6ZSBpbWFnZXMgb3IgdmlkZW9zIHRvIGZpdCB0aGVtIGludG8gdGhlaXIgY29udGFpbmVycy5cbiAgICAgICAgICpcbiAgICAgICAgICogUmVmZXIgdG8gdGhlIFtgb2JqZWN0LWZpdGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9vYmplY3QtZml0KSBDU1MgcHJvcGVydHkgZGVzY3JpcHRpb24gZm9yIGluZm9ybWF0aW9uIG9uIGFjY2VwdGVkIHZhbHVlcy5cbiAgICAgICAgICogQHNlZSBpbWFnZUhlaWdodFxuICAgICAgICAgKiBAc2VlIGltYWdlV2lkdGhcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImltYWdlRml0XCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImltYWdlRml0XCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25JbWFnZVBpY2tlck1vZGVsLnByb3RvdHlwZSwgXCJjb250ZW50TW9kZVwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgdGhlIHR5cGUgb2YgY29udGVudCB0aGF0IGNob2ljZSBpdGVtcyBkaXNwbGF5LlxuICAgICAgICAgKlxuICAgICAgICAgKiBQb3NzaWJsZSB2YWx1ZXM6XG4gICAgICAgICAqXG4gICAgICAgICAqIC0gYFwiaW1hZ2VcImAgLSBJbWFnZXMgaW4gb25lIG9mIHRoZSBmb2xsb3dpbmcgZm9ybWF0czogSlBFRywgR0lGLCBQTkcsIEFQTkcsIFNWRywgQk1QLCBJQ08uXG4gICAgICAgICAqIC0gYFwidmlkZW9cImAgLSBWaWRlb3MgaW4gb25lIG9mIHRoZSBmb2xsb3dpbmcgZm9ybWF0czogTVA0LCBNT1YsIFdNViwgRkxWLCBBVkksIE1LVi5cbiAgICAgICAgICogLSBgXCJ5b3V0dWJlXCJgIC0gTGlua3MgdG8gWW91VHViZSB2aWRlb3MuXG4gICAgICAgICAqIC0gYFwiYXV0b1wiYCAoZGVmYXVsdCkgLSBTZWxlY3RzIG9uZSBvZiB0aGUgYWJvdmUgYmFzZWQgb24gdGhlIGBpbWFnZUxpbmtgIHByb3BlcnR5IHZhbHVlIG9mIGVhY2ggY2hvaWNlIGl0ZW0uXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjb250ZW50TW9kZVwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjb250ZW50TW9kZVwiLCB2YWwpO1xuICAgICAgICAgICAgaWYgKHZhbCA9PT0gXCJ2aWRlb1wiKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93TGFiZWwgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUXVlc3Rpb25JbWFnZVBpY2tlck1vZGVsLnByb3RvdHlwZS5jb252ZXJ0RGVmYXVsdFZhbHVlID0gZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uSW1hZ2VQaWNrZXJNb2RlbC5wcm90b3R5cGUsIFwiaW5wdXRUeXBlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tdWx0aVNlbGVjdCA/IFwiY2hlY2tib3hcIiA6IFwicmFkaW9cIjtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFF1ZXN0aW9uSW1hZ2VQaWNrZXJNb2RlbC5wcm90b3R5cGUuaXNGb290Q2hvaWNlID0gZnVuY3Rpb24gKF9pdGVtLCBfcXVlc3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gICAgUXVlc3Rpb25JbWFnZVBpY2tlck1vZGVsLnByb3RvdHlwZS5nZXRTZWxlY3RCYXNlUm9vdENzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBfdXRpbHNfY3NzQ2xhc3NCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bXCJDc3NDbGFzc0J1aWxkZXJcIl0oKS5hcHBlbmQoX3N1cGVyLnByb3RvdHlwZS5nZXRTZWxlY3RCYXNlUm9vdENzcy5jYWxsKHRoaXMpKS5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLnJvb3RDb2x1bW4sIHRoaXMuZ2V0Q3VycmVudENvbENvdW50KCkgPT0gMSkudG9TdHJpbmcoKTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbkltYWdlUGlja2VyTW9kZWwucHJvdG90eXBlLCBcImlzUmVzcG9uc2l2ZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNSZXNwb25zaXZlVmFsdWUgJiYgdGhpcy5pc0RlZmF1bHRWMlRoZW1lO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uSW1hZ2VQaWNrZXJNb2RlbC5wcm90b3R5cGUsIFwiZXhhY3RTaXplc0FyZUVtcHR5XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICAgICAgcmV0dXJuICEoW1wiaW1hZ2VIZWlnaHRcIiwgXCJpbWFnZVdpZHRoXCJdLnNvbWUoZnVuY3Rpb24gKHByb3BOYW1lKSB7IHJldHVybiBfdGhpc1twcm9wTmFtZV0gIT09IHVuZGVmaW5lZCAmJiBfdGhpc1twcm9wTmFtZV0gIT09IG51bGw7IH0pKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFF1ZXN0aW9uSW1hZ2VQaWNrZXJNb2RlbC5wcm90b3R5cGUuY2FsY0lzUmVzcG9uc2l2ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5pc1Jlc3BvbnNpdmVWYWx1ZSA9IHRoaXMuZXhhY3RTaXplc0FyZUVtcHR5O1xuICAgIH07XG4gICAgUXVlc3Rpb25JbWFnZVBpY2tlck1vZGVsLnByb3RvdHlwZS5nZXRPYnNlcnZlZEVsZW1lbnRTZWxlY3RvciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdChfdXRpbHNfdXRpbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1tcImNsYXNzZXNUb1NlbGVjdG9yXCJdKSh0aGlzLmNzc0NsYXNzZXMucm9vdCk7XG4gICAgfTtcbiAgICBRdWVzdGlvbkltYWdlUGlja2VyTW9kZWwucHJvdG90eXBlLnN1cHBvcnRSZXNwb25zaXZlbmVzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgICBRdWVzdGlvbkltYWdlUGlja2VyTW9kZWwucHJvdG90eXBlLm5lZWRSZXNwb25zaXZlbmVzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3VwcG9ydFJlc3BvbnNpdmVuZXNzKCkgJiYgdGhpcy5pc0RlZmF1bHRWMlRoZW1lO1xuICAgIH07XG4gICAgUXVlc3Rpb25JbWFnZVBpY2tlck1vZGVsLnByb3RvdHlwZS5nZXRDdXJyZW50Q29sQ291bnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLnJlc3BvbnNpdmVDb2xDb3VudCA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuY29sQ291bnQgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbENvdW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnJlc3BvbnNpdmVDb2xDb3VudDtcbiAgICB9O1xuICAgIFF1ZXN0aW9uSW1hZ2VQaWNrZXJNb2RlbC5wcm90b3R5cGUucHJvY2Vzc1Jlc3BvbnNpdmVuZXNzID0gZnVuY3Rpb24gKF8sIGF2YWlsYWJsZVdpZHRoKSB7XG4gICAgICAgIHRoaXMuX3dpZHRoID0gYXZhaWxhYmxlV2lkdGggPSBNYXRoLmZsb29yKGF2YWlsYWJsZVdpZHRoKTtcbiAgICAgICAgdmFyIGNhbGNBdmFpbGFibGVDb2x1bW5zQ291bnQgPSBmdW5jdGlvbiAoYXZhaWxhYmxlV2lkdGgsIG1pbldpZHRoLCBnYXApIHtcbiAgICAgICAgICAgIHZhciBpdGVtc0luUm93ID0gTWF0aC5mbG9vcihhdmFpbGFibGVXaWR0aCAvIChtaW5XaWR0aCArIGdhcCkpO1xuICAgICAgICAgICAgaWYgKChpdGVtc0luUm93ICsgMSkgKiAobWluV2lkdGggKyBnYXApIC0gZ2FwIDw9IGF2YWlsYWJsZVdpZHRoKVxuICAgICAgICAgICAgICAgIGl0ZW1zSW5Sb3crKztcbiAgICAgICAgICAgIHJldHVybiBpdGVtc0luUm93O1xuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy5pc1Jlc3BvbnNpdmUpIHtcbiAgICAgICAgICAgIHZhciBpdGVtc0NvdW50ID0gdGhpcy5jaG9pY2VzLmxlbmd0aCArICh0aGlzLmlzRGVzaWduTW9kZSA/IDEgOiAwKTtcbiAgICAgICAgICAgIHZhciBnYXAgPSB0aGlzLmdhcEJldHdlZW5JdGVtcyB8fCAwO1xuICAgICAgICAgICAgdmFyIG1pbldpZHRoID0gdGhpcy5taW5JbWFnZVdpZHRoO1xuICAgICAgICAgICAgdmFyIG1heFdpZHRoID0gdGhpcy5tYXhJbWFnZVdpZHRoO1xuICAgICAgICAgICAgdmFyIG1heEhlaWdodCA9IHRoaXMubWF4SW1hZ2VIZWlnaHQ7XG4gICAgICAgICAgICB2YXIgbWluSGVpZ2h0ID0gdGhpcy5taW5JbWFnZUhlaWdodDtcbiAgICAgICAgICAgIHZhciBjb2xDb3VudCA9IHRoaXMuY29sQ291bnQ7XG4gICAgICAgICAgICB2YXIgd2lkdGhfMTtcbiAgICAgICAgICAgIGlmIChjb2xDb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGlmICgoZ2FwICsgbWluV2lkdGgpICogaXRlbXNDb3VudCAtIGdhcCA+IGF2YWlsYWJsZVdpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpdGVtc0luUm93ID0gY2FsY0F2YWlsYWJsZUNvbHVtbnNDb3VudChhdmFpbGFibGVXaWR0aCwgbWluV2lkdGgsIGdhcCk7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoXzEgPSBNYXRoLmZsb29yKChhdmFpbGFibGVXaWR0aCAtIGdhcCAqIChpdGVtc0luUm93IC0gMSkpIC8gaXRlbXNJblJvdyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB3aWR0aF8xID0gTWF0aC5mbG9vcigoKGF2YWlsYWJsZVdpZHRoIC0gZ2FwICogKGl0ZW1zQ291bnQgLSAxKSkgLyBpdGVtc0NvdW50KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIGF2YWlsYWJsZUNvbHVtbnNDb3VudCA9IGNhbGNBdmFpbGFibGVDb2x1bW5zQ291bnQoYXZhaWxhYmxlV2lkdGgsIG1pbldpZHRoLCBnYXApO1xuICAgICAgICAgICAgICAgIGlmIChhdmFpbGFibGVDb2x1bW5zQ291bnQgPCBjb2xDb3VudCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3BvbnNpdmVDb2xDb3VudCA9IGF2YWlsYWJsZUNvbHVtbnNDb3VudCA+PSAxID8gYXZhaWxhYmxlQ29sdW1uc0NvdW50IDogMTtcbiAgICAgICAgICAgICAgICAgICAgY29sQ291bnQgPSB0aGlzLnJlc3BvbnNpdmVDb2xDb3VudDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzcG9uc2l2ZUNvbENvdW50ID0gY29sQ291bnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHdpZHRoXzEgPSBNYXRoLmZsb29yKChhdmFpbGFibGVXaWR0aCAtIGdhcCAqIChjb2xDb3VudCAtIDEpKSAvIGNvbENvdW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdpZHRoXzEgPSBNYXRoLm1heChtaW5XaWR0aCwgTWF0aC5taW4od2lkdGhfMSwgbWF4V2lkdGgpKTtcbiAgICAgICAgICAgIHZhciBoZWlnaHRfMSA9IE51bWJlci5NSU5fVkFMVUU7XG4gICAgICAgICAgICB0aGlzLmNob2ljZXMuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgICAgICAgIHZhciB0ZW1wSGVpZ2h0ID0gd2lkdGhfMSAvIGl0ZW1bXCJhc3BlY3RSYXRpb1wiXTtcbiAgICAgICAgICAgICAgICBoZWlnaHRfMSA9IHRlbXBIZWlnaHQgPiBoZWlnaHRfMSA/IHRlbXBIZWlnaHQgOiBoZWlnaHRfMTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGhlaWdodF8xID4gbWF4SGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgaGVpZ2h0XzEgPSBtYXhIZWlnaHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChoZWlnaHRfMSA8IG1pbkhlaWdodCkge1xuICAgICAgICAgICAgICAgIGhlaWdodF8xID0gbWluSGVpZ2h0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIG9sZFJlc3BvbnNpdmVJbWFnZVdpZHRoID0gdGhpcy5yZXNwb25zaXZlSW1hZ2VXaWR0aDtcbiAgICAgICAgICAgIHZhciBvbGRSZXNwb25zaXZlSW1hZ2VIZWlnaHQgPSB0aGlzLnJlc3BvbnNpdmVJbWFnZUhlaWdodDtcbiAgICAgICAgICAgIHRoaXMucmVzcG9uc2l2ZUltYWdlV2lkdGggPSB3aWR0aF8xO1xuICAgICAgICAgICAgdGhpcy5yZXNwb25zaXZlSW1hZ2VIZWlnaHQgPSBoZWlnaHRfMTtcbiAgICAgICAgICAgIHJldHVybiBvbGRSZXNwb25zaXZlSW1hZ2VXaWR0aCAhPT0gdGhpcy5yZXNwb25zaXZlSW1hZ2VXaWR0aCB8fCBvbGRSZXNwb25zaXZlSW1hZ2VIZWlnaHQgIT09IHRoaXMucmVzcG9uc2l2ZUltYWdlSGVpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uSW1hZ2VQaWNrZXJNb2RlbC5wcm90b3R5cGUudHJpZ2dlclJlc3BvbnNpdmVuZXNzID0gZnVuY3Rpb24gKGhhcmQpIHtcbiAgICAgICAgaWYgKGhhcmQgPT09IHZvaWQgMCkgeyBoYXJkID0gdHJ1ZTsgfVxuICAgICAgICBpZiAoaGFyZCAmJiB0aGlzLnJlQ2FsY0dhcEJldHdlZW5JdGVtc0NhbGxiYWNrKSB7XG4gICAgICAgICAgICB0aGlzLnJlQ2FsY0dhcEJldHdlZW5JdGVtc0NhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS50cmlnZ2VyUmVzcG9uc2l2ZW5lc3MuY2FsbCh0aGlzLCBoYXJkKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uSW1hZ2VQaWNrZXJNb2RlbC5wcm90b3R5cGUuYWZ0ZXJSZW5kZXIgPSBmdW5jdGlvbiAoZWwpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5hZnRlclJlbmRlci5jYWxsKHRoaXMsIGVsKTtcbiAgICAgICAgdmFyIHNlbGVjdG9yID0gdGhpcy5nZXRPYnNlcnZlZEVsZW1lbnRTZWxlY3RvcigpO1xuICAgICAgICB2YXIgb2JzZXJ2ZWRFbGVtZW50ID0gZWwgJiYgc2VsZWN0b3IgPyBlbC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKCEhb2JzZXJ2ZWRFbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLnJlQ2FsY0dhcEJldHdlZW5JdGVtc0NhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIF90aGlzLmdhcEJldHdlZW5JdGVtcyA9IE1hdGguY2VpbChOdW1iZXIucGFyc2VGbG9hdCh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShvYnNlcnZlZEVsZW1lbnQpLmdhcCkpIHx8IDE2O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMucmVDYWxjR2FwQmV0d2Vlbkl0ZW1zQ2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicHJvcGVydHlcIl0pKHt9KVxuICAgIF0sIFF1ZXN0aW9uSW1hZ2VQaWNrZXJNb2RlbC5wcm90b3R5cGUsIFwicmVzcG9uc2l2ZUltYWdlSGVpZ2h0XCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicHJvcGVydHlcIl0pKHt9KVxuICAgIF0sIFF1ZXN0aW9uSW1hZ2VQaWNrZXJNb2RlbC5wcm90b3R5cGUsIFwicmVzcG9uc2l2ZUltYWdlV2lkdGhcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJwcm9wZXJ0eVwiXSkoe30pXG4gICAgXSwgUXVlc3Rpb25JbWFnZVBpY2tlck1vZGVsLnByb3RvdHlwZSwgXCJpc1Jlc3BvbnNpdmVWYWx1ZVwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QoX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInByb3BlcnR5XCJdKSh7fSlcbiAgICBdLCBRdWVzdGlvbkltYWdlUGlja2VyTW9kZWwucHJvdG90eXBlLCBcIm1heEltYWdlV2lkdGhcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJwcm9wZXJ0eVwiXSkoe30pXG4gICAgXSwgUXVlc3Rpb25JbWFnZVBpY2tlck1vZGVsLnByb3RvdHlwZSwgXCJtaW5JbWFnZVdpZHRoXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicHJvcGVydHlcIl0pKHt9KVxuICAgIF0sIFF1ZXN0aW9uSW1hZ2VQaWNrZXJNb2RlbC5wcm90b3R5cGUsIFwibWF4SW1hZ2VIZWlnaHRcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJwcm9wZXJ0eVwiXSkoe30pXG4gICAgXSwgUXVlc3Rpb25JbWFnZVBpY2tlck1vZGVsLnByb3RvdHlwZSwgXCJtaW5JbWFnZUhlaWdodFwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QoX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInByb3BlcnR5XCJdKSh7fSlcbiAgICBdLCBRdWVzdGlvbkltYWdlUGlja2VyTW9kZWwucHJvdG90eXBlLCBcInJlc3BvbnNpdmVDb2xDb3VudFwiLCB2b2lkIDApO1xuICAgIHJldHVybiBRdWVzdGlvbkltYWdlUGlja2VyTW9kZWw7XG59KF9xdWVzdGlvbl9iYXNlc2VsZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJRdWVzdGlvbkNoZWNrYm94QmFzZVwiXSkpO1xuXG5fanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiU2VyaWFsaXplclwiXS5hZGRDbGFzcyhcImltYWdlaXRlbXZhbHVlXCIsIFt7IG5hbWU6IFwiaW1hZ2VMaW5rXCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NJbWFnZUxpbmtcIiB9XSwgZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiBuZXcgSW1hZ2VJdGVtVmFsdWUodmFsdWUpOyB9LCBcIml0ZW12YWx1ZVwiKTtcbl9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJTZXJpYWxpemVyXCJdLmFkZENsYXNzKFwicmVzcG9uc2l2ZUltYWdlU2l6ZVwiLCBbXSwgdW5kZWZpbmVkLCBcIm51bWJlclwiKTtcbl9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJTZXJpYWxpemVyXCJdLmFkZENsYXNzKFwiaW1hZ2VwaWNrZXJcIiwgW1xuICAgIHsgbmFtZTogXCJzaG93T3RoZXJJdGVtXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcIm90aGVyVGV4dFwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogXCJzaG93Tm9uZUl0ZW1cIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwibm9uZVRleHRcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwib3B0aW9uc0NhcHRpb25cIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwib3RoZXJFcnJvclRleHRcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwic3RvcmVPdGhlcnNBc0NvbW1lbnRcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICB7XG4gICAgICAgIG5hbWU6IFwiY29udGVudE1vZGVcIixcbiAgICAgICAgZGVmYXVsdDogXCJpbWFnZVwiLFxuICAgICAgICBjaG9pY2VzOiBbXCJpbWFnZVwiLCBcInZpZGVvXCJdLFxuICAgIH0sXG4gICAge1xuICAgICAgICBuYW1lOiBcImltYWdlRml0XCIsXG4gICAgICAgIGRlZmF1bHQ6IFwiY29udGFpblwiLFxuICAgICAgICBjaG9pY2VzOiBbXCJub25lXCIsIFwiY29udGFpblwiLCBcImNvdmVyXCIsIFwiZmlsbFwiXSxcbiAgICB9LFxuICAgIHsgbmFtZTogXCJpbWFnZUhlaWdodDpudW1iZXJcIiwgbWluVmFsdWU6IDAgfSxcbiAgICB7IG5hbWU6IFwiaW1hZ2VXaWR0aDpudW1iZXJcIiwgbWluVmFsdWU6IDAgfSxcbiAgICB7IG5hbWU6IFwibWluSW1hZ2VXaWR0aDpyZXNwb25zaXZlSW1hZ2VTaXplXCIsIGRlZmF1bHQ6IDIwMCwgbWluVmFsdWU6IDAsIHZpc2libGVJZjogZnVuY3Rpb24gKCkgeyByZXR1cm4gX3NldHRpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bXCJzZXR0aW5nc1wiXS5zdXBwb3J0Q3JlYXRvclYyOyB9IH0sXG4gICAgeyBuYW1lOiBcIm1pbkltYWdlSGVpZ2h0OnJlc3BvbnNpdmVJbWFnZVNpemVcIiwgZGVmYXVsdDogMTMzLCBtaW5WYWx1ZTogMCwgdmlzaWJsZUlmOiBmdW5jdGlvbiAoKSB7IHJldHVybiBfc2V0dGluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1tcInNldHRpbmdzXCJdLnN1cHBvcnRDcmVhdG9yVjI7IH0gfSxcbiAgICB7IG5hbWU6IFwibWF4SW1hZ2VXaWR0aDpyZXNwb25zaXZlSW1hZ2VTaXplXCIsIGRlZmF1bHQ6IDQwMCwgbWluVmFsdWU6IDAsIHZpc2libGVJZjogZnVuY3Rpb24gKCkgeyByZXR1cm4gX3NldHRpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bXCJzZXR0aW5nc1wiXS5zdXBwb3J0Q3JlYXRvclYyOyB9IH0sXG4gICAgeyBuYW1lOiBcIm1heEltYWdlSGVpZ2h0OnJlc3BvbnNpdmVJbWFnZVNpemVcIiwgZGVmYXVsdDogMjY2LCBtaW5WYWx1ZTogMCwgdmlzaWJsZUlmOiBmdW5jdGlvbiAoKSB7IHJldHVybiBfc2V0dGluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1tcInNldHRpbmdzXCJdLnN1cHBvcnRDcmVhdG9yVjI7IH0gfSxcbl0sIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uSW1hZ2VQaWNrZXJNb2RlbChcIlwiKTtcbn0sIFwiY2hlY2tib3hiYXNlXCIpO1xuX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlNlcmlhbGl6ZXJcIl0uYWRkUHJvcGVydHkoXCJpbWFnZXBpY2tlclwiLCB7XG4gICAgbmFtZTogXCJzaG93TGFiZWw6Ym9vbGVhblwiLFxuICAgIGRlZmF1bHQ6IGZhbHNlLFxufSk7XG5fanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiU2VyaWFsaXplclwiXS5hZGRQcm9wZXJ0eShcImltYWdlcGlja2VyXCIsIHtcbiAgICBuYW1lOiBcImNvbENvdW50Om51bWJlclwiLFxuICAgIGRlZmF1bHQ6IDAsXG4gICAgY2hvaWNlczogWzAsIDEsIDIsIDMsIDQsIDVdLFxufSk7XG5fanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiU2VyaWFsaXplclwiXS5hZGRQcm9wZXJ0eShcImltYWdlcGlja2VyXCIsIHtcbiAgICBuYW1lOiBcIm11bHRpU2VsZWN0OmJvb2xlYW5cIixcbiAgICBkZWZhdWx0OiBmYWxzZSxcbn0pO1xuX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlNlcmlhbGl6ZXJcIl0uYWRkUHJvcGVydHkoXCJpbWFnZXBpY2tlclwiLCB7XG4gICAgbmFtZTogXCJjaG9pY2VzOmltYWdlaXRlbXZhbHVlW11cIixcbn0pO1xuX3F1ZXN0aW9uZmFjdG9yeV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiUXVlc3Rpb25GYWN0b3J5XCJdLkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJpbWFnZXBpY2tlclwiLCBmdW5jdGlvbiAobmFtZSkge1xuICAgIHZhciBxID0gbmV3IFF1ZXN0aW9uSW1hZ2VQaWNrZXJNb2RlbChuYW1lKTtcbiAgICAvL3EuY2hvaWNlcyA9IFF1ZXN0aW9uRmFjdG9yeS5EZWZhdWx0Q2hvaWNlcztcbiAgICByZXR1cm4gcTtcbn0pO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3F1ZXN0aW9uX21hdHJpeC50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvcXVlc3Rpb25fbWF0cml4LnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBNYXRyaXhSb3dNb2RlbCwgTWF0cml4Q2VsbHMsIFF1ZXN0aW9uTWF0cml4TW9kZWwgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiTWF0cml4Um93TW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBNYXRyaXhSb3dNb2RlbDsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiTWF0cml4Q2VsbHNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBNYXRyaXhDZWxsczsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUXVlc3Rpb25NYXRyaXhNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFF1ZXN0aW9uTWF0cml4TW9kZWw7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9oZWxwZXJzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2hlbHBlcnMgKi8gXCIuL3NyYy9oZWxwZXJzLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9pdGVtdmFsdWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vaXRlbXZhbHVlICovIFwiLi9zcmMvaXRlbXZhbHVlLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9tYXJ0aXhCYXNlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL21hcnRpeEJhc2UgKi8gXCIuL3NyYy9tYXJ0aXhCYXNlLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2pzb25vYmplY3QgKi8gXCIuL3NyYy9qc29ub2JqZWN0LnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9iYXNlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2Jhc2UgKi8gXCIuL3NyYy9iYXNlLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zdXJ2ZXlTdHJpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3N1cnZleVN0cmluZ3MgKi8gXCIuL3NyYy9zdXJ2ZXlTdHJpbmdzLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9lcnJvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9lcnJvciAqLyBcIi4vc3JjL2Vycm9yLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9xdWVzdGlvbmZhY3RvcnlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcXVlc3Rpb25mYWN0b3J5ICovIFwiLi9zcmMvcXVlc3Rpb25mYWN0b3J5LnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9sb2NhbGl6YWJsZXN0cmluZ19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9sb2NhbGl6YWJsZXN0cmluZyAqLyBcIi4vc3JjL2xvY2FsaXphYmxlc3RyaW5nLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9xdWVzdGlvbl9kcm9wZG93bl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9xdWVzdGlvbl9kcm9wZG93biAqLyBcIi4vc3JjL3F1ZXN0aW9uX2Ryb3Bkb3duLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vc2V0dGluZ3MgKi8gXCIuL3NyYy9zZXR0aW5ncy50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdXRpbHNfY3NzQ2xhc3NCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi91dGlscy9jc3NDbGFzc0J1aWxkZXIgKi8gXCIuL3NyYy91dGlscy9jc3NDbGFzc0J1aWxkZXIudHNcIik7XG52YXIgX19leHRlbmRzID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbnZhciBNYXRyaXhSb3dNb2RlbCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoTWF0cml4Um93TW9kZWwsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gTWF0cml4Um93TW9kZWwoaXRlbSwgZnVsbE5hbWUsIGRhdGEsIHZhbHVlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmZ1bGxOYW1lID0gZnVsbE5hbWU7XG4gICAgICAgIF90aGlzLml0ZW0gPSBpdGVtO1xuICAgICAgICBfdGhpcy5kYXRhID0gZGF0YTtcbiAgICAgICAgX3RoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgX3RoaXMuY2VsbENsaWNrID0gZnVuY3Rpb24gKGNvbHVtbikge1xuICAgICAgICAgICAgX3RoaXMudmFsdWUgPSBjb2x1bW4udmFsdWU7XG4gICAgICAgIH07XG4gICAgICAgIF90aGlzLnJlZ2lzdGVyUHJvcGVydHlDaGFuZ2VkSGFuZGxlcnMoW1widmFsdWVcIl0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChfdGhpcy5kYXRhKVxuICAgICAgICAgICAgICAgIF90aGlzLmRhdGEub25NYXRyaXhSb3dDaGFuZ2VkKF90aGlzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1hdHJpeFJvd01vZGVsLnByb3RvdHlwZSwgXCJuYW1lXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pdGVtLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1hdHJpeFJvd01vZGVsLnByb3RvdHlwZSwgXCJ0ZXh0XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pdGVtLnRleHQ7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTWF0cml4Um93TW9kZWwucHJvdG90eXBlLCBcImxvY1RleHRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLml0ZW0ubG9jVGV4dDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNYXRyaXhSb3dNb2RlbC5wcm90b3R5cGUsIFwidmFsdWVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ2YWx1ZVwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAobmV3VmFsdWUpIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gdGhpcy5kYXRhLmdldENvcnJlY3RlZFJvd1ZhbHVlKG5ld1ZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInZhbHVlXCIsIG5ld1ZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNYXRyaXhSb3dNb2RlbC5wcm90b3R5cGUsIFwicm93Q2xhc3Nlc1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGNzc0NsYXNzZXMgPSB0aGlzLmRhdGEuY3NzQ2xhc3NlcztcbiAgICAgICAgICAgIHZhciBoYXNFcnJvciA9ICEhdGhpcy5kYXRhLmdldEVycm9yQnlUeXBlKFwicmVxdWlyZWRpbmFsbHJvd3NlcnJvclwiKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgX3V0aWxzX2Nzc0NsYXNzQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX1tcIkNzc0NsYXNzQnVpbGRlclwiXSgpLmFwcGVuZChjc3NDbGFzc2VzLnJvdylcbiAgICAgICAgICAgICAgICAuYXBwZW5kKGNzc0NsYXNzZXMucm93RXJyb3IsIGhhc0Vycm9yICYmIHRoaXMuaXNWYWx1ZUVtcHR5KHRoaXMudmFsdWUpKVxuICAgICAgICAgICAgICAgIC50b1N0cmluZygpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgcmV0dXJuIE1hdHJpeFJvd01vZGVsO1xufShfYmFzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fW1wiQmFzZVwiXSkpO1xuXG52YXIgTWF0cml4Q2VsbHMgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gTWF0cml4Q2VsbHMoY2VsbHNPd25lcikge1xuICAgICAgICB0aGlzLmNlbGxzT3duZXIgPSBjZWxsc093bmVyO1xuICAgICAgICB0aGlzLnZhbHVlcyA9IHt9O1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTWF0cml4Q2VsbHMucHJvdG90eXBlLCBcImlzRW1wdHlcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLnZhbHVlcykubGVuZ3RoID09IDA7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBNYXRyaXhDZWxscy5wcm90b3R5cGUudmFsdWVzQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCEhdGhpcy5vblZhbHVlc0NoYW5nZWQpIHtcbiAgICAgICAgICAgIHRoaXMub25WYWx1ZXNDaGFuZ2VkKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE1hdHJpeENlbGxzLnByb3RvdHlwZS5zZXRDZWxsVGV4dCA9IGZ1bmN0aW9uIChyb3csIGNvbHVtbiwgdmFsKSB7XG4gICAgICAgIHJvdyA9IHRoaXMuZ2V0Q2VsbFJvd0NvbHVtblZhbHVlKHJvdywgdGhpcy5yb3dzKTtcbiAgICAgICAgY29sdW1uID0gdGhpcy5nZXRDZWxsUm93Q29sdW1uVmFsdWUoY29sdW1uLCB0aGlzLmNvbHVtbnMpO1xuICAgICAgICBpZiAoIXJvdyB8fCAhY29sdW1uKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAodmFsKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMudmFsdWVzW3Jvd10pXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbcm93XSA9IHt9O1xuICAgICAgICAgICAgaWYgKCF0aGlzLnZhbHVlc1tyb3ddW2NvbHVtbl0pXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbcm93XVtjb2x1bW5dID0gdGhpcy5jcmVhdGVTdHJpbmcoKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWVzW3Jvd11bY29sdW1uXS50ZXh0ID0gdmFsO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMudmFsdWVzW3Jvd10gJiYgdGhpcy52YWx1ZXNbcm93XVtjb2x1bW5dKSB7XG4gICAgICAgICAgICAgICAgdmFyIGxvYyA9IHRoaXMudmFsdWVzW3Jvd11bY29sdW1uXTtcbiAgICAgICAgICAgICAgICBsb2MudGV4dCA9IFwiXCI7XG4gICAgICAgICAgICAgICAgaWYgKGxvYy5pc0VtcHR5KSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnZhbHVlc1tyb3ddW2NvbHVtbl07XG4gICAgICAgICAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLnZhbHVlc1tyb3ddKS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMudmFsdWVzW3Jvd107XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52YWx1ZXNDaGFuZ2VkKCk7XG4gICAgfTtcbiAgICBNYXRyaXhDZWxscy5wcm90b3R5cGUuc2V0RGVmYXVsdENlbGxUZXh0ID0gZnVuY3Rpb24gKGNvbHVtbiwgdmFsKSB7XG4gICAgICAgIHRoaXMuc2V0Q2VsbFRleHQoX3NldHRpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fW1wic2V0dGluZ3NcIl0ubWF0cml4LmRlZmF1bHRSb3dOYW1lLCBjb2x1bW4sIHZhbCk7XG4gICAgfTtcbiAgICBNYXRyaXhDZWxscy5wcm90b3R5cGUuZ2V0Q2VsbExvY1RleHQgPSBmdW5jdGlvbiAocm93LCBjb2x1bW4pIHtcbiAgICAgICAgcm93ID0gdGhpcy5nZXRDZWxsUm93Q29sdW1uVmFsdWUocm93LCB0aGlzLnJvd3MpO1xuICAgICAgICBjb2x1bW4gPSB0aGlzLmdldENlbGxSb3dDb2x1bW5WYWx1ZShjb2x1bW4sIHRoaXMuY29sdW1ucyk7XG4gICAgICAgIGlmICghcm93IHx8ICFjb2x1bW4pXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgaWYgKCF0aGlzLnZhbHVlc1tyb3ddKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGlmICghdGhpcy52YWx1ZXNbcm93XVtjb2x1bW5dKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlc1tyb3ddW2NvbHVtbl07XG4gICAgfTtcbiAgICBNYXRyaXhDZWxscy5wcm90b3R5cGUuZ2V0RGVmYXVsdENlbGxMb2NUZXh0ID0gZnVuY3Rpb24gKGNvbHVtbiwgdmFsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldENlbGxMb2NUZXh0KF9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX1tcInNldHRpbmdzXCJdLm1hdHJpeC5kZWZhdWx0Um93TmFtZSwgY29sdW1uKTtcbiAgICB9O1xuICAgIE1hdHJpeENlbGxzLnByb3RvdHlwZS5nZXRDZWxsRGlzcGxheUxvY1RleHQgPSBmdW5jdGlvbiAocm93LCBjb2x1bW4pIHtcbiAgICAgICAgdmFyIGNlbGxUZXh0ID0gdGhpcy5nZXRDZWxsTG9jVGV4dChyb3csIGNvbHVtbik7XG4gICAgICAgIGlmIChjZWxsVGV4dCAmJiAhY2VsbFRleHQuaXNFbXB0eSlcbiAgICAgICAgICAgIHJldHVybiBjZWxsVGV4dDtcbiAgICAgICAgY2VsbFRleHQgPSB0aGlzLmdldENlbGxMb2NUZXh0KF9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX1tcInNldHRpbmdzXCJdLm1hdHJpeC5kZWZhdWx0Um93TmFtZSwgY29sdW1uKTtcbiAgICAgICAgaWYgKGNlbGxUZXh0ICYmICFjZWxsVGV4dC5pc0VtcHR5KVxuICAgICAgICAgICAgcmV0dXJuIGNlbGxUZXh0O1xuICAgICAgICBpZiAodHlwZW9mIGNvbHVtbiA9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICBjb2x1bW4gPVxuICAgICAgICAgICAgICAgIGNvbHVtbiA+PSAwICYmIGNvbHVtbiA8IHRoaXMuY29sdW1ucy5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLmNvbHVtbnNbY29sdW1uXVxuICAgICAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbHVtbiAmJiBjb2x1bW4ubG9jVGV4dClcbiAgICAgICAgICAgIHJldHVybiBjb2x1bW4ubG9jVGV4dDtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgICBNYXRyaXhDZWxscy5wcm90b3R5cGUuZ2V0Q2VsbFRleHQgPSBmdW5jdGlvbiAocm93LCBjb2x1bW4pIHtcbiAgICAgICAgdmFyIGxvYyA9IHRoaXMuZ2V0Q2VsbExvY1RleHQocm93LCBjb2x1bW4pO1xuICAgICAgICByZXR1cm4gbG9jID8gbG9jLmNhbGN1bGF0ZWRUZXh0IDogbnVsbDtcbiAgICB9O1xuICAgIE1hdHJpeENlbGxzLnByb3RvdHlwZS5nZXREZWZhdWx0Q2VsbFRleHQgPSBmdW5jdGlvbiAoY29sdW1uKSB7XG4gICAgICAgIHZhciBsb2MgPSB0aGlzLmdldENlbGxMb2NUZXh0KF9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX1tcInNldHRpbmdzXCJdLm1hdHJpeC5kZWZhdWx0Um93TmFtZSwgY29sdW1uKTtcbiAgICAgICAgcmV0dXJuIGxvYyA/IGxvYy5jYWxjdWxhdGVkVGV4dCA6IG51bGw7XG4gICAgfTtcbiAgICBNYXRyaXhDZWxscy5wcm90b3R5cGUuZ2V0Q2VsbERpc3BsYXlUZXh0ID0gZnVuY3Rpb24gKHJvdywgY29sdW1uKSB7XG4gICAgICAgIHZhciBsb2MgPSB0aGlzLmdldENlbGxEaXNwbGF5TG9jVGV4dChyb3csIGNvbHVtbik7XG4gICAgICAgIHJldHVybiBsb2MgPyBsb2MuY2FsY3VsYXRlZFRleHQgOiBudWxsO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1hdHJpeENlbGxzLnByb3RvdHlwZSwgXCJyb3dzXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jZWxsc093bmVyID8gdGhpcy5jZWxsc093bmVyLmdldFJvd3MoKSA6IFtdO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1hdHJpeENlbGxzLnByb3RvdHlwZSwgXCJjb2x1bW5zXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jZWxsc093bmVyID8gdGhpcy5jZWxsc093bmVyLmdldENvbHVtbnMoKSA6IFtdO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgTWF0cml4Q2VsbHMucHJvdG90eXBlLmdldENlbGxSb3dDb2x1bW5WYWx1ZSA9IGZ1bmN0aW9uICh2YWwsIHZhbHVlcykge1xuICAgICAgICBpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsID09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIGlmICh2YWwgPCAwIHx8IHZhbCA+PSB2YWx1ZXMubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgdmFsID0gdmFsdWVzW3ZhbF0udmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbC52YWx1ZSlcbiAgICAgICAgICAgIHJldHVybiB2YWwudmFsdWU7XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfTtcbiAgICBNYXRyaXhDZWxscy5wcm90b3R5cGUuZ2V0SnNvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNFbXB0eSlcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB2YXIgcmVzID0ge307XG4gICAgICAgIGZvciAodmFyIHJvdyBpbiB0aGlzLnZhbHVlcykge1xuICAgICAgICAgICAgdmFyIHJlc1JvdyA9IHt9O1xuICAgICAgICAgICAgdmFyIHJvd1ZhbHVlcyA9IHRoaXMudmFsdWVzW3Jvd107XG4gICAgICAgICAgICBmb3IgKHZhciBjb2wgaW4gcm93VmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgcmVzUm93W2NvbF0gPSByb3dWYWx1ZXNbY29sXS5nZXRKc29uKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNbcm93XSA9IHJlc1JvdztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH07XG4gICAgTWF0cml4Q2VsbHMucHJvdG90eXBlLnNldEpzb24gPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdGhpcy52YWx1ZXMgPSB7fTtcbiAgICAgICAgaWYgKCEhdmFsdWUpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHJvdyBpbiB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGlmIChyb3cgPT0gXCJwb3NcIilcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgdmFyIHJvd1ZhbHVlcyA9IHZhbHVlW3Jvd107XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbcm93XSA9IHt9O1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGNvbCBpbiByb3dWYWx1ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbCA9PSBcInBvc1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIHZhciBsb2MgPSB0aGlzLmNyZWF0ZVN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICBsb2Muc2V0SnNvbihyb3dWYWx1ZXNbY29sXSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzW3Jvd11bY29sXSA9IGxvYztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52YWx1ZXNDaGFuZ2VkKCk7XG4gICAgfTtcbiAgICBNYXRyaXhDZWxscy5wcm90b3R5cGUubG9jU3Ryc0NoYW5nZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzRW1wdHkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGZvciAodmFyIHJvdyBpbiB0aGlzLnZhbHVlcykge1xuICAgICAgICAgICAgdmFyIHJvd1ZhbHVlcyA9IHRoaXMudmFsdWVzW3Jvd107XG4gICAgICAgICAgICBmb3IgKHZhciBjb2wgaW4gcm93VmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgcm93VmFsdWVzW2NvbF0uc3RyQ2hhbmdlZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBNYXRyaXhDZWxscy5wcm90b3R5cGUuY3JlYXRlU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gbmV3IF9sb2NhbGl6YWJsZXN0cmluZ19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fW1wiTG9jYWxpemFibGVTdHJpbmdcIl0odGhpcy5jZWxsc093bmVyLCB0cnVlKTtcbiAgICB9O1xuICAgIHJldHVybiBNYXRyaXhDZWxscztcbn0oKSk7XG5cbi8qKlxuICAqIEEgY2xhc3MgdGhhdCBkZXNjcmliZXMgdGhlIFNpbmdsZS1TZWxlY3QgTWF0cml4IHF1ZXN0aW9uIHR5cGUuXG4gICpcbiAgKiBbVmlldyBEZW1vXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9leGFtcGxlcy9zaW5nbGUtc2VsZWN0aW9uLW1hdHJpeC10YWJsZS1xdWVzdGlvbi8gKGxpbmtTdHlsZSkpXG4gICovXG52YXIgUXVlc3Rpb25NYXRyaXhNb2RlbCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoUXVlc3Rpb25NYXRyaXhNb2RlbCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBRdWVzdGlvbk1hdHJpeE1vZGVsKG5hbWUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbmFtZSkgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuaXNSb3dDaGFuZ2luZyA9IGZhbHNlO1xuICAgICAgICBfdGhpcy5lbXB0eUxvY2FsaXphYmxlU3RyaW5nID0gbmV3IF9sb2NhbGl6YWJsZXN0cmluZ19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fW1wiTG9jYWxpemFibGVTdHJpbmdcIl0oX3RoaXMpO1xuICAgICAgICBfdGhpcy5jZWxsc1ZhbHVlID0gbmV3IE1hdHJpeENlbGxzKF90aGlzKTtcbiAgICAgICAgX3RoaXMuY2VsbHNWYWx1ZS5vblZhbHVlc0NoYW5nZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy51cGRhdGVIYXNDZWxsVGV4dCgpO1xuICAgICAgICAgICAgX3RoaXMucHJvcGVydHlWYWx1ZUNoYW5nZWQoXCJjZWxsc1wiLCBfdGhpcy5jZWxscywgX3RoaXMuY2VsbHMpO1xuICAgICAgICB9O1xuICAgICAgICBfdGhpcy5yZWdpc3RlclByb3BlcnR5Q2hhbmdlZEhhbmRsZXJzKFtcImNvbHVtbnNcIl0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLm9uQ29sdW1uc0NoYW5nZWQoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIF90aGlzLnJlZ2lzdGVyUHJvcGVydHlDaGFuZ2VkSGFuZGxlcnMoW1wicm93c1wiXSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFfdGhpcy5maWx0ZXJJdGVtcygpKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMub25Sb3dzQ2hhbmdlZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgX3RoaXMucmVnaXN0ZXJQcm9wZXJ0eUNoYW5nZWRIYW5kbGVycyhbXCJoaWRlSWZSb3dzRW1wdHlcIl0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLnVwZGF0ZVZpc2liaWxpdHlCYXNlZE9uUm93cygpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBRdWVzdGlvbk1hdHJpeE1vZGVsLnByb3RvdHlwZS5nZXRUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gXCJtYXRyaXhcIjtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbk1hdHJpeE1vZGVsLnByb3RvdHlwZSwgXCJoYXNTaW5nbGVJbnB1dFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uTWF0cml4TW9kZWwucHJvdG90eXBlLCBcImlzQWxsUm93UmVxdWlyZWRcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHdoZXRoZXIgZWFjaCByb3cgcmVxdWlyZXMgYW4gYW5zd2VyLiBJZiBhIHJlc3BvbmRlbnQgc2tpcHMgYSByb3csIHRoZSBxdWVzdGlvbiBkaXNwbGF5cyBhIHZhbGlkYXRpb24gZXJyb3IuXG4gICAgICAgICAqIEBzZWUgaXNSZXF1aXJlZFxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaXNBbGxSb3dSZXF1aXJlZFwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpc0FsbFJvd1JlcXVpcmVkXCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25NYXRyaXhNb2RlbC5wcm90b3R5cGUsIFwiaGFzUm93c1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucm93cy5sZW5ndGggPiAwO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uTWF0cml4TW9kZWwucHJvdG90eXBlLCBcInJvd3NPcmRlclwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgYSBzb3J0IG9yZGVyIGZvciBtYXRyaXggcm93cy5cbiAgICAgICAgICpcbiAgICAgICAgICogUG9zc2libGUgdmFsdWVzOlxuICAgICAgICAgKlxuICAgICAgICAgKiAtIFwiaW5pdGlhbFwiIChkZWZhdWx0KSAtIFByZXNlcnZlcyB0aGUgb3JpZ2luYWwgb3JkZXIgb2YgdGhlIGByb3dzYCBhcnJheS5cbiAgICAgICAgICogLSBcInJhbmRvbVwiIC0gQXJyYW5nZXMgbWF0cml4IHJvd3MgaW4gcmFuZG9tIG9yZGVyIGVhY2ggdGltZSB0aGUgcXVlc3Rpb24gaXMgZGlzcGxheWVkLlxuICAgICAgICAgKiBAc2VlIHJvd3NcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInJvd3NPcmRlclwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB2YWwgPSB2YWwudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIGlmICh2YWwgPT0gdGhpcy5yb3dzT3JkZXIpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicm93c09yZGVyXCIsIHZhbCk7XG4gICAgICAgICAgICB0aGlzLm9uUm93c0NoYW5nZWQoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbk1hdHJpeE1vZGVsLnByb3RvdHlwZSwgXCJoaWRlSWZSb3dzRW1wdHlcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHdoZXRoZXIgdG8gaGlkZSB0aGUgcXVlc3Rpb24gd2hlbiB0aGUgbWF0cml4IGhhcyBubyB2aXNpYmxlIHJvd3MuXG4gICAgICAgICAqIEBzZWUgcm93c1Zpc2libGVJZlxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaGlkZUlmUm93c0VtcHR5XCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImhpZGVJZlJvd3NFbXB0eVwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUXVlc3Rpb25NYXRyaXhNb2RlbC5wcm90b3R5cGUuZ2V0Um93cyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucm93cztcbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4TW9kZWwucHJvdG90eXBlLmdldENvbHVtbnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpc2libGVDb2x1bW5zO1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhNb2RlbC5wcm90b3R5cGUuYWRkQ29sdW1uID0gZnVuY3Rpb24gKHZhbHVlLCB0ZXh0KSB7XG4gICAgICAgIHZhciBjb2wgPSBuZXcgX2l0ZW12YWx1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiSXRlbVZhbHVlXCJdKHZhbHVlLCB0ZXh0KTtcbiAgICAgICAgdGhpcy5jb2x1bW5zLnB1c2goY29sKTtcbiAgICAgICAgcmV0dXJuIGNvbDtcbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4TW9kZWwucHJvdG90eXBlLmdldEl0ZW1DbGFzcyA9IGZ1bmN0aW9uIChyb3csIGNvbHVtbikge1xuICAgICAgICB2YXIgaXNDaGVja2VkID0gcm93LnZhbHVlID09IGNvbHVtbi52YWx1ZTtcbiAgICAgICAgdmFyIGlzRGlzYWJsZWQgPSB0aGlzLmlzUmVhZE9ubHk7XG4gICAgICAgIHZhciBhbGxvd0hvdmVyID0gIWlzQ2hlY2tlZCAmJiAhaXNEaXNhYmxlZDtcbiAgICAgICAgcmV0dXJuIG5ldyBfdXRpbHNfY3NzQ2xhc3NCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fW1wiQ3NzQ2xhc3NCdWlsZGVyXCJdKClcbiAgICAgICAgICAgIC5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLmNlbGwsIHRoaXMuaGFzQ2VsbFRleHQpXG4gICAgICAgICAgICAuYXBwZW5kKHRoaXMuaGFzQ2VsbFRleHQgPyB0aGlzLmNzc0NsYXNzZXMuY2VsbFRleHQgOiB0aGlzLmNzc0NsYXNzZXMubGFiZWwpXG4gICAgICAgICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5pdGVtT25FcnJvciwgIXRoaXMuaGFzQ2VsbFRleHQgJiYgdGhpcy5lcnJvcnMubGVuZ3RoID4gMClcbiAgICAgICAgICAgIC5hcHBlbmQodGhpcy5oYXNDZWxsVGV4dCA/IHRoaXMuY3NzQ2xhc3Nlcy5jZWxsVGV4dFNlbGVjdGVkIDogdGhpcy5jc3NDbGFzc2VzLml0ZW1DaGVja2VkLCBpc0NoZWNrZWQpXG4gICAgICAgICAgICAuYXBwZW5kKHRoaXMuaGFzQ2VsbFRleHQgPyB0aGlzLmNzc0NsYXNzZXMuY2VsbFRleHREaXNhYmxlZCA6IHRoaXMuY3NzQ2xhc3Nlcy5pdGVtRGlzYWJsZWQsIGlzRGlzYWJsZWQpXG4gICAgICAgICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5pdGVtSG92ZXIsIGFsbG93SG92ZXIgJiYgIXRoaXMuaGFzQ2VsbFRleHQpXG4gICAgICAgICAgICAudG9TdHJpbmcoKTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbk1hdHJpeE1vZGVsLnByb3RvdHlwZSwgXCJpdGVtU3ZnSWNvblwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3NzQ2xhc3Nlcy5pdGVtU3ZnSWNvbklkO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUXVlc3Rpb25NYXRyaXhNb2RlbC5wcm90b3R5cGUubG9jU3Ryc0NoYW5nZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUubG9jU3Ryc0NoYW5nZWQuY2FsbCh0aGlzKTtcbiAgICAgICAgdGhpcy5jZWxscy5sb2NTdHJzQ2hhbmdlZCgpO1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhNb2RlbC5wcm90b3R5cGUuZ2V0UXVpelF1ZXN0aW9uQ291bnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciByZXMgPSAwO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlzVmFsdWVFbXB0eSh0aGlzLmNvcnJlY3RBbnN3ZXJbdGhpcy5yb3dzW2ldLnZhbHVlXSkpXG4gICAgICAgICAgICAgICAgcmVzKys7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4TW9kZWwucHJvdG90eXBlLmdldENvcnJlY3RBbnN3ZXJDb3VudCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHJlcyA9IDA7XG4gICAgICAgIHZhciB2YWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5yb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgcm93ID0gdGhpcy5yb3dzW2ldLnZhbHVlO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlzVmFsdWVFbXB0eSh2YWx1ZVtyb3ddKSAmJlxuICAgICAgICAgICAgICAgIHRoaXMuaXNUd29WYWx1ZUVxdWFscyh0aGlzLmNvcnJlY3RBbnN3ZXJbcm93XSwgdmFsdWVbcm93XSkpXG4gICAgICAgICAgICAgICAgcmVzKys7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4TW9kZWwucHJvdG90eXBlLmdldFZpc2libGVSb3dzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IEFycmF5KCk7XG4gICAgICAgIHZhciB2YWwgPSB0aGlzLnZhbHVlO1xuICAgICAgICBpZiAoIXZhbClcbiAgICAgICAgICAgIHZhbCA9IHt9O1xuICAgICAgICB2YXIgcm93cyA9ICEhdGhpcy5maWx0ZXJlZFJvd3MgPyB0aGlzLmZpbHRlcmVkUm93cyA6IHRoaXMucm93cztcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgcm93ID0gcm93c1tpXTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzVmFsdWVFbXB0eShyb3cudmFsdWUpKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2godGhpcy5jcmVhdGVNYXRyaXhSb3cocm93LCB0aGlzLmlkICsgXCJfXCIgKyByb3cudmFsdWUudG9TdHJpbmcoKS5yZXBsYWNlKC9cXHMvZywgXCJfXCIpLCB2YWxbcm93LnZhbHVlXSkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MgPSByZXN1bHQ7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeE1vZGVsLnByb3RvdHlwZS5zb3J0VmlzaWJsZVJvd3MgPSBmdW5jdGlvbiAoYXJyYXkpIHtcbiAgICAgICAgaWYgKCEhdGhpcy5zdXJ2ZXkgJiYgdGhpcy5zdXJ2ZXkuaXNEZXNpZ25Nb2RlKVxuICAgICAgICAgICAgcmV0dXJuIGFycmF5O1xuICAgICAgICB2YXIgb3JkZXIgPSB0aGlzLnJvd3NPcmRlci50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAob3JkZXIgPT09IFwicmFuZG9tXCIpXG4gICAgICAgICAgICByZXR1cm4gX2hlbHBlcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkhlbHBlcnNcIl0ucmFuZG9taXplQXJyYXkoYXJyYXkpO1xuICAgICAgICByZXR1cm4gYXJyYXk7XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeE1vZGVsLnByb3RvdHlwZS5lbmRMb2FkaW5nRnJvbUpzb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUuZW5kTG9hZGluZ0Zyb21Kc29uLmNhbGwodGhpcyk7XG4gICAgICAgIHRoaXMucm93cyA9IHRoaXMuc29ydFZpc2libGVSb3dzKHRoaXMucm93cyk7XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeE1vZGVsLnByb3RvdHlwZS5pc05ld1ZhbHVlQ29ycmVjdCA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgcmV0dXJuIF9oZWxwZXJzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJIZWxwZXJzXCJdLmlzVmFsdWVPYmplY3QodmFsLCB0cnVlKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4TW9kZWwucHJvdG90eXBlLnByb2Nlc3NSb3dzT25TZXQgPSBmdW5jdGlvbiAobmV3Um93cykge1xuICAgICAgICByZXR1cm4gdGhpcy5zb3J0VmlzaWJsZVJvd3MobmV3Um93cyk7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25NYXRyaXhNb2RlbC5wcm90b3R5cGUsIFwidmlzaWJsZVJvd3NcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFZpc2libGVSb3dzKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25NYXRyaXhNb2RlbC5wcm90b3R5cGUsIFwiY2VsbHNcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNlbGxzVmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmNlbGxzLnNldEpzb24odmFsdWUgJiYgdmFsdWUuZ2V0SnNvbiA/IHZhbHVlLmdldEpzb24oKSA6IG51bGwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uTWF0cml4TW9kZWwucHJvdG90eXBlLCBcImhhc0NlbGxUZXh0XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaGFzQ2VsbFRleHRcIiwgZmFsc2UpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUXVlc3Rpb25NYXRyaXhNb2RlbC5wcm90b3R5cGUudXBkYXRlSGFzQ2VsbFRleHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImhhc0NlbGxUZXh0XCIsICF0aGlzLmNlbGxzLmlzRW1wdHkpO1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhNb2RlbC5wcm90b3R5cGUuc2V0Q2VsbFRleHQgPSBmdW5jdGlvbiAocm93LCBjb2x1bW4sIHZhbCkge1xuICAgICAgICB0aGlzLmNlbGxzLnNldENlbGxUZXh0KHJvdywgY29sdW1uLCB2YWwpO1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhNb2RlbC5wcm90b3R5cGUuZ2V0Q2VsbFRleHQgPSBmdW5jdGlvbiAocm93LCBjb2x1bW4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2VsbHMuZ2V0Q2VsbFRleHQocm93LCBjb2x1bW4pO1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhNb2RlbC5wcm90b3R5cGUuc2V0RGVmYXVsdENlbGxUZXh0ID0gZnVuY3Rpb24gKGNvbHVtbiwgdmFsKSB7XG4gICAgICAgIHRoaXMuY2VsbHMuc2V0RGVmYXVsdENlbGxUZXh0KGNvbHVtbiwgdmFsKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4TW9kZWwucHJvdG90eXBlLmdldERlZmF1bHRDZWxsVGV4dCA9IGZ1bmN0aW9uIChjb2x1bW4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2VsbHMuZ2V0RGVmYXVsdENlbGxUZXh0KGNvbHVtbik7XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeE1vZGVsLnByb3RvdHlwZS5nZXRDZWxsRGlzcGxheVRleHQgPSBmdW5jdGlvbiAocm93LCBjb2x1bW4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2VsbHMuZ2V0Q2VsbERpc3BsYXlUZXh0KHJvdywgY29sdW1uKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4TW9kZWwucHJvdG90eXBlLmdldENlbGxEaXNwbGF5TG9jVGV4dCA9IGZ1bmN0aW9uIChyb3csIGNvbHVtbikge1xuICAgICAgICB2YXIgbG9jID0gdGhpcy5jZWxscy5nZXRDZWxsRGlzcGxheUxvY1RleHQocm93LCBjb2x1bW4pO1xuICAgICAgICByZXR1cm4gbG9jID8gbG9jIDogdGhpcy5lbXB0eUxvY2FsaXphYmxlU3RyaW5nO1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhNb2RlbC5wcm90b3R5cGUuc3VwcG9ydEdvTmV4dFBhZ2VBdXRvbWF0aWMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzTW91c2VEb3duID09PSB0cnVlICYmIHRoaXMuaGFzVmFsdWVzSW5BbGxSb3dzKCk7XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeE1vZGVsLnByb3RvdHlwZS5vbkNoZWNrRm9yRXJyb3JzID0gZnVuY3Rpb24gKGVycm9ycywgaXNPblZhbHVlQ2hhbmdlZCkge1xuICAgICAgICBfc3VwZXIucHJvdG90eXBlLm9uQ2hlY2tGb3JFcnJvcnMuY2FsbCh0aGlzLCBlcnJvcnMsIGlzT25WYWx1ZUNoYW5nZWQpO1xuICAgICAgICBpZiAoKCFpc09uVmFsdWVDaGFuZ2VkIHx8IHRoaXMuZXJyb3JzLmxlbmd0aCA+IDApICYmXG4gICAgICAgICAgICB0aGlzLmhhc0Vycm9ySW5Sb3dzKCkpIHtcbiAgICAgICAgICAgIGVycm9ycy5wdXNoKG5ldyBfZXJyb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1tcIlJlcXVpcmVkSW5BbGxSb3dzRXJyb3JcIl0obnVsbCwgdGhpcykpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeE1vZGVsLnByb3RvdHlwZS5oYXNFcnJvckluUm93cyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzQWxsUm93UmVxdWlyZWQpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiAhdGhpcy5oYXNWYWx1ZXNJbkFsbFJvd3MoKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4TW9kZWwucHJvdG90eXBlLmhhc1ZhbHVlc0luQWxsUm93cyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHJvd3MgPSB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzO1xuICAgICAgICBpZiAoIXJvd3MpXG4gICAgICAgICAgICByb3dzID0gdGhpcy52aXNpYmxlUm93cztcbiAgICAgICAgaWYgKCFyb3dzKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNWYWx1ZUVtcHR5KHJvd3NbaV0udmFsdWUpKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4TW9kZWwucHJvdG90eXBlLmdldElzQW5zd2VyZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLmdldElzQW5zd2VyZWQuY2FsbCh0aGlzKSAmJiB0aGlzLmhhc1ZhbHVlc0luQWxsUm93cygpO1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhNb2RlbC5wcm90b3R5cGUuY3JlYXRlTWF0cml4Um93ID0gZnVuY3Rpb24gKGl0ZW0sIGZ1bGxOYW1lLCB2YWx1ZSkge1xuICAgICAgICB2YXIgcm93ID0gbmV3IE1hdHJpeFJvd01vZGVsKGl0ZW0sIGZ1bGxOYW1lLCB0aGlzLCB2YWx1ZSk7XG4gICAgICAgIHRoaXMub25NYXRyaXhSb3dDcmVhdGVkKHJvdyk7XG4gICAgICAgIHJldHVybiByb3c7XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeE1vZGVsLnByb3RvdHlwZS5vbk1hdHJpeFJvd0NyZWF0ZWQgPSBmdW5jdGlvbiAocm93KSB7IH07XG4gICAgUXVlc3Rpb25NYXRyaXhNb2RlbC5wcm90b3R5cGUuc2V0UXVlc3Rpb25WYWx1ZSA9IGZ1bmN0aW9uIChuZXdWYWx1ZSwgdXBkYXRlSXNBbnN3ZXJlZCkge1xuICAgICAgICBpZiAodXBkYXRlSXNBbnN3ZXJlZCA9PT0gdm9pZCAwKSB7IHVwZGF0ZUlzQW5zd2VyZWQgPSB0cnVlOyB9XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUuc2V0UXVlc3Rpb25WYWx1ZS5jYWxsKHRoaXMsIG5ld1ZhbHVlLCB0aGlzLmlzUm93Q2hhbmdpbmcgfHwgdXBkYXRlSXNBbnN3ZXJlZCk7XG4gICAgICAgIGlmICghdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cyB8fCB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzLmxlbmd0aCA9PSAwKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLmlzUm93Q2hhbmdpbmcgPSB0cnVlO1xuICAgICAgICB2YXIgdmFsID0gdGhpcy52YWx1ZTtcbiAgICAgICAgaWYgKCF2YWwpXG4gICAgICAgICAgICB2YWwgPSB7fTtcbiAgICAgICAgaWYgKHRoaXMucm93cy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93c1swXS52YWx1ZSA9IHZhbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciByb3cgPSB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzW2ldO1xuICAgICAgICAgICAgICAgIHZhciByb3dWYWwgPSB2YWxbcm93Lm5hbWVdO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzVmFsdWVFbXB0eShyb3dWYWwpKVxuICAgICAgICAgICAgICAgICAgICByb3dWYWwgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3NbaV0udmFsdWUgPSByb3dWYWw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVJc0Fuc3dlcmVkKCk7XG4gICAgICAgIHRoaXMuaXNSb3dDaGFuZ2luZyA9IGZhbHNlO1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhNb2RlbC5wcm90b3R5cGUuZ2V0RGlzcGxheVZhbHVlQ29yZSA9IGZ1bmN0aW9uIChrZXlzQXNUZXh0LCB2YWx1ZSkge1xuICAgICAgICB2YXIgcmVzID0ge307XG4gICAgICAgIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xuICAgICAgICAgICAgdmFyIG5ld0tleSA9IGtleXNBc1RleHRcbiAgICAgICAgICAgICAgICA/IF9pdGVtdmFsdWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIkl0ZW1WYWx1ZVwiXS5nZXRUZXh0T3JIdG1sQnlWYWx1ZSh0aGlzLnJvd3MsIGtleSlcbiAgICAgICAgICAgICAgICA6IGtleTtcbiAgICAgICAgICAgIGlmICghbmV3S2V5KVxuICAgICAgICAgICAgICAgIG5ld0tleSA9IGtleTtcbiAgICAgICAgICAgIHZhciBuZXdWYWx1ZSA9IF9pdGVtdmFsdWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIkl0ZW1WYWx1ZVwiXS5nZXRUZXh0T3JIdG1sQnlWYWx1ZSh0aGlzLmNvbHVtbnMsIHZhbHVlW2tleV0pO1xuICAgICAgICAgICAgaWYgKCFuZXdWYWx1ZSlcbiAgICAgICAgICAgICAgICBuZXdWYWx1ZSA9IHZhbHVlW2tleV07XG4gICAgICAgICAgICByZXNbbmV3S2V5XSA9IG5ld1ZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeE1vZGVsLnByb3RvdHlwZS5nZXRQbGFpbkRhdGEgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBpbmNsdWRlRW1wdHk6IHRydWUsXG4gICAgICAgIH07IH1cbiAgICAgICAgdmFyIHF1ZXN0aW9uUGxhaW5EYXRhID0gX3N1cGVyLnByb3RvdHlwZS5nZXRQbGFpbkRhdGEuY2FsbCh0aGlzLCBvcHRpb25zKTtcbiAgICAgICAgaWYgKCEhcXVlc3Rpb25QbGFpbkRhdGEpIHtcbiAgICAgICAgICAgIHZhciB2YWx1ZXMgPSB0aGlzLmNyZWF0ZVZhbHVlQ29weSgpO1xuICAgICAgICAgICAgcXVlc3Rpb25QbGFpbkRhdGEuaXNOb2RlID0gdHJ1ZTtcbiAgICAgICAgICAgIHF1ZXN0aW9uUGxhaW5EYXRhLmRhdGEgPSBPYmplY3Qua2V5cyh2YWx1ZXMgfHwge30pLm1hcChmdW5jdGlvbiAocm93TmFtZSkge1xuICAgICAgICAgICAgICAgIHZhciByb3cgPSBfdGhpcy5yb3dzLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gci52YWx1ZSA9PT0gcm93TmFtZTsgfSlbMF07XG4gICAgICAgICAgICAgICAgdmFyIHJvd0RhdGFJdGVtID0ge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiByb3dOYW1lLFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogISFyb3cgPyByb3cudGV4dCA6IFwicm93XCIsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZXNbcm93TmFtZV0sXG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXlWYWx1ZTogX2l0ZW12YWx1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiSXRlbVZhbHVlXCJdLmdldFRleHRPckh0bWxCeVZhbHVlKF90aGlzLnZpc2libGVDb2x1bW5zLCB2YWx1ZXNbcm93TmFtZV0pLFxuICAgICAgICAgICAgICAgICAgICBnZXRTdHJpbmc6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlb2YgdmFsID09PSBcIm9iamVjdFwiID8gSlNPTi5zdHJpbmdpZnkodmFsKSA6IHZhbDtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgaXNOb2RlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHZhciBpdGVtID0gX2l0ZW12YWx1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiSXRlbVZhbHVlXCJdLmdldEl0ZW1CeVZhbHVlKF90aGlzLnZpc2libGVDb2x1bW5zLCB2YWx1ZXNbcm93TmFtZV0pO1xuICAgICAgICAgICAgICAgIGlmICghIWl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgKG9wdGlvbnMuY2FsY3VsYXRpb25zIHx8IFtdKS5mb3JFYWNoKGZ1bmN0aW9uIChjYWxjdWxhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcm93RGF0YUl0ZW1bY2FsY3VsYXRpb24ucHJvcGVydHlOYW1lXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbVtjYWxjdWxhdGlvbi5wcm9wZXJ0eU5hbWVdO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJvd0RhdGFJdGVtO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHF1ZXN0aW9uUGxhaW5EYXRhO1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhNb2RlbC5wcm90b3R5cGUuYWRkQ29uZGl0aW9uT2JqZWN0c0J5Q29udGV4dCA9IGZ1bmN0aW9uIChvYmplY3RzLCBjb250ZXh0KSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5yb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgcm93ID0gdGhpcy5yb3dzW2ldO1xuICAgICAgICAgICAgaWYgKCEhcm93LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgb2JqZWN0cy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogdGhpcy5nZXRWYWx1ZU5hbWUoKSArIFwiLlwiICsgcm93LnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICB0ZXh0OiB0aGlzLnByb2Nlc3NlZFRpdGxlICsgXCIuXCIgKyByb3cuY2FsY3VsYXRlZFRleHQsXG4gICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uOiB0aGlzLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeE1vZGVsLnByb3RvdHlwZS5nZXRDb25kaXRpb25Kc29uID0gZnVuY3Rpb24gKG9wZXJhdG9yLCBwYXRoKSB7XG4gICAgICAgIGlmIChvcGVyYXRvciA9PT0gdm9pZCAwKSB7IG9wZXJhdG9yID0gbnVsbDsgfVxuICAgICAgICBpZiAocGF0aCA9PT0gdm9pZCAwKSB7IHBhdGggPSBudWxsOyB9XG4gICAgICAgIGlmICghcGF0aClcbiAgICAgICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLmdldENvbmRpdGlvbkpzb24uY2FsbCh0aGlzKTtcbiAgICAgICAgdmFyIHF1ZXN0aW9uID0gbmV3IF9xdWVzdGlvbl9kcm9wZG93bl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fW1wiUXVlc3Rpb25Ecm9wZG93bk1vZGVsXCJdKHBhdGgpO1xuICAgICAgICBxdWVzdGlvbi5jaG9pY2VzID0gdGhpcy5jb2x1bW5zO1xuICAgICAgICB2YXIganNvbiA9IG5ldyBfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiSnNvbk9iamVjdFwiXSgpLnRvSnNvbk9iamVjdChxdWVzdGlvbik7XG4gICAgICAgIGpzb25bXCJ0eXBlXCJdID0gcXVlc3Rpb24uZ2V0VHlwZSgpO1xuICAgICAgICByZXR1cm4ganNvbjtcbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4TW9kZWwucHJvdG90eXBlLmNsZWFyVmFsdWVJZkludmlzaWJsZUNvcmUgPSBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUuY2xlYXJWYWx1ZUlmSW52aXNpYmxlQ29yZS5jYWxsKHRoaXMsIHJlYXNvbik7XG4gICAgICAgIGlmICh0aGlzLmhhc1Jvd3MpIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJJbnZpc2libGVWYWx1ZXNJblJvd3MoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhNb2RlbC5wcm90b3R5cGUuZ2V0Rmlyc3RJbnB1dEVsZW1lbnRJZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHJvd3MgPSB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzO1xuICAgICAgICBpZiAoIXJvd3MpXG4gICAgICAgICAgICByb3dzID0gdGhpcy52aXNpYmxlUm93cztcbiAgICAgICAgaWYgKHJvd3MubGVuZ3RoID4gMCAmJiB0aGlzLnZpc2libGVDb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlucHV0SWQgKyBcIl9cIiArIHJvd3NbMF0ubmFtZSArIFwiX1wiICsgMDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5nZXRGaXJzdElucHV0RWxlbWVudElkLmNhbGwodGhpcyk7XG4gICAgfTtcbiAgICAvL0lNYXRyaXhEYXRhXG4gICAgUXVlc3Rpb25NYXRyaXhNb2RlbC5wcm90b3R5cGUub25NYXRyaXhSb3dDaGFuZ2VkID0gZnVuY3Rpb24gKHJvdykge1xuICAgICAgICBpZiAodGhpcy5pc1Jvd0NoYW5naW5nKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLmlzUm93Q2hhbmdpbmcgPSB0cnVlO1xuICAgICAgICBpZiAoIXRoaXMuaGFzUm93cykge1xuICAgICAgICAgICAgdGhpcy5zZXROZXdWYWx1ZShyb3cudmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIG5ld1ZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICAgICAgICAgIGlmICghbmV3VmFsdWUpIHtcbiAgICAgICAgICAgICAgICBuZXdWYWx1ZSA9IHt9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV3VmFsdWVbcm93Lm5hbWVdID0gcm93LnZhbHVlO1xuICAgICAgICAgICAgdGhpcy5zZXROZXdWYWx1ZShuZXdWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc1Jvd0NoYW5naW5nID0gZmFsc2U7XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeE1vZGVsLnByb3RvdHlwZS5nZXRDb3JyZWN0ZWRSb3dWYWx1ZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY29sdW1ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHZhbHVlID09PSB0aGlzLmNvbHVtbnNbaV0udmFsdWUpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jb2x1bW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc1R3b1ZhbHVlRXF1YWxzKHZhbHVlLCB0aGlzLmNvbHVtbnNbaV0udmFsdWUpKVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbHVtbnNbaV0udmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhNb2RlbC5wcm90b3R5cGUuZ2V0U2VhcmNoYWJsZUl0ZW1WYWx1ZUtleXMgPSBmdW5jdGlvbiAoa2V5cykge1xuICAgICAgICBrZXlzLnB1c2goXCJjb2x1bW5zXCIpO1xuICAgICAgICBrZXlzLnB1c2goXCJyb3dzXCIpO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uTWF0cml4TW9kZWwucHJvdG90eXBlLCBcIlN1cnZleU1vZGVsXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdXJ2ZXk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBRdWVzdGlvbk1hdHJpeE1vZGVsLnByb3RvdHlwZS5nZXRDb2x1bW5IZWFkZXJXcmFwcGVyQ29tcG9uZW50TmFtZSA9IGZ1bmN0aW9uIChjZWxsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLlN1cnZleU1vZGVsLmdldEVsZW1lbnRXcmFwcGVyQ29tcG9uZW50TmFtZSh7IGNvbHVtbjogY2VsbCB9LCBcImNvbHVtbi1oZWFkZXJcIik7XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeE1vZGVsLnByb3RvdHlwZS5nZXRDb2x1bW5IZWFkZXJXcmFwcGVyQ29tcG9uZW50RGF0YSA9IGZ1bmN0aW9uIChjZWxsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLlN1cnZleU1vZGVsLmdldEVsZW1lbnRXcmFwcGVyQ29tcG9uZW50RGF0YSh7IGNvbHVtbjogY2VsbCB9LCBcImNvbHVtbi1oZWFkZXJcIik7XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeE1vZGVsLnByb3RvdHlwZS5nZXRSb3dIZWFkZXJXcmFwcGVyQ29tcG9uZW50TmFtZSA9IGZ1bmN0aW9uIChjZWxsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLlN1cnZleU1vZGVsLmdldEVsZW1lbnRXcmFwcGVyQ29tcG9uZW50TmFtZSh7IHJvdzogY2VsbCB9LCBcInJvdy1oZWFkZXJcIik7XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeE1vZGVsLnByb3RvdHlwZS5nZXRSb3dIZWFkZXJXcmFwcGVyQ29tcG9uZW50RGF0YSA9IGZ1bmN0aW9uIChjZWxsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLlN1cnZleU1vZGVsLmdldEVsZW1lbnRXcmFwcGVyQ29tcG9uZW50RGF0YSh7IHJvdzogY2VsbCB9LCBcInJvdy1oZWFkZXJcIik7XG4gICAgfTtcbiAgICByZXR1cm4gUXVlc3Rpb25NYXRyaXhNb2RlbDtcbn0oX21hcnRpeEJhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIlF1ZXN0aW9uTWF0cml4QmFzZU1vZGVsXCJdKSk7XG5cbl9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJTZXJpYWxpemVyXCJdLmFkZENsYXNzKFwibWF0cml4XCIsIFtcbiAgICBcInJvd1RpdGxlV2lkdGhcIixcbiAgICB7XG4gICAgICAgIG5hbWU6IFwiY29sdW1uczppdGVtdmFsdWVbXVwiLCB1bmlxdWVQcm9wZXJ0eTogXCJ2YWx1ZVwiLFxuICAgICAgICBiYXNlVmFsdWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBfc3VydmV5U3RyaW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fW1wic3VydmV5TG9jYWxpemF0aW9uXCJdLmdldFN0cmluZyhcIm1hdHJpeF9jb2x1bW5cIik7XG4gICAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICAgIG5hbWU6IFwicm93czppdGVtdmFsdWVbXVwiLCB1bmlxdWVQcm9wZXJ0eTogXCJ2YWx1ZVwiLFxuICAgICAgICBiYXNlVmFsdWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBfc3VydmV5U3RyaW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fW1wic3VydmV5TG9jYWxpemF0aW9uXCJdLmdldFN0cmluZyhcIm1hdHJpeF9yb3dcIik7XG4gICAgICAgIH0sXG4gICAgfSxcbiAgICB7IG5hbWU6IFwiY2VsbHM6Y2VsbHNcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImNlbGxzXCIgfSxcbiAgICB7XG4gICAgICAgIG5hbWU6IFwicm93c09yZGVyXCIsXG4gICAgICAgIGRlZmF1bHQ6IFwiaW5pdGlhbFwiLFxuICAgICAgICBjaG9pY2VzOiBbXCJpbml0aWFsXCIsIFwicmFuZG9tXCJdLFxuICAgIH0sXG4gICAgXCJpc0FsbFJvd1JlcXVpcmVkOmJvb2xlYW5cIixcbiAgICBcImhpZGVJZlJvd3NFbXB0eTpib29sZWFuXCIsXG5dLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBRdWVzdGlvbk1hdHJpeE1vZGVsKFwiXCIpO1xufSwgXCJtYXRyaXhiYXNlXCIpO1xuX3F1ZXN0aW9uZmFjdG9yeV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fW1wiUXVlc3Rpb25GYWN0b3J5XCJdLkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJtYXRyaXhcIiwgZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB2YXIgcSA9IG5ldyBRdWVzdGlvbk1hdHJpeE1vZGVsKG5hbWUpO1xuICAgIHEucm93cyA9IF9xdWVzdGlvbmZhY3RvcnlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1tcIlF1ZXN0aW9uRmFjdG9yeVwiXS5EZWZhdWx0Um93cztcbiAgICBxLmNvbHVtbnMgPSBfcXVlc3Rpb25mYWN0b3J5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bXCJRdWVzdGlvbkZhY3RvcnlcIl0uRGVmYXVsdENvbHVtcztcbiAgICByZXR1cm4gcTtcbn0pO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3F1ZXN0aW9uX21hdHJpeGRyb3Bkb3duLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3F1ZXN0aW9uX21hdHJpeGRyb3Bkb3duLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IE1hdHJpeERyb3Bkb3duUm93TW9kZWwsIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJNYXRyaXhEcm9wZG93blJvd01vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gTWF0cml4RHJvcGRvd25Sb3dNb2RlbDsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcXVlc3Rpb25fbWF0cml4ZHJvcGRvd25iYXNlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3F1ZXN0aW9uX21hdHJpeGRyb3Bkb3duYmFzZSAqLyBcIi4vc3JjL3F1ZXN0aW9uX21hdHJpeGRyb3Bkb3duYmFzZS50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9qc29ub2JqZWN0ICovIFwiLi9zcmMvanNvbm9iamVjdC50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfaXRlbXZhbHVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2l0ZW12YWx1ZSAqLyBcIi4vc3JjL2l0ZW12YWx1ZS50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcXVlc3Rpb25mYWN0b3J5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3F1ZXN0aW9uZmFjdG9yeSAqLyBcIi4vc3JjL3F1ZXN0aW9uZmFjdG9yeS50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfaGVscGVyc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9oZWxwZXJzICovIFwiLi9zcmMvaGVscGVycy50c1wiKTtcbnZhciBfX2V4dGVuZHMgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xuXG5cblxuXG5cbnZhciBNYXRyaXhEcm9wZG93blJvd01vZGVsID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhNYXRyaXhEcm9wZG93blJvd01vZGVsLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIE1hdHJpeERyb3Bkb3duUm93TW9kZWwobmFtZSwgaXRlbSwgZGF0YSwgdmFsdWUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgZGF0YSwgdmFsdWUpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICBfdGhpcy5pdGVtID0gaXRlbTtcbiAgICAgICAgX3RoaXMuYnVpbGRDZWxscyh2YWx1ZSk7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1hdHJpeERyb3Bkb3duUm93TW9kZWwucHJvdG90eXBlLCBcInJvd05hbWVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm5hbWU7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTWF0cml4RHJvcGRvd25Sb3dNb2RlbC5wcm90b3R5cGUsIFwidGV4dFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXRlbS50ZXh0O1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1hdHJpeERyb3Bkb3duUm93TW9kZWwucHJvdG90eXBlLCBcImxvY1RleHRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLml0ZW0ubG9jVGV4dDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIHJldHVybiBNYXRyaXhEcm9wZG93blJvd01vZGVsO1xufShfcXVlc3Rpb25fbWF0cml4ZHJvcGRvd25iYXNlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZVwiXSkpO1xuXG4vKipcbiAgKiBBIGNsYXNzIHRoYXQgZGVzY3JpYmVzIHRoZSBNdWx0aS1TZWxlY3QgTWF0cml4IHF1ZXN0aW9uIHR5cGUuIE11bHRpLVNlbGVjdCBNYXRyaXggYWxsb3dzIHlvdSB0byB1c2UgdGhlIFtEcm9wZG93bl0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9xdWVzdGlvbmRyb3Bkb3dubW9kZWwpLCBbQ2hlY2tib3hdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vcXVlc3Rpb25jaGVja2JveG1vZGVsKSwgW1JhZGlvZ3JvdXBdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vcXVlc3Rpb25yYWRpb2dyb3VwbW9kZWwpLCBbVGV4dF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9xdWVzdGlvbnRleHRtb2RlbCksIGFuZCBbQ29tbWVudF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9xdWVzdGlvbmNvbW1lbnRtb2RlbCkgcXVlc3Rpb24gdHlwZXMgYXMgY2VsbCBlZGl0b3JzLlxuICpcbiAqIFtWaWV3IERlbW9dKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2V4YW1wbGVzL3F1ZXN0aW9udHlwZS1tYXRyaXhkcm9wZG93bi8gKGxpbmtTdHlsZSkpXG4gKi9cbnZhciBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWwgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWwobmFtZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBuYW1lKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcInRvdGFsVGV4dFwiLCBfdGhpcywgdHJ1ZSk7XG4gICAgICAgIF90aGlzLnJlZ2lzdGVyUHJvcGVydHlDaGFuZ2VkSGFuZGxlcnMoW1wicm93c1wiXSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMuY2xlYXJHZW5lcmF0ZWRSb3dzKCk7XG4gICAgICAgICAgICBfdGhpcy5yZXNldFJlbmRlcmVkVGFibGUoKTtcbiAgICAgICAgICAgIGlmICghX3RoaXMuZmlsdGVySXRlbXMoKSkge1xuICAgICAgICAgICAgICAgIF90aGlzLm9uUm93c0NoYW5nZWQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF90aGlzLmNsZWFySW5jb3JyZWN0VmFsdWVzKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBfdGhpcy5yZWdpc3RlclByb3BlcnR5Q2hhbmdlZEhhbmRsZXJzKFtcImhpZGVJZlJvd3NFbXB0eVwiXSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMudXBkYXRlVmlzaWJpbGl0eUJhc2VkT25Sb3dzKCk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbC5wcm90b3R5cGUuZ2V0VHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIFwibWF0cml4ZHJvcGRvd25cIjtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWwucHJvdG90eXBlLCBcInRvdGFsVGV4dFwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBIHRpdGxlIGZvciB0aGUgdG90YWwgcm93LiBBcHBsaWVzIGlmIGF0IGxlYXN0IG9uZSBjb2x1bW4gZGlzcGxheXMgdG90YWwgdmFsdWVzLlxuICAgICAgICAgKiBAc2VlIHJvd1RpdGxlV2lkdGhcbiAgICAgICAgICogQHNlZSBjb2x1bW5zXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcInRvdGFsVGV4dFwiLCBcIlwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcInRvdGFsVGV4dFwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbC5wcm90b3R5cGUsIFwibG9jVG90YWxUZXh0XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcInRvdGFsVGV4dFwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbC5wcm90b3R5cGUuZ2V0Rm9vdGVyVGV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jVG90YWxUZXh0O1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsLnByb3RvdHlwZS5nZXRSb3dUaXRsZVdpZHRoID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yb3dUaXRsZVdpZHRoO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbC5wcm90b3R5cGUsIFwiaGlkZUlmUm93c0VtcHR5XCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB3aGV0aGVyIHRvIGhpZGUgdGhlIHF1ZXN0aW9uIHdoZW4gdGhlIG1hdHJpeCBoYXMgbm8gdmlzaWJsZSByb3dzLlxuICAgICAgICAgKiBAc2VlIHJvd3NWaXNpYmxlSWZcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImhpZGVJZlJvd3NFbXB0eVwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJoaWRlSWZSb3dzRW1wdHlcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbC5wcm90b3R5cGUuZ2V0RGlzcGxheVZhbHVlQ29yZSA9IGZ1bmN0aW9uIChrZXlzQXNUZXh0LCB2YWx1ZSkge1xuICAgICAgICBpZiAoIXZhbHVlKVxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB2YXIgcm93cyA9IHRoaXMudmlzaWJsZVJvd3M7XG4gICAgICAgIHZhciByZXMgPSB7fTtcbiAgICAgICAgaWYgKCFyb3dzKVxuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgcm93VmFsdWUgPSByb3dzW2ldLnJvd05hbWU7XG4gICAgICAgICAgICB2YXIgdmFsID0gdmFsdWVbcm93VmFsdWVdO1xuICAgICAgICAgICAgaWYgKCF2YWwpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBpZiAoa2V5c0FzVGV4dCkge1xuICAgICAgICAgICAgICAgIHZhciBkaXNwbGF5Um93VmFsdWUgPSBfaXRlbXZhbHVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJJdGVtVmFsdWVcIl0uZ2V0VGV4dE9ySHRtbEJ5VmFsdWUodGhpcy5yb3dzLCByb3dWYWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKCEhZGlzcGxheVJvd1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJvd1ZhbHVlID0gZGlzcGxheVJvd1ZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc1tyb3dWYWx1ZV0gPSB0aGlzLmdldFJvd0Rpc3BsYXlWYWx1ZShrZXlzQXNUZXh0LCByb3dzW2ldLCB2YWwpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWwucHJvdG90eXBlLmdldENvbmRpdGlvbk9iamVjdFJvd05hbWUgPSBmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIFwiLlwiICsgdGhpcy5yb3dzW2luZGV4XS52YWx1ZTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbC5wcm90b3R5cGUuZ2V0Q29uZGl0aW9uT2JqZWN0Um93VGV4dCA9IGZ1bmN0aW9uIChpbmRleCkge1xuICAgICAgICByZXR1cm4gXCIuXCIgKyB0aGlzLnJvd3NbaW5kZXhdLmNhbGN1bGF0ZWRUZXh0O1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsLnByb3RvdHlwZS5nZXRDb25kaXRpb25PYmplY3RzUm93SW5kZWNlcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHJlcyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucm93cy5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIHJlcy5wdXNoKGkpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsLnByb3RvdHlwZS5pc05ld1ZhbHVlQ29ycmVjdCA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgcmV0dXJuIF9oZWxwZXJzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bXCJIZWxwZXJzXCJdLmlzVmFsdWVPYmplY3QodmFsLCB0cnVlKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbC5wcm90b3R5cGUuY2xlYXJJbmNvcnJlY3RWYWx1ZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB2YWwgPSB0aGlzLnZhbHVlO1xuICAgICAgICBpZiAoIXZhbClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIG5ld1ZhbCA9IG51bGw7XG4gICAgICAgIHZhciBpc0NoYW5nZWQgPSBmYWxzZTtcbiAgICAgICAgdmFyIHJvd3MgPSAhIXRoaXMuZmlsdGVyZWRSb3dzID8gdGhpcy5maWx0ZXJlZFJvd3MgOiB0aGlzLnJvd3M7XG4gICAgICAgIGZvciAodmFyIGtleSBpbiB2YWwpIHtcbiAgICAgICAgICAgIGlmIChfaXRlbXZhbHVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJJdGVtVmFsdWVcIl0uZ2V0SXRlbUJ5VmFsdWUocm93cywga2V5KSkge1xuICAgICAgICAgICAgICAgIGlmIChuZXdWYWwgPT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgbmV3VmFsID0ge307XG4gICAgICAgICAgICAgICAgbmV3VmFsW2tleV0gPSB2YWxba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlzQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQ2hhbmdlZCkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG5ld1ZhbDtcbiAgICAgICAgfVxuICAgICAgICBfc3VwZXIucHJvdG90eXBlLmNsZWFySW5jb3JyZWN0VmFsdWVzLmNhbGwodGhpcyk7XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWwucHJvdG90eXBlLmNsZWFyVmFsdWVJZkludmlzaWJsZUNvcmUgPSBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUuY2xlYXJWYWx1ZUlmSW52aXNpYmxlQ29yZS5jYWxsKHRoaXMsIHJlYXNvbik7XG4gICAgICAgIHRoaXMuY2xlYXJJbnZpc2libGVWYWx1ZXNJblJvd3MoKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbC5wcm90b3R5cGUuZ2VuZXJhdGVSb3dzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IEFycmF5KCk7XG4gICAgICAgIHZhciByb3dzID0gISF0aGlzLmZpbHRlcmVkUm93cyA/IHRoaXMuZmlsdGVyZWRSb3dzIDogdGhpcy5yb3dzO1xuICAgICAgICBpZiAoIXJvd3MgfHwgcm93cy5sZW5ndGggPT09IDApXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB2YXIgdmFsID0gdGhpcy52YWx1ZTtcbiAgICAgICAgaWYgKCF2YWwpXG4gICAgICAgICAgICB2YWwgPSB7fTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc1ZhbHVlRW1wdHkocm93c1tpXS52YWx1ZSkpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICByZXN1bHQucHVzaCh0aGlzLmNyZWF0ZU1hdHJpeFJvdyhyb3dzW2ldLCB2YWxbcm93c1tpXS52YWx1ZV0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsLnByb3RvdHlwZS5jcmVhdGVNYXRyaXhSb3cgPSBmdW5jdGlvbiAoaXRlbSwgdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBNYXRyaXhEcm9wZG93blJvd01vZGVsKGl0ZW0udmFsdWUsIGl0ZW0sIHRoaXMsIHZhbHVlKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbC5wcm90b3R5cGUuZ2V0U2VhcmNoYWJsZUl0ZW1WYWx1ZUtleXMgPSBmdW5jdGlvbiAoa2V5cykge1xuICAgICAgICBrZXlzLnB1c2goXCJyb3dzXCIpO1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsLnByb3RvdHlwZS51cGRhdGVQcm9ncmVzc0luZm9CeVZhbHVlcyA9IGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgdmFyIHZhbCA9IHRoaXMudmFsdWU7XG4gICAgICAgIGlmICghdmFsKVxuICAgICAgICAgICAgdmFsID0ge307XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5yb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgcm93ID0gdGhpcy5yb3dzW2ldO1xuICAgICAgICAgICAgdmFyIHJvd1ZhbHVlID0gdmFsW3Jvdy52YWx1ZV07XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVByb2dyZXNzSW5mb0J5Um93KHJlcywgISFyb3dWYWx1ZSA/IHJvd1ZhbHVlIDoge30pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsO1xufShfcXVlc3Rpb25fbWF0cml4ZHJvcGRvd25iYXNlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlXCJdKSk7XG5cbl9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJTZXJpYWxpemVyXCJdLmFkZENsYXNzKFwibWF0cml4ZHJvcGRvd25cIiwgW1xuICAgIHtcbiAgICAgICAgbmFtZTogXCJyb3dzOml0ZW12YWx1ZVtdXCIsIHVuaXF1ZVByb3BlcnR5OiBcInZhbHVlXCJcbiAgICB9LFxuICAgIFwicm93c1Zpc2libGVJZjpjb25kaXRpb25cIixcbiAgICBcInJvd1RpdGxlV2lkdGhcIixcbiAgICB7IG5hbWU6IFwidG90YWxUZXh0XCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NUb3RhbFRleHRcIiB9LFxuICAgIFwiaGlkZUlmUm93c0VtcHR5OmJvb2xlYW5cIlxuXSwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsKFwiXCIpO1xufSwgXCJtYXRyaXhkcm9wZG93bmJhc2VcIik7XG5fcXVlc3Rpb25mYWN0b3J5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJRdWVzdGlvbkZhY3RvcnlcIl0uSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcIm1hdHJpeGRyb3Bkb3duXCIsIGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdmFyIHEgPSBuZXcgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsKG5hbWUpO1xuICAgIHEuY2hvaWNlcyA9IFsxLCAyLCAzLCA0LCA1XTtcbiAgICBxLnJvd3MgPSBfcXVlc3Rpb25mYWN0b3J5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJRdWVzdGlvbkZhY3RvcnlcIl0uRGVmYXVsdFJvd3M7XG4gICAgX3F1ZXN0aW9uX21hdHJpeGRyb3Bkb3duYmFzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZVwiXS5hZGREZWZhdWx0Q29sdW1ucyhxKTtcbiAgICByZXR1cm4gcTtcbn0pO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3F1ZXN0aW9uX21hdHJpeGRyb3Bkb3duYmFzZS50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvcXVlc3Rpb25fbWF0cml4ZHJvcGRvd25iYXNlLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBNYXRyaXhEcm9wZG93bkNlbGwsIE1hdHJpeERyb3Bkb3duVG90YWxDZWxsLCBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSwgTWF0cml4RHJvcGRvd25Ub3RhbFJvd01vZGVsLCBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIk1hdHJpeERyb3Bkb3duQ2VsbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIE1hdHJpeERyb3Bkb3duQ2VsbDsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiTWF0cml4RHJvcGRvd25Ub3RhbENlbGxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBNYXRyaXhEcm9wZG93blRvdGFsQ2VsbDsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2VcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZTsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiTWF0cml4RHJvcGRvd25Ub3RhbFJvd01vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gTWF0cml4RHJvcGRvd25Ub3RhbFJvd01vZGVsOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZTsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vanNvbm9iamVjdCAqLyBcIi4vc3JjL2pzb25vYmplY3QudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX21hcnRpeEJhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vbWFydGl4QmFzZSAqLyBcIi4vc3JjL21hcnRpeEJhc2UudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2hlbHBlcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vaGVscGVycyAqLyBcIi4vc3JjL2hlbHBlcnMudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Jhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYmFzZSAqLyBcIi4vc3JjL2Jhc2UudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3N1cnZleV9lbGVtZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3N1cnZleS1lbGVtZW50ICovIFwiLi9zcmMvc3VydmV5LWVsZW1lbnQudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3RleHRQcmVQcm9jZXNzb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vdGV4dFByZVByb2Nlc3NvciAqLyBcIi4vc3JjL3RleHRQcmVQcm9jZXNzb3IudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2l0ZW12YWx1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9pdGVtdmFsdWUgKi8gXCIuL3NyYy9pdGVtdmFsdWUudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3F1ZXN0aW9uZmFjdG9yeV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9xdWVzdGlvbmZhY3RvcnkgKi8gXCIuL3NyYy9xdWVzdGlvbmZhY3RvcnkudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Z1bmN0aW9uc2ZhY3RvcnlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZnVuY3Rpb25zZmFjdG9yeSAqLyBcIi4vc3JjL2Z1bmN0aW9uc2ZhY3RvcnkudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NldHRpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3NldHRpbmdzICovIFwiLi9zcmMvc2V0dGluZ3MudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Vycm9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9lcnJvciAqLyBcIi4vc3JjL2Vycm9yLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF91dGlsc19jc3NDbGFzc0J1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3V0aWxzL2Nzc0NsYXNzQnVpbGRlciAqLyBcIi4vc3JjL3V0aWxzL2Nzc0NsYXNzQnVpbGRlci50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcXVlc3Rpb25fbWF0cml4ZHJvcGRvd25jb2x1bW5fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3F1ZXN0aW9uX21hdHJpeGRyb3Bkb3duY29sdW1uICovIFwiLi9zcmMvcXVlc3Rpb25fbWF0cml4ZHJvcGRvd25jb2x1bW4udHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3F1ZXN0aW9uX21hdHJpeGRyb3Bkb3ducmVuZGVyZWRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3F1ZXN0aW9uX21hdHJpeGRyb3Bkb3ducmVuZGVyZWQgKi8gXCIuL3NyYy9xdWVzdGlvbl9tYXRyaXhkcm9wZG93bnJlbmRlcmVkLnRzXCIpO1xudmFyIF9fZXh0ZW5kcyA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxudmFyIE1hdHJpeERyb3Bkb3duQ2VsbCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBNYXRyaXhEcm9wZG93bkNlbGwoY29sdW1uLCByb3csIGRhdGEpIHtcbiAgICAgICAgdGhpcy5jb2x1bW4gPSBjb2x1bW47XG4gICAgICAgIHRoaXMucm93ID0gcm93O1xuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgICAgICB0aGlzLnF1ZXN0aW9uVmFsdWUgPSB0aGlzLmNyZWF0ZVF1ZXN0aW9uKGNvbHVtbiwgcm93LCBkYXRhKTtcbiAgICAgICAgdGhpcy5xdWVzdGlvblZhbHVlLnVwZGF0ZUN1c3RvbVdpZGdldCgpO1xuICAgIH1cbiAgICBNYXRyaXhEcm9wZG93bkNlbGwucHJvdG90eXBlLmxvY1N0cnNDaGFuZ2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnF1ZXN0aW9uLmxvY1N0cnNDaGFuZ2VkKCk7XG4gICAgfTtcbiAgICBNYXRyaXhEcm9wZG93bkNlbGwucHJvdG90eXBlLmNyZWF0ZVF1ZXN0aW9uID0gZnVuY3Rpb24gKGNvbHVtbiwgcm93LCBkYXRhKSB7XG4gICAgICAgIHZhciByZXMgPSBkYXRhLmNyZWF0ZVF1ZXN0aW9uKHRoaXMucm93LCB0aGlzLmNvbHVtbik7XG4gICAgICAgIHJlcy52YWxpZGF0ZVZhbHVlQ2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0YS52YWxpZGF0ZUNlbGwocm93LCBjb2x1bW4ubmFtZSwgcm93LnZhbHVlKTtcbiAgICAgICAgfTtcbiAgICAgICAgX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkN1c3RvbVByb3BlcnRpZXNDb2xsZWN0aW9uXCJdLmdldFByb3BlcnRpZXMoY29sdW1uLmdldFR5cGUoKSkuZm9yRWFjaChmdW5jdGlvbiAocHJvcGVydHkpIHtcbiAgICAgICAgICAgIHZhciBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eS5uYW1lO1xuICAgICAgICAgICAgaWYgKGNvbHVtbltwcm9wZXJ0eU5hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXNbcHJvcGVydHlOYW1lXSA9IGNvbHVtbltwcm9wZXJ0eU5hbWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNYXRyaXhEcm9wZG93bkNlbGwucHJvdG90eXBlLCBcInF1ZXN0aW9uXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5xdWVzdGlvblZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1hdHJpeERyb3Bkb3duQ2VsbC5wcm90b3R5cGUsIFwidmFsdWVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5xdWVzdGlvbi52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgTWF0cml4RHJvcGRvd25DZWxsLnByb3RvdHlwZS5ydW5Db25kaXRpb24gPSBmdW5jdGlvbiAodmFsdWVzLCBwcm9wZXJ0aWVzKSB7XG4gICAgICAgIHRoaXMucXVlc3Rpb24ucnVuQ29uZGl0aW9uKHZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgfTtcbiAgICByZXR1cm4gTWF0cml4RHJvcGRvd25DZWxsO1xufSgpKTtcblxudmFyIE1hdHJpeERyb3Bkb3duVG90YWxDZWxsID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhNYXRyaXhEcm9wZG93blRvdGFsQ2VsbCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBNYXRyaXhEcm9wZG93blRvdGFsQ2VsbChjb2x1bW4sIHJvdywgZGF0YSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBjb2x1bW4sIHJvdywgZGF0YSkgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuY29sdW1uID0gY29sdW1uO1xuICAgICAgICBfdGhpcy5yb3cgPSByb3c7XG4gICAgICAgIF90aGlzLmRhdGEgPSBkYXRhO1xuICAgICAgICBfdGhpcy51cGRhdGVDZWxsUXVlc3Rpb24oKTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBNYXRyaXhEcm9wZG93blRvdGFsQ2VsbC5wcm90b3R5cGUuY3JlYXRlUXVlc3Rpb24gPSBmdW5jdGlvbiAoY29sdW1uLCByb3csIGRhdGEpIHtcbiAgICAgICAgdmFyIHJlcyA9IF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJTZXJpYWxpemVyXCJdLmNyZWF0ZUNsYXNzKFwiZXhwcmVzc2lvblwiKTtcbiAgICAgICAgcmVzLnNldFN1cnZleUltcGwocm93KTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9O1xuICAgIE1hdHJpeERyb3Bkb3duVG90YWxDZWxsLnByb3RvdHlwZS5sb2NTdHJzQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy51cGRhdGVDZWxsUXVlc3Rpb24oKTtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5sb2NTdHJzQ2hhbmdlZC5jYWxsKHRoaXMpO1xuICAgIH07XG4gICAgTWF0cml4RHJvcGRvd25Ub3RhbENlbGwucHJvdG90eXBlLnVwZGF0ZUNlbGxRdWVzdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5xdWVzdGlvbi5sb2NDYWxjdWxhdGlvbigpO1xuICAgICAgICB0aGlzLmNvbHVtbi51cGRhdGVDZWxsUXVlc3Rpb24odGhpcy5xdWVzdGlvbiwgbnVsbCwgZnVuY3Rpb24gKGpzb24pIHtcbiAgICAgICAgICAgIGRlbGV0ZSBqc29uW1wiZGVmYXVsdFZhbHVlXCJdO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5xdWVzdGlvbi5leHByZXNzaW9uID0gdGhpcy5nZXRUb3RhbEV4cHJlc3Npb24oKTtcbiAgICAgICAgdGhpcy5xdWVzdGlvbi5mb3JtYXQgPSB0aGlzLmNvbHVtbi50b3RhbEZvcm1hdDtcbiAgICAgICAgdGhpcy5xdWVzdGlvbi5jdXJyZW5jeSA9IHRoaXMuY29sdW1uLnRvdGFsQ3VycmVuY3k7XG4gICAgICAgIHRoaXMucXVlc3Rpb24uZGlzcGxheVN0eWxlID0gdGhpcy5jb2x1bW4udG90YWxEaXNwbGF5U3R5bGU7XG4gICAgICAgIHRoaXMucXVlc3Rpb24ubWF4aW11bUZyYWN0aW9uRGlnaXRzID0gdGhpcy5jb2x1bW4udG90YWxNYXhpbXVtRnJhY3Rpb25EaWdpdHM7XG4gICAgICAgIHRoaXMucXVlc3Rpb24ubWluaW11bUZyYWN0aW9uRGlnaXRzID0gdGhpcy5jb2x1bW4udG90YWxNaW5pbXVtRnJhY3Rpb25EaWdpdHM7XG4gICAgICAgIHRoaXMucXVlc3Rpb24udW5sb2NDYWxjdWxhdGlvbigpO1xuICAgICAgICB0aGlzLnF1ZXN0aW9uLnJ1bklmUmVhZE9ubHkgPSB0cnVlO1xuICAgIH07XG4gICAgTWF0cml4RHJvcGRvd25Ub3RhbENlbGwucHJvdG90eXBlLmdldFRvdGFsRXhwcmVzc2lvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCEhdGhpcy5jb2x1bW4udG90YWxFeHByZXNzaW9uKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uLnRvdGFsRXhwcmVzc2lvbjtcbiAgICAgICAgaWYgKHRoaXMuY29sdW1uLnRvdGFsVHlwZSA9PSBcIm5vbmVcIilcbiAgICAgICAgICAgIHJldHVybiBcIicnXCI7XG4gICAgICAgIHZhciBmdW5OYW1lID0gdGhpcy5jb2x1bW4udG90YWxUeXBlICsgXCJJbkFycmF5XCI7XG4gICAgICAgIGlmICghX2Z1bmN0aW9uc2ZhY3RvcnlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1tcIkZ1bmN0aW9uRmFjdG9yeVwiXS5JbnN0YW5jZS5oYXNGdW5jdGlvbihmdW5OYW1lKSlcbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICByZXR1cm4gZnVuTmFtZSArIFwiKHtzZWxmfSwgJ1wiICsgdGhpcy5jb2x1bW4ubmFtZSArIFwiJylcIjtcbiAgICB9O1xuICAgIHJldHVybiBNYXRyaXhEcm9wZG93blRvdGFsQ2VsbDtcbn0oTWF0cml4RHJvcGRvd25DZWxsKSk7XG5cbnZhciBNYXRyaXhEcm9wZG93blJvd1RleHRQcm9jZXNzb3IgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKE1hdHJpeERyb3Bkb3duUm93VGV4dFByb2Nlc3NvciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBNYXRyaXhEcm9wZG93blJvd1RleHRQcm9jZXNzb3Iocm93LCB2YXJpYWJsZU5hbWUsIHBhcmVudFRleHRQcm9jZXNzb3IpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgdmFyaWFibGVOYW1lKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5yb3cgPSByb3c7XG4gICAgICAgIF90aGlzLnZhcmlhYmxlTmFtZSA9IHZhcmlhYmxlTmFtZTtcbiAgICAgICAgX3RoaXMucGFyZW50VGV4dFByb2Nlc3NvciA9IHBhcmVudFRleHRQcm9jZXNzb3I7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgTWF0cml4RHJvcGRvd25Sb3dUZXh0UHJvY2Vzc29yLnByb3RvdHlwZS5nZXRQYXJlbnRUZXh0UHJvY2Vzc29yID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5wYXJlbnRUZXh0UHJvY2Vzc29yOyB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNYXRyaXhEcm9wZG93blJvd1RleHRQcm9jZXNzb3IucHJvdG90eXBlLCBcInN1cnZleVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucm93LmdldFN1cnZleSgpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgTWF0cml4RHJvcGRvd25Sb3dUZXh0UHJvY2Vzc29yLnByb3RvdHlwZS5nZXRWYWx1ZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJvdy52YWx1ZTtcbiAgICB9O1xuICAgIE1hdHJpeERyb3Bkb3duUm93VGV4dFByb2Nlc3Nvci5wcm90b3R5cGUuZ2V0UXVlc3Rpb25CeU5hbWUgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5yb3cuZ2V0UXVlc3Rpb25CeU5hbWUobmFtZSk7XG4gICAgfTtcbiAgICBNYXRyaXhEcm9wZG93blJvd1RleHRQcm9jZXNzb3IucHJvdG90eXBlLm9uQ3VzdG9tUHJvY2Vzc1RleHQgPSBmdW5jdGlvbiAodGV4dFZhbHVlKSB7XG4gICAgICAgIGlmICh0ZXh0VmFsdWUubmFtZSA9PSBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZS5JbmRleFZhcmlhYmxlTmFtZSkge1xuICAgICAgICAgICAgdGV4dFZhbHVlLmlzRXhpc3RzID0gdHJ1ZTtcbiAgICAgICAgICAgIHRleHRWYWx1ZS52YWx1ZSA9IHRoaXMucm93LnJvd0luZGV4O1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRleHRWYWx1ZS5uYW1lID09IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLlJvd1ZhbHVlVmFyaWFibGVOYW1lKSB7XG4gICAgICAgICAgICB0ZXh0VmFsdWUuaXNFeGlzdHMgPSB0cnVlO1xuICAgICAgICAgICAgdGV4dFZhbHVlLnZhbHVlID0gdGhpcy5yb3cucm93TmFtZTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuICAgIHJldHVybiBNYXRyaXhEcm9wZG93blJvd1RleHRQcm9jZXNzb3I7XG59KF90ZXh0UHJlUHJvY2Vzc29yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bXCJRdWVzdGlvblRleHRQcm9jZXNzb3JcIl0pKTtcbnZhciBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZShkYXRhLCB2YWx1ZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB0aGlzLmlzU2V0dGluZ1ZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZGV0YWlsUGFuZWxWYWx1ZSA9IG51bGw7XG4gICAgICAgIHRoaXMuY2VsbHMgPSBbXTtcbiAgICAgICAgdGhpcy5pc0NyZWF0aW5nRGV0YWlsUGFuZWwgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICAgICAgdGhpcy5zdWJzY3JpYmVUb0NoYW5nZXModmFsdWUpO1xuICAgICAgICB0aGlzLnRleHRQcmVQcm9jZXNzb3IgPSBuZXcgTWF0cml4RHJvcGRvd25Sb3dUZXh0UHJvY2Vzc29yKHRoaXMsIE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLlJvd1ZhcmlhYmxlTmFtZSwgISFkYXRhID8gZGF0YS5nZXRQYXJlbnRUZXh0UHJvY2Vzc29yKCkgOiBudWxsKTtcbiAgICAgICAgdGhpcy5zaG93SGlkZURldGFpbFBhbmVsQ2xpY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoX3RoaXMuZ2V0U3VydmV5KCkuaXNEZXNpZ25Nb2RlKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgX3RoaXMuc2hvd0hpZGVEZXRhaWxQYW5lbCgpO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmlkVmFsdWUgPSBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZS5nZXRJZCgpO1xuICAgIH1cbiAgICBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZS5nZXRJZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIFwic3Jvd19cIiArIE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLmlkQ291bnRlcisrO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLnByb3RvdHlwZSwgXCJpZFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaWRWYWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZS5wcm90b3R5cGUsIFwicm93TmFtZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UucHJvdG90eXBlLCBcInRleHRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJvd05hbWU7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UucHJvdG90eXBlLCBcInZhbHVlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgICAgICAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5xdWVzdGlvbnM7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciBxdWVzdGlvbiA9IHF1ZXN0aW9uc1tpXTtcbiAgICAgICAgICAgICAgICBpZiAoIXF1ZXN0aW9uLmlzRW1wdHkoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRbcXVlc3Rpb24uZ2V0VmFsdWVOYW1lKCldID0gcXVlc3Rpb24udmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghIXF1ZXN0aW9uLmNvbW1lbnQgJiZcbiAgICAgICAgICAgICAgICAgICAgISF0aGlzLmdldFN1cnZleSgpICYmXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0U3VydmV5KCkuc3RvcmVPdGhlcnNBc0NvbW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0W3F1ZXN0aW9uLmdldFZhbHVlTmFtZSgpICsgX2Jhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcIkJhc2VcIl0uY29tbWVudFN1ZmZpeF0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb24uY29tbWVudDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5pc1NldHRpbmdWYWx1ZSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnN1YnNjcmliZVRvQ2hhbmdlcyh2YWx1ZSk7XG4gICAgICAgICAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5xdWVzdGlvbnM7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciBxdWVzdGlvbiA9IHF1ZXN0aW9uc1tpXTtcbiAgICAgICAgICAgICAgICB2YXIgdmFsID0gdGhpcy5nZXRDZWxsVmFsdWUodmFsdWUsIHF1ZXN0aW9uLmdldFZhbHVlTmFtZSgpKTtcbiAgICAgICAgICAgICAgICB2YXIgb2xkQ29tbWVudCA9IHF1ZXN0aW9uLmNvbW1lbnQ7XG4gICAgICAgICAgICAgICAgdmFyIGNvbW1lbnQgPSAhIXZhbHVlXG4gICAgICAgICAgICAgICAgICAgID8gdmFsdWVbcXVlc3Rpb24uZ2V0VmFsdWVOYW1lKCkgKyBfYmFzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiQmFzZVwiXS5jb21tZW50U3VmZml4XVxuICAgICAgICAgICAgICAgICAgICA6IFwiXCI7XG4gICAgICAgICAgICAgICAgaWYgKGNvbW1lbnQgPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICBjb21tZW50ID0gXCJcIjtcbiAgICAgICAgICAgICAgICBxdWVzdGlvbi51cGRhdGVWYWx1ZUZyb21TdXJ2ZXkodmFsKTtcbiAgICAgICAgICAgICAgICBpZiAoISFjb21tZW50IHx8IHRoaXMuaXNUd29WYWx1ZUVxdWFscyhvbGRDb21tZW50LCBxdWVzdGlvbi5jb21tZW50KSkge1xuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbi51cGRhdGVDb21tZW50RnJvbVN1cnZleShjb21tZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcXVlc3Rpb24ub25TdXJ2ZXlWYWx1ZUNoYW5nZWQodmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaXNTZXR0aW5nVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZS5wcm90b3R5cGUsIFwibG9jVGV4dFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UucHJvdG90eXBlLCBcImhhc1BhbmVsXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZGF0YSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhLmhhc0RldGFpbFBhbmVsKHRoaXMpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLnByb3RvdHlwZSwgXCJkZXRhaWxQYW5lbFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGV0YWlsUGFuZWxWYWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZS5wcm90b3R5cGUsIFwiZGV0YWlsUGFuZWxJZFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuICEhdGhpcy5kZXRhaWxQYW5lbCA/IHRoaXMuZGV0YWlsUGFuZWwuaWQgOiBcIlwiO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLnByb3RvdHlwZSwgXCJpc0RldGFpbFBhbmVsU2hvd2luZ1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuICEhdGhpcy5kYXRhID8gdGhpcy5kYXRhLmdldElzRGV0YWlsUGFuZWxTaG93aW5nKHRoaXMpIDogZmFsc2U7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZS5wcm90b3R5cGUuc2V0SXNEZXRhaWxQYW5lbFNob3dpbmcgPSBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgIGlmICghdmFsICYmIHRoaXMuZGV0YWlsUGFuZWwpIHtcbiAgICAgICAgICAgIHRoaXMuZGV0YWlsUGFuZWwub25IaWRpbmdDb250ZW50KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEhdGhpcy5kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEuc2V0SXNEZXRhaWxQYW5lbFNob3dpbmcodGhpcywgdmFsKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoISF0aGlzLm9uRGV0YWlsUGFuZWxTaG93aW5nQ2hhbmdlZCkge1xuICAgICAgICAgICAgdGhpcy5vbkRldGFpbFBhbmVsU2hvd2luZ0NoYW5nZWQoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UucHJvdG90eXBlLnNob3dIaWRlRGV0YWlsUGFuZWwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzRGV0YWlsUGFuZWxTaG93aW5nKSB7XG4gICAgICAgICAgICB0aGlzLmhpZGVEZXRhaWxQYW5lbCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zaG93RGV0YWlsUGFuZWwoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UucHJvdG90eXBlLnNob3dEZXRhaWxQYW5lbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5lbnN1cmVEZXRhaWxQYW5lbCgpO1xuICAgICAgICBpZiAoIXRoaXMuZGV0YWlsUGFuZWxWYWx1ZSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5zZXRJc0RldGFpbFBhbmVsU2hvd2luZyh0cnVlKTtcbiAgICB9O1xuICAgIE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLnByb3RvdHlwZS5oaWRlRGV0YWlsUGFuZWwgPSBmdW5jdGlvbiAoZGVzdHJveVBhbmVsKSB7XG4gICAgICAgIGlmIChkZXN0cm95UGFuZWwgPT09IHZvaWQgMCkgeyBkZXN0cm95UGFuZWwgPSBmYWxzZTsgfVxuICAgICAgICB0aGlzLnNldElzRGV0YWlsUGFuZWxTaG93aW5nKGZhbHNlKTtcbiAgICAgICAgaWYgKGRlc3Ryb3lQYW5lbCkge1xuICAgICAgICAgICAgdGhpcy5kZXRhaWxQYW5lbFZhbHVlID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH07XG4gICAgTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UucHJvdG90eXBlLmVuc3VyZURldGFpbFBhbmVsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5pc0NyZWF0aW5nRGV0YWlsUGFuZWwpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmICghIXRoaXMuZGV0YWlsUGFuZWxWYWx1ZSB8fCAhdGhpcy5oYXNQYW5lbCB8fCAhdGhpcy5kYXRhKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLmlzQ3JlYXRpbmdEZXRhaWxQYW5lbCA9IHRydWU7XG4gICAgICAgIHRoaXMuZGV0YWlsUGFuZWxWYWx1ZSA9IHRoaXMuZGF0YS5jcmVhdGVSb3dEZXRhaWxQYW5lbCh0aGlzKTtcbiAgICAgICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMuZGV0YWlsUGFuZWxWYWx1ZS5xdWVzdGlvbnM7XG4gICAgICAgIHZhciB2YWx1ZSA9IHRoaXMuZGF0YS5nZXRSb3dWYWx1ZSh0aGlzLmRhdGEuZ2V0Um93SW5kZXgodGhpcykpO1xuICAgICAgICBpZiAoIV9oZWxwZXJzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJIZWxwZXJzXCJdLmlzVmFsdWVFbXB0eSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGtleSA9IHF1ZXN0aW9uc1tpXS5nZXRWYWx1ZU5hbWUoKTtcbiAgICAgICAgICAgICAgICBpZiAoIV9oZWxwZXJzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJIZWxwZXJzXCJdLmlzVmFsdWVFbXB0eSh2YWx1ZVtrZXldKSkge1xuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbnNbaV0udmFsdWUgPSB2YWx1ZVtrZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRldGFpbFBhbmVsVmFsdWUuc2V0U3VydmV5SW1wbCh0aGlzKTtcbiAgICAgICAgdGhpcy5pc0NyZWF0aW5nRGV0YWlsUGFuZWwgPSBmYWxzZTtcbiAgICB9O1xuICAgIE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLnByb3RvdHlwZS5nZXRBbGxWYWx1ZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICAgIH07XG4gICAgTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UucHJvdG90eXBlLmdldEZpbHRlcmVkVmFsdWVzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcmVzID0gdGhpcy5kYXRhID8gdGhpcy5kYXRhLmdldERhdGFGaWx0ZXJlZFZhbHVlcygpIDoge307XG4gICAgICAgIHZhciB2YWx1ZXMgPSB0aGlzLnZhbGlkYXRpb25WYWx1ZXM7XG4gICAgICAgIGlmICh2YWx1ZXMpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiB2YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICByZXNba2V5XSA9IHZhbHVlc1trZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlcy5yb3cgPSB0aGlzLmdldEFsbFZhbHVlcygpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH07XG4gICAgTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UucHJvdG90eXBlLmdldEZpbHRlcmVkUHJvcGVydGllcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHsgc3VydmV5OiB0aGlzLmdldFN1cnZleSgpLCByb3c6IHRoaXMgfTtcbiAgICB9O1xuICAgIE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLnByb3RvdHlwZS5ydW5Db25kaXRpb24gPSBmdW5jdGlvbiAodmFsdWVzLCBwcm9wZXJ0aWVzKSB7XG4gICAgICAgIGlmICghIXRoaXMuZGF0YSkge1xuICAgICAgICAgICAgdmFsdWVzW01hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLk93bmVyVmFyaWFibGVOYW1lXSA9IHRoaXMuZGF0YS52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICB2YWx1ZXNbTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UuSW5kZXhWYXJpYWJsZU5hbWVdID0gdGhpcy5yb3dJbmRleDtcbiAgICAgICAgdmFsdWVzW01hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLlJvd1ZhbHVlVmFyaWFibGVOYW1lXSA9IHRoaXMucm93TmFtZTtcbiAgICAgICAgdmFyIG5ld1Byb3BzID0gX2hlbHBlcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIkhlbHBlcnNcIl0uY3JlYXRlQ29weShwcm9wZXJ0aWVzKTtcbiAgICAgICAgbmV3UHJvcHNbTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UuUm93VmFyaWFibGVOYW1lXSA9IHRoaXM7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jZWxscy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFsdWVzW01hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLlJvd1ZhcmlhYmxlTmFtZV0gPSB0aGlzLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy5jZWxsc1tpXS5ydW5Db25kaXRpb24odmFsdWVzLCBuZXdQcm9wcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEhdGhpcy5kZXRhaWxQYW5lbCkge1xuICAgICAgICAgICAgdGhpcy5kZXRhaWxQYW5lbC5ydW5Db25kaXRpb24odmFsdWVzLCBuZXdQcm9wcyk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLnByb3RvdHlwZS5jbGVhclZhbHVlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5xdWVzdGlvbnM7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBxdWVzdGlvbnNbaV0uY2xlYXJWYWx1ZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZS5wcm90b3R5cGUub25BbnlWYWx1ZUNoYW5nZWQgPSBmdW5jdGlvbiAobmFtZSwgcXVlc3Rpb25OYW1lKSB7XG4gICAgICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLnF1ZXN0aW9ucztcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHF1ZXN0aW9uc1tpXS5vbkFueVZhbHVlQ2hhbmdlZChuYW1lLCBxdWVzdGlvbk5hbWUpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZS5wcm90b3R5cGUuZ2V0RGF0YVZhbHVlQ29yZSA9IGZ1bmN0aW9uICh2YWx1ZXNIYXNoLCBrZXkpIHtcbiAgICAgICAgdmFyIHN1cnZleSA9IHRoaXMuZ2V0U3VydmV5KCk7XG4gICAgICAgIGlmICghIXN1cnZleSkge1xuICAgICAgICAgICAgcmV0dXJuIHN1cnZleS5nZXREYXRhVmFsdWVDb3JlKHZhbHVlc0hhc2gsIGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWVzSGFzaFtrZXldO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZS5wcm90b3R5cGUuZ2V0VmFsdWUgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICB2YXIgcXVlc3Rpb24gPSB0aGlzLmdldFF1ZXN0aW9uQnlOYW1lKG5hbWUpO1xuICAgICAgICByZXR1cm4gISFxdWVzdGlvbiA/IHF1ZXN0aW9uLnZhbHVlIDogbnVsbDtcbiAgICB9O1xuICAgIE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLnByb3RvdHlwZS5zZXRWYWx1ZSA9IGZ1bmN0aW9uIChuYW1lLCBuZXdDb2x1bW5WYWx1ZSkge1xuICAgICAgICB0aGlzLnNldFZhbHVlQ29yZShuYW1lLCBuZXdDb2x1bW5WYWx1ZSwgZmFsc2UpO1xuICAgIH07XG4gICAgTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UucHJvdG90eXBlLmdldFZhcmlhYmxlID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLnByb3RvdHlwZS5zZXRWYXJpYWJsZSA9IGZ1bmN0aW9uIChuYW1lLCBuZXdWYWx1ZSkgeyB9O1xuICAgIE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLnByb3RvdHlwZS5nZXRDb21tZW50ID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgdmFyIHF1ZXN0aW9uID0gdGhpcy5nZXRRdWVzdGlvbkJ5TmFtZShuYW1lKTtcbiAgICAgICAgcmV0dXJuICEhcXVlc3Rpb24gPyBxdWVzdGlvbi5jb21tZW50IDogXCJcIjtcbiAgICB9O1xuICAgIE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLnByb3RvdHlwZS5zZXRDb21tZW50ID0gZnVuY3Rpb24gKG5hbWUsIG5ld1ZhbHVlLCBsb2NOb3RpZmljYXRpb24pIHtcbiAgICAgICAgdGhpcy5zZXRWYWx1ZUNvcmUobmFtZSwgbmV3VmFsdWUsIHRydWUpO1xuICAgIH07XG4gICAgTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UucHJvdG90eXBlLmZpbmRRdWVzdGlvbkJ5TmFtZSA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIGlmICghbmFtZSlcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIHZhciBwcmVmaXggPSBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZS5Sb3dWYXJpYWJsZU5hbWUgKyBcIi5cIjtcbiAgICAgICAgaWYgKG5hbWUuaW5kZXhPZihwcmVmaXgpID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRRdWVzdGlvbkJ5TmFtZShuYW1lLnN1YnN0cmluZyhwcmVmaXgubGVuZ3RoKSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHN1cnZleSA9IHRoaXMuZ2V0U3VydmV5KCk7XG4gICAgICAgIHJldHVybiAhIXN1cnZleSA/IHN1cnZleS5nZXRRdWVzdGlvbkJ5TmFtZShuYW1lKSA6IG51bGw7XG4gICAgfTtcbiAgICBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZS5wcm90b3R5cGUuc2V0VmFsdWVDb3JlID0gZnVuY3Rpb24gKG5hbWUsIG5ld0NvbHVtblZhbHVlLCBpc0NvbW1lbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNTZXR0aW5nVmFsdWUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMudXBkYXRlUXVlc3Rpb25zVmFsdWUobmFtZSwgbmV3Q29sdW1uVmFsdWUsIGlzQ29tbWVudCk7XG4gICAgICAgIHZhciBuZXdWYWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgICAgIHZhciBjaGFuZ2VkTmFtZSA9IGlzQ29tbWVudCA/IG5hbWUgKyBfYmFzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiQmFzZVwiXS5jb21tZW50U3VmZml4IDogbmFtZTtcbiAgICAgICAgdmFyIGNoYW5nZWRWYWx1ZSA9IG5ld0NvbHVtblZhbHVlO1xuICAgICAgICB2YXIgY2hhbmdlZFF1ZXN0aW9uID0gdGhpcy5nZXRRdWVzdGlvbkJ5TmFtZShuYW1lKTtcbiAgICAgICAgdmFyIGNoYW5naW5nVmFsdWUgPSB0aGlzLmRhdGEub25Sb3dDaGFuZ2luZyh0aGlzLCBjaGFuZ2VkTmFtZSwgbmV3VmFsdWUpO1xuICAgICAgICBpZiAoISFjaGFuZ2VkUXVlc3Rpb24gJiZcbiAgICAgICAgICAgICF0aGlzLmlzVHdvVmFsdWVFcXVhbHMoY2hhbmdpbmdWYWx1ZSwgY2hhbmdlZFZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy5pc1NldHRpbmdWYWx1ZSA9IHRydWU7XG4gICAgICAgICAgICBpZiAoaXNDb21tZW50KSB7XG4gICAgICAgICAgICAgICAgY2hhbmdlZFF1ZXN0aW9uLmNvbW1lbnQgPSBjaGFuZ2luZ1ZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY2hhbmdlZFF1ZXN0aW9uLnZhbHVlID0gY2hhbmdpbmdWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaXNTZXR0aW5nVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5kYXRhLmlzVmFsaWRhdGVPblZhbHVlQ2hhbmdpbmcgJiYgdGhpcy5oYXNRdWVzdG9uRXJyb3IoY2hhbmdlZFF1ZXN0aW9uKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIGlzRGVsZXRpbmcgPSBuZXdDb2x1bW5WYWx1ZSA9PSBudWxsICYmICFjaGFuZ2VkUXVlc3Rpb24gfHxcbiAgICAgICAgICAgIGlzQ29tbWVudCAmJiAhbmV3Q29sdW1uVmFsdWUgJiYgISFjaGFuZ2VkUXVlc3Rpb24gJiYgY2hhbmdlZFF1ZXN0aW9uLmF1dG9PdGhlck1vZGU7XG4gICAgICAgIHRoaXMuZGF0YS5vblJvd0NoYW5nZWQodGhpcywgY2hhbmdlZE5hbWUsIG5ld1ZhbHVlLCBpc0RlbGV0aW5nKTtcbiAgICAgICAgaWYgKGNoYW5nZWROYW1lKSB7XG4gICAgICAgICAgICB0aGlzLnJ1blRyaWdnZXJzKE1hdHJpeERyb3Bkb3duVG90YWxSb3dNb2RlbC5Sb3dWYXJpYWJsZU5hbWUgKyBcIi5cIiArIGNoYW5nZWROYW1lLCBuZXdWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbkFueVZhbHVlQ2hhbmdlZChNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZS5Sb3dWYXJpYWJsZU5hbWUsIFwiXCIpO1xuICAgIH07XG4gICAgTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UucHJvdG90eXBlLnVwZGF0ZVF1ZXN0aW9uc1ZhbHVlID0gZnVuY3Rpb24gKG5hbWUsIG5ld0NvbHVtblZhbHVlLCBpc0NvbW1lbnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmRldGFpbFBhbmVsKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIgY29sUXVlc3Rpb24gPSB0aGlzLmdldFF1ZXN0aW9uQnlDb2x1bW5OYW1lKG5hbWUpO1xuICAgICAgICB2YXIgZGV0YWlsUXVlc3Rpb24gPSB0aGlzLmRldGFpbFBhbmVsLmdldFF1ZXN0aW9uQnlOYW1lKG5hbWUpO1xuICAgICAgICBpZiAoIWNvbFF1ZXN0aW9uIHx8ICFkZXRhaWxRdWVzdGlvbilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIGlzQ29sUXVlc3Rpb24gPSB0aGlzLmlzVHdvVmFsdWVFcXVhbHMobmV3Q29sdW1uVmFsdWUsIGlzQ29tbWVudCA/IGNvbFF1ZXN0aW9uLmNvbW1lbnQgOiBjb2xRdWVzdGlvbi52YWx1ZSk7XG4gICAgICAgIHZhciBxdWVzdGlvbiA9IGlzQ29sUXVlc3Rpb24gPyBkZXRhaWxRdWVzdGlvbiA6IGNvbFF1ZXN0aW9uO1xuICAgICAgICB0aGlzLmlzU2V0dGluZ1ZhbHVlID0gdHJ1ZTtcbiAgICAgICAgaWYgKCFpc0NvbW1lbnQpIHtcbiAgICAgICAgICAgIHF1ZXN0aW9uLnZhbHVlID0gbmV3Q29sdW1uVmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBxdWVzdGlvbi5jb21tZW50ID0gbmV3Q29sdW1uVmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc1NldHRpbmdWYWx1ZSA9IGZhbHNlO1xuICAgIH07XG4gICAgTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UucHJvdG90eXBlLnJ1blRyaWdnZXJzID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7XG4gICAgICAgIGlmICghbmFtZSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5xdWVzdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAocSkgeyByZXR1cm4gcS5ydW5UcmlnZ2VycyhuYW1lLCB2YWx1ZSk7IH0pO1xuICAgIH07XG4gICAgTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UucHJvdG90eXBlLmhhc1F1ZXN0b25FcnJvciA9IGZ1bmN0aW9uIChxdWVzdGlvbikge1xuICAgICAgICBpZiAoIXF1ZXN0aW9uKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAocXVlc3Rpb24uaGFzRXJyb3JzKHRydWUsIHtcbiAgICAgICAgICAgIGlzT25WYWx1ZUNoYW5nZWQ6ICF0aGlzLmRhdGEuaXNWYWxpZGF0ZU9uVmFsdWVDaGFuZ2luZyxcbiAgICAgICAgfSkpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKHF1ZXN0aW9uLmlzRW1wdHkoKSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgdmFyIGNlbGwgPSB0aGlzLmdldENlbGxCeUNvbHVtbk5hbWUocXVlc3Rpb24ubmFtZSk7XG4gICAgICAgIGlmICghY2VsbCB8fCAhY2VsbC5jb2x1bW4gfHwgIWNlbGwuY29sdW1uLmlzVW5pcXVlKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLmNoZWNrSWZWYWx1ZUluUm93RHVwbGljYXRlZCh0aGlzLCBxdWVzdGlvbik7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UucHJvdG90eXBlLCBcImlzRW1wdHlcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB2YWwgPSB0aGlzLnZhbHVlO1xuICAgICAgICAgICAgaWYgKF9oZWxwZXJzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJIZWxwZXJzXCJdLmlzVmFsdWVFbXB0eSh2YWwpKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHZhbCkge1xuICAgICAgICAgICAgICAgIGlmICh2YWxba2V5XSAhPT0gdW5kZWZpbmVkICYmIHZhbFtrZXldICE9PSBudWxsKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLnByb3RvdHlwZS5nZXRRdWVzdGlvbkJ5Q29sdW1uID0gZnVuY3Rpb24gKGNvbHVtbikge1xuICAgICAgICB2YXIgY2VsbCA9IHRoaXMuZ2V0Q2VsbEJ5Q29sdW1uKGNvbHVtbik7XG4gICAgICAgIHJldHVybiAhIWNlbGwgPyBjZWxsLnF1ZXN0aW9uIDogbnVsbDtcbiAgICB9O1xuICAgIE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLnByb3RvdHlwZS5nZXRDZWxsQnlDb2x1bW4gPSBmdW5jdGlvbiAoY29sdW1uKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jZWxscy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2VsbHNbaV0uY29sdW1uID09IGNvbHVtbilcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jZWxsc1tpXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICAgIE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLnByb3RvdHlwZS5nZXRDZWxsQnlDb2x1bW5OYW1lID0gZnVuY3Rpb24gKGNvbHVtbk5hbWUpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNlbGxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jZWxsc1tpXS5jb2x1bW4ubmFtZSA9PSBjb2x1bW5OYW1lKVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNlbGxzW2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gICAgTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UucHJvdG90eXBlLmdldFF1ZXN0aW9uQnlDb2x1bW5OYW1lID0gZnVuY3Rpb24gKGNvbHVtbk5hbWUpIHtcbiAgICAgICAgdmFyIGNlbGwgPSB0aGlzLmdldENlbGxCeUNvbHVtbk5hbWUoY29sdW1uTmFtZSk7XG4gICAgICAgIHJldHVybiAhIWNlbGwgPyBjZWxsLnF1ZXN0aW9uIDogbnVsbDtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZS5wcm90b3R5cGUsIFwicXVlc3Rpb25zXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgcmVzID0gW107XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2VsbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICByZXMucHVzaCh0aGlzLmNlbGxzW2ldLnF1ZXN0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBkZXRhaWxRdWVzdGlvbnMgPSAhIXRoaXMuZGV0YWlsUGFuZWwgPyB0aGlzLmRldGFpbFBhbmVsLnF1ZXN0aW9ucyA6IFtdO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZXRhaWxRdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICByZXMucHVzaChkZXRhaWxRdWVzdGlvbnNbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLnByb3RvdHlwZS5nZXRRdWVzdGlvbkJ5TmFtZSA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIHZhciByZXMgPSB0aGlzLmdldFF1ZXN0aW9uQnlDb2x1bW5OYW1lKG5hbWUpO1xuICAgICAgICBpZiAoISFyZXMpXG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICByZXR1cm4gISF0aGlzLmRldGFpbFBhbmVsID8gdGhpcy5kZXRhaWxQYW5lbC5nZXRRdWVzdGlvbkJ5TmFtZShuYW1lKSA6IG51bGw7XG4gICAgfTtcbiAgICBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZS5wcm90b3R5cGUuZ2V0UXVlc3Rpb25zQnlOYW1lID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgdmFyIHJlcyA9IFtdO1xuICAgICAgICB2YXIgcSA9IHRoaXMuZ2V0UXVlc3Rpb25CeUNvbHVtbk5hbWUobmFtZSk7XG4gICAgICAgIGlmICghIXEpXG4gICAgICAgICAgICByZXMucHVzaChxKTtcbiAgICAgICAgaWYgKCEhdGhpcy5kZXRhaWxQYW5lbCkge1xuICAgICAgICAgICAgcSA9IHRoaXMuZGV0YWlsUGFuZWwuZ2V0UXVlc3Rpb25CeU5hbWUobmFtZSk7XG4gICAgICAgICAgICBpZiAoISFxKVxuICAgICAgICAgICAgICAgIHJlcy5wdXNoKHEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfTtcbiAgICBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZS5wcm90b3R5cGUuZ2V0U2hhcmVkUXVlc3Rpb25CeU5hbWUgPSBmdW5jdGlvbiAoY29sdW1uTmFtZSkge1xuICAgICAgICByZXR1cm4gISF0aGlzLmRhdGFcbiAgICAgICAgICAgID8gdGhpcy5kYXRhLmdldFNoYXJlZFF1ZXN0aW9uQnlOYW1lKGNvbHVtbk5hbWUsIHRoaXMpXG4gICAgICAgICAgICA6IG51bGw7XG4gICAgfTtcbiAgICBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZS5wcm90b3R5cGUuY2xlYXJJbmNvcnJlY3RWYWx1ZXMgPSBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgIGZvciAodmFyIGtleSBpbiB2YWwpIHtcbiAgICAgICAgICAgIHZhciBxdWVzdGlvbiA9IHRoaXMuZ2V0UXVlc3Rpb25CeU5hbWUoa2V5KTtcbiAgICAgICAgICAgIGlmIChxdWVzdGlvbikge1xuICAgICAgICAgICAgICAgIHZhciBxVmFsID0gcXVlc3Rpb24udmFsdWU7XG4gICAgICAgICAgICAgICAgcXVlc3Rpb24uY2xlYXJJbmNvcnJlY3RWYWx1ZXMoKTtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNUd29WYWx1ZUVxdWFscyhxVmFsLCBxdWVzdGlvbi52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZShrZXksIHF1ZXN0aW9uLnZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZ2V0U2hhcmVkUXVlc3Rpb25CeU5hbWUoa2V5KSAmJlxuICAgICAgICAgICAgICAgICAgICBrZXkuaW5kZXhPZihfc2V0dGluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1tcInNldHRpbmdzXCJdLm1hdHJpeC50b3RhbHNTdWZmaXgpIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFZhbHVlKGtleSwgbnVsbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZS5wcm90b3R5cGUuZ2V0TG9jYWxlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhID8gdGhpcy5kYXRhLmdldExvY2FsZSgpIDogXCJcIjtcbiAgICB9O1xuICAgIE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLnByb3RvdHlwZS5nZXRNYXJrZG93bkh0bWwgPSBmdW5jdGlvbiAodGV4dCwgbmFtZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhID8gdGhpcy5kYXRhLmdldE1hcmtkb3duSHRtbCh0ZXh0LCBuYW1lKSA6IHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLnByb3RvdHlwZS5nZXRSZW5kZXJlciA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEgPyB0aGlzLmRhdGEuZ2V0UmVuZGVyZXIobmFtZSkgOiBudWxsO1xuICAgIH07XG4gICAgTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UucHJvdG90eXBlLmdldFJlbmRlcmVyQ29udGV4dCA9IGZ1bmN0aW9uIChsb2NTdHIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YSA/IHRoaXMuZGF0YS5nZXRSZW5kZXJlckNvbnRleHQobG9jU3RyKSA6IGxvY1N0cjtcbiAgICB9O1xuICAgIE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLnByb3RvdHlwZS5nZXRQcm9jZXNzZWRUZXh0ID0gZnVuY3Rpb24gKHRleHQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YSA/IHRoaXMuZGF0YS5nZXRQcm9jZXNzZWRUZXh0KHRleHQpIDogdGV4dDtcbiAgICB9O1xuICAgIE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLnByb3RvdHlwZS5sb2NTdHJzQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNlbGxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLmNlbGxzW2ldLmxvY1N0cnNDaGFuZ2VkKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEhdGhpcy5kZXRhaWxQYW5lbCkge1xuICAgICAgICAgICAgdGhpcy5kZXRhaWxQYW5lbC5sb2NTdHJzQ2hhbmdlZCgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZS5wcm90b3R5cGUudXBkYXRlQ2VsbFF1ZXN0aW9uT25Db2x1bW5DaGFuZ2VkID0gZnVuY3Rpb24gKGNvbHVtbiwgbmFtZSwgbmV3VmFsdWUpIHtcbiAgICAgICAgdmFyIGNlbGwgPSB0aGlzLmdldENlbGxCeUNvbHVtbihjb2x1bW4pO1xuICAgICAgICBpZiAoIWNlbGwpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMudXBkYXRlQ2VsbE9uQ29sdW1uQ2hhbmdlZChjZWxsLCBuYW1lLCBuZXdWYWx1ZSk7XG4gICAgfTtcbiAgICBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZS5wcm90b3R5cGUudXBkYXRlQ2VsbFF1ZXN0aW9uT25Db2x1bW5JdGVtVmFsdWVDaGFuZ2VkID0gZnVuY3Rpb24gKGNvbHVtbiwgcHJvcGVydHlOYW1lLCBvYmosIG5hbWUsIG5ld1ZhbHVlLCBvbGRWYWx1ZSkge1xuICAgICAgICB2YXIgY2VsbCA9IHRoaXMuZ2V0Q2VsbEJ5Q29sdW1uKGNvbHVtbik7XG4gICAgICAgIGlmICghY2VsbClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy51cGRhdGVDZWxsT25Db2x1bW5JdGVtVmFsdWVDaGFuZ2VkKGNlbGwsIHByb3BlcnR5TmFtZSwgb2JqLCBuYW1lLCBuZXdWYWx1ZSwgb2xkVmFsdWUpO1xuICAgIH07XG4gICAgTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UucHJvdG90eXBlLm9uUXVlc3Rpb25SZWFkT25seUNoYW5nZWQgPSBmdW5jdGlvbiAocGFyZW50SXNSZWFkT25seSkge1xuICAgICAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5xdWVzdGlvbnM7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgcSA9IHF1ZXN0aW9uc1tpXTtcbiAgICAgICAgICAgIHEuc2V0UHJvcGVydHlWYWx1ZShcImlzUmVhZE9ubHlcIiwgcS5pc1JlYWRPbmx5KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoISF0aGlzLmRldGFpbFBhbmVsKSB7XG4gICAgICAgICAgICB0aGlzLmRldGFpbFBhbmVsLnJlYWRPbmx5ID0gcGFyZW50SXNSZWFkT25seTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UucHJvdG90eXBlLmhhc0Vycm9ycyA9IGZ1bmN0aW9uIChmaXJlQ2FsbGJhY2ssIHJlYywgcmFpc2VPbkNvbXBsZXRlZEFzeW5jVmFsaWRhdG9ycykge1xuICAgICAgICB2YXIgcmVzID0gZmFsc2U7XG4gICAgICAgIHZhciBjZWxscyA9IHRoaXMuY2VsbHM7XG4gICAgICAgIGlmICghY2VsbHMpXG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB0aGlzLnZhbGlkYXRpb25WYWx1ZXMgPSByZWMudmFsaWRhdGlvblZhbHVlcztcbiAgICAgICAgZm9yICh2YXIgY29sSW5kZXggPSAwOyBjb2xJbmRleCA8IGNlbGxzLmxlbmd0aDsgY29sSW5kZXgrKykge1xuICAgICAgICAgICAgaWYgKCFjZWxsc1tjb2xJbmRleF0pXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB2YXIgcXVlc3Rpb24gPSBjZWxsc1tjb2xJbmRleF0ucXVlc3Rpb247XG4gICAgICAgICAgICBpZiAoIXF1ZXN0aW9uIHx8ICFxdWVzdGlvbi52aXNpYmxlKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgcXVlc3Rpb24ub25Db21wbGV0ZWRBc3luY1ZhbGlkYXRvcnMgPSBmdW5jdGlvbiAoaGFzRXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgcmFpc2VPbkNvbXBsZXRlZEFzeW5jVmFsaWRhdG9ycygpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmICghIXJlYyAmJiByZWMuaXNPblZhbHVlQ2hhbmdlZCA9PT0gdHJ1ZSAmJiBxdWVzdGlvbi5pc0VtcHR5KCkpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICByZXMgPSBxdWVzdGlvbi5oYXNFcnJvcnMoZmlyZUNhbGxiYWNrLCByZWMpIHx8IHJlcztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5oYXNQYW5lbCkge1xuICAgICAgICAgICAgdGhpcy5lbnN1cmVEZXRhaWxQYW5lbCgpO1xuICAgICAgICAgICAgdmFyIHBhbmVsSGFzRXJyb3IgPSB0aGlzLmRldGFpbFBhbmVsLmhhc0Vycm9ycyhmaXJlQ2FsbGJhY2ssIGZhbHNlLCByZWMpO1xuICAgICAgICAgICAgaWYgKCFyZWMuaGlkZUVycm9yZWRQYW5lbCAmJiBwYW5lbEhhc0Vycm9yICYmIGZpcmVDYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmIChyZWMuaXNTaW5nbGVEZXRhaWxQYW5lbCkge1xuICAgICAgICAgICAgICAgICAgICByZWMuaGlkZUVycm9yZWRQYW5lbCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuc2hvd0RldGFpbFBhbmVsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXMgPSBwYW5lbEhhc0Vycm9yIHx8IHJlcztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZhbGlkYXRpb25WYWx1ZXMgPSB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfTtcbiAgICBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZS5wcm90b3R5cGUudXBkYXRlQ2VsbE9uQ29sdW1uQ2hhbmdlZCA9IGZ1bmN0aW9uIChjZWxsLCBuYW1lLCBuZXdWYWx1ZSkge1xuICAgICAgICBjZWxsLnF1ZXN0aW9uW25hbWVdID0gbmV3VmFsdWU7XG4gICAgfTtcbiAgICBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZS5wcm90b3R5cGUudXBkYXRlQ2VsbE9uQ29sdW1uSXRlbVZhbHVlQ2hhbmdlZCA9IGZ1bmN0aW9uIChjZWxsLCBwcm9wZXJ0eU5hbWUsIG9iaiwgbmFtZSwgbmV3VmFsdWUsIG9sZFZhbHVlKSB7XG4gICAgICAgIHZhciBpdGVtcyA9IGNlbGwucXVlc3Rpb25bcHJvcGVydHlOYW1lXTtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGl0ZW1zKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIHZhbCA9IG5hbWUgPT09IFwidmFsdWVcIiA/IG9sZFZhbHVlIDogb2JqW1widmFsdWVcIl07XG4gICAgICAgIHZhciBpdGVtID0gX2l0ZW12YWx1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fW1wiSXRlbVZhbHVlXCJdLmdldEl0ZW1CeVZhbHVlKGl0ZW1zLCB2YWwpO1xuICAgICAgICBpZiAoIWl0ZW0pXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGl0ZW1bbmFtZV0gPSBuZXdWYWx1ZTtcbiAgICB9O1xuICAgIE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLnByb3RvdHlwZS5idWlsZENlbGxzID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuaXNTZXR0aW5nVmFsdWUgPSB0cnVlO1xuICAgICAgICB2YXIgY29sdW1ucyA9IHRoaXMuZGF0YS5jb2x1bW5zO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbHVtbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBjb2x1bW4gPSBjb2x1bW5zW2ldO1xuICAgICAgICAgICAgdmFyIGNlbGwgPSB0aGlzLmNyZWF0ZUNlbGwoY29sdW1uKTtcbiAgICAgICAgICAgIHRoaXMuY2VsbHMucHVzaChjZWxsKTtcbiAgICAgICAgICAgIHZhciBjZWxsVmFsdWUgPSB0aGlzLmdldENlbGxWYWx1ZSh2YWx1ZSwgY29sdW1uLm5hbWUpO1xuICAgICAgICAgICAgaWYgKCFfaGVscGVyc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiSGVscGVyc1wiXS5pc1ZhbHVlRW1wdHkoY2VsbFZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGNlbGwucXVlc3Rpb24udmFsdWUgPSBjZWxsVmFsdWU7XG4gICAgICAgICAgICAgICAgdmFyIGNvbW1lbnRLZXkgPSBjb2x1bW4ubmFtZSArIF9iYXNlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJCYXNlXCJdLmNvbW1lbnRTdWZmaXg7XG4gICAgICAgICAgICAgICAgaWYgKCEhdmFsdWUgJiYgIV9oZWxwZXJzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJIZWxwZXJzXCJdLmlzVmFsdWVFbXB0eSh2YWx1ZVtjb21tZW50S2V5XSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2VsbC5xdWVzdGlvbi5jb21tZW50ID0gdmFsdWVbY29tbWVudEtleV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNTZXR0aW5nVmFsdWUgPSBmYWxzZTtcbiAgICB9O1xuICAgIE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLnByb3RvdHlwZS5pc1R3b1ZhbHVlRXF1YWxzID0gZnVuY3Rpb24gKHZhbDEsIHZhbDIpIHtcbiAgICAgICAgcmV0dXJuIF9oZWxwZXJzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJIZWxwZXJzXCJdLmlzVHdvVmFsdWVFcXVhbHModmFsMSwgdmFsMiwgZmFsc2UsIHRydWUsIGZhbHNlKTtcbiAgICB9O1xuICAgIE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLnByb3RvdHlwZS5nZXRDZWxsVmFsdWUgPSBmdW5jdGlvbiAodmFsdWUsIG5hbWUpIHtcbiAgICAgICAgaWYgKCEhdGhpcy5lZGl0aW5nT2JqKVxuICAgICAgICAgICAgcmV0dXJuIF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJTZXJpYWxpemVyXCJdLmdldE9ialByb3BlcnR5VmFsdWUodGhpcy5lZGl0aW5nT2JqLCBuYW1lKTtcbiAgICAgICAgcmV0dXJuICEhdmFsdWUgPyB2YWx1ZVtuYW1lXSA6IHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLnByb3RvdHlwZS5jcmVhdGVDZWxsID0gZnVuY3Rpb24gKGNvbHVtbikge1xuICAgICAgICByZXR1cm4gbmV3IE1hdHJpeERyb3Bkb3duQ2VsbChjb2x1bW4sIHRoaXMsIHRoaXMuZGF0YSk7XG4gICAgfTtcbiAgICBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZS5wcm90b3R5cGUuZ2V0U3VydmV5RGF0YSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZS5wcm90b3R5cGUuZ2V0U3VydmV5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhID8gdGhpcy5kYXRhLmdldFN1cnZleSgpIDogbnVsbDtcbiAgICB9O1xuICAgIE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLnByb3RvdHlwZS5nZXRUZXh0UHJvY2Vzc29yID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0UHJlUHJvY2Vzc29yO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLnByb3RvdHlwZSwgXCJyb3dJbmRleFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuICEhdGhpcy5kYXRhID8gdGhpcy5kYXRhLmdldFJvd0luZGV4KHRoaXMpICsgMSA6IC0xO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLnByb3RvdHlwZSwgXCJlZGl0aW5nT2JqXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lZGl0aW5nT2JqVmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCEhdGhpcy5lZGl0aW5nT2JqKSB7XG4gICAgICAgICAgICB0aGlzLmVkaXRpbmdPYmoub25Qcm9wZXJ0eUNoYW5nZWQucmVtb3ZlKHRoaXMub25FZGl0aW5nT2JqUHJvcGVydHlDaGFuZ2VkKTtcbiAgICAgICAgICAgIHRoaXMuZWRpdGluZ09ialZhbHVlID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH07XG4gICAgTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UucHJvdG90eXBlLnN1YnNjcmliZVRvQ2hhbmdlcyA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBpZiAoIXZhbHVlIHx8ICF2YWx1ZS5nZXRUeXBlIHx8ICF2YWx1ZS5vblByb3BlcnR5Q2hhbmdlZClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKHZhbHVlID09PSB0aGlzLmVkaXRpbmdPYmopXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMuZWRpdGluZ09ialZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMub25FZGl0aW5nT2JqUHJvcGVydHlDaGFuZ2VkID0gZnVuY3Rpb24gKHNlbmRlciwgb3B0aW9ucykge1xuICAgICAgICAgICAgX3RoaXMudXBkYXRlT25TZXRWYWx1ZShvcHRpb25zLm5hbWUsIG9wdGlvbnMubmV3VmFsdWUpO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmVkaXRpbmdPYmoub25Qcm9wZXJ0eUNoYW5nZWQuYWRkKHRoaXMub25FZGl0aW5nT2JqUHJvcGVydHlDaGFuZ2VkKTtcbiAgICB9O1xuICAgIE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLnByb3RvdHlwZS51cGRhdGVPblNldFZhbHVlID0gZnVuY3Rpb24gKG5hbWUsIG5ld1ZhbHVlKSB7XG4gICAgICAgIHRoaXMuaXNTZXR0aW5nVmFsdWUgPSB0cnVlO1xuICAgICAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5nZXRRdWVzdGlvbnNCeU5hbWUobmFtZSk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBxdWVzdGlvbnNbaV0udmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlzU2V0dGluZ1ZhbHVlID0gZmFsc2U7XG4gICAgfTtcbiAgICBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZS5Sb3dWYXJpYWJsZU5hbWUgPSBcInJvd1wiO1xuICAgIE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLk93bmVyVmFyaWFibGVOYW1lID0gXCJzZWxmXCI7XG4gICAgTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UuSW5kZXhWYXJpYWJsZU5hbWUgPSBcInJvd0luZGV4XCI7XG4gICAgTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UuUm93VmFsdWVWYXJpYWJsZU5hbWUgPSBcInJvd1ZhbHVlXCI7XG4gICAgTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UuaWRDb3VudGVyID0gMTtcbiAgICByZXR1cm4gTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2U7XG59KCkpO1xuXG52YXIgTWF0cml4RHJvcGRvd25Ub3RhbFJvd01vZGVsID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhNYXRyaXhEcm9wZG93blRvdGFsUm93TW9kZWwsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gTWF0cml4RHJvcGRvd25Ub3RhbFJvd01vZGVsKGRhdGEpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgZGF0YSwgbnVsbCkgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuYnVpbGRDZWxscyhudWxsKTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBNYXRyaXhEcm9wZG93blRvdGFsUm93TW9kZWwucHJvdG90eXBlLmNyZWF0ZUNlbGwgPSBmdW5jdGlvbiAoY29sdW1uKSB7XG4gICAgICAgIHJldHVybiBuZXcgTWF0cml4RHJvcGRvd25Ub3RhbENlbGwoY29sdW1uLCB0aGlzLCB0aGlzLmRhdGEpO1xuICAgIH07XG4gICAgTWF0cml4RHJvcGRvd25Ub3RhbFJvd01vZGVsLnByb3RvdHlwZS5zZXRWYWx1ZSA9IGZ1bmN0aW9uIChuYW1lLCBuZXdWYWx1ZSkge1xuICAgICAgICBpZiAoISF0aGlzLmRhdGEgJiYgIXRoaXMuaXNTZXR0aW5nVmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YS5vblRvdGFsVmFsdWVDaGFuZ2VkKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE1hdHJpeERyb3Bkb3duVG90YWxSb3dNb2RlbC5wcm90b3R5cGUucnVuQ29uZGl0aW9uID0gZnVuY3Rpb24gKHZhbHVlcywgcHJvcGVydGllcykge1xuICAgICAgICB2YXIgY291bnRlciA9IDA7XG4gICAgICAgIHZhciBwcmV2VmFsdWU7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIHByZXZWYWx1ZSA9IF9oZWxwZXJzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJIZWxwZXJzXCJdLmdldFVuYmluZFZhbHVlKHRoaXMudmFsdWUpO1xuICAgICAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5ydW5Db25kaXRpb24uY2FsbCh0aGlzLCB2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgICAgICAgICAgY291bnRlcisrO1xuICAgICAgICB9IHdoaWxlICghX2hlbHBlcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIkhlbHBlcnNcIl0uaXNUd29WYWx1ZUVxdWFscyhwcmV2VmFsdWUsIHRoaXMudmFsdWUpICYmIGNvdW50ZXIgPCAzKTtcbiAgICB9O1xuICAgIE1hdHJpeERyb3Bkb3duVG90YWxSb3dNb2RlbC5wcm90b3R5cGUudXBkYXRlQ2VsbE9uQ29sdW1uQ2hhbmdlZCA9IGZ1bmN0aW9uIChjZWxsLCBuYW1lLCBuZXdWYWx1ZSkge1xuICAgICAgICBjZWxsLnVwZGF0ZUNlbGxRdWVzdGlvbigpO1xuICAgIH07XG4gICAgcmV0dXJuIE1hdHJpeERyb3Bkb3duVG90YWxSb3dNb2RlbDtcbn0oTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UpKTtcblxuLyoqXG4gKiBBIGJhc2UgY2xhc3MgZm9yIHRoZSBbUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL3F1ZXN0aW9ubWF0cml4ZHJvcGRvd25tb2RlbCkgYW5kIFtRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9xdWVzdGlvbm1hdHJpeGR5bmFtaWNtb2RlbCkgY2xhc3Nlcy5cbiAqL1xudmFyIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZShuYW1lKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG5hbWUpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmlzUm93Q2hhbmdpbmcgPSBmYWxzZTtcbiAgICAgICAgX3RoaXMubG9ja1Jlc2V0UmVuZGVyZWRUYWJsZSA9IGZhbHNlO1xuICAgICAgICBfdGhpcy5pc0RvaW5nb25BbnlWYWx1ZUNoYW5nZWQgPSBmYWxzZTtcbiAgICAgICAgX3RoaXMuY3JlYXRlSXRlbVZhbHVlcyhcImNob2ljZXNcIik7XG4gICAgICAgIF90aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwicGxhY2Vob2xkZXJcIiwgX3RoaXMsIGZhbHNlLCB0cnVlKTtcbiAgICAgICAgX3RoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJrZXlEdXBsaWNhdGlvbkVycm9yXCIsIF90aGlzLCBmYWxzZSwgdHJ1ZSk7XG4gICAgICAgIF90aGlzLmRldGFpbFBhbmVsVmFsdWUgPSBfdGhpcy5jcmVhdGVOZXdEZXRhaWxQYW5lbCgpO1xuICAgICAgICBfdGhpcy5kZXRhaWxQYW5lbC5zZWxlY3RlZEVsZW1lbnRJbkRlc2lnbiA9IF90aGlzO1xuICAgICAgICBfdGhpcy5kZXRhaWxQYW5lbC5yZW5kZXJXaWR0aCA9IFwiMTAwJVwiO1xuICAgICAgICBfdGhpcy5kZXRhaWxQYW5lbC5pc0ludGVyYWN0aXZlRGVzaWduRWxlbWVudCA9IGZhbHNlO1xuICAgICAgICBfdGhpcy5kZXRhaWxQYW5lbC5zaG93VGl0bGUgPSBmYWxzZTtcbiAgICAgICAgX3RoaXMucmVnaXN0ZXJQcm9wZXJ0eUNoYW5nZWRIYW5kbGVycyhbXCJjb2x1bW5zXCIsIFwiY2VsbFR5cGVcIl0sIGZ1bmN0aW9uICgpIHsgX3RoaXMudXBkYXRlQ29sdW1uc0FuZFJvd3MoKTsgfSk7XG4gICAgICAgIF90aGlzLnJlZ2lzdGVyUHJvcGVydHlDaGFuZ2VkSGFuZGxlcnMoW1wicGxhY2Vob2xkZXJcIiwgXCJjb2x1bW5Db2xDb3VudFwiLCBcInJvd1RpdGxlV2lkdGhcIiwgXCJjaG9pY2VzXCJdLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5jbGVhclJvd3NBbmRSZXNldFJlbmRlcmVkVGFibGUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIF90aGlzLnJlZ2lzdGVyUHJvcGVydHlDaGFuZ2VkSGFuZGxlcnMoW1xuICAgICAgICAgICAgXCJjb2x1bW5MYXlvdXRcIixcbiAgICAgICAgICAgIFwiYWRkUm93TG9jYXRpb25cIixcbiAgICAgICAgICAgIFwiaGlkZUNvbHVtbnNJZkVtcHR5XCIsXG4gICAgICAgICAgICBcInNob3dIZWFkZXJcIixcbiAgICAgICAgICAgIFwibWluUm93Q291bnRcIixcbiAgICAgICAgICAgIFwiaXNSZWFkT25seVwiLFxuICAgICAgICAgICAgXCJyb3dDb3VudFwiLFxuICAgICAgICAgICAgXCJoYXNGb290ZXJcIixcbiAgICAgICAgICAgIFwiZGV0YWlsUGFuZWxNb2RlXCIsXG4gICAgICAgIF0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLnJlc2V0UmVuZGVyZWRUYWJsZSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgX3RoaXMucmVnaXN0ZXJQcm9wZXJ0eUNoYW5nZWRIYW5kbGVycyhbXCJpc01vYmlsZVwiXSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMucmVzZXRSZW5kZXJlZFRhYmxlKCk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLCBcImRlZmF1bHRDZWxsVHlwZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIF9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fW1wic2V0dGluZ3NcIl0ubWF0cml4LmRlZmF1bHRDZWxsVHlwZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICBfc2V0dGluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1tcInNldHRpbmdzXCJdLm1hdHJpeC5kZWZhdWx0Q2VsbFR5cGUgPSB2YWw7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLmFkZERlZmF1bHRDb2x1bW5zID0gZnVuY3Rpb24gKG1hdHJpeCkge1xuICAgICAgICB2YXIgY29sTmFtZXMgPSBfcXVlc3Rpb25mYWN0b3J5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bXCJRdWVzdGlvbkZhY3RvcnlcIl0uRGVmYXVsdENvbHVtcztcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2xOYW1lcy5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIG1hdHJpeC5hZGRDb2x1bW4oY29sTmFtZXNbaV0pO1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZS5wcm90b3R5cGUuY3JlYXRlQ29sdW1uVmFsdWVzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVOZXdBcnJheShcImNvbHVtbnNcIiwgZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICAgIGl0ZW0uY29sT3duZXIgPSBfdGhpcztcbiAgICAgICAgICAgIGlmIChfdGhpcy5vbkFkZENvbHVtbilcbiAgICAgICAgICAgICAgICBfdGhpcy5vbkFkZENvbHVtbihpdGVtKTtcbiAgICAgICAgICAgIGlmIChfdGhpcy5zdXJ2ZXkpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5zdXJ2ZXkubWF0cml4Q29sdW1uQWRkZWQoX3RoaXMsIGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgICAgaXRlbS5jb2xPd25lciA9IG51bGw7XG4gICAgICAgICAgICBpZiAoX3RoaXMub25SZW1vdmVDb2x1bW4pXG4gICAgICAgICAgICAgICAgX3RoaXMub25SZW1vdmVDb2x1bW4oaXRlbSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZS5wcm90b3R5cGUuZ2V0VHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIFwibWF0cml4ZHJvcGRvd25iYXNlXCI7XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBfc3VwZXIucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcbiAgICAgICAgdGhpcy5jbGVhckdlbmVyYXRlZFJvd3MoKTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLnByb3RvdHlwZSwgXCJoYXNTaW5nbGVJbnB1dFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZmFsc2U7IH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZS5wcm90b3R5cGUsIFwiaXNDb250YWluZXJcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRydWU7IH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZS5wcm90b3R5cGUsIFwiaXNSb3dzRHluYW1pY1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UucHJvdG90eXBlLCBcImlzVXBkYXRlTG9ja2VkXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pc0xvYWRpbmdGcm9tSnNvbiB8fCB0aGlzLmlzVXBkYXRpbmc7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLnByb3RvdHlwZS5iZWdpblVwZGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5pc1VwZGF0aW5nID0gdHJ1ZTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UucHJvdG90eXBlLmVuZFVwZGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5pc1VwZGF0aW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMudXBkYXRlQ29sdW1uc0FuZFJvd3MoKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UucHJvdG90eXBlLnVwZGF0ZUNvbHVtbnNBbmRSb3dzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnVwZGF0ZUNvbHVtbnNJbmRleGVzKHRoaXMuY29sdW1ucyk7XG4gICAgICAgIHRoaXMudXBkYXRlQ29sdW1uc0NlbGxUeXBlKCk7XG4gICAgICAgIHRoaXMuZ2VuZXJhdGVkVG90YWxSb3cgPSBudWxsO1xuICAgICAgICB0aGlzLmNsZWFyUm93c0FuZFJlc2V0UmVuZGVyZWRUYWJsZSgpO1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZS5wcm90b3R5cGUuaXRlbVZhbHVlUHJvcGVydHlDaGFuZ2VkID0gZnVuY3Rpb24gKGl0ZW0sIG5hbWUsIG9sZFZhbHVlLCBuZXdWYWx1ZSkge1xuICAgICAgICBfc3VwZXIucHJvdG90eXBlLml0ZW1WYWx1ZVByb3BlcnR5Q2hhbmdlZC5jYWxsKHRoaXMsIGl0ZW0sIG5hbWUsIG9sZFZhbHVlLCBuZXdWYWx1ZSk7XG4gICAgICAgIGlmIChpdGVtLm93bmVyUHJvcGVydHlOYW1lID09PSBcImNob2ljZXNcIikge1xuICAgICAgICAgICAgdGhpcy5jbGVhclJvd3NBbmRSZXNldFJlbmRlcmVkVGFibGUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UucHJvdG90eXBlLCBcImNvbHVtbkxheW91dFwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgdGhlIG1hdHJpeCBsYXlvdXQuIFNldCB0aGlzIHByb3BlcnR5IHRvIGBcInZlcnRpY2FsXCJgIGlmIHlvdSB3YW50IHRvIGRpc3BsYXkgY29sdW1ucyBpbnN0ZWFkIG9mIHJvd3MgYW5kIHJvd3MgaW5zdGVhZCBvZiBjb2x1bW5zLlxuICAgICAgICAgKlxuICAgICAgICAgKiBEZWZhdWx0IHZhbHVlOiBgXCJob3Jpem9udGFsXCJgXG4gICAgICAgICAqIEBzZWUgY29sdW1uc1xuICAgICAgICAgKiBAc2VlIHJvd3NcbiAgICAgICAgICogQHNlZSBpc0NvbHVtbkxheW91dEhvcml6b250YWxcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNvbHVtbkxheW91dFwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjb2x1bW5MYXlvdXRcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLnByb3RvdHlwZSwgXCJjb2x1bW5zTG9jYXRpb25cIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbHVtbkxheW91dDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbkxheW91dCA9IHZhbDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLnByb3RvdHlwZSwgXCJkZXRhaWxFcnJvckxvY2F0aW9uXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB0aGUgZXJyb3IgbWVzc2FnZSBwb3NpdGlvbiBmb3IgcXVlc3Rpb25zIHdpdGhpbiBkZXRhaWwgc2VjdGlvbnMuXG4gICAgICAgICAqXG4gICAgICAgICAqIFBvc3NpYmxlIHZhbHVlczpcbiAgICAgICAgICpcbiAgICAgICAgICogLSBgXCJkZWZhdWx0XCJgIChkZWZhdWx0KSAtIEluaGVyaXRzIHRoZSBzZXR0aW5nIGZyb20gdGhlIFtgZXJyb3JMb2NhdGlvbmBdKCNlcnJvckxvY2F0aW9uKSBwcm9wZXJ0eS5cbiAgICAgICAgICogLSBgXCJ0b3BcImAgLSBEaXNwbGF5cyBlcnJvciBtZXNzYWdlcyBhYm92ZSBxdWVzdGlvbnMuXG4gICAgICAgICAqIC0gYFwiYm90dG9tXCJgIC0gRGlzcGxheXMgZXJyb3IgbWVzc2FnZXMgYmVsb3cgcXVlc3Rpb25zLlxuICAgICAgICAgKiBAc2VlIGNlbGxFcnJvckxvY2F0aW9uXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJkZXRhaWxFcnJvckxvY2F0aW9uXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiZGV0YWlsRXJyb3JMb2NhdGlvblwiLCB2YWx1ZS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLnByb3RvdHlwZSwgXCJjZWxsRXJyb3JMb2NhdGlvblwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgdGhlIGVycm9yIG1lc3NhZ2UgcG9zaXRpb24gcmVsYXRpdmUgdG8gbWF0cml4IGNlbGxzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBQb3NzaWJsZSB2YWx1ZXM6XG4gICAgICAgICAqXG4gICAgICAgICAqIC0gYFwiZGVmYXVsdFwiYCAoZGVmYXVsdCkgLSBJbmhlcml0cyB0aGUgc2V0dGluZyBmcm9tIHRoZSBbYGVycm9yTG9jYXRpb25gXSgjZXJyb3JMb2NhdGlvbikgcHJvcGVydHkuXG4gICAgICAgICAqIC0gYFwidG9wXCJgIC0gRGlzcGxheXMgZXJyb3IgbWVzc2FnZXMgYWJvdmUgbWF0cml4IGNlbGxzLlxuICAgICAgICAgKiAtIGBcImJvdHRvbVwiYCAtIERpc3BsYXlzIGVycm9yIG1lc3NhZ2VzIGJlbG93IG1hdHJpeCBjZWxscy5cbiAgICAgICAgICogQHNlZSBkZXRhaWxFcnJvckxvY2F0aW9uXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjZWxsRXJyb3JMb2NhdGlvblwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNlbGxFcnJvckxvY2F0aW9uXCIsIHZhbHVlLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZS5wcm90b3R5cGUuZ2V0Q2hpbGRFcnJvckxvY2F0aW9uID0gZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgIHZhciBlcnJMb2NhdGlvbiA9ICEhY2hpbGQucGFyZW50ID8gdGhpcy5kZXRhaWxFcnJvckxvY2F0aW9uIDogdGhpcy5jZWxsRXJyb3JMb2NhdGlvbjtcbiAgICAgICAgaWYgKGVyckxvY2F0aW9uICE9PSBcImRlZmF1bHRcIilcbiAgICAgICAgICAgIHJldHVybiBlcnJMb2NhdGlvbjtcbiAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUuZ2V0Q2hpbGRFcnJvckxvY2F0aW9uLmNhbGwodGhpcywgY2hpbGQpO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UucHJvdG90eXBlLCBcImlzQ29sdW1uTGF5b3V0SG9yaXpvbnRhbFwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIGB0cnVlYCBpZiBjb2x1bW5zIGFyZSBwbGFjZWQgaW4gdGhlIGhvcml6b250YWwgZGlyZWN0aW9uIGFuZCByb3dzIGluIHRoZSB2ZXJ0aWNhbCBkaXJlY3Rpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIFRvIHNwZWNpZnkgdGhlIGxheW91dCwgdXNlIHRoZSBgY29sdW1uTGF5b3V0YCBwcm9wZXJ0eS4gSWYgeW91IHNldCBpdCB0byBgXCJ2ZXJ0aWNhbFwiYCwgdGhlIHN1cnZleSBhcHBsaWVzIGl0IG9ubHkgd2hlbiB0aGUgc2NyZWVuIGhhcyBlbm91Z2ggc3BhY2UuIE90aGVyd2lzZSwgdGhlIHN1cnZleSBmYWxscyBiYWNrIHRvIHRoZSBob3Jpem9udGFsIGxheW91dCwgYnV0IHRoZSBgY29sdW1uTGF5b3V0YCBwcm9wZXJ0eSByZW1haW5zIHNldCB0byBgXCJ2ZXJ0aWNhbFwiYC4gVW5saWtlIGBjb2x1bW5MYXlvdXRgLCB0aGUgYGlzQ29sdW1uTGF5b3V0SG9yaXpvbnRhbGAgcHJvcGVydHkgYWx3YXlzIGluZGljYXRlcyB0aGUgY3VycmVudCBsYXlvdXQuXG4gICAgICAgICAqIEBzZWUgY29sdW1uTGF5b3V0XG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzTW9iaWxlKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uTGF5b3V0ICE9IFwidmVydGljYWxcIjtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLnByb3RvdHlwZSwgXCJpc1VuaXF1ZUNhc2VTZW5zaXRpdmVcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogRW5hYmxlcyBjYXNlLXNlbnNpdGl2ZSBjb21wYXJpc29uIGluIGNvbHVtbnMgd2l0aCB0aGUgYGlzVW5pcXVlYCBwcm9wZXJ0eSBzZXQgdG8gYHRydWVgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBXaGVuIHRoaXMgcHJvcGVydHkgaXMgYHRydWVgLCBgXCJBQkNcImAgYW5kIGBcImFiY1wiYCBhcmUgY29uc2lkZXJlZCBkaWZmZXJlbnQgdmFsdWVzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBEZWZhdWx0IHZhbHVlOiBgZmFsc2VgXG4gICAgICAgICAqIEBzZWUga2V5RHVwbGljYXRpb25FcnJvclxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pc1VuaXF1ZUNhc2VTZW5zaXRpdmVWYWx1ZSAhPT0gdW5kZWZpbmVkID8gdGhpcy5pc1VuaXF1ZUNhc2VTZW5zaXRpdmVWYWx1ZSA6IF9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fW1wic2V0dGluZ3NcIl0uY29tcGFyYXRvci5jYXNlU2Vuc2l0aXZlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuaXNVbmlxdWVDYXNlU2Vuc2l0aXZlVmFsdWUgPSB2YWw7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZS5wcm90b3R5cGUsIFwiZGV0YWlsUGFuZWxNb2RlXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB0aGUgbG9jYXRpb24gb2YgZGV0YWlsIHNlY3Rpb25zLlxuICAgICAgICAgKlxuICAgICAgICAgKiBQb3NzaWJsZSB2YWx1ZXM6XG4gICAgICAgICAqXG4gICAgICAgICAqIC0gYFwidW5kZXJSb3dcImAgLSBEaXNwbGF5cyBkZXRhaWwgc2VjdGlvbnMgdW5kZXIgdGhlaXIgcmVzcGVjdGl2ZSByb3dzLiBVc2VycyBjYW4gZXhwYW5kIGFueSBudW1iZXIgb2YgZGV0YWlsIHNlY3Rpb25zLlxuICAgICAgICAgKiAtIGBcInVuZGVyUm93U2luZ2xlXCJgIC0gRGlzcGxheXMgZGV0YWlsIHNlY3Rpb25zIHVuZGVyIHRoZWlyIHJlc3BlY3RpdmUgcm93cywgYnV0IG9ubHkgb25lIGRldGFpbCBzZWN0aW9uIGNhbiBiZSBleHBhbmRlZCBhdCBhIHRpbWUuXG4gICAgICAgICAqIC0gYFwibm9uZVwiYCAoZGVmYXVsdCkgLSBIaWRlcyBkZXRhaWwgc2VjdGlvbnMuXG4gICAgICAgICAqXG4gICAgICAgICAqIFVzZSB0aGUgYGRldGFpbEVsZW1lbnRzYCBwcm9wZXJ0eSB0byBzcGVjaWZ5IGNvbnRlbnQgb2YgZGV0YWlsIHNlY3Rpb25zLlxuICAgICAgICAgKiBAc2VlIGRldGFpbEVsZW1lbnRzXG4gICAgICAgICAqIEBzZWUgZGV0YWlsUGFuZWxcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImRldGFpbFBhbmVsTW9kZVwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJkZXRhaWxQYW5lbE1vZGVcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLnByb3RvdHlwZSwgXCJkZXRhaWxQYW5lbFwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDb250YWlucyBhIFtgUGFuZWxNb2RlbGBdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vcGFuZWxtb2RlbCkgaW5zdGFuY2UgdGhhdCByZXByZXNlbnRzIGEgZGV0YWlsIHNlY3Rpb24gdGVtcGxhdGUuXG4gICAgICAgICAqIEBzZWUgZGV0YWlsRWxlbWVudHNcbiAgICAgICAgICogQHNlZSBkZXRhaWxQYW5lbE1vZGVcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGV0YWlsUGFuZWxWYWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UucHJvdG90eXBlLmdldFBhbmVsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZXRhaWxQYW5lbDtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLnByb3RvdHlwZSwgXCJkZXRhaWxFbGVtZW50c1wiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBbiBhcnJheSBvZiBzdXJ2ZXkgZWxlbWVudHMgKHF1ZXN0aW9ucyBhbmQgcGFuZWxzKSB0byBiZSBkaXNwbGF5ZWQgaW4gZGV0YWlsIHNlY3Rpb25zLlxuICAgICAgICAgKlxuICAgICAgICAgKiBEZXRhaWwgc2VjdGlvbnMgYXJlIGV4cGFuZGFibGUgcGFuZWxzIGRpc3BsYXllZCB1bmRlciBlYWNoIG1hdHJpeCByb3cuIFlvdSBjYW4gdXNlIHRoZW0gdG8gZGlzcGxheSBxdWVzdGlvbnMgdGhhdCBkbyBub3QgZml0IGludG8gdGhlIHJvdy5cbiAgICAgICAgICpcbiAgICAgICAgICogU2V0IHRoZSBgZGV0YWlsUGFuZWxNb2RlYCBwcm9wZXJ0eSB0byBgXCJ1bmRlclJvd1wiYCBvciBgXCJ1bmRlclJvd1NpbmdsZVwiYCB0byBkaXNwbGF5IGRldGFpbCBzZWN0aW9ucy5cbiAgICAgICAgICogQHNlZSBkZXRhaWxQYW5lbE1vZGVcbiAgICAgICAgICogQHNlZSBkZXRhaWxQYW5lbFxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kZXRhaWxQYW5lbC5lbGVtZW50cztcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UucHJvdG90eXBlLmNyZWF0ZU5ld0RldGFpbFBhbmVsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlNlcmlhbGl6ZXJcIl0uY3JlYXRlQ2xhc3MoXCJwYW5lbFwiKTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLnByb3RvdHlwZSwgXCJoYXNSb3dUZXh0XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UucHJvdG90eXBlLmdldEZvb3RlclRleHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UucHJvdG90eXBlLCBcImNhbkFkZFJvd1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UucHJvdG90eXBlLCBcImNhblJlbW92ZVJvd3NcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UucHJvdG90eXBlLmNhblJlbW92ZVJvdyA9IGZ1bmN0aW9uIChyb3cpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLnByb3RvdHlwZS5vblBvaW50ZXJEb3duID0gZnVuY3Rpb24gKHBvaW50ZXJEb3duRXZlbnQsIHJvdykgeyB9O1xuICAgIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UucHJvdG90eXBlLm9uUm93c0NoYW5nZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMucmVzZXRSZW5kZXJlZFRhYmxlKCk7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUub25Sb3dzQ2hhbmdlZC5jYWxsKHRoaXMpO1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZS5wcm90b3R5cGUub25TdGFydFJvd0FkZGluZ1JlbW92aW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmxvY2tSZXNldFJlbmRlcmVkVGFibGUgPSB0cnVlO1xuICAgICAgICB0aGlzLnNldFZhbHVlQ2hhbmdlZERpcmVjdGx5KCk7XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLnByb3RvdHlwZS5vbkVuZFJvd0FkZGluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5sb2NrUmVzZXRSZW5kZXJlZFRhYmxlID0gZmFsc2U7XG4gICAgICAgIGlmICghdGhpcy5yZW5kZXJlZFRhYmxlKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAodGhpcy5yZW5kZXJlZFRhYmxlLmlzUmVxdWlyZVJlc2V0KCkpIHtcbiAgICAgICAgICAgIHRoaXMucmVzZXRSZW5kZXJlZFRhYmxlKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLnZpc2libGVSb3dzLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVkVGFibGUub25BZGRlZFJvdyh0aGlzLnZpc2libGVSb3dzW2luZGV4XSwgaW5kZXgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLnByb3RvdHlwZS5vbkVuZFJvd1JlbW92aW5nID0gZnVuY3Rpb24gKHJvdykge1xuICAgICAgICB0aGlzLmxvY2tSZXNldFJlbmRlcmVkVGFibGUgPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMucmVuZGVyZWRUYWJsZS5pc1JlcXVpcmVSZXNldCgpKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0UmVuZGVyZWRUYWJsZSgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKCEhcm93KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlZFRhYmxlLm9uUmVtb3ZlZFJvdyhyb3cpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZS5wcm90b3R5cGUsIFwicmVuZGVyZWRUYWJsZVZhbHVlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicmVuZGVyZWRUYWJsZVwiLCBudWxsKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJyZW5kZXJlZFRhYmxlXCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLnByb3RvdHlwZS5jbGVhclJvd3NBbmRSZXNldFJlbmRlcmVkVGFibGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuY2xlYXJHZW5lcmF0ZWRSb3dzKCk7XG4gICAgICAgIHRoaXMucmVzZXRSZW5kZXJlZFRhYmxlKCk7XG4gICAgICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMuY29sdW1uc0NoYW5nZWRDYWxsYmFjayk7XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLnByb3RvdHlwZS5yZXNldFJlbmRlcmVkVGFibGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmxvY2tSZXNldFJlbmRlcmVkVGFibGUgfHwgdGhpcy5pc1VwZGF0ZUxvY2tlZClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5yZW5kZXJlZFRhYmxlVmFsdWUgPSBudWxsO1xuICAgICAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLm9uUmVuZGVyZWRUYWJsZVJlc2V0Q2FsbGJhY2spO1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZS5wcm90b3R5cGUuY2xlYXJHZW5lcmF0ZWRSb3dzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93c1tpXS5kaXNwb3NlKCk7XG4gICAgICAgIH1cbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5jbGVhckdlbmVyYXRlZFJvd3MuY2FsbCh0aGlzKTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLnByb3RvdHlwZSwgXCJpc1JlbmRyZWRUYWJsZUNyZWF0ZWRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAhIXRoaXMucmVuZGVyZWRUYWJsZVZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UucHJvdG90eXBlLCBcInJlbmRlcmVkVGFibGVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5yZW5kZXJlZFRhYmxlVmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVkVGFibGVWYWx1ZSA9IHRoaXMuY3JlYXRlUmVuZGVyZWRUYWJsZSgpO1xuICAgICAgICAgICAgICAgIGlmICghIXRoaXMub25SZW5kZXJlZFRhYmxlQ3JlYXRlZENhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25SZW5kZXJlZFRhYmxlQ3JlYXRlZENhbGxiYWNrKHRoaXMucmVuZGVyZWRUYWJsZVZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJlZFRhYmxlVmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLnByb3RvdHlwZS5jcmVhdGVSZW5kZXJlZFRhYmxlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gbmV3IF9xdWVzdGlvbl9tYXRyaXhkcm9wZG93bnJlbmRlcmVkX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fW1wiUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkVGFibGVcIl0odGhpcyk7XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLnByb3RvdHlwZS5vbk1hdHJpeFJvd0NyZWF0ZWQgPSBmdW5jdGlvbiAocm93KSB7XG4gICAgICAgIGlmICghdGhpcy5zdXJ2ZXkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgICAgICAgcm93VmFsdWU6IHJvdy52YWx1ZSxcbiAgICAgICAgICAgIHJvdzogcm93LFxuICAgICAgICAgICAgY29sdW1uOiBudWxsLFxuICAgICAgICAgICAgY29sdW1uTmFtZTogbnVsbCxcbiAgICAgICAgICAgIGNlbGw6IG51bGwsXG4gICAgICAgICAgICBjZWxsUXVlc3Rpb246IG51bGwsXG4gICAgICAgICAgICB2YWx1ZTogbnVsbCxcbiAgICAgICAgfTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnZpc2libGVDb2x1bW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBvcHRpb25zLmNvbHVtbiA9IHRoaXMudmlzaWJsZUNvbHVtbnNbaV07XG4gICAgICAgICAgICBvcHRpb25zLmNvbHVtbk5hbWUgPSBvcHRpb25zLmNvbHVtbi5uYW1lO1xuICAgICAgICAgICAgdmFyIGNlbGwgPSByb3cuY2VsbHNbaV07XG4gICAgICAgICAgICBvcHRpb25zLmNlbGwgPSBjZWxsO1xuICAgICAgICAgICAgb3B0aW9ucy5jZWxsUXVlc3Rpb24gPSBjZWxsLnF1ZXN0aW9uO1xuICAgICAgICAgICAgb3B0aW9ucy52YWx1ZSA9IGNlbGwudmFsdWU7XG4gICAgICAgICAgICBpZiAoISF0aGlzLm9uQ2VsbENyZWF0ZWRDYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIHRoaXMub25DZWxsQ3JlYXRlZENhbGxiYWNrKG9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zdXJ2ZXkubWF0cml4Q2VsbENyZWF0ZWQodGhpcywgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLnByb3RvdHlwZSwgXCJjZWxsVHlwZVwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgdGhlIHR5cGUgb2YgbWF0cml4IGNlbGxzLiBZb3UgY2FuIG92ZXJyaWRlIHRoaXMgcHJvcGVydHkgZm9yIGluZGl2aWR1YWwgY29sdW1ucy5cbiAgICAgICAgICpcbiAgICAgICAgICogUG9zc2libGUgdmFsdWVzOlxuICAgICAgICAgKlxuICAgICAgICAgKiAtIGBcImRyb3Bkb3duXCJgXG4gICAgICAgICAqIC0gYFwiY2hlY2tib3hcImBcbiAgICAgICAgICogLSBgXCJyYWRpb2dyb3VwXCJgXG4gICAgICAgICAqIC0gYFwidGV4dFwiYFxuICAgICAgICAgKiAtIGBcImNvbW1lbnRcImBcbiAgICAgICAgICogLSBgXCJib29sZWFuXCJgXG4gICAgICAgICAqIC0gYFwiZXhwcmVzc2lvblwiYFxuICAgICAgICAgKiAtIGBcInJhdGluZ1wiYFxuICAgICAgICAgKlxuICAgICAgICAgKiBEZWZhdWx0IHZhbHVlOiBgXCJkcm9wZG93blwiYCAoaW5oZXJpdGVkIGZyb20gW2BzZXR0aW5ncy5tYXRyaXguZGVmYXVsdENlbGxUeXBlYF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9zZXR0aW5ncyNtYXRyaXhEZWZhdWx0Q2VsbFR5cGUpKVxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY2VsbFR5cGVcIiwgX3NldHRpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bXCJzZXR0aW5nc1wiXS5tYXRyaXguZGVmYXVsdENlbGxUeXBlKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB2YWwgPSB2YWwudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNlbGxUeXBlXCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLnByb3RvdHlwZS51cGRhdGVDb2x1bW5zQ2VsbFR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jb2x1bW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbnNbaV0uZGVmYXVsdENlbGxUeXBlQ2hhbmdlZCgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLnByb3RvdHlwZS51cGRhdGVDb2x1bW5zSW5kZXhlcyA9IGZ1bmN0aW9uIChjb2xzKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29scy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29sc1tpXS5zZXRJbmRleChpKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UucHJvdG90eXBlLCBcImNvbHVtbkNvbENvdW50XCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgaW4gUmFkaW9ncm91cCBhbmQgQ2hlY2tib3ggY2VsbHMuXG4gICAgICAgICAqXG4gICAgICAgICAqIERlZmF1bHQgdmFsdWU6IDAgKHRoZSBudW1iZXIgb2YgY29sdW1ucyBpcyBzZWxlY3RlZCBhdXRvbWF0aWNhbGx5IGJhc2VkIG9uIHRoZSBhdmFpbGFibGUgY29sdW1uIHdpZHRoKVxuICAgICAgICAgKiBAc2VlIGNlbGxUeXBlXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjb2x1bW5Db2xDb3VudFwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSA8IDAgfHwgdmFsdWUgPiA0KVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNvbHVtbkNvbENvdW50XCIsIHZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLnByb3RvdHlwZSwgXCJob3Jpem9udGFsU2Nyb2xsXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaG9yaXpvbnRhbFNjcm9sbFwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJob3Jpem9udGFsU2Nyb2xsXCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZS5wcm90b3R5cGUsIFwiYWxsb3dBZGFwdGl2ZUFjdGlvbnNcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJhbGxvd0FkYXB0aXZlQWN0aW9uc1wiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJhbGxvd0FkYXB0aXZlQWN0aW9uc1wiLCB2YWwpO1xuICAgICAgICAgICAgaWYgKCEhdGhpcy5kZXRhaWxQYW5lbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGV0YWlsUGFuZWwuYWxsb3dBZGFwdGl2ZUFjdGlvbnMgPSB2YWw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLnByb3RvdHlwZS5nZXRSZXF1aXJlZFRleHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN1cnZleSA/IHRoaXMuc3VydmV5LnJlcXVpcmVkVGV4dCA6IFwiXCI7XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLnByb3RvdHlwZS5oYXNDaG9pY2VzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jaG9pY2VzLmxlbmd0aCA+IDA7XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLnByb3RvdHlwZS5vbkNvbHVtblByb3BlcnR5Q2hhbmdlZCA9IGZ1bmN0aW9uIChjb2x1bW4sIG5hbWUsIG5ld1ZhbHVlKSB7XG4gICAgICAgIHRoaXMudXBkYXRlSGFzRm9vdGVyKCk7XG4gICAgICAgIGlmICghdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzW2ldLnVwZGF0ZUNlbGxRdWVzdGlvbk9uQ29sdW1uQ2hhbmdlZChjb2x1bW4sIG5hbWUsIG5ld1ZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoISF0aGlzLmdlbmVyYXRlZFRvdGFsUm93KSB7XG4gICAgICAgICAgICB0aGlzLmdlbmVyYXRlZFRvdGFsUm93LnVwZGF0ZUNlbGxRdWVzdGlvbk9uQ29sdW1uQ2hhbmdlZChjb2x1bW4sIG5hbWUsIG5ld1ZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uQ29sdW1uc0NoYW5nZWQoKTtcbiAgICAgICAgaWYgKG5hbWUgPT0gXCJpc1JlcXVpcmVkXCIpIHtcbiAgICAgICAgICAgIHRoaXMucmVzZXRSZW5kZXJlZFRhYmxlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UucHJvdG90eXBlLm9uQ29sdW1uSXRlbVZhbHVlUHJvcGVydHlDaGFuZ2VkID0gZnVuY3Rpb24gKGNvbHVtbiwgcHJvcGVydHlOYW1lLCBvYmosIG5hbWUsIG5ld1ZhbHVlLCBvbGRWYWx1ZSkge1xuICAgICAgICBpZiAoIXRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93c1tpXS51cGRhdGVDZWxsUXVlc3Rpb25PbkNvbHVtbkl0ZW1WYWx1ZUNoYW5nZWQoY29sdW1uLCBwcm9wZXJ0eU5hbWUsIG9iaiwgbmFtZSwgbmV3VmFsdWUsIG9sZFZhbHVlKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZS5wcm90b3R5cGUub25TaG93SW5NdWx0aXBsZUNvbHVtbnNDaGFuZ2VkID0gZnVuY3Rpb24gKGNvbHVtbikge1xuICAgICAgICB0aGlzLnJlc2V0VGFibGVBbmRSb3dzKCk7XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLnByb3RvdHlwZS5vbkNvbHVtblZpc2liaWxpdHlDaGFuZ2VkID0gZnVuY3Rpb24gKGNvbHVtbikge1xuICAgICAgICB0aGlzLnJlc2V0VGFibGVBbmRSb3dzKCk7XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLnByb3RvdHlwZS5vbkNvbHVtbkNlbGxUeXBlQ2hhbmdlZCA9IGZ1bmN0aW9uIChjb2x1bW4pIHtcbiAgICAgICAgdGhpcy5yZXNldFRhYmxlQW5kUm93cygpO1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZS5wcm90b3R5cGUucmVzZXRUYWJsZUFuZFJvd3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuY2xlYXJHZW5lcmF0ZWRSb3dzKCk7XG4gICAgICAgIHRoaXMucmVzZXRSZW5kZXJlZFRhYmxlKCk7XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLnByb3RvdHlwZS5nZXRSb3dUaXRsZVdpZHRoID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLnByb3RvdHlwZSwgXCJoYXNGb290ZXJcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJoYXNGb290ZXJcIiwgZmFsc2UpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZS5wcm90b3R5cGUuZ2V0QWRkUm93TG9jYXRpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBcImRlZmF1bHRcIjtcbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UucHJvdG90eXBlLmdldFNob3dDb2x1bW5zSWZFbXB0eSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZS5wcm90b3R5cGUudXBkYXRlU2hvd1RhYmxlQW5kQWRkUm93ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoISF0aGlzLnJlbmRlcmVkVGFibGUpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZWRUYWJsZS51cGRhdGVTaG93VGFibGVBbmRBZGRSb3coKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZS5wcm90b3R5cGUudXBkYXRlSGFzRm9vdGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJoYXNGb290ZXJcIiwgdGhpcy5oYXNUb3RhbCk7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZS5wcm90b3R5cGUsIFwiaGFzVG90YWxcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jb2x1bW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY29sdW1uc1tpXS5oYXNUb3RhbClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLnByb3RvdHlwZS5nZXRDZWxsVHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2VsbFR5cGU7XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLnByb3RvdHlwZS5nZXRDdXN0b21DZWxsVHlwZSA9IGZ1bmN0aW9uIChjb2x1bW4sIHJvdywgY2VsbFR5cGUpIHtcbiAgICAgICAgaWYgKCF0aGlzLnN1cnZleSlcbiAgICAgICAgICAgIHJldHVybiBjZWxsVHlwZTtcbiAgICAgICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICAgICAgICByb3dWYWx1ZTogcm93LnZhbHVlLFxuICAgICAgICAgICAgcm93OiByb3csXG4gICAgICAgICAgICBjb2x1bW46IGNvbHVtbixcbiAgICAgICAgICAgIGNvbHVtbk5hbWU6IGNvbHVtbi5uYW1lLFxuICAgICAgICAgICAgY2VsbFR5cGU6IGNlbGxUeXBlXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuc3VydmV5Lm1hdHJpeENlbGxDcmVhdGluZyh0aGlzLCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMuY2VsbFR5cGU7XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLnByb3RvdHlwZS5nZXRDb25kaXRpb25Kc29uID0gZnVuY3Rpb24gKG9wZXJhdG9yLCBwYXRoKSB7XG4gICAgICAgIGlmIChvcGVyYXRvciA9PT0gdm9pZCAwKSB7IG9wZXJhdG9yID0gbnVsbDsgfVxuICAgICAgICBpZiAocGF0aCA9PT0gdm9pZCAwKSB7IHBhdGggPSBudWxsOyB9XG4gICAgICAgIGlmICghcGF0aClcbiAgICAgICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLmdldENvbmRpdGlvbkpzb24uY2FsbCh0aGlzKTtcbiAgICAgICAgdmFyIGNvbHVtbk5hbWUgPSBcIlwiO1xuICAgICAgICBmb3IgKHZhciBpID0gcGF0aC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgaWYgKHBhdGhbaV0gPT0gXCIuXCIpXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjb2x1bW5OYW1lID0gcGF0aFtpXSArIGNvbHVtbk5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNvbHVtbiA9IHRoaXMuZ2V0Q29sdW1uQnlOYW1lKGNvbHVtbk5hbWUpO1xuICAgICAgICBpZiAoIWNvbHVtbilcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB2YXIgcXVlc3Rpb24gPSBjb2x1bW4uY3JlYXRlQ2VsbFF1ZXN0aW9uKG51bGwpO1xuICAgICAgICBpZiAoIXF1ZXN0aW9uKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIHJldHVybiBxdWVzdGlvbi5nZXRDb25kaXRpb25Kc29uKG9wZXJhdG9yKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UucHJvdG90eXBlLmNsZWFySW5jb3JyZWN0VmFsdWVzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcm93cyA9IHRoaXMudmlzaWJsZVJvd3M7XG4gICAgICAgIGlmICghcm93cylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICByb3dzW2ldLmNsZWFySW5jb3JyZWN0VmFsdWVzKHRoaXMuZ2V0Um93VmFsdWUoaSkpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLnByb3RvdHlwZS5jbGVhckVycm9ycyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5jbGVhckVycm9ycy5jYWxsKHRoaXMpO1xuICAgICAgICB0aGlzLnJ1bkZ1bmNGb3JDZWxsUXVlc3Rpb25zKGZ1bmN0aW9uIChxKSB7IHEuY2xlYXJFcnJvcnMoKTsgfSk7XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLnByb3RvdHlwZS5sb2NhbGVDaGFuZ2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBfc3VwZXIucHJvdG90eXBlLmxvY2FsZUNoYW5nZWQuY2FsbCh0aGlzKTtcbiAgICAgICAgdGhpcy5ydW5GdW5jRm9yQ2VsbFF1ZXN0aW9ucyhmdW5jdGlvbiAocSkgeyBxLmxvY2FsZUNoYW5nZWQoKTsgfSk7XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLnByb3RvdHlwZS5ydW5GdW5jRm9yQ2VsbFF1ZXN0aW9ucyA9IGZ1bmN0aW9uIChmdW5jKSB7XG4gICAgICAgIGlmICghIXRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciByb3cgPSB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzW2ldO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcm93LmNlbGxzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmMocm93LmNlbGxzW2pdLnF1ZXN0aW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UucHJvdG90eXBlLnJ1bkNvbmRpdGlvbiA9IGZ1bmN0aW9uICh2YWx1ZXMsIHByb3BlcnRpZXMpIHtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5ydW5Db25kaXRpb24uY2FsbCh0aGlzLCB2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgICAgICB2YXIgY291bnRlciA9IDA7XG4gICAgICAgIHZhciBwcmV2VG90YWxWYWx1ZTtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgcHJldlRvdGFsVmFsdWUgPSBfaGVscGVyc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiSGVscGVyc1wiXS5nZXRVbmJpbmRWYWx1ZSh0aGlzLnRvdGFsVmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5ydW5DZWxsc0NvbmRpdGlvbih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgICAgICAgICAgdGhpcy5ydW5Ub3RhbHNDb25kaXRpb24odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgIGNvdW50ZXIrKztcbiAgICAgICAgfSB3aGlsZSAoIV9oZWxwZXJzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJIZWxwZXJzXCJdLmlzVHdvVmFsdWVFcXVhbHMocHJldlRvdGFsVmFsdWUsIHRoaXMudG90YWxWYWx1ZSkgJiZcbiAgICAgICAgICAgIGNvdW50ZXIgPCAzKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UucHJvdG90eXBlLnJ1blRyaWdnZXJzID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUucnVuVHJpZ2dlcnMuY2FsbCh0aGlzLCBuYW1lLCB2YWx1ZSk7XG4gICAgICAgIHRoaXMucnVuRnVuY0ZvckNlbGxRdWVzdGlvbnMoZnVuY3Rpb24gKHEpIHsgcS5ydW5UcmlnZ2VycyhuYW1lLCB2YWx1ZSk7IH0pO1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZS5wcm90b3R5cGUuc2hvdWxkUnVuQ29sdW1uRXhwcmVzc2lvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZS5wcm90b3R5cGUucnVuQ2VsbHNDb25kaXRpb24gPSBmdW5jdGlvbiAodmFsdWVzLCBwcm9wZXJ0aWVzKSB7XG4gICAgICAgIGlmICghdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIG5ld1ZhbHVlcyA9IHRoaXMuZ2V0Um93Q29uZGl0aW9uVmFsdWVzKHZhbHVlcyk7XG4gICAgICAgIHZhciByb3dzID0gdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cztcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICByb3dzW2ldLnJ1bkNvbmRpdGlvbihuZXdWYWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hlY2tDb2x1bW5zVmlzaWJpbGl0eSgpO1xuICAgICAgICB0aGlzLmNoZWNrQ29sdW1uc1JlbmRlcmVkUmVxdWlyZWQoKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UucHJvdG90eXBlLmNoZWNrQ29sdW1uc1Zpc2liaWxpdHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzRGVzaWduTW9kZSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIGhhc0NoYW5nZWQgPSBmYWxzZTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnZpc2libGVDb2x1bW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgY29sdW1uID0gdGhpcy52aXNpYmxlQ29sdW1uc1tpXTtcbiAgICAgICAgICAgIGlmICghY29sdW1uLnZpc2libGVJZiAmJiAhY29sdW1uLmlzRmlsdGVyZWRNdWx0aXBsZUNvbHVtbnMpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBoYXNDaGFuZ2VkID0gdGhpcy5pc0NvbHVtblZpc2liaWxpdHlDaGFuZ2VkKGNvbHVtbikgfHwgaGFzQ2hhbmdlZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaGFzQ2hhbmdlZCkge1xuICAgICAgICAgICAgdGhpcy5yZXNldFJlbmRlcmVkVGFibGUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZS5wcm90b3R5cGUuY2hlY2tDb2x1bW5zUmVuZGVyZWRSZXF1aXJlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHJvd3MgPSB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudmlzaWJsZUNvbHVtbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBjb2x1bW4gPSB0aGlzLnZpc2libGVDb2x1bW5zW2ldO1xuICAgICAgICAgICAgaWYgKCFjb2x1bW4ucmVxdWlyZWRJZilcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIHZhciByZXF1aXJlZCA9IHJvd3MubGVuZ3RoID4gMDtcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcm93cy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIGlmICghcm93c1tqXS5jZWxsc1tpXS5xdWVzdGlvbi5pc1JlcXVpcmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbHVtbi51cGRhdGVJc1JlbmRlcmVkUmVxdWlyZWQocmVxdWlyZWQpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLnByb3RvdHlwZS5pc0NvbHVtblZpc2liaWxpdHlDaGFuZ2VkID0gZnVuY3Rpb24gKGNvbHVtbikge1xuICAgICAgICB2YXIgY3VyVmlzID0gY29sdW1uLmlzQ29sdW1uVmlzaWJsZTtcbiAgICAgICAgdmFyIGlzTXVsdGlwbGVDb2x1bW5zVmlzaWJpbGl0eSA9IGNvbHVtbi5pc0ZpbHRlcmVkTXVsdGlwbGVDb2x1bW5zO1xuICAgICAgICB2YXIgY3VyVmlzaWJsZUNob2ljZXMgPSBpc011bHRpcGxlQ29sdW1uc1Zpc2liaWxpdHkgPyBjb2x1bW4uZ2V0VmlzaWJsZUNob2ljZXNJbkNlbGwgOiBbXTtcbiAgICAgICAgdmFyIG5ld1Zpc2libGVDaG9pY2VzID0gbmV3IEFycmF5KCk7XG4gICAgICAgIHZhciBoYXNWaXNDZWxsID0gZmFsc2U7XG4gICAgICAgIHZhciByb3dzID0gdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cztcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgY2VsbCA9IHJvd3NbaV0uY2VsbHNbY29sdW1uLmluZGV4XTtcbiAgICAgICAgICAgIHZhciBxID0gY2VsbCA9PT0gbnVsbCB8fCBjZWxsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjZWxsLnF1ZXN0aW9uO1xuICAgICAgICAgICAgaWYgKCEhcSAmJiBxLmlzVmlzaWJsZSkge1xuICAgICAgICAgICAgICAgIGhhc1Zpc0NlbGwgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGlmIChpc011bHRpcGxlQ29sdW1uc1Zpc2liaWxpdHkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVOZXdWaXNpYmxlQ2hvaWNlcyhxLCBuZXdWaXNpYmxlQ2hvaWNlcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29sdW1uLmhhc1Zpc2libGVDZWxsID0gaGFzVmlzQ2VsbDtcbiAgICAgICAgaWYgKGlzTXVsdGlwbGVDb2x1bW5zVmlzaWJpbGl0eSkge1xuICAgICAgICAgICAgY29sdW1uLnNldFZpc2libGVDaG9pY2VzSW5DZWxsKG5ld1Zpc2libGVDaG9pY2VzKTtcbiAgICAgICAgICAgIGlmICghX2hlbHBlcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIkhlbHBlcnNcIl0uaXNBcnJheXNFcXVhbChjdXJWaXNpYmxlQ2hvaWNlcywgbmV3VmlzaWJsZUNob2ljZXMsIHRydWUsIGZhbHNlLCBmYWxzZSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGN1clZpcyAhPSBjb2x1bW4uaXNWaXNpYmxlO1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZS5wcm90b3R5cGUudXBkYXRlTmV3VmlzaWJsZUNob2ljZXMgPSBmdW5jdGlvbiAocSwgZGVzdCkge1xuICAgICAgICB2YXIgY2hvaWNlcyA9IHEudmlzaWJsZUNob2ljZXM7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShjaG9pY2VzKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaG9pY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgY2ggPSBjaG9pY2VzW2ldO1xuICAgICAgICAgICAgaWYgKGRlc3QuaW5kZXhPZihjaC52YWx1ZSkgPCAwKVxuICAgICAgICAgICAgICAgIGRlc3QucHVzaChjaC52YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UucHJvdG90eXBlLnJ1blRvdGFsc0NvbmRpdGlvbiA9IGZ1bmN0aW9uICh2YWx1ZXMsIHByb3BlcnRpZXMpIHtcbiAgICAgICAgaWYgKCF0aGlzLmdlbmVyYXRlZFRvdGFsUm93KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLmdlbmVyYXRlZFRvdGFsUm93LnJ1bkNvbmRpdGlvbih0aGlzLmdldFJvd0NvbmRpdGlvblZhbHVlcyh2YWx1ZXMpLCBwcm9wZXJ0aWVzKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UucHJvdG90eXBlLmdldFJvd0NvbmRpdGlvblZhbHVlcyA9IGZ1bmN0aW9uICh2YWx1ZXMpIHtcbiAgICAgICAgdmFyIG5ld1ZhbHVlcyA9IHZhbHVlcztcbiAgICAgICAgaWYgKCFuZXdWYWx1ZXMpXG4gICAgICAgICAgICBuZXdWYWx1ZXMgPSB7fTtcbiAgICAgICAgLypcbiAgICAgICAgdmFyIG5ld1ZhbHVlczogeyBbaW5kZXg6IHN0cmluZ106IGFueSB9ID0ge307XG4gICAgICAgIGlmICh2YWx1ZXMgJiYgdmFsdWVzIGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICAgICAgbmV3VmFsdWVzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh2YWx1ZXMpKTtcbiAgICAgICAgfVxuICAgICAgICAqL1xuICAgICAgICB2YXIgdG90YWxSb3cgPSB7fTtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsdWVFbXB0eSh0aGlzLnRvdGFsVmFsdWUpKSB7XG4gICAgICAgICAgICB0b3RhbFJvdyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy50b3RhbFZhbHVlKSk7XG4gICAgICAgIH1cbiAgICAgICAgbmV3VmFsdWVzW1wicm93XCJdID0ge307XG4gICAgICAgIG5ld1ZhbHVlc1tcInRvdGFsUm93XCJdID0gdG90YWxSb3c7XG4gICAgICAgIHJldHVybiBuZXdWYWx1ZXM7XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLnByb3RvdHlwZS5Jc011bHRpcGx5Q29sdW1uID0gZnVuY3Rpb24gKGNvbHVtbikge1xuICAgICAgICByZXR1cm4gY29sdW1uLmlzU2hvd0luTXVsdGlwbGVDb2x1bW5zICYmICF0aGlzLmlzTW9iaWxlO1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZS5wcm90b3R5cGUubG9jU3Ryc0NoYW5nZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUubG9jU3Ryc0NoYW5nZWQuY2FsbCh0aGlzKTtcbiAgICAgICAgdmFyIGNvbHVtbnMgPSB0aGlzLmNvbHVtbnM7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29sdW1ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29sdW1uc1tpXS5sb2NTdHJzQ2hhbmdlZCgpO1xuICAgICAgICB9XG4gICAgICAgIHZhciByb3dzID0gdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cztcbiAgICAgICAgaWYgKCFyb3dzKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHJvd3NbaV0ubG9jU3Ryc0NoYW5nZWQoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoISF0aGlzLmdlbmVyYXRlZFRvdGFsUm93KSB7XG4gICAgICAgICAgICB0aGlzLmdlbmVyYXRlZFRvdGFsUm93LmxvY1N0cnNDaGFuZ2VkKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBtYXRyaXggY29sdW1uIHdpdGggYSBnaXZlbiBgbmFtZWAgb3IgYG51bGxgIGlmIGEgY29sdW1uIHdpdGggdGhpcyBpcyBub3QgZm91bmQuXG4gICAgICogQHBhcmFtIGNvbHVtbk5hbWUgQSBjb2x1bW4gbmFtZS5cbiAgICAgKi9cbiAgICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLnByb3RvdHlwZS5nZXRDb2x1bW5CeU5hbWUgPSBmdW5jdGlvbiAoY29sdW1uTmFtZSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY29sdW1ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRoaXMuY29sdW1uc1tpXS5uYW1lID09IGNvbHVtbk5hbWUpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uc1tpXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UucHJvdG90eXBlLmdldENvbHVtbk5hbWUgPSBmdW5jdGlvbiAoY29sdW1uTmFtZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRDb2x1bW5CeU5hbWUoY29sdW1uTmFtZSk7XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLnByb3RvdHlwZS5nZXRDb2x1bW5XaWR0aCA9IGZ1bmN0aW9uIChjb2x1bW4pIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gY29sdW1uLm1pbldpZHRoID8gY29sdW1uLm1pbldpZHRoIDogdGhpcy5jb2x1bW5NaW5XaWR0aCA/IHRoaXMuY29sdW1uTWluV2lkdGggOiAoKChfYSA9IF9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fW1wic2V0dGluZ3NcIl0ubWF0cml4LmNvbHVtbldpZHRoc0J5VHlwZVtjb2x1bW4uY2VsbFR5cGVdKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubWluV2lkdGgpIHx8IFwiXCIpO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UucHJvdG90eXBlLCBcImNob2ljZXNcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogR2V0cyBvciBzZXRzIGNob2ljZSBpdGVtcyBmb3IgRHJvcGRvd24sIENoZWNrYm94LCBhbmQgUmFkaW9ncm91cCBtYXRyaXggY2VsbHMuIFlvdSBjYW4gb3ZlcnJpZGUgdGhpcyBwcm9wZXJ0eSBmb3IgaW5kaXZpZHVhbCBjb2x1bW5zLlxuICAgICAgICAgKlxuICAgICAgICAgKiBUaGlzIHByb3BlcnR5IGFjY2VwdHMgYW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlOlxuICAgICAgICAgKlxuICAgICAgICAgKiBgYGBqc1xuICAgICAgICAgKiB7XG4gICAgICAgICAqICAgXCJ2YWx1ZVwiOiBhbnksIC8vIEEgdmFsdWUgdG8gYmUgc2F2ZWQgaW4gc3VydmV5IHJlc3VsdHNcbiAgICAgICAgICogICBcInRleHRcIjogU3RyaW5nLCAvLyBBIGRpc3BsYXkgdGV4dC4gVGhpcyBwcm9wZXJ0eSBzdXBwb3J0cyBNYXJrZG93bi4gV2hlbiBgdGV4dGAgaXMgdW5kZWZpbmVkLCBgdmFsdWVgIGlzIHVzZWQuXG4gICAgICAgICAqICAgXCJjdXN0b21Qcm9wZXJ0eVwiOiBhbnkgLy8gQW55IHByb3BlcnR5IHRoYXQgeW91IGZpbmQgdXNlZnVsLlxuICAgICAgICAgKiB9XG4gICAgICAgICAqIGBgYFxuICAgICAgICAgKlxuICAgICAgICAgKiBUbyBlbmFibGUgTWFya2Rvd24gc3VwcG9ydCBmb3IgdGhlIGB0ZXh0YCBwcm9wZXJ0eSwgaW1wbGVtZW50IE1hcmtkb3duLXRvLUhUTUwgY29udmVyc2lvbiBpbiB0aGUgW29uVGV4dE1hcmtkb3duXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2Uvc3VydmV5LWRhdGEtbW9kZWwjb25UZXh0TWFya2Rvd24pIGV2ZW50IGhhbmRsZXIuIEZvciBhbiBleGFtcGxlLCByZWZlciB0byB0aGUgZm9sbG93aW5nIGRlbW86IFtDb252ZXJ0IE1hcmtkb3duIHRvIEhUTUwgd2l0aCBTaG93ZG93bl0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZXhhbXBsZXMvZWRpdC1zdXJ2ZXktcXVlc3Rpb25zLW1hcmtkb3duLykuXG4gICAgICAgICAqXG4gICAgICAgICAqIElmIHlvdSBhZGQgY3VzdG9tIHByb3BlcnRpZXMsIHJlZmVyIHRvIHRoZSBmb2xsb3dpbmcgaGVscCB0b3BpYyB0byBsZWFybiBob3cgdG8gc2VyaWFsaXplIHRoZW0gaW50byBKU09OOiBbQWRkIEN1c3RvbSBQcm9wZXJ0aWVzIHRvIFByb3BlcnR5IEdyaWRdKGh0dHBzOi8vc3VydmV5anMuaW8vc3VydmV5LWNyZWF0b3IvZG9jdW1lbnRhdGlvbi9wcm9wZXJ0eS1ncmlkI2FkZC1jdXN0b20tcHJvcGVydGllcy10by10aGUtcHJvcGVydHktZ3JpZCkuXG4gICAgICAgICAqXG4gICAgICAgICAqIElmIHlvdSBuZWVkIHRvIHNwZWNpZnkgb25seSB0aGUgYHZhbHVlYCBwcm9wZXJ0eSwgeW91IGNhbiBzZXQgdGhlIGBjaG9pY2VzYCBwcm9wZXJ0eSB0byBhbiBhcnJheSBvZiBwcmltaXRpdmUgdmFsdWVzLCBmb3IgZXhhbXBsZSwgYFsgXCJpdGVtMVwiLCBcIml0ZW0yXCIsIFwiaXRlbTNcIiBdYC4gVGhlc2UgdmFsdWVzIGFyZSBib3RoIHNhdmVkIGluIHN1cnZleSByZXN1bHRzIGFuZCB1c2VkIGFzIGRpc3BsYXkgdGV4dC5cbiAgICAgICAgICogQHNlZSBjZWxsVHlwZVxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY2hvaWNlc1wiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjaG9pY2VzXCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZS5wcm90b3R5cGUsIFwicGxhY2Vob2xkZXJcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogQSBwbGFjZWhvbGRlciBmb3IgRHJvcGRvd24gbWF0cml4IGNlbGxzLlxuICAgICAgICAgKiBAc2VlIGNlbGxUeXBlXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcInBsYWNlaG9sZGVyXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwicGxhY2Vob2xkZXJcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLnByb3RvdHlwZSwgXCJsb2NQbGFjZWhvbGRlclwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJwbGFjZWhvbGRlclwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLnByb3RvdHlwZSwgXCJvcHRpb25zQ2FwdGlvblwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGxhY2Vob2xkZXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5wbGFjZWhvbGRlciA9IHZhbDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLnByb3RvdHlwZSwgXCJrZXlEdXBsaWNhdGlvbkVycm9yXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFuIGVycm9yIG1lc3NhZ2UgZGlzcGxheWVkIHdoZW4gdXNlcnMgZW50ZXIgYSBkdXBsaWNhdGUgdmFsdWUgaW50byBhIGNvbHVtbiB0aGF0IGFjY2VwdHMgb25seSB1bmlxdWUgdmFsdWVzIChgaXNVbmlxdWVgIGlzIHNldCB0byBgdHJ1ZWAgb3IgYGtleU5hbWVgIGlzIHNwZWNpZmllZCkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEEgZGVmYXVsdCB2YWx1ZSBmb3IgdGhpcyBwcm9wZXJ0eSBpcyB0YWtlbiBmcm9tIGEgW2xvY2FsaXphdGlvbiBkaWN0aW9uYXJ5XShodHRwczovL2dpdGh1Yi5jb20vc3VydmV5anMvc3VydmV5LWxpYnJhcnkvdHJlZS9tYXN0ZXIvc3JjL2xvY2FsaXphdGlvbikuIFJlZmVyIHRvIHRoZSBmb2xsb3dpbmcgaGVscCB0b3BpYyBmb3IgbW9yZSBpbmZvcm1hdGlvbjogW0xvY2FsaXphdGlvbiAmIEdsb2JhbGl6YXRpb25dKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vbG9jYWxpemF0aW9uKS5cbiAgICAgICAgICogQHNlZSBpc1VuaXF1ZUNhc2VTZW5zaXRpdmVcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwia2V5RHVwbGljYXRpb25FcnJvclwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImtleUR1cGxpY2F0aW9uRXJyb3JcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLnByb3RvdHlwZSwgXCJsb2NLZXlEdXBsaWNhdGlvbkVycm9yXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcImtleUR1cGxpY2F0aW9uRXJyb3JcIik7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZS5wcm90b3R5cGUsIFwic3RvcmVPdGhlcnNBc0NvbW1lbnRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAhIXRoaXMuc3VydmV5ID8gdGhpcy5zdXJ2ZXkuc3RvcmVPdGhlcnNBc0NvbW1lbnQgOiBmYWxzZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UucHJvdG90eXBlLmFkZENvbHVtbiA9IGZ1bmN0aW9uIChuYW1lLCB0aXRsZSkge1xuICAgICAgICBpZiAodGl0bGUgPT09IHZvaWQgMCkgeyB0aXRsZSA9IG51bGw7IH1cbiAgICAgICAgdmFyIGNvbHVtbiA9IG5ldyBfcXVlc3Rpb25fbWF0cml4ZHJvcGRvd25jb2x1bW5fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX19bXCJNYXRyaXhEcm9wZG93bkNvbHVtblwiXShuYW1lLCB0aXRsZSk7XG4gICAgICAgIHRoaXMuY29sdW1ucy5wdXNoKGNvbHVtbik7XG4gICAgICAgIHJldHVybiBjb2x1bW47XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLnByb3RvdHlwZS5nZXRWaXNpYmxlUm93cyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgaWYgKHRoaXMuaXNVcGRhdGVMb2NrZWQpXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgaWYgKCF0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzKSB7XG4gICAgICAgICAgICB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzID0gdGhpcy5nZW5lcmF0ZVJvd3MoKTtcbiAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MuZm9yRWFjaChmdW5jdGlvbiAocm93KSB7IHJldHVybiBfdGhpcy5vbk1hdHJpeFJvd0NyZWF0ZWQocm93KTsgfSk7XG4gICAgICAgICAgICBpZiAodGhpcy5kYXRhKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ydW5DZWxsc0NvbmRpdGlvbih0aGlzLmRhdGEuZ2V0RmlsdGVyZWRWYWx1ZXMoKSwgdGhpcy5kYXRhLmdldEZpbHRlcmVkUHJvcGVydGllcygpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudXBkYXRlVmFsdWVPblJvd3NHZW5lcmF0aW9uKHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVJc0Fuc3dlcmVkKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3M7XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLnByb3RvdHlwZS51cGRhdGVWYWx1ZU9uUm93c0dlbmVyYXRpb24gPSBmdW5jdGlvbiAocm93cykge1xuICAgICAgICB2YXIgb2xkVmFsdWUgPSB0aGlzLmNyZWF0ZU5ld1ZhbHVlKHRydWUpO1xuICAgICAgICB2YXIgbmV3VmFsdWUgPSB0aGlzLmNyZWF0ZU5ld1ZhbHVlKCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIHJvdyA9IHJvd3NbaV07XG4gICAgICAgICAgICBpZiAoISFyb3cuZWRpdGluZ09iailcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIHZhciByb3dWYWx1ZSA9IHRoaXMuZ2V0Um93VmFsdWUoaSk7XG4gICAgICAgICAgICB2YXIgclZhbHVlID0gcm93LnZhbHVlO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNUd29WYWx1ZUVxdWFscyhyb3dWYWx1ZSwgclZhbHVlKSlcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gdGhpcy5nZXROZXdWYWx1ZU9uUm93Q2hhbmdlZChyb3csIFwiXCIsIHJWYWx1ZSwgZmFsc2UsIG5ld1ZhbHVlKVxuICAgICAgICAgICAgICAgIC52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc1R3b1ZhbHVlRXF1YWxzKG9sZFZhbHVlLCBuZXdWYWx1ZSkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMuaXNSb3dDaGFuZ2luZyA9IHRydWU7XG4gICAgICAgIHRoaXMuc2V0TmV3VmFsdWUobmV3VmFsdWUpO1xuICAgICAgICB0aGlzLmlzUm93Q2hhbmdpbmcgPSBmYWxzZTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLnByb3RvdHlwZSwgXCJ0b3RhbFZhbHVlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaGFzVG90YWwgfHwgIXRoaXMudmlzaWJsZVRvdGFsUm93KVxuICAgICAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZpc2libGVUb3RhbFJvdy52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UucHJvdG90eXBlLmdldFZpc2libGVUb3RhbFJvdyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNVcGRhdGVMb2NrZWQpXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgaWYgKHRoaXMuaGFzVG90YWwpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5nZW5lcmF0ZWRUb3RhbFJvdykge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVkVG90YWxSb3cgPSB0aGlzLmdlbmVyYXRlVG90YWxSb3coKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBwcm9wZXJ0aWVzID0geyBzdXJ2ZXk6IHRoaXMuc3VydmV5IH07XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucnVuVG90YWxzQ29uZGl0aW9uKHRoaXMuZGF0YS5nZXRBbGxWYWx1ZXMoKSwgcHJvcGVydGllcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZWRUb3RhbFJvdyA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2VuZXJhdGVkVG90YWxSb3c7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZS5wcm90b3R5cGUsIFwidmlzaWJsZVRvdGFsUm93XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRWaXNpYmxlVG90YWxSb3coKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UucHJvdG90eXBlLm9uU3VydmV5TG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5vblN1cnZleUxvYWQuY2FsbCh0aGlzKTtcbiAgICAgICAgdGhpcy51cGRhdGVDb2x1bW5zSW5kZXhlcyh0aGlzLmNvbHVtbnMpO1xuICAgICAgICB0aGlzLmNsZWFyR2VuZXJhdGVkUm93cygpO1xuICAgICAgICB0aGlzLmdlbmVyYXRlZFRvdGFsUm93ID0gbnVsbDtcbiAgICAgICAgdGhpcy51cGRhdGVIYXNGb290ZXIoKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gb2JqZWN0IHdpdGggcm93IHZhbHVlcy4gSWYgYSByb3cgaGFzIG5vIGFuc3dlcnMsIHRoaXMgbWV0aG9kIHJldHVybnMgYW4gZW1wdHkgb2JqZWN0LlxuICAgICAqIEBwYXJhbSByb3dJbmRleCBBIHplcm8tYmFzZWQgcm93IGluZGV4LlxuICAgICAqIEBzZWUgc2V0Um93VmFsdWVcbiAgICAgKi9cbiAgICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLnByb3RvdHlwZS5nZXRSb3dWYWx1ZSA9IGZ1bmN0aW9uIChyb3dJbmRleCkge1xuICAgICAgICBpZiAocm93SW5kZXggPCAwKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIHZhciB2aXNSb3dzID0gdGhpcy52aXNpYmxlUm93cztcbiAgICAgICAgaWYgKHJvd0luZGV4ID49IHZpc1Jvd3MubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIHZhciBuZXdWYWx1ZSA9IHRoaXMuY3JlYXRlTmV3VmFsdWUoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Um93VmFsdWVDb3JlKHZpc1Jvd3Nbcm93SW5kZXhdLCBuZXdWYWx1ZSk7XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLnByb3RvdHlwZS5jaGVja0lmVmFsdWVJblJvd0R1cGxpY2F0ZWQgPSBmdW5jdGlvbiAoY2hlY2tlZFJvdywgY2VsbFF1ZXN0aW9uKSB7XG4gICAgICAgIGlmICghdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cylcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgdmFyIHJlcyA9IGZhbHNlO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciByb3cgPSB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzW2ldO1xuICAgICAgICAgICAgaWYgKGNoZWNrZWRSb3cgPT09IHJvdylcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIGlmIChfaGVscGVyc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiSGVscGVyc1wiXS5pc1R3b1ZhbHVlRXF1YWxzKHJvdy5nZXRWYWx1ZShjZWxsUXVlc3Rpb24ubmFtZSksIGNlbGxRdWVzdGlvbi52YWx1ZSwgdHJ1ZSwgdGhpcy5pc1VuaXF1ZUNhc2VTZW5zaXRpdmUpKSB7XG4gICAgICAgICAgICAgICAgcmVzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgICB0aGlzLmFkZER1cGxpY2F0aW9uRXJyb3IoY2VsbFF1ZXN0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNlbGxRdWVzdGlvbi5jbGVhckVycm9ycygpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBBc3NpZ25zIHZhbHVlcyB0byBhIHJvdy5cbiAgICAgKiBAcGFyYW0gcm93SW5kZXggQSB6ZXJvLWJhc2VkIHJvdyBpbmRleC5cbiAgICAgKiBAcGFyYW0gcm93VmFsdWUgQW4gb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmU6IGB7IFwiY29sdW1uX25hbWVcIjogY29sdW1uVmFsdWUsIC4uLiB9YFxuICAgICAqIEBzZWUgZ2V0Um93VmFsdWVcbiAgICAgKi9cbiAgICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLnByb3RvdHlwZS5zZXRSb3dWYWx1ZSA9IGZ1bmN0aW9uIChyb3dJbmRleCwgcm93VmFsdWUpIHtcbiAgICAgICAgaWYgKHJvd0luZGV4IDwgMClcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB2YXIgdmlzUm93cyA9IHRoaXMudmlzaWJsZVJvd3M7XG4gICAgICAgIGlmIChyb3dJbmRleCA+PSB2aXNSb3dzLmxlbmd0aClcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB2aXNSb3dzW3Jvd0luZGV4XS52YWx1ZSA9IHJvd1ZhbHVlO1xuICAgICAgICB0aGlzLm9uUm93Q2hhbmdlZCh2aXNSb3dzW3Jvd0luZGV4XSwgXCJcIiwgcm93VmFsdWUsIGZhbHNlKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UucHJvdG90eXBlLmdlbmVyYXRlUm93cyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLnByb3RvdHlwZS5nZW5lcmF0ZVRvdGFsUm93ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gbmV3IE1hdHJpeERyb3Bkb3duVG90YWxSb3dNb2RlbCh0aGlzKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UucHJvdG90eXBlLmNyZWF0ZU5ld1ZhbHVlID0gZnVuY3Rpb24gKG51bGxPbkVtcHR5KSB7XG4gICAgICAgIGlmIChudWxsT25FbXB0eSA9PT0gdm9pZCAwKSB7IG51bGxPbkVtcHR5ID0gZmFsc2U7IH1cbiAgICAgICAgdmFyIHJlcyA9ICF0aGlzLnZhbHVlID8ge30gOiB0aGlzLmNyZWF0ZVZhbHVlQ29weSgpO1xuICAgICAgICBpZiAobnVsbE9uRW1wdHkgJiYgdGhpcy5pc01hdHJpeFZhbHVlRW1wdHkocmVzKSlcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZS5wcm90b3R5cGUuZ2V0Um93VmFsdWVDb3JlID0gZnVuY3Rpb24gKHJvdywgcXVlc3Rpb25WYWx1ZSwgY3JlYXRlKSB7XG4gICAgICAgIGlmIChjcmVhdGUgPT09IHZvaWQgMCkgeyBjcmVhdGUgPSBmYWxzZTsgfVxuICAgICAgICB2YXIgcmVzdWx0ID0gISFxdWVzdGlvblZhbHVlICYmICEhcXVlc3Rpb25WYWx1ZVtyb3cucm93TmFtZV1cbiAgICAgICAgICAgID8gcXVlc3Rpb25WYWx1ZVtyb3cucm93TmFtZV1cbiAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgaWYgKCFyZXN1bHQgJiYgY3JlYXRlKSB7XG4gICAgICAgICAgICByZXN1bHQgPSB7fTtcbiAgICAgICAgICAgIGlmICghIXF1ZXN0aW9uVmFsdWUpIHtcbiAgICAgICAgICAgICAgICBxdWVzdGlvblZhbHVlW3Jvdy5yb3dOYW1lXSA9IHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZS5wcm90b3R5cGUuZ2V0Um93T2JqID0gZnVuY3Rpb24gKHJvdykge1xuICAgICAgICB2YXIgb2JqID0gdGhpcy5nZXRSb3dWYWx1ZUNvcmUocm93LCB0aGlzLnZhbHVlKTtcbiAgICAgICAgcmV0dXJuICEhb2JqICYmICEhb2JqLmdldFR5cGUgPyBvYmogOiBudWxsO1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZS5wcm90b3R5cGUuZ2V0Um93RGlzcGxheVZhbHVlID0gZnVuY3Rpb24gKGtleXNBc1RleHQsIHJvdywgcm93VmFsdWUpIHtcbiAgICAgICAgaWYgKCFyb3dWYWx1ZSlcbiAgICAgICAgICAgIHJldHVybiByb3dWYWx1ZTtcbiAgICAgICAgaWYgKCEhcm93LmVkaXRpbmdPYmopXG4gICAgICAgICAgICByZXR1cm4gcm93VmFsdWU7XG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMocm93VmFsdWUpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgICAgICAgdmFyIHF1ZXN0aW9uID0gcm93LmdldFF1ZXN0aW9uQnlOYW1lKGtleSk7XG4gICAgICAgICAgICBpZiAoIXF1ZXN0aW9uKSB7XG4gICAgICAgICAgICAgICAgcXVlc3Rpb24gPSB0aGlzLmdldFNoYXJlZFF1ZXN0aW9uQnlOYW1lKGtleSwgcm93KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghIXF1ZXN0aW9uKSB7XG4gICAgICAgICAgICAgICAgdmFyIGRpc3BsYXl2YWx1ZSA9IHF1ZXN0aW9uLmdldERpc3BsYXlWYWx1ZShrZXlzQXNUZXh0LCByb3dWYWx1ZVtrZXldKTtcbiAgICAgICAgICAgICAgICBpZiAoa2V5c0FzVGV4dCAmJiAhIXF1ZXN0aW9uLnRpdGxlICYmIHF1ZXN0aW9uLnRpdGxlICE9PSBrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgcm93VmFsdWVbcXVlc3Rpb24udGl0bGVdID0gZGlzcGxheXZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcm93VmFsdWVba2V5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJvd1ZhbHVlW2tleV0gPSBkaXNwbGF5dmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByb3dWYWx1ZTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UucHJvdG90eXBlLmdldFBsYWluRGF0YSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHsgaW5jbHVkZUVtcHR5OiB0cnVlIH07IH1cbiAgICAgICAgdmFyIHF1ZXN0aW9uUGxhaW5EYXRhID0gX3N1cGVyLnByb3RvdHlwZS5nZXRQbGFpbkRhdGEuY2FsbCh0aGlzLCBvcHRpb25zKTtcbiAgICAgICAgaWYgKCEhcXVlc3Rpb25QbGFpbkRhdGEpIHtcbiAgICAgICAgICAgIHF1ZXN0aW9uUGxhaW5EYXRhLmlzTm9kZSA9IHRydWU7XG4gICAgICAgICAgICBxdWVzdGlvblBsYWluRGF0YS5kYXRhID0gdGhpcy52aXNpYmxlUm93cy5tYXAoZnVuY3Rpb24gKHJvdykge1xuICAgICAgICAgICAgICAgIHZhciByb3dEYXRhSXRlbSA9IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogcm93LnJvd05hbWUsXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiByb3cudGV4dCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHJvdy52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheVZhbHVlOiBfdGhpcy5nZXRSb3dEaXNwbGF5VmFsdWUoZmFsc2UsIHJvdywgcm93LnZhbHVlKSxcbiAgICAgICAgICAgICAgICAgICAgZ2V0U3RyaW5nOiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gXCJvYmplY3RcIiA/IEpTT04uc3RyaW5naWZ5KHZhbCkgOiB2YWw7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGlzTm9kZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogcm93LmNlbGxzXG4gICAgICAgICAgICAgICAgICAgICAgICAubWFwKGZ1bmN0aW9uIChjZWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2VsbC5xdWVzdGlvbi5nZXRQbGFpbkRhdGEob3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChkKSB7IHJldHVybiAhIWQ7IH0pLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgKG9wdGlvbnMuY2FsY3VsYXRpb25zIHx8IFtdKS5mb3JFYWNoKGZ1bmN0aW9uIChjYWxjdWxhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICByb3dEYXRhSXRlbVtjYWxjdWxhdGlvbi5wcm9wZXJ0eU5hbWVdID0gcm93W2NhbGN1bGF0aW9uLnByb3BlcnR5TmFtZV07XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJvd0RhdGFJdGVtO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHF1ZXN0aW9uUGxhaW5EYXRhO1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZS5wcm90b3R5cGUuYWRkQ29uZGl0aW9uT2JqZWN0c0J5Q29udGV4dCA9IGZ1bmN0aW9uIChvYmplY3RzLCBjb250ZXh0KSB7XG4gICAgICAgIHZhciBoYXNDb250ZXh0ID0gISFjb250ZXh0ID8gY29udGV4dCA9PT0gdHJ1ZSB8fCB0aGlzLmNvbHVtbnMuaW5kZXhPZihjb250ZXh0KSA+IC0xIDogZmFsc2U7XG4gICAgICAgIHZhciByb3dzSW5kZWNlcyA9IHRoaXMuZ2V0Q29uZGl0aW9uT2JqZWN0c1Jvd0luZGVjZXMoKTtcbiAgICAgICAgaWYgKGhhc0NvbnRleHQpIHtcbiAgICAgICAgICAgIHJvd3NJbmRlY2VzLnB1c2goLTEpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93c0luZGVjZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBpbmRleCA9IHJvd3NJbmRlY2VzW2ldO1xuICAgICAgICAgICAgdmFyIHJvd05hbWUgPSBpbmRleCA+IC0xID8gdGhpcy5nZXRDb25kaXRpb25PYmplY3RSb3dOYW1lKGluZGV4KSA6IFwicm93XCI7XG4gICAgICAgICAgICBpZiAoIXJvd05hbWUpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB2YXIgcm93VGV4dCA9IGluZGV4ID4gLTEgPyB0aGlzLmdldENvbmRpdGlvbk9iamVjdFJvd1RleHQoaW5kZXgpIDogXCJyb3dcIjtcbiAgICAgICAgICAgIHZhciBoYXNRdWVzdGlvblByZWZpeCA9IGluZGV4ID4gLTEgfHwgY29udGV4dCA9PT0gdHJ1ZTtcbiAgICAgICAgICAgIHZhciBkb3QgPSBoYXNRdWVzdGlvblByZWZpeCAmJiBpbmRleCA9PT0gLTEgPyBcIi5cIiA6IFwiXCI7XG4gICAgICAgICAgICB2YXIgcHJlZml4TmFtZSA9IChoYXNRdWVzdGlvblByZWZpeCA/IHRoaXMuZ2V0VmFsdWVOYW1lKCkgOiBcIlwiKSArIGRvdCArIHJvd05hbWUgKyBcIi5cIjtcbiAgICAgICAgICAgIHZhciBwcmVmaXhUaXRsZSA9IChoYXNRdWVzdGlvblByZWZpeCA/IHRoaXMucHJvY2Vzc2VkVGl0bGUgOiBcIlwiKSArIGRvdCArIHJvd1RleHQgKyBcIi5cIjtcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNvbHVtbiA9IHRoaXMuY29sdW1uc1tqXTtcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT09IC0xICYmIGNvbnRleHQgPT09IGNvbHVtbilcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgdmFyIG9iaiA9IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogcHJlZml4TmFtZSArIGNvbHVtbi5uYW1lLFxuICAgICAgICAgICAgICAgICAgICB0ZXh0OiBwcmVmaXhUaXRsZSArIGNvbHVtbi5mdWxsVGl0bGUsXG4gICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uOiB0aGlzXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT09IC0xICYmIGNvbnRleHQgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JqLmNvbnRleHQgPSB0aGlzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBvYmplY3RzLnB1c2gob2JqKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZS5wcm90b3R5cGUub25IaWRpbmdDb250ZW50ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBfc3VwZXIucHJvdG90eXBlLm9uSGlkaW5nQ29udGVudC5jYWxsKHRoaXMpO1xuICAgICAgICB2YXIgcXVlc3Rpb25zID0gW107XG4gICAgICAgIHRoaXMuY29sbGVjdE5lc3RlZFF1ZXN0aW9ucyhxdWVzdGlvbnMsIHRydWUpO1xuICAgICAgICBxdWVzdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAocSkgeyByZXR1cm4gcS5vbkhpZGluZ0NvbnRlbnQoKTsgfSk7XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLnByb3RvdHlwZS5nZXRJc1JlYWR5TmVzdGVkUXVlc3Rpb25zID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MpXG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIHZhciByZXMgPSBuZXcgQXJyYXkoKTtcbiAgICAgICAgdGhpcy5jb2xsZWN0TmVzdGVkUXVlc3RvbnNJblJvd3ModGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cywgcmVzLCBmYWxzZSk7XG4gICAgICAgIGlmICghIXRoaXMuZ2VuZXJhdGVkVG90YWxSb3cpIHtcbiAgICAgICAgICAgIHRoaXMuY29sbGVjdE5lc3RlZFF1ZXN0b25zSW5Sb3dzKFt0aGlzLmdlbmVyYXRlZFRvdGFsUm93XSwgcmVzLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UucHJvdG90eXBlLmNvbGxlY3ROZXN0ZWRRdWVzdGlvbnNDb3JlID0gZnVuY3Rpb24gKHF1ZXN0aW9ucywgdmlzaWJsZU9ubHkpIHtcbiAgICAgICAgdGhpcy5jb2xsZWN0TmVzdGVkUXVlc3RvbnNJblJvd3ModGhpcy52aXNpYmxlUm93cywgcXVlc3Rpb25zLCB2aXNpYmxlT25seSk7XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLnByb3RvdHlwZS5jb2xsZWN0TmVzdGVkUXVlc3RvbnNJblJvd3MgPSBmdW5jdGlvbiAocm93cywgcXVlc3Rpb25zLCB2aXNpYmxlT25seSkge1xuICAgICAgICByb3dzLmZvckVhY2goZnVuY3Rpb24gKHJvdykge1xuICAgICAgICAgICAgcm93LnF1ZXN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChxKSB7IHJldHVybiBxLmNvbGxlY3ROZXN0ZWRRdWVzdGlvbnMocXVlc3Rpb25zLCB2aXNpYmxlT25seSk7IH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UucHJvdG90eXBlLmdldENvbmRpdGlvbk9iamVjdFJvd05hbWUgPSBmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLnByb3RvdHlwZS5nZXRDb25kaXRpb25PYmplY3RSb3dUZXh0ID0gZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldENvbmRpdGlvbk9iamVjdFJvd05hbWUoaW5kZXgpO1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZS5wcm90b3R5cGUuZ2V0Q29uZGl0aW9uT2JqZWN0c1Jvd0luZGVjZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UucHJvdG90eXBlLmdldFByb2dyZXNzSW5mbyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCEhdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cylcbiAgICAgICAgICAgIHJldHVybiBfc3VydmV5X2VsZW1lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1tcIlN1cnZleUVsZW1lbnRcIl0uZ2V0UHJvZ3Jlc3NJbmZvQnlFbGVtZW50cyh0aGlzLmdldENlbGxRdWVzdGlvbnMoKSwgdGhpcy5pc1JlcXVpcmVkKTtcbiAgICAgICAgdmFyIHJlcyA9IF9iYXNlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJCYXNlXCJdLmNyZWF0ZVByb2dyZXNzSW5mbygpO1xuICAgICAgICB0aGlzLnVwZGF0ZVByb2dyZXNzSW5mb0J5VmFsdWVzKHJlcyk7XG4gICAgICAgIGlmIChyZXMucmVxdWlyZWRRdWVzdGlvbkNvdW50ID09PSAwICYmIHRoaXMuaXNSZXF1aXJlZCkge1xuICAgICAgICAgICAgcmVzLnJlcXVpcmVkUXVlc3Rpb25Db3VudCA9IDE7XG4gICAgICAgICAgICByZXMucmVxdWlyZWRBbnN3ZXJlZFF1ZXN0aW9uQ291bnQgPSAhdGhpcy5pc0VtcHR5KCkgPyAxIDogMDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZS5wcm90b3R5cGUudXBkYXRlUHJvZ3Jlc3NJbmZvQnlWYWx1ZXMgPSBmdW5jdGlvbiAocmVzKSB7IH07XG4gICAgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZS5wcm90b3R5cGUudXBkYXRlUHJvZ3Jlc3NJbmZvQnlSb3cgPSBmdW5jdGlvbiAocmVzLCByb3dWYWx1ZSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY29sdW1ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGNvbCA9IHRoaXMuY29sdW1uc1tpXTtcbiAgICAgICAgICAgIGlmICghY29sLnRlbXBsYXRlUXVlc3Rpb24uaGFzSW5wdXQpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICByZXMucXVlc3Rpb25Db3VudCArPSAxO1xuICAgICAgICAgICAgcmVzLnJlcXVpcmVkUXVlc3Rpb25Db3VudCArPSBjb2wuaXNSZXF1aXJlZDtcbiAgICAgICAgICAgIHZhciBoYXNWYWx1ZSA9ICFfaGVscGVyc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiSGVscGVyc1wiXS5pc1ZhbHVlRW1wdHkocm93VmFsdWVbY29sLm5hbWVdKTtcbiAgICAgICAgICAgIHJlcy5hbnN3ZXJlZFF1ZXN0aW9uQ291bnQgKz0gaGFzVmFsdWUgPyAxIDogMDtcbiAgICAgICAgICAgIHJlcy5yZXF1aXJlZEFuc3dlcmVkUXVlc3Rpb25Db3VudCArPSBoYXNWYWx1ZSAmJiBjb2wuaXNSZXF1aXJlZCA/IDEgOiAwO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLnByb3RvdHlwZS5nZXRDZWxsUXVlc3Rpb25zID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcmVzID0gW107XG4gICAgICAgIHRoaXMucnVuRnVuY0ZvckNlbGxRdWVzdGlvbnMoZnVuY3Rpb24gKHEpIHsgcmVzLnB1c2gocSk7IH0pO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZS5wcm90b3R5cGUub25CZWZvcmVWYWx1ZUNoYW5nZWQgPSBmdW5jdGlvbiAodmFsKSB7IH07XG4gICAgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZS5wcm90b3R5cGUub25TZXRRdWVzdGlvblZhbHVlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5pc1Jvd0NoYW5naW5nKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLm9uQmVmb3JlVmFsdWVDaGFuZ2VkKHRoaXMudmFsdWUpO1xuICAgICAgICBpZiAoIXRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MgfHwgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cy5sZW5ndGggPT0gMClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5pc1Jvd0NoYW5naW5nID0gdHJ1ZTtcbiAgICAgICAgdmFyIHZhbCA9IHRoaXMuY3JlYXRlTmV3VmFsdWUoKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgcm93ID0gdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93c1tpXTtcbiAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3NbaV0udmFsdWUgPSB0aGlzLmdldFJvd1ZhbHVlQ29yZShyb3csIHZhbCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc1Jvd0NoYW5naW5nID0gZmFsc2U7XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLnByb3RvdHlwZS5zZXRRdWVzdGlvblZhbHVlID0gZnVuY3Rpb24gKG5ld1ZhbHVlKSB7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUuc2V0UXVlc3Rpb25WYWx1ZS5jYWxsKHRoaXMsIG5ld1ZhbHVlLCBmYWxzZSk7XG4gICAgICAgIHRoaXMub25TZXRRdWVzdGlvblZhbHVlKCk7XG4gICAgICAgIHRoaXMudXBkYXRlSXNBbnN3ZXJlZCgpO1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZS5wcm90b3R5cGUuc3VwcG9ydEdvTmV4dFBhZ2VBdXRvbWF0aWMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciByb3dzID0gdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cztcbiAgICAgICAgaWYgKCFyb3dzKVxuICAgICAgICAgICAgcm93cyA9IHRoaXMudmlzaWJsZVJvd3M7XG4gICAgICAgIGlmICghcm93cylcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBjZWxscyA9IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3NbaV0uY2VsbHM7XG4gICAgICAgICAgICBpZiAoIWNlbGxzKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgZm9yICh2YXIgY29sSW5kZXggPSAwOyBjb2xJbmRleCA8IGNlbGxzLmxlbmd0aDsgY29sSW5kZXgrKykge1xuICAgICAgICAgICAgICAgIHZhciBxdWVzdGlvbiA9IGNlbGxzW2NvbEluZGV4XS5xdWVzdGlvbjtcbiAgICAgICAgICAgICAgICBpZiAocXVlc3Rpb24gJiZcbiAgICAgICAgICAgICAgICAgICAgKCFxdWVzdGlvbi5zdXBwb3J0R29OZXh0UGFnZUF1dG9tYXRpYygpIHx8ICFxdWVzdGlvbi52YWx1ZSkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UucHJvdG90eXBlLmdldENvbnRhaW5zRXJyb3JzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKF9zdXBlci5wcm90b3R5cGUuZ2V0Q29udGFpbnNFcnJvcnMuY2FsbCh0aGlzKSB8fFxuICAgICAgICAgICAgdGhpcy5jaGVja0ZvckFuc3dlcnNPckVycm9ycyhmdW5jdGlvbiAocXVlc3Rpb24pIHsgcmV0dXJuIHF1ZXN0aW9uLmNvbnRhaW5zRXJyb3JzOyB9LCBmYWxzZSkpO1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZS5wcm90b3R5cGUuZ2V0SXNBbnN3ZXJlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChfc3VwZXIucHJvdG90eXBlLmdldElzQW5zd2VyZWQuY2FsbCh0aGlzKSAmJlxuICAgICAgICAgICAgdGhpcy5jaGVja0ZvckFuc3dlcnNPckVycm9ycyhmdW5jdGlvbiAocXVlc3Rpb24pIHsgcmV0dXJuIHF1ZXN0aW9uLmlzQW5zd2VyZWQ7IH0sIHRydWUpKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UucHJvdG90eXBlLmNoZWNrRm9yQW5zd2Vyc09yRXJyb3JzID0gZnVuY3Rpb24gKHByZWRpY2F0ZSwgZXZlcnkpIHtcbiAgICAgICAgaWYgKGV2ZXJ5ID09PSB2b2lkIDApIHsgZXZlcnkgPSBmYWxzZTsgfVxuICAgICAgICB2YXIgcm93cyA9IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3M7XG4gICAgICAgIGlmICghcm93cylcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgY2VsbHMgPSByb3dzW2ldLmNlbGxzO1xuICAgICAgICAgICAgaWYgKCFjZWxscylcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIGZvciAodmFyIGNvbEluZGV4ID0gMDsgY29sSW5kZXggPCBjZWxscy5sZW5ndGg7IGNvbEluZGV4KyspIHtcbiAgICAgICAgICAgICAgICBpZiAoIWNlbGxzW2NvbEluZGV4XSlcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgdmFyIHF1ZXN0aW9uID0gY2VsbHNbY29sSW5kZXhdLnF1ZXN0aW9uO1xuICAgICAgICAgICAgICAgIGlmIChxdWVzdGlvbiAmJiBxdWVzdGlvbi5pc1Zpc2libGUpXG4gICAgICAgICAgICAgICAgICAgIGlmIChwcmVkaWNhdGUocXVlc3Rpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWV2ZXJ5KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZXJ5KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBldmVyeSA/IHRydWUgOiBmYWxzZTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UucHJvdG90eXBlLmhhc0Vycm9ycyA9IGZ1bmN0aW9uIChmaXJlQ2FsbGJhY2ssIHJlYykge1xuICAgICAgICBpZiAoZmlyZUNhbGxiYWNrID09PSB2b2lkIDApIHsgZmlyZUNhbGxiYWNrID0gdHJ1ZTsgfVxuICAgICAgICBpZiAocmVjID09PSB2b2lkIDApIHsgcmVjID0gbnVsbDsgfVxuICAgICAgICB2YXIgZXJyb3NJblJvd3MgPSB0aGlzLmhhc0Vycm9ySW5Sb3dzKGZpcmVDYWxsYmFjaywgcmVjKTtcbiAgICAgICAgdmFyIGlzRHVwbGljYXRlZCA9IHRoaXMuaXNWYWx1ZUR1cGxpY2F0ZWQoKTtcbiAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUuaGFzRXJyb3JzLmNhbGwodGhpcywgZmlyZUNhbGxiYWNrLCByZWMpIHx8IGVycm9zSW5Sb3dzIHx8IGlzRHVwbGljYXRlZDtcbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UucHJvdG90eXBlLmdldElzUnVubmluZ1ZhbGlkYXRvcnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChfc3VwZXIucHJvdG90eXBlLmdldElzUnVubmluZ1ZhbGlkYXRvcnMuY2FsbCh0aGlzKSlcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAoIXRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGNlbGxzID0gdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93c1tpXS5jZWxscztcbiAgICAgICAgICAgIGlmICghY2VsbHMpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBmb3IgKHZhciBjb2xJbmRleCA9IDA7IGNvbEluZGV4IDwgY2VsbHMubGVuZ3RoOyBjb2xJbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFjZWxsc1tjb2xJbmRleF0pXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIHZhciBxdWVzdGlvbiA9IGNlbGxzW2NvbEluZGV4XS5xdWVzdGlvbjtcbiAgICAgICAgICAgICAgICBpZiAoISFxdWVzdGlvbiAmJiBxdWVzdGlvbi5pc1J1bm5pbmdWYWxpZGF0b3JzKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLnByb3RvdHlwZS5nZXRBbGxFcnJvcnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBfc3VwZXIucHJvdG90eXBlLmdldEFsbEVycm9ycy5jYWxsKHRoaXMpO1xuICAgICAgICB2YXIgcm93cyA9IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3M7XG4gICAgICAgIGlmIChyb3dzID09PSBudWxsKVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgcm93ID0gcm93c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcm93LmNlbGxzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGVycm9ycyA9IHJvdy5jZWxsc1tqXS5xdWVzdGlvbi5nZXRBbGxFcnJvcnMoKTtcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3JzICYmIGVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoZXJyb3JzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UucHJvdG90eXBlLmhhc0Vycm9ySW5Sb3dzID0gZnVuY3Rpb24gKGZpcmVDYWxsYmFjaywgcmVjKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciByb3dzID0gdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cztcbiAgICAgICAgaWYgKCF0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzKSB7XG4gICAgICAgICAgICByb3dzID0gdGhpcy52aXNpYmxlUm93cztcbiAgICAgICAgfVxuICAgICAgICB2YXIgcmVzID0gZmFsc2U7XG4gICAgICAgIGlmICghcmVjKVxuICAgICAgICAgICAgcmVjID0ge307XG4gICAgICAgIGlmICghcm93cylcbiAgICAgICAgICAgIHJldHVybiByZWM7XG4gICAgICAgIHJlYy52YWxpZGF0aW9uVmFsdWVzID0gdGhpcy5nZXREYXRhRmlsdGVyZWRWYWx1ZXMoKTtcbiAgICAgICAgcmVjLmlzU2luZ2xlRGV0YWlsUGFuZWwgPSB0aGlzLmRldGFpbFBhbmVsTW9kZSA9PT0gXCJ1bmRlclJvd1NpbmdsZVwiO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHJlcyA9IHJvd3NbaV0uaGFzRXJyb3JzKGZpcmVDYWxsYmFjaywgcmVjLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMucmFpc2VPbkNvbXBsZXRlZEFzeW5jVmFsaWRhdG9ycygpO1xuICAgICAgICAgICAgfSkgfHwgcmVzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLnByb3RvdHlwZS5pc1ZhbHVlRHVwbGljYXRlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB2YXIgY29sdW1ucyA9IHRoaXMuZ2V0VW5pcXVlQ29sdW1ucygpO1xuICAgICAgICB2YXIgcmVzID0gZmFsc2U7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29sdW1ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgcmVzID0gdGhpcy5pc1ZhbHVlSW5Db2x1bW5EdXBsaWNhdGVkKGNvbHVtbnNbaV0pIHx8IHJlcztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZS5wcm90b3R5cGUuaXNWYWx1ZUluQ29sdW1uRHVwbGljYXRlZCA9IGZ1bmN0aW9uIChjb2x1bW4pIHtcbiAgICAgICAgdmFyIGtleVZhbHVlcyA9IFtdO1xuICAgICAgICB2YXIgcmVzID0gZmFsc2U7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgcmVzID1cbiAgICAgICAgICAgICAgICB0aGlzLmlzVmFsdWVEdXBsaWNhdGVkSW5Sb3codGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93c1tpXSwgY29sdW1uLCBrZXlWYWx1ZXMpIHx8IHJlcztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZS5wcm90b3R5cGUuZ2V0VW5pcXVlQ29sdW1ucyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHJlcyA9IG5ldyBBcnJheSgpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY29sdW1ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRoaXMuY29sdW1uc1tpXS5pc1VuaXF1ZSkge1xuICAgICAgICAgICAgICAgIHJlcy5wdXNoKHRoaXMuY29sdW1uc1tpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UucHJvdG90eXBlLmlzVmFsdWVEdXBsaWNhdGVkSW5Sb3cgPSBmdW5jdGlvbiAocm93LCBjb2x1bW4sIGtleVZhbHVlcykge1xuICAgICAgICB2YXIgcXVlc3Rpb24gPSByb3cuZ2V0UXVlc3Rpb25CeUNvbHVtbihjb2x1bW4pO1xuICAgICAgICBpZiAoIXF1ZXN0aW9uIHx8IHF1ZXN0aW9uLmlzRW1wdHkoKSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgdmFyIHZhbHVlID0gcXVlc3Rpb24udmFsdWU7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5VmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoX2hlbHBlcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIkhlbHBlcnNcIl0uaXNUd29WYWx1ZUVxdWFscyh2YWx1ZSwga2V5VmFsdWVzW2ldLCB0cnVlLCB0aGlzLmlzVW5pcXVlQ2FzZVNlbnNpdGl2ZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZER1cGxpY2F0aW9uRXJyb3IocXVlc3Rpb24pO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGtleVZhbHVlcy5wdXNoKHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZS5wcm90b3R5cGUuYWRkRHVwbGljYXRpb25FcnJvciA9IGZ1bmN0aW9uIChxdWVzdGlvbikge1xuICAgICAgICBxdWVzdGlvbi5hZGRFcnJvcihuZXcgX2Vycm9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fW1wiS2V5RHVwbGljYXRpb25FcnJvclwiXSh0aGlzLmtleUR1cGxpY2F0aW9uRXJyb3IsIHRoaXMpKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UucHJvdG90eXBlLmdldEZpcnN0UXVlc3Rpb25Ub0ZvY3VzID0gZnVuY3Rpb24gKHdpdGhFcnJvcikge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRGaXJzdENlbGxRdWVzdGlvbih3aXRoRXJyb3IpO1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZS5wcm90b3R5cGUuZ2V0Rmlyc3RJbnB1dEVsZW1lbnRJZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHF1ZXN0aW9uID0gdGhpcy5nZXRGaXJzdENlbGxRdWVzdGlvbihmYWxzZSk7XG4gICAgICAgIHJldHVybiBxdWVzdGlvbiA/IHF1ZXN0aW9uLmlucHV0SWQgOiBfc3VwZXIucHJvdG90eXBlLmdldEZpcnN0SW5wdXRFbGVtZW50SWQuY2FsbCh0aGlzKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UucHJvdG90eXBlLmdldEZpcnN0RXJyb3JJbnB1dEVsZW1lbnRJZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHF1ZXN0aW9uID0gdGhpcy5nZXRGaXJzdENlbGxRdWVzdGlvbih0cnVlKTtcbiAgICAgICAgcmV0dXJuIHF1ZXN0aW9uID8gcXVlc3Rpb24uaW5wdXRJZCA6IF9zdXBlci5wcm90b3R5cGUuZ2V0Rmlyc3RFcnJvcklucHV0RWxlbWVudElkLmNhbGwodGhpcyk7XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLnByb3RvdHlwZS5nZXRGaXJzdENlbGxRdWVzdGlvbiA9IGZ1bmN0aW9uIChvbkVycm9yKSB7XG4gICAgICAgIGlmICghdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cylcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBjZWxscyA9IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3NbaV0uY2VsbHM7XG4gICAgICAgICAgICBmb3IgKHZhciBjb2xJbmRleCA9IDA7IGNvbEluZGV4IDwgY2VsbHMubGVuZ3RoOyBjb2xJbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFvbkVycm9yKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2VsbHNbY29sSW5kZXhdLnF1ZXN0aW9uO1xuICAgICAgICAgICAgICAgIGlmIChjZWxsc1tjb2xJbmRleF0ucXVlc3Rpb24uY3VycmVudEVycm9yQ291bnQgPiAwKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2VsbHNbY29sSW5kZXhdLnF1ZXN0aW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZS5wcm90b3R5cGUub25SZWFkT25seUNoYW5nZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUub25SZWFkT25seUNoYW5nZWQuY2FsbCh0aGlzKTtcbiAgICAgICAgaWYgKCF0aGlzLmdlbmVyYXRlUm93cylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnZpc2libGVSb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLnZpc2libGVSb3dzW2ldLm9uUXVlc3Rpb25SZWFkT25seUNoYW5nZWQodGhpcy5pc1JlYWRPbmx5KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgLy9JTWF0cml4RHJvcGRvd25EYXRhXG4gICAgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZS5wcm90b3R5cGUuY3JlYXRlUXVlc3Rpb24gPSBmdW5jdGlvbiAocm93LCBjb2x1bW4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlUXVlc3Rpb25Db3JlKHJvdywgY29sdW1uKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UucHJvdG90eXBlLmNyZWF0ZVF1ZXN0aW9uQ29yZSA9IGZ1bmN0aW9uIChyb3csIGNvbHVtbikge1xuICAgICAgICB2YXIgcXVlc3Rpb24gPSBjb2x1bW4uY3JlYXRlQ2VsbFF1ZXN0aW9uKHJvdyk7XG4gICAgICAgIHF1ZXN0aW9uLnNldFN1cnZleUltcGwocm93KTtcbiAgICAgICAgcXVlc3Rpb24uc2V0UGFyZW50UXVlc3Rpb24odGhpcyk7XG4gICAgICAgIHF1ZXN0aW9uLmluTWF0cml4TW9kZSA9IHRydWU7XG4gICAgICAgIHJldHVybiBxdWVzdGlvbjtcbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UucHJvdG90eXBlLmRlbGV0ZVJvd1ZhbHVlID0gZnVuY3Rpb24gKG5ld1ZhbHVlLCByb3cpIHtcbiAgICAgICAgaWYgKCFuZXdWYWx1ZSlcbiAgICAgICAgICAgIHJldHVybiBuZXdWYWx1ZTtcbiAgICAgICAgZGVsZXRlIG5ld1ZhbHVlW3Jvdy5yb3dOYW1lXTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNPYmplY3QobmV3VmFsdWUpICYmIE9iamVjdC5rZXlzKG5ld1ZhbHVlKS5sZW5ndGggPT0gMFxuICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICA6IG5ld1ZhbHVlO1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZS5wcm90b3R5cGUub25BbnlWYWx1ZUNoYW5nZWQgPSBmdW5jdGlvbiAobmFtZSwgcXVlc3Rpb25OYW1lKSB7XG4gICAgICAgIGlmICh0aGlzLmlzVXBkYXRlTG9ja2VkIHx8XG4gICAgICAgICAgICB0aGlzLmlzRG9pbmdvbkFueVZhbHVlQ2hhbmdlZCB8fFxuICAgICAgICAgICAgIXRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMuaXNEb2luZ29uQW55VmFsdWVDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgdmFyIHJvd3MgPSB0aGlzLnZpc2libGVSb3dzO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHJvd3NbaV0ub25BbnlWYWx1ZUNoYW5nZWQobmFtZSwgcXVlc3Rpb25OYW1lKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdG90YWxSb3cgPSB0aGlzLnZpc2libGVUb3RhbFJvdztcbiAgICAgICAgaWYgKCEhdG90YWxSb3cpIHtcbiAgICAgICAgICAgIHRvdGFsUm93Lm9uQW55VmFsdWVDaGFuZ2VkKG5hbWUsIHF1ZXN0aW9uTmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc0RvaW5nb25BbnlWYWx1ZUNoYW5nZWQgPSBmYWxzZTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UucHJvdG90eXBlLmlzT2JqZWN0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCI7XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLnByb3RvdHlwZS5nZXRPbkNlbGxWYWx1ZUNoYW5nZWRPcHRpb25zID0gZnVuY3Rpb24gKHJvdywgY29sdW1uTmFtZSwgcm93VmFsdWUpIHtcbiAgICAgICAgdmFyIGdldFF1ZXN0aW9uID0gZnVuY3Rpb24gKGNvbE5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiByb3cuZ2V0UXVlc3Rpb25CeU5hbWUoY29sTmFtZSk7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICByb3c6IHJvdyxcbiAgICAgICAgICAgIGNvbHVtbk5hbWU6IGNvbHVtbk5hbWUsXG4gICAgICAgICAgICByb3dWYWx1ZTogcm93VmFsdWUsXG4gICAgICAgICAgICB2YWx1ZTogISFyb3dWYWx1ZSA/IHJvd1ZhbHVlW2NvbHVtbk5hbWVdIDogbnVsbCxcbiAgICAgICAgICAgIGdldENlbGxRdWVzdGlvbjogZ2V0UXVlc3Rpb24sXG4gICAgICAgICAgICBjZWxsUXVlc3Rpb246IHJvdy5nZXRRdWVzdGlvbkJ5TmFtZShjb2x1bW5OYW1lKSxcbiAgICAgICAgICAgIGNvbHVtbjogdGhpcy5nZXRDb2x1bW5CeU5hbWUoY29sdW1uTmFtZSlcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UucHJvdG90eXBlLm9uQ2VsbFZhbHVlQ2hhbmdlZCA9IGZ1bmN0aW9uIChyb3csIGNvbHVtbk5hbWUsIHJvd1ZhbHVlKSB7XG4gICAgICAgIGlmICghdGhpcy5zdXJ2ZXkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciBvcHRpb25zID0gdGhpcy5nZXRPbkNlbGxWYWx1ZUNoYW5nZWRPcHRpb25zKHJvdywgY29sdW1uTmFtZSwgcm93VmFsdWUpO1xuICAgICAgICBpZiAoISF0aGlzLm9uQ2VsbFZhbHVlQ2hhbmdlZENhbGxiYWNrKSB7XG4gICAgICAgICAgICB0aGlzLm9uQ2VsbFZhbHVlQ2hhbmdlZENhbGxiYWNrKG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3VydmV5Lm1hdHJpeENlbGxWYWx1ZUNoYW5nZWQodGhpcywgb3B0aW9ucyk7XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLnByb3RvdHlwZS52YWxpZGF0ZUNlbGwgPSBmdW5jdGlvbiAocm93LCBjb2x1bW5OYW1lLCByb3dWYWx1ZSkge1xuICAgICAgICBpZiAoIXRoaXMuc3VydmV5KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIgb3B0aW9ucyA9IHRoaXMuZ2V0T25DZWxsVmFsdWVDaGFuZ2VkT3B0aW9ucyhyb3csIGNvbHVtbk5hbWUsIHJvd1ZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3VydmV5Lm1hdHJpeENlbGxWYWxpZGF0ZSh0aGlzLCBvcHRpb25zKTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLnByb3RvdHlwZSwgXCJpc1ZhbGlkYXRlT25WYWx1ZUNoYW5naW5nXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gISF0aGlzLnN1cnZleSA/IHRoaXMuc3VydmV5LmlzVmFsaWRhdGVPblZhbHVlQ2hhbmdpbmcgOiBmYWxzZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UucHJvdG90eXBlLm9uUm93Q2hhbmdpbmcgPSBmdW5jdGlvbiAocm93LCBjb2x1bW5OYW1lLCByb3dWYWx1ZSkge1xuICAgICAgICBpZiAoIXRoaXMuc3VydmV5ICYmICF0aGlzLmNlbGxWYWx1ZUNoYW5naW5nQ2FsbGJhY2spXG4gICAgICAgICAgICByZXR1cm4gISFyb3dWYWx1ZSA/IHJvd1ZhbHVlW2NvbHVtbk5hbWVdIDogbnVsbDtcbiAgICAgICAgdmFyIG9wdGlvbnMgPSB0aGlzLmdldE9uQ2VsbFZhbHVlQ2hhbmdlZE9wdGlvbnMocm93LCBjb2x1bW5OYW1lLCByb3dWYWx1ZSk7XG4gICAgICAgIHZhciBvbGRSb3dWYWx1ZSA9IHRoaXMuZ2V0Um93VmFsdWVDb3JlKHJvdywgdGhpcy5jcmVhdGVOZXdWYWx1ZSgpLCB0cnVlKTtcbiAgICAgICAgb3B0aW9ucy5vbGRWYWx1ZSA9ICEhb2xkUm93VmFsdWUgPyBvbGRSb3dWYWx1ZVtjb2x1bW5OYW1lXSA6IG51bGw7XG4gICAgICAgIGlmICghIXRoaXMuY2VsbFZhbHVlQ2hhbmdpbmdDYWxsYmFjaykge1xuICAgICAgICAgICAgb3B0aW9ucy52YWx1ZSA9IHRoaXMuY2VsbFZhbHVlQ2hhbmdpbmdDYWxsYmFjayhyb3csIGNvbHVtbk5hbWUsIG9wdGlvbnMudmFsdWUsIG9wdGlvbnMub2xkVmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghIXRoaXMuc3VydmV5KSB7XG4gICAgICAgICAgICB0aGlzLnN1cnZleS5tYXRyaXhDZWxsVmFsdWVDaGFuZ2luZyh0aGlzLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3B0aW9ucy52YWx1ZTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UucHJvdG90eXBlLm9uUm93Q2hhbmdlZCA9IGZ1bmN0aW9uIChyb3csIGNvbHVtbk5hbWUsIG5ld1Jvd1ZhbHVlLCBpc0RlbGV0aW5nVmFsdWUpIHtcbiAgICAgICAgdmFyIHJvd09iaiA9ICEhY29sdW1uTmFtZSA/IHRoaXMuZ2V0Um93T2JqKHJvdykgOiBudWxsO1xuICAgICAgICBpZiAoISFyb3dPYmopIHtcbiAgICAgICAgICAgIHZhciBjb2x1bW5WYWx1ZSA9IG51bGw7XG4gICAgICAgICAgICBpZiAoISFuZXdSb3dWYWx1ZSAmJiAhaXNEZWxldGluZ1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgY29sdW1uVmFsdWUgPSBuZXdSb3dWYWx1ZVtjb2x1bW5OYW1lXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaXNSb3dDaGFuZ2luZyA9IHRydWU7XG4gICAgICAgICAgICByb3dPYmpbY29sdW1uTmFtZV0gPSBjb2x1bW5WYWx1ZTtcbiAgICAgICAgICAgIHRoaXMuaXNSb3dDaGFuZ2luZyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5vbkNlbGxWYWx1ZUNoYW5nZWQocm93LCBjb2x1bW5OYW1lLCByb3dPYmopO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIG9sZFZhbHVlID0gdGhpcy5jcmVhdGVOZXdWYWx1ZSh0cnVlKTtcbiAgICAgICAgICAgIHZhciBjb21iaW5lID0gdGhpcy5nZXROZXdWYWx1ZU9uUm93Q2hhbmdlZChyb3csIGNvbHVtbk5hbWUsIG5ld1Jvd1ZhbHVlLCBpc0RlbGV0aW5nVmFsdWUsIHRoaXMuY3JlYXRlTmV3VmFsdWUoKSk7XG4gICAgICAgICAgICBpZiAodGhpcy5pc1R3b1ZhbHVlRXF1YWxzKG9sZFZhbHVlLCBjb21iaW5lLnZhbHVlKSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB0aGlzLmlzUm93Q2hhbmdpbmcgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5zZXROZXdWYWx1ZShjb21iaW5lLnZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuaXNSb3dDaGFuZ2luZyA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKGNvbHVtbk5hbWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2VsbFZhbHVlQ2hhbmdlZChyb3csIGNvbHVtbk5hbWUsIGNvbWJpbmUucm93VmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLnByb3RvdHlwZS5nZXROZXdWYWx1ZU9uUm93Q2hhbmdlZCA9IGZ1bmN0aW9uIChyb3csIGNvbHVtbk5hbWUsIG5ld1Jvd1ZhbHVlLCBpc0RlbGV0aW5nVmFsdWUsIG5ld1ZhbHVlKSB7XG4gICAgICAgIHZhciByb3dWYWx1ZSA9IHRoaXMuZ2V0Um93VmFsdWVDb3JlKHJvdywgbmV3VmFsdWUsIHRydWUpO1xuICAgICAgICBpZiAoaXNEZWxldGluZ1ZhbHVlKSB7XG4gICAgICAgICAgICBkZWxldGUgcm93VmFsdWVbY29sdW1uTmFtZV07XG4gICAgICAgIH1cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3cuY2VsbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBrZXkgPSByb3cuY2VsbHNbaV0ucXVlc3Rpb24uZ2V0VmFsdWVOYW1lKCk7XG4gICAgICAgICAgICBkZWxldGUgcm93VmFsdWVba2V5XTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobmV3Um93VmFsdWUpIHtcbiAgICAgICAgICAgIG5ld1Jvd1ZhbHVlID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShuZXdSb3dWYWx1ZSkpO1xuICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIG5ld1Jvd1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzVmFsdWVFbXB0eShuZXdSb3dWYWx1ZVtrZXldKSkge1xuICAgICAgICAgICAgICAgICAgICByb3dWYWx1ZVtrZXldID0gbmV3Um93VmFsdWVba2V5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXNPYmplY3Qocm93VmFsdWUpICYmIE9iamVjdC5rZXlzKHJvd1ZhbHVlKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gdGhpcy5kZWxldGVSb3dWYWx1ZShuZXdWYWx1ZSwgcm93KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyB2YWx1ZTogbmV3VmFsdWUsIHJvd1ZhbHVlOiByb3dWYWx1ZSB9O1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZS5wcm90b3R5cGUuZ2V0Um93SW5kZXggPSBmdW5jdGlvbiAocm93KSB7XG4gICAgICAgIGlmICghdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cylcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlzaWJsZVJvd3MuaW5kZXhPZihyb3cpO1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZS5wcm90b3R5cGUuZ2V0RWxlbWVudHNJbkRlc2lnbiA9IGZ1bmN0aW9uIChpbmNsdWRlSGlkZGVuKSB7XG4gICAgICAgIGlmIChpbmNsdWRlSGlkZGVuID09PSB2b2lkIDApIHsgaW5jbHVkZUhpZGRlbiA9IGZhbHNlOyB9XG4gICAgICAgIHZhciBlbGVtZW50cztcbiAgICAgICAgaWYgKHRoaXMuZGV0YWlsUGFuZWxNb2RlID09IFwibm9uZVwiKSB7XG4gICAgICAgICAgICBlbGVtZW50cyA9IF9zdXBlci5wcm90b3R5cGUuZ2V0RWxlbWVudHNJbkRlc2lnbi5jYWxsKHRoaXMsIGluY2x1ZGVIaWRkZW4pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZWxlbWVudHMgPSBpbmNsdWRlSGlkZGVuID8gW3RoaXMuZGV0YWlsUGFuZWxdIDogdGhpcy5kZXRhaWxFbGVtZW50cztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW5zLmNvbmNhdChlbGVtZW50cyk7XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLnByb3RvdHlwZS5oYXNEZXRhaWxQYW5lbCA9IGZ1bmN0aW9uIChyb3cpIHtcbiAgICAgICAgaWYgKHRoaXMuZGV0YWlsUGFuZWxNb2RlID09IFwibm9uZVwiKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5pc0Rlc2lnbk1vZGUpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKCEhdGhpcy5vbkhhc0RldGFpbFBhbmVsQ2FsbGJhY2spXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5vbkhhc0RldGFpbFBhbmVsQ2FsbGJhY2socm93KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGV0YWlsRWxlbWVudHMubGVuZ3RoID4gMDtcbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UucHJvdG90eXBlLmdldElzRGV0YWlsUGFuZWxTaG93aW5nID0gZnVuY3Rpb24gKHJvdykge1xuICAgICAgICBpZiAodGhpcy5kZXRhaWxQYW5lbE1vZGUgPT0gXCJub25lXCIpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLmlzRGVzaWduTW9kZSkge1xuICAgICAgICAgICAgdmFyIHJlcyA9IHRoaXMudmlzaWJsZVJvd3MuaW5kZXhPZihyb3cpID09IDA7XG4gICAgICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFyb3cuZGV0YWlsUGFuZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgcm93LnNob3dEZXRhaWxQYW5lbCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImlzUm93U2hvd2luZ1wiICsgcm93LmlkLCBmYWxzZSk7XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLnByb3RvdHlwZS5zZXRJc0RldGFpbFBhbmVsU2hvd2luZyA9IGZ1bmN0aW9uIChyb3csIHZhbCkge1xuICAgICAgICBpZiAodmFsID09IHRoaXMuZ2V0SXNEZXRhaWxQYW5lbFNob3dpbmcocm93KSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaXNSb3dTaG93aW5nXCIgKyByb3cuaWQsIHZhbCk7XG4gICAgICAgIHRoaXMudXBkYXRlRGV0YWlsUGFuZWxCdXR0b25Dc3Mocm93KTtcbiAgICAgICAgaWYgKCEhdGhpcy5yZW5kZXJlZFRhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVkVGFibGUub25EZXRhaWxQYW5lbENoYW5nZVZpc2liaWxpdHkocm93LCB2YWwpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWwgJiYgdGhpcy5kZXRhaWxQYW5lbE1vZGUgPT09IFwidW5kZXJSb3dTaW5nbGVcIikge1xuICAgICAgICAgICAgdmFyIHJvd3MgPSB0aGlzLnZpc2libGVSb3dzO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJvd3NbaV0uaWQgIT09IHJvdy5pZCAmJiByb3dzW2ldLmlzRGV0YWlsUGFuZWxTaG93aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHJvd3NbaV0uaGlkZURldGFpbFBhbmVsKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLnByb3RvdHlwZS5nZXREZXRhaWxQYW5lbEJ1dHRvbkNzcyA9IGZ1bmN0aW9uIChyb3cpIHtcbiAgICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgX3V0aWxzX2Nzc0NsYXNzQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX1tcIkNzc0NsYXNzQnVpbGRlclwiXSgpLmFwcGVuZCh0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJkZXRhaWxCdXR0b25Dc3NcIiArIHJvdy5pZCkpO1xuICAgICAgICByZXR1cm4gYnVpbGRlci5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLmRldGFpbEJ1dHRvbiwgYnVpbGRlci50b1N0cmluZygpID09PSBcIlwiKS50b1N0cmluZygpO1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZS5wcm90b3R5cGUuZ2V0RGV0YWlsUGFuZWxJY29uQ3NzID0gZnVuY3Rpb24gKHJvdykge1xuICAgICAgICB2YXIgYnVpbGRlciA9IG5ldyBfdXRpbHNfY3NzQ2xhc3NCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fW1wiQ3NzQ2xhc3NCdWlsZGVyXCJdKCkuYXBwZW5kKHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImRldGFpbEljb25Dc3NcIiArIHJvdy5pZCkpO1xuICAgICAgICByZXR1cm4gYnVpbGRlci5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLmRldGFpbEljb24sIGJ1aWxkZXIudG9TdHJpbmcoKSA9PT0gXCJcIikudG9TdHJpbmcoKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UucHJvdG90eXBlLmdldERldGFpbFBhbmVsSWNvbklkID0gZnVuY3Rpb24gKHJvdykge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRJc0RldGFpbFBhbmVsU2hvd2luZyhyb3cpID8gdGhpcy5jc3NDbGFzc2VzLmRldGFpbEljb25FeHBhbmRlZElkIDogdGhpcy5jc3NDbGFzc2VzLmRldGFpbEljb25JZDtcbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UucHJvdG90eXBlLnVwZGF0ZURldGFpbFBhbmVsQnV0dG9uQ3NzID0gZnVuY3Rpb24gKHJvdykge1xuICAgICAgICB2YXIgY2xhc3NlcyA9IHRoaXMuY3NzQ2xhc3NlcztcbiAgICAgICAgdmFyIGlzUGFuZWxTaG93aW5nID0gdGhpcy5nZXRJc0RldGFpbFBhbmVsU2hvd2luZyhyb3cpO1xuICAgICAgICB2YXIgaWNvbkJ1aWxkZXIgPSBuZXcgX3V0aWxzX2Nzc0NsYXNzQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX1tcIkNzc0NsYXNzQnVpbGRlclwiXSgpLmFwcGVuZChjbGFzc2VzLmRldGFpbEljb24pXG4gICAgICAgICAgICAuYXBwZW5kKGNsYXNzZXMuZGV0YWlsSWNvbkV4cGFuZGVkLCBpc1BhbmVsU2hvd2luZyk7XG4gICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImRldGFpbEljb25Dc3NcIiArIHJvdy5pZCwgaWNvbkJ1aWxkZXIudG9TdHJpbmcoKSk7XG4gICAgICAgIHZhciBidXR0b25CdWlsZGVyID0gbmV3IF91dGlsc19jc3NDbGFzc0J1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19bXCJDc3NDbGFzc0J1aWxkZXJcIl0oKS5hcHBlbmQoY2xhc3Nlcy5kZXRhaWxCdXR0b24pXG4gICAgICAgICAgICAuYXBwZW5kKGNsYXNzZXMuZGV0YWlsQnV0dG9uRXhwYW5kZWQsIGlzUGFuZWxTaG93aW5nKTtcbiAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiZGV0YWlsQnV0dG9uQ3NzXCIgKyByb3cuaWQsIGJ1dHRvbkJ1aWxkZXIudG9TdHJpbmcoKSk7XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLnByb3RvdHlwZS5jcmVhdGVSb3dEZXRhaWxQYW5lbCA9IGZ1bmN0aW9uIChyb3cpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgaWYgKHRoaXMuaXNEZXNpZ25Nb2RlKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGV0YWlsUGFuZWw7XG4gICAgICAgIHZhciBwYW5lbCA9IHRoaXMuY3JlYXRlTmV3RGV0YWlsUGFuZWwoKTtcbiAgICAgICAgcGFuZWwucmVhZE9ubHkgPSB0aGlzLmlzUmVhZE9ubHk7XG4gICAgICAgIHBhbmVsLnNldFN1cnZleUltcGwocm93KTtcbiAgICAgICAgdmFyIGpzb24gPSB0aGlzLmRldGFpbFBhbmVsLnRvSlNPTigpO1xuICAgICAgICBuZXcgX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkpzb25PYmplY3RcIl0oKS50b09iamVjdChqc29uLCBwYW5lbCk7XG4gICAgICAgIHBhbmVsLnJlbmRlcldpZHRoID0gXCIxMDAlXCI7XG4gICAgICAgIHBhbmVsLnVwZGF0ZUN1c3RvbVdpZGdldHMoKTtcbiAgICAgICAgaWYgKCEhdGhpcy5vbkNyZWF0ZURldGFpbFBhbmVsQ2FsbGJhY2spIHtcbiAgICAgICAgICAgIHRoaXMub25DcmVhdGVEZXRhaWxQYW5lbENhbGxiYWNrKHJvdywgcGFuZWwpO1xuICAgICAgICB9XG4gICAgICAgIHBhbmVsLnF1ZXN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChxKSB7IHJldHVybiBxLnNldFBhcmVudFF1ZXN0aW9uKF90aGlzKTsgfSk7XG4gICAgICAgIHJldHVybiBwYW5lbDtcbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UucHJvdG90eXBlLmdldFNoYXJlZFF1ZXN0aW9uQnlOYW1lID0gZnVuY3Rpb24gKGNvbHVtbk5hbWUsIHJvdykge1xuICAgICAgICBpZiAoIXRoaXMuc3VydmV5IHx8ICF0aGlzLnZhbHVlTmFtZSlcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmdldFJvd0luZGV4KHJvdyk7XG4gICAgICAgIGlmIChpbmRleCA8IDApXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgcmV0dXJuICh0aGlzLnN1cnZleS5nZXRRdWVzdGlvbkJ5VmFsdWVOYW1lRnJvbUFycmF5KHRoaXMudmFsdWVOYW1lLCBjb2x1bW5OYW1lLCBpbmRleCkpO1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZS5wcm90b3R5cGUub25Ub3RhbFZhbHVlQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCEhdGhpcy5kYXRhICYmXG4gICAgICAgICAgICAhIXRoaXMudmlzaWJsZVRvdGFsUm93ICYmXG4gICAgICAgICAgICAhdGhpcy5pc1VwZGF0ZUxvY2tlZCAmJlxuICAgICAgICAgICAgIXRoaXMuaXNTZXR0KSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEuc2V0VmFsdWUodGhpcy5nZXRWYWx1ZU5hbWUoKSArIF9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fW1wic2V0dGluZ3NcIl0ubWF0cml4LnRvdGFsc1N1ZmZpeCwgdGhpcy50b3RhbFZhbHVlLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UucHJvdG90eXBlLmdldERhdGFGaWx0ZXJlZFZhbHVlcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YSA/IHRoaXMuZGF0YS5nZXRGaWx0ZXJlZFZhbHVlcygpIDoge307XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLnByb3RvdHlwZS5nZXRQYXJlbnRUZXh0UHJvY2Vzc29yID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMucGFyZW50UXVlc3Rpb24gfHwgIXRoaXMucGFyZW50KVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIHZhciBkYXRhID0gdGhpcy5wYXJlbnQuZGF0YTtcbiAgICAgICAgaWYgKCEhZGF0YSAmJiAhIWRhdGEuZ2V0VGV4dFByb2Nlc3NvcilcbiAgICAgICAgICAgIHJldHVybiBkYXRhLmdldFRleHRQcm9jZXNzb3IoKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLnByb3RvdHlwZS5nZXRRdWVzdGlvbkZyb21BcnJheSA9IGZ1bmN0aW9uIChuYW1lLCBpbmRleCkge1xuICAgICAgICBpZiAoaW5kZXggPj0gdGhpcy52aXNpYmxlUm93cy5sZW5ndGgpXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlzaWJsZVJvd3NbaW5kZXhdLmdldFF1ZXN0aW9uQnlOYW1lKG5hbWUpO1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZS5wcm90b3R5cGUuaXNNYXRyaXhWYWx1ZUVtcHR5ID0gZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICBpZiAoIXZhbClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWwubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc09iamVjdCh2YWxbaV0pICYmIE9iamVjdC5rZXlzKHZhbFtpXSkubGVuZ3RoID4gMClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHZhbCkubGVuZ3RoID09IDA7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZS5wcm90b3R5cGUsIFwiU3VydmV5TW9kZWxcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN1cnZleTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UucHJvdG90eXBlLmdldENlbGxUZW1wbGF0ZURhdGEgPSBmdW5jdGlvbiAoY2VsbCkge1xuICAgICAgICAvLyByZXR1cm4gY2VsbC5jZWxsLmNvbHVtbi50ZW1wbGF0ZVF1ZXN0aW9uO1xuICAgICAgICByZXR1cm4gdGhpcy5TdXJ2ZXlNb2RlbC5nZXRNYXRyaXhDZWxsVGVtcGxhdGVEYXRhKGNlbGwpO1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZS5wcm90b3R5cGUuZ2V0Q2VsbFdyYXBwZXJDb21wb25lbnROYW1lID0gZnVuY3Rpb24gKGNlbGwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuU3VydmV5TW9kZWwuZ2V0RWxlbWVudFdyYXBwZXJDb21wb25lbnROYW1lKGNlbGwsIGNlbGwucm93IGluc3RhbmNlb2YgTWF0cml4RHJvcGRvd25Ub3RhbFJvd01vZGVsID8gXCJyb3ctZm9vdGVyXCIgOiBcImNlbGxcIik7XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLnByb3RvdHlwZS5nZXRDZWxsV3JhcHBlckNvbXBvbmVudERhdGEgPSBmdW5jdGlvbiAoY2VsbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5TdXJ2ZXlNb2RlbC5nZXRFbGVtZW50V3JhcHBlckNvbXBvbmVudERhdGEoY2VsbCwgY2VsbC5yb3cgaW5zdGFuY2VvZiBNYXRyaXhEcm9wZG93blRvdGFsUm93TW9kZWwgPyBcInJvdy1mb290ZXJcIiA6IFwiY2VsbFwiKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UucHJvdG90eXBlLmdldENvbHVtbkhlYWRlcldyYXBwZXJDb21wb25lbnROYW1lID0gZnVuY3Rpb24gKGNlbGwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuU3VydmV5TW9kZWwuZ2V0RWxlbWVudFdyYXBwZXJDb21wb25lbnROYW1lKGNlbGwsIFwiY29sdW1uLWhlYWRlclwiKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UucHJvdG90eXBlLmdldENvbHVtbkhlYWRlcldyYXBwZXJDb21wb25lbnREYXRhID0gZnVuY3Rpb24gKGNlbGwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuU3VydmV5TW9kZWwuZ2V0RWxlbWVudFdyYXBwZXJDb21wb25lbnREYXRhKGNlbGwsIFwiY29sdW1uLWhlYWRlclwiKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UucHJvdG90eXBlLmdldFJvd0hlYWRlcldyYXBwZXJDb21wb25lbnROYW1lID0gZnVuY3Rpb24gKGNlbGwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuU3VydmV5TW9kZWwuZ2V0RWxlbWVudFdyYXBwZXJDb21wb25lbnROYW1lKGNlbGwsIFwicm93LWhlYWRlclwiKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UucHJvdG90eXBlLmdldFJvd0hlYWRlcldyYXBwZXJDb21wb25lbnREYXRhID0gZnVuY3Rpb24gKGNlbGwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuU3VydmV5TW9kZWwuZ2V0RWxlbWVudFdyYXBwZXJDb21wb25lbnREYXRhKGNlbGwsIFwicm93LWhlYWRlclwiKTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLnByb3RvdHlwZSwgXCJzaG93SG9yaXpvbnRhbFNjcm9sbFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuICF0aGlzLmlzRGVmYXVsdFYyVGhlbWUgJiYgdGhpcy5ob3Jpem9udGFsU2Nyb2xsO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZS5wcm90b3R5cGUuZ2V0Um9vdENzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBfdXRpbHNfY3NzQ2xhc3NCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fW1wiQ3NzQ2xhc3NCdWlsZGVyXCJdKCkuYXBwZW5kKF9zdXBlci5wcm90b3R5cGUuZ2V0Um9vdENzcy5jYWxsKHRoaXMpKS5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLnJvb3RTY3JvbGwsIHRoaXMuaG9yaXpvbnRhbFNjcm9sbCkudG9TdHJpbmcoKTtcbiAgICB9O1xuICAgIHJldHVybiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlO1xufShfbWFydGl4QmFzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiUXVlc3Rpb25NYXRyaXhCYXNlTW9kZWxcIl0pKTtcblxuX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlNlcmlhbGl6ZXJcIl0uYWRkQ2xhc3MoXCJtYXRyaXhkcm9wZG93bmJhc2VcIiwgW1xuICAgIHtcbiAgICAgICAgbmFtZTogXCJjb2x1bW5zOm1hdHJpeGRyb3Bkb3duY29sdW1uc1wiLFxuICAgICAgICBjbGFzc05hbWU6IFwibWF0cml4ZHJvcGRvd25jb2x1bW5cIixcbiAgICB9LFxuICAgIHtcbiAgICAgICAgbmFtZTogXCJjb2x1bW5MYXlvdXRcIixcbiAgICAgICAgYWx0ZXJuYXRpdmVOYW1lOiBcImNvbHVtbnNMb2NhdGlvblwiLFxuICAgICAgICBkZWZhdWx0OiBcImhvcml6b250YWxcIixcbiAgICAgICAgY2hvaWNlczogW1wiaG9yaXpvbnRhbFwiLCBcInZlcnRpY2FsXCJdLFxuICAgIH0sXG4gICAge1xuICAgICAgICBuYW1lOiBcImRldGFpbEVsZW1lbnRzXCIsXG4gICAgICAgIHZpc2libGU6IGZhbHNlLFxuICAgICAgICBpc0xpZ2h0U2VyaWFsaXphYmxlOiBmYWxzZSxcbiAgICB9LFxuICAgIHtcbiAgICAgICAgbmFtZTogXCJkZXRhaWxQYW5lbE1vZGVcIixcbiAgICAgICAgY2hvaWNlczogW1wibm9uZVwiLCBcInVuZGVyUm93XCIsIFwidW5kZXJSb3dTaW5nbGVcIl0sXG4gICAgICAgIGRlZmF1bHQ6IFwibm9uZVwiLFxuICAgIH0sXG4gICAgeyBuYW1lOiBcImNlbGxFcnJvckxvY2F0aW9uXCIsIGRlZmF1bHQ6IFwiZGVmYXVsdFwiLCBjaG9pY2VzOiBbXCJkZWZhdWx0XCIsIFwidG9wXCIsIFwiYm90dG9tXCJdIH0sXG4gICAgeyBuYW1lOiBcImRldGFpbEVycm9yTG9jYXRpb25cIiwgZGVmYXVsdDogXCJkZWZhdWx0XCIsIGNob2ljZXM6IFtcImRlZmF1bHRcIiwgXCJ0b3BcIiwgXCJib3R0b21cIl0sIHZpc2libGVJZjogZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gISFvYmogJiYgb2JqLmRldGFpbFBhbmVsTW9kZSAhPSBcIm5vbmVcIjsgfVxuICAgIH0sXG4gICAgXCJob3Jpem9udGFsU2Nyb2xsOmJvb2xlYW5cIixcbiAgICB7XG4gICAgICAgIG5hbWU6IFwiY2hvaWNlczppdGVtdmFsdWVbXVwiLCB1bmlxdWVQcm9wZXJ0eTogXCJ2YWx1ZVwiLFxuICAgIH0sXG4gICAgeyBuYW1lOiBcInBsYWNlaG9sZGVyXCIsIGFsdGVybmF0aXZlTmFtZTogXCJvcHRpb25zQ2FwdGlvblwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jUGxhY2Vob2xkZXJcIiB9LFxuICAgIHtcbiAgICAgICAgbmFtZTogXCJrZXlEdXBsaWNhdGlvbkVycm9yXCIsXG4gICAgICAgIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NLZXlEdXBsaWNhdGlvbkVycm9yXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICAgIG5hbWU6IFwiY2VsbFR5cGVcIixcbiAgICAgICAgZGVmYXVsdDogXCJkcm9wZG93blwiLFxuICAgICAgICBjaG9pY2VzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gX3F1ZXN0aW9uX21hdHJpeGRyb3Bkb3duY29sdW1uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fW1wiTWF0cml4RHJvcGRvd25Db2x1bW5cIl0uZ2V0Q29sdW1uVHlwZXMoKTtcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHsgbmFtZTogXCJjb2x1bW5Db2xDb3VudFwiLCBkZWZhdWx0OiAwLCBjaG9pY2VzOiBbMCwgMSwgMiwgMywgNF0gfSxcbiAgICBcImNvbHVtbk1pbldpZHRoXCIsXG4gICAgeyBuYW1lOiBcImFsbG93QWRhcHRpdmVBY3Rpb25zOmJvb2xlYW5cIiwgZGVmYXVsdDogZmFsc2UsIHZpc2libGU6IGZhbHNlIH0sXG5dLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlKFwiXCIpO1xufSwgXCJtYXRyaXhiYXNlXCIpO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3F1ZXN0aW9uX21hdHJpeGRyb3Bkb3duY29sdW1uLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3F1ZXN0aW9uX21hdHJpeGRyb3Bkb3duY29sdW1uLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IG1hdHJpeERyb3Bkb3duQ29sdW1uVHlwZXMsIE1hdHJpeERyb3Bkb3duQ29sdW1uICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIm1hdHJpeERyb3Bkb3duQ29sdW1uVHlwZXNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBtYXRyaXhEcm9wZG93bkNvbHVtblR5cGVzOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJNYXRyaXhEcm9wZG93bkNvbHVtblwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIE1hdHJpeERyb3Bkb3duQ29sdW1uOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9qc29ub2JqZWN0ICovIFwiLi9zcmMvanNvbm9iamVjdC50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYmFzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9iYXNlICovIFwiLi9zcmMvYmFzZS50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcXVlc3Rpb25fZXhwcmVzc2lvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9xdWVzdGlvbl9leHByZXNzaW9uICovIFwiLi9zcmMvcXVlc3Rpb25fZXhwcmVzc2lvbi50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc2V0dGluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vc2V0dGluZ3MgKi8gXCIuL3NyYy9zZXR0aW5ncy50c1wiKTtcbnZhciBfX2V4dGVuZHMgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xuXG5cblxuXG5mdW5jdGlvbiBvblVwZGF0ZVNlbGVjdEJhc2VDZWxsUXVlc3Rpb24oY2VsbFF1ZXN0aW9uLCBjb2x1bW4sIHF1ZXN0aW9uLCBkYXRhKSB7XG4gICAgY2VsbFF1ZXN0aW9uLnN0b3JlT3RoZXJzQXNDb21tZW50ID0gISFxdWVzdGlvblxuICAgICAgICA/IHF1ZXN0aW9uLnN0b3JlT3RoZXJzQXNDb21tZW50XG4gICAgICAgIDogZmFsc2U7XG4gICAgaWYgKCghY2VsbFF1ZXN0aW9uLmNob2ljZXMgfHwgY2VsbFF1ZXN0aW9uLmNob2ljZXMubGVuZ3RoID09IDApICYmXG4gICAgICAgIGNlbGxRdWVzdGlvbi5jaG9pY2VzQnlVcmwuaXNFbXB0eSkge1xuICAgICAgICBjZWxsUXVlc3Rpb24uY2hvaWNlcyA9IHF1ZXN0aW9uLmNob2ljZXM7XG4gICAgfVxuICAgIGlmICghY2VsbFF1ZXN0aW9uLmNob2ljZXNCeVVybC5pc0VtcHR5KSB7XG4gICAgICAgIGNlbGxRdWVzdGlvbi5jaG9pY2VzQnlVcmwucnVuKGRhdGEuZ2V0VGV4dFByb2Nlc3NvcigpKTtcbiAgICB9XG59XG52YXIgbWF0cml4RHJvcGRvd25Db2x1bW5UeXBlcyA9IHtcbiAgICBkcm9wZG93bjoge1xuICAgICAgICBvbkNlbGxRdWVzdGlvblVwZGF0ZTogZnVuY3Rpb24gKGNlbGxRdWVzdGlvbiwgY29sdW1uLCBxdWVzdGlvbiwgZGF0YSkge1xuICAgICAgICAgICAgb25VcGRhdGVTZWxlY3RCYXNlQ2VsbFF1ZXN0aW9uKGNlbGxRdWVzdGlvbiwgY29sdW1uLCBxdWVzdGlvbiwgZGF0YSk7XG4gICAgICAgICAgICBpZiAoISFjZWxsUXVlc3Rpb24ubG9jUGxhY2Vob2xkZXIgJiZcbiAgICAgICAgICAgICAgICBjZWxsUXVlc3Rpb24ubG9jUGxhY2Vob2xkZXIuaXNFbXB0eSAmJlxuICAgICAgICAgICAgICAgICFxdWVzdGlvbi5sb2NQbGFjZWhvbGRlci5pc0VtcHR5KSB7XG4gICAgICAgICAgICAgICAgY2VsbFF1ZXN0aW9uLm9wdGlvbnNDYXB0aW9uID0gcXVlc3Rpb24ub3B0aW9uc0NhcHRpb247XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBjaGVja2JveDoge1xuICAgICAgICBvbkNlbGxRdWVzdGlvblVwZGF0ZTogZnVuY3Rpb24gKGNlbGxRdWVzdGlvbiwgY29sdW1uLCBxdWVzdGlvbiwgZGF0YSkge1xuICAgICAgICAgICAgb25VcGRhdGVTZWxlY3RCYXNlQ2VsbFF1ZXN0aW9uKGNlbGxRdWVzdGlvbiwgY29sdW1uLCBxdWVzdGlvbiwgZGF0YSk7XG4gICAgICAgICAgICBjZWxsUXVlc3Rpb24uY29sQ291bnQgPVxuICAgICAgICAgICAgICAgIGNvbHVtbi5jb2xDb3VudCA+IC0xID8gY29sdW1uLmNvbENvdW50IDogcXVlc3Rpb24uY29sdW1uQ29sQ291bnQ7XG4gICAgICAgIH0sXG4gICAgfSxcbiAgICByYWRpb2dyb3VwOiB7XG4gICAgICAgIG9uQ2VsbFF1ZXN0aW9uVXBkYXRlOiBmdW5jdGlvbiAoY2VsbFF1ZXN0aW9uLCBjb2x1bW4sIHF1ZXN0aW9uLCBkYXRhKSB7XG4gICAgICAgICAgICBvblVwZGF0ZVNlbGVjdEJhc2VDZWxsUXVlc3Rpb24oY2VsbFF1ZXN0aW9uLCBjb2x1bW4sIHF1ZXN0aW9uLCBkYXRhKTtcbiAgICAgICAgICAgIGNlbGxRdWVzdGlvbi5jb2xDb3VudCA9XG4gICAgICAgICAgICAgICAgY29sdW1uLmNvbENvdW50ID4gLTEgPyBjb2x1bW4uY29sQ291bnQgOiBxdWVzdGlvbi5jb2x1bW5Db2xDb3VudDtcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHRhZ2JveDoge30sXG4gICAgdGV4dDoge30sXG4gICAgY29tbWVudDoge30sXG4gICAgYm9vbGVhbjoge1xuICAgICAgICBvbkNlbGxRdWVzdGlvblVwZGF0ZTogZnVuY3Rpb24gKGNlbGxRdWVzdGlvbiwgY29sdW1uLCBxdWVzdGlvbiwgZGF0YSkge1xuICAgICAgICAgICAgY2VsbFF1ZXN0aW9uLnJlbmRlckFzID0gY29sdW1uLnJlbmRlckFzO1xuICAgICAgICB9LFxuICAgIH0sXG4gICAgZXhwcmVzc2lvbjoge30sXG4gICAgcmF0aW5nOiB7fSxcbn07XG52YXIgTWF0cml4RHJvcGRvd25Db2x1bW4gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKE1hdHJpeERyb3Bkb3duQ29sdW1uLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIE1hdHJpeERyb3Bkb3duQ29sdW1uKG5hbWUsIHRpdGxlKSB7XG4gICAgICAgIGlmICh0aXRsZSA9PT0gdm9pZCAwKSB7IHRpdGxlID0gbnVsbDsgfVxuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5jb2xPd25lclZhbHVlID0gbnVsbDtcbiAgICAgICAgX3RoaXMuaW5kZXhWYWx1ZSA9IC0xO1xuICAgICAgICBfdGhpcy5faGFzVmlzaWJsZUNlbGwgPSB0cnVlO1xuICAgICAgICBfdGhpcy5wcmV2aW91c0Nob2ljZXNJZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgX3RoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJ0b3RhbEZvcm1hdFwiLCBfdGhpcyk7XG4gICAgICAgIF90aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwiY2VsbEhpbnRcIiwgX3RoaXMpO1xuICAgICAgICBfdGhpcy5yZWdpc3RlclByb3BlcnR5Q2hhbmdlZEhhbmRsZXJzKFtcInNob3dJbk11bHRpcGxlQ29sdW1uc1wiXSwgZnVuY3Rpb24gKCkgeyBfdGhpcy5kb1Nob3dJbk11bHRpcGxlQ29sdW1uc0NoYW5nZWQoKTsgfSk7XG4gICAgICAgIF90aGlzLnJlZ2lzdGVyUHJvcGVydHlDaGFuZ2VkSGFuZGxlcnMoW1widmlzaWJsZVwiXSwgZnVuY3Rpb24gKCkgeyBfdGhpcy5kb0NvbHVtblZpc2liaWxpdHlDaGFuZ2VkKCk7IH0pO1xuICAgICAgICBfdGhpcy51cGRhdGVUZW1wbGF0ZVF1ZXN0aW9uKCk7XG4gICAgICAgIF90aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICBpZiAodGl0bGUpIHtcbiAgICAgICAgICAgIF90aGlzLnRpdGxlID0gdGl0bGU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBfdGhpcy50ZW1wbGF0ZVF1ZXN0aW9uLmxvY1RpdGxlLnN0ckNoYW5nZWQoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIE1hdHJpeERyb3Bkb3duQ29sdW1uLmdldENvbHVtblR5cGVzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcmVzID0gW107XG4gICAgICAgIGZvciAodmFyIGtleSBpbiBtYXRyaXhEcm9wZG93bkNvbHVtblR5cGVzKSB7XG4gICAgICAgICAgICByZXMucHVzaChrZXkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfTtcbiAgICBNYXRyaXhEcm9wZG93bkNvbHVtbi5wcm90b3R5cGUuZ2V0T3JpZ2luYWxPYmogPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRlbXBsYXRlUXVlc3Rpb247XG4gICAgfTtcbiAgICBNYXRyaXhEcm9wZG93bkNvbHVtbi5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lUHJvcGVydHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBcImNlbGxUeXBlXCI7XG4gICAgfTtcbiAgICBNYXRyaXhEcm9wZG93bkNvbHVtbi5wcm90b3R5cGUuZ2V0U3VydmV5ID0gZnVuY3Rpb24gKGxpdmUpIHtcbiAgICAgICAgaWYgKGxpdmUgPT09IHZvaWQgMCkgeyBsaXZlID0gZmFsc2U7IH1cbiAgICAgICAgcmV0dXJuICEhdGhpcy5jb2xPd25lciA/IHRoaXMuY29sT3duZXIuc3VydmV5IDogbnVsbDtcbiAgICB9O1xuICAgIE1hdHJpeERyb3Bkb3duQ29sdW1uLnByb3RvdHlwZS5lbmRMb2FkaW5nRnJvbUpzb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUuZW5kTG9hZGluZ0Zyb21Kc29uLmNhbGwodGhpcyk7XG4gICAgICAgIHRoaXMudGVtcGxhdGVRdWVzdGlvbi5hdXRvT3RoZXJNb2RlID0gdGhpcy5pc1Nob3dJbk11bHRpcGxlQ29sdW1ucztcbiAgICAgICAgdGhpcy50ZW1wbGF0ZVF1ZXN0aW9uLmVuZExvYWRpbmdGcm9tSnNvbigpO1xuICAgICAgICB0aGlzLnRlbXBsYXRlUXVlc3Rpb24ub25HZXRTdXJ2ZXkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gX3RoaXMuZ2V0U3VydmV5KCk7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICBNYXRyaXhEcm9wZG93bkNvbHVtbi5wcm90b3R5cGUuZ2V0RHluYW1pY1Byb3BlcnR5TmFtZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIFwiY2VsbFR5cGVcIjtcbiAgICB9O1xuICAgIE1hdHJpeERyb3Bkb3duQ29sdW1uLnByb3RvdHlwZS5nZXREeW5hbWljVHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuY2VsbFR5cGUgPT09IFwiZGVmYXVsdFwiKVxuICAgICAgICAgICAgcmV0dXJuIFwicXVlc3Rpb25cIjtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsY0NlbGxRdWVzdGlvblR5cGUobnVsbCk7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTWF0cml4RHJvcGRvd25Db2x1bW4ucHJvdG90eXBlLCBcImNvbE93bmVyXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb2xPd25lclZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5jb2xPd25lclZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICBpZiAoISF2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVGVtcGxhdGVRdWVzdGlvbigpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0UGFyZW50UXVlc3Rpb25Ub1RlbXBsYXRlKHRoaXMudGVtcGxhdGVRdWVzdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBNYXRyaXhEcm9wZG93bkNvbHVtbi5wcm90b3R5cGUubG9jU3Ryc0NoYW5nZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUubG9jU3Ryc0NoYW5nZWQuY2FsbCh0aGlzKTtcbiAgICAgICAgdGhpcy5sb2NUaXRsZS5zdHJDaGFuZ2VkKCk7XG4gICAgfTtcbiAgICBNYXRyaXhEcm9wZG93bkNvbHVtbi5wcm90b3R5cGUuYWRkVXNlZExvY2FsZXMgPSBmdW5jdGlvbiAobG9jYWxlcykge1xuICAgICAgICBfc3VwZXIucHJvdG90eXBlLmFkZFVzZWRMb2NhbGVzLmNhbGwodGhpcywgbG9jYWxlcyk7XG4gICAgICAgIHRoaXMudGVtcGxhdGVRdWVzdGlvbi5hZGRVc2VkTG9jYWxlcyhsb2NhbGVzKTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNYXRyaXhEcm9wZG93bkNvbHVtbi5wcm90b3R5cGUsIFwiaW5kZXhcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmluZGV4VmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBNYXRyaXhEcm9wZG93bkNvbHVtbi5wcm90b3R5cGUuc2V0SW5kZXggPSBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgIHRoaXMuaW5kZXhWYWx1ZSA9IHZhbDtcbiAgICB9O1xuICAgIE1hdHJpeERyb3Bkb3duQ29sdW1uLnByb3RvdHlwZS5nZXRUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gXCJtYXRyaXhkcm9wZG93bmNvbHVtblwiO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1hdHJpeERyb3Bkb3duQ29sdW1uLnByb3RvdHlwZSwgXCJjZWxsVHlwZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNlbGxUeXBlXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHZhbCA9IHZhbC50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVUZW1wbGF0ZVF1ZXN0aW9uKHZhbCk7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjZWxsVHlwZVwiLCB2YWwpO1xuICAgICAgICAgICAgaWYgKCEhdGhpcy5jb2xPd25lcikge1xuICAgICAgICAgICAgICAgIHRoaXMuY29sT3duZXIub25Db2x1bW5DZWxsVHlwZUNoYW5nZWQodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTWF0cml4RHJvcGRvd25Db2x1bW4ucHJvdG90eXBlLCBcInRlbXBsYXRlUXVlc3Rpb25cIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRlbXBsYXRlUXVlc3Rpb25WYWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNYXRyaXhEcm9wZG93bkNvbHVtbi5wcm90b3R5cGUsIFwidmFsdWVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRlbXBsYXRlUXVlc3Rpb24ubmFtZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNYXRyaXhEcm9wZG93bkNvbHVtbi5wcm90b3R5cGUsIFwiaXNWaXNpYmxlXCIsIHtcbiAgICAgICAgLy9Gb3IgZmlsdGVyaW5nIGNvbHVtbnNcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNYXRyaXhEcm9wZG93bkNvbHVtbi5wcm90b3R5cGUsIFwiaXNDb2x1bW5WaXNpYmxlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0Rlc2lnbk1vZGUpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52aXNpYmxlICYmIHRoaXMuaGFzVmlzaWJsZUNlbGw7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTWF0cml4RHJvcGRvd25Db2x1bW4ucHJvdG90eXBlLCBcInZpc2libGVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInZpc2libGVcIik7IH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidmlzaWJsZVwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1hdHJpeERyb3Bkb3duQ29sdW1uLnByb3RvdHlwZSwgXCJoYXNWaXNpYmxlQ2VsbFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2hhc1Zpc2libGVDZWxsO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChuZXdWYWwpIHtcbiAgICAgICAgICAgIHRoaXMuX2hhc1Zpc2libGVDZWxsID0gbmV3VmFsO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgTWF0cml4RHJvcGRvd25Db2x1bW4ucHJvdG90eXBlLmdldFZpc2libGVNdWx0aXBsZUNob2ljZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBjaG9pY2VzID0gdGhpcy50ZW1wbGF0ZVF1ZXN0aW9uLnZpc2libGVDaG9pY2VzO1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY2hvaWNlcykpXG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0aGlzLl92aXNpYmxlY2hvaWNlcykpXG4gICAgICAgICAgICByZXR1cm4gY2hvaWNlcztcbiAgICAgICAgdmFyIHJlcyA9IG5ldyBBcnJheSgpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNob2ljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBpdGVtID0gY2hvaWNlc1tpXTtcbiAgICAgICAgICAgIGlmICh0aGlzLl92aXNpYmxlY2hvaWNlcy5pbmRleE9mKGl0ZW0udmFsdWUpID4gLTEpXG4gICAgICAgICAgICAgICAgcmVzLnB1c2goaXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNYXRyaXhEcm9wZG93bkNvbHVtbi5wcm90b3R5cGUsIFwiZ2V0VmlzaWJsZUNob2ljZXNJbkNlbGxcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuX3Zpc2libGVjaG9pY2VzKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fdmlzaWJsZWNob2ljZXM7XG4gICAgICAgICAgICB2YXIgcmVzID0gdGhpcy50ZW1wbGF0ZVF1ZXN0aW9uLnZpc2libGVDaG9pY2VzO1xuICAgICAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkocmVzKSA/IHJlcyA6IFtdO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgTWF0cml4RHJvcGRvd25Db2x1bW4ucHJvdG90eXBlLnNldFZpc2libGVDaG9pY2VzSW5DZWxsID0gZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICB0aGlzLl92aXNpYmxlY2hvaWNlcyA9IHZhbDtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNYXRyaXhEcm9wZG93bkNvbHVtbi5wcm90b3R5cGUsIFwiaXNGaWx0ZXJlZE11bHRpcGxlQ29sdW1uc1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnNob3dJbk11bHRpcGxlQ29sdW1ucylcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB2YXIgY2hvaWNlcyA9IHRoaXMudGVtcGxhdGVRdWVzdGlvbi5jaG9pY2VzO1xuICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGNob2ljZXMpKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hvaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChjaG9pY2VzW2ldLnZpc2libGVJZilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTWF0cml4RHJvcGRvd25Db2x1bW4ucHJvdG90eXBlLCBcIm5hbWVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRlbXBsYXRlUXVlc3Rpb24ubmFtZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnRlbXBsYXRlUXVlc3Rpb24ubmFtZSA9IHZhbDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNYXRyaXhEcm9wZG93bkNvbHVtbi5wcm90b3R5cGUsIFwidGl0bGVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRlbXBsYXRlUXVlc3Rpb24udGl0bGU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZVF1ZXN0aW9uLnRpdGxlID0gdmFsO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1hdHJpeERyb3Bkb3duQ29sdW1uLnByb3RvdHlwZSwgXCJsb2NUaXRsZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGVtcGxhdGVRdWVzdGlvbi5sb2NUaXRsZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNYXRyaXhEcm9wZG93bkNvbHVtbi5wcm90b3R5cGUsIFwiZnVsbFRpdGxlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NUaXRsZS50ZXh0T3JIdG1sO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1hdHJpeERyb3Bkb3duQ29sdW1uLnByb3RvdHlwZSwgXCJpc1JlcXVpcmVkXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZVF1ZXN0aW9uLmlzUmVxdWlyZWQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZVF1ZXN0aW9uLmlzUmVxdWlyZWQgPSB2YWw7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTWF0cml4RHJvcGRvd25Db2x1bW4ucHJvdG90eXBlLCBcImlzUmVuZGVyZWRSZXF1aXJlZFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImlzUmVuZGVyZWRSZXF1aXJlZFwiLCB0aGlzLmlzUmVxdWlyZWQpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImlzUmVuZGVyZWRSZXF1aXJlZFwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgTWF0cml4RHJvcGRvd25Db2x1bW4ucHJvdG90eXBlLnVwZGF0ZUlzUmVuZGVyZWRSZXF1aXJlZCA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgdGhpcy5pc1JlbmRlcmVkUmVxdWlyZWQgPSB2YWwgfHwgdGhpcy5pc1JlcXVpcmVkO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1hdHJpeERyb3Bkb3duQ29sdW1uLnByb3RvdHlwZSwgXCJyZXF1aXJlZFRleHRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlzUmVuZGVyZWRSZXF1aXJlZCAmJiB0aGlzLmdldFN1cnZleSgpID8gdGhpcy5nZXRTdXJ2ZXkoKS5yZXF1aXJlZFRleHQgOiB0aGlzLnRlbXBsYXRlUXVlc3Rpb24ucmVxdWlyZWRUZXh0O1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1hdHJpeERyb3Bkb3duQ29sdW1uLnByb3RvdHlwZSwgXCJyZXF1aXJlZEVycm9yVGV4dFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGVtcGxhdGVRdWVzdGlvbi5yZXF1aXJlZEVycm9yVGV4dDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnRlbXBsYXRlUXVlc3Rpb24ucmVxdWlyZWRFcnJvclRleHQgPSB2YWw7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTWF0cml4RHJvcGRvd25Db2x1bW4ucHJvdG90eXBlLCBcImxvY1JlcXVpcmVkRXJyb3JUZXh0XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZVF1ZXN0aW9uLmxvY1JlcXVpcmVkRXJyb3JUZXh0O1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1hdHJpeERyb3Bkb3duQ29sdW1uLnByb3RvdHlwZSwgXCJyZWFkT25seVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGVtcGxhdGVRdWVzdGlvbi5yZWFkT25seTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnRlbXBsYXRlUXVlc3Rpb24ucmVhZE9ubHkgPSB2YWw7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTWF0cml4RHJvcGRvd25Db2x1bW4ucHJvdG90eXBlLCBcImhhc090aGVyXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZVF1ZXN0aW9uLmhhc090aGVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMudGVtcGxhdGVRdWVzdGlvbi5oYXNPdGhlciA9IHZhbDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNYXRyaXhEcm9wZG93bkNvbHVtbi5wcm90b3R5cGUsIFwidmlzaWJsZUlmXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZVF1ZXN0aW9uLnZpc2libGVJZjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnRlbXBsYXRlUXVlc3Rpb24udmlzaWJsZUlmID0gdmFsO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1hdHJpeERyb3Bkb3duQ29sdW1uLnByb3RvdHlwZSwgXCJlbmFibGVJZlwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGVtcGxhdGVRdWVzdGlvbi5lbmFibGVJZjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnRlbXBsYXRlUXVlc3Rpb24uZW5hYmxlSWYgPSB2YWw7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTWF0cml4RHJvcGRvd25Db2x1bW4ucHJvdG90eXBlLCBcInJlcXVpcmVkSWZcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRlbXBsYXRlUXVlc3Rpb24ucmVxdWlyZWRJZjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnRlbXBsYXRlUXVlc3Rpb24ucmVxdWlyZWRJZiA9IHZhbDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNYXRyaXhEcm9wZG93bkNvbHVtbi5wcm90b3R5cGUsIFwicmVzZXRWYWx1ZUlmXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZVF1ZXN0aW9uLnJlc2V0VmFsdWVJZjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnRlbXBsYXRlUXVlc3Rpb24ucmVzZXRWYWx1ZUlmID0gdmFsO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1hdHJpeERyb3Bkb3duQ29sdW1uLnByb3RvdHlwZSwgXCJkZWZhdWx0VmFsdWVFeHByZXNzaW9uXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZVF1ZXN0aW9uLmRlZmF1bHRWYWx1ZUV4cHJlc3Npb247XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZVF1ZXN0aW9uLmRlZmF1bHRWYWx1ZUV4cHJlc3Npb24gPSB2YWw7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTWF0cml4RHJvcGRvd25Db2x1bW4ucHJvdG90eXBlLCBcImlzVW5pcXVlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaXNVbmlxdWVcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaXNVbmlxdWVcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNYXRyaXhEcm9wZG93bkNvbHVtbi5wcm90b3R5cGUsIFwic2hvd0luTXVsdGlwbGVDb2x1bW5zXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic2hvd0luTXVsdGlwbGVDb2x1bW5zXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInNob3dJbk11bHRpcGxlQ29sdW1uc1wiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1hdHJpeERyb3Bkb3duQ29sdW1uLnByb3RvdHlwZSwgXCJpc1N1cHBvcnRNdWx0aXBsZUNvbHVtbnNcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBbXCJjaGVja2JveFwiLCBcInJhZGlvZ3JvdXBcIl0uaW5kZXhPZih0aGlzLmNlbGxUeXBlKSA+IC0xO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1hdHJpeERyb3Bkb3duQ29sdW1uLnByb3RvdHlwZSwgXCJpc1Nob3dJbk11bHRpcGxlQ29sdW1uc1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2hvd0luTXVsdGlwbGVDb2x1bW5zICYmIHRoaXMuaXNTdXBwb3J0TXVsdGlwbGVDb2x1bW5zO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1hdHJpeERyb3Bkb3duQ29sdW1uLnByb3RvdHlwZSwgXCJ2YWxpZGF0b3JzXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZVF1ZXN0aW9uLnZhbGlkYXRvcnM7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZVF1ZXN0aW9uLnZhbGlkYXRvcnMgPSB2YWw7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTWF0cml4RHJvcGRvd25Db2x1bW4ucHJvdG90eXBlLCBcInRvdGFsVHlwZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInRvdGFsVHlwZVwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJ0b3RhbFR5cGVcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNYXRyaXhEcm9wZG93bkNvbHVtbi5wcm90b3R5cGUsIFwidG90YWxFeHByZXNzaW9uXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwidG90YWxFeHByZXNzaW9uXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInRvdGFsRXhwcmVzc2lvblwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1hdHJpeERyb3Bkb3duQ29sdW1uLnByb3RvdHlwZSwgXCJoYXNUb3RhbFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudG90YWxUeXBlICE9IFwibm9uZVwiIHx8ICEhdGhpcy50b3RhbEV4cHJlc3Npb247XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTWF0cml4RHJvcGRvd25Db2x1bW4ucHJvdG90eXBlLCBcInRvdGFsRm9ybWF0XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJ0b3RhbEZvcm1hdFwiLCBcIlwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcInRvdGFsRm9ybWF0XCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTWF0cml4RHJvcGRvd25Db2x1bW4ucHJvdG90eXBlLCBcImxvY1RvdGFsRm9ybWF0XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcInRvdGFsRm9ybWF0XCIpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1hdHJpeERyb3Bkb3duQ29sdW1uLnByb3RvdHlwZSwgXCJjZWxsSGludFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwiY2VsbEhpbnRcIiwgXCJcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJjZWxsSGludFwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1hdHJpeERyb3Bkb3duQ29sdW1uLnByb3RvdHlwZSwgXCJsb2NDZWxsSGludFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJjZWxsSGludFwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNYXRyaXhEcm9wZG93bkNvbHVtbi5wcm90b3R5cGUsIFwicmVuZGVyQXNcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJyZW5kZXJBc1wiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJyZW5kZXJBc1wiLCB2YWwpO1xuICAgICAgICAgICAgaWYgKCEhdGhpcy50ZW1wbGF0ZVF1ZXN0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZVF1ZXN0aW9uLnJlbmRlckFzID0gdmFsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1hdHJpeERyb3Bkb3duQ29sdW1uLnByb3RvdHlwZSwgXCJ0b3RhbE1heGltdW1GcmFjdGlvbkRpZ2l0c1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInRvdGFsTWF4aW11bUZyYWN0aW9uRGlnaXRzXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIGlmICh2YWwgPCAtMSB8fCB2YWwgPiAyMClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJ0b3RhbE1heGltdW1GcmFjdGlvbkRpZ2l0c1wiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1hdHJpeERyb3Bkb3duQ29sdW1uLnByb3RvdHlwZSwgXCJ0b3RhbE1pbmltdW1GcmFjdGlvbkRpZ2l0c1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInRvdGFsTWluaW11bUZyYWN0aW9uRGlnaXRzXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIGlmICh2YWwgPCAtMSB8fCB2YWwgPiAyMClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJ0b3RhbE1pbmltdW1GcmFjdGlvbkRpZ2l0c1wiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1hdHJpeERyb3Bkb3duQ29sdW1uLnByb3RvdHlwZSwgXCJ0b3RhbERpc3BsYXlTdHlsZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInRvdGFsRGlzcGxheVN0eWxlXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInRvdGFsRGlzcGxheVN0eWxlXCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTWF0cml4RHJvcGRvd25Db2x1bW4ucHJvdG90eXBlLCBcInRvdGFsQ3VycmVuY3lcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ0b3RhbEN1cnJlbmN5XCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIGlmIChPYmplY3QoX3F1ZXN0aW9uX2V4cHJlc3Npb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcImdldEN1cnJlY3lDb2Rlc1wiXSkoKS5pbmRleE9mKHZhbCkgPCAwKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInRvdGFsQ3VycmVuY3lcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNYXRyaXhEcm9wZG93bkNvbHVtbi5wcm90b3R5cGUsIFwibWluV2lkdGhcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJtaW5XaWR0aFwiLCBcIlwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJtaW5XaWR0aFwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1hdHJpeERyb3Bkb3duQ29sdW1uLnByb3RvdHlwZSwgXCJ3aWR0aFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGVtcGxhdGVRdWVzdGlvbi53aWR0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnRlbXBsYXRlUXVlc3Rpb24ud2lkdGggPSB2YWw7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTWF0cml4RHJvcGRvd25Db2x1bW4ucHJvdG90eXBlLCBcImNvbENvdW50XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY29sQ291bnRcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgaWYgKHZhbCA8IC0xIHx8IHZhbCA+IDQpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY29sQ291bnRcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE1hdHJpeERyb3Bkb3duQ29sdW1uLnByb3RvdHlwZS5nZXRMb2NhbGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbE93bmVyID8gdGhpcy5jb2xPd25lci5nZXRMb2NhbGUoKSA6IFwiXCI7XG4gICAgfTtcbiAgICBNYXRyaXhEcm9wZG93bkNvbHVtbi5wcm90b3R5cGUuZ2V0TWFya2Rvd25IdG1sID0gZnVuY3Rpb24gKHRleHQsIG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sT3duZXIgPyB0aGlzLmNvbE93bmVyLmdldE1hcmtkb3duSHRtbCh0ZXh0LCBuYW1lKSA6IHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIE1hdHJpeERyb3Bkb3duQ29sdW1uLnByb3RvdHlwZS5nZXRSZW5kZXJlciA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuY29sT3duZXIgPyB0aGlzLmNvbE93bmVyLmdldFJlbmRlcmVyKG5hbWUpIDogbnVsbDtcbiAgICB9O1xuICAgIE1hdHJpeERyb3Bkb3duQ29sdW1uLnByb3RvdHlwZS5nZXRSZW5kZXJlckNvbnRleHQgPSBmdW5jdGlvbiAobG9jU3RyKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuY29sT3duZXIgPyB0aGlzLmNvbE93bmVyLmdldFJlbmRlcmVyQ29udGV4dChsb2NTdHIpIDogbG9jU3RyO1xuICAgIH07XG4gICAgTWF0cml4RHJvcGRvd25Db2x1bW4ucHJvdG90eXBlLmdldFByb2Nlc3NlZFRleHQgPSBmdW5jdGlvbiAodGV4dCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2xPd25lciA/IHRoaXMuY29sT3duZXIuZ2V0UHJvY2Vzc2VkVGV4dCh0ZXh0KSA6IHRleHQ7XG4gICAgfTtcbiAgICBNYXRyaXhEcm9wZG93bkNvbHVtbi5wcm90b3R5cGUuY3JlYXRlQ2VsbFF1ZXN0aW9uID0gZnVuY3Rpb24gKHJvdykge1xuICAgICAgICB2YXIgcVR5cGUgPSB0aGlzLmNhbGNDZWxsUXVlc3Rpb25UeXBlKHJvdyk7XG4gICAgICAgIHZhciBjZWxsUXVlc3Rpb24gPSB0aGlzLmNyZWF0ZU5ld1F1ZXN0aW9uKHFUeXBlKTtcbiAgICAgICAgdGhpcy5jYWxsT25DZWxsUXVlc3Rpb25VcGRhdGUoY2VsbFF1ZXN0aW9uLCByb3cpO1xuICAgICAgICByZXR1cm4gY2VsbFF1ZXN0aW9uO1xuICAgIH07XG4gICAgTWF0cml4RHJvcGRvd25Db2x1bW4ucHJvdG90eXBlLnN0YXJ0TG9hZGluZ0Zyb21Kc29uID0gZnVuY3Rpb24gKGpzb24pIHtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5zdGFydExvYWRpbmdGcm9tSnNvbi5jYWxsKHRoaXMsIGpzb24pO1xuICAgICAgICBpZiAoISFqc29uICYmICFqc29uLmNlbGxUeXBlICYmICEhanNvbi5jaG9pY2VzKSB7XG4gICAgICAgICAgICBqc29uLmNlbGxUeXBlID0gdGhpcy5jb2xPd25lci5nZXRDZWxsVHlwZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBNYXRyaXhEcm9wZG93bkNvbHVtbi5wcm90b3R5cGUudXBkYXRlQ2VsbFF1ZXN0aW9uID0gZnVuY3Rpb24gKGNlbGxRdWVzdGlvbiwgZGF0YSwgb25VcGRhdGVKc29uKSB7XG4gICAgICAgIGlmIChvblVwZGF0ZUpzb24gPT09IHZvaWQgMCkgeyBvblVwZGF0ZUpzb24gPSBudWxsOyB9XG4gICAgICAgIHRoaXMuc2V0UXVlc3Rpb25Qcm9wZXJ0aWVzKGNlbGxRdWVzdGlvbiwgb25VcGRhdGVKc29uKTtcbiAgICB9O1xuICAgIE1hdHJpeERyb3Bkb3duQ29sdW1uLnByb3RvdHlwZS5jYWxsT25DZWxsUXVlc3Rpb25VcGRhdGUgPSBmdW5jdGlvbiAoY2VsbFF1ZXN0aW9uLCBkYXRhKSB7XG4gICAgICAgIHZhciBxVHlwZSA9IGNlbGxRdWVzdGlvbi5nZXRUeXBlKCk7XG4gICAgICAgIHZhciBxRGVmaW5pdGlvbiA9IG1hdHJpeERyb3Bkb3duQ29sdW1uVHlwZXNbcVR5cGVdO1xuICAgICAgICBpZiAocURlZmluaXRpb24gJiYgcURlZmluaXRpb25bXCJvbkNlbGxRdWVzdGlvblVwZGF0ZVwiXSkge1xuICAgICAgICAgICAgcURlZmluaXRpb25bXCJvbkNlbGxRdWVzdGlvblVwZGF0ZVwiXShjZWxsUXVlc3Rpb24sIHRoaXMsIHRoaXMuY29sT3duZXIsIGRhdGEpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBNYXRyaXhEcm9wZG93bkNvbHVtbi5wcm90b3R5cGUuZGVmYXVsdENlbGxUeXBlQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy51cGRhdGVUZW1wbGF0ZVF1ZXN0aW9uKCk7XG4gICAgfTtcbiAgICBNYXRyaXhEcm9wZG93bkNvbHVtbi5wcm90b3R5cGUuY2FsY0NlbGxRdWVzdGlvblR5cGUgPSBmdW5jdGlvbiAocm93KSB7XG4gICAgICAgIHZhciBjZWxsVHlwZSA9IHRoaXMuZ2V0RGVmYXVsdENlbGxRdWVzdGlvblR5cGUoKTtcbiAgICAgICAgaWYgKCEhcm93ICYmICEhdGhpcy5jb2xPd25lcikge1xuICAgICAgICAgICAgY2VsbFR5cGUgPSB0aGlzLmNvbE93bmVyLmdldEN1c3RvbUNlbGxUeXBlKHRoaXMsIHJvdywgY2VsbFR5cGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjZWxsVHlwZTtcbiAgICB9O1xuICAgIE1hdHJpeERyb3Bkb3duQ29sdW1uLnByb3RvdHlwZS5nZXREZWZhdWx0Q2VsbFF1ZXN0aW9uVHlwZSA9IGZ1bmN0aW9uIChjZWxsVHlwZSkge1xuICAgICAgICBpZiAoIWNlbGxUeXBlKVxuICAgICAgICAgICAgY2VsbFR5cGUgPSB0aGlzLmNlbGxUeXBlO1xuICAgICAgICBpZiAoY2VsbFR5cGUgIT09IFwiZGVmYXVsdFwiKVxuICAgICAgICAgICAgcmV0dXJuIGNlbGxUeXBlO1xuICAgICAgICBpZiAodGhpcy5jb2xPd25lcilcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbE93bmVyLmdldENlbGxUeXBlKCk7XG4gICAgICAgIHJldHVybiBfc2V0dGluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcInNldHRpbmdzXCJdLm1hdHJpeC5kZWZhdWx0Q2VsbFR5cGU7XG4gICAgfTtcbiAgICBNYXRyaXhEcm9wZG93bkNvbHVtbi5wcm90b3R5cGUudXBkYXRlVGVtcGxhdGVRdWVzdGlvbiA9IGZ1bmN0aW9uIChuZXdDZWxsVHlwZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgY3VyQ2VsbFR5cGUgPSB0aGlzLmdldERlZmF1bHRDZWxsUXVlc3Rpb25UeXBlKG5ld0NlbGxUeXBlKTtcbiAgICAgICAgdmFyIHByZXZDZWxsVHlwZSA9IHRoaXMudGVtcGxhdGVRdWVzdGlvblxuICAgICAgICAgICAgPyB0aGlzLnRlbXBsYXRlUXVlc3Rpb24uZ2V0VHlwZSgpXG4gICAgICAgICAgICA6IFwiXCI7XG4gICAgICAgIGlmIChjdXJDZWxsVHlwZSA9PT0gcHJldkNlbGxUeXBlKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAodGhpcy50ZW1wbGF0ZVF1ZXN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZVByb3BlcnRpZXMocHJldkNlbGxUeXBlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRlbXBsYXRlUXVlc3Rpb25WYWx1ZSA9IHRoaXMuY3JlYXRlTmV3UXVlc3Rpb24oY3VyQ2VsbFR5cGUpO1xuICAgICAgICB0aGlzLnRlbXBsYXRlUXVlc3Rpb24ubG9jT3duZXIgPSB0aGlzO1xuICAgICAgICB0aGlzLmFkZFByb3BlcnRpZXMoY3VyQ2VsbFR5cGUpO1xuICAgICAgICB0aGlzLnRlbXBsYXRlUXVlc3Rpb24ub25Qcm9wZXJ0eUNoYW5nZWQuYWRkKGZ1bmN0aW9uIChzZW5kZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIF90aGlzLnByb3BlcnR5VmFsdWVDaGFuZ2VkKG9wdGlvbnMubmFtZSwgb3B0aW9ucy5vbGRWYWx1ZSwgb3B0aW9ucy5uZXdWYWx1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnRlbXBsYXRlUXVlc3Rpb24ub25JdGVtVmFsdWVQcm9wZXJ0eUNoYW5nZWQuYWRkKGZ1bmN0aW9uIChzZW5kZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIF90aGlzLmRvSXRlbVZhbHVlUHJvcGVydHlDaGFuZ2VkKG9wdGlvbnMucHJvcGVydHlOYW1lLCBvcHRpb25zLm9iaiwgb3B0aW9ucy5uYW1lLCBvcHRpb25zLm5ld1ZhbHVlLCBvcHRpb25zLm9sZFZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudGVtcGxhdGVRdWVzdGlvbi5pc0NvbnRlbnRFbGVtZW50ID0gdHJ1ZTtcbiAgICAgICAgaWYgKCF0aGlzLmlzTG9hZGluZ0Zyb21Kc29uKSB7XG4gICAgICAgICAgICB0aGlzLnRlbXBsYXRlUXVlc3Rpb24ub25HZXRTdXJ2ZXkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLmdldFN1cnZleSgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRlbXBsYXRlUXVlc3Rpb24ubG9jVGl0bGUuc3RyQ2hhbmdlZCgpO1xuICAgIH07XG4gICAgTWF0cml4RHJvcGRvd25Db2x1bW4ucHJvdG90eXBlLmNyZWF0ZU5ld1F1ZXN0aW9uID0gZnVuY3Rpb24gKGNlbGxUeXBlKSB7XG4gICAgICAgIHZhciBxdWVzdGlvbiA9IF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJTZXJpYWxpemVyXCJdLmNyZWF0ZUNsYXNzKGNlbGxUeXBlKTtcbiAgICAgICAgaWYgKCFxdWVzdGlvbikge1xuICAgICAgICAgICAgcXVlc3Rpb24gPSBfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiU2VyaWFsaXplclwiXS5jcmVhdGVDbGFzcyhcInRleHRcIik7XG4gICAgICAgIH1cbiAgICAgICAgcXVlc3Rpb24ubG9hZGluZ093bmVyID0gdGhpcztcbiAgICAgICAgcXVlc3Rpb24uaXNFZGl0YWJsZVRlbXBsYXRlRWxlbWVudCA9IHRydWU7XG4gICAgICAgIHF1ZXN0aW9uLmF1dG9PdGhlck1vZGUgPSB0aGlzLmlzU2hvd0luTXVsdGlwbGVDb2x1bW5zO1xuICAgICAgICB0aGlzLnNldFF1ZXN0aW9uUHJvcGVydGllcyhxdWVzdGlvbik7XG4gICAgICAgIHRoaXMuc2V0UGFyZW50UXVlc3Rpb25Ub1RlbXBsYXRlKHF1ZXN0aW9uKTtcbiAgICAgICAgcmV0dXJuIHF1ZXN0aW9uO1xuICAgIH07XG4gICAgTWF0cml4RHJvcGRvd25Db2x1bW4ucHJvdG90eXBlLnNldFBhcmVudFF1ZXN0aW9uVG9UZW1wbGF0ZSA9IGZ1bmN0aW9uIChxdWVzdGlvbikge1xuICAgICAgICBpZiAoISF0aGlzLmNvbE93bmVyICYmIHRoaXMuY29sT3duZXIuaXNRdWVzdGlvbikge1xuICAgICAgICAgICAgcXVlc3Rpb24uc2V0UGFyZW50UXVlc3Rpb24odGhpcy5jb2xPd25lcik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE1hdHJpeERyb3Bkb3duQ29sdW1uLnByb3RvdHlwZS5zZXRRdWVzdGlvblByb3BlcnRpZXMgPSBmdW5jdGlvbiAocXVlc3Rpb24sIG9uVXBkYXRlSnNvbikge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBpZiAob25VcGRhdGVKc29uID09PSB2b2lkIDApIHsgb25VcGRhdGVKc29uID0gbnVsbDsgfVxuICAgICAgICBpZiAodGhpcy50ZW1wbGF0ZVF1ZXN0aW9uKSB7XG4gICAgICAgICAgICB2YXIganNvbiA9IG5ldyBfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiSnNvbk9iamVjdFwiXSgpLnRvSnNvbk9iamVjdCh0aGlzLnRlbXBsYXRlUXVlc3Rpb24sIHRydWUpO1xuICAgICAgICAgICAgaWYgKG9uVXBkYXRlSnNvbikge1xuICAgICAgICAgICAgICAgIG9uVXBkYXRlSnNvbihqc29uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGpzb24udHlwZSA9IHF1ZXN0aW9uLmdldFR5cGUoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmNlbGxUeXBlID09PSBcImRlZmF1bHRcIiAmJiAhIXRoaXMuY29sT3duZXIgJiYgdGhpcy5jb2xPd25lci5oYXNDaG9pY2VzKCkpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUganNvbltcImNob2ljZXNcIl07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWxldGUganNvbltcIml0ZW1Db21wb25lbnRcIl07XG4gICAgICAgICAgICBpZiAodGhpcy5qc29uT2JqKSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXModGhpcy5qc29uT2JqKS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgICAgICAgICAgICAgICAgIGpzb25bcHJvcF0gPSBfdGhpcy5qc29uT2JqW3Byb3BdO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV3IF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJKc29uT2JqZWN0XCJdKCkudG9PYmplY3QoanNvbiwgcXVlc3Rpb24pO1xuICAgICAgICAgICAgcXVlc3Rpb24uaXNDb250ZW50RWxlbWVudCA9IHRoaXMudGVtcGxhdGVRdWVzdGlvbi5pc0NvbnRlbnRFbGVtZW50O1xuICAgICAgICAgICAgdGhpcy5wcmV2aW91c0Nob2ljZXNJZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHF1ZXN0aW9uLmxvYWRlZENob2ljZXNGcm9tU2VydmVyQ2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFfdGhpcy5pc1Nob3dJbk11bHRpcGxlQ29sdW1ucylcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGlmICghIV90aGlzLnByZXZpb3VzQ2hvaWNlc0lkICYmIF90aGlzLnByZXZpb3VzQ2hvaWNlc0lkICE9PSBxdWVzdGlvbi5pZClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIF90aGlzLnByZXZpb3VzQ2hvaWNlc0lkID0gcXVlc3Rpb24uaWQ7XG4gICAgICAgICAgICAgICAgdmFyIGNob2ljZXMgPSBxdWVzdGlvbi52aXNpYmxlQ2hvaWNlcztcbiAgICAgICAgICAgICAgICBfdGhpcy50ZW1wbGF0ZVF1ZXN0aW9uLmNob2ljZXMgPSBjaG9pY2VzO1xuICAgICAgICAgICAgICAgIF90aGlzLnByb3BlcnR5VmFsdWVDaGFuZ2VkKFwiY2hvaWNlc1wiLCBjaG9pY2VzLCBjaG9pY2VzKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE1hdHJpeERyb3Bkb3duQ29sdW1uLnByb3RvdHlwZS5wcm9wZXJ0eVZhbHVlQ2hhbmdlZCA9IGZ1bmN0aW9uIChuYW1lLCBvbGRWYWx1ZSwgbmV3VmFsdWUpIHtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5wcm9wZXJ0eVZhbHVlQ2hhbmdlZC5jYWxsKHRoaXMsIG5hbWUsIG9sZFZhbHVlLCBuZXdWYWx1ZSk7XG4gICAgICAgIGlmIChuYW1lID09PSBcImlzUmVxdWlyZWRcIikge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVJc1JlbmRlcmVkUmVxdWlyZWQobmV3VmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5jb2xPd25lciB8fCB0aGlzLmlzTG9hZGluZ0Zyb21Kc29uKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAodGhpcy5pc1Nob3dJbk11bHRpcGxlQ29sdW1ucyAmJiBbXCJ2aXNpYmxlQ2hvaWNlc1wiLCBcImNob2ljZXNcIl0uaW5kZXhPZihuYW1lKSA+IC0xKSB7XG4gICAgICAgICAgICB0aGlzLmNvbE93bmVyLm9uU2hvd0luTXVsdGlwbGVDb2x1bW5zQ2hhbmdlZCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIV9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJTZXJpYWxpemVyXCJdLmhhc09yaWdpbmFsUHJvcGVydHkodGhpcywgbmFtZSkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMuY29sT3duZXIub25Db2x1bW5Qcm9wZXJ0eUNoYW5nZWQodGhpcywgbmFtZSwgbmV3VmFsdWUpO1xuICAgIH07XG4gICAgTWF0cml4RHJvcGRvd25Db2x1bW4ucHJvdG90eXBlLmRvSXRlbVZhbHVlUHJvcGVydHlDaGFuZ2VkID0gZnVuY3Rpb24gKHByb3BlcnR5TmFtZSwgb2JqLCBuYW1lLCBuZXdWYWx1ZSwgb2xkVmFsdWUpIHtcbiAgICAgICAgaWYgKCFfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiU2VyaWFsaXplclwiXS5oYXNPcmlnaW5hbFByb3BlcnR5KG9iaiwgbmFtZSkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmICh0aGlzLmNvbE93bmVyICE9IG51bGwgJiYgIXRoaXMuaXNMb2FkaW5nRnJvbUpzb24pIHtcbiAgICAgICAgICAgIHRoaXMuY29sT3duZXIub25Db2x1bW5JdGVtVmFsdWVQcm9wZXJ0eUNoYW5nZWQodGhpcywgcHJvcGVydHlOYW1lLCBvYmosIG5hbWUsIG5ld1ZhbHVlLCBvbGRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE1hdHJpeERyb3Bkb3duQ29sdW1uLnByb3RvdHlwZS5kb1Nob3dJbk11bHRpcGxlQ29sdW1uc0NoYW5nZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbE93bmVyICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuY29sT3duZXIub25TaG93SW5NdWx0aXBsZUNvbHVtbnNDaGFuZ2VkKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnRlbXBsYXRlUXVlc3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMudGVtcGxhdGVRdWVzdGlvbi5hdXRvT3RoZXJNb2RlID0gdGhpcy5pc1Nob3dJbk11bHRpcGxlQ29sdW1ucztcbiAgICAgICAgfVxuICAgIH07XG4gICAgTWF0cml4RHJvcGRvd25Db2x1bW4ucHJvdG90eXBlLmRvQ29sdW1uVmlzaWJpbGl0eUNoYW5nZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbE93bmVyICE9IG51bGwgJiYgIXRoaXMuaXNEZXNpZ25Nb2RlKSB7XG4gICAgICAgICAgICB0aGlzLmNvbE93bmVyLm9uQ29sdW1uVmlzaWJpbGl0eUNoYW5nZWQodGhpcyk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE1hdHJpeERyb3Bkb3duQ29sdW1uLnByb3RvdHlwZS5nZXRQcm9wZXJ0aWVzID0gZnVuY3Rpb24gKGN1ckNlbGxUeXBlKSB7XG4gICAgICAgIHJldHVybiBfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiU2VyaWFsaXplclwiXS5nZXREeW5hbWljUHJvcGVydGllc0J5T2JqKHRoaXMsIGN1ckNlbGxUeXBlKTtcbiAgICB9O1xuICAgIE1hdHJpeERyb3Bkb3duQ29sdW1uLnByb3RvdHlwZS5yZW1vdmVQcm9wZXJ0aWVzID0gZnVuY3Rpb24gKGN1ckNlbGxUeXBlKSB7XG4gICAgICAgIHZhciBwcm9wZXJ0aWVzID0gdGhpcy5nZXRQcm9wZXJ0aWVzKGN1ckNlbGxUeXBlKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgcHJvcCA9IHByb3BlcnRpZXNbaV07XG4gICAgICAgICAgICBkZWxldGUgdGhpc1twcm9wLm5hbWVdO1xuICAgICAgICAgICAgaWYgKHByb3Auc2VyaWFsaXphdGlvblByb3BlcnR5KSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXNbcHJvcC5zZXJpYWxpemF0aW9uUHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBNYXRyaXhEcm9wZG93bkNvbHVtbi5wcm90b3R5cGUuYWRkUHJvcGVydGllcyA9IGZ1bmN0aW9uIChjdXJDZWxsVHlwZSkge1xuICAgICAgICB2YXIgcXVlc3Rpb24gPSB0aGlzLnRlbXBsYXRlUXVlc3Rpb247XG4gICAgICAgIHZhciBwcm9wZXJ0aWVzID0gdGhpcy5nZXRQcm9wZXJ0aWVzKGN1ckNlbGxUeXBlKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgcHJvcCA9IHByb3BlcnRpZXNbaV07XG4gICAgICAgICAgICB0aGlzLmFkZFByb3BlcnR5KHF1ZXN0aW9uLCBwcm9wLm5hbWUsIGZhbHNlKTtcbiAgICAgICAgICAgIGlmIChwcm9wLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkUHJvcGVydHkocXVlc3Rpb24sIHByb3Auc2VyaWFsaXphdGlvblByb3BlcnR5LCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwcm9wLmFsdGVybmF0aXZlTmFtZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkUHJvcGVydHkocXVlc3Rpb24sIHByb3AuYWx0ZXJuYXRpdmVOYW1lLCBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE1hdHJpeERyb3Bkb3duQ29sdW1uLnByb3RvdHlwZS5hZGRQcm9wZXJ0eSA9IGZ1bmN0aW9uIChxdWVzdGlvbiwgcHJvcE5hbWUsIGlzUmVhZE9ubHkpIHtcbiAgICAgICAgdmFyIGRlc2MgPSB7XG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcXVlc3Rpb25bcHJvcE5hbWVdO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKCFpc1JlYWRPbmx5KSB7XG4gICAgICAgICAgICBkZXNjW1wic2V0XCJdID0gZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICBxdWVzdGlvbltwcm9wTmFtZV0gPSB2O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgcHJvcE5hbWUsIGRlc2MpO1xuICAgIH07XG4gICAgcmV0dXJuIE1hdHJpeERyb3Bkb3duQ29sdW1uO1xufShfYmFzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiQmFzZVwiXSkpO1xuXG5fanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiU2VyaWFsaXplclwiXS5hZGRDbGFzcyhcIm1hdHJpeGRyb3Bkb3duY29sdW1uXCIsIFtcbiAgICB7IG5hbWU6IFwiIW5hbWVcIiwgaXNVbmlxdWU6IHRydWUgfSxcbiAgICB7XG4gICAgICAgIG5hbWU6IFwidGl0bGVcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1RpdGxlXCIsIGRlcGVuZHNPbjogXCJuYW1lXCIsXG4gICAgICAgIG9uUHJvcGVydHlFZGl0b3JVcGRhdGU6IGZ1bmN0aW9uIChvYmosIGVkaXRvcikge1xuICAgICAgICAgICAgaWYgKCEhb2JqICYmICEhZWRpdG9yKSB7XG4gICAgICAgICAgICAgICAgZWRpdG9yLnBsYWNlaG9sZGVyID0gb2JqLm5hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuICAgIHsgbmFtZTogXCJjZWxsSGludFwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jQ2VsbEhpbnRcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICB7XG4gICAgICAgIG5hbWU6IFwiY2VsbFR5cGVcIixcbiAgICAgICAgZGVmYXVsdDogXCJkZWZhdWx0XCIsXG4gICAgICAgIGNob2ljZXM6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciByZXMgPSBNYXRyaXhEcm9wZG93bkNvbHVtbi5nZXRDb2x1bW5UeXBlcygpO1xuICAgICAgICAgICAgcmVzLnNwbGljZSgwLCAwLCBcImRlZmF1bHRcIik7XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9LFxuICAgIH0sXG4gICAgeyBuYW1lOiBcImNvbENvdW50XCIsIGRlZmF1bHQ6IC0xLCBjaG9pY2VzOiBbLTEsIDAsIDEsIDIsIDMsIDRdIH0sXG4gICAgXCJpc1JlcXVpcmVkOmJvb2xlYW5cIixcbiAgICBcImlzVW5pcXVlOmJvb2xlYW5cIixcbiAgICB7XG4gICAgICAgIG5hbWU6IFwicmVxdWlyZWRFcnJvclRleHQ6dGV4dFwiLFxuICAgICAgICBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jUmVxdWlyZWRFcnJvclRleHRcIixcbiAgICB9LFxuICAgIFwicmVhZE9ubHk6Ym9vbGVhblwiLFxuICAgIHtcbiAgICAgICAgbmFtZTogXCJtaW5XaWR0aFwiLFxuICAgICAgICBvblByb3BlcnR5RWRpdG9yVXBkYXRlOiBmdW5jdGlvbiAob2JqLCBlZGl0b3IpIHtcbiAgICAgICAgICAgIGlmICghIW9iaiAmJiAhIWVkaXRvcikge1xuICAgICAgICAgICAgICAgIGVkaXRvci52YWx1ZSA9IG9iai5taW5XaWR0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgXCJ3aWR0aFwiLFxuICAgIHsgbmFtZTogXCJ2aXNpYmxlOnN3aXRjaFwiLCBkZWZhdWx0OiB0cnVlLCBvdmVycmlkaW5nUHJvcGVydHk6IFwidmlzaWJsZUlmXCIgfSxcbiAgICBcInZpc2libGVJZjpjb25kaXRpb25cIixcbiAgICBcImVuYWJsZUlmOmNvbmRpdGlvblwiLFxuICAgIFwicmVxdWlyZWRJZjpjb25kaXRpb25cIixcbiAgICB7XG4gICAgICAgIG5hbWU6IFwic2hvd0luTXVsdGlwbGVDb2x1bW5zOmJvb2xlYW5cIixcbiAgICAgICAgZGVwZW5kc09uOiBcImNlbGxUeXBlXCIsXG4gICAgICAgIHZpc2libGVJZjogZnVuY3Rpb24gKG9iaikge1xuICAgICAgICAgICAgaWYgKCFvYmopXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIG9iai5pc1N1cHBvcnRNdWx0aXBsZUNvbHVtbnM7XG4gICAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICAgIG5hbWU6IFwidmFsaWRhdG9yczp2YWxpZGF0b3JzXCIsXG4gICAgICAgIGJhc2VDbGFzc05hbWU6IFwic3VydmV5dmFsaWRhdG9yXCIsXG4gICAgICAgIGNsYXNzTmFtZVBhcnQ6IFwidmFsaWRhdG9yXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICAgIG5hbWU6IFwidG90YWxUeXBlXCIsXG4gICAgICAgIGRlZmF1bHQ6IFwibm9uZVwiLFxuICAgICAgICBjaG9pY2VzOiBbXCJub25lXCIsIFwic3VtXCIsIFwiY291bnRcIiwgXCJtaW5cIiwgXCJtYXhcIiwgXCJhdmdcIl0sXG4gICAgfSxcbiAgICBcInRvdGFsRXhwcmVzc2lvbjpleHByZXNzaW9uXCIsXG4gICAgeyBuYW1lOiBcInRvdGFsRm9ybWF0XCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NUb3RhbEZvcm1hdFwiIH0sXG4gICAge1xuICAgICAgICBuYW1lOiBcInRvdGFsRGlzcGxheVN0eWxlXCIsXG4gICAgICAgIGRlZmF1bHQ6IFwibm9uZVwiLFxuICAgICAgICBjaG9pY2VzOiBbXCJub25lXCIsIFwiZGVjaW1hbFwiLCBcImN1cnJlbmN5XCIsIFwicGVyY2VudFwiXSxcbiAgICB9LFxuICAgIHtcbiAgICAgICAgbmFtZTogXCJ0b3RhbEN1cnJlbmN5XCIsXG4gICAgICAgIGNob2ljZXM6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QoX3F1ZXN0aW9uX2V4cHJlc3Npb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcImdldEN1cnJlY3lDb2Rlc1wiXSkoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDogXCJVU0RcIixcbiAgICB9LFxuICAgIHsgbmFtZTogXCJ0b3RhbE1heGltdW1GcmFjdGlvbkRpZ2l0czpudW1iZXJcIiwgZGVmYXVsdDogLTEgfSxcbiAgICB7IG5hbWU6IFwidG90YWxNaW5pbXVtRnJhY3Rpb25EaWdpdHM6bnVtYmVyXCIsIGRlZmF1bHQ6IC0xIH0sXG4gICAgeyBuYW1lOiBcInJlbmRlckFzXCIsIGRlZmF1bHQ6IFwiZGVmYXVsdFwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuXSwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgTWF0cml4RHJvcGRvd25Db2x1bW4oXCJcIik7XG59KTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9xdWVzdGlvbl9tYXRyaXhkcm9wZG93bnJlbmRlcmVkLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvcXVlc3Rpb25fbWF0cml4ZHJvcGRvd25yZW5kZXJlZC50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwsIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFJvdywgUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkRXJyb3JSb3csIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFRhYmxlICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRDZWxsOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3dcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3c7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZEVycm9yUm93XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkRXJyb3JSb3c7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFRhYmxlXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkVGFibGU7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2pzb25vYmplY3QgKi8gXCIuL3NyYy9qc29ub2JqZWN0LnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9iYXNlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2Jhc2UgKi8gXCIuL3NyYy9iYXNlLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9pdGVtdmFsdWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vaXRlbXZhbHVlICovIFwiLi9zcmMvaXRlbXZhbHVlLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9hY3Rpb25zX2FjdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9hY3Rpb25zL2FjdGlvbiAqLyBcIi4vc3JjL2FjdGlvbnMvYWN0aW9uLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9hY3Rpb25zX2FkYXB0aXZlX2NvbnRhaW5lcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9hY3Rpb25zL2FkYXB0aXZlLWNvbnRhaW5lciAqLyBcIi4vc3JjL2FjdGlvbnMvYWRhcHRpdmUtY29udGFpbmVyLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF91dGlsc19jc3NDbGFzc0J1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vdXRpbHMvY3NzQ2xhc3NCdWlsZGVyICovIFwiLi9zcmMvdXRpbHMvY3NzQ2xhc3NCdWlsZGVyLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9hY3Rpb25zX2NvbnRhaW5lcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9hY3Rpb25zL2NvbnRhaW5lciAqLyBcIi4vc3JjL2FjdGlvbnMvY29udGFpbmVyLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9zZXR0aW5ncyAqLyBcIi4vc3JjL3NldHRpbmdzLnRzXCIpO1xudmFyIF9fZXh0ZW5kcyA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG52YXIgX19kZWNvcmF0ZSA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xudmFyIF9fc3ByZWFkQXJyYXkgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX3NwcmVhZEFycmF5KSB8fCBmdW5jdGlvbiAodG8sIGZyb20pIHtcbiAgICBmb3IgKHZhciBpID0gMCwgaWwgPSBmcm9tLmxlbmd0aCwgaiA9IHRvLmxlbmd0aDsgaSA8IGlsOyBpKyssIGorKylcbiAgICAgICAgdG9bal0gPSBmcm9tW2ldO1xuICAgIHJldHVybiB0bztcbn07XG5cblxuXG5cblxuXG5cblxudmFyIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkQ2VsbCgpIHtcbiAgICAgICAgdGhpcy5taW5XaWR0aCA9IFwiXCI7XG4gICAgICAgIHRoaXMud2lkdGggPSBcIlwiO1xuICAgICAgICB0aGlzLmNvbFNwYW5zID0gMTtcbiAgICAgICAgdGhpcy5pc0FjdGlvbnNDZWxsID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNFcnJvcnNDZWxsID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNEcmFnSGFuZGxlckNlbGwgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jbGFzc05hbWVWYWx1ZSA9IFwiXCI7XG4gICAgICAgIHRoaXMuaWRWYWx1ZSA9IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwuY291bnRlcisrO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkQ2VsbC5wcm90b3R5cGUsIFwiaGFzUXVlc3Rpb25cIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAhIXRoaXMucXVlc3Rpb24gJiYgIXRoaXMuaXNFcnJvcnNDZWxsO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwucHJvdG90eXBlLCBcImhhc1RpdGxlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gISF0aGlzLmxvY1RpdGxlO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwucHJvdG90eXBlLCBcImhhc1BhbmVsXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gISF0aGlzLnBhbmVsO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwucHJvdG90eXBlLCBcImlkXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pZFZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwucHJvdG90eXBlLCBcIml0ZW1cIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLml0ZW1WYWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLml0ZW1WYWx1ZSA9IHZhbDtcbiAgICAgICAgICAgIGlmICghIXZhbCkge1xuICAgICAgICAgICAgICAgIHZhbC5oaWRlQ2FwdGlvbiA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkQ2VsbC5wcm90b3R5cGUsIFwiaXNDaG9pY2VcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAhIXRoaXMuaXRlbTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRDZWxsLnByb3RvdHlwZSwgXCJpc0l0ZW1DaG9pY2VcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlzQ2hvaWNlICYmICF0aGlzLmlzT3RoZXJDaG9pY2U7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkQ2VsbC5wcm90b3R5cGUsIFwiY2hvaWNlVmFsdWVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlzQ2hvaWNlID8gdGhpcy5pdGVtLnZhbHVlIDogbnVsbDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRDZWxsLnByb3RvdHlwZSwgXCJpc0NoZWNrYm94XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pc0l0ZW1DaG9pY2UgJiYgdGhpcy5xdWVzdGlvbi5pc0Rlc2NlbmRhbnRPZihcImNoZWNrYm94XCIpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwucHJvdG90eXBlLCBcImlzUmFkaW9cIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlzSXRlbUNob2ljZSAmJiB0aGlzLnF1ZXN0aW9uLmlzRGVzY2VuZGFudE9mKFwicmFkaW9ncm91cFwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRDZWxsLnByb3RvdHlwZSwgXCJpc0ZpcnN0Q2hvaWNlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jaG9pY2VJbmRleCA9PT0gMDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRDZWxsLnByb3RvdHlwZSwgXCJjbGFzc05hbWVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBidWlsZGVyID0gbmV3IF91dGlsc19jc3NDbGFzc0J1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1tcIkNzc0NsYXNzQnVpbGRlclwiXSgpLmFwcGVuZCh0aGlzLmNsYXNzTmFtZVZhbHVlKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmhhc1F1ZXN0aW9uKSB7XG4gICAgICAgICAgICAgICAgYnVpbGRlclxuICAgICAgICAgICAgICAgICAgICAuYXBwZW5kKHRoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5oYXNFcnJvciwgdGhpcy5xdWVzdGlvbi5lcnJvcnMubGVuZ3RoID4gMClcbiAgICAgICAgICAgICAgICAgICAgLmFwcGVuZCh0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuYW5zd2VyZWQsIHRoaXMucXVlc3Rpb24uaXNBbnN3ZXJlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuY2xhc3NOYW1lVmFsdWUgPSB2YWw7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkQ2VsbC5wcm90b3R5cGUsIFwiaGVhZGVyc1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2VsbCAmJiB0aGlzLmNlbGwuY29sdW1uKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY2VsbC5jb2x1bW4uY2VsbEhpbnQgPT09IFwiIFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoISF0aGlzLmNlbGwuY29sdW1uLmNlbGxIaW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNlbGwuY29sdW1uLmxvY0NlbGxIaW50LnJlbmRlcmVkSHRtbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubWF0cml4LklzTXVsdGlwbHlDb2x1bW4odGhpcy5jZWxsLmNvbHVtbikpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEhdGhpcy5pdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pdGVtLmxvY1RleHQucmVuZGVyZWRIdG1sO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5oYXNRdWVzdGlvbiAmJiB0aGlzLnF1ZXN0aW9uLmlzVmlzaWJsZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLmxvY1RpdGxlLnJlbmRlcmVkSHRtbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmhhc1RpdGxlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jVGl0bGUucmVuZGVyZWRIdG1sIHx8IFwiXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwucHJvdG90eXBlLmdldFRpdGxlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMubWF0cml4ICYmIHRoaXMubWF0cml4LnNob3dIZWFkZXIpID8gdGhpcy5oZWFkZXJzIDogXCJcIjtcbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwucHJvdG90eXBlLmNhbGN1bGF0ZUZpbmFsQ2xhc3NOYW1lID0gZnVuY3Rpb24gKG1hdHJpeENzc0NsYXNzZXMpIHtcbiAgICAgICAgdmFyIHF1ZXN0aW9uQ3NzID0gdGhpcy5jZWxsLnF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgICAgIC8vICd0ZXh0LWFsaWduJzogJGRhdGEuaXNDaG9pY2UgPyAnY2VudGVyJzpcbiAgICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgX3V0aWxzX2Nzc0NsYXNzQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fW1wiQ3NzQ2xhc3NCdWlsZGVyXCJdKClcbiAgICAgICAgICAgIC5hcHBlbmQocXVlc3Rpb25Dc3MuaXRlbVZhbHVlLCAhIXF1ZXN0aW9uQ3NzKVxuICAgICAgICAgICAgLmFwcGVuZChxdWVzdGlvbkNzcy5hc0NlbGwsICEhcXVlc3Rpb25Dc3MpO1xuICAgICAgICByZXR1cm4gYnVpbGRlci5hcHBlbmQobWF0cml4Q3NzQ2xhc3Nlcy5jZWxsLCBidWlsZGVyLmlzRW1wdHkoKSAmJiAhIW1hdHJpeENzc0NsYXNzZXMpXG4gICAgICAgICAgICAuYXBwZW5kKG1hdHJpeENzc0NsYXNzZXMuY2hvaWNlQ2VsbCwgdGhpcy5pc0Nob2ljZSlcbiAgICAgICAgICAgIC50b1N0cmluZygpO1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkQ2VsbC5wcm90b3R5cGUuZm9jdXNJbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMucXVlc3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb24uZm9jdXNJbigpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRDZWxsLmNvdW50ZXIgPSAxO1xuICAgIHJldHVybiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRDZWxsO1xufSgpKTtcblxudmFyIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFJvdyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkUm93LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFJvdyhjc3NDbGFzc2VzLCBpc0RldGFpbFJvdykge1xuICAgICAgICBpZiAoaXNEZXRhaWxSb3cgPT09IHZvaWQgMCkgeyBpc0RldGFpbFJvdyA9IGZhbHNlOyB9XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmNzc0NsYXNzZXMgPSBjc3NDbGFzc2VzO1xuICAgICAgICBfdGhpcy5pc0RldGFpbFJvdyA9IGlzRGV0YWlsUm93O1xuICAgICAgICBfdGhpcy5pc0Vycm9yc1JvdyA9IGZhbHNlO1xuICAgICAgICBfdGhpcy5jZWxscyA9IFtdO1xuICAgICAgICBfdGhpcy5pZFZhbHVlID0gUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkUm93LmNvdW50ZXIrKztcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkUm93LnByb3RvdHlwZSwgXCJpZFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaWRWYWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3cucHJvdG90eXBlLCBcImF0dHJpYnV0ZXNcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5yb3cpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICAgICAgcmV0dXJuIHsgXCJkYXRhLXN2LWRyb3AtdGFyZ2V0LW1hdHJpeC1yb3dcIjogdGhpcy5yb3cuaWQgfTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3cucHJvdG90eXBlLCBcImNsYXNzTmFtZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBfdXRpbHNfY3NzQ2xhc3NCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bXCJDc3NDbGFzc0J1aWxkZXJcIl0oKVxuICAgICAgICAgICAgICAgIC5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLnJvdylcbiAgICAgICAgICAgICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5kZXRhaWxSb3csIHRoaXMuaXNEZXRhaWxSb3cpXG4gICAgICAgICAgICAgICAgLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMuZ2hvc3RSb3csIHRoaXMuaXNHaG9zdFJvdylcbiAgICAgICAgICAgICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5yb3dBZGRpdGlvbmFsLCB0aGlzLmlzQWRkaXRpb25hbENsYXNzZXMpXG4gICAgICAgICAgICAgICAgLnRvU3RyaW5nKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3cuY291bnRlciA9IDE7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicHJvcGVydHlcIl0pKHsgZGVmYXVsdFZhbHVlOiBmYWxzZSB9KVxuICAgIF0sIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFJvdy5wcm90b3R5cGUsIFwiaXNHaG9zdFJvd1wiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QoX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInByb3BlcnR5XCJdKSh7IGRlZmF1bHRWYWx1ZTogZmFsc2UgfSlcbiAgICBdLCBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3cucHJvdG90eXBlLCBcImlzQWRkaXRpb25hbENsYXNzZXNcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJwcm9wZXJ0eVwiXSkoeyBkZWZhdWx0VmFsdWU6IHRydWUgfSlcbiAgICBdLCBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3cucHJvdG90eXBlLCBcInZpc2libGVcIiwgdm9pZCAwKTtcbiAgICByZXR1cm4gUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkUm93O1xufShfYmFzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiQmFzZVwiXSkpO1xuXG52YXIgUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkRXJyb3JSb3cgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZEVycm9yUm93LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZEVycm9yUm93KGNzc0NsYXNzZXMpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgY3NzQ2xhc3NlcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuaXNFcnJvcnNSb3cgPSB0cnVlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRFcnJvclJvdy5wcm90b3R5cGUsIFwiYXR0cmlidXRlc1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZEVycm9yUm93LnByb3RvdHlwZSwgXCJjbGFzc05hbWVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgX3V0aWxzX2Nzc0NsYXNzQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fW1wiQ3NzQ2xhc3NCdWlsZGVyXCJdKClcbiAgICAgICAgICAgICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5yb3cpXG4gICAgICAgICAgICAgICAgLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMuZXJyb3JSb3cpXG4gICAgICAgICAgICAgICAgLnRvU3RyaW5nKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRFcnJvclJvdy5wcm90b3R5cGUub25BZnRlckNyZWF0ZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLnZpc2libGUgPSBfdGhpcy5jZWxscy5zb21lKGZ1bmN0aW9uIChjZWxsKSB7IHJldHVybiBjZWxsLnF1ZXN0aW9uICYmIGNlbGwucXVlc3Rpb24uaGFzVmlzaWJsZUVycm9yczsgfSk7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuY2VsbHMuZm9yRWFjaChmdW5jdGlvbiAoY2VsbCkge1xuICAgICAgICAgICAgaWYgKGNlbGwucXVlc3Rpb24pIHtcbiAgICAgICAgICAgICAgICBjZWxsLnF1ZXN0aW9uLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnR5VmFsdWVDaGFuZ2VkKFwiaGFzVmlzaWJsZUVycm9yc1wiLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgIH07XG4gICAgcmV0dXJuIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZEVycm9yUm93O1xufShRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3cpKTtcblxudmFyIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFRhYmxlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRUYWJsZSwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRUYWJsZShtYXRyaXgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMubWF0cml4ID0gbWF0cml4O1xuICAgICAgICBfdGhpcy5yZW5kZXJlZFJvd3NDaGFuZ2VkQ2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7IH07XG4gICAgICAgIF90aGlzLmhhc0FjdGlvbkNlbGxJblJvd3NWYWx1ZXMgPSB7fTtcbiAgICAgICAgX3RoaXMuYnVpbGQoKTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkVGFibGUucHJvdG90eXBlLCBcInNob3dUYWJsZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInNob3dUYWJsZVwiLCB0cnVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRUYWJsZS5wcm90b3R5cGUsIFwic2hvd0hlYWRlclwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInNob3dIZWFkZXJcIik7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkVGFibGUucHJvdG90eXBlLCBcInNob3dBZGRSb3dcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzaG93QWRkUm93XCIsIGZhbHNlKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRUYWJsZS5wcm90b3R5cGUsIFwic2hvd0FkZFJvd09uVG9wXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic2hvd0FkZFJvd09uVG9wXCIsIGZhbHNlKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRUYWJsZS5wcm90b3R5cGUsIFwic2hvd0FkZFJvd09uQm90dG9tXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic2hvd0FkZFJvd09uQm90dG9tXCIsIGZhbHNlKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRUYWJsZS5wcm90b3R5cGUsIFwic2hvd0Zvb3RlclwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubWF0cml4Lmhhc0Zvb3RlciAmJiB0aGlzLm1hdHJpeC5pc0NvbHVtbkxheW91dEhvcml6b250YWw7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkVGFibGUucHJvdG90eXBlLCBcImhhc0Zvb3RlclwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuICEhdGhpcy5mb290ZXJSb3c7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkVGFibGUucHJvdG90eXBlLCBcImhhc1JlbW92ZVJvd3NcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmhhc1JlbW92ZVJvd3NWYWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFRhYmxlLnByb3RvdHlwZS5pc1JlcXVpcmVSZXNldCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLmhhc1JlbW92ZVJvd3MgIT0gdGhpcy5tYXRyaXguY2FuUmVtb3ZlUm93cyB8fFxuICAgICAgICAgICAgIXRoaXMubWF0cml4LmlzQ29sdW1uTGF5b3V0SG9yaXpvbnRhbCk7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkVGFibGUucHJvdG90eXBlLCBcImhlYWRlclJvd1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGVhZGVyUm93VmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkVGFibGUucHJvdG90eXBlLCBcImZvb3RlclJvd1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZm9vdGVyUm93VmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkVGFibGUucHJvdG90eXBlLCBcImFsbG93Um93c0RyYWdBbmREcm9wXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tYXRyaXguYWxsb3dSb3dzRHJhZ0FuZERyb3AgJiYgdGhpcy5tYXRyaXguaXNDb2x1bW5MYXlvdXRIb3Jpem9udGFsO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFRhYmxlLnByb3RvdHlwZSwgXCJzaG93Q2VsbEVycm9yc1RvcFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgLy90b2RvXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tYXRyaXguZ2V0RXJyb3JMb2NhdGlvbigpID09PSBcInRvcFwiO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFRhYmxlLnByb3RvdHlwZSwgXCJzaG93Q2VsbEVycm9yc0JvdHRvbVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgLy90b2RvXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tYXRyaXguZ2V0RXJyb3JMb2NhdGlvbigpID09PSBcImJvdHRvbVwiO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkVGFibGUucHJvdG90eXBlLmJ1aWxkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmhhc1JlbW92ZVJvd3NWYWx1ZSA9IHRoaXMubWF0cml4LmNhblJlbW92ZVJvd3M7XG4gICAgICAgIC8vYnVpbGQgcm93cyBub3dcbiAgICAgICAgdmFyIHJvd3MgPSB0aGlzLm1hdHJpeC52aXNpYmxlUm93cztcbiAgICAgICAgdGhpcy5jc3NDbGFzc2VzID0gdGhpcy5tYXRyaXguY3NzQ2xhc3NlcztcbiAgICAgICAgdGhpcy5idWlsZFJvd3NBY3Rpb25zKCk7XG4gICAgICAgIHRoaXMuYnVpbGRIZWFkZXIoKTtcbiAgICAgICAgdGhpcy5idWlsZFJvd3MoKTtcbiAgICAgICAgdGhpcy5idWlsZEZvb3RlcigpO1xuICAgICAgICB0aGlzLnVwZGF0ZVNob3dUYWJsZUFuZEFkZFJvdygpO1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkVGFibGUucHJvdG90eXBlLnVwZGF0ZVNob3dUYWJsZUFuZEFkZFJvdyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHNob3dUYWJsZSA9IHRoaXMucm93cy5sZW5ndGggPiAwIHx8XG4gICAgICAgICAgICB0aGlzLm1hdHJpeC5pc0Rlc2lnbk1vZGUgfHxcbiAgICAgICAgICAgICF0aGlzLm1hdHJpeC5nZXRTaG93Q29sdW1uc0lmRW1wdHkoKTtcbiAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwic2hvd1RhYmxlXCIsIHNob3dUYWJsZSk7XG4gICAgICAgIHZhciBzaG93QWRkUm93ID0gdGhpcy5tYXRyaXguY2FuQWRkUm93ICYmIHNob3dUYWJsZTtcbiAgICAgICAgdmFyIHNob3dBZGRSb3dPblRvcCA9IHNob3dBZGRSb3c7XG4gICAgICAgIHZhciBzaG93QWRkUm93T25Cb3R0b20gPSBzaG93QWRkUm93O1xuICAgICAgICBpZiAoc2hvd0FkZFJvd09uVG9wKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5tYXRyaXguZ2V0QWRkUm93TG9jYXRpb24oKSA9PT0gXCJkZWZhdWx0XCIpIHtcbiAgICAgICAgICAgICAgICBzaG93QWRkUm93T25Ub3AgPSAhdGhpcy5tYXRyaXguaXNDb2x1bW5MYXlvdXRIb3Jpem9udGFsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgc2hvd0FkZFJvd09uVG9wID0gdGhpcy5tYXRyaXguZ2V0QWRkUm93TG9jYXRpb24oKSAhPT0gXCJib3R0b21cIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoc2hvd0FkZFJvd09uQm90dG9tICYmIHRoaXMubWF0cml4LmdldEFkZFJvd0xvY2F0aW9uKCkgIT09IFwidG9wQm90dG9tXCIpIHtcbiAgICAgICAgICAgIHNob3dBZGRSb3dPbkJvdHRvbSA9ICFzaG93QWRkUm93T25Ub3A7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwic2hvd0FkZFJvd1wiLCB0aGlzLm1hdHJpeC5jYW5BZGRSb3cpO1xuICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzaG93QWRkUm93T25Ub3BcIiwgc2hvd0FkZFJvd09uVG9wKTtcbiAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwic2hvd0FkZFJvd09uQm90dG9tXCIsIHNob3dBZGRSb3dPbkJvdHRvbSk7XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRUYWJsZS5wcm90b3R5cGUub25BZGRlZFJvdyA9IGZ1bmN0aW9uIChyb3csIGluZGV4KSB7XG4gICAgICAgIGlmICh0aGlzLmdldFJlbmRlcmVkRGF0YVJvd0NvdW50KCkgPj0gdGhpcy5tYXRyaXgudmlzaWJsZVJvd3MubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIgcm93SW5kZXggPSB0aGlzLmdldFJlbmRlcmVkUm93SW5kZXhCeUluZGV4KGluZGV4KTtcbiAgICAgICAgdGhpcy5yb3dzQWN0aW9ucy5zcGxpY2UoaW5kZXgsIDAsIHRoaXMuYnVpbGRSb3dBY3Rpb25zKHJvdykpO1xuICAgICAgICB0aGlzLmFkZEhvcml6b250YWxSb3codGhpcy5yb3dzLCByb3csIHRoaXMubWF0cml4LnZpc2libGVSb3dzLmxlbmd0aCA9PSAxICYmICF0aGlzLm1hdHJpeC5zaG93SGVhZGVyLCByb3dJbmRleCk7XG4gICAgICAgIHRoaXMudXBkYXRlU2hvd1RhYmxlQW5kQWRkUm93KCk7XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRUYWJsZS5wcm90b3R5cGUuZ2V0UmVuZGVyZWRSb3dJbmRleEJ5SW5kZXggPSBmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgdmFyIHJlcyA9IDA7XG4gICAgICAgIHZhciBkYXRhUm93SW5kZXggPSAwO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGRhdGFSb3dJbmRleCA9PT0gaW5kZXgpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5yb3dzW2ldLmlzRXJyb3JzUm93IHx8IHRoaXMucm93c1tpXS5pc0RldGFpbFJvdylcbiAgICAgICAgICAgICAgICAgICAgcmVzKys7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXMrKztcbiAgICAgICAgICAgIGlmICghKHRoaXMucm93c1tpXS5pc0Vycm9yc1JvdykgJiYgIXRoaXMucm93c1tpXS5pc0RldGFpbFJvdylcbiAgICAgICAgICAgICAgICBkYXRhUm93SW5kZXgrKztcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF0YVJvd0luZGV4IDwgaW5kZXgpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yb3dzLmxlbmd0aDtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFRhYmxlLnByb3RvdHlwZS5nZXRSZW5kZXJlZERhdGFSb3dDb3VudCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHJlcyA9IDA7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5yb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoISh0aGlzLnJvd3NbaV0uaXNFcnJvcnNSb3cpICYmICF0aGlzLnJvd3NbaV0uaXNEZXRhaWxSb3cpXG4gICAgICAgICAgICAgICAgcmVzKys7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFRhYmxlLnByb3RvdHlwZS5vblJlbW92ZWRSb3cgPSBmdW5jdGlvbiAocm93KSB7XG4gICAgICAgIHZhciByb3dJbmRleCA9IHRoaXMuZ2V0UmVuZGVyZWRSb3dJbmRleChyb3cpO1xuICAgICAgICBpZiAocm93SW5kZXggPCAwKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLnJvd3NBY3Rpb25zLnNwbGljZShyb3dJbmRleCwgMSk7XG4gICAgICAgIHZhciByZW1vdmVDb3VudCA9IDE7XG4gICAgICAgIGlmIChyb3dJbmRleCA8IHRoaXMucm93cy5sZW5ndGggLSAxICYmIHRoaXMuc2hvd0NlbGxFcnJvcnNCb3R0b20gJiZcbiAgICAgICAgICAgIHRoaXMucm93c1tyb3dJbmRleCArIDFdLmlzRXJyb3JzUm93KSB7XG4gICAgICAgICAgICByZW1vdmVDb3VudCsrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyb3dJbmRleCA8IHRoaXMucm93cy5sZW5ndGggLSAxICYmXG4gICAgICAgICAgICAodGhpcy5yb3dzW3Jvd0luZGV4ICsgMV0uaXNEZXRhaWxSb3cgfHxcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dDZWxsRXJyb3JzQm90dG9tICYmIHJvd0luZGV4ICsgMSA8IHRoaXMucm93cy5sZW5ndGggLSAxICYmIHRoaXMucm93c1tyb3dJbmRleCArIDJdLmlzRGV0YWlsUm93KSkge1xuICAgICAgICAgICAgcmVtb3ZlQ291bnQrKztcbiAgICAgICAgfVxuICAgICAgICBpZiAocm93SW5kZXggPiAwICYmIHRoaXMuc2hvd0NlbGxFcnJvcnNUb3AgJiYgdGhpcy5yb3dzW3Jvd0luZGV4IC0gMV0uaXNFcnJvcnNSb3cpIHtcbiAgICAgICAgICAgIHJvd0luZGV4LS07XG4gICAgICAgICAgICByZW1vdmVDb3VudCsrO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucm93cy5zcGxpY2Uocm93SW5kZXgsIHJlbW92ZUNvdW50KTtcbiAgICAgICAgdGhpcy51cGRhdGVTaG93VGFibGVBbmRBZGRSb3coKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFRhYmxlLnByb3RvdHlwZS5vbkRldGFpbFBhbmVsQ2hhbmdlVmlzaWJpbGl0eSA9IGZ1bmN0aW9uIChyb3csIGlzU2hvd2luZykge1xuICAgICAgICB2YXIgcm93SW5kZXggPSB0aGlzLmdldFJlbmRlcmVkUm93SW5kZXgocm93KTtcbiAgICAgICAgaWYgKHJvd0luZGV4IDwgMClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIGN1cnJlbnRJbmRleCA9IHJvd0luZGV4O1xuICAgICAgICBpZiAodGhpcy5zaG93Q2VsbEVycm9yc0JvdHRvbSlcbiAgICAgICAgICAgIGN1cnJlbnRJbmRleCsrO1xuICAgICAgICB2YXIgcGFuZWxSb3dJbmRleCA9IGN1cnJlbnRJbmRleCA8IHRoaXMucm93cy5sZW5ndGggLSAxICYmIHRoaXMucm93c1tjdXJyZW50SW5kZXggKyAxXS5pc0RldGFpbFJvd1xuICAgICAgICAgICAgPyBjdXJyZW50SW5kZXggKyAxXG4gICAgICAgICAgICA6IC0xO1xuICAgICAgICBpZiAoKGlzU2hvd2luZyAmJiBwYW5lbFJvd0luZGV4ID4gLTEpIHx8ICghaXNTaG93aW5nICYmIHBhbmVsUm93SW5kZXggPCAwKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKGlzU2hvd2luZykge1xuICAgICAgICAgICAgdmFyIGRldGFpbFJvdyA9IHRoaXMuY3JlYXRlRGV0YWlsUGFuZWxSb3cocm93LCB0aGlzLnJvd3Nbcm93SW5kZXhdKTtcbiAgICAgICAgICAgIHRoaXMucm93cy5zcGxpY2UoY3VycmVudEluZGV4ICsgMSwgMCwgZGV0YWlsUm93KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucm93cy5zcGxpY2UocGFuZWxSb3dJbmRleCwgMSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFRhYmxlLnByb3RvdHlwZS5nZXRSZW5kZXJlZFJvd0luZGV4ID0gZnVuY3Rpb24gKHJvdykge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRoaXMucm93c1tpXS5yb3cgPT0gcm93KVxuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFRhYmxlLnByb3RvdHlwZS5idWlsZFJvd3NBY3Rpb25zID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnJvd3NBY3Rpb25zID0gW107XG4gICAgICAgIHZhciByb3dzID0gdGhpcy5tYXRyaXgudmlzaWJsZVJvd3M7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5yb3dzQWN0aW9ucy5wdXNoKHRoaXMuYnVpbGRSb3dBY3Rpb25zKHJvd3NbaV0pKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkVGFibGUucHJvdG90eXBlLmNyZWF0ZVJlbmRlcmVkUm93ID0gZnVuY3Rpb24gKGNzc0NsYXNzZXMsIGlzRGV0YWlsUm93KSB7XG4gICAgICAgIGlmIChpc0RldGFpbFJvdyA9PT0gdm9pZCAwKSB7IGlzRGV0YWlsUm93ID0gZmFsc2U7IH1cbiAgICAgICAgcmV0dXJuIG5ldyBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3coY3NzQ2xhc3NlcywgaXNEZXRhaWxSb3cpO1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkVGFibGUucHJvdG90eXBlLmNyZWF0ZUVycm9yUmVuZGVyZWRSb3cgPSBmdW5jdGlvbiAoY3NzQ2xhc3Nlcykge1xuICAgICAgICByZXR1cm4gbmV3IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZEVycm9yUm93KGNzc0NsYXNzZXMpO1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkVGFibGUucHJvdG90eXBlLmJ1aWxkSGVhZGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgY29sSGVhZGVycyA9IHRoaXMubWF0cml4LmlzQ29sdW1uTGF5b3V0SG9yaXpvbnRhbCAmJiB0aGlzLm1hdHJpeC5zaG93SGVhZGVyO1xuICAgICAgICB2YXIgaXNTaG93biA9IGNvbEhlYWRlcnMgfHxcbiAgICAgICAgICAgICh0aGlzLm1hdHJpeC5oYXNSb3dUZXh0ICYmICF0aGlzLm1hdHJpeC5pc0NvbHVtbkxheW91dEhvcml6b250YWwpO1xuICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzaG93SGVhZGVyXCIsIGlzU2hvd24pO1xuICAgICAgICBpZiAoIWlzU2hvd24pXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMuaGVhZGVyUm93VmFsdWUgPSB0aGlzLmNyZWF0ZVJlbmRlcmVkUm93KHRoaXMuY3NzQ2xhc3Nlcyk7XG4gICAgICAgIGlmICh0aGlzLmFsbG93Um93c0RyYWdBbmREcm9wKSB7XG4gICAgICAgICAgICB0aGlzLmhlYWRlclJvdy5jZWxscy5wdXNoKHRoaXMuY3JlYXRlSGVhZGVyQ2VsbChudWxsLCBcImFjdGlvblwiKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaGFzQWN0aW9uQ2VsbEluUm93cyhcInN0YXJ0XCIpKSB7XG4gICAgICAgICAgICB0aGlzLmhlYWRlclJvdy5jZWxscy5wdXNoKHRoaXMuY3JlYXRlSGVhZGVyQ2VsbChudWxsLCBcImFjdGlvblwiKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubWF0cml4Lmhhc1Jvd1RleHQgJiYgdGhpcy5tYXRyaXguc2hvd0hlYWRlcikge1xuICAgICAgICAgICAgdGhpcy5oZWFkZXJSb3cuY2VsbHMucHVzaCh0aGlzLmNyZWF0ZUhlYWRlckNlbGwobnVsbCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm1hdHJpeC5pc0NvbHVtbkxheW91dEhvcml6b250YWwpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5tYXRyaXgudmlzaWJsZUNvbHVtbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgY29sdW1uID0gdGhpcy5tYXRyaXgudmlzaWJsZUNvbHVtbnNbaV07XG4gICAgICAgICAgICAgICAgaWYgKCFjb2x1bW4uaXNDb2x1bW5WaXNpYmxlKVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXRyaXguSXNNdWx0aXBseUNvbHVtbihjb2x1bW4pKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlTXV0bGlwbGVDb2x1bW5zSGVhZGVyKGNvbHVtbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhlYWRlclJvdy5jZWxscy5wdXNoKHRoaXMuY3JlYXRlSGVhZGVyQ2VsbChjb2x1bW4pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgcm93cyA9IHRoaXMubWF0cml4LnZpc2libGVSb3dzO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNlbGwgPSB0aGlzLmNyZWF0ZVRleHRDZWxsKHJvd3NbaV0ubG9jVGV4dCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRIZWFkZXJDZWxsQ3NzQ2xhc3NlcyhjZWxsKTtcbiAgICAgICAgICAgICAgICBjZWxsLnJvdyA9IHJvd3NbaV07XG4gICAgICAgICAgICAgICAgdGhpcy5oZWFkZXJSb3cuY2VsbHMucHVzaChjZWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLm1hdHJpeC5oYXNGb290ZXIpIHtcbiAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IHRoaXMuY3JlYXRlVGV4dENlbGwodGhpcy5tYXRyaXguZ2V0Rm9vdGVyVGV4dCgpKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEhlYWRlckNlbGxDc3NDbGFzc2VzKGNlbGwpO1xuICAgICAgICAgICAgICAgIHRoaXMuaGVhZGVyUm93LmNlbGxzLnB1c2goY2VsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaGFzQWN0aW9uQ2VsbEluUm93cyhcImVuZFwiKSkge1xuICAgICAgICAgICAgdGhpcy5oZWFkZXJSb3cuY2VsbHMucHVzaCh0aGlzLmNyZWF0ZUhlYWRlckNlbGwobnVsbCwgXCJhY3Rpb25cIikpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRUYWJsZS5wcm90b3R5cGUuYnVpbGRGb290ZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5zaG93Rm9vdGVyKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLmZvb3RlclJvd1ZhbHVlID0gdGhpcy5jcmVhdGVSZW5kZXJlZFJvdyh0aGlzLmNzc0NsYXNzZXMpO1xuICAgICAgICBpZiAodGhpcy5hbGxvd1Jvd3NEcmFnQW5kRHJvcCkge1xuICAgICAgICAgICAgdGhpcy5mb290ZXJSb3cuY2VsbHMucHVzaCh0aGlzLmNyZWF0ZUhlYWRlckNlbGwobnVsbCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmhhc0FjdGlvbkNlbGxJblJvd3MoXCJzdGFydFwiKSkge1xuICAgICAgICAgICAgdGhpcy5mb290ZXJSb3cuY2VsbHMucHVzaCh0aGlzLmNyZWF0ZUhlYWRlckNlbGwobnVsbCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm1hdHJpeC5oYXNSb3dUZXh0KSB7XG4gICAgICAgICAgICB0aGlzLmZvb3RlclJvdy5jZWxscy5wdXNoKHRoaXMuY3JlYXRlVGV4dENlbGwodGhpcy5tYXRyaXguZ2V0Rm9vdGVyVGV4dCgpKSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNlbGxzID0gdGhpcy5tYXRyaXgudmlzaWJsZVRvdGFsUm93LmNlbGxzO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNlbGxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgY2VsbCA9IGNlbGxzW2ldO1xuICAgICAgICAgICAgaWYgKCFjZWxsLmNvbHVtbi5pc0NvbHVtblZpc2libGUpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBpZiAodGhpcy5tYXRyaXguSXNNdWx0aXBseUNvbHVtbihjZWxsLmNvbHVtbikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZU11dGxpcGxlQ29sdW1uc0Zvb3Rlcih0aGlzLmZvb3RlclJvdywgY2VsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgZWRpdENlbGwgPSB0aGlzLmNyZWF0ZUVkaXRDZWxsKGNlbGwpO1xuICAgICAgICAgICAgICAgIGlmIChjZWxsLmNvbHVtbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEhlYWRlckNlbGxXaWR0aChjZWxsLmNvbHVtbiwgZWRpdENlbGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmZvb3RlclJvdy5jZWxscy5wdXNoKGVkaXRDZWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5oYXNBY3Rpb25DZWxsSW5Sb3dzKFwiZW5kXCIpKSB7XG4gICAgICAgICAgICB0aGlzLmZvb3RlclJvdy5jZWxscy5wdXNoKHRoaXMuY3JlYXRlSGVhZGVyQ2VsbChudWxsKSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFRhYmxlLnByb3RvdHlwZS5idWlsZFJvd3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciByb3dzID0gdGhpcy5tYXRyaXguaXNDb2x1bW5MYXlvdXRIb3Jpem9udGFsXG4gICAgICAgICAgICA/IHRoaXMuYnVpbGRIb3Jpem9udGFsUm93cygpXG4gICAgICAgICAgICA6IHRoaXMuYnVpbGRWZXJ0aWNhbFJvd3MoKTtcbiAgICAgICAgdGhpcy5yb3dzID0gcm93cztcbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFRhYmxlLnByb3RvdHlwZS5oYXNBY3Rpb25DZWxsSW5Sb3dzID0gZnVuY3Rpb24gKGxvY2F0aW9uKSB7XG4gICAgICAgIGlmICh0aGlzLmhhc0FjdGlvbkNlbGxJblJvd3NWYWx1ZXNbbG9jYXRpb25dID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuaGFzQWN0aW9uQ2VsbEluUm93c1ZhbHVlc1tsb2NhdGlvbl0gPSB0aGlzLmhhc0FjdGlvbnNDZWxsSW5Mb2NhbHRpb24obG9jYXRpb24pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmhhc0FjdGlvbkNlbGxJblJvd3NWYWx1ZXNbbG9jYXRpb25dO1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkVGFibGUucHJvdG90eXBlLmhhc0FjdGlvbnNDZWxsSW5Mb2NhbHRpb24gPSBmdW5jdGlvbiAobG9jYXRpb24pIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgaWYgKGxvY2F0aW9uID09IFwiZW5kXCIgJiYgdGhpcy5oYXNSZW1vdmVSb3dzKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzLm1hdHJpeC52aXNpYmxlUm93cy5zb21lKGZ1bmN0aW9uIChyb3csIGluZGV4KSB7IHJldHVybiAhX3RoaXMuaXNWYWx1ZUVtcHR5KF90aGlzLmdldFJvd0FjdGlvbnMoaW5kZXgsIGxvY2F0aW9uKSk7IH0pO1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkVGFibGUucHJvdG90eXBlLmNhblJlbW92ZVJvdyA9IGZ1bmN0aW9uIChyb3cpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWF0cml4LmNhblJlbW92ZVJvdyhyb3cpO1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkVGFibGUucHJvdG90eXBlLmJ1aWxkSG9yaXpvbnRhbFJvd3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciByb3dzID0gdGhpcy5tYXRyaXgudmlzaWJsZVJvd3M7XG4gICAgICAgIHZhciByZW5kZXJlZFJvd3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLmFkZEhvcml6b250YWxSb3cocmVuZGVyZWRSb3dzLCByb3dzW2ldLCBpID09IDAgJiYgIXRoaXMubWF0cml4LnNob3dIZWFkZXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZW5kZXJlZFJvd3M7XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRUYWJsZS5wcm90b3R5cGUuYWRkSG9yaXpvbnRhbFJvdyA9IGZ1bmN0aW9uIChyZW5kZXJlZFJvd3MsIHJvdywgdXNlQXNIZWFkZXIsIGluZGV4KSB7XG4gICAgICAgIGlmIChpbmRleCA9PT0gdm9pZCAwKSB7IGluZGV4ID0gLTE7IH1cbiAgICAgICAgdmFyIHJlbmRlcmVkUm93ID0gdGhpcy5jcmVhdGVIb3Jpem9udGFsUm93KHJvdywgdXNlQXNIZWFkZXIpO1xuICAgICAgICB2YXIgZXJyb3JSb3cgPSB0aGlzLmNyZWF0ZUVycm9yUm93KHJlbmRlcmVkUm93KTtcbiAgICAgICAgcmVuZGVyZWRSb3cucm93ID0gcm93O1xuICAgICAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICAgICAgICBpbmRleCA9IHJlbmRlcmVkUm93cy5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubWF0cml4LmlzTW9iaWxlKSB7XG4gICAgICAgICAgICB2YXIgY2VsbHMgPSBbXTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVuZGVyZWRSb3cuY2VsbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zaG93Q2VsbEVycm9yc1RvcCAmJiAhZXJyb3JSb3cuY2VsbHNbaV0uaXNFbXB0eSkge1xuICAgICAgICAgICAgICAgICAgICBjZWxscy5wdXNoKGVycm9yUm93LmNlbGxzW2ldKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2VsbHMucHVzaChyZW5kZXJlZFJvdy5jZWxsc1tpXSk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2hvd0NlbGxFcnJvcnNCb3R0b20gJiYgIWVycm9yUm93LmNlbGxzW2ldLmlzRW1wdHkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2VsbHMucHVzaChlcnJvclJvdy5jZWxsc1tpXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVuZGVyZWRSb3cuY2VsbHMgPSBjZWxscztcbiAgICAgICAgICAgIHJlbmRlcmVkUm93cy5zcGxpY2UoaW5kZXgsIDAsIHJlbmRlcmVkUm93KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlbmRlcmVkUm93cy5zcGxpY2UuYXBwbHkocmVuZGVyZWRSb3dzLCBfX3NwcmVhZEFycmF5KFtpbmRleCwgMF0sICh0aGlzLnNob3dDZWxsRXJyb3JzVG9wID8gW2Vycm9yUm93LCByZW5kZXJlZFJvd10gOiBbcmVuZGVyZWRSb3csIGVycm9yUm93XSkpKTtcbiAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJvdy5pc0RldGFpbFBhbmVsU2hvd2luZykge1xuICAgICAgICAgICAgcmVuZGVyZWRSb3dzLnNwbGljZShpbmRleCArIDEsIDAsIHRoaXMuY3JlYXRlRGV0YWlsUGFuZWxSb3cocm93LCByZW5kZXJlZFJvdykpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRUYWJsZS5wcm90b3R5cGUuZ2V0Um93RHJhZ0NlbGwgPSBmdW5jdGlvbiAocm93SW5kZXgpIHtcbiAgICAgICAgdmFyIGNlbGwgPSBuZXcgUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkQ2VsbCgpO1xuICAgICAgICBjZWxsLmlzRHJhZ0hhbmRsZXJDZWxsID0gdHJ1ZTtcbiAgICAgICAgY2VsbC5jbGFzc05hbWUgPSB0aGlzLmdldEFjdGlvbnNDZWxsQ2xhc3NOYW1lKGNlbGwpO1xuICAgICAgICBjZWxsLnJvdyA9IHRoaXMubWF0cml4LnZpc2libGVSb3dzW3Jvd0luZGV4XTtcbiAgICAgICAgcmV0dXJuIGNlbGw7XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRUYWJsZS5wcm90b3R5cGUuZ2V0QWN0aW9uc0NlbGxDbGFzc05hbWUgPSBmdW5jdGlvbiAoY2VsbCkge1xuICAgICAgICBpZiAoY2VsbCA9PT0gdm9pZCAwKSB7IGNlbGwgPSBudWxsOyB9XG4gICAgICAgIHJldHVybiBuZXcgX3V0aWxzX2Nzc0NsYXNzQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fW1wiQ3NzQ2xhc3NCdWlsZGVyXCJdKCkuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5hY3Rpb25zQ2VsbCkuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5hY3Rpb25zQ2VsbERyYWcsIGNlbGwgPT09IG51bGwgfHwgY2VsbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogY2VsbC5pc0RyYWdIYW5kbGVyQ2VsbCkuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy52ZXJ0aWNhbENlbGwsICF0aGlzLm1hdHJpeC5pc0NvbHVtbkxheW91dEhvcml6b250YWwpLnRvU3RyaW5nKCk7XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRUYWJsZS5wcm90b3R5cGUuZ2V0Um93QWN0aW9uc0NlbGwgPSBmdW5jdGlvbiAocm93SW5kZXgsIGxvY2F0aW9uKSB7XG4gICAgICAgIHZhciByb3dBY3Rpb25zID0gdGhpcy5nZXRSb3dBY3Rpb25zKHJvd0luZGV4LCBsb2NhdGlvbik7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbHVlRW1wdHkocm93QWN0aW9ucykpIHtcbiAgICAgICAgICAgIHZhciBjZWxsID0gbmV3IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwoKTtcbiAgICAgICAgICAgIHZhciBhY3Rpb25Db250YWluZXIgPSB0aGlzLm1hdHJpeC5hbGxvd0FkYXB0aXZlQWN0aW9ucyA/IG5ldyBfYWN0aW9uc19hZGFwdGl2ZV9jb250YWluZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1tcIkFkYXB0aXZlQWN0aW9uQ29udGFpbmVyXCJdKCkgOiBuZXcgX2FjdGlvbnNfY29udGFpbmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bXCJBY3Rpb25Db250YWluZXJcIl0oKTtcbiAgICAgICAgICAgIGlmICghIXRoaXMubWF0cml4LnN1cnZleSAmJiB0aGlzLm1hdHJpeC5zdXJ2ZXkuZ2V0Q3NzKCkuYWN0aW9uQmFyKSB7XG4gICAgICAgICAgICAgICAgYWN0aW9uQ29udGFpbmVyLmNzc0NsYXNzZXMgPSB0aGlzLm1hdHJpeC5zdXJ2ZXkuZ2V0Q3NzKCkuYWN0aW9uQmFyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYWN0aW9uQ29udGFpbmVyLnNldEl0ZW1zKHJvd0FjdGlvbnMpO1xuICAgICAgICAgICAgdmFyIGl0ZW1WYWx1ZSA9IG5ldyBfaXRlbXZhbHVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJJdGVtVmFsdWVcIl0oYWN0aW9uQ29udGFpbmVyKTtcbiAgICAgICAgICAgIGNlbGwuaXRlbSA9IGl0ZW1WYWx1ZTtcbiAgICAgICAgICAgIGNlbGwuaXNBY3Rpb25zQ2VsbCA9IHRydWU7XG4gICAgICAgICAgICBjZWxsLmlzRHJhZ0hhbmRsZXJDZWxsID0gZmFsc2U7XG4gICAgICAgICAgICBjZWxsLmNsYXNzTmFtZSA9IHRoaXMuZ2V0QWN0aW9uc0NlbGxDbGFzc05hbWUoY2VsbCk7XG4gICAgICAgICAgICBjZWxsLnJvdyA9IHRoaXMubWF0cml4LnZpc2libGVSb3dzW3Jvd0luZGV4XTtcbiAgICAgICAgICAgIHJldHVybiBjZWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkVGFibGUucHJvdG90eXBlLmdldFJvd0FjdGlvbnMgPSBmdW5jdGlvbiAocm93SW5kZXgsIGxvY2F0aW9uKSB7XG4gICAgICAgIHZhciBhY3Rpb25zID0gdGhpcy5yb3dzQWN0aW9uc1tyb3dJbmRleF07XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShhY3Rpb25zKSlcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgcmV0dXJuIGFjdGlvbnMuZmlsdGVyKGZ1bmN0aW9uIChhY3Rpb24pIHtcbiAgICAgICAgICAgIGlmICghYWN0aW9uLmxvY2F0aW9uKSB7XG4gICAgICAgICAgICAgICAgYWN0aW9uLmxvY2F0aW9uID0gXCJzdGFydFwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGFjdGlvbi5sb2NhdGlvbiA9PT0gbG9jYXRpb247XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkVGFibGUucHJvdG90eXBlLmJ1aWxkUm93QWN0aW9ucyA9IGZ1bmN0aW9uIChyb3cpIHtcbiAgICAgICAgdmFyIGFjdGlvbnMgPSBbXTtcbiAgICAgICAgdGhpcy5zZXREZWZhdWx0Um93QWN0aW9ucyhyb3csIGFjdGlvbnMpO1xuICAgICAgICBpZiAoISF0aGlzLm1hdHJpeC5zdXJ2ZXkpIHtcbiAgICAgICAgICAgIGFjdGlvbnMgPSB0aGlzLm1hdHJpeC5zdXJ2ZXkuZ2V0VXBkYXRlZE1hdHJpeFJvd0FjdGlvbnModGhpcy5tYXRyaXgsIHJvdywgYWN0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjdGlvbnM7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkVGFibGUucHJvdG90eXBlLCBcInNob3dSZW1vdmVCdXR0b25Bc0ljb25cIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAoX3NldHRpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bXCJzZXR0aW5nc1wiXS5tYXRyaXgucmVuZGVyUmVtb3ZlQXNJY29uICYmIHRoaXMubWF0cml4LnN1cnZleSAmJiB0aGlzLm1hdHJpeC5zdXJ2ZXkuY3NzLnJvb3QgPT09IFwic2Qtcm9vdC1tb2Rlcm5cIik7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRUYWJsZS5wcm90b3R5cGUuc2V0RGVmYXVsdFJvd0FjdGlvbnMgPSBmdW5jdGlvbiAocm93LCBhY3Rpb25zKSB7XG4gICAgICAgIHZhciBtYXRyaXggPSB0aGlzLm1hdHJpeDtcbiAgICAgICAgaWYgKHRoaXMuaGFzUmVtb3ZlUm93cyAmJiB0aGlzLmNhblJlbW92ZVJvdyhyb3cpKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuc2hvd1JlbW92ZUJ1dHRvbkFzSWNvbikge1xuICAgICAgICAgICAgICAgIGFjdGlvbnMucHVzaChuZXcgX2FjdGlvbnNfYWN0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJBY3Rpb25cIl0oe1xuICAgICAgICAgICAgICAgICAgICBpZDogXCJyZW1vdmUtcm93XCIsXG4gICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uOiBcImVuZFwiLFxuICAgICAgICAgICAgICAgICAgICBlbmFibGVkOiAhdGhpcy5tYXRyaXguaXNJbnB1dFJlYWRPbmx5LFxuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQ6IFwic3YtbWF0cml4LXJlbW92ZS1idXR0b25cIixcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogeyByb3c6IHJvdywgcXVlc3Rpb246IHRoaXMubWF0cml4IH0sXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYWN0aW9ucy5wdXNoKG5ldyBfYWN0aW9uc19hY3Rpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcIkFjdGlvblwiXSh7XG4gICAgICAgICAgICAgICAgICAgIGlkOiBcInJlbW92ZS1yb3dcIixcbiAgICAgICAgICAgICAgICAgICAgaWNvbk5hbWU6IFwiaWNvbi1kZWxldGVcIixcbiAgICAgICAgICAgICAgICAgICAgaWNvblNpemU6IFwiYXV0b1wiLFxuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQ6IFwic3YtYWN0aW9uLWJhci1pdGVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGlubmVyQ3NzOiBuZXcgX3V0aWxzX2Nzc0NsYXNzQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fW1wiQ3NzQ2xhc3NCdWlsZGVyXCJdKCkuYXBwZW5kKHRoaXMubWF0cml4LmNzc0NsYXNzZXMuYnV0dG9uKS5hcHBlbmQodGhpcy5tYXRyaXguY3NzQ2xhc3Nlcy5idXR0b25SZW1vdmUpLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uOiBcImVuZFwiLFxuICAgICAgICAgICAgICAgICAgICBzaG93VGl0bGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogbWF0cml4LnJlbW92ZVJvd1RleHQsXG4gICAgICAgICAgICAgICAgICAgIGVuYWJsZWQ6ICFtYXRyaXguaXNJbnB1dFJlYWRPbmx5LFxuICAgICAgICAgICAgICAgICAgICBkYXRhOiB7IHJvdzogcm93LCBxdWVzdGlvbjogbWF0cml4IH0sXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWF0cml4LnJlbW92ZVJvd1VJKHJvdyk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChyb3cuaGFzUGFuZWwpIHtcbiAgICAgICAgICAgIGFjdGlvbnMucHVzaChuZXcgX2FjdGlvbnNfYWN0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJBY3Rpb25cIl0oe1xuICAgICAgICAgICAgICAgIGlkOiBcInNob3ctZGV0YWlsXCIsXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRoaXMubWF0cml4LmdldExvY2FsaXphdGlvblN0cmluZyhcImVkaXRUZXh0XCIpLFxuICAgICAgICAgICAgICAgIHNob3dUaXRsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgbG9jYXRpb246IFwic3RhcnRcIixcbiAgICAgICAgICAgICAgICBjb21wb25lbnQ6IFwic3YtbWF0cml4LWRldGFpbC1idXR0b25cIixcbiAgICAgICAgICAgICAgICBkYXRhOiB7IHJvdzogcm93LCBxdWVzdGlvbjogdGhpcy5tYXRyaXggfSxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkVGFibGUucHJvdG90eXBlLmNyZWF0ZUVycm9yUm93ID0gZnVuY3Rpb24gKHJvdykge1xuICAgICAgICB2YXIgcmVzID0gdGhpcy5jcmVhdGVFcnJvclJlbmRlcmVkUm93KHRoaXMuY3NzQ2xhc3Nlcyk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93LmNlbGxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgY2VsbCA9IHJvdy5jZWxsc1tpXTtcbiAgICAgICAgICAgIGlmICghY2VsbC5oYXNRdWVzdGlvbikge1xuICAgICAgICAgICAgICAgIHJlcy5jZWxscy5wdXNoKHRoaXMuY3JlYXRlRW1wdHlDZWxsKHRydWUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMubWF0cml4LklzTXVsdGlwbHlDb2x1bW4oY2VsbC5jZWxsLmNvbHVtbikpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2VsbC5pc0ZpcnN0Q2hvaWNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcy5jZWxscy5wdXNoKHRoaXMuY3JlYXRlRXJyb3JDZWxsKGNlbGwuY2VsbCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzLmNlbGxzLnB1c2godGhpcy5jcmVhdGVFbXB0eUNlbGwodHJ1ZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlcy5jZWxscy5wdXNoKHRoaXMuY3JlYXRlRXJyb3JDZWxsKGNlbGwuY2VsbCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlcy5vbkFmdGVyQ3JlYXRlZCgpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkVGFibGUucHJvdG90eXBlLmNyZWF0ZUhvcml6b250YWxSb3cgPSBmdW5jdGlvbiAocm93LCB1c2VBc0hlYWRlcikge1xuICAgICAgICB2YXIgcmVzID0gdGhpcy5jcmVhdGVSZW5kZXJlZFJvdyh0aGlzLmNzc0NsYXNzZXMpO1xuICAgICAgICBpZiAodGhpcy5hbGxvd1Jvd3NEcmFnQW5kRHJvcCkge1xuICAgICAgICAgICAgdmFyIHJvd0luZGV4ID0gdGhpcy5tYXRyaXgudmlzaWJsZVJvd3MuaW5kZXhPZihyb3cpO1xuICAgICAgICAgICAgcmVzLmNlbGxzLnB1c2godGhpcy5nZXRSb3dEcmFnQ2VsbChyb3dJbmRleCkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYWRkUm93QWN0aW9uc0NlbGwocm93LCByZXMsIFwic3RhcnRcIik7XG4gICAgICAgIGlmICh0aGlzLm1hdHJpeC5oYXNSb3dUZXh0KSB7XG4gICAgICAgICAgICB2YXIgcmVuZGVyZWRDZWxsID0gdGhpcy5jcmVhdGVUZXh0Q2VsbChyb3cubG9jVGV4dCk7XG4gICAgICAgICAgICByZW5kZXJlZENlbGwucm93ID0gcm93O1xuICAgICAgICAgICAgcmVzLmNlbGxzLnB1c2gocmVuZGVyZWRDZWxsKTtcbiAgICAgICAgICAgIGlmICh1c2VBc0hlYWRlcikge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0SGVhZGVyQ2VsbFdpZHRoKG51bGwsIHJlbmRlcmVkQ2VsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZW5kZXJlZENlbGwuY2xhc3NOYW1lID0gbmV3IF91dGlsc19jc3NDbGFzc0J1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1tcIkNzc0NsYXNzQnVpbGRlclwiXSgpXG4gICAgICAgICAgICAgICAgLmFwcGVuZChyZW5kZXJlZENlbGwuY2xhc3NOYW1lKVxuICAgICAgICAgICAgICAgIC5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLnJvd1RleHRDZWxsKVxuICAgICAgICAgICAgICAgIC5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLmNvbHVtblRpdGxlQ2VsbCwgIXRoaXMubWF0cml4LmlzQ29sdW1uTGF5b3V0SG9yaXpvbnRhbClcbiAgICAgICAgICAgICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5kZXRhaWxSb3dUZXh0LCByb3cuaGFzUGFuZWwpXG4gICAgICAgICAgICAgICAgLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3cuY2VsbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBjZWxsID0gcm93LmNlbGxzW2ldO1xuICAgICAgICAgICAgaWYgKCFjZWxsLmNvbHVtbi5pc0NvbHVtblZpc2libGUpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBpZiAodGhpcy5tYXRyaXguSXNNdWx0aXBseUNvbHVtbihjZWxsLmNvbHVtbikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZU11dGxpcGxlRWRpdENlbGxzKHJlcywgY2VsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoY2VsbC5jb2x1bW4uaXNTaG93SW5NdWx0aXBsZUNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgY2VsbC5xdWVzdGlvbi52aXNpYmxlQ2hvaWNlcy5tYXAoZnVuY3Rpb24gKGMpIHsgcmV0dXJuIGMuaGlkZUNhcHRpb24gPSBmYWxzZTsgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciByZW5kZXJlZENlbGwgPSB0aGlzLmNyZWF0ZUVkaXRDZWxsKGNlbGwpO1xuICAgICAgICAgICAgICAgIHJlcy5jZWxscy5wdXNoKHJlbmRlcmVkQ2VsbCk7XG4gICAgICAgICAgICAgICAgaWYgKHVzZUFzSGVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0SGVhZGVyQ2VsbFdpZHRoKGNlbGwuY29sdW1uLCByZW5kZXJlZENlbGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFkZFJvd0FjdGlvbnNDZWxsKHJvdywgcmVzLCBcImVuZFwiKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFRhYmxlLnByb3RvdHlwZS5hZGRSb3dBY3Rpb25zQ2VsbCA9IGZ1bmN0aW9uIChyb3csIHJlbmRlcmVkUm93LCBsb2NhdGlvbikge1xuICAgICAgICB2YXIgcm93SW5kZXggPSB0aGlzLm1hdHJpeC52aXNpYmxlUm93cy5pbmRleE9mKHJvdyk7XG4gICAgICAgIGlmICh0aGlzLmhhc0FjdGlvbkNlbGxJblJvd3MobG9jYXRpb24pKSB7XG4gICAgICAgICAgICB2YXIgYWN0aW9ucyA9IHRoaXMuZ2V0Um93QWN0aW9uc0NlbGwocm93SW5kZXgsIGxvY2F0aW9uKTtcbiAgICAgICAgICAgIGlmICghIWFjdGlvbnMpIHtcbiAgICAgICAgICAgICAgICByZW5kZXJlZFJvdy5jZWxscy5wdXNoKGFjdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkQ2VsbCgpO1xuICAgICAgICAgICAgICAgIGNlbGwuaXNFbXB0eSA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmVuZGVyZWRSb3cuY2VsbHMucHVzaChjZWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkVGFibGUucHJvdG90eXBlLmNyZWF0ZURldGFpbFBhbmVsUm93ID0gZnVuY3Rpb24gKHJvdywgcmVuZGVyZWRSb3cpIHtcbiAgICAgICAgdmFyIHBhbmVsRnVsbFdpZHRoID0gdGhpcy5tYXRyaXguaXNEZXNpZ25Nb2RlO1xuICAgICAgICB2YXIgcmVzID0gdGhpcy5jcmVhdGVSZW5kZXJlZFJvdyh0aGlzLmNzc0NsYXNzZXMsIHRydWUpO1xuICAgICAgICByZXMucm93ID0gcm93O1xuICAgICAgICB2YXIgYnV0dG9uQ2VsbCA9IG5ldyBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRDZWxsKCk7XG4gICAgICAgIGlmICh0aGlzLm1hdHJpeC5oYXNSb3dUZXh0KSB7XG4gICAgICAgICAgICBidXR0b25DZWxsLmNvbFNwYW5zID0gMjtcbiAgICAgICAgfVxuICAgICAgICBidXR0b25DZWxsLmlzRW1wdHkgPSB0cnVlO1xuICAgICAgICBpZiAoIXBhbmVsRnVsbFdpZHRoKVxuICAgICAgICAgICAgcmVzLmNlbGxzLnB1c2goYnV0dG9uQ2VsbCk7XG4gICAgICAgIHZhciBhY3Rpb25zQ2VsbCA9IG51bGw7XG4gICAgICAgIGlmICh0aGlzLmhhc0FjdGlvbkNlbGxJblJvd3MoXCJlbmRcIikpIHtcbiAgICAgICAgICAgIGFjdGlvbnNDZWxsID0gbmV3IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwoKTtcbiAgICAgICAgICAgIGFjdGlvbnNDZWxsLmlzRW1wdHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjZWxsID0gbmV3IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwoKTtcbiAgICAgICAgY2VsbC5wYW5lbCA9IHJvdy5kZXRhaWxQYW5lbDtcbiAgICAgICAgY2VsbC5jb2xTcGFucyA9XG4gICAgICAgICAgICByZW5kZXJlZFJvdy5jZWxscy5sZW5ndGggLVxuICAgICAgICAgICAgICAgICghcGFuZWxGdWxsV2lkdGggPyBidXR0b25DZWxsLmNvbFNwYW5zIDogMCkgLVxuICAgICAgICAgICAgICAgICghIWFjdGlvbnNDZWxsID8gYWN0aW9uc0NlbGwuY29sU3BhbnMgOiAwKTtcbiAgICAgICAgY2VsbC5jbGFzc05hbWUgPSB0aGlzLmNzc0NsYXNzZXMuZGV0YWlsUGFuZWxDZWxsO1xuICAgICAgICByZXMuY2VsbHMucHVzaChjZWxsKTtcbiAgICAgICAgaWYgKCEhYWN0aW9uc0NlbGwpIHtcbiAgICAgICAgICAgIHJlcy5jZWxscy5wdXNoKGFjdGlvbnNDZWxsKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWF0cml4Lm9uQ3JlYXRlRGV0YWlsUGFuZWxSZW5kZXJlZFJvd0NhbGxiYWNrID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHRoaXMubWF0cml4Lm9uQ3JlYXRlRGV0YWlsUGFuZWxSZW5kZXJlZFJvd0NhbGxiYWNrKHJlcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFRhYmxlLnByb3RvdHlwZS5idWlsZFZlcnRpY2FsUm93cyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGNvbHVtbnMgPSB0aGlzLm1hdHJpeC5jb2x1bW5zO1xuICAgICAgICB2YXIgcmVuZGVyZWRSb3dzID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29sdW1ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGNvbCA9IGNvbHVtbnNbaV07XG4gICAgICAgICAgICBpZiAoY29sLmlzQ29sdW1uVmlzaWJsZSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hdHJpeC5Jc011bHRpcGx5Q29sdW1uKGNvbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVNdXRsaXBsZVZlcnRpY2FsUm93cyhyZW5kZXJlZFJvd3MsIGNvbCwgaSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVuZGVyZWRSb3cgPSB0aGlzLmNyZWF0ZVZlcnRpY2FsUm93KGNvbCwgaSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBlcnJvclJvdyA9IHRoaXMuY3JlYXRlRXJyb3JSb3cocmVuZGVyZWRSb3cpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zaG93Q2VsbEVycm9yc1RvcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyZWRSb3dzLnB1c2goZXJyb3JSb3cpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyZWRSb3dzLnB1c2gocmVuZGVyZWRSb3cpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyZWRSb3dzLnB1c2gocmVuZGVyZWRSb3cpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyZWRSb3dzLnB1c2goZXJyb3JSb3cpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmhhc0FjdGlvbkNlbGxJblJvd3MoXCJlbmRcIikpIHtcbiAgICAgICAgICAgIHJlbmRlcmVkUm93cy5wdXNoKHRoaXMuY3JlYXRlRW5kVmVydGljYWxBY3Rpb25Sb3coKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlbmRlcmVkUm93cztcbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFRhYmxlLnByb3RvdHlwZS5jcmVhdGVNdXRsaXBsZVZlcnRpY2FsUm93cyA9IGZ1bmN0aW9uIChyZW5kZXJlZFJvd3MsIGNvbHVtbiwgaW5kZXgpIHtcbiAgICAgICAgdmFyIGNob2ljZXMgPSB0aGlzLmdldE11bHRpcGxlQ29sdW1uQ2hvaWNlcyhjb2x1bW4pO1xuICAgICAgICBpZiAoIWNob2ljZXMpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hvaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIHJlbmRlcmVkUm93ID0gdGhpcy5jcmVhdGVWZXJ0aWNhbFJvdyhjb2x1bW4sIGluZGV4LCBjaG9pY2VzW2ldLCBpKTtcbiAgICAgICAgICAgIHZhciBlcnJvclJvdyA9IHRoaXMuY3JlYXRlRXJyb3JSb3cocmVuZGVyZWRSb3cpO1xuICAgICAgICAgICAgaWYgKHRoaXMuc2hvd0NlbGxFcnJvcnNUb3ApIHtcbiAgICAgICAgICAgICAgICByZW5kZXJlZFJvd3MucHVzaChlcnJvclJvdyk7XG4gICAgICAgICAgICAgICAgcmVuZGVyZWRSb3dzLnB1c2gocmVuZGVyZWRSb3cpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVuZGVyZWRSb3dzLnB1c2gocmVuZGVyZWRSb3cpO1xuICAgICAgICAgICAgICAgIHJlbmRlcmVkUm93cy5wdXNoKGVycm9yUm93KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkVGFibGUucHJvdG90eXBlLmNyZWF0ZVZlcnRpY2FsUm93ID0gZnVuY3Rpb24gKGNvbHVtbiwgaW5kZXgsIGNob2ljZSwgY2hvaWNlSW5kZXgpIHtcbiAgICAgICAgaWYgKGNob2ljZSA9PT0gdm9pZCAwKSB7IGNob2ljZSA9IG51bGw7IH1cbiAgICAgICAgaWYgKGNob2ljZUluZGV4ID09PSB2b2lkIDApIHsgY2hvaWNlSW5kZXggPSAtMTsgfVxuICAgICAgICB2YXIgcmVzID0gdGhpcy5jcmVhdGVSZW5kZXJlZFJvdyh0aGlzLmNzc0NsYXNzZXMpO1xuICAgICAgICBpZiAodGhpcy5tYXRyaXguc2hvd0hlYWRlcikge1xuICAgICAgICAgICAgdmFyIGxUaXRsZSA9ICEhY2hvaWNlID8gY2hvaWNlLmxvY1RleHQgOiBjb2x1bW4ubG9jVGl0bGU7XG4gICAgICAgICAgICB2YXIgaENlbGwgPSB0aGlzLmNyZWF0ZVRleHRDZWxsKGxUaXRsZSk7XG4gICAgICAgICAgICBoQ2VsbC5jb2x1bW4gPSBjb2x1bW47XG4gICAgICAgICAgICBoQ2VsbC5jbGFzc05hbWUgPSBuZXcgX3V0aWxzX2Nzc0NsYXNzQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fW1wiQ3NzQ2xhc3NCdWlsZGVyXCJdKClcbiAgICAgICAgICAgICAgICAuYXBwZW5kKGhDZWxsLmNsYXNzTmFtZSlcbiAgICAgICAgICAgICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5yb3dUZXh0Q2VsbClcbiAgICAgICAgICAgICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5jb2x1bW5UaXRsZUNlbGwpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICBpZiAoIWNob2ljZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0UmVxdXJpZWRUb0hlYWRlckNlbGwoY29sdW1uLCBoQ2VsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXMuY2VsbHMucHVzaChoQ2VsbCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHJvd3MgPSB0aGlzLm1hdHJpeC52aXNpYmxlUm93cztcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgckNob2ljZSA9IGNob2ljZTtcbiAgICAgICAgICAgIHZhciByQ2hvaWNlSW5kZXggPSBjaG9pY2VJbmRleCA+PSAwID8gY2hvaWNlSW5kZXggOiBpO1xuICAgICAgICAgICAgdmFyIGNlbGwgPSByb3dzW2ldLmNlbGxzW2luZGV4XTtcbiAgICAgICAgICAgIHZhciB2aXNDaG9pY2VzID0gISFjaG9pY2UgPyBjZWxsLnF1ZXN0aW9uLnZpc2libGVDaG9pY2VzIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKCEhdmlzQ2hvaWNlcyAmJiByQ2hvaWNlSW5kZXggPCB2aXNDaG9pY2VzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJDaG9pY2UgPSB2aXNDaG9pY2VzW3JDaG9pY2VJbmRleF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgckNlbGwgPSB0aGlzLmNyZWF0ZUVkaXRDZWxsKGNlbGwsIHJDaG9pY2UpO1xuICAgICAgICAgICAgckNlbGwuaXRlbSA9IHJDaG9pY2U7XG4gICAgICAgICAgICByQ2VsbC5jaG9pY2VJbmRleCA9IHJDaG9pY2VJbmRleDtcbiAgICAgICAgICAgIHJlcy5jZWxscy5wdXNoKHJDZWxsKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5tYXRyaXguaGFzVG90YWwpIHtcbiAgICAgICAgICAgIHJlcy5jZWxscy5wdXNoKHRoaXMuY3JlYXRlRWRpdENlbGwodGhpcy5tYXRyaXgudmlzaWJsZVRvdGFsUm93LmNlbGxzW2luZGV4XSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRUYWJsZS5wcm90b3R5cGUuY3JlYXRlRW5kVmVydGljYWxBY3Rpb25Sb3cgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciByZXMgPSB0aGlzLmNyZWF0ZVJlbmRlcmVkUm93KHRoaXMuY3NzQ2xhc3Nlcyk7XG4gICAgICAgIGlmICh0aGlzLm1hdHJpeC5zaG93SGVhZGVyKSB7XG4gICAgICAgICAgICByZXMuY2VsbHMucHVzaCh0aGlzLmNyZWF0ZUVtcHR5Q2VsbCgpKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcm93cyA9IHRoaXMubWF0cml4LnZpc2libGVSb3dzO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHJlcy5jZWxscy5wdXNoKHRoaXMuZ2V0Um93QWN0aW9uc0NlbGwoaSwgXCJlbmRcIikpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm1hdHJpeC5oYXNUb3RhbCkge1xuICAgICAgICAgICAgcmVzLmNlbGxzLnB1c2godGhpcy5jcmVhdGVFbXB0eUNlbGwoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFRhYmxlLnByb3RvdHlwZS5jcmVhdGVNdXRsaXBsZUVkaXRDZWxscyA9IGZ1bmN0aW9uIChyUm93LCBjZWxsLCBpc0Zvb3Rlcikge1xuICAgICAgICBpZiAoaXNGb290ZXIgPT09IHZvaWQgMCkgeyBpc0Zvb3RlciA9IGZhbHNlOyB9XG4gICAgICAgIHZhciBjaG9pY2VzID0gaXNGb290ZXJcbiAgICAgICAgICAgID8gdGhpcy5nZXRNdWx0aXBsZUNvbHVtbkNob2ljZXMoY2VsbC5jb2x1bW4pXG4gICAgICAgICAgICA6IGNlbGwucXVlc3Rpb24udmlzaWJsZUNob2ljZXM7XG4gICAgICAgIGlmICghY2hvaWNlcylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaG9pY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgckNlbGwgPSB0aGlzLmNyZWF0ZUVkaXRDZWxsKGNlbGwsICFpc0Zvb3RlciA/IGNob2ljZXNbaV0gOiB1bmRlZmluZWQpO1xuICAgICAgICAgICAgaWYgKCFpc0Zvb3Rlcikge1xuICAgICAgICAgICAgICAgIC8vckNlbGwuaXRlbSA9IGNob2ljZXNbaV07XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRJdGVtQ2VsbENzc0NsYXNzZXMockNlbGwpO1xuICAgICAgICAgICAgICAgIHJDZWxsLmNob2ljZUluZGV4ID0gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJSb3cuY2VsbHMucHVzaChyQ2VsbCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFRhYmxlLnByb3RvdHlwZS5zZXRJdGVtQ2VsbENzc0NsYXNzZXMgPSBmdW5jdGlvbiAoY2VsbCkge1xuICAgICAgICBjZWxsLmNsYXNzTmFtZSA9IG5ldyBfdXRpbHNfY3NzQ2xhc3NCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bXCJDc3NDbGFzc0J1aWxkZXJcIl0oKVxuICAgICAgICAgICAgLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMuaXRlbUNlbGwpXG4gICAgICAgICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5yYWRpb0NlbGwsIGNlbGwuaXNSYWRpbylcbiAgICAgICAgICAgIC5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLmNoZWNrYm94Q2VsbCwgY2VsbC5pc0NoZWNrYm94KVxuICAgICAgICAgICAgLnRvU3RyaW5nKCk7XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRUYWJsZS5wcm90b3R5cGUuY3JlYXRlRWRpdENlbGwgPSBmdW5jdGlvbiAoY2VsbCwgY2hvaWNlSXRlbSkge1xuICAgICAgICBpZiAoY2hvaWNlSXRlbSA9PT0gdm9pZCAwKSB7IGNob2ljZUl0ZW0gPSB1bmRlZmluZWQ7IH1cbiAgICAgICAgdmFyIHJlcyA9IG5ldyBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRDZWxsKCk7XG4gICAgICAgIHJlcy5jZWxsID0gY2VsbDtcbiAgICAgICAgcmVzLnJvdyA9IGNlbGwucm93O1xuICAgICAgICByZXMucXVlc3Rpb24gPSBjZWxsLnF1ZXN0aW9uO1xuICAgICAgICByZXMubWF0cml4ID0gdGhpcy5tYXRyaXg7XG4gICAgICAgIHJlcy5pdGVtID0gY2hvaWNlSXRlbTtcbiAgICAgICAgcmVzLmlzT3RoZXJDaG9pY2UgPSAhIWNob2ljZUl0ZW0gJiYgISFjZWxsLnF1ZXN0aW9uICYmIGNlbGwucXVlc3Rpb24ub3RoZXJJdGVtID09PSBjaG9pY2VJdGVtO1xuICAgICAgICByZXMuY2xhc3NOYW1lID0gcmVzLmNhbGN1bGF0ZUZpbmFsQ2xhc3NOYW1lKHRoaXMuY3NzQ2xhc3Nlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRUYWJsZS5wcm90b3R5cGUuY3JlYXRlRXJyb3JDZWxsID0gZnVuY3Rpb24gKGNlbGwsIGNob2ljZUl0ZW0pIHtcbiAgICAgICAgaWYgKGNob2ljZUl0ZW0gPT09IHZvaWQgMCkgeyBjaG9pY2VJdGVtID0gdW5kZWZpbmVkOyB9XG4gICAgICAgIHZhciByZXMgPSBuZXcgUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkQ2VsbCgpO1xuICAgICAgICByZXMucXVlc3Rpb24gPSBjZWxsLnF1ZXN0aW9uO1xuICAgICAgICByZXMucm93ID0gY2VsbC5yb3c7XG4gICAgICAgIHJlcy5tYXRyaXggPSB0aGlzLm1hdHJpeDtcbiAgICAgICAgcmVzLmlzRXJyb3JzQ2VsbCA9IHRydWU7XG4gICAgICAgIHJlcy5jbGFzc05hbWUgPSBuZXcgX3V0aWxzX2Nzc0NsYXNzQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fW1wiQ3NzQ2xhc3NCdWlsZGVyXCJdKClcbiAgICAgICAgICAgIC5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLmNlbGwpXG4gICAgICAgICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5lcnJvcnNDZWxsKVxuICAgICAgICAgICAgLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMuZXJyb3JzQ2VsbFRvcCwgdGhpcy5zaG93Q2VsbEVycm9yc1RvcClcbiAgICAgICAgICAgIC5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLmVycm9yc0NlbGxCb3R0b20sIHRoaXMuc2hvd0NlbGxFcnJvcnNCb3R0b20pXG4gICAgICAgICAgICAudG9TdHJpbmcoKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFRhYmxlLnByb3RvdHlwZS5jcmVhdGVNdXRsaXBsZUNvbHVtbnNGb290ZXIgPSBmdW5jdGlvbiAoclJvdywgY2VsbCkge1xuICAgICAgICB0aGlzLmNyZWF0ZU11dGxpcGxlRWRpdENlbGxzKHJSb3csIGNlbGwsIHRydWUpO1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkVGFibGUucHJvdG90eXBlLmNyZWF0ZU11dGxpcGxlQ29sdW1uc0hlYWRlciA9IGZ1bmN0aW9uIChjb2x1bW4pIHtcbiAgICAgICAgdmFyIGNob2ljZXMgPSB0aGlzLmdldE11bHRpcGxlQ29sdW1uQ2hvaWNlcyhjb2x1bW4pO1xuICAgICAgICBpZiAoIWNob2ljZXMpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hvaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGNlbGwgPSB0aGlzLmNyZWF0ZVRleHRDZWxsKGNob2ljZXNbaV0ubG9jVGV4dCk7XG4gICAgICAgICAgICB0aGlzLnNldEhlYWRlckNlbGwoY29sdW1uLCBjZWxsKTtcbiAgICAgICAgICAgIHRoaXMuc2V0SGVhZGVyQ2VsbENzc0NsYXNzZXMoY2VsbCk7XG4gICAgICAgICAgICB0aGlzLmhlYWRlclJvdy5jZWxscy5wdXNoKGNlbGwpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRUYWJsZS5wcm90b3R5cGUuZ2V0TXVsdGlwbGVDb2x1bW5DaG9pY2VzID0gZnVuY3Rpb24gKGNvbHVtbikge1xuICAgICAgICB2YXIgY2hvaWNlcyA9IGNvbHVtbi50ZW1wbGF0ZVF1ZXN0aW9uLmNob2ljZXM7XG4gICAgICAgIGlmICghIWNob2ljZXMgJiYgQXJyYXkuaXNBcnJheShjaG9pY2VzKSAmJiBjaG9pY2VzLmxlbmd0aCA9PSAwKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubWF0cml4LmNob2ljZXM7XG4gICAgICAgIGNob2ljZXMgPSBjb2x1bW4uZ2V0VmlzaWJsZU11bHRpcGxlQ2hvaWNlcygpO1xuICAgICAgICBpZiAoIWNob2ljZXMgfHwgIUFycmF5LmlzQXJyYXkoY2hvaWNlcykpXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgcmV0dXJuIGNob2ljZXM7XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRUYWJsZS5wcm90b3R5cGUuc2V0SGVhZGVyQ2VsbENzc0NsYXNzZXMgPSBmdW5jdGlvbiAoY2VsbCwgY2VsbFR5cGUpIHtcbiAgICAgICAgY2VsbC5jbGFzc05hbWUgPSBuZXcgX3V0aWxzX2Nzc0NsYXNzQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fW1wiQ3NzQ2xhc3NCdWlsZGVyXCJdKClcbiAgICAgICAgICAgIC5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLmhlYWRlckNlbGwpXG4gICAgICAgICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5jb2x1bW5UaXRsZUNlbGwsIHRoaXMubWF0cml4LmlzQ29sdW1uTGF5b3V0SG9yaXpvbnRhbClcbiAgICAgICAgICAgIC5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLmVtcHR5Q2VsbCwgISFjZWxsLmlzRW1wdHkpXG4gICAgICAgICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5jZWxsICsgXCItLVwiICsgY2VsbFR5cGUsICEhY2VsbFR5cGUpXG4gICAgICAgICAgICAudG9TdHJpbmcoKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFRhYmxlLnByb3RvdHlwZS5jcmVhdGVIZWFkZXJDZWxsID0gZnVuY3Rpb24gKGNvbHVtbiwgY2VsbFR5cGUpIHtcbiAgICAgICAgaWYgKGNlbGxUeXBlID09PSB2b2lkIDApIHsgY2VsbFR5cGUgPSBudWxsOyB9XG4gICAgICAgIHZhciBjZWxsID0gISFjb2x1bW4gPyB0aGlzLmNyZWF0ZVRleHRDZWxsKGNvbHVtbi5sb2NUaXRsZSkgOiB0aGlzLmNyZWF0ZUVtcHR5Q2VsbCgpO1xuICAgICAgICBjZWxsLmNvbHVtbiA9IGNvbHVtbjtcbiAgICAgICAgdGhpcy5zZXRIZWFkZXJDZWxsKGNvbHVtbiwgY2VsbCk7XG4gICAgICAgIGlmICghY2VsbFR5cGUpXG4gICAgICAgICAgICBjZWxsVHlwZSA9ICghIWNvbHVtbiAmJiBjb2x1bW4uY2VsbFR5cGUgIT09IFwiZGVmYXVsdFwiKSA/IGNvbHVtbi5jZWxsVHlwZSA6IHRoaXMubWF0cml4LmNlbGxUeXBlO1xuICAgICAgICB0aGlzLnNldEhlYWRlckNlbGxDc3NDbGFzc2VzKGNlbGwsIGNlbGxUeXBlKTtcbiAgICAgICAgcmV0dXJuIGNlbGw7XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRUYWJsZS5wcm90b3R5cGUuc2V0SGVhZGVyQ2VsbCA9IGZ1bmN0aW9uIChjb2x1bW4sIGNlbGwpIHtcbiAgICAgICAgdGhpcy5zZXRIZWFkZXJDZWxsV2lkdGgoY29sdW1uLCBjZWxsKTtcbiAgICAgICAgdGhpcy5zZXRSZXF1cmllZFRvSGVhZGVyQ2VsbChjb2x1bW4sIGNlbGwpO1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkVGFibGUucHJvdG90eXBlLnNldEhlYWRlckNlbGxXaWR0aCA9IGZ1bmN0aW9uIChjb2x1bW4sIGNlbGwpIHtcbiAgICAgICAgY2VsbC5taW5XaWR0aCA9IGNvbHVtbiAhPSBudWxsID8gdGhpcy5tYXRyaXguZ2V0Q29sdW1uV2lkdGgoY29sdW1uKSA6IHRoaXMubWF0cml4LmdldFJvd1RpdGxlV2lkdGgoKTtcbiAgICAgICAgY2VsbC53aWR0aCA9IGNvbHVtbiAhPSBudWxsID8gY29sdW1uLndpZHRoIDogdGhpcy5tYXRyaXguZ2V0Um93VGl0bGVXaWR0aCgpO1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkVGFibGUucHJvdG90eXBlLnNldFJlcXVyaWVkVG9IZWFkZXJDZWxsID0gZnVuY3Rpb24gKGNvbHVtbiwgY2VsbCkge1xuICAgICAgICBpZiAoISFjb2x1bW4gJiYgY29sdW1uLmlzUmVxdWlyZWQgJiYgdGhpcy5tYXRyaXguc3VydmV5KSB7XG4gICAgICAgICAgICBjZWxsLnJlcXVpcmVkVGV4dCA9IHRoaXMubWF0cml4LnN1cnZleS5yZXF1aXJlZFRleHQ7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFRhYmxlLnByb3RvdHlwZS5jcmVhdGVSZW1vdmVSb3dDZWxsID0gZnVuY3Rpb24gKHJvdykge1xuICAgICAgICB2YXIgcmVzID0gbmV3IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwoKTtcbiAgICAgICAgcmVzLnJvdyA9IHJvdztcbiAgICAgICAgcmVzLmlzUmVtb3ZlUm93ID0gdGhpcy5jYW5SZW1vdmVSb3cocm93KTtcbiAgICAgICAgaWYgKCEhdGhpcy5jc3NDbGFzc2VzLmNlbGwpIHtcbiAgICAgICAgICAgIHJlcy5jbGFzc05hbWUgPSB0aGlzLmNzc0NsYXNzZXMuY2VsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkVGFibGUucHJvdG90eXBlLmNyZWF0ZVRleHRDZWxsID0gZnVuY3Rpb24gKGxvY1RpdGxlKSB7XG4gICAgICAgIHZhciBjZWxsID0gbmV3IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwoKTtcbiAgICAgICAgY2VsbC5sb2NUaXRsZSA9IGxvY1RpdGxlO1xuICAgICAgICBpZiAoISFsb2NUaXRsZSkge1xuICAgICAgICAgICAgbG9jVGl0bGUuc3RyQ2hhbmdlZCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghIXRoaXMuY3NzQ2xhc3Nlcy5jZWxsKSB7XG4gICAgICAgICAgICBjZWxsLmNsYXNzTmFtZSA9IHRoaXMuY3NzQ2xhc3Nlcy5jZWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjZWxsO1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkVGFibGUucHJvdG90eXBlLmNyZWF0ZUVtcHR5Q2VsbCA9IGZ1bmN0aW9uIChpc0Vycm9yKSB7XG4gICAgICAgIGlmIChpc0Vycm9yID09PSB2b2lkIDApIHsgaXNFcnJvciA9IGZhbHNlOyB9XG4gICAgICAgIHZhciByZXMgPSB0aGlzLmNyZWF0ZVRleHRDZWxsKG51bGwpO1xuICAgICAgICByZXMuaXNFbXB0eSA9IHRydWU7XG4gICAgICAgIHJlcy5jbGFzc05hbWUgPSBuZXcgX3V0aWxzX2Nzc0NsYXNzQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fW1wiQ3NzQ2xhc3NCdWlsZGVyXCJdKClcbiAgICAgICAgICAgIC5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLmNlbGwpXG4gICAgICAgICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5lbXB0eUNlbGwpXG4gICAgICAgICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5lcnJvcnNDZWxsLCBpc0Vycm9yKVxuICAgICAgICAgICAgLnRvU3RyaW5nKCk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJwcm9wZXJ0eUFycmF5XCJdKSh7XG4gICAgICAgICAgICBvblB1c2g6IGZ1bmN0aW9uIChfLCBpLCB0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXQucmVuZGVyZWRSb3dzQ2hhbmdlZENhbGxiYWNrKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgIF0sIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFRhYmxlLnByb3RvdHlwZSwgXCJyb3dzXCIsIHZvaWQgMCk7XG4gICAgcmV0dXJuIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFRhYmxlO1xufShfYmFzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiQmFzZVwiXSkpO1xuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvcXVlc3Rpb25fbWF0cml4ZHluYW1pYy50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3F1ZXN0aW9uX21hdHJpeGR5bmFtaWMudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBNYXRyaXhEeW5hbWljUm93TW9kZWwsIFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIk1hdHJpeER5bmFtaWNSb3dNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIE1hdHJpeER5bmFtaWNSb3dNb2RlbDsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbDsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vanNvbm9iamVjdCAqLyBcIi4vc3JjL2pzb25vYmplY3QudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3F1ZXN0aW9uZmFjdG9yeV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9xdWVzdGlvbmZhY3RvcnkgKi8gXCIuL3NyYy9xdWVzdGlvbmZhY3RvcnkudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3F1ZXN0aW9uX21hdHJpeGRyb3Bkb3duYmFzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9xdWVzdGlvbl9tYXRyaXhkcm9wZG93bmJhc2UgKi8gXCIuL3NyYy9xdWVzdGlvbl9tYXRyaXhkcm9wZG93bmJhc2UudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Vycm9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2Vycm9yICovIFwiLi9zcmMvZXJyb3IudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NldHRpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3NldHRpbmdzICovIFwiLi9zcmMvc2V0dGluZ3MudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3V0aWxzX3V0aWxzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3V0aWxzL3V0aWxzICovIFwiLi9zcmMvdXRpbHMvdXRpbHMudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2RyYWdkcm9wX21hdHJpeF9yb3dzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2RyYWdkcm9wL21hdHJpeC1yb3dzICovIFwiLi9zcmMvZHJhZ2Ryb3AvbWF0cml4LXJvd3MudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3V0aWxzX2Nzc0NsYXNzQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi91dGlscy9jc3NDbGFzc0J1aWxkZXIgKi8gXCIuL3NyYy91dGlscy9jc3NDbGFzc0J1aWxkZXIudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3F1ZXN0aW9uX21hdHJpeGRyb3Bkb3ducmVuZGVyZWRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcXVlc3Rpb25fbWF0cml4ZHJvcGRvd25yZW5kZXJlZCAqLyBcIi4vc3JjL3F1ZXN0aW9uX21hdHJpeGRyb3Bkb3ducmVuZGVyZWQudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3V0aWxzX2RyYWdPckNsaWNrSGVscGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3V0aWxzL2RyYWdPckNsaWNrSGVscGVyICovIFwiLi9zcmMvdXRpbHMvZHJhZ09yQ2xpY2tIZWxwZXIudHNcIik7XG52YXIgX19leHRlbmRzID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcblxuXG5cblxuXG5cblxuXG5cblxudmFyIE1hdHJpeER5bmFtaWNSb3dNb2RlbCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoTWF0cml4RHluYW1pY1Jvd01vZGVsLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIE1hdHJpeER5bmFtaWNSb3dNb2RlbChpbmRleCwgZGF0YSwgdmFsdWUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgZGF0YSwgdmFsdWUpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmluZGV4ID0gaW5kZXg7XG4gICAgICAgIF90aGlzLmJ1aWxkQ2VsbHModmFsdWUpO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNYXRyaXhEeW5hbWljUm93TW9kZWwucHJvdG90eXBlLCBcInJvd05hbWVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlkO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1hdHJpeER5bmFtaWNSb3dNb2RlbC5wcm90b3R5cGUsIFwic2hvcnRjdXRUZXh0XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgbWF0cml4ID0gdGhpcy5kYXRhO1xuICAgICAgICAgICAgdmFyIGluZGV4ID0gbWF0cml4LnZpc2libGVSb3dzLmluZGV4T2YodGhpcykgKyAxO1xuICAgICAgICAgICAgdmFyIHF1ZXN0aW9uVmFsdWUxID0gdGhpcy5jZWxscy5sZW5ndGggPiAxID8gdGhpcy5jZWxsc1sxXVtcInF1ZXN0aW9uVmFsdWVcIl0gOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB2YXIgcXVlc3Rpb25WYWx1ZTAgPSB0aGlzLmNlbGxzLmxlbmd0aCA+IDAgPyB0aGlzLmNlbGxzWzBdW1wicXVlc3Rpb25WYWx1ZVwiXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHJldHVybiAocXVlc3Rpb25WYWx1ZTEgJiYgcXVlc3Rpb25WYWx1ZTEudmFsdWUgfHxcbiAgICAgICAgICAgICAgICBxdWVzdGlvblZhbHVlMCAmJiBxdWVzdGlvblZhbHVlMC52YWx1ZSB8fFxuICAgICAgICAgICAgICAgIFwiXCIgKyBpbmRleCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICByZXR1cm4gTWF0cml4RHluYW1pY1Jvd01vZGVsO1xufShfcXVlc3Rpb25fbWF0cml4ZHJvcGRvd25iYXNlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZVwiXSkpO1xuXG4vKipcbiAgKiBBIGNsYXNzIHRoYXQgZGVzY3JpYmVzIHRoZSBEeW5hbWljIE1hdHJpeCBxdWVzdGlvbiB0eXBlLlxuICAqXG4gICogRHluYW1pYyBNYXRyaXggYWxsb3dzIHJlc3BvbmRlbnRzIHRvIGFkZCBhbmQgZGVsZXRlIG1hdHJpeCByb3dzLiBZb3UgY2FuIHVzZSB0aGUgW0Ryb3Bkb3duXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL3F1ZXN0aW9uZHJvcGRvd25tb2RlbCksIFtDaGVja2JveF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9xdWVzdGlvbmNoZWNrYm94bW9kZWwpLCBbUmFkaW9ncm91cF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9xdWVzdGlvbnJhZGlvZ3JvdXBtb2RlbCksIFtUZXh0XShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL3F1ZXN0aW9udGV4dG1vZGVsKSwgYW5kIFtDb21tZW50XShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL3F1ZXN0aW9uY29tbWVudG1vZGVsKSBxdWVzdGlvbiB0eXBlcyBhcyBjZWxsIGVkaXRvcnMuXG4gICpcbiAgKiBbVmlldyBEZW1vXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9leGFtcGxlcy9xdWVzdGlvbnR5cGUtbWF0cml4ZHluYW1pYy8gKGxpbmtTdHlsZSkpXG4gICovXG52YXIgUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWwgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsKG5hbWUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbmFtZSkgfHwgdGhpcztcbiAgICAgICAgX3RoaXMucm93Q291bnRlciA9IDA7XG4gICAgICAgIF90aGlzLmluaXRpYWxSb3dDb3VudCA9IDI7XG4gICAgICAgIF90aGlzLnNldFJvd0NvdW50VmFsdWVGcm9tRGF0YSA9IGZhbHNlO1xuICAgICAgICBfdGhpcy5zdGFydERyYWdNYXRyaXhSb3cgPSBmdW5jdGlvbiAoZXZlbnQsIGN1cnJlbnRUYXJnZXQpIHtcbiAgICAgICAgICAgIF90aGlzLmRyYWdEcm9wTWF0cml4Um93cy5zdGFydERyYWcoZXZlbnQsIF90aGlzLmRyYWdnZWRSb3csIF90aGlzLCBldmVudC50YXJnZXQpO1xuICAgICAgICB9O1xuICAgICAgICBfdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcImNvbmZpcm1EZWxldGVUZXh0XCIsIF90aGlzLCBmYWxzZSwgXCJjb25maXJtRGVsZXRlXCIpO1xuICAgICAgICB2YXIgbG9jQWRkUm93VGV4dCA9IF90aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwiYWRkUm93VGV4dFwiLCBfdGhpcyk7XG4gICAgICAgIGxvY0FkZFJvd1RleHQub25HZXRUZXh0Q2FsbGJhY2sgPSBmdW5jdGlvbiAodGV4dCkge1xuICAgICAgICAgICAgcmV0dXJuICEhdGV4dCA/IHRleHQgOiBfdGhpcy5kZWZhdWx0QWRkUm93VGV4dDtcbiAgICAgICAgfTtcbiAgICAgICAgX3RoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJyZW1vdmVSb3dUZXh0XCIsIF90aGlzLCBmYWxzZSwgXCJyZW1vdmVSb3dcIik7XG4gICAgICAgIF90aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwiZW1wdHlSb3dzVGV4dFwiLCBfdGhpcywgZmFsc2UsIHRydWUpO1xuICAgICAgICBfdGhpcy5yZWdpc3RlclByb3BlcnR5Q2hhbmdlZEhhbmRsZXJzKFtcImhpZGVDb2x1bW5zSWZFbXB0eVwiLCBcImFsbG93QWRkUm93c1wiXSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMudXBkYXRlU2hvd1RhYmxlQW5kQWRkUm93KCk7XG4gICAgICAgIH0pO1xuICAgICAgICBfdGhpcy5yZWdpc3RlclByb3BlcnR5Q2hhbmdlZEhhbmRsZXJzKFtcImFsbG93Um93c0RyYWdBbmREcm9wXCJdLCBmdW5jdGlvbiAoKSB7IF90aGlzLmNsZWFyUm93c0FuZFJlc2V0UmVuZGVyZWRUYWJsZSgpOyB9KTtcbiAgICAgICAgX3RoaXMuZHJhZ09yQ2xpY2tIZWxwZXIgPSBuZXcgX3V0aWxzX2RyYWdPckNsaWNrSGVscGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bXCJEcmFnT3JDbGlja0hlbHBlclwiXShfdGhpcy5zdGFydERyYWdNYXRyaXhSb3cpO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsLnByb3RvdHlwZS5zZXRTdXJ2ZXlJbXBsID0gZnVuY3Rpb24gKHZhbHVlLCBpc0xpZ2h0KSB7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUuc2V0U3VydmV5SW1wbC5jYWxsKHRoaXMsIHZhbHVlLCBpc0xpZ2h0KTtcbiAgICAgICAgdGhpcy5kcmFnRHJvcE1hdHJpeFJvd3MgPSBuZXcgX2RyYWdkcm9wX21hdHJpeF9yb3dzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bXCJEcmFnRHJvcE1hdHJpeFJvd3NcIl0odGhpcy5zdXJ2ZXksIG51bGwsIHRydWUpO1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWwucHJvdG90eXBlLmlzQmFuU3RhcnREcmFnID0gZnVuY3Rpb24gKHBvaW50ZXJEb3duRXZlbnQpIHtcbiAgICAgICAgdmFyIHRhcmdldCA9IHBvaW50ZXJEb3duRXZlbnQudGFyZ2V0O1xuICAgICAgICByZXR1cm4gdGFyZ2V0LmdldEF0dHJpYnV0ZShcImNvbnRlbnRlZGl0YWJsZVwiKSA9PT0gXCJ0cnVlXCIgfHwgdGFyZ2V0Lm5vZGVOYW1lID09PSBcIklOUFVUXCIgfHwgIXRoaXMuaXNEcmFnSGFuZGxlQXJlYVZhbGlkKHRhcmdldCk7XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbC5wcm90b3R5cGUuaXNEcmFnSGFuZGxlQXJlYVZhbGlkID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgaWYgKHRoaXMuc3VydmV5Lm1hdHJpeERyYWdIYW5kbGVBcmVhID09PSBcImljb25cIikge1xuICAgICAgICAgICAgcmV0dXJuIG5vZGUuY2xhc3NMaXN0LmNvbnRhaW5zKHRoaXMuY3NzQ2xhc3Nlcy5kcmFnRWxlbWVudERlY29yYXRvcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbC5wcm90b3R5cGUub25Qb2ludGVyRG93biA9IGZ1bmN0aW9uIChwb2ludGVyRG93bkV2ZW50LCByb3cpIHtcbiAgICAgICAgaWYgKCFyb3cgfHwgIXRoaXMuYWxsb3dSb3dzRHJhZ0FuZERyb3ApXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmICh0aGlzLmlzQmFuU3RhcnREcmFnKHBvaW50ZXJEb3duRXZlbnQpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAocm93LmlzRGV0YWlsUGFuZWxTaG93aW5nKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLmRyYWdnZWRSb3cgPSByb3c7XG4gICAgICAgIHRoaXMuZHJhZ09yQ2xpY2tIZWxwZXIub25Qb2ludGVyRG93bihwb2ludGVyRG93bkV2ZW50KTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsLnByb3RvdHlwZS5nZXRUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gXCJtYXRyaXhkeW5hbWljXCI7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWwucHJvdG90eXBlLCBcImlzUm93c0R5bmFtaWNcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsLnByb3RvdHlwZSwgXCJjb25maXJtRGVsZXRlXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB3aGV0aGVyIHRvIGRpc3BsYXkgYSBjb25maXJtYXRpb24gZGlhbG9nIHdoZW4gYSByZXNwb25kZW50IHdhbnRzIHRvIGRlbGV0ZSBhIHJvdy5cbiAgICAgICAgICpcbiAgICAgICAgICogRGVmYXVsdCB2YWx1ZTogYGZhbHNlYFxuICAgICAgICAgKiBAc2VlIGNvbmZpcm1EZWxldGVUZXh0XG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjb25maXJtRGVsZXRlXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNvbmZpcm1EZWxldGVcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbC5wcm90b3R5cGUsIFwiaXNWYWx1ZUFycmF5XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0cnVlOyB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsLnByb3RvdHlwZSwgXCJrZXlOYW1lXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyBhIGtleSBjb2x1bW4uIFNldCB0aGlzIHByb3BlcnR5IHRvIGEgY29sdW1uIG5hbWUsIGFuZCB0aGUgcXVlc3Rpb24gd2lsbCBkaXNwbGF5IGBrZXlEdXBsaWNhdGlvbkVycm9yYCBpZiBhIHVzZXIgdHJpZXMgdG8gZW50ZXIgYSBkdXBsaWNhdGUgdmFsdWUgaW4gdGhpcyBjb2x1bW4uXG4gICAgICAgICAqIEBzZWUga2V5RHVwbGljYXRpb25FcnJvclxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwia2V5TmFtZVwiLCBcIlwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJrZXlOYW1lXCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWwucHJvdG90eXBlLCBcImRlZmF1bHRSb3dWYWx1ZVwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJZiBpdCBpcyBub3QgZW1wdHksIHRoZW4gdGhpcyB2YWx1ZSBpcyBzZXQgdG8gZXZlcnkgbmV3IHJvdywgaW5jbHVkaW5nIHJvd3MgY3JlYXRlZCBpbml0aWFsbHksIHVubGVzcyB0aGUgZGVmYXVsdFZhbHVlIGlzIG5vdCBlbXB0eVxuICAgICAgICAgKiBAc2VlIGRlZmF1bHRWYWx1ZVxuICAgICAgICAgKiBAc2VlIGRlZmF1bHRWYWx1ZUZyb21MYXN0Um93XG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJkZWZhdWx0Um93VmFsdWVcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiZGVmYXVsdFJvd1ZhbHVlXCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWwucHJvdG90eXBlLCBcImRlZmF1bHRWYWx1ZUZyb21MYXN0Um93XCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB3aGV0aGVyIGRlZmF1bHQgdmFsdWVzIGZvciBhIG5ldyByb3cvY29sdW1uIHNob3VsZCBiZSBjb3BpZWQgZnJvbSB0aGUgbGFzdCByb3cvY29sdW1uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBJZiB5b3UgYWxzbyBzcGVjaWZ5IGBkZWZhdWx0VmFsdWVgLCBpdCB3aWxsIGJlIG1lcmdlZCB3aXRoIHRoZSBjb3BpZWQgdmFsdWVzLlxuICAgICAgICAgKiBAc2VlIGRlZmF1bHRWYWx1ZVxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiZGVmYXVsdFZhbHVlRnJvbUxhc3RSb3dcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiZGVmYXVsdFZhbHVlRnJvbUxhc3RSb3dcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsLnByb3RvdHlwZS5pc0RlZmF1bHRWYWx1ZUVtcHR5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKF9zdXBlci5wcm90b3R5cGUuaXNEZWZhdWx0VmFsdWVFbXB0eS5jYWxsKHRoaXMpICYmIHRoaXMuaXNWYWx1ZUVtcHR5KHRoaXMuZGVmYXVsdFJvd1ZhbHVlKSk7XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbC5wcm90b3R5cGUudmFsdWVGcm9tRGF0YSA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgaWYgKHRoaXMubWluUm93Q291bnQgPCAxKVxuICAgICAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUudmFsdWVGcm9tRGF0YS5jYWxsKHRoaXMsIHZhbCk7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWwpKVxuICAgICAgICAgICAgdmFsID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSB2YWwubGVuZ3RoOyBpIDwgdGhpcy5taW5Sb3dDb3VudDsgaSsrKVxuICAgICAgICAgICAgdmFsLnB1c2goe30pO1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWwucHJvdG90eXBlLmlzTmV3VmFsdWVDb3JyZWN0ID0gZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWwpO1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWwucHJvdG90eXBlLnNldERlZmF1bHRWYWx1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNWYWx1ZUVtcHR5KHRoaXMuZGVmYXVsdFJvd1ZhbHVlKSB8fFxuICAgICAgICAgICAgIXRoaXMuaXNWYWx1ZUVtcHR5KHRoaXMuZGVmYXVsdFZhbHVlKSkge1xuICAgICAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5zZXREZWZhdWx0VmFsdWUuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuaXNFbXB0eSgpIHx8IHRoaXMucm93Q291bnQgPT0gMClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIG5ld1ZhbHVlID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5yb3dDb3VudDsgaSsrKSB7XG4gICAgICAgICAgICBuZXdWYWx1ZS5wdXNoKHRoaXMuZGVmYXVsdFJvd1ZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbC5wcm90b3R5cGUubW92ZVJvd0J5SW5kZXggPSBmdW5jdGlvbiAoZnJvbUluZGV4LCB0b0luZGV4KSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IHRoaXMuY3JlYXRlTmV3VmFsdWUoKTtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSAmJiBNYXRoLm1heChmcm9tSW5kZXgsIHRvSW5kZXgpID49IHZhbHVlLmxlbmd0aClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIG1vdmFibGVSb3cgPSB2YWx1ZVtmcm9tSW5kZXhdO1xuICAgICAgICB2YWx1ZS5zcGxpY2UoZnJvbUluZGV4LCAxKTtcbiAgICAgICAgdmFsdWUuc3BsaWNlKHRvSW5kZXgsIDAsIG1vdmFibGVSb3cpO1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbC5wcm90b3R5cGUuY2xlYXJPbkRyb3AgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5pc0VkaXRpbmdTdXJ2ZXlFbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0UmVuZGVyZWRUYWJsZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbC5wcm90b3R5cGUuaW5pdERhdGFVSSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzKSB7XG4gICAgICAgICAgICB0aGlzLnZpc2libGVSb3dzO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWwucHJvdG90eXBlLCBcInJvd0NvdW50XCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSBudW1iZXIgb2Ygcm93cyBpbiB0aGUgbWF0cml4LlxuICAgICAgICAgKiBAc2VlIG1pblJvd0NvdW50XG4gICAgICAgICAqIEBzZWUgbWF4Um93Q291bnRcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucm93Q291bnRWYWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICBpZiAodmFsIDwgMCB8fCB2YWwgPiBfc2V0dGluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1tcInNldHRpbmdzXCJdLm1hdHJpeC5tYXhSb3dDb3VudClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB0aGlzLnNldFJvd0NvdW50VmFsdWVGcm9tRGF0YSA9IGZhbHNlO1xuICAgICAgICAgICAgdmFyIHByZXZWYWx1ZSA9IHRoaXMucm93Q291bnRWYWx1ZTtcbiAgICAgICAgICAgIHRoaXMucm93Q291bnRWYWx1ZSA9IHZhbDtcbiAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlICYmIHRoaXMudmFsdWUubGVuZ3RoID4gdmFsKSB7XG4gICAgICAgICAgICAgICAgdmFyIHFWYWwgPSB0aGlzLnZhbHVlO1xuICAgICAgICAgICAgICAgIHFWYWwuc3BsaWNlKHZhbCk7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHFWYWw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5pc1VwZGF0ZUxvY2tlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdGlhbFJvd0NvdW50ID0gdmFsO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzIHx8IHByZXZWYWx1ZSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MgPSBbXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cy5zcGxpY2UodmFsKTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gcHJldlZhbHVlOyBpIDwgdmFsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5ld1JvdyA9IHRoaXMuY3JlYXRlTWF0cml4Um93KHRoaXMuZ2V0VmFsdWVGb3JOZXdSb3coKSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MucHVzaChuZXdSb3cpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uTWF0cml4Um93Q3JlYXRlZChuZXdSb3cpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnJ1bkNvbmRpdGlvbih0aGlzLmdldERhdGFGaWx0ZXJlZFZhbHVlcygpLCB0aGlzLmdldERhdGFGaWx0ZXJlZFByb3BlcnRpZXMoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm9uUm93c0NoYW5nZWQoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsLnByb3RvdHlwZS51cGRhdGVQcm9ncmVzc0luZm9CeVZhbHVlcyA9IGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgdmFyIHZhbCA9IHRoaXMudmFsdWU7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWwpKVxuICAgICAgICAgICAgdmFsID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5yb3dDb3VudDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgcm93VmFsdWUgPSBpIDwgdmFsLmxlbmd0aCA/IHZhbFtpXSA6IHt9O1xuICAgICAgICAgICAgdGhpcy51cGRhdGVQcm9ncmVzc0luZm9CeVJvdyhyZXMsIHJvd1ZhbHVlKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWwucHJvdG90eXBlLmdldFZhbHVlRm9yTmV3Um93ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcmVzID0gbnVsbDtcbiAgICAgICAgaWYgKCEhdGhpcy5vbkdldFZhbHVlRm9yTmV3Um93Q2FsbEJhY2spIHtcbiAgICAgICAgICAgIHJlcyA9IHRoaXMub25HZXRWYWx1ZUZvck5ld1Jvd0NhbGxCYWNrKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWwucHJvdG90eXBlLCBcImFsbG93Um93c0RyYWdBbmREcm9wXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB3aGV0aGVyIHVzZXJzIGNhbiBkcmFnIGFuZCBkcm9wIG1hdHJpeCByb3dzIHRvIHJlb3JkZXIgdGhlbS5cbiAgICAgICAgICpcbiAgICAgICAgICogRGVmYXVsdCB2YWx1ZTogYGZhbHNlYFxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5yZWFkT25seSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiYWxsb3dSb3dzRHJhZ0FuZERyb3BcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiYWxsb3dSb3dzRHJhZ0FuZERyb3BcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbC5wcm90b3R5cGUsIFwiaWNvbkRyYWdFbGVtZW50XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jc3NDbGFzc2VzLmljb25EcmFnRWxlbWVudDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsLnByb3RvdHlwZS5jcmVhdGVSZW5kZXJlZFRhYmxlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gbmV3IFF1ZXN0aW9uTWF0cml4RHluYW1pY1JlbmRlcmVkVGFibGUodGhpcyk7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWwucHJvdG90eXBlLCBcInJvd0NvdW50VmFsdWVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJyb3dDb3VudFwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJyb3dDb3VudFwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsLnByb3RvdHlwZSwgXCJtaW5Sb3dDb3VudFwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBIG1pbmltdW0gbnVtYmVyIG9mIHJvd3MgaW4gdGhlIG1hdHJpeC4gVXNlcnMgY2Fubm90IGRlbGV0ZSByb3dzIGlmIGByb3dDb3VudGAgZXF1YWxzIGBtaW5Sb3dDb3VudGAuXG4gICAgICAgICAqXG4gICAgICAgICAqIERlZmF1bHQgdmFsdWU6IDBcbiAgICAgICAgICogQHNlZSByb3dDb3VudFxuICAgICAgICAgKiBAc2VlIG1heFJvd0NvdW50XG4gICAgICAgICAqIEBzZWUgYWxsb3dSZW1vdmVSb3dzXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJtaW5Sb3dDb3VudFwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICBpZiAodmFsIDwgMClcbiAgICAgICAgICAgICAgICB2YWwgPSAwO1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibWluUm93Q291bnRcIiwgdmFsKTtcbiAgICAgICAgICAgIGlmICh2YWwgPiB0aGlzLm1heFJvd0NvdW50KVxuICAgICAgICAgICAgICAgIHRoaXMubWF4Um93Q291bnQgPSB2YWw7XG4gICAgICAgICAgICBpZiAodGhpcy5yb3dDb3VudCA8IHZhbClcbiAgICAgICAgICAgICAgICB0aGlzLnJvd0NvdW50ID0gdmFsO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsLnByb3RvdHlwZSwgXCJtYXhSb3dDb3VudFwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBIG1heGltdW0gbnVtYmVyIG9mIHJvd3MgaW4gdGhlIG1hdHJpeC4gVXNlcnMgY2Fubm90IGFkZCBuZXcgcm93cyBpZiBgcm93Q291bnRgIGVxdWFscyBgbWF4Um93Q291bnRgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBEZWZhdWx0IHZhbHVlOiAxMDAwIChpbmhlcml0ZWQgZnJvbSBbYHNldHRpbmdzLm1hdHJpeC5tYXhSb3dDb3VudGBdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vc2V0dGluZ3MjbWF0cml4TWF4aW11bVJvd0NvdW50KSlcbiAgICAgICAgICogQHNlZSByb3dDb3VudFxuICAgICAgICAgKiBAc2VlIG1pblJvd0NvdW50XG4gICAgICAgICAqIEBzZWUgYWxsb3dBZGRSb3dzXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJtYXhSb3dDb3VudFwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICBpZiAodmFsIDw9IDApXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKHZhbCA+IF9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fW1wic2V0dGluZ3NcIl0ubWF0cml4Lm1heFJvd0NvdW50KVxuICAgICAgICAgICAgICAgIHZhbCA9IF9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fW1wic2V0dGluZ3NcIl0ubWF0cml4Lm1heFJvd0NvdW50O1xuICAgICAgICAgICAgaWYgKHZhbCA9PSB0aGlzLm1heFJvd0NvdW50KVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm1heFJvd0NvdW50XCIsIHZhbCk7XG4gICAgICAgICAgICBpZiAodmFsIDwgdGhpcy5taW5Sb3dDb3VudClcbiAgICAgICAgICAgICAgICB0aGlzLm1pblJvd0NvdW50ID0gdmFsO1xuICAgICAgICAgICAgaWYgKHRoaXMucm93Q291bnQgPiB2YWwpXG4gICAgICAgICAgICAgICAgdGhpcy5yb3dDb3VudCA9IHZhbDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbC5wcm90b3R5cGUsIFwiYWxsb3dBZGRSb3dzXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB3aGV0aGVyIHVzZXJzIGFyZSBhbGxvd2VkIHRvIGFkZCBuZXcgcm93cy5cbiAgICAgICAgICpcbiAgICAgICAgICogRGVmYXVsdCB2YWx1ZTogYHRydWVgXG4gICAgICAgICAqIEBzZWUgY2FuQWRkUm93XG4gICAgICAgICAqIEBzZWUgYWxsb3dSZW1vdmVSb3dzXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJhbGxvd0FkZFJvd3NcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiYWxsb3dBZGRSb3dzXCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWwucHJvdG90eXBlLCBcImFsbG93UmVtb3ZlUm93c1wiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgd2hldGhlciB1c2VycyBhcmUgYWxsb3dlZCB0byBkZWxldGUgcm93cy5cbiAgICAgICAgICpcbiAgICAgICAgICogRGVmYXVsdCB2YWx1ZTogYHRydWVgXG4gICAgICAgICAqIEBzZWUgY2FuUmVtb3ZlUm93c1xuICAgICAgICAgKiBAc2VlIGFsbG93QWRkUm93c1xuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiYWxsb3dSZW1vdmVSb3dzXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImFsbG93UmVtb3ZlUm93c1wiLCB2YWwpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlzVXBkYXRlTG9ja2VkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNldFJlbmRlcmVkVGFibGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbC5wcm90b3R5cGUsIFwiY2FuQWRkUm93XCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEluZGljYXRlcyB3aGV0aGVyIGl0IGlzIHBvc3NpYmxlIHRvIGFkZCBhIG5ldyByb3cuXG4gICAgICAgICAqXG4gICAgICAgICAqIFRoaXMgcHJvcGVydHkgcmV0dXJucyBgdHJ1ZWAgd2hlbiBhbGwgb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFwcGx5OlxuICAgICAgICAgKlxuICAgICAgICAgKiAtIFVzZXJzIGFyZSBhbGxvd2VkIHRvIGFkZCBuZXcgcm93cyAoYGFsbG93QWRkUm93c2AgaXMgYHRydWVgKS5cbiAgICAgICAgICogLSBUaGUgcXVlc3Rpb24sIGl0cyBwYXJlbnQgcGFuZWwsIG9yIHN1cnZleSBpcyBub3QgaW4gcmVhZC1vbmx5IHN0YXRlLlxuICAgICAgICAgKiAtIGByb3dDb3VudGAgaXMgbGVzcyB0aGFuIGBtYXhSb3dDb3VudGAuXG4gICAgICAgICAqIEBzZWUgYWxsb3dBZGRSb3dzXG4gICAgICAgICAqIEBzZWUgaXNSZWFkT25seVxuICAgICAgICAgKiBAc2VlIHJvd0NvdW50XG4gICAgICAgICAqIEBzZWUgbWF4Um93Q291bnRcbiAgICAgICAgICogQHNlZSBjYW5SZW1vdmVSb3dzXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAodGhpcy5hbGxvd0FkZFJvd3MgJiYgIXRoaXMuaXNSZWFkT25seSAmJiB0aGlzLnJvd0NvdW50IDwgdGhpcy5tYXhSb3dDb3VudCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWwucHJvdG90eXBlLCBcImNhblJlbW92ZVJvd3NcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogSW5kaWNhdGVzIHdoZXRoZXIgaXQgaXMgcG9zc2libGUgdG8gZGVsZXRlIHJvd3MuXG4gICAgICAgICAqXG4gICAgICAgICAqIFRoaXMgcHJvcGVydHkgcmV0dXJucyBgdHJ1ZWAgd2hlbiBhbGwgb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFwcGx5OlxuICAgICAgICAgKlxuICAgICAgICAgKiAtIFVzZXJzIGFyZSBhbGxvd2VkIHRvIGRlbGV0ZSByb3dzIChgYWxsb3dSZW1vdmVSb3dzYCBpcyBgdHJ1ZWApLlxuICAgICAgICAgKiAtIFRoZSBxdWVzdGlvbiwgaXRzIHBhcmVudCBwYW5lbCwgb3Igc3VydmV5IGlzIG5vdCBpbiByZWFkLW9ubHkgc3RhdGUuXG4gICAgICAgICAqIC0gYHJvd0NvdW50YCBleGNlZWRzIGBtaW5Sb3dDb3VudGAuXG4gICAgICAgICAqIEBzZWUgYWxsb3dSZW1vdmVSb3dzXG4gICAgICAgICAqIEBzZWUgaXNSZWFkT25seVxuICAgICAgICAgKiBAc2VlIHJvd0NvdW50XG4gICAgICAgICAqIEBzZWUgbWluUm93Q291bnRcbiAgICAgICAgICogQHNlZSBjYW5BZGRSb3dcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHJlcyA9IHRoaXMuYWxsb3dSZW1vdmVSb3dzICYmXG4gICAgICAgICAgICAgICAgIXRoaXMuaXNSZWFkT25seSAmJlxuICAgICAgICAgICAgICAgIHRoaXMucm93Q291bnQgPiB0aGlzLm1pblJvd0NvdW50O1xuICAgICAgICAgICAgcmV0dXJuICEhdGhpcy5jYW5SZW1vdmVSb3dzQ2FsbGJhY2sgPyB0aGlzLmNhblJlbW92ZVJvd3NDYWxsYmFjayhyZXMpIDogcmVzO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWwucHJvdG90eXBlLmNhblJlbW92ZVJvdyA9IGZ1bmN0aW9uIChyb3cpIHtcbiAgICAgICAgaWYgKCF0aGlzLnN1cnZleSlcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcy5zdXJ2ZXkubWF0cml4QWxsb3dSZW1vdmVSb3codGhpcywgcm93LmluZGV4LCByb3cpO1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWwucHJvdG90eXBlLmFkZFJvd1VJID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmFkZFJvdyh0cnVlKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsLnByb3RvdHlwZS5nZXRRdWVzdGlvblRvRm9jdXNPbkFkZGluZ1JvdyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHJvdyA9IHRoaXMudmlzaWJsZVJvd3NbdGhpcy52aXNpYmxlUm93cy5sZW5ndGggLSAxXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3cuY2VsbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBxID0gcm93LmNlbGxzW2ldLnF1ZXN0aW9uO1xuICAgICAgICAgICAgaWYgKCEhcSAmJiBxLmlzVmlzaWJsZSAmJiAhcS5pc1JlYWRPbmx5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuZCBhZGRzIGEgbmV3IHJvdyB0byB0aGUgbWF0cml4LlxuICAgICAqIEBwYXJhbSBzZXRGb2N1cyAqT3B0aW9uYWwuKiBQYXNzIGB0cnVlYCB0byBmb2N1cyB0aGUgY2VsbCBpbiB0aGUgZmlyc3QgY29sdW1uLlxuICAgICAqL1xuICAgIFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsLnByb3RvdHlwZS5hZGRSb3cgPSBmdW5jdGlvbiAoc2V0Rm9jdXMpIHtcbiAgICAgICAgdmFyIG9sZFJvd0NvdW50ID0gdGhpcy5yb3dDb3VudDtcbiAgICAgICAgdmFyIGFsbG93ID0gdGhpcy5jYW5BZGRSb3c7XG4gICAgICAgIHZhciBvcHRpb25zID0geyBxdWVzdGlvbjogdGhpcywgY2FuQWRkUm93OiBhbGxvdywgYWxsb3c6IGFsbG93IH07XG4gICAgICAgIGlmICghIXRoaXMuc3VydmV5KSB7XG4gICAgICAgICAgICB0aGlzLnN1cnZleS5tYXRyaXhCZWZvcmVSb3dBZGRlZChvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbmV3QWxsb3cgPSBhbGxvdyAhPT0gb3B0aW9ucy5hbGxvdyA/IG9wdGlvbnMuYWxsb3cgOlxuICAgICAgICAgICAgKGFsbG93ICE9PSBvcHRpb25zLmNhbkFkZFJvdyA/IG9wdGlvbnMuY2FuQWRkUm93IDogYWxsb3cpO1xuICAgICAgICBpZiAoIW5ld0FsbG93KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLm9uU3RhcnRSb3dBZGRpbmdSZW1vdmluZygpO1xuICAgICAgICB0aGlzLmFkZFJvd0NvcmUoKTtcbiAgICAgICAgdGhpcy5vbkVuZFJvd0FkZGluZygpO1xuICAgICAgICBpZiAodGhpcy5kZXRhaWxQYW5lbFNob3dPbkFkZGluZyAmJiB0aGlzLnZpc2libGVSb3dzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMudmlzaWJsZVJvd3NbdGhpcy52aXNpYmxlUm93cy5sZW5ndGggLSAxXS5zaG93RGV0YWlsUGFuZWwoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2V0Rm9jdXMgJiYgb2xkUm93Q291bnQgIT09IHRoaXMucm93Q291bnQpIHtcbiAgICAgICAgICAgIHZhciBxID0gdGhpcy5nZXRRdWVzdGlvblRvRm9jdXNPbkFkZGluZ1JvdygpO1xuICAgICAgICAgICAgaWYgKCEhcSkge1xuICAgICAgICAgICAgICAgIHEuZm9jdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsLnByb3RvdHlwZSwgXCJkZXRhaWxQYW5lbFNob3dPbkFkZGluZ1wiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgd2hldGhlciB0byBleHBhbmQgdGhlIGRldGFpbCBzZWN0aW9uIGltbWVkaWF0ZWx5IHdoZW4gYSByZXNwb25kZW50IGFkZHMgYSBuZXcgcm93LlxuICAgICAgICAgKiBAc2VlIGRldGFpbFBhbmVsTW9kZVxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiZGV0YWlsUGFuZWxTaG93T25BZGRpbmdcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiZGV0YWlsUGFuZWxTaG93T25BZGRpbmdcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsLnByb3RvdHlwZS5oYXNSb3dzQXNJdGVtcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWwucHJvdG90eXBlLnVuYmluZFZhbHVlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmNsZWFyR2VuZXJhdGVkUm93cygpO1xuICAgICAgICB0aGlzLmNsZWFyUHJvcGVydHlWYWx1ZShcInZhbHVlXCIpO1xuICAgICAgICB0aGlzLnJvd0NvdW50VmFsdWUgPSAwO1xuICAgICAgICBfc3VwZXIucHJvdG90eXBlLnVuYmluZFZhbHVlLmNhbGwodGhpcyk7XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbC5wcm90b3R5cGUuaXNWYWx1ZVN1cnZleUVsZW1lbnQgPSBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzRWRpdGluZ1N1cnZleUVsZW1lbnQgfHwgX3N1cGVyLnByb3RvdHlwZS5pc1ZhbHVlU3VydmV5RWxlbWVudC5jYWxsKHRoaXMsIHZhbCk7XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbC5wcm90b3R5cGUuYWRkUm93Q29yZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHByZXZSb3dDb3VudCA9IHRoaXMucm93Q291bnQ7XG4gICAgICAgIHRoaXMucm93Q291bnQgPSB0aGlzLnJvd0NvdW50ICsgMTtcbiAgICAgICAgdmFyIGRlZmF1bHRWYWx1ZSA9IHRoaXMuZ2V0RGVmYXVsdFJvd1ZhbHVlKHRydWUpO1xuICAgICAgICB2YXIgbmV3VmFsdWUgPSBudWxsO1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWx1ZUVtcHR5KGRlZmF1bHRWYWx1ZSkpIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gdGhpcy5jcmVhdGVOZXdWYWx1ZSgpO1xuICAgICAgICAgICAgaWYgKG5ld1ZhbHVlLmxlbmd0aCA9PSB0aGlzLnJvd0NvdW50KSB7XG4gICAgICAgICAgICAgICAgbmV3VmFsdWVbbmV3VmFsdWUubGVuZ3RoIC0gMV0gPSBkZWZhdWx0VmFsdWU7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmRhdGEpIHtcbiAgICAgICAgICAgIHRoaXMucnVuQ2VsbHNDb25kaXRpb24odGhpcy5nZXREYXRhRmlsdGVyZWRWYWx1ZXMoKSwgdGhpcy5nZXREYXRhRmlsdGVyZWRQcm9wZXJ0aWVzKCkpO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNWYWx1ZUVtcHR5KGRlZmF1bHRWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICB2YXIgcm93ID0gdGhpcy52aXNpYmxlUm93c1t0aGlzLnJvd0NvdW50IC0gMV07XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzVmFsdWVFbXB0eShyb3cudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghbmV3VmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld1ZhbHVlID0gdGhpcy5jcmVhdGVOZXdWYWx1ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc1ZhbHVlU3VydmV5RWxlbWVudChuZXdWYWx1ZSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICF0aGlzLmlzVHdvVmFsdWVFcXVhbHMobmV3VmFsdWVbbmV3VmFsdWUubGVuZ3RoIC0gMV0sIHJvdy52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld1ZhbHVlW25ld1ZhbHVlLmxlbmd0aCAtIDFdID0gcm93LnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnN1cnZleSkge1xuICAgICAgICAgICAgaWYgKHByZXZSb3dDb3VudCArIDEgPT0gdGhpcy5yb3dDb3VudCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3VydmV5Lm1hdHJpeFJvd0FkZGVkKHRoaXMsIHRoaXMudmlzaWJsZVJvd3NbdGhpcy52aXNpYmxlUm93cy5sZW5ndGggLSAxXSk7XG4gICAgICAgICAgICAgICAgdGhpcy5vblJvd3NDaGFuZ2VkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsLnByb3RvdHlwZS5nZXREZWZhdWx0Um93VmFsdWUgPSBmdW5jdGlvbiAoaXNSb3dBZGRlZCkge1xuICAgICAgICB2YXIgcmVzID0gbnVsbDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNvbHVtbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBxID0gdGhpcy5jb2x1bW5zW2ldLnRlbXBsYXRlUXVlc3Rpb247XG4gICAgICAgICAgICBpZiAoISFxICYmICF0aGlzLmlzVmFsdWVFbXB0eShxLmdldERlZmF1bHRWYWx1ZSgpKSkge1xuICAgICAgICAgICAgICAgIHJlcyA9IHJlcyB8fCB7fTtcbiAgICAgICAgICAgICAgICByZXNbdGhpcy5jb2x1bW5zW2ldLm5hbWVdID0gcS5nZXREZWZhdWx0VmFsdWUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuaXNWYWx1ZUVtcHR5KHRoaXMuZGVmYXVsdFJvd1ZhbHVlKSkge1xuICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHRoaXMuZGVmYXVsdFJvd1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmVzID0gcmVzIHx8IHt9O1xuICAgICAgICAgICAgICAgIHJlc1trZXldID0gdGhpcy5kZWZhdWx0Um93VmFsdWVba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNSb3dBZGRlZCAmJiB0aGlzLmRlZmF1bHRWYWx1ZUZyb21MYXN0Um93KSB7XG4gICAgICAgICAgICB2YXIgdmFsID0gdGhpcy52YWx1ZTtcbiAgICAgICAgICAgIGlmICghIXZhbCAmJiBBcnJheS5pc0FycmF5KHZhbCkgJiYgdmFsLmxlbmd0aCA+PSB0aGlzLnJvd0NvdW50IC0gMSkge1xuICAgICAgICAgICAgICAgIHZhciByb3dWYWx1ZSA9IHZhbFt0aGlzLnJvd0NvdW50IC0gMl07XG4gICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHJvd1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcyA9IHJlcyB8fCB7fTtcbiAgICAgICAgICAgICAgICAgICAgcmVzW2tleV0gPSByb3dWYWx1ZVtrZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWwucHJvdG90eXBlLnJlbW92ZVJvd1VJID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIGlmICghIXZhbHVlICYmICEhdmFsdWUucm93TmFtZSkge1xuICAgICAgICAgICAgdmFyIGluZGV4ID0gdGhpcy52aXNpYmxlUm93cy5pbmRleE9mKHZhbHVlKTtcbiAgICAgICAgICAgIGlmIChpbmRleCA8IDApXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdmFsdWUgPSBpbmRleDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlbW92ZVJvdyh2YWx1ZSk7XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbC5wcm90b3R5cGUuaXNSZXF1aXJlQ29uZmlybU9uUm93RGVsZXRlID0gZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgIGlmICghdGhpcy5jb25maXJtRGVsZXRlKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMucm93Q291bnQpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHZhciB2YWx1ZSA9IHRoaXMuY3JlYXRlTmV3VmFsdWUoKTtcbiAgICAgICAgaWYgKHRoaXMuaXNWYWx1ZUVtcHR5KHZhbHVlKSB8fCAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmIChpbmRleCA+PSB2YWx1ZS5sZW5ndGgpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiAhdGhpcy5pc1ZhbHVlRW1wdHkodmFsdWVbaW5kZXhdKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYSBtYXRyaXggcm93IHdpdGggYSBzcGVjaWZpZWQgaW5kZXguXG4gICAgICogQHBhcmFtIGluZGV4IEEgemVyby1iYXNlZCByb3cgaW5kZXguXG4gICAgICogQHBhcmFtIGNvbmZpcm1EZWxldGUgKk9wdGlvbmFsLiogQSBCb29sZWFuIHZhbHVlIHRoYXQgc3BlY2lmaWVzIHdoZXRoZXIgdG8gZGlzcGxheSBhIGNvbmZpcm1hdGlvbiBkaWFsb2cuIElmIHlvdSBkbyBub3Qgc3BlY2lmeSB0aGlzIHBhcmFtZXRlciwgdGhlIFtgY29uZmlybURlbGV0ZWBdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vYXBpLXJlZmVyZW5jZS9keW5hbWljLW1hdHJpeC10YWJsZS1xdWVzdGlvbi1tb2RlbCNjb25maXJtRGVsZXRlKSBwcm9wZXJ0eSB2YWx1ZSBpcyB1c2VkLlxuICAgICAqL1xuICAgIFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsLnByb3RvdHlwZS5yZW1vdmVSb3cgPSBmdW5jdGlvbiAoaW5kZXgsIGNvbmZpcm1EZWxldGUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgaWYgKCF0aGlzLmNhblJlbW92ZVJvd3MpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGhpcy5yb3dDb3VudClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIHJvdyA9ICEhdGhpcy52aXNpYmxlUm93cyAmJiBpbmRleCA8IHRoaXMudmlzaWJsZVJvd3MubGVuZ3RoXG4gICAgICAgICAgICA/IHRoaXMudmlzaWJsZVJvd3NbaW5kZXhdXG4gICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIGlmIChjb25maXJtRGVsZXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbmZpcm1EZWxldGUgPSB0aGlzLmlzUmVxdWlyZUNvbmZpcm1PblJvd0RlbGV0ZShpbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbmZpcm1EZWxldGUpIHtcbiAgICAgICAgICAgIE9iamVjdChfdXRpbHNfdXRpbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1tcImNvbmZpcm1BY3Rpb25Bc3luY1wiXSkodGhpcy5jb25maXJtRGVsZXRlVGV4dCwgZnVuY3Rpb24gKCkgeyBfdGhpcy5yZW1vdmVSb3dBc3luYyhpbmRleCwgcm93KTsgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZW1vdmVSb3dBc3luYyhpbmRleCwgcm93KTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsLnByb3RvdHlwZS5yZW1vdmVSb3dBc3luYyA9IGZ1bmN0aW9uIChpbmRleCwgcm93KSB7XG4gICAgICAgIGlmICghIXJvdyAmJiAhIXRoaXMuc3VydmV5ICYmICF0aGlzLnN1cnZleS5tYXRyaXhSb3dSZW1vdmluZyh0aGlzLCBpbmRleCwgcm93KSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5vblN0YXJ0Um93QWRkaW5nUmVtb3ZpbmcoKTtcbiAgICAgICAgdGhpcy5yZW1vdmVSb3dDb3JlKGluZGV4KTtcbiAgICAgICAgdGhpcy5vbkVuZFJvd1JlbW92aW5nKHJvdyk7XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbC5wcm90b3R5cGUucmVtb3ZlUm93Q29yZSA9IGZ1bmN0aW9uIChpbmRleCkge1xuICAgICAgICB2YXIgcm93ID0gdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93c1xuICAgICAgICAgICAgPyB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzW2luZGV4XVxuICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICBpZiAodGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cyAmJiBpbmRleCA8IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yb3dDb3VudFZhbHVlLS07XG4gICAgICAgIGlmICh0aGlzLnZhbHVlKSB7XG4gICAgICAgICAgICB2YXIgdmFsID0gW107XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSAmJiBpbmRleCA8IHRoaXMudmFsdWUubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdmFsID0gdGhpcy5jcmVhdGVWYWx1ZUNvcHkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhbCA9IHRoaXMuY3JlYXRlTmV3VmFsdWUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhbC5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgdmFsID0gdGhpcy5kZWxldGVSb3dWYWx1ZSh2YWwsIG51bGwpO1xuICAgICAgICAgICAgdGhpcy5pc1Jvd0NoYW5naW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWw7XG4gICAgICAgICAgICB0aGlzLmlzUm93Q2hhbmdpbmcgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uUm93c0NoYW5nZWQoKTtcbiAgICAgICAgaWYgKHRoaXMuc3VydmV5KSB7XG4gICAgICAgICAgICB0aGlzLnN1cnZleS5tYXRyaXhSb3dSZW1vdmVkKHRoaXMsIGluZGV4LCByb3cpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWwucHJvdG90eXBlLCBcImNvbmZpcm1EZWxldGVUZXh0XCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEEgbWVzc2FnZSBkaXNwbGF5ZWQgaW4gYSBjb25maXJtYXRpb24gZGlhbG9nIHRoYXQgYXBwZWFycyB3aGVuIGEgcmVzcG9uZGVudCB3YW50cyB0byBkZWxldGUgYSByb3cuXG4gICAgICAgICAqIEBzZWUgY29uZmlybURlbGV0ZVxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJjb25maXJtRGVsZXRlVGV4dFwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImNvbmZpcm1EZWxldGVUZXh0XCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWwucHJvdG90eXBlLCBcImxvY0NvbmZpcm1EZWxldGVUZXh0XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcImNvbmZpcm1EZWxldGVUZXh0XCIpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsLnByb3RvdHlwZSwgXCJhZGRSb3dUZXh0XCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEEgY2FwdGlvbiBmb3IgdGhlIEFkZCBSb3cgYnV0dG9uLlxuICAgICAgICAgKiBAc2VlIGFkZFJvd0xvY2F0aW9uXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImFkZFJvd1RleHRcIiwgdGhpcy5kZWZhdWx0QWRkUm93VGV4dCk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJhZGRSb3dUZXh0XCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWwucHJvdG90eXBlLCBcImxvY0FkZFJvd1RleHRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwiYWRkUm93VGV4dFwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbC5wcm90b3R5cGUsIFwiZGVmYXVsdEFkZFJvd1RleHRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphdGlvblN0cmluZyh0aGlzLmlzQ29sdW1uTGF5b3V0SG9yaXpvbnRhbCA/IFwiYWRkUm93XCIgOiBcImFkZENvbHVtblwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbC5wcm90b3R5cGUsIFwiYWRkUm93TG9jYXRpb25cIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHRoZSBsb2NhdGlvbiBvZiB0aGUgQWRkIFJvdyBidXR0b24uXG4gICAgICAgICAqXG4gICAgICAgICAqIFBvc3NpYmxlIHZhbHVlczpcbiAgICAgICAgICpcbiAgICAgICAgICogLSBgXCJ0b3BcImAgLSBEaXNwbGF5cyB0aGUgQWRkIFJvdyBidXR0b24gYXQgdGhlIHRvcCBvZiB0aGUgbWF0cml4LlxuICAgICAgICAgKiAtIGBcImJvdHRvbVwiYCAtIERpc3BsYXlzIHRoZSBBZGQgUm93IGJ1dHRvbiBhdCB0aGUgYm90dG9tIG9mIHRoZSBtYXRyaXguXG4gICAgICAgICAqIC0gYFwidG9wQm90dG9tXCJgIC0gRGlzcGxheXMgdGhlIEFkZCBSb3cgYnV0dG9uIGF0IHRoZSB0b3AgYW5kIGJvdHRvbSBvZiB0aGUgbWF0cml4LlxuICAgICAgICAgKlxuICAgICAgICAgKiBEZWZhdWx0IHZhbHVlOiBgXCJ0b3BcImAgaWYgYGNvbHVtbkxheW91dGAgaXMgYHZlcnRpY2FsYDsgYFwiYm90dG9tXCJgIGlmIGBjb2x1bW5MYXlvdXRgIGlzIGBcImhvcml6b250YWxcImAgb3IgdGhlIG1hdHJpeCBpcyBpbiBjb21wYWN0IG1vZGUuXG4gICAgICAgICAqIEBzZWUgY29sdW1uTGF5b3V0XG4gICAgICAgICAqIEBzZWUgYWRkUm93VGV4dFxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiYWRkUm93TG9jYXRpb25cIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiYWRkUm93TG9jYXRpb25cIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsLnByb3RvdHlwZS5nZXRBZGRSb3dMb2NhdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkUm93TG9jYXRpb247XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWwucHJvdG90eXBlLCBcImhpZGVDb2x1bW5zSWZFbXB0eVwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgd2hldGhlciB0byBoaWRlIGNvbHVtbnMgd2hlbiB0aGUgbWF0cml4IGRvZXMgbm90IGNvbnRhaW4gYW55IHJvd3MuIElmIHlvdSBlbmFibGUgdGhpcyBwcm9wZXJ0eSwgdGhlIG1hdHJpeCBkaXNwbGF5cyB0aGUgYGVtcHR5Um93c1RleHRgIG1lc3NhZ2UgYW5kIHRoZSBBZGQgUm93IGJ1dHRvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogRGVmYXVsdCB2YWx1ZTogYGZhbHNlYFxuICAgICAgICAgKiBAc2VlIGVtcHR5Um93c1RleHRcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImhpZGVDb2x1bW5zSWZFbXB0eVwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJoaWRlQ29sdW1uc0lmRW1wdHlcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsLnByb3RvdHlwZS5nZXRTaG93Q29sdW1uc0lmRW1wdHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhpZGVDb2x1bW5zSWZFbXB0eTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbC5wcm90b3R5cGUsIFwicmVtb3ZlUm93VGV4dFwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBVc2UgdGhpcyBwcm9wZXJ0eSB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgdmFsdWUgb2YgcmVtb3ZlIHJvdyBidXR0b24gdGV4dC5cbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwicmVtb3ZlUm93VGV4dFwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcInJlbW92ZVJvd1RleHRcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbC5wcm90b3R5cGUsIFwibG9jUmVtb3ZlUm93VGV4dFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJyZW1vdmVSb3dUZXh0XCIpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsLnByb3RvdHlwZSwgXCJlbXB0eVJvd3NUZXh0XCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEEgbWVzc2FnZSBkaXNwbGF5ZWQgd2hlbiB0aGUgbWF0cml4IGRvZXMgbm90IGNvbnRhaW4gYW55IHJvd3MuIEFwcGxpZXMgb25seSBpZiBgaGlkZUNvbHVtbnNJZkVtcHR5YCBpcyBlbmFibGVkLlxuICAgICAgICAgKiBAc2VlIGhpZGVDb2x1bW5zSWZFbXB0eVxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJlbXB0eVJvd3NUZXh0XCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwiZW1wdHlSb3dzVGV4dFwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsLnByb3RvdHlwZSwgXCJsb2NFbXB0eVJvd3NUZXh0XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcImVtcHR5Um93c1RleHRcIik7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbC5wcm90b3R5cGUuZ2V0RGlzcGxheVZhbHVlQ29yZSA9IGZ1bmN0aW9uIChrZXlzQXNUZXh0LCB2YWx1ZSkge1xuICAgICAgICBpZiAoIXZhbHVlIHx8ICFBcnJheS5pc0FycmF5KHZhbHVlKSlcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgdmFyIHZhbHVlcyA9IHRoaXMuZ2V0VW5iaW5kVmFsdWUodmFsdWUpO1xuICAgICAgICB2YXIgcm93cyA9IHRoaXMudmlzaWJsZVJvd3M7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93cy5sZW5ndGggJiYgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIHZhbCA9IHZhbHVlc1tpXTtcbiAgICAgICAgICAgIGlmICghdmFsKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgdmFsdWVzW2ldID0gdGhpcy5nZXRSb3dEaXNwbGF5VmFsdWUoa2V5c0FzVGV4dCwgcm93c1tpXSwgdmFsKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWVzO1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWwucHJvdG90eXBlLmdldENvbmRpdGlvbk9iamVjdFJvd05hbWUgPSBmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIFwiW1wiICsgaW5kZXgudG9TdHJpbmcoKSArIFwiXVwiO1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWwucHJvdG90eXBlLmdldENvbmRpdGlvbk9iamVjdHNSb3dJbmRlY2VzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcmVzID0gW107XG4gICAgICAgIHZhciByb3dDb3VudCA9IE1hdGgubWF4KHRoaXMucm93Q291bnQsIDEpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IE1hdGgubWluKF9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fW1wic2V0dGluZ3NcIl0ubWF0cml4Lm1heFJvd0NvdW50SW5Db25kaXRpb24sIHJvd0NvdW50KTsgaSsrKSB7XG4gICAgICAgICAgICByZXMucHVzaChpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWwucHJvdG90eXBlLnN1cHBvcnRHb05leHRQYWdlQXV0b21hdGljID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWwucHJvdG90eXBlLCBcImhhc1Jvd1RleHRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsLnByb3RvdHlwZS5vbkNoZWNrRm9yRXJyb3JzID0gZnVuY3Rpb24gKGVycm9ycywgaXNPblZhbHVlQ2hhbmdlZCkge1xuICAgICAgICBfc3VwZXIucHJvdG90eXBlLm9uQ2hlY2tGb3JFcnJvcnMuY2FsbCh0aGlzLCBlcnJvcnMsIGlzT25WYWx1ZUNoYW5nZWQpO1xuICAgICAgICBpZiAoIWlzT25WYWx1ZUNoYW5nZWQgJiYgdGhpcy5oYXNFcnJvckluTWluUm93cygpKSB7XG4gICAgICAgICAgICBlcnJvcnMucHVzaChuZXcgX2Vycm9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJNaW5Sb3dDb3VudEVycm9yXCJdKHRoaXMubWluUm93Q291bnQsIHRoaXMpKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWwucHJvdG90eXBlLmhhc0Vycm9ySW5NaW5Sb3dzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5taW5Sb3dDb3VudCA8PSAwIHx8ICF0aGlzLmlzUmVxdWlyZWQgfHwgIXRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHZhciBzZXRSb3dDb3VudCA9IDA7XG4gICAgICAgIGZvciAodmFyIHJvd0luZGV4ID0gMDsgcm93SW5kZXggPCB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzLmxlbmd0aDsgcm93SW5kZXgrKykge1xuICAgICAgICAgICAgdmFyIHJvdyA9IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3Nbcm93SW5kZXhdO1xuICAgICAgICAgICAgaWYgKCFyb3cuaXNFbXB0eSlcbiAgICAgICAgICAgICAgICBzZXRSb3dDb3VudCsrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXRSb3dDb3VudCA8IHRoaXMubWluUm93Q291bnQ7XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbC5wcm90b3R5cGUuZ2V0VW5pcXVlQ29sdW1ucyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHJlcyA9IF9zdXBlci5wcm90b3R5cGUuZ2V0VW5pcXVlQ29sdW1ucy5jYWxsKHRoaXMpO1xuICAgICAgICBpZiAoISF0aGlzLmtleU5hbWUpIHtcbiAgICAgICAgICAgIHZhciBjb2x1bW4gPSB0aGlzLmdldENvbHVtbkJ5TmFtZSh0aGlzLmtleU5hbWUpO1xuICAgICAgICAgICAgaWYgKCEhY29sdW1uICYmIHJlcy5pbmRleE9mKGNvbHVtbikgPCAwKSB7XG4gICAgICAgICAgICAgICAgcmVzLnB1c2goY29sdW1uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWwucHJvdG90eXBlLmdlbmVyYXRlUm93cyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBBcnJheSgpO1xuICAgICAgICBpZiAodGhpcy5yb3dDb3VudCA9PT0gMClcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIHZhciB2YWwgPSB0aGlzLmNyZWF0ZU5ld1ZhbHVlKCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5yb3dDb3VudDsgaSsrKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCh0aGlzLmNyZWF0ZU1hdHJpeFJvdyh0aGlzLmdldFJvd1ZhbHVlQnlJbmRleCh2YWwsIGkpKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsdWVFbXB0eSh0aGlzLmdldERlZmF1bHRSb3dWYWx1ZShmYWxzZSkpKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbC5wcm90b3R5cGUuY3JlYXRlTWF0cml4Um93ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBuZXcgTWF0cml4RHluYW1pY1Jvd01vZGVsKHRoaXMucm93Q291bnRlcisrLCB0aGlzLCB2YWx1ZSk7XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbC5wcm90b3R5cGUuZ2V0SW5zZXJ0ZWREZWxldGVkSW5kZXggPSBmdW5jdGlvbiAocm93cywgdmFsKSB7XG4gICAgICAgIHZhciBsZW4gPSBNYXRoLm1pbihyb3dzLmxlbmd0aCwgdmFsLmxlbmd0aCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh2YWxbaV0gIT09IHJvd3NbaV0uZWRpdGluZ09iailcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbGVuO1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWwucHJvdG90eXBlLmlzRWRpdGluZ09iamVjdFZhbHVlQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHZhbCA9IHRoaXMudmFsdWU7XG4gICAgICAgIGlmICghdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cyB8fCAhdGhpcy5pc1ZhbHVlU3VydmV5RWxlbWVudCh2YWwpKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB2YXIgbGFzdERlbFJvdyA9IHRoaXMubGFzdERlbGV0ZWRSb3c7XG4gICAgICAgIHRoaXMubGFzdERlbGV0ZWRSb3cgPSB1bmRlZmluZWQ7XG4gICAgICAgIHZhciByb3dzID0gdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cztcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbCkgfHwgTWF0aC5hYnMocm93cy5sZW5ndGggLSB2YWwubGVuZ3RoKSA+IDEpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHZhciBpbmRleCA9IHRoaXMuZ2V0SW5zZXJ0ZWREZWxldGVkSW5kZXgocm93cywgdmFsKTtcbiAgICAgICAgaWYgKHJvd3MubGVuZ3RoID4gdmFsLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5sYXN0RGVsZXRlZFJvdyA9IHJvd3NbaW5kZXhdO1xuICAgICAgICAgICAgdmFyIHJvdyA9IHJvd3NbaW5kZXhdO1xuICAgICAgICAgICAgcm93cy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNSZW5kcmVkVGFibGVDcmVhdGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlZFRhYmxlLm9uUmVtb3ZlZFJvdyhyb3cpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIG5ld1JvdyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmICghIWxhc3REZWxSb3cgJiYgbGFzdERlbFJvdy5lZGl0aW5nT2JqID09PSB2YWxbaW5kZXhdKSB7XG4gICAgICAgICAgICAgICAgbmV3Um93ID0gbGFzdERlbFJvdztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIG5ld1JvdyA9IHRoaXMuY3JlYXRlTWF0cml4Um93KHZhbFtpbmRleF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcm93cy5zcGxpY2UoaW5kZXgsIDAsIG5ld1Jvdyk7XG4gICAgICAgICAgICBpZiAoIWxhc3REZWxSb3cpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uTWF0cml4Um93Q3JlYXRlZChuZXdSb3cpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuaXNSZW5kcmVkVGFibGVDcmVhdGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlZFRhYmxlLm9uQWRkZWRSb3cobmV3Um93LCBpbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlRGlyZWN0bHkoXCJyb3dDb3VudFwiLCB2YWwubGVuZ3RoKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbC5wcm90b3R5cGUub25CZWZvcmVWYWx1ZUNoYW5nZWQgPSBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgIGlmICghdmFsIHx8ICFBcnJheS5pc0FycmF5KHZhbCkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciBuZXdSb3dDb3VudCA9IHZhbC5sZW5ndGg7XG4gICAgICAgIGlmIChuZXdSb3dDb3VudCA9PSB0aGlzLnJvd0NvdW50KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAoIXRoaXMuc2V0Um93Q291bnRWYWx1ZUZyb21EYXRhICYmIG5ld1Jvd0NvdW50IDwgdGhpcy5pbml0aWFsUm93Q291bnQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmICh0aGlzLmlzRWRpdGluZ09iamVjdFZhbHVlQ2hhbmdlZCgpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLnNldFJvd0NvdW50VmFsdWVGcm9tRGF0YSA9IHRydWU7XG4gICAgICAgIHRoaXMucm93Q291bnRWYWx1ZSA9IG5ld1Jvd0NvdW50O1xuICAgICAgICBpZiAoIXRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmIChuZXdSb3dDb3VudCA9PSB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzLmxlbmd0aCArIDEpIHtcbiAgICAgICAgICAgIHRoaXMub25TdGFydFJvd0FkZGluZ1JlbW92aW5nKCk7XG4gICAgICAgICAgICB2YXIgbmV3VmFsdWUgPSB0aGlzLmdldFJvd1ZhbHVlQnlJbmRleCh2YWwsIG5ld1Jvd0NvdW50IC0gMSk7XG4gICAgICAgICAgICB2YXIgbmV3Um93ID0gdGhpcy5jcmVhdGVNYXRyaXhSb3cobmV3VmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cy5wdXNoKG5ld1Jvdyk7XG4gICAgICAgICAgICB0aGlzLm9uTWF0cml4Um93Q3JlYXRlZChuZXdSb3cpO1xuICAgICAgICAgICAgdGhpcy5vbkVuZFJvd0FkZGluZygpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jbGVhckdlbmVyYXRlZFJvd3MoKTtcbiAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MgPSB0aGlzLnZpc2libGVSb3dzO1xuICAgICAgICAgICAgdGhpcy5vblJvd3NDaGFuZ2VkKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRSb3dDb3VudFZhbHVlRnJvbURhdGEgPSBmYWxzZTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsLnByb3RvdHlwZS5jcmVhdGVOZXdWYWx1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuY3JlYXRlVmFsdWVDb3B5KCk7XG4gICAgICAgIGlmICghcmVzdWx0IHx8ICFBcnJheS5pc0FycmF5KHJlc3VsdCkpXG4gICAgICAgICAgICByZXN1bHQgPSBbXTtcbiAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGggPiB0aGlzLnJvd0NvdW50KVxuICAgICAgICAgICAgcmVzdWx0LnNwbGljZSh0aGlzLnJvd0NvdW50KTtcbiAgICAgICAgdmFyIHJvd1ZhbHVlID0gdGhpcy5nZXREZWZhdWx0Um93VmFsdWUoZmFsc2UpO1xuICAgICAgICByb3dWYWx1ZSA9IHJvd1ZhbHVlIHx8IHt9O1xuICAgICAgICBmb3IgKHZhciBpID0gcmVzdWx0Lmxlbmd0aDsgaSA8IHRoaXMucm93Q291bnQ7IGkrKykge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2godGhpcy5nZXRVbmJpbmRWYWx1ZShyb3dWYWx1ZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbC5wcm90b3R5cGUuZGVsZXRlUm93VmFsdWUgPSBmdW5jdGlvbiAobmV3VmFsdWUsIHJvdykge1xuICAgICAgICB2YXIgaXNFbXB0eSA9IHRydWU7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmV3VmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzT2JqZWN0KG5ld1ZhbHVlW2ldKSAmJiBPYmplY3Qua2V5cyhuZXdWYWx1ZVtpXSkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGlzRW1wdHkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNFbXB0eSA/IG51bGwgOiBuZXdWYWx1ZTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsLnByb3RvdHlwZS5nZXRSb3dWYWx1ZUJ5SW5kZXggPSBmdW5jdGlvbiAocXVlc3Rpb25WYWx1ZSwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkocXVlc3Rpb25WYWx1ZSkgJiZcbiAgICAgICAgICAgIGluZGV4ID49IDAgJiZcbiAgICAgICAgICAgIGluZGV4IDwgcXVlc3Rpb25WYWx1ZS5sZW5ndGhcbiAgICAgICAgICAgID8gcXVlc3Rpb25WYWx1ZVtpbmRleF1cbiAgICAgICAgICAgIDogbnVsbDtcbiAgICB9O1xuICAgIFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsLnByb3RvdHlwZS5nZXRSb3dWYWx1ZUNvcmUgPSBmdW5jdGlvbiAocm93LCBxdWVzdGlvblZhbHVlLCBjcmVhdGUpIHtcbiAgICAgICAgaWYgKGNyZWF0ZSA9PT0gdm9pZCAwKSB7IGNyZWF0ZSA9IGZhbHNlOyB9XG4gICAgICAgIGlmICghdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cylcbiAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgdmFyIHJlcyA9IHRoaXMuZ2V0Um93VmFsdWVCeUluZGV4KHF1ZXN0aW9uVmFsdWUsIHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MuaW5kZXhPZihyb3cpKTtcbiAgICAgICAgaWYgKCFyZXMgJiYgY3JlYXRlKVxuICAgICAgICAgICAgcmVzID0ge307XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbC5wcm90b3R5cGUuZ2V0QWRkUm93QnV0dG9uQ3NzID0gZnVuY3Rpb24gKGlzRW1wdHlTZWN0aW9uKSB7XG4gICAgICAgIGlmIChpc0VtcHR5U2VjdGlvbiA9PT0gdm9pZCAwKSB7IGlzRW1wdHlTZWN0aW9uID0gZmFsc2U7IH1cbiAgICAgICAgcmV0dXJuIG5ldyBfdXRpbHNfY3NzQ2xhc3NCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bXCJDc3NDbGFzc0J1aWxkZXJcIl0oKVxuICAgICAgICAgICAgLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMuYnV0dG9uKVxuICAgICAgICAgICAgLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMuYnV0dG9uQWRkKVxuICAgICAgICAgICAgLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMuZW1wdHlSb3dzQnV0dG9uLCBpc0VtcHR5U2VjdGlvbilcbiAgICAgICAgICAgIC50b1N0cmluZygpO1xuICAgIH07XG4gICAgUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWwucHJvdG90eXBlLmdldFJlbW92ZVJvd0J1dHRvbkNzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBfdXRpbHNfY3NzQ2xhc3NCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bXCJDc3NDbGFzc0J1aWxkZXJcIl0oKVxuICAgICAgICAgICAgLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMuYnV0dG9uKVxuICAgICAgICAgICAgLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMuYnV0dG9uUmVtb3ZlKVxuICAgICAgICAgICAgLnRvU3RyaW5nKCk7XG4gICAgfTtcbiAgICBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbC5wcm90b3R5cGUuZ2V0Um9vdENzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gbmV3IF91dGlsc19jc3NDbGFzc0J1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1tcIkNzc0NsYXNzQnVpbGRlclwiXSgpLmFwcGVuZChfc3VwZXIucHJvdG90eXBlLmdldFJvb3RDc3MuY2FsbCh0aGlzKSkuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5lbXB0eSwgISgoX2EgPSB0aGlzLnJlbmRlcmVkVGFibGUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zaG93VGFibGUpKS50b1N0cmluZygpO1xuICAgIH07XG4gICAgcmV0dXJuIFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsO1xufShfcXVlc3Rpb25fbWF0cml4ZHJvcGRvd25iYXNlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlXCJdKSk7XG5cbnZhciBRdWVzdGlvbk1hdHJpeER5bmFtaWNSZW5kZXJlZFRhYmxlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhRdWVzdGlvbk1hdHJpeER5bmFtaWNSZW5kZXJlZFRhYmxlLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFF1ZXN0aW9uTWF0cml4RHluYW1pY1JlbmRlcmVkVGFibGUoKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICB9XG4gICAgUXVlc3Rpb25NYXRyaXhEeW5hbWljUmVuZGVyZWRUYWJsZS5wcm90b3R5cGUuc2V0RGVmYXVsdFJvd0FjdGlvbnMgPSBmdW5jdGlvbiAocm93LCBhY3Rpb25zKSB7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUuc2V0RGVmYXVsdFJvd0FjdGlvbnMuY2FsbCh0aGlzLCByb3csIGFjdGlvbnMpO1xuICAgIH07XG4gICAgcmV0dXJuIFF1ZXN0aW9uTWF0cml4RHluYW1pY1JlbmRlcmVkVGFibGU7XG59KF9xdWVzdGlvbl9tYXRyaXhkcm9wZG93bnJlbmRlcmVkX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bXCJRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRUYWJsZVwiXSkpO1xuX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlNlcmlhbGl6ZXJcIl0uYWRkQ2xhc3MoXCJtYXRyaXhkeW5hbWljXCIsIFtcbiAgICB7IG5hbWU6IFwicm93c1Zpc2libGVJZjpjb25kaXRpb25cIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwiYWxsb3dBZGRSb3dzOmJvb2xlYW5cIiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIHsgbmFtZTogXCJhbGxvd1JlbW92ZVJvd3M6Ym9vbGVhblwiLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgeyBuYW1lOiBcInJvd0NvdW50Om51bWJlclwiLCBkZWZhdWx0OiAyLCBtaW5WYWx1ZTogMCwgaXNCaW5kYWJsZTogdHJ1ZSB9LFxuICAgIHsgbmFtZTogXCJtaW5Sb3dDb3VudDpudW1iZXJcIiwgZGVmYXVsdDogMCwgbWluVmFsdWU6IDAgfSxcbiAgICB7XG4gICAgICAgIG5hbWU6IFwibWF4Um93Q291bnQ6bnVtYmVyXCIsXG4gICAgICAgIGRlZmF1bHQ6IF9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fW1wic2V0dGluZ3NcIl0ubWF0cml4Lm1heFJvd0NvdW50LFxuICAgIH0sXG4gICAgeyBuYW1lOiBcImtleU5hbWVcIiB9LFxuICAgIFwiZGVmYXVsdFJvd1ZhbHVlOnJvd3ZhbHVlXCIsXG4gICAgXCJkZWZhdWx0VmFsdWVGcm9tTGFzdFJvdzpib29sZWFuXCIsXG4gICAgeyBuYW1lOiBcImNvbmZpcm1EZWxldGU6Ym9vbGVhblwiIH0sXG4gICAge1xuICAgICAgICBuYW1lOiBcImNvbmZpcm1EZWxldGVUZXh0XCIsXG4gICAgICAgIGRlcGVuZHNPbjogXCJjb25maXJtRGVsZXRlXCIsXG4gICAgICAgIHZpc2libGVJZjogZnVuY3Rpb24gKG9iaikge1xuICAgICAgICAgICAgcmV0dXJuICFvYmogfHwgb2JqLmNvbmZpcm1EZWxldGU7XG4gICAgICAgIH0sXG4gICAgICAgIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NDb25maXJtRGVsZXRlVGV4dFwiLFxuICAgIH0sXG4gICAge1xuICAgICAgICBuYW1lOiBcImFkZFJvd0xvY2F0aW9uXCIsXG4gICAgICAgIGRlZmF1bHQ6IFwiZGVmYXVsdFwiLFxuICAgICAgICBjaG9pY2VzOiBbXCJkZWZhdWx0XCIsIFwidG9wXCIsIFwiYm90dG9tXCIsIFwidG9wQm90dG9tXCJdLFxuICAgIH0sXG4gICAgeyBuYW1lOiBcImFkZFJvd1RleHRcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY0FkZFJvd1RleHRcIiB9LFxuICAgIHsgbmFtZTogXCJyZW1vdmVSb3dUZXh0XCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NSZW1vdmVSb3dUZXh0XCIgfSxcbiAgICBcImhpZGVDb2x1bW5zSWZFbXB0eTpib29sZWFuXCIsXG4gICAge1xuICAgICAgICBuYW1lOiBcImVtcHR5Um93c1RleHQ6dGV4dFwiLFxuICAgICAgICBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jRW1wdHlSb3dzVGV4dFwiLFxuICAgICAgICBkZXBlbmRzT246IFwiaGlkZUNvbHVtbnNJZkVtcHR5XCIsXG4gICAgICAgIHZpc2libGVJZjogZnVuY3Rpb24gKG9iaikge1xuICAgICAgICAgICAgcmV0dXJuICFvYmogfHwgb2JqLmhpZGVDb2x1bW5zSWZFbXB0eTtcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgICAgbmFtZTogXCJkZXRhaWxQYW5lbFNob3dPbkFkZGluZzpib29sZWFuXCIsXG4gICAgICAgIGRlcGVuZHNPbjogXCJkZXRhaWxQYW5lbE1vZGVcIixcbiAgICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICByZXR1cm4gb2JqLmRldGFpbFBhbmVsTW9kZSAhPT0gXCJub25lXCI7XG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBcImFsbG93Um93c0RyYWdBbmREcm9wOnN3aXRjaFwiXG5dLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbChcIlwiKTtcbn0sIFwibWF0cml4ZHJvcGRvd25iYXNlXCIpO1xuX3F1ZXN0aW9uZmFjdG9yeV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiUXVlc3Rpb25GYWN0b3J5XCJdLkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJtYXRyaXhkeW5hbWljXCIsIGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdmFyIHEgPSBuZXcgUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWwobmFtZSk7XG4gICAgcS5jaG9pY2VzID0gWzEsIDIsIDMsIDQsIDVdO1xuICAgIF9xdWVzdGlvbl9tYXRyaXhkcm9wZG93bmJhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIlF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2VcIl0uYWRkRGVmYXVsdENvbHVtbnMocSk7XG4gICAgcmV0dXJuIHE7XG59KTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9xdWVzdGlvbl9tdWx0aXBsZXRleHQudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3F1ZXN0aW9uX211bHRpcGxldGV4dC50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogTXVsdGlwbGVUZXh0RWRpdG9yTW9kZWwsIE11bHRpcGxlVGV4dEl0ZW1Nb2RlbCwgUXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbCwgTXV0bGlwbGVUZXh0Um93LCBNdXRsaXBsZVRleHRFcnJvclJvdywgTXVsdGlwbGVUZXh0Q2VsbCwgTXVsdGlwbGVUZXh0RXJyb3JDZWxsICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIk11bHRpcGxlVGV4dEVkaXRvck1vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gTXVsdGlwbGVUZXh0RWRpdG9yTW9kZWw7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIk11bHRpcGxlVGV4dEl0ZW1Nb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIE11bHRpcGxlVGV4dEl0ZW1Nb2RlbDsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFF1ZXN0aW9uTXVsdGlwbGVUZXh0TW9kZWw7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIk11dGxpcGxlVGV4dFJvd1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIE11dGxpcGxlVGV4dFJvdzsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiTXV0bGlwbGVUZXh0RXJyb3JSb3dcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBNdXRsaXBsZVRleHRFcnJvclJvdzsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiTXVsdGlwbGVUZXh0Q2VsbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIE11bHRpcGxlVGV4dENlbGw7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIk11bHRpcGxlVGV4dEVycm9yQ2VsbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIE11bHRpcGxlVGV4dEVycm9yQ2VsbDsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Jhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYmFzZSAqLyBcIi4vc3JjL2Jhc2UudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3N1cnZleV9lbGVtZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3N1cnZleS1lbGVtZW50ICovIFwiLi9zcmMvc3VydmV5LWVsZW1lbnQudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3F1ZXN0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3F1ZXN0aW9uICovIFwiLi9zcmMvcXVlc3Rpb24udHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3F1ZXN0aW9uX3RleHRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcXVlc3Rpb25fdGV4dCAqLyBcIi4vc3JjL3F1ZXN0aW9uX3RleHQudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vanNvbm9iamVjdCAqLyBcIi4vc3JjL2pzb25vYmplY3QudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3F1ZXN0aW9uZmFjdG9yeV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9xdWVzdGlvbmZhY3RvcnkgKi8gXCIuL3NyYy9xdWVzdGlvbmZhY3RvcnkudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2hlbHBlcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vaGVscGVycyAqLyBcIi4vc3JjL2hlbHBlcnMudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3V0aWxzX2Nzc0NsYXNzQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi91dGlscy9jc3NDbGFzc0J1aWxkZXIgKi8gXCIuL3NyYy91dGlscy9jc3NDbGFzc0J1aWxkZXIudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NldHRpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3NldHRpbmdzICovIFwiLi9zcmMvc2V0dGluZ3MudHNcIik7XG52YXIgX19leHRlbmRzID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbnZhciBfX2RlY29yYXRlID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn07XG5cblxuXG5cblxuXG5cblxuXG52YXIgTXVsdGlwbGVUZXh0RWRpdG9yTW9kZWwgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKE11bHRpcGxlVGV4dEVkaXRvck1vZGVsLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIE11bHRpcGxlVGV4dEVkaXRvck1vZGVsKCkge1xuICAgICAgICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNdWx0aXBsZVRleHRFZGl0b3JNb2RlbC5wcm90b3R5cGUsIFwiYTExeV9pbnB1dF9hcmlhTGFiZWxcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY1RpdGxlLnJlbmRlcmVkSHRtbDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNdWx0aXBsZVRleHRFZGl0b3JNb2RlbC5wcm90b3R5cGUsIFwiYTExeV9pbnB1dF9hcmlhTGFiZWxsZWRCeVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICByZXR1cm4gTXVsdGlwbGVUZXh0RWRpdG9yTW9kZWw7XG59KF9xdWVzdGlvbl90ZXh0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJRdWVzdGlvblRleHRNb2RlbFwiXSkpO1xuXG4vKipcbiAqIEEgY2xhc3MgdGhhdCBkZXNjcmliZXMgYW4gaXRlbSBpbiBhIFtNdWx0aXBsZSBUZXh0Ym94ZXNdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vYXBpLXJlZmVyZW5jZS9tdWx0aXBsZS10ZXh0LWVudHJ5LXF1ZXN0aW9uLW1vZGVsKSBxdWVzdGlvbi5cbiAqXG4gKiBbVmlldyBEZW1vXSgvZm9ybS1saWJyYXJ5L2V4YW1wbGVzL211bHRpcGxlLXRleHQtYm94LXF1ZXN0aW9uLylcbiAqL1xudmFyIE11bHRpcGxlVGV4dEl0ZW1Nb2RlbCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoTXVsdGlwbGVUZXh0SXRlbU1vZGVsLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIE11bHRpcGxlVGV4dEl0ZW1Nb2RlbChuYW1lLCB0aXRsZSkge1xuICAgICAgICBpZiAobmFtZSA9PT0gdm9pZCAwKSB7IG5hbWUgPSBudWxsOyB9XG4gICAgICAgIGlmICh0aXRsZSA9PT0gdm9pZCAwKSB7IHRpdGxlID0gbnVsbDsgfVxuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5mb2N1c0luID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMuZWRpdG9yLmZvY3VzSW4oKTtcbiAgICAgICAgfTtcbiAgICAgICAgX3RoaXMuZWRpdG9yVmFsdWUgPSBfdGhpcy5jcmVhdGVFZGl0b3IobmFtZSk7XG4gICAgICAgIF90aGlzLmVkaXRvci5xdWVzdGlvblRpdGxlVGVtcGxhdGVDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICB9O1xuICAgICAgICBfdGhpcy5lZGl0b3IudGl0bGVMb2NhdGlvbiA9IFwibGVmdFwiO1xuICAgICAgICBpZiAodGl0bGUpIHtcbiAgICAgICAgICAgIF90aGlzLnRpdGxlID0gdGl0bGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBNdWx0aXBsZVRleHRJdGVtTW9kZWwucHJvdG90eXBlLmdldFR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBcIm11bHRpcGxldGV4dGl0ZW1cIjtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNdWx0aXBsZVRleHRJdGVtTW9kZWwucHJvdG90eXBlLCBcImlkXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3IuaWQ7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBNdWx0aXBsZVRleHRJdGVtTW9kZWwucHJvdG90eXBlLmdldE9yaWdpbmFsT2JqID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3I7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTXVsdGlwbGVUZXh0SXRlbU1vZGVsLnByb3RvdHlwZSwgXCJuYW1lXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSBpdGVtIG5hbWUuXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVkaXRvci5uYW1lO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yLm5hbWUgPSB2YWw7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTXVsdGlwbGVUZXh0SXRlbU1vZGVsLnByb3RvdHlwZSwgXCJxdWVzdGlvblwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNdWx0aXBsZVRleHRJdGVtTW9kZWwucHJvdG90eXBlLCBcImVkaXRvclwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yVmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBNdWx0aXBsZVRleHRJdGVtTW9kZWwucHJvdG90eXBlLmNyZWF0ZUVkaXRvciA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIHJldHVybiBuZXcgTXVsdGlwbGVUZXh0RWRpdG9yTW9kZWwobmFtZSk7XG4gICAgfTtcbiAgICBNdWx0aXBsZVRleHRJdGVtTW9kZWwucHJvdG90eXBlLmFkZFVzZWRMb2NhbGVzID0gZnVuY3Rpb24gKGxvY2FsZXMpIHtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5hZGRVc2VkTG9jYWxlcy5jYWxsKHRoaXMsIGxvY2FsZXMpO1xuICAgICAgICB0aGlzLmVkaXRvci5hZGRVc2VkTG9jYWxlcyhsb2NhbGVzKTtcbiAgICB9O1xuICAgIE11bHRpcGxlVGV4dEl0ZW1Nb2RlbC5wcm90b3R5cGUubG9jYWxlQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5sb2NhbGVDaGFuZ2VkLmNhbGwodGhpcyk7XG4gICAgICAgIHRoaXMuZWRpdG9yLmxvY2FsZUNoYW5nZWQoKTtcbiAgICB9O1xuICAgIE11bHRpcGxlVGV4dEl0ZW1Nb2RlbC5wcm90b3R5cGUubG9jU3Ryc0NoYW5nZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUubG9jU3Ryc0NoYW5nZWQuY2FsbCh0aGlzKTtcbiAgICAgICAgdGhpcy5lZGl0b3IubG9jU3Ryc0NoYW5nZWQoKTtcbiAgICB9O1xuICAgIE11bHRpcGxlVGV4dEl0ZW1Nb2RlbC5wcm90b3R5cGUuc2V0RGF0YSA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgICAgIGlmICghIWRhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yLmRlZmF1bHRWYWx1ZSA9IGRhdGEuZ2V0SXRlbURlZmF1bHRWYWx1ZSh0aGlzLm5hbWUpO1xuICAgICAgICAgICAgdGhpcy5lZGl0b3Iuc2V0U3VydmV5SW1wbCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yLnBhcmVudCA9IGRhdGE7XG4gICAgICAgICAgICB0aGlzLmVkaXRvci5zZXRQYXJlbnRRdWVzdGlvbihkYXRhKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE11bHRpcGxlVGV4dEl0ZW1Nb2RlbC5wcm90b3R5cGUsIFwiaXNSZXF1aXJlZFwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSB0byB0cnVlLCB0byBtYWtlIHRoZSBpdGVtIGEgcmVxdWlyZWQuIElmIGEgdXNlciBkb2Vzbid0IGZpbGwgdGhlIGl0ZW0gdGhlbiBhIHZhbGlkYXRpb24gZXJyb3Igd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVkaXRvci5pc1JlcXVpcmVkO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yLmlzUmVxdWlyZWQgPSB2YWw7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTXVsdGlwbGVUZXh0SXRlbU1vZGVsLnByb3RvdHlwZSwgXCJpbnB1dFR5cGVcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogVXNlIHRoaXMgcHJvcGVydHkgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IGlucHV0IHR5cGUuXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVkaXRvci5pbnB1dFR5cGU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5lZGl0b3IuaW5wdXRUeXBlID0gdmFsO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE11bHRpcGxlVGV4dEl0ZW1Nb2RlbC5wcm90b3R5cGUsIFwidGl0bGVcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogSXRlbSB0aXRsZS4gSWYgaXQgaXMgZW1wdHksIHRoZSBpdGVtIG5hbWUgaXMgcmVuZGVyZWQgYXMgdGl0bGUuIFRoaXMgcHJvcGVydHkgc3VwcG9ydHMgbWFya2Rvd24uXG4gICAgICAgICAqIEBzZWUgbmFtZVxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3IudGl0bGU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5lZGl0b3IudGl0bGUgPSB2YWw7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTXVsdGlwbGVUZXh0SXRlbU1vZGVsLnByb3RvdHlwZSwgXCJsb2NUaXRsZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yLmxvY1RpdGxlO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE11bHRpcGxlVGV4dEl0ZW1Nb2RlbC5wcm90b3R5cGUsIFwiZnVsbFRpdGxlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3IuZnVsbFRpdGxlO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE11bHRpcGxlVGV4dEl0ZW1Nb2RlbC5wcm90b3R5cGUsIFwibWF4TGVuZ3RoXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSBtYXhpbXVtIHRleHQgbGVuZ3RoLiBJZiBpdCBpcyAtMSwgZGVmYXVsIHZhbHVlLCB0aGVuIHRoZSBzdXJ2ZXkgbWF4VGV4dExlbmd0aCBwcm9wZXJ0eSB3aWxsIGJlIHVzZWQuXG4gICAgICAgICAqIElmIGl0IGlzIDAsIHRoZW4gdGhlIHZhbHVlIGlzIHVubGltaXRlZFxuICAgICAgICAgKiBAc2VlIFN1cnZleU1vZGVsLm1heFRleHRMZW5ndGhcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yLm1heExlbmd0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLmVkaXRvci5tYXhMZW5ndGggPSB2YWw7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBNdWx0aXBsZVRleHRJdGVtTW9kZWwucHJvdG90eXBlLmdldE1heExlbmd0aCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHN1cnZleSA9IHRoaXMuZ2V0U3VydmV5KCk7XG4gICAgICAgIHJldHVybiBfaGVscGVyc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fW1wiSGVscGVyc1wiXS5nZXRNYXhMZW5ndGgodGhpcy5tYXhMZW5ndGgsIHN1cnZleSA/IHN1cnZleS5tYXhUZXh0TGVuZ3RoIDogLTEpO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE11bHRpcGxlVGV4dEl0ZW1Nb2RlbC5wcm90b3R5cGUsIFwicGxhY2Vob2xkZXJcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogVGhlIGlucHV0IHBsYWNlIGhvbGRlci5cbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yLnBsYWNlaG9sZGVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yLnBsYWNlaG9sZGVyID0gdmFsO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE11bHRpcGxlVGV4dEl0ZW1Nb2RlbC5wcm90b3R5cGUsIFwibG9jUGxhY2Vob2xkZXJcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVkaXRvci5sb2NQbGFjZWhvbGRlcjtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNdWx0aXBsZVRleHRJdGVtTW9kZWwucHJvdG90eXBlLCBcInBsYWNlSG9sZGVyXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wbGFjZWhvbGRlcjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnBsYWNlaG9sZGVyID0gdmFsO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE11bHRpcGxlVGV4dEl0ZW1Nb2RlbC5wcm90b3R5cGUsIFwibG9jUGxhY2VIb2xkZXJcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY1BsYWNlaG9sZGVyO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE11bHRpcGxlVGV4dEl0ZW1Nb2RlbC5wcm90b3R5cGUsIFwicmVxdWlyZWRFcnJvclRleHRcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogVGhlIGN1c3RvbSB0ZXh0IHRoYXQgd2lsbCBiZSBzaG93biBvbiByZXF1aXJlZCBlcnJvci4gVXNlIHRoaXMgcHJvcGVydHksIGlmIHlvdSBkbyBub3Qgd2FudCB0byBzaG93IHRoZSBkZWZhdWx0IHRleHQuXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVkaXRvci5yZXF1aXJlZEVycm9yVGV4dDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLmVkaXRvci5yZXF1aXJlZEVycm9yVGV4dCA9IHZhbDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNdWx0aXBsZVRleHRJdGVtTW9kZWwucHJvdG90eXBlLCBcImxvY1JlcXVpcmVkRXJyb3JUZXh0XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3IubG9jUmVxdWlyZWRFcnJvclRleHQ7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTXVsdGlwbGVUZXh0SXRlbU1vZGVsLnByb3RvdHlwZSwgXCJzaXplXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSBpbnB1dCBzaXplLlxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3Iuc2l6ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLmVkaXRvci5zaXplID0gdmFsO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE11bHRpcGxlVGV4dEl0ZW1Nb2RlbC5wcm90b3R5cGUsIFwidmFsaWRhdG9yc1wiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgbGlzdCBvZiBxdWVzdGlvbiB2YWxpZGF0b3JzLlxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3IudmFsaWRhdG9ycztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLmVkaXRvci52YWxpZGF0b3JzID0gdmFsO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgTXVsdGlwbGVUZXh0SXRlbU1vZGVsLnByb3RvdHlwZS5nZXRWYWxpZGF0b3JzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWxpZGF0b3JzO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE11bHRpcGxlVGV4dEl0ZW1Nb2RlbC5wcm90b3R5cGUsIFwidmFsdWVcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogVGhlIGl0ZW0gdmFsdWUuXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGEgPyB0aGlzLmRhdGEuZ2V0TXVsdGlwbGVUZXh0VmFsdWUodGhpcy5uYW1lKSA6IG51bGw7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5kYXRhICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEuc2V0TXVsdGlwbGVUZXh0VmFsdWUodGhpcy5uYW1lLCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBNdWx0aXBsZVRleHRJdGVtTW9kZWwucHJvdG90eXBlLmlzRW1wdHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvci5pc0VtcHR5KCk7XG4gICAgfTtcbiAgICBNdWx0aXBsZVRleHRJdGVtTW9kZWwucHJvdG90eXBlLm9uVmFsdWVDaGFuZ2VkID0gZnVuY3Rpb24gKG5ld1ZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLnZhbHVlQ2hhbmdlZENhbGxiYWNrKVxuICAgICAgICAgICAgdGhpcy52YWx1ZUNoYW5nZWRDYWxsYmFjayhuZXdWYWx1ZSk7XG4gICAgfTtcbiAgICAvL0lTdXJ2ZXlJbXBsXG4gICAgTXVsdGlwbGVUZXh0SXRlbU1vZGVsLnByb3RvdHlwZS5nZXRTdXJ2ZXlEYXRhID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIE11bHRpcGxlVGV4dEl0ZW1Nb2RlbC5wcm90b3R5cGUuZ2V0U3VydmV5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhID8gdGhpcy5kYXRhLmdldFN1cnZleSgpIDogbnVsbDtcbiAgICB9O1xuICAgIE11bHRpcGxlVGV4dEl0ZW1Nb2RlbC5wcm90b3R5cGUuZ2V0VGV4dFByb2Nlc3NvciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YSA/IHRoaXMuZGF0YS5nZXRUZXh0UHJvY2Vzc29yKCkgOiBudWxsO1xuICAgIH07XG4gICAgLy9JU3VydmV5RGF0YVxuICAgIE11bHRpcGxlVGV4dEl0ZW1Nb2RlbC5wcm90b3R5cGUuZ2V0VmFsdWUgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICBpZiAoIXRoaXMuZGF0YSlcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLmdldE11bHRpcGxlVGV4dFZhbHVlKG5hbWUpO1xuICAgIH07XG4gICAgTXVsdGlwbGVUZXh0SXRlbU1vZGVsLnByb3RvdHlwZS5zZXRWYWx1ZSA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEuc2V0TXVsdGlwbGVUZXh0VmFsdWUobmFtZSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBNdWx0aXBsZVRleHRJdGVtTW9kZWwucHJvdG90eXBlLmdldFZhcmlhYmxlID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIE11bHRpcGxlVGV4dEl0ZW1Nb2RlbC5wcm90b3R5cGUuc2V0VmFyaWFibGUgPSBmdW5jdGlvbiAobmFtZSwgbmV3VmFsdWUpIHsgfTtcbiAgICBNdWx0aXBsZVRleHRJdGVtTW9kZWwucHJvdG90eXBlLmdldENvbW1lbnQgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICAgIE11bHRpcGxlVGV4dEl0ZW1Nb2RlbC5wcm90b3R5cGUuc2V0Q29tbWVudCA9IGZ1bmN0aW9uIChuYW1lLCBuZXdWYWx1ZSkgeyB9O1xuICAgIE11bHRpcGxlVGV4dEl0ZW1Nb2RlbC5wcm90b3R5cGUuZ2V0QWxsVmFsdWVzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5kYXRhKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5nZXRBbGxWYWx1ZXMoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gICAgfTtcbiAgICBNdWx0aXBsZVRleHRJdGVtTW9kZWwucHJvdG90eXBlLmdldEZpbHRlcmVkVmFsdWVzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRBbGxWYWx1ZXMoKTtcbiAgICB9O1xuICAgIE11bHRpcGxlVGV4dEl0ZW1Nb2RlbC5wcm90b3R5cGUuZ2V0RmlsdGVyZWRQcm9wZXJ0aWVzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4geyBzdXJ2ZXk6IHRoaXMuZ2V0U3VydmV5KCkgfTtcbiAgICB9O1xuICAgIE11bHRpcGxlVGV4dEl0ZW1Nb2RlbC5wcm90b3R5cGUuZmluZFF1ZXN0aW9uQnlOYW1lID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgdmFyIHN1cnZleSA9IHRoaXMuZ2V0U3VydmV5KCk7XG4gICAgICAgIHJldHVybiAhIXN1cnZleSA/IHN1cnZleS5nZXRRdWVzdGlvbkJ5TmFtZShuYW1lKSA6IG51bGw7XG4gICAgfTtcbiAgICAvL0lWYWxpZGF0b3JPd25lclxuICAgIE11bHRpcGxlVGV4dEl0ZW1Nb2RlbC5wcm90b3R5cGUuZ2V0VmFsaWRhdG9yVGl0bGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRpdGxlO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE11bHRpcGxlVGV4dEl0ZW1Nb2RlbC5wcm90b3R5cGUsIFwidmFsaWRhdGVkVmFsdWVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWw7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBNdWx0aXBsZVRleHRJdGVtTW9kZWwucHJvdG90eXBlLmdldERhdGFGaWx0ZXJlZFZhbHVlcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RmlsdGVyZWRWYWx1ZXMoKTtcbiAgICB9O1xuICAgIE11bHRpcGxlVGV4dEl0ZW1Nb2RlbC5wcm90b3R5cGUuZ2V0RGF0YUZpbHRlcmVkUHJvcGVydGllcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RmlsdGVyZWRQcm9wZXJ0aWVzKCk7XG4gICAgfTtcbiAgICByZXR1cm4gTXVsdGlwbGVUZXh0SXRlbU1vZGVsO1xufShfYmFzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiQmFzZVwiXSkpO1xuXG4vKipcbiAqIEEgY2xhc3MgdGhhdCBkZXNjcmliZXMgdGhlIE11bHRpcGxlIFRleHQgcXVlc3Rpb24gdHlwZS5cbiAqXG4gKiBbVmlldyBEZW1vXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9leGFtcGxlcy9xdWVzdGlvbnR5cGUtbXVsdGlwbGV0ZXh0LyAobGlua1N0eWxlKSlcbiAqL1xudmFyIFF1ZXN0aW9uTXVsdGlwbGVUZXh0TW9kZWwgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFF1ZXN0aW9uTXVsdGlwbGVUZXh0TW9kZWwsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gUXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbChuYW1lKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG5hbWUpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmlzTXVsdGlwbGVJdGVtVmFsdWVDaGFuZ2luZyA9IGZhbHNlO1xuICAgICAgICBfdGhpcy5jcmVhdGVOZXdBcnJheShcIml0ZW1zXCIsIGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgICBpdGVtLnNldERhdGEoX3RoaXMpO1xuICAgICAgICAgICAgaWYgKF90aGlzLnN1cnZleSkge1xuICAgICAgICAgICAgICAgIF90aGlzLnN1cnZleS5tdWx0aXBsZVRleHRJdGVtQWRkZWQoX3RoaXMsIGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgX3RoaXMucmVnaXN0ZXJQcm9wZXJ0eUNoYW5nZWRIYW5kbGVycyhbXCJpdGVtc1wiLCBcImNvbENvdW50XCIsIFwiaXRlbUVycm9yTG9jYXRpb25cIl0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLmNhbGNWaXNpYmxlUm93cygpO1xuICAgICAgICB9KTtcbiAgICAgICAgX3RoaXMucmVnaXN0ZXJQcm9wZXJ0eUNoYW5nZWRIYW5kbGVycyhbXCJpdGVtU2l6ZVwiXSwgZnVuY3Rpb24gKCkgeyBfdGhpcy51cGRhdGVJdGVtc1NpemUoKTsgfSk7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgUXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbC5hZGREZWZhdWx0SXRlbXMgPSBmdW5jdGlvbiAocXVlc3Rpb24pIHtcbiAgICAgICAgdmFyIG5hbWVzID0gX3F1ZXN0aW9uZmFjdG9yeV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fW1wiUXVlc3Rpb25GYWN0b3J5XCJdLkRlZmF1bHRNdXRsaXBsZVRleHRJdGVtcztcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIHF1ZXN0aW9uLmFkZEl0ZW0obmFtZXNbaV0pO1xuICAgIH07XG4gICAgUXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbC5wcm90b3R5cGUuZ2V0VHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIFwibXVsdGlwbGV0ZXh0XCI7XG4gICAgfTtcbiAgICBRdWVzdGlvbk11bHRpcGxlVGV4dE1vZGVsLnByb3RvdHlwZS5zZXRTdXJ2ZXlJbXBsID0gZnVuY3Rpb24gKHZhbHVlLCBpc0xpZ2h0KSB7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUuc2V0U3VydmV5SW1wbC5jYWxsKHRoaXMsIHZhbHVlLCBpc0xpZ2h0KTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLml0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLnNldERhdGEodGhpcyk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbk11bHRpcGxlVGV4dE1vZGVsLnByb3RvdHlwZSwgXCJpc0FsbG93VGl0bGVMZWZ0XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbC5wcm90b3R5cGUsIFwiaGFzU2luZ2xlSW5wdXRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZhbHNlOyB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uTXVsdGlwbGVUZXh0TW9kZWwucHJvdG90eXBlLCBcImlzQ29udGFpbmVyXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0cnVlOyB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uTXVsdGlwbGVUZXh0TW9kZWwucHJvdG90eXBlLCBcImlkXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaWRcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgKF9hID0gdGhpcy5pdGVtcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm1hcChmdW5jdGlvbiAoaXRlbSwgaW5kZXgpIHsgcmV0dXJuIGl0ZW0uZWRpdG9yLmlkID0gdmFsICsgXCJfXCIgKyBpbmRleDsgfSk7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpZFwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbC5wcm90b3R5cGUub25TdXJ2ZXlMb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmVkaXRvcnNPblN1cnZleUxvYWQoKTtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5vblN1cnZleUxvYWQuY2FsbCh0aGlzKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uTXVsdGlwbGVUZXh0TW9kZWwucHJvdG90eXBlLnNldFF1ZXN0aW9uVmFsdWUgPSBmdW5jdGlvbiAobmV3VmFsdWUsIHVwZGF0ZUlzQW5zd2VyZWQpIHtcbiAgICAgICAgaWYgKHVwZGF0ZUlzQW5zd2VyZWQgPT09IHZvaWQgMCkgeyB1cGRhdGVJc0Fuc3dlcmVkID0gdHJ1ZTsgfVxuICAgICAgICBfc3VwZXIucHJvdG90eXBlLnNldFF1ZXN0aW9uVmFsdWUuY2FsbCh0aGlzLCBuZXdWYWx1ZSwgdXBkYXRlSXNBbnN3ZXJlZCk7XG4gICAgICAgIHRoaXMucGVyZm9ybUZvckV2ZXJ5RWRpdG9yKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgICBpdGVtLmVkaXRvci51cGRhdGVWYWx1ZUZyb21TdXJ2ZXkoaXRlbS52YWx1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnVwZGF0ZUlzQW5zd2VyZWQoKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uTXVsdGlwbGVUZXh0TW9kZWwucHJvdG90eXBlLm9uU3VydmV5VmFsdWVDaGFuZ2VkID0gZnVuY3Rpb24gKG5ld1ZhbHVlKSB7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUub25TdXJ2ZXlWYWx1ZUNoYW5nZWQuY2FsbCh0aGlzLCBuZXdWYWx1ZSk7XG4gICAgICAgIHRoaXMucGVyZm9ybUZvckV2ZXJ5RWRpdG9yKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgICBpdGVtLmVkaXRvci5vblN1cnZleVZhbHVlQ2hhbmdlZChpdGVtLnZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBRdWVzdGlvbk11bHRpcGxlVGV4dE1vZGVsLnByb3RvdHlwZS51cGRhdGVJdGVtc1NpemUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMucGVyZm9ybUZvckV2ZXJ5RWRpdG9yKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgICBpdGVtLmVkaXRvci51cGRhdGVJbnB1dFNpemUoKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBRdWVzdGlvbk11bHRpcGxlVGV4dE1vZGVsLnByb3RvdHlwZS5lZGl0b3JzT25TdXJ2ZXlMb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnBlcmZvcm1Gb3JFdmVyeUVkaXRvcihmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgICAgaXRlbS5lZGl0b3Iub25TdXJ2ZXlMb2FkKCk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgUXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbC5wcm90b3R5cGUucGVyZm9ybUZvckV2ZXJ5RWRpdG9yID0gZnVuY3Rpb24gKGZ1bmMpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLml0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgaXRlbSA9IHRoaXMuaXRlbXNbaV07XG4gICAgICAgICAgICBpZiAoaXRlbS5lZGl0b3IpIHtcbiAgICAgICAgICAgICAgICBmdW5jKGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbC5wcm90b3R5cGUsIFwiaXRlbXNcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogR2V0cyBvciBzZXRzIGFuIGFycmF5IG9mIGBNdWx0aXBsZVRleHRJdGVtTW9kZWxgIG9iamVjdHMgdGhhdCByZXByZXNlbnQgaW5wdXQgaXRlbXMuXG4gICAgICAgICAqXG4gICAgICAgICAqIFRoaXMgcHJvcGVydHkgYWNjZXB0cyBhbiBhcnJheSBvZiBvYmplY3RzIHdpdGggdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmU6XG4gICAgICAgICAqXG4gICAgICAgICAqIGBgYGpzXG4gICAgICAgICAqIHtcbiAgICAgICAgICogICBcIm5hbWVcIjogYW55LCAvLyBBIHVuaXF1ZSB2YWx1ZSB1c2VkIHRvIGlkZW50aWZ5IGFuIGlucHV0IGl0ZW0gYW5kIHNhdmUgYW4gaXRlbSB2YWx1ZSB0byBzdXJ2ZXkgcmVzdWx0cy5cbiAgICAgICAgICogICBcInRpdGxlXCI6IFN0cmluZyAvLyBBbiBpdGVtIGNhcHRpb24uIFdoZW4gYHRpdGxlYCBpcyB1bmRlZmluZWQsIGBuYW1lYCBpcyB1c2VkLiBUaGlzIHByb3BlcnR5IHN1cHBvcnRzIE1hcmtkb3duLlxuICAgICAgICAgKiB9XG4gICAgICAgICAqIGBgYFxuICAgICAgICAgKlxuICAgICAgICAgKiBUbyBlbmFibGUgTWFya2Rvd24gc3VwcG9ydCBmb3IgdGhlIGB0aXRsZWAgcHJvcGVydHksIGltcGxlbWVudCBNYXJrZG93bi10by1IVE1MIGNvbnZlcnNpb24gaW4gdGhlIFtvblRleHRNYXJrZG93bl0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL3N1cnZleS1kYXRhLW1vZGVsI29uVGV4dE1hcmtkb3duKSBldmVudCBoYW5kbGVyLiBGb3IgYW4gZXhhbXBsZSwgcmVmZXIgdG8gdGhlIGZvbGxvd2luZyBkZW1vOiBbQ29udmVydCBNYXJrZG93biB0byBIVE1MIHdpdGggU2hvd2Rvd25dKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2V4YW1wbGVzL2VkaXQtc3VydmV5LXF1ZXN0aW9ucy1tYXJrZG93bi8pLlxuICAgICAgICAgKiBAc2VlIGFkZEl0ZW1cbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIml0ZW1zXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIml0ZW1zXCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICAvKipcbiAgICAgKiBBZGRzIGEgbmV3IGlucHV0IGl0ZW0uXG4gICAgICogQHBhcmFtIG5hbWUgQW4gaXRlbSBuYW1lXG4gICAgICogQHBhcmFtIHRpdGxlIChPcHRpb25hbCkgQW4gaXRlbSB0aXRsZVxuICAgICAqIEBzZWUgaXRlbXNcbiAgICAgKi9cbiAgICBRdWVzdGlvbk11bHRpcGxlVGV4dE1vZGVsLnByb3RvdHlwZS5hZGRJdGVtID0gZnVuY3Rpb24gKG5hbWUsIHRpdGxlKSB7XG4gICAgICAgIGlmICh0aXRsZSA9PT0gdm9pZCAwKSB7IHRpdGxlID0gbnVsbDsgfVxuICAgICAgICB2YXIgaXRlbSA9IHRoaXMuY3JlYXRlVGV4dEl0ZW0obmFtZSwgdGl0bGUpO1xuICAgICAgICB0aGlzLml0ZW1zLnB1c2goaXRlbSk7XG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgIH07XG4gICAgUXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbC5wcm90b3R5cGUuZ2V0SXRlbUJ5TmFtZSA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXRlbXNbaV0ubmFtZSA9PSBuYW1lKVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLml0ZW1zW2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gICAgUXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbC5wcm90b3R5cGUuYWRkQ29uZGl0aW9uT2JqZWN0c0J5Q29udGV4dCA9IGZ1bmN0aW9uIChvYmplY3RzLCBjb250ZXh0KSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGl0ZW0gPSB0aGlzLml0ZW1zW2ldO1xuICAgICAgICAgICAgb2JqZWN0cy5wdXNoKHtcbiAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLmdldFZhbHVlTmFtZSgpICsgXCIuXCIgKyBpdGVtLm5hbWUsXG4gICAgICAgICAgICAgICAgdGV4dDogdGhpcy5wcm9jZXNzZWRUaXRsZSArIFwiLlwiICsgaXRlbS5mdWxsVGl0bGUsXG4gICAgICAgICAgICAgICAgcXVlc3Rpb246IHRoaXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgUXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbC5wcm90b3R5cGUuY29sbGVjdE5lc3RlZFF1ZXN0aW9uc0NvcmUgPSBmdW5jdGlvbiAocXVlc3Rpb25zLCB2aXNpYmxlT25seSkge1xuICAgICAgICB0aGlzLml0ZW1zLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHsgcmV0dXJuIGl0ZW0uZWRpdG9yLmNvbGxlY3ROZXN0ZWRRdWVzdGlvbnMocXVlc3Rpb25zLCB2aXNpYmxlT25seSk7IH0pO1xuICAgIH07XG4gICAgUXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbC5wcm90b3R5cGUuZ2V0Q29uZGl0aW9uSnNvbiA9IGZ1bmN0aW9uIChvcGVyYXRvciwgcGF0aCkge1xuICAgICAgICBpZiAob3BlcmF0b3IgPT09IHZvaWQgMCkgeyBvcGVyYXRvciA9IG51bGw7IH1cbiAgICAgICAgaWYgKHBhdGggPT09IHZvaWQgMCkgeyBwYXRoID0gbnVsbDsgfVxuICAgICAgICBpZiAoIXBhdGgpXG4gICAgICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5nZXRDb25kaXRpb25Kc29uLmNhbGwodGhpcyk7XG4gICAgICAgIHZhciBpdGVtID0gdGhpcy5nZXRJdGVtQnlOYW1lKHBhdGgpO1xuICAgICAgICBpZiAoIWl0ZW0pXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgdmFyIGpzb24gPSBuZXcgX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1tcIkpzb25PYmplY3RcIl0oKS50b0pzb25PYmplY3QoaXRlbSk7XG4gICAgICAgIGpzb25bXCJ0eXBlXCJdID0gXCJ0ZXh0XCI7XG4gICAgICAgIHJldHVybiBqc29uO1xuICAgIH07XG4gICAgUXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbC5wcm90b3R5cGUubG9jU3Ryc0NoYW5nZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUubG9jU3Ryc0NoYW5nZWQuY2FsbCh0aGlzKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLml0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLmxvY1N0cnNDaGFuZ2VkKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFF1ZXN0aW9uTXVsdGlwbGVUZXh0TW9kZWwucHJvdG90eXBlLmxvY2FsZUNoYW5nZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUubG9jYWxlQ2hhbmdlZC5jYWxsKHRoaXMpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0ubG9jYWxlQ2hhbmdlZCgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbC5wcm90b3R5cGUsIFwiaXRlbUVycm9yTG9jYXRpb25cIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHRoZSBlcnJvciBtZXNzYWdlIHBvc2l0aW9uIHJlbGF0aXZlIHRvIGluZGl2aWR1YWwgaW5wdXQgZmllbGRzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBQb3NzaWJsZSB2YWx1ZXM6XG4gICAgICAgICAqXG4gICAgICAgICAqIC0gYFwiZGVmYXVsdFwiYCAoZGVmYXVsdCkgLSBJbmhlcml0cyB0aGUgc2V0dGluZyBmcm9tIHRoZSBbYGVycm9yTG9jYXRpb25gXSgjZXJyb3JMb2NhdGlvbikgcHJvcGVydHkuXG4gICAgICAgICAqIC0gYFwidG9wXCJgIC0gRGlzcGxheXMgZXJyb3IgbWVzc2FnZXMgYWJvdmUgaW5wdXQgZmllbGRzLlxuICAgICAgICAgKiAtIGBcImJvdHRvbVwiYCAtIERpc3BsYXlzIGVycm9yIG1lc3NhZ2VzIGJlbG93IGlucHV0IGZpZWxkcy5cbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIml0ZW1FcnJvckxvY2F0aW9uXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIml0ZW1FcnJvckxvY2F0aW9uXCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBRdWVzdGlvbk11bHRpcGxlVGV4dE1vZGVsLnByb3RvdHlwZS5nZXRRdWVzdGlvbkVycm9yTG9jYXRpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLml0ZW1FcnJvckxvY2F0aW9uICE9PSBcImRlZmF1bHRcIilcbiAgICAgICAgICAgIHJldHVybiB0aGlzLml0ZW1FcnJvckxvY2F0aW9uO1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRFcnJvckxvY2F0aW9uKCk7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbC5wcm90b3R5cGUsIFwic2hvd0l0ZW1FcnJvck9uVG9wXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRRdWVzdGlvbkVycm9yTG9jYXRpb24oKSA9PSBcInRvcFwiO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uTXVsdGlwbGVUZXh0TW9kZWwucHJvdG90eXBlLCBcInNob3dJdGVtRXJyb3JPbkJvdHRvbVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UXVlc3Rpb25FcnJvckxvY2F0aW9uKCkgPT0gXCJib3R0b21cIjtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFF1ZXN0aW9uTXVsdGlwbGVUZXh0TW9kZWwucHJvdG90eXBlLmdldENoaWxkRXJyb3JMb2NhdGlvbiA9IGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRRdWVzdGlvbkVycm9yTG9jYXRpb24oKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uTXVsdGlwbGVUZXh0TW9kZWwucHJvdG90eXBlLmlzTmV3VmFsdWVDb3JyZWN0ID0gZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICByZXR1cm4gX2hlbHBlcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1tcIkhlbHBlcnNcIl0uaXNWYWx1ZU9iamVjdCh2YWwsIHRydWUpO1xuICAgIH07XG4gICAgUXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbC5wcm90b3R5cGUuc3VwcG9ydEdvTmV4dFBhZ2VBdXRvbWF0aWMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXRlbXNbaV0uaXNFbXB0eSgpKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbk11bHRpcGxlVGV4dE1vZGVsLnByb3RvdHlwZSwgXCJjb2xDb3VudFwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgbnVtYmVyIG9mIGNvbHVtbnMgdXNlZCB0byBhcnJhbmdlIGlucHV0IGl0ZW1zLiBBY2NlcHRzIHRoZSBmb2xsb3dpbmcgdmFsdWVzOiAxLCAyLCAzLCA0LCA1LlxuICAgICAgICAgKlxuICAgICAgICAgKiBEZWZhdWx0IHZhbHVlOiAxXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjb2xDb3VudFwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICBpZiAodmFsIDwgMSB8fCB2YWwgPiA1KVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNvbENvdW50XCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbC5wcm90b3R5cGUsIFwiaXRlbVNpemVcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogQSB2YWx1ZSBwYXNzZWQgb24gdG8gdGhlIFtgc2l6ZWBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvQXR0cmlidXRlcy9zaXplKSBhdHRyaWJ1dGUgb2YgdGhlIHVuZGVybHlpbmcgYDxpbnB1dD5gIGVsZW1lbnRzLlxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaXRlbVNpemVcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaXRlbVNpemVcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFF1ZXN0aW9uTXVsdGlwbGVUZXh0TW9kZWwucHJvdG90eXBlLm9uUm93Q3JlYXRlZCA9IGZ1bmN0aW9uIChyb3cpIHtcbiAgICAgICAgcmV0dXJuIHJvdztcbiAgICB9O1xuICAgIFF1ZXN0aW9uTXVsdGlwbGVUZXh0TW9kZWwucHJvdG90eXBlLmNhbGNWaXNpYmxlUm93cyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGNvbENvdW50ID0gdGhpcy5jb2xDb3VudDtcbiAgICAgICAgdmFyIGl0ZW1zID0gdGhpcy5pdGVtcztcbiAgICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgICAgdmFyIHJvdztcbiAgICAgICAgdmFyIGVycm9yUm93O1xuICAgICAgICB2YXIgcm93cyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoaW5kZXggPT0gMCkge1xuICAgICAgICAgICAgICAgIHJvdyA9IHRoaXMub25Sb3dDcmVhdGVkKG5ldyBNdXRsaXBsZVRleHRSb3coKSk7XG4gICAgICAgICAgICAgICAgZXJyb3JSb3cgPSB0aGlzLm9uUm93Q3JlYXRlZChuZXcgTXV0bGlwbGVUZXh0RXJyb3JSb3coKSk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2hvd0l0ZW1FcnJvck9uVG9wKSB7XG4gICAgICAgICAgICAgICAgICAgIHJvd3MucHVzaChlcnJvclJvdyk7XG4gICAgICAgICAgICAgICAgICAgIHJvd3MucHVzaChyb3cpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcm93cy5wdXNoKHJvdyk7XG4gICAgICAgICAgICAgICAgICAgIHJvd3MucHVzaChlcnJvclJvdyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcm93LmNlbGxzLnB1c2gobmV3IE11bHRpcGxlVGV4dENlbGwoaXRlbXNbaV0sIHRoaXMpKTtcbiAgICAgICAgICAgIGVycm9yUm93LmNlbGxzLnB1c2gobmV3IE11bHRpcGxlVGV4dEVycm9yQ2VsbChpdGVtc1tpXSwgdGhpcykpO1xuICAgICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgICAgIGlmIChpbmRleCA+PSBjb2xDb3VudCB8fCBpID09IGl0ZW1zLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICBpbmRleCA9IDA7XG4gICAgICAgICAgICAgICAgZXJyb3JSb3cub25BZnRlckNyZWF0ZWQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJvd3MgPSByb3dzO1xuICAgIH07XG4gICAgUXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbC5wcm90b3R5cGUuZ2V0Um93cyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKF9oZWxwZXJzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bXCJIZWxwZXJzXCJdLmlzVmFsdWVFbXB0eSh0aGlzLnJvd3MpKSB7XG4gICAgICAgICAgICB0aGlzLmNhbGNWaXNpYmxlUm93cygpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnJvd3M7XG4gICAgfTtcbiAgICBRdWVzdGlvbk11bHRpcGxlVGV4dE1vZGVsLnByb3RvdHlwZS5vblZhbHVlQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5vblZhbHVlQ2hhbmdlZC5jYWxsKHRoaXMpO1xuICAgICAgICB0aGlzLm9uSXRlbVZhbHVlQ2hhbmdlZCgpO1xuICAgIH07XG4gICAgUXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbC5wcm90b3R5cGUuY3JlYXRlVGV4dEl0ZW0gPSBmdW5jdGlvbiAobmFtZSwgdGl0bGUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBNdWx0aXBsZVRleHRJdGVtTW9kZWwobmFtZSwgdGl0bGUpO1xuICAgIH07XG4gICAgUXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbC5wcm90b3R5cGUub25JdGVtVmFsdWVDaGFuZ2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5pc011bHRpcGxlSXRlbVZhbHVlQ2hhbmdpbmcpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGl0ZW1WYWx1ZSA9IG51bGw7XG4gICAgICAgICAgICBpZiAodGhpcy52YWx1ZSAmJiB0aGlzLml0ZW1zW2ldLm5hbWUgaW4gdGhpcy52YWx1ZSkge1xuICAgICAgICAgICAgICAgIGl0ZW1WYWx1ZSA9IHRoaXMudmFsdWVbdGhpcy5pdGVtc1tpXS5uYW1lXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0ub25WYWx1ZUNoYW5nZWQoaXRlbVZhbHVlKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgUXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbC5wcm90b3R5cGUuZ2V0SXNSdW5uaW5nVmFsaWRhdG9ycyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKF9zdXBlci5wcm90b3R5cGUuZ2V0SXNSdW5uaW5nVmFsaWRhdG9ycy5jYWxsKHRoaXMpKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXRlbXNbaV0uZWRpdG9yLmlzUnVubmluZ1ZhbGlkYXRvcnMpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gICAgUXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbC5wcm90b3R5cGUuaGFzRXJyb3JzID0gZnVuY3Rpb24gKGZpcmVDYWxsYmFjaywgcmVjKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGlmIChmaXJlQ2FsbGJhY2sgPT09IHZvaWQgMCkgeyBmaXJlQ2FsbGJhY2sgPSB0cnVlOyB9XG4gICAgICAgIGlmIChyZWMgPT09IHZvaWQgMCkgeyByZWMgPSBudWxsOyB9XG4gICAgICAgIHZhciByZXMgPSBmYWxzZTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLml0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLmVkaXRvci5vbkNvbXBsZXRlZEFzeW5jVmFsaWRhdG9ycyA9IGZ1bmN0aW9uIChoYXNFcnJvcnMpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5yYWlzZU9uQ29tcGxldGVkQXN5bmNWYWxpZGF0b3JzKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKCEhcmVjICYmXG4gICAgICAgICAgICAgICAgcmVjLmlzT25WYWx1ZUNoYW5nZWQgPT09IHRydWUgJiZcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zW2ldLmVkaXRvci5pc0VtcHR5KCkpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICByZXMgPSB0aGlzLml0ZW1zW2ldLmVkaXRvci5oYXNFcnJvcnMoZmlyZUNhbGxiYWNrLCByZWMpIHx8IHJlcztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5oYXNFcnJvcnMuY2FsbCh0aGlzLCBmaXJlQ2FsbGJhY2spIHx8IHJlcztcbiAgICB9O1xuICAgIFF1ZXN0aW9uTXVsdGlwbGVUZXh0TW9kZWwucHJvdG90eXBlLmdldEFsbEVycm9ycyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IF9zdXBlci5wcm90b3R5cGUuZ2V0QWxsRXJyb3JzLmNhbGwodGhpcyk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGVycm9ycyA9IHRoaXMuaXRlbXNbaV0uZWRpdG9yLmdldEFsbEVycm9ycygpO1xuICAgICAgICAgICAgaWYgKGVycm9ycyAmJiBlcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoZXJyb3JzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gICAgUXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbC5wcm90b3R5cGUuY2xlYXJFcnJvcnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUuY2xlYXJFcnJvcnMuY2FsbCh0aGlzKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLml0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLml0ZW1zW2ldLmVkaXRvci5jbGVhckVycm9ycygpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBRdWVzdGlvbk11bHRpcGxlVGV4dE1vZGVsLnByb3RvdHlwZS5nZXRDb250YWluc0Vycm9ycyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHJlcyA9IF9zdXBlci5wcm90b3R5cGUuZ2V0Q29udGFpbnNFcnJvcnMuY2FsbCh0aGlzKTtcbiAgICAgICAgaWYgKHJlcylcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIHZhciBpdGVtcyA9IHRoaXMuaXRlbXM7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChpdGVtc1tpXS5lZGl0b3IuY29udGFpbnNFcnJvcnMpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gICAgUXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbC5wcm90b3R5cGUuZ2V0SXNBbnN3ZXJlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFfc3VwZXIucHJvdG90eXBlLmdldElzQW5zd2VyZWQuY2FsbCh0aGlzKSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLml0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgZWRpdG9yID0gdGhpcy5pdGVtc1tpXS5lZGl0b3I7XG4gICAgICAgICAgICBpZiAoZWRpdG9yLmlzVmlzaWJsZSAmJiAhZWRpdG9yLmlzQW5zd2VyZWQpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG4gICAgUXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbC5wcm90b3R5cGUuZ2V0UHJvZ3Jlc3NJbmZvID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZWxlbWVudHMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLml0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBlbGVtZW50cy5wdXNoKHRoaXMuaXRlbXNbaV0uZWRpdG9yKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX3N1cnZleV9lbGVtZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJTdXJ2ZXlFbGVtZW50XCJdLmdldFByb2dyZXNzSW5mb0J5RWxlbWVudHMoZWxlbWVudHMsIHRoaXMuaXNSZXF1aXJlZCk7XG4gICAgfTtcbiAgICBRdWVzdGlvbk11bHRpcGxlVGV4dE1vZGVsLnByb3RvdHlwZS5nZXREaXNwbGF5VmFsdWVDb3JlID0gZnVuY3Rpb24gKGtleXNBc1RleHQsIHZhbHVlKSB7XG4gICAgICAgIGlmICghdmFsdWUpXG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIHZhciByZXMgPSB7fTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLml0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgaXRlbSA9IHRoaXMuaXRlbXNbaV07XG4gICAgICAgICAgICB2YXIgdmFsID0gdmFsdWVbaXRlbS5uYW1lXTtcbiAgICAgICAgICAgIGlmIChfaGVscGVyc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fW1wiSGVscGVyc1wiXS5pc1ZhbHVlRW1wdHkodmFsKSlcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIHZhciBpdGVtTmFtZSA9IGl0ZW0ubmFtZTtcbiAgICAgICAgICAgIGlmIChrZXlzQXNUZXh0ICYmICEhaXRlbS50aXRsZSkge1xuICAgICAgICAgICAgICAgIGl0ZW1OYW1lID0gaXRlbS50aXRsZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc1tpdGVtTmFtZV0gPSBpdGVtLmVkaXRvci5nZXREaXNwbGF5VmFsdWUoa2V5c0FzVGV4dCwgdmFsKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH07XG4gICAgUXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbC5wcm90b3R5cGUuYWxsb3dNb2JpbGVJbkRlc2lnbk1vZGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG4gICAgLy9JTXVsdGlwbGVUZXh0RGF0YVxuICAgIFF1ZXN0aW9uTXVsdGlwbGVUZXh0TW9kZWwucHJvdG90eXBlLmdldE11bHRpcGxlVGV4dFZhbHVlID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgaWYgKCF0aGlzLnZhbHVlKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlW25hbWVdO1xuICAgIH07XG4gICAgUXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbC5wcm90b3R5cGUuc2V0TXVsdGlwbGVUZXh0VmFsdWUgPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHtcbiAgICAgICAgdGhpcy5pc011bHRpcGxlSXRlbVZhbHVlQ2hhbmdpbmcgPSB0cnVlO1xuICAgICAgICBpZiAodGhpcy5pc1ZhbHVlRW1wdHkodmFsdWUpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbmV3VmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgICAgICBpZiAoIW5ld1ZhbHVlKSB7XG4gICAgICAgICAgICBuZXdWYWx1ZSA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIG5ld1ZhbHVlW25hbWVdID0gdmFsdWU7XG4gICAgICAgIHRoaXMuc2V0TmV3VmFsdWUobmV3VmFsdWUpO1xuICAgICAgICB0aGlzLmlzTXVsdGlwbGVJdGVtVmFsdWVDaGFuZ2luZyA9IGZhbHNlO1xuICAgIH07XG4gICAgUXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbC5wcm90b3R5cGUuZ2V0SXRlbURlZmF1bHRWYWx1ZSA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuZGVmYXVsdFZhbHVlID8gdGhpcy5kZWZhdWx0VmFsdWVbbmFtZV0gOiBudWxsO1xuICAgIH07XG4gICAgUXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbC5wcm90b3R5cGUuZ2V0VGV4dFByb2Nlc3NvciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGV4dFByb2Nlc3NvcjtcbiAgICB9O1xuICAgIFF1ZXN0aW9uTXVsdGlwbGVUZXh0TW9kZWwucHJvdG90eXBlLmdldEFsbFZhbHVlcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YSA/IHRoaXMuZGF0YS5nZXRBbGxWYWx1ZXMoKSA6IG51bGw7XG4gICAgfTtcbiAgICBRdWVzdGlvbk11bHRpcGxlVGV4dE1vZGVsLnByb3RvdHlwZS5nZXRJc1JlcXVpcmVkVGV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3VydmV5ID8gdGhpcy5zdXJ2ZXkucmVxdWlyZWRUZXh0IDogXCJcIjtcbiAgICB9O1xuICAgIC8vSVBhbmVsXG4gICAgUXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbC5wcm90b3R5cGUuYWRkRWxlbWVudCA9IGZ1bmN0aW9uIChlbGVtZW50LCBpbmRleCkgeyB9O1xuICAgIFF1ZXN0aW9uTXVsdGlwbGVUZXh0TW9kZWwucHJvdG90eXBlLnJlbW92ZUVsZW1lbnQgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgICBRdWVzdGlvbk11bHRpcGxlVGV4dE1vZGVsLnByb3RvdHlwZS5nZXRRdWVzdGlvblRpdGxlTG9jYXRpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBcImxlZnRcIjtcbiAgICB9O1xuICAgIFF1ZXN0aW9uTXVsdGlwbGVUZXh0TW9kZWwucHJvdG90eXBlLmdldFF1ZXN0aW9uU3RhcnRJbmRleCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U3RhcnRJbmRleCgpO1xuICAgIH07XG4gICAgUXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbC5wcm90b3R5cGUuZ2V0Q2hpbGRyZW5MYXlvdXRUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gXCJyb3dcIjtcbiAgICB9O1xuICAgIFF1ZXN0aW9uTXVsdGlwbGVUZXh0TW9kZWwucHJvdG90eXBlLmVsZW1lbnRXaWR0aENoYW5nZWQgPSBmdW5jdGlvbiAoZWwpIHsgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbC5wcm90b3R5cGUsIFwiZWxlbWVudHNcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFF1ZXN0aW9uTXVsdGlwbGVUZXh0TW9kZWwucHJvdG90eXBlLmluZGV4T2YgPSBmdW5jdGlvbiAoZWwpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH07XG4gICAgUXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbC5wcm90b3R5cGUuZW5zdXJlUm93c1Zpc2liaWxpdHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIGRvIG5vdGhpbmdcbiAgICB9O1xuICAgIFF1ZXN0aW9uTXVsdGlwbGVUZXh0TW9kZWwucHJvdG90eXBlLnZhbGlkYXRlQ29udGFpbmVyT25seSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gZG8gbm90aGluZ1xuICAgIH07XG4gICAgUXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbC5wcm90b3R5cGUuZ2V0SXRlbUxhYmVsQ3NzID0gZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBfdXRpbHNfY3NzQ2xhc3NCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bXCJDc3NDbGFzc0J1aWxkZXJcIl0oKVxuICAgICAgICAgICAgLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMuaXRlbUxhYmVsKVxuICAgICAgICAgICAgLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMuaXRlbUxhYmVsQW5zd2VyZWQsIGl0ZW0uZWRpdG9yLmlzQW5zd2VyZWQpXG4gICAgICAgICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5pdGVtTGFiZWxBbGxvd0ZvY3VzLCAhdGhpcy5pc0Rlc2lnbk1vZGUpXG4gICAgICAgICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5pdGVtTGFiZWxPbkVycm9yLCBpdGVtLmVkaXRvci5lcnJvcnMubGVuZ3RoID4gMClcbiAgICAgICAgICAgIC50b1N0cmluZygpO1xuICAgIH07XG4gICAgUXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbC5wcm90b3R5cGUuZ2V0SXRlbUNzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBfdXRpbHNfY3NzQ2xhc3NCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bXCJDc3NDbGFzc0J1aWxkZXJcIl0oKS5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLml0ZW0pLnRvU3RyaW5nKCk7XG4gICAgfTtcbiAgICBRdWVzdGlvbk11bHRpcGxlVGV4dE1vZGVsLnByb3RvdHlwZS5nZXRJdGVtVGl0bGVDc3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBuZXcgX3V0aWxzX2Nzc0NsYXNzQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fW1wiQ3NzQ2xhc3NCdWlsZGVyXCJdKCkuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5pdGVtVGl0bGUpLnRvU3RyaW5nKCk7XG4gICAgfTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bXCJwcm9wZXJ0eUFycmF5XCJdKSgpXG4gICAgXSwgUXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbC5wcm90b3R5cGUsIFwicm93c1wiLCB2b2lkIDApO1xuICAgIHJldHVybiBRdWVzdGlvbk11bHRpcGxlVGV4dE1vZGVsO1xufShfcXVlc3Rpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIlF1ZXN0aW9uXCJdKSk7XG5cbnZhciBNdXRsaXBsZVRleHRSb3cgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKE11dGxpcGxlVGV4dFJvdywgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBNdXRsaXBsZVRleHRSb3coKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5pc1Zpc2libGUgPSB0cnVlO1xuICAgICAgICBfdGhpcy5jZWxscyA9IFtdO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QoX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1tcInByb3BlcnR5XCJdKSgpXG4gICAgXSwgTXV0bGlwbGVUZXh0Um93LnByb3RvdHlwZSwgXCJpc1Zpc2libGVcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bXCJwcm9wZXJ0eUFycmF5XCJdKSgpXG4gICAgXSwgTXV0bGlwbGVUZXh0Um93LnByb3RvdHlwZSwgXCJjZWxsc1wiLCB2b2lkIDApO1xuICAgIHJldHVybiBNdXRsaXBsZVRleHRSb3c7XG59KF9iYXNlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJCYXNlXCJdKSk7XG5cbnZhciBNdXRsaXBsZVRleHRFcnJvclJvdyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoTXV0bGlwbGVUZXh0RXJyb3JSb3csIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gTXV0bGlwbGVUZXh0RXJyb3JSb3coKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICB9XG4gICAgTXV0bGlwbGVUZXh0RXJyb3JSb3cucHJvdG90eXBlLm9uQWZ0ZXJDcmVhdGVkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5pc1Zpc2libGUgPSBfdGhpcy5jZWxscy5zb21lKGZ1bmN0aW9uIChjZWxsKSB7IHZhciBfYSwgX2I7IHJldHVybiAoKF9hID0gY2VsbC5pdGVtKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZWRpdG9yKSAmJiAoKF9iID0gY2VsbC5pdGVtKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuZWRpdG9yLmhhc1Zpc2libGVFcnJvcnMpOyB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5jZWxscy5mb3JFYWNoKGZ1bmN0aW9uIChjZWxsKSB7XG4gICAgICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAgICAgaWYgKChfYSA9IGNlbGwuaXRlbSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmVkaXRvcikge1xuICAgICAgICAgICAgICAgIChfYiA9IGNlbGwuaXRlbSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmVkaXRvci5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChcImhhc1Zpc2libGVFcnJvcnNcIiwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICB9O1xuICAgIHJldHVybiBNdXRsaXBsZVRleHRFcnJvclJvdztcbn0oTXV0bGlwbGVUZXh0Um93KSk7XG5cbnZhciBNdWx0aXBsZVRleHRDZWxsID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIE11bHRpcGxlVGV4dENlbGwoaXRlbSwgcXVlc3Rpb24pIHtcbiAgICAgICAgdGhpcy5pdGVtID0gaXRlbTtcbiAgICAgICAgdGhpcy5xdWVzdGlvbiA9IHF1ZXN0aW9uO1xuICAgICAgICB0aGlzLmlzRXJyb3JzQ2VsbCA9IGZhbHNlO1xuICAgIH1cbiAgICBNdWx0aXBsZVRleHRDZWxsLnByb3RvdHlwZS5nZXRDbGFzc05hbWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBuZXcgX3V0aWxzX2Nzc0NsYXNzQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fW1wiQ3NzQ2xhc3NCdWlsZGVyXCJdKCkuYXBwZW5kKHRoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jZWxsKS50b1N0cmluZygpO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE11bHRpcGxlVGV4dENlbGwucHJvdG90eXBlLCBcImNsYXNzTmFtZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2xhc3NOYW1lKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICByZXR1cm4gTXVsdGlwbGVUZXh0Q2VsbDtcbn0oKSk7XG5cbnZhciBNdWx0aXBsZVRleHRFcnJvckNlbGwgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKE11bHRpcGxlVGV4dEVycm9yQ2VsbCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBNdWx0aXBsZVRleHRFcnJvckNlbGwoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5pc0Vycm9yc0NlbGwgPSB0cnVlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIE11bHRpcGxlVGV4dEVycm9yQ2VsbC5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gbmV3IF91dGlsc19jc3NDbGFzc0J1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1tcIkNzc0NsYXNzQnVpbGRlclwiXSgpXG4gICAgICAgICAgICAuYXBwZW5kKF9zdXBlci5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lLmNhbGwodGhpcykpXG4gICAgICAgICAgICAuYXBwZW5kKHRoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jZWxsRXJyb3IpXG4gICAgICAgICAgICAuYXBwZW5kKHRoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jZWxsRXJyb3JUb3AsIHRoaXMucXVlc3Rpb24uc2hvd0l0ZW1FcnJvck9uVG9wKVxuICAgICAgICAgICAgLmFwcGVuZCh0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuY2VsbEVycm9yQm90dG9tLCB0aGlzLnF1ZXN0aW9uLnNob3dJdGVtRXJyb3JPbkJvdHRvbSlcbiAgICAgICAgICAgIC50b1N0cmluZygpO1xuICAgIH07XG4gICAgcmV0dXJuIE11bHRpcGxlVGV4dEVycm9yQ2VsbDtcbn0oTXVsdGlwbGVUZXh0Q2VsbCkpO1xuXG5fanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fW1wiU2VyaWFsaXplclwiXS5hZGRDbGFzcyhcIm11bHRpcGxldGV4dGl0ZW1cIiwgW1xuICAgIHsgbmFtZTogXCIhbmFtZVwiLCBpc1VuaXF1ZTogdHJ1ZSB9LFxuICAgIFwiaXNSZXF1aXJlZDpib29sZWFuXCIsXG4gICAgeyBuYW1lOiBcInBsYWNlaG9sZGVyXCIsIGFsdGVybmF0aXZlTmFtZTogXCJwbGFjZUhvbGRlclwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jUGxhY2Vob2xkZXJcIiB9LFxuICAgIHtcbiAgICAgICAgbmFtZTogXCJpbnB1dFR5cGVcIixcbiAgICAgICAgZGVmYXVsdDogXCJ0ZXh0XCIsXG4gICAgICAgIGNob2ljZXM6IF9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fW1wic2V0dGluZ3NcIl0ucXVlc3Rpb25zLmlucHV0VHlwZXMsXG4gICAgfSxcbiAgICB7IG5hbWU6IFwidGl0bGVcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1RpdGxlXCIgfSxcbiAgICB7IG5hbWU6IFwibWF4TGVuZ3RoOm51bWJlclwiLCBkZWZhdWx0OiAtMSB9LFxuICAgIHsgbmFtZTogXCJzaXplOm51bWJlclwiLCBtaW5WYWx1ZTogMCB9LFxuICAgIHtcbiAgICAgICAgbmFtZTogXCJyZXF1aXJlZEVycm9yVGV4dDp0ZXh0XCIsXG4gICAgICAgIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NSZXF1aXJlZEVycm9yVGV4dFwiLFxuICAgIH0sXG4gICAge1xuICAgICAgICBuYW1lOiBcInZhbGlkYXRvcnM6dmFsaWRhdG9yc1wiLFxuICAgICAgICBiYXNlQ2xhc3NOYW1lOiBcInN1cnZleXZhbGlkYXRvclwiLFxuICAgICAgICBjbGFzc05hbWVQYXJ0OiBcInZhbGlkYXRvclwiLFxuICAgIH0sXG5dLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBNdWx0aXBsZVRleHRJdGVtTW9kZWwoXCJcIik7XG59KTtcbl9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bXCJTZXJpYWxpemVyXCJdLmFkZENsYXNzKFwibXVsdGlwbGV0ZXh0XCIsIFtcbiAgICB7IG5hbWU6IFwiIWl0ZW1zOnRleHRpdGVtc1wiLCBjbGFzc05hbWU6IFwibXVsdGlwbGV0ZXh0aXRlbVwiIH0sXG4gICAgeyBuYW1lOiBcIml0ZW1TaXplOm51bWJlclwiLCBtaW5WYWx1ZTogMCB9LFxuICAgIHsgbmFtZTogXCJjb2xDb3VudDpudW1iZXJcIiwgZGVmYXVsdDogMSwgY2hvaWNlczogWzEsIDIsIDMsIDQsIDVdIH0sXG4gICAgeyBuYW1lOiBcIml0ZW1FcnJvckxvY2F0aW9uXCIsIGRlZmF1bHQ6IFwiZGVmYXVsdFwiLCBjaG9pY2VzOiBbXCJkZWZhdWx0XCIsIFwidG9wXCIsIFwiYm90dG9tXCJdLCB2aXNpYmxlOiBmYWxzZSB9XG5dLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBRdWVzdGlvbk11bHRpcGxlVGV4dE1vZGVsKFwiXCIpO1xufSwgXCJxdWVzdGlvblwiKTtcbl9xdWVzdGlvbmZhY3RvcnlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1tcIlF1ZXN0aW9uRmFjdG9yeVwiXS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwibXVsdGlwbGV0ZXh0XCIsIGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdmFyIHEgPSBuZXcgUXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbChuYW1lKTtcbiAgICBRdWVzdGlvbk11bHRpcGxlVGV4dE1vZGVsLmFkZERlZmF1bHRJdGVtcyhxKTtcbiAgICByZXR1cm4gcTtcbn0pO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3F1ZXN0aW9uX3BhbmVsZHluYW1pYy50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvcXVlc3Rpb25fcGFuZWxkeW5hbWljLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBRdWVzdGlvblBhbmVsRHluYW1pY0l0ZW0sIFF1ZXN0aW9uUGFuZWxEeW5hbWljVGVtcGxhdGVTdXJ2ZXlJbXBsLCBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlF1ZXN0aW9uUGFuZWxEeW5hbWljSXRlbVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFF1ZXN0aW9uUGFuZWxEeW5hbWljSXRlbTsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUXVlc3Rpb25QYW5lbER5bmFtaWNUZW1wbGF0ZVN1cnZleUltcGxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBRdWVzdGlvblBhbmVsRHluYW1pY1RlbXBsYXRlU3VydmV5SW1wbDsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWw7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9oZWxwZXJzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2hlbHBlcnMgKi8gXCIuL3NyYy9oZWxwZXJzLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zdXJ2ZXlfZWxlbWVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9zdXJ2ZXktZWxlbWVudCAqLyBcIi4vc3JjL3N1cnZleS1lbGVtZW50LnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9sb2NhbGl6YWJsZXN0cmluZ19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9sb2NhbGl6YWJsZXN0cmluZyAqLyBcIi4vc3JjL2xvY2FsaXphYmxlc3RyaW5nLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF90ZXh0UHJlUHJvY2Vzc29yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3RleHRQcmVQcm9jZXNzb3IgKi8gXCIuL3NyYy90ZXh0UHJlUHJvY2Vzc29yLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9xdWVzdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9xdWVzdGlvbiAqLyBcIi4vc3JjL3F1ZXN0aW9uLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2pzb25vYmplY3QgKi8gXCIuL3NyYy9qc29ub2JqZWN0LnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9xdWVzdGlvbmZhY3RvcnlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcXVlc3Rpb25mYWN0b3J5ICovIFwiLi9zcmMvcXVlc3Rpb25mYWN0b3J5LnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9lcnJvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9lcnJvciAqLyBcIi4vc3JjL2Vycm9yLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9zZXR0aW5ncyAqLyBcIi4vc3JjL3NldHRpbmdzLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF91dGlsc191dGlsc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi91dGlscy91dGlscyAqLyBcIi4vc3JjL3V0aWxzL3V0aWxzLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF91dGlsc19jc3NDbGFzc0J1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3V0aWxzL2Nzc0NsYXNzQnVpbGRlciAqLyBcIi4vc3JjL3V0aWxzL2Nzc0NsYXNzQnVpbGRlci50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYWN0aW9uc19hY3Rpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2FjdGlvbnMvYWN0aW9uICovIFwiLi9zcmMvYWN0aW9ucy9hY3Rpb24udHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Jhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2Jhc2UgKi8gXCIuL3NyYy9iYXNlLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9hY3Rpb25zX2FkYXB0aXZlX2NvbnRhaW5lcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYWN0aW9ucy9hZGFwdGl2ZS1jb250YWluZXIgKi8gXCIuL3NyYy9hY3Rpb25zL2FkYXB0aXZlLWNvbnRhaW5lci50c1wiKTtcbnZhciBfX2V4dGVuZHMgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xudmFyIF9fZGVjb3JhdGUgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufTtcbnZhciBfX3NwcmVhZEFycmF5ID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19zcHJlYWRBcnJheSkgfHwgZnVuY3Rpb24gKHRvLCBmcm9tKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGlsID0gZnJvbS5sZW5ndGgsIGogPSB0by5sZW5ndGg7IGkgPCBpbDsgaSsrLCBqKyspXG4gICAgICAgIHRvW2pdID0gZnJvbVtpXTtcbiAgICByZXR1cm4gdG87XG59O1xuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbnZhciBRdWVzdGlvblBhbmVsRHluYW1pY0l0ZW1UZXh0UHJvY2Vzc29yID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhRdWVzdGlvblBhbmVsRHluYW1pY0l0ZW1UZXh0UHJvY2Vzc29yLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFF1ZXN0aW9uUGFuZWxEeW5hbWljSXRlbVRleHRQcm9jZXNzb3IoZGF0YSwgcGFuZWxJdGVtLCB2YXJpYWJsZU5hbWUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgdmFyaWFibGVOYW1lKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5kYXRhID0gZGF0YTtcbiAgICAgICAgX3RoaXMucGFuZWxJdGVtID0gcGFuZWxJdGVtO1xuICAgICAgICBfdGhpcy52YXJpYWJsZU5hbWUgPSB2YXJpYWJsZU5hbWU7XG4gICAgICAgIF90aGlzLnNoYXJlZFF1ZXN0aW9ucyA9IHt9O1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblBhbmVsRHluYW1pY0l0ZW1UZXh0UHJvY2Vzc29yLnByb3RvdHlwZSwgXCJzdXJ2ZXlcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhbmVsSXRlbS5nZXRTdXJ2ZXkoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblBhbmVsRHluYW1pY0l0ZW1UZXh0UHJvY2Vzc29yLnByb3RvdHlwZSwgXCJwYW5lbFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFuZWxJdGVtLnBhbmVsO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uUGFuZWxEeW5hbWljSXRlbVRleHRQcm9jZXNzb3IucHJvdG90eXBlLCBcInBhbmVsSW5kZXhcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAhIXRoaXMuZGF0YSA/IHRoaXMuZGF0YS5nZXRJdGVtSW5kZXgodGhpcy5wYW5lbEl0ZW0pIDogLTE7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25QYW5lbER5bmFtaWNJdGVtVGV4dFByb2Nlc3Nvci5wcm90b3R5cGUsIFwidmlzaWJsZVBhbmVsSW5kZXhcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAhIXRoaXMuZGF0YSA/IHRoaXMuZGF0YS5nZXRWaXNpYmxlSXRlbUluZGV4KHRoaXMucGFuZWxJdGVtKSA6IC0xO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUXVlc3Rpb25QYW5lbER5bmFtaWNJdGVtVGV4dFByb2Nlc3Nvci5wcm90b3R5cGUuZ2V0VmFsdWVzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wYW5lbEl0ZW0uZ2V0QWxsVmFsdWVzKCk7XG4gICAgfTtcbiAgICBRdWVzdGlvblBhbmVsRHluYW1pY0l0ZW1UZXh0UHJvY2Vzc29yLnByb3RvdHlwZS5nZXRRdWVzdGlvbkJ5TmFtZSA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIHZhciByZXMgPSBfc3VwZXIucHJvdG90eXBlLmdldFF1ZXN0aW9uQnlOYW1lLmNhbGwodGhpcywgbmFtZSk7XG4gICAgICAgIGlmICghIXJlcylcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIHZhciBpbmRleCA9IHRoaXMucGFuZWxJbmRleDtcbiAgICAgICAgcmVzID0gaW5kZXggPiAtMSA/IHRoaXMuZGF0YS5nZXRTaGFyZWRRdWVzdGlvbkZyb21BcnJheShuYW1lLCBpbmRleCkgOiB1bmRlZmluZWQ7XG4gICAgICAgIHZhciBxTmFtZSA9ICEhcmVzID8gcmVzLm5hbWUgOiBuYW1lO1xuICAgICAgICB0aGlzLnNoYXJlZFF1ZXN0aW9uc1txTmFtZV0gPSBuYW1lO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH07XG4gICAgUXVlc3Rpb25QYW5lbER5bmFtaWNJdGVtVGV4dFByb2Nlc3Nvci5wcm90b3R5cGUuZ2V0UXVlc3Rpb25EaXNwbGF5VGV4dCA9IGZ1bmN0aW9uIChxdWVzdGlvbikge1xuICAgICAgICB2YXIgbmFtZSA9IHRoaXMuc2hhcmVkUXVlc3Rpb25zW3F1ZXN0aW9uLm5hbWVdO1xuICAgICAgICBpZiAoIW5hbWUpXG4gICAgICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5nZXRRdWVzdGlvbkRpc3BsYXlUZXh0LmNhbGwodGhpcywgcXVlc3Rpb24pO1xuICAgICAgICB2YXIgdmFsID0gdGhpcy5wYW5lbEl0ZW0uZ2V0VmFsdWUobmFtZSk7XG4gICAgICAgIHJldHVybiBxdWVzdGlvbi5nZXREaXNwbGF5VmFsdWUodHJ1ZSwgdmFsKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uUGFuZWxEeW5hbWljSXRlbVRleHRQcm9jZXNzb3IucHJvdG90eXBlLm9uQ3VzdG9tUHJvY2Vzc1RleHQgPSBmdW5jdGlvbiAodGV4dFZhbHVlKSB7XG4gICAgICAgIGlmICh0ZXh0VmFsdWUubmFtZSA9PSBRdWVzdGlvblBhbmVsRHluYW1pY0l0ZW0uSW5kZXhWYXJpYWJsZU5hbWUpIHtcbiAgICAgICAgICAgIHZhciBpbmRleCA9IHRoaXMucGFuZWxJbmRleDtcbiAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICAgICAgdGV4dFZhbHVlLmlzRXhpc3RzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0ZXh0VmFsdWUudmFsdWUgPSBpbmRleCArIDE7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRleHRWYWx1ZS5uYW1lID09IFF1ZXN0aW9uUGFuZWxEeW5hbWljSXRlbS5WaXNpYmxlSW5kZXhWYXJpYWJsZU5hbWUpIHtcbiAgICAgICAgICAgIHZhciBpbmRleCA9IHRoaXMudmlzaWJsZVBhbmVsSW5kZXg7XG4gICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgICAgIHRleHRWYWx1ZS5pc0V4aXN0cyA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGV4dFZhbHVlLnZhbHVlID0gaW5kZXggKyAxO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0ZXh0VmFsdWUubmFtZS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoUXVlc3Rpb25QYW5lbER5bmFtaWNJdGVtLlBhcmVudEl0ZW1WYXJpYWJsZU5hbWUgKyBcIi5cIikgPT0gMCkge1xuICAgICAgICAgICAgdmFyIHEgPSB0aGlzLmRhdGE7XG4gICAgICAgICAgICBpZiAoISFxICYmICEhcS5wYXJlbnRRdWVzdGlvbiAmJiAhIXEucGFyZW50ICYmICEhcS5wYXJlbnQuZGF0YSkge1xuICAgICAgICAgICAgICAgIHZhciBwcm9jZXNzb3IgPSBuZXcgUXVlc3Rpb25QYW5lbER5bmFtaWNJdGVtVGV4dFByb2Nlc3NvcihxLnBhcmVudFF1ZXN0aW9uLCBxLnBhcmVudC5kYXRhLCBRdWVzdGlvblBhbmVsRHluYW1pY0l0ZW0uSXRlbVZhcmlhYmxlTmFtZSk7XG4gICAgICAgICAgICAgICAgdmFyIHRleHQgPSBRdWVzdGlvblBhbmVsRHluYW1pY0l0ZW0uSXRlbVZhcmlhYmxlTmFtZSArXG4gICAgICAgICAgICAgICAgICAgIHRleHRWYWx1ZS5uYW1lLnN1YnN0cmluZyhRdWVzdGlvblBhbmVsRHluYW1pY0l0ZW0uUGFyZW50SXRlbVZhcmlhYmxlTmFtZS5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIHZhciByZXMgPSBwcm9jZXNzb3IucHJvY2Vzc1ZhbHVlKHRleHQsIHRleHRWYWx1ZS5yZXR1cm5EaXNwbGF5VmFsdWUpO1xuICAgICAgICAgICAgICAgIHRleHRWYWx1ZS5pc0V4aXN0cyA9IHJlcy5pc0V4aXN0cztcbiAgICAgICAgICAgICAgICB0ZXh0VmFsdWUudmFsdWUgPSByZXMudmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgICByZXR1cm4gUXVlc3Rpb25QYW5lbER5bmFtaWNJdGVtVGV4dFByb2Nlc3Nvcjtcbn0oX3RleHRQcmVQcm9jZXNzb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcIlF1ZXN0aW9uVGV4dFByb2Nlc3NvclwiXSkpO1xudmFyIFF1ZXN0aW9uUGFuZWxEeW5hbWljSXRlbSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBRdWVzdGlvblBhbmVsRHluYW1pY0l0ZW0oZGF0YSwgcGFuZWwpIHtcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICAgICAgdGhpcy5wYW5lbFZhbHVlID0gcGFuZWw7XG4gICAgICAgIHRoaXMudGV4dFByZVByb2Nlc3NvciA9IG5ldyBRdWVzdGlvblBhbmVsRHluYW1pY0l0ZW1UZXh0UHJvY2Vzc29yKGRhdGEsIHRoaXMsIFF1ZXN0aW9uUGFuZWxEeW5hbWljSXRlbS5JdGVtVmFyaWFibGVOYW1lKTtcbiAgICAgICAgdGhpcy5zZXRTdXJ2ZXlJbXBsKCk7XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblBhbmVsRHluYW1pY0l0ZW0ucHJvdG90eXBlLCBcInBhbmVsXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wYW5lbFZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUXVlc3Rpb25QYW5lbER5bmFtaWNJdGVtLnByb3RvdHlwZS5zZXRTdXJ2ZXlJbXBsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnBhbmVsLnNldFN1cnZleUltcGwodGhpcyk7XG4gICAgfTtcbiAgICBRdWVzdGlvblBhbmVsRHluYW1pY0l0ZW0ucHJvdG90eXBlLmdldFZhbHVlID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgdmFyIHZhbHVlcyA9IHRoaXMuZ2V0QWxsVmFsdWVzKCk7XG4gICAgICAgIHJldHVybiB2YWx1ZXNbbmFtZV07XG4gICAgfTtcbiAgICBRdWVzdGlvblBhbmVsRHluYW1pY0l0ZW0ucHJvdG90eXBlLnNldFZhbHVlID0gZnVuY3Rpb24gKG5hbWUsIG5ld1ZhbHVlKSB7XG4gICAgICAgIHZhciBvbGRJdGVtRGF0YSA9IHRoaXMuZGF0YS5nZXRQYW5lbEl0ZW1EYXRhKHRoaXMpO1xuICAgICAgICB2YXIgb2xkVmFsdWUgPSAhIW9sZEl0ZW1EYXRhID8gb2xkSXRlbURhdGFbbmFtZV0gOiB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChfaGVscGVyc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiSGVscGVyc1wiXS5pc1R3b1ZhbHVlRXF1YWxzKG5ld1ZhbHVlLCBvbGRWYWx1ZSwgZmFsc2UsIHRydWUsIGZhbHNlKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5kYXRhLnNldFBhbmVsSXRlbURhdGEodGhpcywgbmFtZSwgX2hlbHBlcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkhlbHBlcnNcIl0uZ2V0VW5iaW5kVmFsdWUobmV3VmFsdWUpKTtcbiAgICAgICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMucGFuZWwucXVlc3Rpb25zO1xuICAgICAgICB2YXIgdHJpZ2dlck5hbWUgPSBRdWVzdGlvblBhbmVsRHluYW1pY0l0ZW0uSXRlbVZhcmlhYmxlTmFtZSArIFwiLlwiICsgbmFtZTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBxID0gcXVlc3Rpb25zW2ldO1xuICAgICAgICAgICAgaWYgKHEuZ2V0VmFsdWVOYW1lKCkgIT09IG5hbWUpIHtcbiAgICAgICAgICAgICAgICBxLmNoZWNrQmluZGluZ3MobmFtZSwgbmV3VmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcS5ydW5UcmlnZ2Vycyh0cmlnZ2VyTmFtZSwgbmV3VmFsdWUpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBRdWVzdGlvblBhbmVsRHluYW1pY0l0ZW0ucHJvdG90eXBlLmdldFZhcmlhYmxlID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIFF1ZXN0aW9uUGFuZWxEeW5hbWljSXRlbS5wcm90b3R5cGUuc2V0VmFyaWFibGUgPSBmdW5jdGlvbiAobmFtZSwgbmV3VmFsdWUpIHsgfTtcbiAgICBRdWVzdGlvblBhbmVsRHluYW1pY0l0ZW0ucHJvdG90eXBlLmdldENvbW1lbnQgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5nZXRWYWx1ZShuYW1lICsgX3NldHRpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bXCJzZXR0aW5nc1wiXS5jb21tZW50U3VmZml4KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdCA/IHJlc3VsdCA6IFwiXCI7XG4gICAgfTtcbiAgICBRdWVzdGlvblBhbmVsRHluYW1pY0l0ZW0ucHJvdG90eXBlLnNldENvbW1lbnQgPSBmdW5jdGlvbiAobmFtZSwgbmV3VmFsdWUsIGxvY05vdGlmaWNhdGlvbikge1xuICAgICAgICB0aGlzLnNldFZhbHVlKG5hbWUgKyBfc2V0dGluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1tcInNldHRpbmdzXCJdLmNvbW1lbnRTdWZmaXgsIG5ld1ZhbHVlKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uUGFuZWxEeW5hbWljSXRlbS5wcm90b3R5cGUuZmluZFF1ZXN0aW9uQnlOYW1lID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgaWYgKCFuYW1lKVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgdmFyIHByZWZpeCA9IFF1ZXN0aW9uUGFuZWxEeW5hbWljSXRlbS5JdGVtVmFyaWFibGVOYW1lICsgXCIuXCI7XG4gICAgICAgIGlmIChuYW1lLmluZGV4T2YocHJlZml4KSA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFuZWwuZ2V0UXVlc3Rpb25CeU5hbWUobmFtZS5zdWJzdHJpbmcocHJlZml4Lmxlbmd0aCkpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBzdXJ2ZXkgPSB0aGlzLmdldFN1cnZleSgpO1xuICAgICAgICByZXR1cm4gISFzdXJ2ZXkgPyBzdXJ2ZXkuZ2V0UXVlc3Rpb25CeU5hbWUobmFtZSkgOiBudWxsO1xuICAgIH07XG4gICAgUXVlc3Rpb25QYW5lbER5bmFtaWNJdGVtLnByb3RvdHlwZS5nZXRBbGxWYWx1ZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEuZ2V0UGFuZWxJdGVtRGF0YSh0aGlzKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uUGFuZWxEeW5hbWljSXRlbS5wcm90b3R5cGUuZ2V0RmlsdGVyZWRWYWx1ZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB2YWx1ZXMgPSB7fTtcbiAgICAgICAgdmFyIHN1cnZleVZhbHVlcyA9ICEhdGhpcy5kYXRhICYmICEhdGhpcy5kYXRhLmdldFJvb3REYXRhKClcbiAgICAgICAgICAgID8gdGhpcy5kYXRhLmdldFJvb3REYXRhKCkuZ2V0RmlsdGVyZWRWYWx1ZXMoKVxuICAgICAgICAgICAgOiB7fTtcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHN1cnZleVZhbHVlcykge1xuICAgICAgICAgICAgdmFsdWVzW2tleV0gPSBzdXJ2ZXlWYWx1ZXNba2V5XTtcbiAgICAgICAgfVxuICAgICAgICB2YWx1ZXNbUXVlc3Rpb25QYW5lbER5bmFtaWNJdGVtLkl0ZW1WYXJpYWJsZU5hbWVdID0gdGhpcy5nZXRBbGxWYWx1ZXMoKTtcbiAgICAgICAgaWYgKCEhdGhpcy5kYXRhKSB7XG4gICAgICAgICAgICB2YXIgaW5kZXhTdHIgPSBRdWVzdGlvblBhbmVsRHluYW1pY0l0ZW0uSW5kZXhWYXJpYWJsZU5hbWU7XG4gICAgICAgICAgICB2YXIgdmlzaWJsZUluZGV4U3RyID0gUXVlc3Rpb25QYW5lbER5bmFtaWNJdGVtLlZpc2libGVJbmRleFZhcmlhYmxlTmFtZTtcbiAgICAgICAgICAgIGRlbGV0ZSB2YWx1ZXNbaW5kZXhTdHJdO1xuICAgICAgICAgICAgZGVsZXRlIHZhbHVlc1t2aXNpYmxlSW5kZXhTdHJdO1xuICAgICAgICAgICAgdmFsdWVzW2luZGV4U3RyLnRvTG93ZXJDYXNlKCldID0gdGhpcy5kYXRhLmdldEl0ZW1JbmRleCh0aGlzKTtcbiAgICAgICAgICAgIHZhbHVlc1t2aXNpYmxlSW5kZXhTdHIudG9Mb3dlckNhc2UoKV0gPSB0aGlzLmRhdGEuZ2V0VmlzaWJsZUl0ZW1JbmRleCh0aGlzKTtcbiAgICAgICAgICAgIHZhciBxID0gdGhpcy5kYXRhO1xuICAgICAgICAgICAgaWYgKCEhcSAmJiAhIXEucGFyZW50UXVlc3Rpb24gJiYgISFxLnBhcmVudCkge1xuICAgICAgICAgICAgICAgIHZhbHVlc1tRdWVzdGlvblBhbmVsRHluYW1pY0l0ZW0uUGFyZW50SXRlbVZhcmlhYmxlTmFtZV0gPSBxLnBhcmVudC5nZXRWYWx1ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZXM7XG4gICAgfTtcbiAgICBRdWVzdGlvblBhbmVsRHluYW1pY0l0ZW0ucHJvdG90eXBlLmdldEZpbHRlcmVkUHJvcGVydGllcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCEhdGhpcy5kYXRhICYmICEhdGhpcy5kYXRhLmdldFJvb3REYXRhKCkpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhLmdldFJvb3REYXRhKCkuZ2V0RmlsdGVyZWRQcm9wZXJ0aWVzKCk7XG4gICAgICAgIHJldHVybiB7IHN1cnZleTogdGhpcy5nZXRTdXJ2ZXkoKSB9O1xuICAgIH07XG4gICAgUXVlc3Rpb25QYW5lbER5bmFtaWNJdGVtLnByb3RvdHlwZS5nZXRTdXJ2ZXlEYXRhID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIFF1ZXN0aW9uUGFuZWxEeW5hbWljSXRlbS5wcm90b3R5cGUuZ2V0U3VydmV5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhID8gdGhpcy5kYXRhLmdldFN1cnZleSgpIDogbnVsbDtcbiAgICB9O1xuICAgIFF1ZXN0aW9uUGFuZWxEeW5hbWljSXRlbS5wcm90b3R5cGUuZ2V0VGV4dFByb2Nlc3NvciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGV4dFByZVByb2Nlc3NvcjtcbiAgICB9O1xuICAgIFF1ZXN0aW9uUGFuZWxEeW5hbWljSXRlbS5JdGVtVmFyaWFibGVOYW1lID0gXCJwYW5lbFwiO1xuICAgIFF1ZXN0aW9uUGFuZWxEeW5hbWljSXRlbS5QYXJlbnRJdGVtVmFyaWFibGVOYW1lID0gXCJwYXJlbnRwYW5lbFwiO1xuICAgIFF1ZXN0aW9uUGFuZWxEeW5hbWljSXRlbS5JbmRleFZhcmlhYmxlTmFtZSA9IFwicGFuZWxJbmRleFwiO1xuICAgIFF1ZXN0aW9uUGFuZWxEeW5hbWljSXRlbS5WaXNpYmxlSW5kZXhWYXJpYWJsZU5hbWUgPSBcInZpc2libGVQYW5lbEluZGV4XCI7XG4gICAgcmV0dXJuIFF1ZXN0aW9uUGFuZWxEeW5hbWljSXRlbTtcbn0oKSk7XG5cbnZhciBRdWVzdGlvblBhbmVsRHluYW1pY1RlbXBsYXRlU3VydmV5SW1wbCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBRdWVzdGlvblBhbmVsRHluYW1pY1RlbXBsYXRlU3VydmV5SW1wbChkYXRhKSB7XG4gICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgfVxuICAgIFF1ZXN0aW9uUGFuZWxEeW5hbWljVGVtcGxhdGVTdXJ2ZXlJbXBsLnByb3RvdHlwZS5nZXRTdXJ2ZXlEYXRhID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICAgIFF1ZXN0aW9uUGFuZWxEeW5hbWljVGVtcGxhdGVTdXJ2ZXlJbXBsLnByb3RvdHlwZS5nZXRTdXJ2ZXkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEuZ2V0U3VydmV5KCk7XG4gICAgfTtcbiAgICBRdWVzdGlvblBhbmVsRHluYW1pY1RlbXBsYXRlU3VydmV5SW1wbC5wcm90b3R5cGUuZ2V0VGV4dFByb2Nlc3NvciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgICByZXR1cm4gUXVlc3Rpb25QYW5lbER5bmFtaWNUZW1wbGF0ZVN1cnZleUltcGw7XG59KCkpO1xuXG4vKipcbiAgKiBBIGNsYXNzIHRoYXQgZGVzY3JpYmVzIHRoZSBEeW5hbWljIFBhbmVsIHF1ZXN0aW9uIHR5cGUuXG4gICpcbiAgKiBEeW5hbWljIFBhbmVsIGFsbG93cyByZXNwb25kZW50cyB0byBhZGQgcGFuZWxzIGJhc2VkIG9uIGEgcGFuZWwgdGVtcGxhdGUgYW5kIGRlbGV0ZSB0aGVtLiBTcGVjaWZ5IHRoZSBbYHRlbXBsYXRlRWxlbWVudHNgXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL3F1ZXN0aW9ucGFuZWxkeW5hbWljbW9kZWwjdGVtcGxhdGVFbGVtZW50cykgcHJvcGVydHkgdG8gY29uZmlndXJlIHBhbmVsIHRlbXBsYXRlIGVsZW1lbnRzLlxuICAqXG4gICogW1ZpZXcgRGVtb10oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZXhhbXBsZXMvcXVlc3Rpb250eXBlLXBhbmVsZHluYW1pYy8gKGxpbmtTdHlsZSkpXG4gICovXG52YXIgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsKG5hbWUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbmFtZSkgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuaXNBZGRpbmdOZXdQYW5lbHMgPSBmYWxzZTtcbiAgICAgICAgX3RoaXMuaXNTZXRQYW5lbEl0ZW1EYXRhID0ge307XG4gICAgICAgIF90aGlzLmNyZWF0ZU5ld0FycmF5KFwicGFuZWxzXCIsIGZ1bmN0aW9uIChwYW5lbCkgeyBfdGhpcy5vblBhbmVsQWRkZWQocGFuZWwpOyB9LCBmdW5jdGlvbiAocGFuZWwpIHsgX3RoaXMub25QYW5lbFJlbW92ZWQocGFuZWwpOyB9KTtcbiAgICAgICAgX3RoaXMuY3JlYXRlTmV3QXJyYXkoXCJ2aXNpYmxlUGFuZWxzXCIpO1xuICAgICAgICBfdGhpcy50ZW1wbGF0ZVZhbHVlID0gX3RoaXMuY3JlYXRlQW5kU2V0dXBOZXdQYW5lbE9iamVjdCgpO1xuICAgICAgICBfdGhpcy50ZW1wbGF0ZS5yZW5kZXJXaWR0aCA9IFwiMTAwJVwiO1xuICAgICAgICBfdGhpcy50ZW1wbGF0ZS5zZWxlY3RlZEVsZW1lbnRJbkRlc2lnbiA9IF90aGlzO1xuICAgICAgICBfdGhpcy50ZW1wbGF0ZS5hZGRFbGVtZW50Q2FsbGJhY2sgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgICAgICAgICAgX3RoaXMuYWRkT25Qcm9wZXJ0eUNoYW5nZWRDYWxsYmFjayhlbGVtZW50KTtcbiAgICAgICAgICAgIF90aGlzLnJlYnVpbGRQYW5lbHMoKTtcbiAgICAgICAgfTtcbiAgICAgICAgX3RoaXMudGVtcGxhdGUucmVtb3ZlRWxlbWVudENhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMucmVidWlsZFBhbmVscygpO1xuICAgICAgICB9O1xuICAgICAgICBfdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcImNvbmZpcm1EZWxldGVUZXh0XCIsIF90aGlzLCBmYWxzZSwgXCJjb25maXJtRGVsZXRlXCIpO1xuICAgICAgICBfdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcImtleUR1cGxpY2F0aW9uRXJyb3JcIiwgX3RoaXMsIGZhbHNlLCB0cnVlKTtcbiAgICAgICAgX3RoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJwYW5lbEFkZFRleHRcIiwgX3RoaXMsIGZhbHNlLCBcImFkZFBhbmVsXCIpO1xuICAgICAgICBfdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcInBhbmVsUmVtb3ZlVGV4dFwiLCBfdGhpcywgZmFsc2UsIFwicmVtb3ZlUGFuZWxcIik7XG4gICAgICAgIF90aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwicGFuZWxQcmV2VGV4dFwiLCBfdGhpcywgZmFsc2UsIFwicGFnZVByZXZUZXh0XCIpO1xuICAgICAgICBfdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcInBhbmVsTmV4dFRleHRcIiwgX3RoaXMsIGZhbHNlLCBcInBhZ2VOZXh0VGV4dFwiKTtcbiAgICAgICAgX3RoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJub0VudHJpZXNUZXh0XCIsIF90aGlzLCBmYWxzZSwgXCJub0VudHJpZXNUZXh0XCIpO1xuICAgICAgICBfdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcInRlbXBsYXRlVGFiVGl0bGVcIiwgX3RoaXMsIHRydWUsIFwicGFuZWxEeW5hbWljVGFiVGV4dEZvcm1hdFwiKTtcbiAgICAgICAgX3RoaXMucmVnaXN0ZXJQcm9wZXJ0eUNoYW5nZWRIYW5kbGVycyhbXCJwYW5lbHNTdGF0ZVwiXSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMuc2V0UGFuZWxzU3RhdGUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIF90aGlzLnJlZ2lzdGVyUHJvcGVydHlDaGFuZ2VkSGFuZGxlcnMoW1wiaXNNb2JpbGVcIl0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLnVwZGF0ZUZvb3RlckFjdGlvbnMoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIF90aGlzLnJlZ2lzdGVyUHJvcGVydHlDaGFuZ2VkSGFuZGxlcnMoW1wiYWxsb3dBZGRQYW5lbFwiXSwgZnVuY3Rpb24gKCkgeyBfdGhpcy51cGRhdGVOb0VudHJpZXNUZXh0RGVmYXVsdExvYygpOyB9KTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbC5wcm90b3R5cGUsIFwiaXNDb21wb3NpdGVRdWVzdGlvblwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHJ1ZTsgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsLnByb3RvdHlwZSwgXCJoYXNTaW5nbGVJbnB1dFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZmFsc2U7IH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbC5wcm90b3R5cGUsIFwiaXNDb250YWluZXJcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRydWU7IH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsLnByb3RvdHlwZS5nZXRGaXJzdFF1ZXN0aW9uVG9Gb2N1cyA9IGZ1bmN0aW9uICh3aXRoRXJyb3IpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnZpc2libGVQYW5lbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciByZXMgPSB0aGlzLnZpc2libGVQYW5lbHNbaV0uZ2V0Rmlyc3RRdWVzdGlvblRvRm9jdXMod2l0aEVycm9yKTtcbiAgICAgICAgICAgIGlmICghIXJlcylcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gICAgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbC5wcm90b3R5cGUuc2V0U3VydmV5SW1wbCA9IGZ1bmN0aW9uICh2YWx1ZSwgaXNMaWdodCkge1xuICAgICAgICBfc3VwZXIucHJvdG90eXBlLnNldFN1cnZleUltcGwuY2FsbCh0aGlzLCB2YWx1ZSwgaXNMaWdodCk7XG4gICAgICAgIHRoaXMuc2V0VGVtcGxhdGVQYW5lbFN1cnZleUltcGwoKTtcbiAgICAgICAgdGhpcy5zZXRQYW5lbHNTdXJ2ZXlJbXBsKCk7XG4gICAgfTtcbiAgICBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsLnByb3RvdHlwZS5hc3NpZ25PblByb3BlcnR5Q2hhbmdlZFRvVGVtcGxhdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBlbGVtZW50cyA9IHRoaXMudGVtcGxhdGUuZWxlbWVudHM7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuYWRkT25Qcm9wZXJ0eUNoYW5nZWRDYWxsYmFjayhlbGVtZW50c1tpXSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwucHJvdG90eXBlLmFkZE9uUHJvcGVydHlDaGFuZ2VkQ2FsbGJhY2sgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBpZiAoZWxlbWVudC5pc1F1ZXN0aW9uKSB7XG4gICAgICAgICAgICBlbGVtZW50LnNldFBhcmVudFF1ZXN0aW9uKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIGVsZW1lbnQub25Qcm9wZXJ0eUNoYW5nZWQuYWRkKGZ1bmN0aW9uIChlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgICAgICAgICBfdGhpcy5vblRlbXBsYXRlRWxlbWVudFByb3BlcnR5Q2hhbmdlZChlbGVtZW50LCBvcHRpb25zKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChlbGVtZW50LmlzUGFuZWwpIHtcbiAgICAgICAgICAgIGVsZW1lbnQuYWRkRWxlbWVudENhbGxiYWNrID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5hZGRPblByb3BlcnR5Q2hhbmdlZENhbGxiYWNrKGVsZW1lbnQpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbC5wcm90b3R5cGUub25UZW1wbGF0ZUVsZW1lbnRQcm9wZXJ0eUNoYW5nZWQgPSBmdW5jdGlvbiAoZWxlbWVudCwgb3B0aW9ucykge1xuICAgICAgICBpZiAodGhpcy5pc0xvYWRpbmdGcm9tSnNvbiB8fCB0aGlzLnVzZVRlbXBsYXRlUGFuZWwgfHwgdGhpcy5wYW5lbHMubGVuZ3RoID09IDApXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciBwcm9wZXJ0eSA9IF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bXCJTZXJpYWxpemVyXCJdLmZpbmRQcm9wZXJ0eShlbGVtZW50LmdldFR5cGUoKSwgb3B0aW9ucy5uYW1lKTtcbiAgICAgICAgaWYgKCFwcm9wZXJ0eSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIHBhbmVscyA9IHRoaXMucGFuZWxzO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhbmVscy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIHF1ZXN0aW9uID0gcGFuZWxzW2ldLmdldFF1ZXN0aW9uQnlOYW1lKGVsZW1lbnQubmFtZSk7XG4gICAgICAgICAgICBpZiAoISFxdWVzdGlvbiAmJiBxdWVzdGlvbltvcHRpb25zLm5hbWVdICE9PSBvcHRpb25zLm5ld1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcXVlc3Rpb25bb3B0aW9ucy5uYW1lXSA9IG9wdGlvbnMubmV3VmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsLnByb3RvdHlwZSwgXCJ1c2VUZW1wbGF0ZVBhbmVsXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pc0Rlc2lnbk1vZGUgJiYgIXRoaXMuaXNDb250ZW50RWxlbWVudDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwucHJvdG90eXBlLmdldFR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBcInBhbmVsZHluYW1pY1wiO1xuICAgIH07XG4gICAgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbC5wcm90b3R5cGUuY2xlYXJPbkRlbGV0aW5nQ29udGFpbmVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnBhbmVscy5mb3JFYWNoKGZ1bmN0aW9uIChwYW5lbCkge1xuICAgICAgICAgICAgcGFuZWwuY2xlYXJPbkRlbGV0aW5nQ29udGFpbmVyKCk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwucHJvdG90eXBlLCBcImlzQWxsb3dUaXRsZUxlZnRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwucHJvdG90eXBlLnJlbW92ZUVsZW1lbnQgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZS5yZW1vdmVFbGVtZW50KGVsZW1lbnQpO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwucHJvdG90eXBlLCBcInRlbXBsYXRlXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEEgYFBhbmVsTW9kZWxgIG9iamVjdCB1c2VkIGFzIGEgdGVtcGxhdGUgdG8gY3JlYXRlIGR5bmFtaWMgcGFuZWxzLlxuICAgICAgICAgKiBAc2VlIFBhbmVsTW9kZWxcbiAgICAgICAgICogQHNlZSB0ZW1wbGF0ZUVsZW1lbnRzXG4gICAgICAgICAqIEBzZWUgdGVtcGxhdGVUaXRsZVxuICAgICAgICAgKiBAc2VlIHBhbmVsc1xuICAgICAgICAgKiBAc2VlIHBhbmVsQ291bnRcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGVtcGxhdGVWYWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwucHJvdG90eXBlLmdldFBhbmVsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsLnByb3RvdHlwZSwgXCJ0ZW1wbGF0ZUVsZW1lbnRzXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFuIGFycmF5IG9mIHF1ZXN0aW9ucyBhbmQgcGFuZWxzIGluY2x1ZGVkIGluIGEgcGFuZWwgdGVtcGxhdGUuXG4gICAgICAgICAqIEBzZWUgdGVtcGxhdGVcbiAgICAgICAgICogQHNlZSBwYW5lbHNcbiAgICAgICAgICogQHNlZSBwYW5lbENvdW50XG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRlbXBsYXRlLmVsZW1lbnRzO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwucHJvdG90eXBlLCBcInRlbXBsYXRlVGl0bGVcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogQSB0ZW1wbGF0ZSBmb3IgcGFuZWwgdGl0bGVzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBUaGUgdGVtcGxhdGUgY2FuIGNvbnRhaW4gdGhlIGZvbGxvd2luZyBwbGFjZWhvbGRlcnM6XG4gICAgICAgICAqXG4gICAgICAgICAqIC0gYHtwYW5lbEluZGV4fWAgLSBBIHplcm8tYmFzZWQgaW5kZXggb2YgYSBwYW5lbCBpbiB0aGUgW2BwYW5lbHNgXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2UvZHluYW1pYy1wYW5lbC1tb2RlbCNwYW5lbHMpIGFycmF5LlxuICAgICAgICAgKiAtIGB7dmlzaWJsZVBhbmVsSW5kZXh9YCAtIEEgemVyby1iYXNlZCBpbmRleCBvZiBhIHBhbmVsIGluIHRoZSBbYHZpc2libGVQYW5lbHNgXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2UvZHluYW1pYy1wYW5lbC1tb2RlbCN2aXNpYmxlUGFuZWxzKSBhcnJheS5cbiAgICAgICAgICogQHNlZSB0ZW1wbGF0ZVxuICAgICAgICAgKiBAc2VlIHRlbXBsYXRlRGVzY3JpcHRpb25cbiAgICAgICAgICogQHNlZSB0ZW1wbGF0ZUVsZW1lbnRzXG4gICAgICAgICAqIEBzZWUgcGFuZWxzXG4gICAgICAgICAqIEBzZWUgcGFuZWxDb3VudFxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZS50aXRsZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAobmV3VmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMudGVtcGxhdGUudGl0bGUgPSBuZXdWYWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsLnByb3RvdHlwZSwgXCJsb2NUZW1wbGF0ZVRpdGxlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZS5sb2NUaXRsZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsLnByb3RvdHlwZSwgXCJ0ZW1wbGF0ZVRhYlRpdGxlXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEEgdGVtcGxhdGUgZm9yIHRhYiB0aXRsZXMuIEFwcGxpZXMgd2hlbiBbYHJlbmRlck1vZGVgXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2UvZHluYW1pYy1wYW5lbC1tb2RlbCNyZW5kZXJNb2RlKSBpcyBgXCJ0YWJcImAuXG4gICAgICAgICAqXG4gICAgICAgICAqIFRoZSB0ZW1wbGF0ZSBjYW4gY29udGFpbiB0aGUgZm9sbG93aW5nIHBsYWNlaG9sZGVyczpcbiAgICAgICAgICpcbiAgICAgICAgICogLSBge3BhbmVsSW5kZXh9YCAtIEEgemVyby1iYXNlZCBpbmRleCBvZiBhIHBhbmVsIGluIHRoZSBbYHBhbmVsc2BdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vYXBpLXJlZmVyZW5jZS9keW5hbWljLXBhbmVsLW1vZGVsI3BhbmVscykgYXJyYXkuXG4gICAgICAgICAqIC0gYHt2aXNpYmxlUGFuZWxJbmRleH1gIC0gQSB6ZXJvLWJhc2VkIGluZGV4IG9mIGEgcGFuZWwgaW4gdGhlIFtgdmlzaWJsZVBhbmVsc2BdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vYXBpLXJlZmVyZW5jZS9keW5hbWljLXBhbmVsLW1vZGVsI3Zpc2libGVQYW5lbHMpIGFycmF5LlxuICAgICAgICAgKiBAc2VlIHRlbXBsYXRlVGl0bGVcbiAgICAgICAgICogQHNlZSByZW5kZXJNb2RlXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY1RlbXBsYXRlVGFiVGl0bGUudGV4dDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAobmV3VmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMubG9jVGVtcGxhdGVUYWJUaXRsZS50ZXh0ID0gbmV3VmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbC5wcm90b3R5cGUsIFwibG9jVGVtcGxhdGVUYWJUaXRsZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJ0ZW1wbGF0ZVRhYlRpdGxlXCIpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwucHJvdG90eXBlLCBcInRlbXBsYXRlRGVzY3JpcHRpb25cIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogQSB0ZW1wbGF0ZSBmb3IgcGFuZWwgZGVzY3JpcHRpb25zLlxuICAgICAgICAgKiBAc2VlIHRlbXBsYXRlXG4gICAgICAgICAqIEBzZWUgdGVtcGxhdGVUaXRsZVxuICAgICAgICAgKiBAc2VlIHRlbXBsYXRlRWxlbWVudHNcbiAgICAgICAgICogQHNlZSBwYW5lbHNcbiAgICAgICAgICogQHNlZSBwYW5lbENvdW50XG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRlbXBsYXRlLmRlc2NyaXB0aW9uO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChuZXdWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZS5kZXNjcmlwdGlvbiA9IG5ld1ZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwucHJvdG90eXBlLCBcImxvY1RlbXBsYXRlRGVzY3JpcHRpb25cIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRlbXBsYXRlLmxvY0Rlc2NyaXB0aW9uO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwucHJvdG90eXBlLCBcInRlbXBsYXRlVmlzaWJsZUlmXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEEgQm9vbGVhbiBleHByZXNzaW9uIHRoYXQgaXMgZXZhbHVhdGVkIGFnYWluc3QgZWFjaCBwYW5lbC4gSWYgdGhlIGV4cHJlc3Npb24gZXZhbHVhdGVzIHRvIGBmYWxzZWAsIHRoZSBwYW5lbCBiZWNvbWVzIGhpZGRlbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQSBzdXJ2ZXkgcGFyc2VzIGFuZCBydW5zIGFsbCBleHByZXNzaW9ucyBvbiBzdGFydHVwLiBJZiBhbnkgdmFsdWVzIHVzZWQgaW4gdGhlIGV4cHJlc3Npb24gY2hhbmdlLCB0aGUgc3VydmV5IHJlLWV2YWx1YXRlcyBpdC5cbiAgICAgICAgICpcbiAgICAgICAgICogVXNlIHRoZSBge3BhbmVsfWAgcGxhY2Vob2xkZXIgdG8gcmVmZXJlbmNlIHRoZSBjdXJyZW50IHBhbmVsIGluIHRoZSBleHByZXNzaW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBSZWZlciB0byB0aGUgZm9sbG93aW5nIGhlbHAgdG9waWMgZm9yIG1vcmUgaW5mb3JtYXRpb246IFtDb25kaXRpb25hbCBWaXNpYmlsaXR5XShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2Rlc2lnbi1zdXJ2ZXkvY29uZGl0aW9uYWwtbG9naWMjY29uZGl0aW9uYWwtdmlzaWJpbGl0eSkuXG4gICAgICAgICAqIEBzZWUgdmlzaWJsZUlmXG4gICAgICAgICAqIEBzZWUgdmlzaWJsZVBhbmVsc1xuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZS52aXNpYmxlSWY7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZS52aXNpYmxlSWYgPSB2YWw7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbC5wcm90b3R5cGUsIFwiaXRlbXNcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciByZXMgPSBbXTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYW5lbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICByZXMucHVzaCh0aGlzLnBhbmVsc1tpXS5kYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbC5wcm90b3R5cGUsIFwicGFuZWxzXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFuIGFycmF5IG9mIGBQYW5lbE1vZGVsYCBvYmplY3RzIGNyZWF0ZWQgYmFzZWQgb24gYSBwYW5lbCB0ZW1wbGF0ZS5cbiAgICAgICAgICogQHNlZSBQYW5lbE1vZGVsXG4gICAgICAgICAqIEBzZWUgdGVtcGxhdGVcbiAgICAgICAgICogQHNlZSBwYW5lbENvdW50XG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJwYW5lbHNcIik7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbC5wcm90b3R5cGUsIFwidmlzaWJsZVBhbmVsc1wiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBbiBhcnJheSBvZiBjdXJyZW50bHkgdmlzaWJsZSBwYW5lbHMgKFtgUGFuZWxNb2RlbGBdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vYXBpLXJlZmVyZW5jZS9wYW5lbC1tb2RlbCkgb2JqZWN0cykuXG4gICAgICAgICAqIEBzZWUgdGVtcGxhdGVWaXNpYmxlSWZcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInZpc2libGVQYW5lbHNcIik7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsLnByb3RvdHlwZS5vblBhbmVsQWRkZWQgPSBmdW5jdGlvbiAocGFuZWwpIHtcbiAgICAgICAgdGhpcy5vblBhbmVsUmVtb3ZlZENvcmUocGFuZWwpO1xuICAgICAgICBpZiAoIXBhbmVsLnZpc2libGUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICAgIHZhciBwYW5lbHMgPSB0aGlzLnBhbmVscztcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYW5lbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChwYW5lbHNbaV0gPT09IHBhbmVsKVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgaWYgKHBhbmVsc1tpXS52aXNpYmxlKVxuICAgICAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52aXNpYmxlUGFuZWxzLnNwbGljZShpbmRleCwgMCwgcGFuZWwpO1xuICAgICAgICB0aGlzLmFkZFRhYkZyb21Ub29sYmFyKHBhbmVsLCBpbmRleCk7XG4gICAgICAgIGlmICghdGhpcy5jdXJyZW50UGFuZWwpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhbmVsID0gcGFuZWw7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwucHJvdG90eXBlLm9uUGFuZWxSZW1vdmVkID0gZnVuY3Rpb24gKHBhbmVsKSB7XG4gICAgICAgIHZhciBpbmRleCA9IHRoaXMub25QYW5lbFJlbW92ZWRDb3JlKHBhbmVsKTtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhbmVsID09PSBwYW5lbCkge1xuICAgICAgICAgICAgdmFyIHZpc1BhbmVscyA9IHRoaXMudmlzaWJsZVBhbmVscztcbiAgICAgICAgICAgIGlmIChpbmRleCA+PSB2aXNQYW5lbHMubGVuZ3RoKVxuICAgICAgICAgICAgICAgIGluZGV4ID0gdmlzUGFuZWxzLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYW5lbCA9IGluZGV4ID49IDAgPyB2aXNQYW5lbHNbaW5kZXhdIDogbnVsbDtcbiAgICAgICAgfVxuICAgIH07XG4gICAgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbC5wcm90b3R5cGUub25QYW5lbFJlbW92ZWRDb3JlID0gZnVuY3Rpb24gKHBhbmVsKSB7XG4gICAgICAgIHZhciB2aXNQYW5lbHMgPSB0aGlzLnZpc2libGVQYW5lbHM7XG4gICAgICAgIHZhciBpbmRleCA9IHZpc1BhbmVscy5pbmRleE9mKHBhbmVsKTtcbiAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIHZpc1BhbmVscy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVUYWJGcm9tVG9vbGJhcihwYW5lbCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwucHJvdG90eXBlLCBcImN1cnJlbnRJbmRleFwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBIHplcm8tYmFzZWQgaW5kZXggb2YgdGhlIGN1cnJlbnRseSBkaXNwbGF5ZWQgcGFuZWwuXG4gICAgICAgICAqXG4gICAgICAgICAqIFdoZW4gYHJlbmRlck1vZGVgIGlzIGBcImxpc3RcImAgb3IgRHluYW1pYyBQYW5lbCBpcyBlbXB0eSAoYHBhbmVsQ291bnRgIGlzIDApLCB0aGlzIHByb3BlcnR5IGNvbnRhaW5zIC0xLlxuICAgICAgICAgKiBAc2VlIGN1cnJlbnRQYW5lbFxuICAgICAgICAgKiBAc2VlIHBhbmVsc1xuICAgICAgICAgKiBAc2VlIHBhbmVsQ291bnRcbiAgICAgICAgICogQHNlZSByZW5kZXJNb2RlXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzUmVuZGVyTW9kZUxpc3QpXG4gICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgICAgaWYgKHRoaXMudXNlVGVtcGxhdGVQYW5lbClcbiAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZpc2libGVQYW5lbHMuaW5kZXhPZih0aGlzLmN1cnJlbnRQYW5lbCk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgaWYgKHZhbCA8IDAgfHwgdGhpcy52aXNpYmxlUGFuZWxDb3VudCA8IDEpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKHZhbCA+PSB0aGlzLnZpc2libGVQYW5lbENvdW50KVxuICAgICAgICAgICAgICAgIHZhbCA9IHRoaXMudmlzaWJsZVBhbmVsQ291bnQgLSAxO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGFuZWwgPSB0aGlzLnZpc2libGVQYW5lbHNbdmFsXTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsLnByb3RvdHlwZSwgXCJjdXJyZW50UGFuZWxcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogQSBgUGFuZWxNb2RlbGAgb2JqZWN0IHRoYXQgaXMgdGhlIGN1cnJlbnRseSBkaXNwbGF5ZWQgcGFuZWwuXG4gICAgICAgICAqXG4gICAgICAgICAqIFdoZW4gYHJlbmRlck1vZGVgIGlzIGBcImxpc3RcImAgb3IgRHluYW1pYyBQYW5lbCBpcyBlbXB0eSAoYHBhbmVsQ291bnRgIGlzIDApLCB0aGlzIHByb3BlcnR5IGNvbnRhaW5zIGBudWxsYC5cbiAgICAgICAgICogQHNlZSBjdXJyZW50SW5kZXhcbiAgICAgICAgICogQHNlZSBwYW5lbHNcbiAgICAgICAgICogQHNlZSBwYW5lbENvdW50XG4gICAgICAgICAqIEBzZWUgcmVuZGVyTW9kZVxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0Rlc2lnbk1vZGUpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudGVtcGxhdGU7XG4gICAgICAgICAgICBpZiAodGhpcy5pc1JlbmRlck1vZGVMaXN0IHx8IHRoaXMudXNlVGVtcGxhdGVQYW5lbClcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIHZhciByZXMgPSB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjdXJyZW50UGFuZWxcIiwgbnVsbCk7XG4gICAgICAgICAgICBpZiAoIXJlcyAmJiB0aGlzLnZpc2libGVQYW5lbENvdW50ID4gMCkge1xuICAgICAgICAgICAgICAgIHJlcyA9IHRoaXMudmlzaWJsZVBhbmVsc1swXTtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRQYW5lbCA9IHJlcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNSZW5kZXJNb2RlTGlzdCB8fCB0aGlzLnVzZVRlbXBsYXRlUGFuZWwpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdmFyIGN1clBhbmVsID0gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY3VycmVudFBhbmVsXCIpO1xuICAgICAgICAgICAgaWYgKCEhdmFsICYmIHRoaXMudmlzaWJsZVBhbmVscy5pbmRleE9mKHZhbCkgPCAwIHx8IHZhbCA9PT0gY3VyUGFuZWwpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKGN1clBhbmVsKSB7XG4gICAgICAgICAgICAgICAgY3VyUGFuZWwub25IaWRpbmdDb250ZW50KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjdXJyZW50UGFuZWxcIiwgdmFsKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRm9vdGVyQWN0aW9ucygpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVUYWJUb29sYmFySXRlbXNQcmVzc2VkU3RhdGUoKTtcbiAgICAgICAgICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMuY3VycmVudEluZGV4Q2hhbmdlZENhbGxiYWNrKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwucHJvdG90eXBlLm9uSGlkaW5nQ29udGVudCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5vbkhpZGluZ0NvbnRlbnQuY2FsbCh0aGlzKTtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhbmVsKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYW5lbC5vbkhpZGluZ0NvbnRlbnQoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudmlzaWJsZVBhbmVscy5mb3JFYWNoKGZ1bmN0aW9uIChwYW5lbCkgeyByZXR1cm4gcGFuZWwub25IaWRpbmdDb250ZW50KCk7IH0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbC5wcm90b3R5cGUsIFwiY29uZmlybURlbGV0ZVwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgd2hldGhlciB0byBkaXNwbGF5IGEgY29uZmlybWF0aW9uIGRpYWxvZyB3aGVuIGEgcmVzcG9uZGVudCB3YW50cyB0byBkZWxldGUgYSBwYW5lbC5cbiAgICAgICAgICogQHNlZSBjb25maXJtRGVsZXRlVGV4dFxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY29uZmlybURlbGV0ZVwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjb25maXJtRGVsZXRlXCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbC5wcm90b3R5cGUsIFwia2V5TmFtZVwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgYSBrZXkgcXVlc3Rpb24uIFNldCB0aGlzIHByb3BlcnR5IHRvIHRoZSBuYW1lIG9mIGEgcXVlc3Rpb24gdXNlZCBpbiB0aGUgdGVtcGxhdGUsIGFuZCBEeW5hbWljIFBhbmVsIHdpbGwgZGlzcGxheSBga2V5RHVwbGljYXRpb25FcnJvcmAgaWYgYSB1c2VyIHRyaWVzIHRvIGVudGVyIGEgZHVwbGljYXRlIHZhbHVlIGluIHRoaXMgcXVlc3Rpb24uXG4gICAgICAgICAqIEBzZWUga2V5RHVwbGljYXRpb25FcnJvclxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwia2V5TmFtZVwiLCBcIlwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJrZXlOYW1lXCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbC5wcm90b3R5cGUsIFwiY29uZmlybURlbGV0ZVRleHRcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogQSBtZXNzYWdlIGRpc3BsYXllZCBpbiBhIGNvbmZpcm1hdGlvbiBkaWFsb2cgdGhhdCBhcHBlYXJzIHdoZW4gYSByZXNwb25kZW50IHdhbnRzIHRvIGRlbGV0ZSBhIHBhbmVsLlxuICAgICAgICAgKiBAc2VlIGNvbmZpcm1EZWxldGVcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwiY29uZmlybURlbGV0ZVRleHRcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJjb25maXJtRGVsZXRlVGV4dFwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwucHJvdG90eXBlLCBcImxvY0NvbmZpcm1EZWxldGVUZXh0XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcImNvbmZpcm1EZWxldGVUZXh0XCIpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwucHJvdG90eXBlLCBcImtleUR1cGxpY2F0aW9uRXJyb3JcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogQW4gZXJyb3IgbWVzc2FnZSBkaXNwbGF5ZWQgd2hlbiB1c2VycyBlbnRlciBhIGR1cGxpY2F0ZSB2YWx1ZSBpbnRvIGEgcXVlc3Rpb24gdGhhdCBhY2NlcHRzIG9ubHkgdW5pcXVlIHZhbHVlcyAoYGlzVW5pcXVlYCBpcyBzZXQgdG8gYHRydWVgIG9yIGBrZXlOYW1lYCBpcyBzcGVjaWZpZWQpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBBIGRlZmF1bHQgdmFsdWUgZm9yIHRoaXMgcHJvcGVydHkgaXMgdGFrZW4gZnJvbSBhIFtsb2NhbGl6YXRpb24gZGljdGlvbmFyeV0oaHR0cHM6Ly9naXRodWIuY29tL3N1cnZleWpzL3N1cnZleS1saWJyYXJ5L3RyZWUvbWFzdGVyL3NyYy9sb2NhbGl6YXRpb24pLiBSZWZlciB0byB0aGUgZm9sbG93aW5nIGhlbHAgdG9waWMgZm9yIG1vcmUgaW5mb3JtYXRpb246IFtMb2NhbGl6YXRpb24gJiBHbG9iYWxpemF0aW9uXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2xvY2FsaXphdGlvbikuXG4gICAgICAgICAqIEBzZWUga2V5TmFtZVxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJrZXlEdXBsaWNhdGlvbkVycm9yXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwia2V5RHVwbGljYXRpb25FcnJvclwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwucHJvdG90eXBlLCBcImxvY0tleUR1cGxpY2F0aW9uRXJyb3JcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwia2V5RHVwbGljYXRpb25FcnJvclwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsLnByb3RvdHlwZSwgXCJwYW5lbFByZXZUZXh0XCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEEgY2FwdGlvbiBmb3IgdGhlIFByZXZpb3VzIGJ1dHRvbi4gQXBwbGllcyBvbmx5IGlmIGByZW5kZXJNb2RlYCBpcyBkaWZmZXJlbnQgZnJvbSBgXCJsaXN0XCJgLlxuICAgICAgICAgKiBAc2VlIHJlbmRlck1vZGVcbiAgICAgICAgICogQHNlZSBpc1ByZXZCdXR0b25WaXNpYmxlXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcInBhbmVsUHJldlRleHRcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJwYW5lbFByZXZUZXh0XCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbC5wcm90b3R5cGUsIFwibG9jUGFuZWxQcmV2VGV4dFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJwYW5lbFByZXZUZXh0XCIpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwucHJvdG90eXBlLCBcInBhbmVsTmV4dFRleHRcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogQSBjYXB0aW9uIGZvciB0aGUgTmV4dCBidXR0b24uIEFwcGxpZXMgb25seSBpZiBgcmVuZGVyTW9kZWAgaXMgZGlmZmVyZW50IGZyb20gYFwibGlzdFwiYC5cbiAgICAgICAgICogQHNlZSByZW5kZXJNb2RlXG4gICAgICAgICAqIEBzZWUgaXNOZXh0QnV0dG9uVmlzaWJsZVxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJwYW5lbE5leHRUZXh0XCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwicGFuZWxOZXh0VGV4dFwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwucHJvdG90eXBlLCBcImxvY1BhbmVsTmV4dFRleHRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwicGFuZWxOZXh0VGV4dFwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsLnByb3RvdHlwZSwgXCJwYW5lbEFkZFRleHRcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogQSBjYXB0aW9uIGZvciB0aGUgQWRkIFBhbmVsIGJ1dHRvbi5cbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwicGFuZWxBZGRUZXh0XCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJwYW5lbEFkZFRleHRcIiwgdmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwucHJvdG90eXBlLCBcImxvY1BhbmVsQWRkVGV4dFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJwYW5lbEFkZFRleHRcIik7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbC5wcm90b3R5cGUsIFwicGFuZWxSZW1vdmVUZXh0XCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEEgY2FwdGlvbiBmb3IgdGhlIERlbGV0ZSBQYW5lbCBidXR0b24uXG4gICAgICAgICAqIEBzZWUgcGFuZWxSZW1vdmVCdXR0b25Mb2NhdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJwYW5lbFJlbW92ZVRleHRcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJwYW5lbFJlbW92ZVRleHRcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsLnByb3RvdHlwZSwgXCJsb2NQYW5lbFJlbW92ZVRleHRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwicGFuZWxSZW1vdmVUZXh0XCIpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwucHJvdG90eXBlLCBcImlzUHJvZ3Jlc3NUb3BTaG93aW5nXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgdHJ1ZSB3aGVuIHRoZSByZW5kZXJNb2RlIGVxdWFscyB0byBcInByb2dyZXNzVG9wXCIgb3IgXCJwcm9ncmVzc1RvcEJvdHRvbVwiXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlck1vZGUgPT09IFwicHJvZ3Jlc3NUb3BcIiB8fCB0aGlzLnJlbmRlck1vZGUgPT09IFwicHJvZ3Jlc3NUb3BCb3R0b21cIjtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsLnByb3RvdHlwZSwgXCJpc1Byb2dyZXNzQm90dG9tU2hvd2luZ1wiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIHRydWUgd2hlbiB0aGUgcmVuZGVyTW9kZSBlcXVhbHMgdG8gXCJwcm9ncmVzc0JvdHRvbVwiIG9yIFwicHJvZ3Jlc3NUb3BCb3R0b21cIlxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJNb2RlID09PSBcInByb2dyZXNzQm90dG9tXCIgfHwgdGhpcy5yZW5kZXJNb2RlID09PSBcInByb2dyZXNzVG9wQm90dG9tXCI7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbC5wcm90b3R5cGUsIFwiaXNQcmV2QnV0dG9uVmlzaWJsZVwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgUHJldmlvdXMgYnV0dG9uIGlzIHZpc2libGUuXG4gICAgICAgICAqIEBzZWUgY3VycmVudEluZGV4XG4gICAgICAgICAqIEBzZWUgY3VycmVudFBhbmVsXG4gICAgICAgICAqIEBzZWUgcGFuZWxQcmV2VGV4dFxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLmN1cnJlbnRJbmRleCA+IDA7IH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbC5wcm90b3R5cGUsIFwiaXNQcmV2QnV0dG9uU2hvd2luZ1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5pc1ByZXZCdXR0b25WaXNpYmxlOyB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwucHJvdG90eXBlLCBcImlzTmV4dEJ1dHRvblZpc2libGVcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIE5leHQgYnV0dG9uIGlzIHZpc2libGUuXG4gICAgICAgICAqIEBzZWUgY3VycmVudEluZGV4XG4gICAgICAgICAqIEBzZWUgY3VycmVudFBhbmVsXG4gICAgICAgICAqIEBzZWUgcGFuZWxOZXh0VGV4dFxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50SW5kZXggPj0gMCAmJiB0aGlzLmN1cnJlbnRJbmRleCA8IHRoaXMudmlzaWJsZVBhbmVsQ291bnQgLSAxO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwucHJvdG90eXBlLCBcImlzTmV4dEJ1dHRvblNob3dpbmdcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuaXNOZXh0QnV0dG9uVmlzaWJsZTsgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsLnByb3RvdHlwZSwgXCJpc1JhbmdlU2hvd2luZ1wiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIHRydWUgd2hlbiBzaG93UmFuZ2VJblByb2dyZXNzIGVxdWFscyB0byB0cnVlLCByZW5kZXJNb2RlIGRvZXNuJ3QgZXF1YWwgdG8gXCJsaXN0XCIgYW5kIHZpc2libGVQYW5lbENvdW50IGlzID49IDIuXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAodGhpcy5zaG93UmFuZ2VJblByb2dyZXNzICYmIHRoaXMuY3VycmVudEluZGV4ID49IDAgJiYgdGhpcy52aXNpYmxlUGFuZWxDb3VudCA+IDEpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbC5wcm90b3R5cGUuZ2V0RWxlbWVudHNJbkRlc2lnbiA9IGZ1bmN0aW9uIChpbmNsdWRlSGlkZGVuKSB7XG4gICAgICAgIGlmIChpbmNsdWRlSGlkZGVuID09PSB2b2lkIDApIHsgaW5jbHVkZUhpZGRlbiA9IGZhbHNlOyB9XG4gICAgICAgIHJldHVybiBpbmNsdWRlSGlkZGVuID8gW3RoaXMudGVtcGxhdGVdIDogdGhpcy50ZW1wbGF0ZUVsZW1lbnRzO1xuICAgIH07XG4gICAgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbC5wcm90b3R5cGUucHJlcGFyZVZhbHVlRm9yUGFuZWxDcmVhdGluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5hZGRpbmdOZXdQYW5lbHNWYWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgICAgIHRoaXMuaXNBZGRpbmdOZXdQYW5lbHMgPSB0cnVlO1xuICAgICAgICB0aGlzLmlzTmV3UGFuZWxzVmFsdWVDaGFuZ2VkID0gZmFsc2U7XG4gICAgfTtcbiAgICBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsLnByb3RvdHlwZS5zZXRWYWx1ZUFmdGVyUGFuZWxzQ3JlYXRpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuaXNBZGRpbmdOZXdQYW5lbHMgPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuaXNOZXdQYW5lbHNWYWx1ZUNoYW5nZWQpIHtcbiAgICAgICAgICAgIHRoaXMuaXNWYWx1ZUNoYW5naW5nSW50ZXJuYWxseSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5hZGRpbmdOZXdQYW5lbHNWYWx1ZTtcbiAgICAgICAgICAgIHRoaXMuaXNWYWx1ZUNoYW5naW5nSW50ZXJuYWxseSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsLnByb3RvdHlwZS5nZXRWYWx1ZUNvcmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzQWRkaW5nTmV3UGFuZWxzXG4gICAgICAgICAgICA/IHRoaXMuYWRkaW5nTmV3UGFuZWxzVmFsdWVcbiAgICAgICAgICAgIDogX3N1cGVyLnByb3RvdHlwZS5nZXRWYWx1ZUNvcmUuY2FsbCh0aGlzKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwucHJvdG90eXBlLnNldFZhbHVlQ29yZSA9IGZ1bmN0aW9uIChuZXdWYWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5pc0FkZGluZ05ld1BhbmVscykge1xuICAgICAgICAgICAgdGhpcy5pc05ld1BhbmVsc1ZhbHVlQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmFkZGluZ05ld1BhbmVsc1ZhbHVlID0gbmV3VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBfc3VwZXIucHJvdG90eXBlLnNldFZhbHVlQ29yZS5jYWxsKHRoaXMsIG5ld1ZhbHVlKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbC5wcm90b3R5cGUuc2V0SXNNb2JpbGUgPSBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUuc2V0SXNNb2JpbGUuY2FsbCh0aGlzLCB2YWwpO1xuICAgICAgICAodGhpcy5wYW5lbHMgfHwgW10pLmZvckVhY2goZnVuY3Rpb24gKHBhbmVsKSB7IHJldHVybiBwYW5lbC5lbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICAgICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIF9xdWVzdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fW1wiUXVlc3Rpb25cIl0pIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50LmlzTW9iaWxlID0gdmFsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTsgfSk7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbC5wcm90b3R5cGUsIFwicGFuZWxDb3VudFwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgbnVtYmVyIG9mIHBhbmVscyBpbiBEeW5hbWljIFBhbmVsLlxuICAgICAgICAgKiBAc2VlIG1pblBhbmVsQ291bnRcbiAgICAgICAgICogQHNlZSBtYXhQYW5lbENvdW50XG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlzTG9hZGluZ0Zyb21Kc29uIHx8IHRoaXMudXNlVGVtcGxhdGVQYW5lbFxuICAgICAgICAgICAgICAgID8gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicGFuZWxDb3VudFwiKVxuICAgICAgICAgICAgICAgIDogdGhpcy5wYW5lbHMubGVuZ3RoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIGlmICh2YWwgPCAwKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzTG9hZGluZ0Zyb21Kc29uIHx8IHRoaXMudXNlVGVtcGxhdGVQYW5lbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInBhbmVsQ291bnRcIiwgdmFsKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodmFsID09IHRoaXMucGFuZWxzLmxlbmd0aCB8fCB0aGlzLnVzZVRlbXBsYXRlUGFuZWwpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVCaW5kaW5ncyhcInBhbmVsQ291bnRcIiwgdmFsKTtcbiAgICAgICAgICAgIHRoaXMucHJlcGFyZVZhbHVlRm9yUGFuZWxDcmVhdGluZygpO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMucGFuZWxDb3VudDsgaSA8IHZhbDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIHBhbmVsID0gdGhpcy5jcmVhdGVOZXdQYW5lbCgpO1xuICAgICAgICAgICAgICAgIHRoaXMucGFuZWxzLnB1c2gocGFuZWwpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlbmRlck1vZGUgPT0gXCJsaXN0XCIgJiYgdGhpcy5wYW5lbHNTdGF0ZSAhPSBcImRlZmF1bHRcIikge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5wYW5lbHNTdGF0ZSA9PT0gXCJleHBhbmRcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFuZWwuZXhwYW5kKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISFwYW5lbC50aXRsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhbmVsLmNvbGxhcHNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgcmVtb3ZlZFBhbmVscyA9IFtdO1xuICAgICAgICAgICAgaWYgKHZhbCA8IHRoaXMucGFuZWxDb3VudCkge1xuICAgICAgICAgICAgICAgIHJlbW92ZWRQYW5lbHMgPSB0aGlzLnBhbmVscy5zcGxpY2UodmFsLCB0aGlzLnBhbmVsQ291bnQgLSB2YWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZUFmdGVyUGFuZWxzQ3JlYXRpbmcoKTtcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWVCYXNlZE9uUGFuZWxDb3VudCgpO1xuICAgICAgICAgICAgdGhpcy5yZVJ1bkNvbmRpdGlvbigpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVGb290ZXJBY3Rpb25zKCk7XG4gICAgICAgICAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLnBhbmVsQ291bnRDaGFuZ2VkQ2FsbGJhY2spO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwucHJvdG90eXBlLCBcInZpc2libGVQYW5lbENvdW50XCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgdGhlIG51bWJlciBvZiB2aXNpYmxlIHBhbmVscyBpbiBEeW5hbWljIFBhbmVsLlxuICAgICAgICAgKiBAc2VlIHRlbXBsYXRlVmlzaWJsZUlmXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMudmlzaWJsZVBhbmVscy5sZW5ndGg7IH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbC5wcm90b3R5cGUsIFwicGFuZWxzU3RhdGVcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHdoZXRoZXIgdXNlcnMgY2FuIGV4cGFuZCBhbmQgY29sbGFwc2UgcGFuZWxzLiBBcHBsaWVzIGlmIGByZW5kZXJNb2RlYCBpcyBgXCJsaXN0XCJgIGFuZCB0aGUgYHRlbXBsYXRlVGl0bGVgIHByb3BlcnR5IGlzIHNwZWNpZmllZC5cbiAgICAgICAgICpcbiAgICAgICAgICogUG9zc2libGUgdmFsdWVzOlxuICAgICAgICAgKlxuICAgICAgICAgKiAtIGBcImRlZmF1bHRcImAgKGRlZmF1bHQpIC0gQWxsIHBhbmVscyBhcmUgZGlzcGxheWVkIGluIGZ1bGwgYW5kIGNhbm5vdCBiZSBjb2xsYXBzZWQuXG4gICAgICAgICAqIC0gYFwiZXhwYW5kZWRcImAgLSBBbGwgcGFuZWxzIGFyZSBkaXNwbGF5ZWQgaW4gZnVsbCBhbmQgY2FuIGJlIGNvbGxhcHNlZCBpbiB0aGUgVUkuXG4gICAgICAgICAqIC0gYFwiY29sbGFwc2VkXCJgIC0gQWxsIHBhbmVscyBkaXNwbGF5IG9ubHkgdGhlaXIgdGl0bGVzIGFuZCBkZXNjcmlwdGlvbnMgYW5kIGNhbiBiZSBleHBhbmRlZCBpbiB0aGUgVUkuXG4gICAgICAgICAqIC0gYFwiZmlyc3RFeHBhbmRlZFwiYCAtIE9ubHkgdGhlIGZpcnN0IHBhbmVsIGlzIGRpc3BsYXllZCBpbiBmdWxsOyBvdGhlciBwYW5lbHMgYXJlIGNvbGxhcHNlZCBhbmQgY2FuIGJlIGV4cGFuZGVkIGluIHRoZSBVSS5cbiAgICAgICAgICogQHNlZSByZW5kZXJNb2RlXG4gICAgICAgICAqIEBzZWUgdGVtcGxhdGVUaXRsZVxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicGFuZWxzU3RhdGVcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicGFuZWxzU3RhdGVcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwucHJvdG90eXBlLnNldFRlbXBsYXRlUGFuZWxTdXJ2ZXlJbXBsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnRlbXBsYXRlLnNldFN1cnZleUltcGwodGhpcy51c2VUZW1wbGF0ZVBhbmVsXG4gICAgICAgICAgICA/IHRoaXMuc3VydmV5SW1wbFxuICAgICAgICAgICAgOiBuZXcgUXVlc3Rpb25QYW5lbER5bmFtaWNUZW1wbGF0ZVN1cnZleUltcGwodGhpcykpO1xuICAgIH07XG4gICAgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbC5wcm90b3R5cGUuc2V0UGFuZWxzU3VydmV5SW1wbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhbmVscy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIHBhbmVsID0gdGhpcy5wYW5lbHNbaV07XG4gICAgICAgICAgICBpZiAocGFuZWwgPT0gdGhpcy50ZW1wbGF0ZSlcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIHBhbmVsLnNldFN1cnZleUltcGwocGFuZWwuZGF0YSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwucHJvdG90eXBlLnNldFBhbmVsc1N0YXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy51c2VUZW1wbGF0ZVBhbmVsIHx8IHRoaXMucmVuZGVyTW9kZSAhPSBcImxpc3RcIiB8fCAhdGhpcy50ZW1wbGF0ZVRpdGxlKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGFuZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgc3RhdGUgPSB0aGlzLnBhbmVsc1N0YXRlO1xuICAgICAgICAgICAgaWYgKHN0YXRlID09PSBcImZpcnN0RXhwYW5kZWRcIikge1xuICAgICAgICAgICAgICAgIHN0YXRlID0gaSA9PT0gMCA/IFwiZXhwYW5kZWRcIiA6IFwiY29sbGFwc2VkXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnBhbmVsc1tpXS5zdGF0ZSA9IHN0YXRlO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsLnByb3RvdHlwZS5zZXRWYWx1ZUJhc2VkT25QYW5lbENvdW50ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgICAgICBpZiAoIXZhbHVlIHx8ICFBcnJheS5pc0FycmF5KHZhbHVlKSlcbiAgICAgICAgICAgIHZhbHVlID0gW107XG4gICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT0gdGhpcy5wYW5lbENvdW50KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBmb3IgKHZhciBpID0gdmFsdWUubGVuZ3RoOyBpIDwgdGhpcy5wYW5lbENvdW50OyBpKyspXG4gICAgICAgICAgICB2YWx1ZS5wdXNoKHt9KTtcbiAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+IHRoaXMucGFuZWxDb3VudCkge1xuICAgICAgICAgICAgdmFsdWUuc3BsaWNlKHRoaXMucGFuZWxDb3VudCwgdmFsdWUubGVuZ3RoIC0gdGhpcy5wYW5lbENvdW50KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlzVmFsdWVDaGFuZ2luZ0ludGVybmFsbHkgPSB0cnVlO1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuaXNWYWx1ZUNoYW5naW5nSW50ZXJuYWxseSA9IGZhbHNlO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwucHJvdG90eXBlLCBcIm1pblBhbmVsQ291bnRcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogQSBtaW5pbXVtIG51bWJlciBvZiBwYW5lbHMgaW4gRHluYW1pYyBQYW5lbC4gVXNlcnMgY2Fubm90IGRlbGV0ZSBwYW5lbHMgaWYgYHBhbmVsQ291bnRgIGVxdWFscyBgbWluUGFuZWxDb3VudGAuXG4gICAgICAgICAqXG4gICAgICAgICAqIERlZmF1bHQgdmFsdWU6IDBcbiAgICAgICAgICogQHNlZSBwYW5lbENvdW50XG4gICAgICAgICAqIEBzZWUgbWF4UGFuZWxDb3VudFxuICAgICAgICAgKiBAc2VlIGFsbG93UmVtb3ZlUGFuZWxcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIm1pblBhbmVsQ291bnRcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgaWYgKHZhbCA8IDApXG4gICAgICAgICAgICAgICAgdmFsID0gMDtcbiAgICAgICAgICAgIGlmICh2YWwgPT0gdGhpcy5taW5QYW5lbENvdW50KVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm1pblBhbmVsQ291bnRcIiwgdmFsKTtcbiAgICAgICAgICAgIGlmICh2YWwgPiB0aGlzLm1heFBhbmVsQ291bnQpXG4gICAgICAgICAgICAgICAgdGhpcy5tYXhQYW5lbENvdW50ID0gdmFsO1xuICAgICAgICAgICAgaWYgKHRoaXMucGFuZWxDb3VudCA8IHZhbClcbiAgICAgICAgICAgICAgICB0aGlzLnBhbmVsQ291bnQgPSB2YWw7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbC5wcm90b3R5cGUsIFwibWF4UGFuZWxDb3VudFwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBIG1heGltdW0gbnVtYmVyIG9mIHBhbmVscyBpbiBEeW5hbWljIFBhbmVsLiBVc2VycyBjYW5ub3QgYWRkIG5ldyBwYW5lbHMgaWYgYHBhbmVsQ291bnRgIGVxdWFscyBgbWF4UGFuZWxDb3VudGAuXG4gICAgICAgICAqXG4gICAgICAgICAqIERlZmF1bHQgdmFsdWU6IDEwMCAoaW5oZXJpdGVkIGZyb20gW2BzZXR0aW5ncy5wYW5lbC5tYXhQYW5lbENvdW50YF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9zZXR0aW5ncyNwYW5lbE1heGltdW1QYW5lbENvdW50KSlcbiAgICAgICAgICogQHNlZSBwYW5lbENvdW50XG4gICAgICAgICAqIEBzZWUgbWluUGFuZWxDb3VudFxuICAgICAgICAgKiBAc2VlIGFsbG93QWRkUGFuZWxcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIm1heFBhbmVsQ291bnRcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgaWYgKHZhbCA8PSAwKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGlmICh2YWwgPiBfc2V0dGluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1tcInNldHRpbmdzXCJdLnBhbmVsLm1heFBhbmVsQ291bnQpXG4gICAgICAgICAgICAgICAgdmFsID0gX3NldHRpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bXCJzZXR0aW5nc1wiXS5wYW5lbC5tYXhQYW5lbENvdW50O1xuICAgICAgICAgICAgaWYgKHZhbCA9PSB0aGlzLm1heFBhbmVsQ291bnQpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibWF4UGFuZWxDb3VudFwiLCB2YWwpO1xuICAgICAgICAgICAgaWYgKHZhbCA8IHRoaXMubWluUGFuZWxDb3VudClcbiAgICAgICAgICAgICAgICB0aGlzLm1pblBhbmVsQ291bnQgPSB2YWw7XG4gICAgICAgICAgICBpZiAodGhpcy5wYW5lbENvdW50ID4gdmFsKVxuICAgICAgICAgICAgICAgIHRoaXMucGFuZWxDb3VudCA9IHZhbDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsLnByb3RvdHlwZSwgXCJhbGxvd0FkZFBhbmVsXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB3aGV0aGVyIHVzZXJzIGFyZSBhbGxvd2VkIHRvIGFkZCBuZXcgcGFuZWxzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBEZWZhdWx0IHZhbHVlOiBgdHJ1ZWBcbiAgICAgICAgICogQHNlZSBjYW5BZGRQYW5lbFxuICAgICAgICAgKiBAc2VlIGFsbG93UmVtb3ZlUGFuZWxcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImFsbG93QWRkUGFuZWxcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiYWxsb3dBZGRQYW5lbFwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwucHJvdG90eXBlLCBcImFsbG93UmVtb3ZlUGFuZWxcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHdoZXRoZXIgdXNlcnMgYXJlIGFsbG93ZWQgdG8gZGVsZXRlIHBhbmVscy5cbiAgICAgICAgICpcbiAgICAgICAgICogRGVmYXVsdCB2YWx1ZTogYHRydWVgXG4gICAgICAgICAqIEBzZWUgY2FuUmVtb3ZlUGFuZWxcbiAgICAgICAgICogQHNlZSBhbGxvd0FkZFBhbmVsXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJhbGxvd1JlbW92ZVBhbmVsXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImFsbG93UmVtb3ZlUGFuZWxcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsLnByb3RvdHlwZSwgXCJ0ZW1wbGF0ZVRpdGxlTG9jYXRpb25cIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogR2V0cyBvciBzZXRzIHRoZSBsb2NhdGlvbiBvZiBxdWVzdGlvbiB0aXRsZXMgcmVsYXRpdmUgdG8gdGhlaXIgaW5wdXQgZmllbGRzLlxuICAgICAgICAgKlxuICAgICAgICAgKiAtIGBcImRlZmF1bHRcImAgKGRlZmF1bHQpIC0gSW5oZXJpdHMgdGhlIHNldHRpbmcgZnJvbSB0aGUgRHluYW1pYyBQYW5lbCdzIGB0aXRsZUxvY2F0aW9uYCBwcm9wZXJ0eSwgd2hpY2ggaW4gdHVybiBpbmhlcml0cyB0aGUgW2BxdWVzdGlvblRpdGxlTG9jYXRpb25gXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL3N1cnZleW1vZGVsI3F1ZXN0aW9uVGl0bGVMb2NhdGlvbikgcHJvcGVydHkgdmFsdWUgc3BlY2lmaWVkIGZvciB0aGUgRHluYW1pYyBQYW5lbCdzIGNvbnRhaW5lciAocGFnZSBvciBzdXJ2ZXkpLlxuICAgICAgICAgKiAtIGBcInRvcFwiYCAtIERpc3BsYXlzIHF1ZXN0aW9uIHRpdGxlcyBhYm92ZSBpbnB1dCBmaWVsZHMuXG4gICAgICAgICAqIC0gYFwiYm90dG9tXCJgIC0gRGlzcGxheXMgcXVlc3Rpb24gdGl0bGVzIGJlbG93IGlucHV0IGZpZWxkcy5cbiAgICAgICAgICogLSBgXCJsZWZ0XCJgIC0gRGlzcGxheXMgcXVlc3Rpb24gdGl0bGVzIHRvIHRoZSBsZWZ0IG9mIGlucHV0IGZpZWxkcy5cbiAgICAgICAgICogLSBgXCJoaWRkZW5cImAgLSBIaWRlcyBxdWVzdGlvbiB0aXRsZXMuXG4gICAgICAgICAqIEBzZWUgdGl0bGVMb2NhdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwidGVtcGxhdGVUaXRsZUxvY2F0aW9uXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidGVtcGxhdGVUaXRsZUxvY2F0aW9uXCIsIHZhbHVlLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwucHJvdG90eXBlLCBcInRlbXBsYXRlRXJyb3JMb2NhdGlvblwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgdGhlIGVycm9yIG1lc3NhZ2UgcG9zaXRpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIFBvc3NpYmxlIHZhbHVlczpcbiAgICAgICAgICpcbiAgICAgICAgICogLSBgXCJkZWZhdWx0XCJgIChkZWZhdWx0KSAtIEluaGVyaXRzIHRoZSBzZXR0aW5nIGZyb20gdGhlIFtgZXJyb3JMb2NhdGlvbmBdKCNlcnJvckxvY2F0aW9uKSBwcm9wZXJ0eS5cbiAgICAgICAgICogLSBgXCJ0b3BcImAgLSBEaXNwbGF5cyBlcnJvciBtZXNzYWdlcyBhYm92ZSBxdWVzdGlvbnMuXG4gICAgICAgICAqIC0gYFwiYm90dG9tXCJgIC0gRGlzcGxheXMgZXJyb3IgbWVzc2FnZXMgYmVsb3cgcXVlc3Rpb25zLlxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwidGVtcGxhdGVFcnJvckxvY2F0aW9uXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidGVtcGxhdGVFcnJvckxvY2F0aW9uXCIsIHZhbHVlLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwucHJvdG90eXBlLCBcInNob3dRdWVzdGlvbk51bWJlcnNcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogVXNlIHRoaXMgcHJvcGVydHkgdG8gc2hvdy9oaWRlIHRoZSBudW1iZXJzIGluIHRpdGxlcyBpbiBxdWVzdGlvbnMgaW5zaWRlIGEgZHluYW1pYyBwYW5lbC5cbiAgICAgICAgICogQnkgZGVmYXVsdCB0aGUgdmFsdWUgaXMgXCJvZmZcIi4gWW91IG1heSBzZXQgaXQgdG8gXCJvblBhbmVsXCIgYW5kIHRoZSBmaXJzdCBxdWVzdGlvbiBpbnNpZGUgYSBkeW5hbWljIHBhbmVsIHdpbGwgc3RhcnQgd2l0aCAxIG9yIFwib25TdXJ2ZXlcIiB0byBpbmNsdWRlIG5lc3RlZCBxdWVzdGlvbnMgaW4gZHltYW1pYyBwYW5lbHMgaW50byBnbG9iYWwgc3VydmV5IHF1ZXN0aW9uIG51bWJlcmluZy5cbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInNob3dRdWVzdGlvbk51bWJlcnNcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwic2hvd1F1ZXN0aW9uTnVtYmVyc1wiLCB2YWwpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlzTG9hZGluZ0Zyb21Kc29uICYmIHRoaXMuc3VydmV5KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdXJ2ZXkucXVlc3Rpb25WaXNpYmlsaXR5Q2hhbmdlZCh0aGlzLCB0aGlzLnZpc2libGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwucHJvdG90eXBlLCBcInBhbmVsUmVtb3ZlQnV0dG9uTG9jYXRpb25cIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHRoZSBsb2NhdGlvbiBvZiB0aGUgRGVsZXRlIFBhbmVsIGJ1dHRvbiByZWxhdGl2ZSB0byBwYW5lbCBjb250ZW50LlxuICAgICAgICAgKlxuICAgICAgICAgKiBQb3NzaWJsZSB2YWx1ZXM6XG4gICAgICAgICAqXG4gICAgICAgICAqIC0gYFwiYm90dG9tXCJgIChkZWZhdWx0KSAtIERpc3BsYXlzIHRoZSBEZWxldGUgUGFuZWwgYnV0dG9uIGJlbG93IHBhbmVsIGNvbnRlbnQuXG4gICAgICAgICAqIC0gYFwicmlnaHRcImAgLSBEaXNwbGF5cyB0aGUgRGVsZXRlIFBhbmVsIGJ1dHRvbiB0byB0aGUgcmlnaHQgb2YgcGFuZWwgY29udGVudC5cbiAgICAgICAgICogQHNlZSBwYW5lbFJlbW92ZVRleHRcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInBhbmVsUmVtb3ZlQnV0dG9uTG9jYXRpb25cIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicGFuZWxSZW1vdmVCdXR0b25Mb2NhdGlvblwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwucHJvdG90eXBlLCBcInNob3dSYW5nZUluUHJvZ3Jlc3NcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogU2hvd3MgdGhlIHJhbmdlIGZyb20gMSB0byBwYW5lbENvdW50IHdoZW4gcmVuZGVyTW9kZSBkb2Vzbid0IGVxdWFsIHRvIFwibGlzdFwiLiBTZXQgdG8gZmFsc2UgdG8gaGlkZSB0aGlzIGVsZW1lbnQuXG4gICAgICAgICAqIEBzZWUgcGFuZWxDb3VudFxuICAgICAgICAgKiBAc2VlIHJlbmRlck1vZGVcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInNob3dSYW5nZUluUHJvZ3Jlc3NcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwic2hvd1JhbmdlSW5Qcm9ncmVzc1wiLCB2YWwpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVGb290ZXJBY3Rpb25zKCk7XG4gICAgICAgICAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLmN1cnJlbnRJbmRleENoYW5nZWRDYWxsYmFjayk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbC5wcm90b3R5cGUsIFwicmVuZGVyTW9kZVwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgaG93IHRvIHJlbmRlciBwYW5lbHMuXG4gICAgICAgICAqXG4gICAgICAgICAqIFBvc3NpYmxlIHZhbHVlczpcbiAgICAgICAgICpcbiAgICAgICAgICogLSBgXCJsaXN0XCJgIC0gUmVuZGVycyBwYW5lbHMgb25lIHVuZGVyIHRoZSBvdGhlci4gW1ZpZXcgRGVtb10oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZXhhbXBsZXMvaG93LXRvLXVzZS1leHByZXNzaW9ucy1pbi1keW5hbWljLXBhbmVsLylcbiAgICAgICAgICogLSBgXCJwcm9ncmVzc1RvcFwiYCAtIFJlbmRlcnMgZWFjaCBwYW5lbCBhcyBhIGNhcmQgYW5kIGRpc3BsYXlzIGEgcHJvZ3Jlc3MgYmFyIGF0IHRoZSB0b3AuIFtWaWV3IERlbW9dKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2V4YW1wbGVzL3F1ZXN0aW9udHlwZS1wYW5lbGR5bmFtaWMvKVxuICAgICAgICAgKiAtIGBcInByb2dyZXNzQm90dG9tXCJgIC0gUmVuZGVycyBlYWNoIHBhbmVsIHBhbmVsIGFzIGEgY2FyZCBhbmQgZGlzcGxheXMgYSBwcm9ncmVzcyBiYXIgYXQgdGhlIGJvdHRvbS5cbiAgICAgICAgICogLSBgXCJwcm9ncmVzc1RvcEJvdHRvbVwiYCAtIFJlbmRlcnMgZWFjaCBwYW5lbCBhcyBhIGNhcmQgYW5kIGRpc3BsYXlzIGEgcHJvZ3Jlc3MgYmFyIGF0IHRoZSB0b3AgYW5kIGJvdHRvbS5cbiAgICAgICAgICogLSBgXCJ0YWJcImAgLSBSZW5kZXJzIGVhY2ggcGFuZWwgd2l0aGluIGEgdGFiLiBVc2UgdGhlIFtgdGVtcGxhdGVUYWJUaXRsZWBdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vYXBpLXJlZmVyZW5jZS9keW5hbWljLXBhbmVsLW1vZGVsI3RlbXBsYXRlVGFiVGl0bGUpIHRvIHNwZWNpZnkgYSB0ZW1wbGF0ZSBmb3IgdGFiIHRpdGxlcy5cbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInJlbmRlck1vZGVcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicmVuZGVyTW9kZVwiLCB2YWwpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVGb290ZXJBY3Rpb25zKCk7XG4gICAgICAgICAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLnJlbmRlck1vZGVDaGFuZ2VkQ2FsbGJhY2spO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwucHJvdG90eXBlLCBcInRhYkFsaWduXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwidGFiQWxpZ25cIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidGFiQWxpZ25cIiwgdmFsKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzUmVuZGVyTW9kZVRhYikge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkaXRpb25hbFRpdGxlVG9vbGJhci5jb250YWluZXJDc3MgPSB0aGlzLmdldEFkZGl0aW9uYWxUaXRsZVRvb2xiYXJDc3MoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsLnByb3RvdHlwZSwgXCJpc1JlbmRlck1vZGVMaXN0XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJNb2RlID09PSBcImxpc3RcIjtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsLnByb3RvdHlwZSwgXCJpc1JlbmRlck1vZGVUYWJcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlck1vZGUgPT09IFwidGFiXCI7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbC5wcm90b3R5cGUsIFwiaGFzVGl0bGVPbkxlZnRUb3BcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzUmVuZGVyTW9kZVRhYiAmJiB0aGlzLnZpc2libGVQYW5lbENvdW50ID4gMClcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghdGhpcy5oYXNUaXRsZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB2YXIgbG9jYXRpb24gPSB0aGlzLmdldFRpdGxlTG9jYXRpb24oKTtcbiAgICAgICAgICAgIHJldHVybiBsb2NhdGlvbiA9PT0gXCJsZWZ0XCIgfHwgbG9jYXRpb24gPT09IFwidG9wXCI7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsLnByb3RvdHlwZS5zZXRWaXNpYmxlSW5kZXggPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmlzaWJsZSlcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB2YXIgc3RhcnRJbmRleCA9IHRoaXMuc2hvd1F1ZXN0aW9uTnVtYmVycyA9PSBcIm9uU3VydmV5XCIgPyB2YWx1ZSA6IDA7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy52aXNpYmxlUGFuZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgY291bnRlciA9IHRoaXMuc2V0UGFuZWxWaXNpYmxlSW5kZXgodGhpcy52aXNpYmxlUGFuZWxzW2ldLCBzdGFydEluZGV4LCB0aGlzLnNob3dRdWVzdGlvbk51bWJlcnMgIT0gXCJvZmZcIik7XG4gICAgICAgICAgICBpZiAodGhpcy5zaG93UXVlc3Rpb25OdW1iZXJzID09IFwib25TdXJ2ZXlcIikge1xuICAgICAgICAgICAgICAgIHN0YXJ0SW5kZXggKz0gY291bnRlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBfc3VwZXIucHJvdG90eXBlLnNldFZpc2libGVJbmRleC5jYWxsKHRoaXMsIHRoaXMuc2hvd1F1ZXN0aW9uTnVtYmVycyAhPSBcIm9uU3VydmV5XCIgPyB2YWx1ZSA6IC0xKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2hvd1F1ZXN0aW9uTnVtYmVycyAhPSBcIm9uU3VydmV5XCIgPyAxIDogc3RhcnRJbmRleCAtIHZhbHVlO1xuICAgIH07XG4gICAgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbC5wcm90b3R5cGUuc2V0UGFuZWxWaXNpYmxlSW5kZXggPSBmdW5jdGlvbiAocGFuZWwsIGluZGV4LCBzaG93SW5kZXgpIHtcbiAgICAgICAgaWYgKCFzaG93SW5kZXgpIHtcbiAgICAgICAgICAgIHBhbmVsLnNldFZpc2libGVJbmRleCgtMSk7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGFuZWwuc2V0VmlzaWJsZUluZGV4KGluZGV4KTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsLnByb3RvdHlwZSwgXCJjYW5BZGRQYW5lbFwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciBpdCBpcyBwb3NzaWJsZSB0byBhZGQgYSBuZXcgcGFuZWwuXG4gICAgICAgICAqXG4gICAgICAgICAqIFRoaXMgcHJvcGVydHkgcmV0dXJucyBgdHJ1ZWAgd2hlbiBhbGwgb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFwcGx5OlxuICAgICAgICAgKlxuICAgICAgICAgKiAtIFVzZXJzIGFyZSBhbGxvd2VkIHRvIGFkZCBuZXcgcGFuZWxzIChgYWxsb3dBZGRQYW5lbGAgaXMgYHRydWVgKS5cbiAgICAgICAgICogLSBEeW5hbWljIFBhbmVsIG9yIGl0cyBwYXJlbnQgc3VydmV5IGlzIG5vdCBpbiByZWFkLW9ubHkgc3RhdGUuXG4gICAgICAgICAqIC0gYHBhbmVsQ291bnRgIGlzIGxlc3MgdGhhbiBgbWF4UGFuZWxDb3VudGAuXG4gICAgICAgICAqIEBzZWUgYWxsb3dBZGRQYW5lbFxuICAgICAgICAgKiBAc2VlIGlzUmVhZE9ubHlcbiAgICAgICAgICogQHNlZSBwYW5lbENvdW50XG4gICAgICAgICAqIEBzZWUgbWF4UGFuZWxDb3VudFxuICAgICAgICAgKiBAc2VlIGNhblJlbW92ZVBhbmVsXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRGVzaWduTW9kZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0RlZmF1bHRWMlRoZW1lICYmICF0aGlzLmxlZ2FjeU5hdmlnYXRpb24gJiYgIXRoaXMuaXNSZW5kZXJNb2RlTGlzdCAmJiB0aGlzLmN1cnJlbnRJbmRleCA8IHRoaXMudmlzaWJsZVBhbmVsQ291bnQgLSAxKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuICh0aGlzLmFsbG93QWRkUGFuZWwgJiZcbiAgICAgICAgICAgICAgICAhdGhpcy5pc1JlYWRPbmx5ICYmXG4gICAgICAgICAgICAgICAgdGhpcy5wYW5lbENvdW50IDwgdGhpcy5tYXhQYW5lbENvdW50KTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsLnByb3RvdHlwZSwgXCJjYW5SZW1vdmVQYW5lbFwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciBpdCBpcyBwb3NzaWJsZSB0byBkZWxldGUgcGFuZWxzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBUaGlzIHByb3BlcnR5IHJldHVybnMgYHRydWVgIHdoZW4gYWxsIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcHBseTpcbiAgICAgICAgICpcbiAgICAgICAgICogLSBVc2VycyBhcmUgYWxsb3dlZCB0byBkZWxldGUgcGFuZWxzIChgYWxsb3dSZW1vdmVQYW5lbGAgaXMgYHRydWVgKS5cbiAgICAgICAgICogLSBEeW5hbWljIFBhbmVsIG9yIGl0cyBwYXJlbnQgc3VydmV5IGlzIG5vdCBpbiByZWFkLW9ubHkgc3RhdGUuXG4gICAgICAgICAqIC0gYHBhbmVsQ291bnRgIGV4Y2VlZHMgYG1pblBhbmVsQ291bnRgLlxuICAgICAgICAgKiBAc2VlIGFsbG93UmVtb3ZlUGFuZWxcbiAgICAgICAgICogQHNlZSBpc1JlYWRPbmx5XG4gICAgICAgICAqIEBzZWUgcGFuZWxDb3VudFxuICAgICAgICAgKiBAc2VlIG1pblBhbmVsQ291bnRcbiAgICAgICAgICogQHNlZSBjYW5BZGRQYW5lbFxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0Rlc2lnbk1vZGUpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuICh0aGlzLmFsbG93UmVtb3ZlUGFuZWwgJiZcbiAgICAgICAgICAgICAgICAhdGhpcy5pc1JlYWRPbmx5ICYmXG4gICAgICAgICAgICAgICAgdGhpcy5wYW5lbENvdW50ID4gdGhpcy5taW5QYW5lbENvdW50KTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwucHJvdG90eXBlLnJlYnVpbGRQYW5lbHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKHRoaXMuaXNMb2FkaW5nRnJvbUpzb24pXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMucHJlcGFyZVZhbHVlRm9yUGFuZWxDcmVhdGluZygpO1xuICAgICAgICB2YXIgcGFuZWxzID0gW107XG4gICAgICAgIHZhciBwYW5lbDtcbiAgICAgICAgaWYgKHRoaXMudXNlVGVtcGxhdGVQYW5lbCkge1xuICAgICAgICAgICAgcGFuZWwgPSBuZXcgUXVlc3Rpb25QYW5lbER5bmFtaWNJdGVtKHRoaXMsIHRoaXMudGVtcGxhdGUpO1xuICAgICAgICAgICAgcGFuZWxzLnB1c2godGhpcy50ZW1wbGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGFuZWxDb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgcGFuZWwgPSB0aGlzLmNyZWF0ZU5ld1BhbmVsKCk7XG4gICAgICAgICAgICAgICAgcGFuZWxzLnB1c2godGhpcy5jcmVhdGVOZXdQYW5lbCgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAoX2EgPSB0aGlzLnBhbmVscykuc3BsaWNlLmFwcGx5KF9hLCBfX3NwcmVhZEFycmF5KFswLCB0aGlzLnBhbmVscy5sZW5ndGhdLCBwYW5lbHMpKTtcbiAgICAgICAgdGhpcy5zZXRWYWx1ZUFmdGVyUGFuZWxzQ3JlYXRpbmcoKTtcbiAgICAgICAgdGhpcy5zZXRQYW5lbHNTdGF0ZSgpO1xuICAgICAgICB0aGlzLnJlUnVuQ29uZGl0aW9uKCk7XG4gICAgICAgIHRoaXMudXBkYXRlRm9vdGVyQWN0aW9ucygpO1xuICAgICAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLnBhbmVsQ291bnRDaGFuZ2VkQ2FsbGJhY2spO1xuICAgICAgICB0aGlzLnVwZGF0ZVRhYlRvb2xiYXIoKTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsLnByb3RvdHlwZSwgXCJkZWZhdWx0UGFuZWxWYWx1ZVwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJZiBpdCBpcyBub3QgZW1wdHksIHRoZW4gdGhpcyB2YWx1ZSBpcyBzZXQgdG8gZXZlcnkgbmV3IHBhbmVsLCBpbmNsdWRpbmcgcGFuZWxzIGNyZWF0ZWQgaW5pdGlhbGx5LCB1bmxlc3MgdGhlIGRlZmF1bHRWYWx1ZSBpcyBub3QgZW1wdHlcbiAgICAgICAgICogQHNlZSBkZWZhdWx0VmFsdWVcbiAgICAgICAgICogQHNlZSBkZWZhdWx0VmFsdWVGcm9tTGFzdFBhbmVsXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJkZWZhdWx0UGFuZWxWYWx1ZVwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJkZWZhdWx0UGFuZWxWYWx1ZVwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwucHJvdG90eXBlLCBcImRlZmF1bHRWYWx1ZUZyb21MYXN0UGFuZWxcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHdoZXRoZXIgZGVmYXVsdCB2YWx1ZXMgZm9yIGEgbmV3IHBhbmVsIHNob3VsZCBiZSBjb3BpZWQgZnJvbSB0aGUgbGFzdCBwYW5lbC5cbiAgICAgICAgICpcbiAgICAgICAgICogSWYgeW91IGFsc28gc3BlY2lmeSBgZGVmYXVsdFZhbHVlYCwgaXQgd2lsbCBiZSBtZXJnZWQgd2l0aCB0aGUgY29waWVkIHZhbHVlcy5cbiAgICAgICAgICogQHNlZSBkZWZhdWx0VmFsdWVcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImRlZmF1bHRWYWx1ZUZyb21MYXN0UGFuZWxcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiZGVmYXVsdFZhbHVlRnJvbUxhc3RQYW5lbFwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbC5wcm90b3R5cGUuaXNEZWZhdWx0VmFsdWVFbXB0eSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChfc3VwZXIucHJvdG90eXBlLmlzRGVmYXVsdFZhbHVlRW1wdHkuY2FsbCh0aGlzKSAmJiB0aGlzLmlzVmFsdWVFbXB0eSh0aGlzLmRlZmF1bHRQYW5lbFZhbHVlKSk7XG4gICAgfTtcbiAgICBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsLnByb3RvdHlwZS5zZXREZWZhdWx0VmFsdWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzVmFsdWVFbXB0eSh0aGlzLmRlZmF1bHRQYW5lbFZhbHVlKSB8fFxuICAgICAgICAgICAgIXRoaXMuaXNWYWx1ZUVtcHR5KHRoaXMuZGVmYXVsdFZhbHVlKSkge1xuICAgICAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5zZXREZWZhdWx0VmFsdWUuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuaXNFbXB0eSgpIHx8IHRoaXMucGFuZWxDb3VudCA9PSAwKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIgbmV3VmFsdWUgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhbmVsQ291bnQ7IGkrKykge1xuICAgICAgICAgICAgbmV3VmFsdWUucHVzaCh0aGlzLmRlZmF1bHRQYW5lbFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbC5wcm90b3R5cGUsIFwiaXNWYWx1ZUFycmF5XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0cnVlOyB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbC5wcm90b3R5cGUuaXNFbXB0eSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHZhbCA9IHRoaXMudmFsdWU7XG4gICAgICAgIGlmICghdmFsIHx8ICFBcnJheS5pc0FycmF5KHZhbCkpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWwubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5pc1Jvd0VtcHR5KHZhbFtpXSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG4gICAgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbC5wcm90b3R5cGUuZ2V0UHJvZ3Jlc3NJbmZvID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gX3N1cnZleV9lbGVtZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJTdXJ2ZXlFbGVtZW50XCJdLmdldFByb2dyZXNzSW5mb0J5RWxlbWVudHModGhpcy52aXNpYmxlUGFuZWxzLCB0aGlzLmlzUmVxdWlyZWQpO1xuICAgIH07XG4gICAgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbC5wcm90b3R5cGUuaXNSb3dFbXB0eSA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgZm9yICh2YXIgcHJvcCBpbiB2YWwpIHtcbiAgICAgICAgICAgIGlmICh2YWwuaGFzT3duUHJvcGVydHkocHJvcCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogQWRkIGEgbmV3IGR5bmFtaWMgcGFuZWwgYmFzZWQgb24gdGhlIHRlbXBsYXRlIFBhbmVsLiBJdCBjaGVja3MgaWYgY2FuQWRkUGFuZWwgcmV0dXJucyB0cnVlIGFuZCB0aGVuIGNhbGxzIGFkZFBhbmVsIG1ldGhvZC5cbiAgICAgKiBJZiBhIHJlbmRlck1vZGUgaXMgZGlmZmVyZW50IGZyb20gXCJsaXN0XCIgYW5kIHRoZSBjdXJyZW50IHBhbmVsIGhhcyBlcnJvcywgdGhlblxuICAgICAqIEBzZWUgdGVtcGxhdGVcbiAgICAgKiBAc2VlIHBhbmVsQ291bnRcbiAgICAgKiBAc2VlIHBhbmVsc1xuICAgICAqIEBzZWUgY2FuQWRkUGFuZWxcbiAgICAgKi9cbiAgICBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsLnByb3RvdHlwZS5hZGRQYW5lbFVJID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuY2FuQWRkUGFuZWwpXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgaWYgKCF0aGlzLmNhbkxlYXZlQ3VycmVudFBhbmVsKCkpXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgdmFyIG5ld1BhbmVsID0gdGhpcy5hZGRQYW5lbCgpO1xuICAgICAgICBpZiAodGhpcy5yZW5kZXJNb2RlID09PSBcImxpc3RcIiAmJiB0aGlzLnBhbmVsc1N0YXRlICE9PSBcImRlZmF1bHRcIikge1xuICAgICAgICAgICAgbmV3UGFuZWwuZXhwYW5kKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ld1BhbmVsO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogQWRkIGEgbmV3IGR5bmFtaWMgcGFuZWwgYmFzZWQgb24gdGhlIHRlbXBsYXRlIFBhbmVsLlxuICAgICAqIEBzZWUgdGVtcGxhdGVcbiAgICAgKiBAc2VlIHBhbmVsQ291bnRcbiAgICAgKiBAc2VlIHBhbmVsc1xuICAgICAqIEBzZWUgcmVuZGVyTW9kZVxuICAgICAqL1xuICAgIFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwucHJvdG90eXBlLmFkZFBhbmVsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnBhbmVsQ291bnQrKztcbiAgICAgICAgaWYgKCF0aGlzLmlzUmVuZGVyTW9kZUxpc3QpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEluZGV4ID0gdGhpcy5wYW5lbENvdW50IC0gMTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbmV3VmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgICAgICB2YXIgaGFzTW9kaWZpZWQgPSBmYWxzZTtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsdWVFbXB0eSh0aGlzLmRlZmF1bHRQYW5lbFZhbHVlKSkge1xuICAgICAgICAgICAgaWYgKCEhbmV3VmFsdWUgJiZcbiAgICAgICAgICAgICAgICBBcnJheS5pc0FycmF5KG5ld1ZhbHVlKSAmJlxuICAgICAgICAgICAgICAgIG5ld1ZhbHVlLmxlbmd0aCA9PSB0aGlzLnBhbmVsQ291bnQpIHtcbiAgICAgICAgICAgICAgICBoYXNNb2RpZmllZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5jb3B5VmFsdWUobmV3VmFsdWVbbmV3VmFsdWUubGVuZ3RoIC0gMV0sIHRoaXMuZGVmYXVsdFBhbmVsVmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmRlZmF1bHRWYWx1ZUZyb21MYXN0UGFuZWwgJiZcbiAgICAgICAgICAgICEhbmV3VmFsdWUgJiZcbiAgICAgICAgICAgIEFycmF5LmlzQXJyYXkobmV3VmFsdWUpICYmXG4gICAgICAgICAgICBuZXdWYWx1ZS5sZW5ndGggPiAxICYmXG4gICAgICAgICAgICBuZXdWYWx1ZS5sZW5ndGggPT0gdGhpcy5wYW5lbENvdW50KSB7XG4gICAgICAgICAgICBoYXNNb2RpZmllZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmNvcHlWYWx1ZShuZXdWYWx1ZVtuZXdWYWx1ZS5sZW5ndGggLSAxXSwgbmV3VmFsdWVbbmV3VmFsdWUubGVuZ3RoIC0gMl0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChoYXNNb2RpZmllZCkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnN1cnZleSlcbiAgICAgICAgICAgIHRoaXMuc3VydmV5LmR5bmFtaWNQYW5lbEFkZGVkKHRoaXMpO1xuICAgICAgICByZXR1cm4gdGhpcy5wYW5lbHNbdGhpcy5wYW5lbENvdW50IC0gMV07XG4gICAgfTtcbiAgICBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsLnByb3RvdHlwZS5jYW5MZWF2ZUN1cnJlbnRQYW5lbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICEodGhpcy5yZW5kZXJNb2RlICE9PSBcImxpc3RcIiAmJiB0aGlzLmN1cnJlbnRQYW5lbCAmJiB0aGlzLmN1cnJlbnRQYW5lbC5oYXNFcnJvcnModHJ1ZSwgdHJ1ZSkpO1xuICAgIH07XG4gICAgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbC5wcm90b3R5cGUuY29weVZhbHVlID0gZnVuY3Rpb24gKHNyYywgZGVzdCkge1xuICAgICAgICBmb3IgKHZhciBrZXkgaW4gZGVzdCkge1xuICAgICAgICAgICAgc3JjW2tleV0gPSBkZXN0W2tleV07XG4gICAgICAgIH1cbiAgICB9O1xuICAgIC8qKlxuICAgICAqIENhbGwgcmVtb3ZlUGFuZWwgZnVuY3Rpb24uIERvIG5vdGhpbmcgaXMgY2FuUmVtb3ZlUGFuZWwgcmV0dXJucyBmYWxzZS4gSWYgY29uZmlybURlbGV0ZSBzZXQgdG8gdHJ1ZSwgaXQgc2hvd3MgdGhlIGNvbmZpcm1hdGlvbiBkaWFsb2cgZmlyc3QuXG4gICAgICogQHBhcmFtIHZhbHVlIGEgcGFuZWwgb3IgcGFuZWwgaW5kZXhcbiAgICAgKiBAc2VlIHJlbW92ZVBhbmVsXG4gICAgICogQHNlZSBjb25maXJtRGVsZXRlXG4gICAgICogQHNlZSBjb25maXJtRGVsZXRlVGV4dFxuICAgICAqIEBzZWUgY2FuUmVtb3ZlUGFuZWxcbiAgICAgKlxuICAgICAqL1xuICAgIFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwucHJvdG90eXBlLnJlbW92ZVBhbmVsVUkgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgaWYgKCF0aGlzLmNhblJlbW92ZVBhbmVsKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAodGhpcy5jb25maXJtRGVsZXRlKSB7XG4gICAgICAgICAgICBPYmplY3QoX3V0aWxzX3V0aWxzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bXCJjb25maXJtQWN0aW9uQXN5bmNcIl0pKHRoaXMuY29uZmlybURlbGV0ZVRleHQsIGZ1bmN0aW9uICgpIHsgX3RoaXMucmVtb3ZlUGFuZWwodmFsdWUpOyB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlUGFuZWwodmFsdWUpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBTd2l0Y2hlcyBEeW5hbWljIFBhbmVsIHRvIHRoZSBuZXh0IHBhbmVsLiBSZXR1cm5zIGB0cnVlYCBpbiBjYXNlIG9mIHN1Y2Nlc3MsIG9yIGBmYWxzZWAgaWYgYHJlbmRlck1vZGVgIGlzIGBcImxpc3RcImAgb3IgdGhlIGN1cnJlbnQgcGFuZWwgY29udGFpbnMgdmFsaWRhdGlvbiBlcnJvcnMuXG4gICAgICogQHNlZSByZW5kZXJNb2RlXG4gICAgICovXG4gICAgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbC5wcm90b3R5cGUuZ29Ub05leHRQYW5lbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudEluZGV4IDwgMClcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKCF0aGlzLmNhbkxlYXZlQ3VycmVudFBhbmVsKCkpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHRoaXMuY3VycmVudEluZGV4Kys7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogU3dpdGNoZXMgRHluYW1pYyBQYW5lbCB0byB0aGUgcHJldmlvdXMgcGFuZWwuXG4gICAgICovXG4gICAgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbC5wcm90b3R5cGUuZ29Ub1ByZXZQYW5lbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudEluZGV4IDwgMClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5jdXJyZW50SW5kZXgtLTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYSBkeW5hbWljIHBhbmVsIGZyb20gdGhlIHBhbmVscyBhcnJheS5cbiAgICAgKiBAcGFyYW0gdmFsdWUgYSBwYW5lbCBvciBwYW5lbCBpbmRleFxuICAgICAqIEBzZWUgcGFuZWxzXG4gICAgICogQHNlZSB0ZW1wbGF0ZVxuICAgICAqL1xuICAgIFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwucHJvdG90eXBlLnJlbW92ZVBhbmVsID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciB2aXNJbmRleCA9IHRoaXMuZ2V0VmlzdWFsUGFuZWxJbmRleCh2YWx1ZSk7XG4gICAgICAgIGlmICh2aXNJbmRleCA8IDAgfHwgdmlzSW5kZXggPj0gdGhpcy52aXNpYmxlUGFuZWxDb3VudClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIHBhbmVsID0gdGhpcy52aXNpYmxlUGFuZWxzW3Zpc0luZGV4XTtcbiAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5wYW5lbHMuaW5kZXhPZihwYW5lbCk7XG4gICAgICAgIGlmIChpbmRleCA8IDApXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmICh0aGlzLnN1cnZleSAmJiAhdGhpcy5zdXJ2ZXkuZHluYW1pY1BhbmVsUmVtb3ZpbmcodGhpcywgaW5kZXgsIHBhbmVsKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5wYW5lbHMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgdGhpcy51cGRhdGVCaW5kaW5ncyhcInBhbmVsQ291bnRcIiwgdGhpcy5wYW5lbENvdW50KTtcbiAgICAgICAgdmFyIHZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICAgICAgaWYgKCF2YWx1ZSB8fCAhQXJyYXkuaXNBcnJheSh2YWx1ZSkgfHwgaW5kZXggPj0gdmFsdWUubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLmlzVmFsdWVDaGFuZ2luZ0ludGVybmFsbHkgPSB0cnVlO1xuICAgICAgICB2YWx1ZS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMudXBkYXRlRm9vdGVyQWN0aW9ucygpO1xuICAgICAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLnBhbmVsQ291bnRDaGFuZ2VkQ2FsbGJhY2spO1xuICAgICAgICBpZiAodGhpcy5zdXJ2ZXkpXG4gICAgICAgICAgICB0aGlzLnN1cnZleS5keW5hbWljUGFuZWxSZW1vdmVkKHRoaXMsIGluZGV4LCBwYW5lbCk7XG4gICAgICAgIHRoaXMuaXNWYWx1ZUNoYW5naW5nSW50ZXJuYWxseSA9IGZhbHNlO1xuICAgIH07XG4gICAgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbC5wcm90b3R5cGUuZ2V0VmlzdWFsUGFuZWxJbmRleCA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgaWYgKF9oZWxwZXJzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJIZWxwZXJzXCJdLmlzTnVtYmVyKHZhbCkpXG4gICAgICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgICB2YXIgdmlzUGFuZWxzID0gdGhpcy52aXNpYmxlUGFuZWxzO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZpc1BhbmVscy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHZpc1BhbmVsc1tpXSA9PT0gdmFsIHx8IHZpc1BhbmVsc1tpXS5kYXRhID09PSB2YWwpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH07XG4gICAgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbC5wcm90b3R5cGUuZ2V0UGFuZWxJbmRleEJ5SWQgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhbmVscy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRoaXMucGFuZWxzW2ldLmlkID09PSBpZClcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgfTtcbiAgICBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsLnByb3RvdHlwZS5sb2NTdHJzQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5sb2NTdHJzQ2hhbmdlZC5jYWxsKHRoaXMpO1xuICAgICAgICB2YXIgcGFuZWxzID0gdGhpcy5wYW5lbHM7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFuZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBwYW5lbHNbaV0ubG9jU3Ryc0NoYW5nZWQoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5hZGRpdGlvbmFsVGl0bGVUb29sYmFyKSB7XG4gICAgICAgICAgICB0aGlzLmFkZGl0aW9uYWxUaXRsZVRvb2xiYXIubG9jU3Ryc0NoYW5nZWQoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbC5wcm90b3R5cGUuY2xlYXJJbmNvcnJlY3RWYWx1ZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYW5lbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJJbmNvcnJlY3RWYWx1ZXNJblBhbmVsKGkpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsLnByb3RvdHlwZS5jbGVhckVycm9ycyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5jbGVhckVycm9ycy5jYWxsKHRoaXMpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGFuZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLnBhbmVsc1tpXS5jbGVhckVycm9ycygpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsLnByb3RvdHlwZS5nZXRRdWVzdGlvbkZyb21BcnJheSA9IGZ1bmN0aW9uIChuYW1lLCBpbmRleCkge1xuICAgICAgICBpZiAoaW5kZXggPj0gdGhpcy5wYW5lbENvdW50KVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIHJldHVybiB0aGlzLnBhbmVsc1tpbmRleF0uZ2V0UXVlc3Rpb25CeU5hbWUobmFtZSk7XG4gICAgfTtcbiAgICBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsLnByb3RvdHlwZS5jbGVhckluY29ycmVjdFZhbHVlc0luUGFuZWwgPSBmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgdmFyIHBhbmVsID0gdGhpcy5wYW5lbHNbaW5kZXhdO1xuICAgICAgICBwYW5lbC5jbGVhckluY29ycmVjdFZhbHVlcygpO1xuICAgICAgICB2YXIgdmFsID0gdGhpcy52YWx1ZTtcbiAgICAgICAgdmFyIHZhbHVlcyA9ICEhdmFsICYmIGluZGV4IDwgdmFsLmxlbmd0aCA/IHZhbFtpbmRleF0gOiBudWxsO1xuICAgICAgICBpZiAoIXZhbHVlcylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIGlzQ2hhbmdlZCA9IGZhbHNlO1xuICAgICAgICBmb3IgKHZhciBrZXkgaW4gdmFsdWVzKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5nZXRTaGFyZWRRdWVzdGlvbkZyb21BcnJheShrZXksIGluZGV4KSlcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIHZhciBxID0gcGFuZWwuZ2V0UXVlc3Rpb25CeU5hbWUoa2V5KTtcbiAgICAgICAgICAgIGlmICghIXEpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBpZiAodGhpcy5pc2NvcnJlY3RWYWx1ZVdpdGhQb3N0UHJlZml4KHBhbmVsLCBrZXksIF9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fW1wic2V0dGluZ3NcIl0uY29tbWVudFN1ZmZpeCkgfHxcbiAgICAgICAgICAgICAgICB0aGlzLmlzY29ycmVjdFZhbHVlV2l0aFBvc3RQcmVmaXgocGFuZWwsIGtleSwgX3NldHRpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bXCJzZXR0aW5nc1wiXS5tYXRyaXgudG90YWxzU3VmZml4KSlcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIGRlbGV0ZSB2YWx1ZXNba2V5XTtcbiAgICAgICAgICAgIGlzQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQ2hhbmdlZCkge1xuICAgICAgICAgICAgdmFsW2luZGV4XSA9IHZhbHVlcztcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWw7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwucHJvdG90eXBlLmlzY29ycmVjdFZhbHVlV2l0aFBvc3RQcmVmaXggPSBmdW5jdGlvbiAocGFuZWwsIGtleSwgcG9zdFByZWZpeCkge1xuICAgICAgICBpZiAoa2V5LmluZGV4T2YocG9zdFByZWZpeCkgIT09IGtleS5sZW5ndGggLSBwb3N0UHJlZml4Lmxlbmd0aClcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuICEhcGFuZWwuZ2V0UXVlc3Rpb25CeU5hbWUoa2V5LnN1YnN0cmluZygwLCBrZXkuaW5kZXhPZihwb3N0UHJlZml4KSkpO1xuICAgIH07XG4gICAgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbC5wcm90b3R5cGUuZ2V0U2hhcmVkUXVlc3Rpb25Gcm9tQXJyYXkgPSBmdW5jdGlvbiAobmFtZSwgcGFuZWxJbmRleCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLnN1cnZleSAmJiAhIXRoaXMudmFsdWVOYW1lXG4gICAgICAgICAgICA/ICh0aGlzLnN1cnZleS5nZXRRdWVzdGlvbkJ5VmFsdWVOYW1lRnJvbUFycmF5KHRoaXMudmFsdWVOYW1lLCBuYW1lLCBwYW5lbEluZGV4KSlcbiAgICAgICAgICAgIDogbnVsbDtcbiAgICB9O1xuICAgIFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwucHJvdG90eXBlLmFkZENvbmRpdGlvbk9iamVjdHNCeUNvbnRleHQgPSBmdW5jdGlvbiAob2JqZWN0cywgY29udGV4dCkge1xuICAgICAgICB2YXIgaGFzQ29udGV4dCA9ICEhY29udGV4dFxuICAgICAgICAgICAgPyBjb250ZXh0ID09PSB0cnVlIHx8IHRoaXMudGVtcGxhdGUucXVlc3Rpb25zLmluZGV4T2YoY29udGV4dCkgPiAtMVxuICAgICAgICAgICAgOiBmYWxzZTtcbiAgICAgICAgdmFyIHBhbmVsT2JqcyA9IG5ldyBBcnJheSgpO1xuICAgICAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy50ZW1wbGF0ZS5xdWVzdGlvbnM7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBxdWVzdGlvbnNbaV0uYWRkQ29uZGl0aW9uT2JqZWN0c0J5Q29udGV4dChwYW5lbE9ianMsIGNvbnRleHQpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBfc2V0dGluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1tcInNldHRpbmdzXCJdLnBhbmVsLm1heFBhbmVsQ291bnRJbkNvbmRpdGlvbjsgaW5kZXgrKykge1xuICAgICAgICAgICAgdmFyIGluZGV4U3RyID0gXCJbXCIgKyBpbmRleCArIFwiXS5cIjtcbiAgICAgICAgICAgIHZhciBwcmVmaXhOYW1lID0gdGhpcy5nZXRWYWx1ZU5hbWUoKSArIGluZGV4U3RyO1xuICAgICAgICAgICAgdmFyIHByZWZpeFRleHQgPSB0aGlzLnByb2Nlc3NlZFRpdGxlICsgaW5kZXhTdHI7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhbmVsT2Jqcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIG9iamVjdHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IHByZWZpeE5hbWUgKyBwYW5lbE9ianNbaV0ubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogcHJlZml4VGV4dCArIHBhbmVsT2Jqc1tpXS50ZXh0LFxuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbjogcGFuZWxPYmpzW2ldLnF1ZXN0aW9uLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChoYXNDb250ZXh0KSB7XG4gICAgICAgICAgICB2YXIgcHJlZml4TmFtZSA9IGNvbnRleHQgPT09IHRydWUgPyB0aGlzLmdldFZhbHVlTmFtZSgpICsgXCIuXCIgOiBcIlwiO1xuICAgICAgICAgICAgdmFyIHByZWZpeFRleHQgPSBjb250ZXh0ID09PSB0cnVlID8gdGhpcy5wcm9jZXNzZWRUaXRsZSArIFwiLlwiIDogXCJcIjtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFuZWxPYmpzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhbmVsT2Jqc1tpXS5xdWVzdGlvbiA9PSBjb250ZXh0KVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB2YXIgb2JqID0ge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBwcmVmaXhOYW1lICsgUXVlc3Rpb25QYW5lbER5bmFtaWNJdGVtLkl0ZW1WYXJpYWJsZU5hbWUgKyBcIi5cIiArIHBhbmVsT2Jqc1tpXS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICB0ZXh0OiBwcmVmaXhUZXh0ICsgUXVlc3Rpb25QYW5lbER5bmFtaWNJdGVtLkl0ZW1WYXJpYWJsZU5hbWUgKyBcIi5cIiArIHBhbmVsT2Jqc1tpXS50ZXh0LFxuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbjogcGFuZWxPYmpzW2ldLnF1ZXN0aW9uXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBpZiAoY29udGV4dCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICBvYmouY29udGV4dCA9IHRoaXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG9iamVjdHMucHVzaChvYmopO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsLnByb3RvdHlwZS5jb2xsZWN0TmVzdGVkUXVlc3Rpb25zQ29yZSA9IGZ1bmN0aW9uIChxdWVzdGlvbnMsIHZpc2libGVPbmx5KSB7XG4gICAgICAgIHZhciBwYW5lbHMgPSB2aXNpYmxlT25seSA/IHRoaXMudmlzaWJsZVBhbmVscyA6IHRoaXMucGFuZWxzO1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkocGFuZWxzKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgcGFuZWxzLmZvckVhY2goZnVuY3Rpb24gKHBhbmVsKSB7XG4gICAgICAgICAgICBwYW5lbC5xdWVzdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAocSkgeyByZXR1cm4gcS5jb2xsZWN0TmVzdGVkUXVlc3Rpb25zKHF1ZXN0aW9ucywgdmlzaWJsZU9ubHkpOyB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsLnByb3RvdHlwZS5nZXRDb25kaXRpb25Kc29uID0gZnVuY3Rpb24gKG9wZXJhdG9yLCBwYXRoKSB7XG4gICAgICAgIGlmIChvcGVyYXRvciA9PT0gdm9pZCAwKSB7IG9wZXJhdG9yID0gbnVsbDsgfVxuICAgICAgICBpZiAocGF0aCA9PT0gdm9pZCAwKSB7IHBhdGggPSBudWxsOyB9XG4gICAgICAgIGlmICghcGF0aClcbiAgICAgICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLmdldENvbmRpdGlvbkpzb24uY2FsbCh0aGlzLCBvcGVyYXRvciwgcGF0aCk7XG4gICAgICAgIHZhciBxdWVzdGlvbk5hbWUgPSBwYXRoO1xuICAgICAgICB2YXIgcG9zID0gcGF0aC5pbmRleE9mKFwiLlwiKTtcbiAgICAgICAgaWYgKHBvcyA+IC0xKSB7XG4gICAgICAgICAgICBxdWVzdGlvbk5hbWUgPSBwYXRoLnN1YnN0cmluZygwLCBwb3MpO1xuICAgICAgICAgICAgcGF0aCA9IHBhdGguc3Vic3RyaW5nKHBvcyArIDEpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBxdWVzdGlvbiA9IHRoaXMudGVtcGxhdGUuZ2V0UXVlc3Rpb25CeU5hbWUocXVlc3Rpb25OYW1lKTtcbiAgICAgICAgaWYgKCFxdWVzdGlvbilcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICByZXR1cm4gcXVlc3Rpb24uZ2V0Q29uZGl0aW9uSnNvbihvcGVyYXRvciwgcGF0aCk7XG4gICAgfTtcbiAgICBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsLnByb3RvdHlwZS5vblJlYWRPbmx5Q2hhbmdlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHJlYWRPbmx5ID0gdGhpcy5pc1JlYWRPbmx5O1xuICAgICAgICB0aGlzLnRlbXBsYXRlLnJlYWRPbmx5ID0gcmVhZE9ubHk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYW5lbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMucGFuZWxzW2ldLnJlYWRPbmx5ID0gcmVhZE9ubHk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVOb0VudHJpZXNUZXh0RGVmYXVsdExvYygpO1xuICAgICAgICB0aGlzLnVwZGF0ZUZvb3RlckFjdGlvbnMoKTtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5vblJlYWRPbmx5Q2hhbmdlZC5jYWxsKHRoaXMpO1xuICAgIH07XG4gICAgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbC5wcm90b3R5cGUudXBkYXRlTm9FbnRyaWVzVGV4dERlZmF1bHRMb2MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBsb2MgPSB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwibm9FbnRyaWVzVGV4dFwiKTtcbiAgICAgICAgaWYgKCFsb2MpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGxvYy5sb2NhbGl6YXRpb25OYW1lID0gKHRoaXMuaXNSZWFkT25seSB8fCAhdGhpcy5hbGxvd0FkZFBhbmVsKSA/IFwibm9FbnRyaWVzUmVhZG9ubHlUZXh0XCIgOiBcIm5vRW50cmllc1RleHRcIjtcbiAgICAgICAgbG9jLnN0ckNoYW5nZWQoKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwucHJvdG90eXBlLm9uU3VydmV5TG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZS5yZWFkT25seSA9IHRoaXMuaXNSZWFkT25seTtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZS5vblN1cnZleUxvYWQoKTtcbiAgICAgICAgaWYgKHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInBhbmVsQ291bnRcIikgPiAwKSB7XG4gICAgICAgICAgICB0aGlzLnBhbmVsQ291bnQgPSB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJwYW5lbENvdW50XCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnVzZVRlbXBsYXRlUGFuZWwpIHtcbiAgICAgICAgICAgIHRoaXMucmVidWlsZFBhbmVscygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0UGFuZWxzU3VydmV5SW1wbCgpO1xuICAgICAgICB0aGlzLnNldFBhbmVsc1N0YXRlKCk7XG4gICAgICAgIHRoaXMuYXNzaWduT25Qcm9wZXJ0eUNoYW5nZWRUb1RlbXBsYXRlKCk7XG4gICAgICAgIGlmICghIXRoaXMuc3VydmV5KSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGFuZWxDb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdXJ2ZXkuZHluYW1pY1BhbmVsQWRkZWQodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVJc1JlYWR5KCk7XG4gICAgICAgIGlmICh0aGlzLmlzUmVhZE9ubHkgfHwgIXRoaXMuYWxsb3dBZGRQYW5lbCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVOb0VudHJpZXNUZXh0RGVmYXVsdExvYygpO1xuICAgICAgICB9XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUub25TdXJ2ZXlMb2FkLmNhbGwodGhpcyk7XG4gICAgfTtcbiAgICBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsLnByb3RvdHlwZS5vbkZpcnN0UmVuZGVyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnRlbXBsYXRlLm9uRmlyc3RSZW5kZXJpbmcoKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhbmVscy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5wYW5lbHNbaV0ub25GaXJzdFJlbmRlcmluZygpO1xuICAgICAgICB9XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUub25GaXJzdFJlbmRlcmluZy5jYWxsKHRoaXMpO1xuICAgIH07XG4gICAgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbC5wcm90b3R5cGUubG9jYWxlQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5sb2NhbGVDaGFuZ2VkLmNhbGwodGhpcyk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYW5lbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMucGFuZWxzW2ldLmxvY2FsZUNoYW5nZWQoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbC5wcm90b3R5cGUucnVuQ29uZGl0aW9uID0gZnVuY3Rpb24gKHZhbHVlcywgcHJvcGVydGllcykge1xuICAgICAgICBfc3VwZXIucHJvdG90eXBlLnJ1bkNvbmRpdGlvbi5jYWxsKHRoaXMsIHZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgICAgIHRoaXMucnVuUGFuZWxzQ29uZGl0aW9uKHRoaXMucGFuZWxzLCB2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgIH07XG4gICAgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbC5wcm90b3R5cGUucnVuVHJpZ2dlcnMgPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5ydW5UcmlnZ2Vycy5jYWxsKHRoaXMsIG5hbWUsIHZhbHVlKTtcbiAgICAgICAgdGhpcy52aXNpYmxlUGFuZWxzLmZvckVhY2goZnVuY3Rpb24gKHApIHtcbiAgICAgICAgICAgIHAucXVlc3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKHEpIHsgcmV0dXJuIHEucnVuVHJpZ2dlcnMobmFtZSwgdmFsdWUpOyB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsLnByb3RvdHlwZS5yZVJ1bkNvbmRpdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmRhdGEpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMucnVuQ29uZGl0aW9uKHRoaXMuZ2V0RGF0YUZpbHRlcmVkVmFsdWVzKCksIHRoaXMuZ2V0RGF0YUZpbHRlcmVkUHJvcGVydGllcygpKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwucHJvdG90eXBlLnJ1blBhbmVsc0NvbmRpdGlvbiA9IGZ1bmN0aW9uIChwYW5lbHMsIHZhbHVlcywgcHJvcGVydGllcykge1xuICAgICAgICB2YXIgY2FjaGVkVmFsdWVzID0ge307XG4gICAgICAgIGlmICh2YWx1ZXMgJiYgdmFsdWVzIGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICAgICAgICBjYWNoZWRWYWx1ZXMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHZhbHVlcykpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghIXRoaXMucGFyZW50UXVlc3Rpb24gJiYgISF0aGlzLnBhcmVudCkge1xuICAgICAgICAgICAgY2FjaGVkVmFsdWVzW1F1ZXN0aW9uUGFuZWxEeW5hbWljSXRlbS5QYXJlbnRJdGVtVmFyaWFibGVOYW1lXSA9IHRoaXMucGFyZW50LmdldFZhbHVlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc1ZhbHVlQ2hhbmdpbmdJbnRlcm5hbGx5ID0gdHJ1ZTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYW5lbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBwYW5lbCA9IHBhbmVsc1tpXTtcbiAgICAgICAgICAgIHZhciBwYW5lbFZhbHVlcyA9IHRoaXMuZ2V0UGFuZWxJdGVtRGF0YShwYW5lbC5kYXRhKTtcbiAgICAgICAgICAgIC8vU2hvdWxkIGJlIHVuaXF1ZSBmb3IgZXZlcnkgcGFuZWwgZHVlIGFzeW5jIGV4cHJlc3Npb24gc3VwcG9ydFxuICAgICAgICAgICAgdmFyIG5ld1ZhbHVlcyA9IF9oZWxwZXJzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJIZWxwZXJzXCJdLmNyZWF0ZUNvcHkoY2FjaGVkVmFsdWVzKTtcbiAgICAgICAgICAgIHZhciBwYW5lbE5hbWUgPSBRdWVzdGlvblBhbmVsRHluYW1pY0l0ZW0uSXRlbVZhcmlhYmxlTmFtZTtcbiAgICAgICAgICAgIG5ld1ZhbHVlc1twYW5lbE5hbWVdID0gcGFuZWxWYWx1ZXM7XG4gICAgICAgICAgICBuZXdWYWx1ZXNbUXVlc3Rpb25QYW5lbER5bmFtaWNJdGVtLkluZGV4VmFyaWFibGVOYW1lLnRvTG93ZXJDYXNlKCldID0gaTtcbiAgICAgICAgICAgIHZhciBuZXdQcm9wcyA9IF9oZWxwZXJzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJIZWxwZXJzXCJdLmNyZWF0ZUNvcHkocHJvcGVydGllcyk7XG4gICAgICAgICAgICBuZXdQcm9wc1twYW5lbE5hbWVdID0gcGFuZWw7XG4gICAgICAgICAgICBwYW5lbC5ydW5Db25kaXRpb24obmV3VmFsdWVzLCBuZXdQcm9wcyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc1ZhbHVlQ2hhbmdpbmdJbnRlcm5hbGx5ID0gZmFsc2U7XG4gICAgfTtcbiAgICBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsLnByb3RvdHlwZS5vbkFueVZhbHVlQ2hhbmdlZCA9IGZ1bmN0aW9uIChuYW1lLCBxdWVzdGlvbk5hbWUpIHtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5vbkFueVZhbHVlQ2hhbmdlZC5jYWxsKHRoaXMsIG5hbWUsIHF1ZXN0aW9uTmFtZSk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYW5lbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMucGFuZWxzW2ldLm9uQW55VmFsdWVDaGFuZ2VkKG5hbWUsIHF1ZXN0aW9uTmFtZSk7XG4gICAgICAgICAgICB0aGlzLnBhbmVsc1tpXS5vbkFueVZhbHVlQ2hhbmdlZChRdWVzdGlvblBhbmVsRHluYW1pY0l0ZW0uSXRlbVZhcmlhYmxlTmFtZSwgXCJcIik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwucHJvdG90eXBlLmhhc0tleXNEdXBsaWNhdGVkID0gZnVuY3Rpb24gKGZpcmVDYWxsYmFjaywgcmVjKSB7XG4gICAgICAgIGlmIChyZWMgPT09IHZvaWQgMCkgeyByZWMgPSBudWxsOyB9XG4gICAgICAgIHZhciBrZXlWYWx1ZXMgPSBbXTtcbiAgICAgICAgdmFyIHJlcztcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhbmVscy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgcmVzID1cbiAgICAgICAgICAgICAgICB0aGlzLmlzVmFsdWVEdXBsaWNhdGVkKHRoaXMucGFuZWxzW2ldLCBrZXlWYWx1ZXMsIHJlYywgZmlyZUNhbGxiYWNrKSB8fFxuICAgICAgICAgICAgICAgICAgICByZXM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9O1xuICAgIFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwucHJvdG90eXBlLnVwZGF0ZVBhbmVsc0NvbnRhaW5zRXJyb3JzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcXVlc3Rpb24gPSB0aGlzLmNoYW5naW5nVmFsdWVRdWVzdGlvbjtcbiAgICAgICAgdmFyIHBhcmVudCA9IHF1ZXN0aW9uLnBhcmVudDtcbiAgICAgICAgd2hpbGUgKCEhcGFyZW50KSB7XG4gICAgICAgICAgICBwYXJlbnQudXBkYXRlQ29udGFpbnNFcnJvcnMoKTtcbiAgICAgICAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVDb250YWluc0Vycm9ycygpO1xuICAgIH07XG4gICAgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbC5wcm90b3R5cGUuaGFzRXJyb3JzID0gZnVuY3Rpb24gKGZpcmVDYWxsYmFjaywgcmVjKSB7XG4gICAgICAgIGlmIChmaXJlQ2FsbGJhY2sgPT09IHZvaWQgMCkgeyBmaXJlQ2FsbGJhY2sgPSB0cnVlOyB9XG4gICAgICAgIGlmIChyZWMgPT09IHZvaWQgMCkgeyByZWMgPSBudWxsOyB9XG4gICAgICAgIGlmICh0aGlzLmlzVmFsdWVDaGFuZ2luZ0ludGVybmFsbHkpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHZhciByZXMgPSBmYWxzZTtcbiAgICAgICAgaWYgKCEhdGhpcy5jaGFuZ2luZ1ZhbHVlUXVlc3Rpb24pIHtcbiAgICAgICAgICAgIHZhciByZXMgPSB0aGlzLmNoYW5naW5nVmFsdWVRdWVzdGlvbi5oYXNFcnJvcnMoZmlyZUNhbGxiYWNrLCByZWMpO1xuICAgICAgICAgICAgcmVzID0gdGhpcy5oYXNLZXlzRHVwbGljYXRlZChmaXJlQ2FsbGJhY2ssIHJlYykgfHwgcmVzO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVQYW5lbHNDb250YWluc0Vycm9ycygpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzID0gdGhpcy5oYXNFcnJvckluUGFuZWxzKGZpcmVDYWxsYmFjaywgcmVjKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5oYXNFcnJvcnMuY2FsbCh0aGlzLCBmaXJlQ2FsbGJhY2ssIHJlYykgfHwgcmVzO1xuICAgIH07XG4gICAgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbC5wcm90b3R5cGUuZ2V0Q29udGFpbnNFcnJvcnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciByZXMgPSBfc3VwZXIucHJvdG90eXBlLmdldENvbnRhaW5zRXJyb3JzLmNhbGwodGhpcyk7XG4gICAgICAgIGlmIChyZXMpXG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB2YXIgcGFuZWxzID0gdGhpcy5wYW5lbHM7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFuZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAocGFuZWxzW2ldLmNvbnRhaW5zRXJyb3JzKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwucHJvdG90eXBlLmdldElzQW5zd2VyZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghX3N1cGVyLnByb3RvdHlwZS5nZXRJc0Fuc3dlcmVkLmNhbGwodGhpcykpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHZhciBwYW5lbHMgPSB0aGlzLnZpc2libGVQYW5lbHM7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFuZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgdmlzaWJsZVF1ZXN0aW9ucyA9IFtdO1xuICAgICAgICAgICAgcGFuZWxzW2ldLmFkZFF1ZXN0aW9uc1RvTGlzdCh2aXNpYmxlUXVlc3Rpb25zLCB0cnVlKTtcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdmlzaWJsZVF1ZXN0aW9ucy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIGlmICghdmlzaWJsZVF1ZXN0aW9uc1tqXS5pc0Fuc3dlcmVkKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgICBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsLnByb3RvdHlwZS5jbGVhclZhbHVlT25IaWRkaW5nID0gZnVuY3Rpb24gKGlzQ2xlYXJPbkhpZGRlbikge1xuICAgICAgICBpZiAoIWlzQ2xlYXJPbkhpZGRlbikge1xuICAgICAgICAgICAgaWYgKCEhdGhpcy5zdXJ2ZXkgJiYgdGhpcy5zdXJ2ZXkuZ2V0UXVlc3Rpb25DbGVhcklmSW52aXNpYmxlKFwib25IaWRkZW5cIikgPT09IFwibm9uZVwiKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJWYWx1ZUluUGFuZWxzSWZJbnZpc2libGUoXCJvbkhpZGRlbkNvbnRhaW5lclwiKTtcbiAgICAgICAgfVxuICAgICAgICBfc3VwZXIucHJvdG90eXBlLmNsZWFyVmFsdWVPbkhpZGRpbmcuY2FsbCh0aGlzLCBpc0NsZWFyT25IaWRkZW4pO1xuICAgIH07XG4gICAgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbC5wcm90b3R5cGUuY2xlYXJWYWx1ZUlmSW52aXNpYmxlID0gZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICBpZiAocmVhc29uID09PSB2b2lkIDApIHsgcmVhc29uID0gXCJvbkhpZGRlblwiOyB9XG4gICAgICAgIHZhciBwYW5lbFJlYXNvbiA9IHJlYXNvbiA9PT0gXCJvbkhpZGRlblwiID8gXCJvbkhpZGRlbkNvbnRhaW5lclwiIDogcmVhc29uO1xuICAgICAgICB0aGlzLmNsZWFyVmFsdWVJblBhbmVsc0lmSW52aXNpYmxlKHBhbmVsUmVhc29uKTtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5jbGVhclZhbHVlSWZJbnZpc2libGUuY2FsbCh0aGlzLCByZWFzb24pO1xuICAgIH07XG4gICAgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbC5wcm90b3R5cGUuY2xlYXJWYWx1ZUluUGFuZWxzSWZJbnZpc2libGUgPSBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYW5lbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLnBhbmVsc1tpXS5xdWVzdGlvbnM7XG4gICAgICAgICAgICB0aGlzLmlzU2V0UGFuZWxJdGVtRGF0YSA9IHt9O1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBxdWVzdGlvbnMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgcSA9IHF1ZXN0aW9uc1tqXTtcbiAgICAgICAgICAgICAgICBxLmNsZWFyVmFsdWVJZkludmlzaWJsZShyZWFzb24pO1xuICAgICAgICAgICAgICAgIHRoaXMuaXNTZXRQYW5lbEl0ZW1EYXRhW3EuZ2V0VmFsdWVOYW1lKCldID0gdGhpcy5tYXhDaGVja0NvdW50ICsgMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlzU2V0UGFuZWxJdGVtRGF0YSA9IHt9O1xuICAgIH07XG4gICAgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbC5wcm90b3R5cGUuZ2V0SXNSdW5uaW5nVmFsaWRhdG9ycyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKF9zdXBlci5wcm90b3R5cGUuZ2V0SXNSdW5uaW5nVmFsaWRhdG9ycy5jYWxsKHRoaXMpKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYW5lbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLnBhbmVsc1tpXS5xdWVzdGlvbnM7XG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHF1ZXN0aW9ucy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIGlmIChxdWVzdGlvbnNbal0uaXNSdW5uaW5nVmFsaWRhdG9ycylcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gICAgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbC5wcm90b3R5cGUuZ2V0QWxsRXJyb3JzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gX3N1cGVyLnByb3RvdHlwZS5nZXRBbGxFcnJvcnMuY2FsbCh0aGlzKTtcbiAgICAgICAgdmFyIHBhbmVscyA9IHRoaXMudmlzaWJsZVBhbmVscztcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYW5lbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBxdWVzdGlvbnMgPSBwYW5lbHNbaV0ucXVlc3Rpb25zO1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBxdWVzdGlvbnMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgZXJyb3JzID0gcXVlc3Rpb25zW2pdLmdldEFsbEVycm9ycygpO1xuICAgICAgICAgICAgICAgIGlmIChlcnJvcnMgJiYgZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LmNvbmNhdChlcnJvcnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gICAgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbC5wcm90b3R5cGUuZ2V0RGlzcGxheVZhbHVlQ29yZSA9IGZ1bmN0aW9uIChrZXlzQXNUZXh0LCB2YWx1ZSkge1xuICAgICAgICB2YXIgdmFsdWVzID0gdGhpcy5nZXRVbmJpbmRWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIGlmICghdmFsdWVzIHx8ICFBcnJheS5pc0FycmF5KHZhbHVlcykpXG4gICAgICAgICAgICByZXR1cm4gdmFsdWVzO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGFuZWxzLmxlbmd0aCAmJiBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgdmFsID0gdmFsdWVzW2ldO1xuICAgICAgICAgICAgaWYgKCF2YWwpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB2YWx1ZXNbaV0gPSB0aGlzLmdldFBhbmVsRGlzcGxheVZhbHVlKGksIHZhbCwga2V5c0FzVGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlcztcbiAgICB9O1xuICAgIFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwucHJvdG90eXBlLmdldFBhbmVsRGlzcGxheVZhbHVlID0gZnVuY3Rpb24gKHBhbmVsSW5kZXgsIHZhbCwga2V5c0FzVGV4dCkge1xuICAgICAgICBpZiAoIXZhbClcbiAgICAgICAgICAgIHJldHVybiB2YWw7XG4gICAgICAgIHZhciBwYW5lbCA9IHRoaXMucGFuZWxzW3BhbmVsSW5kZXhdO1xuICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHZhbCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgICAgICAgICB2YXIgcXVlc3Rpb24gPSBwYW5lbC5nZXRRdWVzdGlvbkJ5VmFsdWVOYW1lKGtleSk7XG4gICAgICAgICAgICBpZiAoIXF1ZXN0aW9uKSB7XG4gICAgICAgICAgICAgICAgcXVlc3Rpb24gPSB0aGlzLmdldFNoYXJlZFF1ZXN0aW9uRnJvbUFycmF5KGtleSwgcGFuZWxJbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoISFxdWVzdGlvbikge1xuICAgICAgICAgICAgICAgIHZhciBxVmFsdWUgPSBxdWVzdGlvbi5nZXREaXNwbGF5VmFsdWUoa2V5c0FzVGV4dCwgdmFsW2tleV0pO1xuICAgICAgICAgICAgICAgIHZhbFtrZXldID0gcVZhbHVlO1xuICAgICAgICAgICAgICAgIGlmIChrZXlzQXNUZXh0ICYmICEhcXVlc3Rpb24udGl0bGUgJiYgcXVlc3Rpb24udGl0bGUgIT09IGtleSkge1xuICAgICAgICAgICAgICAgICAgICB2YWxbcXVlc3Rpb24udGl0bGVdID0gcVZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgdmFsW2tleV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfTtcbiAgICBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsLnByb3RvdHlwZS5oYXNFcnJvckluUGFuZWxzID0gZnVuY3Rpb24gKGZpcmVDYWxsYmFjaywgcmVjKSB7XG4gICAgICAgIHZhciByZXMgPSBmYWxzZTtcbiAgICAgICAgdmFyIHBhbmVscyA9IHRoaXMudmlzaWJsZVBhbmVscztcbiAgICAgICAgdmFyIGtleVZhbHVlcyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhbmVscy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5zZXRPbkNvbXBsZXRlQXN5bmNJblBhbmVsKHBhbmVsc1tpXSk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYW5lbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBwbmxFcnJvciA9IHBhbmVsc1tpXS5oYXNFcnJvcnMoZmlyZUNhbGxiYWNrLCAhIXJlYyAmJiByZWMuZm9jdXNlT25GaXJzdEVycm9yLCByZWMpO1xuICAgICAgICAgICAgcG5sRXJyb3IgPSB0aGlzLmlzVmFsdWVEdXBsaWNhdGVkKHBhbmVsc1tpXSwga2V5VmFsdWVzLCByZWMsIGZpcmVDYWxsYmFjaykgfHwgcG5sRXJyb3I7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNSZW5kZXJNb2RlTGlzdCAmJiBwbmxFcnJvciAmJiAhcmVzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50SW5kZXggPSBpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzID0gcG5sRXJyb3IgfHwgcmVzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfTtcbiAgICBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsLnByb3RvdHlwZS5zZXRPbkNvbXBsZXRlQXN5bmNJblBhbmVsID0gZnVuY3Rpb24gKHBhbmVsKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBxdWVzdGlvbnMgPSBwYW5lbC5xdWVzdGlvbnM7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBxdWVzdGlvbnNbaV0ub25Db21wbGV0ZWRBc3luY1ZhbGlkYXRvcnMgPSBmdW5jdGlvbiAoaGFzRXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMucmFpc2VPbkNvbXBsZXRlZEFzeW5jVmFsaWRhdG9ycygpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbC5wcm90b3R5cGUuaXNWYWx1ZUR1cGxpY2F0ZWQgPSBmdW5jdGlvbiAocGFuZWwsIGtleVZhbHVlcywgcmVjLCBmaXJlQ2FsbGJhY2spIHtcbiAgICAgICAgaWYgKCF0aGlzLmtleU5hbWUpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHZhciBxdWVzdGlvbiA9IHBhbmVsLmdldFF1ZXN0aW9uQnlWYWx1ZU5hbWUodGhpcy5rZXlOYW1lKTtcbiAgICAgICAgaWYgKCFxdWVzdGlvbiB8fCBxdWVzdGlvbi5pc0VtcHR5KCkpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHZhciB2YWx1ZSA9IHF1ZXN0aW9uLnZhbHVlO1xuICAgICAgICBpZiAoISF0aGlzLmNoYW5naW5nVmFsdWVRdWVzdGlvbiAmJlxuICAgICAgICAgICAgcXVlc3Rpb24gIT0gdGhpcy5jaGFuZ2luZ1ZhbHVlUXVlc3Rpb24pIHtcbiAgICAgICAgICAgIHF1ZXN0aW9uLmhhc0Vycm9ycyhmaXJlQ2FsbGJhY2ssIHJlYyk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlWYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBrZXlWYWx1ZXNbaV0pIHtcbiAgICAgICAgICAgICAgICBpZiAoZmlyZUNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uLmFkZEVycm9yKG5ldyBfZXJyb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1tcIktleUR1cGxpY2F0aW9uRXJyb3JcIl0odGhpcy5rZXlEdXBsaWNhdGlvbkVycm9yLCB0aGlzKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghIXJlYyAmJiAhcmVjLmZpcnN0RXJyb3JRdWVzdGlvbikge1xuICAgICAgICAgICAgICAgICAgICByZWMuZmlyc3RFcnJvclF1ZXN0aW9uID0gcXVlc3Rpb247XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGtleVZhbHVlcy5wdXNoKHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gICAgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbC5wcm90b3R5cGUuZ2V0UGFuZWxBY3Rpb25zID0gZnVuY3Rpb24gKHBhbmVsKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBhY3Rpb25zID0gcGFuZWwuZm9vdGVyQWN0aW9ucztcbiAgICAgICAgaWYgKHRoaXMucGFuZWxSZW1vdmVCdXR0b25Mb2NhdGlvbiAhPT0gXCJyaWdodFwiKSB7XG4gICAgICAgICAgICBhY3Rpb25zLnB1c2gobmV3IF9hY3Rpb25zX2FjdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX1tcIkFjdGlvblwiXSh7XG4gICAgICAgICAgICAgICAgaWQ6IFwicmVtb3ZlLXBhbmVsLVwiICsgcGFuZWwuaWQsXG4gICAgICAgICAgICAgICAgY29tcG9uZW50OiBcInN2LXBhbmVsZHluYW1pYy1yZW1vdmUtYnRuXCIsXG4gICAgICAgICAgICAgICAgdmlzaWJsZTogbmV3IF9iYXNlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fW1wiQ29tcHV0ZWRVcGRhdGVyXCJdKGZ1bmN0aW9uICgpIHsgcmV0dXJuIFtfdGhpcy5jYW5SZW1vdmVQYW5lbCwgcGFuZWwuc3RhdGUgIT09IFwiY29sbGFwc2VkXCIsIF90aGlzLnBhbmVsUmVtb3ZlQnV0dG9uTG9jYXRpb24gIT09IFwicmlnaHRcIl0uZXZlcnkoZnVuY3Rpb24gKHZhbCkgeyByZXR1cm4gdmFsID09PSB0cnVlOyB9KTsgfSksXG4gICAgICAgICAgICAgICAgZGF0YTogeyBxdWVzdGlvbjogdGhpcywgcGFuZWw6IHBhbmVsIH1cbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoISF0aGlzLnN1cnZleSkge1xuICAgICAgICAgICAgYWN0aW9ucyA9IHRoaXMuc3VydmV5LmdldFVwZGF0ZWRQYW5lbEZvb3RlckFjdGlvbnMocGFuZWwsIGFjdGlvbnMsIHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY3Rpb25zO1xuICAgIH07XG4gICAgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbC5wcm90b3R5cGUuY3JlYXRlTmV3UGFuZWwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBwYW5lbCA9IHRoaXMuY3JlYXRlQW5kU2V0dXBOZXdQYW5lbE9iamVjdCgpO1xuICAgICAgICB2YXIganNvbiA9IHRoaXMudGVtcGxhdGUudG9KU09OKCk7XG4gICAgICAgIG5ldyBfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fW1wiSnNvbk9iamVjdFwiXSgpLnRvT2JqZWN0KGpzb24sIHBhbmVsKTtcbiAgICAgICAgcGFuZWwucmVuZGVyV2lkdGggPSBcIjEwMCVcIjtcbiAgICAgICAgcGFuZWwudXBkYXRlQ3VzdG9tV2lkZ2V0cygpO1xuICAgICAgICBuZXcgUXVlc3Rpb25QYW5lbER5bmFtaWNJdGVtKHRoaXMsIHBhbmVsKTtcbiAgICAgICAgaWYgKCF0aGlzLmlzRGVzaWduTW9kZSAmJiAhdGhpcy5pc1JlYWRPbmx5ICYmICF0aGlzLmlzVmFsdWVFbXB0eShwYW5lbC5nZXRWYWx1ZSgpKSkge1xuICAgICAgICAgICAgdGhpcy5ydW5QYW5lbHNDb25kaXRpb24oW3BhbmVsXSwgdGhpcy5nZXREYXRhRmlsdGVyZWRWYWx1ZXMoKSwgdGhpcy5nZXREYXRhRmlsdGVyZWRQcm9wZXJ0aWVzKCkpO1xuICAgICAgICB9XG4gICAgICAgIHBhbmVsLm9uRmlyc3RSZW5kZXJpbmcoKTtcbiAgICAgICAgdmFyIHF1ZXN0aW9ucyA9IHBhbmVsLnF1ZXN0aW9ucztcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHF1ZXN0aW9uc1tpXS5zZXRQYXJlbnRRdWVzdGlvbih0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICBwYW5lbC5sb2NTdHJzQ2hhbmdlZCgpO1xuICAgICAgICBwYW5lbC5vbkdldEZvb3RlckFjdGlvbnNDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBfdGhpcy5nZXRQYW5lbEFjdGlvbnMocGFuZWwpO1xuICAgICAgICB9O1xuICAgICAgICBwYW5lbC5vbkdldEZvb3RlclRvb2xiYXJDc3NDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF90aGlzLmNzc0NsYXNzZXMucGFuZWxGb290ZXI7IH07XG4gICAgICAgIHBhbmVsLnJlZ2lzdGVyUHJvcGVydHlDaGFuZ2VkSGFuZGxlcnMoW1widmlzaWJsZVwiXSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKHBhbmVsLnZpc2libGUpXG4gICAgICAgICAgICAgICAgX3RoaXMub25QYW5lbEFkZGVkKHBhbmVsKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBfdGhpcy5vblBhbmVsUmVtb3ZlZChwYW5lbCk7XG4gICAgICAgICAgICBfdGhpcy51cGRhdGVGb290ZXJBY3Rpb25zKCk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcGFuZWw7XG4gICAgfTtcbiAgICBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsLnByb3RvdHlwZS5jcmVhdGVBbmRTZXR1cE5ld1BhbmVsT2JqZWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgcGFuZWwgPSB0aGlzLmNyZWF0ZU5ld1BhbmVsT2JqZWN0KCk7XG4gICAgICAgIHBhbmVsLmlzSW50ZXJhY3RpdmVEZXNpZ25FbGVtZW50ID0gZmFsc2U7XG4gICAgICAgIHBhbmVsLnNldFBhcmVudFF1ZXN0aW9uKHRoaXMpO1xuICAgICAgICBwYW5lbC5vbkdldFF1ZXN0aW9uVGl0bGVMb2NhdGlvbiA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF90aGlzLmdldFRlbXBsYXRlUXVlc3Rpb25UaXRsZUxvY2F0aW9uKCk7IH07XG4gICAgICAgIHJldHVybiBwYW5lbDtcbiAgICB9O1xuICAgIFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwucHJvdG90eXBlLmdldFRlbXBsYXRlUXVlc3Rpb25UaXRsZUxvY2F0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZVRpdGxlTG9jYXRpb24gIT0gXCJkZWZhdWx0XCJcbiAgICAgICAgICAgID8gdGhpcy50ZW1wbGF0ZVRpdGxlTG9jYXRpb25cbiAgICAgICAgICAgIDogdGhpcy5nZXRUaXRsZUxvY2F0aW9uQ29yZSgpO1xuICAgIH07XG4gICAgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbC5wcm90b3R5cGUuZ2V0Q2hpbGRFcnJvckxvY2F0aW9uID0gZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgIGlmICh0aGlzLnRlbXBsYXRlRXJyb3JMb2NhdGlvbiAhPT0gXCJkZWZhdWx0XCIpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZUVycm9yTG9jYXRpb247XG4gICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLmdldENoaWxkRXJyb3JMb2NhdGlvbi5jYWxsKHRoaXMsIGNoaWxkKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwucHJvdG90eXBlLmNyZWF0ZU5ld1BhbmVsT2JqZWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1tcIlNlcmlhbGl6ZXJcIl0uY3JlYXRlQ2xhc3MoXCJwYW5lbFwiKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwucHJvdG90eXBlLnNldFBhbmVsQ291bnRCYXNlZE9uVmFsdWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzVmFsdWVDaGFuZ2luZ0ludGVybmFsbHkgfHwgdGhpcy51c2VUZW1wbGF0ZVBhbmVsKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIgdmFsID0gdGhpcy52YWx1ZTtcbiAgICAgICAgdmFyIG5ld1BhbmVsQ291bnQgPSB2YWwgJiYgQXJyYXkuaXNBcnJheSh2YWwpID8gdmFsLmxlbmd0aCA6IDA7XG4gICAgICAgIGlmIChuZXdQYW5lbENvdW50ID09IDAgJiYgdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicGFuZWxDb3VudFwiKSA+IDApIHtcbiAgICAgICAgICAgIG5ld1BhbmVsQ291bnQgPSB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJwYW5lbENvdW50XCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0dGluZ1BhbmVsQ291bnRCYXNlZE9uVmFsdWUgPSB0cnVlO1xuICAgICAgICB0aGlzLnBhbmVsQ291bnQgPSBuZXdQYW5lbENvdW50O1xuICAgICAgICB0aGlzLnNldHRpbmdQYW5lbENvdW50QmFzZWRPblZhbHVlID0gZmFsc2U7XG4gICAgfTtcbiAgICBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsLnByb3RvdHlwZS5zZXRRdWVzdGlvblZhbHVlID0gZnVuY3Rpb24gKG5ld1ZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLnNldHRpbmdQYW5lbENvdW50QmFzZWRPblZhbHVlKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBfc3VwZXIucHJvdG90eXBlLnNldFF1ZXN0aW9uVmFsdWUuY2FsbCh0aGlzLCBuZXdWYWx1ZSwgZmFsc2UpO1xuICAgICAgICB0aGlzLnNldFBhbmVsQ291bnRCYXNlZE9uVmFsdWUoKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhbmVscy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5wYW5lbFVwZGF0ZVZhbHVlRnJvbVN1cnZleSh0aGlzLnBhbmVsc1tpXSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVJc0Fuc3dlcmVkKCk7XG4gICAgfTtcbiAgICBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsLnByb3RvdHlwZS5vblN1cnZleVZhbHVlQ2hhbmdlZCA9IGZ1bmN0aW9uIChuZXdWYWx1ZSkge1xuICAgICAgICBpZiAobmV3VmFsdWUgPT09IHVuZGVmaW5lZCAmJiB0aGlzLmlzQWxsUGFuZWxzRW1wdHkoKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5vblN1cnZleVZhbHVlQ2hhbmdlZC5jYWxsKHRoaXMsIG5ld1ZhbHVlKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhbmVscy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5wYW5lbFN1cnZleVZhbHVlQ2hhbmdlZCh0aGlzLnBhbmVsc1tpXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5ld1ZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWVCYXNlZE9uUGFuZWxDb3VudCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlSXNSZWFkeSgpO1xuICAgIH07XG4gICAgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbC5wcm90b3R5cGUuaXNBbGxQYW5lbHNFbXB0eSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhbmVscy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKCFfaGVscGVyc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiSGVscGVyc1wiXS5pc1ZhbHVlRW1wdHkodGhpcy5wYW5lbHNbaV0uZ2V0VmFsdWUoKSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG4gICAgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbC5wcm90b3R5cGUucGFuZWxVcGRhdGVWYWx1ZUZyb21TdXJ2ZXkgPSBmdW5jdGlvbiAocGFuZWwpIHtcbiAgICAgICAgdmFyIHF1ZXN0aW9ucyA9IHBhbmVsLnF1ZXN0aW9ucztcbiAgICAgICAgdmFyIHZhbHVlcyA9IHRoaXMuZ2V0UGFuZWxJdGVtRGF0YShwYW5lbC5kYXRhKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBxID0gcXVlc3Rpb25zW2ldO1xuICAgICAgICAgICAgcS51cGRhdGVWYWx1ZUZyb21TdXJ2ZXkodmFsdWVzW3EuZ2V0VmFsdWVOYW1lKCldKTtcbiAgICAgICAgICAgIHEudXBkYXRlQ29tbWVudEZyb21TdXJ2ZXkodmFsdWVzW3EuZ2V0VmFsdWVOYW1lKCkgKyBfc2V0dGluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1tcInNldHRpbmdzXCJdLmNvbW1lbnRTdWZmaXhdKTtcbiAgICAgICAgICAgIHEuaW5pdERhdGFVSSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsLnByb3RvdHlwZS5wYW5lbFN1cnZleVZhbHVlQ2hhbmdlZCA9IGZ1bmN0aW9uIChwYW5lbCkge1xuICAgICAgICB2YXIgcXVlc3Rpb25zID0gcGFuZWwucXVlc3Rpb25zO1xuICAgICAgICB2YXIgdmFsdWVzID0gdGhpcy5nZXRQYW5lbEl0ZW1EYXRhKHBhbmVsLmRhdGEpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIHEgPSBxdWVzdGlvbnNbaV07XG4gICAgICAgICAgICBxLm9uU3VydmV5VmFsdWVDaGFuZ2VkKHZhbHVlc1txLmdldFZhbHVlTmFtZSgpXSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwucHJvdG90eXBlLm9uU2V0RGF0YSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5vblNldERhdGEuY2FsbCh0aGlzKTtcbiAgICAgICAgaWYgKHRoaXMudXNlVGVtcGxhdGVQYW5lbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRUZW1wbGF0ZVBhbmVsU3VydmV5SW1wbCgpO1xuICAgICAgICAgICAgdGhpcy5yZWJ1aWxkUGFuZWxzKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwucHJvdG90eXBlLmlzTmV3VmFsdWVDb3JyZWN0ID0gZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWwpO1xuICAgIH07XG4gICAgLy9JUXVlc3Rpb25QYW5lbER5bmFtaWNEYXRhXG4gICAgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbC5wcm90b3R5cGUuZ2V0SXRlbUluZGV4ID0gZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgdmFyIHJlcyA9IHRoaXMuaXRlbXMuaW5kZXhPZihpdGVtKTtcbiAgICAgICAgcmV0dXJuIHJlcyA+IC0xID8gcmVzIDogdGhpcy5pdGVtcy5sZW5ndGg7XG4gICAgfTtcbiAgICBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsLnByb3RvdHlwZS5nZXRWaXNpYmxlSXRlbUluZGV4ID0gZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgdmFyIHZpc1BhbmVscyA9IHRoaXMudmlzaWJsZVBhbmVscztcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aXNQYW5lbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh2aXNQYW5lbHNbaV0uZGF0YSA9PT0gaXRlbSlcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmlzUGFuZWxzLmxlbmd0aDtcbiAgICB9O1xuICAgIFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwucHJvdG90eXBlLmdldFBhbmVsSXRlbURhdGEgPSBmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICB2YXIgaXRlbXMgPSB0aGlzLml0ZW1zO1xuICAgICAgICB2YXIgaW5kZXggPSBpdGVtcy5pbmRleE9mKGl0ZW0pO1xuICAgICAgICB2YXIgcVZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICAgICAgaWYgKGluZGV4IDwgMCAmJiBBcnJheS5pc0FycmF5KHFWYWx1ZSkgJiYgcVZhbHVlLmxlbmd0aCA+IGl0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgICAgaW5kZXggPSBpdGVtcy5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluZGV4IDwgMClcbiAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgaWYgKCFxVmFsdWUgfHwgIUFycmF5LmlzQXJyYXkocVZhbHVlKSB8fCBxVmFsdWUubGVuZ3RoIDw9IGluZGV4KVxuICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICByZXR1cm4gcVZhbHVlW2luZGV4XTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwucHJvdG90eXBlLnNldFBhbmVsSXRlbURhdGEgPSBmdW5jdGlvbiAoaXRlbSwgbmFtZSwgdmFsKSB7XG4gICAgICAgIGlmICh0aGlzLmlzU2V0UGFuZWxJdGVtRGF0YVtuYW1lXSA+IHRoaXMubWF4Q2hlY2tDb3VudClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKCF0aGlzLmlzU2V0UGFuZWxJdGVtRGF0YVtuYW1lXSkge1xuICAgICAgICAgICAgdGhpcy5pc1NldFBhbmVsSXRlbURhdGFbbmFtZV0gPSAwO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNTZXRQYW5lbEl0ZW1EYXRhW25hbWVdKys7XG4gICAgICAgIHZhciBpdGVtcyA9IHRoaXMuaXRlbXM7XG4gICAgICAgIHZhciBpbmRleCA9IGl0ZW1zLmluZGV4T2YoaXRlbSk7XG4gICAgICAgIGlmIChpbmRleCA8IDApXG4gICAgICAgICAgICBpbmRleCA9IGl0ZW1zLmxlbmd0aDtcbiAgICAgICAgdmFyIHFWYWx1ZSA9IHRoaXMuZ2V0VW5iaW5kVmFsdWUodGhpcy52YWx1ZSk7XG4gICAgICAgIGlmICghcVZhbHVlIHx8ICFBcnJheS5pc0FycmF5KHFWYWx1ZSkpIHtcbiAgICAgICAgICAgIHFWYWx1ZSA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChxVmFsdWUubGVuZ3RoIDw9IGluZGV4KSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gcVZhbHVlLmxlbmd0aDsgaSA8PSBpbmRleDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgcVZhbHVlLnB1c2goe30pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghcVZhbHVlW2luZGV4XSlcbiAgICAgICAgICAgIHFWYWx1ZVtpbmRleF0gPSB7fTtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsdWVFbXB0eSh2YWwpKSB7XG4gICAgICAgICAgICBxVmFsdWVbaW5kZXhdW25hbWVdID0gdmFsO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZGVsZXRlIHFWYWx1ZVtpbmRleF1bbmFtZV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluZGV4ID49IDAgJiYgaW5kZXggPCB0aGlzLnBhbmVscy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdpbmdWYWx1ZVF1ZXN0aW9uID0gdGhpcy5wYW5lbHNbaW5kZXhdLmdldFF1ZXN0aW9uQnlWYWx1ZU5hbWUobmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52YWx1ZSA9IHFWYWx1ZTtcbiAgICAgICAgdGhpcy5jaGFuZ2luZ1ZhbHVlUXVlc3Rpb24gPSBudWxsO1xuICAgICAgICBpZiAodGhpcy5zdXJ2ZXkpIHtcbiAgICAgICAgICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgICAgICAgICAgIHF1ZXN0aW9uOiB0aGlzLFxuICAgICAgICAgICAgICAgIHBhbmVsOiBpdGVtLnBhbmVsLFxuICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICAgICAgaXRlbUluZGV4OiBpbmRleCxcbiAgICAgICAgICAgICAgICBpdGVtVmFsdWU6IHFWYWx1ZVtpbmRleF0sXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLnN1cnZleS5keW5hbWljUGFuZWxJdGVtVmFsdWVDaGFuZ2VkKHRoaXMsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNTZXRQYW5lbEl0ZW1EYXRhW25hbWVdLS07XG4gICAgICAgIGlmICh0aGlzLmlzU2V0UGFuZWxJdGVtRGF0YVtuYW1lXSAtIDEpIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmlzU2V0UGFuZWxJdGVtRGF0YVtuYW1lXTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbC5wcm90b3R5cGUuZ2V0Um9vdERhdGEgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGE7XG4gICAgfTtcbiAgICBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsLnByb3RvdHlwZS5nZXRQbGFpbkRhdGEgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7IGluY2x1ZGVFbXB0eTogdHJ1ZSB9OyB9XG4gICAgICAgIHZhciBxdWVzdGlvblBsYWluRGF0YSA9IF9zdXBlci5wcm90b3R5cGUuZ2V0UGxhaW5EYXRhLmNhbGwodGhpcywgb3B0aW9ucyk7XG4gICAgICAgIGlmICghIXF1ZXN0aW9uUGxhaW5EYXRhKSB7XG4gICAgICAgICAgICBxdWVzdGlvblBsYWluRGF0YS5pc05vZGUgPSB0cnVlO1xuICAgICAgICAgICAgcXVlc3Rpb25QbGFpbkRhdGEuZGF0YSA9IHRoaXMucGFuZWxzLm1hcChmdW5jdGlvbiAocGFuZWwsIGluZGV4KSB7XG4gICAgICAgICAgICAgICAgdmFyIHBhbmVsRGF0YUl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IHBhbmVsLm5hbWUgfHwgaW5kZXgsXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBwYW5lbC50aXRsZSB8fCBcIlBhbmVsXCIsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBwYW5lbC5nZXRWYWx1ZSgpLFxuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5VmFsdWU6IHBhbmVsLmdldFZhbHVlKCksXG4gICAgICAgICAgICAgICAgICAgIGdldFN0cmluZzogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWwgPT09IFwib2JqZWN0XCIgPyBKU09OLnN0cmluZ2lmeSh2YWwpIDogdmFsO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBpc05vZGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHBhbmVsLnF1ZXN0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAocXVlc3Rpb24pIHsgcmV0dXJuIHF1ZXN0aW9uLmdldFBsYWluRGF0YShvcHRpb25zKTsgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKGQpIHsgcmV0dXJuICEhZDsgfSksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAob3B0aW9ucy5jYWxjdWxhdGlvbnMgfHwgW10pLmZvckVhY2goZnVuY3Rpb24gKGNhbGN1bGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhbmVsRGF0YUl0ZW1bY2FsY3VsYXRpb24ucHJvcGVydHlOYW1lXSA9IHBhbmVsW2NhbGN1bGF0aW9uLnByb3BlcnR5TmFtZV07XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhbmVsRGF0YUl0ZW07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcXVlc3Rpb25QbGFpbkRhdGE7XG4gICAgfTtcbiAgICBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsLnByb3RvdHlwZS51cGRhdGVFbGVtZW50Q3NzID0gZnVuY3Rpb24gKHJlTmV3KSB7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUudXBkYXRlRWxlbWVudENzcy5jYWxsKHRoaXMsIHJlTmV3KTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhbmVscy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGVsID0gdGhpcy5wYW5lbHNbaV07XG4gICAgICAgICAgICBlbC51cGRhdGVFbGVtZW50Q3NzKHJlTmV3KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwucHJvdG90eXBlLCBcInByb2dyZXNzVGV4dFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHJhbmdlTWF4ID0gdGhpcy52aXNpYmxlUGFuZWxDb3VudDtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphdGlvbkZvcm1hdFN0cmluZyhcInBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dFwiLCB0aGlzLmN1cnJlbnRJbmRleCArIDEsIHJhbmdlTWF4KTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsLnByb3RvdHlwZSwgXCJwcm9ncmVzc1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuICgodGhpcy5jdXJyZW50SW5kZXggKyAxKSAvIHRoaXMudmlzaWJsZVBhbmVsQ291bnQpICogMTAwICsgXCIlXCI7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsLnByb3RvdHlwZS5nZXRSb290Q3NzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gbmV3IF91dGlsc19jc3NDbGFzc0J1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19bXCJDc3NDbGFzc0J1aWxkZXJcIl0oKS5hcHBlbmQoX3N1cGVyLnByb3RvdHlwZS5nZXRSb290Q3NzLmNhbGwodGhpcykpLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMuZW1wdHksIHRoaXMuZ2V0U2hvd05vRW50cmllc1BsYWNlaG9sZGVyKCkpLnRvU3RyaW5nKCk7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbC5wcm90b3R5cGUsIFwiY3NzSGVhZGVyXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgc2hvd1RhYiA9IHRoaXMuaXNSZW5kZXJNb2RlVGFiICYmICEhdGhpcy5wYW5lbENvdW50O1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBfdXRpbHNfY3NzQ2xhc3NCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fW1wiQ3NzQ2xhc3NCdWlsZGVyXCJdKClcbiAgICAgICAgICAgICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5oZWFkZXIpXG4gICAgICAgICAgICAgICAgLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMuaGVhZGVyVG9wLCB0aGlzLmhhc1RpdGxlT25Ub3AgfHwgc2hvd1RhYilcbiAgICAgICAgICAgICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5oZWFkZXJUYWIsIHNob3dUYWIpXG4gICAgICAgICAgICAgICAgLnRvU3RyaW5nKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsLnByb3RvdHlwZS5nZXRQYW5lbFdyYXBwZXJDc3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBuZXcgX3V0aWxzX2Nzc0NsYXNzQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX1tcIkNzc0NsYXNzQnVpbGRlclwiXSgpXG4gICAgICAgICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5wYW5lbFdyYXBwZXIpXG4gICAgICAgICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5wYW5lbFdyYXBwZXJJblJvdywgdGhpcy5wYW5lbFJlbW92ZUJ1dHRvbkxvY2F0aW9uID09PSBcInJpZ2h0XCIpXG4gICAgICAgICAgICAudG9TdHJpbmcoKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwucHJvdG90eXBlLmdldFBhbmVsUmVtb3ZlQnV0dG9uQ3NzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gbmV3IF91dGlsc19jc3NDbGFzc0J1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19bXCJDc3NDbGFzc0J1aWxkZXJcIl0oKVxuICAgICAgICAgICAgLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMuYnV0dG9uKVxuICAgICAgICAgICAgLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMuYnV0dG9uUmVtb3ZlKVxuICAgICAgICAgICAgLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMuYnV0dG9uUmVtb3ZlUmlnaHQsIHRoaXMucGFuZWxSZW1vdmVCdXR0b25Mb2NhdGlvbiA9PT0gXCJyaWdodFwiKVxuICAgICAgICAgICAgLnRvU3RyaW5nKCk7XG4gICAgfTtcbiAgICBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsLnByb3RvdHlwZS5nZXRBZGRCdXR0b25Dc3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBuZXcgX3V0aWxzX2Nzc0NsYXNzQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX1tcIkNzc0NsYXNzQnVpbGRlclwiXSgpXG4gICAgICAgICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5idXR0b24pXG4gICAgICAgICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5idXR0b25BZGQpXG4gICAgICAgICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5idXR0b25BZGQgKyBcIi0tbGlzdC1tb2RlXCIsIHRoaXMucmVuZGVyTW9kZSA9PT0gXCJsaXN0XCIpXG4gICAgICAgICAgICAudG9TdHJpbmcoKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwucHJvdG90eXBlLmdldFByZXZCdXR0b25Dc3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBuZXcgX3V0aWxzX2Nzc0NsYXNzQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX1tcIkNzc0NsYXNzQnVpbGRlclwiXSgpXG4gICAgICAgICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5idXR0b25QcmV2KVxuICAgICAgICAgICAgLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMuYnV0dG9uUHJldkRpc2FibGVkLCAhdGhpcy5pc1ByZXZCdXR0b25WaXNpYmxlKVxuICAgICAgICAgICAgLnRvU3RyaW5nKCk7XG4gICAgfTtcbiAgICBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsLnByb3RvdHlwZS5nZXROZXh0QnV0dG9uQ3NzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gbmV3IF91dGlsc19jc3NDbGFzc0J1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19bXCJDc3NDbGFzc0J1aWxkZXJcIl0oKVxuICAgICAgICAgICAgLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMuYnV0dG9uTmV4dClcbiAgICAgICAgICAgIC5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLmJ1dHRvbk5leHREaXNhYmxlZCwgIXRoaXMuaXNOZXh0QnV0dG9uVmlzaWJsZSlcbiAgICAgICAgICAgIC50b1N0cmluZygpO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwucHJvdG90eXBlLCBcIm5vRW50cmllc1RleHRcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogQSB0ZXh0IGRpc3BsYXllZCB3aGVuIER5bmFtaWMgUGFuZWwgY29udGFpbnMgbm8gZW50cmllcy4gQXBwbGllcyBvbmx5IGluIHRoZSBEZWZhdWx0IFYyIHRoZW1lLlxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJub0VudHJpZXNUZXh0XCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwibm9FbnRyaWVzVGV4dFwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwucHJvdG90eXBlLCBcImxvY05vRW50cmllc1RleHRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwibm9FbnRyaWVzVGV4dFwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwucHJvdG90eXBlLmdldFNob3dOb0VudHJpZXNQbGFjZWhvbGRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5jc3NDbGFzc2VzLm5vRW50cmllc1BsYWNlaG9sZGVyICYmICF0aGlzLmlzRGVzaWduTW9kZSAmJiB0aGlzLnZpc2libGVQYW5lbENvdW50ID09PSAwO1xuICAgIH07XG4gICAgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbC5wcm90b3R5cGUubmVlZFJlc3BvbnNpdmVXaWR0aCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHBhbmVsID0gdGhpcy5nZXRQYW5lbCgpO1xuICAgICAgICBpZiAoISFwYW5lbCAmJiBwYW5lbC5uZWVkUmVzcG9uc2l2ZVdpZHRoKCkpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gICAgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbC5wcm90b3R5cGUuZ2V0QWRkaXRpb25hbFRpdGxlVG9vbGJhciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzUmVuZGVyTW9kZVRhYilcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICBpZiAoIXRoaXMuYWRkaXRpb25hbFRpdGxlVG9vbGJhclZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmFkZGl0aW9uYWxUaXRsZVRvb2xiYXJWYWx1ZSA9IG5ldyBfYWN0aW9uc19hZGFwdGl2ZV9jb250YWluZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX19bXCJBZGFwdGl2ZUFjdGlvbkNvbnRhaW5lclwiXSgpO1xuICAgICAgICAgICAgdGhpcy5hZGRpdGlvbmFsVGl0bGVUb29sYmFyVmFsdWUuZG90c0l0ZW0ucG9wdXBNb2RlbC5zaG93UG9pbnRlciA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5hZGRpdGlvbmFsVGl0bGVUb29sYmFyVmFsdWUuZG90c0l0ZW0ucG9wdXBNb2RlbC52ZXJ0aWNhbFBvc2l0aW9uID0gXCJib3R0b21cIjtcbiAgICAgICAgICAgIHRoaXMuYWRkaXRpb25hbFRpdGxlVG9vbGJhclZhbHVlLmRvdHNJdGVtLnBvcHVwTW9kZWwuaG9yaXpvbnRhbFBvc2l0aW9uID0gXCJjZW50ZXJcIjtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRWxlbWVudENzcyhmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkaXRpb25hbFRpdGxlVG9vbGJhclZhbHVlO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwucHJvdG90eXBlLCBcImZvb3RlclRvb2xiYXJcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5mb290ZXJUb29sYmFyVmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRGb290ZXJUb29sYmFyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5mb290ZXJUb29sYmFyVmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsLnByb3RvdHlwZS51cGRhdGVGb290ZXJBY3Rpb25zID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoISF0aGlzLnVwZGF0ZUZvb3RlckFjdGlvbnNDYWxsYmFjaykge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVGb290ZXJBY3Rpb25zQ2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbC5wcm90b3R5cGUuaW5pdEZvb3RlclRvb2xiYXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHRoaXMuZm9vdGVyVG9vbGJhclZhbHVlID0gdGhpcy5jcmVhdGVBY3Rpb25Db250YWluZXIoKTtcbiAgICAgICAgdmFyIGl0ZW1zID0gW107XG4gICAgICAgIHZhciBwcmV2VGV4dEJ0biA9IG5ldyBfYWN0aW9uc19hY3Rpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19bXCJBY3Rpb25cIl0oe1xuICAgICAgICAgICAgaWQ6IFwic3YtcGQtcHJldi1idG5cIixcbiAgICAgICAgICAgIHRpdGxlOiB0aGlzLnBhbmVsUHJldlRleHQsXG4gICAgICAgICAgICBhY3Rpb246IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5nb1RvUHJldlBhbmVsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgbmV4dFRleHRCdG4gPSBuZXcgX2FjdGlvbnNfYWN0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fW1wiQWN0aW9uXCJdKHtcbiAgICAgICAgICAgIGlkOiBcInN2LXBkLW5leHQtYnRuXCIsXG4gICAgICAgICAgICB0aXRsZTogdGhpcy5wYW5lbE5leHRUZXh0LFxuICAgICAgICAgICAgYWN0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMuZ29Ub05leHRQYW5lbCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdmFyIGFkZEJ0biA9IG5ldyBfYWN0aW9uc19hY3Rpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19bXCJBY3Rpb25cIl0oe1xuICAgICAgICAgICAgaWQ6IFwic3YtcGQtYWRkLWJ0blwiLFxuICAgICAgICAgICAgY29tcG9uZW50OiBcInN2LXBhbmVsZHluYW1pYy1hZGQtYnRuXCIsXG4gICAgICAgICAgICBkYXRhOiB7IHF1ZXN0aW9uOiB0aGlzIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBwcmV2QnRuSWNvbiA9IG5ldyBfYWN0aW9uc19hY3Rpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19bXCJBY3Rpb25cIl0oe1xuICAgICAgICAgICAgaWQ6IFwic3YtcHJldi1idG4taWNvblwiLFxuICAgICAgICAgICAgY29tcG9uZW50OiBcInN2LXBhbmVsZHluYW1pYy1wcmV2LWJ0blwiLFxuICAgICAgICAgICAgZGF0YTogeyBxdWVzdGlvbjogdGhpcyB9XG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgcHJvZ3Jlc3NUZXh0ID0gbmV3IF9hY3Rpb25zX2FjdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX1tcIkFjdGlvblwiXSh7XG4gICAgICAgICAgICBpZDogXCJzdi1wZC1wcm9ncmVzcy10ZXh0XCIsXG4gICAgICAgICAgICBjb21wb25lbnQ6IFwic3YtcGFuZWxkeW5hbWljLXByb2dyZXNzLXRleHRcIixcbiAgICAgICAgICAgIGRhdGE6IHsgcXVlc3Rpb246IHRoaXMgfVxuICAgICAgICB9KTtcbiAgICAgICAgdmFyIG5leHRCdG5JY29uID0gbmV3IF9hY3Rpb25zX2FjdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX1tcIkFjdGlvblwiXSh7XG4gICAgICAgICAgICBpZDogXCJzdi1wZC1uZXh0LWJ0bi1pY29uXCIsXG4gICAgICAgICAgICBjb21wb25lbnQ6IFwic3YtcGFuZWxkeW5hbWljLW5leHQtYnRuXCIsXG4gICAgICAgICAgICBkYXRhOiB7IHF1ZXN0aW9uOiB0aGlzIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGl0ZW1zLnB1c2gocHJldlRleHRCdG4sIG5leHRUZXh0QnRuLCBhZGRCdG4sIHByZXZCdG5JY29uLCBwcm9ncmVzc1RleHQsIG5leHRCdG5JY29uKTtcbiAgICAgICAgdGhpcy51cGRhdGVGb290ZXJBY3Rpb25zQ2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgaXNMZWdhY3lOYXZpZ2F0aW9uID0gX3RoaXMubGVnYWN5TmF2aWdhdGlvbjtcbiAgICAgICAgICAgIHZhciBpc1JlbmRlck1vZGVMaXN0ID0gX3RoaXMuaXNSZW5kZXJNb2RlTGlzdDtcbiAgICAgICAgICAgIHZhciBpc01vYmlsZSA9IF90aGlzLmlzTW9iaWxlO1xuICAgICAgICAgICAgdmFyIHNob3dOYXZpZ2F0aW9uID0gIWlzTGVnYWN5TmF2aWdhdGlvbiAmJiAhaXNSZW5kZXJNb2RlTGlzdDtcbiAgICAgICAgICAgIHByZXZUZXh0QnRuLnZpc2libGUgPSBzaG93TmF2aWdhdGlvbiAmJiBfdGhpcy5jdXJyZW50SW5kZXggPiAwO1xuICAgICAgICAgICAgbmV4dFRleHRCdG4udmlzaWJsZSA9IHNob3dOYXZpZ2F0aW9uICYmIF90aGlzLmN1cnJlbnRJbmRleCA8IF90aGlzLnZpc2libGVQYW5lbENvdW50IC0gMTtcbiAgICAgICAgICAgIG5leHRUZXh0QnRuLm5lZWRTcGFjZSA9IGlzTW9iaWxlICYmIG5leHRUZXh0QnRuLnZpc2libGUgJiYgcHJldlRleHRCdG4udmlzaWJsZTtcbiAgICAgICAgICAgIGFkZEJ0bi52aXNpYmxlID0gX3RoaXMuY2FuQWRkUGFuZWw7XG4gICAgICAgICAgICBhZGRCdG4ubmVlZFNwYWNlID0gX3RoaXMuaXNNb2JpbGUgJiYgIW5leHRUZXh0QnRuLnZpc2libGUgJiYgcHJldlRleHRCdG4udmlzaWJsZTtcbiAgICAgICAgICAgIHByb2dyZXNzVGV4dC52aXNpYmxlID0gIV90aGlzLmlzUmVuZGVyTW9kZUxpc3QgJiYgIWlzTW9iaWxlO1xuICAgICAgICAgICAgcHJvZ3Jlc3NUZXh0Lm5lZWRTcGFjZSA9ICFpc0xlZ2FjeU5hdmlnYXRpb24gJiYgIV90aGlzLmlzTW9iaWxlO1xuICAgICAgICAgICAgdmFyIHNob3dMZWdhY3lOYXZpZ2F0aW9uID0gaXNMZWdhY3lOYXZpZ2F0aW9uICYmICFpc1JlbmRlck1vZGVMaXN0O1xuICAgICAgICAgICAgcHJldkJ0bkljb24udmlzaWJsZSA9IHNob3dMZWdhY3lOYXZpZ2F0aW9uO1xuICAgICAgICAgICAgbmV4dEJ0bkljb24udmlzaWJsZSA9IHNob3dMZWdhY3lOYXZpZ2F0aW9uO1xuICAgICAgICAgICAgcHJldkJ0bkljb24ubmVlZFNwYWNlID0gc2hvd0xlZ2FjeU5hdmlnYXRpb247XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMudXBkYXRlRm9vdGVyQWN0aW9uc0NhbGxiYWNrKCk7XG4gICAgICAgIHRoaXMuZm9vdGVyVG9vbGJhclZhbHVlLnNldEl0ZW1zKGl0ZW1zKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwucHJvdG90eXBlLmNyZWF0ZVRhYkJ5UGFuZWwgPSBmdW5jdGlvbiAocGFuZWwsIHZpc1BhbmVsSW5kZXgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgaWYgKCF0aGlzLmlzUmVuZGVyTW9kZVRhYilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIGxvY1RpdGxlID0gbmV3IF9sb2NhbGl6YWJsZXN0cmluZ19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiTG9jYWxpemFibGVTdHJpbmdcIl0ocGFuZWwsIHRydWUpO1xuICAgICAgICBsb2NUaXRsZS5vbkdldFRleHRDYWxsYmFjayA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgICAgICAgIGlmICghX3RoaXMuc3VydmV5KVxuICAgICAgICAgICAgICAgIHJldHVybiBzdHI7XG4gICAgICAgICAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICB0aXRsZTogc3RyLFxuICAgICAgICAgICAgICAgIHBhbmVsOiBwYW5lbCxcbiAgICAgICAgICAgICAgICB2aXNpYmxlUGFuZWxJbmRleDogdmlzUGFuZWxJbmRleFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIF90aGlzLnN1cnZleS5keW5hbWljUGFuZWxHZXRUYWJUaXRsZShfdGhpcywgb3B0aW9ucyk7XG4gICAgICAgICAgICByZXR1cm4gb3B0aW9ucy50aXRsZTtcbiAgICAgICAgfTtcbiAgICAgICAgbG9jVGl0bGUuc2hhcmVkRGF0YSA9IHRoaXMubG9jVGVtcGxhdGVUYWJUaXRsZTtcbiAgICAgICAgdmFyIGlzQWN0aXZlID0gdGhpcy5nZXRQYW5lbEluZGV4QnlJZChwYW5lbC5pZCkgPT09IHRoaXMuY3VycmVudEluZGV4O1xuICAgICAgICB2YXIgbmV3SXRlbSA9IG5ldyBfYWN0aW9uc19hY3Rpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19bXCJBY3Rpb25cIl0oe1xuICAgICAgICAgICAgaWQ6IHBhbmVsLmlkLFxuICAgICAgICAgICAgcHJlc3NlZDogaXNBY3RpdmUsXG4gICAgICAgICAgICBsb2NUaXRsZTogbG9jVGl0bGUsXG4gICAgICAgICAgICBkaXNhYmxlSGlkZTogaXNBY3RpdmUsXG4gICAgICAgICAgICBhY3Rpb246IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5jdXJyZW50SW5kZXggPSBfdGhpcy5nZXRQYW5lbEluZGV4QnlJZChuZXdJdGVtLmlkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBuZXdJdGVtO1xuICAgIH07XG4gICAgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbC5wcm90b3R5cGUuZ2V0QWRkaXRpb25hbFRpdGxlVG9vbGJhckNzcyA9IGZ1bmN0aW9uIChjc3NDbGFzc2VzKSB7XG4gICAgICAgIHZhciBjc3MgPSBjc3NDbGFzc2VzICE9PSBudWxsICYmIGNzc0NsYXNzZXMgIT09IHZvaWQgMCA/IGNzc0NsYXNzZXMgOiB0aGlzLmNzc0NsYXNzZXM7XG4gICAgICAgIHJldHVybiBuZXcgX3V0aWxzX2Nzc0NsYXNzQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX1tcIkNzc0NsYXNzQnVpbGRlclwiXSgpXG4gICAgICAgICAgICAuYXBwZW5kKGNzcy50YWJzUm9vdClcbiAgICAgICAgICAgIC5hcHBlbmQoY3NzLnRhYnNMZWZ0LCB0aGlzLnRhYkFsaWduID09PSBcImxlZnRcIilcbiAgICAgICAgICAgIC5hcHBlbmQoY3NzLnRhYnNSaWdodCwgdGhpcy50YWJBbGlnbiA9PT0gXCJyaWdodFwiKVxuICAgICAgICAgICAgLmFwcGVuZChjc3MudGFic0NlbnRlciwgdGhpcy50YWJBbGlnbiA9PT0gXCJjZW50ZXJcIilcbiAgICAgICAgICAgIC50b1N0cmluZygpO1xuICAgIH07XG4gICAgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbC5wcm90b3R5cGUudXBkYXRlVGFiVG9vbGJhckl0ZW1zUHJlc3NlZFN0YXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNSZW5kZXJNb2RlVGFiKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50SW5kZXggPCAwIHx8IHRoaXMuY3VycmVudEluZGV4ID49IHRoaXMudmlzaWJsZVBhbmVsQ291bnQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciBwYW5lbCA9IHRoaXMudmlzaWJsZVBhbmVsc1t0aGlzLmN1cnJlbnRJbmRleF07XG4gICAgICAgIHRoaXMuYWRkaXRpb25hbFRpdGxlVG9vbGJhci5yZW5kZXJlZEFjdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoYWN0aW9uKSB7XG4gICAgICAgICAgICB2YXIgaXNBY3RpdmUgPSBhY3Rpb24uaWQgPT09IHBhbmVsLmlkO1xuICAgICAgICAgICAgYWN0aW9uLnByZXNzZWQgPSBpc0FjdGl2ZTtcbiAgICAgICAgICAgIGFjdGlvbi5kaXNhYmxlSGlkZSA9IGlzQWN0aXZlO1xuICAgICAgICAgICAgLy9zaG91bGQgcmFpc2UgdXBkYXRlIGlmIGRpbWVuc2lvbnMgYXJlIG5vdCBjaGFuZ2VkIGJ1dCBhY3Rpb24gaXMgYWN0aXZlIG5vd1xuICAgICAgICAgICAgaWYgKGFjdGlvbi5tb2RlID09PSBcInBvcHVwXCIgJiYgYWN0aW9uLmRpc2FibGVIaWRlKSB7XG4gICAgICAgICAgICAgICAgYWN0aW9uW1wicmFpc2VVcGRhdGVcIl0oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsLnByb3RvdHlwZS51cGRhdGVUYWJUb29sYmFyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBpZiAoIXRoaXMuaXNSZW5kZXJNb2RlVGFiKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIgaXRlbXMgPSBbXTtcbiAgICAgICAgdmFyIHZpc1BhbmVscyA9IHRoaXMudmlzaWJsZVBhbmVscztcbiAgICAgICAgdmFyIF9sb29wXzEgPSBmdW5jdGlvbiAoaSkge1xuICAgICAgICAgICAgdGhpc18xLnZpc2libGVQYW5lbHMuZm9yRWFjaChmdW5jdGlvbiAocGFuZWwpIHsgcmV0dXJuIGl0ZW1zLnB1c2goX3RoaXMuY3JlYXRlVGFiQnlQYW5lbCh2aXNQYW5lbHNbaV0sIGkpKTsgfSk7XG4gICAgICAgIH07XG4gICAgICAgIHZhciB0aGlzXzEgPSB0aGlzO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZpc1BhbmVscy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgX2xvb3BfMShpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFkZGl0aW9uYWxUaXRsZVRvb2xiYXIuc2V0SXRlbXMoaXRlbXMpO1xuICAgIH07XG4gICAgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbC5wcm90b3R5cGUuYWRkVGFiRnJvbVRvb2xiYXIgPSBmdW5jdGlvbiAocGFuZWwsIGluZGV4KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1JlbmRlck1vZGVUYWIpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciBuZXdJdGVtID0gdGhpcy5jcmVhdGVUYWJCeVBhbmVsKHBhbmVsLCBpbmRleCk7XG4gICAgICAgIHRoaXMuYWRkaXRpb25hbFRpdGxlVG9vbGJhci5hY3Rpb25zLnNwbGljZShpbmRleCwgMCwgbmV3SXRlbSk7XG4gICAgICAgIHRoaXMudXBkYXRlVGFiVG9vbGJhckl0ZW1zUHJlc3NlZFN0YXRlKCk7XG4gICAgfTtcbiAgICBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsLnByb3RvdHlwZS5yZW1vdmVUYWJGcm9tVG9vbGJhciA9IGZ1bmN0aW9uIChwYW5lbCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNSZW5kZXJNb2RlVGFiKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIgcmVtb3ZlZEl0ZW0gPSB0aGlzLmFkZGl0aW9uYWxUaXRsZVRvb2xiYXIuZ2V0QWN0aW9uQnlJZChwYW5lbC5pZCk7XG4gICAgICAgIGlmICghcmVtb3ZlZEl0ZW0pXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMuYWRkaXRpb25hbFRpdGxlVG9vbGJhci5hY3Rpb25zLnNwbGljZSh0aGlzLmFkZGl0aW9uYWxUaXRsZVRvb2xiYXIuYWN0aW9ucy5pbmRleE9mKHJlbW92ZWRJdGVtKSwgMSk7XG4gICAgICAgIHRoaXMudXBkYXRlVGFiVG9vbGJhckl0ZW1zUHJlc3NlZFN0YXRlKCk7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbC5wcm90b3R5cGUsIFwic2hvd0xlZ2FjeU5hdmlnYXRpb25cIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAhdGhpcy5pc0RlZmF1bHRWMlRoZW1lO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwucHJvdG90eXBlLCBcInNob3dOYXZpZ2F0aW9uXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52aXNpYmxlUGFuZWxDb3VudCA+IDAgJiYgIXRoaXMuc2hvd0xlZ2FjeU5hdmlnYXRpb24gJiYgISF0aGlzLmNzc0NsYXNzZXMuZm9vdGVyO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbC5wcm90b3R5cGUuc2hvd1NlcGFyYXRvciA9IGZ1bmN0aW9uIChpbmRleCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1JlbmRlck1vZGVMaXN0ICYmIGluZGV4IDwgdGhpcy52aXNpYmxlUGFuZWxDb3VudCAtIDE7XG4gICAgfTtcbiAgICBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsLnByb3RvdHlwZS5jYWxjQ3NzQ2xhc3NlcyA9IGZ1bmN0aW9uIChjc3MpIHtcbiAgICAgICAgdmFyIGNsYXNzZXMgPSBfc3VwZXIucHJvdG90eXBlLmNhbGNDc3NDbGFzc2VzLmNhbGwodGhpcywgY3NzKTtcbiAgICAgICAgdmFyIGFkZGl0aW9uYWxUaXRsZVRvb2xiYXIgPSB0aGlzLmFkZGl0aW9uYWxUaXRsZVRvb2xiYXI7XG4gICAgICAgIGlmICghIWFkZGl0aW9uYWxUaXRsZVRvb2xiYXIpIHtcbiAgICAgICAgICAgIGFkZGl0aW9uYWxUaXRsZVRvb2xiYXIuY29udGFpbmVyQ3NzID0gdGhpcy5nZXRBZGRpdGlvbmFsVGl0bGVUb29sYmFyQ3NzKGNsYXNzZXMpO1xuICAgICAgICAgICAgYWRkaXRpb25hbFRpdGxlVG9vbGJhci5jc3NDbGFzc2VzID0gY2xhc3Nlcy50YWJzO1xuICAgICAgICAgICAgYWRkaXRpb25hbFRpdGxlVG9vbGJhci5kb3RzSXRlbS5jc3NDbGFzc2VzID0gY2xhc3Nlcy50YWJzO1xuICAgICAgICAgICAgYWRkaXRpb25hbFRpdGxlVG9vbGJhci5kb3RzSXRlbS5wb3B1cE1vZGVsLmNvbnRlbnRDb21wb25lbnREYXRhLm1vZGVsLmNzc0NsYXNzZXMgPSBjc3MubGlzdDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2xhc3NlcztcbiAgICB9O1xuICAgIFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwubWF4Q2hlY2tDb3VudCA9IDM7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fW1wicHJvcGVydHlcIl0pKHsgZGVmYXVsdFZhbHVlOiBmYWxzZSwgb25TZXQ6IGZ1bmN0aW9uIChfLCB0YXJnZXQpIHsgdGFyZ2V0LnVwZGF0ZUZvb3RlckFjdGlvbnMoKTsgfSB9KVxuICAgIF0sIFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwucHJvdG90eXBlLCBcImxlZ2FjeU5hdmlnYXRpb25cIiwgdm9pZCAwKTtcbiAgICByZXR1cm4gUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbDtcbn0oX3F1ZXN0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bXCJRdWVzdGlvblwiXSkpO1xuXG5fanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fW1wiU2VyaWFsaXplclwiXS5hZGRDbGFzcyhcInBhbmVsZHluYW1pY1wiLCBbXG4gICAgeyBuYW1lOiBcInNob3dDb21tZW50QXJlYTpzd2l0Y2hcIiwgbGF5b3V0OiBcInJvd1wiLCB2aXNpYmxlOiB0cnVlLCBjYXRlZ29yeTogXCJnZW5lcmFsXCIgfSxcbiAgICB7XG4gICAgICAgIG5hbWU6IFwidGVtcGxhdGVFbGVtZW50c1wiLFxuICAgICAgICBhbHRlcm5hdGl2ZU5hbWU6IFwicXVlc3Rpb25zXCIsXG4gICAgICAgIGJhc2VDbGFzc05hbWU6IFwicXVlc3Rpb25cIixcbiAgICAgICAgdmlzaWJsZTogZmFsc2UsXG4gICAgICAgIGlzTGlnaHRTZXJpYWxpemFibGU6IGZhbHNlXG4gICAgfSxcbiAgICB7IG5hbWU6IFwidGVtcGxhdGVUaXRsZTp0ZXh0XCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NUZW1wbGF0ZVRpdGxlXCIgfSxcbiAgICB7IG5hbWU6IFwidGVtcGxhdGVUYWJUaXRsZVwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jVGVtcGxhdGVUYWJUaXRsZVwiLCB2aXNpYmxlSWY6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iai5yZW5kZXJNb2RlID09PSBcInRhYlwiOyB9IH0sXG4gICAge1xuICAgICAgICBuYW1lOiBcInRlbXBsYXRlRGVzY3JpcHRpb246dGV4dFwiLFxuICAgICAgICBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jVGVtcGxhdGVEZXNjcmlwdGlvblwiLFxuICAgIH0sXG4gICAgeyBuYW1lOiBcIm1pbldpZHRoXCIsIGRlZmF1bHRGdW5jOiBmdW5jdGlvbiAoKSB7IHJldHVybiBcImF1dG9cIjsgfSB9LFxuICAgIHsgbmFtZTogXCJub0VudHJpZXNUZXh0OnRleHRcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY05vRW50cmllc1RleHRcIiB9LFxuICAgIHsgbmFtZTogXCJhbGxvd0FkZFBhbmVsOmJvb2xlYW5cIiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIHsgbmFtZTogXCJhbGxvd1JlbW92ZVBhbmVsOmJvb2xlYW5cIiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIHtcbiAgICAgICAgbmFtZTogXCJwYW5lbENvdW50Om51bWJlclwiLFxuICAgICAgICBpc0JpbmRhYmxlOiB0cnVlLFxuICAgICAgICBkZWZhdWx0OiAwLFxuICAgICAgICBjaG9pY2VzOiBbMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTBdLFxuICAgIH0sXG4gICAgeyBuYW1lOiBcIm1pblBhbmVsQ291bnQ6bnVtYmVyXCIsIGRlZmF1bHQ6IDAsIG1pblZhbHVlOiAwIH0sXG4gICAge1xuICAgICAgICBuYW1lOiBcIm1heFBhbmVsQ291bnQ6bnVtYmVyXCIsXG4gICAgICAgIGRlZmF1bHQ6IF9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fW1wic2V0dGluZ3NcIl0ucGFuZWwubWF4UGFuZWxDb3VudCxcbiAgICB9LFxuICAgIFwiZGVmYXVsdFBhbmVsVmFsdWU6cGFuZWx2YWx1ZVwiLFxuICAgIFwiZGVmYXVsdFZhbHVlRnJvbUxhc3RQYW5lbDpib29sZWFuXCIsXG4gICAge1xuICAgICAgICBuYW1lOiBcInBhbmVsc1N0YXRlXCIsXG4gICAgICAgIGRlZmF1bHQ6IFwiZGVmYXVsdFwiLFxuICAgICAgICBjaG9pY2VzOiBbXCJkZWZhdWx0XCIsIFwiY29sbGFwc2VkXCIsIFwiZXhwYW5kZWRcIiwgXCJmaXJzdEV4cGFuZGVkXCJdLFxuICAgIH0sXG4gICAgeyBuYW1lOiBcImtleU5hbWVcIiB9LFxuICAgIHtcbiAgICAgICAgbmFtZTogXCJrZXlEdXBsaWNhdGlvbkVycm9yXCIsXG4gICAgICAgIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NLZXlEdXBsaWNhdGlvbkVycm9yXCIsXG4gICAgfSxcbiAgICB7IG5hbWU6IFwiY29uZmlybURlbGV0ZTpib29sZWFuXCIgfSxcbiAgICB7XG4gICAgICAgIG5hbWU6IFwiY29uZmlybURlbGV0ZVRleHRcIixcbiAgICAgICAgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY0NvbmZpcm1EZWxldGVUZXh0XCIsXG4gICAgfSxcbiAgICB7IG5hbWU6IFwicGFuZWxBZGRUZXh0XCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NQYW5lbEFkZFRleHRcIiB9LFxuICAgIHsgbmFtZTogXCJwYW5lbFJlbW92ZVRleHRcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1BhbmVsUmVtb3ZlVGV4dFwiIH0sXG4gICAgeyBuYW1lOiBcInBhbmVsUHJldlRleHRcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1BhbmVsUHJldlRleHRcIiB9LFxuICAgIHsgbmFtZTogXCJwYW5lbE5leHRUZXh0XCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NQYW5lbE5leHRUZXh0XCIgfSxcbiAgICB7XG4gICAgICAgIG5hbWU6IFwic2hvd1F1ZXN0aW9uTnVtYmVyc1wiLFxuICAgICAgICBkZWZhdWx0OiBcIm9mZlwiLFxuICAgICAgICBjaG9pY2VzOiBbXCJvZmZcIiwgXCJvblBhbmVsXCIsIFwib25TdXJ2ZXlcIl0sXG4gICAgfSxcbiAgICB7IG5hbWU6IFwic2hvd1JhbmdlSW5Qcm9ncmVzczpib29sZWFuXCIsIGRlZmF1bHQ6IHRydWUgfSxcbiAgICB7XG4gICAgICAgIG5hbWU6IFwicmVuZGVyTW9kZVwiLFxuICAgICAgICBkZWZhdWx0OiBcImxpc3RcIixcbiAgICAgICAgY2hvaWNlczogW1wibGlzdFwiLCBcInByb2dyZXNzVG9wXCIsIFwicHJvZ3Jlc3NCb3R0b21cIiwgXCJwcm9ncmVzc1RvcEJvdHRvbVwiLCBcInRhYlwiXSxcbiAgICB9LFxuICAgIHtcbiAgICAgICAgbmFtZTogXCJ0YWJBbGlnblwiLCBkZWZhdWx0OiBcImNlbnRlclwiLCBjaG9pY2VzOiBbXCJjZW50ZXJcIiwgXCJsZWZ0XCIsIFwicmlnaHRcIl0sXG4gICAgICAgIHZpc2libGVJZjogZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqLnJlbmRlck1vZGUgPT09IFwidGFiXCI7IH1cbiAgICB9LFxuICAgIHtcbiAgICAgICAgbmFtZTogXCJ0ZW1wbGF0ZVRpdGxlTG9jYXRpb25cIixcbiAgICAgICAgZGVmYXVsdDogXCJkZWZhdWx0XCIsXG4gICAgICAgIGNob2ljZXM6IFtcImRlZmF1bHRcIiwgXCJ0b3BcIiwgXCJib3R0b21cIiwgXCJsZWZ0XCJdLFxuICAgIH0sXG4gICAgeyBuYW1lOiBcInRlbXBsYXRlRXJyb3JMb2NhdGlvblwiLCBkZWZhdWx0OiBcImRlZmF1bHRcIiwgY2hvaWNlczogW1wiZGVmYXVsdFwiLCBcInRvcFwiLCBcImJvdHRvbVwiXSB9LFxuICAgIHtcbiAgICAgICAgbmFtZTogXCJ0ZW1wbGF0ZVZpc2libGVJZjpleHByZXNzaW9uXCIsXG4gICAgICAgIGNhdGVnb3J5OiBcImxvZ2ljXCJcbiAgICB9LFxuICAgIHtcbiAgICAgICAgbmFtZTogXCJwYW5lbFJlbW92ZUJ1dHRvbkxvY2F0aW9uXCIsXG4gICAgICAgIGRlZmF1bHQ6IFwiYm90dG9tXCIsXG4gICAgICAgIGNob2ljZXM6IFtcImJvdHRvbVwiLCBcInJpZ2h0XCJdLFxuICAgIH0sXG5dLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsKFwiXCIpO1xufSwgXCJxdWVzdGlvblwiKTtcbl9xdWVzdGlvbmZhY3RvcnlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1tcIlF1ZXN0aW9uRmFjdG9yeVwiXS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwicGFuZWxkeW5hbWljXCIsIGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgcmV0dXJuIG5ldyBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsKG5hbWUpO1xufSk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvcXVlc3Rpb25fcmFkaW9ncm91cC50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3F1ZXN0aW9uX3JhZGlvZ3JvdXAudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBRdWVzdGlvblJhZGlvZ3JvdXBNb2RlbCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJRdWVzdGlvblJhZGlvZ3JvdXBNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFF1ZXN0aW9uUmFkaW9ncm91cE1vZGVsOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9qc29ub2JqZWN0ICovIFwiLi9zcmMvanNvbm9iamVjdC50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcXVlc3Rpb25mYWN0b3J5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3F1ZXN0aW9uZmFjdG9yeSAqLyBcIi4vc3JjL3F1ZXN0aW9uZmFjdG9yeS50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcXVlc3Rpb25fYmFzZXNlbGVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9xdWVzdGlvbl9iYXNlc2VsZWN0ICovIFwiLi9zcmMvcXVlc3Rpb25fYmFzZXNlbGVjdC50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYWN0aW9uc19hY3Rpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYWN0aW9ucy9hY3Rpb24gKi8gXCIuL3NyYy9hY3Rpb25zL2FjdGlvbi50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYmFzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9iYXNlICovIFwiLi9zcmMvYmFzZS50c1wiKTtcbnZhciBfX2V4dGVuZHMgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xuXG5cblxuXG5cbi8qKlxuICogQSBjbGFzcyB0aGF0IGRlc2NyaWJlcyB0aGUgUmFkaW8gQnV0dG9uIEdyb3VwIHF1ZXN0aW9uIHR5cGUuXG4gKlxuICogW1ZpZXcgRGVtb10oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZXhhbXBsZXMvcXVlc3Rpb250eXBlLXJhZGlvZ3JvdXAvIChsaW5rU3R5bGUpKVxuICovXG52YXIgUXVlc3Rpb25SYWRpb2dyb3VwTW9kZWwgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFF1ZXN0aW9uUmFkaW9ncm91cE1vZGVsLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFF1ZXN0aW9uUmFkaW9ncm91cE1vZGVsKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlci5jYWxsKHRoaXMsIG5hbWUpIHx8IHRoaXM7XG4gICAgfVxuICAgIFF1ZXN0aW9uUmFkaW9ncm91cE1vZGVsLnByb3RvdHlwZS5nZXREZWZhdWx0SXRlbUNvbXBvbmVudCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIFwic3VydmV5LXJhZGlvZ3JvdXAtaXRlbVwiO1xuICAgIH07XG4gICAgUXVlc3Rpb25SYWRpb2dyb3VwTW9kZWwucHJvdG90eXBlLmdldFR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBcInJhZGlvZ3JvdXBcIjtcbiAgICB9O1xuICAgIFF1ZXN0aW9uUmFkaW9ncm91cE1vZGVsLnByb3RvdHlwZS5nZXRGaXJzdElucHV0RWxlbWVudElkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnB1dElkICsgXCJfMFwiO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uUmFkaW9ncm91cE1vZGVsLnByb3RvdHlwZSwgXCJzZWxlY3RlZEl0ZW1cIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJucyB0aGUgc2VsZWN0ZWQgY2hvaWNlIGl0ZW0uIElmIG5vIGl0ZW0gaXMgc2VsZWN0ZWQsIHJldHVybnMgYG51bGxgLlxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLmdldFNpbmdsZVNlbGVjdGVkSXRlbSgpOyB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uUmFkaW9ncm91cE1vZGVsLnByb3RvdHlwZSwgXCJzaG93Q2xlYXJCdXR0b25cIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHdoZXRoZXIgdG8gZGlzcGxheSBhIGJ1dHRvbiB0aGF0IGNsZWFycyB0aGUgcXVlc3Rpb24gdmFsdWUuXG4gICAgICAgICAqXG4gICAgICAgICAqIERlZmF1bHQgdmFsdWU6IGBmYWxzZWBcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInNob3dDbGVhckJ1dHRvblwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzaG93Q2xlYXJCdXR0b25cIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblJhZGlvZ3JvdXBNb2RlbC5wcm90b3R5cGUsIFwiY2FuU2hvd0NsZWFyQnV0dG9uXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zaG93Q2xlYXJCdXR0b24gJiYgIXRoaXMuaXNSZWFkT25seTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblJhZGlvZ3JvdXBNb2RlbC5wcm90b3R5cGUsIFwiY2xlYXJCdXR0b25DYXB0aW9uXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YXRpb25TdHJpbmcoXCJjbGVhckNhcHRpb25cIik7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBRdWVzdGlvblJhZGlvZ3JvdXBNb2RlbC5wcm90b3R5cGUuc3VwcG9ydEdvTmV4dFBhZ2VBdXRvbWF0aWMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzTW91c2VEb3duID09PSB0cnVlO1xuICAgIH07XG4gICAgUXVlc3Rpb25SYWRpb2dyb3VwTW9kZWwucHJvdG90eXBlLnNldE5ld0NvbW1lbnQgPSBmdW5jdGlvbiAobmV3VmFsdWUpIHtcbiAgICAgICAgdGhpcy5pc01vdXNlRG93biA9IHRydWU7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUuc2V0TmV3Q29tbWVudC5jYWxsKHRoaXMsIG5ld1ZhbHVlKTtcbiAgICAgICAgdGhpcy5pc01vdXNlRG93biA9IGZhbHNlO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uUmFkaW9ncm91cE1vZGVsLnByb3RvdHlwZSwgXCJzaG93Q2xlYXJCdXR0b25JbkNvbnRlbnRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAhdGhpcy5pc0RlZmF1bHRWMlRoZW1lICYmIHRoaXMuY2FuU2hvd0NsZWFyQnV0dG9uO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUXVlc3Rpb25SYWRpb2dyb3VwTW9kZWwucHJvdG90eXBlLmNsaWNrSXRlbUhhbmRsZXIgPSBmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICB0aGlzLnJlbmRlcmVkVmFsdWUgPSBpdGVtLnZhbHVlO1xuICAgIH07XG4gICAgUXVlc3Rpb25SYWRpb2dyb3VwTW9kZWwucHJvdG90eXBlLmdldERlZmF1bHRUaXRsZUFjdGlvbnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBhY3Rpb25zID0gW107XG4gICAgICAgIGlmICh0aGlzLmlzRGVmYXVsdFYyVGhlbWUgJiYgIXRoaXMuaXNEZXNpZ25Nb2RlKSB7XG4gICAgICAgICAgICB2YXIgY2xlYXJBY3Rpb24gPSBuZXcgX2FjdGlvbnNfYWN0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJBY3Rpb25cIl0oe1xuICAgICAgICAgICAgICAgIHRpdGxlOiB0aGlzLmNsZWFyQnV0dG9uQ2FwdGlvbixcbiAgICAgICAgICAgICAgICBpZDogXCJzdi1jbHItYnRuLVwiICsgdGhpcy5pZCxcbiAgICAgICAgICAgICAgICBhY3Rpb246IGZ1bmN0aW9uICgpIHsgX3RoaXMuY2xlYXJWYWx1ZSgpOyB9LFxuICAgICAgICAgICAgICAgIGlubmVyQ3NzOiB0aGlzLmNzc0NsYXNzZXMuY2xlYXJCdXR0b24sXG4gICAgICAgICAgICAgICAgdmlzaWJsZTogbmV3IF9iYXNlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bXCJDb21wdXRlZFVwZGF0ZXJcIl0oZnVuY3Rpb24gKCkgeyByZXR1cm4gX3RoaXMuY2FuU2hvd0NsZWFyQnV0dG9uOyB9KVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhY3Rpb25zLnB1c2goY2xlYXJBY3Rpb24pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY3Rpb25zO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uUmFkaW9ncm91cE1vZGVsLnByb3RvdHlwZSwgXCJpc05ld0ExMXlTdHJ1Y3R1cmVcIiwge1xuICAgICAgICAvL2ExMXlcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblJhZGlvZ3JvdXBNb2RlbC5wcm90b3R5cGUsIFwiYTExeV9pbnB1dF9hcmlhUm9sZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIFwicmFkaW9ncm91cFwiO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgcmV0dXJuIFF1ZXN0aW9uUmFkaW9ncm91cE1vZGVsO1xufShfcXVlc3Rpb25fYmFzZXNlbGVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiUXVlc3Rpb25DaGVja2JveEJhc2VcIl0pKTtcblxuX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlNlcmlhbGl6ZXJcIl0uYWRkQ2xhc3MoXCJyYWRpb2dyb3VwXCIsIFt7IG5hbWU6IFwic2hvd0NsZWFyQnV0dG9uOmJvb2xlYW5cIiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwic2VwYXJhdGVTcGVjaWFsQ2hvaWNlc1wiLCB2aXNpYmxlOiB0cnVlIH0sXG4gICAgeyBuYW1lOiBcIml0ZW1Db21wb25lbnRcIiwgdmlzaWJsZTogZmFsc2UsIGRlZmF1bHQ6IFwic3VydmV5LXJhZGlvZ3JvdXAtaXRlbVwiIH1cbl0sIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uUmFkaW9ncm91cE1vZGVsKFwiXCIpO1xufSwgXCJjaGVja2JveGJhc2VcIik7XG5fcXVlc3Rpb25mYWN0b3J5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJRdWVzdGlvbkZhY3RvcnlcIl0uSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcInJhZGlvZ3JvdXBcIiwgZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB2YXIgcSA9IG5ldyBRdWVzdGlvblJhZGlvZ3JvdXBNb2RlbChuYW1lKTtcbiAgICBxLmNob2ljZXMgPSBfcXVlc3Rpb25mYWN0b3J5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJRdWVzdGlvbkZhY3RvcnlcIl0uRGVmYXVsdENob2ljZXM7XG4gICAgcmV0dXJuIHE7XG59KTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9xdWVzdGlvbl9yYW5raW5nLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvcXVlc3Rpb25fcmFua2luZy50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFF1ZXN0aW9uUmFua2luZ01vZGVsICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlF1ZXN0aW9uUmFua2luZ01vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUXVlc3Rpb25SYW5raW5nTW9kZWw7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9kcmFnZHJvcF9yYW5raW5nX2Nob2ljZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZHJhZ2Ryb3AvcmFua2luZy1jaG9pY2VzICovIFwiLi9zcmMvZHJhZ2Ryb3AvcmFua2luZy1jaG9pY2VzLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9kcmFnZHJvcF9yYW5raW5nX3NlbGVjdF90b19yYW5rX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2RyYWdkcm9wL3Jhbmtpbmctc2VsZWN0LXRvLXJhbmsgKi8gXCIuL3NyYy9kcmFnZHJvcC9yYW5raW5nLXNlbGVjdC10by1yYW5rLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9pdGVtdmFsdWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vaXRlbXZhbHVlICovIFwiLi9zcmMvaXRlbXZhbHVlLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2pzb25vYmplY3QgKi8gXCIuL3NyYy9qc29ub2JqZWN0LnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9xdWVzdGlvbmZhY3RvcnlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcXVlc3Rpb25mYWN0b3J5ICovIFwiLi9zcmMvcXVlc3Rpb25mYWN0b3J5LnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9xdWVzdGlvbl9jaGVja2JveF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9xdWVzdGlvbl9jaGVja2JveCAqLyBcIi4vc3JjL3F1ZXN0aW9uX2NoZWNrYm94LnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF91dGlsc19jc3NDbGFzc0J1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vdXRpbHMvY3NzQ2xhc3NCdWlsZGVyICovIFwiLi9zcmMvdXRpbHMvY3NzQ2xhc3NCdWlsZGVyLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF91dGlsc19kZXZpY2VzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3V0aWxzL2RldmljZXMgKi8gXCIuL3NyYy91dGlscy9kZXZpY2VzLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9oZWxwZXJzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2hlbHBlcnMgKi8gXCIuL3NyYy9oZWxwZXJzLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zcmNfc2V0dGluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3NyYy9zZXR0aW5ncyAqLyBcIi4vc3JjL3NldHRpbmdzLnRzXCIpO1xudmFyIF9fZXh0ZW5kcyA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG52YXIgX19kZWNvcmF0ZSA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xuXG5cblxuXG5cblxuXG5cblxuXG4vKipcbiAqIEEgY2xhc3MgdGhhdCBkZXNjcmliZXMgdGhlIFJhbmtpbmcgcXVlc3Rpb24gdHlwZS5cbiAqXG4gKiBbVmlldyBEZW1vXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9leGFtcGxlcy9xdWVzdGlvbnR5cGUtcmFua2luZy8gKGxpbmtTdHlsZSkpXG4gKi9cbnZhciBRdWVzdGlvblJhbmtpbmdNb2RlbCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoUXVlc3Rpb25SYW5raW5nTW9kZWwsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gUXVlc3Rpb25SYW5raW5nTW9kZWwobmFtZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBuYW1lKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5kb21Ob2RlID0gbnVsbDtcbiAgICAgICAgX3RoaXMub25WaXNpYmxlQ2hvaWNlc0NoYW5nZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfc3VwZXIucHJvdG90eXBlLm9uVmlzaWJsZUNob2ljZXNDaGFuZ2VkLmNhbGwoX3RoaXMpO1xuICAgICAgICAgICAgLy8gcmFua2luZyBxdWVzdGlvbiB3aXRoIG9ubHkgb25lIGNob2ljZSBkb2Vzbid0IG1ha2Ugc2Vuc2VcbiAgICAgICAgICAgIGlmIChfdGhpcy52aXNpYmxlQ2hvaWNlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy52YWx1ZSA9IFtdO1xuICAgICAgICAgICAgICAgIF90aGlzLnZhbHVlLnB1c2goX3RoaXMudmlzaWJsZUNob2ljZXNbMF0udmFsdWUpO1xuICAgICAgICAgICAgICAgIF90aGlzLnVwZGF0ZVJhbmtpbmdDaG9pY2VzKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKF90aGlzLmlzRW1wdHkoKSkge1xuICAgICAgICAgICAgICAgIF90aGlzLnVwZGF0ZVJhbmtpbmdDaG9pY2VzKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKF90aGlzLnNlbGVjdFRvUmFua0VuYWJsZWQpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy51cGRhdGVSYW5raW5nQ2hvaWNlcygpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChfdGhpcy52aXNpYmxlQ2hvaWNlcy5sZW5ndGggPiBfdGhpcy52YWx1ZS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgX3RoaXMuYWRkVG9WYWx1ZUJ5VmlzaWJsZUNob2ljZXMoKTtcbiAgICAgICAgICAgIGlmIChfdGhpcy52aXNpYmxlQ2hvaWNlcy5sZW5ndGggPCBfdGhpcy52YWx1ZS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgX3RoaXMucmVtb3ZlRnJvbVZhbHVlQnlWaXNpYmxlQ2hvaWNlcygpO1xuICAgICAgICAgICAgX3RoaXMudXBkYXRlUmFua2luZ0Nob2ljZXMoKTtcbiAgICAgICAgfTtcbiAgICAgICAgX3RoaXMubG9jYWxlQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF9zdXBlci5wcm90b3R5cGUubG9jYWxlQ2hhbmdlZC5jYWxsKF90aGlzKTtcbiAgICAgICAgICAgIF90aGlzLnVwZGF0ZVJhbmtpbmdDaG9pY2VzKCk7XG4gICAgICAgIH07XG4gICAgICAgIF90aGlzLmhhbmRsZVBvaW50ZXJEb3duID0gZnVuY3Rpb24gKGV2ZW50LCBjaG9pY2UsIG5vZGUpIHtcbiAgICAgICAgICAgIHZhciB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG4gICAgICAgICAgICBpZiAoIV90aGlzLmlzRHJhZ1N0YXJ0Tm9kZVZhbGlkKHRhcmdldCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKF90aGlzLmFsbG93U3RhcnREcmFnICYmXG4gICAgICAgICAgICAgICAgX3RoaXMuY2FuU3RhcnREcmFnRHVlTWF4U2VsZWN0ZWRDaG9pY2VzKHRhcmdldCkgJiZcbiAgICAgICAgICAgICAgICBfdGhpcy5jYW5TdGFydERyYWdEdWVJdGVtRW5hYmxlZChjaG9pY2UpKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMuZHJhZ0Ryb3BSYW5raW5nQ2hvaWNlcy5zdGFydERyYWcoZXZlbnQsIGNob2ljZSwgX3RoaXMsIG5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBfdGhpcy5oYW5kbGVLZXlkb3duID0gZnVuY3Rpb24gKGV2ZW50LCBjaG9pY2UpIHtcbiAgICAgICAgICAgIGlmICghX3RoaXMuaXNEZXNpZ25Nb2RlKSB7XG4gICAgICAgICAgICAgICAgdmFyIGtleSA9IGV2ZW50LmtleTtcbiAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSBfdGhpcy5yYW5raW5nQ2hvaWNlcy5pbmRleE9mKGNob2ljZSk7XG4gICAgICAgICAgICAgICAgaWYgKF90aGlzLnNlbGVjdFRvUmFua0VuYWJsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuaGFuZGxlS2V5ZG93blNlbGVjdFRvUmFuayhldmVudCwgY2hvaWNlKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSBcIkFycm93VXBcIiAmJiBpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICBfdGhpcy5oYW5kbGVBcnJvd1VwKGluZGV4LCBjaG9pY2UpO1xuICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSBcIkFycm93RG93blwiICYmIGluZGV4ICE9PSBfdGhpcy5yYW5raW5nQ2hvaWNlcy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIF90aGlzLmhhbmRsZUFycm93RG93bihpbmRleCwgY2hvaWNlKTtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIF90aGlzLmhhbmRsZUFycm93VXAgPSBmdW5jdGlvbiAoaW5kZXgsIGNob2ljZSkge1xuICAgICAgICAgICAgdmFyIGNob2ljZXMgPSBfdGhpcy5yYW5raW5nQ2hvaWNlcztcbiAgICAgICAgICAgIGNob2ljZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIGNob2ljZXMuc3BsaWNlKGluZGV4IC0gMSwgMCwgY2hvaWNlKTtcbiAgICAgICAgICAgIF90aGlzLnNldFZhbHVlKCk7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5mb2N1c0l0ZW0oaW5kZXggLSAxKTtcbiAgICAgICAgICAgIH0sIDEpO1xuICAgICAgICB9O1xuICAgICAgICBfdGhpcy5oYW5kbGVBcnJvd0Rvd24gPSBmdW5jdGlvbiAoaW5kZXgsIGNob2ljZSkge1xuICAgICAgICAgICAgdmFyIGNob2ljZXMgPSBfdGhpcy5yYW5raW5nQ2hvaWNlcztcbiAgICAgICAgICAgIGNob2ljZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIGNob2ljZXMuc3BsaWNlKGluZGV4ICsgMSwgMCwgY2hvaWNlKTtcbiAgICAgICAgICAgIF90aGlzLnNldFZhbHVlKCk7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5mb2N1c0l0ZW0oaW5kZXggKyAxKTtcbiAgICAgICAgICAgIH0sIDEpO1xuICAgICAgICB9O1xuICAgICAgICBfdGhpcy5mb2N1c0l0ZW0gPSBmdW5jdGlvbiAoaW5kZXgsIGNvbnRhaW5lcikge1xuICAgICAgICAgICAgaWYgKF90aGlzLnNlbGVjdFRvUmFua0VuYWJsZWQgJiYgY29udGFpbmVyKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNvbnRhaW5lclNlbGVjdG9yID0gXCJbZGF0YS1yYW5raW5nPSdcIiArIGNvbnRhaW5lciArIFwiJ11cIjtcbiAgICAgICAgICAgICAgICB2YXIgaXRlbXNOb2RlcyA9IF90aGlzLmRvbU5vZGUucXVlcnlTZWxlY3RvckFsbChjb250YWluZXJTZWxlY3RvciArIFwiIFwiICsgXCIuXCIgKyBfdGhpcy5jc3NDbGFzc2VzLml0ZW0pO1xuICAgICAgICAgICAgICAgIGl0ZW1zTm9kZXNbaW5kZXhdLmZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgaXRlbXNOb2RlcyA9IF90aGlzLmRvbU5vZGUucXVlcnlTZWxlY3RvckFsbChcIi5cIiArIF90aGlzLmNzc0NsYXNzZXMuaXRlbSk7XG4gICAgICAgICAgICAgICAgaXRlbXNOb2Rlc1tpbmRleF0uZm9jdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgX3RoaXMuc2V0VmFsdWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgdmFsdWUgPSBbXTtcbiAgICAgICAgICAgIF90aGlzLnJhbmtpbmdDaG9pY2VzLmZvckVhY2goZnVuY3Rpb24gKGNob2ljZSkge1xuICAgICAgICAgICAgICAgIHZhbHVlLnB1c2goY2hvaWNlLnZhbHVlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgX3RoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfTtcbiAgICAgICAgX3RoaXMuY3JlYXRlTmV3QXJyYXkoXCJyYW5raW5nQ2hvaWNlc1wiKTtcbiAgICAgICAgX3RoaXMucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydHlWYWx1ZUNoYW5nZWQoXCJzZWxlY3RUb1JhbmtFbmFibGVkXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLmNsZWFyVmFsdWUoKTtcbiAgICAgICAgICAgIF90aGlzLnNldERyYWdEcm9wUmFua2luZ0Nob2ljZXMoKTtcbiAgICAgICAgICAgIF90aGlzLnVwZGF0ZVJhbmtpbmdDaG9pY2VzKCk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFF1ZXN0aW9uUmFua2luZ01vZGVsLnByb3RvdHlwZS5nZXREZWZhdWx0SXRlbUNvbXBvbmVudCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfTtcbiAgICBRdWVzdGlvblJhbmtpbmdNb2RlbC5wcm90b3R5cGUuZ2V0VHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIFwicmFua2luZ1wiO1xuICAgIH07XG4gICAgUXVlc3Rpb25SYW5raW5nTW9kZWwucHJvdG90eXBlLmdldEl0ZW1UYWJJbmRleCA9IGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIGlmICh0aGlzLmlzRGVzaWduTW9kZSB8fCBpdGVtLmRpc2FibGVkKVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25SYW5raW5nTW9kZWwucHJvdG90eXBlLCBcInJvb3RDbGFzc1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBfdXRpbHNfY3NzQ2xhc3NCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bXCJDc3NDbGFzc0J1aWxkZXJcIl0oKVxuICAgICAgICAgICAgICAgIC5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLnJvb3QpXG4gICAgICAgICAgICAgICAgLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMucm9vdE1vYmlsZU1vZCwgX3V0aWxzX2RldmljZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1tcIklzTW9iaWxlXCJdKVxuICAgICAgICAgICAgICAgIC5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLnJvb3REaXNhYmxlZCwgdGhpcy5pc1JlYWRPbmx5KVxuICAgICAgICAgICAgICAgIC5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLnJvb3REZXNpZ25Nb2RlLCAhIXRoaXMuaXNEZXNpZ25Nb2RlKVxuICAgICAgICAgICAgICAgIC5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLml0ZW1PbkVycm9yLCB0aGlzLmVycm9ycy5sZW5ndGggPiAwKVxuICAgICAgICAgICAgICAgIC5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLnJvb3REcmFnSGFuZGxlQXJlYUljb24sIF9zcmNfc2V0dGluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1tcInNldHRpbmdzXCJdLnJhbmtpbmdEcmFnSGFuZGxlQXJlYSA9PT0gXCJpY29uXCIpXG4gICAgICAgICAgICAgICAgLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMucm9vdFNlbGVjdFRvUmFua01vZCwgdGhpcy5zZWxlY3RUb1JhbmtFbmFibGVkKVxuICAgICAgICAgICAgICAgIC5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLnJvb3RTZWxlY3RUb1JhbmtBbGlnbkhvcml6b250YWwsIHRoaXMuc2VsZWN0VG9SYW5rRW5hYmxlZCAmJiB0aGlzLnNlbGVjdFRvUmFua0FyZWFzTGF5b3V0ID09PSBcImhvcml6b250YWxcIilcbiAgICAgICAgICAgICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5yb290U2VsZWN0VG9SYW5rQWxpZ25WZXJ0aWNhbCwgdGhpcy5zZWxlY3RUb1JhbmtFbmFibGVkICYmIHRoaXMuc2VsZWN0VG9SYW5rQXJlYXNMYXlvdXQgPT09IFwidmVydGljYWxcIilcbiAgICAgICAgICAgICAgICAudG9TdHJpbmcoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFF1ZXN0aW9uUmFua2luZ01vZGVsLnByb3RvdHlwZS5nZXRJdGVtQ2xhc3NDb3JlID0gZnVuY3Rpb24gKGl0ZW0sIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIGl0ZW1JbmRleCA9IHRoaXMucmFua2luZ0Nob2ljZXMuaW5kZXhPZihpdGVtKTtcbiAgICAgICAgdmFyIGRyb3BUYXJnZXRJbmRleCA9IHRoaXMucmFua2luZ0Nob2ljZXMuaW5kZXhPZih0aGlzLmN1cnJlbnREcm9wVGFyZ2V0KTtcbiAgICAgICAgcmV0dXJuIG5ldyBfdXRpbHNfY3NzQ2xhc3NCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bXCJDc3NDbGFzc0J1aWxkZXJcIl0oKVxuICAgICAgICAgICAgLmFwcGVuZChfc3VwZXIucHJvdG90eXBlLmdldEl0ZW1DbGFzc0NvcmUuY2FsbCh0aGlzLCBpdGVtLCBvcHRpb25zKSlcbiAgICAgICAgICAgIC5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLml0ZW1HaG9zdE1vZCwgdGhpcy5jdXJyZW50RHJvcFRhcmdldCA9PT0gaXRlbSlcbiAgICAgICAgICAgIC5hcHBlbmQoXCJzdi1kcmFnZHJvcC1tb3ZlZG93blwiLCBpdGVtSW5kZXggPT09IGRyb3BUYXJnZXRJbmRleCArIDEgJiYgdGhpcy5kcm9wVGFyZ2V0Tm9kZU1vdmUgPT09IFwiZG93blwiKVxuICAgICAgICAgICAgLmFwcGVuZChcInN2LWRyYWdkcm9wLW1vdmV1cFwiLCBpdGVtSW5kZXggPT09IGRyb3BUYXJnZXRJbmRleCAtIDEgJiYgdGhpcy5kcm9wVGFyZ2V0Tm9kZU1vdmUgPT09IFwidXBcIilcbiAgICAgICAgICAgIC50b1N0cmluZygpO1xuICAgIH07XG4gICAgUXVlc3Rpb25SYW5raW5nTW9kZWwucHJvdG90eXBlLmdldENvbnRhaW5lckNsYXNzZXMgPSBmdW5jdGlvbiAoY29udGFpbmVyVHlwZSkge1xuICAgICAgICB2YXIgaXNFbXB0eSA9IGZhbHNlO1xuICAgICAgICB2YXIgaXNUb0NvbnRhaW5lciA9IGNvbnRhaW5lclR5cGUgPT09IFwidG9cIjtcbiAgICAgICAgdmFyIGlzRnJvbUNvbnRhaW5lciA9IGNvbnRhaW5lclR5cGUgPT09IFwiZnJvbVwiO1xuICAgICAgICBpZiAoaXNUb0NvbnRhaW5lcikge1xuICAgICAgICAgICAgaXNFbXB0eSA9IHRoaXMucmFua2luZ0Nob2ljZXMubGVuZ3RoID09PSAwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzRnJvbUNvbnRhaW5lcikge1xuICAgICAgICAgICAgaXNFbXB0eSA9IHRoaXMudW5SYW5raW5nQ2hvaWNlcy5sZW5ndGggPT09IDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBfdXRpbHNfY3NzQ2xhc3NCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bXCJDc3NDbGFzc0J1aWxkZXJcIl0oKVxuICAgICAgICAgICAgLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMuY29udGFpbmVyKVxuICAgICAgICAgICAgLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMuY29udGFpbmVyVG9Nb2RlLCBpc1RvQ29udGFpbmVyKVxuICAgICAgICAgICAgLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMuY29udGFpbmVyRnJvbU1vZGUsIGlzRnJvbUNvbnRhaW5lcilcbiAgICAgICAgICAgIC5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLmNvbnRhaW5lckVtcHR5TW9kZSwgaXNFbXB0eSlcbiAgICAgICAgICAgIC50b1N0cmluZygpO1xuICAgIH07XG4gICAgUXVlc3Rpb25SYW5raW5nTW9kZWwucHJvdG90eXBlLmlzSXRlbUN1cnJlbnREcm9wVGFyZ2V0ID0gZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZHJhZ0Ryb3BSYW5raW5nQ2hvaWNlcy5kcm9wVGFyZ2V0ID09PSBpdGVtO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uUmFua2luZ01vZGVsLnByb3RvdHlwZSwgXCJnaG9zdFBvc2l0aW9uQ3NzQ2xhc3NcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmdob3N0UG9zaXRpb24gPT09IFwidG9wXCIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3NzQ2xhc3Nlcy5kcmFnRHJvcEdob3N0UG9zaXRpb25Ub3A7XG4gICAgICAgICAgICBpZiAodGhpcy5naG9zdFBvc2l0aW9uID09PSBcImJvdHRvbVwiKVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNzc0NsYXNzZXMuZHJhZ0Ryb3BHaG9zdFBvc2l0aW9uQm90dG9tO1xuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBRdWVzdGlvblJhbmtpbmdNb2RlbC5wcm90b3R5cGUuZ2V0SXRlbUluZGV4Q2xhc3NlcyA9IGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIHZhciBub051bWJlcjtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0VG9SYW5rRW5hYmxlZCkge1xuICAgICAgICAgICAgbm9OdW1iZXIgPSB0aGlzLnVuUmFua2luZ0Nob2ljZXMuaW5kZXhPZihpdGVtKSAhPT0gLTE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBub051bWJlciA9IHRoaXMuaXNFbXB0eSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgX3V0aWxzX2Nzc0NsYXNzQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fW1wiQ3NzQ2xhc3NCdWlsZGVyXCJdKClcbiAgICAgICAgICAgIC5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLml0ZW1JbmRleClcbiAgICAgICAgICAgIC5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLml0ZW1JbmRleEVtcHR5TW9kZSwgbm9OdW1iZXIpXG4gICAgICAgICAgICAudG9TdHJpbmcoKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uUmFua2luZ01vZGVsLnByb3RvdHlwZS5nZXROdW1iZXJCeUluZGV4ID0gZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzRW1wdHkoKSA/IFwiXCIgOiBpbmRleCArIDEgKyBcIlwiO1xuICAgIH07XG4gICAgUXVlc3Rpb25SYW5raW5nTW9kZWwucHJvdG90eXBlLnNldFN1cnZleUltcGwgPSBmdW5jdGlvbiAodmFsdWUsIGlzTGlnaHQpIHtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5zZXRTdXJ2ZXlJbXBsLmNhbGwodGhpcywgdmFsdWUsIGlzTGlnaHQpO1xuICAgICAgICB0aGlzLnNldERyYWdEcm9wUmFua2luZ0Nob2ljZXMoKTtcbiAgICAgICAgdGhpcy51cGRhdGVSYW5raW5nQ2hvaWNlcygpO1xuICAgIH07XG4gICAgUXVlc3Rpb25SYW5raW5nTW9kZWwucHJvdG90eXBlLmlzQW5zd2VyQ29ycmVjdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIF9oZWxwZXJzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bXCJIZWxwZXJzXCJdLmlzQXJyYXlzRXF1YWwodGhpcy52YWx1ZSwgdGhpcy5jb3JyZWN0QW5zd2VyLCBmYWxzZSk7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25SYW5raW5nTW9kZWwucHJvdG90eXBlLCBcInJlcXVpcmVTdHJpY3RDb21wYXJlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0cnVlOyB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUXVlc3Rpb25SYW5raW5nTW9kZWwucHJvdG90eXBlLm9uU3VydmV5VmFsdWVDaGFuZ2VkID0gZnVuY3Rpb24gKG5ld1ZhbHVlKSB7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUub25TdXJ2ZXlWYWx1ZUNoYW5nZWQuY2FsbCh0aGlzLCBuZXdWYWx1ZSk7XG4gICAgICAgIGlmICh0aGlzLmlzTG9hZGluZ0Zyb21Kc29uKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLnVwZGF0ZVJhbmtpbmdDaG9pY2VzKCk7XG4gICAgfTtcbiAgICBRdWVzdGlvblJhbmtpbmdNb2RlbC5wcm90b3R5cGUuYWRkVG9WYWx1ZUJ5VmlzaWJsZUNob2ljZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBuZXdWYWx1ZSA9IHRoaXMudmFsdWUuc2xpY2UoKTtcbiAgICAgICAgdGhpcy52aXNpYmxlQ2hvaWNlcy5mb3JFYWNoKGZ1bmN0aW9uIChjaG9pY2UpIHtcbiAgICAgICAgICAgIGlmIChuZXdWYWx1ZS5pbmRleE9mKGNob2ljZS52YWx1ZSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgbmV3VmFsdWUucHVzaChjaG9pY2UudmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy52YWx1ZSA9IG5ld1ZhbHVlO1xuICAgIH07XG4gICAgUXVlc3Rpb25SYW5raW5nTW9kZWwucHJvdG90eXBlLnJlbW92ZUZyb21WYWx1ZUJ5VmlzaWJsZUNob2ljZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBuZXdWYWx1ZSA9IHRoaXMudmFsdWUuc2xpY2UoKTtcbiAgICAgICAgdmFyIGNob2ljZXMgPSB0aGlzLnZpc2libGVDaG9pY2VzO1xuICAgICAgICBmb3IgKHZhciBpID0gdGhpcy52YWx1ZS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgaWYgKCFfaXRlbXZhbHVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJJdGVtVmFsdWVcIl0uZ2V0SXRlbUJ5VmFsdWUoY2hvaWNlcywgdGhpcy52YWx1ZVtpXSkpIHtcbiAgICAgICAgICAgICAgICBuZXdWYWx1ZS5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52YWx1ZSA9IG5ld1ZhbHVlO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uUmFua2luZ01vZGVsLnByb3RvdHlwZSwgXCJyYW5raW5nQ2hvaWNlc1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInJhbmtpbmdDaG9pY2VzXCIsIFtdKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblJhbmtpbmdNb2RlbC5wcm90b3R5cGUsIFwidW5SYW5raW5nQ2hvaWNlc1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHVuUmFua2luZ0Nob2ljZXMgPSBbXTtcbiAgICAgICAgICAgIHZhciByYW5raW5nQ2hvaWNlcyA9IHRoaXMucmFua2luZ0Nob2ljZXM7XG4gICAgICAgICAgICB0aGlzLnZpc2libGVDaG9pY2VzLmZvckVhY2goZnVuY3Rpb24gKGNob2ljZSkge1xuICAgICAgICAgICAgICAgIHVuUmFua2luZ0Nob2ljZXMucHVzaChjaG9pY2UpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByYW5raW5nQ2hvaWNlcy5mb3JFYWNoKGZ1bmN0aW9uIChyYW5raW5nQ2hvaWNlKSB7XG4gICAgICAgICAgICAgICAgdW5SYW5raW5nQ2hvaWNlcy5mb3JFYWNoKGZ1bmN0aW9uIChjaG9pY2UsIGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjaG9pY2UudmFsdWUgPT09IHJhbmtpbmdDaG9pY2UudmFsdWUpXG4gICAgICAgICAgICAgICAgICAgICAgICB1blJhbmtpbmdDaG9pY2VzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiB1blJhbmtpbmdDaG9pY2VzO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUXVlc3Rpb25SYW5raW5nTW9kZWwucHJvdG90eXBlLnVwZGF0ZVJhbmtpbmdDaG9pY2VzID0gZnVuY3Rpb24gKGZvcmNlVXBkYXRlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGlmIChmb3JjZVVwZGF0ZSA9PT0gdm9pZCAwKSB7IGZvcmNlVXBkYXRlID0gZmFsc2U7IH1cbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0VG9SYW5rRW5hYmxlZCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVSYW5raW5nQ2hvaWNlc1NlbGVjdFRvUmFua01vZGUoZm9yY2VVcGRhdGUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciBuZXdSYW5raW5nQ2hvaWNlcyA9IFtdO1xuICAgICAgICAvLyByYW5raW5nIHF1ZXN0aW9uIHdpdGggb25seSBvbmUgY2hvaWNlIGRvZXNuJ3QgbWFrZSBzZW5zZVxuICAgICAgICAvLyBpZiAodGhpcy52aXNpYmxlQ2hvaWNlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgLy8gICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJyYW5raW5nQ2hvaWNlc1wiLCBuZXdSYW5raW5nQ2hvaWNlcyk7XG4gICAgICAgIC8vICAgcmV0dXJuO1xuICAgICAgICAvLyB9XG4gICAgICAgIGlmIChmb3JjZVVwZGF0ZSlcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInJhbmtpbmdDaG9pY2VzXCIsIFtdKTtcbiAgICAgICAgaWYgKHRoaXMuaXNFbXB0eSgpKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJyYW5raW5nQ2hvaWNlc1wiLCB0aGlzLnZpc2libGVDaG9pY2VzKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZhbHVlLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlSXRlbSkge1xuICAgICAgICAgICAgX3RoaXMudmlzaWJsZUNob2ljZXMuZm9yRWFjaChmdW5jdGlvbiAoY2hvaWNlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNob2ljZS52YWx1ZSA9PT0gdmFsdWVJdGVtKVxuICAgICAgICAgICAgICAgICAgICBuZXdSYW5raW5nQ2hvaWNlcy5wdXNoKGNob2ljZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInJhbmtpbmdDaG9pY2VzXCIsIG5ld1JhbmtpbmdDaG9pY2VzKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uUmFua2luZ01vZGVsLnByb3RvdHlwZS51cGRhdGVSYW5raW5nQ2hvaWNlc1NlbGVjdFRvUmFua01vZGUgPSBmdW5jdGlvbiAoZm9yY2VVcGRhdGUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgaWYgKHRoaXMuaXNFbXB0eSgpKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJyYW5raW5nQ2hvaWNlc1wiLCBbXSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG5ld1JhbmtpbmdDaG9pY2VzID0gW107XG4gICAgICAgIHRoaXMudmFsdWUuZm9yRWFjaChmdW5jdGlvbiAodmFsdWVJdGVtKSB7XG4gICAgICAgICAgICBfdGhpcy52aXNpYmxlQ2hvaWNlcy5mb3JFYWNoKGZ1bmN0aW9uIChjaG9pY2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2hvaWNlLnZhbHVlID09PSB2YWx1ZUl0ZW0pXG4gICAgICAgICAgICAgICAgICAgIG5ld1JhbmtpbmdDaG9pY2VzLnB1c2goY2hvaWNlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicmFua2luZ0Nob2ljZXNcIiwgbmV3UmFua2luZ0Nob2ljZXMpO1xuICAgIH07XG4gICAgUXVlc3Rpb25SYW5raW5nTW9kZWwucHJvdG90eXBlLmVuZExvYWRpbmdGcm9tSnNvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5lbmRMb2FkaW5nRnJvbUpzb24uY2FsbCh0aGlzKTtcbiAgICAgICAgdGhpcy5zZXREcmFnRHJvcFJhbmtpbmdDaG9pY2VzKCk7XG4gICAgfTtcbiAgICBRdWVzdGlvblJhbmtpbmdNb2RlbC5wcm90b3R5cGUuc2V0RHJhZ0Ryb3BSYW5raW5nQ2hvaWNlcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5kcmFnRHJvcFJhbmtpbmdDaG9pY2VzID0gdGhpcy5jcmVhdGVEcmFnRHJvcFJhbmtpbmdDaG9pY2VzKCk7XG4gICAgfTtcbiAgICBRdWVzdGlvblJhbmtpbmdNb2RlbC5wcm90b3R5cGUuY3JlYXRlRHJhZ0Ryb3BSYW5raW5nQ2hvaWNlcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0VG9SYW5rRW5hYmxlZClcbiAgICAgICAgICAgIHJldHVybiBuZXcgX2RyYWdkcm9wX3Jhbmtpbmdfc2VsZWN0X3RvX3JhbmtfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIkRyYWdEcm9wUmFua2luZ1NlbGVjdFRvUmFua1wiXSh0aGlzLnN1cnZleSwgbnVsbCwgdGhpcy5sb25nVGFwKTtcbiAgICAgICAgcmV0dXJuIG5ldyBfZHJhZ2Ryb3BfcmFua2luZ19jaG9pY2VzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJEcmFnRHJvcFJhbmtpbmdDaG9pY2VzXCJdKHRoaXMuc3VydmV5LCBudWxsLCB0aGlzLmxvbmdUYXApO1xuICAgIH07XG4gICAgUXVlc3Rpb25SYW5raW5nTW9kZWwucHJvdG90eXBlLmlzRHJhZ1N0YXJ0Tm9kZVZhbGlkID0gZnVuY3Rpb24gKHRhcmdldCkge1xuICAgICAgICBpZiAoX3NyY19zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fW1wic2V0dGluZ3NcIl0ucmFua2luZ0RyYWdIYW5kbGVBcmVhID09PSBcImljb25cIikge1xuICAgICAgICAgICAgcmV0dXJuIHRhcmdldC5jbGFzc0xpc3QuY29udGFpbnModGhpcy5jc3NDbGFzc2VzLml0ZW1JY29uSG92ZXJNb2QpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uUmFua2luZ01vZGVsLnByb3RvdHlwZSwgXCJhbGxvd1N0YXJ0RHJhZ1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuICF0aGlzLmlzUmVhZE9ubHkgJiYgIXRoaXMuaXNEZXNpZ25Nb2RlO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUXVlc3Rpb25SYW5raW5nTW9kZWwucHJvdG90eXBlLmNhblN0YXJ0RHJhZ0R1ZU1heFNlbGVjdGVkQ2hvaWNlcyA9IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdFRvUmFua0VuYWJsZWQpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgdmFyIGZyb21Db250YWluZXIgPSB0YXJnZXQuY2xvc2VzdChcIltkYXRhLXJhbmtpbmc9J2Zyb20tY29udGFpbmVyJ11cIik7XG4gICAgICAgIGlmIChmcm9tQ29udGFpbmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jaGVja01heFNlbGVjdGVkQ2hvaWNlc1VucmVhY2hlZCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG4gICAgUXVlc3Rpb25SYW5raW5nTW9kZWwucHJvdG90eXBlLmNhblN0YXJ0RHJhZ0R1ZUl0ZW1FbmFibGVkID0gZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0uZW5hYmxlZDtcbiAgICB9O1xuICAgIFF1ZXN0aW9uUmFua2luZ01vZGVsLnByb3RvdHlwZS5jaGVja01heFNlbGVjdGVkQ2hvaWNlc1VucmVhY2hlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMubWF4U2VsZWN0ZWRDaG9pY2VzIDwgMSlcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB2YXIgdmFsID0gdGhpcy52YWx1ZTtcbiAgICAgICAgdmFyIGxlbiA9ICFBcnJheS5pc0FycmF5KHZhbCkgPyAwIDogdmFsLmxlbmd0aDtcbiAgICAgICAgcmV0dXJuIGxlbiA8IHRoaXMubWF4U2VsZWN0ZWRDaG9pY2VzO1xuICAgIH07XG4gICAgLy9jcm9zcyBmcmFtZXdvcmsgaW5pdGlhbGl6YXRpb25cbiAgICBRdWVzdGlvblJhbmtpbmdNb2RlbC5wcm90b3R5cGUuYWZ0ZXJSZW5kZXJRdWVzdGlvbkVsZW1lbnQgPSBmdW5jdGlvbiAoZWwpIHtcbiAgICAgICAgdGhpcy5kb21Ob2RlID0gZWw7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUuYWZ0ZXJSZW5kZXJRdWVzdGlvbkVsZW1lbnQuY2FsbCh0aGlzLCBlbCk7XG4gICAgfTtcbiAgICAvL2Nyb3NzIGZyYW1ld29yayBkZXN0cm95XG4gICAgUXVlc3Rpb25SYW5raW5nTW9kZWwucHJvdG90eXBlLmJlZm9yZURlc3Ryb3lRdWVzdGlvbkVsZW1lbnQgPSBmdW5jdGlvbiAoZWwpIHtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5iZWZvcmVEZXN0cm95UXVlc3Rpb25FbGVtZW50LmNhbGwodGhpcywgZWwpO1xuICAgIH07XG4gICAgUXVlc3Rpb25SYW5raW5nTW9kZWwucHJvdG90eXBlLnN1cHBvcnRTZWxlY3RBbGwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uUmFua2luZ01vZGVsLnByb3RvdHlwZS5zdXBwb3J0T3RoZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uUmFua2luZ01vZGVsLnByb3RvdHlwZS5zdXBwb3J0Tm9uZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gICAgUXVlc3Rpb25SYW5raW5nTW9kZWwucHJvdG90eXBlLmhhbmRsZUtleWRvd25TZWxlY3RUb1JhbmsgPSBmdW5jdGlvbiAoZXZlbnQsIG1vdmVkRWxlbWVudCkge1xuICAgICAgICBpZiAodGhpcy5pc0Rlc2lnbk1vZGUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciBkbmQgPSB0aGlzLmRyYWdEcm9wUmFua2luZ0Nob2ljZXM7IC8vPz8/P1xuICAgICAgICB2YXIga2V5ID0gZXZlbnQua2V5O1xuICAgICAgICB2YXIgcmFua2luZ0Nob2ljZXMgPSB0aGlzLnJhbmtpbmdDaG9pY2VzO1xuICAgICAgICB2YXIgdW5SYW5raW5nQ2hvaWNlcyA9IHRoaXMudW5SYW5raW5nQ2hvaWNlcztcbiAgICAgICAgdmFyIGlzTW92ZWRFbGVtZW50UmFua2VkID0gcmFua2luZ0Nob2ljZXMuaW5kZXhPZihtb3ZlZEVsZW1lbnQpICE9PSAtMTtcbiAgICAgICAgdmFyIGlzTW92ZWRFbGVtZW50VW5SYW5rZWQgPSAhaXNNb3ZlZEVsZW1lbnRSYW5rZWQ7XG4gICAgICAgIHZhciBmcm9tSW5kZXg7XG4gICAgICAgIHZhciB0b0luZGV4O1xuICAgICAgICBpZiAoKGtleSA9PT0gXCIgXCIgfHwga2V5ID09PSBcIkVudGVyXCIpICYmIGlzTW92ZWRFbGVtZW50VW5SYW5rZWQpIHtcbiAgICAgICAgICAgIGZyb21JbmRleCA9IHVuUmFua2luZ0Nob2ljZXMuaW5kZXhPZihtb3ZlZEVsZW1lbnQpO1xuICAgICAgICAgICAgdG9JbmRleCA9IDA7XG4gICAgICAgICAgICBkbmQuc2VsZWN0VG9SYW5rKHRoaXMsIGZyb21JbmRleCwgdG9JbmRleCk7XG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlQWZ0ZXJLZXlkb3duKHRvSW5kZXgsIFwidG8tY29udGFpbmVyXCIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICgoa2V5ID09PSBcIiBcIiB8fCBrZXkgPT09IFwiRW50ZXJcIikgJiYgaXNNb3ZlZEVsZW1lbnRSYW5rZWQpIHtcbiAgICAgICAgICAgIGZyb21JbmRleCA9IHJhbmtpbmdDaG9pY2VzLmluZGV4T2YobW92ZWRFbGVtZW50KTtcbiAgICAgICAgICAgIGRuZC51bnNlbGVjdEZyb21SYW5rKHRoaXMsIGZyb21JbmRleCk7XG4gICAgICAgICAgICB0b0luZGV4ID0gdGhpcy51blJhbmtpbmdDaG9pY2VzLmluZGV4T2YobW92ZWRFbGVtZW50KTsgLy8ndGhpcy4nIGxlYWRzIHRvIGFjdHVhbCBhcnJheSBhZnRlciB0aGUgJ3Vuc2VsZWN0RnJvbVJhbmsnIG1ldGhvZFxuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZUFmdGVyS2V5ZG93bih0b0luZGV4LCBcImZyb20tY29udGFpbmVyXCIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChrZXkgPT09IFwiQXJyb3dVcFwiICYmIGlzTW92ZWRFbGVtZW50UmFua2VkKSB7XG4gICAgICAgICAgICBmcm9tSW5kZXggPSByYW5raW5nQ2hvaWNlcy5pbmRleE9mKG1vdmVkRWxlbWVudCk7XG4gICAgICAgICAgICB0b0luZGV4ID0gZnJvbUluZGV4IC0gMTtcbiAgICAgICAgICAgIGlmIChmcm9tSW5kZXggPCAwKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGRuZC5yZW9yZGVyUmFua2VkSXRlbSh0aGlzLCBmcm9tSW5kZXgsIHRvSW5kZXgpO1xuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZUFmdGVyS2V5ZG93bih0b0luZGV4LCBcInRvLWNvbnRhaW5lclwiKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoa2V5ID09PSBcIkFycm93RG93blwiICYmIGlzTW92ZWRFbGVtZW50UmFua2VkKSB7XG4gICAgICAgICAgICBmcm9tSW5kZXggPSByYW5raW5nQ2hvaWNlcy5pbmRleE9mKG1vdmVkRWxlbWVudCk7XG4gICAgICAgICAgICB0b0luZGV4ID0gZnJvbUluZGV4ICsgMTtcbiAgICAgICAgICAgIGlmICh0b0luZGV4ID49IHJhbmtpbmdDaG9pY2VzLmxlbmd0aClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBkbmQucmVvcmRlclJhbmtlZEl0ZW0odGhpcywgZnJvbUluZGV4LCB0b0luZGV4KTtcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWVBZnRlcktleWRvd24odG9JbmRleCwgXCJ0by1jb250YWluZXJcIik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFF1ZXN0aW9uUmFua2luZ01vZGVsLnByb3RvdHlwZS5zZXRWYWx1ZUFmdGVyS2V5ZG93biA9IGZ1bmN0aW9uIChpbmRleCwgY29udGFpbmVyKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHRoaXMuc2V0VmFsdWUoKTtcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5mb2N1c0l0ZW0oaW5kZXgsIGNvbnRhaW5lcik7XG4gICAgICAgIH0sIDEpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH07XG4gICAgUXVlc3Rpb25SYW5raW5nTW9kZWwucHJvdG90eXBlLmdldEljb25Ib3ZlckNzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBfdXRpbHNfY3NzQ2xhc3NCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bXCJDc3NDbGFzc0J1aWxkZXJcIl0oKVxuICAgICAgICAgICAgLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMuaXRlbUljb24pXG4gICAgICAgICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5pdGVtSWNvbkhvdmVyTW9kKVxuICAgICAgICAgICAgLnRvU3RyaW5nKCk7XG4gICAgfTtcbiAgICBRdWVzdGlvblJhbmtpbmdNb2RlbC5wcm90b3R5cGUuZ2V0SWNvbkZvY3VzQ3NzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gbmV3IF91dGlsc19jc3NDbGFzc0J1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1tcIkNzc0NsYXNzQnVpbGRlclwiXSgpXG4gICAgICAgICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5pdGVtSWNvbilcbiAgICAgICAgICAgIC5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLml0ZW1JY29uRm9jdXNNb2QpXG4gICAgICAgICAgICAudG9TdHJpbmcoKTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblJhbmtpbmdNb2RlbC5wcm90b3R5cGUsIFwibG9uZ1RhcFwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgd2hldGhlciB0byB1c2UgYSBsb25nIHRhcCAocHJlc3MgYW5kIGhvbGQpIGdlc3R1cmUgdG8gc3RhcnQgZHJhZ2dpbmcuXG4gICAgICAgICAqXG4gICAgICAgICAqIERlZmF1bHQgdmFsdWU6IGB0cnVlYFxuICAgICAgICAgKlxuICAgICAgICAgKiBEaXNhYmxlIHRoaXMgcHJvcGVydHkgaWYgeW91IHdhbnQgdG8gc3RhcnQgZHJhZ2dpbmcgd2hlbiB1c2VycyBwZXJmb3JtIGEgc2Nyb2xsIGdlc3R1cmUuXG4gICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImxvbmdUYXBcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibG9uZ1RhcFwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uUmFua2luZ01vZGVsLnByb3RvdHlwZSwgXCJzZWxlY3RUb1JhbmtFbmFibGVkXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB3aGV0aGVyIHVzZXJzIGNhbiBzZWxlY3QgY2hvaWNlcyB0aGV5IHdhbnQgdG8gcmFuay5cbiAgICAgICAgICpcbiAgICAgICAgICogV2hlbiB5b3UgZW5hYmxlIHRoaXMgcHJvcGVydHksIHRoZSBSYW5raW5nIHF1ZXN0aW9uIGRpc3BsYXlzIHR3byBhcmVhcyBmb3IgcmFua2VkIGFuZCB1bnJhbmtlZCBjaG9pY2VzLiBUbyBvcmRlciBjaG9pY2VzLCB1c2VycyBzaG91bGQgZmlyc3QgZHJhZyB0aGVtIGZyb20gdGhlIHVucmFua2VkIHRvIHRoZSByYW5rZWQgYXJlYS4gVXNlIHRoaXMgbW9kZSBpZiB5b3Ugd2FudCB0byBsZXQgdXNlcnMgb3JkZXIgb25seSB0aGUgY2hvaWNlcyB0aGV5IHNlbGVjdC5cbiAgICAgICAgICpcbiAgICAgICAgICogRGVmYXVsdCB2YWx1ZTogYGZhbHNlYFxuICAgICAgICAgKiBAc2VlIHNlbGVjdFRvUmFua0FyZWFzTGF5b3V0XG4gICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInNlbGVjdFRvUmFua0VuYWJsZWRcIiwgZmFsc2UpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInNlbGVjdFRvUmFua0VuYWJsZWRcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblJhbmtpbmdNb2RlbC5wcm90b3R5cGUsIFwic2VsZWN0VG9SYW5rQXJlYXNMYXlvdXRcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHRoZSBsYXlvdXQgb2YgdGhlIHJhbmtlZCBhbmQgdW5yYW5rZWQgYXJlYXMuIEFwcGxpZXMgd2hlbiBbYHNlbGVjdFRvUmFua0VuYWJsZWRgXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2UvcmFua2luZy1xdWVzdGlvbi1tb2RlbCNzZWxlY3RUb1JhbmtFbmFibGVkKSBpcyBgdHJ1ZWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIFBvc3NpYmxlIHZhbHVlczpcbiAgICAgICAgICpcbiAgICAgICAgICogLSBgXCJob3Jpem9udGFsXCJgIChkZWZhdWx0KSAtIFRoZSByYW5rZWQgYW5kIHVucmFua2VkIGFyZWFzIGFyZSBwb3NpdGlvbmVkIG5leHQgdG8gZWFjaCBvdGhlci4gVXNlcnMgZHJhZyBhbmQgZHJvcCBjaG9pY2VzIGJldHdlZW4gdGhlbSBpbiB0aGUgaG9yaXpvbnRhbCBkaXJlY3Rpb24uXG4gICAgICAgICAqIC0gYFwidmVydGljYWxcImAtIFRoZSByYW5rZWQgYXJlYSBpcyBwb3NpdGlvbmVkIGFib3ZlIHRoZSB1bnJhbmtlZCBhcmVhLiBVc2VycyBkcmFnIGFuZCBkcm9wIGNob2ljZXMgYmV0d2VlbiB0aGVtIGluIHRoZSB2ZXJ0aWNhbCBkaXJlY3Rpb24uXG4gICAgICAgICAqIEBzZWUgc2VsZWN0VG9SYW5rQXJlYXNMYXlvdXRcbiAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoX3V0aWxzX2RldmljZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1tcIklzTW9iaWxlXCJdKVxuICAgICAgICAgICAgICAgIHJldHVybiBcInZlcnRpY2FsXCI7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic2VsZWN0VG9SYW5rQXJlYXNMYXlvdXRcIiwgXCJob3Jpem9udGFsXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInNlbGVjdFRvUmFua0FyZWFzTGF5b3V0XCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25SYW5raW5nTW9kZWwucHJvdG90eXBlLCBcInVzZUZ1bGxJdGVtU2l6ZUZvclNob3J0Y3V0XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwidXNlRnVsbEl0ZW1TaXplRm9yU2hvcnRjdXRcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidXNlRnVsbEl0ZW1TaXplRm9yU2hvcnRjdXRcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblJhbmtpbmdNb2RlbC5wcm90b3R5cGUsIFwiaXNOZXdBMTF5U3RydWN0dXJlXCIsIHtcbiAgICAgICAgLy9hMTF5XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wicHJvcGVydHlcIl0pKHsgZGVmYXVsdFZhbHVlOiBudWxsIH0pXG4gICAgXSwgUXVlc3Rpb25SYW5raW5nTW9kZWwucHJvdG90eXBlLCBcImN1cnJlbnREcm9wVGFyZ2V0XCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wicHJvcGVydHlcIl0pKHsgZGVmYXVsdFZhbHVlOiBudWxsIH0pXG4gICAgXSwgUXVlc3Rpb25SYW5raW5nTW9kZWwucHJvdG90eXBlLCBcImRyb3BUYXJnZXROb2RlTW92ZVwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QoX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcInByb3BlcnR5XCJdKSh7IGxvY2FsaXphYmxlOiB7IGRlZmF1bHRTdHI6IFwic2VsZWN0VG9SYW5rRW1wdHlSYW5rZWRBcmVhVGV4dFwiIH0gfSlcbiAgICBdLCBRdWVzdGlvblJhbmtpbmdNb2RlbC5wcm90b3R5cGUsIFwic2VsZWN0VG9SYW5rRW1wdHlSYW5rZWRBcmVhVGV4dFwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QoX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcInByb3BlcnR5XCJdKSh7IGxvY2FsaXphYmxlOiB7IGRlZmF1bHRTdHI6IFwic2VsZWN0VG9SYW5rRW1wdHlVbnJhbmtlZEFyZWFUZXh0XCIgfSB9KVxuICAgIF0sIFF1ZXN0aW9uUmFua2luZ01vZGVsLnByb3RvdHlwZSwgXCJzZWxlY3RUb1JhbmtFbXB0eVVucmFua2VkQXJlYVRleHRcIiwgdm9pZCAwKTtcbiAgICByZXR1cm4gUXVlc3Rpb25SYW5raW5nTW9kZWw7XG59KF9xdWVzdGlvbl9jaGVja2JveF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fW1wiUXVlc3Rpb25DaGVja2JveE1vZGVsXCJdKSk7XG5cbl9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJTZXJpYWxpemVyXCJdLmFkZENsYXNzKFwicmFua2luZ1wiLCBbXG4gICAgeyBuYW1lOiBcInNob3dPdGhlckl0ZW1cIiwgdmlzaWJsZTogZmFsc2UsIGlzU2VyaWFsaXphYmxlOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogXCJvdGhlclRleHRcIiwgdmlzaWJsZTogZmFsc2UsIGlzU2VyaWFsaXphYmxlOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogXCJvdGhlckVycm9yVGV4dFwiLCB2aXNpYmxlOiBmYWxzZSwgaXNTZXJpYWxpemFibGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcInN0b3JlT3RoZXJzQXNDb21tZW50XCIsIHZpc2libGU6IGZhbHNlLCBpc1NlcmlhbGl6YWJsZTogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwic2hvd05vbmVJdGVtXCIsIHZpc2libGU6IGZhbHNlLCBpc1NlcmlhbGl6YWJsZTogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwibm9uZVRleHRcIiwgdmlzaWJsZTogZmFsc2UsIGlzU2VyaWFsaXphYmxlOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogXCJzaG93U2VsZWN0QWxsSXRlbVwiLCB2aXNpYmxlOiBmYWxzZSwgaXNTZXJpYWxpemFibGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcInNlbGVjdEFsbFRleHRcIiwgdmlzaWJsZTogZmFsc2UsIGlzU2VyaWFsaXphYmxlOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogXCJjb2xDb3VudDpudW1iZXJcIiwgdmlzaWJsZTogZmFsc2UsIGlzU2VyaWFsaXphYmxlOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogXCJzZXBhcmF0ZVNwZWNpYWxDaG9pY2VzXCIsIHZpc2libGU6IGZhbHNlLCBpc1NlcmlhbGl6YWJsZTogZmFsc2UgfSxcbiAgICB7XG4gICAgICAgIG5hbWU6IFwibG9uZ1RhcFwiLFxuICAgICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICAgICAgaXNTZXJpYWxpemFibGU6IGZhbHNlLFxuICAgIH0sXG4gICAge1xuICAgICAgICBuYW1lOiBcInNlbGVjdFRvUmFua0VuYWJsZWQ6c3dpdGNoXCIsXG4gICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgICB2aXNpYmxlOiB0cnVlLFxuICAgICAgICBpc1NlcmlhbGl6YWJsZTogdHJ1ZSxcbiAgICB9LFxuICAgIHtcbiAgICAgICAgbmFtZTogXCJzZWxlY3RUb1JhbmtBcmVhc0xheW91dFwiLFxuICAgICAgICBkZWZhdWx0OiBcImhvcml6b250YWxcIixcbiAgICAgICAgY2hvaWNlczogW1wiaG9yaXpvbnRhbFwiLCBcInZlcnRpY2FsXCJdLFxuICAgICAgICBkZXBlbmRzT246IFwic2VsZWN0VG9SYW5rRW5hYmxlZFwiLFxuICAgICAgICB2aXNpYmxlSWY6IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgIHJldHVybiAhIW9iai5zZWxlY3RUb1JhbmtFbmFibGVkO1xuICAgICAgICB9LFxuICAgICAgICB2aXNpYmxlOiB0cnVlLFxuICAgICAgICBpc1NlcmlhbGl6YWJsZTogdHJ1ZSxcbiAgICB9LFxuICAgIHtcbiAgICAgICAgbmFtZTogXCJtYXhTZWxlY3RlZENob2ljZXM6bnVtYmVyXCIsXG4gICAgICAgIHZpc2libGU6IHRydWUsXG4gICAgICAgIGRlZmF1bHQ6IDAsXG4gICAgICAgIGRlcGVuZHNPbjogXCJzZWxlY3RUb1JhbmtFbmFibGVkXCIsXG4gICAgICAgIHZpc2libGVJZjogZnVuY3Rpb24gKG9iaikge1xuICAgICAgICAgICAgcmV0dXJuICEhb2JqLnNlbGVjdFRvUmFua0VuYWJsZWQ7XG4gICAgICAgIH0sXG4gICAgICAgIGlzU2VyaWFsaXphYmxlOiB0cnVlXG4gICAgfSxcbiAgICB7IG5hbWU6IFwibWluU2VsZWN0ZWRDaG9pY2VzOm51bWJlclwiLFxuICAgICAgICB2aXNpYmxlOiB0cnVlLFxuICAgICAgICBkZWZhdWx0OiAwLFxuICAgICAgICBkZXBlbmRzT246IFwic2VsZWN0VG9SYW5rRW5hYmxlZFwiLCB2aXNpYmxlSWY6IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgIHJldHVybiAhIW9iai5zZWxlY3RUb1JhbmtFbmFibGVkO1xuICAgICAgICB9LCBpc1NlcmlhbGl6YWJsZTogdHJ1ZSB9LFxuICAgIHsgbmFtZTogXCJpdGVtQ29tcG9uZW50XCIsIHZpc2libGU6IGZhbHNlLCBkZWZhdWx0OiBcIlwiIH1cbl0sIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uUmFua2luZ01vZGVsKFwiXCIpO1xufSwgXCJjaGVja2JveFwiKTtcbl9xdWVzdGlvbmZhY3RvcnlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1tcIlF1ZXN0aW9uRmFjdG9yeVwiXS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwicmFua2luZ1wiLCBmdW5jdGlvbiAobmFtZSkge1xuICAgIHZhciBxID0gbmV3IFF1ZXN0aW9uUmFua2luZ01vZGVsKG5hbWUpO1xuICAgIHEuY2hvaWNlcyA9IF9xdWVzdGlvbmZhY3RvcnlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1tcIlF1ZXN0aW9uRmFjdG9yeVwiXS5EZWZhdWx0Q2hvaWNlcztcbiAgICByZXR1cm4gcTtcbn0pO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3F1ZXN0aW9uX3JhdGluZy50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvcXVlc3Rpb25fcmF0aW5nLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBSZW5kZXJlZFJhdGluZ0l0ZW0sIFF1ZXN0aW9uUmF0aW5nTW9kZWwgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUmVuZGVyZWRSYXRpbmdJdGVtXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUmVuZGVyZWRSYXRpbmdJdGVtOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJRdWVzdGlvblJhdGluZ01vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUXVlc3Rpb25SYXRpbmdNb2RlbDsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2l0ZW12YWx1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9pdGVtdmFsdWUgKi8gXCIuL3NyYy9pdGVtdmFsdWUudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3F1ZXN0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3F1ZXN0aW9uICovIFwiLi9zcmMvcXVlc3Rpb24udHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vanNvbm9iamVjdCAqLyBcIi4vc3JjL2pzb25vYmplY3QudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3F1ZXN0aW9uZmFjdG9yeV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9xdWVzdGlvbmZhY3RvcnkgKi8gXCIuL3NyYy9xdWVzdGlvbmZhY3RvcnkudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NldHRpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3NldHRpbmdzICovIFwiLi9zcmMvc2V0dGluZ3MudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3N1cnZleVN0cmluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vc3VydmV5U3RyaW5ncyAqLyBcIi4vc3JjL3N1cnZleVN0cmluZ3MudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3V0aWxzX2Nzc0NsYXNzQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi91dGlscy9jc3NDbGFzc0J1aWxkZXIgKi8gXCIuL3NyYy91dGlscy9jc3NDbGFzc0J1aWxkZXIudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Jhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYmFzZSAqLyBcIi4vc3JjL2Jhc2UudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3V0aWxzX3V0aWxzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3V0aWxzL3V0aWxzICovIFwiLi9zcmMvdXRpbHMvdXRpbHMudHNcIik7XG52YXIgX19leHRlbmRzID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbnZhciBfX2RlY29yYXRlID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn07XG5cblxuXG5cblxuXG5cblxuXG52YXIgUmVuZGVyZWRSYXRpbmdJdGVtID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhSZW5kZXJlZFJhdGluZ0l0ZW0sIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gUmVuZGVyZWRSYXRpbmdJdGVtKGl0ZW1WYWx1ZSwgbG9jU3RyaW5nKSB7XG4gICAgICAgIGlmIChsb2NTdHJpbmcgPT09IHZvaWQgMCkgeyBsb2NTdHJpbmcgPSBudWxsOyB9XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLml0ZW1WYWx1ZSA9IGl0ZW1WYWx1ZTtcbiAgICAgICAgX3RoaXMubG9jU3RyaW5nID0gbG9jU3RyaW5nO1xuICAgICAgICBfdGhpcy5sb2NUZXh0Lm9uU3RyaW5nQ2hhbmdlZC5hZGQoX3RoaXMub25TdHJpbmdDaGFuZ2VkQ2FsbGJhY2suYmluZChfdGhpcykpO1xuICAgICAgICBfdGhpcy5vblN0cmluZ0NoYW5nZWRDYWxsYmFjaygpO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFJlbmRlcmVkUmF0aW5nSXRlbS5wcm90b3R5cGUub25TdHJpbmdDaGFuZ2VkQ2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMudGV4dCA9IHRoaXMuaXRlbVZhbHVlLnRleHQ7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUmVuZGVyZWRSYXRpbmdJdGVtLnByb3RvdHlwZSwgXCJ2YWx1ZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXRlbVZhbHVlLmdldFByb3BlcnR5VmFsdWUoXCJ2YWx1ZVwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZW5kZXJlZFJhdGluZ0l0ZW0ucHJvdG90eXBlLCBcImxvY1RleHRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY1N0cmluZyB8fCB0aGlzLml0ZW1WYWx1ZS5sb2NUZXh0O1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wicHJvcGVydHlcIl0pKHsgZGVmYXVsdFZhbHVlOiBcIlwiIH0pXG4gICAgXSwgUmVuZGVyZWRSYXRpbmdJdGVtLnByb3RvdHlwZSwgXCJoaWdobGlnaHRcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJwcm9wZXJ0eVwiXSkoeyBkZWZhdWx0VmFsdWU6IFwiXCIgfSlcbiAgICBdLCBSZW5kZXJlZFJhdGluZ0l0ZW0ucHJvdG90eXBlLCBcInRleHRcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJwcm9wZXJ0eVwiXSkoKVxuICAgIF0sIFJlbmRlcmVkUmF0aW5nSXRlbS5wcm90b3R5cGUsIFwic3R5bGVcIiwgdm9pZCAwKTtcbiAgICByZXR1cm4gUmVuZGVyZWRSYXRpbmdJdGVtO1xufShfYmFzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fW1wiQmFzZVwiXSkpO1xuXG4vKipcbiAqIEEgY2xhc3MgdGhhdCBkZXNjcmliZXMgdGhlIFJhdGluZyBTY2FsZSBxdWVzdGlvbiB0eXBlLlxuICpcbiAqIFtWaWV3IERlbW9dKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2V4YW1wbGVzL3JhdGluZy1zY2FsZS8gKGxpbmtTdHlsZSkpXG4gKi9cbnZhciBRdWVzdGlvblJhdGluZ01vZGVsID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhRdWVzdGlvblJhdGluZ01vZGVsLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFF1ZXN0aW9uUmF0aW5nTW9kZWwobmFtZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBuYW1lKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5fc3luY1Byb3BlcnRpZXNDaGFuZ2luZyA9IGZhbHNlO1xuICAgICAgICBfdGhpcy5jcmVhdGVJdGVtVmFsdWVzKFwicmF0ZVZhbHVlc1wiKTtcbiAgICAgICAgX3RoaXMuY3JlYXRlUmVuZGVyZWRSYXRlSXRlbXMoKTtcbiAgICAgICAgX3RoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJyYXRpbmdPcHRpb25zQ2FwdGlvblwiLCBfdGhpcywgZmFsc2UsIHRydWUpO1xuICAgICAgICBfdGhpcy5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0aWVzVmFsdWVDaGFuZ2VkKFtcInJhdGVNaW5cIiwgXCJyYXRlTWF4XCIsXG4gICAgICAgICAgICBcIm1pblJhdGVEZXNjcmlwdGlvblwiLCBcIm1heFJhdGVEZXNjcmlwdGlvblwiLCBcInJhdGVTdGVwXCIsIFwiZGlzcGxheVJhdGVEZXNjcmlwdGlvbnNBc0V4dHJlbWVJdGVtc1wiXSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gX3RoaXMuY3JlYXRlUmVuZGVyZWRSYXRlSXRlbXMoKTsgfSk7XG4gICAgICAgIF90aGlzLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnRpZXNWYWx1ZUNoYW5nZWQoW1wicmF0ZVR5cGVcIl0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLnNldEljb25zVG9SYXRlVmFsdWVzKCk7XG4gICAgICAgICAgICBfdGhpcy5jcmVhdGVSZW5kZXJlZFJhdGVJdGVtcygpO1xuICAgICAgICAgICAgX3RoaXMudXBkYXRlUmF0ZUNvdW50KCk7XG4gICAgICAgIH0pO1xuICAgICAgICBfdGhpcy5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0aWVzVmFsdWVDaGFuZ2VkKFtcInJhdGVWYWx1ZXNcIl0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLmF1dG9HZW5lcmF0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgX3RoaXMuc2V0SWNvbnNUb1JhdGVWYWx1ZXMoKTtcbiAgICAgICAgICAgIF90aGlzLmNyZWF0ZVJlbmRlcmVkUmF0ZUl0ZW1zKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBfdGhpcy5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0aWVzVmFsdWVDaGFuZ2VkKFtcInJhdGVDb2xvck1vZGVcIiwgXCJzY2FsZUNvbG9yTW9kZVwiXSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMudXBkYXRlQ29sb3JzKF90aGlzLnN1cnZleS50aGVtZVZhcmlhYmxlcyk7XG4gICAgICAgIH0pO1xuICAgICAgICBfdGhpcy5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0aWVzVmFsdWVDaGFuZ2VkKFtcImF1dG9HZW5lcmF0ZVwiXSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFfdGhpcy5hdXRvR2VuZXJhdGUgJiYgX3RoaXMucmF0ZVZhbHVlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicmF0ZVZhbHVlc1wiLCBfdGhpcy52aXNpYmxlUmF0ZVZhbHVlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoX3RoaXMuYXV0b0dlbmVyYXRlKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMucmF0ZVZhbHVlcy5sZW5ndGggPSAwO1xuICAgICAgICAgICAgICAgIF90aGlzLnVwZGF0ZVJhdGVNYXgoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF90aGlzLmNyZWF0ZVJlbmRlcmVkUmF0ZUl0ZW1zKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBfdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcIm1pblJhdGVEZXNjcmlwdGlvblwiLCBfdGhpcywgdHJ1ZSk7XG4gICAgICAgIF90aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwibWF4UmF0ZURlc2NyaXB0aW9uXCIsIF90aGlzLCB0cnVlKTtcbiAgICAgICAgX3RoaXMuaW5pdFByb3BlcnR5RGVwZW5kZW5jaWVzKCk7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgUXVlc3Rpb25SYXRpbmdNb2RlbC5wcm90b3R5cGUuc2V0SWNvbnNUb1JhdGVWYWx1ZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGlmICh0aGlzLnJhdGVUeXBlID09IFwic21pbGV5c1wiKSB7XG4gICAgICAgICAgICB0aGlzLnJhdGVWYWx1ZXMubWFwKGZ1bmN0aW9uIChpdGVtKSB7IHJldHVybiBpdGVtLmljb24gPSBfdGhpcy5nZXRJdGVtU21pbGV5KGl0ZW0pOyB9KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgUXVlc3Rpb25SYXRpbmdNb2RlbC5wcm90b3R5cGUuZW5kTG9hZGluZ0Zyb21Kc29uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBfc3VwZXIucHJvdG90eXBlLmVuZExvYWRpbmdGcm9tSnNvbi5jYWxsKHRoaXMpO1xuICAgICAgICB0aGlzLmhhc01pblJhdGVEZXNjcmlwdGlvbiA9ICEhdGhpcy5taW5SYXRlRGVzY3JpcHRpb247XG4gICAgICAgIHRoaXMuaGFzTWF4UmF0ZURlc2NyaXB0aW9uID0gISF0aGlzLm1heFJhdGVEZXNjcmlwdGlvbjtcbiAgICAgICAgaWYgKHRoaXMuanNvbk9iai5yYXRlTWluICE9PSB1bmRlZmluZWQgJiYgdGhpcy5qc29uT2JqLnJhdGVDb3VudCAhPT0gdW5kZWZpbmVkICYmIHRoaXMuanNvbk9iai5yYXRlTWF4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUmF0ZU1heCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmpzb25PYmoucmF0ZU1heCAhPT0gdW5kZWZpbmVkICYmIHRoaXMuanNvbk9iai5yYXRlQ291bnQgIT09IHVuZGVmaW5lZCAmJiB0aGlzLmpzb25PYmoucmF0ZU1pbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVJhdGVNaW4oKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5qc29uT2JqLmF1dG9HZW5lcmF0ZSA9PT0gdW5kZWZpbmVkICYmIHRoaXMuanNvbk9iai5yYXRlVmFsdWVzICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICB0aGlzLmF1dG9HZW5lcmF0ZSA9ICF0aGlzLmpzb25PYmoucmF0ZVZhbHVlcy5sZW5ndGg7XG4gICAgICAgIHRoaXMudXBkYXRlUmF0ZUNvdW50KCk7XG4gICAgICAgIHRoaXMuc2V0SWNvbnNUb1JhdGVWYWx1ZXMoKTtcbiAgICAgICAgdGhpcy5jcmVhdGVSZW5kZXJlZFJhdGVJdGVtcygpO1xuICAgIH07XG4gICAgUXVlc3Rpb25SYXRpbmdNb2RlbC5wcm90b3R5cGUucmVnaXN0ZXJTeWNoUHJvcGVydGllcyA9IGZ1bmN0aW9uIChuYW1lcywgZnVuYykge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnRpZXNWYWx1ZUNoYW5nZWQobmFtZXMsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghX3RoaXMuX3N5bmNQcm9wZXJ0aWVzQ2hhbmdpbmcpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5fc3luY1Byb3BlcnRpZXNDaGFuZ2luZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgZnVuYygpO1xuICAgICAgICAgICAgICAgIF90aGlzLl9zeW5jUHJvcGVydGllc0NoYW5naW5nID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgUXVlc3Rpb25SYXRpbmdNb2RlbC5wcm90b3R5cGUudXNlUmF0ZVZhbHVlcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5yYXRlVmFsdWVzLmxlbmd0aCAmJiAhdGhpcy5hdXRvR2VuZXJhdGU7XG4gICAgfTtcbiAgICBRdWVzdGlvblJhdGluZ01vZGVsLnByb3RvdHlwZS51cGRhdGVSYXRlTWF4ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnJhdGVNYXggPSB0aGlzLnJhdGVNaW4gKyB0aGlzLnJhdGVTdGVwICogKHRoaXMucmF0ZUNvdW50IC0gMSk7XG4gICAgfTtcbiAgICBRdWVzdGlvblJhdGluZ01vZGVsLnByb3RvdHlwZS51cGRhdGVSYXRlTWluID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnJhdGVNaW4gPSB0aGlzLnJhdGVNYXggLSB0aGlzLnJhdGVTdGVwICogKHRoaXMucmF0ZUNvdW50IC0gMSk7XG4gICAgfTtcbiAgICBRdWVzdGlvblJhdGluZ01vZGVsLnByb3RvdHlwZS51cGRhdGVSYXRlQ291bnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBuZXdDb3VudCA9IDA7XG4gICAgICAgIGlmICh0aGlzLnVzZVJhdGVWYWx1ZXMoKSkge1xuICAgICAgICAgICAgbmV3Q291bnQgPSB0aGlzLnJhdGVWYWx1ZXMubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbmV3Q291bnQgPSBNYXRoLnRydW5jKCh0aGlzLnJhdGVNYXggLSB0aGlzLnJhdGVNaW4pIC8gKHRoaXMucmF0ZVN0ZXAgfHwgMSkpICsgMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobmV3Q291bnQgPiAxMCAmJiB0aGlzLnJhdGVEaXNwbGF5TW9kZSA9PSBcInNtaWxleXNcIikge1xuICAgICAgICAgICAgbmV3Q291bnQgPSAxMDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJhdGVDb3VudCA9IG5ld0NvdW50O1xuICAgICAgICBpZiAodGhpcy5yYXRlVmFsdWVzLmxlbmd0aCA+IG5ld0NvdW50KVxuICAgICAgICAgICAgdGhpcy5yYXRlVmFsdWVzLnNwbGljZShuZXdDb3VudCwgdGhpcy5yYXRlVmFsdWVzLmxlbmd0aCAtIG5ld0NvdW50KTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uUmF0aW5nTW9kZWwucHJvdG90eXBlLmluaXRQcm9wZXJ0eURlcGVuZGVuY2llcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdGhpcy5yZWdpc3RlclN5Y2hQcm9wZXJ0aWVzKFtcInJhdGVDb3VudFwiXSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFfdGhpcy51c2VSYXRlVmFsdWVzKCkpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5yYXRlTWF4ID0gX3RoaXMucmF0ZU1pbiArIF90aGlzLnJhdGVTdGVwICogKF90aGlzLnJhdGVDb3VudCAtIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKF90aGlzLnJhdGVDb3VudCA8IF90aGlzLnJhdGVWYWx1ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfdGhpcy5yYXRlQ291bnQgPj0gMTAgJiYgX3RoaXMucmF0ZURpc3BsYXlNb2RlID09IFwic21pbGV5c1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICBfdGhpcy5yYXRlVmFsdWVzLnNwbGljZShfdGhpcy5yYXRlQ291bnQsIF90aGlzLnJhdGVWYWx1ZXMubGVuZ3RoIC0gX3RoaXMucmF0ZUNvdW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSBfdGhpcy5yYXRlVmFsdWVzLmxlbmd0aDsgaSA8IF90aGlzLnJhdGVDb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5yYXRlVmFsdWVzLnB1c2gobmV3IF9pdGVtdmFsdWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkl0ZW1WYWx1ZVwiXShfc3VydmV5U3RyaW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fW1wic3VydmV5TG9jYWxpemF0aW9uXCJdLmdldFN0cmluZyhcImNob2ljZXNfSXRlbVwiKSArIChpICsgMSkpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJTeWNoUHJvcGVydGllcyhbXCJyYXRlTWluXCIsIFwicmF0ZU1heFwiLCBcInJhdGVTdGVwXCIsIFwicmF0ZVZhbHVlc1wiXSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMudXBkYXRlUmF0ZUNvdW50KCk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uUmF0aW5nTW9kZWwucHJvdG90eXBlLCBcInNob3dTZWxlY3RlZEl0ZW1Mb2NUZXh0XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gIXRoaXMucmVhZE9ubHkgJiYgIXRoaXMuaW5wdXRIYXNWYWx1ZSAmJiAhIXRoaXMuc2VsZWN0ZWRJdGVtTG9jVGV4dDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblJhdGluZ01vZGVsLnByb3RvdHlwZSwgXCJzZWxlY3RlZEl0ZW1Mb2NUZXh0XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuICF0aGlzLnJlYWRPbmx5ICYmICgoX2EgPSB0aGlzLnZpc2libGVSYXRlVmFsdWVzLmZpbHRlcihmdW5jdGlvbiAodikgeyByZXR1cm4gdi52YWx1ZSA9PSBfdGhpcy52YWx1ZTsgfSlbMF0pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5sb2NUZXh0KTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblJhdGluZ01vZGVsLnByb3RvdHlwZSwgXCJyYXRlVmFsdWVzXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEEgbGlzdCBvZiByYXRlIHZhbHVlcy5cbiAgICAgICAgICpcbiAgICAgICAgICogVGhpcyBwcm9wZXJ0eSBhY2NlcHRzIGFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZTpcbiAgICAgICAgICpcbiAgICAgICAgICogYGBganNcbiAgICAgICAgICoge1xuICAgICAgICAgKiAgIFwidmFsdWVcIjogYW55LCAvLyBBIHZhbHVlIHRvIGJlIHNhdmVkIGluIHN1cnZleSByZXN1bHRzXG4gICAgICAgICAqICAgXCJ0ZXh0XCI6IFN0cmluZywgLy8gQSBkaXNwbGF5IHRleHQuIFRoaXMgcHJvcGVydHkgc3VwcG9ydHMgTWFya2Rvd24uIFdoZW4gYHRleHRgIGlzIHVuZGVmaW5lZCwgYHZhbHVlYCBpcyB1c2VkLlxuICAgICAgICAgKiAgIFwiY3VzdG9tUHJvcGVydHlcIjogYW55IC8vIEFueSBwcm9wZXJ0eSB0aGF0IHlvdSBmaW5kIHVzZWZ1bC5cbiAgICAgICAgICogfVxuICAgICAgICAgKiBgYGBcbiAgICAgICAgICpcbiAgICAgICAgICogSWYgeW91IGFkZCBjdXN0b20gcHJvcGVydGllcywgcmVmZXIgdG8gdGhlIGZvbGxvd2luZyBoZWxwIHRvcGljIHRvIGxlYXJuIGhvdyB0byBzZXJpYWxpemUgdGhlbSBpbnRvIEpTT046IFtBZGQgQ3VzdG9tIFByb3BlcnRpZXMgdG8gUHJvcGVydHkgR3JpZF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9zdXJ2ZXktY3JlYXRvci9kb2N1bWVudGF0aW9uL3Byb3BlcnR5LWdyaWQjYWRkLWN1c3RvbS1wcm9wZXJ0aWVzLXRvLXRoZS1wcm9wZXJ0eS1ncmlkKS5cbiAgICAgICAgICpcbiAgICAgICAgICogVG8gZW5hYmxlIE1hcmtkb3duIHN1cHBvcnQgZm9yIHRoZSBgdGV4dGAgcHJvcGVydHksIGltcGxlbWVudCBNYXJrZG93bi10by1IVE1MIGNvbnZlcnNpb24gaW4gdGhlIFtvblRleHRNYXJrZG93bl0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL3N1cnZleS1kYXRhLW1vZGVsI29uVGV4dE1hcmtkb3duKSBldmVudCBoYW5kbGVyLiBGb3IgYW4gZXhhbXBsZSwgcmVmZXIgdG8gdGhlIGZvbGxvd2luZyBkZW1vOiBbQ29udmVydCBNYXJrZG93biB0byBIVE1MIHdpdGggU2hvd2Rvd25dKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2V4YW1wbGVzL2VkaXQtc3VydmV5LXF1ZXN0aW9ucy1tYXJrZG93bi8pLlxuICAgICAgICAgKlxuICAgICAgICAgKiBJZiB5b3UgbmVlZCB0byBzcGVjaWZ5IG9ubHkgdGhlIGB2YWx1ZWAgcHJvcGVydHksIHlvdSBjYW4gc2V0IHRoZSBgcmF0ZVZhbHVlc2AgcHJvcGVydHkgdG8gYW4gYXJyYXkgb2YgbnVtYmVycywgZm9yIGV4YW1wbGUsIGBbIDMsIDYsIDEwIF1gLiBUaGVzZSB2YWx1ZXMgYXJlIGJvdGggc2F2ZWQgaW4gc3VydmV5IHJlc3VsdHMgYW5kIHVzZWQgYXMgZGlzcGxheSB0ZXh0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBJZiB5b3UgZG8gbm90IHNwZWNpZnkgdGhlIGByYXRlVmFsdWVzYCBwcm9wZXJ0eSwgcmF0ZSB2YWx1ZXMgYXJlIGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJhc2VkIHVwb24gdGhlIFtgcmF0ZU1pbmBdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vYXBpLXJlZmVyZW5jZS9yYXRpbmctc2NhbGUtcXVlc3Rpb24tbW9kZWwjcmF0ZU1pbiksIFtgcmF0ZU1heGBdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vYXBpLXJlZmVyZW5jZS9yYXRpbmctc2NhbGUtcXVlc3Rpb24tbW9kZWwjcmF0ZU1heCksIFtgcmF0ZVN0ZXBgXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2UvcmF0aW5nLXNjYWxlLXF1ZXN0aW9uLW1vZGVsI3JhdGVTdGVwKSwgYW5kIFtgcmF0ZUNvdW50YF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL3JhdGluZy1zY2FsZS1xdWVzdGlvbi1tb2RlbCNyYXRlQ291bnQpIHByb3BlcnR5IHZhbHVlcy5cbiAgICAgICAgICpcbiAgICAgICAgICogW1ZpZXcgRGVtb10oL2Zvcm0tbGlicmFyeS9leGFtcGxlcy9yYXRpbmctc2NhbGUvIChsaW5rU3R5bGUpKVxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicmF0ZVZhbHVlc1wiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJyYXRlVmFsdWVzXCIsIHZhbCk7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZVJlbmRlcmVkUmF0ZUl0ZW1zKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25SYXRpbmdNb2RlbC5wcm90b3R5cGUsIFwicmF0ZU1pblwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgdGhlIGZpcnN0IHJhdGUgdmFsdWUgaW4gdGhlIGdlbmVyYXRlZCBzZXF1ZW5jZSBvZiByYXRlIHZhbHVlcy4gQXBwbGllcyBpZiB0aGUgW2ByYXRlVmFsdWVzYF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL3JhdGluZy1zY2FsZS1xdWVzdGlvbi1tb2RlbCNyYXRlVmFsdWVzKSBhcnJheSBpcyBlbXB0eS5cbiAgICAgICAgICpcbiAgICAgICAgICogRGVmYXVsdCB2YWx1ZTogMVxuICAgICAgICAgKlxuICAgICAgICAgKiBbVmlldyBEZW1vXSgvZm9ybS1saWJyYXJ5L2V4YW1wbGVzL3JhdGluZy1zY2FsZS8gKGxpbmtTdHlsZSkpXG4gICAgICAgICAqIEBzZWUgcmF0ZU1heFxuICAgICAgICAgKiBAc2VlIHJhdGVTdGVwXG4gICAgICAgICAqIEBzZWUgcmF0ZUNvdW50XG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJyYXRlTWluXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInJhdGVNaW5cIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblJhdGluZ01vZGVsLnByb3RvdHlwZSwgXCJyYXRlTWF4XCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB0aGUgbGFzdCByYXRlIHZhbHVlIGluIHRoZSBnZW5lcmF0ZWQgc2VxdWVuY2Ugb2YgcmF0ZSB2YWx1ZXMuIEFwcGxpZXMgaWYgdGhlIFtgcmF0ZVZhbHVlc2BdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vYXBpLXJlZmVyZW5jZS9yYXRpbmctc2NhbGUtcXVlc3Rpb24tbW9kZWwjcmF0ZVZhbHVlcykgYXJyYXkgaXMgZW1wdHkuXG4gICAgICAgICAqXG4gICAgICAgICAqIERlZmF1bHQgdmFsdWU6IDVcbiAgICAgICAgICpcbiAgICAgICAgICogW1ZpZXcgRGVtb10oL2Zvcm0tbGlicmFyeS9leGFtcGxlcy9yYXRpbmctc2NhbGUvIChsaW5rU3R5bGUpKVxuICAgICAgICAgKiBAc2VlIHJhdGVNaW5cbiAgICAgICAgICogQHNlZSByYXRlU3RlcFxuICAgICAgICAgKiBAc2VlIHJhdGVDb3VudFxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicmF0ZU1heFwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJyYXRlTWF4XCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25SYXRpbmdNb2RlbC5wcm90b3R5cGUsIFwicmF0ZVN0ZXBcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIGEgc3RlcCB3aXRoIHdoaWNoIHRvIGdlbmVyYXRlIHJhdGUgdmFsdWVzLiBBcHBsaWVzIGlmIHRoZSBbYHJhdGVWYWx1ZXNgXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2UvcmF0aW5nLXNjYWxlLXF1ZXN0aW9uLW1vZGVsI3JhdGVWYWx1ZXMpIGFycmF5IGlzIGVtcHR5LlxuICAgICAgICAgKlxuICAgICAgICAgKiBEZWZhdWx0IHZhbHVlOiAxXG4gICAgICAgICAqXG4gICAgICAgICAqIFtWaWV3IERlbW9dKC9mb3JtLWxpYnJhcnkvZXhhbXBsZXMvcmF0aW5nLXNjYWxlLyAobGlua1N0eWxlKSlcbiAgICAgICAgICogQHNlZSByYXRlTWluXG4gICAgICAgICAqIEBzZWUgcmF0ZU1heFxuICAgICAgICAgKiBAc2VlIHJhdGVDb3VudFxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicmF0ZVN0ZXBcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicmF0ZVN0ZXBcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFF1ZXN0aW9uUmF0aW5nTW9kZWwucHJvdG90eXBlLnVwZGF0ZUNvbG9ycyA9IGZ1bmN0aW9uICh0aGVtZVZhcmlhYmxlcykge1xuICAgICAgICBpZiAodGhpcy5jb2xvck1vZGUgPT09IFwibW9ub2Nocm9tZVwiKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSBcInVuZGVmaW5lZFwiIHx8ICFkb2N1bWVudClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKFF1ZXN0aW9uUmF0aW5nTW9kZWwuY29sb3JzQ2FsY3VsYXRlZClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgZnVuY3Rpb24gZ2V0UkdCQ29sb3IoY29sb3JOYW1lLCB2YXJOYW1lKSB7XG4gICAgICAgICAgICB2YXIgc3RyID0gISF0aGVtZVZhcmlhYmxlcyAmJiB0aGVtZVZhcmlhYmxlc1tjb2xvck5hbWVdO1xuICAgICAgICAgICAgaWYgKCFzdHIpIHtcbiAgICAgICAgICAgICAgICB2YXIgc3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCk7XG4gICAgICAgICAgICAgICAgc3RyID0gc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSAmJiBzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHZhck5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFzdHIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB2YXIgY3R4ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKS5nZXRDb250ZXh0KFwiMmRcIik7XG4gICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gc3RyO1xuICAgICAgICAgICAgdmFyIG5ld1N0ciA9IGN0eC5maWxsU3R5bGU7XG4gICAgICAgICAgICBpZiAobmV3U3RyLnN0YXJ0c1dpdGgoXCJyZ2JhXCIpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ld1N0ci5zdWJzdHJpbmcoNSwgbmV3U3RyLmxlbmd0aCAtIDEpLnNwbGl0KFwiLFwiKS5tYXAoZnVuY3Rpb24gKGMpIHsgcmV0dXJuICsoYy50cmltKCkpOyB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciByZXN1bHQgPSAvXiM/KFthLWZcXGRdezJ9KShbYS1mXFxkXXsyfSkoW2EtZlxcZF17Mn0pJC9pLmV4ZWMobmV3U3RyKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQgPyBbXG4gICAgICAgICAgICAgICAgcGFyc2VJbnQocmVzdWx0WzFdLCAxNiksXG4gICAgICAgICAgICAgICAgcGFyc2VJbnQocmVzdWx0WzJdLCAxNiksXG4gICAgICAgICAgICAgICAgcGFyc2VJbnQocmVzdWx0WzNdLCAxNiksXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSA6IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgUXVlc3Rpb25SYXRpbmdNb2RlbC5iYWRDb2xvciA9IGdldFJHQkNvbG9yKFwiLS1zanMtc3BlY2lhbC1yZWRcIiwgXCItLXNkLXJhdGluZy1iYWQtY29sb3JcIik7XG4gICAgICAgIFF1ZXN0aW9uUmF0aW5nTW9kZWwubm9ybWFsQ29sb3IgPSBnZXRSR0JDb2xvcihcIi0tc2pzLXNwZWNpYWwteWVsbG93XCIsIFwiLS1zZC1yYXRpbmctbm9ybWFsLWNvbG9yXCIpO1xuICAgICAgICBRdWVzdGlvblJhdGluZ01vZGVsLmdvb2RDb2xvciA9IGdldFJHQkNvbG9yKFwiLS1zanMtc3BlY2lhbC1ncmVlblwiLCBcIi0tc2QtcmF0aW5nLWdvb2QtY29sb3JcIik7XG4gICAgICAgIFF1ZXN0aW9uUmF0aW5nTW9kZWwuYmFkQ29sb3JMaWdodCA9IGdldFJHQkNvbG9yKFwiLS1zanMtc3BlY2lhbC1yZWQtbGlnaHRcIiwgXCItLXNkLXJhdGluZy1iYWQtY29sb3ItbGlnaHRcIik7XG4gICAgICAgIFF1ZXN0aW9uUmF0aW5nTW9kZWwubm9ybWFsQ29sb3JMaWdodCA9IGdldFJHQkNvbG9yKFwiLS1zanMtc3BlY2lhbC15ZWxsb3ctbGlnaHRcIiwgXCItLXNkLXJhdGluZy1ub3JtYWwtY29sb3ItbGlnaHRcIik7XG4gICAgICAgIFF1ZXN0aW9uUmF0aW5nTW9kZWwuZ29vZENvbG9yTGlnaHQgPSBnZXRSR0JDb2xvcihcIi0tc2pzLXNwZWNpYWwtZ3JlZW4tbGlnaHRcIiwgXCItLXNkLXJhdGluZy1nb29kLWNvbG9yLWxpZ2h0XCIpO1xuICAgICAgICB0aGlzLmNvbG9yc0NhbGN1bGF0ZWQgPSB0cnVlO1xuICAgIH07XG4gICAgUXVlc3Rpb25SYXRpbmdNb2RlbC5wcm90b3R5cGUuZ2V0RGlzcGxheVZhbHVlQ29yZSA9IGZ1bmN0aW9uIChrZXlzQXNUZXh0LCB2YWx1ZSkge1xuICAgICAgICBpZiAoIXRoaXMudXNlUmF0ZVZhbHVlcylcbiAgICAgICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLmdldERpc3BsYXlWYWx1ZUNvcmUuY2FsbCh0aGlzLCBrZXlzQXNUZXh0LCB2YWx1ZSk7XG4gICAgICAgIHZhciByZXMgPSBfaXRlbXZhbHVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJJdGVtVmFsdWVcIl0uZ2V0VGV4dE9ySHRtbEJ5VmFsdWUodGhpcy52aXNpYmxlUmF0ZVZhbHVlcywgdmFsdWUpO1xuICAgICAgICByZXR1cm4gISFyZXMgPyByZXMgOiB2YWx1ZTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblJhdGluZ01vZGVsLnByb3RvdHlwZSwgXCJ2aXNpYmxlUmF0ZVZhbHVlc1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyZWRSYXRlSXRlbXMubWFwKGZ1bmN0aW9uIChpKSB7IHJldHVybiBpLml0ZW1WYWx1ZTsgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBRdWVzdGlvblJhdGluZ01vZGVsLnByb3RvdHlwZS5pdGVtVmFsdWVQcm9wZXJ0eUNoYW5nZWQgPSBmdW5jdGlvbiAoaXRlbSwgbmFtZSwgb2xkVmFsdWUsIG5ld1ZhbHVlKSB7XG4gICAgICAgIGlmICghdGhpcy51c2VSYXRlVmFsdWVzKCkgJiYgbmV3VmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHRoaXMuYXV0b0dlbmVyYXRlID0gZmFsc2U7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUuaXRlbVZhbHVlUHJvcGVydHlDaGFuZ2VkLmNhbGwodGhpcywgaXRlbSwgbmFtZSwgb2xkVmFsdWUsIG5ld1ZhbHVlKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uUmF0aW5nTW9kZWwucHJvdG90eXBlLmNyZWF0ZVJlbmRlcmVkUmF0ZUl0ZW1zID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgcmF0ZVZhbHVlcyA9IFtdO1xuICAgICAgICBpZiAodGhpcy51c2VSYXRlVmFsdWVzKCkpIHtcbiAgICAgICAgICAgIHJhdGVWYWx1ZXMgPSB0aGlzLnJhdGVWYWx1ZXM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgcmVzID0gW107XG4gICAgICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLnJhdGVNaW47XG4gICAgICAgICAgICB2YXIgc3RlcCA9IHRoaXMucmF0ZVN0ZXA7XG4gICAgICAgICAgICB3aGlsZSAodmFsdWUgPD0gdGhpcy5yYXRlTWF4ICYmXG4gICAgICAgICAgICAgICAgcmVzLmxlbmd0aCA8IF9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fW1wic2V0dGluZ3NcIl0ucmF0aW5nTWF4aW11bVJhdGVWYWx1ZUNvdW50KSB7XG4gICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSBuZXcgX2l0ZW12YWx1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiSXRlbVZhbHVlXCJdKHZhbHVlKTtcbiAgICAgICAgICAgICAgICBpdGVtLmxvY093bmVyID0gdGhpcztcbiAgICAgICAgICAgICAgICBpdGVtLm93bmVyUHJvcGVydHlOYW1lID0gXCJyYXRlVmFsdWVzXCI7XG4gICAgICAgICAgICAgICAgcmVzLnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB0aGlzLmNvcnJlY3RWYWx1ZSh2YWx1ZSArIHN0ZXAsIHN0ZXApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmF0ZVZhbHVlcyA9IHJlcztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5yYXRlVHlwZSA9PSBcInNtaWxleXNcIiAmJiByYXRlVmFsdWVzLmxlbmd0aCA+IDEwKVxuICAgICAgICAgICAgcmF0ZVZhbHVlcyA9IHJhdGVWYWx1ZXMuc2xpY2UoMCwgMTApO1xuICAgICAgICB0aGlzLnJlbmRlcmVkUmF0ZUl0ZW1zID0gcmF0ZVZhbHVlcy5tYXAoZnVuY3Rpb24gKHYsIGkpIHtcbiAgICAgICAgICAgIHZhciByZW5kZXJlZEl0ZW0gPSBudWxsO1xuICAgICAgICAgICAgaWYgKF90aGlzLmRpc3BsYXlSYXRlRGVzY3JpcHRpb25zQXNFeHRyZW1lSXRlbXMpIHtcbiAgICAgICAgICAgICAgICBpZiAoaSA9PSAwKVxuICAgICAgICAgICAgICAgICAgICByZW5kZXJlZEl0ZW0gPSBuZXcgUmVuZGVyZWRSYXRpbmdJdGVtKHYsIF90aGlzLm1pblJhdGVEZXNjcmlwdGlvbiAmJiBfdGhpcy5sb2NNaW5SYXRlRGVzY3JpcHRpb24gfHwgdi5sb2NUZXh0KTtcbiAgICAgICAgICAgICAgICBpZiAoaSA9PSByYXRlVmFsdWVzLmxlbmd0aCAtIDEpXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlcmVkSXRlbSA9IG5ldyBSZW5kZXJlZFJhdGluZ0l0ZW0odiwgX3RoaXMubWF4UmF0ZURlc2NyaXB0aW9uICYmIF90aGlzLmxvY01heFJhdGVEZXNjcmlwdGlvbiB8fCB2LmxvY1RleHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFyZW5kZXJlZEl0ZW0pXG4gICAgICAgICAgICAgICAgcmVuZGVyZWRJdGVtID0gbmV3IFJlbmRlcmVkUmF0aW5nSXRlbSh2KTtcbiAgICAgICAgICAgIHJldHVybiByZW5kZXJlZEl0ZW07XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgUXVlc3Rpb25SYXRpbmdNb2RlbC5wcm90b3R5cGUuY29ycmVjdFZhbHVlID0gZnVuY3Rpb24gKHZhbHVlLCBzdGVwKSB7XG4gICAgICAgIGlmICghdmFsdWUpXG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIGlmIChNYXRoLnJvdW5kKHZhbHVlKSA9PSB2YWx1ZSlcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgdmFyIGZyID0gMDtcbiAgICAgICAgd2hpbGUgKE1hdGgucm91bmQoc3RlcCkgIT0gc3RlcCkge1xuICAgICAgICAgICAgc3RlcCAqPSAxMDtcbiAgICAgICAgICAgIGZyKys7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQodmFsdWUudG9GaXhlZChmcikpO1xuICAgIH07XG4gICAgUXVlc3Rpb25SYXRpbmdNb2RlbC5wcm90b3R5cGUuZ2V0VHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIFwicmF0aW5nXCI7XG4gICAgfTtcbiAgICBRdWVzdGlvblJhdGluZ01vZGVsLnByb3RvdHlwZS5nZXRGaXJzdElucHV0RWxlbWVudElkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnB1dElkICsgXCJfMFwiO1xuICAgIH07XG4gICAgUXVlc3Rpb25SYXRpbmdNb2RlbC5wcm90b3R5cGUuZ2V0SW5wdXRJZCA9IGZ1bmN0aW9uIChpbmRleCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnB1dElkICsgXCJfXCIgKyBpbmRleDtcbiAgICB9O1xuICAgIFF1ZXN0aW9uUmF0aW5nTW9kZWwucHJvdG90eXBlLnN1cHBvcnRHb05leHRQYWdlQXV0b21hdGljID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc01vdXNlRG93biA9PT0gdHJ1ZTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uUmF0aW5nTW9kZWwucHJvdG90eXBlLnN1cHBvcnRPdGhlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gICAgUXVlc3Rpb25SYXRpbmdNb2RlbC5wcm90b3R5cGUuZ2V0UGxhaW5EYXRhQ2FsY3VsYXRlZFZhbHVlID0gZnVuY3Rpb24gKHByb3BOYW1lKSB7XG4gICAgICAgIHZhciByZXMgPSBfc3VwZXIucHJvdG90eXBlLmdldFBsYWluRGF0YUNhbGN1bGF0ZWRWYWx1ZS5jYWxsKHRoaXMsIHByb3BOYW1lKTtcbiAgICAgICAgaWYgKHJlcyAhPT0gdW5kZWZpbmVkIHx8ICF0aGlzLnVzZVJhdGVWYWx1ZXMgfHwgdGhpcy5pc0VtcHR5KCkpXG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB2YXIgaXRlbSA9IF9pdGVtdmFsdWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkl0ZW1WYWx1ZVwiXS5nZXRJdGVtQnlWYWx1ZSh0aGlzLnZpc2libGVSYXRlVmFsdWVzLCB0aGlzLnZhbHVlKTtcbiAgICAgICAgcmV0dXJuIGl0ZW0gPyBpdGVtW3Byb3BOYW1lXSA6IHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblJhdGluZ01vZGVsLnByb3RvdHlwZSwgXCJtaW5SYXRlRGVzY3JpcHRpb25cIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIGEgZGVzY3JpcHRpb24gZm9yIHRoZSBtaW5pbXVtIChmaXJzdCkgcmF0ZSB2YWx1ZS5cbiAgICAgICAgICogQHNlZSByYXRlVmFsdWVzXG4gICAgICAgICAqIEBzZWUgcmF0ZU1pblxuICAgICAgICAgKiBAc2VlIGRpc3BsYXlSYXRlRGVzY3JpcHRpb25zQXNFeHRyZW1lSXRlbXNcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwibWluUmF0ZURlc2NyaXB0aW9uXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwibWluUmF0ZURlc2NyaXB0aW9uXCIsIHZhbCk7XG4gICAgICAgICAgICB0aGlzLmhhc01pblJhdGVEZXNjcmlwdGlvbiA9ICEhdGhpcy5taW5SYXRlRGVzY3JpcHRpb247XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25SYXRpbmdNb2RlbC5wcm90b3R5cGUsIFwibG9jTWluUmF0ZURlc2NyaXB0aW9uXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcIm1pblJhdGVEZXNjcmlwdGlvblwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblJhdGluZ01vZGVsLnByb3RvdHlwZSwgXCJtYXhSYXRlRGVzY3JpcHRpb25cIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIGEgZGVzY3JpcHRpb24gZm9yIHRoZSBtYXhpbXVtIChsYXN0KSByYXRlIHZhbHVlLlxuICAgICAgICAgKiBAc2VlIHJhdGVWYWx1ZXNcbiAgICAgICAgICogQHNlZSByYXRlTWF4XG4gICAgICAgICAqIEBzZWUgZGlzcGxheVJhdGVEZXNjcmlwdGlvbnNBc0V4dHJlbWVJdGVtc1xuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJtYXhSYXRlRGVzY3JpcHRpb25cIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJtYXhSYXRlRGVzY3JpcHRpb25cIiwgdmFsKTtcbiAgICAgICAgICAgIHRoaXMuaGFzTWF4UmF0ZURlc2NyaXB0aW9uID0gISF0aGlzLm1heFJhdGVEZXNjcmlwdGlvbjtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblJhdGluZ01vZGVsLnByb3RvdHlwZSwgXCJsb2NNYXhSYXRlRGVzY3JpcHRpb25cIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwibWF4UmF0ZURlc2NyaXB0aW9uXCIpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uUmF0aW5nTW9kZWwucHJvdG90eXBlLCBcImhhc01pbkxhYmVsXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gIXRoaXMuZGlzcGxheVJhdGVEZXNjcmlwdGlvbnNBc0V4dHJlbWVJdGVtcyAmJiAhIXRoaXMuaGFzTWluUmF0ZURlc2NyaXB0aW9uO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uUmF0aW5nTW9kZWwucHJvdG90eXBlLCBcImhhc01heExhYmVsXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gIXRoaXMuZGlzcGxheVJhdGVEZXNjcmlwdGlvbnNBc0V4dHJlbWVJdGVtcyAmJiAhIXRoaXMuaGFzTWF4UmF0ZURlc2NyaXB0aW9uO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uUmF0aW5nTW9kZWwucHJvdG90eXBlLCBcInJhdGVEaXNwbGF5TW9kZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmF0ZVR5cGU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5yYXRlVHlwZSA9IHZhbDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblJhdGluZ01vZGVsLnByb3RvdHlwZSwgXCJpc1N0YXJcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJhdGVUeXBlID09IFwic3RhcnNcIjtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblJhdGluZ01vZGVsLnByb3RvdHlwZSwgXCJpc1NtaWxleVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmF0ZVR5cGUgPT0gXCJzbWlsZXlzXCI7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25SYXRpbmdNb2RlbC5wcm90b3R5cGUsIFwiaXRlbUNvbXBvbmVudE5hbWVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzU3RhcilcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJzdi1yYXRpbmctaXRlbS1zdGFyXCI7XG4gICAgICAgICAgICBpZiAodGhpcy5pc1NtaWxleSlcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJzdi1yYXRpbmctaXRlbS1zbWlsZXlcIjtcbiAgICAgICAgICAgIHJldHVybiBcInN2LXJhdGluZy1pdGVtXCI7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBRdWVzdGlvblJhdGluZ01vZGVsLnByb3RvdHlwZS52YWx1ZVRvRGF0YSA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgaWYgKHRoaXMudXNlUmF0ZVZhbHVlcygpKSB7XG4gICAgICAgICAgICB2YXIgaXRlbSA9IF9pdGVtdmFsdWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkl0ZW1WYWx1ZVwiXS5nZXRJdGVtQnlWYWx1ZSh0aGlzLnJhdGVWYWx1ZXMsIHZhbCk7XG4gICAgICAgICAgICByZXR1cm4gISFpdGVtID8gaXRlbS52YWx1ZSA6IHZhbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gIWlzTmFOKHZhbCkgPyBwYXJzZUZsb2F0KHZhbCkgOiB2YWw7XG4gICAgfTtcbiAgICBRdWVzdGlvblJhdGluZ01vZGVsLnByb3RvdHlwZS5zZXRWYWx1ZUZyb21DbGljayA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy52YWx1ZSA9PT0gcGFyc2VGbG9hdCh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJWYWx1ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5yZW5kZXJlZFJhdGVJdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlZFJhdGVJdGVtc1tpXS5oaWdobGlnaHQgPSBcIm5vbmVcIjtcbiAgICAgICAgfVxuICAgIH07XG4gICAgUXVlc3Rpb25SYXRpbmdNb2RlbC5wcm90b3R5cGUub25JdGVtTW91c2VJbiA9IGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIGlmICh0aGlzLmlzUmVhZE9ubHkgfHwgIWl0ZW0uaXRlbVZhbHVlLmlzRW5hYmxlZCB8fCB0aGlzLmlzRGVzaWduTW9kZSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIGhpZ2ggPSB0cnVlO1xuICAgICAgICB2YXIgc2VsZWN0ZWQgPSB0aGlzLnZhbHVlICE9IG51bGw7XG4gICAgICAgIGlmICh0aGlzLnJhdGVUeXBlICE9PSBcInN0YXJzXCIpIHtcbiAgICAgICAgICAgIGl0ZW0uaGlnaGxpZ2h0ID0gXCJoaWdobGlnaHRlZFwiO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5yZW5kZXJlZFJhdGVJdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlZFJhdGVJdGVtc1tpXS5oaWdobGlnaHQgPSBoaWdoICYmICFzZWxlY3RlZCAmJiBcImhpZ2hsaWdodGVkXCIgfHwgIWhpZ2ggJiYgc2VsZWN0ZWQgJiYgXCJ1bmhpZ2hsaWdodGVkXCIgfHwgXCJub25lXCI7XG4gICAgICAgICAgICBpZiAodGhpcy5yZW5kZXJlZFJhdGVJdGVtc1tpXSA9PSBpdGVtKVxuICAgICAgICAgICAgICAgIGhpZ2ggPSBmYWxzZTtcbiAgICAgICAgICAgIGlmICh0aGlzLnJlbmRlcmVkUmF0ZUl0ZW1zW2ldLml0ZW1WYWx1ZS52YWx1ZSA9PSB0aGlzLnZhbHVlKVxuICAgICAgICAgICAgICAgIHNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFF1ZXN0aW9uUmF0aW5nTW9kZWwucHJvdG90eXBlLm9uSXRlbU1vdXNlT3V0ID0gZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlZFJhdGVJdGVtcy5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7IHJldHVybiBpdGVtLmhpZ2hsaWdodCA9IFwibm9uZVwiOyB9KTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblJhdGluZ01vZGVsLnByb3RvdHlwZSwgXCJpdGVtU21hbGxNb2RlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbk1hdHJpeE1vZGUgJiYgX3NldHRpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bXCJzZXR0aW5nc1wiXS5tYXRyaXgucmF0ZVNpemUgPT0gXCJzbWFsbFwiO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uUmF0aW5nTW9kZWwucHJvdG90eXBlLCBcInJhdGluZ1Jvb3RDc3NcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBiYXNlQ2xhc3MgPSAoKHRoaXMuZGlzcGxheU1vZGUgPT0gXCJidXR0b25zXCIgfHwgKCEhdGhpcy5zdXJ2ZXkgJiYgdGhpcy5zdXJ2ZXkuaXNEZXNpZ25Nb2RlKSkgJiYgdGhpcy5jc3NDbGFzc2VzLnJvb3RXcmFwcGFibGUpID9cbiAgICAgICAgICAgICAgICB0aGlzLmNzc0NsYXNzZXMucm9vdFdyYXBwYWJsZSA6IHRoaXMuY3NzQ2xhc3Nlcy5yb290O1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBfdXRpbHNfY3NzQ2xhc3NCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bXCJDc3NDbGFzc0J1aWxkZXJcIl0oKVxuICAgICAgICAgICAgICAgIC5hcHBlbmQoYmFzZUNsYXNzKVxuICAgICAgICAgICAgICAgIC5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLml0ZW1TbWFsbCwgdGhpcy5pdGVtU21hbGxNb2RlICYmIHRoaXMucmF0ZVR5cGUgIT0gXCJsYWJlbHNcIilcbiAgICAgICAgICAgICAgICAudG9TdHJpbmcoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblJhdGluZ01vZGVsLnByb3RvdHlwZSwgXCJpdGVtU3Rhckljb25cIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLml0ZW1TbWFsbE1vZGUgPyBcImljb24tcmF0aW5nLXN0YXItc21hbGxcIiA6IFwiaWNvbi1yYXRpbmctc3RhclwiO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uUmF0aW5nTW9kZWwucHJvdG90eXBlLCBcIml0ZW1TdGFySWNvbkFsdFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXRlbVN0YXJJY29uICsgXCItMlwiO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUXVlc3Rpb25SYXRpbmdNb2RlbC5wcm90b3R5cGUuZ2V0SXRlbVNtaWxleSA9IGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIHZhciBpY29ucyA9IFtcInRlcnJpYmxlXCIsIFwidmVyeS1wb29yXCIsIFwicG9vclwiLCBcIm5vdC1nb29kXCIsIFwiYXZlcmFnZVwiLCBcIm5vcm1hbFwiLCBcImdvb2RcIiwgXCJ2ZXJ5LWdvb2RcIiwgXCJleGNlbGxlbnRcIiwgXCJwZXJmZWN0XCJdO1xuICAgICAgICB2YXIgcHJpb3JpdHkgPSBbXCJ2ZXJ5LWdvb2RcIiwgXCJub3QtZ29vZFwiLCBcIm5vcm1hbFwiLCBcImdvb2RcIiwgXCJhdmVyYWdlXCIsIFwiZXhjZWxsZW50XCIsIFwicG9vclwiLCBcInBlcmZlY3RcIiwgXCJ2ZXJ5LXBvb3JcIiwgXCJ0ZXJyaWJsZVwiXTtcbiAgICAgICAgdmFyIGNvdW50ID0gdGhpcy51c2VSYXRlVmFsdWVzKCkgPyB0aGlzLnJhdGVWYWx1ZXMubGVuZ3RoIDogdGhpcy5yYXRlTWF4IC0gdGhpcy5yYXRlTWluICsgMTtcbiAgICAgICAgdmFyIHNlbGVjdGVkUHJpb3JpdHkgPSBwcmlvcml0eS5zbGljZSgwLCBjb3VudCk7XG4gICAgICAgIHZhciBzZWxlY3RlZEljb25zID0gaWNvbnMuZmlsdGVyKGZ1bmN0aW9uIChpKSB7IHJldHVybiBzZWxlY3RlZFByaW9yaXR5LmluZGV4T2YoaSkgIT0gLTE7IH0pO1xuICAgICAgICBpZiAoIXRoaXMudXNlUmF0ZVZhbHVlcygpKSB7XG4gICAgICAgICAgICByZXR1cm4gc2VsZWN0ZWRJY29uc1tpdGVtLnZhbHVlIC0gdGhpcy5yYXRlTWluXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBzZWxlY3RlZEljb25zW3RoaXMucmF0ZVZhbHVlcy5pbmRleE9mKGl0ZW0pXTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgUXVlc3Rpb25SYXRpbmdNb2RlbC5wcm90b3R5cGUuZ2V0SXRlbVNtaWxleUljb25OYW1lID0gZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIFwiaWNvbi1cIiArIHRoaXMuZ2V0SXRlbVNtaWxleShpdGVtKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uUmF0aW5nTW9kZWwucHJvdG90eXBlLmdldEl0ZW1DbGFzc0J5VGV4dCA9IGZ1bmN0aW9uIChpdGVtLCB0ZXh0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEl0ZW1DbGFzcyhpdGVtKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uUmF0aW5nTW9kZWwucHJvdG90eXBlLmdldFJlbmRlcmVkSXRlbUNvbG9yID0gZnVuY3Rpb24gKGluZGV4LCBsaWdodCkge1xuICAgICAgICB2YXIgc3RhcnRDb2xvciA9IGxpZ2h0ID8gUXVlc3Rpb25SYXRpbmdNb2RlbC5iYWRDb2xvckxpZ2h0IDogUXVlc3Rpb25SYXRpbmdNb2RlbC5iYWRDb2xvcjtcbiAgICAgICAgdmFyIGVuZENvbG9yID0gbGlnaHQgPyBRdWVzdGlvblJhdGluZ01vZGVsLmdvb2RDb2xvckxpZ2h0IDogUXVlc3Rpb25SYXRpbmdNb2RlbC5nb29kQ29sb3I7XG4gICAgICAgIHZhciBub3JtYWxJbmRleCA9ICh0aGlzLnJhdGVDb3VudCAtIDEpIC8gMi4wO1xuICAgICAgICB2YXIgbWlkZGxlQ29sb3IgPSBsaWdodCA/IFF1ZXN0aW9uUmF0aW5nTW9kZWwubm9ybWFsQ29sb3JMaWdodCA6IFF1ZXN0aW9uUmF0aW5nTW9kZWwubm9ybWFsQ29sb3I7XG4gICAgICAgIGlmIChpbmRleCA8IG5vcm1hbEluZGV4KSB7XG4gICAgICAgICAgICBlbmRDb2xvciA9IG1pZGRsZUNvbG9yO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc3RhcnRDb2xvciA9IG1pZGRsZUNvbG9yO1xuICAgICAgICAgICAgaW5kZXggLT0gbm9ybWFsSW5kZXg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFzdGFydENvbG9yIHx8ICFlbmRDb2xvcilcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB2YXIgY3VyQ29sb3IgPSBbMCwgMCwgMCwgMF07XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNDsgaSsrKSB7XG4gICAgICAgICAgICBjdXJDb2xvcltpXSA9IHN0YXJ0Q29sb3JbaV0gKyAoZW5kQ29sb3JbaV0gLSBzdGFydENvbG9yW2ldKSAqIGluZGV4IC8gbm9ybWFsSW5kZXg7XG4gICAgICAgICAgICBpZiAoaSA8IDMpXG4gICAgICAgICAgICAgICAgY3VyQ29sb3JbaV0gPSBNYXRoLnRydW5jKGN1ckNvbG9yW2ldKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gXCJyZ2JhKFwiICsgY3VyQ29sb3JbMF0gKyBcIiwgXCIgKyBjdXJDb2xvclsxXSArIFwiLCBcIiArIGN1ckNvbG9yWzJdICsgXCIsIFwiICsgY3VyQ29sb3JbM10gKyBcIilcIjtcbiAgICB9O1xuICAgIFF1ZXN0aW9uUmF0aW5nTW9kZWwucHJvdG90eXBlLmdldEl0ZW1TdHlsZSA9IGZ1bmN0aW9uIChpdGVtLCBoaWdobGlnaHQpIHtcbiAgICAgICAgaWYgKGhpZ2hsaWdodCA9PT0gdm9pZCAwKSB7IGhpZ2hsaWdodCA9IFwibm9uZVwiOyB9XG4gICAgICAgIGlmICh0aGlzLnNjYWxlQ29sb3JNb2RlID09PSBcIm1vbm9jaHJvbWVcIiAmJiB0aGlzLnJhdGVDb2xvck1vZGUgPT0gXCJkZWZhdWx0XCIpXG4gICAgICAgICAgICByZXR1cm4geyBib3JkZXJDb2xvcjogbnVsbCwgZmlsbDogbnVsbCwgYmFja2dyb3VuZENvbG9yOiBudWxsIH07XG4gICAgICAgIHZhciBpbmRleCA9IHRoaXMudmlzaWJsZVJhdGVWYWx1ZXMuaW5kZXhPZihpdGVtKTtcbiAgICAgICAgdmFyIGNvbG9yID0gdGhpcy5nZXRSZW5kZXJlZEl0ZW1Db2xvcihpbmRleCwgZmFsc2UpO1xuICAgICAgICBpZiAodGhpcy52YWx1ZSAhPSB0aGlzLnJlbmRlcmVkUmF0ZUl0ZW1zW2luZGV4XS52YWx1ZSkge1xuICAgICAgICAgICAgdmFyIGNvbG9yTGlnaHQgPSB0aGlzLmdldFJlbmRlcmVkSXRlbUNvbG9yKGluZGV4LCB0cnVlKTtcbiAgICAgICAgICAgIGlmIChoaWdobGlnaHQgPT0gXCJoaWdobGlnaHRlZFwiICYmIHRoaXMuc2NhbGVDb2xvck1vZGUgPT09IFwiY29sb3JlZFwiKVxuICAgICAgICAgICAgICAgIHJldHVybiB7IGJvcmRlckNvbG9yOiBjb2xvciwgZmlsbDogY29sb3IsIGJhY2tncm91bmRDb2xvcjogY29sb3JMaWdodCB9O1xuICAgICAgICAgICAgaWYgKHRoaXMuc2NhbGVDb2xvck1vZGUgPT09IFwiY29sb3JlZFwiICYmIHRoaXMuZXJyb3JzLmxlbmd0aCA9PSAwKVxuICAgICAgICAgICAgICAgIHJldHVybiB7IGJvcmRlckNvbG9yOiBjb2xvciwgZmlsbDogY29sb3IsIGJhY2tncm91bmRDb2xvcjogbnVsbCB9O1xuICAgICAgICAgICAgcmV0dXJuIHsgYm9yZGVyQ29sb3I6IG51bGwsIGZpbGw6IG51bGwsIGJhY2tncm91bmRDb2xvcjogbnVsbCB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHsgYm9yZGVyQ29sb3I6IGNvbG9yLCBmaWxsOiBudWxsLCBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9yIH07XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFF1ZXN0aW9uUmF0aW5nTW9kZWwucHJvdG90eXBlLmdldEl0ZW1DbGFzcyA9IGZ1bmN0aW9uIChpdGVtLCBoaWdobGlnaHQpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgaWYgKGhpZ2hsaWdodCA9PT0gdm9pZCAwKSB7IGhpZ2hsaWdodCA9IFwibm9uZVwiOyB9XG4gICAgICAgIHZhciBpc1NlbGVjdGVkID0gdGhpcy52YWx1ZSA9PSBpdGVtLnZhbHVlO1xuICAgICAgICBpZiAodGhpcy5pc1N0YXIpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy51c2VSYXRlVmFsdWVzKCkpIHtcbiAgICAgICAgICAgICAgICBpc1NlbGVjdGVkID0gdGhpcy52YWx1ZSA+PSBpdGVtLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaXNTZWxlY3RlZCA9IHRoaXMucmF0ZVZhbHVlcy5pbmRleE9mKHRoaXMucmF0ZVZhbHVlcy5maWx0ZXIoZnVuY3Rpb24gKGkpIHsgcmV0dXJuIGkudmFsdWUgPT0gX3RoaXMudmFsdWU7IH0pWzBdKSA+PSB0aGlzLnJhdGVWYWx1ZXMuaW5kZXhPZihpdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgaXNEaXNhYmxlZCA9IHRoaXMuaXNSZWFkT25seSB8fCAhaXRlbS5pc0VuYWJsZWQ7XG4gICAgICAgIHZhciBhbGxvd0hvdmVyID0gIWlzRGlzYWJsZWQgJiYgKHRoaXMudmFsdWUgIT0gaXRlbS52YWx1ZSkgJiYgISghIXRoaXMuc3VydmV5ICYmIHRoaXMuc3VydmV5LmlzRGVzaWduTW9kZSk7XG4gICAgICAgIHZhciByZW5kZXJlZEl0ZW0gPSB0aGlzLnJlbmRlcmVkUmF0ZUl0ZW1zLmZpbHRlcihmdW5jdGlvbiAoaSkgeyByZXR1cm4gaS5pdGVtVmFsdWUgPT0gaXRlbTsgfSlbMF07XG4gICAgICAgIHZhciBpc0hpZ2hsaWdodGVkID0gdGhpcy5pc1N0YXIgJiYgKHJlbmRlcmVkSXRlbSA9PT0gbnVsbCB8fCByZW5kZXJlZEl0ZW0gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlbmRlcmVkSXRlbS5oaWdobGlnaHQpID09IFwiaGlnaGxpZ2h0ZWRcIjtcbiAgICAgICAgdmFyIGlzVW5oaWdobGlnaHRlZCA9IHRoaXMuaXNTdGFyICYmIChyZW5kZXJlZEl0ZW0gPT09IG51bGwgfHwgcmVuZGVyZWRJdGVtID09PSB2b2lkIDAgPyB2b2lkIDAgOiByZW5kZXJlZEl0ZW0uaGlnaGxpZ2h0KSA9PSBcInVuaGlnaGxpZ2h0ZWRcIjtcbiAgICAgICAgdmFyIGl0ZW1DbGFzcyA9IHRoaXMuY3NzQ2xhc3Nlcy5pdGVtO1xuICAgICAgICB2YXIgaXRlbVNlbGVjdGVkQ2xhc3MgPSB0aGlzLmNzc0NsYXNzZXMuc2VsZWN0ZWQ7XG4gICAgICAgIHZhciBpdGVtRGlzYWJsZWRDbGFzcyA9IHRoaXMuY3NzQ2xhc3Nlcy5pdGVtRGlzYWJsZWQ7XG4gICAgICAgIHZhciBpdGVtSG92ZXJDbGFzcyA9IHRoaXMuY3NzQ2xhc3Nlcy5pdGVtSG92ZXI7XG4gICAgICAgIHZhciBpdGVtaXRlbU9uRXJyb3JDbGFzcyA9IHRoaXMuY3NzQ2xhc3Nlcy5pdGVtT25FcnJvcjtcbiAgICAgICAgdmFyIGl0ZW1IaWdobGlnaHRlZENsYXNzID0gbnVsbDtcbiAgICAgICAgdmFyIGl0ZW1VbmhpZ2hsaWdodGVkQ2xhc3MgPSBudWxsO1xuICAgICAgICB2YXIgaXRlbVNjYWxlQ29sb3JlZENsYXNzID0gbnVsbDtcbiAgICAgICAgdmFyIGl0ZW1SYXRlQ29sb3JlZENsYXNzID0gbnVsbDtcbiAgICAgICAgdmFyIGl0ZW1TbWFsbENsYXNzID0gbnVsbDtcbiAgICAgICAgaWYgKHRoaXMuaXNTdGFyKSB7XG4gICAgICAgICAgICBpdGVtQ2xhc3MgPSB0aGlzLmNzc0NsYXNzZXMuaXRlbVN0YXI7XG4gICAgICAgICAgICBpdGVtU2VsZWN0ZWRDbGFzcyA9IHRoaXMuY3NzQ2xhc3Nlcy5pdGVtU3RhclNlbGVjdGVkO1xuICAgICAgICAgICAgaXRlbURpc2FibGVkQ2xhc3MgPSB0aGlzLmNzc0NsYXNzZXMuaXRlbVN0YXJEaXNhYmxlZDtcbiAgICAgICAgICAgIGl0ZW1Ib3ZlckNsYXNzID0gdGhpcy5jc3NDbGFzc2VzLml0ZW1TdGFySG92ZXI7XG4gICAgICAgICAgICBpdGVtaXRlbU9uRXJyb3JDbGFzcyA9IHRoaXMuY3NzQ2xhc3Nlcy5pdGVtU3Rhck9uRXJyb3I7XG4gICAgICAgICAgICBpdGVtSGlnaGxpZ2h0ZWRDbGFzcyA9IHRoaXMuY3NzQ2xhc3Nlcy5pdGVtU3RhckhpZ2hsaWdodGVkO1xuICAgICAgICAgICAgaXRlbVVuaGlnaGxpZ2h0ZWRDbGFzcyA9IHRoaXMuY3NzQ2xhc3Nlcy5pdGVtU3RhclVuaGlnaGxpZ2h0ZWQ7XG4gICAgICAgICAgICBpdGVtU21hbGxDbGFzcyA9IHRoaXMuY3NzQ2xhc3Nlcy5pdGVtU3RhclNtYWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzU21pbGV5KSB7XG4gICAgICAgICAgICBpdGVtQ2xhc3MgPSB0aGlzLmNzc0NsYXNzZXMuaXRlbVNtaWxleTtcbiAgICAgICAgICAgIGl0ZW1TZWxlY3RlZENsYXNzID0gdGhpcy5jc3NDbGFzc2VzLml0ZW1TbWlsZXlTZWxlY3RlZDtcbiAgICAgICAgICAgIGl0ZW1EaXNhYmxlZENsYXNzID0gdGhpcy5jc3NDbGFzc2VzLml0ZW1TbWlsZXlEaXNhYmxlZDtcbiAgICAgICAgICAgIGl0ZW1Ib3ZlckNsYXNzID0gdGhpcy5jc3NDbGFzc2VzLml0ZW1TbWlsZXlIb3ZlcjtcbiAgICAgICAgICAgIGl0ZW1pdGVtT25FcnJvckNsYXNzID0gdGhpcy5jc3NDbGFzc2VzLml0ZW1TbWlsZXlPbkVycm9yO1xuICAgICAgICAgICAgaXRlbUhpZ2hsaWdodGVkQ2xhc3MgPSB0aGlzLmNzc0NsYXNzZXMuaXRlbVNtaWxleUhpZ2hsaWdodGVkO1xuICAgICAgICAgICAgaXRlbVNjYWxlQ29sb3JlZENsYXNzID0gdGhpcy5jc3NDbGFzc2VzLml0ZW1TbWlsZXlTY2FsZUNvbG9yZWQ7XG4gICAgICAgICAgICBpdGVtUmF0ZUNvbG9yZWRDbGFzcyA9IHRoaXMuY3NzQ2xhc3Nlcy5pdGVtU21pbGV5UmF0ZUNvbG9yZWQ7XG4gICAgICAgICAgICBpdGVtU21hbGxDbGFzcyA9IHRoaXMuY3NzQ2xhc3Nlcy5pdGVtU21pbGV5U21hbGw7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGhhc0ZpeGVkU2l6ZSA9ICF0aGlzLmlzU3RhciAmJlxuICAgICAgICAgICAgIXRoaXMuaXNTbWlsZXkgJiZcbiAgICAgICAgICAgICghdGhpcy5kaXNwbGF5UmF0ZURlc2NyaXB0aW9uc0FzRXh0cmVtZUl0ZW1zIHx8XG4gICAgICAgICAgICAgICAgdGhpcy51c2VSYXRlVmFsdWVzKCkgJiYgaXRlbSAhPSB0aGlzLnJhdGVWYWx1ZXNbMF0gJiYgaXRlbSAhPSB0aGlzLnJhdGVWYWx1ZXNbdGhpcy5yYXRlVmFsdWVzLmxlbmd0aCAtIDFdIHx8XG4gICAgICAgICAgICAgICAgIXRoaXMudXNlUmF0ZVZhbHVlcygpICYmIGl0ZW0udmFsdWUgIT0gdGhpcy5yYXRlTWluICYmIGl0ZW0udmFsdWUgIT0gdGhpcy5yYXRlTWF4KSAmJlxuICAgICAgICAgICAgaXRlbS5sb2NUZXh0LmNhbGN1bGF0ZWRUZXh0Lmxlbmd0aCA8PSAyICYmXG4gICAgICAgICAgICBOdW1iZXIuaXNJbnRlZ2VyKE51bWJlcihpdGVtLmxvY1RleHQuY2FsY3VsYXRlZFRleHQpKTtcbiAgICAgICAgcmV0dXJuIG5ldyBfdXRpbHNfY3NzQ2xhc3NCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bXCJDc3NDbGFzc0J1aWxkZXJcIl0oKVxuICAgICAgICAgICAgLmFwcGVuZChpdGVtQ2xhc3MpXG4gICAgICAgICAgICAuYXBwZW5kKGl0ZW1TZWxlY3RlZENsYXNzLCBpc1NlbGVjdGVkKVxuICAgICAgICAgICAgLmFwcGVuZChpdGVtRGlzYWJsZWRDbGFzcywgdGhpcy5pc1JlYWRPbmx5KVxuICAgICAgICAgICAgLmFwcGVuZChpdGVtSG92ZXJDbGFzcywgYWxsb3dIb3ZlcilcbiAgICAgICAgICAgIC5hcHBlbmQoaXRlbUhpZ2hsaWdodGVkQ2xhc3MsIGlzSGlnaGxpZ2h0ZWQpXG4gICAgICAgICAgICAuYXBwZW5kKGl0ZW1TY2FsZUNvbG9yZWRDbGFzcywgdGhpcy5zY2FsZUNvbG9yTW9kZSA9PSBcImNvbG9yZWRcIilcbiAgICAgICAgICAgIC5hcHBlbmQoaXRlbVJhdGVDb2xvcmVkQ2xhc3MsIHRoaXMucmF0ZUNvbG9yTW9kZSA9PSBcInNjYWxlXCIgJiYgaXNTZWxlY3RlZClcbiAgICAgICAgICAgIC5hcHBlbmQoaXRlbVVuaGlnaGxpZ2h0ZWRDbGFzcywgaXNVbmhpZ2hsaWdodGVkKVxuICAgICAgICAgICAgLmFwcGVuZChpdGVtaXRlbU9uRXJyb3JDbGFzcywgdGhpcy5lcnJvcnMubGVuZ3RoID4gMClcbiAgICAgICAgICAgIC5hcHBlbmQoaXRlbVNtYWxsQ2xhc3MsIHRoaXMuaXRlbVNtYWxsTW9kZSlcbiAgICAgICAgICAgIC5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLml0ZW1GaXhlZFNpemUsIGhhc0ZpeGVkU2l6ZSlcbiAgICAgICAgICAgIC50b1N0cmluZygpO1xuICAgIH07XG4gICAgLy9tZXRob2RzIGZvciBtb2JpbGUgdmlld1xuICAgIFF1ZXN0aW9uUmF0aW5nTW9kZWwucHJvdG90eXBlLmdldENvbnRyb2xDbGFzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5pc0VtcHR5KCk7XG4gICAgICAgIHJldHVybiBuZXcgX3V0aWxzX2Nzc0NsYXNzQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fW1wiQ3NzQ2xhc3NCdWlsZGVyXCJdKClcbiAgICAgICAgICAgIC5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLmNvbnRyb2wpXG4gICAgICAgICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5jb250cm9sRW1wdHksIHRoaXMuaXNFbXB0eSgpKVxuICAgICAgICAgICAgLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMub25FcnJvciwgdGhpcy5lcnJvcnMubGVuZ3RoID4gMClcbiAgICAgICAgICAgIC5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLmNvbnRyb2xEaXNhYmxlZCwgdGhpcy5pc1JlYWRPbmx5KVxuICAgICAgICAgICAgLnRvU3RyaW5nKCk7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25SYXRpbmdNb2RlbC5wcm90b3R5cGUsIFwicGxhY2Vob2xkZXJcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcInJhdGluZ09wdGlvbnNDYXB0aW9uXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwicmF0aW5nT3B0aW9uc0NhcHRpb25cIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblJhdGluZ01vZGVsLnByb3RvdHlwZSwgXCJsb2NQbGFjZWhvbGRlclwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJyYXRpbmdPcHRpb25zQ2FwdGlvblwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblJhdGluZ01vZGVsLnByb3RvdHlwZSwgXCJhbGxvd0NsZWFyXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblJhdGluZ01vZGVsLnByb3RvdHlwZSwgXCJzZWFyY2hFbmFibGVkXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25SYXRpbmdNb2RlbC5wcm90b3R5cGUsIFwicmVuZGVyZWRWYWx1ZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFF1ZXN0aW9uUmF0aW5nTW9kZWwucHJvdG90eXBlLmlzSXRlbVNlbGVjdGVkID0gZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0udmFsdWUgPT0gdGhpcy52YWx1ZTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblJhdGluZ01vZGVsLnByb3RvdHlwZSwgXCJ2aXNpYmxlQ2hvaWNlc1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmlzaWJsZVJhdGVWYWx1ZXM7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25SYXRpbmdNb2RlbC5wcm90b3R5cGUsIFwicmVhZE9ubHlUZXh0XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5yZWFkT25seSlcbiAgICAgICAgICAgICAgICByZXR1cm4gKHRoaXMuZGlzcGxheVZhbHVlIHx8IHRoaXMucGxhY2Vob2xkZXIpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNFbXB0eSgpID8gdGhpcy5wbGFjZWhvbGRlciA6IFwiXCI7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBRdWVzdGlvblJhdGluZ01vZGVsLnByb3RvdHlwZS5uZWVkUmVzcG9uc2l2ZVdpZHRoID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcmF0ZVZhbHVlcyA9IHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInJhdGVWYWx1ZXNcIik7XG4gICAgICAgIHZhciByYXRlU3RlcCA9IHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInJhdGVTdGVwXCIpO1xuICAgICAgICB2YXIgcmF0ZU1heCA9IHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInJhdGVNYXhcIik7XG4gICAgICAgIHZhciByYXRlTWluID0gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicmF0ZU1pblwiKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlzcGxheU1vZGUgIT0gXCJkcm9wZG93blwiICYmICEhKHRoaXMuaGFzTWluUmF0ZURlc2NyaXB0aW9uIHx8XG4gICAgICAgICAgICB0aGlzLmhhc01heFJhdGVEZXNjcmlwdGlvbiB8fFxuICAgICAgICAgICAgKHJhdGVTdGVwICYmIChyYXRlTWF4IC0gcmF0ZU1pbikgLyByYXRlU3RlcCA+IDkpKTtcbiAgICB9O1xuICAgIC8vIFRPRE86IHJldHVybiByZXNwb25zaXZlbmVzcyBhZnRlciBkZXNpZ24gaW1wcm92ZW1lbnRcbiAgICBRdWVzdGlvblJhdGluZ01vZGVsLnByb3RvdHlwZS5zdXBwb3J0UmVzcG9uc2l2ZW5lc3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG4gICAgUXVlc3Rpb25SYXRpbmdNb2RlbC5wcm90b3R5cGUuZ2V0Q29tcGFjdFJlbmRlckFzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuZGlzcGxheU1vZGUgPT0gXCJidXR0b25zXCIpID8gXCJkZWZhdWx0XCIgOiBcImRyb3Bkb3duXCI7XG4gICAgfTtcbiAgICBRdWVzdGlvblJhdGluZ01vZGVsLnByb3RvdHlwZS5nZXREZXNrdG9wUmVuZGVyQXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5kaXNwbGF5TW9kZSA9PSBcImRyb3Bkb3duXCIpID8gXCJkcm9wZG93blwiIDogXCJkZWZhdWx0XCI7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25SYXRpbmdNb2RlbC5wcm90b3R5cGUsIFwiYXJpYUV4cGFuZGVkXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICB2YXIgcG9wdXBNb2RlbCA9IChfYSA9IHRoaXMuZHJvcGRvd25MaXN0TW9kZWwpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5wb3B1cE1vZGVsO1xuICAgICAgICAgICAgaWYgKCFwb3B1cE1vZGVsKVxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgcmV0dXJuIHBvcHVwTW9kZWwuaXNWaXNpYmxlID8gXCJ0cnVlXCIgOiBcImZhbHNlXCI7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25SYXRpbmdNb2RlbC5wcm90b3R5cGUsIFwiZHJvcGRvd25MaXN0TW9kZWxcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRyb3Bkb3duTGlzdE1vZGVsVmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5kcm9wZG93bkxpc3RNb2RlbFZhbHVlID0gdmFsO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVFbGVtZW50Q3NzKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBRdWVzdGlvblJhdGluZ01vZGVsLnByb3RvdHlwZS51cGRhdGVDc3NDbGFzc2VzID0gZnVuY3Rpb24gKHJlcywgY3NzKSB7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUudXBkYXRlQ3NzQ2xhc3Nlcy5jYWxsKHRoaXMsIHJlcywgY3NzKTtcbiAgICAgICAgaWYgKCEhdGhpcy5kcm9wZG93bkxpc3RNb2RlbCkge1xuICAgICAgICAgICAgdmFyIGxpc3RDc3NDbGFzc2VzID0ge307XG4gICAgICAgICAgICBPYmplY3QoX3V0aWxzX3V0aWxzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bXCJtZXJnZVZhbHVlc1wiXSkoY3NzLmxpc3QsIGxpc3RDc3NDbGFzc2VzKTtcbiAgICAgICAgICAgIE9iamVjdChfdXRpbHNfdXRpbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1tcIm1lcmdlVmFsdWVzXCJdKShyZXMubGlzdCwgbGlzdENzc0NsYXNzZXMpO1xuICAgICAgICAgICAgcmVzW1wibGlzdFwiXSA9IGxpc3RDc3NDbGFzc2VzO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBRdWVzdGlvblJhdGluZ01vZGVsLnByb3RvdHlwZS5jYWxjQ3NzQ2xhc3NlcyA9IGZ1bmN0aW9uIChjc3MpIHtcbiAgICAgICAgdmFyIGNsYXNzZXMgPSBfc3VwZXIucHJvdG90eXBlLmNhbGNDc3NDbGFzc2VzLmNhbGwodGhpcywgY3NzKTtcbiAgICAgICAgaWYgKHRoaXMuZHJvcGRvd25MaXN0TW9kZWwpIHtcbiAgICAgICAgICAgIHRoaXMuZHJvcGRvd25MaXN0TW9kZWwudXBkYXRlQ3NzQ2xhc3NlcyhjbGFzc2VzLnBvcHVwLCBjbGFzc2VzLmxpc3QpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbGFzc2VzO1xuICAgIH07XG4gICAgUXVlc3Rpb25SYXRpbmdNb2RlbC5wcm90b3R5cGUuc2V0U3VydmV5SW1wbCA9IGZ1bmN0aW9uICh2YWx1ZSwgaXNMaWdodCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBfc3VwZXIucHJvdG90eXBlLnNldFN1cnZleUltcGwuY2FsbCh0aGlzLCB2YWx1ZSwgaXNMaWdodCk7XG4gICAgICAgIGlmICghdGhpcy5zdXJ2ZXkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMudXBkYXRlQ29sb3JzKHRoaXMuc3VydmV5LnRoZW1lVmFyaWFibGVzKTtcbiAgICAgICAgdGhpcy5zdXJ2ZXkub25UaGVtZUFwcGxpZWQuYWRkKGZ1bmN0aW9uIChzdXJ2ZXksIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIF90aGlzLmNvbG9yc0NhbGN1bGF0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIF90aGlzLnVwZGF0ZUNvbG9ycyhvcHRpb25zLnRoZW1lLmNzc1ZhcmlhYmxlcyk7XG4gICAgICAgICAgICBfdGhpcy5jcmVhdGVSZW5kZXJlZFJhdGVJdGVtcygpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uUmF0aW5nTW9kZWwucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuICAgICAgICBpZiAoISF0aGlzLmRyb3Bkb3duTGlzdE1vZGVsVmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuZHJvcGRvd25MaXN0TW9kZWxWYWx1ZS5kaXNwb3NlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFF1ZXN0aW9uUmF0aW5nTW9kZWwuY29sb3JzQ2FsY3VsYXRlZCA9IGZhbHNlO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QoX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcInByb3BlcnR5XCJdKSh7IGRlZmF1bHRWYWx1ZTogZmFsc2UgfSlcbiAgICBdLCBRdWVzdGlvblJhdGluZ01vZGVsLnByb3RvdHlwZSwgXCJpbnB1dEhhc1ZhbHVlXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wicHJvcGVydHlcIl0pKHsgZGVmYXVsdFZhbHVlOiB0cnVlIH0pXG4gICAgXSwgUXVlc3Rpb25SYXRpbmdNb2RlbC5wcm90b3R5cGUsIFwiYXV0b0dlbmVyYXRlXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wicHJvcGVydHlcIl0pKHsgZGVmYXVsdFZhbHVlOiA1IH0pXG4gICAgXSwgUXVlc3Rpb25SYXRpbmdNb2RlbC5wcm90b3R5cGUsIFwicmF0ZUNvdW50XCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wicHJvcGVydHlBcnJheVwiXSkoKVxuICAgIF0sIFF1ZXN0aW9uUmF0aW5nTW9kZWwucHJvdG90eXBlLCBcInJlbmRlcmVkUmF0ZUl0ZW1zXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wicHJvcGVydHlcIl0pKHsgZGVmYXVsdFZhbHVlOiBmYWxzZSB9KVxuICAgIF0sIFF1ZXN0aW9uUmF0aW5nTW9kZWwucHJvdG90eXBlLCBcImhhc01pblJhdGVEZXNjcmlwdGlvblwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QoX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcInByb3BlcnR5XCJdKSh7IGRlZmF1bHRWYWx1ZTogZmFsc2UgfSlcbiAgICBdLCBRdWVzdGlvblJhdGluZ01vZGVsLnByb3RvdHlwZSwgXCJoYXNNYXhSYXRlRGVzY3JpcHRpb25cIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJwcm9wZXJ0eVwiXSkoeyBkZWZhdWx0VmFsdWU6IGZhbHNlIH0pXG4gICAgXSwgUXVlc3Rpb25SYXRpbmdNb2RlbC5wcm90b3R5cGUsIFwiZGlzcGxheVJhdGVEZXNjcmlwdGlvbnNBc0V4dHJlbWVJdGVtc1wiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QoX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcInByb3BlcnR5XCJdKSh7XG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU6IFwiYXV0b1wiLFxuICAgICAgICAgICAgb25TZXQ6IGZ1bmN0aW9uICh2YWwsIHRhcmdldCkge1xuICAgICAgICAgICAgICAgIGlmICghdGFyZ2V0LmlzRGVzaWduTW9kZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsID09PSBcImRyb3Bkb3duXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC5yZW5kZXJBcyA9IFwiZHJvcGRvd25cIjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC5yZW5kZXJBcyA9IFwiZGVmYXVsdFwiO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgIF0sIFF1ZXN0aW9uUmF0aW5nTW9kZWwucHJvdG90eXBlLCBcImRpc3BsYXlNb2RlXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wicHJvcGVydHlcIl0pKHsgZGVmYXVsdFZhbHVlOiBcImxhYmVsc1wiIH0pXG4gICAgXSwgUXVlc3Rpb25SYXRpbmdNb2RlbC5wcm90b3R5cGUsIFwicmF0ZVR5cGVcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJwcm9wZXJ0eVwiXSkoeyBkZWZhdWx0VmFsdWU6IFwibW9ub2Nocm9tZVwiIH0pXG4gICAgXSwgUXVlc3Rpb25SYXRpbmdNb2RlbC5wcm90b3R5cGUsIFwic2NhbGVDb2xvck1vZGVcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJwcm9wZXJ0eVwiXSkoeyBkZWZhdWx0VmFsdWU6IFwic2NhbGVcIiB9KVxuICAgIF0sIFF1ZXN0aW9uUmF0aW5nTW9kZWwucHJvdG90eXBlLCBcInJhdGVDb2xvck1vZGVcIiwgdm9pZCAwKTtcbiAgICByZXR1cm4gUXVlc3Rpb25SYXRpbmdNb2RlbDtcbn0oX3F1ZXN0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJRdWVzdGlvblwiXSkpO1xuXG5fanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiU2VyaWFsaXplclwiXS5hZGRDbGFzcyhcInJhdGluZ1wiLCBbXG4gICAgeyBuYW1lOiBcInNob3dDb21tZW50QXJlYTpzd2l0Y2hcIiwgbGF5b3V0OiBcInJvd1wiLCB2aXNpYmxlOiB0cnVlLCBjYXRlZ29yeTogXCJnZW5lcmFsXCIgfSxcbiAgICB7XG4gICAgICAgIG5hbWU6IFwicmF0ZVR5cGVcIixcbiAgICAgICAgYWx0ZXJuYXRpdmVOYW1lOiBcInJhdGVEaXNwbGF5TW9kZVwiLFxuICAgICAgICBkZWZhdWx0OiBcImxhYmVsc1wiLFxuICAgICAgICBjYXRlZ29yeTogXCJyYXRlVmFsdWVzXCIsXG4gICAgICAgIGNob2ljZXM6IFtcImxhYmVsc1wiLCBcInN0YXJzXCIsIFwic21pbGV5c1wiXSxcbiAgICAgICAgdmlzaWJsZUluZGV4OiAwXG4gICAgfSxcbiAgICB7XG4gICAgICAgIG5hbWU6IFwic2NhbGVDb2xvck1vZGVcIixcbiAgICAgICAgY2F0ZWdvcnk6IFwicmF0ZVZhbHVlc1wiLFxuICAgICAgICBkZWZhdWx0OiBcIm1vbm9jaHJvbWVcIixcbiAgICAgICAgY2hvaWNlczogW1wibW9ub2Nocm9tZVwiLCBcImNvbG9yZWRcIl0sXG4gICAgICAgIHZpc2libGVJZjogZnVuY3Rpb24gKG9iaikge1xuICAgICAgICAgICAgcmV0dXJuIG9iai5yYXRlRGlzcGxheU1vZGUgPT0gXCJzbWlsZXlzXCI7XG4gICAgICAgIH0sXG4gICAgICAgIHZpc2libGVJbmRleDogMVxuICAgIH0sXG4gICAge1xuICAgICAgICBuYW1lOiBcInJhdGVDb2xvck1vZGVcIixcbiAgICAgICAgY2F0ZWdvcnk6IFwicmF0ZVZhbHVlc1wiLFxuICAgICAgICBkZWZhdWx0OiBcInNjYWxlXCIsXG4gICAgICAgIGNob2ljZXM6IFtcImRlZmF1bHRcIiwgXCJzY2FsZVwiXSxcbiAgICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICByZXR1cm4gb2JqLnJhdGVEaXNwbGF5TW9kZSA9PSBcInNtaWxleXNcIiAmJiBvYmouc2NhbGVDb2xvck1vZGUgPT0gXCJtb25vY2hyb21lXCI7XG4gICAgICAgIH0sXG4gICAgICAgIHZpc2libGVJbmRleDogMlxuICAgIH0sXG4gICAge1xuICAgICAgICBuYW1lOiBcImF1dG9HZW5lcmF0ZVwiLFxuICAgICAgICBjYXRlZ29yeTogXCJyYXRlVmFsdWVzXCIsXG4gICAgICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgICAgIGNob2ljZXM6IFt0cnVlLCBmYWxzZV0sXG4gICAgICAgIHZpc2libGVJbmRleDogNFxuICAgIH0sXG4gICAge1xuICAgICAgICBuYW1lOiBcInJhdGVDb3VudDpudW1iZXJcIixcbiAgICAgICAgZGVmYXVsdDogNSxcbiAgICAgICAgY2F0ZWdvcnk6IFwicmF0ZVZhbHVlc1wiLFxuICAgICAgICB2aXNpYmxlSW5kZXg6IDMsXG4gICAgICAgIG9uU2V0dGluZ1ZhbHVlOiBmdW5jdGlvbiAob2JqLCB2YWwpIHtcbiAgICAgICAgICAgIGlmICh2YWwgPCAyKVxuICAgICAgICAgICAgICAgIHJldHVybiAyO1xuICAgICAgICAgICAgaWYgKHZhbCA+IF9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fW1wic2V0dGluZ3NcIl0ucmF0aW5nTWF4aW11bVJhdGVWYWx1ZUNvdW50ICYmIHZhbCA+IG9iai5yYXRlVmFsdWVzLmxlbmd0aClcbiAgICAgICAgICAgICAgICByZXR1cm4gX3NldHRpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bXCJzZXR0aW5nc1wiXS5yYXRpbmdNYXhpbXVtUmF0ZVZhbHVlQ291bnQ7XG4gICAgICAgICAgICBpZiAodmFsID4gMTAgJiYgb2JqLnJhdGVEaXNwbGF5TW9kZSA9PSBcInNtaWxleXNcIilcbiAgICAgICAgICAgICAgICByZXR1cm4gMTA7XG4gICAgICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgICBuYW1lOiBcInJhdGVWYWx1ZXM6aXRlbXZhbHVlW11cIixcbiAgICAgICAgYmFzZVZhbHVlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gX3N1cnZleVN0cmluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1tcInN1cnZleUxvY2FsaXphdGlvblwiXS5nZXRTdHJpbmcoXCJjaG9pY2VzX0l0ZW1cIik7XG4gICAgICAgIH0sXG4gICAgICAgIGNhdGVnb3J5OiBcInJhdGVWYWx1ZXNcIixcbiAgICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICByZXR1cm4gIW9iai5hdXRvR2VuZXJhdGU7XG4gICAgICAgIH0sXG4gICAgICAgIHZpc2libGVJbmRleDogNVxuICAgIH0sXG4gICAge1xuICAgICAgICBuYW1lOiBcInJhdGVNaW46bnVtYmVyXCIsIGRlZmF1bHQ6IDEsXG4gICAgICAgIG9uU2V0dGluZ1ZhbHVlOiBmdW5jdGlvbiAob2JqLCB2YWwpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWwgPiBvYmoucmF0ZU1heCAtIG9iai5yYXRlU3RlcCA/IG9iai5yYXRlTWF4IC0gb2JqLnJhdGVTdGVwIDogdmFsO1xuICAgICAgICB9LFxuICAgICAgICB2aXNpYmxlSWY6IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgIHJldHVybiAhIW9iai5hdXRvR2VuZXJhdGU7XG4gICAgICAgIH0sXG4gICAgICAgIHZpc2libGVJbmRleDogNlxuICAgIH0sXG4gICAge1xuICAgICAgICBuYW1lOiBcInJhdGVNYXg6bnVtYmVyXCIsIGRlZmF1bHQ6IDUsXG4gICAgICAgIG9uU2V0dGluZ1ZhbHVlOiBmdW5jdGlvbiAob2JqLCB2YWwpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWwgPCBvYmoucmF0ZU1pbiArIG9iai5yYXRlU3RlcCA/IG9iai5yYXRlTWluICsgb2JqLnJhdGVTdGVwIDogdmFsO1xuICAgICAgICB9LFxuICAgICAgICB2aXNpYmxlSWY6IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgIHJldHVybiAhIW9iai5hdXRvR2VuZXJhdGU7XG4gICAgICAgIH0sXG4gICAgICAgIHZpc2libGVJbmRleDogN1xuICAgIH0sXG4gICAge1xuICAgICAgICBuYW1lOiBcInJhdGVTdGVwOm51bWJlclwiLCBkZWZhdWx0OiAxLCBtaW5WYWx1ZTogMC4xLFxuICAgICAgICBvblNldHRpbmdWYWx1ZTogZnVuY3Rpb24gKG9iaiwgdmFsKSB7XG4gICAgICAgICAgICBpZiAodmFsIDw9IDApXG4gICAgICAgICAgICAgICAgdmFsID0gMTtcbiAgICAgICAgICAgIGlmICh2YWwgPiBvYmoucmF0ZU1heCAtIG9iai5yYXRlTWluKVxuICAgICAgICAgICAgICAgIHZhbCA9IG9iai5yYXRlTWF4IC0gb2JqLnJhdGVNaW47XG4gICAgICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgICB9LFxuICAgICAgICB2aXNpYmxlSWY6IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgIHJldHVybiAhIW9iai5hdXRvR2VuZXJhdGU7XG4gICAgICAgIH0sXG4gICAgICAgIHZpc2libGVJbmRleDogOFxuICAgIH0sXG4gICAge1xuICAgICAgICBuYW1lOiBcIm1pblJhdGVEZXNjcmlwdGlvblwiLFxuICAgICAgICBhbHRlcm5hdGl2ZU5hbWU6IFwibWluaW51bVJhdGVEZXNjcmlwdGlvblwiLFxuICAgICAgICBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jTWluUmF0ZURlc2NyaXB0aW9uXCIsXG4gICAgICAgIHZpc2libGVJbmRleDogMTdcbiAgICB9LFxuICAgIHtcbiAgICAgICAgbmFtZTogXCJtYXhSYXRlRGVzY3JpcHRpb25cIixcbiAgICAgICAgYWx0ZXJuYXRpdmVOYW1lOiBcIm1heGltdW1SYXRlRGVzY3JpcHRpb25cIixcbiAgICAgICAgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY01heFJhdGVEZXNjcmlwdGlvblwiLFxuICAgICAgICB2aXNpYmxlSW5kZXg6IDE4XG4gICAgfSxcbiAgICB7XG4gICAgICAgIG5hbWU6IFwiZGlzcGxheVJhdGVEZXNjcmlwdGlvbnNBc0V4dHJlbWVJdGVtczpib29sZWFuXCIsXG4gICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgICB2aXNpYmxlSW5kZXg6IDE5LFxuICAgICAgICB2aXNpYmxlSWY6IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgIHJldHVybiBvYmoucmF0ZVR5cGUgPT0gXCJsYWJlbHNcIjtcbiAgICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgICBuYW1lOiBcImRpc3BsYXlNb2RlXCIsXG4gICAgICAgIGRlZmF1bHQ6IFwiYXV0b1wiLFxuICAgICAgICBjaG9pY2VzOiBbXCJhdXRvXCIsIFwiYnV0dG9uc1wiLCBcImRyb3Bkb3duXCJdLFxuICAgICAgICB2aXNpYmxlSW5kZXg6IDIwXG4gICAgfVxuXSwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25SYXRpbmdNb2RlbChcIlwiKTtcbn0sIFwicXVlc3Rpb25cIik7XG5fcXVlc3Rpb25mYWN0b3J5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJRdWVzdGlvbkZhY3RvcnlcIl0uSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcInJhdGluZ1wiLCBmdW5jdGlvbiAobmFtZSkge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25SYXRpbmdNb2RlbChuYW1lKTtcbn0pO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3F1ZXN0aW9uX3NpZ25hdHVyZXBhZC50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvcXVlc3Rpb25fc2lnbmF0dXJlcGFkLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBRdWVzdGlvblNpZ25hdHVyZVBhZE1vZGVsICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlF1ZXN0aW9uU2lnbmF0dXJlUGFkTW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBRdWVzdGlvblNpZ25hdHVyZVBhZE1vZGVsOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9qc29ub2JqZWN0ICovIFwiLi9zcmMvanNvbm9iamVjdC50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcXVlc3Rpb25mYWN0b3J5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3F1ZXN0aW9uZmFjdG9yeSAqLyBcIi4vc3JjL3F1ZXN0aW9uZmFjdG9yeS50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcXVlc3Rpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcXVlc3Rpb24gKi8gXCIuL3NyYy9xdWVzdGlvbi50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBzaWduYXR1cmVfcGFkX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBzaWduYXR1cmVfcGFkICovIFwiLi9ub2RlX21vZHVsZXMvc2lnbmF0dXJlX3BhZC9kaXN0L3NpZ25hdHVyZV9wYWQuanNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3V0aWxzX2Nzc0NsYXNzQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi91dGlscy9jc3NDbGFzc0J1aWxkZXIgKi8gXCIuL3NyYy91dGlscy9jc3NDbGFzc0J1aWxkZXIudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2NvbnNvbGVfd2FybmluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vY29uc29sZS13YXJuaW5ncyAqLyBcIi4vc3JjL2NvbnNvbGUtd2FybmluZ3MudHNcIik7XG52YXIgX19leHRlbmRzID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbnZhciBfX2RlY29yYXRlID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn07XG5cblxuXG5cblxuXG52YXIgZGVmYXVsdFdpZHRoID0gMzAwO1xudmFyIGRlZmF1bHRIZWlnaHQgPSAyMDA7XG5mdW5jdGlvbiByZXNpemVDYW52YXMoY2FudmFzKSB7XG4gICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xuICAgIHZhciBkZXZpY2VQaXhlbFJhdGlvID0gd2luZG93LmRldmljZVBpeGVsUmF0aW8gfHwgMTtcbiAgICB2YXIgYmFja2luZ1N0b3JlUmF0aW8gPSBjb250ZXh0LndlYmtpdEJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgY29udGV4dC5tb3pCYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgIGNvbnRleHQubXNCYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgIGNvbnRleHQub0JhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgY29udGV4dC5iYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgIDE7XG4gICAgdmFyIHJhdGlvID0gZGV2aWNlUGl4ZWxSYXRpbyAvIGJhY2tpbmdTdG9yZVJhdGlvO1xuICAgIHZhciBvbGRXaWR0aCA9IGNhbnZhcy53aWR0aDtcbiAgICB2YXIgb2xkSGVpZ2h0ID0gY2FudmFzLmhlaWdodDtcbiAgICBjYW52YXMud2lkdGggPSBvbGRXaWR0aCAqIHJhdGlvO1xuICAgIGNhbnZhcy5oZWlnaHQgPSBvbGRIZWlnaHQgKiByYXRpbztcbiAgICBjYW52YXMuc3R5bGUud2lkdGggPSBvbGRXaWR0aCArIFwicHhcIjtcbiAgICBjYW52YXMuc3R5bGUuaGVpZ2h0ID0gb2xkSGVpZ2h0ICsgXCJweFwiO1xuICAgIGNvbnRleHQuc2NhbGUocmF0aW8sIHJhdGlvKTtcbn1cbi8qKlxuICogQSBjbGFzcyB0aGF0IGRlc2NyaWJlcyB0aGUgU2lnbmF0dXJlIHF1ZXN0aW9uIHR5cGUuXG4gKlxuICogW1ZpZXcgRGVtb10oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZXhhbXBsZXMvc2lnbmF0dXJlLXBhZC13aWRnZXQtamF2YXNjcmlwdC8gKGxpbmtTdHlsZSkpXG4gKi9cbnZhciBRdWVzdGlvblNpZ25hdHVyZVBhZE1vZGVsID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhRdWVzdGlvblNpZ25hdHVyZVBhZE1vZGVsLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFF1ZXN0aW9uU2lnbmF0dXJlUGFkTW9kZWwobmFtZSkge1xuICAgICAgICByZXR1cm4gX3N1cGVyLmNhbGwodGhpcywgbmFtZSkgfHwgdGhpcztcbiAgICB9XG4gICAgUXVlc3Rpb25TaWduYXR1cmVQYWRNb2RlbC5wcm90b3R5cGUuZ2V0UGVuQ29sb3JGcm9tVGhlbWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfc3VydmV5ID0gdGhpcy5zdXJ2ZXk7XG4gICAgICAgIHJldHVybiAhIV9zdXJ2ZXkgJiYgISFfc3VydmV5LnRoZW1lVmFyaWFibGVzICYmIF9zdXJ2ZXkudGhlbWVWYXJpYWJsZXNbXCItLXNqcy1wcmltYXJ5LWJhY2tjb2xvclwiXTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uU2lnbmF0dXJlUGFkTW9kZWwucHJvdG90eXBlLnVwZGF0ZUNvbG9ycyA9IGZ1bmN0aW9uIChzaWduYXR1cmVQYWQpIHtcbiAgICAgICAgdmFyIHBlbkNvbG9yRnJvbVRoZW1lID0gdGhpcy5nZXRQZW5Db2xvckZyb21UaGVtZSgpO1xuICAgICAgICB2YXIgcGVuQ29sb3JQcm9wZXJ0eSA9IHRoaXMuZ2V0UHJvcGVydHlCeU5hbWUoXCJwZW5Db2xvclwiKTtcbiAgICAgICAgc2lnbmF0dXJlUGFkLnBlbkNvbG9yID0gdGhpcy5wZW5Db2xvciB8fCBwZW5Db2xvckZyb21UaGVtZSB8fCBwZW5Db2xvclByb3BlcnR5LmRlZmF1bHRWYWx1ZSB8fCBcIiMxYWIzOTRcIjtcbiAgICAgICAgdmFyIGJhY2tncm91bmRDb2xvclByb3BlcnR5ID0gdGhpcy5nZXRQcm9wZXJ0eUJ5TmFtZShcImJhY2tncm91bmRDb2xvclwiKTtcbiAgICAgICAgdmFyIGJhY2tncm91bmRDb2xvckZyb21UaGVtZSA9IHBlbkNvbG9yRnJvbVRoZW1lID8gXCJ0cmFuc3BhcmVudFwiIDogdW5kZWZpbmVkO1xuICAgICAgICB2YXIgYmFja2dyb3VuZCA9ICEhdGhpcy5iYWNrZ3JvdW5kSW1hZ2UgPyBcInRyYW5zcGFyZW50XCIgOiB0aGlzLmJhY2tncm91bmRDb2xvcjtcbiAgICAgICAgc2lnbmF0dXJlUGFkLmJhY2tncm91bmRDb2xvciA9IGJhY2tncm91bmQgfHwgYmFja2dyb3VuZENvbG9yRnJvbVRoZW1lIHx8IGJhY2tncm91bmRDb2xvclByb3BlcnR5LmRlZmF1bHRWYWx1ZSB8fCBcIiNmZmZmZmZcIjtcbiAgICB9O1xuICAgIFF1ZXN0aW9uU2lnbmF0dXJlUGFkTW9kZWwucHJvdG90eXBlLmdldENzc1Jvb3QgPSBmdW5jdGlvbiAoY3NzQ2xhc3Nlcykge1xuICAgICAgICByZXR1cm4gbmV3IF91dGlsc19jc3NDbGFzc0J1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1tcIkNzc0NsYXNzQnVpbGRlclwiXSgpXG4gICAgICAgICAgICAuYXBwZW5kKF9zdXBlci5wcm90b3R5cGUuZ2V0Q3NzUm9vdC5jYWxsKHRoaXMsIGNzc0NsYXNzZXMpKVxuICAgICAgICAgICAgLmFwcGVuZChjc3NDbGFzc2VzLnNtYWxsLCB0aGlzLnNpZ25hdHVyZVdpZHRoLnRvU3RyaW5nKCkgPT09IFwiMzAwXCIpXG4gICAgICAgICAgICAudG9TdHJpbmcoKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uU2lnbmF0dXJlUGFkTW9kZWwucHJvdG90eXBlLnVwZGF0ZVZhbHVlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5zaWduYXR1cmVQYWQpIHtcbiAgICAgICAgICAgIHZhciBmb3JtYXQgPSB0aGlzLmRhdGFGb3JtYXQgPT09IFwianBlZ1wiID8gXCJpbWFnZS9qcGVnXCIgOlxuICAgICAgICAgICAgICAgICh0aGlzLmRhdGFGb3JtYXQgPT09IFwic3ZnXCIgPyBcImltYWdlL3N2Zyt4bWxcIiA6IFwiXCIpO1xuICAgICAgICAgICAgdmFyIGRhdGEgPSB0aGlzLnNpZ25hdHVyZVBhZC50b0RhdGFVUkwoZm9ybWF0KTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBkYXRhO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBRdWVzdGlvblNpZ25hdHVyZVBhZE1vZGVsLnByb3RvdHlwZS5nZXRUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gXCJzaWduYXR1cmVwYWRcIjtcbiAgICB9O1xuICAgIFF1ZXN0aW9uU2lnbmF0dXJlUGFkTW9kZWwucHJvdG90eXBlLmFmdGVyUmVuZGVyUXVlc3Rpb25FbGVtZW50ID0gZnVuY3Rpb24gKGVsKSB7XG4gICAgICAgIGlmICghIWVsKSB7XG4gICAgICAgICAgICB0aGlzLmluaXRTaWduYXR1cmVQYWQoZWwpO1xuICAgICAgICB9XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUuYWZ0ZXJSZW5kZXJRdWVzdGlvbkVsZW1lbnQuY2FsbCh0aGlzLCBlbCk7XG4gICAgfTtcbiAgICBRdWVzdGlvblNpZ25hdHVyZVBhZE1vZGVsLnByb3RvdHlwZS5iZWZvcmVEZXN0cm95UXVlc3Rpb25FbGVtZW50ID0gZnVuY3Rpb24gKGVsKSB7XG4gICAgICAgIGlmICghIWVsKSB7XG4gICAgICAgICAgICB0aGlzLmRlc3Ryb3lTaWduYXR1cmVQYWQoZWwpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBRdWVzdGlvblNpZ25hdHVyZVBhZE1vZGVsLnByb3RvdHlwZS5zZXRTdXJ2ZXlJbXBsID0gZnVuY3Rpb24gKHZhbHVlLCBpc0xpZ2h0KSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUuc2V0U3VydmV5SW1wbC5jYWxsKHRoaXMsIHZhbHVlLCBpc0xpZ2h0KTtcbiAgICAgICAgaWYgKCF0aGlzLnN1cnZleSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5zdXJ2ZXkub25UaGVtZUFwcGxpZWQuYWRkKGZ1bmN0aW9uIChzdXJ2ZXksIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmICghIV90aGlzLnNpZ25hdHVyZVBhZCkge1xuICAgICAgICAgICAgICAgIF90aGlzLnVwZGF0ZUNvbG9ycyhfdGhpcy5zaWduYXR1cmVQYWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uU2lnbmF0dXJlUGFkTW9kZWwucHJvdG90eXBlLmluaXRTaWduYXR1cmVQYWQgPSBmdW5jdGlvbiAoZWwpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIGNhbnZhcyA9IGVsLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiY2FudmFzXCIpWzBdO1xuICAgICAgICB2YXIgc2lnbmF0dXJlUGFkID0gbmV3IHNpZ25hdHVyZV9wYWRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcImRlZmF1bHRcIl0oY2FudmFzLCB7IGJhY2tncm91bmRDb2xvcjogXCIjZmZmZmZmXCIgfSk7XG4gICAgICAgIGlmICh0aGlzLmlzSW5wdXRSZWFkT25seSkge1xuICAgICAgICAgICAgc2lnbmF0dXJlUGFkLm9mZigpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVhZE9ubHlDaGFuZ2VkQ2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoX3RoaXMuaXNJbnB1dFJlYWRPbmx5KSB7XG4gICAgICAgICAgICAgICAgc2lnbmF0dXJlUGFkLm9mZigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgc2lnbmF0dXJlUGFkLm9uKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMudXBkYXRlQ29sb3JzKHNpZ25hdHVyZVBhZCk7XG4gICAgICAgIHNpZ25hdHVyZVBhZC5hZGRFdmVudExpc3RlbmVyKFwiYmVnaW5TdHJva2VcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMuaXNEcmF3aW5nVmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgY2FudmFzLmZvY3VzKCk7XG4gICAgICAgIH0sIHsgb25jZTogZmFsc2UgfSk7XG4gICAgICAgIHNpZ25hdHVyZVBhZC5hZGRFdmVudExpc3RlbmVyKFwiZW5kU3Ryb2tlXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLmlzRHJhd2luZ1ZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICBfdGhpcy51cGRhdGVWYWx1ZSgpO1xuICAgICAgICB9LCB7IG9uY2U6IGZhbHNlIH0pO1xuICAgICAgICB2YXIgdXBkYXRlVmFsdWVIYW5kbGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGRhdGEgPSBfdGhpcy52YWx1ZTtcbiAgICAgICAgICAgIGNhbnZhcy53aWR0aCA9IF90aGlzLnNpZ25hdHVyZVdpZHRoIHx8IGRlZmF1bHRXaWR0aDtcbiAgICAgICAgICAgIGNhbnZhcy5oZWlnaHQgPSBfdGhpcy5zaWduYXR1cmVIZWlnaHQgfHwgZGVmYXVsdEhlaWdodDtcbiAgICAgICAgICAgIHJlc2l6ZUNhbnZhcyhjYW52YXMpO1xuICAgICAgICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgICAgICAgICAgc2lnbmF0dXJlUGFkLmNsZWFyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzaWduYXR1cmVQYWQuZnJvbURhdGFVUkwoZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHVwZGF0ZVZhbHVlSGFuZGxlcigpO1xuICAgICAgICB0aGlzLnJlYWRPbmx5Q2hhbmdlZENhbGxiYWNrKCk7XG4gICAgICAgIHRoaXMuc2lnbmF0dXJlUGFkID0gc2lnbmF0dXJlUGFkO1xuICAgICAgICB2YXIgcHJvcGVydHlDaGFuZ2VkSGFuZGxlciA9IGZ1bmN0aW9uIChzZW5kZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLm5hbWUgPT09IFwic2lnbmF0dXJlV2lkdGhcIiB8fCBvcHRpb25zLm5hbWUgPT09IFwic2lnbmF0dXJlSGVpZ2h0XCIgfHwgb3B0aW9ucy5uYW1lID09PSBcInZhbHVlXCIpIHtcbiAgICAgICAgICAgICAgICB1cGRhdGVWYWx1ZUhhbmRsZXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5vblByb3BlcnR5Q2hhbmdlZC5hZGQocHJvcGVydHlDaGFuZ2VkSGFuZGxlcik7XG4gICAgICAgIHRoaXMuc2lnbmF0dXJlUGFkLnByb3BlcnR5Q2hhbmdlZEhhbmRsZXIgPSBwcm9wZXJ0eUNoYW5nZWRIYW5kbGVyO1xuICAgIH07XG4gICAgUXVlc3Rpb25TaWduYXR1cmVQYWRNb2RlbC5wcm90b3R5cGUuZGVzdHJveVNpZ25hdHVyZVBhZCA9IGZ1bmN0aW9uIChlbCkge1xuICAgICAgICBpZiAodGhpcy5zaWduYXR1cmVQYWQpIHtcbiAgICAgICAgICAgIHRoaXMub25Qcm9wZXJ0eUNoYW5nZWQucmVtb3ZlKHRoaXMuc2lnbmF0dXJlUGFkLnByb3BlcnR5Q2hhbmdlZEhhbmRsZXIpO1xuICAgICAgICAgICAgdGhpcy5zaWduYXR1cmVQYWQub2ZmKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZWFkT25seUNoYW5nZWRDYWxsYmFjayA9IG51bGw7XG4gICAgICAgIHRoaXMuc2lnbmF0dXJlUGFkID0gbnVsbDtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblNpZ25hdHVyZVBhZE1vZGVsLnByb3RvdHlwZSwgXCJkYXRhRm9ybWF0XCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB0aGUgZm9ybWF0IGluIHdoaWNoIHRvIHN0b3JlIHRoZSBzaWduYXR1cmUgaW1hZ2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIFBvc3NpYmxlIHZhbHVlczpcbiAgICAgICAgICpcbiAgICAgICAgICogLSBgXCJwbmdcImAgKGRlZmF1bHQpXG4gICAgICAgICAqIC0gYFwianBlZ1wiYFxuICAgICAgICAgKiAtIGBcInN2Z1wiYFxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiZGF0YUZvcm1hdFwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJkYXRhRm9ybWF0XCIsIGNvcnJlY3RGb3JtYXREYXRhKHZhbCkpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uU2lnbmF0dXJlUGFkTW9kZWwucHJvdG90eXBlLCBcInNpZ25hdHVyZVdpZHRoXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB0aGUgd2lkdGggb2YgdGhlIHNpZ25hdHVyZSBhcmVhLiBBY2NlcHRzIHBvc2l0aXZlIGludGVnZXIgbnVtYmVycy5cbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInNpZ25hdHVyZVdpZHRoXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInNpZ25hdHVyZVdpZHRoXCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25TaWduYXR1cmVQYWRNb2RlbC5wcm90b3R5cGUsIFwic2lnbmF0dXJlSGVpZ2h0XCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB0aGUgaGVpZ2h0IG9mIHRoZSBzaWduYXR1cmUgYXJlYS4gQWNjZXB0cyBwb3NpdGl2ZSBpbnRlZ2VyIG51bWJlcnMuXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzaWduYXR1cmVIZWlnaHRcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwic2lnbmF0dXJlSGVpZ2h0XCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25TaWduYXR1cmVQYWRNb2RlbC5wcm90b3R5cGUsIFwiaGVpZ2h0XCIsIHtcbiAgICAgICAgLy90b2RvOiBuZWVkIHRvIHJlbW92ZSB0aGlzIHByb3BlcnR5XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImhlaWdodFwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJoZWlnaHRcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblNpZ25hdHVyZVBhZE1vZGVsLnByb3RvdHlwZSwgXCJhbGxvd0NsZWFyXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB3aGV0aGVyIHRvIGRpc3BsYXkgYSBidXR0b24gdGhhdCBjbGVhcnMgdGhlIHNpZ25hdHVyZSBhcmVhLlxuICAgICAgICAgKlxuICAgICAgICAgKiBEZWZhdWx0IHZhbHVlOiBgdHJ1ZWBcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImFsbG93Q2xlYXJcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiYWxsb3dDbGVhclwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uU2lnbmF0dXJlUGFkTW9kZWwucHJvdG90eXBlLCBcImNhblNob3dDbGVhckJ1dHRvblwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuICF0aGlzLmlzSW5wdXRSZWFkT25seSAmJiB0aGlzLmFsbG93Q2xlYXI7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25TaWduYXR1cmVQYWRNb2RlbC5wcm90b3R5cGUsIFwicGVuQ29sb3JcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIGEgY29sb3IgZm9yIHRoZSBwZW4uXG4gICAgICAgICAqXG4gICAgICAgICAqIFRoaXMgcHJvcGVydHkgYWNjZXB0cyBjb2xvciB2YWx1ZXMgaW4gdGhlIGZvbGxvd2luZyBmb3JtYXRzOlxuICAgICAgICAgKlxuICAgICAgICAgKiAtIEhleGFkZWNpbWFsIGNvbG9ycyAoYFwiI0ZGMDAwMFwiYClcbiAgICAgICAgICogLSBSR0IgY29sb3JzIChgXCJyZ2IoMjU1LDAsMClcImApXG4gICAgICAgICAqIC0gQ29sb3IgbmFtZXMgKGBcInJlZFwiYClcbiAgICAgICAgICogQHNlZSBiYWNrZ3JvdW5kQ29sb3JcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInBlbkNvbG9yXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInBlbkNvbG9yXCIsIHZhbCk7XG4gICAgICAgICAgICAhIXRoaXMuc2lnbmF0dXJlUGFkICYmIHRoaXMudXBkYXRlQ29sb3JzKHRoaXMuc2lnbmF0dXJlUGFkKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblNpZ25hdHVyZVBhZE1vZGVsLnByb3RvdHlwZSwgXCJiYWNrZ3JvdW5kQ29sb3JcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIGEgY29sb3IgZm9yIHRoZSBzaWduYXR1cmUgYXJlYSBiYWNrZ3JvdW5kLiBJZ25vcmVkIGlmIFtgYmFja2dyb3VuZEltYWdlYF0oI2JhY2tncm91bmRJbWFnZSkgaXMgc2V0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBUaGlzIHByb3BlcnR5IGFjY2VwdHMgY29sb3IgdmFsdWVzIGluIHRoZSBmb2xsb3dpbmcgZm9ybWF0czpcbiAgICAgICAgICpcbiAgICAgICAgICogLSBIZXhhZGVjaW1hbCBjb2xvcnMgKGBcIiNGRjAwMDBcImApXG4gICAgICAgICAqIC0gUkdCIGNvbG9ycyAoYFwicmdiKDI1NSwwLDApXCJgKVxuICAgICAgICAgKiAtIENvbG9yIG5hbWVzIChgXCJyZWRcImApXG4gICAgICAgICAqIEBzZWUgcGVuQ29sb3JcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImJhY2tncm91bmRDb2xvclwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJiYWNrZ3JvdW5kQ29sb3JcIiwgdmFsKTtcbiAgICAgICAgICAgICEhdGhpcy5zaWduYXR1cmVQYWQgJiYgdGhpcy51cGRhdGVDb2xvcnModGhpcy5zaWduYXR1cmVQYWQpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uU2lnbmF0dXJlUGFkTW9kZWwucHJvdG90eXBlLCBcImJhY2tncm91bmRJbWFnZVwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBbiBpbWFnZSB0byBkaXNwbGF5IGluIHRoZSBiYWNrZ3JvdW5kIG9mIHRoZSBzaWduYXR1cmUgYXJlYS4gQWNjZXB0cyBhIGJhc2U2NCBvciBVUkwgc3RyaW5nIHZhbHVlLlxuICAgICAgICAgKiBAc2VlIGJhY2tncm91bmRDb2xvclxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiYmFja2dyb3VuZEltYWdlXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImJhY2tncm91bmRJbWFnZVwiLCB2YWwpO1xuICAgICAgICAgICAgISF0aGlzLnNpZ25hdHVyZVBhZCAmJiB0aGlzLnVwZGF0ZUNvbG9ycyh0aGlzLnNpZ25hdHVyZVBhZCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25TaWduYXR1cmVQYWRNb2RlbC5wcm90b3R5cGUsIFwiY2xlYXJCdXR0b25DYXB0aW9uXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YXRpb25TdHJpbmcoXCJjbGVhckNhcHRpb25cIik7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBRdWVzdGlvblNpZ25hdHVyZVBhZE1vZGVsLnByb3RvdHlwZS5uZWVkU2hvd1BsYWNlaG9sZGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gIXRoaXMuaXNEcmF3aW5nVmFsdWUgJiYgdGhpcy5pc0VtcHR5KCk7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25TaWduYXR1cmVQYWRNb2RlbC5wcm90b3R5cGUsIFwicGxhY2VIb2xkZXJUZXh0XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YXRpb25TdHJpbmcoXCJzaWduYXR1cmVQbGFjZUhvbGRlclwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFF1ZXN0aW9uU2lnbmF0dXJlUGFkTW9kZWwucHJvdG90eXBlLmVuZExvYWRpbmdGcm9tSnNvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5lbmRMb2FkaW5nRnJvbUpzb24uY2FsbCh0aGlzKTtcbiAgICAgICAgLy90b2RvOiBuZWVkIHRvIHJlbW92ZSB0aGlzIGNvZGVcbiAgICAgICAgaWYgKHRoaXMuc2lnbmF0dXJlV2lkdGggPT09IDMwMCAmJiAhIXRoaXMud2lkdGggJiYgdHlwZW9mIHRoaXMud2lkdGggPT09IFwibnVtYmVyXCIgJiYgdGhpcy53aWR0aCkge1xuICAgICAgICAgICAgX2NvbnNvbGVfd2FybmluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1tcIkNvbnNvbGVXYXJuaW5nc1wiXS53YXJuKFwiVXNlIHNpZ25hdHVyZVdpZHRoIHByb3BlcnR5IHRvIHNldCB3aWR0aCBmb3IgdGhlIHNpZ25hdHVyZSBwYWRcIik7XG4gICAgICAgICAgICB0aGlzLnNpZ25hdHVyZVdpZHRoID0gdGhpcy53aWR0aDtcbiAgICAgICAgICAgIHRoaXMud2lkdGggPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc2lnbmF0dXJlSGVpZ2h0ID09PSAyMDAgJiYgISF0aGlzLmhlaWdodCkge1xuICAgICAgICAgICAgX2NvbnNvbGVfd2FybmluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1tcIkNvbnNvbGVXYXJuaW5nc1wiXS53YXJuKFwiVXNlIHNpZ25hdHVyZUhlaWdodCBwcm9wZXJ0eSB0byBzZXQgd2lkdGggZm9yIHRoZSBzaWduYXR1cmUgcGFkXCIpO1xuICAgICAgICAgICAgdGhpcy5zaWduYXR1cmVIZWlnaHQgPSB0aGlzLmhlaWdodDtcbiAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJwcm9wZXJ0eVwiXSkoeyBkZWZhdWx0VmFsdWU6IGZhbHNlIH0pXG4gICAgXSwgUXVlc3Rpb25TaWduYXR1cmVQYWRNb2RlbC5wcm90b3R5cGUsIFwiaXNEcmF3aW5nVmFsdWVcIiwgdm9pZCAwKTtcbiAgICByZXR1cm4gUXVlc3Rpb25TaWduYXR1cmVQYWRNb2RlbDtcbn0oX3F1ZXN0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJRdWVzdGlvblwiXSkpO1xuXG5mdW5jdGlvbiBjb3JyZWN0Rm9ybWF0RGF0YSh2YWwpIHtcbiAgICBpZiAoIXZhbClcbiAgICAgICAgdmFsID0gXCJwbmdcIjtcbiAgICB2YWwgPSB2YWwucmVwbGFjZShcImltYWdlL1wiLCBcIlwiKS5yZXBsYWNlKFwiK3htbFwiLCBcIlwiKTtcbiAgICBpZiAodmFsICE9PSBcImpwZWdcIiAmJiB2YWwgIT09IFwic3ZnXCIpXG4gICAgICAgIHZhbCA9IFwicG5nXCI7XG4gICAgcmV0dXJuIHZhbDtcbn1cbl9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJTZXJpYWxpemVyXCJdLmFkZENsYXNzKFwic2lnbmF0dXJlcGFkXCIsIFtcbiAgICB7XG4gICAgICAgIG5hbWU6IFwic2lnbmF0dXJlV2lkdGg6bnVtYmVyXCIsXG4gICAgICAgIGNhdGVnb3J5OiBcImdlbmVyYWxcIixcbiAgICAgICAgZGVmYXVsdDogMzAwLFxuICAgIH0sXG4gICAge1xuICAgICAgICBuYW1lOiBcInNpZ25hdHVyZUhlaWdodDpudW1iZXJcIixcbiAgICAgICAgY2F0ZWdvcnk6IFwiZ2VuZXJhbFwiLFxuICAgICAgICBkZWZhdWx0OiAyMDAsXG4gICAgfSxcbiAgICAvL25lZWQgdG8gcmVtb3ZlIHRoaXMgcHJvcGVydHlcbiAgICB7XG4gICAgICAgIG5hbWU6IFwiaGVpZ2h0Om51bWJlclwiLFxuICAgICAgICBjYXRlZ29yeTogXCJnZW5lcmFsXCIsXG4gICAgICAgIHZpc2libGU6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICAgIG5hbWU6IFwiYWxsb3dDbGVhcjpib29sZWFuXCIsXG4gICAgICAgIGNhdGVnb3J5OiBcImdlbmVyYWxcIixcbiAgICAgICAgZGVmYXVsdDogdHJ1ZSxcbiAgICB9LFxuICAgIHtcbiAgICAgICAgbmFtZTogXCJiYWNrZ3JvdW5kSW1hZ2VcIixcbiAgICAgICAgY2F0ZWdvcnk6IFwiZ2VuZXJhbFwiLFxuICAgIH0sXG4gICAge1xuICAgICAgICBuYW1lOiBcInBlbkNvbG9yOmNvbG9yXCIsXG4gICAgICAgIGNhdGVnb3J5OiBcImdlbmVyYWxcIixcbiAgICB9LFxuICAgIHtcbiAgICAgICAgbmFtZTogXCJiYWNrZ3JvdW5kQ29sb3I6Y29sb3JcIixcbiAgICAgICAgY2F0ZWdvcnk6IFwiZ2VuZXJhbFwiLFxuICAgIH0sXG4gICAge1xuICAgICAgICBuYW1lOiBcImRhdGFGb3JtYXRcIixcbiAgICAgICAgY2F0ZWdvcnk6IFwiZ2VuZXJhbFwiLFxuICAgICAgICBkZWZhdWx0OiBcInBuZ1wiLFxuICAgICAgICBjaG9pY2VzOiBbXG4gICAgICAgICAgICB7IHZhbHVlOiBcInBuZ1wiLCB0ZXh0OiBcIlBOR1wiIH0sXG4gICAgICAgICAgICB7IHZhbHVlOiBcImltYWdlL2pwZWdcIiwgdGV4dDogXCJKUEVHXCIgfSxcbiAgICAgICAgICAgIHsgdmFsdWU6IFwiaW1hZ2Uvc3ZnK3htbFwiLCB0ZXh0OiBcIlNWR1wiIH0sXG4gICAgICAgIF0sXG4gICAgICAgIG9uU2V0dGluZ1ZhbHVlOiBmdW5jdGlvbiAob2JqLCB2YWwpIHtcbiAgICAgICAgICAgIHJldHVybiBjb3JyZWN0Rm9ybWF0RGF0YSh2YWwpO1xuICAgICAgICB9XG4gICAgfSxcbiAgICB7IG5hbWU6IFwiZGVmYXVsdFZhbHVlXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcImNvcnJlY3RBbnN3ZXJcIiwgdmlzaWJsZTogZmFsc2UgfSxcbl0sIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uU2lnbmF0dXJlUGFkTW9kZWwoXCJcIik7XG59LCBcInF1ZXN0aW9uXCIpO1xuX3F1ZXN0aW9uZmFjdG9yeV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiUXVlc3Rpb25GYWN0b3J5XCJdLkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJzaWduYXR1cmVwYWRcIiwgZnVuY3Rpb24gKG5hbWUpIHtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uU2lnbmF0dXJlUGFkTW9kZWwobmFtZSk7XG59KTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9xdWVzdGlvbl90YWdib3gudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3F1ZXN0aW9uX3RhZ2JveC50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogUXVlc3Rpb25UYWdib3hNb2RlbCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJRdWVzdGlvblRhZ2JveE1vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUXVlc3Rpb25UYWdib3hNb2RlbDsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vanNvbm9iamVjdCAqLyBcIi4vc3JjL2pzb25vYmplY3QudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3F1ZXN0aW9uZmFjdG9yeV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9xdWVzdGlvbmZhY3RvcnkgKi8gXCIuL3NyYy9xdWVzdGlvbmZhY3RvcnkudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3V0aWxzX2Nzc0NsYXNzQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi91dGlscy9jc3NDbGFzc0J1aWxkZXIgKi8gXCIuL3NyYy91dGlscy9jc3NDbGFzc0J1aWxkZXIudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3F1ZXN0aW9uX2NoZWNrYm94X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3F1ZXN0aW9uX2NoZWNrYm94ICovIFwiLi9zcmMvcXVlc3Rpb25fY2hlY2tib3gudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Ryb3Bkb3duTXVsdGlTZWxlY3RMaXN0TW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZHJvcGRvd25NdWx0aVNlbGVjdExpc3RNb2RlbCAqLyBcIi4vc3JjL2Ryb3Bkb3duTXVsdGlTZWxlY3RMaXN0TW9kZWwudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NldHRpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3NldHRpbmdzICovIFwiLi9zcmMvc2V0dGluZ3MudHNcIik7XG52YXIgX19leHRlbmRzID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbnZhciBfX2RlY29yYXRlID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn07XG5cblxuXG5cblxuXG4vKipcbiAqIEEgY2xhc3MgdGhhdCBkZXNjcmliZXMgdGhlIE11bHRpLVNlbGVjdCBEcm9wZG93biAoVGFnIEJveCkgcXVlc3Rpb24gdHlwZS5cbiAqXG4gKiBbVmlldyBEZW1vXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9leGFtcGxlcy9ob3ctdG8tY3JlYXRlLW11bHRpc2VsZWN0LXRhZy1ib3gvIChsaW5rU3R5bGUpKVxuICovXG52YXIgUXVlc3Rpb25UYWdib3hNb2RlbCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoUXVlc3Rpb25UYWdib3hNb2RlbCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBRdWVzdGlvblRhZ2JveE1vZGVsKG5hbWUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbmFtZSkgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuaXRlbURpc3BsYXlOYW1lTWFwID0ge307XG4gICAgICAgIF90aGlzLm9uT3BlbmVkID0gX3RoaXMuYWRkRXZlbnQoKTtcbiAgICAgICAgX3RoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJwbGFjZWhvbGRlclwiLCBfdGhpcywgZmFsc2UsIHRydWUpO1xuICAgICAgICBfdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcImNsZWFyQ2FwdGlvblwiLCBfdGhpcywgZmFsc2UsIHRydWUpO1xuICAgICAgICBfdGhpcy5yZWdpc3RlclByb3BlcnR5Q2hhbmdlZEhhbmRsZXJzKFtcInZhbHVlXCIsIFwicmVuZGVyQXNcIiwgXCJzaG93T3RoZXJJdGVtXCIsIFwib3RoZXJUZXh0XCIsIFwicGxhY2Vob2xkZXJcIiwgXCJjaG9pY2VzXCIsIFwidmlzaWJsZUNob2ljZXNcIl0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLnVwZGF0ZVJlYWRPbmx5VGV4dCgpO1xuICAgICAgICB9KTtcbiAgICAgICAgX3RoaXMudXBkYXRlUmVhZE9ubHlUZXh0KCk7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgUXVlc3Rpb25UYWdib3hNb2RlbC5wcm90b3R5cGUubG9jU3Ryc0NoYW5nZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5sb2NTdHJzQ2hhbmdlZC5jYWxsKHRoaXMpO1xuICAgICAgICB0aGlzLnVwZGF0ZVJlYWRPbmx5VGV4dCgpO1xuICAgICAgICAoX2EgPSB0aGlzLmRyb3Bkb3duTGlzdE1vZGVsKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubG9jU3Ryc0NoYW5nZWQoKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uVGFnYm94TW9kZWwucHJvdG90eXBlLnVwZGF0ZVJlYWRPbmx5VGV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5yZWFkT25seVRleHQgPSB0aGlzLmRpc3BsYXlWYWx1ZSB8fCB0aGlzLnBsYWNlaG9sZGVyO1xuICAgIH07XG4gICAgUXVlc3Rpb25UYWdib3hNb2RlbC5wcm90b3R5cGUuZ2V0RGVmYXVsdEl0ZW1Db21wb25lbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgIH07XG4gICAgUXVlc3Rpb25UYWdib3hNb2RlbC5wcm90b3R5cGUub25TdXJ2ZXlMb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBfc3VwZXIucHJvdG90eXBlLm9uU3VydmV5TG9hZC5jYWxsKHRoaXMpO1xuICAgICAgICBpZiAoIXRoaXMuZHJvcGRvd25MaXN0TW9kZWwpIHtcbiAgICAgICAgICAgIHRoaXMuZHJvcGRvd25MaXN0TW9kZWwgPSBuZXcgX2Ryb3Bkb3duTXVsdGlTZWxlY3RMaXN0TW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1tcIkRyb3Bkb3duTXVsdGlTZWxlY3RMaXN0TW9kZWxcIl0odGhpcyk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblRhZ2JveE1vZGVsLnByb3RvdHlwZSwgXCJwbGFjZWhvbGRlclwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBIHRleHQgZGlzcGxheWVkIGluIHRoZSBpbnB1dCBmaWVsZCB3aGVuIGl0IGRvZXNuJ3QgaGF2ZSBhIHZhbHVlLlxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJwbGFjZWhvbGRlclwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcInBsYWNlaG9sZGVyXCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25UYWdib3hNb2RlbC5wcm90b3R5cGUsIFwibG9jUGxhY2Vob2xkZXJcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwicGxhY2Vob2xkZXJcIik7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25UYWdib3hNb2RlbC5wcm90b3R5cGUsIFwiY2xlYXJDYXB0aW9uXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJjbGVhckNhcHRpb25cIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImNsZWFyQ2FwdGlvblwiLCB2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25UYWdib3hNb2RlbC5wcm90b3R5cGUsIFwibG9jQ2xlYXJDYXB0aW9uXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcImNsZWFyQ2FwdGlvblwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFF1ZXN0aW9uVGFnYm94TW9kZWwucHJvdG90eXBlLmdldFR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBcInRhZ2JveFwiO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uVGFnYm94TW9kZWwucHJvdG90eXBlLCBcImFyaWFSb2xlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJjb21ib2JveFwiO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uVGFnYm94TW9kZWwucHJvdG90eXBlLCBcInBvcHVwTW9kZWxcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHJldHVybiAoX2EgPSB0aGlzLmRyb3Bkb3duTGlzdE1vZGVsKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EucG9wdXBNb2RlbDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblRhZ2JveE1vZGVsLnByb3RvdHlwZSwgXCJhcmlhRXhwYW5kZWRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBwb3B1cE1vZGVsID0gdGhpcy5wb3B1cE1vZGVsO1xuICAgICAgICAgICAgcmV0dXJuICEhcG9wdXBNb2RlbCAmJiBwb3B1cE1vZGVsLmlzVmlzaWJsZSA/IFwidHJ1ZVwiIDogXCJmYWxzZVwiO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUXVlc3Rpb25UYWdib3hNb2RlbC5wcm90b3R5cGUuZ2V0Q29udHJvbENsYXNzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gbmV3IF91dGlsc19jc3NDbGFzc0J1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIkNzc0NsYXNzQnVpbGRlclwiXSgpXG4gICAgICAgICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5jb250cm9sKVxuICAgICAgICAgICAgLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMuY29udHJvbEVtcHR5LCB0aGlzLmlzRW1wdHkoKSlcbiAgICAgICAgICAgIC5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLm9uRXJyb3IsIHRoaXMuZXJyb3JzLmxlbmd0aCA+IDApXG4gICAgICAgICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5jb250cm9sRGlzYWJsZWQsIHRoaXMuaXNSZWFkT25seSlcbiAgICAgICAgICAgIC50b1N0cmluZygpO1xuICAgIH07XG4gICAgUXVlc3Rpb25UYWdib3hNb2RlbC5wcm90b3R5cGUub25PcGVuZWRDYWxsQmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5vbk9wZW5lZC5maXJlKHRoaXMsIHsgcXVlc3Rpb246IHRoaXMsIGNob2ljZXM6IHRoaXMuY2hvaWNlcyB9KTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uVGFnYm94TW9kZWwucHJvdG90eXBlLmhhc1Vua25vd25WYWx1ZSA9IGZ1bmN0aW9uICh2YWwsIGluY2x1ZGVPdGhlciwgaXNGaWx0ZXJlZENob2ljZXMsIGNoZWNrRW1wdHlWYWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5jaG9pY2VzTGF6eUxvYWRFbmFibGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUuaGFzVW5rbm93blZhbHVlLmNhbGwodGhpcywgdmFsLCBpbmNsdWRlT3RoZXIsIGlzRmlsdGVyZWRDaG9pY2VzLCBjaGVja0VtcHR5VmFsdWUpO1xuICAgIH07XG4gICAgUXVlc3Rpb25UYWdib3hNb2RlbC5wcm90b3R5cGUubmVlZENvbnZlcnRSZW5kZXJlZE90aGVyVG9EYXRhVmFsdWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgdmFyIHZhbCA9IChfYSA9IHRoaXMub3RoZXJWYWx1ZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRyaW0oKTtcbiAgICAgICAgaWYgKCF2YWwpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLmhhc1Vua25vd25WYWx1ZS5jYWxsKHRoaXMsIHZhbCwgdHJ1ZSwgZmFsc2UpO1xuICAgIH07XG4gICAgUXVlc3Rpb25UYWdib3hNb2RlbC5wcm90b3R5cGUub25WaXNpYmxlQ2hvaWNlc0NoYW5nZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUub25WaXNpYmxlQ2hvaWNlc0NoYW5nZWQuY2FsbCh0aGlzKTtcbiAgICAgICAgaWYgKHRoaXMucG9wdXBNb2RlbCkge1xuICAgICAgICAgICAgdGhpcy5kcm9wZG93bkxpc3RNb2RlbC51cGRhdGVJdGVtcygpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBRdWVzdGlvblRhZ2JveE1vZGVsLnByb3RvdHlwZS5nZXRJdGVtSWZDaG9pY2VzTm90Q29udGFpblRoaXNWYWx1ZSA9IGZ1bmN0aW9uICh2YWx1ZSwgdGV4dCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmICh0aGlzLmNob2ljZXNMYXp5TG9hZEVuYWJsZWQgJiYgISgoX2EgPSB0aGlzLmRyb3Bkb3duTGlzdE1vZGVsKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuaXNBbGxEYXRhTG9hZGVkKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlSXRlbVZhbHVlKHZhbHVlLCB0ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLmdldEl0ZW1JZkNob2ljZXNOb3RDb250YWluVGhpc1ZhbHVlLmNhbGwodGhpcywgdmFsdWUsIHRleHQpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBRdWVzdGlvblRhZ2JveE1vZGVsLnByb3RvdHlwZS52YWxpZGF0ZUl0ZW1WYWx1ZXMgPSBmdW5jdGlvbiAoaXRlbVZhbHVlcykge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB0aGlzLnVwZGF0ZUl0ZW1EaXNwbGF5TmFtZU1hcCgpO1xuICAgICAgICB2YXIgdmFsID0gdGhpcy5yZW5kZXJlZFZhbHVlO1xuICAgICAgICBpZiAoISFpdGVtVmFsdWVzLmxlbmd0aCAmJiBpdGVtVmFsdWVzLmxlbmd0aCA9PT0gdmFsLmxlbmd0aClcbiAgICAgICAgICAgIHJldHVybiBpdGVtVmFsdWVzO1xuICAgICAgICB2YXIgc2VsZWN0ZWRJdGVtVmFsdWVzID0gdGhpcy5zZWxlY3RlZEl0ZW1WYWx1ZXM7XG4gICAgICAgIGlmICghaXRlbVZhbHVlcy5sZW5ndGggJiYgISFzZWxlY3RlZEl0ZW1WYWx1ZXMgJiYgISFzZWxlY3RlZEl0ZW1WYWx1ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRTZWxlY3RlZEl0ZW1WYWx1ZXMgPSBbXS5jb25jYXQoc2VsZWN0ZWRJdGVtVmFsdWVzKTtcbiAgICAgICAgICAgIHJldHVybiBzZWxlY3RlZEl0ZW1WYWx1ZXM7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGl0ZW1WYWx1ZVZhbHVlcyA9IGl0ZW1WYWx1ZXMubWFwKGZ1bmN0aW9uIChpVikgeyByZXR1cm4gaVYudmFsdWU7IH0pO1xuICAgICAgICB2YWwuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7IHJldHVybiBpdGVtVmFsdWVWYWx1ZXMuaW5kZXhPZihpdGVtKSA9PT0gLTE7IH0pLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICAgIHZhciBuZXdJdGVtID0gX3RoaXMuZ2V0SXRlbUlmQ2hvaWNlc05vdENvbnRhaW5UaGlzVmFsdWUoaXRlbSwgX3RoaXMuaXRlbURpc3BsYXlOYW1lTWFwW2l0ZW1dKTtcbiAgICAgICAgICAgIGlmIChuZXdJdGVtKSB7XG4gICAgICAgICAgICAgICAgaXRlbVZhbHVlcy5wdXNoKG5ld0l0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaXRlbVZhbHVlcy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiB2YWwuaW5kZXhPZihhLnZhbHVlKSAtIHZhbC5pbmRleE9mKGIudmFsdWUpOyB9KTtcbiAgICAgICAgcmV0dXJuIGl0ZW1WYWx1ZXM7XG4gICAgfTtcbiAgICBRdWVzdGlvblRhZ2JveE1vZGVsLnByb3RvdHlwZS51cGRhdGVJdGVtRGlzcGxheU5hbWVNYXAgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBmdW5jID0gZnVuY3Rpb24gKGl0ZW0pIHsgX3RoaXMuaXRlbURpc3BsYXlOYW1lTWFwW2l0ZW0udmFsdWVdID0gaXRlbS50ZXh0OyB9O1xuICAgICAgICAodGhpcy5kZWZhdWx0U2VsZWN0ZWRJdGVtVmFsdWVzIHx8IFtdKS5mb3JFYWNoKGZ1bmMpO1xuICAgICAgICAodGhpcy5zZWxlY3RlZEl0ZW1WYWx1ZXMgfHwgW10pLmZvckVhY2goZnVuYyk7XG4gICAgICAgIHRoaXMudmlzaWJsZUNob2ljZXMuZm9yRWFjaChmdW5jKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uVGFnYm94TW9kZWwucHJvdG90eXBlLmdldEZpcnN0SW5wdXRFbGVtZW50SWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlucHV0SWQgKyAodGhpcy5zZWFyY2hFbmFibGVkID8gXCJfMFwiIDogXCJcIik7XG4gICAgfTtcbiAgICBRdWVzdGlvblRhZ2JveE1vZGVsLnByb3RvdHlwZS5nZXRJbnB1dElkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnB1dElkICsgXCJfMFwiO1xuICAgIH07XG4gICAgUXVlc3Rpb25UYWdib3hNb2RlbC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG4gICAgICAgIGlmICghIXRoaXMuZHJvcGRvd25MaXN0TW9kZWxWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5kcm9wZG93bkxpc3RNb2RlbFZhbHVlLmRpc3Bvc2UoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgUXVlc3Rpb25UYWdib3hNb2RlbC5wcm90b3R5cGUuY2xlYXJWYWx1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5jbGVhclZhbHVlLmNhbGwodGhpcyk7XG4gICAgICAgIHRoaXMuZHJvcGRvd25MaXN0TW9kZWwuY2xlYXIoKTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblRhZ2JveE1vZGVsLnByb3RvdHlwZSwgXCJpc05ld0ExMXlTdHJ1Y3R1cmVcIiwge1xuICAgICAgICAvL2ExMXlcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJwcm9wZXJ0eVwiXSkoeyBkZWZhdWx0VmFsdWU6IFwiXCIgfSlcbiAgICBdLCBRdWVzdGlvblRhZ2JveE1vZGVsLnByb3RvdHlwZSwgXCJyZWFkT25seVRleHRcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJwcm9wZXJ0eVwiXSkoKVxuICAgIF0sIFF1ZXN0aW9uVGFnYm94TW9kZWwucHJvdG90eXBlLCBcImFsbG93Q2xlYXJcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJwcm9wZXJ0eVwiXSkoe1xuICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiB0cnVlLFxuICAgICAgICAgICAgb25TZXQ6IGZ1bmN0aW9uIChuZXdWYWx1ZSwgdGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgaWYgKCEhdGFyZ2V0LmRyb3Bkb3duTGlzdE1vZGVsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldC5kcm9wZG93bkxpc3RNb2RlbC5zZXRTZWFyY2hFbmFibGVkKG5ld1ZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgXSwgUXVlc3Rpb25UYWdib3hNb2RlbC5wcm90b3R5cGUsIFwic2VhcmNoRW5hYmxlZFwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QoX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInByb3BlcnR5XCJdKSh7XG4gICAgICAgICAgICBvblNldDogZnVuY3Rpb24gKG5ld1ZhbHVlLCB0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICBpZiAoISF0YXJnZXQuZHJvcGRvd25MaXN0TW9kZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LmRyb3Bkb3duTGlzdE1vZGVsLnNldEhpZGVTZWxlY3RlZEl0ZW1zKG5ld1ZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgXSwgUXVlc3Rpb25UYWdib3hNb2RlbC5wcm90b3R5cGUsIFwiaGlkZVNlbGVjdGVkSXRlbXNcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJwcm9wZXJ0eVwiXSkoKVxuICAgIF0sIFF1ZXN0aW9uVGFnYm94TW9kZWwucHJvdG90eXBlLCBcImNob2ljZXNMYXp5TG9hZEVuYWJsZWRcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJwcm9wZXJ0eVwiXSkoeyBkZWZhdWx0VmFsdWU6IDI1IH0pXG4gICAgXSwgUXVlc3Rpb25UYWdib3hNb2RlbC5wcm90b3R5cGUsIFwiY2hvaWNlc0xhenlMb2FkUGFnZVNpemVcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJwcm9wZXJ0eVwiXSkoeyBnZXREZWZhdWx0VmFsdWU6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fW1wic2V0dGluZ3NcIl0udGFnYm94Q2xvc2VPblNlbGVjdDsgfSB9KVxuICAgIF0sIFF1ZXN0aW9uVGFnYm94TW9kZWwucHJvdG90eXBlLCBcImNsb3NlT25TZWxlY3RcIiwgdm9pZCAwKTtcbiAgICByZXR1cm4gUXVlc3Rpb25UYWdib3hNb2RlbDtcbn0oX3F1ZXN0aW9uX2NoZWNrYm94X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJRdWVzdGlvbkNoZWNrYm94TW9kZWxcIl0pKTtcblxuX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlNlcmlhbGl6ZXJcIl0uYWRkQ2xhc3MoXCJ0YWdib3hcIiwgW1xuICAgIHsgbmFtZTogXCJwbGFjZWhvbGRlclwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jUGxhY2Vob2xkZXJcIiB9LFxuICAgIHsgbmFtZTogXCJhbGxvd0NsZWFyOmJvb2xlYW5cIiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIHsgbmFtZTogXCJzZWFyY2hFbmFibGVkOmJvb2xlYW5cIiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIHsgbmFtZTogXCJjaG9pY2VzTGF6eUxvYWRFbmFibGVkOmJvb2xlYW5cIiwgZGVmYXVsdDogZmFsc2UsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcImNob2ljZXNMYXp5TG9hZFBhZ2VTaXplOm51bWJlclwiLCBkZWZhdWx0OiAyNSwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwiaGlkZVNlbGVjdGVkSXRlbXM6Ym9vbGVhblwiLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHsgbmFtZTogXCJjbG9zZU9uU2VsZWN0OmJvb2xlYW5cIiB9LFxuICAgIHsgbmFtZTogXCJpdGVtQ29tcG9uZW50XCIsIHZpc2libGU6IGZhbHNlLCBkZWZhdWx0OiBcIlwiIH1cbl0sIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uVGFnYm94TW9kZWwoXCJcIik7XG59LCBcImNoZWNrYm94XCIpO1xuX3F1ZXN0aW9uZmFjdG9yeV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiUXVlc3Rpb25GYWN0b3J5XCJdLkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJ0YWdib3hcIiwgZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB2YXIgcSA9IG5ldyBRdWVzdGlvblRhZ2JveE1vZGVsKG5hbWUpO1xuICAgIHEuY2hvaWNlcyA9IF9xdWVzdGlvbmZhY3RvcnlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlF1ZXN0aW9uRmFjdG9yeVwiXS5EZWZhdWx0Q2hvaWNlcztcbiAgICByZXR1cm4gcTtcbn0pO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3F1ZXN0aW9uX3RleHQudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9xdWVzdGlvbl90ZXh0LnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogUXVlc3Rpb25UZXh0TW9kZWwgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUXVlc3Rpb25UZXh0TW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBRdWVzdGlvblRleHRNb2RlbDsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3F1ZXN0aW9uZmFjdG9yeV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9xdWVzdGlvbmZhY3RvcnkgKi8gXCIuL3NyYy9xdWVzdGlvbmZhY3RvcnkudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vanNvbm9iamVjdCAqLyBcIi4vc3JjL2pzb25vYmplY3QudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2xvY2FsaXphYmxlc3RyaW5nX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2xvY2FsaXphYmxlc3RyaW5nICovIFwiLi9zcmMvbG9jYWxpemFibGVzdHJpbmcudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2hlbHBlcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vaGVscGVycyAqLyBcIi4vc3JjL2hlbHBlcnMudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3ZhbGlkYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi92YWxpZGF0b3IgKi8gXCIuL3NyYy92YWxpZGF0b3IudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Vycm9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2Vycm9yICovIFwiLi9zcmMvZXJyb3IudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NldHRpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3NldHRpbmdzICovIFwiLi9zcmMvc2V0dGluZ3MudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3F1ZXN0aW9uX3RleHRiYXNlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3F1ZXN0aW9uX3RleHRiYXNlICovIFwiLi9zcmMvcXVlc3Rpb25fdGV4dGJhc2UudHNcIik7XG52YXIgX19leHRlbmRzID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcblxuXG5cblxuXG5cblxuXG4vKipcbiAqIEEgY2xhc3MgdGhhdCBkZXNjcmliZXMgdGhlIFNpbmdsZS1MaW5lIElucHV0IHF1ZXN0aW9uIHR5cGUuXG4gKlxuICogW1ZpZXcgRGVtb10oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZXhhbXBsZXMvcXVlc3Rpb250eXBlLXRleHQvIChsaW5rU3R5bGUpKVxuICovXG52YXIgUXVlc3Rpb25UZXh0TW9kZWwgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFF1ZXN0aW9uVGV4dE1vZGVsLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFF1ZXN0aW9uVGV4dE1vZGVsKG5hbWUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbmFtZSkgfHwgdGhpcztcbiAgICAgICAgLy93ZWItYmFzZWQgbWV0aG9kc1xuICAgICAgICBfdGhpcy5faXNXYWl0aW5nRm9yRW50ZXIgPSBmYWxzZTtcbiAgICAgICAgX3RoaXMub25Db21wb3NpdGlvblVwZGF0ZSA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgaWYgKF90aGlzLmlzSW5wdXRUZXh0VXBkYXRlKSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIF90aGlzLnVwZGF0ZVZhbHVlT25FdmVudChldmVudCk7XG4gICAgICAgICAgICAgICAgfSwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBfdGhpcy51cGRhdGVSZW1haW5pbmdDaGFyYWN0ZXJDb3VudGVyKGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gICAgICAgIH07XG4gICAgICAgIF90aGlzLm9uS2V5VXAgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgIGlmIChfdGhpcy5pc0lucHV0VGV4dFVwZGF0ZSkge1xuICAgICAgICAgICAgICAgIGlmICghX3RoaXMuX2lzV2FpdGluZ0ZvckVudGVyIHx8IGV2ZW50LmtleUNvZGUgPT09IDEzKSB7XG4gICAgICAgICAgICAgICAgICAgIF90aGlzLnVwZGF0ZVZhbHVlT25FdmVudChldmVudCk7XG4gICAgICAgICAgICAgICAgICAgIF90aGlzLl9pc1dhaXRpbmdGb3JFbnRlciA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChldmVudC5rZXlDb2RlID09PSAxMykge1xuICAgICAgICAgICAgICAgICAgICBfdGhpcy51cGRhdGVWYWx1ZU9uRXZlbnQoZXZlbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF90aGlzLnVwZGF0ZVJlbWFpbmluZ0NoYXJhY3RlckNvdW50ZXIoZXZlbnQudGFyZ2V0LnZhbHVlKTtcbiAgICAgICAgfTtcbiAgICAgICAgX3RoaXMub25LZXlEb3duID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICBfdGhpcy5jaGVja0ZvclVuZG8oZXZlbnQpO1xuICAgICAgICAgICAgaWYgKF90aGlzLmlzSW5wdXRUZXh0VXBkYXRlKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMuX2lzV2FpdGluZ0ZvckVudGVyID0gZXZlbnQua2V5Q29kZSA9PT0gMjI5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX3RoaXMub25UZXh0S2V5RG93bkhhbmRsZXIoZXZlbnQpO1xuICAgICAgICB9O1xuICAgICAgICBfdGhpcy5vbkNoYW5nZSA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgaWYgKGV2ZW50LnRhcmdldCA9PT0gX3NldHRpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bXCJzZXR0aW5nc1wiXS5lbnZpcm9ubWVudC5yb290LmFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBpZiAoX3RoaXMuaXNJbnB1dFRleHRVcGRhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMudXBkYXRlVmFsdWVPbkV2ZW50KGV2ZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBfdGhpcy51cGRhdGVWYWx1ZU9uRXZlbnQoZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX3RoaXMudXBkYXRlUmVtYWluaW5nQ2hhcmFjdGVyQ291bnRlcihldmVudC50YXJnZXQudmFsdWUpO1xuICAgICAgICB9O1xuICAgICAgICBfdGhpcy5vbkJsdXIgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgIF90aGlzLnVwZGF0ZVZhbHVlT25FdmVudChldmVudCk7XG4gICAgICAgICAgICBfdGhpcy51cGRhdGVSZW1haW5pbmdDaGFyYWN0ZXJDb3VudGVyKGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gICAgICAgIH07XG4gICAgICAgIF90aGlzLm9uRm9jdXMgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgIF90aGlzLnVwZGF0ZVJlbWFpbmluZ0NoYXJhY3RlckNvdW50ZXIoZXZlbnQudGFyZ2V0LnZhbHVlKTtcbiAgICAgICAgfTtcbiAgICAgICAgX3RoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJtaW5FcnJvclRleHRcIiwgX3RoaXMsIHRydWUsIFwibWluRXJyb3JcIik7XG4gICAgICAgIF90aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwibWF4RXJyb3JUZXh0XCIsIF90aGlzLCB0cnVlLCBcIm1heEVycm9yXCIpO1xuICAgICAgICBfdGhpcy5sb2NEYXRhTGlzdFZhbHVlID0gbmV3IF9sb2NhbGl6YWJsZXN0cmluZ19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiTG9jYWxpemFibGVTdHJpbmdzXCJdKF90aGlzKTtcbiAgICAgICAgX3RoaXMubG9jRGF0YUxpc3RWYWx1ZS5vblZhbHVlQ2hhbmdlZCA9IGZ1bmN0aW9uIChvbGRWYWx1ZSwgbmV3VmFsdWUpIHtcbiAgICAgICAgICAgIF90aGlzLnByb3BlcnR5VmFsdWVDaGFuZ2VkKFwiZGF0YUxpc3RcIiwgb2xkVmFsdWUsIG5ld1ZhbHVlKTtcbiAgICAgICAgfTtcbiAgICAgICAgX3RoaXMucmVnaXN0ZXJQcm9wZXJ0eUNoYW5nZWRIYW5kbGVycyhbXCJtaW5cIiwgXCJtYXhcIiwgXCJpbnB1dFR5cGVcIiwgXCJtaW5WYWx1ZUV4cHJlc3Npb25cIiwgXCJtYXhWYWx1ZUV4cHJlc3Npb25cIl0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLnNldFJlbmRlcmVkTWluTWF4KCk7XG4gICAgICAgIH0pO1xuICAgICAgICBfdGhpcy5yZWdpc3RlclByb3BlcnR5Q2hhbmdlZEhhbmRsZXJzKFtcImlucHV0VHlwZVwiLCBcInNpemVcIl0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLnVwZGF0ZUlucHV0U2l6ZSgpO1xuICAgICAgICAgICAgX3RoaXMuY2FsY1JlbmRlcmVkUGxhY2Vob2xkZXIoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgUXVlc3Rpb25UZXh0TW9kZWwucHJvdG90eXBlLmlzVGV4dFZhbHVlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gW1widGV4dFwiLCBcIm51bWJlclwiLCBcInBhc3N3b3JkXCJdLmluZGV4T2YodGhpcy5pbnB1dFR5cGUpID4gLTE7XG4gICAgfTtcbiAgICBRdWVzdGlvblRleHRNb2RlbC5wcm90b3R5cGUuZ2V0VHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIFwidGV4dFwiO1xuICAgIH07XG4gICAgUXVlc3Rpb25UZXh0TW9kZWwucHJvdG90eXBlLm9uU3VydmV5TG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5vblN1cnZleUxvYWQuY2FsbCh0aGlzKTtcbiAgICAgICAgdGhpcy5zZXRSZW5kZXJlZE1pbk1heCgpO1xuICAgICAgICB0aGlzLnVwZGF0ZUlucHV0U2l6ZSgpO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uVGV4dE1vZGVsLnByb3RvdHlwZSwgXCJpbnB1dFR5cGVcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogQSB2YWx1ZSBwYXNzZWQgb24gdG8gdGhlIFtgdHlwZWBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnB1dCNpbnB1dF90eXBlcykgYXR0cmlidXRlIG9mIHRoZSB1bmRlcmx5aW5nIGA8aW5wdXQ+YCBlbGVtZW50LlxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaW5wdXRUeXBlXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHZhbCA9IHZhbC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgaWYgKHZhbCA9PT0gXCJkYXRldGltZV9sb2NhbFwiIHx8IHZhbCA9PT0gXCJkYXRldGltZVwiKVxuICAgICAgICAgICAgICAgIHZhbCA9IFwiZGF0ZXRpbWUtbG9jYWxcIjtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImlucHV0VHlwZVwiLCB2YWwudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNMb2FkaW5nRnJvbUpzb24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1pbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB0aGlzLm1heCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB0aGlzLnN0ZXAgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBRdWVzdGlvblRleHRNb2RlbC5wcm90b3R5cGUuZ2V0TWF4TGVuZ3RoID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5pbnB1dFR5cGUgIT09IFwidGV4dFwiKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLmdldE1heExlbmd0aC5jYWxsKHRoaXMpO1xuICAgIH07XG4gICAgUXVlc3Rpb25UZXh0TW9kZWwucHJvdG90eXBlLnJ1bkNvbmRpdGlvbiA9IGZ1bmN0aW9uICh2YWx1ZXMsIHByb3BlcnRpZXMpIHtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5ydW5Db25kaXRpb24uY2FsbCh0aGlzLCB2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgICAgICBpZiAoISF0aGlzLm1pblZhbHVlRXhwcmVzc2lvbiB8fCAhIXRoaXMubWF4VmFsdWVFeHByZXNzaW9uKSB7XG4gICAgICAgICAgICB0aGlzLnNldFJlbmRlcmVkTWluTWF4KHZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFF1ZXN0aW9uVGV4dE1vZGVsLnByb3RvdHlwZS5pc0xheW91dFR5cGVTdXBwb3J0ZWQgPSBmdW5jdGlvbiAobGF5b3V0VHlwZSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblRleHRNb2RlbC5wcm90b3R5cGUsIFwic2l6ZVwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBIHZhbHVlIHBhc3NlZCBvbiB0byB0aGUgW2BzaXplYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9BdHRyaWJ1dGVzL3NpemUpIGF0dHJpYnV0ZSBvZiB0aGUgdW5kZXJseWluZyBgPGlucHV0PmAgZWxlbWVudC5cbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInNpemVcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwic2l6ZVwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uVGV4dE1vZGVsLnByb3RvdHlwZSwgXCJpc1RleHRJbnB1dFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIChbXCJ0ZXh0XCIsIFwic2VhcmNoXCIsIFwidGVsXCIsIFwidXJsXCIsIFwiZW1haWxcIiwgXCJwYXNzd29yZFwiXS5pbmRleE9mKHRoaXMuaW5wdXRUeXBlKSA+IC0xKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblRleHRNb2RlbC5wcm90b3R5cGUsIFwiaW5wdXRTaXplXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaW5wdXRTaXplXCIsIDApO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uVGV4dE1vZGVsLnByb3RvdHlwZSwgXCJyZW5kZXJlZElucHV0U2l6ZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImlucHV0U2l6ZVwiKSB8fCBudWxsO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uVGV4dE1vZGVsLnByb3RvdHlwZSwgXCJpbnB1dFdpZHRoXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaW5wdXRXaWR0aFwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFF1ZXN0aW9uVGV4dE1vZGVsLnByb3RvdHlwZS51cGRhdGVJbnB1dFNpemUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBzaXplID0gdGhpcy5pc1RleHRJbnB1dCAmJiB0aGlzLnNpemUgPiAwID8gdGhpcy5zaXplIDogMDtcbiAgICAgICAgaWYgKHRoaXMuaXNUZXh0SW5wdXQgJiZcbiAgICAgICAgICAgIHNpemUgPCAxICYmXG4gICAgICAgICAgICB0aGlzLnBhcmVudCAmJlxuICAgICAgICAgICAgISF0aGlzLnBhcmVudFtcIml0ZW1TaXplXCJdKSB7XG4gICAgICAgICAgICBzaXplID0gdGhpcy5wYXJlbnRbXCJpdGVtU2l6ZVwiXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpbnB1dFNpemVcIiwgc2l6ZSk7XG4gICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImlucHV0V2lkdGhcIiwgc2l6ZSA+IDAgPyBcImF1dG9cIiA6IFwiXCIpO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uVGV4dE1vZGVsLnByb3RvdHlwZSwgXCJhdXRvY29tcGxldGVcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogQSB2YWx1ZSBwYXNzZWQgb24gdG8gdGhlIFtgYXV0b2NvbXBsZXRlYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9BdHRyaWJ1dGVzL2F1dG9jb21wbGV0ZSkgYXR0cmlidXRlIG9mIHRoZSB1bmRlcmx5aW5nIGA8aW5wdXQ+YCBlbGVtZW50LlxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiYXV0b2NvbXBsZXRlXCIsIG51bGwpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImF1dG9jb21wbGV0ZVwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uVGV4dE1vZGVsLnByb3RvdHlwZSwgXCJtaW5cIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogQSB2YWx1ZSBwYXNzZWQgb24gdG8gdGhlIFtgbWluYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9BdHRyaWJ1dGVzL21pbikgYXR0cmlidXRlIG9mIHRoZSB1bmRlcmx5aW5nIGA8aW5wdXQ+YCBlbGVtZW50LlxuICAgICAgICAgKiBAc2VlIG1pblZhbHVlRXhwcmVzc2lvblxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibWluXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzVmFsdWVFeHByZXNzaW9uKHZhbCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1pblZhbHVlRXhwcmVzc2lvbiA9IHZhbC5zdWJzdHJpbmcoMSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibWluXCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25UZXh0TW9kZWwucHJvdG90eXBlLCBcIm1heFwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBIHZhbHVlIHBhc3NlZCBvbiB0byB0aGUgW2BtYXhgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0F0dHJpYnV0ZXMvbWF4KSBhdHRyaWJ1dGUgb2YgdGhlIHVuZGVybHlpbmcgYDxpbnB1dD5gIGVsZW1lbnQuXG4gICAgICAgICAqIEBzZWUgbWF4VmFsdWVFeHByZXNzaW9uXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJtYXhcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNWYWx1ZUV4cHJlc3Npb24odmFsKSkge1xuICAgICAgICAgICAgICAgIHRoaXMubWF4VmFsdWVFeHByZXNzaW9uID0gdmFsLnN1YnN0cmluZygxKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJtYXhcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblRleHRNb2RlbC5wcm90b3R5cGUsIFwibWluVmFsdWVFeHByZXNzaW9uXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSBtaW5pbXVtIHZhbHVlIHNwZWNpZmllZCBhcyBhbiBleHByZXNzaW9uLiBGb3IgZXhhbXBsZSwgYFwibWluVmFsdWVFeHByZXNzaW9uXCI6IFwidG9kYXkoLTEpXCJgIHNldHMgdGhlIG1pbmltdW0gdmFsdWUgdG8geWVzdGVyZGF5LlxuICAgICAgICAgKiBAc2VlIG1pblxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibWluVmFsdWVFeHByZXNzaW9uXCIsIFwiXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm1pblZhbHVlRXhwcmVzc2lvblwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uVGV4dE1vZGVsLnByb3RvdHlwZSwgXCJtYXhWYWx1ZUV4cHJlc3Npb25cIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogVGhlIG1heGltdW0gdmFsdWUgc3BlY2lmaWVkIGFzIGFuIGV4cHJlc3Npb24uIEZvciBleGFtcGxlLCBgXCJtYXhWYWx1ZUV4cHJlc3Npb25cIjogXCJ0b2RheSgxKVwiYCBzZXRzIHRoZSBtYXhpbXVtIHZhbHVlIHRvIHRvbW9ycm93LlxuICAgICAgICAgKiBAc2VlIG1heFxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibWF4VmFsdWVFeHByZXNzaW9uXCIsIFwiXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm1heFZhbHVlRXhwcmVzc2lvblwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uVGV4dE1vZGVsLnByb3RvdHlwZSwgXCJyZW5kZXJlZE1pblwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInJlbmRlcmVkTWluXCIpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uVGV4dE1vZGVsLnByb3RvdHlwZSwgXCJyZW5kZXJlZE1heFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInJlbmRlcmVkTWF4XCIpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uVGV4dE1vZGVsLnByb3RvdHlwZSwgXCJtaW5FcnJvclRleHRcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogQW4gZXJyb3IgbWVzc2FnZSB0byBkaXNwbGF5IHdoZW4gdGhlIHF1ZXN0aW9uIHZhbHVlIGlzIGxlc3MgdGhhbiB0aGUgbWluaW11bSBhY2NlcHRlZCB2YWx1ZS5cbiAgICAgICAgICogQHNlZSBtaW5cbiAgICAgICAgICogQHNlZSBtaW5WYWx1ZUV4cHJlc3Npb25cbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwibWluRXJyb3JUZXh0XCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwibWluRXJyb3JUZXh0XCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25UZXh0TW9kZWwucHJvdG90eXBlLCBcImxvY01pbkVycm9yVGV4dFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJtaW5FcnJvclRleHRcIik7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25UZXh0TW9kZWwucHJvdG90eXBlLCBcIm1heEVycm9yVGV4dFwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBbiBlcnJvciBtZXNzYWdlIHRvIGRpc3BsYXkgd2hlbiB0aGUgcXVlc3Rpb24gdmFsdWUgZXhjZWVkcyB0aGUgbWF4aW11bSBhY2NlcHRlZCB2YWx1ZS5cbiAgICAgICAgICogQHNlZSBtYXhcbiAgICAgICAgICogQHNlZSBtYXhWYWx1ZUV4cHJlc3Npb25cbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwibWF4RXJyb3JUZXh0XCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwibWF4RXJyb3JUZXh0XCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25UZXh0TW9kZWwucHJvdG90eXBlLCBcImxvY01heEVycm9yVGV4dFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJtYXhFcnJvclRleHRcIik7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25UZXh0TW9kZWwucHJvdG90eXBlLCBcImlzTWluTWF4VHlwZVwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgc3BlY2lmaWVkIGBpbnB1dFR5cGVgIHN1cHBvcnRzIHRoZSBgbWluYCBhbmQgYG1heGAgcHJvcGVydGllcy5cbiAgICAgICAgICogQHNlZSBpbnB1dFR5cGVcbiAgICAgICAgICogQHNlZSBtaW5cbiAgICAgICAgICogQHNlZSBtYXhcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGlzTWluTWF4VHlwZSh0aGlzKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFF1ZXN0aW9uVGV4dE1vZGVsLnByb3RvdHlwZS5vbkNoZWNrRm9yRXJyb3JzID0gZnVuY3Rpb24gKGVycm9ycywgaXNPblZhbHVlQ2hhbmdlZCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBfc3VwZXIucHJvdG90eXBlLm9uQ2hlY2tGb3JFcnJvcnMuY2FsbCh0aGlzLCBlcnJvcnMsIGlzT25WYWx1ZUNoYW5nZWQpO1xuICAgICAgICBpZiAoaXNPblZhbHVlQ2hhbmdlZClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKHRoaXMuaXNWYWx1ZUxlc3NNaW4pIHtcbiAgICAgICAgICAgIHZhciBtaW5FcnJvciA9IG5ldyBfZXJyb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1tcIkN1c3RvbUVycm9yXCJdKHRoaXMuZ2V0TWluTWF4RXJyb3JUZXh0KHRoaXMubWluRXJyb3JUZXh0LCB0aGlzLmdldENhbGN1bGF0ZWRNaW5NYXgodGhpcy5yZW5kZXJlZE1pbikpLCB0aGlzKTtcbiAgICAgICAgICAgIG1pbkVycm9yLm9uVXBkYXRlRXJyb3JUZXh0Q2FsbGJhY2sgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgZXJyLnRleHQgPSBfdGhpcy5nZXRNaW5NYXhFcnJvclRleHQoX3RoaXMubWluRXJyb3JUZXh0LCBfdGhpcy5nZXRDYWxjdWxhdGVkTWluTWF4KF90aGlzLnJlbmRlcmVkTWluKSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZXJyb3JzLnB1c2gobWluRXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzVmFsdWVHcmVhdGVyTWF4KSB7XG4gICAgICAgICAgICB2YXIgbWF4RXJyb3IgPSBuZXcgX2Vycm9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bXCJDdXN0b21FcnJvclwiXSh0aGlzLmdldE1pbk1heEVycm9yVGV4dCh0aGlzLm1heEVycm9yVGV4dCwgdGhpcy5nZXRDYWxjdWxhdGVkTWluTWF4KHRoaXMucmVuZGVyZWRNYXgpKSwgdGhpcyk7XG4gICAgICAgICAgICBtYXhFcnJvci5vblVwZGF0ZUVycm9yVGV4dENhbGxiYWNrID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGVyci50ZXh0ID0gX3RoaXMuZ2V0TWluTWF4RXJyb3JUZXh0KF90aGlzLm1heEVycm9yVGV4dCwgX3RoaXMuZ2V0Q2FsY3VsYXRlZE1pbk1heChfdGhpcy5yZW5kZXJlZE1heCkpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGVycm9ycy5wdXNoKG1heEVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdmFsTmFtZSA9IHRoaXMuZ2V0VmFsaWRhdG9yVGl0bGUoKTtcbiAgICAgICAgdmFyIGVtYWlsVmFsaWRhdG9yID0gbmV3IF92YWxpZGF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1tcIkVtYWlsVmFsaWRhdG9yXCJdKCk7XG4gICAgICAgIGlmICh0aGlzLmlucHV0VHlwZSA9PT0gXCJlbWFpbFwiICYmXG4gICAgICAgICAgICAhdGhpcy52YWxpZGF0b3JzLnNvbWUoZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHYuZ2V0VHlwZSgpID09PSBcImVtYWlsdmFsaWRhdG9yXCI7IH0pKSB7XG4gICAgICAgICAgICB2YXIgdmFsaWRhdGVSZXN1bHQgPSBlbWFpbFZhbGlkYXRvci52YWxpZGF0ZSh0aGlzLnZhbHVlLCB2YWxOYW1lKTtcbiAgICAgICAgICAgIGlmICghIXZhbGlkYXRlUmVzdWx0ICYmICEhdmFsaWRhdGVSZXN1bHQuZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBlcnJvcnMucHVzaCh2YWxpZGF0ZVJlc3VsdC5lcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFF1ZXN0aW9uVGV4dE1vZGVsLnByb3RvdHlwZS5jYW5TZXRWYWx1ZVRvU3VydmV5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNNaW5NYXhUeXBlKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIHZhciBpc1ZhbGlkID0gIXRoaXMuaXNWYWx1ZUxlc3NNaW4gJiYgIXRoaXMuaXNWYWx1ZUdyZWF0ZXJNYXg7XG4gICAgICAgIGlmICh0aGlzLmlucHV0VHlwZSA9PT0gXCJudW1iZXJcIiAmJiAhIXRoaXMuc3VydmV5ICYmXG4gICAgICAgICAgICAodGhpcy5zdXJ2ZXkuaXNWYWxpZGF0ZU9uVmFsdWVDaGFuZ2luZyB8fCB0aGlzLnN1cnZleS5pc1ZhbGlkYXRlT25WYWx1ZUNoYW5nZWQpKSB7XG4gICAgICAgICAgICB0aGlzLmhhc0Vycm9ycygpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc1ZhbGlkO1xuICAgIH07XG4gICAgUXVlc3Rpb25UZXh0TW9kZWwucHJvdG90eXBlLmNvbnZlcnRGdW5jVmFsdWV0b1F1ZXN0aW9uVmFsdWUgPSBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgIHJldHVybiBfaGVscGVyc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiSGVscGVyc1wiXS5jb252ZXJ0VmFsVG9RdWVzdGlvblZhbCh2YWwsIHRoaXMuaW5wdXRUeXBlKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uVGV4dE1vZGVsLnByb3RvdHlwZS5nZXRNaW5NYXhFcnJvclRleHQgPSBmdW5jdGlvbiAoZXJyb3JUZXh0LCB2YWx1ZSkge1xuICAgICAgICBpZiAoX2hlbHBlcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcIkhlbHBlcnNcIl0uaXNWYWx1ZUVtcHR5KHZhbHVlKSlcbiAgICAgICAgICAgIHJldHVybiBlcnJvclRleHQ7XG4gICAgICAgIHZhciBlcnJvclZhbHVlID0gdmFsdWUudG9TdHJpbmcoKTtcbiAgICAgICAgaWYgKHRoaXMuaW5wdXRUeXBlID09PSBcImRhdGVcIiAmJiAhIXZhbHVlLnRvRGF0ZVN0cmluZykge1xuICAgICAgICAgICAgZXJyb3JWYWx1ZSA9IHZhbHVlLnRvRGF0ZVN0cmluZygpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlcnJvclRleHQucmVwbGFjZShcInswfVwiLCBlcnJvclZhbHVlKTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblRleHRNb2RlbC5wcm90b3R5cGUsIFwiaXNWYWx1ZUxlc3NNaW5cIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAoIXRoaXMuaXNWYWx1ZUVtcHR5KHRoaXMucmVuZGVyZWRNaW4pICYmICF0aGlzLmlzRW1wdHkoKSAmJlxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0Q2FsY3VsYXRlZE1pbk1heCh0aGlzLnZhbHVlKSA8XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0Q2FsY3VsYXRlZE1pbk1heCh0aGlzLnJlbmRlcmVkTWluKSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25UZXh0TW9kZWwucHJvdG90eXBlLCBcImlzVmFsdWVHcmVhdGVyTWF4XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gKCF0aGlzLmlzVmFsdWVFbXB0eSh0aGlzLnJlbmRlcmVkTWF4KSAmJiAhdGhpcy5pc0VtcHR5KCkgJiZcbiAgICAgICAgICAgICAgICB0aGlzLmdldENhbGN1bGF0ZWRNaW5NYXgodGhpcy52YWx1ZSkgPlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldENhbGN1bGF0ZWRNaW5NYXgodGhpcy5yZW5kZXJlZE1heCkpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uVGV4dE1vZGVsLnByb3RvdHlwZSwgXCJpc0RhdGVJbnB1dFR5cGVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlucHV0VHlwZSA9PT0gXCJkYXRlXCIgfHwgdGhpcy5pbnB1dFR5cGUgPT09IFwiZGF0ZXRpbWUtbG9jYWxcIjtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFF1ZXN0aW9uVGV4dE1vZGVsLnByb3RvdHlwZS5nZXRDYWxjdWxhdGVkTWluTWF4ID0gZnVuY3Rpb24gKG1pbk1heCkge1xuICAgICAgICBpZiAodGhpcy5pc1ZhbHVlRW1wdHkobWluTWF4KSlcbiAgICAgICAgICAgIHJldHVybiBtaW5NYXg7XG4gICAgICAgIHJldHVybiB0aGlzLmlzRGF0ZUlucHV0VHlwZSA/IG5ldyBEYXRlKG1pbk1heCkgOiBtaW5NYXg7XG4gICAgfTtcbiAgICBRdWVzdGlvblRleHRNb2RlbC5wcm90b3R5cGUuc2V0UmVuZGVyZWRNaW5NYXggPSBmdW5jdGlvbiAodmFsdWVzLCBwcm9wZXJ0aWVzKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGlmICh2YWx1ZXMgPT09IHZvaWQgMCkgeyB2YWx1ZXMgPSBudWxsOyB9XG4gICAgICAgIGlmIChwcm9wZXJ0aWVzID09PSB2b2lkIDApIHsgcHJvcGVydGllcyA9IG51bGw7IH1cbiAgICAgICAgdGhpcy5taW5WYWx1ZVJ1bm5lciA9IHRoaXMuZ2V0RGVmYXVsdFJ1bm5lcih0aGlzLm1pblZhbHVlUnVubmVyLCB0aGlzLm1pblZhbHVlRXhwcmVzc2lvbik7XG4gICAgICAgIHRoaXMuc2V0VmFsdWVBbmRSdW5FeHByZXNzaW9uKHRoaXMubWluVmFsdWVSdW5uZXIsIHRoaXMubWluLCBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICBpZiAoIXZhbCAmJiBfdGhpcy5pc0RhdGVJbnB1dFR5cGUgJiYgISFfc2V0dGluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1tcInNldHRpbmdzXCJdLm1pbkRhdGUpIHtcbiAgICAgICAgICAgICAgICB2YWwgPSBfc2V0dGluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1tcInNldHRpbmdzXCJdLm1pbkRhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBfdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicmVuZGVyZWRNaW5cIiwgdmFsKTtcbiAgICAgICAgfSwgdmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICAgICAgdGhpcy5tYXhWYWx1ZVJ1bm5lciA9IHRoaXMuZ2V0RGVmYXVsdFJ1bm5lcih0aGlzLm1heFZhbHVlUnVubmVyLCB0aGlzLm1heFZhbHVlRXhwcmVzc2lvbik7XG4gICAgICAgIHRoaXMuc2V0VmFsdWVBbmRSdW5FeHByZXNzaW9uKHRoaXMubWF4VmFsdWVSdW5uZXIsIHRoaXMubWF4LCBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICBpZiAoIXZhbCAmJiBfdGhpcy5pc0RhdGVJbnB1dFR5cGUpIHtcbiAgICAgICAgICAgICAgICB2YWwgPSAhIV9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fW1wic2V0dGluZ3NcIl0ubWF4RGF0ZSA/IF9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fW1wic2V0dGluZ3NcIl0ubWF4RGF0ZSA6IFwiMjk5OS0xMi0zMVwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX3RoaXMuc2V0UHJvcGVydHlWYWx1ZShcInJlbmRlcmVkTWF4XCIsIHZhbCk7XG4gICAgICAgIH0sIHZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25UZXh0TW9kZWwucHJvdG90eXBlLCBcInN0ZXBcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogQSB2YWx1ZSBwYXNzZWQgb24gdG8gdGhlIFtgc3RlcGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvQXR0cmlidXRlcy9zdGVwKSBhdHRyaWJ1dGUgb2YgdGhlIHVuZGVybHlpbmcgYDxpbnB1dD5gIGVsZW1lbnQuXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzdGVwXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInN0ZXBcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblRleHRNb2RlbC5wcm90b3R5cGUsIFwicmVuZGVyZWRTdGVwXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc1ZhbHVlRW1wdHkodGhpcy5zdGVwKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmlucHV0VHlwZSAhPT0gXCJudW1iZXJcIiA/IHVuZGVmaW5lZCA6IFwiYW55XCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdGVwO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUXVlc3Rpb25UZXh0TW9kZWwucHJvdG90eXBlLnN1cHBvcnRHb05leHRQYWdlQXV0b21hdGljID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gIXRoaXMuaXNTdXJ2ZXlJbnB1dFRleHRVcGRhdGUgJiZcbiAgICAgICAgICAgIFtcImRhdGVcIiwgXCJkYXRldGltZS1sb2NhbFwiXS5pbmRleE9mKHRoaXMuaW5wdXRUeXBlKSA8IDA7XG4gICAgfTtcbiAgICBRdWVzdGlvblRleHRNb2RlbC5wcm90b3R5cGUuc3VwcG9ydEdvTmV4dFBhZ2VFcnJvciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIFtcImRhdGVcIiwgXCJkYXRldGltZS1sb2NhbFwiXS5pbmRleE9mKHRoaXMuaW5wdXRUeXBlKSA8IDA7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25UZXh0TW9kZWwucHJvdG90eXBlLCBcImRhdGFMaXN0XCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFuIGFycmF5IG9mIHByZWRlZmluZWQgb3B0aW9ucyBmcm9tIHdoaWNoIHVzZXJzIGNhbiBzZWxlY3QuIFRoaXMgcHJvcGVydHkgY29uZmlndXJlcyBhbiBIVE1MIFtgPGRhdGFsaXN0PmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9kYXRhbGlzdCkgZWxlbWVudCBhbmQgYXNzb2NpYXRlcyBpdCB3aXRoIHRoZSB1bmRlcmx5aW5nIGBpbnB1dGAgZWxlbWVudC5cbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jRGF0YUxpc3QudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5sb2NEYXRhTGlzdC52YWx1ZSA9IHZhbDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblRleHRNb2RlbC5wcm90b3R5cGUsIFwibG9jRGF0YUxpc3RcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY0RhdGFMaXN0VmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25UZXh0TW9kZWwucHJvdG90eXBlLCBcImRhdGFMaXN0SWRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY0RhdGFMaXN0Lmhhc1ZhbHVlKCkgPyB0aGlzLmlkICsgXCJfZGF0YWxpc3RcIiA6IHVuZGVmaW5lZDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFF1ZXN0aW9uVGV4dE1vZGVsLnByb3RvdHlwZS5jYW5SdW5WYWxpZGF0b3JzID0gZnVuY3Rpb24gKGlzT25WYWx1ZUNoYW5nZWQpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLmVycm9ycy5sZW5ndGggPiAwIHx8XG4gICAgICAgICAgICAhaXNPblZhbHVlQ2hhbmdlZCB8fFxuICAgICAgICAgICAgdGhpcy5zdXBwb3J0R29OZXh0UGFnZUVycm9yKCkpO1xuICAgIH07XG4gICAgUXVlc3Rpb25UZXh0TW9kZWwucHJvdG90eXBlLnNldE5ld1ZhbHVlID0gZnVuY3Rpb24gKG5ld1ZhbHVlKSB7XG4gICAgICAgIG5ld1ZhbHVlID0gdGhpcy5jb3JyZWN0VmFsdWVUeXBlKG5ld1ZhbHVlKTtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5zZXROZXdWYWx1ZS5jYWxsKHRoaXMsIG5ld1ZhbHVlKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uVGV4dE1vZGVsLnByb3RvdHlwZS5jb3JyZWN0VmFsdWVUeXBlID0gZnVuY3Rpb24gKG5ld1ZhbHVlKSB7XG4gICAgICAgIGlmICghbmV3VmFsdWUpXG4gICAgICAgICAgICByZXR1cm4gbmV3VmFsdWU7XG4gICAgICAgIGlmICh0aGlzLmlucHV0VHlwZSA9PSBcIm51bWJlclwiIHx8IHRoaXMuaW5wdXRUeXBlID09IFwicmFuZ2VcIikge1xuICAgICAgICAgICAgcmV0dXJuIF9oZWxwZXJzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJIZWxwZXJzXCJdLmlzTnVtYmVyKG5ld1ZhbHVlKSA/IF9oZWxwZXJzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJIZWxwZXJzXCJdLmdldE51bWJlcihuZXdWYWx1ZSkgOiBcIlwiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXdWYWx1ZTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uVGV4dE1vZGVsLnByb3RvdHlwZS5oYXNQbGFjZWhvbGRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmlzUmVhZE9ubHkgJiYgdGhpcy5pbnB1dFR5cGUgIT09IFwicmFuZ2VcIjtcbiAgICB9O1xuICAgIFF1ZXN0aW9uVGV4dE1vZGVsLnByb3RvdHlwZS5pc1JlYWRPbmx5UmVuZGVyRGl2ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1JlYWRPbmx5ICYmIF9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fW1wic2V0dGluZ3NcIl0ucmVhZE9ubHkudGV4dFJlbmRlck1vZGUgPT09IFwiZGl2XCI7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25UZXh0TW9kZWwucHJvdG90eXBlLCBcImlucHV0U3R5bGVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBzdHlsZSA9IHt9O1xuICAgICAgICAgICAgc3R5bGUud2lkdGggPSB0aGlzLmlucHV0V2lkdGg7XG4gICAgICAgICAgICByZXR1cm4gc3R5bGU7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBRdWVzdGlvblRleHRNb2RlbC5wcm90b3R5cGUudXBkYXRlVmFsdWVPbkV2ZW50ID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHZhciBuZXdWYWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICAgICAgaWYgKCF0aGlzLmlzVHdvVmFsdWVFcXVhbHModGhpcy52YWx1ZSwgbmV3VmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBRdWVzdGlvblRleHRNb2RlbDtcbn0oX3F1ZXN0aW9uX3RleHRiYXNlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bXCJRdWVzdGlvblRleHRCYXNlXCJdKSk7XG5cbnZhciBtaW5NYXhUeXBlcyA9IFtcbiAgICBcIm51bWJlclwiLFxuICAgIFwicmFuZ2VcIixcbiAgICBcImRhdGVcIixcbiAgICBcImRhdGV0aW1lLWxvY2FsXCIsXG4gICAgXCJtb250aFwiLFxuICAgIFwidGltZVwiLFxuICAgIFwid2Vla1wiLFxuXTtcbmZ1bmN0aW9uIGlzTWluTWF4VHlwZShvYmopIHtcbiAgICB2YXIgdCA9ICEhb2JqID8gb2JqLmlucHV0VHlwZSA6IFwiXCI7XG4gICAgaWYgKCF0KVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIG1pbk1heFR5cGVzLmluZGV4T2YodCkgPiAtMTtcbn1cbmZ1bmN0aW9uIGdldFdlZWtUaW1lTnVtYmVyKHN0ciwgZGVsaW1pdGVyKSB7XG4gICAgdmFyIHN0cnMgPSBzdHIuc3BsaXQoZGVsaW1pdGVyKTtcbiAgICBpZiAoc3Rycy5sZW5ndGggIT09IDIpXG4gICAgICAgIHJldHVybiAtMTtcbiAgICBpZiAoIV9oZWxwZXJzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJIZWxwZXJzXCJdLmlzTnVtYmVyKHN0cnNbMF0pIHx8ICFfaGVscGVyc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiSGVscGVyc1wiXS5pc051bWJlcihzdHJzWzFdKSlcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIHJldHVybiBwYXJzZUZsb2F0KHN0cnNbMF0pICogNjAgKyBwYXJzZUZsb2F0KHN0cnNbMV0pO1xufVxuZnVuY3Rpb24gaXNNaW5CaWdnZXJXZWVrVGltZShtaW5TdHIsIG1heFN0ciwgZGVsaW1pdGVyKSB7XG4gICAgdmFyIG1pbiA9IGdldFdlZWtUaW1lTnVtYmVyKG1pblN0ciwgZGVsaW1pdGVyKTtcbiAgICB2YXIgbWF4ID0gZ2V0V2Vla1RpbWVOdW1iZXIobWF4U3RyLCBkZWxpbWl0ZXIpO1xuICAgIGlmIChtaW4gPCAwIHx8IG1heCA8IDApXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gbWluID4gbWF4O1xufVxuZnVuY3Rpb24gZ2V0Q29ycmVjdE1pbk1heChvYmosIG1pbiwgbWF4LCBpc01heCkge1xuICAgIHZhciB2YWwgPSBpc01heCA/IG1heCA6IG1pbjtcbiAgICBpZiAoIWlzTWluTWF4VHlwZShvYmopKVxuICAgICAgICByZXR1cm4gdmFsO1xuICAgIGlmIChfaGVscGVyc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiSGVscGVyc1wiXS5pc1ZhbHVlRW1wdHkobWluKSB8fCBfaGVscGVyc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiSGVscGVyc1wiXS5pc1ZhbHVlRW1wdHkobWF4KSlcbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICBpZiAob2JqLmlucHV0VHlwZS5pbmRleE9mKFwiZGF0ZVwiKSA9PT0gMCB8fCBvYmouaW5wdXRUeXBlID09PSBcIm1vbnRoXCIpIHtcbiAgICAgICAgdmFyIGlzTW9udGggPSBvYmouaW5wdXRUeXBlID09PSBcIm1vbnRoXCI7XG4gICAgICAgIHZhciBkTWluID0gbmV3IERhdGUoaXNNb250aCA/IG1pbiArIFwiLTFcIiA6IG1pbik7XG4gICAgICAgIHZhciBkTWF4ID0gbmV3IERhdGUoaXNNb250aCA/IG1heCArIFwiLTFcIiA6IG1heCk7XG4gICAgICAgIGlmICghZE1pbiB8fCAhZE1heClcbiAgICAgICAgICAgIHJldHVybiB2YWw7XG4gICAgICAgIGlmIChkTWluID4gZE1heClcbiAgICAgICAgICAgIHJldHVybiBpc01heCA/IG1pbiA6IG1heDtcbiAgICB9XG4gICAgaWYgKG9iai5pbnB1dFR5cGUgPT09IFwid2Vla1wiIHx8IG9iai5pbnB1dFR5cGUgPT09IFwidGltZVwiKSB7XG4gICAgICAgIHZhciBkZWxpbWl0ZXIgPSBvYmouaW5wdXRUeXBlID09PSBcIndlZWtcIiA/IFwiLVdcIiA6IFwiOlwiO1xuICAgICAgICBpZiAoaXNNaW5CaWdnZXJXZWVrVGltZShtaW4sIG1heCwgZGVsaW1pdGVyKSlcbiAgICAgICAgICAgIHJldHVybiBpc01heCA/IG1pbiA6IG1heDtcbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9XG4gICAgaWYgKG9iai5pbnB1dFR5cGUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgaWYgKCFfaGVscGVyc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiSGVscGVyc1wiXS5pc051bWJlcihtaW4pIHx8ICFfaGVscGVyc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiSGVscGVyc1wiXS5pc051bWJlcihtYXgpKVxuICAgICAgICAgICAgcmV0dXJuIHZhbDtcbiAgICAgICAgaWYgKF9oZWxwZXJzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJIZWxwZXJzXCJdLmdldE51bWJlcihtaW4pID4gX2hlbHBlcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcIkhlbHBlcnNcIl0uZ2V0TnVtYmVyKG1heCkpXG4gICAgICAgICAgICByZXR1cm4gaXNNYXggPyBtaW4gOiBtYXg7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgbWluID09PSBcInN0cmluZ1wiIHx8IHR5cGVvZiBtYXggPT09IFwic3RyaW5nXCIpXG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgaWYgKG1pbiA+IG1heClcbiAgICAgICAgcmV0dXJuIGlzTWF4ID8gbWluIDogbWF4O1xuICAgIHJldHVybiB2YWw7XG59XG5mdW5jdGlvbiBwcm9wZXJ0eUVkaXRvck1pbk1heFVwZGF0ZShvYmosIHByb3BlcnR5RWRpdG9yKSB7XG4gICAgaWYgKCEhb2JqICYmICEhb2JqLmlucHV0VHlwZSkge1xuICAgICAgICBwcm9wZXJ0eUVkaXRvci5pbnB1dFR5cGUgPSBvYmouaW5wdXRUeXBlICE9PSBcInJhbmdlXCIgPyBvYmouaW5wdXRUeXBlIDogXCJudW1iZXJcIjtcbiAgICAgICAgcHJvcGVydHlFZGl0b3IudGV4dFVwZGF0ZU1vZGUgPSBcIm9uQmx1clwiO1xuICAgIH1cbn1cbl9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJTZXJpYWxpemVyXCJdLmFkZENsYXNzKFwidGV4dFwiLCBbXG4gICAge1xuICAgICAgICBuYW1lOiBcImlucHV0VHlwZVwiLFxuICAgICAgICBkZWZhdWx0OiBcInRleHRcIixcbiAgICAgICAgY2hvaWNlczogX3NldHRpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bXCJzZXR0aW5nc1wiXS5xdWVzdGlvbnMuaW5wdXRUeXBlcyxcbiAgICB9LFxuICAgIHtcbiAgICAgICAgbmFtZTogXCJzaXplOm51bWJlclwiLFxuICAgICAgICBtaW5WYWx1ZTogMCxcbiAgICAgICAgZGVwZW5kc09uOiBcImlucHV0VHlwZVwiLFxuICAgICAgICB2aXNpYmxlSWY6IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgIGlmICghb2JqKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiBvYmouaXNUZXh0SW5wdXQ7XG4gICAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICAgIG5hbWU6IFwidGV4dFVwZGF0ZU1vZGVcIixcbiAgICAgICAgZGVmYXVsdDogXCJkZWZhdWx0XCIsXG4gICAgICAgIGNob2ljZXM6IFtcImRlZmF1bHRcIiwgXCJvbkJsdXJcIiwgXCJvblR5cGluZ1wiXSxcbiAgICAgICAgZGVwZW5kc09uOiBcImlucHV0VHlwZVwiLFxuICAgICAgICB2aXNpYmxlSWY6IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgIGlmICghb2JqKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiBvYmouaXNUZXh0SW5wdXQ7XG4gICAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICAgIG5hbWU6IFwiYXV0b2NvbXBsZXRlXCIsXG4gICAgICAgIGFsdGVybmF0aXZlTmFtZTogXCJhdXRvQ29tcGxldGVcIixcbiAgICAgICAgY2hvaWNlczogX3NldHRpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bXCJzZXR0aW5nc1wiXS5xdWVzdGlvbnMuZGF0YUxpc3QsXG4gICAgfSxcbiAgICB7XG4gICAgICAgIG5hbWU6IFwibWluXCIsXG4gICAgICAgIGRlcGVuZHNPbjogXCJpbnB1dFR5cGVcIixcbiAgICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNNaW5NYXhUeXBlKG9iaik7XG4gICAgICAgIH0sXG4gICAgICAgIG9uUHJvcGVydHlFZGl0b3JVcGRhdGU6IGZ1bmN0aW9uIChvYmosIHByb3BlcnR5RWRpdG9yKSB7XG4gICAgICAgICAgICBwcm9wZXJ0eUVkaXRvck1pbk1heFVwZGF0ZShvYmosIHByb3BlcnR5RWRpdG9yKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25TZXR0aW5nVmFsdWU6IGZ1bmN0aW9uIChvYmosIHZhbCkge1xuICAgICAgICAgICAgcmV0dXJuIGdldENvcnJlY3RNaW5NYXgob2JqLCB2YWwsIG9iai5tYXgsIGZhbHNlKTtcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgICAgbmFtZTogXCJtYXhcIixcbiAgICAgICAgZGVwZW5kc09uOiBcImlucHV0VHlwZVwiLFxuICAgICAgICBuZXh0VG9Qcm9wZXJ0eTogXCIqbWluXCIsXG4gICAgICAgIHZpc2libGVJZjogZnVuY3Rpb24gKG9iaikge1xuICAgICAgICAgICAgcmV0dXJuIGlzTWluTWF4VHlwZShvYmopO1xuICAgICAgICB9LFxuICAgICAgICBvblNldHRpbmdWYWx1ZTogZnVuY3Rpb24gKG9iaiwgdmFsKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0Q29ycmVjdE1pbk1heChvYmosIG9iai5taW4sIHZhbCwgdHJ1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uUHJvcGVydHlFZGl0b3JVcGRhdGU6IGZ1bmN0aW9uIChvYmosIHByb3BlcnR5RWRpdG9yKSB7XG4gICAgICAgICAgICBwcm9wZXJ0eUVkaXRvck1pbk1heFVwZGF0ZShvYmosIHByb3BlcnR5RWRpdG9yKTtcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgICAgbmFtZTogXCJtaW5WYWx1ZUV4cHJlc3Npb246ZXhwcmVzc2lvblwiLFxuICAgICAgICBjYXRlZ29yeTogXCJsb2dpY1wiLFxuICAgICAgICBkZXBlbmRzT246IFwiaW5wdXRUeXBlXCIsXG4gICAgICAgIHZpc2libGVJZjogZnVuY3Rpb24gKG9iaikge1xuICAgICAgICAgICAgcmV0dXJuIGlzTWluTWF4VHlwZShvYmopO1xuICAgICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgICBuYW1lOiBcIm1heFZhbHVlRXhwcmVzc2lvbjpleHByZXNzaW9uXCIsXG4gICAgICAgIGNhdGVnb3J5OiBcImxvZ2ljXCIsXG4gICAgICAgIGRlcGVuZHNPbjogXCJpbnB1dFR5cGVcIixcbiAgICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNNaW5NYXhUeXBlKG9iaik7XG4gICAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICAgIG5hbWU6IFwibWluRXJyb3JUZXh0XCIsXG4gICAgICAgIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NNaW5FcnJvclRleHRcIixcbiAgICAgICAgZGVwZW5kc09uOiBcImlucHV0VHlwZVwiLFxuICAgICAgICB2aXNpYmxlSWY6IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgIHJldHVybiBpc01pbk1heFR5cGUob2JqKTtcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgICAgbmFtZTogXCJtYXhFcnJvclRleHRcIixcbiAgICAgICAgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY01heEVycm9yVGV4dFwiLFxuICAgICAgICBkZXBlbmRzT246IFwiaW5wdXRUeXBlXCIsXG4gICAgICAgIHZpc2libGVJZjogZnVuY3Rpb24gKG9iaikge1xuICAgICAgICAgICAgcmV0dXJuIGlzTWluTWF4VHlwZShvYmopO1xuICAgICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgICBuYW1lOiBcInN0ZXA6bnVtYmVyXCIsXG4gICAgICAgIGRlcGVuZHNPbjogXCJpbnB1dFR5cGVcIixcbiAgICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICBpZiAoIW9iailcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm4gb2JqLmlucHV0VHlwZSA9PT0gXCJudW1iZXJcIiB8fCBvYmouaW5wdXRUeXBlID09PSBcInJhbmdlXCI7XG4gICAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICAgIG5hbWU6IFwibWF4TGVuZ3RoOm51bWJlclwiLFxuICAgICAgICBkZWZhdWx0OiAtMSxcbiAgICAgICAgZGVwZW5kc09uOiBcImlucHV0VHlwZVwiLFxuICAgICAgICB2aXNpYmxlSWY6IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgIGlmICghb2JqKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiBvYmouaXNUZXh0SW5wdXQ7XG4gICAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICAgIG5hbWU6IFwicGxhY2Vob2xkZXJcIixcbiAgICAgICAgYWx0ZXJuYXRpdmVOYW1lOiBcInBsYWNlSG9sZGVyXCIsXG4gICAgICAgIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NQbGFjZWhvbGRlclwiLFxuICAgICAgICBkZXBlbmRzT246IFwiaW5wdXRUeXBlXCIsXG4gICAgICAgIHZpc2libGVJZjogZnVuY3Rpb24gKG9iaikge1xuICAgICAgICAgICAgaWYgKCFvYmopXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIG9iai5pc1RleHRJbnB1dDtcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgICAgbmFtZTogXCJkYXRhTGlzdDpzdHJpbmdbXVwiLFxuICAgICAgICBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jRGF0YUxpc3RcIixcbiAgICAgICAgZGVwZW5kc09uOiBcImlucHV0VHlwZVwiLFxuICAgICAgICB2aXNpYmxlSWY6IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgIGlmICghb2JqKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiBvYmouaW5wdXRUeXBlID09PSBcInRleHRcIjtcbiAgICAgICAgfSxcbiAgICB9LFxuXSwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25UZXh0TW9kZWwoXCJcIik7XG59LCBcInRleHRiYXNlXCIpO1xuX3F1ZXN0aW9uZmFjdG9yeV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiUXVlc3Rpb25GYWN0b3J5XCJdLkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJ0ZXh0XCIsIGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgcmV0dXJuIG5ldyBRdWVzdGlvblRleHRNb2RlbChuYW1lKTtcbn0pO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3F1ZXN0aW9uX3RleHRiYXNlLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3F1ZXN0aW9uX3RleHRiYXNlLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IENoYXJhY3RlckNvdW50ZXIsIFF1ZXN0aW9uVGV4dEJhc2UgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQ2hhcmFjdGVyQ291bnRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIENoYXJhY3RlckNvdW50ZXI7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlF1ZXN0aW9uVGV4dEJhc2VcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBRdWVzdGlvblRleHRCYXNlOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcXVlc3Rpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcXVlc3Rpb24gKi8gXCIuL3NyYy9xdWVzdGlvbi50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9qc29ub2JqZWN0ICovIFwiLi9zcmMvanNvbm9iamVjdC50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfaGVscGVyc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9oZWxwZXJzICovIFwiLi9zcmMvaGVscGVycy50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdXRpbHNfY3NzQ2xhc3NCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3V0aWxzL2Nzc0NsYXNzQnVpbGRlciAqLyBcIi4vc3JjL3V0aWxzL2Nzc0NsYXNzQnVpbGRlci50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYmFzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9iYXNlICovIFwiLi9zcmMvYmFzZS50c1wiKTtcbnZhciBfX2V4dGVuZHMgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xudmFyIF9fZGVjb3JhdGUgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufTtcblxuXG5cblxuXG52YXIgQ2hhcmFjdGVyQ291bnRlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQ2hhcmFjdGVyQ291bnRlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBDaGFyYWN0ZXJDb3VudGVyKCkge1xuICAgICAgICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgfVxuICAgIENoYXJhY3RlckNvdW50ZXIucHJvdG90eXBlLnVwZGF0ZVJlbWFpbmluZ0NoYXJhY3RlckNvdW50ZXIgPSBmdW5jdGlvbiAobmV3VmFsdWUsIG1heExlbmd0aCkge1xuICAgICAgICB0aGlzLnJlbWFpbmluZ0NoYXJhY3RlckNvdW50ZXIgPSBfaGVscGVyc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiSGVscGVyc1wiXS5nZXRSZW1haW5pbmdDaGFyYWN0ZXJDb3VudGVyVGV4dChuZXdWYWx1ZSwgbWF4TGVuZ3RoKTtcbiAgICB9O1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QoX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcInByb3BlcnR5XCJdKSgpXG4gICAgXSwgQ2hhcmFjdGVyQ291bnRlci5wcm90b3R5cGUsIFwicmVtYWluaW5nQ2hhcmFjdGVyQ291bnRlclwiLCB2b2lkIDApO1xuICAgIHJldHVybiBDaGFyYWN0ZXJDb3VudGVyO1xufShfYmFzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fW1wiQmFzZVwiXSkpO1xuXG4vKipcbiAqIEEgYmFzZSBjbGFzcyBmb3IgdGhlIFtTaW5nbGUtTGluZSBJbnB1dF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9xdWVzdGlvbnRleHRtb2RlbCkgYW5kIFtMb25nIFRleHRdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vcXVlc3Rpb25jb21tZW50bW9kZWwpIHF1ZXN0aW9uIHR5cGVzLlxuICovXG52YXIgUXVlc3Rpb25UZXh0QmFzZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoUXVlc3Rpb25UZXh0QmFzZSwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBRdWVzdGlvblRleHRCYXNlKG5hbWUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbmFtZSkgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuY2hhcmFjdGVyQ291bnRlciA9IG5ldyBDaGFyYWN0ZXJDb3VudGVyKCk7XG4gICAgICAgIF90aGlzLmRpc2FibGVOYXRpdmVVbmRvUmVkbyA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFF1ZXN0aW9uVGV4dEJhc2UucHJvdG90eXBlLmlzVGV4dFZhbHVlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblRleHRCYXNlLnByb3RvdHlwZSwgXCJtYXhMZW5ndGhcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogVGhlIG1heGltdW0gdGV4dCBsZW5ndGggbWVhc3VyZWQgaW4gY2hhcmFjdGVycy4gQXNzaWduIDAgaWYgdGhlIGxlbmd0aCBzaG91bGQgYmUgdW5saW1pdGVkLlxuICAgICAgICAgKlxuICAgICAgICAgKiBEZWZhdWx0IHZhbHVlOiAtMSAoaW5oZXJpdHMgdGhlIGFjdHVhbCB2YWx1ZSBmcm9tIHRoZSBgU3VydmV5TW9kZWxgJ3MgW2BtYXhUZXh0TGVuZ3RoYF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9zdXJ2ZXltb2RlbCNtYXhUZXh0TGVuZ3RoKSBwcm9wZXJ0eSkuXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJtYXhMZW5ndGhcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibWF4TGVuZ3RoXCIsIHZhbCk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVJlbWFpbmluZ0NoYXJhY3RlckNvdW50ZXIodGhpcy52YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBRdWVzdGlvblRleHRCYXNlLnByb3RvdHlwZS5nZXRNYXhMZW5ndGggPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBfaGVscGVyc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiSGVscGVyc1wiXS5nZXRNYXhMZW5ndGgodGhpcy5tYXhMZW5ndGgsIHRoaXMuc3VydmV5ID8gdGhpcy5zdXJ2ZXkubWF4VGV4dExlbmd0aCA6IC0xKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uVGV4dEJhc2UucHJvdG90eXBlLnVwZGF0ZVJlbWFpbmluZ0NoYXJhY3RlckNvdW50ZXIgPSBmdW5jdGlvbiAobmV3VmFsdWUpIHtcbiAgICAgICAgdGhpcy5jaGFyYWN0ZXJDb3VudGVyLnVwZGF0ZVJlbWFpbmluZ0NoYXJhY3RlckNvdW50ZXIobmV3VmFsdWUsIHRoaXMuZ2V0TWF4TGVuZ3RoKCkpO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uVGV4dEJhc2UucHJvdG90eXBlLCBcInBsYWNlSG9sZGVyXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLnBsYWNlaG9sZGVyOyB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHsgdGhpcy5wbGFjZWhvbGRlciA9IHZhbDsgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblRleHRCYXNlLnByb3RvdHlwZSwgXCJsb2NQbGFjZUhvbGRlclwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5sb2NQbGFjZWhvbGRlcjsgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFF1ZXN0aW9uVGV4dEJhc2UucHJvdG90eXBlLmdldFR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBcInRleHRiYXNlXCI7XG4gICAgfTtcbiAgICBRdWVzdGlvblRleHRCYXNlLnByb3RvdHlwZS5pc0VtcHR5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5pc0VtcHR5LmNhbGwodGhpcykgfHwgdGhpcy52YWx1ZSA9PT0gXCJcIjtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblRleHRCYXNlLnByb3RvdHlwZSwgXCJ0ZXh0VXBkYXRlTW9kZVwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgd2hlbiB0byB1cGRhdGUgdGhlIHF1ZXN0aW9uIHZhbHVlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBQb3NzaWJsZSB2YWx1ZXM6XG4gICAgICAgICAqXG4gICAgICAgICAqIC0gYFwib25CbHVyXCJgIC0gVXBkYXRlcyB0aGUgdmFsdWUgYWZ0ZXIgdGhlIGlucHV0IGZpZWxkIGxvc2VzIGZvY3VzLlxuICAgICAgICAgKiAtIGBcIm9uVHlwaW5nXCJgIC0gVXBkYXRlcyB0aGUgdmFsdWUgb24gZXZlcnkga2V5IHByZXNzLlxuICAgICAgICAgKiAtIGBcImRlZmF1bHRcImAgKGRlZmF1bHQpIC0gSW5oZXJpdHMgdGhlIHZhbHVlIGZyb20gdGhlIGBTdXJ2ZXlNb2RlbGAncyBbYHRleHRVcGRhdGVNb2RlYF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9zdXJ2ZXltb2RlbCN0ZXh0VXBkYXRlTW9kZSkgcHJvcGVydHkuXG4gICAgICAgICAqXG4gICAgICAgICAqID4gRG8gbm90IHVzZSB0aGUgYFwib25UeXBpbmdcImAgbW9kZSBpZiB5b3VyIHN1cnZleSBjb250YWlucyBtYW55IGV4cHJlc3Npb25zLiBFeHByZXNzaW9ucyBhcmUgcmVldmFsdWF0ZWQgZWFjaCB0aW1lIGEgcXVlc3Rpb24gdmFsdWUgaXMgY2hhbmdlZC4gSW4gYFwib25UeXBpbmdcImAgbW9kZSwgdGhlIHF1ZXN0aW9uIHZhbHVlIGNoYW5nZXMgZnJlcXVlbnRseS4gVGhpcyBtYXkgY2F1c2UgcGVyZm9ybWFuY2UgZGVncmFkYXRpb24uXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ0ZXh0VXBkYXRlTW9kZVwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJ0ZXh0VXBkYXRlTW9kZVwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uVGV4dEJhc2UucHJvdG90eXBlLCBcImlzU3VydmV5SW5wdXRUZXh0VXBkYXRlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy50ZXh0VXBkYXRlTW9kZSA9PSBcImRlZmF1bHRcIilcbiAgICAgICAgICAgICAgICByZXR1cm4gISF0aGlzLnN1cnZleSA/IHRoaXMuc3VydmV5LmlzVXBkYXRlVmFsdWVUZXh0T25UeXBpbmcgOiBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRleHRVcGRhdGVNb2RlID09IFwib25UeXBpbmdcIjtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblRleHRCYXNlLnByb3RvdHlwZSwgXCJyZW5kZXJlZFBsYWNlaG9sZGVyXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicmVuZGVyZWRQbGFjZWhvbGRlclwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFF1ZXN0aW9uVGV4dEJhc2UucHJvdG90eXBlLnNldFJlbmRlcmVkUGxhY2Vob2xkZXIgPSBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInJlbmRlcmVkUGxhY2Vob2xkZXJcIiwgdmFsKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uVGV4dEJhc2UucHJvdG90eXBlLm9uUmVhZE9ubHlDaGFuZ2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBfc3VwZXIucHJvdG90eXBlLm9uUmVhZE9ubHlDaGFuZ2VkLmNhbGwodGhpcyk7XG4gICAgICAgIHRoaXMuY2FsY1JlbmRlcmVkUGxhY2Vob2xkZXIoKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uVGV4dEJhc2UucHJvdG90eXBlLm9uU3VydmV5TG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5jYWxjUmVuZGVyZWRQbGFjZWhvbGRlcigpO1xuICAgICAgICBfc3VwZXIucHJvdG90eXBlLm9uU3VydmV5TG9hZC5jYWxsKHRoaXMpO1xuICAgIH07XG4gICAgUXVlc3Rpb25UZXh0QmFzZS5wcm90b3R5cGUubG9jYWxlQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5sb2NhbGVDaGFuZ2VkLmNhbGwodGhpcyk7XG4gICAgICAgIHRoaXMuY2FsY1JlbmRlcmVkUGxhY2Vob2xkZXIoKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uVGV4dEJhc2UucHJvdG90eXBlLnNldFN1cnZleUltcGwgPSBmdW5jdGlvbiAodmFsdWUsIGlzTGlnaHQpIHtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5zZXRTdXJ2ZXlJbXBsLmNhbGwodGhpcywgdmFsdWUsIGlzTGlnaHQpO1xuICAgICAgICB0aGlzLmNhbGNSZW5kZXJlZFBsYWNlaG9sZGVyKCk7XG4gICAgfTtcbiAgICBRdWVzdGlvblRleHRCYXNlLnByb3RvdHlwZS5jYWxjUmVuZGVyZWRQbGFjZWhvbGRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHJlcyA9IHRoaXMucGxhY2VIb2xkZXI7XG4gICAgICAgIGlmICghIXJlcyAmJiAhdGhpcy5oYXNQbGFjZWhvbGRlcigpKSB7XG4gICAgICAgICAgICByZXMgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRSZW5kZXJlZFBsYWNlaG9sZGVyKHJlcyk7XG4gICAgfTtcbiAgICBRdWVzdGlvblRleHRCYXNlLnByb3RvdHlwZS5oYXNQbGFjZWhvbGRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmlzUmVhZE9ubHk7XG4gICAgfTtcbiAgICBRdWVzdGlvblRleHRCYXNlLnByb3RvdHlwZS5zZXROZXdWYWx1ZSA9IGZ1bmN0aW9uIChuZXdWYWx1ZSkge1xuICAgICAgICBfc3VwZXIucHJvdG90eXBlLnNldE5ld1ZhbHVlLmNhbGwodGhpcywgbmV3VmFsdWUpO1xuICAgICAgICB0aGlzLnVwZGF0ZVJlbWFpbmluZ0NoYXJhY3RlckNvdW50ZXIobmV3VmFsdWUpO1xuICAgIH07XG4gICAgUXVlc3Rpb25UZXh0QmFzZS5wcm90b3R5cGUuc2V0UXVlc3Rpb25WYWx1ZSA9IGZ1bmN0aW9uIChuZXdWYWx1ZSwgdXBkYXRlSXNBbnN3ZXJlZCkge1xuICAgICAgICBpZiAodXBkYXRlSXNBbnN3ZXJlZCA9PT0gdm9pZCAwKSB7IHVwZGF0ZUlzQW5zd2VyZWQgPSB0cnVlOyB9XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUuc2V0UXVlc3Rpb25WYWx1ZS5jYWxsKHRoaXMsIG5ld1ZhbHVlLCB1cGRhdGVJc0Fuc3dlcmVkKTtcbiAgICAgICAgdGhpcy51cGRhdGVSZW1haW5pbmdDaGFyYWN0ZXJDb3VudGVyKG5ld1ZhbHVlKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uVGV4dEJhc2UucHJvdG90eXBlLmNvbnZlcnRUb0NvcnJlY3RWYWx1ZSA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSlcbiAgICAgICAgICAgIHJldHVybiB2YWwuam9pbih0aGlzLmdldFZhbHVlU2VwYXJhdG9yKCkpO1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH07XG4gICAgUXVlc3Rpb25UZXh0QmFzZS5wcm90b3R5cGUuZ2V0VmFsdWVTZXBhcmF0b3IgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBcIiwgXCI7IH07XG4gICAgUXVlc3Rpb25UZXh0QmFzZS5wcm90b3R5cGUuY2hlY2tGb3JVbmRvID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVOYXRpdmVVbmRvUmVkbyAmJiB0aGlzLmlzSW5wdXRUZXh0VXBkYXRlICYmIChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpKSB7XG4gICAgICAgICAgICBpZiAoWzg5LCA5MF0uaW5kZXhPZihldmVudC5rZXlDb2RlKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBRdWVzdGlvblRleHRCYXNlLnByb3RvdHlwZS5nZXRDb250cm9sQ2xhc3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBuZXcgX3V0aWxzX2Nzc0NsYXNzQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiQ3NzQ2xhc3NCdWlsZGVyXCJdKClcbiAgICAgICAgICAgIC5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLnJvb3QpXG4gICAgICAgICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5vbkVycm9yLCB0aGlzLmVycm9ycy5sZW5ndGggPiAwKVxuICAgICAgICAgICAgLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMuY29udHJvbERpc2FibGVkLCB0aGlzLmlzUmVhZE9ubHkpXG4gICAgICAgICAgICAudG9TdHJpbmcoKTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblRleHRCYXNlLnByb3RvdHlwZSwgXCJpc05ld0ExMXlTdHJ1Y3R1cmVcIiwge1xuICAgICAgICAvL2ExMXlcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QoX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcInByb3BlcnR5XCJdKSh7IGxvY2FsaXphYmxlOiB0cnVlLCBvblNldDogZnVuY3Rpb24gKHZhbCwgdGFyZ2V0KSB7IHJldHVybiB0YXJnZXQuY2FsY1JlbmRlcmVkUGxhY2Vob2xkZXIoKTsgfSB9KVxuICAgIF0sIFF1ZXN0aW9uVGV4dEJhc2UucHJvdG90eXBlLCBcInBsYWNlaG9sZGVyXCIsIHZvaWQgMCk7XG4gICAgcmV0dXJuIFF1ZXN0aW9uVGV4dEJhc2U7XG59KF9xdWVzdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiUXVlc3Rpb25cIl0pKTtcblxuX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlNlcmlhbGl6ZXJcIl0uYWRkQ2xhc3MoXCJ0ZXh0YmFzZVwiLCBbXSwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25UZXh0QmFzZShcIlwiKTtcbn0sIFwicXVlc3Rpb25cIik7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvcXVlc3Rpb25mYWN0b3J5LnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9xdWVzdGlvbmZhY3RvcnkudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFF1ZXN0aW9uRmFjdG9yeSwgRWxlbWVudEZhY3RvcnkgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUXVlc3Rpb25GYWN0b3J5XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUXVlc3Rpb25GYWN0b3J5OyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJFbGVtZW50RmFjdG9yeVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEVsZW1lbnRGYWN0b3J5OyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc3VydmV5U3RyaW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9zdXJ2ZXlTdHJpbmdzICovIFwiLi9zcmMvc3VydmV5U3RyaW5ncy50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9qc29ub2JqZWN0ICovIFwiLi9zcmMvanNvbm9iamVjdC50c1wiKTtcblxuXG52YXIgUXVlc3Rpb25GYWN0b3J5ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFF1ZXN0aW9uRmFjdG9yeSgpIHtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uRmFjdG9yeSwgXCJEZWZhdWx0Q2hvaWNlc1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICBfc3VydmV5U3RyaW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3VydmV5TG9jYWxpemF0aW9uXCJdLmdldFN0cmluZyhcImNob2ljZXNfSXRlbVwiKSArIFwiMVwiLFxuICAgICAgICAgICAgICAgIF9zdXJ2ZXlTdHJpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdXJ2ZXlMb2NhbGl6YXRpb25cIl0uZ2V0U3RyaW5nKFwiY2hvaWNlc19JdGVtXCIpICsgXCIyXCIsXG4gICAgICAgICAgICAgICAgX3N1cnZleVN0cmluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN1cnZleUxvY2FsaXphdGlvblwiXS5nZXRTdHJpbmcoXCJjaG9pY2VzX0l0ZW1cIikgKyBcIjNcIixcbiAgICAgICAgICAgIF07XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25GYWN0b3J5LCBcIkRlZmF1bHRDb2x1bXNcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBjb2xOYW1lID0gX3N1cnZleVN0cmluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN1cnZleUxvY2FsaXphdGlvblwiXS5nZXRTdHJpbmcoXCJtYXRyaXhfY29sdW1uXCIpICsgXCIgXCI7XG4gICAgICAgICAgICByZXR1cm4gW2NvbE5hbWUgKyBcIjFcIiwgY29sTmFtZSArIFwiMlwiLCBjb2xOYW1lICsgXCIzXCJdO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uRmFjdG9yeSwgXCJEZWZhdWx0Um93c1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHJvd05hbWUgPSBfc3VydmV5U3RyaW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3VydmV5TG9jYWxpemF0aW9uXCJdLmdldFN0cmluZyhcIm1hdHJpeF9yb3dcIikgKyBcIiBcIjtcbiAgICAgICAgICAgIHJldHVybiBbcm93TmFtZSArIFwiMVwiLCByb3dOYW1lICsgXCIyXCJdO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uRmFjdG9yeSwgXCJEZWZhdWx0TXV0bGlwbGVUZXh0SXRlbXNcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBpdGVtTmFtZSA9IF9zdXJ2ZXlTdHJpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdXJ2ZXlMb2NhbGl6YXRpb25cIl0uZ2V0U3RyaW5nKFwibXVsdGlwbGV0ZXh0X2l0ZW1uYW1lXCIpO1xuICAgICAgICAgICAgcmV0dXJuIFtpdGVtTmFtZSArIFwiMVwiLCBpdGVtTmFtZSArIFwiMlwiXTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFF1ZXN0aW9uRmFjdG9yeS5wcm90b3R5cGUucmVnaXN0ZXJRdWVzdGlvbiA9IGZ1bmN0aW9uIChxdWVzdGlvblR5cGUsIHF1ZXN0aW9uQ3JlYXRvcikge1xuICAgICAgICBFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQocXVlc3Rpb25UeXBlLCBxdWVzdGlvbkNyZWF0b3IpO1xuICAgIH07XG4gICAgUXVlc3Rpb25GYWN0b3J5LnByb3RvdHlwZS5yZWdpc3RlckN1c3RvbVF1ZXN0aW9uID0gZnVuY3Rpb24gKHF1ZXN0aW9uVHlwZSkge1xuICAgICAgICBFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckN1c3RvbVF1ZXN0aW9uKHF1ZXN0aW9uVHlwZSk7XG4gICAgfTtcbiAgICBRdWVzdGlvbkZhY3RvcnkucHJvdG90eXBlLnVucmVnaXN0ZXJFbGVtZW50ID0gZnVuY3Rpb24gKGVsZW1lbnRUeXBlLCByZW1vdmVGcm9tU2VyaWFsaXplcikge1xuICAgICAgICBpZiAocmVtb3ZlRnJvbVNlcmlhbGl6ZXIgPT09IHZvaWQgMCkgeyByZW1vdmVGcm9tU2VyaWFsaXplciA9IGZhbHNlOyB9XG4gICAgICAgIEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnVucmVnaXN0ZXJFbGVtZW50KGVsZW1lbnRUeXBlLCByZW1vdmVGcm9tU2VyaWFsaXplcik7XG4gICAgfTtcbiAgICBRdWVzdGlvbkZhY3RvcnkucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jbGVhcigpO1xuICAgIH07XG4gICAgUXVlc3Rpb25GYWN0b3J5LnByb3RvdHlwZS5nZXRBbGxUeXBlcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmdldEFsbFR5cGVzKCk7XG4gICAgfTtcbiAgICBRdWVzdGlvbkZhY3RvcnkucHJvdG90eXBlLmNyZWF0ZVF1ZXN0aW9uID0gZnVuY3Rpb24gKHF1ZXN0aW9uVHlwZSwgbmFtZSkge1xuICAgICAgICByZXR1cm4gRWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChxdWVzdGlvblR5cGUsIG5hbWUpO1xuICAgIH07XG4gICAgUXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlID0gbmV3IFF1ZXN0aW9uRmFjdG9yeSgpO1xuICAgIHJldHVybiBRdWVzdGlvbkZhY3Rvcnk7XG59KCkpO1xuXG52YXIgRWxlbWVudEZhY3RvcnkgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gRWxlbWVudEZhY3RvcnkoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHRoaXMuY3JlYXRvckhhc2ggPSB7fTtcbiAgICAgICAgdGhpcy5yZWdpc3RlckN1c3RvbVF1ZXN0aW9uID0gZnVuY3Rpb24gKHF1ZXN0aW9uVHlwZSkge1xuICAgICAgICAgICAgdmFyIGNyZWF0b3IgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICAgICAgICAgIHZhciBlbCA9IF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJTZXJpYWxpemVyXCJdLmNyZWF0ZUNsYXNzKHF1ZXN0aW9uVHlwZSk7XG4gICAgICAgICAgICAgICAgaWYgKCEhZWwpXG4gICAgICAgICAgICAgICAgICAgIGVsLm5hbWUgPSBuYW1lO1xuICAgICAgICAgICAgICAgIHJldHVybiBlbDtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBfdGhpcy5yZWdpc3RlckVsZW1lbnQocXVlc3Rpb25UeXBlLCBjcmVhdG9yKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgRWxlbWVudEZhY3RvcnkucHJvdG90eXBlLnJlZ2lzdGVyRWxlbWVudCA9IGZ1bmN0aW9uIChlbGVtZW50VHlwZSwgZWxlbWVudENyZWF0b3IpIHtcbiAgICAgICAgdGhpcy5jcmVhdG9ySGFzaFtlbGVtZW50VHlwZV0gPSBlbGVtZW50Q3JlYXRvcjtcbiAgICB9O1xuICAgIEVsZW1lbnRGYWN0b3J5LnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5jcmVhdG9ySGFzaCA9IHt9O1xuICAgIH07XG4gICAgRWxlbWVudEZhY3RvcnkucHJvdG90eXBlLnVucmVnaXN0ZXJFbGVtZW50ID0gZnVuY3Rpb24gKGVsZW1lbnRUeXBlLCByZW1vdmVGcm9tU2VyaWFsaXplcikge1xuICAgICAgICBpZiAocmVtb3ZlRnJvbVNlcmlhbGl6ZXIgPT09IHZvaWQgMCkgeyByZW1vdmVGcm9tU2VyaWFsaXplciA9IGZhbHNlOyB9XG4gICAgICAgIGRlbGV0ZSB0aGlzLmNyZWF0b3JIYXNoW2VsZW1lbnRUeXBlXTtcbiAgICAgICAgaWYgKHJlbW92ZUZyb21TZXJpYWxpemVyKSB7XG4gICAgICAgICAgICBfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiU2VyaWFsaXplclwiXS5yZW1vdmVDbGFzcyhlbGVtZW50VHlwZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEVsZW1lbnRGYWN0b3J5LnByb3RvdHlwZS5nZXRBbGxUeXBlcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBBcnJheSgpO1xuICAgICAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5jcmVhdG9ySGFzaCkge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0LnNvcnQoKTtcbiAgICB9O1xuICAgIEVsZW1lbnRGYWN0b3J5LnByb3RvdHlwZS5jcmVhdGVFbGVtZW50ID0gZnVuY3Rpb24gKGVsZW1lbnRUeXBlLCBuYW1lKSB7XG4gICAgICAgIHZhciBjcmVhdG9yID0gdGhpcy5jcmVhdG9ySGFzaFtlbGVtZW50VHlwZV07XG4gICAgICAgIGlmICghIWNyZWF0b3IpXG4gICAgICAgICAgICByZXR1cm4gY3JlYXRvcihuYW1lKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgICBFbGVtZW50RmFjdG9yeS5JbnN0YW5jZSA9IG5ldyBFbGVtZW50RmFjdG9yeSgpO1xuICAgIHJldHVybiBFbGVtZW50RmFjdG9yeTtcbn0oKSk7XG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9xdWVzdGlvbm5vbnZhbHVlLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvcXVlc3Rpb25ub252YWx1ZS50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFF1ZXN0aW9uTm9uVmFsdWUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUXVlc3Rpb25Ob25WYWx1ZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFF1ZXN0aW9uTm9uVmFsdWU7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9xdWVzdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9xdWVzdGlvbiAqLyBcIi4vc3JjL3F1ZXN0aW9uLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2pzb25vYmplY3QgKi8gXCIuL3NyYy9qc29ub2JqZWN0LnRzXCIpO1xudmFyIF9fZXh0ZW5kcyA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG5cblxuLyoqXG4gKiBBIGJhc2UgY2xhc3MgZm9yIHF1ZXN0aW9uIHR5cGVzIHRoYXQgY2Fubm90IGhhdmUgYSB2YWx1ZSAoW0h0bWxdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vcXVlc3Rpb25odG1sbW9kZWwpLCBbSW1hZ2VdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vcXVlc3Rpb25pbWFnZW1vZGVsKSkuXG4gKlxuICogVGhpcyBjbGFzcyBkb2VzIG5vdCBpbXBsZW1lbnQgbmV3IGZ1bmN0aW9uYWxpdHkmbWRhc2g7aXQgb25seSByZWRlZmluZXMgZGVmYXVsdCB2YWx1ZXMgb2YgY2VydGFpbiBwcm9wZXJ0aWVzIGluaGVyaXRlZCBmcm9tIHRoZSBbYFF1ZXN0aW9uYF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9xdWVzdGlvbikgY2xhc3MuXG4gKi9cbnZhciBRdWVzdGlvbk5vblZhbHVlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhRdWVzdGlvbk5vblZhbHVlLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFF1ZXN0aW9uTm9uVmFsdWUobmFtZSkge1xuICAgICAgICByZXR1cm4gX3N1cGVyLmNhbGwodGhpcywgbmFtZSkgfHwgdGhpcztcbiAgICB9XG4gICAgUXVlc3Rpb25Ob25WYWx1ZS5wcm90b3R5cGUuZ2V0VHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIFwibm9udmFsdWVcIjtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbk5vblZhbHVlLnByb3RvdHlwZSwgXCJoYXNJbnB1dFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFF1ZXN0aW9uTm9uVmFsdWUucHJvdG90eXBlLCBcImhhc1RpdGxlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBRdWVzdGlvbk5vblZhbHVlLnByb3RvdHlwZS5nZXRUaXRsZUxvY2F0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvbk5vblZhbHVlLnByb3RvdHlwZSwgXCJoYXNDb21tZW50XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBRdWVzdGlvbk5vblZhbHVlLnByb3RvdHlwZS5oYXNFcnJvcnMgPSBmdW5jdGlvbiAoZmlyZUNhbGxiYWNrLCByZWMpIHtcbiAgICAgICAgaWYgKGZpcmVDYWxsYmFjayA9PT0gdm9pZCAwKSB7IGZpcmVDYWxsYmFjayA9IHRydWU7IH1cbiAgICAgICAgaWYgKHJlYyA9PT0gdm9pZCAwKSB7IHJlYyA9IG51bGw7IH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gICAgUXVlc3Rpb25Ob25WYWx1ZS5wcm90b3R5cGUuZ2V0QWxsRXJyb3JzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfTtcbiAgICBRdWVzdGlvbk5vblZhbHVlLnByb3RvdHlwZS5zdXBwb3J0R29OZXh0UGFnZUF1dG9tYXRpYyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gICAgUXVlc3Rpb25Ob25WYWx1ZS5wcm90b3R5cGUuYWRkQ29uZGl0aW9uT2JqZWN0c0J5Q29udGV4dCA9IGZ1bmN0aW9uIChvYmplY3RzLCBjb250ZXh0KSB7IH07XG4gICAgUXVlc3Rpb25Ob25WYWx1ZS5wcm90b3R5cGUuZ2V0Q29uZGl0aW9uSnNvbiA9IGZ1bmN0aW9uIChvcGVyYXRvciwgcGF0aCkge1xuICAgICAgICBpZiAob3BlcmF0b3IgPT09IHZvaWQgMCkgeyBvcGVyYXRvciA9IG51bGw7IH1cbiAgICAgICAgaWYgKHBhdGggPT09IHZvaWQgMCkgeyBwYXRoID0gbnVsbDsgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICAgIHJldHVybiBRdWVzdGlvbk5vblZhbHVlO1xufShfcXVlc3Rpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlF1ZXN0aW9uXCJdKSk7XG5cbl9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJTZXJpYWxpemVyXCJdLmFkZENsYXNzKFwibm9udmFsdWVcIiwgW1xuICAgIHsgbmFtZTogXCJ0aXRsZVwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogXCJkZXNjcmlwdGlvblwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogXCJ2YWx1ZU5hbWVcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwiZW5hYmxlSWZcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwiZGVmYXVsdFZhbHVlXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcImNvcnJlY3RBbnN3ZXJcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwiY2xlYXJJZkludmlzaWJsZVwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogXCJpc1JlcXVpcmVkXCIsIHZpc2libGU6IGZhbHNlLCBpc1NlcmlhbGl6YWJsZTogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwicmVxdWlyZWRFcnJvclRleHRcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwicmVhZE9ubHlcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwicmVxdWlyZWRJZlwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogXCJ2YWxpZGF0b3JzXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcInRpdGxlTG9jYXRpb25cIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwic2hvd0NvbW1lbnRBcmVhXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcInVzZURpc3BsYXlWYWx1ZXNJbkR5bmFtaWNUZXh0c1wiLCBhbHRlcm5hdGl2ZU5hbWU6IFwidXNlRGlzcGxheVZhbHVlc0luVGl0bGVcIiwgdmlzaWJsZTogZmFsc2UgfSxcbl0sIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uTm9uVmFsdWUoXCJcIik7XG59LCBcInF1ZXN0aW9uXCIpO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3JlbmRlcmVyRmFjdG9yeS50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvcmVuZGVyZXJGYWN0b3J5LnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBSZW5kZXJlckZhY3RvcnkgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUmVuZGVyZXJGYWN0b3J5XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUmVuZGVyZXJGYWN0b3J5OyB9KTtcbnZhciBSZW5kZXJlckZhY3RvcnkgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gUmVuZGVyZXJGYWN0b3J5KCkge1xuICAgICAgICB0aGlzLnJlbmRlcmVyc0hhc2ggPSB7fTtcbiAgICB9XG4gICAgUmVuZGVyZXJGYWN0b3J5LnByb3RvdHlwZS51bnJlZ2lzdGVyUmVuZGVyZXIgPSBmdW5jdGlvbiAocXVlc3Rpb25UeXBlLCByZW5kZXJlckFzKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLnJlbmRlcmVyc0hhc2hbcXVlc3Rpb25UeXBlXVtyZW5kZXJlckFzXTtcbiAgICB9O1xuICAgIFJlbmRlcmVyRmFjdG9yeS5wcm90b3R5cGUucmVnaXN0ZXJSZW5kZXJlciA9IGZ1bmN0aW9uIChxdWVzdGlvblR5cGUsIHJlbmRlckFzLCByZW5kZXJlcikge1xuICAgICAgICBpZiAoIXRoaXMucmVuZGVyZXJzSGFzaFtxdWVzdGlvblR5cGVdKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyc0hhc2hbcXVlc3Rpb25UeXBlXSA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVuZGVyZXJzSGFzaFtxdWVzdGlvblR5cGVdW3JlbmRlckFzXSA9IHJlbmRlcmVyO1xuICAgIH07XG4gICAgUmVuZGVyZXJGYWN0b3J5LnByb3RvdHlwZS5nZXRSZW5kZXJlciA9IGZ1bmN0aW9uIChxdWVzdGlvblR5cGUsIHJlbmRlckFzKSB7XG4gICAgICAgIHJldHVybiAoKHRoaXMucmVuZGVyZXJzSGFzaFtxdWVzdGlvblR5cGVdICYmXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyc0hhc2hbcXVlc3Rpb25UeXBlXVtyZW5kZXJBc10pIHx8XG4gICAgICAgICAgICBcImRlZmF1bHRcIik7XG4gICAgfTtcbiAgICBSZW5kZXJlckZhY3RvcnkucHJvdG90eXBlLmdldFJlbmRlcmVyQnlRdWVzdGlvbiA9IGZ1bmN0aW9uIChxdWVzdGlvbikge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRSZW5kZXJlcihxdWVzdGlvbi5nZXRUeXBlKCksIHF1ZXN0aW9uLnJlbmRlckFzKTtcbiAgICB9O1xuICAgIFJlbmRlcmVyRmFjdG9yeS5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXJzSGFzaCA9IHt9O1xuICAgIH07XG4gICAgUmVuZGVyZXJGYWN0b3J5Lkluc3RhbmNlID0gbmV3IFJlbmRlcmVyRmFjdG9yeSgpO1xuICAgIHJldHVybiBSZW5kZXJlckZhY3Rvcnk7XG59KCkpO1xuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvc2V0dGluZ3MudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvc2V0dGluZ3MudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogc2V0dGluZ3MgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic2V0dGluZ3NcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzZXR0aW5nczsgfSk7XG52YXIgZG9jdW1lbnQgPSBnbG9iYWxUaGlzLmRvY3VtZW50O1xudmFyIGRlZmF1bHRFbnZpcm9ubWVudCA9ICghIWRvY3VtZW50ID8ge1xuICAgIHJvb3Q6IGRvY3VtZW50LFxuICAgIF9yb290RWxlbWVudDogZG9jdW1lbnQuYm9keSxcbiAgICBnZXQgcm9vdEVsZW1lbnQoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuIChfYSA9IHRoaXMuX3Jvb3RFbGVtZW50KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBkb2N1bWVudC5ib2R5O1xuICAgIH0sXG4gICAgc2V0IHJvb3RFbGVtZW50KHJvb3RFbGVtZW50KSB7XG4gICAgICAgIHRoaXMuX3Jvb3RFbGVtZW50ID0gcm9vdEVsZW1lbnQ7XG4gICAgfSxcbiAgICBfcG9wdXBNb3VudENvbnRhaW5lcjogZG9jdW1lbnQuYm9keSxcbiAgICBnZXQgcG9wdXBNb3VudENvbnRhaW5lcigpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gKF9hID0gdGhpcy5fcG9wdXBNb3VudENvbnRhaW5lcikgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogZG9jdW1lbnQuYm9keTtcbiAgICB9LFxuICAgIHNldCBwb3B1cE1vdW50Q29udGFpbmVyKHBvcHVwTW91bnRDb250YWluZXIpIHtcbiAgICAgICAgdGhpcy5fcG9wdXBNb3VudENvbnRhaW5lciA9IHBvcHVwTW91bnRDb250YWluZXI7XG4gICAgfSxcbiAgICBzdmdNb3VudENvbnRhaW5lcjogZG9jdW1lbnQuaGVhZCxcbiAgICBzdHlsZXNTaGVldHNNb3VudENvbnRhaW5lcjogZG9jdW1lbnQuaGVhZCxcbn0gOiB1bmRlZmluZWQpO1xudmFyIGNvbHVtbldpZHRoc0J5VHlwZSA9IHtcbiAgICBcImZpbGVcIjogeyBtaW5XaWR0aDogXCIyNDBweFwiIH0sXG4gICAgXCJjb21tZW50XCI6IHsgbWluV2lkdGg6IFwiMjAwcHhcIiB9XG59O1xuLyoqXG4gKiBHbG9iYWwgc2V0dGluZ3MgdGhhdCBhcHBseSB0byBhbGwgc3VydmV5cyBvbiB0aGUgcGFnZS4gVG8gc3BlY2lmeSBvbmUgb2YgdGhlIHNldHRpbmdzLCB1c2UgdGhlIGNvZGUgYmVsb3c6XG4gKlxuICogYGBganNcbiAqIGltcG9ydCB7IHNldHRpbmdzIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG4gKlxuICogc2V0dGluZ3Muc2V0dGluZ05hbWUgPSBcInZhbHVlXCI7XG4gKiBgYGBcbiAqL1xudmFyIHNldHRpbmdzID0ge1xuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCB0aGF0IGNvbmZpZ3VyZXMgc3VydmV5IGFwcGVhcmFuY2Ugd2hlbiB0aGUgc3VydmV5IGlzIGJlaW5nIGRlc2lnbmVkIGluIFN1cnZleSBDcmVhdG9yLlxuICAgICAqXG4gICAgICogTmVzdGVkIHByb3BlcnRpZXM6XG4gICAgICpcbiAgICAgKiAtIGBzaG93RW1wdHlEZXNjcmlwdGlvbnNgOiBgQm9vbGVhbmBcXFxuICAgICAqIFNwZWNpZmllcyB3aGV0aGVyIHRvIGRpc3BsYXkgYW4gZW1wdHkgZGVzY3JpcHRpb24gZm9yIHBhZ2VzIGFuZCBwYW5lbHMuIERlZmF1bHQgdmFsdWU6IGB0cnVlYC5cbiAgICAgKlxuICAgICAqIC0gYHNob3dFbXB0eVRpdGxlc2A6IGBCb29sZWFuYFxcXG4gICAgICogU3BlY2lmaWVzIHdoZXRoZXIgdG8gZGlzcGxheSBhbiBlbXB0eSB0aXRsZSBmb3IgcGFnZXMgYW5kIHBhbmVscy4gRGVmYXVsdCB2YWx1ZTogYHRydWVgLlxuICAgICAqL1xuICAgIGRlc2lnbk1vZGU6IHtcbiAgICAgICAgc2hvd0VtcHR5RGVzY3JpcHRpb25zOiB0cnVlLFxuICAgICAgICBzaG93RW1wdHlUaXRsZXM6IHRydWVcbiAgICB9LFxuICAgIC8vI3JlZ2lvbiBkZXNpZ25Nb2RlIHNlY3Rpb24sIE9ic29sZXRlIHByb3BlcnRpZXNcbiAgICAvKipcbiAgICAgKiBUaGlzIHByb3BlcnR5IGlzIG9ic29sZXRlLiBVc2UgdGhlIFtgc2V0dGluZ3MuZGVzaWduTW9kZS5zaG93RW1wdHlEZXNjcmlwdGlvbnNgXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2Uvc2V0dGluZ3MjZGVzaWduTW9kZSkgcHJvcGVydHkgaW5zdGVhZC5cbiAgICAgKi9cbiAgICBnZXQgYWxsb3dTaG93RW1wdHlEZXNjcmlwdGlvbkluRGVzaWduTW9kZSgpIHsgcmV0dXJuIHRoaXMuZGVzaWduTW9kZS5zaG93RW1wdHlEZXNjcmlwdGlvbnM7IH0sXG4gICAgc2V0IGFsbG93U2hvd0VtcHR5RGVzY3JpcHRpb25JbkRlc2lnbk1vZGUodmFsKSB7IHRoaXMuZGVzaWduTW9kZS5zaG93RW1wdHlEZXNjcmlwdGlvbnMgPSB2YWw7IH0sXG4gICAgLyoqXG4gICAgICogVGhpcyBwcm9wZXJ0eSBpcyBvYnNvbGV0ZS4gVXNlIHRoZSBbYHNldHRpbmdzLmRlc2lnbk1vZGUuc2hvd0VtcHR5VGl0bGVzYF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL3NldHRpbmdzI2Rlc2lnbk1vZGUpIHByb3BlcnR5IGluc3RlYWQuXG4gICAgICovXG4gICAgZ2V0IGFsbG93U2hvd0VtcHR5VGl0bGVJbkRlc2lnbk1vZGUoKSB7IHJldHVybiB0aGlzLmRlc2lnbk1vZGUuc2hvd0VtcHR5VGl0bGVzOyB9LFxuICAgIHNldCBhbGxvd1Nob3dFbXB0eVRpdGxlSW5EZXNpZ25Nb2RlKHZhbCkgeyB0aGlzLmRlc2lnbk1vZGUuc2hvd0VtcHR5VGl0bGVzID0gdmFsOyB9LFxuICAgIC8vI2VuZHJlZ2lvblxuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIHByb3BlcnRpZXMgcmVsYXRlZCB0byBsb2NhbGl6YXRpb24uXG4gICAgICpcbiAgICAgKiBOZXN0ZWQgcHJvcGVydGllczpcbiAgICAgKlxuICAgICAqIC0gYHVzZUxvY2FsVGltZVpvbmVgOiBgQm9vbGVhbmBcXFxuICAgICAqIERpc2FibGUgdGhpcyBwcm9wZXJ0eSBpZiB5b3Ugd2FudCBpbnRlcm5hbCBTdXJ2ZXlKUyBmdW5jdGlvbnMgdG8gdXNlIG1ldGhvZHMgdGhhdCB3b3JrIHdpdGggVVRDIGRhdGUgYW5kIHRpbWUgKGBzZXRVVENEYXRlKClgIGBzZXRVVENIb3VycygpYCwgZXRjLikgaW5zdGVhZCBvZiBtZXRob2RzIHRoYXQgd29yayB3aXRoIGxvY2FsIGRhdGUgYW5kIHRpbWUgKGBzZXRZZWFyYCwgYHNldEhvdXJzKClgLCBldGMuKS4gRGVmYXVsdCB2YWx1ZTogYHRydWVgLlxuICAgICAqXG4gICAgICogLSBgZGVmYXVsdExvY2FsZU5hbWVgOiBgU3RyaW5nYFxcXG4gICAgICogQSBwcm9wZXJ0eSBrZXkgdGhhdCBzdG9yZXMgYSB0cmFuc2xhdGlvbiBmb3IgdGhlIGRlZmF1bHQgbG9jYWxlLiBEZWZhdWx0IHZhbHVlOiBgXCJkZWZhdWx0XCJgLlxuICAgICAqXG4gICAgICogLSBgc3RvcmVEdXBsaWNhdGVkVHJhbnNsYXRpb25zYDogYEJvb2xlYW5gXFxcbiAgICAgKiBTcGVjaWZpZXMgd2hldGhlciBzdXJ2ZXlzIHNob3VsZCBzdG9yZSB0cmFuc2xhdGlvbiBzdHJpbmdzIHRoYXQgZXF1YWwgdGhlIHRyYW5zbGF0aW9uIHN0cmluZ3MgaW4gdGhlIGRlZmF1bHQgbG9jYWxlLiBEZWZhdWx0IHZhbHVlOiBgZmFsc2VgLlxuICAgICAqL1xuICAgIGxvY2FsaXphdGlvbjoge1xuICAgICAgICB1c2VMb2NhbFRpbWVab25lOiB0cnVlLFxuICAgICAgICBzdG9yZUR1cGxpY2F0ZWRUcmFuc2xhdGlvbnM6IGZhbHNlLFxuICAgICAgICBkZWZhdWx0TG9jYWxlTmFtZTogXCJkZWZhdWx0XCJcbiAgICB9LFxuICAgIC8vI3JlZ2lvbiBsb2NhbGl6YXRpb24gc2VjdGlvbiwgb2Jzb2xldGUgcHJvcGVydGllc1xuICAgIC8qKlxuICAgICAqIFRoaXMgcHJvcGVydHkgaXMgb2Jzb2xldGUuIFVzZSB0aGUgW2BzZXR0aW5ncy5sb2NhbGl6YXRpb24udXNlTG9jYWxUaW1lWm9uZWBdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vYXBpLXJlZmVyZW5jZS9zZXR0aW5ncyNsb2NhbGl6YXRpb24pIHByb3BlcnR5IGluc3RlYWQuXG4gICAgICovXG4gICAgZ2V0IHVzZUxvY2FsVGltZVpvbmUoKSB7IHJldHVybiB0aGlzLmxvY2FsaXphdGlvbi51c2VMb2NhbFRpbWVab25lOyB9LFxuICAgIHNldCB1c2VMb2NhbFRpbWVab25lKHZhbCkgeyB0aGlzLmxvY2FsaXphdGlvbi51c2VMb2NhbFRpbWVab25lID0gdmFsOyB9LFxuICAgIC8qKlxuICAgICAqIFRoaXMgcHJvcGVydHkgaXMgb2Jzb2xldGUuIFVzZSB0aGUgW2BzZXR0aW5ncy5sb2NhbGl6YXRpb24uc3RvcmVEdXBsaWNhdGVkVHJhbnNsYXRpb25zYF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL3NldHRpbmdzI2xvY2FsaXphdGlvbikgcHJvcGVydHkgaW5zdGVhZC5cbiAgICAgKi9cbiAgICBnZXQgc3RvcmVEdXBsaWNhdGVkVHJhbnNsYXRpb25zKCkgeyByZXR1cm4gdGhpcy5sb2NhbGl6YXRpb24uc3RvcmVEdXBsaWNhdGVkVHJhbnNsYXRpb25zOyB9LFxuICAgIHNldCBzdG9yZUR1cGxpY2F0ZWRUcmFuc2xhdGlvbnModmFsKSB7IHRoaXMubG9jYWxpemF0aW9uLnN0b3JlRHVwbGljYXRlZFRyYW5zbGF0aW9ucyA9IHZhbDsgfSxcbiAgICAvKipcbiAgICAgKiBUaGlzIHByb3BlcnR5IGlzIG9ic29sZXRlLiBVc2UgdGhlIFtgc2V0dGluZ3MubG9jYWxpemF0aW9uLmRlZmF1bHRMb2NhbGVOYW1lYF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL3NldHRpbmdzI2xvY2FsaXphdGlvbikgcHJvcGVydHkgaW5zdGVhZC5cbiAgICAgKi9cbiAgICBnZXQgZGVmYXVsdExvY2FsZU5hbWUoKSB7IHJldHVybiB0aGlzLmxvY2FsaXphdGlvbi5kZWZhdWx0TG9jYWxlTmFtZTsgfSxcbiAgICBzZXQgZGVmYXVsdExvY2FsZU5hbWUodmFsKSB7IHRoaXMubG9jYWxpemF0aW9uLmRlZmF1bHRMb2NhbGVOYW1lID0gdmFsOyB9LFxuICAgIC8vI2VuZHJlZ2lvblxuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCB3aXRoIHByb3BlcnRpZXMgdGhhdCBjb25maWd1cmUgc3VydmV5cyB3aGVuIHRoZXkgd29yayB3aXRoIGEgd2ViIHNlcnZpY2UuXG4gICAgICpcbiAgICAgKiBOZXN0ZWQgcHJvcGVydGllczpcbiAgICAgKlxuICAgICAqIC0gYGVuY29kZVVybFBhcmFtc2A6IGBCb29sZWFuYFxcXG4gICAgICogU3BlY2lmaWVzIHdoZXRoZXIgdG8gZW5jb2RlIFVSTCBwYXJhbWV0ZXJzIHdoZW4geW91IGFjY2VzcyBhIHdlYiBzZXJ2aWNlLiBEZWZhdWx0IHZhbHVlOiBgdHJ1ZWAuXG4gICAgICpcbiAgICAgKiAtIGBjYWNoZUxvYWRlZENob2ljZXNgOiBgQm9vbGVhbmBcXFxuICAgICAqIFNwZWNpZmllcyB3aGV0aGVyIHRvIGNhY2hlIFtjaG9pY2VzXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2UvY2hlY2tib3gtcXVlc3Rpb24tbW9kZWwjY2hvaWNlc0J5VXJsKSBsb2FkZWQgZnJvbSBhIHdlYiBzZXJ2aWNlLiBEZWZhdWx0IHZhbHVlOiBgdHJ1ZWAuXG4gICAgICpcbiAgICAgKiAtIGBkaXNhYmxlUXVlc3Rpb25XaGlsZUxvYWRpbmdDaG9pY2VzYDogYEJvb2xlYW5gXFxcbiAgICAgKiBEaXNhYmxlcyBhIHF1ZXN0aW9uIHdoaWxlIGl0cyBjaG9pY2VzIGFyZSBiZWluZyBsb2FkZWQgZnJvbSBhIHdlYiBzZXJ2aWNlLiBEZWZhdWx0IHZhbHVlOiBgZmFsc2VgLlxuICAgICAqXG4gICAgICogLSBgc3VydmV5U2VydmljZVVybGA6IGBTdHJpbmdgXFxcbiAgICAgKiBUaGUgVVJMIG9mIHRoZSBTdXJ2ZXlKUyBTZXJ2aWNlIEFQSSBlbmRwb2ludC5cbiAgICAgKi9cbiAgICB3ZWI6IHtcbiAgICAgICAgZW5jb2RlVXJsUGFyYW1zOiB0cnVlLFxuICAgICAgICBjYWNoZUxvYWRlZENob2ljZXM6IHRydWUsXG4gICAgICAgIGRpc2FibGVRdWVzdGlvbldoaWxlTG9hZGluZ0Nob2ljZXM6IGZhbHNlLFxuICAgICAgICBzdXJ2ZXlTZXJ2aWNlVXJsOiBcImh0dHBzOi8vYXBpLnN1cnZleWpzLmlvL3B1YmxpYy92MS9TdXJ2ZXlcIlxuICAgIH0sXG4gICAgLy8jcmVnaW9uIHdlYiBzZWN0aW9uLCBvYnNvbGV0ZSBwcm9wZXJ0aWVzXG4gICAgLyoqXG4gICAgICogVGhpcyBwcm9wZXJ0eSBpcyBvYnNvbGV0ZS4gVXNlIHRoZSBbYHNldHRpbmdzLndlYi5lbmNvZGVVcmxQYXJhbXNgXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2Uvc2V0dGluZ3Mjd2ViKSBwcm9wZXJ0eSBpbnN0ZWFkLlxuICAgICAqL1xuICAgIGdldCB3ZWJzZXJ2aWNlRW5jb2RlUGFyYW1ldGVycygpIHsgcmV0dXJuIHRoaXMud2ViLmVuY29kZVVybFBhcmFtczsgfSxcbiAgICBzZXQgd2Vic2VydmljZUVuY29kZVBhcmFtZXRlcnModmFsKSB7IHRoaXMud2ViLmVuY29kZVVybFBhcmFtcyA9IHZhbDsgfSxcbiAgICAvKipcbiAgICAgKiBUaGlzIHByb3BlcnR5IGlzIG9ic29sZXRlLiBVc2UgdGhlIFtgc2V0dGluZ3Mud2ViLmNhY2hlTG9hZGVkQ2hvaWNlc2BdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vYXBpLXJlZmVyZW5jZS9zZXR0aW5ncyN3ZWIpIHByb3BlcnR5IGluc3RlYWQuXG4gICAgICovXG4gICAgZ2V0IHVzZUNhY2hpbmdGb3JDaG9pY2VzUmVzdGZ1bCgpIHsgcmV0dXJuIHRoaXMud2ViLmNhY2hlTG9hZGVkQ2hvaWNlczsgfSxcbiAgICBzZXQgdXNlQ2FjaGluZ0ZvckNob2ljZXNSZXN0ZnVsKHZhbCkgeyB0aGlzLndlYi5jYWNoZUxvYWRlZENob2ljZXMgPSB2YWw7IH0sXG4gICAgZ2V0IHVzZUNhY2hpbmdGb3JDaG9pY2VzUmVzdGZ1bGwoKSB7IHJldHVybiB0aGlzLndlYi5jYWNoZUxvYWRlZENob2ljZXM7IH0sXG4gICAgc2V0IHVzZUNhY2hpbmdGb3JDaG9pY2VzUmVzdGZ1bGwodmFsKSB7IHRoaXMud2ViLmNhY2hlTG9hZGVkQ2hvaWNlcyA9IHZhbDsgfSxcbiAgICAvKipcbiAgICAgKiBUaGlzIHByb3BlcnR5IGlzIG9ic29sZXRlLiBVc2UgdGhlIFtgc2V0dGluZ3Mud2ViLmRpc2FibGVRdWVzdGlvbldoaWxlTG9hZGluZ0Nob2ljZXNgXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2Uvc2V0dGluZ3Mjd2ViKSBwcm9wZXJ0eSBpbnN0ZWFkLlxuICAgICAqL1xuICAgIGdldCBkaXNhYmxlT25HZXR0aW5nQ2hvaWNlc0Zyb21XZWIoKSB7IHJldHVybiB0aGlzLndlYi5kaXNhYmxlUXVlc3Rpb25XaGlsZUxvYWRpbmdDaG9pY2VzOyB9LFxuICAgIHNldCBkaXNhYmxlT25HZXR0aW5nQ2hvaWNlc0Zyb21XZWIodmFsKSB7IHRoaXMud2ViLmRpc2FibGVRdWVzdGlvbldoaWxlTG9hZGluZ0Nob2ljZXMgPSB2YWw7IH0sXG4gICAgLyoqXG4gICAgICogVGhpcyBwcm9wZXJ0eSBpcyBvYnNvbGV0ZS4gVXNlIHRoZSBbYHNldHRpbmdzLndlYi5zdXJ2ZXlTZXJ2aWNlVXJsYF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL3NldHRpbmdzI3dlYikgcHJvcGVydHkgaW5zdGVhZC5cbiAgICAgKi9cbiAgICBnZXQgc3VydmV5U2VydmljZVVybCgpIHsgcmV0dXJuIHRoaXMud2ViLnN1cnZleVNlcnZpY2VVcmw7IH0sXG4gICAgc2V0IHN1cnZleVNlcnZpY2VVcmwodmFsKSB7IHRoaXMud2ViLnN1cnZleVNlcnZpY2VVcmwgPSB2YWw7IH0sXG4gICAgLy8jZW5kcmVnaW9uXG4gICAgLyoqXG4gICAgICogQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgcHJvcGVydGllcyByZWxhdGVkIHRvIFt0cmlnZ2Vyc10oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9kZXNpZ24tc3VydmV5L2NvbmRpdGlvbmFsLWxvZ2ljI2NvbmRpdGlvbmFsLXN1cnZleS1sb2dpYy10cmlnZ2VycykuXG4gICAgICpcbiAgICAgKiBOZXN0ZWQgcHJvcGVydGllczpcbiAgICAgKlxuICAgICAqIC0gYGNoYW5nZU5hdmlnYXRpb25CdXR0b25zT25Db21wbGV0ZWA6IGBCb29sZWFuYFxcXG4gICAgICogU3BlY2lmaWVzIHdoZXRoZXIgdG8gcmUtZXZhbHVhdGUgYW4gZXhwcmVzc2lvbiBhc3NvY2lhdGVkIHdpdGggdGhlIFtDb21wbGV0ZSB0cmlnZ2VyXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2Rlc2lnbi1zdXJ2ZXkvY29uZGl0aW9uYWwtbG9naWMjY29tcGxldGUpIGltbWVkaWF0ZWx5IHdoZW4gYSBxdWVzdGlvbiB2YWx1ZSBjaGFuZ2VzLiBJZiB0aGUgZXhwcmVzc2lvbiBldmFsdWF0ZXMgdG8gYHRydWVgLCB0aGUgdHJpZ2dlciBpcyBleGVjdXRlZC4gRGVmYXVsdCB2YWx1ZTogYGZhbHNlYC5cXFxuICAgICAqIEtlZXAgdGhpcyBwcm9wZXJ0eSBzZXQgdG8gYGZhbHNlYCBpZiB5b3Ugd2FudCB0byByZS1ldmFsdWF0ZSB0aGUgQ29tcGxldGUgdHJpZ2dlcidzIGV4cHJlc3Npb24gb25seSB3aGVuIHRoZSByZXNwb25kZW50cyBuYXZpZ2F0ZSB0byBhbm90aGVyIHBhZ2UuXG4gICAgICpcbiAgICAgKiAtIGBleGVjdXRlQ29tcGxldGVPblZhbHVlQ2hhbmdlZGA6IGBCb29sZWFuYFxcXG4gICAgICogU3BlY2lmaWVzIHdoZXRoZXIgdG8gcmVwbGFjZSB0aGUgTmV4dCBidXR0b24gd2l0aCB0aGUgQ29tcGxldGUgYnV0dG9uIHdoZW4gdGhlIFtDb21wbGV0ZSB0cmlnZ2VyXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2Rlc2lnbi1zdXJ2ZXkvY29uZGl0aW9uYWwtbG9naWMjY29tcGxldGUpIGlzIGdvaW5nIHRvIGJlIGV4ZWN1dGVkLiBEZWZhdWx0IHZhbHVlOiBgdHJ1ZWAuXG4gICAgICpcbiAgICAgKiAtIGBleGVjdXRlU2tpcE9uVmFsdWVDaGFuZ2VkYDogYEJvb2xlYW5gXFxcbiAgICAgKiBTcGVjaWZpZXMgd2hldGhlciB0byByZS1ldmFsdWF0ZSBhbiBleHByZXNzaW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgW1NraXAgdHJpZ2dlcl0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9kZXNpZ24tc3VydmV5L2NvbmRpdGlvbmFsLWxvZ2ljI3NraXApIGltbWVkaWF0ZWx5IHdoZW4gYSBxdWVzdGlvbiB2YWx1ZSBjaGFuZ2VzLiBJZiB0aGUgZXhwcmVzc2lvbiBldmFsdWF0ZXMgdG8gYHRydWVgLCB0aGUgdHJpZ2dlciBpcyBleGVjdXRlZC4gRGVmYXVsdCB2YWx1ZTogYHRydWVgLlxcXG4gICAgICogRGlzYWJsZSB0aGlzIHByb3BlcnR5IGlmIHlvdSB3YW50IHRvIHJlLWV2YWx1YXRlIHRoZSBTa2lwIHRyaWdnZXIncyBleHByZXNzaW9uIG9ubHkgd2hlbiByZXNwb25kZW50cyBuYXZpZ2F0ZSB0byBhbm90aGVyIHBhZ2UuXG4gICAgICovXG4gICAgdHJpZ2dlcnM6IHtcbiAgICAgICAgY2hhbmdlTmF2aWdhdGlvbkJ1dHRvbnNPbkNvbXBsZXRlOiB0cnVlLFxuICAgICAgICBleGVjdXRlQ29tcGxldGVPblZhbHVlQ2hhbmdlZDogZmFsc2UsXG4gICAgICAgIGV4ZWN1dGVTa2lwT25WYWx1ZUNoYW5nZWQ6IHRydWVcbiAgICB9LFxuICAgIC8vI3JlZ2lvbiB0cmlnZ2VycyBzZWN0aW9uLCBPYnNvbGV0ZSBwcm9wZXJ0aWVzXG4gICAgLyoqXG4gICAgICogVGhpcyBwcm9wZXJ0eSBpcyBvYnNvbGV0ZS4gVXNlIHRoZSBbYHNldHRpbmdzLnRyaWdnZXJzLmV4ZWN1dGVDb21wbGV0ZU9uVmFsdWVDaGFuZ2VkYF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL3NldHRpbmdzI3RyaWdnZXJzKSBwcm9wZXJ0eSBpbnN0ZWFkLlxuICAgICAqL1xuICAgIGdldCBleGVjdXRlQ29tcGxldGVUcmlnZ2VyT25WYWx1ZUNoYW5nZWQoKSB7IHJldHVybiB0aGlzLnRyaWdnZXJzLmV4ZWN1dGVDb21wbGV0ZU9uVmFsdWVDaGFuZ2VkOyB9LFxuICAgIHNldCBleGVjdXRlQ29tcGxldGVUcmlnZ2VyT25WYWx1ZUNoYW5nZWQodmFsKSB7IHRoaXMudHJpZ2dlcnMuZXhlY3V0ZUNvbXBsZXRlT25WYWx1ZUNoYW5nZWQgPSB2YWw7IH0sXG4gICAgLyoqXG4gICAgICogVGhpcyBwcm9wZXJ0eSBpcyBvYnNvbGV0ZS4gVXNlIHRoZSBbYHNldHRpbmdzLnRyaWdnZXJzLmNoYW5nZU5hdmlnYXRpb25CdXR0b25zT25Db21wbGV0ZWBdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vYXBpLXJlZmVyZW5jZS9zZXR0aW5ncyN0cmlnZ2VycykgcHJvcGVydHkgaW5zdGVhZC5cbiAgICAgKi9cbiAgICBnZXQgY2hhbmdlTmF2aWdhdGlvbkJ1dHRvbnNPbkNvbXBsZXRlVHJpZ2dlcigpIHsgcmV0dXJuIHRoaXMudHJpZ2dlcnMuY2hhbmdlTmF2aWdhdGlvbkJ1dHRvbnNPbkNvbXBsZXRlOyB9LFxuICAgIHNldCBjaGFuZ2VOYXZpZ2F0aW9uQnV0dG9uc09uQ29tcGxldGVUcmlnZ2VyKHZhbCkgeyB0aGlzLnRyaWdnZXJzLmNoYW5nZU5hdmlnYXRpb25CdXR0b25zT25Db21wbGV0ZSA9IHZhbDsgfSxcbiAgICAvKipcbiAgICAgKiBUaGlzIHByb3BlcnR5IGlzIG9ic29sZXRlLiBVc2UgdGhlIFtgc2V0dGluZ3MudHJpZ2dlcnMuZXhlY3V0ZVNraXBPblZhbHVlQ2hhbmdlZGBdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vYXBpLXJlZmVyZW5jZS9zZXR0aW5ncyN0cmlnZ2VycykgcHJvcGVydHkgaW5zdGVhZC5cbiAgICAgKi9cbiAgICBnZXQgZXhlY3V0ZVNraXBUcmlnZ2VyT25WYWx1ZUNoYW5nZWQoKSB7IHJldHVybiB0aGlzLnRyaWdnZXJzLmV4ZWN1dGVTa2lwT25WYWx1ZUNoYW5nZWQ7IH0sXG4gICAgc2V0IGV4ZWN1dGVTa2lwVHJpZ2dlck9uVmFsdWVDaGFuZ2VkKHZhbCkgeyB0aGlzLnRyaWdnZXJzLmV4ZWN1dGVTa2lwT25WYWx1ZUNoYW5nZWQgPSB2YWw7IH0sXG4gICAgLy8jZW5kcmVnaW9uXG4gICAgLyoqXG4gICAgICogQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgcHJvcGVydGllcyByZWxhdGVkIHRvIEpTT04gc2VyaWFsaXphdGlvbi5cbiAgICAgKlxuICAgICAqIE5lc3RlZCBwcm9wZXJ0aWVzOlxuICAgICAqXG4gICAgICogLSBgaXRlbVZhbHVlU2VyaWFsaXplQXNPYmplY3RgOiBgQm9vbGVhbmBcXFxuICAgICAqIEVuYWJsZSB0aGlzIHByb3BlcnR5IGlmIHlvdSB3YW50IHRvIHNlcmlhbGl6ZSBbYEl0ZW1WYWx1ZWBdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vYXBpLXJlZmVyZW5jZS9pdGVtdmFsdWUpIGluc3RhbmNlcyBhcyBvYmplY3RzIGV2ZW4gd2hlbiB0aGV5IGluY2x1ZGUgb25seSB0aGUgYHZhbHVlYCBwcm9wZXJ0eS4gRGVmYXVsdCB2YWx1ZTogYGZhbHNlYC4gVmlldyBhbiBleGFtcGxlIGJlbG93LlxuICAgICAqXG4gICAgICogLSBgaXRlbVZhbHVlU2VyaWFsaXplRGlzcGxheVRleHRgOiBgQm9vbGVhbmBcXFxuICAgICAqIEVuYWJsZSB0aGlzIHByb3BlcnR5IGlmIHlvdSB3YW50IHRvIHNlcmlhbGl6ZSB0aGUgYHRleHRgIHByb3BlcnR5IG9mIFtgSXRlbVZhbHVlYF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL2l0ZW12YWx1ZSkgb2JqZWN0cyBldmVuIHdoZW4gaXQgaXMgZW1wdHkgb3IgZXF1YWwgdG8gdGhlIGB2YWx1ZWAgcHJvcGVydHkuIERlZmF1bHQgdmFsdWU6IGBmYWxzZWAuIFZpZXcgYW4gZXhhbXBsZSBiZWxvdy5cbiAgICAgKlxuICAgICAqIC0gYGxvY2FsaXphYmxlU3RyaW5nU2VyaWFsaXplQXNPYmplY3RgOiBgQm9vbGVhbmBcXFxuICAgICAqIEVuYWJsZSB0aGlzIHByb3BlcnR5IGlmIHlvdSB3YW50IHRvIHNlcmlhbGl6ZSBbYExvY2FsaXphYmxlU3RyaW5nYF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL2xvY2FsaXphYmxlc3RyaW5nKSBpbnN0YW5jZXMgYXMgb2JqZWN0cyBldmVuIHdoZW4gdGhleSBpbmNsdWRlIG9ubHkgYSB0cmFuc2xhdGlvbiBzdHJpbmcgZm9yIHRoZSBkZWZhdWx0IGxvY2FsZS4gRm9yIGV4YW1wbGUsIGBcIkN1c3RvbSBTdHJpbmdcImAgd2lsbCBiZSBzZXJpYWxpemVkIGFzIGB7IGRlZmF1bHQ6IFwiQ3VzdG9tIFN0cmluZ1wiIH1gLiBEZWZhdWx0IHZhbHVlOiBgZmFsc2VgLlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBpbXBvcnQgeyBJdGVtVmFsdWUsIHNldHRpbmdzIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG4gICAgICpcbiAgICAgKiAvLyBgaXRlbVZhbHVlU2VyaWFsaXplQXNPYmplY3RgIGV4YW1wbGVcbiAgICAgKiBzZXR0aW5ncy5sb2NhbGl6YXRpb24uaXRlbVZhbHVlU2VyaWFsaXplQXNPYmplY3QgPSB0cnVlO1xuICAgICAqIGNvbnN0IGl0ZW0gPSBuZXcgSXRlbVZhbHVlKDUpO1xuICAgICAqIGNvbnN0IGl0ZW1TdHJpbmcgPSBpdGVtLnRvSlNPTigpOyAvLyBQcm9kdWNlcyB7IHZhbHVlOiA1IH0gaW5zdGVhZCBvZiA1XG4gICAgICpcbiAgICAgKiAvLyBgaXRlbVZhbHVlU2VyaWFsaXplRGlzcGxheVRleHRgIGV4YW1wbGVcbiAgICAgKiBzZXR0aW5ncy5sb2NhbGl6YXRpb24uaXRlbVZhbHVlU2VyaWFsaXplRGlzcGxheVRleHQgPSB0cnVlO1xuICAgICAqIGNvbnN0IGl0ZW0gPSBuZXcgSXRlbVZhbHVlKFwiaXRlbTFcIik7XG4gICAgICogY29uc3QgaXRlbVN0cmluZyA9IGl0ZW0udG9KU09OKCk7IC8vIFByb2R1Y2VzIHsgdmFsdWU6IFwiaXRlbTFcIiwgdGV4dDogXCJpdGVtMVwiIH0gaW5zdGVhZCBvZiBcIml0ZW0xXCJcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBzZXJpYWxpemF0aW9uOiB7XG4gICAgICAgIGl0ZW1WYWx1ZVNlcmlhbGl6ZUFzT2JqZWN0OiBmYWxzZSxcbiAgICAgICAgaXRlbVZhbHVlU2VyaWFsaXplRGlzcGxheVRleHQ6IGZhbHNlLFxuICAgICAgICBsb2NhbGl6YWJsZVN0cmluZ1NlcmlhbGl6ZUFzT2JqZWN0OiBmYWxzZVxuICAgIH0sXG4gICAgLy8jcmVnaW9uIHNlcmlhbGl6YXRpb24gc2VjdGlvbiwgT2Jzb2xldGUgcHJvcGVydGllc1xuICAgIC8qKlxuICAgICAqIFRoaXMgcHJvcGVydHkgaXMgb2Jzb2xldGUuIFVzZSB0aGUgW2BzZXR0aW5ncy5zZXJpYWxpemF0aW9uLml0ZW1WYWx1ZVNlcmlhbGl6ZUFzT2JqZWN0YF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL3NldHRpbmdzI3NlcmlhbGl6YXRpb24pIHByb3BlcnR5IGluc3RlYWQuXG4gICAgICovXG4gICAgZ2V0IGl0ZW1WYWx1ZUFsd2F5c1NlcmlhbGl6ZUFzT2JqZWN0KCkgeyByZXR1cm4gdGhpcy5zZXJpYWxpemF0aW9uLml0ZW1WYWx1ZVNlcmlhbGl6ZUFzT2JqZWN0OyB9LFxuICAgIHNldCBpdGVtVmFsdWVBbHdheXNTZXJpYWxpemVBc09iamVjdCh2YWwpIHsgdGhpcy5zZXJpYWxpemF0aW9uLml0ZW1WYWx1ZVNlcmlhbGl6ZUFzT2JqZWN0ID0gdmFsOyB9LFxuICAgIC8qKlxuICAgICAqIFRoaXMgcHJvcGVydHkgaXMgb2Jzb2xldGUuIFVzZSB0aGUgW2BzZXR0aW5ncy5zZXJpYWxpemF0aW9uLml0ZW1WYWx1ZVNlcmlhbGl6ZURpc3BsYXlUZXh0YF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL3NldHRpbmdzI3NlcmlhbGl6YXRpb24pIHByb3BlcnR5IGluc3RlYWQuXG4gICAgICovXG4gICAgZ2V0IGl0ZW1WYWx1ZUFsd2F5c1NlcmlhbGl6ZVRleHQoKSB7IHJldHVybiB0aGlzLnNlcmlhbGl6YXRpb24uaXRlbVZhbHVlU2VyaWFsaXplRGlzcGxheVRleHQ7IH0sXG4gICAgc2V0IGl0ZW1WYWx1ZUFsd2F5c1NlcmlhbGl6ZVRleHQodmFsKSB7IHRoaXMuc2VyaWFsaXphdGlvbi5pdGVtVmFsdWVTZXJpYWxpemVEaXNwbGF5VGV4dCA9IHZhbDsgfSxcbiAgICAvKipcbiAgICAgKiBUaGlzIHByb3BlcnR5IGlzIG9ic29sZXRlLiBVc2UgdGhlIFtgc2V0dGluZ3Muc2VyaWFsaXphdGlvbi5sb2NhbGl6YWJsZVN0cmluZ1NlcmlhbGl6ZUFzT2JqZWN0YF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL3NldHRpbmdzI3NlcmlhbGl6YXRpb24pIHByb3BlcnR5IGluc3RlYWQuXG4gICAgICovXG4gICAgZ2V0IHNlcmlhbGl6ZUxvY2FsaXphYmxlU3RyaW5nQXNPYmplY3QoKSB7IHJldHVybiB0aGlzLnNlcmlhbGl6YXRpb24ubG9jYWxpemFibGVTdHJpbmdTZXJpYWxpemVBc09iamVjdDsgfSxcbiAgICBzZXQgc2VyaWFsaXplTG9jYWxpemFibGVTdHJpbmdBc09iamVjdCh2YWwpIHsgdGhpcy5zZXJpYWxpemF0aW9uLmxvY2FsaXphYmxlU3RyaW5nU2VyaWFsaXplQXNPYmplY3QgPSB2YWw7IH0sXG4gICAgLy8jZW5kcmVnaW9uXG4gICAgLyoqXG4gICAgICogQW4gb2JqZWN0IHRoYXQgY29uZmlndXJlcyBsYXp5IHJlbmRlcmluZy5cbiAgICAgKlxuICAgICAqIE5lc3RlZCBwcm9wZXJ0aWVzOlxuICAgICAqXG4gICAgICogLSBgZW5hYmxlZGA6IGBCb29sZWFuYFxcXG4gICAgICogU3BlY2lmaWVzIHdoZXRoZXIgdG8gYWRkIHF1ZXN0aW9ucyB0byB0aGUgRE9NIG9ubHkgd2hlbiB0aGV5IGdldCBpbnRvIHRoZSB2aWV3cG9ydC4gRGVmYXVsdCB2YWx1ZTogYGZhbHNlYC5cbiAgICAgKlxuICAgICAqID4gTGF6eSByZW5kZXJpbmcgaXMgYW4gZXhwZXJpbWVudGFsIGZlYXR1cmUgdGhhdCBtYXkgbm90IHdvcmsgYXMgZXhwZWN0ZWQgaW4gYWxsIHVzZSBjYXNlcy5cbiAgICAgKi9cbiAgICBsYXp5UmVuZGVyOiB7XG4gICAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICBmaXJzdEJhdGNoU2l6ZTogM1xuICAgIH0sXG4gICAgLy8jcmVnaW9uIGxhenlSZW5kZXIgc2VjdGlvbiwgT2Jzb2xldGUgcHJvcGVydGllc1xuICAgIC8qKlxuICAgICAqIFRoaXMgcHJvcGVydHkgaXMgb2Jzb2xldGUuIFVzZSB0aGUgW2BzZXR0aW5ncy5sYXp5UmVuZGVyLmVuYWJsZWRgXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2Uvc2V0dGluZ3MjbGF6eVJlbmRlcikgcHJvcGVydHkgaW5zdGVhZC5cbiAgICAgKi9cbiAgICBnZXQgbGF6eVJvd3NSZW5kZXJpbmcoKSB7IHJldHVybiB0aGlzLmxhenlSZW5kZXIuZW5hYmxlZDsgfSxcbiAgICBzZXQgbGF6eVJvd3NSZW5kZXJpbmcodmFsKSB7IHRoaXMubGF6eVJlbmRlci5lbmFibGVkID0gdmFsOyB9LFxuICAgIGdldCBsYXp5Um93c1JlbmRlcmluZ1N0YXJ0Um93KCkgeyByZXR1cm4gdGhpcy5sYXp5UmVuZGVyLmZpcnN0QmF0Y2hTaXplOyB9LFxuICAgIHNldCBsYXp5Um93c1JlbmRlcmluZ1N0YXJ0Um93KHZhbCkgeyB0aGlzLmxhenlSZW5kZXIuZmlyc3RCYXRjaFNpemUgPSB2YWw7IH0sXG4gICAgLy8jZW5kcmVnaW9uXG4gICAgLyoqXG4gICAgICogQW4gb2JqZWN0IHdpdGggcHJvcGVydGllcyB0aGF0IGFwcGx5IHRvIFtTaW5nbGUtQ2hvaWNlXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2UvbWF0cml4LXRhYmxlLXF1ZXN0aW9uLW1vZGVsKSwgW011bHRpcGxlLUNob2ljZV0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL21hdHJpeC10YWJsZS13aXRoLWRyb3Bkb3duLWxpc3QpLCBhbmQgW0R5bmFtaWMgTWF0cml4XShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2UvZHluYW1pYy1tYXRyaXgtdGFibGUtcXVlc3Rpb24tbW9kZWwpIHF1ZXN0aW9ucy5cbiAgICAgKlxuICAgICAqIE5lc3RlZCBwcm9wZXJ0aWVzOlxuICAgICAqXG4gICAgICogLSBgZGVmYXVsdFJvd05hbWVgOiBgU3RyaW5nYFxcXG4gICAgICogQSBwcm9wZXJ0eSBrZXkgdGhhdCBzdG9yZXMgYW4gb2JqZWN0IHdpdGggZGVmYXVsdCBjZWxsIHZhbHVlcy4gRGVmYXVsdCB2YWx1ZTogXCJkZWZhdWx0XCIuXG4gICAgICpcbiAgICAgKiAtIGBkZWZhdWx0Q2VsbFR5cGVgOiBgU3RyaW5nYFxcXG4gICAgICogVGhlIGRlZmF1bHQgdHlwZSBvZiBtYXRyaXggY2VsbHMuIERlZmF1bHQgdmFsdWU6IGBcImRyb3Bkb3duXCJgLlxcXG4gICAgICogWW91IGNhbiBzcGVjaWZ5IHRoaXMgc2V0dGluZyBmb3IgaW5kaXZpZHVhbCBxdWVzdGlvbnMgb3IgbWF0cml4IGNvbHVtbnM6IFtgY2VsbFR5cGVgXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2UvZHluYW1pYy1tYXRyaXgtdGFibGUtcXVlc3Rpb24tbW9kZWwjY2VsbFR5cGUpLiBSZWZlciB0byB0aGUgYGNlbGxUeXBlYCBwcm9wZXJ0eSBkZXNjcmlwdGlvbiBmb3IgaW5mb3JtYXRpb24gb24gcG9zc2libGUgdmFsdWVzLlxuICAgICAqXG4gICAgICogLSBgdG90YWxzU3VmZml4YDogYFN0cmluZ2BcXFxuICAgICAqIEEgc3VmZml4IGFkZGVkIHRvIHRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IHN0b3JlcyB0b3RhbCB2YWx1ZXMuIFRoZSByZXN1bHRpbmcgcHJvcGVydHkgbmFtZSBjb25zaXN0cyBvZiB0aGUgbWF0cml4IG5hbWUgYW5kIHRoZSBzdWZmaXguIERlZmF1bHQgdmFsdWU6IGBcIi10b3RhbFwiYC5cbiAgICAgKlxuICAgICAqIC0gYG1heFJvd0NvdW50YDogYE51bWJlcmBcXFxuICAgICAqIEEgbWF4aW11bSBudW1iZXIgb2Ygcm93cyBpbiBhIER5bmFtaWMgTWF0cml4LiBEZWZhdWx0IHZhbHVlOiAxMDAwLlxcXG4gICAgICogWW91IGNhbiBzcGVjaWZ5IHRoaXMgc2V0dGluZyBmb3IgYW4gaW5kaXZpZHVhbCBEeW5hbWljIE1hdHJpeDogW2BtYXhSb3dDb3VudGBdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vYXBpLXJlZmVyZW5jZS9keW5hbWljLW1hdHJpeC10YWJsZS1xdWVzdGlvbi1tb2RlbCNtYXhSb3dDb3VudCkuXG4gICAgICpcbiAgICAgKiAtIGBtYXhSb3dDb3VudEluQ29uZGl0aW9uYDogYE51bWJlcmBcXFxuICAgICAqIEEgbWF4aW11bSBudW1iZXIgb2YgbWF0cml4IHJvd3MgaW5jbHVkZWQgaW4gdGhlIENvbmRpdGlvbiBkcm9wLWRvd24gbWVudSBpbiBTdXJ2ZXkgQ3JlYXRvci4gVGhpcyBtZW51IGlzIHVzZWQgdG8gY29uZmlndXJlIGNvbmRpdGlvbmFsIHN1cnZleSBsb2dpYy4gRGVmYXVsdCB2YWx1ZTogMS5cXFxuICAgICAqIElmIHlvdSBzZXQgdGhpcyBwcm9wZXJ0eSB0byAwLCB0aGUgQ29uZGl0aW9uIG1lbnUgZG9lcyBub3QgaW5jbHVkZSBhbnkgbWF0cml4IHJvd3MuIFVzZXJzIHN0aWxsIGNhbiBzcGVjaWZ5IGNvbmRpdGlvbnMgdGhhdCB1c2UgbWF0cml4IHJvd3MgYnV0IG9ubHkgd2l0aCBNYW51YWwgRW50cnkuXG4gICAgICpcbiAgICAgKiAtIGByZW5kZXJSZW1vdmVBc0ljb25gOiBgQm9vbGVhbmBcXFxuICAgICAqIERpc2FibGUgdGhpcyBwcm9wZXJ0eSBpZiB5b3Ugd2FudCB0byByZW5kZXIgdGhlIFJlbW92ZSBhY3Rpb24gaW4gRHluYW1pYyBNYXRyaXggYXMgYSBidXR0b24uIE90aGVyd2lzZSwgdGhlIGFjdGlvbiBpcyByZW5kZXJlZCBhcyBhbiBpY29uLiBEZWZhdWx0IHZhbHVlOiBgdHJ1ZWAuXG4gICAgICpcbiAgICAgKiAtIGBjb2x1bW5XaWR0aHNCeVR5cGVgOiBgT2JqZWN0YFxcXG4gICAgICogQW4gb2JqZWN0IHRoYXQgc3BlY2lmaWVzIGZpeGVkIGFuZCBtaW5pbXVtIGNvbHVtbiB3aWR0aCBiYXNlZCBvbiB0aGUgY29sdW1uIHR5cGUuXFxcbiAgICAgKiBFeGFtcGxlOiBgc2V0dGluZ3MubWF0cml4LmNvbHVtbldpZHRoc0J5VHlwZSA9IHsgXCJ0YWdib3hcIjogeyBtaW5XaWR0aDogXCIyNDBweFwiLCB3aWR0aDogXCIzMDBweFwiIH0gfWBcbiAgICAgKlxuICAgICAqIC0gYHJhdGVTaXplYDogYFwic21hbGxcImAgKGRlZmF1bHQpIHwgYFwibm9ybWFsXCJgXFxcbiAgICAgKiBTcGVjaWZpZXMgdGhlIHNpemUgb2YgcmF0ZSB2YWx1ZXMuIEFwcGxpZXMgdG8gW1JhdGluZyBTY2FsZV0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZXhhbXBsZXMvcmF0aW5nLXNjYWxlLykgcXVlc3Rpb25zIHdpdGhpbiBtYXRyaXhlcy5cbiAgICAgKi9cbiAgICBtYXRyaXg6IHtcbiAgICAgICAgZGVmYXVsdENlbGxUeXBlOiBcImRyb3Bkb3duXCIsXG4gICAgICAgIGRlZmF1bHRSb3dOYW1lOiBcImRlZmF1bHRcIixcbiAgICAgICAgdG90YWxzU3VmZml4OiBcIi10b3RhbFwiLFxuICAgICAgICBtYXhSb3dDb3VudDogMTAwMCxcbiAgICAgICAgbWF4Um93Q291bnRJbkNvbmRpdGlvbjogMSxcbiAgICAgICAgcmVuZGVyUmVtb3ZlQXNJY29uOiB0cnVlLFxuICAgICAgICBjb2x1bW5XaWR0aHNCeVR5cGU6IGNvbHVtbldpZHRoc0J5VHlwZSxcbiAgICAgICAgcmF0ZVNpemU6IFwic21hbGxcIixcbiAgICB9LFxuICAgIC8vI3JlZ2lvbiBtYXRyaXggc2VjdGlvbiwgT2Jzb2xldGUgcHJvcGVydGllc1xuICAgIC8qKlxuICAgICAqIFRoaXMgcHJvcGVydHkgaXMgb2Jzb2xldGUuIFVzZSB0aGUgW2BzZXR0aW5ncy5tYXRyaXguZGVmYXVsdFJvd05hbWVgXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2Uvc2V0dGluZ3MjbWF0cml4KSBwcm9wZXJ0eSBpbnN0ZWFkLlxuICAgICAqL1xuICAgIGdldCBtYXRyaXhEZWZhdWx0Um93TmFtZSgpIHsgcmV0dXJuIHRoaXMubWF0cml4LmRlZmF1bHRSb3dOYW1lOyB9LFxuICAgIHNldCBtYXRyaXhEZWZhdWx0Um93TmFtZSh2YWwpIHsgdGhpcy5tYXRyaXguZGVmYXVsdFJvd05hbWUgPSB2YWw7IH0sXG4gICAgLyoqXG4gICAgICogVGhpcyBwcm9wZXJ0eSBpcyBvYnNvbGV0ZS4gVXNlIHRoZSBbYHNldHRpbmdzLm1hdHJpeC5kZWZhdWx0Q2VsbFR5cGVgXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2Uvc2V0dGluZ3MjbWF0cml4KSBwcm9wZXJ0eSBpbnN0ZWFkLlxuICAgICAqL1xuICAgIGdldCBtYXRyaXhEZWZhdWx0Q2VsbFR5cGUoKSB7IHJldHVybiB0aGlzLm1hdHJpeC5kZWZhdWx0Q2VsbFR5cGU7IH0sXG4gICAgc2V0IG1hdHJpeERlZmF1bHRDZWxsVHlwZSh2YWwpIHsgdGhpcy5tYXRyaXguZGVmYXVsdENlbGxUeXBlID0gdmFsOyB9LFxuICAgIC8qKlxuICAgICAqIFRoaXMgcHJvcGVydHkgaXMgb2Jzb2xldGUuIFVzZSB0aGUgW2BzZXR0aW5ncy5tYXRyaXgudG90YWxzU3VmZml4YF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL3NldHRpbmdzI21hdHJpeCkgcHJvcGVydHkgaW5zdGVhZC5cbiAgICAgKi9cbiAgICBnZXQgbWF0cml4VG90YWxWYWx1ZVBvc3RGaXgoKSB7IHJldHVybiB0aGlzLm1hdHJpeC50b3RhbHNTdWZmaXg7IH0sXG4gICAgc2V0IG1hdHJpeFRvdGFsVmFsdWVQb3N0Rml4KHZhbCkgeyB0aGlzLm1hdHJpeC50b3RhbHNTdWZmaXggPSB2YWw7IH0sXG4gICAgLyoqXG4gICAgICogVGhpcyBwcm9wZXJ0eSBpcyBvYnNvbGV0ZS4gVXNlIHRoZSBbYHNldHRpbmdzLm1hdHJpeC5tYXhSb3dDb3VudGBdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vYXBpLXJlZmVyZW5jZS9zZXR0aW5ncyNtYXRyaXgpIHByb3BlcnR5IGluc3RlYWQuXG4gICAgICovXG4gICAgZ2V0IG1hdHJpeE1heGltdW1Sb3dDb3VudCgpIHsgcmV0dXJuIHRoaXMubWF0cml4Lm1heFJvd0NvdW50OyB9LFxuICAgIHNldCBtYXRyaXhNYXhpbXVtUm93Q291bnQodmFsKSB7IHRoaXMubWF0cml4Lm1heFJvd0NvdW50ID0gdmFsOyB9LFxuICAgIC8qKlxuICAgICAqIFRoaXMgcHJvcGVydHkgaXMgb2Jzb2xldGUuIFVzZSB0aGUgW2BzZXR0aW5ncy5tYXRyaXgubWF4Um93Q291bnRJbkNvbmRpdGlvbmBdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vYXBpLXJlZmVyZW5jZS9zZXR0aW5ncyNtYXRyaXgpIHByb3BlcnR5IGluc3RlYWQuXG4gICAgICovXG4gICAgZ2V0IG1hdHJpeE1heFJvd0NvdW50SW5Db25kaXRpb24oKSB7IHJldHVybiB0aGlzLm1hdHJpeC5tYXhSb3dDb3VudEluQ29uZGl0aW9uOyB9LFxuICAgIHNldCBtYXRyaXhNYXhSb3dDb3VudEluQ29uZGl0aW9uKHZhbCkgeyB0aGlzLm1hdHJpeC5tYXhSb3dDb3VudEluQ29uZGl0aW9uID0gdmFsOyB9LFxuICAgIC8qKlxuICAgICAqIFRoaXMgcHJvcGVydHkgaXMgb2Jzb2xldGUuIFVzZSB0aGUgW2BzZXR0aW5ncy5tYXRyaXgucmVuZGVyUmVtb3ZlQXNJY29uYF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL3NldHRpbmdzI21hdHJpeCkgcHJvcGVydHkgaW5zdGVhZC5cbiAgICAgKi9cbiAgICBnZXQgbWF0cml4UmVuZGVyUmVtb3ZlQXNJY29uKCkgeyByZXR1cm4gdGhpcy5tYXRyaXgucmVuZGVyUmVtb3ZlQXNJY29uOyB9LFxuICAgIHNldCBtYXRyaXhSZW5kZXJSZW1vdmVBc0ljb24odmFsKSB7IHRoaXMubWF0cml4LnJlbmRlclJlbW92ZUFzSWNvbiA9IHZhbDsgfSxcbiAgICAvLyNlbmRyZWdpb25cbiAgICAvKipcbiAgICAgKiBBbiBvYmplY3Qgd2l0aCBwcm9wZXJ0aWVzIHRoYXQgYXBwbHkgdG8gW0R5bmFtaWMgUGFuZWxdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vYXBpLXJlZmVyZW5jZS9keW5hbWljLXBhbmVsLW1vZGVsKSBxdWVzdGlvbnMuXG4gICAgICpcbiAgICAgKiBOZXN0ZWQgcHJvcGVydGllczpcbiAgICAgKlxuICAgICAqIC0gYG1heFBhbmVsQ291bnRgOiBgTnVtYmVyYFxcXG4gICAgICogQSBtYXhpbXVtIG51bWJlciBvZiBwYW5lbHMgaW4gRHluYW1pYyBQYW5lbC4gRGVmYXVsdCB2YWx1ZTogMTAwLlxcXG4gICAgICogWW91IGNhbiBzcGVjaWZ5IHRoaXMgc2V0dGluZyBmb3IgYW4gaW5kaXZpZHVhbCBEeW5hbWljIFBhbmVsOiBbYG1heFBhbmVsQ291bnRgXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2UvZHluYW1pYy1wYW5lbC1tb2RlbCNtYXhQYW5lbENvdW50KS5cbiAgICAgKlxuICAgICAqIC0gYG1heFBhbmVsQ291bnRJbkNvbmRpdGlvbmA6IGBOdW1iZXJgXFxcbiAgICAgKiBBIG1heGltdW0gbnVtYmVyIG9mIER5bmFtaWMgUGFuZWwgcGFuZWxzIGluY2x1ZGVkIGluIHRoZSBDb25kaXRpb24gZHJvcC1kb3duIG1lbnUgaW4gU3VydmV5IENyZWF0b3IuIFRoaXMgbWVudSBpcyB1c2VkIHRvIGNvbmZpZ3VyZSBjb25kaXRpb25hbCBzdXJ2ZXkgbG9naWMuIERlZmF1bHQgdmFsdWU6IDEuXFxcbiAgICAgKiBJZiB5b3Ugc2V0IHRoaXMgcHJvcGVydHkgdG8gMCwgdGhlIENvbmRpdGlvbiBtZW51IGRvZXMgbm90IGluY2x1ZGUgYW55IHBhbmVsIHF1ZXN0aW9ucy4gVXNlcnMgc3RpbGwgY2FuIHNwZWNpZnkgY29uZGl0aW9ucyB0aGF0IHVzZSBwYW5lbCBxdWVzdGlvbnMgYnV0IG9ubHkgd2l0aCBNYW51YWwgRW50cnkuXG4gICAgICovXG4gICAgcGFuZWw6IHtcbiAgICAgICAgbWF4UGFuZWxDb3VudDogMTAwLFxuICAgICAgICBtYXhQYW5lbENvdW50SW5Db25kaXRpb246IDFcbiAgICB9LFxuICAgIC8vI3JlZ2lvbiBwYW5lbCBzZWN0aW9uLCBPYnNvbGV0ZSBwcm9wZXJ0aWVzXG4gICAgLyoqXG4gICAgICogVGhpcyBwcm9wZXJ0eSBpcyBvYnNvbGV0ZS4gVXNlIHRoZSBbYHNldHRpbmdzLnBhbmVsLm1heFBhbmVsQ291bnRJbkNvbmRpdGlvbmBdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vYXBpLXJlZmVyZW5jZS9zZXR0aW5ncyNwYW5lbCkgcHJvcGVydHkgaW5zdGVhZC5cbiAgICAgKi9cbiAgICBnZXQgcGFuZWxEeW5hbWljTWF4UGFuZWxDb3VudEluQ29uZGl0aW9uKCkgeyByZXR1cm4gdGhpcy5wYW5lbC5tYXhQYW5lbENvdW50SW5Db25kaXRpb247IH0sXG4gICAgc2V0IHBhbmVsRHluYW1pY01heFBhbmVsQ291bnRJbkNvbmRpdGlvbih2YWwpIHsgdGhpcy5wYW5lbC5tYXhQYW5lbENvdW50SW5Db25kaXRpb24gPSB2YWw7IH0sXG4gICAgLyoqXG4gICAgICogVGhpcyBwcm9wZXJ0eSBpcyBvYnNvbGV0ZS4gVXNlIHRoZSBbYHNldHRpbmdzLnBhbmVsLm1heFBhbmVsQ291bnRgXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2Uvc2V0dGluZ3MjcGFuZWwpIHByb3BlcnR5IGluc3RlYWQuXG4gICAgICovXG4gICAgZ2V0IHBhbmVsTWF4aW11bVBhbmVsQ291bnQoKSB7IHJldHVybiB0aGlzLnBhbmVsLm1heFBhbmVsQ291bnQ7IH0sXG4gICAgc2V0IHBhbmVsTWF4aW11bVBhbmVsQ291bnQodmFsKSB7IHRoaXMucGFuZWwubWF4UGFuZWxDb3VudCA9IHZhbDsgfSxcbiAgICAvLyNlbmRyZWdpb25cbiAgICAvKipcbiAgICAgKiBBbiBvYmplY3Qgd2l0aCBwcm9wZXJ0aWVzIHRoYXQgY29uZmlndXJlIHF1ZXN0aW9ucyBpbiByZWFkLW9ubHkgbW9kZS5cbiAgICAgKlxuICAgICAqIE5lc3RlZCBwcm9wZXJ0aWVzOlxuICAgICAqXG4gICAgICogLSBgY29tbWVudFJlbmRlck1vZGVgOiBgXCJ0ZXh0YXJlYVwiYCAoZGVmYXVsdCkgfCBgXCJkaXZcImBcXFxuICAgICAqIFNwZWNpZmllcyBob3cgdG8gcmVuZGVyIHRoZSBpbnB1dCBmaWVsZCBvZiBbQ29tbWVudF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL2NvbW1lbnQtZmllbGQtbW9kZWwpIHF1ZXN0aW9ucyBpbiBbcmVhZC1vbmx5XShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2UvY29tbWVudC1maWVsZC1tb2RlbCNyZWFkT25seSkgbW9kZTogYXMgYSBkaXNhYmxlZCBgPHRleHRhcmVhPmAgZWxlbWVudCBvciBhcyBhIGA8ZGl2PmAgZWxlbWVudCB3aXRoIGEgbm9uLWVkaXRhYmxlIHF1ZXN0aW9uIHZhbHVlIHdpdGhpbiBpdC5cbiAgICAgKlxuICAgICAqIC0gYHRleHRSZW5kZXJNb2RlYDogYFwiaW5wdXRcImAgKGRlZmF1bHQpIHwgYFwiZGl2XCJgXFxcbiAgICAgKiBTcGVjaWZpZXMgaG93IHRvIHJlbmRlciB0aGUgaW5wdXQgZmllbGQgb2YgW1RleHRdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vYXBpLXJlZmVyZW5jZS90ZXh0LWVudHJ5LXF1ZXN0aW9uLW1vZGVsKSBxdWVzdGlvbnMgaW4gW3JlYWQtb25seV0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL3RleHQtZW50cnktcXVlc3Rpb24tbW9kZWwjcmVhZE9ubHkpIG1vZGU6IGFzIGEgZGlzYWJsZWQgYDxpbnB1dD5gIGVsZW1lbnQgb3IgYXMgYSBgPGRpdj5gIGVsZW1lbnQgd2l0aCBhIG5vbi1lZGl0YWJsZSBxdWVzdGlvbiB2YWx1ZSB3aXRoaW4gaXQuXG4gICAgICovXG4gICAgcmVhZE9ubHk6IHtcbiAgICAgICAgZW5hYmxlVmFsaWRhdGlvbjogZmFsc2UsXG4gICAgICAgIGNvbW1lbnRSZW5kZXJNb2RlOiBcInRleHRhcmVhXCIsXG4gICAgICAgIHRleHRSZW5kZXJNb2RlOiBcImlucHV0XCJcbiAgICB9LFxuICAgIC8vI3JlZ2lvbiByZWFkT25seSBzZWN0aW9uLCBPYnNvbGV0ZSBwcm9wZXJ0aWVzXG4gICAgLyoqXG4gICAgICogVGhpcyBwcm9wZXJ0eSBpcyBvYnNvbGV0ZS4gVXNlIHRoZSBbYHNldHRpbmdzLnJlYWRPbmx5LmNvbW1lbnRSZW5kZXJNb2RlYF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL3NldHRpbmdzI3JlYWRPbmx5KSBwcm9wZXJ0eSBpbnN0ZWFkLlxuICAgICAqL1xuICAgIGdldCByZWFkT25seUNvbW1lbnRSZW5kZXJNb2RlKCkgeyByZXR1cm4gdGhpcy5yZWFkT25seS5jb21tZW50UmVuZGVyTW9kZTsgfSxcbiAgICBzZXQgcmVhZE9ubHlDb21tZW50UmVuZGVyTW9kZSh2YWwpIHsgdGhpcy5yZWFkT25seS5jb21tZW50UmVuZGVyTW9kZSA9IHZhbDsgfSxcbiAgICAvKipcbiAgICAgKiBUaGlzIHByb3BlcnR5IGlzIG9ic29sZXRlLiBVc2UgdGhlIFtgc2V0dGluZ3MucmVhZE9ubHkudGV4dFJlbmRlck1vZGVgXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2Uvc2V0dGluZ3MjcmVhZE9ubHkpIHByb3BlcnR5IGluc3RlYWQuXG4gICAgICovXG4gICAgZ2V0IHJlYWRPbmx5VGV4dFJlbmRlck1vZGUoKSB7IHJldHVybiB0aGlzLnJlYWRPbmx5LnRleHRSZW5kZXJNb2RlOyB9LFxuICAgIHNldCByZWFkT25seVRleHRSZW5kZXJNb2RlKHZhbCkgeyB0aGlzLnJlYWRPbmx5LnRleHRSZW5kZXJNb2RlID0gdmFsOyB9LFxuICAgIC8vI2VuZHJlZ2lvblxuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCB3aXRoIHByb3BlcnRpZXMgdGhhdCBjb25maWd1cmUgcXVlc3Rpb24gbnVtYmVyaW5nLlxuICAgICAqXG4gICAgICogTmVzdGVkIHByb3BlcnRpZXM6XG4gICAgICpcbiAgICAgKiAtIGBpbmNsdWRlUXVlc3Rpb25zV2l0aEhpZGRlbk51bWJlcmA6IGBCb29sZWFuYFxcXG4gICAgICogU3BlY2lmaWVzIHdoZXRoZXIgdG8gbnVtYmVyIHF1ZXN0aW9ucyB3aG9zZSBbYGhpZGVOdW1iZXJgXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2UvcXVlc3Rpb24jaGlkZU51bWJlcikgcHJvcGVydHkgaXMgZW5hYmxlZC4gRGVmYXVsdCB2YWx1ZTogYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIC0gYGluY2x1ZGVRdWVzdGlvbnNXaXRoSGlkZGVuVGl0bGVgOiBgQm9vbGVhbmBcXFxuICAgICAqIFNwZWNpZmllcyB3aGV0aGVyIHRvIG51bWJlciBxdWVzdGlvbnMgd2hvc2UgW2B0aXRsZUxvY2F0aW9uYF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL3F1ZXN0aW9uI3RpdGxlTG9jYXRpb24pIHByb3BlcnR5IGlzIHNldCB0byBgXCJoaWRkZW5cImAuIERlZmF1bHQgdmFsdWU6IGBmYWxzZWAuXG4gICAgICovXG4gICAgbnVtYmVyaW5nOiB7XG4gICAgICAgIGluY2x1ZGVRdWVzdGlvbnNXaXRoSGlkZGVuTnVtYmVyOiBmYWxzZSxcbiAgICAgICAgaW5jbHVkZVF1ZXN0aW9uc1dpdGhIaWRkZW5UaXRsZTogZmFsc2VcbiAgICB9LFxuICAgIC8vI3JlZ2lvbiBudW1iZXJpbmcgc2VjdGlvbiwgT2Jzb2xldGUgcHJvcGVydGllc1xuICAgIC8qKlxuICAgICAqIFRoaXMgcHJvcGVydHkgaXMgb2Jzb2xldGUuIFVzZSB0aGUgW2BzZXR0aW5ncy5udW1iZXJpbmcuaW5jbHVkZVF1ZXN0aW9uc1dpdGhIaWRkZW5UaXRsZWBdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vYXBpLXJlZmVyZW5jZS9zZXR0aW5ncyNudW1iZXJpbmcpIHByb3BlcnR5IGluc3RlYWQuXG4gICAgICovXG4gICAgZ2V0IHNldFF1ZXN0aW9uVmlzaWJsZUluZGV4Rm9ySGlkZGVuVGl0bGUoKSB7IHJldHVybiB0aGlzLm51bWJlcmluZy5pbmNsdWRlUXVlc3Rpb25zV2l0aEhpZGRlblRpdGxlOyB9LFxuICAgIHNldCBzZXRRdWVzdGlvblZpc2libGVJbmRleEZvckhpZGRlblRpdGxlKHZhbCkgeyB0aGlzLm51bWJlcmluZy5pbmNsdWRlUXVlc3Rpb25zV2l0aEhpZGRlblRpdGxlID0gdmFsOyB9LFxuICAgIC8qKlxuICAgICAqIFRoaXMgcHJvcGVydHkgaXMgb2Jzb2xldGUuIFVzZSB0aGUgW2BzZXR0aW5ncy5udW1iZXJpbmcuaW5jbHVkZVF1ZXN0aW9uc1dpdGhIaWRkZW5OdW1iZXJgXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2Uvc2V0dGluZ3MjbnVtYmVyaW5nKSBwcm9wZXJ0eSBpbnN0ZWFkLlxuICAgICAqL1xuICAgIGdldCBzZXRRdWVzdGlvblZpc2libGVJbmRleEZvckhpZGRlbk51bWJlcigpIHsgcmV0dXJuIHRoaXMubnVtYmVyaW5nLmluY2x1ZGVRdWVzdGlvbnNXaXRoSGlkZGVuTnVtYmVyOyB9LFxuICAgIHNldCBzZXRRdWVzdGlvblZpc2libGVJbmRleEZvckhpZGRlbk51bWJlcih2YWwpIHsgdGhpcy5udW1iZXJpbmcuaW5jbHVkZVF1ZXN0aW9uc1dpdGhIaWRkZW5OdW1iZXIgPSB2YWw7IH0sXG4gICAgLy8jZW5kcmVnaW9uXG4gICAgLyoqXG4gICAgICogU3BlY2lmaWVzIGFuIGFjdGlvbiB0byBwZXJmb3JtIHdoZW4gdXNlcnMgcHJlc3MgdGhlIEVudGVyIGtleSB3aXRoaW4gYSBzdXJ2ZXkuXG4gICAgICpcbiAgICAgKiBQb3NzaWJsZSB2YWx1ZXM6XG4gICAgICpcbiAgICAgKiAtIGBcIm1vdmVUb05leHRFZGl0b3JcImAgLSBNb3ZlcyBmb2N1cyB0byB0aGUgbmV4dCBlZGl0b3IuXG4gICAgICogLSBgXCJsb3NlRm9jdXNcImAgLSBSZW1vdmVzIGZvY3VzIGZyb20gdGhlIGN1cnJlbnQgZWRpdG9yLlxuICAgICAqIC0gYFwiZGVmYXVsdFwiYCAtIEJlaGF2ZXMgYXMgYSBzdGFuZGFyZCBgPGlucHV0PmAgZWxlbWVudC5cbiAgICAgKi9cbiAgICBlbnRlcktleUFjdGlvbjogXCJkZWZhdWx0XCIsXG4gICAgLyoqXG4gICAgICogQW4gb2JqZWN0IHRoYXQgY29uZmlndXJlcyBzdHJpbmcgY29tcGFyaXNvbi5cbiAgICAgKlxuICAgICAqIE5lc3RlZCBwcm9wZXJ0aWVzOlxuICAgICAqXG4gICAgICogLSBgdHJpbVN0cmluZ3NgOiBgQm9vbGVhbmBcXFxuICAgICAqIFNwZWNpZmllcyB3aGV0aGVyIHRvIHJlbW92ZSB3aGl0ZXNwYWNlIGZyb20gYm90aCBlbmRzIG9mIGEgc3RyaW5nIGJlZm9yZSB0aGUgY29tcGFyaXNvbi4gRGVmYXVsdCB2YWx1ZTogYHRydWVgLlxuICAgICAqXG4gICAgICogLSBgY2FzZVNlbnNpdGl2ZWA6IGBCb29sZWFuYFxcXG4gICAgICogU3BlY2lmaWVzIHdoZXRoZXIgdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIGNhcGl0YWwgYW5kIGxvd2VyLWNhc2UgbGV0dGVycy4gRGVmYXVsdCB2YWx1ZTogYGZhbHNlYC5cbiAgICAgKi9cbiAgICBjb21wYXJhdG9yOiB7XG4gICAgICAgIHRyaW1TdHJpbmdzOiB0cnVlLFxuICAgICAgICBjYXNlU2Vuc2l0aXZlOiBmYWxzZSxcbiAgICAgICAgbm9ybWFsaXplVGV4dENhbGxiYWNrOiBmdW5jdGlvbiAoc3RyLCByZWFzb24pIHsgcmV0dXJuIHN0cjsgfVxuICAgIH0sXG4gICAgZXhwcmVzc2lvbkRpc2FibGVDb252ZXJzaW9uQ2hhcjogXCIjXCIsXG4gICAgZ2V0IGNvbW1lbnRQcmVmaXgoKSB7IHJldHVybiBzZXR0aW5ncy5jb21tZW50U3VmZml4OyB9LFxuICAgIHNldCBjb21tZW50UHJlZml4KHZhbCkgeyBzZXR0aW5ncy5jb21tZW50U3VmZml4ID0gdmFsOyB9LFxuICAgIC8qKlxuICAgICAqIEEgc3VmZml4IGFkZGVkIHRvIHRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IHN0b3JlcyBjb21tZW50cy5cbiAgICAgKlxuICAgICAqIERlZmF1bHQgdmFsdWU6IFwiLUNvbW1lbnRcIlxuICAgICAqXG4gICAgICogWW91IGNhbiBzcGVjaWZ5IHRoaXMgc2V0dGluZyBmb3IgYW4gaW5kaXZpZHVhbCBzdXJ2ZXk6IFtgY29tbWVudFN1ZmZpeGBdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vYXBpLXJlZmVyZW5jZS9zdXJ2ZXktZGF0YS1tb2RlbCNjb21tZW50U3VmZml4KS5cbiAgICAgKi9cbiAgICBjb21tZW50U3VmZml4OiBcIi1Db21tZW50XCIsXG4gICAgLyoqXG4gICAgICogQSBzZXBhcmF0b3IgdXNlZCBpbiBhIHNob3J0aGFuZCBub3RhdGlvbiB0aGF0IHNwZWNpZmllcyBhIHZhbHVlIGFuZCBkaXNwbGF5IHRleHQgZm9yIGFuIFtgSXRlbVZhbHVlYF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL2l0ZW12YWx1ZSkgb2JqZWN0OiBgXCJ2YWx1ZXx0ZXh0XCJgLlxuICAgICAqXG4gICAgICogRGVmYXVsdCB2YWx1ZTogYFwifFwiYFxuICAgICAqL1xuICAgIGl0ZW1WYWx1ZVNlcGFyYXRvcjogXCJ8XCIsXG4gICAgLyoqXG4gICAgICogQSBtYXhpbXVtIG51bWJlciBvZiByYXRlIHZhbHVlcyBpbiBhIFtSYXRpbmddKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vYXBpLXJlZmVyZW5jZS9yYXRpbmctc2NhbGUtcXVlc3Rpb24tbW9kZWwpIHF1ZXN0aW9uLlxuICAgICAqXG4gICAgICogRGVmYXVsdCB2YWx1ZTogMjBcbiAgICAgKi9cbiAgICByYXRpbmdNYXhpbXVtUmF0ZVZhbHVlQ291bnQ6IDIwLFxuICAgIC8qKlxuICAgICAqIFNwZWNpZmllcyB3aGV0aGVyIHRvIGNsb3NlIHRoZSBkcm9wLWRvd24gbWVudSBvZiBhIFtUYWdCb3hdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2V4YW1wbGVzL2hvdy10by1jcmVhdGUtbXVsdGlzZWxlY3QtdGFnLWJveC8pIHF1ZXN0aW9uIGFmdGVyIGEgdXNlciBzZWxlY3RzIGEgdmFsdWUuXG4gICAgICpcbiAgICAgKiBUaGlzIHNldHRpbmcgYXBwbGllcyB0byBhbGwgVGFnQm94IHF1ZXN0aW9ucyBvbiBhIHBhZ2UuIFlvdSBjYW4gdXNlIHRoZSBbY2xvc2VPblNlbGVjdF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL2Ryb3Bkb3duLXRhZy1ib3gtbW9kZWwjY2xvc2VPblNlbGVjdCkgcHJvcGVydHkgdG8gc3BlY2lmeSB0aGUgc2FtZSBzZXR0aW5nIGZvciBhbiBpbmRpdmlkdWFsIFRhZ0JveCBxdWVzdGlvbi5cbiAgICAgKi9cbiAgICB0YWdib3hDbG9zZU9uU2VsZWN0OiBmYWxzZSxcbiAgICAvKipcbiAgICAgKiBBIHByb3BlcnR5IHRoYXQgYWxsb3dzIHlvdSB0byBkaXNwbGF5IGEgY3VzdG9tIGNvbmZpcm0gZGlhbG9nIGluc3RlYWQgb2YgdGhlIHN0YW5kYXJkIGJyb3dzZXIgZGlhbG9nLlxuICAgICAqXG4gICAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gYSBmdW5jdGlvbiB0aGF0IHJlbmRlcnMgeW91ciBjdXN0b20gZGlhbG9nIHdpbmRvdy4gVGhpcyBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIGB0cnVlYCBpZiBhIHVzZXIgY29uZmlybXMgYW4gYWN0aW9uIG9yIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICAgICAqIEBwYXJhbSBtZXNzYWdlIEEgbWVzc2FnZSB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIGNvbmZpcm0gZGlhbG9nIHdpbmRvdy5cbiAgICAgKi9cbiAgICBjb25maXJtQWN0aW9uRnVuYzogZnVuY3Rpb24gKG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIGNvbmZpcm0obWVzc2FnZSk7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBBIHByb3BlcnR5IHRoYXQgYWxsb3dzIHlvdSB0byBkaXNwbGF5IGEgY3VzdG9tIGNvbmZpcm0gZGlhbG9nIGluc3RlYWQgb2YgdGhlIHN0YW5kYXJkIGJyb3dzZXIgZGlhbG9nIGluIGFzeW5jIG1vZGUuXG4gICAgICpcbiAgICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSB0byBhIGZ1bmN0aW9uIHRoYXQgcmVuZGVycyB5b3VyIGN1c3RvbSBkaWFsb2cgd2luZG93LiBUaGlzIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gYHRydWVgIHRvIGJlIGVuYWJsZWQ7IG90aGVyd2lzZSwgYSBzdXJ2ZXkgZXhlY3V0ZXMgdGhlIFtgY29uZmlybUFjdGlvbkZ1bmNgXSgjY29uZmlybUFjdGlvbkZ1bmMpIGZ1bmN0aW9uLiBQYXNzIHRoZSBkaWFsb2cgcmVzdWx0IGFzIHRoZSBgY2FsbGJhY2tgIHBhcmFtZXRlcjogYHRydWVgIGlmIGEgdXNlciBjb25maXJtcyBhbiBhY3Rpb24sIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICAgICAqIEBwYXJhbSBtZXNzYWdlIEEgbWVzc2FnZSB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIGNvbmZpcm0gZGlhbG9nIHdpbmRvdy5cbiAgICAgKiBAcGFyYW0gY2FsbGJhY2sgQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IHNob3VsZCBiZSBjYWxsZWQgd2l0aCBgdHJ1ZWAgaWYgYSB1c2VyIGNvbmZpcm1zIGFuIGFjdGlvbiBvciBgZmFsc2VgIG90aGVyd2lzZS5cbiAgICAgKi9cbiAgICBjb25maXJtQWN0aW9uQXN5bmM6IGZ1bmN0aW9uIChtZXNzYWdlLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBBIG1pbmltdW0gd2lkdGggdmFsdWUgZm9yIGFsbCBzdXJ2ZXkgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBEZWZhdWx0IHZhbHVlOiBgXCIzMDBweFwiYFxuICAgICAqXG4gICAgICogWW91IGNhbiBvdmVycmlkZSB0aGlzIHNldHRpbmcgZm9yIGluZGl2aWR1YWwgZWxlbWVudHM6IFtgbWluV2lkdGhgXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2Uvc3VydmV5ZWxlbWVudCNtaW5XaWR0aCkuXG4gICAgICovXG4gICAgbWluV2lkdGg6IFwiMzAwcHhcIixcbiAgICAvKipcbiAgICAgKiBBIG1heGltdW0gd2lkdGggdmFsdWUgZm9yIGFsbCBzdXJ2ZXkgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBEZWZhdWx0IHZhbHVlOiBgXCIxMDAlXCJgXG4gICAgICpcbiAgICAgKiBZb3UgY2FuIG92ZXJyaWRlIHRoaXMgc2V0dGluZyBmb3IgaW5kaXZpZHVhbCBlbGVtZW50czogW2BtYXhXaWR0aGBdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vYXBpLXJlZmVyZW5jZS9zdXJ2ZXllbGVtZW50I21heFdpZHRoKS5cbiAgICAgKi9cbiAgICBtYXhXaWR0aDogXCIxMDAlXCIsXG4gICAgLyoqXG4gICAgICogU3BlY2lmaWVzIGhvdyBtYW55IHRpbWVzIHN1cnZleXMgY2FuIHJlLWV2YWx1YXRlIGV4cHJlc3Npb25zIHdoZW4gYSBxdWVzdGlvbiB2YWx1ZSBjaGFuZ2VzLiBUaGlzIGxpbWl0IGhlbHBzIGF2b2lkIHJlY3Vyc2lvbnMgaW4gZXhwcmVzc2lvbnMuXG4gICAgICpcbiAgICAgKiBEZWZhdWx0IHZhbHVlOiAxMFxuICAgICAqL1xuICAgIG1heENvbmRpdGlvblJ1bkNvdW50T25WYWx1ZUNoYW5nZWQ6IDEwLFxuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCB0aGF0IGNvbmZpZ3VyZXMgbm90aWZpY2F0aW9ucy5cbiAgICAgKlxuICAgICAqIE5lc3RlZCBwcm9wZXJ0aWVzOlxuICAgICAqXG4gICAgICogLSBgbGlmZXRpbWVgOiBgTnVtYmVyYFxcXG4gICAgICogU3BlY2lmaWVzIGEgdGltZSBwZXJpb2QgZHVyaW5nIHdoaWNoIGEgbm90aWZpY2F0aW9uIGlzIGRpc3BsYXllZDsgbWVhc3VyZWQgaW4gbWlsbGlzZWNvbmRzLlxuICAgICAqL1xuICAgIG5vdGlmaWNhdGlvbnM6IHtcbiAgICAgICAgbGlmZXRpbWU6IDIwMDBcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFNwZWNpZmllcyB0aGUgZGlyZWN0aW9uIGluIHdoaWNoIHRvIGxheSBvdXQgQ2hlY2tib3ggYW5kIFJhZGlvZ3JvdXAgaXRlbXMuIFRoaXMgc2V0dGluZyBhZmZlY3RzIHRoZSByZXN1bHRpbmcgVUkgd2hlbiBpdGVtcyBhcmUgYXJyYW5nZWQgaW4gW21vcmUgdGhhbiBvbmUgY29sdW1uXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2UvY2hlY2tib3gtcXVlc3Rpb24tbW9kZWwjY29sQ291bnQpLlxuICAgICAqXG4gICAgICogUG9zc2libGUgdmFsdWVzOlxuICAgICAqXG4gICAgICogLSBgXCJyb3dcImAgKGRlZmF1bHQpIC0gSXRlbXMgZmlsbCB0aGUgY3VycmVudCByb3csIHRoZW4gbW92ZSBvbiB0byB0aGUgbmV4dCByb3cuXG4gICAgICogLSBgXCJjb2x1bW5cImAgLSBJdGVtcyBmaWxsIHRoZSBjdXJyZW50IGNvbHVtbiwgdGhlbiBtb3ZlIG9uIHRvIHRoZSBuZXh0IGNvbHVtbi5cbiAgICAgKi9cbiAgICBzaG93SXRlbXNJbk9yZGVyOiBcImRlZmF1bHRcIixcbiAgICAvKipcbiAgICAgKiBBIHZhbHVlIHRvIHNhdmUgaW4gc3VydmV5IHJlc3VsdHMgd2hlbiByZXNwb25kZW50cyBzZWxlY3QgdGhlIE5vbmUgY2hvaWNlIGl0ZW0uXG4gICAgICpcbiAgICAgKiBEZWZhdWx0IHZhbHVlOiBgXCJub25lXCJgXG4gICAgICovXG4gICAgbm9uZUl0ZW1WYWx1ZTogXCJub25lXCIsXG4gICAgLyoqXG4gICAgICogQSBsaXN0IG9mIHN1cHBvcnRlZCB2YWxpZGF0b3JzIGJ5IHF1ZXN0aW9uIHR5cGUuXG4gICAgICovXG4gICAgc3VwcG9ydGVkVmFsaWRhdG9yczoge1xuICAgICAgICBxdWVzdGlvbjogW1wiZXhwcmVzc2lvblwiXSxcbiAgICAgICAgY29tbWVudDogW1widGV4dFwiLCBcInJlZ2V4XCJdLFxuICAgICAgICB0ZXh0OiBbXCJudW1lcmljXCIsIFwidGV4dFwiLCBcInJlZ2V4XCIsIFwiZW1haWxcIl0sXG4gICAgICAgIGNoZWNrYm94OiBbXCJhbnN3ZXJjb3VudFwiXSxcbiAgICAgICAgaW1hZ2VwaWNrZXI6IFtcImFuc3dlcmNvdW50XCJdLFxuICAgIH0sXG4gICAgLyoqXG4gICAgICogU3BlY2lmaWVzIGEgbWluaW11bSBkYXRlIHRoYXQgdXNlcnMgY2FuIGVudGVyIGludG8gYSBbVGV4dF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL3RleHQtZW50cnktcXVlc3Rpb24tbW9kZWwpIHF1ZXN0aW9uIHdpdGggW2BpbnB1dFR5cGVgXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2UvdGV4dC1lbnRyeS1xdWVzdGlvbi1tb2RlbCNpbnB1dFR5cGUpIHNldCB0byBgXCJkYXRlXCJgIG9yIGBcImRhdGV0aW1lLWxvY2FsXCJgLiBTZXQgdGhpcyBwcm9wZXJ0eSB0byBhIHN0cmluZyB3aXRoIHRoZSBmb2xsbG93aW5nIGZvcm1hdDogYFwieXl5eS1tbS1kZFwiYC5cbiAgICAgKi9cbiAgICBtaW5EYXRlOiBcIlwiLFxuICAgIC8qKlxuICAgICAqIFNwZWNpZmllcyBhIG1heGltdW0gZGF0ZSB0aGF0IHVzZXJzIGNhbiBlbnRlciBpbnRvIGEgW1RleHRdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vYXBpLXJlZmVyZW5jZS90ZXh0LWVudHJ5LXF1ZXN0aW9uLW1vZGVsKSBxdWVzdGlvbiB3aXRoIFtgaW5wdXRUeXBlYF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL3RleHQtZW50cnktcXVlc3Rpb24tbW9kZWwjaW5wdXRUeXBlKSBzZXQgdG8gYFwiZGF0ZVwiYCBvciBgXCJkYXRldGltZS1sb2NhbFwiYC4gU2V0IHRoaXMgcHJvcGVydHkgdG8gYSBzdHJpbmcgd2l0aCB0aGUgZm9sbGxvd2luZyBmb3JtYXQ6IGBcInl5eXktbW0tZGRcImAuXG4gICAgICovXG4gICAgbWF4RGF0ZTogXCJcIixcbiAgICBzaG93TW9kYWw6IHVuZGVmaW5lZCxcbiAgICBzaG93RGlhbG9nOiB1bmRlZmluZWQsXG4gICAgc3VwcG9ydENyZWF0b3JWMjogZmFsc2UsXG4gICAgc2hvd0RlZmF1bHRJdGVtc0luQ3JlYXRvclYyOiB0cnVlLFxuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCB0aGF0IHNwZWNpZmllcyBpY29uIHJlcGxhY2VtZW50cy4gT2JqZWN0IGtleXMgYXJlIGJ1aWx0LWluIGljb24gbmFtZXMuIFRvIHVzZSBhIGN1c3RvbSBpY29uLCBhc3NpZ24gaXRzIG5hbWUgdG8gdGhlIGtleSBvZiB0aGUgaWNvbiB5b3Ugd2FudCB0byByZXBsYWNlOlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBpbXBvcnQgeyBzZXR0aW5ncyB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuICAgICAqXG4gICAgICogc2V0dGluZ3MuY3VzdG9tSWNvbnNbXCJpY29uLXJlZG9cIl0gPSBcImN1c3RvbS1yZWRvLWljb25cIjtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGljb25zIGluIFN1cnZleUpTLCByZWZlciB0byB0aGUgZm9sbG93aW5nIGhlbHAgdG9waWM6IFtVSSBJY29uc10oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9pY29ucykuXG4gICAgICovXG4gICAgY3VzdG9tSWNvbnM6IHt9LFxuICAgIC8qKlxuICAgICAqIFNwZWNpZmllcyB3aGljaCBwYXJ0IG9mIGEgY2hvaWNlIGl0ZW0gcmVzcG9uZHMgdG8gYSBkcmFnIGdlc3R1cmUgaW4gUmFua2luZyBxdWVzdGlvbnMuXG4gICAgICpcbiAgICAgKiBQb3NzaWJsZSB2YWx1ZXM6XG4gICAgICpcbiAgICAgKiAtIGBcImVudGlyZUl0ZW1cImAgKGRlZmF1bHQpIC0gVXNlcnMgY2FuIHVzZSB0aGUgZW50aXJlIGNob2ljZSBpdGVtIGFzIGEgZHJhZyBoYW5kbGUuXG4gICAgICogLSBgXCJpY29uXCJgIC0gVXNlcnMgY2FuIG9ubHkgdXNlIHRoZSBjaG9pY2UgaXRlbSBpY29uIGFzIGEgZHJhZyBoYW5kbGUuXG4gICAgICovXG4gICAgcmFua2luZ0RyYWdIYW5kbGVBcmVhOiBcImVudGlyZUl0ZW1cIixcbiAgICBlbnZpcm9ubWVudDogZGVmYXVsdEVudmlyb25tZW50LFxuICAgIC8qKlxuICAgICAqIEFsbG93cyB5b3UgdG8gaGlkZSB0aGUgbWF4aW11bSBsZW5ndGggaW5kaWNhdG9yIGluIHRleHQgaW5wdXQgcXVlc3Rpb25zLlxuICAgICAqXG4gICAgICogSWYgeW91IHNwZWNpZnkgYSBxdWVzdGlvbidzIFtgbWF4TGVuZ3RoYF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL3RleHQtZW50cnktcXVlc3Rpb24tbW9kZWwjbWF4TGVuZ3RoKSBwcm9wZXJ0eSBvciBhIHN1cnZleSdzIFtgbWF4VGV4dExlbmd0aGBdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vYXBpLXJlZmVyZW5jZS9zdXJ2ZXktZGF0YS1tb2RlbCNtYXhUZXh0TGVuZ3RoKSBwcm9wZXJ0eSwgdGV4dCBpbnB1dCBxdWVzdGlvbnMgaW5kaWNhdGUgdGhlIG51bWJlciBvZiBlbnRlcmVkIGNoYXJhY3RlcnMgYW5kIHRoZSBjaGFyYWN0ZXIgbGltaXQuIEFzc2lnbiBgZmFsc2VgIHRvIHRoZSBgc2V0dGluZ3Muc2hvd01heExlbmd0aEluZGljYXRvcmAgcHJvcGVydHkgaWYgeW91IHdhbnQgdG8gaGlkZSB0aGlzIGluZGljYXRvci5cbiAgICAgKlxuICAgICAqIERlZmF1bHQgdmFsdWU6IGB0cnVlYFxuICAgICAqL1xuICAgIHNob3dNYXhMZW5ndGhJbmRpY2F0b3I6IHRydWUsXG4gICAgLyoqXG4gICAgICogQW4gb2JqZWN0IHRoYXQgc3BlY2lmaWVzIGhlYWRpbmcgbGV2ZWxzIChgPGgxPmAsIGA8aDI+YCwgZXRjLikgdG8gdXNlIHdoZW4gcmVuZGVyaW5nIHN1cnZleSwgcGFnZSwgcGFuZWwsIGFuZCBxdWVzdGlvbiB0aXRsZXMuXG4gICAgICpcbiAgICAgKiBEZWZhdWx0IHZhbHVlOiBgeyBzdXJ2ZXk6IFwiaDNcIiwgcGFnZTogXCJoNFwiLCBwYW5lbDogXCJoNFwiLCBxdWVzdGlvbjogXCJoNVwiIH1gXG4gICAgICpcbiAgICAgKiBJZiB5b3Ugd2FudCB0byBtb2RpZnkgaGVhZGluZyBsZXZlbHMgZm9yIGluZGl2aWR1YWwgdGl0bGVzLCBoYW5kbGUgYFN1cnZleU1vZGVsYCdzIFtgb25HZXRUaXRsZVRhZ05hbWVgXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2Uvc3VydmV5LWRhdGEtbW9kZWwjb25HZXRUaXRsZVRhZ05hbWUpIGV2ZW50LlxuICAgICAqL1xuICAgIHRpdGxlVGFnczoge1xuICAgICAgICBzdXJ2ZXk6IFwiaDNcIixcbiAgICAgICAgcGFnZTogXCJoNFwiLFxuICAgICAgICBwYW5lbDogXCJoNFwiLFxuICAgICAgICBxdWVzdGlvbjogXCJoNVwiLFxuICAgIH0sXG4gICAgcXVlc3Rpb25zOiB7XG4gICAgICAgIGlucHV0VHlwZXM6IFtcbiAgICAgICAgICAgIFwiY29sb3JcIixcbiAgICAgICAgICAgIFwiZGF0ZVwiLFxuICAgICAgICAgICAgXCJkYXRldGltZS1sb2NhbFwiLFxuICAgICAgICAgICAgXCJlbWFpbFwiLFxuICAgICAgICAgICAgXCJtb250aFwiLFxuICAgICAgICAgICAgXCJudW1iZXJcIixcbiAgICAgICAgICAgIFwicGFzc3dvcmRcIixcbiAgICAgICAgICAgIFwicmFuZ2VcIixcbiAgICAgICAgICAgIFwidGVsXCIsXG4gICAgICAgICAgICBcInRleHRcIixcbiAgICAgICAgICAgIFwidGltZVwiLFxuICAgICAgICAgICAgXCJ1cmxcIixcbiAgICAgICAgICAgIFwid2Vla1wiLFxuICAgICAgICBdLFxuICAgICAgICBkYXRhTGlzdDogW1xuICAgICAgICAgICAgXCJcIixcbiAgICAgICAgICAgIFwibmFtZVwiLFxuICAgICAgICAgICAgXCJob25vcmlmaWMtcHJlZml4XCIsXG4gICAgICAgICAgICBcImdpdmVuLW5hbWVcIixcbiAgICAgICAgICAgIFwiYWRkaXRpb25hbC1uYW1lXCIsXG4gICAgICAgICAgICBcImZhbWlseS1uYW1lXCIsXG4gICAgICAgICAgICBcImhvbm9yaWZpYy1zdWZmaXhcIixcbiAgICAgICAgICAgIFwibmlja25hbWVcIixcbiAgICAgICAgICAgIFwib3JnYW5pemF0aW9uLXRpdGxlXCIsXG4gICAgICAgICAgICBcInVzZXJuYW1lXCIsXG4gICAgICAgICAgICBcIm5ldy1wYXNzd29yZFwiLFxuICAgICAgICAgICAgXCJjdXJyZW50LXBhc3N3b3JkXCIsXG4gICAgICAgICAgICBcIm9yZ2FuaXphdGlvblwiLFxuICAgICAgICAgICAgXCJzdHJlZXQtYWRkcmVzc1wiLFxuICAgICAgICAgICAgXCJhZGRyZXNzLWxpbmUxXCIsXG4gICAgICAgICAgICBcImFkZHJlc3MtbGluZTJcIixcbiAgICAgICAgICAgIFwiYWRkcmVzcy1saW5lM1wiLFxuICAgICAgICAgICAgXCJhZGRyZXNzLWxldmVsNFwiLFxuICAgICAgICAgICAgXCJhZGRyZXNzLWxldmVsM1wiLFxuICAgICAgICAgICAgXCJhZGRyZXNzLWxldmVsMlwiLFxuICAgICAgICAgICAgXCJhZGRyZXNzLWxldmVsMVwiLFxuICAgICAgICAgICAgXCJjb3VudHJ5XCIsXG4gICAgICAgICAgICBcImNvdW50cnktbmFtZVwiLFxuICAgICAgICAgICAgXCJwb3N0YWwtY29kZVwiLFxuICAgICAgICAgICAgXCJjYy1uYW1lXCIsXG4gICAgICAgICAgICBcImNjLWdpdmVuLW5hbWVcIixcbiAgICAgICAgICAgIFwiY2MtYWRkaXRpb25hbC1uYW1lXCIsXG4gICAgICAgICAgICBcImNjLWZhbWlseS1uYW1lXCIsXG4gICAgICAgICAgICBcImNjLW51bWJlclwiLFxuICAgICAgICAgICAgXCJjYy1leHBcIixcbiAgICAgICAgICAgIFwiY2MtZXhwLW1vbnRoXCIsXG4gICAgICAgICAgICBcImNjLWV4cC15ZWFyXCIsXG4gICAgICAgICAgICBcImNjLWNzY1wiLFxuICAgICAgICAgICAgXCJjYy10eXBlXCIsXG4gICAgICAgICAgICBcInRyYW5zYWN0aW9uLWN1cnJlbmN5XCIsXG4gICAgICAgICAgICBcInRyYW5zYWN0aW9uLWFtb3VudFwiLFxuICAgICAgICAgICAgXCJsYW5ndWFnZVwiLFxuICAgICAgICAgICAgXCJiZGF5XCIsXG4gICAgICAgICAgICBcImJkYXktZGF5XCIsXG4gICAgICAgICAgICBcImJkYXktbW9udGhcIixcbiAgICAgICAgICAgIFwiYmRheS15ZWFyXCIsXG4gICAgICAgICAgICBcInNleFwiLFxuICAgICAgICAgICAgXCJ1cmxcIixcbiAgICAgICAgICAgIFwicGhvdG9cIixcbiAgICAgICAgICAgIFwidGVsXCIsXG4gICAgICAgICAgICBcInRlbC1jb3VudHJ5LWNvZGVcIixcbiAgICAgICAgICAgIFwidGVsLW5hdGlvbmFsXCIsXG4gICAgICAgICAgICBcInRlbC1hcmVhLWNvZGVcIixcbiAgICAgICAgICAgIFwidGVsLWxvY2FsXCIsXG4gICAgICAgICAgICBcInRlbC1sb2NhbC1wcmVmaXhcIixcbiAgICAgICAgICAgIFwidGVsLWxvY2FsLXN1ZmZpeFwiLFxuICAgICAgICAgICAgXCJ0ZWwtZXh0ZW5zaW9uXCIsXG4gICAgICAgICAgICBcImVtYWlsXCIsXG4gICAgICAgICAgICBcImltcHBcIixcbiAgICAgICAgXVxuICAgIH1cbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvc3R5bGVzbWFuYWdlci50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3N0eWxlc21hbmFnZXIudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBtb2Rlcm5UaGVtZUNvbG9ycywgZGVmYXVsdFRoZW1lQ29sb3JzLCBvcmFuZ2VUaGVtZUNvbG9ycywgZGFya2JsdWVUaGVtZUNvbG9ycywgZGFya3Jvc2VUaGVtZUNvbG9ycywgc3RvbmVUaGVtZUNvbG9ycywgd2ludGVyVGhlbWVDb2xvcnMsIHdpbnRlcnN0b25lVGhlbWVDb2xvcnMsIFN0eWxlc01hbmFnZXIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwibW9kZXJuVGhlbWVDb2xvcnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBtb2Rlcm5UaGVtZUNvbG9yczsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiZGVmYXVsdFRoZW1lQ29sb3JzXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZGVmYXVsdFRoZW1lQ29sb3JzOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJvcmFuZ2VUaGVtZUNvbG9yc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIG9yYW5nZVRoZW1lQ29sb3JzOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJkYXJrYmx1ZVRoZW1lQ29sb3JzXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZGFya2JsdWVUaGVtZUNvbG9yczsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiZGFya3Jvc2VUaGVtZUNvbG9yc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGRhcmtyb3NlVGhlbWVDb2xvcnM7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0b25lVGhlbWVDb2xvcnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdG9uZVRoZW1lQ29sb3JzOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJ3aW50ZXJUaGVtZUNvbG9yc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHdpbnRlclRoZW1lQ29sb3JzOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJ3aW50ZXJzdG9uZVRoZW1lQ29sb3JzXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gd2ludGVyc3RvbmVUaGVtZUNvbG9yczsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiU3R5bGVzTWFuYWdlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFN0eWxlc01hbmFnZXI7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9kZWZhdWx0Q3NzX2RlZmF1bHRWMkNzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9kZWZhdWx0Q3NzL2RlZmF1bHRWMkNzcyAqLyBcIi4vc3JjL2RlZmF1bHRDc3MvZGVmYXVsdFYyQ3NzLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9zZXR0aW5ncyAqLyBcIi4vc3JjL3NldHRpbmdzLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF91dGlsc191dGlsc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi91dGlscy91dGlscyAqLyBcIi4vc3JjL3V0aWxzL3V0aWxzLnRzXCIpO1xuXG5cblxudmFyIG1vZGVyblRoZW1lQ29sb3JzID0ge1xuICAgIFwiJG1haW4tY29sb3JcIjogXCIjMWFiMzk0XCIsXG4gICAgXCIkYWRkLWJ1dHRvbi1jb2xvclwiOiBcIiMxOTQ4YjNcIixcbiAgICBcIiRyZW1vdmUtYnV0dG9uLWNvbG9yXCI6IFwiI2ZmMTgwMFwiLFxuICAgIFwiJGRpc2FibGUtY29sb3JcIjogXCIjZGJkYmRiXCIsXG4gICAgXCIkcHJvZ3Jlc3MtdGV4dC1jb2xvclwiOiBcIiM5ZDlkOWRcIixcbiAgICBcIiRkaXNhYmxlZC1sYWJlbC1jb2xvclwiOiBcInJnYmEoNjQsIDY0LCA2NCwgMC41KVwiLFxuICAgIFwiJHNsaWRlci1jb2xvclwiOiBcIndoaXRlXCIsXG4gICAgXCIkZGlzYWJsZWQtc2xpZGVyLWNvbG9yXCI6IFwiI2NmY2ZjZlwiLFxuICAgIFwiJGVycm9yLWNvbG9yXCI6IFwiI2Q1MjkwMVwiLFxuICAgIFwiJHRleHQtY29sb3JcIjogXCIjNDA0MDQwXCIsXG4gICAgXCIkbGlnaHQtdGV4dC1jb2xvclwiOiBcIiNmZmZcIixcbiAgICBcIiRjaGVja21hcmstY29sb3JcIjogXCIjZmZmXCIsXG4gICAgXCIkcHJvZ3Jlc3MtYnV0dG9ucy1jb2xvclwiOiBcIiM4ZGQ5Y2FcIixcbiAgICBcIiRpbnB1dHMtYmFja2dyb3VuZC1jb2xvclwiOiBcInRyYW5zcGFyZW50XCIsXG4gICAgXCIkbWFpbi1ob3Zlci1jb2xvclwiOiBcIiM5ZjlmOWZcIixcbiAgICBcIiRib2R5LWNvbnRhaW5lci1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwiI2Y0ZjRmNFwiLFxuICAgIFwiJHRleHQtYm9yZGVyLWNvbG9yXCI6IFwiI2Q0ZDRkNFwiLFxuICAgIFwiJGRpc2FibGVkLXRleHQtY29sb3JcIjogXCJyZ2JhKDY0LCA2NCwgNjQsIDAuNSlcIixcbiAgICBcIiRib3JkZXItY29sb3JcIjogXCJyZ2IoNjQsIDY0LCA2NCwgMC41KVwiLFxuICAgIFwiJGhlYWRlci1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwiI2U3ZTdlN1wiLFxuICAgIFwiJGFuc3dlci1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwicmdiYSgyNiwgMTc5LCAxNDgsIDAuMilcIixcbiAgICBcIiRlcnJvci1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwicmdiYSgyMTMsIDQxLCAxLCAwLjIpXCIsXG4gICAgXCIkcmFkaW8tY2hlY2tlZC1jb2xvclwiOiBcIiM0MDQwNDBcIixcbiAgICBcIiRjbGVhbi1idXR0b24tY29sb3JcIjogXCIjMTk0OGIzXCIsXG4gICAgXCIkYm9keS1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwiI2ZmZmZmZlwiLFxuICAgIFwiJGZvcmVncm91bmQtbGlnaHRcIjogXCIjOTA5MDkwXCIsXG4gICAgXCIkZm9udC1mYW1pbHlcIjogXCJSYWxld2F5XCIsXG59O1xudmFyIGRlZmF1bHRUaGVtZUNvbG9ycyA9IHtcbiAgICBcIiRoZWFkZXItYmFja2dyb3VuZC1jb2xvclwiOiBcIiNlN2U3ZTdcIixcbiAgICBcIiRib2R5LWNvbnRhaW5lci1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwiI2Y0ZjRmNFwiLFxuICAgIFwiJG1haW4tY29sb3JcIjogXCIjMWFiMzk0XCIsXG4gICAgXCIkbWFpbi1ob3Zlci1jb2xvclwiOiBcIiMwYWEzODRcIixcbiAgICBcIiRib2R5LWJhY2tncm91bmQtY29sb3JcIjogXCJ3aGl0ZVwiLFxuICAgIFwiJGlucHV0cy1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwid2hpdGVcIixcbiAgICBcIiR0ZXh0LWNvbG9yXCI6IFwiIzZkNzA3MlwiLFxuICAgIFwiJHRleHQtaW5wdXQtY29sb3JcIjogXCIjNmQ3MDcyXCIsXG4gICAgXCIkaGVhZGVyLWNvbG9yXCI6IFwiIzZkNzA3MlwiLFxuICAgIFwiJGJvcmRlci1jb2xvclwiOiBcIiNlN2U3ZTdcIixcbiAgICBcIiRlcnJvci1jb2xvclwiOiBcIiNlZDU1NjVcIixcbiAgICBcIiRlcnJvci1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwiI2ZjZGZlMlwiLFxuICAgIFwiJHByb2dyZXNzLXRleHQtY29sb3JcIjogXCIjOWQ5ZDlkXCIsXG4gICAgXCIkZGlzYWJsZS1jb2xvclwiOiBcIiNkYmRiZGJcIixcbiAgICBcIiRkaXNhYmxlZC1sYWJlbC1jb2xvclwiOiBcInJnYmEoNjQsIDY0LCA2NCwgMC41KVwiLFxuICAgIFwiJHNsaWRlci1jb2xvclwiOiBcIndoaXRlXCIsXG4gICAgXCIkZGlzYWJsZWQtc3dpdGNoLWNvbG9yXCI6IFwiIzlmOWY5ZlwiLFxuICAgIFwiJGRpc2FibGVkLXNsaWRlci1jb2xvclwiOiBcIiNjZmNmY2ZcIixcbiAgICBcIiRmb3JlZ3JvdW5kLWxpZ2h0XCI6IFwiIzkwOTA5MFwiLFxuICAgIFwiJGZvcmVncm91bmQtZGlzYWJsZWRcIjogXCIjMTYxNjE2XCIsXG4gICAgXCIkYmFja2dyb3VuZC1kaW1cIjogXCIjZjNmM2YzXCIsXG4gICAgXCIkcHJvZ3Jlc3MtYnV0dG9ucy1jb2xvclwiOiBcIiM4ZGQ5Y2FcIixcbiAgICBcIiRwcm9ncmVzcy1idXR0b25zLWxpbmUtY29sb3JcIjogXCIjZDRkNGQ0XCJcbn07XG52YXIgb3JhbmdlVGhlbWVDb2xvcnMgPSB7XG4gICAgXCIkaGVhZGVyLWJhY2tncm91bmQtY29sb3JcIjogXCIjNGE0YTRhXCIsXG4gICAgXCIkYm9keS1jb250YWluZXItYmFja2dyb3VuZC1jb2xvclwiOiBcIiNmOGY4ZjhcIixcbiAgICBcIiRtYWluLWNvbG9yXCI6IFwiI2Y3ODExOVwiLFxuICAgIFwiJG1haW4taG92ZXItY29sb3JcIjogXCIjZTc3MTA5XCIsXG4gICAgXCIkYm9keS1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwid2hpdGVcIixcbiAgICBcIiRpbnB1dHMtYmFja2dyb3VuZC1jb2xvclwiOiBcIndoaXRlXCIsXG4gICAgXCIkdGV4dC1jb2xvclwiOiBcIiM0YTRhNGFcIixcbiAgICBcIiR0ZXh0LWlucHV0LWNvbG9yXCI6IFwiIzRhNGE0YVwiLFxuICAgIFwiJGhlYWRlci1jb2xvclwiOiBcIiNmNzgxMTlcIixcbiAgICBcIiRib3JkZXItY29sb3JcIjogXCIjZTdlN2U3XCIsXG4gICAgXCIkZXJyb3ItY29sb3JcIjogXCIjZWQ1NTY1XCIsXG4gICAgXCIkZXJyb3ItYmFja2dyb3VuZC1jb2xvclwiOiBcIiNmY2RmZTJcIixcbiAgICBcIiRwcm9ncmVzcy10ZXh0LWNvbG9yXCI6IFwiIzlkOWQ5ZFwiLFxuICAgIFwiJGRpc2FibGUtY29sb3JcIjogXCIjZGJkYmRiXCIsXG4gICAgXCIkZGlzYWJsZWQtbGFiZWwtY29sb3JcIjogXCJyZ2JhKDY0LCA2NCwgNjQsIDAuNSlcIixcbiAgICBcIiRzbGlkZXItY29sb3JcIjogXCJ3aGl0ZVwiLFxuICAgIFwiJGRpc2FibGVkLXN3aXRjaC1jb2xvclwiOiBcIiM5ZjlmOWZcIixcbiAgICBcIiRkaXNhYmxlZC1zbGlkZXItY29sb3JcIjogXCIjY2ZjZmNmXCIsXG4gICAgXCIkZm9yZWdyb3VuZC1saWdodFwiOiBcIiM5MDkwOTBcIixcbiAgICBcIiRmb3JlZ3JvdW5kLWRpc2FibGVkXCI6IFwiIzE2MTYxNlwiLFxuICAgIFwiJGJhY2tncm91bmQtZGltXCI6IFwiI2YzZjNmM1wiLFxuICAgIFwiJHByb2dyZXNzLWJ1dHRvbnMtY29sb3JcIjogXCIjZjdiNzgxXCIsXG4gICAgXCIkcHJvZ3Jlc3MtYnV0dG9ucy1saW5lLWNvbG9yXCI6IFwiI2Q0ZDRkNFwiXG59O1xudmFyIGRhcmtibHVlVGhlbWVDb2xvcnMgPSB7XG4gICAgXCIkaGVhZGVyLWJhY2tncm91bmQtY29sb3JcIjogXCIjZDlkOGRkXCIsXG4gICAgXCIkYm9keS1jb250YWluZXItYmFja2dyb3VuZC1jb2xvclwiOiBcIiNmNmY3ZjJcIixcbiAgICBcIiRtYWluLWNvbG9yXCI6IFwiIzNjNGY2ZFwiLFxuICAgIFwiJG1haW4taG92ZXItY29sb3JcIjogXCIjMmMzZjVkXCIsXG4gICAgXCIkYm9keS1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwid2hpdGVcIixcbiAgICBcIiRpbnB1dHMtYmFja2dyb3VuZC1jb2xvclwiOiBcIndoaXRlXCIsXG4gICAgXCIkdGV4dC1jb2xvclwiOiBcIiM0YTRhNGFcIixcbiAgICBcIiR0ZXh0LWlucHV0LWNvbG9yXCI6IFwiIzRhNGE0YVwiLFxuICAgIFwiJGhlYWRlci1jb2xvclwiOiBcIiM2ZDcwNzJcIixcbiAgICBcIiRib3JkZXItY29sb3JcIjogXCIjZTdlN2U3XCIsXG4gICAgXCIkZXJyb3ItY29sb3JcIjogXCIjZWQ1NTY1XCIsXG4gICAgXCIkZXJyb3ItYmFja2dyb3VuZC1jb2xvclwiOiBcIiNmY2RmZTJcIixcbiAgICBcIiRwcm9ncmVzcy10ZXh0LWNvbG9yXCI6IFwiIzlkOWQ5ZFwiLFxuICAgIFwiJGRpc2FibGUtY29sb3JcIjogXCIjZGJkYmRiXCIsXG4gICAgXCIkZGlzYWJsZWQtbGFiZWwtY29sb3JcIjogXCJyZ2JhKDY0LCA2NCwgNjQsIDAuNSlcIixcbiAgICBcIiRzbGlkZXItY29sb3JcIjogXCJ3aGl0ZVwiLFxuICAgIFwiJGRpc2FibGVkLXN3aXRjaC1jb2xvclwiOiBcIiM5ZjlmOWZcIixcbiAgICBcIiRkaXNhYmxlZC1zbGlkZXItY29sb3JcIjogXCIjY2ZjZmNmXCIsXG4gICAgXCIkZm9yZWdyb3VuZC1saWdodFwiOiBcIiM5MDkwOTBcIixcbiAgICBcIiRmb3JlZ3JvdW5kLWRpc2FibGVkXCI6IFwiIzE2MTYxNlwiLFxuICAgIFwiJGJhY2tncm91bmQtZGltXCI6IFwiI2YzZjNmM1wiLFxuICAgIFwiJHByb2dyZXNzLWJ1dHRvbnMtY29sb3JcIjogXCIjODM5ZWM5XCIsXG4gICAgXCIkcHJvZ3Jlc3MtYnV0dG9ucy1saW5lLWNvbG9yXCI6IFwiI2Q0ZDRkNFwiXG59O1xudmFyIGRhcmtyb3NlVGhlbWVDb2xvcnMgPSB7XG4gICAgXCIkaGVhZGVyLWJhY2tncm91bmQtY29sb3JcIjogXCIjZGRkMmNlXCIsXG4gICAgXCIkYm9keS1jb250YWluZXItYmFja2dyb3VuZC1jb2xvclwiOiBcIiNmN2VmZWRcIixcbiAgICBcIiRtYWluLWNvbG9yXCI6IFwiIzY4NjU2ZVwiLFxuICAgIFwiJG1haW4taG92ZXItY29sb3JcIjogXCIjNTg1NTVlXCIsXG4gICAgXCIkYm9keS1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwid2hpdGVcIixcbiAgICBcIiRpbnB1dHMtYmFja2dyb3VuZC1jb2xvclwiOiBcIndoaXRlXCIsXG4gICAgXCIkdGV4dC1jb2xvclwiOiBcIiM0YTRhNGFcIixcbiAgICBcIiR0ZXh0LWlucHV0LWNvbG9yXCI6IFwiIzRhNGE0YVwiLFxuICAgIFwiJGhlYWRlci1jb2xvclwiOiBcIiM2ZDcwNzJcIixcbiAgICBcIiRib3JkZXItY29sb3JcIjogXCIjZTdlN2U3XCIsXG4gICAgXCIkZXJyb3ItY29sb3JcIjogXCIjZWQ1NTY1XCIsXG4gICAgXCIkZXJyb3ItYmFja2dyb3VuZC1jb2xvclwiOiBcIiNmY2RmZTJcIixcbiAgICBcIiRwcm9ncmVzcy10ZXh0LWNvbG9yXCI6IFwiIzlkOWQ5ZFwiLFxuICAgIFwiJGRpc2FibGUtY29sb3JcIjogXCIjZGJkYmRiXCIsXG4gICAgXCIkZGlzYWJsZWQtbGFiZWwtY29sb3JcIjogXCJyZ2JhKDY0LCA2NCwgNjQsIDAuNSlcIixcbiAgICBcIiRzbGlkZXItY29sb3JcIjogXCJ3aGl0ZVwiLFxuICAgIFwiJGRpc2FibGVkLXN3aXRjaC1jb2xvclwiOiBcIiM5ZjlmOWZcIixcbiAgICBcIiRkaXNhYmxlZC1zbGlkZXItY29sb3JcIjogXCIjY2ZjZmNmXCIsXG4gICAgXCIkZm9yZWdyb3VuZC1saWdodFwiOiBcIiM5MDkwOTBcIixcbiAgICBcIiRmb3JlZ3JvdW5kLWRpc2FibGVkXCI6IFwiIzE2MTYxNlwiLFxuICAgIFwiJGJhY2tncm91bmQtZGltXCI6IFwiI2YzZjNmM1wiLFxuICAgIFwiJHByb2dyZXNzLWJ1dHRvbnMtY29sb3JcIjogXCIjYzZiZWQ0XCIsXG4gICAgXCIkcHJvZ3Jlc3MtYnV0dG9ucy1saW5lLWNvbG9yXCI6IFwiI2Q0ZDRkNFwiXG59O1xudmFyIHN0b25lVGhlbWVDb2xvcnMgPSB7XG4gICAgXCIkaGVhZGVyLWJhY2tncm91bmQtY29sb3JcIjogXCIjY2RjY2QyXCIsXG4gICAgXCIkYm9keS1jb250YWluZXItYmFja2dyb3VuZC1jb2xvclwiOiBcIiNlZmVkZjRcIixcbiAgICBcIiRtYWluLWNvbG9yXCI6IFwiIzBmMGYzM1wiLFxuICAgIFwiJG1haW4taG92ZXItY29sb3JcIjogXCIjMTkxOTU1XCIsXG4gICAgXCIkYm9keS1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwid2hpdGVcIixcbiAgICBcIiRpbnB1dHMtYmFja2dyb3VuZC1jb2xvclwiOiBcIndoaXRlXCIsXG4gICAgXCIkdGV4dC1jb2xvclwiOiBcIiMwZjBmMzNcIixcbiAgICBcIiR0ZXh0LWlucHV0LWNvbG9yXCI6IFwiIzBmMGYzM1wiLFxuICAgIFwiJGhlYWRlci1jb2xvclwiOiBcIiMwZjBmMzNcIixcbiAgICBcIiRib3JkZXItY29sb3JcIjogXCIjZTdlN2U3XCIsXG4gICAgXCIkZXJyb3ItY29sb3JcIjogXCIjZWQ1NTY1XCIsXG4gICAgXCIkZXJyb3ItYmFja2dyb3VuZC1jb2xvclwiOiBcIiNmY2RmZTJcIixcbiAgICBcIiRwcm9ncmVzcy10ZXh0LWNvbG9yXCI6IFwiIzlkOWQ5ZFwiLFxuICAgIFwiJGRpc2FibGUtY29sb3JcIjogXCIjZGJkYmRiXCIsXG4gICAgXCIkZGlzYWJsZWQtbGFiZWwtY29sb3JcIjogXCJyZ2JhKDY0LCA2NCwgNjQsIDAuNSlcIixcbiAgICBcIiRzbGlkZXItY29sb3JcIjogXCJ3aGl0ZVwiLFxuICAgIFwiJGRpc2FibGVkLXN3aXRjaC1jb2xvclwiOiBcIiM5ZjlmOWZcIixcbiAgICBcIiRkaXNhYmxlZC1zbGlkZXItY29sb3JcIjogXCIjY2ZjZmNmXCIsXG4gICAgXCIkZm9yZWdyb3VuZC1saWdodFwiOiBcIiM5MDkwOTBcIixcbiAgICBcIiRmb3JlZ3JvdW5kLWRpc2FibGVkXCI6IFwiIzE2MTYxNlwiLFxuICAgIFwiJGJhY2tncm91bmQtZGltXCI6IFwiI2YzZjNmM1wiLFxuICAgIFwiJHByb2dyZXNzLWJ1dHRvbnMtY29sb3JcIjogXCIjNzQ3NDkxXCIsXG4gICAgXCIkcHJvZ3Jlc3MtYnV0dG9ucy1saW5lLWNvbG9yXCI6IFwiI2Q0ZDRkNFwiXG59O1xudmFyIHdpbnRlclRoZW1lQ29sb3JzID0ge1xuICAgIFwiJGhlYWRlci1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwiIzgyYjhkYVwiLFxuICAgIFwiJGJvZHktY29udGFpbmVyLWJhY2tncm91bmQtY29sb3JcIjogXCIjZGFlMWU3XCIsXG4gICAgXCIkbWFpbi1jb2xvclwiOiBcIiMzYzNiNDBcIixcbiAgICBcIiRtYWluLWhvdmVyLWNvbG9yXCI6IFwiIzFlMWQyMFwiLFxuICAgIFwiJGJvZHktYmFja2dyb3VuZC1jb2xvclwiOiBcIndoaXRlXCIsXG4gICAgXCIkaW5wdXRzLWJhY2tncm91bmQtY29sb3JcIjogXCJ3aGl0ZVwiLFxuICAgIFwiJHRleHQtY29sb3JcIjogXCIjMDAwXCIsXG4gICAgXCIkdGV4dC1pbnB1dC1jb2xvclwiOiBcIiMwMDBcIixcbiAgICBcIiRoZWFkZXItY29sb3JcIjogXCIjMDAwXCIsXG4gICAgXCIkYm9yZGVyLWNvbG9yXCI6IFwiI2U3ZTdlN1wiLFxuICAgIFwiJGVycm9yLWNvbG9yXCI6IFwiI2VkNTU2NVwiLFxuICAgIFwiJGVycm9yLWJhY2tncm91bmQtY29sb3JcIjogXCIjZmNkZmUyXCIsXG4gICAgXCIkZGlzYWJsZS1jb2xvclwiOiBcIiNkYmRiZGJcIixcbiAgICBcIiRwcm9ncmVzcy10ZXh0LWNvbG9yXCI6IFwiIzlkOWQ5ZFwiLFxuICAgIFwiJGRpc2FibGVkLWxhYmVsLWNvbG9yXCI6IFwicmdiYSg2NCwgNjQsIDY0LCAwLjUpXCIsXG4gICAgXCIkc2xpZGVyLWNvbG9yXCI6IFwid2hpdGVcIixcbiAgICBcIiRkaXNhYmxlZC1zd2l0Y2gtY29sb3JcIjogXCIjOWY5ZjlmXCIsXG4gICAgXCIkZGlzYWJsZWQtc2xpZGVyLWNvbG9yXCI6IFwiI2NmY2ZjZlwiLFxuICAgIFwiJGZvcmVncm91bmQtbGlnaHRcIjogXCIjOTA5MDkwXCIsXG4gICAgXCIkZm9yZWdyb3VuZC1kaXNhYmxlZFwiOiBcIiMxNjE2MTZcIixcbiAgICBcIiRiYWNrZ3JvdW5kLWRpbVwiOiBcIiNmM2YzZjNcIixcbiAgICBcIiRwcm9ncmVzcy1idXR0b25zLWNvbG9yXCI6IFwiI2QxYzlmNVwiLFxuICAgIFwiJHByb2dyZXNzLWJ1dHRvbnMtbGluZS1jb2xvclwiOiBcIiNkNGQ0ZDRcIlxufTtcbnZhciB3aW50ZXJzdG9uZVRoZW1lQ29sb3JzID0ge1xuICAgIFwiJGhlYWRlci1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwiIzMyMzIzMlwiLFxuICAgIFwiJGJvZHktY29udGFpbmVyLWJhY2tncm91bmQtY29sb3JcIjogXCIjZjhmOGY4XCIsXG4gICAgXCIkbWFpbi1jb2xvclwiOiBcIiM1YWM4ZmFcIixcbiAgICBcIiRtYWluLWhvdmVyLWNvbG9yXCI6IFwiIzA2YTFlN1wiLFxuICAgIFwiJGJvZHktYmFja2dyb3VuZC1jb2xvclwiOiBcIndoaXRlXCIsXG4gICAgXCIkaW5wdXRzLWJhY2tncm91bmQtY29sb3JcIjogXCJ3aGl0ZVwiLFxuICAgIFwiJHRleHQtY29sb3JcIjogXCIjMDAwXCIsXG4gICAgXCIkdGV4dC1pbnB1dC1jb2xvclwiOiBcIiMwMDBcIixcbiAgICBcIiRoZWFkZXItY29sb3JcIjogXCIjMDAwXCIsXG4gICAgXCIkYm9yZGVyLWNvbG9yXCI6IFwiI2U3ZTdlN1wiLFxuICAgIFwiJGVycm9yLWNvbG9yXCI6IFwiI2VkNTU2NVwiLFxuICAgIFwiJGVycm9yLWJhY2tncm91bmQtY29sb3JcIjogXCIjZmNkZmUyXCIsXG4gICAgXCIkZGlzYWJsZS1jb2xvclwiOiBcIiNkYmRiZGJcIixcbiAgICBcIiRwcm9ncmVzcy10ZXh0LWNvbG9yXCI6IFwiIzlkOWQ5ZFwiLFxuICAgIFwiJGRpc2FibGVkLWxhYmVsLWNvbG9yXCI6IFwicmdiYSg2NCwgNjQsIDY0LCAwLjUpXCIsXG4gICAgXCIkc2xpZGVyLWNvbG9yXCI6IFwid2hpdGVcIixcbiAgICBcIiRkaXNhYmxlZC1zd2l0Y2gtY29sb3JcIjogXCIjOWY5ZjlmXCIsXG4gICAgXCIkZGlzYWJsZWQtc2xpZGVyLWNvbG9yXCI6IFwiI2NmY2ZjZlwiLFxuICAgIFwiJGZvcmVncm91bmQtbGlnaHRcIjogXCIjOTA5MDkwXCIsXG4gICAgXCIkZm9yZWdyb3VuZC1kaXNhYmxlZFwiOiBcIiMxNjE2MTZcIixcbiAgICBcIiRiYWNrZ3JvdW5kLWRpbVwiOiBcIiNmM2YzZjNcIixcbiAgICBcIiRwcm9ncmVzcy1idXR0b25zLWNvbG9yXCI6IFwiI2FjZGNmMlwiLFxuICAgIFwiJHByb2dyZXNzLWJ1dHRvbnMtbGluZS1jb2xvclwiOiBcIiNkNGQ0ZDRcIlxufTtcbmZ1bmN0aW9uIHNldENzc1ZhcmlhYmxlcyh2YXJzLCBlbGVtZW50KSB7XG4gICAgT2JqZWN0LmtleXModmFycyB8fCB7fSkuZm9yRWFjaChmdW5jdGlvbiAoc2Fzc1Zhck5hbWUpIHtcbiAgICAgICAgdmFyIG5hbWUgPSBzYXNzVmFyTmFtZS5zdWJzdHJpbmcoMSk7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXCItLVwiICsgbmFtZSwgdmFyc1tzYXNzVmFyTmFtZV0pO1xuICAgIH0pO1xufVxudmFyIFN0eWxlc01hbmFnZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU3R5bGVzTWFuYWdlcigpIHtcbiAgICAgICAgU3R5bGVzTWFuYWdlci5hdXRvQXBwbHlUaGVtZSgpO1xuICAgIH1cbiAgICBTdHlsZXNNYW5hZ2VyLmF1dG9BcHBseVRoZW1lID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoX2RlZmF1bHRDc3NfZGVmYXVsdFYyQ3NzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdXJ2ZXlDc3NcIl0uY3VycmVudFR5cGUgPT09IFwiYm9vdHN0cmFwXCIgfHwgX2RlZmF1bHRDc3NfZGVmYXVsdFYyQ3NzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdXJ2ZXlDc3NcIl0uY3VycmVudFR5cGUgPT09IFwiYm9vdHN0cmFwbWF0ZXJpYWxcIikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciBpbmNsdWRlZFRoZW1lQ3NzID0gU3R5bGVzTWFuYWdlci5nZXRJbmNsdWRlZFRoZW1lQ3NzKCk7XG4gICAgICAgIGlmIChpbmNsdWRlZFRoZW1lQ3NzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgU3R5bGVzTWFuYWdlci5hcHBseVRoZW1lKGluY2x1ZGVkVGhlbWVDc3NbMF0ubmFtZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN0eWxlc01hbmFnZXIuZ2V0QXZhaWxhYmxlVGhlbWVzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgdGhlbWVNYXBwZXIgPSBfZGVmYXVsdENzc19kZWZhdWx0VjJDc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN1cnZleUNzc1wiXS5nZXRBdmFpbGFibGVUaGVtZXMoKVxuICAgICAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAodGhlbWVOYW1lKSB7IHJldHVybiBbXCJkZWZhdWx0VjJcIiwgXCJkZWZhdWx0XCIsIFwibW9kZXJuXCJdLmluZGV4T2YodGhlbWVOYW1lKSAhPT0gLTE7IH0pXG4gICAgICAgICAgICAubWFwKGZ1bmN0aW9uICh0aGVtZU5hbWUpIHsgcmV0dXJuIHsgbmFtZTogdGhlbWVOYW1lLCB0aGVtZTogX2RlZmF1bHRDc3NfZGVmYXVsdFYyQ3NzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdXJ2ZXlDc3NcIl1bdGhlbWVOYW1lXSB9OyB9KTtcbiAgICAgICAgcmV0dXJuIHRoZW1lTWFwcGVyO1xuICAgIH07XG4gICAgU3R5bGVzTWFuYWdlci5nZXRJbmNsdWRlZFRoZW1lQ3NzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodHlwZW9mIF9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wic2V0dGluZ3NcIl0uZW52aXJvbm1lbnQgPT09IFwidW5kZWZpbmVkXCIpXG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIHZhciByb290RWxlbWVudCA9IF9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wic2V0dGluZ3NcIl0uZW52aXJvbm1lbnQucm9vdEVsZW1lbnQ7XG4gICAgICAgIHZhciB0aGVtZU1hcHBlciA9IFN0eWxlc01hbmFnZXIuZ2V0QXZhaWxhYmxlVGhlbWVzKCk7XG4gICAgICAgIHZhciBlbGVtZW50ID0gT2JqZWN0KF91dGlsc191dGlsc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiaXNTaGFkb3dET01cIl0pKHJvb3RFbGVtZW50KSA/IHJvb3RFbGVtZW50Lmhvc3QgOiByb290RWxlbWVudDtcbiAgICAgICAgaWYgKCEhZWxlbWVudCkge1xuICAgICAgICAgICAgdmFyIHN0eWxlc18xID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbiAgICAgICAgICAgIGlmIChzdHlsZXNfMS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhlbWVNYXBwZXIuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7IHJldHVybiBpdGVtLnRoZW1lLnZhcmlhYmxlcyAmJiBzdHlsZXNfMS5nZXRQcm9wZXJ0eVZhbHVlKGl0ZW0udGhlbWUudmFyaWFibGVzLnRoZW1lTWFyayk7IH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9O1xuICAgIFN0eWxlc01hbmFnZXIuZmluZFNoZWV0ID0gZnVuY3Rpb24gKHN0eWxlU2hlZXRJZCkge1xuICAgICAgICBpZiAodHlwZW9mIF9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wic2V0dGluZ3NcIl0uZW52aXJvbm1lbnQgPT09IFwidW5kZWZpbmVkXCIpXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgdmFyIHN0eWxlU2hlZXRzID0gX3NldHRpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJzZXR0aW5nc1wiXS5lbnZpcm9ubWVudC5yb290LnN0eWxlU2hlZXRzO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlU2hlZXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoISFzdHlsZVNoZWV0c1tpXS5vd25lck5vZGUgJiYgc3R5bGVTaGVldHNbaV0ub3duZXJOb2RlW1wiaWRcIl0gPT09IHN0eWxlU2hlZXRJZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzdHlsZVNoZWV0c1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICAgIFN0eWxlc01hbmFnZXIuY3JlYXRlU2hlZXQgPSBmdW5jdGlvbiAoc3R5bGVTaGVldElkKSB7XG4gICAgICAgIHZhciBzdHlsZXNTaGVldHNNb3VudENvbnRhaW5lciA9IF9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wic2V0dGluZ3NcIl0uZW52aXJvbm1lbnQuc3R5bGVzU2hlZXRzTW91bnRDb250YWluZXI7XG4gICAgICAgIHZhciBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcbiAgICAgICAgc3R5bGUuaWQgPSBzdHlsZVNoZWV0SWQ7XG4gICAgICAgIC8vIEFkZCBhIG1lZGlhIChhbmQvb3IgbWVkaWEgcXVlcnkpIGhlcmUgaWYgeW91J2QgbGlrZSFcbiAgICAgICAgLy8gc3R5bGUuc2V0QXR0cmlidXRlKFwibWVkaWFcIiwgXCJzY3JlZW5cIilcbiAgICAgICAgLy8gc3R5bGUuc2V0QXR0cmlidXRlKFwibWVkaWFcIiwgXCJvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aCA6IDEwMjRweClcIilcbiAgICAgICAgc3R5bGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoXCJcIikpO1xuICAgICAgICBPYmplY3QoX3V0aWxzX3V0aWxzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJnZXRFbGVtZW50XCJdKShzdHlsZXNTaGVldHNNb3VudENvbnRhaW5lcikuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuICAgICAgICBpZiAoISFTdHlsZXNNYW5hZ2VyLkxvZ2dlcikge1xuICAgICAgICAgICAgU3R5bGVzTWFuYWdlci5Mb2dnZXIubG9nKFwic3R5bGUgc2hlZXQgXCIgKyBzdHlsZVNoZWV0SWQgKyBcIiBjcmVhdGVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdHlsZS5zaGVldDtcbiAgICB9O1xuICAgIFN0eWxlc01hbmFnZXIuYXBwbHlUaGVtZSA9IGZ1bmN0aW9uICh0aGVtZU5hbWUsIHRoZW1lU2VsZWN0b3IpIHtcbiAgICAgICAgaWYgKHRoZW1lTmFtZSA9PT0gdm9pZCAwKSB7IHRoZW1lTmFtZSA9IFwiZGVmYXVsdFwiOyB9XG4gICAgICAgIGlmICh0eXBlb2YgX3NldHRpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJzZXR0aW5nc1wiXS5lbnZpcm9ubWVudCA9PT0gXCJ1bmRlZmluZWRcIilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIHJvb3RFbGVtZW50ID0gX3NldHRpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJzZXR0aW5nc1wiXS5lbnZpcm9ubWVudC5yb290RWxlbWVudDtcbiAgICAgICAgdmFyIGVsZW1lbnQgPSBPYmplY3QoX3V0aWxzX3V0aWxzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJpc1NoYWRvd0RPTVwiXSkocm9vdEVsZW1lbnQpID8gcm9vdEVsZW1lbnQuaG9zdCA6IHJvb3RFbGVtZW50O1xuICAgICAgICBfZGVmYXVsdENzc19kZWZhdWx0VjJDc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN1cnZleUNzc1wiXS5jdXJyZW50VHlwZSA9IHRoZW1lTmFtZTtcbiAgICAgICAgaWYgKFN0eWxlc01hbmFnZXIuRW5hYmxlZCkge1xuICAgICAgICAgICAgaWYgKHRoZW1lTmFtZSAhPT0gXCJib290c3RyYXBcIiAmJiB0aGVtZU5hbWUgIT09IFwiYm9vdHN0cmFwbWF0ZXJpYWxcIikge1xuICAgICAgICAgICAgICAgIHNldENzc1ZhcmlhYmxlcyhTdHlsZXNNYW5hZ2VyLlRoZW1lQ29sb3JzW3RoZW1lTmFtZV0sIGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIGlmICghIVN0eWxlc01hbmFnZXIuTG9nZ2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIFN0eWxlc01hbmFnZXIuTG9nZ2VyLmxvZyhcImFwcGx5IHRoZW1lIFwiICsgdGhlbWVOYW1lICsgXCIgY29tcGxldGVkXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgdGhlbWVDc3NfMSA9IFN0eWxlc01hbmFnZXIuVGhlbWVDc3NbdGhlbWVOYW1lXTtcbiAgICAgICAgICAgIGlmICghdGhlbWVDc3NfMSkge1xuICAgICAgICAgICAgICAgIF9kZWZhdWx0Q3NzX2RlZmF1bHRWMkNzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3VydmV5Q3NzXCJdLmN1cnJlbnRUeXBlID0gXCJkZWZhdWx0VjJcIjtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBTdHlsZXNNYW5hZ2VyLmluc2VydFN0eWxlc1J1bGVzSW50b0RvY3VtZW50KCk7XG4gICAgICAgICAgICB2YXIgY3VycmVudFRoZW1lU2VsZWN0b3JfMSA9IHRoZW1lU2VsZWN0b3IgfHwgU3R5bGVzTWFuYWdlci5UaGVtZVNlbGVjdG9yW3RoZW1lTmFtZV0gfHwgU3R5bGVzTWFuYWdlci5UaGVtZVNlbGVjdG9yW1wiZGVmYXVsdFwiXTtcbiAgICAgICAgICAgIHZhciBzdHlsZVNoZWV0SWQgPSAodGhlbWVOYW1lICsgY3VycmVudFRoZW1lU2VsZWN0b3JfMSkudHJpbSgpO1xuICAgICAgICAgICAgdmFyIHNoZWV0XzEgPSBTdHlsZXNNYW5hZ2VyLmZpbmRTaGVldChzdHlsZVNoZWV0SWQpO1xuICAgICAgICAgICAgaWYgKCFzaGVldF8xKSB7XG4gICAgICAgICAgICAgICAgc2hlZXRfMSA9IFN0eWxlc01hbmFnZXIuY3JlYXRlU2hlZXQoc3R5bGVTaGVldElkKTtcbiAgICAgICAgICAgICAgICB2YXIgdGhlbWVDb2xvcnNfMSA9IFN0eWxlc01hbmFnZXIuVGhlbWVDb2xvcnNbdGhlbWVOYW1lXSB8fCBTdHlsZXNNYW5hZ2VyLlRoZW1lQ29sb3JzW1wiZGVmYXVsdFwiXTtcbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyh0aGVtZUNzc18xKS5mb3JFYWNoKGZ1bmN0aW9uIChzZWxlY3Rvcikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgY3NzUnVsZVRleHQgPSB0aGVtZUNzc18xW3NlbGVjdG9yXTtcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXModGhlbWVDb2xvcnNfMSB8fCB7fSkuZm9yRWFjaChmdW5jdGlvbiAoY29sb3JWYXJpYWJsZU5hbWUpIHsgcmV0dXJuIChjc3NSdWxlVGV4dCA9IGNzc1J1bGVUZXh0LnJlcGxhY2UobmV3IFJlZ0V4cChcIlxcXFxcIiArIGNvbG9yVmFyaWFibGVOYW1lLCBcImdcIiksIHRoZW1lQ29sb3JzXzFbY29sb3JWYXJpYWJsZU5hbWVdKSk7IH0pO1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdG9yLmluZGV4T2YoXCJib2R5XCIpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hlZXRfMS5pbnNlcnRSdWxlKHNlbGVjdG9yICsgXCIgeyBcIiArIGNzc1J1bGVUZXh0ICsgXCIgfVwiLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoZWV0XzEuaW5zZXJ0UnVsZShjdXJyZW50VGhlbWVTZWxlY3Rvcl8xICsgc2VsZWN0b3IgKyBcIiB7IFwiICsgY3NzUnVsZVRleHQgKyBcIiB9XCIsIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7IH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoISFTdHlsZXNNYW5hZ2VyLkxvZ2dlcikge1xuICAgICAgICAgICAgU3R5bGVzTWFuYWdlci5Mb2dnZXIubG9nKFwiYXBwbHkgdGhlbWUgXCIgKyB0aGVtZU5hbWUgKyBcIiBjb21wbGV0ZWRcIik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN0eWxlc01hbmFnZXIuaW5zZXJ0U3R5bGVzUnVsZXNJbnRvRG9jdW1lbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChTdHlsZXNNYW5hZ2VyLkVuYWJsZWQpIHtcbiAgICAgICAgICAgIHZhciBzaGVldF8yID0gU3R5bGVzTWFuYWdlci5maW5kU2hlZXQoU3R5bGVzTWFuYWdlci5TdXJ2ZXlKU1N0eWxlc1NoZWV0SWQpO1xuICAgICAgICAgICAgaWYgKCFzaGVldF8yKSB7XG4gICAgICAgICAgICAgICAgc2hlZXRfMiA9IFN0eWxlc01hbmFnZXIuY3JlYXRlU2hlZXQoU3R5bGVzTWFuYWdlci5TdXJ2ZXlKU1N0eWxlc1NoZWV0SWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKFN0eWxlc01hbmFnZXIuU3R5bGVzKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhTdHlsZXNNYW5hZ2VyLlN0eWxlcykuZm9yRWFjaChmdW5jdGlvbiAoc2VsZWN0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNoZWV0XzIuaW5zZXJ0UnVsZShzZWxlY3RvciArIFwiIHsgXCIgKyBTdHlsZXNNYW5hZ2VyLlN0eWxlc1tzZWxlY3Rvcl0gKyBcIiB9XCIsIDApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7IH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhTdHlsZXNNYW5hZ2VyLk1lZGlhKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhTdHlsZXNNYW5hZ2VyLk1lZGlhKS5mb3JFYWNoKGZ1bmN0aW9uIChzZWxlY3Rvcikge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2hlZXRfMi5pbnNlcnRSdWxlKFN0eWxlc01hbmFnZXIuTWVkaWFbc2VsZWN0b3JdLm1lZGlhICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiB7IFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RvciArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgeyBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgU3R5bGVzTWFuYWdlci5NZWRpYVtzZWxlY3Rvcl0uc3R5bGUgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIH0gfVwiLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkgeyB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN0eWxlc01hbmFnZXIuU3VydmV5SlNTdHlsZXNTaGVldElkID0gXCJzdXJ2ZXlqcy1zdHlsZXNcIjtcbiAgICBTdHlsZXNNYW5hZ2VyLlN0eWxlcyA9IHt9O1xuICAgIFN0eWxlc01hbmFnZXIuTWVkaWEgPSB7fTtcbiAgICBTdHlsZXNNYW5hZ2VyLlRoZW1lQ29sb3JzID0ge1xuICAgICAgICBcIm1vZGVyblwiOiBtb2Rlcm5UaGVtZUNvbG9ycyxcbiAgICAgICAgXCJkZWZhdWx0XCI6IGRlZmF1bHRUaGVtZUNvbG9ycyxcbiAgICAgICAgXCJvcmFuZ2VcIjogb3JhbmdlVGhlbWVDb2xvcnMsXG4gICAgICAgIFwiZGFya2JsdWVcIjogZGFya2JsdWVUaGVtZUNvbG9ycyxcbiAgICAgICAgXCJkYXJrcm9zZVwiOiBkYXJrcm9zZVRoZW1lQ29sb3JzLFxuICAgICAgICBcInN0b25lXCI6IHN0b25lVGhlbWVDb2xvcnMsXG4gICAgICAgIFwid2ludGVyXCI6IHdpbnRlclRoZW1lQ29sb3JzLFxuICAgICAgICBcIndpbnRlcnN0b25lXCI6IHdpbnRlcnN0b25lVGhlbWVDb2xvcnMsXG4gICAgfTtcbiAgICBTdHlsZXNNYW5hZ2VyLlRoZW1lQ3NzID0ge307XG4gICAgU3R5bGVzTWFuYWdlci5UaGVtZVNlbGVjdG9yID0ge1xuICAgICAgICBcImRlZmF1bHRcIjogXCIuc3ZfbWFpbiBcIixcbiAgICAgICAgXCJtb2Rlcm5cIjogXCIuc3Ytcm9vdC1tb2Rlcm4gXCJcbiAgICB9O1xuICAgIFN0eWxlc01hbmFnZXIuRW5hYmxlZCA9IHRydWU7XG4gICAgcmV0dXJuIFN0eWxlc01hbmFnZXI7XG59KCkpO1xuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvc3VydmV5LWVsZW1lbnQudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvc3VydmV5LWVsZW1lbnQudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogU3VydmV5RWxlbWVudENvcmUsIERyYWdUeXBlT3Zlck1lRW51bSwgU3VydmV5RWxlbWVudCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJTdXJ2ZXlFbGVtZW50Q29yZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFN1cnZleUVsZW1lbnRDb3JlOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJEcmFnVHlwZU92ZXJNZUVudW1cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBEcmFnVHlwZU92ZXJNZUVudW07IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlN1cnZleUVsZW1lbnRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBTdXJ2ZXlFbGVtZW50OyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9qc29ub2JqZWN0ICovIFwiLi9zcmMvanNvbm9iamVjdC50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYmFzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9iYXNlICovIFwiLi9zcmMvYmFzZS50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYWN0aW9uc19hZGFwdGl2ZV9jb250YWluZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYWN0aW9ucy9hZGFwdGl2ZS1jb250YWluZXIgKi8gXCIuL3NyYy9hY3Rpb25zL2FkYXB0aXZlLWNvbnRhaW5lci50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfaGVscGVyc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9oZWxwZXJzICovIFwiLi9zcmMvaGVscGVycy50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc2V0dGluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vc2V0dGluZ3MgKi8gXCIuL3NyYy9zZXR0aW5ncy50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYWN0aW9uc19jb250YWluZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYWN0aW9ucy9jb250YWluZXIgKi8gXCIuL3NyYy9hY3Rpb25zL2NvbnRhaW5lci50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdXRpbHNfY3NzQ2xhc3NCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3V0aWxzL2Nzc0NsYXNzQnVpbGRlciAqLyBcIi4vc3JjL3V0aWxzL2Nzc0NsYXNzQnVpbGRlci50c1wiKTtcbnZhciBfX2V4dGVuZHMgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xudmFyIF9fZGVjb3JhdGUgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufTtcblxuXG5cblxuXG5cblxuLyoqXG4gKiBBIGJhc2UgY2xhc3MgZm9yIHRoZSBbYFN1cnZleUVsZW1lbnRgXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL3N1cnZleWVsZW1lbnQpIGFuZCBbYFN1cnZleU1vZGVsYF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9zdXJ2ZXltb2RlbCkgY2xhc3Nlcy5cbiAqL1xudmFyIFN1cnZleUVsZW1lbnRDb3JlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhTdXJ2ZXlFbGVtZW50Q29yZSwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTdXJ2ZXlFbGVtZW50Q29yZSgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuY3JlYXRlTG9jVGl0bGVQcm9wZXJ0eSgpO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFN1cnZleUVsZW1lbnRDb3JlLnByb3RvdHlwZS5jcmVhdGVMb2NUaXRsZVByb3BlcnR5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcInRpdGxlXCIsIHRoaXMsIHRydWUpO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleUVsZW1lbnRDb3JlLnByb3RvdHlwZSwgXCJ0aXRsZVwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBIHRpdGxlIGZvciB0aGUgc3VydmV5IGVsZW1lbnQuIElmIGB0aXRsZWAgaXMgdW5kZWZpbmVkLCB0aGUgYG5hbWVgIHByb3BlcnR5IHZhbHVlIGlzIGRpc3BsYXllZCBpbnN0ZWFkLlxuICAgICAgICAgKlxuICAgICAgICAgKiBFbXB0eSBwYWdlcyBhbmQgcGFuZWxzIGRvIG5vdCBkaXNwbGF5IHRoZWlyIHRpdGxlcyBvciBuYW1lcy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHNlZSBbQ29uZmlndXJlIFF1ZXN0aW9uIFRpdGxlc10oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9kZXNpZ24tc3VydmV5LXF1ZXN0aW9uLXRpdGxlcylcbiAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJ0aXRsZVwiLCB0aGlzLmdldERlZmF1bHRUaXRsZVZhbHVlKCkpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwidGl0bGVcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlFbGVtZW50Q29yZS5wcm90b3R5cGUsIFwibG9jVGl0bGVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwidGl0bGVcIik7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBTdXJ2ZXlFbGVtZW50Q29yZS5wcm90b3R5cGUuZ2V0RGVmYXVsdFRpdGxlVmFsdWUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB1bmRlZmluZWQ7IH07XG4gICAgU3VydmV5RWxlbWVudENvcmUucHJvdG90eXBlLnVwZGF0ZURlc2NyaXB0aW9uVmlzaWJpbGl0eSA9IGZ1bmN0aW9uIChuZXdEZXNjcmlwdGlvbikge1xuICAgICAgICB2YXIgc2hvd1BsYWNlaG9sZGVyID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLmlzRGVzaWduTW9kZSkge1xuICAgICAgICAgICAgdmFyIHByb3BlcnR5XzEgPSBfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiU2VyaWFsaXplclwiXS5maW5kUHJvcGVydHkodGhpcy5nZXRUeXBlKCksIFwiZGVzY3JpcHRpb25cIik7XG4gICAgICAgICAgICBzaG93UGxhY2Vob2xkZXIgPSAhIShwcm9wZXJ0eV8xID09PSBudWxsIHx8IHByb3BlcnR5XzEgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHByb3BlcnR5XzEucGxhY2Vob2xkZXIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaGFzRGVzY3JpcHRpb24gPSAhIW5ld0Rlc2NyaXB0aW9uIHx8IChzaG93UGxhY2Vob2xkZXIgJiYgdGhpcy5pc0Rlc2lnbk1vZGUpO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleUVsZW1lbnRDb3JlLnByb3RvdHlwZSwgXCJsb2NEZXNjcmlwdGlvblwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJkZXNjcmlwdGlvblwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlFbGVtZW50Q29yZS5wcm90b3R5cGUsIFwidGl0bGVUYWdOYW1lXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgdGl0bGVUYWdOYW1lID0gdGhpcy5nZXREZWZhdWx0VGl0bGVUYWdOYW1lKCk7XG4gICAgICAgICAgICB2YXIgc3VydmV5ID0gdGhpcy5nZXRTdXJ2ZXkoKTtcbiAgICAgICAgICAgIHJldHVybiAhIXN1cnZleSA/IHN1cnZleS5nZXRFbGVtZW50VGl0bGVUYWdOYW1lKHRoaXMsIHRpdGxlVGFnTmFtZSkgOiB0aXRsZVRhZ05hbWU7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBTdXJ2ZXlFbGVtZW50Q29yZS5wcm90b3R5cGUuZ2V0RGVmYXVsdFRpdGxlVGFnTmFtZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIF9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fW1wic2V0dGluZ3NcIl0udGl0bGVUYWdzW3RoaXMuZ2V0VHlwZSgpXTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlFbGVtZW50Q29yZS5wcm90b3R5cGUsIFwiaGFzVGl0bGVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMudGl0bGUubGVuZ3RoID4gMDsgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlFbGVtZW50Q29yZS5wcm90b3R5cGUsIFwiaGFzVGl0bGVBY3Rpb25zXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBmYWxzZTsgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlFbGVtZW50Q29yZS5wcm90b3R5cGUsIFwiaGFzVGl0bGVFdmVudHNcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmhhc1RpdGxlQWN0aW9ucztcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFN1cnZleUVsZW1lbnRDb3JlLnByb3RvdHlwZS5nZXRUaXRsZVRvb2xiYXIgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBudWxsOyB9O1xuICAgIFN1cnZleUVsZW1lbnRDb3JlLnByb3RvdHlwZS5nZXRUaXRsZU93bmVyID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlFbGVtZW50Q29yZS5wcm90b3R5cGUsIFwiaXNUaXRsZU93bmVyXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiAhIXRoaXMuZ2V0VGl0bGVPd25lcigpOyB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleUVsZW1lbnRDb3JlLnByb3RvdHlwZSwgXCJpc1RpdGxlUmVuZGVyZWRBc1N0cmluZ1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5nZXRJc1RpdGxlUmVuZGVyZWRBc1N0cmluZygpOyB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgU3VydmV5RWxlbWVudENvcmUucHJvdG90eXBlLnRvZ2dsZVN0YXRlID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlFbGVtZW50Q29yZS5wcm90b3R5cGUsIFwiY3NzQ2xhc3Nlc1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4ge307IH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5RWxlbWVudENvcmUucHJvdG90eXBlLCBcImNzc1RpdGxlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBcIlwiOyB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleUVsZW1lbnRDb3JlLnByb3RvdHlwZSwgXCJhcmlhVGl0bGVJZFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleUVsZW1lbnRDb3JlLnByb3RvdHlwZSwgXCJ0aXRsZVRhYkluZGV4XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB1bmRlZmluZWQ7IH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5RWxlbWVudENvcmUucHJvdG90eXBlLCBcInRpdGxlQXJpYUV4cGFuZGVkXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB1bmRlZmluZWQ7IH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5RWxlbWVudENvcmUucHJvdG90eXBlLCBcInRpdGxlQXJpYVJvbGVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlFbGVtZW50Q29yZS5wcm90b3R5cGUsIFwiYXJpYUxhYmVsXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NUaXRsZS5yZW5kZXJlZEh0bWw7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5RWxlbWVudENvcmUucHJvdG90eXBlLCBcInRpdGxlQXJpYUxhYmVsXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcmlhTGFiZWw7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBTdXJ2ZXlFbGVtZW50Q29yZS5wcm90b3R5cGUuZ2V0SXNUaXRsZVJlbmRlcmVkQXNTdHJpbmcgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAhdGhpcy5pc1RpdGxlT3duZXI7IH07XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicHJvcGVydHlcIl0pKClcbiAgICBdLCBTdXJ2ZXlFbGVtZW50Q29yZS5wcm90b3R5cGUsIFwiaGFzRGVzY3JpcHRpb25cIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJwcm9wZXJ0eVwiXSkoe1xuICAgICAgICAgICAgbG9jYWxpemFibGU6IHRydWUsXG4gICAgICAgICAgICBvblNldDogZnVuY3Rpb24gKG5ld0Rlc2NyaXB0aW9uLCBzZWxmKSB7XG4gICAgICAgICAgICAgICAgc2VsZi51cGRhdGVEZXNjcmlwdGlvblZpc2liaWxpdHkobmV3RGVzY3JpcHRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgIF0sIFN1cnZleUVsZW1lbnRDb3JlLnByb3RvdHlwZSwgXCJkZXNjcmlwdGlvblwiLCB2b2lkIDApO1xuICAgIHJldHVybiBTdXJ2ZXlFbGVtZW50Q29yZTtcbn0oX2Jhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIkJhc2VcIl0pKTtcblxuLy8gVE9ETzogcmVuYW1lXG52YXIgRHJhZ1R5cGVPdmVyTWVFbnVtO1xuKGZ1bmN0aW9uIChEcmFnVHlwZU92ZXJNZUVudW0pIHtcbiAgICBEcmFnVHlwZU92ZXJNZUVudW1bRHJhZ1R5cGVPdmVyTWVFbnVtW1wiSW5zaWRlRW1wdHlQYW5lbFwiXSA9IDFdID0gXCJJbnNpZGVFbXB0eVBhbmVsXCI7XG4gICAgRHJhZ1R5cGVPdmVyTWVFbnVtW0RyYWdUeXBlT3Zlck1lRW51bVtcIk11bHRpbGluZVJpZ2h0XCJdID0gMl0gPSBcIk11bHRpbGluZVJpZ2h0XCI7XG4gICAgRHJhZ1R5cGVPdmVyTWVFbnVtW0RyYWdUeXBlT3Zlck1lRW51bVtcIk11bHRpbGluZUxlZnRcIl0gPSAzXSA9IFwiTXVsdGlsaW5lTGVmdFwiO1xuICAgIERyYWdUeXBlT3Zlck1lRW51bVtEcmFnVHlwZU92ZXJNZUVudW1bXCJUb3BcIl0gPSA0XSA9IFwiVG9wXCI7XG4gICAgRHJhZ1R5cGVPdmVyTWVFbnVtW0RyYWdUeXBlT3Zlck1lRW51bVtcIlJpZ2h0XCJdID0gNV0gPSBcIlJpZ2h0XCI7XG4gICAgRHJhZ1R5cGVPdmVyTWVFbnVtW0RyYWdUeXBlT3Zlck1lRW51bVtcIkJvdHRvbVwiXSA9IDZdID0gXCJCb3R0b21cIjtcbiAgICBEcmFnVHlwZU92ZXJNZUVudW1bRHJhZ1R5cGVPdmVyTWVFbnVtW1wiTGVmdFwiXSA9IDddID0gXCJMZWZ0XCI7XG59KShEcmFnVHlwZU92ZXJNZUVudW0gfHwgKERyYWdUeXBlT3Zlck1lRW51bSA9IHt9KSk7XG4vKipcbiAqIEEgYmFzZSBjbGFzcyBmb3IgYWxsIHN1cnZleSBlbGVtZW50cy5cbiAqL1xudmFyIFN1cnZleUVsZW1lbnQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFN1cnZleUVsZW1lbnQsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gU3VydmV5RWxlbWVudChuYW1lKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLnNlbGVjdGVkRWxlbWVudEluRGVzaWduVmFsdWUgPSBfdGhpcztcbiAgICAgICAgX3RoaXMuZGlzYWJsZURlc2lnbkFjdGlvbnMgPSBTdXJ2ZXlFbGVtZW50LkNyZWF0ZURpc2FibGVkRGVzaWduRWxlbWVudHM7XG4gICAgICAgIF90aGlzLnBhcmVudFF1ZXN0aW9uVmFsdWUgPSBudWxsO1xuICAgICAgICBfdGhpcy5pc0NvbnRlbnRFbGVtZW50ID0gZmFsc2U7XG4gICAgICAgIF90aGlzLmlzRWRpdGFibGVUZW1wbGF0ZUVsZW1lbnQgPSBmYWxzZTtcbiAgICAgICAgX3RoaXMuaXNJbnRlcmFjdGl2ZURlc2lnbkVsZW1lbnQgPSB0cnVlO1xuICAgICAgICBfdGhpcy5pc1NpbmdsZUluUm93ID0gdHJ1ZTtcbiAgICAgICAgX3RoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIF90aGlzLmNyZWF0ZU5ld0FycmF5KFwiZXJyb3JzXCIpO1xuICAgICAgICBfdGhpcy5jcmVhdGVOZXdBcnJheShcInRpdGxlQWN0aW9uc1wiKTtcbiAgICAgICAgX3RoaXMucmVnaXN0ZXJQcm9wZXJ0eUNoYW5nZWRIYW5kbGVycyhbXCJpc1JlYWRPbmx5XCJdLCBmdW5jdGlvbiAoKSB7IF90aGlzLm9uUmVhZE9ubHlDaGFuZ2VkKCk7IH0pO1xuICAgICAgICBfdGhpcy5yZWdpc3RlclByb3BlcnR5Q2hhbmdlZEhhbmRsZXJzKFtcImVycm9yc1wiXSwgZnVuY3Rpb24gKCkgeyBfdGhpcy51cGRhdGVWaXNpYmxlRXJyb3JzKCk7IH0pO1xuICAgICAgICBfdGhpcy5yZWdpc3RlclByb3BlcnR5Q2hhbmdlZEhhbmRsZXJzKFtcImlzU2luZ2xlSW5Sb3dcIl0sIGZ1bmN0aW9uICgpIHsgX3RoaXMudXBkYXRlRWxlbWVudENzcyhmYWxzZSk7IH0pO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFN1cnZleUVsZW1lbnQuZ2V0UHJvZ3Jlc3NJbmZvQnlFbGVtZW50cyA9IGZ1bmN0aW9uIChjaGlsZHJlbiwgaXNSZXF1aXJlZCkge1xuICAgICAgICB2YXIgaW5mbyA9IF9iYXNlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJCYXNlXCJdLmNyZWF0ZVByb2dyZXNzSW5mbygpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoIWNoaWxkcmVuW2ldLmlzVmlzaWJsZSlcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIHZhciBjaGlsZEluZm8gPSBjaGlsZHJlbltpXS5nZXRQcm9ncmVzc0luZm8oKTtcbiAgICAgICAgICAgIGluZm8ucXVlc3Rpb25Db3VudCArPSBjaGlsZEluZm8ucXVlc3Rpb25Db3VudDtcbiAgICAgICAgICAgIGluZm8uYW5zd2VyZWRRdWVzdGlvbkNvdW50ICs9IGNoaWxkSW5mby5hbnN3ZXJlZFF1ZXN0aW9uQ291bnQ7XG4gICAgICAgICAgICBpbmZvLnJlcXVpcmVkUXVlc3Rpb25Db3VudCArPSBjaGlsZEluZm8ucmVxdWlyZWRRdWVzdGlvbkNvdW50O1xuICAgICAgICAgICAgaW5mby5yZXF1aXJlZEFuc3dlcmVkUXVlc3Rpb25Db3VudCArPVxuICAgICAgICAgICAgICAgIGNoaWxkSW5mby5yZXF1aXJlZEFuc3dlcmVkUXVlc3Rpb25Db3VudDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNSZXF1aXJlZCAmJiBpbmZvLnF1ZXN0aW9uQ291bnQgPiAwKSB7XG4gICAgICAgICAgICBpZiAoaW5mby5yZXF1aXJlZFF1ZXN0aW9uQ291bnQgPT0gMClcbiAgICAgICAgICAgICAgICBpbmZvLnJlcXVpcmVkUXVlc3Rpb25Db3VudCA9IDE7XG4gICAgICAgICAgICBpZiAoaW5mby5hbnN3ZXJlZFF1ZXN0aW9uQ291bnQgPiAwKVxuICAgICAgICAgICAgICAgIGluZm8ucmVxdWlyZWRBbnN3ZXJlZFF1ZXN0aW9uQ291bnQgPSAxO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbmZvO1xuICAgIH07XG4gICAgU3VydmV5RWxlbWVudC5TY3JvbGxFbGVtZW50VG9Ub3AgPSBmdW5jdGlvbiAoZWxlbWVudElkLCBzY3JvbGxJZlZpc2libGUpIHtcbiAgICAgICAgdmFyIHJvb3QgPSBfc2V0dGluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1tcInNldHRpbmdzXCJdLmVudmlyb25tZW50LnJvb3Q7XG4gICAgICAgIGlmICghZWxlbWVudElkIHx8IHR5cGVvZiByb290ID09PSBcInVuZGVmaW5lZFwiKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB2YXIgZWwgPSByb290LmdldEVsZW1lbnRCeUlkKGVsZW1lbnRJZCk7XG4gICAgICAgIGlmICghZWwgfHwgIWVsLnNjcm9sbEludG9WaWV3KVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB2YXIgZWxlbVRvcCA9IHNjcm9sbElmVmlzaWJsZSA/IC0xIDogZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO1xuICAgICAgICBpZiAoZWxlbVRvcCA8IDApXG4gICAgICAgICAgICBlbC5zY3JvbGxJbnRvVmlldygpO1xuICAgICAgICByZXR1cm4gZWxlbVRvcCA8IDA7XG4gICAgfTtcbiAgICBTdXJ2ZXlFbGVtZW50LkdldEZpcnN0Tm9uVGV4dEVsZW1lbnQgPSBmdW5jdGlvbiAoZWxlbWVudHMsIHJlbW92ZVNwYWNlcykge1xuICAgICAgICBpZiAocmVtb3ZlU3BhY2VzID09PSB2b2lkIDApIHsgcmVtb3ZlU3BhY2VzID0gZmFsc2U7IH1cbiAgICAgICAgaWYgKCFlbGVtZW50cyB8fCAhZWxlbWVudHMubGVuZ3RoIHx8IGVsZW1lbnRzLmxlbmd0aCA9PSAwKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGlmIChyZW1vdmVTcGFjZXMpIHtcbiAgICAgICAgICAgIHZhciB0RWwgPSBlbGVtZW50c1swXTtcbiAgICAgICAgICAgIGlmICh0RWwubm9kZU5hbWUgPT09IFwiI3RleHRcIilcbiAgICAgICAgICAgICAgICB0RWwuZGF0YSA9IFwiXCI7XG4gICAgICAgICAgICB0RWwgPSBlbGVtZW50c1tlbGVtZW50cy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIGlmICh0RWwubm9kZU5hbWUgPT09IFwiI3RleHRcIilcbiAgICAgICAgICAgICAgICB0RWwuZGF0YSA9IFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGVsZW1lbnRzW2ldLm5vZGVOYW1lICE9IFwiI3RleHRcIiAmJiBlbGVtZW50c1tpXS5ub2RlTmFtZSAhPSBcIiNjb21tZW50XCIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gICAgU3VydmV5RWxlbWVudC5Gb2N1c0VsZW1lbnQgPSBmdW5jdGlvbiAoZWxlbWVudElkKSB7XG4gICAgICAgIGlmICghZWxlbWVudElkIHx8IHR5cGVvZiBkb2N1bWVudCA9PT0gXCJ1bmRlZmluZWRcIilcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgdmFyIHJlcyA9IFN1cnZleUVsZW1lbnQuZm9jdXNFbGVtZW50Q29yZShlbGVtZW50SWQpO1xuICAgICAgICBpZiAoIXJlcykge1xuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgU3VydmV5RWxlbWVudC5mb2N1c0VsZW1lbnRDb3JlKGVsZW1lbnRJZCk7XG4gICAgICAgICAgICB9LCAxMCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9O1xuICAgIFN1cnZleUVsZW1lbnQuZm9jdXNFbGVtZW50Q29yZSA9IGZ1bmN0aW9uIChlbGVtZW50SWQpIHtcbiAgICAgICAgdmFyIHJvb3QgPSBfc2V0dGluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1tcInNldHRpbmdzXCJdLmVudmlyb25tZW50LnJvb3Q7XG4gICAgICAgIGlmICghcm9vdClcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgdmFyIGVsID0gcm9vdC5nZXRFbGVtZW50QnlJZChlbGVtZW50SWQpO1xuICAgICAgICAvLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xOTY2OTc4Ni9jaGVjay1pZi1lbGVtZW50LWlzLXZpc2libGUtaW4tZG9tXG4gICAgICAgIGlmIChlbCAmJiAhZWxbXCJkaXNhYmxlZFwiXSAmJiBlbC5zdHlsZS5kaXNwbGF5ICE9PSBcIm5vbmVcIiAmJiBlbC5vZmZzZXRQYXJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGVsLmZvY3VzKCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgICBTdXJ2ZXlFbGVtZW50LnByb3RvdHlwZS5vblByb3BlcnR5VmFsdWVDaGFuZ2VkID0gZnVuY3Rpb24gKG5hbWUsIG9sZFZhbHVlLCBuZXdWYWx1ZSkge1xuICAgICAgICBfc3VwZXIucHJvdG90eXBlLm9uUHJvcGVydHlWYWx1ZUNoYW5nZWQuY2FsbCh0aGlzLCBuYW1lLCBvbGRWYWx1ZSwgbmV3VmFsdWUpO1xuICAgICAgICBpZiAobmFtZSA9PT0gXCJzdGF0ZVwiKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUVsZW1lbnRDc3MoZmFsc2UpO1xuICAgICAgICAgICAgaWYgKHRoaXMuc3RhdGVDaGFuZ2VkQ2FsbGJhY2spXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZWRDYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdXJ2ZXlFbGVtZW50LnByb3RvdHlwZS5nZXRTa2VsZXRvbkNvbXBvbmVudE5hbWVDb3JlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5zdXJ2ZXkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN1cnZleS5nZXRTa2VsZXRvbkNvbXBvbmVudE5hbWUodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5RWxlbWVudC5wcm90b3R5cGUsIFwicGFyZW50UXVlc3Rpb25cIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogQSBEeW5hbWljIFBhbmVsLCBEeW5hbWljIE1hdHJpeCwgb3IgRHJvcGRvd24gTWF0cml4IHRoYXQgaW5jbHVkZXMgdGhlIGN1cnJlbnQgcXVlc3Rpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIFRoaXMgcHJvcGVydHkgaXMgYG51bGxgIGZvciBzdGFuZGFsb25lIHF1ZXN0aW9ucy5cbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50UXVlc3Rpb25WYWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFN1cnZleUVsZW1lbnQucHJvdG90eXBlLnNldFBhcmVudFF1ZXN0aW9uID0gZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICB0aGlzLnBhcmVudFF1ZXN0aW9uVmFsdWUgPSB2YWw7XG4gICAgICAgIHRoaXMub25QYXJlbnRRdWVzdGlvbkNoYW5nZWQoKTtcbiAgICB9O1xuICAgIFN1cnZleUVsZW1lbnQucHJvdG90eXBlLm9uUGFyZW50UXVlc3Rpb25DaGFuZ2VkID0gZnVuY3Rpb24gKCkgeyB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlFbGVtZW50LnByb3RvdHlwZSwgXCJza2VsZXRvbkNvbXBvbmVudE5hbWVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFNrZWxldG9uQ29tcG9uZW50TmFtZUNvcmUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlFbGVtZW50LnByb3RvdHlwZSwgXCJzdGF0ZVwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXRzIGFuZCBzZXRzIHRoZSBzdXJ2ZXkgZWxlbWVudCdzIGV4cGFuZCBzdGF0ZS5cbiAgICAgICAgICpcbiAgICAgICAgICogUG9zc2libGUgdmFsdWVzOlxuICAgICAgICAgKlxuICAgICAgICAgKiAtIGBcImRlZmF1bHRcImAgKGRlZmF1bHQpIC0gVGhlIHN1cnZleSBlbGVtZW50IGlzIGRpc3BsYXllZCBpbiBmdWxsIGFuZCBjYW5ub3QgYmUgY29sbGFwc2VkIGluIHRoZSBVSS5cbiAgICAgICAgICogLSBgXCJleHBhbmRlZFwiYCAtIFRoZSBzdXJ2ZXkgZWxlbWVudCBpcyBkaXNwbGF5ZWQgaW4gZnVsbCBhbmQgY2FuIGJlIGNvbGxhcHNlZCBpbiB0aGUgVUkuXG4gICAgICAgICAqIC0gYFwiY29sbGFwc2VkXCJgIC0gVGhlIHN1cnZleSBlbGVtZW50IGRpc3BsYXlzIG9ubHkgYHRpdGxlYCBhbmQgYGRlc2NyaXB0aW9uYCBhbmQgY2FuIGJlIGV4cGFuZGVkIGluIHRoZSBVSS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHNlZSB0b2dnbGVTdGF0ZVxuICAgICAgICAgKiBAc2VlIGNvbGxhcHNlXG4gICAgICAgICAqIEBzZWUgZXhwYW5kXG4gICAgICAgICAqIEBzZWUgaXNDb2xsYXBzZWRcbiAgICAgICAgICogQHNlZSBpc0V4cGFuZGVkXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzdGF0ZVwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzdGF0ZVwiLCB2YWwpO1xuICAgICAgICAgICAgdGhpcy5ub3RpZnlTdGF0ZUNoYW5nZWQoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFN1cnZleUVsZW1lbnQucHJvdG90eXBlLm5vdGlmeVN0YXRlQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3VydmV5KSB7XG4gICAgICAgICAgICB0aGlzLnN1cnZleS5lbGVtZW50Q29udGVudFZpc2liaWxpdHlDaGFuZ2VkKHRoaXMpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5RWxlbWVudC5wcm90b3R5cGUsIFwiaXNDb2xsYXBzZWRcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHN1cnZleSBlbGVtZW50IGlzIGNvbGxhcHNlZC5cbiAgICAgICAgICogQHNlZSBzdGF0ZVxuICAgICAgICAgKiBAc2VlIHRvZ2dsZVN0YXRlXG4gICAgICAgICAqIEBzZWUgY29sbGFwc2VcbiAgICAgICAgICogQHNlZSBleHBhbmRcbiAgICAgICAgICogQHNlZSBpc0V4cGFuZGVkXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRGVzaWduTW9kZSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZSA9PT0gXCJjb2xsYXBzZWRcIjtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlFbGVtZW50LnByb3RvdHlwZSwgXCJpc0V4cGFuZGVkXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgYHRydWVgIGlmIHRoZSBzdXJ2ZXkgZWxlbWVudCBpcyBleHBhbmRlZC5cbiAgICAgICAgICogQHNlZSBzdGF0ZVxuICAgICAgICAgKiBAc2VlIHRvZ2dsZVN0YXRlXG4gICAgICAgICAqIEBzZWUgY29sbGFwc2VcbiAgICAgICAgICogQHNlZSBleHBhbmRcbiAgICAgICAgICogQHNlZSBpc0NvbGxhcHNlZFxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZSA9PT0gXCJleHBhbmRlZFwiO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgLyoqXG4gICAgICogQ29sbGFwc2VzIHRoZSBzdXJ2ZXkgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEluIGNvbGxhcHNlZCBzdGF0ZSwgdGhlIGVsZW1lbnQgZGlzcGxheXMgb25seSBgdGl0bGVgIGFuZCBgZGVzY3JpcHRpb25gLlxuICAgICAqIEBzZWUgdGl0bGVcbiAgICAgKiBAc2VlIGRlc2NyaXB0aW9uXG4gICAgICogQHNlZSBzdGF0ZVxuICAgICAqIEBzZWUgdG9nZ2xlU3RhdGVcbiAgICAgKiBAc2VlIGV4cGFuZFxuICAgICAqIEBzZWUgaXNDb2xsYXBzZWRcbiAgICAgKiBAc2VlIGlzRXhwYW5kZWRcbiAgICAgKi9cbiAgICBTdXJ2ZXlFbGVtZW50LnByb3RvdHlwZS5jb2xsYXBzZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNEZXNpZ25Nb2RlKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLnN0YXRlID0gXCJjb2xsYXBzZWRcIjtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEV4cGFuZHMgdGhlIHN1cnZleSBlbGVtZW50LlxuICAgICAqIEBzZWUgc3RhdGVcbiAgICAgKiBAc2VlIHRvZ2dsZVN0YXRlXG4gICAgICogQHNlZSBjb2xsYXBzZVxuICAgICAqIEBzZWUgaXNDb2xsYXBzZWRcbiAgICAgKiBAc2VlIGlzRXhwYW5kZWRcbiAgICAgKi9cbiAgICBTdXJ2ZXlFbGVtZW50LnByb3RvdHlwZS5leHBhbmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSBcImV4cGFuZGVkXCI7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBUb2dnbGVzIHRoZSBzdXJ2ZXkgZWxlbWVudCdzIGBzdGF0ZWAgYmV0d2VlbiBjb2xsYXBzZWQgYW5kIGV4cGFuZGVkLlxuICAgICAqIEBzZWUgc3RhdGVcbiAgICAgKiBAc2VlIGNvbGxhcHNlXG4gICAgICogQHNlZSBleHBhbmRcbiAgICAgKiBAc2VlIGlzQ29sbGFwc2VkXG4gICAgICogQHNlZSBpc0V4cGFuZGVkXG4gICAgICovXG4gICAgU3VydmV5RWxlbWVudC5wcm90b3R5cGUudG9nZ2xlU3RhdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzQ29sbGFwc2VkKSB7XG4gICAgICAgICAgICB0aGlzLmV4cGFuZCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXNFeHBhbmRlZCkge1xuICAgICAgICAgICAgdGhpcy5jb2xsYXBzZSgpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleUVsZW1lbnQucHJvdG90eXBlLCBcImhhc1N0YXRlQnV0dG9uXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pc0V4cGFuZGVkIHx8IHRoaXMuaXNDb2xsYXBzZWQ7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5RWxlbWVudC5wcm90b3R5cGUsIFwic2hvcnRjdXRUZXh0XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50aXRsZSB8fCB0aGlzLm5hbWU7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBTdXJ2ZXlFbGVtZW50LnByb3RvdHlwZS5nZXRUaXRsZVRvb2xiYXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy50aXRsZVRvb2xiYXJWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy50aXRsZVRvb2xiYXJWYWx1ZSA9IHRoaXMuY3JlYXRlQWN0aW9uQ29udGFpbmVyKHRydWUpO1xuICAgICAgICAgICAgdGhpcy50aXRsZVRvb2xiYXJWYWx1ZS5jb250YWluZXJDc3MgPSAodGhpcy5pc1BhbmVsID8gdGhpcy5jc3NDbGFzc2VzLnBhbmVsLnRpdGxlQmFyIDogdGhpcy5jc3NDbGFzc2VzLnRpdGxlQmFyKSB8fCBcInN2LWFjdGlvbi10aXRsZS1iYXJcIjtcbiAgICAgICAgICAgIHRoaXMudGl0bGVUb29sYmFyVmFsdWUuc2V0SXRlbXModGhpcy5nZXRUaXRsZUFjdGlvbnMoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMudGl0bGVUb29sYmFyVmFsdWU7XG4gICAgfTtcbiAgICBTdXJ2ZXlFbGVtZW50LnByb3RvdHlwZS5jcmVhdGVBY3Rpb25Db250YWluZXIgPSBmdW5jdGlvbiAoYWxsb3dBZGFwdGl2ZUFjdGlvbnMpIHtcbiAgICAgICAgdmFyIGFjdGlvbkNvbnRhaW5lciA9IGFsbG93QWRhcHRpdmVBY3Rpb25zID8gbmV3IF9hY3Rpb25zX2FkYXB0aXZlX2NvbnRhaW5lcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiQWRhcHRpdmVBY3Rpb25Db250YWluZXJcIl0oKSA6IG5ldyBfYWN0aW9uc19jb250YWluZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1tcIkFjdGlvbkNvbnRhaW5lclwiXSgpO1xuICAgICAgICBpZiAodGhpcy5zdXJ2ZXkgJiYgISF0aGlzLnN1cnZleS5nZXRDc3MoKS5hY3Rpb25CYXIpIHtcbiAgICAgICAgICAgIGFjdGlvbkNvbnRhaW5lci5jc3NDbGFzc2VzID0gdGhpcy5zdXJ2ZXkuZ2V0Q3NzKCkuYWN0aW9uQmFyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY3Rpb25Db250YWluZXI7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5RWxlbWVudC5wcm90b3R5cGUsIFwidGl0bGVBY3Rpb25zXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwidGl0bGVBY3Rpb25zXCIpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgU3VydmV5RWxlbWVudC5wcm90b3R5cGUuZ2V0VGl0bGVBY3Rpb25zID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNUaXRsZUFjdGlvblJlcXVlc3RlZCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVUaXRsZUFjdGlvbnMoKTtcbiAgICAgICAgICAgIHRoaXMuaXNUaXRsZUFjdGlvblJlcXVlc3RlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMudGl0bGVBY3Rpb25zO1xuICAgIH07XG4gICAgU3VydmV5RWxlbWVudC5wcm90b3R5cGUuZ2V0RGVmYXVsdFRpdGxlQWN0aW9ucyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH07XG4gICAgU3VydmV5RWxlbWVudC5wcm90b3R5cGUudXBkYXRlVGl0bGVBY3Rpb25zID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYWN0aW9ucyA9IHRoaXMuZ2V0RGVmYXVsdFRpdGxlQWN0aW9ucygpO1xuICAgICAgICBpZiAoISF0aGlzLnN1cnZleSkge1xuICAgICAgICAgICAgYWN0aW9ucyA9IHRoaXMuc3VydmV5LmdldFVwZGF0ZWRFbGVtZW50VGl0bGVBY3Rpb25zKHRoaXMsIGFjdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInRpdGxlQWN0aW9uc1wiLCBhY3Rpb25zKTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlFbGVtZW50LnByb3RvdHlwZSwgXCJoYXNUaXRsZUFjdGlvbnNcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFRpdGxlQWN0aW9ucygpLmxlbmd0aCA+IDA7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5RWxlbWVudC5wcm90b3R5cGUsIFwiaGFzVGl0bGVFdmVudHNcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN0YXRlICE9PSB1bmRlZmluZWQgJiYgdGhpcy5zdGF0ZSAhPT0gXCJkZWZhdWx0XCI7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5RWxlbWVudC5wcm90b3R5cGUsIFwidGl0bGVUYWJJbmRleFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuICF0aGlzLmlzUGFnZSAmJiB0aGlzLnN0YXRlICE9PSBcImRlZmF1bHRcIiA/IDAgOiB1bmRlZmluZWQ7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5RWxlbWVudC5wcm90b3R5cGUsIFwidGl0bGVBcmlhRXhwYW5kZWRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzUGFnZSB8fCB0aGlzLnN0YXRlID09PSBcImRlZmF1bHRcIilcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGUgPT09IFwiZXhwYW5kZWRcIiA/IFwidHJ1ZVwiIDogXCJmYWxzZVwiO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleUVsZW1lbnQucHJvdG90eXBlLCBcInRpdGxlQXJpYVJvbGVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzUGFnZSB8fCB0aGlzLnN0YXRlID09PSBcImRlZmF1bHRcIilcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgcmV0dXJuIFwiYnV0dG9uXCI7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBTdXJ2ZXlFbGVtZW50LnByb3RvdHlwZS5zZXRTdXJ2ZXlJbXBsID0gZnVuY3Rpb24gKHZhbHVlLCBpc0xpZ2h0KSB7XG4gICAgICAgIHRoaXMuc3VydmV5SW1wbFZhbHVlID0gdmFsdWU7XG4gICAgICAgIGlmICghdGhpcy5zdXJ2ZXlJbXBsVmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0U3VydmV5Q29yZShudWxsKTtcbiAgICAgICAgICAgIHRoaXMuc3VydmV5RGF0YVZhbHVlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc3VydmV5RGF0YVZhbHVlID0gdGhpcy5zdXJ2ZXlJbXBsVmFsdWUuZ2V0U3VydmV5RGF0YSgpO1xuICAgICAgICAgICAgdGhpcy5zZXRTdXJ2ZXlDb3JlKHRoaXMuc3VydmV5SW1wbFZhbHVlLmdldFN1cnZleSgpKTtcbiAgICAgICAgICAgIHRoaXMudGV4dFByb2Nlc3NvclZhbHVlID0gdGhpcy5zdXJ2ZXlJbXBsVmFsdWUuZ2V0VGV4dFByb2Nlc3NvcigpO1xuICAgICAgICAgICAgdGhpcy5vblNldERhdGEoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoISF0aGlzLnN1cnZleSkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVEZXNjcmlwdGlvblZpc2liaWxpdHkodGhpcy5kZXNjcmlwdGlvbik7XG4gICAgICAgICAgICB0aGlzLmNsZWFyQ3NzQ2xhc3NlcygpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdXJ2ZXlFbGVtZW50LnByb3RvdHlwZS5jYW5SdW5Db25kaXRpb25zID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5jYW5SdW5Db25kaXRpb25zLmNhbGwodGhpcykgJiYgISF0aGlzLmRhdGE7XG4gICAgfTtcbiAgICBTdXJ2ZXlFbGVtZW50LnByb3RvdHlwZS5nZXREYXRhRmlsdGVyZWRWYWx1ZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuZGF0YSA/IHRoaXMuZGF0YS5nZXRGaWx0ZXJlZFZhbHVlcygpIDoge307XG4gICAgfTtcbiAgICBTdXJ2ZXlFbGVtZW50LnByb3RvdHlwZS5nZXREYXRhRmlsdGVyZWRQcm9wZXJ0aWVzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcHJvcHMgPSAhIXRoaXMuZGF0YSA/IHRoaXMuZGF0YS5nZXRGaWx0ZXJlZFByb3BlcnRpZXMoKSA6IHt9O1xuICAgICAgICBwcm9wcy5xdWVzdGlvbiA9IHRoaXM7XG4gICAgICAgIHJldHVybiBwcm9wcztcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlFbGVtZW50LnByb3RvdHlwZSwgXCJzdXJ2ZXlJbXBsXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdXJ2ZXlJbXBsVmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICAvKiBZb3Ugc2hvdWxkbid0IHVzZSB0aGlzIG1ldGhvZCBldmVyICovXG4gICAgU3VydmV5RWxlbWVudC5wcm90b3R5cGUuX19zZXREYXRhID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgaWYgKF9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fW1wic2V0dGluZ3NcIl0uc3VwcG9ydENyZWF0b3JWMikge1xuICAgICAgICAgICAgdGhpcy5zdXJ2ZXlEYXRhVmFsdWUgPSBkYXRhO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5RWxlbWVudC5wcm90b3R5cGUsIFwiZGF0YVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3VydmV5RGF0YVZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleUVsZW1lbnQucHJvdG90eXBlLCBcInN1cnZleVwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIHRoZSBzdXJ2ZXkgb2JqZWN0LlxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRTdXJ2ZXkoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFN1cnZleUVsZW1lbnQucHJvdG90eXBlLmdldFN1cnZleSA9IGZ1bmN0aW9uIChsaXZlKSB7XG4gICAgICAgIGlmIChsaXZlID09PSB2b2lkIDApIHsgbGl2ZSA9IGZhbHNlOyB9XG4gICAgICAgIGlmICghIXRoaXMuc3VydmV5VmFsdWUpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdXJ2ZXlWYWx1ZTtcbiAgICAgICAgaWYgKCEhdGhpcy5zdXJ2ZXlJbXBsVmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0U3VydmV5Q29yZSh0aGlzLnN1cnZleUltcGxWYWx1ZS5nZXRTdXJ2ZXkoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuc3VydmV5VmFsdWU7XG4gICAgfTtcbiAgICBTdXJ2ZXlFbGVtZW50LnByb3RvdHlwZS5zZXRTdXJ2ZXlDb3JlID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuc3VydmV5VmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgaWYgKCEhdGhpcy5zdXJ2ZXlDaGFuZ2VkQ2FsbGJhY2spIHtcbiAgICAgICAgICAgIHRoaXMuc3VydmV5Q2hhbmdlZENhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlFbGVtZW50LnByb3RvdHlwZSwgXCJpc0ludGVybmFsXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pc0NvbnRlbnRFbGVtZW50O1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleUVsZW1lbnQucHJvdG90eXBlLCBcImFyZUludmlzaWJsZUVsZW1lbnRzU2hvd2luZ1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuICghIXRoaXMuc3VydmV5ICYmXG4gICAgICAgICAgICAgICAgdGhpcy5zdXJ2ZXkuYXJlSW52aXNpYmxlRWxlbWVudHNTaG93aW5nICYmXG4gICAgICAgICAgICAgICAgIXRoaXMuaXNDb250ZW50RWxlbWVudCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5RWxlbWVudC5wcm90b3R5cGUsIFwiaXNWaXNpYmxlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlFbGVtZW50LnByb3RvdHlwZSwgXCJpc1JlYWRPbmx5XCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgYHRydWVgIGlmIHRoZSBzdXJ2ZXkgZWxlbWVudCBvciBpdHMgcGFyZW50IGVsZW1lbnQgaXMgcmVhZC1vbmx5LlxuICAgICAgICAgKlxuICAgICAgICAgKiBJZiB5b3Ugd2FudCB0byBzd2l0Y2ggYSBzdXJ2ZXkgZWxlbWVudCB0byB0aGUgcmVhZC1vbmx5IHN0YXRlIGJhc2VkIG9uIGEgY29uZGl0aW9uLCBzcGVjaWZ5IHRoZSBbYGVuYWJsZUlmYF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9xdWVzdGlvbiNlbmFibGVJZikgcHJvcGVydHkuIFJlZmVyIHRvIHRoZSBmb2xsb3dpbmcgaGVscCB0b3BpYyBmb3IgaW5mb3JtYXRpb246IFtDb25kaXRpb25hbCBWaXNpYmlsaXR5XShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2Rlc2lnbi1zdXJ2ZXktY29uZGl0aW9uYWwtbG9naWMjY29uZGl0aW9uYWwtdmlzaWJpbGl0eSkuXG4gICAgICAgICAqIEBzZWUgcmVhZE9ubHlcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVhZE9ubHk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5RWxlbWVudC5wcm90b3R5cGUsIFwicmVhZE9ubHlcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogTWFrZXMgdGhlIHN1cnZleSBlbGVtZW50IHJlYWQtb25seS5cbiAgICAgICAgICpcbiAgICAgICAgICogSWYgeW91IHdhbnQgdG8gc3dpdGNoIGEgc3VydmV5IGVsZW1lbnQgdG8gdGhlIHJlYWQtb25seSBzdGF0ZSBiYXNlZCBvbiBhIGNvbmRpdGlvbiwgc3BlY2lmeSB0aGUgW2BlbmFibGVJZmBdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vcXVlc3Rpb24jZW5hYmxlSWYpIHByb3BlcnR5LiBSZWZlciB0byB0aGUgZm9sbG93aW5nIGhlbHAgdG9waWMgZm9yIGluZm9ybWF0aW9uOiBbQ29uZGl0aW9uYWwgVmlzaWJpbGl0eV0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9kZXNpZ24tc3VydmV5LWNvbmRpdGlvbmFsLWxvZ2ljI2NvbmRpdGlvbmFsLXZpc2liaWxpdHkpLlxuICAgICAgICAgKiBAc2VlIGlzUmVhZE9ubHlcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInJlYWRPbmx5XCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnJlYWRPbmx5ID09IHZhbClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJyZWFkT25seVwiLCB2YWwpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlzTG9hZGluZ0Zyb21Kc29uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaXNSZWFkT25seVwiLCB0aGlzLmlzUmVhZE9ubHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgU3VydmV5RWxlbWVudC5wcm90b3R5cGUub25SZWFkT25seUNoYW5nZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghIXRoaXMucmVhZE9ubHlDaGFuZ2VkQ2FsbGJhY2spIHtcbiAgICAgICAgICAgIHRoaXMucmVhZE9ubHlDaGFuZ2VkQ2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleUVsZW1lbnQucHJvdG90eXBlLCBcImNzc1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuICEhdGhpcy5zdXJ2ZXkgPyB0aGlzLnN1cnZleS5nZXRDc3MoKSA6IHt9O1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgU3VydmV5RWxlbWVudC5wcm90b3R5cGUuZW5zdXJlQ3NzQ2xhc3Nlc1ZhbHVlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuY3NzQ2xhc3Nlc1ZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmNzc0NsYXNzZXNWYWx1ZSA9IHRoaXMuY2FsY0Nzc0NsYXNzZXModGhpcy5jc3MpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVFbGVtZW50Q3NzQ29yZSh0aGlzLmNzc0NsYXNzZXNWYWx1ZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlFbGVtZW50LnByb3RvdHlwZSwgXCJjc3NDbGFzc2VzXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgYW4gb2JqZWN0IGluIHdoaWNoIGtleXMgYXJlIFVJIGVsZW1lbnRzIGFuZCB2YWx1ZXMgYXJlIENTUyBjbGFzc2VzIGFwcGxpZWQgdG8gdGhlbS5cbiAgICAgICAgICpcbiAgICAgICAgICogVXNlIHRoZSBmb2xsb3dpbmcgZXZlbnRzIG9mIHRoZSBbYFN1cnZleU1vZGVsYF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9zdXJ2ZXltb2RlbCkgb2JqZWN0IHRvIG92ZXJyaWRlIENTUyBjbGFzc2VzOlxuICAgICAgICAgKlxuICAgICAgICAgKiAtIFtgb25VcGRhdGVRdWVzdGlvbkNzc0NsYXNzZXNgXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL3N1cnZleW1vZGVsI29uVXBkYXRlUXVlc3Rpb25Dc3NDbGFzc2VzKVxuICAgICAgICAgKiAtIFtgb25VcGRhdGVQYW5lbENzc0NsYXNzZXNgXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL3N1cnZleW1vZGVsI29uVXBkYXRlUGFuZWxDc3NDbGFzc2VzKVxuICAgICAgICAgKiAtIFtgb25VcGRhdGVQYWdlQ3NzQ2xhc3Nlc2BdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vc3VydmV5bW9kZWwjb25VcGRhdGVQYWdlQ3NzQ2xhc3NlcylcbiAgICAgICAgICogLSBbYG9uVXBkYXRlQ2hvaWNlSXRlbUNzc2BdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vYXBpLXJlZmVyZW5jZS9zdXJ2ZXktZGF0YS1tb2RlbCNvblVwZGF0ZUNob2ljZUl0ZW1Dc3MpXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfZHVtbXkgPSB0aGlzLmNzc0NsYXNzZXNWYWx1ZTtcbiAgICAgICAgICAgIGlmICghdGhpcy5zdXJ2ZXkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FsY0Nzc0NsYXNzZXModGhpcy5jc3MpO1xuICAgICAgICAgICAgdGhpcy5lbnN1cmVDc3NDbGFzc2VzVmFsdWUoKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNzc0NsYXNzZXNWYWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlFbGVtZW50LnByb3RvdHlwZSwgXCJjc3NUaXRsZU51bWJlclwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGNzcyA9IHRoaXMuY3NzQ2xhc3NlcztcbiAgICAgICAgICAgIGlmIChjc3MubnVtYmVyKVxuICAgICAgICAgICAgICAgIHJldHVybiBjc3MubnVtYmVyO1xuICAgICAgICAgICAgcmV0dXJuIGNzcy5wYW5lbCA/IGNzcy5wYW5lbC5udW1iZXIgOiB1bmRlZmluZWQ7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBTdXJ2ZXlFbGVtZW50LnByb3RvdHlwZS5jYWxjQ3NzQ2xhc3NlcyA9IGZ1bmN0aW9uIChjc3MpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfTtcbiAgICBTdXJ2ZXlFbGVtZW50LnByb3RvdHlwZS51cGRhdGVFbGVtZW50Q3NzQ29yZSA9IGZ1bmN0aW9uIChjc3NDbGFzc2VzKSB7IH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleUVsZW1lbnQucHJvdG90eXBlLCBcImNzc0Vycm9yXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBcIlwiOyB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgU3VydmV5RWxlbWVudC5wcm90b3R5cGUudXBkYXRlRWxlbWVudENzcyA9IGZ1bmN0aW9uIChyZU5ldykge1xuICAgICAgICB0aGlzLmNsZWFyQ3NzQ2xhc3NlcygpO1xuICAgIH07XG4gICAgU3VydmV5RWxlbWVudC5wcm90b3R5cGUuY2xlYXJDc3NDbGFzc2VzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmNzc0NsYXNzZXNWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIFN1cnZleUVsZW1lbnQucHJvdG90eXBlLmdldElzTG9hZGluZ0Zyb21Kc29uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoX3N1cGVyLnByb3RvdHlwZS5nZXRJc0xvYWRpbmdGcm9tSnNvbi5jYWxsKHRoaXMpKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzLnN1cnZleSA/IHRoaXMuc3VydmV5LmlzTG9hZGluZ0Zyb21Kc29uIDogZmFsc2U7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5RWxlbWVudC5wcm90b3R5cGUsIFwibmFtZVwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBIHN1cnZleSBlbGVtZW50IGlkZW50aWZpZXIuXG4gICAgICAgICAqXG4gICAgICAgICAqID4gUXVlc3Rpb24gbmFtZXMgbXVzdCBiZSB1bmlxdWUuXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJuYW1lXCIsIFwiXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHZhciBvbGRWYWx1ZSA9IHRoaXMubmFtZTtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm5hbWVcIiwgdGhpcy5nZXRWYWxpZE5hbWUodmFsKSk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNMb2FkaW5nRnJvbUpzb24gJiYgISFvbGRWYWx1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMub25OYW1lQ2hhbmdlZChvbGRWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBTdXJ2ZXlFbGVtZW50LnByb3RvdHlwZS5nZXRWYWxpZE5hbWUgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICByZXR1cm4gbmFtZTtcbiAgICB9O1xuICAgIFN1cnZleUVsZW1lbnQucHJvdG90eXBlLm9uTmFtZUNoYW5nZWQgPSBmdW5jdGlvbiAob2xkVmFsdWUpIHsgfTtcbiAgICBTdXJ2ZXlFbGVtZW50LnByb3RvdHlwZS51cGRhdGVCaW5kaW5nVmFsdWUgPSBmdW5jdGlvbiAodmFsdWVOYW1lLCB2YWx1ZSkge1xuICAgICAgICBpZiAoISF0aGlzLmRhdGEgJiZcbiAgICAgICAgICAgICF0aGlzLmlzVHdvVmFsdWVFcXVhbHModmFsdWUsIHRoaXMuZGF0YS5nZXRWYWx1ZSh2YWx1ZU5hbWUpKSkge1xuICAgICAgICAgICAgdGhpcy5kYXRhLnNldFZhbHVlKHZhbHVlTmFtZSwgdmFsdWUsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleUVsZW1lbnQucHJvdG90eXBlLCBcImVycm9yc1wiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBWYWxpZGF0aW9uIGVycm9ycy4gQ2FsbCB0aGUgYHZhbGlkYXRlKClgIG1ldGhvZCB0byB2YWxpZGF0ZSBzdXJ2ZXkgZWxlbWVudCBkYXRhLlxuICAgICAgICAgKiBAc2VlIHZhbGlkYXRlXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJlcnJvcnNcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiZXJyb3JzXCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBTdXJ2ZXlFbGVtZW50LnByb3RvdHlwZS51cGRhdGVWaXNpYmxlRXJyb3JzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgY291bnRlciA9IDA7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5lcnJvcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmVycm9yc1tpXS52aXNpYmxlKVxuICAgICAgICAgICAgICAgIGNvdW50ZXIrKztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmhhc1Zpc2libGVFcnJvcnMgPSBjb3VudGVyID4gMDtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlFbGVtZW50LnByb3RvdHlwZSwgXCJjb250YWluc0Vycm9yc1wiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgc3VydmV5IGVsZW1lbnQgb3IgaXRzIGNoaWxkIGVsZW1lbnRzIGhhdmUgdmFsaWRhdGlvbiBlcnJvcnMuXG4gICAgICAgICAqXG4gICAgICAgICAqIFRoaXMgcHJvcGVydHkgY29udGFpbnMgdGhlIHJlc3VsdCBvZiB0aGUgbW9zdCByZWNlbnQgdmFsaWRhdGlvbi4gVGhpcyByZXN1bHQgbWF5IGJlIG91dGRhdGVkLiBDYWxsIHRoZSBgdmFsaWRhdGVgIG1ldGhvZCB0byBnZXQgYW4gdXAtdG8tZGF0ZSB2YWx1ZS5cbiAgICAgICAgICogQHNlZSBlcnJvcnNcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNvbnRhaW5zRXJyb3JzXCIsIGZhbHNlKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFN1cnZleUVsZW1lbnQucHJvdG90eXBlLnVwZGF0ZUNvbnRhaW5zRXJyb3JzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjb250YWluc0Vycm9yc1wiLCB0aGlzLmdldENvbnRhaW5zRXJyb3JzKCkpO1xuICAgIH07XG4gICAgU3VydmV5RWxlbWVudC5wcm90b3R5cGUuZ2V0Q29udGFpbnNFcnJvcnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVycm9ycy5sZW5ndGggPiAwO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleUVsZW1lbnQucHJvdG90eXBlLCBcInNlbGVjdGVkRWxlbWVudEluRGVzaWduXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEVsZW1lbnRJbkRlc2lnblZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50SW5EZXNpZ25WYWx1ZSA9IHZhbDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFN1cnZleUVsZW1lbnQucHJvdG90eXBlLnVwZGF0ZUN1c3RvbVdpZGdldHMgPSBmdW5jdGlvbiAoKSB7IH07XG4gICAgU3VydmV5RWxlbWVudC5wcm90b3R5cGUub25TdXJ2ZXlMb2FkID0gZnVuY3Rpb24gKCkgeyB9O1xuICAgIFN1cnZleUVsZW1lbnQucHJvdG90eXBlLm9uRmlyc3RSZW5kZXJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuZW5zdXJlQ3NzQ2xhc3Nlc1ZhbHVlKCk7XG4gICAgfTtcbiAgICBTdXJ2ZXlFbGVtZW50LnByb3RvdHlwZS5lbmRMb2FkaW5nRnJvbUpzb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUuZW5kTG9hZGluZ0Zyb21Kc29uLmNhbGwodGhpcyk7XG4gICAgICAgIGlmICghdGhpcy5zdXJ2ZXkpIHtcbiAgICAgICAgICAgIHRoaXMub25TdXJ2ZXlMb2FkKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVEZXNjcmlwdGlvblZpc2liaWxpdHkodGhpcy5kZXNjcmlwdGlvbik7XG4gICAgfTtcbiAgICBTdXJ2ZXlFbGVtZW50LnByb3RvdHlwZS5zZXRWaXNpYmxlSW5kZXggPSBmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5RWxlbWVudC5wcm90b3R5cGUsIFwiaXNQYWdlXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgYHRydWVgIGlmIHRoZSBzdXJ2ZXkgZWxlbWVudCBpcyBhIHBhZ2UuXG4gICAgICAgICAqIEBzZWUgQmFzZS5nZXRUeXBlXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlFbGVtZW50LnByb3RvdHlwZSwgXCJpc1BhbmVsXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgYHRydWVgIGlmIHRoZSBzdXJ2ZXkgZWxlbWVudCBpcyBhIHBhbmVsLlxuICAgICAgICAgKiBAc2VlIEJhc2UuZ2V0VHlwZVxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5RWxlbWVudC5wcm90b3R5cGUsIFwiaXNRdWVzdGlvblwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgc3VydmV5IGVsZW1lbnQgaXMgYSBxdWVzdGlvbi5cbiAgICAgICAgICogQHNlZSBCYXNlLmdldFR5cGVcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgU3VydmV5RWxlbWVudC5wcm90b3R5cGUuZGVsZXRlID0gZnVuY3Rpb24gKGRvRGlzcG9zZSkgeyB9O1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHN1cnZleSdzIFtsb2NhbGVdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vc3VydmV5bW9kZWwjbG9jYWxlKS5cbiAgICAgKlxuICAgICAqIElmIGEgZGVmYXVsdCBsb2NhbGUgaXMgdXNlZCwgdGhpcyBtZXRob2QgcmV0dXJucyBhbiBlbXB0eSBzdHJpbmcuIFRvIGdldCB0aGUgYXBwbGllZCBsb2NhbGUgaW4gdGhpcyBjYXNlLCB1c2UgdGhlIGZvbGxvd2luZyBjb2RlOlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBpbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tICdzdXJ2ZXktY29yZSc7XG4gICAgICogY29uc3QgZGVmYXVsdExvY2FsZSA9IHN1cnZleUxvY2FsaXphdGlvbi5kZWZhdWx0TG9jYWxlO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQHNlZSBbTG9jYWxpemF0aW9uICYgR2xvYmFsaXphdGlvbl0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9sb2NhbGl6YXRpb24pXG4gICAgICovXG4gICAgU3VydmV5RWxlbWVudC5wcm90b3R5cGUuZ2V0TG9jYWxlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdXJ2ZXlcbiAgICAgICAgICAgID8gdGhpcy5zdXJ2ZXkuZ2V0TG9jYWxlKClcbiAgICAgICAgICAgIDogdGhpcy5sb2NPd25lclxuICAgICAgICAgICAgICAgID8gdGhpcy5sb2NPd25lci5nZXRMb2NhbGUoKVxuICAgICAgICAgICAgICAgIDogXCJcIjtcbiAgICB9O1xuICAgIFN1cnZleUVsZW1lbnQucHJvdG90eXBlLmdldE1hcmtkb3duSHRtbCA9IGZ1bmN0aW9uICh0ZXh0LCBuYW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN1cnZleVxuICAgICAgICAgICAgPyB0aGlzLnN1cnZleS5nZXRTdXJ2ZXlNYXJrZG93bkh0bWwodGhpcywgdGV4dCwgbmFtZSlcbiAgICAgICAgICAgIDogdGhpcy5sb2NPd25lclxuICAgICAgICAgICAgICAgID8gdGhpcy5sb2NPd25lci5nZXRNYXJrZG93bkh0bWwodGV4dCwgbmFtZSlcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIFN1cnZleUVsZW1lbnQucHJvdG90eXBlLmdldFJlbmRlcmVyID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3VydmV5ICYmIHR5cGVvZiB0aGlzLnN1cnZleS5nZXRSZW5kZXJlckZvclN0cmluZyA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgICA/IHRoaXMuc3VydmV5LmdldFJlbmRlcmVyRm9yU3RyaW5nKHRoaXMsIG5hbWUpXG4gICAgICAgICAgICA6IHRoaXMubG9jT3duZXIgJiYgdHlwZW9mIHRoaXMubG9jT3duZXIuZ2V0UmVuZGVyZXIgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgICAgICAgID8gdGhpcy5sb2NPd25lci5nZXRSZW5kZXJlcihuYW1lKVxuICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICB9O1xuICAgIFN1cnZleUVsZW1lbnQucHJvdG90eXBlLmdldFJlbmRlcmVyQ29udGV4dCA9IGZ1bmN0aW9uIChsb2NTdHIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3VydmV5ICYmIHR5cGVvZiB0aGlzLnN1cnZleS5nZXRSZW5kZXJlckNvbnRleHRGb3JTdHJpbmcgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgICAgPyB0aGlzLnN1cnZleS5nZXRSZW5kZXJlckNvbnRleHRGb3JTdHJpbmcodGhpcywgbG9jU3RyKVxuICAgICAgICAgICAgOiB0aGlzLmxvY093bmVyICYmIHR5cGVvZiB0aGlzLmxvY093bmVyLmdldFJlbmRlcmVyQ29udGV4dCA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgICAgICAgPyB0aGlzLmxvY093bmVyLmdldFJlbmRlcmVyQ29udGV4dChsb2NTdHIpXG4gICAgICAgICAgICAgICAgOiBsb2NTdHI7XG4gICAgfTtcbiAgICBTdXJ2ZXlFbGVtZW50LnByb3RvdHlwZS5nZXRQcm9jZXNzZWRUZXh0ID0gZnVuY3Rpb24gKHRleHQpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNMb2FkaW5nRnJvbUpzb24pXG4gICAgICAgICAgICByZXR1cm4gdGV4dDtcbiAgICAgICAgaWYgKHRoaXMudGV4dFByb2Nlc3NvcilcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRleHRQcm9jZXNzb3IucHJvY2Vzc1RleHQodGV4dCwgdGhpcy5nZXRVc2VEaXNwbGF5VmFsdWVzSW5EeW5hbWljVGV4dHMoKSk7XG4gICAgICAgIGlmICh0aGlzLmxvY093bmVyKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jT3duZXIuZ2V0UHJvY2Vzc2VkVGV4dCh0ZXh0KTtcbiAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfTtcbiAgICBTdXJ2ZXlFbGVtZW50LnByb3RvdHlwZS5nZXRVc2VEaXNwbGF5VmFsdWVzSW5EeW5hbWljVGV4dHMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0cnVlOyB9O1xuICAgIFN1cnZleUVsZW1lbnQucHJvdG90eXBlLnJlbW92ZVNlbGZGcm9tTGlzdCA9IGZ1bmN0aW9uIChsaXN0KSB7XG4gICAgICAgIGlmICghbGlzdCB8fCAhQXJyYXkuaXNBcnJheShsaXN0KSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIGluZGV4ID0gbGlzdC5pbmRleE9mKHRoaXMpO1xuICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgbGlzdC5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5RWxlbWVudC5wcm90b3R5cGUsIFwidGV4dFByb2Nlc3NvclwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGV4dFByb2Nlc3NvclZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgU3VydmV5RWxlbWVudC5wcm90b3R5cGUuZ2V0UHJvY2Vzc2VkSHRtbCA9IGZ1bmN0aW9uIChodG1sKSB7XG4gICAgICAgIGlmICghaHRtbCB8fCAhdGhpcy50ZXh0UHJvY2Vzc29yKVxuICAgICAgICAgICAgcmV0dXJuIGh0bWw7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHRQcm9jZXNzb3IucHJvY2Vzc1RleHQoaHRtbCwgdHJ1ZSk7XG4gICAgfTtcbiAgICBTdXJ2ZXlFbGVtZW50LnByb3RvdHlwZS5vblNldERhdGEgPSBmdW5jdGlvbiAoKSB7IH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleUVsZW1lbnQucHJvdG90eXBlLCBcInBhcmVudFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInBhcmVudFwiLCBudWxsKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJwYXJlbnRcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFN1cnZleUVsZW1lbnQucHJvdG90eXBlLmdldFBhZ2UgPSBmdW5jdGlvbiAocGFyZW50KSB7XG4gICAgICAgIHdoaWxlIChwYXJlbnQgJiYgcGFyZW50LnBhcmVudClcbiAgICAgICAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnQ7XG4gICAgICAgIGlmIChwYXJlbnQgJiYgcGFyZW50LmdldFR5cGUoKSA9PSBcInBhZ2VcIilcbiAgICAgICAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gICAgU3VydmV5RWxlbWVudC5wcm90b3R5cGUubW92ZVRvQmFzZSA9IGZ1bmN0aW9uIChwYXJlbnQsIGNvbnRhaW5lciwgaW5zZXJ0QmVmb3JlKSB7XG4gICAgICAgIGlmIChpbnNlcnRCZWZvcmUgPT09IHZvaWQgMCkgeyBpbnNlcnRCZWZvcmUgPSBudWxsOyB9XG4gICAgICAgIGlmICghY29udGFpbmVyKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBwYXJlbnQucmVtb3ZlRWxlbWVudCh0aGlzKTtcbiAgICAgICAgdmFyIGluZGV4ID0gLTE7XG4gICAgICAgIGlmIChfaGVscGVyc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiSGVscGVyc1wiXS5pc051bWJlcihpbnNlcnRCZWZvcmUpKSB7XG4gICAgICAgICAgICBpbmRleCA9IHBhcnNlSW50KGluc2VydEJlZm9yZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluZGV4ID09IC0xICYmICEhaW5zZXJ0QmVmb3JlICYmICEhaW5zZXJ0QmVmb3JlLmdldFR5cGUpIHtcbiAgICAgICAgICAgIGluZGV4ID0gY29udGFpbmVyLmluZGV4T2YoaW5zZXJ0QmVmb3JlKTtcbiAgICAgICAgfVxuICAgICAgICBjb250YWluZXIuYWRkRWxlbWVudCh0aGlzLCBpbmRleCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG4gICAgU3VydmV5RWxlbWVudC5wcm90b3R5cGUuc2V0UGFnZSA9IGZ1bmN0aW9uIChwYXJlbnQsIG5ld1BhZ2UpIHtcbiAgICAgICAgdmFyIG9sZFBhZ2UgPSB0aGlzLmdldFBhZ2UocGFyZW50KTtcbiAgICAgICAgLy9maXggZm9yIHRoZSBjcmVhdG9yIHYxOiBodHRwczovL2dpdGh1Yi5jb20vc3VydmV5anMvc3VydmV5LWNyZWF0b3IvaXNzdWVzLzE3NDRcbiAgICAgICAgaWYgKHR5cGVvZiBuZXdQYWdlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICB2YXIgc3VydmV5ID0gdGhpcy5nZXRTdXJ2ZXkoKTtcbiAgICAgICAgICAgIHN1cnZleS5wYWdlcy5mb3JFYWNoKGZ1bmN0aW9uIChwYWdlKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5ld1BhZ2UgPT09IHBhZ2UubmFtZSlcbiAgICAgICAgICAgICAgICAgICAgbmV3UGFnZSA9IHBhZ2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob2xkUGFnZSA9PT0gbmV3UGFnZSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKHBhcmVudClcbiAgICAgICAgICAgIHBhcmVudC5yZW1vdmVFbGVtZW50KHRoaXMpO1xuICAgICAgICBpZiAobmV3UGFnZSkge1xuICAgICAgICAgICAgbmV3UGFnZS5hZGRFbGVtZW50KHRoaXMsIC0xKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3VydmV5RWxlbWVudC5wcm90b3R5cGUuZ2V0U2VhcmNoYWJsZUxvY0tleXMgPSBmdW5jdGlvbiAoa2V5cykge1xuICAgICAgICBrZXlzLnB1c2goXCJ0aXRsZVwiKTtcbiAgICAgICAga2V5cy5wdXNoKFwiZGVzY3JpcHRpb25cIik7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5RWxlbWVudC5wcm90b3R5cGUsIFwiaXNEZWZhdWx0VjJUaGVtZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3VydmV5ICYmIHRoaXMuc3VydmV5LmdldENzcygpLnJvb3QgPT0gXCJzZC1yb290LW1vZGVyblwiO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleUVsZW1lbnQucHJvdG90eXBlLCBcImhhc1BhcmVudFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuICh0aGlzLnBhcmVudCAmJiAhdGhpcy5wYXJlbnQuaXNQYWdlICYmICghdGhpcy5wYXJlbnQub3JpZ2luYWxQYWdlIHx8IHRoaXMuc3VydmV5LmlzU2hvd2luZ1ByZXZpZXcpKSB8fCAodGhpcy5wYXJlbnQgPT09IHVuZGVmaW5lZCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBTdXJ2ZXlFbGVtZW50LnByb3RvdHlwZS5zaG91bGRBZGRSdW5uZXJTdHlsZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5pc0Rlc2lnbk1vZGUgJiYgdGhpcy5pc0RlZmF1bHRWMlRoZW1lO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleUVsZW1lbnQucHJvdG90eXBlLCBcImlzQ29tcGFjdFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3VydmV5ICYmIHRoaXMuc3VydmV5W1wiaXNDb21wYWN0XCJdO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgU3VydmV5RWxlbWVudC5wcm90b3R5cGUuZ2V0SGFzRnJhbWVWMiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2hvdWxkQWRkUnVubmVyU3R5bGVzKCkgJiYgKCF0aGlzLmhhc1BhcmVudCk7XG4gICAgfTtcbiAgICBTdXJ2ZXlFbGVtZW50LnByb3RvdHlwZS5nZXRJc05lc3RlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2hvdWxkQWRkUnVubmVyU3R5bGVzKCkgJiYgKHRoaXMuaGFzUGFyZW50KTtcbiAgICB9O1xuICAgIFN1cnZleUVsZW1lbnQucHJvdG90eXBlLmdldENzc1Jvb3QgPSBmdW5jdGlvbiAoY3NzQ2xhc3Nlcykge1xuICAgICAgICByZXR1cm4gbmV3IF91dGlsc19jc3NDbGFzc0J1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1tcIkNzc0NsYXNzQnVpbGRlclwiXSgpXG4gICAgICAgICAgICAuYXBwZW5kKGNzc0NsYXNzZXMud2l0aEZyYW1lLCB0aGlzLmdldEhhc0ZyYW1lVjIoKSAmJiAhdGhpcy5pc0NvbXBhY3QpXG4gICAgICAgICAgICAuYXBwZW5kKGNzc0NsYXNzZXMuY29tcGFjdCwgdGhpcy5pc0NvbXBhY3QgJiYgdGhpcy5nZXRIYXNGcmFtZVYyKCkpXG4gICAgICAgICAgICAuYXBwZW5kKGNzc0NsYXNzZXMuY29sbGFwc2VkLCAhIXRoaXMuaXNDb2xsYXBzZWQpXG4gICAgICAgICAgICAuYXBwZW5kKGNzc0NsYXNzZXMuZXhwYW5kZWQsICEhdGhpcy5pc0V4cGFuZGVkKVxuICAgICAgICAgICAgLmFwcGVuZChjc3NDbGFzc2VzLm5lc3RlZCwgdGhpcy5nZXRJc05lc3RlZCgpKVxuICAgICAgICAgICAgLnRvU3RyaW5nKCk7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5RWxlbWVudC5wcm90b3R5cGUsIFwid2lkdGhcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogU2V0cyBzdXJ2ZXkgZWxlbWVudCB3aWR0aCBpbiBDU1MgdmFsdWVzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBEZWZhdWx0IHZhbHVlOiBcIlwiXG4gICAgICAgICAqIEBzZWUgbWluV2lkdGhcbiAgICAgICAgICogQHNlZSBtYXhXaWR0aFxuICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ3aWR0aFwiLCBcIlwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJ3aWR0aFwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleUVsZW1lbnQucHJvdG90eXBlLCBcIm1pbldpZHRoXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldHMgb3Igc2V0cyBtaW5pbXVtIHN1cnZleSBlbGVtZW50IHdpZHRoIGluIENTUyB2YWx1ZXMuXG4gICAgICAgICAqXG4gICAgICAgICAqIERlZmF1bHQgdmFsdWU6IFwiMzAwcHhcIiAodGFrZW4gZnJvbSBbYHNldHRpbmdzLm1pbldpZHRoYF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9zZXR0aW5ncyNtaW5XaWR0aCkpXG4gICAgICAgICAqIEBzZWUgbWF4V2lkdGhcbiAgICAgICAgICogQHNlZSByZW5kZXJXaWR0aFxuICAgICAgICAgKiBAc2VlIHdpZHRoXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJtaW5XaWR0aFwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJtaW5XaWR0aFwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleUVsZW1lbnQucHJvdG90eXBlLCBcIm1heFdpZHRoXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldHMgb3Igc2V0cyBtYXhpbXVtIHN1cnZleSBlbGVtZW50IHdpZHRoIGluIENTUyB2YWx1ZXMuXG4gICAgICAgICAqXG4gICAgICAgICAqIERlZmF1bHQgdmFsdWU6IFwiMTAwJVwiICh0YWtlbiBmcm9tIFtgc2V0dGluZ3MubWF4V2lkdGhgXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL3NldHRpbmdzI21heFdpZHRoKSlcbiAgICAgICAgICogQHNlZSBtaW5XaWR0aFxuICAgICAgICAgKiBAc2VlIHJlbmRlcldpZHRoXG4gICAgICAgICAqIEBzZWUgd2lkdGhcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIm1heFdpZHRoXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm1heFdpZHRoXCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5RWxlbWVudC5wcm90b3R5cGUsIFwicmVuZGVyV2lkdGhcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJucyBhIGNhbGN1bGF0ZWQgd2lkdGggb2YgdGhlIHJlbmRlcmVkIHN1cnZleSBlbGVtZW50IGluIENTUyB2YWx1ZXMuXG4gICAgICAgICAqIEBzZWUgd2lkdGhcbiAgICAgICAgICogQHNlZSBtaW5XaWR0aFxuICAgICAgICAgKiBAc2VlIG1heFdpZHRoXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJyZW5kZXJXaWR0aFwiLCBcIlwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJyZW5kZXJXaWR0aFwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleUVsZW1lbnQucHJvdG90eXBlLCBcImluZGVudFwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJbmNyZWFzZXMgb3IgZGVjcmVhc2VzIGFuIGluZGVudCBvZiBzdXJ2ZXkgZWxlbWVudCBjb250ZW50IGZyb20gdGhlIGxlZnQgZWRnZS4gQWNjZXB0cyBwb3NpdGl2ZSBpbnRlZ2VyIHZhbHVlcyBhbmQgMC4gRG9lcyBub3QgYXBwbHkgaW4gdGhlIERlZmF1bHQgVjIgdGhlbWUuXG4gICAgICAgICAqIEBzZWUgcmlnaHRJbmRlbnRcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImluZGVudFwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpbmRlbnRcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlFbGVtZW50LnByb3RvdHlwZSwgXCJyaWdodEluZGVudFwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJbmNyZWFzZXMgb3IgZGVjcmVhc2VzIGFuIGluZGVudCBvZiBzdXJ2ZXkgZWxlbWVudCBjb250ZW50IGZyb20gdGhlIHJpZ2h0IGVkZ2UuIEFjY2VwdHMgcG9zaXRpdmUgaW50ZWdlciB2YWx1ZXMgYW5kIDAuIERvZXMgbm90IGFwcGx5IGluIHRoZSBEZWZhdWx0IFYyIHRoZW1lLlxuICAgICAgICAgKiBAc2VlIGluZGVudFxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicmlnaHRJbmRlbnRcIiwgMCk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicmlnaHRJbmRlbnRcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFN1cnZleUVsZW1lbnQucHJvdG90eXBlLmdldFJvb3RTdHlsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHN0eWxlID0ge307XG4gICAgICAgIGlmICghIXRoaXMucGFkZGluZ0xlZnQpIHtcbiAgICAgICAgICAgIHN0eWxlW1wiLS1zdi1lbGVtZW50LWFkZC1wYWRkaW5nLWxlZnRcIl0gPSB0aGlzLnBhZGRpbmdMZWZ0O1xuICAgICAgICB9XG4gICAgICAgIGlmICghIXRoaXMucGFkZGluZ1JpZ2h0KSB7XG4gICAgICAgICAgICBzdHlsZVtcIi0tc3YtZWxlbWVudC1hZGQtcGFkZGluZy1yaWdodFwiXSA9IHRoaXMucGFkZGluZ1JpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdHlsZTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlFbGVtZW50LnByb3RvdHlwZSwgXCJwYWRkaW5nTGVmdFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInBhZGRpbmdMZWZ0XCIsIFwiXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInBhZGRpbmdMZWZ0XCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5RWxlbWVudC5wcm90b3R5cGUsIFwicGFkZGluZ1JpZ2h0XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicGFkZGluZ1JpZ2h0XCIsIFwiXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInBhZGRpbmdSaWdodFwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleUVsZW1lbnQucHJvdG90eXBlLCBcInJvb3RTdHlsZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHN0eWxlID0ge307XG4gICAgICAgICAgICB2YXIgbWluV2lkdGggPSB0aGlzLnJlbmRlck1pbldpZHRoID8gdGhpcy5taW5XaWR0aCA6IFwibWluKDEwMCUsIFwiICsgdGhpcy5taW5XaWR0aCArIFwiKVwiO1xuICAgICAgICAgICAgaWYgKHRoaXMuYWxsb3dSb290U3R5bGUgJiYgdGhpcy5yZW5kZXJXaWR0aCkge1xuICAgICAgICAgICAgICAgIC8vIHN0eWxlW1wid2lkdGhcIl0gPSB0aGlzLnJlbmRlcldpZHRoO1xuICAgICAgICAgICAgICAgIHN0eWxlW1wiZmxleEdyb3dcIl0gPSAxO1xuICAgICAgICAgICAgICAgIHN0eWxlW1wiZmxleFNocmlua1wiXSA9IDE7XG4gICAgICAgICAgICAgICAgc3R5bGVbXCJmbGV4QmFzaXNcIl0gPSB0aGlzLnJlbmRlcldpZHRoO1xuICAgICAgICAgICAgICAgIHN0eWxlW1wibWluV2lkdGhcIl0gPSBtaW5XaWR0aDtcbiAgICAgICAgICAgICAgICBzdHlsZVtcIm1heFdpZHRoXCJdID0gdGhpcy5tYXhXaWR0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzdHlsZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFN1cnZleUVsZW1lbnQucHJvdG90eXBlLmlzQ29udGFpbnNTZWxlY3Rpb24gPSBmdW5jdGlvbiAoZWwpIHtcbiAgICAgICAgdmFyIGVsZW1lbnRXaXRoU2VsZWN0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAoZG9jdW1lbnRbXCJzZWxlY3Rpb25cIl0pIHtcbiAgICAgICAgICAgIGVsZW1lbnRXaXRoU2VsZWN0aW9uID0gZG9jdW1lbnRbXCJzZWxlY3Rpb25cIl0uY3JlYXRlUmFuZ2UoKS5wYXJlbnRFbGVtZW50KCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgICAgICAgICAgaWYgKHNlbGVjdGlvbi5yYW5nZUNvdW50ID4gMCkge1xuICAgICAgICAgICAgICAgIHZhciByYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApO1xuICAgICAgICAgICAgICAgIGlmIChyYW5nZS5zdGFydE9mZnNldCAhPT0gcmFuZ2UuZW5kT2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRXaXRoU2VsZWN0aW9uID0gcmFuZ2Uuc3RhcnRDb250YWluZXIucGFyZW50Tm9kZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVsZW1lbnRXaXRoU2VsZWN0aW9uID09IGVsO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleUVsZW1lbnQucHJvdG90eXBlLCBcImNsaWNrVGl0bGVGdW5jdGlvblwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgICAgIGlmICh0aGlzLm5lZWRDbGlja1RpdGxlRnVuY3Rpb24oKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEhZXZlbnQgJiYgX3RoaXMuaXNDb250YWluc1NlbGVjdGlvbihldmVudC50YXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLnByb2Nlc3NUaXRsZUNsaWNrKCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBTdXJ2ZXlFbGVtZW50LnByb3RvdHlwZS5uZWVkQ2xpY2tUaXRsZUZ1bmN0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZSAhPT0gXCJkZWZhdWx0XCI7XG4gICAgfTtcbiAgICBTdXJ2ZXlFbGVtZW50LnByb3RvdHlwZS5wcm9jZXNzVGl0bGVDbGljayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUgIT09IFwiZGVmYXVsdFwiKSB7XG4gICAgICAgICAgICB0aGlzLnRvZ2dsZVN0YXRlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlFbGVtZW50LnByb3RvdHlwZSwgXCJhZGRpdGlvbmFsVGl0bGVUb29sYmFyXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRBZGRpdGlvbmFsVGl0bGVUb29sYmFyKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBTdXJ2ZXlFbGVtZW50LnByb3RvdHlwZS5nZXRBZGRpdGlvbmFsVGl0bGVUb29sYmFyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICAgIFN1cnZleUVsZW1lbnQucHJvdG90eXBlLmdldENzc1RpdGxlID0gZnVuY3Rpb24gKGNzc0NsYXNzZXMpIHtcbiAgICAgICAgdmFyIGlzRXhwYW5kYWJsZSA9IHRoaXMuc3RhdGUgIT09IFwiZGVmYXVsdFwiO1xuICAgICAgICB2YXIgbnVtSW5saW5lTGltaXQgPSA0O1xuICAgICAgICByZXR1cm4gbmV3IF91dGlsc19jc3NDbGFzc0J1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1tcIkNzc0NsYXNzQnVpbGRlclwiXSgpXG4gICAgICAgICAgICAuYXBwZW5kKGNzc0NsYXNzZXMudGl0bGUpXG4gICAgICAgICAgICAuYXBwZW5kKGNzc0NsYXNzZXMudGl0bGVOdW1JbmxpbmUsICh0aGlzLm5vIHx8IFwiXCIpLmxlbmd0aCA+IG51bUlubGluZUxpbWl0IHx8IGlzRXhwYW5kYWJsZSlcbiAgICAgICAgICAgIC5hcHBlbmQoY3NzQ2xhc3Nlcy50aXRsZUV4cGFuZGFibGUsIGlzRXhwYW5kYWJsZSlcbiAgICAgICAgICAgIC5hcHBlbmQoY3NzQ2xhc3Nlcy50aXRsZUV4cGFuZGVkLCB0aGlzLmlzRXhwYW5kZWQpXG4gICAgICAgICAgICAuYXBwZW5kKGNzc0NsYXNzZXMudGl0bGVDb2xsYXBzZWQsIHRoaXMuaXNDb2xsYXBzZWQpXG4gICAgICAgICAgICAuYXBwZW5kKGNzc0NsYXNzZXMudGl0bGVEaXNhYmxlZCwgdGhpcy5pc1JlYWRPbmx5KVxuICAgICAgICAgICAgLmFwcGVuZChjc3NDbGFzc2VzLnRpdGxlT25FcnJvciwgdGhpcy5jb250YWluc0Vycm9ycykudG9TdHJpbmcoKTtcbiAgICB9O1xuICAgIFN1cnZleUVsZW1lbnQucHJvdG90eXBlLmxvY2FsZUNoYW5nZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUubG9jYWxlQ2hhbmdlZC5jYWxsKHRoaXMpO1xuICAgICAgICB0aGlzLnVwZGF0ZURlc2NyaXB0aW9uVmlzaWJpbGl0eSh0aGlzLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgaWYgKHRoaXMuZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JzLmZvckVhY2goZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGVyci51cGRhdGVUZXh0KCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3VydmV5RWxlbWVudC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG4gICAgICAgIGlmICh0aGlzLnRpdGxlVG9vbGJhclZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnRpdGxlVG9vbGJhclZhbHVlLmRpc3Bvc2UoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3VydmV5RWxlbWVudC5DcmVhdGVEaXNhYmxlZERlc2lnbkVsZW1lbnRzID0gZmFsc2U7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicHJvcGVydHlcIl0pKHsgZGVmYXVsdFZhbHVlOiBudWxsIH0pXG4gICAgXSwgU3VydmV5RWxlbWVudC5wcm90b3R5cGUsIFwiZHJhZ1R5cGVPdmVyTWVcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJwcm9wZXJ0eVwiXSkoeyBkZWZhdWx0VmFsdWU6IGZhbHNlIH0pXG4gICAgXSwgU3VydmV5RWxlbWVudC5wcm90b3R5cGUsIFwiaXNEcmFnTWVcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJwcm9wZXJ0eVwiXSkoKVxuICAgIF0sIFN1cnZleUVsZW1lbnQucHJvdG90eXBlLCBcImNzc0NsYXNzZXNWYWx1ZVwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QoX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInByb3BlcnR5XCJdKSh7IGRlZmF1bHRWYWx1ZTogZmFsc2UgfSlcbiAgICBdLCBTdXJ2ZXlFbGVtZW50LnByb3RvdHlwZSwgXCJoYXNWaXNpYmxlRXJyb3JzXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicHJvcGVydHlcIl0pKHsgZGVmYXVsdFZhbHVlOiB0cnVlIH0pXG4gICAgXSwgU3VydmV5RWxlbWVudC5wcm90b3R5cGUsIFwiaXNTaW5nbGVJblJvd1wiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QoX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInByb3BlcnR5XCJdKSh7IGRlZmF1bHRWYWx1ZTogdHJ1ZSB9KVxuICAgIF0sIFN1cnZleUVsZW1lbnQucHJvdG90eXBlLCBcImFsbG93Um9vdFN0eWxlXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicHJvcGVydHlcIl0pKHsgZGVmYXVsdFZhbHVlOiB0cnVlIH0pXG4gICAgXSwgU3VydmV5RWxlbWVudC5wcm90b3R5cGUsIFwicmVuZGVyTWluV2lkdGhcIiwgdm9pZCAwKTtcbiAgICByZXR1cm4gU3VydmV5RWxlbWVudDtcbn0oU3VydmV5RWxlbWVudENvcmUpKTtcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3N1cnZleS1lcnJvci50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvc3VydmV5LWVycm9yLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBTdXJ2ZXlFcnJvciAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJTdXJ2ZXlFcnJvclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFN1cnZleUVycm9yOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbG9jYWxpemFibGVzdHJpbmdfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vbG9jYWxpemFibGVzdHJpbmcgKi8gXCIuL3NyYy9sb2NhbGl6YWJsZXN0cmluZy50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc3VydmV5U3RyaW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9zdXJ2ZXlTdHJpbmdzICovIFwiLi9zcmMvc3VydmV5U3RyaW5ncy50c1wiKTtcblxuXG52YXIgU3VydmV5RXJyb3IgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU3VydmV5RXJyb3IodGV4dCwgZXJyb3JPd25lcikge1xuICAgICAgICBpZiAodGV4dCA9PT0gdm9pZCAwKSB7IHRleHQgPSBudWxsOyB9XG4gICAgICAgIGlmIChlcnJvck93bmVyID09PSB2b2lkIDApIHsgZXJyb3JPd25lciA9IG51bGw7IH1cbiAgICAgICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICAgICAgdGhpcy5lcnJvck93bmVyID0gZXJyb3JPd25lcjtcbiAgICAgICAgdGhpcy52aXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5vblVwZGF0ZUVycm9yVGV4dENhbGxiYWNrID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBTdXJ2ZXlFcnJvci5wcm90b3R5cGUuZXF1YWxzVG8gPSBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgaWYgKCFlcnJvciB8fCAhZXJyb3IuZ2V0RXJyb3JUeXBlKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5nZXRFcnJvclR5cGUoKSAhPT0gZXJyb3IuZ2V0RXJyb3JUeXBlKCkpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHQgPT09IGVycm9yLnRleHQgJiYgdGhpcy52aXNpYmxlID09PSBlcnJvci52aXNpYmxlO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleUVycm9yLnByb3RvdHlwZSwgXCJsb2NUZXh0XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMubG9jVGV4dFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2NUZXh0VmFsdWUgPSBuZXcgX2xvY2FsaXphYmxlc3RyaW5nX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJMb2NhbGl6YWJsZVN0cmluZ1wiXSh0aGlzLmVycm9yT3duZXIsIHRydWUpO1xuICAgICAgICAgICAgICAgIHRoaXMubG9jVGV4dFZhbHVlLnN0b3JlRGVmYXVsdFRleHQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMubG9jVGV4dFZhbHVlLnRleHQgPSB0aGlzLmdldFRleHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY1RleHRWYWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFN1cnZleUVycm9yLnByb3RvdHlwZS5nZXRUZXh0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcmVzID0gdGhpcy50ZXh0O1xuICAgICAgICBpZiAoIXJlcylcbiAgICAgICAgICAgIHJlcyA9IHRoaXMuZ2V0RGVmYXVsdFRleHQoKTtcbiAgICAgICAgaWYgKCEhdGhpcy5lcnJvck93bmVyKSB7XG4gICAgICAgICAgICByZXMgPSB0aGlzLmVycm9yT3duZXIuZ2V0RXJyb3JDdXN0b21UZXh0KHJlcywgdGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9O1xuICAgIFN1cnZleUVycm9yLnByb3RvdHlwZS5nZXRFcnJvclR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBcImJhc2VcIjtcbiAgICB9O1xuICAgIFN1cnZleUVycm9yLnByb3RvdHlwZS5nZXREZWZhdWx0VGV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfTtcbiAgICBTdXJ2ZXlFcnJvci5wcm90b3R5cGUuZ2V0TG9jYWxlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLmVycm9yT3duZXIgPyB0aGlzLmVycm9yT3duZXIuZ2V0TG9jYWxlKCkgOiBcIlwiO1xuICAgIH07XG4gICAgU3VydmV5RXJyb3IucHJvdG90eXBlLmdldExvY2FsaXphdGlvblN0cmluZyA9IGZ1bmN0aW9uIChsb2NTdHJOYW1lKSB7XG4gICAgICAgIHJldHVybiBfc3VydmV5U3RyaW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wic3VydmV5TG9jYWxpemF0aW9uXCJdLmdldFN0cmluZyhsb2NTdHJOYW1lLCB0aGlzLmdldExvY2FsZSgpKTtcbiAgICB9O1xuICAgIFN1cnZleUVycm9yLnByb3RvdHlwZS51cGRhdGVUZXh0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5vblVwZGF0ZUVycm9yVGV4dENhbGxiYWNrKSB7XG4gICAgICAgICAgICB0aGlzLm9uVXBkYXRlRXJyb3JUZXh0Q2FsbGJhY2sodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sb2NUZXh0LnRleHQgPSB0aGlzLmdldFRleHQoKTtcbiAgICB9O1xuICAgIHJldHVybiBTdXJ2ZXlFcnJvcjtcbn0oKSk7XG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9zdXJ2ZXktZXZlbnRzLWFwaS50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9zdXJ2ZXktZXZlbnRzLWFwaS50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBubyBleHBvcnRzIHByb3ZpZGVkICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvc3VydmV5LnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9zdXJ2ZXkudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFN1cnZleU1vZGVsICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlN1cnZleU1vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU3VydmV5TW9kZWw7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9oZWxwZXJzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2hlbHBlcnMgKi8gXCIuL3NyYy9oZWxwZXJzLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2pzb25vYmplY3QgKi8gXCIuL3NyYy9qc29ub2JqZWN0LnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9iYXNlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2Jhc2UgKi8gXCIuL3NyYy9iYXNlLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zdXJ2ZXlfZWxlbWVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9zdXJ2ZXktZWxlbWVudCAqLyBcIi4vc3JjL3N1cnZleS1lbGVtZW50LnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9kZWZhdWx0Q3NzX2RlZmF1bHRWMkNzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9kZWZhdWx0Q3NzL2RlZmF1bHRWMkNzcyAqLyBcIi4vc3JjL2RlZmF1bHRDc3MvZGVmYXVsdFYyQ3NzLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF90ZXh0UHJlUHJvY2Vzc29yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3RleHRQcmVQcm9jZXNzb3IgKi8gXCIuL3NyYy90ZXh0UHJlUHJvY2Vzc29yLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9jb25kaXRpb25Qcm9jZXNzVmFsdWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vY29uZGl0aW9uUHJvY2Vzc1ZhbHVlICovIFwiLi9zcmMvY29uZGl0aW9uUHJvY2Vzc1ZhbHVlLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9keFN1cnZleVNlcnZpY2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZHhTdXJ2ZXlTZXJ2aWNlICovIFwiLi9zcmMvZHhTdXJ2ZXlTZXJ2aWNlLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zdXJ2ZXlTdHJpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3N1cnZleVN0cmluZ3MgKi8gXCIuL3NyYy9zdXJ2ZXlTdHJpbmdzLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9lcnJvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9lcnJvciAqLyBcIi4vc3JjL2Vycm9yLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9sb2NhbGl6YWJsZXN0cmluZ19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vbG9jYWxpemFibGVzdHJpbmcgKi8gXCIuL3NyYy9sb2NhbGl6YWJsZXN0cmluZy50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc3R5bGVzbWFuYWdlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vc3R5bGVzbWFuYWdlciAqLyBcIi4vc3JjL3N0eWxlc21hbmFnZXIudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3N1cnZleVRpbWVyTW9kZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3N1cnZleVRpbWVyTW9kZWwgKi8gXCIuL3NyYy9zdXJ2ZXlUaW1lck1vZGVsLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9jb25kaXRpb25zX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9jb25kaXRpb25zICovIFwiLi9zcmMvY29uZGl0aW9ucy50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc2V0dGluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3NldHRpbmdzICovIFwiLi9zcmMvc2V0dGluZ3MudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3V0aWxzX3V0aWxzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi91dGlscy91dGlscyAqLyBcIi4vc3JjL3V0aWxzL3V0aWxzLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9hY3Rpb25zX2FjdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYWN0aW9ucy9hY3Rpb24gKi8gXCIuL3NyYy9hY3Rpb25zL2FjdGlvbi50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYWN0aW9uc19jb250YWluZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE3X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2FjdGlvbnMvY29udGFpbmVyICovIFwiLi9zcmMvYWN0aW9ucy9jb250YWluZXIudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3V0aWxzX2Nzc0NsYXNzQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMThfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vdXRpbHMvY3NzQ2xhc3NCdWlsZGVyICovIFwiLi9zcmMvdXRpbHMvY3NzQ2xhc3NCdWlsZGVyLnRzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub3RpZmllcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vbm90aWZpZXIgKi8gXCIuL3NyYy9ub3RpZmllci50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfY292ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIwX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2NvdmVyICovIFwiLi9zcmMvY292ZXIudHNcIik7XG52YXIgX19leHRlbmRzID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbnZhciBfX2RlY29yYXRlID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn07XG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKipcbiAqIFRoZSBgU3VydmV5TW9kZWxgIG9iamVjdCBjb250YWlucyBwcm9wZXJ0aWVzIGFuZCBtZXRob2RzIHRoYXQgYWxsb3cgeW91IHRvIGNvbnRyb2wgdGhlIHN1cnZleSBhbmQgYWNjZXNzIGl0cyBlbGVtZW50cy5cbiAqXG4gKiBbVmlldyBEZW1vXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9leGFtcGxlcy9ucHMtcXVlc3Rpb24vIChsaW5rU3R5bGUpKVxuICovXG52YXIgU3VydmV5TW9kZWwgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFN1cnZleU1vZGVsLCBfc3VwZXIpO1xuICAgIC8vI2VuZHJlZ2lvblxuICAgIGZ1bmN0aW9uIFN1cnZleU1vZGVsKGpzb25PYmosIHJlbmRlcmVkRWxlbWVudCkge1xuICAgICAgICBpZiAoanNvbk9iaiA9PT0gdm9pZCAwKSB7IGpzb25PYmogPSBudWxsOyB9XG4gICAgICAgIGlmIChyZW5kZXJlZEVsZW1lbnQgPT09IHZvaWQgMCkgeyByZW5kZXJlZEVsZW1lbnQgPSBudWxsOyB9XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLnZhbHVlc0hhc2ggPSB7fTtcbiAgICAgICAgX3RoaXMudmFyaWFibGVzSGFzaCA9IHt9O1xuICAgICAgICBfdGhpcy5vblRoZW1lQXBwbHlpbmcgPSBuZXcgX2Jhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIkV2ZW50QmFzZVwiXSgpO1xuICAgICAgICBfdGhpcy5vblRoZW1lQXBwbGllZCA9IG5ldyBfYmFzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiRXZlbnRCYXNlXCJdKCk7XG4gICAgICAgIC8vI3JlZ2lvbiBFdmVudCBkZWNsYXJhdGlvbnNcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFuIGV2ZW50IHRoYXQgaXMgcmFpc2VkIGFmdGVyIGEgW3RyaWdnZXJdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vYXBpLXJlZmVyZW5jZS9zdXJ2ZXktZGF0YS1tb2RlbCN0cmlnZ2VycykgaXMgZXhlY3V0ZWQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEZvciBpbmZvcm1hdGlvbiBvbiBldmVudCBoYW5kbGVyIHBhcmFtZXRlcnMsIHJlZmVyIHRvIGRlc2NyaXB0aW9ucyB3aXRoaW4gdGhlIGludGVyZmFjZS5cbiAgICAgICAgICpcbiAgICAgICAgICogW0NvbmRpdGlvbmFsIFN1cnZleSBMb2dpYyAoVHJpZ2dlcnMpXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2Rlc2lnbi1zdXJ2ZXkvY29uZGl0aW9uYWwtbG9naWMjY29uZGl0aW9uYWwtc3VydmV5LWxvZ2ljLXRyaWdnZXJzIChsaW5rU3R5bGUpKS5cbiAgICAgICAgICogQHNlZSB0cmlnZ2Vyc1xuICAgICAgICAgKiBAc2VlIHJ1blRyaWdnZXJzXG4gICAgICAgICAqL1xuICAgICAgICBfdGhpcy5vblRyaWdnZXJFeGVjdXRlZCA9IF90aGlzLmFkZEV2ZW50KCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBbiBldmVudCB0aGF0IGlzIHJhaXNlZCBiZWZvcmUgdGhlIHN1cnZleSBpcyBjb21wbGV0ZWQuIFVzZSB0aGlzIGV2ZW50IHRvIHByZXZlbnQgc3VydmV5IGNvbXBsZXRpb24uXG4gICAgICAgICAqIEBzZWUgb25Db21wbGV0ZVxuICAgICAgICAgKiBAc2VlIGRvQ29tcGxldGVcbiAgICAgICAgICogQHNlZSBhbGxvd0NvbXBsZXRlU3VydmV5QXV0b21hdGljXG4gICAgICAgICAqL1xuICAgICAgICBfdGhpcy5vbkNvbXBsZXRpbmcgPSBfdGhpcy5hZGRFdmVudCgpO1xuICAgICAgICAvKipcbiAgICAgICAgICogQW4gZXZlbnQgdGhhdCBpcyByYWlzZWQgYWZ0ZXIgdGhlIHN1cnZleSBpcyBjb21wbGV0ZWQuIFVzZSB0aGlzIGV2ZW50IHRvIHNlbmQgc3VydmV5IHJlc3VsdHMgdG8gdGhlIHNlcnZlci5cbiAgICAgICAgICpcbiAgICAgICAgICogRm9yIGluZm9ybWF0aW9uIG9uIGV2ZW50IGhhbmRsZXIgcGFyYW1ldGVycywgcmVmZXIgdG8gZGVzY3JpcHRpb25zIHdpdGhpbiB0aGUgaW50ZXJmYWNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBGb3IgYW4gZXhhbXBsZSBvZiBob3cgdG8gdXNlIHRoZSBtZXRob2RzIGRlc2NyaWJlZCBhYm92ZSwgcmVmZXIgdG8gdGhlIGZvbGxvd2luZyBoZWxwIHRvcGljOiBbU3RvcmUgU3VydmV5IFJlc3VsdHMgaW4gWW91ciBPd24gRGF0YWJhc2VdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vaGFuZGxlLXN1cnZleS1yZXN1bHRzLXN0b3JlI3N0b3JlLXN1cnZleS1yZXN1bHRzLWluLXlvdXItb3duLWRhdGFiYXNlKS5cbiAgICAgICAgICpcbiAgICAgICAgICogPiBEbyBub3QgZGlzYWJsZSB0aGUgW2BzaG93Q29tcGxldGVkUGFnZWBdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vc3VydmV5bW9kZWwjc2hvd0NvbXBsZXRlZFBhZ2UpIHByb3BlcnR5IGlmIHlvdSBjYWxsIG9uZSBvZiB0aGUgYG9wdGlvbnMuc2hvd1NhdmUuLi5gIG1ldGhvZHMuIFRoaXMgaXMgcmVxdWlyZWQgYmVjYXVzZSB0aGUgVUkgdGhhdCBpbmRpY2F0ZXMgZGF0YSBzYXZpbmcgcHJvZ3Jlc3MgaXMgaW50ZWdyYXRlZCBpbnRvIHRoZSBjb21wbGV0ZSBwYWdlLiBJZiB5b3UgaGlkZSB0aGUgY29tcGxldGUgcGFnZSwgdGhlIFVJIGFsc28gYmVjb21lcyBpbnZpc2libGUuXG4gICAgICAgICAqIEBzZWUgb25QYXJ0aWFsU2VuZFxuICAgICAgICAgKiBAc2VlIGRvQ29tcGxldGVcbiAgICAgICAgICogQHNlZSBhbGxvd0NvbXBsZXRlU3VydmV5QXV0b21hdGljXG4gICAgICAgICAqL1xuICAgICAgICBfdGhpcy5vbkNvbXBsZXRlID0gX3RoaXMuYWRkRXZlbnQoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFuIGV2ZW50IHRoYXQgaXMgcmFpc2VkIGJlZm9yZSB0aGUgc3VydmV5IGRpc3BsYXlzIGEgW3ByZXZpZXcgb2YgZ2l2ZW4gYW5zd2Vyc10oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9kZXNpZ24tc3VydmV5L2NyZWF0ZS1hLW11bHRpLXBhZ2Utc3VydmV5I3ByZXZpZXctcGFnZSkuIFVzZSB0aGlzIGV2ZW50IHRvIGNhbmNlbCB0aGUgcHJldmlldy5cbiAgICAgICAgICogQHNlZSBzaG93UHJldmlld0JlZm9yZUNvbXBsZXRlXG4gICAgICAgICAqIEBzZWUgc2hvd1ByZXZpZXdcbiAgICAgICAgICogQHNlZSBjYW5jZWxQcmV2aWV3XG4gICAgICAgICAqL1xuICAgICAgICBfdGhpcy5vblNob3dpbmdQcmV2aWV3ID0gX3RoaXMuYWRkRXZlbnQoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFuIGV2ZW50IHRoYXQgaXMgcmFpc2VkIGJlZm9yZSB0aGUgc3VydmV5IG5hdmlnYXRlcyB0byBhIHNwZWNpZmllZCBVUkwuIFVzZSB0aGlzIGV2ZW50IHRvIGNoYW5nZSB0aGUgVVJMIG9yIGNhbmNlbCB0aGUgbmF2aWdhdGlvbi5cbiAgICAgICAgICogQHNlZSBuYXZpZ2F0ZVRvVXJsXG4gICAgICAgICAqIEBzZWUgbmF2aWdhdGVUb1VybE9uQ29uZGl0aW9uXG4gICAgICAgICAqL1xuICAgICAgICBfdGhpcy5vbk5hdmlnYXRlVG9VcmwgPSBfdGhpcy5hZGRFdmVudCgpO1xuICAgICAgICAvKipcbiAgICAgICAgICogQW4gZXZlbnQgdGhhdCBpcyByYWlzZWQgd2hlbiB0aGUgc3VydmV5IFtgc3RhdGVgXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2Uvc3VydmV5LWRhdGEtbW9kZWwjc3RhdGUpIGNoYW5nZXMgdG8gYFwicnVubmluZ1wiYC5cbiAgICAgICAgICogQHNlZSBmaXJzdFBhZ2VJc1N0YXJ0ZWRcbiAgICAgICAgICovXG4gICAgICAgIF90aGlzLm9uU3RhcnRlZCA9IF90aGlzLmFkZEV2ZW50KCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBbiBldmVudCB0aGF0IGlzIHJhaXNlZCB0byBzYXZlIGluY29tcGxldGUgc3VydmV5IHJlc3VsdHMuIEVuYWJsZSB0aGUgW2BzZW5kUmVzdWx0T25QYWdlTmV4dGBdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vYXBpLXJlZmVyZW5jZS9zdXJ2ZXktZGF0YS1tb2RlbCNzZW5kUmVzdWx0T25QYWdlTmV4dCkgcHJvcGVydHkgZm9yIHRoaXMgZXZlbnQgdG8gb2NjdXIuXG4gICAgICAgICAqXG4gICAgICAgICAqIEZvciBpbmZvcm1hdGlvbiBvbiBldmVudCBoYW5kbGVyIHBhcmFtZXRlcnMsIHJlZmVyIHRvIGRlc2NyaXB0aW9ucyB3aXRoaW4gdGhlIGludGVyZmFjZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBoYW5kbGUgdGhlIFtgb25DdXJyZW50UGFnZUNoYW5nZWRgXSgjb25DdXJyZW50UGFnZUNoYW5nZWQpIGFuZCBbYG9uVmFsdWVDaGFuZ2VkYF0oI29uVmFsdWVDaGFuZ2VkKSBldmVudHMsIGFzIHNob3duIGluIHRoZSBmb2xsb3dpbmcgZGVtbzogW0NvbnRpbnVlIGFuIEluY29tcGxldGUgU3VydmV5XShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9leGFtcGxlcy9zdXJ2ZXktZWRpdHByZXZpb3VzLykuXG4gICAgICAgICAqL1xuICAgICAgICBfdGhpcy5vblBhcnRpYWxTZW5kID0gX3RoaXMuYWRkRXZlbnQoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFuIGV2ZW50IHRoYXQgaXMgcmFpc2VkIGJlZm9yZSB0aGUgY3VycmVudCBwYWdlIGlzIHN3aXRjaGVkLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc2VlIGN1cnJlbnRQYWdlTm9cbiAgICAgICAgICogQHNlZSBuZXh0UGFnZVxuICAgICAgICAgKiBAc2VlIHByZXZQYWdlXG4gICAgICAgICAqKi9cbiAgICAgICAgX3RoaXMub25DdXJyZW50UGFnZUNoYW5naW5nID0gX3RoaXMuYWRkRXZlbnQoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFuIGV2ZW50IHRoYXQgaXMgcmFpc2VkIGFmdGVyIHRoZSBjdXJyZW50IHBhZ2UgaXMgc3dpdGNoZWQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzZWUgY3VycmVudFBhZ2VOb1xuICAgICAgICAgKiBAc2VlIG5leHRQYWdlXG4gICAgICAgICAqIEBzZWUgcHJldlBhZ2VcbiAgICAgICAgICovXG4gICAgICAgIF90aGlzLm9uQ3VycmVudFBhZ2VDaGFuZ2VkID0gX3RoaXMuYWRkRXZlbnQoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFuIGV2ZW50IHRoYXQgaXMgcmFpc2VkIGJlZm9yZSBhIHF1ZXN0aW9uIHZhbHVlIGlzIGNoYW5nZWQuXG4gICAgICAgICAqIEBzZWUgc2V0VmFsdWVcbiAgICAgICAgICovXG4gICAgICAgIF90aGlzLm9uVmFsdWVDaGFuZ2luZyA9IF90aGlzLmFkZEV2ZW50KCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBbiBldmVudCB0aGF0IGlzIHJhaXNlZCBhZnRlciBhIHF1ZXN0aW9uIHZhbHVlIGlzIGNoYW5nZWQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEZvciBpbmZvcm1hdGlvbiBvbiBldmVudCBoYW5kbGVyIHBhcmFtZXRlcnMsIHJlZmVyIHRvIGRlc2NyaXB0aW9ucyB3aXRoaW4gdGhlIGludGVyZmFjZS5cbiAgICAgICAgICpcbiAgICAgICAgICogVG8gaGFuZGxlIHZhbHVlIGNoYW5nZXMgaW4gbWF0cml4IGNlbGxzIG9yIHBhbmVscyB3aXRoaW4gYSBbRHluYW1pYyBQYW5lbF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL2R5bmFtaWMtcGFuZWwtbW9kZWwpLCB1c2UgdGhlIFtgb25NYXRyaXhDZWxsVmFsdWVDaGFuZ2VkYF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL3N1cnZleS1kYXRhLW1vZGVsI29uTWF0cml4Q2VsbFZhbHVlQ2hhbmdlZCkgb3IgW2BvbkR5bmFtaWNQYW5lbEl0ZW1WYWx1ZUNoYW5nZWRgXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2Uvc3VydmV5LWRhdGEtbW9kZWwjb25EeW5hbWljUGFuZWxJdGVtVmFsdWVDaGFuZ2VkKSBldmVudC5cbiAgICAgICAgICogQHNlZSBzZXRWYWx1ZVxuICAgICAgICAgKi9cbiAgICAgICAgX3RoaXMub25WYWx1ZUNoYW5nZWQgPSBfdGhpcy5hZGRFdmVudCgpO1xuICAgICAgICAvKipcbiAgICAgICAgICogQW4gZXZlbnQgdGhhdCBpcyByYWlzZWQgYWZ0ZXIgYSBbdmFyaWFibGVdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vZGVzaWduLXN1cnZleS9jb25kaXRpb25hbC1sb2dpYyN2YXJpYWJsZXMpIG9yIFtjYWxjdWxhdGVkIHZhbHVlXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2Rlc2lnbi1zdXJ2ZXkvY29uZGl0aW9uYWwtbG9naWMjY2FsY3VsYXRlZC12YWx1ZXMpIGlzIGNoYW5nZWQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzZWUgc2V0VmFyaWFibGVcbiAgICAgICAgICogQHNlZSBjYWxjdWxhdGVkVmFsdWVzXG4gICAgICAgICAqL1xuICAgICAgICBfdGhpcy5vblZhcmlhYmxlQ2hhbmdlZCA9IF90aGlzLmFkZEV2ZW50KCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBbiBldmVudCB0aGF0IGlzIHJhaXNlZCBhZnRlciBxdWVzdGlvbiB2aXNpYmlsaXR5IGlzIGNoYW5nZWQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEZvciBpbmZvcm1hdGlvbiBvbiBldmVudCBoYW5kbGVyIHBhcmFtZXRlcnMsIHJlZmVyIHRvIGRlc2NyaXB0aW9ucyB3aXRoaW4gdGhlIGludGVyZmFjZS5cbiAgICAgICAgICpcbiAgICAgICAgICogUmVmZXIgdG8gdGhlIGZvbGxvd2luZyBoZWxwIHRvcGljIGZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gaW1wbGVtZW50IGNvbmRpdGlvbmFsIHZpc2liaWxpdHk6IFtDb25kaXRpb25hbCBWaXNpYmlsaXR5XShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2Rlc2lnbi1zdXJ2ZXkvY29uZGl0aW9uYWwtbG9naWMjY29uZGl0aW9uYWwtdmlzaWJpbGl0eSkuXG4gICAgICAgICAqL1xuICAgICAgICBfdGhpcy5vblF1ZXN0aW9uVmlzaWJsZUNoYW5nZWQgPSBfdGhpcy5hZGRFdmVudCgpO1xuICAgICAgICBfdGhpcy5vblZpc2libGVDaGFuZ2VkID0gX3RoaXMub25RdWVzdGlvblZpc2libGVDaGFuZ2VkO1xuICAgICAgICAvKipcbiAgICAgICAgICogQW4gZXZlbnQgdGhhdCBpcyByYWlzZWQgYWZ0ZXIgcGFnZSB2aXNpYmlsaXR5IGlzIGNoYW5nZWQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEZvciBpbmZvcm1hdGlvbiBvbiBldmVudCBoYW5kbGVyIHBhcmFtZXRlcnMsIHJlZmVyIHRvIGRlc2NyaXB0aW9ucyB3aXRoaW4gdGhlIGludGVyZmFjZS5cbiAgICAgICAgICpcbiAgICAgICAgICogUmVmZXIgdG8gdGhlIGZvbGxvd2luZyBoZWxwIHRvcGljIGZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gaW1wbGVtZW50IGNvbmRpdGlvbmFsIHZpc2liaWxpdHk6IFtDb25kaXRpb25hbCBWaXNpYmlsaXR5XShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2Rlc2lnbi1zdXJ2ZXkvY29uZGl0aW9uYWwtbG9naWMjY29uZGl0aW9uYWwtdmlzaWJpbGl0eSkuXG4gICAgICAgICAqL1xuICAgICAgICBfdGhpcy5vblBhZ2VWaXNpYmxlQ2hhbmdlZCA9IF90aGlzLmFkZEV2ZW50KCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBbiBldmVudCB0aGF0IGlzIHJhaXNlZCBhZnRlciBwYWdlIHZpc2liaWxpdHkgaXMgY2hhbmdlZC5cbiAgICAgICAgICpcbiAgICAgICAgICogRm9yIGluZm9ybWF0aW9uIG9uIGV2ZW50IGhhbmRsZXIgcGFyYW1ldGVycywgcmVmZXIgdG8gZGVzY3JpcHRpb25zIHdpdGhpbiB0aGUgaW50ZXJmYWNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBSZWZlciB0byB0aGUgZm9sbG93aW5nIGhlbHAgdG9waWMgZm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBpbXBsZW1lbnQgY29uZGl0aW9uYWwgdmlzaWJpbGl0eTogW0NvbmRpdGlvbmFsIFZpc2liaWxpdHldKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vZGVzaWduLXN1cnZleS9jb25kaXRpb25hbC1sb2dpYyNjb25kaXRpb25hbC12aXNpYmlsaXR5KS5cbiAgICAgICAgICovXG4gICAgICAgIF90aGlzLm9uUGFuZWxWaXNpYmxlQ2hhbmdlZCA9IF90aGlzLmFkZEV2ZW50KCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBbiBldmVudCB0aGF0IGlzIHJhaXNlZCB3aGVuIHRoZSBzdXJ2ZXkgY3JlYXRlcyBhbnkgbmV3IG9iamVjdCBkZXJpdmVkIGZyb20gW2BRdWVzdGlvbmBdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vYXBpLXJlZmVyZW5jZS9xdWVzdGlvbikuXG4gICAgICAgICAqXG4gICAgICAgICAqIEluIGEgc3VydmV5LCBjb21wbGV4IGVsZW1lbnRzIChbRHluYW1pYyBNYXRyaXhdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2V4YW1wbGVzL3F1ZXN0aW9udHlwZS1tYXRyaXhkeW5hbWljLyksIFtNdWx0aXBsZSBUZXh0XShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9leGFtcGxlcy9xdWVzdGlvbnR5cGUtbXVsdGlwbGV0ZXh0LyksIGFuZCBbRHluYW1pYyBQYW5lbF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZXhhbXBsZXMvcXVlc3Rpb250eXBlLXBhbmVsZHluYW1pYy8pKSBhcmUgY29tcG9zZWQgb2YgcXVlc3Rpb25zLiBVc2UgdGhpcyBldmVudCB0byBjdXN0b21pemUgYW55IHF1ZXN0aW9uIHJlZ2FyZGxlc3Mgb2Ygd2hpY2ggc3VydmV5IGVsZW1lbnQgaXQgYmVsb25ncyB0by5cbiAgICAgICAgICpcbiAgICAgICAgICogRm9yIGluZm9ybWF0aW9uIG9uIGV2ZW50IGhhbmRsZXIgcGFyYW1ldGVycywgcmVmZXIgdG8gZGVzY3JpcHRpb25zIHdpdGhpbiB0aGUgaW50ZXJmYWNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBUbyB1c2UgdGhpcyBldmVudCBmb3IgcXVlc3Rpb25zIGxvYWRlZCBmcm9tIEpTT04sIGNyZWF0ZSBhbiBlbXB0eSBzdXJ2ZXkgbW9kZWwsIGFkZCBhbiBldmVudCBoYW5kbGVyLCBhbmQgb25seSB0aGVuIHBvcHVsYXRlIHRoZSBtb2RlbCBmcm9tIHRoZSBKU09OIG9iamVjdDpcbiAgICAgICAgICpcbiAgICAgICAgICogYGBganNcbiAgICAgICAgICogaW1wb3J0IHsgTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbiAgICAgICAgICpcbiAgICAgICAgICogY29uc3Qgc3VydmV5SnNvbiA9IHtcbiAgICAgICAgICogICAgLy8gLi4uXG4gICAgICAgICAqIH07XG4gICAgICAgICAqIC8vIENyZWF0ZSBhbiBlbXB0eSBtb2RlbFxuICAgICAgICAgKiBjb25zdCBzdXJ2ZXkgPSBuZXcgTW9kZWwoKTtcbiAgICAgICAgICogLy8gQWRkIGFuIGV2ZW50IGhhbmRsZXJcbiAgICAgICAgICogc3VydmV5Lm9uUXVlc3Rpb25DcmVhdGVkLmFkZCgoc2VuZGVyLCBvcHRpb25zKSA9PiB7XG4gICAgICAgICAqICAgLy8uLi5cbiAgICAgICAgICogfSk7XG4gICAgICAgICAqIC8vIExvYWQgdGhlIHN1cnZleSBKU09OIHNjaGVtYVxuICAgICAgICAgKiBzdXJ2ZXkuZnJvbUpTT04oc3VydmV5SnNvbik7XG4gICAgICAgICAqIGBgYFxuICAgICAgICAgKiBAc2VlIG9uUXVlc3Rpb25BZGRlZFxuICAgICAgICAgKi9cbiAgICAgICAgX3RoaXMub25RdWVzdGlvbkNyZWF0ZWQgPSBfdGhpcy5hZGRFdmVudCgpO1xuICAgICAgICAvKipcbiAgICAgICAgICogQW4gZXZlbnQgdGhhdCBpcyByYWlzZWQgd2hlbiBhIG5ldyBxdWVzdGlvbiBpcyBhZGRlZCB0byBhIHBhbmVsIG9yIHBhZ2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEZvciBpbmZvcm1hdGlvbiBvbiBldmVudCBoYW5kbGVyIHBhcmFtZXRlcnMsIHJlZmVyIHRvIGRlc2NyaXB0aW9ucyB3aXRoaW4gdGhlIGludGVyZmFjZS5cbiAgICAgICAgICpcbiAgICAgICAgICogVG8gdXNlIHRoaXMgZXZlbnQgZm9yIHF1ZXN0aW9ucyBsb2FkZWQgZnJvbSBKU09OLCBjcmVhdGUgYW4gZW1wdHkgc3VydmV5IG1vZGVsLCBhZGQgYW4gZXZlbnQgaGFuZGxlciwgYW5kIG9ubHkgdGhlbiBwb3B1bGF0ZSB0aGUgbW9kZWwgZnJvbSB0aGUgSlNPTiBvYmplY3Q6XG4gICAgICAgICAqXG4gICAgICAgICAqIGBgYGpzXG4gICAgICAgICAqIGltcG9ydCB7IE1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG4gICAgICAgICAqXG4gICAgICAgICAqIGNvbnN0IHN1cnZleUpzb24gPSB7XG4gICAgICAgICAqICAgIC8vIC4uLlxuICAgICAgICAgKiB9O1xuICAgICAgICAgKiAvLyBDcmVhdGUgYW4gZW1wdHkgbW9kZWxcbiAgICAgICAgICogY29uc3Qgc3VydmV5ID0gbmV3IE1vZGVsKCk7XG4gICAgICAgICAqIC8vIEFkZCBhbiBldmVudCBoYW5kbGVyXG4gICAgICAgICAqIHN1cnZleS5vblF1ZXN0aW9uQWRkZWQuYWRkKChzZW5kZXIsIG9wdGlvbnMpID0+IHtcbiAgICAgICAgICogICAvLy4uLlxuICAgICAgICAgKiB9KTtcbiAgICAgICAgICogLy8gTG9hZCB0aGUgc3VydmV5IEpTT04gc2NoZW1hXG4gICAgICAgICAqIHN1cnZleS5mcm9tSlNPTihzdXJ2ZXlKc29uKTtcbiAgICAgICAgICogYGBgXG4gICAgICAgICAqIEBzZWUgb25RdWVzdGlvbkNyZWF0ZWRcbiAgICAgICAgICovXG4gICAgICAgIF90aGlzLm9uUXVlc3Rpb25BZGRlZCA9IF90aGlzLmFkZEV2ZW50KCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBbiBldmVudCB0aGF0IGlzIHJhaXNlZCBhZnRlciBhIHF1ZXN0aW9uIGlzIGRlbGV0ZWQgZnJvbSB0aGUgc3VydmV5LlxuICAgICAgICAgKi9cbiAgICAgICAgX3RoaXMub25RdWVzdGlvblJlbW92ZWQgPSBfdGhpcy5hZGRFdmVudCgpO1xuICAgICAgICAvKipcbiAgICAgICAgICogQW4gZXZlbnQgdGhhdCBpcyByYWlzZWQgd2hlbiBhIG5ldyBwYW5lbCBpcyBhZGRlZCB0byBhIHBhZ2UuXG4gICAgICAgICAqL1xuICAgICAgICBfdGhpcy5vblBhbmVsQWRkZWQgPSBfdGhpcy5hZGRFdmVudCgpO1xuICAgICAgICAvKipcbiAgICAgICAgICogQW4gZXZlbnQgdGhhdCBpcyByYWlzZWQgYWZ0ZXIgYSBwYW5lbCBpcyBkZWxldGVkIGZyb20gdGhlIHN1cnZleS5cbiAgICAgICAgICovXG4gICAgICAgIF90aGlzLm9uUGFuZWxSZW1vdmVkID0gX3RoaXMuYWRkRXZlbnQoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFuIGV2ZW50IHRoYXQgaXMgcmFpc2VkIHdoZW4gYSBuZXcgcGFnZSBpcyBhZGRlZCB0byB0aGUgc3VydmV5LlxuICAgICAgICAgKiBAc2VlIFBhbmVsTW9kZWxcbiAgICAgICAgICovXG4gICAgICAgIF90aGlzLm9uUGFnZUFkZGVkID0gX3RoaXMuYWRkRXZlbnQoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFuIGV2ZW50IHRoYXQgaXMgcmFpc2VkIHdoZW4gYSBxdWVzdGlvbiB2YWx1ZSBpcyBiZWluZyB2YWxpZGF0ZWQuIFVzZSB0aGlzIGV2ZW50IHRvIHNwZWNpZnkgYSBjdXN0b20gZXJyb3IgbWVzc2FnZS5cbiAgICAgICAgICpcbiAgICAgICAgICogRm9yIGluZm9ybWF0aW9uIG9uIGV2ZW50IGhhbmRsZXIgcGFyYW1ldGVycywgcmVmZXIgdG8gZGVzY3JpcHRpb25zIHdpdGhpbiB0aGUgaW50ZXJmYWNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBbVmlldyBEZW1vXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9leGFtcGxlcy9hZGQtY3VzdG9tLWlucHV0LXZhbGlkYXRpb24vIChsaW5rU3R5bGUpKVxuICAgICAgICAgKiBAc2VlIG9uU2VydmVyVmFsaWRhdGVRdWVzdGlvbnNcbiAgICAgICAgICogQHNlZSBvblZhbGlkYXRlUGFuZWxcbiAgICAgICAgICogQHNlZSBvbk1hdHJpeENlbGxWYWxpZGF0ZVxuICAgICAgICAgKiBAc2VlIG9uU2V0dGluZ1F1ZXN0aW9uRXJyb3JzXG4gICAgICAgICAqL1xuICAgICAgICBfdGhpcy5vblZhbGlkYXRlUXVlc3Rpb24gPSBfdGhpcy5hZGRFdmVudCgpO1xuICAgICAgICAvKipcbiAgICAgICAgICogQW4gZXZlbnQgdGhhdCBpcyByYWlzZWQgYmVmb3JlIGVycm9ycyBhcmUgYXNzaWduZWQgdG8gYSBxdWVzdGlvbi4gVXNlIHRoaXMgZXZlbnQgdG8gYWRkL3JlbW92ZS9tb2RpZnkgZXJyb3JzLlxuICAgICAgICAgKiBAc2VlIG9uVmFsaWRhdGVRdWVzdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgX3RoaXMub25TZXR0aW5nUXVlc3Rpb25FcnJvcnMgPSBfdGhpcy5hZGRFdmVudCgpO1xuICAgICAgICAvKipcbiAgICAgICAgICogVXNlIHRoaXMgZXZlbnQgdG8gdmFsaWRhdGUgZGF0YSBvbiB5b3VyIHNlcnZlci5cbiAgICAgICAgICpcbiAgICAgICAgICogRm9yIGluZm9ybWF0aW9uIG9uIGV2ZW50IGhhbmRsZXIgcGFyYW1ldGVycywgcmVmZXIgdG8gZGVzY3JpcHRpb25zIHdpdGhpbiB0aGUgaW50ZXJmYWNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBbVmlldyBEZW1vXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9leGFtcGxlcy9qYXZhc2NyaXB0LXNlcnZlci1zaWRlLWZvcm0tdmFsaWRhdGlvbi8gKGxpbmtTdHlsZSkpXG4gICAgICAgICAqIEBzZWUgb25WYWxpZGF0ZVF1ZXN0aW9uXG4gICAgICAgICAqIEBzZWUgb25WYWxpZGF0ZVBhbmVsXG4gICAgICAgICAqIEBzZWUgaXNWYWxpZGF0aW5nT25TZXJ2ZXJcbiAgICAgICAgICovXG4gICAgICAgIF90aGlzLm9uU2VydmVyVmFsaWRhdGVRdWVzdGlvbnMgPSBfdGhpcy5hZGRFdmVudCgpO1xuICAgICAgICAvKipcbiAgICAgICAgICogQW4gZXZlbnQgdGhhdCBpcyByYWlzZWQgd2hlbiBhIHBhbmVsIGlzIGJlaW5nIHZhbGlkYXRlZC4gVXNlIHRoaXMgZXZlbnQgdG8gc3BlY2lmeSBhIGN1c3RvbSBlcnJvciBtZXNzYWdlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBGb3IgaW5mb3JtYXRpb24gb24gZXZlbnQgaGFuZGxlciBwYXJhbWV0ZXJzLCByZWZlciB0byBkZXNjcmlwdGlvbnMgd2l0aGluIHRoZSBpbnRlcmZhY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIFtWaWV3IERlbW9dKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2V4YW1wbGVzL2FkZC1jdXN0b20taW5wdXQtdmFsaWRhdGlvbi8gKGxpbmtTdHlsZSkpXG4gICAgICAgICAqIEBzZWUgb25WYWxpZGF0ZVF1ZXN0aW9uXG4gICAgICAgICAqIEBzZWUgb25TZXJ2ZXJWYWxpZGF0ZVF1ZXN0aW9uc1xuICAgICAgICAgKi9cbiAgICAgICAgX3RoaXMub25WYWxpZGF0ZVBhbmVsID0gX3RoaXMuYWRkRXZlbnQoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFuIGV2ZW50IHRoYXQgaXMgcmFpc2VkIHRvIGNoYW5nZSBkZWZhdWx0IGVycm9yIG1lc3NhZ2VzLlxuICAgICAgICAgKi9cbiAgICAgICAgX3RoaXMub25FcnJvckN1c3RvbVRleHQgPSBfdGhpcy5hZGRFdmVudCgpO1xuICAgICAgICAvKipcbiAgICAgICAgICogQW4gZXZlbnQgdGhhdCBpcyByYWlzZWQgd2hlbiB0aGUgW2N1cnJlbnQgcGFnZV0oI2N1cnJlbnRQYWdlKSBpcyBiZWluZyB2YWxpZGF0ZWQuIEhhbmRsZSB0aGlzIGV2ZW50IHRvIGJlIG5vdGlmaWVkIG9mIGN1cnJlbnQgcGFnZSB2YWxpZGF0aW9uLlxuICAgICAgICAgKi9cbiAgICAgICAgX3RoaXMub25WYWxpZGF0ZWRFcnJvcnNPbkN1cnJlbnRQYWdlID0gX3RoaXMuYWRkRXZlbnQoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFuIGV2ZW50IHRoYXQgaXMgcmFpc2VkIHdoZW4gdGhlIHN1cnZleSBwcm9jZXNzZXMgSFRNTCBjb250ZW50LiBIYW5kbGUgdGhpcyBldmVudCB0byBtb2RpZnkgSFRNTCBjb250ZW50IGJlZm9yZSBkaXNwbGF5aW5nLlxuICAgICAgICAgKiBAc2VlIGNvbXBsZXRlZEh0bWxcbiAgICAgICAgICogQHNlZSBsb2FkaW5nSHRtbFxuICAgICAgICAgKiBAc2VlIFF1ZXN0aW9uSHRtbE1vZGVsLmh0bWxcbiAgICAgICAgICovXG4gICAgICAgIF90aGlzLm9uUHJvY2Vzc0h0bWwgPSBfdGhpcy5hZGRFdmVudCgpO1xuICAgICAgICAvKipcbiAgICAgICAgICogVXNlIHRoaXMgZXZlbnQgdG8gY2hhbmdlIGEgcXVlc3Rpb24ncyBkaXNwbGF5IHRleHQuXG4gICAgICAgICAqL1xuICAgICAgICBfdGhpcy5vbkdldFF1ZXN0aW9uRGlzcGxheVZhbHVlID0gX3RoaXMuYWRkRXZlbnQoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFuIGV2ZW50IHRoYXQgaXMgcmFpc2VkIGJlZm9yZSB0aGUgc3VydmV5IGRpc3BsYXlzIGEgcXVlc3Rpb24gdGl0bGUuIEhhbmRsZSB0aGlzIGV2ZW50IHRvIG1vZGlmeSBxdWVzdGlvbiB0aXRsZXMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEZvciBpbmZvcm1hdGlvbiBvbiBldmVudCBoYW5kbGVyIHBhcmFtZXRlcnMsIHJlZmVyIHRvIGRlc2NyaXB0aW9ucyB3aXRoaW4gdGhlIGludGVyZmFjZS5cbiAgICAgICAgICpcbiAgICAgICAgICogSWYgeW91IHdhbnQgdG8gbW9kaWZ5IHF1ZXN0aW9uIG51bWJlcnMsIGhhbmRsZSB0aGUgW2BvbkdldFF1ZXN0aW9uTm9gXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2Uvc3VydmV5LWRhdGEtbW9kZWwjb25HZXRRdWVzdGlvbk5vKSBldmVudC5cbiAgICAgICAgICogQHNlZSByZXF1aXJlZFRleHRcbiAgICAgICAgICovXG4gICAgICAgIF90aGlzLm9uR2V0UXVlc3Rpb25UaXRsZSA9IF90aGlzLmFkZEV2ZW50KCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBbiBldmVudCB0aGF0IGlzIHJhaXNlZCB3aGVuIHRoZSBzdXJ2ZXkgY2FsY3VsYXRlcyBoZWFkaW5nIGxldmVscyAoYDxoMT5gLCBgPGgyPmAsIGV0Yy4pIGZvciBhIHN1cnZleSwgcGFnZSwgcGFuZWwsIGFuZCBxdWVzdGlvbiB0aXRsZS4gSGFuZGxlIHRoaXMgZXZlbnQgdG8gY2hhbmdlIHRoZSBoZWFkaW5nIGxldmVsIG9mIGluZGl2aWR1YWwgdGl0bGVzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBGb3IgaW5mb3JtYXRpb24gb24gZXZlbnQgaGFuZGxlciBwYXJhbWV0ZXJzLCByZWZlciB0byBkZXNjcmlwdGlvbnMgd2l0aGluIHRoZSBpbnRlcmZhY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIElmIHlvdSB3YW50IHRvIHNwZWNpZnkgaGVhZGluZyBsZXZlbHMgZm9yIGFsbCB0aXRsZXMsIHVzZSB0aGUgW2B0aXRsZVRhZ3NgXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2Uvc2V0dGluZ3MjdGl0bGVUYWdzKSBvYmplY3QgaW4gW2dsb2JhbCBzZXR0aW5nc10oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL3NldHRpbmdzKS5cbiAgICAgICAgICogQHNlZSBvbkdldFF1ZXN0aW9uVGl0bGVcbiAgICAgICAgICogQHNlZSBvbkdldFF1ZXN0aW9uTm9cbiAgICAgICAgICovXG4gICAgICAgIF90aGlzLm9uR2V0VGl0bGVUYWdOYW1lID0gX3RoaXMuYWRkRXZlbnQoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFuIGV2ZW50IHRoYXQgaXMgcmFpc2VkIGJlZm9yZSB0aGUgc3VydmV5IGNhbGN1bGF0ZXMgYSBxdWVzdGlvbiBudW1iZXIuIEhhbmRsZSB0aGlzIGV2ZW50IHRvIG1vZGlmeSBxdWVzdGlvbiBudW1iZXJzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBGb3IgaW5mb3JtYXRpb24gb24gZXZlbnQgaGFuZGxlciBwYXJhbWV0ZXJzLCByZWZlciB0byBkZXNjcmlwdGlvbnMgd2l0aGluIHRoZSBpbnRlcmZhY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIElmIHlvdSB3YW50IHRvIGhpZGUgcXVlc3Rpb24gbnVtYmVycywgZGlzYWJsZSB0aGUgW2BzaG93UXVlc3Rpb25OdW1iZXJzYF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL3N1cnZleS1kYXRhLW1vZGVsI3Nob3dRdWVzdGlvbk51bWJlcnMpIHByb3BlcnR5LlxuICAgICAgICAgKiBAc2VlIG9uR2V0UXVlc3Rpb25UaXRsZVxuICAgICAgICAgKiBAc2VlIHF1ZXN0aW9uU3RhcnRJbmRleFxuICAgICAgICAgKi9cbiAgICAgICAgX3RoaXMub25HZXRRdWVzdGlvbk5vID0gX3RoaXMuYWRkRXZlbnQoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFuIGV2ZW50IHRoYXQgaXMgcmFpc2VkIGJlZm9yZSB0aGUgc3VydmV5IGRpc3BsYXlzIHByb2dyZXNzIHRleHQuIEhhbmRsZSB0aGlzIGV2ZW50IHRvIGNoYW5nZSB0aGUgcHJvZ3Jlc3MgdGV4dCBpbiBjb2RlLlxuICAgICAgICAgKiBAc2VlIHNob3dQcm9ncmVzc0JhclxuICAgICAgICAgKiBAc2VlIHByb2dyZXNzQmFyVHlwZVxuICAgICAgICAgKi9cbiAgICAgICAgX3RoaXMub25Qcm9ncmVzc1RleHQgPSBfdGhpcy5hZGRFdmVudCgpO1xuICAgICAgICAvKipcbiAgICAgICAgICogQW4gZXZlbnQgdGhhdCBpcyByYWlzZWQgdG8gY29udmVydCBNYXJrZG93biBjb250ZW50IHRvIEhUTUwuXG4gICAgICAgICAqXG4gICAgICAgICAqIEZvciBpbmZvcm1hdGlvbiBvbiBldmVudCBoYW5kbGVyIHBhcmFtZXRlcnMsIHJlZmVyIHRvIGRlc2NyaXB0aW9ucyB3aXRoaW4gdGhlIGludGVyZmFjZS5cbiAgICAgICAgICpcbiAgICAgICAgICogW1ZpZXcgRGVtb10oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZXhhbXBsZXMvZWRpdC1zdXJ2ZXktcXVlc3Rpb25zLW1hcmtkb3duLyAobGlua1N0eWxlKSlcbiAgICAgICAgICovXG4gICAgICAgIF90aGlzLm9uVGV4dE1hcmtkb3duID0gX3RoaXMuYWRkRXZlbnQoKTtcbiAgICAgICAgX3RoaXMub25UZXh0UmVuZGVyQXMgPSBfdGhpcy5hZGRFdmVudCgpO1xuICAgICAgICAvKipcbiAgICAgICAgICogQW4gZXZlbnQgdGhhdCBpcyByYWlzZWQgYWZ0ZXIgYSByZXF1ZXN0IHRvIHNhdmUgc3VydmV5IHJlc3VsdHMgb24gW1N1cnZleUpTIFNlcnZpY2VdKGh0dHBzOi8vYXBpLnN1cnZleWpzLmlvLykgaGFzIGJlZW4gY29tcGxldGVkLiBVc2UgdGhpcyBldmVudCB0byBmaW5kIG91dCBpZiB0aGUgcmVzdWx0cyBoYXZlIGJlZW4gc2F2ZWQgc3VjY2Vzc2Z1bGx5LlxuICAgICAgICAgKi9cbiAgICAgICAgX3RoaXMub25TZW5kUmVzdWx0ID0gX3RoaXMuYWRkRXZlbnQoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFuIGV2ZW50IHRoYXQgaXMgcmFpc2VkIHdoZW4gdGhlIFtgZ2V0UmVzdWx0KHJlc3VsdElkLCBxdWVzdGlvbk5hbWUpYF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL3N1cnZleS1kYXRhLW1vZGVsI2dldFJlc3VsdCkgbWV0aG9kIGlzIGNhbGxlZC4gVXNlIHRoaXMgZXZlbnQgdG8gb2J0YWluIGFuc3dlcnMgdG8gYW4gaW5kaXZpZHVhbCBxdWVzdGlvbiBmcm9tIFtTdXJ2ZXlKUyBTZXJ2aWNlXShodHRwczovL2FwaS5zdXJ2ZXlqcy5pby8pLlxuICAgICAgICAgKiBAc2VlIGdldFJlc3VsdFxuICAgICAgICAgKi9cbiAgICAgICAgX3RoaXMub25HZXRSZXN1bHQgPSBfdGhpcy5hZGRFdmVudCgpO1xuICAgICAgICAvKipcbiAgICAgICAgICogQW4gZXZlbnQgdGhhdCBpcyByYWlzZWQgd2hlbiBhIEZpbGUgVXBsb2FkIHF1ZXN0aW9uIHN0YXJ0cyB0byB1cGxvYWQgYSBmaWxlLiBBcHBsaWVzIG9ubHkgaWYgW2BzdG9yZURhdGFBc1RleHRgXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2UvZmlsZS1tb2RlbCNzdG9yZURhdGFBc1RleHQpIGlzIGBmYWxzZWAuIFVzZSB0aGlzIGV2ZW50IHRvIHVwbG9hZCBmaWxlcyB0byB5b3VyIHNlcnZlci5cbiAgICAgICAgICpcbiAgICAgICAgICogRm9yIGluZm9ybWF0aW9uIG9uIGV2ZW50IGhhbmRsZXIgcGFyYW1ldGVycywgcmVmZXIgdG8gZGVzY3JpcHRpb25zIHdpdGhpbiB0aGUgaW50ZXJmYWNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBbVmlldyBEZW1vXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9leGFtcGxlcy9maWxlLXVwbG9hZC8gKGxpbmtTdHlsZSkpXG4gICAgICAgICAqIEBzZWUgdXBsb2FkRmlsZXNcbiAgICAgICAgICogQHNlZSBvbkRvd25sb2FkRmlsZVxuICAgICAgICAgKiBAc2VlIG9uQ2xlYXJGaWxlc1xuICAgICAgICAgKi9cbiAgICAgICAgX3RoaXMub25VcGxvYWRGaWxlcyA9IF90aGlzLmFkZEV2ZW50KCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBbiBldmVudCB0aGF0IGlzIHJhaXNlZCB3aGVuIGEgRmlsZSBVcGxvYWQgcXVlc3Rpb24gc3RhcnRzIHRvIGRvd25sb2FkIGEgZmlsZS4gVXNlIHRoaXMgZXZlbnQgdG8gaW1wbGVtZW50IGZpbGUgcHJldmlldyB3aGVuIHlvdXIgc2VydmVyIHN0b3JlcyBvbmx5IGZpbGUgbmFtZXMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEZvciBpbmZvcm1hdGlvbiBvbiBldmVudCBoYW5kbGVyIHBhcmFtZXRlcnMsIHJlZmVyIHRvIGRlc2NyaXB0aW9ucyB3aXRoaW4gdGhlIGludGVyZmFjZS5cbiAgICAgICAgICpcbiAgICAgICAgICogW1ZpZXcgRGVtb10oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZXhhbXBsZXMvc3RvcmUtZmlsZS1uYW1lcy1pbi1zdXJ2ZXktcmVzdWx0cy8gKGxpbmtTdHlsZSkpXG4gICAgICAgICAqIEBzZWUgZG93bmxvYWRGaWxlXG4gICAgICAgICAqIEBzZWUgb25DbGVhckZpbGVzXG4gICAgICAgICAqIEBzZWUgb25VcGxvYWRGaWxlc1xuICAgICAgICAgKi9cbiAgICAgICAgX3RoaXMub25Eb3dubG9hZEZpbGUgPSBfdGhpcy5hZGRFdmVudCgpO1xuICAgICAgICAvKipcbiAgICAgICAgICogQW4gZXZlbnQgdGhhdCBpcyByYWlzZWQgd2hlbiB1c2VycyBjbGVhciBmaWxlcyBpbiBhIFtGaWxlIFVwbG9hZF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL2ZpbGUtbW9kZWwpIHF1ZXN0aW9uLiBVc2UgdGhpcyBldmVudCB0byBkZWxldGUgZmlsZXMgZnJvbSB5b3VyIHNlcnZlci5cbiAgICAgICAgICpcbiAgICAgICAgICogRm9yIGluZm9ybWF0aW9uIG9uIGV2ZW50IGhhbmRsZXIgcGFyYW1ldGVycywgcmVmZXIgdG8gZGVzY3JpcHRpb25zIHdpdGhpbiB0aGUgaW50ZXJmYWNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBbVmlldyBEZW1vXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9leGFtcGxlcy9maWxlLWRlbGF5ZWQtdXBsb2FkLyAobGlua1N0eWxlKSlcbiAgICAgICAgICogQHNlZSBjbGVhckZpbGVzXG4gICAgICAgICAqIEBzZWUgb25Eb3dubG9hZEZpbGVcbiAgICAgICAgICogQHNlZSBvblVwbG9hZEZpbGVzXG4gICAgICAgICAqL1xuICAgICAgICBfdGhpcy5vbkNsZWFyRmlsZXMgPSBfdGhpcy5hZGRFdmVudCgpO1xuICAgICAgICAvKipcbiAgICAgICAgICogQW4gZXZlbnQgdGhhdCBpcyByYWlzZWQgYWZ0ZXIgY2hvaWNlcyBhcmUgbG9hZGVkIGZyb20gYSBzZXJ2ZXIgYnV0IGJlZm9yZSB0aGV5IGFyZSBhc3NpZ25lZCB0byBhIGNob2ljZS1iYXNlZCBxdWVzdGlvbiwgc3VjaCBhcyBbRHJvcGRvd25dKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vYXBpLXJlZmVyZW5jZS9kcm9wZG93bi1tZW51LW1vZGVsKSBvciBbQ2hlY2tib3hlc10oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL2NoZWNrYm94LXF1ZXN0aW9uLW1vZGVsKS4gSGFuZGxlIHRoaXMgZXZlbnQgaWYgeW91IG5lZWQgdG8gbW9kaWZ5IHRoZSBsb2FkZWQgY2hvaWNlcy5cbiAgICAgICAgICovXG4gICAgICAgIF90aGlzLm9uTG9hZENob2ljZXNGcm9tU2VydmVyID0gX3RoaXMuYWRkRXZlbnQoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFuIGV2ZW50IHRoYXQgaXMgcmFpc2VkIGFmdGVyIGEgc3VydmV5IEpTT04gc2NoZW1hIGlzIGxvYWRlZCBmcm9tIHRoZSBbU3VydmV5SlMgU2VydmljZV0oaHR0cHM6Ly9hcGkuc3VydmV5anMuaW8pLiBVc2UgdGhpcyBldmVudCB0byBtb2RpZnkgdGhlIGxvYWRlZCBzY2hlbWEuXG4gICAgICAgICAqIEBzZWUgc3VydmV5SWRcbiAgICAgICAgICogQHNlZSBjbGllbnRJZFxuICAgICAgICAgKiBAc2VlIGxvYWRTdXJ2ZXlGcm9tU2VydmljZVxuICAgICAgICAgKi9cbiAgICAgICAgX3RoaXMub25Mb2FkZWRTdXJ2ZXlGcm9tU2VydmljZSA9IF90aGlzLmFkZEV2ZW50KCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBbiBldmVudCB0aGF0IGlzIHJhaXNlZCB3aGVuIHRoZSBzdXJ2ZXkgcHJvY2Vzc2VzIFtkeW5hbWljIHRleHRzXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2Rlc2lnbi1zdXJ2ZXkvY29uZGl0aW9uYWwtbG9naWMjZHluYW1pYy10ZXh0cykgYW5kIGFueSB0ZXh0IGluIGN1cmx5IGJyYWNrZXRzLiBVc2UgdGhpcyBldmVudCwgZm9yIGluc3RhbmNlLCB0byBzdWJzdGl0dXRlIHBhcmFtZXRlcnMgaW4gYSBSRVNUZnVsIFVSTCB3aXRoIHJlYWwgdmFsdWVzIHdoZW4geW91IFtsb2FkIGNob2ljZXMgYnkgVVJMXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2UvY2hlY2tib3gtcXVlc3Rpb24tbW9kZWwjY2hvaWNlc0J5VXJsKS5cbiAgICAgICAgICovXG4gICAgICAgIF90aGlzLm9uUHJvY2Vzc1RleHRWYWx1ZSA9IF90aGlzLmFkZEV2ZW50KCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBbiBldmVudCB0aGF0IGlzIHJhaXNlZCBiZWZvcmUgcmVuZGVyaW5nIGEgcXVlc3Rpb24uIFVzZSBpdCB0byBvdmVycmlkZSBkZWZhdWx0IHF1ZXN0aW9uIENTUyBjbGFzc2VzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBGb3IgaW5mb3JtYXRpb24gb24gZXZlbnQgaGFuZGxlciBwYXJhbWV0ZXJzLCByZWZlciB0byBkZXNjcmlwdGlvbnMgd2l0aGluIHRoZSBpbnRlcmZhY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIFtWaWV3IERlbW9dKC9mb3JtLWxpYnJhcnkvZXhhbXBsZXMvY3VzdG9taXplLXN1cnZleS13aXRoLWNzcy8gKGxpbmtTdHlsZSkpXG4gICAgICAgICAqIEBzZWUgY3NzXG4gICAgICAgICAqL1xuICAgICAgICBfdGhpcy5vblVwZGF0ZVF1ZXN0aW9uQ3NzQ2xhc3NlcyA9IF90aGlzLmFkZEV2ZW50KCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBbiBldmVudCB0aGF0IGlzIHJhaXNlZCBiZWZvcmUgcmVuZGVyaW5nIGEgc3RhbmRhbG9uZSBwYW5lbCBhbmQgcGFuZWxzIHdpdGhpbiBbRHluYW1pYyBQYW5lbF0oL2Zvcm0tbGlicmFyeS9leGFtcGxlcy9kdXBsaWNhdGUtZ3JvdXAtb2YtZmllbGRzLWluLWZvcm0vKS4gVXNlIGl0IHRvIG92ZXJyaWRlIGRlZmF1bHQgcGFuZWwgQ1NTIGNsYXNzZXMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEZvciBpbmZvcm1hdGlvbiBvbiBldmVudCBoYW5kbGVyIHBhcmFtZXRlcnMsIHJlZmVyIHRvIGRlc2NyaXB0aW9ucyB3aXRoaW4gdGhlIGludGVyZmFjZS5cbiAgICAgICAgICpcbiAgICAgICAgICogW1ZpZXcgRGVtb10oL2Zvcm0tbGlicmFyeS9leGFtcGxlcy9jdXN0b21pemUtc3VydmV5LXdpdGgtY3NzLyAobGlua1N0eWxlKSlcbiAgICAgICAgICogQHNlZSBjc3NcbiAgICAgICAgICovXG4gICAgICAgIF90aGlzLm9uVXBkYXRlUGFuZWxDc3NDbGFzc2VzID0gX3RoaXMuYWRkRXZlbnQoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFuIGV2ZW50IHRoYXQgaXMgcmFpc2VkIGJlZm9yZSByZW5kZXJpbmcgYSBwYWdlLiBVc2UgaXQgdG8gb3ZlcnJpZGUgZGVmYXVsdCBwYWdlIENTUyBjbGFzc2VzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBGb3IgaW5mb3JtYXRpb24gb24gZXZlbnQgaGFuZGxlciBwYXJhbWV0ZXJzLCByZWZlciB0byBkZXNjcmlwdGlvbnMgd2l0aGluIHRoZSBpbnRlcmZhY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIFtWaWV3IERlbW9dKC9mb3JtLWxpYnJhcnkvZXhhbXBsZXMvY3VzdG9taXplLXN1cnZleS13aXRoLWNzcy8gKGxpbmtTdHlsZSkpXG4gICAgICAgICAqIEBzZWUgY3NzXG4gICAgICAgICAqL1xuICAgICAgICBfdGhpcy5vblVwZGF0ZVBhZ2VDc3NDbGFzc2VzID0gX3RoaXMuYWRkRXZlbnQoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFuIGV2ZW50IHRoYXQgaXMgcmFpc2VkIGJlZm9yZSByZW5kZXJpbmcgYSBjaG9pY2UgaXRlbSBpbiBSYWRpbyBCdXR0b24gR3JvdXAsIENoZWNrYm94ZXMsIGFuZCBEcm9wZG93biBxdWVzdGlvbnMuIFVzZSBpdCB0byBvdmVycmlkZSBkZWZhdWx0IENTUyBjbGFzc2VzIGFwcGxpZWQgdG8gY2hvaWNlIGl0ZW1zLlxuICAgICAgICAgKlxuICAgICAgICAgKiBGb3IgaW5mb3JtYXRpb24gb24gZXZlbnQgaGFuZGxlciBwYXJhbWV0ZXJzLCByZWZlciB0byBkZXNjcmlwdGlvbnMgd2l0aGluIHRoZSBpbnRlcmZhY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIFtWaWV3IERlbW9dKC9mb3JtLWxpYnJhcnkvZXhhbXBsZXMvY3VzdG9taXplLXN1cnZleS13aXRoLWNzcy8gKGxpbmtTdHlsZSkpXG4gICAgICAgICAqIEBzZWUgY3NzXG4gICAgICAgICAqL1xuICAgICAgICBfdGhpcy5vblVwZGF0ZUNob2ljZUl0ZW1Dc3MgPSBfdGhpcy5hZGRFdmVudCgpO1xuICAgICAgICAvKipcbiAgICAgICAgICogQW4gZXZlbnQgdGhhdCBpcyByYWlzZWQgYWZ0ZXIgdGhlIHN1cnZleSBpcyByZW5kZXJlZCB0byB0aGUgRE9NLiBVc2UgdGhpcyBldmVudCB0byBtb2RpZnkgc3VydmV5IG1hcmt1cC5cbiAgICAgICAgICpcbiAgICAgICAgICogRm9yIGluZm9ybWF0aW9uIG9uIGV2ZW50IGhhbmRsZXIgcGFyYW1ldGVycywgcmVmZXIgdG8gZGVzY3JpcHRpb25zIHdpdGhpbiB0aGUgaW50ZXJmYWNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBbVmlldyBEZW1vXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9leGFtcGxlcy9zdXJ2ZXktYW5pbWF0aW9uLyAobGlua1N0eWxlKSlcbiAgICAgICAgICovXG4gICAgICAgIF90aGlzLm9uQWZ0ZXJSZW5kZXJTdXJ2ZXkgPSBfdGhpcy5hZGRFdmVudCgpO1xuICAgICAgICBfdGhpcy5vbkFmdGVyUmVuZGVySGVhZGVyID0gX3RoaXMuYWRkRXZlbnQoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFuIGV2ZW50IHRoYXQgaXMgcmFpc2VkIGFmdGVyIGEgcGFnZSBpcyByZW5kZXJlZCB0byB0aGUgRE9NLiBVc2UgaXQgdG8gbW9kaWZ5IHBhZ2UgbWFya3VwLlxuICAgICAgICAgKlxuICAgICAgICAgKiBGb3IgaW5mb3JtYXRpb24gb24gZXZlbnQgaGFuZGxlciBwYXJhbWV0ZXJzLCByZWZlciB0byBkZXNjcmlwdGlvbnMgd2l0aGluIHRoZSBpbnRlcmZhY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIFtWaWV3IERlbW9dKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2V4YW1wbGVzL3N1cnZleS1hZnRlcnJlbmRlci8gKGxpbmtTdHlsZSkpXG4gICAgICAgICAqL1xuICAgICAgICBfdGhpcy5vbkFmdGVyUmVuZGVyUGFnZSA9IF90aGlzLmFkZEV2ZW50KCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBbiBldmVudCB0aGF0IGlzIHJhaXNlZCBhZnRlciBhIHF1ZXN0aW9uIGlzIHJlbmRlcmVkIHRvIHRoZSBET00uIFVzZSBpdCB0byBtb2RpZnkgcXVlc3Rpb24gbWFya3VwLlxuICAgICAgICAgKlxuICAgICAgICAgKiBGb3IgaW5mb3JtYXRpb24gb24gZXZlbnQgaGFuZGxlciBwYXJhbWV0ZXJzLCByZWZlciB0byBkZXNjcmlwdGlvbnMgd2l0aGluIHRoZSBpbnRlcmZhY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIFtWaWV3IERlbW9dKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2V4YW1wbGVzL3N1cnZleS1hZnRlcnJlbmRlci8gKGxpbmtTdHlsZSkpXG4gICAgICAgICAqL1xuICAgICAgICBfdGhpcy5vbkFmdGVyUmVuZGVyUXVlc3Rpb24gPSBfdGhpcy5hZGRFdmVudCgpO1xuICAgICAgICAvKipcbiAgICAgICAgICogQW4gZXZlbnQgdGhhdCBpcyByYWlzZWQgYWZ0ZXIgYSBxdWVzdGlvbiB3aXRoIGEgc2luZ2xlIGlucHV0IGZpZWxkIGlzIHJlbmRlcmVkIHRvIHRoZSBET00uIFVzZSBpdCB0byBtb2RpZnkgcXVlc3Rpb24gbWFya3VwLlxuICAgICAgICAgKlxuICAgICAgICAgKiBGb3IgaW5mb3JtYXRpb24gb24gZXZlbnQgaGFuZGxlciBwYXJhbWV0ZXJzLCByZWZlciB0byBkZXNjcmlwdGlvbnMgd2l0aGluIHRoZSBpbnRlcmZhY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqID4gVGhpcyBldmVudCBpcyBub3QgcmFpc2VkIGZvciBxdWVzdGlvbnMgd2l0aG91dCBpbnB1dCBmaWVsZHMgKFtIVE1MXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL3F1ZXN0aW9uaHRtbG1vZGVsKSwgW0ltYWdlXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL3F1ZXN0aW9uaW1hZ2Vtb2RlbCkpIG9yIHF1ZXN0aW9ucyB3aXRoIG11bHRpcGxlIGlucHV0IGZpZWxkcyAoW01hdHJpeF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9xdWVzdGlvbm1hdHJpeG1vZGVsKSwgW011bHRpcGxlIFRleHRdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vcXVlc3Rpb25tdWx0aXBsZXRleHRtb2RlbCkpLlxuICAgICAgICAgKi9cbiAgICAgICAgX3RoaXMub25BZnRlclJlbmRlclF1ZXN0aW9uSW5wdXQgPSBfdGhpcy5hZGRFdmVudCgpO1xuICAgICAgICAvKipcbiAgICAgICAgICogQW4gZXZlbnQgdGhhdCBpcyByYWlzZWQgYWZ0ZXIgYSBwYW5lbCBpcyByZW5kZXJlZCB0byB0aGUgRE9NLiBVc2UgaXQgdG8gbW9kaWZ5IHBhbmVsIG1hcmt1cC5cbiAgICAgICAgICpcbiAgICAgICAgICogRm9yIGluZm9ybWF0aW9uIG9uIGV2ZW50IGhhbmRsZXIgcGFyYW1ldGVycywgcmVmZXIgdG8gZGVzY3JpcHRpb25zIHdpdGhpbiB0aGUgaW50ZXJmYWNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiA+IFRoaXMgZXZlbnQgaXMgcmFpc2VkIGZvciBzdGF0aWMgW1BhbmVsc10oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZXhhbXBsZXMvc2V0LXByb3BlcnRpZXMtb24tbXVsdGlwbGUtcXVlc3Rpb25zLXVzaW5nLXBhbmVsLykgYXMgd2VsbCBhcyBwYW5lbHMgd2l0aGluIGEgW0R5bmFtaWMgUGFuZWxdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2V4YW1wbGVzL2R1cGxpY2F0ZS1ncm91cC1vZi1maWVsZHMtaW4tZm9ybS8pLlxuICAgICAgICAgKi9cbiAgICAgICAgX3RoaXMub25BZnRlclJlbmRlclBhbmVsID0gX3RoaXMuYWRkRXZlbnQoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFuIGV2ZW50IHRoYXQgaXMgcmFpc2VkIHdoZW4gYW4gZWxlbWVudCAoaW5wdXQgZmllbGQsIGNoZWNrYm94LCByYWRpbyBidXR0b24pIHdpdGhpbiBhIHF1ZXN0aW9uIGdldHMgZm9jdXMuXG4gICAgICAgICAqIEBzZWUgb25Gb2N1c0luUGFuZWxcbiAgICAgICAgICogQHNlZSBmb2N1c0ZpcnN0UXVlc3Rpb25BdXRvbWF0aWNcbiAgICAgICAgICogQHNlZSBmb2N1c1F1ZXN0aW9uXG4gICAgICAgICAqL1xuICAgICAgICBfdGhpcy5vbkZvY3VzSW5RdWVzdGlvbiA9IF90aGlzLmFkZEV2ZW50KCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBbiBldmVudCB0aGF0IGlzIHJhaXNlZCB3aGVuIGFuIGVsZW1lbnQgd2l0aGluIGEgcGFuZWwgZ2V0cyBmb2N1cy5cbiAgICAgICAgICogQHNlZSBvbkZvY3VzSW5RdWVzdGlvblxuICAgICAgICAgKiBAc2VlIGZvY3VzRmlyc3RRdWVzdGlvbkF1dG9tYXRpY1xuICAgICAgICAgKiBAc2VlIGZvY3VzUXVlc3Rpb25cbiAgICAgICAgICovXG4gICAgICAgIF90aGlzLm9uRm9jdXNJblBhbmVsID0gX3RoaXMuYWRkRXZlbnQoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFuIGV2ZW50IHRoYXQgaXMgcmFpc2VkIGJlZm9yZSBhIFtjaG9pY2UgaXRlbV0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL3F1ZXN0aW9uc2VsZWN0YmFzZSNjaG9pY2VzKSBpcyBkaXNwbGF5ZWQuIFVzZSB0aGlzIGV2ZW50IHRvIGNoYW5nZSB0aGUgdmlzaWJpbGl0eSBvZiBpbmRpdmlkdWFsIGNob2ljZSBpdGVtcyBpbiBbQ2hlY2tib3hlc10oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL2NoZWNrYm94LXF1ZXN0aW9uLW1vZGVsKSwgW0Ryb3Bkb3duXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2UvZHJvcGRvd24tbWVudS1tb2RlbCksIFtSYWRpbyBCdXR0b24gR3JvdXBdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vYXBpLXJlZmVyZW5jZS9yYWRpby1idXR0b24tcXVlc3Rpb24tbW9kZWwpLCBhbmQgb3RoZXIgc2ltaWxhciBxdWVzdGlvbiB0eXBlcy5cbiAgICAgICAgICovXG4gICAgICAgIF90aGlzLm9uU2hvd2luZ0Nob2ljZUl0ZW0gPSBfdGhpcy5hZGRFdmVudCgpO1xuICAgICAgICAvKipcbiAgICAgICAgICogVXNlIHRoaXMgZXZlbnQgdG8gbG9hZCBjaG9pY2UgaXRlbXMgaW4gW0Ryb3Bkb3duXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL3F1ZXN0aW9uZHJvcGRvd25tb2RlbCkgYW5kIFtUYWcgQm94XShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL3F1ZXN0aW9udGFnYm94bW9kZWwpIHF1ZXN0aW9ucyBvbiBkZW1hbmQuXG4gICAgICAgICAqXG4gICAgICAgICAqIFRoaXMgZXZlbnQgaXMgcmFpc2VkIG9ubHkgZm9yIHRob3NlIHF1ZXN0aW9ucyB0aGF0IGhhdmUgdGhlIFtgY2hvaWNlc0xhenlMb2FkRW5hYmxlZGBdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vcXVlc3Rpb25kcm9wZG93bm1vZGVsI2Nob2ljZXNMYXp5TG9hZEVuYWJsZWQpIHByb3BlcnR5IHNldCB0byBgdHJ1ZWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEZvciBpbmZvcm1hdGlvbiBvbiBldmVudCBoYW5kbGVyIHBhcmFtZXRlcnMsIHJlZmVyIHRvIGRlc2NyaXB0aW9ucyB3aXRoaW4gdGhlIGludGVyZmFjZS5cbiAgICAgICAgICpcbiAgICAgICAgICogW1ZpZXcgRGVtb10oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZXhhbXBsZXMvbGF6eS1sb2FkaW5nLWRyb3Bkb3duLyAobGlua1N0eWxlKSlcbiAgICAgICAgICovXG4gICAgICAgIF90aGlzLm9uQ2hvaWNlc0xhenlMb2FkID0gX3RoaXMuYWRkRXZlbnQoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFVzZSB0aGlzIGV2ZW50IHRvIGxvYWQgYSBkaXNwbGF5IHRleHQgZm9yIHRoZSBbZGVmYXVsdCBjaG9pY2UgaXRlbV0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9xdWVzdGlvbmRyb3Bkb3dubW9kZWwjZGVmYXVsdFZhbHVlKSBpbiBbRHJvcGRvd25dKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vcXVlc3Rpb25kcm9wZG93bm1vZGVsKSBhbmQgW1RhZyBCb3hdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vcXVlc3Rpb250YWdib3htb2RlbCkgcXVlc3Rpb25zLlxuICAgICAgICAgKlxuICAgICAgICAgKiBJZiB5b3UgbG9hZCBjaG9pY2VzIGZyb20gYSBzZXJ2ZXIgKHVzZSBbYGNob2ljZXNCeVVybGBdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vcXVlc3Rpb25kcm9wZG93bm1vZGVsI2Nob2ljZXNCeVVybCkgb3IgW2BvbkNob2ljZXNMYXp5TG9hZGBdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vc3VydmV5bW9kZWwjb25DaG9pY2VzTGF6eUxvYWQpKSwgZGlzcGxheSB0ZXh0cyBiZWNvbWUgYXZhaWxhYmxlIG9ubHkgd2hlbiBkYXRhIGlzIGxvYWRlZCwgd2hpY2ggZG9lcyBub3QgaGFwcGVuIHVudGlsIGEgdXNlciBvcGVucyB0aGUgZHJvcC1kb3duIG1lbnUuIEhvd2V2ZXIsIGEgZGlzcGxheSB0ZXh0IGZvciBhIGRlZmF1bHQgY2hvaWNlIGl0ZW0gaXMgcmVxdWlyZWQgYmVmb3JlIHRoYXQuIEluIHRoaXMgY2FzZSwgeW91IGNhbiBsb2FkIGRhdGEgaW5kaXZpZHVhbGx5IGZvciB0aGUgZGVmYXVsdCBpdGVtIHdpdGhpbiB0aGUgYG9uR2V0Q2hvaWNlRGlzcGxheVZhbHVlYCBldmVudCBoYW5kbGVyLlxuICAgICAgICAgKlxuICAgICAgICAgKiBGb3IgaW5mb3JtYXRpb24gb24gZXZlbnQgaGFuZGxlciBwYXJhbWV0ZXJzLCByZWZlciB0byBkZXNjcmlwdGlvbnMgd2l0aGluIHRoZSBpbnRlcmZhY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIFtWaWV3IERlbW9dKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2V4YW1wbGVzL2xhenktbG9hZGluZy1kcm9wZG93bi8gKGxpbmtTdHlsZSkpXG4gICAgICAgICAqL1xuICAgICAgICBfdGhpcy5vbkdldENob2ljZURpc3BsYXlWYWx1ZSA9IF90aGlzLmFkZEV2ZW50KCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBbiBldmVudCB0aGF0IGlzIHJhaXNlZCBhZnRlciBhIG5ldyByb3cgaXMgYWRkZWQgdG8gYSBbRHluYW1pYyBNYXRyaXhdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2V4YW1wbGVzL3F1ZXN0aW9udHlwZS1tYXRyaXhkeW5hbWljLykuXG4gICAgICAgICAqL1xuICAgICAgICBfdGhpcy5vbk1hdHJpeFJvd0FkZGVkID0gX3RoaXMuYWRkRXZlbnQoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFuIGV2ZW50IHRoYXQgaXMgcmFpc2VkIGJlZm9yZSBhIG5ldyByb3cgaXMgYWRkZWQgdG8gYSBbRHluYW1pYyBNYXRyaXhdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2V4YW1wbGVzL3F1ZXN0aW9udHlwZS1tYXRyaXhkeW5hbWljLykuXG4gICAgICAgICAqL1xuICAgICAgICBfdGhpcy5vbk1hdHJpeFJvd0FkZGluZyA9IF90aGlzLmFkZEV2ZW50KCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGlzIGV2ZW50IGlzIG9ic29sZXRlLiBVc2UgdGhlIFtgb25NYXRyaXhSb3dBZGRpbmdgXSgvZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vYXBpLXJlZmVyZW5jZS9zdXJ2ZXktZGF0YS1tb2RlbCNvbk1hdHJpeFJvd0FkZGluZykgZXZlbnQgaW5zdGVhZC5cbiAgICAgICAgICovXG4gICAgICAgIF90aGlzLm9uTWF0cml4QmVmb3JlUm93QWRkZWQgPSBfdGhpcy5vbk1hdHJpeFJvd0FkZGluZztcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFuIGV2ZW50IHRoYXQgaXMgcmFpc2VkIGJlZm9yZSBhIHJvdyBpcyBkZWxldGVkIGZyb20gYSBbRHluYW1pYyBNYXRyaXhdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2V4YW1wbGVzL3F1ZXN0aW9udHlwZS1tYXRyaXhkeW5hbWljLykuIFlvdSBjYW4gY2FuY2VsIHJvdyBkZWxldGlvbiBhbmQgY2xlYXIgcm93IGRhdGEgaW5zdGVhZC5cbiAgICAgICAgICogQHNlZSBvbk1hdHJpeFJlbmRlclJlbW92ZUJ1dHRvblxuICAgICAgICAgKi9cbiAgICAgICAgX3RoaXMub25NYXRyaXhSb3dSZW1vdmluZyA9IF90aGlzLmFkZEV2ZW50KCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBbiBldmVudCB0aGF0IGlzIHJhaXNlZCBhZnRlciBhIHJvdyBpcyBkZWxldGVkIGZyb20gYSBbRHluYW1pYyBNYXRyaXhdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2V4YW1wbGVzL3F1ZXN0aW9udHlwZS1tYXRyaXhkeW5hbWljLykuXG4gICAgICAgICAqIEBzZWUgb25NYXRyaXhSZW5kZXJSZW1vdmVCdXR0b25cbiAgICAgICAgICovXG4gICAgICAgIF90aGlzLm9uTWF0cml4Um93UmVtb3ZlZCA9IF90aGlzLmFkZEV2ZW50KCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBbiBldmVudCB0aGF0IGlzIHJhaXNlZCBiZWZvcmUgcmVuZGVyaW5nIHRoZSBSZW1vdmUgYnV0dG9uIGluIGEgcm93IG9mIGEgW0R5bmFtaWMgTWF0cml4XShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9leGFtcGxlcy9xdWVzdGlvbnR5cGUtbWF0cml4ZHluYW1pYy8pLiBVc2UgdGhpcyBldmVudCB0byBoaWRlIHRoZSBSZW1vdmUgYnV0dG9uIGZvciBpbmRpdmlkdWFsIG1hdHJpeCByb3dzLlxuICAgICAgICAgKiBAc2VlIG9uTWF0cml4Um93UmVtb3ZpbmdcbiAgICAgICAgICogQHNlZSBvbk1hdHJpeFJvd1JlbW92ZWRcbiAgICAgICAgICovXG4gICAgICAgIF90aGlzLm9uTWF0cml4UmVuZGVyUmVtb3ZlQnV0dG9uID0gX3RoaXMuYWRkRXZlbnQoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoaXMgZXZlbnQgaXMgb2Jzb2xldGUuIFVzZSB0aGUgW2Bvbk1hdHJpeFJlbmRlclJlbW92ZUJ1dHRvbmBdKC9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL3N1cnZleS1kYXRhLW1vZGVsI29uTWF0cml4UmVuZGVyUmVtb3ZlQnV0dG9uKSBldmVudCBpbnN0ZWFkLlxuICAgICAgICAgKi9cbiAgICAgICAgX3RoaXMub25NYXRyaXhBbGxvd1JlbW92ZVJvdyA9IF90aGlzLm9uTWF0cml4UmVuZGVyUmVtb3ZlQnV0dG9uO1xuICAgICAgICAvKipcbiAgICAgICAgICogQW4gZXZlbnQgdGhhdCBpcyByYWlzZWQgYmVmb3JlIGEgY2VsbCBpbiBhIFtNdWx0aS1TZWxlY3QgTWF0cml4XShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9leGFtcGxlcy9xdWVzdGlvbnR5cGUtbWF0cml4ZHJvcGRvd24vKSBvciBbRHluYW1pYyBNYXRyaXhdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2V4YW1wbGVzL3F1ZXN0aW9udHlwZS1tYXRyaXhkeW5hbWljLykgaXMgY3JlYXRlZC4gVXNlIHRoaXMgZXZlbnQgdG8gY2hhbmdlIHRoZSB0eXBlIG9mIGluZGl2aWR1YWwgbWF0cml4IGNlbGxzLlxuICAgICAgICAgKiBAc2VlIG9uQWZ0ZXJSZW5kZXJNYXRyaXhDZWxsXG4gICAgICAgICAqL1xuICAgICAgICBfdGhpcy5vbk1hdHJpeENlbGxDcmVhdGluZyA9IF90aGlzLmFkZEV2ZW50KCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgICogQW4gZXZlbnQgdGhhdCBpcyByYWlzZWQgYWZ0ZXIgYSBjZWxsIGluIGEgW011bHRpLVNlbGVjdCBNYXRyaXhdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2V4YW1wbGVzL3F1ZXN0aW9udHlwZS1tYXRyaXhkcm9wZG93bi8pIG9yIFtEeW5hbWljIE1hdHJpeF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZXhhbXBsZXMvcXVlc3Rpb250eXBlLW1hdHJpeGR5bmFtaWMvKSBpcyBjcmVhdGVkLlxuICAgICAgICAgICogQHNlZSBvbkFmdGVyUmVuZGVyTWF0cml4Q2VsbFxuICAgICAgICAgICovXG4gICAgICAgIF90aGlzLm9uTWF0cml4Q2VsbENyZWF0ZWQgPSBfdGhpcy5hZGRFdmVudCgpO1xuICAgICAgICAvKipcbiAgICAgICAgICogQW4gZXZlbnQgdGhhdCBpcyByYWlzZWQgZm9yIGV2ZXJ5IG1hdHJpeCBjZWxsIGFmdGVyIGl0IGlzIHJlbmRlcmVkIHRvIHRoZSBET00uXG4gICAgICAgICAqIEBzZWUgb25NYXRyaXhDZWxsQ3JlYXRlZFxuICAgICAgICAgKi9cbiAgICAgICAgX3RoaXMub25BZnRlclJlbmRlck1hdHJpeENlbGwgPSBfdGhpcy5hZGRFdmVudCgpO1xuICAgICAgICAvKipcbiAgICAgICAgICogVGhpcyBldmVudCBpcyBvYnNvbGV0ZS4gVXNlIHRoZSBbYG9uQWZ0ZXJSZW5kZXJNYXRyaXhDZWxsYF0oL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2Uvc3VydmV5LWRhdGEtbW9kZWwjb25BZnRlclJlbmRlck1hdHJpeENlbGwpIGV2ZW50IGluc3RlYWQuXG4gICAgICAgICAqL1xuICAgICAgICBfdGhpcy5vbk1hdHJpeEFmdGVyQ2VsbFJlbmRlciA9IF90aGlzLm9uQWZ0ZXJSZW5kZXJNYXRyaXhDZWxsO1xuICAgICAgICAvKipcbiAgICAgICAgICogQW4gZXZlbnQgdGhhdCBpcyByYWlzZWQgYWZ0ZXIgYSBjZWxsIHZhbHVlIGlzIGNoYW5nZWQgaW4gYSBbTXVsdGktU2VsZWN0IE1hdHJpeF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZXhhbXBsZXMvcXVlc3Rpb250eXBlLW1hdHJpeGRyb3Bkb3duLykgb3IgW0R5bmFtaWMgTWF0cml4XShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9leGFtcGxlcy9xdWVzdGlvbnR5cGUtbWF0cml4ZHluYW1pYy8pLlxuICAgICAgICAgKiBAc2VlIG9uTWF0cml4Um93QWRkaW5nXG4gICAgICAgICAqL1xuICAgICAgICBfdGhpcy5vbk1hdHJpeENlbGxWYWx1ZUNoYW5nZWQgPSBfdGhpcy5hZGRFdmVudCgpO1xuICAgICAgICAvKipcbiAgICAgICAgICogQW4gZXZlbnQgdGhhdCBpcyByYWlzZWQgYmVmb3JlIGEgY2VsbCB2YWx1ZSBpcyBjaGFuZ2VkIGluIGEgW011bHRpLVNlbGVjdCBNYXRyaXhdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2V4YW1wbGVzL3F1ZXN0aW9udHlwZS1tYXRyaXhkcm9wZG93bi8pIG9yIFtEeW5hbWljIE1hdHJpeF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZXhhbXBsZXMvcXVlc3Rpb250eXBlLW1hdHJpeGR5bmFtaWMvKS4gVXNlIHRoaXMgZXZlbnQgdG8gY2hhbmdlIHRoZSBjZWxsIHZhbHVlLlxuICAgICAgICAgKiBAc2VlIG9uTWF0cml4Um93QWRkaW5nXG4gICAgICAgICAqL1xuICAgICAgICBfdGhpcy5vbk1hdHJpeENlbGxWYWx1ZUNoYW5naW5nID0gX3RoaXMuYWRkRXZlbnQoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFuIGV2ZW50IHRoYXQgaXMgcmFpc2VkIGZvciBbTXVsdGktU2VsZWN0IE1hdHJpeF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZXhhbXBsZXMvcXVlc3Rpb250eXBlLW1hdHJpeGRyb3Bkb3duLykgYW5kIFtEeW5hbWljIE1hdHJpeF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZXhhbXBsZXMvcXVlc3Rpb250eXBlLW1hdHJpeGR5bmFtaWMvKSBxdWVzdGlvbnMgd2hlbiB0aGV5IHZhbGlkYXRlIGEgY2VsbCB2YWx1ZS4gVXNlIHRoaXMgZXZlbnQgdG8gZGlzcGxheSBhIGN1c3RvbSBlcnJvciBtZXNzYWdlIGJhc2VkIG9uIGEgY29uZGl0aW9uLlxuICAgICAgICAgKiBAc2VlIG9uTWF0cml4Um93QWRkaW5nXG4gICAgICAgICAqL1xuICAgICAgICBfdGhpcy5vbk1hdHJpeENlbGxWYWxpZGF0ZSA9IF90aGlzLmFkZEV2ZW50KCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBbiBldmVudCB0aGF0IGlzIHJhaXNlZCBhZnRlciBhIG5ldyBjb2x1bW4gaXMgYWRkZWQgdG8gYSBbTXVsdGktU2VsZWN0IE1hdHJpeF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZXhhbXBsZXMvcXVlc3Rpb250eXBlLW1hdHJpeGRyb3Bkb3duLykgb3IgW0R5bmFtaWMgTWF0cml4XShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9leGFtcGxlcy9xdWVzdGlvbnR5cGUtbWF0cml4ZHluYW1pYy8pLlxuICAgICAgICAgKi9cbiAgICAgICAgX3RoaXMub25NYXRyaXhDb2x1bW5BZGRlZCA9IF90aGlzLmFkZEV2ZW50KCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBbiBldmVudCB0aGF0IGlzIHJhaXNlZCBvbiBhZGRpbmcgYSBuZXcgaXRlbSBpbiBNdWx0aXBsZSBUZXh0IHF1ZXN0aW9uLlxuICAgICAgICAgKi9cbiAgICAgICAgX3RoaXMub25NdWx0aXBsZVRleHRJdGVtQWRkZWQgPSBfdGhpcy5hZGRFdmVudCgpO1xuICAgICAgICAvKipcbiAgICAgICAgICogQW4gZXZlbnQgdGhhdCBpcyByYWlzZWQgYWZ0ZXIgYSBuZXcgcGFuZWwgaXMgYWRkZWQgdG8gYSBbRHluYW1pYyBQYW5lbF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZXhhbXBsZXMvcXVlc3Rpb250eXBlLXBhbmVsZHluYW1pYy8pIHF1ZXN0aW9uLlxuICAgICAgICAgKi9cbiAgICAgICAgX3RoaXMub25EeW5hbWljUGFuZWxBZGRlZCA9IF90aGlzLmFkZEV2ZW50KCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBbiBldmVudCB0aGF0IGlzIHJhaXNlZCBhZnRlciBhIHBhbmVsIGlzIGRlbGV0ZWQgZnJvbSBhIFtEeW5hbWljIFBhbmVsXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9leGFtcGxlcy9xdWVzdGlvbnR5cGUtcGFuZWxkeW5hbWljLykgcXVlc3Rpb24uXG4gICAgICAgICAqL1xuICAgICAgICBfdGhpcy5vbkR5bmFtaWNQYW5lbFJlbW92ZWQgPSBfdGhpcy5hZGRFdmVudCgpO1xuICAgICAgICAvKipcbiAgICAgICAgICogQW4gZXZlbnQgdGhhdCBpcyByYWlzZWQgYmVmb3JlIGEgcGFuZWwgaXMgZGVsZXRlZCBmcm9tIGEgW0R5bmFtaWMgUGFuZWxdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2V4YW1wbGVzL3F1ZXN0aW9udHlwZS1wYW5lbGR5bmFtaWMvKSBxdWVzdGlvbi4gVXNlIHRoaXMgZXZlbnQgdG8gY2FuY2VsIHRoZSBkZWxldGlvbi5cbiAgICAgICAgICovXG4gICAgICAgIF90aGlzLm9uRHluYW1pY1BhbmVsUmVtb3ZpbmcgPSBfdGhpcy5hZGRFdmVudCgpO1xuICAgICAgICAvKipcbiAgICAgICAgKiBBbiBldmVudCB0aGF0IGlzIHJhaXNlZCBldmVyeSBzZWNvbmQgd2hpbGUgdGhlIHRpbWVyIGlzIHJ1bm5pbmcuXG4gICAgICAgICpcbiAgICAgICAgKiBVc2UgdGhlIFtgdGltZVNwZW50YF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL3N1cnZleS1kYXRhLW1vZGVsI3RpbWVTcGVudCkgcHJvcGVydHkgdG8gZmluZCBvdXQgaG93IG1hbnkgc2Vjb25kcyBoYXZlIGVsYXBzZWQuXG4gICAgICAgICogQHNlZSBtYXhUaW1lVG9GaW5pc2hcbiAgICAgICAgKiBAc2VlIG1heFRpbWVUb0ZpbmlzaFBhZ2VcbiAgICAgICAgKiBAc2VlIHNob3dUaW1lclBhbmVsXG4gICAgICAgICogQHNlZSBzdGFydFRpbWVyXG4gICAgICAgICovXG4gICAgICAgIF90aGlzLm9uVGltZXIgPSBfdGhpcy5hZGRFdmVudCgpO1xuICAgICAgICBfdGhpcy5vblRpbWVyUGFuZWxJbmZvVGV4dCA9IF90aGlzLmFkZEV2ZW50KCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBbiBldmVudCB0aGF0IGlzIHJhaXNlZCBhZnRlciBhbiBpdGVtIHZhbHVlIGlzIGNoYW5nZWQgaW4gYSBwYW5lbCB3aXRoaW4gYSBbRHluYW1pYyBQYW5lbF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZXhhbXBsZXMvcXVlc3Rpb250eXBlLXBhbmVsZHluYW1pYy8pIHF1ZXN0aW9uLlxuICAgICAgICAgKi9cbiAgICAgICAgX3RoaXMub25EeW5hbWljUGFuZWxJdGVtVmFsdWVDaGFuZ2VkID0gX3RoaXMuYWRkRXZlbnQoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFuIGV2ZW50IHRoYXQgaXMgcmFpc2VkIGJlZm9yZSBhIFtEeW5hbWljIFBhbmVsXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9leGFtcGxlcy9xdWVzdGlvbnR5cGUtcGFuZWxkeW5hbWljLykgcmVuZGVycyBbdGFiIHRpdGxlc10oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL2R5bmFtaWMtcGFuZWwtbW9kZWwjdGVtcGxhdGVUYWJUaXRsZSkuIFVzZSB0aGlzIGV2ZW50IHRvIGNoYW5nZSBpbmRpdmlkdWFsIHRhYiB0aXRsZXMuXG4gICAgICAgICAqL1xuICAgICAgICBfdGhpcy5vbkdldER5bmFtaWNQYW5lbFRhYlRpdGxlID0gX3RoaXMuYWRkRXZlbnQoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFuIGV2ZW50IHRoYXQgaXMgcmFpc2VkIHRvIGRlZmluZSB3aGV0aGVyIGEgcXVlc3Rpb24gYW5zd2VyIGlzIGNvcnJlY3QuIEFwcGxpZXMgb25seSB0byBbcXVpeiBzdXJ2ZXlzXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2Rlc2lnbi1zdXJ2ZXkvY3JlYXRlLWEtcXVpeikuXG4gICAgICAgICAqL1xuICAgICAgICBfdGhpcy5vbklzQW5zd2VyQ29ycmVjdCA9IF90aGlzLmFkZEV2ZW50KCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBbiBldmVudCB0aGF0IGlzIHJhaXNlZCB3aGVuIHVzZXJzIGRyYWcgYW5kIGRyb3Agc3VydmV5IGVsZW1lbnRzIHdoaWxlIGRlc2lnbmluZyB0aGUgc3VydmV5IGluIFtTdXJ2ZXkgQ3JlYXRvcl0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9zdXJ2ZXktY3JlYXRvci9kb2N1bWVudGF0aW9uL292ZXJ2aWV3KS4gVXNlIHRoaXMgZXZlbnQgdG8gY29udHJvbCBkcmFnIGFuZCBkcm9wIG9wZXJhdGlvbnMuXG4gICAgICAgICAqIEBzZWUgaXNEZXNpZ25Nb2RlXG4gICAgICAgICAqL1xuICAgICAgICBfdGhpcy5vbkRyYWdEcm9wQWxsb3cgPSBfdGhpcy5hZGRFdmVudCgpO1xuICAgICAgICAvKipcbiAgICAgICAgICogQW4gZXZlbnQgdGhpcyBpcyByYWlzZWQgYmVmb3JlIGEgc3VydmV5IGVsZW1lbnQgKHVzdWFsbHkgcGFnZSkgaXMgc2Nyb2xsZWQgdG8gdGhlIHRvcC4gVXNlIHRoaXMgZXZlbnQgdG8gY2FuY2VsIHRoZSBzY3JvbGwgb3BlcmF0aW9uLlxuICAgICAgICAgKi9cbiAgICAgICAgX3RoaXMub25TY3JvbGxpbmdFbGVtZW50VG9Ub3AgPSBfdGhpcy5hZGRFdmVudCgpO1xuICAgICAgICBfdGhpcy5vbkxvY2FsZUNoYW5nZWRFdmVudCA9IF90aGlzLmFkZEV2ZW50KCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBbiBldmVudCB0aGF0IGFsbG93cyB5b3UgdG8gYWRkLCBkZWxldGUsIG9yIG1vZGlmeSBhY3Rpb25zIGluIGEgcXVlc3Rpb24gdGl0bGUuXG4gICAgICAgICAqXG4gICAgICAgICAqIEZvciBpbmZvcm1hdGlvbiBvbiBldmVudCBoYW5kbGVyIHBhcmFtZXRlcnMsIHJlZmVyIHRvIGRlc2NyaXB0aW9ucyB3aXRoaW4gdGhlIGludGVyZmFjZS5cbiAgICAgICAgICpcbiAgICAgICAgICogW1ZpZXcgRGVtb10oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZXhhbXBsZXMvc3VydmV5LXRpdGxlYWN0aW9ucy8gKGxpbmtTdHlsZSkpXG4gICAgICAgICovXG4gICAgICAgIF90aGlzLm9uR2V0UXVlc3Rpb25UaXRsZUFjdGlvbnMgPSBfdGhpcy5hZGRFdmVudCgpO1xuICAgICAgICAvKipcbiAgICAgICAgICogQW4gZXZlbnQgdGhhdCBhbGxvd3MgeW91IHRvIGFkZCwgZGVsZXRlLCBvciBtb2RpZnkgYWN0aW9ucyBpbiBhIHBhbmVsIHRpdGxlLlxuICAgICAgICAgKi9cbiAgICAgICAgX3RoaXMub25HZXRQYW5lbFRpdGxlQWN0aW9ucyA9IF90aGlzLmFkZEV2ZW50KCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBbiBldmVudCB0aGF0IGFsbG93cyB5b3UgdG8gYWRkLCBkZWxldGUsIG9yIG1vZGlmeSBhY3Rpb25zIGluIGEgcGFnZSB0aXRsZS5cbiAgICAgICAgICpcbiAgICAgICAgICogRm9yIGluZm9ybWF0aW9uIG9uIGV2ZW50IGhhbmRsZXIgcGFyYW1ldGVycywgcmVmZXIgdG8gZGVzY3JpcHRpb25zIHdpdGhpbiB0aGUgaW50ZXJmYWNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBbVmlldyBEZW1vXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9leGFtcGxlcy9tb2RpZnktdGl0bGVzLW9mLXN1cnZleS1lbGVtZW50cy8gKGxpbmtTdHlsZSkpXG4gICAgICAgICAqL1xuICAgICAgICBfdGhpcy5vbkdldFBhZ2VUaXRsZUFjdGlvbnMgPSBfdGhpcy5hZGRFdmVudCgpO1xuICAgICAgICAvKipcbiAgICAgICAgICogQW4gZXZlbnQgdGhhdCBhbGxvd3MgeW91IHRvIGFkZCwgZGVsZXRlLCBvciBtb2RpZnkgYWN0aW9ucyBpbiB0aGUgZm9vdGVyIG9mIGEgW1BhbmVsXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL3BhbmVsbW9kZWwpLlxuICAgICAgICAgKi9cbiAgICAgICAgX3RoaXMub25HZXRQYW5lbEZvb3RlckFjdGlvbnMgPSBfdGhpcy5hZGRFdmVudCgpO1xuICAgICAgICAvKipcbiAgICAgICAgICogQW4gZXZlbnQgdGhhdCBhbGxvd3MgeW91IHRvIGFkZCwgZGVsZXRlLCBvciBtb2RpZnkgYWN0aW9ucyBpbiByb3dzIG9mIGEgW0R5bmFtaWMgTWF0cml4XShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9leGFtcGxlcy9xdWVzdGlvbnR5cGUtbWF0cml4ZHluYW1pYy8pLlxuICAgICAgICAgKlxuICAgICAgICAgKiBGb3IgaW5mb3JtYXRpb24gb24gZXZlbnQgaGFuZGxlciBwYXJhbWV0ZXJzLCByZWZlciB0byBkZXNjcmlwdGlvbnMgd2l0aGluIHRoZSBpbnRlcmZhY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIFtWaWV3IERlbW9dKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2V4YW1wbGVzL2VtcGxveWVlLWluZm9ybWF0aW9uLWZvcm0vIChsaW5rU3R5bGUpKVxuICAgICAgICAgKiBAc2VlIElBY3Rpb25cbiAgICAgICAgICovXG4gICAgICAgIF90aGlzLm9uR2V0TWF0cml4Um93QWN0aW9ucyA9IF90aGlzLmFkZEV2ZW50KCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBbiBldmVudCB0aGF0IGlzIHJhaXNlZCBhZnRlciBhIHN1cnZleSBlbGVtZW50IGlzIFtleHBhbmRlZCBvciBjb2xsYXBzZWRdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vYXBpLXJlZmVyZW5jZS9xdWVzdGlvbiNzdGF0ZSkuXG4gICAgICAgICAqL1xuICAgICAgICBfdGhpcy5vbkVsZW1lbnRDb250ZW50VmlzaWJpbGl0eUNoYW5nZWQgPSBfdGhpcy5hZGRFdmVudCgpO1xuICAgICAgICAvKipcbiAgICAgICAgICogQW4gZXZlbnQgdGhhdCBpcyByYWlzZWQgYmVmb3JlIGFuIFtFeHByZXNzaW9uXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2UvZXhwcmVzc2lvbi1tb2RlbCkgcXVlc3Rpb24gZGlzcGxheXMgYSB2YWx1ZS4gVXNlIHRoaXMgZXZlbnQgdG8gb3ZlcnJpZGUgdGhlIGRpc3BsYXkgdmFsdWUuXG4gICAgICAgICAqL1xuICAgICAgICBfdGhpcy5vbkdldEV4cHJlc3Npb25EaXNwbGF5VmFsdWUgPSBfdGhpcy5hZGRFdmVudCgpO1xuICAgICAgICAvKipcbiAgICAgICAgICogQW4gZXZlbnQgdGhhdCBpcyByYWlzZWQgYWZ0ZXIgdGhlIHZpc2liaWxpdHkgb2YgYSBwb3B1cCBpcyBjaGFuZ2VkLiBUaGlzIGV2ZW50IGNhbiBiZSByYWlzZWQgZm9yIFtTaW5nbGUtXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2UvZHJvcGRvd24tbWVudS1tb2RlbCkgYW5kIFtNdWx0aS1TZWxlY3QgRHJvcGRvd25dKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vYXBpLXJlZmVyZW5jZS9kcm9wZG93bi10YWctYm94LW1vZGVsKSBxdWVzdGlvbnMgYW5kIFtSYXRpbmddKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vYXBpLXJlZmVyZW5jZS9yYXRpbmctc2NhbGUtcXVlc3Rpb24tbW9kZWwpIHF1ZXN0aW9ucyBbcmVuZGVyZWQgYXMgZHJvcC1kb3duIG1lbnVzXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2UvcmF0aW5nLXNjYWxlLXF1ZXN0aW9uLW1vZGVsI2Rpc3BsYXlNb2RlKS5cbiAgICAgICAgICovXG4gICAgICAgIF90aGlzLm9uUG9wdXBWaXNpYmxlQ2hhbmdlZCA9IF90aGlzLmFkZEV2ZW50KCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBIGxpc3Qgb2YgZXJyb3JzIGluIGEgc3VydmV5IEpTT04gc2NoZW1hLlxuICAgICAgICAgKiBAc2VlIGVuc3VyZVVuaXF1ZU5hbWVzXG4gICAgICAgICAqL1xuICAgICAgICBfdGhpcy5qc29uRXJyb3JzID0gbnVsbDtcbiAgICAgICAgX3RoaXMuY3NzVmFsdWUgPSBudWxsO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHdoZXRoZXIgdG8gaGlkZSB2YWxpZGF0aW9uIGVycm9ycyB0aHJvd24gYnkgdGhlIFJlcXVpcmVkIHZhbGlkYXRpb24gaW4gdGhlIFVJLlxuICAgICAgICAgKlxuICAgICAgICAgKiBbQnVpbHQtSW4gQ2xpZW50LVNpZGUgVmFsaWRhdG9yc10oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9kYXRhLXZhbGlkYXRpb24jYnVpbHQtaW4tY2xpZW50LXNpZGUtdmFsaWRhdG9ycyAobGlua1N0eWxlKSlcbiAgICAgICAgICogQHNlZSBpZ25vcmVWYWxpZGF0aW9uXG4gICAgICAgICAqL1xuICAgICAgICBfdGhpcy5oaWRlUmVxdWlyZWRFcnJvcnMgPSBmYWxzZTtcbiAgICAgICAgLy8jZW5kcmVnaW9uXG4gICAgICAgIF90aGlzLmNzc1ZhcmlhYmxlcyA9IHt9O1xuICAgICAgICBfdGhpcy5faXNNb2JpbGUgPSBmYWxzZTtcbiAgICAgICAgX3RoaXMuX2lzQ29tcGFjdCA9IGZhbHNlO1xuICAgICAgICBfdGhpcy5faXNEZXNpZ25Nb2RlID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgd2hldGhlciB0byBza2lwIHZhbGlkYXRpb24gd2hlbiB5b3Ugc3dpdGNoIGJldHdlZW4gcGFnZXMgb3IgY29tcGxldGUgdGhlIHN1cnZleSBwcm9ncmFtbWF0aWNhbGx5IG9yIHdoZW4gdXNlcnMgZG8gdGhhdCBpbiB0aGUgVUkuXG4gICAgICAgICAqXG4gICAgICAgICAqIERlZmF1bHQgdmFsdWU6IGBmYWxzZWBcbiAgICAgICAgICogQHNlZSBoaWRlUmVxdWlyZWRFcnJvcnNcbiAgICAgICAgICogQHNlZSBuZXh0UGFnZVxuICAgICAgICAgKiBAc2VlIGlzUHJldlBhZ2VcbiAgICAgICAgICogQHNlZSBjb21wbGV0ZUxhc3RQYWdlXG4gICAgICAgICAqL1xuICAgICAgICBfdGhpcy5pZ25vcmVWYWxpZGF0aW9uID0gZmFsc2U7XG4gICAgICAgIF90aGlzLmlzTmF2aWdhdGlvbkJ1dHRvblByZXNzZWQgPSBmYWxzZTtcbiAgICAgICAgX3RoaXMubW91c2VEb3duUGFnZSA9IG51bGw7XG4gICAgICAgIF90aGlzLmlzQ2FsY3VsYXRpbmdQcm9ncmVzc1RleHQgPSBmYWxzZTtcbiAgICAgICAgX3RoaXMuaXNGaXJzdFBhZ2VSZW5kZXJpbmcgPSB0cnVlO1xuICAgICAgICBfdGhpcy5pc0N1cnJlbnRQYWdlUmVuZGVyaW5nID0gdHJ1ZTtcbiAgICAgICAgX3RoaXMuaXNUcmlnZ2VySXNSdW5uaW5nID0gZmFsc2U7XG4gICAgICAgIF90aGlzLnRyaWdnZXJWYWx1ZXMgPSBudWxsO1xuICAgICAgICBfdGhpcy50cmlnZ2VyS2V5cyA9IG51bGw7XG4gICAgICAgIF90aGlzLmNvbmRpdGlvblZhbHVlcyA9IG51bGw7XG4gICAgICAgIF90aGlzLmlzVmFsdWVDaGFuZ2VkT25SdW5uaW5nQ29uZGl0aW9uID0gZmFsc2U7XG4gICAgICAgIF90aGlzLmNvbmRpdGlvblJ1bm5lckNvdW50ZXIgPSAwO1xuICAgICAgICBfdGhpcy5jb25kaXRpb25VcGRhdGVWaXNpYmxlSW5kZXhlcyA9IGZhbHNlO1xuICAgICAgICBfdGhpcy5jb25kaXRpb25Ob3RpZnlFbGVtZW50c09uQW55VmFsdWVPclZhcmlhYmxlQ2hhbmdlZCA9IGZhbHNlO1xuICAgICAgICBfdGhpcy5pc0VuZExvYWRpbmdGcm9tSnNvbiA9IG51bGw7XG4gICAgICAgIF90aGlzLnF1ZXN0aW9uSGFzaGVzID0ge1xuICAgICAgICAgICAgbmFtZXM6IHt9LFxuICAgICAgICAgICAgbmFtZXNJbnNlbnNpdGl2ZToge30sXG4gICAgICAgICAgICB2YWx1ZU5hbWVzOiB7fSxcbiAgICAgICAgICAgIHZhbHVlTmFtZXNJbnNlbnNpdGl2ZToge30sXG4gICAgICAgIH07XG4gICAgICAgIF90aGlzLm5lZWRSZW5kZXJJY29ucyA9IHRydWU7XG4gICAgICAgIF90aGlzLnNraXBwZWRQYWdlcyA9IFtdO1xuICAgICAgICBfdGhpcy5za2VsZXRvbkNvbXBvbmVudE5hbWUgPSBcInN2LXNrZWxldG9uXCI7XG4gICAgICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIFN1cnZleU1vZGVsLnN0eWxlc01hbmFnZXIgPSBuZXcgX3N0eWxlc21hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19bXCJTdHlsZXNNYW5hZ2VyXCJdKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGh0bWxDYWxsQmFjayA9IGZ1bmN0aW9uIChzdHIpIHsgcmV0dXJuIFwiPGgzPlwiICsgc3RyICsgXCI8L2gzPlwiOyB9O1xuICAgICAgICBfdGhpcy5jcmVhdGVIdG1sTG9jU3RyaW5nKFwiY29tcGxldGVkSHRtbFwiLCBcImNvbXBsZXRpbmdTdXJ2ZXlcIiwgaHRtbENhbGxCYWNrKTtcbiAgICAgICAgX3RoaXMuY3JlYXRlSHRtbExvY1N0cmluZyhcImNvbXBsZXRlZEJlZm9yZUh0bWxcIiwgXCJjb21wbGV0aW5nU3VydmV5QmVmb3JlXCIsIGh0bWxDYWxsQmFjaywgXCJjb21wbGV0ZWQtYmVmb3JlXCIpO1xuICAgICAgICBfdGhpcy5jcmVhdGVIdG1sTG9jU3RyaW5nKFwibG9hZGluZ0h0bWxcIiwgXCJsb2FkaW5nU3VydmV5XCIsIGh0bWxDYWxsQmFjaywgXCJsb2FkaW5nXCIpO1xuICAgICAgICBfdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcImxvZ29cIiwgX3RoaXMsIGZhbHNlKTtcbiAgICAgICAgX3RoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJzdGFydFN1cnZleVRleHRcIiwgX3RoaXMsIGZhbHNlLCB0cnVlKTtcbiAgICAgICAgX3RoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJwYWdlUHJldlRleHRcIiwgX3RoaXMsIGZhbHNlLCB0cnVlKTtcbiAgICAgICAgX3RoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJwYWdlTmV4dFRleHRcIiwgX3RoaXMsIGZhbHNlLCB0cnVlKTtcbiAgICAgICAgX3RoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJjb21wbGV0ZVRleHRcIiwgX3RoaXMsIGZhbHNlLCB0cnVlKTtcbiAgICAgICAgX3RoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJwcmV2aWV3VGV4dFwiLCBfdGhpcywgZmFsc2UsIHRydWUpO1xuICAgICAgICBfdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcImVkaXRUZXh0XCIsIF90aGlzLCBmYWxzZSwgdHJ1ZSk7XG4gICAgICAgIF90aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwicXVlc3Rpb25UaXRsZVRlbXBsYXRlXCIsIF90aGlzLCB0cnVlKTtcbiAgICAgICAgX3RoaXMudGltZXJNb2RlbFZhbHVlID0gbmV3IF9zdXJ2ZXlUaW1lck1vZGVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fW1wiU3VydmV5VGltZXJNb2RlbFwiXShfdGhpcyk7XG4gICAgICAgIF90aGlzLnRpbWVyTW9kZWxWYWx1ZS5vblRpbWVyID0gZnVuY3Rpb24gKHBhZ2UpIHtcbiAgICAgICAgICAgIF90aGlzLmRvVGltZXIocGFnZSk7XG4gICAgICAgIH07XG4gICAgICAgIF90aGlzLmNyZWF0ZU5ld0FycmF5KFwicGFnZXNcIiwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBfdGhpcy5kb09uUGFnZUFkZGVkKHZhbHVlKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBfdGhpcy5kb09uUGFnZVJlbW92ZWQodmFsdWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgX3RoaXMuY3JlYXRlTmV3QXJyYXkoXCJ0cmlnZ2Vyc1wiLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHZhbHVlLnNldE93bmVyKF90aGlzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIF90aGlzLmNyZWF0ZU5ld0FycmF5KFwiY2FsY3VsYXRlZFZhbHVlc1wiLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHZhbHVlLnNldE93bmVyKF90aGlzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIF90aGlzLmNyZWF0ZU5ld0FycmF5KFwiY29tcGxldGVkSHRtbE9uQ29uZGl0aW9uXCIsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdmFsdWUubG9jT3duZXIgPSBfdGhpcztcbiAgICAgICAgfSk7XG4gICAgICAgIF90aGlzLmNyZWF0ZU5ld0FycmF5KFwibmF2aWdhdGVUb1VybE9uQ29uZGl0aW9uXCIsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdmFsdWUubG9jT3duZXIgPSBfdGhpcztcbiAgICAgICAgfSk7XG4gICAgICAgIF90aGlzLnJlZ2lzdGVyUHJvcGVydHlDaGFuZ2VkSGFuZGxlcnMoW1wibG9jYWxlXCJdLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5vblN1cnZleUxvY2FsZUNoYW5nZWQoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIF90aGlzLnJlZ2lzdGVyUHJvcGVydHlDaGFuZ2VkSGFuZGxlcnMoW1wiZmlyc3RQYWdlSXNTdGFydGVkXCJdLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5vbkZpcnN0UGFnZUlzU3RhcnRlZENoYW5nZWQoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIF90aGlzLnJlZ2lzdGVyUHJvcGVydHlDaGFuZ2VkSGFuZGxlcnMoW1wibW9kZVwiXSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMub25Nb2RlQ2hhbmdlZCgpO1xuICAgICAgICB9KTtcbiAgICAgICAgX3RoaXMucmVnaXN0ZXJQcm9wZXJ0eUNoYW5nZWRIYW5kbGVycyhbXCJwcm9ncmVzc0JhclR5cGVcIl0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLnVwZGF0ZVByb2dyZXNzVGV4dCgpO1xuICAgICAgICB9KTtcbiAgICAgICAgX3RoaXMucmVnaXN0ZXJQcm9wZXJ0eUNoYW5nZWRIYW5kbGVycyhbXCJxdWVzdGlvblN0YXJ0SW5kZXhcIiwgXCJyZXF1aXJlZFRleHRcIiwgXCJxdWVzdGlvblRpdGxlUGF0dGVyblwiXSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMucmVzZXRWaXNpYmxlSW5kZXhlcygpO1xuICAgICAgICB9KTtcbiAgICAgICAgX3RoaXMucmVnaXN0ZXJQcm9wZXJ0eUNoYW5nZWRIYW5kbGVycyhbXCJpc0xvYWRpbmdcIiwgXCJpc0NvbXBsZXRlZFwiLCBcImlzQ29tcGxldGVkQmVmb3JlXCIsIFwibW9kZVwiLCBcImlzU3RhcnRlZFN0YXRlXCIsIFwiY3VycmVudFBhZ2VcIl0sIGZ1bmN0aW9uICgpIHsgX3RoaXMudXBkYXRlU3RhdGUoKTsgfSk7XG4gICAgICAgIF90aGlzLnJlZ2lzdGVyUHJvcGVydHlDaGFuZ2VkSGFuZGxlcnMoW1wic3RhdGVcIiwgXCJjdXJyZW50UGFnZVwiLCBcInNob3dQcmV2aWV3QmVmb3JlQ29tcGxldGVcIl0sIGZ1bmN0aW9uICgpIHsgX3RoaXMub25TdGF0ZUFuZEN1cnJlbnRQYWdlQ2hhbmdlZCgpOyB9KTtcbiAgICAgICAgX3RoaXMucmVnaXN0ZXJQcm9wZXJ0eUNoYW5nZWRIYW5kbGVycyhbXCJsb2dvXCIsIFwibG9nb1Bvc2l0aW9uXCJdLCBmdW5jdGlvbiAoKSB7IF90aGlzLnVwZGF0ZUhhc0xvZ28oKTsgfSk7XG4gICAgICAgIF90aGlzLnJlZ2lzdGVyUHJvcGVydHlDaGFuZ2VkSGFuZGxlcnMoW1wiYmFja2dyb3VuZEltYWdlXCJdLCBmdW5jdGlvbiAoKSB7IF90aGlzLnVwZGF0ZVJlbmRlckJhY2tncm91bmRJbWFnZSgpOyB9KTtcbiAgICAgICAgX3RoaXMub25HZXRRdWVzdGlvbk5vLm9uQ2FsbGJhY2tzQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLnJlc2V0VmlzaWJsZUluZGV4ZXMoKTtcbiAgICAgICAgfTtcbiAgICAgICAgX3RoaXMub25Qcm9ncmVzc1RleHQub25DYWxsYmFja3NDaGFuZ2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMudXBkYXRlUHJvZ3Jlc3NUZXh0KCk7XG4gICAgICAgIH07XG4gICAgICAgIF90aGlzLm9uVGV4dE1hcmtkb3duLm9uQ2FsbGJhY2tzQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLmxvY1N0cnNDaGFuZ2VkKCk7XG4gICAgICAgIH07XG4gICAgICAgIF90aGlzLm9uUHJvY2Vzc0h0bWwub25DYWxsYmFja3NDaGFuZ2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMubG9jU3Ryc0NoYW5nZWQoKTtcbiAgICAgICAgfTtcbiAgICAgICAgX3RoaXMub25HZXRRdWVzdGlvblRpdGxlLm9uQ2FsbGJhY2tzQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLmxvY1N0cnNDaGFuZ2VkKCk7XG4gICAgICAgIH07XG4gICAgICAgIF90aGlzLm9uVXBkYXRlUGFnZUNzc0NsYXNzZXMub25DYWxsYmFja3NDaGFuZ2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMuY3VycmVudFBhZ2UgJiYgX3RoaXMuY3VycmVudFBhZ2UudXBkYXRlRWxlbWVudENzcygpO1xuICAgICAgICB9O1xuICAgICAgICBfdGhpcy5vblVwZGF0ZVBhbmVsQ3NzQ2xhc3Nlcy5vbkNhbGxiYWNrc0NoYW5nZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5jdXJyZW50UGFnZSAmJiBfdGhpcy5jdXJyZW50UGFnZS51cGRhdGVFbGVtZW50Q3NzKCk7XG4gICAgICAgIH07XG4gICAgICAgIF90aGlzLm9uVXBkYXRlUXVlc3Rpb25Dc3NDbGFzc2VzLm9uQ2FsbGJhY2tzQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLmN1cnJlbnRQYWdlICYmIF90aGlzLmN1cnJlbnRQYWdlLnVwZGF0ZUVsZW1lbnRDc3MoKTtcbiAgICAgICAgfTtcbiAgICAgICAgX3RoaXMub25TaG93aW5nQ2hvaWNlSXRlbS5vbkNhbGxiYWNrc0NoYW5nZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5yZWJ1aWxkUXVlc3Rpb25DaG9pY2VzKCk7XG4gICAgICAgIH07XG4gICAgICAgIF90aGlzLm5hdmlnYXRpb25CYXJWYWx1ZSA9IF90aGlzLmNyZWF0ZU5hdmlnYXRpb25CYXIoKTtcbiAgICAgICAgX3RoaXMubmF2aWdhdGlvbkJhci5sb2NPd25lciA9IF90aGlzO1xuICAgICAgICBfdGhpcy5vbkJlZm9yZUNyZWF0aW5nKCk7XG4gICAgICAgIGlmIChqc29uT2JqKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGpzb25PYmogPT09IFwic3RyaW5nXCIgfHwganNvbk9iaiBpbnN0YW5jZW9mIFN0cmluZykge1xuICAgICAgICAgICAgICAgIGpzb25PYmogPSBKU09OLnBhcnNlKGpzb25PYmopO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGpzb25PYmogJiYganNvbk9iai5jbGllbnRJZCkge1xuICAgICAgICAgICAgICAgIF90aGlzLmNsaWVudElkID0ganNvbk9iai5jbGllbnRJZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF90aGlzLmZyb21KU09OKGpzb25PYmopO1xuICAgICAgICAgICAgaWYgKF90aGlzLnN1cnZleUlkKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMubG9hZFN1cnZleUZyb21TZXJ2aWNlKF90aGlzLnN1cnZleUlkLCBfdGhpcy5jbGllbnRJZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgX3RoaXMub25DcmVhdGluZygpO1xuICAgICAgICBpZiAoISFyZW5kZXJlZEVsZW1lbnQpIHtcbiAgICAgICAgICAgIF90aGlzLnJlbmRlcihyZW5kZXJlZEVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICAgIF90aGlzLnVwZGF0ZUNzcygpO1xuICAgICAgICBfdGhpcy5zZXRDYWxjdWxhdGVkV2lkdGhNb2RlVXBkYXRlcigpO1xuICAgICAgICBfdGhpcy5ub3RpZmllciA9IG5ldyBfbm90aWZpZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE5X19bXCJOb3RpZmllclwiXShfdGhpcy5jc3Muc2F2ZURhdGEpO1xuICAgICAgICBfdGhpcy5ub3RpZmllci5hZGRBY3Rpb24oX3RoaXMuY3JlYXRlVHJ5QWdhaW5BY3Rpb24oKSwgXCJlcnJvclwiKTtcbiAgICAgICAgX3RoaXMub25Qb3B1cFZpc2libGVDaGFuZ2VkLmFkZChmdW5jdGlvbiAoXywgb3B0KSB7XG4gICAgICAgICAgICBpZiAob3B0LnZpc2libGUpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5vblNjcm9sbENhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBvcHQucG9wdXAudG9nZ2xlVmlzaWJpbGl0eSgpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5vblNjcm9sbENhbGxiYWNrID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgX3RoaXMubGF5b3V0RWxlbWVudHMucHVzaCh7XG4gICAgICAgICAgICBpZDogXCJ0aW1lcnBhbmVsXCIsXG4gICAgICAgICAgICB0ZW1wbGF0ZTogXCJzdXJ2ZXktdGltZXJwYW5lbFwiLFxuICAgICAgICAgICAgY29tcG9uZW50OiBcInN2LXRpbWVycGFuZWxcIixcbiAgICAgICAgICAgIGRhdGE6IF90aGlzLnRpbWVyTW9kZWxcbiAgICAgICAgfSk7XG4gICAgICAgIF90aGlzLmxheW91dEVsZW1lbnRzLnB1c2goe1xuICAgICAgICAgICAgaWQ6IFwicHJvZ3Jlc3MtYnV0dG9uc1wiLFxuICAgICAgICAgICAgY29tcG9uZW50OiBcInN2LXByb2dyZXNzLWJ1dHRvbnNcIixcbiAgICAgICAgICAgIGRhdGE6IF90aGlzXG4gICAgICAgIH0pO1xuICAgICAgICBfdGhpcy5sYXlvdXRFbGVtZW50cy5wdXNoKHtcbiAgICAgICAgICAgIGlkOiBcInByb2dyZXNzLXF1ZXN0aW9uc1wiLFxuICAgICAgICAgICAgY29tcG9uZW50OiBcInN2LXByb2dyZXNzLXF1ZXN0aW9uc1wiLFxuICAgICAgICAgICAgZGF0YTogX3RoaXNcbiAgICAgICAgfSk7XG4gICAgICAgIF90aGlzLmxheW91dEVsZW1lbnRzLnB1c2goe1xuICAgICAgICAgICAgaWQ6IFwicHJvZ3Jlc3MtcGFnZXNcIixcbiAgICAgICAgICAgIGNvbXBvbmVudDogXCJzdi1wcm9ncmVzcy1wYWdlc1wiLFxuICAgICAgICAgICAgZGF0YTogX3RoaXNcbiAgICAgICAgfSk7XG4gICAgICAgIF90aGlzLmxheW91dEVsZW1lbnRzLnB1c2goe1xuICAgICAgICAgICAgaWQ6IFwicHJvZ3Jlc3MtY29ycmVjdHF1ZXN0aW9uc1wiLFxuICAgICAgICAgICAgY29tcG9uZW50OiBcInN2LXByb2dyZXNzLWNvcnJlY3RxdWVzdGlvbnNcIixcbiAgICAgICAgICAgIGRhdGE6IF90aGlzXG4gICAgICAgIH0pO1xuICAgICAgICBfdGhpcy5sYXlvdXRFbGVtZW50cy5wdXNoKHtcbiAgICAgICAgICAgIGlkOiBcInByb2dyZXNzLXJlcXVpcmVkcXVlc3Rpb25zXCIsXG4gICAgICAgICAgICBjb21wb25lbnQ6IFwic3YtcHJvZ3Jlc3MtcmVxdWlyZWRxdWVzdGlvbnNcIixcbiAgICAgICAgICAgIGRhdGE6IF90aGlzXG4gICAgICAgIH0pO1xuICAgICAgICBfdGhpcy5hZGRMYXlvdXRFbGVtZW50KHtcbiAgICAgICAgICAgIGlkOiBcInRvYy1uYXZpZ2F0aW9uXCIsXG4gICAgICAgICAgICBjb21wb25lbnQ6IFwic3YtcHJvZ3Jlc3MtdG9jXCIsXG4gICAgICAgICAgICBkYXRhOiBfdGhpc1xuICAgICAgICB9KTtcbiAgICAgICAgX3RoaXMubGF5b3V0RWxlbWVudHMucHVzaCh7XG4gICAgICAgICAgICBpZDogXCJuYXZpZ2F0aW9uYnV0dG9uc1wiLFxuICAgICAgICAgICAgY29tcG9uZW50OiBcInN2LWFjdGlvbi1iYXJcIixcbiAgICAgICAgICAgIGRhdGE6IF90aGlzLm5hdmlnYXRpb25CYXJcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleU1vZGVsLCBcImNzc1R5cGVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBfZGVmYXVsdENzc19kZWZhdWx0VjJDc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1tcInN1cnZleUNzc1wiXS5jdXJyZW50VHlwZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIF9zdHlsZXNtYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fW1wiU3R5bGVzTWFuYWdlclwiXS5hcHBseVRoZW1lKHZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwicGxhdGZvcm1OYW1lXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gU3VydmV5TW9kZWwucGxhdGZvcm07XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5TW9kZWwucHJvdG90eXBlLCBcImNvbW1lbnRTdWZmaXhcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogQSBzdWZmaXggYWRkZWQgdG8gdGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRoYXQgc3RvcmVzIGNvbW1lbnRzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBEZWZhdWx0IHZhbHVlOiBcIi1Db21tZW50XCJcbiAgICAgICAgICpcbiAgICAgICAgICogTWFueSBxdWVzdGlvbiB0eXBlcyBhbGxvdyByZXNwb25kZW50cyB0byBsZWF2ZSBjb21tZW50cy4gVG8gZW5hYmxlIHRoaXMgZnVuY3Rpb25hbGl0eSwgc2V0IGEgcXVlc3Rpb24ncyBbYHNob3dDb21tZW50QXJlYWBdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vYXBpLXJlZmVyZW5jZS9jaGVja2JveC1xdWVzdGlvbi1tb2RlbCNzaG93Q29tbWVudEFyZWEpIHByb3BlcnR5IHRvIGB0cnVlYC4gQ29tbWVudCB2YWx1ZXMgYXJlIHNhdmVkIGluIGEgc2VwYXJhdGUgcHJvcGVydHkuIFRoZSBwcm9wZXJ0eSBuYW1lIGlzIGNvbXBvc2VkIG9mIHRoZSBxdWVzdGlvbiBgbmFtZWAgYW5kIGBjb21tZW50U3VmZml4YC5cbiAgICAgICAgICpcbiAgICAgICAgICogUmVzcG9uZGVudHMgY2FuIGFsc28gbGVhdmUgY29tbWVudHMgd2hlbiB0aGV5IHNlbGVjdCBcIk90aGVyXCIgaW4gY2hvaWNlLWJhc2VkIHF1ZXN0aW9ucywgc3VjaCBhcyBEcm9wZG93biBvciBDaGVja2JveGVzLiBUaGUgcHJvcGVydHkgbmFtZSBmb3IgdGhlIGNvbW1lbnQgdmFsdWUgaXMgY29tcG9zZWQgYWNjb3JkaW5nIHRvIHRoZSBzYW1lIHJ1bGVzLiBIb3dldmVyLCB5b3UgY2FuIHVzZSB0aGUgcXVlc3Rpb24gYG5hbWVgIGFzIGEga2V5IHRvIHN0b3JlIHRoZSBjb21tZW50IHZhbHVlIGluc3RlYWQuIERpc2FibGUgdGhlIFtgc3RvcmVPdGhlcnNBc0NvbW1lbnRgXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2Uvc3VydmV5LWRhdGEtbW9kZWwjc3RvcmVPdGhlcnNBc0NvbW1lbnQpIHByb3BlcnR5IGluIHRoaXMgY2FzZS5cbiAgICAgICAgICpcbiAgICAgICAgICogW1ZpZXcgRGVtb10oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZXhhbXBsZXMvY3JlYXRlLWNoZWNrYm94ZXMtcXVlc3Rpb24taW4tamF2YXNjcmlwdC8gKGxpbmtTdHlsZSkpXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBfc2V0dGluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X19bXCJzZXR0aW5nc1wiXS5jb21tZW50U3VmZml4O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIF9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfX1tcInNldHRpbmdzXCJdLmNvbW1lbnRTdWZmaXggPSB2YWw7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5TW9kZWwucHJvdG90eXBlLCBcImNvbW1lbnRQcmVmaXhcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbW1lbnRTdWZmaXg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5jb21tZW50U3VmZml4ID0gdmFsO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLnByb2Nlc3NDbG9zZWRQb3B1cCA9IGZ1bmN0aW9uIChxdWVzdGlvbiwgcG9wdXBNb2RlbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5jcmVhdGVUcnlBZ2FpbkFjdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlkOiBcInNhdmUtYWdhaW5cIixcbiAgICAgICAgICAgIHRpdGxlOiB0aGlzLmdldExvY2FsaXphdGlvblN0cmluZyhcInNhdmVBZ2FpbkJ1dHRvblwiKSxcbiAgICAgICAgICAgIGFjdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmIChfdGhpcy5pc0NvbXBsZXRlZCkge1xuICAgICAgICAgICAgICAgICAgICBfdGhpcy5zYXZlRGF0YU9uQ29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIF90aGlzLmRvQ29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuY3JlYXRlSHRtbExvY1N0cmluZyA9IGZ1bmN0aW9uIChuYW1lLCBsb2NOYW1lLCBmdW5jLCByZWFzb24pIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIHJlcyA9IHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcobmFtZSwgdGhpcywgZmFsc2UsIGxvY05hbWUpO1xuICAgICAgICByZXMub25HZXRMb2NhbGl6YXRpb25UZXh0Q2FsbGJhY2sgPSBmdW5jO1xuICAgICAgICBpZiAocmVhc29uKSB7XG4gICAgICAgICAgICByZXMub25HZXRUZXh0Q2FsbGJhY2sgPSBmdW5jdGlvbiAoc3RyKSB7IHJldHVybiBfdGhpcy5wcm9jZXNzSHRtbChzdHIsIHJlYXNvbik7IH07XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5nZXRUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gXCJzdXJ2ZXlcIjtcbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5vblByb3BlcnR5VmFsdWVDaGFuZ2VkID0gZnVuY3Rpb24gKG5hbWUsIG9sZFZhbHVlLCBuZXdWYWx1ZSkge1xuICAgICAgICBpZiAobmFtZSA9PT0gXCJxdWVzdGlvbnNPblBhZ2VNb2RlXCIpIHtcbiAgICAgICAgICAgIHRoaXMub25RdWVzdGlvbnNPblBhZ2VNb2RlQ2hhbmdlZChvbGRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwicGFnZXNcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJucyBhbiBhcnJheSBvZiBhbGwgcGFnZXMgaW4gdGhlIHN1cnZleS5cbiAgICAgICAgICpcbiAgICAgICAgICogVG8gZ2V0IGFuIGFycmF5IG9mIG9ubHkgdmlzaWJsZSBwYWdlcywgdXNlIHRoZSBbYHZpc2libGVQYWdlc2BdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vYXBpLXJlZmVyZW5jZS9zdXJ2ZXktZGF0YS1tb2RlbCN2aXNpYmxlUGFnZXMpIGFycmF5LlxuICAgICAgICAgKiBAc2VlIFBhZ2VNb2RlbFxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicGFnZXNcIik7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICAgICAgaWYgKGVsZW1lbnQgPT09IHZvaWQgMCkgeyBlbGVtZW50ID0gbnVsbDsgfVxuICAgICAgICBpZiAodGhpcy5yZW5kZXJDYWxsYmFjaykge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJDYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUudXBkYXRlU3VydmV5ID0gZnVuY3Rpb24gKG5ld1Byb3BzLCBvbGRQcm9wcykge1xuICAgICAgICB2YXIgX2xvb3BfMSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChrZXkgPT0gXCJtb2RlbFwiIHx8IGtleSA9PSBcImNoaWxkcmVuXCIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiY29udGludWVcIjtcbiAgICAgICAgICAgIGlmIChrZXkuaW5kZXhPZihcIm9uXCIpID09IDAgJiYgdGhpc18xW2tleV0gJiYgdGhpc18xW2tleV0uYWRkKSB7XG4gICAgICAgICAgICAgICAgdmFyIGZ1bmNCb2R5XzEgPSBuZXdQcm9wc1trZXldO1xuICAgICAgICAgICAgICAgIHZhciBmdW5jID0gZnVuY3Rpb24gKHNlbmRlciwgb3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICBmdW5jQm9keV8xKHNlbmRlciwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB0aGlzXzFba2V5XS5hZGQoZnVuYyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzXzFba2V5XSA9IG5ld1Byb3BzW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHZhciB0aGlzXzEgPSB0aGlzO1xuICAgICAgICBmb3IgKHZhciBrZXkgaW4gbmV3UHJvcHMpIHtcbiAgICAgICAgICAgIF9sb29wXzEoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobmV3UHJvcHMgJiYgbmV3UHJvcHMuZGF0YSlcbiAgICAgICAgICAgIHRoaXMub25WYWx1ZUNoYW5nZWQuYWRkKGZ1bmN0aW9uIChzZW5kZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBuZXdQcm9wcy5kYXRhW29wdGlvbnMubmFtZV0gPSBvcHRpb25zLnZhbHVlO1xuICAgICAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuZ2V0Q3NzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jc3M7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUudXBkYXRlQ29tcGxldGVkUGFnZUNzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5jb250YWluZXJDc3MgPSB0aGlzLmNzcy5jb250YWluZXI7XG4gICAgICAgIHRoaXMuY29tcGxldGVkQ3NzID0gbmV3IF91dGlsc19jc3NDbGFzc0J1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE4X19bXCJDc3NDbGFzc0J1aWxkZXJcIl0oKS5hcHBlbmQodGhpcy5jc3MuYm9keSlcbiAgICAgICAgICAgIC5hcHBlbmQodGhpcy5jc3MuY29tcGxldGVkUGFnZSkudG9TdHJpbmcoKTsgLy8gZm9yIGNvbXBsZXRlZCBwYWdlXG4gICAgICAgIHRoaXMuY29tcGxldGVkQmVmb3JlQ3NzID0gbmV3IF91dGlsc19jc3NDbGFzc0J1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE4X19bXCJDc3NDbGFzc0J1aWxkZXJcIl0oKVxuICAgICAgICAgICAgLmFwcGVuZCh0aGlzLmNzcy5ib2R5KVxuICAgICAgICAgICAgLmFwcGVuZCh0aGlzLmNzcy5jb21wbGV0ZWRCZWZvcmVQYWdlKVxuICAgICAgICAgICAgLnRvU3RyaW5nKCk7XG4gICAgICAgIHRoaXMubG9hZGluZ0JvZHlDc3MgPSBuZXcgX3V0aWxzX2Nzc0NsYXNzQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMThfX1tcIkNzc0NsYXNzQnVpbGRlclwiXSgpXG4gICAgICAgICAgICAuYXBwZW5kKHRoaXMuY3NzLmJvZHkpXG4gICAgICAgICAgICAuYXBwZW5kKHRoaXMuY3NzLmJvZHlMb2FkaW5nKVxuICAgICAgICAgICAgLnRvU3RyaW5nKCk7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUudXBkYXRlQ3NzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnJvb3RDc3MgPSB0aGlzLmdldFJvb3RDc3MoKTtcbiAgICAgICAgdGhpcy51cGRhdGVOYXZpZ2F0aW9uQ3NzKCk7XG4gICAgICAgIHRoaXMudXBkYXRlQ29tcGxldGVkUGFnZUNzcygpO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleU1vZGVsLnByb3RvdHlwZSwgXCJjc3NcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogR2V0cyBvciBzZXRzIGFuIG9iamVjdCBpbiB3aGljaCBrZXlzIGFyZSBVSSBlbGVtZW50cyBhbmQgdmFsdWVzIGFyZSBDU1MgY2xhc3NlcyBhcHBsaWVkIHRvIHRoZW0uXG4gICAgICAgICAqXG4gICAgICAgICAqIFtWaWV3IERlbW9dKC9mb3JtLWxpYnJhcnkvZXhhbXBsZXMvY3VzdG9taXplLXN1cnZleS13aXRoLWNzcy8gKGxpbmtTdHlsZSkpXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5jc3NWYWx1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY3NzVmFsdWUgPSB7fTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvcHlDc3NDbGFzc2VzKHRoaXMuY3NzVmFsdWUsIF9kZWZhdWx0Q3NzX2RlZmF1bHRWMkNzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fW1wic3VydmV5Q3NzXCJdLmdldENzcygpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNzc1ZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRDc3ModmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLnNldENzcyA9IGZ1bmN0aW9uICh2YWx1ZSwgbmVlZE1lcmdlKSB7XG4gICAgICAgIGlmIChuZWVkTWVyZ2UgPT09IHZvaWQgMCkgeyBuZWVkTWVyZ2UgPSB0cnVlOyB9XG4gICAgICAgIGlmIChuZWVkTWVyZ2UpIHtcbiAgICAgICAgICAgIHRoaXMubWVyZ2VWYWx1ZXModmFsdWUsIHRoaXMuY3NzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY3NzVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZUNzcygpO1xuICAgICAgICB0aGlzLnVwZGF0ZUVsZW1lbnRDc3MoZmFsc2UpO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleU1vZGVsLnByb3RvdHlwZSwgXCJjc3NUaXRsZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3NzLnRpdGxlO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleU1vZGVsLnByb3RvdHlwZSwgXCJjc3NOYXZpZ2F0aW9uQ29tcGxldGVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldE5hdmlnYXRpb25Dc3ModGhpcy5jc3NTdXJ2ZXlOYXZpZ2F0aW9uQnV0dG9uLCB0aGlzLmNzcy5uYXZpZ2F0aW9uLmNvbXBsZXRlKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwiY3NzTmF2aWdhdGlvblByZXZpZXdcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldE5hdmlnYXRpb25Dc3ModGhpcy5jc3NTdXJ2ZXlOYXZpZ2F0aW9uQnV0dG9uLCB0aGlzLmNzcy5uYXZpZ2F0aW9uLnByZXZpZXcpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleU1vZGVsLnByb3RvdHlwZSwgXCJjc3NOYXZpZ2F0aW9uRWRpdFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TmF2aWdhdGlvbkNzcyh0aGlzLmNzcy5uYXZpZ2F0aW9uQnV0dG9uLCB0aGlzLmNzcy5uYXZpZ2F0aW9uLmVkaXQpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleU1vZGVsLnByb3RvdHlwZSwgXCJjc3NOYXZpZ2F0aW9uUHJldlwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TmF2aWdhdGlvbkNzcyh0aGlzLmNzc1N1cnZleU5hdmlnYXRpb25CdXR0b24sIHRoaXMuY3NzLm5hdmlnYXRpb24ucHJldik7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5TW9kZWwucHJvdG90eXBlLCBcImNzc05hdmlnYXRpb25TdGFydFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TmF2aWdhdGlvbkNzcyh0aGlzLmNzc1N1cnZleU5hdmlnYXRpb25CdXR0b24sIHRoaXMuY3NzLm5hdmlnYXRpb24uc3RhcnQpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleU1vZGVsLnByb3RvdHlwZSwgXCJjc3NOYXZpZ2F0aW9uTmV4dFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TmF2aWdhdGlvbkNzcyh0aGlzLmNzc1N1cnZleU5hdmlnYXRpb25CdXR0b24sIHRoaXMuY3NzLm5hdmlnYXRpb24ubmV4dCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5TW9kZWwucHJvdG90eXBlLCBcImNzc1N1cnZleU5hdmlnYXRpb25CdXR0b25cIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgX3V0aWxzX2Nzc0NsYXNzQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMThfX1tcIkNzc0NsYXNzQnVpbGRlclwiXSgpLmFwcGVuZCh0aGlzLmNzcy5uYXZpZ2F0aW9uQnV0dG9uKS5hcHBlbmQodGhpcy5jc3MuYm9keU5hdmlnYXRpb25CdXR0b24pLnRvU3RyaW5nKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5TW9kZWwucHJvdG90eXBlLCBcImJvZHlDc3NcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgX3V0aWxzX2Nzc0NsYXNzQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMThfX1tcIkNzc0NsYXNzQnVpbGRlclwiXSgpLmFwcGVuZCh0aGlzLmNzcy5ib2R5KVxuICAgICAgICAgICAgICAgIC5hcHBlbmQodGhpcy5jc3MuYm9keVdpdGhUaW1lciwgdGhpcy5zaG93VGltZXJQYW5lbCAhPSBcIm5vbmVcIiAmJiB0aGlzLnN0YXRlID09PSBcInJ1bm5pbmdcIilcbiAgICAgICAgICAgICAgICAuYXBwZW5kKHRoaXMuY3NzLmJvZHkgKyBcIi0tXCIgKyB0aGlzLmNhbGN1bGF0ZWRXaWR0aE1vZGUpLnRvU3RyaW5nKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5TW9kZWwucHJvdG90eXBlLCBcImJvZHlDb250YWluZXJDc3NcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNzcy5ib2R5Q29udGFpbmVyO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLmdldE5hdmlnYXRpb25Dc3MgPSBmdW5jdGlvbiAobWFpbiwgYnRuKSB7XG4gICAgICAgIHJldHVybiBuZXcgX3V0aWxzX2Nzc0NsYXNzQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMThfX1tcIkNzc0NsYXNzQnVpbGRlclwiXSgpLmFwcGVuZChtYWluKVxuICAgICAgICAgICAgLmFwcGVuZChidG4pLnRvU3RyaW5nKCk7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5TW9kZWwucHJvdG90eXBlLCBcImxhenlSZW5kZXJpbmdcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHdoZXRoZXIgdG8gZW5hYmxlIGxhenkgcmVuZGVyaW5nLlxuICAgICAgICAgKlxuICAgICAgICAgKiBJbiBkZWZhdWx0IG1vZGUsIGEgc3VydmV5IHJlbmRlcnMgdGhlIGVudGlyZSBjdXJyZW50IHBhZ2UuIFdpdGggbGF6eSByZW5kZXJpbmcsIHRoZSBzdXJ2ZXkgcmVuZGVycyB0aGUgcGFnZSBncmFkdWFsbHkgYXMgYSB1c2VyIHNjcm9sbHMgaXQuIFRoaXMgaGVscHMgcmVkdWNlIHN1cnZleSBzdGFydHVwIHRpbWUgYW5kIG9wcmltaXplcyBsYXJnZSBzdXJ2ZXlzIGZvciBsb3ctZW5kIGRldmljZXMuXG4gICAgICAgICAqXG4gICAgICAgICAqIERlZmF1bHQgdmFsdWU6IGBmYWxzZWBcbiAgICAgICAgICpcbiAgICAgICAgICogW1ZpZXcgRGVtb10oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZXhhbXBsZXMvc3VydmV5LWxhenkvIChsaW5rU3R5bGUpKVxuICAgICAgICAgKlxuICAgICAgICAgKiA+IFRoaXMgaXMgYW4gZXhwZXJpbWVudGFsIGZlYXR1cmUgdGhhdCBtYXkgbm90IHdvcmsgcHJvcGVybHkgaW4gY2VydGFpbiBjYXNlcy5cbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubGF6eVJlbmRlcmluZ1ZhbHVlID09PSB0cnVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmxhenlSZW5kZXJpbmcgPT09IHZhbClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB0aGlzLmxhenlSZW5kZXJpbmdWYWx1ZSA9IHZhbDtcbiAgICAgICAgICAgIHZhciBwYWdlID0gdGhpcy5jdXJyZW50UGFnZTtcbiAgICAgICAgICAgIGlmICghIXBhZ2UpIHtcbiAgICAgICAgICAgICAgICBwYWdlLnVwZGF0ZVJvd3MoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwiaXNMYXp5UmVuZGVyaW5nXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sYXp5UmVuZGVyaW5nIHx8IF9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfX1tcInNldHRpbmdzXCJdLmxhenlSZW5kZXIuZW5hYmxlZDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS51cGRhdGVMYXp5UmVuZGVyaW5nUm93c09uUmVtb3ZpbmdFbGVtZW50cyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzTGF6eVJlbmRlcmluZylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIHBhZ2UgPSB0aGlzLmN1cnJlbnRQYWdlO1xuICAgICAgICBpZiAoISFwYWdlKSB7XG4gICAgICAgICAgICBPYmplY3QoX3V0aWxzX3V0aWxzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNV9fW1wic2Nyb2xsRWxlbWVudEJ5Q2hpbGRJZFwiXSkocGFnZS5pZCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwidHJpZ2dlcnNcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogQSBsaXN0IG9mIHRyaWdnZXJzIGluIHRoZSBzdXJ2ZXkuXG4gICAgICAgICAqXG4gICAgICAgICAqIFtDb25kaXRpb25hbCBTdXJ2ZXkgTG9naWMgKFRyaWdnZXJzKV0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9kZXNpZ24tc3VydmV5L2NvbmRpdGlvbmFsLWxvZ2ljI2NvbmRpdGlvbmFsLXN1cnZleS1sb2dpYy10cmlnZ2VycyAobGlua1N0eWxlKSlcbiAgICAgICAgICogQHNlZSBydW5UcmlnZ2Vyc1xuICAgICAgICAgKiBAc2VlIG9uVHJpZ2dlckV4ZWN1dGVkXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ0cmlnZ2Vyc1wiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJ0cmlnZ2Vyc1wiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleU1vZGVsLnByb3RvdHlwZSwgXCJjYWxjdWxhdGVkVmFsdWVzXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFuIGFycmF5IG9mIFtjYWxjdWxhdGVkIHZhbHVlc10oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9kZXNpZ24tc3VydmV5LWNvbmRpdGlvbmFsLWxvZ2ljI2NhbGN1bGF0ZWQtdmFsdWVzKS5cbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNhbGN1bGF0ZWRWYWx1ZXNcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY2FsY3VsYXRlZFZhbHVlc1wiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleU1vZGVsLnByb3RvdHlwZSwgXCJzdXJ2ZXlJZFwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgaWRlbnRpZmllciBvZiBhIHN1cnZleSBKU09OIHNjaGVtYSB0byBsb2FkIGZyb20gW1N1cnZleUpTIFNlcnZpY2VdKGh0dHBzOi8vYXBpLnN1cnZleWpzLmlvKS5cbiAgICAgICAgICpcbiAgICAgICAgICogUmVmZXIgdG8gdGhlIGZvbGxvd2luZyBoZWxwIHRvcGljIGZvciBtb3JlIGluZm9ybWF0aW9uOiBbU3RvcmUgU3VydmV5IFJlc3VsdHMgaW4gdGhlIFN1cnZleUpTIFNlcnZpY2VdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vaGFuZGxlLXN1cnZleS1yZXN1bHRzLXN0b3JlI3N0b3JlLXN1cnZleS1yZXN1bHRzLWluLXRoZS1zdXJ2ZXlqcy1zZXJ2aWNlKS5cbiAgICAgICAgICogQHNlZSBsb2FkU3VydmV5RnJvbVNlcnZpY2VcbiAgICAgICAgICogQHNlZSBvbkxvYWRlZFN1cnZleUZyb21TZXJ2aWNlXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzdXJ2ZXlJZFwiLCBcIlwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzdXJ2ZXlJZFwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleU1vZGVsLnByb3RvdHlwZSwgXCJzdXJ2ZXlQb3N0SWRcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogQW4gaWRlbnRpZmllciB1c2VkIHRvIHNhdmUgc3VydmV5IHJlc3VsdHMgdG8gW1N1cnZleUpTIFNlcnZpY2VdKGh0dHBzOi8vYXBpLnN1cnZleWpzLmlvKS5cbiAgICAgICAgICpcbiAgICAgICAgICogUmVmZXIgdG8gdGhlIGZvbGxvd2luZyBoZWxwIHRvcGljIGZvciBtb3JlIGluZm9ybWF0aW9uOiBbU3RvcmUgU3VydmV5IFJlc3VsdHMgaW4gdGhlIFN1cnZleUpTIFNlcnZpY2VdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vaGFuZGxlLXN1cnZleS1yZXN1bHRzLXN0b3JlI3N0b3JlLXN1cnZleS1yZXN1bHRzLWluLXRoZS1zdXJ2ZXlqcy1zZXJ2aWNlKS5cbiAgICAgICAgICogQHNlZSBvbkNvbXBsZXRlXG4gICAgICAgICAqIEBzZWUgc3VydmV5U2hvd0RhdGFTYXZpbmdcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInN1cnZleVBvc3RJZFwiLCBcIlwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzdXJ2ZXlQb3N0SWRcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwiY2xpZW50SWRcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogQSB1c2VyIGlkZW50aWZpZXIgKGUtbWFpbCBvciBvdGhlciB1bmlxdWUgSUQpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBJZiB5b3VyIGFwcGxpY2F0aW9uIHdvcmtzIHdpdGggW1N1cnZleUpTIFNlcnZpY2VdKGh0dHBzOi8vYXBpLnN1cnZleWpzLmlvKSwgdGhlIElEIGVuc3VyZXMgdGhhdCB1c2VycyBkbyBub3QgcGFzcyB0aGUgc2FtZSBzdXJ2ZXkgdHdpY2UuIE9uIHRoZSBzZWNvbmQgcnVuLCB0aGV5IHdpbGwgc2VlIHRoZSBbQ29tcGxldGVkIEJlZm9yZSBwYWdlXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2Uvc3VydmV5LWRhdGEtbW9kZWwjY29tcGxldGVkQmVmb3JlSHRtbCkuXG4gICAgICAgICAqIEBzZWUgY29va2llTmFtZVxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY2xpZW50SWRcIiwgXCJcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY2xpZW50SWRcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwiY29va2llTmFtZVwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBIGNvb2tpZSBuYW1lIHVzZWQgdG8gc2F2ZSBpbmZvcm1hdGlvbiBhYm91dCBzdXJ2ZXkgY29tcGxldGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogV2hlbiB0aGlzIHByb3BlcnR5IGhhcyBhIHZhbHVlLCB0aGUgc3VydmV5IGNyZWF0ZXMgYSBjb29raWUgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUgb24gY29tcGxldGlvbi4gVGhpcyBjb29raWUgaGVscHMgZW5zdXJlIHRoYXQgdXNlcnMgZG8gbm90IHBhc3MgdGhlIHNhbWUgc3VydmV5IHR3aWNlLiBPbiB0aGUgc2Vjb25kIHJ1biwgdGhleSB3aWxsIHNlZSB0aGUgW0NvbXBsZXRlZCBCZWZvcmUgcGFnZV0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL3N1cnZleS1kYXRhLW1vZGVsI2NvbXBsZXRlZEJlZm9yZUh0bWwpLlxuICAgICAgICAgKiBAc2VlIGNsaWVudElkXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjb29raWVOYW1lXCIsIFwiXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNvb2tpZU5hbWVcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwic2VuZFJlc3VsdE9uUGFnZU5leHRcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHdoZXRoZXIgdG8gc2F2ZSBzdXJ2ZXkgcmVzdWx0cyB3aGVuIHJlc3BvbmRlbnRzIHN3aXRjaCBiZXR3ZWVuIHBhZ2VzLiBIYW5kbGUgdGhlIFtgb25QYXJ0aWFsU2VuZGBdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vYXBpLXJlZmVyZW5jZS9zdXJ2ZXktZGF0YS1tb2RlbCNvblBhcnRpYWxTZW5kKSBldmVudCB0byBpbXBsZW1lbnQgdGhlIHNhdmUgb3BlcmF0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIGhhbmRsZSB0aGUgW2BvbkN1cnJlbnRQYWdlQ2hhbmdlZGBdKCNvbkN1cnJlbnRQYWdlQ2hhbmdlZCkgYW5kIFtgb25WYWx1ZUNoYW5nZWRgXSgjb25WYWx1ZUNoYW5nZWQpIGV2ZW50cywgYXMgc2hvd24gaW4gdGhlIGZvbGxvd2luZyBkZW1vOiBbQ29udGludWUgYW4gSW5jb21wbGV0ZSBTdXJ2ZXldKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2V4YW1wbGVzL3N1cnZleS1lZGl0cHJldmlvdXMvKS5cbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInNlbmRSZXN1bHRPblBhZ2VOZXh0XCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInNlbmRSZXN1bHRPblBhZ2VOZXh0XCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5TW9kZWwucHJvdG90eXBlLCBcInN1cnZleVNob3dEYXRhU2F2aW5nXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB3aGV0aGVyIHRvIHNob3cgcHJvZ3Jlc3Mgd2hlbiB0aGUgc3VydmV5IHNlbmRzIGRhdGEgdG8gW1N1cnZleUpTIFNlcnZpY2VdKGh0dHBzOi8vYXBpLnN1cnZleWpzLmlvKS5cbiAgICAgICAgICpcbiAgICAgICAgICogW1ZpZXcgRGVtb10oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZXhhbXBsZXMvc2F2ZS1zdXJ2ZXktcmVzdWx0cy1hbmQtbG9hZC1zdXJ2ZXlzLWZyb20tc3VydmV5anMtc2VydmljZS8gKGxpbmtTdHlsZSkpXG4gICAgICAgICAqIEBzZWUgc3VydmV5UG9zdElkXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzdXJ2ZXlTaG93RGF0YVNhdmluZ1wiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzdXJ2ZXlTaG93RGF0YVNhdmluZ1wiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleU1vZGVsLnByb3RvdHlwZSwgXCJmb2N1c0ZpcnN0UXVlc3Rpb25BdXRvbWF0aWNcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHdoZXRoZXIgdG8gZm9jdXMgdGhlIGZpcnN0IHF1ZXN0aW9uIG9uIHRoZSBwYWdlIG9uIHN1cnZleSBzdGFydHVwIG9yIHdoZW4gdXNlcnMgc3dpdGNoIGJldHdlZW4gcGFnZXMuXG4gICAgICAgICAqXG4gICAgICAgICAqIERlZmF1bHQgdmFsdWU6IGB0cnVlYFxuICAgICAgICAgKiBAc2VlIGZvY3VzT25GaXJzdEVycm9yXG4gICAgICAgICAqIEBzZWUgZm9jdXNGaXJzdFF1ZXN0aW9uXG4gICAgICAgICAqIEBzZWUgZm9jdXNRdWVzdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiZm9jdXNGaXJzdFF1ZXN0aW9uQXV0b21hdGljXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImZvY3VzRmlyc3RRdWVzdGlvbkF1dG9tYXRpY1wiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleU1vZGVsLnByb3RvdHlwZSwgXCJmb2N1c09uRmlyc3RFcnJvclwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgd2hldGhlciB0byBmb2N1cyB0aGUgZmlyc3QgcXVlc3Rpb24gd2l0aCBhIHZhbGlkYXRpb24gZXJyb3Igb24gdGhlIGN1cnJlbnQgcGFnZS5cbiAgICAgICAgICpcbiAgICAgICAgICogRGVmYXVsdCB2YWx1ZTogYHRydWVgXG4gICAgICAgICAqIEBzZWUgdmFsaWRhdGVcbiAgICAgICAgICogQHNlZSBmb2N1c0ZpcnN0UXVlc3Rpb25BdXRvbWF0aWNcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImZvY3VzT25GaXJzdEVycm9yXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImZvY3VzT25GaXJzdEVycm9yXCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5TW9kZWwucHJvdG90eXBlLCBcInNob3dOYXZpZ2F0aW9uQnV0dG9uc1wiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXRzIG9yIHNldHMgdGhlIHBvc2l0aW9uIG9mIHRoZSBTdGFydCwgTmV4dCwgUHJldmlvdXMsIGFuZCBDb21wbGV0ZSBuYXZpZ2F0aW9uIGJ1dHRvbnMgYW5kIGNvbnRyb2xzIHRoZWlyIHZpc2liaWxpdHkuXG4gICAgICAgICAqXG4gICAgICAgICAqIFBvc3NpYmxlIHZhbHVlczpcbiAgICAgICAgICpcbiAgICAgICAgICogLSBgXCJib3R0b21cImAgKGRlZmF1bHQpIC0gRGlzcGxheXMgdGhlIG5hdmlnYXRpb24gYnV0dG9ucyBiZWxvdyBzdXJ2ZXkgY29udGVudC5cbiAgICAgICAgICogLSBgXCJ0b3BcImAgLSBEaXNwbGF5cyB0aGUgbmF2aWdhdGlvbiBidXR0b25zIGFib3ZlIHN1cnZleSBjb250ZW50LlxuICAgICAgICAgKiAtIGBcImJvdGhcImAgLSBEaXNwbGF5cyB0aGUgbmF2aWdhdGlvbiBidXR0b25zIGFib3ZlIGFuZCBiZWxvdyBzdXJ2ZXkgY29udGVudC5cbiAgICAgICAgICogLSBgXCJub25lXCJgIC0gSGlkZXMgdGhlIG5hdmlnYXRpb24gYnV0dG9ucy4gVGhpcyBzZXR0aW5nIG1heSBiZSB1c2VmdWwgaWYgeW91IFtpbXBsZW1lbnQgY3VzdG9tIGV4dGVybmFsIG5hdmlnYXRpb25dKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2V4YW1wbGVzL2V4dGVybmFsLWZvcm0tbmF2aWdhdGlvbi1zeXN0ZW0vKS5cbiAgICAgICAgICogQHNlZSBnb05leHRQYWdlQXV0b21hdGljXG4gICAgICAgICAqIEBzZWUgc2hvd1ByZXZCdXR0b25cbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInNob3dOYXZpZ2F0aW9uQnV0dG9uc1wiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICBpZiAodmFsID09PSB0cnVlIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdmFsID0gXCJib3R0b21cIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh2YWwgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgdmFsID0gXCJub25lXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzaG93TmF2aWdhdGlvbkJ1dHRvbnNcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwic2hvd1ByZXZCdXR0b25cIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHdoZXRoZXIgdG8gZGlzcGxheSB0aGUgUHJldmlvdXMgYnV0dG9uLiBTZXQgdGhpcyBwcm9wZXJ0eSB0byBgZmFsc2VgIGlmIHJlc3BvbmRlbnRzIHNob3VsZCBub3QgbW92ZSBiYWNrd2FyZCBhbG9uZyB0aGUgc3VydmV5LlxuICAgICAgICAgKiBAc2VlIHNob3dOYXZpZ2F0aW9uQnV0dG9uc1xuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic2hvd1ByZXZCdXR0b25cIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwic2hvd1ByZXZCdXR0b25cIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwic2hvd1RPQ1wiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXRzIG9yIHNldHMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIHRhYmxlIG9mIGNvbnRlbnRzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBEZWZhdWx0IHZhbHVlOiBgZmFsc2VgXG4gICAgICAgICAqXG4gICAgICAgICAqIFtWaWV3IERlbW9dKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2V4YW1wbGVzL3RvYy1mZWF0dXJlLyAobGlua1N0eWxlKSlcbiAgICAgICAgICogQHNlZSB0b2NMb2NhdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic2hvd1RPQ1wiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzaG93VE9DXCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5TW9kZWwucHJvdG90eXBlLCBcInRvY0xvY2F0aW9uXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldHMgb3Igc2V0cyB0aGUgcG9zaXRpb24gb2YgdGhlIHRhYmxlIG9mIGNvbnRlbnRzLiBBcHBsaWVzIG9ubHkgd2hlbiB0aGUgdGFibGUgb2YgY29udGVudHMgaXMgdmlzaWJsZS5cbiAgICAgICAgICpcbiAgICAgICAgICogUG9zc2libGUgdmFsdWVzOlxuICAgICAgICAgKlxuICAgICAgICAgKiAtIGBcImxlZnRcImAgKGRlZmF1bHQpXG4gICAgICAgICAqIC0gYFwicmlnaHRcImBcbiAgICAgICAgICpcbiAgICAgICAgICogW1ZpZXcgRGVtb10oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZXhhbXBsZXMvdG9jLWZlYXR1cmUvIChsaW5rU3R5bGUpKVxuICAgICAgICAgKiBAc2VlIHNob3dUT0NcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInRvY0xvY2F0aW9uXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInRvY0xvY2F0aW9uXCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5TW9kZWwucHJvdG90eXBlLCBcInNob3dUaXRsZVwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgd2hldGhlciB0byBkaXNwbGF5IHRoZSBbc3VydmV5IHRpdGxlXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2Uvc3VydmV5LWRhdGEtbW9kZWwjdGl0bGUpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBbVmlldyBEZW1vXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9leGFtcGxlcy9icmFuZC15b3VyLXN1cnZleS1oZWFkZXIvIChsaW5rU3R5bGUpKVxuICAgICAgICAgKiBAc2VlIHRpdGxlXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzaG93VGl0bGVcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwic2hvd1RpdGxlXCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5TW9kZWwucHJvdG90eXBlLCBcInNob3dQYWdlVGl0bGVzXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB3aGV0aGVyIHRvIGRpc3BsYXkgW3BhZ2UgdGl0bGVzXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2UvcGFnZS1tb2RlbCN0aXRsZSkuXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzaG93UGFnZVRpdGxlc1wiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzaG93UGFnZVRpdGxlc1wiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleU1vZGVsLnByb3RvdHlwZSwgXCJzaG93Q29tcGxldGVkUGFnZVwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgd2hldGhlciB0byBzaG93IHRoZSBbY29tcGxldGUgcGFnZV0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9kZXNpZ24tc3VydmV5L2NyZWF0ZS1hLW11bHRpLXBhZ2Utc3VydmV5I2NvbXBsZXRlLXBhZ2UpLlxuICAgICAgICAgKiBAc2VlIG9uQ29tcGxldGVcbiAgICAgICAgICogQHNlZSBuYXZpZ2F0ZVRvVXJsXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzaG93Q29tcGxldGVkUGFnZVwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzaG93Q29tcGxldGVkUGFnZVwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleU1vZGVsLnByb3RvdHlwZSwgXCJuYXZpZ2F0ZVRvVXJsXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEEgVVJMIHRvIHdoaWNoIHJlc3BvbmRlbnRzIHNob3VsZCBiZSBuYXZpZ2F0ZWQgYWZ0ZXIgc3VydmV5IGNvbXBsZXRpb24uXG4gICAgICAgICAqIEBzZWUgb25OYXZpZ2F0ZVRvVXJsXG4gICAgICAgICAqIEBzZWUgbmF2aWdhdGVUb1VybE9uQ29uZGl0aW9uXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJuYXZpZ2F0ZVRvVXJsXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm5hdmlnYXRlVG9VcmxcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwibmF2aWdhdGVUb1VybE9uQ29uZGl0aW9uXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFuIGFycmF5IG9mIG9iamVjdHMgdGhhdCBhbGxvd3MgeW91IHRvIG5hdmlnYXRlIHJlc3BvbmRlbnRzIHRvIGRpZmZlcmVudCBVUkxzIGFmdGVyIHN1cnZleSBjb21wbGV0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBFYWNoIG9iamVjdCBzaG91bGQgaW5jbHVkZSB0aGUgW2BleHByZXNzaW9uYF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL3VybGNvbmRpdGlvbml0ZW0jdXJsKSBhbmQgW2B1cmxgXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2UvdXJsY29uZGl0aW9uaXRlbSNleHByZXNzaW9uKSBwcm9wZXJ0aWVzLiBXaGVuIGBleHByZXNzaW9uYCBldmFsdWF0ZXMgdG8gYHRydWVgLCB0aGUgc3VydmV5IG5hdmlnYXRlcyB0byB0aGUgY29ycmVzcG9uZGluZyBgdXJsYC4gUmVmZXIgdG8gdGhlIGZvbGxvd2luZyBoZWxwIHRvcGljIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGV4cHJlc3Npb25zOiBbRXhwcmVzc2lvbnNdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vZGVzaWduLXN1cnZleS9jb25kaXRpb25hbC1sb2dpYyNleHByZXNzaW9ucykuXG4gICAgICAgICAqIEBzZWUgb25OYXZpZ2F0ZVRvVXJsXG4gICAgICAgICAqIEBzZWUgbmF2aWdhdGVUb1VybFxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibmF2aWdhdGVUb1VybE9uQ29uZGl0aW9uXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm5hdmlnYXRlVG9VcmxPbkNvbmRpdGlvblwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLmdldE5hdmlnYXRlVG9VcmwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBpdGVtID0gdGhpcy5nZXRFeHByZXNzaW9uSXRlbU9uUnVuQ29uZGl0aW9uKHRoaXMubmF2aWdhdGVUb1VybE9uQ29uZGl0aW9uKTtcbiAgICAgICAgdmFyIHVybCA9ICEhaXRlbSA/IGl0ZW0udXJsIDogdGhpcy5uYXZpZ2F0ZVRvVXJsO1xuICAgICAgICBpZiAoISF1cmwpIHtcbiAgICAgICAgICAgIHVybCA9IHRoaXMucHJvY2Vzc1RleHQodXJsLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVybDtcbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5uYXZpZ2F0ZVRvID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgdXJsID0gdGhpcy5nZXROYXZpZ2F0ZVRvVXJsKCk7XG4gICAgICAgIHZhciBvcHRpb25zID0geyB1cmw6IHVybCwgYWxsb3c6IHRydWUgfTtcbiAgICAgICAgdGhpcy5vbk5hdmlnYXRlVG9VcmwuZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgICAgICAgaWYgKCFvcHRpb25zLnVybCB8fCAhb3B0aW9ucy5hbGxvdylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgT2JqZWN0KF91dGlsc191dGlsc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfX1tcIm5hdmlnYXRlVG9VcmxcIl0pKG9wdGlvbnMudXJsKTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwicmVxdWlyZWRUZXh0XCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyBvbmUgb3IgbXVsdGlwbGUgY2hhcmFjdGVycyB0aGF0IGRlc2lnbmF0ZSByZXF1aXJlZCBxdWVzdGlvbnMuXG4gICAgICAgICAqXG4gICAgICAgICAqIERlZmF1bHQgdmFsdWU6IGAqYFxuICAgICAgICAgKlxuICAgICAgICAgKiBbVmlldyBEZW1vXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9leGFtcGxlcy9tb2RpZnktcXVlc3Rpb24tdGl0bGUvIChsaW5rU3R5bGUpKVxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicmVxdWlyZWRUZXh0XCIsIFwiKlwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJyZXF1aXJlZFRleHRcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5iZWZvcmVTZXR0aW5nUXVlc3Rpb25FcnJvcnMgPSBmdW5jdGlvbiAocXVlc3Rpb24sIGVycm9ycykge1xuICAgICAgICB0aGlzLm1ha2VSZXF1aXJlZEVycm9yc0ludmlzaWJsZShlcnJvcnMpO1xuICAgICAgICB0aGlzLm9uU2V0dGluZ1F1ZXN0aW9uRXJyb3JzLmZpcmUodGhpcywge1xuICAgICAgICAgICAgcXVlc3Rpb246IHF1ZXN0aW9uLFxuICAgICAgICAgICAgZXJyb3JzOiBlcnJvcnMsXG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLmJlZm9yZVNldHRpbmdQYW5lbEVycm9ycyA9IGZ1bmN0aW9uIChxdWVzdGlvbiwgZXJyb3JzKSB7XG4gICAgICAgIHRoaXMubWFrZVJlcXVpcmVkRXJyb3JzSW52aXNpYmxlKGVycm9ycyk7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUubWFrZVJlcXVpcmVkRXJyb3JzSW52aXNpYmxlID0gZnVuY3Rpb24gKGVycm9ycykge1xuICAgICAgICBpZiAoIXRoaXMuaGlkZVJlcXVpcmVkRXJyb3JzKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVycm9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGVyVHlwZSA9IGVycm9yc1tpXS5nZXRFcnJvclR5cGUoKTtcbiAgICAgICAgICAgIGlmIChlclR5cGUgPT0gXCJyZXF1aXJlZFwiIHx8IGVyVHlwZSA9PSBcInJlcXVpcmVvbmVhbnN3ZXJcIikge1xuICAgICAgICAgICAgICAgIGVycm9yc1tpXS52aXNpYmxlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwicXVlc3Rpb25TdGFydEluZGV4XCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB0aGUgaW5pdGlhbCBudW1iZXIgb3IgbGV0dGVyIGZyb20gd2hpY2ggdG8gc3RhcnQgcXVlc3Rpb24gbnVtYmVyaW5nLlxuICAgICAgICAgKlxuICAgICAgICAgKiBbUXVlc3Rpb24gTnVtYmVyc10oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9kZXNpZ24tc3VydmV5L2NvbmZpZ3VyZS1xdWVzdGlvbi10aXRsZXMjcXVlc3Rpb24tbnVtYmVycyAobGlua1N0eWxlKSlcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInF1ZXN0aW9uU3RhcnRJbmRleFwiLCBcIlwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJxdWVzdGlvblN0YXJ0SW5kZXhcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwic3RvcmVPdGhlcnNBc0NvbW1lbnRcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHdoZXRoZXIgdG8gc3RvcmUgdGhlIFwiT3RoZXJcIiBvcHRpb24gcmVzcG9uc2UgaW4gYSBzZXBhcmF0ZSBwcm9wZXJ0eS5cbiAgICAgICAgICpcbiAgICAgICAgICogRGVmYXVsdCB2YWx1ZTogYHRydWVgXG4gICAgICAgICAqXG4gICAgICAgICAqIFJlc3BvbmRlbnRzIGNhbiBsZWF2ZSBjb21tZW50cyB3aGVuIHRoZXkgc2VsZWN0IFwiT3RoZXJcIiBpbiBjaG9pY2UtYmFzZWQgcXVlc3Rpb25zLCBzdWNoIGFzIERyb3Bkb3duIG9yIENoZWNrYm94ZXMuIENvbW1lbnQgdmFsdWVzIGFyZSBzYXZlZCBpbiBhIHNlcGFyYXRlIHByb3BlcnR5LiBUaGUgcHJvcGVydHkgbmFtZSBpcyBjb21wb3NlZCBvZiB0aGUgcXVlc3Rpb24gYG5hbWVgIGFuZCBbYGNvbW1lbnRTdWZmaXhgXSgjY29tbWVudFN1ZmZpeCkuIEhvd2V2ZXIsIHlvdSBjYW4gdXNlIHRoZSBxdWVzdGlvbiBgbmFtZWAgYXMgYSBrZXkgdG8gc3RvcmUgdGhlIGNvbW1lbnQgdmFsdWUgaW5zdGVhZC4gRGlzYWJsZSB0aGUgYHN0b3JlT3RoZXJzQXNDb21tZW50YCBwcm9wZXJ0eSBpbiB0aGlzIGNhc2UuXG4gICAgICAgICAqIEBzZWUgbWF4T3RoZXJzTGVuZ3RoXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzdG9yZU90aGVyc0FzQ29tbWVudFwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzdG9yZU90aGVyc0FzQ29tbWVudFwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleU1vZGVsLnByb3RvdHlwZSwgXCJtYXhUZXh0TGVuZ3RoXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB0aGUgbWF4aW11bSB0ZXh0IGxlbmd0aCBpbiB0ZXh0dWFsIHF1ZXN0aW9ucyAoW1NpbmdsZS1MaW5lIElucHV0XShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9leGFtcGxlcy90ZXh0LWVudHJ5LXF1ZXN0aW9uLyksIFtMb25nIFRleHRdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2V4YW1wbGVzL2FkZC1vcGVuLWVuZGVkLXF1ZXN0aW9uLXRvLWEtZm9ybS8pLCBbTXVsdGlwbGUgVGV4dGJveGVzXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9leGFtcGxlcy9tdWx0aXBsZS10ZXh0LWJveC1xdWVzdGlvbi8pKSwgbWVhc3VyZWQgaW4gY2hhcmFjdGVycy5cbiAgICAgICAgICpcbiAgICAgICAgICogRGVmYXVsdCB2YWx1ZTogMCAodW5saW1pdGVkKVxuICAgICAgICAgKlxuICAgICAgICAgKiBZb3UgY2FuIG92ZXJyaWRlIHRoaXMgc2V0dGluZyBmb3IgaW5kaXZpZHVhbCBxdWVzdGlvbnMgaWYgeW91IHNwZWNpZnkgdGhlaXIgW2BtYXhMZW5ndGhgXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2UvdGV4dC1lbnRyeS1xdWVzdGlvbi1tb2RlbCNtYXhMZW5ndGgpIHByb3BlcnR5LlxuICAgICAgICAgKiBAc2VlIG1heE90aGVyc0xlbmd0aFxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibWF4VGV4dExlbmd0aFwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJtYXhUZXh0TGVuZ3RoXCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5TW9kZWwucHJvdG90eXBlLCBcIm1heE90aGVyc0xlbmd0aFwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgdGhlIG1heGltdW0gdGV4dCBsZW5ndGggZm9yIHF1ZXN0aW9uIGNvbW1lbnRzLiBBcHBsaWVzIHRvIHF1ZXN0aW9ucyB3aXRoIHRoZSBbYHNob3dDb21tZW50QXJlYWBdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vYXBpLXJlZmVyZW5jZS9xdWVzdGlvbiNzaG93Q29tbWVudEFyZWEpIG9yIFtgc2hvd090aGVySXRlbWBdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vYXBpLXJlZmVyZW5jZS9xdWVzdGlvbiNzaG93T3RoZXJJdGVtKSBwcm9wZXJ0eSBzZXQgdG8gYHRydWVgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBEZWZhdWx0IHZhbHVlOiAwICh1bmxpbWl0ZWQpXG4gICAgICAgICAqIEBzZWUgbWF4VGV4dExlbmd0aFxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibWF4T3RoZXJzTGVuZ3RoXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm1heE90aGVyc0xlbmd0aFwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleU1vZGVsLnByb3RvdHlwZSwgXCJnb05leHRQYWdlQXV0b21hdGljXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB3aGV0aGVyIHRoZSBzdXJ2ZXkgc3dpdGNoZXMgdG8gdGhlIG5leHQgcGFnZSBhdXRvbWF0aWNhbGx5IGFmdGVyIGEgdXNlciBhbnN3ZXJzIGFsbCBxdWVzdGlvbnMgb24gdGhlIGN1cnJlbnQgcGFnZS5cbiAgICAgICAgICpcbiAgICAgICAgICogRGVmYXVsdCB2YWx1ZTogYGZhbHNlYFxuICAgICAgICAgKlxuICAgICAgICAgKiBJZiB5b3UgZW5hYmxlIHRoaXMgcHJvcGVydHksIHRoZSBzdXJ2ZXkgaXMgYWxzbyBjb21wbGV0ZWQgYXV0b21hdGljYWxseS4gU2V0IHRoZSBbYGFsbG93Q29tcGxldGVTdXJ2ZXlBdXRvbWF0aWNgXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2Uvc3VydmV5LWRhdGEtbW9kZWwjYWxsb3dDb21wbGV0ZVN1cnZleUF1dG9tYXRpYykgcHJvcGVydHkgdG8gYGZhbHNlYCBpZiB5b3Ugd2FudCB0byBkaXNhYmxlIHRoaXMgYmVoYXZpb3IuXG4gICAgICAgICAqXG4gICAgICAgICAqID4gSWYgYW55IG9mIHRoZSBmb2xsb3dpbmcgcXVlc3Rpb25zIGlzIGFuc3dlcmVkIGxhc3QsIHRoZSBzdXJ2ZXkgZG9lcyBub3Qgc3dpdGNoIHRvIHRoZSBuZXh0IHBhZ2U6IENoZWNrYm94ZXMsIFllcy9ObyAoQm9vbGVhbikgKHJlbmRlcmVkIGFzIENoZWNrYm94KSwgTG9uZyBUZXh0LCBTaWduYXR1cmUsIEltYWdlIFBpY2tlciAod2l0aCBNdWx0aSBTZWxlY3QpLCBGaWxlIFVwbG9hZCwgU2luZ2xlLVNlbGVjdCBNYXRyaXggKG5vdCBhbGwgcm93cyBhcmUgYW5zd2VyZWQpLCBEeW5hbWljIE1hdHJpeCwgRHluYW1pYyBQYW5lbC5cbiAgICAgICAgICpcbiAgICAgICAgICogW1ZpZXcgRGVtb10oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZXhhbXBsZXMvYXV0b21hdGljYWxseS1tb3ZlLXRvLW5leHQtcGFnZS1pZi1hbnN3ZXItc2VsZWN0ZWQvIChsaW5rU3R5bGUpKVxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiZ29OZXh0UGFnZUF1dG9tYXRpY1wiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJnb05leHRQYWdlQXV0b21hdGljXCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5TW9kZWwucHJvdG90eXBlLCBcImFsbG93Q29tcGxldGVTdXJ2ZXlBdXRvbWF0aWNcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHdoZXRoZXIgdG8gY29tcGxldGUgdGhlIHN1cnZleSBhdXRvbWF0aWNhbGx5IGFmdGVyIGEgdXNlciBhbnN3ZXJzIGFsbCBxdWVzdGlvbnMgb24gdGhlIGxhc3QgcGFnZS4gQXBwbGllcyBvbmx5IGlmIHRoZSBbYGdvTmV4dFBhZ2VBdXRvbWF0aWNgXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2Uvc3VydmV5LWRhdGEtbW9kZWwjZ29OZXh0UGFnZUF1dG9tYXRpYykgcHJvcGVydHkgaXMgYHRydWVgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBEZWZhdWx0IHZhbHVlOiBgdHJ1ZWBcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImFsbG93Q29tcGxldGVTdXJ2ZXlBdXRvbWF0aWNcIiwgdHJ1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiYWxsb3dDb21wbGV0ZVN1cnZleUF1dG9tYXRpY1wiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleU1vZGVsLnByb3RvdHlwZSwgXCJjaGVja0Vycm9yc01vZGVcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHdoZW4gdGhlIHN1cnZleSB2YWxpZGF0ZXMgYW5zd2Vycy5cbiAgICAgICAgICpcbiAgICAgICAgICogUG9zc2libGUgdmFsdWVzOlxuICAgICAgICAgKlxuICAgICAgICAgKiAtIGBcIm9uTmV4dFBhZ2VcImAgKGRlZmF1bHQpIC0gVHJpZ2dlcnMgdmFsaWRhdGlvbiBiZWZvcmUgdGhlIHN1cnZleSBpcyBzd2l0Y2hlZCB0byB0aGUgbmV4dCBwYWdlIG9yIGNvbXBsZXRlZC5cbiAgICAgICAgICogLSBgXCJvblZhbHVlQ2hhbmdlZFwiYCAtIFRyaWdnZXJzIHZhbGlkYXRpb24gZWFjaCB0aW1lIGEgcXVlc3Rpb24gdmFsdWUgaXMgY2hhbmdlZC5cbiAgICAgICAgICogLSBgXCJvbkNvbXBsZXRlXCJgIC0gVHJpZ2dlcnMgdmFsaWRhdGlvbiB3aGVuIGEgdXNlciBjbGlja3MgdGhlIENvbXBsZXRlIGJ1dHRvbi4gSWYgcHJldmlvdXMgcGFnZXMgY29udGFpbiBlcnJvcnMsIHRoZSBzdXJ2ZXkgc3dpdGNoZXMgdG8gdGhlIHBhZ2Ugd2l0aCB0aGUgZmlyc3QgZXJyb3IuXG4gICAgICAgICAqXG4gICAgICAgICAqIFJlZmVyIHRvIHRoZSBmb2xsb3dpbmcgaGVscCB0b3BpYyBmb3IgbW9yZSBpbmZvcm1hdGlvbjogW0RhdGEgVmFsaWRhdGlvbl0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9kYXRhLXZhbGlkYXRpb24pLlxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY2hlY2tFcnJvcnNNb2RlXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNoZWNrRXJyb3JzTW9kZVwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleU1vZGVsLnByb3RvdHlwZSwgXCJhdXRvR3Jvd0NvbW1lbnRcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHdoZXRoZXIgdG8gaW5jcmVhc2UgdGhlIGhlaWdodCBvZiBbTG9uZyBUZXh0XShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9leGFtcGxlcy9hZGQtb3Blbi1lbmRlZC1xdWVzdGlvbi10by1hLWZvcm0vKSBxdWVzdGlvbnMgYW5kIG90aGVyIHRleHQgYXJlYXMgdG8gYWNjb21tb2RhdGUgbXVsdGktbGluZSB0ZXh0IGNvbnRlbnQuXG4gICAgICAgICAqXG4gICAgICAgICAqIERlZmF1bHQgdmFsdWU6IGBmYWxzZWBcbiAgICAgICAgICpcbiAgICAgICAgICogWW91IGNhbiBvdmVycmlkZSB0aGlzIHByb3BlcnR5IGZvciBpbmRpdmlkdWFsIExvbmcgVGV4dCBxdWVzdGlvbnM6IFtgYXV0b0dyb3dgXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2UvY29tbWVudC1maWVsZC1tb2RlbCNhdXRvR3JvdykuXG4gICAgICAgICAqIEBzZWUgYWxsb3dSZXNpemVDb21tZW50XG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJhdXRvR3Jvd0NvbW1lbnRcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiYXV0b0dyb3dDb21tZW50XCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5TW9kZWwucHJvdG90eXBlLCBcImFsbG93UmVzaXplQ29tbWVudFwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgd2hldGhlciB0byBkaXNwbGF5IGEgcmVzaXplIGhhbmRsZSBmb3IgW0xvbmcgVGV4dF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZXhhbXBsZXMvYWRkLW9wZW4tZW5kZWQtcXVlc3Rpb24tdG8tYS1mb3JtLykgcXVlc3Rpb25zIGFuZCBvdGhlciB0ZXh0IGFyZWFzIGludGVuZGVkIGZvciBtdWx0aS1saW5lIHRleHQgY29udGVudC5cbiAgICAgICAgICpcbiAgICAgICAgICogRGVmYXVsdCB2YWx1ZTogYHRydWVgXG4gICAgICAgICAqXG4gICAgICAgICAqIFlvdSBjYW4gb3ZlcnJpZGUgdGhpcyBwcm9wZXJ0eSBmb3IgaW5kaXZpZHVhbCBMb25nIFRleHQgcXVlc3Rpb25zOiBbYGFsbG93UmVzaXplYF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL2NvbW1lbnQtZmllbGQtbW9kZWwjYWxsb3dSZXNpemUpLlxuICAgICAgICAgKiBAc2VlIGF1dG9Hcm93Q29tbWVudFxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiYWxsb3dSZXNpemVDb21tZW50XCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImFsbG93UmVzaXplQ29tbWVudFwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleU1vZGVsLnByb3RvdHlwZSwgXCJ0ZXh0VXBkYXRlTW9kZVwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgd2hlbiB0byB1cGRhdGUgdGhlIHF1ZXN0aW9uIHZhbHVlIGluIHF1ZXN0aW9ucyB3aXRoIGEgdGV4dCBpbnB1dCBmaWVsZC5cbiAgICAgICAgICpcbiAgICAgICAgICogUG9zc2libGUgdmFsdWVzOlxuICAgICAgICAgKlxuICAgICAgICAgKiAtIGBcIm9uQmx1clwiYCAoZGVmYXVsdCkgLSBVcGRhdGVzIHRoZSB2YWx1ZSBhZnRlciB0aGUgaW5wdXQgZmllbGQgbG9zZXMgZm9jdXMuXG4gICAgICAgICAqIC0gYFwib25UeXBpbmdcImAgLSBVcGRhdGVzIHRoZSB2YWx1ZSBvbiBldmVyeSBrZXkgcHJlc3MuXG4gICAgICAgICAqXG4gICAgICAgICAqID4gRG8gbm90IHVzZSB0aGUgYFwib25UeXBpbmdcImAgbW9kZSBpZiB5b3VyIHN1cnZleSBjb250YWlucyBtYW55IGV4cHJlc3Npb25zLiBFeHByZXNzaW9ucyBhcmUgcmVldmFsdWF0ZWQgZWFjaCB0aW1lIGEgcXVlc3Rpb24gdmFsdWUgaXMgY2hhbmdlZC4gSW4gYFwib25UeXBpbmdcImAgbW9kZSwgdGhlIHF1ZXN0aW9uIHZhbHVlIGNoYW5nZXMgZnJlcXVlbnRseS4gVGhpcyBtYXkgY2F1c2UgcGVyZm9ybWFuY2UgZGVncmFkYXRpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIFlvdSBjYW4gb3ZlcnJpZGUgdGhpcyBzZXR0aW5nIGZvciBpbmRpdmlkdWFsIHF1ZXN0aW9uczogW2B0ZXh0VXBkYXRlTW9kZWBdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vYXBpLXJlZmVyZW5jZS90ZXh0LWVudHJ5LXF1ZXN0aW9uLW1vZGVsI3RleHRVcGRhdGVNb2RlKS5cbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInRleHRVcGRhdGVNb2RlXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInRleHRVcGRhdGVNb2RlXCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5TW9kZWwucHJvdG90eXBlLCBcImNsZWFySW52aXNpYmxlVmFsdWVzXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB3aGVuIHRvIHJlbW92ZSB2YWx1ZXMgb2YgaW52aXNpYmxlIHF1ZXN0aW9ucyBmcm9tIFtzdXJ2ZXkgcmVzdWx0c10oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL3N1cnZleS1kYXRhLW1vZGVsI2RhdGEpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBQb3NzaWJsZSB2YWx1ZXM6XG4gICAgICAgICAqXG4gICAgICAgICAqIC0gYFwib25Db21wbGV0ZVwiYCAoZGVmYXVsdCkgLSBDbGVhcnMgaW52aXNpYmxlIHF1ZXN0aW9uIHZhbHVlcyB3aGVuIHRoZSBzdXJ2ZXkgaXMgY29tcGxldGUuXG4gICAgICAgICAqIC0gYFwib25IaWRkZW5cImAgLSBDbGVhcnMgYSBxdWVzdGlvbiB2YWx1ZSB3aGVuIHRoZSBxdWVzdGlvbiBiZWNvbWVzIGludmlzaWJsZS4gSWYgdGhlIHF1ZXN0aW9uIGlzIGludmlzaWJsZSBpbml0aWFsbHksIGl0cyB2YWx1ZSBpcyByZW1vdmVkIG9uIHN1cnZleSBjb21wbGV0aW9uLlxuICAgICAgICAgKiAtIGBcIm9uSGlkZGVuQ29udGFpbmVyXCJgIC0gQ2xlYXJzIGEgcXVlc3Rpb24gdmFsdWUgd2hlbiB0aGUgcXVlc3Rpb24gb3IgaXRzIGNvbnRhaW50ZXIgKHBhZ2Ugb3IgcGFuZWwpIGJlY29tZXMgaW52aXNpYmxlLiBJZiB0aGUgcXVlc3Rpb24gaXMgaW52aXNpYmxlIGluaXRpYWxseSwgaXRzIHZhbHVlIGlzIHJlbW92ZWQgb24gc3VydmV5IGNvbXBsZXRpb24uXG4gICAgICAgICAqIC0gYFwibm9uZVwiYCAtIEtlZXBzIGludmlzaWJsZSB2YWx1ZXMgaW4gc3VydmV5IHJlc3VsdHMuXG4gICAgICAgICAqIC0gYHRydWVgIC0gRXF1aXZhbGVudCB0byBgXCJvbkNvbXBsZXRlXCJgLlxuICAgICAgICAgKiAtIGBmYWxzZWAgLSBFcXVpdmFsZW50IHRvIGBcIm5vbmVcImAuXG4gICAgICAgICAqIEBzZWUgW0NvbmRpdGlvbmFsIFZpc2liaWxpdHldKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vZGVzaWduLXN1cnZleS9jb25kaXRpb25hbC1sb2dpYyNjb25kaXRpb25hbC12aXNpYmlsaXR5KVxuICAgICAgICAgKiBAc2VlIG9uQ29tcGxldGVcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNsZWFySW52aXNpYmxlVmFsdWVzXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIGlmICh2YWwgPT09IHRydWUpXG4gICAgICAgICAgICAgICAgdmFsID0gXCJvbkNvbXBsZXRlXCI7XG4gICAgICAgICAgICBpZiAodmFsID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICB2YWwgPSBcIm5vbmVcIjtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNsZWFySW52aXNpYmxlVmFsdWVzXCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIHZhbHVlcyB0aGF0IGNhbm5vdCBiZSBhc3NpZ25lZCB0byBhIHF1ZXN0aW9uLCBmb3IgZXhhbXBsZSwgY2hvaWNlcyB1bmxpc3RlZCBpbiB0aGUgYGNob2ljZXNgIGFycmF5LlxuICAgICAqXG4gICAgICogQ2FsbCB0aGlzIG1ldGhvZCBhZnRlciB5b3UgYXNzaWduIG5ldyBxdWVzdGlvbiB2YWx1ZXMgaW4gY29kZSB0byBlbnN1cmUgdGhhdCB0aGV5IGFyZSBhY2NlcHRhYmxlLlxuICAgICAqXG4gICAgICogPiBUaGlzIG1ldGhvZCBkb2VzIG5vdCByZW1vdmUgdmFsdWVzIHRoYXQgZmFpbCB2YWxpZGF0aW9uLiBDYWxsIHRoZSBbYHZhbGlkYXRlKClgXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2Uvc3VydmV5LWRhdGEtbW9kZWwjdmFsaWRhdGUpIG1ldGhvZCB0byB2YWxpZGF0ZSBuZXdseSBhc3NpZ25lZCB2YWx1ZXMuXG4gICAgICogQHBhcmFtIHJlbW92ZU5vbkV4aXN0aW5nUm9vdEtleXMgUGFzcyBgdHJ1ZWAgdG8gcmVtb3ZlIHZhbHVlcyB0aGF0IGRvIG5vdCBjb3JyZXNwb25kIHRvIGFueSBxdWVzdGlvbiBvciBbY2FsY3VsYXRlZCB2YWx1ZV0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9kZXNpZ24tc3VydmV5L2NvbmRpdGlvbmFsLWxvZ2ljI2NhbGN1bGF0ZWQtdmFsdWVzKS5cbiAgICAgKi9cbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuY2xlYXJJbmNvcnJlY3RWYWx1ZXMgPSBmdW5jdGlvbiAocmVtb3ZlTm9uRXhpc3RpbmdSb290S2V5cykge1xuICAgICAgICBpZiAocmVtb3ZlTm9uRXhpc3RpbmdSb290S2V5cyA9PT0gdm9pZCAwKSB7IHJlbW92ZU5vbkV4aXN0aW5nUm9vdEtleXMgPSBmYWxzZTsgfVxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMucGFnZXNbaV0uY2xlYXJJbmNvcnJlY3RWYWx1ZXMoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXJlbW92ZU5vbkV4aXN0aW5nUm9vdEtleXMpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciBkYXRhID0gdGhpcy5kYXRhO1xuICAgICAgICB2YXIgaGFzQ2hhbmdlcyA9IGZhbHNlO1xuICAgICAgICBmb3IgKHZhciBrZXkgaW4gZGF0YSkge1xuICAgICAgICAgICAgaWYgKCEhdGhpcy5nZXRRdWVzdGlvbkJ5VmFsdWVOYW1lKGtleSkpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBpZiAodGhpcy5pc2NvcnJlY3RWYWx1ZVdpdGhQb3N0UHJlZml4KGtleSwgX3NldHRpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fW1wic2V0dGluZ3NcIl0uY29tbWVudFN1ZmZpeCkgfHxcbiAgICAgICAgICAgICAgICB0aGlzLmlzY29ycmVjdFZhbHVlV2l0aFBvc3RQcmVmaXgoa2V5LCBfc2V0dGluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X19bXCJzZXR0aW5nc1wiXS5tYXRyaXgudG90YWxzU3VmZml4KSlcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIHZhciBjYWxjVmFsdWUgPSB0aGlzLmdldENhbGN1bGF0ZWRWYWx1ZUJ5TmFtZShrZXkpO1xuICAgICAgICAgICAgaWYgKCEhY2FsY1ZhbHVlICYmIGNhbGNWYWx1ZS5pbmNsdWRlSW50b1Jlc3VsdClcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIGhhc0NoYW5nZXMgPSB0cnVlO1xuICAgICAgICAgICAgZGVsZXRlIGRhdGFba2V5XTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaGFzQ2hhbmdlcykge1xuICAgICAgICAgICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLmlzY29ycmVjdFZhbHVlV2l0aFBvc3RQcmVmaXggPSBmdW5jdGlvbiAoa2V5LCBwb3N0UHJlZml4KSB7XG4gICAgICAgIGlmIChrZXkuaW5kZXhPZihwb3N0UHJlZml4KSAhPT0ga2V5Lmxlbmd0aCAtIHBvc3RQcmVmaXgubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gISF0aGlzLmdldFF1ZXN0aW9uQnlWYWx1ZU5hbWUoa2V5LnN1YnN0cmluZygwLCBrZXkuaW5kZXhPZihwb3N0UHJlZml4KSkpO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleU1vZGVsLnByb3RvdHlwZSwgXCJrZWVwSW5jb3JyZWN0VmFsdWVzXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB3aGV0aGVyIHRvIGtlZXAgdmFsdWVzIHRoYXQgY2Fubm90IGJlIGFzc2lnbmVkIHRvIHF1ZXN0aW9ucywgZm9yIGV4YW1wbGUsIGNob2ljZXMgdW5saXN0ZWQgaW4gdGhlIGBjaG9pY2VzYCBhcnJheS5cbiAgICAgICAgICpcbiAgICAgICAgICogPiBUaGlzIHByb3BlcnR5IGNhbm5vdCBiZSBzcGVjaWZpZWQgaW4gdGhlIHN1cnZleSBKU09OIHNjaGVtYS4gVXNlIGRvdCBub3RhdGlvbiB0byBzcGVjaWZ5IGl0LlxuICAgICAgICAgKiBAc2VlIGNsZWFySW5jb3JyZWN0VmFsdWVzXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJrZWVwSW5jb3JyZWN0VmFsdWVzXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImtlZXBJbmNvcnJlY3RWYWx1ZXNcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwibG9jYWxlXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB0aGUgc3VydmV5J3MgbG9jYWxlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBEZWZhdWx0IHZhbHVlOiBgXCJcImAgKGEgZGVmYXVsdCBsb2NhbGUgaXMgdXNlZClcbiAgICAgICAgICpcbiAgICAgICAgICogW0xvY2FsaXphdGlvbiAmIEdsb2JhbGl6YXRpb24gaGVscCB0b3BpY10oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9zdXJ2ZXktbG9jYWxpemF0aW9uIChsaW5rU3R5bGUpKVxuICAgICAgICAgKlxuICAgICAgICAgKiBbU3VydmV5IExvY2FsaXphdGlvbiBkZW1vXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9leGFtcGxlcy9zdXJ2ZXktbG9jYWxpemF0aW9uLyAobGlua1N0eWxlKSlcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImxvY2FsZVwiLCBfc3VydmV5U3RyaW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fW1wic3VydmV5TG9jYWxpemF0aW9uXCJdLmN1cnJlbnRMb2NhbGUpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKHZhbHVlID09PSBfc3VydmV5U3RyaW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fW1wic3VydmV5TG9jYWxpemF0aW9uXCJdLmRlZmF1bHRMb2NhbGUgJiYgIV9zdXJ2ZXlTdHJpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bXCJzdXJ2ZXlMb2NhbGl6YXRpb25cIl0uY3VycmVudExvY2FsZSkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gXCJcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImxvY2FsZVwiLCB2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUub25TdXJ2ZXlMb2NhbGVDaGFuZ2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLm5vdGlmeUVsZW1lbnRzT25BbnlWYWx1ZU9yVmFyaWFibGVDaGFuZ2VkKFwibG9jYWxlXCIpO1xuICAgICAgICB0aGlzLmxvY2FsZUNoYW5nZWQoKTtcbiAgICAgICAgdGhpcy5vbkxvY2FsZUNoYW5nZWRFdmVudC5maXJlKHRoaXMsIHRoaXMubG9jYWxlKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gYXJyYXkgb2YgbG9jYWxlcyB3aG9zZSB0cmFuc2xhdGlvbnMgYXJlIHVzZWQgaW4gdGhlIHN1cnZleS5cbiAgICAgKlxuICAgICAqIFtMb2NhbGl6YXRpb24gJiBHbG9iYWxpemF0aW9uIGhlbHAgdG9waWNdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vc3VydmV5LWxvY2FsaXphdGlvbiAobGlua1N0eWxlKSlcbiAgICAgKlxuICAgICAqIFtTdXJ2ZXkgTG9jYWxpemF0aW9uIGRlbW9dKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2V4YW1wbGVzL3N1cnZleS1sb2NhbGl6YXRpb24vIChsaW5rU3R5bGUpKVxuICAgICAqL1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5nZXRVc2VkTG9jYWxlcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGxvY3MgPSBuZXcgQXJyYXkoKTtcbiAgICAgICAgdGhpcy5hZGRVc2VkTG9jYWxlcyhsb2NzKTtcbiAgICAgICAgLy9SZXBsYWNlIHRoZSBkZWZhdWx0IGxvY2FsZSB3aXRoIHRoZSByZWFsIG9uZVxuICAgICAgICB2YXIgaW5kZXggPSBsb2NzLmluZGV4T2YoXCJkZWZhdWx0XCIpO1xuICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgdmFyIGRlZmF1bHRMb2MgPSBfc3VydmV5U3RyaW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fW1wic3VydmV5TG9jYWxpemF0aW9uXCJdLmRlZmF1bHRMb2NhbGU7XG4gICAgICAgICAgICAvL1JlbW92ZSB0aGUgZGVmYXVsdExvY1xuICAgICAgICAgICAgdmFyIGRlZkluZGV4ID0gbG9jcy5pbmRleE9mKGRlZmF1bHRMb2MpO1xuICAgICAgICAgICAgaWYgKGRlZkluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICBsb2NzLnNwbGljZShkZWZJbmRleCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpbmRleCA9IGxvY3MuaW5kZXhPZihcImRlZmF1bHRcIik7XG4gICAgICAgICAgICBsb2NzW2luZGV4XSA9IGRlZmF1bHRMb2M7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxvY3M7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUubG9jYWxlQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLnBhZ2VzW2ldLmxvY2FsZUNoYW5nZWQoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgLy9JTG9jYWxpemFibGVPd25lclxuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5nZXRMb2NhbGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZTtcbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5sb2NTdHJzQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5sb2NTdHJzQ2hhbmdlZC5jYWxsKHRoaXMpO1xuICAgICAgICBpZiAoIXRoaXMuY3VycmVudFBhZ2UpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmICh0aGlzLmlzRGVzaWduTW9kZSkge1xuICAgICAgICAgICAgdGhpcy5wYWdlcy5mb3JFYWNoKGZ1bmN0aW9uIChwYWdlKSB7IHJldHVybiBwYWdlLmxvY1N0cnNDaGFuZ2VkKCk7IH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIHBhZ2UgPSB0aGlzLmFjdGl2ZVBhZ2U7XG4gICAgICAgICAgICBpZiAoISFwYWdlKSB7XG4gICAgICAgICAgICAgICAgcGFnZS5sb2NTdHJzQ2hhbmdlZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHZpc1BhZ2VzID0gdGhpcy52aXNpYmxlUGFnZXM7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZpc1BhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmlzUGFnZXNbaV0ubmF2aWdhdGlvbkxvY1N0ckNoYW5nZWQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuaXNTaG93U3RhcnRpbmdQYWdlKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVByb2dyZXNzVGV4dCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubmF2aWdhdGlvbkJhci5sb2NTdHJzQ2hhbmdlZCgpO1xuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLmdldE1hcmtkb3duSHRtbCA9IGZ1bmN0aW9uICh0ZXh0LCBuYW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFN1cnZleU1hcmtkb3duSHRtbCh0aGlzLCB0ZXh0LCBuYW1lKTtcbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5nZXRSZW5kZXJlciA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFJlbmRlcmVyRm9yU3RyaW5nKHRoaXMsIG5hbWUpO1xuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLmdldFJlbmRlcmVyQ29udGV4dCA9IGZ1bmN0aW9uIChsb2NTdHIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVuZGVyZXJDb250ZXh0Rm9yU3RyaW5nKHRoaXMsIGxvY1N0cik7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuZ2V0UmVuZGVyZXJGb3JTdHJpbmcgPSBmdW5jdGlvbiAoZWxlbWVudCwgbmFtZSkge1xuICAgICAgICB2YXIgcmVuZGVyQXMgPSB0aGlzLmdldEJ1aWx0SW5SZW5kZXJlckZvclN0cmluZyhlbGVtZW50LCBuYW1lKTtcbiAgICAgICAgdmFyIG9wdGlvbnMgPSB7IGVsZW1lbnQ6IGVsZW1lbnQsIG5hbWU6IG5hbWUsIHJlbmRlckFzOiByZW5kZXJBcyB9O1xuICAgICAgICB0aGlzLm9uVGV4dFJlbmRlckFzLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBvcHRpb25zLnJlbmRlckFzO1xuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLmdldFJlbmRlcmVyQ29udGV4dEZvclN0cmluZyA9IGZ1bmN0aW9uIChlbGVtZW50LCBsb2NTdHIpIHtcbiAgICAgICAgcmV0dXJuIGxvY1N0cjtcbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5nZXRFeHByZXNzaW9uRGlzcGxheVZhbHVlID0gZnVuY3Rpb24gKHF1ZXN0aW9uLCB2YWx1ZSwgZGlzcGxheVZhbHVlKSB7XG4gICAgICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgICAgICAgcXVlc3Rpb246IHF1ZXN0aW9uLFxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgZGlzcGxheVZhbHVlOiBkaXNwbGF5VmFsdWUsXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMub25HZXRFeHByZXNzaW9uRGlzcGxheVZhbHVlLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBvcHRpb25zLmRpc3BsYXlWYWx1ZTtcbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5nZXRCdWlsdEluUmVuZGVyZXJGb3JTdHJpbmcgPSBmdW5jdGlvbiAoZWxlbWVudCwgbmFtZSkge1xuICAgICAgICBpZiAodGhpcy5pc0Rlc2lnbk1vZGUpXG4gICAgICAgICAgICByZXR1cm4gX2xvY2FsaXphYmxlc3RyaW5nX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fW1wiTG9jYWxpemFibGVTdHJpbmdcIl0uZWRpdGFibGVSZW5kZXJlcjtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5nZXRQcm9jZXNzZWRUZXh0ID0gZnVuY3Rpb24gKHRleHQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1RleHQodGV4dCwgdHJ1ZSk7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuZ2V0TG9jU3RyaW5nID0gZnVuY3Rpb24gKHN0cikge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YXRpb25TdHJpbmcoc3RyKTtcbiAgICB9O1xuICAgIC8vSVN1cnZleUVycm9yT3duZXJcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuZ2V0RXJyb3JDdXN0b21UZXh0ID0gZnVuY3Rpb24gKHRleHQsIGVycm9yKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFN1cnZleUVycm9yQ3VzdG9tVGV4dCh0aGlzLCB0ZXh0LCBlcnJvcik7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuZ2V0U3VydmV5RXJyb3JDdXN0b21UZXh0ID0gZnVuY3Rpb24gKG9iaiwgdGV4dCwgZXJyb3IpIHtcbiAgICAgICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICAgICAgICB0ZXh0OiB0ZXh0LFxuICAgICAgICAgICAgbmFtZTogZXJyb3IuZ2V0RXJyb3JUeXBlKCksXG4gICAgICAgICAgICBvYmo6IG9iaixcbiAgICAgICAgICAgIGVycm9yOiBlcnJvclxuICAgICAgICB9O1xuICAgICAgICB0aGlzLm9uRXJyb3JDdXN0b21UZXh0LmZpcmUodGhpcywgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBvcHRpb25zLnRleHQ7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuZ2V0UXVlc3Rpb25EaXNwbGF5VmFsdWUgPSBmdW5jdGlvbiAocXVlc3Rpb24sIGRpc3BsYXlWYWx1ZSkge1xuICAgICAgICB2YXIgb3B0aW9ucyA9IHsgcXVlc3Rpb246IHF1ZXN0aW9uLCBkaXNwbGF5VmFsdWU6IGRpc3BsYXlWYWx1ZSB9O1xuICAgICAgICB0aGlzLm9uR2V0UXVlc3Rpb25EaXNwbGF5VmFsdWUuZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMuZGlzcGxheVZhbHVlO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleU1vZGVsLnByb3RvdHlwZSwgXCJlbXB0eVN1cnZleVRleHRcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJucyBhIG1lc3NhZ2UgdGhhdCBpcyBkaXNwbGF5ZWQgd2hlbiBhIHN1cnZleSBkb2VzIG5vdCBjb250YWluIHZpc2libGUgcGFnZXMgb3IgcXVlc3Rpb25zLlxuICAgICAgICAgKiBAc2VlIFtMb2NhbGl6YXRpb24gJiBHbG9iYWxpemF0aW9uXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL3N1cnZleS1sb2NhbGl6YXRpb24pXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphdGlvblN0cmluZyhcImVtcHR5U3VydmV5XCIpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleU1vZGVsLnByb3RvdHlwZSwgXCJsb2dvXCIsIHtcbiAgICAgICAgLy8jcmVnaW9uIFRpdGxlL0hlYWRlciBvcHRpb25zXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBbiBpbWFnZSBVUkwgb3IgYSBCYXNlNjQtZW5jb2RlZCBpbWFnZSB0byB1c2UgYXMgYSBzdXJ2ZXkgbG9nby5cbiAgICAgICAgICpcbiAgICAgICAgICogW1ZpZXcgRGVtb10oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZXhhbXBsZXMvc3VydmV5LWxvZ28vIChsaW5rU3R5bGUpKVxuICAgICAgICAgKiBAc2VlIGxvZ29Qb3NpdGlvblxuICAgICAgICAgKiBAc2VlIGxvZ29GaXRcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwibG9nb1wiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwibG9nb1wiLCB2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5TW9kZWwucHJvdG90eXBlLCBcImxvY0xvZ29cIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwibG9nb1wiKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwibG9nb1dpZHRoXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEEgbG9nbyB3aWR0aCBpbiBDU1MtYWNjZXB0ZWQgdmFsdWVzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBEZWZhdWx0IHZhbHVlOiBgMzAwcHhgXG4gICAgICAgICAqXG4gICAgICAgICAqIFtWaWV3IERlbW9dKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2V4YW1wbGVzL3N1cnZleS1sb2dvLyAobGlua1N0eWxlKSlcbiAgICAgICAgICogQHNlZSBsb2dvSGVpZ2h0XG4gICAgICAgICAqIEBzZWUgbG9nb1xuICAgICAgICAgKiBAc2VlIGxvZ29Qb3NpdGlvblxuICAgICAgICAgKiBAc2VlIGxvZ29GaXRcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImxvZ29XaWR0aFwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImxvZ29XaWR0aFwiLCB2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5TW9kZWwucHJvdG90eXBlLCBcInJlbmRlcmVkTG9nb1dpZHRoXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2dvV2lkdGggPyBPYmplY3QoX3V0aWxzX3V0aWxzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNV9fW1wiZ2V0UmVuZGVyZWRTaXplXCJdKSh0aGlzLmxvZ29XaWR0aCkgOiB1bmRlZmluZWQ7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5TW9kZWwucHJvdG90eXBlLCBcInJlbmRlcmVkU3R5bGVMb2dvV2lkdGhcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvZ29XaWR0aCA/IE9iamVjdChfdXRpbHNfdXRpbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE1X19bXCJnZXRSZW5kZXJlZFN0eWxlU2l6ZVwiXSkodGhpcy5sb2dvV2lkdGgpIDogdW5kZWZpbmVkO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleU1vZGVsLnByb3RvdHlwZSwgXCJsb2dvSGVpZ2h0XCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEEgbG9nbyBoZWlnaHQgaW4gQ1NTLWFjY2VwdGVkIHZhbHVlcy5cbiAgICAgICAgICpcbiAgICAgICAgICogRGVmYXVsdCB2YWx1ZTogYDIwMHB4YFxuICAgICAgICAgKlxuICAgICAgICAgKiBbVmlldyBEZW1vXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9leGFtcGxlcy9zdXJ2ZXktbG9nby8gKGxpbmtTdHlsZSkpXG4gICAgICAgICAqIEBzZWUgbG9nb0hlaWdodFxuICAgICAgICAgKiBAc2VlIGxvZ29cbiAgICAgICAgICogQHNlZSBsb2dvUG9zaXRpb25cbiAgICAgICAgICogQHNlZSBsb2dvRml0XG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJsb2dvSGVpZ2h0XCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibG9nb0hlaWdodFwiLCB2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5TW9kZWwucHJvdG90eXBlLCBcInJlbmRlcmVkTG9nb0hlaWdodFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9nb0hlaWdodCA/IE9iamVjdChfdXRpbHNfdXRpbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE1X19bXCJnZXRSZW5kZXJlZFNpemVcIl0pKHRoaXMubG9nb0hlaWdodCkgOiB1bmRlZmluZWQ7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5TW9kZWwucHJvdG90eXBlLCBcInJlbmRlcmVkU3R5bGVMb2dvSGVpZ2h0XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2dvSGVpZ2h0ID8gT2JqZWN0KF91dGlsc191dGlsc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfX1tcImdldFJlbmRlcmVkU3R5bGVTaXplXCJdKSh0aGlzLmxvZ29IZWlnaHQpIDogdW5kZWZpbmVkO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleU1vZGVsLnByb3RvdHlwZSwgXCJsb2dvUG9zaXRpb25cIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogQSBsb2dvIHBvc2l0aW9uIHJlbGF0aXZlIHRvIHRoZSBbc3VydmV5IHRpdGxlXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2Uvc3VydmV5LWRhdGEtbW9kZWwjdGl0bGUpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBQb3NzaWJsZSB2YWx1ZXM6XG4gICAgICAgICAqXG4gICAgICAgICAqIC0gYFwibGVmdFwiYCAoZGVmYXVsdCkgLSBQbGFjZXMgdGhlIGxvZ28gdG8gdGhlIGxlZnQgb2YgdGhlIHN1cnZleSB0aXRsZS5cbiAgICAgICAgICogLSBgXCJyaWdodFwiYCAtIFBsYWNlcyB0aGUgbG9nbyB0byB0aGUgcmlnaHQgb2YgdGhlIHN1cnZleSB0aXRsZS5cbiAgICAgICAgICogLSBgXCJub25lXCJgIC0gSGlkZXMgdGhlIGxvZ28uXG4gICAgICAgICAqXG4gICAgICAgICAqIFtWaWV3IERlbW9dKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2V4YW1wbGVzL3N1cnZleS1sb2dvLyAobGlua1N0eWxlKSlcbiAgICAgICAgICogQHNlZSBsb2dvXG4gICAgICAgICAqIEBzZWUgbG9nb0ZpdFxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibG9nb1Bvc2l0aW9uXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibG9nb1Bvc2l0aW9uXCIsIHZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwiaGFzTG9nb1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImhhc0xvZ29cIiwgZmFsc2UpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLnVwZGF0ZUhhc0xvZ28gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImhhc0xvZ29cIiwgISF0aGlzLmxvZ28gJiYgdGhpcy5sb2dvUG9zaXRpb24gIT09IFwibm9uZVwiKTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwiaXNMb2dvQmVmb3JlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0Rlc2lnbk1vZGUpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuICh0aGlzLnJlbmRlcmVkSGFzTG9nbyAmJlxuICAgICAgICAgICAgICAgICh0aGlzLmxvZ29Qb3NpdGlvbiA9PT0gXCJsZWZ0XCIgfHwgdGhpcy5sb2dvUG9zaXRpb24gPT09IFwidG9wXCIpKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwiaXNMb2dvQWZ0ZXJcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRGVzaWduTW9kZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJlZEhhc0xvZ287XG4gICAgICAgICAgICByZXR1cm4gKHRoaXMucmVuZGVyZWRIYXNMb2dvICYmXG4gICAgICAgICAgICAgICAgKHRoaXMubG9nb1Bvc2l0aW9uID09PSBcInJpZ2h0XCIgfHwgdGhpcy5sb2dvUG9zaXRpb24gPT09IFwiYm90dG9tXCIpKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwibG9nb0NsYXNzTmFtZXNcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBsb2dvQ2xhc3NlcyA9IHtcbiAgICAgICAgICAgICAgICBsZWZ0OiBcInN2LWxvZ28tLWxlZnRcIixcbiAgICAgICAgICAgICAgICByaWdodDogXCJzdi1sb2dvLS1yaWdodFwiLFxuICAgICAgICAgICAgICAgIHRvcDogXCJzdi1sb2dvLS10b3BcIixcbiAgICAgICAgICAgICAgICBib3R0b206IFwic3YtbG9nby0tYm90dG9tXCIsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBfdXRpbHNfY3NzQ2xhc3NCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOF9fW1wiQ3NzQ2xhc3NCdWlsZGVyXCJdKCkuYXBwZW5kKHRoaXMuY3NzLmxvZ28pXG4gICAgICAgICAgICAgICAgLmFwcGVuZChsb2dvQ2xhc3Nlc1t0aGlzLmxvZ29Qb3NpdGlvbl0pLnRvU3RyaW5nKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5TW9kZWwucHJvdG90eXBlLCBcInJlbmRlcmVkSGFzVGl0bGVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRGVzaWduTW9kZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pc1Byb3BlcnR5VmlzaWJsZShcInRpdGxlXCIpO1xuICAgICAgICAgICAgcmV0dXJuICF0aGlzLmxvY1RpdGxlLmlzRW1wdHkgJiYgdGhpcy5zaG93VGl0bGU7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5TW9kZWwucHJvdG90eXBlLCBcInJlbmRlcmVkSGFzRGVzY3JpcHRpb25cIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRGVzaWduTW9kZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pc1Byb3BlcnR5VmlzaWJsZShcImRlc2NyaXB0aW9uXCIpO1xuICAgICAgICAgICAgcmV0dXJuICEhdGhpcy5oYXNEZXNjcmlwdGlvbjtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwiaGFzVGl0bGVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlcmVkSGFzVGl0bGU7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5TW9kZWwucHJvdG90eXBlLCBcInJlbmRlcmVkSGFzTG9nb1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNEZXNpZ25Nb2RlKVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmlzUHJvcGVydHlWaXNpYmxlKFwibG9nb1wiKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmhhc0xvZ287XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5TW9kZWwucHJvdG90eXBlLCBcInJlbmRlcmVkSGFzSGVhZGVyXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJlZEhhc1RpdGxlIHx8IHRoaXMucmVuZGVyZWRIYXNMb2dvO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleU1vZGVsLnByb3RvdHlwZSwgXCJsb2dvRml0XCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyBob3cgdG8gcmVzaXplIGEgbG9nbyB0byBmaXQgaXQgaW50byBpdHMgY29udGFpbmVyLlxuICAgICAgICAgKlxuICAgICAgICAgKiBQb3NzaWJsZSB2YWx1ZXM6XG4gICAgICAgICAqXG4gICAgICAgICAqIC0gYFwiY29udGFpblwiYCAoZGVmYXVsdClcbiAgICAgICAgICogLSBgXCJjb3ZlclwiYFxuICAgICAgICAgKiAtIGBcImZpbGxcImBcbiAgICAgICAgICogLSBgXCJub25lXCJgXG4gICAgICAgICAqXG4gICAgICAgICAqIFJlZmVyIHRvIHRoZSBbYG9iamVjdC1maXRgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1Mvb2JqZWN0LWZpdCkgQ1NTIHByb3BlcnR5IGRlc2NyaXB0aW9uIGZvciBpbmZvcm1hdGlvbiBvbiB0aGUgcG9zc2libGUgdmFsdWVzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBbVmlldyBEZW1vXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9leGFtcGxlcy9zdXJ2ZXktbG9nby8gKGxpbmtTdHlsZSkpXG4gICAgICAgICAqIEBzZWUgbG9nb1xuICAgICAgICAgKiBAc2VlIGxvZ29Qb3NpdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibG9nb0ZpdFwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJsb2dvRml0XCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5TW9kZWwucHJvdG90eXBlLCBcInRoZW1lVmFyaWFibGVzXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5jc3NWYXJpYWJsZXMpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLnNldElzTW9iaWxlID0gZnVuY3Rpb24gKG5ld1ZhbCkge1xuICAgICAgICBpZiAobmV3VmFsID09PSB2b2lkIDApIHsgbmV3VmFsID0gdHJ1ZTsgfVxuICAgICAgICBpZiAodGhpcy5faXNNb2JpbGUgIT09IG5ld1ZhbCkge1xuICAgICAgICAgICAgdGhpcy5faXNNb2JpbGUgPSBuZXdWYWw7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNzcygpO1xuICAgICAgICAgICAgdGhpcy5nZXRBbGxRdWVzdGlvbnMoKS5tYXAoZnVuY3Rpb24gKHEpIHsgcmV0dXJuIHEuc2V0SXNNb2JpbGUobmV3VmFsKTsgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwiaXNNb2JpbGVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9pc01vYmlsZSAmJiAhdGhpcy5pc0Rlc2lnbk1vZGU7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5TW9kZWwucHJvdG90eXBlLCBcImlzQ29tcGFjdFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzQ29tcGFjdDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAobmV3VmFsKSB7XG4gICAgICAgICAgICBpZiAobmV3VmFsICE9PSB0aGlzLl9pc0NvbXBhY3QpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9pc0NvbXBhY3QgPSBuZXdWYWw7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVFbGVtZW50Q3NzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuaXNMb2dvSW1hZ2VDaG9vc2VuID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NMb2dvLnJlbmRlcmVkSHRtbDtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwidGl0bGVNYXhXaWR0aFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCEoT2JqZWN0KF91dGlsc191dGlsc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfX1tcImlzTW9iaWxlXCJdKSgpIHx8IHRoaXMuaXNNb2JpbGUpICYmXG4gICAgICAgICAgICAgICAgIXRoaXMuaXNWYWx1ZUVtcHR5KHRoaXMuaXNMb2dvSW1hZ2VDaG9vc2VuKCkpICYmXG4gICAgICAgICAgICAgICAgIV9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfX1tcInNldHRpbmdzXCJdLnN1cHBvcnRDcmVhdG9yVjIpIHtcbiAgICAgICAgICAgICAgICB2YXIgbG9nb1dpZHRoID0gdGhpcy5sb2dvV2lkdGg7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubG9nb1Bvc2l0aW9uID09PSBcImxlZnRcIiB8fCB0aGlzLmxvZ29Qb3NpdGlvbiA9PT0gXCJyaWdodFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcImNhbGMoMTAwJSAtIDVweCAtIDJlbSAtIFwiICsgbG9nb1dpZHRoICsgXCIpXCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUudXBkYXRlUmVuZGVyQmFja2dyb3VuZEltYWdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuYmFja2dyb3VuZEltYWdlO1xuICAgICAgICB0aGlzLnJlbmRlckJhY2tncm91bmRJbWFnZSA9IE9iamVjdChfdXRpbHNfdXRpbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE1X19bXCJ3cmFwVXJsRm9yQmFja2dyb3VuZEltYWdlXCJdKShwYXRoKTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwiYmFja2dyb3VuZE9wYWNpdHlcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogQSB2YWx1ZSBmcm9tIDAgdG8gMSB0aGF0IHNwZWNpZmllcyBob3cgdHJhbnNwYXJlbnQgdGhlIFtiYWNrZ3JvdW5kIGltYWdlXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2Uvc3VydmV5LWRhdGEtbW9kZWwjYmFja2dyb3VuZEltYWdlKSBzaG91bGQgYmU6IDAgbWFrZXMgdGhlIGltYWdlIGNvbXBsZXRlbHkgdHJhbnNwYXJlbnQsIGFuZCAxIG1ha2VzIGl0IG9wYXF1ZS5cbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImJhY2tncm91bmRPcGFjaXR5XCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImJhY2tncm91bmRPcGFjaXR5XCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5TW9kZWwucHJvdG90eXBlLCBcImJhY2tncm91bmRJbWFnZVN0eWxlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIG9wYWNpdHk6IHRoaXMuYmFja2dyb3VuZE9wYWNpdHksXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZEltYWdlOiB0aGlzLnJlbmRlckJhY2tncm91bmRJbWFnZSxcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kU2l6ZTogdGhpcy5iYWNrZ3JvdW5kSW1hZ2VGaXQsXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZEF0dGFjaG1lbnQ6IHRoaXMuYmFja2dyb3VuZEltYWdlQXR0YWNobWVudFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwiY29tcGxldGVkSHRtbFwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBIVE1MIGNvbnRlbnQgZGlzcGxheWVkIG9uIHRoZSBbY29tcGxldGUgcGFnZV0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9kZXNpZ24tc3VydmV5L2NyZWF0ZS1hLW11bHRpLXBhZ2Utc3VydmV5I2NvbXBsZXRlLXBhZ2UpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBbVmlldyBEZW1vXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9leGFtcGxlcy9tb2RpZnktc3VydmV5LW5hdmlnYXRpb24tc2V0dGluZ3MvIChsaW5rU3R5bGUpKVxuICAgICAgICAgKiBAc2VlIHNob3dDb21wbGV0ZWRQYWdlXG4gICAgICAgICAqIEBzZWUgY29tcGxldGVkSHRtbE9uQ29uZGl0aW9uXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImNvbXBsZXRlZEh0bWxcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImNvbXBsZXRlZEh0bWxcIiwgdmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleU1vZGVsLnByb3RvdHlwZSwgXCJsb2NDb21wbGV0ZWRIdG1sXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcImNvbXBsZXRlZEh0bWxcIik7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5TW9kZWwucHJvdG90eXBlLCBcImNvbXBsZXRlZEh0bWxPbkNvbmRpdGlvblwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBbiBhcnJheSBvZiBvYmplY3RzIHRoYXQgYWxsb3dzIHlvdSB0byBzcGVjaWZ5IGRpZmZlcmVudCBIVE1MIGNvbnRlbnQgZm9yIHRoZSBbY29tcGxldGUgcGFnZV0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9kZXNpZ24tc3VydmV5L2NyZWF0ZS1hLW11bHRpLXBhZ2Utc3VydmV5I2NvbXBsZXRlLXBhZ2UpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBFYWNoIG9iamVjdCBzaG91bGQgaW5jbHVkZSB0aGUgW2BleHByZXNzaW9uYF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL2h0bWxjb25kaXRpb25pdGVtI2V4cHJlc3Npb24pIGFuZCBbYGh0bWxgXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2UvaHRtbGNvbmRpdGlvbml0ZW0jaHRtbCkgcHJvcGVydGllcy4gV2hlbiBgZXhwcmVzc2lvbmAgZXZhbHVhdGVzIHRvIGB0cnVlYCwgdGhlIHN1cnZleSB1c2VzIHRoZSBjb3JyZXNwb25kaW5nIEhUTUwgbWFya3VwIGluc3RlYWQgb2YgW2Bjb21wbGV0ZWRIdG1sYF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL3N1cnZleS1kYXRhLW1vZGVsI2NvbXBsZXRlZEh0bWwpLiBSZWZlciB0byB0aGUgZm9sbG93aW5nIGhlbHAgdG9waWMgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgZXhwcmVzc2lvbnM6IFtFeHByZXNzaW9uc10oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9kZXNpZ24tc3VydmV5L2NvbmRpdGlvbmFsLWxvZ2ljI2V4cHJlc3Npb25zKS5cbiAgICAgICAgICpcbiAgICAgICAgICogW1ZpZXcgRGVtb10oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZXhhbXBsZXMvbnBzLXF1ZXN0aW9uLyAobGlua1N0eWxlKSlcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNvbXBsZXRlZEh0bWxPbkNvbmRpdGlvblwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjb21wbGV0ZWRIdG1sT25Db25kaXRpb25cIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZXMgYSBnaXZlbiBbZXhwcmVzc2lvbl0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9kZXNpZ24tc3VydmV5L2NvbmRpdGlvbmFsLWxvZ2ljI2V4cHJlc3Npb25zKSBhbmQgcmV0dXJucyBhIHJlc3VsdCB2YWx1ZS5cbiAgICAgKiBAcGFyYW0gZXhwcmVzc2lvbiBBbiBleHByZXNzaW9uIHRvIGNhbGN1bGF0ZS5cbiAgICAgKi9cbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUucnVuRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChleHByZXNzaW9uKSB7XG4gICAgICAgIGlmICghZXhwcmVzc2lvbilcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB2YXIgdmFsdWVzID0gdGhpcy5nZXRGaWx0ZXJlZFZhbHVlcygpO1xuICAgICAgICB2YXIgcHJvcGVydGllcyA9IHRoaXMuZ2V0RmlsdGVyZWRQcm9wZXJ0aWVzKCk7XG4gICAgICAgIHJldHVybiBuZXcgX2NvbmRpdGlvbnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX19bXCJFeHByZXNzaW9uUnVubmVyXCJdKGV4cHJlc3Npb24pLnJ1bih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlcyBhIGdpdmVuIFtleHByZXNzaW9uXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2Rlc2lnbi1zdXJ2ZXkvY29uZGl0aW9uYWwtbG9naWMjZXhwcmVzc2lvbnMpIGFuZCByZXR1cm5zIGB0cnVlYCBvciBgZmFsc2VgLlxuICAgICAqIEBwYXJhbSBleHByZXNzaW9uIEFuIGV4cHJlc3Npb24gdG8gY2FsY3VsYXRlLlxuICAgICAqL1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5ydW5Db25kaXRpb24gPSBmdW5jdGlvbiAoZXhwcmVzc2lvbikge1xuICAgICAgICBpZiAoIWV4cHJlc3Npb24pXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHZhciB2YWx1ZXMgPSB0aGlzLmdldEZpbHRlcmVkVmFsdWVzKCk7XG4gICAgICAgIHZhciBwcm9wZXJ0aWVzID0gdGhpcy5nZXRGaWx0ZXJlZFByb3BlcnRpZXMoKTtcbiAgICAgICAgcmV0dXJuIG5ldyBfY29uZGl0aW9uc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX1tcIkNvbmRpdGlvblJ1bm5lclwiXShleHByZXNzaW9uKS5ydW4odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEV4ZWN1dGVzIFthbGwgdHJpZ2dlcnNdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vYXBpLXJlZmVyZW5jZS9zdXJ2ZXktZGF0YS1tb2RlbCN0cmlnZ2VycyksIGV4Y2VwdCBbXCJjb21wbGV0ZVwiXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2Rlc2lnbi1zdXJ2ZXkvY29uZGl0aW9uYWwtbG9naWMjY29tcGxldGUpLlxuICAgICAqXG4gICAgICogW0NvbmRpdGlvbmFsIFN1cnZleSBMb2dpYyAoVHJpZ2dlcnMpXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2Rlc2lnbi1zdXJ2ZXkvY29uZGl0aW9uYWwtbG9naWMjY29uZGl0aW9uYWwtc3VydmV5LWxvZ2ljLXRyaWdnZXJzIChsaW5rU3R5bGUpKVxuICAgICAqIEBzZWUgb25UcmlnZ2VyRXhlY3V0ZWRcbiAgICAgKi9cbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUucnVuVHJpZ2dlcnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuY2hlY2tUcmlnZ2Vycyh0aGlzLmdldEZpbHRlcmVkVmFsdWVzKCksIGZhbHNlKTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwicmVuZGVyZWRDb21wbGV0ZWRIdG1sXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgaXRlbSA9IHRoaXMuZ2V0RXhwcmVzc2lvbkl0ZW1PblJ1bkNvbmRpdGlvbih0aGlzLmNvbXBsZXRlZEh0bWxPbkNvbmRpdGlvbik7XG4gICAgICAgICAgICByZXR1cm4gISFpdGVtID8gaXRlbS5odG1sIDogdGhpcy5jb21wbGV0ZWRIdG1sO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLmdldEV4cHJlc3Npb25JdGVtT25SdW5Db25kaXRpb24gPSBmdW5jdGlvbiAoaXRlbXMpIHtcbiAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA9PSAwKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIHZhciB2YWx1ZXMgPSB0aGlzLmdldEZpbHRlcmVkVmFsdWVzKCk7XG4gICAgICAgIHZhciBwcm9wZXJ0aWVzID0gdGhpcy5nZXRGaWx0ZXJlZFByb3BlcnRpZXMoKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGl0ZW1zW2ldLnJ1bkNvbmRpdGlvbih2YWx1ZXMsIHByb3BlcnRpZXMpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1zW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleU1vZGVsLnByb3RvdHlwZSwgXCJjb21wbGV0ZWRCZWZvcmVIdG1sXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEhUTUwgY29udGVudCBkaXNwbGF5ZWQgdG8gYSB1c2VyIHdobyBoYXMgY29tcGxldGVkIHRoZSBzdXJ2ZXkgYmVmb3JlLiBUbyBpZGVudGlmeSBzdWNoIHVzZXJzLCB0aGUgc3VydmV5IHVzZXMgYSBbY29va2llIG5hbWVdKCNjb29raWVOYW1lKSBvciBbY2xpZW50IElEXSgjY2xpZW50SWQpLlxuICAgICAgICAgKiBAc2VlIHByb2Nlc3NlZENvbXBsZXRlZEJlZm9yZUh0bWxcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwiY29tcGxldGVkQmVmb3JlSHRtbFwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwiY29tcGxldGVkQmVmb3JlSHRtbFwiLCB2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5TW9kZWwucHJvdG90eXBlLCBcImxvY0NvbXBsZXRlZEJlZm9yZUh0bWxcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwiY29tcGxldGVkQmVmb3JlSHRtbFwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwibG9hZGluZ0h0bWxcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogSFRNTCBjb250ZW50IGRpc3BsYXllZCB3aGlsZSBhIHN1cnZleSBKU09OIHNjaGVtYSBpcyBiZWluZyBsb2FkZWQgZnJvbSBbU3VydmV5SlMgU2VydmljZV0oaHR0cHM6Ly9hcGkuc3VydmV5anMuaW8pLlxuICAgICAgICAgKiBAc2VlIHN1cnZleUlkXG4gICAgICAgICAqIEBzZWUgcHJvY2Vzc2VkTG9hZGluZ0h0bWxcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwibG9hZGluZ0h0bWxcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImxvYWRpbmdIdG1sXCIsIHZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwibG9jTG9hZGluZ0h0bWxcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwibG9hZGluZ0h0bWxcIik7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5TW9kZWwucHJvdG90eXBlLCBcImRlZmF1bHRMb2FkaW5nSHRtbFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIFwiPGgzPlwiICsgdGhpcy5nZXRMb2NhbGl6YXRpb25TdHJpbmcoXCJsb2FkaW5nU3VydmV5XCIpICsgXCI8L2gzPlwiO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleU1vZGVsLnByb3RvdHlwZSwgXCJuYXZpZ2F0aW9uQmFyXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0aW9uQmFyVmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICAvKipcbiAgICAgKiBBZGRzIGEgY3VzdG9tIG5hdmlnYXRpb24gaXRlbSBzaW1pbGFyIHRvIHRoZSBQcmV2aW91cyBQYWdlLCBOZXh0IFBhZ2UsIGFuZCBDb21wbGV0ZSBidXR0b25zLlxuICAgICAqIEFjY2VwdHMgYW4gb2JqZWN0IGRlc2NyaWJlZCBpbiB0aGUgW0lBY3Rpb25dKGh0dHBzOi8vc3VydmV5anMuaW8vRG9jdW1lbnRhdGlvbi9MaWJyYXJ5P2lkPUlBY3Rpb24pIGhlbHAgc2VjdGlvbi5cbiAgICAgKlxuICAgICAqIFtWaWV3IERlbW9dKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2V4YW1wbGVzL3N1cnZleS1jaGFuZ2VuYXZpZ2F0aW9uLyAobGlua1N0eWxlKSlcbiAgICAqL1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5hZGROYXZpZ2F0aW9uSXRlbSA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgaWYgKCF2YWwuY29tcG9uZW50KSB7XG4gICAgICAgICAgICB2YWwuY29tcG9uZW50ID0gXCJzdi1uYXYtYnRuXCI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF2YWwuaW5uZXJDc3MpIHtcbiAgICAgICAgICAgIHZhbC5pbm5lckNzcyA9IHRoaXMuY3NzU3VydmV5TmF2aWdhdGlvbkJ1dHRvbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0aW9uQmFyLmFkZEFjdGlvbih2YWwpO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleU1vZGVsLnByb3RvdHlwZSwgXCJzdGFydFN1cnZleVRleHRcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogR2V0cyBvciBzZXRzIGEgY2FwdGlvbiBmb3IgdGhlIFN0YXJ0IGJ1dHRvbi5cbiAgICAgICAgICogQHNlZSBmaXJzdFBhZ2VJc1N0YXJ0ZWRcbiAgICAgICAgICogQHNlZSBbTG9jYWxpemF0aW9uICYgR2xvYmFsaXphdGlvbl0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9zdXJ2ZXktbG9jYWxpemF0aW9uKVxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJzdGFydFN1cnZleVRleHRcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKG5ld1ZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcInN0YXJ0U3VydmV5VGV4dFwiLCBuZXdWYWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5TW9kZWwucHJvdG90eXBlLCBcImxvY1N0YXJ0U3VydmV5VGV4dFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJzdGFydFN1cnZleVRleHRcIik7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5TW9kZWwucHJvdG90eXBlLCBcInBhZ2VQcmV2VGV4dFwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXRzIG9yIHNldHMgYSBjYXB0aW9uIGZvciB0aGUgUHJldmlvdXMgYnV0dG9uLlxuICAgICAgICAgKiBAc2VlIFtMb2NhbGl6YXRpb24gJiBHbG9iYWxpemF0aW9uXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL3N1cnZleS1sb2NhbGl6YXRpb24pXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcInBhZ2VQcmV2VGV4dFwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAobmV3VmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwicGFnZVByZXZUZXh0XCIsIG5ld1ZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwibG9jUGFnZVByZXZUZXh0XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcInBhZ2VQcmV2VGV4dFwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwicGFnZU5leHRUZXh0XCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldHMgb3Igc2V0cyBhIGNhcHRpb24gZm9yIHRoZSBOZXh0IGJ1dHRvbi5cbiAgICAgICAgICogQHNlZSBbTG9jYWxpemF0aW9uICYgR2xvYmFsaXphdGlvbl0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9zdXJ2ZXktbG9jYWxpemF0aW9uKVxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJwYWdlTmV4dFRleHRcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKG5ld1ZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcInBhZ2VOZXh0VGV4dFwiLCBuZXdWYWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5TW9kZWwucHJvdG90eXBlLCBcImxvY1BhZ2VOZXh0VGV4dFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJwYWdlTmV4dFRleHRcIik7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5TW9kZWwucHJvdG90eXBlLCBcImNvbXBsZXRlVGV4dFwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXRzIG9yIHNldHMgYSBjYXB0aW9uIGZvciB0aGUgQ29tcGxldGUgYnV0dG9uLlxuICAgICAgICAgKiBAc2VlIFtMb2NhbGl6YXRpb24gJiBHbG9iYWxpemF0aW9uXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL3N1cnZleS1sb2NhbGl6YXRpb24pXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImNvbXBsZXRlVGV4dFwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAobmV3VmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwiY29tcGxldGVUZXh0XCIsIG5ld1ZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwibG9jQ29tcGxldGVUZXh0XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcImNvbXBsZXRlVGV4dFwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwicHJldmlld1RleHRcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogR2V0cyBvciBzZXRzIGEgY2FwdGlvbiBmb3IgdGhlIFByZXZpZXcgYnV0dG9uLlxuICAgICAgICAgKiBAc2VlIHNob3dQcmV2aWV3QmVmb3JlQ29tcGxldGVcbiAgICAgICAgICogQHNlZSBzaG93UHJldmlld1xuICAgICAgICAgKiBAc2VlIGVkaXRUZXh0XG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcInByZXZpZXdUZXh0XCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChuZXdWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJwcmV2aWV3VGV4dFwiLCBuZXdWYWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5TW9kZWwucHJvdG90eXBlLCBcImxvY1ByZXZpZXdUZXh0XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcInByZXZpZXdUZXh0XCIpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleU1vZGVsLnByb3RvdHlwZSwgXCJlZGl0VGV4dFwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXRzIG9yIHNldHMgYSBjYXB0aW9uIGZvciB0aGUgRWRpdCBidXR0b24gZGlzcGxheWVkIHdoZW4gdGhlIHN1cnZleSBzaG93cyBhIFtwcmV2aWV3IG9mIGdpdmVuIGFuc3dlcnNdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vZGVzaWduLXN1cnZleS9jcmVhdGUtYS1tdWx0aS1wYWdlLXN1cnZleSNwcmV2aWV3LXBhZ2UpLlxuICAgICAgICAgKiBAc2VlIHNob3dQcmV2aWV3QmVmb3JlQ29tcGxldGVcbiAgICAgICAgICogQHNlZSBjYW5jZWxQcmV2aWV3XG4gICAgICAgICAqIEBzZWUgcHJldmlld1RleHRcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwiZWRpdFRleHRcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKG5ld1ZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImVkaXRUZXh0XCIsIG5ld1ZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwibG9jRWRpdFRleHRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwiZWRpdFRleHRcIik7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuZ2V0RWxlbWVudFRpdGxlVGFnTmFtZSA9IGZ1bmN0aW9uIChlbGVtZW50LCB0YWdOYW1lKSB7XG4gICAgICAgIGlmICh0aGlzLm9uR2V0VGl0bGVUYWdOYW1lLmlzRW1wdHkpXG4gICAgICAgICAgICByZXR1cm4gdGFnTmFtZTtcbiAgICAgICAgdmFyIG9wdGlvbnMgPSB7IGVsZW1lbnQ6IGVsZW1lbnQsIHRhZ05hbWU6IHRhZ05hbWUgfTtcbiAgICAgICAgdGhpcy5vbkdldFRpdGxlVGFnTmFtZS5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gb3B0aW9ucy50YWdOYW1lO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleU1vZGVsLnByb3RvdHlwZSwgXCJxdWVzdGlvblRpdGxlUGF0dGVyblwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgYSBwYXR0ZXJuIGZvciBxdWVzdGlvbiB0aXRsZXMuXG4gICAgICAgICAqXG4gICAgICAgICAqIFJlZmVyIHRvIHRoZSBmb2xsb3dpbmcgaGVscCB0b3BpYyBmb3IgbW9yZSBpbmZvcm1hdGlvbjogW1RpdGxlIFBhdHRlcm5dKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vZGVzaWduLXN1cnZleS9jb25maWd1cmUtcXVlc3Rpb24tdGl0bGVzI3RpdGxlLXBhdHRlcm4pLlxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicXVlc3Rpb25UaXRsZVBhdHRlcm5cIiwgXCJudW1UaXRsZVJlcXVpcmVcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgaWYgKHZhbCAhPT0gXCJudW1SZXF1aXJlVGl0bGVcIiAmJlxuICAgICAgICAgICAgICAgIHZhbCAhPT0gXCJyZXF1aXJlTnVtVGl0bGVcIiAmJlxuICAgICAgICAgICAgICAgIHZhbCAhPSBcIm51bVRpdGxlXCIpIHtcbiAgICAgICAgICAgICAgICB2YWwgPSBcIm51bVRpdGxlUmVxdWlyZVwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicXVlc3Rpb25UaXRsZVBhdHRlcm5cIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5nZXRRdWVzdGlvblRpdGxlUGF0dGVybk9wdGlvbnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciByZXMgPSBuZXcgQXJyYXkoKTtcbiAgICAgICAgdmFyIHRpdGxlID0gdGhpcy5nZXRMb2NhbGl6YXRpb25TdHJpbmcoXCJxdWVzdGlvblRpdGxlUGF0dGVyblRleHRcIik7XG4gICAgICAgIHZhciBudW0gPSAhIXRoaXMucXVlc3Rpb25TdGFydEluZGV4ID8gdGhpcy5xdWVzdGlvblN0YXJ0SW5kZXggOiBcIjEuXCI7XG4gICAgICAgIHJlcy5wdXNoKHtcbiAgICAgICAgICAgIHZhbHVlOiBcIm51bVRpdGxlUmVxdWlyZVwiLFxuICAgICAgICAgICAgdGV4dDogbnVtICsgXCIgXCIgKyB0aXRsZSArIFwiIFwiICsgdGhpcy5yZXF1aXJlZFRleHRcbiAgICAgICAgfSk7XG4gICAgICAgIHJlcy5wdXNoKHtcbiAgICAgICAgICAgIHZhbHVlOiBcIm51bVJlcXVpcmVUaXRsZVwiLFxuICAgICAgICAgICAgdGV4dDogbnVtICsgXCIgXCIgKyB0aGlzLnJlcXVpcmVkVGV4dCArIFwiIFwiICsgdGl0bGVcbiAgICAgICAgfSk7XG4gICAgICAgIHJlcy5wdXNoKHtcbiAgICAgICAgICAgIHZhbHVlOiBcInJlcXVpcmVOdW1UaXRsZVwiLFxuICAgICAgICAgICAgdGV4dDogdGhpcy5yZXF1aXJlZFRleHQgKyBcIiBcIiArIG51bSArIFwiIFwiICsgdGl0bGVcbiAgICAgICAgfSk7XG4gICAgICAgIHJlcy5wdXNoKHtcbiAgICAgICAgICAgIHZhbHVlOiBcIm51bVRpdGxlXCIsXG4gICAgICAgICAgICB0ZXh0OiBudW0gKyBcIiBcIiArIHRpdGxlXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleU1vZGVsLnByb3RvdHlwZSwgXCJxdWVzdGlvblRpdGxlVGVtcGxhdGVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcInF1ZXN0aW9uVGl0bGVUZW1wbGF0ZVwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwicXVlc3Rpb25UaXRsZVRlbXBsYXRlXCIsIHZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25UaXRsZVBhdHRlcm4gPSB0aGlzLmdldE5ld1RpdGxlUGF0dGVybih2YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uU3RhcnRJbmRleCA9IHRoaXMuZ2V0TmV3UXVlc3Rpb25UaXRsZUVsZW1lbnQodmFsdWUsIFwibm9cIiwgdGhpcy5xdWVzdGlvblN0YXJ0SW5kZXgsIFwiMVwiKTtcbiAgICAgICAgICAgIHRoaXMucmVxdWlyZWRUZXh0ID0gdGhpcy5nZXROZXdRdWVzdGlvblRpdGxlRWxlbWVudCh2YWx1ZSwgXCJyZXF1aXJlXCIsIHRoaXMucmVxdWlyZWRUZXh0LCBcIipcIik7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuZ2V0TmV3VGl0bGVQYXR0ZXJuID0gZnVuY3Rpb24gKHRlbXBsYXRlKSB7XG4gICAgICAgIGlmICghIXRlbXBsYXRlKSB7XG4gICAgICAgICAgICB2YXIgc3RycyA9IFtdO1xuICAgICAgICAgICAgd2hpbGUgKHRlbXBsYXRlLmluZGV4T2YoXCJ7XCIpID4gLTEpIHtcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZSA9IHRlbXBsYXRlLnN1YnN0cmluZyh0ZW1wbGF0ZS5pbmRleE9mKFwie1wiKSArIDEpO1xuICAgICAgICAgICAgICAgIHZhciBpbmQgPSB0ZW1wbGF0ZS5pbmRleE9mKFwifVwiKTtcbiAgICAgICAgICAgICAgICBpZiAoaW5kIDwgMClcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgc3Rycy5wdXNoKHRlbXBsYXRlLnN1YnN0cmluZygwLCBpbmQpKTtcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZSA9IHRlbXBsYXRlLnN1YnN0cmluZyhpbmQgKyAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzdHJzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICBpZiAoc3Ryc1swXSA9PSBcInJlcXVpcmVcIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwicmVxdWlyZU51bVRpdGxlXCI7XG4gICAgICAgICAgICAgICAgaWYgKHN0cnNbMV0gPT0gXCJyZXF1aXJlXCIgJiYgc3Rycy5sZW5ndGggPT0gMylcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwibnVtUmVxdWlyZVRpdGxlXCI7XG4gICAgICAgICAgICAgICAgaWYgKHN0cnMuaW5kZXhPZihcInJlcXVpcmVcIikgPCAwKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJudW1UaXRsZVwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHN0cnMubGVuZ3RoID09IDEgJiYgc3Ryc1swXSA9PSBcInRpdGxlXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJudW1UaXRsZVwiO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBcIm51bVRpdGxlUmVxdWlyZVwiO1xuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLmdldE5ld1F1ZXN0aW9uVGl0bGVFbGVtZW50ID0gZnVuY3Rpb24gKHRlbXBsYXRlLCBuYW1lLCBjdXJyZW50VmFsdWUsIGRlZmF1bHRWYWx1ZSkge1xuICAgICAgICBuYW1lID0gXCJ7XCIgKyBuYW1lICsgXCJ9XCI7XG4gICAgICAgIGlmICghdGVtcGxhdGUgfHwgdGVtcGxhdGUuaW5kZXhPZihuYW1lKSA8IDApXG4gICAgICAgICAgICByZXR1cm4gY3VycmVudFZhbHVlO1xuICAgICAgICB2YXIgaW5kID0gdGVtcGxhdGUuaW5kZXhPZihuYW1lKTtcbiAgICAgICAgdmFyIHByZWZpeCA9IFwiXCI7XG4gICAgICAgIHZhciBwb3N0Zml4ID0gXCJcIjtcbiAgICAgICAgdmFyIGkgPSBpbmQgLSAxO1xuICAgICAgICBmb3IgKDsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGlmICh0ZW1wbGF0ZVtpXSA9PSBcIn1cIilcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoaSA8IGluZCAtIDEpIHtcbiAgICAgICAgICAgIHByZWZpeCA9IHRlbXBsYXRlLnN1YnN0cmluZyhpICsgMSwgaW5kKTtcbiAgICAgICAgfVxuICAgICAgICBpbmQgKz0gbmFtZS5sZW5ndGg7XG4gICAgICAgIGkgPSBpbmQ7XG4gICAgICAgIGZvciAoOyBpIDwgdGVtcGxhdGUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh0ZW1wbGF0ZVtpXSA9PSBcIntcIilcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoaSA+IGluZCkge1xuICAgICAgICAgICAgcG9zdGZpeCA9IHRlbXBsYXRlLnN1YnN0cmluZyhpbmQsIGkpO1xuICAgICAgICB9XG4gICAgICAgIGkgPSAwO1xuICAgICAgICB3aGlsZSAoaSA8IHByZWZpeC5sZW5ndGggJiYgcHJlZml4LmNoYXJDb2RlQXQoaSkgPCAzMylcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgcHJlZml4ID0gcHJlZml4LnN1YnN0cmluZyhpKTtcbiAgICAgICAgaSA9IHBvc3RmaXgubGVuZ3RoIC0gMTtcbiAgICAgICAgd2hpbGUgKGkgPj0gMCAmJiBwb3N0Zml4LmNoYXJDb2RlQXQoaSkgPCAzMylcbiAgICAgICAgICAgIGktLTtcbiAgICAgICAgcG9zdGZpeCA9IHBvc3RmaXguc3Vic3RyaW5nKDAsIGkgKyAxKTtcbiAgICAgICAgaWYgKCFwcmVmaXggJiYgIXBvc3RmaXgpXG4gICAgICAgICAgICByZXR1cm4gY3VycmVudFZhbHVlO1xuICAgICAgICB2YXIgdmFsdWUgPSAhIWN1cnJlbnRWYWx1ZSA/IGN1cnJlbnRWYWx1ZSA6IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgcmV0dXJuIHByZWZpeCArIHZhbHVlICsgcG9zdGZpeDtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwibG9jUXVlc3Rpb25UaXRsZVRlbXBsYXRlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcInF1ZXN0aW9uVGl0bGVUZW1wbGF0ZVwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5nZXRVcGRhdGVkUXVlc3Rpb25UaXRsZSA9IGZ1bmN0aW9uIChxdWVzdGlvbiwgdGl0bGUpIHtcbiAgICAgICAgaWYgKHRoaXMub25HZXRRdWVzdGlvblRpdGxlLmlzRW1wdHkpXG4gICAgICAgICAgICByZXR1cm4gdGl0bGU7XG4gICAgICAgIHZhciBvcHRpb25zID0geyBxdWVzdGlvbjogcXVlc3Rpb24sIHRpdGxlOiB0aXRsZSB9O1xuICAgICAgICB0aGlzLm9uR2V0UXVlc3Rpb25UaXRsZS5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gb3B0aW9ucy50aXRsZTtcbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5nZXRVcGRhdGVkUXVlc3Rpb25ObyA9IGZ1bmN0aW9uIChxdWVzdGlvbiwgbm8pIHtcbiAgICAgICAgaWYgKHRoaXMub25HZXRRdWVzdGlvbk5vLmlzRW1wdHkpXG4gICAgICAgICAgICByZXR1cm4gbm87XG4gICAgICAgIHZhciBvcHRpb25zID0geyBxdWVzdGlvbjogcXVlc3Rpb24sIG5vOiBubyB9O1xuICAgICAgICB0aGlzLm9uR2V0UXVlc3Rpb25Oby5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gb3B0aW9ucy5ubztcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwic2hvd1BhZ2VOdW1iZXJzXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB3aGV0aGVyIHBhZ2UgdGl0bGVzIGNvbnRhaW4gcGFnZSBudW1iZXJzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBbVmlldyBEZW1vXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9leGFtcGxlcy9ob3ctdG8tbnVtYmVyLXBhZ2VzLWFuZC1xdWVzdGlvbnMvIChsaW5rU3R5bGUpKVxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic2hvd1BhZ2VOdW1iZXJzXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKHZhbHVlID09PSB0aGlzLnNob3dQYWdlTnVtYmVycylcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzaG93UGFnZU51bWJlcnNcIiwgdmFsdWUpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVWaXNpYmxlSW5kZXhlcygpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleU1vZGVsLnByb3RvdHlwZSwgXCJzaG93UXVlc3Rpb25OdW1iZXJzXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB3aGV0aGVyIHRvIGRpc3BsYXkgcXVlc3Rpb24gbnVtYmVycyBhbmQgaG93IHRvIGNhbGN1bGF0ZSB0aGVtLlxuICAgICAgICAgKlxuICAgICAgICAgKiBQb3NzaWJsZSB2YWx1ZXM6XG4gICAgICAgICAqXG4gICAgICAgICAqIC0gYHRydWVgIG9yIGBcIm9uXCJgIC0gRGlzcGxheXMgcXVlc3Rpb24gbnVtYmVycy5cbiAgICAgICAgICogLSBgXCJvbnBhZ2VcImAgLSBEaXNwbGF5cyBxdWVzdGlvbiBudW1iZXJzIGFuZCBzdGFydHMgbnVtYmVyaW5nIG9uIGVhY2ggcGFnZSBmcm9tIHNjcmF0Y2guXG4gICAgICAgICAqIC0gYGZhbHNlYCBvciBgXCJvZmZcImAgLSBIaWRlcyBxdWVzdGlvbiBudW1iZXJzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBbVmlldyBEZW1vXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9leGFtcGxlcy9ob3ctdG8tbnVtYmVyLXBhZ2VzLWFuZC1xdWVzdGlvbnMvIChsaW5rU3R5bGUpKVxuICAgICAgICAgKlxuICAgICAgICAgKiBJZiB5b3Ugd2FudCB0byBoaWRlIHRoZSBudW1iZXIgb2YgYW4gaW5kaXZpZHVhbCBxdWVzdGlvbiwgZW5hYmxlIGl0cyBbYGhpZGVOdW1iZXJgXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2UvcXVlc3Rpb24jaGlkZU51bWJlcikgcHJvcGVydHkuXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzaG93UXVlc3Rpb25OdW1iZXJzXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKHZhbHVlID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBcIm9uXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBcIm9mZlwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSA9PT0gXCJvbnBhZ2VcIiA/IFwib25QYWdlXCIgOiB2YWx1ZTtcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdGhpcy5zaG93UXVlc3Rpb25OdW1iZXJzKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInNob3dRdWVzdGlvbk51bWJlcnNcIiwgdmFsdWUpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVWaXNpYmxlSW5kZXhlcygpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleU1vZGVsLnByb3RvdHlwZSwgXCJzaG93UHJvZ3Jlc3NCYXJcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogQ29udHJvbHMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIHByb2dyZXNzIGJhciBhbmQgc3BlY2lmaWVzIGl0cyBwb3NpdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogUG9zc2libGUgdmFsdWVzOlxuICAgICAgICAgKlxuICAgICAgICAgKiAtIGBcIm9mZlwiYCAoZGVmYXVsdCkgLSBIaWRlcyB0aGUgcHJvZ3Jlc3MgYmFyLlxuICAgICAgICAgKiAtIGBcInRvcFwiYCAtIERpc3BsYXlzIHRoZSBwcm9ncmVzcyBiYXIgYWJvdmUgc3VydmV5IGNvbnRlbnQuXG4gICAgICAgICAqIC0gYFwiYm90dG9tXCJgIC0gRGlzcGxheXMgdGhlIHByb2dyZXNzIGJhciBiZWxvdyBzdXJ2ZXkgY29udGVudC5cbiAgICAgICAgICogLSBgXCJib3RoXCJgIC0gRGlzcGxheXMgdGhlIHByb2dyZXNzIGJhciBhYm92ZSBhbmQgYmVsb3cgc3VydmV5IGNvbnRlbnQuXG4gICAgICAgICAqXG4gICAgICAgICAqIFtWaWV3IERlbW9dKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2V4YW1wbGVzL25hdmlnYXRpb24tZGVmYXVsdC8gKGxpbmtTdHlsZSkpXG4gICAgICAgICAqIEBzZWUgcHJvZ3Jlc3NCYXJUeXBlXG4gICAgICAgICAqIEBzZWUgcHJvZ3Jlc3NWYWx1ZVxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic2hvd1Byb2dyZXNzQmFyXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChuZXdWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwic2hvd1Byb2dyZXNzQmFyXCIsIG5ld1ZhbHVlLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleU1vZGVsLnByb3RvdHlwZSwgXCJwcm9ncmVzc0JhclR5cGVcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHRoZSB0eXBlIG9mIGluZm9ybWF0aW9uIGRpc3BsYXllZCBieSB0aGUgcHJvZ3Jlc3MgYmFyLiBBcHBsaWVzIG9ubHkgd2hlbiBbYHNob3dQcm9ncmVzc0JhcmBdKCNzaG93UHJvZ3Jlc3NCYXIpIGlzIG5vdCBgXCJvZmZcImAuXG4gICAgICAgICAqXG4gICAgICAgICAqIFBvc3NpYmxlIHZhbHVlczpcbiAgICAgICAgICpcbiAgICAgICAgICogLSBgXCJwYWdlc1wiYCAoZGVmYXVsdCkgLSBUaGUgbnVtYmVyIG9mIGNvbXBsZXRlZCBwYWdlcy5cbiAgICAgICAgICogLSBgXCJxdWVzdGlvbnNcImAgLSBUaGUgbnVtYmVyIG9mIGFuc3dlcmVkIHF1ZXN0aW9ucy5cbiAgICAgICAgICogLSBgXCJyZXF1aXJlZFF1ZXN0aW9uc1wiYCAtIFRoZSBudW1iZXIgb2YgYW5zd2VyZWQgW3JlcXVpcmVkIHF1ZXN0aW9uc10oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL3F1ZXN0aW9uI2lzUmVxdWlyZWQpLlxuICAgICAgICAgKiAtIGBcImNvcnJlY3RRdWVzdGlvbnNcImAgLSBUaGUgbnVtYmVyIG9mIGNvcnJlY3QgcXVlc3Rpb25zIGluIGEgW3F1aXpdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vZGVzaWduLXN1cnZleS9jcmVhdGUtYS1xdWl6KS5cbiAgICAgICAgICogLSBgXCJidXR0b25zXCJgIC0gQWRkcyBqdW1wIGxpbmtzIHRvIHRoZSBwcm9ncmVzcyBiYXIuXG4gICAgICAgICAqXG4gICAgICAgICAqIFtWaWV3IERlbW9dKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2V4YW1wbGVzL25hdmlnYXRpb24tYnV0dG9ucy8gKGxpbmtTdHlsZSkpXG4gICAgICAgICAqIEBzZWUgcHJvZ3Jlc3NWYWx1ZVxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicHJvZ3Jlc3NCYXJUeXBlXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChuZXdWYWx1ZSkge1xuICAgICAgICAgICAgaWYgKG5ld1ZhbHVlID09PSBcImNvcnJlY3RxdWVzdGlvblwiKVxuICAgICAgICAgICAgICAgIG5ld1ZhbHVlID0gXCJjb3JyZWN0UXVlc3Rpb25cIjtcbiAgICAgICAgICAgIGlmIChuZXdWYWx1ZSA9PT0gXCJyZXF1aXJlZHF1ZXN0aW9uXCIpXG4gICAgICAgICAgICAgICAgbmV3VmFsdWUgPSBcInJlcXVpcmVkUXVlc3Rpb25cIjtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInByb2dyZXNzQmFyVHlwZVwiLCBuZXdWYWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5TW9kZWwucHJvdG90eXBlLCBcImlzU2hvd1Byb2dyZXNzQmFyT25Ub3BcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5jYW5TaG93UHJvcmVzQmFyKCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2hvd1Byb2dyZXNzQmFyID09PSBcInRvcFwiIHx8IHRoaXMuc2hvd1Byb2dyZXNzQmFyID09PSBcImJvdGhcIjtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwiaXNTaG93UHJvZ3Jlc3NCYXJPbkJvdHRvbVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmNhblNob3dQcm9yZXNCYXIoKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zaG93UHJvZ3Jlc3NCYXIgPT09IFwiYm90dG9tXCIgfHwgdGhpcy5zaG93UHJvZ3Jlc3NCYXIgPT09IFwiYm90aFwiO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLmdldFByb2dyZXNzVHlwZUNvbXBvbmVudCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIFwic3YtcHJvZ3Jlc3MtXCIgKyB0aGlzLnByb2dyZXNzQmFyVHlwZS50b0xvd2VyQ2FzZSgpO1xuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLmdldFByb2dyZXNzQ3NzQ2xhc3NlcyA9IGZ1bmN0aW9uIChjb250YWluZXIpIHtcbiAgICAgICAgaWYgKGNvbnRhaW5lciA9PT0gdm9pZCAwKSB7IGNvbnRhaW5lciA9IFwiXCI7IH1cbiAgICAgICAgcmV0dXJuIG5ldyBfdXRpbHNfY3NzQ2xhc3NCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOF9fW1wiQ3NzQ2xhc3NCdWlsZGVyXCJdKClcbiAgICAgICAgICAgIC5hcHBlbmQodGhpcy5jc3MucHJvZ3Jlc3MpXG4gICAgICAgICAgICAuYXBwZW5kKHRoaXMuY3NzLnByb2dyZXNzVG9wLCB0aGlzLmlzU2hvd1Byb2dyZXNzQmFyT25Ub3AgJiYgKCFjb250YWluZXIgfHwgY29udGFpbmVyID09IFwiaGVhZGVyXCIpKVxuICAgICAgICAgICAgLmFwcGVuZCh0aGlzLmNzcy5wcm9ncmVzc0JvdHRvbSwgdGhpcy5pc1Nob3dQcm9ncmVzc0Jhck9uQm90dG9tICYmICghY29udGFpbmVyIHx8IGNvbnRhaW5lciA9PSBcImZvb3RlclwiKSlcbiAgICAgICAgICAgIC50b1N0cmluZygpO1xuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLmNhblNob3dQcm9yZXNCYXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAoIXRoaXMuaXNTaG93aW5nUHJldmlldyB8fFxuICAgICAgICAgICAgdGhpcy5zaG93UHJldmlld0JlZm9yZUNvbXBsZXRlICE9IFwic2hvd0FsbFF1ZXN0aW9uc1wiKTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwicHJvY2Vzc2VkVGl0bGVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY1RpdGxlLnJlbmRlcmVkSHRtbDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwicXVlc3Rpb25UaXRsZUxvY2F0aW9uXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldHMgb3Igc2V0cyBxdWVzdGlvbiB0aXRsZSBsb2NhdGlvbiByZWxhdGl2ZSB0byB0aGUgaW5wdXQgZmllbGQ6IGBcInRvcFwiYCwgYFwiYm90dG9tXCJgLCBvciBgXCJsZWZ0XCJgLlxuICAgICAgICAgKlxuICAgICAgICAgKiA+IENlcnRhaW4gcXVlc3Rpb24gdHlwZXMgKE1hdHJpeCwgTXVsdGlwbGUgVGV4dCkgZG8gbm90IHN1cHBvcnQgdGhlIGBcImxlZnRcImAgdmFsdWUuIEZvciB0aGVtLCB0aGUgYFwidG9wXCJgIHZhbHVlIGlzIHVzZWQuXG4gICAgICAgICAqXG4gICAgICAgICAqIFlvdSBjYW4gb3ZlcnJpZGUgdGhpcyBzZXR0aW5nIGlmIHlvdSBzcGVjaWZ5IHRoZSBgcXVlc3Rpb25UaXRsZUxvY2F0aW9uYCBwcm9wZXJ0eSBmb3IgYW4gW2luZGl2aWR1YWwgcGFnZV0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9wYWdlbW9kZWwjcXVlc3Rpb25UaXRsZUxvY2F0aW9uKSBvciBbcGFuZWxdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vcGFuZWxtb2RlbCNxdWVzdGlvblRpdGxlTG9jYXRpb24pIG9yIHNldCB0aGUgYHRpdGxlTG9jYXRpb25gIHByb3BlcnR5IGZvciBhIFtzcGVjaWZpYyBxdWVzdGlvbl0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9xdWVzdGlvbiN0aXRsZUxvY2F0aW9uKS5cbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInF1ZXN0aW9uVGl0bGVMb2NhdGlvblwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInF1ZXN0aW9uVGl0bGVMb2NhdGlvblwiLCB2YWx1ZS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5pc0xvYWRpbmdGcm9tSnNvbikge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlRWxlbWVudENzcyh0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS51cGRhdGVFbGVtZW50Q3NzID0gZnVuY3Rpb24gKHJlTmV3KSB7XG4gICAgICAgIGlmICghIXRoaXMuc3RhcnRlZFBhZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRlZFBhZ2UudXBkYXRlRWxlbWVudENzcyhyZU5ldyk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHBhZ2VzID0gdGhpcy52aXNpYmxlUGFnZXM7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHBhZ2VzW2ldLnVwZGF0ZUVsZW1lbnRDc3MocmVOZXcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlQ3NzKCk7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5TW9kZWwucHJvdG90eXBlLCBcInF1ZXN0aW9uRXJyb3JMb2NhdGlvblwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgdGhlIGVycm9yIG1lc3NhZ2UgcG9zaXRpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIFBvc3NpYmxlIHZhbHVlczpcbiAgICAgICAgICpcbiAgICAgICAgICogLSBgXCJ0b3BcImAgKGRlZmF1bHQpIC0gRGlzcGxheXMgZXJyb3IgbWVzc2FnZXMgYWJvdmUgcXVlc3Rpb25zLlxuICAgICAgICAgKiAtIGBcImJvdHRvbVwiYCAtIERpc3BsYXlzIGVycm9yIG1lc3NhZ2VzIGJlbG93IHF1ZXN0aW9ucy5cbiAgICAgICAgICpcbiAgICAgICAgICogWW91IGNhbiBvdmVycmlkZSB0aGlzIHNldHRpbmcgaWYgeW91IHNwZWNpZnkgdGhlIGBxdWVzdGlvbkVycm9yTG9jYXRpb25gIHByb3BlcnR5IGZvciBhbiBbaW5kaXZpZHVhbCBwYWdlXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL3BhZ2Vtb2RlbCNxdWVzdGlvbkVycm9yTG9jYXRpb24pIG9yIFtwYW5lbF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9wYW5lbG1vZGVsI3F1ZXN0aW9uRXJyb3JMb2NhdGlvbikgb3Igc2V0IHRoZSBgZXJyb3JMb2NhdGlvbmAgcHJvcGVydHkgZm9yIGEgW3NwZWNpZmljIHF1ZXN0aW9uXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL3F1ZXN0aW9uI2Vycm9yTG9jYXRpb24pLlxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicXVlc3Rpb25FcnJvckxvY2F0aW9uXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicXVlc3Rpb25FcnJvckxvY2F0aW9uXCIsIHZhbHVlLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleU1vZGVsLnByb3RvdHlwZSwgXCJxdWVzdGlvbkRlc2NyaXB0aW9uTG9jYXRpb25cIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHdoZXJlIHRvIGRpc3BsYXkgcXVlc3Rpb24gZGVzY3JpcHRpb25zLlxuICAgICAgICAgKlxuICAgICAgICAgKiBQb3NzaWJsZSB2YWx1ZXM6XG4gICAgICAgICAqXG4gICAgICAgICAqIC0gYFwidW5kZXJUaXRsZVwiYCAoZGVmYXVsdCkgLSBEaXNwbGF5cyBkZXNjcmlwdGlvbnMgdW5kZXIgcXVlc3Rpb24gdGl0bGVzLlxuICAgICAgICAgKiAtIGBcInVuZGVySW5wdXRcImAgLSBEaXNwbGF5cyBkZXNjcmlwdGlvbnMgdW5kZXIgdGhlIGludGVyYWN0aXZlIGFyZWEuXG4gICAgICAgICAqXG4gICAgICAgICAqIFlvdSBjYW4gb3ZlcnJpZGUgdGhpcyBzZXR0aW5nIGZvciBpbmRpdmlkdWFsIHF1ZXN0aW9ucyBpZiB5b3Ugc3BlY2lmeSB0aGVpciBbYGRlc2NyaXB0aW9uTG9jYXRpb25gXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2UvcXVlc3Rpb24jZGVzY3JpcHRpb25Mb2NhdGlvbikgcHJvcGVydHkuXG4gICAgICAgICAqXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJxdWVzdGlvbkRlc2NyaXB0aW9uTG9jYXRpb25cIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJxdWVzdGlvbkRlc2NyaXB0aW9uTG9jYXRpb25cIiwgdmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleU1vZGVsLnByb3RvdHlwZSwgXCJtb2RlXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB3aGV0aGVyIHVzZXJzIGNhbiB0YWtlIHRoZSBzdXJ2ZXkgb3Igb25seSB2aWV3IGl0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBQb3NzaWJsZSB2YWx1ZXM6XG4gICAgICAgICAqXG4gICAgICAgICAqIC0gYFwiZWRpdFwiYCAoZGVmYXVsdCkgLSBBbGxvd3MgdXNlcnMgdG8gdGFrZSB0aGUgc3VydmV5LlxuICAgICAgICAgKiAtIGBcImRpc3BsYXlcImAgLSBNYWtlcyB0aGUgc3VydmV5IHJlYWQtb25seS5cbiAgICAgICAgICpcbiAgICAgICAgICogW1ZpZXcgRGVtb10oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZXhhbXBsZXMvc3VydmV5LWRpc3BsYXltb2RlLyAobGlua1N0eWxlKSlcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIm1vZGVcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICBpZiAodmFsdWUgPT0gdGhpcy5tb2RlKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGlmICh2YWx1ZSAhPSBcImVkaXRcIiAmJiB2YWx1ZSAhPSBcImRpc3BsYXlcIilcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJtb2RlXCIsIHZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5vbk1vZGVDaGFuZ2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBwYWdlID0gdGhpcy5wYWdlc1tpXTtcbiAgICAgICAgICAgIHBhZ2Uuc2V0UHJvcGVydHlWYWx1ZShcImlzUmVhZE9ubHlcIiwgcGFnZS5pc1JlYWRPbmx5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZUJ1dHRvbnNWaXNpYmlsaXR5KCk7XG4gICAgICAgIHRoaXMudXBkYXRlQ3NzKCk7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5TW9kZWwucHJvdG90eXBlLCBcImRhdGFcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogR2V0cyBvciBzZXRzIGFuIG9iamVjdCB3aXRoIHN1cnZleSByZXN1bHRzLiBZb3UgY2FuIHNldCB0aGlzIHByb3BlcnR5IHdpdGggYW4gb2JqZWN0IG9mIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlOlxuICAgICAgICAgKlxuICAgICAgICAgKiBgYGBqc1xuICAgICAgICAgKiB7XG4gICAgICAgICAqICAgcXVlc3Rpb24xTmFtZTogcXVlc3Rpb24xVmFsdWUsXG4gICAgICAgICAqICAgcXVlc3Rpb24yTmFtZTogcXVlc3Rpb24yVmFsdWUsXG4gICAgICAgICAqICAgLy8gLi4uXG4gICAgICAgICAqIH1cbiAgICAgICAgICogYGBgXG4gICAgICAgICAqXG4gICAgICAgICAqIFdoZW4geW91IHNldCB0aGlzIHByb3BlcnR5IGluIGNvZGUsIHRoZSBuZXcgb2JqZWN0IG92ZXJyaWRlcyB0aGUgb2xkIG9iamVjdCB0aGF0IG1heSBjb250YWluIGRlZmF1bHQgcXVlc3Rpb24gdmFsdWVzIGFuZCBlbnRlcmVkIGRhdGEuIElmIHlvdSB3YW50IHRvICptZXJnZSogdGhlIG5ldyBhbmQgb2xkIG9iamVjdHMsIGNhbGwgdGhlIFtgbWVyZ2VEYXRhKG5ld0RhdGFPYmopYF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9zdXJ2ZXltb2RlbCNtZXJnZURhdGEpIG1ldGhvZC5cbiAgICAgICAgICpcbiAgICAgICAgICogSWYgeW91IGFzc2lnbiBhIG5ldyBvYmplY3Qgd2hpbGUgYSByZXNwb25kZW50IHRha2VzIHRoZSBzdXJ2ZXksIHNldCB0aGUgW2BjdXJyZW50UGFnZU5vYF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL3N1cnZleS1kYXRhLW1vZGVsI2N1cnJlbnRQYWdlTm8pIHByb3BlcnR5IHRvIDAgdG8gc3RhcnQgdGhlIHN1cnZleSBmcm9tIHRoZSBiZWdpbm5pbmcuIFRoaXMgd2lsbCBhbHNvIGNhdXNlIHRoZSBzdXJ2ZXkgdG8gcmUtZXZhbHVhdGUgdGhlIFtgdmlzaWJsZUlmYF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL3F1ZXN0aW9uI3Zpc2libGVJZiksIFtgZW5hYmxlSWZgXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2UvcXVlc3Rpb24jZW5hYmxlSWYpLCBhbmQgb3RoZXIgW2V4cHJlc3Npb25zXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2Rlc2lnbi1zdXJ2ZXkvY29uZGl0aW9uYWwtbG9naWMjZXhwcmVzc2lvbnMpLlxuICAgICAgICAgKiBAc2VlIHNldFZhbHVlXG4gICAgICAgICAqIEBzZWUgZ2V0VmFsdWVcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgICAgICAgICAgdmFyIGtleXMgPSB0aGlzLmdldFZhbHVlc0tleXMoKTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgICAgICAgICAgIHZhciBkYXRhVmFsdWUgPSB0aGlzLmdldERhdGFWYWx1ZUNvcmUodGhpcy52YWx1ZXNIYXNoLCBrZXkpO1xuICAgICAgICAgICAgICAgIGlmIChkYXRhVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRba2V5XSA9IGRhdGFWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNldENhbGN1bGF0ZWRWYWx1ZXNJbnRvUmVzdWx0KHJlc3VsdCk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlc0hhc2ggPSB7fTtcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0YUNvcmUoZGF0YSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICAvKipcbiAgICAgKiBNZXJnZXMgYSBzcGVjaWZpZWQgZGF0YSBvYmplY3Qgd2l0aCB0aGUgb2JqZWN0IGZyb20gdGhlIFtgZGF0YWBdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vYXBpLXJlZmVyZW5jZS9zdXJ2ZXktZGF0YS1tb2RlbCNkYXRhKSBwcm9wZXJ0eS5cbiAgICAgKlxuICAgICAqIFJlZmVyIHRvIHRoZSBmb2xsb3dpbmcgaGVscCB0b3BpYyBmb3IgbW9yZSBpbmZvcm1hdGlvbjogW01lcmdlIFF1ZXN0aW9uIFZhbHVlc10oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9kZXNpZ24tc3VydmV5L21lcmdlLXF1ZXN0aW9uLXZhbHVlcykuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGF0YSBBIGRhdGEgb2JqZWN0IHRvIG1lcmdlLiBJdCBzaG91bGQgaGF2ZSB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZTogYHsgcXVlc3Rpb25OYW1lOiBxdWVzdGlvblZhbHVlLCAuLi4gfWBcbiAgICAgKiBAc2VlIHNldFZhbHVlXG4gICAgICovXG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLm1lcmdlRGF0YSA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIGlmICghZGF0YSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIG5ld0RhdGEgPSB0aGlzLmRhdGE7XG4gICAgICAgIHRoaXMubWVyZ2VWYWx1ZXMoZGF0YSwgbmV3RGF0YSk7XG4gICAgICAgIHRoaXMuc2V0RGF0YUNvcmUobmV3RGF0YSk7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuc2V0RGF0YUNvcmUgPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldERhdGFWYWx1ZUNvcmUodGhpcy52YWx1ZXNIYXNoLCBrZXksIGRhdGFba2V5XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVBbGxRdWVzdGlvbnNWYWx1ZSgpO1xuICAgICAgICB0aGlzLm5vdGlmeUFsbFF1ZXN0aW9uc09uVmFsdWVDaGFuZ2VkKCk7XG4gICAgICAgIHRoaXMubm90aWZ5RWxlbWVudHNPbkFueVZhbHVlT3JWYXJpYWJsZUNoYW5nZWQoXCJcIik7XG4gICAgICAgIHRoaXMucnVuQ29uZGl0aW9ucygpO1xuICAgICAgICB0aGlzLnVwZGF0ZUFsbFF1ZXN0aW9uc1ZhbHVlKCk7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuZ2V0U3RydWN0dXJlZERhdGEgPSBmdW5jdGlvbiAoaW5jbHVkZVBhZ2VzLCBsZXZlbCkge1xuICAgICAgICBpZiAoaW5jbHVkZVBhZ2VzID09PSB2b2lkIDApIHsgaW5jbHVkZVBhZ2VzID0gdHJ1ZTsgfVxuICAgICAgICBpZiAobGV2ZWwgPT09IHZvaWQgMCkgeyBsZXZlbCA9IC0xOyB9XG4gICAgICAgIGlmIChsZXZlbCA9PT0gMClcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGE7XG4gICAgICAgIHZhciBkYXRhID0ge307XG4gICAgICAgIHRoaXMucGFnZXMuZm9yRWFjaChmdW5jdGlvbiAocCkge1xuICAgICAgICAgICAgaWYgKGluY2x1ZGVQYWdlcykge1xuICAgICAgICAgICAgICAgIHZhciBwYWdlVmFsdWVzID0ge307XG4gICAgICAgICAgICAgICAgaWYgKHAuY29sbGVjdFZhbHVlcyhwYWdlVmFsdWVzLCBsZXZlbCAtIDEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFbcC5uYW1lXSA9IHBhZ2VWYWx1ZXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcC5jb2xsZWN0VmFsdWVzKGRhdGEsIGxldmVsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLnNldFN0cnVjdHVyZWREYXRhID0gZnVuY3Rpb24gKGRhdGEsIGRvTWVyZ2UpIHtcbiAgICAgICAgaWYgKGRvTWVyZ2UgPT09IHZvaWQgMCkgeyBkb01lcmdlID0gZmFsc2U7IH1cbiAgICAgICAgaWYgKCFkYXRhKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIgcmVzID0ge307XG4gICAgICAgIGZvciAodmFyIGtleSBpbiBkYXRhKSB7XG4gICAgICAgICAgICB2YXIgcSA9IHRoaXMuZ2V0UXVlc3Rpb25CeVZhbHVlTmFtZShrZXkpO1xuICAgICAgICAgICAgaWYgKHEpIHtcbiAgICAgICAgICAgICAgICByZXNba2V5XSA9IGRhdGFba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBwYW5lbCA9IHRoaXMuZ2V0UGFnZUJ5TmFtZShrZXkpO1xuICAgICAgICAgICAgICAgIGlmICghcGFuZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFuZWwgPSB0aGlzLmdldFBhbmVsQnlOYW1lKGtleSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChwYW5lbCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbGxlY3REYXRhRnJvbVBhbmVsKHBhbmVsLCByZXMsIGRhdGFba2V5XSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChkb01lcmdlKSB7XG4gICAgICAgICAgICB0aGlzLm1lcmdlRGF0YShyZXMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kYXRhID0gcmVzO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuY29sbGVjdERhdGFGcm9tUGFuZWwgPSBmdW5jdGlvbiAocGFuZWwsIG91dHB1dCwgZGF0YSkge1xuICAgICAgICBmb3IgKHZhciBrZXkgaW4gZGF0YSkge1xuICAgICAgICAgICAgdmFyIGVsID0gcGFuZWwuZ2V0RWxlbWVudEJ5TmFtZShrZXkpO1xuICAgICAgICAgICAgaWYgKCFlbClcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIGlmIChlbC5pc1BhbmVsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb2xsZWN0RGF0YUZyb21QYW5lbChlbCwgb3V0cHV0LCBkYXRhW2tleV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0W2tleV0gPSBkYXRhW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwiZWRpdGluZ09ialwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWRpdGluZ09ialZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgICAgICBpZiAodGhpcy5lZGl0aW5nT2JqID09IHZhbClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBpZiAoISF0aGlzLmVkaXRpbmdPYmopIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVkaXRpbmdPYmoub25Qcm9wZXJ0eUNoYW5nZWQucmVtb3ZlKHRoaXMub25FZGl0aW5nT2JqUHJvcGVydHlDaGFuZ2VkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZWRpdGluZ09ialZhbHVlID0gdmFsO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNEaXNwb3NlZClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBpZiAoIXZhbCkge1xuICAgICAgICAgICAgICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLmdldEFsbFF1ZXN0aW9ucygpO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uc1tpXS51bmJpbmRWYWx1ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghIXRoaXMuZWRpdGluZ09iaikge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGF0YUNvcmUoe30pO1xuICAgICAgICAgICAgICAgIHRoaXMub25FZGl0aW5nT2JqUHJvcGVydHlDaGFuZ2VkID0gZnVuY3Rpb24gKHNlbmRlciwgb3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIV9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJTZXJpYWxpemVyXCJdLmhhc09yaWdpbmFsUHJvcGVydHkoX3RoaXMuZWRpdGluZ09iaiwgb3B0aW9ucy5uYW1lKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMudXBkYXRlT25TZXRWYWx1ZShvcHRpb25zLm5hbWUsIF90aGlzLmVkaXRpbmdPYmpbb3B0aW9ucy5uYW1lXSwgb3B0aW9ucy5vbGRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB0aGlzLmVkaXRpbmdPYmoub25Qcm9wZXJ0eUNoYW5nZWQuYWRkKHRoaXMub25FZGl0aW5nT2JqUHJvcGVydHlDaGFuZ2VkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwiaXNFZGl0aW5nU3VydmV5RWxlbWVudFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuICEhdGhpcy5lZGl0aW5nT2JqO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLnNldENhbGN1bGF0ZWRWYWx1ZXNJbnRvUmVzdWx0ID0gZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2FsY3VsYXRlZFZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGNhbFZhbHVlID0gdGhpcy5jYWxjdWxhdGVkVmFsdWVzW2ldO1xuICAgICAgICAgICAgaWYgKGNhbFZhbHVlLmluY2x1ZGVJbnRvUmVzdWx0ICYmXG4gICAgICAgICAgICAgICAgISFjYWxWYWx1ZS5uYW1lICYmXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRWYXJpYWJsZShjYWxWYWx1ZS5uYW1lKSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0W2NhbFZhbHVlLm5hbWVdID0gdGhpcy5nZXRWYXJpYWJsZShjYWxWYWx1ZS5uYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLmdldEFsbFZhbHVlcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgc3VydmV5IHJlc3VsdHMgYXMgYW4gYXJyYXkgb2Ygb2JqZWN0cyBpbiB3aGljaCB0aGUgcXVlc3Rpb24gbmFtZSwgdGl0bGUsIHZhbHVlLCBhbmQgb3RoZXIgcGFyYW1ldGVycyBhcmUgc3RvcmVkIGFzIGluZGl2aWR1YWwgcHJvcGVydGllcy5cbiAgICAgKlxuICAgICAqIElmIGEgcXVlc3Rpb24gY2FuIGhhdmUgbW9yZSB0aGFuIG9uZSB2YWx1ZSAoTWF0cml4LCBNdWx0aXBsZSBUZXh0KSwgaXRzIG9iamVjdCBlbmFibGVzIHRoZSBgaXNOb2RlYCBmbGFnIGFuZCBzdG9yZXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlc2UgdmFsdWVzIGluIHRoZSBgZGF0YWAgcHJvcGVydHkuIFJlZmVyIHRvIHRoZSBmb2xsb3dpbmcgaGVscCB0b3BpYyBmb3IgbW9yZSBpbmZvcm1hdGlvbjogW0FjY2VzcyBGdWxsIFN1cnZleSBSZXN1bHRzXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2hhbmRsZS1zdXJ2ZXktcmVzdWx0cy1hY2Nlc3MjYWNjZXNzLWZ1bGwtc3VydmV5LXJlc3VsdHMpLlxuICAgICAqXG4gICAgICogSWYgeW91IHdhbnQgdG8gc2tpcCBlbXB0eSBhbnN3ZXJzLCBwYXNzIGFuIG9iamVjdCB3aXRoIHRoZSBgaW5jbHVkZUVtcHR5YCBwcm9wZXJ0eSBzZXQgdG8gYGZhbHNlYC5cbiAgICAgKi9cbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuZ2V0UGxhaW5EYXRhID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICAgICAgICBvcHRpb25zID0geyBpbmNsdWRlRW1wdHk6IHRydWUsIGluY2x1ZGVRdWVzdGlvblR5cGVzOiBmYWxzZSwgaW5jbHVkZVZhbHVlczogZmFsc2UgfTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICAgIHZhciBxdWVzdGlvblZhbHVlTmFtZXMgPSBbXTtcbiAgICAgICAgdGhpcy5nZXRBbGxRdWVzdGlvbnMoKS5mb3JFYWNoKGZ1bmN0aW9uIChxdWVzdGlvbikge1xuICAgICAgICAgICAgdmFyIHJlc3VsdEl0ZW0gPSBxdWVzdGlvbi5nZXRQbGFpbkRhdGEob3B0aW9ucyk7XG4gICAgICAgICAgICBpZiAoISFyZXN1bHRJdGVtKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gocmVzdWx0SXRlbSk7XG4gICAgICAgICAgICAgICAgcXVlc3Rpb25WYWx1ZU5hbWVzLnB1c2gocXVlc3Rpb24udmFsdWVOYW1lIHx8IHF1ZXN0aW9uLm5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCEhb3B0aW9ucy5pbmNsdWRlVmFsdWVzKSB7XG4gICAgICAgICAgICB2YXIga2V5cyA9IHRoaXMuZ2V0VmFsdWVzS2V5cygpO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgICAgICAgICAgICAgaWYgKHF1ZXN0aW9uVmFsdWVOYW1lcy5pbmRleE9mKGtleSkgPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGFWYWx1ZSA9IHRoaXMuZ2V0RGF0YVZhbHVlQ29yZSh0aGlzLnZhbHVlc0hhc2gsIGtleSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghIWRhdGFWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZToga2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBkYXRhVmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheVZhbHVlOiBkYXRhVmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNOb2RlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRTdHJpbmc6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWwgPT09IFwib2JqZWN0XCIgPyBKU09OLnN0cmluZ2lmeSh2YWwpIDogdmFsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLmdldEZpbHRlcmVkVmFsdWVzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgdmFsdWVzID0ge307XG4gICAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnZhcmlhYmxlc0hhc2gpXG4gICAgICAgICAgICB2YWx1ZXNba2V5XSA9IHRoaXMudmFyaWFibGVzSGFzaFtrZXldO1xuICAgICAgICB0aGlzLmFkZENhbGN1bGF0ZWRWYWx1ZXNJbnRvRmlsdGVyZWRWYWx1ZXModmFsdWVzKTtcbiAgICAgICAgdmFyIGtleXMgPSB0aGlzLmdldFZhbHVlc0tleXMoKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgICAgIHZhbHVlc1trZXldID0gdGhpcy5nZXREYXRhVmFsdWVDb3JlKHRoaXMudmFsdWVzSGFzaCwga2V5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdldEFsbFF1ZXN0aW9ucygpLmZvckVhY2goZnVuY3Rpb24gKHEpIHtcbiAgICAgICAgICAgIGlmIChxLmhhc0ZpbHRlcmVkVmFsdWUpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZXNbcS5nZXRWYWx1ZU5hbWUoKV0gPSBxLmdldEZpbHRlcmVkVmFsdWUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB2YWx1ZXM7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuYWRkQ2FsY3VsYXRlZFZhbHVlc0ludG9GaWx0ZXJlZFZhbHVlcyA9IGZ1bmN0aW9uICh2YWx1ZXMpIHtcbiAgICAgICAgdmFyIGNhY2xWYWx1ZXMgPSB0aGlzLmNhbGN1bGF0ZWRWYWx1ZXM7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2FjbFZhbHVlcy5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIHZhbHVlc1tjYWNsVmFsdWVzW2ldLm5hbWVdID0gY2FjbFZhbHVlc1tpXS52YWx1ZTtcbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5nZXRGaWx0ZXJlZFByb3BlcnRpZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB7IHN1cnZleTogdGhpcyB9O1xuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLmdldFZhbHVlc0tleXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5lZGl0aW5nT2JqKVxuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMudmFsdWVzSGFzaCk7XG4gICAgICAgIHZhciBwcm9wcyA9IF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJTZXJpYWxpemVyXCJdLmdldFByb3BlcnRpZXNCeU9iaih0aGlzLmVkaXRpbmdPYmopO1xuICAgICAgICB2YXIgcmVzID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHJlcy5wdXNoKHByb3BzW2ldLm5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuZ2V0RGF0YVZhbHVlQ29yZSA9IGZ1bmN0aW9uICh2YWx1ZXNIYXNoLCBrZXkpIHtcbiAgICAgICAgaWYgKCEhdGhpcy5lZGl0aW5nT2JqKVxuICAgICAgICAgICAgcmV0dXJuIF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJTZXJpYWxpemVyXCJdLmdldE9ialByb3BlcnR5VmFsdWUodGhpcy5lZGl0aW5nT2JqLCBrZXkpO1xuICAgICAgICByZXR1cm4gdGhpcy5nZXREYXRhRnJvbVZhbHVlSGFzaCh2YWx1ZXNIYXNoLCBrZXkpO1xuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLnNldERhdGFWYWx1ZUNvcmUgPSBmdW5jdGlvbiAodmFsdWVzSGFzaCwga2V5LCB2YWx1ZSkge1xuICAgICAgICBpZiAoISF0aGlzLmVkaXRpbmdPYmopIHtcbiAgICAgICAgICAgIF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJTZXJpYWxpemVyXCJdLnNldE9ialByb3BlcnR5VmFsdWUodGhpcy5lZGl0aW5nT2JqLCBrZXksIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0YVRvVmFsdWVIYXNoKHZhbHVlc0hhc2gsIGtleSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuZGVsZXRlRGF0YVZhbHVlQ29yZSA9IGZ1bmN0aW9uICh2YWx1ZXNIYXNoLCBrZXkpIHtcbiAgICAgICAgaWYgKCEhdGhpcy5lZGl0aW5nT2JqKSB7XG4gICAgICAgICAgICB0aGlzLmVkaXRpbmdPYmpba2V5XSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRlbGV0ZURhdGFGcm9tVmFsdWVIYXNoKHZhbHVlc0hhc2gsIGtleSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5nZXREYXRhRnJvbVZhbHVlSGFzaCA9IGZ1bmN0aW9uICh2YWx1ZXNIYXNoLCBrZXkpIHtcbiAgICAgICAgaWYgKCEhdGhpcy52YWx1ZUhhc2hHZXREYXRhQ2FsbGJhY2spXG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZUhhc2hHZXREYXRhQ2FsbGJhY2sodmFsdWVzSGFzaCwga2V5KTtcbiAgICAgICAgcmV0dXJuIHZhbHVlc0hhc2hba2V5XTtcbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5zZXREYXRhVG9WYWx1ZUhhc2ggPSBmdW5jdGlvbiAodmFsdWVzSGFzaCwga2V5LCB2YWx1ZSkge1xuICAgICAgICBpZiAoISF0aGlzLnZhbHVlSGFzaFNldERhdGFDYWxsYmFjaykge1xuICAgICAgICAgICAgdGhpcy52YWx1ZUhhc2hTZXREYXRhQ2FsbGJhY2sodmFsdWVzSGFzaCwga2V5LCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YWx1ZXNIYXNoW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLmRlbGV0ZURhdGFGcm9tVmFsdWVIYXNoID0gZnVuY3Rpb24gKHZhbHVlc0hhc2gsIGtleSkge1xuICAgICAgICBpZiAoISF0aGlzLnZhbHVlSGFzaERlbGV0ZURhdGFDYWxsYmFjaykge1xuICAgICAgICAgICAgdGhpcy52YWx1ZUhhc2hEZWxldGVEYXRhQ2FsbGJhY2sodmFsdWVzSGFzaCwga2V5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGRlbGV0ZSB2YWx1ZXNIYXNoW2tleV07XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwiY29tbWVudHNcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogQW4gb2JqZWN0IHdpdGggYWxsIGNvbW1lbnQgdmFsdWVzLlxuICAgICAgICAgKiBAc2VlIFF1ZXN0aW9uLnNob3dDb21tZW50QXJlYVxuICAgICAgICAgKiBAc2VlIHN0b3JlT3RoZXJzQXNDb21tZW50XG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICAgICAgICAgIHZhciBrZXlzID0gdGhpcy5nZXRWYWx1ZXNLZXlzKCk7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgICAgICAgICBpZiAoa2V5LmluZGV4T2YodGhpcy5jb21tZW50U3VmZml4KSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2tleV0gPSB0aGlzLmdldERhdGFWYWx1ZUNvcmUodGhpcy52YWx1ZXNIYXNoLCBrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5TW9kZWwucHJvdG90eXBlLCBcInZpc2libGVQYWdlc1wiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIGFuIGFycmF5IG9mIHZpc2libGUgcGFnZXMgd2l0aG91dCB0aGUgc3RhcnQgcGFnZS5cbiAgICAgICAgICpcbiAgICAgICAgICogVG8gZ2V0IGFuIGFycmF5IG9mIGFsbCBwYWdlcywgdXNlIHRoZSBbYHBhZ2VzYF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL3N1cnZleS1kYXRhLW1vZGVsI3BhZ2VzKSBwcm9wZXJ0eS4gSWYgYWxsIHBhZ2VzIGFyZSB2aXNpYmxlLCB0aGUgYHBhZ2VzYCBhbmQgYHZpc2libGVQYWdlc2AgYXJyYXlzIGFyZSBpZGVudGljYWwuXG4gICAgICAgICAqIEBzZWUgW0NvbmRpdGlvbmFsIFZpc2liaWxpdHldKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vZGVzaWduLXN1cnZleS9jb25kaXRpb25hbC1sb2dpYyNjb25kaXRpb25hbC12aXNpYmlsaXR5KVxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0Rlc2lnbk1vZGUpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFnZXM7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IEFycmF5KCk7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1BhZ2VJblZpc2libGVMaXN0KHRoaXMucGFnZXNbaV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRoaXMucGFnZXNbaV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuaXNQYWdlSW5WaXNpYmxlTGlzdCA9IGZ1bmN0aW9uIChwYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzRGVzaWduTW9kZSB8fCBwYWdlLmlzVmlzaWJsZSAmJiAhcGFnZS5pc1N0YXJ0UGFnZTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwiaXNFbXB0eVwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgc3VydmV5IGNvbnRhaW5zIHplcm8gcGFnZXMuXG4gICAgICAgICAqIEBzZWUgZW1wdHlTdXJ2ZXlUZXh0XG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhZ2VzLmxlbmd0aCA9PSAwO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleU1vZGVsLnByb3RvdHlwZSwgXCJQYWdlQ291bnRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhZ2VDb3VudDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwicGFnZUNvdW50XCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgYSB0b3RhbCBudW1iZXIgb2Ygc3VydmV5IHBhZ2VzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBUbyBnZXQgdGhlIG51bWJlciBvZiB2aXNpYmxlIHBhZ2VzLCB1c2UgdGhlIFtgdmlzaWJsZVBhZ2VDb3VudGBdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vYXBpLXJlZmVyZW5jZS9zdXJ2ZXktZGF0YS1tb2RlbCN2aXNpYmxlUGFnZUNvdW50KSBwcm9wZXJ0eS5cbiAgICAgICAgICogQHNlZSBwYWdlc1xuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wYWdlcy5sZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5TW9kZWwucHJvdG90eXBlLCBcInZpc2libGVQYWdlQ291bnRcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHZpc2libGUgc3VydmV5IHBhZ2VzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBUbyBnZXQgYSB0b3RhbCBudW1iZXIgb2Ygc3VydmV5IHBhZ2VzLCB1c2UgdGhlIFtgcGFnZUNvdW50YF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL3N1cnZleS1kYXRhLW1vZGVsI3BhZ2VDb3VudCkgcHJvcGVydHkuXG4gICAgICAgICAqIEBzZWUgdmlzaWJsZVBhZ2VzXG4gICAgICAgICAqIEBzZWUgW0NvbmRpdGlvbmFsIFZpc2liaWxpdHldKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vZGVzaWduLXN1cnZleS9jb25kaXRpb25hbC1sb2dpYyNjb25kaXRpb25hbC12aXNpYmlsaXR5KVxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52aXNpYmxlUGFnZXMubGVuZ3RoO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleU1vZGVsLnByb3RvdHlwZSwgXCJzdGFydGVkUGFnZVwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIHRoZSBzdGFydCBwYWdlLiBBcHBsaWVzIG9ubHkgaWYgdGhlIFtgZmlyc3RQYWdlSXNTdGFydGVkYF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL3N1cnZleS1kYXRhLW1vZGVsI2ZpcnN0UGFnZUlzU3RhcnRlZCkgcHJvcGVydHkgaXMgc2V0IHRvIGB0cnVlYC5cbiAgICAgICAgICpcbiAgICAgICAgICogUmVmZXIgdG8gdGhlIGZvbGxvd2luZyBoZWxwIHRvcGljIGZvciBtb3JlIGluZm9ybWF0aW9uOiBbU3RhcnQgUGFnZV0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9kZXNpZ24tc3VydmV5L2NyZWF0ZS1hLW11bHRpLXBhZ2Utc3VydmV5I3N0YXJ0LXBhZ2UpLlxuICAgICAgICAgKiBAc2VlIGZpcnN0UGFnZUlzU3RhcnRlZFxuICAgICAgICAgKiBAc2VlIGFjdGl2ZVBhZ2VcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHBhZ2UgPSB0aGlzLmZpcnN0UGFnZUlzU3RhcnRlZCAmJiB0aGlzLnBhZ2VzLmxlbmd0aCA+IDEgPyB0aGlzLnBhZ2VzWzBdIDogbnVsbDtcbiAgICAgICAgICAgIGlmICghIXBhZ2UpIHtcbiAgICAgICAgICAgICAgICBwYWdlLm9uRmlyc3RSZW5kZXJpbmcoKTtcbiAgICAgICAgICAgICAgICBwYWdlLnNldFdhc1Nob3duKHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHBhZ2U7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5TW9kZWwucHJvdG90eXBlLCBcImN1cnJlbnRQYWdlXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldHMgb3Igc2V0cyB0aGUgY3VycmVudCBwYWdlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBJZiB5b3Ugd2FudCB0byBjaGFuZ2UgdGhlIGN1cnJlbnQgcGFnZSwgc2V0IHRoaXMgcHJvcGVydHkgdG8gYSBgUGFnZU1vZGVsYCBvYmplY3QuIFlvdSBjYW4gZ2V0IHRoaXMgb2JqZWN0IGluIGRpZmZlcmVudCB3YXlzLiBGb3IgZXhhbXBsZSwgeW91IGNhbiBjYWxsIHRoZSBbYGdldFBhZ2VCeU5hbWUoKWBdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vYXBpLXJlZmVyZW5jZS9zdXJ2ZXktZGF0YS1tb2RlbCNnZXRQYWdlQnlOYW1lKSBtZXRob2QgdG8gb2J0YWluIGEgYFBhZ2VNb2RlbGAgb2JqZWN0IHdpdGggYSBzcGVjaWZpYyBuYW1lOlxuICAgICAgICAgKlxuICAgICAgICAgKiBgYGBqc1xuICAgICAgICAgKiBzdXJ2ZXkuY3VycmVudFBhZ2UgPSBzdXJ2ZXkuZ2V0UGFnZUJ5TmFtZShcIm15LXBhZ2UtbmFtZVwiKTtcbiAgICAgICAgICogYGBgXG4gICAgICAgICAqXG4gICAgICAgICAqIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gY2hhbmdlIHRoZSBjdXJyZW50IHBhZ2UgaWYgeW91IHNldCB0aGUgW2BjdXJyZW50UGFnZU5vYF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL3N1cnZleS1kYXRhLW1vZGVsI2N1cnJlbnRQYWdlTm8pIHByb3BlcnR5IHRvIHRoZSBpbmRleCBvZiB0aGUgcmVxdWlyZWQgcGFnZS5cbiAgICAgICAgICpcbiAgICAgICAgICogVGhlIGBjdXJyZW50UGFnZWAgcHJvcGVydHkgZG9lcyBub3QgcmV0dXJuIHRoZSBzdGFydCBwYWdlIGV2ZW4gaWYgaXQgaXMgY3VycmVudC4gVXNlIHRoZSBbYGFjdGl2ZVBhZ2VgXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2Uvc3VydmV5LWRhdGEtbW9kZWwjYWN0aXZlUGFnZSkgcHJvcGVydHkgaW5zdGVhZCBpZiB5b3VyIHN1cnZleSBjb250YWlucyBhIHN0YXJ0IHBhZ2UuXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjdXJyZW50UGFnZVwiLCBudWxsKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzTG9hZGluZ0Zyb21Kc29uKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHZhciBuZXdQYWdlID0gdGhpcy5nZXRQYWdlQnlPYmplY3QodmFsdWUpO1xuICAgICAgICAgICAgaWYgKCEhdmFsdWUgJiYgIW5ld1BhZ2UpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKCFuZXdQYWdlICYmIHRoaXMuaXNDdXJyZW50UGFnZUF2YWlsYWJsZSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB2YXIgdlBhZ2VzID0gdGhpcy52aXNpYmxlUGFnZXM7XG4gICAgICAgICAgICBpZiAobmV3UGFnZSAhPSBudWxsICYmIHZQYWdlcy5pbmRleE9mKG5ld1BhZ2UpIDwgMClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBpZiAobmV3UGFnZSA9PSB0aGlzLmN1cnJlbnRQYWdlKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHZhciBvbGRWYWx1ZSA9IHRoaXMuY3VycmVudFBhZ2U7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNTaG93aW5nUHJldmlldyAmJiAhdGhpcy5jdXJyZW50UGFnZUNoYW5naW5nKG5ld1BhZ2UsIG9sZFZhbHVlKSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjdXJyZW50UGFnZVwiLCBuZXdQYWdlKTtcbiAgICAgICAgICAgIGlmICghIW5ld1BhZ2UpIHtcbiAgICAgICAgICAgICAgICBuZXdQYWdlLm9uRmlyc3RSZW5kZXJpbmcoKTtcbiAgICAgICAgICAgICAgICBuZXdQYWdlLnVwZGF0ZUN1c3RvbVdpZGdldHMoKTtcbiAgICAgICAgICAgICAgICBuZXdQYWdlLnNldFdhc1Nob3duKHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5sb2NTdHJzQ2hhbmdlZCgpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlzU2hvd2luZ1ByZXZpZXcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlQ2hhbmdlZChuZXdQYWdlLCBvbGRWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUudXBkYXRlQ3VycmVudFBhZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzQ3VycmVudFBhZ2VBdmFpbGFibGUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLmZpcnN0VmlzaWJsZVBhZ2U7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5TW9kZWwucHJvdG90eXBlLCBcImlzQ3VycmVudFBhZ2VBdmFpbGFibGVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBwYWdlID0gdGhpcy5jdXJyZW50UGFnZTtcbiAgICAgICAgICAgIHJldHVybiAhIXBhZ2UgJiYgdGhpcy5pc1BhZ2VJblZpc2libGVMaXN0KHBhZ2UpICYmIHRoaXMuaXNQYWdlRXhpc3RzSW5TdXJ2ZXkocGFnZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuaXNQYWdlRXhpc3RzSW5TdXJ2ZXkgPSBmdW5jdGlvbiAocGFnZSkge1xuICAgICAgICBpZiAodGhpcy5wYWdlcy5pbmRleE9mKHBhZ2UpID4gLTEpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5vbkNvbnRhaW5zUGFnZUNhbGxiYWNrICYmIHRoaXMub25Db250YWluc1BhZ2VDYWxsYmFjayhwYWdlKTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwiYWN0aXZlUGFnZVwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIFtgc3RhcnRlZFBhZ2VgXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2Uvc3VydmV5LWRhdGEtbW9kZWwjc3RhcnRlZFBhZ2UpIGlmIHRoZSBzdXJ2ZXkgY3VycmVudGx5IGRpc3BsYXlzIGEgc3RhcnQgcGFnZTsgb3RoZXJ3aXNlLCByZXR1cm5zIFtgY3VycmVudFBhZ2VgXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2Uvc3VydmV5LWRhdGEtbW9kZWwjY3VycmVudFBhZ2UpLlxuICAgICAgICAgKiBAc2VlIHN0YXJ0ZWRQYWdlXG4gICAgICAgICAqIEBzZWUgY3VycmVudFBhZ2VcbiAgICAgICAgICogQHNlZSBmaXJzdFBhZ2VJc1N0YXJ0ZWRcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImFjdGl2ZVBhZ2VcIik7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5TW9kZWwucHJvdG90eXBlLCBcImlzU2hvd1N0YXJ0aW5nUGFnZVwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBIEJvb2xlYW4gdmFsdWUgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgW3N0YXJ0IHBhZ2VdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vZGVzaWduLXN1cnZleS9jcmVhdGUtYS1tdWx0aS1wYWdlLXN1cnZleSNzdGFydC1wYWdlKSBpcyBjdXJyZW50bHkgZGlzcGxheWVkLlxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZSA9PT0gXCJzdGFydGluZ1wiO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleU1vZGVsLnByb3RvdHlwZSwgXCJtYXRyaXhEcmFnSGFuZGxlQXJlYVwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgd2hpY2ggcGFydCBvZiBhIG1hdHJpeCByb3cgcmVzcG9uZHMgdG8gYSBkcmFnIGdlc3R1cmUgaW4gW0R5bmFtaWMgTWF0cml4XShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9leGFtcGxlcy9xdWVzdGlvbnR5cGUtbWF0cml4ZHluYW1pYy8pIHF1ZXN0aW9ucy5cbiAgICAgICAgICpcbiAgICAgICAgICogUG9zc2libGUgdmFsdWVzOlxuICAgICAgICAgKlxuICAgICAgICAgKiAtIGBcImVudGlyZUl0ZW1cImAgKGRlZmF1bHQpIC0gVXNlcnMgY2FuIHVzZSB0aGUgZW50aXJlIG1hdHJpeCByb3cgYXMgYSBkcmFnIGhhbmRsZS5cbiAgICAgICAgICogLSBgXCJpY29uXCJgIC0gVXNlcnMgY2FuIG9ubHkgdXNlIGEgZHJhZyBpY29uIGFzIGEgZHJhZyBoYW5kbGUuXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJtYXRyaXhEcmFnSGFuZGxlQXJlYVwiLCBcImVudGlyZUl0ZW1cIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibWF0cml4RHJhZ0hhbmRsZUFyZWFcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwiaXNTaG93aW5nUGFnZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGUgPT0gXCJydW5uaW5nXCIgfHwgdGhpcy5zdGF0ZSA9PSBcInByZXZpZXdcIiB8fCB0aGlzLmlzU2hvd1N0YXJ0aW5nUGFnZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS51cGRhdGVBY3RpdmVQYWdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgbmV3UGFnZSA9IHRoaXMuaXNTaG93U3RhcnRpbmdQYWdlID8gdGhpcy5zdGFydGVkUGFnZSA6IHRoaXMuY3VycmVudFBhZ2U7XG4gICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImFjdGl2ZVBhZ2VcIiwgbmV3UGFnZSk7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUub25TdGF0ZUFuZEN1cnJlbnRQYWdlQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy51cGRhdGVBY3RpdmVQYWdlKCk7XG4gICAgICAgIHRoaXMudXBkYXRlQnV0dG9uc1Zpc2liaWxpdHkoKTtcbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5nZXRQYWdlQnlPYmplY3QgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgaWYgKCF2YWx1ZSlcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICBpZiAodmFsdWUuZ2V0VHlwZSAmJiB2YWx1ZS5nZXRUeXBlKCkgPT0gXCJwYWdlXCIpXG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgfHwgdmFsdWUgaW5zdGFuY2VvZiBTdHJpbmcpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQYWdlQnlOYW1lKFN0cmluZyh2YWx1ZSkpO1xuICAgICAgICBpZiAoIWlzTmFOKHZhbHVlKSkge1xuICAgICAgICAgICAgdmFyIGluZGV4ID0gTnVtYmVyKHZhbHVlKTtcbiAgICAgICAgICAgIHZhciB2UGFnZXMgPSB0aGlzLnZpc2libGVQYWdlcztcbiAgICAgICAgICAgIGlmICh2YWx1ZSA8IDAgfHwgdmFsdWUgPj0gdlBhZ2VzLmxlbmd0aClcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIHJldHVybiB2UGFnZXNbaW5kZXhdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwiY3VycmVudFBhZ2VOb1wiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBIHplcm8tYmFzZWQgaW5kZXggb2YgdGhlIGN1cnJlbnQgcGFnZSBpbiB0aGUgW2B2aXNpYmxlUGFnZXNgXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2Uvc3VydmV5LWRhdGEtbW9kZWwjdmlzaWJsZVBhZ2VzKSBhcnJheS5cbiAgICAgICAgICpcbiAgICAgICAgICogW1ZpZXcgRGVtb10oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZXhhbXBsZXMvc3VydmV5LWVkaXRwcmV2aW91cy8gKGxpbmtTdHlsZSkpXG4gICAgICAgICAqIEBzZWUgdmlzaWJsZVBhZ2VzXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZpc2libGVQYWdlcy5pbmRleE9mKHRoaXMuY3VycmVudFBhZ2UpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdmFyIHZQYWdlcyA9IHRoaXMudmlzaWJsZVBhZ2VzO1xuICAgICAgICAgICAgaWYgKHZhbHVlIDwgMCB8fCB2YWx1ZSA+PSB2UGFnZXMubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB2UGFnZXNbdmFsdWVdO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleU1vZGVsLnByb3RvdHlwZSwgXCJxdWVzdGlvbnNPcmRlclwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgdGhlIHNvcnQgb3JkZXIgb2YgcXVlc3Rpb25zIGluIHRoZSBzdXJ2ZXkuXG4gICAgICAgICAqXG4gICAgICAgICAqIFBvc3NpYmxlIHZhbHVlczpcbiAgICAgICAgICpcbiAgICAgICAgICogLSBgXCJpbml0aWFsXCJgIChkZWZhdWx0KSAtIFByZXNlcnZlcyB0aGUgb3JpZ2luYWwgb3JkZXIgb2YgcXVlc3Rpb25zLlxuICAgICAgICAgKiAtIGBcInJhbmRvbVwiYCAtIERpc3BsYXlzIHF1ZXN0aW9ucyBpbiByYW5kb20gb3JkZXIuXG4gICAgICAgICAqXG4gICAgICAgICAqIFlvdSBjYW4gb3ZlcnJpZGUgdGhpcyBwcm9wZXJ0eSBmb3IgaW5kaXZpZHVhbCBwYWdlcyBhbmQgcGFuZWxzLlxuICAgICAgICAgKiBAc2VlIFBhZ2VNb2RlbC5xdWVzdGlvbnNPcmRlclxuICAgICAgICAgKiBAc2VlIFBhbmVsTW9kZWwucXVlc3Rpb25zT3JkZXJcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInF1ZXN0aW9uc09yZGVyXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInF1ZXN0aW9uc09yZGVyXCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICAvKipcbiAgICAgKiBGb2N1c2VzIHRoZSBmaXJzdCBxdWVzdGlvbiBvbiB0aGUgY3VycmVudCBwYWdlLlxuICAgICAqIEBzZWUgZm9jdXNRdWVzdGlvblxuICAgICAqIEBzZWUgZm9jdXNGaXJzdFF1ZXN0aW9uQXV0b21hdGljXG4gICAgICovXG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLmZvY3VzRmlyc3RRdWVzdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuZm9jdXNpbmdRdWVzdGlvbkluZm8pXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciBwYWdlID0gdGhpcy5hY3RpdmVQYWdlO1xuICAgICAgICBpZiAocGFnZSkge1xuICAgICAgICAgICAgcGFnZS5zY3JvbGxUb1RvcCgpO1xuICAgICAgICAgICAgcGFnZS5mb2N1c0ZpcnN0UXVlc3Rpb24oKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLnNjcm9sbFRvVG9wT25QYWdlQ2hhbmdlID0gZnVuY3Rpb24gKGRvU2Nyb2xsKSB7XG4gICAgICAgIGlmIChkb1Njcm9sbCA9PT0gdm9pZCAwKSB7IGRvU2Nyb2xsID0gdHJ1ZTsgfVxuICAgICAgICB2YXIgcGFnZSA9IHRoaXMuYWN0aXZlUGFnZTtcbiAgICAgICAgaWYgKCFwYWdlKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAoZG9TY3JvbGwpIHtcbiAgICAgICAgICAgIHBhZ2Uuc2Nyb2xsVG9Ub3AoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc0N1cnJlbnRQYWdlUmVuZGVyaW5nICYmIHRoaXMuZm9jdXNGaXJzdFF1ZXN0aW9uQXV0b21hdGljICYmICF0aGlzLmZvY3VzaW5nUXVlc3Rpb25JbmZvKSB7XG4gICAgICAgICAgICBwYWdlLmZvY3VzRmlyc3RRdWVzdGlvbigpO1xuICAgICAgICAgICAgdGhpcy5pc0N1cnJlbnRQYWdlUmVuZGVyaW5nID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwic3RhdGVcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJucyB0aGUgY3VycmVudCBzdXJ2ZXkgc3RhdGUuXG4gICAgICAgICAqXG4gICAgICAgICAqIFBvc3NpYmxlIHZhbHVlczpcbiAgICAgICAgICpcbiAgICAgICAgICogLSBgXCJsb2FkaW5nXCJgIC0gVGhlIHN1cnZleSBpcyBiZWluZyBsb2FkZWQgZnJvbSBhIEpTT04gc2NoZW1hLlxuICAgICAgICAgKiAtIGBcImVtcHR5XCJgIC0gVGhlIHN1cnZleSBoYXMgbm8gZWxlbWVudHMgdG8gZGlzcGxheS5cbiAgICAgICAgICogLSBgXCJzdGFydGluZ1wiYCAtIFRoZSBzdXJ2ZXkgZGlzcGxheXMgYSBbc3RhcnQgcGFnZV0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9kZXNpZ24tc3VydmV5L2NyZWF0ZS1hLW11bHRpLXBhZ2Utc3VydmV5I3N0YXJ0LXBhZ2UpLlxuICAgICAgICAgKiAtIGBcInJ1bm5pbmdcImAgLSBBIHJlc3BvbmRlbnQgaXMgdGFraW5nIHRoZSBzdXJ2ZXkuXG4gICAgICAgICAqIC0gYFwicHJldmlld1wiYCAtIEEgcmVzcG9uZGVudCBpcyBbcHJldmlld2luZ10oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZXhhbXBsZXMvc3VydmV5LXNob3dwcmV2aWV3LykgYW5zd2VycyBiZWZvcmUgc3VibWl0dGluZyB0aGVtLlxuICAgICAgICAgKiAtIGBcImNvbXBsZXRlZFwiYCAtIEEgcmVzcG9uZGVudCBoYXMgY29tcGxldGVkIHRoZSBzdXJ2ZXkgYW5kIHN1Ym1pdHRlZCB0aGUgcmVzdWx0cy5cbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInN0YXRlXCIsIFwiZW1wdHlcIik7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUudXBkYXRlU3RhdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInN0YXRlXCIsIHRoaXMuY2FsY1N0YXRlKCkpO1xuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLmNhbGNTdGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNMb2FkaW5nKVxuICAgICAgICAgICAgcmV0dXJuIFwibG9hZGluZ1wiO1xuICAgICAgICBpZiAodGhpcy5pc0NvbXBsZXRlZClcbiAgICAgICAgICAgIHJldHVybiBcImNvbXBsZXRlZFwiO1xuICAgICAgICBpZiAodGhpcy5pc0NvbXBsZXRlZEJlZm9yZSlcbiAgICAgICAgICAgIHJldHVybiBcImNvbXBsZXRlZGJlZm9yZVwiO1xuICAgICAgICBpZiAoIXRoaXMuaXNEZXNpZ25Nb2RlICYmXG4gICAgICAgICAgICB0aGlzLmlzRWRpdE1vZGUgJiZcbiAgICAgICAgICAgIHRoaXMuaXNTdGFydGVkU3RhdGUgJiZcbiAgICAgICAgICAgIHRoaXMuc3RhcnRlZFBhZ2UpXG4gICAgICAgICAgICByZXR1cm4gXCJzdGFydGluZ1wiO1xuICAgICAgICBpZiAodGhpcy5pc1Nob3dpbmdQcmV2aWV3KVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFBhZ2UgPyBcInByZXZpZXdcIiA6IFwiZW1wdHlcIjtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFBhZ2UgPyBcInJ1bm5pbmdcIiA6IFwiZW1wdHlcIjtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwiaXNDb21wbGV0ZWRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpc0NvbXBsZXRlZFwiLCBmYWxzZSk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaXNDb21wbGV0ZWRcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwiaXNTaG93aW5nUHJldmlld1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImlzU2hvd2luZ1ByZXZpZXdcIiwgZmFsc2UpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzU2hvd2luZ1ByZXZpZXcgPT0gdmFsKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImlzU2hvd2luZ1ByZXZpZXdcIiwgdmFsKTtcbiAgICAgICAgICAgIHRoaXMub25TaG93aW5nUHJldmlld0NoYW5nZWQoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwiaXNTdGFydGVkU3RhdGVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpc1N0YXJ0ZWRTdGF0ZVwiLCBmYWxzZSk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaXNTdGFydGVkU3RhdGVcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwiaXNDb21wbGV0ZWRCZWZvcmVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpc0NvbXBsZXRlZEJlZm9yZVwiLCBmYWxzZSk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaXNDb21wbGV0ZWRCZWZvcmVcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwiaXNMb2FkaW5nXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaXNMb2FkaW5nXCIsIGZhbHNlKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpc0xvYWRpbmdcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwiY29tcGxldGVkU3RhdGVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjb21wbGV0ZWRTdGF0ZVwiLCBcIlwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwiY29tcGxldGVkU3RhdGVUZXh0XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY29tcGxldGVkU3RhdGVUZXh0XCIsIFwiXCIpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLnNldENvbXBsZXRlZFN0YXRlID0gZnVuY3Rpb24gKHZhbHVlLCB0ZXh0KSB7XG4gICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNvbXBsZXRlZFN0YXRlXCIsIHZhbHVlKTtcbiAgICAgICAgaWYgKCF0ZXh0KSB7XG4gICAgICAgICAgICBpZiAodmFsdWUgPT0gXCJzYXZpbmdcIilcbiAgICAgICAgICAgICAgICB0ZXh0ID0gdGhpcy5nZXRMb2NhbGl6YXRpb25TdHJpbmcoXCJzYXZpbmdEYXRhXCIpO1xuICAgICAgICAgICAgaWYgKHZhbHVlID09IFwiZXJyb3JcIilcbiAgICAgICAgICAgICAgICB0ZXh0ID0gdGhpcy5nZXRMb2NhbGl6YXRpb25TdHJpbmcoXCJzYXZpbmdEYXRhRXJyb3JcIik7XG4gICAgICAgICAgICBpZiAodmFsdWUgPT0gXCJzdWNjZXNzXCIpXG4gICAgICAgICAgICAgICAgdGV4dCA9IHRoaXMuZ2V0TG9jYWxpemF0aW9uU3RyaW5nKFwic2F2aW5nRGF0YVN1Y2Nlc3NcIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY29tcGxldGVkU3RhdGVUZXh0XCIsIHRleHQpO1xuICAgICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gXCJjb21wbGV0ZWRcIiAmJiB0aGlzLnNob3dDb21wbGV0ZWRQYWdlICYmICEhdGhpcy5jb21wbGV0ZWRTdGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5ub3RpZnkodGhpcy5jb21wbGV0ZWRTdGF0ZVRleHQsIHRoaXMuY29tcGxldGVkU3RhdGUpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUubm90aWZ5ID0gZnVuY3Rpb24gKG1lc3NhZ2UsIHR5cGUpIHtcbiAgICAgICAgdGhpcy5ub3RpZmllci5ub3RpZnkobWVzc2FnZSwgdHlwZSwgdHlwZSA9PT0gXCJlcnJvclwiKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFJlc2V0cyB0aGUgc3VydmV5IFtgc3RhdGVgXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2Uvc3VydmV5LWRhdGEtbW9kZWwjc3RhdGUpIGFuZCwgb3B0aW9uYWxseSwgW2BkYXRhYF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL3N1cnZleS1kYXRhLW1vZGVsI2RhdGEpLiBJZiBgc3RhdGVgIGlzIGBcImNvbXBsZXRlZFwiYCwgaXQgYmVjb21lcyBgXCJydW5uaW5nXCJgLlxuICAgICAqIEBwYXJhbSBjbGVhckRhdGEgKk9wdGlvbmFsLiogU3BlY2lmaWVzIHdoZXRoZXIgdG8gY2xlYXIgc3VydmV5IGRhdGEuIERlZmF1bHQgdmFsdWU6IGB0cnVlYC5cbiAgICAgKiBAcGFyYW0gZ29Ub0ZpcnN0UGFnZSAqT3B0aW9uYWwuKiBTcGVjaWZpZXMgd2hldGhlciB0byBzd2l0Y2ggdGhlIHN1cnZleSB0byB0aGUgZmlyc3QgcGFnZS4gRGVmYXVsdCB2YWx1ZTogYHRydWVgLlxuICAgICAqL1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uIChjbGVhckRhdGEsIGdvVG9GaXJzdFBhZ2UpIHtcbiAgICAgICAgaWYgKGNsZWFyRGF0YSA9PT0gdm9pZCAwKSB7IGNsZWFyRGF0YSA9IHRydWU7IH1cbiAgICAgICAgaWYgKGdvVG9GaXJzdFBhZ2UgPT09IHZvaWQgMCkgeyBnb1RvRmlyc3RQYWdlID0gdHJ1ZTsgfVxuICAgICAgICB0aGlzLmlzQ29tcGxldGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNDb21wbGV0ZWRCZWZvcmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jb21wbGV0ZWRCeVRyaWdnZXJzID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAoY2xlYXJEYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy52YXJpYWJsZXNIYXNoID0ge307XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50aW1lck1vZGVsLnNwZW50ID0gMDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLnBhZ2VzW2ldLnRpbWVTcGVudCA9IDA7XG4gICAgICAgICAgICB0aGlzLnBhZ2VzW2ldLnNldFdhc1Nob3duKGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMucGFnZXNbaV0ucGFzc2VkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbkZpcnN0UGFnZUlzU3RhcnRlZENoYW5nZWQoKTtcbiAgICAgICAgaWYgKGdvVG9GaXJzdFBhZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLmZpcnN0VmlzaWJsZVBhZ2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNsZWFyRGF0YSkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVWYWx1ZXNXaXRoRGVmYXVsdHMoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLm1lcmdlVmFsdWVzID0gZnVuY3Rpb24gKHNyYywgZGVzdCkge1xuICAgICAgICBPYmplY3QoX3V0aWxzX3V0aWxzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNV9fW1wibWVyZ2VWYWx1ZXNcIl0pKHNyYywgZGVzdCk7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUudXBkYXRlVmFsdWVzV2l0aERlZmF1bHRzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5pc0Rlc2lnbk1vZGUgfHwgdGhpcy5pc0xvYWRpbmcpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMucGFnZXNbaV0ucXVlc3Rpb25zO1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBxdWVzdGlvbnMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICBxdWVzdGlvbnNbal0udXBkYXRlVmFsdWVXaXRoRGVmYXVsdHMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLnVwZGF0ZUN1c3RvbVdpZGdldHMgPSBmdW5jdGlvbiAocGFnZSkge1xuICAgICAgICBpZiAoIXBhZ2UpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHBhZ2UudXBkYXRlQ3VzdG9tV2lkZ2V0cygpO1xuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLmN1cnJlbnRQYWdlQ2hhbmdpbmcgPSBmdW5jdGlvbiAobmV3VmFsdWUsIG9sZFZhbHVlKSB7XG4gICAgICAgIHZhciBvcHRpb25zID0gdGhpcy5jcmVhdGVQYWdlQ2hhbmdlRXZlbnRPcHRpb25zKG5ld1ZhbHVlLCBvbGRWYWx1ZSk7XG4gICAgICAgIG9wdGlvbnMuYWxsb3cgPSB0cnVlO1xuICAgICAgICBvcHRpb25zLmFsbG93Q2hhbmdpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLm9uQ3VycmVudFBhZ2VDaGFuZ2luZy5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICAgICAgICB2YXIgYWxsb3cgPSBvcHRpb25zLmFsbG93Q2hhbmdpbmcgJiYgb3B0aW9ucy5hbGxvdztcbiAgICAgICAgaWYgKGFsbG93KSB7XG4gICAgICAgICAgICB0aGlzLmlzQ3VycmVudFBhZ2VSZW5kZXJpbmcgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhbGxvdztcbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5jdXJyZW50UGFnZUNoYW5nZWQgPSBmdW5jdGlvbiAobmV3VmFsdWUsIG9sZFZhbHVlKSB7XG4gICAgICAgIHRoaXMubm90aWZ5UXVlc3Rpb25zT25IaWRpbmdDb250ZW50KG9sZFZhbHVlKTtcbiAgICAgICAgdmFyIG9wdGlvbnMgPSB0aGlzLmNyZWF0ZVBhZ2VDaGFuZ2VFdmVudE9wdGlvbnMobmV3VmFsdWUsIG9sZFZhbHVlKTtcbiAgICAgICAgaWYgKG9wdGlvbnMuaXNOZXh0UGFnZSkge1xuICAgICAgICAgICAgb2xkVmFsdWUucGFzc2VkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uQ3VycmVudFBhZ2VDaGFuZ2VkLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUubm90aWZ5UXVlc3Rpb25zT25IaWRpbmdDb250ZW50ID0gZnVuY3Rpb24gKHBhZ2UpIHtcbiAgICAgICAgaWYgKCFwYWdlKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBwYWdlLnF1ZXN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChxKSB7IHJldHVybiBxLm9uSGlkaW5nQ29udGVudCgpOyB9KTtcbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5jcmVhdGVQYWdlQ2hhbmdlRXZlbnRPcHRpb25zID0gZnVuY3Rpb24gKG5ld1ZhbHVlLCBvbGRWYWx1ZSkge1xuICAgICAgICB2YXIgZGlmZiA9ICEhbmV3VmFsdWUgJiYgISFvbGRWYWx1ZSA/IG5ld1ZhbHVlLnZpc2libGVJbmRleCAtIG9sZFZhbHVlLnZpc2libGVJbmRleCA6IDA7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBvbGRDdXJyZW50UGFnZTogb2xkVmFsdWUsXG4gICAgICAgICAgICBuZXdDdXJyZW50UGFnZTogbmV3VmFsdWUsXG4gICAgICAgICAgICBpc05leHRQYWdlOiBkaWZmID09PSAxLFxuICAgICAgICAgICAgaXNQcmV2UGFnZTogZGlmZiA9PT0gLTEsXG4gICAgICAgICAgICBpc0dvaW5nRm9yd2FyZDogZGlmZiA+IDAsXG4gICAgICAgICAgICBpc0dvaW5nQmFja3dhcmQ6IGRpZmYgPCAwLFxuICAgICAgICAgICAgaXNBZnRlclByZXZpZXc6IHRoaXMuY2hhbmdlQ3VycmVudFBhZ2VGcm9tUHJldmlldyA9PT0gdHJ1ZVxuICAgICAgICB9O1xuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLmdldFByb2dyZXNzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGFnZSA9PSBudWxsKVxuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIGlmICh0aGlzLnByb2dyZXNzQmFyVHlwZSAhPT0gXCJwYWdlc1wiKSB7XG4gICAgICAgICAgICB2YXIgaW5mbyA9IHRoaXMuZ2V0UHJvZ3Jlc3NJbmZvKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5wcm9ncmVzc0JhclR5cGUgPT09IFwicmVxdWlyZWRRdWVzdGlvbnNcIikge1xuICAgICAgICAgICAgICAgIHJldHVybiBpbmZvLnJlcXVpcmVkUXVlc3Rpb25Db3VudCA+PSAxXG4gICAgICAgICAgICAgICAgICAgID8gTWF0aC5jZWlsKChpbmZvLnJlcXVpcmVkQW5zd2VyZWRRdWVzdGlvbkNvdW50ICogMTAwKSAvXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmZvLnJlcXVpcmVkUXVlc3Rpb25Db3VudClcbiAgICAgICAgICAgICAgICAgICAgOiAxMDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaW5mby5xdWVzdGlvbkNvdW50ID49IDFcbiAgICAgICAgICAgICAgICA/IE1hdGguY2VpbCgoaW5mby5hbnN3ZXJlZFF1ZXN0aW9uQ291bnQgKiAxMDApIC8gaW5mby5xdWVzdGlvbkNvdW50KVxuICAgICAgICAgICAgICAgIDogMTAwO1xuICAgICAgICB9XG4gICAgICAgIHZhciB2aXNQYWdlcyA9IHRoaXMudmlzaWJsZVBhZ2VzO1xuICAgICAgICB2YXIgaW5kZXggPSB2aXNQYWdlcy5pbmRleE9mKHRoaXMuY3VycmVudFBhZ2UpO1xuICAgICAgICByZXR1cm4gTWF0aC5jZWlsKChpbmRleCAqIDEwMCkgLyB2aXNQYWdlcy5sZW5ndGgpO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleU1vZGVsLnByb3RvdHlwZSwgXCJwcm9ncmVzc1ZhbHVlXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgYSBwZXJjZW50YWdlIHZhbHVlIHRoYXQgaW5kaWNhdGVzIHVzZXIgcHJvZ3Jlc3MgaW4gdGhlIHN1cnZleS5cbiAgICAgICAgICogQHNlZSBzaG93UHJvZ3Jlc3NCYXJcbiAgICAgICAgICogQHNlZSBwcm9ncmVzc0JhclR5cGVcbiAgICAgICAgICogQHNlZSBwcm9ncmVzc1RleHRcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInByb2dyZXNzVmFsdWVcIiwgMCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5TW9kZWwucHJvdG90eXBlLCBcImlzTmF2aWdhdGlvbkJ1dHRvbnNTaG93aW5nXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0Rlc2lnbk1vZGUpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwibm9uZVwiO1xuICAgICAgICAgICAgdmFyIHBhZ2UgPSB0aGlzLmN1cnJlbnRQYWdlO1xuICAgICAgICAgICAgaWYgKCFwYWdlKVxuICAgICAgICAgICAgICAgIHJldHVybiBcIm5vbmVcIjtcbiAgICAgICAgICAgIGlmIChwYWdlLm5hdmlnYXRpb25CdXR0b25zVmlzaWJpbGl0eSA9PT0gXCJzaG93XCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zaG93TmF2aWdhdGlvbkJ1dHRvbnMgPT09IFwibm9uZVwiID8gXCJib3R0b21cIiA6IHRoaXMuc2hvd05hdmlnYXRpb25CdXR0b25zO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHBhZ2UubmF2aWdhdGlvbkJ1dHRvbnNWaXNpYmlsaXR5ID09PSBcImhpZGVcIikge1xuICAgICAgICAgICAgICAgIHJldHVybiBcIm5vbmVcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNob3dOYXZpZ2F0aW9uQnV0dG9ucztcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwiaXNOYXZpZ2F0aW9uQnV0dG9uc1Nob3dpbmdPblRvcFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0SXNOYXZpZ2F0aW9uQnV0dG9uc1Nob3dpbmdPbihcInRvcFwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwiaXNOYXZpZ2F0aW9uQnV0dG9uc1Nob3dpbmdPbkJvdHRvbVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0SXNOYXZpZ2F0aW9uQnV0dG9uc1Nob3dpbmdPbihcImJvdHRvbVwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5nZXRJc05hdmlnYXRpb25CdXR0b25zU2hvd2luZ09uID0gZnVuY3Rpb24gKGJ1dHRvblBvc2l0aW9uKSB7XG4gICAgICAgIHZhciByZXMgPSB0aGlzLmlzTmF2aWdhdGlvbkJ1dHRvbnNTaG93aW5nO1xuICAgICAgICByZXR1cm4gcmVzID09IFwiYm90aFwiIHx8IHJlcyA9PSBidXR0b25Qb3NpdGlvbjtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwiaXNFZGl0TW9kZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW9kZSA9PSBcImVkaXRcIjtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwiaXNEaXNwbGF5TW9kZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW9kZSA9PSBcImRpc3BsYXlcIiB8fCB0aGlzLnN0YXRlID09IFwicHJldmlld1wiO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleU1vZGVsLnByb3RvdHlwZSwgXCJpc1VwZGF0ZVZhbHVlVGV4dE9uVHlwaW5nXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0VXBkYXRlTW9kZSA9PSBcIm9uVHlwaW5nXCI7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5TW9kZWwucHJvdG90eXBlLCBcImlzRGVzaWduTW9kZVwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgc3VydmV5IGlzIGJlaW5nIGRlc2lnbmVkIGluIFtTdXJ2ZXkgQ3JlYXRvcl0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9zdXJ2ZXktY3JlYXRvci9kb2N1bWVudGF0aW9uL292ZXJ2aWV3KS5cbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzRGVzaWduTW9kZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5zZXREZXNpZ25Nb2RlID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIGlmICghIXRoaXMuX2lzRGVzaWduTW9kZSAhPSAhIXZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLl9pc0Rlc2lnbk1vZGUgPSAhIXZhbHVlO1xuICAgICAgICAgICAgdGhpcy5vblF1ZXN0aW9uc09uUGFnZU1vZGVDaGFuZ2VkKFwic3RhbmRhcmRcIik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwic2hvd0ludmlzaWJsZUVsZW1lbnRzXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB3aGV0aGVyIHRvIHNob3cgYWxsIHN1cnZleSBlbGVtZW50cywgcmVnYXJkbGVzcyBvZiB0aGVpciB2aXNpYmlsaXR5LlxuICAgICAgICAgKlxuICAgICAgICAgKiBEZWZhdWx0IHZhbHVlOiBgZmFsc2VgXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzaG93SW52aXNpYmxlRWxlbWVudHNcIiwgZmFsc2UpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHZhciB2aXNQYWdlcyA9IHRoaXMudmlzaWJsZVBhZ2VzO1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwic2hvd0ludmlzaWJsZUVsZW1lbnRzXCIsIHZhbCk7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0xvYWRpbmdGcm9tSnNvbilcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB0aGlzLnJ1bkNvbmRpdGlvbnMoKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQWxsRWxlbWVudHNWaXNpYmlsaXR5KHZpc1BhZ2VzKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS51cGRhdGVBbGxFbGVtZW50c1Zpc2liaWxpdHkgPSBmdW5jdGlvbiAodmlzUGFnZXMpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgcGFnZSA9IHRoaXMucGFnZXNbaV07XG4gICAgICAgICAgICBwYWdlLnVwZGF0ZUVsZW1lbnRWaXNpYmlsaXR5KCk7XG4gICAgICAgICAgICBpZiAodmlzUGFnZXMuaW5kZXhPZihwYWdlKSA+IC0xICE9IHBhZ2UuaXNWaXNpYmxlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vblBhZ2VWaXNpYmxlQ2hhbmdlZC5maXJlKHRoaXMsIHtcbiAgICAgICAgICAgICAgICAgICAgcGFnZTogcGFnZSxcbiAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogcGFnZS5pc1Zpc2libGUsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwiYXJlSW52aXNpYmxlRWxlbWVudHNTaG93aW5nXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pc0Rlc2lnbk1vZGUgfHwgdGhpcy5zaG93SW52aXNpYmxlRWxlbWVudHM7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5TW9kZWwucHJvdG90eXBlLCBcImFyZUVtcHR5RWxlbWVudHNIaWRkZW5cIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAodGhpcy5pc1Nob3dpbmdQcmV2aWV3ICYmXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93UHJldmlld0JlZm9yZUNvbXBsZXRlID09IFwic2hvd0Fuc3dlcmVkUXVlc3Rpb25zXCIgJiYgdGhpcy5pc0FueVF1ZXN0aW9uQW5zd2VyZWQpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleU1vZGVsLnByb3RvdHlwZSwgXCJpc0FueVF1ZXN0aW9uQW5zd2VyZWRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLmdldEFsbFF1ZXN0aW9ucyh0cnVlKTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFxdWVzdGlvbnNbaV0uaXNFbXB0eSgpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwiaGFzQ29va2llXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBicm93c2VyIGhhcyBhIGNvb2tpZSB3aXRoIGEgc3BlY2lmaWVkIFtgY29va2llTmFtZWBdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vYXBpLXJlZmVyZW5jZS9zdXJ2ZXktZGF0YS1tb2RlbCNjb29raWVOYW1lKS4gSWYgdGhpcyBwcm9wZXJ0eSdzIHZhbHVlIGlzIGB0cnVlYCwgdGhlIHJlc3BvbmRlbnQgaGFzIHBhc3NlZCB0aGUgc3VydmV5IHByZXZpb3VzbHkuXG4gICAgICAgICAqIEBzZWUgc2V0Q29va2llXG4gICAgICAgICAqIEBzZWUgZGVsZXRlQ29va2llXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5jb29raWVOYW1lIHx8IHR5cGVvZiBkb2N1bWVudCA9PT0gXCJ1bmRlZmluZWRcIilcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB2YXIgY29va2llcyA9IGRvY3VtZW50LmNvb2tpZTtcbiAgICAgICAgICAgIHJldHVybiBjb29raWVzICYmIGNvb2tpZXMuaW5kZXhPZih0aGlzLmNvb2tpZU5hbWUgKyBcIj10cnVlXCIpID4gLTE7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICAvKipcbiAgICAgKiBTZXRzIGEgY29va2llIHdpdGggYSBzcGVjaWZpZWQgW2Bjb29raWVOYW1lYF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL3N1cnZleS1kYXRhLW1vZGVsI2Nvb2tpZU5hbWUpIGluIHRoZSBicm93c2VyLiBJZiB0aGUgYGNvb2tpZU5hbWVgIHByb3BlcnR5IHZhbHVlIGlzIGRlZmluZWQsIHRoaXMgbWV0aG9kIGlzIGF1dG9tYXRpY2FsbHkgY2FsbGVkIG9uIHN1cnZleSBjb21wbGV0aW9uLlxuICAgICAqIEBzZWUgaGFzQ29va2llXG4gICAgICogQHNlZSBkZWxldGVDb29raWVcbiAgICAgKi9cbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuc2V0Q29va2llID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuY29va2llTmFtZSB8fCB0eXBlb2YgZG9jdW1lbnQgPT09IFwidW5kZWZpbmVkXCIpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGRvY3VtZW50LmNvb2tpZSA9XG4gICAgICAgICAgICB0aGlzLmNvb2tpZU5hbWUgKyBcIj10cnVlOyBleHBpcmVzPUZyaSwgMzEgRGVjIDk5OTkgMDowOjAgR01UXCI7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBEZWxldGVzIGEgY29va2llIHdpdGggYSBzcGVjaWZpZWQgW2Bjb29raWVOYW1lYF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL3N1cnZleS1kYXRhLW1vZGVsI2Nvb2tpZU5hbWUpIGZyb20gdGhlIGJyb3dzZXIuXG4gICAgICogQHNlZSBoYXNDb29raWVcbiAgICAgKiBAc2VlIHNldENvb2tpZVxuICAgICAqL1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5kZWxldGVDb29raWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5jb29raWVOYW1lKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBkb2N1bWVudC5jb29raWUgPSB0aGlzLmNvb2tpZU5hbWUgKyBcIj07XCI7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBTd2l0Y2hlcyB0aGUgc3VydmV5IHRvIHRoZSBuZXh0IHBhZ2UuXG4gICAgICpcbiAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgQm9vbGVhbiB2YWx1ZSB0aGF0IGluZGljYXRlcyB3aGV0aGVyIHRoZSBwYWdlIHdhcyBzdWNjZXNzZnVsbHkgc3dpdGNoZWQuIGBmYWxzZWAgaXMgcmV0dXJuZWQgaWYgdGhlIGN1cnJlbnQgcGFnZSBpcyB0aGUgbGFzdCBwYWdlIG9yIGlmIGl0IGNvbnRhaW5zIHZhbGlkYXRpb24gZXJyb3JzLlxuICAgICAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgcGFnZSB3YXMgc3VjY2Vzc2Z1bGx5IHN3aXRjaGVkOyBgZmFsc2VgIG90aGVyd2lzZS5cbiAgICAgKiBAc2VlIGlzTGFzdFBhZ2VcbiAgICAgKiBAc2VlIHByZXZQYWdlXG4gICAgICogQHNlZSBjb21wbGV0ZUxhc3RQYWdlXG4gICAgICovXG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLm5leHRQYWdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5pc0xhc3RQYWdlKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gdGhpcy5kb0N1cnJlbnRQYWdlQ29tcGxldGUoZmFsc2UpO1xuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLmhhc0Vycm9yc09uTmF2aWdhdGUgPSBmdW5jdGlvbiAoZG9Db21wbGV0ZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBpZiAodGhpcy5pZ25vcmVWYWxpZGF0aW9uIHx8ICF0aGlzLmlzRWRpdE1vZGUpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHZhciBmdW5jID0gZnVuY3Rpb24gKGhhc0Vycm9ycykge1xuICAgICAgICAgICAgaWYgKCFoYXNFcnJvcnMpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5kb0N1cnJlbnRQYWdlQ29tcGxldGVDb3JlKGRvQ29tcGxldGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy5pc1ZhbGlkYXRlT25Db21wbGV0ZSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlzTGFzdFBhZ2UpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGUodHJ1ZSwgdHJ1ZSwgZnVuYykgIT09IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVDdXJyZW50UGFnZShmdW5jKSAhPT0gdHJ1ZTtcbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5jaGVja0ZvckFzeW5jUXVlc3Rpb25WYWxpZGF0aW9uID0gZnVuY3Rpb24gKHF1ZXN0aW9ucywgZnVuYykge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB0aGlzLmNsZWFyQXN5bmNWYWxpZGF0aW9uUXVlc2l0b25zKCk7XG4gICAgICAgIHZhciBfbG9vcF8yID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKHF1ZXN0aW9uc1tpXS5pc1J1bm5pbmdWYWxpZGF0b3JzKSB7XG4gICAgICAgICAgICAgICAgdmFyIHFfMSA9IHF1ZXN0aW9uc1tpXTtcbiAgICAgICAgICAgICAgICBxXzEub25Db21wbGV0ZWRBc3luY1ZhbGlkYXRvcnMgPSBmdW5jdGlvbiAoaGFzRXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgICAgIF90aGlzLm9uQ29tcGxldGVkQXN5bmNRdWVzdGlvblZhbGlkYXRvcnMocV8xLCBmdW5jLCBoYXNFcnJvcnMpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdGhpc18yLmFzeW5jVmFsaWRhdGlvblF1ZXNpdG9ucy5wdXNoKHF1ZXN0aW9uc1tpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHZhciB0aGlzXzIgPSB0aGlzO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgX2xvb3BfMigpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmFzeW5jVmFsaWRhdGlvblF1ZXNpdG9ucy5sZW5ndGggPiAwO1xuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLmNsZWFyQXN5bmNWYWxpZGF0aW9uUXVlc2l0b25zID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoISF0aGlzLmFzeW5jVmFsaWRhdGlvblF1ZXNpdG9ucykge1xuICAgICAgICAgICAgdmFyIGFzeW5RdWVzdGlvbnMgPSB0aGlzLmFzeW5jVmFsaWRhdGlvblF1ZXNpdG9ucztcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXN5blF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGFzeW5RdWVzdGlvbnNbaV0ub25Db21wbGV0ZWRBc3luY1ZhbGlkYXRvcnMgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuYXN5bmNWYWxpZGF0aW9uUXVlc2l0b25zID0gW107XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUub25Db21wbGV0ZWRBc3luY1F1ZXN0aW9uVmFsaWRhdG9ycyA9IGZ1bmN0aW9uIChxdWVzdGlvbiwgZnVuYywgaGFzRXJyb3JzKSB7XG4gICAgICAgIGlmIChoYXNFcnJvcnMpIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJBc3luY1ZhbGlkYXRpb25RdWVzaXRvbnMoKTtcbiAgICAgICAgICAgIGZ1bmModHJ1ZSk7XG4gICAgICAgICAgICBpZiAodGhpcy5mb2N1c09uRmlyc3RFcnJvciAmJiAhIXF1ZXN0aW9uICYmICEhcXVlc3Rpb24ucGFnZSAmJiBxdWVzdGlvbi5wYWdlID09PSB0aGlzLmN1cnJlbnRQYWdlKSB7XG4gICAgICAgICAgICAgICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMuY3VycmVudFBhZ2UucXVlc3Rpb25zO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGlfMSA9IDA7IGlfMSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGlfMSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChxdWVzdGlvbnNbaV8xXSAhPT0gcXVlc3Rpb24gJiYgcXVlc3Rpb25zW2lfMV0uZXJyb3JzLmxlbmd0aCA+IDApXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHF1ZXN0aW9uLmZvY3VzKHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciBhc3luUXVlc3Rpb25zID0gdGhpcy5hc3luY1ZhbGlkYXRpb25RdWVzaXRvbnM7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXN5blF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGFzeW5RdWVzdGlvbnNbaV0uaXNSdW5uaW5nVmFsaWRhdG9ycylcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZnVuYyhmYWxzZSk7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5TW9kZWwucHJvdG90eXBlLCBcImlzQ3VycmVudFBhZ2VIYXNFcnJvcnNcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoZWNrSXNDdXJyZW50UGFnZUhhc0Vycm9ycygpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleU1vZGVsLnByb3RvdHlwZSwgXCJpc0N1cnJlbnRQYWdlVmFsaWRcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGN1cnJlbnQgcGFnZSBkb2VzIG5vdCBjb250YWluIGVycm9ycy5cbiAgICAgICAgICogQHNlZSBjdXJyZW50UGFnZVxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gIXRoaXMuY2hlY2tJc0N1cnJlbnRQYWdlSGFzRXJyb3JzKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuaGFzQ3VycmVudFBhZ2VFcnJvcnMgPSBmdW5jdGlvbiAob25Bc3luY1ZhbGlkYXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFzUGFnZUVycm9ycyh1bmRlZmluZWQsIG9uQXN5bmNWYWxpZGF0aW9uKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFZhbGlkYXRlcyBhbGwgcXVlc3Rpb25zIG9uIHRoZSBjdXJyZW50IHBhZ2UgYW5kIHJldHVybnMgYGZhbHNlYCBpZiB0aGUgdmFsaWRhdGlvbiBmYWlscy5cbiAgICAgKlxuICAgICAqIElmIHlvdSB1c2UgdmFsaWRhdGlvbiBleHByZXNzaW9ucyBhbmQgYXQgbGVhc3Qgb25lIG9mIHRoZW0gY2FsbHMgYW4gYXN5bmMgZnVuY3Rpb24sIHRoZSBgdmFsaWRhdGVDdXJyZW50UGFnZWAgbWV0aG9kIHJldHVybnMgYHVuZGVmaW5lZGAuIEluIHRoaXMgY2FzZSwgeW91IHNob3VsZCBwYXNzIGEgY2FsbGJhY2sgZnVuY3Rpb24gYXMgdGhlIGBvbkFzeW5jVmFsaWRhdGlvbmAgcGFyYW1ldGVyLiBUaGUgZnVuY3Rpb24ncyBgaGFzRXJyb3JzYCBCb29sZWFuIHBhcmFtZXRlciB3aWxsIGNvbnRhaW4gdGhlIHZhbGlkYXRpb24gcmVzdWx0LlxuICAgICAqIEBwYXJhbSBvbkFzeW5jVmFsaWRhdGlvbiAqT3B0aW9uYWwuKiBQYXNzIGEgY2FsbGJhY2sgZnVuY3Rpb24uIEl0IGFjY2VwdHMgYSBCb29sZWFuIGBoYXNFcnJvcnNgIHBhcmFtZXRlciB0aGF0IGVxdWFscyBgdHJ1ZWAgaWYgdGhlIHZhbGlkYXRpb24gZmFpbHMgb3IgYGZhbHNlYCBvdGhlcndpc2UuXG4gICAgICogQHNlZSBjdXJyZW50UGFnZVxuICAgICAqIEBzZWUgdmFsaWRhdGVcbiAgICAgKiBAc2VlIHZhbGlkYXRlQ3VycmVudFBhZ2VcbiAgICAgKi9cbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUudmFsaWRhdGVDdXJyZW50UGFnZSA9IGZ1bmN0aW9uIChvbkFzeW5jVmFsaWRhdGlvbikge1xuICAgICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZVBhZ2UodW5kZWZpbmVkLCBvbkFzeW5jVmFsaWRhdGlvbik7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuaGFzUGFnZUVycm9ycyA9IGZ1bmN0aW9uIChwYWdlLCBvbkFzeW5jVmFsaWRhdGlvbikge1xuICAgICAgICB2YXIgcmVzID0gdGhpcy52YWxpZGF0ZVBhZ2UocGFnZSwgb25Bc3luY1ZhbGlkYXRpb24pO1xuICAgICAgICBpZiAocmVzID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICByZXR1cm4gIXJlcztcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFZhbGlkYXRlcyBhbGwgcXVlc3Rpb25zIG9uIGEgc3BlY2lmaWVkIHBhZ2UgYW5kIHJldHVybnMgYGZhbHNlYCBpZiB0aGUgdmFsaWRhdGlvbiBmYWlscy5cbiAgICAgKlxuICAgICAqIElmIHlvdSB1c2UgdmFsaWRhdGlvbiBleHByZXNzaW9ucyBhbmQgYXQgbGVhc3Qgb25lIG9mIHRoZW0gY2FsbHMgYW4gYXN5bmMgZnVuY3Rpb24sIHRoZSBgdmFsaWRhdGVQYWdlYCBtZXRob2QgcmV0dXJucyBgdW5kZWZpbmVkYC4gSW4gdGhpcyBjYXNlLCB5b3Ugc2hvdWxkIHBhc3MgYSBjYWxsYmFjayBmdW5jdGlvbiBhcyB0aGUgYG9uQXN5bmNWYWxpZGF0aW9uYCBwYXJhbWV0ZXIuIFRoZSBmdW5jdGlvbidzIGBoYXNFcnJvcnNgIEJvb2xlYW4gcGFyYW1ldGVyIHdpbGwgY29udGFpbiB0aGUgdmFsaWRhdGlvbiByZXN1bHQuXG4gICAgICogQHBhcmFtIHBhZ2UgUGFzcyB0aGUgYFBhZ2VNb2RlbGAgdGhhdCB5b3Ugd2FudCB0byB2YWxpZGF0ZS4gWW91IGNhbiBwYXNzIGB1bmRlZmluZWRgIHRvIHZhbGlkYXRlIHRoZSBbYGFjdGl2ZVBhZ2VgXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2Uvc3VydmV5LWRhdGEtbW9kZWwjYWN0aXZlUGFnZSkuXG4gICAgICogQHBhcmFtIG9uQXN5bmNWYWxpZGF0aW9uICpPcHRpb25hbC4qIFBhc3MgYSBjYWxsYmFjayBmdW5jdGlvbi4gSXQgYWNjZXB0cyBhIEJvb2xlYW4gYGhhc0Vycm9yc2AgcGFyYW1ldGVyIHRoYXQgZXF1YWxzIGB0cnVlYCBpZiB0aGUgdmFsaWRhdGlvbiBmYWlscyBvciBgZmFsc2VgIG90aGVyd2lzZS5cbiAgICAgKiBAc2VlIHZhbGlkYXRlXG4gICAgICogQHNlZSB2YWxpZGF0ZUN1cnJlbnRQYWdlXG4gICAgICovXG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLnZhbGlkYXRlUGFnZSA9IGZ1bmN0aW9uIChwYWdlLCBvbkFzeW5jVmFsaWRhdGlvbikge1xuICAgICAgICBpZiAoIXBhZ2UpIHtcbiAgICAgICAgICAgIHBhZ2UgPSB0aGlzLmFjdGl2ZVBhZ2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFwYWdlKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmICh0aGlzLmNoZWNrSXNQYWdlSGFzRXJyb3JzKHBhZ2UpKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoIW9uQXN5bmNWYWxpZGF0aW9uKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzLmNoZWNrRm9yQXN5bmNRdWVzdGlvblZhbGlkYXRpb24ocGFnZS5xdWVzdGlvbnMsIGZ1bmN0aW9uIChoYXNFcnJvcnMpIHsgcmV0dXJuIG9uQXN5bmNWYWxpZGF0aW9uKGhhc0Vycm9ycyk7IH0pXG4gICAgICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICAgICAgOiB0cnVlO1xuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLmhhc0Vycm9ycyA9IGZ1bmN0aW9uIChmaXJlQ2FsbGJhY2ssIGZvY3VzT25GaXJzdEVycm9yLCBvbkFzeW5jVmFsaWRhdGlvbikge1xuICAgICAgICBpZiAoZmlyZUNhbGxiYWNrID09PSB2b2lkIDApIHsgZmlyZUNhbGxiYWNrID0gdHJ1ZTsgfVxuICAgICAgICBpZiAoZm9jdXNPbkZpcnN0RXJyb3IgPT09IHZvaWQgMCkgeyBmb2N1c09uRmlyc3RFcnJvciA9IGZhbHNlOyB9XG4gICAgICAgIHZhciByZXMgPSB0aGlzLnZhbGlkYXRlKGZpcmVDYWxsYmFjaywgZm9jdXNPbkZpcnN0RXJyb3IsIG9uQXN5bmNWYWxpZGF0aW9uKTtcbiAgICAgICAgaWYgKHJlcyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgcmV0dXJuICFyZXM7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBWYWxpZGF0ZXMgYWxsIHF1ZXN0aW9ucyBhbmQgcmV0dXJucyBgZmFsc2VgIGlmIHRoZSB2YWxpZGF0aW9uIGZhaWxzLlxuICAgICAqXG4gICAgICogSWYgeW91IHVzZSB2YWxpZGF0aW9uIGV4cHJlc3Npb25zIGFuZCBhdCBsZWFzdCBvbmUgb2YgdGhlbSBjYWxscyBhbiBhc3luYyBmdW5jdGlvbiwgdGhlIGB2YWxpZGF0ZWAgbWV0aG9kIHJldHVybnMgYHVuZGVmaW5lZGAuIEluIHRoaXMgY2FzZSwgeW91IHNob3VsZCBwYXNzIGEgY2FsbGJhY2sgZnVuY3Rpb24gYXMgdGhlIGBvbkFzeW5jVmFsaWRhdGlvbmAgcGFyYW1ldGVyLiBUaGUgZnVuY3Rpb24ncyBgaGFzRXJyb3JzYCBCb29sZWFuIHBhcmFtZXRlciB3aWxsIGNvbnRhaW4gdGhlIHZhbGlkYXRpb24gcmVzdWx0LlxuICAgICAqIEBwYXJhbSBmaXJlQ2FsbGJhY2sgKk9wdGlvbmFsLiogUGFzcyBgZmFsc2VgIGlmIHlvdSBkbyBub3Qgd2FudCB0byBzaG93IHZhbGlkYXRpb24gZXJyb3JzIGluIHRoZSBVSS5cbiAgICAgKiBAcGFyYW0gZm9jdXNPbkZpcnN0RXJyb3IgKk9wdGlvbmFsLiogUGFzcyBgdHJ1ZWAgaWYgeW91IHdhbnQgdG8gZm9jdXMgdGhlIGZpcnN0IHF1ZXN0aW9uIHdpdGggYSB2YWxpZGF0aW9uIGVycm9yLiBUaGUgc3VydmV5IHdpbGwgYmUgc3dpdGNoZWQgdG8gdGhlIHBhZ2UgdGhhdCBjb250YWlucyB0aGlzIHF1ZXN0aW9uIGlmIHJlcXVpcmVkLlxuICAgICAqIEBwYXJhbSBvbkFzeW5jVmFsaWRhdGlvbiAqT3B0aW9uYWwuKiBQYXNzIGEgY2FsbGJhY2sgZnVuY3Rpb24uIEl0IGFjY2VwdHMgYSBCb29sZWFuIGBoYXNFcnJvcnNgIHBhcmFtZXRlciB0aGF0IGVxdWFscyBgdHJ1ZWAgaWYgdGhlIHZhbGlkYXRpb24gZmFpbHMgb3IgYGZhbHNlYCBvdGhlcndpc2UuXG4gICAgICogQHNlZSB2YWxpZGF0ZUN1cnJlbnRQYWdlXG4gICAgICogQHNlZSB2YWxpZGF0ZVBhZ2VcbiAgICAgKi9cbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUudmFsaWRhdGUgPSBmdW5jdGlvbiAoZmlyZUNhbGxiYWNrLCBmb2N1c09uRmlyc3RFcnJvciwgb25Bc3luY1ZhbGlkYXRpb24pIHtcbiAgICAgICAgaWYgKGZpcmVDYWxsYmFjayA9PT0gdm9pZCAwKSB7IGZpcmVDYWxsYmFjayA9IHRydWU7IH1cbiAgICAgICAgaWYgKGZvY3VzT25GaXJzdEVycm9yID09PSB2b2lkIDApIHsgZm9jdXNPbkZpcnN0RXJyb3IgPSBmYWxzZTsgfVxuICAgICAgICBpZiAoISFvbkFzeW5jVmFsaWRhdGlvbikge1xuICAgICAgICAgICAgZmlyZUNhbGxiYWNrID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdmlzUGFnZXMgPSB0aGlzLnZpc2libGVQYWdlcztcbiAgICAgICAgdmFyIGZpcnN0RXJyb3JQYWdlID0gbnVsbDtcbiAgICAgICAgdmFyIHJlcyA9IHRydWU7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmlzUGFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICghdmlzUGFnZXNbaV0udmFsaWRhdGUoZmlyZUNhbGxiYWNrLCBmYWxzZSkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWZpcnN0RXJyb3JQYWdlKVxuICAgICAgICAgICAgICAgICAgICBmaXJzdEVycm9yUGFnZSA9IHZpc1BhZ2VzW2ldO1xuICAgICAgICAgICAgICAgIHJlcyA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChmb2N1c09uRmlyc3RFcnJvciAmJiAhIWZpcnN0RXJyb3JQYWdlKSB7XG4gICAgICAgICAgICB2YXIgcXVlc3Rpb25zID0gZmlyc3RFcnJvclBhZ2UuZ2V0UXVlc3Rpb25zKHRydWUpO1xuICAgICAgICAgICAgZm9yICh2YXIgaV8yID0gMDsgaV8yIDwgcXVlc3Rpb25zLmxlbmd0aDsgaV8yKyspIHtcbiAgICAgICAgICAgICAgICBpZiAocXVlc3Rpb25zW2lfMl0uZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25zW2lfMl0uZm9jdXModHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIXJlcyB8fCAhb25Bc3luY1ZhbGlkYXRpb24pXG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICByZXR1cm4gdGhpcy5jaGVja0ZvckFzeW5jUXVlc3Rpb25WYWxpZGF0aW9uKHRoaXMuZ2V0QWxsUXVlc3Rpb25zKCksIGZ1bmN0aW9uIChoYXNFcnJvcnMpIHsgcmV0dXJuIG9uQXN5bmNWYWxpZGF0aW9uKGhhc0Vycm9ycyk7IH0pXG4gICAgICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICAgICAgOiB0cnVlO1xuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLmVuc3VyZVVuaXF1ZU5hbWVzID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICAgICAgaWYgKGVsZW1lbnQgPT09IHZvaWQgMCkgeyBlbGVtZW50ID0gbnVsbDsgfVxuICAgICAgICBpZiAoZWxlbWVudCA9PSBudWxsKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVuc3VyZVVuaXF1ZU5hbWUodGhpcy5wYWdlc1tpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmVuc3VyZVVuaXF1ZU5hbWUoZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5lbnN1cmVVbmlxdWVOYW1lID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICAgICAgaWYgKGVsZW1lbnQuaXNQYWdlKSB7XG4gICAgICAgICAgICB0aGlzLmVuc3VyZVVuaXF1ZVBhZ2VOYW1lKGVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbGVtZW50LmlzUGFuZWwpIHtcbiAgICAgICAgICAgIHRoaXMuZW5zdXJlVW5pcXVlUGFuZWxOYW1lKGVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbGVtZW50LmlzUGFnZSB8fCBlbGVtZW50LmlzUGFuZWwpIHtcbiAgICAgICAgICAgIHZhciBlbGVtZW50cyA9IGVsZW1lbnQuZWxlbWVudHM7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbnN1cmVVbmlxdWVOYW1lcyhlbGVtZW50c1tpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmVuc3VyZVVuaXF1ZVF1ZXN0aW9uTmFtZShlbGVtZW50KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLmVuc3VyZVVuaXF1ZVBhZ2VOYW1lID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5zdXJlVW5pcXVlRWxlbWVudE5hbWUoZWxlbWVudCwgZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiBfdGhpcy5nZXRQYWdlQnlOYW1lKG5hbWUpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5lbnN1cmVVbmlxdWVQYW5lbE5hbWUgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICByZXR1cm4gdGhpcy5lbnN1cmVVbmlxdWVFbGVtZW50TmFtZShlbGVtZW50LCBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIF90aGlzLmdldFBhbmVsQnlOYW1lKG5hbWUpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5lbnN1cmVVbmlxdWVRdWVzdGlvbk5hbWUgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICByZXR1cm4gdGhpcy5lbnN1cmVVbmlxdWVFbGVtZW50TmFtZShlbGVtZW50LCBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIF90aGlzLmdldFF1ZXN0aW9uQnlOYW1lKG5hbWUpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5lbnN1cmVVbmlxdWVFbGVtZW50TmFtZSA9IGZ1bmN0aW9uIChlbGVtZW50LCBnZXRFbGVtZW50QnlOYW1lKSB7XG4gICAgICAgIHZhciBleGlzdGluZ0VsZW1lbnQgPSBnZXRFbGVtZW50QnlOYW1lKGVsZW1lbnQubmFtZSk7XG4gICAgICAgIGlmICghZXhpc3RpbmdFbGVtZW50IHx8IGV4aXN0aW5nRWxlbWVudCA9PSBlbGVtZW50KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIgbmV3TmFtZSA9IHRoaXMuZ2V0TmV3TmFtZShlbGVtZW50Lm5hbWUpO1xuICAgICAgICB3aGlsZSAoISFnZXRFbGVtZW50QnlOYW1lKG5ld05hbWUpKSB7XG4gICAgICAgICAgICB2YXIgbmV3TmFtZSA9IHRoaXMuZ2V0TmV3TmFtZShlbGVtZW50Lm5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsZW1lbnQubmFtZSA9IG5ld05hbWU7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuZ2V0TmV3TmFtZSA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIHZhciBwb3MgPSBuYW1lLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKHBvcyA+IDAgJiYgbmFtZVtwb3MgLSAxXSA+PSBcIjBcIiAmJiBuYW1lW3BvcyAtIDFdIDw9IFwiOVwiKSB7XG4gICAgICAgICAgICBwb3MtLTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgYmFzZSA9IG5hbWUuc3Vic3RyaW5nKDAsIHBvcyk7XG4gICAgICAgIHZhciBudW0gPSAwO1xuICAgICAgICBpZiAocG9zIDwgbmFtZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIG51bSA9IHBhcnNlSW50KG5hbWUuc3Vic3RyaW5nKHBvcykpO1xuICAgICAgICB9XG4gICAgICAgIG51bSsrO1xuICAgICAgICByZXR1cm4gYmFzZSArIG51bTtcbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5jaGVja0lzQ3VycmVudFBhZ2VIYXNFcnJvcnMgPSBmdW5jdGlvbiAoaXNGb2N1c2VPbkZpcnN0RXJyb3IpIHtcbiAgICAgICAgaWYgKGlzRm9jdXNlT25GaXJzdEVycm9yID09PSB2b2lkIDApIHsgaXNGb2N1c2VPbkZpcnN0RXJyb3IgPSB1bmRlZmluZWQ7IH1cbiAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tJc1BhZ2VIYXNFcnJvcnModGhpcy5hY3RpdmVQYWdlLCBpc0ZvY3VzZU9uRmlyc3RFcnJvcik7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuY2hlY2tJc1BhZ2VIYXNFcnJvcnMgPSBmdW5jdGlvbiAocGFnZSwgaXNGb2N1c2VPbkZpcnN0RXJyb3IpIHtcbiAgICAgICAgaWYgKGlzRm9jdXNlT25GaXJzdEVycm9yID09PSB2b2lkIDApIHsgaXNGb2N1c2VPbkZpcnN0RXJyb3IgPSB1bmRlZmluZWQ7IH1cbiAgICAgICAgaWYgKGlzRm9jdXNlT25GaXJzdEVycm9yID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGlzRm9jdXNlT25GaXJzdEVycm9yID0gdGhpcy5mb2N1c09uRmlyc3RFcnJvcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXBhZ2UpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgdmFyIHJlcyA9ICFwYWdlLnZhbGlkYXRlKHRydWUsIGlzRm9jdXNlT25GaXJzdEVycm9yKTtcbiAgICAgICAgdGhpcy5maXJlVmFsaWRhdGVkRXJyb3JzT25QYWdlKHBhZ2UpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLmZpcmVWYWxpZGF0ZWRFcnJvcnNPblBhZ2UgPSBmdW5jdGlvbiAocGFnZSkge1xuICAgICAgICBpZiAodGhpcy5vblZhbGlkYXRlZEVycm9yc09uQ3VycmVudFBhZ2UuaXNFbXB0eSB8fCAhcGFnZSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIHF1ZXN0aW9uc09uUGFnZSA9IHBhZ2UucXVlc3Rpb25zO1xuICAgICAgICB2YXIgcXVlc3Rpb25zID0gbmV3IEFycmF5KCk7XG4gICAgICAgIHZhciBlcnJvcnMgPSBuZXcgQXJyYXkoKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnNPblBhZ2UubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBxID0gcXVlc3Rpb25zT25QYWdlW2ldO1xuICAgICAgICAgICAgaWYgKHEuZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBxdWVzdGlvbnMucHVzaChxKTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHEuZXJyb3JzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKHEuZXJyb3JzW2pdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vblZhbGlkYXRlZEVycm9yc09uQ3VycmVudFBhZ2UuZmlyZSh0aGlzLCB7XG4gICAgICAgICAgICBxdWVzdGlvbnM6IHF1ZXN0aW9ucyxcbiAgICAgICAgICAgIGVycm9yczogZXJyb3JzLFxuICAgICAgICAgICAgcGFnZTogcGFnZSxcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBTd2l0Y2hlcyB0aGUgc3VydmV5IHRvIHRoZSBwcmV2aW91cyBwYWdlLlxuICAgICAqXG4gICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIEJvb2xlYW4gdmFsdWUgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgcGFnZSB3YXMgc3VjY2Vzc2Z1bGx5IHN3aXRjaGVkLiBgZmFsc2VgIGlzIHJldHVybmVkIGlmIHRoZSBjdXJyZW50IHBhZ2UgaXMgdGhlIGZpcnN0IHBhZ2UuXG4gICAgICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBwYWdlIHdhcyBzdWNjZXNzZnVsbHkgc3dpdGNoZWQ7IGBmYWxzZWAgb3RoZXJ3aXNlLlxuICAgICAqIEBzZWUgaXNGaXJzdFBhZ2VcbiAgICAgKiBAc2VlIG5leHRQYWdlXG4gICAgICovXG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLnByZXZQYWdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBpZiAodGhpcy5pc0ZpcnN0UGFnZSB8fCB0aGlzLnN0YXRlID09PSBcInN0YXJ0aW5nXCIpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHRoaXMucmVzZXROYXZpZ2F0aW9uQnV0dG9uKCk7XG4gICAgICAgIHZhciBza2lwcGVkID0gdGhpcy5za2lwcGVkUGFnZXMuZmluZChmdW5jdGlvbiAoc3ApIHsgcmV0dXJuIHNwLnRvID09IF90aGlzLmN1cnJlbnRQYWdlOyB9KTtcbiAgICAgICAgaWYgKHNraXBwZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSBza2lwcGVkLmZyb207XG4gICAgICAgICAgICB0aGlzLnNraXBwZWRQYWdlcy5zcGxpY2UodGhpcy5za2lwcGVkUGFnZXMuaW5kZXhPZihza2lwcGVkKSwgMSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgdlBhZ2VzID0gdGhpcy52aXNpYmxlUGFnZXM7XG4gICAgICAgICAgICB2YXIgaW5kZXggPSB2UGFnZXMuaW5kZXhPZih0aGlzLmN1cnJlbnRQYWdlKTtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB2UGFnZXNbaW5kZXggLSAxXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIENvbXBsZXRlcyB0aGUgc3VydmV5IGlmIGl0IGN1cnJlbnRseSBkaXNwbGF5cyB0aGUgbGFzdCBwYWdlIGFuZCB0aGUgcGFnZSBjb250YWlucyBubyB2YWxpZGF0aW9uIGVycm9ycy4gSWYgYm90aCB0aGVzZSBjb25kaXRpb25zIGFyZSBtZXQsIHRoaXMgbWV0aG9kIHJldHVybnMgYHRydWVgOyBvdGhlcndpc2UsIGBmYWxzZWAuXG4gICAgICpcbiAgICAgKiBJZiB5b3Ugd2FudCB0byBjb21wbGV0ZSB0aGUgc3VydmV5IHJlZ2FyZGxlc3Mgb2YgdGhlIGN1cnJlbnQgcGFnZSBhbmQgdmFsaWRhdGlvbiBlcnJvcnMsIHVzZSB0aGUgW2Bkb0NvbXBsZXRlKClgXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2Uvc3VydmV5LWRhdGEtbW9kZWwjY29tcGxldGVMYXN0UGFnZSkgZXZlbnQuXG4gICAgICogQHNlZSBpc0N1cnJlbnRQYWdlVmFsaWRcbiAgICAgKiBAc2VlIG5leHRQYWdlXG4gICAgICovXG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLmNvbXBsZXRlTGFzdFBhZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzVmFsaWRhdGVPbkNvbXBsZXRlKSB7XG4gICAgICAgICAgICB0aGlzLmNhbmNlbFByZXZpZXcoKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcmVzID0gdGhpcy5kb0N1cnJlbnRQYWdlQ29tcGxldGUodHJ1ZSk7XG4gICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAgIHRoaXMuY2FuY2VsUHJldmlldygpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUubmF2aWdhdGlvbk1vdXNlRG93biA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5pc05hdmlnYXRpb25CdXR0b25QcmVzc2VkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUucmVzZXROYXZpZ2F0aW9uQnV0dG9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmlzTmF2aWdhdGlvbkJ1dHRvblByZXNzZWQgPSBmYWxzZTtcbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5uZXh0UGFnZVVJQ2xpY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghIXRoaXMubW91c2VEb3duUGFnZSAmJiB0aGlzLm1vdXNlRG93blBhZ2UgIT09IHRoaXMuYWN0aXZlUGFnZSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5tb3VzZURvd25QYWdlID0gbnVsbDtcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dFBhZ2UoKTtcbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5uZXh0UGFnZU1vdXNlRG93biA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5tb3VzZURvd25QYWdlID0gdGhpcy5hY3RpdmVQYWdlO1xuICAgICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0aW9uTW91c2VEb3duKCk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBEaXNwbGF5cyBhIFtwcmV2aWV3IG9mIGdpdmVuIGFuc3dlcnNdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vZGVzaWduLXN1cnZleS9jcmVhdGUtYS1tdWx0aS1wYWdlLXN1cnZleSNwcmV2aWV3LXBhZ2UpLiBSZXR1cm5zIGBmYWxzZWAgaWYgdGhlIHByZXZpZXcgY2Fubm90IGJlIGRpc3BsYXllZCBiZWNhdXNlIG9mIHZhbGlkYXRpb24gZXJyb3JzLlxuICAgICAqIEBzZWUgY2FuY2VsUHJldmlld1xuICAgICAqIEBzZWUgc2hvd1ByZXZpZXdCZWZvcmVDb21wbGV0ZVxuICAgICAqIEBzZWUgb25TaG93aW5nUHJldmlld1xuICAgICAqIEBzZWUgc3RhdGVcbiAgICAgKi9cbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuc2hvd1ByZXZpZXcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMucmVzZXROYXZpZ2F0aW9uQnV0dG9uKCk7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkYXRlT25Db21wbGV0ZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaGFzRXJyb3JzT25OYXZpZ2F0ZSh0cnVlKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBpZiAodGhpcy5kb1NlcnZlclZhbGlkYXRpb24odHJ1ZSwgdHJ1ZSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2hvd1ByZXZpZXdDb3JlKCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLnNob3dQcmV2aWV3Q29yZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG9wdGlvbnMgPSB7IGFsbG93U2hvd1ByZXZpZXc6IHRydWUsIGFsbG93OiB0cnVlIH07XG4gICAgICAgIHRoaXMub25TaG93aW5nUHJldmlldy5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICAgICAgICB0aGlzLmlzU2hvd2luZ1ByZXZpZXcgPSBvcHRpb25zLmFsbG93U2hvd1ByZXZpZXcgJiYgb3B0aW9ucy5hbGxvdztcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIENhbmNlbHMgYSBbcHJldmlldyBvZiBnaXZlbiBhbnN3ZXJzXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2Rlc2lnbi1zdXJ2ZXkvY3JlYXRlLWEtbXVsdGktcGFnZS1zdXJ2ZXkjcHJldmlldy1wYWdlKSBhbmQgc3dpdGNoZXMgdGhlIHN1cnZleSB0byB0aGUgcGFnZSBzcGVjaWZpZWQgYnkgdGhlIGBjdXJyZW50UGFnZWAgcGFyYW1ldGVyLlxuICAgICAqIEBwYXJhbSBjdXJyZW50UGFnZSBBIG5ldyBjdXJyZW50IHBhZ2UuIElmIHlvdSBkbyBub3Qgc3BlY2lmeSB0aGlzIHBhcmFtZXRlciwgdGhlIHN1cnZleSBkaXNwbGF5cyB0aGUgbGFzdCBwYWdlLlxuICAgICAqIEBzZWUgc2hvd1ByZXZpZXdcbiAgICAgKiBAc2VlIHNob3dQcmV2aWV3QmVmb3JlQ29tcGxldGVcbiAgICAgKiBAc2VlIHN0YXRlXG4gICAgICovXG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLmNhbmNlbFByZXZpZXcgPSBmdW5jdGlvbiAoY3VycmVudFBhZ2UpIHtcbiAgICAgICAgaWYgKGN1cnJlbnRQYWdlID09PSB2b2lkIDApIHsgY3VycmVudFBhZ2UgPSBudWxsOyB9XG4gICAgICAgIGlmICghdGhpcy5pc1Nob3dpbmdQcmV2aWV3KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLmdvdG9QYWdlRnJvbVByZXZpZXcgPSBjdXJyZW50UGFnZTtcbiAgICAgICAgdGhpcy5pc1Nob3dpbmdQcmV2aWV3ID0gZmFsc2U7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuY2FuY2VsUHJldmlld0J5UGFnZSA9IGZ1bmN0aW9uIChwYW5lbCkge1xuICAgICAgICB0aGlzLmNhbmNlbFByZXZpZXcocGFuZWxbXCJvcmlnaW5hbFBhZ2VcIl0pO1xuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLmRvQ3VycmVudFBhZ2VDb21wbGV0ZSA9IGZ1bmN0aW9uIChkb0NvbXBsZXRlKSB7XG4gICAgICAgIGlmICh0aGlzLmlzVmFsaWRhdGluZ09uU2VydmVyKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB0aGlzLnJlc2V0TmF2aWdhdGlvbkJ1dHRvbigpO1xuICAgICAgICBpZiAodGhpcy5oYXNFcnJvcnNPbk5hdmlnYXRlKGRvQ29tcGxldGUpKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gdGhpcy5kb0N1cnJlbnRQYWdlQ29tcGxldGVDb3JlKGRvQ29tcGxldGUpO1xuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLmRvQ3VycmVudFBhZ2VDb21wbGV0ZUNvcmUgPSBmdW5jdGlvbiAoZG9Db21wbGV0ZSkge1xuICAgICAgICBpZiAodGhpcy5kb1NlcnZlclZhbGlkYXRpb24oZG9Db21wbGV0ZSkpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmIChkb0NvbXBsZXRlKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlLnBhc3NlZCA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kb0NvbXBsZXRlKHRoaXMuY2FuQmVDb21wbGV0ZWRCeVRyaWdnZXIsIHRoaXMuY29tcGxldGVkVHJpZ2dlcik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kb05leHRQYWdlKCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleU1vZGVsLnByb3RvdHlwZSwgXCJpc1NpbmdsZVBhZ2VcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uc09uUGFnZU1vZGUgPT0gXCJzaW5nbGVQYWdlXCI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5xdWVzdGlvbnNPblBhZ2VNb2RlID0gdmFsID8gXCJzaW5nbGVQYWdlXCIgOiBcInN0YW5kYXJkXCI7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5TW9kZWwucHJvdG90eXBlLCBcInF1ZXN0aW9uc09uUGFnZU1vZGVcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIGhvdyB0byBkaXN0cmlidXRlIHN1cnZleSBlbGVtZW50cyBiZXR3ZWVuIHBhZ2VzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBQb3NzaWJsZSB2YWx1ZXM6XG4gICAgICAgICAqXG4gICAgICAgICAqIC0gYFwic2luZ2xlUGFnZVwiYCAtIENvbWJpbmVzIGFsbCBzdXJ2ZXkgcGFnZXMgaW50byBhIHNpbmdsZSBwYWdlLlxuICAgICAgICAgKiAtIGBcInF1ZXN0aW9uUGVyUGFnZVwiYCAtIENyZWF0ZXMgYSBzZXBhcmF0ZSBwYWdlIGZvciBldmVyeSBxdWVzdGlvbi5cbiAgICAgICAgICogLSBgXCJzdGFuZGFyZFwiYCAoZGVmYXVsdCkgLSBSZXRhaW5zIHRoZSBvcmlnaW5hbCBzdHJ1Y3R1cmUgc3BlY2lmaWVkIGluIHRoZSBKU09OIHNjaGVtYS5cbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInF1ZXN0aW9uc09uUGFnZU1vZGVcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicXVlc3Rpb25zT25QYWdlTW9kZVwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleU1vZGVsLnByb3RvdHlwZSwgXCJmaXJzdFBhZ2VJc1N0YXJ0ZWRcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogR2V0cyBvciBzZXRzIGEgQm9vbGVhbiB2YWx1ZSB0aGF0IHNwZWNpZmllcyB3aGV0aGVyIHRoZSBmaXJzdCBwYWdlIGlzIGEgc3RhcnQgcGFnZS5cbiAgICAgICAgICpcbiAgICAgICAgICogUmVmZXIgdG8gdGhlIGZvbGxvd2luZyBoZWxwIHRvcGljIGZvciBtb3JlIGluZm9ybWF0aW9uOiBbU3RhcnQgUGFnZV0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9kZXNpZ24tc3VydmV5L2NyZWF0ZS1hLW11bHRpLXBhZ2Utc3VydmV5I3N0YXJ0LXBhZ2UpLlxuICAgICAgICAgKiBAc2VlIHN0YXJ0ZWRQYWdlXG4gICAgICAgICAqIEBzZWUgYWN0aXZlUGFnZVxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiZmlyc3RQYWdlSXNTdGFydGVkXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImZpcnN0UGFnZUlzU3RhcnRlZFwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLmlzUGFnZVN0YXJ0ZWQgPSBmdW5jdGlvbiAocGFnZSkge1xuICAgICAgICByZXR1cm4gKHRoaXMuZmlyc3RQYWdlSXNTdGFydGVkICYmIHRoaXMucGFnZXMubGVuZ3RoID4gMSAmJiB0aGlzLnBhZ2VzWzBdID09PSBwYWdlKTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwic2hvd1ByZXZpZXdCZWZvcmVDb21wbGV0ZVwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBbGxvd3MgcmVzcG9uZGVudHMgdG8gcHJldmlldyBhbnN3ZXJzIGJlZm9yZSB0aGV5IGFyZSBzdWJtaXR0ZWQuXG4gICAgICAgICAqXG4gICAgICAgICAqIFBvc3NpYmxlIHZhbHVlczpcbiAgICAgICAgICpcbiAgICAgICAgICogLSBgXCJzaG93QWxsUXVlc3Rpb25zXCJgIC0gRGlzcGxheXMgYWxsIHF1ZXN0aW9ucyBpbiB0aGUgcHJldmlldy5cbiAgICAgICAgICogLSBgXCJzaG93QW5zd2VyZWRRdWVzdGlvbnNcImAgLSBEaXNwbGF5cyBvbmx5IGFuc3dlcmVkIHF1ZXN0aW9ucyBpbiB0aGUgcHJldmlldy5cbiAgICAgICAgICogLSBgXCJub1ByZXZpZXdcImAgKGRlZmF1bHQpIC0gSGlkZXMgdGhlIHByZXZpZXcuXG4gICAgICAgICAqXG4gICAgICAgICAqIFtWaWV3IERlbW9dKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2V4YW1wbGVzL3N1cnZleS1zaG93cHJldmlldy8gKGxpbmtTdHlsZSkpXG4gICAgICAgICAqIEBzZWUgc2hvd1ByZXZpZXdcbiAgICAgICAgICogQHNlZSBjYW5jZWxQcmV2aWV3XG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzaG93UHJldmlld0JlZm9yZUNvbXBsZXRlXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInNob3dQcmV2aWV3QmVmb3JlQ29tcGxldGVcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwiaXNTaG93UHJldmlld0JlZm9yZUNvbXBsZXRlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgcHJldmlldyA9IHRoaXMuc2hvd1ByZXZpZXdCZWZvcmVDb21wbGV0ZTtcbiAgICAgICAgICAgIHJldHVybiBwcmV2aWV3ID09IFwic2hvd0FsbFF1ZXN0aW9uc1wiIHx8IHByZXZpZXcgPT0gXCJzaG93QW5zd2VyZWRRdWVzdGlvbnNcIjtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5vbkZpcnN0UGFnZUlzU3RhcnRlZENoYW5nZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuaXNTdGFydGVkU3RhdGUgPSB0aGlzLmZpcnN0UGFnZUlzU3RhcnRlZCAmJiB0aGlzLnBhZ2VzLmxlbmd0aCA+IDE7XG4gICAgICAgIHRoaXMucGFnZVZpc2liaWxpdHlDaGFuZ2VkKHRoaXMucGFnZXNbMF0sICF0aGlzLmlzU3RhcnRlZFN0YXRlKTtcbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5vblNob3dpbmdQcmV2aWV3Q2hhbmdlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNEZXNpZ25Nb2RlKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAodGhpcy5pc1Nob3dpbmdQcmV2aWV3KSB7XG4gICAgICAgICAgICB0aGlzLnJ1bm5pbmdQYWdlcyA9IHRoaXMucGFnZXMuc2xpY2UoMCwgdGhpcy5wYWdlcy5sZW5ndGgpO1xuICAgICAgICAgICAgdGhpcy5zZXR1cFBhZ2VzRm9yUGFnZU1vZGVzKHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMucnVubmluZ1BhZ2VzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXN0b3JlT3JpZ2lvbmFsUGFnZXModGhpcy5ydW5uaW5nUGFnZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5ydW5uaW5nUGFnZXMgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ydW5Db25kaXRpb25zKCk7XG4gICAgICAgIHRoaXMudXBkYXRlQWxsRWxlbWVudHNWaXNpYmlsaXR5KHRoaXMucGFnZXMpO1xuICAgICAgICB0aGlzLnVwZGF0ZVZpc2libGVJbmRleGVzKCk7XG4gICAgICAgIGlmICh0aGlzLmlzU2hvd2luZ1ByZXZpZXcpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2VObyA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgY3VyUGFnZSA9IHRoaXMuZ290b1BhZ2VGcm9tUHJldmlldztcbiAgICAgICAgICAgIHRoaXMuZ290b1BhZ2VGcm9tUHJldmlldyA9IG51bGw7XG4gICAgICAgICAgICBpZiAoX2hlbHBlcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkhlbHBlcnNcIl0uaXNWYWx1ZUVtcHR5KGN1clBhZ2UpICYmIHRoaXMudmlzaWJsZVBhZ2VDb3VudCA+IDApIHtcbiAgICAgICAgICAgICAgICBjdXJQYWdlID0gdGhpcy52aXNpYmxlUGFnZXNbdGhpcy52aXNpYmxlUGFnZUNvdW50IC0gMV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoISFjdXJQYWdlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VDdXJyZW50UGFnZUZyb21QcmV2aWV3ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gY3VyUGFnZTtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZUN1cnJlbnRQYWdlRnJvbVByZXZpZXcgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLm9uUXVlc3Rpb25zT25QYWdlTW9kZUNoYW5nZWQgPSBmdW5jdGlvbiAob2xkVmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNTaG93aW5nUHJldmlldylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKHRoaXMucXVlc3Rpb25zT25QYWdlTW9kZSA9PSBcInN0YW5kYXJkXCIgfHwgdGhpcy5pc0Rlc2lnbk1vZGUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm9yaWdpb25hbFBhZ2VzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXN0b3JlT3JpZ2lvbmFsUGFnZXModGhpcy5vcmlnaW9uYWxQYWdlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm9yaWdpb25hbFBhZ2VzID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFvbGRWYWx1ZSB8fCBvbGRWYWx1ZSA9PSBcInN0YW5kYXJkXCIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9yaWdpb25hbFBhZ2VzID0gdGhpcy5wYWdlcy5zbGljZSgwLCB0aGlzLnBhZ2VzLmxlbmd0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNldHVwUGFnZXNGb3JQYWdlTW9kZXModGhpcy5pc1NpbmdsZVBhZ2UpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucnVuQ29uZGl0aW9ucygpO1xuICAgICAgICB0aGlzLnVwZGF0ZVZpc2libGVJbmRleGVzKCk7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUucmVzdG9yZU9yaWdpb25hbFBhZ2VzID0gZnVuY3Rpb24gKG9yaWdpbmFsUGFnZXMpIHtcbiAgICAgICAgdGhpcy5xdWVzdGlvbkhhc2hlc0NsZWFyKCk7XG4gICAgICAgIHRoaXMucGFnZXMuc3BsaWNlKDAsIHRoaXMucGFnZXMubGVuZ3RoKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvcmlnaW5hbFBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLnBhZ2VzLnB1c2gob3JpZ2luYWxQYWdlc1tpXSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5nZXRQYWdlU3RhcnRJbmRleCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmlyc3RQYWdlSXNTdGFydGVkICYmIHRoaXMucGFnZXMubGVuZ3RoID4gMCA/IDEgOiAwO1xuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLnNldHVwUGFnZXNGb3JQYWdlTW9kZXMgPSBmdW5jdGlvbiAoaXNTaW5nbGVQYWdlKSB7XG4gICAgICAgIHRoaXMucXVlc3Rpb25IYXNoZXNDbGVhcigpO1xuICAgICAgICB2YXIgc3RhcnRJbmRleCA9IHRoaXMuZ2V0UGFnZVN0YXJ0SW5kZXgoKTtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5zdGFydExvYWRpbmdGcm9tSnNvbi5jYWxsKHRoaXMpO1xuICAgICAgICB2YXIgbmV3UGFnZXMgPSB0aGlzLmNyZWF0ZVBhZ2VzRm9yUXVlc3Rpb25PblBhZ2VNb2RlKGlzU2luZ2xlUGFnZSwgc3RhcnRJbmRleCk7XG4gICAgICAgIHZhciBkZWxldGVkTGVuID0gdGhpcy5wYWdlcy5sZW5ndGggLSBzdGFydEluZGV4O1xuICAgICAgICB0aGlzLnBhZ2VzLnNwbGljZShzdGFydEluZGV4LCBkZWxldGVkTGVuKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuZXdQYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5wYWdlcy5wdXNoKG5ld1BhZ2VzW2ldKTtcbiAgICAgICAgfVxuICAgICAgICBfc3VwZXIucHJvdG90eXBlLmVuZExvYWRpbmdGcm9tSnNvbi5jYWxsKHRoaXMpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5ld1BhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBuZXdQYWdlc1tpXS5zZXRTdXJ2ZXlJbXBsKHRoaXMsIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZG9FbGVtZW50c09uTG9hZCgpO1xuICAgICAgICB0aGlzLnVwZGF0ZUN1cnJlbnRQYWdlKCk7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuY3JlYXRlUGFnZXNGb3JRdWVzdGlvbk9uUGFnZU1vZGUgPSBmdW5jdGlvbiAoaXNTaW5nbGVQYWdlLCBzdGFydEluZGV4KSB7XG4gICAgICAgIGlmIChpc1NpbmdsZVBhZ2UpIHtcbiAgICAgICAgICAgIHJldHVybiBbdGhpcy5jcmVhdGVTaW5nbGVQYWdlKHN0YXJ0SW5kZXgpXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVQYWdlc0ZvckV2ZXJ5UXVlc3Rpb24oc3RhcnRJbmRleCk7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuY3JlYXRlU2luZ2xlUGFnZSA9IGZ1bmN0aW9uIChzdGFydEluZGV4KSB7XG4gICAgICAgIHZhciBzaW5nbGUgPSB0aGlzLmNyZWF0ZU5ld1BhZ2UoXCJhbGxcIik7XG4gICAgICAgIHNpbmdsZS5zZXRTdXJ2ZXlJbXBsKHRoaXMpO1xuICAgICAgICBmb3IgKHZhciBpID0gc3RhcnRJbmRleDsgaSA8IHRoaXMucGFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBwYWdlID0gdGhpcy5wYWdlc1tpXTtcbiAgICAgICAgICAgIHZhciBwYW5lbCA9IF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJTZXJpYWxpemVyXCJdLmNyZWF0ZUNsYXNzKFwicGFuZWxcIik7XG4gICAgICAgICAgICBwYW5lbC5vcmlnaW5hbFBhZ2UgPSBwYWdlO1xuICAgICAgICAgICAgc2luZ2xlLmFkZFBhbmVsKHBhbmVsKTtcbiAgICAgICAgICAgIHZhciBqc29uID0gbmV3IF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJKc29uT2JqZWN0XCJdKCkudG9Kc29uT2JqZWN0KHBhZ2UpO1xuICAgICAgICAgICAgbmV3IF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJKc29uT2JqZWN0XCJdKCkudG9PYmplY3QoanNvbiwgcGFuZWwpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLnNob3dQYWdlVGl0bGVzKSB7XG4gICAgICAgICAgICAgICAgcGFuZWwudGl0bGUgPSBcIlwiO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzaW5nbGU7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuY3JlYXRlUGFnZXNGb3JFdmVyeVF1ZXN0aW9uID0gZnVuY3Rpb24gKHN0YXJ0SW5kZXgpIHtcbiAgICAgICAgdmFyIHJlcyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gc3RhcnRJbmRleDsgaSA8IHRoaXMucGFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBvcmlnaW5hbFBhZ2UgPSB0aGlzLnBhZ2VzW2ldO1xuICAgICAgICAgICAgLy8gSW5pdGlhbGl6ZSByYW5kb21pemF0aW9uXG4gICAgICAgICAgICBvcmlnaW5hbFBhZ2Uuc2V0V2FzU2hvd24odHJ1ZSk7XG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG9yaWdpbmFsUGFnZS5lbGVtZW50cy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIHZhciBvcmlnaW5hbEVsZW1lbnQgPSBvcmlnaW5hbFBhZ2UuZWxlbWVudHNbal07XG4gICAgICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSBfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiU2VyaWFsaXplclwiXS5jcmVhdGVDbGFzcyhvcmlnaW5hbEVsZW1lbnQuZ2V0VHlwZSgpKTtcbiAgICAgICAgICAgICAgICBpZiAoIWVsZW1lbnQpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIHZhciBqc29uT2JqID0gbmV3IF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJKc29uT2JqZWN0XCJdKCk7XG4gICAgICAgICAgICAgICAgLy9EZXNlcmlhbGl6ZSBwYWdlIHByb3BlcnRpZXMgb25seSwgZXhjbHVkaW5nIGVsZW1lbnRzXG4gICAgICAgICAgICAgICAganNvbk9iai5saWdodFNlcmlhbGl6aW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB2YXIgcGFnZUpzb24gPSBqc29uT2JqLnRvSnNvbk9iamVjdChvcmlnaW5hbFBhZ2UpO1xuICAgICAgICAgICAgICAgIHZhciBwYWdlID0gX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlNlcmlhbGl6ZXJcIl0uY3JlYXRlQ2xhc3Mob3JpZ2luYWxQYWdlLmdldFR5cGUoKSk7XG4gICAgICAgICAgICAgICAgcGFnZS5mcm9tSlNPTihwYWdlSnNvbik7XG4gICAgICAgICAgICAgICAgcGFnZS5uYW1lID0gb3JpZ2luYWxFbGVtZW50Lm5hbWU7XG4gICAgICAgICAgICAgICAgcGFnZS5zZXRTdXJ2ZXlJbXBsKHRoaXMpO1xuICAgICAgICAgICAgICAgIHJlcy5wdXNoKHBhZ2UpO1xuICAgICAgICAgICAgICAgIHZhciBqc29uID0gbmV3IF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJKc29uT2JqZWN0XCJdKCkudG9Kc29uT2JqZWN0KG9yaWdpbmFsRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgcGFnZS5hZGRFbGVtZW50KGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIG5ldyBfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiSnNvbk9iamVjdFwiXSgpLnRvT2JqZWN0KGpzb24sIGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgcGFnZS5xdWVzdGlvbnMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbkhhc2hlc0FkZGVkKHBhZ2UucXVlc3Rpb25zW2tdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwiaXNGaXJzdFBhZ2VcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIFtjdXJyZW50IHBhZ2VdKCNjdXJyZW50UGFnZSkgaXMgdGhlIGZpcnN0IHBhZ2UuXG4gICAgICAgICAqXG4gICAgICAgICAqID4gSWYgdGhlIHN1cnZleSBkaXNwbGF5cyB0aGUgW3N0YXJ0IHBhZ2VdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vZGVzaWduLXN1cnZleS9jcmVhdGUtYS1tdWx0aS1wYWdlLXN1cnZleSNzdGFydC1wYWdlKSwgdGhpcyBwcm9wZXJ0eSBjb250YWlucyBgZmFsc2VgLiBVc2UgdGhlIFtgaXNTaG93U3RhcnRpbmdQYWdlYF0oI2lzU2hvd1N0YXJ0aW5nUGFnZSkgcHJvcGVydHkgdG8gZmluZCBvdXQgd2hldGhlciB0aGUgc3RhcnQgcGFnZSBpcyBjdXJyZW50bHkgZGlzcGxheWVkLlxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaXNGaXJzdFBhZ2VcIik7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5TW9kZWwucHJvdG90eXBlLCBcImlzTGFzdFBhZ2VcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIFtjdXJyZW50IHBhZ2VdKCNjdXJyZW50UGFnZSkgaXMgdGhlIGxhc3QgcGFnZS5cbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImlzTGFzdFBhZ2VcIik7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUudXBkYXRlQnV0dG9uc1Zpc2liaWxpdHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMudXBkYXRlSXNGaXJzdExhc3RQYWdlU3RhdGUoKTtcbiAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaXNTaG93UHJldkJ1dHRvblwiLCB0aGlzLmNhbGNJc1Nob3dQcmV2QnV0dG9uKCkpO1xuICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpc1Nob3dOZXh0QnV0dG9uXCIsIHRoaXMuY2FsY0lzU2hvd05leHRCdXR0b24oKSk7XG4gICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImlzQ29tcGxldGVCdXR0b25WaXNpYmxlXCIsIHRoaXMuY2FsY0lzQ29tcGxldGVCdXR0b25WaXNpYmxlKCkpO1xuICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpc1ByZXZpZXdCdXR0b25WaXNpYmxlXCIsIHRoaXMuY2FsY0lzUHJldmlld0J1dHRvblZpc2libGUoKSk7XG4gICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImlzQ2FuY2VsUHJldmlld0J1dHRvblZpc2libGVcIiwgdGhpcy5jYWxjSXNDYW5jZWxQcmV2aWV3QnV0dG9uVmlzaWJsZSgpKTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwiaXNTaG93UHJldkJ1dHRvblwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImlzU2hvd1ByZXZCdXR0b25cIik7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5TW9kZWwucHJvdG90eXBlLCBcImlzU2hvd05leHRCdXR0b25cIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpc1Nob3dOZXh0QnV0dG9uXCIpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleU1vZGVsLnByb3RvdHlwZSwgXCJpc0NvbXBsZXRlQnV0dG9uVmlzaWJsZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImlzQ29tcGxldGVCdXR0b25WaXNpYmxlXCIpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleU1vZGVsLnByb3RvdHlwZSwgXCJpc1ByZXZpZXdCdXR0b25WaXNpYmxlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaXNQcmV2aWV3QnV0dG9uVmlzaWJsZVwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwiaXNDYW5jZWxQcmV2aWV3QnV0dG9uVmlzaWJsZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImlzQ2FuY2VsUHJldmlld0J1dHRvblZpc2libGVcIik7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUudXBkYXRlSXNGaXJzdExhc3RQYWdlU3RhdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBjdXJQYWdlID0gdGhpcy5jdXJyZW50UGFnZTtcbiAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaXNGaXJzdFBhZ2VcIiwgISFjdXJQYWdlICYmIGN1clBhZ2UgPT09IHRoaXMuZmlyc3RWaXNpYmxlUGFnZSk7XG4gICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImlzTGFzdFBhZ2VcIiwgISFjdXJQYWdlICYmIGN1clBhZ2UgPT09IHRoaXMubGFzdFZpc2libGVQYWdlKTtcbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5jYWxjSXNTaG93UHJldkJ1dHRvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNGaXJzdFBhZ2UgfHwgIXRoaXMuc2hvd1ByZXZCdXR0b24gfHwgdGhpcy5zdGF0ZSAhPT0gXCJydW5uaW5nXCIpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHZhciBwYWdlID0gdGhpcy52aXNpYmxlUGFnZXNbdGhpcy5jdXJyZW50UGFnZU5vIC0gMV07XG4gICAgICAgIHJldHVybiB0aGlzLmdldFBhZ2VNYXhUaW1lVG9GaW5pc2gocGFnZSkgPD0gMDtcbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5jYWxjSXNTaG93TmV4dEJ1dHRvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGUgPT09IFwicnVubmluZ1wiICYmICF0aGlzLmlzTGFzdFBhZ2UgJiYgIXRoaXMuY2FuQmVDb21wbGV0ZWRCeVRyaWdnZXI7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuY2FsY0lzQ29tcGxldGVCdXR0b25WaXNpYmxlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgc3RhdGUgPSB0aGlzLnN0YXRlO1xuICAgICAgICByZXR1cm4gdGhpcy5pc0VkaXRNb2RlICYmICh0aGlzLnN0YXRlID09PSBcInJ1bm5pbmdcIiAmJlxuICAgICAgICAgICAgKHRoaXMuaXNMYXN0UGFnZSAmJiAhdGhpcy5pc1Nob3dQcmV2aWV3QmVmb3JlQ29tcGxldGUgfHwgdGhpcy5jYW5CZUNvbXBsZXRlZEJ5VHJpZ2dlcilcbiAgICAgICAgICAgIHx8IHN0YXRlID09PSBcInByZXZpZXdcIik7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuY2FsY0lzUHJldmlld0J1dHRvblZpc2libGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5pc0VkaXRNb2RlICYmXG4gICAgICAgICAgICB0aGlzLmlzU2hvd1ByZXZpZXdCZWZvcmVDb21wbGV0ZSAmJlxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9PSBcInJ1bm5pbmdcIiAmJiB0aGlzLmlzTGFzdFBhZ2UpO1xuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLmNhbGNJc0NhbmNlbFByZXZpZXdCdXR0b25WaXNpYmxlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuaXNFZGl0TW9kZSAmJlxuICAgICAgICAgICAgdGhpcy5pc1Nob3dQcmV2aWV3QmVmb3JlQ29tcGxldGUgJiZcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPT0gXCJwcmV2aWV3XCIpO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleU1vZGVsLnByb3RvdHlwZSwgXCJmaXJzdFZpc2libGVQYWdlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgcGFnZXMgPSB0aGlzLnBhZ2VzO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzUGFnZUluVmlzaWJsZUxpc3QocGFnZXNbaV0pKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFnZXNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwibGFzdFZpc2libGVQYWdlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgcGFnZXMgPSB0aGlzLnBhZ2VzO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IHBhZ2VzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNQYWdlSW5WaXNpYmxlTGlzdChwYWdlc1tpXSkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwYWdlc1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgLyoqXG4gICAgICogQ29tcGxldGVzIHRoZSBzdXJ2ZXkuXG4gICAgICpcbiAgICAgKiBXaGVuIHlvdSBjYWxsIHRoaXMgbWV0aG9kLCBGb3JtIExpYnJhcnkgcGVyZm9ybXMgdGhlIGZvbGxvd2luZyBhY3Rpb25zOlxuICAgICAqXG4gICAgICogMS4gU2F2ZXMgYSBjb29raWUgaWYgdGhlIFtgY29va2llTmFtZWBdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vYXBpLXJlZmVyZW5jZS9zdXJ2ZXktZGF0YS1tb2RlbCNjb29raWVOYW1lKSBwcm9wZXJ0eSBpcyBzZXQuXG4gICAgICogMS4gU3dpdGNoZXMgdGhlIHN1cnZleSBbYHN0YXRlYF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL3N1cnZleS1kYXRhLW1vZGVsI3N0YXRlKSB0byBgXCJjb21wbGV0ZWRcImAuXG4gICAgICogMS4gUmFpc2VzIHRoZSBbYG9uQ29tcGxldGVgXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2Uvc3VydmV5LWRhdGEtbW9kZWwjb25Db21wbGV0ZSkgZXZlbnQuXG4gICAgICogMS4gTmF2aWdhdGVzIHRoZSB1c2VyIHRvIGEgVVJMIHNwZWNpZmllZCBieSB0aGUgW2BuYXZpZ2F0ZVRvVXJsYF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL3N1cnZleS1kYXRhLW1vZGVsI25hdmlnYXRlVG9VcmwpIG9yIFtgbmF2aWdhdGVUb1VybE9uQ29uZGl0aW9uYF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL3N1cnZleS1kYXRhLW1vZGVsI25hdmlnYXRlVG9VcmxPbkNvbmRpdGlvbikgcHJvcGVydHkuXG4gICAgICogMS4gQ2FsbHMgdGhlIFtgc2VuZFJlc3VsdCgpYF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL3N1cnZleS1kYXRhLW1vZGVsI3NlbmRSZXN1bHQpIG1ldGhvZCBpZiBGb3JtIExpYnJhcnkgd29ya3Mgd2l0aCBbU3VydmV5SlMgU2VydmljZV0oaHR0cHM6Ly9hcGkuc3VydmV5anMuaW8vKS5cbiAgICAgKlxuICAgICAqIFRoZSBgZG9Db21wbGV0ZSgpYCBtZXRob2QgY29tcGxldGVzIHRoZSBzdXJ2ZXkgcmVnYXJkbGVzcyBvZiB2YWxpZGF0aW9uIGVycm9ycyBhbmQgdGhlIGN1cnJlbnQgcGFnZS4gSWYgeW91IG5lZWQgdG8gZW5zdXJlIHRoYXQgc3VydmV5IHJlc3VsdHMgYXJlIHZhbGlkIGFuZCBmdWxsLCBjYWxsIHRoZSBbYGNvbXBsZXRlTGFzdFBhZ2UoKWBdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vYXBpLXJlZmVyZW5jZS9zdXJ2ZXktZGF0YS1tb2RlbCNjb21wbGV0ZUxhc3RQYWdlKSBtZXRob2QgaW5zdGVhZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpc0NvbXBsZXRlT25UcmlnZ2VyIEZvciBpbnRlcm5hbCB1c2UuXG4gICAgICogQHBhcmFtIGNvbXBsZXRlVHJpZ2dlciBGb3IgaW50ZXJuYWwgdXNlLlxuICAgICAqIEByZXR1cm5zIGBmYWxzZWAgaWYgc3VydmV5IGNvbXBsZXRpb24gaXMgY2FuY2VsbGVkIHdpdGhpbiB0aGUgW2BvbkNvbXBsZXRpbmdgXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2Uvc3VydmV5LWRhdGEtbW9kZWwjb25Db21wbGV0aW5nKSBldmVudCBoYW5kbGVyOyBvdGhlcndpc2UsIGB0cnVlYC5cbiAgICAgKiBAc2VlIHN1cnZleVBvc3RJZFxuICAgICAqL1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5kb0NvbXBsZXRlID0gZnVuY3Rpb24gKGlzQ29tcGxldGVPblRyaWdnZXIsIGNvbXBsZXRlVHJpZ2dlcikge1xuICAgICAgICBpZiAoaXNDb21wbGV0ZU9uVHJpZ2dlciA9PT0gdm9pZCAwKSB7IGlzQ29tcGxldGVPblRyaWdnZXIgPSBmYWxzZTsgfVxuICAgICAgICBpZiAodGhpcy5pc0NvbXBsZXRlZClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKCF0aGlzLmNoZWNrT25Db21wbGV0aW5nRXZlbnQoaXNDb21wbGV0ZU9uVHJpZ2dlciwgY29tcGxldGVUcmlnZ2VyKSkge1xuICAgICAgICAgICAgdGhpcy5pc0NvbXBsZXRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hlY2tPblBhZ2VUcmlnZ2Vycyh0cnVlKTtcbiAgICAgICAgdGhpcy5zdG9wVGltZXIoKTtcbiAgICAgICAgdGhpcy5ub3RpZnlRdWVzdGlvbnNPbkhpZGluZ0NvbnRlbnQodGhpcy5jdXJyZW50UGFnZSk7XG4gICAgICAgIHRoaXMuaXNDb21wbGV0ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmNsZWFyVW51c2VkVmFsdWVzKCk7XG4gICAgICAgIHRoaXMuc2F2ZURhdGFPbkNvbXBsZXRlKGlzQ29tcGxldGVPblRyaWdnZXIsIGNvbXBsZXRlVHJpZ2dlcik7XG4gICAgICAgIHRoaXMuc2V0Q29va2llKCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLnNhdmVEYXRhT25Db21wbGV0ZSA9IGZ1bmN0aW9uIChpc0NvbXBsZXRlT25UcmlnZ2VyLCBjb21wbGV0ZVRyaWdnZXIpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgaWYgKGlzQ29tcGxldGVPblRyaWdnZXIgPT09IHZvaWQgMCkgeyBpc0NvbXBsZXRlT25UcmlnZ2VyID0gZmFsc2U7IH1cbiAgICAgICAgdmFyIHByZXZpb3VzQ29va2llID0gdGhpcy5oYXNDb29raWU7XG4gICAgICAgIHZhciBzaG93U2F2ZUluUHJvZ3Jlc3MgPSBmdW5jdGlvbiAodGV4dCkge1xuICAgICAgICAgICAgc2F2aW5nRGF0YVN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgX3RoaXMuc2V0Q29tcGxldGVkU3RhdGUoXCJzYXZpbmdcIiwgdGV4dCk7XG4gICAgICAgIH07XG4gICAgICAgIHZhciBzaG93U2F2ZUVycm9yID0gZnVuY3Rpb24gKHRleHQpIHtcbiAgICAgICAgICAgIF90aGlzLnNldENvbXBsZXRlZFN0YXRlKFwiZXJyb3JcIiwgdGV4dCk7XG4gICAgICAgIH07XG4gICAgICAgIHZhciBzaG93U2F2ZVN1Y2Nlc3MgPSBmdW5jdGlvbiAodGV4dCkge1xuICAgICAgICAgICAgX3RoaXMuc2V0Q29tcGxldGVkU3RhdGUoXCJzdWNjZXNzXCIsIHRleHQpO1xuICAgICAgICAgICAgX3RoaXMubmF2aWdhdGVUbygpO1xuICAgICAgICB9O1xuICAgICAgICB2YXIgY2xlYXJTYXZlTWVzc2FnZXMgPSBmdW5jdGlvbiAodGV4dCkge1xuICAgICAgICAgICAgX3RoaXMuc2V0Q29tcGxldGVkU3RhdGUoXCJcIiwgXCJcIik7XG4gICAgICAgIH07XG4gICAgICAgIHZhciBzYXZpbmdEYXRhU3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICB2YXIgb25Db21wbGV0ZU9wdGlvbnMgPSB7XG4gICAgICAgICAgICBpc0NvbXBsZXRlT25UcmlnZ2VyOiBpc0NvbXBsZXRlT25UcmlnZ2VyLFxuICAgICAgICAgICAgY29tcGxldGVUcmlnZ2VyOiBjb21wbGV0ZVRyaWdnZXIsXG4gICAgICAgICAgICBzaG93U2F2ZUluUHJvZ3Jlc3M6IHNob3dTYXZlSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgIHNob3dTYXZlRXJyb3I6IHNob3dTYXZlRXJyb3IsXG4gICAgICAgICAgICBzaG93U2F2ZVN1Y2Nlc3M6IHNob3dTYXZlU3VjY2VzcyxcbiAgICAgICAgICAgIGNsZWFyU2F2ZU1lc3NhZ2VzOiBjbGVhclNhdmVNZXNzYWdlcyxcbiAgICAgICAgICAgIC8vT2Jzb2xldGUgZnVuY3Rpb25zXG4gICAgICAgICAgICBzaG93RGF0YVNhdmluZzogc2hvd1NhdmVJblByb2dyZXNzLFxuICAgICAgICAgICAgc2hvd0RhdGFTYXZpbmdFcnJvcjogc2hvd1NhdmVFcnJvcixcbiAgICAgICAgICAgIHNob3dEYXRhU2F2aW5nU3VjY2Vzczogc2hvd1NhdmVTdWNjZXNzLFxuICAgICAgICAgICAgc2hvd0RhdGFTYXZpbmdDbGVhcjogY2xlYXJTYXZlTWVzc2FnZXNcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5vbkNvbXBsZXRlLmZpcmUodGhpcywgb25Db21wbGV0ZU9wdGlvbnMpO1xuICAgICAgICBpZiAoIXByZXZpb3VzQ29va2llICYmIHRoaXMuc3VydmV5UG9zdElkKSB7XG4gICAgICAgICAgICB0aGlzLnNlbmRSZXN1bHQoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXNhdmluZ0RhdGFTdGFydGVkKSB7XG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRlVG8oKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLmNoZWNrT25Db21wbGV0aW5nRXZlbnQgPSBmdW5jdGlvbiAoaXNDb21wbGV0ZU9uVHJpZ2dlciwgY29tcGxldGVUcmlnZ2VyKSB7XG4gICAgICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgICAgICAgYWxsb3dDb21wbGV0ZTogdHJ1ZSxcbiAgICAgICAgICAgIGFsbG93OiB0cnVlLFxuICAgICAgICAgICAgaXNDb21wbGV0ZU9uVHJpZ2dlcjogaXNDb21wbGV0ZU9uVHJpZ2dlcixcbiAgICAgICAgICAgIGNvbXBsZXRlVHJpZ2dlcjogY29tcGxldGVUcmlnZ2VyXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMub25Db21wbGV0aW5nLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBvcHRpb25zLmFsbG93Q29tcGxldGUgJiYgb3B0aW9ucy5hbGxvdztcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFN0YXJ0cyB0aGUgc3VydmV5LiBBcHBsaWVzIG9ubHkgaWYgdGhlIHN1cnZleSBoYXMgYSBbc3RhcnQgcGFnZV0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9kZXNpZ24tc3VydmV5L2NyZWF0ZS1hLW11bHRpLXBhZ2Utc3VydmV5I3N0YXJ0LXBhZ2UpLlxuICAgICAqIEBzZWUgZmlyc3RQYWdlSXNTdGFydGVkXG4gICAgICogQHNlZSBjb21wbGV0ZUxhc3RQYWdlXG4gICAgICovXG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuZmlyc3RQYWdlSXNTdGFydGVkKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB0aGlzLmlzQ3VycmVudFBhZ2VSZW5kZXJpbmcgPSB0cnVlO1xuICAgICAgICBpZiAodGhpcy5jaGVja0lzUGFnZUhhc0Vycm9ycyh0aGlzLnN0YXJ0ZWRQYWdlLCB0cnVlKSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgdGhpcy5pc1N0YXJ0ZWRTdGF0ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLm5vdGlmeVF1ZXN0aW9uc09uSGlkaW5nQ29udGVudCh0aGlzLnBhZ2VzWzBdKTtcbiAgICAgICAgdGhpcy5zdGFydFRpbWVyRnJvbVVJKCk7XG4gICAgICAgIHRoaXMub25TdGFydGVkLmZpcmUodGhpcywge30pO1xuICAgICAgICB0aGlzLnVwZGF0ZVZpc2libGVJbmRleGVzKCk7XG4gICAgICAgIGlmICghIXRoaXMuY3VycmVudFBhZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2UubG9jU3Ryc0NoYW5nZWQoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwiaXNWYWxpZGF0aW5nT25TZXJ2ZXJcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGN1cnJlbnQgcGFnZSBpcyBiZWluZyBbdmFsaWRhdGVkIG9uIGEgc2VydmVyXSgjb25TZXJ2ZXJWYWxpZGF0ZVF1ZXN0aW9ucykuXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpc1ZhbGlkYXRpbmdPblNlcnZlclwiLCBmYWxzZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuc2V0SXNWYWxpZGF0aW5nT25TZXJ2ZXIgPSBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgIGlmICh2YWwgPT0gdGhpcy5pc1ZhbGlkYXRpbmdPblNlcnZlcilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaXNWYWxpZGF0aW5nT25TZXJ2ZXJcIiwgdmFsKTtcbiAgICAgICAgdGhpcy5vbklzVmFsaWRhdGluZ09uU2VydmVyQ2hhbmdlZCgpO1xuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLmNyZWF0ZVNlcnZlclZhbGlkYXRpb25PcHRpb25zID0gZnVuY3Rpb24gKGRvQ29tcGxldGUsIGlzUHJldmlldykge1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgICAgICAgZGF0YToge30sXG4gICAgICAgICAgICBlcnJvcnM6IHt9LFxuICAgICAgICAgICAgc3VydmV5OiB0aGlzLFxuICAgICAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmNvbXBsZXRlU2VydmVyVmFsaWRhdGlvbihvcHRpb25zLCBpc1ByZXZpZXcpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGRvQ29tcGxldGUgJiYgdGhpcy5pc1ZhbGlkYXRlT25Db21wbGV0ZSkge1xuICAgICAgICAgICAgb3B0aW9ucy5kYXRhID0gdGhpcy5kYXRhO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMuYWN0aXZlUGFnZS5xdWVzdGlvbnM7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciBxdWVzdGlvbiA9IHF1ZXN0aW9uc1tpXTtcbiAgICAgICAgICAgICAgICBpZiAoIXF1ZXN0aW9uLnZpc2libGUpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHRoaXMuZ2V0VmFsdWUocXVlc3Rpb24uZ2V0VmFsdWVOYW1lKCkpO1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc1ZhbHVlRW1wdHkodmFsdWUpKVxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmRhdGFbcXVlc3Rpb24uZ2V0VmFsdWVOYW1lKCldID0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUub25Jc1ZhbGlkYXRpbmdPblNlcnZlckNoYW5nZWQgPSBmdW5jdGlvbiAoKSB7IH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLmRvU2VydmVyVmFsaWRhdGlvbiA9IGZ1bmN0aW9uIChkb0NvbXBsZXRlLCBpc1ByZXZpZXcpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgaWYgKGlzUHJldmlldyA9PT0gdm9pZCAwKSB7IGlzUHJldmlldyA9IGZhbHNlOyB9XG4gICAgICAgIGlmICghdGhpcy5vblNlcnZlclZhbGlkYXRlUXVlc3Rpb25zIHx8XG4gICAgICAgICAgICB0aGlzLm9uU2VydmVyVmFsaWRhdGVRdWVzdGlvbnMuaXNFbXB0eSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKCFkb0NvbXBsZXRlICYmIHRoaXMuaXNWYWxpZGF0ZU9uQ29tcGxldGUpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHRoaXMuc2V0SXNWYWxpZGF0aW5nT25TZXJ2ZXIodHJ1ZSk7XG4gICAgICAgIHZhciBpc0Z1bmMgPSB0eXBlb2YgdGhpcy5vblNlcnZlclZhbGlkYXRlUXVlc3Rpb25zID09PSBcImZ1bmN0aW9uXCI7XG4gICAgICAgIHRoaXMuc2VydmVyVmFsaWRhdGlvbkV2ZW50Q291bnQgPSAhaXNGdW5jID8gdGhpcy5vblNlcnZlclZhbGlkYXRlUXVlc3Rpb25zLmxlbmd0aCA6IDE7XG4gICAgICAgIGlmIChpc0Z1bmMpIHtcbiAgICAgICAgICAgIHRoaXMub25TZXJ2ZXJWYWxpZGF0ZVF1ZXN0aW9ucyh0aGlzLCB0aGlzLmNyZWF0ZVNlcnZlclZhbGlkYXRpb25PcHRpb25zKGRvQ29tcGxldGUsIGlzUHJldmlldykpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5vblNlcnZlclZhbGlkYXRlUXVlc3Rpb25zLmZpcmVCeUNyZWF0aW5nT3B0aW9ucyh0aGlzLCBmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy5jcmVhdGVTZXJ2ZXJWYWxpZGF0aW9uT3B0aW9ucyhkb0NvbXBsZXRlLCBpc1ByZXZpZXcpOyB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5jb21wbGV0ZVNlcnZlclZhbGlkYXRpb24gPSBmdW5jdGlvbiAob3B0aW9ucywgaXNQcmV2aWV3KSB7XG4gICAgICAgIGlmICh0aGlzLnNlcnZlclZhbGlkYXRpb25FdmVudENvdW50ID4gMSkge1xuICAgICAgICAgICAgdGhpcy5zZXJ2ZXJWYWxpZGF0aW9uRXZlbnRDb3VudC0tO1xuICAgICAgICAgICAgaWYgKCEhb3B0aW9ucyAmJiAhIW9wdGlvbnMuZXJyb3JzICYmIE9iamVjdC5rZXlzKG9wdGlvbnMuZXJyb3JzKS5sZW5ndGggPT09IDApXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VydmVyVmFsaWRhdGlvbkV2ZW50Q291bnQgPSAwO1xuICAgICAgICB0aGlzLnNldElzVmFsaWRhdGluZ09uU2VydmVyKGZhbHNlKTtcbiAgICAgICAgaWYgKCFvcHRpb25zICYmICFvcHRpb25zLnN1cnZleSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIHNlbGYgPSBvcHRpb25zLnN1cnZleTtcbiAgICAgICAgdmFyIGhhc0Vycm9ycyA9IGZhbHNlO1xuICAgICAgICBpZiAob3B0aW9ucy5lcnJvcnMpIHtcbiAgICAgICAgICAgIHZhciBoYXNUb0ZvY3VzID0gdGhpcy5mb2N1c09uRmlyc3RFcnJvcjtcbiAgICAgICAgICAgIGZvciAodmFyIG5hbWUgaW4gb3B0aW9ucy5lcnJvcnMpIHtcbiAgICAgICAgICAgICAgICB2YXIgcXVlc3Rpb24gPSBzZWxmLmdldFF1ZXN0aW9uQnlOYW1lKG5hbWUpO1xuICAgICAgICAgICAgICAgIGlmIChxdWVzdGlvbiAmJiBxdWVzdGlvbltcImVycm9yc1wiXSkge1xuICAgICAgICAgICAgICAgICAgICBoYXNFcnJvcnMgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbi5hZGRFcnJvcihuZXcgX2Vycm9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bXCJDdXN0b21FcnJvclwiXShvcHRpb25zLmVycm9yc1tuYW1lXSwgdGhpcykpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaGFzVG9Gb2N1cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFzVG9Gb2N1cyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhcXVlc3Rpb24ucGFnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSBxdWVzdGlvbi5wYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb24uZm9jdXModHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmZpcmVWYWxpZGF0ZWRFcnJvcnNPblBhZ2UodGhpcy5jdXJyZW50UGFnZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFoYXNFcnJvcnMpIHtcbiAgICAgICAgICAgIGlmIChpc1ByZXZpZXcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dQcmV2aWV3Q29yZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuaXNMYXN0UGFnZSlcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5kb0NvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICBzZWxmLmRvTmV4dFBhZ2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLmRvTmV4dFBhZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBjdXJQYWdlID0gdGhpcy5jdXJyZW50UGFnZTtcbiAgICAgICAgdGhpcy5jaGVja09uUGFnZVRyaWdnZXJzKGZhbHNlKTtcbiAgICAgICAgaWYgKCF0aGlzLmlzQ29tcGxldGVkKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zZW5kUmVzdWx0T25QYWdlTmV4dCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VuZFJlc3VsdCh0aGlzLnN1cnZleVBvc3RJZCwgdGhpcy5jbGllbnRJZCwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY3VyUGFnZSA9PT0gdGhpcy5jdXJyZW50UGFnZSkge1xuICAgICAgICAgICAgICAgIHZhciB2UGFnZXMgPSB0aGlzLnZpc2libGVQYWdlcztcbiAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSB2UGFnZXMuaW5kZXhPZih0aGlzLmN1cnJlbnRQYWdlKTtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gdlBhZ2VzW2luZGV4ICsgMV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRvQ29tcGxldGUodHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5zZXRDb21wbGV0ZWQgPSBmdW5jdGlvbiAodHJpZ2dlcikge1xuICAgICAgICB0aGlzLmRvQ29tcGxldGUodHJ1ZSwgdHJpZ2dlcik7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuY2FuQmVDb21wbGV0ZWQgPSBmdW5jdGlvbiAodHJpZ2dlciwgaXNDb21wbGV0ZWQpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoIV9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfX1tcInNldHRpbmdzXCJdLnRyaWdnZXJzLmNoYW5nZU5hdmlnYXRpb25CdXR0b25zT25Db21wbGV0ZSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIHByZXZDYW5CZUNvbXBsZXRlZCA9IHRoaXMuY2FuQmVDb21wbGV0ZWRCeVRyaWdnZXI7XG4gICAgICAgIGlmICghdGhpcy5jb21wbGV0ZWRCeVRyaWdnZXJzKVxuICAgICAgICAgICAgdGhpcy5jb21wbGV0ZWRCeVRyaWdnZXJzID0ge307XG4gICAgICAgIGlmIChpc0NvbXBsZXRlZCkge1xuICAgICAgICAgICAgdGhpcy5jb21wbGV0ZWRCeVRyaWdnZXJzW3RyaWdnZXIuaWRdID0geyB0cmlnZ2VyOiB0cmlnZ2VyLCBwYWdlSWQ6IChfYSA9IHRoaXMuY3VycmVudFBhZ2UpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5pZCB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuY29tcGxldGVkQnlUcmlnZ2Vyc1t0cmlnZ2VyLmlkXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJldkNhbkJlQ29tcGxldGVkICE9PSB0aGlzLmNhbkJlQ29tcGxldGVkQnlUcmlnZ2VyKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUJ1dHRvbnNWaXNpYmlsaXR5KCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwiY2FuQmVDb21wbGV0ZWRCeVRyaWdnZXJcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGlmICghdGhpcy5jb21wbGV0ZWRCeVRyaWdnZXJzKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXModGhpcy5jb21wbGV0ZWRCeVRyaWdnZXJzKTtcbiAgICAgICAgICAgIGlmIChrZXlzLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB2YXIgaWQgPSAoX2EgPSB0aGlzLmN1cnJlbnRQYWdlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuaWQ7XG4gICAgICAgICAgICBpZiAoIWlkKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlkID09PSB0aGlzLmNvbXBsZXRlZEJ5VHJpZ2dlcnNba2V5c1tpXV0ucGFnZUlkKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwiY29tcGxldGVkVHJpZ2dlclwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmNhbkJlQ29tcGxldGVkQnlUcmlnZ2VyKVxuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB2YXIga2V5ID0gT2JqZWN0LmtleXModGhpcy5jb21wbGV0ZWRCeVRyaWdnZXJzKVswXTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbXBsZXRlZEJ5VHJpZ2dlcnNba2V5XS50cmlnZ2VyO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleU1vZGVsLnByb3RvdHlwZSwgXCJwcm9jZXNzZWRDb21wbGV0ZWRIdG1sXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgSFRNTCBjb250ZW50IGRpc3BsYXllZCBvbiB0aGUgW2NvbXBsZXRlIHBhZ2VdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vZGVzaWduLXN1cnZleS9jcmVhdGUtYS1tdWx0aS1wYWdlLXN1cnZleSNjb21wbGV0ZS1wYWdlKS5cbiAgICAgICAgICpcbiAgICAgICAgICogVG8gc3BlY2lmeSBIVE1MIGNvbnRlbnQsIHVzZSB0aGUgW2Bjb21wbGV0ZWRIdG1sYF0oI2NvbXBsZXRlZEh0bWwpIHByb3BlcnR5LlxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgaHRtbCA9IHRoaXMucmVuZGVyZWRDb21wbGV0ZWRIdG1sO1xuICAgICAgICAgICAgcmV0dXJuICEhaHRtbCA/IHRoaXMucHJvY2Vzc0h0bWwoaHRtbCwgXCJjb21wbGV0ZWRcIikgOiBcIlwiO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleU1vZGVsLnByb3RvdHlwZSwgXCJwcm9jZXNzZWRDb21wbGV0ZWRCZWZvcmVIdG1sXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgSFRNTCBjb250ZW50IGRpc3BsYXllZCB0byBhIHVzZXIgd2hvIGhhcyBjb21wbGV0ZWQgdGhlIHN1cnZleSBiZWZvcmUuIFRvIGlkZW50aWZ5IHN1Y2ggdXNlcnMsIHRoZSBzdXJ2ZXkgdXNlcyBhIFtjb29raWUgbmFtZV0oI2Nvb2tpZU5hbWUpIG9yIFtjbGllbnQgSURdKCNjbGllbnRJZCkuXG4gICAgICAgICAqXG4gICAgICAgICAqIFRvIHNwZWNpZnkgSFRNTCBjb250ZW50LCB1c2UgdGhlIFtgY29tcGxldGVkQmVmb3JlSHRtbGBdKCNjb21wbGV0ZWRCZWZvcmVIdG1sKSBwcm9wZXJ0eS5cbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jQ29tcGxldGVkQmVmb3JlSHRtbC50ZXh0T3JIdG1sO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleU1vZGVsLnByb3RvdHlwZSwgXCJwcm9jZXNzZWRMb2FkaW5nSHRtbFwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIEhUTUwgY29udGVudCBkaXNwbGF5ZWQgd2hpbGUgYSBzdXJ2ZXkgSlNPTiBzY2hlbWEgaXMgYmVpbmcgbG9hZGVkIGZyb20gW1N1cnZleUpTIFNlcnZpY2VdKGh0dHBzOi8vYXBpLnN1cnZleWpzLmlvKS5cbiAgICAgICAgICpcbiAgICAgICAgICogVG8gc3BlY2lmeSBIVE1MIGNvbnRlbnQsIHVzZSB0aGUgW2Bsb2FkaW5nSHRtbGBdKCNsb2FkaW5nSHRtbCkgcHJvcGVydHkuXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY0xvYWRpbmdIdG1sLnRleHRPckh0bWw7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuZ2V0UHJvZ3Jlc3NJbmZvID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcGFnZXMgPSB0aGlzLmlzRGVzaWduTW9kZSA/IHRoaXMucGFnZXMgOiB0aGlzLnZpc2libGVQYWdlcztcbiAgICAgICAgcmV0dXJuIF9zdXJ2ZXlfZWxlbWVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiU3VydmV5RWxlbWVudFwiXS5nZXRQcm9ncmVzc0luZm9CeUVsZW1lbnRzKHBhZ2VzLCBmYWxzZSk7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5TW9kZWwucHJvdG90eXBlLCBcInByb2dyZXNzVGV4dFwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIHRleHQgZGlzcGxheWVkIGJ5IHRoZSBwcm9ncmVzcyBiYXIgKGZvciBpbnN0YW5jZSwgXCJQYWdlIDIgb2YgM1wiIG9yIFwiQW5zd2VyZWQgMy84IHF1ZXN0aW9uc1wiKS4gSGFuZGxlIHRoZSBbYG9uUHJvZ3Jlc3NUZXh0YF0oI29uUHJvZ3Jlc3NUZXh0KSBldmVudCB0byBjaGFuZ2UgdGhpcyB0ZXh0LlxuICAgICAgICAgKiBAc2VlIHByb2dyZXNzVmFsdWVcbiAgICAgICAgICogQHNlZSBzaG93UHJvZ3Jlc3NCYXJcbiAgICAgICAgICogQHNlZSBwcm9ncmVzc0JhclR5cGVcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHJlcyA9IHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInByb2dyZXNzVGV4dFwiLCBcIlwiKTtcbiAgICAgICAgICAgIGlmICghcmVzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVQcm9ncmVzc1RleHQoKTtcbiAgICAgICAgICAgICAgICByZXMgPSB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJwcm9ncmVzc1RleHRcIiwgXCJcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLnVwZGF0ZVByb2dyZXNzVGV4dCA9IGZ1bmN0aW9uIChvblZhbHVlQ2hhbmdlZCkge1xuICAgICAgICBpZiAob25WYWx1ZUNoYW5nZWQgPT09IHZvaWQgMCkgeyBvblZhbHVlQ2hhbmdlZCA9IGZhbHNlOyB9XG4gICAgICAgIGlmICh0aGlzLmlzQ2FsY3VsYXRpbmdQcm9ncmVzc1RleHQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmIChvblZhbHVlQ2hhbmdlZCAmJlxuICAgICAgICAgICAgdGhpcy5wcm9ncmVzc0JhclR5cGUgPT0gXCJwYWdlc1wiICYmXG4gICAgICAgICAgICB0aGlzLm9uUHJvZ3Jlc3NUZXh0LmlzRW1wdHkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMuaXNDYWxjdWxhdGluZ1Byb2dyZXNzVGV4dCA9IHRydWU7XG4gICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInByb2dyZXNzVGV4dFwiLCB0aGlzLmdldFByb2dyZXNzVGV4dCgpKTtcbiAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicHJvZ3Jlc3NWYWx1ZVwiLCB0aGlzLmdldFByb2dyZXNzKCkpO1xuICAgICAgICB0aGlzLmlzQ2FsY3VsYXRpbmdQcm9ncmVzc1RleHQgPSBmYWxzZTtcbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5nZXRQcm9ncmVzc1RleHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5pc0Rlc2lnbk1vZGUgJiYgdGhpcy5jdXJyZW50UGFnZSA9PSBudWxsKVxuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgICAgICAgcXVlc3Rpb25Db3VudDogMCxcbiAgICAgICAgICAgIGFuc3dlcmVkUXVlc3Rpb25Db3VudDogMCxcbiAgICAgICAgICAgIHJlcXVpcmVkUXVlc3Rpb25Db3VudDogMCxcbiAgICAgICAgICAgIHJlcXVpcmVkQW5zd2VyZWRRdWVzdGlvbkNvdW50OiAwLFxuICAgICAgICAgICAgdGV4dDogXCJcIixcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIHR5cGUgPSB0aGlzLnByb2dyZXNzQmFyVHlwZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAodHlwZSA9PT0gXCJxdWVzdGlvbnNcIiB8fFxuICAgICAgICAgICAgdHlwZSA9PT0gXCJyZXF1aXJlZHF1ZXN0aW9uc1wiIHx8XG4gICAgICAgICAgICB0eXBlID09PSBcImNvcnJlY3RxdWVzdGlvbnNcIiB8fFxuICAgICAgICAgICAgIXRoaXMub25Qcm9ncmVzc1RleHQuaXNFbXB0eSkge1xuICAgICAgICAgICAgdmFyIGluZm8gPSB0aGlzLmdldFByb2dyZXNzSW5mbygpO1xuICAgICAgICAgICAgb3B0aW9ucy5xdWVzdGlvbkNvdW50ID0gaW5mby5xdWVzdGlvbkNvdW50O1xuICAgICAgICAgICAgb3B0aW9ucy5hbnN3ZXJlZFF1ZXN0aW9uQ291bnQgPSBpbmZvLmFuc3dlcmVkUXVlc3Rpb25Db3VudDtcbiAgICAgICAgICAgIG9wdGlvbnMucmVxdWlyZWRRdWVzdGlvbkNvdW50ID0gaW5mby5yZXF1aXJlZFF1ZXN0aW9uQ291bnQ7XG4gICAgICAgICAgICBvcHRpb25zLnJlcXVpcmVkQW5zd2VyZWRRdWVzdGlvbkNvdW50ID1cbiAgICAgICAgICAgICAgICBpbmZvLnJlcXVpcmVkQW5zd2VyZWRRdWVzdGlvbkNvdW50O1xuICAgICAgICB9XG4gICAgICAgIG9wdGlvbnMudGV4dCA9IHRoaXMuZ2V0UHJvZ3Jlc3NUZXh0Q29yZShvcHRpb25zKTtcbiAgICAgICAgdGhpcy5vblByb2dyZXNzVGV4dC5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gb3B0aW9ucy50ZXh0O1xuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLmdldFByb2dyZXNzVGV4dENvcmUgPSBmdW5jdGlvbiAoaW5mbykge1xuICAgICAgICB2YXIgdHlwZSA9IHRoaXMucHJvZ3Jlc3NCYXJUeXBlLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmICh0eXBlID09PSBcInF1ZXN0aW9uc1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YXRpb25Gb3JtYXRTdHJpbmcoXCJxdWVzdGlvbnNQcm9ncmVzc1RleHRcIiwgaW5mby5hbnN3ZXJlZFF1ZXN0aW9uQ291bnQsIGluZm8ucXVlc3Rpb25Db3VudCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGUgPT09IFwicmVxdWlyZWRxdWVzdGlvbnNcIikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemF0aW9uRm9ybWF0U3RyaW5nKFwicXVlc3Rpb25zUHJvZ3Jlc3NUZXh0XCIsIGluZm8ucmVxdWlyZWRBbnN3ZXJlZFF1ZXN0aW9uQ291bnQsIGluZm8ucmVxdWlyZWRRdWVzdGlvbkNvdW50KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZSA9PT0gXCJjb3JyZWN0cXVlc3Rpb25zXCIpIHtcbiAgICAgICAgICAgIHZhciBjb3JyZWN0QW5zd2Vyc0NvdW50ID0gdGhpcy5nZXRDb3JyZWN0ZWRBbnN3ZXJDb3VudCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemF0aW9uRm9ybWF0U3RyaW5nKFwicXVlc3Rpb25zUHJvZ3Jlc3NUZXh0XCIsIGNvcnJlY3RBbnN3ZXJzQ291bnQsIGluZm8ucXVlc3Rpb25Db3VudCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHZQYWdlcyA9IHRoaXMuaXNEZXNpZ25Nb2RlID8gdGhpcy5wYWdlcyA6IHRoaXMudmlzaWJsZVBhZ2VzO1xuICAgICAgICB2YXIgaW5kZXggPSB2UGFnZXMuaW5kZXhPZih0aGlzLmN1cnJlbnRQYWdlKSArIDE7XG4gICAgICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphdGlvbkZvcm1hdFN0cmluZyhcInByb2dyZXNzVGV4dFwiLCBpbmRleCwgdlBhZ2VzLmxlbmd0aCk7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuZ2V0Um9vdENzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBfdXRpbHNfY3NzQ2xhc3NCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOF9fW1wiQ3NzQ2xhc3NCdWlsZGVyXCJdKClcbiAgICAgICAgICAgIC5hcHBlbmQodGhpcy5jc3Mucm9vdClcbiAgICAgICAgICAgIC5hcHBlbmQodGhpcy5jc3Mucm9vdE1vYmlsZSwgdGhpcy5pc01vYmlsZSlcbiAgICAgICAgICAgIC5hcHBlbmQodGhpcy5jc3Mucm9vdFJlYWRPbmx5LCB0aGlzLm1vZGUgPT09IFwiZGlzcGxheVwiKVxuICAgICAgICAgICAgLmFwcGVuZCh0aGlzLmNzcy5yb290Q29tcGFjdCwgdGhpcy5pc0NvbXBhY3QpXG4gICAgICAgICAgICAuYXBwZW5kKHRoaXMuY3NzLnJvb3RGaXRUb0NvbnRhaW5lciwgdGhpcy5maXRUb0NvbnRhaW5lcilcbiAgICAgICAgICAgIC50b1N0cmluZygpO1xuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLmFmdGVyUmVuZGVyU3VydmV5ID0gZnVuY3Rpb24gKGh0bWxFbGVtZW50KSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHRoaXMuZGVzdHJveVJlc2l6ZU9ic2VydmVyKCk7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGh0bWxFbGVtZW50KSkge1xuICAgICAgICAgICAgaHRtbEVsZW1lbnQgPSBfc3VydmV5X2VsZW1lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcIlN1cnZleUVsZW1lbnRcIl0uR2V0Rmlyc3ROb25UZXh0RWxlbWVudChodG1sRWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG9ic2VydmVkRWxlbWVudCA9IGh0bWxFbGVtZW50O1xuICAgICAgICB2YXIgY3NzVmFyaWFibGVzID0gdGhpcy5jc3MudmFyaWFibGVzO1xuICAgICAgICBpZiAoISFjc3NWYXJpYWJsZXMpIHtcbiAgICAgICAgICAgIHZhciBtb2JpbGVXaWR0aF8xID0gTnVtYmVyLnBhcnNlRmxvYXQod2luZG93LmdldENvbXB1dGVkU3R5bGUob2JzZXJ2ZWRFbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKGNzc1ZhcmlhYmxlcy5tb2JpbGVXaWR0aCkpO1xuICAgICAgICAgICAgaWYgKCEhbW9iaWxlV2lkdGhfMSkge1xuICAgICAgICAgICAgICAgIHZhciBpc1Byb2Nlc3NlZF8xID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcihmdW5jdGlvbiAoZW50cmllcykge1xuICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1Byb2Nlc3NlZF8xIHx8ICFPYmplY3QoX3V0aWxzX3V0aWxzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNV9fW1wiaXNDb250YWluZXJWaXNpYmxlXCJdKShvYnNlcnZlZEVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNQcm9jZXNzZWRfMSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNQcm9jZXNzZWRfMSA9IF90aGlzLnByb2Nlc3NSZXNwb25zaXZlbmVzcyhvYnNlcnZlZEVsZW1lbnQub2Zmc2V0V2lkdGgsIG1vYmlsZVdpZHRoXzEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLm9ic2VydmUob2JzZXJ2ZWRFbGVtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uQWZ0ZXJSZW5kZXJTdXJ2ZXkuZmlyZSh0aGlzLCB7XG4gICAgICAgICAgICBzdXJ2ZXk6IHRoaXMsXG4gICAgICAgICAgICBodG1sRWxlbWVudDogaHRtbEVsZW1lbnQsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJvb3RFbGVtZW50ID0gaHRtbEVsZW1lbnQ7XG4gICAgICAgIHRoaXMuYWRkU2Nyb2xsRXZlbnRMaXN0ZW5lcigpO1xuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLnByb2Nlc3NSZXNwb25zaXZlbmVzcyA9IGZ1bmN0aW9uICh3aWR0aCwgbW9iaWxlV2lkdGgpIHtcbiAgICAgICAgdmFyIGlzTW9iaWxlID0gd2lkdGggPCBtb2JpbGVXaWR0aDtcbiAgICAgICAgaWYgKHRoaXMuaXNNb2JpbGUgPT09IGlzTW9iaWxlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNldElzTW9iaWxlKGlzTW9iaWxlKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUudHJpZ2dlclJlc3BvbnNpdmVuZXNzID0gZnVuY3Rpb24gKGhhcmQpIHtcbiAgICAgICAgdGhpcy5nZXRBbGxRdWVzdGlvbnMoKS5mb3JFYWNoKGZ1bmN0aW9uIChxdWVzdGlvbikge1xuICAgICAgICAgICAgcXVlc3Rpb24udHJpZ2dlclJlc3BvbnNpdmVuZXNzKGhhcmQpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5kZXN0cm95UmVzaXplT2JzZXJ2ZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghIXRoaXMucmVzaXplT2JzZXJ2ZXIpIHtcbiAgICAgICAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLnVwZGF0ZVF1ZXN0aW9uQ3NzQ2xhc3NlcyA9IGZ1bmN0aW9uIChxdWVzdGlvbiwgY3NzQ2xhc3Nlcykge1xuICAgICAgICB0aGlzLm9uVXBkYXRlUXVlc3Rpb25Dc3NDbGFzc2VzLmZpcmUodGhpcywge1xuICAgICAgICAgICAgcXVlc3Rpb246IHF1ZXN0aW9uLFxuICAgICAgICAgICAgY3NzQ2xhc3NlczogY3NzQ2xhc3NlcyxcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUudXBkYXRlUGFuZWxDc3NDbGFzc2VzID0gZnVuY3Rpb24gKHBhbmVsLCBjc3NDbGFzc2VzKSB7XG4gICAgICAgIHRoaXMub25VcGRhdGVQYW5lbENzc0NsYXNzZXMuZmlyZSh0aGlzLCB7XG4gICAgICAgICAgICBwYW5lbDogcGFuZWwsXG4gICAgICAgICAgICBjc3NDbGFzc2VzOiBjc3NDbGFzc2VzLFxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS51cGRhdGVQYWdlQ3NzQ2xhc3NlcyA9IGZ1bmN0aW9uIChwYWdlLCBjc3NDbGFzc2VzKSB7XG4gICAgICAgIHRoaXMub25VcGRhdGVQYWdlQ3NzQ2xhc3Nlcy5maXJlKHRoaXMsIHtcbiAgICAgICAgICAgIHBhZ2U6IHBhZ2UsXG4gICAgICAgICAgICBjc3NDbGFzc2VzOiBjc3NDbGFzc2VzLFxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS51cGRhdGVDaG9pY2VJdGVtQ3NzID0gZnVuY3Rpb24gKHF1ZXN0aW9uLCBvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMucXVlc3Rpb24gPSBxdWVzdGlvbjtcbiAgICAgICAgdGhpcy5vblVwZGF0ZUNob2ljZUl0ZW1Dc3MuZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5hZnRlclJlbmRlclBhZ2UgPSBmdW5jdGlvbiAoaHRtbEVsZW1lbnQpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgaWYgKCF0aGlzLmlzRGVzaWduTW9kZSAmJiAhdGhpcy5mb2N1c2luZ1F1ZXN0aW9uSW5mbykge1xuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy5zY3JvbGxUb1RvcE9uUGFnZUNoYW5nZSghX3RoaXMuaXNGaXJzdFBhZ2VSZW5kZXJpbmcpOyB9LCAxKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZvY3VzUXVlc3Rpb25JbmZvKCk7XG4gICAgICAgIHRoaXMuaXNGaXJzdFBhZ2VSZW5kZXJpbmcgPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMub25BZnRlclJlbmRlclBhZ2UuaXNFbXB0eSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5vbkFmdGVyUmVuZGVyUGFnZS5maXJlKHRoaXMsIHtcbiAgICAgICAgICAgIHBhZ2U6IHRoaXMuYWN0aXZlUGFnZSxcbiAgICAgICAgICAgIGh0bWxFbGVtZW50OiBodG1sRWxlbWVudCxcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuYWZ0ZXJSZW5kZXJIZWFkZXIgPSBmdW5jdGlvbiAoaHRtbEVsZW1lbnQpIHtcbiAgICAgICAgaWYgKHRoaXMub25BZnRlclJlbmRlckhlYWRlci5pc0VtcHR5KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLm9uQWZ0ZXJSZW5kZXJIZWFkZXIuZmlyZSh0aGlzLCB7XG4gICAgICAgICAgICBodG1sRWxlbWVudDogaHRtbEVsZW1lbnQsXG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLmFmdGVyUmVuZGVyUXVlc3Rpb24gPSBmdW5jdGlvbiAocXVlc3Rpb24sIGh0bWxFbGVtZW50KSB7XG4gICAgICAgIHRoaXMub25BZnRlclJlbmRlclF1ZXN0aW9uLmZpcmUodGhpcywge1xuICAgICAgICAgICAgcXVlc3Rpb246IHF1ZXN0aW9uLFxuICAgICAgICAgICAgaHRtbEVsZW1lbnQ6IGh0bWxFbGVtZW50LFxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5hZnRlclJlbmRlclF1ZXN0aW9uSW5wdXQgPSBmdW5jdGlvbiAocXVlc3Rpb24sIGh0bWxFbGVtZW50KSB7XG4gICAgICAgIGlmICh0aGlzLm9uQWZ0ZXJSZW5kZXJRdWVzdGlvbklucHV0LmlzRW1wdHkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciBpZCA9IHF1ZXN0aW9uLmlucHV0SWQ7XG4gICAgICAgIHZhciByb290ID0gX3NldHRpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fW1wic2V0dGluZ3NcIl0uZW52aXJvbm1lbnQucm9vdDtcbiAgICAgICAgaWYgKCEhaWQgJiYgaHRtbEVsZW1lbnQuaWQgIT09IGlkICYmIHR5cGVvZiByb290ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICB2YXIgZWwgPSByb290LmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgICAgICAgICAgIGlmICghIWVsKSB7XG4gICAgICAgICAgICAgICAgaHRtbEVsZW1lbnQgPSBlbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uQWZ0ZXJSZW5kZXJRdWVzdGlvbklucHV0LmZpcmUodGhpcywge1xuICAgICAgICAgICAgcXVlc3Rpb246IHF1ZXN0aW9uLFxuICAgICAgICAgICAgaHRtbEVsZW1lbnQ6IGh0bWxFbGVtZW50LFxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5hZnRlclJlbmRlclBhbmVsID0gZnVuY3Rpb24gKHBhbmVsLCBodG1sRWxlbWVudCkge1xuICAgICAgICB0aGlzLm9uQWZ0ZXJSZW5kZXJQYW5lbC5maXJlKHRoaXMsIHtcbiAgICAgICAgICAgIHBhbmVsOiBwYW5lbCxcbiAgICAgICAgICAgIGh0bWxFbGVtZW50OiBodG1sRWxlbWVudCxcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUud2hlblF1ZXN0aW9uRm9jdXNJbiA9IGZ1bmN0aW9uIChxdWVzdGlvbikge1xuICAgICAgICB0aGlzLm9uRm9jdXNJblF1ZXN0aW9uLmZpcmUodGhpcywge1xuICAgICAgICAgICAgcXVlc3Rpb246IHF1ZXN0aW9uXG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLndoZW5QYW5lbEZvY3VzSW4gPSBmdW5jdGlvbiAocGFuZWwpIHtcbiAgICAgICAgdGhpcy5vbkZvY3VzSW5QYW5lbC5maXJlKHRoaXMsIHtcbiAgICAgICAgICAgIHBhbmVsOiBwYW5lbFxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5yZWJ1aWxkUXVlc3Rpb25DaG9pY2VzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmdldEFsbFF1ZXN0aW9ucygpLmZvckVhY2goZnVuY3Rpb24gKHEpIHsgcmV0dXJuIHEuc3VydmV5Q2hvaWNlSXRlbVZpc2liaWxpdHlDaGFuZ2UoKTsgfSk7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuY2FuQ2hhbmdlQ2hvaWNlSXRlbXNWaXNpYmlsaXR5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gIXRoaXMub25TaG93aW5nQ2hvaWNlSXRlbS5pc0VtcHR5O1xuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLmdldENob2ljZUl0ZW1WaXNpYmlsaXR5ID0gZnVuY3Rpb24gKHF1ZXN0aW9uLCBpdGVtLCB2YWwpIHtcbiAgICAgICAgdmFyIG9wdGlvbnMgPSB7IHF1ZXN0aW9uOiBxdWVzdGlvbiwgaXRlbTogaXRlbSwgdmlzaWJsZTogdmFsIH07XG4gICAgICAgIHRoaXMub25TaG93aW5nQ2hvaWNlSXRlbS5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gb3B0aW9ucy52aXNpYmxlO1xuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLmxvYWRRdWVzdGlvbkNob2ljZXMgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICB0aGlzLm9uQ2hvaWNlc0xhenlMb2FkLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuZ2V0Q2hvaWNlRGlzcGxheVZhbHVlID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKHRoaXMub25HZXRDaG9pY2VEaXNwbGF5VmFsdWUuaXNFbXB0eSkge1xuICAgICAgICAgICAgb3B0aW9ucy5zZXRJdGVtcyhudWxsKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub25HZXRDaG9pY2VEaXNwbGF5VmFsdWUuZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLm1hdHJpeEJlZm9yZVJvd0FkZGVkID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5vbk1hdHJpeFJvd0FkZGluZy5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLm1hdHJpeFJvd0FkZGVkID0gZnVuY3Rpb24gKHF1ZXN0aW9uLCByb3cpIHtcbiAgICAgICAgdGhpcy5vbk1hdHJpeFJvd0FkZGVkLmZpcmUodGhpcywgeyBxdWVzdGlvbjogcXVlc3Rpb24sIHJvdzogcm93IH0pO1xuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLm1hdHJpeENvbHVtbkFkZGVkID0gZnVuY3Rpb24gKHF1ZXN0aW9uLCBjb2x1bW4pIHtcbiAgICAgICAgdGhpcy5vbk1hdHJpeENvbHVtbkFkZGVkLmZpcmUodGhpcywgeyBxdWVzdGlvbjogcXVlc3Rpb24sIGNvbHVtbjogY29sdW1uIH0pO1xuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLm11bHRpcGxlVGV4dEl0ZW1BZGRlZCA9IGZ1bmN0aW9uIChxdWVzdGlvbiwgaXRlbSkge1xuICAgICAgICB0aGlzLm9uTXVsdGlwbGVUZXh0SXRlbUFkZGVkLmZpcmUodGhpcywgeyBxdWVzdGlvbjogcXVlc3Rpb24sIGl0ZW06IGl0ZW0gfSk7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuZ2V0UXVlc3Rpb25CeVZhbHVlTmFtZUZyb21BcnJheSA9IGZ1bmN0aW9uICh2YWx1ZU5hbWUsIG5hbWUsIGluZGV4KSB7XG4gICAgICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLmdldFF1ZXN0aW9uc0J5VmFsdWVOYW1lKHZhbHVlTmFtZSk7XG4gICAgICAgIGlmICghcXVlc3Rpb25zKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIHJlcyA9IHF1ZXN0aW9uc1tpXS5nZXRRdWVzdGlvbkZyb21BcnJheShuYW1lLCBpbmRleCk7XG4gICAgICAgICAgICBpZiAoISFyZXMpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5tYXRyaXhSb3dSZW1vdmVkID0gZnVuY3Rpb24gKHF1ZXN0aW9uLCByb3dJbmRleCwgcm93KSB7XG4gICAgICAgIHRoaXMub25NYXRyaXhSb3dSZW1vdmVkLmZpcmUodGhpcywge1xuICAgICAgICAgICAgcXVlc3Rpb246IHF1ZXN0aW9uLFxuICAgICAgICAgICAgcm93SW5kZXg6IHJvd0luZGV4LFxuICAgICAgICAgICAgcm93OiByb3csXG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLm1hdHJpeFJvd1JlbW92aW5nID0gZnVuY3Rpb24gKHF1ZXN0aW9uLCByb3dJbmRleCwgcm93KSB7XG4gICAgICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgICAgICAgcXVlc3Rpb246IHF1ZXN0aW9uLFxuICAgICAgICAgICAgcm93SW5kZXg6IHJvd0luZGV4LFxuICAgICAgICAgICAgcm93OiByb3csXG4gICAgICAgICAgICBhbGxvdzogdHJ1ZSxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5vbk1hdHJpeFJvd1JlbW92aW5nLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBvcHRpb25zLmFsbG93O1xuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLm1hdHJpeEFsbG93UmVtb3ZlUm93ID0gZnVuY3Rpb24gKHF1ZXN0aW9uLCByb3dJbmRleCwgcm93KSB7XG4gICAgICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgICAgICAgcXVlc3Rpb246IHF1ZXN0aW9uLFxuICAgICAgICAgICAgcm93SW5kZXg6IHJvd0luZGV4LFxuICAgICAgICAgICAgcm93OiByb3csXG4gICAgICAgICAgICBhbGxvdzogdHJ1ZSxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5vbk1hdHJpeFJlbmRlclJlbW92ZUJ1dHRvbi5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gb3B0aW9ucy5hbGxvdztcbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5tYXRyaXhDZWxsQ3JlYXRpbmcgPSBmdW5jdGlvbiAocXVlc3Rpb24sIG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucy5xdWVzdGlvbiA9IHF1ZXN0aW9uO1xuICAgICAgICB0aGlzLm9uTWF0cml4Q2VsbENyZWF0aW5nLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUubWF0cml4Q2VsbENyZWF0ZWQgPSBmdW5jdGlvbiAocXVlc3Rpb24sIG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucy5xdWVzdGlvbiA9IHF1ZXN0aW9uO1xuICAgICAgICB0aGlzLm9uTWF0cml4Q2VsbENyZWF0ZWQuZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5tYXRyaXhBZnRlckNlbGxSZW5kZXIgPSBmdW5jdGlvbiAocXVlc3Rpb24sIG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucy5xdWVzdGlvbiA9IHF1ZXN0aW9uO1xuICAgICAgICB0aGlzLm9uQWZ0ZXJSZW5kZXJNYXRyaXhDZWxsLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUubWF0cml4Q2VsbFZhbHVlQ2hhbmdlZCA9IGZ1bmN0aW9uIChxdWVzdGlvbiwgb3B0aW9ucykge1xuICAgICAgICBvcHRpb25zLnF1ZXN0aW9uID0gcXVlc3Rpb247XG4gICAgICAgIHRoaXMub25NYXRyaXhDZWxsVmFsdWVDaGFuZ2VkLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUubWF0cml4Q2VsbFZhbHVlQ2hhbmdpbmcgPSBmdW5jdGlvbiAocXVlc3Rpb24sIG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucy5xdWVzdGlvbiA9IHF1ZXN0aW9uO1xuICAgICAgICB0aGlzLm9uTWF0cml4Q2VsbFZhbHVlQ2hhbmdpbmcuZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwiaXNWYWxpZGF0ZU9uVmFsdWVDaGFuZ2luZ1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tFcnJvcnNNb2RlID09PSBcIm9uVmFsdWVDaGFuZ2luZ1wiO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleU1vZGVsLnByb3RvdHlwZSwgXCJpc1ZhbGlkYXRlT25WYWx1ZUNoYW5nZWRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoZWNrRXJyb3JzTW9kZSA9PT0gXCJvblZhbHVlQ2hhbmdlZFwiO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleU1vZGVsLnByb3RvdHlwZSwgXCJpc1ZhbGlkYXRlT25Db21wbGV0ZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tFcnJvcnNNb2RlID09PSBcIm9uQ29tcGxldGVcIjtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5tYXRyaXhDZWxsVmFsaWRhdGUgPSBmdW5jdGlvbiAocXVlc3Rpb24sIG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucy5xdWVzdGlvbiA9IHF1ZXN0aW9uO1xuICAgICAgICB0aGlzLm9uTWF0cml4Q2VsbFZhbGlkYXRlLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBvcHRpb25zLmVycm9yID8gbmV3IF9lcnJvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fW1wiQ3VzdG9tRXJyb3JcIl0ob3B0aW9ucy5lcnJvciwgdGhpcykgOiBudWxsO1xuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLmR5bmFtaWNQYW5lbEFkZGVkID0gZnVuY3Rpb24gKHF1ZXN0aW9uLCBwYW5lbEluZGV4LCBwYW5lbCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNMb2FkaW5nRnJvbUpzb24pIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVmlzaWJsZUluZGV4ZXMoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vbkR5bmFtaWNQYW5lbEFkZGVkLmlzRW1wdHkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciBwYW5lbHMgPSBxdWVzdGlvbi5wYW5lbHM7XG4gICAgICAgIGlmIChwYW5lbEluZGV4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHBhbmVsSW5kZXggPSBwYW5lbHMubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIHBhbmVsID0gcGFuZWxzW3BhbmVsSW5kZXhdO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub25EeW5hbWljUGFuZWxBZGRlZC5maXJlKHRoaXMsIHsgcXVlc3Rpb246IHF1ZXN0aW9uLCBwYW5lbDogcGFuZWwsIHBhbmVsSW5kZXg6IHBhbmVsSW5kZXggfSk7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuZHluYW1pY1BhbmVsUmVtb3ZlZCA9IGZ1bmN0aW9uIChxdWVzdGlvbiwgcGFuZWxJbmRleCwgcGFuZWwpIHtcbiAgICAgICAgdmFyIHF1ZXN0aW9ucyA9ICEhcGFuZWwgPyBwYW5lbC5xdWVzdGlvbnMgOiBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHF1ZXN0aW9uc1tpXS5jbGVhck9uRGVsZXRpbmdDb250YWluZXIoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZVZpc2libGVJbmRleGVzKCk7XG4gICAgICAgIHRoaXMub25EeW5hbWljUGFuZWxSZW1vdmVkLmZpcmUodGhpcywge1xuICAgICAgICAgICAgcXVlc3Rpb246IHF1ZXN0aW9uLFxuICAgICAgICAgICAgcGFuZWxJbmRleDogcGFuZWxJbmRleCxcbiAgICAgICAgICAgIHBhbmVsOiBwYW5lbCxcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuZHluYW1pY1BhbmVsUmVtb3ZpbmcgPSBmdW5jdGlvbiAocXVlc3Rpb24sIHBhbmVsSW5kZXgsIHBhbmVsKSB7XG4gICAgICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgICAgICAgcXVlc3Rpb246IHF1ZXN0aW9uLFxuICAgICAgICAgICAgcGFuZWxJbmRleDogcGFuZWxJbmRleCxcbiAgICAgICAgICAgIHBhbmVsOiBwYW5lbCxcbiAgICAgICAgICAgIGFsbG93OiB0cnVlXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMub25EeW5hbWljUGFuZWxSZW1vdmluZy5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gb3B0aW9ucy5hbGxvdztcbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5keW5hbWljUGFuZWxJdGVtVmFsdWVDaGFuZ2VkID0gZnVuY3Rpb24gKHF1ZXN0aW9uLCBvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMucXVlc3Rpb24gPSBxdWVzdGlvbjtcbiAgICAgICAgb3B0aW9ucy5wYW5lbEluZGV4ID0gb3B0aW9ucy5pdGVtSW5kZXg7XG4gICAgICAgIG9wdGlvbnMucGFuZWxEYXRhID0gb3B0aW9ucy5pdGVtVmFsdWU7XG4gICAgICAgIHRoaXMub25EeW5hbWljUGFuZWxJdGVtVmFsdWVDaGFuZ2VkLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuZHluYW1pY1BhbmVsR2V0VGFiVGl0bGUgPSBmdW5jdGlvbiAocXVlc3Rpb24sIG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucy5xdWVzdGlvbiA9IHF1ZXN0aW9uO1xuICAgICAgICB0aGlzLm9uR2V0RHluYW1pY1BhbmVsVGFiVGl0bGUuZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5kcmFnQW5kRHJvcEFsbG93ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5vbkRyYWdEcm9wQWxsb3cuZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMuYWxsb3c7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuZWxlbWVudENvbnRlbnRWaXNpYmlsaXR5Q2hhbmdlZCA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlLmVuc3VyZVJvd3NWaXNpYmlsaXR5KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbkVsZW1lbnRDb250ZW50VmlzaWJpbGl0eUNoYW5nZWQuZmlyZSh0aGlzLCB7IGVsZW1lbnQ6IGVsZW1lbnQgfSk7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuZ2V0VXBkYXRlZFBhbmVsRm9vdGVyQWN0aW9ucyA9IGZ1bmN0aW9uIChwYW5lbCwgYWN0aW9ucywgcXVlc3Rpb24pIHtcbiAgICAgICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBxdWVzdGlvbjogcXVlc3Rpb24sXG4gICAgICAgICAgICBwYW5lbDogcGFuZWwsXG4gICAgICAgICAgICBhY3Rpb25zOiBhY3Rpb25zLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLm9uR2V0UGFuZWxGb290ZXJBY3Rpb25zLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBvcHRpb25zLmFjdGlvbnM7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuZ2V0VXBkYXRlZEVsZW1lbnRUaXRsZUFjdGlvbnMgPSBmdW5jdGlvbiAoZWxlbWVudCwgdGl0bGVBY3Rpb25zKSB7XG4gICAgICAgIGlmIChlbGVtZW50LmlzUGFnZSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFVwZGF0ZWRQYWdlVGl0bGVBY3Rpb25zKGVsZW1lbnQsIHRpdGxlQWN0aW9ucyk7XG4gICAgICAgIGlmIChlbGVtZW50LmlzUGFuZWwpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRVcGRhdGVkUGFuZWxUaXRsZUFjdGlvbnMoZWxlbWVudCwgdGl0bGVBY3Rpb25zKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VXBkYXRlZFF1ZXN0aW9uVGl0bGVBY3Rpb25zKGVsZW1lbnQsIHRpdGxlQWN0aW9ucyk7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuZ2V0VXBkYXRlZFF1ZXN0aW9uVGl0bGVBY3Rpb25zID0gZnVuY3Rpb24gKHF1ZXN0aW9uLCB0aXRsZUFjdGlvbnMpIHtcbiAgICAgICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBxdWVzdGlvbjogcXVlc3Rpb24sXG4gICAgICAgICAgICB0aXRsZUFjdGlvbnM6IHRpdGxlQWN0aW9ucyxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5vbkdldFF1ZXN0aW9uVGl0bGVBY3Rpb25zLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBvcHRpb25zLnRpdGxlQWN0aW9ucztcbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5nZXRVcGRhdGVkUGFuZWxUaXRsZUFjdGlvbnMgPSBmdW5jdGlvbiAocGFuZWwsIHRpdGxlQWN0aW9ucykge1xuICAgICAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIHBhbmVsOiBwYW5lbCxcbiAgICAgICAgICAgIHRpdGxlQWN0aW9uczogdGl0bGVBY3Rpb25zLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLm9uR2V0UGFuZWxUaXRsZUFjdGlvbnMuZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMudGl0bGVBY3Rpb25zO1xuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLmdldFVwZGF0ZWRQYWdlVGl0bGVBY3Rpb25zID0gZnVuY3Rpb24gKHBhZ2UsIHRpdGxlQWN0aW9ucykge1xuICAgICAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIHBhZ2U6IHBhZ2UsXG4gICAgICAgICAgICB0aXRsZUFjdGlvbnM6IHRpdGxlQWN0aW9ucyxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5vbkdldFBhZ2VUaXRsZUFjdGlvbnMuZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMudGl0bGVBY3Rpb25zO1xuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLmdldFVwZGF0ZWRNYXRyaXhSb3dBY3Rpb25zID0gZnVuY3Rpb24gKHF1ZXN0aW9uLCByb3csIGFjdGlvbnMpIHtcbiAgICAgICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBxdWVzdGlvbjogcXVlc3Rpb24sXG4gICAgICAgICAgICBhY3Rpb25zOiBhY3Rpb25zLFxuICAgICAgICAgICAgcm93OiByb3csXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMub25HZXRNYXRyaXhSb3dBY3Rpb25zLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBvcHRpb25zLmFjdGlvbnM7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuc2Nyb2xsRWxlbWVudFRvVG9wID0gZnVuY3Rpb24gKGVsZW1lbnQsIHF1ZXN0aW9uLCBwYWdlLCBpZCwgc2Nyb2xsSWZWaXNpYmxlKSB7XG4gICAgICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgICAgICAgZWxlbWVudDogZWxlbWVudCxcbiAgICAgICAgICAgIHF1ZXN0aW9uOiBxdWVzdGlvbixcbiAgICAgICAgICAgIHBhZ2U6IHBhZ2UsXG4gICAgICAgICAgICBlbGVtZW50SWQ6IGlkLFxuICAgICAgICAgICAgY2FuY2VsOiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5vblNjcm9sbGluZ0VsZW1lbnRUb1RvcC5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICAgICAgICBpZiAoIW9wdGlvbnMuY2FuY2VsKSB7XG4gICAgICAgICAgICBfc3VydmV5X2VsZW1lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcIlN1cnZleUVsZW1lbnRcIl0uU2Nyb2xsRWxlbWVudFRvVG9wKG9wdGlvbnMuZWxlbWVudElkLCBzY3JvbGxJZlZpc2libGUpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBVcGxvYWRzIGEgZmlsZSB0byBzZXJ2ZXIuXG4gICAgICpcbiAgICAgKiBUaGUgZm9sbG93aW5nIGNvZGUgc2hvd3MgaG93IHRvIGNhbGwgdGhpcyBtZXRob2Q6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIGNvbnN0IHF1ZXN0aW9uID0gc3VydmV5LmdldFF1ZXN0aW9uQnlOYW1lKFwibXlGaWxlUXVlc3Rpb25cIik7XG4gICAgICogc3VydmV5LnVwbG9hZEZpbGVzKFxuICAgICAqICAgcXVlc3Rpb24sXG4gICAgICogICBxdWVzdGlvbi5uYW1lLFxuICAgICAqICAgcXVlc3Rpb24udmFsdWUsXG4gICAgICogICAoc3RhdHVzLCBkYXRhKSA9PiB7XG4gICAgICogICAgIGlmIChzdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICogICAgICAgLy8gSGFuZGxlIHN1Y2Nlc3NcbiAgICAgKiAgICAgfVxuICAgICAqICAgICBpZiAoc3RhdHVzID09PSBcImVycm9yXCIpIHtcbiAgICAgKiAgICAgICAvLyBIYW5kbGUgZXJyb3JcbiAgICAgKiAgICAgfVxuICAgICAqICAgfVxuICAgICAqICk7XG4gICAgICogYGBgXG4gICAgICogQHBhcmFtIHF1ZXN0aW9uIEEgW0ZpbGUgVXBsb2FkIHF1ZXN0aW9uIGluc3RhbmNlXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2UvZmlsZS1tb2RlbCkuXG4gICAgICogQHBhcmFtIG5hbWUgVGhlIEZpbGUgVXBsb2FkIHF1ZXN0aW9uJ3MgW2BuYW1lYF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL2ZpbGUtbW9kZWwjbmFtZSkuXG4gICAgICogQHBhcmFtIGZpbGVzIEFuIGFycmF5IG9mIEphdmFTY3JpcHQgPGEgaHJlZj1cImh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9GaWxlXCIgdGFyZ2V0PVwiX2JsYW5rXCI+RmlsZTwvYT4gb2JqZWN0cyB0aGF0IHJlcHJlc2VudCBmaWxlcyB0byB1cGxvYWQuXG4gICAgICogQHBhcmFtIGNhbGxiYWNrIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBhbGxvd3MgeW91IHRvIGdldCB0aGUgdXBsb2FkIHN0YXR1cyAoYFwic3VjY2Vzc1wiYCBvciBgXCJlcnJvclwiYCkgYW5kIGZpbGUgZGF0YS5cbiAgICAgKiBAc2VlIG9uVXBsb2FkRmlsZXNcbiAgICAgKiBAc2VlIGRvd25sb2FkRmlsZVxuICAgICAqL1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS51cGxvYWRGaWxlcyA9IGZ1bmN0aW9uIChxdWVzdGlvbiwgbmFtZSwgZmlsZXMsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICh0aGlzLm9uVXBsb2FkRmlsZXMuaXNFbXB0eSkge1xuICAgICAgICAgICAgY2FsbGJhY2soXCJlcnJvclwiLCBmaWxlcyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9uVXBsb2FkRmlsZXMuZmlyZSh0aGlzLCB7XG4gICAgICAgICAgICAgICAgcXVlc3Rpb246IHF1ZXN0aW9uLFxuICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICAgICAgZmlsZXM6IGZpbGVzIHx8IFtdLFxuICAgICAgICAgICAgICAgIGNhbGxiYWNrOiBjYWxsYmFjayxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnN1cnZleVBvc3RJZCkge1xuICAgICAgICAgICAgdGhpcy51cGxvYWRGaWxlc0NvcmUobmFtZSwgZmlsZXMsIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgLyoqXG4gICAgICogRG93bmxvYWRzIGEgZmlsZSBmcm9tIGEgc2VydmVyLlxuICAgICAqXG4gICAgICogVGhlIGZvbGxvd2luZyBjb2RlIHNob3dzIGhvdyB0byBjYWxsIHRoaXMgbWV0aG9kOlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBjb25zdCBxdWVzdGlvbiA9IHN1cnZleS5nZXRRdWVzdGlvbkJ5TmFtZShcIm15RmlsZVF1ZXN0aW9uXCIpO1xuICAgICAqIHN1cnZleS5kb3dubG9hZEZpbGUoXG4gICAgICogICBxdWVzdGlvbixcbiAgICAgKiAgIHF1ZXN0aW9uLm5hbWUsXG4gICAgICogICAvLyBEb3dubG9hZCB0aGUgZmlyc3QgdXBsb2FkZWQgZmlsZVxuICAgICAqICAgcXVlc3Rpb24udmFsdWVbMF0sXG4gICAgICogICAoc3RhdHVzLCBkYXRhKSA9PiB7XG4gICAgICogICAgIGlmIChzdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICogICAgICAgLy8gVXNlIGBkYXRhYCB0byByZXRyaWV2ZSB0aGUgZmlsZVxuICAgICAqICAgICB9XG4gICAgICogICAgIGlmIChzdGF0dXMgPT09IFwiZXJyb3JcIikge1xuICAgICAqICAgICAgIC8vIEhhbmRsZSBlcnJvclxuICAgICAqICAgICB9XG4gICAgICogICB9XG4gICAgICogKTtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBwYXJhbSBxdWVzdGlvbiBBIFtGaWxlIFVwbG9hZCBxdWVzdGlvbiBpbnN0YW5jZV0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL2ZpbGUtbW9kZWwpLlxuICAgICAqIEBwYXJhbSBxdWVzdGlvbk5hbWUgVGhlIEZpbGUgVXBsb2FkIHF1ZXN0aW9uJ3MgW2BuYW1lYF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL2ZpbGUtbW9kZWwjbmFtZSkuXG4gICAgICogQHBhcmFtIGZpbGVWYWx1ZSBBbiBvYmplY3QgZnJvbSBGaWxlIFVwbG9hZCdzIFtgdmFsdWVgXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2UvZmlsZS1tb2RlbCN2YWx1ZSkgYXJyYXkuIFRoaXMgb2JqZWN0IGNvbnRhaW5zIG1ldGFkYXRhIGFib3V0IHRoZSBmaWxlIHlvdSB3YW50IHRvIGRvd25sb2FkLlxuICAgICAqIEBwYXJhbSBjYWxsYmFjayBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgYWxsb3dzIHlvdSB0byBnZXQgdGhlIGRvd25sb2FkIHN0YXR1cyAoYFwic3VjY2Vzc1wiYCBvciBgXCJlcnJvclwiYCkgYW5kIHRoZSBmaWxlIGlkZW50aWZpZXIgKFVSTCwgZmlsZSBuYW1lLCBldGMuKSB0aGF0IHlvdSBjYW4gdXNlIHRvIHJldHJpZXZlIHRoZSBmaWxlLlxuICAgICAqIEBzZWUgb25Eb3dubG9hZEZpbGVcbiAgICAgKiBAc2VlIHVwbG9hZEZpbGVzXG4gICAgICovXG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLmRvd25sb2FkRmlsZSA9IGZ1bmN0aW9uIChxdWVzdGlvbiwgcXVlc3Rpb25OYW1lLCBmaWxlVmFsdWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICh0aGlzLm9uRG93bmxvYWRGaWxlLmlzRW1wdHkpIHtcbiAgICAgICAgICAgICEhY2FsbGJhY2sgJiYgY2FsbGJhY2soXCJzdWNjZXNzXCIsIGZpbGVWYWx1ZS5jb250ZW50IHx8IGZpbGVWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbkRvd25sb2FkRmlsZS5maXJlKHRoaXMsIHtcbiAgICAgICAgICAgIHF1ZXN0aW9uOiBxdWVzdGlvbixcbiAgICAgICAgICAgIG5hbWU6IHF1ZXN0aW9uTmFtZSxcbiAgICAgICAgICAgIGNvbnRlbnQ6IGZpbGVWYWx1ZS5jb250ZW50IHx8IGZpbGVWYWx1ZSxcbiAgICAgICAgICAgIGZpbGVWYWx1ZTogZmlsZVZhbHVlLFxuICAgICAgICAgICAgY2FsbGJhY2s6IGNhbGxiYWNrLFxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5jbGVhckZpbGVzID0gZnVuY3Rpb24gKHF1ZXN0aW9uLCBuYW1lLCB2YWx1ZSwgZmlsZU5hbWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICh0aGlzLm9uQ2xlYXJGaWxlcy5pc0VtcHR5KSB7XG4gICAgICAgICAgICAhIWNhbGxiYWNrICYmIGNhbGxiYWNrKFwic3VjY2Vzc1wiLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbkNsZWFyRmlsZXMuZmlyZSh0aGlzLCB7XG4gICAgICAgICAgICBxdWVzdGlvbjogcXVlc3Rpb24sXG4gICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgZmlsZU5hbWU6IGZpbGVOYW1lLFxuICAgICAgICAgICAgY2FsbGJhY2s6IGNhbGxiYWNrLFxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS51cGRhdGVDaG9pY2VzRnJvbVNlcnZlciA9IGZ1bmN0aW9uIChxdWVzdGlvbiwgY2hvaWNlcywgc2VydmVyUmVzdWx0KSB7XG4gICAgICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgICAgICAgcXVlc3Rpb246IHF1ZXN0aW9uLFxuICAgICAgICAgICAgY2hvaWNlczogY2hvaWNlcyxcbiAgICAgICAgICAgIHNlcnZlclJlc3VsdDogc2VydmVyUmVzdWx0LFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLm9uTG9hZENob2ljZXNGcm9tU2VydmVyLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBvcHRpb25zLmNob2ljZXM7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUubG9hZGVkQ2hvaWNlc0Zyb21TZXJ2ZXIgPSBmdW5jdGlvbiAocXVlc3Rpb24pIHtcbiAgICAgICAgdGhpcy5sb2NTdHJzQ2hhbmdlZCgpO1xuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLmNyZWF0ZVN1cnZleVNlcnZpY2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBuZXcgX2R4U3VydmV5U2VydmljZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fW1wiZHhTdXJ2ZXlTZXJ2aWNlXCJdKCk7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUudXBsb2FkRmlsZXNDb3JlID0gZnVuY3Rpb24gKG5hbWUsIGZpbGVzLCB1cGxvYWRpbmdDYWxsYmFjaykge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgcmVzcG9uc2VzID0gW107XG4gICAgICAgIGZpbGVzLmZvckVhY2goZnVuY3Rpb24gKGZpbGUpIHtcbiAgICAgICAgICAgIGlmICh1cGxvYWRpbmdDYWxsYmFjaylcbiAgICAgICAgICAgICAgICB1cGxvYWRpbmdDYWxsYmFjayhcInVwbG9hZGluZ1wiLCBmaWxlKTtcbiAgICAgICAgICAgIF90aGlzLmNyZWF0ZVN1cnZleVNlcnZpY2UoKS5zZW5kRmlsZShfdGhpcy5zdXJ2ZXlQb3N0SWQsIGZpbGUsIGZ1bmN0aW9uIChzdWNjZXNzLCByZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlcy5wdXNoKHsgY29udGVudDogcmVzcG9uc2UsIGZpbGU6IGZpbGUgfSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZXMubGVuZ3RoID09PSBmaWxlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1cGxvYWRpbmdDYWxsYmFjaylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGxvYWRpbmdDYWxsYmFjayhcInN1Y2Nlc3NcIiwgcmVzcG9uc2VzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHVwbG9hZGluZ0NhbGxiYWNrKVxuICAgICAgICAgICAgICAgICAgICAgICAgdXBsb2FkaW5nQ2FsbGJhY2soXCJlcnJvclwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2U6IHJlc3BvbnNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU6IGZpbGUsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuZ2V0UGFnZSA9IGZ1bmN0aW9uIChpbmRleCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wYWdlc1tpbmRleF07XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBBZGRzIGFuIGV4aXN0aW5nIHBhZ2UgdG8gdGhlIHN1cnZleS5cbiAgICAgKiBAcGFyYW0gcGFnZSBBIHBhZ2UgdG8gYWRkLlxuICAgICAqIEBwYXJhbSBpbmRleCBBbiBpbmRleCBhdCB3aGljaCB0byBpbnNlcnQgdGhlIHBhZ2UuIElmIHlvdSBkbyBub3Qgc3BlY2lmeSB0aGlzIHBhcmFtZXRlciwgdGhlIHBhZ2Ugd2lsbCBiZSBhZGRlZCB0byB0aGUgZW5kLlxuICAgICAqIEBzZWUgYWRkTmV3UGFnZVxuICAgICAqIEBzZWUgY3JlYXRlTmV3UGFnZVxuICAgICAqL1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5hZGRQYWdlID0gZnVuY3Rpb24gKHBhZ2UsIGluZGV4KSB7XG4gICAgICAgIGlmIChpbmRleCA9PT0gdm9pZCAwKSB7IGluZGV4ID0gLTE7IH1cbiAgICAgICAgaWYgKHBhZ2UgPT0gbnVsbClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLnBhZ2VzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5wYWdlcy5wdXNoKHBhZ2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wYWdlcy5zcGxpY2UoaW5kZXgsIDAsIHBhZ2UpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IHBhZ2UgYW5kIGFkZHMgaXQgdG8gdGhlIHN1cnZleS5cbiAgICAgKlxuICAgICAqIElmIHlvdSB3YW50IHRvIHN3aXRjaCBhIHN1cnZleSB0byB0aGUgbmV3bHkgYWRkZWQgcGFnZSwgYXNzaWduIGl0cyBpbmRleCB0byB0aGUgW2BjdXJyZW50UGFnZU5vYF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL3N1cnZleS1kYXRhLW1vZGVsI2N1cnJlbnRQYWdlTm8pIHByb3BlcnR5IG9yIGFzc2lnbiB0aGUgZW50aXJlIHBhZ2UgdG8gdGhlIFtgY3VycmVudFBhZ2VgXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2Uvc3VydmV5LWRhdGEtbW9kZWwjY3VycmVudFBhZ2UpIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogQHBhcmFtIG5hbWUgQSBwYWdlIG5hbWUuIElmIHlvdSBkbyBub3Qgc3BlY2lmeSB0aGlzIHBhcmFtZXRlciwgaXQgd2lsbCBiZSBnZW5lcmF0ZWQgYXV0b21hdGljYWxseS5cbiAgICAgKiBAcGFyYW0gaW5kZXggQW4gaW5kZXggYXQgd2hpY2ggdG8gaW5zZXJ0IHRoZSBwYWdlLiBJZiB5b3UgZG8gbm90IHNwZWNpZnkgdGhpcyBwYXJhbWV0ZXIsIHRoZSBwYWdlIHdpbGwgYmUgYWRkZWQgdG8gdGhlIGVuZC5cbiAgICAgKiBAcmV0dXJucyBUaGUgY3JlYXRlZCBhbmQgYWRkZWQgcGFnZS5cbiAgICAgKiBAc2VlIGFkZFBhZ2VcbiAgICAgKiBAc2VlIGNyZWF0ZU5ld1BhZ2VcbiAgICAgKi9cbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuYWRkTmV3UGFnZSA9IGZ1bmN0aW9uIChuYW1lLCBpbmRleCkge1xuICAgICAgICBpZiAobmFtZSA9PT0gdm9pZCAwKSB7IG5hbWUgPSBudWxsOyB9XG4gICAgICAgIGlmIChpbmRleCA9PT0gdm9pZCAwKSB7IGluZGV4ID0gLTE7IH1cbiAgICAgICAgdmFyIHBhZ2UgPSB0aGlzLmNyZWF0ZU5ld1BhZ2UobmFtZSk7XG4gICAgICAgIHRoaXMuYWRkUGFnZShwYWdlLCBpbmRleCk7XG4gICAgICAgIHJldHVybiBwYWdlO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBhIHBhZ2UgZnJvbSB0aGUgc3VydmV5LlxuICAgICAqXG4gICAgICogUGFzcyBhIGBQYWdlTW9kZWxgIG9iamVjdCB0byB0aGlzIG1ldGhvZC4gWW91IGNhbiBnZXQgdGhpcyBvYmplY3QgaW4gZGlmZmVyZW50IHdheXMuIEZvciBleGFtcGxlLCB5b3UgY2FuIGNhbGwgdGhlIFtgZ2V0UGFnZUJ5TmFtZSgpYF0oI2dldFBhZ2VCeU5hbWUpIG1ldGhvZCB0byBvYnRhaW4gYSBgUGFnZU1vZGVsYCBvYmplY3Qgd2l0aCBhIHNwZWNpZmljIG5hbWUgb3IgdXNlIHRoZSBbYGN1cnJlbnRQYWdlYF0oI2N1cnJlbnRQYWdlKSBwcm9wZXJ0eSB0byBhY2Nlc3MgYW5kIGRlbGV0ZSB0aGUgY3VycmVudCBwYWdlLCBhcyBzaG93biBpbiB0aGUgY29kZSBiZWxvdy5cbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogLy8gRGVsZXRlIHRoZSBjdXJyZW50IHBhZ2VcbiAgICAgKiBzdXJ2ZXkucmVtb3ZlUGFnZShzdXJ2ZXkuY3VycmVudFBhZ2UpO1xuICAgICAqIGBgYFxuICAgICAqIEBwYXJhbSBwYWdlIEEgcGFnZSB0byByZW1vdmUuXG4gICAgICogQHNlZSBhZGROZXdQYWdlXG4gICAgICovXG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLnJlbW92ZVBhZ2UgPSBmdW5jdGlvbiAocGFnZSkge1xuICAgICAgICB2YXIgaW5kZXggPSB0aGlzLnBhZ2VzLmluZGV4T2YocGFnZSk7XG4gICAgICAgIGlmIChpbmRleCA8IDApXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMucGFnZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhZ2UgPT0gcGFnZSkge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMucGFnZXMubGVuZ3RoID4gMCA/IHRoaXMucGFnZXNbMF0gOiBudWxsO1xuICAgICAgICB9XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgcXVlc3Rpb24gd2l0aCBhIHNwZWNpZmllZCBbYG5hbWVgXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2UvcXVlc3Rpb24jbmFtZSkuXG4gICAgICogQHBhcmFtIG5hbWUgQSBxdWVzdGlvbiBuYW1lXG4gICAgICogQHBhcmFtIGNhc2VJbnNlbnNpdGl2ZSAoT3B0aW9uYWwpIEEgQm9vbGVhbiB2YWx1ZSB0aGF0IHNwZWNpZmllcyBjYXNlIHNlbnNpdGl2aXR5IHdoZW4gc2VhcmNoaW5nIGZvciB0aGUgcXVlc3Rpb24uIERlZmF1bHQgdmFsdWU6IGBmYWxzZWAgKHVwcGVyY2FzZSBhbmQgbG93ZXJjYXNlIGxldHRlcnMgYXJlIHRyZWF0ZWQgYXMgZGlzdGluY3QpLlxuICAgICAqIEByZXR1cm5zIEEgcXVlc3Rpb24gd2l0aCBhIHNwZWNpZmllZCBuYW1lLlxuICAgICAqIEBzZWUgZ2V0QWxsUXVlc3Rpb25zXG4gICAgICogQHNlZSBnZXRRdWVzdGlvbkJ5VmFsdWVOYW1lXG4gICAgICovXG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLmdldFF1ZXN0aW9uQnlOYW1lID0gZnVuY3Rpb24gKG5hbWUsIGNhc2VJbnNlbnNpdGl2ZSkge1xuICAgICAgICBpZiAoY2FzZUluc2Vuc2l0aXZlID09PSB2b2lkIDApIHsgY2FzZUluc2Vuc2l0aXZlID0gZmFsc2U7IH1cbiAgICAgICAgaWYgKCFuYW1lKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGlmIChjYXNlSW5zZW5zaXRpdmUpIHtcbiAgICAgICAgICAgIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGhhc2ggPSAhIWNhc2VJbnNlbnNpdGl2ZVxuICAgICAgICAgICAgPyB0aGlzLnF1ZXN0aW9uSGFzaGVzLm5hbWVzSW5zZW5zaXRpdmVcbiAgICAgICAgICAgIDogdGhpcy5xdWVzdGlvbkhhc2hlcy5uYW1lcztcbiAgICAgICAgdmFyIHJlcyA9IGhhc2hbbmFtZV07XG4gICAgICAgIGlmICghcmVzKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIHJldHVybiByZXNbMF07XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuZmluZFF1ZXN0aW9uQnlOYW1lID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UXVlc3Rpb25CeU5hbWUobmFtZSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgcXVlc3Rpb24gd2l0aCBhIHNwZWNpZmllZCBbYHZhbHVlTmFtZWBdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vYXBpLXJlZmVyZW5jZS9xdWVzdGlvbiN2YWx1ZU5hbWUpLlxuICAgICAqXG4gICAgICogPiBTaW5jZSBgdmFsdWVOYW1lYCBkb2VzIG5vdCBoYXZlIHRvIGJlIHVuaXF1ZSwgbXVsdGlwbGUgcXVlc3Rpb25zIGNhbiBoYXZlIHRoZSBzYW1lIGB2YWx1ZU5hbWVgIHZhbHVlLiBJbiB0aGlzIGNhc2UsIHRoZSBgZ2V0UXVlc3Rpb25CeVZhbHVlTmFtZSgpYCBtZXRob2QgcmV0dXJucyB0aGUgZmlyc3Qgc3VjaCBxdWVzdGlvbi4gSWYgeW91IG5lZWQgdG8gZ2V0IGFsbCBxdWVzdGlvbnMgd2l0aCB0aGUgc2FtZSBgdmFsdWVOYW1lYCwgY2FsbCB0aGUgYGdldFF1ZXN0aW9uc0J5VmFsdWVOYW1lKClgIG1ldGhvZC5cbiAgICAgKiBAcGFyYW0gdmFsdWVOYW1lIEEgcXVlc3Rpb24ncyBgdmFsdWVOYW1lYCBwcm9wZXJ0eSB2YWx1ZS5cbiAgICAgKiBAcGFyYW0gY2FzZUluc2Vuc2l0aXZlIChPcHRpb25hbCkgQSBCb29sZWFuIHZhbHVlIHRoYXQgc3BlY2lmaWVzIGNhc2Ugc2Vuc2l0aXZpdHkgd2hlbiBzZWFyY2hpbmcgZm9yIHRoZSBxdWVzdGlvbi4gRGVmYXVsdCB2YWx1ZTogYGZhbHNlYCAodXBwZXJjYXNlIGFuZCBsb3dlcmNhc2UgbGV0dGVycyBhcmUgdHJlYXRlZCBhcyBkaXN0aW5jdCkuXG4gICAgICogQHJldHVybnMgQSBxdWVzdGlvbiB3aXRoIGEgc3BlY2lmaWVkIGB2YWx1ZU5hbWVgLlxuICAgICAqIEBzZWUgZ2V0QWxsUXVlc3Rpb25zXG4gICAgICogQHNlZSBnZXRRdWVzdGlvbkJ5TmFtZVxuICAgICAqL1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5nZXRRdWVzdGlvbkJ5VmFsdWVOYW1lID0gZnVuY3Rpb24gKHZhbHVlTmFtZSwgY2FzZUluc2Vuc2l0aXZlKSB7XG4gICAgICAgIGlmIChjYXNlSW5zZW5zaXRpdmUgPT09IHZvaWQgMCkgeyBjYXNlSW5zZW5zaXRpdmUgPSBmYWxzZTsgfVxuICAgICAgICB2YXIgcmVzID0gdGhpcy5nZXRRdWVzdGlvbnNCeVZhbHVlTmFtZSh2YWx1ZU5hbWUsIGNhc2VJbnNlbnNpdGl2ZSk7XG4gICAgICAgIHJldHVybiAhIXJlcyA/IHJlc1swXSA6IG51bGw7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFsbCBxdWVzdGlvbnMgd2l0aCBhIHNwZWNpZmllZCBbYHZhbHVlTmFtZWBdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vYXBpLXJlZmVyZW5jZS9xdWVzdGlvbiN2YWx1ZU5hbWUpLiBJZiBhIHF1ZXN0aW9uJ3MgYHZhbHVlTmFtZWAgaXMgdW5kZWZpbmVkLCBpdHMgW2BuYW1lYF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL3F1ZXN0aW9uI25hbWUpIHByb3BlcnR5IGlzIHVzZWQuXG4gICAgICogQHBhcmFtIHZhbHVlTmFtZSBBIHF1ZXN0aW9uJ3MgYHZhbHVlTmFtZWAgcHJvcGVydHkgdmFsdWUuXG4gICAgICogQHBhcmFtIGNhc2VJbnNlbnNpdGl2ZSAoT3B0aW9uYWwpIEEgQm9vbGVhbiB2YWx1ZSB0aGF0IHNwZWNpZmllcyBjYXNlIHNlbnNpdGl2aXR5IHdoZW4gc2VhcmNoaW5nIGZvciB0aGUgcXVlc3Rpb25zLiBEZWZhdWx0IHZhbHVlOiBgZmFsc2VgICh1cHBlcmNhc2UgYW5kIGxvd2VyY2FzZSBsZXR0ZXJzIGFyZSB0cmVhdGVkIGFzIGRpc3RpbmN0KS5cbiAgICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBxdWVzdGlvbnMgd2l0aCBhIHNwZWNpZmllZCBgdmFsdWVOYW1lYC5cbiAgICAgKiBAc2VlIGdldEFsbFF1ZXN0aW9uc1xuICAgICAqIEBzZWUgZ2V0UXVlc3Rpb25CeU5hbWVcbiAgICAgKi9cbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuZ2V0UXVlc3Rpb25zQnlWYWx1ZU5hbWUgPSBmdW5jdGlvbiAodmFsdWVOYW1lLCBjYXNlSW5zZW5zaXRpdmUpIHtcbiAgICAgICAgaWYgKGNhc2VJbnNlbnNpdGl2ZSA9PT0gdm9pZCAwKSB7IGNhc2VJbnNlbnNpdGl2ZSA9IGZhbHNlOyB9XG4gICAgICAgIHZhciBoYXNoID0gISFjYXNlSW5zZW5zaXRpdmVcbiAgICAgICAgICAgID8gdGhpcy5xdWVzdGlvbkhhc2hlcy52YWx1ZU5hbWVzSW5zZW5zaXRpdmVcbiAgICAgICAgICAgIDogdGhpcy5xdWVzdGlvbkhhc2hlcy52YWx1ZU5hbWVzO1xuICAgICAgICB2YXIgcmVzID0gaGFzaFt2YWx1ZU5hbWVdO1xuICAgICAgICBpZiAoIXJlcylcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLmdldENhbGN1bGF0ZWRWYWx1ZUJ5TmFtZSA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jYWxjdWxhdGVkVmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAobmFtZSA9PSB0aGlzLmNhbGN1bGF0ZWRWYWx1ZXNbaV0ubmFtZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jYWxjdWxhdGVkVmFsdWVzW2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbiBhcnJheSBvZiBxdWVzdGlvbnMgd2l0aCBzcGVjaWZpZWQgW25hbWVzXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2UvcXVlc3Rpb24jbmFtZSkuXG4gICAgICogQHBhcmFtIG5hbWVzIEFuIGFycmF5IG9mIHF1ZXN0aW9uIG5hbWVzLlxuICAgICAqIEBwYXJhbSBjYXNlSW5zZW5zaXRpdmUgKE9wdGlvbmFsKSBBIEJvb2xlYW4gdmFsdWUgdGhhdCBzcGVjaWZpZXMgY2FzZSBzZW5zaXRpdml0eSB3aGVuIHNlYXJjaGluZyBmb3IgdGhlIHF1ZXN0aW9ucy4gRGVmYXVsdCB2YWx1ZTogYGZhbHNlYCAodXBwZXJjYXNlIGFuZCBsb3dlcmNhc2UgbGV0dGVycyBhcmUgdHJlYXRlZCBhcyBkaXN0aW5jdCkuXG4gICAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgcXVlc3Rpb25zIHdpdGggc3BlY2lmaWVkIG5hbWVzXG4gICAgICogQHNlZSBnZXRBbGxRdWVzdGlvbnNcbiAgICAgKi9cbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuZ2V0UXVlc3Rpb25zQnlOYW1lcyA9IGZ1bmN0aW9uIChuYW1lcywgY2FzZUluc2Vuc2l0aXZlKSB7XG4gICAgICAgIGlmIChjYXNlSW5zZW5zaXRpdmUgPT09IHZvaWQgMCkgeyBjYXNlSW5zZW5zaXRpdmUgPSBmYWxzZTsgfVxuICAgICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICAgIGlmICghbmFtZXMpXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoIW5hbWVzW2ldKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgdmFyIHF1ZXN0aW9uID0gdGhpcy5nZXRRdWVzdGlvbkJ5TmFtZShuYW1lc1tpXSwgY2FzZUluc2Vuc2l0aXZlKTtcbiAgICAgICAgICAgIGlmIChxdWVzdGlvbilcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChxdWVzdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBwYWdlIHRvIHdoaWNoIGEgc3BlY2lmaWVkIHN1cnZleSBlbGVtZW50IChxdWVzdGlvbiBvciBwYW5lbCkgYmVsb25ncy5cbiAgICAgKiBAcGFyYW0gZWxlbWVudCBBIHF1ZXN0aW9uIG9yIHBhbmVsIGluc3RhbmNlLlxuICAgICAqL1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5nZXRQYWdlQnlFbGVtZW50ID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgcGFnZSA9IHRoaXMucGFnZXNbaV07XG4gICAgICAgICAgICBpZiAocGFnZS5jb250YWluc0VsZW1lbnQoZWxlbWVudCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhZ2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgcGFnZSB0byB3aGljaCBhIHNwZWNpZmllZCBxdWVzdGlvbiBiZWxvbmdzLlxuICAgICAqIEBwYXJhbSBxdWVzdGlvbiBBIHF1ZXN0aW9uIGluc3RhbmNlLlxuICAgICAqL1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5nZXRQYWdlQnlRdWVzdGlvbiA9IGZ1bmN0aW9uIChxdWVzdGlvbikge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRQYWdlQnlFbGVtZW50KHF1ZXN0aW9uKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBwYWdlIHdpdGggYSBzcGVjaWZpZWQgbmFtZS5cbiAgICAgKiBAcGFyYW0gbmFtZSBBIHBhZ2UgW25hbWVdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vYXBpLXJlZmVyZW5jZS9wYWdlLW1vZGVsI25hbWUpLlxuICAgICAqL1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5nZXRQYWdlQnlOYW1lID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wYWdlc1tpXS5uYW1lID09IG5hbWUpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFnZXNbaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIGFycmF5IG9mIHBhZ2VzIHdpdGggc3BlY2lmaWVkIG5hbWVzLlxuICAgICAqIEBwYXJhbSBuYW1lcyBBbiBhcnJheSBvZiBwYWdlIG5hbWVzLlxuICAgICAqL1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5nZXRQYWdlc0J5TmFtZXMgPSBmdW5jdGlvbiAobmFtZXMpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgICAgICBpZiAoIW5hbWVzKVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKCFuYW1lc1tpXSlcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIHZhciBwYWdlID0gdGhpcy5nZXRQYWdlQnlOYW1lKG5hbWVzW2ldKTtcbiAgICAgICAgICAgIGlmIChwYWdlKVxuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHBhZ2UpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBhbGwgW3F1ZXN0aW9uc10oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL3F1ZXN0aW9uKSBpbiB0aGUgc3VydmV5LlxuICAgICAqIEBwYXJhbSB2aXNpYmxlT25seSBBIEJvb2xlYW4gdmFsdWUgdGhhdCBzcGVjaWZpZXMgd2hldGhlciB0byBpbmNsdWRlIG9ubHkgdmlzaWJsZSBxdWVzdGlvbnMuXG4gICAgICogQHBhcmFtIGluY2x1ZGVEZXNpZ25UaW1lIEZvciBpbnRlcm5hbCB1c2UuXG4gICAgICogQHBhcmFtIGluY2x1ZGVOZXN0ZWQgQSBCb29sZWFuIHZhbHVlIHRoYXQgc3BlY2lmaWVzIHdoZXRoZXIgdG8gaW5jbHVkZSBuZXN0ZWQgcXVlc3Rpb25zLCBzdWNoIGFzIHF1ZXN0aW9ucyB3aXRoaW4gbWF0cml4IGNlbGxzLlxuICAgICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHF1ZXN0aW9ucy5cbiAgICAgKiBAc2VlIGdldFF1ZXN0aW9uQnlOYW1lXG4gICAgICovXG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLmdldEFsbFF1ZXN0aW9ucyA9IGZ1bmN0aW9uICh2aXNpYmxlT25seSwgaW5jbHVkZURlc2lnblRpbWUsIGluY2x1ZGVOZXN0ZWQpIHtcbiAgICAgICAgaWYgKHZpc2libGVPbmx5ID09PSB2b2lkIDApIHsgdmlzaWJsZU9ubHkgPSBmYWxzZTsgfVxuICAgICAgICBpZiAoaW5jbHVkZURlc2lnblRpbWUgPT09IHZvaWQgMCkgeyBpbmNsdWRlRGVzaWduVGltZSA9IGZhbHNlOyB9XG4gICAgICAgIGlmIChpbmNsdWRlTmVzdGVkID09PSB2b2lkIDApIHsgaW5jbHVkZU5lc3RlZCA9IGZhbHNlOyB9XG4gICAgICAgIGlmIChpbmNsdWRlTmVzdGVkKVxuICAgICAgICAgICAgaW5jbHVkZURlc2lnblRpbWUgPSBmYWxzZTtcbiAgICAgICAgdmFyIHJlcyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMucGFnZXNbaV0uYWRkUXVlc3Rpb25zVG9MaXN0KHJlcywgdmlzaWJsZU9ubHksIGluY2x1ZGVEZXNpZ25UaW1lKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWluY2x1ZGVOZXN0ZWQpXG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB2YXIgcmVzMiA9IFtdO1xuICAgICAgICByZXMuZm9yRWFjaChmdW5jdGlvbiAocSkge1xuICAgICAgICAgICAgcmVzMi5wdXNoKHEpO1xuICAgICAgICAgICAgcS5nZXROZXN0ZWRRdWVzdGlvbnModmlzaWJsZU9ubHkpLmZvckVhY2goZnVuY3Rpb24gKG5RKSB7IHJldHVybiByZXMyLnB1c2goblEpOyB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXMyO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbiBhcnJheSBvZiBxdWl6IHF1ZXN0aW9ucy4gQSBxdWVzdGlvbiBjb3VudHMgaWYgaXQgaXMgdmlzaWJsZSwgaGFzIGFuIGlucHV0IGZpZWxkLCBhbmQgc3BlY2lmaWVzIFtgY29ycmVjdEFuc3dlcmBdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vYXBpLXJlZmVyZW5jZS9jaGVja2JveC1xdWVzdGlvbi1tb2RlbCNjb3JyZWN0QW5zd2VyKS5cbiAgICAgKlxuICAgICAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHF1aXp6ZXMsIHJlZmVyIHRvIHRoZSBmb2xsb3dpbmcgdHV0b3JpYWw6IFtDcmVhdGUgYSBRdWl6XShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2Rlc2lnbi1zdXJ2ZXkvY3JlYXRlLWEtcXVpeikuXG4gICAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgcXVpeiBxdWVzdGlvbnMuXG4gICAgICogQHNlZSBnZXRRdWl6UXVlc3Rpb25Db3VudFxuICAgICAqL1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5nZXRRdWl6UXVlc3Rpb25zID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IEFycmF5KCk7XG4gICAgICAgIHZhciBzdGFydEluZGV4ID0gdGhpcy5nZXRQYWdlU3RhcnRJbmRleCgpO1xuICAgICAgICBmb3IgKHZhciBpID0gc3RhcnRJbmRleDsgaSA8IHRoaXMucGFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5wYWdlc1tpXS5pc1Zpc2libGUpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5wYWdlc1tpXS5xdWVzdGlvbnM7XG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHF1ZXN0aW9ucy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIHZhciBxID0gcXVlc3Rpb25zW2pdO1xuICAgICAgICAgICAgICAgIGlmIChxLnF1aXpRdWVzdGlvbkNvdW50ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBbcGFuZWxdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vYXBpLXJlZmVyZW5jZS9wYW5lbC1tb2RlbCkgd2l0aCBhIHNwZWNpZmllZCBbYG5hbWVgXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2UvcGFuZWwtbW9kZWwjbmFtZSkuXG4gICAgICogQHBhcmFtIG5hbWUgQSBwYW5lbCBuYW1lLlxuICAgICAqIEBwYXJhbSBjYXNlSW5zZW5zaXRpdmUgKE9wdGlvbmFsKSBBIEJvb2xlYW4gdmFsdWUgdGhhdCBzcGVjaWZpZXMgY2FzZSBzZW5zaXRpdml0eSB3aGVuIHNlYXJjaGluZyBmb3IgdGhlIHBhbmVsLiBEZWZhdWx0IHZhbHVlOiBgZmFsc2VgICh1cHBlcmNhc2UgYW5kIGxvd2VyY2FzZSBsZXR0ZXJzIGFyZSB0cmVhdGVkIGFzIGRpc3RpbmN0KS5cbiAgICAgKiBAcmV0dXJucyBBIHBhbmVsIHdpdGggYSBzcGVjaWZpZWQgbmFtZS5cbiAgICAgKiBAc2VlIGdldEFsbFBhbmVsc1xuICAgICAqL1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5nZXRQYW5lbEJ5TmFtZSA9IGZ1bmN0aW9uIChuYW1lLCBjYXNlSW5zZW5zaXRpdmUpIHtcbiAgICAgICAgaWYgKGNhc2VJbnNlbnNpdGl2ZSA9PT0gdm9pZCAwKSB7IGNhc2VJbnNlbnNpdGl2ZSA9IGZhbHNlOyB9XG4gICAgICAgIHZhciBwYW5lbHMgPSB0aGlzLmdldEFsbFBhbmVscygpO1xuICAgICAgICBpZiAoY2FzZUluc2Vuc2l0aXZlKVxuICAgICAgICAgICAgbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYW5lbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBwYW5lbE5hbWUgPSBwYW5lbHNbaV0ubmFtZTtcbiAgICAgICAgICAgIGlmIChjYXNlSW5zZW5zaXRpdmUpXG4gICAgICAgICAgICAgICAgcGFuZWxOYW1lID0gcGFuZWxOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICBpZiAocGFuZWxOYW1lID09IG5hbWUpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhbmVsc1tpXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBsaXN0IG9mIGFsbCBbcGFuZWxzXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2UvcGFuZWwtbW9kZWwpIGluIHRoZSBzdXJ2ZXkuXG4gICAgICogQHBhcmFtIHZpc2libGVPbmx5IEEgQm9vbGVhbiB2YWx1ZSB0aGF0IHNwZWNpZmllcyB3aGV0aGVyIHRvIGluY2x1ZGUgb25seSB2aXNpYmxlIHBhbmVscy5cbiAgICAgKiBAcGFyYW0gaW5jbHVkZURlc2lnblRpbWUgRm9yIGludGVybmFsIHVzZS5cbiAgICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBwYW5lbHMuXG4gICAgICogQHNlZSBnZXRQYW5lbEJ5TmFtZVxuICAgICAqL1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5nZXRBbGxQYW5lbHMgPSBmdW5jdGlvbiAodmlzaWJsZU9ubHksIGluY2x1ZGVEZXNpZ25UaW1lKSB7XG4gICAgICAgIGlmICh2aXNpYmxlT25seSA9PT0gdm9pZCAwKSB7IHZpc2libGVPbmx5ID0gZmFsc2U7IH1cbiAgICAgICAgaWYgKGluY2x1ZGVEZXNpZ25UaW1lID09PSB2b2lkIDApIHsgaW5jbHVkZURlc2lnblRpbWUgPSBmYWxzZTsgfVxuICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IEFycmF5KCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5wYWdlc1tpXS5hZGRQYW5lbHNJbnRvTGlzdChyZXN1bHQsIHZpc2libGVPbmx5LCBpbmNsdWRlRGVzaWduVGltZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW5kIHJldHVybnMgYSBuZXcgcGFnZSBidXQgZG9lcyBub3QgYWRkIGl0IHRvIHRoZSBzdXJ2ZXkuXG4gICAgICpcbiAgICAgKiBDYWxsIHRoZSBbYGFkZFBhZ2UocGFnZSlgXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2Uvc3VydmV5LWRhdGEtbW9kZWwjYWRkUGFnZSkgbWV0aG9kIHRvIGFkZCB0aGUgY3JlYXRlZCBwYWdlIHRvIHRoZSBzdXJ2ZXkgbGF0ZXIgb3IgdGhlIFtgYWRkTmV3UGFnZShuYW1lLCBpbmRleClgXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2Uvc3VydmV5LWRhdGEtbW9kZWwjYWRkTmV3UGFnZSkgbWV0aG9kIHRvIGNyZWF0ZSBfYW5kXyBhZGQgYSBwYWdlIHRvIHRoZSBzdXJ2ZXkuXG4gICAgICogQHNlZSBhZGRQYWdlXG4gICAgICogQHNlZSBhZGROZXdQYWdlXG4gICAgICovXG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLmNyZWF0ZU5ld1BhZ2UgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICB2YXIgcGFnZSA9IF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJTZXJpYWxpemVyXCJdLmNyZWF0ZUNsYXNzKFwicGFnZVwiKTtcbiAgICAgICAgcGFnZS5uYW1lID0gbmFtZTtcbiAgICAgICAgcmV0dXJuIHBhZ2U7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUucXVlc3Rpb25PblZhbHVlQ2hhbmdpbmcgPSBmdW5jdGlvbiAodmFsdWVOYW1lLCBuZXdWYWx1ZSkge1xuICAgICAgICBpZiAoISF0aGlzLmVkaXRpbmdPYmopIHtcbiAgICAgICAgICAgIHZhciBwcm9wID0gX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlNlcmlhbGl6ZXJcIl0uZmluZFByb3BlcnR5KHRoaXMuZWRpdGluZ09iai5nZXRUeXBlKCksIHZhbHVlTmFtZSk7XG4gICAgICAgICAgICBpZiAoISFwcm9wKVxuICAgICAgICAgICAgICAgIG5ld1ZhbHVlID0gcHJvcC5zZXR0aW5nVmFsdWUodGhpcy5lZGl0aW5nT2JqLCBuZXdWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub25WYWx1ZUNoYW5naW5nLmlzRW1wdHkpXG4gICAgICAgICAgICByZXR1cm4gbmV3VmFsdWU7XG4gICAgICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgICAgICAgbmFtZTogdmFsdWVOYW1lLFxuICAgICAgICAgICAgcXVlc3Rpb246IHRoaXMuZ2V0UXVlc3Rpb25CeVZhbHVlTmFtZSh2YWx1ZU5hbWUpLFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuZ2V0VW5iaW5kVmFsdWUobmV3VmFsdWUpLFxuICAgICAgICAgICAgb2xkVmFsdWU6IHRoaXMuZ2V0VmFsdWUodmFsdWVOYW1lKSxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5vblZhbHVlQ2hhbmdpbmcuZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMudmFsdWU7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUudXBkYXRlUXVlc3Rpb25WYWx1ZSA9IGZ1bmN0aW9uICh2YWx1ZU5hbWUsIG5ld1ZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLmlzTG9hZGluZ0Zyb21Kc29uKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5nZXRRdWVzdGlvbnNCeVZhbHVlTmFtZSh2YWx1ZU5hbWUpO1xuICAgICAgICBpZiAoISFxdWVzdGlvbnMpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIHFWYWx1ZSA9IHF1ZXN0aW9uc1tpXS52YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAoKHFWYWx1ZSA9PT0gbmV3VmFsdWUgJiYgQXJyYXkuaXNBcnJheShxVmFsdWUpICYmICEhdGhpcy5lZGl0aW5nT2JqKSB8fFxuICAgICAgICAgICAgICAgICAgICAhdGhpcy5pc1R3b1ZhbHVlRXF1YWxzKHFWYWx1ZSwgbmV3VmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uc1tpXS51cGRhdGVWYWx1ZUZyb21TdXJ2ZXkobmV3VmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLmNoZWNrUXVlc3Rpb25FcnJvck9uVmFsdWVDaGFuZ2VkID0gZnVuY3Rpb24gKHF1ZXN0aW9uKSB7XG4gICAgICAgIGlmICghdGhpcy5pc05hdmlnYXRpb25CdXR0b25QcmVzc2VkICYmXG4gICAgICAgICAgICAodGhpcy5pc1ZhbGlkYXRlT25WYWx1ZUNoYW5nZWQgfHxcbiAgICAgICAgICAgICAgICBxdWVzdGlvbi5nZXRBbGxFcnJvcnMoKS5sZW5ndGggPiAwKSkge1xuICAgICAgICAgICAgdGhpcy5jaGVja1F1ZXN0aW9uRXJyb3JPblZhbHVlQ2hhbmdlZENvcmUocXVlc3Rpb24pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuY2hlY2tRdWVzdGlvbkVycm9yT25WYWx1ZUNoYW5nZWRDb3JlID0gZnVuY3Rpb24gKHF1ZXN0aW9uKSB7XG4gICAgICAgIHZhciBvbGRFcnJvckNvdW50ID0gcXVlc3Rpb24uZ2V0QWxsRXJyb3JzKCkubGVuZ3RoO1xuICAgICAgICB2YXIgcmVzID0gIXF1ZXN0aW9uLnZhbGlkYXRlKHRydWUsIHtcbiAgICAgICAgICAgIGlzT25WYWx1ZUNoYW5nZWQ6ICF0aGlzLmlzVmFsaWRhdGVPblZhbHVlQ2hhbmdpbmcsXG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgaXNDaGVja0Vycm9yT25DaGFuZ2VkID0gdGhpcy5jaGVja0Vycm9yc01vZGUuaW5kZXhPZihcIlZhbHVlXCIpID4gLTE7XG4gICAgICAgIGlmICghIXF1ZXN0aW9uLnBhZ2UgJiYgaXNDaGVja0Vycm9yT25DaGFuZ2VkICYmXG4gICAgICAgICAgICAob2xkRXJyb3JDb3VudCA+IDAgfHwgcXVlc3Rpb24uZ2V0QWxsRXJyb3JzKCkubGVuZ3RoID4gMCkpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZVZhbGlkYXRlZEVycm9yc09uUGFnZShxdWVzdGlvbi5wYWdlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLmNoZWNrRXJyb3JzT25WYWx1ZUNoYW5naW5nID0gZnVuY3Rpb24gKHZhbHVlTmFtZSwgbmV3VmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNMb2FkaW5nRnJvbUpzb24pXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLmdldFF1ZXN0aW9uc0J5VmFsdWVOYW1lKHZhbHVlTmFtZSk7XG4gICAgICAgIGlmICghcXVlc3Rpb25zKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB2YXIgcmVzID0gZmFsc2U7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgcSA9IHF1ZXN0aW9uc1tpXTtcbiAgICAgICAgICAgIGlmICghdGhpcy5pc1R3b1ZhbHVlRXF1YWxzKHEudmFsdWVGb3JTdXJ2ZXksIG5ld1ZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHEudmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmNoZWNrUXVlc3Rpb25FcnJvck9uVmFsdWVDaGFuZ2VkQ29yZShxKSlcbiAgICAgICAgICAgICAgICByZXMgPSB0cnVlO1xuICAgICAgICAgICAgcmVzID0gcmVzIHx8IHEuZXJyb3JzLmxlbmd0aCA+IDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5ub3RpZnlRdWVzdGlvbk9uVmFsdWVDaGFuZ2VkID0gZnVuY3Rpb24gKHZhbHVlTmFtZSwgbmV3VmFsdWUsIHF1ZXN0aW9uTmFtZSkge1xuICAgICAgICBpZiAodGhpcy5pc0xvYWRpbmdGcm9tSnNvbilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMuZ2V0UXVlc3Rpb25zQnlWYWx1ZU5hbWUodmFsdWVOYW1lKTtcbiAgICAgICAgaWYgKCEhcXVlc3Rpb25zKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciBxdWVzdGlvbiA9IHF1ZXN0aW9uc1tpXTtcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrUXVlc3Rpb25FcnJvck9uVmFsdWVDaGFuZ2VkKHF1ZXN0aW9uKTtcbiAgICAgICAgICAgICAgICBxdWVzdGlvbi5vblN1cnZleVZhbHVlQ2hhbmdlZChuZXdWYWx1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5vblZhbHVlQ2hhbmdlZC5maXJlKHRoaXMsIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogdmFsdWVOYW1lLFxuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbjogcXVlc3Rpb24sXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBuZXdWYWx1ZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub25WYWx1ZUNoYW5nZWQuZmlyZSh0aGlzLCB7XG4gICAgICAgICAgICAgICAgbmFtZTogdmFsdWVOYW1lLFxuICAgICAgICAgICAgICAgIHF1ZXN0aW9uOiBudWxsLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBuZXdWYWx1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzRGlzcG9zZWQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMuY2hlY2tFbGVtZW50c0JpbmRpbmdzKHZhbHVlTmFtZSwgbmV3VmFsdWUpO1xuICAgICAgICB0aGlzLm5vdGlmeUVsZW1lbnRzT25BbnlWYWx1ZU9yVmFyaWFibGVDaGFuZ2VkKHZhbHVlTmFtZSwgcXVlc3Rpb25OYW1lKTtcbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5jaGVja0VsZW1lbnRzQmluZGluZ3MgPSBmdW5jdGlvbiAodmFsdWVOYW1lLCBuZXdWYWx1ZSkge1xuICAgICAgICB0aGlzLmlzUnVubmluZ0VsZW1lbnRzQmluZGluZ3MgPSB0cnVlO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMucGFnZXNbaV0uY2hlY2tCaW5kaW5ncyh2YWx1ZU5hbWUsIG5ld1ZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlzUnVubmluZ0VsZW1lbnRzQmluZGluZ3MgPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMudXBkYXRlVmlzaWJsZUluZGV4QWZ0ZXJCaW5kaW5ncykge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVWaXNpYmxlSW5kZXhlcygpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVWaXNpYmxlSW5kZXhBZnRlckJpbmRpbmdzID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5ub3RpZnlFbGVtZW50c09uQW55VmFsdWVPclZhcmlhYmxlQ2hhbmdlZCA9IGZ1bmN0aW9uIChuYW1lLCBxdWVzdGlvbk5hbWUpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNFbmRMb2FkaW5nRnJvbUpzb24gPT09IFwicHJvY2Vzc2luZ1wiKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAodGhpcy5pc1J1bm5pbmdDb25kaXRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLmNvbmRpdGlvbk5vdGlmeUVsZW1lbnRzT25BbnlWYWx1ZU9yVmFyaWFibGVDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMucGFnZXNbaV0ub25BbnlWYWx1ZUNoYW5nZWQobmFtZSwgcXVlc3Rpb25OYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuaXNFbmRMb2FkaW5nRnJvbUpzb24pIHtcbiAgICAgICAgICAgIHRoaXMubG9jU3Ryc0NoYW5nZWQoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLnVwZGF0ZUFsbFF1ZXN0aW9uc1ZhbHVlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5nZXRBbGxRdWVzdGlvbnMoKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBxID0gcXVlc3Rpb25zW2ldO1xuICAgICAgICAgICAgdmFyIHZhbE5hbWUgPSBxLmdldFZhbHVlTmFtZSgpO1xuICAgICAgICAgICAgcS51cGRhdGVWYWx1ZUZyb21TdXJ2ZXkodGhpcy5nZXRWYWx1ZSh2YWxOYW1lKSk7XG4gICAgICAgICAgICBpZiAocS5yZXF1aXJlVXBkYXRlQ29tbWVudFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcS51cGRhdGVDb21tZW50RnJvbVN1cnZleSh0aGlzLmdldENvbW1lbnQodmFsTmFtZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUubm90aWZ5QWxsUXVlc3Rpb25zT25WYWx1ZUNoYW5nZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLmdldEFsbFF1ZXN0aW9ucygpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgcXVlc3Rpb25zW2ldLm9uU3VydmV5VmFsdWVDaGFuZ2VkKHRoaXMuZ2V0VmFsdWUocXVlc3Rpb25zW2ldLmdldFZhbHVlTmFtZSgpKSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5jaGVja09uUGFnZVRyaWdnZXJzID0gZnVuY3Rpb24gKGlzT25Db21wbGV0ZSkge1xuICAgICAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5nZXRDdXJyZW50UGFnZVF1ZXN0aW9ucyh0cnVlKTtcbiAgICAgICAgdmFyIHZhbHVlcyA9IHt9O1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIHF1ZXN0aW9uID0gcXVlc3Rpb25zW2ldO1xuICAgICAgICAgICAgdmFyIG5hbWUgPSBxdWVzdGlvbi5nZXRWYWx1ZU5hbWUoKTtcbiAgICAgICAgICAgIHZhbHVlc1tuYW1lXSA9IHRoaXMuZ2V0VmFsdWUobmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hZGRDYWxjdWxhdGVkVmFsdWVzSW50b0ZpbHRlcmVkVmFsdWVzKHZhbHVlcyk7XG4gICAgICAgIHRoaXMuY2hlY2tUcmlnZ2Vycyh2YWx1ZXMsIHRydWUsIGlzT25Db21wbGV0ZSk7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuZ2V0Q3VycmVudFBhZ2VRdWVzdGlvbnMgPSBmdW5jdGlvbiAoaW5jbHVkZUludnNpYmxlKSB7XG4gICAgICAgIGlmIChpbmNsdWRlSW52c2libGUgPT09IHZvaWQgMCkgeyBpbmNsdWRlSW52c2libGUgPSBmYWxzZTsgfVxuICAgICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICAgIHZhciBwYWdlID0gdGhpcy5jdXJyZW50UGFnZTtcbiAgICAgICAgaWYgKCFwYWdlKVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYWdlLnF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIHF1ZXN0aW9uID0gcGFnZS5xdWVzdGlvbnNbaV07XG4gICAgICAgICAgICBpZiAoKCFpbmNsdWRlSW52c2libGUgJiYgIXF1ZXN0aW9uLnZpc2libGUpIHx8ICFxdWVzdGlvbi5uYW1lKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2gocXVlc3Rpb24pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuY2hlY2tUcmlnZ2VycyA9IGZ1bmN0aW9uIChrZXksIGlzT25OZXh0UGFnZSwgaXNPbkNvbXBsZXRlLCBuYW1lKSB7XG4gICAgICAgIGlmIChpc09uQ29tcGxldGUgPT09IHZvaWQgMCkgeyBpc09uQ29tcGxldGUgPSBmYWxzZTsgfVxuICAgICAgICBpZiAodGhpcy5pc0NvbXBsZXRlZCB8fCB0aGlzLnRyaWdnZXJzLmxlbmd0aCA9PSAwIHx8IHRoaXMuaXNEaXNwbGF5TW9kZSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKHRoaXMuaXNUcmlnZ2VySXNSdW5uaW5nKSB7XG4gICAgICAgICAgICB0aGlzLnRyaWdnZXJWYWx1ZXMgPSB0aGlzLmdldEZpbHRlcmVkVmFsdWVzKCk7XG4gICAgICAgICAgICBmb3IgKHZhciBrIGluIGtleSkge1xuICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlcktleXNba10gPSBrZXlba107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGlzUXVlc3Rpb25JbnZhbGlkID0gZmFsc2U7XG4gICAgICAgIGlmICghaXNPbkNvbXBsZXRlICYmIG5hbWUgJiYgdGhpcy5oYXNSZXF1aXJlZFZhbGlkUXVlc3Rpb25UcmlnZ2VyKSB7XG4gICAgICAgICAgICB2YXIgcXVlc3Rpb24gPSB0aGlzLmdldFF1ZXN0aW9uQnlWYWx1ZU5hbWUobmFtZSk7XG4gICAgICAgICAgICBpc1F1ZXN0aW9uSW52YWxpZCA9IHF1ZXN0aW9uICYmICFxdWVzdGlvbi52YWxpZGF0ZShmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc1RyaWdnZXJJc1J1bm5pbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLnRyaWdnZXJLZXlzID0ga2V5O1xuICAgICAgICB0aGlzLnRyaWdnZXJWYWx1ZXMgPSB0aGlzLmdldEZpbHRlcmVkVmFsdWVzKCk7XG4gICAgICAgIHZhciBwcm9wZXJ0aWVzID0gdGhpcy5nZXRGaWx0ZXJlZFByb3BlcnRpZXMoKTtcbiAgICAgICAgdmFyIHByZXZDYW5CZUNvbXBsZXRlZCA9IHRoaXMuY2FuQmVDb21wbGV0ZWRCeVRyaWdnZXI7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50cmlnZ2Vycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIHRyaWdnZXIgPSB0aGlzLnRyaWdnZXJzW2ldO1xuICAgICAgICAgICAgaWYgKGlzUXVlc3Rpb25JbnZhbGlkICYmIHRyaWdnZXIucmVxdWlyZVZhbGlkUXVlc3Rpb24pXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB0cmlnZ2VyLmNoZWNrRXhwcmVzc2lvbihpc09uTmV4dFBhZ2UsIGlzT25Db21wbGV0ZSwgdGhpcy50cmlnZ2VyS2V5cywgdGhpcy50cmlnZ2VyVmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJldkNhbkJlQ29tcGxldGVkICE9PSB0aGlzLmNhbkJlQ29tcGxldGVkQnlUcmlnZ2VyKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUJ1dHRvbnNWaXNpYmlsaXR5KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc1RyaWdnZXJJc1J1bm5pbmcgPSBmYWxzZTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwiaGFzUmVxdWlyZWRWYWxpZFF1ZXN0aW9uVHJpZ2dlclwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRyaWdnZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudHJpZ2dlcnNbaV0ucmVxdWlyZVZhbGlkUXVlc3Rpb24pXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLmRvRWxlbWVudHNPbkxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5wYWdlc1tpXS5vblN1cnZleUxvYWQoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleU1vZGVsLnByb3RvdHlwZSwgXCJpc1J1bm5pbmdDb25kaXRpb25zXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gISF0aGlzLmNvbmRpdGlvblZhbHVlcztcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5ydW5Db25kaXRpb25zID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5pc0NvbXBsZXRlZCB8fFxuICAgICAgICAgICAgdGhpcy5pc0VuZExvYWRpbmdGcm9tSnNvbiA9PT0gXCJwcm9jZXNzaW5nXCIgfHxcbiAgICAgICAgICAgIHRoaXMuaXNSdW5uaW5nQ29uZGl0aW9ucylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5jb25kaXRpb25WYWx1ZXMgPSB0aGlzLmdldEZpbHRlcmVkVmFsdWVzKCk7XG4gICAgICAgIHZhciBwcm9wZXJ0aWVzID0gdGhpcy5nZXRGaWx0ZXJlZFByb3BlcnRpZXMoKTtcbiAgICAgICAgdmFyIG9sZEN1cnJlbnRQYWdlSW5kZXggPSB0aGlzLnBhZ2VzLmluZGV4T2YodGhpcy5jdXJyZW50UGFnZSk7XG4gICAgICAgIHRoaXMucnVuQ29uZGl0aW9uc0NvcmUocHJvcGVydGllcyk7XG4gICAgICAgIHRoaXMuY2hlY2tJZk5ld1BhZ2VzQmVjb21lVmlzaWJsZShvbGRDdXJyZW50UGFnZUluZGV4KTtcbiAgICAgICAgdGhpcy5jb25kaXRpb25WYWx1ZXMgPSBudWxsO1xuICAgICAgICBpZiAodGhpcy5pc1ZhbHVlQ2hhbmdlZE9uUnVubmluZ0NvbmRpdGlvbiAmJlxuICAgICAgICAgICAgdGhpcy5jb25kaXRpb25SdW5uZXJDb3VudGVyIDxcbiAgICAgICAgICAgICAgICBfc2V0dGluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X19bXCJzZXR0aW5nc1wiXS5tYXhDb25kaXRpb25SdW5Db3VudE9uVmFsdWVDaGFuZ2VkKSB7XG4gICAgICAgICAgICB0aGlzLmlzVmFsdWVDaGFuZ2VkT25SdW5uaW5nQ29uZGl0aW9uID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmNvbmRpdGlvblJ1bm5lckNvdW50ZXIrKztcbiAgICAgICAgICAgIHRoaXMucnVuQ29uZGl0aW9ucygpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pc1ZhbHVlQ2hhbmdlZE9uUnVubmluZ0NvbmRpdGlvbiA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5jb25kaXRpb25SdW5uZXJDb3VudGVyID0gMDtcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbmRpdGlvblVwZGF0ZVZpc2libGVJbmRleGVzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25kaXRpb25VcGRhdGVWaXNpYmxlSW5kZXhlcyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVmlzaWJsZUluZGV4ZXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmNvbmRpdGlvbk5vdGlmeUVsZW1lbnRzT25BbnlWYWx1ZU9yVmFyaWFibGVDaGFuZ2VkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25kaXRpb25Ob3RpZnlFbGVtZW50c09uQW55VmFsdWVPclZhcmlhYmxlQ2hhbmdlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMubm90aWZ5RWxlbWVudHNPbkFueVZhbHVlT3JWYXJpYWJsZUNoYW5nZWQoXCJcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5ydW5Db25kaXRpb25PblZhbHVlQ2hhbmdlZCA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5pc1J1bm5pbmdDb25kaXRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLmNvbmRpdGlvblZhbHVlc1tuYW1lXSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5pc1ZhbHVlQ2hhbmdlZE9uUnVubmluZ0NvbmRpdGlvbiA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJ1bkNvbmRpdGlvbnMoKTtcbiAgICAgICAgICAgIHRoaXMucnVuUXVlc3Rpb25zVHJpZ2dlcnMobmFtZSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUucnVuQ29uZGl0aW9uc0NvcmUgPSBmdW5jdGlvbiAocHJvcGVydGllcykge1xuICAgICAgICB2YXIgcGFnZXMgPSB0aGlzLnBhZ2VzO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2FsY3VsYXRlZFZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVkVmFsdWVzW2ldLnJlc2V0Q2FsY3VsYXRpb24oKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2FsY3VsYXRlZFZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVkVmFsdWVzW2ldLmRvQ2FsY3VsYXRpb24odGhpcy5jYWxjdWxhdGVkVmFsdWVzLCB0aGlzLmNvbmRpdGlvblZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgICAgIH1cbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5ydW5Db25kaXRpb25Db3JlLmNhbGwodGhpcywgdGhpcy5jb25kaXRpb25WYWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgICAgICBmb3IgKHZhciBpXzMgPSAwOyBpXzMgPCBwYWdlcy5sZW5ndGg7IGlfMysrKSB7XG4gICAgICAgICAgICBwYWdlc1tpXzNdLnJ1bkNvbmRpdGlvbih0aGlzLmNvbmRpdGlvblZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5ydW5RdWVzdGlvbnNUcmlnZ2VycyA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5pc0Rpc3BsYXlNb2RlIHx8IHRoaXMuaXNEZXNpZ25Nb2RlKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5nZXRBbGxRdWVzdGlvbnModHJ1ZSk7XG4gICAgICAgIHF1ZXN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChxKSB7IHJldHVybiBxLnJ1blRyaWdnZXJzKG5hbWUsIHZhbHVlKTsgfSk7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuY2hlY2tJZk5ld1BhZ2VzQmVjb21lVmlzaWJsZSA9IGZ1bmN0aW9uIChvbGRDdXJyZW50UGFnZUluZGV4KSB7XG4gICAgICAgIHZhciBuZXdDdXJyZW50UGFnZUluZGV4ID0gdGhpcy5wYWdlcy5pbmRleE9mKHRoaXMuY3VycmVudFBhZ2UpO1xuICAgICAgICBpZiAobmV3Q3VycmVudFBhZ2VJbmRleCA8PSBvbGRDdXJyZW50UGFnZUluZGV4ICsgMSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgZm9yICh2YXIgaSA9IG9sZEN1cnJlbnRQYWdlSW5kZXggKyAxOyBpIDwgbmV3Q3VycmVudFBhZ2VJbmRleDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wYWdlc1tpXS5pc1Zpc2libGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy5wYWdlc1tpXTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgLyoqXG4gICAgICogUG9zdHMgYSBzdXJ2ZXkgcmVzdWx0IHRvIFtTdXJ2ZXlKUyBTZXJ2aWNlXShodHRwczovL2FwaS5zdXJ2ZXlqcy5pby8pLlxuICAgICAqIEBwYXJhbSBwb3N0SWQgQW4gaWRlbnRpZmllciB1c2VkIHRvIHNhdmUgc3VydmV5IHJlc3VsdHMuIFlvdSBjYW4gZmluZCBpdCBvbiB0aGUgW015IFN1cnZleXNdKGh0dHBzOi8vc3VydmV5anMuaW8vc2VydmljZS9teXN1cnZleXMpIHBhZ2UuIElmIHlvdSBkbyBub3Qgc3BlY2lmeSB0aGlzIHBhcmFtZXRlciwgdGhlIHN1cnZleSB1c2VzIHRoZSBbYHN1cnZleVBvc3RJZGBdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vYXBpLXJlZmVyZW5jZS9zdXJ2ZXktZGF0YS1tb2RlbCNzdXJ2ZXlQb3N0SWQpIHByb3BlcnR5IHZhbHVlLlxuICAgICAqIEBwYXJhbSBjbGllbnRJZCBBIHJlc3BvbmRlbnQgaWRlbnRpZmllciAoZS1tYWlsIG9yIG90aGVyIHVuaXF1ZSBJRCkuIFRoaXMgSUQgZW5zdXJlcyB0aGF0IHRoZSByZXNwb25kZW50IGRvZXMgbm90IHBhc3MgdGhlIHNhbWUgc3VydmV5IHR3aWNlLlxuICAgICAqIEBwYXJhbSBpc1BhcnRpYWwgUGFzcyBgdHJ1ZWAgdG8gc2F2ZSBwYXJ0aWFsIHN1cnZleSByZXN1bHRzIChzZWUgW0NvbnRpbnVlIGFuIEluY29tcGxldGUgU3VydmV5XShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2hhbmRsZS1zdXJ2ZXktcmVzdWx0cy1jb250aW51ZS1pbmNvbXBsZXRlKSkuXG4gICAgICovXG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLnNlbmRSZXN1bHQgPSBmdW5jdGlvbiAocG9zdElkLCBjbGllbnRJZCwgaXNQYXJ0aWFsKSB7XG4gICAgICAgIGlmIChwb3N0SWQgPT09IHZvaWQgMCkgeyBwb3N0SWQgPSBudWxsOyB9XG4gICAgICAgIGlmIChjbGllbnRJZCA9PT0gdm9pZCAwKSB7IGNsaWVudElkID0gbnVsbDsgfVxuICAgICAgICBpZiAoaXNQYXJ0aWFsID09PSB2b2lkIDApIHsgaXNQYXJ0aWFsID0gZmFsc2U7IH1cbiAgICAgICAgaWYgKCF0aGlzLmlzRWRpdE1vZGUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmIChpc1BhcnRpYWwgJiYgdGhpcy5vblBhcnRpYWxTZW5kKSB7XG4gICAgICAgICAgICB0aGlzLm9uUGFydGlhbFNlbmQuZmlyZSh0aGlzLCBudWxsKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXBvc3RJZCAmJiB0aGlzLnN1cnZleVBvc3RJZCkge1xuICAgICAgICAgICAgcG9zdElkID0gdGhpcy5zdXJ2ZXlQb3N0SWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFwb3N0SWQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmIChjbGllbnRJZCkge1xuICAgICAgICAgICAgdGhpcy5jbGllbnRJZCA9IGNsaWVudElkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1BhcnRpYWwgJiYgIXRoaXMuY2xpZW50SWQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgICAgaWYgKHRoaXMuc3VydmV5U2hvd0RhdGFTYXZpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0Q29tcGxldGVkU3RhdGUoXCJzYXZpbmdcIiwgXCJcIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jcmVhdGVTdXJ2ZXlTZXJ2aWNlKCkuc2VuZFJlc3VsdChwb3N0SWQsIHRoaXMuZGF0YSwgZnVuY3Rpb24gKHN1Y2Nlc3MsIHJlc3BvbnNlLCByZXF1ZXN0KSB7XG4gICAgICAgICAgICBpZiAoc2VsZi5zdXJ2ZXlTaG93RGF0YVNhdmluZykge1xuICAgICAgICAgICAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuc2V0Q29tcGxldGVkU3RhdGUoXCJzdWNjZXNzXCIsIFwiXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXRDb21wbGV0ZWRTdGF0ZShcImVycm9yXCIsIHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZWxmLm9uU2VuZFJlc3VsdC5maXJlKHNlbGYsIHtcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBzdWNjZXNzLFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlOiByZXNwb25zZSxcbiAgICAgICAgICAgICAgICByZXF1ZXN0OiByZXF1ZXN0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIHRoaXMuY2xpZW50SWQsIGlzUGFydGlhbCk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBSZXF1ZXN0cyBbU3VydmV5SlMgU2VydmljZV0oaHR0cHM6Ly9hcGkuc3VydmV5anMuaW8vKSB0byByZXRyaWV2ZSBhbGwgYW5zd2VycyB0byBhIHNwZWNpZmllZCBxdWVzdGlvbi4gSGFuZGxlIHRoZSBbYG9uR2V0UmVzdWx0YF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL3N1cnZleS1kYXRhLW1vZGVsI29uR2V0UmVzdWx0KSBldmVudCB0byBhY2Nlc3MgdGhlIGFuc3dlcnMuXG4gICAgICogQHBhcmFtIHJlc3VsdElkIEEgcmVzdWx0IElEIHRoYXQgaWRlbnRpZmllcyB0aGUgcmVxdWlyZWQgc3VydmV5LiBZb3UgY2FuIGZpbmQgaXQgb24gdGhlIFtNeSBTdXJ2ZXlzXShodHRwczovL3N1cnZleWpzLmlvL3NlcnZpY2UvbXlzdXJ2ZXlzKSBwYWdlLlxuICAgICAqIEBwYXJhbSBxdWVzdGlvbk5hbWUgQSBxdWVzdGlvbiBuYW1lLlxuICAgICAqL1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5nZXRSZXN1bHQgPSBmdW5jdGlvbiAocmVzdWx0SWQsIHF1ZXN0aW9uTmFtZSkge1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgIHRoaXMuY3JlYXRlU3VydmV5U2VydmljZSgpLmdldFJlc3VsdChyZXN1bHRJZCwgcXVlc3Rpb25OYW1lLCBmdW5jdGlvbiAoc3VjY2VzcywgZGF0YSwgZGF0YUxpc3QsIHJlc3BvbnNlKSB7XG4gICAgICAgICAgICBzZWxmLm9uR2V0UmVzdWx0LmZpcmUoc2VsZiwge1xuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IHN1Y2Nlc3MsXG4gICAgICAgICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICAgICAgICBkYXRhTGlzdDogZGF0YUxpc3QsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2U6IHJlc3BvbnNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogTG9hZHMgYSBzdXJ2ZXkgSlNPTiBzY2hlbWEgZnJvbSB0aGUgW1N1cnZleUpTIFNlcnZpY2VdKGh0dHBzOi8vYXBpLnN1cnZleWpzLmlvKS4gWW91IGNhbiBoYW5kbGUgdGhlIFtgb25Mb2FkZWRTdXJ2ZXlGcm9tU2VydmljZWBdKCNvbkxvYWRlZFN1cnZleUZyb21TZXJ2aWNlKSBldmVudCB0byBtb2RpZnkgdGhlIHNjaGVtYSBhZnRlciBsb2FkaW5nIGlmIHJlcXVpcmVkLlxuICAgICAqIEBwYXJhbSBzdXJ2ZXlJZCBUaGUgaWRlbnRpZmllciBvZiBhIHN1cnZleSBKU09OIHNjaGVtYSB0byBsb2FkLiBSZWZlciB0byB0aGUgZm9sbG93aW5nIGhlbHAgdG9waWMgZm9yIG1vcmUgaW5mb3JtYXRpb246IFtTdG9yZSBTdXJ2ZXkgUmVzdWx0cyBpbiB0aGUgU3VydmV5SlMgU2VydmljZV0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9oYW5kbGUtc3VydmV5LXJlc3VsdHMtc3RvcmUjc3RvcmUtc3VydmV5LXJlc3VsdHMtaW4tdGhlLXN1cnZleWpzLXNlcnZpY2UpLlxuICAgICAqIEBwYXJhbSBjbGllbnRJZCBBIHVzZXIgaWRlbnRpZmllciAoZS1tYWlsIG9yIG90aGVyIHVuaXF1ZSBJRCkgdXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgdXNlciBoYXMgYWxyZWFkeSB0YWtlbiB0aGUgc3VydmV5LlxuICAgICAqL1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5sb2FkU3VydmV5RnJvbVNlcnZpY2UgPSBmdW5jdGlvbiAoc3VydmV5SWQsIGNsaWVudElkKSB7XG4gICAgICAgIGlmIChzdXJ2ZXlJZCA9PT0gdm9pZCAwKSB7IHN1cnZleUlkID0gbnVsbDsgfVxuICAgICAgICBpZiAoY2xpZW50SWQgPT09IHZvaWQgMCkgeyBjbGllbnRJZCA9IG51bGw7IH1cbiAgICAgICAgaWYgKHN1cnZleUlkKSB7XG4gICAgICAgICAgICB0aGlzLnN1cnZleUlkID0gc3VydmV5SWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNsaWVudElkKSB7XG4gICAgICAgICAgICB0aGlzLmNsaWVudElkID0gY2xpZW50SWQ7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMub25Mb2FkaW5nU3VydmV5RnJvbVNlcnZpY2UoKTtcbiAgICAgICAgaWYgKGNsaWVudElkKSB7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZVN1cnZleVNlcnZpY2UoKS5nZXRTdXJ2ZXlKc29uQW5kSXNDb21wbGV0ZWQodGhpcy5zdXJ2ZXlJZCwgdGhpcy5jbGllbnRJZCwgZnVuY3Rpb24gKHN1Y2Nlc3MsIGpzb24sIGlzQ29tcGxldGVkLCByZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHNlbGYuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5pc0NvbXBsZXRlZEJlZm9yZSA9IGlzQ29tcGxldGVkID09IFwiY29tcGxldGVkXCI7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYubG9hZFN1cnZleUZyb21TZXJ2aWNlSnNvbihqc29uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlU3VydmV5U2VydmljZSgpLmxvYWRTdXJ2ZXkodGhpcy5zdXJ2ZXlJZCwgZnVuY3Rpb24gKHN1Y2Nlc3MsIHJlc3VsdCwgcmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYubG9hZFN1cnZleUZyb21TZXJ2aWNlSnNvbihyZXN1bHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUubG9hZFN1cnZleUZyb21TZXJ2aWNlSnNvbiA9IGZ1bmN0aW9uIChqc29uKSB7XG4gICAgICAgIGlmICghanNvbilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5mcm9tSlNPTihqc29uKTtcbiAgICAgICAgdGhpcy5ub3RpZnlBbGxRdWVzdGlvbnNPblZhbHVlQ2hhbmdlZCgpO1xuICAgICAgICB0aGlzLm9uTG9hZFN1cnZleUZyb21TZXJ2aWNlKCk7XG4gICAgICAgIHRoaXMub25Mb2FkZWRTdXJ2ZXlGcm9tU2VydmljZS5maXJlKHRoaXMsIHt9KTtcbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5vbkxvYWRpbmdTdXJ2ZXlGcm9tU2VydmljZSA9IGZ1bmN0aW9uICgpIHsgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUub25Mb2FkU3VydmV5RnJvbVNlcnZpY2UgPSBmdW5jdGlvbiAoKSB7IH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLnJlc2V0VmlzaWJsZUluZGV4ZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLmdldEFsbFF1ZXN0aW9ucyh0cnVlKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHF1ZXN0aW9uc1tpXS5zZXRWaXNpYmxlSW5kZXgoLTEpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlVmlzaWJsZUluZGV4ZXMoKTtcbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS51cGRhdGVWaXNpYmxlSW5kZXhlcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNMb2FkaW5nRnJvbUpzb24gfHwgISF0aGlzLmlzRW5kTG9hZGluZ0Zyb21Kc29uKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAodGhpcy5pc1J1bm5pbmdDb25kaXRpb25zICYmXG4gICAgICAgICAgICB0aGlzLm9uUXVlc3Rpb25WaXNpYmxlQ2hhbmdlZC5pc0VtcHR5ICYmXG4gICAgICAgICAgICB0aGlzLm9uUGFnZVZpc2libGVDaGFuZ2VkLmlzRW1wdHkpIHtcbiAgICAgICAgICAgIC8vUnVuIHVwZGF0ZSB2aXNpYmxlIGluZGV4IG9ubHkgb25lIHRpbWUgb24gZmluaXNoaW5nIHJ1bm5pbmcgY29uZGl0aW9uc1xuICAgICAgICAgICAgdGhpcy5jb25kaXRpb25VcGRhdGVWaXNpYmxlSW5kZXhlcyA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXNSdW5uaW5nRWxlbWVudHNCaW5kaW5ncykge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVWaXNpYmxlSW5kZXhBZnRlckJpbmRpbmdzID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZVBhZ2VWaXNpYmxlSW5kZXhlcyh0aGlzLnNob3dQYWdlTnVtYmVycyk7XG4gICAgICAgIGlmICh0aGlzLnNob3dRdWVzdGlvbk51bWJlcnMgPT0gXCJvblBhZ2VcIikge1xuICAgICAgICAgICAgdmFyIHZpc1BhZ2VzID0gdGhpcy52aXNpYmxlUGFnZXM7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZpc1BhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmlzUGFnZXNbaV0uc2V0VmlzaWJsZUluZGV4KDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5zaG93UXVlc3Rpb25OdW1iZXJzID09IFwib25cIiA/IDAgOiAtMTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGluZGV4ICs9IHRoaXMucGFnZXNbaV0uc2V0VmlzaWJsZUluZGV4KGluZGV4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZVByb2dyZXNzVGV4dCh0cnVlKTtcbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS51cGRhdGVQYWdlVmlzaWJsZUluZGV4ZXMgPSBmdW5jdGlvbiAoc2hvd0luZGV4KSB7XG4gICAgICAgIHRoaXMudXBkYXRlQnV0dG9uc1Zpc2liaWxpdHkoKTtcbiAgICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgcGFnZSA9IHRoaXMucGFnZXNbaV07XG4gICAgICAgICAgICB2YXIgaXNQYWdlVmlzaWJsZSA9IHBhZ2UuaXNWaXNpYmxlICYmIChpID4gMCB8fCAhcGFnZS5pc1N0YXJ0UGFnZSk7XG4gICAgICAgICAgICBwYWdlLnZpc2libGVJbmRleCA9IGlzUGFnZVZpc2libGUgPyBpbmRleCsrIDogLTE7XG4gICAgICAgICAgICBwYWdlLm51bSA9IGlzUGFnZVZpc2libGUgPyBwYWdlLnZpc2libGVJbmRleCArIDEgOiAtMTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLmZyb21KU09OID0gZnVuY3Rpb24gKGpzb24pIHtcbiAgICAgICAgaWYgKCFqc29uKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLnF1ZXN0aW9uSGFzaGVzQ2xlYXIoKTtcbiAgICAgICAgdGhpcy5qc29uRXJyb3JzID0gbnVsbDtcbiAgICAgICAgdmFyIGpzb25Db252ZXJ0ZXIgPSBuZXcgX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIkpzb25PYmplY3RcIl0oKTtcbiAgICAgICAganNvbkNvbnZlcnRlci50b09iamVjdChqc29uLCB0aGlzKTtcbiAgICAgICAgaWYgKGpzb25Db252ZXJ0ZXIuZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuanNvbkVycm9ycyA9IGpzb25Db252ZXJ0ZXIuZXJyb3JzO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub25TdGF0ZUFuZEN1cnJlbnRQYWdlQ2hhbmdlZCgpO1xuICAgICAgICB0aGlzLnVwZGF0ZVN0YXRlKCk7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuc2V0SnNvbk9iamVjdCA9IGZ1bmN0aW9uIChqc29uT2JqKSB7XG4gICAgICAgIHRoaXMuZnJvbUpTT04oanNvbk9iaik7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuZW5kTG9hZGluZ0Zyb21Kc29uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmlzRW5kTG9hZGluZ0Zyb21Kc29uID0gXCJwcm9jZXNzaW5nXCI7XG4gICAgICAgIHRoaXMub25GaXJzdFBhZ2VJc1N0YXJ0ZWRDaGFuZ2VkKCk7XG4gICAgICAgIHRoaXMub25RdWVzdGlvbnNPblBhZ2VNb2RlQ2hhbmdlZChcInN0YW5kYXJkXCIpO1xuICAgICAgICBfc3VwZXIucHJvdG90eXBlLmVuZExvYWRpbmdGcm9tSnNvbi5jYWxsKHRoaXMpO1xuICAgICAgICBpZiAodGhpcy5oYXNDb29raWUpIHtcbiAgICAgICAgICAgIHRoaXMuaXNDb21wbGV0ZWRCZWZvcmUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZG9FbGVtZW50c09uTG9hZCgpO1xuICAgICAgICB0aGlzLmlzRW5kTG9hZGluZ0Zyb21Kc29uID0gXCJjb25kaXRpb25zXCI7XG4gICAgICAgIHRoaXMucnVuQ29uZGl0aW9ucygpO1xuICAgICAgICB0aGlzLm5vdGlmeUVsZW1lbnRzT25BbnlWYWx1ZU9yVmFyaWFibGVDaGFuZ2VkKFwiXCIpO1xuICAgICAgICB0aGlzLmlzRW5kTG9hZGluZ0Zyb21Kc29uID0gbnVsbDtcbiAgICAgICAgdGhpcy51cGRhdGVWaXNpYmxlSW5kZXhlcygpO1xuICAgICAgICB0aGlzLnVwZGF0ZUhhc0xvZ28oKTtcbiAgICAgICAgdGhpcy51cGRhdGVSZW5kZXJCYWNrZ3JvdW5kSW1hZ2UoKTtcbiAgICAgICAgdGhpcy51cGRhdGVDdXJyZW50UGFnZSgpO1xuICAgICAgICB0aGlzLmhhc0Rlc2NyaXB0aW9uID0gISF0aGlzLmRlc2NyaXB0aW9uO1xuICAgICAgICB0aGlzLnNldENhbGN1bGF0ZWRXaWR0aE1vZGVVcGRhdGVyKCk7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUudXBkYXRlTmF2aWdhdGlvbkNzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCEhdGhpcy5uYXZpZ2F0aW9uQmFyKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZU5hdmlnYXRpb25CYXJDc3MoKTtcbiAgICAgICAgICAgICEhdGhpcy51cGRhdGVOYXZpZ2F0aW9uSXRlbUNzc0NhbGxiYWNrICYmIHRoaXMudXBkYXRlTmF2aWdhdGlvbkl0ZW1Dc3NDYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUudXBkYXRlTmF2aWdhdGlvbkJhckNzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHZhbCA9IHRoaXMubmF2aWdhdGlvbkJhcjtcbiAgICAgICAgdmFsLmNzc0NsYXNzZXMgPSB0aGlzLmNzcy5hY3Rpb25CYXI7XG4gICAgICAgIHZhbC5jb250YWluZXJDc3MgPSB0aGlzLmNzcy5mb290ZXI7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuY3JlYXRlTmF2aWdhdGlvbkJhciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHJlcyA9IG5ldyBfYWN0aW9uc19jb250YWluZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE3X19bXCJBY3Rpb25Db250YWluZXJcIl0oKTtcbiAgICAgICAgcmVzLnNldEl0ZW1zKHRoaXMuY3JlYXRlTmF2aWdhdGlvbkFjdGlvbnMoKSk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuY3JlYXRlTmF2aWdhdGlvbkFjdGlvbnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBkZWZhdWx0Q29tcG9uZW50ID0gXCJzdi1uYXYtYnRuXCI7XG4gICAgICAgIHZhciBuYXZTdGFydCA9IG5ldyBfYWN0aW9uc19hY3Rpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X19bXCJBY3Rpb25cIl0oe1xuICAgICAgICAgICAgaWQ6IFwic3YtbmF2LXN0YXJ0XCIsXG4gICAgICAgICAgICB2aXNpYmxlOiBuZXcgX2Jhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIkNvbXB1dGVkVXBkYXRlclwiXShmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy5pc1Nob3dTdGFydGluZ1BhZ2U7IH0pLFxuICAgICAgICAgICAgdmlzaWJsZUluZGV4OiAxMCxcbiAgICAgICAgICAgIGxvY1RpdGxlOiB0aGlzLmxvY1N0YXJ0U3VydmV5VGV4dCxcbiAgICAgICAgICAgIGFjdGlvbjogZnVuY3Rpb24gKCkgeyByZXR1cm4gX3RoaXMuc3RhcnQoKTsgfSxcbiAgICAgICAgICAgIGNvbXBvbmVudDogZGVmYXVsdENvbXBvbmVudFxuICAgICAgICB9KTtcbiAgICAgICAgdmFyIG5hdlByZXYgPSBuZXcgX2FjdGlvbnNfYWN0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNl9fW1wiQWN0aW9uXCJdKHtcbiAgICAgICAgICAgIGlkOiBcInN2LW5hdi1wcmV2XCIsXG4gICAgICAgICAgICB2aXNpYmxlOiBuZXcgX2Jhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIkNvbXB1dGVkVXBkYXRlclwiXShmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy5pc1Nob3dQcmV2QnV0dG9uOyB9KSxcbiAgICAgICAgICAgIHZpc2libGVJbmRleDogMjAsXG4gICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgbW91c2VEb3duOiBmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy5uYXZpZ2F0aW9uTW91c2VEb3duKCk7IH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbG9jVGl0bGU6IHRoaXMubG9jUGFnZVByZXZUZXh0LFxuICAgICAgICAgICAgYWN0aW9uOiBmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy5wcmV2UGFnZSgpOyB9LFxuICAgICAgICAgICAgY29tcG9uZW50OiBkZWZhdWx0Q29tcG9uZW50XG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgbmF2TmV4dCA9IG5ldyBfYWN0aW9uc19hY3Rpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X19bXCJBY3Rpb25cIl0oe1xuICAgICAgICAgICAgaWQ6IFwic3YtbmF2LW5leHRcIixcbiAgICAgICAgICAgIHZpc2libGU6IG5ldyBfYmFzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiQ29tcHV0ZWRVcGRhdGVyXCJdKGZ1bmN0aW9uICgpIHsgcmV0dXJuIF90aGlzLmlzU2hvd05leHRCdXR0b247IH0pLFxuICAgICAgICAgICAgdmlzaWJsZUluZGV4OiAzMCxcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICBtb3VzZURvd246IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF90aGlzLm5leHRQYWdlTW91c2VEb3duKCk7IH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbG9jVGl0bGU6IHRoaXMubG9jUGFnZU5leHRUZXh0LFxuICAgICAgICAgICAgYWN0aW9uOiBmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy5uZXh0UGFnZVVJQ2xpY2soKTsgfSxcbiAgICAgICAgICAgIGNvbXBvbmVudDogZGVmYXVsdENvbXBvbmVudFxuICAgICAgICB9KTtcbiAgICAgICAgdmFyIG5hdlByZXZpZXcgPSBuZXcgX2FjdGlvbnNfYWN0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNl9fW1wiQWN0aW9uXCJdKHtcbiAgICAgICAgICAgIGlkOiBcInN2LW5hdi1wcmV2aWV3XCIsXG4gICAgICAgICAgICB2aXNpYmxlOiBuZXcgX2Jhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIkNvbXB1dGVkVXBkYXRlclwiXShmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy5pc1ByZXZpZXdCdXR0b25WaXNpYmxlOyB9KSxcbiAgICAgICAgICAgIHZpc2libGVJbmRleDogNDAsXG4gICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgbW91c2VEb3duOiBmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy5uYXZpZ2F0aW9uTW91c2VEb3duKCk7IH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbG9jVGl0bGU6IHRoaXMubG9jUHJldmlld1RleHQsXG4gICAgICAgICAgICBhY3Rpb246IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF90aGlzLnNob3dQcmV2aWV3KCk7IH0sXG4gICAgICAgICAgICBjb21wb25lbnQ6IGRlZmF1bHRDb21wb25lbnRcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBuYXZDb21wbGV0ZSA9IG5ldyBfYWN0aW9uc19hY3Rpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X19bXCJBY3Rpb25cIl0oe1xuICAgICAgICAgICAgaWQ6IFwic3YtbmF2LWNvbXBsZXRlXCIsXG4gICAgICAgICAgICB2aXNpYmxlOiBuZXcgX2Jhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIkNvbXB1dGVkVXBkYXRlclwiXShmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy5pc0NvbXBsZXRlQnV0dG9uVmlzaWJsZTsgfSksXG4gICAgICAgICAgICB2aXNpYmxlSW5kZXg6IDUwLFxuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIG1vdXNlRG93bjogZnVuY3Rpb24gKCkgeyByZXR1cm4gX3RoaXMubmF2aWdhdGlvbk1vdXNlRG93bigpOyB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxvY1RpdGxlOiB0aGlzLmxvY0NvbXBsZXRlVGV4dCxcbiAgICAgICAgICAgIGFjdGlvbjogZnVuY3Rpb24gKCkgeyByZXR1cm4gX3RoaXMuY29tcGxldGVMYXN0UGFnZSgpOyB9LFxuICAgICAgICAgICAgY29tcG9uZW50OiBkZWZhdWx0Q29tcG9uZW50XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnVwZGF0ZU5hdmlnYXRpb25JdGVtQ3NzQ2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBuYXZTdGFydC5pbm5lckNzcyA9IF90aGlzLmNzc05hdmlnYXRpb25TdGFydDtcbiAgICAgICAgICAgIG5hdlByZXYuaW5uZXJDc3MgPSBfdGhpcy5jc3NOYXZpZ2F0aW9uUHJldjtcbiAgICAgICAgICAgIG5hdk5leHQuaW5uZXJDc3MgPSBfdGhpcy5jc3NOYXZpZ2F0aW9uTmV4dDtcbiAgICAgICAgICAgIG5hdlByZXZpZXcuaW5uZXJDc3MgPSBfdGhpcy5jc3NOYXZpZ2F0aW9uUHJldmlldztcbiAgICAgICAgICAgIG5hdkNvbXBsZXRlLmlubmVyQ3NzID0gX3RoaXMuY3NzTmF2aWdhdGlvbkNvbXBsZXRlO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gW25hdlN0YXJ0LCBuYXZQcmV2LCBuYXZOZXh0LCBuYXZQcmV2aWV3LCBuYXZDb21wbGV0ZV07XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUub25CZWZvcmVDcmVhdGluZyA9IGZ1bmN0aW9uICgpIHsgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUub25DcmVhdGluZyA9IGZ1bmN0aW9uICgpIHsgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuZ2V0UHJvY2Vzc2VkVGV4dFZhbHVlID0gZnVuY3Rpb24gKHRleHRWYWx1ZSkge1xuICAgICAgICB0aGlzLmdldFByb2Nlc3NlZFRleHRWYWx1ZUNvcmUodGV4dFZhbHVlKTtcbiAgICAgICAgaWYgKCF0aGlzLm9uUHJvY2Vzc1RleHRWYWx1ZS5pc0VtcHR5KSB7XG4gICAgICAgICAgICB2YXIgd2FzRW1wdHkgPSB0aGlzLmlzVmFsdWVFbXB0eSh0ZXh0VmFsdWUudmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5vblByb2Nlc3NUZXh0VmFsdWUuZmlyZSh0aGlzLCB0ZXh0VmFsdWUpO1xuICAgICAgICAgICAgdGV4dFZhbHVlLmlzRXhpc3RzID1cbiAgICAgICAgICAgICAgICB0ZXh0VmFsdWUuaXNFeGlzdHMgfHwgKHdhc0VtcHR5ICYmICF0aGlzLmlzVmFsdWVFbXB0eSh0ZXh0VmFsdWUudmFsdWUpKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLmdldEJ1aWx0SW5WYXJpYWJsZVZhbHVlID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgaWYgKG5hbWUgPT09IFwicGFnZW5vXCIpIHtcbiAgICAgICAgICAgIHZhciBwYWdlID0gdGhpcy5jdXJyZW50UGFnZTtcbiAgICAgICAgICAgIHJldHVybiBwYWdlICE9IG51bGwgPyB0aGlzLnZpc2libGVQYWdlcy5pbmRleE9mKHBhZ2UpICsgMSA6IDA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5hbWUgPT09IFwicGFnZWNvdW50XCIpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZpc2libGVQYWdlQ291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5hbWUgPT09IFwiY29ycmVjdGVkYW5zd2Vyc1wiIHx8IG5hbWUgPT09IFwiY29ycmVjdGFuc3dlcnNcIiB8fCBuYW1lID09PSBcImNvcnJlY3RlZGFuc3dlcmNvdW50XCIpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldENvcnJlY3RlZEFuc3dlckNvdW50KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5hbWUgPT09IFwiaW5jb3JyZWN0ZWRhbnN3ZXJzXCIgfHwgbmFtZSA9PT0gXCJpbmNvcnJlY3RhbnN3ZXJzXCIgfHwgbmFtZSA9PT0gXCJpbmNvcnJlY3RlZGFuc3dlcmNvdW50XCIpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEluQ29ycmVjdGVkQW5zd2VyQ291bnQoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobmFtZSA9PT0gXCJxdWVzdGlvbmNvdW50XCIpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFF1aXpRdWVzdGlvbkNvdW50KCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5nZXRQcm9jZXNzZWRUZXh0VmFsdWVDb3JlID0gZnVuY3Rpb24gKHRleHRWYWx1ZSkge1xuICAgICAgICB2YXIgbmFtZSA9IHRleHRWYWx1ZS5uYW1lLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmIChbXCJub1wiLCBcInJlcXVpcmVcIiwgXCJ0aXRsZVwiXS5pbmRleE9mKG5hbWUpICE9PSAtMSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciBidWlsdEluVmFyID0gdGhpcy5nZXRCdWlsdEluVmFyaWFibGVWYWx1ZShuYW1lKTtcbiAgICAgICAgaWYgKGJ1aWx0SW5WYXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGV4dFZhbHVlLmlzRXhpc3RzID0gdHJ1ZTtcbiAgICAgICAgICAgIHRleHRWYWx1ZS52YWx1ZSA9IGJ1aWx0SW5WYXI7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5hbWUgPT09IFwibG9jYWxlXCIpIHtcbiAgICAgICAgICAgIHRleHRWYWx1ZS5pc0V4aXN0cyA9IHRydWU7XG4gICAgICAgICAgICB0ZXh0VmFsdWUudmFsdWUgPSAhIXRoaXMubG9jYWxlXG4gICAgICAgICAgICAgICAgPyB0aGlzLmxvY2FsZVxuICAgICAgICAgICAgICAgIDogX3N1cnZleVN0cmluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1tcInN1cnZleUxvY2FsaXphdGlvblwiXS5kZWZhdWx0TG9jYWxlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciB2YXJpYWJsZSA9IHRoaXMuZ2V0VmFyaWFibGUobmFtZSk7XG4gICAgICAgIGlmICh2YXJpYWJsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0ZXh0VmFsdWUuaXNFeGlzdHMgPSB0cnVlO1xuICAgICAgICAgICAgdGV4dFZhbHVlLnZhbHVlID0gdmFyaWFibGU7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHF1ZXN0aW9uID0gdGhpcy5nZXRGaXJzdE5hbWUobmFtZSk7XG4gICAgICAgIGlmIChxdWVzdGlvbikge1xuICAgICAgICAgICAgdmFyIHF1ZXN0aW9uVXNlRGlzcGxheVRleHQgPSBxdWVzdGlvbi51c2VEaXNwbGF5VmFsdWVzSW5EeW5hbWljVGV4dHM7XG4gICAgICAgICAgICB0ZXh0VmFsdWUuaXNFeGlzdHMgPSB0cnVlO1xuICAgICAgICAgICAgdmFyIGZpcnN0TmFtZSA9IHF1ZXN0aW9uLmdldFZhbHVlTmFtZSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICBuYW1lID0gZmlyc3ROYW1lICsgbmFtZS5zdWJzdHJpbmcoZmlyc3ROYW1lLmxlbmd0aCk7XG4gICAgICAgICAgICBuYW1lID0gbmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgdmFyIHZhbHVlcyA9IHt9O1xuICAgICAgICAgICAgdmFsdWVzW2ZpcnN0TmFtZV0gPSB0ZXh0VmFsdWUucmV0dXJuRGlzcGxheVZhbHVlICYmIHF1ZXN0aW9uVXNlRGlzcGxheVRleHRcbiAgICAgICAgICAgICAgICA/IHF1ZXN0aW9uLmdldERpc3BsYXlWYWx1ZShmYWxzZSwgdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIDogcXVlc3Rpb24udmFsdWU7XG4gICAgICAgICAgICB0ZXh0VmFsdWUudmFsdWUgPSBuZXcgX2NvbmRpdGlvblByb2Nlc3NWYWx1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fW1wiUHJvY2Vzc1ZhbHVlXCJdKCkuZ2V0VmFsdWUobmFtZSwgdmFsdWVzKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdldFByb2Nlc3NlZFZhbHVlc1dpdGhvdXRRdWVzdGlvbih0ZXh0VmFsdWUpO1xuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLmdldFByb2Nlc3NlZFZhbHVlc1dpdGhvdXRRdWVzdGlvbiA9IGZ1bmN0aW9uICh0ZXh0VmFsdWUpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5nZXRWYWx1ZSh0ZXh0VmFsdWUubmFtZSk7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0ZXh0VmFsdWUuaXNFeGlzdHMgPSB0cnVlO1xuICAgICAgICAgICAgdGV4dFZhbHVlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHByb2Nlc3NvciA9IG5ldyBfY29uZGl0aW9uUHJvY2Vzc1ZhbHVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bXCJQcm9jZXNzVmFsdWVcIl0oKTtcbiAgICAgICAgdmFyIGZpcnN0TmFtZSA9IHByb2Nlc3Nvci5nZXRGaXJzdE5hbWUodGV4dFZhbHVlLm5hbWUpO1xuICAgICAgICBpZiAoZmlyc3ROYW1lID09PSB0ZXh0VmFsdWUubmFtZSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIGRhdGEgPSB7fTtcbiAgICAgICAgdmFyIHZhbCA9IHRoaXMuZ2V0VmFsdWUoZmlyc3ROYW1lKTtcbiAgICAgICAgaWYgKF9oZWxwZXJzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJIZWxwZXJzXCJdLmlzVmFsdWVFbXB0eSh2YWwpKSB7XG4gICAgICAgICAgICB2YWwgPSB0aGlzLmdldFZhcmlhYmxlKGZpcnN0TmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKF9oZWxwZXJzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJIZWxwZXJzXCJdLmlzVmFsdWVFbXB0eSh2YWwpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBkYXRhW2ZpcnN0TmFtZV0gPSB2YWw7XG4gICAgICAgIHRleHRWYWx1ZS52YWx1ZSA9IHByb2Nlc3Nvci5nZXRWYWx1ZSh0ZXh0VmFsdWUubmFtZSwgZGF0YSk7XG4gICAgICAgIHRleHRWYWx1ZS5pc0V4aXN0cyA9IHByb2Nlc3Nvci5oYXNWYWx1ZSh0ZXh0VmFsdWUubmFtZSwgZGF0YSk7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuZ2V0Rmlyc3ROYW1lID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgdmFyIHF1ZXN0aW9uO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgICBxdWVzdGlvbiA9IHRoaXMuZ2V0UXVlc3Rpb25CeVZhbHVlTmFtZShuYW1lLCB0cnVlKTtcbiAgICAgICAgICAgIG5hbWUgPSB0aGlzLnJlZHVjZUZpcnN0TmFtZShuYW1lKTtcbiAgICAgICAgfSB3aGlsZSAoIXF1ZXN0aW9uICYmICEhbmFtZSk7XG4gICAgICAgIHJldHVybiBxdWVzdGlvbjtcbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5yZWR1Y2VGaXJzdE5hbWUgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICB2YXIgcG9zMSA9IG5hbWUubGFzdEluZGV4T2YoXCIuXCIpO1xuICAgICAgICB2YXIgcG9zMiA9IG5hbWUubGFzdEluZGV4T2YoXCJbXCIpO1xuICAgICAgICBpZiAocG9zMSA8IDAgJiYgcG9zMiA8IDApXG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgdmFyIHBvcyA9IE1hdGgubWF4KHBvczEsIHBvczIpO1xuICAgICAgICByZXR1cm4gbmFtZS5zdWJzdHJpbmcoMCwgcG9zKTtcbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5jbGVhclVudXNlZFZhbHVlcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMuZ2V0QWxsUXVlc3Rpb25zKCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBxdWVzdGlvbnNbaV0uY2xlYXJVbnVzZWRWYWx1ZXMoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNsZWFySW52aXNpYmxlUXVlc3Rpb25WYWx1ZXMoKTtcbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5oYXNWaXNpYmxlUXVlc3Rpb25CeVZhbHVlTmFtZSA9IGZ1bmN0aW9uICh2YWx1ZU5hbWUpIHtcbiAgICAgICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMuZ2V0UXVlc3Rpb25zQnlWYWx1ZU5hbWUodmFsdWVOYW1lKTtcbiAgICAgICAgaWYgKCFxdWVzdGlvbnMpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgcSA9IHF1ZXN0aW9uc1tpXTtcbiAgICAgICAgICAgIGlmIChxLmlzVmlzaWJsZSAmJiBxLmlzUGFyZW50VmlzaWJsZSAmJiAhcS5wYXJlbnRRdWVzdGlvbilcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUucXVlc3Rpb25zQnlWYWx1ZU5hbWUgPSBmdW5jdGlvbiAodmFsdWVOYW1lKSB7XG4gICAgICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLmdldFF1ZXN0aW9uc0J5VmFsdWVOYW1lKHZhbHVlTmFtZSk7XG4gICAgICAgIHJldHVybiAhIXF1ZXN0aW9ucyA/IHF1ZXN0aW9ucyA6IFtdO1xuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLmNsZWFySW52aXNpYmxlUXVlc3Rpb25WYWx1ZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciByZWFzb24gPSB0aGlzLmNsZWFySW52aXNpYmxlVmFsdWVzID09PSBcIm5vbmVcIiA/IFwibm9uZVwiIDogXCJvbkNvbXBsZXRlXCI7XG4gICAgICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLmdldEFsbFF1ZXN0aW9ucygpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgcXVlc3Rpb25zW2ldLmNsZWFyVmFsdWVJZkludmlzaWJsZShyZWFzb24pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgdmFyaWFibGUgdmFsdWUuXG4gICAgICpcbiAgICAgKiBbVmFyaWFibGVzIGhlbHAgdG9waWNdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vZGVzaWduLXN1cnZleS9jb25kaXRpb25hbC1sb2dpYyN2YXJpYWJsZXMgKGxpbmtTdHlsZSkpXG4gICAgICogQHBhcmFtIG5hbWUgQSB2YXJpYWJsZSBuYW1lLlxuICAgICAqIEByZXR1cm4gQSB2YXJpYWJsZSB2YWx1ZS5cbiAgICAgKiBAc2VlIHNldFZhcmlhYmxlXG4gICAgICogQHNlZSBnZXRWYXJpYWJsZU5hbWVzXG4gICAgICovXG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLmdldFZhcmlhYmxlID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgaWYgKCFuYW1lKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHZhciByZXMgPSB0aGlzLnZhcmlhYmxlc0hhc2hbbmFtZV07XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbHVlRW1wdHkocmVzKSlcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIGlmIChuYW1lLmluZGV4T2YoXCIuXCIpID4gLTEgfHwgbmFtZS5pbmRleE9mKFwiW1wiKSA+IC0xKSB7XG4gICAgICAgICAgICBpZiAobmV3IF9jb25kaXRpb25Qcm9jZXNzVmFsdWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1tcIlByb2Nlc3NWYWx1ZVwiXSgpLmhhc1ZhbHVlKG5hbWUsIHRoaXMudmFyaWFibGVzSGFzaCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBfY29uZGl0aW9uUHJvY2Vzc1ZhbHVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bXCJQcm9jZXNzVmFsdWVcIl0oKS5nZXRWYWx1ZShuYW1lLCB0aGlzLnZhcmlhYmxlc0hhc2gpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBTZXRzIGEgdmFyaWFibGUgdmFsdWUuXG4gICAgICpcbiAgICAgKiBbVmFyaWFibGVzIGhlbHAgdG9waWNdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vZGVzaWduLXN1cnZleS9jb25kaXRpb25hbC1sb2dpYyN2YXJpYWJsZXMgKGxpbmtTdHlsZSkpXG4gICAgICogQHBhcmFtIG5hbWUgQSB2YXJpYWJsZSBuYW1lLlxuICAgICAqIEBwYXJhbSBuZXdWYWx1ZSBBIG5ldyB2YXJpYWJsZSB2YWx1ZS5cbiAgICAgKiBAc2VlIGdldFZhcmlhYmxlXG4gICAgICogQHNlZSBnZXRWYXJpYWJsZU5hbWVzXG4gICAgICovXG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLnNldFZhcmlhYmxlID0gZnVuY3Rpb24gKG5hbWUsIG5ld1ZhbHVlKSB7XG4gICAgICAgIGlmICghbmFtZSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKCEhdGhpcy52YWx1ZXNIYXNoKSB7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy52YWx1ZXNIYXNoW25hbWVdO1xuICAgICAgICB9XG4gICAgICAgIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHRoaXMudmFyaWFibGVzSGFzaFtuYW1lXSA9IG5ld1ZhbHVlO1xuICAgICAgICB0aGlzLm5vdGlmeUVsZW1lbnRzT25BbnlWYWx1ZU9yVmFyaWFibGVDaGFuZ2VkKG5hbWUpO1xuICAgICAgICB0aGlzLnJ1bkNvbmRpdGlvbk9uVmFsdWVDaGFuZ2VkKG5hbWUsIG5ld1ZhbHVlKTtcbiAgICAgICAgdGhpcy5vblZhcmlhYmxlQ2hhbmdlZC5maXJlKHRoaXMsIHsgbmFtZTogbmFtZSwgdmFsdWU6IG5ld1ZhbHVlIH0pO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgbmFtZXMgb2YgYWxsIHZhcmlhYmxlcyBpbiB0aGUgc3VydmV5LlxuICAgICAqXG4gICAgICogW1ZhcmlhYmxlcyBoZWxwIHRvcGljXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2Rlc2lnbi1zdXJ2ZXkvY29uZGl0aW9uYWwtbG9naWMjdmFyaWFibGVzIChsaW5rU3R5bGUpKVxuICAgICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHZhcmlhYmxlIG5hbWVzLlxuICAgICAqIEBzZWUgZ2V0VmFyaWFibGVcbiAgICAgKiBAc2VlIHNldFZhcmlhYmxlXG4gICAgICovXG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLmdldFZhcmlhYmxlTmFtZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciByZXMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHRoaXMudmFyaWFibGVzSGFzaCkge1xuICAgICAgICAgICAgcmVzLnB1c2goa2V5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH07XG4gICAgLy9JU3VydmV5IGRhdGFcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuZ2V0VW5iaW5kVmFsdWUgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgaWYgKCEhdGhpcy5lZGl0aW5nT2JqKVxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICByZXR1cm4gX2hlbHBlcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkhlbHBlcnNcIl0uZ2V0VW5iaW5kVmFsdWUodmFsdWUpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIHZhbHVlIChhbnN3ZXIpIGZvciBhIHF1ZXN0aW9uIHdpdGggYSBzcGVjaWZpZWQgYG5hbWVgLlxuICAgICAqIEBwYXJhbSBuYW1lIEEgcXVlc3Rpb24gbmFtZS5cbiAgICAgKiBAcmV0dXJucyBBIHF1ZXN0aW9uIHZhbHVlIChhbnN3ZXIpLlxuICAgICAqIEBzZWUgZGF0YVxuICAgICAqIEBzZWUgc2V0VmFsdWVcbiAgICAgKi9cbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuZ2V0VmFsdWUgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICBpZiAoIW5hbWUgfHwgbmFtZS5sZW5ndGggPT0gMClcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLmdldERhdGFWYWx1ZUNvcmUodGhpcy52YWx1ZXNIYXNoLCBuYW1lKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VW5iaW5kVmFsdWUodmFsdWUpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogU2V0cyBhIHF1ZXN0aW9uIHZhbHVlIChhbnN3ZXIpLlxuICAgICAqXG4gICAgICogPiBUaGlzIG1ldGhvZCBleGVjdXRlcyBhbGwgdHJpZ2dlcnMgYW5kIHJlZXZhbHVhdGVzIGNvbmRpdGlvbnMgKGB2aXNpYmxlSWZgLCBgcmVxdWlyZWRJZGAsIGFuZCBvdGhlcnMpLiBJdCBhbHNvIHN3aXRjaGVzIHRoZSBzdXJ2ZXkgdG8gdGhlIG5leHQgcGFnZSBpZiB0aGUgW2Bnb05leHRQYWdlQXV0b21hdGljYF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL3N1cnZleS1kYXRhLW1vZGVsI2dvTmV4dFBhZ2VBdXRvbWF0aWMpIHByb3BlcnR5IGlzIGVuYWJsZWQgYW5kIGFsbCBxdWVzdGlvbnMgb24gdGhlIGN1cnJlbnQgcGFnZSBoYXZlIGNvcnJlY3QgYW5zd2Vycy5cbiAgICAgKiBAcGFyYW0gbmFtZSBBIHF1ZXN0aW9uIG5hbWUuXG4gICAgICogQHBhcmFtIG5ld1ZhbHVlIEEgbmV3IHF1ZXN0aW9uIHZhbHVlLlxuICAgICAqIEBwYXJhbSBsb2NOb3RpZmljYXRpb24gRm9yIGludGVybmFsIHVzZS5cbiAgICAgKiBAcGFyYW0gYWxsb3dOb3RpZnlWYWx1ZUNoYW5nZWQgRm9yIGludGVybmFsIHVzZS5cbiAgICAgKiBAc2VlIGRhdGFcbiAgICAgKiBAc2VlIGdldFZhbHVlXG4gICAgICovXG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLnNldFZhbHVlID0gZnVuY3Rpb24gKG5hbWUsIG5ld1F1ZXN0aW9uVmFsdWUsIGxvY05vdGlmaWNhdGlvbiwgYWxsb3dOb3RpZnlWYWx1ZUNoYW5nZWQsIHF1ZXN0aW9uTmFtZSkge1xuICAgICAgICBpZiAobG9jTm90aWZpY2F0aW9uID09PSB2b2lkIDApIHsgbG9jTm90aWZpY2F0aW9uID0gZmFsc2U7IH1cbiAgICAgICAgaWYgKGFsbG93Tm90aWZ5VmFsdWVDaGFuZ2VkID09PSB2b2lkIDApIHsgYWxsb3dOb3RpZnlWYWx1ZUNoYW5nZWQgPSB0cnVlOyB9XG4gICAgICAgIHZhciBuZXdWYWx1ZSA9IG5ld1F1ZXN0aW9uVmFsdWU7XG4gICAgICAgIGlmIChhbGxvd05vdGlmeVZhbHVlQ2hhbmdlZCkge1xuICAgICAgICAgICAgbmV3VmFsdWUgPSB0aGlzLnF1ZXN0aW9uT25WYWx1ZUNoYW5naW5nKG5hbWUsIG5ld1F1ZXN0aW9uVmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzVmFsaWRhdGVPblZhbHVlQ2hhbmdpbmcgJiZcbiAgICAgICAgICAgIHRoaXMuY2hlY2tFcnJvcnNPblZhbHVlQ2hhbmdpbmcobmFtZSwgbmV3VmFsdWUpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAoIXRoaXMuZWRpdGluZ09iaiAmJlxuICAgICAgICAgICAgdGhpcy5pc1ZhbHVlRXF1YWwobmFtZSwgbmV3VmFsdWUpICYmXG4gICAgICAgICAgICB0aGlzLmlzVHdvVmFsdWVFcXVhbHMobmV3VmFsdWUsIG5ld1F1ZXN0aW9uVmFsdWUpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIgb2xkVmFsdWUgPSB0aGlzLmdldFZhbHVlKG5hbWUpO1xuICAgICAgICBpZiAodGhpcy5pc1ZhbHVlRW1weU9uU2V0VmFsdWUobmFtZSwgbmV3VmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLmRlbGV0ZURhdGFWYWx1ZUNvcmUodGhpcy52YWx1ZXNIYXNoLCBuYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gdGhpcy5nZXRVbmJpbmRWYWx1ZShuZXdWYWx1ZSk7XG4gICAgICAgICAgICB0aGlzLnNldERhdGFWYWx1ZUNvcmUodGhpcy52YWx1ZXNIYXNoLCBuYW1lLCBuZXdWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVPblNldFZhbHVlKG5hbWUsIG5ld1ZhbHVlLCBvbGRWYWx1ZSwgbG9jTm90aWZpY2F0aW9uLCBhbGxvd05vdGlmeVZhbHVlQ2hhbmdlZCwgcXVlc3Rpb25OYW1lKTtcbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5pc1ZhbHVlRW1weU9uU2V0VmFsdWUgPSBmdW5jdGlvbiAobmFtZSwgdmFsKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbHVlRW1wdHkodmFsLCBmYWxzZSkpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmICghdGhpcy5lZGl0aW5nT2JqIHx8IHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0aW5nT2JqLmdldERlZmF1bHRQcm9wZXJ0eVZhbHVlKG5hbWUpID09PSB2YWw7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUudXBkYXRlT25TZXRWYWx1ZSA9IGZ1bmN0aW9uIChuYW1lLCBuZXdWYWx1ZSwgb2xkVmFsdWUsIGxvY05vdGlmaWNhdGlvbiwgYWxsb3dOb3RpZnlWYWx1ZUNoYW5nZWQsIHF1ZXN0aW9uTmFtZSkge1xuICAgICAgICBpZiAobG9jTm90aWZpY2F0aW9uID09PSB2b2lkIDApIHsgbG9jTm90aWZpY2F0aW9uID0gZmFsc2U7IH1cbiAgICAgICAgaWYgKGFsbG93Tm90aWZ5VmFsdWVDaGFuZ2VkID09PSB2b2lkIDApIHsgYWxsb3dOb3RpZnlWYWx1ZUNoYW5nZWQgPSB0cnVlOyB9XG4gICAgICAgIHRoaXMudXBkYXRlUXVlc3Rpb25WYWx1ZShuYW1lLCBuZXdWYWx1ZSk7XG4gICAgICAgIGlmIChsb2NOb3RpZmljYXRpb24gPT09IHRydWUgfHwgdGhpcy5pc0Rpc3Bvc2VkIHx8IHRoaXMuaXNSdW5uaW5nRWxlbWVudHNCaW5kaW5ncylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgcXVlc3Rpb25OYW1lID0gcXVlc3Rpb25OYW1lIHx8IG5hbWU7XG4gICAgICAgIHZhciB0cmlnZ2VyS2V5cyA9IHt9O1xuICAgICAgICB0cmlnZ2VyS2V5c1tuYW1lXSA9IHsgbmV3VmFsdWU6IG5ld1ZhbHVlLCBvbGRWYWx1ZTogb2xkVmFsdWUgfTtcbiAgICAgICAgdGhpcy5ydW5Db25kaXRpb25PblZhbHVlQ2hhbmdlZChuYW1lLCBuZXdWYWx1ZSk7XG4gICAgICAgIHRoaXMuY2hlY2tUcmlnZ2Vycyh0cmlnZ2VyS2V5cywgZmFsc2UsIGZhbHNlLCBuYW1lKTtcbiAgICAgICAgaWYgKGFsbG93Tm90aWZ5VmFsdWVDaGFuZ2VkKVxuICAgICAgICAgICAgdGhpcy5ub3RpZnlRdWVzdGlvbk9uVmFsdWVDaGFuZ2VkKG5hbWUsIG5ld1ZhbHVlLCBxdWVzdGlvbk5hbWUpO1xuICAgICAgICBpZiAobG9jTm90aWZpY2F0aW9uICE9PSBcInRleHRcIikge1xuICAgICAgICAgICAgdGhpcy50cnlHb05leHRQYWdlQXV0b21hdGljKG5hbWUpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuaXNWYWx1ZUVxdWFsID0gZnVuY3Rpb24gKG5hbWUsIG5ld1ZhbHVlKSB7XG4gICAgICAgIGlmIChuZXdWYWx1ZSA9PT0gXCJcIiB8fCBuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgbmV3VmFsdWUgPSBudWxsO1xuICAgICAgICB2YXIgb2xkVmFsdWUgPSB0aGlzLmdldFZhbHVlKG5hbWUpO1xuICAgICAgICBpZiAob2xkVmFsdWUgPT09IFwiXCIgfHwgb2xkVmFsdWUgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIG9sZFZhbHVlID0gbnVsbDtcbiAgICAgICAgaWYgKG5ld1ZhbHVlID09PSBudWxsIHx8IG9sZFZhbHVlID09PSBudWxsKVxuICAgICAgICAgICAgcmV0dXJuIG5ld1ZhbHVlID09PSBvbGRWYWx1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNUd29WYWx1ZUVxdWFscyhuZXdWYWx1ZSwgb2xkVmFsdWUpO1xuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLmRvT25QYWdlQWRkZWQgPSBmdW5jdGlvbiAocGFnZSkge1xuICAgICAgICBwYWdlLnNldFN1cnZleUltcGwodGhpcyk7XG4gICAgICAgIGlmICghcGFnZS5uYW1lKVxuICAgICAgICAgICAgcGFnZS5uYW1lID0gdGhpcy5nZW5lcmF0ZU5ld05hbWUodGhpcy5wYWdlcywgXCJwYWdlXCIpO1xuICAgICAgICB0aGlzLnF1ZXN0aW9uSGFzaGVzUGFuZWxBZGRlZChwYWdlKTtcbiAgICAgICAgdGhpcy51cGRhdGVWaXNpYmxlSW5kZXhlcygpO1xuICAgICAgICBpZiAoISF0aGlzLnJ1bm5pbmdQYWdlcylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKCF0aGlzLmlzTG9hZGluZ0Zyb21Kc29uKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVByb2dyZXNzVGV4dCgpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVDdXJyZW50UGFnZSgpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBvcHRpb25zID0geyBwYWdlOiBwYWdlIH07XG4gICAgICAgIHRoaXMub25QYWdlQWRkZWQuZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5kb09uUGFnZVJlbW92ZWQgPSBmdW5jdGlvbiAocGFnZSkge1xuICAgICAgICBwYWdlLnNldFN1cnZleUltcGwobnVsbCk7XG4gICAgICAgIGlmICghIXRoaXMucnVubmluZ1BhZ2VzKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAocGFnZSA9PT0gdGhpcy5jdXJyZW50UGFnZSkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVDdXJyZW50UGFnZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlVmlzaWJsZUluZGV4ZXMoKTtcbiAgICAgICAgdGhpcy51cGRhdGVQcm9ncmVzc1RleHQoKTtcbiAgICAgICAgdGhpcy51cGRhdGVMYXp5UmVuZGVyaW5nUm93c09uUmVtb3ZpbmdFbGVtZW50cygpO1xuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLmdlbmVyYXRlTmV3TmFtZSA9IGZ1bmN0aW9uIChlbGVtZW50cywgYmFzZU5hbWUpIHtcbiAgICAgICAgdmFyIGtleXMgPSB7fTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIGtleXNbZWxlbWVudHNbaV1bXCJuYW1lXCJdXSA9IHRydWU7XG4gICAgICAgIHZhciBpbmRleCA9IDE7XG4gICAgICAgIHdoaWxlIChrZXlzW2Jhc2VOYW1lICsgaW5kZXhdKVxuICAgICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgcmV0dXJuIGJhc2VOYW1lICsgaW5kZXg7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUudHJ5R29OZXh0UGFnZUF1dG9tYXRpYyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIGlmICghIXRoaXMuaXNFbmRMb2FkaW5nRnJvbUpzb24gfHxcbiAgICAgICAgICAgICF0aGlzLmdvTmV4dFBhZ2VBdXRvbWF0aWMgfHxcbiAgICAgICAgICAgICF0aGlzLmN1cnJlbnRQYWdlKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIgcXVlc3Rpb24gPSB0aGlzLmdldFF1ZXN0aW9uQnlWYWx1ZU5hbWUobmFtZSk7XG4gICAgICAgIGlmICghcXVlc3Rpb24gfHxcbiAgICAgICAgICAgICghIXF1ZXN0aW9uICYmXG4gICAgICAgICAgICAgICAgKCFxdWVzdGlvbi52aXNpYmxlIHx8ICFxdWVzdGlvbi5zdXBwb3J0R29OZXh0UGFnZUF1dG9tYXRpYygpKSkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmICghcXVlc3Rpb24udmFsaWRhdGUoZmFsc2UpICYmICFxdWVzdGlvbi5zdXBwb3J0R29OZXh0UGFnZUVycm9yKCkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLmdldEN1cnJlbnRQYWdlUXVlc3Rpb25zKCk7XG4gICAgICAgIGlmIChxdWVzdGlvbnMuaW5kZXhPZihxdWVzdGlvbikgPCAwKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHF1ZXN0aW9uc1tpXS5oYXNJbnB1dCAmJiBxdWVzdGlvbnNbaV0uaXNFbXB0eSgpKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuY2hlY2tJc0N1cnJlbnRQYWdlSGFzRXJyb3JzKGZhbHNlKSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlzTGFzdFBhZ2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5leHRQYWdlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5nb05leHRQYWdlQXV0b21hdGljID09PSB0cnVlICYmXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWxsb3dDb21wbGV0ZVN1cnZleUF1dG9tYXRpYykge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1Nob3dQcmV2aWV3QmVmb3JlQ29tcGxldGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd1ByZXZpZXcoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29tcGxldGVMYXN0UGFnZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgY29tbWVudCB2YWx1ZSBmcm9tIGEgcXVlc3Rpb24gd2l0aCBhIHNwZWNpZmllZCBgbmFtZWAuXG4gICAgICogQHBhcmFtIG5hbWUgQSBxdWVzdGlvbiBuYW1lLlxuICAgICAqIEByZXR1cm5zIEEgY29tbWVudC5cbiAgICAgKiBAc2VlIHNldENvbW1lbnRcbiAgICAgKi9cbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuZ2V0Q29tbWVudCA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIHZhciByZXMgPSB0aGlzLmdldFZhbHVlKG5hbWUgKyB0aGlzLmNvbW1lbnRTdWZmaXgpO1xuICAgICAgICByZXR1cm4gcmVzIHx8IFwiXCI7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBTZXRzIGEgY29tbWVudCB2YWx1ZSB0byBhIHF1ZXN0aW9uIHdpdGggYSBzcGVjaWZpZWQgYG5hbWVgLlxuICAgICAqIEBwYXJhbSBuYW1lIEEgcXVlc3Rpb24gbmFtZS5cbiAgICAgKiBAcGFyYW0gbmV3VmFsdWUgQSBuZXcgY29tbWVudCB2YWx1ZS5cbiAgICAgKiBAcGFyYW0gbG9jTm90aWZpY2F0aW9uIEZvciBpbnRlcm5hbCB1c2UuXG4gICAgICogQHNlZSBnZXRDb21tZW50XG4gICAgICovXG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLnNldENvbW1lbnQgPSBmdW5jdGlvbiAobmFtZSwgbmV3VmFsdWUsIGxvY05vdGlmaWNhdGlvbikge1xuICAgICAgICBpZiAobG9jTm90aWZpY2F0aW9uID09PSB2b2lkIDApIHsgbG9jTm90aWZpY2F0aW9uID0gZmFsc2U7IH1cbiAgICAgICAgaWYgKCFuZXdWYWx1ZSlcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gXCJcIjtcbiAgICAgICAgaWYgKHRoaXMuaXNUd29WYWx1ZUVxdWFscyhuZXdWYWx1ZSwgdGhpcy5nZXRDb21tZW50KG5hbWUpKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIGNvbW1lbnROYW1lID0gbmFtZSArIHRoaXMuY29tbWVudFN1ZmZpeDtcbiAgICAgICAgaWYgKHRoaXMuaXNWYWx1ZUVtcHR5KG5ld1ZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy5kZWxldGVEYXRhVmFsdWVDb3JlKHRoaXMudmFsdWVzSGFzaCwgY29tbWVudE5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXREYXRhVmFsdWVDb3JlKHRoaXMudmFsdWVzSGFzaCwgY29tbWVudE5hbWUsIG5ld1ZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5nZXRRdWVzdGlvbnNCeVZhbHVlTmFtZShuYW1lKTtcbiAgICAgICAgaWYgKCEhcXVlc3Rpb25zKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHF1ZXN0aW9uc1tpXS51cGRhdGVDb21tZW50RnJvbVN1cnZleShuZXdWYWx1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja1F1ZXN0aW9uRXJyb3JPblZhbHVlQ2hhbmdlZChxdWVzdGlvbnNbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghbG9jTm90aWZpY2F0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnJ1bkNvbmRpdGlvbk9uVmFsdWVDaGFuZ2VkKG5hbWUsIHRoaXMuZ2V0VmFsdWUobmFtZSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb2NOb3RpZmljYXRpb24gIT09IFwidGV4dFwiKSB7XG4gICAgICAgICAgICB0aGlzLnRyeUdvTmV4dFBhZ2VBdXRvbWF0aWMobmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHF1ZXN0aW9uID0gdGhpcy5nZXRRdWVzdGlvbkJ5TmFtZShuYW1lKTtcbiAgICAgICAgaWYgKHF1ZXN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLm9uVmFsdWVDaGFuZ2VkLmZpcmUodGhpcywge1xuICAgICAgICAgICAgICAgIG5hbWU6IGNvbW1lbnROYW1lLFxuICAgICAgICAgICAgICAgIHF1ZXN0aW9uOiBxdWVzdGlvbixcbiAgICAgICAgICAgICAgICB2YWx1ZTogbmV3VmFsdWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgLyoqXG4gICAgICogRGVsZXRlcyBhbiBhbnN3ZXIgZnJvbSBzdXJ2ZXkgcmVzdWx0cy5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBBbiBvYmplY3QgcHJvcGVydHkgdGhhdCBzdG9yZXMgdGhlIGFuc3dlciB0byBkZWxldGUuIFBhc3MgYSBxdWVzdGlvbidzIFtgdmFsdWVOYW1lYF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL3F1ZXN0aW9uI3ZhbHVlTmFtZSkgb3IgW2BuYW1lYF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL3F1ZXN0aW9uI25hbWUpLlxuICAgICAqL1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5jbGVhclZhbHVlID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgdGhpcy5zZXRWYWx1ZShuYW1lLCBudWxsKTtcbiAgICAgICAgdGhpcy5zZXRDb21tZW50KG5hbWUsIG51bGwpO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleU1vZGVsLnByb3RvdHlwZSwgXCJjbGVhclZhbHVlT25EaXNhYmxlSXRlbXNcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHdoZXRoZXIgdG8gcmVtb3ZlIGRpc2FibGVkIGNob2ljZXMgZnJvbSB0aGUgdmFsdWUgaW4gW0Ryb3Bkb3duXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2UvZHJvcGRvd24tbWVudS1tb2RlbCksIFtDaGVja2JveGVzXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2UvY2hlY2tib3gtcXVlc3Rpb24tbW9kZWwpLCBhbmQgW1JhZGlvIEJ1dHRvbiBHcm91cF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL3JhZGlvLWJ1dHRvbi1xdWVzdGlvbi1tb2RlbCkgcXVlc3Rpb25zLlxuICAgICAgICAgKlxuICAgICAgICAgKiBEZWZhdWx0IHZhbHVlOiBgZmFsc2VgXG4gICAgICAgICAqXG4gICAgICAgICAqID4gVGhpcyBwcm9wZXJ0eSBjYW5ub3QgYmUgc3BlY2lmaWVkIGluIHRoZSBzdXJ2ZXkgSlNPTiBzY2hlbWEuIFVzZSBkb3Qgbm90YXRpb24gdG8gc3BlY2lmeSBpdC5cbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNsZWFyVmFsdWVPbkRpc2FibGVJdGVtc1wiLCBmYWxzZSk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY2xlYXJWYWx1ZU9uRGlzYWJsZUl0ZW1zXCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuZ2V0UXVlc3Rpb25DbGVhcklmSW52aXNpYmxlID0gZnVuY3Rpb24gKHF1ZXN0aW9uQ2xlYXJJZikge1xuICAgICAgICBpZiAodGhpcy5pc1Nob3dpbmdQcmV2aWV3IHx8IHRoaXMucnVubmluZ1BhZ2VzKVxuICAgICAgICAgICAgcmV0dXJuIFwibm9uZVwiO1xuICAgICAgICBpZiAocXVlc3Rpb25DbGVhcklmICE9PSBcImRlZmF1bHRcIilcbiAgICAgICAgICAgIHJldHVybiBxdWVzdGlvbkNsZWFySWY7XG4gICAgICAgIHJldHVybiB0aGlzLmNsZWFySW52aXNpYmxlVmFsdWVzO1xuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLnF1ZXN0aW9uVmlzaWJpbGl0eUNoYW5nZWQgPSBmdW5jdGlvbiAocXVlc3Rpb24sIG5ld1ZhbHVlKSB7XG4gICAgICAgIHRoaXMudXBkYXRlVmlzaWJsZUluZGV4ZXMoKTtcbiAgICAgICAgdGhpcy5vblF1ZXN0aW9uVmlzaWJsZUNoYW5nZWQuZmlyZSh0aGlzLCB7XG4gICAgICAgICAgICBxdWVzdGlvbjogcXVlc3Rpb24sXG4gICAgICAgICAgICBuYW1lOiBxdWVzdGlvbi5uYW1lLFxuICAgICAgICAgICAgdmlzaWJsZTogbmV3VmFsdWUsXG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLnBhZ2VWaXNpYmlsaXR5Q2hhbmdlZCA9IGZ1bmN0aW9uIChwYWdlLCBuZXdWYWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5pc0xvYWRpbmdGcm9tSnNvbilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKG5ld1ZhbHVlICYmICF0aGlzLmN1cnJlbnRQYWdlIHx8IHBhZ2UgPT09IHRoaXMuY3VycmVudFBhZ2UpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ3VycmVudFBhZ2UoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZVZpc2libGVJbmRleGVzKCk7XG4gICAgICAgIHRoaXMub25QYWdlVmlzaWJsZUNoYW5nZWQuZmlyZSh0aGlzLCB7XG4gICAgICAgICAgICBwYWdlOiBwYWdlLFxuICAgICAgICAgICAgdmlzaWJsZTogbmV3VmFsdWUsXG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLnBhbmVsVmlzaWJpbGl0eUNoYW5nZWQgPSBmdW5jdGlvbiAocGFuZWwsIG5ld1ZhbHVlKSB7XG4gICAgICAgIHRoaXMudXBkYXRlVmlzaWJsZUluZGV4ZXMoKTtcbiAgICAgICAgdGhpcy5vblBhbmVsVmlzaWJsZUNoYW5nZWQuZmlyZSh0aGlzLCB7XG4gICAgICAgICAgICBwYW5lbDogcGFuZWwsXG4gICAgICAgICAgICB2aXNpYmxlOiBuZXdWYWx1ZSxcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUucXVlc3Rpb25DcmVhdGVkID0gZnVuY3Rpb24gKHF1ZXN0aW9uKSB7XG4gICAgICAgIHRoaXMub25RdWVzdGlvbkNyZWF0ZWQuZmlyZSh0aGlzLCB7IHF1ZXN0aW9uOiBxdWVzdGlvbiB9KTtcbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5xdWVzdGlvbkFkZGVkID0gZnVuY3Rpb24gKHF1ZXN0aW9uLCBpbmRleCwgcGFyZW50UGFuZWwsIHJvb3RQYW5lbCkge1xuICAgICAgICBpZiAoIXF1ZXN0aW9uLm5hbWUpIHtcbiAgICAgICAgICAgIHF1ZXN0aW9uLm5hbWUgPSB0aGlzLmdlbmVyYXRlTmV3TmFtZSh0aGlzLmdldEFsbFF1ZXN0aW9ucyhmYWxzZSwgdHJ1ZSksIFwicXVlc3Rpb25cIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEhcXVlc3Rpb24ucGFnZSkge1xuICAgICAgICAgICAgdGhpcy5xdWVzdGlvbkhhc2hlc0FkZGVkKHF1ZXN0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuY3VycmVudFBhZ2UpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ3VycmVudFBhZ2UoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZVZpc2libGVJbmRleGVzKCk7XG4gICAgICAgIHRoaXMuc2V0Q2FsY3VsYXRlZFdpZHRoTW9kZVVwZGF0ZXIoKTtcbiAgICAgICAgaWYgKCF0aGlzLmlzTW92aW5nUXVlc3Rpb24gfHwgdGhpcy5pc0Rlc2lnbk1vZGUgJiYgIV9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfX1tcInNldHRpbmdzXCJdLnN1cHBvcnRDcmVhdG9yVjIpIHtcbiAgICAgICAgICAgIHRoaXMub25RdWVzdGlvbkFkZGVkLmZpcmUodGhpcywge1xuICAgICAgICAgICAgICAgIHF1ZXN0aW9uOiBxdWVzdGlvbixcbiAgICAgICAgICAgICAgICBuYW1lOiBxdWVzdGlvbi5uYW1lLFxuICAgICAgICAgICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgICAgICAgICBwYXJlbnQ6IHBhcmVudFBhbmVsLFxuICAgICAgICAgICAgICAgIHBhZ2U6IHJvb3RQYW5lbCxcbiAgICAgICAgICAgICAgICBwYXJlbnRQYW5lbDogcGFyZW50UGFuZWwsXG4gICAgICAgICAgICAgICAgcm9vdFBhbmVsOiByb290UGFuZWwsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLnF1ZXN0aW9uUmVtb3ZlZCA9IGZ1bmN0aW9uIChxdWVzdGlvbikge1xuICAgICAgICB0aGlzLnF1ZXN0aW9uSGFzaGVzUmVtb3ZlZChxdWVzdGlvbiwgcXVlc3Rpb24ubmFtZSwgcXVlc3Rpb24uZ2V0VmFsdWVOYW1lKCkpO1xuICAgICAgICB0aGlzLnVwZGF0ZVZpc2libGVJbmRleGVzKCk7XG4gICAgICAgIHRoaXMub25RdWVzdGlvblJlbW92ZWQuZmlyZSh0aGlzLCB7XG4gICAgICAgICAgICBxdWVzdGlvbjogcXVlc3Rpb24sXG4gICAgICAgICAgICBuYW1lOiBxdWVzdGlvbi5uYW1lLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy51cGRhdGVMYXp5UmVuZGVyaW5nUm93c09uUmVtb3ZpbmdFbGVtZW50cygpO1xuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLnF1ZXN0aW9uUmVuYW1lZCA9IGZ1bmN0aW9uIChxdWVzdGlvbiwgb2xkTmFtZSwgb2xkVmFsdWVOYW1lKSB7XG4gICAgICAgIHRoaXMucXVlc3Rpb25IYXNoZXNSZW1vdmVkKHF1ZXN0aW9uLCBvbGROYW1lLCBvbGRWYWx1ZU5hbWUpO1xuICAgICAgICB0aGlzLnF1ZXN0aW9uSGFzaGVzQWRkZWQocXVlc3Rpb24pO1xuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLnF1ZXN0aW9uSGFzaGVzQ2xlYXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMucXVlc3Rpb25IYXNoZXMubmFtZXMgPSB7fTtcbiAgICAgICAgdGhpcy5xdWVzdGlvbkhhc2hlcy5uYW1lc0luc2Vuc2l0aXZlID0ge307XG4gICAgICAgIHRoaXMucXVlc3Rpb25IYXNoZXMudmFsdWVOYW1lcyA9IHt9O1xuICAgICAgICB0aGlzLnF1ZXN0aW9uSGFzaGVzLnZhbHVlTmFtZXNJbnNlbnNpdGl2ZSA9IHt9O1xuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLnF1ZXN0aW9uSGFzaGVzUGFuZWxBZGRlZCA9IGZ1bmN0aW9uIChwYW5lbCkge1xuICAgICAgICBpZiAodGhpcy5pc0xvYWRpbmdGcm9tSnNvbilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIHF1ZXN0aW9ucyA9IHBhbmVsLnF1ZXN0aW9ucztcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25IYXNoZXNBZGRlZChxdWVzdGlvbnNbaV0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUucXVlc3Rpb25IYXNoZXNBZGRlZCA9IGZ1bmN0aW9uIChxdWVzdGlvbikge1xuICAgICAgICB0aGlzLnF1ZXN0aW9uSGFzaEFkZGVkQ29yZSh0aGlzLnF1ZXN0aW9uSGFzaGVzLm5hbWVzLCBxdWVzdGlvbiwgcXVlc3Rpb24ubmFtZSk7XG4gICAgICAgIHRoaXMucXVlc3Rpb25IYXNoQWRkZWRDb3JlKHRoaXMucXVlc3Rpb25IYXNoZXMubmFtZXNJbnNlbnNpdGl2ZSwgcXVlc3Rpb24sIHF1ZXN0aW9uLm5hbWUudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIHRoaXMucXVlc3Rpb25IYXNoQWRkZWRDb3JlKHRoaXMucXVlc3Rpb25IYXNoZXMudmFsdWVOYW1lcywgcXVlc3Rpb24sIHF1ZXN0aW9uLmdldFZhbHVlTmFtZSgpKTtcbiAgICAgICAgdGhpcy5xdWVzdGlvbkhhc2hBZGRlZENvcmUodGhpcy5xdWVzdGlvbkhhc2hlcy52YWx1ZU5hbWVzSW5zZW5zaXRpdmUsIHF1ZXN0aW9uLCBxdWVzdGlvbi5nZXRWYWx1ZU5hbWUoKS50b0xvd2VyQ2FzZSgpKTtcbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5xdWVzdGlvbkhhc2hlc1JlbW92ZWQgPSBmdW5jdGlvbiAocXVlc3Rpb24sIG5hbWUsIHZhbHVlTmFtZSkge1xuICAgICAgICBpZiAoISFuYW1lKSB7XG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uSGFzaFJlbW92ZWRDb3JlKHRoaXMucXVlc3Rpb25IYXNoZXMubmFtZXMsIHF1ZXN0aW9uLCBuYW1lKTtcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25IYXNoUmVtb3ZlZENvcmUodGhpcy5xdWVzdGlvbkhhc2hlcy5uYW1lc0luc2Vuc2l0aXZlLCBxdWVzdGlvbiwgbmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoISF2YWx1ZU5hbWUpIHtcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25IYXNoUmVtb3ZlZENvcmUodGhpcy5xdWVzdGlvbkhhc2hlcy52YWx1ZU5hbWVzLCBxdWVzdGlvbiwgdmFsdWVOYW1lKTtcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25IYXNoUmVtb3ZlZENvcmUodGhpcy5xdWVzdGlvbkhhc2hlcy52YWx1ZU5hbWVzSW5zZW5zaXRpdmUsIHF1ZXN0aW9uLCB2YWx1ZU5hbWUudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5xdWVzdGlvbkhhc2hBZGRlZENvcmUgPSBmdW5jdGlvbiAoaGFzaCwgcXVlc3Rpb24sIG5hbWUpIHtcbiAgICAgICAgdmFyIHJlcyA9IGhhc2hbbmFtZV07XG4gICAgICAgIGlmICghIXJlcykge1xuICAgICAgICAgICAgdmFyIHJlcyA9IGhhc2hbbmFtZV07XG4gICAgICAgICAgICBpZiAocmVzLmluZGV4T2YocXVlc3Rpb24pIDwgMCkge1xuICAgICAgICAgICAgICAgIHJlcy5wdXNoKHF1ZXN0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGhhc2hbbmFtZV0gPSBbcXVlc3Rpb25dO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUucXVlc3Rpb25IYXNoUmVtb3ZlZENvcmUgPSBmdW5jdGlvbiAoaGFzaCwgcXVlc3Rpb24sIG5hbWUpIHtcbiAgICAgICAgdmFyIHJlcyA9IGhhc2hbbmFtZV07XG4gICAgICAgIGlmICghcmVzKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIgaW5kZXggPSByZXMuaW5kZXhPZihxdWVzdGlvbik7XG4gICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICByZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICBkZWxldGUgaGFzaFtuYW1lXTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLnBhbmVsQWRkZWQgPSBmdW5jdGlvbiAocGFuZWwsIGluZGV4LCBwYXJlbnRQYW5lbCwgcm9vdFBhbmVsKSB7XG4gICAgICAgIGlmICghcGFuZWwubmFtZSkge1xuICAgICAgICAgICAgcGFuZWwubmFtZSA9IHRoaXMuZ2VuZXJhdGVOZXdOYW1lKHRoaXMuZ2V0QWxsUGFuZWxzKGZhbHNlLCB0cnVlKSwgXCJwYW5lbFwiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnF1ZXN0aW9uSGFzaGVzUGFuZWxBZGRlZChwYW5lbCk7XG4gICAgICAgIHRoaXMudXBkYXRlVmlzaWJsZUluZGV4ZXMoKTtcbiAgICAgICAgdGhpcy5vblBhbmVsQWRkZWQuZmlyZSh0aGlzLCB7XG4gICAgICAgICAgICBwYW5lbDogcGFuZWwsXG4gICAgICAgICAgICBuYW1lOiBwYW5lbC5uYW1lLFxuICAgICAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICAgICAgcGFyZW50OiBwYXJlbnRQYW5lbCxcbiAgICAgICAgICAgIHBhZ2U6IHJvb3RQYW5lbCxcbiAgICAgICAgICAgIHBhcmVudFBhbmVsOiBwYXJlbnRQYW5lbCxcbiAgICAgICAgICAgIHJvb3RQYW5lbDogcm9vdFBhbmVsLFxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5wYW5lbFJlbW92ZWQgPSBmdW5jdGlvbiAocGFuZWwpIHtcbiAgICAgICAgdGhpcy51cGRhdGVWaXNpYmxlSW5kZXhlcygpO1xuICAgICAgICB0aGlzLm9uUGFuZWxSZW1vdmVkLmZpcmUodGhpcywgeyBwYW5lbDogcGFuZWwsIG5hbWU6IHBhbmVsLm5hbWUgfSk7XG4gICAgICAgIHRoaXMudXBkYXRlTGF6eVJlbmRlcmluZ1Jvd3NPblJlbW92aW5nRWxlbWVudHMoKTtcbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS52YWxpZGF0ZVF1ZXN0aW9uID0gZnVuY3Rpb24gKHF1ZXN0aW9uKSB7XG4gICAgICAgIGlmICh0aGlzLm9uVmFsaWRhdGVRdWVzdGlvbi5pc0VtcHR5KVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgICAgICAgbmFtZTogcXVlc3Rpb24ubmFtZSxcbiAgICAgICAgICAgIHF1ZXN0aW9uOiBxdWVzdGlvbixcbiAgICAgICAgICAgIHZhbHVlOiBxdWVzdGlvbi52YWx1ZSxcbiAgICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLm9uVmFsaWRhdGVRdWVzdGlvbi5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gb3B0aW9ucy5lcnJvciA/IG5ldyBfZXJyb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1tcIkN1c3RvbUVycm9yXCJdKG9wdGlvbnMuZXJyb3IsIHRoaXMpIDogbnVsbDtcbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS52YWxpZGF0ZVBhbmVsID0gZnVuY3Rpb24gKHBhbmVsKSB7XG4gICAgICAgIGlmICh0aGlzLm9uVmFsaWRhdGVQYW5lbC5pc0VtcHR5KVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgICAgICAgbmFtZTogcGFuZWwubmFtZSxcbiAgICAgICAgICAgIHBhbmVsOiBwYW5lbCxcbiAgICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLm9uVmFsaWRhdGVQYW5lbC5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gb3B0aW9ucy5lcnJvciA/IG5ldyBfZXJyb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1tcIkN1c3RvbUVycm9yXCJdKG9wdGlvbnMuZXJyb3IsIHRoaXMpIDogbnVsbDtcbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5wcm9jZXNzSHRtbCA9IGZ1bmN0aW9uIChodG1sLCByZWFzb24pIHtcbiAgICAgICAgaWYgKCFyZWFzb24pXG4gICAgICAgICAgICByZWFzb24gPSBcIlwiO1xuICAgICAgICB2YXIgb3B0aW9ucyA9IHsgaHRtbDogaHRtbCwgcmVhc29uOiByZWFzb24gfTtcbiAgICAgICAgdGhpcy5vblByb2Nlc3NIdG1sLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NUZXh0KG9wdGlvbnMuaHRtbCwgdHJ1ZSk7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUucHJvY2Vzc1RleHQgPSBmdW5jdGlvbiAodGV4dCwgcmV0dXJuRGlzcGxheVZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NUZXh0RXgodGV4dCwgcmV0dXJuRGlzcGxheVZhbHVlLCBmYWxzZSkudGV4dDtcbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5wcm9jZXNzVGV4dEV4ID0gZnVuY3Rpb24gKHRleHQsIHJldHVybkRpc3BsYXlWYWx1ZSwgZG9FbmNvZGluZykge1xuICAgICAgICB2YXIgcmVzID0ge1xuICAgICAgICAgICAgdGV4dDogdGhpcy5wcm9jZXNzVGV4dENvcmUodGV4dCwgcmV0dXJuRGlzcGxheVZhbHVlLCBkb0VuY29kaW5nKSxcbiAgICAgICAgICAgIGhhc0FsbFZhbHVlc09uTGFzdFJ1bjogdHJ1ZSxcbiAgICAgICAgfTtcbiAgICAgICAgcmVzLmhhc0FsbFZhbHVlc09uTGFzdFJ1biA9IHRoaXMudGV4dFByZVByb2Nlc3Nvci5oYXNBbGxWYWx1ZXNPbkxhc3RSdW47XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5TW9kZWwucHJvdG90eXBlLCBcInRleHRQcmVQcm9jZXNzb3JcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgICAgICBpZiAoIXRoaXMudGV4dFByZVByb2Nlc3NvclZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50ZXh0UHJlUHJvY2Vzc29yVmFsdWUgPSBuZXcgX3RleHRQcmVQcm9jZXNzb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1tcIlRleHRQcmVQcm9jZXNzb3JcIl0oKTtcbiAgICAgICAgICAgICAgICB0aGlzLnRleHRQcmVQcm9jZXNzb3JWYWx1ZS5vblByb2Nlc3MgPSBmdW5jdGlvbiAodGV4dFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIF90aGlzLmdldFByb2Nlc3NlZFRleHRWYWx1ZSh0ZXh0VmFsdWUpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0UHJlUHJvY2Vzc29yVmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUucHJvY2Vzc1RleHRDb3JlID0gZnVuY3Rpb24gKHRleHQsIHJldHVybkRpc3BsYXlWYWx1ZSwgZG9FbmNvZGluZykge1xuICAgICAgICBpZiAoZG9FbmNvZGluZyA9PT0gdm9pZCAwKSB7IGRvRW5jb2RpbmcgPSBmYWxzZTsgfVxuICAgICAgICBpZiAodGhpcy5pc0Rlc2lnbk1vZGUpXG4gICAgICAgICAgICByZXR1cm4gdGV4dDtcbiAgICAgICAgcmV0dXJuIHRoaXMudGV4dFByZVByb2Nlc3Nvci5wcm9jZXNzKHRleHQsIHJldHVybkRpc3BsYXlWYWx1ZSwgZG9FbmNvZGluZyk7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuZ2V0U3VydmV5TWFya2Rvd25IdG1sID0gZnVuY3Rpb24gKGVsZW1lbnQsIHRleHQsIG5hbWUpIHtcbiAgICAgICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgICAgICAgICAgdGV4dDogdGV4dCxcbiAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICBodG1sOiBudWxsLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLm9uVGV4dE1hcmtkb3duLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBvcHRpb25zLmh0bWw7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuZ2V0Q29ycmVjdGVkQW5zd2VyQ291bnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldENvcnJlY3RBbnN3ZXJDb3VudCgpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGNvcnJlY3QgYW5zd2VycyBpbiBhIHF1aXouXG4gICAgICpcbiAgICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBxdWl6emVzLCByZWZlciB0byB0aGUgZm9sbG93aW5nIHR1dG9yaWFsOiBbQ3JlYXRlIGEgUXVpel0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9kZXNpZ24tc3VydmV5L2NyZWF0ZS1hLXF1aXopLlxuICAgICAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgY29ycmVjdCBhbnN3ZXJzIGluIGEgcXVpei5cbiAgICAgKiBAc2VlIGdldFF1aXpRdWVzdGlvbkNvdW50XG4gICAgICogQHNlZSBnZXRJbkNvcnJlY3RBbnN3ZXJDb3VudFxuICAgICAqL1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5nZXRDb3JyZWN0QW5zd2VyQ291bnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldENvcnJlY3RlZEFuc3dlckNvdW50Q29yZSh0cnVlKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBxdWl6IHF1ZXN0aW9ucy4gQSBxdWVzdGlvbiBjb3VudHMgaWYgaXQgaXMgdmlzaWJsZSwgaGFzIGFuIGlucHV0IGZpZWxkLCBhbmQgc3BlY2lmaWVzIFtgY29ycmVjdEFuc3dlcmBdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vYXBpLXJlZmVyZW5jZS9jaGVja2JveC1xdWVzdGlvbi1tb2RlbCNjb3JyZWN0QW5zd2VyKS5cbiAgICAgKlxuICAgICAqIFRoaXMgbnVtYmVyIG1heSBiZSBkaWZmZXJlbnQgZnJvbSBgZ2V0UXVpelF1ZXN0aW9ucygpLmxlbmd0aGAgYmVjYXVzZSBjZXJ0YWluIHF1ZXN0aW9uIHR5cGVzIChmb3IgaW5zdGFuY2UsIG1hdHJpeC1saWtlIHR5cGVzKSBpbmNsdWRlIG1vcmUgdGhhbiBvbmUgcXVlc3Rpb24uXG4gICAgICpcbiAgICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBxdWl6emVzLCByZWZlciB0byB0aGUgZm9sbG93aW5nIHR1dG9yaWFsOiBbQ3JlYXRlIGEgUXVpel0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9kZXNpZ24tc3VydmV5L2NyZWF0ZS1hLXF1aXopLlxuICAgICAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgcXVpeiBxdWVzdGlvbnMuXG4gICAgICogQHNlZSBnZXRRdWl6UXVlc3Rpb25zXG4gICAgICovXG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLmdldFF1aXpRdWVzdGlvbkNvdW50ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5nZXRRdWl6UXVlc3Rpb25zKCk7XG4gICAgICAgIHZhciByZXMgPSAwO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgcmVzICs9IHF1ZXN0aW9uc1tpXS5xdWl6UXVlc3Rpb25Db3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLmdldEluQ29ycmVjdGVkQW5zd2VyQ291bnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEluQ29ycmVjdEFuc3dlckNvdW50KCk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgaW5jb3JyZWN0IGFuc3dlcnMgaW4gYSBxdWl6LlxuICAgICAqXG4gICAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcXVpenplcywgcmVmZXIgdG8gdGhlIGZvbGxvd2luZyB0dXRvcmlhbDogW0NyZWF0ZSBhIFF1aXpdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vZGVzaWduLXN1cnZleS9jcmVhdGUtYS1xdWl6KS5cbiAgICAgKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIGluY29ycmVjdCBhbnN3ZXJzIGluIGEgcXVpei5cbiAgICAgKiBAc2VlIGdldENvcnJlY3RBbnN3ZXJDb3VudFxuICAgICAqL1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5nZXRJbkNvcnJlY3RBbnN3ZXJDb3VudCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29ycmVjdGVkQW5zd2VyQ291bnRDb3JlKGZhbHNlKTtcbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5vbkNvcnJlY3RRdWVzdGlvbkFuc3dlciA9IGZ1bmN0aW9uIChxdWVzdGlvbiwgb3B0aW9ucykge1xuICAgICAgICBpZiAodGhpcy5vbklzQW5zd2VyQ29ycmVjdC5pc0VtcHR5KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBvcHRpb25zLnF1ZXN0aW9uID0gcXVlc3Rpb247XG4gICAgICAgIHRoaXMub25Jc0Fuc3dlckNvcnJlY3QuZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5nZXRDb3JyZWN0ZWRBbnN3ZXJDb3VudENvcmUgPSBmdW5jdGlvbiAoaXNDb3JyZWN0KSB7XG4gICAgICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLmdldFF1aXpRdWVzdGlvbnMoKTtcbiAgICAgICAgdmFyIGNvdW50ZXIgPSAwO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIHEgPSBxdWVzdGlvbnNbaV07XG4gICAgICAgICAgICB2YXIgY29ycmVjdENvdW50ID0gcS5jb3JyZWN0QW5zd2VyQ291bnQ7XG4gICAgICAgICAgICBpZiAoaXNDb3JyZWN0KSB7XG4gICAgICAgICAgICAgICAgY291bnRlciArPSBjb3JyZWN0Q291bnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb3VudGVyICs9IHEucXVpelF1ZXN0aW9uQ291bnQgLSBjb3JyZWN0Q291bnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvdW50ZXI7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuZ2V0Q29ycmVjdGVkQW5zd2VycyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29ycmVjdGVkQW5zd2VyQ291bnQoKTtcbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5nZXRJbkNvcnJlY3RlZEFuc3dlcnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEluQ29ycmVjdGVkQW5zd2VyQ291bnQoKTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwic2hvd1RpbWVyUGFuZWxcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogRGlzcGxheXMgdGhlIHRpbWVyIHBhbmVsIGFuZCBzcGVjaWZpZXMgaXRzIHBvc2l0aW9uLiBBcHBsaWVzIG9ubHkgdG8gW3F1aXogc3VydmV5c10oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9kZXNpZ24tc3VydmV5LWNyZWF0ZS1hLXF1aXopLlxuICAgICAgICAgKlxuICAgICAgICAgKiBQb3NzaWJsZSB2YWx1ZXM6XG4gICAgICAgICAqXG4gICAgICAgICAqIC0gYFwidG9wXCJgIC0gRGlzcGxheXMgdGhlIHRpbWVyIHBhbmVsIGF0IHRoZSB0b3Agb2YgdGhlIHN1cnZleS5cbiAgICAgICAgICogLSBgXCJib3R0b21cImAgLSBEaXNwbGF5cyB0aGUgdGltZXIgcGFuZWwgYXQgdGhlIGJvdHRvbSBvZiB0aGUgc3VydmV5LlxuICAgICAgICAgKiAtIGBcIm5vbmVcImAgKGRlZmF1bHQpIC0gSGlkZXMgdGhlIHRpbWVyIHBhbmVsLlxuICAgICAgICAgKlxuICAgICAgICAgKiBJZiB0aGUgdGltZXIgcGFuZWwgaXMgZGlzcGxheWVkLCB0aGUgdGltZXIgc3RhcnRzIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgc3VydmV5IGJlZ2lucy4gVG8gc3BlY2lmeSB0aW1lIGxpbWl0cywgdXNlIHRoZSBbYG1heFRpbWVUb0ZpbmlzaGBdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vYXBpLXJlZmVyZW5jZS9zdXJ2ZXktZGF0YS1tb2RlbCNtYXhUaW1lVG9GaW5pc2gpIGFuZCBbYG1heFRpbWVUb0ZpbmlzaFBhZ2VgXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2Uvc3VydmV5LWRhdGEtbW9kZWwjbWF4VGltZVRvRmluaXNoUGFnZSkgcHJvcGVydGllcy5cbiAgICAgICAgICpcbiAgICAgICAgICogVGhlIHRpbWVyIHBhbmVsIGRpc3BsYXlzIGluZm9ybWF0aW9uIGFib3V0IHRpbWUgc3BlbnQgb24gYW4gaW5kaXZpZHVhbCBwYWdlIGFuZCB0aGUgZW50aXJlIHN1cnZleS4gSWYgeW91IHdhbnQgdG8gZGlzcGxheSBvbmx5IHRoZSBwYWdlIHRpbWVyIG9yIHRoZSBzdXJ2ZXkgdGltZXIsIHNldCB0aGUgW2BzaG93VGltZXJQYW5lbE1vZGVgXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2FwaS1yZWZlcmVuY2Uvc3VydmV5LWRhdGEtbW9kZWwjc2hvd1RpbWVyUGFuZWxNb2RlKSBwcm9wZXJ0eSB0byBgXCJwYWdlXCJgIG9yIGBcInN1cnZleVwiYC5cbiAgICAgICAgICogQHNlZSBzdGFydFRpbWVyXG4gICAgICAgICAqIEBzZWUgc3RvcFRpbWVyXG4gICAgICAgICAqIEBzZWUgdGltZVNwZW50XG4gICAgICAgICAqIEBzZWUgb25UaW1lclxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic2hvd1RpbWVyUGFuZWxcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwic2hvd1RpbWVyUGFuZWxcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwiaXNUaW1lclBhbmVsU2hvd2luZ09uVG9wXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zaG93VGltZXJQYW5lbCA9PSBcInRvcFwiO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleU1vZGVsLnByb3RvdHlwZSwgXCJpc1RpbWVyUGFuZWxTaG93aW5nT25Cb3R0b21cIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNob3dUaW1lclBhbmVsID09IFwiYm90dG9tXCI7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5TW9kZWwucHJvdG90eXBlLCBcInNob3dUaW1lclBhbmVsTW9kZVwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgd2hldGhlciB0aGUgdGltZXIgcGFuZWwgZGlzcGxheXMgdGltZXJzIGZvciB0aGUgY3VycmVudCBwYWdlLCB0aGUgZW50aXJlIHN1cnZleSwgb3IgYm90aC4gQXBwbGllcyBvbmx5IGlmIHRoZSB0aW1lciBwYW5lbCBpcyBbdmlzaWJsZV0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL3N1cnZleS1kYXRhLW1vZGVsI3Nob3dUaW1lclBhbmVsKS5cbiAgICAgICAgICpcbiAgICAgICAgICogUG9zc2libGUgdmFsdWVzOlxuICAgICAgICAgKlxuICAgICAgICAgKiAtIGBcInN1cnZleVwiYCAtIERpc3BsYXlzIG9ubHkgdGhlIHN1cnZleSB0aW1lci5cbiAgICAgICAgICogLSBgXCJwYWdlXCJgIC0gRGlzcGxheXMgb25seSB0aGUgcGFnZSB0aW1lci5cbiAgICAgICAgICogLSBgXCJhbGxcImAgKGRlZmF1bHQpIC0gRGlzcGxheXMgYm90aCB0aGUgc3VydmV5IGFuZCBwYWdlIHRpbWVycy5cbiAgICAgICAgICogQHNlZSB0aW1lU3BlbnRcbiAgICAgICAgICogQHNlZSBvblRpbWVyXG4gICAgICAgICAqIEBzZWUgc3RhcnRUaW1lclxuICAgICAgICAgKiBAc2VlIHN0b3BUaW1lclxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic2hvd1RpbWVyUGFuZWxNb2RlXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInNob3dUaW1lclBhbmVsTW9kZVwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleU1vZGVsLnByb3RvdHlwZSwgXCJ3aWR0aE1vZGVcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICAqIFNwZWNpZmllcyBob3cgdG8gY2FsY3VsYXRlIHRoZSBzdXJ2ZXkgd2lkdGguXG4gICAgICAgICAgKlxuICAgICAgICAgICogUG9zc2libGUgdmFsdWVzOlxuICAgICAgICAgICpcbiAgICAgICAgICAqIC0gYFwic3RhdGljXCJgIC0gQSBzdXJ2ZXkgaGFzIGEgW2ZpeGVkIHdpZHRoXSgjd2lkdGgpLlxuICAgICAgICAgICogLSBgXCJyZXNwb25zaXZlXCJgIC0gQSBzdXJ2ZXkgb2NjdXBpZXMgYWxsIGF2YWlsYWJsZSBob3Jpem9udGFsIHNwYWNlIGFuZCBzdHJldGNoZXMgb3Igc2hyaW5rcyBob3Jpem9udGFsbHkgdG8gZml0IGluIHRoZSBzY3JlZW4gc2l6ZS5cbiAgICAgICAgICAqIC0gYFwiYXV0b1wiYCAoZGVmYXVsdCkgLSBTdXJ2ZXkgd2lkdGggZGVwZW5kcyBvbiBhIHF1ZXN0aW9uIHR5cGUgYW5kIGNvcnJlc3BvbmRzIHRvIHRoZSBgXCJzdGF0aWNcImAgb3IgYFwicmVzcG9uc2l2ZVwiYCBtb2RlLlxuICAgICAgICAqL1xuICAgICAgICAvLyBgY3VzdG9tL3ByZWNpc2VgIC0gVGhlIHN1cnZleSB3aWR0aCBpcyBzcGVjaWZpZWQgYnkgdGhlIHdpZHRoIHByb3BlcnR5LiAvLyBpbi1mdXR1cmVcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwid2lkdGhNb2RlXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIndpZHRoTW9kZVwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLnNldENhbGN1bGF0ZWRXaWR0aE1vZGVVcGRhdGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBpZiAodGhpcy5jYWxjdWxhdGVkV2lkdGhNb2RlVXBkYXRlcilcbiAgICAgICAgICAgIHRoaXMuY2FsY3VsYXRlZFdpZHRoTW9kZVVwZGF0ZXIuZGlzcG9zZSgpO1xuICAgICAgICB0aGlzLmNhbGN1bGF0ZWRXaWR0aE1vZGVVcGRhdGVyID0gbmV3IF9iYXNlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJDb21wdXRlZFVwZGF0ZXJcIl0oZnVuY3Rpb24gKCkgeyByZXR1cm4gX3RoaXMuY2FsY3VsYXRlV2lkdGhNb2RlKCk7IH0pO1xuICAgICAgICB0aGlzLmNhbGN1bGF0ZWRXaWR0aE1vZGUgPSB0aGlzLmNhbGN1bGF0ZWRXaWR0aE1vZGVVcGRhdGVyO1xuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLmNhbGN1bGF0ZVdpZHRoTW9kZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMud2lkdGhNb2RlID09IFwiYXV0b1wiKSB7XG4gICAgICAgICAgICB2YXIgaXNSZXNwb25zaXZlXzEgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMucGFnZXMuZm9yRWFjaChmdW5jdGlvbiAocGFnZSkge1xuICAgICAgICAgICAgICAgIGlmIChwYWdlLm5lZWRSZXNwb25zaXZlV2lkdGgoKSlcbiAgICAgICAgICAgICAgICAgICAgaXNSZXNwb25zaXZlXzEgPSB0cnVlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gaXNSZXNwb25zaXZlXzEgPyBcInJlc3BvbnNpdmVcIiA6IFwic3RhdGljXCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMud2lkdGhNb2RlO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleU1vZGVsLnByb3RvdHlwZSwgXCJ3aWR0aFwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBIHN1cnZleSB3aWR0aCBpbiBDU1MgdmFsdWVzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBEZWZhdWx0IHZhbHVlOiBgdW5kZWZpbmVkYCAodGhlIHN1cnZleSBpbmhlcml0cyB0aGUgd2lkdGggZnJvbSBpdHMgY29udGFpbmVyKVxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwid2lkdGhcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwid2lkdGhcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwicmVuZGVyZWRXaWR0aFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHdpZHRoID0gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwid2lkdGhcIik7XG4gICAgICAgICAgICBpZiAod2lkdGggJiYgIWlzTmFOKHdpZHRoKSlcbiAgICAgICAgICAgICAgICB3aWR0aCA9IHdpZHRoICsgXCJweFwiO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNhbGN1bGF0ZWRXaWR0aE1vZGVcIikgPT0gXCJzdGF0aWNcIiAmJiB3aWR0aCB8fCB1bmRlZmluZWQ7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5TW9kZWwucHJvdG90eXBlLCBcInRpbWVySW5mb1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VGltZXJJbmZvKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5TW9kZWwucHJvdG90eXBlLCBcInRpbWVyQ2xvY2tcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBtYWpvcjtcbiAgICAgICAgICAgIHZhciBtaW5vcjtcbiAgICAgICAgICAgIGlmICghIXRoaXMuY3VycmVudFBhZ2UpIHtcbiAgICAgICAgICAgICAgICB2YXIgX2EgPSB0aGlzLmdldFRpbWVySW5mbygpLCBzcGVudCA9IF9hLnNwZW50LCBsaW1pdCA9IF9hLmxpbWl0LCBtaW5vclNwZW50ID0gX2EubWlub3JTcGVudCwgbWlub3JMaW1pdCA9IF9hLm1pbm9yTGltaXQ7XG4gICAgICAgICAgICAgICAgaWYgKGxpbWl0ID4gMClcbiAgICAgICAgICAgICAgICAgICAgbWFqb3IgPSB0aGlzLmdldERpc3BsYXlDbG9ja1RpbWUobGltaXQgLSBzcGVudCk7XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG1ham9yID0gdGhpcy5nZXREaXNwbGF5Q2xvY2tUaW1lKHNwZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG1pbm9yU3BlbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAobWlub3JMaW1pdCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbm9yID0gdGhpcy5nZXREaXNwbGF5Q2xvY2tUaW1lKG1pbm9yTGltaXQgLSBtaW5vclNwZW50KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbm9yID0gdGhpcy5nZXREaXNwbGF5Q2xvY2tUaW1lKG1pbm9yU3BlbnQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHsgbWFqb3JUZXh0OiBtYWpvciwgbWlub3JUZXh0OiBtaW5vciB9O1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleU1vZGVsLnByb3RvdHlwZSwgXCJ0aW1lckluZm9UZXh0XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgb3B0aW9ucyA9IHsgdGV4dDogdGhpcy5nZXRUaW1lckluZm9UZXh0KCkgfTtcbiAgICAgICAgICAgIHRoaXMub25UaW1lclBhbmVsSW5mb1RleHQuZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgICAgICAgICAgIHZhciBsb2MgPSBuZXcgX2xvY2FsaXphYmxlc3RyaW5nX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fW1wiTG9jYWxpemFibGVTdHJpbmdcIl0odGhpcywgdHJ1ZSk7XG4gICAgICAgICAgICBsb2MudGV4dCA9IG9wdGlvbnMudGV4dDtcbiAgICAgICAgICAgIHJldHVybiBsb2MudGV4dE9ySHRtbDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5nZXRUaW1lckluZm8gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBwYWdlID0gdGhpcy5jdXJyZW50UGFnZTtcbiAgICAgICAgaWYgKCFwYWdlKVxuICAgICAgICAgICAgcmV0dXJuIHsgc3BlbnQ6IDAsIGxpbWl0OiAwIH07XG4gICAgICAgIHZhciBwYWdlU3BlbnQgPSBwYWdlLnRpbWVTcGVudDtcbiAgICAgICAgdmFyIHN1cnZleVNwZW50ID0gdGhpcy50aW1lU3BlbnQ7XG4gICAgICAgIHZhciBwYWdlTGltaXRTZWMgPSB0aGlzLmdldFBhZ2VNYXhUaW1lVG9GaW5pc2gocGFnZSk7XG4gICAgICAgIHZhciBzdXJ2ZXlMaW1pdCA9IHRoaXMubWF4VGltZVRvRmluaXNoO1xuICAgICAgICBpZiAodGhpcy5zaG93VGltZXJQYW5lbE1vZGUgPT0gXCJwYWdlXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB7IHNwZW50OiBwYWdlU3BlbnQsIGxpbWl0OiBwYWdlTGltaXRTZWMgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zaG93VGltZXJQYW5lbE1vZGUgPT0gXCJzdXJ2ZXlcIikge1xuICAgICAgICAgICAgcmV0dXJuIHsgc3BlbnQ6IHN1cnZleVNwZW50LCBsaW1pdDogc3VydmV5TGltaXQgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChwYWdlTGltaXRTZWMgPiAwICYmIHN1cnZleUxpbWl0ID4gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHNwZW50OiBwYWdlU3BlbnQsIGxpbWl0OiBwYWdlTGltaXRTZWMsIG1pbm9yU3BlbnQ6IHN1cnZleVNwZW50LCBtaW5vckxpbWl0OiBzdXJ2ZXlMaW1pdCB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAocGFnZUxpbWl0U2VjID4gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHNwZW50OiBwYWdlU3BlbnQsIGxpbWl0OiBwYWdlTGltaXRTZWMsIG1pbm9yU3BlbnQ6IHN1cnZleVNwZW50IH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChzdXJ2ZXlMaW1pdCA+IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBzcGVudDogc3VydmV5U3BlbnQsIGxpbWl0OiBzdXJ2ZXlMaW1pdCwgbWlub3JTcGVudDogcGFnZVNwZW50IH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBzcGVudDogcGFnZVNwZW50LCBtaW5vclNwZW50OiBzdXJ2ZXlTcGVudCB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuZ2V0VGltZXJJbmZvVGV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHBhZ2UgPSB0aGlzLmN1cnJlbnRQYWdlO1xuICAgICAgICBpZiAoIXBhZ2UpXG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgdmFyIHBhZ2VTcGVudCA9IHRoaXMuZ2V0RGlzcGxheVRpbWUocGFnZS50aW1lU3BlbnQpO1xuICAgICAgICB2YXIgc3VydmV5U3BlbnQgPSB0aGlzLmdldERpc3BsYXlUaW1lKHRoaXMudGltZVNwZW50KTtcbiAgICAgICAgdmFyIHBhZ2VMaW1pdFNlYyA9IHRoaXMuZ2V0UGFnZU1heFRpbWVUb0ZpbmlzaChwYWdlKTtcbiAgICAgICAgdmFyIHBhZ2VMaW1pdCA9IHRoaXMuZ2V0RGlzcGxheVRpbWUocGFnZUxpbWl0U2VjKTtcbiAgICAgICAgdmFyIHN1cnZleUxpbWl0ID0gdGhpcy5nZXREaXNwbGF5VGltZSh0aGlzLm1heFRpbWVUb0ZpbmlzaCk7XG4gICAgICAgIGlmICh0aGlzLnNob3dUaW1lclBhbmVsTW9kZSA9PSBcInBhZ2VcIilcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFRpbWVySW5mb1BhZ2VUZXh0KHBhZ2UsIHBhZ2VTcGVudCwgcGFnZUxpbWl0KTtcbiAgICAgICAgaWYgKHRoaXMuc2hvd1RpbWVyUGFuZWxNb2RlID09IFwic3VydmV5XCIpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRUaW1lckluZm9TdXJ2ZXlUZXh0KHN1cnZleVNwZW50LCBzdXJ2ZXlMaW1pdCk7XG4gICAgICAgIGlmICh0aGlzLnNob3dUaW1lclBhbmVsTW9kZSA9PSBcImFsbFwiKSB7XG4gICAgICAgICAgICBpZiAocGFnZUxpbWl0U2VjIDw9IDAgJiYgdGhpcy5tYXhUaW1lVG9GaW5pc2ggPD0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphdGlvbkZvcm1hdFN0cmluZyhcInRpbWVyU3BlbnRBbGxcIiwgcGFnZVNwZW50LCBzdXJ2ZXlTcGVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocGFnZUxpbWl0U2VjID4gMCAmJiB0aGlzLm1heFRpbWVUb0ZpbmlzaCA+IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YXRpb25Gb3JtYXRTdHJpbmcoXCJ0aW1lckxpbWl0QWxsXCIsIHBhZ2VTcGVudCwgcGFnZUxpbWl0LCBzdXJ2ZXlTcGVudCwgc3VydmV5TGltaXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHBhZ2VUZXh0ID0gdGhpcy5nZXRUaW1lckluZm9QYWdlVGV4dChwYWdlLCBwYWdlU3BlbnQsIHBhZ2VMaW1pdCk7XG4gICAgICAgICAgICB2YXIgc3VydmV5VGV4dCA9IHRoaXMuZ2V0VGltZXJJbmZvU3VydmV5VGV4dChzdXJ2ZXlTcGVudCwgc3VydmV5TGltaXQpO1xuICAgICAgICAgICAgcmV0dXJuIHBhZ2VUZXh0ICsgXCIgXCIgKyBzdXJ2ZXlUZXh0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLmdldFRpbWVySW5mb1BhZ2VUZXh0ID0gZnVuY3Rpb24gKHBhZ2UsIHBhZ2VTcGVudCwgcGFnZUxpbWl0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFBhZ2VNYXhUaW1lVG9GaW5pc2gocGFnZSkgPiAwXG4gICAgICAgICAgICA/IHRoaXMuZ2V0TG9jYWxpemF0aW9uRm9ybWF0U3RyaW5nKFwidGltZXJMaW1pdFBhZ2VcIiwgcGFnZVNwZW50LCBwYWdlTGltaXQpXG4gICAgICAgICAgICA6IHRoaXMuZ2V0TG9jYWxpemF0aW9uRm9ybWF0U3RyaW5nKFwidGltZXJTcGVudFBhZ2VcIiwgcGFnZVNwZW50LCBwYWdlTGltaXQpO1xuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLmdldFRpbWVySW5mb1N1cnZleVRleHQgPSBmdW5jdGlvbiAoc3VydmV5U3BlbnQsIHN1cnZleUxpbWl0KSB7XG4gICAgICAgIHZhciBzdHJOYW1lID0gdGhpcy5tYXhUaW1lVG9GaW5pc2ggPiAwID8gXCJ0aW1lckxpbWl0U3VydmV5XCIgOiBcInRpbWVyU3BlbnRTdXJ2ZXlcIjtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemF0aW9uRm9ybWF0U3RyaW5nKHN0ck5hbWUsIHN1cnZleVNwZW50LCBzdXJ2ZXlMaW1pdCk7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuZ2V0RGlzcGxheUNsb2NrVGltZSA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgdmFyIG1pbiA9IE1hdGguZmxvb3IodmFsIC8gNjApO1xuICAgICAgICB2YXIgc2VjID0gdmFsICUgNjA7XG4gICAgICAgIHZhciBzZWNTdHIgPSBzZWMudG9TdHJpbmcoKTtcbiAgICAgICAgaWYgKHNlYyA8IDEwKSB7XG4gICAgICAgICAgICBzZWNTdHIgPSBcIjBcIiArIHNlY1N0cjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWluICsgXCI6XCIgKyBzZWNTdHI7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuZ2V0RGlzcGxheVRpbWUgPSBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgIHZhciBtaW4gPSBNYXRoLmZsb29yKHZhbCAvIDYwKTtcbiAgICAgICAgdmFyIHNlYyA9IHZhbCAlIDYwO1xuICAgICAgICB2YXIgcmVzID0gXCJcIjtcbiAgICAgICAgaWYgKG1pbiA+IDApIHtcbiAgICAgICAgICAgIHJlcyArPSBtaW4gKyBcIiBcIiArIHRoaXMuZ2V0TG9jYWxpemF0aW9uU3RyaW5nKFwidGltZXJNaW5cIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlcyAmJiBzZWMgPT0gMClcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIGlmIChyZXMpXG4gICAgICAgICAgICByZXMgKz0gXCIgXCI7XG4gICAgICAgIHJldHVybiByZXMgKyBzZWMgKyBcIiBcIiArIHRoaXMuZ2V0TG9jYWxpemF0aW9uU3RyaW5nKFwidGltZXJTZWNcIik7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5TW9kZWwucHJvdG90eXBlLCBcInRpbWVyTW9kZWxcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMudGltZXJNb2RlbFZhbHVlOyB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgLyoqXG4gICAgICogU3RhcnRzIGEgdGltZXIgdGhhdCBjYWxjdWxhdGVzIGhvdyBtYW55IHNlY29uZHMgYSByZXNwb25kZW50IGhhcyBzcGVudCBvbiB0aGUgc3VydmV5LiBBcHBsaWVzIG9ubHkgdG8gW3F1aXogc3VydmV5c10oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9kZXNpZ24tc3VydmV5LWNyZWF0ZS1hLXF1aXopLlxuICAgICAqIEBzZWUgc3RvcFRpbWVyXG4gICAgICogQHNlZSBtYXhUaW1lVG9GaW5pc2hcbiAgICAgKiBAc2VlIG1heFRpbWVUb0ZpbmlzaFBhZ2VcbiAgICAgKiBAc2VlIHRpbWVTcGVudFxuICAgICAqIEBzZWUgb25UaW1lclxuICAgICAqL1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5zdGFydFRpbWVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnRpbWVyTW9kZWwuc3RhcnQoKTtcbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5zdGFydFRpbWVyRnJvbVVJID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5zaG93VGltZXJQYW5lbCAhPSBcIm5vbmVcIiAmJiB0aGlzLnN0YXRlID09PSBcInJ1bm5pbmdcIikge1xuICAgICAgICAgICAgdGhpcy5zdGFydFRpbWVyKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFN0b3BzIHRoZSB0aW1lci4gQXBwbGllcyBvbmx5IHRvIFtxdWl6IHN1cnZleXNdKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2RvY3VtZW50YXRpb24vZGVzaWduLXN1cnZleS1jcmVhdGUtYS1xdWl6KS5cbiAgICAgKiBAc2VlIHN0YXJ0VGltZXJcbiAgICAgKiBAc2VlIG1heFRpbWVUb0ZpbmlzaFxuICAgICAqIEBzZWUgbWF4VGltZVRvRmluaXNoUGFnZVxuICAgICAqIEBzZWUgdGltZVNwZW50XG4gICAgICogQHNlZSBvblRpbWVyXG4gICAgICovXG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLnN0b3BUaW1lciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy50aW1lck1vZGVsLnN0b3AoKTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwidGltZVNwZW50XCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEEgdGltZSBwZXJpb2QgdGhhdCBhIHJlc3BvbmRlbnQgaGFzIHNwZW50IG9uIHRoZSBzdXJ2ZXkgc28gZmFyOyBtZWFzdXJlZCBpbiBzZWNvbmRzLiBBcHBsaWVzIG9ubHkgdG8gW3F1aXogc3VydmV5c10oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9kZXNpZ24tc3VydmV5LWNyZWF0ZS1hLXF1aXopLlxuICAgICAgICAgKlxuICAgICAgICAgKiBBc3NpZ24gYSBudW1iZXIgdG8gdGhpcyBwcm9wZXJ0eSBpZiB5b3UgbmVlZCB0byBzdGFydCB0aGUgcXVpeiB0aW1lciBmcm9tIGEgc3BlY2lmaWMgdGltZSAoZm9yIGluc3RhbmNlLCBpZiB5b3Ugd2FudCB0byBjb250aW51ZSBhbiBpbnRlcnJ1cHRlZCBxdWl6KS5cbiAgICAgICAgICpcbiAgICAgICAgICogWW91IGNhbiBhbHNvIGZpbmQgb3V0IGhvdyBtYW55IHNlY29uZHMgYSByZXNwb25kZW50IGhhcyBzcGVudCBvbiBhbiBpbmRpdmlkdWFsIHN1cnZleSBwYWdlLiBUbyBkbyB0aGlzLCB1c2UgdGhlIFtgdGltZVNwZW50YF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL3BhZ2UtbW9kZWwjdGltZVNwZW50KSBwcm9wZXJ0eSBvZiBhIFtgUGFnZU1vZGVsYF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL3BhZ2UtbW9kZWwpIG9iamVjdC5cbiAgICAgICAgICogQHNlZSBtYXhUaW1lVG9GaW5pc2hcbiAgICAgICAgICogQHNlZSBtYXhUaW1lVG9GaW5pc2hQYWdlXG4gICAgICAgICAqIEBzZWUgc3RhcnRUaW1lclxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLnRpbWVyTW9kZWwuc3BlbnQ7IH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkgeyB0aGlzLnRpbWVyTW9kZWwuc3BlbnQgPSB2YWw7IH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5TW9kZWwucHJvdG90eXBlLCBcIm1heFRpbWVUb0ZpbmlzaFwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBIHRpbWUgcGVyaW9kIHRoYXQgYSByZXNwb25kZW50IGhhcyB0byBjb21wbGV0ZSB0aGUgc3VydmV5OyBtZWFzdXJlZCBpbiBzZWNvbmRzLiBBcHBsaWVzIG9ubHkgdG8gW3F1aXogc3VydmV5c10oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9kZXNpZ24tc3VydmV5LWNyZWF0ZS1hLXF1aXopLlxuICAgICAgICAgKlxuICAgICAgICAgKiBBIG5lZ2F0aXZlIHZhbHVlIG9yIDAgc2V0cyBhbiB1bmxpbWl0ZWQgdGltZSBwZXJpb2QuXG4gICAgICAgICAqXG4gICAgICAgICAqIFtWaWV3IERlbW9dKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2V4YW1wbGVzL21ha2UtcXVpei1qYXZhc2NyaXB0LyAobGlua1N0eWxlKSlcbiAgICAgICAgICogQHNlZSBtYXhUaW1lVG9GaW5pc2hQYWdlXG4gICAgICAgICAqIEBzZWUgc3RhcnRUaW1lclxuICAgICAgICAgKiBAc2VlIHRpbWVTcGVudFxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibWF4VGltZVRvRmluaXNoXCIsIDApO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm1heFRpbWVUb0ZpbmlzaFwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleU1vZGVsLnByb3RvdHlwZSwgXCJtYXhUaW1lVG9GaW5pc2hQYWdlXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEEgdGltZSBwZXJpb2QgdGhhdCBhIHJlc3BvbmRlbnQgaGFzIHRvIGNvbXBsZXRlIGVhY2ggc3VydmV5IHBhZ2U7IG1lYXN1cmVkIGluIHNlY29uZHMuIEFwcGxpZXMgb25seSB0byBbcXVpeiBzdXJ2ZXlzXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9kb2N1bWVudGF0aW9uL2Rlc2lnbi1zdXJ2ZXktY3JlYXRlLWEtcXVpeikuXG4gICAgICAgICAqXG4gICAgICAgICAqIEEgbmVnYXRpdmUgdmFsdWUgb3IgMCBzZXRzIGFuIHVubGltaXRlZCB0aW1lIHBlcmlvZC5cbiAgICAgICAgICpcbiAgICAgICAgICogWW91IGNhbiBhbHNvIHVzZSBgUGFnZU1vZGVsYCdzIFtgbWF4VGltZVRvRmluaXNoYF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL3BhZ2UtbW9kZWwjbWF4VGltZVRvRmluaXNoKSBwcm9wZXJ0eSB0byBzcGVjaWZ5IGEgdGltZSBwZXJpb2QgZm9yIGFuIGluZGl2aWR1YWwgc3VydmV5IHBhZ2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIFtWaWV3IERlbW9dKGh0dHBzOi8vc3VydmV5anMuaW8vZm9ybS1saWJyYXJ5L2V4YW1wbGVzL21ha2UtcXVpei1qYXZhc2NyaXB0LyAobGlua1N0eWxlKSlcbiAgICAgICAgICogQHNlZSBtYXhUaW1lVG9GaW5pc2hcbiAgICAgICAgICogQHNlZSBzdGFydFRpbWVyXG4gICAgICAgICAqIEBzZWUgdGltZVNwZW50XG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJtYXhUaW1lVG9GaW5pc2hQYWdlXCIsIDApO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm1heFRpbWVUb0ZpbmlzaFBhZ2VcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5nZXRQYWdlTWF4VGltZVRvRmluaXNoID0gZnVuY3Rpb24gKHBhZ2UpIHtcbiAgICAgICAgaWYgKCFwYWdlIHx8IHBhZ2UubWF4VGltZVRvRmluaXNoIDwgMClcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICByZXR1cm4gcGFnZS5tYXhUaW1lVG9GaW5pc2ggPiAwXG4gICAgICAgICAgICA/IHBhZ2UubWF4VGltZVRvRmluaXNoXG4gICAgICAgICAgICA6IHRoaXMubWF4VGltZVRvRmluaXNoUGFnZTtcbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5kb1RpbWVyID0gZnVuY3Rpb24gKHBhZ2UpIHtcbiAgICAgICAgdGhpcy5vblRpbWVyLmZpcmUodGhpcywge30pO1xuICAgICAgICBpZiAodGhpcy5tYXhUaW1lVG9GaW5pc2ggPiAwICYmIHRoaXMubWF4VGltZVRvRmluaXNoID09IHRoaXMudGltZVNwZW50KSB7XG4gICAgICAgICAgICB0aGlzLmNvbXBsZXRlTGFzdFBhZ2UoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFnZSkge1xuICAgICAgICAgICAgdmFyIHBhZ2VMaW1pdCA9IHRoaXMuZ2V0UGFnZU1heFRpbWVUb0ZpbmlzaChwYWdlKTtcbiAgICAgICAgICAgIGlmIChwYWdlTGltaXQgPiAwICYmIHBhZ2VMaW1pdCA9PSBwYWdlLnRpbWVTcGVudCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzTGFzdFBhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21wbGV0ZUxhc3RQYWdlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHRQYWdlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5TW9kZWwucHJvdG90eXBlLCBcImluU3VydmV5XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIC8vSVN1cnZleUltcGxlbWVudG9yXG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLmdldFN1cnZleURhdGEgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLmdldFN1cnZleSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuZ2V0VGV4dFByb2Nlc3NvciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICAvL0lTdXJ2ZXlUcmlnZ2VyT3duZXJcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuZ2V0T2JqZWN0cyA9IGZ1bmN0aW9uIChwYWdlcywgcXVlc3Rpb25zKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkocmVzdWx0LCB0aGlzLmdldFBhZ2VzQnlOYW1lcyhwYWdlcykpO1xuICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShyZXN1bHQsIHRoaXMuZ2V0UXVlc3Rpb25zQnlOYW1lcyhxdWVzdGlvbnMpKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5zZXRUcmlnZ2VyVmFsdWUgPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUsIGlzVmFyaWFibGUpIHtcbiAgICAgICAgaWYgKCFuYW1lKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAoaXNWYXJpYWJsZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRWYXJpYWJsZShuYW1lLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgcXVlc3Rpb24gPSB0aGlzLmdldFF1ZXN0aW9uQnlOYW1lKG5hbWUpO1xuICAgICAgICAgICAgaWYgKCEhcXVlc3Rpb24pIHtcbiAgICAgICAgICAgICAgICBxdWVzdGlvbi52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIHByb2Nlc3NvciA9IG5ldyBfY29uZGl0aW9uUHJvY2Vzc1ZhbHVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bXCJQcm9jZXNzVmFsdWVcIl0oKTtcbiAgICAgICAgICAgICAgICB2YXIgZmlyc3ROYW1lID0gcHJvY2Vzc29yLmdldEZpcnN0TmFtZShuYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAoZmlyc3ROYW1lID09IG5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZShuYW1lLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZ2V0UXVlc3Rpb25CeU5hbWUoZmlyc3ROYW1lKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSB0aGlzLmdldFVuYmluZFZhbHVlKHRoaXMuZ2V0RmlsdGVyZWRWYWx1ZXMoKSk7XG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3Nvci5zZXRWYWx1ZShkYXRhLCBuYW1lLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUoZmlyc3ROYW1lLCBkYXRhW2ZpcnN0TmFtZV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLmNvcHlUcmlnZ2VyVmFsdWUgPSBmdW5jdGlvbiAobmFtZSwgZnJvbU5hbWUsIGNvcHlEaXNwbGF5VmFsdWUpIHtcbiAgICAgICAgaWYgKCFuYW1lIHx8ICFmcm9tTmFtZSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIHZhbHVlO1xuICAgICAgICBpZiAoY29weURpc3BsYXlWYWx1ZSkge1xuICAgICAgICAgICAgdmFsdWUgPSB0aGlzLnByb2Nlc3NUZXh0KFwie1wiICsgZnJvbU5hbWUgKyBcIn1cIiwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgcHJvY2Vzc29yID0gbmV3IF9jb25kaXRpb25Qcm9jZXNzVmFsdWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1tcIlByb2Nlc3NWYWx1ZVwiXSgpO1xuICAgICAgICAgICAgdmFsdWUgPSBwcm9jZXNzb3IuZ2V0VmFsdWUoZnJvbU5hbWUsIHRoaXMuZ2V0RmlsdGVyZWRWYWx1ZXMoKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRUcmlnZ2VyVmFsdWUobmFtZSwgdmFsdWUsIGZhbHNlKTtcbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS50cmlnZ2VyRXhlY3V0ZWQgPSBmdW5jdGlvbiAodHJpZ2dlcikge1xuICAgICAgICB0aGlzLm9uVHJpZ2dlckV4ZWN1dGVkLmZpcmUodGhpcywgeyB0cmlnZ2VyOiB0cmlnZ2VyIH0pO1xuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLnN0YXJ0TW92aW5nUXVlc3Rpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuaXNNb3ZpbmdRdWVzdGlvbiA9IHRydWU7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuc3RvcE1vdmluZ1F1ZXN0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmlzTW92aW5nUXVlc3Rpb24gPSBmYWxzZTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEZvY3VzZXMgYSBxdWVzdGlvbiB3aXRoIGEgc3BlY2lmaWVkIG5hbWUuIFN3aXRjaGVzIHRoZSBjdXJyZW50IHBhZ2UgaWYgbmVlZGVkLlxuICAgICAqIEBwYXJhbSBuYW1lIEEgcXVlc3Rpb24gbmFtZS5cbiAgICAgKiBAcmV0dXJucyBgZmFsc2VgIGlmIHRoZSBzdXJ2ZXkgZG9lcyBub3QgY29udGFpbiBhIHF1ZXN0aW9uIHdpdGggYSBzcGVjaWZpZWQgbmFtZSBvciB0aGlzIHF1ZXN0aW9uIGlzIGhpZGRlbjsgb3RoZXJ3aXNlLCBgdHJ1ZWAuXG4gICAgICogQHNlZSBmb2N1c0ZpcnN0UXVlc3Rpb25cbiAgICAgKiBAc2VlIGZvY3VzRmlyc3RRdWVzdGlvbkF1dG9tYXRpY1xuICAgICAqL1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5mb2N1c1F1ZXN0aW9uID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9jdXNRdWVzdGlvbkJ5SW5zdGFuY2UodGhpcy5nZXRRdWVzdGlvbkJ5TmFtZShuYW1lLCB0cnVlKSk7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuZm9jdXNRdWVzdGlvbkJ5SW5zdGFuY2UgPSBmdW5jdGlvbiAocXVlc3Rpb24sIG9uRXJyb3IpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAob25FcnJvciA9PT0gdm9pZCAwKSB7IG9uRXJyb3IgPSBmYWxzZTsgfVxuICAgICAgICBpZiAoIXF1ZXN0aW9uIHx8ICFxdWVzdGlvbi5pc1Zpc2libGUgfHwgIXF1ZXN0aW9uLnBhZ2UpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHZhciBvbGRRdWVzdGlvbiA9IChfYSA9IHRoaXMuZm9jdXNpbmdRdWVzdGlvbkluZm8pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5xdWVzdGlvbjtcbiAgICAgICAgaWYgKG9sZFF1ZXN0aW9uID09PSBxdWVzdGlvbilcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgdGhpcy5mb2N1c2luZ1F1ZXN0aW9uSW5mbyA9IHsgcXVlc3Rpb246IHF1ZXN0aW9uLCBvbkVycm9yOiBvbkVycm9yIH07XG4gICAgICAgIHRoaXMuc2tpcHBlZFBhZ2VzLnB1c2goeyBmcm9tOiB0aGlzLmN1cnJlbnRQYWdlLCB0bzogcXVlc3Rpb24ucGFnZSB9KTtcbiAgICAgICAgdmFyIGlzTmVlZFdhaXRGb3JQYWdlUmVuZGVyZWQgPSB0aGlzLmFjdGl2ZVBhZ2UgIT09IHF1ZXN0aW9uLnBhZ2UgJiYgIXF1ZXN0aW9uLnBhZ2UuaXNTdGFydFBhZ2U7XG4gICAgICAgIGlmIChpc05lZWRXYWl0Rm9yUGFnZVJlbmRlcmVkKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gcXVlc3Rpb24ucGFnZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzTmVlZFdhaXRGb3JQYWdlUmVuZGVyZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNRdWVzdGlvbkluZm8oKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5mb2N1c1F1ZXN0aW9uSW5mbyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICB2YXIgcXVlc3Rpb24gPSAoX2EgPSB0aGlzLmZvY3VzaW5nUXVlc3Rpb25JbmZvKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EucXVlc3Rpb247XG4gICAgICAgIGlmICghIXF1ZXN0aW9uICYmICFxdWVzdGlvbi5pc0Rpc3Bvc2VkKSB7XG4gICAgICAgICAgICBxdWVzdGlvbi5mb2N1cyh0aGlzLmZvY3VzaW5nUXVlc3Rpb25JbmZvLm9uRXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZm9jdXNpbmdRdWVzdGlvbkluZm8gPSB1bmRlZmluZWQ7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUucXVlc3Rpb25FZGl0RmluaXNoQ2FsbGJhY2sgPSBmdW5jdGlvbiAocXVlc3Rpb24sIGV2ZW50KSB7XG4gICAgICAgIHZhciBlbnRlcktleUFjdGlvbiA9IHRoaXMuZW50ZXJLZXlBY3Rpb24gfHwgX3NldHRpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fW1wic2V0dGluZ3NcIl0uZW50ZXJLZXlBY3Rpb247XG4gICAgICAgIGlmIChlbnRlcktleUFjdGlvbiA9PSBcImxvc2VGb2N1c1wiKVxuICAgICAgICAgICAgZXZlbnQudGFyZ2V0LmJsdXIoKTtcbiAgICAgICAgaWYgKGVudGVyS2V5QWN0aW9uID09IFwibW92ZVRvTmV4dEVkaXRvclwiKSB7XG4gICAgICAgICAgICB2YXIgYWxsUXVlc3Rpb25zID0gdGhpcy5jdXJyZW50UGFnZS5xdWVzdGlvbnM7XG4gICAgICAgICAgICB2YXIgcXVlc3Rpb25JbmRleCA9IGFsbFF1ZXN0aW9ucy5pbmRleE9mKHF1ZXN0aW9uKTtcbiAgICAgICAgICAgIGlmIChxdWVzdGlvbkluZGV4ID4gLTEgJiYgcXVlc3Rpb25JbmRleCA8IGFsbFF1ZXN0aW9ucy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgYWxsUXVlc3Rpb25zW3F1ZXN0aW9uSW5kZXggKyAxXS5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZXZlbnQudGFyZ2V0LmJsdXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLmdldEVsZW1lbnRXcmFwcGVyQ29tcG9uZW50TmFtZSA9IGZ1bmN0aW9uIChlbGVtZW50LCByZWFzb24pIHtcbiAgICAgICAgaWYgKHJlYXNvbiA9PT0gXCJsb2dvLWltYWdlXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBcInN2LWxvZ28taW1hZ2VcIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gU3VydmV5TW9kZWwuVGVtcGxhdGVSZW5kZXJlckNvbXBvbmVudE5hbWU7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuZ2V0UXVlc3Rpb25Db250ZW50V3JhcHBlckNvbXBvbmVudE5hbWUgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gU3VydmV5TW9kZWwuVGVtcGxhdGVSZW5kZXJlckNvbXBvbmVudE5hbWU7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuZ2V0Um93V3JhcHBlckNvbXBvbmVudE5hbWUgPSBmdW5jdGlvbiAocm93KSB7XG4gICAgICAgIHJldHVybiBTdXJ2ZXlNb2RlbC5UZW1wbGF0ZVJlbmRlcmVyQ29tcG9uZW50TmFtZTtcbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5nZXRFbGVtZW50V3JhcHBlckNvbXBvbmVudERhdGEgPSBmdW5jdGlvbiAoZWxlbWVudCwgcmVhc29uKSB7XG4gICAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLmdldFJvd1dyYXBwZXJDb21wb25lbnREYXRhID0gZnVuY3Rpb24gKHJvdykge1xuICAgICAgICByZXR1cm4gcm93O1xuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLmdldEl0ZW1WYWx1ZVdyYXBwZXJDb21wb25lbnROYW1lID0gZnVuY3Rpb24gKGl0ZW0sIHF1ZXN0aW9uKSB7XG4gICAgICAgIHJldHVybiBTdXJ2ZXlNb2RlbC5UZW1wbGF0ZVJlbmRlcmVyQ29tcG9uZW50TmFtZTtcbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5nZXRJdGVtVmFsdWVXcmFwcGVyQ29tcG9uZW50RGF0YSA9IGZ1bmN0aW9uIChpdGVtLCBxdWVzdGlvbikge1xuICAgICAgICByZXR1cm4gaXRlbTtcbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5nZXRNYXRyaXhDZWxsVGVtcGxhdGVEYXRhID0gZnVuY3Rpb24gKGNlbGwpIHtcbiAgICAgICAgcmV0dXJuIGNlbGwucXVlc3Rpb247XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuc2VhcmNoVGV4dCA9IGZ1bmN0aW9uICh0ZXh0KSB7XG4gICAgICAgIGlmICghIXRleHQpXG4gICAgICAgICAgICB0ZXh0ID0gdGV4dC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICB2YXIgcmVzID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5wYWdlc1tpXS5zZWFyY2hUZXh0KHRleHQsIHJlcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5nZXRTa2VsZXRvbkNvbXBvbmVudE5hbWUgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gdGhpcy5za2VsZXRvbkNvbXBvbmVudE5hbWU7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBBZGRzIGFuIGVsZW1lbnQgdG8gdGhlIHN1cnZleSBsYXlvdXQuXG4gICAgICpcbiAgICAgKiBUaGlzIG1ldGhvZCBhY2NlcHRzIGFuIG9iamVjdCB3aXRoIHRoZSBmb2xsb3dpbmcgbGF5b3V0IGVsZW1lbnQgcHJvcGVydGllczpcbiAgICAgKlxuICAgICAqIC0gYGlkYDogYFN0cmluZ2AgfCBgXCJ0aW1lcnBhbmVsXCJgIHwgYFwicHJvZ3Jlc3MtYnV0dG9uc1wiYCB8IGBcInByb2dyZXNzLXF1ZXN0aW9uc1wiYCB8IGBcInByb2dyZXNzLXBhZ2VzXCJgIHwgYFwicHJvZ3Jlc3MtY29ycmVjdHF1ZXN0aW9uc1wiYCB8IGBcInByb2dyZXNzLXJlcXVpcmVkcXVlc3Rpb25zXCJgIHwgYFwidG9jLW5hdmlnYXRpb25cImAgfCBgXCJuYXZpZ2F0aW9uYnV0dG9uc1wiYFxcXG4gICAgICogQSBsYXlvdXQgZWxlbWVudCBpZGVudGlmaWVyLiBZb3UgY2FuIHVzZSBwb3NzaWJsZSB2YWx1ZXMgdG8gYWNjZXNzIGFuZCByZWxvY2F0ZSBvciBjdXN0b21pemUgcHJlZGVmaW5lZCBsYXlvdXQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiAtIGBjb250YWluZXJgOiBgXCJoZWFkZXJcImAgfCBgXCJmb290ZXJcImAgfCBgXCJsZWZ0XCJgIHwgYFwicmlnaHRcImAgfCBgXCJjb250ZW50VG9wXCJgIHwgYFwiY29udGVudEJvdHRvbVwiYFxcXG4gICAgICogQSBsYXlvdXQgY29udGFpbmVyIHRoYXQgaG9sZHMgdGhlIGVsZW1lbnQuIElmIHlvdSB3YW50IHRvIGRpc3BsYXkgdGhlIGVsZW1lbnQgd2l0aGluIG11bHRpcGxlIGNvbnRhaW5lcnMsIHNldCB0aGlzIHByb3BlcnR5IHRvIGFuIGFycmF5IG9mIHBvc3NpYmxlIHZhbHVlcy5cbiAgICAgKlxuICAgICAqIC0gYGNvbXBvbmVudGA6IGBTdHJpbmdgXFxcbiAgICAgKiBUaGUgbmFtZSBvZiB0aGUgY29tcG9uZW50IHRoYXQgcmVuZGVycyB0aGUgbGF5b3V0IGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiAtIGBkYXRhYDogYGFueWBcXFxuICAgICAqIERhdGEgcGFzc2VkIGFzIHByb3BzIHRvIGBjb21wb25lbnRgLlxuICAgICAqXG4gICAgICogW1ZpZXcgRGVtb10oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9mb3JtLWxpYnJhcnkvZXhhbXBsZXMvcHJvZ3Jlc3MtYmFyLXdpdGgtcGVyY2VudGFnZS8gKGxpbmtTdHlsZSkpXG4gICAgICogQHBhcmFtIGxheW91dEVsZW1lbnQgQSBsYXlvdXQgZWxlbWVudCBjb25maWd1cmF0aW9uLlxuICAgICAqIEByZXR1cm5zIFRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBwcmV2aW91cyBsYXlvdXQgZWxlbWVudCB3aXRoIHRoZSBzYW1lIGBpZGAuXG4gICAgICovXG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLmFkZExheW91dEVsZW1lbnQgPSBmdW5jdGlvbiAobGF5b3V0RWxlbWVudCkge1xuICAgICAgICB2YXIgZXhpc3RpbmdMYXlvdXRFbGVtZW50ID0gdGhpcy5yZW1vdmVMYXlvdXRFbGVtZW50KGxheW91dEVsZW1lbnQuaWQpO1xuICAgICAgICB0aGlzLmxheW91dEVsZW1lbnRzLnB1c2gobGF5b3V0RWxlbWVudCk7XG4gICAgICAgIHJldHVybiBleGlzdGluZ0xheW91dEVsZW1lbnQ7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUucmVtb3ZlTGF5b3V0RWxlbWVudCA9IGZ1bmN0aW9uIChsYXlvdXRFbGVtZW50SWQpIHtcbiAgICAgICAgdmFyIGxheW91dEVsZW1lbnQgPSB0aGlzLmxheW91dEVsZW1lbnRzLmZpbHRlcihmdW5jdGlvbiAoYSkgeyByZXR1cm4gYS5pZCA9PT0gbGF5b3V0RWxlbWVudElkOyB9KVswXTtcbiAgICAgICAgaWYgKCEhbGF5b3V0RWxlbWVudCkge1xuICAgICAgICAgICAgdmFyIGxheW91dEVsZW1lbnRJbmRleCA9IHRoaXMubGF5b3V0RWxlbWVudHMuaW5kZXhPZihsYXlvdXRFbGVtZW50KTtcbiAgICAgICAgICAgIHRoaXMubGF5b3V0RWxlbWVudHMuc3BsaWNlKGxheW91dEVsZW1lbnRJbmRleCwgMSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxheW91dEVsZW1lbnQ7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuZ2V0Q29udGFpbmVyQ29udGVudCA9IGZ1bmN0aW9uIChjb250YWluZXIpIHtcbiAgICAgICAgdmFyIGNvbnRhaW5lckxheW91dEVsZW1lbnRzID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSB0aGlzLmxheW91dEVsZW1lbnRzOyBfaSA8IF9hLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgdmFyIGxheW91dEVsZW1lbnQgPSBfYVtfaV07XG4gICAgICAgICAgICBpZiAoaXNTdHJDaUVxdWFsKGxheW91dEVsZW1lbnQuaWQsIFwidGltZXJwYW5lbFwiKSkge1xuICAgICAgICAgICAgICAgIGlmIChjb250YWluZXIgPT09IFwiaGVhZGVyXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNUaW1lclBhbmVsU2hvd2luZ09uVG9wICYmICF0aGlzLmlzU2hvd1N0YXJ0aW5nUGFnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyTGF5b3V0RWxlbWVudHMucHVzaChsYXlvdXRFbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoY29udGFpbmVyID09PSBcImZvb3RlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzVGltZXJQYW5lbFNob3dpbmdPbkJvdHRvbSAmJiAhdGhpcy5pc1Nob3dTdGFydGluZ1BhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lckxheW91dEVsZW1lbnRzLnB1c2gobGF5b3V0RWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLnN0YXRlID09PSBcInJ1bm5pbmdcIiAmJiBpc1N0ckNpRXF1YWwobGF5b3V0RWxlbWVudC5pZCwgXCJwcm9ncmVzcy1cIiArIHRoaXMucHJvZ3Jlc3NCYXJUeXBlKSkge1xuICAgICAgICAgICAgICAgIGlmIChjb250YWluZXIgPT09IFwiaGVhZGVyXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNTaG93UHJvZ3Jlc3NCYXJPblRvcCAmJiAhdGhpcy5pc1Nob3dTdGFydGluZ1BhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lckxheW91dEVsZW1lbnRzLnB1c2gobGF5b3V0RWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGNvbnRhaW5lciA9PT0gXCJmb290ZXJcIikge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1Nob3dQcm9ncmVzc0Jhck9uQm90dG9tICYmICF0aGlzLmlzU2hvd1N0YXJ0aW5nUGFnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyTGF5b3V0RWxlbWVudHMucHVzaChsYXlvdXRFbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGlzU3RyQ2lFcXVhbChsYXlvdXRFbGVtZW50LmlkLCBcIm5hdmlnYXRpb25idXR0b25zXCIpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbnRhaW5lciA9PT0gXCJjb250ZW50VG9wXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFtcInRvcFwiLCBcImJvdGhcIl0uaW5kZXhPZih0aGlzLmlzTmF2aWdhdGlvbkJ1dHRvbnNTaG93aW5nKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lckxheW91dEVsZW1lbnRzLnB1c2gobGF5b3V0RWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGNvbnRhaW5lciA9PT0gXCJjb250ZW50Qm90dG9tXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFtcImJvdHRvbVwiLCBcImJvdGhcIl0uaW5kZXhPZih0aGlzLmlzTmF2aWdhdGlvbkJ1dHRvbnNTaG93aW5nKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lckxheW91dEVsZW1lbnRzLnB1c2gobGF5b3V0RWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLnN0YXRlID09PSBcInJ1bm5pbmdcIiAmJiBpc1N0ckNpRXF1YWwobGF5b3V0RWxlbWVudC5pZCwgXCJ0b2MtbmF2aWdhdGlvblwiKSAmJiB0aGlzLnNob3dUT0MpIHtcbiAgICAgICAgICAgICAgICBpZiAoY29udGFpbmVyID09PSBcImxlZnRcIikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoW1wibGVmdFwiLCBcImJvdGhcIl0uaW5kZXhPZih0aGlzLnRvY0xvY2F0aW9uKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lckxheW91dEVsZW1lbnRzLnB1c2gobGF5b3V0RWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGNvbnRhaW5lciA9PT0gXCJyaWdodFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChbXCJyaWdodFwiLCBcImJvdGhcIl0uaW5kZXhPZih0aGlzLnRvY0xvY2F0aW9uKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lckxheW91dEVsZW1lbnRzLnB1c2gobGF5b3V0RWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShsYXlvdXRFbGVtZW50LmNvbnRhaW5lcikgJiYgbGF5b3V0RWxlbWVudC5jb250YWluZXIuaW5kZXhPZihjb250YWluZXIpICE9PSAtMSB8fCBsYXlvdXRFbGVtZW50LmNvbnRhaW5lciA9PT0gY29udGFpbmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lckxheW91dEVsZW1lbnRzLnB1c2gobGF5b3V0RWxlbWVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb250YWluZXJMYXlvdXRFbGVtZW50cztcbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5wcm9jZXNzUG9wdXBWaXNpYmxpdHlDaGFuZ2VkID0gZnVuY3Rpb24gKHF1ZXN0aW9uLCBwb3B1cCwgdmlzaWJsZSkge1xuICAgICAgICB0aGlzLm9uUG9wdXBWaXNpYmxlQ2hhbmdlZC5maXJlKHRoaXMsIHsgcXVlc3Rpb246IHF1ZXN0aW9uLCBwb3B1cDogcG9wdXAsIHZpc2libGU6IHZpc2libGUgfSk7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUuYXBwbHlUaGVtZSA9IGZ1bmN0aW9uICh0aGVtZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBpZiAoIXRoZW1lKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBPYmplY3Qua2V5cyh0aGVtZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICBpZiAoa2V5ID09PSBcImNvdmVyXCIpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5yZW1vdmVMYXlvdXRFbGVtZW50KFwiY292ZXJcIik7XG4gICAgICAgICAgICAgICAgdmFyIG5ld0NvdmVyTW9kZWwgPSBuZXcgX2NvdmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMF9fW1wiQ292ZXJcIl0oKTtcbiAgICAgICAgICAgICAgICBuZXdDb3Zlck1vZGVsLmZyb21KU09OKHRoZW1lW2tleV0pO1xuICAgICAgICAgICAgICAgIF90aGlzLmxheW91dEVsZW1lbnRzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBpZDogXCJjb3ZlclwiLFxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXI6IFwiaGVhZGVyXCIsXG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudDogXCJzdi1jb3ZlclwiLFxuICAgICAgICAgICAgICAgICAgICBkYXRhOiBuZXdDb3Zlck1vZGVsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoa2V5ID09PSBcImlzUGFuZWxsZXNzXCIpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5pc0NvbXBhY3QgPSB0aGVtZVtrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgX3RoaXNba2V5XSA9IHRoZW1lW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm9uVGhlbWVBcHBsaWVkLmZpcmUodGhpcywgeyB0aGVtZTogdGhlbWUgfSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBEaXNwb3NlcyBvZiB0aGUgc3VydmV5IG1vZGVsLlxuICAgICAqXG4gICAgICogQ2FsbCB0aGlzIG1ldGhvZCB0byByZWxlYXNlIHJlc291cmNlcyBpZiB5b3VyIGFwcGxpY2F0aW9uIGNvbnRhaW5zIG11bHRpcGxlIHN1cnZleSBtb2RlbHMgb3IgaWYgeW91IHJlLWNyZWF0ZSBhIHN1cnZleSBtb2RlbCBhdCBydW50aW1lLlxuICAgICAqL1xuICAgIFN1cnZleU1vZGVsLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnJlbW92ZVNjcm9sbEV2ZW50TGlzdGVuZXIoKTtcbiAgICAgICAgdGhpcy5kZXN0cm95UmVzaXplT2JzZXJ2ZXIoKTtcbiAgICAgICAgdGhpcy5yb290RWxlbWVudCA9IHVuZGVmaW5lZDtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG4gICAgICAgIHRoaXMuZWRpdGluZ09iaiA9IG51bGw7XG4gICAgICAgIGlmICghdGhpcy5wYWdlcylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IG51bGw7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5wYWdlc1tpXS5zZXRTdXJ2ZXlJbXBsKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICB0aGlzLnBhZ2VzW2ldLmRpc3Bvc2UoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBhZ2VzLnNwbGljZSgwLCB0aGlzLnBhZ2VzLmxlbmd0aCk7XG4gICAgICAgIGlmICh0aGlzLmRpc3Bvc2VDYWxsYmFjaykge1xuICAgICAgICAgICAgdGhpcy5kaXNwb3NlQ2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLm9uU2Nyb2xsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5vblNjcm9sbENhbGxiYWNrKSB7XG4gICAgICAgICAgICB0aGlzLm9uU2Nyb2xsQ2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3VydmV5TW9kZWwucHJvdG90eXBlLmFkZFNjcm9sbEV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHRoaXMuc2Nyb2xsSGFuZGxlciA9IGZ1bmN0aW9uICgpIHsgX3RoaXMub25TY3JvbGwoKTsgfTtcbiAgICAgICAgdGhpcy5yb290RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIHRoaXMuc2Nyb2xsSGFuZGxlcik7XG4gICAgfTtcbiAgICBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUucmVtb3ZlU2Nyb2xsRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCEhdGhpcy5yb290RWxlbWVudCAmJiAhIXRoaXMuc2Nyb2xsSGFuZGxlcikge1xuICAgICAgICAgICAgdGhpcy5yb290RWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIHRoaXMuc2Nyb2xsSGFuZGxlcik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1cnZleU1vZGVsLlRlbXBsYXRlUmVuZGVyZXJDb21wb25lbnROYW1lID0gXCJzdi10ZW1wbGF0ZS1yZW5kZXJlclwiO1xuICAgIFN1cnZleU1vZGVsLnN0eWxlc01hbmFnZXIgPSBudWxsO1xuICAgIFN1cnZleU1vZGVsLnBsYXRmb3JtID0gXCJ1bmtub3duXCI7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wicHJvcGVydHlcIl0pKClcbiAgICBdLCBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwiY29tcGxldGVkQ3NzXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wicHJvcGVydHlcIl0pKClcbiAgICBdLCBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwiY29tcGxldGVkQmVmb3JlQ3NzXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wicHJvcGVydHlcIl0pKClcbiAgICBdLCBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwibG9hZGluZ0JvZHlDc3NcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJwcm9wZXJ0eVwiXSkoKVxuICAgIF0sIFN1cnZleU1vZGVsLnByb3RvdHlwZSwgXCJjb250YWluZXJDc3NcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJwcm9wZXJ0eVwiXSkoeyBvblNldDogZnVuY3Rpb24gKG5ld1ZhbHVlLCB0YXJnZXQpIHsgdGFyZ2V0LnVwZGF0ZUNzcygpOyB9IH0pXG4gICAgXSwgU3VydmV5TW9kZWwucHJvdG90eXBlLCBcImZpdFRvQ29udGFpbmVyXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wicHJvcGVydHlcIl0pKHtcbiAgICAgICAgICAgIG9uU2V0OiBmdW5jdGlvbiAobmV3VmFsdWUsIHRhcmdldCkge1xuICAgICAgICAgICAgICAgIGlmIChuZXdWYWx1ZSA9PT0gXCJjb3ZlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBsYXlvdXRFbGVtZW50ID0gdGFyZ2V0LmxheW91dEVsZW1lbnRzLmZpbHRlcihmdW5jdGlvbiAoYSkgeyByZXR1cm4gYS5pZCA9PT0gbmV3VmFsdWU7IH0pWzBdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWxheW91dEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb3ZlciA9IG5ldyBfY292ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIwX19bXCJDb3ZlclwiXSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY292ZXIubG9nb1Bvc2l0aW9uWCA9IHRhcmdldC5sb2dvUG9zaXRpb24gPT09IFwicmlnaHRcIiA/IFwicmlnaHRcIiA6IFwibGVmdFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgY292ZXIubG9nb1Bvc2l0aW9uWSA9IFwibWlkZGxlXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb3Zlci50aXRsZVBvc2l0aW9uWCA9IHRhcmdldC5sb2dvUG9zaXRpb24gPT09IFwicmlnaHRcIiA/IFwibGVmdFwiIDogXCJyaWdodFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgY292ZXIudGl0bGVQb3NpdGlvblkgPSBcIm1pZGRsZVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgY292ZXIuZGVzY3JpcHRpb25Qb3NpdGlvblggPSB0YXJnZXQubG9nb1Bvc2l0aW9uID09PSBcInJpZ2h0XCIgPyBcImxlZnRcIiA6IFwicmlnaHRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvdmVyLmRlc2NyaXB0aW9uUG9zaXRpb25ZID0gXCJtaWRkbGVcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvdmVyLnN1cnZleSA9IHRhcmdldDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC5sYXlvdXRFbGVtZW50cy51bnNoaWZ0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogXCJjb3ZlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcjogXCJoZWFkZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQ6IFwic3YtY292ZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBjb3ZlclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldC5yZW1vdmVMYXlvdXRFbGVtZW50KFwiY292ZXJcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgIF0sIFN1cnZleU1vZGVsLnByb3RvdHlwZSwgXCJ0aXRsZVZpZXdcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJwcm9wZXJ0eVwiXSkoKVxuICAgIF0sIFN1cnZleU1vZGVsLnByb3RvdHlwZSwgXCJzaG93QnJhbmRJbmZvXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wicHJvcGVydHlcIl0pKClcbiAgICBdLCBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwiZW50ZXJLZXlBY3Rpb25cIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJwcm9wZXJ0eVwiXSkoeyBkZWZhdWx0VmFsdWU6IHt9IH0pXG4gICAgXSwgU3VydmV5TW9kZWwucHJvdG90eXBlLCBcImNzc1ZhcmlhYmxlc1wiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QoX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcInByb3BlcnR5XCJdKSgpXG4gICAgXSwgU3VydmV5TW9kZWwucHJvdG90eXBlLCBcIl9pc01vYmlsZVwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QoX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcInByb3BlcnR5XCJdKSgpXG4gICAgXSwgU3VydmV5TW9kZWwucHJvdG90eXBlLCBcIl9pc0NvbXBhY3RcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJwcm9wZXJ0eVwiXSkoKVxuICAgIF0sIFN1cnZleU1vZGVsLnByb3RvdHlwZSwgXCJiYWNrZ3JvdW5kSW1hZ2VcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJwcm9wZXJ0eVwiXSkoKVxuICAgIF0sIFN1cnZleU1vZGVsLnByb3RvdHlwZSwgXCJyZW5kZXJCYWNrZ3JvdW5kSW1hZ2VcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJwcm9wZXJ0eVwiXSkoKVxuICAgIF0sIFN1cnZleU1vZGVsLnByb3RvdHlwZSwgXCJiYWNrZ3JvdW5kSW1hZ2VGaXRcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJwcm9wZXJ0eVwiXSkoKVxuICAgIF0sIFN1cnZleU1vZGVsLnByb3RvdHlwZSwgXCJiYWNrZ3JvdW5kSW1hZ2VBdHRhY2htZW50XCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wicHJvcGVydHlcIl0pKClcbiAgICBdLCBTdXJ2ZXlNb2RlbC5wcm90b3R5cGUsIFwicm9vdENzc1wiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QoX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcInByb3BlcnR5XCJdKSgpXG4gICAgXSwgU3VydmV5TW9kZWwucHJvdG90eXBlLCBcImNhbGN1bGF0ZWRXaWR0aE1vZGVcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJwcm9wZXJ0eUFycmF5XCJdKSgpXG4gICAgXSwgU3VydmV5TW9kZWwucHJvdG90eXBlLCBcImxheW91dEVsZW1lbnRzXCIsIHZvaWQgMCk7XG4gICAgcmV0dXJuIFN1cnZleU1vZGVsO1xufShfc3VydmV5X2VsZW1lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcIlN1cnZleUVsZW1lbnRDb3JlXCJdKSk7XG5cbmZ1bmN0aW9uIGlzU3RyQ2lFcXVhbChhLCBiKSB7XG4gICAgaWYgKCFhKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgaWYgKCFiKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIGEudG9VcHBlckNhc2UoKSA9PT0gYi50b1VwcGVyQ2FzZSgpO1xufVxuX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlNlcmlhbGl6ZXJcIl0uYWRkQ2xhc3MoXCJzdXJ2ZXlcIiwgW1xuICAgIHtcbiAgICAgICAgbmFtZTogXCJsb2NhbGVcIixcbiAgICAgICAgY2hvaWNlczogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIF9zdXJ2ZXlTdHJpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bXCJzdXJ2ZXlMb2NhbGl6YXRpb25cIl0uZ2V0TG9jYWxlcyh0cnVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25HZXRWYWx1ZTogZnVuY3Rpb24gKG9iaikge1xuICAgICAgICAgICAgcmV0dXJuIG9iai5sb2NhbGUgPT0gX3N1cnZleVN0cmluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1tcInN1cnZleUxvY2FsaXphdGlvblwiXS5kZWZhdWx0TG9jYWxlID8gbnVsbCA6IG9iai5sb2NhbGU7XG4gICAgICAgIH0sXG4gICAgfSxcbiAgICB7IG5hbWU6IFwidGl0bGVcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1RpdGxlXCIsIGRlcGVuZHNPbjogXCJsb2NhbGVcIiB9LFxuICAgIHtcbiAgICAgICAgbmFtZTogXCJkZXNjcmlwdGlvbjp0ZXh0XCIsXG4gICAgICAgIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NEZXNjcmlwdGlvblwiLFxuICAgICAgICBkZXBlbmRzT246IFwibG9jYWxlXCIsXG4gICAgfSxcbiAgICB7IG5hbWU6IFwibG9nb1wiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jTG9nb1wiIH0sXG4gICAgeyBuYW1lOiBcImxvZ29XaWR0aFwiLCBkZWZhdWx0OiBcIjMwMHB4XCIsIG1pblZhbHVlOiAwIH0sXG4gICAgeyBuYW1lOiBcImxvZ29IZWlnaHRcIiwgZGVmYXVsdDogXCIyMDBweFwiLCBtaW5WYWx1ZTogMCB9LFxuICAgIHtcbiAgICAgICAgbmFtZTogXCJsb2dvRml0XCIsXG4gICAgICAgIGRlZmF1bHQ6IFwiY29udGFpblwiLFxuICAgICAgICBjaG9pY2VzOiBbXCJub25lXCIsIFwiY29udGFpblwiLCBcImNvdmVyXCIsIFwiZmlsbFwiXSxcbiAgICB9LFxuICAgIHtcbiAgICAgICAgbmFtZTogXCJsb2dvUG9zaXRpb25cIixcbiAgICAgICAgZGVmYXVsdDogXCJsZWZ0XCIsXG4gICAgICAgIGNob2ljZXM6IFtcIm5vbmVcIiwgXCJsZWZ0XCIsIFwicmlnaHRcIiwgXCJ0b3BcIiwgXCJib3R0b21cIl0sXG4gICAgfSxcbiAgICB7IG5hbWU6IFwiZm9jdXNGaXJzdFF1ZXN0aW9uQXV0b21hdGljOmJvb2xlYW5cIiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIHsgbmFtZTogXCJmb2N1c09uRmlyc3RFcnJvcjpib29sZWFuXCIsIGRlZmF1bHQ6IHRydWUgfSxcbiAgICB7IG5hbWU6IFwiY29tcGxldGVkSHRtbDpodG1sXCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NDb21wbGV0ZWRIdG1sXCIgfSxcbiAgICB7XG4gICAgICAgIG5hbWU6IFwiY29tcGxldGVkQmVmb3JlSHRtbDpodG1sXCIsXG4gICAgICAgIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NDb21wbGV0ZWRCZWZvcmVIdG1sXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICAgIG5hbWU6IFwiY29tcGxldGVkSHRtbE9uQ29uZGl0aW9uOmh0bWxjb25kaXRpb25zXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJodG1sY29uZGl0aW9uaXRlbVwiLFxuICAgIH0sXG4gICAgeyBuYW1lOiBcImxvYWRpbmdIdG1sOmh0bWxcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY0xvYWRpbmdIdG1sXCIgfSxcbiAgICB7IG5hbWU6IFwicGFnZXM6c3VydmV5cGFnZXNcIiwgY2xhc3NOYW1lOiBcInBhZ2VcIiB9LFxuICAgIHtcbiAgICAgICAgbmFtZTogXCJxdWVzdGlvbnNcIixcbiAgICAgICAgYWx0ZXJuYXRpdmVOYW1lOiBcImVsZW1lbnRzXCIsXG4gICAgICAgIGJhc2VDbGFzc05hbWU6IFwicXVlc3Rpb25cIixcbiAgICAgICAgdmlzaWJsZTogZmFsc2UsXG4gICAgICAgIGlzTGlnaHRTZXJpYWxpemFibGU6IGZhbHNlLFxuICAgICAgICBvbkdldFZhbHVlOiBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSxcbiAgICAgICAgb25TZXRWYWx1ZTogZnVuY3Rpb24gKG9iaiwgdmFsdWUsIGpzb25Db252ZXJ0ZXIpIHtcbiAgICAgICAgICAgIG9iai5wYWdlcy5zcGxpY2UoMCwgb2JqLnBhZ2VzLmxlbmd0aCk7XG4gICAgICAgICAgICB2YXIgcGFnZSA9IG9iai5hZGROZXdQYWdlKFwiXCIpO1xuICAgICAgICAgICAganNvbkNvbnZlcnRlci50b09iamVjdCh7IHF1ZXN0aW9uczogdmFsdWUgfSwgcGFnZSk7XG4gICAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICAgIG5hbWU6IFwidHJpZ2dlcnM6dHJpZ2dlcnNcIixcbiAgICAgICAgYmFzZUNsYXNzTmFtZTogXCJzdXJ2ZXl0cmlnZ2VyXCIsXG4gICAgICAgIGNsYXNzTmFtZVBhcnQ6IFwidHJpZ2dlclwiLFxuICAgIH0sXG4gICAge1xuICAgICAgICBuYW1lOiBcImNhbGN1bGF0ZWRWYWx1ZXM6Y2FsY3VsYXRlZHZhbHVlc1wiLFxuICAgICAgICBjbGFzc05hbWU6IFwiY2FsY3VsYXRlZHZhbHVlXCIsXG4gICAgfSxcbiAgICB7IG5hbWU6IFwic3VydmV5SWRcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwic3VydmV5UG9zdElkXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcInN1cnZleVNob3dEYXRhU2F2aW5nOmJvb2xlYW5cIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICBcImNvb2tpZU5hbWVcIixcbiAgICBcInNlbmRSZXN1bHRPblBhZ2VOZXh0OmJvb2xlYW5cIixcbiAgICB7XG4gICAgICAgIG5hbWU6IFwic2hvd05hdmlnYXRpb25CdXR0b25zXCIsXG4gICAgICAgIGRlZmF1bHQ6IFwiYm90dG9tXCIsXG4gICAgICAgIGNob2ljZXM6IFtcIm5vbmVcIiwgXCJ0b3BcIiwgXCJib3R0b21cIiwgXCJib3RoXCJdLFxuICAgIH0sXG4gICAgeyBuYW1lOiBcInNob3dQcmV2QnV0dG9uOmJvb2xlYW5cIiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIHsgbmFtZTogXCJzaG93VGl0bGU6Ym9vbGVhblwiLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgeyBuYW1lOiBcInNob3dQYWdlVGl0bGVzOmJvb2xlYW5cIiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIHsgbmFtZTogXCJzaG93Q29tcGxldGVkUGFnZTpib29sZWFuXCIsIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBcIm5hdmlnYXRlVG9VcmxcIixcbiAgICB7XG4gICAgICAgIG5hbWU6IFwibmF2aWdhdGVUb1VybE9uQ29uZGl0aW9uOnVybGNvbmRpdGlvbnNcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcInVybGNvbmRpdGlvbml0ZW1cIixcbiAgICB9LFxuICAgIHtcbiAgICAgICAgbmFtZTogXCJxdWVzdGlvbnNPcmRlclwiLFxuICAgICAgICBkZWZhdWx0OiBcImluaXRpYWxcIixcbiAgICAgICAgY2hvaWNlczogW1wiaW5pdGlhbFwiLCBcInJhbmRvbVwiXSxcbiAgICB9LFxuICAgIHtcbiAgICAgICAgbmFtZTogXCJtYXRyaXhEcmFnSGFuZGxlQXJlYVwiLFxuICAgICAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICAgICAgZGVmYXVsdDogXCJlbnRpcmVJdGVtXCIsXG4gICAgICAgIGNob2ljZXM6IFtcImVudGlyZUl0ZW1cIiwgXCJpY29uXCJdXG4gICAgfSxcbiAgICBcInNob3dQYWdlTnVtYmVyczpib29sZWFuXCIsXG4gICAge1xuICAgICAgICBuYW1lOiBcInNob3dRdWVzdGlvbk51bWJlcnNcIixcbiAgICAgICAgZGVmYXVsdDogXCJvblwiLFxuICAgICAgICBjaG9pY2VzOiBbXCJvblwiLCBcIm9uUGFnZVwiLCBcIm9mZlwiXSxcbiAgICB9LFxuICAgIHtcbiAgICAgICAgbmFtZTogXCJxdWVzdGlvblRpdGxlTG9jYXRpb25cIixcbiAgICAgICAgZGVmYXVsdDogXCJ0b3BcIixcbiAgICAgICAgY2hvaWNlczogW1widG9wXCIsIFwiYm90dG9tXCIsIFwibGVmdFwiXSxcbiAgICB9LFxuICAgIHtcbiAgICAgICAgbmFtZTogXCJxdWVzdGlvbkRlc2NyaXB0aW9uTG9jYXRpb25cIixcbiAgICAgICAgZGVmYXVsdDogXCJ1bmRlclRpdGxlXCIsXG4gICAgICAgIGNob2ljZXM6IFtcInVuZGVySW5wdXRcIiwgXCJ1bmRlclRpdGxlXCJdLFxuICAgIH0sXG4gICAgeyBuYW1lOiBcInF1ZXN0aW9uRXJyb3JMb2NhdGlvblwiLCBkZWZhdWx0OiBcInRvcFwiLCBjaG9pY2VzOiBbXCJ0b3BcIiwgXCJib3R0b21cIl0gfSxcbiAgICB7XG4gICAgICAgIG5hbWU6IFwic2hvd1Byb2dyZXNzQmFyXCIsXG4gICAgICAgIGRlZmF1bHQ6IFwib2ZmXCIsXG4gICAgICAgIGNob2ljZXM6IFtcIm9mZlwiLCBcInRvcFwiLCBcImJvdHRvbVwiLCBcImJvdGhcIl0sXG4gICAgfSxcbiAgICB7XG4gICAgICAgIG5hbWU6IFwicHJvZ3Jlc3NCYXJUeXBlXCIsXG4gICAgICAgIGRlZmF1bHQ6IFwicGFnZXNcIixcbiAgICAgICAgY2hvaWNlczogW1xuICAgICAgICAgICAgXCJwYWdlc1wiLFxuICAgICAgICAgICAgXCJxdWVzdGlvbnNcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRRdWVzdGlvbnNcIixcbiAgICAgICAgICAgIFwiY29ycmVjdFF1ZXN0aW9uc1wiLFxuICAgICAgICAgICAgXCJidXR0b25zXCIsXG4gICAgICAgIF0sXG4gICAgfSxcbiAgICB7XG4gICAgICAgIG5hbWU6IFwic2hvd1RPQzpzd2l0Y2hcIixcbiAgICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgICAgbmFtZTogXCJ0b2NMb2NhdGlvblwiLCBkZWZhdWx0OiBcImxlZnRcIiwgY2hvaWNlczogW1wibGVmdFwiLCBcInJpZ2h0XCJdLFxuICAgICAgICBkZXBlbmRzT246IFtcInNob3dUT0NcIl0sXG4gICAgICAgIHZpc2libGVJZjogZnVuY3Rpb24gKHN1cnZleSkgeyByZXR1cm4gISFzdXJ2ZXkgJiYgc3VydmV5LnNob3dUT0M7IH1cbiAgICB9LFxuICAgIHsgbmFtZTogXCJtb2RlXCIsIGRlZmF1bHQ6IFwiZWRpdFwiLCBjaG9pY2VzOiBbXCJlZGl0XCIsIFwiZGlzcGxheVwiXSB9LFxuICAgIHsgbmFtZTogXCJzdG9yZU90aGVyc0FzQ29tbWVudDpib29sZWFuXCIsIGRlZmF1bHQ6IHRydWUgfSxcbiAgICB7IG5hbWU6IFwibWF4VGV4dExlbmd0aDpudW1iZXJcIiwgZGVmYXVsdDogMCwgbWluVmFsdWU6IDAgfSxcbiAgICB7IG5hbWU6IFwibWF4T3RoZXJzTGVuZ3RoOm51bWJlclwiLCBkZWZhdWx0OiAwLCBtaW5WYWx1ZTogMCB9LFxuICAgIHtcbiAgICAgICAgbmFtZTogXCJnb05leHRQYWdlQXV0b21hdGljOmJvb2xlYW5cIixcbiAgICAgICAgb25TZXRWYWx1ZTogZnVuY3Rpb24gKG9iaiwgdmFsdWUpIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gXCJhdXRvZ29uZXh0XCIpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IF9oZWxwZXJzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJIZWxwZXJzXCJdLmlzVHdvVmFsdWVFcXVhbHModmFsdWUsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb2JqLnNldFByb3BlcnR5VmFsdWUoXCJnb05leHRQYWdlQXV0b21hdGljXCIsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgICBuYW1lOiBcImNsZWFySW52aXNpYmxlVmFsdWVzXCIsXG4gICAgICAgIGRlZmF1bHQ6IFwib25Db21wbGV0ZVwiLFxuICAgICAgICBjaG9pY2VzOiBbXCJub25lXCIsIFwib25Db21wbGV0ZVwiLCBcIm9uSGlkZGVuXCIsIFwib25IaWRkZW5Db250YWluZXJcIl0sXG4gICAgfSxcbiAgICB7XG4gICAgICAgIG5hbWU6IFwiY2hlY2tFcnJvcnNNb2RlXCIsXG4gICAgICAgIGRlZmF1bHQ6IFwib25OZXh0UGFnZVwiLFxuICAgICAgICBjaG9pY2VzOiBbXCJvbk5leHRQYWdlXCIsIFwib25WYWx1ZUNoYW5nZWRcIiwgXCJvblZhbHVlQ2hhbmdpbmdcIiwgXCJvbkNvbXBsZXRlXCJdLFxuICAgIH0sXG4gICAge1xuICAgICAgICBuYW1lOiBcInRleHRVcGRhdGVNb2RlXCIsXG4gICAgICAgIGRlZmF1bHQ6IFwib25CbHVyXCIsXG4gICAgICAgIGNob2ljZXM6IFtcIm9uQmx1clwiLCBcIm9uVHlwaW5nXCJdLFxuICAgIH0sXG4gICAgeyBuYW1lOiBcImF1dG9Hcm93Q29tbWVudDpib29sZWFuXCIsIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcImFsbG93UmVzaXplQ29tbWVudDpib29sZWFuXCIsIGRlZmF1bHQ6IHRydWUgfSxcbiAgICB7IG5hbWU6IFwic3RhcnRTdXJ2ZXlUZXh0XCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NTdGFydFN1cnZleVRleHRcIiB9LFxuICAgIHsgbmFtZTogXCJwYWdlUHJldlRleHRcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1BhZ2VQcmV2VGV4dFwiIH0sXG4gICAgeyBuYW1lOiBcInBhZ2VOZXh0VGV4dFwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jUGFnZU5leHRUZXh0XCIgfSxcbiAgICB7IG5hbWU6IFwiY29tcGxldGVUZXh0XCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NDb21wbGV0ZVRleHRcIiB9LFxuICAgIHsgbmFtZTogXCJwcmV2aWV3VGV4dFwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jUHJldmlld1RleHRcIiB9LFxuICAgIHsgbmFtZTogXCJlZGl0VGV4dFwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jRWRpdFRleHRcIiB9LFxuICAgIHsgbmFtZTogXCJyZXF1aXJlZFRleHRcIiwgZGVmYXVsdDogXCIqXCIgfSxcbiAgICB7XG4gICAgICAgIG5hbWU6IFwicXVlc3Rpb25TdGFydEluZGV4XCIsXG4gICAgICAgIGRlcGVuZHNPbjogW1wic2hvd1F1ZXN0aW9uTnVtYmVyc1wiXSxcbiAgICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbiAoc3VydmV5KSB7IHJldHVybiAhc3VydmV5IHx8IHN1cnZleS5zaG93UXVlc3Rpb25OdW1iZXJzICE9PSBcIm9mZlwiOyB9XG4gICAgfSxcbiAgICB7XG4gICAgICAgIG5hbWU6IFwicXVlc3Rpb25UaXRsZVBhdHRlcm5cIixcbiAgICAgICAgZGVmYXVsdDogXCJudW1UaXRsZVJlcXVpcmVcIixcbiAgICAgICAgZGVwZW5kc09uOiBbXCJxdWVzdGlvblN0YXJ0SW5kZXhcIiwgXCJyZXF1aXJlZFRleHRcIl0sXG4gICAgICAgIGNob2ljZXM6IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgIGlmICghb2JqKVxuICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgIHJldHVybiBvYmouZ2V0UXVlc3Rpb25UaXRsZVBhdHRlcm5PcHRpb25zKCk7XG4gICAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICAgIG5hbWU6IFwicXVlc3Rpb25UaXRsZVRlbXBsYXRlXCIsXG4gICAgICAgIHZpc2libGU6IGZhbHNlLFxuICAgICAgICBpc1NlcmlhbGl6YWJsZTogZmFsc2UsXG4gICAgICAgIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NRdWVzdGlvblRpdGxlVGVtcGxhdGVcIixcbiAgICB9LFxuICAgIHsgbmFtZTogXCJmaXJzdFBhZ2VJc1N0YXJ0ZWQ6Ym9vbGVhblwiLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHtcbiAgICAgICAgbmFtZTogXCJpc1NpbmdsZVBhZ2U6Ym9vbGVhblwiLFxuICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgICAgdmlzaWJsZTogZmFsc2UsXG4gICAgICAgIGlzU2VyaWFsaXphYmxlOiBmYWxzZSxcbiAgICB9LFxuICAgIHtcbiAgICAgICAgbmFtZTogXCJxdWVzdGlvbnNPblBhZ2VNb2RlXCIsXG4gICAgICAgIGRlZmF1bHQ6IFwic3RhbmRhcmRcIixcbiAgICAgICAgY2hvaWNlczogW1wic2luZ2xlUGFnZVwiLCBcInN0YW5kYXJkXCIsIFwicXVlc3Rpb25QZXJQYWdlXCJdLFxuICAgIH0sXG4gICAge1xuICAgICAgICBuYW1lOiBcInNob3dQcmV2aWV3QmVmb3JlQ29tcGxldGVcIixcbiAgICAgICAgZGVmYXVsdDogXCJub1ByZXZpZXdcIixcbiAgICAgICAgY2hvaWNlczogW1wibm9QcmV2aWV3XCIsIFwic2hvd0FsbFF1ZXN0aW9uc1wiLCBcInNob3dBbnN3ZXJlZFF1ZXN0aW9uc1wiXSxcbiAgICB9LFxuICAgIHsgbmFtZTogXCJtYXhUaW1lVG9GaW5pc2g6bnVtYmVyXCIsIGRlZmF1bHQ6IDAsIG1pblZhbHVlOiAwIH0sXG4gICAgeyBuYW1lOiBcIm1heFRpbWVUb0ZpbmlzaFBhZ2U6bnVtYmVyXCIsIGRlZmF1bHQ6IDAsIG1pblZhbHVlOiAwIH0sXG4gICAge1xuICAgICAgICBuYW1lOiBcInNob3dUaW1lclBhbmVsXCIsXG4gICAgICAgIGRlZmF1bHQ6IFwibm9uZVwiLFxuICAgICAgICBjaG9pY2VzOiBbXCJub25lXCIsIFwidG9wXCIsIFwiYm90dG9tXCJdLFxuICAgIH0sXG4gICAge1xuICAgICAgICBuYW1lOiBcInNob3dUaW1lclBhbmVsTW9kZVwiLFxuICAgICAgICBkZWZhdWx0OiBcImFsbFwiLFxuICAgICAgICBjaG9pY2VzOiBbXCJhbGxcIiwgXCJwYWdlXCIsIFwic3VydmV5XCJdLFxuICAgIH0sXG4gICAge1xuICAgICAgICBuYW1lOiBcIndpZHRoTW9kZVwiLFxuICAgICAgICBkZWZhdWx0OiBcImF1dG9cIixcbiAgICAgICAgY2hvaWNlczogW1wiYXV0b1wiLCBcInN0YXRpY1wiLCBcInJlc3BvbnNpdmVcIl0sXG4gICAgfSxcbiAgICB7IG5hbWU6IFwid2lkdGhcIiwgdmlzaWJsZUlmOiBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmoud2lkdGhNb2RlID09PSBcInN0YXRpY1wiOyB9IH0sXG4gICAgeyBuYW1lOiBcImZpdFRvQ29udGFpbmVyOmJvb2xlYW5cIiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwidGl0bGVWaWV3XCIsIGRlZmF1bHQ6IFwidGl0bGVcIiwgY2hvaWNlczogW1widGl0bGVcIiwgXCJjb3ZlclwiXSwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwiYmFja2dyb3VuZEltYWdlXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcImJhY2tncm91bmRJbWFnZUZpdFwiLCBkZWZhdWx0OiBcImNvdmVyXCIsIGNob2ljZXM6IFtcImF1dG9cIiwgXCJjb250YWluXCIsIFwiY292ZXJcIl0sIHZpc2libGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcImJhY2tncm91bmRJbWFnZUF0dGFjaG1lbnRcIiwgZGVmYXVsdDogXCJzY3JvbGxcIiwgY2hvaWNlczogW1wic2Nyb2xsXCIsIFwiZml4ZWRcIl0sIHZpc2libGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcImJhY2tncm91bmRPcGFjaXR5Om51bWJlclwiLCBtaW5WYWx1ZTogMCwgbWF4VmFsdWU6IDEsIGRlZmF1bHQ6IDEsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcInNob3dCcmFuZEluZm86Ym9vbGVhblwiLCBkZWZhdWx0OiBmYWxzZSwgdmlzaWJsZTogZmFsc2UgfVxuXSk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvc3VydmV5UHJvZ3Jlc3MudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvc3VydmV5UHJvZ3Jlc3MudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogU3VydmV5UHJvZ3Jlc3NNb2RlbCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJTdXJ2ZXlQcm9ncmVzc01vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU3VydmV5UHJvZ3Jlc3NNb2RlbDsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3V0aWxzX2Nzc0NsYXNzQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi91dGlscy9jc3NDbGFzc0J1aWxkZXIgKi8gXCIuL3NyYy91dGlscy9jc3NDbGFzc0J1aWxkZXIudHNcIik7XG5cbnZhciBTdXJ2ZXlQcm9ncmVzc01vZGVsID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFN1cnZleVByb2dyZXNzTW9kZWwoKSB7XG4gICAgfVxuICAgIFN1cnZleVByb2dyZXNzTW9kZWwuZ2V0UHJvZ3Jlc3NUZXh0SW5CYXJDc3MgPSBmdW5jdGlvbiAoY3NzKSB7XG4gICAgICAgIHJldHVybiBuZXcgX3V0aWxzX2Nzc0NsYXNzQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiQ3NzQ2xhc3NCdWlsZGVyXCJdKClcbiAgICAgICAgICAgIC5hcHBlbmQoY3NzLnByb2dyZXNzVGV4dClcbiAgICAgICAgICAgIC5hcHBlbmQoY3NzLnByb2dyZXNzVGV4dEluQmFyKVxuICAgICAgICAgICAgLnRvU3RyaW5nKCk7XG4gICAgfTtcbiAgICBTdXJ2ZXlQcm9ncmVzc01vZGVsLmdldFByb2dyZXNzVGV4dFVuZGVyQmFyQ3NzID0gZnVuY3Rpb24gKGNzcykge1xuICAgICAgICByZXR1cm4gbmV3IF91dGlsc19jc3NDbGFzc0J1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkNzc0NsYXNzQnVpbGRlclwiXSgpXG4gICAgICAgICAgICAuYXBwZW5kKGNzcy5wcm9ncmVzc1RleHQpXG4gICAgICAgICAgICAuYXBwZW5kKGNzcy5wcm9ncmVzc1RleHRVbmRlckJhcilcbiAgICAgICAgICAgIC50b1N0cmluZygpO1xuICAgIH07XG4gICAgcmV0dXJuIFN1cnZleVByb2dyZXNzTW9kZWw7XG59KCkpO1xuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvc3VydmV5UHJvZ3Jlc3NCdXR0b25zLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9zdXJ2ZXlQcm9ncmVzc0J1dHRvbnMudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFN1cnZleVByb2dyZXNzQnV0dG9uc01vZGVsICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlN1cnZleVByb2dyZXNzQnV0dG9uc01vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU3VydmV5UHJvZ3Jlc3NCdXR0b25zTW9kZWw7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF91dGlsc19jc3NDbGFzc0J1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vdXRpbHMvY3NzQ2xhc3NCdWlsZGVyICovIFwiLi9zcmMvdXRpbHMvY3NzQ2xhc3NCdWlsZGVyLnRzXCIpO1xuXG52YXIgU3VydmV5UHJvZ3Jlc3NCdXR0b25zTW9kZWwgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU3VydmV5UHJvZ3Jlc3NCdXR0b25zTW9kZWwoc3VydmV5KSB7XG4gICAgICAgIHRoaXMuc3VydmV5ID0gc3VydmV5O1xuICAgIH1cbiAgICBTdXJ2ZXlQcm9ncmVzc0J1dHRvbnNNb2RlbC5wcm90b3R5cGUuaXNMaXN0RWxlbWVudENsaWNrYWJsZSA9IGZ1bmN0aW9uIChpbmRleCkge1xuICAgICAgICBpZiAoIXRoaXMuc3VydmV5Lm9uU2VydmVyVmFsaWRhdGVRdWVzdGlvbnMgfHxcbiAgICAgICAgICAgIHRoaXMuc3VydmV5Lm9uU2VydmVyVmFsaWRhdGVRdWVzdGlvbnMuaXNFbXB0eSB8fFxuICAgICAgICAgICAgdGhpcy5zdXJ2ZXkuY2hlY2tFcnJvcnNNb2RlID09PSBcIm9uQ29tcGxldGVcIikge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGluZGV4IDw9IHRoaXMuc3VydmV5LmN1cnJlbnRQYWdlTm8gKyAxO1xuICAgIH07XG4gICAgU3VydmV5UHJvZ3Jlc3NCdXR0b25zTW9kZWwucHJvdG90eXBlLmdldExpc3RFbGVtZW50Q3NzID0gZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgIGlmIChpbmRleCA+PSB0aGlzLnN1cnZleS52aXNpYmxlUGFnZXMubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICByZXR1cm4gbmV3IF91dGlsc19jc3NDbGFzc0J1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkNzc0NsYXNzQnVpbGRlclwiXSgpXG4gICAgICAgICAgICAuYXBwZW5kKHRoaXMuc3VydmV5LmNzcy5wcm9ncmVzc0J1dHRvbnNMaXN0RWxlbWVudFBhc3NlZCwgdGhpcy5zdXJ2ZXkudmlzaWJsZVBhZ2VzW2luZGV4XS5wYXNzZWQpXG4gICAgICAgICAgICAuYXBwZW5kKHRoaXMuc3VydmV5LmNzcy5wcm9ncmVzc0J1dHRvbnNMaXN0RWxlbWVudEN1cnJlbnQsIHRoaXMuc3VydmV5LmN1cnJlbnRQYWdlTm8gPT09IGluZGV4KVxuICAgICAgICAgICAgLmFwcGVuZCh0aGlzLnN1cnZleS5jc3MucHJvZ3Jlc3NCdXR0b25zTGlzdEVsZW1lbnROb25DbGlja2FibGUsICF0aGlzLmlzTGlzdEVsZW1lbnRDbGlja2FibGUoaW5kZXgpKVxuICAgICAgICAgICAgLnRvU3RyaW5nKCk7XG4gICAgfTtcbiAgICBTdXJ2ZXlQcm9ncmVzc0J1dHRvbnNNb2RlbC5wcm90b3R5cGUuZ2V0U2Nyb2xsQnV0dG9uQ3NzID0gZnVuY3Rpb24gKGhhc1Njcm9sbGVyLCBpc0xlZnRTY3JvbGwpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBfdXRpbHNfY3NzQ2xhc3NCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJDc3NDbGFzc0J1aWxkZXJcIl0oKVxuICAgICAgICAgICAgLmFwcGVuZCh0aGlzLnN1cnZleS5jc3MucHJvZ3Jlc3NCdXR0b25zSW1hZ2VCdXR0b25MZWZ0LCBpc0xlZnRTY3JvbGwpXG4gICAgICAgICAgICAuYXBwZW5kKHRoaXMuc3VydmV5LmNzcy5wcm9ncmVzc0J1dHRvbnNJbWFnZUJ1dHRvblJpZ2h0LCAhaXNMZWZ0U2Nyb2xsKVxuICAgICAgICAgICAgLmFwcGVuZCh0aGlzLnN1cnZleS5jc3MucHJvZ3Jlc3NCdXR0b25zSW1hZ2VCdXR0b25IaWRkZW4sICFoYXNTY3JvbGxlcilcbiAgICAgICAgICAgIC50b1N0cmluZygpO1xuICAgIH07XG4gICAgU3VydmV5UHJvZ3Jlc3NCdXR0b25zTW9kZWwucHJvdG90eXBlLmNsaWNrTGlzdEVsZW1lbnQgPSBmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3VydmV5LmlzRGVzaWduTW9kZSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKGluZGV4IDwgdGhpcy5zdXJ2ZXkuY3VycmVudFBhZ2VObykge1xuICAgICAgICAgICAgdGhpcy5zdXJ2ZXkuY3VycmVudFBhZ2VObyA9IGluZGV4O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGluZGV4ID4gdGhpcy5zdXJ2ZXkuY3VycmVudFBhZ2VObykge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMuc3VydmV5LmN1cnJlbnRQYWdlTm87IGkgPCBpbmRleDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnN1cnZleS5uZXh0UGFnZSgpKVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIFN1cnZleVByb2dyZXNzQnV0dG9uc01vZGVsO1xufSgpKTtcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3N1cnZleVN0cmluZ3MudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9zdXJ2ZXlTdHJpbmdzLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogc3VydmV5TG9jYWxpemF0aW9uLCBzdXJ2ZXlTdHJpbmdzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN1cnZleUxvY2FsaXphdGlvblwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvbjsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic3VydmV5U3RyaW5nc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN1cnZleVN0cmluZ3M7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9sb2NhbGl6YXRpb25fZW5nbGlzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9sb2NhbGl6YXRpb24vZW5nbGlzaCAqLyBcIi4vc3JjL2xvY2FsaXphdGlvbi9lbmdsaXNoLnRzXCIpO1xuXG52YXIgc3VydmV5TG9jYWxpemF0aW9uID0ge1xuICAgIGN1cnJlbnRMb2NhbGVWYWx1ZTogXCJcIixcbiAgICBkZWZhdWx0TG9jYWxlVmFsdWU6IFwiZW5cIixcbiAgICBsb2NhbGVzOiB7fSxcbiAgICBsb2NhbGVOYW1lczoge30sXG4gICAgc3VwcG9ydGVkTG9jYWxlczogW10sXG4gICAgZ2V0IGN1cnJlbnRMb2NhbGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRMb2NhbGVWYWx1ZSA9PT0gdGhpcy5kZWZhdWx0TG9jYWxlVmFsdWUgPyBcIlwiIDogdGhpcy5jdXJyZW50TG9jYWxlVmFsdWU7XG4gICAgfSxcbiAgICBzZXQgY3VycmVudExvY2FsZSh2YWwpIHtcbiAgICAgICAgaWYgKHZhbCA9PT0gXCJjelwiKVxuICAgICAgICAgICAgdmFsID0gXCJjc1wiO1xuICAgICAgICB0aGlzLmN1cnJlbnRMb2NhbGVWYWx1ZSA9IHZhbDtcbiAgICB9LFxuICAgIGdldCBkZWZhdWx0TG9jYWxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0TG9jYWxlVmFsdWU7XG4gICAgfSxcbiAgICBzZXQgZGVmYXVsdExvY2FsZSh2YWwpIHtcbiAgICAgICAgaWYgKHZhbCA9PT0gXCJjelwiKVxuICAgICAgICAgICAgdmFsID0gXCJjc1wiO1xuICAgICAgICB0aGlzLmRlZmF1bHRMb2NhbGVWYWx1ZSA9IHZhbDtcbiAgICB9LFxuICAgIGdldExvY2FsZVN0cmluZ3M6IGZ1bmN0aW9uIChsb2MpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlc1tsb2NdO1xuICAgIH0sXG4gICAgZ2V0U3RyaW5nOiBmdW5jdGlvbiAoc3RyTmFtZSwgbG9jYWxlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGlmIChsb2NhbGUgPT09IHZvaWQgMCkgeyBsb2NhbGUgPSBudWxsOyB9XG4gICAgICAgIHZhciBsb2NzID0gbmV3IEFycmF5KCk7XG4gICAgICAgIHZhciBhZGRMb2NhbGVDb3JlID0gZnVuY3Rpb24gKGxvY05hbWUpIHtcbiAgICAgICAgICAgIHZhciBzdHJzID0gX3RoaXMubG9jYWxlc1tsb2NOYW1lXTtcbiAgICAgICAgICAgIGlmICghIXN0cnMpXG4gICAgICAgICAgICAgICAgbG9jcy5wdXNoKHN0cnMpO1xuICAgICAgICB9O1xuICAgICAgICB2YXIgYWRkTG9jYWxlID0gZnVuY3Rpb24gKGxvY05hbWUpIHtcbiAgICAgICAgICAgIGlmICghbG9jTmFtZSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBhZGRMb2NhbGVDb3JlKGxvY05hbWUpO1xuICAgICAgICAgICAgdmFyIGluZGV4ID0gbG9jTmFtZS5pbmRleE9mKFwiLVwiKTtcbiAgICAgICAgICAgIGlmIChpbmRleCA8IDEpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgbG9jTmFtZSA9IGxvY05hbWUuc3Vic3RyaW5nKDAsIGluZGV4KTtcbiAgICAgICAgICAgIGFkZExvY2FsZUNvcmUobG9jTmFtZSk7XG4gICAgICAgIH07XG4gICAgICAgIGFkZExvY2FsZShsb2NhbGUpO1xuICAgICAgICBhZGRMb2NhbGUodGhpcy5jdXJyZW50TG9jYWxlKTtcbiAgICAgICAgYWRkTG9jYWxlKHRoaXMuZGVmYXVsdExvY2FsZSk7XG4gICAgICAgIGlmICh0aGlzLmRlZmF1bHRMb2NhbGUgIT09IFwiZW5cIikge1xuICAgICAgICAgICAgYWRkTG9jYWxlQ29yZShcImVuXCIpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbG9jcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIHJlcyA9IGxvY3NbaV1bc3RyTmFtZV07XG4gICAgICAgICAgICBpZiAocmVzICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5vbkdldEV4dGVybmFsU3RyaW5nKHN0ck5hbWUsIGxvY2FsZSk7XG4gICAgfSxcbiAgICBnZXRMb2NhbGVzOiBmdW5jdGlvbiAocmVtb3ZlRGVmYXVsdExvYykge1xuICAgICAgICBpZiAocmVtb3ZlRGVmYXVsdExvYyA9PT0gdm9pZCAwKSB7IHJlbW92ZURlZmF1bHRMb2MgPSBmYWxzZTsgfVxuICAgICAgICB2YXIgcmVzID0gW107XG4gICAgICAgIHJlcy5wdXNoKFwiXCIpO1xuICAgICAgICB2YXIgbG9jcyA9IHRoaXMubG9jYWxlcztcbiAgICAgICAgaWYgKHRoaXMuc3VwcG9ydGVkTG9jYWxlcyAmJiB0aGlzLnN1cHBvcnRlZExvY2FsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgbG9jcyA9IHt9O1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnN1cHBvcnRlZExvY2FsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsb2NzW3RoaXMuc3VwcG9ydGVkTG9jYWxlc1tpXV0gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIGtleSBpbiBsb2NzKSB7XG4gICAgICAgICAgICBpZiAocmVtb3ZlRGVmYXVsdExvYyAmJiBrZXkgPT0gdGhpcy5kZWZhdWx0TG9jYWxlKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgcmVzLnB1c2goa2V5KTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbG9jTmFtZSA9IGZ1bmN0aW9uIChsb2MpIHtcbiAgICAgICAgICAgIGlmICghbG9jKVxuICAgICAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICAgICAgdmFyIHJlcyA9IHN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tsb2NdO1xuICAgICAgICAgICAgaWYgKCFyZXMpXG4gICAgICAgICAgICAgICAgcmVzID0gbG9jO1xuICAgICAgICAgICAgcmV0dXJuIHJlcy50b0xvd2VyQ2FzZSgpO1xuICAgICAgICB9O1xuICAgICAgICByZXMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgdmFyIHN0cjEgPSBsb2NOYW1lKGEpO1xuICAgICAgICAgICAgdmFyIHN0cjIgPSBsb2NOYW1lKGIpO1xuICAgICAgICAgICAgaWYgKHN0cjEgPT09IHN0cjIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICByZXR1cm4gc3RyMSA8IHN0cjIgPyAtMSA6IDE7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH0sXG4gICAgb25HZXRFeHRlcm5hbFN0cmluZzogZnVuY3Rpb24gKG5hbWUsIGxvY2FsZSkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG59O1xudmFyIHN1cnZleVN0cmluZ3MgPSBfbG9jYWxpemF0aW9uX2VuZ2xpc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcImVuZ2xpc2hTdHJpbmdzXCJdO1xuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJlblwiXSA9IF9sb2NhbGl6YXRpb25fZW5nbGlzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiZW5nbGlzaFN0cmluZ3NcIl07XG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJlblwiXSA9IFwiZW5nbGlzaFwiO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3N1cnZleVRpbWVyTW9kZWwudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9zdXJ2ZXlUaW1lck1vZGVsLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogU3VydmV5VGltZXJNb2RlbCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJTdXJ2ZXlUaW1lck1vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU3VydmV5VGltZXJNb2RlbDsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Jhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYmFzZSAqLyBcIi4vc3JjL2Jhc2UudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3N1cnZleXRpbWVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3N1cnZleXRpbWVyICovIFwiLi9zcmMvc3VydmV5dGltZXIudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vanNvbm9iamVjdCAqLyBcIi4vc3JjL2pzb25vYmplY3QudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3V0aWxzX2Nzc0NsYXNzQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi91dGlscy9jc3NDbGFzc0J1aWxkZXIgKi8gXCIuL3NyYy91dGlscy9jc3NDbGFzc0J1aWxkZXIudHNcIik7XG52YXIgX19leHRlbmRzID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbnZhciBfX2RlY29yYXRlID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn07XG5cblxuXG5cbnZhciBTdXJ2ZXlUaW1lck1vZGVsID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhTdXJ2ZXlUaW1lck1vZGVsLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFN1cnZleVRpbWVyTW9kZWwoc3VydmV5KSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLnRpbWVyRnVuYyA9IG51bGw7XG4gICAgICAgIF90aGlzLnN1cnZleVZhbHVlID0gc3VydmV5O1xuICAgICAgICBfdGhpcy5vbkNyZWF0aW5nKCk7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleVRpbWVyTW9kZWwucHJvdG90eXBlLCBcInN1cnZleVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5zdXJ2ZXlWYWx1ZTsgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFN1cnZleVRpbWVyTW9kZWwucHJvdG90eXBlLm9uQ3JlYXRpbmcgPSBmdW5jdGlvbiAoKSB7IH07XG4gICAgU3VydmV5VGltZXJNb2RlbC5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGlmICghdGhpcy5zdXJ2ZXkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmICh0aGlzLmlzUnVubmluZyB8fCB0aGlzLmlzRGVzaWduTW9kZSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5zdXJ2ZXkub25DdXJyZW50UGFnZUNoYW5nZWQuYWRkKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLnVwZGF0ZSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy50aW1lckZ1bmMgPSBmdW5jdGlvbiAoKSB7IF90aGlzLmRvVGltZXIoKTsgfTtcbiAgICAgICAgdGhpcy5zZXRJc1J1bm5pbmcodHJ1ZSk7XG4gICAgICAgIHRoaXMudXBkYXRlKCk7XG4gICAgICAgIF9zdXJ2ZXl0aW1lcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiU3VydmV5VGltZXJcIl0uaW5zdGFuY2Uuc3RhcnQodGhpcy50aW1lckZ1bmMpO1xuICAgIH07XG4gICAgU3VydmV5VGltZXJNb2RlbC5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzUnVubmluZylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5zZXRJc1J1bm5pbmcoZmFsc2UpO1xuICAgICAgICBfc3VydmV5dGltZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlN1cnZleVRpbWVyXCJdLmluc3RhbmNlLnN0b3AodGhpcy50aW1lckZ1bmMpO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleVRpbWVyTW9kZWwucHJvdG90eXBlLCBcImlzUnVubmluZ1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImlzUnVubmluZ1wiLCBmYWxzZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBTdXJ2ZXlUaW1lck1vZGVsLnByb3RvdHlwZS5zZXRJc1J1bm5pbmcgPSBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImlzUnVubmluZ1wiLCB2YWwpO1xuICAgIH07XG4gICAgU3VydmV5VGltZXJNb2RlbC5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICAgICAgdGhpcy51cGRhdGVQcm9ncmVzcygpO1xuICAgIH07XG4gICAgU3VydmV5VGltZXJNb2RlbC5wcm90b3R5cGUuZG9UaW1lciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHBhZ2UgPSB0aGlzLnN1cnZleS5jdXJyZW50UGFnZTtcbiAgICAgICAgaWYgKHBhZ2UpIHtcbiAgICAgICAgICAgIHBhZ2UudGltZVNwZW50ID0gcGFnZS50aW1lU3BlbnQgKyAxO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3BlbnQgPSB0aGlzLnNwZW50ICsgMTtcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcbiAgICAgICAgaWYgKHRoaXMub25UaW1lcikge1xuICAgICAgICAgICAgdGhpcy5vblRpbWVyKHBhZ2UpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdXJ2ZXlUaW1lck1vZGVsLnByb3RvdHlwZS51cGRhdGVQcm9ncmVzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIF9hID0gdGhpcy5zdXJ2ZXkudGltZXJJbmZvLCBzcGVudCA9IF9hLnNwZW50LCBsaW1pdCA9IF9hLmxpbWl0O1xuICAgICAgICBpZiAoIWxpbWl0KSB7XG4gICAgICAgICAgICB0aGlzLnByb2dyZXNzID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHNwZW50ID09IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb2dyZXNzID0gMDtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMucHJvZ3Jlc3MgPSBNYXRoLmZsb29yKChzcGVudCArIDEpIC8gbGltaXQgKiAxMDApIC8gMTAwO1xuICAgICAgICAgICAgICAgIH0sIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoc3BlbnQgIT09IGxpbWl0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9ncmVzcyA9IE1hdGguZmxvb3IoKHNwZW50ICsgMSkgLyBsaW1pdCAqIDEwMCkgLyAxMDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1cnZleVRpbWVyTW9kZWwucHJvdG90eXBlLnVwZGF0ZVRleHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB0aW1lckNsb2NrID0gdGhpcy5zdXJ2ZXkudGltZXJDbG9jaztcbiAgICAgICAgdGhpcy5jbG9ja01ham9yVGV4dCA9IHRpbWVyQ2xvY2subWFqb3JUZXh0O1xuICAgICAgICB0aGlzLmNsb2NrTWlub3JUZXh0ID0gdGltZXJDbG9jay5taW5vclRleHQ7XG4gICAgICAgIHRoaXMudGV4dCA9IHRoaXMuc3VydmV5LnRpbWVySW5mb1RleHQ7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5VGltZXJNb2RlbC5wcm90b3R5cGUsIFwic2hvd1Byb2dyZXNzXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9ncmVzcyAhPT0gdW5kZWZpbmVkO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleVRpbWVyTW9kZWwucHJvdG90eXBlLCBcInNob3dUaW1lckFzQ2xvY2tcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAhIXRoaXMuc3VydmV5LmdldENzcygpLmNsb2NrVGltZXJSb290O1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleVRpbWVyTW9kZWwucHJvdG90eXBlLCBcInJvb3RDc3NcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgX3V0aWxzX2Nzc0NsYXNzQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiQ3NzQ2xhc3NCdWlsZGVyXCJdKClcbiAgICAgICAgICAgICAgICAuYXBwZW5kKHRoaXMuc3VydmV5LmdldENzcygpLmNsb2NrVGltZXJSb290KVxuICAgICAgICAgICAgICAgIC5hcHBlbmQodGhpcy5zdXJ2ZXkuZ2V0Q3NzKCkuY2xvY2tUaW1lclJvb3RUb3AsIHRoaXMuc3VydmV5LmlzVGltZXJQYW5lbFNob3dpbmdPblRvcClcbiAgICAgICAgICAgICAgICAuYXBwZW5kKHRoaXMuc3VydmV5LmdldENzcygpLmNsb2NrVGltZXJSb290Qm90dG9tLCB0aGlzLnN1cnZleS5pc1RpbWVyUGFuZWxTaG93aW5nT25Cb3R0b20pXG4gICAgICAgICAgICAgICAgLnRvU3RyaW5nKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBTdXJ2ZXlUaW1lck1vZGVsLnByb3RvdHlwZS5nZXRQcm9ncmVzc0NzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBfdXRpbHNfY3NzQ2xhc3NCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJDc3NDbGFzc0J1aWxkZXJcIl0oKVxuICAgICAgICAgICAgLmFwcGVuZCh0aGlzLnN1cnZleS5nZXRDc3MoKS5jbG9ja1RpbWVyUHJvZ3Jlc3MpXG4gICAgICAgICAgICAuYXBwZW5kKHRoaXMuc3VydmV5LmdldENzcygpLmNsb2NrVGltZXJQcm9ncmVzc0FuaW1hdGlvbiwgdGhpcy5wcm9ncmVzcyA+IDApXG4gICAgICAgICAgICAudG9TdHJpbmcoKTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlUaW1lck1vZGVsLnByb3RvdHlwZSwgXCJ0ZXh0Q29udGFpbmVyQ3NzXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdXJ2ZXkuZ2V0Q3NzKCkuY2xvY2tUaW1lclRleHRDb250YWluZXI7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5VGltZXJNb2RlbC5wcm90b3R5cGUsIFwibWlub3JUZXh0Q3NzXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdXJ2ZXkuZ2V0Q3NzKCkuY2xvY2tUaW1lck1pbm9yVGV4dDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlUaW1lck1vZGVsLnByb3RvdHlwZSwgXCJtYWpvclRleHRDc3NcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN1cnZleS5nZXRDc3MoKS5jbG9ja1RpbWVyTWFqb3JUZXh0O1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wicHJvcGVydHlcIl0pKClcbiAgICBdLCBTdXJ2ZXlUaW1lck1vZGVsLnByb3RvdHlwZSwgXCJ0ZXh0XCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wicHJvcGVydHlcIl0pKClcbiAgICBdLCBTdXJ2ZXlUaW1lck1vZGVsLnByb3RvdHlwZSwgXCJwcm9ncmVzc1wiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPYmplY3QoX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcInByb3BlcnR5XCJdKSgpXG4gICAgXSwgU3VydmV5VGltZXJNb2RlbC5wcm90b3R5cGUsIFwiY2xvY2tNYWpvclRleHRcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KF9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJwcm9wZXJ0eVwiXSkoKVxuICAgIF0sIFN1cnZleVRpbWVyTW9kZWwucHJvdG90eXBlLCBcImNsb2NrTWlub3JUZXh0XCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdChfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wicHJvcGVydHlcIl0pKHsgZGVmYXVsdFZhbHVlOiAwIH0pXG4gICAgXSwgU3VydmV5VGltZXJNb2RlbC5wcm90b3R5cGUsIFwic3BlbnRcIiwgdm9pZCAwKTtcbiAgICByZXR1cm4gU3VydmV5VGltZXJNb2RlbDtcbn0oX2Jhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkJhc2VcIl0pKTtcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3N1cnZleVRvYy50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvc3VydmV5VG9jLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiB0cnlOYXZpZ2F0ZVRvUGFnZSwgdHJ5Rm9jdXNQYWdlLCBjcmVhdGVUT0NMaXN0TW9kZWwsIGdldFRvY1Jvb3RDc3MsIFRPQ01vZGVsICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInRyeU5hdmlnYXRlVG9QYWdlXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gdHJ5TmF2aWdhdGVUb1BhZ2U7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInRyeUZvY3VzUGFnZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHRyeUZvY3VzUGFnZTsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiY3JlYXRlVE9DTGlzdE1vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlVE9DTGlzdE1vZGVsOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJnZXRUb2NSb290Q3NzXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZ2V0VG9jUm9vdENzczsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiVE9DTW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBUT0NNb2RlbDsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2FjdGlvbnNfYWN0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2FjdGlvbnMvYWN0aW9uICovIFwiLi9zcmMvYWN0aW9ucy9hY3Rpb24udHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Jhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYmFzZSAqLyBcIi4vc3JjL2Jhc2UudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2xpc3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vbGlzdCAqLyBcIi4vc3JjL2xpc3QudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3BhZ2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcGFnZSAqLyBcIi4vc3JjL3BhZ2UudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3BvcHVwX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3BvcHVwICovIFwiLi9zcmMvcG9wdXAudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3V0aWxzX2RldmljZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vdXRpbHMvZGV2aWNlcyAqLyBcIi4vc3JjL3V0aWxzL2RldmljZXMudHNcIik7XG5cblxuXG5cblxuXG5mdW5jdGlvbiB0cnlOYXZpZ2F0ZVRvUGFnZShzdXJ2ZXksIHBhZ2UpIHtcbiAgICBpZiAoc3VydmV5LmlzRGVzaWduTW9kZSlcbiAgICAgICAgcmV0dXJuO1xuICAgIHZhciBpbmRleCA9IHN1cnZleS52aXNpYmxlUGFnZXMuaW5kZXhPZihwYWdlKTtcbiAgICBpZiAoaW5kZXggPCBzdXJ2ZXkuY3VycmVudFBhZ2VObykge1xuICAgICAgICBzdXJ2ZXkuY3VycmVudFBhZ2VObyA9IGluZGV4O1xuICAgIH1cbiAgICBlbHNlIGlmIChpbmRleCA+IHN1cnZleS5jdXJyZW50UGFnZU5vKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSBzdXJ2ZXkuY3VycmVudFBhZ2VObzsgaSA8IGluZGV4OyBpKyspIHtcbiAgICAgICAgICAgIGlmICghc3VydmV5Lm5leHRQYWdlVUlDbGljaygpKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIHRyeUZvY3VzUGFnZShzdXJ2ZXksIHBhbmVsKSB7XG4gICAgaWYgKHN1cnZleS5pc0Rlc2lnbk1vZGUpXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIHBhbmVsLmZvY3VzRmlyc3RRdWVzdGlvbigpO1xuICAgIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gY3JlYXRlVE9DTGlzdE1vZGVsKHN1cnZleSwgb25BY3Rpb24pIHtcbiAgICB2YXIgX2E7XG4gICAgdmFyIHBhZ2VzU291cmNlID0gc3VydmV5LnF1ZXN0aW9uc09uUGFnZU1vZGUgPT09IFwic2luZ2xlUGFnZVwiID8gKF9hID0gc3VydmV5LnBhZ2VzWzBdKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZWxlbWVudHMgOiBzdXJ2ZXkucGFnZXM7XG4gICAgdmFyIGl0ZW1zID0gKHBhZ2VzU291cmNlIHx8IFtdKS5tYXAoZnVuY3Rpb24gKHBhZ2UpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgcmV0dXJuIG5ldyBfYWN0aW9uc19hY3Rpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkFjdGlvblwiXSh7XG4gICAgICAgICAgICBpZDogcGFnZS5uYW1lLFxuICAgICAgICAgICAgbG9jVGl0bGU6ICgoX2EgPSBwYWdlLmxvY05hdmlnYXRpb25UaXRsZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRleHQpID8gcGFnZS5sb2NOYXZpZ2F0aW9uVGl0bGUgOiAoKChfYiA9IHBhZ2UubG9jVGl0bGUpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi50ZXh0KSA/IHBhZ2UubG9jVGl0bGUgOiB1bmRlZmluZWQpLFxuICAgICAgICAgICAgdGl0bGU6IHBhZ2UucmVuZGVyZWROYXZpZ2F0aW9uVGl0bGUsXG4gICAgICAgICAgICBhY3Rpb246IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRvY3VtZW50ICE9PSB1bmRlZmluZWQgJiYgISFkb2N1bWVudC5hY3RpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICEhZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5ibHVyICYmIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuYmx1cigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAhIW9uQWN0aW9uICYmIG9uQWN0aW9uKCk7XG4gICAgICAgICAgICAgICAgaWYgKHBhZ2UgaW5zdGFuY2VvZiBfcGFnZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiUGFnZU1vZGVsXCJdKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnlOYXZpZ2F0ZVRvUGFnZShzdXJ2ZXksIHBhZ2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ5Rm9jdXNQYWdlKHN1cnZleSwgcGFnZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmlzaWJsZTogbmV3IF9iYXNlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJDb21wdXRlZFVwZGF0ZXJcIl0oZnVuY3Rpb24gKCkgeyByZXR1cm4gcGFnZS5pc1Zpc2libGUgJiYgIShwYWdlW1wiaXNTdGFydFBhZ2VcIl0pOyB9KVxuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICB2YXIgbGlzdE1vZGVsID0gbmV3IF9saXN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJMaXN0TW9kZWxcIl0oaXRlbXMsIGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIGlmICghIWl0ZW0uYWN0aW9uKCkpIHtcbiAgICAgICAgICAgIGxpc3RNb2RlbC5zZWxlY3RlZEl0ZW0gPSBpdGVtO1xuICAgICAgICB9XG4gICAgfSwgdHJ1ZSwgaXRlbXMuZmlsdGVyKGZ1bmN0aW9uIChpKSB7IHJldHVybiBpLmlkID09PSBzdXJ2ZXkuY3VycmVudFBhZ2UubmFtZTsgfSlbMF0gfHwgaXRlbXMuZmlsdGVyKGZ1bmN0aW9uIChpKSB7IHJldHVybiBpLmlkID09PSBwYWdlc1NvdXJjZVswXS5uYW1lOyB9KVswXSk7XG4gICAgbGlzdE1vZGVsLmFsbG93U2VsZWN0aW9uID0gZmFsc2U7XG4gICAgbGlzdE1vZGVsLmxvY093bmVyID0gc3VydmV5O1xuICAgIHN1cnZleS5vbkN1cnJlbnRQYWdlQ2hhbmdlZC5hZGQoZnVuY3Rpb24gKHMsIG8pIHtcbiAgICAgICAgbGlzdE1vZGVsLnNlbGVjdGVkSXRlbSA9IGl0ZW1zLmZpbHRlcihmdW5jdGlvbiAoaSkgeyByZXR1cm4gaS5pZCA9PT0gc3VydmV5LmN1cnJlbnRQYWdlLm5hbWU7IH0pWzBdO1xuICAgIH0pO1xuICAgIHJldHVybiBsaXN0TW9kZWw7XG59XG5mdW5jdGlvbiBnZXRUb2NSb290Q3NzKHN1cnZleSwgaXNNb2JpbGUpIHtcbiAgICBpZiAoaXNNb2JpbGUgPT09IHZvaWQgMCkgeyBpc01vYmlsZSA9IGZhbHNlOyB9XG4gICAgaWYgKGlzTW9iaWxlKSB7XG4gICAgICAgIHJldHVybiBcInN2X3Byb2dyZXNzLXRvYyBzdl9wcm9ncmVzcy10b2MtLW1vYmlsZVwiO1xuICAgIH1cbiAgICByZXR1cm4gXCJzdl9wcm9ncmVzcy10b2NcIiArIChcIiBzdl9wcm9ncmVzcy10b2MtLVwiICsgKHN1cnZleS50b2NMb2NhdGlvbiB8fCBcIlwiKS50b0xvd2VyQ2FzZSgpKTtcbn1cbnZhciBUT0NNb2RlbCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBUT0NNb2RlbChzdXJ2ZXkpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdGhpcy5zdXJ2ZXkgPSBzdXJ2ZXk7XG4gICAgICAgIHRoaXMuaXNNb2JpbGUgPSBfdXRpbHNfZGV2aWNlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fW1wiSXNUb3VjaFwiXTtcbiAgICAgICAgdGhpcy5pY29uID0gXCJpY29uLW5hdm1lbnVfMjR4MjRcIjtcbiAgICAgICAgdGhpcy50b2dnbGVQb3B1cCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLnBvcHVwTW9kZWwudG9nZ2xlVmlzaWJpbGl0eSgpO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmxpc3RNb2RlbCA9IGNyZWF0ZVRPQ0xpc3RNb2RlbChzdXJ2ZXksIGZ1bmN0aW9uICgpIHsgX3RoaXMucG9wdXBNb2RlbC5pc1Zpc2libGUgPSBmYWxzZTsgfSk7XG4gICAgICAgIHRoaXMucG9wdXBNb2RlbCA9IG5ldyBfcG9wdXBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1tcIlBvcHVwTW9kZWxcIl0oXCJzdi1saXN0XCIsIHsgbW9kZWw6IHRoaXMubGlzdE1vZGVsIH0pO1xuICAgICAgICB0aGlzLnBvcHVwTW9kZWwuZGlzcGxheU1vZGUgPSB0aGlzLmlzTW9iaWxlID8gXCJvdmVybGF5XCIgOiBcInBvcHVwXCI7XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUT0NNb2RlbC5wcm90b3R5cGUsIFwiY29udGFpbmVyQ3NzXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0VG9jUm9vdENzcyh0aGlzLnN1cnZleSwgdGhpcy5pc01vYmlsZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICByZXR1cm4gVE9DTW9kZWw7XG59KCkpO1xuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvc3VydmV5dGltZXIudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvc3VydmV5dGltZXIudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogc3VydmV5VGltZXJGdW5jdGlvbnMsIFN1cnZleVRpbWVyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN1cnZleVRpbWVyRnVuY3Rpb25zXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc3VydmV5VGltZXJGdW5jdGlvbnM7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlN1cnZleVRpbWVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU3VydmV5VGltZXI7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9iYXNlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2Jhc2UgKi8gXCIuL3NyYy9iYXNlLnRzXCIpO1xuXG52YXIgc3VydmV5VGltZXJGdW5jdGlvbnMgPSB7XG4gICAgc2V0VGltZW91dDogZnVuY3Rpb24gKGZ1bmMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpXG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmMsIDEwMDApO1xuICAgIH0sXG4gICAgY2xlYXJUaW1lb3V0OiBmdW5jdGlvbiAodGltZXJJZCkge1xuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aW1lcklkKTtcbiAgICB9LFxufTtcbnZhciBTdXJ2ZXlUaW1lciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBTdXJ2ZXlUaW1lcigpIHtcbiAgICAgICAgdGhpcy5saXN0ZW5lckNvdW50ZXIgPSAwO1xuICAgICAgICB0aGlzLnRpbWVySWQgPSAtMTtcbiAgICAgICAgdGhpcy5vblRpbWVyID0gbmV3IF9iYXNlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJFdmVudFwiXSgpO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5VGltZXIsIFwiaW5zdGFuY2VcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghU3VydmV5VGltZXIuaW5zdGFuY2VWYWx1ZSkge1xuICAgICAgICAgICAgICAgIFN1cnZleVRpbWVyLmluc3RhbmNlVmFsdWUgPSBuZXcgU3VydmV5VGltZXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBTdXJ2ZXlUaW1lci5pbnN0YW5jZVZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgU3VydmV5VGltZXIucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKGZ1bmMpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgaWYgKGZ1bmMgPT09IHZvaWQgMCkgeyBmdW5jID0gbnVsbDsgfVxuICAgICAgICBpZiAoZnVuYykge1xuICAgICAgICAgICAgdGhpcy5vblRpbWVyLmFkZChmdW5jKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy50aW1lcklkIDwgMCkge1xuICAgICAgICAgICAgdGhpcy50aW1lcklkID0gc3VydmV5VGltZXJGdW5jdGlvbnMuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMuZG9UaW1lcigpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5saXN0ZW5lckNvdW50ZXIrKztcbiAgICB9O1xuICAgIFN1cnZleVRpbWVyLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKGZ1bmMpIHtcbiAgICAgICAgaWYgKGZ1bmMgPT09IHZvaWQgMCkgeyBmdW5jID0gbnVsbDsgfVxuICAgICAgICBpZiAoZnVuYykge1xuICAgICAgICAgICAgdGhpcy5vblRpbWVyLnJlbW92ZShmdW5jKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxpc3RlbmVyQ291bnRlci0tO1xuICAgICAgICBpZiAodGhpcy5saXN0ZW5lckNvdW50ZXIgPT0gMCAmJiB0aGlzLnRpbWVySWQgPiAtMSkge1xuICAgICAgICAgICAgc3VydmV5VGltZXJGdW5jdGlvbnMuY2xlYXJUaW1lb3V0KHRoaXMudGltZXJJZCk7XG4gICAgICAgICAgICB0aGlzLnRpbWVySWQgPSAtMTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3VydmV5VGltZXIucHJvdG90eXBlLmRvVGltZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGlmICh0aGlzLm9uVGltZXIuaXNFbXB0eSB8fCB0aGlzLmxpc3RlbmVyQ291bnRlciA9PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnRpbWVySWQgPSAtMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy50aW1lcklkIDwgMClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIHByZXZJdGVtID0gdGhpcy50aW1lcklkO1xuICAgICAgICB0aGlzLm9uVGltZXIuZmlyZSh0aGlzLCB7fSk7XG4gICAgICAgIC8vV2UgaGF2ZSB0byBjaGVjayB0aGF0IHdlIGhhdmUgdGhlIHNhbWUgdGltZXJJZFxuICAgICAgICAvL0l0IGNvdWxkIGJlIGNoYW5nZWQgZHVyaW5nIGV2ZW50cyBleGVjdXRpb24gYW5kIGl0IHdpbGwgbGVhZCB0byBkb3VibGUgdGltZXIgZXZlbnRzXG4gICAgICAgIGlmIChwcmV2SXRlbSAhPT0gdGhpcy50aW1lcklkKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLnRpbWVySWQgPSBzdXJ2ZXlUaW1lckZ1bmN0aW9ucy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLmRvVGltZXIoKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTdXJ2ZXlUaW1lci5pbnN0YW5jZVZhbHVlID0gbnVsbDtcbiAgICByZXR1cm4gU3VydmV5VGltZXI7XG59KCkpO1xuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvc3ZnYnVuZGxlLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9zdmdidW5kbGUudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFN2Z0ljb25SZWdpc3RyeSwgU3ZnUmVnaXN0cnksIFN2Z0J1bmRsZVZpZXdNb2RlbCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJTdmdJY29uUmVnaXN0cnlcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBTdmdJY29uUmVnaXN0cnk7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlN2Z1JlZ2lzdHJ5XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU3ZnUmVnaXN0cnk7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlN2Z0J1bmRsZVZpZXdNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFN2Z0J1bmRsZVZpZXdNb2RlbDsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NldHRpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3NldHRpbmdzICovIFwiLi9zcmMvc2V0dGluZ3MudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3V0aWxzX3V0aWxzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3V0aWxzL3V0aWxzICovIFwiLi9zcmMvdXRpbHMvdXRpbHMudHNcIik7XG5cblxudmFyIFN2Z0ljb25EYXRhID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFN2Z0ljb25EYXRhKCkge1xuICAgIH1cbiAgICByZXR1cm4gU3ZnSWNvbkRhdGE7XG59KCkpO1xudmFyIFN2Z0ljb25SZWdpc3RyeSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBTdmdJY29uUmVnaXN0cnkoKSB7XG4gICAgICAgIHRoaXMuaWNvbnMgPSB7fTtcbiAgICAgICAgdGhpcy5pY29uUHJlZml4ID0gXCJpY29uLVwiO1xuICAgIH1cbiAgICBTdmdJY29uUmVnaXN0cnkucHJvdG90eXBlLnByb2Nlc3NJZCA9IGZ1bmN0aW9uIChpY29uSWQsIGljb25QcmVmaXgpIHtcbiAgICAgICAgaWYgKGljb25JZC5pbmRleE9mKGljb25QcmVmaXgpID09IDApXG4gICAgICAgICAgICBpY29uSWQgPSBpY29uSWQuc3Vic3RyaW5nKGljb25QcmVmaXgubGVuZ3RoKTtcbiAgICAgICAgcmV0dXJuIGljb25JZDtcbiAgICB9O1xuICAgIFN2Z0ljb25SZWdpc3RyeS5wcm90b3R5cGUucmVnaXN0ZXJJY29uRnJvbVN5bWJvbCA9IGZ1bmN0aW9uIChpY29uSWQsIGljb25TeW1ib2xTdmcpIHtcbiAgICAgICAgdGhpcy5pY29uc1tpY29uSWRdID0gaWNvblN5bWJvbFN2ZztcbiAgICB9O1xuICAgIFN2Z0ljb25SZWdpc3RyeS5wcm90b3R5cGUucmVnaXN0ZXJJY29uRnJvbVN2Z1ZpYUVsZW1lbnQgPSBmdW5jdGlvbiAoaWNvbklkLCBpY29uU3ZnLCBpY29uUHJlZml4KSB7XG4gICAgICAgIGlmIChpY29uUHJlZml4ID09PSB2b2lkIDApIHsgaWNvblByZWZpeCA9IHRoaXMuaWNvblByZWZpeDsgfVxuICAgICAgICBpY29uSWQgPSB0aGlzLnByb2Nlc3NJZChpY29uSWQsIGljb25QcmVmaXgpO1xuICAgICAgICB2YXIgZGl2U3ZnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgZGl2U3ZnLmlubmVySFRNTCA9IGljb25Tdmc7XG4gICAgICAgIHZhciBzeW1ib2wgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3ltYm9sXCIpO1xuICAgICAgICB2YXIgc3ZnID0gZGl2U3ZnLnF1ZXJ5U2VsZWN0b3IoXCJzdmdcIik7XG4gICAgICAgIHN5bWJvbC5pbm5lckhUTUwgPSBzdmcuaW5uZXJIVE1MO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN2Zy5hdHRyaWJ1dGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBzeW1ib2wuc2V0QXR0cmlidXRlTlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBzdmcuYXR0cmlidXRlc1tpXS5uYW1lLCBzdmcuYXR0cmlidXRlc1tpXS52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgc3ltYm9sLmlkID0gaWNvblByZWZpeCArIGljb25JZDtcbiAgICAgICAgdGhpcy5yZWdpc3Rlckljb25Gcm9tU3ltYm9sKGljb25JZCwgc3ltYm9sLm91dGVySFRNTCk7XG4gICAgfTtcbiAgICBTdmdJY29uUmVnaXN0cnkucHJvdG90eXBlLnJlZ2lzdGVySWNvbkZyb21TdmcgPSBmdW5jdGlvbiAoaWNvbklkLCBpY29uU3ZnLCBpY29uUHJlZml4KSB7XG4gICAgICAgIGlmIChpY29uUHJlZml4ID09PSB2b2lkIDApIHsgaWNvblByZWZpeCA9IHRoaXMuaWNvblByZWZpeDsgfVxuICAgICAgICBpY29uSWQgPSB0aGlzLnByb2Nlc3NJZChpY29uSWQsIGljb25QcmVmaXgpO1xuICAgICAgICB2YXIgc3RhcnRTdHIgPSBcIjxzdmcgXCI7XG4gICAgICAgIHZhciBlbmRTdHIgPSBcIjwvc3ZnPlwiO1xuICAgICAgICBpY29uU3ZnID0gaWNvblN2Zy50cmltKCk7XG4gICAgICAgIHZhciBzdHIgPSBpY29uU3ZnLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmIChzdHIuc3Vic3RyaW5nKDAsIHN0YXJ0U3RyLmxlbmd0aCkgPT09IHN0YXJ0U3RyICYmXG4gICAgICAgICAgICBzdHIuc3Vic3RyaW5nKHN0ci5sZW5ndGggLSBlbmRTdHIubGVuZ3RoLCBzdHIubGVuZ3RoKSA9PT0gZW5kU3RyKSB7XG4gICAgICAgICAgICB0aGlzLnJlZ2lzdGVySWNvbkZyb21TeW1ib2woaWNvbklkLCBcIjxzeW1ib2wgXCIgK1xuICAgICAgICAgICAgICAgIFwiaWQ9XFxcIlwiICsgaWNvblByZWZpeCArIGljb25JZCArIFwiXFxcIiBcIiArXG4gICAgICAgICAgICAgICAgaWNvblN2Zy5zdWJzdHJpbmcoc3RhcnRTdHIubGVuZ3RoLCBzdHIubGVuZ3RoIC0gZW5kU3RyLmxlbmd0aCkgK1xuICAgICAgICAgICAgICAgIFwiPC9zeW1ib2w+XCIpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN2Z0ljb25SZWdpc3RyeS5wcm90b3R5cGUucmVnaXN0ZXJJY29uc0Zyb21Gb2xkZXIgPSBmdW5jdGlvbiAocikge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICByLmtleXMoKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIF90aGlzLnJlZ2lzdGVySWNvbkZyb21Tdmcoa2V5LnN1YnN0cmluZygyLCBrZXkubGVuZ3RoIC0gNCkudG9Mb3dlckNhc2UoKSwgcihrZXkpKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTdmdJY29uUmVnaXN0cnkucHJvdG90eXBlLmljb25zUmVuZGVyZWRIdG1sID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5pY29ucykubWFwKGZ1bmN0aW9uIChpY29uKSB7IHJldHVybiBfdGhpcy5pY29uc1tpY29uXTsgfSkuam9pbihcIlwiKTtcbiAgICB9O1xuICAgIFN2Z0ljb25SZWdpc3RyeS5wcm90b3R5cGUucmVuZGVySWNvbnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBjb250YWluZXJJZCA9IFwic3YtaWNvbi1ob2xkZXItZ2xvYmFsLWNvbnRhaW5lclwiO1xuICAgICAgICBpZiAoISFfc2V0dGluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInNldHRpbmdzXCJdLmVudmlyb25tZW50ICYmICFfc2V0dGluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInNldHRpbmdzXCJdLmVudmlyb25tZW50LnJvb3QuZ2V0RWxlbWVudEJ5SWQoY29udGFpbmVySWQpKSB7XG4gICAgICAgICAgICB2YXIgaWNvbnNEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICAgICAgaWNvbnNEaXYuaWQgPSBjb250YWluZXJJZDtcbiAgICAgICAgICAgIGljb25zRGl2LmlubmVySFRNTCA9IFwiPHN2Zz5cIiArIHRoaXMuaWNvbnNSZW5kZXJlZEh0bWwoKSArIFwiPC9zdmc+XCI7XG4gICAgICAgICAgICBpY29uc0Rpdi5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG4gICAgICAgICAgICBPYmplY3QoX3V0aWxzX3V0aWxzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJnZXRFbGVtZW50XCJdKShfc2V0dGluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInNldHRpbmdzXCJdLmVudmlyb25tZW50LnN2Z01vdW50Q29udGFpbmVyKS5hcHBlbmRDaGlsZChpY29uc0Rpdik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBTdmdJY29uUmVnaXN0cnk7XG59KCkpO1xuXG52YXIgU3ZnUmVnaXN0cnkgPSBuZXcgU3ZnSWNvblJlZ2lzdHJ5KCk7XG52YXIgU3ZnQnVuZGxlVmlld01vZGVsO1xudmFyIHBhdGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiLi9zcmMvaW1hZ2VzIHN5bmMgXFxcXC5zdmckXCIpO1xudmFyIHBhdGhTbWlsZXkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiLi9zcmMvaW1hZ2VzL3NtaWxleSBzeW5jIFxcXFwuc3ZnJFwiKTtcblN2Z1JlZ2lzdHJ5LnJlZ2lzdGVySWNvbnNGcm9tRm9sZGVyKHBhdGgpO1xuU3ZnUmVnaXN0cnkucmVnaXN0ZXJJY29uc0Zyb21Gb2xkZXIocGF0aFNtaWxleSk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdGVtcGxhdGUtcmVuZGVyZXIudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdGVtcGxhdGUtcmVuZGVyZXIudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgbm8gZXhwb3J0cyBwcm92aWRlZCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3RleHRQcmVQcm9jZXNzb3IudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy90ZXh0UHJlUHJvY2Vzc29yLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogVGV4dFByZVByb2Nlc3Nvckl0ZW0sIFRleHRQcmVQcm9jZXNzb3JWYWx1ZSwgVGV4dFByZVByb2Nlc3NvciwgUXVlc3Rpb25UZXh0UHJvY2Vzc29yICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlRleHRQcmVQcm9jZXNzb3JJdGVtXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gVGV4dFByZVByb2Nlc3Nvckl0ZW07IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlRleHRQcmVQcm9jZXNzb3JWYWx1ZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFRleHRQcmVQcm9jZXNzb3JWYWx1ZTsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiVGV4dFByZVByb2Nlc3NvclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFRleHRQcmVQcm9jZXNzb3I7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlF1ZXN0aW9uVGV4dFByb2Nlc3NvclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFF1ZXN0aW9uVGV4dFByb2Nlc3NvcjsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2hlbHBlcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vaGVscGVycyAqLyBcIi4vc3JjL2hlbHBlcnMudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2NvbmRpdGlvblByb2Nlc3NWYWx1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9jb25kaXRpb25Qcm9jZXNzVmFsdWUgKi8gXCIuL3NyYy9jb25kaXRpb25Qcm9jZXNzVmFsdWUudHNcIik7XG5cblxudmFyIFRleHRQcmVQcm9jZXNzb3JJdGVtID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFRleHRQcmVQcm9jZXNzb3JJdGVtKCkge1xuICAgIH1cbiAgICByZXR1cm4gVGV4dFByZVByb2Nlc3Nvckl0ZW07XG59KCkpO1xuXG52YXIgVGV4dFByZVByb2Nlc3NvclZhbHVlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFRleHRQcmVQcm9jZXNzb3JWYWx1ZShuYW1lLCByZXR1cm5EaXNwbGF5VmFsdWUpIHtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy5yZXR1cm5EaXNwbGF5VmFsdWUgPSByZXR1cm5EaXNwbGF5VmFsdWU7XG4gICAgICAgIHRoaXMuaXNFeGlzdHMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jYW5Qcm9jZXNzID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIFRleHRQcmVQcm9jZXNzb3JWYWx1ZTtcbn0oKSk7XG5cbnZhciBUZXh0UHJlUHJvY2Vzc29yID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFRleHRQcmVQcm9jZXNzb3IoKSB7XG4gICAgICAgIHRoaXMuX3VuT2JzZXJ2YWJsZVZhbHVlcyA9IFt1bmRlZmluZWRdO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVGV4dFByZVByb2Nlc3Nvci5wcm90b3R5cGUsIFwiaGFzQWxsVmFsdWVzT25MYXN0UnVuVmFsdWVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl91bk9ic2VydmFibGVWYWx1ZXNbMF07XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5fdW5PYnNlcnZhYmxlVmFsdWVzWzBdID0gdmFsO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgVGV4dFByZVByb2Nlc3Nvci5wcm90b3R5cGUucHJvY2VzcyA9IGZ1bmN0aW9uICh0ZXh0LCByZXR1cm5EaXNwbGF5VmFsdWUsIGRvRW5jb2RpbmcpIHtcbiAgICAgICAgaWYgKHJldHVybkRpc3BsYXlWYWx1ZSA9PT0gdm9pZCAwKSB7IHJldHVybkRpc3BsYXlWYWx1ZSA9IGZhbHNlOyB9XG4gICAgICAgIGlmIChkb0VuY29kaW5nID09PSB2b2lkIDApIHsgZG9FbmNvZGluZyA9IGZhbHNlOyB9XG4gICAgICAgIHRoaXMuaGFzQWxsVmFsdWVzT25MYXN0UnVuVmFsdWUgPSB0cnVlO1xuICAgICAgICBpZiAoIXRleHQpXG4gICAgICAgICAgICByZXR1cm4gdGV4dDtcbiAgICAgICAgaWYgKCF0aGlzLm9uUHJvY2VzcylcbiAgICAgICAgICAgIHJldHVybiB0ZXh0O1xuICAgICAgICB2YXIgaXRlbXMgPSB0aGlzLmdldEl0ZW1zKHRleHQpO1xuICAgICAgICBmb3IgKHZhciBpID0gaXRlbXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIHZhciBpdGVtID0gaXRlbXNbaV07XG4gICAgICAgICAgICB2YXIgbmFtZSA9IHRoaXMuZ2V0TmFtZSh0ZXh0LnN1YnN0cmluZyhpdGVtLnN0YXJ0ICsgMSwgaXRlbS5lbmQpKTtcbiAgICAgICAgICAgIGlmICghbmFtZSlcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIHZhciB0ZXh0VmFsdWUgPSBuZXcgVGV4dFByZVByb2Nlc3NvclZhbHVlKG5hbWUsIHJldHVybkRpc3BsYXlWYWx1ZSk7XG4gICAgICAgICAgICB0aGlzLm9uUHJvY2Vzcyh0ZXh0VmFsdWUpO1xuICAgICAgICAgICAgaWYgKCF0ZXh0VmFsdWUuaXNFeGlzdHMpIHtcbiAgICAgICAgICAgICAgICBpZiAodGV4dFZhbHVlLmNhblByb2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYXNBbGxWYWx1ZXNPbkxhc3RSdW5WYWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChfaGVscGVyc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiSGVscGVyc1wiXS5pc1ZhbHVlRW1wdHkodGV4dFZhbHVlLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFzQWxsVmFsdWVzT25MYXN0UnVuVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciByZXBsYWNlZFZhbHVlID0gIV9oZWxwZXJzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJIZWxwZXJzXCJdLmlzVmFsdWVFbXB0eSh0ZXh0VmFsdWUudmFsdWUpXG4gICAgICAgICAgICAgICAgPyB0ZXh0VmFsdWUudmFsdWVcbiAgICAgICAgICAgICAgICA6IFwiXCI7XG4gICAgICAgICAgICBpZiAoZG9FbmNvZGluZykge1xuICAgICAgICAgICAgICAgIHJlcGxhY2VkVmFsdWUgPSBlbmNvZGVVUklDb21wb25lbnQocmVwbGFjZWRWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0ZXh0ID1cbiAgICAgICAgICAgICAgICB0ZXh0LnN1YnN0cmluZygwLCBpdGVtLnN0YXJ0KSArIHJlcGxhY2VkVmFsdWUgKyB0ZXh0LnN1YnN0cmluZyhpdGVtLmVuZCArIDEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0ZXh0O1xuICAgIH07XG4gICAgVGV4dFByZVByb2Nlc3Nvci5wcm90b3R5cGUucHJvY2Vzc1ZhbHVlID0gZnVuY3Rpb24gKG5hbWUsIHJldHVybkRpc3BsYXlWYWx1ZSkge1xuICAgICAgICB2YXIgdGV4dFZhbHVlID0gbmV3IFRleHRQcmVQcm9jZXNzb3JWYWx1ZShuYW1lLCByZXR1cm5EaXNwbGF5VmFsdWUpO1xuICAgICAgICBpZiAoISF0aGlzLm9uUHJvY2Vzcykge1xuICAgICAgICAgICAgdGhpcy5vblByb2Nlc3ModGV4dFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGV4dFZhbHVlO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRleHRQcmVQcm9jZXNzb3IucHJvdG90eXBlLCBcImhhc0FsbFZhbHVlc09uTGFzdFJ1blwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuICEhdGhpcy5oYXNBbGxWYWx1ZXNPbkxhc3RSdW5WYWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFRleHRQcmVQcm9jZXNzb3IucHJvdG90eXBlLmdldEl0ZW1zID0gZnVuY3Rpb24gKHRleHQpIHtcbiAgICAgICAgdmFyIGl0ZW1zID0gW107XG4gICAgICAgIHZhciBsZW5ndGggPSB0ZXh0Lmxlbmd0aDtcbiAgICAgICAgdmFyIHN0YXJ0ID0gLTE7XG4gICAgICAgIHZhciBjaCA9IFwiXCI7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNoID0gdGV4dFtpXTtcbiAgICAgICAgICAgIGlmIChjaCA9PSBcIntcIilcbiAgICAgICAgICAgICAgICBzdGFydCA9IGk7XG4gICAgICAgICAgICBpZiAoY2ggPT0gXCJ9XCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoc3RhcnQgPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgaXRlbSA9IG5ldyBUZXh0UHJlUHJvY2Vzc29ySXRlbSgpO1xuICAgICAgICAgICAgICAgICAgICBpdGVtLnN0YXJ0ID0gc3RhcnQ7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uZW5kID0gaTtcbiAgICAgICAgICAgICAgICAgICAgaXRlbXMucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc3RhcnQgPSAtMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgfTtcbiAgICBUZXh0UHJlUHJvY2Vzc29yLnByb3RvdHlwZS5nZXROYW1lID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgaWYgKCFuYW1lKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICByZXR1cm4gbmFtZS50cmltKCk7XG4gICAgfTtcbiAgICByZXR1cm4gVGV4dFByZVByb2Nlc3Nvcjtcbn0oKSk7XG5cbnZhciBRdWVzdGlvblRleHRQcm9jZXNzb3IgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gUXVlc3Rpb25UZXh0UHJvY2Vzc29yKHZhcmlhYmxlTmFtZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB0aGlzLnZhcmlhYmxlTmFtZSA9IHZhcmlhYmxlTmFtZTtcbiAgICAgICAgdGhpcy50ZXh0UHJlUHJvY2Vzc29yID0gbmV3IFRleHRQcmVQcm9jZXNzb3IoKTtcbiAgICAgICAgdGhpcy50ZXh0UHJlUHJvY2Vzc29yLm9uUHJvY2VzcyA9IGZ1bmN0aW9uICh0ZXh0VmFsdWUpIHtcbiAgICAgICAgICAgIF90aGlzLmdldFByb2Nlc3NlZFRleHRWYWx1ZSh0ZXh0VmFsdWUpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBRdWVzdGlvblRleHRQcm9jZXNzb3IucHJvdG90eXBlLnByb2Nlc3NWYWx1ZSA9IGZ1bmN0aW9uIChuYW1lLCByZXR1cm5EaXNwbGF5VmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGV4dFByZVByb2Nlc3Nvci5wcm9jZXNzVmFsdWUobmFtZSwgcmV0dXJuRGlzcGxheVZhbHVlKTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRdWVzdGlvblRleHRQcm9jZXNzb3IucHJvdG90eXBlLCBcInN1cnZleVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUXVlc3Rpb25UZXh0UHJvY2Vzc29yLnByb3RvdHlwZSwgXCJwYW5lbFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBRdWVzdGlvblRleHRQcm9jZXNzb3IucHJvdG90eXBlLmdldFZhbHVlcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5wYW5lbCA/IHRoaXMucGFuZWwuZ2V0VmFsdWUoKSA6IG51bGw7XG4gICAgfTtcbiAgICBRdWVzdGlvblRleHRQcm9jZXNzb3IucHJvdG90eXBlLmdldFF1ZXN0aW9uQnlOYW1lID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5wYW5lbFxuICAgICAgICAgICAgPyB0aGlzLnBhbmVsLmdldFF1ZXN0aW9uQnlWYWx1ZU5hbWUobmFtZSlcbiAgICAgICAgICAgIDogbnVsbDtcbiAgICB9O1xuICAgIFF1ZXN0aW9uVGV4dFByb2Nlc3Nvci5wcm90b3R5cGUuZ2V0UGFyZW50VGV4dFByb2Nlc3NvciA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG51bGw7IH07XG4gICAgUXVlc3Rpb25UZXh0UHJvY2Vzc29yLnByb3RvdHlwZS5vbkN1c3RvbVByb2Nlc3NUZXh0ID0gZnVuY3Rpb24gKHRleHRWYWx1ZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgICBRdWVzdGlvblRleHRQcm9jZXNzb3IucHJvdG90eXBlLmdldFF1ZXN0aW9uRGlzcGxheVRleHQgPSBmdW5jdGlvbiAocXVlc3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIHF1ZXN0aW9uLmRpc3BsYXlWYWx1ZTtcbiAgICB9O1xuICAgIC8vSVRleHRQcm9jZXNzb3JcbiAgICBRdWVzdGlvblRleHRQcm9jZXNzb3IucHJvdG90eXBlLmdldFByb2Nlc3NlZFRleHRWYWx1ZSA9IGZ1bmN0aW9uICh0ZXh0VmFsdWUpIHtcbiAgICAgICAgaWYgKCF0ZXh0VmFsdWUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmICh0aGlzLm9uQ3VzdG9tUHJvY2Vzc1RleHQodGV4dFZhbHVlKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIGZpcnN0TmFtZSA9IG5ldyBfY29uZGl0aW9uUHJvY2Vzc1ZhbHVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJQcm9jZXNzVmFsdWVcIl0oKS5nZXRGaXJzdE5hbWUodGV4dFZhbHVlLm5hbWUpO1xuICAgICAgICB0ZXh0VmFsdWUuaXNFeGlzdHMgPSBmaXJzdE5hbWUgPT0gdGhpcy52YXJpYWJsZU5hbWU7XG4gICAgICAgIHRleHRWYWx1ZS5jYW5Qcm9jZXNzID0gdGV4dFZhbHVlLmlzRXhpc3RzO1xuICAgICAgICBpZiAoIXRleHRWYWx1ZS5jYW5Qcm9jZXNzKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAvL25hbWUgc2hvdWxkIHN0YXJ0IHdpdGggdGhlIHZhcmlhYmxlIG5hbWVcbiAgICAgICAgdGV4dFZhbHVlLm5hbWUgPSB0ZXh0VmFsdWUubmFtZS5yZXBsYWNlKHRoaXMudmFyaWFibGVOYW1lICsgXCIuXCIsIFwiXCIpO1xuICAgICAgICB2YXIgZmlyc3ROYW1lID0gbmV3IF9jb25kaXRpb25Qcm9jZXNzVmFsdWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlByb2Nlc3NWYWx1ZVwiXSgpLmdldEZpcnN0TmFtZSh0ZXh0VmFsdWUubmFtZSk7XG4gICAgICAgIHZhciBxdWVzdGlvbiA9IHRoaXMuZ2V0UXVlc3Rpb25CeU5hbWUoZmlyc3ROYW1lKTtcbiAgICAgICAgdmFyIHZhbHVlcyA9IHt9O1xuICAgICAgICBpZiAocXVlc3Rpb24pIHtcbiAgICAgICAgICAgIHZhbHVlc1tmaXJzdE5hbWVdID0gdGV4dFZhbHVlLnJldHVybkRpc3BsYXlWYWx1ZVxuICAgICAgICAgICAgICAgID8gdGhpcy5nZXRRdWVzdGlvbkRpc3BsYXlUZXh0KHF1ZXN0aW9uKVxuICAgICAgICAgICAgICAgIDogcXVlc3Rpb24udmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgYWxsVmFsdWVzID0gISF0aGlzLnBhbmVsID8gdGhpcy5nZXRWYWx1ZXMoKSA6IG51bGw7XG4gICAgICAgICAgICBpZiAoYWxsVmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgdmFsdWVzW2ZpcnN0TmFtZV0gPSBhbGxWYWx1ZXNbZmlyc3ROYW1lXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0ZXh0VmFsdWUudmFsdWUgPSBuZXcgX2NvbmRpdGlvblByb2Nlc3NWYWx1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiUHJvY2Vzc1ZhbHVlXCJdKCkuZ2V0VmFsdWUodGV4dFZhbHVlLm5hbWUsIHZhbHVlcyk7XG4gICAgfTtcbiAgICBRdWVzdGlvblRleHRQcm9jZXNzb3IucHJvdG90eXBlLnByb2Nlc3NUZXh0ID0gZnVuY3Rpb24gKHRleHQsIHJldHVybkRpc3BsYXlWYWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5zdXJ2ZXkgJiYgdGhpcy5zdXJ2ZXkuaXNEZXNpZ25Nb2RlKVxuICAgICAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgICAgIHRleHQgPSB0aGlzLnRleHRQcmVQcm9jZXNzb3IucHJvY2Vzcyh0ZXh0LCByZXR1cm5EaXNwbGF5VmFsdWUpO1xuICAgICAgICB0ZXh0ID0gdGhpcy5wcm9jZXNzVGV4dENvcmUodGhpcy5nZXRQYXJlbnRUZXh0UHJvY2Vzc29yKCksIHRleHQsIHJldHVybkRpc3BsYXlWYWx1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NUZXh0Q29yZSh0aGlzLnN1cnZleSwgdGV4dCwgcmV0dXJuRGlzcGxheVZhbHVlKTtcbiAgICB9O1xuICAgIFF1ZXN0aW9uVGV4dFByb2Nlc3Nvci5wcm90b3R5cGUucHJvY2Vzc1RleHRFeCA9IGZ1bmN0aW9uICh0ZXh0LCByZXR1cm5EaXNwbGF5VmFsdWUpIHtcbiAgICAgICAgdGV4dCA9IHRoaXMucHJvY2Vzc1RleHQodGV4dCwgcmV0dXJuRGlzcGxheVZhbHVlKTtcbiAgICAgICAgdmFyIGhhc0FsbFZhbHVlc09uTGFzdFJ1biA9IHRoaXMudGV4dFByZVByb2Nlc3Nvci5oYXNBbGxWYWx1ZXNPbkxhc3RSdW47XG4gICAgICAgIHZhciByZXMgPSB7IGhhc0FsbFZhbHVlc09uTGFzdFJ1bjogdHJ1ZSwgdGV4dDogdGV4dCB9O1xuICAgICAgICBpZiAodGhpcy5zdXJ2ZXkpIHtcbiAgICAgICAgICAgIHJlcyA9IHRoaXMuc3VydmV5LnByb2Nlc3NUZXh0RXgodGV4dCwgcmV0dXJuRGlzcGxheVZhbHVlLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzLmhhc0FsbFZhbHVlc09uTGFzdFJ1biA9XG4gICAgICAgICAgICByZXMuaGFzQWxsVmFsdWVzT25MYXN0UnVuICYmIGhhc0FsbFZhbHVlc09uTGFzdFJ1bjtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9O1xuICAgIFF1ZXN0aW9uVGV4dFByb2Nlc3Nvci5wcm90b3R5cGUucHJvY2Vzc1RleHRDb3JlID0gZnVuY3Rpb24gKHRleHRQcm9jZXNzb3IsIHRleHQsIHJldHVybkRpc3BsYXlWYWx1ZSkge1xuICAgICAgICBpZiAoIXRleHRQcm9jZXNzb3IpXG4gICAgICAgICAgICByZXR1cm4gdGV4dDtcbiAgICAgICAgcmV0dXJuIHRleHRQcm9jZXNzb3IucHJvY2Vzc1RleHQodGV4dCwgcmV0dXJuRGlzcGxheVZhbHVlKTtcbiAgICB9O1xuICAgIHJldHVybiBRdWVzdGlvblRleHRQcm9jZXNzb3I7XG59KCkpO1xuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdGhlbWVzLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy90aGVtZXMudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIG5vIGV4cG9ydHMgcHJvdmlkZWQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy90cmlnZ2VyLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdHJpZ2dlci50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFRyaWdnZXIsIFN1cnZleVRyaWdnZXIsIFN1cnZleVRyaWdnZXJWaXNpYmxlLCBTdXJ2ZXlUcmlnZ2VyQ29tcGxldGUsIFN1cnZleVRyaWdnZXJTZXRWYWx1ZSwgU3VydmV5VHJpZ2dlclNraXAsIFN1cnZleVRyaWdnZXJSdW5FeHByZXNzaW9uLCBTdXJ2ZXlUcmlnZ2VyQ29weVZhbHVlICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlRyaWdnZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBUcmlnZ2VyOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJTdXJ2ZXlUcmlnZ2VyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU3VydmV5VHJpZ2dlcjsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiU3VydmV5VHJpZ2dlclZpc2libGVcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBTdXJ2ZXlUcmlnZ2VyVmlzaWJsZTsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiU3VydmV5VHJpZ2dlckNvbXBsZXRlXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU3VydmV5VHJpZ2dlckNvbXBsZXRlOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJTdXJ2ZXlUcmlnZ2VyU2V0VmFsdWVcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBTdXJ2ZXlUcmlnZ2VyU2V0VmFsdWU7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlN1cnZleVRyaWdnZXJTa2lwXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU3VydmV5VHJpZ2dlclNraXA7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlN1cnZleVRyaWdnZXJSdW5FeHByZXNzaW9uXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU3VydmV5VHJpZ2dlclJ1bkV4cHJlc3Npb247IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlN1cnZleVRyaWdnZXJDb3B5VmFsdWVcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBTdXJ2ZXlUcmlnZ2VyQ29weVZhbHVlOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfaGVscGVyc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9oZWxwZXJzICovIFwiLi9zcmMvaGVscGVycy50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYmFzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9iYXNlICovIFwiLi9zcmMvYmFzZS50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9qc29ub2JqZWN0ICovIFwiLi9zcmMvanNvbm9iamVjdC50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfY29uZGl0aW9uc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9jb25kaXRpb25zICovIFwiLi9zcmMvY29uZGl0aW9ucy50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZXhwcmVzc2lvbnNfZXhwcmVzc2lvbnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZXhwcmVzc2lvbnMvZXhwcmVzc2lvbnMgKi8gXCIuL3NyYy9leHByZXNzaW9ucy9leHByZXNzaW9ucy50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfY29uZGl0aW9uUHJvY2Vzc1ZhbHVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2NvbmRpdGlvblByb2Nlc3NWYWx1ZSAqLyBcIi4vc3JjL2NvbmRpdGlvblByb2Nlc3NWYWx1ZS50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc2V0dGluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vc2V0dGluZ3MgKi8gXCIuL3NyYy9zZXR0aW5ncy50c1wiKTtcbnZhciBfX2V4dGVuZHMgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xuXG5cblxuXG5cblxuXG4vKipcbiAqIEEgYmFzZSBjbGFzcyBmb3IgYWxsIHRyaWdnZXJzLlxuICogQSB0cmlnZ2VyIGNhbGxzIGEgbWV0aG9kIHdoZW4gdGhlIGV4cHJlc3Npb24gY2hhbmdlIHRoZSByZXN1bHQ6IGZyb20gZmFsc2UgdG8gdHJ1ZSBvciBmcm9tIHRydWUgdG8gZmFsc2UuXG4gKiBQbGVhc2Ugbm90ZSwgaXQgcnVucyBvbmx5IG9uZSBjaGFuZ2luZyB0aGUgZXhwcmVzc2lvbiByZXN1bHQuXG4gKi9cbnZhciBUcmlnZ2VyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhUcmlnZ2VyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFRyaWdnZXIoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmlkVmFsdWUgPSAoVHJpZ2dlci5pZENvdW50ZXIrKyk7XG4gICAgICAgIF90aGlzLnJlZ2lzdGVyUHJvcGVydHlDaGFuZ2VkSGFuZGxlcnMoW1wib3BlcmF0b3JcIiwgXCJ2YWx1ZVwiLCBcIm5hbWVcIl0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLm9sZFByb3BlcnRpZXNDaGFuZ2VkKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBfdGhpcy5yZWdpc3RlclByb3BlcnR5Q2hhbmdlZEhhbmRsZXJzKFtcImV4cHJlc3Npb25cIl0sIGZ1bmN0aW9uICgpIHsgX3RoaXMub25FeHByZXNzaW9uQ2hhbmdlZCgpOyB9KTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVHJpZ2dlciwgXCJvcGVyYXRvcnNcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChUcmlnZ2VyLm9wZXJhdG9yc1ZhbHVlICE9IG51bGwpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFRyaWdnZXIub3BlcmF0b3JzVmFsdWU7XG4gICAgICAgICAgICBUcmlnZ2VyLm9wZXJhdG9yc1ZhbHVlID0ge1xuICAgICAgICAgICAgICAgIGVtcHR5OiBmdW5jdGlvbiAodmFsdWUsIGV4cGVjdGVkVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICF2YWx1ZTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG5vdGVtcHR5OiBmdW5jdGlvbiAodmFsdWUsIGV4cGVjdGVkVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICEhdmFsdWU7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlcXVhbDogZnVuY3Rpb24gKHZhbHVlLCBleHBlY3RlZFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSA9PSBleHBlY3RlZFZhbHVlO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbm90ZXF1YWw6IGZ1bmN0aW9uICh2YWx1ZSwgZXhwZWN0ZWRWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgIT0gZXhwZWN0ZWRWYWx1ZTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNvbnRhaW5zOiBmdW5jdGlvbiAodmFsdWUsIGV4cGVjdGVkVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlICYmIHZhbHVlW1wiaW5kZXhPZlwiXSAmJiB2YWx1ZS5pbmRleE9mKGV4cGVjdGVkVmFsdWUpID4gLTE7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBub3Rjb250YWluczogZnVuY3Rpb24gKHZhbHVlLCBleHBlY3RlZFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoIXZhbHVlIHx8ICF2YWx1ZVtcImluZGV4T2ZcIl0gfHwgdmFsdWUuaW5kZXhPZihleHBlY3RlZFZhbHVlKSA9PSAtMSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBncmVhdGVyOiBmdW5jdGlvbiAodmFsdWUsIGV4cGVjdGVkVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlID4gZXhwZWN0ZWRWYWx1ZTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGxlc3M6IGZ1bmN0aW9uICh2YWx1ZSwgZXhwZWN0ZWRWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgPCBleHBlY3RlZFZhbHVlO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZ3JlYXRlcm9yZXF1YWw6IGZ1bmN0aW9uICh2YWx1ZSwgZXhwZWN0ZWRWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgPj0gZXhwZWN0ZWRWYWx1ZTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGxlc3NvcmVxdWFsOiBmdW5jdGlvbiAodmFsdWUsIGV4cGVjdGVkVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlIDw9IGV4cGVjdGVkVmFsdWU7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gVHJpZ2dlci5vcGVyYXRvcnNWYWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUcmlnZ2VyLnByb3RvdHlwZSwgXCJpZFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5pZFZhbHVlOyB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgVHJpZ2dlci5wcm90b3R5cGUuZ2V0VHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIFwidHJpZ2dlcmJhc2VcIjtcbiAgICB9O1xuICAgIFRyaWdnZXIucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcmVzID0gdGhpcy5nZXRUeXBlKCkucmVwbGFjZShcInRyaWdnZXJcIiwgXCJcIik7XG4gICAgICAgIHZhciBleHAgPSAhIXRoaXMuZXhwcmVzc2lvbiA/IHRoaXMuZXhwcmVzc2lvbiA6IHRoaXMuYnVpbGRFeHByZXNzaW9uKCk7XG4gICAgICAgIGlmIChleHApIHtcbiAgICAgICAgICAgIHJlcyArPSBcIiwgXCIgKyBleHA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUcmlnZ2VyLnByb3RvdHlwZSwgXCJvcGVyYXRvclwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIm9wZXJhdG9yXCIsIFwiZXF1YWxcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAoIXZhbHVlKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIGlmICghVHJpZ2dlci5vcGVyYXRvcnNbdmFsdWVdKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm9wZXJhdG9yXCIsIHZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUcmlnZ2VyLnByb3RvdHlwZSwgXCJ2YWx1ZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInZhbHVlXCIsIG51bGwpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInZhbHVlXCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVHJpZ2dlci5wcm90b3R5cGUsIFwibmFtZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIm5hbWVcIiwgXCJcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibmFtZVwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRyaWdnZXIucHJvdG90eXBlLCBcImV4cHJlc3Npb25cIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJleHByZXNzaW9uXCIsIFwiXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImV4cHJlc3Npb25cIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFRyaWdnZXIucHJvdG90eXBlLmNhbkJlRXhlY3V0ZWQgPSBmdW5jdGlvbiAoaXNPbk5leHRQYWdlKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG4gICAgVHJpZ2dlci5wcm90b3R5cGUuY2FuQmVFeGVjdXRlZE9uQ29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuICAgIFRyaWdnZXIucHJvdG90eXBlLmNoZWNrRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChpc09uTmV4dFBhZ2UsIGlzT25Db21wbGV0ZSwga2V5cywgdmFsdWVzLCBwcm9wZXJ0aWVzKSB7XG4gICAgICAgIGlmIChwcm9wZXJ0aWVzID09PSB2b2lkIDApIHsgcHJvcGVydGllcyA9IG51bGw7IH1cbiAgICAgICAgdGhpcy5pc0V4ZWN1dGluZ09uTmV4dFBhZ2UgPSBpc09uTmV4dFBhZ2U7XG4gICAgICAgIGlmICghdGhpcy5jYW5CZUV4ZWN1dGVkKGlzT25OZXh0UGFnZSkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmIChpc09uQ29tcGxldGUgJiYgIXRoaXMuY2FuQmVFeGVjdXRlZE9uQ29tcGxldGUoKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKCF0aGlzLmlzQ2hlY2tSZXF1aXJlZChrZXlzKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKCEhdGhpcy5jb25kaXRpb25SdW5uZXIpIHtcbiAgICAgICAgICAgIHRoaXMucGVyZm9ybSh2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBUcmlnZ2VyLnByb3RvdHlwZS5jaGVjayA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgdHJpZ2dlclJlc3VsdCA9IFRyaWdnZXIub3BlcmF0b3JzW3RoaXMub3BlcmF0b3JdKHZhbHVlLCB0aGlzLnZhbHVlKTtcbiAgICAgICAgaWYgKHRyaWdnZXJSZXN1bHQpIHtcbiAgICAgICAgICAgIHRoaXMub25TdWNjZXNzKHt9LCBudWxsKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub25GYWlsdXJlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUcmlnZ2VyLnByb3RvdHlwZSwgXCJyZXF1aXJlVmFsaWRRdWVzdGlvblwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZmFsc2U7IH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBUcmlnZ2VyLnByb3RvdHlwZS5wZXJmb3JtID0gZnVuY3Rpb24gKHZhbHVlcywgcHJvcGVydGllcykge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB0aGlzLmNvbmRpdGlvblJ1bm5lci5vblJ1bkNvbXBsZXRlID0gZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgX3RoaXMudHJpZ2dlclJlc3VsdChyZXMsIHZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuY29uZGl0aW9uUnVubmVyLnJ1bih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgIH07XG4gICAgVHJpZ2dlci5wcm90b3R5cGUudHJpZ2dlclJlc3VsdCA9IGZ1bmN0aW9uIChyZXMsIHZhbHVlcywgcHJvcGVydGllcykge1xuICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgICB0aGlzLm9uU3VjY2Vzcyh2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgICAgICAgICAgdGhpcy5vblN1Y2Nlc3NFeGVjdXRlZCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5vbkZhaWx1cmUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgVHJpZ2dlci5wcm90b3R5cGUub25TdWNjZXNzID0gZnVuY3Rpb24gKHZhbHVlcywgcHJvcGVydGllcykgeyB9O1xuICAgIFRyaWdnZXIucHJvdG90eXBlLm9uRmFpbHVyZSA9IGZ1bmN0aW9uICgpIHsgfTtcbiAgICBUcmlnZ2VyLnByb3RvdHlwZS5vblN1Y2Nlc3NFeGVjdXRlZCA9IGZ1bmN0aW9uICgpIHsgfTtcbiAgICBUcmlnZ2VyLnByb3RvdHlwZS5lbmRMb2FkaW5nRnJvbUpzb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUuZW5kTG9hZGluZ0Zyb21Kc29uLmNhbGwodGhpcyk7XG4gICAgICAgIHRoaXMub2xkUHJvcGVydGllc0NoYW5nZWQoKTtcbiAgICB9O1xuICAgIFRyaWdnZXIucHJvdG90eXBlLm9sZFByb3BlcnRpZXNDaGFuZ2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLm9uRXhwcmVzc2lvbkNoYW5nZWQoKTtcbiAgICB9O1xuICAgIFRyaWdnZXIucHJvdG90eXBlLm9uRXhwcmVzc2lvbkNoYW5nZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuY29uZGl0aW9uUnVubmVyID0gbnVsbDtcbiAgICB9O1xuICAgIFRyaWdnZXIucHJvdG90eXBlLmJ1aWxkRXhwcmVzc2lvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLm5hbWUpXG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgaWYgKHRoaXMuaXNWYWx1ZUVtcHR5KHRoaXMudmFsdWUpICYmIHRoaXMuaXNSZXF1aXJlVmFsdWUpXG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgcmV0dXJuIChcIntcIiArXG4gICAgICAgICAgICB0aGlzLm5hbWUgK1xuICAgICAgICAgICAgXCJ9IFwiICtcbiAgICAgICAgICAgIHRoaXMub3BlcmF0b3IgK1xuICAgICAgICAgICAgXCIgXCIgK1xuICAgICAgICAgICAgX2V4cHJlc3Npb25zX2V4cHJlc3Npb25zX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bXCJPcGVyYW5kTWFrZXJcIl0udG9PcGVyYW5kU3RyaW5nKHRoaXMudmFsdWUpKTtcbiAgICB9O1xuICAgIFRyaWdnZXIucHJvdG90eXBlLmlzQ2hlY2tSZXF1aXJlZCA9IGZ1bmN0aW9uIChrZXlzKSB7XG4gICAgICAgIGlmICgha2V5cylcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgdGhpcy5jcmVhdGVDb25kaXRpb25SdW5uZXIoKTtcbiAgICAgICAgaWYgKHRoaXMuY29uZGl0aW9uUnVubmVyLmhhc0Z1bmN0aW9uKCkgPT09IHRydWUpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIG5ldyBfY29uZGl0aW9uUHJvY2Vzc1ZhbHVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bXCJQcm9jZXNzVmFsdWVcIl0oKS5pc0FueUtleUNoYW5nZWQoa2V5cywgdGhpcy5jb25kaXRpb25SdW5uZXIuZ2V0VmFyaWFibGVzKCkpO1xuICAgIH07XG4gICAgVHJpZ2dlci5wcm90b3R5cGUuY3JlYXRlQ29uZGl0aW9uUnVubmVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoISF0aGlzLmNvbmRpdGlvblJ1bm5lcilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIGV4cHJlc3Npb24gPSB0aGlzLmV4cHJlc3Npb247XG4gICAgICAgIGlmICghZXhwcmVzc2lvbikge1xuICAgICAgICAgICAgZXhwcmVzc2lvbiA9IHRoaXMuYnVpbGRFeHByZXNzaW9uKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFleHByZXNzaW9uKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLmNvbmRpdGlvblJ1bm5lciA9IG5ldyBfY29uZGl0aW9uc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiQ29uZGl0aW9uUnVubmVyXCJdKGV4cHJlc3Npb24pO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRyaWdnZXIucHJvdG90eXBlLCBcImlzUmVxdWlyZVZhbHVlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5vcGVyYXRvciAhPT0gXCJlbXB0eVwiICYmIHRoaXMub3BlcmF0b3IgIT0gXCJub3RlbXB0eVwiO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgVHJpZ2dlci5pZENvdW50ZXIgPSAxO1xuICAgIFRyaWdnZXIub3BlcmF0b3JzVmFsdWUgPSBudWxsO1xuICAgIHJldHVybiBUcmlnZ2VyO1xufShfYmFzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiQmFzZVwiXSkpO1xuXG4vKipcbiAqIEl0IGV4dGVuZHMgdGhlIFRyaWdnZXIgYmFzZSBjbGFzcyBhbmQgYWRkIHByb3BlcnRpZXMgcmVxdWlyZWQgZm9yIFN1cnZleUpTIGNsYXNzZXMuXG4gKi9cbnZhciBTdXJ2ZXlUcmlnZ2VyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhTdXJ2ZXlUcmlnZ2VyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFN1cnZleVRyaWdnZXIoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLm93bmVyVmFsdWUgPSBudWxsO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlUcmlnZ2VyLnByb3RvdHlwZSwgXCJvd25lclwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMub3duZXJWYWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFN1cnZleVRyaWdnZXIucHJvdG90eXBlLnNldE93bmVyID0gZnVuY3Rpb24gKG93bmVyKSB7XG4gICAgICAgIHRoaXMub3duZXJWYWx1ZSA9IG93bmVyO1xuICAgIH07XG4gICAgU3VydmV5VHJpZ2dlci5wcm90b3R5cGUuZ2V0U3VydmV5ID0gZnVuY3Rpb24gKGxpdmUpIHtcbiAgICAgICAgaWYgKGxpdmUgPT09IHZvaWQgMCkgeyBsaXZlID0gZmFsc2U7IH1cbiAgICAgICAgcmV0dXJuICEhdGhpcy5vd25lciAmJiAhIXRoaXMub3duZXJbXCJnZXRTdXJ2ZXlcIl1cbiAgICAgICAgICAgID8gdGhpcy5vd25lci5nZXRTdXJ2ZXkoKVxuICAgICAgICAgICAgOiBudWxsO1xuICAgIH07XG4gICAgU3VydmV5VHJpZ2dlci5wcm90b3R5cGUuaXNSZWFsRXhlY3V0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICAgIFN1cnZleVRyaWdnZXIucHJvdG90eXBlLm9uU3VjY2Vzc0V4ZWN1dGVkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoISF0aGlzLm93bmVyICYmIHRoaXMuaXNSZWFsRXhlY3V0aW9uKCkpIHtcbiAgICAgICAgICAgIHRoaXMub3duZXIudHJpZ2dlckV4ZWN1dGVkKHRoaXMpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gU3VydmV5VHJpZ2dlcjtcbn0oVHJpZ2dlcikpO1xuXG4vKipcbiAqIElmIGV4cHJlc3Npb24gcmV0dXJucyB0cnVlLCBpdCBtYWtlcyBxdWVzdGlvbnMvcGFnZXMgdmlzaWJsZS5cbiAqIE9odGVyd2lzZSBpdCBtYWtlcyB0aGVtIGludmlzaWJsZS5cbiAqL1xudmFyIFN1cnZleVRyaWdnZXJWaXNpYmxlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhTdXJ2ZXlUcmlnZ2VyVmlzaWJsZSwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTdXJ2ZXlUcmlnZ2VyVmlzaWJsZSgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMucGFnZXMgPSBbXTtcbiAgICAgICAgX3RoaXMucXVlc3Rpb25zID0gW107XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgU3VydmV5VHJpZ2dlclZpc2libGUucHJvdG90eXBlLmdldFR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBcInZpc2libGV0cmlnZ2VyXCI7XG4gICAgfTtcbiAgICBTdXJ2ZXlUcmlnZ2VyVmlzaWJsZS5wcm90b3R5cGUub25TdWNjZXNzID0gZnVuY3Rpb24gKHZhbHVlcywgcHJvcGVydGllcykge1xuICAgICAgICB0aGlzLm9uVHJpZ2dlcih0aGlzLm9uSXRlbVN1Y2Nlc3MpO1xuICAgIH07XG4gICAgU3VydmV5VHJpZ2dlclZpc2libGUucHJvdG90eXBlLm9uRmFpbHVyZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5vblRyaWdnZXIodGhpcy5vbkl0ZW1GYWlsdXJlKTtcbiAgICB9O1xuICAgIFN1cnZleVRyaWdnZXJWaXNpYmxlLnByb3RvdHlwZS5vblRyaWdnZXIgPSBmdW5jdGlvbiAoZnVuYykge1xuICAgICAgICBpZiAoIXRoaXMub3duZXIpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciBvYmplY3RzID0gdGhpcy5vd25lci5nZXRPYmplY3RzKHRoaXMucGFnZXMsIHRoaXMucXVlc3Rpb25zKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBmdW5jKG9iamVjdHNbaV0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdXJ2ZXlUcmlnZ2VyVmlzaWJsZS5wcm90b3R5cGUub25JdGVtU3VjY2VzcyA9IGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIGl0ZW0udmlzaWJsZSA9IHRydWU7XG4gICAgfTtcbiAgICBTdXJ2ZXlUcmlnZ2VyVmlzaWJsZS5wcm90b3R5cGUub25JdGVtRmFpbHVyZSA9IGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIGl0ZW0udmlzaWJsZSA9IGZhbHNlO1xuICAgIH07XG4gICAgcmV0dXJuIFN1cnZleVRyaWdnZXJWaXNpYmxlO1xufShTdXJ2ZXlUcmlnZ2VyKSk7XG5cbi8qKlxuICogSWYgZXhwcmVzc2lvbiByZXR1cm5zIHRydWUsIGl0IGNvbXBsZXRlcyB0aGUgc3VydmV5LlxuICovXG52YXIgU3VydmV5VHJpZ2dlckNvbXBsZXRlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhTdXJ2ZXlUcmlnZ2VyQ29tcGxldGUsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gU3VydmV5VHJpZ2dlckNvbXBsZXRlKCkge1xuICAgICAgICByZXR1cm4gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICB9XG4gICAgU3VydmV5VHJpZ2dlckNvbXBsZXRlLnByb3RvdHlwZS5nZXRUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gXCJjb21wbGV0ZXRyaWdnZXJcIjtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlUcmlnZ2VyQ29tcGxldGUucHJvdG90eXBlLCBcInJlcXVpcmVWYWxpZFF1ZXN0aW9uXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0cnVlOyB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgU3VydmV5VHJpZ2dlckNvbXBsZXRlLnByb3RvdHlwZS5pc1JlYWxFeGVjdXRpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAhX3NldHRpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bXCJzZXR0aW5nc1wiXS50cmlnZ2Vycy5leGVjdXRlQ29tcGxldGVPblZhbHVlQ2hhbmdlZCA9PT0gdGhpcy5pc0V4ZWN1dGluZ09uTmV4dFBhZ2U7XG4gICAgfTtcbiAgICBTdXJ2ZXlUcmlnZ2VyQ29tcGxldGUucHJvdG90eXBlLm9uU3VjY2VzcyA9IGZ1bmN0aW9uICh2YWx1ZXMsIHByb3BlcnRpZXMpIHtcbiAgICAgICAgaWYgKCF0aGlzLm93bmVyKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAodGhpcy5pc1JlYWxFeGVjdXRpb24oKSkge1xuICAgICAgICAgICAgdGhpcy5vd25lci5zZXRDb21wbGV0ZWQodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm93bmVyLmNhbkJlQ29tcGxldGVkKHRoaXMsIHRydWUpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdXJ2ZXlUcmlnZ2VyQ29tcGxldGUucHJvdG90eXBlLm9uRmFpbHVyZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5vd25lci5jYW5CZUNvbXBsZXRlZCh0aGlzLCBmYWxzZSk7XG4gICAgfTtcbiAgICByZXR1cm4gU3VydmV5VHJpZ2dlckNvbXBsZXRlO1xufShTdXJ2ZXlUcmlnZ2VyKSk7XG5cbi8qKlxuICogSWYgZXhwcmVzc2lvbiByZXR1cm5zIHRydWUsIHRoZSB2YWx1ZSBmcm9tIHByb3BlcnR5ICoqc2V0VmFsdWUqKiB3aWxsIGJlIHNldCB0byAqKnNldFRvTmFtZSoqXG4gKi9cbnZhciBTdXJ2ZXlUcmlnZ2VyU2V0VmFsdWUgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFN1cnZleVRyaWdnZXJTZXRWYWx1ZSwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTdXJ2ZXlUcmlnZ2VyU2V0VmFsdWUoKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIH1cbiAgICBTdXJ2ZXlUcmlnZ2VyU2V0VmFsdWUucHJvdG90eXBlLmdldFR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBcInNldHZhbHVldHJpZ2dlclwiO1xuICAgIH07XG4gICAgU3VydmV5VHJpZ2dlclNldFZhbHVlLnByb3RvdHlwZS5jYW5CZUV4ZWN1dGVkID0gZnVuY3Rpb24gKGlzT25OZXh0UGFnZSkge1xuICAgICAgICByZXR1cm4gIWlzT25OZXh0UGFnZSAmJiAhIXRoaXMuc2V0VG9OYW1lO1xuICAgIH07XG4gICAgU3VydmV5VHJpZ2dlclNldFZhbHVlLnByb3RvdHlwZS5vblByb3BlcnR5VmFsdWVDaGFuZ2VkID0gZnVuY3Rpb24gKG5hbWUsIG9sZFZhbHVlLCBuZXdWYWx1ZSkge1xuICAgICAgICBfc3VwZXIucHJvdG90eXBlLm9uUHJvcGVydHlWYWx1ZUNoYW5nZWQuY2FsbCh0aGlzLCBuYW1lLCBvbGRWYWx1ZSwgbmV3VmFsdWUpO1xuICAgICAgICBpZiAobmFtZSAhPT0gXCJzZXRUb05hbWVcIilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIHN1cnZleSA9IHRoaXMuZ2V0U3VydmV5KCk7XG4gICAgICAgIGlmIChzdXJ2ZXkgJiYgIXN1cnZleS5pc0xvYWRpbmdGcm9tSnNvbiAmJiBzdXJ2ZXkuaXNEZXNpZ25Nb2RlKSB7XG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5VHJpZ2dlclNldFZhbHVlLnByb3RvdHlwZSwgXCJzZXRUb05hbWVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzZXRUb05hbWVcIiwgXCJcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwic2V0VG9OYW1lXCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5VHJpZ2dlclNldFZhbHVlLnByb3RvdHlwZSwgXCJzZXRWYWx1ZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInNldFZhbHVlXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInNldFZhbHVlXCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5VHJpZ2dlclNldFZhbHVlLnByb3RvdHlwZSwgXCJpc1ZhcmlhYmxlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaXNWYXJpYWJsZVwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpc1ZhcmlhYmxlXCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBTdXJ2ZXlUcmlnZ2VyU2V0VmFsdWUucHJvdG90eXBlLm9uU3VjY2VzcyA9IGZ1bmN0aW9uICh2YWx1ZXMsIHByb3BlcnRpZXMpIHtcbiAgICAgICAgaWYgKCF0aGlzLnNldFRvTmFtZSB8fCAhdGhpcy5vd25lcilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5vd25lci5zZXRUcmlnZ2VyVmFsdWUodGhpcy5zZXRUb05hbWUsIHRoaXMuc2V0VmFsdWUsIHRoaXMuaXNWYXJpYWJsZSk7XG4gICAgfTtcbiAgICByZXR1cm4gU3VydmV5VHJpZ2dlclNldFZhbHVlO1xufShTdXJ2ZXlUcmlnZ2VyKSk7XG5cbi8qKlxuICogSWYgZXhwcmVzc2lvbiByZXR1cm5zIHRydWUsIHRoZSBzdXJ2ZXkgZ28gdG8gcXVlc3Rpb24gKipnb3RvTmFtZSoqIGFuZCBmb2N1cyBpdC5cbiAqL1xudmFyIFN1cnZleVRyaWdnZXJTa2lwID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhTdXJ2ZXlUcmlnZ2VyU2tpcCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTdXJ2ZXlUcmlnZ2VyU2tpcCgpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgfVxuICAgIFN1cnZleVRyaWdnZXJTa2lwLnByb3RvdHlwZS5nZXRUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gXCJza2lwdHJpZ2dlclwiO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleVRyaWdnZXJTa2lwLnByb3RvdHlwZSwgXCJyZXF1aXJlVmFsaWRRdWVzdGlvblwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5jYW5CZUV4ZWN1dGVkKGZhbHNlKTsgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlUcmlnZ2VyU2tpcC5wcm90b3R5cGUsIFwiZ290b05hbWVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJnb3RvTmFtZVwiLCBcIlwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJnb3RvTmFtZVwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgU3VydmV5VHJpZ2dlclNraXAucHJvdG90eXBlLmNhbkJlRXhlY3V0ZWQgPSBmdW5jdGlvbiAoaXNPbk5leHRQYWdlKSB7XG4gICAgICAgIHJldHVybiBpc09uTmV4dFBhZ2UgPT09ICFfc2V0dGluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1tcInNldHRpbmdzXCJdLnRyaWdnZXJzLmV4ZWN1dGVTa2lwT25WYWx1ZUNoYW5nZWQ7XG4gICAgfTtcbiAgICBTdXJ2ZXlUcmlnZ2VyU2tpcC5wcm90b3R5cGUub25TdWNjZXNzID0gZnVuY3Rpb24gKHZhbHVlcywgcHJvcGVydGllcykge1xuICAgICAgICBpZiAoIXRoaXMuZ290b05hbWUgfHwgIXRoaXMub3duZXIpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMub3duZXIuZm9jdXNRdWVzdGlvbih0aGlzLmdvdG9OYW1lKTtcbiAgICB9O1xuICAgIHJldHVybiBTdXJ2ZXlUcmlnZ2VyU2tpcDtcbn0oU3VydmV5VHJpZ2dlcikpO1xuXG4vKipcbiAqIElmIGV4cHJlc3Npb24gcmV0dXJucyB0cnVlLCB0aGUgKipydW5FeHByZXNzaW9uKiogd2lsbCBiZSBydW4uIElmICoqc2V0VG9OYW1lKiogcHJvcGVydHkgaXMgbm90IGVtcHR5IHRoZW4gdGhlIHJlc3VsdCBvZiAqKnJ1bkV4cHJlc3Npb24qKiB3aWxsIGJlIHNldCB0byBpdC5cbiAqL1xudmFyIFN1cnZleVRyaWdnZXJSdW5FeHByZXNzaW9uID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhTdXJ2ZXlUcmlnZ2VyUnVuRXhwcmVzc2lvbiwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTdXJ2ZXlUcmlnZ2VyUnVuRXhwcmVzc2lvbigpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgfVxuICAgIFN1cnZleVRyaWdnZXJSdW5FeHByZXNzaW9uLnByb3RvdHlwZS5nZXRUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gXCJydW5leHByZXNzaW9udHJpZ2dlclwiO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleVRyaWdnZXJSdW5FeHByZXNzaW9uLnByb3RvdHlwZSwgXCJzZXRUb05hbWVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzZXRUb05hbWVcIiwgXCJcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwic2V0VG9OYW1lXCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5VHJpZ2dlclJ1bkV4cHJlc3Npb24ucHJvdG90eXBlLCBcInJ1bkV4cHJlc3Npb25cIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJydW5FeHByZXNzaW9uXCIsIFwiXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInJ1bkV4cHJlc3Npb25cIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFN1cnZleVRyaWdnZXJSdW5FeHByZXNzaW9uLnByb3RvdHlwZS5vblN1Y2Nlc3MgPSBmdW5jdGlvbiAodmFsdWVzLCBwcm9wZXJ0aWVzKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGlmICghdGhpcy5vd25lciB8fCAhdGhpcy5ydW5FeHByZXNzaW9uKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIgZXhwcmVzc2lvbiA9IG5ldyBfY29uZGl0aW9uc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1wiRXhwcmVzc2lvblJ1bm5lclwiXSh0aGlzLnJ1bkV4cHJlc3Npb24pO1xuICAgICAgICBpZiAoZXhwcmVzc2lvbi5jYW5SdW4pIHtcbiAgICAgICAgICAgIGV4cHJlc3Npb24ub25SdW5Db21wbGV0ZSA9IGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5vbkNvbXBsZXRlUnVuRXhwcmVzc2lvbihyZXMpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGV4cHJlc3Npb24ucnVuKHZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1cnZleVRyaWdnZXJSdW5FeHByZXNzaW9uLnByb3RvdHlwZS5vbkNvbXBsZXRlUnVuRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChuZXdWYWx1ZSkge1xuICAgICAgICBpZiAoISF0aGlzLnNldFRvTmFtZSAmJiBuZXdWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLm93bmVyLnNldFRyaWdnZXJWYWx1ZSh0aGlzLnNldFRvTmFtZSwgX2hlbHBlcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkhlbHBlcnNcIl0uY29udmVydFZhbFRvUXVlc3Rpb25WYWwobmV3VmFsdWUpLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBTdXJ2ZXlUcmlnZ2VyUnVuRXhwcmVzc2lvbjtcbn0oU3VydmV5VHJpZ2dlcikpO1xuXG4vKipcbiAqIElmIGV4cHJlc3Npb24gcmV0dXJucyB0cnVlLCB0aGUgdmFsdWUgZnJvbSBxdWVzdGlvbiAqKmZyb21OYW1lKiogd2lsbCBiZSBzZXQgaW50byAqKnNldFRvTmFtZSoqLlxuICovXG52YXIgU3VydmV5VHJpZ2dlckNvcHlWYWx1ZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoU3VydmV5VHJpZ2dlckNvcHlWYWx1ZSwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTdXJ2ZXlUcmlnZ2VyQ29weVZhbHVlKCkge1xuICAgICAgICByZXR1cm4gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICB9XG4gICAgU3VydmV5VHJpZ2dlckNvcHlWYWx1ZS5wcm90b3R5cGUuY2FuQmVFeGVjdXRlZCA9IGZ1bmN0aW9uIChpc09uTmV4dFBhZ2UpIHtcbiAgICAgICAgcmV0dXJuICFpc09uTmV4dFBhZ2UgJiYgISF0aGlzLnNldFRvTmFtZSAmJiAhIXRoaXMuZnJvbU5hbWU7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5VHJpZ2dlckNvcHlWYWx1ZS5wcm90b3R5cGUsIFwic2V0VG9OYW1lXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic2V0VG9OYW1lXCIsIFwiXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInNldFRvTmFtZVwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleVRyaWdnZXJDb3B5VmFsdWUucHJvdG90eXBlLCBcImZyb21OYW1lXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiZnJvbU5hbWVcIiwgXCJcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiZnJvbU5hbWVcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdXJ2ZXlUcmlnZ2VyQ29weVZhbHVlLnByb3RvdHlwZSwgXCJjb3B5RGlzcGxheVZhbHVlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY29weURpc3BsYXlWYWx1ZVwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjb3B5RGlzcGxheVZhbHVlXCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBTdXJ2ZXlUcmlnZ2VyQ29weVZhbHVlLnByb3RvdHlwZS5nZXRUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gXCJjb3B5dmFsdWV0cmlnZ2VyXCI7XG4gICAgfTtcbiAgICBTdXJ2ZXlUcmlnZ2VyQ29weVZhbHVlLnByb3RvdHlwZS5vblN1Y2Nlc3MgPSBmdW5jdGlvbiAodmFsdWVzLCBwcm9wZXJ0aWVzKSB7XG4gICAgICAgIGlmICghdGhpcy5zZXRUb05hbWUgfHwgIXRoaXMub3duZXIpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMub3duZXIuY29weVRyaWdnZXJWYWx1ZSh0aGlzLnNldFRvTmFtZSwgdGhpcy5mcm9tTmFtZSwgdGhpcy5jb3B5RGlzcGxheVZhbHVlKTtcbiAgICB9O1xuICAgIHJldHVybiBTdXJ2ZXlUcmlnZ2VyQ29weVZhbHVlO1xufShTdXJ2ZXlUcmlnZ2VyKSk7XG5cbl9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJTZXJpYWxpemVyXCJdLmFkZENsYXNzKFwidHJpZ2dlclwiLCBbXG4gICAgeyBuYW1lOiBcIm9wZXJhdG9yXCIsIGRlZmF1bHQ6IFwiZXF1YWxcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwidmFsdWVcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICBcImV4cHJlc3Npb246Y29uZGl0aW9uXCIsXG5dKTtcbl9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJTZXJpYWxpemVyXCJdLmFkZENsYXNzKFwic3VydmV5dHJpZ2dlclwiLCBbeyBuYW1lOiBcIm5hbWVcIiwgdmlzaWJsZTogZmFsc2UgfV0sIG51bGwsIFwidHJpZ2dlclwiKTtcbl9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJTZXJpYWxpemVyXCJdLmFkZENsYXNzKFwidmlzaWJsZXRyaWdnZXJcIiwgW1wicGFnZXM6cGFnZXNcIiwgXCJxdWVzdGlvbnM6cXVlc3Rpb25zXCJdLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBTdXJ2ZXlUcmlnZ2VyVmlzaWJsZSgpO1xufSwgXCJzdXJ2ZXl0cmlnZ2VyXCIpO1xuX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIlNlcmlhbGl6ZXJcIl0uYWRkQ2xhc3MoXCJjb21wbGV0ZXRyaWdnZXJcIiwgW10sIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbmV3IFN1cnZleVRyaWdnZXJDb21wbGV0ZSgpO1xufSwgXCJzdXJ2ZXl0cmlnZ2VyXCIpO1xuX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIlNlcmlhbGl6ZXJcIl0uYWRkQ2xhc3MoXCJzZXR2YWx1ZXRyaWdnZXJcIiwgW1xuICAgIHsgbmFtZTogXCIhc2V0VG9OYW1lOnF1ZXN0aW9udmFsdWVcIiB9LFxuICAgIHtcbiAgICAgICAgbmFtZTogXCJzZXRWYWx1ZTp0cmlnZ2VydmFsdWVcIixcbiAgICAgICAgZGVwZW5kc09uOiBcInNldFRvTmFtZVwiLFxuICAgICAgICB2aXNpYmxlSWY6IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgIHJldHVybiAhIW9iaiAmJiAhIW9ialtcInNldFRvTmFtZVwiXTtcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHsgbmFtZTogXCJpc1ZhcmlhYmxlOmJvb2xlYW5cIiwgdmlzaWJsZTogZmFsc2UgfSxcbl0sIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbmV3IFN1cnZleVRyaWdnZXJTZXRWYWx1ZSgpO1xufSwgXCJzdXJ2ZXl0cmlnZ2VyXCIpO1xuX2pzb25vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcIlNlcmlhbGl6ZXJcIl0uYWRkQ2xhc3MoXCJjb3B5dmFsdWV0cmlnZ2VyXCIsIFt7IG5hbWU6IFwiIWZyb21OYW1lOnF1ZXN0aW9udmFsdWVcIiB9LCB7IG5hbWU6IFwiIXNldFRvTmFtZTpxdWVzdGlvbnZhbHVlXCIgfSxcbiAgICB7IG5hbWU6IFwiY29weURpc3BsYXlWYWx1ZTpib29sZWFuXCIsIHZpc2libGU6IGZhbHNlIH1dLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBTdXJ2ZXlUcmlnZ2VyQ29weVZhbHVlKCk7XG59LCBcInN1cnZleXRyaWdnZXJcIik7XG5fanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiU2VyaWFsaXplclwiXS5hZGRDbGFzcyhcInNraXB0cmlnZ2VyXCIsIFt7IG5hbWU6IFwiIWdvdG9OYW1lOnF1ZXN0aW9uXCIgfV0sIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbmV3IFN1cnZleVRyaWdnZXJTa2lwKCk7XG59LCBcInN1cnZleXRyaWdnZXJcIik7XG5fanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiU2VyaWFsaXplclwiXS5hZGRDbGFzcyhcInJ1bmV4cHJlc3Npb250cmlnZ2VyXCIsIFt7IG5hbWU6IFwic2V0VG9OYW1lOnF1ZXN0aW9udmFsdWVcIiB9LCBcInJ1bkV4cHJlc3Npb246ZXhwcmVzc2lvblwiXSwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgU3VydmV5VHJpZ2dlclJ1bkV4cHJlc3Npb24oKTtcbn0sIFwic3VydmV5dHJpZ2dlclwiKTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy91dGlscy9jYW1lcmEudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3V0aWxzL2NhbWVyYS50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogQ2FtZXJhICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkNhbWVyYVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIENhbWVyYTsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHN1cnZleS1jb3JlICovIFwiLi9zcmMvZW50cmllcy9jb3JlLnRzXCIpO1xuXG52YXIgQ2FtZXJhID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIENhbWVyYSgpIHtcbiAgICAgICAgdGhpcy5jYW5GbGlwVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIENhbWVyYS5jbGVhciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgQ2FtZXJhLmNhbWVyYUxpc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIENhbWVyYS5jYW1lcmFJbmRleCA9IC0xO1xuICAgIH07XG4gICAgQ2FtZXJhLnNldENhbWVyYUxpc3QgPSBmdW5jdGlvbiAobGlzdCkge1xuICAgICAgICB2YXIgZ2V0RGV2aWNlVHlwZSA9IGZ1bmN0aW9uIChkZXZpY2UpIHtcbiAgICAgICAgICAgIHZhciBsYmwgPSBkZXZpY2UubGFiZWwudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgIGlmIChsYmwuaW5kZXhPZihcInVzZXJcIikgPiAtMSlcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJ1c2VyXCI7XG4gICAgICAgICAgICBpZiAobGJsLmluZGV4T2YoXCJlbnZpcm9tZW50XCIpID4gLTEpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiZW52aXJvbWVudFwiO1xuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIH07XG4gICAgICAgIENhbWVyYS5jbGVhcigpO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShsaXN0KSAmJiBsaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIENhbWVyYS5jYW1lcmFJbmRleCA9IC0xO1xuICAgICAgICAgICAgbGlzdC5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgaWYgKGEgPT09IGIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgICAgIGlmIChhLmxhYmVsICE9PSBiLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBsYmxBID0gZ2V0RGV2aWNlVHlwZShhKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxibEIgPSBnZXREZXZpY2VUeXBlKGIpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobGJsQSAhPT0gbGJsQikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxibEEgPT09IFwidXNlclwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYmxCID09PSBcInVzZXJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYmxBID09PSBcImVudmlyb21lbnRcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobGJsQiA9PT0gXCJlbnZpcm9tZW50XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIGlBID0gbGlzdC5pbmRleE9mKGEpO1xuICAgICAgICAgICAgICAgIHZhciBpQiA9IGxpc3QuaW5kZXhPZihiKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaUEgPCBpQiA/IC0xIDogMTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIENhbWVyYS5jYW1lcmFMaXN0ID0gbGlzdDtcbiAgICB9O1xuICAgIENhbWVyYS5wcm90b3R5cGUuaGFzQ2FtZXJhID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGlmIChDYW1lcmEuY2FtZXJhTGlzdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmhhc0NhbWVyYUNhbGxiYWNrKGNhbGxiYWNrKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoQ2FtZXJhLm1lZGlhRGV2aWNlc0NhbGxiYWNrKSB7XG4gICAgICAgICAgICB2YXIgZGV2aWNlc0NhbGxiYWNrID0gZnVuY3Rpb24gKGRldmljZXMpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5zZXRWaWRlb0lucHV0cyhkZXZpY2VzKTtcbiAgICAgICAgICAgICAgICBfdGhpcy5oYXNDYW1lcmFDYWxsYmFjayhjYWxsYmFjayk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgQ2FtZXJhLm1lZGlhRGV2aWNlc0NhbGxiYWNrKGRldmljZXNDYWxsYmFjayk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBuYXZpZ2F0b3IgIT09IFwidW5kZWZpbmVkXCIgJiYgbmF2aWdhdG9yLm1lZGlhRGV2aWNlcykge1xuICAgICAgICAgICAgbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5lbnVtZXJhdGVEZXZpY2VzKClcbiAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoZGV2aWNlcykge1xuICAgICAgICAgICAgICAgIF90aGlzLnNldFZpZGVvSW5wdXRzKGRldmljZXMpO1xuICAgICAgICAgICAgICAgIF90aGlzLmhhc0NhbWVyYUNhbGxiYWNrKGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICBfdGhpcy51cGRhdGVDYW5GbGlwVmFsdWUoKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgICAgIENhbWVyYS5jYW1lcmFMaXN0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICBfdGhpcy5oYXNDYW1lcmFDYWxsYmFjayhjYWxsYmFjayk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIENhbWVyYS5jYW1lcmFMaXN0ID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuaGFzQ2FtZXJhQ2FsbGJhY2soY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBDYW1lcmEucHJvdG90eXBlLmdldE1lZGlhQ29uc3RyYWludHMgPSBmdW5jdGlvbiAodmlkZW9FbCkge1xuICAgICAgICB2YXIgZGV2aWNlcyA9IENhbWVyYS5jYW1lcmFMaXN0O1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZGV2aWNlcykgfHwgZGV2aWNlcy5sZW5ndGggPCAxKVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKENhbWVyYS5jYW1lcmFJbmRleCA8IDApXG4gICAgICAgICAgICBDYW1lcmEuY2FtZXJhSW5kZXggPSAwO1xuICAgICAgICB2YXIgc2VsRGV2aWNlID0gZGV2aWNlc1tDYW1lcmEuY2FtZXJhSW5kZXhdO1xuICAgICAgICB2YXIgdmlkZW9Db25zdHJhaW50cyA9IHt9O1xuICAgICAgICBpZiAoc2VsRGV2aWNlICYmIHNlbERldmljZS5kZXZpY2VJZCkge1xuICAgICAgICAgICAgdmlkZW9Db25zdHJhaW50cy5kZXZpY2VJZCA9IHsgZXhhY3Q6IHNlbERldmljZS5kZXZpY2VJZCB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmlkZW9Db25zdHJhaW50cy5mYWNpbmdNb2RlID0gQ2FtZXJhLmNhbWVyYUZhY2luZ01vZGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZpZGVvRWwpIHtcbiAgICAgICAgICAgIHZpZGVvQ29uc3RyYWludHMud2lkdGggPSB7IGV4YWN0OiB2aWRlb0VsLndpZHRoID8gdmlkZW9FbC53aWR0aCA6IHZpZGVvRWwuc2Nyb2xsV2lkdGggfTtcbiAgICAgICAgICAgIHZpZGVvQ29uc3RyYWludHMuaGVpZ2h0ID0geyBleGFjdDogdmlkZW9FbC5oZWlnaHQgPyB2aWRlb0VsLmhlaWdodCA6IHZpZGVvRWwuc2Nyb2xsSGVpZ2h0IH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZpZGVvOiB2aWRlb0NvbnN0cmFpbnRzLFxuICAgICAgICAgICAgYXVkaW86IGZhbHNlXG4gICAgICAgIH07XG4gICAgfTtcbiAgICBDYW1lcmEucHJvdG90eXBlLnN0YXJ0VmlkZW8gPSBmdW5jdGlvbiAodmlkZW9FbGVtZW50SWQsIGNhbGxiYWNrLCBpbWFnZVdpZHRoLCBpbWFnZUhlaWdodCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHZhciB2aWRlb0VsID0gKF9hID0gc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInNldHRpbmdzXCJdLmVudmlyb25tZW50LnJvb3QpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5nZXRFbGVtZW50QnlJZCh2aWRlb0VsZW1lbnRJZCk7XG4gICAgICAgIGlmICghdmlkZW9FbCkge1xuICAgICAgICAgICAgY2FsbGJhY2sodW5kZWZpbmVkKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW1hZ2VXaWR0aCkge1xuICAgICAgICAgICAgdmlkZW9FbC53aWR0aCA9IGltYWdlV2lkdGg7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2aWRlb0VsLnN0eWxlLndpZHRoID0gXCIxMDAlXCI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGltYWdlSGVpZ2h0KSB7XG4gICAgICAgICAgICB2aWRlb0VsLmhlaWdodCA9IGltYWdlSGVpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmlkZW9FbC5zdHlsZS5oZWlnaHQgPSBcIjEwMCVcIjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbWVkaWFDb25zdHJhaW50cyA9IHRoaXMuZ2V0TWVkaWFDb25zdHJhaW50cyh2aWRlb0VsKTtcbiAgICAgICAgbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5nZXRVc2VyTWVkaWEobWVkaWFDb25zdHJhaW50cykudGhlbihmdW5jdGlvbiAoc3RyZWFtKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICB2aWRlb0VsLnNyY09iamVjdCA9IHN0cmVhbTtcbiAgICAgICAgICAgIGlmICghKChfYSA9IENhbWVyYS5jYW1lcmFMaXN0W0NhbWVyYS5jYW1lcmFJbmRleF0pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5kZXZpY2VJZCkgJiYgISFzdHJlYW0uZ2V0VHJhY2tzKClbMF0uZ2V0Q2FwYWJpbGl0aWVzKCkuZmFjaW5nTW9kZSkge1xuICAgICAgICAgICAgICAgIENhbWVyYS5jYW5Td2l0Y2hGYWNpbmdNb2RlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBfdGhpcy51cGRhdGVDYW5GbGlwVmFsdWUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZpZGVvRWwucGxheSgpO1xuICAgICAgICAgICAgY2FsbGJhY2soc3RyZWFtKTtcbiAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKHVuZGVmaW5lZCk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgQ2FtZXJhLnByb3RvdHlwZS5zbmFwID0gZnVuY3Rpb24gKHZpZGVvRWxlbWVudElkLCBjYWxsYmFjaykge1xuICAgICAgICBpZiAoXCJ1bmRlZmluZWRcIiA9PT0gdHlwZW9mIGRvY3VtZW50KVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB2YXIgcm9vdCA9IGRvY3VtZW50O1xuICAgICAgICB2YXIgdmlkZW9FbCA9IHJvb3QuZ2V0RWxlbWVudEJ5SWQodmlkZW9FbGVtZW50SWQpO1xuICAgICAgICBpZiAoIXZpZGVvRWwpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHZhciBjYW52YXNFbCA9IHJvb3QuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcbiAgICAgICAgY2FudmFzRWwuaGVpZ2h0ID0gdmlkZW9FbC5zY3JvbGxIZWlnaHQ7XG4gICAgICAgIGNhbnZhc0VsLndpZHRoID0gdmlkZW9FbC5zY3JvbGxXaWR0aDtcbiAgICAgICAgdmFyIGNvbnRleHQgPSBjYW52YXNFbC5nZXRDb250ZXh0KFwiMmRcIik7XG4gICAgICAgIC8qXG4gICAgICAgIGlmKHRoaXMuX2ZhY2luZ01vZGUgPT0gJ3VzZXInKXtcbiAgICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZShjYW52YXNFbC53aWR0aCwgMCk7XG4gICAgICAgICAgY29udGV4dC5zY2FsZSgtMSwgMSk7XG4gICAgICAgIH1cbiAgICAgICAgKi9cbiAgICAgICAgY29udGV4dC5jbGVhclJlY3QoMCwgMCwgY2FudmFzRWwud2lkdGgsIGNhbnZhc0VsLmhlaWdodCk7XG4gICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKHZpZGVvRWwsIDAsIDAsIGNhbnZhc0VsLndpZHRoLCBjYW52YXNFbC5oZWlnaHQpO1xuICAgICAgICBjYW52YXNFbC50b0Jsb2IoY2FsbGJhY2ssIFwiaW1hZ2UvcG5nXCIpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICAgIENhbWVyYS5wcm90b3R5cGUudXBkYXRlQ2FuRmxpcFZhbHVlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgbGlzdCA9IENhbWVyYS5jYW1lcmFMaXN0O1xuICAgICAgICB0aGlzLmNhbkZsaXBWYWx1ZSA9IEFycmF5LmlzQXJyYXkobGlzdCkgJiYgbGlzdC5sZW5ndGggPiAxIHx8IENhbWVyYS5jYW5Td2l0Y2hGYWNpbmdNb2RlO1xuICAgICAgICBpZiAodGhpcy5vbkNhbkZsaXBDaGFuZ2VkQ2FsbGJhY2spXG4gICAgICAgICAgICB0aGlzLm9uQ2FuRmxpcENoYW5nZWRDYWxsYmFjayh0aGlzLmNhbkZsaXBWYWx1ZSk7XG4gICAgfTtcbiAgICBDYW1lcmEucHJvdG90eXBlLmNhbkZsaXAgPSBmdW5jdGlvbiAob25DYW5GbGlwQ2hhbmdlZENhbGxiYWNrKSB7XG4gICAgICAgIGlmICh0aGlzLmNhbkZsaXBWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNhbkZsaXBWYWx1ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvbkNhbkZsaXBDaGFuZ2VkQ2FsbGJhY2spIHtcbiAgICAgICAgICAgIHRoaXMub25DYW5GbGlwQ2hhbmdlZENhbGxiYWNrID0gb25DYW5GbGlwQ2hhbmdlZENhbGxiYWNrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmNhbkZsaXBWYWx1ZTtcbiAgICB9O1xuICAgIENhbWVyYS5wcm90b3R5cGUuZmxpcCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNhbkZsaXAoKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKENhbWVyYS5jYW5Td2l0Y2hGYWNpbmdNb2RlKSB7XG4gICAgICAgICAgICBDYW1lcmEuY2FtZXJhRmFjaW5nTW9kZSA9IENhbWVyYS5jYW1lcmFGYWNpbmdNb2RlID09PSBcInVzZXJcIiA/IFwiZW52aXJvbm1lbnRcIiA6IFwidXNlclwiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKENhbWVyYS5jYW1lcmFJbmRleCA+PSBDYW1lcmEuY2FtZXJhTGlzdC5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICBDYW1lcmEuY2FtZXJhSW5kZXggPSAwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgQ2FtZXJhLmNhbWVyYUluZGV4Kys7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIENhbWVyYS5wcm90b3R5cGUuaGFzQ2FtZXJhQ2FsbGJhY2sgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2soQXJyYXkuaXNBcnJheShDYW1lcmEuY2FtZXJhTGlzdCkpO1xuICAgIH07XG4gICAgQ2FtZXJhLnByb3RvdHlwZS5zZXRWaWRlb0lucHV0cyA9IGZ1bmN0aW9uIChkZXZpY2VzKSB7XG4gICAgICAgIHZhciBsaXN0ID0gW107XG4gICAgICAgIGRldmljZXMuZm9yRWFjaChmdW5jdGlvbiAoZGV2aWNlKSB7XG4gICAgICAgICAgICBpZiAoZGV2aWNlLmtpbmQgPT09IFwidmlkZW9pbnB1dFwiKSB7XG4gICAgICAgICAgICAgICAgbGlzdC5wdXNoKGRldmljZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBDYW1lcmEuc2V0Q2FtZXJhTGlzdChsaXN0Lmxlbmd0aCA+IDAgPyBsaXN0IDogbnVsbCk7XG4gICAgfTtcbiAgICBDYW1lcmEuY2FtZXJhSW5kZXggPSAtMTtcbiAgICBDYW1lcmEuY2FtZXJhRmFjaW5nTW9kZSA9IFwidXNlclwiO1xuICAgIENhbWVyYS5jYW5Td2l0Y2hGYWNpbmdNb2RlID0gZmFsc2U7XG4gICAgcmV0dXJuIENhbWVyYTtcbn0oKSk7XG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy91dGlscy9jc3NDbGFzc0J1aWxkZXIudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3V0aWxzL2Nzc0NsYXNzQnVpbGRlci50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogQ3NzQ2xhc3NCdWlsZGVyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkNzc0NsYXNzQnVpbGRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIENzc0NsYXNzQnVpbGRlcjsgfSk7XG52YXIgQ3NzQ2xhc3NCdWlsZGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIENzc0NsYXNzQnVpbGRlcigpIHtcbiAgICAgICAgdGhpcy5jbGFzc2VzID0gW107XG4gICAgfVxuICAgIENzc0NsYXNzQnVpbGRlci5wcm90b3R5cGUuaXNFbXB0eSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9TdHJpbmcoKSA9PT0gXCJcIjtcbiAgICB9O1xuICAgIENzc0NsYXNzQnVpbGRlci5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24gKHZhbHVlLCBjb25kaXRpb24pIHtcbiAgICAgICAgaWYgKGNvbmRpdGlvbiA9PT0gdm9pZCAwKSB7IGNvbmRpdGlvbiA9IHRydWU7IH1cbiAgICAgICAgaWYgKCEhdmFsdWUgJiYgY29uZGl0aW9uKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS50cmltKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNsYXNzZXMucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBDc3NDbGFzc0J1aWxkZXIucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGFzc2VzLmpvaW4oXCIgXCIpO1xuICAgIH07XG4gICAgcmV0dXJuIENzc0NsYXNzQnVpbGRlcjtcbn0oKSk7XG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy91dGlscy9kZXZpY2VzLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdXRpbHMvZGV2aWNlcy50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IElzTW9iaWxlLCBJc1RvdWNoLCBfc2V0SXNUb3VjaCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJJc01vYmlsZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIElzTW9iaWxlOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJJc1RvdWNoXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gSXNUb3VjaDsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiX3NldElzVG91Y2hcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfc2V0SXNUb3VjaDsgfSk7XG4vLyBpc01vYmlsZVxudmFyIF9pc01vYmlsZSA9IGZhbHNlO1xudmFyIHZlbmRvciA9IG51bGw7XG5pZiAodHlwZW9mIG5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICBuYXZpZ2F0b3IgJiZcbiAgICB3aW5kb3cpIHtcbiAgICB2ZW5kb3IgPSBuYXZpZ2F0b3IudXNlckFnZW50IHx8IG5hdmlnYXRvci52ZW5kb3IgfHwgd2luZG93Lm9wZXJhO1xufVxuKGZ1bmN0aW9uIChhKSB7XG4gICAgaWYgKCFhKVxuICAgICAgICByZXR1cm47XG4gICAgaWYgKChuYXZpZ2F0b3IucGxhdGZvcm0gPT09IFwiTWFjSW50ZWxcIiAmJiBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHMgPiAwKSB8fCBuYXZpZ2F0b3IucGxhdGZvcm0gPT09IFwiaVBhZFwiKSB7XG4gICAgICAgIF9pc01vYmlsZSA9IHRydWU7XG4gICAgfVxuICAgIGVsc2UgaWYgKC8oYW5kcm9pZHxiYlxcZCt8bWVlZ28pLittb2JpbGV8YXZhbnRnb3xiYWRhXFwvfGJsYWNrYmVycnl8YmxhemVyfGNvbXBhbHxlbGFpbmV8ZmVubmVjfGhpcHRvcHxpZW1vYmlsZXxpcChob25lfG9kKXxpcmlzfGtpbmRsZXxsZ2UgfG1hZW1vfG1pZHB8bW1wfG1vYmlsZS4rZmlyZWZveHxuZXRmcm9udHxvcGVyYSBtKG9ifGluKWl8cGFsbSggb3MpP3xwaG9uZXxwKGl4aXxyZSlcXC98cGx1Y2tlcnxwb2NrZXR8cHNwfHNlcmllcyg0fDYpMHxzeW1iaWFufHRyZW98dXBcXC4oYnJvd3NlcnxsaW5rKXx2b2RhZm9uZXx3YXB8d2luZG93cyBjZXx4ZGF8eGlpbm8vaS50ZXN0KGEpIHx8XG4gICAgICAgIC8xMjA3fDYzMTB8NjU5MHwzZ3NvfDR0aHB8NTBbMS02XWl8Nzcwc3w4MDJzfGEgd2F8YWJhY3xhYyhlcnxvb3xzXFwtKXxhaShrb3xybil8YWwoYXZ8Y2F8Y28pfGFtb2l8YW4oZXh8bnl8eXcpfGFwdHV8YXIoY2h8Z28pfGFzKHRlfHVzKXxhdHR3fGF1KGRpfFxcLW18ciB8cyApfGF2YW58YmUoY2t8bGx8bnEpfGJpKGxifHJkKXxibChhY3xheil8YnIoZXx2KXd8YnVtYnxid1xcLShufHUpfGM1NVxcL3xjYXBpfGNjd2F8Y2RtXFwtfGNlbGx8Y2h0bXxjbGRjfGNtZFxcLXxjbyhtcHxuZCl8Y3Jhd3xkYShpdHxsbHxuZyl8ZGJ0ZXxkY1xcLXN8ZGV2aXxkaWNhfGRtb2J8ZG8oY3xwKW98ZHMoMTJ8XFwtZCl8ZWwoNDl8YWkpfGVtKGwyfHVsKXxlcihpY3xrMCl8ZXNsOHxleihbNC03XTB8b3N8d2F8emUpfGZldGN8Zmx5KFxcLXxfKXxnMSB1fGc1NjB8Z2VuZXxnZlxcLTV8Z1xcLW1vfGdvKFxcLnd8b2QpfGdyKGFkfHVuKXxoYWllfGhjaXR8aGRcXC0obXxwfHQpfGhlaVxcLXxoaShwdHx0YSl8aHAoIGl8aXApfGhzXFwtY3xodChjKFxcLXwgfF98YXxnfHB8c3x0KXx0cCl8aHUoYXd8dGMpfGlcXC0oMjB8Z298bWEpfGkyMzB8aWFjKCB8XFwtfFxcLyl8aWJyb3xpZGVhfGlnMDF8aWtvbXxpbTFrfGlubm98aXBhcXxpcmlzfGphKHR8dilhfGpicm98amVtdXxqaWdzfGtkZGl8a2VqaXxrZ3QoIHxcXC8pfGtsb258a3B0IHxrd2NcXC18a3lvKGN8ayl8bGUobm98eGkpfGxnKCBnfFxcLyhrfGx8dSl8NTB8NTR8XFwtW2Etd10pfGxpYnd8bHlueHxtMVxcLXd8bTNnYXxtNTBcXC98bWEodGV8dWl8eG8pfG1jKDAxfDIxfGNhKXxtXFwtY3J8bWUocmN8cmkpfG1pKG84fG9hfHRzKXxtbWVmfG1vKDAxfDAyfGJpfGRlfGRvfHQoXFwtfCB8b3x2KXx6eil8bXQoNTB8cDF8diApfG13YnB8bXl3YXxuMTBbMC0yXXxuMjBbMi0zXXxuMzAoMHwyKXxuNTAoMHwyfDUpfG43KDAoMHwxKXwxMCl8bmUoKGN8bSlcXC18b258dGZ8d2Z8d2d8d3QpfG5vayg2fGkpfG56cGh8bzJpbXxvcCh0aXx3dil8b3Jhbnxvd2cxfHA4MDB8cGFuKGF8ZHx0KXxwZHhnfHBnKDEzfFxcLShbMS04XXxjKSl8cGhpbHxwaXJlfHBsKGF5fHVjKXxwblxcLTJ8cG8oY2t8cnR8c2UpfHByb3h8cHNpb3xwdFxcLWd8cWFcXC1hfHFjKDA3fDEyfDIxfDMyfDYwfFxcLVsyLTddfGlcXC0pfHF0ZWt8cjM4MHxyNjAwfHJha3N8cmltOXxybyh2ZXx6byl8czU1XFwvfHNhKGdlfG1hfG1tfG1zfG55fHZhKXxzYygwMXxoXFwtfG9vfHBcXC0pfHNka1xcL3xzZShjKFxcLXwwfDEpfDQ3fG1jfG5kfHJpKXxzZ2hcXC18c2hhcnxzaWUoXFwtfG0pfHNrXFwtMHxzbCg0NXxpZCl8c20oYWx8YXJ8YjN8aXR8dDUpfHNvKGZ0fG55KXxzcCgwMXxoXFwtfHZcXC18diApfHN5KDAxfG1iKXx0MigxOHw1MCl8dDYoMDB8MTB8MTgpfHRhKGd0fGxrKXx0Y2xcXC18dGRnXFwtfHRlbChpfG0pfHRpbVxcLXx0XFwtbW98dG8ocGx8c2gpfHRzKDcwfG1cXC18bTN8bTUpfHR4XFwtOXx1cChcXC5ifGcxfHNpKXx1dHN0fHY0MDB8djc1MHx2ZXJpfHZpKHJnfHRlKXx2ayg0MHw1WzAtM118XFwtdil8dm00MHx2b2RhfHZ1bGN8dngoNTJ8NTN8NjB8NjF8NzB8ODB8ODF8ODN8ODV8OTgpfHczYyhcXC18ICl8d2ViY3x3aGl0fHdpKGcgfG5jfG53KXx3bWxifHdvbnV8eDcwMHx5YXNcXC18eW91cnx6ZXRvfHp0ZVxcLS9pLnRlc3QoYS5zdWJzdHJpbmcoMCwgNCkpKVxuICAgICAgICBfaXNNb2JpbGUgPSB0cnVlO1xufSkodmVuZG9yKTtcbnZhciBfSVBhZCA9IGZhbHNlO1xudmFyIElzTW9iaWxlID0gX2lzTW9iaWxlIHx8IF9JUGFkO1xuLy8gaXNUb3VjaFxudmFyIF9pc1RvdWNoID0gZmFsc2U7XG5pZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIF9pc1RvdWNoID0gXCJvbnRvdWNoc3RhcnRcIiBpbiB3aW5kb3cgfHwgbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzID4gMDtcbn1cbnZhciBJc1RvdWNoID0gSXNNb2JpbGUgJiYgX2lzVG91Y2g7XG4vL2ZvciB0ZXN0c1xuZnVuY3Rpb24gX3NldElzVG91Y2godmFsKSB7XG4gICAgSXNUb3VjaCA9IHZhbDtcbn1cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy91dGlscy9kcmFnT3JDbGlja0hlbHBlci50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy91dGlscy9kcmFnT3JDbGlja0hlbHBlci50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBEcmFnT3JDbGlja0hlbHBlciAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJEcmFnT3JDbGlja0hlbHBlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIERyYWdPckNsaWNrSGVscGVyOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBzdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgc3VydmV5LWNvcmUgKi8gXCIuL3NyYy9lbnRyaWVzL2NvcmUudHNcIik7XG5cbnZhciBEcmFnT3JDbGlja0hlbHBlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBEcmFnT3JDbGlja0hlbHBlcihkcmFnSGFuZGxlcikge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB0aGlzLmRyYWdIYW5kbGVyID0gZHJhZ0hhbmRsZXI7XG4gICAgICAgIHRoaXMub25Qb2ludGVyVXAgPSBmdW5jdGlvbiAocG9pbnRlclVwRXZlbnQpIHtcbiAgICAgICAgICAgIF90aGlzLmNsZWFyTGlzdGVuZXJzKCk7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMudHJ5VG9TdGFydERyYWcgPSBmdW5jdGlvbiAocG9pbnRlck1vdmVFdmVudCkge1xuICAgICAgICAgICAgX3RoaXMuY3VycmVudFggPSBwb2ludGVyTW92ZUV2ZW50LnBhZ2VYO1xuICAgICAgICAgICAgX3RoaXMuY3VycmVudFkgPSBwb2ludGVyTW92ZUV2ZW50LnBhZ2VZO1xuICAgICAgICAgICAgaWYgKF90aGlzLmlzTWljcm9Nb3ZlbWVudClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBfdGhpcy5jbGVhckxpc3RlbmVycygpO1xuICAgICAgICAgICAgX3RoaXMuZHJhZ0hhbmRsZXIoX3RoaXMucG9pbnRlckRvd25FdmVudCwgX3RoaXMuY3VycmVudFRhcmdldCwgX3RoaXMuaXRlbU1vZGVsKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBEcmFnT3JDbGlja0hlbHBlci5wcm90b3R5cGUub25Qb2ludGVyRG93biA9IGZ1bmN0aW9uIChwb2ludGVyRG93bkV2ZW50LCBpdGVtTW9kZWwpIHtcbiAgICAgICAgaWYgKHN1cnZleV9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJJc1RvdWNoXCJdKSB7XG4gICAgICAgICAgICB0aGlzLmRyYWdIYW5kbGVyKHBvaW50ZXJEb3duRXZlbnQsIHBvaW50ZXJEb3duRXZlbnQuY3VycmVudFRhcmdldCwgaXRlbU1vZGVsKTsgLy9UT0RPIGhhbmRsZSBpbnNpZGUgaW4gdGhlIGxpYnJhcnkncyBkcmFnIGRyb3AgY29yZSwgbmVlZCByZWZhY3RvcmluZ1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucG9pbnRlckRvd25FdmVudCA9IHBvaW50ZXJEb3duRXZlbnQ7XG4gICAgICAgIHRoaXMuY3VycmVudFRhcmdldCA9IHBvaW50ZXJEb3duRXZlbnQuY3VycmVudFRhcmdldDtcbiAgICAgICAgdGhpcy5zdGFydFggPSBwb2ludGVyRG93bkV2ZW50LnBhZ2VYO1xuICAgICAgICB0aGlzLnN0YXJ0WSA9IHBvaW50ZXJEb3duRXZlbnQucGFnZVk7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVybW92ZVwiLCB0aGlzLnRyeVRvU3RhcnREcmFnKTtcbiAgICAgICAgdGhpcy5jdXJyZW50VGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVydXBcIiwgdGhpcy5vblBvaW50ZXJVcCk7XG4gICAgICAgIHRoaXMuaXRlbU1vZGVsID0gaXRlbU1vZGVsO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KERyYWdPckNsaWNrSGVscGVyLnByb3RvdHlwZSwgXCJpc01pY3JvTW92ZW1lbnRcIiwge1xuICAgICAgICAvLyBzZWUgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNjA0MjIwMi9ob3ctdG8tZGlzdGluZ3Vpc2gtbW91c2UtY2xpY2stYW5kLWRyYWdcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgZGVsdGEgPSAxMDtcbiAgICAgICAgICAgIHZhciBkaWZmWCA9IE1hdGguYWJzKHRoaXMuY3VycmVudFggLSB0aGlzLnN0YXJ0WCk7XG4gICAgICAgICAgICB2YXIgZGlmZlkgPSBNYXRoLmFicyh0aGlzLmN1cnJlbnRZIC0gdGhpcy5zdGFydFkpO1xuICAgICAgICAgICAgcmV0dXJuIGRpZmZYIDwgZGVsdGEgJiYgZGlmZlkgPCBkZWx0YTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIERyYWdPckNsaWNrSGVscGVyLnByb3RvdHlwZS5jbGVhckxpc3RlbmVycyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnBvaW50ZXJEb3duRXZlbnQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybW92ZVwiLCB0aGlzLnRyeVRvU3RhcnREcmFnKTtcbiAgICAgICAgdGhpcy5jdXJyZW50VGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVydXBcIiwgdGhpcy5vblBvaW50ZXJVcCk7XG4gICAgfTtcbiAgICByZXR1cm4gRHJhZ09yQ2xpY2tIZWxwZXI7XG59KCkpO1xuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdXRpbHMvcG9wdXAudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdXRpbHMvcG9wdXAudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogUG9wdXBVdGlscyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJQb3B1cFV0aWxzXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUG9wdXBVdGlsczsgfSk7XG52YXIgUG9wdXBVdGlscyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBQb3B1cFV0aWxzKCkge1xuICAgIH1cbiAgICBQb3B1cFV0aWxzLmNhbGN1bGF0ZVBvc2l0aW9uID0gZnVuY3Rpb24gKHRhcmdldFJlY3QsIGhlaWdodCwgd2lkdGgsIHZlcnRpY2FsUG9zaXRpb24sIGhvcml6b250YWxQb3NpdGlvbiwgc2hvd1BvaW50ZXIsIHBvc2l0aW9uTW9kZSkge1xuICAgICAgICBpZiAocG9zaXRpb25Nb2RlID09PSB2b2lkIDApIHsgcG9zaXRpb25Nb2RlID0gXCJmbGV4XCI7IH1cbiAgICAgICAgdmFyIGN1cnJlbnRMZWZ0ID0gdGFyZ2V0UmVjdC5sZWZ0O1xuICAgICAgICB2YXIgY3VycmVudFRvcCA9IHRhcmdldFJlY3QudG9wO1xuICAgICAgICBpZiAocG9zaXRpb25Nb2RlID09PSBcImZsZXhcIikge1xuICAgICAgICAgICAgaWYgKGhvcml6b250YWxQb3NpdGlvbiA9PSBcImNlbnRlclwiKVxuICAgICAgICAgICAgICAgIGN1cnJlbnRMZWZ0ID0gKHRhcmdldFJlY3QubGVmdCArIHRhcmdldFJlY3QucmlnaHQgLSB3aWR0aCkgLyAyO1xuICAgICAgICAgICAgZWxzZSBpZiAoaG9yaXpvbnRhbFBvc2l0aW9uID09IFwibGVmdFwiKVxuICAgICAgICAgICAgICAgIGN1cnJlbnRMZWZ0ID0gdGFyZ2V0UmVjdC5sZWZ0IC0gd2lkdGg7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgY3VycmVudExlZnQgPSB0YXJnZXRSZWN0LnJpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIGlmICh2ZXJ0aWNhbFBvc2l0aW9uID09IFwibWlkZGxlXCIpXG4gICAgICAgICAgICBjdXJyZW50VG9wID0gKHRhcmdldFJlY3QudG9wICsgdGFyZ2V0UmVjdC5ib3R0b20gLSBoZWlnaHQpIC8gMjtcbiAgICAgICAgZWxzZSBpZiAodmVydGljYWxQb3NpdGlvbiA9PSBcInRvcFwiKVxuICAgICAgICAgICAgY3VycmVudFRvcCA9IHRhcmdldFJlY3QudG9wIC0gaGVpZ2h0O1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBjdXJyZW50VG9wID0gdGFyZ2V0UmVjdC5ib3R0b207XG4gICAgICAgIGlmIChzaG93UG9pbnRlcikge1xuICAgICAgICAgICAgaWYgKGhvcml6b250YWxQb3NpdGlvbiAhPSBcImNlbnRlclwiICYmIHZlcnRpY2FsUG9zaXRpb24gIT0gXCJtaWRkbGVcIikge1xuICAgICAgICAgICAgICAgIGlmICh2ZXJ0aWNhbFBvc2l0aW9uID09IFwidG9wXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRvcCA9IGN1cnJlbnRUb3AgKyB0YXJnZXRSZWN0LmhlaWdodDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUb3AgPSBjdXJyZW50VG9wIC0gdGFyZ2V0UmVjdC5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGxlZnQ6IE1hdGgucm91bmQoY3VycmVudExlZnQpLCB0b3A6IE1hdGgucm91bmQoY3VycmVudFRvcCkgfTtcbiAgICB9O1xuICAgIFBvcHVwVXRpbHMuZ2V0Q29ycmVjdGVkVmVydGljYWxEaW1lbnNpb25zID0gZnVuY3Rpb24gKHRvcCwgaGVpZ2h0LCB3aW5kb3dIZWlnaHQpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHsgaGVpZ2h0OiBoZWlnaHQsIHRvcDogdG9wIH07XG4gICAgICAgIGlmICh0b3AgPCAwKSB7XG4gICAgICAgICAgICByZXN1bHQgPSB7IGhlaWdodDogaGVpZ2h0ICsgdG9wLCB0b3A6IDAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChoZWlnaHQgKyB0b3AgPiB3aW5kb3dIZWlnaHQpIHtcbiAgICAgICAgICAgIHZhciBuZXdIZWlnaHQgPSBNYXRoLm1pbihoZWlnaHQsIHdpbmRvd0hlaWdodCAtIHRvcCAtIFBvcHVwVXRpbHMuYm90dG9tSW5kZW50KTtcbiAgICAgICAgICAgIHJlc3VsdCA9IHsgaGVpZ2h0OiBuZXdIZWlnaHQsIHRvcDogdG9wIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICAgIFBvcHVwVXRpbHMudXBkYXRlSG9yaXpvbnRhbERpbWVuc2lvbnMgPSBmdW5jdGlvbiAobGVmdCwgd2lkdGgsIHdpbmRvd1dpZHRoLCBob3Jpem9udGFsUG9zaXRpb24sIHBvc2l0aW9uTW9kZSwgbWFyZ2lucykge1xuICAgICAgICBpZiAocG9zaXRpb25Nb2RlID09PSB2b2lkIDApIHsgcG9zaXRpb25Nb2RlID0gXCJmbGV4XCI7IH1cbiAgICAgICAgaWYgKG1hcmdpbnMgPT09IHZvaWQgMCkgeyBtYXJnaW5zID0geyBsZWZ0OiAwLCByaWdodDogMCB9OyB9XG4gICAgICAgIHdpZHRoICs9IChtYXJnaW5zLmxlZnQgKyBtYXJnaW5zLnJpZ2h0KTtcbiAgICAgICAgdmFyIG5ld1dpZHRoID0gdW5kZWZpbmVkLCBuZXdMZWZ0ID0gbGVmdDtcbiAgICAgICAgaWYgKGhvcml6b250YWxQb3NpdGlvbiA9PT0gXCJjZW50ZXJcIikge1xuICAgICAgICAgICAgaWYgKHBvc2l0aW9uTW9kZSA9PT0gXCJmaXhlZFwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKGxlZnQgKyB3aWR0aCA+IHdpbmRvd1dpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld1dpZHRoID0gd2luZG93V2lkdGggLSBsZWZ0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBuZXdMZWZ0IC09IG1hcmdpbnMubGVmdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChsZWZ0IDwgMCkge1xuICAgICAgICAgICAgICAgICAgICBuZXdMZWZ0ID0gbWFyZ2lucy5sZWZ0O1xuICAgICAgICAgICAgICAgICAgICBuZXdXaWR0aCA9IE1hdGgubWluKHdpZHRoLCB3aW5kb3dXaWR0aCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHdpZHRoICsgbGVmdCA+IHdpbmRvd1dpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld0xlZnQgPSB3aW5kb3dXaWR0aCAtIHdpZHRoO1xuICAgICAgICAgICAgICAgICAgICBuZXdMZWZ0ID0gTWF0aC5tYXgobmV3TGVmdCwgbWFyZ2lucy5sZWZ0KTtcbiAgICAgICAgICAgICAgICAgICAgbmV3V2lkdGggPSBNYXRoLm1pbih3aWR0aCwgd2luZG93V2lkdGgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaG9yaXpvbnRhbFBvc2l0aW9uID09PSBcImxlZnRcIikge1xuICAgICAgICAgICAgaWYgKGxlZnQgPCAwKSB7XG4gICAgICAgICAgICAgICAgbmV3TGVmdCA9IG1hcmdpbnMubGVmdDtcbiAgICAgICAgICAgICAgICBuZXdXaWR0aCA9IE1hdGgubWluKHdpZHRoLCB3aW5kb3dXaWR0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhvcml6b250YWxQb3NpdGlvbiA9PT0gXCJyaWdodFwiKSB7XG4gICAgICAgICAgICBpZiAod2lkdGggKyBsZWZ0ID4gd2luZG93V2lkdGgpIHtcbiAgICAgICAgICAgICAgICBuZXdXaWR0aCA9IHdpbmRvd1dpZHRoIC0gbGVmdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyB3aWR0aDogbmV3V2lkdGggLSBtYXJnaW5zLmxlZnQgLSBtYXJnaW5zLnJpZ2h0LCBsZWZ0OiBuZXdMZWZ0IH07XG4gICAgfTtcbiAgICBQb3B1cFV0aWxzLnVwZGF0ZVZlcnRpY2FsUG9zaXRpb24gPSBmdW5jdGlvbiAodGFyZ2V0UmVjdCwgaGVpZ2h0LCB2ZXJ0aWNhbFBvc2l0aW9uLCBzaG93UG9pbnRlciwgd2luZG93SGVpZ2h0KSB7XG4gICAgICAgIHZhciBkZWx0YVRvcCA9IGhlaWdodCAtICh0YXJnZXRSZWN0LnRvcCArIChzaG93UG9pbnRlciA/IHRhcmdldFJlY3QuaGVpZ2h0IDogMCkpO1xuICAgICAgICB2YXIgZGVsdGFCb3R0b20gPSBoZWlnaHQgK1xuICAgICAgICAgICAgdGFyZ2V0UmVjdC5ib3R0b20gLVxuICAgICAgICAgICAgKHNob3dQb2ludGVyID8gdGFyZ2V0UmVjdC5oZWlnaHQgOiAwKSAtXG4gICAgICAgICAgICB3aW5kb3dIZWlnaHQ7XG4gICAgICAgIGlmIChkZWx0YVRvcCA+IDAgJiYgZGVsdGFCb3R0b20gPD0gMCAmJiB2ZXJ0aWNhbFBvc2l0aW9uID09IFwidG9wXCIpIHtcbiAgICAgICAgICAgIHZlcnRpY2FsUG9zaXRpb24gPSBcImJvdHRvbVwiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRlbHRhQm90dG9tID4gMCAmJlxuICAgICAgICAgICAgZGVsdGFUb3AgPD0gMCAmJlxuICAgICAgICAgICAgdmVydGljYWxQb3NpdGlvbiA9PSBcImJvdHRvbVwiKSB7XG4gICAgICAgICAgICB2ZXJ0aWNhbFBvc2l0aW9uID0gXCJ0b3BcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkZWx0YUJvdHRvbSA+IDAgJiYgZGVsdGFUb3AgPiAwKSB7XG4gICAgICAgICAgICB2ZXJ0aWNhbFBvc2l0aW9uID0gZGVsdGFUb3AgPCBkZWx0YUJvdHRvbSA/IFwidG9wXCIgOiBcImJvdHRvbVwiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2ZXJ0aWNhbFBvc2l0aW9uO1xuICAgIH07XG4gICAgUG9wdXBVdGlscy5jYWxjdWxhdGVQb3B1cERpcmVjdGlvbiA9IGZ1bmN0aW9uICh2ZXJ0aWNhbFBvc2l0aW9uLCBob3Jpem9udGFsUG9zaXRpb24pIHtcbiAgICAgICAgdmFyIHBvcHVwRGlyZWN0aW9uO1xuICAgICAgICBpZiAoaG9yaXpvbnRhbFBvc2l0aW9uID09IFwiY2VudGVyXCIgJiYgdmVydGljYWxQb3NpdGlvbiAhPSBcIm1pZGRsZVwiKSB7XG4gICAgICAgICAgICBwb3B1cERpcmVjdGlvbiA9IHZlcnRpY2FsUG9zaXRpb247XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaG9yaXpvbnRhbFBvc2l0aW9uICE9IFwiY2VudGVyXCIpIHtcbiAgICAgICAgICAgIHBvcHVwRGlyZWN0aW9uID0gaG9yaXpvbnRhbFBvc2l0aW9uO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwb3B1cERpcmVjdGlvbjtcbiAgICB9O1xuICAgIC8vY2FsbGVkIHdoZW4gc2hvd1BvaW50ZXIgIGlzIHRydWVcbiAgICBQb3B1cFV0aWxzLmNhbGN1bGF0ZVBvaW50ZXJUYXJnZXQgPSBmdW5jdGlvbiAodGFyZ2V0UmVjdCwgdG9wLCBsZWZ0LCB2ZXJ0aWNhbFBvc2l0aW9uLCBob3Jpem9udGFsUG9zaXRpb24sIG1hcmdpbkxlZnQsIG1hcmdpblJpZ2h0KSB7XG4gICAgICAgIGlmIChtYXJnaW5MZWZ0ID09PSB2b2lkIDApIHsgbWFyZ2luTGVmdCA9IDA7IH1cbiAgICAgICAgaWYgKG1hcmdpblJpZ2h0ID09PSB2b2lkIDApIHsgbWFyZ2luUmlnaHQgPSAwOyB9XG4gICAgICAgIHZhciB0YXJnZXRQb3MgPSB7fTtcbiAgICAgICAgaWYgKGhvcml6b250YWxQb3NpdGlvbiAhPSBcImNlbnRlclwiKSB7XG4gICAgICAgICAgICB0YXJnZXRQb3MudG9wID0gdGFyZ2V0UmVjdC50b3AgKyB0YXJnZXRSZWN0LmhlaWdodCAvIDI7XG4gICAgICAgICAgICB0YXJnZXRQb3MubGVmdCA9IHRhcmdldFJlY3RbaG9yaXpvbnRhbFBvc2l0aW9uXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh2ZXJ0aWNhbFBvc2l0aW9uICE9IFwibWlkZGxlXCIpIHtcbiAgICAgICAgICAgIHRhcmdldFBvcy50b3AgPSB0YXJnZXRSZWN0W3ZlcnRpY2FsUG9zaXRpb25dO1xuICAgICAgICAgICAgdGFyZ2V0UG9zLmxlZnQgPSB0YXJnZXRSZWN0LmxlZnQgKyB0YXJnZXRSZWN0LndpZHRoIC8gMjtcbiAgICAgICAgfVxuICAgICAgICB0YXJnZXRQb3MubGVmdCA9IE1hdGgucm91bmQodGFyZ2V0UG9zLmxlZnQgLSBsZWZ0KTtcbiAgICAgICAgdGFyZ2V0UG9zLnRvcCA9IE1hdGgucm91bmQodGFyZ2V0UG9zLnRvcCAtIHRvcCk7XG4gICAgICAgIGlmIChob3Jpem9udGFsUG9zaXRpb24gPT0gXCJsZWZ0XCIpIHtcbiAgICAgICAgICAgIHRhcmdldFBvcy5sZWZ0IC09IG1hcmdpbkxlZnQgKyBtYXJnaW5SaWdodDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaG9yaXpvbnRhbFBvc2l0aW9uID09PSBcImNlbnRlclwiKSB7XG4gICAgICAgICAgICB0YXJnZXRQb3MubGVmdCAtPSBtYXJnaW5MZWZ0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0YXJnZXRQb3M7XG4gICAgfTtcbiAgICBQb3B1cFV0aWxzLmJvdHRvbUluZGVudCA9IDE2O1xuICAgIHJldHVybiBQb3B1cFV0aWxzO1xufSgpKTtcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3V0aWxzL3Jlc3BvbnNpdml0eS1tYW5hZ2VyLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3V0aWxzL3Jlc3BvbnNpdml0eS1tYW5hZ2VyLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFJlc3BvbnNpdml0eU1hbmFnZXIsIFZlcnRpY2FsUmVzcG9uc2l2aXR5TWFuYWdlciAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJSZXNwb25zaXZpdHlNYW5hZ2VyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUmVzcG9uc2l2aXR5TWFuYWdlcjsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiVmVydGljYWxSZXNwb25zaXZpdHlNYW5hZ2VyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gVmVydGljYWxSZXNwb25zaXZpdHlNYW5hZ2VyOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdXRpbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vdXRpbHMgKi8gXCIuL3NyYy91dGlscy91dGlscy50c1wiKTtcbnZhciBfX2V4dGVuZHMgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xuXG52YXIgUmVzcG9uc2l2aXR5TWFuYWdlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBSZXNwb25zaXZpdHlNYW5hZ2VyKGNvbnRhaW5lciwgbW9kZWwsIGl0ZW1zU2VsZWN0b3IsIGRvdHNJdGVtU2l6ZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBpZiAoZG90c0l0ZW1TaXplID09PSB2b2lkIDApIHsgZG90c0l0ZW1TaXplID0gbnVsbDsgfVxuICAgICAgICB0aGlzLmNvbnRhaW5lciA9IGNvbnRhaW5lcjtcbiAgICAgICAgdGhpcy5tb2RlbCA9IG1vZGVsO1xuICAgICAgICB0aGlzLml0ZW1zU2VsZWN0b3IgPSBpdGVtc1NlbGVjdG9yO1xuICAgICAgICB0aGlzLmRvdHNJdGVtU2l6ZSA9IGRvdHNJdGVtU2l6ZTtcbiAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5pc0luaXRpYWxpemVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMubWluRGltZW5zaW9uQ29uc3QgPSA1NjtcbiAgICAgICAgdGhpcy5zZXBhcmF0b3JTaXplID0gMTc7XG4gICAgICAgIHRoaXMuc2VwYXJhdG9yQWRkQ29uc3QgPSAxO1xuICAgICAgICB0aGlzLnBhZGRpbmdTaXplQ29uc3QgPSA4O1xuICAgICAgICB0aGlzLmRvdHNTaXplQ29uc3QgPSA0ODtcbiAgICAgICAgdGhpcy5yZWNhbGNNaW5EaW1lbnNpb25Db25zdCA9IHRydWU7XG4gICAgICAgIHRoaXMuZ2V0Q29tcHV0ZWRTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlLmJpbmQod2luZG93KTtcbiAgICAgICAgdGhpcy5tb2RlbC51cGRhdGVDYWxsYmFjayA9IGZ1bmN0aW9uIChpc1Jlc2V0SW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgIGlmIChpc1Jlc2V0SW5pdGlhbGl6ZWQpXG4gICAgICAgICAgICAgICAgX3RoaXMuaXNJbml0aWFsaXplZCA9IGZhbHNlO1xuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IF90aGlzLnByb2Nlc3MoKTsgfSwgMSk7XG4gICAgICAgIH07XG4gICAgICAgIGlmICh0eXBlb2YgUmVzaXplT2JzZXJ2ZXIgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoZnVuY3Rpb24gKGVudHJpZXMpIHtcbiAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMucHJvY2VzcygpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLm9ic2VydmUodGhpcy5jb250YWluZXIucGFyZW50RWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgUmVzcG9uc2l2aXR5TWFuYWdlci5wcm90b3R5cGUuZ2V0RGltZW5zaW9ucyA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzY3JvbGw6IGVsZW1lbnQuc2Nyb2xsV2lkdGgsXG4gICAgICAgICAgICBvZmZzZXQ6IGVsZW1lbnQub2Zmc2V0V2lkdGgsXG4gICAgICAgIH07XG4gICAgfTtcbiAgICBSZXNwb25zaXZpdHlNYW5hZ2VyLnByb3RvdHlwZS5nZXRBdmFpbGFibGVTcGFjZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHN0eWxlID0gdGhpcy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuY29udGFpbmVyKTtcbiAgICAgICAgdmFyIHNwYWNlID0gdGhpcy5jb250YWluZXIub2Zmc2V0V2lkdGg7XG4gICAgICAgIGlmIChzdHlsZS5ib3hTaXppbmcgPT09IFwiYm9yZGVyLWJveFwiKSB7XG4gICAgICAgICAgICBzcGFjZSAtPSBwYXJzZUZsb2F0KHN0eWxlLnBhZGRpbmdMZWZ0KSArIHBhcnNlRmxvYXQoc3R5bGUucGFkZGluZ1JpZ2h0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3BhY2U7XG4gICAgfTtcbiAgICBSZXNwb25zaXZpdHlNYW5hZ2VyLnByb3RvdHlwZS5jYWxjSXRlbVNpemUgPSBmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICByZXR1cm4gaXRlbS5vZmZzZXRXaWR0aDtcbiAgICB9O1xuICAgIFJlc3BvbnNpdml0eU1hbmFnZXIucHJvdG90eXBlLmNhbGNNaW5EaW1lbnNpb24gPSBmdW5jdGlvbiAoY3VycmVudEFjdGlvbikge1xuICAgICAgICB2YXIgbWluRGltZW5zaW9uQ29uc3QgPSB0aGlzLm1pbkRpbWVuc2lvbkNvbnN0O1xuICAgICAgICBpZiAoY3VycmVudEFjdGlvbi5pY29uU2l6ZSAmJiB0aGlzLnJlY2FsY01pbkRpbWVuc2lvbkNvbnN0KSB7XG4gICAgICAgICAgICBtaW5EaW1lbnNpb25Db25zdCA9IDIgKiBjdXJyZW50QWN0aW9uLmljb25TaXplICsgdGhpcy5wYWRkaW5nU2l6ZUNvbnN0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjdXJyZW50QWN0aW9uLmNhblNocmlua1xuICAgICAgICAgICAgPyBtaW5EaW1lbnNpb25Db25zdCArXG4gICAgICAgICAgICAgICAgKGN1cnJlbnRBY3Rpb24ubmVlZFNlcGFyYXRvciA/IHRoaXMuc2VwYXJhdG9yU2l6ZSA6IDApXG4gICAgICAgICAgICA6IGN1cnJlbnRBY3Rpb24ubWF4RGltZW5zaW9uO1xuICAgIH07XG4gICAgUmVzcG9uc2l2aXR5TWFuYWdlci5wcm90b3R5cGUuY2FsY0l0ZW1zU2l6ZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBhY3Rpb25zID0gdGhpcy5tb2RlbC5hY3Rpb25zO1xuICAgICAgICB2YXIgX2l0ZW1zID0gdGhpcy5jb250YWluZXIucXVlcnlTZWxlY3RvckFsbCh0aGlzLml0ZW1zU2VsZWN0b3IpO1xuICAgICAgICAoX2l0ZW1zIHx8IFtdKS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtLCBpbmRleCkge1xuICAgICAgICAgICAgdmFyIGN1cnJlbnRBY3Rpb24gPSBhY3Rpb25zW2luZGV4XTtcbiAgICAgICAgICAgIF90aGlzLmNhbGNBY3Rpb25EaW1lbnNpb25zKGN1cnJlbnRBY3Rpb24sIGl0ZW0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFJlc3BvbnNpdml0eU1hbmFnZXIucHJvdG90eXBlLmNhbGNBY3Rpb25EaW1lbnNpb25zID0gZnVuY3Rpb24gKGN1cnJlbnRBY3Rpb24sIGl0ZW0pIHtcbiAgICAgICAgY3VycmVudEFjdGlvbi5tYXhEaW1lbnNpb24gPSB0aGlzLmNhbGNJdGVtU2l6ZShpdGVtKTtcbiAgICAgICAgY3VycmVudEFjdGlvbi5taW5EaW1lbnNpb24gPSB0aGlzLmNhbGNNaW5EaW1lbnNpb24oY3VycmVudEFjdGlvbik7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUmVzcG9uc2l2aXR5TWFuYWdlci5wcm90b3R5cGUsIFwiaXNDb250YWluZXJWaXNpYmxlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0KF91dGlsc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiaXNDb250YWluZXJWaXNpYmxlXCJdKSh0aGlzLmNvbnRhaW5lcik7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBSZXNwb25zaXZpdHlNYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmICh0aGlzLmlzQ29udGFpbmVyVmlzaWJsZSAmJiAhdGhpcy5tb2RlbC5pc1Jlc3BvbnNpdmVuZXNzRGlzYWJsZWQpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5pc0luaXRpYWxpemVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5zZXRBY3Rpb25zTW9kZShcImxhcmdlXCIpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsY0l0ZW1zU2l6ZXMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmlzSW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGRvdHNJdGVtU2l6ZSA9IHRoaXMuZG90c0l0ZW1TaXplO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmRvdHNJdGVtU2l6ZSkge1xuICAgICAgICAgICAgICAgIHZhciBkb3RzSXRlbUVsZW1lbnQgPSAoX2EgPSB0aGlzLmNvbnRhaW5lcikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnF1ZXJ5U2VsZWN0b3IoXCIuc3YtZG90c1wiKTtcbiAgICAgICAgICAgICAgICBkb3RzSXRlbVNpemUgPSBkb3RzSXRlbUVsZW1lbnQgJiYgdGhpcy5jYWxjSXRlbVNpemUoZG90c0l0ZW1FbGVtZW50KSB8fCB0aGlzLmRvdHNTaXplQ29uc3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm1vZGVsLmZpdCh0aGlzLmdldEF2YWlsYWJsZVNwYWNlKCksIGRvdHNJdGVtU2l6ZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFJlc3BvbnNpdml0eU1hbmFnZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMubW9kZWwudXBkYXRlQ2FsbGJhY2sgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmICghIXRoaXMucmVzaXplT2JzZXJ2ZXIpIHtcbiAgICAgICAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gUmVzcG9uc2l2aXR5TWFuYWdlcjtcbn0oKSk7XG5cbnZhciBWZXJ0aWNhbFJlc3BvbnNpdml0eU1hbmFnZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFZlcnRpY2FsUmVzcG9uc2l2aXR5TWFuYWdlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBWZXJ0aWNhbFJlc3BvbnNpdml0eU1hbmFnZXIoY29udGFpbmVyLCBtb2RlbCwgaXRlbXNTZWxlY3RvciwgZG90c0l0ZW1TaXplLCBtaW5EaW1lbnNpb24pIHtcbiAgICAgICAgaWYgKG1pbkRpbWVuc2lvbiA9PT0gdm9pZCAwKSB7IG1pbkRpbWVuc2lvbiA9IDQwOyB9XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIGNvbnRhaW5lciwgbW9kZWwsIGl0ZW1zU2VsZWN0b3IsIGRvdHNJdGVtU2l6ZSkgfHwgdGhpcztcbiAgICAgICAgX3RoaXMubWluRGltZW5zaW9uQ29uc3QgPSBtaW5EaW1lbnNpb247XG4gICAgICAgIF90aGlzLnJlY2FsY01pbkRpbWVuc2lvbkNvbnN0ID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgVmVydGljYWxSZXNwb25zaXZpdHlNYW5hZ2VyLnByb3RvdHlwZS5nZXREaW1lbnNpb25zID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2Nyb2xsOiB0aGlzLmNvbnRhaW5lci5zY3JvbGxIZWlnaHQsXG4gICAgICAgICAgICBvZmZzZXQ6IHRoaXMuY29udGFpbmVyLm9mZnNldEhlaWdodCxcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIFZlcnRpY2FsUmVzcG9uc2l2aXR5TWFuYWdlci5wcm90b3R5cGUuZ2V0QXZhaWxhYmxlU3BhY2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBzdHlsZSA9IHRoaXMuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmNvbnRhaW5lcik7XG4gICAgICAgIHZhciBzcGFjZSA9IHRoaXMuY29udGFpbmVyLm9mZnNldEhlaWdodDtcbiAgICAgICAgaWYgKHN0eWxlLmJveFNpemluZyA9PT0gXCJib3JkZXItYm94XCIpIHtcbiAgICAgICAgICAgIHNwYWNlIC09IHBhcnNlRmxvYXQoc3R5bGUucGFkZGluZ1RvcCkgKyBwYXJzZUZsb2F0KHN0eWxlLnBhZGRpbmdCb3R0b20pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzcGFjZTtcbiAgICB9O1xuICAgIFZlcnRpY2FsUmVzcG9uc2l2aXR5TWFuYWdlci5wcm90b3R5cGUuY2FsY0l0ZW1TaXplID0gZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0ub2Zmc2V0SGVpZ2h0O1xuICAgIH07XG4gICAgVmVydGljYWxSZXNwb25zaXZpdHlNYW5hZ2VyLnByb3RvdHlwZS5jYWxjQWN0aW9uRGltZW5zaW9ucyA9IGZ1bmN0aW9uIChjdXJyZW50QWN0aW9uLCBpdGVtKSB7XG4gICAgICAgIGN1cnJlbnRBY3Rpb24ubWF4RGltZW5zaW9uID0gdGhpcy5jYWxjSXRlbVNpemUoaXRlbSk7XG4gICAgICAgIGN1cnJlbnRBY3Rpb24ubWluRGltZW5zaW9uID0gdGhpcy5jYWxjSXRlbVNpemUoaXRlbSk7XG4gICAgfTtcbiAgICByZXR1cm4gVmVydGljYWxSZXNwb25zaXZpdHlNYW5hZ2VyO1xufShSZXNwb25zaXZpdHlNYW5hZ2VyKSk7XG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy91dGlscy91dGlscy50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy91dGlscy91dGlscy50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiB1bndyYXAsIGdldFJlbmRlcmVkU2l6ZSwgZ2V0UmVuZGVyZWRTdHlsZVNpemUsIGRvS2V5MkNsaWNrQmx1ciwgZG9LZXkyQ2xpY2tVcCwgZG9LZXkyQ2xpY2tEb3duLCBzYW5pdGl6ZUVkaXRhYmxlQ29udGVudCwgTG9nZ2VyLCBtZXJnZVZhbHVlcywgZ2V0RWxlbWVudFdpZHRoLCBpc0NvbnRhaW5lclZpc2libGUsIGNsYXNzZXNUb1NlbGVjdG9yLCBjb21wYXJlVmVyc2lvbnMsIGNvbmZpcm1BY3Rpb24sIGNvbmZpcm1BY3Rpb25Bc3luYywgZGV0ZWN0SUVPckVkZ2UsIGRldGVjdElFQnJvd3NlciwgbG9hZEZpbGVGcm9tQmFzZTY0LCBpc01vYmlsZSwgaXNTaGFkb3dET00sIGdldEVsZW1lbnQsIGlzRWxlbWVudFZpc2libGUsIGZpbmRTY3JvbGxhYmxlUGFyZW50LCBzY3JvbGxFbGVtZW50QnlDaGlsZElkLCBuYXZpZ2F0ZVRvVXJsLCB3cmFwVXJsRm9yQmFja2dyb3VuZEltYWdlLCBjcmVhdGVTdmcsIGdldEljb25OYW1lRnJvbVByb3h5LCBpbmNyZWFzZUhlaWdodEJ5Q29udGVudCwgZ2V0T3JpZ2luYWxFdmVudCwgcHJldmVudERlZmF1bHRzLCBmaW5kUGFyZW50QnlDbGFzc05hbWVzLCBnZXRGaXJzdFZpc2libGVDaGlsZCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJ1bndyYXBcIiwgZnVuY3Rpb24oKSB7IHJldHVybiB1bndyYXA7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImdldFJlbmRlcmVkU2l6ZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGdldFJlbmRlcmVkU2l6ZTsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiZ2V0UmVuZGVyZWRTdHlsZVNpemVcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBnZXRSZW5kZXJlZFN0eWxlU2l6ZTsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiZG9LZXkyQ2xpY2tCbHVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZG9LZXkyQ2xpY2tCbHVyOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJkb0tleTJDbGlja1VwXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZG9LZXkyQ2xpY2tVcDsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiZG9LZXkyQ2xpY2tEb3duXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZG9LZXkyQ2xpY2tEb3duOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzYW5pdGl6ZUVkaXRhYmxlQ29udGVudFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHNhbml0aXplRWRpdGFibGVDb250ZW50OyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJMb2dnZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBMb2dnZXI7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIm1lcmdlVmFsdWVzXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gbWVyZ2VWYWx1ZXM7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImdldEVsZW1lbnRXaWR0aFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGdldEVsZW1lbnRXaWR0aDsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiaXNDb250YWluZXJWaXNpYmxlXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaXNDb250YWluZXJWaXNpYmxlOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJjbGFzc2VzVG9TZWxlY3RvclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNsYXNzZXNUb1NlbGVjdG9yOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJjb21wYXJlVmVyc2lvbnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjb21wYXJlVmVyc2lvbnM7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImNvbmZpcm1BY3Rpb25cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjb25maXJtQWN0aW9uOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJjb25maXJtQWN0aW9uQXN5bmNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjb25maXJtQWN0aW9uQXN5bmM7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImRldGVjdElFT3JFZGdlXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZGV0ZWN0SUVPckVkZ2U7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImRldGVjdElFQnJvd3NlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGRldGVjdElFQnJvd3NlcjsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwibG9hZEZpbGVGcm9tQmFzZTY0XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gbG9hZEZpbGVGcm9tQmFzZTY0OyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJpc01vYmlsZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGlzTW9iaWxlOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJpc1NoYWRvd0RPTVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGlzU2hhZG93RE9NOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJnZXRFbGVtZW50XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZ2V0RWxlbWVudDsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiaXNFbGVtZW50VmlzaWJsZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGlzRWxlbWVudFZpc2libGU7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImZpbmRTY3JvbGxhYmxlUGFyZW50XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZmluZFNjcm9sbGFibGVQYXJlbnQ7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInNjcm9sbEVsZW1lbnRCeUNoaWxkSWRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzY3JvbGxFbGVtZW50QnlDaGlsZElkOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJuYXZpZ2F0ZVRvVXJsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gbmF2aWdhdGVUb1VybDsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwid3JhcFVybEZvckJhY2tncm91bmRJbWFnZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHdyYXBVcmxGb3JCYWNrZ3JvdW5kSW1hZ2U7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImNyZWF0ZVN2Z1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZVN2ZzsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiZ2V0SWNvbk5hbWVGcm9tUHJveHlcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBnZXRJY29uTmFtZUZyb21Qcm94eTsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiaW5jcmVhc2VIZWlnaHRCeUNvbnRlbnRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBpbmNyZWFzZUhlaWdodEJ5Q29udGVudDsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiZ2V0T3JpZ2luYWxFdmVudFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGdldE9yaWdpbmFsRXZlbnQ7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInByZXZlbnREZWZhdWx0c1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHByZXZlbnREZWZhdWx0czsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiZmluZFBhcmVudEJ5Q2xhc3NOYW1lc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGZpbmRQYXJlbnRCeUNsYXNzTmFtZXM7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImdldEZpcnN0VmlzaWJsZUNoaWxkXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZ2V0Rmlyc3RWaXNpYmxlQ2hpbGQ7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi8uLi9zZXR0aW5ncyAqLyBcIi4vc3JjL3NldHRpbmdzLnRzXCIpO1xuXG5mdW5jdGlvbiBjb21wYXJlVmVyc2lvbnMoYSwgYikge1xuICAgIHZhciByZWdFeFN0cmlwMCA9IC8oXFwuMCspKyQvO1xuICAgIHZhciBzZWdtZW50c0EgPSBhLnJlcGxhY2UocmVnRXhTdHJpcDAsIFwiXCIpLnNwbGl0KFwiLlwiKTtcbiAgICB2YXIgc2VnbWVudHNCID0gYi5yZXBsYWNlKHJlZ0V4U3RyaXAwLCBcIlwiKS5zcGxpdChcIi5cIik7XG4gICAgdmFyIGxlbiA9IE1hdGgubWluKHNlZ21lbnRzQS5sZW5ndGgsIHNlZ21lbnRzQi5sZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgdmFyIGRpZmYgPSBwYXJzZUludChzZWdtZW50c0FbaV0sIDEwKSAtIHBhcnNlSW50KHNlZ21lbnRzQltpXSwgMTApO1xuICAgICAgICBpZiAoZGlmZikge1xuICAgICAgICAgICAgcmV0dXJuIGRpZmY7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHNlZ21lbnRzQS5sZW5ndGggLSBzZWdtZW50c0IubGVuZ3RoO1xufVxuZnVuY3Rpb24gY29uZmlybUFjdGlvbihtZXNzYWdlKSB7XG4gICAgaWYgKCEhX3NldHRpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzZXR0aW5nc1wiXSAmJiAhIV9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic2V0dGluZ3NcIl0uY29uZmlybUFjdGlvbkZ1bmMpXG4gICAgICAgIHJldHVybiBfc2V0dGluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInNldHRpbmdzXCJdLmNvbmZpcm1BY3Rpb25GdW5jKG1lc3NhZ2UpO1xuICAgIHJldHVybiBjb25maXJtKG1lc3NhZ2UpO1xufVxuZnVuY3Rpb24gY29uZmlybUFjdGlvbkFzeW5jKG1lc3NhZ2UsIGZ1bmNPblllcywgZnVuY09uTm8pIHtcbiAgICB2YXIgY2FsbGJhY2tGdW5jID0gZnVuY3Rpb24gKHJlcykge1xuICAgICAgICBpZiAocmVzKVxuICAgICAgICAgICAgZnVuY09uWWVzKCk7XG4gICAgICAgIGVsc2UgaWYgKCEhZnVuY09uTm8pXG4gICAgICAgICAgICBmdW5jT25ObygpO1xuICAgIH07XG4gICAgaWYgKCEhX3NldHRpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzZXR0aW5nc1wiXSAmJiAhIV9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic2V0dGluZ3NcIl0uY29uZmlybUFjdGlvbkFzeW5jKSB7XG4gICAgICAgIGlmIChfc2V0dGluZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInNldHRpbmdzXCJdLmNvbmZpcm1BY3Rpb25Bc3luYyhtZXNzYWdlLCBjYWxsYmFja0Z1bmMpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjYWxsYmFja0Z1bmMoY29uZmlybUFjdGlvbihtZXNzYWdlKSk7XG59XG5mdW5jdGlvbiBkZXRlY3RJRUJyb3dzZXIoKSB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB2YXIgdWEgPSB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudDtcbiAgICB2YXIgb2xkSWUgPSB1YS5pbmRleE9mKFwiTVNJRSBcIik7XG4gICAgdmFyIGVsZXZlbkllID0gdWEuaW5kZXhPZihcIlRyaWRlbnQvXCIpO1xuICAgIHJldHVybiBvbGRJZSA+IC0xIHx8IGVsZXZlbkllID4gLTE7XG59XG5mdW5jdGlvbiBkZXRlY3RJRU9yRWRnZSgpIHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIilcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh0eXBlb2YgZGV0ZWN0SUVPckVkZ2UuaXNJRU9yRWRnZSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICB2YXIgdWEgPSB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudDtcbiAgICAgICAgdmFyIG1zaWUgPSB1YS5pbmRleE9mKFwiTVNJRSBcIik7XG4gICAgICAgIHZhciB0cmlkZW50ID0gdWEuaW5kZXhPZihcIlRyaWRlbnQvXCIpO1xuICAgICAgICB2YXIgZWRnZSA9IHVhLmluZGV4T2YoXCJFZGdlL1wiKTtcbiAgICAgICAgZGV0ZWN0SUVPckVkZ2UuaXNJRU9yRWRnZSA9IGVkZ2UgPiAwIHx8IHRyaWRlbnQgPiAwIHx8IG1zaWUgPiAwO1xuICAgIH1cbiAgICByZXR1cm4gZGV0ZWN0SUVPckVkZ2UuaXNJRU9yRWRnZTtcbn1cbmZ1bmN0aW9uIGxvYWRGaWxlRnJvbUJhc2U2NChiNjREYXRhLCBmaWxlTmFtZSkge1xuICAgIHRyeSB7XG4gICAgICAgIHZhciBieXRlU3RyaW5nID0gYXRvYihiNjREYXRhLnNwbGl0KFwiLFwiKVsxXSk7XG4gICAgICAgIC8vIHNlcGFyYXRlIG91dCB0aGUgbWltZSBjb21wb25lbnRcbiAgICAgICAgdmFyIG1pbWVTdHJpbmcgPSBiNjREYXRhXG4gICAgICAgICAgICAuc3BsaXQoXCIsXCIpWzBdXG4gICAgICAgICAgICAuc3BsaXQoXCI6XCIpWzFdXG4gICAgICAgICAgICAuc3BsaXQoXCI7XCIpWzBdO1xuICAgICAgICAvLyB3cml0ZSB0aGUgYnl0ZXMgb2YgdGhlIHN0cmluZyB0byBhbiBBcnJheUJ1ZmZlclxuICAgICAgICB2YXIgYWIgPSBuZXcgQXJyYXlCdWZmZXIoYnl0ZVN0cmluZy5sZW5ndGgpO1xuICAgICAgICB2YXIgaWEgPSBuZXcgVWludDhBcnJheShhYik7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnl0ZVN0cmluZy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWFbaV0gPSBieXRlU3RyaW5nLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gd3JpdGUgdGhlIEFycmF5QnVmZmVyIHRvIGEgYmxvYiwgYW5kIHlvdSdyZSBkb25lXG4gICAgICAgIHZhciBiYiA9IG5ldyBCbG9iKFthYl0sIHsgdHlwZTogbWltZVN0cmluZyB9KTtcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICAgICAgICAgIHdpbmRvdy5uYXZpZ2F0b3IgJiZcbiAgICAgICAgICAgIHdpbmRvdy5uYXZpZ2F0b3JbXCJtc1NhdmVCbG9iXCJdKSB7XG4gICAgICAgICAgICB3aW5kb3cubmF2aWdhdG9yW1wibXNTYXZlT3JPcGVuQmxvYlwiXShiYiwgZmlsZU5hbWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHsgfVxufVxuZnVuY3Rpb24gaXNNb2JpbGUoKSB7XG4gICAgcmV0dXJuICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cub3JpZW50YXRpb24gIT09IFwidW5kZWZpbmVkXCIpO1xufVxudmFyIGlzU2hhZG93RE9NID0gZnVuY3Rpb24gKHJvb3RFbGVtZW50KSB7XG4gICAgcmV0dXJuICEhcm9vdEVsZW1lbnQgJiYgISEoXCJob3N0XCIgaW4gcm9vdEVsZW1lbnQgJiYgcm9vdEVsZW1lbnQuaG9zdCk7XG59O1xudmFyIGdldEVsZW1lbnQgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgIHZhciByb290ID0gX3NldHRpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzZXR0aW5nc1wiXS5lbnZpcm9ubWVudC5yb290O1xuICAgIHJldHVybiB0eXBlb2YgZWxlbWVudCA9PT0gXCJzdHJpbmdcIiA/IHJvb3QuZ2V0RWxlbWVudEJ5SWQoZWxlbWVudCkgOiBlbGVtZW50O1xufTtcbmZ1bmN0aW9uIGlzRWxlbWVudFZpc2libGUoZWxlbWVudCwgdGhyZXNob2xkKSB7XG4gICAgaWYgKHRocmVzaG9sZCA9PT0gdm9pZCAwKSB7IHRocmVzaG9sZCA9IDA7IH1cbiAgICBpZiAodHlwZW9mIF9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic2V0dGluZ3NcIl0uZW52aXJvbm1lbnQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB2YXIgcm9vdCA9IF9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic2V0dGluZ3NcIl0uZW52aXJvbm1lbnQucm9vdDtcbiAgICB2YXIgY2xpZW50SGVpZ2h0ID0gaXNTaGFkb3dET00ocm9vdClcbiAgICAgICAgPyByb290Lmhvc3QuY2xpZW50SGVpZ2h0XG4gICAgICAgIDogcm9vdC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICAgIHZhciBlbGVtZW50UmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgdmFyIHZpZXdIZWlnaHQgPSBNYXRoLm1heChjbGllbnRIZWlnaHQsIHdpbmRvdy5pbm5lckhlaWdodCk7XG4gICAgdmFyIHRvcFdpbiA9IC10aHJlc2hvbGQ7XG4gICAgdmFyIGJvdHRvbVdpbiA9IHZpZXdIZWlnaHQgKyB0aHJlc2hvbGQ7XG4gICAgdmFyIHRvcEVsID0gZWxlbWVudFJlY3QudG9wO1xuICAgIHZhciBib3R0b21FbCA9IGVsZW1lbnRSZWN0LmJvdHRvbTtcbiAgICB2YXIgbWF4VG9wID0gTWF0aC5tYXgodG9wV2luLCB0b3BFbCk7XG4gICAgdmFyIG1pbkJvdHRvbSA9IE1hdGgubWluKGJvdHRvbVdpbiwgYm90dG9tRWwpO1xuICAgIHJldHVybiBtYXhUb3AgPD0gbWluQm90dG9tO1xufVxuZnVuY3Rpb24gZmluZFNjcm9sbGFibGVQYXJlbnQoZWxlbWVudCkge1xuICAgIHZhciByb290ID0gX3NldHRpbmdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzZXR0aW5nc1wiXS5lbnZpcm9ubWVudC5yb290O1xuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gaXNTaGFkb3dET00ocm9vdClcbiAgICAgICAgICAgID8gcm9vdC5ob3N0XG4gICAgICAgICAgICA6IHJvb3QuZG9jdW1lbnRFbGVtZW50O1xuICAgIH1cbiAgICBpZiAoZWxlbWVudC5zY3JvbGxIZWlnaHQgPiBlbGVtZW50LmNsaWVudEhlaWdodCAmJlxuICAgICAgICAoZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5vdmVyZmxvd1kgPT09IFwic2Nyb2xsXCIgfHxcbiAgICAgICAgICAgIGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkub3ZlcmZsb3dZID09PSBcImF1dG9cIikpIHtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxuICAgIGlmIChlbGVtZW50LnNjcm9sbFdpZHRoID4gZWxlbWVudC5jbGllbnRXaWR0aCAmJlxuICAgICAgICAoZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5vdmVyZmxvd1ggPT09IFwic2Nyb2xsXCIgfHxcbiAgICAgICAgICAgIGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkub3ZlcmZsb3dYID09PSBcImF1dG9cIikpIHtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxuICAgIHJldHVybiBmaW5kU2Nyb2xsYWJsZVBhcmVudChlbGVtZW50LnBhcmVudEVsZW1lbnQpO1xufVxuZnVuY3Rpb24gc2Nyb2xsRWxlbWVudEJ5Q2hpbGRJZChpZCkge1xuICAgIHZhciBlbnZpcm9ubWVudCA9IF9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic2V0dGluZ3NcIl0uZW52aXJvbm1lbnQ7XG4gICAgaWYgKCFlbnZpcm9ubWVudClcbiAgICAgICAgcmV0dXJuO1xuICAgIHZhciByb290ID0gZW52aXJvbm1lbnQucm9vdDtcbiAgICB2YXIgZWwgPSByb290LmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgICBpZiAoIWVsKVxuICAgICAgICByZXR1cm47XG4gICAgdmFyIHNjcm9sbGFibGVFbCA9IGZpbmRTY3JvbGxhYmxlUGFyZW50KGVsKTtcbiAgICBpZiAoISFzY3JvbGxhYmxlRWwpIHtcbiAgICAgICAgc2Nyb2xsYWJsZUVsLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KFwic2Nyb2xsXCIpKTtcbiAgICB9XG59XG5mdW5jdGlvbiBuYXZpZ2F0ZVRvVXJsKHVybCkge1xuICAgIGlmICghdXJsIHx8IHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIgfHwgIXdpbmRvdy5sb2NhdGlvbilcbiAgICAgICAgcmV0dXJuO1xuICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdXJsO1xufVxuZnVuY3Rpb24gd3JhcFVybEZvckJhY2tncm91bmRJbWFnZSh1cmwpIHtcbiAgICByZXR1cm4gISF1cmwgPyBbXCJ1cmwoXCIsIHVybCwgXCIpXCJdLmpvaW4oXCJcIikgOiBcIlwiO1xufVxuZnVuY3Rpb24gZ2V0SWNvbk5hbWVGcm9tUHJveHkoaWNvbk5hbWUpIHtcbiAgICBpZiAoIWljb25OYW1lKVxuICAgICAgICByZXR1cm4gaWNvbk5hbWU7XG4gICAgdmFyIHByb3h5TmFtZSA9IF9zZXR0aW5nc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic2V0dGluZ3NcIl0uY3VzdG9tSWNvbnNbaWNvbk5hbWVdO1xuICAgIHJldHVybiAhIXByb3h5TmFtZSA/IHByb3h5TmFtZSA6IGljb25OYW1lO1xufVxuZnVuY3Rpb24gY3JlYXRlU3ZnKHNpemUsIHdpZHRoLCBoZWlnaHQsIGljb25OYW1lLCBzdmdFbGVtLCB0aXRsZSkge1xuICAgIGlmICghc3ZnRWxlbSlcbiAgICAgICAgcmV0dXJuO1xuICAgIGlmIChzaXplICE9PSBcImF1dG9cIikge1xuICAgICAgICBzdmdFbGVtLnN0eWxlLndpZHRoID0gKHNpemUgfHwgd2lkdGggfHwgMTYpICsgXCJweFwiO1xuICAgICAgICBzdmdFbGVtLnN0eWxlLmhlaWdodCA9IChzaXplIHx8IGhlaWdodCB8fCAxNikgKyBcInB4XCI7XG4gICAgfVxuICAgIHZhciBub2RlID0gc3ZnRWxlbS5jaGlsZE5vZGVzWzBdO1xuICAgIHZhciByZWFsSWNvbk5hbWUgPSBnZXRJY29uTmFtZUZyb21Qcm94eShpY29uTmFtZSk7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGVOUyhcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIiwgXCJ4bGluazpocmVmXCIsIFwiI1wiICsgcmVhbEljb25OYW1lKTtcbiAgICB2YXIgdGl0bGVFbGVtZW50ID0gc3ZnRWxlbS5nZXRFbGVtZW50c0J5VGFnTmFtZShcInRpdGxlXCIpWzBdO1xuICAgIGlmICghdGl0bGUpIHtcbiAgICAgICAgaWYgKCEhdGl0bGVFbGVtZW50KSB7XG4gICAgICAgICAgICBzdmdFbGVtLnJlbW92ZUNoaWxkKHRpdGxlRWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKCF0aXRsZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRpdGxlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIFwidGl0bGVcIik7XG4gICAgICAgICAgICBzdmdFbGVtLmFwcGVuZENoaWxkKHRpdGxlRWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdGl0bGVFbGVtZW50LnRleHRDb250ZW50ID0gdGl0bGU7XG59XG5mdW5jdGlvbiB1bndyYXAodmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlKCk7XG4gICAgfVxufVxuLy8gZXhwb3J0IGZ1bmN0aW9uIGdldFNpemUodmFsdWU6IGFueSk6IG51bWJlciB7XG4vLyAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIpIHtcbi8vICAgICByZXR1cm4gdmFsdWU7XG4vLyAgIH1cbi8vICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiB2YWx1ZS5pbmNsdWRlcyhcInB4XCIpKSB7XG4vLyAgICAgcmV0dXJuIHBhcnNlSW50KHZhbHVlKTtcbi8vICAgfVxuLy8gICBpZiAoISF2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgdmFsdWUubGVuZ3RoID4gMCkge1xuLy8gICAgIGNvbnN0IGxhc3RTeW1ib2w6IHN0cmluZyA9IHZhbHVlW3ZhbHVlLmxlbmd0aCAtIDFdO1xuLy8gICAgIGlmICgobGFzdFN5bWJvbCA+PSBcIjBcIiAmJiBsYXN0U3ltYm9sIDw9IFwiOVwiKSB8fCBsYXN0U3ltYm9sID09IFwiLlwiKSB7XG4vLyAgICAgICB0cnkge1xuLy8gICAgICAgICBjb25zdCBudW06IG51bWJlciA9IHBhcnNlSW50KHZhbHVlKTtcbi8vICAgICAgICAgcmV0dXJuIG51bTtcbi8vICAgICAgIH0gY2F0Y2ggeyB9XG4vLyAgICAgfVxuLy8gICB9XG4vLyAgIHJldHVybiB2YWx1ZTtcbi8vIH1cbmZ1bmN0aW9uIGdldFJlbmRlcmVkU2l6ZSh2YWwpIHtcbiAgICBpZiAodHlwZW9mIHZhbCA9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGlmICghaXNOYU4oTnVtYmVyKHZhbCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gTnVtYmVyKHZhbCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodmFsLmluY2x1ZGVzKFwicHhcIikpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KHZhbCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHR5cGVvZiB2YWwgPT0gXCJudW1iZXJcIikge1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gZ2V0UmVuZGVyZWRTdHlsZVNpemUodmFsKSB7XG4gICAgaWYgKGdldFJlbmRlcmVkU2l6ZSh2YWwpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIHZhbDtcbn1cbnZhciBrZXlGb2N1c2VkQ2xhc3NOYW1lID0gXCJzdi1mb2N1c2VkLS1ieS1rZXlcIjtcbmZ1bmN0aW9uIGRvS2V5MkNsaWNrQmx1cihldnQpIHtcbiAgICB2YXIgZWxlbWVudCA9IGV2dC50YXJnZXQ7XG4gICAgaWYgKCFlbGVtZW50IHx8ICFlbGVtZW50LmNsYXNzTGlzdClcbiAgICAgICAgcmV0dXJuO1xuICAgIGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShrZXlGb2N1c2VkQ2xhc3NOYW1lKTtcbn1cbmZ1bmN0aW9uIGRvS2V5MkNsaWNrVXAoZXZ0LCBvcHRpb25zKSB7XG4gICAgaWYgKCEhZXZ0LnRhcmdldCAmJiBldnQudGFyZ2V0W1wiY29udGVudEVkaXRhYmxlXCJdID09PSBcInRydWVcIikge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBlbGVtZW50ID0gZXZ0LnRhcmdldDtcbiAgICBpZiAoIWVsZW1lbnQpXG4gICAgICAgIHJldHVybjtcbiAgICB2YXIgY2hhciA9IGV2dC53aGljaCB8fCBldnQua2V5Q29kZTtcbiAgICBpZiAoY2hhciA9PT0gOSkge1xuICAgICAgICBpZiAoISFlbGVtZW50LmNsYXNzTGlzdCAmJiAhZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoa2V5Rm9jdXNlZENsYXNzTmFtZSkpIHtcbiAgICAgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChrZXlGb2N1c2VkQ2xhc3NOYW1lKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgIGlmICghb3B0aW9ucy5fX2tleURvd25SZWNlaXZlZClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgb3B0aW9ucy5fX2tleURvd25SZWNlaXZlZCA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAoY2hhciA9PT0gMTMgfHwgY2hhciA9PT0gMzIpIHtcbiAgICAgICAgaWYgKGVsZW1lbnQuY2xpY2spXG4gICAgICAgICAgICBlbGVtZW50LmNsaWNrKCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKCghb3B0aW9ucyB8fCBvcHRpb25zLnByb2Nlc3NFc2MpICYmIGNoYXIgPT09IDI3KSB7XG4gICAgICAgIGlmIChlbGVtZW50LmJsdXIpXG4gICAgICAgICAgICBlbGVtZW50LmJsdXIoKTtcbiAgICB9XG59XG5mdW5jdGlvbiBkb0tleTJDbGlja0Rvd24oZXZ0LCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0geyBwcm9jZXNzRXNjOiB0cnVlIH07IH1cbiAgICBpZiAob3B0aW9ucylcbiAgICAgICAgb3B0aW9ucy5fX2tleURvd25SZWNlaXZlZCA9IHRydWU7XG4gICAgaWYgKCEhZXZ0LnRhcmdldCAmJiBldnQudGFyZ2V0W1wiY29udGVudEVkaXRhYmxlXCJdID09PSBcInRydWVcIikge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBjaGFyID0gZXZ0LndoaWNoIHx8IGV2dC5rZXlDb2RlO1xuICAgIHZhciBzdXBwb3J0ZWRDb2RlcyA9IFsxMywgMzJdO1xuICAgIGlmIChvcHRpb25zLnByb2Nlc3NFc2MpIHtcbiAgICAgICAgc3VwcG9ydGVkQ29kZXMucHVzaCgyNyk7XG4gICAgfVxuICAgIGlmIChzdXBwb3J0ZWRDb2Rlcy5pbmRleE9mKGNoYXIpICE9PSAtMSkge1xuICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG59XG5mdW5jdGlvbiBpbmNyZWFzZUhlaWdodEJ5Q29udGVudChlbGVtZW50LCBnZXRDb21wdXRlZFN0eWxlKSB7XG4gICAgaWYgKCFlbGVtZW50KVxuICAgICAgICByZXR1cm47XG4gICAgaWYgKCFnZXRDb21wdXRlZFN0eWxlKVxuICAgICAgICBnZXRDb21wdXRlZFN0eWxlID0gZnVuY3Rpb24gKGVsdCkgeyByZXR1cm4gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWx0KTsgfTtcbiAgICB2YXIgc3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xuICAgIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gXCJhdXRvXCI7XG4gICAgZWxlbWVudC5zdHlsZS5oZWlnaHQgPSAoZWxlbWVudC5zY3JvbGxIZWlnaHQgKyBwYXJzZUZsb2F0KHN0eWxlLmJvcmRlclRvcFdpZHRoKSArIHBhcnNlRmxvYXQoc3R5bGUuYm9yZGVyQm90dG9tV2lkdGgpKSArIFwicHhcIjtcbn1cbmZ1bmN0aW9uIGdldE9yaWdpbmFsRXZlbnQoZXZlbnQpIHtcbiAgICByZXR1cm4gZXZlbnQub3JpZ2luYWxFdmVudCB8fCBldmVudDtcbn1cbmZ1bmN0aW9uIHByZXZlbnREZWZhdWx0cyhldmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG59XG5mdW5jdGlvbiBjbGFzc2VzVG9TZWxlY3RvcihzdHIpIHtcbiAgICB2YXIgcmUgPSAvXFxzKj8oW1xcdy1dKylcXHMqPy9nO1xuICAgIHJldHVybiBzdHIucmVwbGFjZShyZSwgXCIuJDFcIik7XG59XG5mdW5jdGlvbiBnZXRFbGVtZW50V2lkdGgoZWwpIHtcbiAgICByZXR1cm4gISFnZXRDb21wdXRlZFN0eWxlID8gTnVtYmVyLnBhcnNlRmxvYXQoZ2V0Q29tcHV0ZWRTdHlsZShlbCkud2lkdGgpIDogZWwub2Zmc2V0V2lkdGg7XG59XG5mdW5jdGlvbiBpc0NvbnRhaW5lclZpc2libGUoZWwpIHtcbiAgICByZXR1cm4gISEoZWwub2Zmc2V0V2lkdGggfHxcbiAgICAgICAgZWwub2Zmc2V0SGVpZ2h0IHx8XG4gICAgICAgIGVsLmdldENsaWVudFJlY3RzKCkubGVuZ3RoKTtcbn1cbmZ1bmN0aW9uIGdldEZpcnN0VmlzaWJsZUNoaWxkKGVsKSB7XG4gICAgdmFyIHJlc3VsdDtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgZWwuY2hpbGRyZW4ubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIGlmICghcmVzdWx0ICYmIGdldENvbXB1dGVkU3R5bGUoZWwuY2hpbGRyZW5baW5kZXhdKS5kaXNwbGF5ICE9PSBcIm5vbmVcIikge1xuICAgICAgICAgICAgcmVzdWx0ID0gZWwuY2hpbGRyZW5baW5kZXhdO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBmaW5kUGFyZW50QnlDbGFzc05hbWVzKGVsZW1lbnQsIGNsYXNzTmFtZXMpIHtcbiAgICBpZiAoISFlbGVtZW50KSB7XG4gICAgICAgIGlmIChjbGFzc05hbWVzLmV2ZXJ5KGZ1bmN0aW9uIChjbGFzc05hbWUpIHsgcmV0dXJuICFjbGFzc05hbWUgfHwgZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lKTsgfSkpIHtcbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZpbmRQYXJlbnRCeUNsYXNzTmFtZXMoZWxlbWVudC5wYXJlbnRFbGVtZW50LCBjbGFzc05hbWVzKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIHNhbml0aXplRWRpdGFibGVDb250ZW50KGVsZW1lbnQpIHtcbiAgICBpZiAod2luZG93LmdldFNlbGVjdGlvbiAmJiBkb2N1bWVudC5jcmVhdGVSYW5nZSAmJiBlbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoID4gMCkge1xuICAgICAgICB2YXIgc2VsZWN0aW9uID0gZG9jdW1lbnQuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICAgIHZhciByYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApO1xuICAgICAgICByYW5nZS5zZXRTdGFydChyYW5nZS5lbmRDb250YWluZXIsIHJhbmdlLmVuZE9mZnNldCk7XG4gICAgICAgIHJhbmdlLnNldEVuZEFmdGVyKGVsZW1lbnQubGFzdENoaWxkKTtcbiAgICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpO1xuICAgICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpO1xuICAgICAgICB2YXIgdGFpbF9sZW4gPSBzZWxlY3Rpb24udG9TdHJpbmcoKS5yZXBsYWNlKC9cXG4vZywgXCJcIikubGVuZ3RoO1xuICAgICAgICBlbGVtZW50LmlubmVyVGV4dCA9IGVsZW1lbnQuaW5uZXJUZXh0LnJlcGxhY2UoL1xcbi9nLCBcIlwiKTtcbiAgICAgICAgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICAgICAgICByYW5nZS5zZXRTdGFydChlbGVtZW50LmNoaWxkTm9kZXNbMF0sIGVsZW1lbnQuaW5uZXJUZXh0Lmxlbmd0aCAtIHRhaWxfbGVuKTtcbiAgICAgICAgcmFuZ2UuY29sbGFwc2UodHJ1ZSk7XG4gICAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlKTtcbiAgICB9XG59XG5mdW5jdGlvbiBtZXJnZVZhbHVlcyhzcmMsIGRlc3QpIHtcbiAgICBpZiAoIWRlc3QgfHwgIXNyYylcbiAgICAgICAgcmV0dXJuO1xuICAgIGlmICh0eXBlb2YgZGVzdCAhPT0gXCJvYmplY3RcIilcbiAgICAgICAgcmV0dXJuO1xuICAgIGZvciAodmFyIGtleSBpbiBzcmMpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gc3JjW2tleV07XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICBpZiAoIWRlc3Rba2V5XSB8fCB0eXBlb2YgZGVzdFtrZXldICE9PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgIGRlc3Rba2V5XSA9IHt9O1xuICAgICAgICAgICAgbWVyZ2VWYWx1ZXModmFsdWUsIGRlc3Rba2V5XSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBkZXN0W2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn1cbnZhciBMb2dnZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gTG9nZ2VyKCkge1xuICAgICAgICB0aGlzLl9yZXN1bHQgPSBcIlwiO1xuICAgIH1cbiAgICBMb2dnZXIucHJvdG90eXBlLmxvZyA9IGZ1bmN0aW9uIChhY3Rpb24pIHtcbiAgICAgICAgdGhpcy5fcmVzdWx0ICs9IFwiLT5cIiArIGFjdGlvbjtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShMb2dnZXIucHJvdG90eXBlLCBcInJlc3VsdFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc3VsdDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIHJldHVybiBMb2dnZXI7XG59KCkpO1xuXG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92YWxpZGF0b3IudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3ZhbGlkYXRvci50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogVmFsaWRhdG9yUmVzdWx0LCBTdXJ2ZXlWYWxpZGF0b3IsIFZhbGlkYXRvclJ1bm5lciwgTnVtZXJpY1ZhbGlkYXRvciwgVGV4dFZhbGlkYXRvciwgQW5zd2VyQ291bnRWYWxpZGF0b3IsIFJlZ2V4VmFsaWRhdG9yLCBFbWFpbFZhbGlkYXRvciwgRXhwcmVzc2lvblZhbGlkYXRvciAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJWYWxpZGF0b3JSZXN1bHRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBWYWxpZGF0b3JSZXN1bHQ7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlN1cnZleVZhbGlkYXRvclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFN1cnZleVZhbGlkYXRvcjsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiVmFsaWRhdG9yUnVubmVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gVmFsaWRhdG9yUnVubmVyOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJOdW1lcmljVmFsaWRhdG9yXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gTnVtZXJpY1ZhbGlkYXRvcjsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiVGV4dFZhbGlkYXRvclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFRleHRWYWxpZGF0b3I7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkFuc3dlckNvdW50VmFsaWRhdG9yXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQW5zd2VyQ291bnRWYWxpZGF0b3I7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlJlZ2V4VmFsaWRhdG9yXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUmVnZXhWYWxpZGF0b3I7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkVtYWlsVmFsaWRhdG9yXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRW1haWxWYWxpZGF0b3I7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkV4cHJlc3Npb25WYWxpZGF0b3JcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBFeHByZXNzaW9uVmFsaWRhdG9yOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYmFzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9iYXNlICovIFwiLi9zcmMvYmFzZS50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZXJyb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZXJyb3IgKi8gXCIuL3NyYy9lcnJvci50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9qc29ub2JqZWN0ICovIFwiLi9zcmMvanNvbm9iamVjdC50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfY29uZGl0aW9uc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9jb25kaXRpb25zICovIFwiLi9zcmMvY29uZGl0aW9ucy50c1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfaGVscGVyc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9oZWxwZXJzICovIFwiLi9zcmMvaGVscGVycy50c1wiKTtcbnZhciBfX2V4dGVuZHMgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xuXG5cblxuXG5cbnZhciBWYWxpZGF0b3JSZXN1bHQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gVmFsaWRhdG9yUmVzdWx0KHZhbHVlLCBlcnJvcikge1xuICAgICAgICBpZiAoZXJyb3IgPT09IHZvaWQgMCkgeyBlcnJvciA9IG51bGw7IH1cbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLmVycm9yID0gZXJyb3I7XG4gICAgfVxuICAgIHJldHVybiBWYWxpZGF0b3JSZXN1bHQ7XG59KCkpO1xuXG4vKipcbiAqIEJhc2UgU3VydmV5SlMgdmFsaWRhdG9yIGNsYXNzLlxuICovXG52YXIgU3VydmV5VmFsaWRhdG9yID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhTdXJ2ZXlWYWxpZGF0b3IsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gU3VydmV5VmFsaWRhdG9yKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcInRleHRcIiwgX3RoaXMsIHRydWUpO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFN1cnZleVZhbGlkYXRvci5wcm90b3R5cGUuZ2V0U3VydmV5ID0gZnVuY3Rpb24gKGxpdmUpIHtcbiAgICAgICAgaWYgKGxpdmUgPT09IHZvaWQgMCkgeyBsaXZlID0gZmFsc2U7IH1cbiAgICAgICAgcmV0dXJuICEhdGhpcy5lcnJvck93bmVyICYmICEhdGhpcy5lcnJvck93bmVyW1wiZ2V0U3VydmV5XCJdXG4gICAgICAgICAgICA/IHRoaXMuZXJyb3JPd25lci5nZXRTdXJ2ZXkoKVxuICAgICAgICAgICAgOiBudWxsO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleVZhbGlkYXRvci5wcm90b3R5cGUsIFwidGV4dFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwidGV4dFwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwidGV4dFwiLCB2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5VmFsaWRhdG9yLnByb3RvdHlwZSwgXCJpc1ZhbGlkYXRlQWxsVmFsdWVzXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5VmFsaWRhdG9yLnByb3RvdHlwZSwgXCJsb2NUZXh0XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcInRleHRcIik7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBTdXJ2ZXlWYWxpZGF0b3IucHJvdG90eXBlLmdldEVycm9yVGV4dCA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIGlmICh0aGlzLnRleHQpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0O1xuICAgICAgICByZXR1cm4gdGhpcy5nZXREZWZhdWx0RXJyb3JUZXh0KG5hbWUpO1xuICAgIH07XG4gICAgU3VydmV5VmFsaWRhdG9yLnByb3RvdHlwZS5nZXREZWZhdWx0RXJyb3JUZXh0ID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfTtcbiAgICBTdXJ2ZXlWYWxpZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlID0gZnVuY3Rpb24gKHZhbHVlLCBuYW1lLCB2YWx1ZXMsIHByb3BlcnRpZXMpIHtcbiAgICAgICAgaWYgKG5hbWUgPT09IHZvaWQgMCkgeyBuYW1lID0gbnVsbDsgfVxuICAgICAgICBpZiAodmFsdWVzID09PSB2b2lkIDApIHsgdmFsdWVzID0gbnVsbDsgfVxuICAgICAgICBpZiAocHJvcGVydGllcyA9PT0gdm9pZCAwKSB7IHByb3BlcnRpZXMgPSBudWxsOyB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleVZhbGlkYXRvci5wcm90b3R5cGUsIFwiaXNSdW5uaW5nXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5VmFsaWRhdG9yLnByb3RvdHlwZSwgXCJpc0FzeW5jXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBTdXJ2ZXlWYWxpZGF0b3IucHJvdG90eXBlLmdldExvY2FsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5lcnJvck93bmVyID8gdGhpcy5lcnJvck93bmVyLmdldExvY2FsZSgpIDogXCJcIjtcbiAgICB9O1xuICAgIFN1cnZleVZhbGlkYXRvci5wcm90b3R5cGUuZ2V0TWFya2Rvd25IdG1sID0gZnVuY3Rpb24gKHRleHQsIG5hbWUpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5lcnJvck93bmVyXG4gICAgICAgICAgICA/IHRoaXMuZXJyb3JPd25lci5nZXRNYXJrZG93bkh0bWwodGV4dCwgbmFtZSlcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgIH07XG4gICAgU3VydmV5VmFsaWRhdG9yLnByb3RvdHlwZS5nZXRSZW5kZXJlciA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuZXJyb3JPd25lciA/IHRoaXMuZXJyb3JPd25lci5nZXRSZW5kZXJlcihuYW1lKSA6IG51bGw7XG4gICAgfTtcbiAgICBTdXJ2ZXlWYWxpZGF0b3IucHJvdG90eXBlLmdldFJlbmRlcmVyQ29udGV4dCA9IGZ1bmN0aW9uIChsb2NTdHIpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5lcnJvck93bmVyID8gdGhpcy5lcnJvck93bmVyLmdldFJlbmRlcmVyQ29udGV4dChsb2NTdHIpIDogbG9jU3RyO1xuICAgIH07XG4gICAgU3VydmV5VmFsaWRhdG9yLnByb3RvdHlwZS5nZXRQcm9jZXNzZWRUZXh0ID0gZnVuY3Rpb24gKHRleHQpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5lcnJvck93bmVyID8gdGhpcy5lcnJvck93bmVyLmdldFByb2Nlc3NlZFRleHQodGV4dCkgOiB0ZXh0O1xuICAgIH07XG4gICAgU3VydmV5VmFsaWRhdG9yLnByb3RvdHlwZS5jcmVhdGVDdXN0b21FcnJvciA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBlcnIgPSBuZXcgX2Vycm9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJDdXN0b21FcnJvclwiXSh0aGlzLmdldEVycm9yVGV4dChuYW1lKSwgdGhpcy5lcnJvck93bmVyKTtcbiAgICAgICAgZXJyLm9uVXBkYXRlRXJyb3JUZXh0Q2FsbGJhY2sgPSAoZnVuY3Rpb24gKGVycikgeyByZXR1cm4gZXJyLnRleHQgPSBfdGhpcy5nZXRFcnJvclRleHQobmFtZSk7IH0pO1xuICAgICAgICByZXR1cm4gZXJyO1xuICAgIH07XG4gICAgU3VydmV5VmFsaWRhdG9yLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHJlcyA9IHRoaXMuZ2V0VHlwZSgpLnJlcGxhY2UoXCJ2YWxpZGF0b3JcIiwgXCJcIik7XG4gICAgICAgIGlmICghIXRoaXMudGV4dCkge1xuICAgICAgICAgICAgcmVzICs9IFwiLCBcIiArIHRoaXMudGV4dDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH07XG4gICAgcmV0dXJuIFN1cnZleVZhbGlkYXRvcjtcbn0oX2Jhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkJhc2VcIl0pKTtcblxudmFyIFZhbGlkYXRvclJ1bm5lciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBWYWxpZGF0b3JSdW5uZXIoKSB7XG4gICAgfVxuICAgIFZhbGlkYXRvclJ1bm5lci5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKG93bmVyKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciByZXMgPSBbXTtcbiAgICAgICAgdmFyIHZhbHVlcyA9IG51bGw7XG4gICAgICAgIHZhciBwcm9wZXJ0aWVzID0gbnVsbDtcbiAgICAgICAgdGhpcy5wcmVwYXJlQXN5bmNWYWxpZGF0b3JzKCk7XG4gICAgICAgIHZhciBhc3luY1Jlc3VsdHMgPSBbXTtcbiAgICAgICAgdmFyIHZhbGlkYXRvcnMgPSBvd25lci5nZXRWYWxpZGF0b3JzKCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsaWRhdG9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIHZhbGlkYXRvciA9IHZhbGlkYXRvcnNbaV07XG4gICAgICAgICAgICBpZiAoIXZhbHVlcyAmJiB2YWxpZGF0b3IuaXNWYWxpZGF0ZUFsbFZhbHVlcykge1xuICAgICAgICAgICAgICAgIHZhbHVlcyA9IG93bmVyLmdldERhdGFGaWx0ZXJlZFZhbHVlcygpO1xuICAgICAgICAgICAgICAgIHByb3BlcnRpZXMgPSBvd25lci5nZXREYXRhRmlsdGVyZWRQcm9wZXJ0aWVzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodmFsaWRhdG9yLmlzQXN5bmMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFzeW5jVmFsaWRhdG9ycy5wdXNoKHZhbGlkYXRvcik7XG4gICAgICAgICAgICAgICAgdmFsaWRhdG9yLm9uQXN5bmNDb21wbGV0ZWQgPSBmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghIXJlc3VsdCAmJiAhIXJlc3VsdC5lcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzeW5jUmVzdWx0cy5wdXNoKHJlc3VsdC5lcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIGlmICghX3RoaXMub25Bc3luY0NvbXBsZXRlZClcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBfdGhpcy5hc3luY1ZhbGlkYXRvcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfdGhpcy5hc3luY1ZhbGlkYXRvcnNbaV0uaXNSdW5uaW5nKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBfdGhpcy5vbkFzeW5jQ29tcGxldGVkKGFzeW5jUmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YWxpZGF0b3JzID0gb3duZXIuZ2V0VmFsaWRhdG9ycygpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbGlkYXRvcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciB2YWxpZGF0b3IgPSB2YWxpZGF0b3JzW2ldO1xuICAgICAgICAgICAgdmFyIHZhbGlkYXRvclJlc3VsdCA9IHZhbGlkYXRvci52YWxpZGF0ZShvd25lci52YWxpZGF0ZWRWYWx1ZSwgb3duZXIuZ2V0VmFsaWRhdG9yVGl0bGUoKSwgdmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgIGlmICghIXZhbGlkYXRvclJlc3VsdCAmJiAhIXZhbGlkYXRvclJlc3VsdC5lcnJvcikge1xuICAgICAgICAgICAgICAgIHJlcy5wdXNoKHZhbGlkYXRvclJlc3VsdC5lcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuYXN5bmNWYWxpZGF0b3JzLmxlbmd0aCA9PSAwICYmICEhdGhpcy5vbkFzeW5jQ29tcGxldGVkKVxuICAgICAgICAgICAgdGhpcy5vbkFzeW5jQ29tcGxldGVkKFtdKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9O1xuICAgIFZhbGlkYXRvclJ1bm5lci5wcm90b3R5cGUucHJlcGFyZUFzeW5jVmFsaWRhdG9ycyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCEhdGhpcy5hc3luY1ZhbGlkYXRvcnMpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hc3luY1ZhbGlkYXRvcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFzeW5jVmFsaWRhdG9yc1tpXS5vbkFzeW5jQ29tcGxldGVkID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFzeW5jVmFsaWRhdG9ycyA9IFtdO1xuICAgIH07XG4gICAgcmV0dXJuIFZhbGlkYXRvclJ1bm5lcjtcbn0oKSk7XG5cbi8qKlxuICogVmFsaWRhdGUgbnVtZXJpYyB2YWx1ZXMuXG4gKi9cbnZhciBOdW1lcmljVmFsaWRhdG9yID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhOdW1lcmljVmFsaWRhdG9yLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIE51bWVyaWNWYWxpZGF0b3IobWluVmFsdWUsIG1heFZhbHVlKSB7XG4gICAgICAgIGlmIChtaW5WYWx1ZSA9PT0gdm9pZCAwKSB7IG1pblZhbHVlID0gbnVsbDsgfVxuICAgICAgICBpZiAobWF4VmFsdWUgPT09IHZvaWQgMCkgeyBtYXhWYWx1ZSA9IG51bGw7IH1cbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMubWluVmFsdWUgPSBtaW5WYWx1ZTtcbiAgICAgICAgX3RoaXMubWF4VmFsdWUgPSBtYXhWYWx1ZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBOdW1lcmljVmFsaWRhdG9yLnByb3RvdHlwZS5nZXRUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gXCJudW1lcmljdmFsaWRhdG9yXCI7XG4gICAgfTtcbiAgICBOdW1lcmljVmFsaWRhdG9yLnByb3RvdHlwZS52YWxpZGF0ZSA9IGZ1bmN0aW9uICh2YWx1ZSwgbmFtZSwgdmFsdWVzLCBwcm9wZXJ0aWVzKSB7XG4gICAgICAgIGlmIChuYW1lID09PSB2b2lkIDApIHsgbmFtZSA9IG51bGw7IH1cbiAgICAgICAgaWYgKHZhbHVlcyA9PT0gdm9pZCAwKSB7IHZhbHVlcyA9IG51bGw7IH1cbiAgICAgICAgaWYgKHByb3BlcnRpZXMgPT09IHZvaWQgMCkgeyBwcm9wZXJ0aWVzID0gbnVsbDsgfVxuICAgICAgICBpZiAodGhpcy5pc1ZhbHVlRW1wdHkodmFsdWUpKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGlmICghX2hlbHBlcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1tcIkhlbHBlcnNcIl0uaXNOdW1iZXIodmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFZhbGlkYXRvclJlc3VsdChudWxsLCBuZXcgX2Vycm9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJSZXF1cmVOdW1lcmljRXJyb3JcIl0odGhpcy50ZXh0LCB0aGlzLmVycm9yT3duZXIpKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IFZhbGlkYXRvclJlc3VsdChfaGVscGVyc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fW1wiSGVscGVyc1wiXS5nZXROdW1iZXIodmFsdWUpKTtcbiAgICAgICAgaWYgKHRoaXMubWluVmFsdWUgIT09IG51bGwgJiYgdGhpcy5taW5WYWx1ZSA+IHJlc3VsdC52YWx1ZSkge1xuICAgICAgICAgICAgcmVzdWx0LmVycm9yID0gdGhpcy5jcmVhdGVDdXN0b21FcnJvcihuYW1lKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubWF4VmFsdWUgIT09IG51bGwgJiYgdGhpcy5tYXhWYWx1ZSA8IHJlc3VsdC52YWx1ZSkge1xuICAgICAgICAgICAgcmVzdWx0LmVycm9yID0gdGhpcy5jcmVhdGVDdXN0b21FcnJvcihuYW1lKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIiA/IG51bGwgOiByZXN1bHQ7XG4gICAgfTtcbiAgICBOdW1lcmljVmFsaWRhdG9yLnByb3RvdHlwZS5nZXREZWZhdWx0RXJyb3JUZXh0ID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgdmFyIHZOYW1lID0gbmFtZSA/IG5hbWUgOiB0aGlzLmdldExvY2FsaXphdGlvblN0cmluZyhcInZhbHVlXCIpO1xuICAgICAgICBpZiAodGhpcy5taW5WYWx1ZSAhPT0gbnVsbCAmJiB0aGlzLm1heFZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YXRpb25Gb3JtYXRTdHJpbmcoXCJudW1lcmljTWluTWF4XCIsIHZOYW1lLCB0aGlzLm1pblZhbHVlLCB0aGlzLm1heFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm1pblZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemF0aW9uRm9ybWF0U3RyaW5nKFwibnVtZXJpY01pblwiLCB2TmFtZSwgdGhpcy5taW5WYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YXRpb25Gb3JtYXRTdHJpbmcoXCJudW1lcmljTWF4XCIsIHZOYW1lLCB0aGlzLm1heFZhbHVlKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE51bWVyaWNWYWxpZGF0b3IucHJvdG90eXBlLCBcIm1pblZhbHVlXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSBtaW5WYWx1ZSBwcm9wZXJ0eS5cbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIm1pblZhbHVlXCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm1pblZhbHVlXCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTnVtZXJpY1ZhbGlkYXRvci5wcm90b3R5cGUsIFwibWF4VmFsdWVcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogVGhlIG1heFZhbHVlIHByb3BlcnR5LlxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibWF4VmFsdWVcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibWF4VmFsdWVcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIHJldHVybiBOdW1lcmljVmFsaWRhdG9yO1xufShTdXJ2ZXlWYWxpZGF0b3IpKTtcblxuLyoqXG4gKiBWYWxpZGF0ZSB0ZXh0IHZhbHVlcy5cbiAqL1xudmFyIFRleHRWYWxpZGF0b3IgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFRleHRWYWxpZGF0b3IsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gVGV4dFZhbGlkYXRvcigpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgfVxuICAgIFRleHRWYWxpZGF0b3IucHJvdG90eXBlLmdldFR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBcInRleHR2YWxpZGF0b3JcIjtcbiAgICB9O1xuICAgIFRleHRWYWxpZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlID0gZnVuY3Rpb24gKHZhbHVlLCBuYW1lLCB2YWx1ZXMsIHByb3BlcnRpZXMpIHtcbiAgICAgICAgaWYgKG5hbWUgPT09IHZvaWQgMCkgeyBuYW1lID0gbnVsbDsgfVxuICAgICAgICBpZiAodmFsdWVzID09PSB2b2lkIDApIHsgdmFsdWVzID0gbnVsbDsgfVxuICAgICAgICBpZiAocHJvcGVydGllcyA9PT0gdm9pZCAwKSB7IHByb3BlcnRpZXMgPSBudWxsOyB9XG4gICAgICAgIGlmICh0aGlzLmlzVmFsdWVFbXB0eSh2YWx1ZSkpXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgaWYgKCF0aGlzLmFsbG93RGlnaXRzKSB7XG4gICAgICAgICAgICB2YXIgcmVnID0gL15bQS1aYS16XFxzXFwuXSokLztcbiAgICAgICAgICAgIGlmICghcmVnLnRlc3QodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBWYWxpZGF0b3JSZXN1bHQobnVsbCwgdGhpcy5jcmVhdGVDdXN0b21FcnJvcihuYW1lKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubWluTGVuZ3RoID4gMCAmJiB2YWx1ZS5sZW5ndGggPCB0aGlzLm1pbkxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBWYWxpZGF0b3JSZXN1bHQobnVsbCwgdGhpcy5jcmVhdGVDdXN0b21FcnJvcihuYW1lKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubWF4TGVuZ3RoID4gMCAmJiB2YWx1ZS5sZW5ndGggPiB0aGlzLm1heExlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBWYWxpZGF0b3JSZXN1bHQobnVsbCwgdGhpcy5jcmVhdGVDdXN0b21FcnJvcihuYW1lKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgICBUZXh0VmFsaWRhdG9yLnByb3RvdHlwZS5nZXREZWZhdWx0RXJyb3JUZXh0ID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgaWYgKHRoaXMubWluTGVuZ3RoID4gMCAmJiB0aGlzLm1heExlbmd0aCA+IDApXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YXRpb25Gb3JtYXRTdHJpbmcoXCJ0ZXh0TWluTWF4TGVuZ3RoXCIsIHRoaXMubWluTGVuZ3RoLCB0aGlzLm1heExlbmd0aCk7XG4gICAgICAgIGlmICh0aGlzLm1pbkxlbmd0aCA+IDApXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YXRpb25Gb3JtYXRTdHJpbmcoXCJ0ZXh0TWluTGVuZ3RoXCIsIHRoaXMubWluTGVuZ3RoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemF0aW9uRm9ybWF0U3RyaW5nKFwidGV4dE1heExlbmd0aFwiLCB0aGlzLm1heExlbmd0aCk7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVGV4dFZhbGlkYXRvci5wcm90b3R5cGUsIFwibWluTGVuZ3RoXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSBtaW5MZW5ndGggcHJvcGVydHkuXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJtaW5MZW5ndGhcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibWluTGVuZ3RoXCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVGV4dFZhbGlkYXRvci5wcm90b3R5cGUsIFwibWF4TGVuZ3RoXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSBtYXhMZW5ndGggcHJvcGVydHkuXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJtYXhMZW5ndGhcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibWF4TGVuZ3RoXCIsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVGV4dFZhbGlkYXRvci5wcm90b3R5cGUsIFwiYWxsb3dEaWdpdHNcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogVGhlIGFsbG93RGlnaXRzIHByb3BlcnR5LlxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiYWxsb3dEaWdpdHNcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiYWxsb3dEaWdpdHNcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIHJldHVybiBUZXh0VmFsaWRhdG9yO1xufShTdXJ2ZXlWYWxpZGF0b3IpKTtcblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGhlIG51bWJlciBvZiBhbnN3ZXJzLlxuICovXG52YXIgQW5zd2VyQ291bnRWYWxpZGF0b3IgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEFuc3dlckNvdW50VmFsaWRhdG9yLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFuc3dlckNvdW50VmFsaWRhdG9yKG1pbkNvdW50LCBtYXhDb3VudCkge1xuICAgICAgICBpZiAobWluQ291bnQgPT09IHZvaWQgMCkgeyBtaW5Db3VudCA9IG51bGw7IH1cbiAgICAgICAgaWYgKG1heENvdW50ID09PSB2b2lkIDApIHsgbWF4Q291bnQgPSBudWxsOyB9XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLm1pbkNvdW50ID0gbWluQ291bnQ7XG4gICAgICAgIF90aGlzLm1heENvdW50ID0gbWF4Q291bnQ7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgQW5zd2VyQ291bnRWYWxpZGF0b3IucHJvdG90eXBlLmdldFR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBcImFuc3dlcmNvdW50dmFsaWRhdG9yXCI7XG4gICAgfTtcbiAgICBBbnN3ZXJDb3VudFZhbGlkYXRvci5wcm90b3R5cGUudmFsaWRhdGUgPSBmdW5jdGlvbiAodmFsdWUsIG5hbWUsIHZhbHVlcywgcHJvcGVydGllcykge1xuICAgICAgICBpZiAobmFtZSA9PT0gdm9pZCAwKSB7IG5hbWUgPSBudWxsOyB9XG4gICAgICAgIGlmICh2YWx1ZXMgPT09IHZvaWQgMCkgeyB2YWx1ZXMgPSBudWxsOyB9XG4gICAgICAgIGlmIChwcm9wZXJ0aWVzID09PSB2b2lkIDApIHsgcHJvcGVydGllcyA9IG51bGw7IH1cbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwgfHwgdmFsdWUuY29uc3RydWN0b3IgIT0gQXJyYXkpXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgdmFyIGNvdW50ID0gdmFsdWUubGVuZ3RoO1xuICAgICAgICBpZiAoY291bnQgPT0gMClcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICBpZiAodGhpcy5taW5Db3VudCAmJiBjb3VudCA8IHRoaXMubWluQ291bnQpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgVmFsaWRhdG9yUmVzdWx0KG51bGwsIHRoaXMuY3JlYXRlQ3VzdG9tRXJyb3IodGhpcy5nZXRMb2NhbGl6YXRpb25Gb3JtYXRTdHJpbmcoXCJtaW5TZWxlY3RFcnJvclwiLCB0aGlzLm1pbkNvdW50KSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm1heENvdW50ICYmIGNvdW50ID4gdGhpcy5tYXhDb3VudCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBWYWxpZGF0b3JSZXN1bHQobnVsbCwgdGhpcy5jcmVhdGVDdXN0b21FcnJvcih0aGlzLmdldExvY2FsaXphdGlvbkZvcm1hdFN0cmluZyhcIm1heFNlbGVjdEVycm9yXCIsIHRoaXMubWF4Q291bnQpKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgICBBbnN3ZXJDb3VudFZhbGlkYXRvci5wcm90b3R5cGUuZ2V0RGVmYXVsdEVycm9yVGV4dCA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIHJldHVybiBuYW1lO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEFuc3dlckNvdW50VmFsaWRhdG9yLnByb3RvdHlwZSwgXCJtaW5Db3VudFwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgbWluQ291bnQgcHJvcGVydHkuXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJtaW5Db3VudFwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJtaW5Db3VudFwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEFuc3dlckNvdW50VmFsaWRhdG9yLnByb3RvdHlwZSwgXCJtYXhDb3VudFwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgbWF4Q291bnQgcHJvcGVydHkuXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJtYXhDb3VudFwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJtYXhDb3VudFwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgcmV0dXJuIEFuc3dlckNvdW50VmFsaWRhdG9yO1xufShTdXJ2ZXlWYWxpZGF0b3IpKTtcblxuLyoqXG4gKiBVc2UgaXQgdG8gdmFsaWRhdGUgdGhlIHRleHQgYnkgcmVndWxhciBleHByZXNzaW9ucy5cbiAqXG4gKiBbVmlldyBEZW1vXShodHRwczovL3N1cnZleWpzLmlvL2Zvcm0tbGlicmFyeS9leGFtcGxlcy9qYXZhc2NyaXB0LWZvcm0tdmFsaWRhdGlvbi8gKGxpbmtTdHlsZSkpXG4gKi9cbnZhciBSZWdleFZhbGlkYXRvciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoUmVnZXhWYWxpZGF0b3IsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gUmVnZXhWYWxpZGF0b3IocmVnZXgpIHtcbiAgICAgICAgaWYgKHJlZ2V4ID09PSB2b2lkIDApIHsgcmVnZXggPSBudWxsOyB9XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLnJlZ2V4ID0gcmVnZXg7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgUmVnZXhWYWxpZGF0b3IucHJvdG90eXBlLmdldFR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBcInJlZ2V4dmFsaWRhdG9yXCI7XG4gICAgfTtcbiAgICBSZWdleFZhbGlkYXRvci5wcm90b3R5cGUudmFsaWRhdGUgPSBmdW5jdGlvbiAodmFsdWUsIG5hbWUsIHZhbHVlcywgcHJvcGVydGllcykge1xuICAgICAgICBpZiAobmFtZSA9PT0gdm9pZCAwKSB7IG5hbWUgPSBudWxsOyB9XG4gICAgICAgIGlmICh2YWx1ZXMgPT09IHZvaWQgMCkgeyB2YWx1ZXMgPSBudWxsOyB9XG4gICAgICAgIGlmIChwcm9wZXJ0aWVzID09PSB2b2lkIDApIHsgcHJvcGVydGllcyA9IG51bGw7IH1cbiAgICAgICAgaWYgKCF0aGlzLnJlZ2V4IHx8IHRoaXMuaXNWYWx1ZUVtcHR5KHZhbHVlKSlcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB2YXIgcmUgPSBuZXcgUmVnRXhwKHRoaXMucmVnZXgpO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVzID0gdGhpcy5oYXNFcnJvcihyZSwgdmFsdWVbaV0sIG5hbWUpO1xuICAgICAgICAgICAgICAgIGlmIChyZXMpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuaGFzRXJyb3IocmUsIHZhbHVlLCBuYW1lKTtcbiAgICB9O1xuICAgIFJlZ2V4VmFsaWRhdG9yLnByb3RvdHlwZS5oYXNFcnJvciA9IGZ1bmN0aW9uIChyZSwgdmFsdWUsIG5hbWUpIHtcbiAgICAgICAgaWYgKHJlLnRlc3QodmFsdWUpKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIHJldHVybiBuZXcgVmFsaWRhdG9yUmVzdWx0KHZhbHVlLCB0aGlzLmNyZWF0ZUN1c3RvbUVycm9yKG5hbWUpKTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZWdleFZhbGlkYXRvci5wcm90b3R5cGUsIFwicmVnZXhcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogVGhlIHJlZ2V4IHByb3BlcnR5LlxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicmVnZXhcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicmVnZXhcIiwgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIHJldHVybiBSZWdleFZhbGlkYXRvcjtcbn0oU3VydmV5VmFsaWRhdG9yKSk7XG5cbi8qKlxuICogVmFsaWRhdGUgZS1tYWlsIGFkZHJlc3MgaW4gdGhlIHRleHQgaW5wdXRcbiAqL1xudmFyIEVtYWlsVmFsaWRhdG9yID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhFbWFpbFZhbGlkYXRvciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBFbWFpbFZhbGlkYXRvcigpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMucmUgPSAvXigoW148PigpXFxbXFxdXFwuLDs6XFxzQFxcXCJdKyhcXC5bXjw+KClcXFtcXF1cXC4sOzpcXHNAXFxcIl0rKSopfChcXFwiLitcXFwiKSlAKChbXjw+KCk9W1xcXVxcLiw7Olxcc0BcXFwiXStcXC4pK1tePD4oKT1bXFxdXFwuLDs6XFxzQFxcXCJdezIsfSkkL2k7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgRW1haWxWYWxpZGF0b3IucHJvdG90eXBlLmdldFR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBcImVtYWlsdmFsaWRhdG9yXCI7XG4gICAgfTtcbiAgICBFbWFpbFZhbGlkYXRvci5wcm90b3R5cGUudmFsaWRhdGUgPSBmdW5jdGlvbiAodmFsdWUsIG5hbWUsIHZhbHVlcywgcHJvcGVydGllcykge1xuICAgICAgICBpZiAobmFtZSA9PT0gdm9pZCAwKSB7IG5hbWUgPSBudWxsOyB9XG4gICAgICAgIGlmICh2YWx1ZXMgPT09IHZvaWQgMCkgeyB2YWx1ZXMgPSBudWxsOyB9XG4gICAgICAgIGlmIChwcm9wZXJ0aWVzID09PSB2b2lkIDApIHsgcHJvcGVydGllcyA9IG51bGw7IH1cbiAgICAgICAgaWYgKCF2YWx1ZSlcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICBpZiAodGhpcy5yZS50ZXN0KHZhbHVlKSlcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICByZXR1cm4gbmV3IFZhbGlkYXRvclJlc3VsdCh2YWx1ZSwgdGhpcy5jcmVhdGVDdXN0b21FcnJvcihuYW1lKSk7XG4gICAgfTtcbiAgICBFbWFpbFZhbGlkYXRvci5wcm90b3R5cGUuZ2V0RGVmYXVsdEVycm9yVGV4dCA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphdGlvblN0cmluZyhcImludmFsaWRFbWFpbFwiKTtcbiAgICB9O1xuICAgIHJldHVybiBFbWFpbFZhbGlkYXRvcjtcbn0oU3VydmV5VmFsaWRhdG9yKSk7XG5cbi8qKlxuICogU2hvdyBlcnJvciBpZiBleHByZXNzaW9uIHJldHVybnMgZmFsc2VcbiAqL1xudmFyIEV4cHJlc3Npb25WYWxpZGF0b3IgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEV4cHJlc3Npb25WYWxpZGF0b3IsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gRXhwcmVzc2lvblZhbGlkYXRvcihleHByZXNzaW9uKSB7XG4gICAgICAgIGlmIChleHByZXNzaW9uID09PSB2b2lkIDApIHsgZXhwcmVzc2lvbiA9IG51bGw7IH1cbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuY29uZGl0aW9uUnVubmVyID0gbnVsbDtcbiAgICAgICAgX3RoaXMuaXNSdW5uaW5nVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgX3RoaXMuZXhwcmVzc2lvbiA9IGV4cHJlc3Npb247XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgRXhwcmVzc2lvblZhbGlkYXRvci5wcm90b3R5cGUuZ2V0VHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIFwiZXhwcmVzc2lvbnZhbGlkYXRvclwiO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEV4cHJlc3Npb25WYWxpZGF0b3IucHJvdG90eXBlLCBcImlzVmFsaWRhdGVBbGxWYWx1ZXNcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEV4cHJlc3Npb25WYWxpZGF0b3IucHJvdG90eXBlLCBcImlzQXN5bmNcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5lbnN1cmVDb25kaXRpb25SdW5uZXIoKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25SdW5uZXIuaXNBc3luYztcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFeHByZXNzaW9uVmFsaWRhdG9yLnByb3RvdHlwZSwgXCJpc1J1bm5pbmdcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlzUnVubmluZ1ZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgRXhwcmVzc2lvblZhbGlkYXRvci5wcm90b3R5cGUudmFsaWRhdGUgPSBmdW5jdGlvbiAodmFsdWUsIG5hbWUsIHZhbHVlcywgcHJvcGVydGllcykge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBpZiAobmFtZSA9PT0gdm9pZCAwKSB7IG5hbWUgPSBudWxsOyB9XG4gICAgICAgIGlmICh2YWx1ZXMgPT09IHZvaWQgMCkgeyB2YWx1ZXMgPSBudWxsOyB9XG4gICAgICAgIGlmIChwcm9wZXJ0aWVzID09PSB2b2lkIDApIHsgcHJvcGVydGllcyA9IG51bGw7IH1cbiAgICAgICAgaWYgKCF0aGlzLmVuc3VyZUNvbmRpdGlvblJ1bm5lcigpKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIHRoaXMuY29uZGl0aW9uUnVubmVyLm9uUnVuQ29tcGxldGUgPSBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICBfdGhpcy5pc1J1bm5pbmdWYWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKCEhX3RoaXMub25Bc3luY0NvbXBsZXRlZCkge1xuICAgICAgICAgICAgICAgIF90aGlzLm9uQXN5bmNDb21wbGV0ZWQoX3RoaXMuZ2VuZXJhdGVFcnJvcihyZXMsIHZhbHVlLCBuYW1lKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuaXNSdW5uaW5nVmFsdWUgPSB0cnVlO1xuICAgICAgICB2YXIgcmVzID0gdGhpcy5jb25kaXRpb25SdW5uZXIucnVuKHZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgICAgIGlmICh0aGlzLmNvbmRpdGlvblJ1bm5lci5pc0FzeW5jKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIHRoaXMuaXNSdW5uaW5nVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2VuZXJhdGVFcnJvcihyZXMsIHZhbHVlLCBuYW1lKTtcbiAgICB9O1xuICAgIEV4cHJlc3Npb25WYWxpZGF0b3IucHJvdG90eXBlLmdlbmVyYXRlRXJyb3IgPSBmdW5jdGlvbiAocmVzLCB2YWx1ZSwgbmFtZSkge1xuICAgICAgICBpZiAoIXJlcykge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBWYWxpZGF0b3JSZXN1bHQodmFsdWUsIHRoaXMuY3JlYXRlQ3VzdG9tRXJyb3IobmFtZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gICAgRXhwcmVzc2lvblZhbGlkYXRvci5wcm90b3R5cGUuZ2V0RGVmYXVsdEVycm9yVGV4dCA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphdGlvbkZvcm1hdFN0cmluZyhcImludmFsaWRFeHByZXNzaW9uXCIsIHRoaXMuZXhwcmVzc2lvbik7XG4gICAgfTtcbiAgICBFeHByZXNzaW9uVmFsaWRhdG9yLnByb3RvdHlwZS5lbnN1cmVDb25kaXRpb25SdW5uZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghIXRoaXMuY29uZGl0aW9uUnVubmVyKSB7XG4gICAgICAgICAgICB0aGlzLmNvbmRpdGlvblJ1bm5lci5leHByZXNzaW9uID0gdGhpcy5leHByZXNzaW9uO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmV4cHJlc3Npb24pXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHRoaXMuY29uZGl0aW9uUnVubmVyID0gbmV3IF9jb25kaXRpb25zX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXCJDb25kaXRpb25SdW5uZXJcIl0odGhpcy5leHByZXNzaW9uKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRXhwcmVzc2lvblZhbGlkYXRvci5wcm90b3R5cGUsIFwiZXhwcmVzc2lvblwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgZXhwcmVzc2lvbiBwcm9wZXJ0eS5cbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImV4cHJlc3Npb25cIik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiZXhwcmVzc2lvblwiLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgcmV0dXJuIEV4cHJlc3Npb25WYWxpZGF0b3I7XG59KFN1cnZleVZhbGlkYXRvcikpO1xuXG5fanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiU2VyaWFsaXplclwiXS5hZGRDbGFzcyhcInN1cnZleXZhbGlkYXRvclwiLCBbXG4gICAgeyBuYW1lOiBcInRleHRcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1RleHRcIiB9LFxuXSk7XG5fanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiU2VyaWFsaXplclwiXS5hZGRDbGFzcyhcIm51bWVyaWN2YWxpZGF0b3JcIiwgW1wibWluVmFsdWU6bnVtYmVyXCIsIFwibWF4VmFsdWU6bnVtYmVyXCJdLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBOdW1lcmljVmFsaWRhdG9yKCk7XG59LCBcInN1cnZleXZhbGlkYXRvclwiKTtcbl9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJTZXJpYWxpemVyXCJdLmFkZENsYXNzKFwidGV4dHZhbGlkYXRvclwiLCBbeyBuYW1lOiBcIm1pbkxlbmd0aDpudW1iZXJcIiwgZGVmYXVsdDogMCB9LFxuICAgIHsgbmFtZTogXCJtYXhMZW5ndGg6bnVtYmVyXCIsIGRlZmF1bHQ6IDAgfSxcbiAgICB7IG5hbWU6IFwiYWxsb3dEaWdpdHM6Ym9vbGVhblwiLCBkZWZhdWx0OiB0cnVlIH1dLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBUZXh0VmFsaWRhdG9yKCk7XG59LCBcInN1cnZleXZhbGlkYXRvclwiKTtcbl9qc29ub2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJTZXJpYWxpemVyXCJdLmFkZENsYXNzKFwiYW5zd2VyY291bnR2YWxpZGF0b3JcIiwgW1wibWluQ291bnQ6bnVtYmVyXCIsIFwibWF4Q291bnQ6bnVtYmVyXCJdLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBBbnN3ZXJDb3VudFZhbGlkYXRvcigpO1xufSwgXCJzdXJ2ZXl2YWxpZGF0b3JcIik7XG5fanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiU2VyaWFsaXplclwiXS5hZGRDbGFzcyhcInJlZ2V4dmFsaWRhdG9yXCIsIFtcInJlZ2V4XCJdLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBSZWdleFZhbGlkYXRvcigpO1xufSwgXCJzdXJ2ZXl2YWxpZGF0b3JcIik7XG5fanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiU2VyaWFsaXplclwiXS5hZGRDbGFzcyhcImVtYWlsdmFsaWRhdG9yXCIsIFtdLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBFbWFpbFZhbGlkYXRvcigpO1xufSwgXCJzdXJ2ZXl2YWxpZGF0b3JcIik7XG5fanNvbm9iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiU2VyaWFsaXplclwiXS5hZGRDbGFzcyhcImV4cHJlc3Npb252YWxpZGF0b3JcIiwgW1wiZXhwcmVzc2lvbjpjb25kaXRpb25cIl0sIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbmV3IEV4cHJlc3Npb25WYWxpZGF0b3IoKTtcbn0sIFwic3VydmV5dmFsaWRhdG9yXCIpO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9iYXNlLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9iYXNlLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEJhc2VWdWUsIGRlZmF1bHQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQmFzZVZ1ZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEJhc2VWdWU7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlICovIFwidnVlXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBzdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgc3VydmV5LWNvcmUgKi8gXCIuL3NyYy9lbnRyaWVzL2NvcmUudHNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdnVlLXByb3BlcnR5LWRlY29yYXRvciAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IvbGliL2luZGV4LmpzXCIpO1xudmFyIF9fZXh0ZW5kcyA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG52YXIgX19hc3NpZ24gPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbnZhciBfX2RlY29yYXRlID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn07XG5cblxuXG52YXIgQmFzZVZ1ZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQmFzZVZ1ZSwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBCYXNlVnVlKCkge1xuICAgICAgICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgfVxuICAgIEJhc2VWdWUucHJvdG90eXBlLmdldE1vZGVsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICAgIEJhc2VWdWUucHJvdG90eXBlLnNldElzUmVuZGVyaW5nID0gZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICB2YXIgbW9kZWwgPSB0aGlzLmdldE1vZGVsKCk7XG4gICAgICAgIGlmICghIW1vZGVsKSB7XG4gICAgICAgICAgICBtb2RlbC5pc1JlbmRlcmluZyA9IHZhbDtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQmFzZVZ1ZS5wcm90b3R5cGUuZ2V0SXNSZW5kZXJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBtb2RlbCA9IHRoaXMuZ2V0TW9kZWwoKTtcbiAgICAgICAgcmV0dXJuICEhbW9kZWwgJiYgISFtb2RlbC5pc1JlbmRlcmluZztcbiAgICB9O1xuICAgIEJhc2VWdWUucHJvdG90eXBlLm9uTW91bnRlZCA9IGZ1bmN0aW9uICgpIHsgfTtcbiAgICBCYXNlVnVlLnByb3RvdHlwZS5vblVwZGF0ZWQgPSBmdW5jdGlvbiAoKSB7IH07XG4gICAgQmFzZVZ1ZS5wcm90b3R5cGUub25EZXN0cm95ZWQgPSBmdW5jdGlvbiAoKSB7IH07XG4gICAgQmFzZVZ1ZS5wcm90b3R5cGUub25DcmVhdGVkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgbW9kZWwgPSB0aGlzLmdldE1vZGVsKCk7XG4gICAgICAgIGlmICghbW9kZWwpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIG1vZGVsLml0ZXJhdGVQcm9wZXJ0aWVzSGFzaChmdW5jdGlvbiAocHJvcGVydGllc0hhc2gsIG5hbWUpIHtcbiAgICAgICAgICAgIHZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS51dGlsLmRlZmluZVJlYWN0aXZlKHByb3BlcnRpZXNIYXNoLCBuYW1lLCBwcm9wZXJ0aWVzSGFzaFtuYW1lXSk7XG4gICAgICAgIH0pO1xuICAgICAgICBtb2RlbC5nZXRQcm9wZXJ0eVZhbHVlQ29yZUhhbmRsZXIgPSBmdW5jdGlvbiAocHJvcGVydGllc0hhc2gsIG5hbWUpIHtcbiAgICAgICAgICAgIGlmICghcHJvcGVydGllc0hhc2guaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgICAgICAgICB2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEudXRpbC5kZWZpbmVSZWFjdGl2ZShwcm9wZXJ0aWVzSGFzaCwgbmFtZSwgcHJvcGVydGllc0hhc2hbbmFtZV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHByb3BlcnRpZXNIYXNoW25hbWVdO1xuICAgICAgICB9O1xuICAgICAgICBtb2RlbC5zZXRQcm9wZXJ0eVZhbHVlQ29yZUhhbmRsZXIgPSBmdW5jdGlvbiAocHJvcGVydGllc0hhc2gsIG5hbWUsIHZhbCkge1xuICAgICAgICAgICAgaWYgKCFwcm9wZXJ0aWVzSGFzaC5oYXNPd25Qcm9wZXJ0eShuYW1lKSB8fCAhX3RoaXMuZ2V0SXNSZW5kZXJpbmcoKSlcbiAgICAgICAgICAgICAgICB2dWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuc2V0KHByb3BlcnRpZXNIYXNoLCBuYW1lLCB2YWwpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHByb3BlcnRpZXNIYXNoW25hbWVdID0gdmFsO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgQmFzZVZ1ZS5wcm90b3R5cGUuY3JlYXRlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5vbkNyZWF0ZWQoKTtcbiAgICB9O1xuICAgIEJhc2VWdWUucHJvdG90eXBlLmJlZm9yZU1vdW50ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnNldElzUmVuZGVyaW5nKHRydWUpO1xuICAgIH07XG4gICAgQmFzZVZ1ZS5wcm90b3R5cGUuYmVmb3JlVXBkYXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnNldElzUmVuZGVyaW5nKHRydWUpO1xuICAgIH07XG4gICAgQmFzZVZ1ZS5wcm90b3R5cGUubW91bnRlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5zZXRJc1JlbmRlcmluZyhmYWxzZSk7XG4gICAgICAgIHRoaXMub25Nb3VudGVkKCk7XG4gICAgfTtcbiAgICBCYXNlVnVlLnByb3RvdHlwZS51cGRhdGVkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnNldElzUmVuZGVyaW5nKGZhbHNlKTtcbiAgICAgICAgdGhpcy5vblVwZGF0ZWQoKTtcbiAgICB9O1xuICAgIEJhc2VWdWUucHJvdG90eXBlLmRlc3Ryb3llZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5vbkRlc3Ryb3llZCgpO1xuICAgIH07XG4gICAgQmFzZVZ1ZSA9IF9fZGVjb3JhdGUoW1xuICAgICAgICB2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJDb21wb25lbnRcIl1cbiAgICBdLCBCYXNlVnVlKTtcbiAgICByZXR1cm4gQmFzZVZ1ZTtcbn0odnVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hKSk7XG5cbnZ1ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5kaXJlY3RpdmUoXCJrZXkyY2xpY2tcIiwge1xuICAgIC8vIFdoZW4gdGhlIGJvdW5kIGVsZW1lbnQgaXMgaW5zZXJ0ZWQgaW50byB0aGUgRE9NLi4uXG4gICAgaW5zZXJ0ZWQ6IGZ1bmN0aW9uIChlbCwgYmluZGluZykge1xuICAgICAgICB2YXIgb3B0aW9ucyA9IF9fYXNzaWduKHt9LCBiaW5kaW5nLnZhbHVlKSB8fCB7IHByb2Nlc3NFc2M6IHRydWUgfTtcbiAgICAgICAgaWYgKCFvcHRpb25zLmRpc2FibGVUYWJTdG9wKVxuICAgICAgICAgICAgZWwudGFiSW5kZXggPSAwO1xuICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgZnVuY3Rpb24gKGV2dCkge1xuICAgICAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICBPYmplY3Qoc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcImRvS2V5MkNsaWNrVXBcIl0pKGV2dCwgb3B0aW9ucyk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBmdW5jdGlvbiAoZXZ0KSB7XG4gICAgICAgICAgICBPYmplY3Qoc3VydmV5X2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcImRvS2V5MkNsaWNrRG93blwiXSkoZXZ0LCBvcHRpb25zKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoXCJibHVyXCIsIGZ1bmN0aW9uIChldnQpIHtcbiAgICAgICAgICAgIE9iamVjdChzdXJ2ZXlfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiZG9LZXkyQ2xpY2tCbHVyXCJdKShldnQpO1xuICAgICAgICB9KTtcbiAgICB9XG59KTtcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoQmFzZVZ1ZSk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL2Jvb2xlYW4tY2hlY2tib3gudnVlXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvYm9vbGVhbi1jaGVja2JveC52dWUgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEJvb2xlYW5DaGVja2JveCwgZGVmYXVsdCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYm9vbGVhbl9jaGVja2JveF92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfNWNjZDM0MGFfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2Jvb2xlYW4tY2hlY2tib3gudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTVjY2QzNDBhJiAqLyBcIi4vc3JjL3Z1ZS9ib29sZWFuLWNoZWNrYm94LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01Y2NkMzQwYSZcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Jvb2xlYW5fY2hlY2tib3hfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9ib29sZWFuLWNoZWNrYm94LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKi8gXCIuL3NyYy92dWUvYm9vbGVhbi1jaGVja2JveC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQm9vbGVhbkNoZWNrYm94XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2Jvb2xlYW5fY2hlY2tib3hfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiQm9vbGVhbkNoZWNrYm94XCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCIpO1xuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGNvbXBvbmVudCA9IE9iamVjdChfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX3J1bnRpbWVfY29tcG9uZW50Tm9ybWFsaXplcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiZGVmYXVsdFwiXSkoXG4gIF9ib29sZWFuX2NoZWNrYm94X3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcImRlZmF1bHRcIl0sXG4gIF9ib29sZWFuX2NoZWNrYm94X3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF81Y2NkMzQwYV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInJlbmRlclwiXSxcbiAgX2Jvb2xlYW5fY2hlY2tib3hfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzVjY2QzNDBhX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3RhdGljUmVuZGVyRm5zXCJdLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBhcGk7IH1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9ib29sZWFuLWNoZWNrYm94LnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKGNvbXBvbmVudC5leHBvcnRzKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL2Jvb2xlYW4tY2hlY2tib3gudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9ib29sZWFuLWNoZWNrYm94LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBkZWZhdWx0LCBCb29sZWFuQ2hlY2tib3ggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ib29sZWFuX2NoZWNrYm94X3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vYm9vbGVhbi1jaGVja2JveC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICovIFwiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2Jvb2xlYW4tY2hlY2tib3gudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkJvb2xlYW5DaGVja2JveFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfYm9vbGVhbl9jaGVja2JveF92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJCb29sZWFuQ2hlY2tib3hcIl07IH0pO1xuXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2Jvb2xlYW5fY2hlY2tib3hfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiZGVmYXVsdFwiXSk7IFxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvYm9vbGVhbi1jaGVja2JveC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NWNjZDM0MGEmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL2Jvb2xlYW4tY2hlY2tib3gudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTVjY2QzNDBhJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ib29sZWFuX2NoZWNrYm94X3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF81Y2NkMzQwYV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2Jvb2xlYW4tY2hlY2tib3gudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTVjY2QzNDBhJiAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvYm9vbGVhbi1jaGVja2JveC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NWNjZDM0MGEmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwicmVuZGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2Jvb2xlYW5fY2hlY2tib3hfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzVjY2QzNDBhX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVuZGVyXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic3RhdGljUmVuZGVyRm5zXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2Jvb2xlYW5fY2hlY2tib3hfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzVjY2QzNDBhX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3RhdGljUmVuZGVyRm5zXCJdOyB9KTtcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9ib29sZWFuLXJhZGlvLWl0ZW0udnVlXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9ib29sZWFuLXJhZGlvLWl0ZW0udnVlICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEJvb2xlYW5SYWRpb0l0ZW0sIGRlZmF1bHQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Jvb2xlYW5fcmFkaW9faXRlbV92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfNzg4OWQ1YThfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2Jvb2xlYW4tcmFkaW8taXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9Nzg4OWQ1YTgmICovIFwiLi9zcmMvdnVlL2Jvb2xlYW4tcmFkaW8taXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9Nzg4OWQ1YTgmXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ib29sZWFuX3JhZGlvX2l0ZW1fdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9ib29sZWFuLXJhZGlvLWl0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqLyBcIi4vc3JjL3Z1ZS9ib29sZWFuLXJhZGlvLWl0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkJvb2xlYW5SYWRpb0l0ZW1cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfYm9vbGVhbl9yYWRpb19pdGVtX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIkJvb2xlYW5SYWRpb0l0ZW1cIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9ydW50aW1lX2NvbXBvbmVudE5vcm1hbGl6ZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanMgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIik7XG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgY29tcG9uZW50ID0gT2JqZWN0KF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJkZWZhdWx0XCJdKShcbiAgX2Jvb2xlYW5fcmFkaW9faXRlbV92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJkZWZhdWx0XCJdLFxuICBfYm9vbGVhbl9yYWRpb19pdGVtX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF83ODg5ZDVhOF9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInJlbmRlclwiXSxcbiAgX2Jvb2xlYW5fcmFkaW9faXRlbV92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfNzg4OWQ1YThfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl0sXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGFwaTsgfVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2Jvb2xlYW4tcmFkaW8taXRlbS52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChjb21wb25lbnQuZXhwb3J0cyk7XG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9ib29sZWFuLXJhZGlvLWl0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL2Jvb2xlYW4tcmFkaW8taXRlbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBkZWZhdWx0LCBCb29sZWFuUmFkaW9JdGVtICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfYm9vbGVhbl9yYWRpb19pdGVtX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vYm9vbGVhbi1yYWRpby1pdGVtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKi8gXCIuL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvYm9vbGVhbi1yYWRpby1pdGVtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJCb29sZWFuUmFkaW9JdGVtXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ib29sZWFuX3JhZGlvX2l0ZW1fdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiQm9vbGVhblJhZGlvSXRlbVwiXTsgfSk7XG5cbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfYm9vbGVhbl9yYWRpb19pdGVtX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcImRlZmF1bHRcIl0pOyBcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL2Jvb2xlYW4tcmFkaW8taXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9Nzg4OWQ1YTgmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvYm9vbGVhbi1yYWRpby1pdGVtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03ODg5ZDVhOCYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ib29sZWFuX3JhZGlvX2l0ZW1fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzc4ODlkNWE4X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vYm9vbGVhbi1yYWRpby1pdGVtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03ODg5ZDVhOCYgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2Jvb2xlYW4tcmFkaW8taXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9Nzg4OWQ1YTgmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwicmVuZGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2Jvb2xlYW5fcmFkaW9faXRlbV92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfNzg4OWQ1YThfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJyZW5kZXJcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzdGF0aWNSZW5kZXJGbnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfYm9vbGVhbl9yYWRpb19pdGVtX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF83ODg5ZDVhOF9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN0YXRpY1JlbmRlckZuc1wiXTsgfSk7XG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvYm9vbGVhbi1yYWRpby52dWVcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9ib29sZWFuLXJhZGlvLnZ1ZSAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogQm9vbGVhblJhZGlvLCBkZWZhdWx0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ib29sZWFuX3JhZGlvX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF80YTIzOGY3OF9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYm9vbGVhbi1yYWRpby52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NGEyMzhmNzgmICovIFwiLi9zcmMvdnVlL2Jvb2xlYW4tcmFkaW8udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTRhMjM4Zjc4JlwiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYm9vbGVhbl9yYWRpb192dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2Jvb2xlYW4tcmFkaW8udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqLyBcIi4vc3JjL3Z1ZS9ib29sZWFuLXJhZGlvLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJCb29sZWFuUmFkaW9cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfYm9vbGVhbl9yYWRpb192dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJCb29sZWFuUmFkaW9cIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9ydW50aW1lX2NvbXBvbmVudE5vcm1hbGl6ZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanMgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIik7XG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgY29tcG9uZW50ID0gT2JqZWN0KF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJkZWZhdWx0XCJdKShcbiAgX2Jvb2xlYW5fcmFkaW9fdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiZGVmYXVsdFwiXSxcbiAgX2Jvb2xlYW5fcmFkaW9fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzRhMjM4Zjc4X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVuZGVyXCJdLFxuICBfYm9vbGVhbl9yYWRpb192dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfNGEyMzhmNzhfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl0sXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGFwaTsgfVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2Jvb2xlYW4tcmFkaW8udnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoY29tcG9uZW50LmV4cG9ydHMpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvYm9vbGVhbi1yYWRpby52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL2Jvb2xlYW4tcmFkaW8udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGRlZmF1bHQsIEJvb2xlYW5SYWRpbyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2Jvb2xlYW5fcmFkaW9fdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ib29sZWFuLXJhZGlvLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKi8gXCIuL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvYm9vbGVhbi1yYWRpby52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQm9vbGVhblJhZGlvXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ib29sZWFuX3JhZGlvX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkJvb2xlYW5SYWRpb1wiXTsgfSk7XG5cbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfYm9vbGVhbl9yYWRpb192dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJkZWZhdWx0XCJdKTsgXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9ib29sZWFuLXJhZGlvLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00YTIzOGY3OCZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvYm9vbGVhbi1yYWRpby52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NGEyMzhmNzgmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2Jvb2xlYW5fcmFkaW9fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzRhMjM4Zjc4X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vYm9vbGVhbi1yYWRpby52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NGEyMzhmNzgmICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9ib29sZWFuLXJhZGlvLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00YTIzOGY3OCZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfYm9vbGVhbl9yYWRpb192dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfNGEyMzhmNzhfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJyZW5kZXJcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzdGF0aWNSZW5kZXJGbnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfYm9vbGVhbl9yYWRpb192dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfNGEyMzhmNzhfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl07IH0pO1xuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL2Jvb2xlYW4tc3dpdGNoLnZ1ZVwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9ib29sZWFuLXN3aXRjaC52dWUgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBCb29sZWFuU3dpdGNoLCBkZWZhdWx0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ib29sZWFuX3N3aXRjaF92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfNzBlNGFlYmJfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2Jvb2xlYW4tc3dpdGNoLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03MGU0YWViYiYgKi8gXCIuL3NyYy92dWUvYm9vbGVhbi1zd2l0Y2gudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTcwZTRhZWJiJlwiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYm9vbGVhbl9zd2l0Y2hfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9ib29sZWFuLXN3aXRjaC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICovIFwiLi9zcmMvdnVlL2Jvb2xlYW4tc3dpdGNoLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJCb29sZWFuU3dpdGNoXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2Jvb2xlYW5fc3dpdGNoX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIkJvb2xlYW5Td2l0Y2hcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9ydW50aW1lX2NvbXBvbmVudE5vcm1hbGl6ZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanMgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIik7XG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgY29tcG9uZW50ID0gT2JqZWN0KF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJkZWZhdWx0XCJdKShcbiAgX2Jvb2xlYW5fc3dpdGNoX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcImRlZmF1bHRcIl0sXG4gIF9ib29sZWFuX3N3aXRjaF92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfNzBlNGFlYmJfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJyZW5kZXJcIl0sXG4gIF9ib29sZWFuX3N3aXRjaF92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfNzBlNGFlYmJfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl0sXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGFwaTsgfVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2Jvb2xlYW4tc3dpdGNoLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKGNvbXBvbmVudC5leHBvcnRzKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL2Jvb2xlYW4tc3dpdGNoLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL2Jvb2xlYW4tc3dpdGNoLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogZGVmYXVsdCwgQm9vbGVhblN3aXRjaCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2Jvb2xlYW5fc3dpdGNoX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vYm9vbGVhbi1zd2l0Y2gudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqLyBcIi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9ib29sZWFuLXN3aXRjaC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQm9vbGVhblN3aXRjaFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfYm9vbGVhbl9zd2l0Y2hfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiQm9vbGVhblN3aXRjaFwiXTsgfSk7XG5cbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfYm9vbGVhbl9zd2l0Y2hfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiZGVmYXVsdFwiXSk7IFxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvYm9vbGVhbi1zd2l0Y2gudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTcwZTRhZWJiJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvYm9vbGVhbi1zd2l0Y2gudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTcwZTRhZWJiJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfYm9vbGVhbl9zd2l0Y2hfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzcwZTRhZWJiX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vYm9vbGVhbi1zd2l0Y2gudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTcwZTRhZWJiJiAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvYm9vbGVhbi1zd2l0Y2gudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTcwZTRhZWJiJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInJlbmRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ib29sZWFuX3N3aXRjaF92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfNzBlNGFlYmJfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJyZW5kZXJcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzdGF0aWNSZW5kZXJGbnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfYm9vbGVhbl9zd2l0Y2hfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzcwZTRhZWJiX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3RhdGljUmVuZGVyRm5zXCJdOyB9KTtcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9ib29sZWFuLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9ib29sZWFuLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEJvb2xlYW4gKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQm9vbGVhblwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEJvb2xlYW47IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9pbmRleC5qc1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcXVlc3Rpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcXVlc3Rpb24gKi8gXCIuL3NyYy92dWUvcXVlc3Rpb24udHNcIik7XG52YXIgX19leHRlbmRzID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbnZhciBfX2RlY29yYXRlID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn07XG5cblxudmFyIEJvb2xlYW4gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEJvb2xlYW4sIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQm9vbGVhbigpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIH1cbiAgICBCb29sZWFuLnByb3RvdHlwZS5vblN3aXRjaENsaWNrID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHRoaXMucXVlc3Rpb24ub25Td2l0Y2hDbGlja01vZGVsKGV2ZW50KTtcbiAgICB9O1xuICAgIEJvb2xlYW4ucHJvdG90eXBlLm9uTGFiZWxDbGljayA9IGZ1bmN0aW9uIChldmVudCwgdmFsdWUpIHtcbiAgICAgICAgdGhpcy5xdWVzdGlvbi5vbkxhYmVsQ2xpY2soZXZlbnQsIHZhbHVlKTtcbiAgICB9O1xuICAgIEJvb2xlYW4gPSBfX2RlY29yYXRlKFtcbiAgICAgICAgdnVlX3Byb3BlcnR5X2RlY29yYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiQ29tcG9uZW50XCJdXG4gICAgXSwgQm9vbGVhbik7XG4gICAgcmV0dXJuIEJvb2xlYW47XG59KF9xdWVzdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiUXVlc3Rpb25WdWVcIl0pKTtcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9idXR0b25ncm91cC52dWVcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvYnV0dG9uZ3JvdXAudnVlICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogQnV0dG9uR3JvdXAsIGRlZmF1bHQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2J1dHRvbmdyb3VwX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF82YmRjN2FiYl9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYnV0dG9uZ3JvdXAudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTZiZGM3YWJiJiAqLyBcIi4vc3JjL3Z1ZS9idXR0b25ncm91cC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NmJkYzdhYmImXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9idXR0b25ncm91cF92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2J1dHRvbmdyb3VwLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKi8gXCIuL3NyYy92dWUvYnV0dG9uZ3JvdXAudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkJ1dHRvbkdyb3VwXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2J1dHRvbmdyb3VwX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIkJ1dHRvbkdyb3VwXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCIpO1xuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGNvbXBvbmVudCA9IE9iamVjdChfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX3J1bnRpbWVfY29tcG9uZW50Tm9ybWFsaXplcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiZGVmYXVsdFwiXSkoXG4gIF9idXR0b25ncm91cF92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJkZWZhdWx0XCJdLFxuICBfYnV0dG9uZ3JvdXBfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzZiZGM3YWJiX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVuZGVyXCJdLFxuICBfYnV0dG9uZ3JvdXBfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzZiZGM3YWJiX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3RhdGljUmVuZGVyRm5zXCJdLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBhcGk7IH1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9idXR0b25ncm91cC52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChjb21wb25lbnQuZXhwb3J0cyk7XG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9idXR0b25ncm91cC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9idXR0b25ncm91cC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGRlZmF1bHQsIEJ1dHRvbkdyb3VwICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfYnV0dG9uZ3JvdXBfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9idXR0b25ncm91cC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICovIFwiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2J1dHRvbmdyb3VwLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJCdXR0b25Hcm91cFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfYnV0dG9uZ3JvdXBfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiQnV0dG9uR3JvdXBcIl07IH0pO1xuXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2J1dHRvbmdyb3VwX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcImRlZmF1bHRcIl0pOyBcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL2J1dHRvbmdyb3VwLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02YmRjN2FiYiZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL2J1dHRvbmdyb3VwLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02YmRjN2FiYiYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2J1dHRvbmdyb3VwX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF82YmRjN2FiYl9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2J1dHRvbmdyb3VwLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02YmRjN2FiYiYgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2J1dHRvbmdyb3VwLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02YmRjN2FiYiZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfYnV0dG9uZ3JvdXBfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzZiZGM3YWJiX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVuZGVyXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic3RhdGljUmVuZGVyRm5zXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2J1dHRvbmdyb3VwX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF82YmRjN2FiYl9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN0YXRpY1JlbmRlckZuc1wiXTsgfSk7XG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvYnV0dG9uZ3JvdXBpdGVtLnZ1ZVwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvYnV0dG9uZ3JvdXBpdGVtLnZ1ZSAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBCdXR0b25Hcm91cEl0ZW0sIGRlZmF1bHQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2J1dHRvbmdyb3VwaXRlbV92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfNGJhZDZhY2VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2J1dHRvbmdyb3VwaXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NGJhZDZhY2UmICovIFwiLi9zcmMvdnVlL2J1dHRvbmdyb3VwaXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NGJhZDZhY2UmXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9idXR0b25ncm91cGl0ZW1fdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9idXR0b25ncm91cGl0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqLyBcIi4vc3JjL3Z1ZS9idXR0b25ncm91cGl0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkJ1dHRvbkdyb3VwSXRlbVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9idXR0b25ncm91cGl0ZW1fdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiQnV0dG9uR3JvdXBJdGVtXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCIpO1xuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGNvbXBvbmVudCA9IE9iamVjdChfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX3J1bnRpbWVfY29tcG9uZW50Tm9ybWFsaXplcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiZGVmYXVsdFwiXSkoXG4gIF9idXR0b25ncm91cGl0ZW1fdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiZGVmYXVsdFwiXSxcbiAgX2J1dHRvbmdyb3VwaXRlbV92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfNGJhZDZhY2VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJyZW5kZXJcIl0sXG4gIF9idXR0b25ncm91cGl0ZW1fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzRiYWQ2YWNlX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3RhdGljUmVuZGVyRm5zXCJdLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBhcGk7IH1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9idXR0b25ncm91cGl0ZW0udnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoY29tcG9uZW50LmV4cG9ydHMpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvYnV0dG9uZ3JvdXBpdGVtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9idXR0b25ncm91cGl0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogZGVmYXVsdCwgQnV0dG9uR3JvdXBJdGVtICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfYnV0dG9uZ3JvdXBpdGVtX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vYnV0dG9uZ3JvdXBpdGVtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKi8gXCIuL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvYnV0dG9uZ3JvdXBpdGVtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJCdXR0b25Hcm91cEl0ZW1cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2J1dHRvbmdyb3VwaXRlbV92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJCdXR0b25Hcm91cEl0ZW1cIl07IH0pO1xuXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2J1dHRvbmdyb3VwaXRlbV92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJkZWZhdWx0XCJdKTsgXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9idXR0b25ncm91cGl0ZW0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTRiYWQ2YWNlJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL2J1dHRvbmdyb3VwaXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NGJhZDZhY2UmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfYnV0dG9uZ3JvdXBpdGVtX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF80YmFkNmFjZV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2J1dHRvbmdyb3VwaXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NGJhZDZhY2UmICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9idXR0b25ncm91cGl0ZW0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTRiYWQ2YWNlJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInJlbmRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19idXR0b25ncm91cGl0ZW1fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzRiYWQ2YWNlX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVuZGVyXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic3RhdGljUmVuZGVyRm5zXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2J1dHRvbmdyb3VwaXRlbV92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfNGJhZDZhY2VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl07IH0pO1xuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL2NoZWNrYm94LnZ1ZVwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9jaGVja2JveC52dWUgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBDaGVja2JveCwgZGVmYXVsdCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfY2hlY2tib3hfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkX2NhZDI3NmY2X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9jaGVja2JveC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9Y2FkMjc2ZjYmICovIFwiLi9zcmMvdnVlL2NoZWNrYm94LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1jYWQyNzZmNiZcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2NoZWNrYm94X3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vY2hlY2tib3gudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqLyBcIi4vc3JjL3Z1ZS9jaGVja2JveC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQ2hlY2tib3hcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY2hlY2tib3hfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiQ2hlY2tib3hcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9ydW50aW1lX2NvbXBvbmVudE5vcm1hbGl6ZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanMgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIik7XG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgY29tcG9uZW50ID0gT2JqZWN0KF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJkZWZhdWx0XCJdKShcbiAgX2NoZWNrYm94X3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcImRlZmF1bHRcIl0sXG4gIF9jaGVja2JveF92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfY2FkMjc2ZjZfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJyZW5kZXJcIl0sXG4gIF9jaGVja2JveF92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfY2FkMjc2ZjZfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl0sXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGFwaTsgfVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2NoZWNrYm94LnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKGNvbXBvbmVudC5leHBvcnRzKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL2NoZWNrYm94LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL2NoZWNrYm94LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogZGVmYXVsdCwgQ2hlY2tib3ggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19jaGVja2JveF92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAtIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXI/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2NoZWNrYm94LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKi8gXCIuL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvY2hlY2tib3gudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkNoZWNrYm94XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19jaGVja2JveF92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJDaGVja2JveFwiXTsgfSk7XG5cbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfY2hlY2tib3hfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiZGVmYXVsdFwiXSk7IFxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvY2hlY2tib3gudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWNhZDI3NmY2JlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvY2hlY2tib3gudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWNhZDI3NmY2JiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfY2hlY2tib3hfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkX2NhZDI3NmY2X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vY2hlY2tib3gudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWNhZDI3NmY2JiAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvY2hlY2tib3gudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWNhZDI3NmY2JlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInJlbmRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19jaGVja2JveF92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfY2FkMjc2ZjZfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJyZW5kZXJcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzdGF0aWNSZW5kZXJGbnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfY2hlY2tib3hfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkX2NhZDI3NmY2X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3RhdGljUmVuZGVyRm5zXCJdOyB9KTtcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9jaGVja2JveGl0ZW0udnVlXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9jaGVja2JveGl0ZW0udnVlICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IENoZWNrYm94SXRlbSwgZGVmYXVsdCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfY2hlY2tib3hpdGVtX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF9jNThjODBkMF9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vY2hlY2tib3hpdGVtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1jNThjODBkMCYgKi8gXCIuL3NyYy92dWUvY2hlY2tib3hpdGVtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1jNThjODBkMCZcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2NoZWNrYm94aXRlbV92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2NoZWNrYm94aXRlbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICovIFwiLi9zcmMvdnVlL2NoZWNrYm94aXRlbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQ2hlY2tib3hJdGVtXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NoZWNrYm94aXRlbV92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJDaGVja2JveEl0ZW1cIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9ydW50aW1lX2NvbXBvbmVudE5vcm1hbGl6ZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanMgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIik7XG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgY29tcG9uZW50ID0gT2JqZWN0KF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJkZWZhdWx0XCJdKShcbiAgX2NoZWNrYm94aXRlbV92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJkZWZhdWx0XCJdLFxuICBfY2hlY2tib3hpdGVtX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF9jNThjODBkMF9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInJlbmRlclwiXSxcbiAgX2NoZWNrYm94aXRlbV92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfYzU4YzgwZDBfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl0sXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGFwaTsgfVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2NoZWNrYm94aXRlbS52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChjb21wb25lbnQuZXhwb3J0cyk7XG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9jaGVja2JveGl0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL2NoZWNrYm94aXRlbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBkZWZhdWx0LCBDaGVja2JveEl0ZW0gKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19jaGVja2JveGl0ZW1fdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9jaGVja2JveGl0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqLyBcIi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9jaGVja2JveGl0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkNoZWNrYm94SXRlbVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfY2hlY2tib3hpdGVtX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkNoZWNrYm94SXRlbVwiXTsgfSk7XG5cbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfY2hlY2tib3hpdGVtX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcImRlZmF1bHRcIl0pOyBcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL2NoZWNrYm94aXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9YzU4YzgwZDAmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvY2hlY2tib3hpdGVtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1jNThjODBkMCYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19jaGVja2JveGl0ZW1fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkX2M1OGM4MGQwX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vY2hlY2tib3hpdGVtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1jNThjODBkMCYgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2NoZWNrYm94aXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9YzU4YzgwZDAmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwicmVuZGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2NoZWNrYm94aXRlbV92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfYzU4YzgwZDBfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJyZW5kZXJcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzdGF0aWNSZW5kZXJGbnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfY2hlY2tib3hpdGVtX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF9jNThjODBkMF9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN0YXRpY1JlbmRlckZuc1wiXTsgfSk7XG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvY29tbWVudC52dWVcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9jb21tZW50LnZ1ZSAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogQ29tbWVudCwgZGVmYXVsdCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfY29tbWVudF92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMDk5YzJjOGRfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2NvbW1lbnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTA5OWMyYzhkJiAqLyBcIi4vc3JjL3Z1ZS9jb21tZW50LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wOTljMmM4ZCZcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2NvbW1lbnRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9jb21tZW50LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKi8gXCIuL3NyYy92dWUvY29tbWVudC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQ29tbWVudFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb21tZW50X3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIkNvbW1lbnRcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9ydW50aW1lX2NvbXBvbmVudE5vcm1hbGl6ZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanMgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIik7XG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgY29tcG9uZW50ID0gT2JqZWN0KF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJkZWZhdWx0XCJdKShcbiAgX2NvbW1lbnRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiZGVmYXVsdFwiXSxcbiAgX2NvbW1lbnRfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzA5OWMyYzhkX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVuZGVyXCJdLFxuICBfY29tbWVudF92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMDk5YzJjOGRfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl0sXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGFwaTsgfVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2NvbW1lbnQudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoY29tcG9uZW50LmV4cG9ydHMpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvY29tbWVudC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL2NvbW1lbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGRlZmF1bHQsIENvbW1lbnQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19jb21tZW50X3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vY29tbWVudC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICovIFwiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2NvbW1lbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkNvbW1lbnRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2NvbW1lbnRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiQ29tbWVudFwiXTsgfSk7XG5cbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfY29tbWVudF92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJkZWZhdWx0XCJdKTsgXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9jb21tZW50LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wOTljMmM4ZCZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvY29tbWVudC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MDk5YzJjOGQmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2NvbW1lbnRfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzA5OWMyYzhkX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vY29tbWVudC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MDk5YzJjOGQmICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9jb21tZW50LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wOTljMmM4ZCZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfY29tbWVudF92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMDk5YzJjOGRfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJyZW5kZXJcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzdGF0aWNSZW5kZXJGbnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfY29tbWVudF92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMDk5YzJjOGRfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl07IH0pO1xuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24tYmFyLWl0ZW0tZHJvcGRvd24udnVlXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXItaXRlbS1kcm9wZG93bi52dWUgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEFjdGlvbkJhckl0ZW1Ecm9wZG93blZpZXdNb2RlbCwgZGVmYXVsdCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYWN0aW9uX2Jhcl9pdGVtX2Ryb3Bkb3duX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF80Y2E0ZjI3Nl9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYWN0aW9uLWJhci1pdGVtLWRyb3Bkb3duLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00Y2E0ZjI3NiYgKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXItaXRlbS1kcm9wZG93bi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NGNhNGYyNzYmXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9hY3Rpb25fYmFyX2l0ZW1fZHJvcGRvd25fdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9hY3Rpb24tYmFyLWl0ZW0tZHJvcGRvd24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLWJhci1pdGVtLWRyb3Bkb3duLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJBY3Rpb25CYXJJdGVtRHJvcGRvd25WaWV3TW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfYWN0aW9uX2Jhcl9pdGVtX2Ryb3Bkb3duX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIkFjdGlvbkJhckl0ZW1Ecm9wZG93blZpZXdNb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX3J1bnRpbWVfY29tcG9uZW50Tm9ybWFsaXplcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qcyAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiKTtcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBjb21wb25lbnQgPSBPYmplY3QoX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9ydW50aW1lX2NvbXBvbmVudE5vcm1hbGl6ZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcImRlZmF1bHRcIl0pKFxuICBfYWN0aW9uX2Jhcl9pdGVtX2Ryb3Bkb3duX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcImRlZmF1bHRcIl0sXG4gIF9hY3Rpb25fYmFyX2l0ZW1fZHJvcGRvd25fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzRjYTRmMjc2X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVuZGVyXCJdLFxuICBfYWN0aW9uX2Jhcl9pdGVtX2Ryb3Bkb3duX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF80Y2E0ZjI3Nl9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN0YXRpY1JlbmRlckZuc1wiXSxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgYXBpOyB9XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXItaXRlbS1kcm9wZG93bi52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChjb21wb25lbnQuZXhwb3J0cyk7XG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLWJhci1pdGVtLWRyb3Bkb3duLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXItaXRlbS1kcm9wZG93bi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogZGVmYXVsdCwgQWN0aW9uQmFySXRlbURyb3Bkb3duVmlld01vZGVsICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfYWN0aW9uX2Jhcl9pdGVtX2Ryb3Bkb3duX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vYWN0aW9uLWJhci1pdGVtLWRyb3Bkb3duLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKi8gXCIuL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXItaXRlbS1kcm9wZG93bi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQWN0aW9uQmFySXRlbURyb3Bkb3duVmlld01vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19hY3Rpb25fYmFyX2l0ZW1fZHJvcGRvd25fdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiQWN0aW9uQmFySXRlbURyb3Bkb3duVmlld01vZGVsXCJdOyB9KTtcblxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19hY3Rpb25fYmFyX2l0ZW1fZHJvcGRvd25fdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiZGVmYXVsdFwiXSk7IFxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXItaXRlbS1kcm9wZG93bi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NGNhNGYyNzYmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24tYmFyLWl0ZW0tZHJvcGRvd24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTRjYTRmMjc2JiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19hY3Rpb25fYmFyX2l0ZW1fZHJvcGRvd25fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzRjYTRmMjc2X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vYWN0aW9uLWJhci1pdGVtLWRyb3Bkb3duLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00Y2E0ZjI3NiYgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24tYmFyLWl0ZW0tZHJvcGRvd24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTRjYTRmMjc2JlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInJlbmRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19hY3Rpb25fYmFyX2l0ZW1fZHJvcGRvd25fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzRjYTRmMjc2X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVuZGVyXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic3RhdGljUmVuZGVyRm5zXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2FjdGlvbl9iYXJfaXRlbV9kcm9wZG93bl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfNGNhNGYyNzZfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl07IH0pO1xuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24tYmFyLWl0ZW0udnVlXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXItaXRlbS52dWUgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEFjdGlvbkJhckl0ZW1WaWV3TW9kZWwsIGRlZmF1bHQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2FjdGlvbl9iYXJfaXRlbV92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfNDBhMDU2ZjhfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2FjdGlvbi1iYXItaXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NDBhMDU2ZjgmICovIFwiLi9zcmMvdnVlL2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24tYmFyLWl0ZW0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTQwYTA1NmY4JlwiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYWN0aW9uX2Jhcl9pdGVtX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYWN0aW9uLWJhci1pdGVtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXItaXRlbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQWN0aW9uQmFySXRlbVZpZXdNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9hY3Rpb25fYmFyX2l0ZW1fdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiQWN0aW9uQmFySXRlbVZpZXdNb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX3J1bnRpbWVfY29tcG9uZW50Tm9ybWFsaXplcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qcyAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiKTtcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBjb21wb25lbnQgPSBPYmplY3QoX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9ydW50aW1lX2NvbXBvbmVudE5vcm1hbGl6ZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcImRlZmF1bHRcIl0pKFxuICBfYWN0aW9uX2Jhcl9pdGVtX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcImRlZmF1bHRcIl0sXG4gIF9hY3Rpb25fYmFyX2l0ZW1fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzQwYTA1NmY4X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVuZGVyXCJdLFxuICBfYWN0aW9uX2Jhcl9pdGVtX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF80MGEwNTZmOF9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN0YXRpY1JlbmRlckZuc1wiXSxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgYXBpOyB9XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXItaXRlbS52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChjb21wb25lbnQuZXhwb3J0cyk7XG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLWJhci1pdGVtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXItaXRlbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogZGVmYXVsdCwgQWN0aW9uQmFySXRlbVZpZXdNb2RlbCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2FjdGlvbl9iYXJfaXRlbV92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAtIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXI/P3JlZi0tMCEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2FjdGlvbi1iYXItaXRlbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICovIFwiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24tYmFyLWl0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkFjdGlvbkJhckl0ZW1WaWV3TW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2FjdGlvbl9iYXJfaXRlbV92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJBY3Rpb25CYXJJdGVtVmlld01vZGVsXCJdOyB9KTtcblxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19hY3Rpb25fYmFyX2l0ZW1fdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiZGVmYXVsdFwiXSk7IFxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXItaXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NDBhMDU2ZjgmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24tYmFyLWl0ZW0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTQwYTA1NmY4JiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19hY3Rpb25fYmFyX2l0ZW1fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzQwYTA1NmY4X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vYWN0aW9uLWJhci1pdGVtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00MGEwNTZmOCYgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24tYmFyLWl0ZW0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTQwYTA1NmY4JlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInJlbmRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19hY3Rpb25fYmFyX2l0ZW1fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzQwYTA1NmY4X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVuZGVyXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic3RhdGljUmVuZGVyRm5zXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2FjdGlvbl9iYXJfaXRlbV92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfNDBhMDU2ZjhfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl07IH0pO1xuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24tYmFyLXNlcGFyYXRvci52dWVcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24tYmFyLXNlcGFyYXRvci52dWUgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogQWN0aW9uQmFyU2VwYXJhdG9yVmlld01vZGVsLCBkZWZhdWx0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9hY3Rpb25fYmFyX3NlcGFyYXRvcl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMWFhYjY4NTBfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2FjdGlvbi1iYXItc2VwYXJhdG9yLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xYWFiNjg1MCYgKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXItc2VwYXJhdG9yLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xYWFiNjg1MCZcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2FjdGlvbl9iYXJfc2VwYXJhdG9yX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYWN0aW9uLWJhci1zZXBhcmF0b3IudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLWJhci1zZXBhcmF0b3IudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkFjdGlvbkJhclNlcGFyYXRvclZpZXdNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9hY3Rpb25fYmFyX3NlcGFyYXRvcl92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJBY3Rpb25CYXJTZXBhcmF0b3JWaWV3TW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9ydW50aW1lX2NvbXBvbmVudE5vcm1hbGl6ZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanMgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIik7XG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgY29tcG9uZW50ID0gT2JqZWN0KF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJkZWZhdWx0XCJdKShcbiAgX2FjdGlvbl9iYXJfc2VwYXJhdG9yX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcImRlZmF1bHRcIl0sXG4gIF9hY3Rpb25fYmFyX3NlcGFyYXRvcl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMWFhYjY4NTBfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJyZW5kZXJcIl0sXG4gIF9hY3Rpb25fYmFyX3NlcGFyYXRvcl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMWFhYjY4NTBfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl0sXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGFwaTsgfVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24tYmFyLXNlcGFyYXRvci52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChjb21wb25lbnQuZXhwb3J0cyk7XG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLWJhci1zZXBhcmF0b3IudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24tYmFyLXNlcGFyYXRvci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBkZWZhdWx0LCBBY3Rpb25CYXJTZXBhcmF0b3JWaWV3TW9kZWwgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19hY3Rpb25fYmFyX3NlcGFyYXRvcl92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAtIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXI/P3JlZi0tMCEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2FjdGlvbi1iYXItc2VwYXJhdG9yLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKi8gXCIuL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXItc2VwYXJhdG9yLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJBY3Rpb25CYXJTZXBhcmF0b3JWaWV3TW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2FjdGlvbl9iYXJfc2VwYXJhdG9yX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkFjdGlvbkJhclNlcGFyYXRvclZpZXdNb2RlbFwiXTsgfSk7XG5cbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfYWN0aW9uX2Jhcl9zZXBhcmF0b3JfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiZGVmYXVsdFwiXSk7IFxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXItc2VwYXJhdG9yLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xYWFiNjg1MCZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLWJhci1zZXBhcmF0b3IudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTFhYWI2ODUwJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2FjdGlvbl9iYXJfc2VwYXJhdG9yX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF8xYWFiNjg1MF9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2FjdGlvbi1iYXItc2VwYXJhdG9yLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xYWFiNjg1MCYgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24tYmFyLXNlcGFyYXRvci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MWFhYjY4NTAmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwicmVuZGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2FjdGlvbl9iYXJfc2VwYXJhdG9yX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF8xYWFiNjg1MF9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInJlbmRlclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19hY3Rpb25fYmFyX3NlcGFyYXRvcl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMWFhYjY4NTBfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl07IH0pO1xuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24tYmFyLnZ1ZVwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLWJhci52dWUgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBBY3Rpb25WaWV3TW9kZWwsIEFjdGlvbkJhckl0ZW1WaWV3TW9kZWwsIEFjdGlvbkJhckl0ZW1Ecm9wZG93blZpZXdNb2RlbCwgQWN0aW9uQmFyU2VwYXJhdG9yVmlld01vZGVsLCBBY3Rpb25CYXJWaWV3TW9kZWwsIGRlZmF1bHQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2FjdGlvbl9iYXJfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzMxM2JmMjEwX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9hY3Rpb24tYmFyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zMTNiZjIxMCYgKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTMxM2JmMjEwJlwiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYWN0aW9uX2Jhcl92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2FjdGlvbi1iYXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLWJhci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQWN0aW9uVmlld01vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2FjdGlvbl9iYXJfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiQWN0aW9uVmlld01vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQWN0aW9uQmFySXRlbVZpZXdNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9hY3Rpb25fYmFyX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIkFjdGlvbkJhckl0ZW1WaWV3TW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJBY3Rpb25CYXJJdGVtRHJvcGRvd25WaWV3TW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfYWN0aW9uX2Jhcl92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJBY3Rpb25CYXJJdGVtRHJvcGRvd25WaWV3TW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJBY3Rpb25CYXJTZXBhcmF0b3JWaWV3TW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfYWN0aW9uX2Jhcl92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJBY3Rpb25CYXJTZXBhcmF0b3JWaWV3TW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJBY3Rpb25CYXJWaWV3TW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfYWN0aW9uX2Jhcl92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJBY3Rpb25CYXJWaWV3TW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9ydW50aW1lX2NvbXBvbmVudE5vcm1hbGl6ZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanMgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIik7XG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgY29tcG9uZW50ID0gT2JqZWN0KF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJkZWZhdWx0XCJdKShcbiAgX2FjdGlvbl9iYXJfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiZGVmYXVsdFwiXSxcbiAgX2FjdGlvbl9iYXJfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzMxM2JmMjEwX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVuZGVyXCJdLFxuICBfYWN0aW9uX2Jhcl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMzEzYmYyMTBfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl0sXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGFwaTsgfVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24tYmFyLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKGNvbXBvbmVudC5leHBvcnRzKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24tYmFyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24tYmFyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogZGVmYXVsdCwgQWN0aW9uVmlld01vZGVsLCBBY3Rpb25CYXJJdGVtVmlld01vZGVsLCBBY3Rpb25CYXJJdGVtRHJvcGRvd25WaWV3TW9kZWwsIEFjdGlvbkJhclNlcGFyYXRvclZpZXdNb2RlbCwgQWN0aW9uQmFyVmlld01vZGVsICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfYWN0aW9uX2Jhcl92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAtIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXI/P3JlZi0tMCEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2FjdGlvbi1iYXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqLyBcIi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLWJhci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQWN0aW9uVmlld01vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19hY3Rpb25fYmFyX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkFjdGlvblZpZXdNb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkFjdGlvbkJhckl0ZW1WaWV3TW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2FjdGlvbl9iYXJfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiQWN0aW9uQmFySXRlbVZpZXdNb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkFjdGlvbkJhckl0ZW1Ecm9wZG93blZpZXdNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfYWN0aW9uX2Jhcl92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJBY3Rpb25CYXJJdGVtRHJvcGRvd25WaWV3TW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJBY3Rpb25CYXJTZXBhcmF0b3JWaWV3TW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2FjdGlvbl9iYXJfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiQWN0aW9uQmFyU2VwYXJhdG9yVmlld01vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQWN0aW9uQmFyVmlld01vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19hY3Rpb25fYmFyX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkFjdGlvbkJhclZpZXdNb2RlbFwiXTsgfSk7XG5cbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfYWN0aW9uX2Jhcl92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJkZWZhdWx0XCJdKTsgXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLWJhci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MzEzYmYyMTAmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLWJhci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MzEzYmYyMTAmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19hY3Rpb25fYmFyX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF8zMTNiZjIxMF9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2FjdGlvbi1iYXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTMxM2JmMjEwJiAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTMxM2JmMjEwJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInJlbmRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19hY3Rpb25fYmFyX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF8zMTNiZjIxMF9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInJlbmRlclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19hY3Rpb25fYmFyX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF8zMTNiZjIxMF9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN0YXRpY1JlbmRlckZuc1wiXTsgfSk7XG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi52dWVcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLnZ1ZSAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogQWN0aW9uVmlld01vZGVsLCBkZWZhdWx0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9hY3Rpb25fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzJmZTU0NjMyX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9hY3Rpb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTJmZTU0NjMyJiAqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yZmU1NDYzMiZcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2FjdGlvbl92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2FjdGlvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICovIFwiLi9zcmMvdnVlL2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkFjdGlvblZpZXdNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9hY3Rpb25fdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiQWN0aW9uVmlld01vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCIpO1xuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGNvbXBvbmVudCA9IE9iamVjdChfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX3J1bnRpbWVfY29tcG9uZW50Tm9ybWFsaXplcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiZGVmYXVsdFwiXSkoXG4gIF9hY3Rpb25fdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiZGVmYXVsdFwiXSxcbiAgX2FjdGlvbl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMmZlNTQ2MzJfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJyZW5kZXJcIl0sXG4gIF9hY3Rpb25fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzJmZTU0NjMyX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3RhdGljUmVuZGVyRm5zXCJdLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBhcGk7IH1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKGNvbXBvbmVudC5leHBvcnRzKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBkZWZhdWx0LCBBY3Rpb25WaWV3TW9kZWwgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19hY3Rpb25fdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyPz9yZWYtLTAhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9hY3Rpb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqLyBcIi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJBY3Rpb25WaWV3TW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2FjdGlvbl92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJBY3Rpb25WaWV3TW9kZWxcIl07IH0pO1xuXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2FjdGlvbl92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJkZWZhdWx0XCJdKTsgXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yZmU1NDYzMiZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MmZlNTQ2MzImICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2FjdGlvbl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMmZlNTQ2MzJfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAtIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9hY3Rpb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTJmZTU0NjMyJiAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MmZlNTQ2MzImXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwicmVuZGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2FjdGlvbl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMmZlNTQ2MzJfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJyZW5kZXJcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzdGF0aWNSZW5kZXJGbnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfYWN0aW9uX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF8yZmU1NDYzMl9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN0YXRpY1JlbmRlckZuc1wiXTsgfSk7XG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9icmFuZC1pbmZvLnZ1ZVwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvY29tcG9uZW50cy9icmFuZC1pbmZvLnZ1ZSAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBCcmFuZEluZm8sIGRlZmF1bHQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2JyYW5kX2luZm9fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzI2MTZiNDdiX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9icmFuZC1pbmZvLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yNjE2YjQ3YiYgKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9icmFuZC1pbmZvLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yNjE2YjQ3YiZcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2JyYW5kX2luZm9fdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9icmFuZC1pbmZvLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9icmFuZC1pbmZvLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJCcmFuZEluZm9cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfYnJhbmRfaW5mb192dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJCcmFuZEluZm9cIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9ydW50aW1lX2NvbXBvbmVudE5vcm1hbGl6ZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanMgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIik7XG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgY29tcG9uZW50ID0gT2JqZWN0KF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJkZWZhdWx0XCJdKShcbiAgX2JyYW5kX2luZm9fdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiZGVmYXVsdFwiXSxcbiAgX2JyYW5kX2luZm9fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzI2MTZiNDdiX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVuZGVyXCJdLFxuICBfYnJhbmRfaW5mb192dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMjYxNmI0N2JfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl0sXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGFwaTsgfVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2NvbXBvbmVudHMvYnJhbmQtaW5mby52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChjb21wb25lbnQuZXhwb3J0cyk7XG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL2JyYW5kLWluZm8udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL2NvbXBvbmVudHMvYnJhbmQtaW5mby52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBkZWZhdWx0LCBCcmFuZEluZm8gKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19icmFuZF9pbmZvX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vYnJhbmQtaW5mby52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICovIFwiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2NvbXBvbmVudHMvYnJhbmQtaW5mby52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQnJhbmRJbmZvXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19icmFuZF9pbmZvX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkJyYW5kSW5mb1wiXTsgfSk7XG5cbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfYnJhbmRfaW5mb192dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJkZWZhdWx0XCJdKTsgXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL2JyYW5kLWluZm8udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTI2MTZiNDdiJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL2NvbXBvbmVudHMvYnJhbmQtaW5mby52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MjYxNmI0N2ImICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfYnJhbmRfaW5mb192dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMjYxNmI0N2JfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAtIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9icmFuZC1pbmZvLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yNjE2YjQ3YiYgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2NvbXBvbmVudHMvYnJhbmQtaW5mby52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MjYxNmI0N2ImXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwicmVuZGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2JyYW5kX2luZm9fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzI2MTZiNDdiX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVuZGVyXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic3RhdGljUmVuZGVyRm5zXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2JyYW5kX2luZm9fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzI2MTZiNDdiX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3RhdGljUmVuZGVyRm5zXCJdOyB9KTtcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL2NoYXJhY3Rlci1jb3VudGVyLnZ1ZVwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL2NvbXBvbmVudHMvY2hhcmFjdGVyLWNvdW50ZXIudnVlICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBDaGFyYWN0ZXJDb3VudGVyQ29tcG9uZW50LCBkZWZhdWx0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9jaGFyYWN0ZXJfY291bnRlcl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfN2M4MGNhNjFfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2NoYXJhY3Rlci1jb3VudGVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03YzgwY2E2MSYgKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9jaGFyYWN0ZXItY291bnRlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9N2M4MGNhNjEmXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9jaGFyYWN0ZXJfY291bnRlcl92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2NoYXJhY3Rlci1jb3VudGVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9jaGFyYWN0ZXItY291bnRlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQ2hhcmFjdGVyQ291bnRlckNvbXBvbmVudFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jaGFyYWN0ZXJfY291bnRlcl92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJDaGFyYWN0ZXJDb3VudGVyQ29tcG9uZW50XCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCIpO1xuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGNvbXBvbmVudCA9IE9iamVjdChfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX3J1bnRpbWVfY29tcG9uZW50Tm9ybWFsaXplcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiZGVmYXVsdFwiXSkoXG4gIF9jaGFyYWN0ZXJfY291bnRlcl92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJkZWZhdWx0XCJdLFxuICBfY2hhcmFjdGVyX2NvdW50ZXJfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzdjODBjYTYxX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVuZGVyXCJdLFxuICBfY2hhcmFjdGVyX2NvdW50ZXJfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzdjODBjYTYxX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3RhdGljUmVuZGVyRm5zXCJdLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBhcGk7IH1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9jb21wb25lbnRzL2NoYXJhY3Rlci1jb3VudGVyLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKGNvbXBvbmVudC5leHBvcnRzKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL2NvbXBvbmVudHMvY2hhcmFjdGVyLWNvdW50ZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9jb21wb25lbnRzL2NoYXJhY3Rlci1jb3VudGVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBkZWZhdWx0LCBDaGFyYWN0ZXJDb3VudGVyQ29tcG9uZW50ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfY2hhcmFjdGVyX2NvdW50ZXJfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyPz9yZWYtLTAhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9jaGFyYWN0ZXItY291bnRlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICovIFwiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2NvbXBvbmVudHMvY2hhcmFjdGVyLWNvdW50ZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkNoYXJhY3RlckNvdW50ZXJDb21wb25lbnRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2NoYXJhY3Rlcl9jb3VudGVyX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkNoYXJhY3RlckNvdW50ZXJDb21wb25lbnRcIl07IH0pO1xuXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2NoYXJhY3Rlcl9jb3VudGVyX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcImRlZmF1bHRcIl0pOyBcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL2NvbXBvbmVudHMvY2hhcmFjdGVyLWNvdW50ZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTdjODBjYTYxJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9jb21wb25lbnRzL2NoYXJhY3Rlci1jb3VudGVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03YzgwY2E2MSYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfY2hhcmFjdGVyX2NvdW50ZXJfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzdjODBjYTYxX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vY2hhcmFjdGVyLWNvdW50ZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTdjODBjYTYxJiAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvY29tcG9uZW50cy9jaGFyYWN0ZXItY291bnRlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9N2M4MGNhNjEmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwicmVuZGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2NoYXJhY3Rlcl9jb3VudGVyX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF83YzgwY2E2MV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInJlbmRlclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19jaGFyYWN0ZXJfY291bnRlcl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfN2M4MGNhNjFfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl07IH0pO1xuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL2NvbXBvbmVudHMvY29udGFpbmVyLnZ1ZVwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9jb21wb25lbnRzL2NvbnRhaW5lci52dWUgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBDb21wb25lbnRzQ29udGFpbmVyLCBkZWZhdWx0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9jb250YWluZXJfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzJiNDRhMDBhX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9jb250YWluZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTJiNDRhMDBhJiAqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL2NvbnRhaW5lci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MmI0NGEwMGEmXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9jb250YWluZXJfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9jb250YWluZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL2NvbnRhaW5lci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQ29tcG9uZW50c0NvbnRhaW5lclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb250YWluZXJfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiQ29tcG9uZW50c0NvbnRhaW5lclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX3J1bnRpbWVfY29tcG9uZW50Tm9ybWFsaXplcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qcyAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiKTtcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBjb21wb25lbnQgPSBPYmplY3QoX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9ydW50aW1lX2NvbXBvbmVudE5vcm1hbGl6ZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcImRlZmF1bHRcIl0pKFxuICBfY29udGFpbmVyX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcImRlZmF1bHRcIl0sXG4gIF9jb250YWluZXJfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzJiNDRhMDBhX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVuZGVyXCJdLFxuICBfY29udGFpbmVyX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF8yYjQ0YTAwYV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN0YXRpY1JlbmRlckZuc1wiXSxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgYXBpOyB9XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvY29tcG9uZW50cy9jb250YWluZXIudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoY29tcG9uZW50LmV4cG9ydHMpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9jb250YWluZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvY29tcG9uZW50cy9jb250YWluZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBkZWZhdWx0LCBDb21wb25lbnRzQ29udGFpbmVyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfY29udGFpbmVyX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vY29udGFpbmVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKi8gXCIuL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvY29tcG9uZW50cy9jb250YWluZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkNvbXBvbmVudHNDb250YWluZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2NvbnRhaW5lcl92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJDb21wb25lbnRzQ29udGFpbmVyXCJdOyB9KTtcblxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19jb250YWluZXJfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiZGVmYXVsdFwiXSk7IFxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9jb250YWluZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTJiNDRhMDBhJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvY29tcG9uZW50cy9jb250YWluZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTJiNDRhMDBhJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfY29udGFpbmVyX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF8yYjQ0YTAwYV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2NvbnRhaW5lci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MmI0NGEwMGEmICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9jb21wb25lbnRzL2NvbnRhaW5lci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MmI0NGEwMGEmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwicmVuZGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2NvbnRhaW5lcl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMmI0NGEwMGFfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJyZW5kZXJcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzdGF0aWNSZW5kZXJGbnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfY29udGFpbmVyX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF8yYjQ0YTAwYV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN0YXRpY1JlbmRlckZuc1wiXTsgfSk7XG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9jb3Zlci9jb3Zlci1jZWxsLnZ1ZVwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvY29tcG9uZW50cy9jb3Zlci9jb3Zlci1jZWxsLnZ1ZSAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBDb3ZlckNlbGxWaWV3TW9kZWwsIGRlZmF1bHQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2NvdmVyX2NlbGxfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzM2Mjk3NzE3X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9jb3Zlci1jZWxsLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zNjI5NzcxNyYgKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9jb3Zlci9jb3Zlci1jZWxsLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zNjI5NzcxNyZcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2NvdmVyX2NlbGxfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9jb3Zlci1jZWxsLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9jb3Zlci9jb3Zlci1jZWxsLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJDb3ZlckNlbGxWaWV3TW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY292ZXJfY2VsbF92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJDb3ZlckNlbGxWaWV3TW9kZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9ydW50aW1lX2NvbXBvbmVudE5vcm1hbGl6ZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanMgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIik7XG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgY29tcG9uZW50ID0gT2JqZWN0KF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJkZWZhdWx0XCJdKShcbiAgX2NvdmVyX2NlbGxfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiZGVmYXVsdFwiXSxcbiAgX2NvdmVyX2NlbGxfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzM2Mjk3NzE3X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVuZGVyXCJdLFxuICBfY292ZXJfY2VsbF92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMzYyOTc3MTdfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl0sXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGFwaTsgfVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2NvbXBvbmVudHMvY292ZXIvY292ZXItY2VsbC52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChjb21wb25lbnQuZXhwb3J0cyk7XG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL2NvdmVyL2NvdmVyLWNlbGwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL2NvbXBvbmVudHMvY292ZXIvY292ZXItY2VsbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBkZWZhdWx0LCBDb3ZlckNlbGxWaWV3TW9kZWwgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19jb3Zlcl9jZWxsX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vY292ZXItY2VsbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICovIFwiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2NvbXBvbmVudHMvY292ZXIvY292ZXItY2VsbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQ292ZXJDZWxsVmlld01vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19jb3Zlcl9jZWxsX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkNvdmVyQ2VsbFZpZXdNb2RlbFwiXTsgfSk7XG5cbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfY292ZXJfY2VsbF92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJkZWZhdWx0XCJdKTsgXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL2NvdmVyL2NvdmVyLWNlbGwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTM2Mjk3NzE3JlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL2NvbXBvbmVudHMvY292ZXIvY292ZXItY2VsbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MzYyOTc3MTcmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfY292ZXJfY2VsbF92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMzYyOTc3MTdfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAtIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9jb3Zlci1jZWxsLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zNjI5NzcxNyYgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2NvbXBvbmVudHMvY292ZXIvY292ZXItY2VsbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MzYyOTc3MTcmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwicmVuZGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2NvdmVyX2NlbGxfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzM2Mjk3NzE3X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVuZGVyXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic3RhdGljUmVuZGVyRm5zXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2NvdmVyX2NlbGxfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzM2Mjk3NzE3X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3RhdGljUmVuZGVyRm5zXCJdOyB9KTtcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL2NvdmVyL2NvdmVyLnZ1ZVwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL2NvbXBvbmVudHMvY292ZXIvY292ZXIudnVlICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBDb3ZlckNlbGxWaWV3TW9kZWwsIENvdmVyVmlld01vZGVsLCBkZWZhdWx0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9jb3Zlcl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfNGU2MmI4YjBfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2NvdmVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00ZTYyYjhiMCYgKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9jb3Zlci9jb3Zlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NGU2MmI4YjAmXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9jb3Zlcl92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2NvdmVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9jb3Zlci9jb3Zlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQ292ZXJDZWxsVmlld01vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvdmVyX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIkNvdmVyQ2VsbFZpZXdNb2RlbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkNvdmVyVmlld01vZGVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvdmVyX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIkNvdmVyVmlld01vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCIpO1xuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGNvbXBvbmVudCA9IE9iamVjdChfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX3J1bnRpbWVfY29tcG9uZW50Tm9ybWFsaXplcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiZGVmYXVsdFwiXSkoXG4gIF9jb3Zlcl92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJkZWZhdWx0XCJdLFxuICBfY292ZXJfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzRlNjJiOGIwX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVuZGVyXCJdLFxuICBfY292ZXJfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzRlNjJiOGIwX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3RhdGljUmVuZGVyRm5zXCJdLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBhcGk7IH1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9jb21wb25lbnRzL2NvdmVyL2NvdmVyLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKGNvbXBvbmVudC5leHBvcnRzKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL2NvbXBvbmVudHMvY292ZXIvY292ZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9jb21wb25lbnRzL2NvdmVyL2NvdmVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBkZWZhdWx0LCBDb3ZlckNlbGxWaWV3TW9kZWwsIENvdmVyVmlld01vZGVsICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfY292ZXJfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyPz9yZWYtLTAhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9jb3Zlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICovIFwiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2NvbXBvbmVudHMvY292ZXIvY292ZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkNvdmVyQ2VsbFZpZXdNb2RlbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfY292ZXJfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiQ292ZXJDZWxsVmlld01vZGVsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQ292ZXJWaWV3TW9kZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2NvdmVyX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkNvdmVyVmlld01vZGVsXCJdOyB9KTtcblxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19jb3Zlcl92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJkZWZhdWx0XCJdKTsgXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL2NvdmVyL2NvdmVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00ZTYyYjhiMCZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvY29tcG9uZW50cy9jb3Zlci9jb3Zlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NGU2MmI4YjAmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2NvdmVyX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF80ZTYyYjhiMF9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2NvdmVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00ZTYyYjhiMCYgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2NvbXBvbmVudHMvY292ZXIvY292ZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTRlNjJiOGIwJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInJlbmRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19jb3Zlcl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfNGU2MmI4YjBfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJyZW5kZXJcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzdGF0aWNSZW5kZXJGbnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfY292ZXJfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzRlNjJiOGIwX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3RhdGljUmVuZGVyRm5zXCJdOyB9KTtcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL2Ryb3Bkb3duL2Ryb3Bkb3duLnZ1ZVwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL2NvbXBvbmVudHMvZHJvcGRvd24vZHJvcGRvd24udnVlICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBEcm9wZG93bkNvbXBvbmVudCwgZGVmYXVsdCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZHJvcGRvd25fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzM2MWZjMDUwX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9kcm9wZG93bi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MzYxZmMwNTAmICovIFwiLi9zcmMvdnVlL2NvbXBvbmVudHMvZHJvcGRvd24vZHJvcGRvd24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTM2MWZjMDUwJlwiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZHJvcGRvd25fdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9kcm9wZG93bi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICovIFwiLi9zcmMvdnVlL2NvbXBvbmVudHMvZHJvcGRvd24vZHJvcGRvd24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkRyb3Bkb3duQ29tcG9uZW50XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2Ryb3Bkb3duX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIkRyb3Bkb3duQ29tcG9uZW50XCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCIpO1xuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGNvbXBvbmVudCA9IE9iamVjdChfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX3J1bnRpbWVfY29tcG9uZW50Tm9ybWFsaXplcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiZGVmYXVsdFwiXSkoXG4gIF9kcm9wZG93bl92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJkZWZhdWx0XCJdLFxuICBfZHJvcGRvd25fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzM2MWZjMDUwX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVuZGVyXCJdLFxuICBfZHJvcGRvd25fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzM2MWZjMDUwX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3RhdGljUmVuZGVyRm5zXCJdLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBhcGk7IH1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9jb21wb25lbnRzL2Ryb3Bkb3duL2Ryb3Bkb3duLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKGNvbXBvbmVudC5leHBvcnRzKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL2NvbXBvbmVudHMvZHJvcGRvd24vZHJvcGRvd24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9jb21wb25lbnRzL2Ryb3Bkb3duL2Ryb3Bkb3duLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBkZWZhdWx0LCBEcm9wZG93bkNvbXBvbmVudCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2Ryb3Bkb3duX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vZHJvcGRvd24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqLyBcIi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9jb21wb25lbnRzL2Ryb3Bkb3duL2Ryb3Bkb3duLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJEcm9wZG93bkNvbXBvbmVudFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfZHJvcGRvd25fdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiRHJvcGRvd25Db21wb25lbnRcIl07IH0pO1xuXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2Ryb3Bkb3duX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcImRlZmF1bHRcIl0pOyBcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL2NvbXBvbmVudHMvZHJvcGRvd24vZHJvcGRvd24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTM2MWZjMDUwJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9jb21wb25lbnRzL2Ryb3Bkb3duL2Ryb3Bkb3duLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zNjFmYzA1MCYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfZHJvcGRvd25fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzM2MWZjMDUwX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vZHJvcGRvd24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTM2MWZjMDUwJiAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvY29tcG9uZW50cy9kcm9wZG93bi9kcm9wZG93bi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MzYxZmMwNTAmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwicmVuZGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2Ryb3Bkb3duX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF8zNjFmYzA1MF9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInJlbmRlclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19kcm9wZG93bl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMzYxZmMwNTBfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl07IH0pO1xuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL2NvbXBvbmVudHMvZHJvcGRvd24vb3B0aW9uLWl0ZW0udnVlXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvY29tcG9uZW50cy9kcm9wZG93bi9vcHRpb24taXRlbS52dWUgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IERyb3Bkb3duQ29tcG9uZW50LCBEcm9wZG93bk9wdGlvbkl0ZW0sIGRlZmF1bHQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX29wdGlvbl9pdGVtX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF8zNmI1NmU3NF9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vb3B0aW9uLWl0ZW0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTM2YjU2ZTc0JiAqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL2Ryb3Bkb3duL29wdGlvbi1pdGVtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zNmI1NmU3NCZcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX29wdGlvbl9pdGVtX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vb3B0aW9uLWl0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL2Ryb3Bkb3duL29wdGlvbi1pdGVtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJEcm9wZG93bkNvbXBvbmVudFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9vcHRpb25faXRlbV92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJEcm9wZG93bkNvbXBvbmVudFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkRyb3Bkb3duT3B0aW9uSXRlbVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9vcHRpb25faXRlbV92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJEcm9wZG93bk9wdGlvbkl0ZW1cIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9ydW50aW1lX2NvbXBvbmVudE5vcm1hbGl6ZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanMgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIik7XG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgY29tcG9uZW50ID0gT2JqZWN0KF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJkZWZhdWx0XCJdKShcbiAgX29wdGlvbl9pdGVtX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcImRlZmF1bHRcIl0sXG4gIF9vcHRpb25faXRlbV92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMzZiNTZlNzRfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJyZW5kZXJcIl0sXG4gIF9vcHRpb25faXRlbV92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMzZiNTZlNzRfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl0sXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGFwaTsgfVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2NvbXBvbmVudHMvZHJvcGRvd24vb3B0aW9uLWl0ZW0udnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoY29tcG9uZW50LmV4cG9ydHMpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9kcm9wZG93bi9vcHRpb24taXRlbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL2NvbXBvbmVudHMvZHJvcGRvd24vb3B0aW9uLWl0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGRlZmF1bHQsIERyb3Bkb3duQ29tcG9uZW50LCBEcm9wZG93bk9wdGlvbkl0ZW0gKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19vcHRpb25faXRlbV92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAtIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXI/P3JlZi0tMCEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL29wdGlvbi1pdGVtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKi8gXCIuL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvY29tcG9uZW50cy9kcm9wZG93bi9vcHRpb24taXRlbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiRHJvcGRvd25Db21wb25lbnRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX29wdGlvbl9pdGVtX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkRyb3Bkb3duQ29tcG9uZW50XCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiRHJvcGRvd25PcHRpb25JdGVtXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19vcHRpb25faXRlbV92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJEcm9wZG93bk9wdGlvbkl0ZW1cIl07IH0pO1xuXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX29wdGlvbl9pdGVtX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcImRlZmF1bHRcIl0pOyBcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL2NvbXBvbmVudHMvZHJvcGRvd24vb3B0aW9uLWl0ZW0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTM2YjU2ZTc0JlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9jb21wb25lbnRzL2Ryb3Bkb3duL29wdGlvbi1pdGVtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zNmI1NmU3NCYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfb3B0aW9uX2l0ZW1fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzM2YjU2ZTc0X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vb3B0aW9uLWl0ZW0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTM2YjU2ZTc0JiAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvY29tcG9uZW50cy9kcm9wZG93bi9vcHRpb24taXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MzZiNTZlNzQmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwicmVuZGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX29wdGlvbl9pdGVtX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF8zNmI1NmU3NF9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInJlbmRlclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19vcHRpb25faXRlbV92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMzZiNTZlNzRfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl07IH0pO1xuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL2NvbXBvbmVudHMvZmlsZS1hY3Rpb25zL2ZpbGUtY2hvb3NlLWJ1dHRvbi52dWVcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL2NvbXBvbmVudHMvZmlsZS1hY3Rpb25zL2ZpbGUtY2hvb3NlLWJ1dHRvbi52dWUgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogRmlsZUNob29zZUJ1dHRvbiwgZGVmYXVsdCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZmlsZV9jaG9vc2VfYnV0dG9uX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF83MjlkMWFhM19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZmlsZS1jaG9vc2UtYnV0dG9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03MjlkMWFhMyYgKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9maWxlLWFjdGlvbnMvZmlsZS1jaG9vc2UtYnV0dG9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03MjlkMWFhMyZcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2ZpbGVfY2hvb3NlX2J1dHRvbl92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2ZpbGUtY2hvb3NlLWJ1dHRvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICovIFwiLi9zcmMvdnVlL2NvbXBvbmVudHMvZmlsZS1hY3Rpb25zL2ZpbGUtY2hvb3NlLWJ1dHRvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiRmlsZUNob29zZUJ1dHRvblwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9maWxlX2Nob29zZV9idXR0b25fdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiRmlsZUNob29zZUJ1dHRvblwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX3J1bnRpbWVfY29tcG9uZW50Tm9ybWFsaXplcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qcyAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiKTtcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBjb21wb25lbnQgPSBPYmplY3QoX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9ydW50aW1lX2NvbXBvbmVudE5vcm1hbGl6ZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcImRlZmF1bHRcIl0pKFxuICBfZmlsZV9jaG9vc2VfYnV0dG9uX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcImRlZmF1bHRcIl0sXG4gIF9maWxlX2Nob29zZV9idXR0b25fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzcyOWQxYWEzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVuZGVyXCJdLFxuICBfZmlsZV9jaG9vc2VfYnV0dG9uX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF83MjlkMWFhM19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN0YXRpY1JlbmRlckZuc1wiXSxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgYXBpOyB9XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvY29tcG9uZW50cy9maWxlLWFjdGlvbnMvZmlsZS1jaG9vc2UtYnV0dG9uLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKGNvbXBvbmVudC5leHBvcnRzKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL2NvbXBvbmVudHMvZmlsZS1hY3Rpb25zL2ZpbGUtY2hvb3NlLWJ1dHRvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvY29tcG9uZW50cy9maWxlLWFjdGlvbnMvZmlsZS1jaG9vc2UtYnV0dG9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGRlZmF1bHQsIEZpbGVDaG9vc2VCdXR0b24gKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19maWxlX2Nob29zZV9idXR0b25fdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyPz9yZWYtLTAhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9maWxlLWNob29zZS1idXR0b24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqLyBcIi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9jb21wb25lbnRzL2ZpbGUtYWN0aW9ucy9maWxlLWNob29zZS1idXR0b24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkZpbGVDaG9vc2VCdXR0b25cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2ZpbGVfY2hvb3NlX2J1dHRvbl92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJGaWxlQ2hvb3NlQnV0dG9uXCJdOyB9KTtcblxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19maWxlX2Nob29zZV9idXR0b25fdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiZGVmYXVsdFwiXSk7IFxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9maWxlLWFjdGlvbnMvZmlsZS1jaG9vc2UtYnV0dG9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03MjlkMWFhMyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9jb21wb25lbnRzL2ZpbGUtYWN0aW9ucy9maWxlLWNob29zZS1idXR0b24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTcyOWQxYWEzJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2ZpbGVfY2hvb3NlX2J1dHRvbl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfNzI5ZDFhYTNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAtIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9maWxlLWNob29zZS1idXR0b24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTcyOWQxYWEzJiAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvY29tcG9uZW50cy9maWxlLWFjdGlvbnMvZmlsZS1jaG9vc2UtYnV0dG9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03MjlkMWFhMyZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfZmlsZV9jaG9vc2VfYnV0dG9uX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF83MjlkMWFhM19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInJlbmRlclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19maWxlX2Nob29zZV9idXR0b25fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzcyOWQxYWEzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3RhdGljUmVuZGVyRm5zXCJdOyB9KTtcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL2xpc3QvbGlzdC1pdGVtLnZ1ZVwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL2NvbXBvbmVudHMvbGlzdC9saXN0LWl0ZW0udnVlICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBMaXN0LCBMaXN0SXRlbSwgZGVmYXVsdCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbGlzdF9pdGVtX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF80ZmZmY2RmOF9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vbGlzdC1pdGVtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00ZmZmY2RmOCYgKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9saXN0L2xpc3QtaXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NGZmZmNkZjgmXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9saXN0X2l0ZW1fdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9saXN0LWl0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL2xpc3QvbGlzdC1pdGVtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJMaXN0XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2xpc3RfaXRlbV92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJMaXN0XCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiTGlzdEl0ZW1cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbGlzdF9pdGVtX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIkxpc3RJdGVtXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCIpO1xuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGNvbXBvbmVudCA9IE9iamVjdChfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX3J1bnRpbWVfY29tcG9uZW50Tm9ybWFsaXplcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiZGVmYXVsdFwiXSkoXG4gIF9saXN0X2l0ZW1fdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiZGVmYXVsdFwiXSxcbiAgX2xpc3RfaXRlbV92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfNGZmZmNkZjhfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJyZW5kZXJcIl0sXG4gIF9saXN0X2l0ZW1fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzRmZmZjZGY4X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3RhdGljUmVuZGVyRm5zXCJdLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBhcGk7IH1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9jb21wb25lbnRzL2xpc3QvbGlzdC1pdGVtLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKGNvbXBvbmVudC5leHBvcnRzKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL2NvbXBvbmVudHMvbGlzdC9saXN0LWl0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9jb21wb25lbnRzL2xpc3QvbGlzdC1pdGVtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBkZWZhdWx0LCBMaXN0LCBMaXN0SXRlbSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2xpc3RfaXRlbV92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAtIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXI/P3JlZi0tMCEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2xpc3QtaXRlbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICovIFwiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2NvbXBvbmVudHMvbGlzdC9saXN0LWl0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkxpc3RcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2xpc3RfaXRlbV92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJMaXN0XCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiTGlzdEl0ZW1cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2xpc3RfaXRlbV92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJMaXN0SXRlbVwiXTsgfSk7XG5cbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfbGlzdF9pdGVtX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcImRlZmF1bHRcIl0pOyBcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL2NvbXBvbmVudHMvbGlzdC9saXN0LWl0ZW0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTRmZmZjZGY4JlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9jb21wb25lbnRzL2xpc3QvbGlzdC1pdGVtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00ZmZmY2RmOCYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfbGlzdF9pdGVtX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF80ZmZmY2RmOF9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2xpc3QtaXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NGZmZmNkZjgmICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9jb21wb25lbnRzL2xpc3QvbGlzdC1pdGVtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00ZmZmY2RmOCZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfbGlzdF9pdGVtX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF80ZmZmY2RmOF9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInJlbmRlclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19saXN0X2l0ZW1fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzRmZmZjZGY4X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3RhdGljUmVuZGVyRm5zXCJdOyB9KTtcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL2xpc3QvbGlzdC52dWVcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvY29tcG9uZW50cy9saXN0L2xpc3QudnVlICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogTGlzdEl0ZW0sIExpc3QsIGRlZmF1bHQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2xpc3RfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkX2NjMTdhMDEwX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9saXN0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1jYzE3YTAxMCYgKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9saXN0L2xpc3QudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWNjMTdhMDEwJlwiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbGlzdF92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2xpc3QudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL2xpc3QvbGlzdC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiTGlzdEl0ZW1cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbGlzdF92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJMaXN0SXRlbVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkxpc3RcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbGlzdF92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJMaXN0XCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCIpO1xuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGNvbXBvbmVudCA9IE9iamVjdChfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX3J1bnRpbWVfY29tcG9uZW50Tm9ybWFsaXplcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiZGVmYXVsdFwiXSkoXG4gIF9saXN0X3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcImRlZmF1bHRcIl0sXG4gIF9saXN0X3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF9jYzE3YTAxMF9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInJlbmRlclwiXSxcbiAgX2xpc3RfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkX2NjMTdhMDEwX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3RhdGljUmVuZGVyRm5zXCJdLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBhcGk7IH1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9jb21wb25lbnRzL2xpc3QvbGlzdC52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChjb21wb25lbnQuZXhwb3J0cyk7XG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL2xpc3QvbGlzdC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9jb21wb25lbnRzL2xpc3QvbGlzdC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGRlZmF1bHQsIExpc3RJdGVtLCBMaXN0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfbGlzdF92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAtIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXI/P3JlZi0tMCEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2xpc3QudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqLyBcIi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9jb21wb25lbnRzL2xpc3QvbGlzdC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiTGlzdEl0ZW1cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2xpc3RfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiTGlzdEl0ZW1cIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJMaXN0XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19saXN0X3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkxpc3RcIl07IH0pO1xuXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2xpc3RfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiZGVmYXVsdFwiXSk7IFxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9saXN0L2xpc3QudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWNjMTdhMDEwJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvY29tcG9uZW50cy9saXN0L2xpc3QudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWNjMTdhMDEwJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfbGlzdF92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfY2MxN2EwMTBfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAtIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9saXN0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1jYzE3YTAxMCYgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2NvbXBvbmVudHMvbGlzdC9saXN0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1jYzE3YTAxMCZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfbGlzdF92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfY2MxN2EwMTBfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJyZW5kZXJcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzdGF0aWNSZW5kZXJGbnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfbGlzdF92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfY2MxN2EwMTBfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl07IH0pO1xuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL2NvbXBvbmVudHMvbG9hZGluZy1pbmRpY2F0b3IudnVlXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvY29tcG9uZW50cy9sb2FkaW5nLWluZGljYXRvci52dWUgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IExvYWRpbmdJbmRpY2F0b3JDb21wb25lbnQsIGRlZmF1bHQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2xvYWRpbmdfaW5kaWNhdG9yX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF9lODg3ZGE3Ml9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vbG9hZGluZy1pbmRpY2F0b3IudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWU4ODdkYTcyJiAqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL2xvYWRpbmctaW5kaWNhdG9yLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1lODg3ZGE3MiZcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2xvYWRpbmdfaW5kaWNhdG9yX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vbG9hZGluZy1pbmRpY2F0b3IudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL2xvYWRpbmctaW5kaWNhdG9yLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJMb2FkaW5nSW5kaWNhdG9yQ29tcG9uZW50XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2xvYWRpbmdfaW5kaWNhdG9yX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIkxvYWRpbmdJbmRpY2F0b3JDb21wb25lbnRcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9ydW50aW1lX2NvbXBvbmVudE5vcm1hbGl6ZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanMgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIik7XG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgY29tcG9uZW50ID0gT2JqZWN0KF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJkZWZhdWx0XCJdKShcbiAgX2xvYWRpbmdfaW5kaWNhdG9yX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcImRlZmF1bHRcIl0sXG4gIF9sb2FkaW5nX2luZGljYXRvcl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfZTg4N2RhNzJfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJyZW5kZXJcIl0sXG4gIF9sb2FkaW5nX2luZGljYXRvcl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfZTg4N2RhNzJfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl0sXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGFwaTsgfVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2NvbXBvbmVudHMvbG9hZGluZy1pbmRpY2F0b3IudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoY29tcG9uZW50LmV4cG9ydHMpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9sb2FkaW5nLWluZGljYXRvci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL2NvbXBvbmVudHMvbG9hZGluZy1pbmRpY2F0b3IudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGRlZmF1bHQsIExvYWRpbmdJbmRpY2F0b3JDb21wb25lbnQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19sb2FkaW5nX2luZGljYXRvcl92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAtIS4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXI/P3JlZi0tMCEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2xvYWRpbmctaW5kaWNhdG9yLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKi8gXCIuL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvY29tcG9uZW50cy9sb2FkaW5nLWluZGljYXRvci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiTG9hZGluZ0luZGljYXRvckNvbXBvbmVudFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfbG9hZGluZ19pbmRpY2F0b3JfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiTG9hZGluZ0luZGljYXRvckNvbXBvbmVudFwiXTsgfSk7XG5cbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfbG9hZGluZ19pbmRpY2F0b3JfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiZGVmYXVsdFwiXSk7IFxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9sb2FkaW5nLWluZGljYXRvci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZTg4N2RhNzImXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL2NvbXBvbmVudHMvbG9hZGluZy1pbmRpY2F0b3IudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWU4ODdkYTcyJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19sb2FkaW5nX2luZGljYXRvcl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfZTg4N2RhNzJfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAtIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9sb2FkaW5nLWluZGljYXRvci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZTg4N2RhNzImICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9jb21wb25lbnRzL2xvYWRpbmctaW5kaWNhdG9yLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1lODg3ZGE3MiZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfbG9hZGluZ19pbmRpY2F0b3JfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkX2U4ODdkYTcyX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVuZGVyXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic3RhdGljUmVuZGVyRm5zXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2xvYWRpbmdfaW5kaWNhdG9yX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF9lODg3ZGE3Ml9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN0YXRpY1JlbmRlckZuc1wiXTsgfSk7XG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9tYXRyaXgtYWN0aW9ucy9kZXRhaWwtYnV0dG9uL2RldGFpbC1idXR0b24udnVlXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL2NvbXBvbmVudHMvbWF0cml4LWFjdGlvbnMvZGV0YWlsLWJ1dHRvbi9kZXRhaWwtYnV0dG9uLnZ1ZSAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFN1cnZleVF1ZXN0aW9uTWF0cml4RGV0YWlsQnV0dG9uLCBkZWZhdWx0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9kZXRhaWxfYnV0dG9uX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF81YjRlNjliNl9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZGV0YWlsLWJ1dHRvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NWI0ZTY5YjYmICovIFwiLi9zcmMvdnVlL2NvbXBvbmVudHMvbWF0cml4LWFjdGlvbnMvZGV0YWlsLWJ1dHRvbi9kZXRhaWwtYnV0dG9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01YjRlNjliNiZcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2RldGFpbF9idXR0b25fdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9kZXRhaWwtYnV0dG9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9tYXRyaXgtYWN0aW9ucy9kZXRhaWwtYnV0dG9uL2RldGFpbC1idXR0b24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlN1cnZleVF1ZXN0aW9uTWF0cml4RGV0YWlsQnV0dG9uXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2RldGFpbF9idXR0b25fdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiU3VydmV5UXVlc3Rpb25NYXRyaXhEZXRhaWxCdXR0b25cIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9ydW50aW1lX2NvbXBvbmVudE5vcm1hbGl6ZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanMgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIik7XG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgY29tcG9uZW50ID0gT2JqZWN0KF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJkZWZhdWx0XCJdKShcbiAgX2RldGFpbF9idXR0b25fdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiZGVmYXVsdFwiXSxcbiAgX2RldGFpbF9idXR0b25fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzViNGU2OWI2X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVuZGVyXCJdLFxuICBfZGV0YWlsX2J1dHRvbl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfNWI0ZTY5YjZfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl0sXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGFwaTsgfVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2NvbXBvbmVudHMvbWF0cml4LWFjdGlvbnMvZGV0YWlsLWJ1dHRvbi9kZXRhaWwtYnV0dG9uLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKGNvbXBvbmVudC5leHBvcnRzKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL2NvbXBvbmVudHMvbWF0cml4LWFjdGlvbnMvZGV0YWlsLWJ1dHRvbi9kZXRhaWwtYnV0dG9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL2NvbXBvbmVudHMvbWF0cml4LWFjdGlvbnMvZGV0YWlsLWJ1dHRvbi9kZXRhaWwtYnV0dG9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogZGVmYXVsdCwgU3VydmV5UXVlc3Rpb25NYXRyaXhEZXRhaWxCdXR0b24gKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19kZXRhaWxfYnV0dG9uX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vZGV0YWlsLWJ1dHRvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICovIFwiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2NvbXBvbmVudHMvbWF0cml4LWFjdGlvbnMvZGV0YWlsLWJ1dHRvbi9kZXRhaWwtYnV0dG9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJTdXJ2ZXlRdWVzdGlvbk1hdHJpeERldGFpbEJ1dHRvblwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfZGV0YWlsX2J1dHRvbl92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJTdXJ2ZXlRdWVzdGlvbk1hdHJpeERldGFpbEJ1dHRvblwiXTsgfSk7XG5cbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfZGV0YWlsX2J1dHRvbl92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJkZWZhdWx0XCJdKTsgXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL21hdHJpeC1hY3Rpb25zL2RldGFpbC1idXR0b24vZGV0YWlsLWJ1dHRvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NWI0ZTY5YjYmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9jb21wb25lbnRzL21hdHJpeC1hY3Rpb25zL2RldGFpbC1idXR0b24vZGV0YWlsLWJ1dHRvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NWI0ZTY5YjYmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19kZXRhaWxfYnV0dG9uX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF81YjRlNjliNl9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2RldGFpbC1idXR0b24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTViNGU2OWI2JiAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvY29tcG9uZW50cy9tYXRyaXgtYWN0aW9ucy9kZXRhaWwtYnV0dG9uL2RldGFpbC1idXR0b24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTViNGU2OWI2JlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInJlbmRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19kZXRhaWxfYnV0dG9uX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF81YjRlNjliNl9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInJlbmRlclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19kZXRhaWxfYnV0dG9uX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF81YjRlNjliNl9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN0YXRpY1JlbmRlckZuc1wiXTsgfSk7XG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9tYXRyaXgtYWN0aW9ucy9kcmFnLWRyb3AtaWNvbi9kcmFnLWRyb3AtaWNvbi52dWVcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9jb21wb25lbnRzL21hdHJpeC1hY3Rpb25zL2RyYWctZHJvcC1pY29uL2RyYWctZHJvcC1pY29uLnZ1ZSAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogU3VydmV5UXVlc3Rpb25NYXRyaXhEeW5hbWljRHJhZ0Ryb3BJY29uLCBkZWZhdWx0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9kcmFnX2Ryb3BfaWNvbl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfNGY1NWQyOThfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2RyYWctZHJvcC1pY29uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00ZjU1ZDI5OCYgKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9tYXRyaXgtYWN0aW9ucy9kcmFnLWRyb3AtaWNvbi9kcmFnLWRyb3AtaWNvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NGY1NWQyOTgmXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9kcmFnX2Ryb3BfaWNvbl92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2RyYWctZHJvcC1pY29uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9tYXRyaXgtYWN0aW9ucy9kcmFnLWRyb3AtaWNvbi9kcmFnLWRyb3AtaWNvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiU3VydmV5UXVlc3Rpb25NYXRyaXhEeW5hbWljRHJhZ0Ryb3BJY29uXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2RyYWdfZHJvcF9pY29uX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlN1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pY0RyYWdEcm9wSWNvblwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX3J1bnRpbWVfY29tcG9uZW50Tm9ybWFsaXplcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qcyAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiKTtcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBjb21wb25lbnQgPSBPYmplY3QoX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9ydW50aW1lX2NvbXBvbmVudE5vcm1hbGl6ZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcImRlZmF1bHRcIl0pKFxuICBfZHJhZ19kcm9wX2ljb25fdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiZGVmYXVsdFwiXSxcbiAgX2RyYWdfZHJvcF9pY29uX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF80ZjU1ZDI5OF9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInJlbmRlclwiXSxcbiAgX2RyYWdfZHJvcF9pY29uX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF80ZjU1ZDI5OF9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN0YXRpY1JlbmRlckZuc1wiXSxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgYXBpOyB9XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvY29tcG9uZW50cy9tYXRyaXgtYWN0aW9ucy9kcmFnLWRyb3AtaWNvbi9kcmFnLWRyb3AtaWNvbi52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChjb21wb25lbnQuZXhwb3J0cyk7XG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL21hdHJpeC1hY3Rpb25zL2RyYWctZHJvcC1pY29uL2RyYWctZHJvcC1pY29uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvY29tcG9uZW50cy9tYXRyaXgtYWN0aW9ucy9kcmFnLWRyb3AtaWNvbi9kcmFnLWRyb3AtaWNvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogZGVmYXVsdCwgU3VydmV5UXVlc3Rpb25NYXRyaXhEeW5hbWljRHJhZ0Ryb3BJY29uICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfZHJhZ19kcm9wX2ljb25fdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyPz9yZWYtLTAhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9kcmFnLWRyb3AtaWNvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICovIFwiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2NvbXBvbmVudHMvbWF0cml4LWFjdGlvbnMvZHJhZy1kcm9wLWljb24vZHJhZy1kcm9wLWljb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlN1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pY0RyYWdEcm9wSWNvblwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfZHJhZ19kcm9wX2ljb25fdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiU3VydmV5UXVlc3Rpb25NYXRyaXhEeW5hbWljRHJhZ0Ryb3BJY29uXCJdOyB9KTtcblxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19kcmFnX2Ryb3BfaWNvbl92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJkZWZhdWx0XCJdKTsgXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL21hdHJpeC1hY3Rpb25zL2RyYWctZHJvcC1pY29uL2RyYWctZHJvcC1pY29uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00ZjU1ZDI5OCZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvY29tcG9uZW50cy9tYXRyaXgtYWN0aW9ucy9kcmFnLWRyb3AtaWNvbi9kcmFnLWRyb3AtaWNvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NGY1NWQyOTgmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2RyYWdfZHJvcF9pY29uX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF80ZjU1ZDI5OF9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2RyYWctZHJvcC1pY29uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00ZjU1ZDI5OCYgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2NvbXBvbmVudHMvbWF0cml4LWFjdGlvbnMvZHJhZy1kcm9wLWljb24vZHJhZy1kcm9wLWljb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTRmNTVkMjk4JlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInJlbmRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19kcmFnX2Ryb3BfaWNvbl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfNGY1NWQyOThfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJyZW5kZXJcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzdGF0aWNSZW5kZXJGbnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfZHJhZ19kcm9wX2ljb25fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzRmNTVkMjk4X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3RhdGljUmVuZGVyRm5zXCJdOyB9KTtcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL21hdHJpeC1hY3Rpb25zL3JlbW92ZS1idXR0b24vcmVtb3ZlLWJ1dHRvbi52dWVcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvY29tcG9uZW50cy9tYXRyaXgtYWN0aW9ucy9yZW1vdmUtYnV0dG9uL3JlbW92ZS1idXR0b24udnVlICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogU3VydmV5UXVlc3Rpb25NYXRyaXhEeW5hbWljUmVtb3ZlQnV0dG9uLCBkZWZhdWx0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9yZW1vdmVfYnV0dG9uX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF9jOGE3YWE2MF9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcmVtb3ZlLWJ1dHRvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9YzhhN2FhNjAmICovIFwiLi9zcmMvdnVlL2NvbXBvbmVudHMvbWF0cml4LWFjdGlvbnMvcmVtb3ZlLWJ1dHRvbi9yZW1vdmUtYnV0dG9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1jOGE3YWE2MCZcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3JlbW92ZV9idXR0b25fdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9yZW1vdmUtYnV0dG9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9tYXRyaXgtYWN0aW9ucy9yZW1vdmUtYnV0dG9uL3JlbW92ZS1idXR0b24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlN1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pY1JlbW92ZUJ1dHRvblwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9yZW1vdmVfYnV0dG9uX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlN1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pY1JlbW92ZUJ1dHRvblwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX3J1bnRpbWVfY29tcG9uZW50Tm9ybWFsaXplcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qcyAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiKTtcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBjb21wb25lbnQgPSBPYmplY3QoX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9ydW50aW1lX2NvbXBvbmVudE5vcm1hbGl6ZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcImRlZmF1bHRcIl0pKFxuICBfcmVtb3ZlX2J1dHRvbl92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJkZWZhdWx0XCJdLFxuICBfcmVtb3ZlX2J1dHRvbl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfYzhhN2FhNjBfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJyZW5kZXJcIl0sXG4gIF9yZW1vdmVfYnV0dG9uX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF9jOGE3YWE2MF9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN0YXRpY1JlbmRlckZuc1wiXSxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgYXBpOyB9XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvY29tcG9uZW50cy9tYXRyaXgtYWN0aW9ucy9yZW1vdmUtYnV0dG9uL3JlbW92ZS1idXR0b24udnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoY29tcG9uZW50LmV4cG9ydHMpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9tYXRyaXgtYWN0aW9ucy9yZW1vdmUtYnV0dG9uL3JlbW92ZS1idXR0b24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvY29tcG9uZW50cy9tYXRyaXgtYWN0aW9ucy9yZW1vdmUtYnV0dG9uL3JlbW92ZS1idXR0b24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBkZWZhdWx0LCBTdXJ2ZXlRdWVzdGlvbk1hdHJpeER5bmFtaWNSZW1vdmVCdXR0b24gKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19yZW1vdmVfYnV0dG9uX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcmVtb3ZlLWJ1dHRvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICovIFwiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2NvbXBvbmVudHMvbWF0cml4LWFjdGlvbnMvcmVtb3ZlLWJ1dHRvbi9yZW1vdmUtYnV0dG9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJTdXJ2ZXlRdWVzdGlvbk1hdHJpeER5bmFtaWNSZW1vdmVCdXR0b25cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3JlbW92ZV9idXR0b25fdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiU3VydmV5UXVlc3Rpb25NYXRyaXhEeW5hbWljUmVtb3ZlQnV0dG9uXCJdOyB9KTtcblxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19yZW1vdmVfYnV0dG9uX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcImRlZmF1bHRcIl0pOyBcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL2NvbXBvbmVudHMvbWF0cml4LWFjdGlvbnMvcmVtb3ZlLWJ1dHRvbi9yZW1vdmUtYnV0dG9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1jOGE3YWE2MCZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL2NvbXBvbmVudHMvbWF0cml4LWFjdGlvbnMvcmVtb3ZlLWJ1dHRvbi9yZW1vdmUtYnV0dG9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1jOGE3YWE2MCYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3JlbW92ZV9idXR0b25fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkX2M4YTdhYTYwX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcmVtb3ZlLWJ1dHRvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9YzhhN2FhNjAmICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9jb21wb25lbnRzL21hdHJpeC1hY3Rpb25zL3JlbW92ZS1idXR0b24vcmVtb3ZlLWJ1dHRvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9YzhhN2FhNjAmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwicmVuZGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3JlbW92ZV9idXR0b25fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkX2M4YTdhYTYwX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVuZGVyXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic3RhdGljUmVuZGVyRm5zXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3JlbW92ZV9idXR0b25fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkX2M4YTdhYTYwX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3RhdGljUmVuZGVyRm5zXCJdOyB9KTtcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL25vdGlmaWVyLnZ1ZVwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL2NvbXBvbmVudHMvbm90aWZpZXIudnVlICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBOb3RpZmllckNvbXBvbmVudCwgZGVmYXVsdCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm90aWZpZXJfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzJkOTNlZGFkX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9ub3RpZmllci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MmQ5M2VkYWQmICovIFwiLi9zcmMvdnVlL2NvbXBvbmVudHMvbm90aWZpZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTJkOTNlZGFkJlwiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm90aWZpZXJfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9ub3RpZmllci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICovIFwiLi9zcmMvdnVlL2NvbXBvbmVudHMvbm90aWZpZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIk5vdGlmaWVyQ29tcG9uZW50XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vdGlmaWVyX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIk5vdGlmaWVyQ29tcG9uZW50XCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCIpO1xuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGNvbXBvbmVudCA9IE9iamVjdChfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX3J1bnRpbWVfY29tcG9uZW50Tm9ybWFsaXplcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiZGVmYXVsdFwiXSkoXG4gIF9ub3RpZmllcl92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJkZWZhdWx0XCJdLFxuICBfbm90aWZpZXJfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzJkOTNlZGFkX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVuZGVyXCJdLFxuICBfbm90aWZpZXJfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzJkOTNlZGFkX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3RhdGljUmVuZGVyRm5zXCJdLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBhcGk7IH1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9jb21wb25lbnRzL25vdGlmaWVyLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKGNvbXBvbmVudC5leHBvcnRzKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL2NvbXBvbmVudHMvbm90aWZpZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9jb21wb25lbnRzL25vdGlmaWVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBkZWZhdWx0LCBOb3RpZmllckNvbXBvbmVudCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vdGlmaWVyX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm90aWZpZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqLyBcIi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9jb21wb25lbnRzL25vdGlmaWVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJOb3RpZmllckNvbXBvbmVudFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfbm90aWZpZXJfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiTm90aWZpZXJDb21wb25lbnRcIl07IH0pO1xuXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vdGlmaWVyX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcImRlZmF1bHRcIl0pOyBcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL2NvbXBvbmVudHMvbm90aWZpZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTJkOTNlZGFkJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9jb21wb25lbnRzL25vdGlmaWVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yZDkzZWRhZCYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfbm90aWZpZXJfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzJkOTNlZGFkX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm90aWZpZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTJkOTNlZGFkJiAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvY29tcG9uZW50cy9ub3RpZmllci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MmQ5M2VkYWQmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwicmVuZGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vdGlmaWVyX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF8yZDkzZWRhZF9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInJlbmRlclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub3RpZmllcl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMmQ5M2VkYWRfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl07IH0pO1xuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL2NvbXBvbmVudHMvcGFuZWxkeW5hbWljLWFjdGlvbnMvcGFuZWxkeW5hbWljLWFkZC1idG4udnVlXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvY29tcG9uZW50cy9wYW5lbGR5bmFtaWMtYWN0aW9ucy9wYW5lbGR5bmFtaWMtYWRkLWJ0bi52dWUgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFBhbmVsZHluYW1pY0FjdGlvbiwgUGFuZWxEeW5hbWljQWRkQnRuLCBkZWZhdWx0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9wYW5lbGR5bmFtaWNfYWRkX2J0bl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMjQ3ZTU0Y2JfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3BhbmVsZHluYW1pYy1hZGQtYnRuLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yNDdlNTRjYiYgKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9wYW5lbGR5bmFtaWMtYWN0aW9ucy9wYW5lbGR5bmFtaWMtYWRkLWJ0bi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MjQ3ZTU0Y2ImXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9wYW5lbGR5bmFtaWNfYWRkX2J0bl92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3BhbmVsZHluYW1pYy1hZGQtYnRuLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9wYW5lbGR5bmFtaWMtYWN0aW9ucy9wYW5lbGR5bmFtaWMtYWRkLWJ0bi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUGFuZWxkeW5hbWljQWN0aW9uXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3BhbmVsZHluYW1pY19hZGRfYnRuX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlBhbmVsZHluYW1pY0FjdGlvblwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlBhbmVsRHluYW1pY0FkZEJ0blwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9wYW5lbGR5bmFtaWNfYWRkX2J0bl92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJQYW5lbER5bmFtaWNBZGRCdG5cIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9ydW50aW1lX2NvbXBvbmVudE5vcm1hbGl6ZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanMgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIik7XG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgY29tcG9uZW50ID0gT2JqZWN0KF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJkZWZhdWx0XCJdKShcbiAgX3BhbmVsZHluYW1pY19hZGRfYnRuX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcImRlZmF1bHRcIl0sXG4gIF9wYW5lbGR5bmFtaWNfYWRkX2J0bl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMjQ3ZTU0Y2JfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJyZW5kZXJcIl0sXG4gIF9wYW5lbGR5bmFtaWNfYWRkX2J0bl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMjQ3ZTU0Y2JfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl0sXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGFwaTsgfVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2NvbXBvbmVudHMvcGFuZWxkeW5hbWljLWFjdGlvbnMvcGFuZWxkeW5hbWljLWFkZC1idG4udnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoY29tcG9uZW50LmV4cG9ydHMpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9wYW5lbGR5bmFtaWMtYWN0aW9ucy9wYW5lbGR5bmFtaWMtYWRkLWJ0bi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL2NvbXBvbmVudHMvcGFuZWxkeW5hbWljLWFjdGlvbnMvcGFuZWxkeW5hbWljLWFkZC1idG4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGRlZmF1bHQsIFBhbmVsZHluYW1pY0FjdGlvbiwgUGFuZWxEeW5hbWljQWRkQnRuICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfcGFuZWxkeW5hbWljX2FkZF9idG5fdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyPz9yZWYtLTAhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYW5lbGR5bmFtaWMtYWRkLWJ0bi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICovIFwiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2NvbXBvbmVudHMvcGFuZWxkeW5hbWljLWFjdGlvbnMvcGFuZWxkeW5hbWljLWFkZC1idG4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlBhbmVsZHluYW1pY0FjdGlvblwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfcGFuZWxkeW5hbWljX2FkZF9idG5fdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiUGFuZWxkeW5hbWljQWN0aW9uXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUGFuZWxEeW5hbWljQWRkQnRuXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19wYW5lbGR5bmFtaWNfYWRkX2J0bl92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJQYW5lbER5bmFtaWNBZGRCdG5cIl07IH0pO1xuXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3BhbmVsZHluYW1pY19hZGRfYnRuX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcImRlZmF1bHRcIl0pOyBcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL2NvbXBvbmVudHMvcGFuZWxkeW5hbWljLWFjdGlvbnMvcGFuZWxkeW5hbWljLWFkZC1idG4udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTI0N2U1NGNiJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9jb21wb25lbnRzL3BhbmVsZHluYW1pYy1hY3Rpb25zL3BhbmVsZHluYW1pYy1hZGQtYnRuLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yNDdlNTRjYiYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfcGFuZWxkeW5hbWljX2FkZF9idG5fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzI0N2U1NGNiX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFuZWxkeW5hbWljLWFkZC1idG4udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTI0N2U1NGNiJiAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvY29tcG9uZW50cy9wYW5lbGR5bmFtaWMtYWN0aW9ucy9wYW5lbGR5bmFtaWMtYWRkLWJ0bi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MjQ3ZTU0Y2ImXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwicmVuZGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3BhbmVsZHluYW1pY19hZGRfYnRuX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF8yNDdlNTRjYl9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInJlbmRlclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19wYW5lbGR5bmFtaWNfYWRkX2J0bl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMjQ3ZTU0Y2JfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl07IH0pO1xuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL2NvbXBvbmVudHMvcGFuZWxkeW5hbWljLWFjdGlvbnMvcGFuZWxkeW5hbWljLW5leHQtYnRuLnZ1ZVwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9jb21wb25lbnRzL3BhbmVsZHluYW1pYy1hY3Rpb25zL3BhbmVsZHluYW1pYy1uZXh0LWJ0bi52dWUgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBQYW5lbER5bmFtaWNOZXh0QnRuLCBkZWZhdWx0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9wYW5lbGR5bmFtaWNfbmV4dF9idG5fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzZjYzFjNzc3X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9wYW5lbGR5bmFtaWMtbmV4dC1idG4udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTZjYzFjNzc3JiAqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL3BhbmVsZHluYW1pYy1hY3Rpb25zL3BhbmVsZHluYW1pYy1uZXh0LWJ0bi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NmNjMWM3NzcmXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9wYW5lbGR5bmFtaWNfbmV4dF9idG5fdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9wYW5lbGR5bmFtaWMtbmV4dC1idG4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL3BhbmVsZHluYW1pYy1hY3Rpb25zL3BhbmVsZHluYW1pYy1uZXh0LWJ0bi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUGFuZWxEeW5hbWljTmV4dEJ0blwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9wYW5lbGR5bmFtaWNfbmV4dF9idG5fdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiUGFuZWxEeW5hbWljTmV4dEJ0blwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX3J1bnRpbWVfY29tcG9uZW50Tm9ybWFsaXplcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qcyAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiKTtcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBjb21wb25lbnQgPSBPYmplY3QoX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9ydW50aW1lX2NvbXBvbmVudE5vcm1hbGl6ZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcImRlZmF1bHRcIl0pKFxuICBfcGFuZWxkeW5hbWljX25leHRfYnRuX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcImRlZmF1bHRcIl0sXG4gIF9wYW5lbGR5bmFtaWNfbmV4dF9idG5fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzZjYzFjNzc3X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVuZGVyXCJdLFxuICBfcGFuZWxkeW5hbWljX25leHRfYnRuX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF82Y2MxYzc3N19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN0YXRpY1JlbmRlckZuc1wiXSxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgYXBpOyB9XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvY29tcG9uZW50cy9wYW5lbGR5bmFtaWMtYWN0aW9ucy9wYW5lbGR5bmFtaWMtbmV4dC1idG4udnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoY29tcG9uZW50LmV4cG9ydHMpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9wYW5lbGR5bmFtaWMtYWN0aW9ucy9wYW5lbGR5bmFtaWMtbmV4dC1idG4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvY29tcG9uZW50cy9wYW5lbGR5bmFtaWMtYWN0aW9ucy9wYW5lbGR5bmFtaWMtbmV4dC1idG4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBkZWZhdWx0LCBQYW5lbER5bmFtaWNOZXh0QnRuICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfcGFuZWxkeW5hbWljX25leHRfYnRuX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFuZWxkeW5hbWljLW5leHQtYnRuLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKi8gXCIuL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvY29tcG9uZW50cy9wYW5lbGR5bmFtaWMtYWN0aW9ucy9wYW5lbGR5bmFtaWMtbmV4dC1idG4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlBhbmVsRHluYW1pY05leHRCdG5cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3BhbmVsZHluYW1pY19uZXh0X2J0bl92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJQYW5lbER5bmFtaWNOZXh0QnRuXCJdOyB9KTtcblxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19wYW5lbGR5bmFtaWNfbmV4dF9idG5fdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiZGVmYXVsdFwiXSk7IFxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9wYW5lbGR5bmFtaWMtYWN0aW9ucy9wYW5lbGR5bmFtaWMtbmV4dC1idG4udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTZjYzFjNzc3JlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvY29tcG9uZW50cy9wYW5lbGR5bmFtaWMtYWN0aW9ucy9wYW5lbGR5bmFtaWMtbmV4dC1idG4udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTZjYzFjNzc3JiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfcGFuZWxkeW5hbWljX25leHRfYnRuX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF82Y2MxYzc3N19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhbmVsZHluYW1pYy1uZXh0LWJ0bi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NmNjMWM3NzcmICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9jb21wb25lbnRzL3BhbmVsZHluYW1pYy1hY3Rpb25zL3BhbmVsZHluYW1pYy1uZXh0LWJ0bi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NmNjMWM3NzcmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwicmVuZGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3BhbmVsZHluYW1pY19uZXh0X2J0bl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfNmNjMWM3NzdfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJyZW5kZXJcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzdGF0aWNSZW5kZXJGbnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfcGFuZWxkeW5hbWljX25leHRfYnRuX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF82Y2MxYzc3N19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN0YXRpY1JlbmRlckZuc1wiXTsgfSk7XG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9wYW5lbGR5bmFtaWMtYWN0aW9ucy9wYW5lbGR5bmFtaWMtcHJldi1idG4udnVlXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL2NvbXBvbmVudHMvcGFuZWxkeW5hbWljLWFjdGlvbnMvcGFuZWxkeW5hbWljLXByZXYtYnRuLnZ1ZSAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFBhbmVsRHluYW1pY1ByZXZCdG4sIGRlZmF1bHQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3BhbmVsZHluYW1pY19wcmV2X2J0bl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMTJkNzllYjdfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3BhbmVsZHluYW1pYy1wcmV2LWJ0bi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MTJkNzllYjcmICovIFwiLi9zcmMvdnVlL2NvbXBvbmVudHMvcGFuZWxkeW5hbWljLWFjdGlvbnMvcGFuZWxkeW5hbWljLXByZXYtYnRuLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xMmQ3OWViNyZcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3BhbmVsZHluYW1pY19wcmV2X2J0bl92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3BhbmVsZHluYW1pYy1wcmV2LWJ0bi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICovIFwiLi9zcmMvdnVlL2NvbXBvbmVudHMvcGFuZWxkeW5hbWljLWFjdGlvbnMvcGFuZWxkeW5hbWljLXByZXYtYnRuLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJQYW5lbER5bmFtaWNQcmV2QnRuXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3BhbmVsZHluYW1pY19wcmV2X2J0bl92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJQYW5lbER5bmFtaWNQcmV2QnRuXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCIpO1xuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGNvbXBvbmVudCA9IE9iamVjdChfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX3J1bnRpbWVfY29tcG9uZW50Tm9ybWFsaXplcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiZGVmYXVsdFwiXSkoXG4gIF9wYW5lbGR5bmFtaWNfcHJldl9idG5fdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiZGVmYXVsdFwiXSxcbiAgX3BhbmVsZHluYW1pY19wcmV2X2J0bl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMTJkNzllYjdfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJyZW5kZXJcIl0sXG4gIF9wYW5lbGR5bmFtaWNfcHJldl9idG5fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzEyZDc5ZWI3X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3RhdGljUmVuZGVyRm5zXCJdLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBhcGk7IH1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9jb21wb25lbnRzL3BhbmVsZHluYW1pYy1hY3Rpb25zL3BhbmVsZHluYW1pYy1wcmV2LWJ0bi52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChjb21wb25lbnQuZXhwb3J0cyk7XG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL3BhbmVsZHluYW1pYy1hY3Rpb25zL3BhbmVsZHluYW1pYy1wcmV2LWJ0bi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9jb21wb25lbnRzL3BhbmVsZHluYW1pYy1hY3Rpb25zL3BhbmVsZHluYW1pYy1wcmV2LWJ0bi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGRlZmF1bHQsIFBhbmVsRHluYW1pY1ByZXZCdG4gKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19wYW5lbGR5bmFtaWNfcHJldl9idG5fdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyPz9yZWYtLTAhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYW5lbGR5bmFtaWMtcHJldi1idG4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqLyBcIi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9jb21wb25lbnRzL3BhbmVsZHluYW1pYy1hY3Rpb25zL3BhbmVsZHluYW1pYy1wcmV2LWJ0bi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUGFuZWxEeW5hbWljUHJldkJ0blwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfcGFuZWxkeW5hbWljX3ByZXZfYnRuX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlBhbmVsRHluYW1pY1ByZXZCdG5cIl07IH0pO1xuXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3BhbmVsZHluYW1pY19wcmV2X2J0bl92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJkZWZhdWx0XCJdKTsgXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL3BhbmVsZHluYW1pYy1hY3Rpb25zL3BhbmVsZHluYW1pYy1wcmV2LWJ0bi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MTJkNzllYjcmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9jb21wb25lbnRzL3BhbmVsZHluYW1pYy1hY3Rpb25zL3BhbmVsZHluYW1pYy1wcmV2LWJ0bi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MTJkNzllYjcmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19wYW5lbGR5bmFtaWNfcHJldl9idG5fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzEyZDc5ZWI3X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFuZWxkeW5hbWljLXByZXYtYnRuLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xMmQ3OWViNyYgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2NvbXBvbmVudHMvcGFuZWxkeW5hbWljLWFjdGlvbnMvcGFuZWxkeW5hbWljLXByZXYtYnRuLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xMmQ3OWViNyZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfcGFuZWxkeW5hbWljX3ByZXZfYnRuX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF8xMmQ3OWViN19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInJlbmRlclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19wYW5lbGR5bmFtaWNfcHJldl9idG5fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzEyZDc5ZWI3X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3RhdGljUmVuZGVyRm5zXCJdOyB9KTtcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL3BhbmVsZHluYW1pYy1hY3Rpb25zL3BhbmVsZHluYW1pYy1wcm9ncmVzcy10ZXh0LnZ1ZVwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL2NvbXBvbmVudHMvcGFuZWxkeW5hbWljLWFjdGlvbnMvcGFuZWxkeW5hbWljLXByb2dyZXNzLXRleHQudnVlICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBQYW5lbER5bmFtaWNQcm9ncmVzc1RleHQsIGRlZmF1bHQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3BhbmVsZHluYW1pY19wcm9ncmVzc190ZXh0X3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF8zZDgwNzVhOF9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcGFuZWxkeW5hbWljLXByb2dyZXNzLXRleHQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTNkODA3NWE4JiAqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL3BhbmVsZHluYW1pYy1hY3Rpb25zL3BhbmVsZHluYW1pYy1wcm9ncmVzcy10ZXh0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zZDgwNzVhOCZcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3BhbmVsZHluYW1pY19wcm9ncmVzc190ZXh0X3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcGFuZWxkeW5hbWljLXByb2dyZXNzLXRleHQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL3BhbmVsZHluYW1pYy1hY3Rpb25zL3BhbmVsZHluYW1pYy1wcm9ncmVzcy10ZXh0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJQYW5lbER5bmFtaWNQcm9ncmVzc1RleHRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcGFuZWxkeW5hbWljX3Byb2dyZXNzX3RleHRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiUGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0XCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCIpO1xuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGNvbXBvbmVudCA9IE9iamVjdChfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX3J1bnRpbWVfY29tcG9uZW50Tm9ybWFsaXplcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiZGVmYXVsdFwiXSkoXG4gIF9wYW5lbGR5bmFtaWNfcHJvZ3Jlc3NfdGV4dF92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJkZWZhdWx0XCJdLFxuICBfcGFuZWxkeW5hbWljX3Byb2dyZXNzX3RleHRfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzNkODA3NWE4X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVuZGVyXCJdLFxuICBfcGFuZWxkeW5hbWljX3Byb2dyZXNzX3RleHRfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzNkODA3NWE4X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3RhdGljUmVuZGVyRm5zXCJdLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBhcGk7IH1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9jb21wb25lbnRzL3BhbmVsZHluYW1pYy1hY3Rpb25zL3BhbmVsZHluYW1pYy1wcm9ncmVzcy10ZXh0LnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKGNvbXBvbmVudC5leHBvcnRzKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL2NvbXBvbmVudHMvcGFuZWxkeW5hbWljLWFjdGlvbnMvcGFuZWxkeW5hbWljLXByb2dyZXNzLXRleHQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9jb21wb25lbnRzL3BhbmVsZHluYW1pYy1hY3Rpb25zL3BhbmVsZHluYW1pYy1wcm9ncmVzcy10ZXh0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBkZWZhdWx0LCBQYW5lbER5bmFtaWNQcm9ncmVzc1RleHQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19wYW5lbGR5bmFtaWNfcHJvZ3Jlc3NfdGV4dF92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAtIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXI/P3JlZi0tMCEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhbmVsZHluYW1pYy1wcm9ncmVzcy10ZXh0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKi8gXCIuL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvY29tcG9uZW50cy9wYW5lbGR5bmFtaWMtYWN0aW9ucy9wYW5lbGR5bmFtaWMtcHJvZ3Jlc3MtdGV4dC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19wYW5lbGR5bmFtaWNfcHJvZ3Jlc3NfdGV4dF92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJQYW5lbER5bmFtaWNQcm9ncmVzc1RleHRcIl07IH0pO1xuXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3BhbmVsZHluYW1pY19wcm9ncmVzc190ZXh0X3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcImRlZmF1bHRcIl0pOyBcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL2NvbXBvbmVudHMvcGFuZWxkeW5hbWljLWFjdGlvbnMvcGFuZWxkeW5hbWljLXByb2dyZXNzLXRleHQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTNkODA3NWE4JlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9jb21wb25lbnRzL3BhbmVsZHluYW1pYy1hY3Rpb25zL3BhbmVsZHluYW1pYy1wcm9ncmVzcy10ZXh0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zZDgwNzVhOCYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfcGFuZWxkeW5hbWljX3Byb2dyZXNzX3RleHRfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzNkODA3NWE4X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFuZWxkeW5hbWljLXByb2dyZXNzLXRleHQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTNkODA3NWE4JiAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvY29tcG9uZW50cy9wYW5lbGR5bmFtaWMtYWN0aW9ucy9wYW5lbGR5bmFtaWMtcHJvZ3Jlc3MtdGV4dC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9M2Q4MDc1YTgmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwicmVuZGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3BhbmVsZHluYW1pY19wcm9ncmVzc190ZXh0X3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF8zZDgwNzVhOF9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInJlbmRlclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19wYW5lbGR5bmFtaWNfcHJvZ3Jlc3NfdGV4dF92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfM2Q4MDc1YThfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl07IH0pO1xuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL2NvbXBvbmVudHMvcGFuZWxkeW5hbWljLWFjdGlvbnMvcGFuZWxkeW5hbWljLXJlbW92ZS1idG4udnVlXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvY29tcG9uZW50cy9wYW5lbGR5bmFtaWMtYWN0aW9ucy9wYW5lbGR5bmFtaWMtcmVtb3ZlLWJ0bi52dWUgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFBhbmVsRHluYW1pY1JlbW92ZUJ1dHRvbiwgZGVmYXVsdCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcGFuZWxkeW5hbWljX3JlbW92ZV9idG5fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzIwMmUzMGM4X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9wYW5lbGR5bmFtaWMtcmVtb3ZlLWJ0bi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MjAyZTMwYzgmICovIFwiLi9zcmMvdnVlL2NvbXBvbmVudHMvcGFuZWxkeW5hbWljLWFjdGlvbnMvcGFuZWxkeW5hbWljLXJlbW92ZS1idG4udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTIwMmUzMGM4JlwiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcGFuZWxkeW5hbWljX3JlbW92ZV9idG5fdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9wYW5lbGR5bmFtaWMtcmVtb3ZlLWJ0bi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICovIFwiLi9zcmMvdnVlL2NvbXBvbmVudHMvcGFuZWxkeW5hbWljLWFjdGlvbnMvcGFuZWxkeW5hbWljLXJlbW92ZS1idG4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlBhbmVsRHluYW1pY1JlbW92ZUJ1dHRvblwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9wYW5lbGR5bmFtaWNfcmVtb3ZlX2J0bl92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJQYW5lbER5bmFtaWNSZW1vdmVCdXR0b25cIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9ydW50aW1lX2NvbXBvbmVudE5vcm1hbGl6ZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanMgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIik7XG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgY29tcG9uZW50ID0gT2JqZWN0KF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJkZWZhdWx0XCJdKShcbiAgX3BhbmVsZHluYW1pY19yZW1vdmVfYnRuX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcImRlZmF1bHRcIl0sXG4gIF9wYW5lbGR5bmFtaWNfcmVtb3ZlX2J0bl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMjAyZTMwYzhfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJyZW5kZXJcIl0sXG4gIF9wYW5lbGR5bmFtaWNfcmVtb3ZlX2J0bl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMjAyZTMwYzhfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl0sXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGFwaTsgfVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2NvbXBvbmVudHMvcGFuZWxkeW5hbWljLWFjdGlvbnMvcGFuZWxkeW5hbWljLXJlbW92ZS1idG4udnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoY29tcG9uZW50LmV4cG9ydHMpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9wYW5lbGR5bmFtaWMtYWN0aW9ucy9wYW5lbGR5bmFtaWMtcmVtb3ZlLWJ0bi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL2NvbXBvbmVudHMvcGFuZWxkeW5hbWljLWFjdGlvbnMvcGFuZWxkeW5hbWljLXJlbW92ZS1idG4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGRlZmF1bHQsIFBhbmVsRHluYW1pY1JlbW92ZUJ1dHRvbiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3BhbmVsZHluYW1pY19yZW1vdmVfYnRuX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFuZWxkeW5hbWljLXJlbW92ZS1idG4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqLyBcIi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9jb21wb25lbnRzL3BhbmVsZHluYW1pYy1hY3Rpb25zL3BhbmVsZHluYW1pYy1yZW1vdmUtYnRuLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJQYW5lbER5bmFtaWNSZW1vdmVCdXR0b25cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3BhbmVsZHluYW1pY19yZW1vdmVfYnRuX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlBhbmVsRHluYW1pY1JlbW92ZUJ1dHRvblwiXTsgfSk7XG5cbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfcGFuZWxkeW5hbWljX3JlbW92ZV9idG5fdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiZGVmYXVsdFwiXSk7IFxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9wYW5lbGR5bmFtaWMtYWN0aW9ucy9wYW5lbGR5bmFtaWMtcmVtb3ZlLWJ0bi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MjAyZTMwYzgmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL2NvbXBvbmVudHMvcGFuZWxkeW5hbWljLWFjdGlvbnMvcGFuZWxkeW5hbWljLXJlbW92ZS1idG4udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTIwMmUzMGM4JiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19wYW5lbGR5bmFtaWNfcmVtb3ZlX2J0bl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMjAyZTMwYzhfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAtIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYW5lbGR5bmFtaWMtcmVtb3ZlLWJ0bi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MjAyZTMwYzgmICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9jb21wb25lbnRzL3BhbmVsZHluYW1pYy1hY3Rpb25zL3BhbmVsZHluYW1pYy1yZW1vdmUtYnRuLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yMDJlMzBjOCZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfcGFuZWxkeW5hbWljX3JlbW92ZV9idG5fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzIwMmUzMGM4X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVuZGVyXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic3RhdGljUmVuZGVyRm5zXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3BhbmVsZHluYW1pY19yZW1vdmVfYnRuX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF8yMDJlMzBjOF9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN0YXRpY1JlbmRlckZuc1wiXTsgfSk7XG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9wb3B1cC9wb3B1cC1jb250YWluZXIudnVlXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL2NvbXBvbmVudHMvcG9wdXAvcG9wdXAtY29udGFpbmVyLnZ1ZSAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFBvcHVwQ29udGFpbmVyLCBzaG93TW9kYWwsIHNob3dEaWFsb2csIGRlZmF1bHQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3BvcHVwX2NvbnRhaW5lcl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfYzE4ZGZkNzRfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3BvcHVwLWNvbnRhaW5lci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9YzE4ZGZkNzQmICovIFwiLi9zcmMvdnVlL2NvbXBvbmVudHMvcG9wdXAvcG9wdXAtY29udGFpbmVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1jMThkZmQ3NCZcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3BvcHVwX2NvbnRhaW5lcl92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3BvcHVwLWNvbnRhaW5lci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICovIFwiLi9zcmMvdnVlL2NvbXBvbmVudHMvcG9wdXAvcG9wdXAtY29udGFpbmVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJQb3B1cENvbnRhaW5lclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9wb3B1cF9jb250YWluZXJfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiUG9wdXBDb250YWluZXJcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzaG93TW9kYWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcG9wdXBfY29udGFpbmVyX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcInNob3dNb2RhbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInNob3dEaWFsb2dcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcG9wdXBfY29udGFpbmVyX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcInNob3dEaWFsb2dcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9ydW50aW1lX2NvbXBvbmVudE5vcm1hbGl6ZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanMgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIik7XG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgY29tcG9uZW50ID0gT2JqZWN0KF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJkZWZhdWx0XCJdKShcbiAgX3BvcHVwX2NvbnRhaW5lcl92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJkZWZhdWx0XCJdLFxuICBfcG9wdXBfY29udGFpbmVyX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF9jMThkZmQ3NF9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInJlbmRlclwiXSxcbiAgX3BvcHVwX2NvbnRhaW5lcl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfYzE4ZGZkNzRfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl0sXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGFwaTsgfVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2NvbXBvbmVudHMvcG9wdXAvcG9wdXAtY29udGFpbmVyLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKGNvbXBvbmVudC5leHBvcnRzKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL2NvbXBvbmVudHMvcG9wdXAvcG9wdXAtY29udGFpbmVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL2NvbXBvbmVudHMvcG9wdXAvcG9wdXAtY29udGFpbmVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogZGVmYXVsdCwgUG9wdXBDb250YWluZXIsIHNob3dNb2RhbCwgc2hvd0RpYWxvZyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3BvcHVwX2NvbnRhaW5lcl92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAtIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXI/P3JlZi0tMCEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BvcHVwLWNvbnRhaW5lci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICovIFwiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2NvbXBvbmVudHMvcG9wdXAvcG9wdXAtY29udGFpbmVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJQb3B1cENvbnRhaW5lclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfcG9wdXBfY29udGFpbmVyX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlBvcHVwQ29udGFpbmVyXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic2hvd01vZGFsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19wb3B1cF9jb250YWluZXJfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic2hvd01vZGFsXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic2hvd0RpYWxvZ1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfcG9wdXBfY29udGFpbmVyX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInNob3dEaWFsb2dcIl07IH0pO1xuXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3BvcHVwX2NvbnRhaW5lcl92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJkZWZhdWx0XCJdKTsgXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL3BvcHVwL3BvcHVwLWNvbnRhaW5lci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9YzE4ZGZkNzQmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9jb21wb25lbnRzL3BvcHVwL3BvcHVwLWNvbnRhaW5lci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9YzE4ZGZkNzQmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19wb3B1cF9jb250YWluZXJfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkX2MxOGRmZDc0X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcG9wdXAtY29udGFpbmVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1jMThkZmQ3NCYgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2NvbXBvbmVudHMvcG9wdXAvcG9wdXAtY29udGFpbmVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1jMThkZmQ3NCZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfcG9wdXBfY29udGFpbmVyX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF9jMThkZmQ3NF9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInJlbmRlclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19wb3B1cF9jb250YWluZXJfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkX2MxOGRmZDc0X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3RhdGljUmVuZGVyRm5zXCJdOyB9KTtcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL3BvcHVwL3BvcHVwLXBvaW50ZXIudnVlXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9jb21wb25lbnRzL3BvcHVwL3BvcHVwLXBvaW50ZXIudnVlICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFBvcHVwUG9pbnRlciwgZGVmYXVsdCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcG9wdXBfcG9pbnRlcl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMDA4NDdjNDJfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3BvcHVwLXBvaW50ZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTAwODQ3YzQyJiAqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL3BvcHVwL3BvcHVwLXBvaW50ZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTAwODQ3YzQyJlwiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcG9wdXBfcG9pbnRlcl92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3BvcHVwLXBvaW50ZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL3BvcHVwL3BvcHVwLXBvaW50ZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlBvcHVwUG9pbnRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9wb3B1cF9wb2ludGVyX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlBvcHVwUG9pbnRlclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX3J1bnRpbWVfY29tcG9uZW50Tm9ybWFsaXplcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qcyAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiKTtcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBjb21wb25lbnQgPSBPYmplY3QoX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9ydW50aW1lX2NvbXBvbmVudE5vcm1hbGl6ZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcImRlZmF1bHRcIl0pKFxuICBfcG9wdXBfcG9pbnRlcl92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJkZWZhdWx0XCJdLFxuICBfcG9wdXBfcG9pbnRlcl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMDA4NDdjNDJfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJyZW5kZXJcIl0sXG4gIF9wb3B1cF9wb2ludGVyX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF8wMDg0N2M0Ml9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN0YXRpY1JlbmRlckZuc1wiXSxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgYXBpOyB9XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvY29tcG9uZW50cy9wb3B1cC9wb3B1cC1wb2ludGVyLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKGNvbXBvbmVudC5leHBvcnRzKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL2NvbXBvbmVudHMvcG9wdXAvcG9wdXAtcG9pbnRlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvY29tcG9uZW50cy9wb3B1cC9wb3B1cC1wb2ludGVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGRlZmF1bHQsIFBvcHVwUG9pbnRlciAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3BvcHVwX3BvaW50ZXJfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyPz9yZWYtLTAhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wb3B1cC1wb2ludGVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKi8gXCIuL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvY29tcG9uZW50cy9wb3B1cC9wb3B1cC1wb2ludGVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJQb3B1cFBvaW50ZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3BvcHVwX3BvaW50ZXJfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiUG9wdXBQb2ludGVyXCJdOyB9KTtcblxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19wb3B1cF9wb2ludGVyX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcImRlZmF1bHRcIl0pOyBcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL2NvbXBvbmVudHMvcG9wdXAvcG9wdXAtcG9pbnRlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MDA4NDdjNDImXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvY29tcG9uZW50cy9wb3B1cC9wb3B1cC1wb2ludGVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wMDg0N2M0MiYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19wb3B1cF9wb2ludGVyX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF8wMDg0N2M0Ml9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BvcHVwLXBvaW50ZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTAwODQ3YzQyJiAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvY29tcG9uZW50cy9wb3B1cC9wb3B1cC1wb2ludGVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wMDg0N2M0MiZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfcG9wdXBfcG9pbnRlcl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMDA4NDdjNDJfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJyZW5kZXJcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzdGF0aWNSZW5kZXJGbnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfcG9wdXBfcG9pbnRlcl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMDA4NDdjNDJfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl07IH0pO1xuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL2NvbXBvbmVudHMvcG9wdXAvcG9wdXAudnVlXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvY29tcG9uZW50cy9wb3B1cC9wb3B1cC52dWUgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFBvcHVwLCBkZWZhdWx0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9wb3B1cF92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfZWYxMTI2NWNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3BvcHVwLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1lZjExMjY1YyYgKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9wb3B1cC9wb3B1cC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZWYxMTI2NWMmXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9wb3B1cF92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3BvcHVwLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9wb3B1cC9wb3B1cC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUG9wdXBcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcG9wdXBfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiUG9wdXBcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9ydW50aW1lX2NvbXBvbmVudE5vcm1hbGl6ZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanMgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIik7XG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgY29tcG9uZW50ID0gT2JqZWN0KF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJkZWZhdWx0XCJdKShcbiAgX3BvcHVwX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcImRlZmF1bHRcIl0sXG4gIF9wb3B1cF92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfZWYxMTI2NWNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJyZW5kZXJcIl0sXG4gIF9wb3B1cF92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfZWYxMTI2NWNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl0sXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGFwaTsgfVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2NvbXBvbmVudHMvcG9wdXAvcG9wdXAudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoY29tcG9uZW50LmV4cG9ydHMpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9wb3B1cC9wb3B1cC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL2NvbXBvbmVudHMvcG9wdXAvcG9wdXAudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGRlZmF1bHQsIFBvcHVwICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfcG9wdXBfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyPz9yZWYtLTAhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wb3B1cC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICovIFwiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2NvbXBvbmVudHMvcG9wdXAvcG9wdXAudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlBvcHVwXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19wb3B1cF92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJQb3B1cFwiXTsgfSk7XG5cbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfcG9wdXBfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiZGVmYXVsdFwiXSk7IFxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9wb3B1cC9wb3B1cC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZWYxMTI2NWMmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL2NvbXBvbmVudHMvcG9wdXAvcG9wdXAudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWVmMTEyNjVjJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19wb3B1cF92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfZWYxMTI2NWNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAtIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wb3B1cC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZWYxMTI2NWMmICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9jb21wb25lbnRzL3BvcHVwL3BvcHVwLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1lZjExMjY1YyZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfcG9wdXBfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkX2VmMTEyNjVjX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVuZGVyXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic3RhdGljUmVuZGVyRm5zXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3BvcHVwX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF9lZjExMjY1Y19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN0YXRpY1JlbmRlckZuc1wiXTsgfSk7XG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9yYXRpbmcvcmF0aW5nLWl0ZW0tc21pbGV5LnZ1ZVwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvY29tcG9uZW50cy9yYXRpbmcvcmF0aW5nLWl0ZW0tc21pbGV5LnZ1ZSAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBSYXRpbmdJdGVtU21pbGV5LCBkZWZhdWx0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9yYXRpbmdfaXRlbV9zbWlsZXlfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzdkYTZhNzc2X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9yYXRpbmctaXRlbS1zbWlsZXkudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTdkYTZhNzc2JiAqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL3JhdGluZy9yYXRpbmctaXRlbS1zbWlsZXkudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTdkYTZhNzc2JlwiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcmF0aW5nX2l0ZW1fc21pbGV5X3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcmF0aW5nLWl0ZW0tc21pbGV5LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9yYXRpbmcvcmF0aW5nLWl0ZW0tc21pbGV5LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJSYXRpbmdJdGVtU21pbGV5XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3JhdGluZ19pdGVtX3NtaWxleV92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJSYXRpbmdJdGVtU21pbGV5XCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCIpO1xuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGNvbXBvbmVudCA9IE9iamVjdChfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX3J1bnRpbWVfY29tcG9uZW50Tm9ybWFsaXplcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiZGVmYXVsdFwiXSkoXG4gIF9yYXRpbmdfaXRlbV9zbWlsZXlfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiZGVmYXVsdFwiXSxcbiAgX3JhdGluZ19pdGVtX3NtaWxleV92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfN2RhNmE3NzZfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJyZW5kZXJcIl0sXG4gIF9yYXRpbmdfaXRlbV9zbWlsZXlfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzdkYTZhNzc2X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3RhdGljUmVuZGVyRm5zXCJdLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBhcGk7IH1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9jb21wb25lbnRzL3JhdGluZy9yYXRpbmctaXRlbS1zbWlsZXkudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoY29tcG9uZW50LmV4cG9ydHMpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9yYXRpbmcvcmF0aW5nLWl0ZW0tc21pbGV5LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9jb21wb25lbnRzL3JhdGluZy9yYXRpbmctaXRlbS1zbWlsZXkudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogZGVmYXVsdCwgUmF0aW5nSXRlbVNtaWxleSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3JhdGluZ19pdGVtX3NtaWxleV92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAtIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXI/P3JlZi0tMCEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3JhdGluZy1pdGVtLXNtaWxleS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICovIFwiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2NvbXBvbmVudHMvcmF0aW5nL3JhdGluZy1pdGVtLXNtaWxleS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUmF0aW5nSXRlbVNtaWxleVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfcmF0aW5nX2l0ZW1fc21pbGV5X3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlJhdGluZ0l0ZW1TbWlsZXlcIl07IH0pO1xuXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3JhdGluZ19pdGVtX3NtaWxleV92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJkZWZhdWx0XCJdKTsgXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL3JhdGluZy9yYXRpbmctaXRlbS1zbWlsZXkudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTdkYTZhNzc2JlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL2NvbXBvbmVudHMvcmF0aW5nL3JhdGluZy1pdGVtLXNtaWxleS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9N2RhNmE3NzYmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfcmF0aW5nX2l0ZW1fc21pbGV5X3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF83ZGE2YTc3Nl9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3JhdGluZy1pdGVtLXNtaWxleS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9N2RhNmE3NzYmICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9jb21wb25lbnRzL3JhdGluZy9yYXRpbmctaXRlbS1zbWlsZXkudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTdkYTZhNzc2JlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInJlbmRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19yYXRpbmdfaXRlbV9zbWlsZXlfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzdkYTZhNzc2X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVuZGVyXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic3RhdGljUmVuZGVyRm5zXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3JhdGluZ19pdGVtX3NtaWxleV92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfN2RhNmE3NzZfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl07IH0pO1xuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL2NvbXBvbmVudHMvcmF0aW5nL3JhdGluZy1pdGVtLXN0YXIudnVlXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvY29tcG9uZW50cy9yYXRpbmcvcmF0aW5nLWl0ZW0tc3Rhci52dWUgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFJhdGluZ0l0ZW1TdGFyLCBkZWZhdWx0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9yYXRpbmdfaXRlbV9zdGFyX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF81ZDAzZmUxN19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcmF0aW5nLWl0ZW0tc3Rhci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NWQwM2ZlMTcmICovIFwiLi9zcmMvdnVlL2NvbXBvbmVudHMvcmF0aW5nL3JhdGluZy1pdGVtLXN0YXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTVkMDNmZTE3JlwiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcmF0aW5nX2l0ZW1fc3Rhcl92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3JhdGluZy1pdGVtLXN0YXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL3JhdGluZy9yYXRpbmctaXRlbS1zdGFyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJSYXRpbmdJdGVtU3RhclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9yYXRpbmdfaXRlbV9zdGFyX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlJhdGluZ0l0ZW1TdGFyXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCIpO1xuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGNvbXBvbmVudCA9IE9iamVjdChfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX3J1bnRpbWVfY29tcG9uZW50Tm9ybWFsaXplcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiZGVmYXVsdFwiXSkoXG4gIF9yYXRpbmdfaXRlbV9zdGFyX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcImRlZmF1bHRcIl0sXG4gIF9yYXRpbmdfaXRlbV9zdGFyX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF81ZDAzZmUxN19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInJlbmRlclwiXSxcbiAgX3JhdGluZ19pdGVtX3N0YXJfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzVkMDNmZTE3X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3RhdGljUmVuZGVyRm5zXCJdLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBhcGk7IH1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9jb21wb25lbnRzL3JhdGluZy9yYXRpbmctaXRlbS1zdGFyLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKGNvbXBvbmVudC5leHBvcnRzKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL2NvbXBvbmVudHMvcmF0aW5nL3JhdGluZy1pdGVtLXN0YXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9jb21wb25lbnRzL3JhdGluZy9yYXRpbmctaXRlbS1zdGFyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBkZWZhdWx0LCBSYXRpbmdJdGVtU3RhciAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3JhdGluZ19pdGVtX3N0YXJfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyPz9yZWYtLTAhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9yYXRpbmctaXRlbS1zdGFyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKi8gXCIuL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvY29tcG9uZW50cy9yYXRpbmcvcmF0aW5nLWl0ZW0tc3Rhci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUmF0aW5nSXRlbVN0YXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3JhdGluZ19pdGVtX3N0YXJfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiUmF0aW5nSXRlbVN0YXJcIl07IH0pO1xuXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3JhdGluZ19pdGVtX3N0YXJfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiZGVmYXVsdFwiXSk7IFxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9yYXRpbmcvcmF0aW5nLWl0ZW0tc3Rhci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NWQwM2ZlMTcmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL2NvbXBvbmVudHMvcmF0aW5nL3JhdGluZy1pdGVtLXN0YXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTVkMDNmZTE3JiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19yYXRpbmdfaXRlbV9zdGFyX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF81ZDAzZmUxN19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3JhdGluZy1pdGVtLXN0YXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTVkMDNmZTE3JiAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvY29tcG9uZW50cy9yYXRpbmcvcmF0aW5nLWl0ZW0tc3Rhci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NWQwM2ZlMTcmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwicmVuZGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3JhdGluZ19pdGVtX3N0YXJfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzVkMDNmZTE3X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVuZGVyXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic3RhdGljUmVuZGVyRm5zXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3JhdGluZ19pdGVtX3N0YXJfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzVkMDNmZTE3X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3RhdGljUmVuZGVyRm5zXCJdOyB9KTtcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL3JhdGluZy9yYXRpbmctaXRlbS52dWVcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvY29tcG9uZW50cy9yYXRpbmcvcmF0aW5nLWl0ZW0udnVlICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogUmF0aW5nSXRlbSwgZGVmYXVsdCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcmF0aW5nX2l0ZW1fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzM4YzJkMGQwX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9yYXRpbmctaXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MzhjMmQwZDAmICovIFwiLi9zcmMvdnVlL2NvbXBvbmVudHMvcmF0aW5nL3JhdGluZy1pdGVtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zOGMyZDBkMCZcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3JhdGluZ19pdGVtX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcmF0aW5nLWl0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL3JhdGluZy9yYXRpbmctaXRlbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUmF0aW5nSXRlbVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9yYXRpbmdfaXRlbV92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJSYXRpbmdJdGVtXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCIpO1xuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGNvbXBvbmVudCA9IE9iamVjdChfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX3J1bnRpbWVfY29tcG9uZW50Tm9ybWFsaXplcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiZGVmYXVsdFwiXSkoXG4gIF9yYXRpbmdfaXRlbV92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJkZWZhdWx0XCJdLFxuICBfcmF0aW5nX2l0ZW1fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzM4YzJkMGQwX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVuZGVyXCJdLFxuICBfcmF0aW5nX2l0ZW1fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzM4YzJkMGQwX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3RhdGljUmVuZGVyRm5zXCJdLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBhcGk7IH1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9jb21wb25lbnRzL3JhdGluZy9yYXRpbmctaXRlbS52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChjb21wb25lbnQuZXhwb3J0cyk7XG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL3JhdGluZy9yYXRpbmctaXRlbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9jb21wb25lbnRzL3JhdGluZy9yYXRpbmctaXRlbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGRlZmF1bHQsIFJhdGluZ0l0ZW0gKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19yYXRpbmdfaXRlbV92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAtIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXI/P3JlZi0tMCEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3JhdGluZy1pdGVtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKi8gXCIuL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvY29tcG9uZW50cy9yYXRpbmcvcmF0aW5nLWl0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlJhdGluZ0l0ZW1cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3JhdGluZ19pdGVtX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlJhdGluZ0l0ZW1cIl07IH0pO1xuXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3JhdGluZ19pdGVtX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcImRlZmF1bHRcIl0pOyBcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL2NvbXBvbmVudHMvcmF0aW5nL3JhdGluZy1pdGVtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zOGMyZDBkMCZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL2NvbXBvbmVudHMvcmF0aW5nL3JhdGluZy1pdGVtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zOGMyZDBkMCYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3JhdGluZ19pdGVtX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF8zOGMyZDBkMF9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3JhdGluZy1pdGVtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zOGMyZDBkMCYgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2NvbXBvbmVudHMvcmF0aW5nL3JhdGluZy1pdGVtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zOGMyZDBkMCZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfcmF0aW5nX2l0ZW1fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzM4YzJkMGQwX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVuZGVyXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic3RhdGljUmVuZGVyRm5zXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3JhdGluZ19pdGVtX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF8zOGMyZDBkMF9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN0YXRpY1JlbmRlckZuc1wiXTsgfSk7XG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9za2VsZXRvbi52dWVcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9jb21wb25lbnRzL3NrZWxldG9uLnZ1ZSAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogU2tlbGV0b24sIGRlZmF1bHQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NrZWxldG9uX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF81YmQ0ODBkNF9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vc2tlbGV0b24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTViZDQ4MGQ0JiAqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL3NrZWxldG9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01YmQ0ODBkNCZcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NrZWxldG9uX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vc2tlbGV0b24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL3NrZWxldG9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJTa2VsZXRvblwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9za2VsZXRvbl92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJTa2VsZXRvblwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX3J1bnRpbWVfY29tcG9uZW50Tm9ybWFsaXplcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qcyAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiKTtcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBjb21wb25lbnQgPSBPYmplY3QoX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9ydW50aW1lX2NvbXBvbmVudE5vcm1hbGl6ZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcImRlZmF1bHRcIl0pKFxuICBfc2tlbGV0b25fdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiZGVmYXVsdFwiXSxcbiAgX3NrZWxldG9uX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF81YmQ0ODBkNF9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInJlbmRlclwiXSxcbiAgX3NrZWxldG9uX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF81YmQ0ODBkNF9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN0YXRpY1JlbmRlckZuc1wiXSxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgYXBpOyB9XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvY29tcG9uZW50cy9za2VsZXRvbi52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChjb21wb25lbnQuZXhwb3J0cyk7XG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL3NrZWxldG9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvY29tcG9uZW50cy9za2VsZXRvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogZGVmYXVsdCwgU2tlbGV0b24gKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19za2VsZXRvbl92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAtIS4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXI/P3JlZi0tMCEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NrZWxldG9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKi8gXCIuL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvY29tcG9uZW50cy9za2VsZXRvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiU2tlbGV0b25cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3NrZWxldG9uX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlNrZWxldG9uXCJdOyB9KTtcblxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19za2VsZXRvbl92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJkZWZhdWx0XCJdKTsgXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL3NrZWxldG9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01YmQ0ODBkNCZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvY29tcG9uZW50cy9za2VsZXRvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NWJkNDgwZDQmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3NrZWxldG9uX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF81YmQ0ODBkNF9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NrZWxldG9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01YmQ0ODBkNCYgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2NvbXBvbmVudHMvc2tlbGV0b24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTViZDQ4MGQ0JlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInJlbmRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19za2VsZXRvbl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfNWJkNDgwZDRfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJyZW5kZXJcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzdGF0aWNSZW5kZXJGbnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfc2tlbGV0b25fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzViZDQ4MGQ0X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3RhdGljUmVuZGVyRm5zXCJdOyB9KTtcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL3N1cnZleS1hY3Rpb25zL3N1cnZleS1uYXYtYnV0dG9uLnZ1ZVwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL2NvbXBvbmVudHMvc3VydmV5LWFjdGlvbnMvc3VydmV5LW5hdi1idXR0b24udnVlICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBTdXJ2ZXlOYXZpZ2F0aW9uQnV0dG9uLCBkZWZhdWx0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zdXJ2ZXlfbmF2X2J1dHRvbl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMzc2MDExOWVfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3N1cnZleS1uYXYtYnV0dG9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zNzYwMTE5ZSYgKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9zdXJ2ZXktYWN0aW9ucy9zdXJ2ZXktbmF2LWJ1dHRvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9Mzc2MDExOWUmXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zdXJ2ZXlfbmF2X2J1dHRvbl92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3N1cnZleS1uYXYtYnV0dG9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9zdXJ2ZXktYWN0aW9ucy9zdXJ2ZXktbmF2LWJ1dHRvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiU3VydmV5TmF2aWdhdGlvbkJ1dHRvblwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9zdXJ2ZXlfbmF2X2J1dHRvbl92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJTdXJ2ZXlOYXZpZ2F0aW9uQnV0dG9uXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCIpO1xuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGNvbXBvbmVudCA9IE9iamVjdChfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX3J1bnRpbWVfY29tcG9uZW50Tm9ybWFsaXplcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiZGVmYXVsdFwiXSkoXG4gIF9zdXJ2ZXlfbmF2X2J1dHRvbl92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJkZWZhdWx0XCJdLFxuICBfc3VydmV5X25hdl9idXR0b25fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzM3NjAxMTllX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVuZGVyXCJdLFxuICBfc3VydmV5X25hdl9idXR0b25fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzM3NjAxMTllX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3RhdGljUmVuZGVyRm5zXCJdLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBhcGk7IH1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9jb21wb25lbnRzL3N1cnZleS1hY3Rpb25zL3N1cnZleS1uYXYtYnV0dG9uLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKGNvbXBvbmVudC5leHBvcnRzKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL2NvbXBvbmVudHMvc3VydmV5LWFjdGlvbnMvc3VydmV5LW5hdi1idXR0b24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9jb21wb25lbnRzL3N1cnZleS1hY3Rpb25zL3N1cnZleS1uYXYtYnV0dG9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBkZWZhdWx0LCBTdXJ2ZXlOYXZpZ2F0aW9uQnV0dG9uICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfc3VydmV5X25hdl9idXR0b25fdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyPz9yZWYtLTAhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zdXJ2ZXktbmF2LWJ1dHRvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICovIFwiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2NvbXBvbmVudHMvc3VydmV5LWFjdGlvbnMvc3VydmV5LW5hdi1idXR0b24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlN1cnZleU5hdmlnYXRpb25CdXR0b25cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3N1cnZleV9uYXZfYnV0dG9uX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlN1cnZleU5hdmlnYXRpb25CdXR0b25cIl07IH0pO1xuXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3N1cnZleV9uYXZfYnV0dG9uX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcImRlZmF1bHRcIl0pOyBcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL2NvbXBvbmVudHMvc3VydmV5LWFjdGlvbnMvc3VydmV5LW5hdi1idXR0b24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTM3NjAxMTllJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9jb21wb25lbnRzL3N1cnZleS1hY3Rpb25zL3N1cnZleS1uYXYtYnV0dG9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zNzYwMTE5ZSYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfc3VydmV5X25hdl9idXR0b25fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzM3NjAxMTllX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3VydmV5LW5hdi1idXR0b24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTM3NjAxMTllJiAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvY29tcG9uZW50cy9zdXJ2ZXktYWN0aW9ucy9zdXJ2ZXktbmF2LWJ1dHRvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9Mzc2MDExOWUmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwicmVuZGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3N1cnZleV9uYXZfYnV0dG9uX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF8zNzYwMTE5ZV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInJlbmRlclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19zdXJ2ZXlfbmF2X2J1dHRvbl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMzc2MDExOWVfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl07IH0pO1xuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL2NvbXBvbmVudHMvc3ZnLWljb24vc3ZnLWljb24udnVlXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvY29tcG9uZW50cy9zdmctaWNvbi9zdmctaWNvbi52dWUgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFN2Z0ljb24sIGRlZmF1bHQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3N2Z19pY29uX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF82ODQ3NzZmOF9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vc3ZnLWljb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTY4NDc3NmY4JiAqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL3N2Zy1pY29uL3N2Zy1pY29uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02ODQ3NzZmOCZcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3N2Z19pY29uX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vc3ZnLWljb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL3N2Zy1pY29uL3N2Zy1pY29uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJTdmdJY29uXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3N2Z19pY29uX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlN2Z0ljb25cIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9ydW50aW1lX2NvbXBvbmVudE5vcm1hbGl6ZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanMgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIik7XG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgY29tcG9uZW50ID0gT2JqZWN0KF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJkZWZhdWx0XCJdKShcbiAgX3N2Z19pY29uX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcImRlZmF1bHRcIl0sXG4gIF9zdmdfaWNvbl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfNjg0Nzc2ZjhfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJyZW5kZXJcIl0sXG4gIF9zdmdfaWNvbl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfNjg0Nzc2ZjhfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl0sXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGFwaTsgfVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2NvbXBvbmVudHMvc3ZnLWljb24vc3ZnLWljb24udnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoY29tcG9uZW50LmV4cG9ydHMpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9zdmctaWNvbi9zdmctaWNvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL2NvbXBvbmVudHMvc3ZnLWljb24vc3ZnLWljb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGRlZmF1bHQsIFN2Z0ljb24gKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19zdmdfaWNvbl92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAtIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXI/P3JlZi0tMCEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3N2Zy1pY29uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKi8gXCIuL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvY29tcG9uZW50cy9zdmctaWNvbi9zdmctaWNvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiU3ZnSWNvblwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfc3ZnX2ljb25fdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiU3ZnSWNvblwiXTsgfSk7XG5cbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfc3ZnX2ljb25fdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiZGVmYXVsdFwiXSk7IFxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy9zdmctaWNvbi9zdmctaWNvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9Njg0Nzc2ZjgmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL2NvbXBvbmVudHMvc3ZnLWljb24vc3ZnLWljb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTY4NDc3NmY4JiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19zdmdfaWNvbl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfNjg0Nzc2ZjhfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAtIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zdmctaWNvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9Njg0Nzc2ZjgmICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9jb21wb25lbnRzL3N2Zy1pY29uL3N2Zy1pY29uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02ODQ3NzZmOCZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfc3ZnX2ljb25fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzY4NDc3NmY4X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVuZGVyXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic3RhdGljUmVuZGVyRm5zXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3N2Z19pY29uX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF82ODQ3NzZmOF9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN0YXRpY1JlbmRlckZuc1wiXTsgfSk7XG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy90YWdib3gvdGFnYm94LWZpbHRlci52dWVcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9jb21wb25lbnRzL3RhZ2JveC90YWdib3gtZmlsdGVyLnZ1ZSAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogVGFnYm94RmlsdGVyQ29tcG9uZW50LCBkZWZhdWx0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF90YWdib3hfZmlsdGVyX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF9kYzJiYzY4Nl9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vdGFnYm94LWZpbHRlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZGMyYmM2ODYmICovIFwiLi9zcmMvdnVlL2NvbXBvbmVudHMvdGFnYm94L3RhZ2JveC1maWx0ZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWRjMmJjNjg2JlwiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdGFnYm94X2ZpbHRlcl92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3RhZ2JveC1maWx0ZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL3RhZ2JveC90YWdib3gtZmlsdGVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJUYWdib3hGaWx0ZXJDb21wb25lbnRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdGFnYm94X2ZpbHRlcl92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJUYWdib3hGaWx0ZXJDb21wb25lbnRcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9ydW50aW1lX2NvbXBvbmVudE5vcm1hbGl6ZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanMgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIik7XG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgY29tcG9uZW50ID0gT2JqZWN0KF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJkZWZhdWx0XCJdKShcbiAgX3RhZ2JveF9maWx0ZXJfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiZGVmYXVsdFwiXSxcbiAgX3RhZ2JveF9maWx0ZXJfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkX2RjMmJjNjg2X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVuZGVyXCJdLFxuICBfdGFnYm94X2ZpbHRlcl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfZGMyYmM2ODZfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl0sXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGFwaTsgfVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2NvbXBvbmVudHMvdGFnYm94L3RhZ2JveC1maWx0ZXIudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoY29tcG9uZW50LmV4cG9ydHMpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy90YWdib3gvdGFnYm94LWZpbHRlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL2NvbXBvbmVudHMvdGFnYm94L3RhZ2JveC1maWx0ZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGRlZmF1bHQsIFRhZ2JveEZpbHRlckNvbXBvbmVudCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3RhZ2JveF9maWx0ZXJfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyPz9yZWYtLTAhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi90YWdib3gtZmlsdGVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKi8gXCIuL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvY29tcG9uZW50cy90YWdib3gvdGFnYm94LWZpbHRlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiVGFnYm94RmlsdGVyQ29tcG9uZW50XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc190YWdib3hfZmlsdGVyX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlRhZ2JveEZpbHRlckNvbXBvbmVudFwiXTsgfSk7XG5cbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfdGFnYm94X2ZpbHRlcl92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJkZWZhdWx0XCJdKTsgXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL3RhZ2JveC90YWdib3gtZmlsdGVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1kYzJiYzY4NiZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvY29tcG9uZW50cy90YWdib3gvdGFnYm94LWZpbHRlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZGMyYmM2ODYmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3RhZ2JveF9maWx0ZXJfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkX2RjMmJjNjg2X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vdGFnYm94LWZpbHRlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZGMyYmM2ODYmICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9jb21wb25lbnRzL3RhZ2JveC90YWdib3gtZmlsdGVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1kYzJiYzY4NiZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfdGFnYm94X2ZpbHRlcl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfZGMyYmM2ODZfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJyZW5kZXJcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzdGF0aWNSZW5kZXJGbnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfdGFnYm94X2ZpbHRlcl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfZGMyYmM2ODZfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl07IH0pO1xuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL2NvbXBvbmVudHMvdGFnYm94L3RhZ2JveC1pdGVtLnZ1ZVwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9jb21wb25lbnRzL3RhZ2JveC90YWdib3gtaXRlbS52dWUgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBUYWdib3hJdGVtLCBkZWZhdWx0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF90YWdib3hfaXRlbV92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfNDZjNzYzZDBfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3RhZ2JveC1pdGVtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00NmM3NjNkMCYgKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy90YWdib3gvdGFnYm94LWl0ZW0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTQ2Yzc2M2QwJlwiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdGFnYm94X2l0ZW1fdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi90YWdib3gtaXRlbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICovIFwiLi9zcmMvdnVlL2NvbXBvbmVudHMvdGFnYm94L3RhZ2JveC1pdGVtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJUYWdib3hJdGVtXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3RhZ2JveF9pdGVtX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlRhZ2JveEl0ZW1cIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9ydW50aW1lX2NvbXBvbmVudE5vcm1hbGl6ZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanMgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIik7XG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgY29tcG9uZW50ID0gT2JqZWN0KF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJkZWZhdWx0XCJdKShcbiAgX3RhZ2JveF9pdGVtX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcImRlZmF1bHRcIl0sXG4gIF90YWdib3hfaXRlbV92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfNDZjNzYzZDBfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJyZW5kZXJcIl0sXG4gIF90YWdib3hfaXRlbV92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfNDZjNzYzZDBfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl0sXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGFwaTsgfVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2NvbXBvbmVudHMvdGFnYm94L3RhZ2JveC1pdGVtLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKGNvbXBvbmVudC5leHBvcnRzKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL2NvbXBvbmVudHMvdGFnYm94L3RhZ2JveC1pdGVtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL2NvbXBvbmVudHMvdGFnYm94L3RhZ2JveC1pdGVtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogZGVmYXVsdCwgVGFnYm94SXRlbSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3RhZ2JveF9pdGVtX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vdGFnYm94LWl0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqLyBcIi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9jb21wb25lbnRzL3RhZ2JveC90YWdib3gtaXRlbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiVGFnYm94SXRlbVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfdGFnYm94X2l0ZW1fdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiVGFnYm94SXRlbVwiXTsgfSk7XG5cbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfdGFnYm94X2l0ZW1fdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiZGVmYXVsdFwiXSk7IFxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy90YWdib3gvdGFnYm94LWl0ZW0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTQ2Yzc2M2QwJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvY29tcG9uZW50cy90YWdib3gvdGFnYm94LWl0ZW0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTQ2Yzc2M2QwJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfdGFnYm94X2l0ZW1fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzQ2Yzc2M2QwX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vdGFnYm94LWl0ZW0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTQ2Yzc2M2QwJiAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvY29tcG9uZW50cy90YWdib3gvdGFnYm94LWl0ZW0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTQ2Yzc2M2QwJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInJlbmRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc190YWdib3hfaXRlbV92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfNDZjNzYzZDBfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJyZW5kZXJcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzdGF0aWNSZW5kZXJGbnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfdGFnYm94X2l0ZW1fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzQ2Yzc2M2QwX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3RhdGljUmVuZGVyRm5zXCJdOyB9KTtcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL3RhZ2JveC90YWdib3gudnVlXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9jb21wb25lbnRzL3RhZ2JveC90YWdib3gudnVlICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFRhZ2JveENvbXBvbmVudCwgZGVmYXVsdCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdGFnYm94X3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF9hMTVmYzg1MF9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vdGFnYm94LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1hMTVmYzg1MCYgKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy90YWdib3gvdGFnYm94LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1hMTVmYzg1MCZcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3RhZ2JveF92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3RhZ2JveC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICovIFwiLi9zcmMvdnVlL2NvbXBvbmVudHMvdGFnYm94L3RhZ2JveC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiVGFnYm94Q29tcG9uZW50XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3RhZ2JveF92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJUYWdib3hDb21wb25lbnRcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9ydW50aW1lX2NvbXBvbmVudE5vcm1hbGl6ZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanMgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIik7XG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgY29tcG9uZW50ID0gT2JqZWN0KF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJkZWZhdWx0XCJdKShcbiAgX3RhZ2JveF92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJkZWZhdWx0XCJdLFxuICBfdGFnYm94X3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF9hMTVmYzg1MF9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInJlbmRlclwiXSxcbiAgX3RhZ2JveF92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfYTE1ZmM4NTBfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl0sXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGFwaTsgfVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2NvbXBvbmVudHMvdGFnYm94L3RhZ2JveC52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChjb21wb25lbnQuZXhwb3J0cyk7XG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL3RhZ2JveC90YWdib3gudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL2NvbXBvbmVudHMvdGFnYm94L3RhZ2JveC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBkZWZhdWx0LCBUYWdib3hDb21wb25lbnQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc190YWdib3hfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyPz9yZWYtLTAhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi90YWdib3gudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqLyBcIi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9jb21wb25lbnRzL3RhZ2JveC90YWdib3gudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlRhZ2JveENvbXBvbmVudFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfdGFnYm94X3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlRhZ2JveENvbXBvbmVudFwiXTsgfSk7XG5cbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfdGFnYm94X3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcImRlZmF1bHRcIl0pOyBcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL2NvbXBvbmVudHMvdGFnYm94L3RhZ2JveC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9YTE1ZmM4NTAmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvY29tcG9uZW50cy90YWdib3gvdGFnYm94LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1hMTVmYzg1MCYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc190YWdib3hfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkX2ExNWZjODUwX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vdGFnYm94LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1hMTVmYzg1MCYgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2NvbXBvbmVudHMvdGFnYm94L3RhZ2JveC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9YTE1ZmM4NTAmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwicmVuZGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3RhZ2JveF92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfYTE1ZmM4NTBfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJyZW5kZXJcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzdGF0aWNSZW5kZXJGbnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfdGFnYm94X3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF9hMTVmYzg1MF9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN0YXRpY1JlbmRlckZuc1wiXTsgfSk7XG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy90aXRsZS90aXRsZS1hY3Rpb25zLnZ1ZVwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvY29tcG9uZW50cy90aXRsZS90aXRsZS1hY3Rpb25zLnZ1ZSAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBUaXRsZUFjdGlvbnMsIGRlZmF1bHQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3RpdGxlX2FjdGlvbnNfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkX2M5Mzg1NTRjX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi90aXRsZS1hY3Rpb25zLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1jOTM4NTU0YyYgKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy90aXRsZS90aXRsZS1hY3Rpb25zLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1jOTM4NTU0YyZcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3RpdGxlX2FjdGlvbnNfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi90aXRsZS1hY3Rpb25zLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy90aXRsZS90aXRsZS1hY3Rpb25zLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJUaXRsZUFjdGlvbnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdGl0bGVfYWN0aW9uc192dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJUaXRsZUFjdGlvbnNcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9ydW50aW1lX2NvbXBvbmVudE5vcm1hbGl6ZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanMgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIik7XG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgY29tcG9uZW50ID0gT2JqZWN0KF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJkZWZhdWx0XCJdKShcbiAgX3RpdGxlX2FjdGlvbnNfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiZGVmYXVsdFwiXSxcbiAgX3RpdGxlX2FjdGlvbnNfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkX2M5Mzg1NTRjX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVuZGVyXCJdLFxuICBfdGl0bGVfYWN0aW9uc192dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfYzkzODU1NGNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl0sXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGFwaTsgfVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2NvbXBvbmVudHMvdGl0bGUvdGl0bGUtYWN0aW9ucy52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChjb21wb25lbnQuZXhwb3J0cyk7XG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL3RpdGxlL3RpdGxlLWFjdGlvbnMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL2NvbXBvbmVudHMvdGl0bGUvdGl0bGUtYWN0aW9ucy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBkZWZhdWx0LCBUaXRsZUFjdGlvbnMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc190aXRsZV9hY3Rpb25zX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vdGl0bGUtYWN0aW9ucy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICovIFwiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2NvbXBvbmVudHMvdGl0bGUvdGl0bGUtYWN0aW9ucy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiVGl0bGVBY3Rpb25zXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc190aXRsZV9hY3Rpb25zX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlRpdGxlQWN0aW9uc1wiXTsgfSk7XG5cbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfdGl0bGVfYWN0aW9uc192dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJkZWZhdWx0XCJdKTsgXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL3RpdGxlL3RpdGxlLWFjdGlvbnMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWM5Mzg1NTRjJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL2NvbXBvbmVudHMvdGl0bGUvdGl0bGUtYWN0aW9ucy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9YzkzODU1NGMmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfdGl0bGVfYWN0aW9uc192dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfYzkzODU1NGNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAtIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi90aXRsZS1hY3Rpb25zLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1jOTM4NTU0YyYgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2NvbXBvbmVudHMvdGl0bGUvdGl0bGUtYWN0aW9ucy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9YzkzODU1NGMmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwicmVuZGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3RpdGxlX2FjdGlvbnNfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkX2M5Mzg1NTRjX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVuZGVyXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic3RhdGljUmVuZGVyRm5zXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3RpdGxlX2FjdGlvbnNfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkX2M5Mzg1NTRjX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3RhdGljUmVuZGVyRm5zXCJdOyB9KTtcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL3RpdGxlL3RpdGxlLWNvbnRlbnQudnVlXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9jb21wb25lbnRzL3RpdGxlL3RpdGxlLWNvbnRlbnQudnVlICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFRpdGxlQ29udGVudCwgZGVmYXVsdCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdGl0bGVfY29udGVudF92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMjRjMGEyZDZfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3RpdGxlLWNvbnRlbnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTI0YzBhMmQ2JiAqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL3RpdGxlL3RpdGxlLWNvbnRlbnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTI0YzBhMmQ2JlwiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdGl0bGVfY29udGVudF92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3RpdGxlLWNvbnRlbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqLyBcIi4vc3JjL3Z1ZS9jb21wb25lbnRzL3RpdGxlL3RpdGxlLWNvbnRlbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlRpdGxlQ29udGVudFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF90aXRsZV9jb250ZW50X3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlRpdGxlQ29udGVudFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX3J1bnRpbWVfY29tcG9uZW50Tm9ybWFsaXplcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qcyAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiKTtcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBjb21wb25lbnQgPSBPYmplY3QoX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9ydW50aW1lX2NvbXBvbmVudE5vcm1hbGl6ZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcImRlZmF1bHRcIl0pKFxuICBfdGl0bGVfY29udGVudF92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJkZWZhdWx0XCJdLFxuICBfdGl0bGVfY29udGVudF92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMjRjMGEyZDZfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJyZW5kZXJcIl0sXG4gIF90aXRsZV9jb250ZW50X3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF8yNGMwYTJkNl9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN0YXRpY1JlbmRlckZuc1wiXSxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgYXBpOyB9XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvY29tcG9uZW50cy90aXRsZS90aXRsZS1jb250ZW50LnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKGNvbXBvbmVudC5leHBvcnRzKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL2NvbXBvbmVudHMvdGl0bGUvdGl0bGUtY29udGVudC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvY29tcG9uZW50cy90aXRsZS90aXRsZS1jb250ZW50LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGRlZmF1bHQsIFRpdGxlQ29udGVudCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3RpdGxlX2NvbnRlbnRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyPz9yZWYtLTAhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi90aXRsZS1jb250ZW50LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKi8gXCIuL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvY29tcG9uZW50cy90aXRsZS90aXRsZS1jb250ZW50LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJUaXRsZUNvbnRlbnRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3RpdGxlX2NvbnRlbnRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiVGl0bGVDb250ZW50XCJdOyB9KTtcblxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc190aXRsZV9jb250ZW50X3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcImRlZmF1bHRcIl0pOyBcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL2NvbXBvbmVudHMvdGl0bGUvdGl0bGUtY29udGVudC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MjRjMGEyZDYmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvY29tcG9uZW50cy90aXRsZS90aXRsZS1jb250ZW50LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yNGMwYTJkNiYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc190aXRsZV9jb250ZW50X3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF8yNGMwYTJkNl9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3RpdGxlLWNvbnRlbnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTI0YzBhMmQ2JiAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvY29tcG9uZW50cy90aXRsZS90aXRsZS1jb250ZW50LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yNGMwYTJkNiZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfdGl0bGVfY29udGVudF92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMjRjMGEyZDZfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJyZW5kZXJcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzdGF0aWNSZW5kZXJGbnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfdGl0bGVfY29udGVudF92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMjRjMGEyZDZfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl07IH0pO1xuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL2NvbXBvbmVudHMvdGl0bGUvdGl0bGUtZWxlbWVudC52dWVcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL2NvbXBvbmVudHMvdGl0bGUvdGl0bGUtZWxlbWVudC52dWUgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogVGl0bGVFbGVtZW50LCBkZWZhdWx0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF90aXRsZV9lbGVtZW50X3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF82NDFkOTNkOV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vdGl0bGUtZWxlbWVudC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NjQxZDkzZDkmICovIFwiLi9zcmMvdnVlL2NvbXBvbmVudHMvdGl0bGUvdGl0bGUtZWxlbWVudC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NjQxZDkzZDkmXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF90aXRsZV9lbGVtZW50X3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vdGl0bGUtZWxlbWVudC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICovIFwiLi9zcmMvdnVlL2NvbXBvbmVudHMvdGl0bGUvdGl0bGUtZWxlbWVudC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiVGl0bGVFbGVtZW50XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3RpdGxlX2VsZW1lbnRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiVGl0bGVFbGVtZW50XCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCIpO1xuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGNvbXBvbmVudCA9IE9iamVjdChfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX3J1bnRpbWVfY29tcG9uZW50Tm9ybWFsaXplcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiZGVmYXVsdFwiXSkoXG4gIF90aXRsZV9lbGVtZW50X3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcImRlZmF1bHRcIl0sXG4gIF90aXRsZV9lbGVtZW50X3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF82NDFkOTNkOV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInJlbmRlclwiXSxcbiAgX3RpdGxlX2VsZW1lbnRfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzY0MWQ5M2Q5X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3RhdGljUmVuZGVyRm5zXCJdLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBhcGk7IH1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9jb21wb25lbnRzL3RpdGxlL3RpdGxlLWVsZW1lbnQudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoY29tcG9uZW50LmV4cG9ydHMpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy90aXRsZS90aXRsZS1lbGVtZW50LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9jb21wb25lbnRzL3RpdGxlL3RpdGxlLWVsZW1lbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogZGVmYXVsdCwgVGl0bGVFbGVtZW50ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfdGl0bGVfZWxlbWVudF92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAtIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXI/P3JlZi0tMCEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3RpdGxlLWVsZW1lbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqLyBcIi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9jb21wb25lbnRzL3RpdGxlL3RpdGxlLWVsZW1lbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlRpdGxlRWxlbWVudFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfdGl0bGVfZWxlbWVudF92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJUaXRsZUVsZW1lbnRcIl07IH0pO1xuXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3RpdGxlX2VsZW1lbnRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiZGVmYXVsdFwiXSk7IFxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvY29tcG9uZW50cy90aXRsZS90aXRsZS1lbGVtZW50LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02NDFkOTNkOSZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9jb21wb25lbnRzL3RpdGxlL3RpdGxlLWVsZW1lbnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTY0MWQ5M2Q5JiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3RpdGxlX2VsZW1lbnRfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzY0MWQ5M2Q5X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vdGl0bGUtZWxlbWVudC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NjQxZDkzZDkmICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9jb21wb25lbnRzL3RpdGxlL3RpdGxlLWVsZW1lbnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTY0MWQ5M2Q5JlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInJlbmRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc190aXRsZV9lbGVtZW50X3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF82NDFkOTNkOV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInJlbmRlclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc190aXRsZV9lbGVtZW50X3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF82NDFkOTNkOV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN0YXRpY1JlbmRlckZuc1wiXTsgfSk7XG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvY29tcG9zaXRlLnZ1ZVwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvY29tcG9zaXRlLnZ1ZSAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBDb21wb3NpdGUsIGRlZmF1bHQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2NvbXBvc2l0ZV92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMWE5ZTIxOTZfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2NvbXBvc2l0ZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MWE5ZTIxOTYmICovIFwiLi9zcmMvdnVlL2NvbXBvc2l0ZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MWE5ZTIxOTYmXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9jb21wb3NpdGVfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9jb21wb3NpdGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqLyBcIi4vc3JjL3Z1ZS9jb21wb3NpdGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkNvbXBvc2l0ZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jb21wb3NpdGVfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiQ29tcG9zaXRlXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCIpO1xuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGNvbXBvbmVudCA9IE9iamVjdChfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX3J1bnRpbWVfY29tcG9uZW50Tm9ybWFsaXplcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiZGVmYXVsdFwiXSkoXG4gIF9jb21wb3NpdGVfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiZGVmYXVsdFwiXSxcbiAgX2NvbXBvc2l0ZV92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMWE5ZTIxOTZfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJyZW5kZXJcIl0sXG4gIF9jb21wb3NpdGVfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzFhOWUyMTk2X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3RhdGljUmVuZGVyRm5zXCJdLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBhcGk7IH1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9jb21wb3NpdGUudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoY29tcG9uZW50LmV4cG9ydHMpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvY29tcG9zaXRlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9jb21wb3NpdGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogZGVmYXVsdCwgQ29tcG9zaXRlICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfY29tcG9zaXRlX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vY29tcG9zaXRlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKi8gXCIuL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvY29tcG9zaXRlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJDb21wb3NpdGVcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2NvbXBvc2l0ZV92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJDb21wb3NpdGVcIl07IH0pO1xuXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2NvbXBvc2l0ZV92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJkZWZhdWx0XCJdKTsgXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9jb21wb3NpdGUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTFhOWUyMTk2JlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL2NvbXBvc2l0ZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MWE5ZTIxOTYmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfY29tcG9zaXRlX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF8xYTllMjE5Nl9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2NvbXBvc2l0ZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MWE5ZTIxOTYmICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9jb21wb3NpdGUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTFhOWUyMTk2JlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInJlbmRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19jb21wb3NpdGVfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzFhOWUyMTk2X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVuZGVyXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic3RhdGljUmVuZGVyRm5zXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2NvbXBvc2l0ZV92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMWE5ZTIxOTZfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl07IH0pO1xuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL2N1c3RvbS52dWVcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL2N1c3RvbS52dWUgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogQ3VzdG9tLCBkZWZhdWx0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9jdXN0b21fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkX2Q0YWFlMDlhX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9jdXN0b20udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWQ0YWFlMDlhJiAqLyBcIi4vc3JjL3Z1ZS9jdXN0b20udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWQ0YWFlMDlhJlwiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfY3VzdG9tX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vY3VzdG9tLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKi8gXCIuL3NyYy92dWUvY3VzdG9tLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJDdXN0b21cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY3VzdG9tX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIkN1c3RvbVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX3J1bnRpbWVfY29tcG9uZW50Tm9ybWFsaXplcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qcyAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiKTtcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBjb21wb25lbnQgPSBPYmplY3QoX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9ydW50aW1lX2NvbXBvbmVudE5vcm1hbGl6ZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcImRlZmF1bHRcIl0pKFxuICBfY3VzdG9tX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcImRlZmF1bHRcIl0sXG4gIF9jdXN0b21fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkX2Q0YWFlMDlhX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVuZGVyXCJdLFxuICBfY3VzdG9tX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF9kNGFhZTA5YV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN0YXRpY1JlbmRlckZuc1wiXSxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgYXBpOyB9XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvY3VzdG9tLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKGNvbXBvbmVudC5leHBvcnRzKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL2N1c3RvbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvY3VzdG9tLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGRlZmF1bHQsIEN1c3RvbSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2N1c3RvbV92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAtIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXI/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2N1c3RvbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICovIFwiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2N1c3RvbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQ3VzdG9tXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19jdXN0b21fdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiQ3VzdG9tXCJdOyB9KTtcblxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19jdXN0b21fdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiZGVmYXVsdFwiXSk7IFxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvY3VzdG9tLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1kNGFhZTA5YSZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9jdXN0b20udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWQ0YWFlMDlhJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2N1c3RvbV92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfZDRhYWUwOWFfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAtIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9jdXN0b20udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWQ0YWFlMDlhJiAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvY3VzdG9tLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1kNGFhZTA5YSZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfY3VzdG9tX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF9kNGFhZTA5YV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInJlbmRlclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19jdXN0b21fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkX2Q0YWFlMDlhX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3RhdGljUmVuZGVyRm5zXCJdOyB9KTtcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9jdXN0b213aWRnZXQudnVlXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9jdXN0b213aWRnZXQudnVlICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEN1c3RvbVdpZGdldCwgZGVmYXVsdCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfY3VzdG9td2lkZ2V0X3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF8xZTYxYTdiN19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vY3VzdG9td2lkZ2V0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xZTYxYTdiNyYgKi8gXCIuL3NyYy92dWUvY3VzdG9td2lkZ2V0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xZTYxYTdiNyZcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2N1c3RvbXdpZGdldF92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2N1c3RvbXdpZGdldC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICovIFwiLi9zcmMvdnVlL2N1c3RvbXdpZGdldC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQ3VzdG9tV2lkZ2V0XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2N1c3RvbXdpZGdldF92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJDdXN0b21XaWRnZXRcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9ydW50aW1lX2NvbXBvbmVudE5vcm1hbGl6ZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanMgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIik7XG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgY29tcG9uZW50ID0gT2JqZWN0KF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJkZWZhdWx0XCJdKShcbiAgX2N1c3RvbXdpZGdldF92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJkZWZhdWx0XCJdLFxuICBfY3VzdG9td2lkZ2V0X3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF8xZTYxYTdiN19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInJlbmRlclwiXSxcbiAgX2N1c3RvbXdpZGdldF92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMWU2MWE3YjdfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl0sXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGFwaTsgfVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2N1c3RvbXdpZGdldC52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChjb21wb25lbnQuZXhwb3J0cyk7XG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9jdXN0b213aWRnZXQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL2N1c3RvbXdpZGdldC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBkZWZhdWx0LCBDdXN0b21XaWRnZXQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19jdXN0b213aWRnZXRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9jdXN0b213aWRnZXQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqLyBcIi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9jdXN0b213aWRnZXQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkN1c3RvbVdpZGdldFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfY3VzdG9td2lkZ2V0X3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkN1c3RvbVdpZGdldFwiXTsgfSk7XG5cbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfY3VzdG9td2lkZ2V0X3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcImRlZmF1bHRcIl0pOyBcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL2N1c3RvbXdpZGdldC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MWU2MWE3YjcmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvY3VzdG9td2lkZ2V0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xZTYxYTdiNyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19jdXN0b213aWRnZXRfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzFlNjFhN2I3X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vY3VzdG9td2lkZ2V0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xZTYxYTdiNyYgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2N1c3RvbXdpZGdldC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MWU2MWE3YjcmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwicmVuZGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2N1c3RvbXdpZGdldF92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMWU2MWE3YjdfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJyZW5kZXJcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzdGF0aWNSZW5kZXJGbnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfY3VzdG9td2lkZ2V0X3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF8xZTYxYTdiN19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN0YXRpY1JlbmRlckZuc1wiXTsgfSk7XG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvZHJvcGRvd24tc2VsZWN0LnZ1ZVwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvZHJvcGRvd24tc2VsZWN0LnZ1ZSAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBEcm9wZG93blNlbGVjdCwgZGVmYXVsdCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZHJvcGRvd25fc2VsZWN0X3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF84MTk5ZWMzNF9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZHJvcGRvd24tc2VsZWN0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD04MTk5ZWMzNCYgKi8gXCIuL3NyYy92dWUvZHJvcGRvd24tc2VsZWN0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD04MTk5ZWMzNCZcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Ryb3Bkb3duX3NlbGVjdF92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2Ryb3Bkb3duLXNlbGVjdC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICovIFwiLi9zcmMvdnVlL2Ryb3Bkb3duLXNlbGVjdC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiRHJvcGRvd25TZWxlY3RcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfZHJvcGRvd25fc2VsZWN0X3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIkRyb3Bkb3duU2VsZWN0XCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCIpO1xuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGNvbXBvbmVudCA9IE9iamVjdChfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX3J1bnRpbWVfY29tcG9uZW50Tm9ybWFsaXplcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiZGVmYXVsdFwiXSkoXG4gIF9kcm9wZG93bl9zZWxlY3RfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiZGVmYXVsdFwiXSxcbiAgX2Ryb3Bkb3duX3NlbGVjdF92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfODE5OWVjMzRfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJyZW5kZXJcIl0sXG4gIF9kcm9wZG93bl9zZWxlY3RfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzgxOTllYzM0X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3RhdGljUmVuZGVyRm5zXCJdLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBhcGk7IH1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9kcm9wZG93bi1zZWxlY3QudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoY29tcG9uZW50LmV4cG9ydHMpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvZHJvcGRvd24tc2VsZWN0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9kcm9wZG93bi1zZWxlY3QudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogZGVmYXVsdCwgRHJvcGRvd25TZWxlY3QgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19kcm9wZG93bl9zZWxlY3RfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9kcm9wZG93bi1zZWxlY3QudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqLyBcIi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9kcm9wZG93bi1zZWxlY3QudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkRyb3Bkb3duU2VsZWN0XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19kcm9wZG93bl9zZWxlY3RfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiRHJvcGRvd25TZWxlY3RcIl07IH0pO1xuXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2Ryb3Bkb3duX3NlbGVjdF92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJkZWZhdWx0XCJdKTsgXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9kcm9wZG93bi1zZWxlY3QudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTgxOTllYzM0JlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL2Ryb3Bkb3duLXNlbGVjdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ODE5OWVjMzQmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfZHJvcGRvd25fc2VsZWN0X3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF84MTk5ZWMzNF9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2Ryb3Bkb3duLXNlbGVjdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ODE5OWVjMzQmICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9kcm9wZG93bi1zZWxlY3QudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTgxOTllYzM0JlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInJlbmRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19kcm9wZG93bl9zZWxlY3RfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzgxOTllYzM0X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVuZGVyXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic3RhdGljUmVuZGVyRm5zXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2Ryb3Bkb3duX3NlbGVjdF92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfODE5OWVjMzRfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl07IH0pO1xuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL2Ryb3Bkb3duLnZ1ZVwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9kcm9wZG93bi52dWUgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBEcm9wZG93biwgZGVmYXVsdCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZHJvcGRvd25fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzZiMzIxNWQzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9kcm9wZG93bi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NmIzMjE1ZDMmICovIFwiLi9zcmMvdnVlL2Ryb3Bkb3duLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02YjMyMTVkMyZcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Ryb3Bkb3duX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZHJvcGRvd24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqLyBcIi4vc3JjL3Z1ZS9kcm9wZG93bi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiRHJvcGRvd25cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfZHJvcGRvd25fdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiRHJvcGRvd25cIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9ydW50aW1lX2NvbXBvbmVudE5vcm1hbGl6ZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanMgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIik7XG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgY29tcG9uZW50ID0gT2JqZWN0KF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJkZWZhdWx0XCJdKShcbiAgX2Ryb3Bkb3duX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcImRlZmF1bHRcIl0sXG4gIF9kcm9wZG93bl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfNmIzMjE1ZDNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJyZW5kZXJcIl0sXG4gIF9kcm9wZG93bl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfNmIzMjE1ZDNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl0sXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGFwaTsgfVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2Ryb3Bkb3duLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKGNvbXBvbmVudC5leHBvcnRzKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL2Ryb3Bkb3duLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL2Ryb3Bkb3duLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogZGVmYXVsdCwgRHJvcGRvd24gKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19kcm9wZG93bl92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAtIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXI/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2Ryb3Bkb3duLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKi8gXCIuL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvZHJvcGRvd24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkRyb3Bkb3duXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19kcm9wZG93bl92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJEcm9wZG93blwiXTsgfSk7XG5cbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfZHJvcGRvd25fdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiZGVmYXVsdFwiXSk7IFxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvZHJvcGRvd24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTZiMzIxNWQzJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvZHJvcGRvd24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTZiMzIxNWQzJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfZHJvcGRvd25fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzZiMzIxNWQzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vZHJvcGRvd24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTZiMzIxNWQzJiAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvZHJvcGRvd24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTZiMzIxNWQzJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInJlbmRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19kcm9wZG93bl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfNmIzMjE1ZDNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJyZW5kZXJcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzdGF0aWNSZW5kZXJGbnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfZHJvcGRvd25fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzZiMzIxNWQzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3RhdGljUmVuZGVyRm5zXCJdOyB9KTtcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9lbGVtZW50LnZ1ZVwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL2VsZW1lbnQudnVlICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBTdXJ2ZXlFbGVtZW50VnVlLCBkZWZhdWx0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9lbGVtZW50X3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF85NzM0NzJhY19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZWxlbWVudC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9OTczNDcyYWMmICovIFwiLi9zcmMvdnVlL2VsZW1lbnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTk3MzQ3MmFjJlwiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZWxlbWVudF92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2VsZW1lbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqLyBcIi4vc3JjL3Z1ZS9lbGVtZW50LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJTdXJ2ZXlFbGVtZW50VnVlXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2VsZW1lbnRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiU3VydmV5RWxlbWVudFZ1ZVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX3J1bnRpbWVfY29tcG9uZW50Tm9ybWFsaXplcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qcyAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiKTtcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBjb21wb25lbnQgPSBPYmplY3QoX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9ydW50aW1lX2NvbXBvbmVudE5vcm1hbGl6ZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcImRlZmF1bHRcIl0pKFxuICBfZWxlbWVudF92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJkZWZhdWx0XCJdLFxuICBfZWxlbWVudF92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfOTczNDcyYWNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJyZW5kZXJcIl0sXG4gIF9lbGVtZW50X3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF85NzM0NzJhY19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN0YXRpY1JlbmRlckZuc1wiXSxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgYXBpOyB9XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvZWxlbWVudC52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChjb21wb25lbnQuZXhwb3J0cyk7XG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9lbGVtZW50LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvZWxlbWVudC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogZGVmYXVsdCwgU3VydmV5RWxlbWVudFZ1ZSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2VsZW1lbnRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9lbGVtZW50LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKi8gXCIuL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvZWxlbWVudC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiU3VydmV5RWxlbWVudFZ1ZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfZWxlbWVudF92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJTdXJ2ZXlFbGVtZW50VnVlXCJdOyB9KTtcblxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19lbGVtZW50X3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcImRlZmF1bHRcIl0pOyBcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL2VsZW1lbnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTk3MzQ3MmFjJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9lbGVtZW50LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD05NzM0NzJhYyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfZWxlbWVudF92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfOTczNDcyYWNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAtIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9lbGVtZW50LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD05NzM0NzJhYyYgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2VsZW1lbnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTk3MzQ3MmFjJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInJlbmRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19lbGVtZW50X3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF85NzM0NzJhY19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInJlbmRlclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19lbGVtZW50X3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF85NzM0NzJhY19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN0YXRpY1JlbmRlckZuc1wiXTsgfSk7XG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvZWxlbWVudGhlYWRlci52dWVcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9lbGVtZW50aGVhZGVyLnZ1ZSAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogRWxlbWVudEhlYWRlciwgZGVmYXVsdCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZWxlbWVudGhlYWRlcl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMjdhZGM1MzdfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2VsZW1lbnRoZWFkZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTI3YWRjNTM3JiAqLyBcIi4vc3JjL3Z1ZS9lbGVtZW50aGVhZGVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yN2FkYzUzNyZcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2VsZW1lbnRoZWFkZXJfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9lbGVtZW50aGVhZGVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKi8gXCIuL3NyYy92dWUvZWxlbWVudGhlYWRlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiRWxlbWVudEhlYWRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9lbGVtZW50aGVhZGVyX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIkVsZW1lbnRIZWFkZXJcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9ydW50aW1lX2NvbXBvbmVudE5vcm1hbGl6ZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanMgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIik7XG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgY29tcG9uZW50ID0gT2JqZWN0KF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJkZWZhdWx0XCJdKShcbiAgX2VsZW1lbnRoZWFkZXJfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiZGVmYXVsdFwiXSxcbiAgX2VsZW1lbnRoZWFkZXJfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzI3YWRjNTM3X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVuZGVyXCJdLFxuICBfZWxlbWVudGhlYWRlcl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMjdhZGM1MzdfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl0sXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGFwaTsgfVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2VsZW1lbnRoZWFkZXIudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoY29tcG9uZW50LmV4cG9ydHMpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvZWxlbWVudGhlYWRlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL2VsZW1lbnRoZWFkZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGRlZmF1bHQsIEVsZW1lbnRIZWFkZXIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19lbGVtZW50aGVhZGVyX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vZWxlbWVudGhlYWRlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICovIFwiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2VsZW1lbnRoZWFkZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkVsZW1lbnRIZWFkZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2VsZW1lbnRoZWFkZXJfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiRWxlbWVudEhlYWRlclwiXTsgfSk7XG5cbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfZWxlbWVudGhlYWRlcl92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJkZWZhdWx0XCJdKTsgXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9lbGVtZW50aGVhZGVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yN2FkYzUzNyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvZWxlbWVudGhlYWRlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MjdhZGM1MzcmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2VsZW1lbnRoZWFkZXJfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzI3YWRjNTM3X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vZWxlbWVudGhlYWRlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MjdhZGM1MzcmICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9lbGVtZW50aGVhZGVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yN2FkYzUzNyZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfZWxlbWVudGhlYWRlcl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMjdhZGM1MzdfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJyZW5kZXJcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzdGF0aWNSZW5kZXJGbnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfZWxlbWVudGhlYWRlcl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMjdhZGM1MzdfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl07IH0pO1xuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL2VtcHR5LnZ1ZVwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9lbXB0eS52dWUgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBFbXB0eSwgZGVmYXVsdCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZW1wdHlfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzA1MDUyYzBhX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9lbXB0eS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MDUwNTJjMGEmICovIFwiLi9zcmMvdnVlL2VtcHR5LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wNTA1MmMwYSZcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2VtcHR5X3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZW1wdHkudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqLyBcIi4vc3JjL3Z1ZS9lbXB0eS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiRW1wdHlcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfZW1wdHlfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiRW1wdHlcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9ydW50aW1lX2NvbXBvbmVudE5vcm1hbGl6ZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanMgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIik7XG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgY29tcG9uZW50ID0gT2JqZWN0KF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJkZWZhdWx0XCJdKShcbiAgX2VtcHR5X3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcImRlZmF1bHRcIl0sXG4gIF9lbXB0eV92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMDUwNTJjMGFfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJyZW5kZXJcIl0sXG4gIF9lbXB0eV92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMDUwNTJjMGFfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl0sXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGFwaTsgfVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2VtcHR5LnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKGNvbXBvbmVudC5leHBvcnRzKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL2VtcHR5LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL2VtcHR5LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogZGVmYXVsdCwgRW1wdHkgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19lbXB0eV92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAtIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXI/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2VtcHR5LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKi8gXCIuL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvZW1wdHkudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkVtcHR5XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19lbXB0eV92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJFbXB0eVwiXTsgfSk7XG5cbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfZW1wdHlfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiZGVmYXVsdFwiXSk7IFxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvZW1wdHkudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTA1MDUyYzBhJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvZW1wdHkudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTA1MDUyYzBhJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfZW1wdHlfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzA1MDUyYzBhX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vZW1wdHkudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTA1MDUyYzBhJiAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvZW1wdHkudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTA1MDUyYzBhJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInJlbmRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19lbXB0eV92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMDUwNTJjMGFfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJyZW5kZXJcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzdGF0aWNSZW5kZXJGbnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfZW1wdHlfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzA1MDUyYzBhX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3RhdGljUmVuZGVyRm5zXCJdOyB9KTtcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9lcnJvcnMudnVlXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9lcnJvcnMudnVlICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEVycm9ycywgZGVmYXVsdCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZXJyb3JzX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF81NjgyZTZhZF9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZXJyb3JzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01NjgyZTZhZCYgKi8gXCIuL3NyYy92dWUvZXJyb3JzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01NjgyZTZhZCZcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Vycm9yc192dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2Vycm9ycy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICovIFwiLi9zcmMvdnVlL2Vycm9ycy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiRXJyb3JzXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2Vycm9yc192dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJFcnJvcnNcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9ydW50aW1lX2NvbXBvbmVudE5vcm1hbGl6ZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanMgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIik7XG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgY29tcG9uZW50ID0gT2JqZWN0KF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJkZWZhdWx0XCJdKShcbiAgX2Vycm9yc192dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJkZWZhdWx0XCJdLFxuICBfZXJyb3JzX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF81NjgyZTZhZF9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInJlbmRlclwiXSxcbiAgX2Vycm9yc192dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfNTY4MmU2YWRfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl0sXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGFwaTsgfVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2Vycm9ycy52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChjb21wb25lbnQuZXhwb3J0cyk7XG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9lcnJvcnMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL2Vycm9ycy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBkZWZhdWx0LCBFcnJvcnMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19lcnJvcnNfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9lcnJvcnMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqLyBcIi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9lcnJvcnMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkVycm9yc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfZXJyb3JzX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkVycm9yc1wiXTsgfSk7XG5cbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfZXJyb3JzX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcImRlZmF1bHRcIl0pOyBcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL2Vycm9ycy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NTY4MmU2YWQmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvZXJyb3JzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01NjgyZTZhZCYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19lcnJvcnNfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzU2ODJlNmFkX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vZXJyb3JzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01NjgyZTZhZCYgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2Vycm9ycy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NTY4MmU2YWQmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwicmVuZGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2Vycm9yc192dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfNTY4MmU2YWRfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJyZW5kZXJcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzdGF0aWNSZW5kZXJGbnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfZXJyb3JzX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF81NjgyZTZhZF9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN0YXRpY1JlbmRlckZuc1wiXTsgfSk7XG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvZXhwcmVzc2lvbi52dWVcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9leHByZXNzaW9uLnZ1ZSAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogRXhwcmVzc2lvbiwgZGVmYXVsdCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZXhwcmVzc2lvbl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMWQyMDg2NWFfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2V4cHJlc3Npb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTFkMjA4NjVhJiAqLyBcIi4vc3JjL3Z1ZS9leHByZXNzaW9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xZDIwODY1YSZcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2V4cHJlc3Npb25fdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9leHByZXNzaW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKi8gXCIuL3NyYy92dWUvZXhwcmVzc2lvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiRXhwcmVzc2lvblwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9leHByZXNzaW9uX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIkV4cHJlc3Npb25cIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9ydW50aW1lX2NvbXBvbmVudE5vcm1hbGl6ZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanMgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIik7XG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgY29tcG9uZW50ID0gT2JqZWN0KF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJkZWZhdWx0XCJdKShcbiAgX2V4cHJlc3Npb25fdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiZGVmYXVsdFwiXSxcbiAgX2V4cHJlc3Npb25fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzFkMjA4NjVhX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVuZGVyXCJdLFxuICBfZXhwcmVzc2lvbl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMWQyMDg2NWFfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl0sXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGFwaTsgfVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2V4cHJlc3Npb24udnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoY29tcG9uZW50LmV4cG9ydHMpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvZXhwcmVzc2lvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL2V4cHJlc3Npb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGRlZmF1bHQsIEV4cHJlc3Npb24gKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19leHByZXNzaW9uX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vZXhwcmVzc2lvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICovIFwiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2V4cHJlc3Npb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkV4cHJlc3Npb25cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2V4cHJlc3Npb25fdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiRXhwcmVzc2lvblwiXTsgfSk7XG5cbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfZXhwcmVzc2lvbl92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJkZWZhdWx0XCJdKTsgXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9leHByZXNzaW9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xZDIwODY1YSZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvZXhwcmVzc2lvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MWQyMDg2NWEmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2V4cHJlc3Npb25fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzFkMjA4NjVhX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vZXhwcmVzc2lvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MWQyMDg2NWEmICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9leHByZXNzaW9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xZDIwODY1YSZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfZXhwcmVzc2lvbl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMWQyMDg2NWFfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJyZW5kZXJcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzdGF0aWNSZW5kZXJGbnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfZXhwcmVzc2lvbl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMWQyMDg2NWFfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl07IH0pO1xuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL2ZpbGUtY2xlYW4tYnV0dG9uLnZ1ZVwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9maWxlLWNsZWFuLWJ1dHRvbi52dWUgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBGaWxlQ2xlYW5CdXR0b24sIGRlZmF1bHQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2ZpbGVfY2xlYW5fYnV0dG9uX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF8yOWM4OTJkNl9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZmlsZS1jbGVhbi1idXR0b24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTI5Yzg5MmQ2JiAqLyBcIi4vc3JjL3Z1ZS9maWxlLWNsZWFuLWJ1dHRvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MjljODkyZDYmXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9maWxlX2NsZWFuX2J1dHRvbl92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2ZpbGUtY2xlYW4tYnV0dG9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKi8gXCIuL3NyYy92dWUvZmlsZS1jbGVhbi1idXR0b24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkZpbGVDbGVhbkJ1dHRvblwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9maWxlX2NsZWFuX2J1dHRvbl92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJGaWxlQ2xlYW5CdXR0b25cIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9ydW50aW1lX2NvbXBvbmVudE5vcm1hbGl6ZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanMgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIik7XG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgY29tcG9uZW50ID0gT2JqZWN0KF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJkZWZhdWx0XCJdKShcbiAgX2ZpbGVfY2xlYW5fYnV0dG9uX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcImRlZmF1bHRcIl0sXG4gIF9maWxlX2NsZWFuX2J1dHRvbl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMjljODkyZDZfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJyZW5kZXJcIl0sXG4gIF9maWxlX2NsZWFuX2J1dHRvbl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMjljODkyZDZfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl0sXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGFwaTsgfVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2ZpbGUtY2xlYW4tYnV0dG9uLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKGNvbXBvbmVudC5leHBvcnRzKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL2ZpbGUtY2xlYW4tYnV0dG9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL2ZpbGUtY2xlYW4tYnV0dG9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogZGVmYXVsdCwgRmlsZUNsZWFuQnV0dG9uICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfZmlsZV9jbGVhbl9idXR0b25fdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9maWxlLWNsZWFuLWJ1dHRvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICovIFwiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2ZpbGUtY2xlYW4tYnV0dG9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJGaWxlQ2xlYW5CdXR0b25cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2ZpbGVfY2xlYW5fYnV0dG9uX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkZpbGVDbGVhbkJ1dHRvblwiXTsgfSk7XG5cbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfZmlsZV9jbGVhbl9idXR0b25fdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiZGVmYXVsdFwiXSk7IFxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvZmlsZS1jbGVhbi1idXR0b24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTI5Yzg5MmQ2JlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvZmlsZS1jbGVhbi1idXR0b24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTI5Yzg5MmQ2JiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfZmlsZV9jbGVhbl9idXR0b25fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzI5Yzg5MmQ2X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vZmlsZS1jbGVhbi1idXR0b24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTI5Yzg5MmQ2JiAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvZmlsZS1jbGVhbi1idXR0b24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTI5Yzg5MmQ2JlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInJlbmRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19maWxlX2NsZWFuX2J1dHRvbl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMjljODkyZDZfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJyZW5kZXJcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzdGF0aWNSZW5kZXJGbnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfZmlsZV9jbGVhbl9idXR0b25fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzI5Yzg5MmQ2X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3RhdGljUmVuZGVyRm5zXCJdOyB9KTtcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9maWxlLXByZXZpZXcudnVlXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9maWxlLXByZXZpZXcudnVlICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEZpbGVQcmV2aWV3LCBkZWZhdWx0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9maWxlX3ByZXZpZXdfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzZiODY2YjhlX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9maWxlLXByZXZpZXcudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTZiODY2YjhlJiAqLyBcIi4vc3JjL3Z1ZS9maWxlLXByZXZpZXcudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTZiODY2YjhlJlwiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZmlsZV9wcmV2aWV3X3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZmlsZS1wcmV2aWV3LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKi8gXCIuL3NyYy92dWUvZmlsZS1wcmV2aWV3LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJGaWxlUHJldmlld1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9maWxlX3ByZXZpZXdfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiRmlsZVByZXZpZXdcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9ydW50aW1lX2NvbXBvbmVudE5vcm1hbGl6ZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanMgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIik7XG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgY29tcG9uZW50ID0gT2JqZWN0KF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJkZWZhdWx0XCJdKShcbiAgX2ZpbGVfcHJldmlld192dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJkZWZhdWx0XCJdLFxuICBfZmlsZV9wcmV2aWV3X3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF82Yjg2NmI4ZV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInJlbmRlclwiXSxcbiAgX2ZpbGVfcHJldmlld192dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfNmI4NjZiOGVfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl0sXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGFwaTsgfVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2ZpbGUtcHJldmlldy52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChjb21wb25lbnQuZXhwb3J0cyk7XG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9maWxlLXByZXZpZXcudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL2ZpbGUtcHJldmlldy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBkZWZhdWx0LCBGaWxlUHJldmlldyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2ZpbGVfcHJldmlld192dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAtIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXI/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2ZpbGUtcHJldmlldy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICovIFwiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2ZpbGUtcHJldmlldy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiRmlsZVByZXZpZXdcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2ZpbGVfcHJldmlld192dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJGaWxlUHJldmlld1wiXTsgfSk7XG5cbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfZmlsZV9wcmV2aWV3X3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcImRlZmF1bHRcIl0pOyBcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL2ZpbGUtcHJldmlldy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NmI4NjZiOGUmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvZmlsZS1wcmV2aWV3LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02Yjg2NmI4ZSYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19maWxlX3ByZXZpZXdfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzZiODY2YjhlX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vZmlsZS1wcmV2aWV3LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02Yjg2NmI4ZSYgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2ZpbGUtcHJldmlldy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NmI4NjZiOGUmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwicmVuZGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2ZpbGVfcHJldmlld192dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfNmI4NjZiOGVfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJyZW5kZXJcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzdGF0aWNSZW5kZXJGbnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfZmlsZV9wcmV2aWV3X3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF82Yjg2NmI4ZV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN0YXRpY1JlbmRlckZuc1wiXTsgfSk7XG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvZmlsZS12aWRlby52dWVcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9maWxlLXZpZGVvLnZ1ZSAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogRmlsZVZpZGVvLCBkZWZhdWx0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9maWxlX3ZpZGVvX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF83YjVjOGJhY19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZmlsZS12aWRlby52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9N2I1YzhiYWMmICovIFwiLi9zcmMvdnVlL2ZpbGUtdmlkZW8udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTdiNWM4YmFjJlwiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZmlsZV92aWRlb192dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2ZpbGUtdmlkZW8udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqLyBcIi4vc3JjL3Z1ZS9maWxlLXZpZGVvLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJGaWxlVmlkZW9cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfZmlsZV92aWRlb192dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJGaWxlVmlkZW9cIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9ydW50aW1lX2NvbXBvbmVudE5vcm1hbGl6ZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanMgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIik7XG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgY29tcG9uZW50ID0gT2JqZWN0KF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJkZWZhdWx0XCJdKShcbiAgX2ZpbGVfdmlkZW9fdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiZGVmYXVsdFwiXSxcbiAgX2ZpbGVfdmlkZW9fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzdiNWM4YmFjX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVuZGVyXCJdLFxuICBfZmlsZV92aWRlb192dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfN2I1YzhiYWNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl0sXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGFwaTsgfVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2ZpbGUtdmlkZW8udnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoY29tcG9uZW50LmV4cG9ydHMpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvZmlsZS12aWRlby52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL2ZpbGUtdmlkZW8udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGRlZmF1bHQsIEZpbGVWaWRlbyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2ZpbGVfdmlkZW9fdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9maWxlLXZpZGVvLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKi8gXCIuL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvZmlsZS12aWRlby52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiRmlsZVZpZGVvXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19maWxlX3ZpZGVvX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkZpbGVWaWRlb1wiXTsgfSk7XG5cbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfZmlsZV92aWRlb192dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJkZWZhdWx0XCJdKTsgXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9maWxlLXZpZGVvLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03YjVjOGJhYyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvZmlsZS12aWRlby52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9N2I1YzhiYWMmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2ZpbGVfdmlkZW9fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzdiNWM4YmFjX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vZmlsZS12aWRlby52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9N2I1YzhiYWMmICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9maWxlLXZpZGVvLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03YjVjOGJhYyZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfZmlsZV92aWRlb192dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfN2I1YzhiYWNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJyZW5kZXJcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzdGF0aWNSZW5kZXJGbnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfZmlsZV92aWRlb192dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfN2I1YzhiYWNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl07IH0pO1xuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL2ZpbGUudnVlXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvZmlsZS52dWUgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEZpbGUsIGRlZmF1bHQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2ZpbGVfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzIwZjcwMjg0X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9maWxlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yMGY3MDI4NCYgKi8gXCIuL3NyYy92dWUvZmlsZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MjBmNzAyODQmXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9maWxlX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZmlsZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICovIFwiLi9zcmMvdnVlL2ZpbGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkZpbGVcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfZmlsZV92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJGaWxlXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCIpO1xuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGNvbXBvbmVudCA9IE9iamVjdChfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX3J1bnRpbWVfY29tcG9uZW50Tm9ybWFsaXplcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiZGVmYXVsdFwiXSkoXG4gIF9maWxlX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcImRlZmF1bHRcIl0sXG4gIF9maWxlX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF8yMGY3MDI4NF9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInJlbmRlclwiXSxcbiAgX2ZpbGVfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzIwZjcwMjg0X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3RhdGljUmVuZGVyRm5zXCJdLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBhcGk7IH1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9maWxlLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKGNvbXBvbmVudC5leHBvcnRzKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL2ZpbGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9maWxlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBkZWZhdWx0LCBGaWxlICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfZmlsZV92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAtIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXI/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2ZpbGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqLyBcIi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9maWxlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJGaWxlXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19maWxlX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkZpbGVcIl07IH0pO1xuXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2ZpbGVfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiZGVmYXVsdFwiXSk7IFxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvZmlsZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MjBmNzAyODQmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL2ZpbGUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTIwZjcwMjg0JiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19maWxlX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF8yMGY3MDI4NF9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2ZpbGUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTIwZjcwMjg0JiAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvZmlsZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MjBmNzAyODQmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwicmVuZGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2ZpbGVfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzIwZjcwMjg0X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVuZGVyXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic3RhdGljUmVuZGVyRm5zXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2ZpbGVfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzIwZjcwMjg0X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3RhdGljUmVuZGVyRm5zXCJdOyB9KTtcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9mbG93cGFuZWwudnVlXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9mbG93cGFuZWwudnVlICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEZsb3dQYW5lbCwgZGVmYXVsdCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZmxvd3BhbmVsX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF85NmFlMWE3OF9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZmxvd3BhbmVsLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD05NmFlMWE3OCYgKi8gXCIuL3NyYy92dWUvZmxvd3BhbmVsLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD05NmFlMWE3OCZcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Zsb3dwYW5lbF92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2Zsb3dwYW5lbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICovIFwiLi9zcmMvdnVlL2Zsb3dwYW5lbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiRmxvd1BhbmVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2Zsb3dwYW5lbF92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJGbG93UGFuZWxcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9ydW50aW1lX2NvbXBvbmVudE5vcm1hbGl6ZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanMgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIik7XG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgY29tcG9uZW50ID0gT2JqZWN0KF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJkZWZhdWx0XCJdKShcbiAgX2Zsb3dwYW5lbF92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJkZWZhdWx0XCJdLFxuICBfZmxvd3BhbmVsX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF85NmFlMWE3OF9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInJlbmRlclwiXSxcbiAgX2Zsb3dwYW5lbF92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfOTZhZTFhNzhfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl0sXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGFwaTsgfVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2Zsb3dwYW5lbC52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChjb21wb25lbnQuZXhwb3J0cyk7XG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9mbG93cGFuZWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL2Zsb3dwYW5lbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBkZWZhdWx0LCBGbG93UGFuZWwgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19mbG93cGFuZWxfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9mbG93cGFuZWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqLyBcIi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9mbG93cGFuZWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkZsb3dQYW5lbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfZmxvd3BhbmVsX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIkZsb3dQYW5lbFwiXTsgfSk7XG5cbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfZmxvd3BhbmVsX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcImRlZmF1bHRcIl0pOyBcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL2Zsb3dwYW5lbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9OTZhZTFhNzgmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvZmxvd3BhbmVsLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD05NmFlMWE3OCYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19mbG93cGFuZWxfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzk2YWUxYTc4X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vZmxvd3BhbmVsLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD05NmFlMWE3OCYgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2Zsb3dwYW5lbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9OTZhZTFhNzgmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwicmVuZGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2Zsb3dwYW5lbF92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfOTZhZTFhNzhfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJyZW5kZXJcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzdGF0aWNSZW5kZXJGbnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfZmxvd3BhbmVsX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF85NmFlMWE3OF9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN0YXRpY1JlbmRlckZuc1wiXTsgfSk7XG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvZmxvd3BhbmVsZWxlbWVudC52dWVcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9mbG93cGFuZWxlbGVtZW50LnZ1ZSAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogRmxvd1BhbmVsRWxlbWVudCwgZGVmYXVsdCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZmxvd3BhbmVsZWxlbWVudF92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfOWQ5OTJjMzBfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2Zsb3dwYW5lbGVsZW1lbnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTlkOTkyYzMwJiAqLyBcIi4vc3JjL3Z1ZS9mbG93cGFuZWxlbGVtZW50LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD05ZDk5MmMzMCZcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Zsb3dwYW5lbGVsZW1lbnRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9mbG93cGFuZWxlbGVtZW50LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKi8gXCIuL3NyYy92dWUvZmxvd3BhbmVsZWxlbWVudC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiRmxvd1BhbmVsRWxlbWVudFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9mbG93cGFuZWxlbGVtZW50X3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIkZsb3dQYW5lbEVsZW1lbnRcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9ydW50aW1lX2NvbXBvbmVudE5vcm1hbGl6ZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanMgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIik7XG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgY29tcG9uZW50ID0gT2JqZWN0KF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJkZWZhdWx0XCJdKShcbiAgX2Zsb3dwYW5lbGVsZW1lbnRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiZGVmYXVsdFwiXSxcbiAgX2Zsb3dwYW5lbGVsZW1lbnRfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzlkOTkyYzMwX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVuZGVyXCJdLFxuICBfZmxvd3BhbmVsZWxlbWVudF92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfOWQ5OTJjMzBfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl0sXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGFwaTsgfVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2Zsb3dwYW5lbGVsZW1lbnQudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoY29tcG9uZW50LmV4cG9ydHMpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvZmxvd3BhbmVsZWxlbWVudC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL2Zsb3dwYW5lbGVsZW1lbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGRlZmF1bHQsIEZsb3dQYW5lbEVsZW1lbnQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19mbG93cGFuZWxlbGVtZW50X3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vZmxvd3BhbmVsZWxlbWVudC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICovIFwiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2Zsb3dwYW5lbGVsZW1lbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkZsb3dQYW5lbEVsZW1lbnRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2Zsb3dwYW5lbGVsZW1lbnRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiRmxvd1BhbmVsRWxlbWVudFwiXTsgfSk7XG5cbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfZmxvd3BhbmVsZWxlbWVudF92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJkZWZhdWx0XCJdKTsgXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9mbG93cGFuZWxlbGVtZW50LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD05ZDk5MmMzMCZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvZmxvd3BhbmVsZWxlbWVudC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9OWQ5OTJjMzAmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2Zsb3dwYW5lbGVsZW1lbnRfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzlkOTkyYzMwX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vZmxvd3BhbmVsZWxlbWVudC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9OWQ5OTJjMzAmICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9mbG93cGFuZWxlbGVtZW50LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD05ZDk5MmMzMCZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfZmxvd3BhbmVsZWxlbWVudF92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfOWQ5OTJjMzBfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJyZW5kZXJcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzdGF0aWNSZW5kZXJGbnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfZmxvd3BhbmVsZWxlbWVudF92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfOWQ5OTJjMzBfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl07IH0pO1xuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL2hlYWRlci52dWVcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL2hlYWRlci52dWUgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogU3VydmV5SGVhZGVyLCBkZWZhdWx0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9oZWFkZXJfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzY5Y2ZmOGNmX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9oZWFkZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTY5Y2ZmOGNmJiAqLyBcIi4vc3JjL3Z1ZS9oZWFkZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTY5Y2ZmOGNmJlwiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfaGVhZGVyX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vaGVhZGVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKi8gXCIuL3NyYy92dWUvaGVhZGVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJTdXJ2ZXlIZWFkZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaGVhZGVyX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlN1cnZleUhlYWRlclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX3J1bnRpbWVfY29tcG9uZW50Tm9ybWFsaXplcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qcyAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiKTtcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBjb21wb25lbnQgPSBPYmplY3QoX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9ydW50aW1lX2NvbXBvbmVudE5vcm1hbGl6ZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcImRlZmF1bHRcIl0pKFxuICBfaGVhZGVyX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcImRlZmF1bHRcIl0sXG4gIF9oZWFkZXJfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzY5Y2ZmOGNmX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVuZGVyXCJdLFxuICBfaGVhZGVyX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF82OWNmZjhjZl9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN0YXRpY1JlbmRlckZuc1wiXSxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgYXBpOyB9XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvaGVhZGVyLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKGNvbXBvbmVudC5leHBvcnRzKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL2hlYWRlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvaGVhZGVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGRlZmF1bHQsIFN1cnZleUhlYWRlciAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2hlYWRlcl92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAtIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXI/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2hlYWRlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICovIFwiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2hlYWRlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiU3VydmV5SGVhZGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19oZWFkZXJfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiU3VydmV5SGVhZGVyXCJdOyB9KTtcblxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19oZWFkZXJfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiZGVmYXVsdFwiXSk7IFxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvaGVhZGVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02OWNmZjhjZiZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9oZWFkZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTY5Y2ZmOGNmJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2hlYWRlcl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfNjljZmY4Y2ZfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAtIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9oZWFkZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTY5Y2ZmOGNmJiAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvaGVhZGVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02OWNmZjhjZiZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfaGVhZGVyX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF82OWNmZjhjZl9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInJlbmRlclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19oZWFkZXJfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzY5Y2ZmOGNmX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3RhdGljUmVuZGVyRm5zXCJdOyB9KTtcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9odG1sLnZ1ZVwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL2h0bWwudnVlICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBIdG1sLCBkZWZhdWx0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9odG1sX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF8wNzQyZTE2ZF9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vaHRtbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MDc0MmUxNmQmICovIFwiLi9zcmMvdnVlL2h0bWwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTA3NDJlMTZkJlwiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfaHRtbF92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2h0bWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqLyBcIi4vc3JjL3Z1ZS9odG1sLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJIdG1sXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2h0bWxfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiSHRtbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX3J1bnRpbWVfY29tcG9uZW50Tm9ybWFsaXplcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qcyAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiKTtcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBjb21wb25lbnQgPSBPYmplY3QoX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9ydW50aW1lX2NvbXBvbmVudE5vcm1hbGl6ZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcImRlZmF1bHRcIl0pKFxuICBfaHRtbF92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJkZWZhdWx0XCJdLFxuICBfaHRtbF92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMDc0MmUxNmRfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJyZW5kZXJcIl0sXG4gIF9odG1sX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF8wNzQyZTE2ZF9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN0YXRpY1JlbmRlckZuc1wiXSxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgYXBpOyB9XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvaHRtbC52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChjb21wb25lbnQuZXhwb3J0cyk7XG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9odG1sLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvaHRtbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogZGVmYXVsdCwgSHRtbCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2h0bWxfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9odG1sLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKi8gXCIuL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvaHRtbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiSHRtbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfaHRtbF92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJIdG1sXCJdOyB9KTtcblxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19odG1sX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcImRlZmF1bHRcIl0pOyBcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL2h0bWwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTA3NDJlMTZkJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9odG1sLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wNzQyZTE2ZCYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfaHRtbF92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMDc0MmUxNmRfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAtIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9odG1sLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wNzQyZTE2ZCYgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2h0bWwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTA3NDJlMTZkJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInJlbmRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19odG1sX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF8wNzQyZTE2ZF9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInJlbmRlclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19odG1sX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF8wNzQyZTE2ZF9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN0YXRpY1JlbmRlckZuc1wiXTsgfSk7XG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvaW1hZ2UudnVlXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL2ltYWdlLnZ1ZSAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFF1ZXN0aW9uSW1hZ2UsIGRlZmF1bHQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2ltYWdlX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF8xZGM4ZDcwOV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vaW1hZ2UudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTFkYzhkNzA5JiAqLyBcIi4vc3JjL3Z1ZS9pbWFnZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MWRjOGQ3MDkmXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9pbWFnZV92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2ltYWdlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKi8gXCIuL3NyYy92dWUvaW1hZ2UudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlF1ZXN0aW9uSW1hZ2VcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW1hZ2VfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiUXVlc3Rpb25JbWFnZVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX3J1bnRpbWVfY29tcG9uZW50Tm9ybWFsaXplcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qcyAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiKTtcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBjb21wb25lbnQgPSBPYmplY3QoX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9ydW50aW1lX2NvbXBvbmVudE5vcm1hbGl6ZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcImRlZmF1bHRcIl0pKFxuICBfaW1hZ2VfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiZGVmYXVsdFwiXSxcbiAgX2ltYWdlX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF8xZGM4ZDcwOV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInJlbmRlclwiXSxcbiAgX2ltYWdlX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF8xZGM4ZDcwOV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN0YXRpY1JlbmRlckZuc1wiXSxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgYXBpOyB9XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvaW1hZ2UudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoY29tcG9uZW50LmV4cG9ydHMpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvaW1hZ2UudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvaW1hZ2UudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBkZWZhdWx0LCBRdWVzdGlvbkltYWdlICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfaW1hZ2VfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9pbWFnZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICovIFwiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2ltYWdlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJRdWVzdGlvbkltYWdlXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19pbWFnZV92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJRdWVzdGlvbkltYWdlXCJdOyB9KTtcblxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19pbWFnZV92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJkZWZhdWx0XCJdKTsgXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9pbWFnZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MWRjOGQ3MDkmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9pbWFnZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MWRjOGQ3MDkmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19pbWFnZV92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMWRjOGQ3MDlfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAtIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9pbWFnZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MWRjOGQ3MDkmICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9pbWFnZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MWRjOGQ3MDkmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwicmVuZGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2ltYWdlX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF8xZGM4ZDcwOV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInJlbmRlclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19pbWFnZV92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMWRjOGQ3MDlfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl07IH0pO1xuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL2ltYWdlcGlja2VyLWl0ZW0udnVlXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvaW1hZ2VwaWNrZXItaXRlbS52dWUgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEltYWdlUGlja2VySXRlbSwgZGVmYXVsdCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfaW1hZ2VwaWNrZXJfaXRlbV92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfNjRiMDAxNzlfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2ltYWdlcGlja2VyLWl0ZW0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTY0YjAwMTc5JiAqLyBcIi4vc3JjL3Z1ZS9pbWFnZXBpY2tlci1pdGVtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02NGIwMDE3OSZcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2ltYWdlcGlja2VyX2l0ZW1fdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9pbWFnZXBpY2tlci1pdGVtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKi8gXCIuL3NyYy92dWUvaW1hZ2VwaWNrZXItaXRlbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiSW1hZ2VQaWNrZXJJdGVtXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2ltYWdlcGlja2VyX2l0ZW1fdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiSW1hZ2VQaWNrZXJJdGVtXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCIpO1xuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGNvbXBvbmVudCA9IE9iamVjdChfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX3J1bnRpbWVfY29tcG9uZW50Tm9ybWFsaXplcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiZGVmYXVsdFwiXSkoXG4gIF9pbWFnZXBpY2tlcl9pdGVtX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcImRlZmF1bHRcIl0sXG4gIF9pbWFnZXBpY2tlcl9pdGVtX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF82NGIwMDE3OV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInJlbmRlclwiXSxcbiAgX2ltYWdlcGlja2VyX2l0ZW1fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzY0YjAwMTc5X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3RhdGljUmVuZGVyRm5zXCJdLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBhcGk7IH1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9pbWFnZXBpY2tlci1pdGVtLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKGNvbXBvbmVudC5leHBvcnRzKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL2ltYWdlcGlja2VyLWl0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9pbWFnZXBpY2tlci1pdGVtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBkZWZhdWx0LCBJbWFnZVBpY2tlckl0ZW0gKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19pbWFnZXBpY2tlcl9pdGVtX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vaW1hZ2VwaWNrZXItaXRlbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICovIFwiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2ltYWdlcGlja2VyLWl0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkltYWdlUGlja2VySXRlbVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfaW1hZ2VwaWNrZXJfaXRlbV92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJJbWFnZVBpY2tlckl0ZW1cIl07IH0pO1xuXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2ltYWdlcGlja2VyX2l0ZW1fdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiZGVmYXVsdFwiXSk7IFxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvaW1hZ2VwaWNrZXItaXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NjRiMDAxNzkmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL2ltYWdlcGlja2VyLWl0ZW0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTY0YjAwMTc5JiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19pbWFnZXBpY2tlcl9pdGVtX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF82NGIwMDE3OV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2ltYWdlcGlja2VyLWl0ZW0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTY0YjAwMTc5JiAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvaW1hZ2VwaWNrZXItaXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NjRiMDAxNzkmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwicmVuZGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2ltYWdlcGlja2VyX2l0ZW1fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzY0YjAwMTc5X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVuZGVyXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic3RhdGljUmVuZGVyRm5zXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2ltYWdlcGlja2VyX2l0ZW1fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzY0YjAwMTc5X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3RhdGljUmVuZGVyRm5zXCJdOyB9KTtcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9pbWFnZXBpY2tlci52dWVcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvaW1hZ2VwaWNrZXIudnVlICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogSW1hZ2VQaWNrZXIsIGRlZmF1bHQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2ltYWdlcGlja2VyX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF8xNTNmZTA1Ml9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vaW1hZ2VwaWNrZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTE1M2ZlMDUyJiAqLyBcIi4vc3JjL3Z1ZS9pbWFnZXBpY2tlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MTUzZmUwNTImXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9pbWFnZXBpY2tlcl92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2ltYWdlcGlja2VyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKi8gXCIuL3NyYy92dWUvaW1hZ2VwaWNrZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkltYWdlUGlja2VyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2ltYWdlcGlja2VyX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIkltYWdlUGlja2VyXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCIpO1xuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGNvbXBvbmVudCA9IE9iamVjdChfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX3J1bnRpbWVfY29tcG9uZW50Tm9ybWFsaXplcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiZGVmYXVsdFwiXSkoXG4gIF9pbWFnZXBpY2tlcl92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJkZWZhdWx0XCJdLFxuICBfaW1hZ2VwaWNrZXJfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzE1M2ZlMDUyX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVuZGVyXCJdLFxuICBfaW1hZ2VwaWNrZXJfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzE1M2ZlMDUyX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3RhdGljUmVuZGVyRm5zXCJdLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBhcGk7IH1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9pbWFnZXBpY2tlci52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChjb21wb25lbnQuZXhwb3J0cyk7XG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9pbWFnZXBpY2tlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9pbWFnZXBpY2tlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGRlZmF1bHQsIEltYWdlUGlja2VyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfaW1hZ2VwaWNrZXJfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9pbWFnZXBpY2tlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICovIFwiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2ltYWdlcGlja2VyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJJbWFnZVBpY2tlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfaW1hZ2VwaWNrZXJfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiSW1hZ2VQaWNrZXJcIl07IH0pO1xuXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2ltYWdlcGlja2VyX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcImRlZmF1bHRcIl0pOyBcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL2ltYWdlcGlja2VyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xNTNmZTA1MiZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL2ltYWdlcGlja2VyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xNTNmZTA1MiYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2ltYWdlcGlja2VyX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF8xNTNmZTA1Ml9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2ltYWdlcGlja2VyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xNTNmZTA1MiYgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL2ltYWdlcGlja2VyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xNTNmZTA1MiZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfaW1hZ2VwaWNrZXJfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzE1M2ZlMDUyX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVuZGVyXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic3RhdGljUmVuZGVyRm5zXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX2ltYWdlcGlja2VyX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF8xNTNmZTA1Ml9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN0YXRpY1JlbmRlckZuc1wiXTsgfSk7XG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvbWF0cml4LnZ1ZVwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvbWF0cml4LnZ1ZSAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBNYXRyaXgsIGRlZmF1bHQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX21hdHJpeF92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfN2ZhMmY0MDNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL21hdHJpeC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9N2ZhMmY0MDMmICovIFwiLi9zcmMvdnVlL21hdHJpeC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9N2ZhMmY0MDMmXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9tYXRyaXhfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9tYXRyaXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqLyBcIi4vc3JjL3Z1ZS9tYXRyaXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIk1hdHJpeFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9tYXRyaXhfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiTWF0cml4XCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCIpO1xuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGNvbXBvbmVudCA9IE9iamVjdChfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX3J1bnRpbWVfY29tcG9uZW50Tm9ybWFsaXplcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiZGVmYXVsdFwiXSkoXG4gIF9tYXRyaXhfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiZGVmYXVsdFwiXSxcbiAgX21hdHJpeF92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfN2ZhMmY0MDNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJyZW5kZXJcIl0sXG4gIF9tYXRyaXhfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzdmYTJmNDAzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3RhdGljUmVuZGVyRm5zXCJdLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBhcGk7IH1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9tYXRyaXgudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoY29tcG9uZW50LmV4cG9ydHMpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvbWF0cml4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9tYXRyaXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogZGVmYXVsdCwgTWF0cml4ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfbWF0cml4X3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vbWF0cml4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKi8gXCIuL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvbWF0cml4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJNYXRyaXhcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX21hdHJpeF92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJNYXRyaXhcIl07IH0pO1xuXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX21hdHJpeF92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJkZWZhdWx0XCJdKTsgXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9tYXRyaXgudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTdmYTJmNDAzJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL21hdHJpeC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9N2ZhMmY0MDMmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfbWF0cml4X3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF83ZmEyZjQwM19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL21hdHJpeC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9N2ZhMmY0MDMmICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9tYXRyaXgudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTdmYTJmNDAzJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInJlbmRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19tYXRyaXhfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzdmYTJmNDAzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVuZGVyXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic3RhdGljUmVuZGVyRm5zXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX21hdHJpeF92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfN2ZhMmY0MDNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl07IH0pO1xuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL21hdHJpeGNlbGwudnVlXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvbWF0cml4Y2VsbC52dWUgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IE1hdHJpeENlbGwsIGRlZmF1bHQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX21hdHJpeGNlbGxfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzNjYTU0ZWU1X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9tYXRyaXhjZWxsLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zY2E1NGVlNSYgKi8gXCIuL3NyYy92dWUvbWF0cml4Y2VsbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9M2NhNTRlZTUmXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9tYXRyaXhjZWxsX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vbWF0cml4Y2VsbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICovIFwiLi9zcmMvdnVlL21hdHJpeGNlbGwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIk1hdHJpeENlbGxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbWF0cml4Y2VsbF92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJNYXRyaXhDZWxsXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCIpO1xuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGNvbXBvbmVudCA9IE9iamVjdChfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX3J1bnRpbWVfY29tcG9uZW50Tm9ybWFsaXplcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiZGVmYXVsdFwiXSkoXG4gIF9tYXRyaXhjZWxsX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcImRlZmF1bHRcIl0sXG4gIF9tYXRyaXhjZWxsX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF8zY2E1NGVlNV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInJlbmRlclwiXSxcbiAgX21hdHJpeGNlbGxfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzNjYTU0ZWU1X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3RhdGljUmVuZGVyRm5zXCJdLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBhcGk7IH1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9tYXRyaXhjZWxsLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKGNvbXBvbmVudC5leHBvcnRzKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL21hdHJpeGNlbGwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9tYXRyaXhjZWxsLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBkZWZhdWx0LCBNYXRyaXhDZWxsICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfbWF0cml4Y2VsbF92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAtIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXI/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL21hdHJpeGNlbGwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqLyBcIi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9tYXRyaXhjZWxsLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJNYXRyaXhDZWxsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19tYXRyaXhjZWxsX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIk1hdHJpeENlbGxcIl07IH0pO1xuXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX21hdHJpeGNlbGxfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiZGVmYXVsdFwiXSk7IFxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvbWF0cml4Y2VsbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9M2NhNTRlZTUmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL21hdHJpeGNlbGwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTNjYTU0ZWU1JiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19tYXRyaXhjZWxsX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF8zY2E1NGVlNV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL21hdHJpeGNlbGwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTNjYTU0ZWU1JiAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvbWF0cml4Y2VsbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9M2NhNTRlZTUmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwicmVuZGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX21hdHJpeGNlbGxfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzNjYTU0ZWU1X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVuZGVyXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic3RhdGljUmVuZGVyRm5zXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX21hdHJpeGNlbGxfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzNjYTU0ZWU1X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3RhdGljUmVuZGVyRm5zXCJdOyB9KTtcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9tYXRyaXhkcm9wZG93bi52dWVcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvbWF0cml4ZHJvcGRvd24udnVlICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogTWF0cml4RHJvcGRvd24sIGRlZmF1bHQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX21hdHJpeGRyb3Bkb3duX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF8wYjRkYTZkOF9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vbWF0cml4ZHJvcGRvd24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTBiNGRhNmQ4JiAqLyBcIi4vc3JjL3Z1ZS9tYXRyaXhkcm9wZG93bi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MGI0ZGE2ZDgmXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9tYXRyaXhkcm9wZG93bl92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL21hdHJpeGRyb3Bkb3duLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKi8gXCIuL3NyYy92dWUvbWF0cml4ZHJvcGRvd24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIk1hdHJpeERyb3Bkb3duXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX21hdHJpeGRyb3Bkb3duX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIk1hdHJpeERyb3Bkb3duXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCIpO1xuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGNvbXBvbmVudCA9IE9iamVjdChfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX3J1bnRpbWVfY29tcG9uZW50Tm9ybWFsaXplcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiZGVmYXVsdFwiXSkoXG4gIF9tYXRyaXhkcm9wZG93bl92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJkZWZhdWx0XCJdLFxuICBfbWF0cml4ZHJvcGRvd25fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzBiNGRhNmQ4X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVuZGVyXCJdLFxuICBfbWF0cml4ZHJvcGRvd25fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzBiNGRhNmQ4X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3RhdGljUmVuZGVyRm5zXCJdLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBhcGk7IH1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9tYXRyaXhkcm9wZG93bi52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChjb21wb25lbnQuZXhwb3J0cyk7XG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9tYXRyaXhkcm9wZG93bi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9tYXRyaXhkcm9wZG93bi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGRlZmF1bHQsIE1hdHJpeERyb3Bkb3duICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfbWF0cml4ZHJvcGRvd25fdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9tYXRyaXhkcm9wZG93bi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICovIFwiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL21hdHJpeGRyb3Bkb3duLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJNYXRyaXhEcm9wZG93blwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfbWF0cml4ZHJvcGRvd25fdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiTWF0cml4RHJvcGRvd25cIl07IH0pO1xuXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX21hdHJpeGRyb3Bkb3duX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcImRlZmF1bHRcIl0pOyBcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL21hdHJpeGRyb3Bkb3duLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wYjRkYTZkOCZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL21hdHJpeGRyb3Bkb3duLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wYjRkYTZkOCYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX21hdHJpeGRyb3Bkb3duX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF8wYjRkYTZkOF9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL21hdHJpeGRyb3Bkb3duLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wYjRkYTZkOCYgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL21hdHJpeGRyb3Bkb3duLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wYjRkYTZkOCZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfbWF0cml4ZHJvcGRvd25fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzBiNGRhNmQ4X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVuZGVyXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic3RhdGljUmVuZGVyRm5zXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX21hdHJpeGRyb3Bkb3duX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF8wYjRkYTZkOF9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN0YXRpY1JlbmRlckZuc1wiXTsgfSk7XG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvbWF0cml4ZHluYW1pYy52dWVcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9tYXRyaXhkeW5hbWljLnZ1ZSAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogTWF0cml4RHluYW1pYywgZGVmYXVsdCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbWF0cml4ZHluYW1pY192dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfOWEwYjg4ZThfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL21hdHJpeGR5bmFtaWMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTlhMGI4OGU4JiAqLyBcIi4vc3JjL3Z1ZS9tYXRyaXhkeW5hbWljLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD05YTBiODhlOCZcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX21hdHJpeGR5bmFtaWNfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9tYXRyaXhkeW5hbWljLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKi8gXCIuL3NyYy92dWUvbWF0cml4ZHluYW1pYy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiTWF0cml4RHluYW1pY1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9tYXRyaXhkeW5hbWljX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIk1hdHJpeER5bmFtaWNcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9ydW50aW1lX2NvbXBvbmVudE5vcm1hbGl6ZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanMgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIik7XG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgY29tcG9uZW50ID0gT2JqZWN0KF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJkZWZhdWx0XCJdKShcbiAgX21hdHJpeGR5bmFtaWNfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiZGVmYXVsdFwiXSxcbiAgX21hdHJpeGR5bmFtaWNfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzlhMGI4OGU4X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVuZGVyXCJdLFxuICBfbWF0cml4ZHluYW1pY192dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfOWEwYjg4ZThfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl0sXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGFwaTsgfVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL21hdHJpeGR5bmFtaWMudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoY29tcG9uZW50LmV4cG9ydHMpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvbWF0cml4ZHluYW1pYy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL21hdHJpeGR5bmFtaWMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGRlZmF1bHQsIE1hdHJpeER5bmFtaWMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19tYXRyaXhkeW5hbWljX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vbWF0cml4ZHluYW1pYy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICovIFwiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL21hdHJpeGR5bmFtaWMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIk1hdHJpeER5bmFtaWNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX21hdHJpeGR5bmFtaWNfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiTWF0cml4RHluYW1pY1wiXTsgfSk7XG5cbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfbWF0cml4ZHluYW1pY192dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJkZWZhdWx0XCJdKTsgXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9tYXRyaXhkeW5hbWljLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD05YTBiODhlOCZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvbWF0cml4ZHluYW1pYy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9OWEwYjg4ZTgmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX21hdHJpeGR5bmFtaWNfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzlhMGI4OGU4X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vbWF0cml4ZHluYW1pYy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9OWEwYjg4ZTgmICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9tYXRyaXhkeW5hbWljLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD05YTBiODhlOCZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfbWF0cml4ZHluYW1pY192dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfOWEwYjg4ZThfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJyZW5kZXJcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzdGF0aWNSZW5kZXJGbnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfbWF0cml4ZHluYW1pY192dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfOWEwYjg4ZThfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl07IH0pO1xuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL21hdHJpeGhlYWRlcnJlcXVpcmVkLnZ1ZVwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9tYXRyaXhoZWFkZXJyZXF1aXJlZC52dWUgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBNYXRyaXhIZWFkZXJSZXF1aXJlZCwgZGVmYXVsdCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbWF0cml4aGVhZGVycmVxdWlyZWRfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzVkOTk1MDIyX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9tYXRyaXhoZWFkZXJyZXF1aXJlZC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NWQ5OTUwMjImICovIFwiLi9zcmMvdnVlL21hdHJpeGhlYWRlcnJlcXVpcmVkLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01ZDk5NTAyMiZcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX21hdHJpeGhlYWRlcnJlcXVpcmVkX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vbWF0cml4aGVhZGVycmVxdWlyZWQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqLyBcIi4vc3JjL3Z1ZS9tYXRyaXhoZWFkZXJyZXF1aXJlZC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiTWF0cml4SGVhZGVyUmVxdWlyZWRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbWF0cml4aGVhZGVycmVxdWlyZWRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiTWF0cml4SGVhZGVyUmVxdWlyZWRcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9ydW50aW1lX2NvbXBvbmVudE5vcm1hbGl6ZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanMgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIik7XG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgY29tcG9uZW50ID0gT2JqZWN0KF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJkZWZhdWx0XCJdKShcbiAgX21hdHJpeGhlYWRlcnJlcXVpcmVkX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcImRlZmF1bHRcIl0sXG4gIF9tYXRyaXhoZWFkZXJyZXF1aXJlZF92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfNWQ5OTUwMjJfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJyZW5kZXJcIl0sXG4gIF9tYXRyaXhoZWFkZXJyZXF1aXJlZF92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfNWQ5OTUwMjJfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl0sXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGFwaTsgfVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL21hdHJpeGhlYWRlcnJlcXVpcmVkLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKGNvbXBvbmVudC5leHBvcnRzKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL21hdHJpeGhlYWRlcnJlcXVpcmVkLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL21hdHJpeGhlYWRlcnJlcXVpcmVkLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogZGVmYXVsdCwgTWF0cml4SGVhZGVyUmVxdWlyZWQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19tYXRyaXhoZWFkZXJyZXF1aXJlZF92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAtIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXI/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL21hdHJpeGhlYWRlcnJlcXVpcmVkLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKi8gXCIuL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvbWF0cml4aGVhZGVycmVxdWlyZWQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIk1hdHJpeEhlYWRlclJlcXVpcmVkXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19tYXRyaXhoZWFkZXJyZXF1aXJlZF92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJNYXRyaXhIZWFkZXJSZXF1aXJlZFwiXTsgfSk7XG5cbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfbWF0cml4aGVhZGVycmVxdWlyZWRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiZGVmYXVsdFwiXSk7IFxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvbWF0cml4aGVhZGVycmVxdWlyZWQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTVkOTk1MDIyJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvbWF0cml4aGVhZGVycmVxdWlyZWQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTVkOTk1MDIyJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfbWF0cml4aGVhZGVycmVxdWlyZWRfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzVkOTk1MDIyX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vbWF0cml4aGVhZGVycmVxdWlyZWQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTVkOTk1MDIyJiAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvbWF0cml4aGVhZGVycmVxdWlyZWQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTVkOTk1MDIyJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInJlbmRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19tYXRyaXhoZWFkZXJyZXF1aXJlZF92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfNWQ5OTUwMjJfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJyZW5kZXJcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzdGF0aWNSZW5kZXJGbnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfbWF0cml4aGVhZGVycmVxdWlyZWRfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzVkOTk1MDIyX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3RhdGljUmVuZGVyRm5zXCJdOyB9KTtcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9tYXRyaXh0YWJsZS52dWVcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvbWF0cml4dGFibGUudnVlICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogTWF0cml4VGFibGUsIGRlZmF1bHQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX21hdHJpeHRhYmxlX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF9mYTE5N2U0YV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vbWF0cml4dGFibGUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWZhMTk3ZTRhJiAqLyBcIi4vc3JjL3Z1ZS9tYXRyaXh0YWJsZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZmExOTdlNGEmXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9tYXRyaXh0YWJsZV92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL21hdHJpeHRhYmxlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKi8gXCIuL3NyYy92dWUvbWF0cml4dGFibGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIk1hdHJpeFRhYmxlXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX21hdHJpeHRhYmxlX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIk1hdHJpeFRhYmxlXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCIpO1xuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGNvbXBvbmVudCA9IE9iamVjdChfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX3J1bnRpbWVfY29tcG9uZW50Tm9ybWFsaXplcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiZGVmYXVsdFwiXSkoXG4gIF9tYXRyaXh0YWJsZV92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJkZWZhdWx0XCJdLFxuICBfbWF0cml4dGFibGVfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkX2ZhMTk3ZTRhX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVuZGVyXCJdLFxuICBfbWF0cml4dGFibGVfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkX2ZhMTk3ZTRhX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3RhdGljUmVuZGVyRm5zXCJdLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBhcGk7IH1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9tYXRyaXh0YWJsZS52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChjb21wb25lbnQuZXhwb3J0cyk7XG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9tYXRyaXh0YWJsZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9tYXRyaXh0YWJsZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGRlZmF1bHQsIE1hdHJpeFRhYmxlICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfbWF0cml4dGFibGVfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9tYXRyaXh0YWJsZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICovIFwiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL21hdHJpeHRhYmxlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJNYXRyaXhUYWJsZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfbWF0cml4dGFibGVfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiTWF0cml4VGFibGVcIl07IH0pO1xuXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX21hdHJpeHRhYmxlX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcImRlZmF1bHRcIl0pOyBcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL21hdHJpeHRhYmxlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1mYTE5N2U0YSZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL21hdHJpeHRhYmxlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1mYTE5N2U0YSYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX21hdHJpeHRhYmxlX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF9mYTE5N2U0YV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL21hdHJpeHRhYmxlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1mYTE5N2U0YSYgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL21hdHJpeHRhYmxlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1mYTE5N2U0YSZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfbWF0cml4dGFibGVfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkX2ZhMTk3ZTRhX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVuZGVyXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic3RhdGljUmVuZGVyRm5zXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX21hdHJpeHRhYmxlX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF9mYTE5N2U0YV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN0YXRpY1JlbmRlckZuc1wiXTsgfSk7XG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvbXVsdGlwbGV0ZXh0LnZ1ZVwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvbXVsdGlwbGV0ZXh0LnZ1ZSAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBNdWx0aXBsZVRleHQsIGRlZmF1bHQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX211bHRpcGxldGV4dF92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfOTNmZTRjMDJfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL211bHRpcGxldGV4dC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9OTNmZTRjMDImICovIFwiLi9zcmMvdnVlL211bHRpcGxldGV4dC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9OTNmZTRjMDImXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9tdWx0aXBsZXRleHRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9tdWx0aXBsZXRleHQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqLyBcIi4vc3JjL3Z1ZS9tdWx0aXBsZXRleHQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIk11bHRpcGxlVGV4dFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9tdWx0aXBsZXRleHRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiTXVsdGlwbGVUZXh0XCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCIpO1xuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGNvbXBvbmVudCA9IE9iamVjdChfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX3J1bnRpbWVfY29tcG9uZW50Tm9ybWFsaXplcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiZGVmYXVsdFwiXSkoXG4gIF9tdWx0aXBsZXRleHRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiZGVmYXVsdFwiXSxcbiAgX211bHRpcGxldGV4dF92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfOTNmZTRjMDJfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJyZW5kZXJcIl0sXG4gIF9tdWx0aXBsZXRleHRfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzkzZmU0YzAyX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3RhdGljUmVuZGVyRm5zXCJdLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBhcGk7IH1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9tdWx0aXBsZXRleHQudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoY29tcG9uZW50LmV4cG9ydHMpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvbXVsdGlwbGV0ZXh0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9tdWx0aXBsZXRleHQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogZGVmYXVsdCwgTXVsdGlwbGVUZXh0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfbXVsdGlwbGV0ZXh0X3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vbXVsdGlwbGV0ZXh0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKi8gXCIuL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvbXVsdGlwbGV0ZXh0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJNdWx0aXBsZVRleHRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX211bHRpcGxldGV4dF92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJNdWx0aXBsZVRleHRcIl07IH0pO1xuXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX211bHRpcGxldGV4dF92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJkZWZhdWx0XCJdKTsgXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9tdWx0aXBsZXRleHQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTkzZmU0YzAyJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL211bHRpcGxldGV4dC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9OTNmZTRjMDImICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfbXVsdGlwbGV0ZXh0X3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF85M2ZlNGMwMl9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL211bHRpcGxldGV4dC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9OTNmZTRjMDImICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9tdWx0aXBsZXRleHQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTkzZmU0YzAyJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInJlbmRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19tdWx0aXBsZXRleHRfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzkzZmU0YzAyX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVuZGVyXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic3RhdGljUmVuZGVyRm5zXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX211bHRpcGxldGV4dF92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfOTNmZTRjMDJfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl07IH0pO1xuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL211bHRpcGxldGV4dGl0ZW0udnVlXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvbXVsdGlwbGV0ZXh0aXRlbS52dWUgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IE11bHRpcGxlVGV4dEl0ZW0sIGRlZmF1bHQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX211bHRpcGxldGV4dGl0ZW1fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzIyNDg4ODEyX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9tdWx0aXBsZXRleHRpdGVtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yMjQ4ODgxMiYgKi8gXCIuL3NyYy92dWUvbXVsdGlwbGV0ZXh0aXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MjI0ODg4MTImXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9tdWx0aXBsZXRleHRpdGVtX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vbXVsdGlwbGV0ZXh0aXRlbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICovIFwiLi9zcmMvdnVlL211bHRpcGxldGV4dGl0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIk11bHRpcGxlVGV4dEl0ZW1cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbXVsdGlwbGV0ZXh0aXRlbV92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJNdWx0aXBsZVRleHRJdGVtXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCIpO1xuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGNvbXBvbmVudCA9IE9iamVjdChfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX3J1bnRpbWVfY29tcG9uZW50Tm9ybWFsaXplcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiZGVmYXVsdFwiXSkoXG4gIF9tdWx0aXBsZXRleHRpdGVtX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcImRlZmF1bHRcIl0sXG4gIF9tdWx0aXBsZXRleHRpdGVtX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF8yMjQ4ODgxMl9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInJlbmRlclwiXSxcbiAgX211bHRpcGxldGV4dGl0ZW1fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzIyNDg4ODEyX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3RhdGljUmVuZGVyRm5zXCJdLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBhcGk7IH1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9tdWx0aXBsZXRleHRpdGVtLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKGNvbXBvbmVudC5leHBvcnRzKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL211bHRpcGxldGV4dGl0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9tdWx0aXBsZXRleHRpdGVtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBkZWZhdWx0LCBNdWx0aXBsZVRleHRJdGVtICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfbXVsdGlwbGV0ZXh0aXRlbV92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAtIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXI/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL211bHRpcGxldGV4dGl0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqLyBcIi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9tdWx0aXBsZXRleHRpdGVtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJNdWx0aXBsZVRleHRJdGVtXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19tdWx0aXBsZXRleHRpdGVtX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIk11bHRpcGxlVGV4dEl0ZW1cIl07IH0pO1xuXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX211bHRpcGxldGV4dGl0ZW1fdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiZGVmYXVsdFwiXSk7IFxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvbXVsdGlwbGV0ZXh0aXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MjI0ODg4MTImXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL211bHRpcGxldGV4dGl0ZW0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTIyNDg4ODEyJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19tdWx0aXBsZXRleHRpdGVtX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF8yMjQ4ODgxMl9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL211bHRpcGxldGV4dGl0ZW0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTIyNDg4ODEyJiAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvbXVsdGlwbGV0ZXh0aXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MjI0ODg4MTImXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwicmVuZGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX211bHRpcGxldGV4dGl0ZW1fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzIyNDg4ODEyX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVuZGVyXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic3RhdGljUmVuZGVyRm5zXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX211bHRpcGxldGV4dGl0ZW1fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzIyNDg4ODEyX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3RhdGljUmVuZGVyRm5zXCJdOyB9KTtcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9wYWdlLnZ1ZVwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL3BhZ2UudnVlICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBQYWdlLCBkZWZhdWx0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9wYWdlX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF80ZTk2MmE1MV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcGFnZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NGU5NjJhNTEmICovIFwiLi9zcmMvdnVlL3BhZ2UudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTRlOTYyYTUxJlwiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcGFnZV92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3BhZ2UudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqLyBcIi4vc3JjL3Z1ZS9wYWdlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJQYWdlXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3BhZ2VfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiUGFnZVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX3J1bnRpbWVfY29tcG9uZW50Tm9ybWFsaXplcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qcyAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiKTtcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBjb21wb25lbnQgPSBPYmplY3QoX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9ydW50aW1lX2NvbXBvbmVudE5vcm1hbGl6ZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcImRlZmF1bHRcIl0pKFxuICBfcGFnZV92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJkZWZhdWx0XCJdLFxuICBfcGFnZV92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfNGU5NjJhNTFfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJyZW5kZXJcIl0sXG4gIF9wYWdlX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF80ZTk2MmE1MV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN0YXRpY1JlbmRlckZuc1wiXSxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgYXBpOyB9XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvcGFnZS52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChjb21wb25lbnQuZXhwb3J0cyk7XG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9wYWdlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvcGFnZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogZGVmYXVsdCwgUGFnZSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3BhZ2VfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWdlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKi8gXCIuL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvcGFnZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUGFnZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfcGFnZV92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJQYWdlXCJdOyB9KTtcblxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19wYWdlX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcImRlZmF1bHRcIl0pOyBcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL3BhZ2UudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTRlOTYyYTUxJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9wYWdlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00ZTk2MmE1MSYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfcGFnZV92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfNGU5NjJhNTFfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAtIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWdlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00ZTk2MmE1MSYgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL3BhZ2UudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTRlOTYyYTUxJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInJlbmRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19wYWdlX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF80ZTk2MmE1MV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInJlbmRlclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19wYWdlX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF80ZTk2MmE1MV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN0YXRpY1JlbmRlckZuc1wiXTsgfSk7XG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvcGFuZWwudnVlXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL3BhbmVsLnZ1ZSAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFBhbmVsLCBkZWZhdWx0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9wYW5lbF92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMGM3ODg5OWNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3BhbmVsLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wYzc4ODk5YyYgKi8gXCIuL3NyYy92dWUvcGFuZWwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTBjNzg4OTljJlwiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcGFuZWxfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9wYW5lbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICovIFwiLi9zcmMvdnVlL3BhbmVsLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJQYW5lbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9wYW5lbF92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJQYW5lbFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX3J1bnRpbWVfY29tcG9uZW50Tm9ybWFsaXplcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qcyAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiKTtcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBjb21wb25lbnQgPSBPYmplY3QoX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9ydW50aW1lX2NvbXBvbmVudE5vcm1hbGl6ZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcImRlZmF1bHRcIl0pKFxuICBfcGFuZWxfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiZGVmYXVsdFwiXSxcbiAgX3BhbmVsX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF8wYzc4ODk5Y19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInJlbmRlclwiXSxcbiAgX3BhbmVsX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF8wYzc4ODk5Y19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN0YXRpY1JlbmRlckZuc1wiXSxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgYXBpOyB9XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvcGFuZWwudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoY29tcG9uZW50LmV4cG9ydHMpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvcGFuZWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvcGFuZWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBkZWZhdWx0LCBQYW5lbCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3BhbmVsX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFuZWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqLyBcIi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9wYW5lbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUGFuZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3BhbmVsX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlBhbmVsXCJdOyB9KTtcblxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19wYW5lbF92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJkZWZhdWx0XCJdKTsgXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9wYW5lbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MGM3ODg5OWMmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9wYW5lbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MGM3ODg5OWMmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19wYW5lbF92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMGM3ODg5OWNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAtIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYW5lbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MGM3ODg5OWMmICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9wYW5lbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MGM3ODg5OWMmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwicmVuZGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3BhbmVsX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF8wYzc4ODk5Y19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInJlbmRlclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19wYW5lbF92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMGM3ODg5OWNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl07IH0pO1xuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL3BhbmVsZHluYW1pYy52dWVcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL3BhbmVsZHluYW1pYy52dWUgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogUGFuZWxEeW5hbWljLCBkZWZhdWx0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9wYW5lbGR5bmFtaWNfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzlkZGE1ZDA2X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9wYW5lbGR5bmFtaWMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTlkZGE1ZDA2JiAqLyBcIi4vc3JjL3Z1ZS9wYW5lbGR5bmFtaWMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTlkZGE1ZDA2JlwiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcGFuZWxkeW5hbWljX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcGFuZWxkeW5hbWljLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKi8gXCIuL3NyYy92dWUvcGFuZWxkeW5hbWljLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJQYW5lbER5bmFtaWNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcGFuZWxkeW5hbWljX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlBhbmVsRHluYW1pY1wiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX3J1bnRpbWVfY29tcG9uZW50Tm9ybWFsaXplcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qcyAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiKTtcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBjb21wb25lbnQgPSBPYmplY3QoX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9ydW50aW1lX2NvbXBvbmVudE5vcm1hbGl6ZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcImRlZmF1bHRcIl0pKFxuICBfcGFuZWxkeW5hbWljX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcImRlZmF1bHRcIl0sXG4gIF9wYW5lbGR5bmFtaWNfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzlkZGE1ZDA2X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVuZGVyXCJdLFxuICBfcGFuZWxkeW5hbWljX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF85ZGRhNWQwNl9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN0YXRpY1JlbmRlckZuc1wiXSxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgYXBpOyB9XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvcGFuZWxkeW5hbWljLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKGNvbXBvbmVudC5leHBvcnRzKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL3BhbmVsZHluYW1pYy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvcGFuZWxkeW5hbWljLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGRlZmF1bHQsIFBhbmVsRHluYW1pYyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3BhbmVsZHluYW1pY192dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAtIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXI/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhbmVsZHluYW1pYy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICovIFwiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL3BhbmVsZHluYW1pYy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUGFuZWxEeW5hbWljXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19wYW5lbGR5bmFtaWNfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiUGFuZWxEeW5hbWljXCJdOyB9KTtcblxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19wYW5lbGR5bmFtaWNfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiZGVmYXVsdFwiXSk7IFxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvcGFuZWxkeW5hbWljLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD05ZGRhNWQwNiZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9wYW5lbGR5bmFtaWMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTlkZGE1ZDA2JiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3BhbmVsZHluYW1pY192dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfOWRkYTVkMDZfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAtIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYW5lbGR5bmFtaWMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTlkZGE1ZDA2JiAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvcGFuZWxkeW5hbWljLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD05ZGRhNWQwNiZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfcGFuZWxkeW5hbWljX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF85ZGRhNWQwNl9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInJlbmRlclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19wYW5lbGR5bmFtaWNfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzlkZGE1ZDA2X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3RhdGljUmVuZGVyRm5zXCJdOyB9KTtcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9wYW5lbGR5bmFtaWNwcm9ncmVzcy52dWVcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvcGFuZWxkeW5hbWljcHJvZ3Jlc3MudnVlICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogUGFuZWxEeW5hbWljUHJvZ3Jlc3MsIGRlZmF1bHQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3BhbmVsZHluYW1pY3Byb2dyZXNzX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF83NDJiZmZhY19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcGFuZWxkeW5hbWljcHJvZ3Jlc3MudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTc0MmJmZmFjJiAqLyBcIi4vc3JjL3Z1ZS9wYW5lbGR5bmFtaWNwcm9ncmVzcy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NzQyYmZmYWMmXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9wYW5lbGR5bmFtaWNwcm9ncmVzc192dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3BhbmVsZHluYW1pY3Byb2dyZXNzLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKi8gXCIuL3NyYy92dWUvcGFuZWxkeW5hbWljcHJvZ3Jlc3MudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlBhbmVsRHluYW1pY1Byb2dyZXNzXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3BhbmVsZHluYW1pY3Byb2dyZXNzX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlBhbmVsRHluYW1pY1Byb2dyZXNzXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCIpO1xuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGNvbXBvbmVudCA9IE9iamVjdChfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX3J1bnRpbWVfY29tcG9uZW50Tm9ybWFsaXplcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiZGVmYXVsdFwiXSkoXG4gIF9wYW5lbGR5bmFtaWNwcm9ncmVzc192dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJkZWZhdWx0XCJdLFxuICBfcGFuZWxkeW5hbWljcHJvZ3Jlc3NfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzc0MmJmZmFjX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVuZGVyXCJdLFxuICBfcGFuZWxkeW5hbWljcHJvZ3Jlc3NfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzc0MmJmZmFjX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3RhdGljUmVuZGVyRm5zXCJdLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBhcGk7IH1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9wYW5lbGR5bmFtaWNwcm9ncmVzcy52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChjb21wb25lbnQuZXhwb3J0cyk7XG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9wYW5lbGR5bmFtaWNwcm9ncmVzcy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9wYW5lbGR5bmFtaWNwcm9ncmVzcy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGRlZmF1bHQsIFBhbmVsRHluYW1pY1Byb2dyZXNzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfcGFuZWxkeW5hbWljcHJvZ3Jlc3NfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYW5lbGR5bmFtaWNwcm9ncmVzcy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICovIFwiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL3BhbmVsZHluYW1pY3Byb2dyZXNzLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJQYW5lbER5bmFtaWNQcm9ncmVzc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfcGFuZWxkeW5hbWljcHJvZ3Jlc3NfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiUGFuZWxEeW5hbWljUHJvZ3Jlc3NcIl07IH0pO1xuXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3BhbmVsZHluYW1pY3Byb2dyZXNzX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcImRlZmF1bHRcIl0pOyBcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL3BhbmVsZHluYW1pY3Byb2dyZXNzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03NDJiZmZhYyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL3BhbmVsZHluYW1pY3Byb2dyZXNzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03NDJiZmZhYyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3BhbmVsZHluYW1pY3Byb2dyZXNzX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF83NDJiZmZhY19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhbmVsZHluYW1pY3Byb2dyZXNzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03NDJiZmZhYyYgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL3BhbmVsZHluYW1pY3Byb2dyZXNzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03NDJiZmZhYyZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfcGFuZWxkeW5hbWljcHJvZ3Jlc3NfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzc0MmJmZmFjX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVuZGVyXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic3RhdGljUmVuZGVyRm5zXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3BhbmVsZHluYW1pY3Byb2dyZXNzX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF83NDJiZmZhY19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN0YXRpY1JlbmRlckZuc1wiXTsgfSk7XG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvcGFuZWxkeW5hbWljcHJvZ3Jlc3NWMi52dWVcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9wYW5lbGR5bmFtaWNwcm9ncmVzc1YyLnZ1ZSAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogUGFuZWxEeW5hbWljUHJvZ3Jlc3NWMiwgZGVmYXVsdCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcGFuZWxkeW5hbWljcHJvZ3Jlc3NWMl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMzNjZTQwNDZfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3BhbmVsZHluYW1pY3Byb2dyZXNzVjIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTMzY2U0MDQ2JiAqLyBcIi4vc3JjL3Z1ZS9wYW5lbGR5bmFtaWNwcm9ncmVzc1YyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zM2NlNDA0NiZcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3BhbmVsZHluYW1pY3Byb2dyZXNzVjJfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9wYW5lbGR5bmFtaWNwcm9ncmVzc1YyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKi8gXCIuL3NyYy92dWUvcGFuZWxkeW5hbWljcHJvZ3Jlc3NWMi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUGFuZWxEeW5hbWljUHJvZ3Jlc3NWMlwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9wYW5lbGR5bmFtaWNwcm9ncmVzc1YyX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlBhbmVsRHluYW1pY1Byb2dyZXNzVjJcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9ydW50aW1lX2NvbXBvbmVudE5vcm1hbGl6ZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanMgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIik7XG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgY29tcG9uZW50ID0gT2JqZWN0KF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJkZWZhdWx0XCJdKShcbiAgX3BhbmVsZHluYW1pY3Byb2dyZXNzVjJfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiZGVmYXVsdFwiXSxcbiAgX3BhbmVsZHluYW1pY3Byb2dyZXNzVjJfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzMzY2U0MDQ2X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVuZGVyXCJdLFxuICBfcGFuZWxkeW5hbWljcHJvZ3Jlc3NWMl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMzNjZTQwNDZfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl0sXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGFwaTsgfVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL3BhbmVsZHluYW1pY3Byb2dyZXNzVjIudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoY29tcG9uZW50LmV4cG9ydHMpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvcGFuZWxkeW5hbWljcHJvZ3Jlc3NWMi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL3BhbmVsZHluYW1pY3Byb2dyZXNzVjIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGRlZmF1bHQsIFBhbmVsRHluYW1pY1Byb2dyZXNzVjIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19wYW5lbGR5bmFtaWNwcm9ncmVzc1YyX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFuZWxkeW5hbWljcHJvZ3Jlc3NWMi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICovIFwiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL3BhbmVsZHluYW1pY3Byb2dyZXNzVjIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlBhbmVsRHluYW1pY1Byb2dyZXNzVjJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3BhbmVsZHluYW1pY3Byb2dyZXNzVjJfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiUGFuZWxEeW5hbWljUHJvZ3Jlc3NWMlwiXTsgfSk7XG5cbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfcGFuZWxkeW5hbWljcHJvZ3Jlc3NWMl92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJkZWZhdWx0XCJdKTsgXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9wYW5lbGR5bmFtaWNwcm9ncmVzc1YyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zM2NlNDA0NiZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvcGFuZWxkeW5hbWljcHJvZ3Jlc3NWMi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MzNjZTQwNDYmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3BhbmVsZHluYW1pY3Byb2dyZXNzVjJfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzMzY2U0MDQ2X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFuZWxkeW5hbWljcHJvZ3Jlc3NWMi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MzNjZTQwNDYmICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9wYW5lbGR5bmFtaWNwcm9ncmVzc1YyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zM2NlNDA0NiZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfcGFuZWxkeW5hbWljcHJvZ3Jlc3NWMl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMzNjZTQwNDZfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJyZW5kZXJcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzdGF0aWNSZW5kZXJGbnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfcGFuZWxkeW5hbWljcHJvZ3Jlc3NWMl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMzNjZTQwNDZfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl07IH0pO1xuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL3BvcHVwLXN1cnZleS52dWVcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL3BvcHVwLXN1cnZleS52dWUgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogUG9wdXBTdXJ2ZXksIFN1cnZleVdpbmRvdywgZGVmYXVsdCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcG9wdXBfc3VydmV5X3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF83OTM3ZGY1ZF9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcG9wdXAtc3VydmV5LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03OTM3ZGY1ZCYgKi8gXCIuL3NyYy92dWUvcG9wdXAtc3VydmV5LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03OTM3ZGY1ZCZcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3BvcHVwX3N1cnZleV92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3BvcHVwLXN1cnZleS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICovIFwiLi9zcmMvdnVlL3BvcHVwLXN1cnZleS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUG9wdXBTdXJ2ZXlcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcG9wdXBfc3VydmV5X3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlBvcHVwU3VydmV5XCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiU3VydmV5V2luZG93XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3BvcHVwX3N1cnZleV92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJTdXJ2ZXlXaW5kb3dcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9ydW50aW1lX2NvbXBvbmVudE5vcm1hbGl6ZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanMgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIik7XG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgY29tcG9uZW50ID0gT2JqZWN0KF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJkZWZhdWx0XCJdKShcbiAgX3BvcHVwX3N1cnZleV92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJkZWZhdWx0XCJdLFxuICBfcG9wdXBfc3VydmV5X3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF83OTM3ZGY1ZF9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInJlbmRlclwiXSxcbiAgX3BvcHVwX3N1cnZleV92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfNzkzN2RmNWRfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl0sXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGFwaTsgfVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL3BvcHVwLXN1cnZleS52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChjb21wb25lbnQuZXhwb3J0cyk7XG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9wb3B1cC1zdXJ2ZXkudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL3BvcHVwLXN1cnZleS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBkZWZhdWx0LCBQb3B1cFN1cnZleSwgU3VydmV5V2luZG93ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfcG9wdXBfc3VydmV5X3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcG9wdXAtc3VydmV5LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKi8gXCIuL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvcG9wdXAtc3VydmV5LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJQb3B1cFN1cnZleVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfcG9wdXBfc3VydmV5X3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlBvcHVwU3VydmV5XCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiU3VydmV5V2luZG93XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19wb3B1cF9zdXJ2ZXlfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiU3VydmV5V2luZG93XCJdOyB9KTtcblxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19wb3B1cF9zdXJ2ZXlfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiZGVmYXVsdFwiXSk7IFxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvcG9wdXAtc3VydmV5LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03OTM3ZGY1ZCZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9wb3B1cC1zdXJ2ZXkudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTc5MzdkZjVkJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3BvcHVwX3N1cnZleV92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfNzkzN2RmNWRfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAtIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wb3B1cC1zdXJ2ZXkudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTc5MzdkZjVkJiAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvcG9wdXAtc3VydmV5LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03OTM3ZGY1ZCZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfcG9wdXBfc3VydmV5X3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF83OTM3ZGY1ZF9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInJlbmRlclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19wb3B1cF9zdXJ2ZXlfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzc5MzdkZjVkX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3RhdGljUmVuZGVyRm5zXCJdOyB9KTtcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9wcm9ncmVzcy52dWVcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvcHJvZ3Jlc3MudnVlICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogUHJvZ3Jlc3MsIGRlZmF1bHQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Byb2dyZXNzX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF8yN2UzMjVlZl9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcHJvZ3Jlc3MudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTI3ZTMyNWVmJiAqLyBcIi4vc3JjL3Z1ZS9wcm9ncmVzcy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MjdlMzI1ZWYmXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9wcm9ncmVzc192dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3Byb2dyZXNzLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKi8gXCIuL3NyYy92dWUvcHJvZ3Jlc3MudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlByb2dyZXNzXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Byb2dyZXNzX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlByb2dyZXNzXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCIpO1xuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGNvbXBvbmVudCA9IE9iamVjdChfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX3J1bnRpbWVfY29tcG9uZW50Tm9ybWFsaXplcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiZGVmYXVsdFwiXSkoXG4gIF9wcm9ncmVzc192dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJkZWZhdWx0XCJdLFxuICBfcHJvZ3Jlc3NfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzI3ZTMyNWVmX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVuZGVyXCJdLFxuICBfcHJvZ3Jlc3NfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzI3ZTMyNWVmX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3RhdGljUmVuZGVyRm5zXCJdLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBhcGk7IH1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9wcm9ncmVzcy52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChjb21wb25lbnQuZXhwb3J0cyk7XG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9wcm9ncmVzcy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9wcm9ncmVzcy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGRlZmF1bHQsIFByb2dyZXNzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfcHJvZ3Jlc3NfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wcm9ncmVzcy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICovIFwiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL3Byb2dyZXNzLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJQcm9ncmVzc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfcHJvZ3Jlc3NfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiUHJvZ3Jlc3NcIl07IH0pO1xuXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3Byb2dyZXNzX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcImRlZmF1bHRcIl0pOyBcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL3Byb2dyZXNzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yN2UzMjVlZiZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL3Byb2dyZXNzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yN2UzMjVlZiYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3Byb2dyZXNzX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF8yN2UzMjVlZl9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3Byb2dyZXNzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yN2UzMjVlZiYgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL3Byb2dyZXNzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yN2UzMjVlZiZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfcHJvZ3Jlc3NfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzI3ZTMyNWVmX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVuZGVyXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic3RhdGljUmVuZGVyRm5zXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3Byb2dyZXNzX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF8yN2UzMjVlZl9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN0YXRpY1JlbmRlckZuc1wiXTsgfSk7XG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvcHJvZ3Jlc3NCdXR0b25zLnZ1ZVwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvcHJvZ3Jlc3NCdXR0b25zLnZ1ZSAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBQcm9ncmVzc0J1dHRvbnMsIGRlZmF1bHQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Byb2dyZXNzQnV0dG9uc192dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMmFlN2RlNDJfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3Byb2dyZXNzQnV0dG9ucy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MmFlN2RlNDImICovIFwiLi9zcmMvdnVlL3Byb2dyZXNzQnV0dG9ucy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MmFlN2RlNDImXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9wcm9ncmVzc0J1dHRvbnNfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9wcm9ncmVzc0J1dHRvbnMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqLyBcIi4vc3JjL3Z1ZS9wcm9ncmVzc0J1dHRvbnMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlByb2dyZXNzQnV0dG9uc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9wcm9ncmVzc0J1dHRvbnNfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiUHJvZ3Jlc3NCdXR0b25zXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCIpO1xuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGNvbXBvbmVudCA9IE9iamVjdChfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX3J1bnRpbWVfY29tcG9uZW50Tm9ybWFsaXplcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiZGVmYXVsdFwiXSkoXG4gIF9wcm9ncmVzc0J1dHRvbnNfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiZGVmYXVsdFwiXSxcbiAgX3Byb2dyZXNzQnV0dG9uc192dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMmFlN2RlNDJfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJyZW5kZXJcIl0sXG4gIF9wcm9ncmVzc0J1dHRvbnNfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzJhZTdkZTQyX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3RhdGljUmVuZGVyRm5zXCJdLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBhcGk7IH1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9wcm9ncmVzc0J1dHRvbnMudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoY29tcG9uZW50LmV4cG9ydHMpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvcHJvZ3Jlc3NCdXR0b25zLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9wcm9ncmVzc0J1dHRvbnMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogZGVmYXVsdCwgUHJvZ3Jlc3NCdXR0b25zICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfcHJvZ3Jlc3NCdXR0b25zX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcHJvZ3Jlc3NCdXR0b25zLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKi8gXCIuL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvcHJvZ3Jlc3NCdXR0b25zLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJQcm9ncmVzc0J1dHRvbnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3Byb2dyZXNzQnV0dG9uc192dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJQcm9ncmVzc0J1dHRvbnNcIl07IH0pO1xuXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3Byb2dyZXNzQnV0dG9uc192dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJkZWZhdWx0XCJdKTsgXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9wcm9ncmVzc0J1dHRvbnMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTJhZTdkZTQyJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL3Byb2dyZXNzQnV0dG9ucy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MmFlN2RlNDImICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfcHJvZ3Jlc3NCdXR0b25zX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF8yYWU3ZGU0Ml9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3Byb2dyZXNzQnV0dG9ucy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MmFlN2RlNDImICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9wcm9ncmVzc0J1dHRvbnMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTJhZTdkZTQyJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInJlbmRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19wcm9ncmVzc0J1dHRvbnNfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzJhZTdkZTQyX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVuZGVyXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic3RhdGljUmVuZGVyRm5zXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3Byb2dyZXNzQnV0dG9uc192dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMmFlN2RlNDJfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl07IH0pO1xuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL3Byb2dyZXNzVG9jLnZ1ZVwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9wcm9ncmVzc1RvYy52dWUgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBQcm9ncmVzc1RvYywgZGVmYXVsdCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcHJvZ3Jlc3NUb2NfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkX2YwYmQzZGVlX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9wcm9ncmVzc1RvYy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZjBiZDNkZWUmICovIFwiLi9zcmMvdnVlL3Byb2dyZXNzVG9jLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1mMGJkM2RlZSZcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Byb2dyZXNzVG9jX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcHJvZ3Jlc3NUb2MudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqLyBcIi4vc3JjL3Z1ZS9wcm9ncmVzc1RvYy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUHJvZ3Jlc3NUb2NcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcHJvZ3Jlc3NUb2NfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiUHJvZ3Jlc3NUb2NcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9ydW50aW1lX2NvbXBvbmVudE5vcm1hbGl6ZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanMgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIik7XG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgY29tcG9uZW50ID0gT2JqZWN0KF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJkZWZhdWx0XCJdKShcbiAgX3Byb2dyZXNzVG9jX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcImRlZmF1bHRcIl0sXG4gIF9wcm9ncmVzc1RvY192dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfZjBiZDNkZWVfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJyZW5kZXJcIl0sXG4gIF9wcm9ncmVzc1RvY192dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfZjBiZDNkZWVfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl0sXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGFwaTsgfVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL3Byb2dyZXNzVG9jLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKGNvbXBvbmVudC5leHBvcnRzKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL3Byb2dyZXNzVG9jLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL3Byb2dyZXNzVG9jLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogZGVmYXVsdCwgUHJvZ3Jlc3NUb2MgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19wcm9ncmVzc1RvY192dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAtIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXI/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3Byb2dyZXNzVG9jLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKi8gXCIuL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvcHJvZ3Jlc3NUb2MudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlByb2dyZXNzVG9jXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19wcm9ncmVzc1RvY192dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJQcm9ncmVzc1RvY1wiXTsgfSk7XG5cbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfcHJvZ3Jlc3NUb2NfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiZGVmYXVsdFwiXSk7IFxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvcHJvZ3Jlc3NUb2MudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWYwYmQzZGVlJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvcHJvZ3Jlc3NUb2MudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWYwYmQzZGVlJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfcHJvZ3Jlc3NUb2NfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkX2YwYmQzZGVlX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcHJvZ3Jlc3NUb2MudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWYwYmQzZGVlJiAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvcHJvZ3Jlc3NUb2MudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWYwYmQzZGVlJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInJlbmRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19wcm9ncmVzc1RvY192dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfZjBiZDNkZWVfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJyZW5kZXJcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzdGF0aWNSZW5kZXJGbnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfcHJvZ3Jlc3NUb2NfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkX2YwYmQzZGVlX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3RhdGljUmVuZGVyRm5zXCJdOyB9KTtcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9xdWVzdGlvbi1jb21tZW50LnZ1ZVwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL3F1ZXN0aW9uLWNvbW1lbnQudnVlICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBPdGhlckNvbW1lbnQsIGRlZmF1bHQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3F1ZXN0aW9uX2NvbW1lbnRfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzBjMzU3ODhjX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9xdWVzdGlvbi1jb21tZW50LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wYzM1Nzg4YyYgKi8gXCIuL3NyYy92dWUvcXVlc3Rpb24tY29tbWVudC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MGMzNTc4OGMmXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9xdWVzdGlvbl9jb21tZW50X3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcXVlc3Rpb24tY29tbWVudC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICovIFwiLi9zcmMvdnVlL3F1ZXN0aW9uLWNvbW1lbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIk90aGVyQ29tbWVudFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9xdWVzdGlvbl9jb21tZW50X3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIk90aGVyQ29tbWVudFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX3J1bnRpbWVfY29tcG9uZW50Tm9ybWFsaXplcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qcyAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiKTtcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBjb21wb25lbnQgPSBPYmplY3QoX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9ydW50aW1lX2NvbXBvbmVudE5vcm1hbGl6ZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcImRlZmF1bHRcIl0pKFxuICBfcXVlc3Rpb25fY29tbWVudF92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJkZWZhdWx0XCJdLFxuICBfcXVlc3Rpb25fY29tbWVudF92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMGMzNTc4OGNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJyZW5kZXJcIl0sXG4gIF9xdWVzdGlvbl9jb21tZW50X3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF8wYzM1Nzg4Y19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN0YXRpY1JlbmRlckZuc1wiXSxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgYXBpOyB9XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvcXVlc3Rpb24tY29tbWVudC52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChjb21wb25lbnQuZXhwb3J0cyk7XG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9xdWVzdGlvbi1jb21tZW50LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvcXVlc3Rpb24tY29tbWVudC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogZGVmYXVsdCwgT3RoZXJDb21tZW50ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfcXVlc3Rpb25fY29tbWVudF92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAtIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXI/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3F1ZXN0aW9uLWNvbW1lbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqLyBcIi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9xdWVzdGlvbi1jb21tZW50LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJPdGhlckNvbW1lbnRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3F1ZXN0aW9uX2NvbW1lbnRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiT3RoZXJDb21tZW50XCJdOyB9KTtcblxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19xdWVzdGlvbl9jb21tZW50X3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcImRlZmF1bHRcIl0pOyBcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL3F1ZXN0aW9uLWNvbW1lbnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTBjMzU3ODhjJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9xdWVzdGlvbi1jb21tZW50LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wYzM1Nzg4YyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfcXVlc3Rpb25fY29tbWVudF92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMGMzNTc4OGNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAtIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9xdWVzdGlvbi1jb21tZW50LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wYzM1Nzg4YyYgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL3F1ZXN0aW9uLWNvbW1lbnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTBjMzU3ODhjJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInJlbmRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19xdWVzdGlvbl9jb21tZW50X3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF8wYzM1Nzg4Y19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInJlbmRlclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19xdWVzdGlvbl9jb21tZW50X3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF8wYzM1Nzg4Y19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN0YXRpY1JlbmRlckZuc1wiXTsgfSk7XG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvcXVlc3Rpb24tb3RoZXIudnVlXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL3F1ZXN0aW9uLW90aGVyLnZ1ZSAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IE90aGVyQ2hvaWNlLCBkZWZhdWx0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9xdWVzdGlvbl9vdGhlcl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfZDM5ODZlYWFfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3F1ZXN0aW9uLW90aGVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1kMzk4NmVhYSYgKi8gXCIuL3NyYy92dWUvcXVlc3Rpb24tb3RoZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWQzOTg2ZWFhJlwiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcXVlc3Rpb25fb3RoZXJfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9xdWVzdGlvbi1vdGhlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICovIFwiLi9zcmMvdnVlL3F1ZXN0aW9uLW90aGVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJPdGhlckNob2ljZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9xdWVzdGlvbl9vdGhlcl92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJPdGhlckNob2ljZVwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX3J1bnRpbWVfY29tcG9uZW50Tm9ybWFsaXplcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qcyAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiKTtcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBjb21wb25lbnQgPSBPYmplY3QoX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9ydW50aW1lX2NvbXBvbmVudE5vcm1hbGl6ZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcImRlZmF1bHRcIl0pKFxuICBfcXVlc3Rpb25fb3RoZXJfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiZGVmYXVsdFwiXSxcbiAgX3F1ZXN0aW9uX290aGVyX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF9kMzk4NmVhYV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInJlbmRlclwiXSxcbiAgX3F1ZXN0aW9uX290aGVyX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF9kMzk4NmVhYV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN0YXRpY1JlbmRlckZuc1wiXSxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgYXBpOyB9XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvcXVlc3Rpb24tb3RoZXIudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoY29tcG9uZW50LmV4cG9ydHMpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvcXVlc3Rpb24tb3RoZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvcXVlc3Rpb24tb3RoZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBkZWZhdWx0LCBPdGhlckNob2ljZSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3F1ZXN0aW9uX290aGVyX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcXVlc3Rpb24tb3RoZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqLyBcIi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9xdWVzdGlvbi1vdGhlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiT3RoZXJDaG9pY2VcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3F1ZXN0aW9uX290aGVyX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIk90aGVyQ2hvaWNlXCJdOyB9KTtcblxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19xdWVzdGlvbl9vdGhlcl92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJkZWZhdWx0XCJdKTsgXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9xdWVzdGlvbi1vdGhlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZDM5ODZlYWEmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9xdWVzdGlvbi1vdGhlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZDM5ODZlYWEmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19xdWVzdGlvbl9vdGhlcl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfZDM5ODZlYWFfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAtIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9xdWVzdGlvbi1vdGhlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZDM5ODZlYWEmICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9xdWVzdGlvbi1vdGhlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZDM5ODZlYWEmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwicmVuZGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3F1ZXN0aW9uX290aGVyX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF9kMzk4NmVhYV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInJlbmRlclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19xdWVzdGlvbl9vdGhlcl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfZDM5ODZlYWFfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl07IH0pO1xuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL3F1ZXN0aW9uLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvcXVlc3Rpb24udHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFF1ZXN0aW9uVnVlLCBnZXRDb21wb25lbnROYW1lLCBkZWZhdWx0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlF1ZXN0aW9uVnVlXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUXVlc3Rpb25WdWU7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImdldENvbXBvbmVudE5hbWVcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBnZXRDb21wb25lbnROYW1lOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB2dWUtcHJvcGVydHktZGVjb3JhdG9yICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLXByb3BlcnR5LWRlY29yYXRvci9saWIvaW5kZXguanNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Jhc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYmFzZSAqLyBcIi4vc3JjL3Z1ZS9iYXNlLnRzXCIpO1xudmFyIF9fZXh0ZW5kcyA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG52YXIgX19kZWNvcmF0ZSA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xuXG5cbnZhciBRdWVzdGlvblZ1ZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoUXVlc3Rpb25WdWUsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gUXVlc3Rpb25WdWUoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5pbm5lclZhbHVlID0gbnVsbDtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBRdWVzdGlvblZ1ZS5wcm90b3R5cGUuY2hhbmdlUXVlc3Rpb24gPSBmdW5jdGlvbiAobmV3X3ZhbCwgb2xkX3ZhbCkge1xuICAgICAgICB0aGlzLmlubmVyVmFsdWUgPSBudWxsO1xuICAgIH07XG4gICAgUXVlc3Rpb25WdWUucHJvdG90eXBlLmdldE1vZGVsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5xdWVzdGlvbjtcbiAgICB9O1xuICAgIFF1ZXN0aW9uVnVlLnByb3RvdHlwZS5vbk1vdW50ZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLnF1ZXN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uLmFmdGVyUmVuZGVyUXVlc3Rpb25FbGVtZW50KHRoaXMuJGVsKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgUXVlc3Rpb25WdWUucHJvdG90eXBlLmJlZm9yZURlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLnF1ZXN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uLmJlZm9yZURlc3Ryb3lRdWVzdGlvbkVsZW1lbnQodGhpcy4kZWwpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlByb3BcIl0pKClcbiAgICBdLCBRdWVzdGlvblZ1ZS5wcm90b3R5cGUsIFwicXVlc3Rpb25cIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT2JqZWN0KHZ1ZV9wcm9wZXJ0eV9kZWNvcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlByb3BcIl0pKClcbiAgICBdLCBRdWVzdGlvblZ1ZS5wcm90b3R5cGUsIFwiY3NzXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE9iamVjdCh2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJXYXRjaFwiXSkoXCJxdWVzdGlvblwiKVxuICAgIF0sIFF1ZXN0aW9uVnVlLnByb3RvdHlwZSwgXCJjaGFuZ2VRdWVzdGlvblwiLCBudWxsKTtcbiAgICBRdWVzdGlvblZ1ZSA9IF9fZGVjb3JhdGUoW1xuICAgICAgICB2dWVfcHJvcGVydHlfZGVjb3JhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJDb21wb25lbnRcIl1cbiAgICBdLCBRdWVzdGlvblZ1ZSk7XG4gICAgcmV0dXJuIFF1ZXN0aW9uVnVlO1xufShfYmFzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiQmFzZVZ1ZVwiXSkpO1xuXG5mdW5jdGlvbiBnZXRDb21wb25lbnROYW1lKHF1ZXN0aW9uKSB7XG4gICAgaWYgKHF1ZXN0aW9uLmN1c3RvbVdpZGdldClcbiAgICAgICAgcmV0dXJuIFwic3VydmV5LWN1c3RvbXdpZGdldFwiO1xuICAgIGlmIChxdWVzdGlvbi5pc0RlZmF1bHRSZW5kZXJpbmcgJiYgcXVlc3Rpb24uaXNEZWZhdWx0UmVuZGVyaW5nKCkgfHwgcXVlc3Rpb24uaXNQYW5lbClcbiAgICAgICAgcmV0dXJuIFwic3VydmV5LVwiICsgcXVlc3Rpb24uZ2V0VGVtcGxhdGUoKTtcbiAgICByZXR1cm4gcXVlc3Rpb24uZ2V0Q29tcG9uZW50TmFtZSgpO1xufVxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChRdWVzdGlvblZ1ZSk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL3JhZGlvZ3JvdXAudnVlXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvcmFkaW9ncm91cC52dWUgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFJhZGlvZ3JvdXAsIGRlZmF1bHQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3JhZGlvZ3JvdXBfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzA2YzZkNTI2X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9yYWRpb2dyb3VwLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wNmM2ZDUyNiYgKi8gXCIuL3NyYy92dWUvcmFkaW9ncm91cC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MDZjNmQ1MjYmXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9yYWRpb2dyb3VwX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcmFkaW9ncm91cC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICovIFwiLi9zcmMvdnVlL3JhZGlvZ3JvdXAudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlJhZGlvZ3JvdXBcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcmFkaW9ncm91cF92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJSYWRpb2dyb3VwXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCIpO1xuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGNvbXBvbmVudCA9IE9iamVjdChfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX3J1bnRpbWVfY29tcG9uZW50Tm9ybWFsaXplcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiZGVmYXVsdFwiXSkoXG4gIF9yYWRpb2dyb3VwX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcImRlZmF1bHRcIl0sXG4gIF9yYWRpb2dyb3VwX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF8wNmM2ZDUyNl9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInJlbmRlclwiXSxcbiAgX3JhZGlvZ3JvdXBfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzA2YzZkNTI2X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3RhdGljUmVuZGVyRm5zXCJdLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBhcGk7IH1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9yYWRpb2dyb3VwLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKGNvbXBvbmVudC5leHBvcnRzKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL3JhZGlvZ3JvdXAudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9yYWRpb2dyb3VwLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBkZWZhdWx0LCBSYWRpb2dyb3VwICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfcmFkaW9ncm91cF92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAtIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXI/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3JhZGlvZ3JvdXAudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqLyBcIi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9yYWRpb2dyb3VwLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJSYWRpb2dyb3VwXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19yYWRpb2dyb3VwX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlJhZGlvZ3JvdXBcIl07IH0pO1xuXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3JhZGlvZ3JvdXBfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiZGVmYXVsdFwiXSk7IFxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvcmFkaW9ncm91cC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MDZjNmQ1MjYmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL3JhZGlvZ3JvdXAudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTA2YzZkNTI2JiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19yYWRpb2dyb3VwX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF8wNmM2ZDUyNl9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3JhZGlvZ3JvdXAudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTA2YzZkNTI2JiAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvcmFkaW9ncm91cC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MDZjNmQ1MjYmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwicmVuZGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3JhZGlvZ3JvdXBfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzA2YzZkNTI2X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVuZGVyXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic3RhdGljUmVuZGVyRm5zXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3JhZGlvZ3JvdXBfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzA2YzZkNTI2X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3RhdGljUmVuZGVyRm5zXCJdOyB9KTtcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9yYWRpb2dyb3VwaXRlbS52dWVcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvcmFkaW9ncm91cGl0ZW0udnVlICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogUmFkaW9ncm91cEl0ZW0sIGRlZmF1bHQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3JhZGlvZ3JvdXBpdGVtX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF81YmJlOTdiOV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcmFkaW9ncm91cGl0ZW0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTViYmU5N2I5JiAqLyBcIi4vc3JjL3Z1ZS9yYWRpb2dyb3VwaXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NWJiZTk3YjkmXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9yYWRpb2dyb3VwaXRlbV92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3JhZGlvZ3JvdXBpdGVtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKi8gXCIuL3NyYy92dWUvcmFkaW9ncm91cGl0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlJhZGlvZ3JvdXBJdGVtXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3JhZGlvZ3JvdXBpdGVtX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlJhZGlvZ3JvdXBJdGVtXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCIpO1xuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGNvbXBvbmVudCA9IE9iamVjdChfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX3J1bnRpbWVfY29tcG9uZW50Tm9ybWFsaXplcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiZGVmYXVsdFwiXSkoXG4gIF9yYWRpb2dyb3VwaXRlbV92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJkZWZhdWx0XCJdLFxuICBfcmFkaW9ncm91cGl0ZW1fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzViYmU5N2I5X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVuZGVyXCJdLFxuICBfcmFkaW9ncm91cGl0ZW1fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzViYmU5N2I5X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3RhdGljUmVuZGVyRm5zXCJdLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBhcGk7IH1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9yYWRpb2dyb3VwaXRlbS52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChjb21wb25lbnQuZXhwb3J0cyk7XG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9yYWRpb2dyb3VwaXRlbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9yYWRpb2dyb3VwaXRlbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGRlZmF1bHQsIFJhZGlvZ3JvdXBJdGVtICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfcmFkaW9ncm91cGl0ZW1fdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9yYWRpb2dyb3VwaXRlbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICovIFwiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL3JhZGlvZ3JvdXBpdGVtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJSYWRpb2dyb3VwSXRlbVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfcmFkaW9ncm91cGl0ZW1fdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiUmFkaW9ncm91cEl0ZW1cIl07IH0pO1xuXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3JhZGlvZ3JvdXBpdGVtX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcImRlZmF1bHRcIl0pOyBcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL3JhZGlvZ3JvdXBpdGVtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01YmJlOTdiOSZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL3JhZGlvZ3JvdXBpdGVtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01YmJlOTdiOSYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3JhZGlvZ3JvdXBpdGVtX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF81YmJlOTdiOV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3JhZGlvZ3JvdXBpdGVtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01YmJlOTdiOSYgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL3JhZGlvZ3JvdXBpdGVtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01YmJlOTdiOSZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfcmFkaW9ncm91cGl0ZW1fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzViYmU5N2I5X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVuZGVyXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic3RhdGljUmVuZGVyRm5zXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3JhZGlvZ3JvdXBpdGVtX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF81YmJlOTdiOV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN0YXRpY1JlbmRlckZuc1wiXTsgfSk7XG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvcmFua2luZy9yYW5raW5nLWl0ZW0udnVlXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL3JhbmtpbmcvcmFua2luZy1pdGVtLnZ1ZSAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFJhbmtpbmdJdGVtLCBkZWZhdWx0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9yYW5raW5nX2l0ZW1fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzJmYWRlZDc2X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9yYW5raW5nLWl0ZW0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTJmYWRlZDc2JiAqLyBcIi4vc3JjL3Z1ZS9yYW5raW5nL3JhbmtpbmctaXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MmZhZGVkNzYmXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9yYW5raW5nX2l0ZW1fdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9yYW5raW5nLWl0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqLyBcIi4vc3JjL3Z1ZS9yYW5raW5nL3JhbmtpbmctaXRlbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUmFua2luZ0l0ZW1cIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcmFua2luZ19pdGVtX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlJhbmtpbmdJdGVtXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCIpO1xuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGNvbXBvbmVudCA9IE9iamVjdChfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX3J1bnRpbWVfY29tcG9uZW50Tm9ybWFsaXplcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiZGVmYXVsdFwiXSkoXG4gIF9yYW5raW5nX2l0ZW1fdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiZGVmYXVsdFwiXSxcbiAgX3JhbmtpbmdfaXRlbV92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMmZhZGVkNzZfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJyZW5kZXJcIl0sXG4gIF9yYW5raW5nX2l0ZW1fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzJmYWRlZDc2X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3RhdGljUmVuZGVyRm5zXCJdLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBhcGk7IH1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9yYW5raW5nL3JhbmtpbmctaXRlbS52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChjb21wb25lbnQuZXhwb3J0cyk7XG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9yYW5raW5nL3JhbmtpbmctaXRlbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9yYW5raW5nL3JhbmtpbmctaXRlbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGRlZmF1bHQsIFJhbmtpbmdJdGVtICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfcmFua2luZ19pdGVtX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcmFua2luZy1pdGVtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKi8gXCIuL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvcmFua2luZy9yYW5raW5nLWl0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlJhbmtpbmdJdGVtXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19yYW5raW5nX2l0ZW1fdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiUmFua2luZ0l0ZW1cIl07IH0pO1xuXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3JhbmtpbmdfaXRlbV92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJkZWZhdWx0XCJdKTsgXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9yYW5raW5nL3JhbmtpbmctaXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MmZhZGVkNzYmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9yYW5raW5nL3JhbmtpbmctaXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MmZhZGVkNzYmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19yYW5raW5nX2l0ZW1fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzJmYWRlZDc2X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcmFua2luZy1pdGVtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yZmFkZWQ3NiYgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL3JhbmtpbmcvcmFua2luZy1pdGVtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yZmFkZWQ3NiZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfcmFua2luZ19pdGVtX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF8yZmFkZWQ3Nl9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInJlbmRlclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19yYW5raW5nX2l0ZW1fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzJmYWRlZDc2X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3RhdGljUmVuZGVyRm5zXCJdOyB9KTtcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9yYW5raW5nL3JhbmtpbmcudnVlXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9yYW5raW5nL3JhbmtpbmcudnVlICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFJhbmtpbmcsIGRlZmF1bHQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3JhbmtpbmdfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzE5MDc0ZWVhX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9yYW5raW5nLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xOTA3NGVlYSYgKi8gXCIuL3NyYy92dWUvcmFua2luZy9yYW5raW5nLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xOTA3NGVlYSZcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3JhbmtpbmdfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9yYW5raW5nLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKi8gXCIuL3NyYy92dWUvcmFua2luZy9yYW5raW5nLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJSYW5raW5nXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3JhbmtpbmdfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiUmFua2luZ1wiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX3J1bnRpbWVfY29tcG9uZW50Tm9ybWFsaXplcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qcyAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiKTtcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBjb21wb25lbnQgPSBPYmplY3QoX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9ydW50aW1lX2NvbXBvbmVudE5vcm1hbGl6ZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcImRlZmF1bHRcIl0pKFxuICBfcmFua2luZ192dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJkZWZhdWx0XCJdLFxuICBfcmFua2luZ192dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMTkwNzRlZWFfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJyZW5kZXJcIl0sXG4gIF9yYW5raW5nX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF8xOTA3NGVlYV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN0YXRpY1JlbmRlckZuc1wiXSxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgYXBpOyB9XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvcmFua2luZy9yYW5raW5nLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKGNvbXBvbmVudC5leHBvcnRzKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL3JhbmtpbmcvcmFua2luZy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvcmFua2luZy9yYW5raW5nLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGRlZmF1bHQsIFJhbmtpbmcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19yYW5raW5nX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcmFua2luZy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICovIFwiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL3JhbmtpbmcvcmFua2luZy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUmFua2luZ1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfcmFua2luZ192dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJSYW5raW5nXCJdOyB9KTtcblxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19yYW5raW5nX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcImRlZmF1bHRcIl0pOyBcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL3JhbmtpbmcvcmFua2luZy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MTkwNzRlZWEmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvcmFua2luZy9yYW5raW5nLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xOTA3NGVlYSYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19yYW5raW5nX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF8xOTA3NGVlYV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3JhbmtpbmcudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTE5MDc0ZWVhJiAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvcmFua2luZy9yYW5raW5nLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xOTA3NGVlYSZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfcmFua2luZ192dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMTkwNzRlZWFfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJyZW5kZXJcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzdGF0aWNSZW5kZXJGbnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfcmFua2luZ192dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMTkwNzRlZWFfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl07IH0pO1xuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL3JhdGluZy1kcm9wZG93bi52dWVcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL3JhdGluZy1kcm9wZG93bi52dWUgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogUmF0aW5nRHJvcGRvd24sIGRlZmF1bHQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3JhdGluZ19kcm9wZG93bl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMzEyYzlkNmZfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3JhdGluZy1kcm9wZG93bi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MzEyYzlkNmYmICovIFwiLi9zcmMvdnVlL3JhdGluZy1kcm9wZG93bi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MzEyYzlkNmYmXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9yYXRpbmdfZHJvcGRvd25fdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9yYXRpbmctZHJvcGRvd24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqLyBcIi4vc3JjL3Z1ZS9yYXRpbmctZHJvcGRvd24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlJhdGluZ0Ryb3Bkb3duXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3JhdGluZ19kcm9wZG93bl92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJSYXRpbmdEcm9wZG93blwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX3J1bnRpbWVfY29tcG9uZW50Tm9ybWFsaXplcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qcyAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiKTtcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBjb21wb25lbnQgPSBPYmplY3QoX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9ydW50aW1lX2NvbXBvbmVudE5vcm1hbGl6ZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcImRlZmF1bHRcIl0pKFxuICBfcmF0aW5nX2Ryb3Bkb3duX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcImRlZmF1bHRcIl0sXG4gIF9yYXRpbmdfZHJvcGRvd25fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzMxMmM5ZDZmX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVuZGVyXCJdLFxuICBfcmF0aW5nX2Ryb3Bkb3duX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF8zMTJjOWQ2Zl9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN0YXRpY1JlbmRlckZuc1wiXSxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgYXBpOyB9XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvcmF0aW5nLWRyb3Bkb3duLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKGNvbXBvbmVudC5leHBvcnRzKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL3JhdGluZy1kcm9wZG93bi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvcmF0aW5nLWRyb3Bkb3duLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGRlZmF1bHQsIFJhdGluZ0Ryb3Bkb3duICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfcmF0aW5nX2Ryb3Bkb3duX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcmF0aW5nLWRyb3Bkb3duLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKi8gXCIuL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvcmF0aW5nLWRyb3Bkb3duLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJSYXRpbmdEcm9wZG93blwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfcmF0aW5nX2Ryb3Bkb3duX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlJhdGluZ0Ryb3Bkb3duXCJdOyB9KTtcblxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19yYXRpbmdfZHJvcGRvd25fdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiZGVmYXVsdFwiXSk7IFxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvcmF0aW5nLWRyb3Bkb3duLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zMTJjOWQ2ZiZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9yYXRpbmctZHJvcGRvd24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTMxMmM5ZDZmJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3JhdGluZ19kcm9wZG93bl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMzEyYzlkNmZfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAtIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9yYXRpbmctZHJvcGRvd24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTMxMmM5ZDZmJiAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvcmF0aW5nLWRyb3Bkb3duLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zMTJjOWQ2ZiZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfcmF0aW5nX2Ryb3Bkb3duX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF8zMTJjOWQ2Zl9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInJlbmRlclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19yYXRpbmdfZHJvcGRvd25fdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzMxMmM5ZDZmX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3RhdGljUmVuZGVyRm5zXCJdOyB9KTtcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9yYXRpbmcudnVlXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9yYXRpbmcudnVlICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFJhdGluZywgZGVmYXVsdCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcmF0aW5nX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF83MDkyYmZkZl9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcmF0aW5nLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03MDkyYmZkZiYgKi8gXCIuL3NyYy92dWUvcmF0aW5nLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03MDkyYmZkZiZcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3JhdGluZ192dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3JhdGluZy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICovIFwiLi9zcmMvdnVlL3JhdGluZy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUmF0aW5nXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3JhdGluZ192dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJSYXRpbmdcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9ydW50aW1lX2NvbXBvbmVudE5vcm1hbGl6ZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanMgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIik7XG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgY29tcG9uZW50ID0gT2JqZWN0KF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJkZWZhdWx0XCJdKShcbiAgX3JhdGluZ192dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJkZWZhdWx0XCJdLFxuICBfcmF0aW5nX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF83MDkyYmZkZl9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInJlbmRlclwiXSxcbiAgX3JhdGluZ192dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfNzA5MmJmZGZfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl0sXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGFwaTsgfVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL3JhdGluZy52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChjb21wb25lbnQuZXhwb3J0cyk7XG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9yYXRpbmcudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL3JhdGluZy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBkZWZhdWx0LCBSYXRpbmcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19yYXRpbmdfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9yYXRpbmcudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqLyBcIi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9yYXRpbmcudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlJhdGluZ1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfcmF0aW5nX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlJhdGluZ1wiXTsgfSk7XG5cbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfcmF0aW5nX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcImRlZmF1bHRcIl0pOyBcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL3JhdGluZy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NzA5MmJmZGYmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvcmF0aW5nLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03MDkyYmZkZiYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19yYXRpbmdfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzcwOTJiZmRmX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcmF0aW5nLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03MDkyYmZkZiYgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL3JhdGluZy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NzA5MmJmZGYmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwicmVuZGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3JhdGluZ192dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfNzA5MmJmZGZfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJyZW5kZXJcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzdGF0aWNSZW5kZXJGbnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfcmF0aW5nX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF83MDkyYmZkZl9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN0YXRpY1JlbmRlckZuc1wiXTsgfSk7XG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvcm93LWVsZW1lbnQudnVlXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL3Jvdy1lbGVtZW50LnZ1ZSAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFN1cnZleVJvd0VsZW1lbnQsIGRlZmF1bHQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Jvd19lbGVtZW50X3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF82MTdjMjAzN19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcm93LWVsZW1lbnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTYxN2MyMDM3JiAqLyBcIi4vc3JjL3Z1ZS9yb3ctZWxlbWVudC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NjE3YzIwMzcmXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9yb3dfZWxlbWVudF92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3Jvdy1lbGVtZW50LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKi8gXCIuL3NyYy92dWUvcm93LWVsZW1lbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlN1cnZleVJvd0VsZW1lbnRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcm93X2VsZW1lbnRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiU3VydmV5Um93RWxlbWVudFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX3J1bnRpbWVfY29tcG9uZW50Tm9ybWFsaXplcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qcyAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiKTtcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBjb21wb25lbnQgPSBPYmplY3QoX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9ydW50aW1lX2NvbXBvbmVudE5vcm1hbGl6ZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcImRlZmF1bHRcIl0pKFxuICBfcm93X2VsZW1lbnRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiZGVmYXVsdFwiXSxcbiAgX3Jvd19lbGVtZW50X3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF82MTdjMjAzN19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInJlbmRlclwiXSxcbiAgX3Jvd19lbGVtZW50X3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF82MTdjMjAzN19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN0YXRpY1JlbmRlckZuc1wiXSxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgYXBpOyB9XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvcm93LWVsZW1lbnQudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoY29tcG9uZW50LmV4cG9ydHMpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvcm93LWVsZW1lbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvcm93LWVsZW1lbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBkZWZhdWx0LCBTdXJ2ZXlSb3dFbGVtZW50ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfcm93X2VsZW1lbnRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9yb3ctZWxlbWVudC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICovIFwiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL3Jvdy1lbGVtZW50LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJTdXJ2ZXlSb3dFbGVtZW50XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19yb3dfZWxlbWVudF92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJTdXJ2ZXlSb3dFbGVtZW50XCJdOyB9KTtcblxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19yb3dfZWxlbWVudF92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJkZWZhdWx0XCJdKTsgXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9yb3ctZWxlbWVudC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NjE3YzIwMzcmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9yb3ctZWxlbWVudC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NjE3YzIwMzcmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19yb3dfZWxlbWVudF92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfNjE3YzIwMzdfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAtIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9yb3ctZWxlbWVudC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NjE3YzIwMzcmICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9yb3ctZWxlbWVudC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NjE3YzIwMzcmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwicmVuZGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3Jvd19lbGVtZW50X3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF82MTdjMjAzN19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInJlbmRlclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19yb3dfZWxlbWVudF92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfNjE3YzIwMzdfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl07IH0pO1xuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL3Jvdy52dWVcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL3Jvdy52dWUgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogUm93LCBkZWZhdWx0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9yb3dfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzdjYzBiZDg4X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9yb3cudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTdjYzBiZDg4JiAqLyBcIi4vc3JjL3Z1ZS9yb3cudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTdjYzBiZDg4JlwiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcm93X3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcm93LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKi8gXCIuL3NyYy92dWUvcm93LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJSb3dcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcm93X3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlJvd1wiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX3J1bnRpbWVfY29tcG9uZW50Tm9ybWFsaXplcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qcyAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiKTtcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBjb21wb25lbnQgPSBPYmplY3QoX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9ydW50aW1lX2NvbXBvbmVudE5vcm1hbGl6ZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcImRlZmF1bHRcIl0pKFxuICBfcm93X3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcImRlZmF1bHRcIl0sXG4gIF9yb3dfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzdjYzBiZDg4X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVuZGVyXCJdLFxuICBfcm93X3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF83Y2MwYmQ4OF9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN0YXRpY1JlbmRlckZuc1wiXSxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgYXBpOyB9XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvcm93LnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKGNvbXBvbmVudC5leHBvcnRzKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL3Jvdy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvcm93LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGRlZmF1bHQsIFJvdyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3Jvd192dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAtIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXI/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3Jvdy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICovIFwiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL3Jvdy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUm93XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19yb3dfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiUm93XCJdOyB9KTtcblxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19yb3dfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiZGVmYXVsdFwiXSk7IFxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvcm93LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03Y2MwYmQ4OCZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9yb3cudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTdjYzBiZDg4JiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3Jvd192dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfN2NjMGJkODhfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAtIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9yb3cudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTdjYzBiZDg4JiAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvcm93LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03Y2MwYmQ4OCZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfcm93X3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF83Y2MwYmQ4OF9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInJlbmRlclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19yb3dfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzdjYzBiZDg4X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3RhdGljUmVuZGVyRm5zXCJdOyB9KTtcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9zaWduYXR1cmVwYWQudnVlXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9zaWduYXR1cmVwYWQudnVlICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFNpZ25hdHVyZVBhZCwgZGVmYXVsdCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc2lnbmF0dXJlcGFkX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF8wNDYyMzQ5ZF9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vc2lnbmF0dXJlcGFkLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wNDYyMzQ5ZCYgKi8gXCIuL3NyYy92dWUvc2lnbmF0dXJlcGFkLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wNDYyMzQ5ZCZcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NpZ25hdHVyZXBhZF92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3NpZ25hdHVyZXBhZC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICovIFwiLi9zcmMvdnVlL3NpZ25hdHVyZXBhZC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiU2lnbmF0dXJlUGFkXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3NpZ25hdHVyZXBhZF92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJTaWduYXR1cmVQYWRcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9ydW50aW1lX2NvbXBvbmVudE5vcm1hbGl6ZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanMgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIik7XG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgY29tcG9uZW50ID0gT2JqZWN0KF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJkZWZhdWx0XCJdKShcbiAgX3NpZ25hdHVyZXBhZF92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJkZWZhdWx0XCJdLFxuICBfc2lnbmF0dXJlcGFkX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF8wNDYyMzQ5ZF9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInJlbmRlclwiXSxcbiAgX3NpZ25hdHVyZXBhZF92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMDQ2MjM0OWRfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl0sXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGFwaTsgfVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL3NpZ25hdHVyZXBhZC52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChjb21wb25lbnQuZXhwb3J0cyk7XG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9zaWduYXR1cmVwYWQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL3NpZ25hdHVyZXBhZC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBkZWZhdWx0LCBTaWduYXR1cmVQYWQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19zaWduYXR1cmVwYWRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zaWduYXR1cmVwYWQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqLyBcIi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9zaWduYXR1cmVwYWQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlNpZ25hdHVyZVBhZFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfc2lnbmF0dXJlcGFkX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlNpZ25hdHVyZVBhZFwiXTsgfSk7XG5cbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfc2lnbmF0dXJlcGFkX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcImRlZmF1bHRcIl0pOyBcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL3NpZ25hdHVyZXBhZC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MDQ2MjM0OWQmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvc2lnbmF0dXJlcGFkLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wNDYyMzQ5ZCYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19zaWduYXR1cmVwYWRfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzA0NjIzNDlkX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc2lnbmF0dXJlcGFkLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wNDYyMzQ5ZCYgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL3NpZ25hdHVyZXBhZC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MDQ2MjM0OWQmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwicmVuZGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3NpZ25hdHVyZXBhZF92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfMDQ2MjM0OWRfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJyZW5kZXJcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzdGF0aWNSZW5kZXJGbnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfc2lnbmF0dXJlcGFkX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF8wNDYyMzQ5ZF9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN0YXRpY1JlbmRlckZuc1wiXTsgfSk7XG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvc3RyaW5nLWVkaXRvci52dWVcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9zdHJpbmctZWRpdG9yLnZ1ZSAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogU3VydmV5U3RyaW5nRWRpdG9yLCBkZWZhdWx0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zdHJpbmdfZWRpdG9yX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF85NjM5ZjE1Ml9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vc3RyaW5nLWVkaXRvci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9OTYzOWYxNTImICovIFwiLi9zcmMvdnVlL3N0cmluZy1lZGl0b3IudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTk2MzlmMTUyJlwiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc3RyaW5nX2VkaXRvcl92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3N0cmluZy1lZGl0b3IudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqLyBcIi4vc3JjL3Z1ZS9zdHJpbmctZWRpdG9yLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJTdXJ2ZXlTdHJpbmdFZGl0b3JcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfc3RyaW5nX2VkaXRvcl92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJTdXJ2ZXlTdHJpbmdFZGl0b3JcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9ydW50aW1lX2NvbXBvbmVudE5vcm1hbGl6ZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanMgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIik7XG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgY29tcG9uZW50ID0gT2JqZWN0KF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJkZWZhdWx0XCJdKShcbiAgX3N0cmluZ19lZGl0b3JfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiZGVmYXVsdFwiXSxcbiAgX3N0cmluZ19lZGl0b3JfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzk2MzlmMTUyX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVuZGVyXCJdLFxuICBfc3RyaW5nX2VkaXRvcl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfOTYzOWYxNTJfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl0sXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGFwaTsgfVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL3N0cmluZy1lZGl0b3IudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoY29tcG9uZW50LmV4cG9ydHMpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvc3RyaW5nLWVkaXRvci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL3N0cmluZy1lZGl0b3IudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGRlZmF1bHQsIFN1cnZleVN0cmluZ0VkaXRvciAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3N0cmluZ19lZGl0b3JfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zdHJpbmctZWRpdG9yLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKi8gXCIuL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvc3RyaW5nLWVkaXRvci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiU3VydmV5U3RyaW5nRWRpdG9yXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19zdHJpbmdfZWRpdG9yX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlN1cnZleVN0cmluZ0VkaXRvclwiXTsgfSk7XG5cbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfc3RyaW5nX2VkaXRvcl92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJkZWZhdWx0XCJdKTsgXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9zdHJpbmctZWRpdG9yLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD05NjM5ZjE1MiZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvc3RyaW5nLWVkaXRvci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9OTYzOWYxNTImICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3N0cmluZ19lZGl0b3JfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzk2MzlmMTUyX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3RyaW5nLWVkaXRvci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9OTYzOWYxNTImICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9zdHJpbmctZWRpdG9yLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD05NjM5ZjE1MiZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfc3RyaW5nX2VkaXRvcl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfOTYzOWYxNTJfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJyZW5kZXJcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzdGF0aWNSZW5kZXJGbnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfc3RyaW5nX2VkaXRvcl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfOTYzOWYxNTJfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl07IH0pO1xuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL3N0cmluZy12aWV3ZXIudnVlXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvc3RyaW5nLXZpZXdlci52dWUgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFN1cnZleVN0cmluZ1ZpZXdlciwgZGVmYXVsdCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc3RyaW5nX3ZpZXdlcl92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfN2Q5MTg1MDhfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3N0cmluZy12aWV3ZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTdkOTE4NTA4JiAqLyBcIi4vc3JjL3Z1ZS9zdHJpbmctdmlld2VyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03ZDkxODUwOCZcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3N0cmluZ192aWV3ZXJfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9zdHJpbmctdmlld2VyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKi8gXCIuL3NyYy92dWUvc3RyaW5nLXZpZXdlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiU3VydmV5U3RyaW5nVmlld2VyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3N0cmluZ192aWV3ZXJfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiU3VydmV5U3RyaW5nVmlld2VyXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCIpO1xuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGNvbXBvbmVudCA9IE9iamVjdChfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX3J1bnRpbWVfY29tcG9uZW50Tm9ybWFsaXplcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiZGVmYXVsdFwiXSkoXG4gIF9zdHJpbmdfdmlld2VyX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcImRlZmF1bHRcIl0sXG4gIF9zdHJpbmdfdmlld2VyX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF83ZDkxODUwOF9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInJlbmRlclwiXSxcbiAgX3N0cmluZ192aWV3ZXJfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzdkOTE4NTA4X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3RhdGljUmVuZGVyRm5zXCJdLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBhcGk7IH1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9zdHJpbmctdmlld2VyLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKGNvbXBvbmVudC5leHBvcnRzKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL3N0cmluZy12aWV3ZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9zdHJpbmctdmlld2VyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBkZWZhdWx0LCBTdXJ2ZXlTdHJpbmdWaWV3ZXIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19zdHJpbmdfdmlld2VyX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3RyaW5nLXZpZXdlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICovIFwiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL3N0cmluZy12aWV3ZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlN1cnZleVN0cmluZ1ZpZXdlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfc3RyaW5nX3ZpZXdlcl92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJTdXJ2ZXlTdHJpbmdWaWV3ZXJcIl07IH0pO1xuXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3N0cmluZ192aWV3ZXJfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiZGVmYXVsdFwiXSk7IFxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvc3RyaW5nLXZpZXdlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9N2Q5MTg1MDgmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL3N0cmluZy12aWV3ZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTdkOTE4NTA4JiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19zdHJpbmdfdmlld2VyX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF83ZDkxODUwOF9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3N0cmluZy12aWV3ZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTdkOTE4NTA4JiAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvc3RyaW5nLXZpZXdlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9N2Q5MTg1MDgmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwicmVuZGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3N0cmluZ192aWV3ZXJfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzdkOTE4NTA4X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVuZGVyXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic3RhdGljUmVuZGVyRm5zXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3N0cmluZ192aWV3ZXJfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzdkOTE4NTA4X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3RhdGljUmVuZGVyRm5zXCJdOyB9KTtcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9zdHJpbmcudnVlXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9zdHJpbmcudnVlICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFN1cnZleVN0cmluZywgZGVmYXVsdCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc3RyaW5nX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF9kM2EzZDc1YV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vc3RyaW5nLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1kM2EzZDc1YSYgKi8gXCIuL3NyYy92dWUvc3RyaW5nLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1kM2EzZDc1YSZcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3N0cmluZ192dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3N0cmluZy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICovIFwiLi9zcmMvdnVlL3N0cmluZy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiU3VydmV5U3RyaW5nXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3N0cmluZ192dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJTdXJ2ZXlTdHJpbmdcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9ydW50aW1lX2NvbXBvbmVudE5vcm1hbGl6ZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanMgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIik7XG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgY29tcG9uZW50ID0gT2JqZWN0KF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJkZWZhdWx0XCJdKShcbiAgX3N0cmluZ192dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJkZWZhdWx0XCJdLFxuICBfc3RyaW5nX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF9kM2EzZDc1YV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInJlbmRlclwiXSxcbiAgX3N0cmluZ192dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfZDNhM2Q3NWFfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl0sXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGFwaTsgfVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL3N0cmluZy52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChjb21wb25lbnQuZXhwb3J0cyk7XG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9zdHJpbmcudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL3N0cmluZy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBkZWZhdWx0LCBTdXJ2ZXlTdHJpbmcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19zdHJpbmdfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zdHJpbmcudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqLyBcIi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9zdHJpbmcudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlN1cnZleVN0cmluZ1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfc3RyaW5nX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlN1cnZleVN0cmluZ1wiXTsgfSk7XG5cbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfc3RyaW5nX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcImRlZmF1bHRcIl0pOyBcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL3N0cmluZy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZDNhM2Q3NWEmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvc3RyaW5nLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1kM2EzZDc1YSYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19zdHJpbmdfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkX2QzYTNkNzVhX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3RyaW5nLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1kM2EzZDc1YSYgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL3N0cmluZy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZDNhM2Q3NWEmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwicmVuZGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3N0cmluZ192dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfZDNhM2Q3NWFfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJyZW5kZXJcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzdGF0aWNSZW5kZXJGbnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfc3RyaW5nX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF9kM2EzZDc1YV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN0YXRpY1JlbmRlckZuc1wiXTsgfSk7XG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvc3VydmV5LnZ1ZVwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvc3VydmV5LnZ1ZSAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBTdXJ2ZXksIGRlZmF1bHQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3N1cnZleV92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfNjg3NGUxYzhfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3N1cnZleS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9Njg3NGUxYzgmICovIFwiLi9zcmMvdnVlL3N1cnZleS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9Njg3NGUxYzgmXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zdXJ2ZXlfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9zdXJ2ZXkudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqLyBcIi4vc3JjL3Z1ZS9zdXJ2ZXkudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlN1cnZleVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9zdXJ2ZXlfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiU3VydmV5XCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCIpO1xuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGNvbXBvbmVudCA9IE9iamVjdChfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX3J1bnRpbWVfY29tcG9uZW50Tm9ybWFsaXplcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiZGVmYXVsdFwiXSkoXG4gIF9zdXJ2ZXlfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiZGVmYXVsdFwiXSxcbiAgX3N1cnZleV92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfNjg3NGUxYzhfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJyZW5kZXJcIl0sXG4gIF9zdXJ2ZXlfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzY4NzRlMWM4X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3RhdGljUmVuZGVyRm5zXCJdLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBhcGk7IH1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9zdXJ2ZXkudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoY29tcG9uZW50LmV4cG9ydHMpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvc3VydmV5LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS9zdXJ2ZXkudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogZGVmYXVsdCwgU3VydmV5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfc3VydmV5X3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3VydmV5LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKi8gXCIuL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvc3VydmV5LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJTdXJ2ZXlcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3N1cnZleV92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJTdXJ2ZXlcIl07IH0pO1xuXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3N1cnZleV92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJkZWZhdWx0XCJdKTsgXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS9zdXJ2ZXkudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTY4NzRlMWM4JlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL3N1cnZleS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9Njg3NGUxYzgmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfc3VydmV5X3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF82ODc0ZTFjOF9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3N1cnZleS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9Njg3NGUxYzgmICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS9zdXJ2ZXkudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTY4NzRlMWM4JlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInJlbmRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19zdXJ2ZXlfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzY4NzRlMWM4X19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVuZGVyXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic3RhdGljUmVuZGVyRm5zXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3N1cnZleV92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfNjg3NGUxYzhfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl07IH0pO1xuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL3RhZ2JveC52dWVcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL3RhZ2JveC52dWUgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogVGFnYm94LCBkZWZhdWx0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF90YWdib3hfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkX2I5ZTFiNzlhX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi90YWdib3gudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWI5ZTFiNzlhJiAqLyBcIi4vc3JjL3Z1ZS90YWdib3gudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWI5ZTFiNzlhJlwiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdGFnYm94X3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vdGFnYm94LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKi8gXCIuL3NyYy92dWUvdGFnYm94LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJUYWdib3hcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdGFnYm94X3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIlRhZ2JveFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX3J1bnRpbWVfY29tcG9uZW50Tm9ybWFsaXplcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qcyAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiKTtcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBjb21wb25lbnQgPSBPYmplY3QoX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9ydW50aW1lX2NvbXBvbmVudE5vcm1hbGl6ZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcImRlZmF1bHRcIl0pKFxuICBfdGFnYm94X3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcImRlZmF1bHRcIl0sXG4gIF90YWdib3hfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkX2I5ZTFiNzlhX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVuZGVyXCJdLFxuICBfdGFnYm94X3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF9iOWUxYjc5YV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN0YXRpY1JlbmRlckZuc1wiXSxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgYXBpOyB9XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvdGFnYm94LnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKGNvbXBvbmVudC5leHBvcnRzKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL3RhZ2JveC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvdGFnYm94LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGRlZmF1bHQsIFRhZ2JveCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3RhZ2JveF92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAtIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXI/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3RhZ2JveC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICovIFwiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL3RhZ2JveC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiVGFnYm94XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc190YWdib3hfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiVGFnYm94XCJdOyB9KTtcblxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc190YWdib3hfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiZGVmYXVsdFwiXSk7IFxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvdGFnYm94LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1iOWUxYjc5YSZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS90YWdib3gudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWI5ZTFiNzlhJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3RhZ2JveF92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfYjllMWI3OWFfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAtIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi90YWdib3gudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWI5ZTFiNzlhJiAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvdGFnYm94LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1iOWUxYjc5YSZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfdGFnYm94X3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF9iOWUxYjc5YV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInJlbmRlclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc190YWdib3hfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkX2I5ZTFiNzlhX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3RhdGljUmVuZGVyRm5zXCJdOyB9KTtcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS90ZXh0LWlucHV0LnZ1ZVwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL3RleHQtaW5wdXQudnVlICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBRdWVzdGlvblRleHRJbnB1dCwgZGVmYXVsdCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdGV4dF9pbnB1dF92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfNDc3NmI1ZWNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3RleHQtaW5wdXQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTQ3NzZiNWVjJiAqLyBcIi4vc3JjL3Z1ZS90ZXh0LWlucHV0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00Nzc2YjVlYyZcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3RleHRfaW5wdXRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi90ZXh0LWlucHV0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKi8gXCIuL3NyYy92dWUvdGV4dC1pbnB1dC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUXVlc3Rpb25UZXh0SW5wdXRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdGV4dF9pbnB1dF92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJRdWVzdGlvblRleHRJbnB1dFwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX3J1bnRpbWVfY29tcG9uZW50Tm9ybWFsaXplcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qcyAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiKTtcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBjb21wb25lbnQgPSBPYmplY3QoX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9ydW50aW1lX2NvbXBvbmVudE5vcm1hbGl6ZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcImRlZmF1bHRcIl0pKFxuICBfdGV4dF9pbnB1dF92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJkZWZhdWx0XCJdLFxuICBfdGV4dF9pbnB1dF92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfNDc3NmI1ZWNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJyZW5kZXJcIl0sXG4gIF90ZXh0X2lucHV0X3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF80Nzc2YjVlY19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN0YXRpY1JlbmRlckZuc1wiXSxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgYXBpOyB9XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvdGV4dC1pbnB1dC52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChjb21wb25lbnQuZXhwb3J0cyk7XG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS90ZXh0LWlucHV0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvdGV4dC1pbnB1dC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogZGVmYXVsdCwgUXVlc3Rpb25UZXh0SW5wdXQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc190ZXh0X2lucHV0X3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlcj8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vdGV4dC1pbnB1dC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICovIFwiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL3RleHQtaW5wdXQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlF1ZXN0aW9uVGV4dElucHV0XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc190ZXh0X2lucHV0X3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlF1ZXN0aW9uVGV4dElucHV0XCJdOyB9KTtcblxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc190ZXh0X2lucHV0X3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcImRlZmF1bHRcIl0pOyBcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL3RleHQtaW5wdXQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTQ3NzZiNWVjJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS90ZXh0LWlucHV0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00Nzc2YjVlYyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiByZW5kZXIsIHN0YXRpY1JlbmRlckZucyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfdGV4dF9pbnB1dF92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfNDc3NmI1ZWNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAtIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi90ZXh0LWlucHV0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00Nzc2YjVlYyYgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvdnVlL3RleHQtaW5wdXQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTQ3NzZiNWVjJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInJlbmRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc190ZXh0X2lucHV0X3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF80Nzc2YjVlY19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInJlbmRlclwiXTsgfSk7XG5cbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcInN0YXRpY1JlbmRlckZuc1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc190ZXh0X2lucHV0X3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF80Nzc2YjVlY19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInN0YXRpY1JlbmRlckZuc1wiXTsgfSk7XG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvdGV4dC52dWVcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS90ZXh0LnZ1ZSAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogUXVlc3Rpb25UZXh0LCBkZWZhdWx0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF90ZXh0X3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF80MGVjZTQyMl9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vdGV4dC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NDBlY2U0MjImICovIFwiLi9zcmMvdnVlL3RleHQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTQwZWNlNDIyJlwiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdGV4dF92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3RleHQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqLyBcIi4vc3JjL3Z1ZS90ZXh0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJRdWVzdGlvblRleHRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdGV4dF92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJRdWVzdGlvblRleHRcIl07IH0pO1xuXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9ydW50aW1lX2NvbXBvbmVudE5vcm1hbGl6ZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanMgKi8gXCIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIik7XG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgY29tcG9uZW50ID0gT2JqZWN0KF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJkZWZhdWx0XCJdKShcbiAgX3RleHRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiZGVmYXVsdFwiXSxcbiAgX3RleHRfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzQwZWNlNDIyX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVuZGVyXCJdLFxuICBfdGV4dF92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfNDBlY2U0MjJfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl0sXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGFwaTsgfVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL3RleHQudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoY29tcG9uZW50LmV4cG9ydHMpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvdGV4dC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL3RleHQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGRlZmF1bHQsIFF1ZXN0aW9uVGV4dCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3RleHRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi90ZXh0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKi8gXCIuL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvdGV4dC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiUXVlc3Rpb25UZXh0XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc190ZXh0X3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlF1ZXN0aW9uVGV4dFwiXTsgfSk7XG5cbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfdGV4dF92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJkZWZhdWx0XCJdKTsgXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL3Z1ZS90ZXh0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00MGVjZTQyMiZcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvdGV4dC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NDBlY2U0MjImICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgZXhwb3J0cyBwcm92aWRlZDogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3RleHRfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzQwZWNlNDIyX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vdGV4dC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NDBlY2U0MjImICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS90ZXh0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00MGVjZTQyMiZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfdGV4dF92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfNDBlY2U0MjJfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJyZW5kZXJcIl07IH0pO1xuXG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJzdGF0aWNSZW5kZXJGbnNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2xvYWRlcnNfdGVtcGxhdGVMb2FkZXJfanNfdnVlX2xvYWRlcl9vcHRpb25zX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfdGV4dF92dWVfdnVlX3R5cGVfdGVtcGxhdGVfaWRfNDBlY2U0MjJfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXCJzdGF0aWNSZW5kZXJGbnNcIl07IH0pO1xuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL3RpbWVycGFuZWwudnVlXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy92dWUvdGltZXJwYW5lbC52dWUgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFRpbWVyUGFuZWwsIGRlZmF1bHQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3RpbWVycGFuZWxfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzBkMmFiZTIxX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi90aW1lcnBhbmVsLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wZDJhYmUyMSYgKi8gXCIuL3NyYy92dWUvdGltZXJwYW5lbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MGQyYWJlMjEmXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF90aW1lcnBhbmVsX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vdGltZXJwYW5lbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmICovIFwiLi9zcmMvdnVlL3RpbWVycGFuZWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlRpbWVyUGFuZWxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdGltZXJwYW5lbF92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJUaW1lclBhbmVsXCJdOyB9KTtcblxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfcnVudGltZV9jb21wb25lbnROb3JtYWxpemVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzICovIFwiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCIpO1xuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGNvbXBvbmVudCA9IE9iamVjdChfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX3J1bnRpbWVfY29tcG9uZW50Tm9ybWFsaXplcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1wiZGVmYXVsdFwiXSkoXG4gIF90aW1lcnBhbmVsX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcImRlZmF1bHRcIl0sXG4gIF90aW1lcnBhbmVsX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF8wZDJhYmUyMV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcInJlbmRlclwiXSxcbiAgX3RpbWVycGFuZWxfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzBkMmFiZTIxX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3RhdGljUmVuZGVyRm5zXCJdLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBhcGk7IH1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS90aW1lcnBhbmVsLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKGNvbXBvbmVudC5leHBvcnRzKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvdnVlL3RpbWVycGFuZWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL3Z1ZS90aW1lcnBhbmVsLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyYgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBleHBvcnRzIHByb3ZpZGVkOiBkZWZhdWx0LCBUaW1lclBhbmVsICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdHNfbG9hZGVyX2luZGV4X2pzX3JlZl8wX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9pbmRleF9qc192dWVfbG9hZGVyX29wdGlvbnNfdGltZXJwYW5lbF92dWVfdnVlX3R5cGVfc2NyaXB0X2xhbmdfdHNfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAtIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXI/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3RpbWVycGFuZWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJiAqLyBcIi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL3Z1ZS90aW1lcnBhbmVsLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIik7XG4vKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJUaW1lclBhbmVsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc190c19sb2FkZXJfaW5kZXhfanNfcmVmXzBfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc190aW1lcnBhbmVsX3Z1ZV92dWVfdHlwZV9zY3JpcHRfbGFuZ190c19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIlRpbWVyUGFuZWxcIl07IH0pO1xuXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChfbm9kZV9tb2R1bGVzX3RzX2xvYWRlcl9pbmRleF9qc19yZWZfMF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3RpbWVycGFuZWxfdnVlX3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wiZGVmYXVsdFwiXSk7IFxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy92dWUvdGltZXJwYW5lbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MGQyYWJlMjEmXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvdnVlL3RpbWVycGFuZWwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTBkMmFiZTIxJiAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfbG9hZGVyc190ZW1wbGF0ZUxvYWRlcl9qc192dWVfbG9hZGVyX29wdGlvbnNfbm9kZV9tb2R1bGVzX3Z1ZV9sb2FkZXJfbGliX2luZGV4X2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc190aW1lcnBhbmVsX3Z1ZV92dWVfdHlwZV90ZW1wbGF0ZV9pZF8wZDJhYmUyMV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3RpbWVycGFuZWwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTBkMmFiZTIxJiAqLyBcIi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy92dWUvdGltZXJwYW5lbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MGQyYWJlMjEmXCIpO1xuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwicmVuZGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3RpbWVycGFuZWxfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzBkMmFiZTIxX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wicmVuZGVyXCJdOyB9KTtcblxuLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwic3RhdGljUmVuZGVyRm5zXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVfbW9kdWxlc192dWVfbG9hZGVyX2xpYl9sb2FkZXJzX3RlbXBsYXRlTG9hZGVyX2pzX3Z1ZV9sb2FkZXJfb3B0aW9uc19ub2RlX21vZHVsZXNfdnVlX2xvYWRlcl9saWJfaW5kZXhfanNfdnVlX2xvYWRlcl9vcHRpb25zX3RpbWVycGFuZWxfdnVlX3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzBkMmFiZTIxX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wic3RhdGljUmVuZGVyRm5zXCJdOyB9KTtcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcInZ1ZVwiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIGV4dGVybmFsIHtcInJvb3RcIjpcIlZ1ZVwiLFwiY29tbW9uanMyXCI6XCJ2dWVcIixcImNvbW1vbmpzXCI6XCJ2dWVcIixcImFtZFwiOlwidnVlXCJ9ICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX3Z1ZV9fO1xuXG4vKioqLyB9KVxuXG4vKioqKioqLyB9KTtcbn0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3VydmV5LnZ1ZS5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/survey-vue/survey-vue.js\n");

/***/ }),

/***/ "./node_modules/sweetalert2/dist/sweetalert2.all.js":
/*!**********************************************************!*\
  !*** ./node_modules/sweetalert2/dist/sweetalert2.all.js ***!
  \**********************************************************/
/***/ (function(module) {

eval("/*!\n* sweetalert2 v11.7.31\n* Released under the MIT License.\n*/\n(function (global, factory) {\n   true ? module.exports = factory() :\n  0;\n})(this, (function () { 'use strict';\n\n  function _classPrivateFieldGet(receiver, privateMap) {\n    var descriptor = _classExtractFieldDescriptor(receiver, privateMap, \"get\");\n    return _classApplyDescriptorGet(receiver, descriptor);\n  }\n  function _classPrivateFieldSet(receiver, privateMap, value) {\n    var descriptor = _classExtractFieldDescriptor(receiver, privateMap, \"set\");\n    _classApplyDescriptorSet(receiver, descriptor, value);\n    return value;\n  }\n  function _classExtractFieldDescriptor(receiver, privateMap, action) {\n    if (!privateMap.has(receiver)) {\n      throw new TypeError(\"attempted to \" + action + \" private field on non-instance\");\n    }\n    return privateMap.get(receiver);\n  }\n  function _classApplyDescriptorGet(receiver, descriptor) {\n    if (descriptor.get) {\n      return descriptor.get.call(receiver);\n    }\n    return descriptor.value;\n  }\n  function _classApplyDescriptorSet(receiver, descriptor, value) {\n    if (descriptor.set) {\n      descriptor.set.call(receiver, value);\n    } else {\n      if (!descriptor.writable) {\n        throw new TypeError(\"attempted to set read only private field\");\n      }\n      descriptor.value = value;\n    }\n  }\n  function _checkPrivateRedeclaration(obj, privateCollection) {\n    if (privateCollection.has(obj)) {\n      throw new TypeError(\"Cannot initialize the same private elements twice on an object\");\n    }\n  }\n  function _classPrivateFieldInitSpec(obj, privateMap, value) {\n    _checkPrivateRedeclaration(obj, privateMap);\n    privateMap.set(obj, value);\n  }\n\n  const RESTORE_FOCUS_TIMEOUT = 100;\n\n  /** @type {GlobalState} */\n  const globalState = {};\n  const focusPreviousActiveElement = () => {\n    if (globalState.previousActiveElement instanceof HTMLElement) {\n      globalState.previousActiveElement.focus();\n      globalState.previousActiveElement = null;\n    } else if (document.body) {\n      document.body.focus();\n    }\n  };\n\n  /**\n   * Restore previous active (focused) element\n   *\n   * @param {boolean} returnFocus\n   * @returns {Promise<void>}\n   */\n  const restoreActiveElement = returnFocus => {\n    return new Promise(resolve => {\n      if (!returnFocus) {\n        return resolve();\n      }\n      const x = window.scrollX;\n      const y = window.scrollY;\n      globalState.restoreFocusTimeout = setTimeout(() => {\n        focusPreviousActiveElement();\n        resolve();\n      }, RESTORE_FOCUS_TIMEOUT); // issues/900\n\n      window.scrollTo(x, y);\n    });\n  };\n\n  const swalPrefix = 'swal2-';\n\n  /**\n   * @typedef\n   * { | 'container'\n   *   | 'shown'\n   *   | 'height-auto'\n   *   | 'iosfix'\n   *   | 'popup'\n   *   | 'modal'\n   *   | 'no-backdrop'\n   *   | 'no-transition'\n   *   | 'toast'\n   *   | 'toast-shown'\n   *   | 'show'\n   *   | 'hide'\n   *   | 'close'\n   *   | 'title'\n   *   | 'html-container'\n   *   | 'actions'\n   *   | 'confirm'\n   *   | 'deny'\n   *   | 'cancel'\n   *   | 'default-outline'\n   *   | 'footer'\n   *   | 'icon'\n   *   | 'icon-content'\n   *   | 'image'\n   *   | 'input'\n   *   | 'file'\n   *   | 'range'\n   *   | 'select'\n   *   | 'radio'\n   *   | 'checkbox'\n   *   | 'label'\n   *   | 'textarea'\n   *   | 'inputerror'\n   *   | 'input-label'\n   *   | 'validation-message'\n   *   | 'progress-steps'\n   *   | 'active-progress-step'\n   *   | 'progress-step'\n   *   | 'progress-step-line'\n   *   | 'loader'\n   *   | 'loading'\n   *   | 'styled'\n   *   | 'top'\n   *   | 'top-start'\n   *   | 'top-end'\n   *   | 'top-left'\n   *   | 'top-right'\n   *   | 'center'\n   *   | 'center-start'\n   *   | 'center-end'\n   *   | 'center-left'\n   *   | 'center-right'\n   *   | 'bottom'\n   *   | 'bottom-start'\n   *   | 'bottom-end'\n   *   | 'bottom-left'\n   *   | 'bottom-right'\n   *   | 'grow-row'\n   *   | 'grow-column'\n   *   | 'grow-fullscreen'\n   *   | 'rtl'\n   *   | 'timer-progress-bar'\n   *   | 'timer-progress-bar-container'\n   *   | 'scrollbar-measure'\n   *   | 'icon-success'\n   *   | 'icon-warning'\n   *   | 'icon-info'\n   *   | 'icon-question'\n   *   | 'icon-error'\n   * } SwalClass\n   * @typedef {Record<SwalClass, string>} SwalClasses\n   */\n\n  /**\n   * @typedef {'success' | 'warning' | 'info' | 'question' | 'error'} SwalIcon\n   * @typedef {Record<SwalIcon, string>} SwalIcons\n   */\n\n  /** @type {SwalClass[]} */\n  const classNames = ['container', 'shown', 'height-auto', 'iosfix', 'popup', 'modal', 'no-backdrop', 'no-transition', 'toast', 'toast-shown', 'show', 'hide', 'close', 'title', 'html-container', 'actions', 'confirm', 'deny', 'cancel', 'default-outline', 'footer', 'icon', 'icon-content', 'image', 'input', 'file', 'range', 'select', 'radio', 'checkbox', 'label', 'textarea', 'inputerror', 'input-label', 'validation-message', 'progress-steps', 'active-progress-step', 'progress-step', 'progress-step-line', 'loader', 'loading', 'styled', 'top', 'top-start', 'top-end', 'top-left', 'top-right', 'center', 'center-start', 'center-end', 'center-left', 'center-right', 'bottom', 'bottom-start', 'bottom-end', 'bottom-left', 'bottom-right', 'grow-row', 'grow-column', 'grow-fullscreen', 'rtl', 'timer-progress-bar', 'timer-progress-bar-container', 'scrollbar-measure', 'icon-success', 'icon-warning', 'icon-info', 'icon-question', 'icon-error'];\n  const swalClasses = classNames.reduce((acc, className) => {\n    acc[className] = swalPrefix + className;\n    return acc;\n  }, /** @type {SwalClasses} */{});\n\n  /** @type {SwalIcon[]} */\n  const icons = ['success', 'warning', 'info', 'question', 'error'];\n  const iconTypes = icons.reduce((acc, icon) => {\n    acc[icon] = swalPrefix + icon;\n    return acc;\n  }, /** @type {SwalIcons} */{});\n\n  const consolePrefix = 'SweetAlert2:';\n\n  /**\n   * Capitalize the first letter of a string\n   *\n   * @param {string} str\n   * @returns {string}\n   */\n  const capitalizeFirstLetter = str => str.charAt(0).toUpperCase() + str.slice(1);\n\n  /**\n   * Standardize console warnings\n   *\n   * @param {string | string[]} message\n   */\n  const warn = message => {\n    console.warn(\"\".concat(consolePrefix, \" \").concat(typeof message === 'object' ? message.join(' ') : message));\n  };\n\n  /**\n   * Standardize console errors\n   *\n   * @param {string} message\n   */\n  const error = message => {\n    console.error(\"\".concat(consolePrefix, \" \").concat(message));\n  };\n\n  /**\n   * Private global state for `warnOnce`\n   *\n   * @type {string[]}\n   * @private\n   */\n  const previousWarnOnceMessages = [];\n\n  /**\n   * Show a console warning, but only if it hasn't already been shown\n   *\n   * @param {string} message\n   */\n  const warnOnce = message => {\n    if (!previousWarnOnceMessages.includes(message)) {\n      previousWarnOnceMessages.push(message);\n      warn(message);\n    }\n  };\n\n  /**\n   * Show a one-time console warning about deprecated params/methods\n   *\n   * @param {string} deprecatedParam\n   * @param {string} useInstead\n   */\n  const warnAboutDeprecation = (deprecatedParam, useInstead) => {\n    warnOnce(\"\\\"\".concat(deprecatedParam, \"\\\" is deprecated and will be removed in the next major release. Please use \\\"\").concat(useInstead, \"\\\" instead.\"));\n  };\n\n  /**\n   * If `arg` is a function, call it (with no arguments or context) and return the result.\n   * Otherwise, just pass the value through\n   *\n   * @param {Function | any} arg\n   * @returns {any}\n   */\n  const callIfFunction = arg => typeof arg === 'function' ? arg() : arg;\n\n  /**\n   * @param {any} arg\n   * @returns {boolean}\n   */\n  const hasToPromiseFn = arg => arg && typeof arg.toPromise === 'function';\n\n  /**\n   * @param {any} arg\n   * @returns {Promise<any>}\n   */\n  const asPromise = arg => hasToPromiseFn(arg) ? arg.toPromise() : Promise.resolve(arg);\n\n  /**\n   * @param {any} arg\n   * @returns {boolean}\n   */\n  const isPromise = arg => arg && Promise.resolve(arg) === arg;\n\n  /**\n   * Gets the popup container which contains the backdrop and the popup itself.\n   *\n   * @returns {HTMLElement | null}\n   */\n  const getContainer = () => document.body.querySelector(\".\".concat(swalClasses.container));\n\n  /**\n   * @param {string} selectorString\n   * @returns {HTMLElement | null}\n   */\n  const elementBySelector = selectorString => {\n    const container = getContainer();\n    return container ? container.querySelector(selectorString) : null;\n  };\n\n  /**\n   * @param {string} className\n   * @returns {HTMLElement | null}\n   */\n  const elementByClass = className => {\n    return elementBySelector(\".\".concat(className));\n  };\n\n  /**\n   * @returns {HTMLElement | null}\n   */\n  const getPopup = () => elementByClass(swalClasses.popup);\n\n  /**\n   * @returns {HTMLElement | null}\n   */\n  const getIcon = () => elementByClass(swalClasses.icon);\n\n  /**\n   * @returns {HTMLElement | null}\n   */\n  const getIconContent = () => elementByClass(swalClasses['icon-content']);\n\n  /**\n   * @returns {HTMLElement | null}\n   */\n  const getTitle = () => elementByClass(swalClasses.title);\n\n  /**\n   * @returns {HTMLElement | null}\n   */\n  const getHtmlContainer = () => elementByClass(swalClasses['html-container']);\n\n  /**\n   * @returns {HTMLElement | null}\n   */\n  const getImage = () => elementByClass(swalClasses.image);\n\n  /**\n   * @returns {HTMLElement | null}\n   */\n  const getProgressSteps = () => elementByClass(swalClasses['progress-steps']);\n\n  /**\n   * @returns {HTMLElement | null}\n   */\n  const getValidationMessage = () => elementByClass(swalClasses['validation-message']);\n\n  /**\n   * @returns {HTMLButtonElement | null}\n   */\n  const getConfirmButton = () => /** @type {HTMLButtonElement} */elementBySelector(\".\".concat(swalClasses.actions, \" .\").concat(swalClasses.confirm));\n\n  /**\n   * @returns {HTMLButtonElement | null}\n   */\n  const getCancelButton = () => /** @type {HTMLButtonElement} */elementBySelector(\".\".concat(swalClasses.actions, \" .\").concat(swalClasses.cancel));\n\n  /**\n   * @returns {HTMLButtonElement | null}\n   */\n  const getDenyButton = () => /** @type {HTMLButtonElement} */elementBySelector(\".\".concat(swalClasses.actions, \" .\").concat(swalClasses.deny));\n\n  /**\n   * @returns {HTMLElement | null}\n   */\n  const getInputLabel = () => elementByClass(swalClasses['input-label']);\n\n  /**\n   * @returns {HTMLElement | null}\n   */\n  const getLoader = () => elementBySelector(\".\".concat(swalClasses.loader));\n\n  /**\n   * @returns {HTMLElement | null}\n   */\n  const getActions = () => elementByClass(swalClasses.actions);\n\n  /**\n   * @returns {HTMLElement | null}\n   */\n  const getFooter = () => elementByClass(swalClasses.footer);\n\n  /**\n   * @returns {HTMLElement | null}\n   */\n  const getTimerProgressBar = () => elementByClass(swalClasses['timer-progress-bar']);\n\n  /**\n   * @returns {HTMLElement | null}\n   */\n  const getCloseButton = () => elementByClass(swalClasses.close);\n\n  // https://github.com/jkup/focusable/blob/master/index.js\n  const focusable = \"\\n  a[href],\\n  area[href],\\n  input:not([disabled]),\\n  select:not([disabled]),\\n  textarea:not([disabled]),\\n  button:not([disabled]),\\n  iframe,\\n  object,\\n  embed,\\n  [tabindex=\\\"0\\\"],\\n  [contenteditable],\\n  audio[controls],\\n  video[controls],\\n  summary\\n\";\n  /**\n   * @returns {HTMLElement[]}\n   */\n  const getFocusableElements = () => {\n    const popup = getPopup();\n    if (!popup) {\n      return [];\n    }\n    /** @type {NodeListOf<HTMLElement>} */\n    const focusableElementsWithTabindex = popup.querySelectorAll('[tabindex]:not([tabindex=\"-1\"]):not([tabindex=\"0\"])');\n    const focusableElementsWithTabindexSorted = Array.from(focusableElementsWithTabindex)\n    // sort according to tabindex\n    .sort((a, b) => {\n      const tabindexA = parseInt(a.getAttribute('tabindex') || '0');\n      const tabindexB = parseInt(b.getAttribute('tabindex') || '0');\n      if (tabindexA > tabindexB) {\n        return 1;\n      } else if (tabindexA < tabindexB) {\n        return -1;\n      }\n      return 0;\n    });\n\n    /** @type {NodeListOf<HTMLElement>} */\n    const otherFocusableElements = popup.querySelectorAll(focusable);\n    const otherFocusableElementsFiltered = Array.from(otherFocusableElements).filter(el => el.getAttribute('tabindex') !== '-1');\n    return [...new Set(focusableElementsWithTabindexSorted.concat(otherFocusableElementsFiltered))].filter(el => isVisible$1(el));\n  };\n\n  /**\n   * @returns {boolean}\n   */\n  const isModal = () => {\n    return hasClass(document.body, swalClasses.shown) && !hasClass(document.body, swalClasses['toast-shown']) && !hasClass(document.body, swalClasses['no-backdrop']);\n  };\n\n  /**\n   * @returns {boolean}\n   */\n  const isToast = () => {\n    const popup = getPopup();\n    if (!popup) {\n      return false;\n    }\n    return hasClass(popup, swalClasses.toast);\n  };\n\n  /**\n   * @returns {boolean}\n   */\n  const isLoading = () => {\n    const popup = getPopup();\n    if (!popup) {\n      return false;\n    }\n    return popup.hasAttribute('data-loading');\n  };\n\n  /**\n   * Securely set innerHTML of an element\n   * https://github.com/sweetalert2/sweetalert2/issues/1926\n   *\n   * @param {HTMLElement} elem\n   * @param {string} html\n   */\n  const setInnerHtml = (elem, html) => {\n    elem.textContent = '';\n    if (html) {\n      const parser = new DOMParser();\n      const parsed = parser.parseFromString(html, \"text/html\");\n      const head = parsed.querySelector('head');\n      head && Array.from(head.childNodes).forEach(child => {\n        elem.appendChild(child);\n      });\n      const body = parsed.querySelector('body');\n      body && Array.from(body.childNodes).forEach(child => {\n        if (child instanceof HTMLVideoElement || child instanceof HTMLAudioElement) {\n          elem.appendChild(child.cloneNode(true)); // https://github.com/sweetalert2/sweetalert2/issues/2507\n        } else {\n          elem.appendChild(child);\n        }\n      });\n    }\n  };\n\n  /**\n   * @param {HTMLElement} elem\n   * @param {string} className\n   * @returns {boolean}\n   */\n  const hasClass = (elem, className) => {\n    if (!className) {\n      return false;\n    }\n    const classList = className.split(/\\s+/);\n    for (let i = 0; i < classList.length; i++) {\n      if (!elem.classList.contains(classList[i])) {\n        return false;\n      }\n    }\n    return true;\n  };\n\n  /**\n   * @param {HTMLElement} elem\n   * @param {SweetAlertOptions} params\n   */\n  const removeCustomClasses = (elem, params) => {\n    Array.from(elem.classList).forEach(className => {\n      if (!Object.values(swalClasses).includes(className) && !Object.values(iconTypes).includes(className) && !Object.values(params.showClass || {}).includes(className)) {\n        elem.classList.remove(className);\n      }\n    });\n  };\n\n  /**\n   * @param {HTMLElement} elem\n   * @param {SweetAlertOptions} params\n   * @param {string} className\n   */\n  const applyCustomClass = (elem, params, className) => {\n    removeCustomClasses(elem, params);\n    if (params.customClass && params.customClass[className]) {\n      if (typeof params.customClass[className] !== 'string' && !params.customClass[className].forEach) {\n        warn(\"Invalid type of customClass.\".concat(className, \"! Expected string or iterable object, got \\\"\").concat(typeof params.customClass[className], \"\\\"\"));\n        return;\n      }\n      addClass(elem, params.customClass[className]);\n    }\n  };\n\n  /**\n   * @param {HTMLElement} popup\n   * @param {import('./renderers/renderInput').InputClass | SweetAlertInput} inputClass\n   * @returns {HTMLInputElement | null}\n   */\n  const getInput$1 = (popup, inputClass) => {\n    if (!inputClass) {\n      return null;\n    }\n    switch (inputClass) {\n      case 'select':\n      case 'textarea':\n      case 'file':\n        return popup.querySelector(\".\".concat(swalClasses.popup, \" > .\").concat(swalClasses[inputClass]));\n      case 'checkbox':\n        return popup.querySelector(\".\".concat(swalClasses.popup, \" > .\").concat(swalClasses.checkbox, \" input\"));\n      case 'radio':\n        return popup.querySelector(\".\".concat(swalClasses.popup, \" > .\").concat(swalClasses.radio, \" input:checked\")) || popup.querySelector(\".\".concat(swalClasses.popup, \" > .\").concat(swalClasses.radio, \" input:first-child\"));\n      case 'range':\n        return popup.querySelector(\".\".concat(swalClasses.popup, \" > .\").concat(swalClasses.range, \" input\"));\n      default:\n        return popup.querySelector(\".\".concat(swalClasses.popup, \" > .\").concat(swalClasses.input));\n    }\n  };\n\n  /**\n   * @param {HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement} input\n   */\n  const focusInput = input => {\n    input.focus();\n\n    // place cursor at end of text in text input\n    if (input.type !== 'file') {\n      // http://stackoverflow.com/a/2345915\n      const val = input.value;\n      input.value = '';\n      input.value = val;\n    }\n  };\n\n  /**\n   * @param {HTMLElement | HTMLElement[] | null} target\n   * @param {string | string[] | readonly string[] | undefined} classList\n   * @param {boolean} condition\n   */\n  const toggleClass = (target, classList, condition) => {\n    if (!target || !classList) {\n      return;\n    }\n    if (typeof classList === 'string') {\n      classList = classList.split(/\\s+/).filter(Boolean);\n    }\n    classList.forEach(className => {\n      if (Array.isArray(target)) {\n        target.forEach(elem => {\n          condition ? elem.classList.add(className) : elem.classList.remove(className);\n        });\n      } else {\n        condition ? target.classList.add(className) : target.classList.remove(className);\n      }\n    });\n  };\n\n  /**\n   * @param {HTMLElement | HTMLElement[] | null} target\n   * @param {string | string[] | readonly string[] | undefined} classList\n   */\n  const addClass = (target, classList) => {\n    toggleClass(target, classList, true);\n  };\n\n  /**\n   * @param {HTMLElement | HTMLElement[] | null} target\n   * @param {string | string[] | readonly string[] | undefined} classList\n   */\n  const removeClass = (target, classList) => {\n    toggleClass(target, classList, false);\n  };\n\n  /**\n   * Get direct child of an element by class name\n   *\n   * @param {HTMLElement} elem\n   * @param {string} className\n   * @returns {HTMLElement | undefined}\n   */\n  const getDirectChildByClass = (elem, className) => {\n    const children = Array.from(elem.children);\n    for (let i = 0; i < children.length; i++) {\n      const child = children[i];\n      if (child instanceof HTMLElement && hasClass(child, className)) {\n        return child;\n      }\n    }\n  };\n\n  /**\n   * @param {HTMLElement} elem\n   * @param {string} property\n   * @param {*} value\n   */\n  const applyNumericalStyle = (elem, property, value) => {\n    if (value === \"\".concat(parseInt(value))) {\n      value = parseInt(value);\n    }\n    if (value || parseInt(value) === 0) {\n      elem.style[property] = typeof value === 'number' ? \"\".concat(value, \"px\") : value;\n    } else {\n      elem.style.removeProperty(property);\n    }\n  };\n\n  /**\n   * @param {HTMLElement | null} elem\n   * @param {string} display\n   */\n  const show = function (elem) {\n    let display = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'flex';\n    elem && (elem.style.display = display);\n  };\n\n  /**\n   * @param {HTMLElement | null} elem\n   */\n  const hide = elem => {\n    elem && (elem.style.display = 'none');\n  };\n\n  /**\n   * @param {HTMLElement} parent\n   * @param {string} selector\n   * @param {string} property\n   * @param {string} value\n   */\n  const setStyle = (parent, selector, property, value) => {\n    /** @type {HTMLElement} */\n    const el = parent.querySelector(selector);\n    if (el) {\n      el.style[property] = value;\n    }\n  };\n\n  /**\n   * @param {HTMLElement} elem\n   * @param {any} condition\n   * @param {string} display\n   */\n  const toggle = function (elem, condition) {\n    let display = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'flex';\n    condition ? show(elem, display) : hide(elem);\n  };\n\n  /**\n   * borrowed from jquery $(elem).is(':visible') implementation\n   *\n   * @param {HTMLElement | null} elem\n   * @returns {boolean}\n   */\n  const isVisible$1 = elem => !!(elem && (elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length));\n\n  /**\n   * @returns {boolean}\n   */\n  const allButtonsAreHidden = () => !isVisible$1(getConfirmButton()) && !isVisible$1(getDenyButton()) && !isVisible$1(getCancelButton());\n\n  /**\n   * @param {HTMLElement} elem\n   * @returns {boolean}\n   */\n  const isScrollable = elem => !!(elem.scrollHeight > elem.clientHeight);\n\n  /**\n   * borrowed from https://stackoverflow.com/a/46352119\n   *\n   * @param {HTMLElement} elem\n   * @returns {boolean}\n   */\n  const hasCssAnimation = elem => {\n    const style = window.getComputedStyle(elem);\n    const animDuration = parseFloat(style.getPropertyValue('animation-duration') || '0');\n    const transDuration = parseFloat(style.getPropertyValue('transition-duration') || '0');\n    return animDuration > 0 || transDuration > 0;\n  };\n\n  /**\n   * @param {number} timer\n   * @param {boolean} reset\n   */\n  const animateTimerProgressBar = function (timer) {\n    let reset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n    const timerProgressBar = getTimerProgressBar();\n    if (!timerProgressBar) {\n      return;\n    }\n    if (isVisible$1(timerProgressBar)) {\n      if (reset) {\n        timerProgressBar.style.transition = 'none';\n        timerProgressBar.style.width = '100%';\n      }\n      setTimeout(() => {\n        timerProgressBar.style.transition = \"width \".concat(timer / 1000, \"s linear\");\n        timerProgressBar.style.width = '0%';\n      }, 10);\n    }\n  };\n  const stopTimerProgressBar = () => {\n    const timerProgressBar = getTimerProgressBar();\n    if (!timerProgressBar) {\n      return;\n    }\n    const timerProgressBarWidth = parseInt(window.getComputedStyle(timerProgressBar).width);\n    timerProgressBar.style.removeProperty('transition');\n    timerProgressBar.style.width = '100%';\n    const timerProgressBarFullWidth = parseInt(window.getComputedStyle(timerProgressBar).width);\n    const timerProgressBarPercent = timerProgressBarWidth / timerProgressBarFullWidth * 100;\n    timerProgressBar.style.width = \"\".concat(timerProgressBarPercent, \"%\");\n  };\n\n  /**\n   * Detect Node env\n   *\n   * @returns {boolean}\n   */\n  const isNodeEnv = () => typeof window === 'undefined' || typeof document === 'undefined';\n\n  const sweetHTML = \"\\n <div aria-labelledby=\\\"\".concat(swalClasses.title, \"\\\" aria-describedby=\\\"\").concat(swalClasses['html-container'], \"\\\" class=\\\"\").concat(swalClasses.popup, \"\\\" tabindex=\\\"-1\\\">\\n   <button type=\\\"button\\\" class=\\\"\").concat(swalClasses.close, \"\\\"></button>\\n   <ul class=\\\"\").concat(swalClasses['progress-steps'], \"\\\"></ul>\\n   <div class=\\\"\").concat(swalClasses.icon, \"\\\"></div>\\n   <img class=\\\"\").concat(swalClasses.image, \"\\\" />\\n   <h2 class=\\\"\").concat(swalClasses.title, \"\\\" id=\\\"\").concat(swalClasses.title, \"\\\"></h2>\\n   <div class=\\\"\").concat(swalClasses['html-container'], \"\\\" id=\\\"\").concat(swalClasses['html-container'], \"\\\"></div>\\n   <input class=\\\"\").concat(swalClasses.input, \"\\\" id=\\\"\").concat(swalClasses.input, \"\\\" />\\n   <input type=\\\"file\\\" class=\\\"\").concat(swalClasses.file, \"\\\" />\\n   <div class=\\\"\").concat(swalClasses.range, \"\\\">\\n     <input type=\\\"range\\\" />\\n     <output></output>\\n   </div>\\n   <select class=\\\"\").concat(swalClasses.select, \"\\\" id=\\\"\").concat(swalClasses.select, \"\\\"></select>\\n   <div class=\\\"\").concat(swalClasses.radio, \"\\\"></div>\\n   <label class=\\\"\").concat(swalClasses.checkbox, \"\\\">\\n     <input type=\\\"checkbox\\\" id=\\\"\").concat(swalClasses.checkbox, \"\\\" />\\n     <span class=\\\"\").concat(swalClasses.label, \"\\\"></span>\\n   </label>\\n   <textarea class=\\\"\").concat(swalClasses.textarea, \"\\\" id=\\\"\").concat(swalClasses.textarea, \"\\\"></textarea>\\n   <div class=\\\"\").concat(swalClasses['validation-message'], \"\\\" id=\\\"\").concat(swalClasses['validation-message'], \"\\\"></div>\\n   <div class=\\\"\").concat(swalClasses.actions, \"\\\">\\n     <div class=\\\"\").concat(swalClasses.loader, \"\\\"></div>\\n     <button type=\\\"button\\\" class=\\\"\").concat(swalClasses.confirm, \"\\\"></button>\\n     <button type=\\\"button\\\" class=\\\"\").concat(swalClasses.deny, \"\\\"></button>\\n     <button type=\\\"button\\\" class=\\\"\").concat(swalClasses.cancel, \"\\\"></button>\\n   </div>\\n   <div class=\\\"\").concat(swalClasses.footer, \"\\\"></div>\\n   <div class=\\\"\").concat(swalClasses['timer-progress-bar-container'], \"\\\">\\n     <div class=\\\"\").concat(swalClasses['timer-progress-bar'], \"\\\"></div>\\n   </div>\\n </div>\\n\").replace(/(^|\\n)\\s*/g, '');\n\n  /**\n   * @returns {boolean}\n   */\n  const resetOldContainer = () => {\n    const oldContainer = getContainer();\n    if (!oldContainer) {\n      return false;\n    }\n    oldContainer.remove();\n    removeClass([document.documentElement, document.body], [swalClasses['no-backdrop'], swalClasses['toast-shown'], swalClasses['has-column']]);\n    return true;\n  };\n  const resetValidationMessage$1 = () => {\n    globalState.currentInstance.resetValidationMessage();\n  };\n  const addInputChangeListeners = () => {\n    const popup = getPopup();\n    const input = getDirectChildByClass(popup, swalClasses.input);\n    const file = getDirectChildByClass(popup, swalClasses.file);\n    /** @type {HTMLInputElement} */\n    const range = popup.querySelector(\".\".concat(swalClasses.range, \" input\"));\n    /** @type {HTMLOutputElement} */\n    const rangeOutput = popup.querySelector(\".\".concat(swalClasses.range, \" output\"));\n    const select = getDirectChildByClass(popup, swalClasses.select);\n    /** @type {HTMLInputElement} */\n    const checkbox = popup.querySelector(\".\".concat(swalClasses.checkbox, \" input\"));\n    const textarea = getDirectChildByClass(popup, swalClasses.textarea);\n    input.oninput = resetValidationMessage$1;\n    file.onchange = resetValidationMessage$1;\n    select.onchange = resetValidationMessage$1;\n    checkbox.onchange = resetValidationMessage$1;\n    textarea.oninput = resetValidationMessage$1;\n    range.oninput = () => {\n      resetValidationMessage$1();\n      rangeOutput.value = range.value;\n    };\n    range.onchange = () => {\n      resetValidationMessage$1();\n      rangeOutput.value = range.value;\n    };\n  };\n\n  /**\n   * @param {string | HTMLElement} target\n   * @returns {HTMLElement}\n   */\n  const getTarget = target => typeof target === 'string' ? document.querySelector(target) : target;\n\n  /**\n   * @param {SweetAlertOptions} params\n   */\n  const setupAccessibility = params => {\n    const popup = getPopup();\n    popup.setAttribute('role', params.toast ? 'alert' : 'dialog');\n    popup.setAttribute('aria-live', params.toast ? 'polite' : 'assertive');\n    if (!params.toast) {\n      popup.setAttribute('aria-modal', 'true');\n    }\n  };\n\n  /**\n   * @param {HTMLElement} targetElement\n   */\n  const setupRTL = targetElement => {\n    if (window.getComputedStyle(targetElement).direction === 'rtl') {\n      addClass(getContainer(), swalClasses.rtl);\n    }\n  };\n\n  /**\n   * Add modal + backdrop + no-war message for Russians to DOM\n   *\n   * @param {SweetAlertOptions} params\n   */\n  const init = params => {\n    // Clean up the old popup container if it exists\n    const oldContainerExisted = resetOldContainer();\n    if (isNodeEnv()) {\n      error('SweetAlert2 requires document to initialize');\n      return;\n    }\n    const container = document.createElement('div');\n    container.className = swalClasses.container;\n    if (oldContainerExisted) {\n      addClass(container, swalClasses['no-transition']);\n    }\n    setInnerHtml(container, sweetHTML);\n    const targetElement = getTarget(params.target);\n    targetElement.appendChild(container);\n    setupAccessibility(params);\n    setupRTL(targetElement);\n    addInputChangeListeners();\n  };\n\n  /**\n   * @param {HTMLElement | object | string} param\n   * @param {HTMLElement} target\n   */\n  const parseHtmlToContainer = (param, target) => {\n    // DOM element\n    if (param instanceof HTMLElement) {\n      target.appendChild(param);\n    }\n\n    // Object\n    else if (typeof param === 'object') {\n      handleObject(param, target);\n    }\n\n    // Plain string\n    else if (param) {\n      setInnerHtml(target, param);\n    }\n  };\n\n  /**\n   * @param {any} param\n   * @param {HTMLElement} target\n   */\n  const handleObject = (param, target) => {\n    // JQuery element(s)\n    if (param.jquery) {\n      handleJqueryElem(target, param);\n    }\n\n    // For other objects use their string representation\n    else {\n      setInnerHtml(target, param.toString());\n    }\n  };\n\n  /**\n   * @param {HTMLElement} target\n   * @param {any} elem\n   */\n  const handleJqueryElem = (target, elem) => {\n    target.textContent = '';\n    if (0 in elem) {\n      for (let i = 0; (i in elem); i++) {\n        target.appendChild(elem[i].cloneNode(true));\n      }\n    } else {\n      target.appendChild(elem.cloneNode(true));\n    }\n  };\n\n  /**\n   * @returns {'webkitAnimationEnd' | 'animationend' | false}\n   */\n  const animationEndEvent = (() => {\n    // Prevent run in Node env\n    if (isNodeEnv()) {\n      return false;\n    }\n    const testEl = document.createElement('div');\n\n    // Chrome, Safari and Opera\n    if (typeof testEl.style.webkitAnimation !== 'undefined') {\n      return 'webkitAnimationEnd';\n    }\n\n    // Standard syntax\n    if (typeof testEl.style.animation !== 'undefined') {\n      return 'animationend';\n    }\n    return false;\n  })();\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {SweetAlertOptions} params\n   */\n  const renderActions = (instance, params) => {\n    const actions = getActions();\n    const loader = getLoader();\n    if (!actions || !loader) {\n      return;\n    }\n\n    // Actions (buttons) wrapper\n    if (!params.showConfirmButton && !params.showDenyButton && !params.showCancelButton) {\n      hide(actions);\n    } else {\n      show(actions);\n    }\n\n    // Custom class\n    applyCustomClass(actions, params, 'actions');\n\n    // Render all the buttons\n    renderButtons(actions, loader, params);\n\n    // Loader\n    setInnerHtml(loader, params.loaderHtml || '');\n    applyCustomClass(loader, params, 'loader');\n  };\n\n  /**\n   * @param {HTMLElement} actions\n   * @param {HTMLElement} loader\n   * @param {SweetAlertOptions} params\n   */\n  function renderButtons(actions, loader, params) {\n    const confirmButton = getConfirmButton();\n    const denyButton = getDenyButton();\n    const cancelButton = getCancelButton();\n    if (!confirmButton || !denyButton || !cancelButton) {\n      return;\n    }\n\n    // Render buttons\n    renderButton(confirmButton, 'confirm', params);\n    renderButton(denyButton, 'deny', params);\n    renderButton(cancelButton, 'cancel', params);\n    handleButtonsStyling(confirmButton, denyButton, cancelButton, params);\n    if (params.reverseButtons) {\n      if (params.toast) {\n        actions.insertBefore(cancelButton, confirmButton);\n        actions.insertBefore(denyButton, confirmButton);\n      } else {\n        actions.insertBefore(cancelButton, loader);\n        actions.insertBefore(denyButton, loader);\n        actions.insertBefore(confirmButton, loader);\n      }\n    }\n  }\n\n  /**\n   * @param {HTMLElement} confirmButton\n   * @param {HTMLElement} denyButton\n   * @param {HTMLElement} cancelButton\n   * @param {SweetAlertOptions} params\n   */\n  function handleButtonsStyling(confirmButton, denyButton, cancelButton, params) {\n    if (!params.buttonsStyling) {\n      removeClass([confirmButton, denyButton, cancelButton], swalClasses.styled);\n      return;\n    }\n    addClass([confirmButton, denyButton, cancelButton], swalClasses.styled);\n\n    // Buttons background colors\n    if (params.confirmButtonColor) {\n      confirmButton.style.backgroundColor = params.confirmButtonColor;\n      addClass(confirmButton, swalClasses['default-outline']);\n    }\n    if (params.denyButtonColor) {\n      denyButton.style.backgroundColor = params.denyButtonColor;\n      addClass(denyButton, swalClasses['default-outline']);\n    }\n    if (params.cancelButtonColor) {\n      cancelButton.style.backgroundColor = params.cancelButtonColor;\n      addClass(cancelButton, swalClasses['default-outline']);\n    }\n  }\n\n  /**\n   * @param {HTMLElement} button\n   * @param {'confirm' | 'deny' | 'cancel'} buttonType\n   * @param {SweetAlertOptions} params\n   */\n  function renderButton(button, buttonType, params) {\n    const buttonName = /** @type {'Confirm' | 'Deny' | 'Cancel'} */capitalizeFirstLetter(buttonType);\n    toggle(button, params[\"show\".concat(buttonName, \"Button\")], 'inline-block');\n    setInnerHtml(button, params[\"\".concat(buttonType, \"ButtonText\")] || ''); // Set caption text\n    button.setAttribute('aria-label', params[\"\".concat(buttonType, \"ButtonAriaLabel\")] || ''); // ARIA label\n\n    // Add buttons custom classes\n    button.className = swalClasses[buttonType];\n    applyCustomClass(button, params, \"\".concat(buttonType, \"Button\"));\n  }\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {SweetAlertOptions} params\n   */\n  const renderCloseButton = (instance, params) => {\n    const closeButton = getCloseButton();\n    if (!closeButton) {\n      return;\n    }\n    setInnerHtml(closeButton, params.closeButtonHtml || '');\n\n    // Custom class\n    applyCustomClass(closeButton, params, 'closeButton');\n    toggle(closeButton, params.showCloseButton);\n    closeButton.setAttribute('aria-label', params.closeButtonAriaLabel || '');\n  };\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {SweetAlertOptions} params\n   */\n  const renderContainer = (instance, params) => {\n    const container = getContainer();\n    if (!container) {\n      return;\n    }\n    handleBackdropParam(container, params.backdrop);\n    handlePositionParam(container, params.position);\n    handleGrowParam(container, params.grow);\n\n    // Custom class\n    applyCustomClass(container, params, 'container');\n  };\n\n  /**\n   * @param {HTMLElement} container\n   * @param {SweetAlertOptions['backdrop']} backdrop\n   */\n  function handleBackdropParam(container, backdrop) {\n    if (typeof backdrop === 'string') {\n      container.style.background = backdrop;\n    } else if (!backdrop) {\n      addClass([document.documentElement, document.body], swalClasses['no-backdrop']);\n    }\n  }\n\n  /**\n   * @param {HTMLElement} container\n   * @param {SweetAlertOptions['position']} position\n   */\n  function handlePositionParam(container, position) {\n    if (!position) {\n      return;\n    }\n    if (position in swalClasses) {\n      addClass(container, swalClasses[position]);\n    } else {\n      warn('The \"position\" parameter is not valid, defaulting to \"center\"');\n      addClass(container, swalClasses.center);\n    }\n  }\n\n  /**\n   * @param {HTMLElement} container\n   * @param {SweetAlertOptions['grow']} grow\n   */\n  function handleGrowParam(container, grow) {\n    if (!grow) {\n      return;\n    }\n    addClass(container, swalClasses[\"grow-\".concat(grow)]);\n  }\n\n  /**\n   * This module contains `WeakMap`s for each effectively-\"private  property\" that a `Swal` has.\n   * For example, to set the private property \"foo\" of `this` to \"bar\", you can `privateProps.foo.set(this, 'bar')`\n   * This is the approach that Babel will probably take to implement private methods/fields\n   *   https://github.com/tc39/proposal-private-methods\n   *   https://github.com/babel/babel/pull/7555\n   * Once we have the changes from that PR in Babel, and our core class fits reasonable in *one module*\n   *   then we can use that language feature.\n   */\n\n  var privateProps = {\n    innerParams: new WeakMap(),\n    domCache: new WeakMap()\n  };\n\n  /// <reference path=\"../../../../sweetalert2.d.ts\"/>\n\n\n  /** @type {InputClass[]} */\n  const inputClasses = ['input', 'file', 'range', 'select', 'radio', 'checkbox', 'textarea'];\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {SweetAlertOptions} params\n   */\n  const renderInput = (instance, params) => {\n    const popup = getPopup();\n    if (!popup) {\n      return;\n    }\n    const innerParams = privateProps.innerParams.get(instance);\n    const rerender = !innerParams || params.input !== innerParams.input;\n    inputClasses.forEach(inputClass => {\n      const inputContainer = getDirectChildByClass(popup, swalClasses[inputClass]);\n      if (!inputContainer) {\n        return;\n      }\n\n      // set attributes\n      setAttributes(inputClass, params.inputAttributes);\n\n      // set class\n      inputContainer.className = swalClasses[inputClass];\n      if (rerender) {\n        hide(inputContainer);\n      }\n    });\n    if (params.input) {\n      if (rerender) {\n        showInput(params);\n      }\n      // set custom class\n      setCustomClass(params);\n    }\n  };\n\n  /**\n   * @param {SweetAlertOptions} params\n   */\n  const showInput = params => {\n    if (!params.input) {\n      return;\n    }\n    if (!renderInputType[params.input]) {\n      error(\"Unexpected type of input! Expected \\\"text\\\", \\\"email\\\", \\\"password\\\", \\\"number\\\", \\\"tel\\\", \\\"select\\\", \\\"radio\\\", \\\"checkbox\\\", \\\"textarea\\\", \\\"file\\\" or \\\"url\\\", got \\\"\".concat(params.input, \"\\\"\"));\n      return;\n    }\n    const inputContainer = getInputContainer(params.input);\n    const input = renderInputType[params.input](inputContainer, params);\n    show(inputContainer);\n\n    // input autofocus\n    if (params.inputAutoFocus) {\n      setTimeout(() => {\n        focusInput(input);\n      });\n    }\n  };\n\n  /**\n   * @param {HTMLInputElement} input\n   */\n  const removeAttributes = input => {\n    for (let i = 0; i < input.attributes.length; i++) {\n      const attrName = input.attributes[i].name;\n      if (!['id', 'type', 'value', 'style'].includes(attrName)) {\n        input.removeAttribute(attrName);\n      }\n    }\n  };\n\n  /**\n   * @param {InputClass} inputClass\n   * @param {SweetAlertOptions['inputAttributes']} inputAttributes\n   */\n  const setAttributes = (inputClass, inputAttributes) => {\n    const input = getInput$1(getPopup(), inputClass);\n    if (!input) {\n      return;\n    }\n    removeAttributes(input);\n    for (const attr in inputAttributes) {\n      input.setAttribute(attr, inputAttributes[attr]);\n    }\n  };\n\n  /**\n   * @param {SweetAlertOptions} params\n   */\n  const setCustomClass = params => {\n    const inputContainer = getInputContainer(params.input);\n    if (typeof params.customClass === 'object') {\n      addClass(inputContainer, params.customClass.input);\n    }\n  };\n\n  /**\n   * @param {HTMLInputElement | HTMLTextAreaElement} input\n   * @param {SweetAlertOptions} params\n   */\n  const setInputPlaceholder = (input, params) => {\n    if (!input.placeholder || params.inputPlaceholder) {\n      input.placeholder = params.inputPlaceholder;\n    }\n  };\n\n  /**\n   * @param {Input} input\n   * @param {Input} prependTo\n   * @param {SweetAlertOptions} params\n   */\n  const setInputLabel = (input, prependTo, params) => {\n    if (params.inputLabel) {\n      const label = document.createElement('label');\n      const labelClass = swalClasses['input-label'];\n      label.setAttribute('for', input.id);\n      label.className = labelClass;\n      if (typeof params.customClass === 'object') {\n        addClass(label, params.customClass.inputLabel);\n      }\n      label.innerText = params.inputLabel;\n      prependTo.insertAdjacentElement('beforebegin', label);\n    }\n  };\n\n  /**\n   * @param {SweetAlertOptions['input']} inputType\n   * @returns {HTMLElement}\n   */\n  const getInputContainer = inputType => {\n    return getDirectChildByClass(getPopup(), swalClasses[inputType] || swalClasses.input);\n  };\n\n  /**\n   * @param {HTMLInputElement | HTMLOutputElement | HTMLTextAreaElement} input\n   * @param {SweetAlertOptions['inputValue']} inputValue\n   */\n  const checkAndSetInputValue = (input, inputValue) => {\n    if (['string', 'number'].includes(typeof inputValue)) {\n      input.value = \"\".concat(inputValue);\n    } else if (!isPromise(inputValue)) {\n      warn(\"Unexpected type of inputValue! Expected \\\"string\\\", \\\"number\\\" or \\\"Promise\\\", got \\\"\".concat(typeof inputValue, \"\\\"\"));\n    }\n  };\n\n  /** @type {Record<SweetAlertInput, (input: Input | HTMLElement, params: SweetAlertOptions) => Input>} */\n  const renderInputType = {};\n\n  /**\n   * @param {HTMLInputElement} input\n   * @param {SweetAlertOptions} params\n   * @returns {HTMLInputElement}\n   */\n  renderInputType.text = renderInputType.email = renderInputType.password = renderInputType.number = renderInputType.tel = renderInputType.url = (input, params) => {\n    checkAndSetInputValue(input, params.inputValue);\n    setInputLabel(input, input, params);\n    setInputPlaceholder(input, params);\n    input.type = params.input;\n    return input;\n  };\n\n  /**\n   * @param {HTMLInputElement} input\n   * @param {SweetAlertOptions} params\n   * @returns {HTMLInputElement}\n   */\n  renderInputType.file = (input, params) => {\n    setInputLabel(input, input, params);\n    setInputPlaceholder(input, params);\n    return input;\n  };\n\n  /**\n   * @param {HTMLInputElement} range\n   * @param {SweetAlertOptions} params\n   * @returns {HTMLInputElement}\n   */\n  renderInputType.range = (range, params) => {\n    const rangeInput = range.querySelector('input');\n    const rangeOutput = range.querySelector('output');\n    checkAndSetInputValue(rangeInput, params.inputValue);\n    rangeInput.type = params.input;\n    checkAndSetInputValue(rangeOutput, params.inputValue);\n    setInputLabel(rangeInput, range, params);\n    return range;\n  };\n\n  /**\n   * @param {HTMLSelectElement} select\n   * @param {SweetAlertOptions} params\n   * @returns {HTMLSelectElement}\n   */\n  renderInputType.select = (select, params) => {\n    select.textContent = '';\n    if (params.inputPlaceholder) {\n      const placeholder = document.createElement('option');\n      setInnerHtml(placeholder, params.inputPlaceholder);\n      placeholder.value = '';\n      placeholder.disabled = true;\n      placeholder.selected = true;\n      select.appendChild(placeholder);\n    }\n    setInputLabel(select, select, params);\n    return select;\n  };\n\n  /**\n   * @param {HTMLInputElement} radio\n   * @returns {HTMLInputElement}\n   */\n  renderInputType.radio = radio => {\n    radio.textContent = '';\n    return radio;\n  };\n\n  /**\n   * @param {HTMLLabelElement} checkboxContainer\n   * @param {SweetAlertOptions} params\n   * @returns {HTMLInputElement}\n   */\n  renderInputType.checkbox = (checkboxContainer, params) => {\n    const checkbox = getInput$1(getPopup(), 'checkbox');\n    checkbox.value = '1';\n    checkbox.checked = Boolean(params.inputValue);\n    const label = checkboxContainer.querySelector('span');\n    setInnerHtml(label, params.inputPlaceholder);\n    return checkbox;\n  };\n\n  /**\n   * @param {HTMLTextAreaElement} textarea\n   * @param {SweetAlertOptions} params\n   * @returns {HTMLTextAreaElement}\n   */\n  renderInputType.textarea = (textarea, params) => {\n    checkAndSetInputValue(textarea, params.inputValue);\n    setInputPlaceholder(textarea, params);\n    setInputLabel(textarea, textarea, params);\n\n    /**\n     * @param {HTMLElement} el\n     * @returns {number}\n     */\n    const getMargin = el => parseInt(window.getComputedStyle(el).marginLeft) + parseInt(window.getComputedStyle(el).marginRight);\n\n    // https://github.com/sweetalert2/sweetalert2/issues/2291\n    setTimeout(() => {\n      // https://github.com/sweetalert2/sweetalert2/issues/1699\n      if ('MutationObserver' in window) {\n        const initialPopupWidth = parseInt(window.getComputedStyle(getPopup()).width);\n        const textareaResizeHandler = () => {\n          // check if texarea is still in document (i.e. popup wasn't closed in the meantime)\n          if (!document.body.contains(textarea)) {\n            return;\n          }\n          const textareaWidth = textarea.offsetWidth + getMargin(textarea);\n          if (textareaWidth > initialPopupWidth) {\n            getPopup().style.width = \"\".concat(textareaWidth, \"px\");\n          } else {\n            applyNumericalStyle(getPopup(), 'width', params.width);\n          }\n        };\n        new MutationObserver(textareaResizeHandler).observe(textarea, {\n          attributes: true,\n          attributeFilter: ['style']\n        });\n      }\n    });\n    return textarea;\n  };\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {SweetAlertOptions} params\n   */\n  const renderContent = (instance, params) => {\n    const htmlContainer = getHtmlContainer();\n    if (!htmlContainer) {\n      return;\n    }\n    applyCustomClass(htmlContainer, params, 'htmlContainer');\n\n    // Content as HTML\n    if (params.html) {\n      parseHtmlToContainer(params.html, htmlContainer);\n      show(htmlContainer, 'block');\n    }\n\n    // Content as plain text\n    else if (params.text) {\n      htmlContainer.textContent = params.text;\n      show(htmlContainer, 'block');\n    }\n\n    // No content\n    else {\n      hide(htmlContainer);\n    }\n    renderInput(instance, params);\n  };\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {SweetAlertOptions} params\n   */\n  const renderFooter = (instance, params) => {\n    const footer = getFooter();\n    if (!footer) {\n      return;\n    }\n    toggle(footer, params.footer, 'block');\n    if (params.footer) {\n      parseHtmlToContainer(params.footer, footer);\n    }\n\n    // Custom class\n    applyCustomClass(footer, params, 'footer');\n  };\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {SweetAlertOptions} params\n   */\n  const renderIcon = (instance, params) => {\n    const innerParams = privateProps.innerParams.get(instance);\n    const icon = getIcon();\n    if (!icon) {\n      return;\n    }\n\n    // if the given icon already rendered, apply the styling without re-rendering the icon\n    if (innerParams && params.icon === innerParams.icon) {\n      // Custom or default content\n      setContent(icon, params);\n      applyStyles(icon, params);\n      return;\n    }\n    if (!params.icon && !params.iconHtml) {\n      hide(icon);\n      return;\n    }\n    if (params.icon && Object.keys(iconTypes).indexOf(params.icon) === -1) {\n      error(\"Unknown icon! Expected \\\"success\\\", \\\"error\\\", \\\"warning\\\", \\\"info\\\" or \\\"question\\\", got \\\"\".concat(params.icon, \"\\\"\"));\n      hide(icon);\n      return;\n    }\n    show(icon);\n\n    // Custom or default content\n    setContent(icon, params);\n    applyStyles(icon, params);\n\n    // Animate icon\n    addClass(icon, params.showClass && params.showClass.icon);\n  };\n\n  /**\n   * @param {HTMLElement} icon\n   * @param {SweetAlertOptions} params\n   */\n  const applyStyles = (icon, params) => {\n    for (const [iconType, iconClassName] of Object.entries(iconTypes)) {\n      if (params.icon !== iconType) {\n        removeClass(icon, iconClassName);\n      }\n    }\n    addClass(icon, params.icon && iconTypes[params.icon]);\n\n    // Icon color\n    setColor(icon, params);\n\n    // Success icon background color\n    adjustSuccessIconBackgroundColor();\n\n    // Custom class\n    applyCustomClass(icon, params, 'icon');\n  };\n\n  // Adjust success icon background color to match the popup background color\n  const adjustSuccessIconBackgroundColor = () => {\n    const popup = getPopup();\n    if (!popup) {\n      return;\n    }\n    const popupBackgroundColor = window.getComputedStyle(popup).getPropertyValue('background-color');\n    /** @type {NodeListOf<HTMLElement>} */\n    const successIconParts = popup.querySelectorAll('[class^=swal2-success-circular-line], .swal2-success-fix');\n    for (let i = 0; i < successIconParts.length; i++) {\n      successIconParts[i].style.backgroundColor = popupBackgroundColor;\n    }\n  };\n  const successIconHtml = \"\\n  <div class=\\\"swal2-success-circular-line-left\\\"></div>\\n  <span class=\\\"swal2-success-line-tip\\\"></span> <span class=\\\"swal2-success-line-long\\\"></span>\\n  <div class=\\\"swal2-success-ring\\\"></div> <div class=\\\"swal2-success-fix\\\"></div>\\n  <div class=\\\"swal2-success-circular-line-right\\\"></div>\\n\";\n  const errorIconHtml = \"\\n  <span class=\\\"swal2-x-mark\\\">\\n    <span class=\\\"swal2-x-mark-line-left\\\"></span>\\n    <span class=\\\"swal2-x-mark-line-right\\\"></span>\\n  </span>\\n\";\n\n  /**\n   * @param {HTMLElement} icon\n   * @param {SweetAlertOptions} params\n   */\n  const setContent = (icon, params) => {\n    if (!params.icon && !params.iconHtml) {\n      return;\n    }\n    let oldContent = icon.innerHTML;\n    let newContent = '';\n    if (params.iconHtml) {\n      newContent = iconContent(params.iconHtml);\n    } else if (params.icon === 'success') {\n      newContent = successIconHtml;\n      oldContent = oldContent.replace(/ style=\".*?\"/g, ''); // undo adjustSuccessIconBackgroundColor()\n    } else if (params.icon === 'error') {\n      newContent = errorIconHtml;\n    } else if (params.icon) {\n      const defaultIconHtml = {\n        question: '?',\n        warning: '!',\n        info: 'i'\n      };\n      newContent = iconContent(defaultIconHtml[params.icon]);\n    }\n    if (oldContent.trim() !== newContent.trim()) {\n      setInnerHtml(icon, newContent);\n    }\n  };\n\n  /**\n   * @param {HTMLElement} icon\n   * @param {SweetAlertOptions} params\n   */\n  const setColor = (icon, params) => {\n    if (!params.iconColor) {\n      return;\n    }\n    icon.style.color = params.iconColor;\n    icon.style.borderColor = params.iconColor;\n    for (const sel of ['.swal2-success-line-tip', '.swal2-success-line-long', '.swal2-x-mark-line-left', '.swal2-x-mark-line-right']) {\n      setStyle(icon, sel, 'backgroundColor', params.iconColor);\n    }\n    setStyle(icon, '.swal2-success-ring', 'borderColor', params.iconColor);\n  };\n\n  /**\n   * @param {string} content\n   * @returns {string}\n   */\n  const iconContent = content => \"<div class=\\\"\".concat(swalClasses['icon-content'], \"\\\">\").concat(content, \"</div>\");\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {SweetAlertOptions} params\n   */\n  const renderImage = (instance, params) => {\n    const image = getImage();\n    if (!image) {\n      return;\n    }\n    if (!params.imageUrl) {\n      hide(image);\n      return;\n    }\n    show(image, '');\n\n    // Src, alt\n    image.setAttribute('src', params.imageUrl);\n    image.setAttribute('alt', params.imageAlt || '');\n\n    // Width, height\n    applyNumericalStyle(image, 'width', params.imageWidth);\n    applyNumericalStyle(image, 'height', params.imageHeight);\n\n    // Class\n    image.className = swalClasses.image;\n    applyCustomClass(image, params, 'image');\n  };\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {SweetAlertOptions} params\n   */\n  const renderPopup = (instance, params) => {\n    const container = getContainer();\n    const popup = getPopup();\n    if (!container || !popup) {\n      return;\n    }\n\n    // Width\n    // https://github.com/sweetalert2/sweetalert2/issues/2170\n    if (params.toast) {\n      applyNumericalStyle(container, 'width', params.width);\n      popup.style.width = '100%';\n      const loader = getLoader();\n      loader && popup.insertBefore(loader, getIcon());\n    } else {\n      applyNumericalStyle(popup, 'width', params.width);\n    }\n\n    // Padding\n    applyNumericalStyle(popup, 'padding', params.padding);\n\n    // Color\n    if (params.color) {\n      popup.style.color = params.color;\n    }\n\n    // Background\n    if (params.background) {\n      popup.style.background = params.background;\n    }\n    hide(getValidationMessage());\n\n    // Classes\n    addClasses$1(popup, params);\n  };\n\n  /**\n   * @param {HTMLElement} popup\n   * @param {SweetAlertOptions} params\n   */\n  const addClasses$1 = (popup, params) => {\n    const showClass = params.showClass || {};\n    // Default Class + showClass when updating Swal.update({})\n    popup.className = \"\".concat(swalClasses.popup, \" \").concat(isVisible$1(popup) ? showClass.popup : '');\n    if (params.toast) {\n      addClass([document.documentElement, document.body], swalClasses['toast-shown']);\n      addClass(popup, swalClasses.toast);\n    } else {\n      addClass(popup, swalClasses.modal);\n    }\n\n    // Custom class\n    applyCustomClass(popup, params, 'popup');\n    if (typeof params.customClass === 'string') {\n      addClass(popup, params.customClass);\n    }\n\n    // Icon class (#1842)\n    if (params.icon) {\n      addClass(popup, swalClasses[\"icon-\".concat(params.icon)]);\n    }\n  };\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {SweetAlertOptions} params\n   */\n  const renderProgressSteps = (instance, params) => {\n    const progressStepsContainer = getProgressSteps();\n    if (!progressStepsContainer) {\n      return;\n    }\n    const {\n      progressSteps,\n      currentProgressStep\n    } = params;\n    if (!progressSteps || progressSteps.length === 0 || currentProgressStep === undefined) {\n      hide(progressStepsContainer);\n      return;\n    }\n    show(progressStepsContainer);\n    progressStepsContainer.textContent = '';\n    if (currentProgressStep >= progressSteps.length) {\n      warn('Invalid currentProgressStep parameter, it should be less than progressSteps.length ' + '(currentProgressStep like JS arrays starts from 0)');\n    }\n    progressSteps.forEach((step, index) => {\n      const stepEl = createStepElement(step);\n      progressStepsContainer.appendChild(stepEl);\n      if (index === currentProgressStep) {\n        addClass(stepEl, swalClasses['active-progress-step']);\n      }\n      if (index !== progressSteps.length - 1) {\n        const lineEl = createLineElement(params);\n        progressStepsContainer.appendChild(lineEl);\n      }\n    });\n  };\n\n  /**\n   * @param {string} step\n   * @returns {HTMLLIElement}\n   */\n  const createStepElement = step => {\n    const stepEl = document.createElement('li');\n    addClass(stepEl, swalClasses['progress-step']);\n    setInnerHtml(stepEl, step);\n    return stepEl;\n  };\n\n  /**\n   * @param {SweetAlertOptions} params\n   * @returns {HTMLLIElement}\n   */\n  const createLineElement = params => {\n    const lineEl = document.createElement('li');\n    addClass(lineEl, swalClasses['progress-step-line']);\n    if (params.progressStepsDistance) {\n      applyNumericalStyle(lineEl, 'width', params.progressStepsDistance);\n    }\n    return lineEl;\n  };\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {SweetAlertOptions} params\n   */\n  const renderTitle = (instance, params) => {\n    const title = getTitle();\n    if (!title) {\n      return;\n    }\n    toggle(title, params.title || params.titleText, 'block');\n    if (params.title) {\n      parseHtmlToContainer(params.title, title);\n    }\n    if (params.titleText) {\n      title.innerText = params.titleText;\n    }\n\n    // Custom class\n    applyCustomClass(title, params, 'title');\n  };\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {SweetAlertOptions} params\n   */\n  const render = (instance, params) => {\n    renderPopup(instance, params);\n    renderContainer(instance, params);\n    renderProgressSteps(instance, params);\n    renderIcon(instance, params);\n    renderImage(instance, params);\n    renderTitle(instance, params);\n    renderCloseButton(instance, params);\n    renderContent(instance, params);\n    renderActions(instance, params);\n    renderFooter(instance, params);\n    const popup = getPopup();\n    if (typeof params.didRender === 'function' && popup) {\n      params.didRender(popup);\n    }\n  };\n\n  /*\n   * Global function to determine if SweetAlert2 popup is shown\n   */\n  const isVisible = () => {\n    return isVisible$1(getPopup());\n  };\n\n  /*\n   * Global function to click 'Confirm' button\n   */\n  const clickConfirm = () => {\n    var _dom$getConfirmButton;\n    return (_dom$getConfirmButton = getConfirmButton()) === null || _dom$getConfirmButton === void 0 ? void 0 : _dom$getConfirmButton.click();\n  };\n\n  /*\n   * Global function to click 'Deny' button\n   */\n  const clickDeny = () => {\n    var _dom$getDenyButton;\n    return (_dom$getDenyButton = getDenyButton()) === null || _dom$getDenyButton === void 0 ? void 0 : _dom$getDenyButton.click();\n  };\n\n  /*\n   * Global function to click 'Cancel' button\n   */\n  const clickCancel = () => {\n    var _dom$getCancelButton;\n    return (_dom$getCancelButton = getCancelButton()) === null || _dom$getCancelButton === void 0 ? void 0 : _dom$getCancelButton.click();\n  };\n\n  /** @typedef {'cancel' | 'backdrop' | 'close' | 'esc' | 'timer'} DismissReason */\n\n  /** @type {Record<DismissReason, DismissReason>} */\n  const DismissReason = Object.freeze({\n    cancel: 'cancel',\n    backdrop: 'backdrop',\n    close: 'close',\n    esc: 'esc',\n    timer: 'timer'\n  });\n\n  /**\n   * @param {GlobalState} globalState\n   */\n  const removeKeydownHandler = globalState => {\n    if (globalState.keydownTarget && globalState.keydownHandlerAdded) {\n      globalState.keydownTarget.removeEventListener('keydown', globalState.keydownHandler, {\n        capture: globalState.keydownListenerCapture\n      });\n      globalState.keydownHandlerAdded = false;\n    }\n  };\n\n  /**\n   * @param {GlobalState} globalState\n   * @param {SweetAlertOptions} innerParams\n   * @param {*} dismissWith\n   */\n  const addKeydownHandler = (globalState, innerParams, dismissWith) => {\n    removeKeydownHandler(globalState);\n    if (!innerParams.toast) {\n      globalState.keydownHandler = e => keydownHandler(innerParams, e, dismissWith);\n      globalState.keydownTarget = innerParams.keydownListenerCapture ? window : getPopup();\n      globalState.keydownListenerCapture = innerParams.keydownListenerCapture;\n      globalState.keydownTarget.addEventListener('keydown', globalState.keydownHandler, {\n        capture: globalState.keydownListenerCapture\n      });\n      globalState.keydownHandlerAdded = true;\n    }\n  };\n\n  /**\n   * @param {number} index\n   * @param {number} increment\n   */\n  const setFocus = (index, increment) => {\n    var _dom$getPopup;\n    const focusableElements = getFocusableElements();\n    // search for visible elements and select the next possible match\n    if (focusableElements.length) {\n      index = index + increment;\n\n      // rollover to first item\n      if (index === focusableElements.length) {\n        index = 0;\n\n        // go to last item\n      } else if (index === -1) {\n        index = focusableElements.length - 1;\n      }\n      focusableElements[index].focus();\n      return;\n    }\n    // no visible focusable elements, focus the popup\n    (_dom$getPopup = getPopup()) === null || _dom$getPopup === void 0 || _dom$getPopup.focus();\n  };\n  const arrowKeysNextButton = ['ArrowRight', 'ArrowDown'];\n  const arrowKeysPreviousButton = ['ArrowLeft', 'ArrowUp'];\n\n  /**\n   * @param {SweetAlertOptions} innerParams\n   * @param {KeyboardEvent} event\n   * @param {Function} dismissWith\n   */\n  const keydownHandler = (innerParams, event, dismissWith) => {\n    if (!innerParams) {\n      return; // This instance has already been destroyed\n    }\n\n    // Ignore keydown during IME composition\n    // https://developer.mozilla.org/en-US/docs/Web/API/Document/keydown_event#ignoring_keydown_during_ime_composition\n    // https://github.com/sweetalert2/sweetalert2/issues/720\n    // https://github.com/sweetalert2/sweetalert2/issues/2406\n    if (event.isComposing || event.keyCode === 229) {\n      return;\n    }\n    if (innerParams.stopKeydownPropagation) {\n      event.stopPropagation();\n    }\n\n    // ENTER\n    if (event.key === 'Enter') {\n      handleEnter(event, innerParams);\n    }\n\n    // TAB\n    else if (event.key === 'Tab') {\n      handleTab(event);\n    }\n\n    // ARROWS - switch focus between buttons\n    else if ([...arrowKeysNextButton, ...arrowKeysPreviousButton].includes(event.key)) {\n      handleArrows(event.key);\n    }\n\n    // ESC\n    else if (event.key === 'Escape') {\n      handleEsc(event, innerParams, dismissWith);\n    }\n  };\n\n  /**\n   * @param {KeyboardEvent} event\n   * @param {SweetAlertOptions} innerParams\n   */\n  const handleEnter = (event, innerParams) => {\n    // https://github.com/sweetalert2/sweetalert2/issues/2386\n    if (!callIfFunction(innerParams.allowEnterKey)) {\n      return;\n    }\n    const input = getInput$1(getPopup(), innerParams.input);\n    if (event.target && input && event.target instanceof HTMLElement && event.target.outerHTML === input.outerHTML) {\n      if (['textarea', 'file'].includes(innerParams.input)) {\n        return; // do not submit\n      }\n\n      clickConfirm();\n      event.preventDefault();\n    }\n  };\n\n  /**\n   * @param {KeyboardEvent} event\n   */\n  const handleTab = event => {\n    const targetElement = event.target;\n    const focusableElements = getFocusableElements();\n    let btnIndex = -1;\n    for (let i = 0; i < focusableElements.length; i++) {\n      if (targetElement === focusableElements[i]) {\n        btnIndex = i;\n        break;\n      }\n    }\n\n    // Cycle to the next button\n    if (!event.shiftKey) {\n      setFocus(btnIndex, 1);\n    }\n\n    // Cycle to the prev button\n    else {\n      setFocus(btnIndex, -1);\n    }\n    event.stopPropagation();\n    event.preventDefault();\n  };\n\n  /**\n   * @param {string} key\n   */\n  const handleArrows = key => {\n    const actions = getActions();\n    const confirmButton = getConfirmButton();\n    const denyButton = getDenyButton();\n    const cancelButton = getCancelButton();\n    if (!actions || !confirmButton || !denyButton || !cancelButton) {\n      return;\n    }\n    /** @type HTMLElement[] */\n    const buttons = [confirmButton, denyButton, cancelButton];\n    if (document.activeElement instanceof HTMLElement && !buttons.includes(document.activeElement)) {\n      return;\n    }\n    const sibling = arrowKeysNextButton.includes(key) ? 'nextElementSibling' : 'previousElementSibling';\n    let buttonToFocus = document.activeElement;\n    if (!buttonToFocus) {\n      return;\n    }\n    for (let i = 0; i < actions.children.length; i++) {\n      buttonToFocus = buttonToFocus[sibling];\n      if (!buttonToFocus) {\n        return;\n      }\n      if (buttonToFocus instanceof HTMLButtonElement && isVisible$1(buttonToFocus)) {\n        break;\n      }\n    }\n    if (buttonToFocus instanceof HTMLButtonElement) {\n      buttonToFocus.focus();\n    }\n  };\n\n  /**\n   * @param {KeyboardEvent} event\n   * @param {SweetAlertOptions} innerParams\n   * @param {Function} dismissWith\n   */\n  const handleEsc = (event, innerParams, dismissWith) => {\n    if (callIfFunction(innerParams.allowEscapeKey)) {\n      event.preventDefault();\n      dismissWith(DismissReason.esc);\n    }\n  };\n\n  /**\n   * This module contains `WeakMap`s for each effectively-\"private  property\" that a `Swal` has.\n   * For example, to set the private property \"foo\" of `this` to \"bar\", you can `privateProps.foo.set(this, 'bar')`\n   * This is the approach that Babel will probably take to implement private methods/fields\n   *   https://github.com/tc39/proposal-private-methods\n   *   https://github.com/babel/babel/pull/7555\n   * Once we have the changes from that PR in Babel, and our core class fits reasonable in *one module*\n   *   then we can use that language feature.\n   */\n\n  var privateMethods = {\n    swalPromiseResolve: new WeakMap(),\n    swalPromiseReject: new WeakMap()\n  };\n\n  // From https://developer.paciellogroup.com/blog/2018/06/the-current-state-of-modal-dialog-accessibility/\n  // Adding aria-hidden=\"true\" to elements outside of the active modal dialog ensures that\n  // elements not within the active modal dialog will not be surfaced if a user opens a screen\n  // reader’s list of elements (headings, form controls, landmarks, etc.) in the document.\n\n  const setAriaHidden = () => {\n    const bodyChildren = Array.from(document.body.children);\n    bodyChildren.forEach(el => {\n      if (el === getContainer() || el.contains(getContainer())) {\n        return;\n      }\n      if (el.hasAttribute('aria-hidden')) {\n        el.setAttribute('data-previous-aria-hidden', el.getAttribute('aria-hidden') || '');\n      }\n      el.setAttribute('aria-hidden', 'true');\n    });\n  };\n  const unsetAriaHidden = () => {\n    const bodyChildren = Array.from(document.body.children);\n    bodyChildren.forEach(el => {\n      if (el.hasAttribute('data-previous-aria-hidden')) {\n        el.setAttribute('aria-hidden', el.getAttribute('data-previous-aria-hidden') || '');\n        el.removeAttribute('data-previous-aria-hidden');\n      } else {\n        el.removeAttribute('aria-hidden');\n      }\n    });\n  };\n\n  // @ts-ignore\n  const isSafariOrIOS = typeof window !== 'undefined' && !!window.GestureEvent; // true for Safari desktop + all iOS browsers https://stackoverflow.com/a/70585394\n\n  /**\n   * Fix iOS scrolling\n   * http://stackoverflow.com/q/39626302\n   */\n  const iOSfix = () => {\n    if (isSafariOrIOS && !hasClass(document.body, swalClasses.iosfix)) {\n      const offset = document.body.scrollTop;\n      document.body.style.top = \"\".concat(offset * -1, \"px\");\n      addClass(document.body, swalClasses.iosfix);\n      lockBodyScroll();\n    }\n  };\n\n  /**\n   * https://github.com/sweetalert2/sweetalert2/issues/1246\n   */\n  const lockBodyScroll = () => {\n    const container = getContainer();\n    if (!container) {\n      return;\n    }\n    /** @type {boolean} */\n    let preventTouchMove;\n    /**\n     * @param {TouchEvent} event\n     */\n    container.ontouchstart = event => {\n      preventTouchMove = shouldPreventTouchMove(event);\n    };\n    /**\n     * @param {TouchEvent} event\n     */\n    container.ontouchmove = event => {\n      if (preventTouchMove) {\n        event.preventDefault();\n        event.stopPropagation();\n      }\n    };\n  };\n\n  /**\n   * @param {TouchEvent} event\n   * @returns {boolean}\n   */\n  const shouldPreventTouchMove = event => {\n    const target = event.target;\n    const container = getContainer();\n    const htmlContainer = getHtmlContainer();\n    if (!container || !htmlContainer) {\n      return false;\n    }\n    if (isStylus(event) || isZoom(event)) {\n      return false;\n    }\n    if (target === container) {\n      return true;\n    }\n    if (!isScrollable(container) && target instanceof HTMLElement && target.tagName !== 'INPUT' &&\n    // #1603\n    target.tagName !== 'TEXTAREA' &&\n    // #2266\n    !(isScrollable(htmlContainer) &&\n    // #1944\n    htmlContainer.contains(target))) {\n      return true;\n    }\n    return false;\n  };\n\n  /**\n   * https://github.com/sweetalert2/sweetalert2/issues/1786\n   *\n   * @param {*} event\n   * @returns {boolean}\n   */\n  const isStylus = event => {\n    return event.touches && event.touches.length && event.touches[0].touchType === 'stylus';\n  };\n\n  /**\n   * https://github.com/sweetalert2/sweetalert2/issues/1891\n   *\n   * @param {TouchEvent} event\n   * @returns {boolean}\n   */\n  const isZoom = event => {\n    return event.touches && event.touches.length > 1;\n  };\n  const undoIOSfix = () => {\n    if (hasClass(document.body, swalClasses.iosfix)) {\n      const offset = parseInt(document.body.style.top, 10);\n      removeClass(document.body, swalClasses.iosfix);\n      document.body.style.top = '';\n      document.body.scrollTop = offset * -1;\n    }\n  };\n\n  /**\n   * Measure scrollbar width for padding body during modal show/hide\n   * https://github.com/twbs/bootstrap/blob/master/js/src/modal.js\n   *\n   * @returns {number}\n   */\n  const measureScrollbar = () => {\n    const scrollDiv = document.createElement('div');\n    scrollDiv.className = swalClasses['scrollbar-measure'];\n    document.body.appendChild(scrollDiv);\n    const scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;\n    document.body.removeChild(scrollDiv);\n    return scrollbarWidth;\n  };\n\n  /**\n   * Remember state in cases where opening and handling a modal will fiddle with it.\n   * @type {number | null}\n   */\n  let previousBodyPadding = null;\n\n  /**\n   * @param {string} initialBodyOverflow\n   */\n  const replaceScrollbarWithPadding = initialBodyOverflow => {\n    // for queues, do not do this more than once\n    if (previousBodyPadding !== null) {\n      return;\n    }\n    // if the body has overflow\n    if (document.body.scrollHeight > window.innerHeight || initialBodyOverflow === 'scroll' // https://github.com/sweetalert2/sweetalert2/issues/2663\n    ) {\n      // add padding so the content doesn't shift after removal of scrollbar\n      previousBodyPadding = parseInt(window.getComputedStyle(document.body).getPropertyValue('padding-right'));\n      document.body.style.paddingRight = \"\".concat(previousBodyPadding + measureScrollbar(), \"px\");\n    }\n  };\n  const undoReplaceScrollbarWithPadding = () => {\n    if (previousBodyPadding !== null) {\n      document.body.style.paddingRight = \"\".concat(previousBodyPadding, \"px\");\n      previousBodyPadding = null;\n    }\n  };\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {HTMLElement} container\n   * @param {boolean} returnFocus\n   * @param {Function} didClose\n   */\n  function removePopupAndResetState(instance, container, returnFocus, didClose) {\n    if (isToast()) {\n      triggerDidCloseAndDispose(instance, didClose);\n    } else {\n      restoreActiveElement(returnFocus).then(() => triggerDidCloseAndDispose(instance, didClose));\n      removeKeydownHandler(globalState);\n    }\n\n    // workaround for https://github.com/sweetalert2/sweetalert2/issues/2088\n    // for some reason removing the container in Safari will scroll the document to bottom\n    if (isSafariOrIOS) {\n      container.setAttribute('style', 'display:none !important');\n      container.removeAttribute('class');\n      container.innerHTML = '';\n    } else {\n      container.remove();\n    }\n    if (isModal()) {\n      undoReplaceScrollbarWithPadding();\n      undoIOSfix();\n      unsetAriaHidden();\n    }\n    removeBodyClasses();\n  }\n\n  /**\n   * Remove SweetAlert2 classes from body\n   */\n  function removeBodyClasses() {\n    removeClass([document.documentElement, document.body], [swalClasses.shown, swalClasses['height-auto'], swalClasses['no-backdrop'], swalClasses['toast-shown']]);\n  }\n\n  /**\n   * Instance method to close sweetAlert\n   *\n   * @param {any} resolveValue\n   */\n  function close(resolveValue) {\n    resolveValue = prepareResolveValue(resolveValue);\n    const swalPromiseResolve = privateMethods.swalPromiseResolve.get(this);\n    const didClose = triggerClosePopup(this);\n    if (this.isAwaitingPromise) {\n      // A swal awaiting for a promise (after a click on Confirm or Deny) cannot be dismissed anymore #2335\n      if (!resolveValue.isDismissed) {\n        handleAwaitingPromise(this);\n        swalPromiseResolve(resolveValue);\n      }\n    } else if (didClose) {\n      // Resolve Swal promise\n      swalPromiseResolve(resolveValue);\n    }\n  }\n  const triggerClosePopup = instance => {\n    const popup = getPopup();\n    if (!popup) {\n      return false;\n    }\n    const innerParams = privateProps.innerParams.get(instance);\n    if (!innerParams || hasClass(popup, innerParams.hideClass.popup)) {\n      return false;\n    }\n    removeClass(popup, innerParams.showClass.popup);\n    addClass(popup, innerParams.hideClass.popup);\n    const backdrop = getContainer();\n    removeClass(backdrop, innerParams.showClass.backdrop);\n    addClass(backdrop, innerParams.hideClass.backdrop);\n    handlePopupAnimation(instance, popup, innerParams);\n    return true;\n  };\n\n  /**\n   * @param {any} error\n   */\n  function rejectPromise(error) {\n    const rejectPromise = privateMethods.swalPromiseReject.get(this);\n    handleAwaitingPromise(this);\n    if (rejectPromise) {\n      // Reject Swal promise\n      rejectPromise(error);\n    }\n  }\n\n  /**\n   * @param {SweetAlert} instance\n   */\n  const handleAwaitingPromise = instance => {\n    if (instance.isAwaitingPromise) {\n      delete instance.isAwaitingPromise;\n      // The instance might have been previously partly destroyed, we must resume the destroy process in this case #2335\n      if (!privateProps.innerParams.get(instance)) {\n        instance._destroy();\n      }\n    }\n  };\n\n  /**\n   * @param {any} resolveValue\n   * @returns {SweetAlertResult}\n   */\n  const prepareResolveValue = resolveValue => {\n    // When user calls Swal.close()\n    if (typeof resolveValue === 'undefined') {\n      return {\n        isConfirmed: false,\n        isDenied: false,\n        isDismissed: true\n      };\n    }\n    return Object.assign({\n      isConfirmed: false,\n      isDenied: false,\n      isDismissed: false\n    }, resolveValue);\n  };\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {HTMLElement} popup\n   * @param {SweetAlertOptions} innerParams\n   */\n  const handlePopupAnimation = (instance, popup, innerParams) => {\n    const container = getContainer();\n    // If animation is supported, animate\n    const animationIsSupported = animationEndEvent && hasCssAnimation(popup);\n    if (typeof innerParams.willClose === 'function') {\n      innerParams.willClose(popup);\n    }\n    if (animationIsSupported) {\n      animatePopup(instance, popup, container, innerParams.returnFocus, innerParams.didClose);\n    } else {\n      // Otherwise, remove immediately\n      removePopupAndResetState(instance, container, innerParams.returnFocus, innerParams.didClose);\n    }\n  };\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {HTMLElement} popup\n   * @param {HTMLElement} container\n   * @param {boolean} returnFocus\n   * @param {Function} didClose\n   */\n  const animatePopup = (instance, popup, container, returnFocus, didClose) => {\n    if (!animationEndEvent) {\n      return;\n    }\n    globalState.swalCloseEventFinishedCallback = removePopupAndResetState.bind(null, instance, container, returnFocus, didClose);\n    popup.addEventListener(animationEndEvent, function (e) {\n      if (e.target === popup) {\n        globalState.swalCloseEventFinishedCallback();\n        delete globalState.swalCloseEventFinishedCallback;\n      }\n    });\n  };\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {Function} didClose\n   */\n  const triggerDidCloseAndDispose = (instance, didClose) => {\n    setTimeout(() => {\n      if (typeof didClose === 'function') {\n        didClose.bind(instance.params)();\n      }\n      // instance might have been destroyed already\n      if (instance._destroy) {\n        instance._destroy();\n      }\n    });\n  };\n\n  /**\n   * Shows loader (spinner), this is useful with AJAX requests.\n   * By default the loader be shown instead of the \"Confirm\" button.\n   *\n   * @param {HTMLButtonElement | null} [buttonToReplace]\n   */\n  const showLoading = buttonToReplace => {\n    let popup = getPopup();\n    if (!popup) {\n      new Swal(); // eslint-disable-line no-new\n    }\n\n    popup = getPopup();\n    if (!popup) {\n      return;\n    }\n    const loader = getLoader();\n    if (isToast()) {\n      hide(getIcon());\n    } else {\n      replaceButton(popup, buttonToReplace);\n    }\n    show(loader);\n    popup.setAttribute('data-loading', 'true');\n    popup.setAttribute('aria-busy', 'true');\n    popup.focus();\n  };\n\n  /**\n   * @param {HTMLElement} popup\n   * @param {HTMLButtonElement | null} [buttonToReplace]\n   */\n  const replaceButton = (popup, buttonToReplace) => {\n    const actions = getActions();\n    const loader = getLoader();\n    if (!actions || !loader) {\n      return;\n    }\n    if (!buttonToReplace && isVisible$1(getConfirmButton())) {\n      buttonToReplace = getConfirmButton();\n    }\n    show(actions);\n    if (buttonToReplace) {\n      hide(buttonToReplace);\n      loader.setAttribute('data-button-to-replace', buttonToReplace.className);\n      actions.insertBefore(loader, buttonToReplace);\n    }\n    addClass([popup, actions], swalClasses.loading);\n  };\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {SweetAlertOptions} params\n   */\n  const handleInputOptionsAndValue = (instance, params) => {\n    if (params.input === 'select' || params.input === 'radio') {\n      handleInputOptions(instance, params);\n    } else if (['text', 'email', 'number', 'tel', 'textarea'].some(i => i === params.input) && (hasToPromiseFn(params.inputValue) || isPromise(params.inputValue))) {\n      showLoading(getConfirmButton());\n      handleInputValue(instance, params);\n    }\n  };\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {SweetAlertOptions} innerParams\n   * @returns {SweetAlertInputValue}\n   */\n  const getInputValue = (instance, innerParams) => {\n    const input = instance.getInput();\n    if (!input) {\n      return null;\n    }\n    switch (innerParams.input) {\n      case 'checkbox':\n        return getCheckboxValue(input);\n      case 'radio':\n        return getRadioValue(input);\n      case 'file':\n        return getFileValue(input);\n      default:\n        return innerParams.inputAutoTrim ? input.value.trim() : input.value;\n    }\n  };\n\n  /**\n   * @param {HTMLInputElement} input\n   * @returns {number}\n   */\n  const getCheckboxValue = input => input.checked ? 1 : 0;\n\n  /**\n   * @param {HTMLInputElement} input\n   * @returns {string | null}\n   */\n  const getRadioValue = input => input.checked ? input.value : null;\n\n  /**\n   * @param {HTMLInputElement} input\n   * @returns {FileList | File | null}\n   */\n  const getFileValue = input => input.files && input.files.length ? input.getAttribute('multiple') !== null ? input.files : input.files[0] : null;\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {SweetAlertOptions} params\n   */\n  const handleInputOptions = (instance, params) => {\n    const popup = getPopup();\n    if (!popup) {\n      return;\n    }\n    /**\n     * @param {Record<string, any>} inputOptions\n     */\n    const processInputOptions = inputOptions => {\n      if (params.input === 'select') {\n        populateSelectOptions(popup, formatInputOptions(inputOptions), params);\n      } else if (params.input === 'radio') {\n        populateRadioOptions(popup, formatInputOptions(inputOptions), params);\n      }\n    };\n    if (hasToPromiseFn(params.inputOptions) || isPromise(params.inputOptions)) {\n      showLoading(getConfirmButton());\n      asPromise(params.inputOptions).then(inputOptions => {\n        instance.hideLoading();\n        processInputOptions(inputOptions);\n      });\n    } else if (typeof params.inputOptions === 'object') {\n      processInputOptions(params.inputOptions);\n    } else {\n      error(\"Unexpected type of inputOptions! Expected object, Map or Promise, got \".concat(typeof params.inputOptions));\n    }\n  };\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {SweetAlertOptions} params\n   */\n  const handleInputValue = (instance, params) => {\n    const input = instance.getInput();\n    if (!input) {\n      return;\n    }\n    hide(input);\n    asPromise(params.inputValue).then(inputValue => {\n      input.value = params.input === 'number' ? \"\".concat(parseFloat(inputValue) || 0) : \"\".concat(inputValue);\n      show(input);\n      input.focus();\n      instance.hideLoading();\n    }).catch(err => {\n      error(\"Error in inputValue promise: \".concat(err));\n      input.value = '';\n      show(input);\n      input.focus();\n      instance.hideLoading();\n    });\n  };\n\n  /**\n   * @param {HTMLElement} popup\n   * @param {InputOptionFlattened[]} inputOptions\n   * @param {SweetAlertOptions} params\n   */\n  function populateSelectOptions(popup, inputOptions, params) {\n    const select = getDirectChildByClass(popup, swalClasses.select);\n    if (!select) {\n      return;\n    }\n    /**\n     * @param {HTMLElement} parent\n     * @param {string} optionLabel\n     * @param {string} optionValue\n     */\n    const renderOption = (parent, optionLabel, optionValue) => {\n      const option = document.createElement('option');\n      option.value = optionValue;\n      setInnerHtml(option, optionLabel);\n      option.selected = isSelected(optionValue, params.inputValue);\n      parent.appendChild(option);\n    };\n    inputOptions.forEach(inputOption => {\n      const optionValue = inputOption[0];\n      const optionLabel = inputOption[1];\n      // <optgroup> spec:\n      // https://www.w3.org/TR/html401/interact/forms.html#h-17.6\n      // \"...all OPTGROUP elements must be specified directly within a SELECT element (i.e., groups may not be nested)...\"\n      // check whether this is a <optgroup>\n      if (Array.isArray(optionLabel)) {\n        // if it is an array, then it is an <optgroup>\n        const optgroup = document.createElement('optgroup');\n        optgroup.label = optionValue;\n        optgroup.disabled = false; // not configurable for now\n        select.appendChild(optgroup);\n        optionLabel.forEach(o => renderOption(optgroup, o[1], o[0]));\n      } else {\n        // case of <option>\n        renderOption(select, optionLabel, optionValue);\n      }\n    });\n    select.focus();\n  }\n\n  /**\n   * @param {HTMLElement} popup\n   * @param {InputOptionFlattened[]} inputOptions\n   * @param {SweetAlertOptions} params\n   */\n  function populateRadioOptions(popup, inputOptions, params) {\n    const radio = getDirectChildByClass(popup, swalClasses.radio);\n    if (!radio) {\n      return;\n    }\n    inputOptions.forEach(inputOption => {\n      const radioValue = inputOption[0];\n      const radioLabel = inputOption[1];\n      const radioInput = document.createElement('input');\n      const radioLabelElement = document.createElement('label');\n      radioInput.type = 'radio';\n      radioInput.name = swalClasses.radio;\n      radioInput.value = radioValue;\n      if (isSelected(radioValue, params.inputValue)) {\n        radioInput.checked = true;\n      }\n      const label = document.createElement('span');\n      setInnerHtml(label, radioLabel);\n      label.className = swalClasses.label;\n      radioLabelElement.appendChild(radioInput);\n      radioLabelElement.appendChild(label);\n      radio.appendChild(radioLabelElement);\n    });\n    const radios = radio.querySelectorAll('input');\n    if (radios.length) {\n      radios[0].focus();\n    }\n  }\n\n  /**\n   * Converts `inputOptions` into an array of `[value, label]`s\n   *\n   * @param {Record<string, any>} inputOptions\n   * @typedef {string[]} InputOptionFlattened\n   * @returns {InputOptionFlattened[]}\n   */\n  const formatInputOptions = inputOptions => {\n    /** @type {InputOptionFlattened[]} */\n    const result = [];\n    if (inputOptions instanceof Map) {\n      inputOptions.forEach((value, key) => {\n        let valueFormatted = value;\n        if (typeof valueFormatted === 'object') {\n          // case of <optgroup>\n          valueFormatted = formatInputOptions(valueFormatted);\n        }\n        result.push([key, valueFormatted]);\n      });\n    } else {\n      Object.keys(inputOptions).forEach(key => {\n        let valueFormatted = inputOptions[key];\n        if (typeof valueFormatted === 'object') {\n          // case of <optgroup>\n          valueFormatted = formatInputOptions(valueFormatted);\n        }\n        result.push([key, valueFormatted]);\n      });\n    }\n    return result;\n  };\n\n  /**\n   * @param {string} optionValue\n   * @param {SweetAlertInputValue} inputValue\n   * @returns {boolean}\n   */\n  const isSelected = (optionValue, inputValue) => {\n    return !!inputValue && inputValue.toString() === optionValue.toString();\n  };\n\n  /**\n   * @param {SweetAlert} instance\n   */\n  const handleConfirmButtonClick = instance => {\n    const innerParams = privateProps.innerParams.get(instance);\n    instance.disableButtons();\n    if (innerParams.input) {\n      handleConfirmOrDenyWithInput(instance, 'confirm');\n    } else {\n      confirm(instance, true);\n    }\n  };\n\n  /**\n   * @param {SweetAlert} instance\n   */\n  const handleDenyButtonClick = instance => {\n    const innerParams = privateProps.innerParams.get(instance);\n    instance.disableButtons();\n    if (innerParams.returnInputValueOnDeny) {\n      handleConfirmOrDenyWithInput(instance, 'deny');\n    } else {\n      deny(instance, false);\n    }\n  };\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {Function} dismissWith\n   */\n  const handleCancelButtonClick = (instance, dismissWith) => {\n    instance.disableButtons();\n    dismissWith(DismissReason.cancel);\n  };\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {'confirm' | 'deny'} type\n   */\n  const handleConfirmOrDenyWithInput = (instance, type) => {\n    const innerParams = privateProps.innerParams.get(instance);\n    if (!innerParams.input) {\n      error(\"The \\\"input\\\" parameter is needed to be set when using returnInputValueOn\".concat(capitalizeFirstLetter(type)));\n      return;\n    }\n    const input = instance.getInput();\n    const inputValue = getInputValue(instance, innerParams);\n    if (innerParams.inputValidator) {\n      handleInputValidator(instance, inputValue, type);\n    } else if (input && !input.checkValidity()) {\n      instance.enableButtons();\n      instance.showValidationMessage(innerParams.validationMessage);\n    } else if (type === 'deny') {\n      deny(instance, inputValue);\n    } else {\n      confirm(instance, inputValue);\n    }\n  };\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {SweetAlertInputValue} inputValue\n   * @param {'confirm' | 'deny'} type\n   */\n  const handleInputValidator = (instance, inputValue, type) => {\n    const innerParams = privateProps.innerParams.get(instance);\n    instance.disableInput();\n    const validationPromise = Promise.resolve().then(() => asPromise(innerParams.inputValidator(inputValue, innerParams.validationMessage)));\n    validationPromise.then(validationMessage => {\n      instance.enableButtons();\n      instance.enableInput();\n      if (validationMessage) {\n        instance.showValidationMessage(validationMessage);\n      } else if (type === 'deny') {\n        deny(instance, inputValue);\n      } else {\n        confirm(instance, inputValue);\n      }\n    });\n  };\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {any} value\n   */\n  const deny = (instance, value) => {\n    const innerParams = privateProps.innerParams.get(instance || undefined);\n    if (innerParams.showLoaderOnDeny) {\n      showLoading(getDenyButton());\n    }\n    if (innerParams.preDeny) {\n      instance.isAwaitingPromise = true; // Flagging the instance as awaiting a promise so it's own promise's reject/resolve methods doesn't get destroyed until the result from this preDeny's promise is received\n      const preDenyPromise = Promise.resolve().then(() => asPromise(innerParams.preDeny(value, innerParams.validationMessage)));\n      preDenyPromise.then(preDenyValue => {\n        if (preDenyValue === false) {\n          instance.hideLoading();\n          handleAwaitingPromise(instance);\n        } else {\n          instance.close({\n            isDenied: true,\n            value: typeof preDenyValue === 'undefined' ? value : preDenyValue\n          });\n        }\n      }).catch(error => rejectWith(instance || undefined, error));\n    } else {\n      instance.close({\n        isDenied: true,\n        value\n      });\n    }\n  };\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {any} value\n   */\n  const succeedWith = (instance, value) => {\n    instance.close({\n      isConfirmed: true,\n      value\n    });\n  };\n\n  /**\n   *\n   * @param {SweetAlert} instance\n   * @param {string} error\n   */\n  const rejectWith = (instance, error) => {\n    instance.rejectPromise(error);\n  };\n\n  /**\n   *\n   * @param {SweetAlert} instance\n   * @param {any} value\n   */\n  const confirm = (instance, value) => {\n    const innerParams = privateProps.innerParams.get(instance || undefined);\n    if (innerParams.showLoaderOnConfirm) {\n      showLoading();\n    }\n    if (innerParams.preConfirm) {\n      instance.resetValidationMessage();\n      instance.isAwaitingPromise = true; // Flagging the instance as awaiting a promise so it's own promise's reject/resolve methods doesn't get destroyed until the result from this preConfirm's promise is received\n      const preConfirmPromise = Promise.resolve().then(() => asPromise(innerParams.preConfirm(value, innerParams.validationMessage)));\n      preConfirmPromise.then(preConfirmValue => {\n        if (isVisible$1(getValidationMessage()) || preConfirmValue === false) {\n          instance.hideLoading();\n          handleAwaitingPromise(instance);\n        } else {\n          succeedWith(instance, typeof preConfirmValue === 'undefined' ? value : preConfirmValue);\n        }\n      }).catch(error => rejectWith(instance || undefined, error));\n    } else {\n      succeedWith(instance, value);\n    }\n  };\n\n  /**\n   * Hides loader and shows back the button which was hidden by .showLoading()\n   */\n  function hideLoading() {\n    // do nothing if popup is closed\n    const innerParams = privateProps.innerParams.get(this);\n    if (!innerParams) {\n      return;\n    }\n    const domCache = privateProps.domCache.get(this);\n    hide(domCache.loader);\n    if (isToast()) {\n      if (innerParams.icon) {\n        show(getIcon());\n      }\n    } else {\n      showRelatedButton(domCache);\n    }\n    removeClass([domCache.popup, domCache.actions], swalClasses.loading);\n    domCache.popup.removeAttribute('aria-busy');\n    domCache.popup.removeAttribute('data-loading');\n    domCache.confirmButton.disabled = false;\n    domCache.denyButton.disabled = false;\n    domCache.cancelButton.disabled = false;\n  }\n  const showRelatedButton = domCache => {\n    const buttonToReplace = domCache.popup.getElementsByClassName(domCache.loader.getAttribute('data-button-to-replace'));\n    if (buttonToReplace.length) {\n      show(buttonToReplace[0], 'inline-block');\n    } else if (allButtonsAreHidden()) {\n      hide(domCache.actions);\n    }\n  };\n\n  /**\n   * Gets the input DOM node, this method works with input parameter.\n   *\n   * @returns {HTMLInputElement | null}\n   */\n  function getInput() {\n    const innerParams = privateProps.innerParams.get(this);\n    const domCache = privateProps.domCache.get(this);\n    if (!domCache) {\n      return null;\n    }\n    return getInput$1(domCache.popup, innerParams.input);\n  }\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {string[]} buttons\n   * @param {boolean} disabled\n   */\n  function setButtonsDisabled(instance, buttons, disabled) {\n    const domCache = privateProps.domCache.get(instance);\n    buttons.forEach(button => {\n      domCache[button].disabled = disabled;\n    });\n  }\n\n  /**\n   * @param {HTMLInputElement | null} input\n   * @param {boolean} disabled\n   */\n  function setInputDisabled(input, disabled) {\n    const popup = getPopup();\n    if (!popup || !input) {\n      return;\n    }\n    if (input.type === 'radio') {\n      /** @type {NodeListOf<HTMLInputElement>} */\n      const radios = popup.querySelectorAll(\"[name=\\\"\".concat(swalClasses.radio, \"\\\"]\"));\n      for (let i = 0; i < radios.length; i++) {\n        radios[i].disabled = disabled;\n      }\n    } else {\n      input.disabled = disabled;\n    }\n  }\n\n  /**\n   * Enable all the buttons\n   * @this {SweetAlert}\n   */\n  function enableButtons() {\n    setButtonsDisabled(this, ['confirmButton', 'denyButton', 'cancelButton'], false);\n  }\n\n  /**\n   * Disable all the buttons\n   * @this {SweetAlert}\n   */\n  function disableButtons() {\n    setButtonsDisabled(this, ['confirmButton', 'denyButton', 'cancelButton'], true);\n  }\n\n  /**\n   * Enable the input field\n   * @this {SweetAlert}\n   */\n  function enableInput() {\n    setInputDisabled(this.getInput(), false);\n  }\n\n  /**\n   * Disable the input field\n   * @this {SweetAlert}\n   */\n  function disableInput() {\n    setInputDisabled(this.getInput(), true);\n  }\n\n  /**\n   * Show block with validation message\n   *\n   * @param {string} error\n   * @this {SweetAlert}\n   */\n  function showValidationMessage(error) {\n    const domCache = privateProps.domCache.get(this);\n    const params = privateProps.innerParams.get(this);\n    setInnerHtml(domCache.validationMessage, error);\n    domCache.validationMessage.className = swalClasses['validation-message'];\n    if (params.customClass && params.customClass.validationMessage) {\n      addClass(domCache.validationMessage, params.customClass.validationMessage);\n    }\n    show(domCache.validationMessage);\n    const input = this.getInput();\n    if (input) {\n      input.setAttribute('aria-invalid', 'true');\n      input.setAttribute('aria-describedby', swalClasses['validation-message']);\n      focusInput(input);\n      addClass(input, swalClasses.inputerror);\n    }\n  }\n\n  /**\n   * Hide block with validation message\n   *\n   * @this {SweetAlert}\n   */\n  function resetValidationMessage() {\n    const domCache = privateProps.domCache.get(this);\n    if (domCache.validationMessage) {\n      hide(domCache.validationMessage);\n    }\n    const input = this.getInput();\n    if (input) {\n      input.removeAttribute('aria-invalid');\n      input.removeAttribute('aria-describedby');\n      removeClass(input, swalClasses.inputerror);\n    }\n  }\n\n  const defaultParams = {\n    title: '',\n    titleText: '',\n    text: '',\n    html: '',\n    footer: '',\n    icon: undefined,\n    iconColor: undefined,\n    iconHtml: undefined,\n    template: undefined,\n    toast: false,\n    showClass: {\n      popup: 'swal2-show',\n      backdrop: 'swal2-backdrop-show',\n      icon: 'swal2-icon-show'\n    },\n    hideClass: {\n      popup: 'swal2-hide',\n      backdrop: 'swal2-backdrop-hide',\n      icon: 'swal2-icon-hide'\n    },\n    customClass: {},\n    target: 'body',\n    color: undefined,\n    backdrop: true,\n    heightAuto: true,\n    allowOutsideClick: true,\n    allowEscapeKey: true,\n    allowEnterKey: true,\n    stopKeydownPropagation: true,\n    keydownListenerCapture: false,\n    showConfirmButton: true,\n    showDenyButton: false,\n    showCancelButton: false,\n    preConfirm: undefined,\n    preDeny: undefined,\n    confirmButtonText: 'OK',\n    confirmButtonAriaLabel: '',\n    confirmButtonColor: undefined,\n    denyButtonText: 'No',\n    denyButtonAriaLabel: '',\n    denyButtonColor: undefined,\n    cancelButtonText: 'Cancel',\n    cancelButtonAriaLabel: '',\n    cancelButtonColor: undefined,\n    buttonsStyling: true,\n    reverseButtons: false,\n    focusConfirm: true,\n    focusDeny: false,\n    focusCancel: false,\n    returnFocus: true,\n    showCloseButton: false,\n    closeButtonHtml: '&times;',\n    closeButtonAriaLabel: 'Close this dialog',\n    loaderHtml: '',\n    showLoaderOnConfirm: false,\n    showLoaderOnDeny: false,\n    imageUrl: undefined,\n    imageWidth: undefined,\n    imageHeight: undefined,\n    imageAlt: '',\n    timer: undefined,\n    timerProgressBar: false,\n    width: undefined,\n    padding: undefined,\n    background: undefined,\n    input: undefined,\n    inputPlaceholder: '',\n    inputLabel: '',\n    inputValue: '',\n    inputOptions: {},\n    inputAutoFocus: true,\n    inputAutoTrim: true,\n    inputAttributes: {},\n    inputValidator: undefined,\n    returnInputValueOnDeny: false,\n    validationMessage: undefined,\n    grow: false,\n    position: 'center',\n    progressSteps: [],\n    currentProgressStep: undefined,\n    progressStepsDistance: undefined,\n    willOpen: undefined,\n    didOpen: undefined,\n    didRender: undefined,\n    willClose: undefined,\n    didClose: undefined,\n    didDestroy: undefined,\n    scrollbarPadding: true\n  };\n  const updatableParams = ['allowEscapeKey', 'allowOutsideClick', 'background', 'buttonsStyling', 'cancelButtonAriaLabel', 'cancelButtonColor', 'cancelButtonText', 'closeButtonAriaLabel', 'closeButtonHtml', 'color', 'confirmButtonAriaLabel', 'confirmButtonColor', 'confirmButtonText', 'currentProgressStep', 'customClass', 'denyButtonAriaLabel', 'denyButtonColor', 'denyButtonText', 'didClose', 'didDestroy', 'footer', 'hideClass', 'html', 'icon', 'iconColor', 'iconHtml', 'imageAlt', 'imageHeight', 'imageUrl', 'imageWidth', 'preConfirm', 'preDeny', 'progressSteps', 'returnFocus', 'reverseButtons', 'showCancelButton', 'showCloseButton', 'showConfirmButton', 'showDenyButton', 'text', 'title', 'titleText', 'willClose'];\n\n  /** @type {Record<string, string>} */\n  const deprecatedParams = {};\n  const toastIncompatibleParams = ['allowOutsideClick', 'allowEnterKey', 'backdrop', 'focusConfirm', 'focusDeny', 'focusCancel', 'returnFocus', 'heightAuto', 'keydownListenerCapture'];\n\n  /**\n   * Is valid parameter\n   *\n   * @param {string} paramName\n   * @returns {boolean}\n   */\n  const isValidParameter = paramName => {\n    return Object.prototype.hasOwnProperty.call(defaultParams, paramName);\n  };\n\n  /**\n   * Is valid parameter for Swal.update() method\n   *\n   * @param {string} paramName\n   * @returns {boolean}\n   */\n  const isUpdatableParameter = paramName => {\n    return updatableParams.indexOf(paramName) !== -1;\n  };\n\n  /**\n   * Is deprecated parameter\n   *\n   * @param {string} paramName\n   * @returns {string | undefined}\n   */\n  const isDeprecatedParameter = paramName => {\n    return deprecatedParams[paramName];\n  };\n\n  /**\n   * @param {string} param\n   */\n  const checkIfParamIsValid = param => {\n    if (!isValidParameter(param)) {\n      warn(\"Unknown parameter \\\"\".concat(param, \"\\\"\"));\n    }\n  };\n\n  /**\n   * @param {string} param\n   */\n  const checkIfToastParamIsValid = param => {\n    if (toastIncompatibleParams.includes(param)) {\n      warn(\"The parameter \\\"\".concat(param, \"\\\" is incompatible with toasts\"));\n    }\n  };\n\n  /**\n   * @param {string} param\n   */\n  const checkIfParamIsDeprecated = param => {\n    const isDeprecated = isDeprecatedParameter(param);\n    if (isDeprecated) {\n      warnAboutDeprecation(param, isDeprecated);\n    }\n  };\n\n  /**\n   * Show relevant warnings for given params\n   *\n   * @param {SweetAlertOptions} params\n   */\n  const showWarningsForParams = params => {\n    if (params.backdrop === false && params.allowOutsideClick) {\n      warn('\"allowOutsideClick\" parameter requires `backdrop` parameter to be set to `true`');\n    }\n    for (const param in params) {\n      checkIfParamIsValid(param);\n      if (params.toast) {\n        checkIfToastParamIsValid(param);\n      }\n      checkIfParamIsDeprecated(param);\n    }\n  };\n\n  /**\n   * Updates popup parameters.\n   *\n   * @param {SweetAlertOptions} params\n   */\n  function update(params) {\n    const popup = getPopup();\n    const innerParams = privateProps.innerParams.get(this);\n    if (!popup || hasClass(popup, innerParams.hideClass.popup)) {\n      warn(\"You're trying to update the closed or closing popup, that won't work. Use the update() method in preConfirm parameter or show a new popup.\");\n      return;\n    }\n    const validUpdatableParams = filterValidParams(params);\n    const updatedParams = Object.assign({}, innerParams, validUpdatableParams);\n    render(this, updatedParams);\n    privateProps.innerParams.set(this, updatedParams);\n    Object.defineProperties(this, {\n      params: {\n        value: Object.assign({}, this.params, params),\n        writable: false,\n        enumerable: true\n      }\n    });\n  }\n\n  /**\n   * @param {SweetAlertOptions} params\n   * @returns {SweetAlertOptions}\n   */\n  const filterValidParams = params => {\n    const validUpdatableParams = {};\n    Object.keys(params).forEach(param => {\n      if (isUpdatableParameter(param)) {\n        validUpdatableParams[param] = params[param];\n      } else {\n        warn(\"Invalid parameter to update: \".concat(param));\n      }\n    });\n    return validUpdatableParams;\n  };\n\n  /**\n   * Dispose the current SweetAlert2 instance\n   */\n  function _destroy() {\n    const domCache = privateProps.domCache.get(this);\n    const innerParams = privateProps.innerParams.get(this);\n    if (!innerParams) {\n      disposeWeakMaps(this); // The WeakMaps might have been partly destroyed, we must recall it to dispose any remaining WeakMaps #2335\n      return; // This instance has already been destroyed\n    }\n\n    // Check if there is another Swal closing\n    if (domCache.popup && globalState.swalCloseEventFinishedCallback) {\n      globalState.swalCloseEventFinishedCallback();\n      delete globalState.swalCloseEventFinishedCallback;\n    }\n    if (typeof innerParams.didDestroy === 'function') {\n      innerParams.didDestroy();\n    }\n    disposeSwal(this);\n  }\n\n  /**\n   * @param {SweetAlert} instance\n   */\n  const disposeSwal = instance => {\n    disposeWeakMaps(instance);\n    // Unset this.params so GC will dispose it (#1569)\n    delete instance.params;\n    // Unset globalState props so GC will dispose globalState (#1569)\n    delete globalState.keydownHandler;\n    delete globalState.keydownTarget;\n    // Unset currentInstance\n    delete globalState.currentInstance;\n  };\n\n  /**\n   * @param {SweetAlert} instance\n   */\n  const disposeWeakMaps = instance => {\n    // If the current instance is awaiting a promise result, we keep the privateMethods to call them once the promise result is retrieved #2335\n    if (instance.isAwaitingPromise) {\n      unsetWeakMaps(privateProps, instance);\n      instance.isAwaitingPromise = true;\n    } else {\n      unsetWeakMaps(privateMethods, instance);\n      unsetWeakMaps(privateProps, instance);\n      delete instance.isAwaitingPromise;\n      // Unset instance methods\n      delete instance.disableButtons;\n      delete instance.enableButtons;\n      delete instance.getInput;\n      delete instance.disableInput;\n      delete instance.enableInput;\n      delete instance.hideLoading;\n      delete instance.disableLoading;\n      delete instance.showValidationMessage;\n      delete instance.resetValidationMessage;\n      delete instance.close;\n      delete instance.closePopup;\n      delete instance.closeModal;\n      delete instance.closeToast;\n      delete instance.rejectPromise;\n      delete instance.update;\n      delete instance._destroy;\n    }\n  };\n\n  /**\n   * @param {object} obj\n   * @param {SweetAlert} instance\n   */\n  const unsetWeakMaps = (obj, instance) => {\n    for (const i in obj) {\n      obj[i].delete(instance);\n    }\n  };\n\n  var instanceMethods = /*#__PURE__*/Object.freeze({\n    __proto__: null,\n    _destroy: _destroy,\n    close: close,\n    closeModal: close,\n    closePopup: close,\n    closeToast: close,\n    disableButtons: disableButtons,\n    disableInput: disableInput,\n    disableLoading: hideLoading,\n    enableButtons: enableButtons,\n    enableInput: enableInput,\n    getInput: getInput,\n    handleAwaitingPromise: handleAwaitingPromise,\n    hideLoading: hideLoading,\n    rejectPromise: rejectPromise,\n    resetValidationMessage: resetValidationMessage,\n    showValidationMessage: showValidationMessage,\n    update: update\n  });\n\n  /**\n   * @param {SweetAlertOptions} innerParams\n   * @param {DomCache} domCache\n   * @param {Function} dismissWith\n   */\n  const handlePopupClick = (innerParams, domCache, dismissWith) => {\n    if (innerParams.toast) {\n      handleToastClick(innerParams, domCache, dismissWith);\n    } else {\n      // Ignore click events that had mousedown on the popup but mouseup on the container\n      // This can happen when the user drags a slider\n      handleModalMousedown(domCache);\n\n      // Ignore click events that had mousedown on the container but mouseup on the popup\n      handleContainerMousedown(domCache);\n      handleModalClick(innerParams, domCache, dismissWith);\n    }\n  };\n\n  /**\n   * @param {SweetAlertOptions} innerParams\n   * @param {DomCache} domCache\n   * @param {Function} dismissWith\n   */\n  const handleToastClick = (innerParams, domCache, dismissWith) => {\n    // Closing toast by internal click\n    domCache.popup.onclick = () => {\n      if (innerParams && (isAnyButtonShown(innerParams) || innerParams.timer || innerParams.input)) {\n        return;\n      }\n      dismissWith(DismissReason.close);\n    };\n  };\n\n  /**\n   * @param {SweetAlertOptions} innerParams\n   * @returns {boolean}\n   */\n  const isAnyButtonShown = innerParams => {\n    return innerParams.showConfirmButton || innerParams.showDenyButton || innerParams.showCancelButton || innerParams.showCloseButton;\n  };\n  let ignoreOutsideClick = false;\n\n  /**\n   * @param {DomCache} domCache\n   */\n  const handleModalMousedown = domCache => {\n    domCache.popup.onmousedown = () => {\n      domCache.container.onmouseup = function (e) {\n        domCache.container.onmouseup = undefined;\n        // We only check if the mouseup target is the container because usually it doesn't\n        // have any other direct children aside of the popup\n        if (e.target === domCache.container) {\n          ignoreOutsideClick = true;\n        }\n      };\n    };\n  };\n\n  /**\n   * @param {DomCache} domCache\n   */\n  const handleContainerMousedown = domCache => {\n    domCache.container.onmousedown = () => {\n      domCache.popup.onmouseup = function (e) {\n        domCache.popup.onmouseup = undefined;\n        // We also need to check if the mouseup target is a child of the popup\n        if (e.target === domCache.popup || e.target instanceof HTMLElement && domCache.popup.contains(e.target)) {\n          ignoreOutsideClick = true;\n        }\n      };\n    };\n  };\n\n  /**\n   * @param {SweetAlertOptions} innerParams\n   * @param {DomCache} domCache\n   * @param {Function} dismissWith\n   */\n  const handleModalClick = (innerParams, domCache, dismissWith) => {\n    domCache.container.onclick = e => {\n      if (ignoreOutsideClick) {\n        ignoreOutsideClick = false;\n        return;\n      }\n      if (e.target === domCache.container && callIfFunction(innerParams.allowOutsideClick)) {\n        dismissWith(DismissReason.backdrop);\n      }\n    };\n  };\n\n  const isJqueryElement = elem => typeof elem === 'object' && elem.jquery;\n  const isElement = elem => elem instanceof Element || isJqueryElement(elem);\n  const argsToParams = args => {\n    const params = {};\n    if (typeof args[0] === 'object' && !isElement(args[0])) {\n      Object.assign(params, args[0]);\n    } else {\n      ['title', 'html', 'icon'].forEach((name, index) => {\n        const arg = args[index];\n        if (typeof arg === 'string' || isElement(arg)) {\n          params[name] = arg;\n        } else if (arg !== undefined) {\n          error(\"Unexpected type of \".concat(name, \"! Expected \\\"string\\\" or \\\"Element\\\", got \").concat(typeof arg));\n        }\n      });\n    }\n    return params;\n  };\n\n  /**\n   * Main method to create a new SweetAlert2 popup\n   *\n   * @param  {...SweetAlertOptions} args\n   * @returns {Promise<SweetAlertResult>}\n   */\n  function fire() {\n    const Swal = this; // eslint-disable-line @typescript-eslint/no-this-alias\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    return new Swal(...args);\n  }\n\n  /**\n   * Returns an extended version of `Swal` containing `params` as defaults.\n   * Useful for reusing Swal configuration.\n   *\n   * For example:\n   *\n   * Before:\n   * const textPromptOptions = { input: 'text', showCancelButton: true }\n   * const {value: firstName} = await Swal.fire({ ...textPromptOptions, title: 'What is your first name?' })\n   * const {value: lastName} = await Swal.fire({ ...textPromptOptions, title: 'What is your last name?' })\n   *\n   * After:\n   * const TextPrompt = Swal.mixin({ input: 'text', showCancelButton: true })\n   * const {value: firstName} = await TextPrompt('What is your first name?')\n   * const {value: lastName} = await TextPrompt('What is your last name?')\n   *\n   * @param {SweetAlertOptions} mixinParams\n   * @returns {SweetAlert}\n   */\n  function mixin(mixinParams) {\n    class MixinSwal extends this {\n      _main(params, priorityMixinParams) {\n        return super._main(params, Object.assign({}, mixinParams, priorityMixinParams));\n      }\n    }\n    // @ts-ignore\n    return MixinSwal;\n  }\n\n  /**\n   * If `timer` parameter is set, returns number of milliseconds of timer remained.\n   * Otherwise, returns undefined.\n   *\n   * @returns {number | undefined}\n   */\n  const getTimerLeft = () => {\n    return globalState.timeout && globalState.timeout.getTimerLeft();\n  };\n\n  /**\n   * Stop timer. Returns number of milliseconds of timer remained.\n   * If `timer` parameter isn't set, returns undefined.\n   *\n   * @returns {number | undefined}\n   */\n  const stopTimer = () => {\n    if (globalState.timeout) {\n      stopTimerProgressBar();\n      return globalState.timeout.stop();\n    }\n  };\n\n  /**\n   * Resume timer. Returns number of milliseconds of timer remained.\n   * If `timer` parameter isn't set, returns undefined.\n   *\n   * @returns {number | undefined}\n   */\n  const resumeTimer = () => {\n    if (globalState.timeout) {\n      const remaining = globalState.timeout.start();\n      animateTimerProgressBar(remaining);\n      return remaining;\n    }\n  };\n\n  /**\n   * Resume timer. Returns number of milliseconds of timer remained.\n   * If `timer` parameter isn't set, returns undefined.\n   *\n   * @returns {number | undefined}\n   */\n  const toggleTimer = () => {\n    const timer = globalState.timeout;\n    return timer && (timer.running ? stopTimer() : resumeTimer());\n  };\n\n  /**\n   * Increase timer. Returns number of milliseconds of an updated timer.\n   * If `timer` parameter isn't set, returns undefined.\n   *\n   * @param {number} ms\n   * @returns {number | undefined}\n   */\n  const increaseTimer = ms => {\n    if (globalState.timeout) {\n      const remaining = globalState.timeout.increase(ms);\n      animateTimerProgressBar(remaining, true);\n      return remaining;\n    }\n  };\n\n  /**\n   * Check if timer is running. Returns true if timer is running\n   * or false if timer is paused or stopped.\n   * If `timer` parameter isn't set, returns undefined\n   *\n   * @returns {boolean}\n   */\n  const isTimerRunning = () => {\n    return !!(globalState.timeout && globalState.timeout.isRunning());\n  };\n\n  let bodyClickListenerAdded = false;\n  const clickHandlers = {};\n\n  /**\n   * @param {string} attr\n   */\n  function bindClickHandler() {\n    let attr = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'data-swal-template';\n    clickHandlers[attr] = this;\n    if (!bodyClickListenerAdded) {\n      document.body.addEventListener('click', bodyClickListener);\n      bodyClickListenerAdded = true;\n    }\n  }\n  const bodyClickListener = event => {\n    for (let el = event.target; el && el !== document; el = el.parentNode) {\n      for (const attr in clickHandlers) {\n        const template = el.getAttribute(attr);\n        if (template) {\n          clickHandlers[attr].fire({\n            template\n          });\n          return;\n        }\n      }\n    }\n  };\n\n  var staticMethods = /*#__PURE__*/Object.freeze({\n    __proto__: null,\n    argsToParams: argsToParams,\n    bindClickHandler: bindClickHandler,\n    clickCancel: clickCancel,\n    clickConfirm: clickConfirm,\n    clickDeny: clickDeny,\n    enableLoading: showLoading,\n    fire: fire,\n    getActions: getActions,\n    getCancelButton: getCancelButton,\n    getCloseButton: getCloseButton,\n    getConfirmButton: getConfirmButton,\n    getContainer: getContainer,\n    getDenyButton: getDenyButton,\n    getFocusableElements: getFocusableElements,\n    getFooter: getFooter,\n    getHtmlContainer: getHtmlContainer,\n    getIcon: getIcon,\n    getIconContent: getIconContent,\n    getImage: getImage,\n    getInputLabel: getInputLabel,\n    getLoader: getLoader,\n    getPopup: getPopup,\n    getProgressSteps: getProgressSteps,\n    getTimerLeft: getTimerLeft,\n    getTimerProgressBar: getTimerProgressBar,\n    getTitle: getTitle,\n    getValidationMessage: getValidationMessage,\n    increaseTimer: increaseTimer,\n    isDeprecatedParameter: isDeprecatedParameter,\n    isLoading: isLoading,\n    isTimerRunning: isTimerRunning,\n    isUpdatableParameter: isUpdatableParameter,\n    isValidParameter: isValidParameter,\n    isVisible: isVisible,\n    mixin: mixin,\n    resumeTimer: resumeTimer,\n    showLoading: showLoading,\n    stopTimer: stopTimer,\n    toggleTimer: toggleTimer\n  });\n\n  class Timer {\n    /**\n     * @param {Function} callback\n     * @param {number} delay\n     */\n    constructor(callback, delay) {\n      this.callback = callback;\n      this.remaining = delay;\n      this.running = false;\n      this.start();\n    }\n\n    /**\n     * @returns {number}\n     */\n    start() {\n      if (!this.running) {\n        this.running = true;\n        this.started = new Date();\n        this.id = setTimeout(this.callback, this.remaining);\n      }\n      return this.remaining;\n    }\n\n    /**\n     * @returns {number}\n     */\n    stop() {\n      if (this.started && this.running) {\n        this.running = false;\n        clearTimeout(this.id);\n        this.remaining -= new Date().getTime() - this.started.getTime();\n      }\n      return this.remaining;\n    }\n\n    /**\n     * @param {number} n\n     * @returns {number}\n     */\n    increase(n) {\n      const running = this.running;\n      if (running) {\n        this.stop();\n      }\n      this.remaining += n;\n      if (running) {\n        this.start();\n      }\n      return this.remaining;\n    }\n\n    /**\n     * @returns {number}\n     */\n    getTimerLeft() {\n      if (this.running) {\n        this.stop();\n        this.start();\n      }\n      return this.remaining;\n    }\n\n    /**\n     * @returns {boolean}\n     */\n    isRunning() {\n      return this.running;\n    }\n  }\n\n  const swalStringParams = ['swal-title', 'swal-html', 'swal-footer'];\n\n  /**\n   * @param {SweetAlertOptions} params\n   * @returns {SweetAlertOptions}\n   */\n  const getTemplateParams = params => {\n    /** @type {HTMLTemplateElement} */\n    const template = typeof params.template === 'string' ? document.querySelector(params.template) : params.template;\n    if (!template) {\n      return {};\n    }\n    /** @type {DocumentFragment} */\n    const templateContent = template.content;\n    showWarningsForElements(templateContent);\n    const result = Object.assign(getSwalParams(templateContent), getSwalFunctionParams(templateContent), getSwalButtons(templateContent), getSwalImage(templateContent), getSwalIcon(templateContent), getSwalInput(templateContent), getSwalStringParams(templateContent, swalStringParams));\n    return result;\n  };\n\n  /**\n   * @param {DocumentFragment} templateContent\n   * @returns {SweetAlertOptions}\n   */\n  const getSwalParams = templateContent => {\n    const result = {};\n    /** @type {HTMLElement[]} */\n    const swalParams = Array.from(templateContent.querySelectorAll('swal-param'));\n    swalParams.forEach(param => {\n      showWarningsForAttributes(param, ['name', 'value']);\n      const paramName = param.getAttribute('name');\n      const value = param.getAttribute('value');\n      if (typeof defaultParams[paramName] === 'boolean') {\n        result[paramName] = value !== 'false';\n      } else if (typeof defaultParams[paramName] === 'object') {\n        result[paramName] = JSON.parse(value);\n      } else {\n        result[paramName] = value;\n      }\n    });\n    return result;\n  };\n\n  /**\n   * @param {DocumentFragment} templateContent\n   * @returns {SweetAlertOptions}\n   */\n  const getSwalFunctionParams = templateContent => {\n    const result = {};\n    /** @type {HTMLElement[]} */\n    const swalFunctions = Array.from(templateContent.querySelectorAll('swal-function-param'));\n    swalFunctions.forEach(param => {\n      const paramName = param.getAttribute('name');\n      const value = param.getAttribute('value');\n      result[paramName] = new Function(\"return \".concat(value))();\n    });\n    return result;\n  };\n\n  /**\n   * @param {DocumentFragment} templateContent\n   * @returns {SweetAlertOptions}\n   */\n  const getSwalButtons = templateContent => {\n    const result = {};\n    /** @type {HTMLElement[]} */\n    const swalButtons = Array.from(templateContent.querySelectorAll('swal-button'));\n    swalButtons.forEach(button => {\n      showWarningsForAttributes(button, ['type', 'color', 'aria-label']);\n      const type = button.getAttribute('type');\n      result[\"\".concat(type, \"ButtonText\")] = button.innerHTML;\n      result[\"show\".concat(capitalizeFirstLetter(type), \"Button\")] = true;\n      if (button.hasAttribute('color')) {\n        result[\"\".concat(type, \"ButtonColor\")] = button.getAttribute('color');\n      }\n      if (button.hasAttribute('aria-label')) {\n        result[\"\".concat(type, \"ButtonAriaLabel\")] = button.getAttribute('aria-label');\n      }\n    });\n    return result;\n  };\n\n  /**\n   * @param {DocumentFragment} templateContent\n   * @returns {SweetAlertOptions}\n   */\n  const getSwalImage = templateContent => {\n    const result = {};\n    /** @type {HTMLElement} */\n    const image = templateContent.querySelector('swal-image');\n    if (image) {\n      showWarningsForAttributes(image, ['src', 'width', 'height', 'alt']);\n      if (image.hasAttribute('src')) {\n        result.imageUrl = image.getAttribute('src');\n      }\n      if (image.hasAttribute('width')) {\n        result.imageWidth = image.getAttribute('width');\n      }\n      if (image.hasAttribute('height')) {\n        result.imageHeight = image.getAttribute('height');\n      }\n      if (image.hasAttribute('alt')) {\n        result.imageAlt = image.getAttribute('alt');\n      }\n    }\n    return result;\n  };\n\n  /**\n   * @param {DocumentFragment} templateContent\n   * @returns {SweetAlertOptions}\n   */\n  const getSwalIcon = templateContent => {\n    const result = {};\n    /** @type {HTMLElement} */\n    const icon = templateContent.querySelector('swal-icon');\n    if (icon) {\n      showWarningsForAttributes(icon, ['type', 'color']);\n      if (icon.hasAttribute('type')) {\n        /** @type {SweetAlertIcon} */\n        // @ts-ignore\n        result.icon = icon.getAttribute('type');\n      }\n      if (icon.hasAttribute('color')) {\n        result.iconColor = icon.getAttribute('color');\n      }\n      result.iconHtml = icon.innerHTML;\n    }\n    return result;\n  };\n\n  /**\n   * @param {DocumentFragment} templateContent\n   * @returns {SweetAlertOptions}\n   */\n  const getSwalInput = templateContent => {\n    const result = {};\n    /** @type {HTMLElement} */\n    const input = templateContent.querySelector('swal-input');\n    if (input) {\n      showWarningsForAttributes(input, ['type', 'label', 'placeholder', 'value']);\n      /** @type {SweetAlertInput} */\n      // @ts-ignore\n      result.input = input.getAttribute('type') || 'text';\n      if (input.hasAttribute('label')) {\n        result.inputLabel = input.getAttribute('label');\n      }\n      if (input.hasAttribute('placeholder')) {\n        result.inputPlaceholder = input.getAttribute('placeholder');\n      }\n      if (input.hasAttribute('value')) {\n        result.inputValue = input.getAttribute('value');\n      }\n    }\n    /** @type {HTMLElement[]} */\n    const inputOptions = Array.from(templateContent.querySelectorAll('swal-input-option'));\n    if (inputOptions.length) {\n      result.inputOptions = {};\n      inputOptions.forEach(option => {\n        showWarningsForAttributes(option, ['value']);\n        const optionValue = option.getAttribute('value');\n        const optionName = option.innerHTML;\n        result.inputOptions[optionValue] = optionName;\n      });\n    }\n    return result;\n  };\n\n  /**\n   * @param {DocumentFragment} templateContent\n   * @param {string[]} paramNames\n   * @returns {SweetAlertOptions}\n   */\n  const getSwalStringParams = (templateContent, paramNames) => {\n    const result = {};\n    for (const i in paramNames) {\n      const paramName = paramNames[i];\n      /** @type {HTMLElement} */\n      const tag = templateContent.querySelector(paramName);\n      if (tag) {\n        showWarningsForAttributes(tag, []);\n        result[paramName.replace(/^swal-/, '')] = tag.innerHTML.trim();\n      }\n    }\n    return result;\n  };\n\n  /**\n   * @param {DocumentFragment} templateContent\n   */\n  const showWarningsForElements = templateContent => {\n    const allowedElements = swalStringParams.concat(['swal-param', 'swal-function-param', 'swal-button', 'swal-image', 'swal-icon', 'swal-input', 'swal-input-option']);\n    Array.from(templateContent.children).forEach(el => {\n      const tagName = el.tagName.toLowerCase();\n      if (!allowedElements.includes(tagName)) {\n        warn(\"Unrecognized element <\".concat(tagName, \">\"));\n      }\n    });\n  };\n\n  /**\n   * @param {HTMLElement} el\n   * @param {string[]} allowedAttributes\n   */\n  const showWarningsForAttributes = (el, allowedAttributes) => {\n    Array.from(el.attributes).forEach(attribute => {\n      if (allowedAttributes.indexOf(attribute.name) === -1) {\n        warn([\"Unrecognized attribute \\\"\".concat(attribute.name, \"\\\" on <\").concat(el.tagName.toLowerCase(), \">.\"), \"\".concat(allowedAttributes.length ? \"Allowed attributes are: \".concat(allowedAttributes.join(', ')) : 'To set the value, use HTML within the element.')]);\n      }\n    });\n  };\n\n  const SHOW_CLASS_TIMEOUT = 10;\n\n  /**\n   * Open popup, add necessary classes and styles, fix scrollbar\n   *\n   * @param {SweetAlertOptions} params\n   */\n  const openPopup = params => {\n    const container = getContainer();\n    const popup = getPopup();\n    if (typeof params.willOpen === 'function') {\n      params.willOpen(popup);\n    }\n    const bodyStyles = window.getComputedStyle(document.body);\n    const initialBodyOverflow = bodyStyles.overflowY;\n    addClasses(container, popup, params);\n\n    // scrolling is 'hidden' until animation is done, after that 'auto'\n    setTimeout(() => {\n      setScrollingVisibility(container, popup);\n    }, SHOW_CLASS_TIMEOUT);\n    if (isModal()) {\n      fixScrollContainer(container, params.scrollbarPadding, initialBodyOverflow);\n      setAriaHidden();\n    }\n    if (!isToast() && !globalState.previousActiveElement) {\n      globalState.previousActiveElement = document.activeElement;\n    }\n    if (typeof params.didOpen === 'function') {\n      setTimeout(() => params.didOpen(popup));\n    }\n    removeClass(container, swalClasses['no-transition']);\n  };\n\n  /**\n   * @param {AnimationEvent} event\n   */\n  const swalOpenAnimationFinished = event => {\n    const popup = getPopup();\n    if (event.target !== popup || !animationEndEvent) {\n      return;\n    }\n    const container = getContainer();\n    popup.removeEventListener(animationEndEvent, swalOpenAnimationFinished);\n    container.style.overflowY = 'auto';\n  };\n\n  /**\n   * @param {HTMLElement} container\n   * @param {HTMLElement} popup\n   */\n  const setScrollingVisibility = (container, popup) => {\n    if (animationEndEvent && hasCssAnimation(popup)) {\n      container.style.overflowY = 'hidden';\n      popup.addEventListener(animationEndEvent, swalOpenAnimationFinished);\n    } else {\n      container.style.overflowY = 'auto';\n    }\n  };\n\n  /**\n   * @param {HTMLElement} container\n   * @param {boolean} scrollbarPadding\n   * @param {string} initialBodyOverflow\n   */\n  const fixScrollContainer = (container, scrollbarPadding, initialBodyOverflow) => {\n    iOSfix();\n    if (scrollbarPadding && initialBodyOverflow !== 'hidden') {\n      replaceScrollbarWithPadding(initialBodyOverflow);\n    }\n\n    // sweetalert2/issues/1247\n    setTimeout(() => {\n      container.scrollTop = 0;\n    });\n  };\n\n  /**\n   * @param {HTMLElement} container\n   * @param {HTMLElement} popup\n   * @param {SweetAlertOptions} params\n   */\n  const addClasses = (container, popup, params) => {\n    addClass(container, params.showClass.backdrop);\n    // this workaround with opacity is needed for https://github.com/sweetalert2/sweetalert2/issues/2059\n    popup.style.setProperty('opacity', '0', 'important');\n    show(popup, 'grid');\n    setTimeout(() => {\n      // Animate popup right after showing it\n      addClass(popup, params.showClass.popup);\n      // and remove the opacity workaround\n      popup.style.removeProperty('opacity');\n    }, SHOW_CLASS_TIMEOUT); // 10ms in order to fix #2062\n\n    addClass([document.documentElement, document.body], swalClasses.shown);\n    if (params.heightAuto && params.backdrop && !params.toast) {\n      addClass([document.documentElement, document.body], swalClasses['height-auto']);\n    }\n  };\n\n  var defaultInputValidators = {\n    /**\n     * @param {string} string\n     * @param {string} [validationMessage]\n     * @returns {Promise<string | void>}\n     */\n    email: (string, validationMessage) => {\n      return /^[a-zA-Z0-9.+_-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z0-9-]{2,24}$/.test(string) ? Promise.resolve() : Promise.resolve(validationMessage || 'Invalid email address');\n    },\n    /**\n     * @param {string} string\n     * @param {string} [validationMessage]\n     * @returns {Promise<string | void>}\n     */\n    url: (string, validationMessage) => {\n      // taken from https://stackoverflow.com/a/3809435 with a small change from #1306 and #2013\n      return /^https?:\\/\\/(www\\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\\.[a-z]{2,63}\\b([-a-zA-Z0-9@:%_+.~#?&/=]*)$/.test(string) ? Promise.resolve() : Promise.resolve(validationMessage || 'Invalid URL');\n    }\n  };\n\n  /**\n   * @param {SweetAlertOptions} params\n   */\n  function setDefaultInputValidators(params) {\n    // Use default `inputValidator` for supported input types if not provided\n    if (params.inputValidator) {\n      return;\n    }\n    if (params.input === 'email') {\n      params.inputValidator = defaultInputValidators['email'];\n    }\n    if (params.input === 'url') {\n      params.inputValidator = defaultInputValidators['url'];\n    }\n  }\n\n  /**\n   * @param {SweetAlertOptions} params\n   */\n  function validateCustomTargetElement(params) {\n    // Determine if the custom target element is valid\n    if (!params.target || typeof params.target === 'string' && !document.querySelector(params.target) || typeof params.target !== 'string' && !params.target.appendChild) {\n      warn('Target parameter is not valid, defaulting to \"body\"');\n      params.target = 'body';\n    }\n  }\n\n  /**\n   * Set type, text and actions on popup\n   *\n   * @param {SweetAlertOptions} params\n   */\n  function setParameters(params) {\n    setDefaultInputValidators(params);\n\n    // showLoaderOnConfirm && preConfirm\n    if (params.showLoaderOnConfirm && !params.preConfirm) {\n      warn('showLoaderOnConfirm is set to true, but preConfirm is not defined.\\n' + 'showLoaderOnConfirm should be used together with preConfirm, see usage example:\\n' + 'https://sweetalert2.github.io/#ajax-request');\n    }\n    validateCustomTargetElement(params);\n\n    // Replace newlines with <br> in title\n    if (typeof params.title === 'string') {\n      params.title = params.title.split('\\n').join('<br />');\n    }\n    init(params);\n  }\n\n  /** @type {SweetAlert} */\n  let currentInstance;\n  var _promise = /*#__PURE__*/new WeakMap();\n  class SweetAlert {\n    /**\n     * @param {...any} args\n     * @this {SweetAlert}\n     */\n    constructor() {\n      /**\n       * @type {Promise<SweetAlertResult>}\n       */\n      _classPrivateFieldInitSpec(this, _promise, {\n        writable: true,\n        value: void 0\n      });\n      // Prevent run in Node env\n      if (typeof window === 'undefined') {\n        return;\n      }\n      currentInstance = this;\n\n      // @ts-ignore\n      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n      const outerParams = Object.freeze(this.constructor.argsToParams(args));\n\n      /** @type {Readonly<SweetAlertOptions>} */\n      this.params = outerParams;\n\n      /** @type {boolean} */\n      this.isAwaitingPromise = false;\n      _classPrivateFieldSet(this, _promise, this._main(currentInstance.params));\n    }\n    _main(userParams) {\n      let mixinParams = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      showWarningsForParams(Object.assign({}, mixinParams, userParams));\n      if (globalState.currentInstance) {\n        globalState.currentInstance._destroy();\n        if (isModal()) {\n          unsetAriaHidden();\n        }\n      }\n      globalState.currentInstance = currentInstance;\n      const innerParams = prepareParams(userParams, mixinParams);\n      setParameters(innerParams);\n      Object.freeze(innerParams);\n\n      // clear the previous timer\n      if (globalState.timeout) {\n        globalState.timeout.stop();\n        delete globalState.timeout;\n      }\n\n      // clear the restore focus timeout\n      clearTimeout(globalState.restoreFocusTimeout);\n      const domCache = populateDomCache(currentInstance);\n      render(currentInstance, innerParams);\n      privateProps.innerParams.set(currentInstance, innerParams);\n      return swalPromise(currentInstance, domCache, innerParams);\n    }\n\n    // `catch` cannot be the name of a module export, so we define our thenable methods here instead\n    then(onFulfilled) {\n      return _classPrivateFieldGet(this, _promise).then(onFulfilled);\n    }\n    finally(onFinally) {\n      return _classPrivateFieldGet(this, _promise).finally(onFinally);\n    }\n  }\n\n  /**\n   * @param {SweetAlert} instance\n   * @param {DomCache} domCache\n   * @param {SweetAlertOptions} innerParams\n   * @returns {Promise}\n   */\n  const swalPromise = (instance, domCache, innerParams) => {\n    return new Promise((resolve, reject) => {\n      // functions to handle all closings/dismissals\n      /**\n       * @param {DismissReason} dismiss\n       */\n      const dismissWith = dismiss => {\n        instance.close({\n          isDismissed: true,\n          dismiss\n        });\n      };\n      privateMethods.swalPromiseResolve.set(instance, resolve);\n      privateMethods.swalPromiseReject.set(instance, reject);\n      domCache.confirmButton.onclick = () => {\n        handleConfirmButtonClick(instance);\n      };\n      domCache.denyButton.onclick = () => {\n        handleDenyButtonClick(instance);\n      };\n      domCache.cancelButton.onclick = () => {\n        handleCancelButtonClick(instance, dismissWith);\n      };\n      domCache.closeButton.onclick = () => {\n        dismissWith(DismissReason.close);\n      };\n      handlePopupClick(innerParams, domCache, dismissWith);\n      addKeydownHandler(globalState, innerParams, dismissWith);\n      handleInputOptionsAndValue(instance, innerParams);\n      openPopup(innerParams);\n      setupTimer(globalState, innerParams, dismissWith);\n      initFocus(domCache, innerParams);\n\n      // Scroll container to top on open (#1247, #1946)\n      setTimeout(() => {\n        domCache.container.scrollTop = 0;\n      });\n    });\n  };\n\n  /**\n   * @param {SweetAlertOptions} userParams\n   * @param {SweetAlertOptions} mixinParams\n   * @returns {SweetAlertOptions}\n   */\n  const prepareParams = (userParams, mixinParams) => {\n    const templateParams = getTemplateParams(userParams);\n    const params = Object.assign({}, defaultParams, mixinParams, templateParams, userParams); // precedence is described in #2131\n    params.showClass = Object.assign({}, defaultParams.showClass, params.showClass);\n    params.hideClass = Object.assign({}, defaultParams.hideClass, params.hideClass);\n    return params;\n  };\n\n  /**\n   * @param {SweetAlert} instance\n   * @returns {DomCache}\n   */\n  const populateDomCache = instance => {\n    const domCache = {\n      popup: getPopup(),\n      container: getContainer(),\n      actions: getActions(),\n      confirmButton: getConfirmButton(),\n      denyButton: getDenyButton(),\n      cancelButton: getCancelButton(),\n      loader: getLoader(),\n      closeButton: getCloseButton(),\n      validationMessage: getValidationMessage(),\n      progressSteps: getProgressSteps()\n    };\n    privateProps.domCache.set(instance, domCache);\n    return domCache;\n  };\n\n  /**\n   * @param {GlobalState} globalState\n   * @param {SweetAlertOptions} innerParams\n   * @param {Function} dismissWith\n   */\n  const setupTimer = (globalState, innerParams, dismissWith) => {\n    const timerProgressBar = getTimerProgressBar();\n    hide(timerProgressBar);\n    if (innerParams.timer) {\n      globalState.timeout = new Timer(() => {\n        dismissWith('timer');\n        delete globalState.timeout;\n      }, innerParams.timer);\n      if (innerParams.timerProgressBar) {\n        show(timerProgressBar);\n        applyCustomClass(timerProgressBar, innerParams, 'timerProgressBar');\n        setTimeout(() => {\n          if (globalState.timeout && globalState.timeout.running) {\n            // timer can be already stopped or unset at this point\n            animateTimerProgressBar(innerParams.timer);\n          }\n        });\n      }\n    }\n  };\n\n  /**\n   * @param {DomCache} domCache\n   * @param {SweetAlertOptions} innerParams\n   */\n  const initFocus = (domCache, innerParams) => {\n    if (innerParams.toast) {\n      return;\n    }\n    if (!callIfFunction(innerParams.allowEnterKey)) {\n      blurActiveElement();\n      return;\n    }\n    if (!focusButton(domCache, innerParams)) {\n      setFocus(-1, 1);\n    }\n  };\n\n  /**\n   * @param {DomCache} domCache\n   * @param {SweetAlertOptions} innerParams\n   * @returns {boolean}\n   */\n  const focusButton = (domCache, innerParams) => {\n    if (innerParams.focusDeny && isVisible$1(domCache.denyButton)) {\n      domCache.denyButton.focus();\n      return true;\n    }\n    if (innerParams.focusCancel && isVisible$1(domCache.cancelButton)) {\n      domCache.cancelButton.focus();\n      return true;\n    }\n    if (innerParams.focusConfirm && isVisible$1(domCache.confirmButton)) {\n      domCache.confirmButton.focus();\n      return true;\n    }\n    return false;\n  };\n  const blurActiveElement = () => {\n    if (document.activeElement instanceof HTMLElement && typeof document.activeElement.blur === 'function') {\n      document.activeElement.blur();\n    }\n  };\n\n  // Dear russian users visiting russian sites. Let's have fun.\n  if (typeof window !== 'undefined' && /^ru\\b/.test(navigator.language) && location.host.match(/\\.(ru|su|by|xn--p1ai)$/)) {\n    const now = new Date();\n    const initiationDate = localStorage.getItem('swal-initiation');\n    if (!initiationDate) {\n      localStorage.setItem('swal-initiation', \"\".concat(now));\n    } else if ((now.getTime() - Date.parse(initiationDate)) / (1000 * 60 * 60 * 24) > 3) {\n      setTimeout(() => {\n        document.body.style.pointerEvents = 'none';\n        const ukrainianAnthem = document.createElement('audio');\n        ukrainianAnthem.src = 'https://flag-gimn.ru/wp-content/uploads/2021/09/Ukraina.mp3';\n        ukrainianAnthem.loop = true;\n        document.body.appendChild(ukrainianAnthem);\n        setTimeout(() => {\n          ukrainianAnthem.play().catch(() => {\n            // ignore\n          });\n        }, 2500);\n      }, 500);\n    }\n  }\n\n  // Assign instance methods from src/instanceMethods/*.js to prototype\n  SweetAlert.prototype.disableButtons = disableButtons;\n  SweetAlert.prototype.enableButtons = enableButtons;\n  SweetAlert.prototype.getInput = getInput;\n  SweetAlert.prototype.disableInput = disableInput;\n  SweetAlert.prototype.enableInput = enableInput;\n  SweetAlert.prototype.hideLoading = hideLoading;\n  SweetAlert.prototype.disableLoading = hideLoading;\n  SweetAlert.prototype.showValidationMessage = showValidationMessage;\n  SweetAlert.prototype.resetValidationMessage = resetValidationMessage;\n  SweetAlert.prototype.close = close;\n  SweetAlert.prototype.closePopup = close;\n  SweetAlert.prototype.closeModal = close;\n  SweetAlert.prototype.closeToast = close;\n  SweetAlert.prototype.rejectPromise = rejectPromise;\n  SweetAlert.prototype.update = update;\n  SweetAlert.prototype._destroy = _destroy;\n\n  // Assign static methods from src/staticMethods/*.js to constructor\n  Object.assign(SweetAlert, staticMethods);\n\n  // Proxy to instance methods to constructor, for now, for backwards compatibility\n  Object.keys(instanceMethods).forEach(key => {\n    /**\n     * @param {...any} args\n     * @returns {any | undefined}\n     */\n    SweetAlert[key] = function () {\n      if (currentInstance && currentInstance[key]) {\n        return currentInstance[key](...arguments);\n      }\n      return null;\n    };\n  });\n  SweetAlert.DismissReason = DismissReason;\n  SweetAlert.version = '11.7.31';\n\n  const Swal = SweetAlert;\n  // @ts-ignore\n  Swal.default = Swal;\n\n  return Swal;\n\n}));\nif (typeof this !== 'undefined' && this.Sweetalert2){this.swal = this.sweetAlert = this.Swal = this.SweetAlert = this.Sweetalert2}\n\"undefined\"!=typeof document&&function(e,t){var n=e.createElement(\"style\");if(e.getElementsByTagName(\"head\")[0].appendChild(n),n.styleSheet)n.styleSheet.disabled||(n.styleSheet.cssText=t);else try{n.innerHTML=t}catch(e){n.innerText=t}}(document,\".swal2-popup.swal2-toast{box-sizing:border-box;grid-column:1/4 !important;grid-row:1/4 !important;grid-template-columns:min-content auto min-content;padding:1em;overflow-y:hidden;background:#fff;box-shadow:0 0 1px rgba(0,0,0,.075),0 1px 2px rgba(0,0,0,.075),1px 2px 4px rgba(0,0,0,.075),1px 3px 8px rgba(0,0,0,.075),2px 4px 16px rgba(0,0,0,.075);pointer-events:all}.swal2-popup.swal2-toast>*{grid-column:2}.swal2-popup.swal2-toast .swal2-title{margin:.5em 1em;padding:0;font-size:1em;text-align:initial}.swal2-popup.swal2-toast .swal2-loading{justify-content:center}.swal2-popup.swal2-toast .swal2-input{height:2em;margin:.5em;font-size:1em}.swal2-popup.swal2-toast .swal2-validation-message{font-size:1em}.swal2-popup.swal2-toast .swal2-footer{margin:.5em 0 0;padding:.5em 0 0;font-size:.8em}.swal2-popup.swal2-toast .swal2-close{grid-column:3/3;grid-row:1/99;align-self:center;width:.8em;height:.8em;margin:0;font-size:2em}.swal2-popup.swal2-toast .swal2-html-container{margin:.5em 1em;padding:0;overflow:initial;font-size:1em;text-align:initial}.swal2-popup.swal2-toast .swal2-html-container:empty{padding:0}.swal2-popup.swal2-toast .swal2-loader{grid-column:1;grid-row:1/99;align-self:center;width:2em;height:2em;margin:.25em}.swal2-popup.swal2-toast .swal2-icon{grid-column:1;grid-row:1/99;align-self:center;width:2em;min-width:2em;height:2em;margin:0 .5em 0 0}.swal2-popup.swal2-toast .swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:1.8em;font-weight:bold}.swal2-popup.swal2-toast .swal2-icon.swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line]{top:.875em;width:1.375em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:.3125em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:.3125em}.swal2-popup.swal2-toast .swal2-actions{justify-content:flex-start;height:auto;margin:0;margin-top:.5em;padding:0 .5em}.swal2-popup.swal2-toast .swal2-styled{margin:.25em .5em;padding:.4em .6em;font-size:1em}.swal2-popup.swal2-toast .swal2-success{border-color:#a5dc86}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line]{position:absolute;width:1.6em;height:3em;transform:rotate(45deg);border-radius:50%}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=left]{top:-0.8em;left:-0.5em;transform:rotate(-45deg);transform-origin:2em 2em;border-radius:4em 0 0 4em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=right]{top:-0.25em;left:.9375em;transform-origin:0 1.5em;border-radius:0 4em 4em 0}.swal2-popup.swal2-toast .swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-success .swal2-success-fix{top:0;left:.4375em;width:.4375em;height:2.6875em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line]{height:.3125em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=tip]{top:1.125em;left:.1875em;width:.75em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=long]{top:.9375em;right:.1875em;width:1.375em}.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-tip{animation:swal2-toast-animate-success-line-tip .75s}.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-long{animation:swal2-toast-animate-success-line-long .75s}.swal2-popup.swal2-toast.swal2-show{animation:swal2-toast-show .5s}.swal2-popup.swal2-toast.swal2-hide{animation:swal2-toast-hide .1s forwards}div:where(.swal2-container){display:grid;position:fixed;z-index:1060;inset:0;box-sizing:border-box;grid-template-areas:\\\"top-start     top            top-end\\\" \\\"center-start  center         center-end\\\" \\\"bottom-start  bottom-center  bottom-end\\\";grid-template-rows:minmax(min-content, auto) minmax(min-content, auto) minmax(min-content, auto);height:100%;padding:.625em;overflow-x:hidden;transition:background-color .1s;-webkit-overflow-scrolling:touch}div:where(.swal2-container).swal2-backdrop-show,div:where(.swal2-container).swal2-noanimation{background:rgba(0,0,0,.4)}div:where(.swal2-container).swal2-backdrop-hide{background:rgba(0,0,0,0) !important}div:where(.swal2-container).swal2-top-start,div:where(.swal2-container).swal2-center-start,div:where(.swal2-container).swal2-bottom-start{grid-template-columns:minmax(0, 1fr) auto auto}div:where(.swal2-container).swal2-top,div:where(.swal2-container).swal2-center,div:where(.swal2-container).swal2-bottom{grid-template-columns:auto minmax(0, 1fr) auto}div:where(.swal2-container).swal2-top-end,div:where(.swal2-container).swal2-center-end,div:where(.swal2-container).swal2-bottom-end{grid-template-columns:auto auto minmax(0, 1fr)}div:where(.swal2-container).swal2-top-start>.swal2-popup{align-self:start}div:where(.swal2-container).swal2-top>.swal2-popup{grid-column:2;align-self:start;justify-self:center}div:where(.swal2-container).swal2-top-end>.swal2-popup,div:where(.swal2-container).swal2-top-right>.swal2-popup{grid-column:3;align-self:start;justify-self:end}div:where(.swal2-container).swal2-center-start>.swal2-popup,div:where(.swal2-container).swal2-center-left>.swal2-popup{grid-row:2;align-self:center}div:where(.swal2-container).swal2-center>.swal2-popup{grid-column:2;grid-row:2;align-self:center;justify-self:center}div:where(.swal2-container).swal2-center-end>.swal2-popup,div:where(.swal2-container).swal2-center-right>.swal2-popup{grid-column:3;grid-row:2;align-self:center;justify-self:end}div:where(.swal2-container).swal2-bottom-start>.swal2-popup,div:where(.swal2-container).swal2-bottom-left>.swal2-popup{grid-column:1;grid-row:3;align-self:end}div:where(.swal2-container).swal2-bottom>.swal2-popup{grid-column:2;grid-row:3;justify-self:center;align-self:end}div:where(.swal2-container).swal2-bottom-end>.swal2-popup,div:where(.swal2-container).swal2-bottom-right>.swal2-popup{grid-column:3;grid-row:3;align-self:end;justify-self:end}div:where(.swal2-container).swal2-grow-row>.swal2-popup,div:where(.swal2-container).swal2-grow-fullscreen>.swal2-popup{grid-column:1/4;width:100%}div:where(.swal2-container).swal2-grow-column>.swal2-popup,div:where(.swal2-container).swal2-grow-fullscreen>.swal2-popup{grid-row:1/4;align-self:stretch}div:where(.swal2-container).swal2-no-transition{transition:none !important}div:where(.swal2-container) div:where(.swal2-popup){display:none;position:relative;box-sizing:border-box;grid-template-columns:minmax(0, 100%);width:32em;max-width:100%;padding:0 0 1.25em;border:none;border-radius:5px;background:#fff;color:#545454;font-family:inherit;font-size:1rem}div:where(.swal2-container) div:where(.swal2-popup):focus{outline:none}div:where(.swal2-container) div:where(.swal2-popup).swal2-loading{overflow-y:hidden}div:where(.swal2-container) h2:where(.swal2-title){position:relative;max-width:100%;margin:0;padding:.8em 1em 0;color:inherit;font-size:1.875em;font-weight:600;text-align:center;text-transform:none;word-wrap:break-word}div:where(.swal2-container) div:where(.swal2-actions){display:flex;z-index:1;box-sizing:border-box;flex-wrap:wrap;align-items:center;justify-content:center;width:auto;margin:1.25em auto 0;padding:0}div:where(.swal2-container) div:where(.swal2-actions):not(.swal2-loading) .swal2-styled[disabled]{opacity:.4}div:where(.swal2-container) div:where(.swal2-actions):not(.swal2-loading) .swal2-styled:hover{background-image:linear-gradient(rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.1))}div:where(.swal2-container) div:where(.swal2-actions):not(.swal2-loading) .swal2-styled:active{background-image:linear-gradient(rgba(0, 0, 0, 0.2), rgba(0, 0, 0, 0.2))}div:where(.swal2-container) div:where(.swal2-loader){display:none;align-items:center;justify-content:center;width:2.2em;height:2.2em;margin:0 1.875em;animation:swal2-rotate-loading 1.5s linear 0s infinite normal;border-width:.25em;border-style:solid;border-radius:100%;border-color:#2778c4 rgba(0,0,0,0) #2778c4 rgba(0,0,0,0)}div:where(.swal2-container) button:where(.swal2-styled){margin:.3125em;padding:.625em 1.1em;transition:box-shadow .1s;box-shadow:0 0 0 3px rgba(0,0,0,0);font-weight:500}div:where(.swal2-container) button:where(.swal2-styled):not([disabled]){cursor:pointer}div:where(.swal2-container) button:where(.swal2-styled).swal2-confirm{border:0;border-radius:.25em;background:initial;background-color:#7066e0;color:#fff;font-size:1em}div:where(.swal2-container) button:where(.swal2-styled).swal2-confirm:focus{box-shadow:0 0 0 3px rgba(112,102,224,.5)}div:where(.swal2-container) button:where(.swal2-styled).swal2-deny{border:0;border-radius:.25em;background:initial;background-color:#dc3741;color:#fff;font-size:1em}div:where(.swal2-container) button:where(.swal2-styled).swal2-deny:focus{box-shadow:0 0 0 3px rgba(220,55,65,.5)}div:where(.swal2-container) button:where(.swal2-styled).swal2-cancel{border:0;border-radius:.25em;background:initial;background-color:#6e7881;color:#fff;font-size:1em}div:where(.swal2-container) button:where(.swal2-styled).swal2-cancel:focus{box-shadow:0 0 0 3px rgba(110,120,129,.5)}div:where(.swal2-container) button:where(.swal2-styled).swal2-default-outline:focus{box-shadow:0 0 0 3px rgba(100,150,200,.5)}div:where(.swal2-container) button:where(.swal2-styled):focus{outline:none}div:where(.swal2-container) button:where(.swal2-styled)::-moz-focus-inner{border:0}div:where(.swal2-container) div:where(.swal2-footer){margin:1em 0 0;padding:1em 1em 0;border-top:1px solid #eee;color:inherit;font-size:1em;text-align:center}div:where(.swal2-container) .swal2-timer-progress-bar-container{position:absolute;right:0;bottom:0;left:0;grid-column:auto !important;overflow:hidden;border-bottom-right-radius:5px;border-bottom-left-radius:5px}div:where(.swal2-container) div:where(.swal2-timer-progress-bar){width:100%;height:.25em;background:rgba(0,0,0,.2)}div:where(.swal2-container) img:where(.swal2-image){max-width:100%;margin:2em auto 1em}div:where(.swal2-container) button:where(.swal2-close){z-index:2;align-items:center;justify-content:center;width:1.2em;height:1.2em;margin-top:0;margin-right:0;margin-bottom:-1.2em;padding:0;overflow:hidden;transition:color .1s,box-shadow .1s;border:none;border-radius:5px;background:rgba(0,0,0,0);color:#ccc;font-family:monospace;font-size:2.5em;cursor:pointer;justify-self:end}div:where(.swal2-container) button:where(.swal2-close):hover{transform:none;background:rgba(0,0,0,0);color:#f27474}div:where(.swal2-container) button:where(.swal2-close):focus{outline:none;box-shadow:inset 0 0 0 3px rgba(100,150,200,.5)}div:where(.swal2-container) button:where(.swal2-close)::-moz-focus-inner{border:0}div:where(.swal2-container) .swal2-html-container{z-index:1;justify-content:center;margin:1em 1.6em .3em;padding:0;overflow:auto;color:inherit;font-size:1.125em;font-weight:normal;line-height:normal;text-align:center;word-wrap:break-word;word-break:break-word}div:where(.swal2-container) input:where(.swal2-input),div:where(.swal2-container) input:where(.swal2-file),div:where(.swal2-container) textarea:where(.swal2-textarea),div:where(.swal2-container) select:where(.swal2-select),div:where(.swal2-container) div:where(.swal2-radio),div:where(.swal2-container) label:where(.swal2-checkbox){margin:1em 2em 3px}div:where(.swal2-container) input:where(.swal2-input),div:where(.swal2-container) input:where(.swal2-file),div:where(.swal2-container) textarea:where(.swal2-textarea){box-sizing:border-box;width:auto;transition:border-color .1s,box-shadow .1s;border:1px solid #d9d9d9;border-radius:.1875em;background:rgba(0,0,0,0);box-shadow:inset 0 1px 1px rgba(0,0,0,.06),0 0 0 3px rgba(0,0,0,0);color:inherit;font-size:1.125em}div:where(.swal2-container) input:where(.swal2-input).swal2-inputerror,div:where(.swal2-container) input:where(.swal2-file).swal2-inputerror,div:where(.swal2-container) textarea:where(.swal2-textarea).swal2-inputerror{border-color:#f27474 !important;box-shadow:0 0 2px #f27474 !important}div:where(.swal2-container) input:where(.swal2-input):focus,div:where(.swal2-container) input:where(.swal2-file):focus,div:where(.swal2-container) textarea:where(.swal2-textarea):focus{border:1px solid #b4dbed;outline:none;box-shadow:inset 0 1px 1px rgba(0,0,0,.06),0 0 0 3px rgba(100,150,200,.5)}div:where(.swal2-container) input:where(.swal2-input)::placeholder,div:where(.swal2-container) input:where(.swal2-file)::placeholder,div:where(.swal2-container) textarea:where(.swal2-textarea)::placeholder{color:#ccc}div:where(.swal2-container) .swal2-range{margin:1em 2em 3px;background:#fff}div:where(.swal2-container) .swal2-range input{width:80%}div:where(.swal2-container) .swal2-range output{width:20%;color:inherit;font-weight:600;text-align:center}div:where(.swal2-container) .swal2-range input,div:where(.swal2-container) .swal2-range output{height:2.625em;padding:0;font-size:1.125em;line-height:2.625em}div:where(.swal2-container) .swal2-input{height:2.625em;padding:0 .75em}div:where(.swal2-container) .swal2-file{width:75%;margin-right:auto;margin-left:auto;background:rgba(0,0,0,0);font-size:1.125em}div:where(.swal2-container) .swal2-textarea{height:6.75em;padding:.75em}div:where(.swal2-container) .swal2-select{min-width:50%;max-width:100%;padding:.375em .625em;background:rgba(0,0,0,0);color:inherit;font-size:1.125em}div:where(.swal2-container) .swal2-radio,div:where(.swal2-container) .swal2-checkbox{align-items:center;justify-content:center;background:#fff;color:inherit}div:where(.swal2-container) .swal2-radio label,div:where(.swal2-container) .swal2-checkbox label{margin:0 .6em;font-size:1.125em}div:where(.swal2-container) .swal2-radio input,div:where(.swal2-container) .swal2-checkbox input{flex-shrink:0;margin:0 .4em}div:where(.swal2-container) label:where(.swal2-input-label){display:flex;justify-content:center;margin:1em auto 0}div:where(.swal2-container) div:where(.swal2-validation-message){align-items:center;justify-content:center;margin:1em 0 0;padding:.625em;overflow:hidden;background:#f0f0f0;color:#666;font-size:1em;font-weight:300}div:where(.swal2-container) div:where(.swal2-validation-message)::before{content:\\\"!\\\";display:inline-block;width:1.5em;min-width:1.5em;height:1.5em;margin:0 .625em;border-radius:50%;background-color:#f27474;color:#fff;font-weight:600;line-height:1.5em;text-align:center}div:where(.swal2-container) .swal2-progress-steps{flex-wrap:wrap;align-items:center;max-width:100%;margin:1.25em auto;padding:0;background:rgba(0,0,0,0);font-weight:600}div:where(.swal2-container) .swal2-progress-steps li{display:inline-block;position:relative}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step{z-index:20;flex-shrink:0;width:2em;height:2em;border-radius:2em;background:#2778c4;color:#fff;line-height:2em;text-align:center}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step.swal2-active-progress-step{background:#2778c4}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step{background:#add8e6;color:#fff}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step-line{background:#add8e6}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step-line{z-index:10;flex-shrink:0;width:2.5em;height:.4em;margin:0 -1px;background:#2778c4}div:where(.swal2-icon){position:relative;box-sizing:content-box;justify-content:center;width:5em;height:5em;margin:2.5em auto .6em;border:0.25em solid rgba(0,0,0,0);border-radius:50%;border-color:#000;font-family:inherit;line-height:5em;cursor:default;user-select:none}div:where(.swal2-icon) .swal2-icon-content{display:flex;align-items:center;font-size:3.75em}div:where(.swal2-icon).swal2-error{border-color:#f27474;color:#f27474}div:where(.swal2-icon).swal2-error .swal2-x-mark{position:relative;flex-grow:1}div:where(.swal2-icon).swal2-error [class^=swal2-x-mark-line]{display:block;position:absolute;top:2.3125em;width:2.9375em;height:.3125em;border-radius:.125em;background-color:#f27474}div:where(.swal2-icon).swal2-error [class^=swal2-x-mark-line][class$=left]{left:1.0625em;transform:rotate(45deg)}div:where(.swal2-icon).swal2-error [class^=swal2-x-mark-line][class$=right]{right:1em;transform:rotate(-45deg)}div:where(.swal2-icon).swal2-error.swal2-icon-show{animation:swal2-animate-error-icon .5s}div:where(.swal2-icon).swal2-error.swal2-icon-show .swal2-x-mark{animation:swal2-animate-error-x-mark .5s}div:where(.swal2-icon).swal2-warning{border-color:#facea8;color:#f8bb86}div:where(.swal2-icon).swal2-warning.swal2-icon-show{animation:swal2-animate-error-icon .5s}div:where(.swal2-icon).swal2-warning.swal2-icon-show .swal2-icon-content{animation:swal2-animate-i-mark .5s}div:where(.swal2-icon).swal2-info{border-color:#9de0f6;color:#3fc3ee}div:where(.swal2-icon).swal2-info.swal2-icon-show{animation:swal2-animate-error-icon .5s}div:where(.swal2-icon).swal2-info.swal2-icon-show .swal2-icon-content{animation:swal2-animate-i-mark .8s}div:where(.swal2-icon).swal2-question{border-color:#c9dae1;color:#87adbd}div:where(.swal2-icon).swal2-question.swal2-icon-show{animation:swal2-animate-error-icon .5s}div:where(.swal2-icon).swal2-question.swal2-icon-show .swal2-icon-content{animation:swal2-animate-question-mark .8s}div:where(.swal2-icon).swal2-success{border-color:#a5dc86;color:#a5dc86}div:where(.swal2-icon).swal2-success [class^=swal2-success-circular-line]{position:absolute;width:3.75em;height:7.5em;transform:rotate(45deg);border-radius:50%}div:where(.swal2-icon).swal2-success [class^=swal2-success-circular-line][class$=left]{top:-0.4375em;left:-2.0635em;transform:rotate(-45deg);transform-origin:3.75em 3.75em;border-radius:7.5em 0 0 7.5em}div:where(.swal2-icon).swal2-success [class^=swal2-success-circular-line][class$=right]{top:-0.6875em;left:1.875em;transform:rotate(-45deg);transform-origin:0 3.75em;border-radius:0 7.5em 7.5em 0}div:where(.swal2-icon).swal2-success .swal2-success-ring{position:absolute;z-index:2;top:-0.25em;left:-0.25em;box-sizing:content-box;width:100%;height:100%;border:.25em solid rgba(165,220,134,.3);border-radius:50%}div:where(.swal2-icon).swal2-success .swal2-success-fix{position:absolute;z-index:1;top:.5em;left:1.625em;width:.4375em;height:5.625em;transform:rotate(-45deg)}div:where(.swal2-icon).swal2-success [class^=swal2-success-line]{display:block;position:absolute;z-index:2;height:.3125em;border-radius:.125em;background-color:#a5dc86}div:where(.swal2-icon).swal2-success [class^=swal2-success-line][class$=tip]{top:2.875em;left:.8125em;width:1.5625em;transform:rotate(45deg)}div:where(.swal2-icon).swal2-success [class^=swal2-success-line][class$=long]{top:2.375em;right:.5em;width:2.9375em;transform:rotate(-45deg)}div:where(.swal2-icon).swal2-success.swal2-icon-show .swal2-success-line-tip{animation:swal2-animate-success-line-tip .75s}div:where(.swal2-icon).swal2-success.swal2-icon-show .swal2-success-line-long{animation:swal2-animate-success-line-long .75s}div:where(.swal2-icon).swal2-success.swal2-icon-show .swal2-success-circular-line-right{animation:swal2-rotate-success-circular-line 4.25s ease-in}[class^=swal2]{-webkit-tap-highlight-color:rgba(0,0,0,0)}.swal2-show{animation:swal2-show .3s}.swal2-hide{animation:swal2-hide .15s forwards}.swal2-noanimation{transition:none}.swal2-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}.swal2-rtl .swal2-close{margin-right:initial;margin-left:0}.swal2-rtl .swal2-timer-progress-bar{right:0;left:auto}@keyframes swal2-toast-show{0%{transform:translateY(-0.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(0.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0deg)}}@keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-0.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}@keyframes swal2-show{0%{transform:scale(0.7)}45%{transform:scale(1.05)}80%{transform:scale(0.95)}100%{transform:scale(1)}}@keyframes swal2-hide{0%{transform:scale(1);opacity:1}100%{transform:scale(0.5);opacity:0}}@keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-0.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.8125em;width:1.5625em}}@keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(0.4);opacity:0}50%{margin-top:1.625em;transform:scale(0.4);opacity:0}80%{margin-top:-0.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0deg);opacity:1}}@keyframes swal2-rotate-loading{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}@keyframes swal2-animate-question-mark{0%{transform:rotateY(-360deg)}100%{transform:rotateY(0)}}@keyframes swal2-animate-i-mark{0%{transform:rotateZ(45deg);opacity:0}25%{transform:rotateZ(-25deg);opacity:.4}50%{transform:rotateZ(15deg);opacity:.8}75%{transform:rotateZ(-5deg);opacity:1}100%{transform:rotateX(0);opacity:1}}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow:hidden}body.swal2-height-auto{height:auto !important}body.swal2-no-backdrop .swal2-container{background-color:rgba(0,0,0,0) !important;pointer-events:none}body.swal2-no-backdrop .swal2-container .swal2-popup{pointer-events:all}body.swal2-no-backdrop .swal2-container .swal2-modal{box-shadow:0 0 10px rgba(0,0,0,.4)}@media print{body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow-y:scroll !important}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown)>[aria-hidden=true]{display:none}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) .swal2-container{position:static !important}}body.swal2-toast-shown .swal2-container{box-sizing:border-box;width:360px;max-width:100%;background-color:rgba(0,0,0,0);pointer-events:none}body.swal2-toast-shown .swal2-container.swal2-top{inset:0 auto auto 50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-top-end,body.swal2-toast-shown .swal2-container.swal2-top-right{inset:0 0 auto auto}body.swal2-toast-shown .swal2-container.swal2-top-start,body.swal2-toast-shown .swal2-container.swal2-top-left{inset:0 auto auto 0}body.swal2-toast-shown .swal2-container.swal2-center-start,body.swal2-toast-shown .swal2-container.swal2-center-left{inset:50% auto auto 0;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-center{inset:50% auto auto 50%;transform:translate(-50%, -50%)}body.swal2-toast-shown .swal2-container.swal2-center-end,body.swal2-toast-shown .swal2-container.swal2-center-right{inset:50% 0 auto auto;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-start,body.swal2-toast-shown .swal2-container.swal2-bottom-left{inset:auto auto 0 0}body.swal2-toast-shown .swal2-container.swal2-bottom{inset:auto auto 0 50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-end,body.swal2-toast-shown .swal2-container.swal2-bottom-right{inset:auto 0 0 auto}\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dlZXRhbGVydDIvZGlzdC9zd2VldGFsZXJ0Mi5hbGwuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsS0FBNEQ7QUFDOUQsRUFBRSxDQUMwRztBQUM1RyxDQUFDLHVCQUF1Qjs7QUFFeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxhQUFhLGFBQWE7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYSxTQUFTO0FBQ3RCLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTywwQkFBMEI7O0FBRWpDO0FBQ0EsS0FBSztBQUNMOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsR0FBRztBQUNoQixlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYSxZQUFZO0FBQ3pCLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTs7QUFFQTtBQUNBLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsYUFBYSxZQUFZO0FBQ3pCLGFBQWEsYUFBYTtBQUMxQixhQUFhLFNBQVM7QUFDdEIsYUFBYSxVQUFVO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLEtBQUs7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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USxjQUFjLGVBQWUsS0FBSyxhQUFhLGFBQWEsZ0JBQWdCLDJDQUEyQyxHQUFHLFlBQVksY0FBYyxRQUFRLElBQUksWUFBWSxjQUFjLFFBQVEsSUFBSSxhQUFhLFFBQVEsZUFBZSxLQUFLLFlBQVksV0FBVyxnQkFBZ0IsOENBQThDLEdBQUcseUJBQXlCLEdBQUcseUJBQXlCLElBQUksMEJBQTBCLEtBQUssMkJBQTJCLHNDQUFzQyxHQUFHLG1CQUFtQixxQkFBcUIsVUFBVSxJQUFJLG1CQUFtQixxQkFBcUIsVUFBVSxJQUFJLG9CQUFvQixzQkFBc0IsS0FBSyxhQUFhLG1CQUFtQixXQUFXLG9DQUFvQyxHQUFHLDBCQUEwQixVQUFVLEtBQUssd0JBQXdCLFdBQVcsZ0NBQWdDLEdBQUcsdUJBQXVCLEtBQUssMEJBQTBCLHVDQUF1QyxHQUFHLDJCQUEyQixLQUFLLHNCQUFzQixnQ0FBZ0MsR0FBRyx5QkFBeUIsVUFBVSxJQUFJLDBCQUEwQixXQUFXLElBQUkseUJBQXlCLFdBQVcsSUFBSSx5QkFBeUIsVUFBVSxLQUFLLHFCQUFxQixXQUFXLGlFQUFpRSxnQkFBZ0IsdUJBQXVCLHVCQUF1Qix3Q0FBd0MsMENBQTBDLG9CQUFvQixxREFBcUQsbUJBQW1CLHFEQUFxRCxtQ0FBbUMsYUFBYSxpRUFBaUUsNkJBQTZCLG9GQUFvRixhQUFhLGtGQUFrRiw0QkFBNEIsd0NBQXdDLHNCQUFzQixZQUFZLGVBQWUsK0JBQStCLG9CQUFvQixrREFBa0Qsc0JBQXNCLDJCQUEyQiw4R0FBOEcsb0JBQW9CLCtHQUErRyxvQkFBb0IscUhBQXFILHNCQUFzQiwyQkFBMkIscURBQXFELHdCQUF3QixnQ0FBZ0Msb0hBQW9ILHNCQUFzQiwyQkFBMkIscUhBQXFILG9CQUFvQixxREFBcUQsc0JBQXNCLDJCQUEyQixvSEFBb0gsb0JBQW9CIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3N3ZWV0YWxlcnQyL2Rpc3Qvc3dlZXRhbGVydDIuYWxsLmpzPzEzMWQiXSwic291cmNlc0NvbnRlbnQiOlsiLyohXG4qIHN3ZWV0YWxlcnQyIHYxMS43LjMxXG4qIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbiovXG4oZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKSA6XG4gIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShmYWN0b3J5KSA6XG4gIChnbG9iYWwgPSB0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWxUaGlzIDogZ2xvYmFsIHx8IHNlbGYsIGdsb2JhbC5Td2VldGFsZXJ0MiA9IGZhY3RvcnkoKSk7XG59KSh0aGlzLCAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7XG5cbiAgZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHJlY2VpdmVyLCBwcml2YXRlTWFwKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBfY2xhc3NFeHRyYWN0RmllbGREZXNjcmlwdG9yKHJlY2VpdmVyLCBwcml2YXRlTWFwLCBcImdldFwiKTtcbiAgICByZXR1cm4gX2NsYXNzQXBwbHlEZXNjcmlwdG9yR2V0KHJlY2VpdmVyLCBkZXNjcmlwdG9yKTtcbiAgfVxuICBmdW5jdGlvbiBfY2xhc3NQcml2YXRlRmllbGRTZXQocmVjZWl2ZXIsIHByaXZhdGVNYXAsIHZhbHVlKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBfY2xhc3NFeHRyYWN0RmllbGREZXNjcmlwdG9yKHJlY2VpdmVyLCBwcml2YXRlTWFwLCBcInNldFwiKTtcbiAgICBfY2xhc3NBcHBseURlc2NyaXB0b3JTZXQocmVjZWl2ZXIsIGRlc2NyaXB0b3IsIHZhbHVlKTtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgZnVuY3Rpb24gX2NsYXNzRXh0cmFjdEZpZWxkRGVzY3JpcHRvcihyZWNlaXZlciwgcHJpdmF0ZU1hcCwgYWN0aW9uKSB7XG4gICAgaWYgKCFwcml2YXRlTWFwLmhhcyhyZWNlaXZlcikpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJhdHRlbXB0ZWQgdG8gXCIgKyBhY3Rpb24gKyBcIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZVwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHByaXZhdGVNYXAuZ2V0KHJlY2VpdmVyKTtcbiAgfVxuICBmdW5jdGlvbiBfY2xhc3NBcHBseURlc2NyaXB0b3JHZXQocmVjZWl2ZXIsIGRlc2NyaXB0b3IpIHtcbiAgICBpZiAoZGVzY3JpcHRvci5nZXQpIHtcbiAgICAgIHJldHVybiBkZXNjcmlwdG9yLmdldC5jYWxsKHJlY2VpdmVyKTtcbiAgICB9XG4gICAgcmV0dXJuIGRlc2NyaXB0b3IudmFsdWU7XG4gIH1cbiAgZnVuY3Rpb24gX2NsYXNzQXBwbHlEZXNjcmlwdG9yU2V0KHJlY2VpdmVyLCBkZXNjcmlwdG9yLCB2YWx1ZSkge1xuICAgIGlmIChkZXNjcmlwdG9yLnNldCkge1xuICAgICAgZGVzY3JpcHRvci5zZXQuY2FsbChyZWNlaXZlciwgdmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWRlc2NyaXB0b3Iud3JpdGFibGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGRcIik7XG4gICAgICB9XG4gICAgICBkZXNjcmlwdG9yLnZhbHVlID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIF9jaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uKG9iaiwgcHJpdmF0ZUNvbGxlY3Rpb24pIHtcbiAgICBpZiAocHJpdmF0ZUNvbGxlY3Rpb24uaGFzKG9iaikpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdFwiKTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWMob2JqLCBwcml2YXRlTWFwLCB2YWx1ZSkge1xuICAgIF9jaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uKG9iaiwgcHJpdmF0ZU1hcCk7XG4gICAgcHJpdmF0ZU1hcC5zZXQob2JqLCB2YWx1ZSk7XG4gIH1cblxuICBjb25zdCBSRVNUT1JFX0ZPQ1VTX1RJTUVPVVQgPSAxMDA7XG5cbiAgLyoqIEB0eXBlIHtHbG9iYWxTdGF0ZX0gKi9cbiAgY29uc3QgZ2xvYmFsU3RhdGUgPSB7fTtcbiAgY29uc3QgZm9jdXNQcmV2aW91c0FjdGl2ZUVsZW1lbnQgPSAoKSA9PiB7XG4gICAgaWYgKGdsb2JhbFN0YXRlLnByZXZpb3VzQWN0aXZlRWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG4gICAgICBnbG9iYWxTdGF0ZS5wcmV2aW91c0FjdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIGdsb2JhbFN0YXRlLnByZXZpb3VzQWN0aXZlRWxlbWVudCA9IG51bGw7XG4gICAgfSBlbHNlIGlmIChkb2N1bWVudC5ib2R5KSB7XG4gICAgICBkb2N1bWVudC5ib2R5LmZvY3VzKCk7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBSZXN0b3JlIHByZXZpb3VzIGFjdGl2ZSAoZm9jdXNlZCkgZWxlbWVudFxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHJldHVybkZvY3VzXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgY29uc3QgcmVzdG9yZUFjdGl2ZUVsZW1lbnQgPSByZXR1cm5Gb2N1cyA9PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgaWYgKCFyZXR1cm5Gb2N1cykge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgICAgfVxuICAgICAgY29uc3QgeCA9IHdpbmRvdy5zY3JvbGxYO1xuICAgICAgY29uc3QgeSA9IHdpbmRvdy5zY3JvbGxZO1xuICAgICAgZ2xvYmFsU3RhdGUucmVzdG9yZUZvY3VzVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBmb2N1c1ByZXZpb3VzQWN0aXZlRWxlbWVudCgpO1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9LCBSRVNUT1JFX0ZPQ1VTX1RJTUVPVVQpOyAvLyBpc3N1ZXMvOTAwXG5cbiAgICAgIHdpbmRvdy5zY3JvbGxUbyh4LCB5KTtcbiAgICB9KTtcbiAgfTtcblxuICBjb25zdCBzd2FsUHJlZml4ID0gJ3N3YWwyLSc7XG5cbiAgLyoqXG4gICAqIEB0eXBlZGVmXG4gICAqIHsgfCAnY29udGFpbmVyJ1xuICAgKiAgIHwgJ3Nob3duJ1xuICAgKiAgIHwgJ2hlaWdodC1hdXRvJ1xuICAgKiAgIHwgJ2lvc2ZpeCdcbiAgICogICB8ICdwb3B1cCdcbiAgICogICB8ICdtb2RhbCdcbiAgICogICB8ICduby1iYWNrZHJvcCdcbiAgICogICB8ICduby10cmFuc2l0aW9uJ1xuICAgKiAgIHwgJ3RvYXN0J1xuICAgKiAgIHwgJ3RvYXN0LXNob3duJ1xuICAgKiAgIHwgJ3Nob3cnXG4gICAqICAgfCAnaGlkZSdcbiAgICogICB8ICdjbG9zZSdcbiAgICogICB8ICd0aXRsZSdcbiAgICogICB8ICdodG1sLWNvbnRhaW5lcidcbiAgICogICB8ICdhY3Rpb25zJ1xuICAgKiAgIHwgJ2NvbmZpcm0nXG4gICAqICAgfCAnZGVueSdcbiAgICogICB8ICdjYW5jZWwnXG4gICAqICAgfCAnZGVmYXVsdC1vdXRsaW5lJ1xuICAgKiAgIHwgJ2Zvb3RlcidcbiAgICogICB8ICdpY29uJ1xuICAgKiAgIHwgJ2ljb24tY29udGVudCdcbiAgICogICB8ICdpbWFnZSdcbiAgICogICB8ICdpbnB1dCdcbiAgICogICB8ICdmaWxlJ1xuICAgKiAgIHwgJ3JhbmdlJ1xuICAgKiAgIHwgJ3NlbGVjdCdcbiAgICogICB8ICdyYWRpbydcbiAgICogICB8ICdjaGVja2JveCdcbiAgICogICB8ICdsYWJlbCdcbiAgICogICB8ICd0ZXh0YXJlYSdcbiAgICogICB8ICdpbnB1dGVycm9yJ1xuICAgKiAgIHwgJ2lucHV0LWxhYmVsJ1xuICAgKiAgIHwgJ3ZhbGlkYXRpb24tbWVzc2FnZSdcbiAgICogICB8ICdwcm9ncmVzcy1zdGVwcydcbiAgICogICB8ICdhY3RpdmUtcHJvZ3Jlc3Mtc3RlcCdcbiAgICogICB8ICdwcm9ncmVzcy1zdGVwJ1xuICAgKiAgIHwgJ3Byb2dyZXNzLXN0ZXAtbGluZSdcbiAgICogICB8ICdsb2FkZXInXG4gICAqICAgfCAnbG9hZGluZydcbiAgICogICB8ICdzdHlsZWQnXG4gICAqICAgfCAndG9wJ1xuICAgKiAgIHwgJ3RvcC1zdGFydCdcbiAgICogICB8ICd0b3AtZW5kJ1xuICAgKiAgIHwgJ3RvcC1sZWZ0J1xuICAgKiAgIHwgJ3RvcC1yaWdodCdcbiAgICogICB8ICdjZW50ZXInXG4gICAqICAgfCAnY2VudGVyLXN0YXJ0J1xuICAgKiAgIHwgJ2NlbnRlci1lbmQnXG4gICAqICAgfCAnY2VudGVyLWxlZnQnXG4gICAqICAgfCAnY2VudGVyLXJpZ2h0J1xuICAgKiAgIHwgJ2JvdHRvbSdcbiAgICogICB8ICdib3R0b20tc3RhcnQnXG4gICAqICAgfCAnYm90dG9tLWVuZCdcbiAgICogICB8ICdib3R0b20tbGVmdCdcbiAgICogICB8ICdib3R0b20tcmlnaHQnXG4gICAqICAgfCAnZ3Jvdy1yb3cnXG4gICAqICAgfCAnZ3Jvdy1jb2x1bW4nXG4gICAqICAgfCAnZ3Jvdy1mdWxsc2NyZWVuJ1xuICAgKiAgIHwgJ3J0bCdcbiAgICogICB8ICd0aW1lci1wcm9ncmVzcy1iYXInXG4gICAqICAgfCAndGltZXItcHJvZ3Jlc3MtYmFyLWNvbnRhaW5lcidcbiAgICogICB8ICdzY3JvbGxiYXItbWVhc3VyZSdcbiAgICogICB8ICdpY29uLXN1Y2Nlc3MnXG4gICAqICAgfCAnaWNvbi13YXJuaW5nJ1xuICAgKiAgIHwgJ2ljb24taW5mbydcbiAgICogICB8ICdpY29uLXF1ZXN0aW9uJ1xuICAgKiAgIHwgJ2ljb24tZXJyb3InXG4gICAqIH0gU3dhbENsYXNzXG4gICAqIEB0eXBlZGVmIHtSZWNvcmQ8U3dhbENsYXNzLCBzdHJpbmc+fSBTd2FsQ2xhc3Nlc1xuICAgKi9cblxuICAvKipcbiAgICogQHR5cGVkZWYgeydzdWNjZXNzJyB8ICd3YXJuaW5nJyB8ICdpbmZvJyB8ICdxdWVzdGlvbicgfCAnZXJyb3InfSBTd2FsSWNvblxuICAgKiBAdHlwZWRlZiB7UmVjb3JkPFN3YWxJY29uLCBzdHJpbmc+fSBTd2FsSWNvbnNcbiAgICovXG5cbiAgLyoqIEB0eXBlIHtTd2FsQ2xhc3NbXX0gKi9cbiAgY29uc3QgY2xhc3NOYW1lcyA9IFsnY29udGFpbmVyJywgJ3Nob3duJywgJ2hlaWdodC1hdXRvJywgJ2lvc2ZpeCcsICdwb3B1cCcsICdtb2RhbCcsICduby1iYWNrZHJvcCcsICduby10cmFuc2l0aW9uJywgJ3RvYXN0JywgJ3RvYXN0LXNob3duJywgJ3Nob3cnLCAnaGlkZScsICdjbG9zZScsICd0aXRsZScsICdodG1sLWNvbnRhaW5lcicsICdhY3Rpb25zJywgJ2NvbmZpcm0nLCAnZGVueScsICdjYW5jZWwnLCAnZGVmYXVsdC1vdXRsaW5lJywgJ2Zvb3RlcicsICdpY29uJywgJ2ljb24tY29udGVudCcsICdpbWFnZScsICdpbnB1dCcsICdmaWxlJywgJ3JhbmdlJywgJ3NlbGVjdCcsICdyYWRpbycsICdjaGVja2JveCcsICdsYWJlbCcsICd0ZXh0YXJlYScsICdpbnB1dGVycm9yJywgJ2lucHV0LWxhYmVsJywgJ3ZhbGlkYXRpb24tbWVzc2FnZScsICdwcm9ncmVzcy1zdGVwcycsICdhY3RpdmUtcHJvZ3Jlc3Mtc3RlcCcsICdwcm9ncmVzcy1zdGVwJywgJ3Byb2dyZXNzLXN0ZXAtbGluZScsICdsb2FkZXInLCAnbG9hZGluZycsICdzdHlsZWQnLCAndG9wJywgJ3RvcC1zdGFydCcsICd0b3AtZW5kJywgJ3RvcC1sZWZ0JywgJ3RvcC1yaWdodCcsICdjZW50ZXInLCAnY2VudGVyLXN0YXJ0JywgJ2NlbnRlci1lbmQnLCAnY2VudGVyLWxlZnQnLCAnY2VudGVyLXJpZ2h0JywgJ2JvdHRvbScsICdib3R0b20tc3RhcnQnLCAnYm90dG9tLWVuZCcsICdib3R0b20tbGVmdCcsICdib3R0b20tcmlnaHQnLCAnZ3Jvdy1yb3cnLCAnZ3Jvdy1jb2x1bW4nLCAnZ3Jvdy1mdWxsc2NyZWVuJywgJ3J0bCcsICd0aW1lci1wcm9ncmVzcy1iYXInLCAndGltZXItcHJvZ3Jlc3MtYmFyLWNvbnRhaW5lcicsICdzY3JvbGxiYXItbWVhc3VyZScsICdpY29uLXN1Y2Nlc3MnLCAnaWNvbi13YXJuaW5nJywgJ2ljb24taW5mbycsICdpY29uLXF1ZXN0aW9uJywgJ2ljb24tZXJyb3InXTtcbiAgY29uc3Qgc3dhbENsYXNzZXMgPSBjbGFzc05hbWVzLnJlZHVjZSgoYWNjLCBjbGFzc05hbWUpID0+IHtcbiAgICBhY2NbY2xhc3NOYW1lXSA9IHN3YWxQcmVmaXggKyBjbGFzc05hbWU7XG4gICAgcmV0dXJuIGFjYztcbiAgfSwgLyoqIEB0eXBlIHtTd2FsQ2xhc3Nlc30gKi97fSk7XG5cbiAgLyoqIEB0eXBlIHtTd2FsSWNvbltdfSAqL1xuICBjb25zdCBpY29ucyA9IFsnc3VjY2VzcycsICd3YXJuaW5nJywgJ2luZm8nLCAncXVlc3Rpb24nLCAnZXJyb3InXTtcbiAgY29uc3QgaWNvblR5cGVzID0gaWNvbnMucmVkdWNlKChhY2MsIGljb24pID0+IHtcbiAgICBhY2NbaWNvbl0gPSBzd2FsUHJlZml4ICsgaWNvbjtcbiAgICByZXR1cm4gYWNjO1xuICB9LCAvKiogQHR5cGUge1N3YWxJY29uc30gKi97fSk7XG5cbiAgY29uc3QgY29uc29sZVByZWZpeCA9ICdTd2VldEFsZXJ0MjonO1xuXG4gIC8qKlxuICAgKiBDYXBpdGFsaXplIHRoZSBmaXJzdCBsZXR0ZXIgb2YgYSBzdHJpbmdcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgY29uc3QgY2FwaXRhbGl6ZUZpcnN0TGV0dGVyID0gc3RyID0+IHN0ci5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN0ci5zbGljZSgxKTtcblxuICAvKipcbiAgICogU3RhbmRhcmRpemUgY29uc29sZSB3YXJuaW5nc1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IHN0cmluZ1tdfSBtZXNzYWdlXG4gICAqL1xuICBjb25zdCB3YXJuID0gbWVzc2FnZSA9PiB7XG4gICAgY29uc29sZS53YXJuKFwiXCIuY29uY2F0KGNvbnNvbGVQcmVmaXgsIFwiIFwiKS5jb25jYXQodHlwZW9mIG1lc3NhZ2UgPT09ICdvYmplY3QnID8gbWVzc2FnZS5qb2luKCcgJykgOiBtZXNzYWdlKSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFN0YW5kYXJkaXplIGNvbnNvbGUgZXJyb3JzXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXG4gICAqL1xuICBjb25zdCBlcnJvciA9IG1lc3NhZ2UgPT4ge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJcIi5jb25jYXQoY29uc29sZVByZWZpeCwgXCIgXCIpLmNvbmNhdChtZXNzYWdlKSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFByaXZhdGUgZ2xvYmFsIHN0YXRlIGZvciBgd2Fybk9uY2VgXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmdbXX1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIGNvbnN0IHByZXZpb3VzV2Fybk9uY2VNZXNzYWdlcyA9IFtdO1xuXG4gIC8qKlxuICAgKiBTaG93IGEgY29uc29sZSB3YXJuaW5nLCBidXQgb25seSBpZiBpdCBoYXNuJ3QgYWxyZWFkeSBiZWVuIHNob3duXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXG4gICAqL1xuICBjb25zdCB3YXJuT25jZSA9IG1lc3NhZ2UgPT4ge1xuICAgIGlmICghcHJldmlvdXNXYXJuT25jZU1lc3NhZ2VzLmluY2x1ZGVzKG1lc3NhZ2UpKSB7XG4gICAgICBwcmV2aW91c1dhcm5PbmNlTWVzc2FnZXMucHVzaChtZXNzYWdlKTtcbiAgICAgIHdhcm4obWVzc2FnZSk7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBTaG93IGEgb25lLXRpbWUgY29uc29sZSB3YXJuaW5nIGFib3V0IGRlcHJlY2F0ZWQgcGFyYW1zL21ldGhvZHNcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGRlcHJlY2F0ZWRQYXJhbVxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlSW5zdGVhZFxuICAgKi9cbiAgY29uc3Qgd2FybkFib3V0RGVwcmVjYXRpb24gPSAoZGVwcmVjYXRlZFBhcmFtLCB1c2VJbnN0ZWFkKSA9PiB7XG4gICAgd2Fybk9uY2UoXCJcXFwiXCIuY29uY2F0KGRlcHJlY2F0ZWRQYXJhbSwgXCJcXFwiIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciByZWxlYXNlLiBQbGVhc2UgdXNlIFxcXCJcIikuY29uY2F0KHVzZUluc3RlYWQsIFwiXFxcIiBpbnN0ZWFkLlwiKSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIElmIGBhcmdgIGlzIGEgZnVuY3Rpb24sIGNhbGwgaXQgKHdpdGggbm8gYXJndW1lbnRzIG9yIGNvbnRleHQpIGFuZCByZXR1cm4gdGhlIHJlc3VsdC5cbiAgICogT3RoZXJ3aXNlLCBqdXN0IHBhc3MgdGhlIHZhbHVlIHRocm91Z2hcbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbiB8IGFueX0gYXJnXG4gICAqIEByZXR1cm5zIHthbnl9XG4gICAqL1xuICBjb25zdCBjYWxsSWZGdW5jdGlvbiA9IGFyZyA9PiB0eXBlb2YgYXJnID09PSAnZnVuY3Rpb24nID8gYXJnKCkgOiBhcmc7XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7YW55fSBhcmdcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBjb25zdCBoYXNUb1Byb21pc2VGbiA9IGFyZyA9PiBhcmcgJiYgdHlwZW9mIGFyZy50b1Byb21pc2UgPT09ICdmdW5jdGlvbic7XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7YW55fSBhcmdcbiAgICogQHJldHVybnMge1Byb21pc2U8YW55Pn1cbiAgICovXG4gIGNvbnN0IGFzUHJvbWlzZSA9IGFyZyA9PiBoYXNUb1Byb21pc2VGbihhcmcpID8gYXJnLnRvUHJvbWlzZSgpIDogUHJvbWlzZS5yZXNvbHZlKGFyZyk7XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7YW55fSBhcmdcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBjb25zdCBpc1Byb21pc2UgPSBhcmcgPT4gYXJnICYmIFByb21pc2UucmVzb2x2ZShhcmcpID09PSBhcmc7XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHBvcHVwIGNvbnRhaW5lciB3aGljaCBjb250YWlucyB0aGUgYmFja2Ryb3AgYW5kIHRoZSBwb3B1cCBpdHNlbGYuXG4gICAqXG4gICAqIEByZXR1cm5zIHtIVE1MRWxlbWVudCB8IG51bGx9XG4gICAqL1xuICBjb25zdCBnZXRDb250YWluZXIgPSAoKSA9PiBkb2N1bWVudC5ib2R5LnF1ZXJ5U2VsZWN0b3IoXCIuXCIuY29uY2F0KHN3YWxDbGFzc2VzLmNvbnRhaW5lcikpO1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3JTdHJpbmdcbiAgICogQHJldHVybnMge0hUTUxFbGVtZW50IHwgbnVsbH1cbiAgICovXG4gIGNvbnN0IGVsZW1lbnRCeVNlbGVjdG9yID0gc2VsZWN0b3JTdHJpbmcgPT4ge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IGdldENvbnRhaW5lcigpO1xuICAgIHJldHVybiBjb250YWluZXIgPyBjb250YWluZXIucXVlcnlTZWxlY3RvcihzZWxlY3RvclN0cmluZykgOiBudWxsO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2xhc3NOYW1lXG4gICAqIEByZXR1cm5zIHtIVE1MRWxlbWVudCB8IG51bGx9XG4gICAqL1xuICBjb25zdCBlbGVtZW50QnlDbGFzcyA9IGNsYXNzTmFtZSA9PiB7XG4gICAgcmV0dXJuIGVsZW1lbnRCeVNlbGVjdG9yKFwiLlwiLmNvbmNhdChjbGFzc05hbWUpKTtcbiAgfTtcblxuICAvKipcbiAgICogQHJldHVybnMge0hUTUxFbGVtZW50IHwgbnVsbH1cbiAgICovXG4gIGNvbnN0IGdldFBvcHVwID0gKCkgPT4gZWxlbWVudEJ5Q2xhc3Moc3dhbENsYXNzZXMucG9wdXApO1xuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7SFRNTEVsZW1lbnQgfCBudWxsfVxuICAgKi9cbiAgY29uc3QgZ2V0SWNvbiA9ICgpID0+IGVsZW1lbnRCeUNsYXNzKHN3YWxDbGFzc2VzLmljb24pO1xuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7SFRNTEVsZW1lbnQgfCBudWxsfVxuICAgKi9cbiAgY29uc3QgZ2V0SWNvbkNvbnRlbnQgPSAoKSA9PiBlbGVtZW50QnlDbGFzcyhzd2FsQ2xhc3Nlc1snaWNvbi1jb250ZW50J10pO1xuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7SFRNTEVsZW1lbnQgfCBudWxsfVxuICAgKi9cbiAgY29uc3QgZ2V0VGl0bGUgPSAoKSA9PiBlbGVtZW50QnlDbGFzcyhzd2FsQ2xhc3Nlcy50aXRsZSk7XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtIVE1MRWxlbWVudCB8IG51bGx9XG4gICAqL1xuICBjb25zdCBnZXRIdG1sQ29udGFpbmVyID0gKCkgPT4gZWxlbWVudEJ5Q2xhc3Moc3dhbENsYXNzZXNbJ2h0bWwtY29udGFpbmVyJ10pO1xuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7SFRNTEVsZW1lbnQgfCBudWxsfVxuICAgKi9cbiAgY29uc3QgZ2V0SW1hZ2UgPSAoKSA9PiBlbGVtZW50QnlDbGFzcyhzd2FsQ2xhc3Nlcy5pbWFnZSk7XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtIVE1MRWxlbWVudCB8IG51bGx9XG4gICAqL1xuICBjb25zdCBnZXRQcm9ncmVzc1N0ZXBzID0gKCkgPT4gZWxlbWVudEJ5Q2xhc3Moc3dhbENsYXNzZXNbJ3Byb2dyZXNzLXN0ZXBzJ10pO1xuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7SFRNTEVsZW1lbnQgfCBudWxsfVxuICAgKi9cbiAgY29uc3QgZ2V0VmFsaWRhdGlvbk1lc3NhZ2UgPSAoKSA9PiBlbGVtZW50QnlDbGFzcyhzd2FsQ2xhc3Nlc1sndmFsaWRhdGlvbi1tZXNzYWdlJ10pO1xuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7SFRNTEJ1dHRvbkVsZW1lbnQgfCBudWxsfVxuICAgKi9cbiAgY29uc3QgZ2V0Q29uZmlybUJ1dHRvbiA9ICgpID0+IC8qKiBAdHlwZSB7SFRNTEJ1dHRvbkVsZW1lbnR9ICovZWxlbWVudEJ5U2VsZWN0b3IoXCIuXCIuY29uY2F0KHN3YWxDbGFzc2VzLmFjdGlvbnMsIFwiIC5cIikuY29uY2F0KHN3YWxDbGFzc2VzLmNvbmZpcm0pKTtcblxuICAvKipcbiAgICogQHJldHVybnMge0hUTUxCdXR0b25FbGVtZW50IHwgbnVsbH1cbiAgICovXG4gIGNvbnN0IGdldENhbmNlbEJ1dHRvbiA9ICgpID0+IC8qKiBAdHlwZSB7SFRNTEJ1dHRvbkVsZW1lbnR9ICovZWxlbWVudEJ5U2VsZWN0b3IoXCIuXCIuY29uY2F0KHN3YWxDbGFzc2VzLmFjdGlvbnMsIFwiIC5cIikuY29uY2F0KHN3YWxDbGFzc2VzLmNhbmNlbCkpO1xuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7SFRNTEJ1dHRvbkVsZW1lbnQgfCBudWxsfVxuICAgKi9cbiAgY29uc3QgZ2V0RGVueUJ1dHRvbiA9ICgpID0+IC8qKiBAdHlwZSB7SFRNTEJ1dHRvbkVsZW1lbnR9ICovZWxlbWVudEJ5U2VsZWN0b3IoXCIuXCIuY29uY2F0KHN3YWxDbGFzc2VzLmFjdGlvbnMsIFwiIC5cIikuY29uY2F0KHN3YWxDbGFzc2VzLmRlbnkpKTtcblxuICAvKipcbiAgICogQHJldHVybnMge0hUTUxFbGVtZW50IHwgbnVsbH1cbiAgICovXG4gIGNvbnN0IGdldElucHV0TGFiZWwgPSAoKSA9PiBlbGVtZW50QnlDbGFzcyhzd2FsQ2xhc3Nlc1snaW5wdXQtbGFiZWwnXSk7XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtIVE1MRWxlbWVudCB8IG51bGx9XG4gICAqL1xuICBjb25zdCBnZXRMb2FkZXIgPSAoKSA9PiBlbGVtZW50QnlTZWxlY3RvcihcIi5cIi5jb25jYXQoc3dhbENsYXNzZXMubG9hZGVyKSk7XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtIVE1MRWxlbWVudCB8IG51bGx9XG4gICAqL1xuICBjb25zdCBnZXRBY3Rpb25zID0gKCkgPT4gZWxlbWVudEJ5Q2xhc3Moc3dhbENsYXNzZXMuYWN0aW9ucyk7XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtIVE1MRWxlbWVudCB8IG51bGx9XG4gICAqL1xuICBjb25zdCBnZXRGb290ZXIgPSAoKSA9PiBlbGVtZW50QnlDbGFzcyhzd2FsQ2xhc3Nlcy5mb290ZXIpO1xuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7SFRNTEVsZW1lbnQgfCBudWxsfVxuICAgKi9cbiAgY29uc3QgZ2V0VGltZXJQcm9ncmVzc0JhciA9ICgpID0+IGVsZW1lbnRCeUNsYXNzKHN3YWxDbGFzc2VzWyd0aW1lci1wcm9ncmVzcy1iYXInXSk7XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtIVE1MRWxlbWVudCB8IG51bGx9XG4gICAqL1xuICBjb25zdCBnZXRDbG9zZUJ1dHRvbiA9ICgpID0+IGVsZW1lbnRCeUNsYXNzKHN3YWxDbGFzc2VzLmNsb3NlKTtcblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vamt1cC9mb2N1c2FibGUvYmxvYi9tYXN0ZXIvaW5kZXguanNcbiAgY29uc3QgZm9jdXNhYmxlID0gXCJcXG4gIGFbaHJlZl0sXFxuICBhcmVhW2hyZWZdLFxcbiAgaW5wdXQ6bm90KFtkaXNhYmxlZF0pLFxcbiAgc2VsZWN0Om5vdChbZGlzYWJsZWRdKSxcXG4gIHRleHRhcmVhOm5vdChbZGlzYWJsZWRdKSxcXG4gIGJ1dHRvbjpub3QoW2Rpc2FibGVkXSksXFxuICBpZnJhbWUsXFxuICBvYmplY3QsXFxuICBlbWJlZCxcXG4gIFt0YWJpbmRleD1cXFwiMFxcXCJdLFxcbiAgW2NvbnRlbnRlZGl0YWJsZV0sXFxuICBhdWRpb1tjb250cm9sc10sXFxuICB2aWRlb1tjb250cm9sc10sXFxuICBzdW1tYXJ5XFxuXCI7XG4gIC8qKlxuICAgKiBAcmV0dXJucyB7SFRNTEVsZW1lbnRbXX1cbiAgICovXG4gIGNvbnN0IGdldEZvY3VzYWJsZUVsZW1lbnRzID0gKCkgPT4ge1xuICAgIGNvbnN0IHBvcHVwID0gZ2V0UG9wdXAoKTtcbiAgICBpZiAoIXBvcHVwKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIC8qKiBAdHlwZSB7Tm9kZUxpc3RPZjxIVE1MRWxlbWVudD59ICovXG4gICAgY29uc3QgZm9jdXNhYmxlRWxlbWVudHNXaXRoVGFiaW5kZXggPSBwb3B1cC5xdWVyeVNlbGVjdG9yQWxsKCdbdGFiaW5kZXhdOm5vdChbdGFiaW5kZXg9XCItMVwiXSk6bm90KFt0YWJpbmRleD1cIjBcIl0pJyk7XG4gICAgY29uc3QgZm9jdXNhYmxlRWxlbWVudHNXaXRoVGFiaW5kZXhTb3J0ZWQgPSBBcnJheS5mcm9tKGZvY3VzYWJsZUVsZW1lbnRzV2l0aFRhYmluZGV4KVxuICAgIC8vIHNvcnQgYWNjb3JkaW5nIHRvIHRhYmluZGV4XG4gICAgLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIGNvbnN0IHRhYmluZGV4QSA9IHBhcnNlSW50KGEuZ2V0QXR0cmlidXRlKCd0YWJpbmRleCcpIHx8ICcwJyk7XG4gICAgICBjb25zdCB0YWJpbmRleEIgPSBwYXJzZUludChiLmdldEF0dHJpYnV0ZSgndGFiaW5kZXgnKSB8fCAnMCcpO1xuICAgICAgaWYgKHRhYmluZGV4QSA+IHRhYmluZGV4Qikge1xuICAgICAgICByZXR1cm4gMTtcbiAgICAgIH0gZWxzZSBpZiAodGFiaW5kZXhBIDwgdGFiaW5kZXhCKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAwO1xuICAgIH0pO1xuXG4gICAgLyoqIEB0eXBlIHtOb2RlTGlzdE9mPEhUTUxFbGVtZW50Pn0gKi9cbiAgICBjb25zdCBvdGhlckZvY3VzYWJsZUVsZW1lbnRzID0gcG9wdXAucXVlcnlTZWxlY3RvckFsbChmb2N1c2FibGUpO1xuICAgIGNvbnN0IG90aGVyRm9jdXNhYmxlRWxlbWVudHNGaWx0ZXJlZCA9IEFycmF5LmZyb20ob3RoZXJGb2N1c2FibGVFbGVtZW50cykuZmlsdGVyKGVsID0+IGVsLmdldEF0dHJpYnV0ZSgndGFiaW5kZXgnKSAhPT0gJy0xJyk7XG4gICAgcmV0dXJuIFsuLi5uZXcgU2V0KGZvY3VzYWJsZUVsZW1lbnRzV2l0aFRhYmluZGV4U29ydGVkLmNvbmNhdChvdGhlckZvY3VzYWJsZUVsZW1lbnRzRmlsdGVyZWQpKV0uZmlsdGVyKGVsID0+IGlzVmlzaWJsZSQxKGVsKSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgY29uc3QgaXNNb2RhbCA9ICgpID0+IHtcbiAgICByZXR1cm4gaGFzQ2xhc3MoZG9jdW1lbnQuYm9keSwgc3dhbENsYXNzZXMuc2hvd24pICYmICFoYXNDbGFzcyhkb2N1bWVudC5ib2R5LCBzd2FsQ2xhc3Nlc1sndG9hc3Qtc2hvd24nXSkgJiYgIWhhc0NsYXNzKGRvY3VtZW50LmJvZHksIHN3YWxDbGFzc2VzWyduby1iYWNrZHJvcCddKTtcbiAgfTtcblxuICAvKipcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBjb25zdCBpc1RvYXN0ID0gKCkgPT4ge1xuICAgIGNvbnN0IHBvcHVwID0gZ2V0UG9wdXAoKTtcbiAgICBpZiAoIXBvcHVwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBoYXNDbGFzcyhwb3B1cCwgc3dhbENsYXNzZXMudG9hc3QpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGNvbnN0IGlzTG9hZGluZyA9ICgpID0+IHtcbiAgICBjb25zdCBwb3B1cCA9IGdldFBvcHVwKCk7XG4gICAgaWYgKCFwb3B1cCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gcG9wdXAuaGFzQXR0cmlidXRlKCdkYXRhLWxvYWRpbmcnKTtcbiAgfTtcblxuICAvKipcbiAgICogU2VjdXJlbHkgc2V0IGlubmVySFRNTCBvZiBhbiBlbGVtZW50XG4gICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9zd2VldGFsZXJ0Mi9zd2VldGFsZXJ0Mi9pc3N1ZXMvMTkyNlxuICAgKlxuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBodG1sXG4gICAqL1xuICBjb25zdCBzZXRJbm5lckh0bWwgPSAoZWxlbSwgaHRtbCkgPT4ge1xuICAgIGVsZW0udGV4dENvbnRlbnQgPSAnJztcbiAgICBpZiAoaHRtbCkge1xuICAgICAgY29uc3QgcGFyc2VyID0gbmV3IERPTVBhcnNlcigpO1xuICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VyLnBhcnNlRnJvbVN0cmluZyhodG1sLCBcInRleHQvaHRtbFwiKTtcbiAgICAgIGNvbnN0IGhlYWQgPSBwYXJzZWQucXVlcnlTZWxlY3RvcignaGVhZCcpO1xuICAgICAgaGVhZCAmJiBBcnJheS5mcm9tKGhlYWQuY2hpbGROb2RlcykuZm9yRWFjaChjaGlsZCA9PiB7XG4gICAgICAgIGVsZW0uYXBwZW5kQ2hpbGQoY2hpbGQpO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBib2R5ID0gcGFyc2VkLnF1ZXJ5U2VsZWN0b3IoJ2JvZHknKTtcbiAgICAgIGJvZHkgJiYgQXJyYXkuZnJvbShib2R5LmNoaWxkTm9kZXMpLmZvckVhY2goY2hpbGQgPT4ge1xuICAgICAgICBpZiAoY2hpbGQgaW5zdGFuY2VvZiBIVE1MVmlkZW9FbGVtZW50IHx8IGNoaWxkIGluc3RhbmNlb2YgSFRNTEF1ZGlvRWxlbWVudCkge1xuICAgICAgICAgIGVsZW0uYXBwZW5kQ2hpbGQoY2hpbGQuY2xvbmVOb2RlKHRydWUpKTsgLy8gaHR0cHM6Ly9naXRodWIuY29tL3N3ZWV0YWxlcnQyL3N3ZWV0YWxlcnQyL2lzc3Vlcy8yNTA3XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZWxlbS5hcHBlbmRDaGlsZChjaGlsZCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbVxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2xhc3NOYW1lXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgY29uc3QgaGFzQ2xhc3MgPSAoZWxlbSwgY2xhc3NOYW1lKSA9PiB7XG4gICAgaWYgKCFjbGFzc05hbWUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgY2xhc3NMaXN0ID0gY2xhc3NOYW1lLnNwbGl0KC9cXHMrLyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjbGFzc0xpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICghZWxlbS5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NMaXN0W2ldKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtXG4gICAqIEBwYXJhbSB7U3dlZXRBbGVydE9wdGlvbnN9IHBhcmFtc1xuICAgKi9cbiAgY29uc3QgcmVtb3ZlQ3VzdG9tQ2xhc3NlcyA9IChlbGVtLCBwYXJhbXMpID0+IHtcbiAgICBBcnJheS5mcm9tKGVsZW0uY2xhc3NMaXN0KS5mb3JFYWNoKGNsYXNzTmFtZSA9PiB7XG4gICAgICBpZiAoIU9iamVjdC52YWx1ZXMoc3dhbENsYXNzZXMpLmluY2x1ZGVzKGNsYXNzTmFtZSkgJiYgIU9iamVjdC52YWx1ZXMoaWNvblR5cGVzKS5pbmNsdWRlcyhjbGFzc05hbWUpICYmICFPYmplY3QudmFsdWVzKHBhcmFtcy5zaG93Q2xhc3MgfHwge30pLmluY2x1ZGVzKGNsYXNzTmFtZSkpIHtcbiAgICAgICAgZWxlbS5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzTmFtZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1cbiAgICogQHBhcmFtIHtTd2VldEFsZXJ0T3B0aW9uc30gcGFyYW1zXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjbGFzc05hbWVcbiAgICovXG4gIGNvbnN0IGFwcGx5Q3VzdG9tQ2xhc3MgPSAoZWxlbSwgcGFyYW1zLCBjbGFzc05hbWUpID0+IHtcbiAgICByZW1vdmVDdXN0b21DbGFzc2VzKGVsZW0sIHBhcmFtcyk7XG4gICAgaWYgKHBhcmFtcy5jdXN0b21DbGFzcyAmJiBwYXJhbXMuY3VzdG9tQ2xhc3NbY2xhc3NOYW1lXSkge1xuICAgICAgaWYgKHR5cGVvZiBwYXJhbXMuY3VzdG9tQ2xhc3NbY2xhc3NOYW1lXSAhPT0gJ3N0cmluZycgJiYgIXBhcmFtcy5jdXN0b21DbGFzc1tjbGFzc05hbWVdLmZvckVhY2gpIHtcbiAgICAgICAgd2FybihcIkludmFsaWQgdHlwZSBvZiBjdXN0b21DbGFzcy5cIi5jb25jYXQoY2xhc3NOYW1lLCBcIiEgRXhwZWN0ZWQgc3RyaW5nIG9yIGl0ZXJhYmxlIG9iamVjdCwgZ290IFxcXCJcIikuY29uY2F0KHR5cGVvZiBwYXJhbXMuY3VzdG9tQ2xhc3NbY2xhc3NOYW1lXSwgXCJcXFwiXCIpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgYWRkQ2xhc3MoZWxlbSwgcGFyYW1zLmN1c3RvbUNsYXNzW2NsYXNzTmFtZV0pO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcG9wdXBcbiAgICogQHBhcmFtIHtpbXBvcnQoJy4vcmVuZGVyZXJzL3JlbmRlcklucHV0JykuSW5wdXRDbGFzcyB8IFN3ZWV0QWxlcnRJbnB1dH0gaW5wdXRDbGFzc1xuICAgKiBAcmV0dXJucyB7SFRNTElucHV0RWxlbWVudCB8IG51bGx9XG4gICAqL1xuICBjb25zdCBnZXRJbnB1dCQxID0gKHBvcHVwLCBpbnB1dENsYXNzKSA9PiB7XG4gICAgaWYgKCFpbnB1dENsYXNzKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgc3dpdGNoIChpbnB1dENsYXNzKSB7XG4gICAgICBjYXNlICdzZWxlY3QnOlxuICAgICAgY2FzZSAndGV4dGFyZWEnOlxuICAgICAgY2FzZSAnZmlsZSc6XG4gICAgICAgIHJldHVybiBwb3B1cC5xdWVyeVNlbGVjdG9yKFwiLlwiLmNvbmNhdChzd2FsQ2xhc3Nlcy5wb3B1cCwgXCIgPiAuXCIpLmNvbmNhdChzd2FsQ2xhc3Nlc1tpbnB1dENsYXNzXSkpO1xuICAgICAgY2FzZSAnY2hlY2tib3gnOlxuICAgICAgICByZXR1cm4gcG9wdXAucXVlcnlTZWxlY3RvcihcIi5cIi5jb25jYXQoc3dhbENsYXNzZXMucG9wdXAsIFwiID4gLlwiKS5jb25jYXQoc3dhbENsYXNzZXMuY2hlY2tib3gsIFwiIGlucHV0XCIpKTtcbiAgICAgIGNhc2UgJ3JhZGlvJzpcbiAgICAgICAgcmV0dXJuIHBvcHVwLnF1ZXJ5U2VsZWN0b3IoXCIuXCIuY29uY2F0KHN3YWxDbGFzc2VzLnBvcHVwLCBcIiA+IC5cIikuY29uY2F0KHN3YWxDbGFzc2VzLnJhZGlvLCBcIiBpbnB1dDpjaGVja2VkXCIpKSB8fCBwb3B1cC5xdWVyeVNlbGVjdG9yKFwiLlwiLmNvbmNhdChzd2FsQ2xhc3Nlcy5wb3B1cCwgXCIgPiAuXCIpLmNvbmNhdChzd2FsQ2xhc3Nlcy5yYWRpbywgXCIgaW5wdXQ6Zmlyc3QtY2hpbGRcIikpO1xuICAgICAgY2FzZSAncmFuZ2UnOlxuICAgICAgICByZXR1cm4gcG9wdXAucXVlcnlTZWxlY3RvcihcIi5cIi5jb25jYXQoc3dhbENsYXNzZXMucG9wdXAsIFwiID4gLlwiKS5jb25jYXQoc3dhbENsYXNzZXMucmFuZ2UsIFwiIGlucHV0XCIpKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBwb3B1cC5xdWVyeVNlbGVjdG9yKFwiLlwiLmNvbmNhdChzd2FsQ2xhc3Nlcy5wb3B1cCwgXCIgPiAuXCIpLmNvbmNhdChzd2FsQ2xhc3Nlcy5pbnB1dCkpO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogQHBhcmFtIHtIVE1MSW5wdXRFbGVtZW50IHwgSFRNTFRleHRBcmVhRWxlbWVudCB8IEhUTUxTZWxlY3RFbGVtZW50fSBpbnB1dFxuICAgKi9cbiAgY29uc3QgZm9jdXNJbnB1dCA9IGlucHV0ID0+IHtcbiAgICBpbnB1dC5mb2N1cygpO1xuXG4gICAgLy8gcGxhY2UgY3Vyc29yIGF0IGVuZCBvZiB0ZXh0IGluIHRleHQgaW5wdXRcbiAgICBpZiAoaW5wdXQudHlwZSAhPT0gJ2ZpbGUnKSB7XG4gICAgICAvLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yMzQ1OTE1XG4gICAgICBjb25zdCB2YWwgPSBpbnB1dC52YWx1ZTtcbiAgICAgIGlucHV0LnZhbHVlID0gJyc7XG4gICAgICBpbnB1dC52YWx1ZSA9IHZhbDtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnQgfCBIVE1MRWxlbWVudFtdIHwgbnVsbH0gdGFyZ2V0XG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgc3RyaW5nW10gfCByZWFkb25seSBzdHJpbmdbXSB8IHVuZGVmaW5lZH0gY2xhc3NMaXN0XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gY29uZGl0aW9uXG4gICAqL1xuICBjb25zdCB0b2dnbGVDbGFzcyA9ICh0YXJnZXQsIGNsYXNzTGlzdCwgY29uZGl0aW9uKSA9PiB7XG4gICAgaWYgKCF0YXJnZXQgfHwgIWNsYXNzTGlzdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGNsYXNzTGlzdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNsYXNzTGlzdCA9IGNsYXNzTGlzdC5zcGxpdCgvXFxzKy8pLmZpbHRlcihCb29sZWFuKTtcbiAgICB9XG4gICAgY2xhc3NMaXN0LmZvckVhY2goY2xhc3NOYW1lID0+IHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHRhcmdldCkpIHtcbiAgICAgICAgdGFyZ2V0LmZvckVhY2goZWxlbSA9PiB7XG4gICAgICAgICAgY29uZGl0aW9uID8gZWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSkgOiBlbGVtLmNsYXNzTGlzdC5yZW1vdmUoY2xhc3NOYW1lKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25kaXRpb24gPyB0YXJnZXQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUpIDogdGFyZ2V0LmNsYXNzTGlzdC5yZW1vdmUoY2xhc3NOYW1lKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICAvKipcbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudCB8IEhUTUxFbGVtZW50W10gfCBudWxsfSB0YXJnZXRcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBzdHJpbmdbXSB8IHJlYWRvbmx5IHN0cmluZ1tdIHwgdW5kZWZpbmVkfSBjbGFzc0xpc3RcbiAgICovXG4gIGNvbnN0IGFkZENsYXNzID0gKHRhcmdldCwgY2xhc3NMaXN0KSA9PiB7XG4gICAgdG9nZ2xlQ2xhc3ModGFyZ2V0LCBjbGFzc0xpc3QsIHRydWUpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50IHwgSFRNTEVsZW1lbnRbXSB8IG51bGx9IHRhcmdldFxuICAgKiBAcGFyYW0ge3N0cmluZyB8IHN0cmluZ1tdIHwgcmVhZG9ubHkgc3RyaW5nW10gfCB1bmRlZmluZWR9IGNsYXNzTGlzdFxuICAgKi9cbiAgY29uc3QgcmVtb3ZlQ2xhc3MgPSAodGFyZ2V0LCBjbGFzc0xpc3QpID0+IHtcbiAgICB0b2dnbGVDbGFzcyh0YXJnZXQsIGNsYXNzTGlzdCwgZmFsc2UpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBHZXQgZGlyZWN0IGNoaWxkIG9mIGFuIGVsZW1lbnQgYnkgY2xhc3MgbmFtZVxuICAgKlxuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjbGFzc05hbWVcbiAgICogQHJldHVybnMge0hUTUxFbGVtZW50IHwgdW5kZWZpbmVkfVxuICAgKi9cbiAgY29uc3QgZ2V0RGlyZWN0Q2hpbGRCeUNsYXNzID0gKGVsZW0sIGNsYXNzTmFtZSkgPT4ge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gQXJyYXkuZnJvbShlbGVtLmNoaWxkcmVuKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBjaGlsZCA9IGNoaWxkcmVuW2ldO1xuICAgICAgaWYgKGNoaWxkIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgaGFzQ2xhc3MoY2hpbGQsIGNsYXNzTmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbVxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHlcbiAgICogQHBhcmFtIHsqfSB2YWx1ZVxuICAgKi9cbiAgY29uc3QgYXBwbHlOdW1lcmljYWxTdHlsZSA9IChlbGVtLCBwcm9wZXJ0eSwgdmFsdWUpID0+IHtcbiAgICBpZiAodmFsdWUgPT09IFwiXCIuY29uY2F0KHBhcnNlSW50KHZhbHVlKSkpIHtcbiAgICAgIHZhbHVlID0gcGFyc2VJbnQodmFsdWUpO1xuICAgIH1cbiAgICBpZiAodmFsdWUgfHwgcGFyc2VJbnQodmFsdWUpID09PSAwKSB7XG4gICAgICBlbGVtLnN0eWxlW3Byb3BlcnR5XSA9IHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgPyBcIlwiLmNvbmNhdCh2YWx1ZSwgXCJweFwiKSA6IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbGVtLnN0eWxlLnJlbW92ZVByb3BlcnR5KHByb3BlcnR5KTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnQgfCBudWxsfSBlbGVtXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkaXNwbGF5XG4gICAqL1xuICBjb25zdCBzaG93ID0gZnVuY3Rpb24gKGVsZW0pIHtcbiAgICBsZXQgZGlzcGxheSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogJ2ZsZXgnO1xuICAgIGVsZW0gJiYgKGVsZW0uc3R5bGUuZGlzcGxheSA9IGRpc3BsYXkpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50IHwgbnVsbH0gZWxlbVxuICAgKi9cbiAgY29uc3QgaGlkZSA9IGVsZW0gPT4ge1xuICAgIGVsZW0gJiYgKGVsZW0uc3R5bGUuZGlzcGxheSA9ICdub25lJyk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHBhcmVudFxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3JcbiAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5XG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICAgKi9cbiAgY29uc3Qgc2V0U3R5bGUgPSAocGFyZW50LCBzZWxlY3RvciwgcHJvcGVydHksIHZhbHVlKSA9PiB7XG4gICAgLyoqIEB0eXBlIHtIVE1MRWxlbWVudH0gKi9cbiAgICBjb25zdCBlbCA9IHBhcmVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTtcbiAgICBpZiAoZWwpIHtcbiAgICAgIGVsLnN0eWxlW3Byb3BlcnR5XSA9IHZhbHVlO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbVxuICAgKiBAcGFyYW0ge2FueX0gY29uZGl0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkaXNwbGF5XG4gICAqL1xuICBjb25zdCB0b2dnbGUgPSBmdW5jdGlvbiAoZWxlbSwgY29uZGl0aW9uKSB7XG4gICAgbGV0IGRpc3BsYXkgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6ICdmbGV4JztcbiAgICBjb25kaXRpb24gPyBzaG93KGVsZW0sIGRpc3BsYXkpIDogaGlkZShlbGVtKTtcbiAgfTtcblxuICAvKipcbiAgICogYm9ycm93ZWQgZnJvbSBqcXVlcnkgJChlbGVtKS5pcygnOnZpc2libGUnKSBpbXBsZW1lbnRhdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50IHwgbnVsbH0gZWxlbVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGNvbnN0IGlzVmlzaWJsZSQxID0gZWxlbSA9PiAhIShlbGVtICYmIChlbGVtLm9mZnNldFdpZHRoIHx8IGVsZW0ub2Zmc2V0SGVpZ2h0IHx8IGVsZW0uZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGgpKTtcblxuICAvKipcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBjb25zdCBhbGxCdXR0b25zQXJlSGlkZGVuID0gKCkgPT4gIWlzVmlzaWJsZSQxKGdldENvbmZpcm1CdXR0b24oKSkgJiYgIWlzVmlzaWJsZSQxKGdldERlbnlCdXR0b24oKSkgJiYgIWlzVmlzaWJsZSQxKGdldENhbmNlbEJ1dHRvbigpKTtcblxuICAvKipcbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGNvbnN0IGlzU2Nyb2xsYWJsZSA9IGVsZW0gPT4gISEoZWxlbS5zY3JvbGxIZWlnaHQgPiBlbGVtLmNsaWVudEhlaWdodCk7XG5cbiAgLyoqXG4gICAqIGJvcnJvd2VkIGZyb20gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzQ2MzUyMTE5XG4gICAqXG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBjb25zdCBoYXNDc3NBbmltYXRpb24gPSBlbGVtID0+IHtcbiAgICBjb25zdCBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW0pO1xuICAgIGNvbnN0IGFuaW1EdXJhdGlvbiA9IHBhcnNlRmxvYXQoc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgnYW5pbWF0aW9uLWR1cmF0aW9uJykgfHwgJzAnKTtcbiAgICBjb25zdCB0cmFuc0R1cmF0aW9uID0gcGFyc2VGbG9hdChzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCd0cmFuc2l0aW9uLWR1cmF0aW9uJykgfHwgJzAnKTtcbiAgICByZXR1cm4gYW5pbUR1cmF0aW9uID4gMCB8fCB0cmFuc0R1cmF0aW9uID4gMDtcbiAgfTtcblxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IHRpbWVyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gcmVzZXRcbiAgICovXG4gIGNvbnN0IGFuaW1hdGVUaW1lclByb2dyZXNzQmFyID0gZnVuY3Rpb24gKHRpbWVyKSB7XG4gICAgbGV0IHJlc2V0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmYWxzZTtcbiAgICBjb25zdCB0aW1lclByb2dyZXNzQmFyID0gZ2V0VGltZXJQcm9ncmVzc0JhcigpO1xuICAgIGlmICghdGltZXJQcm9ncmVzc0Jhcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaXNWaXNpYmxlJDEodGltZXJQcm9ncmVzc0JhcikpIHtcbiAgICAgIGlmIChyZXNldCkge1xuICAgICAgICB0aW1lclByb2dyZXNzQmFyLnN0eWxlLnRyYW5zaXRpb24gPSAnbm9uZSc7XG4gICAgICAgIHRpbWVyUHJvZ3Jlc3NCYXIuc3R5bGUud2lkdGggPSAnMTAwJSc7XG4gICAgICB9XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGltZXJQcm9ncmVzc0Jhci5zdHlsZS50cmFuc2l0aW9uID0gXCJ3aWR0aCBcIi5jb25jYXQodGltZXIgLyAxMDAwLCBcInMgbGluZWFyXCIpO1xuICAgICAgICB0aW1lclByb2dyZXNzQmFyLnN0eWxlLndpZHRoID0gJzAlJztcbiAgICAgIH0sIDEwKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IHN0b3BUaW1lclByb2dyZXNzQmFyID0gKCkgPT4ge1xuICAgIGNvbnN0IHRpbWVyUHJvZ3Jlc3NCYXIgPSBnZXRUaW1lclByb2dyZXNzQmFyKCk7XG4gICAgaWYgKCF0aW1lclByb2dyZXNzQmFyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHRpbWVyUHJvZ3Jlc3NCYXJXaWR0aCA9IHBhcnNlSW50KHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRpbWVyUHJvZ3Jlc3NCYXIpLndpZHRoKTtcbiAgICB0aW1lclByb2dyZXNzQmFyLnN0eWxlLnJlbW92ZVByb3BlcnR5KCd0cmFuc2l0aW9uJyk7XG4gICAgdGltZXJQcm9ncmVzc0Jhci5zdHlsZS53aWR0aCA9ICcxMDAlJztcbiAgICBjb25zdCB0aW1lclByb2dyZXNzQmFyRnVsbFdpZHRoID0gcGFyc2VJbnQod2luZG93LmdldENvbXB1dGVkU3R5bGUodGltZXJQcm9ncmVzc0Jhcikud2lkdGgpO1xuICAgIGNvbnN0IHRpbWVyUHJvZ3Jlc3NCYXJQZXJjZW50ID0gdGltZXJQcm9ncmVzc0JhcldpZHRoIC8gdGltZXJQcm9ncmVzc0JhckZ1bGxXaWR0aCAqIDEwMDtcbiAgICB0aW1lclByb2dyZXNzQmFyLnN0eWxlLndpZHRoID0gXCJcIi5jb25jYXQodGltZXJQcm9ncmVzc0JhclBlcmNlbnQsIFwiJVwiKTtcbiAgfTtcblxuICAvKipcbiAgICogRGV0ZWN0IE5vZGUgZW52XG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgY29uc3QgaXNOb2RlRW52ID0gKCkgPT4gdHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgfHwgdHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJztcblxuICBjb25zdCBzd2VldEhUTUwgPSBcIlxcbiA8ZGl2IGFyaWEtbGFiZWxsZWRieT1cXFwiXCIuY29uY2F0KHN3YWxDbGFzc2VzLnRpdGxlLCBcIlxcXCIgYXJpYS1kZXNjcmliZWRieT1cXFwiXCIpLmNvbmNhdChzd2FsQ2xhc3Nlc1snaHRtbC1jb250YWluZXInXSwgXCJcXFwiIGNsYXNzPVxcXCJcIikuY29uY2F0KHN3YWxDbGFzc2VzLnBvcHVwLCBcIlxcXCIgdGFiaW5kZXg9XFxcIi0xXFxcIj5cXG4gICA8YnV0dG9uIHR5cGU9XFxcImJ1dHRvblxcXCIgY2xhc3M9XFxcIlwiKS5jb25jYXQoc3dhbENsYXNzZXMuY2xvc2UsIFwiXFxcIj48L2J1dHRvbj5cXG4gICA8dWwgY2xhc3M9XFxcIlwiKS5jb25jYXQoc3dhbENsYXNzZXNbJ3Byb2dyZXNzLXN0ZXBzJ10sIFwiXFxcIj48L3VsPlxcbiAgIDxkaXYgY2xhc3M9XFxcIlwiKS5jb25jYXQoc3dhbENsYXNzZXMuaWNvbiwgXCJcXFwiPjwvZGl2PlxcbiAgIDxpbWcgY2xhc3M9XFxcIlwiKS5jb25jYXQoc3dhbENsYXNzZXMuaW1hZ2UsIFwiXFxcIiAvPlxcbiAgIDxoMiBjbGFzcz1cXFwiXCIpLmNvbmNhdChzd2FsQ2xhc3Nlcy50aXRsZSwgXCJcXFwiIGlkPVxcXCJcIikuY29uY2F0KHN3YWxDbGFzc2VzLnRpdGxlLCBcIlxcXCI+PC9oMj5cXG4gICA8ZGl2IGNsYXNzPVxcXCJcIikuY29uY2F0KHN3YWxDbGFzc2VzWydodG1sLWNvbnRhaW5lciddLCBcIlxcXCIgaWQ9XFxcIlwiKS5jb25jYXQoc3dhbENsYXNzZXNbJ2h0bWwtY29udGFpbmVyJ10sIFwiXFxcIj48L2Rpdj5cXG4gICA8aW5wdXQgY2xhc3M9XFxcIlwiKS5jb25jYXQoc3dhbENsYXNzZXMuaW5wdXQsIFwiXFxcIiBpZD1cXFwiXCIpLmNvbmNhdChzd2FsQ2xhc3Nlcy5pbnB1dCwgXCJcXFwiIC8+XFxuICAgPGlucHV0IHR5cGU9XFxcImZpbGVcXFwiIGNsYXNzPVxcXCJcIikuY29uY2F0KHN3YWxDbGFzc2VzLmZpbGUsIFwiXFxcIiAvPlxcbiAgIDxkaXYgY2xhc3M9XFxcIlwiKS5jb25jYXQoc3dhbENsYXNzZXMucmFuZ2UsIFwiXFxcIj5cXG4gICAgIDxpbnB1dCB0eXBlPVxcXCJyYW5nZVxcXCIgLz5cXG4gICAgIDxvdXRwdXQ+PC9vdXRwdXQ+XFxuICAgPC9kaXY+XFxuICAgPHNlbGVjdCBjbGFzcz1cXFwiXCIpLmNvbmNhdChzd2FsQ2xhc3Nlcy5zZWxlY3QsIFwiXFxcIiBpZD1cXFwiXCIpLmNvbmNhdChzd2FsQ2xhc3Nlcy5zZWxlY3QsIFwiXFxcIj48L3NlbGVjdD5cXG4gICA8ZGl2IGNsYXNzPVxcXCJcIikuY29uY2F0KHN3YWxDbGFzc2VzLnJhZGlvLCBcIlxcXCI+PC9kaXY+XFxuICAgPGxhYmVsIGNsYXNzPVxcXCJcIikuY29uY2F0KHN3YWxDbGFzc2VzLmNoZWNrYm94LCBcIlxcXCI+XFxuICAgICA8aW5wdXQgdHlwZT1cXFwiY2hlY2tib3hcXFwiIGlkPVxcXCJcIikuY29uY2F0KHN3YWxDbGFzc2VzLmNoZWNrYm94LCBcIlxcXCIgLz5cXG4gICAgIDxzcGFuIGNsYXNzPVxcXCJcIikuY29uY2F0KHN3YWxDbGFzc2VzLmxhYmVsLCBcIlxcXCI+PC9zcGFuPlxcbiAgIDwvbGFiZWw+XFxuICAgPHRleHRhcmVhIGNsYXNzPVxcXCJcIikuY29uY2F0KHN3YWxDbGFzc2VzLnRleHRhcmVhLCBcIlxcXCIgaWQ9XFxcIlwiKS5jb25jYXQoc3dhbENsYXNzZXMudGV4dGFyZWEsIFwiXFxcIj48L3RleHRhcmVhPlxcbiAgIDxkaXYgY2xhc3M9XFxcIlwiKS5jb25jYXQoc3dhbENsYXNzZXNbJ3ZhbGlkYXRpb24tbWVzc2FnZSddLCBcIlxcXCIgaWQ9XFxcIlwiKS5jb25jYXQoc3dhbENsYXNzZXNbJ3ZhbGlkYXRpb24tbWVzc2FnZSddLCBcIlxcXCI+PC9kaXY+XFxuICAgPGRpdiBjbGFzcz1cXFwiXCIpLmNvbmNhdChzd2FsQ2xhc3Nlcy5hY3Rpb25zLCBcIlxcXCI+XFxuICAgICA8ZGl2IGNsYXNzPVxcXCJcIikuY29uY2F0KHN3YWxDbGFzc2VzLmxvYWRlciwgXCJcXFwiPjwvZGl2PlxcbiAgICAgPGJ1dHRvbiB0eXBlPVxcXCJidXR0b25cXFwiIGNsYXNzPVxcXCJcIikuY29uY2F0KHN3YWxDbGFzc2VzLmNvbmZpcm0sIFwiXFxcIj48L2J1dHRvbj5cXG4gICAgIDxidXR0b24gdHlwZT1cXFwiYnV0dG9uXFxcIiBjbGFzcz1cXFwiXCIpLmNvbmNhdChzd2FsQ2xhc3Nlcy5kZW55LCBcIlxcXCI+PC9idXR0b24+XFxuICAgICA8YnV0dG9uIHR5cGU9XFxcImJ1dHRvblxcXCIgY2xhc3M9XFxcIlwiKS5jb25jYXQoc3dhbENsYXNzZXMuY2FuY2VsLCBcIlxcXCI+PC9idXR0b24+XFxuICAgPC9kaXY+XFxuICAgPGRpdiBjbGFzcz1cXFwiXCIpLmNvbmNhdChzd2FsQ2xhc3Nlcy5mb290ZXIsIFwiXFxcIj48L2Rpdj5cXG4gICA8ZGl2IGNsYXNzPVxcXCJcIikuY29uY2F0KHN3YWxDbGFzc2VzWyd0aW1lci1wcm9ncmVzcy1iYXItY29udGFpbmVyJ10sIFwiXFxcIj5cXG4gICAgIDxkaXYgY2xhc3M9XFxcIlwiKS5jb25jYXQoc3dhbENsYXNzZXNbJ3RpbWVyLXByb2dyZXNzLWJhciddLCBcIlxcXCI+PC9kaXY+XFxuICAgPC9kaXY+XFxuIDwvZGl2PlxcblwiKS5yZXBsYWNlKC8oXnxcXG4pXFxzKi9nLCAnJyk7XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgY29uc3QgcmVzZXRPbGRDb250YWluZXIgPSAoKSA9PiB7XG4gICAgY29uc3Qgb2xkQ29udGFpbmVyID0gZ2V0Q29udGFpbmVyKCk7XG4gICAgaWYgKCFvbGRDb250YWluZXIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgb2xkQ29udGFpbmVyLnJlbW92ZSgpO1xuICAgIHJlbW92ZUNsYXNzKFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIGRvY3VtZW50LmJvZHldLCBbc3dhbENsYXNzZXNbJ25vLWJhY2tkcm9wJ10sIHN3YWxDbGFzc2VzWyd0b2FzdC1zaG93biddLCBzd2FsQ2xhc3Nlc1snaGFzLWNvbHVtbiddXSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG4gIGNvbnN0IHJlc2V0VmFsaWRhdGlvbk1lc3NhZ2UkMSA9ICgpID0+IHtcbiAgICBnbG9iYWxTdGF0ZS5jdXJyZW50SW5zdGFuY2UucmVzZXRWYWxpZGF0aW9uTWVzc2FnZSgpO1xuICB9O1xuICBjb25zdCBhZGRJbnB1dENoYW5nZUxpc3RlbmVycyA9ICgpID0+IHtcbiAgICBjb25zdCBwb3B1cCA9IGdldFBvcHVwKCk7XG4gICAgY29uc3QgaW5wdXQgPSBnZXREaXJlY3RDaGlsZEJ5Q2xhc3MocG9wdXAsIHN3YWxDbGFzc2VzLmlucHV0KTtcbiAgICBjb25zdCBmaWxlID0gZ2V0RGlyZWN0Q2hpbGRCeUNsYXNzKHBvcHVwLCBzd2FsQ2xhc3Nlcy5maWxlKTtcbiAgICAvKiogQHR5cGUge0hUTUxJbnB1dEVsZW1lbnR9ICovXG4gICAgY29uc3QgcmFuZ2UgPSBwb3B1cC5xdWVyeVNlbGVjdG9yKFwiLlwiLmNvbmNhdChzd2FsQ2xhc3Nlcy5yYW5nZSwgXCIgaW5wdXRcIikpO1xuICAgIC8qKiBAdHlwZSB7SFRNTE91dHB1dEVsZW1lbnR9ICovXG4gICAgY29uc3QgcmFuZ2VPdXRwdXQgPSBwb3B1cC5xdWVyeVNlbGVjdG9yKFwiLlwiLmNvbmNhdChzd2FsQ2xhc3Nlcy5yYW5nZSwgXCIgb3V0cHV0XCIpKTtcbiAgICBjb25zdCBzZWxlY3QgPSBnZXREaXJlY3RDaGlsZEJ5Q2xhc3MocG9wdXAsIHN3YWxDbGFzc2VzLnNlbGVjdCk7XG4gICAgLyoqIEB0eXBlIHtIVE1MSW5wdXRFbGVtZW50fSAqL1xuICAgIGNvbnN0IGNoZWNrYm94ID0gcG9wdXAucXVlcnlTZWxlY3RvcihcIi5cIi5jb25jYXQoc3dhbENsYXNzZXMuY2hlY2tib3gsIFwiIGlucHV0XCIpKTtcbiAgICBjb25zdCB0ZXh0YXJlYSA9IGdldERpcmVjdENoaWxkQnlDbGFzcyhwb3B1cCwgc3dhbENsYXNzZXMudGV4dGFyZWEpO1xuICAgIGlucHV0Lm9uaW5wdXQgPSByZXNldFZhbGlkYXRpb25NZXNzYWdlJDE7XG4gICAgZmlsZS5vbmNoYW5nZSA9IHJlc2V0VmFsaWRhdGlvbk1lc3NhZ2UkMTtcbiAgICBzZWxlY3Qub25jaGFuZ2UgPSByZXNldFZhbGlkYXRpb25NZXNzYWdlJDE7XG4gICAgY2hlY2tib3gub25jaGFuZ2UgPSByZXNldFZhbGlkYXRpb25NZXNzYWdlJDE7XG4gICAgdGV4dGFyZWEub25pbnB1dCA9IHJlc2V0VmFsaWRhdGlvbk1lc3NhZ2UkMTtcbiAgICByYW5nZS5vbmlucHV0ID0gKCkgPT4ge1xuICAgICAgcmVzZXRWYWxpZGF0aW9uTWVzc2FnZSQxKCk7XG4gICAgICByYW5nZU91dHB1dC52YWx1ZSA9IHJhbmdlLnZhbHVlO1xuICAgIH07XG4gICAgcmFuZ2Uub25jaGFuZ2UgPSAoKSA9PiB7XG4gICAgICByZXNldFZhbGlkYXRpb25NZXNzYWdlJDEoKTtcbiAgICAgIHJhbmdlT3V0cHV0LnZhbHVlID0gcmFuZ2UudmFsdWU7XG4gICAgfTtcbiAgfTtcblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBIVE1MRWxlbWVudH0gdGFyZ2V0XG4gICAqIEByZXR1cm5zIHtIVE1MRWxlbWVudH1cbiAgICovXG4gIGNvbnN0IGdldFRhcmdldCA9IHRhcmdldCA9PiB0eXBlb2YgdGFyZ2V0ID09PSAnc3RyaW5nJyA/IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGFyZ2V0KSA6IHRhcmdldDtcblxuICAvKipcbiAgICogQHBhcmFtIHtTd2VldEFsZXJ0T3B0aW9uc30gcGFyYW1zXG4gICAqL1xuICBjb25zdCBzZXR1cEFjY2Vzc2liaWxpdHkgPSBwYXJhbXMgPT4ge1xuICAgIGNvbnN0IHBvcHVwID0gZ2V0UG9wdXAoKTtcbiAgICBwb3B1cC5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCBwYXJhbXMudG9hc3QgPyAnYWxlcnQnIDogJ2RpYWxvZycpO1xuICAgIHBvcHVwLnNldEF0dHJpYnV0ZSgnYXJpYS1saXZlJywgcGFyYW1zLnRvYXN0ID8gJ3BvbGl0ZScgOiAnYXNzZXJ0aXZlJyk7XG4gICAgaWYgKCFwYXJhbXMudG9hc3QpIHtcbiAgICAgIHBvcHVwLnNldEF0dHJpYnV0ZSgnYXJpYS1tb2RhbCcsICd0cnVlJyk7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSB0YXJnZXRFbGVtZW50XG4gICAqL1xuICBjb25zdCBzZXR1cFJUTCA9IHRhcmdldEVsZW1lbnQgPT4ge1xuICAgIGlmICh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0YXJnZXRFbGVtZW50KS5kaXJlY3Rpb24gPT09ICdydGwnKSB7XG4gICAgICBhZGRDbGFzcyhnZXRDb250YWluZXIoKSwgc3dhbENsYXNzZXMucnRsKTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIEFkZCBtb2RhbCArIGJhY2tkcm9wICsgbm8td2FyIG1lc3NhZ2UgZm9yIFJ1c3NpYW5zIHRvIERPTVxuICAgKlxuICAgKiBAcGFyYW0ge1N3ZWV0QWxlcnRPcHRpb25zfSBwYXJhbXNcbiAgICovXG4gIGNvbnN0IGluaXQgPSBwYXJhbXMgPT4ge1xuICAgIC8vIENsZWFuIHVwIHRoZSBvbGQgcG9wdXAgY29udGFpbmVyIGlmIGl0IGV4aXN0c1xuICAgIGNvbnN0IG9sZENvbnRhaW5lckV4aXN0ZWQgPSByZXNldE9sZENvbnRhaW5lcigpO1xuICAgIGlmIChpc05vZGVFbnYoKSkge1xuICAgICAgZXJyb3IoJ1N3ZWV0QWxlcnQyIHJlcXVpcmVzIGRvY3VtZW50IHRvIGluaXRpYWxpemUnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgY29udGFpbmVyLmNsYXNzTmFtZSA9IHN3YWxDbGFzc2VzLmNvbnRhaW5lcjtcbiAgICBpZiAob2xkQ29udGFpbmVyRXhpc3RlZCkge1xuICAgICAgYWRkQ2xhc3MoY29udGFpbmVyLCBzd2FsQ2xhc3Nlc1snbm8tdHJhbnNpdGlvbiddKTtcbiAgICB9XG4gICAgc2V0SW5uZXJIdG1sKGNvbnRhaW5lciwgc3dlZXRIVE1MKTtcbiAgICBjb25zdCB0YXJnZXRFbGVtZW50ID0gZ2V0VGFyZ2V0KHBhcmFtcy50YXJnZXQpO1xuICAgIHRhcmdldEVsZW1lbnQuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTtcbiAgICBzZXR1cEFjY2Vzc2liaWxpdHkocGFyYW1zKTtcbiAgICBzZXR1cFJUTCh0YXJnZXRFbGVtZW50KTtcbiAgICBhZGRJbnB1dENoYW5nZUxpc3RlbmVycygpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50IHwgb2JqZWN0IHwgc3RyaW5nfSBwYXJhbVxuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSB0YXJnZXRcbiAgICovXG4gIGNvbnN0IHBhcnNlSHRtbFRvQ29udGFpbmVyID0gKHBhcmFtLCB0YXJnZXQpID0+IHtcbiAgICAvLyBET00gZWxlbWVudFxuICAgIGlmIChwYXJhbSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG4gICAgICB0YXJnZXQuYXBwZW5kQ2hpbGQocGFyYW0pO1xuICAgIH1cblxuICAgIC8vIE9iamVjdFxuICAgIGVsc2UgaWYgKHR5cGVvZiBwYXJhbSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGhhbmRsZU9iamVjdChwYXJhbSwgdGFyZ2V0KTtcbiAgICB9XG5cbiAgICAvLyBQbGFpbiBzdHJpbmdcbiAgICBlbHNlIGlmIChwYXJhbSkge1xuICAgICAgc2V0SW5uZXJIdG1sKHRhcmdldCwgcGFyYW0pO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogQHBhcmFtIHthbnl9IHBhcmFtXG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHRhcmdldFxuICAgKi9cbiAgY29uc3QgaGFuZGxlT2JqZWN0ID0gKHBhcmFtLCB0YXJnZXQpID0+IHtcbiAgICAvLyBKUXVlcnkgZWxlbWVudChzKVxuICAgIGlmIChwYXJhbS5qcXVlcnkpIHtcbiAgICAgIGhhbmRsZUpxdWVyeUVsZW0odGFyZ2V0LCBwYXJhbSk7XG4gICAgfVxuXG4gICAgLy8gRm9yIG90aGVyIG9iamVjdHMgdXNlIHRoZWlyIHN0cmluZyByZXByZXNlbnRhdGlvblxuICAgIGVsc2Uge1xuICAgICAgc2V0SW5uZXJIdG1sKHRhcmdldCwgcGFyYW0udG9TdHJpbmcoKSk7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSB0YXJnZXRcbiAgICogQHBhcmFtIHthbnl9IGVsZW1cbiAgICovXG4gIGNvbnN0IGhhbmRsZUpxdWVyeUVsZW0gPSAodGFyZ2V0LCBlbGVtKSA9PiB7XG4gICAgdGFyZ2V0LnRleHRDb250ZW50ID0gJyc7XG4gICAgaWYgKDAgaW4gZWxlbSkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IChpIGluIGVsZW0pOyBpKyspIHtcbiAgICAgICAgdGFyZ2V0LmFwcGVuZENoaWxkKGVsZW1baV0uY2xvbmVOb2RlKHRydWUpKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGFyZ2V0LmFwcGVuZENoaWxkKGVsZW0uY2xvbmVOb2RlKHRydWUpKTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHsnd2Via2l0QW5pbWF0aW9uRW5kJyB8ICdhbmltYXRpb25lbmQnIHwgZmFsc2V9XG4gICAqL1xuICBjb25zdCBhbmltYXRpb25FbmRFdmVudCA9ICgoKSA9PiB7XG4gICAgLy8gUHJldmVudCBydW4gaW4gTm9kZSBlbnZcbiAgICBpZiAoaXNOb2RlRW52KCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgdGVzdEVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cbiAgICAvLyBDaHJvbWUsIFNhZmFyaSBhbmQgT3BlcmFcbiAgICBpZiAodHlwZW9mIHRlc3RFbC5zdHlsZS53ZWJraXRBbmltYXRpb24gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gJ3dlYmtpdEFuaW1hdGlvbkVuZCc7XG4gICAgfVxuXG4gICAgLy8gU3RhbmRhcmQgc3ludGF4XG4gICAgaWYgKHR5cGVvZiB0ZXN0RWwuc3R5bGUuYW5pbWF0aW9uICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuICdhbmltYXRpb25lbmQnO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0pKCk7XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7U3dlZXRBbGVydH0gaW5zdGFuY2VcbiAgICogQHBhcmFtIHtTd2VldEFsZXJ0T3B0aW9uc30gcGFyYW1zXG4gICAqL1xuICBjb25zdCByZW5kZXJBY3Rpb25zID0gKGluc3RhbmNlLCBwYXJhbXMpID0+IHtcbiAgICBjb25zdCBhY3Rpb25zID0gZ2V0QWN0aW9ucygpO1xuICAgIGNvbnN0IGxvYWRlciA9IGdldExvYWRlcigpO1xuICAgIGlmICghYWN0aW9ucyB8fCAhbG9hZGVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQWN0aW9ucyAoYnV0dG9ucykgd3JhcHBlclxuICAgIGlmICghcGFyYW1zLnNob3dDb25maXJtQnV0dG9uICYmICFwYXJhbXMuc2hvd0RlbnlCdXR0b24gJiYgIXBhcmFtcy5zaG93Q2FuY2VsQnV0dG9uKSB7XG4gICAgICBoaWRlKGFjdGlvbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzaG93KGFjdGlvbnMpO1xuICAgIH1cblxuICAgIC8vIEN1c3RvbSBjbGFzc1xuICAgIGFwcGx5Q3VzdG9tQ2xhc3MoYWN0aW9ucywgcGFyYW1zLCAnYWN0aW9ucycpO1xuXG4gICAgLy8gUmVuZGVyIGFsbCB0aGUgYnV0dG9uc1xuICAgIHJlbmRlckJ1dHRvbnMoYWN0aW9ucywgbG9hZGVyLCBwYXJhbXMpO1xuXG4gICAgLy8gTG9hZGVyXG4gICAgc2V0SW5uZXJIdG1sKGxvYWRlciwgcGFyYW1zLmxvYWRlckh0bWwgfHwgJycpO1xuICAgIGFwcGx5Q3VzdG9tQ2xhc3MobG9hZGVyLCBwYXJhbXMsICdsb2FkZXInKTtcbiAgfTtcblxuICAvKipcbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gYWN0aW9uc1xuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBsb2FkZXJcbiAgICogQHBhcmFtIHtTd2VldEFsZXJ0T3B0aW9uc30gcGFyYW1zXG4gICAqL1xuICBmdW5jdGlvbiByZW5kZXJCdXR0b25zKGFjdGlvbnMsIGxvYWRlciwgcGFyYW1zKSB7XG4gICAgY29uc3QgY29uZmlybUJ1dHRvbiA9IGdldENvbmZpcm1CdXR0b24oKTtcbiAgICBjb25zdCBkZW55QnV0dG9uID0gZ2V0RGVueUJ1dHRvbigpO1xuICAgIGNvbnN0IGNhbmNlbEJ1dHRvbiA9IGdldENhbmNlbEJ1dHRvbigpO1xuICAgIGlmICghY29uZmlybUJ1dHRvbiB8fCAhZGVueUJ1dHRvbiB8fCAhY2FuY2VsQnV0dG9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gUmVuZGVyIGJ1dHRvbnNcbiAgICByZW5kZXJCdXR0b24oY29uZmlybUJ1dHRvbiwgJ2NvbmZpcm0nLCBwYXJhbXMpO1xuICAgIHJlbmRlckJ1dHRvbihkZW55QnV0dG9uLCAnZGVueScsIHBhcmFtcyk7XG4gICAgcmVuZGVyQnV0dG9uKGNhbmNlbEJ1dHRvbiwgJ2NhbmNlbCcsIHBhcmFtcyk7XG4gICAgaGFuZGxlQnV0dG9uc1N0eWxpbmcoY29uZmlybUJ1dHRvbiwgZGVueUJ1dHRvbiwgY2FuY2VsQnV0dG9uLCBwYXJhbXMpO1xuICAgIGlmIChwYXJhbXMucmV2ZXJzZUJ1dHRvbnMpIHtcbiAgICAgIGlmIChwYXJhbXMudG9hc3QpIHtcbiAgICAgICAgYWN0aW9ucy5pbnNlcnRCZWZvcmUoY2FuY2VsQnV0dG9uLCBjb25maXJtQnV0dG9uKTtcbiAgICAgICAgYWN0aW9ucy5pbnNlcnRCZWZvcmUoZGVueUJ1dHRvbiwgY29uZmlybUJ1dHRvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhY3Rpb25zLmluc2VydEJlZm9yZShjYW5jZWxCdXR0b24sIGxvYWRlcik7XG4gICAgICAgIGFjdGlvbnMuaW5zZXJ0QmVmb3JlKGRlbnlCdXR0b24sIGxvYWRlcik7XG4gICAgICAgIGFjdGlvbnMuaW5zZXJ0QmVmb3JlKGNvbmZpcm1CdXR0b24sIGxvYWRlcik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGNvbmZpcm1CdXR0b25cbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZGVueUJ1dHRvblxuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBjYW5jZWxCdXR0b25cbiAgICogQHBhcmFtIHtTd2VldEFsZXJ0T3B0aW9uc30gcGFyYW1zXG4gICAqL1xuICBmdW5jdGlvbiBoYW5kbGVCdXR0b25zU3R5bGluZyhjb25maXJtQnV0dG9uLCBkZW55QnV0dG9uLCBjYW5jZWxCdXR0b24sIHBhcmFtcykge1xuICAgIGlmICghcGFyYW1zLmJ1dHRvbnNTdHlsaW5nKSB7XG4gICAgICByZW1vdmVDbGFzcyhbY29uZmlybUJ1dHRvbiwgZGVueUJ1dHRvbiwgY2FuY2VsQnV0dG9uXSwgc3dhbENsYXNzZXMuc3R5bGVkKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYWRkQ2xhc3MoW2NvbmZpcm1CdXR0b24sIGRlbnlCdXR0b24sIGNhbmNlbEJ1dHRvbl0sIHN3YWxDbGFzc2VzLnN0eWxlZCk7XG5cbiAgICAvLyBCdXR0b25zIGJhY2tncm91bmQgY29sb3JzXG4gICAgaWYgKHBhcmFtcy5jb25maXJtQnV0dG9uQ29sb3IpIHtcbiAgICAgIGNvbmZpcm1CdXR0b24uc3R5bGUuYmFja2dyb3VuZENvbG9yID0gcGFyYW1zLmNvbmZpcm1CdXR0b25Db2xvcjtcbiAgICAgIGFkZENsYXNzKGNvbmZpcm1CdXR0b24sIHN3YWxDbGFzc2VzWydkZWZhdWx0LW91dGxpbmUnXSk7XG4gICAgfVxuICAgIGlmIChwYXJhbXMuZGVueUJ1dHRvbkNvbG9yKSB7XG4gICAgICBkZW55QnV0dG9uLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHBhcmFtcy5kZW55QnV0dG9uQ29sb3I7XG4gICAgICBhZGRDbGFzcyhkZW55QnV0dG9uLCBzd2FsQ2xhc3Nlc1snZGVmYXVsdC1vdXRsaW5lJ10pO1xuICAgIH1cbiAgICBpZiAocGFyYW1zLmNhbmNlbEJ1dHRvbkNvbG9yKSB7XG4gICAgICBjYW5jZWxCdXR0b24uc3R5bGUuYmFja2dyb3VuZENvbG9yID0gcGFyYW1zLmNhbmNlbEJ1dHRvbkNvbG9yO1xuICAgICAgYWRkQ2xhc3MoY2FuY2VsQnV0dG9uLCBzd2FsQ2xhc3Nlc1snZGVmYXVsdC1vdXRsaW5lJ10pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBidXR0b25cbiAgICogQHBhcmFtIHsnY29uZmlybScgfCAnZGVueScgfCAnY2FuY2VsJ30gYnV0dG9uVHlwZVxuICAgKiBAcGFyYW0ge1N3ZWV0QWxlcnRPcHRpb25zfSBwYXJhbXNcbiAgICovXG4gIGZ1bmN0aW9uIHJlbmRlckJ1dHRvbihidXR0b24sIGJ1dHRvblR5cGUsIHBhcmFtcykge1xuICAgIGNvbnN0IGJ1dHRvbk5hbWUgPSAvKiogQHR5cGUgeydDb25maXJtJyB8ICdEZW55JyB8ICdDYW5jZWwnfSAqL2NhcGl0YWxpemVGaXJzdExldHRlcihidXR0b25UeXBlKTtcbiAgICB0b2dnbGUoYnV0dG9uLCBwYXJhbXNbXCJzaG93XCIuY29uY2F0KGJ1dHRvbk5hbWUsIFwiQnV0dG9uXCIpXSwgJ2lubGluZS1ibG9jaycpO1xuICAgIHNldElubmVySHRtbChidXR0b24sIHBhcmFtc1tcIlwiLmNvbmNhdChidXR0b25UeXBlLCBcIkJ1dHRvblRleHRcIildIHx8ICcnKTsgLy8gU2V0IGNhcHRpb24gdGV4dFxuICAgIGJ1dHRvbi5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCBwYXJhbXNbXCJcIi5jb25jYXQoYnV0dG9uVHlwZSwgXCJCdXR0b25BcmlhTGFiZWxcIildIHx8ICcnKTsgLy8gQVJJQSBsYWJlbFxuXG4gICAgLy8gQWRkIGJ1dHRvbnMgY3VzdG9tIGNsYXNzZXNcbiAgICBidXR0b24uY2xhc3NOYW1lID0gc3dhbENsYXNzZXNbYnV0dG9uVHlwZV07XG4gICAgYXBwbHlDdXN0b21DbGFzcyhidXR0b24sIHBhcmFtcywgXCJcIi5jb25jYXQoYnV0dG9uVHlwZSwgXCJCdXR0b25cIikpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7U3dlZXRBbGVydH0gaW5zdGFuY2VcbiAgICogQHBhcmFtIHtTd2VldEFsZXJ0T3B0aW9uc30gcGFyYW1zXG4gICAqL1xuICBjb25zdCByZW5kZXJDbG9zZUJ1dHRvbiA9IChpbnN0YW5jZSwgcGFyYW1zKSA9PiB7XG4gICAgY29uc3QgY2xvc2VCdXR0b24gPSBnZXRDbG9zZUJ1dHRvbigpO1xuICAgIGlmICghY2xvc2VCdXR0b24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc2V0SW5uZXJIdG1sKGNsb3NlQnV0dG9uLCBwYXJhbXMuY2xvc2VCdXR0b25IdG1sIHx8ICcnKTtcblxuICAgIC8vIEN1c3RvbSBjbGFzc1xuICAgIGFwcGx5Q3VzdG9tQ2xhc3MoY2xvc2VCdXR0b24sIHBhcmFtcywgJ2Nsb3NlQnV0dG9uJyk7XG4gICAgdG9nZ2xlKGNsb3NlQnV0dG9uLCBwYXJhbXMuc2hvd0Nsb3NlQnV0dG9uKTtcbiAgICBjbG9zZUJ1dHRvbi5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCBwYXJhbXMuY2xvc2VCdXR0b25BcmlhTGFiZWwgfHwgJycpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1N3ZWV0QWxlcnR9IGluc3RhbmNlXG4gICAqIEBwYXJhbSB7U3dlZXRBbGVydE9wdGlvbnN9IHBhcmFtc1xuICAgKi9cbiAgY29uc3QgcmVuZGVyQ29udGFpbmVyID0gKGluc3RhbmNlLCBwYXJhbXMpID0+IHtcbiAgICBjb25zdCBjb250YWluZXIgPSBnZXRDb250YWluZXIoKTtcbiAgICBpZiAoIWNvbnRhaW5lcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBoYW5kbGVCYWNrZHJvcFBhcmFtKGNvbnRhaW5lciwgcGFyYW1zLmJhY2tkcm9wKTtcbiAgICBoYW5kbGVQb3NpdGlvblBhcmFtKGNvbnRhaW5lciwgcGFyYW1zLnBvc2l0aW9uKTtcbiAgICBoYW5kbGVHcm93UGFyYW0oY29udGFpbmVyLCBwYXJhbXMuZ3Jvdyk7XG5cbiAgICAvLyBDdXN0b20gY2xhc3NcbiAgICBhcHBseUN1c3RvbUNsYXNzKGNvbnRhaW5lciwgcGFyYW1zLCAnY29udGFpbmVyJyk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGNvbnRhaW5lclxuICAgKiBAcGFyYW0ge1N3ZWV0QWxlcnRPcHRpb25zWydiYWNrZHJvcCddfSBiYWNrZHJvcFxuICAgKi9cbiAgZnVuY3Rpb24gaGFuZGxlQmFja2Ryb3BQYXJhbShjb250YWluZXIsIGJhY2tkcm9wKSB7XG4gICAgaWYgKHR5cGVvZiBiYWNrZHJvcCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnRhaW5lci5zdHlsZS5iYWNrZ3JvdW5kID0gYmFja2Ryb3A7XG4gICAgfSBlbHNlIGlmICghYmFja2Ryb3ApIHtcbiAgICAgIGFkZENsYXNzKFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIGRvY3VtZW50LmJvZHldLCBzd2FsQ2xhc3Nlc1snbm8tYmFja2Ryb3AnXSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGNvbnRhaW5lclxuICAgKiBAcGFyYW0ge1N3ZWV0QWxlcnRPcHRpb25zWydwb3NpdGlvbiddfSBwb3NpdGlvblxuICAgKi9cbiAgZnVuY3Rpb24gaGFuZGxlUG9zaXRpb25QYXJhbShjb250YWluZXIsIHBvc2l0aW9uKSB7XG4gICAgaWYgKCFwb3NpdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAocG9zaXRpb24gaW4gc3dhbENsYXNzZXMpIHtcbiAgICAgIGFkZENsYXNzKGNvbnRhaW5lciwgc3dhbENsYXNzZXNbcG9zaXRpb25dKTtcbiAgICB9IGVsc2Uge1xuICAgICAgd2FybignVGhlIFwicG9zaXRpb25cIiBwYXJhbWV0ZXIgaXMgbm90IHZhbGlkLCBkZWZhdWx0aW5nIHRvIFwiY2VudGVyXCInKTtcbiAgICAgIGFkZENsYXNzKGNvbnRhaW5lciwgc3dhbENsYXNzZXMuY2VudGVyKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gY29udGFpbmVyXG4gICAqIEBwYXJhbSB7U3dlZXRBbGVydE9wdGlvbnNbJ2dyb3cnXX0gZ3Jvd1xuICAgKi9cbiAgZnVuY3Rpb24gaGFuZGxlR3Jvd1BhcmFtKGNvbnRhaW5lciwgZ3Jvdykge1xuICAgIGlmICghZ3Jvdykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhZGRDbGFzcyhjb250YWluZXIsIHN3YWxDbGFzc2VzW1wiZ3Jvdy1cIi5jb25jYXQoZ3JvdyldKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1vZHVsZSBjb250YWlucyBgV2Vha01hcGBzIGZvciBlYWNoIGVmZmVjdGl2ZWx5LVwicHJpdmF0ZSAgcHJvcGVydHlcIiB0aGF0IGEgYFN3YWxgIGhhcy5cbiAgICogRm9yIGV4YW1wbGUsIHRvIHNldCB0aGUgcHJpdmF0ZSBwcm9wZXJ0eSBcImZvb1wiIG9mIGB0aGlzYCB0byBcImJhclwiLCB5b3UgY2FuIGBwcml2YXRlUHJvcHMuZm9vLnNldCh0aGlzLCAnYmFyJylgXG4gICAqIFRoaXMgaXMgdGhlIGFwcHJvYWNoIHRoYXQgQmFiZWwgd2lsbCBwcm9iYWJseSB0YWtlIHRvIGltcGxlbWVudCBwcml2YXRlIG1ldGhvZHMvZmllbGRzXG4gICAqICAgaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtcHJpdmF0ZS1tZXRob2RzXG4gICAqICAgaHR0cHM6Ly9naXRodWIuY29tL2JhYmVsL2JhYmVsL3B1bGwvNzU1NVxuICAgKiBPbmNlIHdlIGhhdmUgdGhlIGNoYW5nZXMgZnJvbSB0aGF0IFBSIGluIEJhYmVsLCBhbmQgb3VyIGNvcmUgY2xhc3MgZml0cyByZWFzb25hYmxlIGluICpvbmUgbW9kdWxlKlxuICAgKiAgIHRoZW4gd2UgY2FuIHVzZSB0aGF0IGxhbmd1YWdlIGZlYXR1cmUuXG4gICAqL1xuXG4gIHZhciBwcml2YXRlUHJvcHMgPSB7XG4gICAgaW5uZXJQYXJhbXM6IG5ldyBXZWFrTWFwKCksXG4gICAgZG9tQ2FjaGU6IG5ldyBXZWFrTWFwKClcbiAgfTtcblxuICAvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vLi4vLi4vc3dlZXRhbGVydDIuZC50c1wiLz5cblxuXG4gIC8qKiBAdHlwZSB7SW5wdXRDbGFzc1tdfSAqL1xuICBjb25zdCBpbnB1dENsYXNzZXMgPSBbJ2lucHV0JywgJ2ZpbGUnLCAncmFuZ2UnLCAnc2VsZWN0JywgJ3JhZGlvJywgJ2NoZWNrYm94JywgJ3RleHRhcmVhJ107XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7U3dlZXRBbGVydH0gaW5zdGFuY2VcbiAgICogQHBhcmFtIHtTd2VldEFsZXJ0T3B0aW9uc30gcGFyYW1zXG4gICAqL1xuICBjb25zdCByZW5kZXJJbnB1dCA9IChpbnN0YW5jZSwgcGFyYW1zKSA9PiB7XG4gICAgY29uc3QgcG9wdXAgPSBnZXRQb3B1cCgpO1xuICAgIGlmICghcG9wdXApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaW5uZXJQYXJhbXMgPSBwcml2YXRlUHJvcHMuaW5uZXJQYXJhbXMuZ2V0KGluc3RhbmNlKTtcbiAgICBjb25zdCByZXJlbmRlciA9ICFpbm5lclBhcmFtcyB8fCBwYXJhbXMuaW5wdXQgIT09IGlubmVyUGFyYW1zLmlucHV0O1xuICAgIGlucHV0Q2xhc3Nlcy5mb3JFYWNoKGlucHV0Q2xhc3MgPT4ge1xuICAgICAgY29uc3QgaW5wdXRDb250YWluZXIgPSBnZXREaXJlY3RDaGlsZEJ5Q2xhc3MocG9wdXAsIHN3YWxDbGFzc2VzW2lucHV0Q2xhc3NdKTtcbiAgICAgIGlmICghaW5wdXRDb250YWluZXIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBzZXQgYXR0cmlidXRlc1xuICAgICAgc2V0QXR0cmlidXRlcyhpbnB1dENsYXNzLCBwYXJhbXMuaW5wdXRBdHRyaWJ1dGVzKTtcblxuICAgICAgLy8gc2V0IGNsYXNzXG4gICAgICBpbnB1dENvbnRhaW5lci5jbGFzc05hbWUgPSBzd2FsQ2xhc3Nlc1tpbnB1dENsYXNzXTtcbiAgICAgIGlmIChyZXJlbmRlcikge1xuICAgICAgICBoaWRlKGlucHV0Q29udGFpbmVyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAocGFyYW1zLmlucHV0KSB7XG4gICAgICBpZiAocmVyZW5kZXIpIHtcbiAgICAgICAgc2hvd0lucHV0KHBhcmFtcyk7XG4gICAgICB9XG4gICAgICAvLyBzZXQgY3VzdG9tIGNsYXNzXG4gICAgICBzZXRDdXN0b21DbGFzcyhwYXJhbXMpO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogQHBhcmFtIHtTd2VldEFsZXJ0T3B0aW9uc30gcGFyYW1zXG4gICAqL1xuICBjb25zdCBzaG93SW5wdXQgPSBwYXJhbXMgPT4ge1xuICAgIGlmICghcGFyYW1zLmlucHV0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghcmVuZGVySW5wdXRUeXBlW3BhcmFtcy5pbnB1dF0pIHtcbiAgICAgIGVycm9yKFwiVW5leHBlY3RlZCB0eXBlIG9mIGlucHV0ISBFeHBlY3RlZCBcXFwidGV4dFxcXCIsIFxcXCJlbWFpbFxcXCIsIFxcXCJwYXNzd29yZFxcXCIsIFxcXCJudW1iZXJcXFwiLCBcXFwidGVsXFxcIiwgXFxcInNlbGVjdFxcXCIsIFxcXCJyYWRpb1xcXCIsIFxcXCJjaGVja2JveFxcXCIsIFxcXCJ0ZXh0YXJlYVxcXCIsIFxcXCJmaWxlXFxcIiBvciBcXFwidXJsXFxcIiwgZ290IFxcXCJcIi5jb25jYXQocGFyYW1zLmlucHV0LCBcIlxcXCJcIikpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpbnB1dENvbnRhaW5lciA9IGdldElucHV0Q29udGFpbmVyKHBhcmFtcy5pbnB1dCk7XG4gICAgY29uc3QgaW5wdXQgPSByZW5kZXJJbnB1dFR5cGVbcGFyYW1zLmlucHV0XShpbnB1dENvbnRhaW5lciwgcGFyYW1zKTtcbiAgICBzaG93KGlucHV0Q29udGFpbmVyKTtcblxuICAgIC8vIGlucHV0IGF1dG9mb2N1c1xuICAgIGlmIChwYXJhbXMuaW5wdXRBdXRvRm9jdXMpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBmb2N1c0lucHV0KGlucHV0KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogQHBhcmFtIHtIVE1MSW5wdXRFbGVtZW50fSBpbnB1dFxuICAgKi9cbiAgY29uc3QgcmVtb3ZlQXR0cmlidXRlcyA9IGlucHV0ID0+IHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0LmF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGF0dHJOYW1lID0gaW5wdXQuYXR0cmlidXRlc1tpXS5uYW1lO1xuICAgICAgaWYgKCFbJ2lkJywgJ3R5cGUnLCAndmFsdWUnLCAnc3R5bGUnXS5pbmNsdWRlcyhhdHRyTmFtZSkpIHtcbiAgICAgICAgaW5wdXQucmVtb3ZlQXR0cmlidXRlKGF0dHJOYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7SW5wdXRDbGFzc30gaW5wdXRDbGFzc1xuICAgKiBAcGFyYW0ge1N3ZWV0QWxlcnRPcHRpb25zWydpbnB1dEF0dHJpYnV0ZXMnXX0gaW5wdXRBdHRyaWJ1dGVzXG4gICAqL1xuICBjb25zdCBzZXRBdHRyaWJ1dGVzID0gKGlucHV0Q2xhc3MsIGlucHV0QXR0cmlidXRlcykgPT4ge1xuICAgIGNvbnN0IGlucHV0ID0gZ2V0SW5wdXQkMShnZXRQb3B1cCgpLCBpbnB1dENsYXNzKTtcbiAgICBpZiAoIWlucHV0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHJlbW92ZUF0dHJpYnV0ZXMoaW5wdXQpO1xuICAgIGZvciAoY29uc3QgYXR0ciBpbiBpbnB1dEF0dHJpYnV0ZXMpIHtcbiAgICAgIGlucHV0LnNldEF0dHJpYnV0ZShhdHRyLCBpbnB1dEF0dHJpYnV0ZXNbYXR0cl0pO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogQHBhcmFtIHtTd2VldEFsZXJ0T3B0aW9uc30gcGFyYW1zXG4gICAqL1xuICBjb25zdCBzZXRDdXN0b21DbGFzcyA9IHBhcmFtcyA9PiB7XG4gICAgY29uc3QgaW5wdXRDb250YWluZXIgPSBnZXRJbnB1dENvbnRhaW5lcihwYXJhbXMuaW5wdXQpO1xuICAgIGlmICh0eXBlb2YgcGFyYW1zLmN1c3RvbUNsYXNzID09PSAnb2JqZWN0Jykge1xuICAgICAgYWRkQ2xhc3MoaW5wdXRDb250YWluZXIsIHBhcmFtcy5jdXN0b21DbGFzcy5pbnB1dCk7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0hUTUxJbnB1dEVsZW1lbnQgfCBIVE1MVGV4dEFyZWFFbGVtZW50fSBpbnB1dFxuICAgKiBAcGFyYW0ge1N3ZWV0QWxlcnRPcHRpb25zfSBwYXJhbXNcbiAgICovXG4gIGNvbnN0IHNldElucHV0UGxhY2Vob2xkZXIgPSAoaW5wdXQsIHBhcmFtcykgPT4ge1xuICAgIGlmICghaW5wdXQucGxhY2Vob2xkZXIgfHwgcGFyYW1zLmlucHV0UGxhY2Vob2xkZXIpIHtcbiAgICAgIGlucHV0LnBsYWNlaG9sZGVyID0gcGFyYW1zLmlucHV0UGxhY2Vob2xkZXI7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0lucHV0fSBpbnB1dFxuICAgKiBAcGFyYW0ge0lucHV0fSBwcmVwZW5kVG9cbiAgICogQHBhcmFtIHtTd2VldEFsZXJ0T3B0aW9uc30gcGFyYW1zXG4gICAqL1xuICBjb25zdCBzZXRJbnB1dExhYmVsID0gKGlucHV0LCBwcmVwZW5kVG8sIHBhcmFtcykgPT4ge1xuICAgIGlmIChwYXJhbXMuaW5wdXRMYWJlbCkge1xuICAgICAgY29uc3QgbGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsYWJlbCcpO1xuICAgICAgY29uc3QgbGFiZWxDbGFzcyA9IHN3YWxDbGFzc2VzWydpbnB1dC1sYWJlbCddO1xuICAgICAgbGFiZWwuc2V0QXR0cmlidXRlKCdmb3InLCBpbnB1dC5pZCk7XG4gICAgICBsYWJlbC5jbGFzc05hbWUgPSBsYWJlbENsYXNzO1xuICAgICAgaWYgKHR5cGVvZiBwYXJhbXMuY3VzdG9tQ2xhc3MgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGFkZENsYXNzKGxhYmVsLCBwYXJhbXMuY3VzdG9tQ2xhc3MuaW5wdXRMYWJlbCk7XG4gICAgICB9XG4gICAgICBsYWJlbC5pbm5lclRleHQgPSBwYXJhbXMuaW5wdXRMYWJlbDtcbiAgICAgIHByZXBlbmRUby5pbnNlcnRBZGphY2VudEVsZW1lbnQoJ2JlZm9yZWJlZ2luJywgbGFiZWwpO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogQHBhcmFtIHtTd2VldEFsZXJ0T3B0aW9uc1snaW5wdXQnXX0gaW5wdXRUeXBlXG4gICAqIEByZXR1cm5zIHtIVE1MRWxlbWVudH1cbiAgICovXG4gIGNvbnN0IGdldElucHV0Q29udGFpbmVyID0gaW5wdXRUeXBlID0+IHtcbiAgICByZXR1cm4gZ2V0RGlyZWN0Q2hpbGRCeUNsYXNzKGdldFBvcHVwKCksIHN3YWxDbGFzc2VzW2lucHV0VHlwZV0gfHwgc3dhbENsYXNzZXMuaW5wdXQpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0hUTUxJbnB1dEVsZW1lbnQgfCBIVE1MT3V0cHV0RWxlbWVudCB8IEhUTUxUZXh0QXJlYUVsZW1lbnR9IGlucHV0XG4gICAqIEBwYXJhbSB7U3dlZXRBbGVydE9wdGlvbnNbJ2lucHV0VmFsdWUnXX0gaW5wdXRWYWx1ZVxuICAgKi9cbiAgY29uc3QgY2hlY2tBbmRTZXRJbnB1dFZhbHVlID0gKGlucHV0LCBpbnB1dFZhbHVlKSA9PiB7XG4gICAgaWYgKFsnc3RyaW5nJywgJ251bWJlciddLmluY2x1ZGVzKHR5cGVvZiBpbnB1dFZhbHVlKSkge1xuICAgICAgaW5wdXQudmFsdWUgPSBcIlwiLmNvbmNhdChpbnB1dFZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKCFpc1Byb21pc2UoaW5wdXRWYWx1ZSkpIHtcbiAgICAgIHdhcm4oXCJVbmV4cGVjdGVkIHR5cGUgb2YgaW5wdXRWYWx1ZSEgRXhwZWN0ZWQgXFxcInN0cmluZ1xcXCIsIFxcXCJudW1iZXJcXFwiIG9yIFxcXCJQcm9taXNlXFxcIiwgZ290IFxcXCJcIi5jb25jYXQodHlwZW9mIGlucHV0VmFsdWUsIFwiXFxcIlwiKSk7XG4gICAgfVxuICB9O1xuXG4gIC8qKiBAdHlwZSB7UmVjb3JkPFN3ZWV0QWxlcnRJbnB1dCwgKGlucHV0OiBJbnB1dCB8IEhUTUxFbGVtZW50LCBwYXJhbXM6IFN3ZWV0QWxlcnRPcHRpb25zKSA9PiBJbnB1dD59ICovXG4gIGNvbnN0IHJlbmRlcklucHV0VHlwZSA9IHt9O1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0hUTUxJbnB1dEVsZW1lbnR9IGlucHV0XG4gICAqIEBwYXJhbSB7U3dlZXRBbGVydE9wdGlvbnN9IHBhcmFtc1xuICAgKiBAcmV0dXJucyB7SFRNTElucHV0RWxlbWVudH1cbiAgICovXG4gIHJlbmRlcklucHV0VHlwZS50ZXh0ID0gcmVuZGVySW5wdXRUeXBlLmVtYWlsID0gcmVuZGVySW5wdXRUeXBlLnBhc3N3b3JkID0gcmVuZGVySW5wdXRUeXBlLm51bWJlciA9IHJlbmRlcklucHV0VHlwZS50ZWwgPSByZW5kZXJJbnB1dFR5cGUudXJsID0gKGlucHV0LCBwYXJhbXMpID0+IHtcbiAgICBjaGVja0FuZFNldElucHV0VmFsdWUoaW5wdXQsIHBhcmFtcy5pbnB1dFZhbHVlKTtcbiAgICBzZXRJbnB1dExhYmVsKGlucHV0LCBpbnB1dCwgcGFyYW1zKTtcbiAgICBzZXRJbnB1dFBsYWNlaG9sZGVyKGlucHV0LCBwYXJhbXMpO1xuICAgIGlucHV0LnR5cGUgPSBwYXJhbXMuaW5wdXQ7XG4gICAgcmV0dXJuIGlucHV0O1xuICB9O1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0hUTUxJbnB1dEVsZW1lbnR9IGlucHV0XG4gICAqIEBwYXJhbSB7U3dlZXRBbGVydE9wdGlvbnN9IHBhcmFtc1xuICAgKiBAcmV0dXJucyB7SFRNTElucHV0RWxlbWVudH1cbiAgICovXG4gIHJlbmRlcklucHV0VHlwZS5maWxlID0gKGlucHV0LCBwYXJhbXMpID0+IHtcbiAgICBzZXRJbnB1dExhYmVsKGlucHV0LCBpbnB1dCwgcGFyYW1zKTtcbiAgICBzZXRJbnB1dFBsYWNlaG9sZGVyKGlucHV0LCBwYXJhbXMpO1xuICAgIHJldHVybiBpbnB1dDtcbiAgfTtcblxuICAvKipcbiAgICogQHBhcmFtIHtIVE1MSW5wdXRFbGVtZW50fSByYW5nZVxuICAgKiBAcGFyYW0ge1N3ZWV0QWxlcnRPcHRpb25zfSBwYXJhbXNcbiAgICogQHJldHVybnMge0hUTUxJbnB1dEVsZW1lbnR9XG4gICAqL1xuICByZW5kZXJJbnB1dFR5cGUucmFuZ2UgPSAocmFuZ2UsIHBhcmFtcykgPT4ge1xuICAgIGNvbnN0IHJhbmdlSW5wdXQgPSByYW5nZS5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpO1xuICAgIGNvbnN0IHJhbmdlT3V0cHV0ID0gcmFuZ2UucXVlcnlTZWxlY3Rvcignb3V0cHV0Jyk7XG4gICAgY2hlY2tBbmRTZXRJbnB1dFZhbHVlKHJhbmdlSW5wdXQsIHBhcmFtcy5pbnB1dFZhbHVlKTtcbiAgICByYW5nZUlucHV0LnR5cGUgPSBwYXJhbXMuaW5wdXQ7XG4gICAgY2hlY2tBbmRTZXRJbnB1dFZhbHVlKHJhbmdlT3V0cHV0LCBwYXJhbXMuaW5wdXRWYWx1ZSk7XG4gICAgc2V0SW5wdXRMYWJlbChyYW5nZUlucHV0LCByYW5nZSwgcGFyYW1zKTtcbiAgICByZXR1cm4gcmFuZ2U7XG4gIH07XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7SFRNTFNlbGVjdEVsZW1lbnR9IHNlbGVjdFxuICAgKiBAcGFyYW0ge1N3ZWV0QWxlcnRPcHRpb25zfSBwYXJhbXNcbiAgICogQHJldHVybnMge0hUTUxTZWxlY3RFbGVtZW50fVxuICAgKi9cbiAgcmVuZGVySW5wdXRUeXBlLnNlbGVjdCA9IChzZWxlY3QsIHBhcmFtcykgPT4ge1xuICAgIHNlbGVjdC50ZXh0Q29udGVudCA9ICcnO1xuICAgIGlmIChwYXJhbXMuaW5wdXRQbGFjZWhvbGRlcikge1xuICAgICAgY29uc3QgcGxhY2Vob2xkZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdvcHRpb24nKTtcbiAgICAgIHNldElubmVySHRtbChwbGFjZWhvbGRlciwgcGFyYW1zLmlucHV0UGxhY2Vob2xkZXIpO1xuICAgICAgcGxhY2Vob2xkZXIudmFsdWUgPSAnJztcbiAgICAgIHBsYWNlaG9sZGVyLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgIHBsYWNlaG9sZGVyLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgIHNlbGVjdC5hcHBlbmRDaGlsZChwbGFjZWhvbGRlcik7XG4gICAgfVxuICAgIHNldElucHV0TGFiZWwoc2VsZWN0LCBzZWxlY3QsIHBhcmFtcyk7XG4gICAgcmV0dXJuIHNlbGVjdDtcbiAgfTtcblxuICAvKipcbiAgICogQHBhcmFtIHtIVE1MSW5wdXRFbGVtZW50fSByYWRpb1xuICAgKiBAcmV0dXJucyB7SFRNTElucHV0RWxlbWVudH1cbiAgICovXG4gIHJlbmRlcklucHV0VHlwZS5yYWRpbyA9IHJhZGlvID0+IHtcbiAgICByYWRpby50ZXh0Q29udGVudCA9ICcnO1xuICAgIHJldHVybiByYWRpbztcbiAgfTtcblxuICAvKipcbiAgICogQHBhcmFtIHtIVE1MTGFiZWxFbGVtZW50fSBjaGVja2JveENvbnRhaW5lclxuICAgKiBAcGFyYW0ge1N3ZWV0QWxlcnRPcHRpb25zfSBwYXJhbXNcbiAgICogQHJldHVybnMge0hUTUxJbnB1dEVsZW1lbnR9XG4gICAqL1xuICByZW5kZXJJbnB1dFR5cGUuY2hlY2tib3ggPSAoY2hlY2tib3hDb250YWluZXIsIHBhcmFtcykgPT4ge1xuICAgIGNvbnN0IGNoZWNrYm94ID0gZ2V0SW5wdXQkMShnZXRQb3B1cCgpLCAnY2hlY2tib3gnKTtcbiAgICBjaGVja2JveC52YWx1ZSA9ICcxJztcbiAgICBjaGVja2JveC5jaGVja2VkID0gQm9vbGVhbihwYXJhbXMuaW5wdXRWYWx1ZSk7XG4gICAgY29uc3QgbGFiZWwgPSBjaGVja2JveENvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCdzcGFuJyk7XG4gICAgc2V0SW5uZXJIdG1sKGxhYmVsLCBwYXJhbXMuaW5wdXRQbGFjZWhvbGRlcik7XG4gICAgcmV0dXJuIGNoZWNrYm94O1xuICB9O1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0hUTUxUZXh0QXJlYUVsZW1lbnR9IHRleHRhcmVhXG4gICAqIEBwYXJhbSB7U3dlZXRBbGVydE9wdGlvbnN9IHBhcmFtc1xuICAgKiBAcmV0dXJucyB7SFRNTFRleHRBcmVhRWxlbWVudH1cbiAgICovXG4gIHJlbmRlcklucHV0VHlwZS50ZXh0YXJlYSA9ICh0ZXh0YXJlYSwgcGFyYW1zKSA9PiB7XG4gICAgY2hlY2tBbmRTZXRJbnB1dFZhbHVlKHRleHRhcmVhLCBwYXJhbXMuaW5wdXRWYWx1ZSk7XG4gICAgc2V0SW5wdXRQbGFjZWhvbGRlcih0ZXh0YXJlYSwgcGFyYW1zKTtcbiAgICBzZXRJbnB1dExhYmVsKHRleHRhcmVhLCB0ZXh0YXJlYSwgcGFyYW1zKTtcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsXG4gICAgICogQHJldHVybnMge251bWJlcn1cbiAgICAgKi9cbiAgICBjb25zdCBnZXRNYXJnaW4gPSBlbCA9PiBwYXJzZUludCh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCkubWFyZ2luTGVmdCkgKyBwYXJzZUludCh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCkubWFyZ2luUmlnaHQpO1xuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3N3ZWV0YWxlcnQyL3N3ZWV0YWxlcnQyL2lzc3Vlcy8yMjkxXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vc3dlZXRhbGVydDIvc3dlZXRhbGVydDIvaXNzdWVzLzE2OTlcbiAgICAgIGlmICgnTXV0YXRpb25PYnNlcnZlcicgaW4gd2luZG93KSB7XG4gICAgICAgIGNvbnN0IGluaXRpYWxQb3B1cFdpZHRoID0gcGFyc2VJbnQod2luZG93LmdldENvbXB1dGVkU3R5bGUoZ2V0UG9wdXAoKSkud2lkdGgpO1xuICAgICAgICBjb25zdCB0ZXh0YXJlYVJlc2l6ZUhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICAgICAgLy8gY2hlY2sgaWYgdGV4YXJlYSBpcyBzdGlsbCBpbiBkb2N1bWVudCAoaS5lLiBwb3B1cCB3YXNuJ3QgY2xvc2VkIGluIHRoZSBtZWFudGltZSlcbiAgICAgICAgICBpZiAoIWRvY3VtZW50LmJvZHkuY29udGFpbnModGV4dGFyZWEpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHRleHRhcmVhV2lkdGggPSB0ZXh0YXJlYS5vZmZzZXRXaWR0aCArIGdldE1hcmdpbih0ZXh0YXJlYSk7XG4gICAgICAgICAgaWYgKHRleHRhcmVhV2lkdGggPiBpbml0aWFsUG9wdXBXaWR0aCkge1xuICAgICAgICAgICAgZ2V0UG9wdXAoKS5zdHlsZS53aWR0aCA9IFwiXCIuY29uY2F0KHRleHRhcmVhV2lkdGgsIFwicHhcIik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFwcGx5TnVtZXJpY2FsU3R5bGUoZ2V0UG9wdXAoKSwgJ3dpZHRoJywgcGFyYW1zLndpZHRoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIG5ldyBNdXRhdGlvbk9ic2VydmVyKHRleHRhcmVhUmVzaXplSGFuZGxlcikub2JzZXJ2ZSh0ZXh0YXJlYSwge1xuICAgICAgICAgIGF0dHJpYnV0ZXM6IHRydWUsXG4gICAgICAgICAgYXR0cmlidXRlRmlsdGVyOiBbJ3N0eWxlJ11cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHRleHRhcmVhO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1N3ZWV0QWxlcnR9IGluc3RhbmNlXG4gICAqIEBwYXJhbSB7U3dlZXRBbGVydE9wdGlvbnN9IHBhcmFtc1xuICAgKi9cbiAgY29uc3QgcmVuZGVyQ29udGVudCA9IChpbnN0YW5jZSwgcGFyYW1zKSA9PiB7XG4gICAgY29uc3QgaHRtbENvbnRhaW5lciA9IGdldEh0bWxDb250YWluZXIoKTtcbiAgICBpZiAoIWh0bWxDb250YWluZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYXBwbHlDdXN0b21DbGFzcyhodG1sQ29udGFpbmVyLCBwYXJhbXMsICdodG1sQ29udGFpbmVyJyk7XG5cbiAgICAvLyBDb250ZW50IGFzIEhUTUxcbiAgICBpZiAocGFyYW1zLmh0bWwpIHtcbiAgICAgIHBhcnNlSHRtbFRvQ29udGFpbmVyKHBhcmFtcy5odG1sLCBodG1sQ29udGFpbmVyKTtcbiAgICAgIHNob3coaHRtbENvbnRhaW5lciwgJ2Jsb2NrJyk7XG4gICAgfVxuXG4gICAgLy8gQ29udGVudCBhcyBwbGFpbiB0ZXh0XG4gICAgZWxzZSBpZiAocGFyYW1zLnRleHQpIHtcbiAgICAgIGh0bWxDb250YWluZXIudGV4dENvbnRlbnQgPSBwYXJhbXMudGV4dDtcbiAgICAgIHNob3coaHRtbENvbnRhaW5lciwgJ2Jsb2NrJyk7XG4gICAgfVxuXG4gICAgLy8gTm8gY29udGVudFxuICAgIGVsc2Uge1xuICAgICAgaGlkZShodG1sQ29udGFpbmVyKTtcbiAgICB9XG4gICAgcmVuZGVySW5wdXQoaW5zdGFuY2UsIHBhcmFtcyk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7U3dlZXRBbGVydH0gaW5zdGFuY2VcbiAgICogQHBhcmFtIHtTd2VldEFsZXJ0T3B0aW9uc30gcGFyYW1zXG4gICAqL1xuICBjb25zdCByZW5kZXJGb290ZXIgPSAoaW5zdGFuY2UsIHBhcmFtcykgPT4ge1xuICAgIGNvbnN0IGZvb3RlciA9IGdldEZvb3RlcigpO1xuICAgIGlmICghZm9vdGVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRvZ2dsZShmb290ZXIsIHBhcmFtcy5mb290ZXIsICdibG9jaycpO1xuICAgIGlmIChwYXJhbXMuZm9vdGVyKSB7XG4gICAgICBwYXJzZUh0bWxUb0NvbnRhaW5lcihwYXJhbXMuZm9vdGVyLCBmb290ZXIpO1xuICAgIH1cblxuICAgIC8vIEN1c3RvbSBjbGFzc1xuICAgIGFwcGx5Q3VzdG9tQ2xhc3MoZm9vdGVyLCBwYXJhbXMsICdmb290ZXInKTtcbiAgfTtcblxuICAvKipcbiAgICogQHBhcmFtIHtTd2VldEFsZXJ0fSBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge1N3ZWV0QWxlcnRPcHRpb25zfSBwYXJhbXNcbiAgICovXG4gIGNvbnN0IHJlbmRlckljb24gPSAoaW5zdGFuY2UsIHBhcmFtcykgPT4ge1xuICAgIGNvbnN0IGlubmVyUGFyYW1zID0gcHJpdmF0ZVByb3BzLmlubmVyUGFyYW1zLmdldChpbnN0YW5jZSk7XG4gICAgY29uc3QgaWNvbiA9IGdldEljb24oKTtcbiAgICBpZiAoIWljb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgZ2l2ZW4gaWNvbiBhbHJlYWR5IHJlbmRlcmVkLCBhcHBseSB0aGUgc3R5bGluZyB3aXRob3V0IHJlLXJlbmRlcmluZyB0aGUgaWNvblxuICAgIGlmIChpbm5lclBhcmFtcyAmJiBwYXJhbXMuaWNvbiA9PT0gaW5uZXJQYXJhbXMuaWNvbikge1xuICAgICAgLy8gQ3VzdG9tIG9yIGRlZmF1bHQgY29udGVudFxuICAgICAgc2V0Q29udGVudChpY29uLCBwYXJhbXMpO1xuICAgICAgYXBwbHlTdHlsZXMoaWNvbiwgcGFyYW1zKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFwYXJhbXMuaWNvbiAmJiAhcGFyYW1zLmljb25IdG1sKSB7XG4gICAgICBoaWRlKGljb24pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAocGFyYW1zLmljb24gJiYgT2JqZWN0LmtleXMoaWNvblR5cGVzKS5pbmRleE9mKHBhcmFtcy5pY29uKSA9PT0gLTEpIHtcbiAgICAgIGVycm9yKFwiVW5rbm93biBpY29uISBFeHBlY3RlZCBcXFwic3VjY2Vzc1xcXCIsIFxcXCJlcnJvclxcXCIsIFxcXCJ3YXJuaW5nXFxcIiwgXFxcImluZm9cXFwiIG9yIFxcXCJxdWVzdGlvblxcXCIsIGdvdCBcXFwiXCIuY29uY2F0KHBhcmFtcy5pY29uLCBcIlxcXCJcIikpO1xuICAgICAgaGlkZShpY29uKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc2hvdyhpY29uKTtcblxuICAgIC8vIEN1c3RvbSBvciBkZWZhdWx0IGNvbnRlbnRcbiAgICBzZXRDb250ZW50KGljb24sIHBhcmFtcyk7XG4gICAgYXBwbHlTdHlsZXMoaWNvbiwgcGFyYW1zKTtcblxuICAgIC8vIEFuaW1hdGUgaWNvblxuICAgIGFkZENsYXNzKGljb24sIHBhcmFtcy5zaG93Q2xhc3MgJiYgcGFyYW1zLnNob3dDbGFzcy5pY29uKTtcbiAgfTtcblxuICAvKipcbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gaWNvblxuICAgKiBAcGFyYW0ge1N3ZWV0QWxlcnRPcHRpb25zfSBwYXJhbXNcbiAgICovXG4gIGNvbnN0IGFwcGx5U3R5bGVzID0gKGljb24sIHBhcmFtcykgPT4ge1xuICAgIGZvciAoY29uc3QgW2ljb25UeXBlLCBpY29uQ2xhc3NOYW1lXSBvZiBPYmplY3QuZW50cmllcyhpY29uVHlwZXMpKSB7XG4gICAgICBpZiAocGFyYW1zLmljb24gIT09IGljb25UeXBlKSB7XG4gICAgICAgIHJlbW92ZUNsYXNzKGljb24sIGljb25DbGFzc05hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgICBhZGRDbGFzcyhpY29uLCBwYXJhbXMuaWNvbiAmJiBpY29uVHlwZXNbcGFyYW1zLmljb25dKTtcblxuICAgIC8vIEljb24gY29sb3JcbiAgICBzZXRDb2xvcihpY29uLCBwYXJhbXMpO1xuXG4gICAgLy8gU3VjY2VzcyBpY29uIGJhY2tncm91bmQgY29sb3JcbiAgICBhZGp1c3RTdWNjZXNzSWNvbkJhY2tncm91bmRDb2xvcigpO1xuXG4gICAgLy8gQ3VzdG9tIGNsYXNzXG4gICAgYXBwbHlDdXN0b21DbGFzcyhpY29uLCBwYXJhbXMsICdpY29uJyk7XG4gIH07XG5cbiAgLy8gQWRqdXN0IHN1Y2Nlc3MgaWNvbiBiYWNrZ3JvdW5kIGNvbG9yIHRvIG1hdGNoIHRoZSBwb3B1cCBiYWNrZ3JvdW5kIGNvbG9yXG4gIGNvbnN0IGFkanVzdFN1Y2Nlc3NJY29uQmFja2dyb3VuZENvbG9yID0gKCkgPT4ge1xuICAgIGNvbnN0IHBvcHVwID0gZ2V0UG9wdXAoKTtcbiAgICBpZiAoIXBvcHVwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHBvcHVwQmFja2dyb3VuZENvbG9yID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUocG9wdXApLmdldFByb3BlcnR5VmFsdWUoJ2JhY2tncm91bmQtY29sb3InKTtcbiAgICAvKiogQHR5cGUge05vZGVMaXN0T2Y8SFRNTEVsZW1lbnQ+fSAqL1xuICAgIGNvbnN0IHN1Y2Nlc3NJY29uUGFydHMgPSBwb3B1cC5xdWVyeVNlbGVjdG9yQWxsKCdbY2xhc3NePXN3YWwyLXN1Y2Nlc3MtY2lyY3VsYXItbGluZV0sIC5zd2FsMi1zdWNjZXNzLWZpeCcpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3VjY2Vzc0ljb25QYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgICAgc3VjY2Vzc0ljb25QYXJ0c1tpXS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBwb3B1cEJhY2tncm91bmRDb2xvcjtcbiAgICB9XG4gIH07XG4gIGNvbnN0IHN1Y2Nlc3NJY29uSHRtbCA9IFwiXFxuICA8ZGl2IGNsYXNzPVxcXCJzd2FsMi1zdWNjZXNzLWNpcmN1bGFyLWxpbmUtbGVmdFxcXCI+PC9kaXY+XFxuICA8c3BhbiBjbGFzcz1cXFwic3dhbDItc3VjY2Vzcy1saW5lLXRpcFxcXCI+PC9zcGFuPiA8c3BhbiBjbGFzcz1cXFwic3dhbDItc3VjY2Vzcy1saW5lLWxvbmdcXFwiPjwvc3Bhbj5cXG4gIDxkaXYgY2xhc3M9XFxcInN3YWwyLXN1Y2Nlc3MtcmluZ1xcXCI+PC9kaXY+IDxkaXYgY2xhc3M9XFxcInN3YWwyLXN1Y2Nlc3MtZml4XFxcIj48L2Rpdj5cXG4gIDxkaXYgY2xhc3M9XFxcInN3YWwyLXN1Y2Nlc3MtY2lyY3VsYXItbGluZS1yaWdodFxcXCI+PC9kaXY+XFxuXCI7XG4gIGNvbnN0IGVycm9ySWNvbkh0bWwgPSBcIlxcbiAgPHNwYW4gY2xhc3M9XFxcInN3YWwyLXgtbWFya1xcXCI+XFxuICAgIDxzcGFuIGNsYXNzPVxcXCJzd2FsMi14LW1hcmstbGluZS1sZWZ0XFxcIj48L3NwYW4+XFxuICAgIDxzcGFuIGNsYXNzPVxcXCJzd2FsMi14LW1hcmstbGluZS1yaWdodFxcXCI+PC9zcGFuPlxcbiAgPC9zcGFuPlxcblwiO1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBpY29uXG4gICAqIEBwYXJhbSB7U3dlZXRBbGVydE9wdGlvbnN9IHBhcmFtc1xuICAgKi9cbiAgY29uc3Qgc2V0Q29udGVudCA9IChpY29uLCBwYXJhbXMpID0+IHtcbiAgICBpZiAoIXBhcmFtcy5pY29uICYmICFwYXJhbXMuaWNvbkh0bWwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IG9sZENvbnRlbnQgPSBpY29uLmlubmVySFRNTDtcbiAgICBsZXQgbmV3Q29udGVudCA9ICcnO1xuICAgIGlmIChwYXJhbXMuaWNvbkh0bWwpIHtcbiAgICAgIG5ld0NvbnRlbnQgPSBpY29uQ29udGVudChwYXJhbXMuaWNvbkh0bWwpO1xuICAgIH0gZWxzZSBpZiAocGFyYW1zLmljb24gPT09ICdzdWNjZXNzJykge1xuICAgICAgbmV3Q29udGVudCA9IHN1Y2Nlc3NJY29uSHRtbDtcbiAgICAgIG9sZENvbnRlbnQgPSBvbGRDb250ZW50LnJlcGxhY2UoLyBzdHlsZT1cIi4qP1wiL2csICcnKTsgLy8gdW5kbyBhZGp1c3RTdWNjZXNzSWNvbkJhY2tncm91bmRDb2xvcigpXG4gICAgfSBlbHNlIGlmIChwYXJhbXMuaWNvbiA9PT0gJ2Vycm9yJykge1xuICAgICAgbmV3Q29udGVudCA9IGVycm9ySWNvbkh0bWw7XG4gICAgfSBlbHNlIGlmIChwYXJhbXMuaWNvbikge1xuICAgICAgY29uc3QgZGVmYXVsdEljb25IdG1sID0ge1xuICAgICAgICBxdWVzdGlvbjogJz8nLFxuICAgICAgICB3YXJuaW5nOiAnIScsXG4gICAgICAgIGluZm86ICdpJ1xuICAgICAgfTtcbiAgICAgIG5ld0NvbnRlbnQgPSBpY29uQ29udGVudChkZWZhdWx0SWNvbkh0bWxbcGFyYW1zLmljb25dKTtcbiAgICB9XG4gICAgaWYgKG9sZENvbnRlbnQudHJpbSgpICE9PSBuZXdDb250ZW50LnRyaW0oKSkge1xuICAgICAgc2V0SW5uZXJIdG1sKGljb24sIG5ld0NvbnRlbnQpO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gaWNvblxuICAgKiBAcGFyYW0ge1N3ZWV0QWxlcnRPcHRpb25zfSBwYXJhbXNcbiAgICovXG4gIGNvbnN0IHNldENvbG9yID0gKGljb24sIHBhcmFtcykgPT4ge1xuICAgIGlmICghcGFyYW1zLmljb25Db2xvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpY29uLnN0eWxlLmNvbG9yID0gcGFyYW1zLmljb25Db2xvcjtcbiAgICBpY29uLnN0eWxlLmJvcmRlckNvbG9yID0gcGFyYW1zLmljb25Db2xvcjtcbiAgICBmb3IgKGNvbnN0IHNlbCBvZiBbJy5zd2FsMi1zdWNjZXNzLWxpbmUtdGlwJywgJy5zd2FsMi1zdWNjZXNzLWxpbmUtbG9uZycsICcuc3dhbDIteC1tYXJrLWxpbmUtbGVmdCcsICcuc3dhbDIteC1tYXJrLWxpbmUtcmlnaHQnXSkge1xuICAgICAgc2V0U3R5bGUoaWNvbiwgc2VsLCAnYmFja2dyb3VuZENvbG9yJywgcGFyYW1zLmljb25Db2xvcik7XG4gICAgfVxuICAgIHNldFN0eWxlKGljb24sICcuc3dhbDItc3VjY2Vzcy1yaW5nJywgJ2JvcmRlckNvbG9yJywgcGFyYW1zLmljb25Db2xvcik7XG4gIH07XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50XG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBjb25zdCBpY29uQ29udGVudCA9IGNvbnRlbnQgPT4gXCI8ZGl2IGNsYXNzPVxcXCJcIi5jb25jYXQoc3dhbENsYXNzZXNbJ2ljb24tY29udGVudCddLCBcIlxcXCI+XCIpLmNvbmNhdChjb250ZW50LCBcIjwvZGl2PlwiKTtcblxuICAvKipcbiAgICogQHBhcmFtIHtTd2VldEFsZXJ0fSBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge1N3ZWV0QWxlcnRPcHRpb25zfSBwYXJhbXNcbiAgICovXG4gIGNvbnN0IHJlbmRlckltYWdlID0gKGluc3RhbmNlLCBwYXJhbXMpID0+IHtcbiAgICBjb25zdCBpbWFnZSA9IGdldEltYWdlKCk7XG4gICAgaWYgKCFpbWFnZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXBhcmFtcy5pbWFnZVVybCkge1xuICAgICAgaGlkZShpbWFnZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHNob3coaW1hZ2UsICcnKTtcblxuICAgIC8vIFNyYywgYWx0XG4gICAgaW1hZ2Uuc2V0QXR0cmlidXRlKCdzcmMnLCBwYXJhbXMuaW1hZ2VVcmwpO1xuICAgIGltYWdlLnNldEF0dHJpYnV0ZSgnYWx0JywgcGFyYW1zLmltYWdlQWx0IHx8ICcnKTtcblxuICAgIC8vIFdpZHRoLCBoZWlnaHRcbiAgICBhcHBseU51bWVyaWNhbFN0eWxlKGltYWdlLCAnd2lkdGgnLCBwYXJhbXMuaW1hZ2VXaWR0aCk7XG4gICAgYXBwbHlOdW1lcmljYWxTdHlsZShpbWFnZSwgJ2hlaWdodCcsIHBhcmFtcy5pbWFnZUhlaWdodCk7XG5cbiAgICAvLyBDbGFzc1xuICAgIGltYWdlLmNsYXNzTmFtZSA9IHN3YWxDbGFzc2VzLmltYWdlO1xuICAgIGFwcGx5Q3VzdG9tQ2xhc3MoaW1hZ2UsIHBhcmFtcywgJ2ltYWdlJyk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7U3dlZXRBbGVydH0gaW5zdGFuY2VcbiAgICogQHBhcmFtIHtTd2VldEFsZXJ0T3B0aW9uc30gcGFyYW1zXG4gICAqL1xuICBjb25zdCByZW5kZXJQb3B1cCA9IChpbnN0YW5jZSwgcGFyYW1zKSA9PiB7XG4gICAgY29uc3QgY29udGFpbmVyID0gZ2V0Q29udGFpbmVyKCk7XG4gICAgY29uc3QgcG9wdXAgPSBnZXRQb3B1cCgpO1xuICAgIGlmICghY29udGFpbmVyIHx8ICFwb3B1cCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFdpZHRoXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3N3ZWV0YWxlcnQyL3N3ZWV0YWxlcnQyL2lzc3Vlcy8yMTcwXG4gICAgaWYgKHBhcmFtcy50b2FzdCkge1xuICAgICAgYXBwbHlOdW1lcmljYWxTdHlsZShjb250YWluZXIsICd3aWR0aCcsIHBhcmFtcy53aWR0aCk7XG4gICAgICBwb3B1cC5zdHlsZS53aWR0aCA9ICcxMDAlJztcbiAgICAgIGNvbnN0IGxvYWRlciA9IGdldExvYWRlcigpO1xuICAgICAgbG9hZGVyICYmIHBvcHVwLmluc2VydEJlZm9yZShsb2FkZXIsIGdldEljb24oKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFwcGx5TnVtZXJpY2FsU3R5bGUocG9wdXAsICd3aWR0aCcsIHBhcmFtcy53aWR0aCk7XG4gICAgfVxuXG4gICAgLy8gUGFkZGluZ1xuICAgIGFwcGx5TnVtZXJpY2FsU3R5bGUocG9wdXAsICdwYWRkaW5nJywgcGFyYW1zLnBhZGRpbmcpO1xuXG4gICAgLy8gQ29sb3JcbiAgICBpZiAocGFyYW1zLmNvbG9yKSB7XG4gICAgICBwb3B1cC5zdHlsZS5jb2xvciA9IHBhcmFtcy5jb2xvcjtcbiAgICB9XG5cbiAgICAvLyBCYWNrZ3JvdW5kXG4gICAgaWYgKHBhcmFtcy5iYWNrZ3JvdW5kKSB7XG4gICAgICBwb3B1cC5zdHlsZS5iYWNrZ3JvdW5kID0gcGFyYW1zLmJhY2tncm91bmQ7XG4gICAgfVxuICAgIGhpZGUoZ2V0VmFsaWRhdGlvbk1lc3NhZ2UoKSk7XG5cbiAgICAvLyBDbGFzc2VzXG4gICAgYWRkQ2xhc3NlcyQxKHBvcHVwLCBwYXJhbXMpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBwb3B1cFxuICAgKiBAcGFyYW0ge1N3ZWV0QWxlcnRPcHRpb25zfSBwYXJhbXNcbiAgICovXG4gIGNvbnN0IGFkZENsYXNzZXMkMSA9IChwb3B1cCwgcGFyYW1zKSA9PiB7XG4gICAgY29uc3Qgc2hvd0NsYXNzID0gcGFyYW1zLnNob3dDbGFzcyB8fCB7fTtcbiAgICAvLyBEZWZhdWx0IENsYXNzICsgc2hvd0NsYXNzIHdoZW4gdXBkYXRpbmcgU3dhbC51cGRhdGUoe30pXG4gICAgcG9wdXAuY2xhc3NOYW1lID0gXCJcIi5jb25jYXQoc3dhbENsYXNzZXMucG9wdXAsIFwiIFwiKS5jb25jYXQoaXNWaXNpYmxlJDEocG9wdXApID8gc2hvd0NsYXNzLnBvcHVwIDogJycpO1xuICAgIGlmIChwYXJhbXMudG9hc3QpIHtcbiAgICAgIGFkZENsYXNzKFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIGRvY3VtZW50LmJvZHldLCBzd2FsQ2xhc3Nlc1sndG9hc3Qtc2hvd24nXSk7XG4gICAgICBhZGRDbGFzcyhwb3B1cCwgc3dhbENsYXNzZXMudG9hc3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhZGRDbGFzcyhwb3B1cCwgc3dhbENsYXNzZXMubW9kYWwpO1xuICAgIH1cblxuICAgIC8vIEN1c3RvbSBjbGFzc1xuICAgIGFwcGx5Q3VzdG9tQ2xhc3MocG9wdXAsIHBhcmFtcywgJ3BvcHVwJyk7XG4gICAgaWYgKHR5cGVvZiBwYXJhbXMuY3VzdG9tQ2xhc3MgPT09ICdzdHJpbmcnKSB7XG4gICAgICBhZGRDbGFzcyhwb3B1cCwgcGFyYW1zLmN1c3RvbUNsYXNzKTtcbiAgICB9XG5cbiAgICAvLyBJY29uIGNsYXNzICgjMTg0MilcbiAgICBpZiAocGFyYW1zLmljb24pIHtcbiAgICAgIGFkZENsYXNzKHBvcHVwLCBzd2FsQ2xhc3Nlc1tcImljb24tXCIuY29uY2F0KHBhcmFtcy5pY29uKV0pO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogQHBhcmFtIHtTd2VldEFsZXJ0fSBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge1N3ZWV0QWxlcnRPcHRpb25zfSBwYXJhbXNcbiAgICovXG4gIGNvbnN0IHJlbmRlclByb2dyZXNzU3RlcHMgPSAoaW5zdGFuY2UsIHBhcmFtcykgPT4ge1xuICAgIGNvbnN0IHByb2dyZXNzU3RlcHNDb250YWluZXIgPSBnZXRQcm9ncmVzc1N0ZXBzKCk7XG4gICAgaWYgKCFwcm9ncmVzc1N0ZXBzQ29udGFpbmVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHtcbiAgICAgIHByb2dyZXNzU3RlcHMsXG4gICAgICBjdXJyZW50UHJvZ3Jlc3NTdGVwXG4gICAgfSA9IHBhcmFtcztcbiAgICBpZiAoIXByb2dyZXNzU3RlcHMgfHwgcHJvZ3Jlc3NTdGVwcy5sZW5ndGggPT09IDAgfHwgY3VycmVudFByb2dyZXNzU3RlcCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBoaWRlKHByb2dyZXNzU3RlcHNDb250YWluZXIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzaG93KHByb2dyZXNzU3RlcHNDb250YWluZXIpO1xuICAgIHByb2dyZXNzU3RlcHNDb250YWluZXIudGV4dENvbnRlbnQgPSAnJztcbiAgICBpZiAoY3VycmVudFByb2dyZXNzU3RlcCA+PSBwcm9ncmVzc1N0ZXBzLmxlbmd0aCkge1xuICAgICAgd2FybignSW52YWxpZCBjdXJyZW50UHJvZ3Jlc3NTdGVwIHBhcmFtZXRlciwgaXQgc2hvdWxkIGJlIGxlc3MgdGhhbiBwcm9ncmVzc1N0ZXBzLmxlbmd0aCAnICsgJyhjdXJyZW50UHJvZ3Jlc3NTdGVwIGxpa2UgSlMgYXJyYXlzIHN0YXJ0cyBmcm9tIDApJyk7XG4gICAgfVxuICAgIHByb2dyZXNzU3RlcHMuZm9yRWFjaCgoc3RlcCwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IHN0ZXBFbCA9IGNyZWF0ZVN0ZXBFbGVtZW50KHN0ZXApO1xuICAgICAgcHJvZ3Jlc3NTdGVwc0NvbnRhaW5lci5hcHBlbmRDaGlsZChzdGVwRWwpO1xuICAgICAgaWYgKGluZGV4ID09PSBjdXJyZW50UHJvZ3Jlc3NTdGVwKSB7XG4gICAgICAgIGFkZENsYXNzKHN0ZXBFbCwgc3dhbENsYXNzZXNbJ2FjdGl2ZS1wcm9ncmVzcy1zdGVwJ10pO1xuICAgICAgfVxuICAgICAgaWYgKGluZGV4ICE9PSBwcm9ncmVzc1N0ZXBzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgY29uc3QgbGluZUVsID0gY3JlYXRlTGluZUVsZW1lbnQocGFyYW1zKTtcbiAgICAgICAgcHJvZ3Jlc3NTdGVwc0NvbnRhaW5lci5hcHBlbmRDaGlsZChsaW5lRWwpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RlcFxuICAgKiBAcmV0dXJucyB7SFRNTExJRWxlbWVudH1cbiAgICovXG4gIGNvbnN0IGNyZWF0ZVN0ZXBFbGVtZW50ID0gc3RlcCA9PiB7XG4gICAgY29uc3Qgc3RlcEVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGknKTtcbiAgICBhZGRDbGFzcyhzdGVwRWwsIHN3YWxDbGFzc2VzWydwcm9ncmVzcy1zdGVwJ10pO1xuICAgIHNldElubmVySHRtbChzdGVwRWwsIHN0ZXApO1xuICAgIHJldHVybiBzdGVwRWw7XG4gIH07XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7U3dlZXRBbGVydE9wdGlvbnN9IHBhcmFtc1xuICAgKiBAcmV0dXJucyB7SFRNTExJRWxlbWVudH1cbiAgICovXG4gIGNvbnN0IGNyZWF0ZUxpbmVFbGVtZW50ID0gcGFyYW1zID0+IHtcbiAgICBjb25zdCBsaW5lRWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaScpO1xuICAgIGFkZENsYXNzKGxpbmVFbCwgc3dhbENsYXNzZXNbJ3Byb2dyZXNzLXN0ZXAtbGluZSddKTtcbiAgICBpZiAocGFyYW1zLnByb2dyZXNzU3RlcHNEaXN0YW5jZSkge1xuICAgICAgYXBwbHlOdW1lcmljYWxTdHlsZShsaW5lRWwsICd3aWR0aCcsIHBhcmFtcy5wcm9ncmVzc1N0ZXBzRGlzdGFuY2UpO1xuICAgIH1cbiAgICByZXR1cm4gbGluZUVsO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1N3ZWV0QWxlcnR9IGluc3RhbmNlXG4gICAqIEBwYXJhbSB7U3dlZXRBbGVydE9wdGlvbnN9IHBhcmFtc1xuICAgKi9cbiAgY29uc3QgcmVuZGVyVGl0bGUgPSAoaW5zdGFuY2UsIHBhcmFtcykgPT4ge1xuICAgIGNvbnN0IHRpdGxlID0gZ2V0VGl0bGUoKTtcbiAgICBpZiAoIXRpdGxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRvZ2dsZSh0aXRsZSwgcGFyYW1zLnRpdGxlIHx8IHBhcmFtcy50aXRsZVRleHQsICdibG9jaycpO1xuICAgIGlmIChwYXJhbXMudGl0bGUpIHtcbiAgICAgIHBhcnNlSHRtbFRvQ29udGFpbmVyKHBhcmFtcy50aXRsZSwgdGl0bGUpO1xuICAgIH1cbiAgICBpZiAocGFyYW1zLnRpdGxlVGV4dCkge1xuICAgICAgdGl0bGUuaW5uZXJUZXh0ID0gcGFyYW1zLnRpdGxlVGV4dDtcbiAgICB9XG5cbiAgICAvLyBDdXN0b20gY2xhc3NcbiAgICBhcHBseUN1c3RvbUNsYXNzKHRpdGxlLCBwYXJhbXMsICd0aXRsZScpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1N3ZWV0QWxlcnR9IGluc3RhbmNlXG4gICAqIEBwYXJhbSB7U3dlZXRBbGVydE9wdGlvbnN9IHBhcmFtc1xuICAgKi9cbiAgY29uc3QgcmVuZGVyID0gKGluc3RhbmNlLCBwYXJhbXMpID0+IHtcbiAgICByZW5kZXJQb3B1cChpbnN0YW5jZSwgcGFyYW1zKTtcbiAgICByZW5kZXJDb250YWluZXIoaW5zdGFuY2UsIHBhcmFtcyk7XG4gICAgcmVuZGVyUHJvZ3Jlc3NTdGVwcyhpbnN0YW5jZSwgcGFyYW1zKTtcbiAgICByZW5kZXJJY29uKGluc3RhbmNlLCBwYXJhbXMpO1xuICAgIHJlbmRlckltYWdlKGluc3RhbmNlLCBwYXJhbXMpO1xuICAgIHJlbmRlclRpdGxlKGluc3RhbmNlLCBwYXJhbXMpO1xuICAgIHJlbmRlckNsb3NlQnV0dG9uKGluc3RhbmNlLCBwYXJhbXMpO1xuICAgIHJlbmRlckNvbnRlbnQoaW5zdGFuY2UsIHBhcmFtcyk7XG4gICAgcmVuZGVyQWN0aW9ucyhpbnN0YW5jZSwgcGFyYW1zKTtcbiAgICByZW5kZXJGb290ZXIoaW5zdGFuY2UsIHBhcmFtcyk7XG4gICAgY29uc3QgcG9wdXAgPSBnZXRQb3B1cCgpO1xuICAgIGlmICh0eXBlb2YgcGFyYW1zLmRpZFJlbmRlciA9PT0gJ2Z1bmN0aW9uJyAmJiBwb3B1cCkge1xuICAgICAgcGFyYW1zLmRpZFJlbmRlcihwb3B1cCk7XG4gICAgfVxuICB9O1xuXG4gIC8qXG4gICAqIEdsb2JhbCBmdW5jdGlvbiB0byBkZXRlcm1pbmUgaWYgU3dlZXRBbGVydDIgcG9wdXAgaXMgc2hvd25cbiAgICovXG4gIGNvbnN0IGlzVmlzaWJsZSA9ICgpID0+IHtcbiAgICByZXR1cm4gaXNWaXNpYmxlJDEoZ2V0UG9wdXAoKSk7XG4gIH07XG5cbiAgLypcbiAgICogR2xvYmFsIGZ1bmN0aW9uIHRvIGNsaWNrICdDb25maXJtJyBidXR0b25cbiAgICovXG4gIGNvbnN0IGNsaWNrQ29uZmlybSA9ICgpID0+IHtcbiAgICB2YXIgX2RvbSRnZXRDb25maXJtQnV0dG9uO1xuICAgIHJldHVybiAoX2RvbSRnZXRDb25maXJtQnV0dG9uID0gZ2V0Q29uZmlybUJ1dHRvbigpKSA9PT0gbnVsbCB8fCBfZG9tJGdldENvbmZpcm1CdXR0b24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kb20kZ2V0Q29uZmlybUJ1dHRvbi5jbGljaygpO1xuICB9O1xuXG4gIC8qXG4gICAqIEdsb2JhbCBmdW5jdGlvbiB0byBjbGljayAnRGVueScgYnV0dG9uXG4gICAqL1xuICBjb25zdCBjbGlja0RlbnkgPSAoKSA9PiB7XG4gICAgdmFyIF9kb20kZ2V0RGVueUJ1dHRvbjtcbiAgICByZXR1cm4gKF9kb20kZ2V0RGVueUJ1dHRvbiA9IGdldERlbnlCdXR0b24oKSkgPT09IG51bGwgfHwgX2RvbSRnZXREZW55QnV0dG9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZG9tJGdldERlbnlCdXR0b24uY2xpY2soKTtcbiAgfTtcblxuICAvKlxuICAgKiBHbG9iYWwgZnVuY3Rpb24gdG8gY2xpY2sgJ0NhbmNlbCcgYnV0dG9uXG4gICAqL1xuICBjb25zdCBjbGlja0NhbmNlbCA9ICgpID0+IHtcbiAgICB2YXIgX2RvbSRnZXRDYW5jZWxCdXR0b247XG4gICAgcmV0dXJuIChfZG9tJGdldENhbmNlbEJ1dHRvbiA9IGdldENhbmNlbEJ1dHRvbigpKSA9PT0gbnVsbCB8fCBfZG9tJGdldENhbmNlbEJ1dHRvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2RvbSRnZXRDYW5jZWxCdXR0b24uY2xpY2soKTtcbiAgfTtcblxuICAvKiogQHR5cGVkZWYgeydjYW5jZWwnIHwgJ2JhY2tkcm9wJyB8ICdjbG9zZScgfCAnZXNjJyB8ICd0aW1lcid9IERpc21pc3NSZWFzb24gKi9cblxuICAvKiogQHR5cGUge1JlY29yZDxEaXNtaXNzUmVhc29uLCBEaXNtaXNzUmVhc29uPn0gKi9cbiAgY29uc3QgRGlzbWlzc1JlYXNvbiA9IE9iamVjdC5mcmVlemUoe1xuICAgIGNhbmNlbDogJ2NhbmNlbCcsXG4gICAgYmFja2Ryb3A6ICdiYWNrZHJvcCcsXG4gICAgY2xvc2U6ICdjbG9zZScsXG4gICAgZXNjOiAnZXNjJyxcbiAgICB0aW1lcjogJ3RpbWVyJ1xuICB9KTtcblxuICAvKipcbiAgICogQHBhcmFtIHtHbG9iYWxTdGF0ZX0gZ2xvYmFsU3RhdGVcbiAgICovXG4gIGNvbnN0IHJlbW92ZUtleWRvd25IYW5kbGVyID0gZ2xvYmFsU3RhdGUgPT4ge1xuICAgIGlmIChnbG9iYWxTdGF0ZS5rZXlkb3duVGFyZ2V0ICYmIGdsb2JhbFN0YXRlLmtleWRvd25IYW5kbGVyQWRkZWQpIHtcbiAgICAgIGdsb2JhbFN0YXRlLmtleWRvd25UYXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGdsb2JhbFN0YXRlLmtleWRvd25IYW5kbGVyLCB7XG4gICAgICAgIGNhcHR1cmU6IGdsb2JhbFN0YXRlLmtleWRvd25MaXN0ZW5lckNhcHR1cmVcbiAgICAgIH0pO1xuICAgICAgZ2xvYmFsU3RhdGUua2V5ZG93bkhhbmRsZXJBZGRlZCA9IGZhbHNlO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogQHBhcmFtIHtHbG9iYWxTdGF0ZX0gZ2xvYmFsU3RhdGVcbiAgICogQHBhcmFtIHtTd2VldEFsZXJ0T3B0aW9uc30gaW5uZXJQYXJhbXNcbiAgICogQHBhcmFtIHsqfSBkaXNtaXNzV2l0aFxuICAgKi9cbiAgY29uc3QgYWRkS2V5ZG93bkhhbmRsZXIgPSAoZ2xvYmFsU3RhdGUsIGlubmVyUGFyYW1zLCBkaXNtaXNzV2l0aCkgPT4ge1xuICAgIHJlbW92ZUtleWRvd25IYW5kbGVyKGdsb2JhbFN0YXRlKTtcbiAgICBpZiAoIWlubmVyUGFyYW1zLnRvYXN0KSB7XG4gICAgICBnbG9iYWxTdGF0ZS5rZXlkb3duSGFuZGxlciA9IGUgPT4ga2V5ZG93bkhhbmRsZXIoaW5uZXJQYXJhbXMsIGUsIGRpc21pc3NXaXRoKTtcbiAgICAgIGdsb2JhbFN0YXRlLmtleWRvd25UYXJnZXQgPSBpbm5lclBhcmFtcy5rZXlkb3duTGlzdGVuZXJDYXB0dXJlID8gd2luZG93IDogZ2V0UG9wdXAoKTtcbiAgICAgIGdsb2JhbFN0YXRlLmtleWRvd25MaXN0ZW5lckNhcHR1cmUgPSBpbm5lclBhcmFtcy5rZXlkb3duTGlzdGVuZXJDYXB0dXJlO1xuICAgICAgZ2xvYmFsU3RhdGUua2V5ZG93blRhcmdldC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgZ2xvYmFsU3RhdGUua2V5ZG93bkhhbmRsZXIsIHtcbiAgICAgICAgY2FwdHVyZTogZ2xvYmFsU3RhdGUua2V5ZG93bkxpc3RlbmVyQ2FwdHVyZVxuICAgICAgfSk7XG4gICAgICBnbG9iYWxTdGF0ZS5rZXlkb3duSGFuZGxlckFkZGVkID0gdHJ1ZTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5jcmVtZW50XG4gICAqL1xuICBjb25zdCBzZXRGb2N1cyA9IChpbmRleCwgaW5jcmVtZW50KSA9PiB7XG4gICAgdmFyIF9kb20kZ2V0UG9wdXA7XG4gICAgY29uc3QgZm9jdXNhYmxlRWxlbWVudHMgPSBnZXRGb2N1c2FibGVFbGVtZW50cygpO1xuICAgIC8vIHNlYXJjaCBmb3IgdmlzaWJsZSBlbGVtZW50cyBhbmQgc2VsZWN0IHRoZSBuZXh0IHBvc3NpYmxlIG1hdGNoXG4gICAgaWYgKGZvY3VzYWJsZUVsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgaW5kZXggPSBpbmRleCArIGluY3JlbWVudDtcblxuICAgICAgLy8gcm9sbG92ZXIgdG8gZmlyc3QgaXRlbVxuICAgICAgaWYgKGluZGV4ID09PSBmb2N1c2FibGVFbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgaW5kZXggPSAwO1xuXG4gICAgICAgIC8vIGdvIHRvIGxhc3QgaXRlbVxuICAgICAgfSBlbHNlIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgICAgaW5kZXggPSBmb2N1c2FibGVFbGVtZW50cy5sZW5ndGggLSAxO1xuICAgICAgfVxuICAgICAgZm9jdXNhYmxlRWxlbWVudHNbaW5kZXhdLmZvY3VzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIG5vIHZpc2libGUgZm9jdXNhYmxlIGVsZW1lbnRzLCBmb2N1cyB0aGUgcG9wdXBcbiAgICAoX2RvbSRnZXRQb3B1cCA9IGdldFBvcHVwKCkpID09PSBudWxsIHx8IF9kb20kZ2V0UG9wdXAgPT09IHZvaWQgMCB8fCBfZG9tJGdldFBvcHVwLmZvY3VzKCk7XG4gIH07XG4gIGNvbnN0IGFycm93S2V5c05leHRCdXR0b24gPSBbJ0Fycm93UmlnaHQnLCAnQXJyb3dEb3duJ107XG4gIGNvbnN0IGFycm93S2V5c1ByZXZpb3VzQnV0dG9uID0gWydBcnJvd0xlZnQnLCAnQXJyb3dVcCddO1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1N3ZWV0QWxlcnRPcHRpb25zfSBpbm5lclBhcmFtc1xuICAgKiBAcGFyYW0ge0tleWJvYXJkRXZlbnR9IGV2ZW50XG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGRpc21pc3NXaXRoXG4gICAqL1xuICBjb25zdCBrZXlkb3duSGFuZGxlciA9IChpbm5lclBhcmFtcywgZXZlbnQsIGRpc21pc3NXaXRoKSA9PiB7XG4gICAgaWYgKCFpbm5lclBhcmFtcykge1xuICAgICAgcmV0dXJuOyAvLyBUaGlzIGluc3RhbmNlIGhhcyBhbHJlYWR5IGJlZW4gZGVzdHJveWVkXG4gICAgfVxuXG4gICAgLy8gSWdub3JlIGtleWRvd24gZHVyaW5nIElNRSBjb21wb3NpdGlvblxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9Eb2N1bWVudC9rZXlkb3duX2V2ZW50I2lnbm9yaW5nX2tleWRvd25fZHVyaW5nX2ltZV9jb21wb3NpdGlvblxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zd2VldGFsZXJ0Mi9zd2VldGFsZXJ0Mi9pc3N1ZXMvNzIwXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3N3ZWV0YWxlcnQyL3N3ZWV0YWxlcnQyL2lzc3Vlcy8yNDA2XG4gICAgaWYgKGV2ZW50LmlzQ29tcG9zaW5nIHx8IGV2ZW50LmtleUNvZGUgPT09IDIyOSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaW5uZXJQYXJhbXMuc3RvcEtleWRvd25Qcm9wYWdhdGlvbikge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgLy8gRU5URVJcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICBoYW5kbGVFbnRlcihldmVudCwgaW5uZXJQYXJhbXMpO1xuICAgIH1cblxuICAgIC8vIFRBQlxuICAgIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ1RhYicpIHtcbiAgICAgIGhhbmRsZVRhYihldmVudCk7XG4gICAgfVxuXG4gICAgLy8gQVJST1dTIC0gc3dpdGNoIGZvY3VzIGJldHdlZW4gYnV0dG9uc1xuICAgIGVsc2UgaWYgKFsuLi5hcnJvd0tleXNOZXh0QnV0dG9uLCAuLi5hcnJvd0tleXNQcmV2aW91c0J1dHRvbl0uaW5jbHVkZXMoZXZlbnQua2V5KSkge1xuICAgICAgaGFuZGxlQXJyb3dzKGV2ZW50LmtleSk7XG4gICAgfVxuXG4gICAgLy8gRVNDXG4gICAgZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgaGFuZGxlRXNjKGV2ZW50LCBpbm5lclBhcmFtcywgZGlzbWlzc1dpdGgpO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogQHBhcmFtIHtLZXlib2FyZEV2ZW50fSBldmVudFxuICAgKiBAcGFyYW0ge1N3ZWV0QWxlcnRPcHRpb25zfSBpbm5lclBhcmFtc1xuICAgKi9cbiAgY29uc3QgaGFuZGxlRW50ZXIgPSAoZXZlbnQsIGlubmVyUGFyYW1zKSA9PiB7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3N3ZWV0YWxlcnQyL3N3ZWV0YWxlcnQyL2lzc3Vlcy8yMzg2XG4gICAgaWYgKCFjYWxsSWZGdW5jdGlvbihpbm5lclBhcmFtcy5hbGxvd0VudGVyS2V5KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpbnB1dCA9IGdldElucHV0JDEoZ2V0UG9wdXAoKSwgaW5uZXJQYXJhbXMuaW5wdXQpO1xuICAgIGlmIChldmVudC50YXJnZXQgJiYgaW5wdXQgJiYgZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgZXZlbnQudGFyZ2V0Lm91dGVySFRNTCA9PT0gaW5wdXQub3V0ZXJIVE1MKSB7XG4gICAgICBpZiAoWyd0ZXh0YXJlYScsICdmaWxlJ10uaW5jbHVkZXMoaW5uZXJQYXJhbXMuaW5wdXQpKSB7XG4gICAgICAgIHJldHVybjsgLy8gZG8gbm90IHN1Ym1pdFxuICAgICAgfVxuXG4gICAgICBjbGlja0NvbmZpcm0oKTtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0tleWJvYXJkRXZlbnR9IGV2ZW50XG4gICAqL1xuICBjb25zdCBoYW5kbGVUYWIgPSBldmVudCA9PiB7XG4gICAgY29uc3QgdGFyZ2V0RWxlbWVudCA9IGV2ZW50LnRhcmdldDtcbiAgICBjb25zdCBmb2N1c2FibGVFbGVtZW50cyA9IGdldEZvY3VzYWJsZUVsZW1lbnRzKCk7XG4gICAgbGV0IGJ0bkluZGV4ID0gLTE7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmb2N1c2FibGVFbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRhcmdldEVsZW1lbnQgPT09IGZvY3VzYWJsZUVsZW1lbnRzW2ldKSB7XG4gICAgICAgIGJ0bkluZGV4ID0gaTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ3ljbGUgdG8gdGhlIG5leHQgYnV0dG9uXG4gICAgaWYgKCFldmVudC5zaGlmdEtleSkge1xuICAgICAgc2V0Rm9jdXMoYnRuSW5kZXgsIDEpO1xuICAgIH1cblxuICAgIC8vIEN5Y2xlIHRvIHRoZSBwcmV2IGJ1dHRvblxuICAgIGVsc2Uge1xuICAgICAgc2V0Rm9jdXMoYnRuSW5kZXgsIC0xKTtcbiAgICB9XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfTtcblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICAgKi9cbiAgY29uc3QgaGFuZGxlQXJyb3dzID0ga2V5ID0+IHtcbiAgICBjb25zdCBhY3Rpb25zID0gZ2V0QWN0aW9ucygpO1xuICAgIGNvbnN0IGNvbmZpcm1CdXR0b24gPSBnZXRDb25maXJtQnV0dG9uKCk7XG4gICAgY29uc3QgZGVueUJ1dHRvbiA9IGdldERlbnlCdXR0b24oKTtcbiAgICBjb25zdCBjYW5jZWxCdXR0b24gPSBnZXRDYW5jZWxCdXR0b24oKTtcbiAgICBpZiAoIWFjdGlvbnMgfHwgIWNvbmZpcm1CdXR0b24gfHwgIWRlbnlCdXR0b24gfHwgIWNhbmNlbEJ1dHRvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvKiogQHR5cGUgSFRNTEVsZW1lbnRbXSAqL1xuICAgIGNvbnN0IGJ1dHRvbnMgPSBbY29uZmlybUJ1dHRvbiwgZGVueUJ1dHRvbiwgY2FuY2VsQnV0dG9uXTtcbiAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmICFidXR0b25zLmluY2x1ZGVzKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHNpYmxpbmcgPSBhcnJvd0tleXNOZXh0QnV0dG9uLmluY2x1ZGVzKGtleSkgPyAnbmV4dEVsZW1lbnRTaWJsaW5nJyA6ICdwcmV2aW91c0VsZW1lbnRTaWJsaW5nJztcbiAgICBsZXQgYnV0dG9uVG9Gb2N1cyA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKCFidXR0b25Ub0ZvY3VzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWN0aW9ucy5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgYnV0dG9uVG9Gb2N1cyA9IGJ1dHRvblRvRm9jdXNbc2libGluZ107XG4gICAgICBpZiAoIWJ1dHRvblRvRm9jdXMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGJ1dHRvblRvRm9jdXMgaW5zdGFuY2VvZiBIVE1MQnV0dG9uRWxlbWVudCAmJiBpc1Zpc2libGUkMShidXR0b25Ub0ZvY3VzKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGJ1dHRvblRvRm9jdXMgaW5zdGFuY2VvZiBIVE1MQnV0dG9uRWxlbWVudCkge1xuICAgICAgYnV0dG9uVG9Gb2N1cy5mb2N1cygpO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogQHBhcmFtIHtLZXlib2FyZEV2ZW50fSBldmVudFxuICAgKiBAcGFyYW0ge1N3ZWV0QWxlcnRPcHRpb25zfSBpbm5lclBhcmFtc1xuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBkaXNtaXNzV2l0aFxuICAgKi9cbiAgY29uc3QgaGFuZGxlRXNjID0gKGV2ZW50LCBpbm5lclBhcmFtcywgZGlzbWlzc1dpdGgpID0+IHtcbiAgICBpZiAoY2FsbElmRnVuY3Rpb24oaW5uZXJQYXJhbXMuYWxsb3dFc2NhcGVLZXkpKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZGlzbWlzc1dpdGgoRGlzbWlzc1JlYXNvbi5lc2MpO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogVGhpcyBtb2R1bGUgY29udGFpbnMgYFdlYWtNYXBgcyBmb3IgZWFjaCBlZmZlY3RpdmVseS1cInByaXZhdGUgIHByb3BlcnR5XCIgdGhhdCBhIGBTd2FsYCBoYXMuXG4gICAqIEZvciBleGFtcGxlLCB0byBzZXQgdGhlIHByaXZhdGUgcHJvcGVydHkgXCJmb29cIiBvZiBgdGhpc2AgdG8gXCJiYXJcIiwgeW91IGNhbiBgcHJpdmF0ZVByb3BzLmZvby5zZXQodGhpcywgJ2JhcicpYFxuICAgKiBUaGlzIGlzIHRoZSBhcHByb2FjaCB0aGF0IEJhYmVsIHdpbGwgcHJvYmFibHkgdGFrZSB0byBpbXBsZW1lbnQgcHJpdmF0ZSBtZXRob2RzL2ZpZWxkc1xuICAgKiAgIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXByaXZhdGUtbWV0aG9kc1xuICAgKiAgIGh0dHBzOi8vZ2l0aHViLmNvbS9iYWJlbC9iYWJlbC9wdWxsLzc1NTVcbiAgICogT25jZSB3ZSBoYXZlIHRoZSBjaGFuZ2VzIGZyb20gdGhhdCBQUiBpbiBCYWJlbCwgYW5kIG91ciBjb3JlIGNsYXNzIGZpdHMgcmVhc29uYWJsZSBpbiAqb25lIG1vZHVsZSpcbiAgICogICB0aGVuIHdlIGNhbiB1c2UgdGhhdCBsYW5ndWFnZSBmZWF0dXJlLlxuICAgKi9cblxuICB2YXIgcHJpdmF0ZU1ldGhvZHMgPSB7XG4gICAgc3dhbFByb21pc2VSZXNvbHZlOiBuZXcgV2Vha01hcCgpLFxuICAgIHN3YWxQcm9taXNlUmVqZWN0OiBuZXcgV2Vha01hcCgpXG4gIH07XG5cbiAgLy8gRnJvbSBodHRwczovL2RldmVsb3Blci5wYWNpZWxsb2dyb3VwLmNvbS9ibG9nLzIwMTgvMDYvdGhlLWN1cnJlbnQtc3RhdGUtb2YtbW9kYWwtZGlhbG9nLWFjY2Vzc2liaWxpdHkvXG4gIC8vIEFkZGluZyBhcmlhLWhpZGRlbj1cInRydWVcIiB0byBlbGVtZW50cyBvdXRzaWRlIG9mIHRoZSBhY3RpdmUgbW9kYWwgZGlhbG9nIGVuc3VyZXMgdGhhdFxuICAvLyBlbGVtZW50cyBub3Qgd2l0aGluIHRoZSBhY3RpdmUgbW9kYWwgZGlhbG9nIHdpbGwgbm90IGJlIHN1cmZhY2VkIGlmIGEgdXNlciBvcGVucyBhIHNjcmVlblxuICAvLyByZWFkZXLigJlzIGxpc3Qgb2YgZWxlbWVudHMgKGhlYWRpbmdzLCBmb3JtIGNvbnRyb2xzLCBsYW5kbWFya3MsIGV0Yy4pIGluIHRoZSBkb2N1bWVudC5cblxuICBjb25zdCBzZXRBcmlhSGlkZGVuID0gKCkgPT4ge1xuICAgIGNvbnN0IGJvZHlDaGlsZHJlbiA9IEFycmF5LmZyb20oZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gICAgYm9keUNoaWxkcmVuLmZvckVhY2goZWwgPT4ge1xuICAgICAgaWYgKGVsID09PSBnZXRDb250YWluZXIoKSB8fCBlbC5jb250YWlucyhnZXRDb250YWluZXIoKSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGVsLmhhc0F0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nKSkge1xuICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoJ2RhdGEtcHJldmlvdXMtYXJpYS1oaWRkZW4nLCBlbC5nZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJykgfHwgJycpO1xuICAgICAgfVxuICAgICAgZWwuc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsICd0cnVlJyk7XG4gICAgfSk7XG4gIH07XG4gIGNvbnN0IHVuc2V0QXJpYUhpZGRlbiA9ICgpID0+IHtcbiAgICBjb25zdCBib2R5Q2hpbGRyZW4gPSBBcnJheS5mcm9tKGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICAgIGJvZHlDaGlsZHJlbi5mb3JFYWNoKGVsID0+IHtcbiAgICAgIGlmIChlbC5oYXNBdHRyaWJ1dGUoJ2RhdGEtcHJldmlvdXMtYXJpYS1oaWRkZW4nKSkge1xuICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgZWwuZ2V0QXR0cmlidXRlKCdkYXRhLXByZXZpb3VzLWFyaWEtaGlkZGVuJykgfHwgJycpO1xuICAgICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtcHJldmlvdXMtYXJpYS1oaWRkZW4nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICAvLyBAdHMtaWdub3JlXG4gIGNvbnN0IGlzU2FmYXJpT3JJT1MgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiAhIXdpbmRvdy5HZXN0dXJlRXZlbnQ7IC8vIHRydWUgZm9yIFNhZmFyaSBkZXNrdG9wICsgYWxsIGlPUyBicm93c2VycyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNzA1ODUzOTRcblxuICAvKipcbiAgICogRml4IGlPUyBzY3JvbGxpbmdcbiAgICogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3EvMzk2MjYzMDJcbiAgICovXG4gIGNvbnN0IGlPU2ZpeCA9ICgpID0+IHtcbiAgICBpZiAoaXNTYWZhcmlPcklPUyAmJiAhaGFzQ2xhc3MoZG9jdW1lbnQuYm9keSwgc3dhbENsYXNzZXMuaW9zZml4KSkge1xuICAgICAgY29uc3Qgb2Zmc2V0ID0gZG9jdW1lbnQuYm9keS5zY3JvbGxUb3A7XG4gICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLnRvcCA9IFwiXCIuY29uY2F0KG9mZnNldCAqIC0xLCBcInB4XCIpO1xuICAgICAgYWRkQ2xhc3MoZG9jdW1lbnQuYm9keSwgc3dhbENsYXNzZXMuaW9zZml4KTtcbiAgICAgIGxvY2tCb2R5U2Nyb2xsKCk7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBodHRwczovL2dpdGh1Yi5jb20vc3dlZXRhbGVydDIvc3dlZXRhbGVydDIvaXNzdWVzLzEyNDZcbiAgICovXG4gIGNvbnN0IGxvY2tCb2R5U2Nyb2xsID0gKCkgPT4ge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IGdldENvbnRhaW5lcigpO1xuICAgIGlmICghY29udGFpbmVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi9cbiAgICBsZXQgcHJldmVudFRvdWNoTW92ZTtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge1RvdWNoRXZlbnR9IGV2ZW50XG4gICAgICovXG4gICAgY29udGFpbmVyLm9udG91Y2hzdGFydCA9IGV2ZW50ID0+IHtcbiAgICAgIHByZXZlbnRUb3VjaE1vdmUgPSBzaG91bGRQcmV2ZW50VG91Y2hNb3ZlKGV2ZW50KTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7VG91Y2hFdmVudH0gZXZlbnRcbiAgICAgKi9cbiAgICBjb250YWluZXIub250b3VjaG1vdmUgPSBldmVudCA9PiB7XG4gICAgICBpZiAocHJldmVudFRvdWNoTW92ZSkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIH1cbiAgICB9O1xuICB9O1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1RvdWNoRXZlbnR9IGV2ZW50XG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgY29uc3Qgc2hvdWxkUHJldmVudFRvdWNoTW92ZSA9IGV2ZW50ID0+IHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG4gICAgY29uc3QgY29udGFpbmVyID0gZ2V0Q29udGFpbmVyKCk7XG4gICAgY29uc3QgaHRtbENvbnRhaW5lciA9IGdldEh0bWxDb250YWluZXIoKTtcbiAgICBpZiAoIWNvbnRhaW5lciB8fCAhaHRtbENvbnRhaW5lcikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoaXNTdHlsdXMoZXZlbnQpIHx8IGlzWm9vbShldmVudCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHRhcmdldCA9PT0gY29udGFpbmVyKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCFpc1Njcm9sbGFibGUoY29udGFpbmVyKSAmJiB0YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiB0YXJnZXQudGFnTmFtZSAhPT0gJ0lOUFVUJyAmJlxuICAgIC8vICMxNjAzXG4gICAgdGFyZ2V0LnRhZ05hbWUgIT09ICdURVhUQVJFQScgJiZcbiAgICAvLyAjMjI2NlxuICAgICEoaXNTY3JvbGxhYmxlKGh0bWxDb250YWluZXIpICYmXG4gICAgLy8gIzE5NDRcbiAgICBodG1sQ29udGFpbmVyLmNvbnRhaW5zKHRhcmdldCkpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9O1xuXG4gIC8qKlxuICAgKiBodHRwczovL2dpdGh1Yi5jb20vc3dlZXRhbGVydDIvc3dlZXRhbGVydDIvaXNzdWVzLzE3ODZcbiAgICpcbiAgICogQHBhcmFtIHsqfSBldmVudFxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGNvbnN0IGlzU3R5bHVzID0gZXZlbnQgPT4ge1xuICAgIHJldHVybiBldmVudC50b3VjaGVzICYmIGV2ZW50LnRvdWNoZXMubGVuZ3RoICYmIGV2ZW50LnRvdWNoZXNbMF0udG91Y2hUeXBlID09PSAnc3R5bHVzJztcbiAgfTtcblxuICAvKipcbiAgICogaHR0cHM6Ly9naXRodWIuY29tL3N3ZWV0YWxlcnQyL3N3ZWV0YWxlcnQyL2lzc3Vlcy8xODkxXG4gICAqXG4gICAqIEBwYXJhbSB7VG91Y2hFdmVudH0gZXZlbnRcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBjb25zdCBpc1pvb20gPSBldmVudCA9PiB7XG4gICAgcmV0dXJuIGV2ZW50LnRvdWNoZXMgJiYgZXZlbnQudG91Y2hlcy5sZW5ndGggPiAxO1xuICB9O1xuICBjb25zdCB1bmRvSU9TZml4ID0gKCkgPT4ge1xuICAgIGlmIChoYXNDbGFzcyhkb2N1bWVudC5ib2R5LCBzd2FsQ2xhc3Nlcy5pb3NmaXgpKSB7XG4gICAgICBjb25zdCBvZmZzZXQgPSBwYXJzZUludChkb2N1bWVudC5ib2R5LnN0eWxlLnRvcCwgMTApO1xuICAgICAgcmVtb3ZlQ2xhc3MoZG9jdW1lbnQuYm9keSwgc3dhbENsYXNzZXMuaW9zZml4KTtcbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUudG9wID0gJyc7XG4gICAgICBkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCA9IG9mZnNldCAqIC0xO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogTWVhc3VyZSBzY3JvbGxiYXIgd2lkdGggZm9yIHBhZGRpbmcgYm9keSBkdXJpbmcgbW9kYWwgc2hvdy9oaWRlXG4gICAqIGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21hc3Rlci9qcy9zcmMvbW9kYWwuanNcbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGNvbnN0IG1lYXN1cmVTY3JvbGxiYXIgPSAoKSA9PiB7XG4gICAgY29uc3Qgc2Nyb2xsRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgc2Nyb2xsRGl2LmNsYXNzTmFtZSA9IHN3YWxDbGFzc2VzWydzY3JvbGxiYXItbWVhc3VyZSddO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc2Nyb2xsRGl2KTtcbiAgICBjb25zdCBzY3JvbGxiYXJXaWR0aCA9IHNjcm9sbERpdi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCAtIHNjcm9sbERpdi5jbGllbnRXaWR0aDtcbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHNjcm9sbERpdik7XG4gICAgcmV0dXJuIHNjcm9sbGJhcldpZHRoO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZW1lbWJlciBzdGF0ZSBpbiBjYXNlcyB3aGVyZSBvcGVuaW5nIGFuZCBoYW5kbGluZyBhIG1vZGFsIHdpbGwgZmlkZGxlIHdpdGggaXQuXG4gICAqIEB0eXBlIHtudW1iZXIgfCBudWxsfVxuICAgKi9cbiAgbGV0IHByZXZpb3VzQm9keVBhZGRpbmcgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaW5pdGlhbEJvZHlPdmVyZmxvd1xuICAgKi9cbiAgY29uc3QgcmVwbGFjZVNjcm9sbGJhcldpdGhQYWRkaW5nID0gaW5pdGlhbEJvZHlPdmVyZmxvdyA9PiB7XG4gICAgLy8gZm9yIHF1ZXVlcywgZG8gbm90IGRvIHRoaXMgbW9yZSB0aGFuIG9uY2VcbiAgICBpZiAocHJldmlvdXNCb2R5UGFkZGluZyAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBpZiB0aGUgYm9keSBoYXMgb3ZlcmZsb3dcbiAgICBpZiAoZG9jdW1lbnQuYm9keS5zY3JvbGxIZWlnaHQgPiB3aW5kb3cuaW5uZXJIZWlnaHQgfHwgaW5pdGlhbEJvZHlPdmVyZmxvdyA9PT0gJ3Njcm9sbCcgLy8gaHR0cHM6Ly9naXRodWIuY29tL3N3ZWV0YWxlcnQyL3N3ZWV0YWxlcnQyL2lzc3Vlcy8yNjYzXG4gICAgKSB7XG4gICAgICAvLyBhZGQgcGFkZGluZyBzbyB0aGUgY29udGVudCBkb2Vzbid0IHNoaWZ0IGFmdGVyIHJlbW92YWwgb2Ygc2Nyb2xsYmFyXG4gICAgICBwcmV2aW91c0JvZHlQYWRkaW5nID0gcGFyc2VJbnQod2luZG93LmdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuZ2V0UHJvcGVydHlWYWx1ZSgncGFkZGluZy1yaWdodCcpKTtcbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUucGFkZGluZ1JpZ2h0ID0gXCJcIi5jb25jYXQocHJldmlvdXNCb2R5UGFkZGluZyArIG1lYXN1cmVTY3JvbGxiYXIoKSwgXCJweFwiKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IHVuZG9SZXBsYWNlU2Nyb2xsYmFyV2l0aFBhZGRpbmcgPSAoKSA9PiB7XG4gICAgaWYgKHByZXZpb3VzQm9keVBhZGRpbmcgIT09IG51bGwpIHtcbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUucGFkZGluZ1JpZ2h0ID0gXCJcIi5jb25jYXQocHJldmlvdXNCb2R5UGFkZGluZywgXCJweFwiKTtcbiAgICAgIHByZXZpb3VzQm9keVBhZGRpbmcgPSBudWxsO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogQHBhcmFtIHtTd2VldEFsZXJ0fSBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBjb250YWluZXJcbiAgICogQHBhcmFtIHtib29sZWFufSByZXR1cm5Gb2N1c1xuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBkaWRDbG9zZVxuICAgKi9cbiAgZnVuY3Rpb24gcmVtb3ZlUG9wdXBBbmRSZXNldFN0YXRlKGluc3RhbmNlLCBjb250YWluZXIsIHJldHVybkZvY3VzLCBkaWRDbG9zZSkge1xuICAgIGlmIChpc1RvYXN0KCkpIHtcbiAgICAgIHRyaWdnZXJEaWRDbG9zZUFuZERpc3Bvc2UoaW5zdGFuY2UsIGRpZENsb3NlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdG9yZUFjdGl2ZUVsZW1lbnQocmV0dXJuRm9jdXMpLnRoZW4oKCkgPT4gdHJpZ2dlckRpZENsb3NlQW5kRGlzcG9zZShpbnN0YW5jZSwgZGlkQ2xvc2UpKTtcbiAgICAgIHJlbW92ZUtleWRvd25IYW5kbGVyKGdsb2JhbFN0YXRlKTtcbiAgICB9XG5cbiAgICAvLyB3b3JrYXJvdW5kIGZvciBodHRwczovL2dpdGh1Yi5jb20vc3dlZXRhbGVydDIvc3dlZXRhbGVydDIvaXNzdWVzLzIwODhcbiAgICAvLyBmb3Igc29tZSByZWFzb24gcmVtb3ZpbmcgdGhlIGNvbnRhaW5lciBpbiBTYWZhcmkgd2lsbCBzY3JvbGwgdGhlIGRvY3VtZW50IHRvIGJvdHRvbVxuICAgIGlmIChpc1NhZmFyaU9ySU9TKSB7XG4gICAgICBjb250YWluZXIuc2V0QXR0cmlidXRlKCdzdHlsZScsICdkaXNwbGF5Om5vbmUgIWltcG9ydGFudCcpO1xuICAgICAgY29udGFpbmVyLnJlbW92ZUF0dHJpYnV0ZSgnY2xhc3MnKTtcbiAgICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSAnJztcbiAgICB9IGVsc2Uge1xuICAgICAgY29udGFpbmVyLnJlbW92ZSgpO1xuICAgIH1cbiAgICBpZiAoaXNNb2RhbCgpKSB7XG4gICAgICB1bmRvUmVwbGFjZVNjcm9sbGJhcldpdGhQYWRkaW5nKCk7XG4gICAgICB1bmRvSU9TZml4KCk7XG4gICAgICB1bnNldEFyaWFIaWRkZW4oKTtcbiAgICB9XG4gICAgcmVtb3ZlQm9keUNsYXNzZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgU3dlZXRBbGVydDIgY2xhc3NlcyBmcm9tIGJvZHlcbiAgICovXG4gIGZ1bmN0aW9uIHJlbW92ZUJvZHlDbGFzc2VzKCkge1xuICAgIHJlbW92ZUNsYXNzKFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIGRvY3VtZW50LmJvZHldLCBbc3dhbENsYXNzZXMuc2hvd24sIHN3YWxDbGFzc2VzWydoZWlnaHQtYXV0byddLCBzd2FsQ2xhc3Nlc1snbm8tYmFja2Ryb3AnXSwgc3dhbENsYXNzZXNbJ3RvYXN0LXNob3duJ11dKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnN0YW5jZSBtZXRob2QgdG8gY2xvc2Ugc3dlZXRBbGVydFxuICAgKlxuICAgKiBAcGFyYW0ge2FueX0gcmVzb2x2ZVZhbHVlXG4gICAqL1xuICBmdW5jdGlvbiBjbG9zZShyZXNvbHZlVmFsdWUpIHtcbiAgICByZXNvbHZlVmFsdWUgPSBwcmVwYXJlUmVzb2x2ZVZhbHVlKHJlc29sdmVWYWx1ZSk7XG4gICAgY29uc3Qgc3dhbFByb21pc2VSZXNvbHZlID0gcHJpdmF0ZU1ldGhvZHMuc3dhbFByb21pc2VSZXNvbHZlLmdldCh0aGlzKTtcbiAgICBjb25zdCBkaWRDbG9zZSA9IHRyaWdnZXJDbG9zZVBvcHVwKHRoaXMpO1xuICAgIGlmICh0aGlzLmlzQXdhaXRpbmdQcm9taXNlKSB7XG4gICAgICAvLyBBIHN3YWwgYXdhaXRpbmcgZm9yIGEgcHJvbWlzZSAoYWZ0ZXIgYSBjbGljayBvbiBDb25maXJtIG9yIERlbnkpIGNhbm5vdCBiZSBkaXNtaXNzZWQgYW55bW9yZSAjMjMzNVxuICAgICAgaWYgKCFyZXNvbHZlVmFsdWUuaXNEaXNtaXNzZWQpIHtcbiAgICAgICAgaGFuZGxlQXdhaXRpbmdQcm9taXNlKHRoaXMpO1xuICAgICAgICBzd2FsUHJvbWlzZVJlc29sdmUocmVzb2x2ZVZhbHVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGRpZENsb3NlKSB7XG4gICAgICAvLyBSZXNvbHZlIFN3YWwgcHJvbWlzZVxuICAgICAgc3dhbFByb21pc2VSZXNvbHZlKHJlc29sdmVWYWx1ZSk7XG4gICAgfVxuICB9XG4gIGNvbnN0IHRyaWdnZXJDbG9zZVBvcHVwID0gaW5zdGFuY2UgPT4ge1xuICAgIGNvbnN0IHBvcHVwID0gZ2V0UG9wdXAoKTtcbiAgICBpZiAoIXBvcHVwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGlubmVyUGFyYW1zID0gcHJpdmF0ZVByb3BzLmlubmVyUGFyYW1zLmdldChpbnN0YW5jZSk7XG4gICAgaWYgKCFpbm5lclBhcmFtcyB8fCBoYXNDbGFzcyhwb3B1cCwgaW5uZXJQYXJhbXMuaGlkZUNsYXNzLnBvcHVwKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZW1vdmVDbGFzcyhwb3B1cCwgaW5uZXJQYXJhbXMuc2hvd0NsYXNzLnBvcHVwKTtcbiAgICBhZGRDbGFzcyhwb3B1cCwgaW5uZXJQYXJhbXMuaGlkZUNsYXNzLnBvcHVwKTtcbiAgICBjb25zdCBiYWNrZHJvcCA9IGdldENvbnRhaW5lcigpO1xuICAgIHJlbW92ZUNsYXNzKGJhY2tkcm9wLCBpbm5lclBhcmFtcy5zaG93Q2xhc3MuYmFja2Ryb3ApO1xuICAgIGFkZENsYXNzKGJhY2tkcm9wLCBpbm5lclBhcmFtcy5oaWRlQ2xhc3MuYmFja2Ryb3ApO1xuICAgIGhhbmRsZVBvcHVwQW5pbWF0aW9uKGluc3RhbmNlLCBwb3B1cCwgaW5uZXJQYXJhbXMpO1xuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2FueX0gZXJyb3JcbiAgICovXG4gIGZ1bmN0aW9uIHJlamVjdFByb21pc2UoZXJyb3IpIHtcbiAgICBjb25zdCByZWplY3RQcm9taXNlID0gcHJpdmF0ZU1ldGhvZHMuc3dhbFByb21pc2VSZWplY3QuZ2V0KHRoaXMpO1xuICAgIGhhbmRsZUF3YWl0aW5nUHJvbWlzZSh0aGlzKTtcbiAgICBpZiAocmVqZWN0UHJvbWlzZSkge1xuICAgICAgLy8gUmVqZWN0IFN3YWwgcHJvbWlzZVxuICAgICAgcmVqZWN0UHJvbWlzZShlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7U3dlZXRBbGVydH0gaW5zdGFuY2VcbiAgICovXG4gIGNvbnN0IGhhbmRsZUF3YWl0aW5nUHJvbWlzZSA9IGluc3RhbmNlID0+IHtcbiAgICBpZiAoaW5zdGFuY2UuaXNBd2FpdGluZ1Byb21pc2UpIHtcbiAgICAgIGRlbGV0ZSBpbnN0YW5jZS5pc0F3YWl0aW5nUHJvbWlzZTtcbiAgICAgIC8vIFRoZSBpbnN0YW5jZSBtaWdodCBoYXZlIGJlZW4gcHJldmlvdXNseSBwYXJ0bHkgZGVzdHJveWVkLCB3ZSBtdXN0IHJlc3VtZSB0aGUgZGVzdHJveSBwcm9jZXNzIGluIHRoaXMgY2FzZSAjMjMzNVxuICAgICAgaWYgKCFwcml2YXRlUHJvcHMuaW5uZXJQYXJhbXMuZ2V0KGluc3RhbmNlKSkge1xuICAgICAgICBpbnN0YW5jZS5fZGVzdHJveSgpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogQHBhcmFtIHthbnl9IHJlc29sdmVWYWx1ZVxuICAgKiBAcmV0dXJucyB7U3dlZXRBbGVydFJlc3VsdH1cbiAgICovXG4gIGNvbnN0IHByZXBhcmVSZXNvbHZlVmFsdWUgPSByZXNvbHZlVmFsdWUgPT4ge1xuICAgIC8vIFdoZW4gdXNlciBjYWxscyBTd2FsLmNsb3NlKClcbiAgICBpZiAodHlwZW9mIHJlc29sdmVWYWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlzQ29uZmlybWVkOiBmYWxzZSxcbiAgICAgICAgaXNEZW5pZWQ6IGZhbHNlLFxuICAgICAgICBpc0Rpc21pc3NlZDogdHJ1ZVxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe1xuICAgICAgaXNDb25maXJtZWQ6IGZhbHNlLFxuICAgICAgaXNEZW5pZWQ6IGZhbHNlLFxuICAgICAgaXNEaXNtaXNzZWQ6IGZhbHNlXG4gICAgfSwgcmVzb2x2ZVZhbHVlKTtcbiAgfTtcblxuICAvKipcbiAgICogQHBhcmFtIHtTd2VldEFsZXJ0fSBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBwb3B1cFxuICAgKiBAcGFyYW0ge1N3ZWV0QWxlcnRPcHRpb25zfSBpbm5lclBhcmFtc1xuICAgKi9cbiAgY29uc3QgaGFuZGxlUG9wdXBBbmltYXRpb24gPSAoaW5zdGFuY2UsIHBvcHVwLCBpbm5lclBhcmFtcykgPT4ge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IGdldENvbnRhaW5lcigpO1xuICAgIC8vIElmIGFuaW1hdGlvbiBpcyBzdXBwb3J0ZWQsIGFuaW1hdGVcbiAgICBjb25zdCBhbmltYXRpb25Jc1N1cHBvcnRlZCA9IGFuaW1hdGlvbkVuZEV2ZW50ICYmIGhhc0Nzc0FuaW1hdGlvbihwb3B1cCk7XG4gICAgaWYgKHR5cGVvZiBpbm5lclBhcmFtcy53aWxsQ2xvc2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGlubmVyUGFyYW1zLndpbGxDbG9zZShwb3B1cCk7XG4gICAgfVxuICAgIGlmIChhbmltYXRpb25Jc1N1cHBvcnRlZCkge1xuICAgICAgYW5pbWF0ZVBvcHVwKGluc3RhbmNlLCBwb3B1cCwgY29udGFpbmVyLCBpbm5lclBhcmFtcy5yZXR1cm5Gb2N1cywgaW5uZXJQYXJhbXMuZGlkQ2xvc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBPdGhlcndpc2UsIHJlbW92ZSBpbW1lZGlhdGVseVxuICAgICAgcmVtb3ZlUG9wdXBBbmRSZXNldFN0YXRlKGluc3RhbmNlLCBjb250YWluZXIsIGlubmVyUGFyYW1zLnJldHVybkZvY3VzLCBpbm5lclBhcmFtcy5kaWRDbG9zZSk7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1N3ZWV0QWxlcnR9IGluc3RhbmNlXG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHBvcHVwXG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGNvbnRhaW5lclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHJldHVybkZvY3VzXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGRpZENsb3NlXG4gICAqL1xuICBjb25zdCBhbmltYXRlUG9wdXAgPSAoaW5zdGFuY2UsIHBvcHVwLCBjb250YWluZXIsIHJldHVybkZvY3VzLCBkaWRDbG9zZSkgPT4ge1xuICAgIGlmICghYW5pbWF0aW9uRW5kRXZlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZ2xvYmFsU3RhdGUuc3dhbENsb3NlRXZlbnRGaW5pc2hlZENhbGxiYWNrID0gcmVtb3ZlUG9wdXBBbmRSZXNldFN0YXRlLmJpbmQobnVsbCwgaW5zdGFuY2UsIGNvbnRhaW5lciwgcmV0dXJuRm9jdXMsIGRpZENsb3NlKTtcbiAgICBwb3B1cC5hZGRFdmVudExpc3RlbmVyKGFuaW1hdGlvbkVuZEV2ZW50LCBmdW5jdGlvbiAoZSkge1xuICAgICAgaWYgKGUudGFyZ2V0ID09PSBwb3B1cCkge1xuICAgICAgICBnbG9iYWxTdGF0ZS5zd2FsQ2xvc2VFdmVudEZpbmlzaGVkQ2FsbGJhY2soKTtcbiAgICAgICAgZGVsZXRlIGdsb2JhbFN0YXRlLnN3YWxDbG9zZUV2ZW50RmluaXNoZWRDYWxsYmFjaztcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICAvKipcbiAgICogQHBhcmFtIHtTd2VldEFsZXJ0fSBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBkaWRDbG9zZVxuICAgKi9cbiAgY29uc3QgdHJpZ2dlckRpZENsb3NlQW5kRGlzcG9zZSA9IChpbnN0YW5jZSwgZGlkQ2xvc2UpID0+IHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgZGlkQ2xvc2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZGlkQ2xvc2UuYmluZChpbnN0YW5jZS5wYXJhbXMpKCk7XG4gICAgICB9XG4gICAgICAvLyBpbnN0YW5jZSBtaWdodCBoYXZlIGJlZW4gZGVzdHJveWVkIGFscmVhZHlcbiAgICAgIGlmIChpbnN0YW5jZS5fZGVzdHJveSkge1xuICAgICAgICBpbnN0YW5jZS5fZGVzdHJveSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBTaG93cyBsb2FkZXIgKHNwaW5uZXIpLCB0aGlzIGlzIHVzZWZ1bCB3aXRoIEFKQVggcmVxdWVzdHMuXG4gICAqIEJ5IGRlZmF1bHQgdGhlIGxvYWRlciBiZSBzaG93biBpbnN0ZWFkIG9mIHRoZSBcIkNvbmZpcm1cIiBidXR0b24uXG4gICAqXG4gICAqIEBwYXJhbSB7SFRNTEJ1dHRvbkVsZW1lbnQgfCBudWxsfSBbYnV0dG9uVG9SZXBsYWNlXVxuICAgKi9cbiAgY29uc3Qgc2hvd0xvYWRpbmcgPSBidXR0b25Ub1JlcGxhY2UgPT4ge1xuICAgIGxldCBwb3B1cCA9IGdldFBvcHVwKCk7XG4gICAgaWYgKCFwb3B1cCkge1xuICAgICAgbmV3IFN3YWwoKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICB9XG5cbiAgICBwb3B1cCA9IGdldFBvcHVwKCk7XG4gICAgaWYgKCFwb3B1cCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBsb2FkZXIgPSBnZXRMb2FkZXIoKTtcbiAgICBpZiAoaXNUb2FzdCgpKSB7XG4gICAgICBoaWRlKGdldEljb24oKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcGxhY2VCdXR0b24ocG9wdXAsIGJ1dHRvblRvUmVwbGFjZSk7XG4gICAgfVxuICAgIHNob3cobG9hZGVyKTtcbiAgICBwb3B1cC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbG9hZGluZycsICd0cnVlJyk7XG4gICAgcG9wdXAuc2V0QXR0cmlidXRlKCdhcmlhLWJ1c3knLCAndHJ1ZScpO1xuICAgIHBvcHVwLmZvY3VzKCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHBvcHVwXG4gICAqIEBwYXJhbSB7SFRNTEJ1dHRvbkVsZW1lbnQgfCBudWxsfSBbYnV0dG9uVG9SZXBsYWNlXVxuICAgKi9cbiAgY29uc3QgcmVwbGFjZUJ1dHRvbiA9IChwb3B1cCwgYnV0dG9uVG9SZXBsYWNlKSA9PiB7XG4gICAgY29uc3QgYWN0aW9ucyA9IGdldEFjdGlvbnMoKTtcbiAgICBjb25zdCBsb2FkZXIgPSBnZXRMb2FkZXIoKTtcbiAgICBpZiAoIWFjdGlvbnMgfHwgIWxvYWRlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIWJ1dHRvblRvUmVwbGFjZSAmJiBpc1Zpc2libGUkMShnZXRDb25maXJtQnV0dG9uKCkpKSB7XG4gICAgICBidXR0b25Ub1JlcGxhY2UgPSBnZXRDb25maXJtQnV0dG9uKCk7XG4gICAgfVxuICAgIHNob3coYWN0aW9ucyk7XG4gICAgaWYgKGJ1dHRvblRvUmVwbGFjZSkge1xuICAgICAgaGlkZShidXR0b25Ub1JlcGxhY2UpO1xuICAgICAgbG9hZGVyLnNldEF0dHJpYnV0ZSgnZGF0YS1idXR0b24tdG8tcmVwbGFjZScsIGJ1dHRvblRvUmVwbGFjZS5jbGFzc05hbWUpO1xuICAgICAgYWN0aW9ucy5pbnNlcnRCZWZvcmUobG9hZGVyLCBidXR0b25Ub1JlcGxhY2UpO1xuICAgIH1cbiAgICBhZGRDbGFzcyhbcG9wdXAsIGFjdGlvbnNdLCBzd2FsQ2xhc3Nlcy5sb2FkaW5nKTtcbiAgfTtcblxuICAvKipcbiAgICogQHBhcmFtIHtTd2VldEFsZXJ0fSBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge1N3ZWV0QWxlcnRPcHRpb25zfSBwYXJhbXNcbiAgICovXG4gIGNvbnN0IGhhbmRsZUlucHV0T3B0aW9uc0FuZFZhbHVlID0gKGluc3RhbmNlLCBwYXJhbXMpID0+IHtcbiAgICBpZiAocGFyYW1zLmlucHV0ID09PSAnc2VsZWN0JyB8fCBwYXJhbXMuaW5wdXQgPT09ICdyYWRpbycpIHtcbiAgICAgIGhhbmRsZUlucHV0T3B0aW9ucyhpbnN0YW5jZSwgcGFyYW1zKTtcbiAgICB9IGVsc2UgaWYgKFsndGV4dCcsICdlbWFpbCcsICdudW1iZXInLCAndGVsJywgJ3RleHRhcmVhJ10uc29tZShpID0+IGkgPT09IHBhcmFtcy5pbnB1dCkgJiYgKGhhc1RvUHJvbWlzZUZuKHBhcmFtcy5pbnB1dFZhbHVlKSB8fCBpc1Byb21pc2UocGFyYW1zLmlucHV0VmFsdWUpKSkge1xuICAgICAgc2hvd0xvYWRpbmcoZ2V0Q29uZmlybUJ1dHRvbigpKTtcbiAgICAgIGhhbmRsZUlucHV0VmFsdWUoaW5zdGFuY2UsIHBhcmFtcyk7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1N3ZWV0QWxlcnR9IGluc3RhbmNlXG4gICAqIEBwYXJhbSB7U3dlZXRBbGVydE9wdGlvbnN9IGlubmVyUGFyYW1zXG4gICAqIEByZXR1cm5zIHtTd2VldEFsZXJ0SW5wdXRWYWx1ZX1cbiAgICovXG4gIGNvbnN0IGdldElucHV0VmFsdWUgPSAoaW5zdGFuY2UsIGlubmVyUGFyYW1zKSA9PiB7XG4gICAgY29uc3QgaW5wdXQgPSBpbnN0YW5jZS5nZXRJbnB1dCgpO1xuICAgIGlmICghaW5wdXQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBzd2l0Y2ggKGlubmVyUGFyYW1zLmlucHV0KSB7XG4gICAgICBjYXNlICdjaGVja2JveCc6XG4gICAgICAgIHJldHVybiBnZXRDaGVja2JveFZhbHVlKGlucHV0KTtcbiAgICAgIGNhc2UgJ3JhZGlvJzpcbiAgICAgICAgcmV0dXJuIGdldFJhZGlvVmFsdWUoaW5wdXQpO1xuICAgICAgY2FzZSAnZmlsZSc6XG4gICAgICAgIHJldHVybiBnZXRGaWxlVmFsdWUoaW5wdXQpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGlubmVyUGFyYW1zLmlucHV0QXV0b1RyaW0gPyBpbnB1dC52YWx1ZS50cmltKCkgOiBpbnB1dC52YWx1ZTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7SFRNTElucHV0RWxlbWVudH0gaW5wdXRcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGNvbnN0IGdldENoZWNrYm94VmFsdWUgPSBpbnB1dCA9PiBpbnB1dC5jaGVja2VkID8gMSA6IDA7XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7SFRNTElucHV0RWxlbWVudH0gaW5wdXRcbiAgICogQHJldHVybnMge3N0cmluZyB8IG51bGx9XG4gICAqL1xuICBjb25zdCBnZXRSYWRpb1ZhbHVlID0gaW5wdXQgPT4gaW5wdXQuY2hlY2tlZCA/IGlucHV0LnZhbHVlIDogbnVsbDtcblxuICAvKipcbiAgICogQHBhcmFtIHtIVE1MSW5wdXRFbGVtZW50fSBpbnB1dFxuICAgKiBAcmV0dXJucyB7RmlsZUxpc3QgfCBGaWxlIHwgbnVsbH1cbiAgICovXG4gIGNvbnN0IGdldEZpbGVWYWx1ZSA9IGlucHV0ID0+IGlucHV0LmZpbGVzICYmIGlucHV0LmZpbGVzLmxlbmd0aCA/IGlucHV0LmdldEF0dHJpYnV0ZSgnbXVsdGlwbGUnKSAhPT0gbnVsbCA/IGlucHV0LmZpbGVzIDogaW5wdXQuZmlsZXNbMF0gOiBudWxsO1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1N3ZWV0QWxlcnR9IGluc3RhbmNlXG4gICAqIEBwYXJhbSB7U3dlZXRBbGVydE9wdGlvbnN9IHBhcmFtc1xuICAgKi9cbiAgY29uc3QgaGFuZGxlSW5wdXRPcHRpb25zID0gKGluc3RhbmNlLCBwYXJhbXMpID0+IHtcbiAgICBjb25zdCBwb3B1cCA9IGdldFBvcHVwKCk7XG4gICAgaWYgKCFwb3B1cCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IGlucHV0T3B0aW9uc1xuICAgICAqL1xuICAgIGNvbnN0IHByb2Nlc3NJbnB1dE9wdGlvbnMgPSBpbnB1dE9wdGlvbnMgPT4ge1xuICAgICAgaWYgKHBhcmFtcy5pbnB1dCA9PT0gJ3NlbGVjdCcpIHtcbiAgICAgICAgcG9wdWxhdGVTZWxlY3RPcHRpb25zKHBvcHVwLCBmb3JtYXRJbnB1dE9wdGlvbnMoaW5wdXRPcHRpb25zKSwgcGFyYW1zKTtcbiAgICAgIH0gZWxzZSBpZiAocGFyYW1zLmlucHV0ID09PSAncmFkaW8nKSB7XG4gICAgICAgIHBvcHVsYXRlUmFkaW9PcHRpb25zKHBvcHVwLCBmb3JtYXRJbnB1dE9wdGlvbnMoaW5wdXRPcHRpb25zKSwgcGFyYW1zKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGlmIChoYXNUb1Byb21pc2VGbihwYXJhbXMuaW5wdXRPcHRpb25zKSB8fCBpc1Byb21pc2UocGFyYW1zLmlucHV0T3B0aW9ucykpIHtcbiAgICAgIHNob3dMb2FkaW5nKGdldENvbmZpcm1CdXR0b24oKSk7XG4gICAgICBhc1Byb21pc2UocGFyYW1zLmlucHV0T3B0aW9ucykudGhlbihpbnB1dE9wdGlvbnMgPT4ge1xuICAgICAgICBpbnN0YW5jZS5oaWRlTG9hZGluZygpO1xuICAgICAgICBwcm9jZXNzSW5wdXRPcHRpb25zKGlucHV0T3B0aW9ucyk7XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBwYXJhbXMuaW5wdXRPcHRpb25zID09PSAnb2JqZWN0Jykge1xuICAgICAgcHJvY2Vzc0lucHV0T3B0aW9ucyhwYXJhbXMuaW5wdXRPcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXJyb3IoXCJVbmV4cGVjdGVkIHR5cGUgb2YgaW5wdXRPcHRpb25zISBFeHBlY3RlZCBvYmplY3QsIE1hcCBvciBQcm9taXNlLCBnb3QgXCIuY29uY2F0KHR5cGVvZiBwYXJhbXMuaW5wdXRPcHRpb25zKSk7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1N3ZWV0QWxlcnR9IGluc3RhbmNlXG4gICAqIEBwYXJhbSB7U3dlZXRBbGVydE9wdGlvbnN9IHBhcmFtc1xuICAgKi9cbiAgY29uc3QgaGFuZGxlSW5wdXRWYWx1ZSA9IChpbnN0YW5jZSwgcGFyYW1zKSA9PiB7XG4gICAgY29uc3QgaW5wdXQgPSBpbnN0YW5jZS5nZXRJbnB1dCgpO1xuICAgIGlmICghaW5wdXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaGlkZShpbnB1dCk7XG4gICAgYXNQcm9taXNlKHBhcmFtcy5pbnB1dFZhbHVlKS50aGVuKGlucHV0VmFsdWUgPT4ge1xuICAgICAgaW5wdXQudmFsdWUgPSBwYXJhbXMuaW5wdXQgPT09ICdudW1iZXInID8gXCJcIi5jb25jYXQocGFyc2VGbG9hdChpbnB1dFZhbHVlKSB8fCAwKSA6IFwiXCIuY29uY2F0KGlucHV0VmFsdWUpO1xuICAgICAgc2hvdyhpbnB1dCk7XG4gICAgICBpbnB1dC5mb2N1cygpO1xuICAgICAgaW5zdGFuY2UuaGlkZUxvYWRpbmcoKTtcbiAgICB9KS5jYXRjaChlcnIgPT4ge1xuICAgICAgZXJyb3IoXCJFcnJvciBpbiBpbnB1dFZhbHVlIHByb21pc2U6IFwiLmNvbmNhdChlcnIpKTtcbiAgICAgIGlucHV0LnZhbHVlID0gJyc7XG4gICAgICBzaG93KGlucHV0KTtcbiAgICAgIGlucHV0LmZvY3VzKCk7XG4gICAgICBpbnN0YW5jZS5oaWRlTG9hZGluZygpO1xuICAgIH0pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBwb3B1cFxuICAgKiBAcGFyYW0ge0lucHV0T3B0aW9uRmxhdHRlbmVkW119IGlucHV0T3B0aW9uc1xuICAgKiBAcGFyYW0ge1N3ZWV0QWxlcnRPcHRpb25zfSBwYXJhbXNcbiAgICovXG4gIGZ1bmN0aW9uIHBvcHVsYXRlU2VsZWN0T3B0aW9ucyhwb3B1cCwgaW5wdXRPcHRpb25zLCBwYXJhbXMpIHtcbiAgICBjb25zdCBzZWxlY3QgPSBnZXREaXJlY3RDaGlsZEJ5Q2xhc3MocG9wdXAsIHN3YWxDbGFzc2VzLnNlbGVjdCk7XG4gICAgaWYgKCFzZWxlY3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcGFyZW50XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbkxhYmVsXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvblZhbHVlXG4gICAgICovXG4gICAgY29uc3QgcmVuZGVyT3B0aW9uID0gKHBhcmVudCwgb3B0aW9uTGFiZWwsIG9wdGlvblZhbHVlKSA9PiB7XG4gICAgICBjb25zdCBvcHRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdvcHRpb24nKTtcbiAgICAgIG9wdGlvbi52YWx1ZSA9IG9wdGlvblZhbHVlO1xuICAgICAgc2V0SW5uZXJIdG1sKG9wdGlvbiwgb3B0aW9uTGFiZWwpO1xuICAgICAgb3B0aW9uLnNlbGVjdGVkID0gaXNTZWxlY3RlZChvcHRpb25WYWx1ZSwgcGFyYW1zLmlucHV0VmFsdWUpO1xuICAgICAgcGFyZW50LmFwcGVuZENoaWxkKG9wdGlvbik7XG4gICAgfTtcbiAgICBpbnB1dE9wdGlvbnMuZm9yRWFjaChpbnB1dE9wdGlvbiA9PiB7XG4gICAgICBjb25zdCBvcHRpb25WYWx1ZSA9IGlucHV0T3B0aW9uWzBdO1xuICAgICAgY29uc3Qgb3B0aW9uTGFiZWwgPSBpbnB1dE9wdGlvblsxXTtcbiAgICAgIC8vIDxvcHRncm91cD4gc3BlYzpcbiAgICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9odG1sNDAxL2ludGVyYWN0L2Zvcm1zLmh0bWwjaC0xNy42XG4gICAgICAvLyBcIi4uLmFsbCBPUFRHUk9VUCBlbGVtZW50cyBtdXN0IGJlIHNwZWNpZmllZCBkaXJlY3RseSB3aXRoaW4gYSBTRUxFQ1QgZWxlbWVudCAoaS5lLiwgZ3JvdXBzIG1heSBub3QgYmUgbmVzdGVkKS4uLlwiXG4gICAgICAvLyBjaGVjayB3aGV0aGVyIHRoaXMgaXMgYSA8b3B0Z3JvdXA+XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25MYWJlbCkpIHtcbiAgICAgICAgLy8gaWYgaXQgaXMgYW4gYXJyYXksIHRoZW4gaXQgaXMgYW4gPG9wdGdyb3VwPlxuICAgICAgICBjb25zdCBvcHRncm91cCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ29wdGdyb3VwJyk7XG4gICAgICAgIG9wdGdyb3VwLmxhYmVsID0gb3B0aW9uVmFsdWU7XG4gICAgICAgIG9wdGdyb3VwLmRpc2FibGVkID0gZmFsc2U7IC8vIG5vdCBjb25maWd1cmFibGUgZm9yIG5vd1xuICAgICAgICBzZWxlY3QuYXBwZW5kQ2hpbGQob3B0Z3JvdXApO1xuICAgICAgICBvcHRpb25MYWJlbC5mb3JFYWNoKG8gPT4gcmVuZGVyT3B0aW9uKG9wdGdyb3VwLCBvWzFdLCBvWzBdKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBjYXNlIG9mIDxvcHRpb24+XG4gICAgICAgIHJlbmRlck9wdGlvbihzZWxlY3QsIG9wdGlvbkxhYmVsLCBvcHRpb25WYWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgc2VsZWN0LmZvY3VzKCk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcG9wdXBcbiAgICogQHBhcmFtIHtJbnB1dE9wdGlvbkZsYXR0ZW5lZFtdfSBpbnB1dE9wdGlvbnNcbiAgICogQHBhcmFtIHtTd2VldEFsZXJ0T3B0aW9uc30gcGFyYW1zXG4gICAqL1xuICBmdW5jdGlvbiBwb3B1bGF0ZVJhZGlvT3B0aW9ucyhwb3B1cCwgaW5wdXRPcHRpb25zLCBwYXJhbXMpIHtcbiAgICBjb25zdCByYWRpbyA9IGdldERpcmVjdENoaWxkQnlDbGFzcyhwb3B1cCwgc3dhbENsYXNzZXMucmFkaW8pO1xuICAgIGlmICghcmFkaW8pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaW5wdXRPcHRpb25zLmZvckVhY2goaW5wdXRPcHRpb24gPT4ge1xuICAgICAgY29uc3QgcmFkaW9WYWx1ZSA9IGlucHV0T3B0aW9uWzBdO1xuICAgICAgY29uc3QgcmFkaW9MYWJlbCA9IGlucHV0T3B0aW9uWzFdO1xuICAgICAgY29uc3QgcmFkaW9JbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7XG4gICAgICBjb25zdCByYWRpb0xhYmVsRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xhYmVsJyk7XG4gICAgICByYWRpb0lucHV0LnR5cGUgPSAncmFkaW8nO1xuICAgICAgcmFkaW9JbnB1dC5uYW1lID0gc3dhbENsYXNzZXMucmFkaW87XG4gICAgICByYWRpb0lucHV0LnZhbHVlID0gcmFkaW9WYWx1ZTtcbiAgICAgIGlmIChpc1NlbGVjdGVkKHJhZGlvVmFsdWUsIHBhcmFtcy5pbnB1dFZhbHVlKSkge1xuICAgICAgICByYWRpb0lucHV0LmNoZWNrZWQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgbGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgICBzZXRJbm5lckh0bWwobGFiZWwsIHJhZGlvTGFiZWwpO1xuICAgICAgbGFiZWwuY2xhc3NOYW1lID0gc3dhbENsYXNzZXMubGFiZWw7XG4gICAgICByYWRpb0xhYmVsRWxlbWVudC5hcHBlbmRDaGlsZChyYWRpb0lucHV0KTtcbiAgICAgIHJhZGlvTGFiZWxFbGVtZW50LmFwcGVuZENoaWxkKGxhYmVsKTtcbiAgICAgIHJhZGlvLmFwcGVuZENoaWxkKHJhZGlvTGFiZWxFbGVtZW50KTtcbiAgICB9KTtcbiAgICBjb25zdCByYWRpb3MgPSByYWRpby5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dCcpO1xuICAgIGlmIChyYWRpb3MubGVuZ3RoKSB7XG4gICAgICByYWRpb3NbMF0uZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYGlucHV0T3B0aW9uc2AgaW50byBhbiBhcnJheSBvZiBgW3ZhbHVlLCBsYWJlbF1gc1xuICAgKlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IGlucHV0T3B0aW9uc1xuICAgKiBAdHlwZWRlZiB7c3RyaW5nW119IElucHV0T3B0aW9uRmxhdHRlbmVkXG4gICAqIEByZXR1cm5zIHtJbnB1dE9wdGlvbkZsYXR0ZW5lZFtdfVxuICAgKi9cbiAgY29uc3QgZm9ybWF0SW5wdXRPcHRpb25zID0gaW5wdXRPcHRpb25zID0+IHtcbiAgICAvKiogQHR5cGUge0lucHV0T3B0aW9uRmxhdHRlbmVkW119ICovXG4gICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgaWYgKGlucHV0T3B0aW9ucyBpbnN0YW5jZW9mIE1hcCkge1xuICAgICAgaW5wdXRPcHRpb25zLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgbGV0IHZhbHVlRm9ybWF0dGVkID0gdmFsdWU7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWVGb3JtYXR0ZWQgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgLy8gY2FzZSBvZiA8b3B0Z3JvdXA+XG4gICAgICAgICAgdmFsdWVGb3JtYXR0ZWQgPSBmb3JtYXRJbnB1dE9wdGlvbnModmFsdWVGb3JtYXR0ZWQpO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5wdXNoKFtrZXksIHZhbHVlRm9ybWF0dGVkXSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgT2JqZWN0LmtleXMoaW5wdXRPcHRpb25zKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIGxldCB2YWx1ZUZvcm1hdHRlZCA9IGlucHV0T3B0aW9uc1trZXldO1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlRm9ybWF0dGVkID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgIC8vIGNhc2Ugb2YgPG9wdGdyb3VwPlxuICAgICAgICAgIHZhbHVlRm9ybWF0dGVkID0gZm9ybWF0SW5wdXRPcHRpb25zKHZhbHVlRm9ybWF0dGVkKTtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQucHVzaChba2V5LCB2YWx1ZUZvcm1hdHRlZF0pO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25WYWx1ZVxuICAgKiBAcGFyYW0ge1N3ZWV0QWxlcnRJbnB1dFZhbHVlfSBpbnB1dFZhbHVlXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgY29uc3QgaXNTZWxlY3RlZCA9IChvcHRpb25WYWx1ZSwgaW5wdXRWYWx1ZSkgPT4ge1xuICAgIHJldHVybiAhIWlucHV0VmFsdWUgJiYgaW5wdXRWYWx1ZS50b1N0cmluZygpID09PSBvcHRpb25WYWx1ZS50b1N0cmluZygpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1N3ZWV0QWxlcnR9IGluc3RhbmNlXG4gICAqL1xuICBjb25zdCBoYW5kbGVDb25maXJtQnV0dG9uQ2xpY2sgPSBpbnN0YW5jZSA9PiB7XG4gICAgY29uc3QgaW5uZXJQYXJhbXMgPSBwcml2YXRlUHJvcHMuaW5uZXJQYXJhbXMuZ2V0KGluc3RhbmNlKTtcbiAgICBpbnN0YW5jZS5kaXNhYmxlQnV0dG9ucygpO1xuICAgIGlmIChpbm5lclBhcmFtcy5pbnB1dCkge1xuICAgICAgaGFuZGxlQ29uZmlybU9yRGVueVdpdGhJbnB1dChpbnN0YW5jZSwgJ2NvbmZpcm0nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uZmlybShpbnN0YW5jZSwgdHJ1ZSk7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1N3ZWV0QWxlcnR9IGluc3RhbmNlXG4gICAqL1xuICBjb25zdCBoYW5kbGVEZW55QnV0dG9uQ2xpY2sgPSBpbnN0YW5jZSA9PiB7XG4gICAgY29uc3QgaW5uZXJQYXJhbXMgPSBwcml2YXRlUHJvcHMuaW5uZXJQYXJhbXMuZ2V0KGluc3RhbmNlKTtcbiAgICBpbnN0YW5jZS5kaXNhYmxlQnV0dG9ucygpO1xuICAgIGlmIChpbm5lclBhcmFtcy5yZXR1cm5JbnB1dFZhbHVlT25EZW55KSB7XG4gICAgICBoYW5kbGVDb25maXJtT3JEZW55V2l0aElucHV0KGluc3RhbmNlLCAnZGVueScpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZW55KGluc3RhbmNlLCBmYWxzZSk7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1N3ZWV0QWxlcnR9IGluc3RhbmNlXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGRpc21pc3NXaXRoXG4gICAqL1xuICBjb25zdCBoYW5kbGVDYW5jZWxCdXR0b25DbGljayA9IChpbnN0YW5jZSwgZGlzbWlzc1dpdGgpID0+IHtcbiAgICBpbnN0YW5jZS5kaXNhYmxlQnV0dG9ucygpO1xuICAgIGRpc21pc3NXaXRoKERpc21pc3NSZWFzb24uY2FuY2VsKTtcbiAgfTtcblxuICAvKipcbiAgICogQHBhcmFtIHtTd2VldEFsZXJ0fSBpbnN0YW5jZVxuICAgKiBAcGFyYW0geydjb25maXJtJyB8ICdkZW55J30gdHlwZVxuICAgKi9cbiAgY29uc3QgaGFuZGxlQ29uZmlybU9yRGVueVdpdGhJbnB1dCA9IChpbnN0YW5jZSwgdHlwZSkgPT4ge1xuICAgIGNvbnN0IGlubmVyUGFyYW1zID0gcHJpdmF0ZVByb3BzLmlubmVyUGFyYW1zLmdldChpbnN0YW5jZSk7XG4gICAgaWYgKCFpbm5lclBhcmFtcy5pbnB1dCkge1xuICAgICAgZXJyb3IoXCJUaGUgXFxcImlucHV0XFxcIiBwYXJhbWV0ZXIgaXMgbmVlZGVkIHRvIGJlIHNldCB3aGVuIHVzaW5nIHJldHVybklucHV0VmFsdWVPblwiLmNvbmNhdChjYXBpdGFsaXplRmlyc3RMZXR0ZXIodHlwZSkpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaW5wdXQgPSBpbnN0YW5jZS5nZXRJbnB1dCgpO1xuICAgIGNvbnN0IGlucHV0VmFsdWUgPSBnZXRJbnB1dFZhbHVlKGluc3RhbmNlLCBpbm5lclBhcmFtcyk7XG4gICAgaWYgKGlubmVyUGFyYW1zLmlucHV0VmFsaWRhdG9yKSB7XG4gICAgICBoYW5kbGVJbnB1dFZhbGlkYXRvcihpbnN0YW5jZSwgaW5wdXRWYWx1ZSwgdHlwZSk7XG4gICAgfSBlbHNlIGlmIChpbnB1dCAmJiAhaW5wdXQuY2hlY2tWYWxpZGl0eSgpKSB7XG4gICAgICBpbnN0YW5jZS5lbmFibGVCdXR0b25zKCk7XG4gICAgICBpbnN0YW5jZS5zaG93VmFsaWRhdGlvbk1lc3NhZ2UoaW5uZXJQYXJhbXMudmFsaWRhdGlvbk1lc3NhZ2UpO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2RlbnknKSB7XG4gICAgICBkZW55KGluc3RhbmNlLCBpbnB1dFZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uZmlybShpbnN0YW5jZSwgaW5wdXRWYWx1ZSk7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1N3ZWV0QWxlcnR9IGluc3RhbmNlXG4gICAqIEBwYXJhbSB7U3dlZXRBbGVydElucHV0VmFsdWV9IGlucHV0VmFsdWVcbiAgICogQHBhcmFtIHsnY29uZmlybScgfCAnZGVueSd9IHR5cGVcbiAgICovXG4gIGNvbnN0IGhhbmRsZUlucHV0VmFsaWRhdG9yID0gKGluc3RhbmNlLCBpbnB1dFZhbHVlLCB0eXBlKSA9PiB7XG4gICAgY29uc3QgaW5uZXJQYXJhbXMgPSBwcml2YXRlUHJvcHMuaW5uZXJQYXJhbXMuZ2V0KGluc3RhbmNlKTtcbiAgICBpbnN0YW5jZS5kaXNhYmxlSW5wdXQoKTtcbiAgICBjb25zdCB2YWxpZGF0aW9uUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gYXNQcm9taXNlKGlubmVyUGFyYW1zLmlucHV0VmFsaWRhdG9yKGlucHV0VmFsdWUsIGlubmVyUGFyYW1zLnZhbGlkYXRpb25NZXNzYWdlKSkpO1xuICAgIHZhbGlkYXRpb25Qcm9taXNlLnRoZW4odmFsaWRhdGlvbk1lc3NhZ2UgPT4ge1xuICAgICAgaW5zdGFuY2UuZW5hYmxlQnV0dG9ucygpO1xuICAgICAgaW5zdGFuY2UuZW5hYmxlSW5wdXQoKTtcbiAgICAgIGlmICh2YWxpZGF0aW9uTWVzc2FnZSkge1xuICAgICAgICBpbnN0YW5jZS5zaG93VmFsaWRhdGlvbk1lc3NhZ2UodmFsaWRhdGlvbk1lc3NhZ2UpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnZGVueScpIHtcbiAgICAgICAgZGVueShpbnN0YW5jZSwgaW5wdXRWYWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25maXJtKGluc3RhbmNlLCBpbnB1dFZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICAvKipcbiAgICogQHBhcmFtIHtTd2VldEFsZXJ0fSBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge2FueX0gdmFsdWVcbiAgICovXG4gIGNvbnN0IGRlbnkgPSAoaW5zdGFuY2UsIHZhbHVlKSA9PiB7XG4gICAgY29uc3QgaW5uZXJQYXJhbXMgPSBwcml2YXRlUHJvcHMuaW5uZXJQYXJhbXMuZ2V0KGluc3RhbmNlIHx8IHVuZGVmaW5lZCk7XG4gICAgaWYgKGlubmVyUGFyYW1zLnNob3dMb2FkZXJPbkRlbnkpIHtcbiAgICAgIHNob3dMb2FkaW5nKGdldERlbnlCdXR0b24oKSk7XG4gICAgfVxuICAgIGlmIChpbm5lclBhcmFtcy5wcmVEZW55KSB7XG4gICAgICBpbnN0YW5jZS5pc0F3YWl0aW5nUHJvbWlzZSA9IHRydWU7IC8vIEZsYWdnaW5nIHRoZSBpbnN0YW5jZSBhcyBhd2FpdGluZyBhIHByb21pc2Ugc28gaXQncyBvd24gcHJvbWlzZSdzIHJlamVjdC9yZXNvbHZlIG1ldGhvZHMgZG9lc24ndCBnZXQgZGVzdHJveWVkIHVudGlsIHRoZSByZXN1bHQgZnJvbSB0aGlzIHByZURlbnkncyBwcm9taXNlIGlzIHJlY2VpdmVkXG4gICAgICBjb25zdCBwcmVEZW55UHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gYXNQcm9taXNlKGlubmVyUGFyYW1zLnByZURlbnkodmFsdWUsIGlubmVyUGFyYW1zLnZhbGlkYXRpb25NZXNzYWdlKSkpO1xuICAgICAgcHJlRGVueVByb21pc2UudGhlbihwcmVEZW55VmFsdWUgPT4ge1xuICAgICAgICBpZiAocHJlRGVueVZhbHVlID09PSBmYWxzZSkge1xuICAgICAgICAgIGluc3RhbmNlLmhpZGVMb2FkaW5nKCk7XG4gICAgICAgICAgaGFuZGxlQXdhaXRpbmdQcm9taXNlKGluc3RhbmNlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpbnN0YW5jZS5jbG9zZSh7XG4gICAgICAgICAgICBpc0RlbmllZDogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiB0eXBlb2YgcHJlRGVueVZhbHVlID09PSAndW5kZWZpbmVkJyA/IHZhbHVlIDogcHJlRGVueVZhbHVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pLmNhdGNoKGVycm9yID0+IHJlamVjdFdpdGgoaW5zdGFuY2UgfHwgdW5kZWZpbmVkLCBlcnJvcikpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnN0YW5jZS5jbG9zZSh7XG4gICAgICAgIGlzRGVuaWVkOiB0cnVlLFxuICAgICAgICB2YWx1ZVxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1N3ZWV0QWxlcnR9IGluc3RhbmNlXG4gICAqIEBwYXJhbSB7YW55fSB2YWx1ZVxuICAgKi9cbiAgY29uc3Qgc3VjY2VlZFdpdGggPSAoaW5zdGFuY2UsIHZhbHVlKSA9PiB7XG4gICAgaW5zdGFuY2UuY2xvc2Uoe1xuICAgICAgaXNDb25maXJtZWQ6IHRydWUsXG4gICAgICB2YWx1ZVxuICAgIH0pO1xuICB9O1xuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge1N3ZWV0QWxlcnR9IGluc3RhbmNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlcnJvclxuICAgKi9cbiAgY29uc3QgcmVqZWN0V2l0aCA9IChpbnN0YW5jZSwgZXJyb3IpID0+IHtcbiAgICBpbnN0YW5jZS5yZWplY3RQcm9taXNlKGVycm9yKTtcbiAgfTtcblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtTd2VldEFsZXJ0fSBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge2FueX0gdmFsdWVcbiAgICovXG4gIGNvbnN0IGNvbmZpcm0gPSAoaW5zdGFuY2UsIHZhbHVlKSA9PiB7XG4gICAgY29uc3QgaW5uZXJQYXJhbXMgPSBwcml2YXRlUHJvcHMuaW5uZXJQYXJhbXMuZ2V0KGluc3RhbmNlIHx8IHVuZGVmaW5lZCk7XG4gICAgaWYgKGlubmVyUGFyYW1zLnNob3dMb2FkZXJPbkNvbmZpcm0pIHtcbiAgICAgIHNob3dMb2FkaW5nKCk7XG4gICAgfVxuICAgIGlmIChpbm5lclBhcmFtcy5wcmVDb25maXJtKSB7XG4gICAgICBpbnN0YW5jZS5yZXNldFZhbGlkYXRpb25NZXNzYWdlKCk7XG4gICAgICBpbnN0YW5jZS5pc0F3YWl0aW5nUHJvbWlzZSA9IHRydWU7IC8vIEZsYWdnaW5nIHRoZSBpbnN0YW5jZSBhcyBhd2FpdGluZyBhIHByb21pc2Ugc28gaXQncyBvd24gcHJvbWlzZSdzIHJlamVjdC9yZXNvbHZlIG1ldGhvZHMgZG9lc24ndCBnZXQgZGVzdHJveWVkIHVudGlsIHRoZSByZXN1bHQgZnJvbSB0aGlzIHByZUNvbmZpcm0ncyBwcm9taXNlIGlzIHJlY2VpdmVkXG4gICAgICBjb25zdCBwcmVDb25maXJtUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gYXNQcm9taXNlKGlubmVyUGFyYW1zLnByZUNvbmZpcm0odmFsdWUsIGlubmVyUGFyYW1zLnZhbGlkYXRpb25NZXNzYWdlKSkpO1xuICAgICAgcHJlQ29uZmlybVByb21pc2UudGhlbihwcmVDb25maXJtVmFsdWUgPT4ge1xuICAgICAgICBpZiAoaXNWaXNpYmxlJDEoZ2V0VmFsaWRhdGlvbk1lc3NhZ2UoKSkgfHwgcHJlQ29uZmlybVZhbHVlID09PSBmYWxzZSkge1xuICAgICAgICAgIGluc3RhbmNlLmhpZGVMb2FkaW5nKCk7XG4gICAgICAgICAgaGFuZGxlQXdhaXRpbmdQcm9taXNlKGluc3RhbmNlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdWNjZWVkV2l0aChpbnN0YW5jZSwgdHlwZW9mIHByZUNvbmZpcm1WYWx1ZSA9PT0gJ3VuZGVmaW5lZCcgPyB2YWx1ZSA6IHByZUNvbmZpcm1WYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pLmNhdGNoKGVycm9yID0+IHJlamVjdFdpdGgoaW5zdGFuY2UgfHwgdW5kZWZpbmVkLCBlcnJvcikpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdWNjZWVkV2l0aChpbnN0YW5jZSwgdmFsdWUpO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogSGlkZXMgbG9hZGVyIGFuZCBzaG93cyBiYWNrIHRoZSBidXR0b24gd2hpY2ggd2FzIGhpZGRlbiBieSAuc2hvd0xvYWRpbmcoKVxuICAgKi9cbiAgZnVuY3Rpb24gaGlkZUxvYWRpbmcoKSB7XG4gICAgLy8gZG8gbm90aGluZyBpZiBwb3B1cCBpcyBjbG9zZWRcbiAgICBjb25zdCBpbm5lclBhcmFtcyA9IHByaXZhdGVQcm9wcy5pbm5lclBhcmFtcy5nZXQodGhpcyk7XG4gICAgaWYgKCFpbm5lclBhcmFtcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBkb21DYWNoZSA9IHByaXZhdGVQcm9wcy5kb21DYWNoZS5nZXQodGhpcyk7XG4gICAgaGlkZShkb21DYWNoZS5sb2FkZXIpO1xuICAgIGlmIChpc1RvYXN0KCkpIHtcbiAgICAgIGlmIChpbm5lclBhcmFtcy5pY29uKSB7XG4gICAgICAgIHNob3coZ2V0SWNvbigpKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc2hvd1JlbGF0ZWRCdXR0b24oZG9tQ2FjaGUpO1xuICAgIH1cbiAgICByZW1vdmVDbGFzcyhbZG9tQ2FjaGUucG9wdXAsIGRvbUNhY2hlLmFjdGlvbnNdLCBzd2FsQ2xhc3Nlcy5sb2FkaW5nKTtcbiAgICBkb21DYWNoZS5wb3B1cC5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtYnVzeScpO1xuICAgIGRvbUNhY2hlLnBvcHVwLnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS1sb2FkaW5nJyk7XG4gICAgZG9tQ2FjaGUuY29uZmlybUJ1dHRvbi5kaXNhYmxlZCA9IGZhbHNlO1xuICAgIGRvbUNhY2hlLmRlbnlCdXR0b24uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICBkb21DYWNoZS5jYW5jZWxCdXR0b24uZGlzYWJsZWQgPSBmYWxzZTtcbiAgfVxuICBjb25zdCBzaG93UmVsYXRlZEJ1dHRvbiA9IGRvbUNhY2hlID0+IHtcbiAgICBjb25zdCBidXR0b25Ub1JlcGxhY2UgPSBkb21DYWNoZS5wb3B1cC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGRvbUNhY2hlLmxvYWRlci5nZXRBdHRyaWJ1dGUoJ2RhdGEtYnV0dG9uLXRvLXJlcGxhY2UnKSk7XG4gICAgaWYgKGJ1dHRvblRvUmVwbGFjZS5sZW5ndGgpIHtcbiAgICAgIHNob3coYnV0dG9uVG9SZXBsYWNlWzBdLCAnaW5saW5lLWJsb2NrJyk7XG4gICAgfSBlbHNlIGlmIChhbGxCdXR0b25zQXJlSGlkZGVuKCkpIHtcbiAgICAgIGhpZGUoZG9tQ2FjaGUuYWN0aW9ucyk7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBpbnB1dCBET00gbm9kZSwgdGhpcyBtZXRob2Qgd29ya3Mgd2l0aCBpbnB1dCBwYXJhbWV0ZXIuXG4gICAqXG4gICAqIEByZXR1cm5zIHtIVE1MSW5wdXRFbGVtZW50IHwgbnVsbH1cbiAgICovXG4gIGZ1bmN0aW9uIGdldElucHV0KCkge1xuICAgIGNvbnN0IGlubmVyUGFyYW1zID0gcHJpdmF0ZVByb3BzLmlubmVyUGFyYW1zLmdldCh0aGlzKTtcbiAgICBjb25zdCBkb21DYWNoZSA9IHByaXZhdGVQcm9wcy5kb21DYWNoZS5nZXQodGhpcyk7XG4gICAgaWYgKCFkb21DYWNoZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBnZXRJbnB1dCQxKGRvbUNhY2hlLnBvcHVwLCBpbm5lclBhcmFtcy5pbnB1dCk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtTd2VldEFsZXJ0fSBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBidXR0b25zXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gZGlzYWJsZWRcbiAgICovXG4gIGZ1bmN0aW9uIHNldEJ1dHRvbnNEaXNhYmxlZChpbnN0YW5jZSwgYnV0dG9ucywgZGlzYWJsZWQpIHtcbiAgICBjb25zdCBkb21DYWNoZSA9IHByaXZhdGVQcm9wcy5kb21DYWNoZS5nZXQoaW5zdGFuY2UpO1xuICAgIGJ1dHRvbnMuZm9yRWFjaChidXR0b24gPT4ge1xuICAgICAgZG9tQ2FjaGVbYnV0dG9uXS5kaXNhYmxlZCA9IGRpc2FibGVkO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7SFRNTElucHV0RWxlbWVudCB8IG51bGx9IGlucHV0XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gZGlzYWJsZWRcbiAgICovXG4gIGZ1bmN0aW9uIHNldElucHV0RGlzYWJsZWQoaW5wdXQsIGRpc2FibGVkKSB7XG4gICAgY29uc3QgcG9wdXAgPSBnZXRQb3B1cCgpO1xuICAgIGlmICghcG9wdXAgfHwgIWlucHV0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChpbnB1dC50eXBlID09PSAncmFkaW8nKSB7XG4gICAgICAvKiogQHR5cGUge05vZGVMaXN0T2Y8SFRNTElucHV0RWxlbWVudD59ICovXG4gICAgICBjb25zdCByYWRpb3MgPSBwb3B1cC5xdWVyeVNlbGVjdG9yQWxsKFwiW25hbWU9XFxcIlwiLmNvbmNhdChzd2FsQ2xhc3Nlcy5yYWRpbywgXCJcXFwiXVwiKSk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJhZGlvcy5sZW5ndGg7IGkrKykge1xuICAgICAgICByYWRpb3NbaV0uZGlzYWJsZWQgPSBkaXNhYmxlZDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaW5wdXQuZGlzYWJsZWQgPSBkaXNhYmxlZDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRW5hYmxlIGFsbCB0aGUgYnV0dG9uc1xuICAgKiBAdGhpcyB7U3dlZXRBbGVydH1cbiAgICovXG4gIGZ1bmN0aW9uIGVuYWJsZUJ1dHRvbnMoKSB7XG4gICAgc2V0QnV0dG9uc0Rpc2FibGVkKHRoaXMsIFsnY29uZmlybUJ1dHRvbicsICdkZW55QnV0dG9uJywgJ2NhbmNlbEJ1dHRvbiddLCBmYWxzZSk7XG4gIH1cblxuICAvKipcbiAgICogRGlzYWJsZSBhbGwgdGhlIGJ1dHRvbnNcbiAgICogQHRoaXMge1N3ZWV0QWxlcnR9XG4gICAqL1xuICBmdW5jdGlvbiBkaXNhYmxlQnV0dG9ucygpIHtcbiAgICBzZXRCdXR0b25zRGlzYWJsZWQodGhpcywgWydjb25maXJtQnV0dG9uJywgJ2RlbnlCdXR0b24nLCAnY2FuY2VsQnV0dG9uJ10sIHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuYWJsZSB0aGUgaW5wdXQgZmllbGRcbiAgICogQHRoaXMge1N3ZWV0QWxlcnR9XG4gICAqL1xuICBmdW5jdGlvbiBlbmFibGVJbnB1dCgpIHtcbiAgICBzZXRJbnB1dERpc2FibGVkKHRoaXMuZ2V0SW5wdXQoKSwgZmFsc2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc2FibGUgdGhlIGlucHV0IGZpZWxkXG4gICAqIEB0aGlzIHtTd2VldEFsZXJ0fVxuICAgKi9cbiAgZnVuY3Rpb24gZGlzYWJsZUlucHV0KCkge1xuICAgIHNldElucHV0RGlzYWJsZWQodGhpcy5nZXRJbnB1dCgpLCB0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaG93IGJsb2NrIHdpdGggdmFsaWRhdGlvbiBtZXNzYWdlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlcnJvclxuICAgKiBAdGhpcyB7U3dlZXRBbGVydH1cbiAgICovXG4gIGZ1bmN0aW9uIHNob3dWYWxpZGF0aW9uTWVzc2FnZShlcnJvcikge1xuICAgIGNvbnN0IGRvbUNhY2hlID0gcHJpdmF0ZVByb3BzLmRvbUNhY2hlLmdldCh0aGlzKTtcbiAgICBjb25zdCBwYXJhbXMgPSBwcml2YXRlUHJvcHMuaW5uZXJQYXJhbXMuZ2V0KHRoaXMpO1xuICAgIHNldElubmVySHRtbChkb21DYWNoZS52YWxpZGF0aW9uTWVzc2FnZSwgZXJyb3IpO1xuICAgIGRvbUNhY2hlLnZhbGlkYXRpb25NZXNzYWdlLmNsYXNzTmFtZSA9IHN3YWxDbGFzc2VzWyd2YWxpZGF0aW9uLW1lc3NhZ2UnXTtcbiAgICBpZiAocGFyYW1zLmN1c3RvbUNsYXNzICYmIHBhcmFtcy5jdXN0b21DbGFzcy52YWxpZGF0aW9uTWVzc2FnZSkge1xuICAgICAgYWRkQ2xhc3MoZG9tQ2FjaGUudmFsaWRhdGlvbk1lc3NhZ2UsIHBhcmFtcy5jdXN0b21DbGFzcy52YWxpZGF0aW9uTWVzc2FnZSk7XG4gICAgfVxuICAgIHNob3coZG9tQ2FjaGUudmFsaWRhdGlvbk1lc3NhZ2UpO1xuICAgIGNvbnN0IGlucHV0ID0gdGhpcy5nZXRJbnB1dCgpO1xuICAgIGlmIChpbnB1dCkge1xuICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCdhcmlhLWludmFsaWQnLCAndHJ1ZScpO1xuICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCdhcmlhLWRlc2NyaWJlZGJ5Jywgc3dhbENsYXNzZXNbJ3ZhbGlkYXRpb24tbWVzc2FnZSddKTtcbiAgICAgIGZvY3VzSW5wdXQoaW5wdXQpO1xuICAgICAgYWRkQ2xhc3MoaW5wdXQsIHN3YWxDbGFzc2VzLmlucHV0ZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIaWRlIGJsb2NrIHdpdGggdmFsaWRhdGlvbiBtZXNzYWdlXG4gICAqXG4gICAqIEB0aGlzIHtTd2VldEFsZXJ0fVxuICAgKi9cbiAgZnVuY3Rpb24gcmVzZXRWYWxpZGF0aW9uTWVzc2FnZSgpIHtcbiAgICBjb25zdCBkb21DYWNoZSA9IHByaXZhdGVQcm9wcy5kb21DYWNoZS5nZXQodGhpcyk7XG4gICAgaWYgKGRvbUNhY2hlLnZhbGlkYXRpb25NZXNzYWdlKSB7XG4gICAgICBoaWRlKGRvbUNhY2hlLnZhbGlkYXRpb25NZXNzYWdlKTtcbiAgICB9XG4gICAgY29uc3QgaW5wdXQgPSB0aGlzLmdldElucHV0KCk7XG4gICAgaWYgKGlucHV0KSB7XG4gICAgICBpbnB1dC5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtaW52YWxpZCcpO1xuICAgICAgaW5wdXQucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWRlc2NyaWJlZGJ5Jyk7XG4gICAgICByZW1vdmVDbGFzcyhpbnB1dCwgc3dhbENsYXNzZXMuaW5wdXRlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgZGVmYXVsdFBhcmFtcyA9IHtcbiAgICB0aXRsZTogJycsXG4gICAgdGl0bGVUZXh0OiAnJyxcbiAgICB0ZXh0OiAnJyxcbiAgICBodG1sOiAnJyxcbiAgICBmb290ZXI6ICcnLFxuICAgIGljb246IHVuZGVmaW5lZCxcbiAgICBpY29uQ29sb3I6IHVuZGVmaW5lZCxcbiAgICBpY29uSHRtbDogdW5kZWZpbmVkLFxuICAgIHRlbXBsYXRlOiB1bmRlZmluZWQsXG4gICAgdG9hc3Q6IGZhbHNlLFxuICAgIHNob3dDbGFzczoge1xuICAgICAgcG9wdXA6ICdzd2FsMi1zaG93JyxcbiAgICAgIGJhY2tkcm9wOiAnc3dhbDItYmFja2Ryb3Atc2hvdycsXG4gICAgICBpY29uOiAnc3dhbDItaWNvbi1zaG93J1xuICAgIH0sXG4gICAgaGlkZUNsYXNzOiB7XG4gICAgICBwb3B1cDogJ3N3YWwyLWhpZGUnLFxuICAgICAgYmFja2Ryb3A6ICdzd2FsMi1iYWNrZHJvcC1oaWRlJyxcbiAgICAgIGljb246ICdzd2FsMi1pY29uLWhpZGUnXG4gICAgfSxcbiAgICBjdXN0b21DbGFzczoge30sXG4gICAgdGFyZ2V0OiAnYm9keScsXG4gICAgY29sb3I6IHVuZGVmaW5lZCxcbiAgICBiYWNrZHJvcDogdHJ1ZSxcbiAgICBoZWlnaHRBdXRvOiB0cnVlLFxuICAgIGFsbG93T3V0c2lkZUNsaWNrOiB0cnVlLFxuICAgIGFsbG93RXNjYXBlS2V5OiB0cnVlLFxuICAgIGFsbG93RW50ZXJLZXk6IHRydWUsXG4gICAgc3RvcEtleWRvd25Qcm9wYWdhdGlvbjogdHJ1ZSxcbiAgICBrZXlkb3duTGlzdGVuZXJDYXB0dXJlOiBmYWxzZSxcbiAgICBzaG93Q29uZmlybUJ1dHRvbjogdHJ1ZSxcbiAgICBzaG93RGVueUJ1dHRvbjogZmFsc2UsXG4gICAgc2hvd0NhbmNlbEJ1dHRvbjogZmFsc2UsXG4gICAgcHJlQ29uZmlybTogdW5kZWZpbmVkLFxuICAgIHByZURlbnk6IHVuZGVmaW5lZCxcbiAgICBjb25maXJtQnV0dG9uVGV4dDogJ09LJyxcbiAgICBjb25maXJtQnV0dG9uQXJpYUxhYmVsOiAnJyxcbiAgICBjb25maXJtQnV0dG9uQ29sb3I6IHVuZGVmaW5lZCxcbiAgICBkZW55QnV0dG9uVGV4dDogJ05vJyxcbiAgICBkZW55QnV0dG9uQXJpYUxhYmVsOiAnJyxcbiAgICBkZW55QnV0dG9uQ29sb3I6IHVuZGVmaW5lZCxcbiAgICBjYW5jZWxCdXR0b25UZXh0OiAnQ2FuY2VsJyxcbiAgICBjYW5jZWxCdXR0b25BcmlhTGFiZWw6ICcnLFxuICAgIGNhbmNlbEJ1dHRvbkNvbG9yOiB1bmRlZmluZWQsXG4gICAgYnV0dG9uc1N0eWxpbmc6IHRydWUsXG4gICAgcmV2ZXJzZUJ1dHRvbnM6IGZhbHNlLFxuICAgIGZvY3VzQ29uZmlybTogdHJ1ZSxcbiAgICBmb2N1c0Rlbnk6IGZhbHNlLFxuICAgIGZvY3VzQ2FuY2VsOiBmYWxzZSxcbiAgICByZXR1cm5Gb2N1czogdHJ1ZSxcbiAgICBzaG93Q2xvc2VCdXR0b246IGZhbHNlLFxuICAgIGNsb3NlQnV0dG9uSHRtbDogJyZ0aW1lczsnLFxuICAgIGNsb3NlQnV0dG9uQXJpYUxhYmVsOiAnQ2xvc2UgdGhpcyBkaWFsb2cnLFxuICAgIGxvYWRlckh0bWw6ICcnLFxuICAgIHNob3dMb2FkZXJPbkNvbmZpcm06IGZhbHNlLFxuICAgIHNob3dMb2FkZXJPbkRlbnk6IGZhbHNlLFxuICAgIGltYWdlVXJsOiB1bmRlZmluZWQsXG4gICAgaW1hZ2VXaWR0aDogdW5kZWZpbmVkLFxuICAgIGltYWdlSGVpZ2h0OiB1bmRlZmluZWQsXG4gICAgaW1hZ2VBbHQ6ICcnLFxuICAgIHRpbWVyOiB1bmRlZmluZWQsXG4gICAgdGltZXJQcm9ncmVzc0JhcjogZmFsc2UsXG4gICAgd2lkdGg6IHVuZGVmaW5lZCxcbiAgICBwYWRkaW5nOiB1bmRlZmluZWQsXG4gICAgYmFja2dyb3VuZDogdW5kZWZpbmVkLFxuICAgIGlucHV0OiB1bmRlZmluZWQsXG4gICAgaW5wdXRQbGFjZWhvbGRlcjogJycsXG4gICAgaW5wdXRMYWJlbDogJycsXG4gICAgaW5wdXRWYWx1ZTogJycsXG4gICAgaW5wdXRPcHRpb25zOiB7fSxcbiAgICBpbnB1dEF1dG9Gb2N1czogdHJ1ZSxcbiAgICBpbnB1dEF1dG9UcmltOiB0cnVlLFxuICAgIGlucHV0QXR0cmlidXRlczoge30sXG4gICAgaW5wdXRWYWxpZGF0b3I6IHVuZGVmaW5lZCxcbiAgICByZXR1cm5JbnB1dFZhbHVlT25EZW55OiBmYWxzZSxcbiAgICB2YWxpZGF0aW9uTWVzc2FnZTogdW5kZWZpbmVkLFxuICAgIGdyb3c6IGZhbHNlLFxuICAgIHBvc2l0aW9uOiAnY2VudGVyJyxcbiAgICBwcm9ncmVzc1N0ZXBzOiBbXSxcbiAgICBjdXJyZW50UHJvZ3Jlc3NTdGVwOiB1bmRlZmluZWQsXG4gICAgcHJvZ3Jlc3NTdGVwc0Rpc3RhbmNlOiB1bmRlZmluZWQsXG4gICAgd2lsbE9wZW46IHVuZGVmaW5lZCxcbiAgICBkaWRPcGVuOiB1bmRlZmluZWQsXG4gICAgZGlkUmVuZGVyOiB1bmRlZmluZWQsXG4gICAgd2lsbENsb3NlOiB1bmRlZmluZWQsXG4gICAgZGlkQ2xvc2U6IHVuZGVmaW5lZCxcbiAgICBkaWREZXN0cm95OiB1bmRlZmluZWQsXG4gICAgc2Nyb2xsYmFyUGFkZGluZzogdHJ1ZVxuICB9O1xuICBjb25zdCB1cGRhdGFibGVQYXJhbXMgPSBbJ2FsbG93RXNjYXBlS2V5JywgJ2FsbG93T3V0c2lkZUNsaWNrJywgJ2JhY2tncm91bmQnLCAnYnV0dG9uc1N0eWxpbmcnLCAnY2FuY2VsQnV0dG9uQXJpYUxhYmVsJywgJ2NhbmNlbEJ1dHRvbkNvbG9yJywgJ2NhbmNlbEJ1dHRvblRleHQnLCAnY2xvc2VCdXR0b25BcmlhTGFiZWwnLCAnY2xvc2VCdXR0b25IdG1sJywgJ2NvbG9yJywgJ2NvbmZpcm1CdXR0b25BcmlhTGFiZWwnLCAnY29uZmlybUJ1dHRvbkNvbG9yJywgJ2NvbmZpcm1CdXR0b25UZXh0JywgJ2N1cnJlbnRQcm9ncmVzc1N0ZXAnLCAnY3VzdG9tQ2xhc3MnLCAnZGVueUJ1dHRvbkFyaWFMYWJlbCcsICdkZW55QnV0dG9uQ29sb3InLCAnZGVueUJ1dHRvblRleHQnLCAnZGlkQ2xvc2UnLCAnZGlkRGVzdHJveScsICdmb290ZXInLCAnaGlkZUNsYXNzJywgJ2h0bWwnLCAnaWNvbicsICdpY29uQ29sb3InLCAnaWNvbkh0bWwnLCAnaW1hZ2VBbHQnLCAnaW1hZ2VIZWlnaHQnLCAnaW1hZ2VVcmwnLCAnaW1hZ2VXaWR0aCcsICdwcmVDb25maXJtJywgJ3ByZURlbnknLCAncHJvZ3Jlc3NTdGVwcycsICdyZXR1cm5Gb2N1cycsICdyZXZlcnNlQnV0dG9ucycsICdzaG93Q2FuY2VsQnV0dG9uJywgJ3Nob3dDbG9zZUJ1dHRvbicsICdzaG93Q29uZmlybUJ1dHRvbicsICdzaG93RGVueUJ1dHRvbicsICd0ZXh0JywgJ3RpdGxlJywgJ3RpdGxlVGV4dCcsICd3aWxsQ2xvc2UnXTtcblxuICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHN0cmluZz59ICovXG4gIGNvbnN0IGRlcHJlY2F0ZWRQYXJhbXMgPSB7fTtcbiAgY29uc3QgdG9hc3RJbmNvbXBhdGlibGVQYXJhbXMgPSBbJ2FsbG93T3V0c2lkZUNsaWNrJywgJ2FsbG93RW50ZXJLZXknLCAnYmFja2Ryb3AnLCAnZm9jdXNDb25maXJtJywgJ2ZvY3VzRGVueScsICdmb2N1c0NhbmNlbCcsICdyZXR1cm5Gb2N1cycsICdoZWlnaHRBdXRvJywgJ2tleWRvd25MaXN0ZW5lckNhcHR1cmUnXTtcblxuICAvKipcbiAgICogSXMgdmFsaWQgcGFyYW1ldGVyXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXJhbU5hbWVcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBjb25zdCBpc1ZhbGlkUGFyYW1ldGVyID0gcGFyYW1OYW1lID0+IHtcbiAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGRlZmF1bHRQYXJhbXMsIHBhcmFtTmFtZSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIElzIHZhbGlkIHBhcmFtZXRlciBmb3IgU3dhbC51cGRhdGUoKSBtZXRob2RcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhcmFtTmFtZVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGNvbnN0IGlzVXBkYXRhYmxlUGFyYW1ldGVyID0gcGFyYW1OYW1lID0+IHtcbiAgICByZXR1cm4gdXBkYXRhYmxlUGFyYW1zLmluZGV4T2YocGFyYW1OYW1lKSAhPT0gLTE7XG4gIH07XG5cbiAgLyoqXG4gICAqIElzIGRlcHJlY2F0ZWQgcGFyYW1ldGVyXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXJhbU5hbWVcbiAgICogQHJldHVybnMge3N0cmluZyB8IHVuZGVmaW5lZH1cbiAgICovXG4gIGNvbnN0IGlzRGVwcmVjYXRlZFBhcmFtZXRlciA9IHBhcmFtTmFtZSA9PiB7XG4gICAgcmV0dXJuIGRlcHJlY2F0ZWRQYXJhbXNbcGFyYW1OYW1lXTtcbiAgfTtcblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhcmFtXG4gICAqL1xuICBjb25zdCBjaGVja0lmUGFyYW1Jc1ZhbGlkID0gcGFyYW0gPT4ge1xuICAgIGlmICghaXNWYWxpZFBhcmFtZXRlcihwYXJhbSkpIHtcbiAgICAgIHdhcm4oXCJVbmtub3duIHBhcmFtZXRlciBcXFwiXCIuY29uY2F0KHBhcmFtLCBcIlxcXCJcIikpO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhcmFtXG4gICAqL1xuICBjb25zdCBjaGVja0lmVG9hc3RQYXJhbUlzVmFsaWQgPSBwYXJhbSA9PiB7XG4gICAgaWYgKHRvYXN0SW5jb21wYXRpYmxlUGFyYW1zLmluY2x1ZGVzKHBhcmFtKSkge1xuICAgICAgd2FybihcIlRoZSBwYXJhbWV0ZXIgXFxcIlwiLmNvbmNhdChwYXJhbSwgXCJcXFwiIGlzIGluY29tcGF0aWJsZSB3aXRoIHRvYXN0c1wiKSk7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGFyYW1cbiAgICovXG4gIGNvbnN0IGNoZWNrSWZQYXJhbUlzRGVwcmVjYXRlZCA9IHBhcmFtID0+IHtcbiAgICBjb25zdCBpc0RlcHJlY2F0ZWQgPSBpc0RlcHJlY2F0ZWRQYXJhbWV0ZXIocGFyYW0pO1xuICAgIGlmIChpc0RlcHJlY2F0ZWQpIHtcbiAgICAgIHdhcm5BYm91dERlcHJlY2F0aW9uKHBhcmFtLCBpc0RlcHJlY2F0ZWQpO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogU2hvdyByZWxldmFudCB3YXJuaW5ncyBmb3IgZ2l2ZW4gcGFyYW1zXG4gICAqXG4gICAqIEBwYXJhbSB7U3dlZXRBbGVydE9wdGlvbnN9IHBhcmFtc1xuICAgKi9cbiAgY29uc3Qgc2hvd1dhcm5pbmdzRm9yUGFyYW1zID0gcGFyYW1zID0+IHtcbiAgICBpZiAocGFyYW1zLmJhY2tkcm9wID09PSBmYWxzZSAmJiBwYXJhbXMuYWxsb3dPdXRzaWRlQ2xpY2spIHtcbiAgICAgIHdhcm4oJ1wiYWxsb3dPdXRzaWRlQ2xpY2tcIiBwYXJhbWV0ZXIgcmVxdWlyZXMgYGJhY2tkcm9wYCBwYXJhbWV0ZXIgdG8gYmUgc2V0IHRvIGB0cnVlYCcpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHBhcmFtIGluIHBhcmFtcykge1xuICAgICAgY2hlY2tJZlBhcmFtSXNWYWxpZChwYXJhbSk7XG4gICAgICBpZiAocGFyYW1zLnRvYXN0KSB7XG4gICAgICAgIGNoZWNrSWZUb2FzdFBhcmFtSXNWYWxpZChwYXJhbSk7XG4gICAgICB9XG4gICAgICBjaGVja0lmUGFyYW1Jc0RlcHJlY2F0ZWQocGFyYW0pO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogVXBkYXRlcyBwb3B1cCBwYXJhbWV0ZXJzLlxuICAgKlxuICAgKiBAcGFyYW0ge1N3ZWV0QWxlcnRPcHRpb25zfSBwYXJhbXNcbiAgICovXG4gIGZ1bmN0aW9uIHVwZGF0ZShwYXJhbXMpIHtcbiAgICBjb25zdCBwb3B1cCA9IGdldFBvcHVwKCk7XG4gICAgY29uc3QgaW5uZXJQYXJhbXMgPSBwcml2YXRlUHJvcHMuaW5uZXJQYXJhbXMuZ2V0KHRoaXMpO1xuICAgIGlmICghcG9wdXAgfHwgaGFzQ2xhc3MocG9wdXAsIGlubmVyUGFyYW1zLmhpZGVDbGFzcy5wb3B1cCkpIHtcbiAgICAgIHdhcm4oXCJZb3UncmUgdHJ5aW5nIHRvIHVwZGF0ZSB0aGUgY2xvc2VkIG9yIGNsb3NpbmcgcG9wdXAsIHRoYXQgd29uJ3Qgd29yay4gVXNlIHRoZSB1cGRhdGUoKSBtZXRob2QgaW4gcHJlQ29uZmlybSBwYXJhbWV0ZXIgb3Igc2hvdyBhIG5ldyBwb3B1cC5cIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHZhbGlkVXBkYXRhYmxlUGFyYW1zID0gZmlsdGVyVmFsaWRQYXJhbXMocGFyYW1zKTtcbiAgICBjb25zdCB1cGRhdGVkUGFyYW1zID0gT2JqZWN0LmFzc2lnbih7fSwgaW5uZXJQYXJhbXMsIHZhbGlkVXBkYXRhYmxlUGFyYW1zKTtcbiAgICByZW5kZXIodGhpcywgdXBkYXRlZFBhcmFtcyk7XG4gICAgcHJpdmF0ZVByb3BzLmlubmVyUGFyYW1zLnNldCh0aGlzLCB1cGRhdGVkUGFyYW1zKTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLCB7XG4gICAgICBwYXJhbXM6IHtcbiAgICAgICAgdmFsdWU6IE9iamVjdC5hc3NpZ24oe30sIHRoaXMucGFyYW1zLCBwYXJhbXMpLFxuICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1N3ZWV0QWxlcnRPcHRpb25zfSBwYXJhbXNcbiAgICogQHJldHVybnMge1N3ZWV0QWxlcnRPcHRpb25zfVxuICAgKi9cbiAgY29uc3QgZmlsdGVyVmFsaWRQYXJhbXMgPSBwYXJhbXMgPT4ge1xuICAgIGNvbnN0IHZhbGlkVXBkYXRhYmxlUGFyYW1zID0ge307XG4gICAgT2JqZWN0LmtleXMocGFyYW1zKS5mb3JFYWNoKHBhcmFtID0+IHtcbiAgICAgIGlmIChpc1VwZGF0YWJsZVBhcmFtZXRlcihwYXJhbSkpIHtcbiAgICAgICAgdmFsaWRVcGRhdGFibGVQYXJhbXNbcGFyYW1dID0gcGFyYW1zW3BhcmFtXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdhcm4oXCJJbnZhbGlkIHBhcmFtZXRlciB0byB1cGRhdGU6IFwiLmNvbmNhdChwYXJhbSkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB2YWxpZFVwZGF0YWJsZVBhcmFtcztcbiAgfTtcblxuICAvKipcbiAgICogRGlzcG9zZSB0aGUgY3VycmVudCBTd2VldEFsZXJ0MiBpbnN0YW5jZVxuICAgKi9cbiAgZnVuY3Rpb24gX2Rlc3Ryb3koKSB7XG4gICAgY29uc3QgZG9tQ2FjaGUgPSBwcml2YXRlUHJvcHMuZG9tQ2FjaGUuZ2V0KHRoaXMpO1xuICAgIGNvbnN0IGlubmVyUGFyYW1zID0gcHJpdmF0ZVByb3BzLmlubmVyUGFyYW1zLmdldCh0aGlzKTtcbiAgICBpZiAoIWlubmVyUGFyYW1zKSB7XG4gICAgICBkaXNwb3NlV2Vha01hcHModGhpcyk7IC8vIFRoZSBXZWFrTWFwcyBtaWdodCBoYXZlIGJlZW4gcGFydGx5IGRlc3Ryb3llZCwgd2UgbXVzdCByZWNhbGwgaXQgdG8gZGlzcG9zZSBhbnkgcmVtYWluaW5nIFdlYWtNYXBzICMyMzM1XG4gICAgICByZXR1cm47IC8vIFRoaXMgaW5zdGFuY2UgaGFzIGFscmVhZHkgYmVlbiBkZXN0cm95ZWRcbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiB0aGVyZSBpcyBhbm90aGVyIFN3YWwgY2xvc2luZ1xuICAgIGlmIChkb21DYWNoZS5wb3B1cCAmJiBnbG9iYWxTdGF0ZS5zd2FsQ2xvc2VFdmVudEZpbmlzaGVkQ2FsbGJhY2spIHtcbiAgICAgIGdsb2JhbFN0YXRlLnN3YWxDbG9zZUV2ZW50RmluaXNoZWRDYWxsYmFjaygpO1xuICAgICAgZGVsZXRlIGdsb2JhbFN0YXRlLnN3YWxDbG9zZUV2ZW50RmluaXNoZWRDYWxsYmFjaztcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBpbm5lclBhcmFtcy5kaWREZXN0cm95ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpbm5lclBhcmFtcy5kaWREZXN0cm95KCk7XG4gICAgfVxuICAgIGRpc3Bvc2VTd2FsKHRoaXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7U3dlZXRBbGVydH0gaW5zdGFuY2VcbiAgICovXG4gIGNvbnN0IGRpc3Bvc2VTd2FsID0gaW5zdGFuY2UgPT4ge1xuICAgIGRpc3Bvc2VXZWFrTWFwcyhpbnN0YW5jZSk7XG4gICAgLy8gVW5zZXQgdGhpcy5wYXJhbXMgc28gR0Mgd2lsbCBkaXNwb3NlIGl0ICgjMTU2OSlcbiAgICBkZWxldGUgaW5zdGFuY2UucGFyYW1zO1xuICAgIC8vIFVuc2V0IGdsb2JhbFN0YXRlIHByb3BzIHNvIEdDIHdpbGwgZGlzcG9zZSBnbG9iYWxTdGF0ZSAoIzE1NjkpXG4gICAgZGVsZXRlIGdsb2JhbFN0YXRlLmtleWRvd25IYW5kbGVyO1xuICAgIGRlbGV0ZSBnbG9iYWxTdGF0ZS5rZXlkb3duVGFyZ2V0O1xuICAgIC8vIFVuc2V0IGN1cnJlbnRJbnN0YW5jZVxuICAgIGRlbGV0ZSBnbG9iYWxTdGF0ZS5jdXJyZW50SW5zdGFuY2U7XG4gIH07XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7U3dlZXRBbGVydH0gaW5zdGFuY2VcbiAgICovXG4gIGNvbnN0IGRpc3Bvc2VXZWFrTWFwcyA9IGluc3RhbmNlID0+IHtcbiAgICAvLyBJZiB0aGUgY3VycmVudCBpbnN0YW5jZSBpcyBhd2FpdGluZyBhIHByb21pc2UgcmVzdWx0LCB3ZSBrZWVwIHRoZSBwcml2YXRlTWV0aG9kcyB0byBjYWxsIHRoZW0gb25jZSB0aGUgcHJvbWlzZSByZXN1bHQgaXMgcmV0cmlldmVkICMyMzM1XG4gICAgaWYgKGluc3RhbmNlLmlzQXdhaXRpbmdQcm9taXNlKSB7XG4gICAgICB1bnNldFdlYWtNYXBzKHByaXZhdGVQcm9wcywgaW5zdGFuY2UpO1xuICAgICAgaW5zdGFuY2UuaXNBd2FpdGluZ1Byb21pc2UgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB1bnNldFdlYWtNYXBzKHByaXZhdGVNZXRob2RzLCBpbnN0YW5jZSk7XG4gICAgICB1bnNldFdlYWtNYXBzKHByaXZhdGVQcm9wcywgaW5zdGFuY2UpO1xuICAgICAgZGVsZXRlIGluc3RhbmNlLmlzQXdhaXRpbmdQcm9taXNlO1xuICAgICAgLy8gVW5zZXQgaW5zdGFuY2UgbWV0aG9kc1xuICAgICAgZGVsZXRlIGluc3RhbmNlLmRpc2FibGVCdXR0b25zO1xuICAgICAgZGVsZXRlIGluc3RhbmNlLmVuYWJsZUJ1dHRvbnM7XG4gICAgICBkZWxldGUgaW5zdGFuY2UuZ2V0SW5wdXQ7XG4gICAgICBkZWxldGUgaW5zdGFuY2UuZGlzYWJsZUlucHV0O1xuICAgICAgZGVsZXRlIGluc3RhbmNlLmVuYWJsZUlucHV0O1xuICAgICAgZGVsZXRlIGluc3RhbmNlLmhpZGVMb2FkaW5nO1xuICAgICAgZGVsZXRlIGluc3RhbmNlLmRpc2FibGVMb2FkaW5nO1xuICAgICAgZGVsZXRlIGluc3RhbmNlLnNob3dWYWxpZGF0aW9uTWVzc2FnZTtcbiAgICAgIGRlbGV0ZSBpbnN0YW5jZS5yZXNldFZhbGlkYXRpb25NZXNzYWdlO1xuICAgICAgZGVsZXRlIGluc3RhbmNlLmNsb3NlO1xuICAgICAgZGVsZXRlIGluc3RhbmNlLmNsb3NlUG9wdXA7XG4gICAgICBkZWxldGUgaW5zdGFuY2UuY2xvc2VNb2RhbDtcbiAgICAgIGRlbGV0ZSBpbnN0YW5jZS5jbG9zZVRvYXN0O1xuICAgICAgZGVsZXRlIGluc3RhbmNlLnJlamVjdFByb21pc2U7XG4gICAgICBkZWxldGUgaW5zdGFuY2UudXBkYXRlO1xuICAgICAgZGVsZXRlIGluc3RhbmNlLl9kZXN0cm95O1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IG9ialxuICAgKiBAcGFyYW0ge1N3ZWV0QWxlcnR9IGluc3RhbmNlXG4gICAqL1xuICBjb25zdCB1bnNldFdlYWtNYXBzID0gKG9iaiwgaW5zdGFuY2UpID0+IHtcbiAgICBmb3IgKGNvbnN0IGkgaW4gb2JqKSB7XG4gICAgICBvYmpbaV0uZGVsZXRlKGluc3RhbmNlKTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIGluc3RhbmNlTWV0aG9kcyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgX2Rlc3Ryb3k6IF9kZXN0cm95LFxuICAgIGNsb3NlOiBjbG9zZSxcbiAgICBjbG9zZU1vZGFsOiBjbG9zZSxcbiAgICBjbG9zZVBvcHVwOiBjbG9zZSxcbiAgICBjbG9zZVRvYXN0OiBjbG9zZSxcbiAgICBkaXNhYmxlQnV0dG9uczogZGlzYWJsZUJ1dHRvbnMsXG4gICAgZGlzYWJsZUlucHV0OiBkaXNhYmxlSW5wdXQsXG4gICAgZGlzYWJsZUxvYWRpbmc6IGhpZGVMb2FkaW5nLFxuICAgIGVuYWJsZUJ1dHRvbnM6IGVuYWJsZUJ1dHRvbnMsXG4gICAgZW5hYmxlSW5wdXQ6IGVuYWJsZUlucHV0LFxuICAgIGdldElucHV0OiBnZXRJbnB1dCxcbiAgICBoYW5kbGVBd2FpdGluZ1Byb21pc2U6IGhhbmRsZUF3YWl0aW5nUHJvbWlzZSxcbiAgICBoaWRlTG9hZGluZzogaGlkZUxvYWRpbmcsXG4gICAgcmVqZWN0UHJvbWlzZTogcmVqZWN0UHJvbWlzZSxcbiAgICByZXNldFZhbGlkYXRpb25NZXNzYWdlOiByZXNldFZhbGlkYXRpb25NZXNzYWdlLFxuICAgIHNob3dWYWxpZGF0aW9uTWVzc2FnZTogc2hvd1ZhbGlkYXRpb25NZXNzYWdlLFxuICAgIHVwZGF0ZTogdXBkYXRlXG4gIH0pO1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1N3ZWV0QWxlcnRPcHRpb25zfSBpbm5lclBhcmFtc1xuICAgKiBAcGFyYW0ge0RvbUNhY2hlfSBkb21DYWNoZVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBkaXNtaXNzV2l0aFxuICAgKi9cbiAgY29uc3QgaGFuZGxlUG9wdXBDbGljayA9IChpbm5lclBhcmFtcywgZG9tQ2FjaGUsIGRpc21pc3NXaXRoKSA9PiB7XG4gICAgaWYgKGlubmVyUGFyYW1zLnRvYXN0KSB7XG4gICAgICBoYW5kbGVUb2FzdENsaWNrKGlubmVyUGFyYW1zLCBkb21DYWNoZSwgZGlzbWlzc1dpdGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJZ25vcmUgY2xpY2sgZXZlbnRzIHRoYXQgaGFkIG1vdXNlZG93biBvbiB0aGUgcG9wdXAgYnV0IG1vdXNldXAgb24gdGhlIGNvbnRhaW5lclxuICAgICAgLy8gVGhpcyBjYW4gaGFwcGVuIHdoZW4gdGhlIHVzZXIgZHJhZ3MgYSBzbGlkZXJcbiAgICAgIGhhbmRsZU1vZGFsTW91c2Vkb3duKGRvbUNhY2hlKTtcblxuICAgICAgLy8gSWdub3JlIGNsaWNrIGV2ZW50cyB0aGF0IGhhZCBtb3VzZWRvd24gb24gdGhlIGNvbnRhaW5lciBidXQgbW91c2V1cCBvbiB0aGUgcG9wdXBcbiAgICAgIGhhbmRsZUNvbnRhaW5lck1vdXNlZG93bihkb21DYWNoZSk7XG4gICAgICBoYW5kbGVNb2RhbENsaWNrKGlubmVyUGFyYW1zLCBkb21DYWNoZSwgZGlzbWlzc1dpdGgpO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogQHBhcmFtIHtTd2VldEFsZXJ0T3B0aW9uc30gaW5uZXJQYXJhbXNcbiAgICogQHBhcmFtIHtEb21DYWNoZX0gZG9tQ2FjaGVcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZGlzbWlzc1dpdGhcbiAgICovXG4gIGNvbnN0IGhhbmRsZVRvYXN0Q2xpY2sgPSAoaW5uZXJQYXJhbXMsIGRvbUNhY2hlLCBkaXNtaXNzV2l0aCkgPT4ge1xuICAgIC8vIENsb3NpbmcgdG9hc3QgYnkgaW50ZXJuYWwgY2xpY2tcbiAgICBkb21DYWNoZS5wb3B1cC5vbmNsaWNrID0gKCkgPT4ge1xuICAgICAgaWYgKGlubmVyUGFyYW1zICYmIChpc0FueUJ1dHRvblNob3duKGlubmVyUGFyYW1zKSB8fCBpbm5lclBhcmFtcy50aW1lciB8fCBpbm5lclBhcmFtcy5pbnB1dCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZGlzbWlzc1dpdGgoRGlzbWlzc1JlYXNvbi5jbG9zZSk7XG4gICAgfTtcbiAgfTtcblxuICAvKipcbiAgICogQHBhcmFtIHtTd2VldEFsZXJ0T3B0aW9uc30gaW5uZXJQYXJhbXNcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBjb25zdCBpc0FueUJ1dHRvblNob3duID0gaW5uZXJQYXJhbXMgPT4ge1xuICAgIHJldHVybiBpbm5lclBhcmFtcy5zaG93Q29uZmlybUJ1dHRvbiB8fCBpbm5lclBhcmFtcy5zaG93RGVueUJ1dHRvbiB8fCBpbm5lclBhcmFtcy5zaG93Q2FuY2VsQnV0dG9uIHx8IGlubmVyUGFyYW1zLnNob3dDbG9zZUJ1dHRvbjtcbiAgfTtcbiAgbGV0IGlnbm9yZU91dHNpZGVDbGljayA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0RvbUNhY2hlfSBkb21DYWNoZVxuICAgKi9cbiAgY29uc3QgaGFuZGxlTW9kYWxNb3VzZWRvd24gPSBkb21DYWNoZSA9PiB7XG4gICAgZG9tQ2FjaGUucG9wdXAub25tb3VzZWRvd24gPSAoKSA9PiB7XG4gICAgICBkb21DYWNoZS5jb250YWluZXIub25tb3VzZXVwID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgZG9tQ2FjaGUuY29udGFpbmVyLm9ubW91c2V1cCA9IHVuZGVmaW5lZDtcbiAgICAgICAgLy8gV2Ugb25seSBjaGVjayBpZiB0aGUgbW91c2V1cCB0YXJnZXQgaXMgdGhlIGNvbnRhaW5lciBiZWNhdXNlIHVzdWFsbHkgaXQgZG9lc24ndFxuICAgICAgICAvLyBoYXZlIGFueSBvdGhlciBkaXJlY3QgY2hpbGRyZW4gYXNpZGUgb2YgdGhlIHBvcHVwXG4gICAgICAgIGlmIChlLnRhcmdldCA9PT0gZG9tQ2FjaGUuY29udGFpbmVyKSB7XG4gICAgICAgICAgaWdub3JlT3V0c2lkZUNsaWNrID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9O1xuICB9O1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0RvbUNhY2hlfSBkb21DYWNoZVxuICAgKi9cbiAgY29uc3QgaGFuZGxlQ29udGFpbmVyTW91c2Vkb3duID0gZG9tQ2FjaGUgPT4ge1xuICAgIGRvbUNhY2hlLmNvbnRhaW5lci5vbm1vdXNlZG93biA9ICgpID0+IHtcbiAgICAgIGRvbUNhY2hlLnBvcHVwLm9ubW91c2V1cCA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIGRvbUNhY2hlLnBvcHVwLm9ubW91c2V1cCA9IHVuZGVmaW5lZDtcbiAgICAgICAgLy8gV2UgYWxzbyBuZWVkIHRvIGNoZWNrIGlmIHRoZSBtb3VzZXVwIHRhcmdldCBpcyBhIGNoaWxkIG9mIHRoZSBwb3B1cFxuICAgICAgICBpZiAoZS50YXJnZXQgPT09IGRvbUNhY2hlLnBvcHVwIHx8IGUudGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgZG9tQ2FjaGUucG9wdXAuY29udGFpbnMoZS50YXJnZXQpKSB7XG4gICAgICAgICAgaWdub3JlT3V0c2lkZUNsaWNrID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9O1xuICB9O1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1N3ZWV0QWxlcnRPcHRpb25zfSBpbm5lclBhcmFtc1xuICAgKiBAcGFyYW0ge0RvbUNhY2hlfSBkb21DYWNoZVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBkaXNtaXNzV2l0aFxuICAgKi9cbiAgY29uc3QgaGFuZGxlTW9kYWxDbGljayA9IChpbm5lclBhcmFtcywgZG9tQ2FjaGUsIGRpc21pc3NXaXRoKSA9PiB7XG4gICAgZG9tQ2FjaGUuY29udGFpbmVyLm9uY2xpY2sgPSBlID0+IHtcbiAgICAgIGlmIChpZ25vcmVPdXRzaWRlQ2xpY2spIHtcbiAgICAgICAgaWdub3JlT3V0c2lkZUNsaWNrID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChlLnRhcmdldCA9PT0gZG9tQ2FjaGUuY29udGFpbmVyICYmIGNhbGxJZkZ1bmN0aW9uKGlubmVyUGFyYW1zLmFsbG93T3V0c2lkZUNsaWNrKSkge1xuICAgICAgICBkaXNtaXNzV2l0aChEaXNtaXNzUmVhc29uLmJhY2tkcm9wKTtcbiAgICAgIH1cbiAgICB9O1xuICB9O1xuXG4gIGNvbnN0IGlzSnF1ZXJ5RWxlbWVudCA9IGVsZW0gPT4gdHlwZW9mIGVsZW0gPT09ICdvYmplY3QnICYmIGVsZW0uanF1ZXJ5O1xuICBjb25zdCBpc0VsZW1lbnQgPSBlbGVtID0+IGVsZW0gaW5zdGFuY2VvZiBFbGVtZW50IHx8IGlzSnF1ZXJ5RWxlbWVudChlbGVtKTtcbiAgY29uc3QgYXJnc1RvUGFyYW1zID0gYXJncyA9PiB7XG4gICAgY29uc3QgcGFyYW1zID0ge307XG4gICAgaWYgKHR5cGVvZiBhcmdzWzBdID09PSAnb2JqZWN0JyAmJiAhaXNFbGVtZW50KGFyZ3NbMF0pKSB7XG4gICAgICBPYmplY3QuYXNzaWduKHBhcmFtcywgYXJnc1swXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIFsndGl0bGUnLCAnaHRtbCcsICdpY29uJ10uZm9yRWFjaCgobmFtZSwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgYXJnID0gYXJnc1tpbmRleF07XG4gICAgICAgIGlmICh0eXBlb2YgYXJnID09PSAnc3RyaW5nJyB8fCBpc0VsZW1lbnQoYXJnKSkge1xuICAgICAgICAgIHBhcmFtc1tuYW1lXSA9IGFyZztcbiAgICAgICAgfSBlbHNlIGlmIChhcmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGVycm9yKFwiVW5leHBlY3RlZCB0eXBlIG9mIFwiLmNvbmNhdChuYW1lLCBcIiEgRXhwZWN0ZWQgXFxcInN0cmluZ1xcXCIgb3IgXFxcIkVsZW1lbnRcXFwiLCBnb3QgXCIpLmNvbmNhdCh0eXBlb2YgYXJnKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcGFyYW1zO1xuICB9O1xuXG4gIC8qKlxuICAgKiBNYWluIG1ldGhvZCB0byBjcmVhdGUgYSBuZXcgU3dlZXRBbGVydDIgcG9wdXBcbiAgICpcbiAgICogQHBhcmFtICB7Li4uU3dlZXRBbGVydE9wdGlvbnN9IGFyZ3NcbiAgICogQHJldHVybnMge1Byb21pc2U8U3dlZXRBbGVydFJlc3VsdD59XG4gICAqL1xuICBmdW5jdGlvbiBmaXJlKCkge1xuICAgIGNvbnN0IFN3YWwgPSB0aGlzOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFN3YWwoLi4uYXJncyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBleHRlbmRlZCB2ZXJzaW9uIG9mIGBTd2FsYCBjb250YWluaW5nIGBwYXJhbXNgIGFzIGRlZmF1bHRzLlxuICAgKiBVc2VmdWwgZm9yIHJldXNpbmcgU3dhbCBjb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiBGb3IgZXhhbXBsZTpcbiAgICpcbiAgICogQmVmb3JlOlxuICAgKiBjb25zdCB0ZXh0UHJvbXB0T3B0aW9ucyA9IHsgaW5wdXQ6ICd0ZXh0Jywgc2hvd0NhbmNlbEJ1dHRvbjogdHJ1ZSB9XG4gICAqIGNvbnN0IHt2YWx1ZTogZmlyc3ROYW1lfSA9IGF3YWl0IFN3YWwuZmlyZSh7IC4uLnRleHRQcm9tcHRPcHRpb25zLCB0aXRsZTogJ1doYXQgaXMgeW91ciBmaXJzdCBuYW1lPycgfSlcbiAgICogY29uc3Qge3ZhbHVlOiBsYXN0TmFtZX0gPSBhd2FpdCBTd2FsLmZpcmUoeyAuLi50ZXh0UHJvbXB0T3B0aW9ucywgdGl0bGU6ICdXaGF0IGlzIHlvdXIgbGFzdCBuYW1lPycgfSlcbiAgICpcbiAgICogQWZ0ZXI6XG4gICAqIGNvbnN0IFRleHRQcm9tcHQgPSBTd2FsLm1peGluKHsgaW5wdXQ6ICd0ZXh0Jywgc2hvd0NhbmNlbEJ1dHRvbjogdHJ1ZSB9KVxuICAgKiBjb25zdCB7dmFsdWU6IGZpcnN0TmFtZX0gPSBhd2FpdCBUZXh0UHJvbXB0KCdXaGF0IGlzIHlvdXIgZmlyc3QgbmFtZT8nKVxuICAgKiBjb25zdCB7dmFsdWU6IGxhc3ROYW1lfSA9IGF3YWl0IFRleHRQcm9tcHQoJ1doYXQgaXMgeW91ciBsYXN0IG5hbWU/JylcbiAgICpcbiAgICogQHBhcmFtIHtTd2VldEFsZXJ0T3B0aW9uc30gbWl4aW5QYXJhbXNcbiAgICogQHJldHVybnMge1N3ZWV0QWxlcnR9XG4gICAqL1xuICBmdW5jdGlvbiBtaXhpbihtaXhpblBhcmFtcykge1xuICAgIGNsYXNzIE1peGluU3dhbCBleHRlbmRzIHRoaXMge1xuICAgICAgX21haW4ocGFyYW1zLCBwcmlvcml0eU1peGluUGFyYW1zKSB7XG4gICAgICAgIHJldHVybiBzdXBlci5fbWFpbihwYXJhbXMsIE9iamVjdC5hc3NpZ24oe30sIG1peGluUGFyYW1zLCBwcmlvcml0eU1peGluUGFyYW1zKSk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICByZXR1cm4gTWl4aW5Td2FsO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIGB0aW1lcmAgcGFyYW1ldGVyIGlzIHNldCwgcmV0dXJucyBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIG9mIHRpbWVyIHJlbWFpbmVkLlxuICAgKiBPdGhlcndpc2UsIHJldHVybnMgdW5kZWZpbmVkLlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyIHwgdW5kZWZpbmVkfVxuICAgKi9cbiAgY29uc3QgZ2V0VGltZXJMZWZ0ID0gKCkgPT4ge1xuICAgIHJldHVybiBnbG9iYWxTdGF0ZS50aW1lb3V0ICYmIGdsb2JhbFN0YXRlLnRpbWVvdXQuZ2V0VGltZXJMZWZ0KCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFN0b3AgdGltZXIuIFJldHVybnMgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBvZiB0aW1lciByZW1haW5lZC5cbiAgICogSWYgYHRpbWVyYCBwYXJhbWV0ZXIgaXNuJ3Qgc2V0LCByZXR1cm5zIHVuZGVmaW5lZC5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlciB8IHVuZGVmaW5lZH1cbiAgICovXG4gIGNvbnN0IHN0b3BUaW1lciA9ICgpID0+IHtcbiAgICBpZiAoZ2xvYmFsU3RhdGUudGltZW91dCkge1xuICAgICAgc3RvcFRpbWVyUHJvZ3Jlc3NCYXIoKTtcbiAgICAgIHJldHVybiBnbG9iYWxTdGF0ZS50aW1lb3V0LnN0b3AoKTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIFJlc3VtZSB0aW1lci4gUmV0dXJucyBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIG9mIHRpbWVyIHJlbWFpbmVkLlxuICAgKiBJZiBgdGltZXJgIHBhcmFtZXRlciBpc24ndCBzZXQsIHJldHVybnMgdW5kZWZpbmVkLlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyIHwgdW5kZWZpbmVkfVxuICAgKi9cbiAgY29uc3QgcmVzdW1lVGltZXIgPSAoKSA9PiB7XG4gICAgaWYgKGdsb2JhbFN0YXRlLnRpbWVvdXQpIHtcbiAgICAgIGNvbnN0IHJlbWFpbmluZyA9IGdsb2JhbFN0YXRlLnRpbWVvdXQuc3RhcnQoKTtcbiAgICAgIGFuaW1hdGVUaW1lclByb2dyZXNzQmFyKHJlbWFpbmluZyk7XG4gICAgICByZXR1cm4gcmVtYWluaW5nO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogUmVzdW1lIHRpbWVyLiBSZXR1cm5zIG51bWJlciBvZiBtaWxsaXNlY29uZHMgb2YgdGltZXIgcmVtYWluZWQuXG4gICAqIElmIGB0aW1lcmAgcGFyYW1ldGVyIGlzbid0IHNldCwgcmV0dXJucyB1bmRlZmluZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXIgfCB1bmRlZmluZWR9XG4gICAqL1xuICBjb25zdCB0b2dnbGVUaW1lciA9ICgpID0+IHtcbiAgICBjb25zdCB0aW1lciA9IGdsb2JhbFN0YXRlLnRpbWVvdXQ7XG4gICAgcmV0dXJuIHRpbWVyICYmICh0aW1lci5ydW5uaW5nID8gc3RvcFRpbWVyKCkgOiByZXN1bWVUaW1lcigpKTtcbiAgfTtcblxuICAvKipcbiAgICogSW5jcmVhc2UgdGltZXIuIFJldHVybnMgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBvZiBhbiB1cGRhdGVkIHRpbWVyLlxuICAgKiBJZiBgdGltZXJgIHBhcmFtZXRlciBpc24ndCBzZXQsIHJldHVybnMgdW5kZWZpbmVkLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gbXNcbiAgICogQHJldHVybnMge251bWJlciB8IHVuZGVmaW5lZH1cbiAgICovXG4gIGNvbnN0IGluY3JlYXNlVGltZXIgPSBtcyA9PiB7XG4gICAgaWYgKGdsb2JhbFN0YXRlLnRpbWVvdXQpIHtcbiAgICAgIGNvbnN0IHJlbWFpbmluZyA9IGdsb2JhbFN0YXRlLnRpbWVvdXQuaW5jcmVhc2UobXMpO1xuICAgICAgYW5pbWF0ZVRpbWVyUHJvZ3Jlc3NCYXIocmVtYWluaW5nLCB0cnVlKTtcbiAgICAgIHJldHVybiByZW1haW5pbmc7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0aW1lciBpcyBydW5uaW5nLiBSZXR1cm5zIHRydWUgaWYgdGltZXIgaXMgcnVubmluZ1xuICAgKiBvciBmYWxzZSBpZiB0aW1lciBpcyBwYXVzZWQgb3Igc3RvcHBlZC5cbiAgICogSWYgYHRpbWVyYCBwYXJhbWV0ZXIgaXNuJ3Qgc2V0LCByZXR1cm5zIHVuZGVmaW5lZFxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGNvbnN0IGlzVGltZXJSdW5uaW5nID0gKCkgPT4ge1xuICAgIHJldHVybiAhIShnbG9iYWxTdGF0ZS50aW1lb3V0ICYmIGdsb2JhbFN0YXRlLnRpbWVvdXQuaXNSdW5uaW5nKCkpO1xuICB9O1xuXG4gIGxldCBib2R5Q2xpY2tMaXN0ZW5lckFkZGVkID0gZmFsc2U7XG4gIGNvbnN0IGNsaWNrSGFuZGxlcnMgPSB7fTtcblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGF0dHJcbiAgICovXG4gIGZ1bmN0aW9uIGJpbmRDbGlja0hhbmRsZXIoKSB7XG4gICAgbGV0IGF0dHIgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6ICdkYXRhLXN3YWwtdGVtcGxhdGUnO1xuICAgIGNsaWNrSGFuZGxlcnNbYXR0cl0gPSB0aGlzO1xuICAgIGlmICghYm9keUNsaWNrTGlzdGVuZXJBZGRlZCkge1xuICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGJvZHlDbGlja0xpc3RlbmVyKTtcbiAgICAgIGJvZHlDbGlja0xpc3RlbmVyQWRkZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuICBjb25zdCBib2R5Q2xpY2tMaXN0ZW5lciA9IGV2ZW50ID0+IHtcbiAgICBmb3IgKGxldCBlbCA9IGV2ZW50LnRhcmdldDsgZWwgJiYgZWwgIT09IGRvY3VtZW50OyBlbCA9IGVsLnBhcmVudE5vZGUpIHtcbiAgICAgIGZvciAoY29uc3QgYXR0ciBpbiBjbGlja0hhbmRsZXJzKSB7XG4gICAgICAgIGNvbnN0IHRlbXBsYXRlID0gZWwuZ2V0QXR0cmlidXRlKGF0dHIpO1xuICAgICAgICBpZiAodGVtcGxhdGUpIHtcbiAgICAgICAgICBjbGlja0hhbmRsZXJzW2F0dHJdLmZpcmUoe1xuICAgICAgICAgICAgdGVtcGxhdGVcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgdmFyIHN0YXRpY01ldGhvZHMgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIGFyZ3NUb1BhcmFtczogYXJnc1RvUGFyYW1zLFxuICAgIGJpbmRDbGlja0hhbmRsZXI6IGJpbmRDbGlja0hhbmRsZXIsXG4gICAgY2xpY2tDYW5jZWw6IGNsaWNrQ2FuY2VsLFxuICAgIGNsaWNrQ29uZmlybTogY2xpY2tDb25maXJtLFxuICAgIGNsaWNrRGVueTogY2xpY2tEZW55LFxuICAgIGVuYWJsZUxvYWRpbmc6IHNob3dMb2FkaW5nLFxuICAgIGZpcmU6IGZpcmUsXG4gICAgZ2V0QWN0aW9uczogZ2V0QWN0aW9ucyxcbiAgICBnZXRDYW5jZWxCdXR0b246IGdldENhbmNlbEJ1dHRvbixcbiAgICBnZXRDbG9zZUJ1dHRvbjogZ2V0Q2xvc2VCdXR0b24sXG4gICAgZ2V0Q29uZmlybUJ1dHRvbjogZ2V0Q29uZmlybUJ1dHRvbixcbiAgICBnZXRDb250YWluZXI6IGdldENvbnRhaW5lcixcbiAgICBnZXREZW55QnV0dG9uOiBnZXREZW55QnV0dG9uLFxuICAgIGdldEZvY3VzYWJsZUVsZW1lbnRzOiBnZXRGb2N1c2FibGVFbGVtZW50cyxcbiAgICBnZXRGb290ZXI6IGdldEZvb3RlcixcbiAgICBnZXRIdG1sQ29udGFpbmVyOiBnZXRIdG1sQ29udGFpbmVyLFxuICAgIGdldEljb246IGdldEljb24sXG4gICAgZ2V0SWNvbkNvbnRlbnQ6IGdldEljb25Db250ZW50LFxuICAgIGdldEltYWdlOiBnZXRJbWFnZSxcbiAgICBnZXRJbnB1dExhYmVsOiBnZXRJbnB1dExhYmVsLFxuICAgIGdldExvYWRlcjogZ2V0TG9hZGVyLFxuICAgIGdldFBvcHVwOiBnZXRQb3B1cCxcbiAgICBnZXRQcm9ncmVzc1N0ZXBzOiBnZXRQcm9ncmVzc1N0ZXBzLFxuICAgIGdldFRpbWVyTGVmdDogZ2V0VGltZXJMZWZ0LFxuICAgIGdldFRpbWVyUHJvZ3Jlc3NCYXI6IGdldFRpbWVyUHJvZ3Jlc3NCYXIsXG4gICAgZ2V0VGl0bGU6IGdldFRpdGxlLFxuICAgIGdldFZhbGlkYXRpb25NZXNzYWdlOiBnZXRWYWxpZGF0aW9uTWVzc2FnZSxcbiAgICBpbmNyZWFzZVRpbWVyOiBpbmNyZWFzZVRpbWVyLFxuICAgIGlzRGVwcmVjYXRlZFBhcmFtZXRlcjogaXNEZXByZWNhdGVkUGFyYW1ldGVyLFxuICAgIGlzTG9hZGluZzogaXNMb2FkaW5nLFxuICAgIGlzVGltZXJSdW5uaW5nOiBpc1RpbWVyUnVubmluZyxcbiAgICBpc1VwZGF0YWJsZVBhcmFtZXRlcjogaXNVcGRhdGFibGVQYXJhbWV0ZXIsXG4gICAgaXNWYWxpZFBhcmFtZXRlcjogaXNWYWxpZFBhcmFtZXRlcixcbiAgICBpc1Zpc2libGU6IGlzVmlzaWJsZSxcbiAgICBtaXhpbjogbWl4aW4sXG4gICAgcmVzdW1lVGltZXI6IHJlc3VtZVRpbWVyLFxuICAgIHNob3dMb2FkaW5nOiBzaG93TG9hZGluZyxcbiAgICBzdG9wVGltZXI6IHN0b3BUaW1lcixcbiAgICB0b2dnbGVUaW1lcjogdG9nZ2xlVGltZXJcbiAgfSk7XG5cbiAgY2xhc3MgVGltZXIge1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGRlbGF5XG4gICAgICovXG4gICAgY29uc3RydWN0b3IoY2FsbGJhY2ssIGRlbGF5KSB7XG4gICAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgICB0aGlzLnJlbWFpbmluZyA9IGRlbGF5O1xuICAgICAgdGhpcy5ydW5uaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLnN0YXJ0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybnMge251bWJlcn1cbiAgICAgKi9cbiAgICBzdGFydCgpIHtcbiAgICAgIGlmICghdGhpcy5ydW5uaW5nKSB7XG4gICAgICAgIHRoaXMucnVubmluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuc3RhcnRlZCA9IG5ldyBEYXRlKCk7XG4gICAgICAgIHRoaXMuaWQgPSBzZXRUaW1lb3V0KHRoaXMuY2FsbGJhY2ssIHRoaXMucmVtYWluaW5nKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLnJlbWFpbmluZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgICAqL1xuICAgIHN0b3AoKSB7XG4gICAgICBpZiAodGhpcy5zdGFydGVkICYmIHRoaXMucnVubmluZykge1xuICAgICAgICB0aGlzLnJ1bm5pbmcgPSBmYWxzZTtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuaWQpO1xuICAgICAgICB0aGlzLnJlbWFpbmluZyAtPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSAtIHRoaXMuc3RhcnRlZC5nZXRUaW1lKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5yZW1haW5pbmc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgICAqL1xuICAgIGluY3JlYXNlKG4pIHtcbiAgICAgIGNvbnN0IHJ1bm5pbmcgPSB0aGlzLnJ1bm5pbmc7XG4gICAgICBpZiAocnVubmluZykge1xuICAgICAgICB0aGlzLnN0b3AoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucmVtYWluaW5nICs9IG47XG4gICAgICBpZiAocnVubmluZykge1xuICAgICAgICB0aGlzLnN0YXJ0KCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5yZW1haW5pbmc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybnMge251bWJlcn1cbiAgICAgKi9cbiAgICBnZXRUaW1lckxlZnQoKSB7XG4gICAgICBpZiAodGhpcy5ydW5uaW5nKSB7XG4gICAgICAgIHRoaXMuc3RvcCgpO1xuICAgICAgICB0aGlzLnN0YXJ0KCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5yZW1haW5pbmc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICovXG4gICAgaXNSdW5uaW5nKCkge1xuICAgICAgcmV0dXJuIHRoaXMucnVubmluZztcbiAgICB9XG4gIH1cblxuICBjb25zdCBzd2FsU3RyaW5nUGFyYW1zID0gWydzd2FsLXRpdGxlJywgJ3N3YWwtaHRtbCcsICdzd2FsLWZvb3RlciddO1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1N3ZWV0QWxlcnRPcHRpb25zfSBwYXJhbXNcbiAgICogQHJldHVybnMge1N3ZWV0QWxlcnRPcHRpb25zfVxuICAgKi9cbiAgY29uc3QgZ2V0VGVtcGxhdGVQYXJhbXMgPSBwYXJhbXMgPT4ge1xuICAgIC8qKiBAdHlwZSB7SFRNTFRlbXBsYXRlRWxlbWVudH0gKi9cbiAgICBjb25zdCB0ZW1wbGF0ZSA9IHR5cGVvZiBwYXJhbXMudGVtcGxhdGUgPT09ICdzdHJpbmcnID8gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihwYXJhbXMudGVtcGxhdGUpIDogcGFyYW1zLnRlbXBsYXRlO1xuICAgIGlmICghdGVtcGxhdGUpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgLyoqIEB0eXBlIHtEb2N1bWVudEZyYWdtZW50fSAqL1xuICAgIGNvbnN0IHRlbXBsYXRlQ29udGVudCA9IHRlbXBsYXRlLmNvbnRlbnQ7XG4gICAgc2hvd1dhcm5pbmdzRm9yRWxlbWVudHModGVtcGxhdGVDb250ZW50KTtcbiAgICBjb25zdCByZXN1bHQgPSBPYmplY3QuYXNzaWduKGdldFN3YWxQYXJhbXModGVtcGxhdGVDb250ZW50KSwgZ2V0U3dhbEZ1bmN0aW9uUGFyYW1zKHRlbXBsYXRlQ29udGVudCksIGdldFN3YWxCdXR0b25zKHRlbXBsYXRlQ29udGVudCksIGdldFN3YWxJbWFnZSh0ZW1wbGF0ZUNvbnRlbnQpLCBnZXRTd2FsSWNvbih0ZW1wbGF0ZUNvbnRlbnQpLCBnZXRTd2FsSW5wdXQodGVtcGxhdGVDb250ZW50KSwgZ2V0U3dhbFN0cmluZ1BhcmFtcyh0ZW1wbGF0ZUNvbnRlbnQsIHN3YWxTdHJpbmdQYXJhbXMpKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0RvY3VtZW50RnJhZ21lbnR9IHRlbXBsYXRlQ29udGVudFxuICAgKiBAcmV0dXJucyB7U3dlZXRBbGVydE9wdGlvbnN9XG4gICAqL1xuICBjb25zdCBnZXRTd2FsUGFyYW1zID0gdGVtcGxhdGVDb250ZW50ID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICAvKiogQHR5cGUge0hUTUxFbGVtZW50W119ICovXG4gICAgY29uc3Qgc3dhbFBhcmFtcyA9IEFycmF5LmZyb20odGVtcGxhdGVDb250ZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ3N3YWwtcGFyYW0nKSk7XG4gICAgc3dhbFBhcmFtcy5mb3JFYWNoKHBhcmFtID0+IHtcbiAgICAgIHNob3dXYXJuaW5nc0ZvckF0dHJpYnV0ZXMocGFyYW0sIFsnbmFtZScsICd2YWx1ZSddKTtcbiAgICAgIGNvbnN0IHBhcmFtTmFtZSA9IHBhcmFtLmdldEF0dHJpYnV0ZSgnbmFtZScpO1xuICAgICAgY29uc3QgdmFsdWUgPSBwYXJhbS5nZXRBdHRyaWJ1dGUoJ3ZhbHVlJyk7XG4gICAgICBpZiAodHlwZW9mIGRlZmF1bHRQYXJhbXNbcGFyYW1OYW1lXSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHJlc3VsdFtwYXJhbU5hbWVdID0gdmFsdWUgIT09ICdmYWxzZSc7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBkZWZhdWx0UGFyYW1zW3BhcmFtTmFtZV0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJlc3VsdFtwYXJhbU5hbWVdID0gSlNPTi5wYXJzZSh2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHRbcGFyYW1OYW1lXSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RG9jdW1lbnRGcmFnbWVudH0gdGVtcGxhdGVDb250ZW50XG4gICAqIEByZXR1cm5zIHtTd2VldEFsZXJ0T3B0aW9uc31cbiAgICovXG4gIGNvbnN0IGdldFN3YWxGdW5jdGlvblBhcmFtcyA9IHRlbXBsYXRlQ29udGVudCA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgLyoqIEB0eXBlIHtIVE1MRWxlbWVudFtdfSAqL1xuICAgIGNvbnN0IHN3YWxGdW5jdGlvbnMgPSBBcnJheS5mcm9tKHRlbXBsYXRlQ29udGVudC5xdWVyeVNlbGVjdG9yQWxsKCdzd2FsLWZ1bmN0aW9uLXBhcmFtJykpO1xuICAgIHN3YWxGdW5jdGlvbnMuZm9yRWFjaChwYXJhbSA9PiB7XG4gICAgICBjb25zdCBwYXJhbU5hbWUgPSBwYXJhbS5nZXRBdHRyaWJ1dGUoJ25hbWUnKTtcbiAgICAgIGNvbnN0IHZhbHVlID0gcGFyYW0uZ2V0QXR0cmlidXRlKCd2YWx1ZScpO1xuICAgICAgcmVzdWx0W3BhcmFtTmFtZV0gPSBuZXcgRnVuY3Rpb24oXCJyZXR1cm4gXCIuY29uY2F0KHZhbHVlKSkoKTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0RvY3VtZW50RnJhZ21lbnR9IHRlbXBsYXRlQ29udGVudFxuICAgKiBAcmV0dXJucyB7U3dlZXRBbGVydE9wdGlvbnN9XG4gICAqL1xuICBjb25zdCBnZXRTd2FsQnV0dG9ucyA9IHRlbXBsYXRlQ29udGVudCA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgLyoqIEB0eXBlIHtIVE1MRWxlbWVudFtdfSAqL1xuICAgIGNvbnN0IHN3YWxCdXR0b25zID0gQXJyYXkuZnJvbSh0ZW1wbGF0ZUNvbnRlbnQucXVlcnlTZWxlY3RvckFsbCgnc3dhbC1idXR0b24nKSk7XG4gICAgc3dhbEJ1dHRvbnMuZm9yRWFjaChidXR0b24gPT4ge1xuICAgICAgc2hvd1dhcm5pbmdzRm9yQXR0cmlidXRlcyhidXR0b24sIFsndHlwZScsICdjb2xvcicsICdhcmlhLWxhYmVsJ10pO1xuICAgICAgY29uc3QgdHlwZSA9IGJ1dHRvbi5nZXRBdHRyaWJ1dGUoJ3R5cGUnKTtcbiAgICAgIHJlc3VsdFtcIlwiLmNvbmNhdCh0eXBlLCBcIkJ1dHRvblRleHRcIildID0gYnV0dG9uLmlubmVySFRNTDtcbiAgICAgIHJlc3VsdFtcInNob3dcIi5jb25jYXQoY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKHR5cGUpLCBcIkJ1dHRvblwiKV0gPSB0cnVlO1xuICAgICAgaWYgKGJ1dHRvbi5oYXNBdHRyaWJ1dGUoJ2NvbG9yJykpIHtcbiAgICAgICAgcmVzdWx0W1wiXCIuY29uY2F0KHR5cGUsIFwiQnV0dG9uQ29sb3JcIildID0gYnV0dG9uLmdldEF0dHJpYnV0ZSgnY29sb3InKTtcbiAgICAgIH1cbiAgICAgIGlmIChidXR0b24uaGFzQXR0cmlidXRlKCdhcmlhLWxhYmVsJykpIHtcbiAgICAgICAgcmVzdWx0W1wiXCIuY29uY2F0KHR5cGUsIFwiQnV0dG9uQXJpYUxhYmVsXCIpXSA9IGJ1dHRvbi5nZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0RvY3VtZW50RnJhZ21lbnR9IHRlbXBsYXRlQ29udGVudFxuICAgKiBAcmV0dXJucyB7U3dlZXRBbGVydE9wdGlvbnN9XG4gICAqL1xuICBjb25zdCBnZXRTd2FsSW1hZ2UgPSB0ZW1wbGF0ZUNvbnRlbnQgPT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgIC8qKiBAdHlwZSB7SFRNTEVsZW1lbnR9ICovXG4gICAgY29uc3QgaW1hZ2UgPSB0ZW1wbGF0ZUNvbnRlbnQucXVlcnlTZWxlY3Rvcignc3dhbC1pbWFnZScpO1xuICAgIGlmIChpbWFnZSkge1xuICAgICAgc2hvd1dhcm5pbmdzRm9yQXR0cmlidXRlcyhpbWFnZSwgWydzcmMnLCAnd2lkdGgnLCAnaGVpZ2h0JywgJ2FsdCddKTtcbiAgICAgIGlmIChpbWFnZS5oYXNBdHRyaWJ1dGUoJ3NyYycpKSB7XG4gICAgICAgIHJlc3VsdC5pbWFnZVVybCA9IGltYWdlLmdldEF0dHJpYnV0ZSgnc3JjJyk7XG4gICAgICB9XG4gICAgICBpZiAoaW1hZ2UuaGFzQXR0cmlidXRlKCd3aWR0aCcpKSB7XG4gICAgICAgIHJlc3VsdC5pbWFnZVdpZHRoID0gaW1hZ2UuZ2V0QXR0cmlidXRlKCd3aWR0aCcpO1xuICAgICAgfVxuICAgICAgaWYgKGltYWdlLmhhc0F0dHJpYnV0ZSgnaGVpZ2h0JykpIHtcbiAgICAgICAgcmVzdWx0LmltYWdlSGVpZ2h0ID0gaW1hZ2UuZ2V0QXR0cmlidXRlKCdoZWlnaHQnKTtcbiAgICAgIH1cbiAgICAgIGlmIChpbWFnZS5oYXNBdHRyaWJ1dGUoJ2FsdCcpKSB7XG4gICAgICAgIHJlc3VsdC5pbWFnZUFsdCA9IGltYWdlLmdldEF0dHJpYnV0ZSgnYWx0Jyk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RG9jdW1lbnRGcmFnbWVudH0gdGVtcGxhdGVDb250ZW50XG4gICAqIEByZXR1cm5zIHtTd2VldEFsZXJ0T3B0aW9uc31cbiAgICovXG4gIGNvbnN0IGdldFN3YWxJY29uID0gdGVtcGxhdGVDb250ZW50ID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICAvKiogQHR5cGUge0hUTUxFbGVtZW50fSAqL1xuICAgIGNvbnN0IGljb24gPSB0ZW1wbGF0ZUNvbnRlbnQucXVlcnlTZWxlY3Rvcignc3dhbC1pY29uJyk7XG4gICAgaWYgKGljb24pIHtcbiAgICAgIHNob3dXYXJuaW5nc0ZvckF0dHJpYnV0ZXMoaWNvbiwgWyd0eXBlJywgJ2NvbG9yJ10pO1xuICAgICAgaWYgKGljb24uaGFzQXR0cmlidXRlKCd0eXBlJykpIHtcbiAgICAgICAgLyoqIEB0eXBlIHtTd2VldEFsZXJ0SWNvbn0gKi9cbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICByZXN1bHQuaWNvbiA9IGljb24uZ2V0QXR0cmlidXRlKCd0eXBlJyk7XG4gICAgICB9XG4gICAgICBpZiAoaWNvbi5oYXNBdHRyaWJ1dGUoJ2NvbG9yJykpIHtcbiAgICAgICAgcmVzdWx0Lmljb25Db2xvciA9IGljb24uZ2V0QXR0cmlidXRlKCdjb2xvcicpO1xuICAgICAgfVxuICAgICAgcmVzdWx0Lmljb25IdG1sID0gaWNvbi5pbm5lckhUTUw7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RG9jdW1lbnRGcmFnbWVudH0gdGVtcGxhdGVDb250ZW50XG4gICAqIEByZXR1cm5zIHtTd2VldEFsZXJ0T3B0aW9uc31cbiAgICovXG4gIGNvbnN0IGdldFN3YWxJbnB1dCA9IHRlbXBsYXRlQ29udGVudCA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgLyoqIEB0eXBlIHtIVE1MRWxlbWVudH0gKi9cbiAgICBjb25zdCBpbnB1dCA9IHRlbXBsYXRlQ29udGVudC5xdWVyeVNlbGVjdG9yKCdzd2FsLWlucHV0Jyk7XG4gICAgaWYgKGlucHV0KSB7XG4gICAgICBzaG93V2FybmluZ3NGb3JBdHRyaWJ1dGVzKGlucHV0LCBbJ3R5cGUnLCAnbGFiZWwnLCAncGxhY2Vob2xkZXInLCAndmFsdWUnXSk7XG4gICAgICAvKiogQHR5cGUge1N3ZWV0QWxlcnRJbnB1dH0gKi9cbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHJlc3VsdC5pbnB1dCA9IGlucHV0LmdldEF0dHJpYnV0ZSgndHlwZScpIHx8ICd0ZXh0JztcbiAgICAgIGlmIChpbnB1dC5oYXNBdHRyaWJ1dGUoJ2xhYmVsJykpIHtcbiAgICAgICAgcmVzdWx0LmlucHV0TGFiZWwgPSBpbnB1dC5nZXRBdHRyaWJ1dGUoJ2xhYmVsJyk7XG4gICAgICB9XG4gICAgICBpZiAoaW5wdXQuaGFzQXR0cmlidXRlKCdwbGFjZWhvbGRlcicpKSB7XG4gICAgICAgIHJlc3VsdC5pbnB1dFBsYWNlaG9sZGVyID0gaW5wdXQuZ2V0QXR0cmlidXRlKCdwbGFjZWhvbGRlcicpO1xuICAgICAgfVxuICAgICAgaWYgKGlucHV0Lmhhc0F0dHJpYnV0ZSgndmFsdWUnKSkge1xuICAgICAgICByZXN1bHQuaW5wdXRWYWx1ZSA9IGlucHV0LmdldEF0dHJpYnV0ZSgndmFsdWUnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLyoqIEB0eXBlIHtIVE1MRWxlbWVudFtdfSAqL1xuICAgIGNvbnN0IGlucHV0T3B0aW9ucyA9IEFycmF5LmZyb20odGVtcGxhdGVDb250ZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ3N3YWwtaW5wdXQtb3B0aW9uJykpO1xuICAgIGlmIChpbnB1dE9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICByZXN1bHQuaW5wdXRPcHRpb25zID0ge307XG4gICAgICBpbnB1dE9wdGlvbnMuZm9yRWFjaChvcHRpb24gPT4ge1xuICAgICAgICBzaG93V2FybmluZ3NGb3JBdHRyaWJ1dGVzKG9wdGlvbiwgWyd2YWx1ZSddKTtcbiAgICAgICAgY29uc3Qgb3B0aW9uVmFsdWUgPSBvcHRpb24uZ2V0QXR0cmlidXRlKCd2YWx1ZScpO1xuICAgICAgICBjb25zdCBvcHRpb25OYW1lID0gb3B0aW9uLmlubmVySFRNTDtcbiAgICAgICAgcmVzdWx0LmlucHV0T3B0aW9uc1tvcHRpb25WYWx1ZV0gPSBvcHRpb25OYW1lO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RG9jdW1lbnRGcmFnbWVudH0gdGVtcGxhdGVDb250ZW50XG4gICAqIEBwYXJhbSB7c3RyaW5nW119IHBhcmFtTmFtZXNcbiAgICogQHJldHVybnMge1N3ZWV0QWxlcnRPcHRpb25zfVxuICAgKi9cbiAgY29uc3QgZ2V0U3dhbFN0cmluZ1BhcmFtcyA9ICh0ZW1wbGF0ZUNvbnRlbnQsIHBhcmFtTmFtZXMpID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICBmb3IgKGNvbnN0IGkgaW4gcGFyYW1OYW1lcykge1xuICAgICAgY29uc3QgcGFyYW1OYW1lID0gcGFyYW1OYW1lc1tpXTtcbiAgICAgIC8qKiBAdHlwZSB7SFRNTEVsZW1lbnR9ICovXG4gICAgICBjb25zdCB0YWcgPSB0ZW1wbGF0ZUNvbnRlbnQucXVlcnlTZWxlY3RvcihwYXJhbU5hbWUpO1xuICAgICAgaWYgKHRhZykge1xuICAgICAgICBzaG93V2FybmluZ3NGb3JBdHRyaWJ1dGVzKHRhZywgW10pO1xuICAgICAgICByZXN1bHRbcGFyYW1OYW1lLnJlcGxhY2UoL15zd2FsLS8sICcnKV0gPSB0YWcuaW5uZXJIVE1MLnRyaW0oKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvKipcbiAgICogQHBhcmFtIHtEb2N1bWVudEZyYWdtZW50fSB0ZW1wbGF0ZUNvbnRlbnRcbiAgICovXG4gIGNvbnN0IHNob3dXYXJuaW5nc0ZvckVsZW1lbnRzID0gdGVtcGxhdGVDb250ZW50ID0+IHtcbiAgICBjb25zdCBhbGxvd2VkRWxlbWVudHMgPSBzd2FsU3RyaW5nUGFyYW1zLmNvbmNhdChbJ3N3YWwtcGFyYW0nLCAnc3dhbC1mdW5jdGlvbi1wYXJhbScsICdzd2FsLWJ1dHRvbicsICdzd2FsLWltYWdlJywgJ3N3YWwtaWNvbicsICdzd2FsLWlucHV0JywgJ3N3YWwtaW5wdXQtb3B0aW9uJ10pO1xuICAgIEFycmF5LmZyb20odGVtcGxhdGVDb250ZW50LmNoaWxkcmVuKS5mb3JFYWNoKGVsID0+IHtcbiAgICAgIGNvbnN0IHRhZ05hbWUgPSBlbC50YWdOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAoIWFsbG93ZWRFbGVtZW50cy5pbmNsdWRlcyh0YWdOYW1lKSkge1xuICAgICAgICB3YXJuKFwiVW5yZWNvZ25pemVkIGVsZW1lbnQgPFwiLmNvbmNhdCh0YWdOYW1lLCBcIj5cIikpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbFxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBhbGxvd2VkQXR0cmlidXRlc1xuICAgKi9cbiAgY29uc3Qgc2hvd1dhcm5pbmdzRm9yQXR0cmlidXRlcyA9IChlbCwgYWxsb3dlZEF0dHJpYnV0ZXMpID0+IHtcbiAgICBBcnJheS5mcm9tKGVsLmF0dHJpYnV0ZXMpLmZvckVhY2goYXR0cmlidXRlID0+IHtcbiAgICAgIGlmIChhbGxvd2VkQXR0cmlidXRlcy5pbmRleE9mKGF0dHJpYnV0ZS5uYW1lKSA9PT0gLTEpIHtcbiAgICAgICAgd2FybihbXCJVbnJlY29nbml6ZWQgYXR0cmlidXRlIFxcXCJcIi5jb25jYXQoYXR0cmlidXRlLm5hbWUsIFwiXFxcIiBvbiA8XCIpLmNvbmNhdChlbC50YWdOYW1lLnRvTG93ZXJDYXNlKCksIFwiPi5cIiksIFwiXCIuY29uY2F0KGFsbG93ZWRBdHRyaWJ1dGVzLmxlbmd0aCA/IFwiQWxsb3dlZCBhdHRyaWJ1dGVzIGFyZTogXCIuY29uY2F0KGFsbG93ZWRBdHRyaWJ1dGVzLmpvaW4oJywgJykpIDogJ1RvIHNldCB0aGUgdmFsdWUsIHVzZSBIVE1MIHdpdGhpbiB0aGUgZWxlbWVudC4nKV0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIGNvbnN0IFNIT1dfQ0xBU1NfVElNRU9VVCA9IDEwO1xuXG4gIC8qKlxuICAgKiBPcGVuIHBvcHVwLCBhZGQgbmVjZXNzYXJ5IGNsYXNzZXMgYW5kIHN0eWxlcywgZml4IHNjcm9sbGJhclxuICAgKlxuICAgKiBAcGFyYW0ge1N3ZWV0QWxlcnRPcHRpb25zfSBwYXJhbXNcbiAgICovXG4gIGNvbnN0IG9wZW5Qb3B1cCA9IHBhcmFtcyA9PiB7XG4gICAgY29uc3QgY29udGFpbmVyID0gZ2V0Q29udGFpbmVyKCk7XG4gICAgY29uc3QgcG9wdXAgPSBnZXRQb3B1cCgpO1xuICAgIGlmICh0eXBlb2YgcGFyYW1zLndpbGxPcGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBwYXJhbXMud2lsbE9wZW4ocG9wdXApO1xuICAgIH1cbiAgICBjb25zdCBib2R5U3R5bGVzID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSk7XG4gICAgY29uc3QgaW5pdGlhbEJvZHlPdmVyZmxvdyA9IGJvZHlTdHlsZXMub3ZlcmZsb3dZO1xuICAgIGFkZENsYXNzZXMoY29udGFpbmVyLCBwb3B1cCwgcGFyYW1zKTtcblxuICAgIC8vIHNjcm9sbGluZyBpcyAnaGlkZGVuJyB1bnRpbCBhbmltYXRpb24gaXMgZG9uZSwgYWZ0ZXIgdGhhdCAnYXV0bydcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHNldFNjcm9sbGluZ1Zpc2liaWxpdHkoY29udGFpbmVyLCBwb3B1cCk7XG4gICAgfSwgU0hPV19DTEFTU19USU1FT1VUKTtcbiAgICBpZiAoaXNNb2RhbCgpKSB7XG4gICAgICBmaXhTY3JvbGxDb250YWluZXIoY29udGFpbmVyLCBwYXJhbXMuc2Nyb2xsYmFyUGFkZGluZywgaW5pdGlhbEJvZHlPdmVyZmxvdyk7XG4gICAgICBzZXRBcmlhSGlkZGVuKCk7XG4gICAgfVxuICAgIGlmICghaXNUb2FzdCgpICYmICFnbG9iYWxTdGF0ZS5wcmV2aW91c0FjdGl2ZUVsZW1lbnQpIHtcbiAgICAgIGdsb2JhbFN0YXRlLnByZXZpb3VzQWN0aXZlRWxlbWVudCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgcGFyYW1zLmRpZE9wZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gcGFyYW1zLmRpZE9wZW4ocG9wdXApKTtcbiAgICB9XG4gICAgcmVtb3ZlQ2xhc3MoY29udGFpbmVyLCBzd2FsQ2xhc3Nlc1snbm8tdHJhbnNpdGlvbiddKTtcbiAgfTtcblxuICAvKipcbiAgICogQHBhcmFtIHtBbmltYXRpb25FdmVudH0gZXZlbnRcbiAgICovXG4gIGNvbnN0IHN3YWxPcGVuQW5pbWF0aW9uRmluaXNoZWQgPSBldmVudCA9PiB7XG4gICAgY29uc3QgcG9wdXAgPSBnZXRQb3B1cCgpO1xuICAgIGlmIChldmVudC50YXJnZXQgIT09IHBvcHVwIHx8ICFhbmltYXRpb25FbmRFdmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjb250YWluZXIgPSBnZXRDb250YWluZXIoKTtcbiAgICBwb3B1cC5yZW1vdmVFdmVudExpc3RlbmVyKGFuaW1hdGlvbkVuZEV2ZW50LCBzd2FsT3BlbkFuaW1hdGlvbkZpbmlzaGVkKTtcbiAgICBjb250YWluZXIuc3R5bGUub3ZlcmZsb3dZID0gJ2F1dG8nO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBjb250YWluZXJcbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcG9wdXBcbiAgICovXG4gIGNvbnN0IHNldFNjcm9sbGluZ1Zpc2liaWxpdHkgPSAoY29udGFpbmVyLCBwb3B1cCkgPT4ge1xuICAgIGlmIChhbmltYXRpb25FbmRFdmVudCAmJiBoYXNDc3NBbmltYXRpb24ocG9wdXApKSB7XG4gICAgICBjb250YWluZXIuc3R5bGUub3ZlcmZsb3dZID0gJ2hpZGRlbic7XG4gICAgICBwb3B1cC5hZGRFdmVudExpc3RlbmVyKGFuaW1hdGlvbkVuZEV2ZW50LCBzd2FsT3BlbkFuaW1hdGlvbkZpbmlzaGVkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29udGFpbmVyLnN0eWxlLm92ZXJmbG93WSA9ICdhdXRvJztcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGNvbnRhaW5lclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNjcm9sbGJhclBhZGRpbmdcbiAgICogQHBhcmFtIHtzdHJpbmd9IGluaXRpYWxCb2R5T3ZlcmZsb3dcbiAgICovXG4gIGNvbnN0IGZpeFNjcm9sbENvbnRhaW5lciA9IChjb250YWluZXIsIHNjcm9sbGJhclBhZGRpbmcsIGluaXRpYWxCb2R5T3ZlcmZsb3cpID0+IHtcbiAgICBpT1NmaXgoKTtcbiAgICBpZiAoc2Nyb2xsYmFyUGFkZGluZyAmJiBpbml0aWFsQm9keU92ZXJmbG93ICE9PSAnaGlkZGVuJykge1xuICAgICAgcmVwbGFjZVNjcm9sbGJhcldpdGhQYWRkaW5nKGluaXRpYWxCb2R5T3ZlcmZsb3cpO1xuICAgIH1cblxuICAgIC8vIHN3ZWV0YWxlcnQyL2lzc3Vlcy8xMjQ3XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb250YWluZXIuc2Nyb2xsVG9wID0gMDtcbiAgICB9KTtcbiAgfTtcblxuICAvKipcbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gY29udGFpbmVyXG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHBvcHVwXG4gICAqIEBwYXJhbSB7U3dlZXRBbGVydE9wdGlvbnN9IHBhcmFtc1xuICAgKi9cbiAgY29uc3QgYWRkQ2xhc3NlcyA9IChjb250YWluZXIsIHBvcHVwLCBwYXJhbXMpID0+IHtcbiAgICBhZGRDbGFzcyhjb250YWluZXIsIHBhcmFtcy5zaG93Q2xhc3MuYmFja2Ryb3ApO1xuICAgIC8vIHRoaXMgd29ya2Fyb3VuZCB3aXRoIG9wYWNpdHkgaXMgbmVlZGVkIGZvciBodHRwczovL2dpdGh1Yi5jb20vc3dlZXRhbGVydDIvc3dlZXRhbGVydDIvaXNzdWVzLzIwNTlcbiAgICBwb3B1cC5zdHlsZS5zZXRQcm9wZXJ0eSgnb3BhY2l0eScsICcwJywgJ2ltcG9ydGFudCcpO1xuICAgIHNob3cocG9wdXAsICdncmlkJyk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAvLyBBbmltYXRlIHBvcHVwIHJpZ2h0IGFmdGVyIHNob3dpbmcgaXRcbiAgICAgIGFkZENsYXNzKHBvcHVwLCBwYXJhbXMuc2hvd0NsYXNzLnBvcHVwKTtcbiAgICAgIC8vIGFuZCByZW1vdmUgdGhlIG9wYWNpdHkgd29ya2Fyb3VuZFxuICAgICAgcG9wdXAuc3R5bGUucmVtb3ZlUHJvcGVydHkoJ29wYWNpdHknKTtcbiAgICB9LCBTSE9XX0NMQVNTX1RJTUVPVVQpOyAvLyAxMG1zIGluIG9yZGVyIHRvIGZpeCAjMjA2MlxuXG4gICAgYWRkQ2xhc3MoW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgZG9jdW1lbnQuYm9keV0sIHN3YWxDbGFzc2VzLnNob3duKTtcbiAgICBpZiAocGFyYW1zLmhlaWdodEF1dG8gJiYgcGFyYW1zLmJhY2tkcm9wICYmICFwYXJhbXMudG9hc3QpIHtcbiAgICAgIGFkZENsYXNzKFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIGRvY3VtZW50LmJvZHldLCBzd2FsQ2xhc3Nlc1snaGVpZ2h0LWF1dG8nXSk7XG4gICAgfVxuICB9O1xuXG4gIHZhciBkZWZhdWx0SW5wdXRWYWxpZGF0b3JzID0ge1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3ZhbGlkYXRpb25NZXNzYWdlXVxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZyB8IHZvaWQ+fVxuICAgICAqL1xuICAgIGVtYWlsOiAoc3RyaW5nLCB2YWxpZGF0aW9uTWVzc2FnZSkgPT4ge1xuICAgICAgcmV0dXJuIC9eW2EtekEtWjAtOS4rXy1dK0BbYS16QS1aMC05Li1dK1xcLlthLXpBLVowLTktXXsyLDI0fSQvLnRlc3Qoc3RyaW5nKSA/IFByb21pc2UucmVzb2x2ZSgpIDogUHJvbWlzZS5yZXNvbHZlKHZhbGlkYXRpb25NZXNzYWdlIHx8ICdJbnZhbGlkIGVtYWlsIGFkZHJlc3MnKTtcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3ZhbGlkYXRpb25NZXNzYWdlXVxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZyB8IHZvaWQ+fVxuICAgICAqL1xuICAgIHVybDogKHN0cmluZywgdmFsaWRhdGlvbk1lc3NhZ2UpID0+IHtcbiAgICAgIC8vIHRha2VuIGZyb20gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzM4MDk0MzUgd2l0aCBhIHNtYWxsIGNoYW5nZSBmcm9tICMxMzA2IGFuZCAjMjAxM1xuICAgICAgcmV0dXJuIC9eaHR0cHM/OlxcL1xcLyh3d3dcXC4pP1stYS16QS1aMC05QDolLl8rfiM9XXsxLDI1Nn1cXC5bYS16XXsyLDYzfVxcYihbLWEtekEtWjAtOUA6JV8rLn4jPyYvPV0qKSQvLnRlc3Qoc3RyaW5nKSA/IFByb21pc2UucmVzb2x2ZSgpIDogUHJvbWlzZS5yZXNvbHZlKHZhbGlkYXRpb25NZXNzYWdlIHx8ICdJbnZhbGlkIFVSTCcpO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogQHBhcmFtIHtTd2VldEFsZXJ0T3B0aW9uc30gcGFyYW1zXG4gICAqL1xuICBmdW5jdGlvbiBzZXREZWZhdWx0SW5wdXRWYWxpZGF0b3JzKHBhcmFtcykge1xuICAgIC8vIFVzZSBkZWZhdWx0IGBpbnB1dFZhbGlkYXRvcmAgZm9yIHN1cHBvcnRlZCBpbnB1dCB0eXBlcyBpZiBub3QgcHJvdmlkZWRcbiAgICBpZiAocGFyYW1zLmlucHV0VmFsaWRhdG9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChwYXJhbXMuaW5wdXQgPT09ICdlbWFpbCcpIHtcbiAgICAgIHBhcmFtcy5pbnB1dFZhbGlkYXRvciA9IGRlZmF1bHRJbnB1dFZhbGlkYXRvcnNbJ2VtYWlsJ107XG4gICAgfVxuICAgIGlmIChwYXJhbXMuaW5wdXQgPT09ICd1cmwnKSB7XG4gICAgICBwYXJhbXMuaW5wdXRWYWxpZGF0b3IgPSBkZWZhdWx0SW5wdXRWYWxpZGF0b3JzWyd1cmwnXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtTd2VldEFsZXJ0T3B0aW9uc30gcGFyYW1zXG4gICAqL1xuICBmdW5jdGlvbiB2YWxpZGF0ZUN1c3RvbVRhcmdldEVsZW1lbnQocGFyYW1zKSB7XG4gICAgLy8gRGV0ZXJtaW5lIGlmIHRoZSBjdXN0b20gdGFyZ2V0IGVsZW1lbnQgaXMgdmFsaWRcbiAgICBpZiAoIXBhcmFtcy50YXJnZXQgfHwgdHlwZW9mIHBhcmFtcy50YXJnZXQgPT09ICdzdHJpbmcnICYmICFkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHBhcmFtcy50YXJnZXQpIHx8IHR5cGVvZiBwYXJhbXMudGFyZ2V0ICE9PSAnc3RyaW5nJyAmJiAhcGFyYW1zLnRhcmdldC5hcHBlbmRDaGlsZCkge1xuICAgICAgd2FybignVGFyZ2V0IHBhcmFtZXRlciBpcyBub3QgdmFsaWQsIGRlZmF1bHRpbmcgdG8gXCJib2R5XCInKTtcbiAgICAgIHBhcmFtcy50YXJnZXQgPSAnYm9keSc7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0eXBlLCB0ZXh0IGFuZCBhY3Rpb25zIG9uIHBvcHVwXG4gICAqXG4gICAqIEBwYXJhbSB7U3dlZXRBbGVydE9wdGlvbnN9IHBhcmFtc1xuICAgKi9cbiAgZnVuY3Rpb24gc2V0UGFyYW1ldGVycyhwYXJhbXMpIHtcbiAgICBzZXREZWZhdWx0SW5wdXRWYWxpZGF0b3JzKHBhcmFtcyk7XG5cbiAgICAvLyBzaG93TG9hZGVyT25Db25maXJtICYmIHByZUNvbmZpcm1cbiAgICBpZiAocGFyYW1zLnNob3dMb2FkZXJPbkNvbmZpcm0gJiYgIXBhcmFtcy5wcmVDb25maXJtKSB7XG4gICAgICB3YXJuKCdzaG93TG9hZGVyT25Db25maXJtIGlzIHNldCB0byB0cnVlLCBidXQgcHJlQ29uZmlybSBpcyBub3QgZGVmaW5lZC5cXG4nICsgJ3Nob3dMb2FkZXJPbkNvbmZpcm0gc2hvdWxkIGJlIHVzZWQgdG9nZXRoZXIgd2l0aCBwcmVDb25maXJtLCBzZWUgdXNhZ2UgZXhhbXBsZTpcXG4nICsgJ2h0dHBzOi8vc3dlZXRhbGVydDIuZ2l0aHViLmlvLyNhamF4LXJlcXVlc3QnKTtcbiAgICB9XG4gICAgdmFsaWRhdGVDdXN0b21UYXJnZXRFbGVtZW50KHBhcmFtcyk7XG5cbiAgICAvLyBSZXBsYWNlIG5ld2xpbmVzIHdpdGggPGJyPiBpbiB0aXRsZVxuICAgIGlmICh0eXBlb2YgcGFyYW1zLnRpdGxlID09PSAnc3RyaW5nJykge1xuICAgICAgcGFyYW1zLnRpdGxlID0gcGFyYW1zLnRpdGxlLnNwbGl0KCdcXG4nKS5qb2luKCc8YnIgLz4nKTtcbiAgICB9XG4gICAgaW5pdChwYXJhbXMpO1xuICB9XG5cbiAgLyoqIEB0eXBlIHtTd2VldEFsZXJ0fSAqL1xuICBsZXQgY3VycmVudEluc3RhbmNlO1xuICB2YXIgX3Byb21pc2UgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbiAgY2xhc3MgU3dlZXRBbGVydCB7XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHsuLi5hbnl9IGFyZ3NcbiAgICAgKiBAdGhpcyB7U3dlZXRBbGVydH1cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgIC8qKlxuICAgICAgICogQHR5cGUge1Byb21pc2U8U3dlZXRBbGVydFJlc3VsdD59XG4gICAgICAgKi9cbiAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9wcm9taXNlLCB7XG4gICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICB2YWx1ZTogdm9pZCAwXG4gICAgICB9KTtcbiAgICAgIC8vIFByZXZlbnQgcnVuIGluIE5vZGUgZW52XG4gICAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY3VycmVudEluc3RhbmNlID0gdGhpcztcblxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICB9XG4gICAgICBjb25zdCBvdXRlclBhcmFtcyA9IE9iamVjdC5mcmVlemUodGhpcy5jb25zdHJ1Y3Rvci5hcmdzVG9QYXJhbXMoYXJncykpO1xuXG4gICAgICAvKiogQHR5cGUge1JlYWRvbmx5PFN3ZWV0QWxlcnRPcHRpb25zPn0gKi9cbiAgICAgIHRoaXMucGFyYW1zID0gb3V0ZXJQYXJhbXM7XG5cbiAgICAgIC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi9cbiAgICAgIHRoaXMuaXNBd2FpdGluZ1Byb21pc2UgPSBmYWxzZTtcbiAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfcHJvbWlzZSwgdGhpcy5fbWFpbihjdXJyZW50SW5zdGFuY2UucGFyYW1zKSk7XG4gICAgfVxuICAgIF9tYWluKHVzZXJQYXJhbXMpIHtcbiAgICAgIGxldCBtaXhpblBhcmFtcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgICBzaG93V2FybmluZ3NGb3JQYXJhbXMoT2JqZWN0LmFzc2lnbih7fSwgbWl4aW5QYXJhbXMsIHVzZXJQYXJhbXMpKTtcbiAgICAgIGlmIChnbG9iYWxTdGF0ZS5jdXJyZW50SW5zdGFuY2UpIHtcbiAgICAgICAgZ2xvYmFsU3RhdGUuY3VycmVudEluc3RhbmNlLl9kZXN0cm95KCk7XG4gICAgICAgIGlmIChpc01vZGFsKCkpIHtcbiAgICAgICAgICB1bnNldEFyaWFIaWRkZW4oKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZ2xvYmFsU3RhdGUuY3VycmVudEluc3RhbmNlID0gY3VycmVudEluc3RhbmNlO1xuICAgICAgY29uc3QgaW5uZXJQYXJhbXMgPSBwcmVwYXJlUGFyYW1zKHVzZXJQYXJhbXMsIG1peGluUGFyYW1zKTtcbiAgICAgIHNldFBhcmFtZXRlcnMoaW5uZXJQYXJhbXMpO1xuICAgICAgT2JqZWN0LmZyZWV6ZShpbm5lclBhcmFtcyk7XG5cbiAgICAgIC8vIGNsZWFyIHRoZSBwcmV2aW91cyB0aW1lclxuICAgICAgaWYgKGdsb2JhbFN0YXRlLnRpbWVvdXQpIHtcbiAgICAgICAgZ2xvYmFsU3RhdGUudGltZW91dC5zdG9wKCk7XG4gICAgICAgIGRlbGV0ZSBnbG9iYWxTdGF0ZS50aW1lb3V0O1xuICAgICAgfVxuXG4gICAgICAvLyBjbGVhciB0aGUgcmVzdG9yZSBmb2N1cyB0aW1lb3V0XG4gICAgICBjbGVhclRpbWVvdXQoZ2xvYmFsU3RhdGUucmVzdG9yZUZvY3VzVGltZW91dCk7XG4gICAgICBjb25zdCBkb21DYWNoZSA9IHBvcHVsYXRlRG9tQ2FjaGUoY3VycmVudEluc3RhbmNlKTtcbiAgICAgIHJlbmRlcihjdXJyZW50SW5zdGFuY2UsIGlubmVyUGFyYW1zKTtcbiAgICAgIHByaXZhdGVQcm9wcy5pbm5lclBhcmFtcy5zZXQoY3VycmVudEluc3RhbmNlLCBpbm5lclBhcmFtcyk7XG4gICAgICByZXR1cm4gc3dhbFByb21pc2UoY3VycmVudEluc3RhbmNlLCBkb21DYWNoZSwgaW5uZXJQYXJhbXMpO1xuICAgIH1cblxuICAgIC8vIGBjYXRjaGAgY2Fubm90IGJlIHRoZSBuYW1lIG9mIGEgbW9kdWxlIGV4cG9ydCwgc28gd2UgZGVmaW5lIG91ciB0aGVuYWJsZSBtZXRob2RzIGhlcmUgaW5zdGVhZFxuICAgIHRoZW4ob25GdWxmaWxsZWQpIHtcbiAgICAgIHJldHVybiBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX3Byb21pc2UpLnRoZW4ob25GdWxmaWxsZWQpO1xuICAgIH1cbiAgICBmaW5hbGx5KG9uRmluYWxseSkge1xuICAgICAgcmV0dXJuIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfcHJvbWlzZSkuZmluYWxseShvbkZpbmFsbHkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1N3ZWV0QWxlcnR9IGluc3RhbmNlXG4gICAqIEBwYXJhbSB7RG9tQ2FjaGV9IGRvbUNhY2hlXG4gICAqIEBwYXJhbSB7U3dlZXRBbGVydE9wdGlvbnN9IGlubmVyUGFyYW1zXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfVxuICAgKi9cbiAgY29uc3Qgc3dhbFByb21pc2UgPSAoaW5zdGFuY2UsIGRvbUNhY2hlLCBpbm5lclBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAvLyBmdW5jdGlvbnMgdG8gaGFuZGxlIGFsbCBjbG9zaW5ncy9kaXNtaXNzYWxzXG4gICAgICAvKipcbiAgICAgICAqIEBwYXJhbSB7RGlzbWlzc1JlYXNvbn0gZGlzbWlzc1xuICAgICAgICovXG4gICAgICBjb25zdCBkaXNtaXNzV2l0aCA9IGRpc21pc3MgPT4ge1xuICAgICAgICBpbnN0YW5jZS5jbG9zZSh7XG4gICAgICAgICAgaXNEaXNtaXNzZWQ6IHRydWUsXG4gICAgICAgICAgZGlzbWlzc1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBwcml2YXRlTWV0aG9kcy5zd2FsUHJvbWlzZVJlc29sdmUuc2V0KGluc3RhbmNlLCByZXNvbHZlKTtcbiAgICAgIHByaXZhdGVNZXRob2RzLnN3YWxQcm9taXNlUmVqZWN0LnNldChpbnN0YW5jZSwgcmVqZWN0KTtcbiAgICAgIGRvbUNhY2hlLmNvbmZpcm1CdXR0b24ub25jbGljayA9ICgpID0+IHtcbiAgICAgICAgaGFuZGxlQ29uZmlybUJ1dHRvbkNsaWNrKGluc3RhbmNlKTtcbiAgICAgIH07XG4gICAgICBkb21DYWNoZS5kZW55QnV0dG9uLm9uY2xpY2sgPSAoKSA9PiB7XG4gICAgICAgIGhhbmRsZURlbnlCdXR0b25DbGljayhpbnN0YW5jZSk7XG4gICAgICB9O1xuICAgICAgZG9tQ2FjaGUuY2FuY2VsQnV0dG9uLm9uY2xpY2sgPSAoKSA9PiB7XG4gICAgICAgIGhhbmRsZUNhbmNlbEJ1dHRvbkNsaWNrKGluc3RhbmNlLCBkaXNtaXNzV2l0aCk7XG4gICAgICB9O1xuICAgICAgZG9tQ2FjaGUuY2xvc2VCdXR0b24ub25jbGljayA9ICgpID0+IHtcbiAgICAgICAgZGlzbWlzc1dpdGgoRGlzbWlzc1JlYXNvbi5jbG9zZSk7XG4gICAgICB9O1xuICAgICAgaGFuZGxlUG9wdXBDbGljayhpbm5lclBhcmFtcywgZG9tQ2FjaGUsIGRpc21pc3NXaXRoKTtcbiAgICAgIGFkZEtleWRvd25IYW5kbGVyKGdsb2JhbFN0YXRlLCBpbm5lclBhcmFtcywgZGlzbWlzc1dpdGgpO1xuICAgICAgaGFuZGxlSW5wdXRPcHRpb25zQW5kVmFsdWUoaW5zdGFuY2UsIGlubmVyUGFyYW1zKTtcbiAgICAgIG9wZW5Qb3B1cChpbm5lclBhcmFtcyk7XG4gICAgICBzZXR1cFRpbWVyKGdsb2JhbFN0YXRlLCBpbm5lclBhcmFtcywgZGlzbWlzc1dpdGgpO1xuICAgICAgaW5pdEZvY3VzKGRvbUNhY2hlLCBpbm5lclBhcmFtcyk7XG5cbiAgICAgIC8vIFNjcm9sbCBjb250YWluZXIgdG8gdG9wIG9uIG9wZW4gKCMxMjQ3LCAjMTk0NilcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBkb21DYWNoZS5jb250YWluZXIuc2Nyb2xsVG9wID0gMDtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1N3ZWV0QWxlcnRPcHRpb25zfSB1c2VyUGFyYW1zXG4gICAqIEBwYXJhbSB7U3dlZXRBbGVydE9wdGlvbnN9IG1peGluUGFyYW1zXG4gICAqIEByZXR1cm5zIHtTd2VldEFsZXJ0T3B0aW9uc31cbiAgICovXG4gIGNvbnN0IHByZXBhcmVQYXJhbXMgPSAodXNlclBhcmFtcywgbWl4aW5QYXJhbXMpID0+IHtcbiAgICBjb25zdCB0ZW1wbGF0ZVBhcmFtcyA9IGdldFRlbXBsYXRlUGFyYW1zKHVzZXJQYXJhbXMpO1xuICAgIGNvbnN0IHBhcmFtcyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRQYXJhbXMsIG1peGluUGFyYW1zLCB0ZW1wbGF0ZVBhcmFtcywgdXNlclBhcmFtcyk7IC8vIHByZWNlZGVuY2UgaXMgZGVzY3JpYmVkIGluICMyMTMxXG4gICAgcGFyYW1zLnNob3dDbGFzcyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRQYXJhbXMuc2hvd0NsYXNzLCBwYXJhbXMuc2hvd0NsYXNzKTtcbiAgICBwYXJhbXMuaGlkZUNsYXNzID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdFBhcmFtcy5oaWRlQ2xhc3MsIHBhcmFtcy5oaWRlQ2xhc3MpO1xuICAgIHJldHVybiBwYXJhbXM7XG4gIH07XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7U3dlZXRBbGVydH0gaW5zdGFuY2VcbiAgICogQHJldHVybnMge0RvbUNhY2hlfVxuICAgKi9cbiAgY29uc3QgcG9wdWxhdGVEb21DYWNoZSA9IGluc3RhbmNlID0+IHtcbiAgICBjb25zdCBkb21DYWNoZSA9IHtcbiAgICAgIHBvcHVwOiBnZXRQb3B1cCgpLFxuICAgICAgY29udGFpbmVyOiBnZXRDb250YWluZXIoKSxcbiAgICAgIGFjdGlvbnM6IGdldEFjdGlvbnMoKSxcbiAgICAgIGNvbmZpcm1CdXR0b246IGdldENvbmZpcm1CdXR0b24oKSxcbiAgICAgIGRlbnlCdXR0b246IGdldERlbnlCdXR0b24oKSxcbiAgICAgIGNhbmNlbEJ1dHRvbjogZ2V0Q2FuY2VsQnV0dG9uKCksXG4gICAgICBsb2FkZXI6IGdldExvYWRlcigpLFxuICAgICAgY2xvc2VCdXR0b246IGdldENsb3NlQnV0dG9uKCksXG4gICAgICB2YWxpZGF0aW9uTWVzc2FnZTogZ2V0VmFsaWRhdGlvbk1lc3NhZ2UoKSxcbiAgICAgIHByb2dyZXNzU3RlcHM6IGdldFByb2dyZXNzU3RlcHMoKVxuICAgIH07XG4gICAgcHJpdmF0ZVByb3BzLmRvbUNhY2hlLnNldChpbnN0YW5jZSwgZG9tQ2FjaGUpO1xuICAgIHJldHVybiBkb21DYWNoZTtcbiAgfTtcblxuICAvKipcbiAgICogQHBhcmFtIHtHbG9iYWxTdGF0ZX0gZ2xvYmFsU3RhdGVcbiAgICogQHBhcmFtIHtTd2VldEFsZXJ0T3B0aW9uc30gaW5uZXJQYXJhbXNcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZGlzbWlzc1dpdGhcbiAgICovXG4gIGNvbnN0IHNldHVwVGltZXIgPSAoZ2xvYmFsU3RhdGUsIGlubmVyUGFyYW1zLCBkaXNtaXNzV2l0aCkgPT4ge1xuICAgIGNvbnN0IHRpbWVyUHJvZ3Jlc3NCYXIgPSBnZXRUaW1lclByb2dyZXNzQmFyKCk7XG4gICAgaGlkZSh0aW1lclByb2dyZXNzQmFyKTtcbiAgICBpZiAoaW5uZXJQYXJhbXMudGltZXIpIHtcbiAgICAgIGdsb2JhbFN0YXRlLnRpbWVvdXQgPSBuZXcgVGltZXIoKCkgPT4ge1xuICAgICAgICBkaXNtaXNzV2l0aCgndGltZXInKTtcbiAgICAgICAgZGVsZXRlIGdsb2JhbFN0YXRlLnRpbWVvdXQ7XG4gICAgICB9LCBpbm5lclBhcmFtcy50aW1lcik7XG4gICAgICBpZiAoaW5uZXJQYXJhbXMudGltZXJQcm9ncmVzc0Jhcikge1xuICAgICAgICBzaG93KHRpbWVyUHJvZ3Jlc3NCYXIpO1xuICAgICAgICBhcHBseUN1c3RvbUNsYXNzKHRpbWVyUHJvZ3Jlc3NCYXIsIGlubmVyUGFyYW1zLCAndGltZXJQcm9ncmVzc0JhcicpO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBpZiAoZ2xvYmFsU3RhdGUudGltZW91dCAmJiBnbG9iYWxTdGF0ZS50aW1lb3V0LnJ1bm5pbmcpIHtcbiAgICAgICAgICAgIC8vIHRpbWVyIGNhbiBiZSBhbHJlYWR5IHN0b3BwZWQgb3IgdW5zZXQgYXQgdGhpcyBwb2ludFxuICAgICAgICAgICAgYW5pbWF0ZVRpbWVyUHJvZ3Jlc3NCYXIoaW5uZXJQYXJhbXMudGltZXIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0RvbUNhY2hlfSBkb21DYWNoZVxuICAgKiBAcGFyYW0ge1N3ZWV0QWxlcnRPcHRpb25zfSBpbm5lclBhcmFtc1xuICAgKi9cbiAgY29uc3QgaW5pdEZvY3VzID0gKGRvbUNhY2hlLCBpbm5lclBhcmFtcykgPT4ge1xuICAgIGlmIChpbm5lclBhcmFtcy50b2FzdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIWNhbGxJZkZ1bmN0aW9uKGlubmVyUGFyYW1zLmFsbG93RW50ZXJLZXkpKSB7XG4gICAgICBibHVyQWN0aXZlRWxlbWVudCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIWZvY3VzQnV0dG9uKGRvbUNhY2hlLCBpbm5lclBhcmFtcykpIHtcbiAgICAgIHNldEZvY3VzKC0xLCAxKTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RG9tQ2FjaGV9IGRvbUNhY2hlXG4gICAqIEBwYXJhbSB7U3dlZXRBbGVydE9wdGlvbnN9IGlubmVyUGFyYW1zXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgY29uc3QgZm9jdXNCdXR0b24gPSAoZG9tQ2FjaGUsIGlubmVyUGFyYW1zKSA9PiB7XG4gICAgaWYgKGlubmVyUGFyYW1zLmZvY3VzRGVueSAmJiBpc1Zpc2libGUkMShkb21DYWNoZS5kZW55QnV0dG9uKSkge1xuICAgICAgZG9tQ2FjaGUuZGVueUJ1dHRvbi5mb2N1cygpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChpbm5lclBhcmFtcy5mb2N1c0NhbmNlbCAmJiBpc1Zpc2libGUkMShkb21DYWNoZS5jYW5jZWxCdXR0b24pKSB7XG4gICAgICBkb21DYWNoZS5jYW5jZWxCdXR0b24uZm9jdXMoKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoaW5uZXJQYXJhbXMuZm9jdXNDb25maXJtICYmIGlzVmlzaWJsZSQxKGRvbUNhY2hlLmNvbmZpcm1CdXR0b24pKSB7XG4gICAgICBkb21DYWNoZS5jb25maXJtQnV0dG9uLmZvY3VzKCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9O1xuICBjb25zdCBibHVyQWN0aXZlRWxlbWVudCA9ICgpID0+IHtcbiAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIHR5cGVvZiBkb2N1bWVudC5hY3RpdmVFbGVtZW50LmJsdXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuYmx1cigpO1xuICAgIH1cbiAgfTtcblxuICAvLyBEZWFyIHJ1c3NpYW4gdXNlcnMgdmlzaXRpbmcgcnVzc2lhbiBzaXRlcy4gTGV0J3MgaGF2ZSBmdW4uXG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiAvXnJ1XFxiLy50ZXN0KG5hdmlnYXRvci5sYW5ndWFnZSkgJiYgbG9jYXRpb24uaG9zdC5tYXRjaCgvXFwuKHJ1fHN1fGJ5fHhuLS1wMWFpKSQvKSkge1xuICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gICAgY29uc3QgaW5pdGlhdGlvbkRhdGUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnc3dhbC1pbml0aWF0aW9uJyk7XG4gICAgaWYgKCFpbml0aWF0aW9uRGF0ZSkge1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3N3YWwtaW5pdGlhdGlvbicsIFwiXCIuY29uY2F0KG5vdykpO1xuICAgIH0gZWxzZSBpZiAoKG5vdy5nZXRUaW1lKCkgLSBEYXRlLnBhcnNlKGluaXRpYXRpb25EYXRlKSkgLyAoMTAwMCAqIDYwICogNjAgKiAyNCkgPiAzKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ25vbmUnO1xuICAgICAgICBjb25zdCB1a3JhaW5pYW5BbnRoZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhdWRpbycpO1xuICAgICAgICB1a3JhaW5pYW5BbnRoZW0uc3JjID0gJ2h0dHBzOi8vZmxhZy1naW1uLnJ1L3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDIxLzA5L1VrcmFpbmEubXAzJztcbiAgICAgICAgdWtyYWluaWFuQW50aGVtLmxvb3AgPSB0cnVlO1xuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHVrcmFpbmlhbkFudGhlbSk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHVrcmFpbmlhbkFudGhlbS5wbGF5KCkuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgICAgLy8gaWdub3JlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sIDI1MDApO1xuICAgICAgfSwgNTAwKTtcbiAgICB9XG4gIH1cblxuICAvLyBBc3NpZ24gaW5zdGFuY2UgbWV0aG9kcyBmcm9tIHNyYy9pbnN0YW5jZU1ldGhvZHMvKi5qcyB0byBwcm90b3R5cGVcbiAgU3dlZXRBbGVydC5wcm90b3R5cGUuZGlzYWJsZUJ1dHRvbnMgPSBkaXNhYmxlQnV0dG9ucztcbiAgU3dlZXRBbGVydC5wcm90b3R5cGUuZW5hYmxlQnV0dG9ucyA9IGVuYWJsZUJ1dHRvbnM7XG4gIFN3ZWV0QWxlcnQucHJvdG90eXBlLmdldElucHV0ID0gZ2V0SW5wdXQ7XG4gIFN3ZWV0QWxlcnQucHJvdG90eXBlLmRpc2FibGVJbnB1dCA9IGRpc2FibGVJbnB1dDtcbiAgU3dlZXRBbGVydC5wcm90b3R5cGUuZW5hYmxlSW5wdXQgPSBlbmFibGVJbnB1dDtcbiAgU3dlZXRBbGVydC5wcm90b3R5cGUuaGlkZUxvYWRpbmcgPSBoaWRlTG9hZGluZztcbiAgU3dlZXRBbGVydC5wcm90b3R5cGUuZGlzYWJsZUxvYWRpbmcgPSBoaWRlTG9hZGluZztcbiAgU3dlZXRBbGVydC5wcm90b3R5cGUuc2hvd1ZhbGlkYXRpb25NZXNzYWdlID0gc2hvd1ZhbGlkYXRpb25NZXNzYWdlO1xuICBTd2VldEFsZXJ0LnByb3RvdHlwZS5yZXNldFZhbGlkYXRpb25NZXNzYWdlID0gcmVzZXRWYWxpZGF0aW9uTWVzc2FnZTtcbiAgU3dlZXRBbGVydC5wcm90b3R5cGUuY2xvc2UgPSBjbG9zZTtcbiAgU3dlZXRBbGVydC5wcm90b3R5cGUuY2xvc2VQb3B1cCA9IGNsb3NlO1xuICBTd2VldEFsZXJ0LnByb3RvdHlwZS5jbG9zZU1vZGFsID0gY2xvc2U7XG4gIFN3ZWV0QWxlcnQucHJvdG90eXBlLmNsb3NlVG9hc3QgPSBjbG9zZTtcbiAgU3dlZXRBbGVydC5wcm90b3R5cGUucmVqZWN0UHJvbWlzZSA9IHJlamVjdFByb21pc2U7XG4gIFN3ZWV0QWxlcnQucHJvdG90eXBlLnVwZGF0ZSA9IHVwZGF0ZTtcbiAgU3dlZXRBbGVydC5wcm90b3R5cGUuX2Rlc3Ryb3kgPSBfZGVzdHJveTtcblxuICAvLyBBc3NpZ24gc3RhdGljIG1ldGhvZHMgZnJvbSBzcmMvc3RhdGljTWV0aG9kcy8qLmpzIHRvIGNvbnN0cnVjdG9yXG4gIE9iamVjdC5hc3NpZ24oU3dlZXRBbGVydCwgc3RhdGljTWV0aG9kcyk7XG5cbiAgLy8gUHJveHkgdG8gaW5zdGFuY2UgbWV0aG9kcyB0byBjb25zdHJ1Y3RvciwgZm9yIG5vdywgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gIE9iamVjdC5rZXlzKGluc3RhbmNlTWV0aG9kcykuZm9yRWFjaChrZXkgPT4ge1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7Li4uYW55fSBhcmdzXG4gICAgICogQHJldHVybnMge2FueSB8IHVuZGVmaW5lZH1cbiAgICAgKi9cbiAgICBTd2VldEFsZXJ0W2tleV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoY3VycmVudEluc3RhbmNlICYmIGN1cnJlbnRJbnN0YW5jZVtrZXldKSB7XG4gICAgICAgIHJldHVybiBjdXJyZW50SW5zdGFuY2Vba2V5XSguLi5hcmd1bWVudHMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfSk7XG4gIFN3ZWV0QWxlcnQuRGlzbWlzc1JlYXNvbiA9IERpc21pc3NSZWFzb247XG4gIFN3ZWV0QWxlcnQudmVyc2lvbiA9ICcxMS43LjMxJztcblxuICBjb25zdCBTd2FsID0gU3dlZXRBbGVydDtcbiAgLy8gQHRzLWlnbm9yZVxuICBTd2FsLmRlZmF1bHQgPSBTd2FsO1xuXG4gIHJldHVybiBTd2FsO1xuXG59KSk7XG5pZiAodHlwZW9mIHRoaXMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuU3dlZXRhbGVydDIpe3RoaXMuc3dhbCA9IHRoaXMuc3dlZXRBbGVydCA9IHRoaXMuU3dhbCA9IHRoaXMuU3dlZXRBbGVydCA9IHRoaXMuU3dlZXRhbGVydDJ9XG5cInVuZGVmaW5lZFwiIT10eXBlb2YgZG9jdW1lbnQmJmZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7aWYoZS5nZXRFbGVtZW50c0J5VGFnTmFtZShcImhlYWRcIilbMF0uYXBwZW5kQ2hpbGQobiksbi5zdHlsZVNoZWV0KW4uc3R5bGVTaGVldC5kaXNhYmxlZHx8KG4uc3R5bGVTaGVldC5jc3NUZXh0PXQpO2Vsc2UgdHJ5e24uaW5uZXJIVE1MPXR9Y2F0Y2goZSl7bi5pbm5lclRleHQ9dH19KGRvY3VtZW50LFwiLnN3YWwyLXBvcHVwLnN3YWwyLXRvYXN0e2JveC1zaXppbmc6Ym9yZGVyLWJveDtncmlkLWNvbHVtbjoxLzQgIWltcG9ydGFudDtncmlkLXJvdzoxLzQgIWltcG9ydGFudDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6bWluLWNvbnRlbnQgYXV0byBtaW4tY29udGVudDtwYWRkaW5nOjFlbTtvdmVyZmxvdy15OmhpZGRlbjtiYWNrZ3JvdW5kOiNmZmY7Ym94LXNoYWRvdzowIDAgMXB4IHJnYmEoMCwwLDAsLjA3NSksMCAxcHggMnB4IHJnYmEoMCwwLDAsLjA3NSksMXB4IDJweCA0cHggcmdiYSgwLDAsMCwuMDc1KSwxcHggM3B4IDhweCByZ2JhKDAsMCwwLC4wNzUpLDJweCA0cHggMTZweCByZ2JhKDAsMCwwLC4wNzUpO3BvaW50ZXItZXZlbnRzOmFsbH0uc3dhbDItcG9wdXAuc3dhbDItdG9hc3Q+KntncmlkLWNvbHVtbjoyfS5zd2FsMi1wb3B1cC5zd2FsMi10b2FzdCAuc3dhbDItdGl0bGV7bWFyZ2luOi41ZW0gMWVtO3BhZGRpbmc6MDtmb250LXNpemU6MWVtO3RleHQtYWxpZ246aW5pdGlhbH0uc3dhbDItcG9wdXAuc3dhbDItdG9hc3QgLnN3YWwyLWxvYWRpbmd7anVzdGlmeS1jb250ZW50OmNlbnRlcn0uc3dhbDItcG9wdXAuc3dhbDItdG9hc3QgLnN3YWwyLWlucHV0e2hlaWdodDoyZW07bWFyZ2luOi41ZW07Zm9udC1zaXplOjFlbX0uc3dhbDItcG9wdXAuc3dhbDItdG9hc3QgLnN3YWwyLXZhbGlkYXRpb24tbWVzc2FnZXtmb250LXNpemU6MWVtfS5zd2FsMi1wb3B1cC5zd2FsMi10b2FzdCAuc3dhbDItZm9vdGVye21hcmdpbjouNWVtIDAgMDtwYWRkaW5nOi41ZW0gMCAwO2ZvbnQtc2l6ZTouOGVtfS5zd2FsMi1wb3B1cC5zd2FsMi10b2FzdCAuc3dhbDItY2xvc2V7Z3JpZC1jb2x1bW46My8zO2dyaWQtcm93OjEvOTk7YWxpZ24tc2VsZjpjZW50ZXI7d2lkdGg6LjhlbTtoZWlnaHQ6LjhlbTttYXJnaW46MDtmb250LXNpemU6MmVtfS5zd2FsMi1wb3B1cC5zd2FsMi10b2FzdCAuc3dhbDItaHRtbC1jb250YWluZXJ7bWFyZ2luOi41ZW0gMWVtO3BhZGRpbmc6MDtvdmVyZmxvdzppbml0aWFsO2ZvbnQtc2l6ZToxZW07dGV4dC1hbGlnbjppbml0aWFsfS5zd2FsMi1wb3B1cC5zd2FsMi10b2FzdCAuc3dhbDItaHRtbC1jb250YWluZXI6ZW1wdHl7cGFkZGluZzowfS5zd2FsMi1wb3B1cC5zd2FsMi10b2FzdCAuc3dhbDItbG9hZGVye2dyaWQtY29sdW1uOjE7Z3JpZC1yb3c6MS85OTthbGlnbi1zZWxmOmNlbnRlcjt3aWR0aDoyZW07aGVpZ2h0OjJlbTttYXJnaW46LjI1ZW19LnN3YWwyLXBvcHVwLnN3YWwyLXRvYXN0IC5zd2FsMi1pY29ue2dyaWQtY29sdW1uOjE7Z3JpZC1yb3c6MS85OTthbGlnbi1zZWxmOmNlbnRlcjt3aWR0aDoyZW07bWluLXdpZHRoOjJlbTtoZWlnaHQ6MmVtO21hcmdpbjowIC41ZW0gMCAwfS5zd2FsMi1wb3B1cC5zd2FsMi10b2FzdCAuc3dhbDItaWNvbiAuc3dhbDItaWNvbi1jb250ZW50e2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Zm9udC1zaXplOjEuOGVtO2ZvbnQtd2VpZ2h0OmJvbGR9LnN3YWwyLXBvcHVwLnN3YWwyLXRvYXN0IC5zd2FsMi1pY29uLnN3YWwyLXN1Y2Nlc3MgLnN3YWwyLXN1Y2Nlc3MtcmluZ3t3aWR0aDoyZW07aGVpZ2h0OjJlbX0uc3dhbDItcG9wdXAuc3dhbDItdG9hc3QgLnN3YWwyLWljb24uc3dhbDItZXJyb3IgW2NsYXNzXj1zd2FsMi14LW1hcmstbGluZV17dG9wOi44NzVlbTt3aWR0aDoxLjM3NWVtfS5zd2FsMi1wb3B1cC5zd2FsMi10b2FzdCAuc3dhbDItaWNvbi5zd2FsMi1lcnJvciBbY2xhc3NePXN3YWwyLXgtbWFyay1saW5lXVtjbGFzcyQ9bGVmdF17bGVmdDouMzEyNWVtfS5zd2FsMi1wb3B1cC5zd2FsMi10b2FzdCAuc3dhbDItaWNvbi5zd2FsMi1lcnJvciBbY2xhc3NePXN3YWwyLXgtbWFyay1saW5lXVtjbGFzcyQ9cmlnaHRde3JpZ2h0Oi4zMTI1ZW19LnN3YWwyLXBvcHVwLnN3YWwyLXRvYXN0IC5zd2FsMi1hY3Rpb25ze2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0O2hlaWdodDphdXRvO21hcmdpbjowO21hcmdpbi10b3A6LjVlbTtwYWRkaW5nOjAgLjVlbX0uc3dhbDItcG9wdXAuc3dhbDItdG9hc3QgLnN3YWwyLXN0eWxlZHttYXJnaW46LjI1ZW0gLjVlbTtwYWRkaW5nOi40ZW0gLjZlbTtmb250LXNpemU6MWVtfS5zd2FsMi1wb3B1cC5zd2FsMi10b2FzdCAuc3dhbDItc3VjY2Vzc3tib3JkZXItY29sb3I6I2E1ZGM4Nn0uc3dhbDItcG9wdXAuc3dhbDItdG9hc3QgLnN3YWwyLXN1Y2Nlc3MgW2NsYXNzXj1zd2FsMi1zdWNjZXNzLWNpcmN1bGFyLWxpbmVde3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjEuNmVtO2hlaWdodDozZW07dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZyk7Ym9yZGVyLXJhZGl1czo1MCV9LnN3YWwyLXBvcHVwLnN3YWwyLXRvYXN0IC5zd2FsMi1zdWNjZXNzIFtjbGFzc149c3dhbDItc3VjY2Vzcy1jaXJjdWxhci1saW5lXVtjbGFzcyQ9bGVmdF17dG9wOi0wLjhlbTtsZWZ0Oi0wLjVlbTt0cmFuc2Zvcm06cm90YXRlKC00NWRlZyk7dHJhbnNmb3JtLW9yaWdpbjoyZW0gMmVtO2JvcmRlci1yYWRpdXM6NGVtIDAgMCA0ZW19LnN3YWwyLXBvcHVwLnN3YWwyLXRvYXN0IC5zd2FsMi1zdWNjZXNzIFtjbGFzc149c3dhbDItc3VjY2Vzcy1jaXJjdWxhci1saW5lXVtjbGFzcyQ9cmlnaHRde3RvcDotMC4yNWVtO2xlZnQ6LjkzNzVlbTt0cmFuc2Zvcm0tb3JpZ2luOjAgMS41ZW07Ym9yZGVyLXJhZGl1czowIDRlbSA0ZW0gMH0uc3dhbDItcG9wdXAuc3dhbDItdG9hc3QgLnN3YWwyLXN1Y2Nlc3MgLnN3YWwyLXN1Y2Nlc3MtcmluZ3t3aWR0aDoyZW07aGVpZ2h0OjJlbX0uc3dhbDItcG9wdXAuc3dhbDItdG9hc3QgLnN3YWwyLXN1Y2Nlc3MgLnN3YWwyLXN1Y2Nlc3MtZml4e3RvcDowO2xlZnQ6LjQzNzVlbTt3aWR0aDouNDM3NWVtO2hlaWdodDoyLjY4NzVlbX0uc3dhbDItcG9wdXAuc3dhbDItdG9hc3QgLnN3YWwyLXN1Y2Nlc3MgW2NsYXNzXj1zd2FsMi1zdWNjZXNzLWxpbmVde2hlaWdodDouMzEyNWVtfS5zd2FsMi1wb3B1cC5zd2FsMi10b2FzdCAuc3dhbDItc3VjY2VzcyBbY2xhc3NePXN3YWwyLXN1Y2Nlc3MtbGluZV1bY2xhc3MkPXRpcF17dG9wOjEuMTI1ZW07bGVmdDouMTg3NWVtO3dpZHRoOi43NWVtfS5zd2FsMi1wb3B1cC5zd2FsMi10b2FzdCAuc3dhbDItc3VjY2VzcyBbY2xhc3NePXN3YWwyLXN1Y2Nlc3MtbGluZV1bY2xhc3MkPWxvbmdde3RvcDouOTM3NWVtO3JpZ2h0Oi4xODc1ZW07d2lkdGg6MS4zNzVlbX0uc3dhbDItcG9wdXAuc3dhbDItdG9hc3QgLnN3YWwyLXN1Y2Nlc3Muc3dhbDItaWNvbi1zaG93IC5zd2FsMi1zdWNjZXNzLWxpbmUtdGlwe2FuaW1hdGlvbjpzd2FsMi10b2FzdC1hbmltYXRlLXN1Y2Nlc3MtbGluZS10aXAgLjc1c30uc3dhbDItcG9wdXAuc3dhbDItdG9hc3QgLnN3YWwyLXN1Y2Nlc3Muc3dhbDItaWNvbi1zaG93IC5zd2FsMi1zdWNjZXNzLWxpbmUtbG9uZ3thbmltYXRpb246c3dhbDItdG9hc3QtYW5pbWF0ZS1zdWNjZXNzLWxpbmUtbG9uZyAuNzVzfS5zd2FsMi1wb3B1cC5zd2FsMi10b2FzdC5zd2FsMi1zaG93e2FuaW1hdGlvbjpzd2FsMi10b2FzdC1zaG93IC41c30uc3dhbDItcG9wdXAuc3dhbDItdG9hc3Quc3dhbDItaGlkZXthbmltYXRpb246c3dhbDItdG9hc3QtaGlkZSAuMXMgZm9yd2FyZHN9ZGl2OndoZXJlKC5zd2FsMi1jb250YWluZXIpe2Rpc3BsYXk6Z3JpZDtwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjEwNjA7aW5zZXQ6MDtib3gtc2l6aW5nOmJvcmRlci1ib3g7Z3JpZC10ZW1wbGF0ZS1hcmVhczpcXFwidG9wLXN0YXJ0ICAgICB0b3AgICAgICAgICAgICB0b3AtZW5kXFxcIiBcXFwiY2VudGVyLXN0YXJ0ICBjZW50ZXIgICAgICAgICBjZW50ZXItZW5kXFxcIiBcXFwiYm90dG9tLXN0YXJ0ICBib3R0b20tY2VudGVyICBib3R0b20tZW5kXFxcIjtncmlkLXRlbXBsYXRlLXJvd3M6bWlubWF4KG1pbi1jb250ZW50LCBhdXRvKSBtaW5tYXgobWluLWNvbnRlbnQsIGF1dG8pIG1pbm1heChtaW4tY29udGVudCwgYXV0byk7aGVpZ2h0OjEwMCU7cGFkZGluZzouNjI1ZW07b3ZlcmZsb3cteDpoaWRkZW47dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIC4xczstd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzp0b3VjaH1kaXY6d2hlcmUoLnN3YWwyLWNvbnRhaW5lcikuc3dhbDItYmFja2Ryb3Atc2hvdyxkaXY6d2hlcmUoLnN3YWwyLWNvbnRhaW5lcikuc3dhbDItbm9hbmltYXRpb257YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC40KX1kaXY6d2hlcmUoLnN3YWwyLWNvbnRhaW5lcikuc3dhbDItYmFja2Ryb3AtaGlkZXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsMCkgIWltcG9ydGFudH1kaXY6d2hlcmUoLnN3YWwyLWNvbnRhaW5lcikuc3dhbDItdG9wLXN0YXJ0LGRpdjp3aGVyZSguc3dhbDItY29udGFpbmVyKS5zd2FsMi1jZW50ZXItc3RhcnQsZGl2OndoZXJlKC5zd2FsMi1jb250YWluZXIpLnN3YWwyLWJvdHRvbS1zdGFydHtncmlkLXRlbXBsYXRlLWNvbHVtbnM6bWlubWF4KDAsIDFmcikgYXV0byBhdXRvfWRpdjp3aGVyZSguc3dhbDItY29udGFpbmVyKS5zd2FsMi10b3AsZGl2OndoZXJlKC5zd2FsMi1jb250YWluZXIpLnN3YWwyLWNlbnRlcixkaXY6d2hlcmUoLnN3YWwyLWNvbnRhaW5lcikuc3dhbDItYm90dG9te2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvIG1pbm1heCgwLCAxZnIpIGF1dG99ZGl2OndoZXJlKC5zd2FsMi1jb250YWluZXIpLnN3YWwyLXRvcC1lbmQsZGl2OndoZXJlKC5zd2FsMi1jb250YWluZXIpLnN3YWwyLWNlbnRlci1lbmQsZGl2OndoZXJlKC5zd2FsMi1jb250YWluZXIpLnN3YWwyLWJvdHRvbS1lbmR7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG8gYXV0byBtaW5tYXgoMCwgMWZyKX1kaXY6d2hlcmUoLnN3YWwyLWNvbnRhaW5lcikuc3dhbDItdG9wLXN0YXJ0Pi5zd2FsMi1wb3B1cHthbGlnbi1zZWxmOnN0YXJ0fWRpdjp3aGVyZSguc3dhbDItY29udGFpbmVyKS5zd2FsMi10b3A+LnN3YWwyLXBvcHVwe2dyaWQtY29sdW1uOjI7YWxpZ24tc2VsZjpzdGFydDtqdXN0aWZ5LXNlbGY6Y2VudGVyfWRpdjp3aGVyZSguc3dhbDItY29udGFpbmVyKS5zd2FsMi10b3AtZW5kPi5zd2FsMi1wb3B1cCxkaXY6d2hlcmUoLnN3YWwyLWNvbnRhaW5lcikuc3dhbDItdG9wLXJpZ2h0Pi5zd2FsMi1wb3B1cHtncmlkLWNvbHVtbjozO2FsaWduLXNlbGY6c3RhcnQ7anVzdGlmeS1zZWxmOmVuZH1kaXY6d2hlcmUoLnN3YWwyLWNvbnRhaW5lcikuc3dhbDItY2VudGVyLXN0YXJ0Pi5zd2FsMi1wb3B1cCxkaXY6d2hlcmUoLnN3YWwyLWNvbnRhaW5lcikuc3dhbDItY2VudGVyLWxlZnQ+LnN3YWwyLXBvcHVwe2dyaWQtcm93OjI7YWxpZ24tc2VsZjpjZW50ZXJ9ZGl2OndoZXJlKC5zd2FsMi1jb250YWluZXIpLnN3YWwyLWNlbnRlcj4uc3dhbDItcG9wdXB7Z3JpZC1jb2x1bW46MjtncmlkLXJvdzoyO2FsaWduLXNlbGY6Y2VudGVyO2p1c3RpZnktc2VsZjpjZW50ZXJ9ZGl2OndoZXJlKC5zd2FsMi1jb250YWluZXIpLnN3YWwyLWNlbnRlci1lbmQ+LnN3YWwyLXBvcHVwLGRpdjp3aGVyZSguc3dhbDItY29udGFpbmVyKS5zd2FsMi1jZW50ZXItcmlnaHQ+LnN3YWwyLXBvcHVwe2dyaWQtY29sdW1uOjM7Z3JpZC1yb3c6MjthbGlnbi1zZWxmOmNlbnRlcjtqdXN0aWZ5LXNlbGY6ZW5kfWRpdjp3aGVyZSguc3dhbDItY29udGFpbmVyKS5zd2FsMi1ib3R0b20tc3RhcnQ+LnN3YWwyLXBvcHVwLGRpdjp3aGVyZSguc3dhbDItY29udGFpbmVyKS5zd2FsMi1ib3R0b20tbGVmdD4uc3dhbDItcG9wdXB7Z3JpZC1jb2x1bW46MTtncmlkLXJvdzozO2FsaWduLXNlbGY6ZW5kfWRpdjp3aGVyZSguc3dhbDItY29udGFpbmVyKS5zd2FsMi1ib3R0b20+LnN3YWwyLXBvcHVwe2dyaWQtY29sdW1uOjI7Z3JpZC1yb3c6MztqdXN0aWZ5LXNlbGY6Y2VudGVyO2FsaWduLXNlbGY6ZW5kfWRpdjp3aGVyZSguc3dhbDItY29udGFpbmVyKS5zd2FsMi1ib3R0b20tZW5kPi5zd2FsMi1wb3B1cCxkaXY6d2hlcmUoLnN3YWwyLWNvbnRhaW5lcikuc3dhbDItYm90dG9tLXJpZ2h0Pi5zd2FsMi1wb3B1cHtncmlkLWNvbHVtbjozO2dyaWQtcm93OjM7YWxpZ24tc2VsZjplbmQ7anVzdGlmeS1zZWxmOmVuZH1kaXY6d2hlcmUoLnN3YWwyLWNvbnRhaW5lcikuc3dhbDItZ3Jvdy1yb3c+LnN3YWwyLXBvcHVwLGRpdjp3aGVyZSguc3dhbDItY29udGFpbmVyKS5zd2FsMi1ncm93LWZ1bGxzY3JlZW4+LnN3YWwyLXBvcHVwe2dyaWQtY29sdW1uOjEvNDt3aWR0aDoxMDAlfWRpdjp3aGVyZSguc3dhbDItY29udGFpbmVyKS5zd2FsMi1ncm93LWNvbHVtbj4uc3dhbDItcG9wdXAsZGl2OndoZXJlKC5zd2FsMi1jb250YWluZXIpLnN3YWwyLWdyb3ctZnVsbHNjcmVlbj4uc3dhbDItcG9wdXB7Z3JpZC1yb3c6MS80O2FsaWduLXNlbGY6c3RyZXRjaH1kaXY6d2hlcmUoLnN3YWwyLWNvbnRhaW5lcikuc3dhbDItbm8tdHJhbnNpdGlvbnt0cmFuc2l0aW9uOm5vbmUgIWltcG9ydGFudH1kaXY6d2hlcmUoLnN3YWwyLWNvbnRhaW5lcikgZGl2OndoZXJlKC5zd2FsMi1wb3B1cCl7ZGlzcGxheTpub25lO3Bvc2l0aW9uOnJlbGF0aXZlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6bWlubWF4KDAsIDEwMCUpO3dpZHRoOjMyZW07bWF4LXdpZHRoOjEwMCU7cGFkZGluZzowIDAgMS4yNWVtO2JvcmRlcjpub25lO2JvcmRlci1yYWRpdXM6NXB4O2JhY2tncm91bmQ6I2ZmZjtjb2xvcjojNTQ1NDU0O2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOjFyZW19ZGl2OndoZXJlKC5zd2FsMi1jb250YWluZXIpIGRpdjp3aGVyZSguc3dhbDItcG9wdXApOmZvY3Vze291dGxpbmU6bm9uZX1kaXY6d2hlcmUoLnN3YWwyLWNvbnRhaW5lcikgZGl2OndoZXJlKC5zd2FsMi1wb3B1cCkuc3dhbDItbG9hZGluZ3tvdmVyZmxvdy15OmhpZGRlbn1kaXY6d2hlcmUoLnN3YWwyLWNvbnRhaW5lcikgaDI6d2hlcmUoLnN3YWwyLXRpdGxlKXtwb3NpdGlvbjpyZWxhdGl2ZTttYXgtd2lkdGg6MTAwJTttYXJnaW46MDtwYWRkaW5nOi44ZW0gMWVtIDA7Y29sb3I6aW5oZXJpdDtmb250LXNpemU6MS44NzVlbTtmb250LXdlaWdodDo2MDA7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC10cmFuc2Zvcm06bm9uZTt3b3JkLXdyYXA6YnJlYWstd29yZH1kaXY6d2hlcmUoLnN3YWwyLWNvbnRhaW5lcikgZGl2OndoZXJlKC5zd2FsMi1hY3Rpb25zKXtkaXNwbGF5OmZsZXg7ei1pbmRleDoxO2JveC1zaXppbmc6Ym9yZGVyLWJveDtmbGV4LXdyYXA6d3JhcDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjt3aWR0aDphdXRvO21hcmdpbjoxLjI1ZW0gYXV0byAwO3BhZGRpbmc6MH1kaXY6d2hlcmUoLnN3YWwyLWNvbnRhaW5lcikgZGl2OndoZXJlKC5zd2FsMi1hY3Rpb25zKTpub3QoLnN3YWwyLWxvYWRpbmcpIC5zd2FsMi1zdHlsZWRbZGlzYWJsZWRde29wYWNpdHk6LjR9ZGl2OndoZXJlKC5zd2FsMi1jb250YWluZXIpIGRpdjp3aGVyZSguc3dhbDItYWN0aW9ucyk6bm90KC5zd2FsMi1sb2FkaW5nKSAuc3dhbDItc3R5bGVkOmhvdmVye2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHJnYmEoMCwgMCwgMCwgMC4xKSwgcmdiYSgwLCAwLCAwLCAwLjEpKX1kaXY6d2hlcmUoLnN3YWwyLWNvbnRhaW5lcikgZGl2OndoZXJlKC5zd2FsMi1hY3Rpb25zKTpub3QoLnN3YWwyLWxvYWRpbmcpIC5zd2FsMi1zdHlsZWQ6YWN0aXZle2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHJnYmEoMCwgMCwgMCwgMC4yKSwgcmdiYSgwLCAwLCAwLCAwLjIpKX1kaXY6d2hlcmUoLnN3YWwyLWNvbnRhaW5lcikgZGl2OndoZXJlKC5zd2FsMi1sb2FkZXIpe2Rpc3BsYXk6bm9uZTthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjt3aWR0aDoyLjJlbTtoZWlnaHQ6Mi4yZW07bWFyZ2luOjAgMS44NzVlbTthbmltYXRpb246c3dhbDItcm90YXRlLWxvYWRpbmcgMS41cyBsaW5lYXIgMHMgaW5maW5pdGUgbm9ybWFsO2JvcmRlci13aWR0aDouMjVlbTtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXJhZGl1czoxMDAlO2JvcmRlci1jb2xvcjojMjc3OGM0IHJnYmEoMCwwLDAsMCkgIzI3NzhjNCByZ2JhKDAsMCwwLDApfWRpdjp3aGVyZSguc3dhbDItY29udGFpbmVyKSBidXR0b246d2hlcmUoLnN3YWwyLXN0eWxlZCl7bWFyZ2luOi4zMTI1ZW07cGFkZGluZzouNjI1ZW0gMS4xZW07dHJhbnNpdGlvbjpib3gtc2hhZG93IC4xcztib3gtc2hhZG93OjAgMCAwIDNweCByZ2JhKDAsMCwwLDApO2ZvbnQtd2VpZ2h0OjUwMH1kaXY6d2hlcmUoLnN3YWwyLWNvbnRhaW5lcikgYnV0dG9uOndoZXJlKC5zd2FsMi1zdHlsZWQpOm5vdChbZGlzYWJsZWRdKXtjdXJzb3I6cG9pbnRlcn1kaXY6d2hlcmUoLnN3YWwyLWNvbnRhaW5lcikgYnV0dG9uOndoZXJlKC5zd2FsMi1zdHlsZWQpLnN3YWwyLWNvbmZpcm17Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czouMjVlbTtiYWNrZ3JvdW5kOmluaXRpYWw7YmFja2dyb3VuZC1jb2xvcjojNzA2NmUwO2NvbG9yOiNmZmY7Zm9udC1zaXplOjFlbX1kaXY6d2hlcmUoLnN3YWwyLWNvbnRhaW5lcikgYnV0dG9uOndoZXJlKC5zd2FsMi1zdHlsZWQpLnN3YWwyLWNvbmZpcm06Zm9jdXN7Ym94LXNoYWRvdzowIDAgMCAzcHggcmdiYSgxMTIsMTAyLDIyNCwuNSl9ZGl2OndoZXJlKC5zd2FsMi1jb250YWluZXIpIGJ1dHRvbjp3aGVyZSguc3dhbDItc3R5bGVkKS5zd2FsMi1kZW55e2JvcmRlcjowO2JvcmRlci1yYWRpdXM6LjI1ZW07YmFja2dyb3VuZDppbml0aWFsO2JhY2tncm91bmQtY29sb3I6I2RjMzc0MTtjb2xvcjojZmZmO2ZvbnQtc2l6ZToxZW19ZGl2OndoZXJlKC5zd2FsMi1jb250YWluZXIpIGJ1dHRvbjp3aGVyZSguc3dhbDItc3R5bGVkKS5zd2FsMi1kZW55OmZvY3Vze2JveC1zaGFkb3c6MCAwIDAgM3B4IHJnYmEoMjIwLDU1LDY1LC41KX1kaXY6d2hlcmUoLnN3YWwyLWNvbnRhaW5lcikgYnV0dG9uOndoZXJlKC5zd2FsMi1zdHlsZWQpLnN3YWwyLWNhbmNlbHtib3JkZXI6MDtib3JkZXItcmFkaXVzOi4yNWVtO2JhY2tncm91bmQ6aW5pdGlhbDtiYWNrZ3JvdW5kLWNvbG9yOiM2ZTc4ODE7Y29sb3I6I2ZmZjtmb250LXNpemU6MWVtfWRpdjp3aGVyZSguc3dhbDItY29udGFpbmVyKSBidXR0b246d2hlcmUoLnN3YWwyLXN0eWxlZCkuc3dhbDItY2FuY2VsOmZvY3Vze2JveC1zaGFkb3c6MCAwIDAgM3B4IHJnYmEoMTEwLDEyMCwxMjksLjUpfWRpdjp3aGVyZSguc3dhbDItY29udGFpbmVyKSBidXR0b246d2hlcmUoLnN3YWwyLXN0eWxlZCkuc3dhbDItZGVmYXVsdC1vdXRsaW5lOmZvY3Vze2JveC1zaGFkb3c6MCAwIDAgM3B4IHJnYmEoMTAwLDE1MCwyMDAsLjUpfWRpdjp3aGVyZSguc3dhbDItY29udGFpbmVyKSBidXR0b246d2hlcmUoLnN3YWwyLXN0eWxlZCk6Zm9jdXN7b3V0bGluZTpub25lfWRpdjp3aGVyZSguc3dhbDItY29udGFpbmVyKSBidXR0b246d2hlcmUoLnN3YWwyLXN0eWxlZCk6Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9ZGl2OndoZXJlKC5zd2FsMi1jb250YWluZXIpIGRpdjp3aGVyZSguc3dhbDItZm9vdGVyKXttYXJnaW46MWVtIDAgMDtwYWRkaW5nOjFlbSAxZW0gMDtib3JkZXItdG9wOjFweCBzb2xpZCAjZWVlO2NvbG9yOmluaGVyaXQ7Zm9udC1zaXplOjFlbTt0ZXh0LWFsaWduOmNlbnRlcn1kaXY6d2hlcmUoLnN3YWwyLWNvbnRhaW5lcikgLnN3YWwyLXRpbWVyLXByb2dyZXNzLWJhci1jb250YWluZXJ7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDtib3R0b206MDtsZWZ0OjA7Z3JpZC1jb2x1bW46YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbjtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czo1cHg7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czo1cHh9ZGl2OndoZXJlKC5zd2FsMi1jb250YWluZXIpIGRpdjp3aGVyZSguc3dhbDItdGltZXItcHJvZ3Jlc3MtYmFyKXt3aWR0aDoxMDAlO2hlaWdodDouMjVlbTtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjIpfWRpdjp3aGVyZSguc3dhbDItY29udGFpbmVyKSBpbWc6d2hlcmUoLnN3YWwyLWltYWdlKXttYXgtd2lkdGg6MTAwJTttYXJnaW46MmVtIGF1dG8gMWVtfWRpdjp3aGVyZSguc3dhbDItY29udGFpbmVyKSBidXR0b246d2hlcmUoLnN3YWwyLWNsb3NlKXt6LWluZGV4OjI7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7d2lkdGg6MS4yZW07aGVpZ2h0OjEuMmVtO21hcmdpbi10b3A6MDttYXJnaW4tcmlnaHQ6MDttYXJnaW4tYm90dG9tOi0xLjJlbTtwYWRkaW5nOjA7b3ZlcmZsb3c6aGlkZGVuO3RyYW5zaXRpb246Y29sb3IgLjFzLGJveC1zaGFkb3cgLjFzO2JvcmRlcjpub25lO2JvcmRlci1yYWRpdXM6NXB4O2JhY2tncm91bmQ6cmdiYSgwLDAsMCwwKTtjb2xvcjojY2NjO2ZvbnQtZmFtaWx5Om1vbm9zcGFjZTtmb250LXNpemU6Mi41ZW07Y3Vyc29yOnBvaW50ZXI7anVzdGlmeS1zZWxmOmVuZH1kaXY6d2hlcmUoLnN3YWwyLWNvbnRhaW5lcikgYnV0dG9uOndoZXJlKC5zd2FsMi1jbG9zZSk6aG92ZXJ7dHJhbnNmb3JtOm5vbmU7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLDApO2NvbG9yOiNmMjc0NzR9ZGl2OndoZXJlKC5zd2FsMi1jb250YWluZXIpIGJ1dHRvbjp3aGVyZSguc3dhbDItY2xvc2UpOmZvY3Vze291dGxpbmU6bm9uZTtib3gtc2hhZG93Omluc2V0IDAgMCAwIDNweCByZ2JhKDEwMCwxNTAsMjAwLC41KX1kaXY6d2hlcmUoLnN3YWwyLWNvbnRhaW5lcikgYnV0dG9uOndoZXJlKC5zd2FsMi1jbG9zZSk6Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9ZGl2OndoZXJlKC5zd2FsMi1jb250YWluZXIpIC5zd2FsMi1odG1sLWNvbnRhaW5lcnt6LWluZGV4OjE7anVzdGlmeS1jb250ZW50OmNlbnRlcjttYXJnaW46MWVtIDEuNmVtIC4zZW07cGFkZGluZzowO292ZXJmbG93OmF1dG87Y29sb3I6aW5oZXJpdDtmb250LXNpemU6MS4xMjVlbTtmb250LXdlaWdodDpub3JtYWw7bGluZS1oZWlnaHQ6bm9ybWFsO3RleHQtYWxpZ246Y2VudGVyO3dvcmQtd3JhcDpicmVhay13b3JkO3dvcmQtYnJlYWs6YnJlYWstd29yZH1kaXY6d2hlcmUoLnN3YWwyLWNvbnRhaW5lcikgaW5wdXQ6d2hlcmUoLnN3YWwyLWlucHV0KSxkaXY6d2hlcmUoLnN3YWwyLWNvbnRhaW5lcikgaW5wdXQ6d2hlcmUoLnN3YWwyLWZpbGUpLGRpdjp3aGVyZSguc3dhbDItY29udGFpbmVyKSB0ZXh0YXJlYTp3aGVyZSguc3dhbDItdGV4dGFyZWEpLGRpdjp3aGVyZSguc3dhbDItY29udGFpbmVyKSBzZWxlY3Q6d2hlcmUoLnN3YWwyLXNlbGVjdCksZGl2OndoZXJlKC5zd2FsMi1jb250YWluZXIpIGRpdjp3aGVyZSguc3dhbDItcmFkaW8pLGRpdjp3aGVyZSguc3dhbDItY29udGFpbmVyKSBsYWJlbDp3aGVyZSguc3dhbDItY2hlY2tib3gpe21hcmdpbjoxZW0gMmVtIDNweH1kaXY6d2hlcmUoLnN3YWwyLWNvbnRhaW5lcikgaW5wdXQ6d2hlcmUoLnN3YWwyLWlucHV0KSxkaXY6d2hlcmUoLnN3YWwyLWNvbnRhaW5lcikgaW5wdXQ6d2hlcmUoLnN3YWwyLWZpbGUpLGRpdjp3aGVyZSguc3dhbDItY29udGFpbmVyKSB0ZXh0YXJlYTp3aGVyZSguc3dhbDItdGV4dGFyZWEpe2JveC1zaXppbmc6Ym9yZGVyLWJveDt3aWR0aDphdXRvO3RyYW5zaXRpb246Ym9yZGVyLWNvbG9yIC4xcyxib3gtc2hhZG93IC4xcztib3JkZXI6MXB4IHNvbGlkICNkOWQ5ZDk7Ym9yZGVyLXJhZGl1czouMTg3NWVtO2JhY2tncm91bmQ6cmdiYSgwLDAsMCwwKTtib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLC4wNiksMCAwIDAgM3B4IHJnYmEoMCwwLDAsMCk7Y29sb3I6aW5oZXJpdDtmb250LXNpemU6MS4xMjVlbX1kaXY6d2hlcmUoLnN3YWwyLWNvbnRhaW5lcikgaW5wdXQ6d2hlcmUoLnN3YWwyLWlucHV0KS5zd2FsMi1pbnB1dGVycm9yLGRpdjp3aGVyZSguc3dhbDItY29udGFpbmVyKSBpbnB1dDp3aGVyZSguc3dhbDItZmlsZSkuc3dhbDItaW5wdXRlcnJvcixkaXY6d2hlcmUoLnN3YWwyLWNvbnRhaW5lcikgdGV4dGFyZWE6d2hlcmUoLnN3YWwyLXRleHRhcmVhKS5zd2FsMi1pbnB1dGVycm9ye2JvcmRlci1jb2xvcjojZjI3NDc0ICFpbXBvcnRhbnQ7Ym94LXNoYWRvdzowIDAgMnB4ICNmMjc0NzQgIWltcG9ydGFudH1kaXY6d2hlcmUoLnN3YWwyLWNvbnRhaW5lcikgaW5wdXQ6d2hlcmUoLnN3YWwyLWlucHV0KTpmb2N1cyxkaXY6d2hlcmUoLnN3YWwyLWNvbnRhaW5lcikgaW5wdXQ6d2hlcmUoLnN3YWwyLWZpbGUpOmZvY3VzLGRpdjp3aGVyZSguc3dhbDItY29udGFpbmVyKSB0ZXh0YXJlYTp3aGVyZSguc3dhbDItdGV4dGFyZWEpOmZvY3Vze2JvcmRlcjoxcHggc29saWQgI2I0ZGJlZDtvdXRsaW5lOm5vbmU7Ym94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwuMDYpLDAgMCAwIDNweCByZ2JhKDEwMCwxNTAsMjAwLC41KX1kaXY6d2hlcmUoLnN3YWwyLWNvbnRhaW5lcikgaW5wdXQ6d2hlcmUoLnN3YWwyLWlucHV0KTo6cGxhY2Vob2xkZXIsZGl2OndoZXJlKC5zd2FsMi1jb250YWluZXIpIGlucHV0OndoZXJlKC5zd2FsMi1maWxlKTo6cGxhY2Vob2xkZXIsZGl2OndoZXJlKC5zd2FsMi1jb250YWluZXIpIHRleHRhcmVhOndoZXJlKC5zd2FsMi10ZXh0YXJlYSk6OnBsYWNlaG9sZGVye2NvbG9yOiNjY2N9ZGl2OndoZXJlKC5zd2FsMi1jb250YWluZXIpIC5zd2FsMi1yYW5nZXttYXJnaW46MWVtIDJlbSAzcHg7YmFja2dyb3VuZDojZmZmfWRpdjp3aGVyZSguc3dhbDItY29udGFpbmVyKSAuc3dhbDItcmFuZ2UgaW5wdXR7d2lkdGg6ODAlfWRpdjp3aGVyZSguc3dhbDItY29udGFpbmVyKSAuc3dhbDItcmFuZ2Ugb3V0cHV0e3dpZHRoOjIwJTtjb2xvcjppbmhlcml0O2ZvbnQtd2VpZ2h0OjYwMDt0ZXh0LWFsaWduOmNlbnRlcn1kaXY6d2hlcmUoLnN3YWwyLWNvbnRhaW5lcikgLnN3YWwyLXJhbmdlIGlucHV0LGRpdjp3aGVyZSguc3dhbDItY29udGFpbmVyKSAuc3dhbDItcmFuZ2Ugb3V0cHV0e2hlaWdodDoyLjYyNWVtO3BhZGRpbmc6MDtmb250LXNpemU6MS4xMjVlbTtsaW5lLWhlaWdodDoyLjYyNWVtfWRpdjp3aGVyZSguc3dhbDItY29udGFpbmVyKSAuc3dhbDItaW5wdXR7aGVpZ2h0OjIuNjI1ZW07cGFkZGluZzowIC43NWVtfWRpdjp3aGVyZSguc3dhbDItY29udGFpbmVyKSAuc3dhbDItZmlsZXt3aWR0aDo3NSU7bWFyZ2luLXJpZ2h0OmF1dG87bWFyZ2luLWxlZnQ6YXV0bztiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsMCk7Zm9udC1zaXplOjEuMTI1ZW19ZGl2OndoZXJlKC5zd2FsMi1jb250YWluZXIpIC5zd2FsMi10ZXh0YXJlYXtoZWlnaHQ6Ni43NWVtO3BhZGRpbmc6Ljc1ZW19ZGl2OndoZXJlKC5zd2FsMi1jb250YWluZXIpIC5zd2FsMi1zZWxlY3R7bWluLXdpZHRoOjUwJTttYXgtd2lkdGg6MTAwJTtwYWRkaW5nOi4zNzVlbSAuNjI1ZW07YmFja2dyb3VuZDpyZ2JhKDAsMCwwLDApO2NvbG9yOmluaGVyaXQ7Zm9udC1zaXplOjEuMTI1ZW19ZGl2OndoZXJlKC5zd2FsMi1jb250YWluZXIpIC5zd2FsMi1yYWRpbyxkaXY6d2hlcmUoLnN3YWwyLWNvbnRhaW5lcikgLnN3YWwyLWNoZWNrYm94e2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2JhY2tncm91bmQ6I2ZmZjtjb2xvcjppbmhlcml0fWRpdjp3aGVyZSguc3dhbDItY29udGFpbmVyKSAuc3dhbDItcmFkaW8gbGFiZWwsZGl2OndoZXJlKC5zd2FsMi1jb250YWluZXIpIC5zd2FsMi1jaGVja2JveCBsYWJlbHttYXJnaW46MCAuNmVtO2ZvbnQtc2l6ZToxLjEyNWVtfWRpdjp3aGVyZSguc3dhbDItY29udGFpbmVyKSAuc3dhbDItcmFkaW8gaW5wdXQsZGl2OndoZXJlKC5zd2FsMi1jb250YWluZXIpIC5zd2FsMi1jaGVja2JveCBpbnB1dHtmbGV4LXNocmluazowO21hcmdpbjowIC40ZW19ZGl2OndoZXJlKC5zd2FsMi1jb250YWluZXIpIGxhYmVsOndoZXJlKC5zd2FsMi1pbnB1dC1sYWJlbCl7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7bWFyZ2luOjFlbSBhdXRvIDB9ZGl2OndoZXJlKC5zd2FsMi1jb250YWluZXIpIGRpdjp3aGVyZSguc3dhbDItdmFsaWRhdGlvbi1tZXNzYWdlKXthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjttYXJnaW46MWVtIDAgMDtwYWRkaW5nOi42MjVlbTtvdmVyZmxvdzpoaWRkZW47YmFja2dyb3VuZDojZjBmMGYwO2NvbG9yOiM2NjY7Zm9udC1zaXplOjFlbTtmb250LXdlaWdodDozMDB9ZGl2OndoZXJlKC5zd2FsMi1jb250YWluZXIpIGRpdjp3aGVyZSguc3dhbDItdmFsaWRhdGlvbi1tZXNzYWdlKTo6YmVmb3Jle2NvbnRlbnQ6XFxcIiFcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjEuNWVtO21pbi13aWR0aDoxLjVlbTtoZWlnaHQ6MS41ZW07bWFyZ2luOjAgLjYyNWVtO2JvcmRlci1yYWRpdXM6NTAlO2JhY2tncm91bmQtY29sb3I6I2YyNzQ3NDtjb2xvcjojZmZmO2ZvbnQtd2VpZ2h0OjYwMDtsaW5lLWhlaWdodDoxLjVlbTt0ZXh0LWFsaWduOmNlbnRlcn1kaXY6d2hlcmUoLnN3YWwyLWNvbnRhaW5lcikgLnN3YWwyLXByb2dyZXNzLXN0ZXBze2ZsZXgtd3JhcDp3cmFwO2FsaWduLWl0ZW1zOmNlbnRlcjttYXgtd2lkdGg6MTAwJTttYXJnaW46MS4yNWVtIGF1dG87cGFkZGluZzowO2JhY2tncm91bmQ6cmdiYSgwLDAsMCwwKTtmb250LXdlaWdodDo2MDB9ZGl2OndoZXJlKC5zd2FsMi1jb250YWluZXIpIC5zd2FsMi1wcm9ncmVzcy1zdGVwcyBsaXtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2ZX1kaXY6d2hlcmUoLnN3YWwyLWNvbnRhaW5lcikgLnN3YWwyLXByb2dyZXNzLXN0ZXBzIC5zd2FsMi1wcm9ncmVzcy1zdGVwe3otaW5kZXg6MjA7ZmxleC1zaHJpbms6MDt3aWR0aDoyZW07aGVpZ2h0OjJlbTtib3JkZXItcmFkaXVzOjJlbTtiYWNrZ3JvdW5kOiMyNzc4YzQ7Y29sb3I6I2ZmZjtsaW5lLWhlaWdodDoyZW07dGV4dC1hbGlnbjpjZW50ZXJ9ZGl2OndoZXJlKC5zd2FsMi1jb250YWluZXIpIC5zd2FsMi1wcm9ncmVzcy1zdGVwcyAuc3dhbDItcHJvZ3Jlc3Mtc3RlcC5zd2FsMi1hY3RpdmUtcHJvZ3Jlc3Mtc3RlcHtiYWNrZ3JvdW5kOiMyNzc4YzR9ZGl2OndoZXJlKC5zd2FsMi1jb250YWluZXIpIC5zd2FsMi1wcm9ncmVzcy1zdGVwcyAuc3dhbDItcHJvZ3Jlc3Mtc3RlcC5zd2FsMi1hY3RpdmUtcHJvZ3Jlc3Mtc3RlcH4uc3dhbDItcHJvZ3Jlc3Mtc3RlcHtiYWNrZ3JvdW5kOiNhZGQ4ZTY7Y29sb3I6I2ZmZn1kaXY6d2hlcmUoLnN3YWwyLWNvbnRhaW5lcikgLnN3YWwyLXByb2dyZXNzLXN0ZXBzIC5zd2FsMi1wcm9ncmVzcy1zdGVwLnN3YWwyLWFjdGl2ZS1wcm9ncmVzcy1zdGVwfi5zd2FsMi1wcm9ncmVzcy1zdGVwLWxpbmV7YmFja2dyb3VuZDojYWRkOGU2fWRpdjp3aGVyZSguc3dhbDItY29udGFpbmVyKSAuc3dhbDItcHJvZ3Jlc3Mtc3RlcHMgLnN3YWwyLXByb2dyZXNzLXN0ZXAtbGluZXt6LWluZGV4OjEwO2ZsZXgtc2hyaW5rOjA7d2lkdGg6Mi41ZW07aGVpZ2h0Oi40ZW07bWFyZ2luOjAgLTFweDtiYWNrZ3JvdW5kOiMyNzc4YzR9ZGl2OndoZXJlKC5zd2FsMi1pY29uKXtwb3NpdGlvbjpyZWxhdGl2ZTtib3gtc2l6aW5nOmNvbnRlbnQtYm94O2p1c3RpZnktY29udGVudDpjZW50ZXI7d2lkdGg6NWVtO2hlaWdodDo1ZW07bWFyZ2luOjIuNWVtIGF1dG8gLjZlbTtib3JkZXI6MC4yNWVtIHNvbGlkIHJnYmEoMCwwLDAsMCk7Ym9yZGVyLXJhZGl1czo1MCU7Ym9yZGVyLWNvbG9yOiMwMDA7Zm9udC1mYW1pbHk6aW5oZXJpdDtsaW5lLWhlaWdodDo1ZW07Y3Vyc29yOmRlZmF1bHQ7dXNlci1zZWxlY3Q6bm9uZX1kaXY6d2hlcmUoLnN3YWwyLWljb24pIC5zd2FsMi1pY29uLWNvbnRlbnR7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtmb250LXNpemU6My43NWVtfWRpdjp3aGVyZSguc3dhbDItaWNvbikuc3dhbDItZXJyb3J7Ym9yZGVyLWNvbG9yOiNmMjc0NzQ7Y29sb3I6I2YyNzQ3NH1kaXY6d2hlcmUoLnN3YWwyLWljb24pLnN3YWwyLWVycm9yIC5zd2FsMi14LW1hcmt7cG9zaXRpb246cmVsYXRpdmU7ZmxleC1ncm93OjF9ZGl2OndoZXJlKC5zd2FsMi1pY29uKS5zd2FsMi1lcnJvciBbY2xhc3NePXN3YWwyLXgtbWFyay1saW5lXXtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO3RvcDoyLjMxMjVlbTt3aWR0aDoyLjkzNzVlbTtoZWlnaHQ6LjMxMjVlbTtib3JkZXItcmFkaXVzOi4xMjVlbTtiYWNrZ3JvdW5kLWNvbG9yOiNmMjc0NzR9ZGl2OndoZXJlKC5zd2FsMi1pY29uKS5zd2FsMi1lcnJvciBbY2xhc3NePXN3YWwyLXgtbWFyay1saW5lXVtjbGFzcyQ9bGVmdF17bGVmdDoxLjA2MjVlbTt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKX1kaXY6d2hlcmUoLnN3YWwyLWljb24pLnN3YWwyLWVycm9yIFtjbGFzc149c3dhbDIteC1tYXJrLWxpbmVdW2NsYXNzJD1yaWdodF17cmlnaHQ6MWVtO3RyYW5zZm9ybTpyb3RhdGUoLTQ1ZGVnKX1kaXY6d2hlcmUoLnN3YWwyLWljb24pLnN3YWwyLWVycm9yLnN3YWwyLWljb24tc2hvd3thbmltYXRpb246c3dhbDItYW5pbWF0ZS1lcnJvci1pY29uIC41c31kaXY6d2hlcmUoLnN3YWwyLWljb24pLnN3YWwyLWVycm9yLnN3YWwyLWljb24tc2hvdyAuc3dhbDIteC1tYXJre2FuaW1hdGlvbjpzd2FsMi1hbmltYXRlLWVycm9yLXgtbWFyayAuNXN9ZGl2OndoZXJlKC5zd2FsMi1pY29uKS5zd2FsMi13YXJuaW5ne2JvcmRlci1jb2xvcjojZmFjZWE4O2NvbG9yOiNmOGJiODZ9ZGl2OndoZXJlKC5zd2FsMi1pY29uKS5zd2FsMi13YXJuaW5nLnN3YWwyLWljb24tc2hvd3thbmltYXRpb246c3dhbDItYW5pbWF0ZS1lcnJvci1pY29uIC41c31kaXY6d2hlcmUoLnN3YWwyLWljb24pLnN3YWwyLXdhcm5pbmcuc3dhbDItaWNvbi1zaG93IC5zd2FsMi1pY29uLWNvbnRlbnR7YW5pbWF0aW9uOnN3YWwyLWFuaW1hdGUtaS1tYXJrIC41c31kaXY6d2hlcmUoLnN3YWwyLWljb24pLnN3YWwyLWluZm97Ym9yZGVyLWNvbG9yOiM5ZGUwZjY7Y29sb3I6IzNmYzNlZX1kaXY6d2hlcmUoLnN3YWwyLWljb24pLnN3YWwyLWluZm8uc3dhbDItaWNvbi1zaG93e2FuaW1hdGlvbjpzd2FsMi1hbmltYXRlLWVycm9yLWljb24gLjVzfWRpdjp3aGVyZSguc3dhbDItaWNvbikuc3dhbDItaW5mby5zd2FsMi1pY29uLXNob3cgLnN3YWwyLWljb24tY29udGVudHthbmltYXRpb246c3dhbDItYW5pbWF0ZS1pLW1hcmsgLjhzfWRpdjp3aGVyZSguc3dhbDItaWNvbikuc3dhbDItcXVlc3Rpb257Ym9yZGVyLWNvbG9yOiNjOWRhZTE7Y29sb3I6Izg3YWRiZH1kaXY6d2hlcmUoLnN3YWwyLWljb24pLnN3YWwyLXF1ZXN0aW9uLnN3YWwyLWljb24tc2hvd3thbmltYXRpb246c3dhbDItYW5pbWF0ZS1lcnJvci1pY29uIC41c31kaXY6d2hlcmUoLnN3YWwyLWljb24pLnN3YWwyLXF1ZXN0aW9uLnN3YWwyLWljb24tc2hvdyAuc3dhbDItaWNvbi1jb250ZW50e2FuaW1hdGlvbjpzd2FsMi1hbmltYXRlLXF1ZXN0aW9uLW1hcmsgLjhzfWRpdjp3aGVyZSguc3dhbDItaWNvbikuc3dhbDItc3VjY2Vzc3tib3JkZXItY29sb3I6I2E1ZGM4Njtjb2xvcjojYTVkYzg2fWRpdjp3aGVyZSguc3dhbDItaWNvbikuc3dhbDItc3VjY2VzcyBbY2xhc3NePXN3YWwyLXN1Y2Nlc3MtY2lyY3VsYXItbGluZV17cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6My43NWVtO2hlaWdodDo3LjVlbTt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKTtib3JkZXItcmFkaXVzOjUwJX1kaXY6d2hlcmUoLnN3YWwyLWljb24pLnN3YWwyLXN1Y2Nlc3MgW2NsYXNzXj1zd2FsMi1zdWNjZXNzLWNpcmN1bGFyLWxpbmVdW2NsYXNzJD1sZWZ0XXt0b3A6LTAuNDM3NWVtO2xlZnQ6LTIuMDYzNWVtO3RyYW5zZm9ybTpyb3RhdGUoLTQ1ZGVnKTt0cmFuc2Zvcm0tb3JpZ2luOjMuNzVlbSAzLjc1ZW07Ym9yZGVyLXJhZGl1czo3LjVlbSAwIDAgNy41ZW19ZGl2OndoZXJlKC5zd2FsMi1pY29uKS5zd2FsMi1zdWNjZXNzIFtjbGFzc149c3dhbDItc3VjY2Vzcy1jaXJjdWxhci1saW5lXVtjbGFzcyQ9cmlnaHRde3RvcDotMC42ODc1ZW07bGVmdDoxLjg3NWVtO3RyYW5zZm9ybTpyb3RhdGUoLTQ1ZGVnKTt0cmFuc2Zvcm0tb3JpZ2luOjAgMy43NWVtO2JvcmRlci1yYWRpdXM6MCA3LjVlbSA3LjVlbSAwfWRpdjp3aGVyZSguc3dhbDItaWNvbikuc3dhbDItc3VjY2VzcyAuc3dhbDItc3VjY2Vzcy1yaW5ne3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6Mjt0b3A6LTAuMjVlbTtsZWZ0Oi0wLjI1ZW07Ym94LXNpemluZzpjb250ZW50LWJveDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JvcmRlcjouMjVlbSBzb2xpZCByZ2JhKDE2NSwyMjAsMTM0LC4zKTtib3JkZXItcmFkaXVzOjUwJX1kaXY6d2hlcmUoLnN3YWwyLWljb24pLnN3YWwyLXN1Y2Nlc3MgLnN3YWwyLXN1Y2Nlc3MtZml4e3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTt0b3A6LjVlbTtsZWZ0OjEuNjI1ZW07d2lkdGg6LjQzNzVlbTtoZWlnaHQ6NS42MjVlbTt0cmFuc2Zvcm06cm90YXRlKC00NWRlZyl9ZGl2OndoZXJlKC5zd2FsMi1pY29uKS5zd2FsMi1zdWNjZXNzIFtjbGFzc149c3dhbDItc3VjY2Vzcy1saW5lXXtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MjtoZWlnaHQ6LjMxMjVlbTtib3JkZXItcmFkaXVzOi4xMjVlbTtiYWNrZ3JvdW5kLWNvbG9yOiNhNWRjODZ9ZGl2OndoZXJlKC5zd2FsMi1pY29uKS5zd2FsMi1zdWNjZXNzIFtjbGFzc149c3dhbDItc3VjY2Vzcy1saW5lXVtjbGFzcyQ9dGlwXXt0b3A6Mi44NzVlbTtsZWZ0Oi44MTI1ZW07d2lkdGg6MS41NjI1ZW07dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZyl9ZGl2OndoZXJlKC5zd2FsMi1pY29uKS5zd2FsMi1zdWNjZXNzIFtjbGFzc149c3dhbDItc3VjY2Vzcy1saW5lXVtjbGFzcyQ9bG9uZ117dG9wOjIuMzc1ZW07cmlnaHQ6LjVlbTt3aWR0aDoyLjkzNzVlbTt0cmFuc2Zvcm06cm90YXRlKC00NWRlZyl9ZGl2OndoZXJlKC5zd2FsMi1pY29uKS5zd2FsMi1zdWNjZXNzLnN3YWwyLWljb24tc2hvdyAuc3dhbDItc3VjY2Vzcy1saW5lLXRpcHthbmltYXRpb246c3dhbDItYW5pbWF0ZS1zdWNjZXNzLWxpbmUtdGlwIC43NXN9ZGl2OndoZXJlKC5zd2FsMi1pY29uKS5zd2FsMi1zdWNjZXNzLnN3YWwyLWljb24tc2hvdyAuc3dhbDItc3VjY2Vzcy1saW5lLWxvbmd7YW5pbWF0aW9uOnN3YWwyLWFuaW1hdGUtc3VjY2Vzcy1saW5lLWxvbmcgLjc1c31kaXY6d2hlcmUoLnN3YWwyLWljb24pLnN3YWwyLXN1Y2Nlc3Muc3dhbDItaWNvbi1zaG93IC5zd2FsMi1zdWNjZXNzLWNpcmN1bGFyLWxpbmUtcmlnaHR7YW5pbWF0aW9uOnN3YWwyLXJvdGF0ZS1zdWNjZXNzLWNpcmN1bGFyLWxpbmUgNC4yNXMgZWFzZS1pbn1bY2xhc3NePXN3YWwyXXstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6cmdiYSgwLDAsMCwwKX0uc3dhbDItc2hvd3thbmltYXRpb246c3dhbDItc2hvdyAuM3N9LnN3YWwyLWhpZGV7YW5pbWF0aW9uOnN3YWwyLWhpZGUgLjE1cyBmb3J3YXJkc30uc3dhbDItbm9hbmltYXRpb257dHJhbnNpdGlvbjpub25lfS5zd2FsMi1zY3JvbGxiYXItbWVhc3VyZXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6LTk5OTlweDt3aWR0aDo1MHB4O2hlaWdodDo1MHB4O292ZXJmbG93OnNjcm9sbH0uc3dhbDItcnRsIC5zd2FsMi1jbG9zZXttYXJnaW4tcmlnaHQ6aW5pdGlhbDttYXJnaW4tbGVmdDowfS5zd2FsMi1ydGwgLnN3YWwyLXRpbWVyLXByb2dyZXNzLWJhcntyaWdodDowO2xlZnQ6YXV0b31Aa2V5ZnJhbWVzIHN3YWwyLXRvYXN0LXNob3d7MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNjI1ZW0pIHJvdGF0ZVooMmRlZyl9MzMle3RyYW5zZm9ybTp0cmFuc2xhdGVZKDApIHJvdGF0ZVooLTJkZWcpfTY2JXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgwLjMxMjVlbSkgcm90YXRlWigyZGVnKX0xMDAle3RyYW5zZm9ybTp0cmFuc2xhdGVZKDApIHJvdGF0ZVooMGRlZyl9fUBrZXlmcmFtZXMgc3dhbDItdG9hc3QtaGlkZXsxMDAle3RyYW5zZm9ybTpyb3RhdGVaKDFkZWcpO29wYWNpdHk6MH19QGtleWZyYW1lcyBzd2FsMi10b2FzdC1hbmltYXRlLXN1Y2Nlc3MtbGluZS10aXB7MCV7dG9wOi41NjI1ZW07bGVmdDouMDYyNWVtO3dpZHRoOjB9NTQle3RvcDouMTI1ZW07bGVmdDouMTI1ZW07d2lkdGg6MH03MCV7dG9wOi42MjVlbTtsZWZ0Oi0wLjI1ZW07d2lkdGg6MS42MjVlbX04NCV7dG9wOjEuMDYyNWVtO2xlZnQ6Ljc1ZW07d2lkdGg6LjVlbX0xMDAle3RvcDoxLjEyNWVtO2xlZnQ6LjE4NzVlbTt3aWR0aDouNzVlbX19QGtleWZyYW1lcyBzd2FsMi10b2FzdC1hbmltYXRlLXN1Y2Nlc3MtbGluZS1sb25nezAle3RvcDoxLjYyNWVtO3JpZ2h0OjEuMzc1ZW07d2lkdGg6MH02NSV7dG9wOjEuMjVlbTtyaWdodDouOTM3NWVtO3dpZHRoOjB9ODQle3RvcDouOTM3NWVtO3JpZ2h0OjA7d2lkdGg6MS4xMjVlbX0xMDAle3RvcDouOTM3NWVtO3JpZ2h0Oi4xODc1ZW07d2lkdGg6MS4zNzVlbX19QGtleWZyYW1lcyBzd2FsMi1zaG93ezAle3RyYW5zZm9ybTpzY2FsZSgwLjcpfTQ1JXt0cmFuc2Zvcm06c2NhbGUoMS4wNSl9ODAle3RyYW5zZm9ybTpzY2FsZSgwLjk1KX0xMDAle3RyYW5zZm9ybTpzY2FsZSgxKX19QGtleWZyYW1lcyBzd2FsMi1oaWRlezAle3RyYW5zZm9ybTpzY2FsZSgxKTtvcGFjaXR5OjF9MTAwJXt0cmFuc2Zvcm06c2NhbGUoMC41KTtvcGFjaXR5OjB9fUBrZXlmcmFtZXMgc3dhbDItYW5pbWF0ZS1zdWNjZXNzLWxpbmUtdGlwezAle3RvcDoxLjE4NzVlbTtsZWZ0Oi4wNjI1ZW07d2lkdGg6MH01NCV7dG9wOjEuMDYyNWVtO2xlZnQ6LjEyNWVtO3dpZHRoOjB9NzAle3RvcDoyLjE4NzVlbTtsZWZ0Oi0wLjM3NWVtO3dpZHRoOjMuMTI1ZW19ODQle3RvcDozZW07bGVmdDoxLjMxMjVlbTt3aWR0aDoxLjA2MjVlbX0xMDAle3RvcDoyLjgxMjVlbTtsZWZ0Oi44MTI1ZW07d2lkdGg6MS41NjI1ZW19fUBrZXlmcmFtZXMgc3dhbDItYW5pbWF0ZS1zdWNjZXNzLWxpbmUtbG9uZ3swJXt0b3A6My4zNzVlbTtyaWdodDoyLjg3NWVtO3dpZHRoOjB9NjUle3RvcDozLjM3NWVtO3JpZ2h0OjIuODc1ZW07d2lkdGg6MH04NCV7dG9wOjIuMTg3NWVtO3JpZ2h0OjA7d2lkdGg6My40Mzc1ZW19MTAwJXt0b3A6Mi4zNzVlbTtyaWdodDouNWVtO3dpZHRoOjIuOTM3NWVtfX1Aa2V5ZnJhbWVzIHN3YWwyLXJvdGF0ZS1zdWNjZXNzLWNpcmN1bGFyLWxpbmV7MCV7dHJhbnNmb3JtOnJvdGF0ZSgtNDVkZWcpfTUle3RyYW5zZm9ybTpyb3RhdGUoLTQ1ZGVnKX0xMiV7dHJhbnNmb3JtOnJvdGF0ZSgtNDA1ZGVnKX0xMDAle3RyYW5zZm9ybTpyb3RhdGUoLTQwNWRlZyl9fUBrZXlmcmFtZXMgc3dhbDItYW5pbWF0ZS1lcnJvci14LW1hcmt7MCV7bWFyZ2luLXRvcDoxLjYyNWVtO3RyYW5zZm9ybTpzY2FsZSgwLjQpO29wYWNpdHk6MH01MCV7bWFyZ2luLXRvcDoxLjYyNWVtO3RyYW5zZm9ybTpzY2FsZSgwLjQpO29wYWNpdHk6MH04MCV7bWFyZ2luLXRvcDotMC4zNzVlbTt0cmFuc2Zvcm06c2NhbGUoMS4xNSl9MTAwJXttYXJnaW4tdG9wOjA7dHJhbnNmb3JtOnNjYWxlKDEpO29wYWNpdHk6MX19QGtleWZyYW1lcyBzd2FsMi1hbmltYXRlLWVycm9yLWljb257MCV7dHJhbnNmb3JtOnJvdGF0ZVgoMTAwZGVnKTtvcGFjaXR5OjB9MTAwJXt0cmFuc2Zvcm06cm90YXRlWCgwZGVnKTtvcGFjaXR5OjF9fUBrZXlmcmFtZXMgc3dhbDItcm90YXRlLWxvYWRpbmd7MCV7dHJhbnNmb3JtOnJvdGF0ZSgwZGVnKX0xMDAle3RyYW5zZm9ybTpyb3RhdGUoMzYwZGVnKX19QGtleWZyYW1lcyBzd2FsMi1hbmltYXRlLXF1ZXN0aW9uLW1hcmt7MCV7dHJhbnNmb3JtOnJvdGF0ZVkoLTM2MGRlZyl9MTAwJXt0cmFuc2Zvcm06cm90YXRlWSgwKX19QGtleWZyYW1lcyBzd2FsMi1hbmltYXRlLWktbWFya3swJXt0cmFuc2Zvcm06cm90YXRlWig0NWRlZyk7b3BhY2l0eTowfTI1JXt0cmFuc2Zvcm06cm90YXRlWigtMjVkZWcpO29wYWNpdHk6LjR9NTAle3RyYW5zZm9ybTpyb3RhdGVaKDE1ZGVnKTtvcGFjaXR5Oi44fTc1JXt0cmFuc2Zvcm06cm90YXRlWigtNWRlZyk7b3BhY2l0eToxfTEwMCV7dHJhbnNmb3JtOnJvdGF0ZVgoMCk7b3BhY2l0eToxfX1ib2R5LnN3YWwyLXNob3duOm5vdCguc3dhbDItbm8tYmFja2Ryb3ApOm5vdCguc3dhbDItdG9hc3Qtc2hvd24pe292ZXJmbG93OmhpZGRlbn1ib2R5LnN3YWwyLWhlaWdodC1hdXRve2hlaWdodDphdXRvICFpbXBvcnRhbnR9Ym9keS5zd2FsMi1uby1iYWNrZHJvcCAuc3dhbDItY29udGFpbmVye2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwwKSAhaW1wb3J0YW50O3BvaW50ZXItZXZlbnRzOm5vbmV9Ym9keS5zd2FsMi1uby1iYWNrZHJvcCAuc3dhbDItY29udGFpbmVyIC5zd2FsMi1wb3B1cHtwb2ludGVyLWV2ZW50czphbGx9Ym9keS5zd2FsMi1uby1iYWNrZHJvcCAuc3dhbDItY29udGFpbmVyIC5zd2FsMi1tb2RhbHtib3gtc2hhZG93OjAgMCAxMHB4IHJnYmEoMCwwLDAsLjQpfUBtZWRpYSBwcmludHtib2R5LnN3YWwyLXNob3duOm5vdCguc3dhbDItbm8tYmFja2Ryb3ApOm5vdCguc3dhbDItdG9hc3Qtc2hvd24pe292ZXJmbG93LXk6c2Nyb2xsICFpbXBvcnRhbnR9Ym9keS5zd2FsMi1zaG93bjpub3QoLnN3YWwyLW5vLWJhY2tkcm9wKTpub3QoLnN3YWwyLXRvYXN0LXNob3duKT5bYXJpYS1oaWRkZW49dHJ1ZV17ZGlzcGxheTpub25lfWJvZHkuc3dhbDItc2hvd246bm90KC5zd2FsMi1uby1iYWNrZHJvcCk6bm90KC5zd2FsMi10b2FzdC1zaG93bikgLnN3YWwyLWNvbnRhaW5lcntwb3NpdGlvbjpzdGF0aWMgIWltcG9ydGFudH19Ym9keS5zd2FsMi10b2FzdC1zaG93biAuc3dhbDItY29udGFpbmVye2JveC1zaXppbmc6Ym9yZGVyLWJveDt3aWR0aDozNjBweDttYXgtd2lkdGg6MTAwJTtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsMCk7cG9pbnRlci1ldmVudHM6bm9uZX1ib2R5LnN3YWwyLXRvYXN0LXNob3duIC5zd2FsMi1jb250YWluZXIuc3dhbDItdG9we2luc2V0OjAgYXV0byBhdXRvIDUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtNTAlKX1ib2R5LnN3YWwyLXRvYXN0LXNob3duIC5zd2FsMi1jb250YWluZXIuc3dhbDItdG9wLWVuZCxib2R5LnN3YWwyLXRvYXN0LXNob3duIC5zd2FsMi1jb250YWluZXIuc3dhbDItdG9wLXJpZ2h0e2luc2V0OjAgMCBhdXRvIGF1dG99Ym9keS5zd2FsMi10b2FzdC1zaG93biAuc3dhbDItY29udGFpbmVyLnN3YWwyLXRvcC1zdGFydCxib2R5LnN3YWwyLXRvYXN0LXNob3duIC5zd2FsMi1jb250YWluZXIuc3dhbDItdG9wLWxlZnR7aW5zZXQ6MCBhdXRvIGF1dG8gMH1ib2R5LnN3YWwyLXRvYXN0LXNob3duIC5zd2FsMi1jb250YWluZXIuc3dhbDItY2VudGVyLXN0YXJ0LGJvZHkuc3dhbDItdG9hc3Qtc2hvd24gLnN3YWwyLWNvbnRhaW5lci5zd2FsMi1jZW50ZXItbGVmdHtpbnNldDo1MCUgYXV0byBhdXRvIDA7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSl9Ym9keS5zd2FsMi10b2FzdC1zaG93biAuc3dhbDItY29udGFpbmVyLnN3YWwyLWNlbnRlcntpbnNldDo1MCUgYXV0byBhdXRvIDUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsIC01MCUpfWJvZHkuc3dhbDItdG9hc3Qtc2hvd24gLnN3YWwyLWNvbnRhaW5lci5zd2FsMi1jZW50ZXItZW5kLGJvZHkuc3dhbDItdG9hc3Qtc2hvd24gLnN3YWwyLWNvbnRhaW5lci5zd2FsMi1jZW50ZXItcmlnaHR7aW5zZXQ6NTAlIDAgYXV0byBhdXRvO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC01MCUpfWJvZHkuc3dhbDItdG9hc3Qtc2hvd24gLnN3YWwyLWNvbnRhaW5lci5zd2FsMi1ib3R0b20tc3RhcnQsYm9keS5zd2FsMi10b2FzdC1zaG93biAuc3dhbDItY29udGFpbmVyLnN3YWwyLWJvdHRvbS1sZWZ0e2luc2V0OmF1dG8gYXV0byAwIDB9Ym9keS5zd2FsMi10b2FzdC1zaG93biAuc3dhbDItY29udGFpbmVyLnN3YWwyLWJvdHRvbXtpbnNldDphdXRvIGF1dG8gMCA1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTUwJSl9Ym9keS5zd2FsMi10b2FzdC1zaG93biAuc3dhbDItY29udGFpbmVyLnN3YWwyLWJvdHRvbS1lbmQsYm9keS5zd2FsMi10b2FzdC1zaG93biAuc3dhbDItY29udGFpbmVyLnN3YWwyLWJvdHRvbS1yaWdodHtpbnNldDphdXRvIDAgMCBhdXRvfVwiKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/sweetalert2/dist/sweetalert2.all.js\n");

/***/ }),

/***/ "./node_modules/throttle-debounce/debounce.js":
/*!****************************************************!*\
  !*** ./node_modules/throttle-debounce/debounce.js ***!
  \****************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

eval("/* eslint-disable no-undefined */\n\nvar throttle = __webpack_require__(/*! ./throttle */ \"./node_modules/throttle-debounce/throttle.js\");\n\n/**\n * Debounce execution of a function. Debouncing, unlike throttling,\n * guarantees that a function is only executed a single time, either at the\n * very beginning of a series of calls, or at the very end.\n *\n * @param  {Number}   delay         A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful.\n * @param  {Boolean}  [atBegin]     Optional, defaults to false. If atBegin is false or unspecified, callback will only be executed `delay` milliseconds\n *                                  after the last debounced-function call. If atBegin is true, callback will be executed only at the first debounced-function call.\n *                                  (After the throttled-function has not been called for `delay` milliseconds, the internal counter is reset).\n * @param  {Function} callback      A function to be executed after delay milliseconds. The `this` context and all arguments are passed through, as-is,\n *                                  to `callback` when the debounced-function is executed.\n *\n * @return {Function} A new, debounced function.\n */\nmodule.exports = function ( delay, atBegin, callback ) {\n\treturn callback === undefined ? throttle(delay, atBegin, false) : throttle(delay, callback, atBegin !== false);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvdGhyb3R0bGUtZGVib3VuY2UvZGVib3VuY2UuanMiLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUEsZUFBZSxtQkFBTyxDQUFDLGdFQUFZOztBQUVuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxVQUFVO0FBQ3RCLFlBQVksVUFBVTtBQUN0QjtBQUNBO0FBQ0EsWUFBWSxVQUFVO0FBQ3RCO0FBQ0E7QUFDQSxZQUFZLFVBQVU7QUFDdEI7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdGhyb3R0bGUtZGVib3VuY2UvZGVib3VuY2UuanM/ZGVkMCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlZmluZWQgKi9cblxudmFyIHRocm90dGxlID0gcmVxdWlyZSgnLi90aHJvdHRsZScpO1xuXG4vKipcbiAqIERlYm91bmNlIGV4ZWN1dGlvbiBvZiBhIGZ1bmN0aW9uLiBEZWJvdW5jaW5nLCB1bmxpa2UgdGhyb3R0bGluZyxcbiAqIGd1YXJhbnRlZXMgdGhhdCBhIGZ1bmN0aW9uIGlzIG9ubHkgZXhlY3V0ZWQgYSBzaW5nbGUgdGltZSwgZWl0aGVyIGF0IHRoZVxuICogdmVyeSBiZWdpbm5pbmcgb2YgYSBzZXJpZXMgb2YgY2FsbHMsIG9yIGF0IHRoZSB2ZXJ5IGVuZC5cbiAqXG4gKiBAcGFyYW0gIHtOdW1iZXJ9ICAgZGVsYXkgICAgICAgICBBIHplcm8tb3ItZ3JlYXRlciBkZWxheSBpbiBtaWxsaXNlY29uZHMuIEZvciBldmVudCBjYWxsYmFja3MsIHZhbHVlcyBhcm91bmQgMTAwIG9yIDI1MCAob3IgZXZlbiBoaWdoZXIpIGFyZSBtb3N0IHVzZWZ1bC5cbiAqIEBwYXJhbSAge0Jvb2xlYW59ICBbYXRCZWdpbl0gICAgIE9wdGlvbmFsLCBkZWZhdWx0cyB0byBmYWxzZS4gSWYgYXRCZWdpbiBpcyBmYWxzZSBvciB1bnNwZWNpZmllZCwgY2FsbGJhY2sgd2lsbCBvbmx5IGJlIGV4ZWN1dGVkIGBkZWxheWAgbWlsbGlzZWNvbmRzXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZnRlciB0aGUgbGFzdCBkZWJvdW5jZWQtZnVuY3Rpb24gY2FsbC4gSWYgYXRCZWdpbiBpcyB0cnVlLCBjYWxsYmFjayB3aWxsIGJlIGV4ZWN1dGVkIG9ubHkgYXQgdGhlIGZpcnN0IGRlYm91bmNlZC1mdW5jdGlvbiBjYWxsLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEFmdGVyIHRoZSB0aHJvdHRsZWQtZnVuY3Rpb24gaGFzIG5vdCBiZWVuIGNhbGxlZCBmb3IgYGRlbGF5YCBtaWxsaXNlY29uZHMsIHRoZSBpbnRlcm5hbCBjb3VudGVyIGlzIHJlc2V0KS5cbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBjYWxsYmFjayAgICAgIEEgZnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWQgYWZ0ZXIgZGVsYXkgbWlsbGlzZWNvbmRzLiBUaGUgYHRoaXNgIGNvbnRleHQgYW5kIGFsbCBhcmd1bWVudHMgYXJlIHBhc3NlZCB0aHJvdWdoLCBhcy1pcyxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGBjYWxsYmFja2Agd2hlbiB0aGUgZGVib3VuY2VkLWZ1bmN0aW9uIGlzIGV4ZWN1dGVkLlxuICpcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSBBIG5ldywgZGVib3VuY2VkIGZ1bmN0aW9uLlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICggZGVsYXksIGF0QmVnaW4sIGNhbGxiYWNrICkge1xuXHRyZXR1cm4gY2FsbGJhY2sgPT09IHVuZGVmaW5lZCA/IHRocm90dGxlKGRlbGF5LCBhdEJlZ2luLCBmYWxzZSkgOiB0aHJvdHRsZShkZWxheSwgY2FsbGJhY2ssIGF0QmVnaW4gIT09IGZhbHNlKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/throttle-debounce/debounce.js\n");

/***/ }),

/***/ "./node_modules/throttle-debounce/index.js":
/*!*************************************************!*\
  !*** ./node_modules/throttle-debounce/index.js ***!
  \*************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

eval("var throttle = __webpack_require__(/*! ./throttle */ \"./node_modules/throttle-debounce/throttle.js\");\nvar debounce = __webpack_require__(/*! ./debounce */ \"./node_modules/throttle-debounce/debounce.js\");\n\nmodule.exports = {\n\tthrottle: throttle,\n\tdebounce: debounce\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvdGhyb3R0bGUtZGVib3VuY2UvaW5kZXguanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxtQkFBTyxDQUFDLGdFQUFZO0FBQ25DLGVBQWUsbUJBQU8sQ0FBQyxnRUFBWTs7QUFFbkM7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdGhyb3R0bGUtZGVib3VuY2UvaW5kZXguanM/ODhmOCJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgdGhyb3R0bGUgPSByZXF1aXJlKCcuL3Rocm90dGxlJyk7XG52YXIgZGVib3VuY2UgPSByZXF1aXJlKCcuL2RlYm91bmNlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuXHR0aHJvdHRsZTogdGhyb3R0bGUsXG5cdGRlYm91bmNlOiBkZWJvdW5jZVxufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/throttle-debounce/index.js\n");

/***/ }),

/***/ "./node_modules/throttle-debounce/throttle.js":
/*!****************************************************!*\
  !*** ./node_modules/throttle-debounce/throttle.js ***!
  \****************************************************/
/***/ ((module) => {

eval("/* eslint-disable no-undefined,no-param-reassign,no-shadow */\n\n/**\n * Throttle execution of a function. Especially useful for rate limiting\n * execution of handlers on events like resize and scroll.\n *\n * @param  {Number}    delay          A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful.\n * @param  {Boolean}   [noTrailing]   Optional, defaults to false. If noTrailing is true, callback will only execute every `delay` milliseconds while the\n *                                    throttled-function is being called. If noTrailing is false or unspecified, callback will be executed one final time\n *                                    after the last throttled-function call. (After the throttled-function has not been called for `delay` milliseconds,\n *                                    the internal counter is reset)\n * @param  {Function}  callback       A function to be executed after delay milliseconds. The `this` context and all arguments are passed through, as-is,\n *                                    to `callback` when the throttled-function is executed.\n * @param  {Boolean}   [debounceMode] If `debounceMode` is true (at begin), schedule `clear` to execute after `delay` ms. If `debounceMode` is false (at end),\n *                                    schedule `callback` to execute after `delay` ms.\n *\n * @return {Function}  A new, throttled, function.\n */\nmodule.exports = function ( delay, noTrailing, callback, debounceMode ) {\n\n\t// After wrapper has stopped being called, this timeout ensures that\n\t// `callback` is executed at the proper times in `throttle` and `end`\n\t// debounce modes.\n\tvar timeoutID;\n\n\t// Keep track of the last time `callback` was executed.\n\tvar lastExec = 0;\n\n\t// `noTrailing` defaults to falsy.\n\tif ( typeof noTrailing !== 'boolean' ) {\n\t\tdebounceMode = callback;\n\t\tcallback = noTrailing;\n\t\tnoTrailing = undefined;\n\t}\n\n\t// The `wrapper` function encapsulates all of the throttling / debouncing\n\t// functionality and when executed will limit the rate at which `callback`\n\t// is executed.\n\tfunction wrapper () {\n\n\t\tvar self = this;\n\t\tvar elapsed = Number(new Date()) - lastExec;\n\t\tvar args = arguments;\n\n\t\t// Execute `callback` and update the `lastExec` timestamp.\n\t\tfunction exec () {\n\t\t\tlastExec = Number(new Date());\n\t\t\tcallback.apply(self, args);\n\t\t}\n\n\t\t// If `debounceMode` is true (at begin) this is used to clear the flag\n\t\t// to allow future `callback` executions.\n\t\tfunction clear () {\n\t\t\ttimeoutID = undefined;\n\t\t}\n\n\t\tif ( debounceMode && !timeoutID ) {\n\t\t\t// Since `wrapper` is being called for the first time and\n\t\t\t// `debounceMode` is true (at begin), execute `callback`.\n\t\t\texec();\n\t\t}\n\n\t\t// Clear any existing timeout.\n\t\tif ( timeoutID ) {\n\t\t\tclearTimeout(timeoutID);\n\t\t}\n\n\t\tif ( debounceMode === undefined && elapsed > delay ) {\n\t\t\t// In throttle mode, if `delay` time has been exceeded, execute\n\t\t\t// `callback`.\n\t\t\texec();\n\n\t\t} else if ( noTrailing !== true ) {\n\t\t\t// In trailing throttle mode, since `delay` time has not been\n\t\t\t// exceeded, schedule `callback` to execute `delay` ms after most\n\t\t\t// recent execution.\n\t\t\t//\n\t\t\t// If `debounceMode` is true (at begin), schedule `clear` to execute\n\t\t\t// after `delay` ms.\n\t\t\t//\n\t\t\t// If `debounceMode` is false (at end), schedule `callback` to\n\t\t\t// execute after `delay` ms.\n\t\t\ttimeoutID = setTimeout(debounceMode ? clear : exec, debounceMode === undefined ? delay - elapsed : delay);\n\t\t}\n\n\t}\n\n\t// Return the wrapper function.\n\treturn wrapper;\n\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvdGhyb3R0bGUtZGVib3VuY2UvdGhyb3R0bGUuanMiLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLFdBQVc7QUFDdkIsWUFBWSxXQUFXO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBLFlBQVksV0FBVztBQUN2QjtBQUNBLFlBQVksV0FBVztBQUN2QjtBQUNBO0FBQ0EsWUFBWSxXQUFXO0FBQ3ZCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdGhyb3R0bGUtZGVib3VuY2UvdGhyb3R0bGUuanM/YTdmOSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlZmluZWQsbm8tcGFyYW0tcmVhc3NpZ24sbm8tc2hhZG93ICovXG5cbi8qKlxuICogVGhyb3R0bGUgZXhlY3V0aW9uIG9mIGEgZnVuY3Rpb24uIEVzcGVjaWFsbHkgdXNlZnVsIGZvciByYXRlIGxpbWl0aW5nXG4gKiBleGVjdXRpb24gb2YgaGFuZGxlcnMgb24gZXZlbnRzIGxpa2UgcmVzaXplIGFuZCBzY3JvbGwuXG4gKlxuICogQHBhcmFtICB7TnVtYmVyfSAgICBkZWxheSAgICAgICAgICBBIHplcm8tb3ItZ3JlYXRlciBkZWxheSBpbiBtaWxsaXNlY29uZHMuIEZvciBldmVudCBjYWxsYmFja3MsIHZhbHVlcyBhcm91bmQgMTAwIG9yIDI1MCAob3IgZXZlbiBoaWdoZXIpIGFyZSBtb3N0IHVzZWZ1bC5cbiAqIEBwYXJhbSAge0Jvb2xlYW59ICAgW25vVHJhaWxpbmddICAgT3B0aW9uYWwsIGRlZmF1bHRzIHRvIGZhbHNlLiBJZiBub1RyYWlsaW5nIGlzIHRydWUsIGNhbGxiYWNrIHdpbGwgb25seSBleGVjdXRlIGV2ZXJ5IGBkZWxheWAgbWlsbGlzZWNvbmRzIHdoaWxlIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdHRsZWQtZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkLiBJZiBub1RyYWlsaW5nIGlzIGZhbHNlIG9yIHVuc3BlY2lmaWVkLCBjYWxsYmFjayB3aWxsIGJlIGV4ZWN1dGVkIG9uZSBmaW5hbCB0aW1lXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyIHRoZSBsYXN0IHRocm90dGxlZC1mdW5jdGlvbiBjYWxsLiAoQWZ0ZXIgdGhlIHRocm90dGxlZC1mdW5jdGlvbiBoYXMgbm90IGJlZW4gY2FsbGVkIGZvciBgZGVsYXlgIG1pbGxpc2Vjb25kcyxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGludGVybmFsIGNvdW50ZXIgaXMgcmVzZXQpXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrICAgICAgIEEgZnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWQgYWZ0ZXIgZGVsYXkgbWlsbGlzZWNvbmRzLiBUaGUgYHRoaXNgIGNvbnRleHQgYW5kIGFsbCBhcmd1bWVudHMgYXJlIHBhc3NlZCB0aHJvdWdoLCBhcy1pcyxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gYGNhbGxiYWNrYCB3aGVuIHRoZSB0aHJvdHRsZWQtZnVuY3Rpb24gaXMgZXhlY3V0ZWQuXG4gKiBAcGFyYW0gIHtCb29sZWFufSAgIFtkZWJvdW5jZU1vZGVdIElmIGBkZWJvdW5jZU1vZGVgIGlzIHRydWUgKGF0IGJlZ2luKSwgc2NoZWR1bGUgYGNsZWFyYCB0byBleGVjdXRlIGFmdGVyIGBkZWxheWAgbXMuIElmIGBkZWJvdW5jZU1vZGVgIGlzIGZhbHNlIChhdCBlbmQpLFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlZHVsZSBgY2FsbGJhY2tgIHRvIGV4ZWN1dGUgYWZ0ZXIgYGRlbGF5YCBtcy5cbiAqXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn0gIEEgbmV3LCB0aHJvdHRsZWQsIGZ1bmN0aW9uLlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICggZGVsYXksIG5vVHJhaWxpbmcsIGNhbGxiYWNrLCBkZWJvdW5jZU1vZGUgKSB7XG5cblx0Ly8gQWZ0ZXIgd3JhcHBlciBoYXMgc3RvcHBlZCBiZWluZyBjYWxsZWQsIHRoaXMgdGltZW91dCBlbnN1cmVzIHRoYXRcblx0Ly8gYGNhbGxiYWNrYCBpcyBleGVjdXRlZCBhdCB0aGUgcHJvcGVyIHRpbWVzIGluIGB0aHJvdHRsZWAgYW5kIGBlbmRgXG5cdC8vIGRlYm91bmNlIG1vZGVzLlxuXHR2YXIgdGltZW91dElEO1xuXG5cdC8vIEtlZXAgdHJhY2sgb2YgdGhlIGxhc3QgdGltZSBgY2FsbGJhY2tgIHdhcyBleGVjdXRlZC5cblx0dmFyIGxhc3RFeGVjID0gMDtcblxuXHQvLyBgbm9UcmFpbGluZ2AgZGVmYXVsdHMgdG8gZmFsc3kuXG5cdGlmICggdHlwZW9mIG5vVHJhaWxpbmcgIT09ICdib29sZWFuJyApIHtcblx0XHRkZWJvdW5jZU1vZGUgPSBjYWxsYmFjaztcblx0XHRjYWxsYmFjayA9IG5vVHJhaWxpbmc7XG5cdFx0bm9UcmFpbGluZyA9IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8vIFRoZSBgd3JhcHBlcmAgZnVuY3Rpb24gZW5jYXBzdWxhdGVzIGFsbCBvZiB0aGUgdGhyb3R0bGluZyAvIGRlYm91bmNpbmdcblx0Ly8gZnVuY3Rpb25hbGl0eSBhbmQgd2hlbiBleGVjdXRlZCB3aWxsIGxpbWl0IHRoZSByYXRlIGF0IHdoaWNoIGBjYWxsYmFja2Bcblx0Ly8gaXMgZXhlY3V0ZWQuXG5cdGZ1bmN0aW9uIHdyYXBwZXIgKCkge1xuXG5cdFx0dmFyIHNlbGYgPSB0aGlzO1xuXHRcdHZhciBlbGFwc2VkID0gTnVtYmVyKG5ldyBEYXRlKCkpIC0gbGFzdEV4ZWM7XG5cdFx0dmFyIGFyZ3MgPSBhcmd1bWVudHM7XG5cblx0XHQvLyBFeGVjdXRlIGBjYWxsYmFja2AgYW5kIHVwZGF0ZSB0aGUgYGxhc3RFeGVjYCB0aW1lc3RhbXAuXG5cdFx0ZnVuY3Rpb24gZXhlYyAoKSB7XG5cdFx0XHRsYXN0RXhlYyA9IE51bWJlcihuZXcgRGF0ZSgpKTtcblx0XHRcdGNhbGxiYWNrLmFwcGx5KHNlbGYsIGFyZ3MpO1xuXHRcdH1cblxuXHRcdC8vIElmIGBkZWJvdW5jZU1vZGVgIGlzIHRydWUgKGF0IGJlZ2luKSB0aGlzIGlzIHVzZWQgdG8gY2xlYXIgdGhlIGZsYWdcblx0XHQvLyB0byBhbGxvdyBmdXR1cmUgYGNhbGxiYWNrYCBleGVjdXRpb25zLlxuXHRcdGZ1bmN0aW9uIGNsZWFyICgpIHtcblx0XHRcdHRpbWVvdXRJRCA9IHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHRpZiAoIGRlYm91bmNlTW9kZSAmJiAhdGltZW91dElEICkge1xuXHRcdFx0Ly8gU2luY2UgYHdyYXBwZXJgIGlzIGJlaW5nIGNhbGxlZCBmb3IgdGhlIGZpcnN0IHRpbWUgYW5kXG5cdFx0XHQvLyBgZGVib3VuY2VNb2RlYCBpcyB0cnVlIChhdCBiZWdpbiksIGV4ZWN1dGUgYGNhbGxiYWNrYC5cblx0XHRcdGV4ZWMoKTtcblx0XHR9XG5cblx0XHQvLyBDbGVhciBhbnkgZXhpc3RpbmcgdGltZW91dC5cblx0XHRpZiAoIHRpbWVvdXRJRCApIHtcblx0XHRcdGNsZWFyVGltZW91dCh0aW1lb3V0SUQpO1xuXHRcdH1cblxuXHRcdGlmICggZGVib3VuY2VNb2RlID09PSB1bmRlZmluZWQgJiYgZWxhcHNlZCA+IGRlbGF5ICkge1xuXHRcdFx0Ly8gSW4gdGhyb3R0bGUgbW9kZSwgaWYgYGRlbGF5YCB0aW1lIGhhcyBiZWVuIGV4Y2VlZGVkLCBleGVjdXRlXG5cdFx0XHQvLyBgY2FsbGJhY2tgLlxuXHRcdFx0ZXhlYygpO1xuXG5cdFx0fSBlbHNlIGlmICggbm9UcmFpbGluZyAhPT0gdHJ1ZSApIHtcblx0XHRcdC8vIEluIHRyYWlsaW5nIHRocm90dGxlIG1vZGUsIHNpbmNlIGBkZWxheWAgdGltZSBoYXMgbm90IGJlZW5cblx0XHRcdC8vIGV4Y2VlZGVkLCBzY2hlZHVsZSBgY2FsbGJhY2tgIHRvIGV4ZWN1dGUgYGRlbGF5YCBtcyBhZnRlciBtb3N0XG5cdFx0XHQvLyByZWNlbnQgZXhlY3V0aW9uLlxuXHRcdFx0Ly9cblx0XHRcdC8vIElmIGBkZWJvdW5jZU1vZGVgIGlzIHRydWUgKGF0IGJlZ2luKSwgc2NoZWR1bGUgYGNsZWFyYCB0byBleGVjdXRlXG5cdFx0XHQvLyBhZnRlciBgZGVsYXlgIG1zLlxuXHRcdFx0Ly9cblx0XHRcdC8vIElmIGBkZWJvdW5jZU1vZGVgIGlzIGZhbHNlIChhdCBlbmQpLCBzY2hlZHVsZSBgY2FsbGJhY2tgIHRvXG5cdFx0XHQvLyBleGVjdXRlIGFmdGVyIGBkZWxheWAgbXMuXG5cdFx0XHR0aW1lb3V0SUQgPSBzZXRUaW1lb3V0KGRlYm91bmNlTW9kZSA/IGNsZWFyIDogZXhlYywgZGVib3VuY2VNb2RlID09PSB1bmRlZmluZWQgPyBkZWxheSAtIGVsYXBzZWQgOiBkZWxheSk7XG5cdFx0fVxuXG5cdH1cblxuXHQvLyBSZXR1cm4gdGhlIHdyYXBwZXIgZnVuY3Rpb24uXG5cdHJldHVybiB3cmFwcGVyO1xuXG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/throttle-debounce/throttle.js\n");

/***/ }),

/***/ "./node_modules/vue-data-tables/dist/data-tables.min.js":
/*!**************************************************************!*\
  !*** ./node_modules/vue-data-tables/dist/data-tables.min.js ***!
  \**************************************************************/
/***/ ((module) => {

eval("!function(t,n){ true?module.exports=n():0}(window,function(){return function(t){var n={};function e(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return t[r].call(o.exports,o,o.exports,e),o.l=!0,o.exports}return e.m=t,e.c=n,e.d=function(t,n,r){e.o(t,n)||Object.defineProperty(t,n,{enumerable:!0,get:r})},e.r=function(t){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},e.t=function(t,n){if(1&n&&(t=e(t)),8&n)return t;if(4&n&&\"object\"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(e.r(r),Object.defineProperty(r,\"default\",{enumerable:!0,value:t}),2&n&&\"string\"!=typeof t)for(var o in t)e.d(r,o,function(n){return t[n]}.bind(null,o));return r},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,\"a\",n),n},e.o=function(t,n){return Object.prototype.hasOwnProperty.call(t,n)},e.p=\"/\",e(e.s=\"tjUo\")}({\"+6XX\":function(t,n,e){var r=e(\"y1pI\");t.exports=function(t){return r(this.__data__,t)>-1}},\"+K+b\":function(t,n,e){var r=e(\"JHRd\");t.exports=function(t){var n=new t.constructor(t.byteLength);return new r(n).set(new r(t)),n}},\"+Qka\":function(t,n,e){var r=e(\"fmRc\"),o=e(\"t2Dn\"),i=e(\"cq/+\"),u=e(\"T1AV\"),a=e(\"GoyQ\"),c=e(\"mTTR\"),s=e(\"itsj\");t.exports=function t(n,e,f,l,p){n!==e&&i(e,function(i,c){if(p||(p=new r),a(i))u(n,e,c,f,t,l,p);else{var d=l?l(s(n,c),i,c+\"\",n,e,p):void 0;void 0===d&&(d=i),o(n,c,d)}},c)}},\"+iFO\":function(t,n,e){var r=e(\"dTAl\"),o=e(\"LcsW\"),i=e(\"6sVZ\");t.exports=function(t){return\"function\"!=typeof t.constructor||i(t)?{}:r(o(t))}},\"03A+\":function(t,n){t.exports=function(){return!1}},\"29s/\":function(t,n,e){var r=e(\"WEpk\"),o=e(\"5T2Y\"),i=o[\"__core-js_shared__\"]||(o[\"__core-js_shared__\"]={});(t.exports=function(t,n){return i[t]||(i[t]=void 0!==n?n:{})})(\"versions\",[]).push({version:r.version,mode:e(\"uOPS\")?\"pure\":\"global\",copyright:\"© 2019 Denis Pushkarev (zloirock.ru)\"})},\"2GTP\":function(t,n,e){var r=e(\"eaoh\");t.exports=function(t,n,e){if(r(t),void 0===n)return t;switch(e){case 1:return function(e){return t.call(n,e)};case 2:return function(e,r){return t.call(n,e,r)};case 3:return function(e,r,o){return t.call(n,e,r,o)}}return function(){return t.apply(n,arguments)}}},\"2faE\":function(t,n,e){var r=e(\"5K7Z\"),o=e(\"eUtF\"),i=e(\"G8Mo\"),u=Object.defineProperty;n.f=e(\"jmDH\")?Object.defineProperty:function(t,n,e){if(r(t),n=i(n,!0),r(e),o)try{return u(t,n,e)}catch(t){}if(\"get\"in e||\"set\"in e)throw TypeError(\"Accessors not supported!\");return\"value\"in e&&(t[n]=e.value),t}},\"3GJH\":function(t,n,e){e(\"lCc8\");var r=e(\"WEpk\").Object;t.exports=function(t,n){return r.create(t,n)}},\"3L66\":function(t,n,e){var r=e(\"MMmD\"),o=e(\"ExA7\");t.exports=function(t){return o(t)&&r(t)}},\"4MfH\":function(t,n,e){(t.exports=e(\"I1BE\")(!1)).push([t.i,\".sc-table .pagination-wrap{text-align:center}.sc-table .action-list{text-align:center}.sc-table .action-list>span+span{margin-left:10px}\\n\",\"\"])},\"4qC0\":function(t,n,e){var r=e(\"NykK\"),o=e(\"Z0cm\"),i=e(\"ExA7\"),u=\"[object String]\";t.exports=function(t){return\"string\"==typeof t||!o(t)&&i(t)&&r(t)==u}},\"5K7Z\":function(t,n,e){var r=e(\"93I4\");t.exports=function(t){if(!r(t))throw TypeError(t+\" is not an object!\");return t}},\"5T2Y\":function(t,n){var e=t.exports=\"undefined\"!=typeof window&&window.Math==Math?window:\"undefined\"!=typeof self&&self.Math==Math?self:Function(\"return this\")();\"number\"==typeof __g&&(__g=e)},\"5Tg0\":function(t,n,e){(function(t){var r=e(\"Kz5y\"),o=n&&!n.nodeType&&n,i=o&&\"object\"==typeof t&&t&&!t.nodeType&&t,u=i&&i.exports===o?r.Buffer:void 0,a=u?u.allocUnsafe:void 0;t.exports=function(t,n){if(n)return t.slice();var e=t.length,r=a?a(e):new t.constructor(e);return t.copy(r),r}}).call(this,e(\"YuTi\")(t))},\"5vMV\":function(t,n,e){var r=e(\"B+OT\"),o=e(\"NsO/\"),i=e(\"W070\")(!1),u=e(\"VVlx\")(\"IE_PROTO\");t.exports=function(t,n){var e,a=o(t),c=0,s=[];for(e in a)e!=u&&r(a,e)&&s.push(e);for(;n.length>c;)r(a,e=n[c++])&&(~i(s,e)||s.push(e));return s}},\"6nK8\":function(t,n,e){var r=e(\"dVn5\"),o=e(\"fo6e\"),i=e(\"dt0z\"),u=e(\"9NmV\");t.exports=function(t,n,e){return t=i(t),void 0===(n=e?void 0:n)?o(t)?u(t):r(t):t.match(n)||[]}},\"6sVZ\":function(t,n){t.exports=function(){return!1}},\"93I4\":function(t,n){t.exports=function(t){return\"object\"==typeof t?null!==t:\"function\"==typeof t}},\"9NmV\":function(t,n){var e=\"\\\\xac\\\\xb1\\\\xd7\\\\xf7\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf\\\\u2000-\\\\u206f \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\",r=\"[\"+e+\"]\",o=\"\\\\d+\",i=\"[\\\\u2700-\\\\u27bf]\",u=\"[a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff]\",a=\"[^\\\\ud800-\\\\udfff\"+e+o+\"\\\\u2700-\\\\u27bfa-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xffA-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde]\",c=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",s=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",f=\"[A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde]\",l=\"(?:\"+u+\"|\"+a+\")\",p=\"(?:\"+f+\"|\"+a+\")\",d=\"(?:[\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe2f\\\\u20d0-\\\\u20ff]|\\\\ud83c[\\\\udffb-\\\\udfff])?\",h=\"[\\\\ufe0e\\\\ufe0f]?\"+d+(\"(?:\\\\u200d(?:\"+[\"[^\\\\ud800-\\\\udfff]\",c,s].join(\"|\")+\")[\\\\ufe0e\\\\ufe0f]?\"+d+\")*\"),v=\"(?:\"+[i,c,s].join(\"|\")+\")\"+h,g=RegExp([f+\"?\"+u+\"+(?:['’](?:d|ll|m|re|s|t|ve))?(?=\"+[r,f,\"$\"].join(\"|\")+\")\",p+\"+(?:['’](?:D|LL|M|RE|S|T|VE))?(?=\"+[r,f+l,\"$\"].join(\"|\")+\")\",f+\"?\"+l+\"+(?:['’](?:d|ll|m|re|s|t|ve))?\",f+\"+(?:['’](?:D|LL|M|RE|S|T|VE))?\",\"\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])\",\"\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])\",o,v].join(\"|\"),\"g\");t.exports=function(t){return t.match(g)||[]}},AyUB:function(t,n,e){t.exports={default:e(\"3GJH\"),__esModule:!0}},\"B+OT\":function(t,n){var e={}.hasOwnProperty;t.exports=function(t,n){return e.call(t,n)}},Cwc5:function(t,n){t.exports=function(t,n){return null==t?void 0:t[n]}},D8kY:function(t,n,e){var r=e(\"Ojgd\"),o=Math.max,i=Math.min;t.exports=function(t,n){return(t=r(t))<0?o(t+n,0):i(t,n)}},DESp:function(t,n,e){\"use strict\";var r=e(\"ReYx\");e.n(r).a},DSRE:function(t,n){t.exports=function(){return!1}},EA7m:function(t,n,e){var r=e(\"zZ0H\"),o=e(\"Ioao\"),i=e(\"wclG\");t.exports=function(t,n){return i(o(t,n,r),t+\"\")}},ExA7:function(t,n){t.exports=function(t){return null!=t&&\"object\"==typeof t}},FpHa:function(t,n){t.exports=\"constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf\".split(\",\")},G8Mo:function(t,n,e){var r=e(\"93I4\");t.exports=function(t,n){if(!r(t))return t;var e,o;if(n&&\"function\"==typeof(e=t.toString)&&!r(o=e.call(t)))return o;if(\"function\"==typeof(e=t.valueOf)&&!r(o=e.call(t)))return o;if(!n&&\"function\"==typeof(e=t.toString)&&!r(o=e.call(t)))return o;throw TypeError(\"Can't convert object to primitive value\")}},GQeE:function(t,n,e){t.exports={default:e(\"iq4v\"),__esModule:!0}},GoyQ:function(t,n){t.exports=function(t){var n=typeof t;return null!=t&&(\"object\"==n||\"function\"==n)}},Hsns:function(t,n,e){var r=e(\"93I4\"),o=e(\"5T2Y\").document,i=r(o)&&r(o.createElement);t.exports=function(t){return i?o.createElement(t):{}}},I1BE:function(t,n){t.exports=function(t){var n=[];return n.toString=function(){return this.map(function(n){var e=function(t,n){var e=t[1]||\"\",r=t[3];if(!r)return e;if(n&&\"function\"==typeof btoa){var o=(u=r,\"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,\"+btoa(unescape(encodeURIComponent(JSON.stringify(u))))+\" */\"),i=r.sources.map(function(t){return\"/*# sourceURL=\"+r.sourceRoot+t+\" */\"});return[e].concat(i).concat([o]).join(\"\\n\")}var u;return[e].join(\"\\n\")}(n,t);return n[2]?\"@media \"+n[2]+\"{\"+e+\"}\":e}).join(\"\")},n.i=function(t,e){\"string\"==typeof t&&(t=[[null,t,\"\"]]);for(var r={},o=0;o<this.length;o++){var i=this[o][0];\"number\"==typeof i&&(r[i]=!0)}for(o=0;o<t.length;o++){var u=t[o];\"number\"==typeof u[0]&&r[u[0]]||(e&&!u[2]?u[2]=e:e&&(u[2]=\"(\"+u[2]+\") and (\"+e+\")\"),n.push(u))}},n}},Ioao:function(t,n,e){var r=e(\"heNW\"),o=Math.max;t.exports=function(t,n,e){return n=o(void 0===n?t.length-1:n,0),function(){for(var i=arguments,u=-1,a=o(i.length-n,0),c=Array(a);++u<a;)c[u]=i[n+u];u=-1;for(var s=Array(n+1);++u<n;)s[u]=i[u];return s[n]=e(c),r(t,this,s)}}},JB68:function(t,n,e){var r=e(\"Jes0\");t.exports=function(t){return Object(r(t))}},JHRd:function(t,n,e){var r=e(\"Kz5y\").Uint8Array;t.exports=r},Jes0:function(t,n){t.exports=function(t){if(void 0==t)throw TypeError(\"Can't call method on  \"+t);return t}},KMkd:function(t,n){t.exports=function(){this.__data__=[],this.size=0}},KUxP:function(t,n){t.exports=function(t){try{return!!t()}catch(t){return!0}}},Kz5y:function(t,n,e){var r=e(\"WFqU\"),o=\"object\"==typeof self&&self&&self.Object===Object&&self,i=r||o||Function(\"return this\")();t.exports=i},LcsW:function(t,n,e){var r=e(\"kekF\")(Object.getPrototypeOf,Object);t.exports=r},LsHQ:function(t,n,e){var r=e(\"EA7m\"),o=e(\"mv/X\");t.exports=function(t){return r(function(n,e){var r=-1,i=e.length,u=i>1?e[i-1]:void 0,a=i>2?e[2]:void 0;for(u=t.length>3&&\"function\"==typeof u?(i--,u):void 0,a&&o(e[0],e[1],a)&&(u=i<3?void 0:u,i=1),n=Object(n);++r<i;){var c=e[r];c&&t(n,c,r,u)}return n})}},M1xp:function(t,n,e){var r=e(\"a0xu\");t.exports=Object(\"z\").propertyIsEnumerable(0)?Object:function(t){return\"String\"==r(t)?t.split(\"\"):Object(t)}},MMmD:function(t,n,e){var r=e(\"lSCD\"),o=e(\"shjB\");t.exports=function(t){return null!=t&&o(t.length)&&!r(t)}},Mqbl:function(t,n,e){var r=e(\"JB68\"),o=e(\"w6GO\");e(\"zn7N\")(\"keys\",function(){return function(t){return o(r(t))}})},MrPd:function(t,n,e){var r=e(\"hypo\"),o=e(\"ljhN\"),i=Object.prototype.hasOwnProperty;t.exports=function(t,n,e){var u=t[n];i.call(t,n)&&o(u,e)&&(void 0!==e||n in t)||r(t,n,e)}},MuEW:function(t,n,e){(t.exports=e(\"I1BE\")(!1)).push([t.i,\".sc-table .pagination-wrap{text-align:center}.sc-table .action-list{text-align:center}.sc-table .action-list>span+span{margin-left:10px}\\n\",\"\"])},MvwC:function(t,n,e){var r=e(\"5T2Y\").document;t.exports=r&&r.documentElement},N1om:function(t,n,e){var r=e(\"sgoq\")(function(t,n,e){return t+(e?\"-\":\"\")+n.toLowerCase()});t.exports=r},NV0k:function(t,n){n.f={}.propertyIsEnumerable},NegM:function(t,n,e){var r=e(\"2faE\"),o=e(\"rr1i\");t.exports=e(\"jmDH\")?function(t,n,e){return r.f(t,n,o(1,e))}:function(t,n,e){return t[n]=e,t}},\"NsO/\":function(t,n,e){var r=e(\"M1xp\"),o=e(\"Jes0\");t.exports=function(t){return r(o(t))}},NykK:function(t,n){var e=Object.prototype.toString;t.exports=function(t){return e.call(t)}},O0oS:function(t,n,e){var r=e(\"Cwc5\"),o=function(){try{var t=r(Object,\"defineProperty\");return t({},\"\",{}),t}catch(t){}}();t.exports=o},Ojgd:function(t,n){var e=Math.ceil,r=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?r:e)(t)}},P2sY:function(t,n,e){t.exports={default:e(\"UbbE\"),__esModule:!0}},Q1l4:function(t,n){t.exports=function(t,n){var e=-1,r=t.length;for(n||(n=Array(r));++e<r;)n[e]=t[e];return n}},QbLZ:function(t,n,e){\"use strict\";n.__esModule=!0;var r,o=e(\"P2sY\"),i=(r=o)&&r.__esModule?r:{default:r};n.default=i.default||function(t){for(var n=1;n<arguments.length;n++){var e=arguments[n];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])}return t}},QkVN:function(t,n,e){var r=e(\"+Qka\"),o=e(\"LsHQ\")(function(t,n,e){r(t,n,e)});t.exports=o},ReYx:function(t,n,e){var r=e(\"4MfH\");\"string\"==typeof r&&(r=[[t.i,r,\"\"]]),r.locals&&(t.exports=r.locals);(0,e(\"SZ7m\").default)(\"fb8dba28\",r,!0,{})},SZ7m:function(t,n,e){\"use strict\";function r(t,n){for(var e=[],r={},o=0;o<n.length;o++){var i=n[o],u=i[0],a={id:t+\":\"+o,css:i[1],media:i[2],sourceMap:i[3]};r[u]?r[u].parts.push(a):e.push(r[u]={id:u,parts:[a]})}return e}e.r(n),e.d(n,\"default\",function(){return h});var o=\"undefined\"!=typeof document;if(\"undefined\"!=typeof DEBUG&&DEBUG&&!o)throw new Error(\"vue-style-loader cannot be used in a non-browser environment. Use { target: 'node' } in your Webpack config to indicate a server-rendering environment.\");var i={},u=o&&(document.head||document.getElementsByTagName(\"head\")[0]),a=null,c=0,s=!1,f=function(){},l=null,p=\"data-vue-ssr-id\",d=\"undefined\"!=typeof navigator&&/msie [6-9]\\b/.test(navigator.userAgent.toLowerCase());function h(t,n,e,o){s=e,l=o||{};var u=r(t,n);return v(u),function(n){for(var e=[],o=0;o<u.length;o++){var a=u[o];(c=i[a.id]).refs--,e.push(c)}n?v(u=r(t,n)):u=[];for(o=0;o<e.length;o++){var c;if(0===(c=e[o]).refs){for(var s=0;s<c.parts.length;s++)c.parts[s]();delete i[c.id]}}}}function v(t){for(var n=0;n<t.length;n++){var e=t[n],r=i[e.id];if(r){r.refs++;for(var o=0;o<r.parts.length;o++)r.parts[o](e.parts[o]);for(;o<e.parts.length;o++)r.parts.push(y(e.parts[o]));r.parts.length>e.parts.length&&(r.parts.length=e.parts.length)}else{var u=[];for(o=0;o<e.parts.length;o++)u.push(y(e.parts[o]));i[e.id]={id:e.id,refs:1,parts:u}}}}function g(){var t=document.createElement(\"style\");return t.type=\"text/css\",u.appendChild(t),t}function y(t){var n,e,r=document.querySelector(\"style[\"+p+'~=\"'+t.id+'\"]');if(r){if(s)return f;r.parentNode.removeChild(r)}if(d){var o=c++;r=a||(a=g()),n=m.bind(null,r,o,!1),e=m.bind(null,r,o,!0)}else r=g(),n=function(t,n){var e=n.css,r=n.media,o=n.sourceMap;r&&t.setAttribute(\"media\",r);l.ssrId&&t.setAttribute(p,n.id);o&&(e+=\"\\n/*# sourceURL=\"+o.sources[0]+\" */\",e+=\"\\n/*# sourceMappingURL=data:application/json;base64,\"+btoa(unescape(encodeURIComponent(JSON.stringify(o))))+\" */\");if(t.styleSheet)t.styleSheet.cssText=e;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(e))}}.bind(null,r),e=function(){r.parentNode.removeChild(r)};return n(t),function(r){if(r){if(r.css===t.css&&r.media===t.media&&r.sourceMap===t.sourceMap)return;n(t=r)}else e()}}var x,b=(x=[],function(t,n){return x[t]=n,x.filter(Boolean).join(\"\\n\")});function m(t,n,e,r){var o=e?\"\":r.css;if(t.styleSheet)t.styleSheet.cssText=b(n,o);else{var i=document.createTextNode(o),u=t.childNodes;u[n]&&t.removeChild(u[n]),u.length?t.insertBefore(i,u[n]):t.appendChild(i)}}},T1AV:function(t,n,e){var r=e(\"t2Dn\"),o=e(\"5Tg0\"),i=e(\"yP5f\"),u=e(\"Q1l4\"),a=e(\"+iFO\"),c=e(\"03A+\"),s=e(\"Z0cm\"),f=e(\"3L66\"),l=e(\"DSRE\"),p=e(\"lSCD\"),d=e(\"GoyQ\"),h=e(\"YO3V\"),v=e(\"c6wG\"),g=e(\"itsj\"),y=e(\"jeLo\");t.exports=function(t,n,e,x,b,m,j){var S=g(t,e),P=g(n,e),O=j.get(P);if(O)r(t,e,O);else{var _=m?m(S,P,e+\"\",t,n,j):void 0,w=void 0===_;if(w){var C=s(P),T=!C&&l(P),E=!C&&!T&&v(P);_=P,C||T||E?s(S)?_=S:f(S)?_=u(S):T?(w=!1,_=o(P,!0)):E?(w=!1,_=i(P,!0)):_=[]:h(P)||c(P)?(_=S,c(S)?_=y(S):d(S)&&!p(S)||(_=a(P))):w=!1}w&&(j.set(P,_),b(_,P,x,m,j),j.delete(P)),r(t,e,_)}}},TKrE:function(t,n){t.exports=function(t){return t}},UbbE:function(t,n,e){e(\"o8NH\"),t.exports=e(\"WEpk\").Object.assign},VVlx:function(t,n,e){var r=e(\"29s/\")(\"keys\"),o=e(\"YqAc\");t.exports=function(t){return r[t]||(r[t]=o(t))}},W070:function(t,n,e){var r=e(\"NsO/\"),o=e(\"tEej\"),i=e(\"D8kY\");t.exports=function(t){return function(n,e,u){var a,c=r(n),s=o(c.length),f=i(u,s);if(t&&e!=e){for(;s>f;)if((a=c[f++])!=a)return!0}else for(;s>f;f++)if((t||f in c)&&c[f]===e)return t||f||0;return!t&&-1}}},WEpk:function(t,n){var e=t.exports={version:\"2.6.10\"};\"number\"==typeof __e&&(__e=e)},WFqU:function(t,n,e){(function(n){var e=\"object\"==typeof n&&n&&n.Object===Object&&n;t.exports=e}).call(this,e(\"yLpj\"))},Y7ZC:function(t,n,e){var r=e(\"5T2Y\"),o=e(\"WEpk\"),i=e(\"2GTP\"),u=e(\"NegM\"),a=e(\"B+OT\"),c=function(t,n,e){var s,f,l,p=t&c.F,d=t&c.G,h=t&c.S,v=t&c.P,g=t&c.B,y=t&c.W,x=d?o:o[n]||(o[n]={}),b=x.prototype,m=d?r:h?r[n]:(r[n]||{}).prototype;for(s in d&&(e=n),e)(f=!p&&m&&void 0!==m[s])&&a(x,s)||(l=f?m[s]:e[s],x[s]=d&&\"function\"!=typeof m[s]?e[s]:g&&f?i(l,r):y&&m[s]==l?function(t){var n=function(n,e,r){if(this instanceof t){switch(arguments.length){case 0:return new t;case 1:return new t(n);case 2:return new t(n,e)}return new t(n,e,r)}return t.apply(this,arguments)};return n.prototype=t.prototype,n}(l):v&&\"function\"==typeof l?i(Function.call,l):l,v&&((x.virtual||(x.virtual={}))[s]=l,t&c.R&&b&&!b[s]&&u(b,s,l)))};c.F=1,c.G=2,c.S=4,c.P=8,c.B=16,c.W=32,c.U=64,c.R=128,t.exports=c},YO3V:function(t,n,e){var r=e(\"NykK\"),o=e(\"LcsW\"),i=e(\"ExA7\"),u=\"[object Object]\",a=Function.prototype,c=Object.prototype,s=a.toString,f=c.hasOwnProperty,l=s.call(Object);t.exports=function(t){if(!i(t)||r(t)!=u)return!1;var n=o(t);if(null===n)return!0;var e=f.call(n,\"constructor\")&&n.constructor;return\"function\"==typeof e&&e instanceof e&&s.call(e)==l}},YqAc:function(t,n){var e=0,r=Math.random();t.exports=function(t){return\"Symbol(\".concat(void 0===t?\"\":t,\")_\",(++e+r).toString(36))}},YuTi:function(t,n){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children||(t.children=[]),Object.defineProperty(t,\"loaded\",{enumerable:!0,get:function(){return t.l}}),Object.defineProperty(t,\"id\",{enumerable:!0,get:function(){return t.i}}),t.webpackPolyfill=1),t}},Z0cm:function(t,n){var e=Array.isArray;t.exports=e},Z8oC:function(t,n,e){var r=e(\"y1pI\");t.exports=function(t,n){var e=this.__data__,o=r(e,t);return o<0?(++this.size,e.push([t,n])):e[o][1]=n,this}},a0xu:function(t,n){var e={}.toString;t.exports=function(t){return e.call(t).slice(8,-1)}},adU4:function(t,n,e){var r=e(\"y1pI\"),o=Array.prototype.splice;t.exports=function(t){var n=this.__data__,e=r(n,t);return!(e<0||(e==n.length-1?n.pop():o.call(n,e,1),--this.size,0))}},asDA:function(t,n){t.exports=function(t,n,e,r){var o=-1,i=null==t?0:t.length;for(r&&i&&(e=t[++o]);++o<i;)e=n(e,t[o],o,t);return e}},c6wG:function(t,n){t.exports=function(){return!1}},\"cq/+\":function(t,n,e){var r=e(\"mc0g\")();t.exports=r},dTAl:function(t,n,e){var r=e(\"GoyQ\"),o=Object.create,i=function(){function t(){}return function(n){if(!r(n))return{};if(o)return o(n);t.prototype=n;var e=new t;return t.prototype=void 0,e}}();t.exports=i},dVn5:function(t,n){var e=/[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;t.exports=function(t){return t.match(e)||[]}},dt0z:function(t,n){t.exports=function(t){return t}},eUtF:function(t,n,e){t.exports=!e(\"jmDH\")&&!e(\"KUxP\")(function(){return 7!=Object.defineProperty(e(\"Hsns\")(\"div\"),\"a\",{get:function(){return 7}}).a})},eaoh:function(t,n){t.exports=function(t){if(\"function\"!=typeof t)throw TypeError(t+\" is not a function!\");return t}},fmRc:function(t,n,e){var r=e(\"KMkd\"),o=e(\"adU4\"),i=e(\"tMB7\"),u=e(\"+6XX\"),a=e(\"Z8oC\");function c(t){var n=-1,e=null==t?0:t.length;for(this.clear();++n<e;){var r=t[n];this.set(r[0],r[1])}}c.prototype.clear=r,c.prototype.delete=o,c.prototype.get=i,c.prototype.has=u,c.prototype.set=a,t.exports=c},fo6e:function(t,n){var e=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;t.exports=function(t){return e.test(t)}},fpC5:function(t,n,e){var r=e(\"2faE\"),o=e(\"5K7Z\"),i=e(\"w6GO\");t.exports=e(\"jmDH\")?Object.defineProperties:function(t,n){o(t);for(var e,u=i(n),a=u.length,c=0;a>c;)r.f(t,e=u[c++],n[e]);return t}},\"gS/q\":function(t,n,e){var r=e(\"MuEW\");\"string\"==typeof r&&(r=[[t.i,r,\"\"]]),r.locals&&(t.exports=r.locals);(0,e(\"SZ7m\").default)(\"fe7bacb4\",r,!0,{})},heNW:function(t,n){t.exports=function(t,n,e){switch(e.length){case 0:return t.call(n);case 1:return t.call(n,e[0]);case 2:return t.call(n,e[0],e[1]);case 3:return t.call(n,e[0],e[1],e[2])}return t.apply(n,e)}},hypo:function(t,n,e){var r=e(\"O0oS\");t.exports=function(t,n,e){\"__proto__\"==n&&r?r(t,n,{configurable:!0,enumerable:!0,value:e,writable:!0}):t[n]=e}},iq4v:function(t,n,e){e(\"Mqbl\"),t.exports=e(\"WEpk\").Object.keys},itsj:function(t,n){t.exports=function(t,n){if((\"constructor\"!==n||\"function\"!=typeof t[n])&&\"__proto__\"!=n)return t[n]}},jcuL:function(t,n,e){\"use strict\";var r=e(\"gS/q\");e.n(r).a},jeLo:function(t,n,e){var r=e(\"juv8\"),o=e(\"mTTR\");t.exports=function(t){return r(t,o(t))}},jmDH:function(t,n,e){t.exports=!e(\"KUxP\")(function(){return 7!=Object.defineProperty({},\"a\",{get:function(){return 7}}).a})},jo6Y:function(t,n,e){\"use strict\";n.__esModule=!0,n.default=function(t,n){var e={};for(var r in t)n.indexOf(r)>=0||Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r]);return e}},juv8:function(t,n,e){var r=e(\"MrPd\"),o=e(\"hypo\");t.exports=function(t,n,e,i){var u=!e;e||(e={});for(var a=-1,c=n.length;++a<c;){var s=n[a],f=i?i(e[s],t[s],s,e,t):void 0;void 0===f&&(f=t[s]),u?o(e,s,f):r(e,s,f)}return e}},kekF:function(t,n){t.exports=function(t,n){return function(e){return t(n(e))}}},kvrn:function(t,n){var e=/^(attrs|props|on|nativeOn|class|style|hook)$/;function r(t,n){return function(){t&&t.apply(this,arguments),n&&n.apply(this,arguments)}}t.exports=function(t){return t.reduce(function(t,n){var o,i,u,a,c;for(u in n)if(o=t[u],i=n[u],o&&e.test(u))if(\"class\"===u&&(\"string\"==typeof o&&(c=o,t[u]=o={},o[c]=!0),\"string\"==typeof i&&(c=i,n[u]=i={},i[c]=!0)),\"on\"===u||\"nativeOn\"===u||\"hook\"===u)for(a in i)o[a]=r(o[a],i[a]);else if(Array.isArray(o))t[u]=o.concat(i);else if(Array.isArray(i))t[u]=[o].concat(i);else for(a in i)o[a]=i[a];else t[u]=n[u];return t},{})}},kwZ1:function(t,n,e){\"use strict\";var r=e(\"jmDH\"),o=e(\"w6GO\"),i=e(\"mqlF\"),u=e(\"NV0k\"),a=e(\"JB68\"),c=e(\"M1xp\"),s=Object.assign;t.exports=!s||e(\"KUxP\")(function(){var t={},n={},e=Symbol(),r=\"abcdefghijklmnopqrst\";return t[e]=7,r.split(\"\").forEach(function(t){n[t]=t}),7!=s({},t)[e]||Object.keys(s({},n)).join(\"\")!=r})?function(t,n){for(var e=a(t),s=arguments.length,f=1,l=i.f,p=u.f;s>f;)for(var d,h=c(arguments[f++]),v=l?o(h).concat(l(h)):o(h),g=v.length,y=0;g>y;)d=v[y++],r&&!p.call(h,d)||(e[d]=h[d]);return e}:s},lCc8:function(t,n,e){var r=e(\"Y7ZC\");r(r.S,\"Object\",{create:e(\"oVml\")})},lSCD:function(t,n,e){var r=e(\"NykK\"),o=e(\"GoyQ\"),i=\"[object AsyncFunction]\",u=\"[object Function]\",a=\"[object GeneratorFunction]\",c=\"[object Proxy]\";t.exports=function(t){if(!o(t))return!1;var n=r(t);return n==u||n==a||n==i||n==c}},ljhN:function(t,n){t.exports=function(t,n){return t===n||t!=t&&n!=n}},mTTR:function(t,n){t.exports=function(t){var n=[];if(null!=t)for(var e in Object(t))n.push(e);return n}},mc0g:function(t,n){t.exports=function(t){return function(n,e,r){for(var o=-1,i=Object(n),u=r(n),a=u.length;a--;){var c=u[t?a:++o];if(!1===e(i[c],c,i))break}return n}}},mqlF:function(t,n){n.f=Object.getOwnPropertySymbols},\"mv/X\":function(t,n){t.exports=function(){return!1}},o8NH:function(t,n,e){var r=e(\"Y7ZC\");r(r.S+r.F,\"Object\",{assign:e(\"kwZ1\")})},oVml:function(t,n,e){var r=e(\"5K7Z\"),o=e(\"fpC5\"),i=e(\"FpHa\"),u=e(\"VVlx\")(\"IE_PROTO\"),a=function(){},c=function(){var t,n=e(\"Hsns\")(\"iframe\"),r=i.length;for(n.style.display=\"none\",e(\"MvwC\").appendChild(n),n.src=\"javascript:\",(t=n.contentWindow.document).open(),t.write(\"<script>document.F=Object<\\/script>\"),t.close(),c=t.F;r--;)delete c.prototype[i[r]];return c()};t.exports=Object.create||function(t,n){var e;return null!==t?(a.prototype=r(t),e=new a,a.prototype=null,e[u]=t):e=c(),void 0===n?e:o(e,n)}},rr1i:function(t,n){t.exports=function(t,n){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:n}}},sgoq:function(t,n,e){var r=e(\"asDA\"),o=e(\"TKrE\"),i=e(\"6nK8\"),u=RegExp(\"['’]\",\"g\");t.exports=function(t){return function(n){return r(i(o(n).replace(u,\"\")),t,\"\")}}},shjB:function(t,n){var e=9007199254740991;t.exports=function(t){return\"number\"==typeof t&&t>-1&&t%1==0&&t<=e}},t2Dn:function(t,n,e){var r=e(\"hypo\"),o=e(\"ljhN\");t.exports=function(t,n,e){(void 0===e||o(t[n],e))&&(void 0!==e||n in t)||r(t,n,e)}},tEej:function(t,n,e){var r=e(\"Ojgd\"),o=Math.min;t.exports=function(t){return t>0?o(r(t),9007199254740991):0}},tMB7:function(t,n,e){var r=e(\"y1pI\");t.exports=function(t){var n=this.__data__,e=r(n,t);return e<0?void 0:n[e][1]}},tjUo:function(t,n,e){\"use strict\";e.r(n);var r=e(\"GQeE\"),o=e.n(r),i=e(\"AyUB\"),u=e.n(i),a=e(\"4qC0\"),c=e.n(a),s=e(\"Z0cm\"),f=e.n(s);function l(t,n){return t.toString().toLowerCase().includes(n.toString().toLowerCase())}function p(t,n,e){var r=n[t];return void 0===r?(console.error(function(t){return\"prop \"+t+\" not exist in the row, please confirm wether the prop is right, this may cause unpredictable filter result\"}(t)),!1):null!==r&&(f()(e.value)?e.value.some(function(t){return l(r,t)}):l(r,e.value))}var d=e(\"jo6Y\"),h=e.n(d),v=e(\"kvrn\"),g=e.n(v),y=e(\"P2sY\"),x=e.n(y),b=e(\"N1om\"),m=e.n(b),j=e(\"QkVN\"),S=e.n(j),P={props:{layout:{type:String,default:\"tool, table, pagination\"},data:{type:Array,default:function(){return[]}},filters:{type:[Object,Array],default:function(){return[]}},tableProps:{type:Object,default:function(){return{}}},actionCol:{type:Object,default:function(){return{}}},currentPage:{type:Number,default:1},pageSize:{type:Number,default:20},paginationProps:{type:Object,default:function(){return{}}}},render:function(t){var n=this,e={tool:this.toolBarShow?t(\"div\",{class:\"tool\"},[this.$slots.tool]):null,table:t(\"el-table\",g()([{ref:\"elTable\",on:{\"sort-change\":this.handleSort},attrs:{data:this.curTableData}},{attrs:this.innerTableProps,directives:this._server?[{name:\"loading\",value:this.loading}]:void 0},{style:\"width: 100%\"}]),[this.$slots.default,t(\"template\",{slot:\"empty\"},[this.$slots.empty]),t(\"template\",{slot:\"append\"},[this.$slots.append]),this.actionColShow?t(\"el-table-column\",g()([{attrs:{prop:this.actionColProp}},{attrs:this.innerActionCol.props,scopedSlots:{default:function(e){return t(\"div\",{class:\"action-list\"},[n.innerActionCol.buttons.map(function(n){var r=x()({type:n.type||\"text\",icon:n.icon},n.props);return t(\"span\",[t(\"el-button\",g()([{on:{click:function(){n.handler(e.row,e.$index,e.column,e.store)}}},{attrs:r}]),[n.label])])})])}}}])):null]),pagination:t(\"div\",{class:\"pagination-bar\"},[this.paginationShow?t(\"div\",{class:\"pagination-wrap\"},[t(\"el-pagination\",g()([{ref:\"elPagination\",attrs:{\"current-page\":n.innerCurrentPage,\"page-size\":this.innerPageSize,total:this._server?this.innerTotal:this.total},on:{\"update:currentPage\":function(t){n.innerCurrentPage=t}}},{attrs:this.innerPaginationProps,on:{\"size-change\":this.handleSizeChange,\"prev-click\":this.$listeners[\"prev-click\"],\"next-click\":this.$listeners[\"next-click\"],\"current-change\":this.$listeners[\"current-page-change\"]}}]),[this.$slots.pagination])]):null])};return t(\"div\",{class:\"sc-table\"},[this.layouts.map(function(t){return e[t]})])},mounted:function(){var t=this,n=this.$refs.elTable,e=n.$emit;n.$emit=function(){for(var r=arguments.length,o=Array(r),i=0;i<r;i++)o[i]=arguments[i];t.$emit.apply(t,o),e.apply(n,o)}},data:function(){return{innerCurrentPage:1,innerPageSize:20,sortData:this.tableProps&&this.tableProps.defaultSort||{},actionColProp:\"e6e4c9de-7cf5-4f19-bb73-838e5182a372\",innerPaginationProps:{}}},computed:{layouts:function(){return this.layout.split(\",\").map(function(t){return t.trim()})},innerTableProps:function(){var t=x()({fit:!0},this.tableProps);return[\"elementLoadingText\",\"elementLoadingSpinner\",\"elementLoadingBackground\"].forEach(function(n){t[n]&&(t[m()(n)]=t[n],delete t[n])}),t},innerActionCol:function(){var t=this.actionCol,n=t.label,e=h()(t,[\"label\"]);return S()({show:!0,buttons:[],props:{label:n||\"操作\"}},e)},paginationShow:function(){return this.layouts.includes(\"pagination\")},actionColShow:function(){return this.innerActionCol.buttons.length>0},toolBarShow:function(){return this.layouts.includes(\"tool\")&&this.$slots.tool}},watch:{pageSize:{immediate:!0,handler:function(t){this.innerPageSize=t}},innerPageSize:function(t){this.$emit(\"update:pageSize\",t)},currentPage:{immediate:!0,handler:function(t){this.innerCurrentPage=t}},innerCurrentPage:function(t){this.$emit(\"update:currentPage\",t)},paginationProps:{immediate:!0,handler:function(t){this.paginationShow&&(this.innerPaginationProps=x()({pageSizes:[20,50,100],layout:\"prev, pager, next, jumper, sizes, total\"},t),-1===this.innerPaginationProps.pageSizes.indexOf(this.innerPageSize)&&(console.warn(\"pageSize \"+this.innerPageSize+\" is not included in pageSizes[\"+this.innerPaginationProps.pageSizes+\"], set pageSize to pageSizes[0]: \"+this.innerPaginationProps.pageSizes[0]),this.innerPageSize=this.innerPaginationProps.pageSizes[0]))}}}},O={name:\"DataTables\",mixins:[P],props:{sortMethod:{type:Object,default:function(){return{}}},filterProps:Array},data:function(){return{innerfilterProps:[]}},created:function(){this.setInnerFilterProps(this.filterProps),this._filterFnCache=u()(null),this._sortFnCache=u()(null)},computed:{sortedData:function(){if(this.sortData.order){var t=this.data.slice(),n=this.sortData,e=n.order,r=n.prop,o=\"descending\"===e,i=this.createSortFn(r,o);return t.sort(i),t}return this.data},tableData:function(){var t=this,n=this.sortedData.slice();return this.filters.forEach(function(e){var r=e.value;if(f()(r)&&0===r.length||void 0===r||\"\"===r)return!0;var o=e.filterFn||t.createFilterFn(e.prop);n=n.filter(function(t){return o(t,e)})}),this.$emit(\"filtered-data\",n),n},curTableData:function(){if(this.paginationShow){var t=this.innerPageSize*(this.innerCurrentPage-1),n=t+this.innerPageSize;return this.tableData.slice(t,n)}return this.tableData},total:function(){return this.tableData.length}},methods:{handleSort:function(t){this.sortData=t},handleSizeChange:function(t){this.innerPageSize=t,this.$emit(\"size-change\",t)},createFilterFn:function(t){var n=void 0,e=t||this.innerfilterProps;if(f()(e))n=e.join(\"\");else{if(!c()(t))return console.error(\"prop must be string or array\"),function(){return!1};n=e}var r=this._filterFnCache[n];return r||(this._filterFnCache[n]=function(t,n){return f()(e)?e.some(function(e){return p(e,t,n)}):p(e,t,n)},this._filterFnCache[n])},createSortFn:function(t,n){var e=this,r=t+n,o=this._sortFnCache[r];return o||(this._sortFnCache[r]=function(r,o){return(e.sortMethod[t]||function(t,n,e){return t>n?1:t<n?-1:0})(r[t],o[t])*(n?-1:1)},this._sortFnCache[r])},setInnerFilterProps:function(t){this.innerfilterProps=t||o()(this.data&&this.data[0]||{})}},watch:{filterProps:function(t){this.setInnerFilterProps(t)},sortMethod:function(){this._sortFnCache=[]}}};e(\"jcuL\");function _(t,n,e,r,o,i,u,a){var c,s=\"function\"==typeof t?t.options:t;if(n&&(s.render=n,s.staticRenderFns=e,s._compiled=!0),r&&(s.functional=!0),i&&(s._scopeId=\"data-v-\"+i),u?(c=function(t){(t=t||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||\"undefined\"==typeof __VUE_SSR_CONTEXT__||(t=__VUE_SSR_CONTEXT__),o&&o.call(this,t),t&&t._registeredComponents&&t._registeredComponents.add(u)},s._ssrRegister=c):o&&(c=a?function(){o.call(this,this.$root.$options.shadowRoot)}:o),c)if(s.functional){s._injectStyles=c;var f=s.render;s.render=function(t,n){return c.call(n),f(t,n)}}else{var l=s.beforeCreate;s.beforeCreate=l?[].concat(l,c):[c]}return{exports:t,options:s}}var w=_(O,void 0,void 0,!1,null,null,null).exports,C=e(\"QbLZ\"),T=e.n(C),E={name:\"DataTablesServer\",mixins:[P],props:{loadingStr:{type:String,default:\"\"},total:{type:Number},loading:{type:Boolean,default:!1}},data:function(){return{innerTotal:0}},created:function(){this._server=!0,this.queryChange(\"init\");var t=this.total/this.pageSize,n=Math.ceil(t);this.innerTotal=n>=this.currentPage?this.total:this.pageSize*this.currentPage},computed:{curTableData:function(){return this.data},queryInfo:function(){return{page:this.innerCurrentPage,pageSize:this.innerPageSize,sort:this.sortData,filters:this.filters}}},methods:{queryChange:function(t){var n=T()({type:t},this.queryInfo);this.$emit(\"query-change\",n)},handleSort:function(t){var n=t.prop,e=t.order;this.sortData.prop===n&&this.sortData.order===e||(this.sortData={prop:n,order:e},this.queryChange(\"sort\"))},handleSizeChange:function(t){this.innerPageSize=t,this.queryChange(\"size\"),this.$emit(\"size-change\",t)}},watch:{total:function(t){this.innerTotal=t},filters:{handler:function(){this.queryChange(\"filter\")},deep:!0},\"tableProps.defaultSort\":{immediate:!0,handler:function(t){this.sortData=t||{}}},innerCurrentPage:function(t){this.queryChange(\"page\")}}},M=(e(\"DESp\"),_(E,void 0,void 0,!1,null,null,null).exports);e.d(n,\"install\",function(){return z}),e.d(n,\"DataTables\",function(){return w}),e.d(n,\"DataTablesServer\",function(){return M}),w.install=function(t){t.component(w.name,w)},M.install=function(t){t.component(M.name,M)};var z=function(t){w.install(t),M.install(t)};n.default={install:z}},uOPS:function(t,n){t.exports=!0},w6GO:function(t,n,e){var r=e(\"5vMV\"),o=e(\"FpHa\");t.exports=Object.keys||function(t){return r(t,o)}},wclG:function(t,n){t.exports=function(t){return t}},y1pI:function(t,n,e){var r=e(\"ljhN\");t.exports=function(t,n){for(var e=t.length;e--;)if(r(t[e][0],n))return e;return-1}},yLpj:function(t,n){var e;e=function(){return this}();try{e=e||new Function(\"return this\")()}catch(t){\"object\"==typeof window&&(e=window)}t.exports=e},yP5f:function(t,n,e){var r=e(\"+K+b\");t.exports=function(t,n){var e=n?r(t.buffer):t.buffer;return new t.constructor(e,t.byteOffset,t.length)}},zZ0H:function(t,n){t.exports=function(t){return t}},zn7N:function(t,n,e){var r=e(\"Y7ZC\"),o=e(\"WEpk\"),i=e(\"KUxP\");t.exports=function(t,n){var e=(o.Object||{})[t]||Object[t],u={};u[t]=n(e),r(r.S+r.F*i(function(){e(1)}),\"Object\",u)}}})});\n//# sourceMappingURL=data-tables.min.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvdnVlLWRhdGEtdGFibGVzL2Rpc3QvZGF0YS10YWJsZXMubWluLmpzIiwibWFwcGluZ3MiOiJBQUFBLGVBQWUsS0FBaUQsb0JBQW9CLENBQW1ILENBQUMsbUJBQW1CLG1CQUFtQixTQUFTLGNBQWMsNEJBQTRCLFlBQVkscUJBQXFCLDJEQUEyRCx1Q0FBdUMscUNBQXFDLG9CQUFvQixFQUFFLGlCQUFpQiw0RkFBNEYsZUFBZSx3Q0FBd0MsU0FBUyxFQUFFLG1CQUFtQiw4QkFBOEIscURBQXFELDBCQUEwQiw2Q0FBNkMsc0JBQXNCLDZEQUE2RCxZQUFZLGVBQWUsU0FBUyxpQkFBaUIsaUNBQWlDLGlCQUFpQixZQUFZLFVBQVUsc0JBQXNCLG1CQUFtQixpREFBaUQsdUJBQXVCLEVBQUUsdUJBQXVCLGdCQUFnQixzQkFBc0IsOEJBQThCLHdCQUF3QixnQkFBZ0Isc0JBQXNCLHNDQUFzQyxpQ0FBaUMsd0JBQXdCLHdGQUF3RixnQ0FBZ0MseUJBQXlCLHNDQUFzQyxLQUFLLHNDQUFzQyw0QkFBNEIsS0FBSyx3QkFBd0Isd0NBQXdDLHNCQUFzQiwrQ0FBK0MsVUFBVSxzQkFBc0IscUJBQXFCLFVBQVUsd0JBQXdCLGtGQUFrRixFQUFFLHlCQUF5QixrQ0FBa0MsRUFBRSx1QkFBdUIsa0dBQWtHLEVBQUUsd0JBQXdCLGdCQUFnQiwwQkFBMEIsNEJBQTRCLFVBQVUsMEJBQTBCLG9CQUFvQiw0QkFBNEIsc0JBQXNCLDhCQUE4Qix3QkFBd0Isa0JBQWtCLDhCQUE4Qix3QkFBd0IsZ0VBQWdFLG9EQUFvRCw2QkFBNkIsZ0JBQWdCLFVBQVUsb0VBQW9FLHFDQUFxQyx3QkFBd0IsVUFBVSx1QkFBdUIsd0JBQXdCLHNCQUFzQix3QkFBd0IsNEJBQTRCLHNCQUFzQixtQkFBbUIsd0JBQXdCLGdFQUFnRSxrQkFBa0IsdUJBQXVCLGtCQUFrQixpQ0FBaUMsaUJBQWlCLFNBQVMsd0JBQXdCLDREQUE0RCxzQkFBc0IsZ0RBQWdELHdCQUF3QixnQkFBZ0Isc0JBQXNC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LDJCQUEyQixTQUFTLDJCQUEyQixpQ0FBaUMscUJBQXFCLDhCQUE4QiwyQkFBMkIsNERBQTRELDJCQUEyQixTQUFTLGdDQUFnQyxTQUFTLHNDQUFzQyxTQUFTLHdCQUF3QixzQkFBc0IsdUJBQXVCLHVCQUF1QixrQkFBa0IsMkJBQTJCLFdBQVcsV0FBVyxvQkFBb0IsYUFBYSxzQkFBc0IsNEJBQTRCLG1DQUFtQyxlQUFlLG9CQUFvQixzQkFBc0IsVUFBVSxzQkFBc0IsZ0JBQWdCLHdCQUF3QixtQkFBbUIsSUFBSSwwQkFBMEIsVUFBVSxvQkFBb0IsTUFBTSxhQUFhLFlBQVksR0FBRyxJQUFJLG1DQUFtQyxTQUFTLG9DQUFvQyxZQUFZLHNCQUFzQixnQkFBZ0Isd0JBQXdCLDZCQUE2QixtREFBbUQsb0JBQW9CLHNCQUFzQixVQUFVLHNCQUFzQix3Q0FBd0Msd0JBQXdCLG1CQUFtQixxQkFBcUIsaUNBQWlDLEtBQUssZ0JBQWdCLEVBQUU7QUFDcjQvQiIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy92dWUtZGF0YS10YWJsZXMvZGlzdC9kYXRhLXRhYmxlcy5taW4uanM/ZTAxOCJdLCJzb3VyY2VzQ29udGVudCI6WyIhZnVuY3Rpb24odCxuKXtcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJvYmplY3RcIj09dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz1uKCk6XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbXSxuKTpcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cz9leHBvcnRzLkRhdGFUYWJsZXM9bigpOnQuRGF0YVRhYmxlcz1uKCl9KHdpbmRvdyxmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgbj17fTtmdW5jdGlvbiBlKHIpe2lmKG5bcl0pcmV0dXJuIG5bcl0uZXhwb3J0czt2YXIgbz1uW3JdPXtpOnIsbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gdFtyXS5jYWxsKG8uZXhwb3J0cyxvLG8uZXhwb3J0cyxlKSxvLmw9ITAsby5leHBvcnRzfXJldHVybiBlLm09dCxlLmM9bixlLmQ9ZnVuY3Rpb24odCxuLHIpe2Uubyh0LG4pfHxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLHtlbnVtZXJhYmxlOiEwLGdldDpyfSl9LGUucj1mdW5jdGlvbih0KXtcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6XCJNb2R1bGVcIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pfSxlLnQ9ZnVuY3Rpb24odCxuKXtpZigxJm4mJih0PWUodCkpLDgmbilyZXR1cm4gdDtpZig0Jm4mJlwib2JqZWN0XCI9PXR5cGVvZiB0JiZ0JiZ0Ll9fZXNNb2R1bGUpcmV0dXJuIHQ7dmFyIHI9T2JqZWN0LmNyZWF0ZShudWxsKTtpZihlLnIociksT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsXCJkZWZhdWx0XCIse2VudW1lcmFibGU6ITAsdmFsdWU6dH0pLDImbiYmXCJzdHJpbmdcIiE9dHlwZW9mIHQpZm9yKHZhciBvIGluIHQpZS5kKHIsbyxmdW5jdGlvbihuKXtyZXR1cm4gdFtuXX0uYmluZChudWxsLG8pKTtyZXR1cm4gcn0sZS5uPWZ1bmN0aW9uKHQpe3ZhciBuPXQmJnQuX19lc01vZHVsZT9mdW5jdGlvbigpe3JldHVybiB0LmRlZmF1bHR9OmZ1bmN0aW9uKCl7cmV0dXJuIHR9O3JldHVybiBlLmQobixcImFcIixuKSxufSxlLm89ZnVuY3Rpb24odCxuKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil9LGUucD1cIi9cIixlKGUucz1cInRqVW9cIil9KHtcIis2WFhcIjpmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZShcInkxcElcIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiByKHRoaXMuX19kYXRhX18sdCk+LTF9fSxcIitLK2JcIjpmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZShcIkpIUmRcIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBuPW5ldyB0LmNvbnN0cnVjdG9yKHQuYnl0ZUxlbmd0aCk7cmV0dXJuIG5ldyByKG4pLnNldChuZXcgcih0KSksbn19LFwiK1FrYVwiOmZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKFwiZm1SY1wiKSxvPWUoXCJ0MkRuXCIpLGk9ZShcImNxLytcIiksdT1lKFwiVDFBVlwiKSxhPWUoXCJHb3lRXCIpLGM9ZShcIm1UVFJcIikscz1lKFwiaXRzalwiKTt0LmV4cG9ydHM9ZnVuY3Rpb24gdChuLGUsZixsLHApe24hPT1lJiZpKGUsZnVuY3Rpb24oaSxjKXtpZihwfHwocD1uZXcgciksYShpKSl1KG4sZSxjLGYsdCxsLHApO2Vsc2V7dmFyIGQ9bD9sKHMobixjKSxpLGMrXCJcIixuLGUscCk6dm9pZCAwO3ZvaWQgMD09PWQmJihkPWkpLG8obixjLGQpfX0sYyl9fSxcIitpRk9cIjpmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZShcImRUQWxcIiksbz1lKFwiTGNzV1wiKSxpPWUoXCI2c1ZaXCIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm5cImZ1bmN0aW9uXCIhPXR5cGVvZiB0LmNvbnN0cnVjdG9yfHxpKHQpP3t9OnIobyh0KSl9fSxcIjAzQStcIjpmdW5jdGlvbih0LG4pe3QuZXhwb3J0cz1mdW5jdGlvbigpe3JldHVybiExfX0sXCIyOXMvXCI6ZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoXCJXRXBrXCIpLG89ZShcIjVUMllcIiksaT1vW1wiX19jb3JlLWpzX3NoYXJlZF9fXCJdfHwob1tcIl9fY29yZS1qc19zaGFyZWRfX1wiXT17fSk7KHQuZXhwb3J0cz1mdW5jdGlvbih0LG4pe3JldHVybiBpW3RdfHwoaVt0XT12b2lkIDAhPT1uP246e30pfSkoXCJ2ZXJzaW9uc1wiLFtdKS5wdXNoKHt2ZXJzaW9uOnIudmVyc2lvbixtb2RlOmUoXCJ1T1BTXCIpP1wicHVyZVwiOlwiZ2xvYmFsXCIsY29weXJpZ2h0OlwiwqkgMjAxOSBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KVwifSl9LFwiMkdUUFwiOmZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKFwiZWFvaFwiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuLGUpe2lmKHIodCksdm9pZCAwPT09bilyZXR1cm4gdDtzd2l0Y2goZSl7Y2FzZSAxOnJldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdC5jYWxsKG4sZSl9O2Nhc2UgMjpyZXR1cm4gZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5jYWxsKG4sZSxyKX07Y2FzZSAzOnJldHVybiBmdW5jdGlvbihlLHIsbyl7cmV0dXJuIHQuY2FsbChuLGUscixvKX19cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQuYXBwbHkobixhcmd1bWVudHMpfX19LFwiMmZhRVwiOmZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKFwiNUs3WlwiKSxvPWUoXCJlVXRGXCIpLGk9ZShcIkc4TW9cIiksdT1PYmplY3QuZGVmaW5lUHJvcGVydHk7bi5mPWUoXCJqbURIXCIpP09iamVjdC5kZWZpbmVQcm9wZXJ0eTpmdW5jdGlvbih0LG4sZSl7aWYocih0KSxuPWkobiwhMCkscihlKSxvKXRyeXtyZXR1cm4gdSh0LG4sZSl9Y2F0Y2godCl7fWlmKFwiZ2V0XCJpbiBlfHxcInNldFwiaW4gZSl0aHJvdyBUeXBlRXJyb3IoXCJBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCFcIik7cmV0dXJuXCJ2YWx1ZVwiaW4gZSYmKHRbbl09ZS52YWx1ZSksdH19LFwiM0dKSFwiOmZ1bmN0aW9uKHQsbixlKXtlKFwibENjOFwiKTt2YXIgcj1lKFwiV0Vwa1wiKS5PYmplY3Q7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHIuY3JlYXRlKHQsbil9fSxcIjNMNjZcIjpmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZShcIk1NbURcIiksbz1lKFwiRXhBN1wiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG8odCkmJnIodCl9fSxcIjRNZkhcIjpmdW5jdGlvbih0LG4sZSl7KHQuZXhwb3J0cz1lKFwiSTFCRVwiKSghMSkpLnB1c2goW3QuaSxcIi5zYy10YWJsZSAucGFnaW5hdGlvbi13cmFwe3RleHQtYWxpZ246Y2VudGVyfS5zYy10YWJsZSAuYWN0aW9uLWxpc3R7dGV4dC1hbGlnbjpjZW50ZXJ9LnNjLXRhYmxlIC5hY3Rpb24tbGlzdD5zcGFuK3NwYW57bWFyZ2luLWxlZnQ6MTBweH1cXG5cIixcIlwiXSl9LFwiNHFDMFwiOmZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKFwiTnlrS1wiKSxvPWUoXCJaMGNtXCIpLGk9ZShcIkV4QTdcIiksdT1cIltvYmplY3QgU3RyaW5nXVwiO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgdHx8IW8odCkmJmkodCkmJnIodCk9PXV9fSxcIjVLN1pcIjpmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZShcIjkzSTRcIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCFyKHQpKXRocm93IFR5cGVFcnJvcih0K1wiIGlzIG5vdCBhbiBvYmplY3QhXCIpO3JldHVybiB0fX0sXCI1VDJZXCI6ZnVuY3Rpb24odCxuKXt2YXIgZT10LmV4cG9ydHM9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdyYmd2luZG93Lk1hdGg9PU1hdGg/d2luZG93OlwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmJiZzZWxmLk1hdGg9PU1hdGg/c2VsZjpGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7XCJudW1iZXJcIj09dHlwZW9mIF9fZyYmKF9fZz1lKX0sXCI1VGcwXCI6ZnVuY3Rpb24odCxuLGUpeyhmdW5jdGlvbih0KXt2YXIgcj1lKFwiS3o1eVwiKSxvPW4mJiFuLm5vZGVUeXBlJiZuLGk9byYmXCJvYmplY3RcIj09dHlwZW9mIHQmJnQmJiF0Lm5vZGVUeXBlJiZ0LHU9aSYmaS5leHBvcnRzPT09bz9yLkJ1ZmZlcjp2b2lkIDAsYT11P3UuYWxsb2NVbnNhZmU6dm9pZCAwO3QuZXhwb3J0cz1mdW5jdGlvbih0LG4pe2lmKG4pcmV0dXJuIHQuc2xpY2UoKTt2YXIgZT10Lmxlbmd0aCxyPWE/YShlKTpuZXcgdC5jb25zdHJ1Y3RvcihlKTtyZXR1cm4gdC5jb3B5KHIpLHJ9fSkuY2FsbCh0aGlzLGUoXCJZdVRpXCIpKHQpKX0sXCI1dk1WXCI6ZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoXCJCK09UXCIpLG89ZShcIk5zTy9cIiksaT1lKFwiVzA3MFwiKSghMSksdT1lKFwiVlZseFwiKShcIklFX1BST1RPXCIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LG4pe3ZhciBlLGE9byh0KSxjPTAscz1bXTtmb3IoZSBpbiBhKWUhPXUmJnIoYSxlKSYmcy5wdXNoKGUpO2Zvcig7bi5sZW5ndGg+YzspcihhLGU9bltjKytdKSYmKH5pKHMsZSl8fHMucHVzaChlKSk7cmV0dXJuIHN9fSxcIjZuSzhcIjpmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZShcImRWbjVcIiksbz1lKFwiZm82ZVwiKSxpPWUoXCJkdDB6XCIpLHU9ZShcIjlObVZcIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbixlKXtyZXR1cm4gdD1pKHQpLHZvaWQgMD09PShuPWU/dm9pZCAwOm4pP28odCk/dSh0KTpyKHQpOnQubWF0Y2gobil8fFtdfX0sXCI2c1ZaXCI6ZnVuY3Rpb24odCxuKXt0LmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4hMX19LFwiOTNJNFwiOmZ1bmN0aW9uKHQsbil7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVyblwib2JqZWN0XCI9PXR5cGVvZiB0P251bGwhPT10OlwiZnVuY3Rpb25cIj09dHlwZW9mIHR9fSxcIjlObVZcIjpmdW5jdGlvbih0LG4pe3ZhciBlPVwiXFxcXHhhY1xcXFx4YjFcXFxceGQ3XFxcXHhmN1xcXFx4MDAtXFxcXHgyZlxcXFx4M2EtXFxcXHg0MFxcXFx4NWItXFxcXHg2MFxcXFx4N2ItXFxcXHhiZlxcXFx1MjAwMC1cXFxcdTIwNmYgXFxcXHRcXFxceDBiXFxcXGZcXFxceGEwXFxcXHVmZWZmXFxcXG5cXFxcclxcXFx1MjAyOFxcXFx1MjAyOVxcXFx1MTY4MFxcXFx1MTgwZVxcXFx1MjAwMFxcXFx1MjAwMVxcXFx1MjAwMlxcXFx1MjAwM1xcXFx1MjAwNFxcXFx1MjAwNVxcXFx1MjAwNlxcXFx1MjAwN1xcXFx1MjAwOFxcXFx1MjAwOVxcXFx1MjAwYVxcXFx1MjAyZlxcXFx1MjA1ZlxcXFx1MzAwMFwiLHI9XCJbXCIrZStcIl1cIixvPVwiXFxcXGQrXCIsaT1cIltcXFxcdTI3MDAtXFxcXHUyN2JmXVwiLHU9XCJbYS16XFxcXHhkZi1cXFxceGY2XFxcXHhmOC1cXFxceGZmXVwiLGE9XCJbXlxcXFx1ZDgwMC1cXFxcdWRmZmZcIitlK28rXCJcXFxcdTI3MDAtXFxcXHUyN2JmYS16XFxcXHhkZi1cXFxceGY2XFxcXHhmOC1cXFxceGZmQS1aXFxcXHhjMC1cXFxceGQ2XFxcXHhkOC1cXFxceGRlXVwiLGM9XCIoPzpcXFxcdWQ4M2NbXFxcXHVkZGU2LVxcXFx1ZGRmZl0pezJ9XCIscz1cIltcXFxcdWQ4MDAtXFxcXHVkYmZmXVtcXFxcdWRjMDAtXFxcXHVkZmZmXVwiLGY9XCJbQS1aXFxcXHhjMC1cXFxceGQ2XFxcXHhkOC1cXFxceGRlXVwiLGw9XCIoPzpcIit1K1wifFwiK2ErXCIpXCIscD1cIig/OlwiK2YrXCJ8XCIrYStcIilcIixkPVwiKD86W1xcXFx1MDMwMC1cXFxcdTAzNmZcXFxcdWZlMjAtXFxcXHVmZTJmXFxcXHUyMGQwLVxcXFx1MjBmZl18XFxcXHVkODNjW1xcXFx1ZGZmYi1cXFxcdWRmZmZdKT9cIixoPVwiW1xcXFx1ZmUwZVxcXFx1ZmUwZl0/XCIrZCsoXCIoPzpcXFxcdTIwMGQoPzpcIitbXCJbXlxcXFx1ZDgwMC1cXFxcdWRmZmZdXCIsYyxzXS5qb2luKFwifFwiKStcIilbXFxcXHVmZTBlXFxcXHVmZTBmXT9cIitkK1wiKSpcIiksdj1cIig/OlwiK1tpLGMsc10uam9pbihcInxcIikrXCIpXCIraCxnPVJlZ0V4cChbZitcIj9cIit1K1wiKyg/Olsn4oCZXSg/OmR8bGx8bXxyZXxzfHR8dmUpKT8oPz1cIitbcixmLFwiJFwiXS5qb2luKFwifFwiKStcIilcIixwK1wiKyg/Olsn4oCZXSg/OkR8TEx8TXxSRXxTfFR8VkUpKT8oPz1cIitbcixmK2wsXCIkXCJdLmpvaW4oXCJ8XCIpK1wiKVwiLGYrXCI/XCIrbCtcIisoPzpbJ+KAmV0oPzpkfGxsfG18cmV8c3x0fHZlKSk/XCIsZitcIisoPzpbJ+KAmV0oPzpEfExMfE18UkV8U3xUfFZFKSk/XCIsXCJcXFxcZCooPzoxU1R8Mk5EfDNSRHwoPyFbMTIzXSlcXFxcZFRIKSg/PVxcXFxifFthLXpfXSlcIixcIlxcXFxkKig/OjFzdHwybmR8M3JkfCg/IVsxMjNdKVxcXFxkdGgpKD89XFxcXGJ8W0EtWl9dKVwiLG8sdl0uam9pbihcInxcIiksXCJnXCIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdC5tYXRjaChnKXx8W119fSxBeVVCOmZ1bmN0aW9uKHQsbixlKXt0LmV4cG9ydHM9e2RlZmF1bHQ6ZShcIjNHSkhcIiksX19lc01vZHVsZTohMH19LFwiQitPVFwiOmZ1bmN0aW9uKHQsbil7dmFyIGU9e30uaGFzT3duUHJvcGVydHk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGUuY2FsbCh0LG4pfX0sQ3djNTpmdW5jdGlvbih0LG4pe3QuZXhwb3J0cz1mdW5jdGlvbih0LG4pe3JldHVybiBudWxsPT10P3ZvaWQgMDp0W25dfX0sRDhrWTpmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZShcIk9qZ2RcIiksbz1NYXRoLm1heCxpPU1hdGgubWluO3QuZXhwb3J0cz1mdW5jdGlvbih0LG4pe3JldHVybih0PXIodCkpPDA/byh0K24sMCk6aSh0LG4pfX0sREVTcDpmdW5jdGlvbih0LG4sZSl7XCJ1c2Ugc3RyaWN0XCI7dmFyIHI9ZShcIlJlWXhcIik7ZS5uKHIpLmF9LERTUkU6ZnVuY3Rpb24odCxuKXt0LmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4hMX19LEVBN206ZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoXCJ6WjBIXCIpLG89ZShcIklvYW9cIiksaT1lKFwid2NsR1wiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuKXtyZXR1cm4gaShvKHQsbixyKSx0K1wiXCIpfX0sRXhBNzpmdW5jdGlvbih0LG4pe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9dCYmXCJvYmplY3RcIj09dHlwZW9mIHR9fSxGcEhhOmZ1bmN0aW9uKHQsbil7dC5leHBvcnRzPVwiY29uc3RydWN0b3IsaGFzT3duUHJvcGVydHksaXNQcm90b3R5cGVPZixwcm9wZXJ0eUlzRW51bWVyYWJsZSx0b0xvY2FsZVN0cmluZyx0b1N0cmluZyx2YWx1ZU9mXCIuc3BsaXQoXCIsXCIpfSxHOE1vOmZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKFwiOTNJNFwiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuKXtpZighcih0KSlyZXR1cm4gdDt2YXIgZSxvO2lmKG4mJlwiZnVuY3Rpb25cIj09dHlwZW9mKGU9dC50b1N0cmluZykmJiFyKG89ZS5jYWxsKHQpKSlyZXR1cm4gbztpZihcImZ1bmN0aW9uXCI9PXR5cGVvZihlPXQudmFsdWVPZikmJiFyKG89ZS5jYWxsKHQpKSlyZXR1cm4gbztpZighbiYmXCJmdW5jdGlvblwiPT10eXBlb2YoZT10LnRvU3RyaW5nKSYmIXIobz1lLmNhbGwodCkpKXJldHVybiBvO3Rocm93IFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKX19LEdRZUU6ZnVuY3Rpb24odCxuLGUpe3QuZXhwb3J0cz17ZGVmYXVsdDplKFwiaXE0dlwiKSxfX2VzTW9kdWxlOiEwfX0sR295UTpmdW5jdGlvbih0LG4pe3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgbj10eXBlb2YgdDtyZXR1cm4gbnVsbCE9dCYmKFwib2JqZWN0XCI9PW58fFwiZnVuY3Rpb25cIj09bil9fSxIc25zOmZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKFwiOTNJNFwiKSxvPWUoXCI1VDJZXCIpLmRvY3VtZW50LGk9cihvKSYmcihvLmNyZWF0ZUVsZW1lbnQpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaT9vLmNyZWF0ZUVsZW1lbnQodCk6e319fSxJMUJFOmZ1bmN0aW9uKHQsbil7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBuPVtdO3JldHVybiBuLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKG4pe3ZhciBlPWZ1bmN0aW9uKHQsbil7dmFyIGU9dFsxXXx8XCJcIixyPXRbM107aWYoIXIpcmV0dXJuIGU7aWYobiYmXCJmdW5jdGlvblwiPT10eXBlb2YgYnRvYSl7dmFyIG89KHU9cixcIi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxcIitidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeSh1KSkpKStcIiAqL1wiKSxpPXIuc291cmNlcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuXCIvKiMgc291cmNlVVJMPVwiK3Iuc291cmNlUm9vdCt0K1wiICovXCJ9KTtyZXR1cm5bZV0uY29uY2F0KGkpLmNvbmNhdChbb10pLmpvaW4oXCJcXG5cIil9dmFyIHU7cmV0dXJuW2VdLmpvaW4oXCJcXG5cIil9KG4sdCk7cmV0dXJuIG5bMl0/XCJAbWVkaWEgXCIrblsyXStcIntcIitlK1wifVwiOmV9KS5qb2luKFwiXCIpfSxuLmk9ZnVuY3Rpb24odCxlKXtcInN0cmluZ1wiPT10eXBlb2YgdCYmKHQ9W1tudWxsLHQsXCJcIl1dKTtmb3IodmFyIHI9e30sbz0wO288dGhpcy5sZW5ndGg7bysrKXt2YXIgaT10aGlzW29dWzBdO1wibnVtYmVyXCI9PXR5cGVvZiBpJiYocltpXT0hMCl9Zm9yKG89MDtvPHQubGVuZ3RoO28rKyl7dmFyIHU9dFtvXTtcIm51bWJlclwiPT10eXBlb2YgdVswXSYmclt1WzBdXXx8KGUmJiF1WzJdP3VbMl09ZTplJiYodVsyXT1cIihcIit1WzJdK1wiKSBhbmQgKFwiK2UrXCIpXCIpLG4ucHVzaCh1KSl9fSxufX0sSW9hbzpmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZShcImhlTldcIiksbz1NYXRoLm1heDt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuLGUpe3JldHVybiBuPW8odm9pZCAwPT09bj90Lmxlbmd0aC0xOm4sMCksZnVuY3Rpb24oKXtmb3IodmFyIGk9YXJndW1lbnRzLHU9LTEsYT1vKGkubGVuZ3RoLW4sMCksYz1BcnJheShhKTsrK3U8YTspY1t1XT1pW24rdV07dT0tMTtmb3IodmFyIHM9QXJyYXkobisxKTsrK3U8bjspc1t1XT1pW3VdO3JldHVybiBzW25dPWUoYykscih0LHRoaXMscyl9fX0sSkI2ODpmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZShcIkplczBcIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3Qocih0KSl9fSxKSFJkOmZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKFwiS3o1eVwiKS5VaW50OEFycmF5O3QuZXhwb3J0cz1yfSxKZXMwOmZ1bmN0aW9uKHQsbil7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKHZvaWQgMD09dCl0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiAgXCIrdCk7cmV0dXJuIHR9fSxLTWtkOmZ1bmN0aW9uKHQsbil7dC5leHBvcnRzPWZ1bmN0aW9uKCl7dGhpcy5fX2RhdGFfXz1bXSx0aGlzLnNpemU9MH19LEtVeFA6ZnVuY3Rpb24odCxuKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dHJ5e3JldHVybiEhdCgpfWNhdGNoKHQpe3JldHVybiEwfX19LEt6NXk6ZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoXCJXRnFVXCIpLG89XCJvYmplY3RcIj09dHlwZW9mIHNlbGYmJnNlbGYmJnNlbGYuT2JqZWN0PT09T2JqZWN0JiZzZWxmLGk9cnx8b3x8RnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpO3QuZXhwb3J0cz1pfSxMY3NXOmZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKFwia2VrRlwiKShPYmplY3QuZ2V0UHJvdG90eXBlT2YsT2JqZWN0KTt0LmV4cG9ydHM9cn0sTHNIUTpmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZShcIkVBN21cIiksbz1lKFwibXYvWFwiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHIoZnVuY3Rpb24obixlKXt2YXIgcj0tMSxpPWUubGVuZ3RoLHU9aT4xP2VbaS0xXTp2b2lkIDAsYT1pPjI/ZVsyXTp2b2lkIDA7Zm9yKHU9dC5sZW5ndGg+MyYmXCJmdW5jdGlvblwiPT10eXBlb2YgdT8oaS0tLHUpOnZvaWQgMCxhJiZvKGVbMF0sZVsxXSxhKSYmKHU9aTwzP3ZvaWQgMDp1LGk9MSksbj1PYmplY3Qobik7KytyPGk7KXt2YXIgYz1lW3JdO2MmJnQobixjLHIsdSl9cmV0dXJuIG59KX19LE0xeHA6ZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoXCJhMHh1XCIpO3QuZXhwb3J0cz1PYmplY3QoXCJ6XCIpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApP09iamVjdDpmdW5jdGlvbih0KXtyZXR1cm5cIlN0cmluZ1wiPT1yKHQpP3Quc3BsaXQoXCJcIik6T2JqZWN0KHQpfX0sTU1tRDpmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZShcImxTQ0RcIiksbz1lKFwic2hqQlwiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGwhPXQmJm8odC5sZW5ndGgpJiYhcih0KX19LE1xYmw6ZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoXCJKQjY4XCIpLG89ZShcInc2R09cIik7ZShcInpuN05cIikoXCJrZXlzXCIsZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG8ocih0KSl9fSl9LE1yUGQ6ZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoXCJoeXBvXCIpLG89ZShcImxqaE5cIiksaT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3QuZXhwb3J0cz1mdW5jdGlvbih0LG4sZSl7dmFyIHU9dFtuXTtpLmNhbGwodCxuKSYmbyh1LGUpJiYodm9pZCAwIT09ZXx8biBpbiB0KXx8cih0LG4sZSl9fSxNdUVXOmZ1bmN0aW9uKHQsbixlKXsodC5leHBvcnRzPWUoXCJJMUJFXCIpKCExKSkucHVzaChbdC5pLFwiLnNjLXRhYmxlIC5wYWdpbmF0aW9uLXdyYXB7dGV4dC1hbGlnbjpjZW50ZXJ9LnNjLXRhYmxlIC5hY3Rpb24tbGlzdHt0ZXh0LWFsaWduOmNlbnRlcn0uc2MtdGFibGUgLmFjdGlvbi1saXN0PnNwYW4rc3BhbnttYXJnaW4tbGVmdDoxMHB4fVxcblwiLFwiXCJdKX0sTXZ3QzpmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZShcIjVUMllcIikuZG9jdW1lbnQ7dC5leHBvcnRzPXImJnIuZG9jdW1lbnRFbGVtZW50fSxOMW9tOmZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKFwic2dvcVwiKShmdW5jdGlvbih0LG4sZSl7cmV0dXJuIHQrKGU/XCItXCI6XCJcIikrbi50b0xvd2VyQ2FzZSgpfSk7dC5leHBvcnRzPXJ9LE5WMGs6ZnVuY3Rpb24odCxuKXtuLmY9e30ucHJvcGVydHlJc0VudW1lcmFibGV9LE5lZ006ZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoXCIyZmFFXCIpLG89ZShcInJyMWlcIik7dC5leHBvcnRzPWUoXCJqbURIXCIpP2Z1bmN0aW9uKHQsbixlKXtyZXR1cm4gci5mKHQsbixvKDEsZSkpfTpmdW5jdGlvbih0LG4sZSl7cmV0dXJuIHRbbl09ZSx0fX0sXCJOc08vXCI6ZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoXCJNMXhwXCIpLG89ZShcIkplczBcIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiByKG8odCkpfX0sTnlrSzpmdW5jdGlvbih0LG4pe3ZhciBlPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBlLmNhbGwodCl9fSxPMG9TOmZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKFwiQ3djNVwiKSxvPWZ1bmN0aW9uKCl7dHJ5e3ZhciB0PXIoT2JqZWN0LFwiZGVmaW5lUHJvcGVydHlcIik7cmV0dXJuIHQoe30sXCJcIix7fSksdH1jYXRjaCh0KXt9fSgpO3QuZXhwb3J0cz1vfSxPamdkOmZ1bmN0aW9uKHQsbil7dmFyIGU9TWF0aC5jZWlsLHI9TWF0aC5mbG9vcjt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGlzTmFOKHQ9K3QpPzA6KHQ+MD9yOmUpKHQpfX0sUDJzWTpmdW5jdGlvbih0LG4sZSl7dC5leHBvcnRzPXtkZWZhdWx0OmUoXCJVYmJFXCIpLF9fZXNNb2R1bGU6ITB9fSxRMWw0OmZ1bmN0aW9uKHQsbil7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbil7dmFyIGU9LTEscj10Lmxlbmd0aDtmb3Iobnx8KG49QXJyYXkocikpOysrZTxyOyluW2VdPXRbZV07cmV0dXJuIG59fSxRYkxaOmZ1bmN0aW9uKHQsbixlKXtcInVzZSBzdHJpY3RcIjtuLl9fZXNNb2R1bGU9ITA7dmFyIHIsbz1lKFwiUDJzWVwiKSxpPShyPW8pJiZyLl9fZXNNb2R1bGU/cjp7ZGVmYXVsdDpyfTtuLmRlZmF1bHQ9aS5kZWZhdWx0fHxmdW5jdGlvbih0KXtmb3IodmFyIG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXt2YXIgZT1hcmd1bWVudHNbbl07Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJih0W3JdPWVbcl0pfXJldHVybiB0fX0sUWtWTjpmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZShcIitRa2FcIiksbz1lKFwiTHNIUVwiKShmdW5jdGlvbih0LG4sZSl7cih0LG4sZSl9KTt0LmV4cG9ydHM9b30sUmVZeDpmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZShcIjRNZkhcIik7XCJzdHJpbmdcIj09dHlwZW9mIHImJihyPVtbdC5pLHIsXCJcIl1dKSxyLmxvY2FscyYmKHQuZXhwb3J0cz1yLmxvY2Fscyk7KDAsZShcIlNaN21cIikuZGVmYXVsdCkoXCJmYjhkYmEyOFwiLHIsITAse30pfSxTWjdtOmZ1bmN0aW9uKHQsbixlKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiByKHQsbil7Zm9yKHZhciBlPVtdLHI9e30sbz0wO288bi5sZW5ndGg7bysrKXt2YXIgaT1uW29dLHU9aVswXSxhPXtpZDp0K1wiOlwiK28sY3NzOmlbMV0sbWVkaWE6aVsyXSxzb3VyY2VNYXA6aVszXX07clt1XT9yW3VdLnBhcnRzLnB1c2goYSk6ZS5wdXNoKHJbdV09e2lkOnUscGFydHM6W2FdfSl9cmV0dXJuIGV9ZS5yKG4pLGUuZChuLFwiZGVmYXVsdFwiLGZ1bmN0aW9uKCl7cmV0dXJuIGh9KTt2YXIgbz1cInVuZGVmaW5lZFwiIT10eXBlb2YgZG9jdW1lbnQ7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIERFQlVHJiZERUJVRyYmIW8pdGhyb3cgbmV3IEVycm9yKFwidnVlLXN0eWxlLWxvYWRlciBjYW5ub3QgYmUgdXNlZCBpbiBhIG5vbi1icm93c2VyIGVudmlyb25tZW50LiBVc2UgeyB0YXJnZXQ6ICdub2RlJyB9IGluIHlvdXIgV2VicGFjayBjb25maWcgdG8gaW5kaWNhdGUgYSBzZXJ2ZXItcmVuZGVyaW5nIGVudmlyb25tZW50LlwiKTt2YXIgaT17fSx1PW8mJihkb2N1bWVudC5oZWFkfHxkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImhlYWRcIilbMF0pLGE9bnVsbCxjPTAscz0hMSxmPWZ1bmN0aW9uKCl7fSxsPW51bGwscD1cImRhdGEtdnVlLXNzci1pZFwiLGQ9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIG5hdmlnYXRvciYmL21zaWUgWzYtOV1cXGIvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpKTtmdW5jdGlvbiBoKHQsbixlLG8pe3M9ZSxsPW98fHt9O3ZhciB1PXIodCxuKTtyZXR1cm4gdih1KSxmdW5jdGlvbihuKXtmb3IodmFyIGU9W10sbz0wO288dS5sZW5ndGg7bysrKXt2YXIgYT11W29dOyhjPWlbYS5pZF0pLnJlZnMtLSxlLnB1c2goYyl9bj92KHU9cih0LG4pKTp1PVtdO2ZvcihvPTA7bzxlLmxlbmd0aDtvKyspe3ZhciBjO2lmKDA9PT0oYz1lW29dKS5yZWZzKXtmb3IodmFyIHM9MDtzPGMucGFydHMubGVuZ3RoO3MrKyljLnBhcnRzW3NdKCk7ZGVsZXRlIGlbYy5pZF19fX19ZnVuY3Rpb24gdih0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGU9dFtuXSxyPWlbZS5pZF07aWYocil7ci5yZWZzKys7Zm9yKHZhciBvPTA7bzxyLnBhcnRzLmxlbmd0aDtvKyspci5wYXJ0c1tvXShlLnBhcnRzW29dKTtmb3IoO288ZS5wYXJ0cy5sZW5ndGg7bysrKXIucGFydHMucHVzaCh5KGUucGFydHNbb10pKTtyLnBhcnRzLmxlbmd0aD5lLnBhcnRzLmxlbmd0aCYmKHIucGFydHMubGVuZ3RoPWUucGFydHMubGVuZ3RoKX1lbHNle3ZhciB1PVtdO2ZvcihvPTA7bzxlLnBhcnRzLmxlbmd0aDtvKyspdS5wdXNoKHkoZS5wYXJ0c1tvXSkpO2lbZS5pZF09e2lkOmUuaWQscmVmczoxLHBhcnRzOnV9fX19ZnVuY3Rpb24gZygpe3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtyZXR1cm4gdC50eXBlPVwidGV4dC9jc3NcIix1LmFwcGVuZENoaWxkKHQpLHR9ZnVuY3Rpb24geSh0KXt2YXIgbixlLHI9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcInN0eWxlW1wiK3ArJ349XCInK3QuaWQrJ1wiXScpO2lmKHIpe2lmKHMpcmV0dXJuIGY7ci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHIpfWlmKGQpe3ZhciBvPWMrKztyPWF8fChhPWcoKSksbj1tLmJpbmQobnVsbCxyLG8sITEpLGU9bS5iaW5kKG51bGwscixvLCEwKX1lbHNlIHI9ZygpLG49ZnVuY3Rpb24odCxuKXt2YXIgZT1uLmNzcyxyPW4ubWVkaWEsbz1uLnNvdXJjZU1hcDtyJiZ0LnNldEF0dHJpYnV0ZShcIm1lZGlhXCIscik7bC5zc3JJZCYmdC5zZXRBdHRyaWJ1dGUocCxuLmlkKTtvJiYoZSs9XCJcXG4vKiMgc291cmNlVVJMPVwiK28uc291cmNlc1swXStcIiAqL1wiLGUrPVwiXFxuLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxcIitidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShvKSkpKStcIiAqL1wiKTtpZih0LnN0eWxlU2hlZXQpdC5zdHlsZVNoZWV0LmNzc1RleHQ9ZTtlbHNle2Zvcig7dC5maXJzdENoaWxkOyl0LnJlbW92ZUNoaWxkKHQuZmlyc3RDaGlsZCk7dC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShlKSl9fS5iaW5kKG51bGwsciksZT1mdW5jdGlvbigpe3IucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChyKX07cmV0dXJuIG4odCksZnVuY3Rpb24ocil7aWYocil7aWYoci5jc3M9PT10LmNzcyYmci5tZWRpYT09PXQubWVkaWEmJnIuc291cmNlTWFwPT09dC5zb3VyY2VNYXApcmV0dXJuO24odD1yKX1lbHNlIGUoKX19dmFyIHgsYj0oeD1bXSxmdW5jdGlvbih0LG4pe3JldHVybiB4W3RdPW4seC5maWx0ZXIoQm9vbGVhbikuam9pbihcIlxcblwiKX0pO2Z1bmN0aW9uIG0odCxuLGUscil7dmFyIG89ZT9cIlwiOnIuY3NzO2lmKHQuc3R5bGVTaGVldCl0LnN0eWxlU2hlZXQuY3NzVGV4dD1iKG4sbyk7ZWxzZXt2YXIgaT1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShvKSx1PXQuY2hpbGROb2Rlczt1W25dJiZ0LnJlbW92ZUNoaWxkKHVbbl0pLHUubGVuZ3RoP3QuaW5zZXJ0QmVmb3JlKGksdVtuXSk6dC5hcHBlbmRDaGlsZChpKX19fSxUMUFWOmZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKFwidDJEblwiKSxvPWUoXCI1VGcwXCIpLGk9ZShcInlQNWZcIiksdT1lKFwiUTFsNFwiKSxhPWUoXCIraUZPXCIpLGM9ZShcIjAzQStcIikscz1lKFwiWjBjbVwiKSxmPWUoXCIzTDY2XCIpLGw9ZShcIkRTUkVcIikscD1lKFwibFNDRFwiKSxkPWUoXCJHb3lRXCIpLGg9ZShcIllPM1ZcIiksdj1lKFwiYzZ3R1wiKSxnPWUoXCJpdHNqXCIpLHk9ZShcImplTG9cIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbixlLHgsYixtLGope3ZhciBTPWcodCxlKSxQPWcobixlKSxPPWouZ2V0KFApO2lmKE8pcih0LGUsTyk7ZWxzZXt2YXIgXz1tP20oUyxQLGUrXCJcIix0LG4saik6dm9pZCAwLHc9dm9pZCAwPT09XztpZih3KXt2YXIgQz1zKFApLFQ9IUMmJmwoUCksRT0hQyYmIVQmJnYoUCk7Xz1QLEN8fFR8fEU/cyhTKT9fPVM6ZihTKT9fPXUoUyk6VD8odz0hMSxfPW8oUCwhMCkpOkU/KHc9ITEsXz1pKFAsITApKTpfPVtdOmgoUCl8fGMoUCk/KF89UyxjKFMpP189eShTKTpkKFMpJiYhcChTKXx8KF89YShQKSkpOnc9ITF9dyYmKGouc2V0KFAsXyksYihfLFAseCxtLGopLGouZGVsZXRlKFApKSxyKHQsZSxfKX19fSxUS3JFOmZ1bmN0aW9uKHQsbil7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0fX0sVWJiRTpmdW5jdGlvbih0LG4sZSl7ZShcIm84TkhcIiksdC5leHBvcnRzPWUoXCJXRXBrXCIpLk9iamVjdC5hc3NpZ259LFZWbHg6ZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoXCIyOXMvXCIpKFwia2V5c1wiKSxvPWUoXCJZcUFjXCIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gclt0XXx8KHJbdF09byh0KSl9fSxXMDcwOmZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKFwiTnNPL1wiKSxvPWUoXCJ0RWVqXCIpLGk9ZShcIkQ4a1lcIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihuLGUsdSl7dmFyIGEsYz1yKG4pLHM9byhjLmxlbmd0aCksZj1pKHUscyk7aWYodCYmZSE9ZSl7Zm9yKDtzPmY7KWlmKChhPWNbZisrXSkhPWEpcmV0dXJuITB9ZWxzZSBmb3IoO3M+ZjtmKyspaWYoKHR8fGYgaW4gYykmJmNbZl09PT1lKXJldHVybiB0fHxmfHwwO3JldHVybiF0JiYtMX19fSxXRXBrOmZ1bmN0aW9uKHQsbil7dmFyIGU9dC5leHBvcnRzPXt2ZXJzaW9uOlwiMi42LjEwXCJ9O1wibnVtYmVyXCI9PXR5cGVvZiBfX2UmJihfX2U9ZSl9LFdGcVU6ZnVuY3Rpb24odCxuLGUpeyhmdW5jdGlvbihuKXt2YXIgZT1cIm9iamVjdFwiPT10eXBlb2YgbiYmbiYmbi5PYmplY3Q9PT1PYmplY3QmJm47dC5leHBvcnRzPWV9KS5jYWxsKHRoaXMsZShcInlMcGpcIikpfSxZN1pDOmZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKFwiNVQyWVwiKSxvPWUoXCJXRXBrXCIpLGk9ZShcIjJHVFBcIiksdT1lKFwiTmVnTVwiKSxhPWUoXCJCK09UXCIpLGM9ZnVuY3Rpb24odCxuLGUpe3ZhciBzLGYsbCxwPXQmYy5GLGQ9dCZjLkcsaD10JmMuUyx2PXQmYy5QLGc9dCZjLkIseT10JmMuVyx4PWQ/bzpvW25dfHwob1tuXT17fSksYj14LnByb3RvdHlwZSxtPWQ/cjpoP3Jbbl06KHJbbl18fHt9KS5wcm90b3R5cGU7Zm9yKHMgaW4gZCYmKGU9biksZSkoZj0hcCYmbSYmdm9pZCAwIT09bVtzXSkmJmEoeCxzKXx8KGw9Zj9tW3NdOmVbc10seFtzXT1kJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBtW3NdP2Vbc106ZyYmZj9pKGwscik6eSYmbVtzXT09bD9mdW5jdGlvbih0KXt2YXIgbj1mdW5jdGlvbihuLGUscil7aWYodGhpcyBpbnN0YW5jZW9mIHQpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIG5ldyB0O2Nhc2UgMTpyZXR1cm4gbmV3IHQobik7Y2FzZSAyOnJldHVybiBuZXcgdChuLGUpfXJldHVybiBuZXcgdChuLGUscil9cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtyZXR1cm4gbi5wcm90b3R5cGU9dC5wcm90b3R5cGUsbn0obCk6diYmXCJmdW5jdGlvblwiPT10eXBlb2YgbD9pKEZ1bmN0aW9uLmNhbGwsbCk6bCx2JiYoKHgudmlydHVhbHx8KHgudmlydHVhbD17fSkpW3NdPWwsdCZjLlImJmImJiFiW3NdJiZ1KGIscyxsKSkpfTtjLkY9MSxjLkc9MixjLlM9NCxjLlA9OCxjLkI9MTYsYy5XPTMyLGMuVT02NCxjLlI9MTI4LHQuZXhwb3J0cz1jfSxZTzNWOmZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKFwiTnlrS1wiKSxvPWUoXCJMY3NXXCIpLGk9ZShcIkV4QTdcIiksdT1cIltvYmplY3QgT2JqZWN0XVwiLGE9RnVuY3Rpb24ucHJvdG90eXBlLGM9T2JqZWN0LnByb3RvdHlwZSxzPWEudG9TdHJpbmcsZj1jLmhhc093blByb3BlcnR5LGw9cy5jYWxsKE9iamVjdCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCFpKHQpfHxyKHQpIT11KXJldHVybiExO3ZhciBuPW8odCk7aWYobnVsbD09PW4pcmV0dXJuITA7dmFyIGU9Zi5jYWxsKG4sXCJjb25zdHJ1Y3RvclwiKSYmbi5jb25zdHJ1Y3RvcjtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiZlIGluc3RhbmNlb2YgZSYmcy5jYWxsKGUpPT1sfX0sWXFBYzpmdW5jdGlvbih0LG4pe3ZhciBlPTAscj1NYXRoLnJhbmRvbSgpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm5cIlN5bWJvbChcIi5jb25jYXQodm9pZCAwPT09dD9cIlwiOnQsXCIpX1wiLCgrK2UrcikudG9TdHJpbmcoMzYpKX19LFl1VGk6ZnVuY3Rpb24odCxuKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQud2VicGFja1BvbHlmaWxsfHwodC5kZXByZWNhdGU9ZnVuY3Rpb24oKXt9LHQucGF0aHM9W10sdC5jaGlsZHJlbnx8KHQuY2hpbGRyZW49W10pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwibG9hZGVkXCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHQubH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcImlkXCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHQuaX19KSx0LndlYnBhY2tQb2x5ZmlsbD0xKSx0fX0sWjBjbTpmdW5jdGlvbih0LG4pe3ZhciBlPUFycmF5LmlzQXJyYXk7dC5leHBvcnRzPWV9LFo4b0M6ZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoXCJ5MXBJXCIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LG4pe3ZhciBlPXRoaXMuX19kYXRhX18sbz1yKGUsdCk7cmV0dXJuIG88MD8oKyt0aGlzLnNpemUsZS5wdXNoKFt0LG5dKSk6ZVtvXVsxXT1uLHRoaXN9fSxhMHh1OmZ1bmN0aW9uKHQsbil7dmFyIGU9e30udG9TdHJpbmc7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBlLmNhbGwodCkuc2xpY2UoOCwtMSl9fSxhZFU0OmZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKFwieTFwSVwiKSxvPUFycmF5LnByb3RvdHlwZS5zcGxpY2U7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMuX19kYXRhX18sZT1yKG4sdCk7cmV0dXJuIShlPDB8fChlPT1uLmxlbmd0aC0xP24ucG9wKCk6by5jYWxsKG4sZSwxKSwtLXRoaXMuc2l6ZSwwKSl9fSxhc0RBOmZ1bmN0aW9uKHQsbil7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbixlLHIpe3ZhciBvPS0xLGk9bnVsbD09dD8wOnQubGVuZ3RoO2ZvcihyJiZpJiYoZT10Wysrb10pOysrbzxpOyllPW4oZSx0W29dLG8sdCk7cmV0dXJuIGV9fSxjNndHOmZ1bmN0aW9uKHQsbil7dC5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuITF9fSxcImNxLytcIjpmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZShcIm1jMGdcIikoKTt0LmV4cG9ydHM9cn0sZFRBbDpmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZShcIkdveVFcIiksbz1PYmplY3QuY3JlYXRlLGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiBmdW5jdGlvbihuKXtpZighcihuKSlyZXR1cm57fTtpZihvKXJldHVybiBvKG4pO3QucHJvdG90eXBlPW47dmFyIGU9bmV3IHQ7cmV0dXJuIHQucHJvdG90eXBlPXZvaWQgMCxlfX0oKTt0LmV4cG9ydHM9aX0sZFZuNTpmdW5jdGlvbih0LG4pe3ZhciBlPS9bXlxceDAwLVxceDJmXFx4M2EtXFx4NDBcXHg1Yi1cXHg2MFxceDdiLVxceDdmXSsvZzt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQubWF0Y2goZSl8fFtdfX0sZHQwejpmdW5jdGlvbih0LG4pe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdH19LGVVdEY6ZnVuY3Rpb24odCxuLGUpe3QuZXhwb3J0cz0hZShcImptREhcIikmJiFlKFwiS1V4UFwiKShmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkoZShcIkhzbnNcIikoXCJkaXZcIiksXCJhXCIse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pLmF9KX0sZWFvaDpmdW5jdGlvbih0LG4pe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0KXRocm93IFR5cGVFcnJvcih0K1wiIGlzIG5vdCBhIGZ1bmN0aW9uIVwiKTtyZXR1cm4gdH19LGZtUmM6ZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoXCJLTWtkXCIpLG89ZShcImFkVTRcIiksaT1lKFwidE1CN1wiKSx1PWUoXCIrNlhYXCIpLGE9ZShcIlo4b0NcIik7ZnVuY3Rpb24gYyh0KXt2YXIgbj0tMSxlPW51bGw9PXQ/MDp0Lmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrbjxlOyl7dmFyIHI9dFtuXTt0aGlzLnNldChyWzBdLHJbMV0pfX1jLnByb3RvdHlwZS5jbGVhcj1yLGMucHJvdG90eXBlLmRlbGV0ZT1vLGMucHJvdG90eXBlLmdldD1pLGMucHJvdG90eXBlLmhhcz11LGMucHJvdG90eXBlLnNldD1hLHQuZXhwb3J0cz1jfSxmbzZlOmZ1bmN0aW9uKHQsbil7dmFyIGU9L1thLXpdW0EtWl18W0EtWl17Mn1bYS16XXxbMC05XVthLXpBLVpdfFthLXpBLVpdWzAtOV18W15hLXpBLVowLTkgXS87dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBlLnRlc3QodCl9fSxmcEM1OmZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKFwiMmZhRVwiKSxvPWUoXCI1SzdaXCIpLGk9ZShcInc2R09cIik7dC5leHBvcnRzPWUoXCJqbURIXCIpP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzOmZ1bmN0aW9uKHQsbil7byh0KTtmb3IodmFyIGUsdT1pKG4pLGE9dS5sZW5ndGgsYz0wO2E+Yzspci5mKHQsZT11W2MrK10sbltlXSk7cmV0dXJuIHR9fSxcImdTL3FcIjpmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZShcIk11RVdcIik7XCJzdHJpbmdcIj09dHlwZW9mIHImJihyPVtbdC5pLHIsXCJcIl1dKSxyLmxvY2FscyYmKHQuZXhwb3J0cz1yLmxvY2Fscyk7KDAsZShcIlNaN21cIikuZGVmYXVsdCkoXCJmZTdiYWNiNFwiLHIsITAse30pfSxoZU5XOmZ1bmN0aW9uKHQsbil7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbixlKXtzd2l0Y2goZS5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gdC5jYWxsKG4pO2Nhc2UgMTpyZXR1cm4gdC5jYWxsKG4sZVswXSk7Y2FzZSAyOnJldHVybiB0LmNhbGwobixlWzBdLGVbMV0pO2Nhc2UgMzpyZXR1cm4gdC5jYWxsKG4sZVswXSxlWzFdLGVbMl0pfXJldHVybiB0LmFwcGx5KG4sZSl9fSxoeXBvOmZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKFwiTzBvU1wiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuLGUpe1wiX19wcm90b19fXCI9PW4mJnI/cih0LG4se2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOmUsd3JpdGFibGU6ITB9KTp0W25dPWV9fSxpcTR2OmZ1bmN0aW9uKHQsbixlKXtlKFwiTXFibFwiKSx0LmV4cG9ydHM9ZShcIldFcGtcIikuT2JqZWN0LmtleXN9LGl0c2o6ZnVuY3Rpb24odCxuKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuKXtpZigoXCJjb25zdHJ1Y3RvclwiIT09bnx8XCJmdW5jdGlvblwiIT10eXBlb2YgdFtuXSkmJlwiX19wcm90b19fXCIhPW4pcmV0dXJuIHRbbl19fSxqY3VMOmZ1bmN0aW9uKHQsbixlKXtcInVzZSBzdHJpY3RcIjt2YXIgcj1lKFwiZ1MvcVwiKTtlLm4ocikuYX0samVMbzpmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZShcImp1djhcIiksbz1lKFwibVRUUlwiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHIodCxvKHQpKX19LGptREg6ZnVuY3Rpb24odCxuLGUpe3QuZXhwb3J0cz0hZShcIktVeFBcIikoZnVuY3Rpb24oKXtyZXR1cm4gNyE9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LFwiYVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSl9LGpvNlk6ZnVuY3Rpb24odCxuLGUpe1widXNlIHN0cmljdFwiO24uX19lc01vZHVsZT0hMCxuLmRlZmF1bHQ9ZnVuY3Rpb24odCxuKXt2YXIgZT17fTtmb3IodmFyIHIgaW4gdCluLmluZGV4T2Yocik+PTB8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LHIpJiYoZVtyXT10W3JdKTtyZXR1cm4gZX19LGp1djg6ZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoXCJNclBkXCIpLG89ZShcImh5cG9cIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbixlLGkpe3ZhciB1PSFlO2V8fChlPXt9KTtmb3IodmFyIGE9LTEsYz1uLmxlbmd0aDsrK2E8Yzspe3ZhciBzPW5bYV0sZj1pP2koZVtzXSx0W3NdLHMsZSx0KTp2b2lkIDA7dm9pZCAwPT09ZiYmKGY9dFtzXSksdT9vKGUscyxmKTpyKGUscyxmKX1yZXR1cm4gZX19LGtla0Y6ZnVuY3Rpb24odCxuKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuKXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQobihlKSl9fX0sa3ZybjpmdW5jdGlvbih0LG4pe3ZhciBlPS9eKGF0dHJzfHByb3BzfG9ufG5hdGl2ZU9ufGNsYXNzfHN0eWxlfGhvb2spJC87ZnVuY3Rpb24gcih0LG4pe3JldHVybiBmdW5jdGlvbigpe3QmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpLG4mJm4uYXBwbHkodGhpcyxhcmd1bWVudHMpfX10LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQucmVkdWNlKGZ1bmN0aW9uKHQsbil7dmFyIG8saSx1LGEsYztmb3IodSBpbiBuKWlmKG89dFt1XSxpPW5bdV0sbyYmZS50ZXN0KHUpKWlmKFwiY2xhc3NcIj09PXUmJihcInN0cmluZ1wiPT10eXBlb2YgbyYmKGM9byx0W3VdPW89e30sb1tjXT0hMCksXCJzdHJpbmdcIj09dHlwZW9mIGkmJihjPWksblt1XT1pPXt9LGlbY109ITApKSxcIm9uXCI9PT11fHxcIm5hdGl2ZU9uXCI9PT11fHxcImhvb2tcIj09PXUpZm9yKGEgaW4gaSlvW2FdPXIob1thXSxpW2FdKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkobykpdFt1XT1vLmNvbmNhdChpKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkoaSkpdFt1XT1bb10uY29uY2F0KGkpO2Vsc2UgZm9yKGEgaW4gaSlvW2FdPWlbYV07ZWxzZSB0W3VdPW5bdV07cmV0dXJuIHR9LHt9KX19LGt3WjE6ZnVuY3Rpb24odCxuLGUpe1widXNlIHN0cmljdFwiO3ZhciByPWUoXCJqbURIXCIpLG89ZShcInc2R09cIiksaT1lKFwibXFsRlwiKSx1PWUoXCJOVjBrXCIpLGE9ZShcIkpCNjhcIiksYz1lKFwiTTF4cFwiKSxzPU9iamVjdC5hc3NpZ247dC5leHBvcnRzPSFzfHxlKFwiS1V4UFwiKShmdW5jdGlvbigpe3ZhciB0PXt9LG49e30sZT1TeW1ib2woKSxyPVwiYWJjZGVmZ2hpamtsbW5vcHFyc3RcIjtyZXR1cm4gdFtlXT03LHIuc3BsaXQoXCJcIikuZm9yRWFjaChmdW5jdGlvbih0KXtuW3RdPXR9KSw3IT1zKHt9LHQpW2VdfHxPYmplY3Qua2V5cyhzKHt9LG4pKS5qb2luKFwiXCIpIT1yfSk/ZnVuY3Rpb24odCxuKXtmb3IodmFyIGU9YSh0KSxzPWFyZ3VtZW50cy5sZW5ndGgsZj0xLGw9aS5mLHA9dS5mO3M+ZjspZm9yKHZhciBkLGg9Yyhhcmd1bWVudHNbZisrXSksdj1sP28oaCkuY29uY2F0KGwoaCkpOm8oaCksZz12Lmxlbmd0aCx5PTA7Zz55OylkPXZbeSsrXSxyJiYhcC5jYWxsKGgsZCl8fChlW2RdPWhbZF0pO3JldHVybiBlfTpzfSxsQ2M4OmZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKFwiWTdaQ1wiKTtyKHIuUyxcIk9iamVjdFwiLHtjcmVhdGU6ZShcIm9WbWxcIil9KX0sbFNDRDpmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZShcIk55a0tcIiksbz1lKFwiR295UVwiKSxpPVwiW29iamVjdCBBc3luY0Z1bmN0aW9uXVwiLHU9XCJbb2JqZWN0IEZ1bmN0aW9uXVwiLGE9XCJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXVwiLGM9XCJbb2JqZWN0IFByb3h5XVwiO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighbyh0KSlyZXR1cm4hMTt2YXIgbj1yKHQpO3JldHVybiBuPT11fHxuPT1hfHxuPT1pfHxuPT1jfX0sbGpoTjpmdW5jdGlvbih0LG4pe3QuZXhwb3J0cz1mdW5jdGlvbih0LG4pe3JldHVybiB0PT09bnx8dCE9dCYmbiE9bn19LG1UVFI6ZnVuY3Rpb24odCxuKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIG49W107aWYobnVsbCE9dClmb3IodmFyIGUgaW4gT2JqZWN0KHQpKW4ucHVzaChlKTtyZXR1cm4gbn19LG1jMGc6ZnVuY3Rpb24odCxuKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKG4sZSxyKXtmb3IodmFyIG89LTEsaT1PYmplY3QobiksdT1yKG4pLGE9dS5sZW5ndGg7YS0tOyl7dmFyIGM9dVt0P2E6KytvXTtpZighMT09PWUoaVtjXSxjLGkpKWJyZWFrfXJldHVybiBufX19LG1xbEY6ZnVuY3Rpb24odCxuKXtuLmY9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sc30sXCJtdi9YXCI6ZnVuY3Rpb24odCxuKXt0LmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4hMX19LG84Tkg6ZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoXCJZN1pDXCIpO3Ioci5TK3IuRixcIk9iamVjdFwiLHthc3NpZ246ZShcImt3WjFcIil9KX0sb1ZtbDpmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZShcIjVLN1pcIiksbz1lKFwiZnBDNVwiKSxpPWUoXCJGcEhhXCIpLHU9ZShcIlZWbHhcIikoXCJJRV9QUk9UT1wiKSxhPWZ1bmN0aW9uKCl7fSxjPWZ1bmN0aW9uKCl7dmFyIHQsbj1lKFwiSHNuc1wiKShcImlmcmFtZVwiKSxyPWkubGVuZ3RoO2ZvcihuLnN0eWxlLmRpc3BsYXk9XCJub25lXCIsZShcIk12d0NcIikuYXBwZW5kQ2hpbGQobiksbi5zcmM9XCJqYXZhc2NyaXB0OlwiLCh0PW4uY29udGVudFdpbmRvdy5kb2N1bWVudCkub3BlbigpLHQud3JpdGUoXCI8c2NyaXB0PmRvY3VtZW50LkY9T2JqZWN0PFxcL3NjcmlwdD5cIiksdC5jbG9zZSgpLGM9dC5GO3ItLTspZGVsZXRlIGMucHJvdG90eXBlW2lbcl1dO3JldHVybiBjKCl9O3QuZXhwb3J0cz1PYmplY3QuY3JlYXRlfHxmdW5jdGlvbih0LG4pe3ZhciBlO3JldHVybiBudWxsIT09dD8oYS5wcm90b3R5cGU9cih0KSxlPW5ldyBhLGEucHJvdG90eXBlPW51bGwsZVt1XT10KTplPWMoKSx2b2lkIDA9PT1uP2U6byhlLG4pfX0scnIxaTpmdW5jdGlvbih0LG4pe3QuZXhwb3J0cz1mdW5jdGlvbih0LG4pe3JldHVybntlbnVtZXJhYmxlOiEoMSZ0KSxjb25maWd1cmFibGU6ISgyJnQpLHdyaXRhYmxlOiEoNCZ0KSx2YWx1ZTpufX19LHNnb3E6ZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoXCJhc0RBXCIpLG89ZShcIlRLckVcIiksaT1lKFwiNm5LOFwiKSx1PVJlZ0V4cChcIlsn4oCZXVwiLFwiZ1wiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiByKGkobyhuKS5yZXBsYWNlKHUsXCJcIikpLHQsXCJcIil9fX0sc2hqQjpmdW5jdGlvbih0LG4pe3ZhciBlPTkwMDcxOTkyNTQ3NDA5OTE7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiB0JiZ0Pi0xJiZ0JTE9PTAmJnQ8PWV9fSx0MkRuOmZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKFwiaHlwb1wiKSxvPWUoXCJsamhOXCIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LG4sZSl7KHZvaWQgMD09PWV8fG8odFtuXSxlKSkmJih2b2lkIDAhPT1lfHxuIGluIHQpfHxyKHQsbixlKX19LHRFZWo6ZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoXCJPamdkXCIpLG89TWF0aC5taW47dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0PjA/byhyKHQpLDkwMDcxOTkyNTQ3NDA5OTEpOjB9fSx0TUI3OmZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKFwieTFwSVwiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIG49dGhpcy5fX2RhdGFfXyxlPXIobix0KTtyZXR1cm4gZTwwP3ZvaWQgMDpuW2VdWzFdfX0sdGpVbzpmdW5jdGlvbih0LG4sZSl7XCJ1c2Ugc3RyaWN0XCI7ZS5yKG4pO3ZhciByPWUoXCJHUWVFXCIpLG89ZS5uKHIpLGk9ZShcIkF5VUJcIiksdT1lLm4oaSksYT1lKFwiNHFDMFwiKSxjPWUubihhKSxzPWUoXCJaMGNtXCIpLGY9ZS5uKHMpO2Z1bmN0aW9uIGwodCxuKXtyZXR1cm4gdC50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMobi50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkpfWZ1bmN0aW9uIHAodCxuLGUpe3ZhciByPW5bdF07cmV0dXJuIHZvaWQgMD09PXI/KGNvbnNvbGUuZXJyb3IoZnVuY3Rpb24odCl7cmV0dXJuXCJwcm9wIFwiK3QrXCIgbm90IGV4aXN0IGluIHRoZSByb3csIHBsZWFzZSBjb25maXJtIHdldGhlciB0aGUgcHJvcCBpcyByaWdodCwgdGhpcyBtYXkgY2F1c2UgdW5wcmVkaWN0YWJsZSBmaWx0ZXIgcmVzdWx0XCJ9KHQpKSwhMSk6bnVsbCE9PXImJihmKCkoZS52YWx1ZSk/ZS52YWx1ZS5zb21lKGZ1bmN0aW9uKHQpe3JldHVybiBsKHIsdCl9KTpsKHIsZS52YWx1ZSkpfXZhciBkPWUoXCJqbzZZXCIpLGg9ZS5uKGQpLHY9ZShcImt2cm5cIiksZz1lLm4odikseT1lKFwiUDJzWVwiKSx4PWUubih5KSxiPWUoXCJOMW9tXCIpLG09ZS5uKGIpLGo9ZShcIlFrVk5cIiksUz1lLm4oaiksUD17cHJvcHM6e2xheW91dDp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcInRvb2wsIHRhYmxlLCBwYWdpbmF0aW9uXCJ9LGRhdGE6e3R5cGU6QXJyYXksZGVmYXVsdDpmdW5jdGlvbigpe3JldHVybltdfX0sZmlsdGVyczp7dHlwZTpbT2JqZWN0LEFycmF5XSxkZWZhdWx0OmZ1bmN0aW9uKCl7cmV0dXJuW119fSx0YWJsZVByb3BzOnt0eXBlOk9iamVjdCxkZWZhdWx0OmZ1bmN0aW9uKCl7cmV0dXJue319fSxhY3Rpb25Db2w6e3R5cGU6T2JqZWN0LGRlZmF1bHQ6ZnVuY3Rpb24oKXtyZXR1cm57fX19LGN1cnJlbnRQYWdlOnt0eXBlOk51bWJlcixkZWZhdWx0OjF9LHBhZ2VTaXplOnt0eXBlOk51bWJlcixkZWZhdWx0OjIwfSxwYWdpbmF0aW9uUHJvcHM6e3R5cGU6T2JqZWN0LGRlZmF1bHQ6ZnVuY3Rpb24oKXtyZXR1cm57fX19fSxyZW5kZXI6ZnVuY3Rpb24odCl7dmFyIG49dGhpcyxlPXt0b29sOnRoaXMudG9vbEJhclNob3c/dChcImRpdlwiLHtjbGFzczpcInRvb2xcIn0sW3RoaXMuJHNsb3RzLnRvb2xdKTpudWxsLHRhYmxlOnQoXCJlbC10YWJsZVwiLGcoKShbe3JlZjpcImVsVGFibGVcIixvbjp7XCJzb3J0LWNoYW5nZVwiOnRoaXMuaGFuZGxlU29ydH0sYXR0cnM6e2RhdGE6dGhpcy5jdXJUYWJsZURhdGF9fSx7YXR0cnM6dGhpcy5pbm5lclRhYmxlUHJvcHMsZGlyZWN0aXZlczp0aGlzLl9zZXJ2ZXI/W3tuYW1lOlwibG9hZGluZ1wiLHZhbHVlOnRoaXMubG9hZGluZ31dOnZvaWQgMH0se3N0eWxlOlwid2lkdGg6IDEwMCVcIn1dKSxbdGhpcy4kc2xvdHMuZGVmYXVsdCx0KFwidGVtcGxhdGVcIix7c2xvdDpcImVtcHR5XCJ9LFt0aGlzLiRzbG90cy5lbXB0eV0pLHQoXCJ0ZW1wbGF0ZVwiLHtzbG90OlwiYXBwZW5kXCJ9LFt0aGlzLiRzbG90cy5hcHBlbmRdKSx0aGlzLmFjdGlvbkNvbFNob3c/dChcImVsLXRhYmxlLWNvbHVtblwiLGcoKShbe2F0dHJzOntwcm9wOnRoaXMuYWN0aW9uQ29sUHJvcH19LHthdHRyczp0aGlzLmlubmVyQWN0aW9uQ29sLnByb3BzLHNjb3BlZFNsb3RzOntkZWZhdWx0OmZ1bmN0aW9uKGUpe3JldHVybiB0KFwiZGl2XCIse2NsYXNzOlwiYWN0aW9uLWxpc3RcIn0sW24uaW5uZXJBY3Rpb25Db2wuYnV0dG9ucy5tYXAoZnVuY3Rpb24obil7dmFyIHI9eCgpKHt0eXBlOm4udHlwZXx8XCJ0ZXh0XCIsaWNvbjpuLmljb259LG4ucHJvcHMpO3JldHVybiB0KFwic3BhblwiLFt0KFwiZWwtYnV0dG9uXCIsZygpKFt7b246e2NsaWNrOmZ1bmN0aW9uKCl7bi5oYW5kbGVyKGUucm93LGUuJGluZGV4LGUuY29sdW1uLGUuc3RvcmUpfX19LHthdHRyczpyfV0pLFtuLmxhYmVsXSldKX0pXSl9fX1dKSk6bnVsbF0pLHBhZ2luYXRpb246dChcImRpdlwiLHtjbGFzczpcInBhZ2luYXRpb24tYmFyXCJ9LFt0aGlzLnBhZ2luYXRpb25TaG93P3QoXCJkaXZcIix7Y2xhc3M6XCJwYWdpbmF0aW9uLXdyYXBcIn0sW3QoXCJlbC1wYWdpbmF0aW9uXCIsZygpKFt7cmVmOlwiZWxQYWdpbmF0aW9uXCIsYXR0cnM6e1wiY3VycmVudC1wYWdlXCI6bi5pbm5lckN1cnJlbnRQYWdlLFwicGFnZS1zaXplXCI6dGhpcy5pbm5lclBhZ2VTaXplLHRvdGFsOnRoaXMuX3NlcnZlcj90aGlzLmlubmVyVG90YWw6dGhpcy50b3RhbH0sb246e1widXBkYXRlOmN1cnJlbnRQYWdlXCI6ZnVuY3Rpb24odCl7bi5pbm5lckN1cnJlbnRQYWdlPXR9fX0se2F0dHJzOnRoaXMuaW5uZXJQYWdpbmF0aW9uUHJvcHMsb246e1wic2l6ZS1jaGFuZ2VcIjp0aGlzLmhhbmRsZVNpemVDaGFuZ2UsXCJwcmV2LWNsaWNrXCI6dGhpcy4kbGlzdGVuZXJzW1wicHJldi1jbGlja1wiXSxcIm5leHQtY2xpY2tcIjp0aGlzLiRsaXN0ZW5lcnNbXCJuZXh0LWNsaWNrXCJdLFwiY3VycmVudC1jaGFuZ2VcIjp0aGlzLiRsaXN0ZW5lcnNbXCJjdXJyZW50LXBhZ2UtY2hhbmdlXCJdfX1dKSxbdGhpcy4kc2xvdHMucGFnaW5hdGlvbl0pXSk6bnVsbF0pfTtyZXR1cm4gdChcImRpdlwiLHtjbGFzczpcInNjLXRhYmxlXCJ9LFt0aGlzLmxheW91dHMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBlW3RdfSldKX0sbW91bnRlZDpmdW5jdGlvbigpe3ZhciB0PXRoaXMsbj10aGlzLiRyZWZzLmVsVGFibGUsZT1uLiRlbWl0O24uJGVtaXQ9ZnVuY3Rpb24oKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aCxvPUFycmF5KHIpLGk9MDtpPHI7aSsrKW9baV09YXJndW1lbnRzW2ldO3QuJGVtaXQuYXBwbHkodCxvKSxlLmFwcGx5KG4sbyl9fSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue2lubmVyQ3VycmVudFBhZ2U6MSxpbm5lclBhZ2VTaXplOjIwLHNvcnREYXRhOnRoaXMudGFibGVQcm9wcyYmdGhpcy50YWJsZVByb3BzLmRlZmF1bHRTb3J0fHx7fSxhY3Rpb25Db2xQcm9wOlwiZTZlNGM5ZGUtN2NmNS00ZjE5LWJiNzMtODM4ZTUxODJhMzcyXCIsaW5uZXJQYWdpbmF0aW9uUHJvcHM6e319fSxjb21wdXRlZDp7bGF5b3V0czpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxheW91dC5zcGxpdChcIixcIikubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRyaW0oKX0pfSxpbm5lclRhYmxlUHJvcHM6ZnVuY3Rpb24oKXt2YXIgdD14KCkoe2ZpdDohMH0sdGhpcy50YWJsZVByb3BzKTtyZXR1cm5bXCJlbGVtZW50TG9hZGluZ1RleHRcIixcImVsZW1lbnRMb2FkaW5nU3Bpbm5lclwiLFwiZWxlbWVudExvYWRpbmdCYWNrZ3JvdW5kXCJdLmZvckVhY2goZnVuY3Rpb24obil7dFtuXSYmKHRbbSgpKG4pXT10W25dLGRlbGV0ZSB0W25dKX0pLHR9LGlubmVyQWN0aW9uQ29sOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5hY3Rpb25Db2wsbj10LmxhYmVsLGU9aCgpKHQsW1wibGFiZWxcIl0pO3JldHVybiBTKCkoe3Nob3c6ITAsYnV0dG9uczpbXSxwcm9wczp7bGFiZWw6bnx8XCLmk43kvZxcIn19LGUpfSxwYWdpbmF0aW9uU2hvdzpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxheW91dHMuaW5jbHVkZXMoXCJwYWdpbmF0aW9uXCIpfSxhY3Rpb25Db2xTaG93OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5uZXJBY3Rpb25Db2wuYnV0dG9ucy5sZW5ndGg+MH0sdG9vbEJhclNob3c6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sYXlvdXRzLmluY2x1ZGVzKFwidG9vbFwiKSYmdGhpcy4kc2xvdHMudG9vbH19LHdhdGNoOntwYWdlU2l6ZTp7aW1tZWRpYXRlOiEwLGhhbmRsZXI6ZnVuY3Rpb24odCl7dGhpcy5pbm5lclBhZ2VTaXplPXR9fSxpbm5lclBhZ2VTaXplOmZ1bmN0aW9uKHQpe3RoaXMuJGVtaXQoXCJ1cGRhdGU6cGFnZVNpemVcIix0KX0sY3VycmVudFBhZ2U6e2ltbWVkaWF0ZTohMCxoYW5kbGVyOmZ1bmN0aW9uKHQpe3RoaXMuaW5uZXJDdXJyZW50UGFnZT10fX0saW5uZXJDdXJyZW50UGFnZTpmdW5jdGlvbih0KXt0aGlzLiRlbWl0KFwidXBkYXRlOmN1cnJlbnRQYWdlXCIsdCl9LHBhZ2luYXRpb25Qcm9wczp7aW1tZWRpYXRlOiEwLGhhbmRsZXI6ZnVuY3Rpb24odCl7dGhpcy5wYWdpbmF0aW9uU2hvdyYmKHRoaXMuaW5uZXJQYWdpbmF0aW9uUHJvcHM9eCgpKHtwYWdlU2l6ZXM6WzIwLDUwLDEwMF0sbGF5b3V0OlwicHJldiwgcGFnZXIsIG5leHQsIGp1bXBlciwgc2l6ZXMsIHRvdGFsXCJ9LHQpLC0xPT09dGhpcy5pbm5lclBhZ2luYXRpb25Qcm9wcy5wYWdlU2l6ZXMuaW5kZXhPZih0aGlzLmlubmVyUGFnZVNpemUpJiYoY29uc29sZS53YXJuKFwicGFnZVNpemUgXCIrdGhpcy5pbm5lclBhZ2VTaXplK1wiIGlzIG5vdCBpbmNsdWRlZCBpbiBwYWdlU2l6ZXNbXCIrdGhpcy5pbm5lclBhZ2luYXRpb25Qcm9wcy5wYWdlU2l6ZXMrXCJdLCBzZXQgcGFnZVNpemUgdG8gcGFnZVNpemVzWzBdOiBcIit0aGlzLmlubmVyUGFnaW5hdGlvblByb3BzLnBhZ2VTaXplc1swXSksdGhpcy5pbm5lclBhZ2VTaXplPXRoaXMuaW5uZXJQYWdpbmF0aW9uUHJvcHMucGFnZVNpemVzWzBdKSl9fX19LE89e25hbWU6XCJEYXRhVGFibGVzXCIsbWl4aW5zOltQXSxwcm9wczp7c29ydE1ldGhvZDp7dHlwZTpPYmplY3QsZGVmYXVsdDpmdW5jdGlvbigpe3JldHVybnt9fX0sZmlsdGVyUHJvcHM6QXJyYXl9LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57aW5uZXJmaWx0ZXJQcm9wczpbXX19LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLnNldElubmVyRmlsdGVyUHJvcHModGhpcy5maWx0ZXJQcm9wcyksdGhpcy5fZmlsdGVyRm5DYWNoZT11KCkobnVsbCksdGhpcy5fc29ydEZuQ2FjaGU9dSgpKG51bGwpfSxjb21wdXRlZDp7c29ydGVkRGF0YTpmdW5jdGlvbigpe2lmKHRoaXMuc29ydERhdGEub3JkZXIpe3ZhciB0PXRoaXMuZGF0YS5zbGljZSgpLG49dGhpcy5zb3J0RGF0YSxlPW4ub3JkZXIscj1uLnByb3Asbz1cImRlc2NlbmRpbmdcIj09PWUsaT10aGlzLmNyZWF0ZVNvcnRGbihyLG8pO3JldHVybiB0LnNvcnQoaSksdH1yZXR1cm4gdGhpcy5kYXRhfSx0YWJsZURhdGE6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLG49dGhpcy5zb3J0ZWREYXRhLnNsaWNlKCk7cmV0dXJuIHRoaXMuZmlsdGVycy5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciByPWUudmFsdWU7aWYoZigpKHIpJiYwPT09ci5sZW5ndGh8fHZvaWQgMD09PXJ8fFwiXCI9PT1yKXJldHVybiEwO3ZhciBvPWUuZmlsdGVyRm58fHQuY3JlYXRlRmlsdGVyRm4oZS5wcm9wKTtuPW4uZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiBvKHQsZSl9KX0pLHRoaXMuJGVtaXQoXCJmaWx0ZXJlZC1kYXRhXCIsbiksbn0sY3VyVGFibGVEYXRhOmZ1bmN0aW9uKCl7aWYodGhpcy5wYWdpbmF0aW9uU2hvdyl7dmFyIHQ9dGhpcy5pbm5lclBhZ2VTaXplKih0aGlzLmlubmVyQ3VycmVudFBhZ2UtMSksbj10K3RoaXMuaW5uZXJQYWdlU2l6ZTtyZXR1cm4gdGhpcy50YWJsZURhdGEuc2xpY2UodCxuKX1yZXR1cm4gdGhpcy50YWJsZURhdGF9LHRvdGFsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGFibGVEYXRhLmxlbmd0aH19LG1ldGhvZHM6e2hhbmRsZVNvcnQ6ZnVuY3Rpb24odCl7dGhpcy5zb3J0RGF0YT10fSxoYW5kbGVTaXplQ2hhbmdlOmZ1bmN0aW9uKHQpe3RoaXMuaW5uZXJQYWdlU2l6ZT10LHRoaXMuJGVtaXQoXCJzaXplLWNoYW5nZVwiLHQpfSxjcmVhdGVGaWx0ZXJGbjpmdW5jdGlvbih0KXt2YXIgbj12b2lkIDAsZT10fHx0aGlzLmlubmVyZmlsdGVyUHJvcHM7aWYoZigpKGUpKW49ZS5qb2luKFwiXCIpO2Vsc2V7aWYoIWMoKSh0KSlyZXR1cm4gY29uc29sZS5lcnJvcihcInByb3AgbXVzdCBiZSBzdHJpbmcgb3IgYXJyYXlcIiksZnVuY3Rpb24oKXtyZXR1cm4hMX07bj1lfXZhciByPXRoaXMuX2ZpbHRlckZuQ2FjaGVbbl07cmV0dXJuIHJ8fCh0aGlzLl9maWx0ZXJGbkNhY2hlW25dPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGYoKShlKT9lLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuIHAoZSx0LG4pfSk6cChlLHQsbil9LHRoaXMuX2ZpbHRlckZuQ2FjaGVbbl0pfSxjcmVhdGVTb3J0Rm46ZnVuY3Rpb24odCxuKXt2YXIgZT10aGlzLHI9dCtuLG89dGhpcy5fc29ydEZuQ2FjaGVbcl07cmV0dXJuIG98fCh0aGlzLl9zb3J0Rm5DYWNoZVtyXT1mdW5jdGlvbihyLG8pe3JldHVybihlLnNvcnRNZXRob2RbdF18fGZ1bmN0aW9uKHQsbixlKXtyZXR1cm4gdD5uPzE6dDxuPy0xOjB9KShyW3RdLG9bdF0pKihuPy0xOjEpfSx0aGlzLl9zb3J0Rm5DYWNoZVtyXSl9LHNldElubmVyRmlsdGVyUHJvcHM6ZnVuY3Rpb24odCl7dGhpcy5pbm5lcmZpbHRlclByb3BzPXR8fG8oKSh0aGlzLmRhdGEmJnRoaXMuZGF0YVswXXx8e30pfX0sd2F0Y2g6e2ZpbHRlclByb3BzOmZ1bmN0aW9uKHQpe3RoaXMuc2V0SW5uZXJGaWx0ZXJQcm9wcyh0KX0sc29ydE1ldGhvZDpmdW5jdGlvbigpe3RoaXMuX3NvcnRGbkNhY2hlPVtdfX19O2UoXCJqY3VMXCIpO2Z1bmN0aW9uIF8odCxuLGUscixvLGksdSxhKXt2YXIgYyxzPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dC5vcHRpb25zOnQ7aWYobiYmKHMucmVuZGVyPW4scy5zdGF0aWNSZW5kZXJGbnM9ZSxzLl9jb21waWxlZD0hMCksciYmKHMuZnVuY3Rpb25hbD0hMCksaSYmKHMuX3Njb3BlSWQ9XCJkYXRhLXYtXCIraSksdT8oYz1mdW5jdGlvbih0KXsodD10fHx0aGlzLiR2bm9kZSYmdGhpcy4kdm5vZGUuc3NyQ29udGV4dHx8dGhpcy5wYXJlbnQmJnRoaXMucGFyZW50LiR2bm9kZSYmdGhpcy5wYXJlbnQuJHZub2RlLnNzckNvbnRleHQpfHxcInVuZGVmaW5lZFwiPT10eXBlb2YgX19WVUVfU1NSX0NPTlRFWFRfX3x8KHQ9X19WVUVfU1NSX0NPTlRFWFRfXyksbyYmby5jYWxsKHRoaXMsdCksdCYmdC5fcmVnaXN0ZXJlZENvbXBvbmVudHMmJnQuX3JlZ2lzdGVyZWRDb21wb25lbnRzLmFkZCh1KX0scy5fc3NyUmVnaXN0ZXI9Yyk6byYmKGM9YT9mdW5jdGlvbigpe28uY2FsbCh0aGlzLHRoaXMuJHJvb3QuJG9wdGlvbnMuc2hhZG93Um9vdCl9Om8pLGMpaWYocy5mdW5jdGlvbmFsKXtzLl9pbmplY3RTdHlsZXM9Yzt2YXIgZj1zLnJlbmRlcjtzLnJlbmRlcj1mdW5jdGlvbih0LG4pe3JldHVybiBjLmNhbGwobiksZih0LG4pfX1lbHNle3ZhciBsPXMuYmVmb3JlQ3JlYXRlO3MuYmVmb3JlQ3JlYXRlPWw/W10uY29uY2F0KGwsYyk6W2NdfXJldHVybntleHBvcnRzOnQsb3B0aW9uczpzfX12YXIgdz1fKE8sdm9pZCAwLHZvaWQgMCwhMSxudWxsLG51bGwsbnVsbCkuZXhwb3J0cyxDPWUoXCJRYkxaXCIpLFQ9ZS5uKEMpLEU9e25hbWU6XCJEYXRhVGFibGVzU2VydmVyXCIsbWl4aW5zOltQXSxwcm9wczp7bG9hZGluZ1N0cjp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcIlwifSx0b3RhbDp7dHlwZTpOdW1iZXJ9LGxvYWRpbmc6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfX0sZGF0YTpmdW5jdGlvbigpe3JldHVybntpbm5lclRvdGFsOjB9fSxjcmVhdGVkOmZ1bmN0aW9uKCl7dGhpcy5fc2VydmVyPSEwLHRoaXMucXVlcnlDaGFuZ2UoXCJpbml0XCIpO3ZhciB0PXRoaXMudG90YWwvdGhpcy5wYWdlU2l6ZSxuPU1hdGguY2VpbCh0KTt0aGlzLmlubmVyVG90YWw9bj49dGhpcy5jdXJyZW50UGFnZT90aGlzLnRvdGFsOnRoaXMucGFnZVNpemUqdGhpcy5jdXJyZW50UGFnZX0sY29tcHV0ZWQ6e2N1clRhYmxlRGF0YTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGF9LHF1ZXJ5SW5mbzpmdW5jdGlvbigpe3JldHVybntwYWdlOnRoaXMuaW5uZXJDdXJyZW50UGFnZSxwYWdlU2l6ZTp0aGlzLmlubmVyUGFnZVNpemUsc29ydDp0aGlzLnNvcnREYXRhLGZpbHRlcnM6dGhpcy5maWx0ZXJzfX19LG1ldGhvZHM6e3F1ZXJ5Q2hhbmdlOmZ1bmN0aW9uKHQpe3ZhciBuPVQoKSh7dHlwZTp0fSx0aGlzLnF1ZXJ5SW5mbyk7dGhpcy4kZW1pdChcInF1ZXJ5LWNoYW5nZVwiLG4pfSxoYW5kbGVTb3J0OmZ1bmN0aW9uKHQpe3ZhciBuPXQucHJvcCxlPXQub3JkZXI7dGhpcy5zb3J0RGF0YS5wcm9wPT09biYmdGhpcy5zb3J0RGF0YS5vcmRlcj09PWV8fCh0aGlzLnNvcnREYXRhPXtwcm9wOm4sb3JkZXI6ZX0sdGhpcy5xdWVyeUNoYW5nZShcInNvcnRcIikpfSxoYW5kbGVTaXplQ2hhbmdlOmZ1bmN0aW9uKHQpe3RoaXMuaW5uZXJQYWdlU2l6ZT10LHRoaXMucXVlcnlDaGFuZ2UoXCJzaXplXCIpLHRoaXMuJGVtaXQoXCJzaXplLWNoYW5nZVwiLHQpfX0sd2F0Y2g6e3RvdGFsOmZ1bmN0aW9uKHQpe3RoaXMuaW5uZXJUb3RhbD10fSxmaWx0ZXJzOntoYW5kbGVyOmZ1bmN0aW9uKCl7dGhpcy5xdWVyeUNoYW5nZShcImZpbHRlclwiKX0sZGVlcDohMH0sXCJ0YWJsZVByb3BzLmRlZmF1bHRTb3J0XCI6e2ltbWVkaWF0ZTohMCxoYW5kbGVyOmZ1bmN0aW9uKHQpe3RoaXMuc29ydERhdGE9dHx8e319fSxpbm5lckN1cnJlbnRQYWdlOmZ1bmN0aW9uKHQpe3RoaXMucXVlcnlDaGFuZ2UoXCJwYWdlXCIpfX19LE09KGUoXCJERVNwXCIpLF8oRSx2b2lkIDAsdm9pZCAwLCExLG51bGwsbnVsbCxudWxsKS5leHBvcnRzKTtlLmQobixcImluc3RhbGxcIixmdW5jdGlvbigpe3JldHVybiB6fSksZS5kKG4sXCJEYXRhVGFibGVzXCIsZnVuY3Rpb24oKXtyZXR1cm4gd30pLGUuZChuLFwiRGF0YVRhYmxlc1NlcnZlclwiLGZ1bmN0aW9uKCl7cmV0dXJuIE19KSx3Lmluc3RhbGw9ZnVuY3Rpb24odCl7dC5jb21wb25lbnQody5uYW1lLHcpfSxNLmluc3RhbGw9ZnVuY3Rpb24odCl7dC5jb21wb25lbnQoTS5uYW1lLE0pfTt2YXIgej1mdW5jdGlvbih0KXt3Lmluc3RhbGwodCksTS5pbnN0YWxsKHQpfTtuLmRlZmF1bHQ9e2luc3RhbGw6en19LHVPUFM6ZnVuY3Rpb24odCxuKXt0LmV4cG9ydHM9ITB9LHc2R086ZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoXCI1dk1WXCIpLG89ZShcIkZwSGFcIik7dC5leHBvcnRzPU9iamVjdC5rZXlzfHxmdW5jdGlvbih0KXtyZXR1cm4gcih0LG8pfX0sd2NsRzpmdW5jdGlvbih0LG4pe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdH19LHkxcEk6ZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoXCJsamhOXCIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LG4pe2Zvcih2YXIgZT10Lmxlbmd0aDtlLS07KWlmKHIodFtlXVswXSxuKSlyZXR1cm4gZTtyZXR1cm4tMX19LHlMcGo6ZnVuY3Rpb24odCxuKXt2YXIgZTtlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KCk7dHJ5e2U9ZXx8bmV3IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKX1jYXRjaCh0KXtcIm9iamVjdFwiPT10eXBlb2Ygd2luZG93JiYoZT13aW5kb3cpfXQuZXhwb3J0cz1lfSx5UDVmOmZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKFwiK0srYlwiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuKXt2YXIgZT1uP3IodC5idWZmZXIpOnQuYnVmZmVyO3JldHVybiBuZXcgdC5jb25zdHJ1Y3RvcihlLHQuYnl0ZU9mZnNldCx0Lmxlbmd0aCl9fSx6WjBIOmZ1bmN0aW9uKHQsbil7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0fX0sem43TjpmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZShcIlk3WkNcIiksbz1lKFwiV0Vwa1wiKSxpPWUoXCJLVXhQXCIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LG4pe3ZhciBlPShvLk9iamVjdHx8e30pW3RdfHxPYmplY3RbdF0sdT17fTt1W3RdPW4oZSkscihyLlMrci5GKmkoZnVuY3Rpb24oKXtlKDEpfSksXCJPYmplY3RcIix1KX19fSl9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGEtdGFibGVzLm1pbi5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/vue-data-tables/dist/data-tables.min.js\n");

/***/ }),

/***/ "./resources/js/components/DashboardComponent.vue":
/*!********************************************************!*\
  !*** ./resources/js/components/DashboardComponent.vue ***!
  \********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _DashboardComponent_vue_vue_type_template_id_01ab55f4___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./DashboardComponent.vue?vue&type=template&id=01ab55f4& */ \"./resources/js/components/DashboardComponent.vue?vue&type=template&id=01ab55f4&\");\n/* harmony import */ var _DashboardComponent_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./DashboardComponent.vue?vue&type=script&lang=js& */ \"./resources/js/components/DashboardComponent.vue?vue&type=script&lang=js&\");\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n;\nvar component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _DashboardComponent_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _DashboardComponent_vue_vue_type_template_id_01ab55f4___WEBPACK_IMPORTED_MODULE_0__.render,\n  _DashboardComponent_vue_vue_type_template_id_01ab55f4___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"resources/js/components/DashboardComponent.vue\"\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9EYXNoYm9hcmRDb21wb25lbnQudnVlIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBaUc7QUFDM0I7QUFDTDs7O0FBR2pFO0FBQ0EsQ0FBNkY7QUFDN0YsZ0JBQWdCLHVHQUFVO0FBQzFCLEVBQUUsd0ZBQU07QUFDUixFQUFFLDBGQUFNO0FBQ1IsRUFBRSxtR0FBZTtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLEtBQVUsRUFBRSxZQWlCZjtBQUNEO0FBQ0EsaUVBQWUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9EYXNoYm9hcmRDb21wb25lbnQudnVlP2Q5YmYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9EYXNoYm9hcmRDb21wb25lbnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTAxYWI1NWY0JlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL0Rhc2hib2FyZENvbXBvbmVudC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL0Rhc2hib2FyZENvbXBvbmVudC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9Vc2Vycy9hZG1pbi9Qcm9qZWN0cy9JRFBBQy9Fc2N1ZWxhL2VzY3VlbGFfbGFyYXZlbC9kb2Nyb290L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzAxYWI1NWY0JykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzAxYWI1NWY0JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzAxYWI1NWY0JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9EYXNoYm9hcmRDb21wb25lbnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTAxYWI1NWY0JlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzAxYWI1NWY0Jywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJyZXNvdXJjZXMvanMvY29tcG9uZW50cy9EYXNoYm9hcmRDb21wb25lbnQudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./resources/js/components/DashboardComponent.vue\n");

/***/ }),

/***/ "./resources/js/components/admin/alliance/create.vue":
/*!***********************************************************!*\
  !*** ./resources/js/components/admin/alliance/create.vue ***!
  \***********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _create_vue_vue_type_template_id_632f584e___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./create.vue?vue&type=template&id=632f584e& */ \"./resources/js/components/admin/alliance/create.vue?vue&type=template&id=632f584e&\");\n/* harmony import */ var _create_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./create.vue?vue&type=script&lang=js& */ \"./resources/js/components/admin/alliance/create.vue?vue&type=script&lang=js&\");\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n;\nvar component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _create_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _create_vue_vue_type_template_id_632f584e___WEBPACK_IMPORTED_MODULE_0__.render,\n  _create_vue_vue_type_template_id_632f584e___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"resources/js/components/admin/alliance/create.vue\"\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9hbGxpYW5jZS9jcmVhdGUudnVlIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBcUY7QUFDM0I7QUFDTDs7O0FBR3JEO0FBQ0EsQ0FBbUc7QUFDbkcsZ0JBQWdCLHVHQUFVO0FBQzFCLEVBQUUsNEVBQU07QUFDUixFQUFFLDhFQUFNO0FBQ1IsRUFBRSx1RkFBZTtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLEtBQVUsRUFBRSxZQWlCZjtBQUNEO0FBQ0EsaUVBQWUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9hbGxpYW5jZS9jcmVhdGUudnVlPzllMjUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9jcmVhdGUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTYzMmY1ODRlJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL2NyZWF0ZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL2NyZWF0ZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9Vc2Vycy9hZG1pbi9Qcm9qZWN0cy9JRFBBQy9Fc2N1ZWxhL2VzY3VlbGFfbGFyYXZlbC9kb2Nyb290L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzYzMmY1ODRlJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzYzMmY1ODRlJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzYzMmY1ODRlJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9jcmVhdGUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTYzMmY1ODRlJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzYzMmY1ODRlJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJyZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9hbGxpYW5jZS9jcmVhdGUudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./resources/js/components/admin/alliance/create.vue\n");

/***/ }),

/***/ "./resources/js/components/admin/alliance/edit.vue":
/*!*********************************************************!*\
  !*** ./resources/js/components/admin/alliance/edit.vue ***!
  \*********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _edit_vue_vue_type_template_id_c7f491b2___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./edit.vue?vue&type=template&id=c7f491b2& */ \"./resources/js/components/admin/alliance/edit.vue?vue&type=template&id=c7f491b2&\");\n/* harmony import */ var _edit_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./edit.vue?vue&type=script&lang=js& */ \"./resources/js/components/admin/alliance/edit.vue?vue&type=script&lang=js&\");\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n;\nvar component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _edit_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _edit_vue_vue_type_template_id_c7f491b2___WEBPACK_IMPORTED_MODULE_0__.render,\n  _edit_vue_vue_type_template_id_c7f491b2___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"resources/js/components/admin/alliance/edit.vue\"\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9hbGxpYW5jZS9lZGl0LnZ1ZSIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQW1GO0FBQzNCO0FBQ0w7OztBQUduRDtBQUNBLENBQW1HO0FBQ25HLGdCQUFnQix1R0FBVTtBQUMxQixFQUFFLDBFQUFNO0FBQ1IsRUFBRSw0RUFBTTtBQUNSLEVBQUUscUZBQWU7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSSxLQUFVLEVBQUUsWUFpQmY7QUFDRDtBQUNBLGlFQUFlIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vYWxsaWFuY2UvZWRpdC52dWU/NGJiOCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL2VkaXQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWM3ZjQ5MWIyJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL2VkaXQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9lZGl0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL1VzZXJzL2FkbWluL1Byb2plY3RzL0lEUEFDL0VzY3VlbGEvZXNjdWVsYV9sYXJhdmVsL2RvY3Jvb3Qvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnYzdmNDkxYjInKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnYzdmNDkxYjInLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnYzdmNDkxYjInLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL2VkaXQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWM3ZjQ5MWIyJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJ2M3ZjQ5MWIyJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJyZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9hbGxpYW5jZS9lZGl0LnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./resources/js/components/admin/alliance/edit.vue\n");

/***/ }),

/***/ "./resources/js/components/admin/alliance/index.vue":
/*!**********************************************************!*\
  !*** ./resources/js/components/admin/alliance/index.vue ***!
  \**********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _index_vue_vue_type_template_id_2668e785___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index.vue?vue&type=template&id=2668e785& */ \"./resources/js/components/admin/alliance/index.vue?vue&type=template&id=2668e785&\");\n/* harmony import */ var _index_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./index.vue?vue&type=script&lang=js& */ \"./resources/js/components/admin/alliance/index.vue?vue&type=script&lang=js&\");\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n;\nvar component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _index_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _index_vue_vue_type_template_id_2668e785___WEBPACK_IMPORTED_MODULE_0__.render,\n  _index_vue_vue_type_template_id_2668e785___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"resources/js/components/admin/alliance/index.vue\"\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9hbGxpYW5jZS9pbmRleC52dWUiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFvRjtBQUMzQjtBQUNMOzs7QUFHcEQ7QUFDQSxDQUFtRztBQUNuRyxnQkFBZ0IsdUdBQVU7QUFDMUIsRUFBRSwyRUFBTTtBQUNSLEVBQUUsNkVBQU07QUFDUixFQUFFLHNGQUFlO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksS0FBVSxFQUFFLFlBaUJmO0FBQ0Q7QUFDQSxpRUFBZSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9jb21wb25lbnRzL2FkbWluL2FsbGlhbmNlL2luZGV4LnZ1ZT84ZjYyIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vaW5kZXgudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTI2NjhlNzg1JlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL2luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vaW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvVXNlcnMvYWRtaW4vUHJvamVjdHMvSURQQUMvRXNjdWVsYS9lc2N1ZWxhX2xhcmF2ZWwvZG9jcm9vdC9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCcyNjY4ZTc4NScpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCcyNjY4ZTc4NScsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCcyNjY4ZTc4NScsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vaW5kZXgudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTI2NjhlNzg1JlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzI2NjhlNzg1Jywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJyZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9hbGxpYW5jZS9pbmRleC52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./resources/js/components/admin/alliance/index.vue\n");

/***/ }),

/***/ "./resources/js/components/admin/banner/create.vue":
/*!*********************************************************!*\
  !*** ./resources/js/components/admin/banner/create.vue ***!
  \*********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _create_vue_vue_type_template_id_4b6a9904___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./create.vue?vue&type=template&id=4b6a9904& */ \"./resources/js/components/admin/banner/create.vue?vue&type=template&id=4b6a9904&\");\n/* harmony import */ var _create_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./create.vue?vue&type=script&lang=js& */ \"./resources/js/components/admin/banner/create.vue?vue&type=script&lang=js&\");\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n;\nvar component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _create_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _create_vue_vue_type_template_id_4b6a9904___WEBPACK_IMPORTED_MODULE_0__.render,\n  _create_vue_vue_type_template_id_4b6a9904___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"resources/js/components/admin/banner/create.vue\"\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9iYW5uZXIvY3JlYXRlLnZ1ZSIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQXFGO0FBQzNCO0FBQ0w7OztBQUdyRDtBQUNBLENBQW1HO0FBQ25HLGdCQUFnQix1R0FBVTtBQUMxQixFQUFFLDRFQUFNO0FBQ1IsRUFBRSw4RUFBTTtBQUNSLEVBQUUsdUZBQWU7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSSxLQUFVLEVBQUUsWUFpQmY7QUFDRDtBQUNBLGlFQUFlIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vYmFubmVyL2NyZWF0ZS52dWU/NDY5MiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL2NyZWF0ZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NGI2YTk5MDQmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vY3JlYXRlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vY3JlYXRlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL1VzZXJzL2FkbWluL1Byb2plY3RzL0lEUEFDL0VzY3VlbGEvZXNjdWVsYV9sYXJhdmVsL2RvY3Jvb3Qvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnNGI2YTk5MDQnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnNGI2YTk5MDQnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnNGI2YTk5MDQnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL2NyZWF0ZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NGI2YTk5MDQmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignNGI2YTk5MDQnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInJlc291cmNlcy9qcy9jb21wb25lbnRzL2FkbWluL2Jhbm5lci9jcmVhdGUudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./resources/js/components/admin/banner/create.vue\n");

/***/ }),

/***/ "./resources/js/components/admin/banner/edit.vue":
/*!*******************************************************!*\
  !*** ./resources/js/components/admin/banner/edit.vue ***!
  \*******************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _edit_vue_vue_type_template_id_3ec569dc___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./edit.vue?vue&type=template&id=3ec569dc& */ \"./resources/js/components/admin/banner/edit.vue?vue&type=template&id=3ec569dc&\");\n/* harmony import */ var _edit_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./edit.vue?vue&type=script&lang=js& */ \"./resources/js/components/admin/banner/edit.vue?vue&type=script&lang=js&\");\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n;\nvar component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _edit_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _edit_vue_vue_type_template_id_3ec569dc___WEBPACK_IMPORTED_MODULE_0__.render,\n  _edit_vue_vue_type_template_id_3ec569dc___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"resources/js/components/admin/banner/edit.vue\"\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9iYW5uZXIvZWRpdC52dWUiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFtRjtBQUMzQjtBQUNMOzs7QUFHbkQ7QUFDQSxDQUFtRztBQUNuRyxnQkFBZ0IsdUdBQVU7QUFDMUIsRUFBRSwwRUFBTTtBQUNSLEVBQUUsNEVBQU07QUFDUixFQUFFLHFGQUFlO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksS0FBVSxFQUFFLFlBaUJmO0FBQ0Q7QUFDQSxpRUFBZSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9jb21wb25lbnRzL2FkbWluL2Jhbm5lci9lZGl0LnZ1ZT9iYjAzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vZWRpdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9M2VjNTY5ZGMmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vZWRpdC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL2VkaXQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvVXNlcnMvYWRtaW4vUHJvamVjdHMvSURQQUMvRXNjdWVsYS9lc2N1ZWxhX2xhcmF2ZWwvZG9jcm9vdC9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCczZWM1NjlkYycpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCczZWM1NjlkYycsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCczZWM1NjlkYycsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vZWRpdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9M2VjNTY5ZGMmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignM2VjNTY5ZGMnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInJlc291cmNlcy9qcy9jb21wb25lbnRzL2FkbWluL2Jhbm5lci9lZGl0LnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./resources/js/components/admin/banner/edit.vue\n");

/***/ }),

/***/ "./resources/js/components/admin/banner/index.vue":
/*!********************************************************!*\
  !*** ./resources/js/components/admin/banner/index.vue ***!
  \********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _index_vue_vue_type_template_id_74c3d0fa___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index.vue?vue&type=template&id=74c3d0fa& */ \"./resources/js/components/admin/banner/index.vue?vue&type=template&id=74c3d0fa&\");\n/* harmony import */ var _index_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./index.vue?vue&type=script&lang=js& */ \"./resources/js/components/admin/banner/index.vue?vue&type=script&lang=js&\");\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n;\nvar component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _index_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _index_vue_vue_type_template_id_74c3d0fa___WEBPACK_IMPORTED_MODULE_0__.render,\n  _index_vue_vue_type_template_id_74c3d0fa___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"resources/js/components/admin/banner/index.vue\"\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9iYW5uZXIvaW5kZXgudnVlIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBb0Y7QUFDM0I7QUFDTDs7O0FBR3BEO0FBQ0EsQ0FBbUc7QUFDbkcsZ0JBQWdCLHVHQUFVO0FBQzFCLEVBQUUsMkVBQU07QUFDUixFQUFFLDZFQUFNO0FBQ1IsRUFBRSxzRkFBZTtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLEtBQVUsRUFBRSxZQWlCZjtBQUNEO0FBQ0EsaUVBQWUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9iYW5uZXIvaW5kZXgudnVlP2YzYWEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9pbmRleC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NzRjM2QwZmEmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vaW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9pbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9Vc2Vycy9hZG1pbi9Qcm9qZWN0cy9JRFBBQy9Fc2N1ZWxhL2VzY3VlbGFfbGFyYXZlbC9kb2Nyb290L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzc0YzNkMGZhJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzc0YzNkMGZhJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzc0YzNkMGZhJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9pbmRleC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NzRjM2QwZmEmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignNzRjM2QwZmEnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInJlc291cmNlcy9qcy9jb21wb25lbnRzL2FkbWluL2Jhbm5lci9pbmRleC52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./resources/js/components/admin/banner/index.vue\n");

/***/ }),

/***/ "./resources/js/components/admin/conference/create.vue":
/*!*************************************************************!*\
  !*** ./resources/js/components/admin/conference/create.vue ***!
  \*************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _create_vue_vue_type_template_id_67829e94___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./create.vue?vue&type=template&id=67829e94& */ \"./resources/js/components/admin/conference/create.vue?vue&type=template&id=67829e94&\");\n/* harmony import */ var _create_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./create.vue?vue&type=script&lang=js& */ \"./resources/js/components/admin/conference/create.vue?vue&type=script&lang=js&\");\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n;\nvar component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _create_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _create_vue_vue_type_template_id_67829e94___WEBPACK_IMPORTED_MODULE_0__.render,\n  _create_vue_vue_type_template_id_67829e94___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"resources/js/components/admin/conference/create.vue\"\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9jb25mZXJlbmNlL2NyZWF0ZS52dWUiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFxRjtBQUMzQjtBQUNMOzs7QUFHckQ7QUFDQSxDQUFtRztBQUNuRyxnQkFBZ0IsdUdBQVU7QUFDMUIsRUFBRSw0RUFBTTtBQUNSLEVBQUUsOEVBQU07QUFDUixFQUFFLHVGQUFlO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksS0FBVSxFQUFFLFlBaUJmO0FBQ0Q7QUFDQSxpRUFBZSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9jb21wb25lbnRzL2FkbWluL2NvbmZlcmVuY2UvY3JlYXRlLnZ1ZT9hODNhIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vY3JlYXRlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02NzgyOWU5NCZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9jcmVhdGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9jcmVhdGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvVXNlcnMvYWRtaW4vUHJvamVjdHMvSURQQUMvRXNjdWVsYS9lc2N1ZWxhX2xhcmF2ZWwvZG9jcm9vdC9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCc2NzgyOWU5NCcpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCc2NzgyOWU5NCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCc2NzgyOWU5NCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vY3JlYXRlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02NzgyOWU5NCZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCc2NzgyOWU5NCcsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vY29uZmVyZW5jZS9jcmVhdGUudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./resources/js/components/admin/conference/create.vue\n");

/***/ }),

/***/ "./resources/js/components/admin/conference/edit.vue":
/*!***********************************************************!*\
  !*** ./resources/js/components/admin/conference/edit.vue ***!
  \***********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _edit_vue_vue_type_template_id_a9cd16bc___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./edit.vue?vue&type=template&id=a9cd16bc& */ \"./resources/js/components/admin/conference/edit.vue?vue&type=template&id=a9cd16bc&\");\n/* harmony import */ var _edit_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./edit.vue?vue&type=script&lang=js& */ \"./resources/js/components/admin/conference/edit.vue?vue&type=script&lang=js&\");\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n;\nvar component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _edit_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _edit_vue_vue_type_template_id_a9cd16bc___WEBPACK_IMPORTED_MODULE_0__.render,\n  _edit_vue_vue_type_template_id_a9cd16bc___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"resources/js/components/admin/conference/edit.vue\"\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9jb25mZXJlbmNlL2VkaXQudnVlIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBbUY7QUFDM0I7QUFDTDs7O0FBR25EO0FBQ0EsQ0FBbUc7QUFDbkcsZ0JBQWdCLHVHQUFVO0FBQzFCLEVBQUUsMEVBQU07QUFDUixFQUFFLDRFQUFNO0FBQ1IsRUFBRSxxRkFBZTtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLEtBQVUsRUFBRSxZQWlCZjtBQUNEO0FBQ0EsaUVBQWUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9jb25mZXJlbmNlL2VkaXQudnVlPzJkY2QiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9lZGl0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1hOWNkMTZiYyZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9lZGl0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vZWRpdC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9Vc2Vycy9hZG1pbi9Qcm9qZWN0cy9JRFBBQy9Fc2N1ZWxhL2VzY3VlbGFfbGFyYXZlbC9kb2Nyb290L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJ2E5Y2QxNmJjJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJ2E5Y2QxNmJjJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJ2E5Y2QxNmJjJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9lZGl0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1hOWNkMTZiYyZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCdhOWNkMTZiYycsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vY29uZmVyZW5jZS9lZGl0LnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./resources/js/components/admin/conference/edit.vue\n");

/***/ }),

/***/ "./resources/js/components/admin/conference/gallery.vue":
/*!**************************************************************!*\
  !*** ./resources/js/components/admin/conference/gallery.vue ***!
  \**************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _gallery_vue_vue_type_template_id_28c127ea___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./gallery.vue?vue&type=template&id=28c127ea& */ \"./resources/js/components/admin/conference/gallery.vue?vue&type=template&id=28c127ea&\");\n/* harmony import */ var _gallery_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./gallery.vue?vue&type=script&lang=js& */ \"./resources/js/components/admin/conference/gallery.vue?vue&type=script&lang=js&\");\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n;\nvar component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _gallery_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _gallery_vue_vue_type_template_id_28c127ea___WEBPACK_IMPORTED_MODULE_0__.render,\n  _gallery_vue_vue_type_template_id_28c127ea___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"resources/js/components/admin/conference/gallery.vue\"\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9jb25mZXJlbmNlL2dhbGxlcnkudnVlIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBc0Y7QUFDM0I7QUFDTDs7O0FBR3REO0FBQ0EsQ0FBbUc7QUFDbkcsZ0JBQWdCLHVHQUFVO0FBQzFCLEVBQUUsNkVBQU07QUFDUixFQUFFLCtFQUFNO0FBQ1IsRUFBRSx3RkFBZTtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLEtBQVUsRUFBRSxZQWlCZjtBQUNEO0FBQ0EsaUVBQWUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9jb25mZXJlbmNlL2dhbGxlcnkudnVlP2NlMWUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9nYWxsZXJ5LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yOGMxMjdlYSZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9nYWxsZXJ5LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vZ2FsbGVyeS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9Vc2Vycy9hZG1pbi9Qcm9qZWN0cy9JRFBBQy9Fc2N1ZWxhL2VzY3VlbGFfbGFyYXZlbC9kb2Nyb290L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzI4YzEyN2VhJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzI4YzEyN2VhJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzI4YzEyN2VhJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9nYWxsZXJ5LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yOGMxMjdlYSZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCcyOGMxMjdlYScsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vY29uZmVyZW5jZS9nYWxsZXJ5LnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./resources/js/components/admin/conference/gallery.vue\n");

/***/ }),

/***/ "./resources/js/components/admin/conference/index.vue":
/*!************************************************************!*\
  !*** ./resources/js/components/admin/conference/index.vue ***!
  \************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _index_vue_vue_type_template_id_0c664d2c___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index.vue?vue&type=template&id=0c664d2c& */ \"./resources/js/components/admin/conference/index.vue?vue&type=template&id=0c664d2c&\");\n/* harmony import */ var _index_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./index.vue?vue&type=script&lang=js& */ \"./resources/js/components/admin/conference/index.vue?vue&type=script&lang=js&\");\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n;\nvar component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _index_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _index_vue_vue_type_template_id_0c664d2c___WEBPACK_IMPORTED_MODULE_0__.render,\n  _index_vue_vue_type_template_id_0c664d2c___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"resources/js/components/admin/conference/index.vue\"\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9jb25mZXJlbmNlL2luZGV4LnZ1ZSIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQW9GO0FBQzNCO0FBQ0w7OztBQUdwRDtBQUNBLENBQW1HO0FBQ25HLGdCQUFnQix1R0FBVTtBQUMxQixFQUFFLDJFQUFNO0FBQ1IsRUFBRSw2RUFBTTtBQUNSLEVBQUUsc0ZBQWU7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSSxLQUFVLEVBQUUsWUFpQmY7QUFDRDtBQUNBLGlFQUFlIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vY29uZmVyZW5jZS9pbmRleC52dWU/YjA2OSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL2luZGV4LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wYzY2NGQyYyZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9pbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL2luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL1VzZXJzL2FkbWluL1Byb2plY3RzL0lEUEFDL0VzY3VlbGEvZXNjdWVsYV9sYXJhdmVsL2RvY3Jvb3Qvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnMGM2NjRkMmMnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnMGM2NjRkMmMnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnMGM2NjRkMmMnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL2luZGV4LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wYzY2NGQyYyZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCcwYzY2NGQyYycsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vY29uZmVyZW5jZS9pbmRleC52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./resources/js/components/admin/conference/index.vue\n");

/***/ }),

/***/ "./resources/js/components/admin/course/create.vue":
/*!*********************************************************!*\
  !*** ./resources/js/components/admin/course/create.vue ***!
  \*********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _create_vue_vue_type_template_id_d4aac696___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./create.vue?vue&type=template&id=d4aac696& */ \"./resources/js/components/admin/course/create.vue?vue&type=template&id=d4aac696&\");\n/* harmony import */ var _create_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./create.vue?vue&type=script&lang=js& */ \"./resources/js/components/admin/course/create.vue?vue&type=script&lang=js&\");\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n;\nvar component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _create_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _create_vue_vue_type_template_id_d4aac696___WEBPACK_IMPORTED_MODULE_0__.render,\n  _create_vue_vue_type_template_id_d4aac696___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"resources/js/components/admin/course/create.vue\"\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9jb3Vyc2UvY3JlYXRlLnZ1ZSIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQXFGO0FBQzNCO0FBQ0w7OztBQUdyRDtBQUNBLENBQW1HO0FBQ25HLGdCQUFnQix1R0FBVTtBQUMxQixFQUFFLDRFQUFNO0FBQ1IsRUFBRSw4RUFBTTtBQUNSLEVBQUUsdUZBQWU7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSSxLQUFVLEVBQUUsWUFpQmY7QUFDRDtBQUNBLGlFQUFlIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vY291cnNlL2NyZWF0ZS52dWU/NTViZiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL2NyZWF0ZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZDRhYWM2OTYmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vY3JlYXRlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vY3JlYXRlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL1VzZXJzL2FkbWluL1Byb2plY3RzL0lEUEFDL0VzY3VlbGEvZXNjdWVsYV9sYXJhdmVsL2RvY3Jvb3Qvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnZDRhYWM2OTYnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnZDRhYWM2OTYnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnZDRhYWM2OTYnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL2NyZWF0ZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZDRhYWM2OTYmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignZDRhYWM2OTYnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInJlc291cmNlcy9qcy9jb21wb25lbnRzL2FkbWluL2NvdXJzZS9jcmVhdGUudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./resources/js/components/admin/course/create.vue\n");

/***/ }),

/***/ "./resources/js/components/admin/course/edit.vue":
/*!*******************************************************!*\
  !*** ./resources/js/components/admin/course/edit.vue ***!
  \*******************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _edit_vue_vue_type_template_id_1486f1fa___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./edit.vue?vue&type=template&id=1486f1fa& */ \"./resources/js/components/admin/course/edit.vue?vue&type=template&id=1486f1fa&\");\n/* harmony import */ var _edit_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./edit.vue?vue&type=script&lang=js& */ \"./resources/js/components/admin/course/edit.vue?vue&type=script&lang=js&\");\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n;\nvar component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _edit_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _edit_vue_vue_type_template_id_1486f1fa___WEBPACK_IMPORTED_MODULE_0__.render,\n  _edit_vue_vue_type_template_id_1486f1fa___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"resources/js/components/admin/course/edit.vue\"\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9jb3Vyc2UvZWRpdC52dWUiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFtRjtBQUMzQjtBQUNMOzs7QUFHbkQ7QUFDQSxDQUFtRztBQUNuRyxnQkFBZ0IsdUdBQVU7QUFDMUIsRUFBRSwwRUFBTTtBQUNSLEVBQUUsNEVBQU07QUFDUixFQUFFLHFGQUFlO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksS0FBVSxFQUFFLFlBaUJmO0FBQ0Q7QUFDQSxpRUFBZSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9jb21wb25lbnRzL2FkbWluL2NvdXJzZS9lZGl0LnZ1ZT9jNmFjIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vZWRpdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MTQ4NmYxZmEmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vZWRpdC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL2VkaXQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvVXNlcnMvYWRtaW4vUHJvamVjdHMvSURQQUMvRXNjdWVsYS9lc2N1ZWxhX2xhcmF2ZWwvZG9jcm9vdC9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCcxNDg2ZjFmYScpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCcxNDg2ZjFmYScsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCcxNDg2ZjFmYScsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vZWRpdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MTQ4NmYxZmEmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignMTQ4NmYxZmEnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInJlc291cmNlcy9qcy9jb21wb25lbnRzL2FkbWluL2NvdXJzZS9lZGl0LnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./resources/js/components/admin/course/edit.vue\n");

/***/ }),

/***/ "./resources/js/components/admin/course/index.vue":
/*!********************************************************!*\
  !*** ./resources/js/components/admin/course/index.vue ***!
  \********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _index_vue_vue_type_template_id_038c1329___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index.vue?vue&type=template&id=038c1329& */ \"./resources/js/components/admin/course/index.vue?vue&type=template&id=038c1329&\");\n/* harmony import */ var _index_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./index.vue?vue&type=script&lang=js& */ \"./resources/js/components/admin/course/index.vue?vue&type=script&lang=js&\");\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n;\nvar component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _index_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _index_vue_vue_type_template_id_038c1329___WEBPACK_IMPORTED_MODULE_0__.render,\n  _index_vue_vue_type_template_id_038c1329___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"resources/js/components/admin/course/index.vue\"\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9jb3Vyc2UvaW5kZXgudnVlIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBb0Y7QUFDM0I7QUFDTDs7O0FBR3BEO0FBQ0EsQ0FBbUc7QUFDbkcsZ0JBQWdCLHVHQUFVO0FBQzFCLEVBQUUsMkVBQU07QUFDUixFQUFFLDZFQUFNO0FBQ1IsRUFBRSxzRkFBZTtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLEtBQVUsRUFBRSxZQWlCZjtBQUNEO0FBQ0EsaUVBQWUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9jb3Vyc2UvaW5kZXgudnVlPzE2OGQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9pbmRleC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MDM4YzEzMjkmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vaW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9pbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9Vc2Vycy9hZG1pbi9Qcm9qZWN0cy9JRFBBQy9Fc2N1ZWxhL2VzY3VlbGFfbGFyYXZlbC9kb2Nyb290L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzAzOGMxMzI5JykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzAzOGMxMzI5JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzAzOGMxMzI5JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9pbmRleC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MDM4YzEzMjkmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignMDM4YzEzMjknLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInJlc291cmNlcy9qcy9jb21wb25lbnRzL2FkbWluL2NvdXJzZS9pbmRleC52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./resources/js/components/admin/course/index.vue\n");

/***/ }),

/***/ "./resources/js/components/admin/cycle/create.vue":
/*!********************************************************!*\
  !*** ./resources/js/components/admin/cycle/create.vue ***!
  \********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _create_vue_vue_type_template_id_3c7c97e0___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./create.vue?vue&type=template&id=3c7c97e0& */ \"./resources/js/components/admin/cycle/create.vue?vue&type=template&id=3c7c97e0&\");\n/* harmony import */ var _create_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./create.vue?vue&type=script&lang=js& */ \"./resources/js/components/admin/cycle/create.vue?vue&type=script&lang=js&\");\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n;\nvar component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _create_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _create_vue_vue_type_template_id_3c7c97e0___WEBPACK_IMPORTED_MODULE_0__.render,\n  _create_vue_vue_type_template_id_3c7c97e0___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"resources/js/components/admin/cycle/create.vue\"\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9jeWNsZS9jcmVhdGUudnVlIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBcUY7QUFDM0I7QUFDTDs7O0FBR3JEO0FBQ0EsQ0FBbUc7QUFDbkcsZ0JBQWdCLHVHQUFVO0FBQzFCLEVBQUUsNEVBQU07QUFDUixFQUFFLDhFQUFNO0FBQ1IsRUFBRSx1RkFBZTtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLEtBQVUsRUFBRSxZQWlCZjtBQUNEO0FBQ0EsaUVBQWUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9jeWNsZS9jcmVhdGUudnVlP2ViY2EiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9jcmVhdGUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTNjN2M5N2UwJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL2NyZWF0ZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL2NyZWF0ZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9Vc2Vycy9hZG1pbi9Qcm9qZWN0cy9JRFBBQy9Fc2N1ZWxhL2VzY3VlbGFfbGFyYXZlbC9kb2Nyb290L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzNjN2M5N2UwJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzNjN2M5N2UwJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzNjN2M5N2UwJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9jcmVhdGUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTNjN2M5N2UwJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzNjN2M5N2UwJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJyZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9jeWNsZS9jcmVhdGUudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./resources/js/components/admin/cycle/create.vue\n");

/***/ }),

/***/ "./resources/js/components/admin/cycle/edit.vue":
/*!******************************************************!*\
  !*** ./resources/js/components/admin/cycle/edit.vue ***!
  \******************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _edit_vue_vue_type_template_id_5bd7b91e___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./edit.vue?vue&type=template&id=5bd7b91e& */ \"./resources/js/components/admin/cycle/edit.vue?vue&type=template&id=5bd7b91e&\");\n/* harmony import */ var _edit_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./edit.vue?vue&type=script&lang=js& */ \"./resources/js/components/admin/cycle/edit.vue?vue&type=script&lang=js&\");\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n;\nvar component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _edit_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _edit_vue_vue_type_template_id_5bd7b91e___WEBPACK_IMPORTED_MODULE_0__.render,\n  _edit_vue_vue_type_template_id_5bd7b91e___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"resources/js/components/admin/cycle/edit.vue\"\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9jeWNsZS9lZGl0LnZ1ZSIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQW1GO0FBQzNCO0FBQ0w7OztBQUduRDtBQUNBLENBQW1HO0FBQ25HLGdCQUFnQix1R0FBVTtBQUMxQixFQUFFLDBFQUFNO0FBQ1IsRUFBRSw0RUFBTTtBQUNSLEVBQUUscUZBQWU7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSSxLQUFVLEVBQUUsWUFpQmY7QUFDRDtBQUNBLGlFQUFlIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vY3ljbGUvZWRpdC52dWU/OWZkYiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL2VkaXQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTViZDdiOTFlJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL2VkaXQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9lZGl0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL1VzZXJzL2FkbWluL1Byb2plY3RzL0lEUEFDL0VzY3VlbGEvZXNjdWVsYV9sYXJhdmVsL2RvY3Jvb3Qvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnNWJkN2I5MWUnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnNWJkN2I5MWUnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnNWJkN2I5MWUnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL2VkaXQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTViZDdiOTFlJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzViZDdiOTFlJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJyZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9jeWNsZS9lZGl0LnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./resources/js/components/admin/cycle/edit.vue\n");

/***/ }),

/***/ "./resources/js/components/admin/cycle/index.vue":
/*!*******************************************************!*\
  !*** ./resources/js/components/admin/cycle/index.vue ***!
  \*******************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _index_vue_vue_type_template_id_60d7246e___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index.vue?vue&type=template&id=60d7246e& */ \"./resources/js/components/admin/cycle/index.vue?vue&type=template&id=60d7246e&\");\n/* harmony import */ var _index_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./index.vue?vue&type=script&lang=js& */ \"./resources/js/components/admin/cycle/index.vue?vue&type=script&lang=js&\");\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n;\nvar component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _index_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _index_vue_vue_type_template_id_60d7246e___WEBPACK_IMPORTED_MODULE_0__.render,\n  _index_vue_vue_type_template_id_60d7246e___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"resources/js/components/admin/cycle/index.vue\"\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9jeWNsZS9pbmRleC52dWUiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFvRjtBQUMzQjtBQUNMOzs7QUFHcEQ7QUFDQSxDQUFtRztBQUNuRyxnQkFBZ0IsdUdBQVU7QUFDMUIsRUFBRSwyRUFBTTtBQUNSLEVBQUUsNkVBQU07QUFDUixFQUFFLHNGQUFlO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksS0FBVSxFQUFFLFlBaUJmO0FBQ0Q7QUFDQSxpRUFBZSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9jb21wb25lbnRzL2FkbWluL2N5Y2xlL2luZGV4LnZ1ZT9kYmYzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vaW5kZXgudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTYwZDcyNDZlJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL2luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vaW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvVXNlcnMvYWRtaW4vUHJvamVjdHMvSURQQUMvRXNjdWVsYS9lc2N1ZWxhX2xhcmF2ZWwvZG9jcm9vdC9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCc2MGQ3MjQ2ZScpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCc2MGQ3MjQ2ZScsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCc2MGQ3MjQ2ZScsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vaW5kZXgudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTYwZDcyNDZlJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzYwZDcyNDZlJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJyZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9jeWNsZS9pbmRleC52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./resources/js/components/admin/cycle/index.vue\n");

/***/ }),

/***/ "./resources/js/components/admin/library/create.vue":
/*!**********************************************************!*\
  !*** ./resources/js/components/admin/library/create.vue ***!
  \**********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _create_vue_vue_type_template_id_b9ed7f4a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./create.vue?vue&type=template&id=b9ed7f4a& */ \"./resources/js/components/admin/library/create.vue?vue&type=template&id=b9ed7f4a&\");\n/* harmony import */ var _create_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./create.vue?vue&type=script&lang=js& */ \"./resources/js/components/admin/library/create.vue?vue&type=script&lang=js&\");\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n;\nvar component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _create_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _create_vue_vue_type_template_id_b9ed7f4a___WEBPACK_IMPORTED_MODULE_0__.render,\n  _create_vue_vue_type_template_id_b9ed7f4a___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"resources/js/components/admin/library/create.vue\"\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9saWJyYXJ5L2NyZWF0ZS52dWUiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFxRjtBQUMzQjtBQUNMOzs7QUFHckQ7QUFDQSxDQUFtRztBQUNuRyxnQkFBZ0IsdUdBQVU7QUFDMUIsRUFBRSw0RUFBTTtBQUNSLEVBQUUsOEVBQU07QUFDUixFQUFFLHVGQUFlO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksS0FBVSxFQUFFLFlBaUJmO0FBQ0Q7QUFDQSxpRUFBZSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9jb21wb25lbnRzL2FkbWluL2xpYnJhcnkvY3JlYXRlLnZ1ZT83ODVkIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vY3JlYXRlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1iOWVkN2Y0YSZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9jcmVhdGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9jcmVhdGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvVXNlcnMvYWRtaW4vUHJvamVjdHMvSURQQUMvRXNjdWVsYS9lc2N1ZWxhX2xhcmF2ZWwvZG9jcm9vdC9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCdiOWVkN2Y0YScpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCdiOWVkN2Y0YScsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCdiOWVkN2Y0YScsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vY3JlYXRlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1iOWVkN2Y0YSZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCdiOWVkN2Y0YScsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vbGlicmFyeS9jcmVhdGUudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./resources/js/components/admin/library/create.vue\n");

/***/ }),

/***/ "./resources/js/components/admin/library/edit.vue":
/*!********************************************************!*\
  !*** ./resources/js/components/admin/library/edit.vue ***!
  \********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _edit_vue_vue_type_template_id_7d9bdc29___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./edit.vue?vue&type=template&id=7d9bdc29& */ \"./resources/js/components/admin/library/edit.vue?vue&type=template&id=7d9bdc29&\");\n/* harmony import */ var _edit_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./edit.vue?vue&type=script&lang=js& */ \"./resources/js/components/admin/library/edit.vue?vue&type=script&lang=js&\");\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n;\nvar component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _edit_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _edit_vue_vue_type_template_id_7d9bdc29___WEBPACK_IMPORTED_MODULE_0__.render,\n  _edit_vue_vue_type_template_id_7d9bdc29___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"resources/js/components/admin/library/edit.vue\"\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9saWJyYXJ5L2VkaXQudnVlIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBbUY7QUFDM0I7QUFDTDs7O0FBR25EO0FBQ0EsQ0FBbUc7QUFDbkcsZ0JBQWdCLHVHQUFVO0FBQzFCLEVBQUUsMEVBQU07QUFDUixFQUFFLDRFQUFNO0FBQ1IsRUFBRSxxRkFBZTtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLEtBQVUsRUFBRSxZQWlCZjtBQUNEO0FBQ0EsaUVBQWUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9saWJyYXJ5L2VkaXQudnVlP2IwOWIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9lZGl0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03ZDliZGMyOSZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9lZGl0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vZWRpdC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9Vc2Vycy9hZG1pbi9Qcm9qZWN0cy9JRFBBQy9Fc2N1ZWxhL2VzY3VlbGFfbGFyYXZlbC9kb2Nyb290L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzdkOWJkYzI5JykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzdkOWJkYzI5JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzdkOWJkYzI5JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9lZGl0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03ZDliZGMyOSZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCc3ZDliZGMyOScsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vbGlicmFyeS9lZGl0LnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./resources/js/components/admin/library/edit.vue\n");

/***/ }),

/***/ "./resources/js/components/admin/library/index.vue":
/*!*********************************************************!*\
  !*** ./resources/js/components/admin/library/index.vue ***!
  \*********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _index_vue_vue_type_template_id_779762c3___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index.vue?vue&type=template&id=779762c3& */ \"./resources/js/components/admin/library/index.vue?vue&type=template&id=779762c3&\");\n/* harmony import */ var _index_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./index.vue?vue&type=script&lang=js& */ \"./resources/js/components/admin/library/index.vue?vue&type=script&lang=js&\");\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n;\nvar component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _index_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _index_vue_vue_type_template_id_779762c3___WEBPACK_IMPORTED_MODULE_0__.render,\n  _index_vue_vue_type_template_id_779762c3___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"resources/js/components/admin/library/index.vue\"\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9saWJyYXJ5L2luZGV4LnZ1ZSIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQW9GO0FBQzNCO0FBQ0w7OztBQUdwRDtBQUNBLENBQW1HO0FBQ25HLGdCQUFnQix1R0FBVTtBQUMxQixFQUFFLDJFQUFNO0FBQ1IsRUFBRSw2RUFBTTtBQUNSLEVBQUUsc0ZBQWU7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSSxLQUFVLEVBQUUsWUFpQmY7QUFDRDtBQUNBLGlFQUFlIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vbGlicmFyeS9pbmRleC52dWU/NGM4MiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL2luZGV4LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03Nzk3NjJjMyZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9pbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL2luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL1VzZXJzL2FkbWluL1Byb2plY3RzL0lEUEFDL0VzY3VlbGEvZXNjdWVsYV9sYXJhdmVsL2RvY3Jvb3Qvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnNzc5NzYyYzMnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnNzc5NzYyYzMnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnNzc5NzYyYzMnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL2luZGV4LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03Nzk3NjJjMyZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCc3Nzk3NjJjMycsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vbGlicmFyeS9pbmRleC52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./resources/js/components/admin/library/index.vue\n");

/***/ }),

/***/ "./resources/js/components/admin/page/edit.vue":
/*!*****************************************************!*\
  !*** ./resources/js/components/admin/page/edit.vue ***!
  \*****************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _edit_vue_vue_type_template_id_31209e4f___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./edit.vue?vue&type=template&id=31209e4f& */ \"./resources/js/components/admin/page/edit.vue?vue&type=template&id=31209e4f&\");\n/* harmony import */ var _edit_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./edit.vue?vue&type=script&lang=js& */ \"./resources/js/components/admin/page/edit.vue?vue&type=script&lang=js&\");\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n;\nvar component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _edit_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _edit_vue_vue_type_template_id_31209e4f___WEBPACK_IMPORTED_MODULE_0__.render,\n  _edit_vue_vue_type_template_id_31209e4f___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"resources/js/components/admin/page/edit.vue\"\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9wYWdlL2VkaXQudnVlIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBbUY7QUFDM0I7QUFDTDs7O0FBR25EO0FBQ0EsQ0FBbUc7QUFDbkcsZ0JBQWdCLHVHQUFVO0FBQzFCLEVBQUUsMEVBQU07QUFDUixFQUFFLDRFQUFNO0FBQ1IsRUFBRSxxRkFBZTtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLEtBQVUsRUFBRSxZQWlCZjtBQUNEO0FBQ0EsaUVBQWUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9wYWdlL2VkaXQudnVlPzBiM2UiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9lZGl0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zMTIwOWU0ZiZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9lZGl0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vZWRpdC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9Vc2Vycy9hZG1pbi9Qcm9qZWN0cy9JRFBBQy9Fc2N1ZWxhL2VzY3VlbGFfbGFyYXZlbC9kb2Nyb290L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzMxMjA5ZTRmJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzMxMjA5ZTRmJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzMxMjA5ZTRmJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9lZGl0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zMTIwOWU0ZiZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCczMTIwOWU0ZicsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vcGFnZS9lZGl0LnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./resources/js/components/admin/page/edit.vue\n");

/***/ }),

/***/ "./resources/js/components/admin/page/index.vue":
/*!******************************************************!*\
  !*** ./resources/js/components/admin/page/index.vue ***!
  \******************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _index_vue_vue_type_template_id_34aae55d___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index.vue?vue&type=template&id=34aae55d& */ \"./resources/js/components/admin/page/index.vue?vue&type=template&id=34aae55d&\");\n/* harmony import */ var _index_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./index.vue?vue&type=script&lang=js& */ \"./resources/js/components/admin/page/index.vue?vue&type=script&lang=js&\");\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n;\nvar component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _index_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _index_vue_vue_type_template_id_34aae55d___WEBPACK_IMPORTED_MODULE_0__.render,\n  _index_vue_vue_type_template_id_34aae55d___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"resources/js/components/admin/page/index.vue\"\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9wYWdlL2luZGV4LnZ1ZSIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQW9GO0FBQzNCO0FBQ0w7OztBQUdwRDtBQUNBLENBQW1HO0FBQ25HLGdCQUFnQix1R0FBVTtBQUMxQixFQUFFLDJFQUFNO0FBQ1IsRUFBRSw2RUFBTTtBQUNSLEVBQUUsc0ZBQWU7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSSxLQUFVLEVBQUUsWUFpQmY7QUFDRDtBQUNBLGlFQUFlIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vcGFnZS9pbmRleC52dWU/MjEwNyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL2luZGV4LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zNGFhZTU1ZCZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9pbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL2luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL1VzZXJzL2FkbWluL1Byb2plY3RzL0lEUEFDL0VzY3VlbGEvZXNjdWVsYV9sYXJhdmVsL2RvY3Jvb3Qvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnMzRhYWU1NWQnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnMzRhYWU1NWQnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnMzRhYWU1NWQnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL2luZGV4LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zNGFhZTU1ZCZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCczNGFhZTU1ZCcsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vcGFnZS9pbmRleC52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./resources/js/components/admin/page/index.vue\n");

/***/ }),

/***/ "./resources/js/components/admin/video/create.vue":
/*!********************************************************!*\
  !*** ./resources/js/components/admin/video/create.vue ***!
  \********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _create_vue_vue_type_template_id_a9d0cd4a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./create.vue?vue&type=template&id=a9d0cd4a& */ \"./resources/js/components/admin/video/create.vue?vue&type=template&id=a9d0cd4a&\");\n/* harmony import */ var _create_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./create.vue?vue&type=script&lang=js& */ \"./resources/js/components/admin/video/create.vue?vue&type=script&lang=js&\");\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n;\nvar component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _create_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _create_vue_vue_type_template_id_a9d0cd4a___WEBPACK_IMPORTED_MODULE_0__.render,\n  _create_vue_vue_type_template_id_a9d0cd4a___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"resources/js/components/admin/video/create.vue\"\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi92aWRlby9jcmVhdGUudnVlIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBcUY7QUFDM0I7QUFDTDs7O0FBR3JEO0FBQ0EsQ0FBbUc7QUFDbkcsZ0JBQWdCLHVHQUFVO0FBQzFCLEVBQUUsNEVBQU07QUFDUixFQUFFLDhFQUFNO0FBQ1IsRUFBRSx1RkFBZTtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLEtBQVUsRUFBRSxZQWlCZjtBQUNEO0FBQ0EsaUVBQWUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi92aWRlby9jcmVhdGUudnVlPzg2ZWUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9jcmVhdGUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWE5ZDBjZDRhJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL2NyZWF0ZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL2NyZWF0ZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9Vc2Vycy9hZG1pbi9Qcm9qZWN0cy9JRFBBQy9Fc2N1ZWxhL2VzY3VlbGFfbGFyYXZlbC9kb2Nyb290L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJ2E5ZDBjZDRhJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJ2E5ZDBjZDRhJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJ2E5ZDBjZDRhJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9jcmVhdGUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWE5ZDBjZDRhJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJ2E5ZDBjZDRhJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJyZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi92aWRlby9jcmVhdGUudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./resources/js/components/admin/video/create.vue\n");

/***/ }),

/***/ "./resources/js/components/admin/video/edit.vue":
/*!******************************************************!*\
  !*** ./resources/js/components/admin/video/edit.vue ***!
  \******************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _edit_vue_vue_type_template_id_912715ae___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./edit.vue?vue&type=template&id=912715ae& */ \"./resources/js/components/admin/video/edit.vue?vue&type=template&id=912715ae&\");\n/* harmony import */ var _edit_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./edit.vue?vue&type=script&lang=js& */ \"./resources/js/components/admin/video/edit.vue?vue&type=script&lang=js&\");\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n;\nvar component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _edit_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _edit_vue_vue_type_template_id_912715ae___WEBPACK_IMPORTED_MODULE_0__.render,\n  _edit_vue_vue_type_template_id_912715ae___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"resources/js/components/admin/video/edit.vue\"\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi92aWRlby9lZGl0LnZ1ZSIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQW1GO0FBQzNCO0FBQ0w7OztBQUduRDtBQUNBLENBQW1HO0FBQ25HLGdCQUFnQix1R0FBVTtBQUMxQixFQUFFLDBFQUFNO0FBQ1IsRUFBRSw0RUFBTTtBQUNSLEVBQUUscUZBQWU7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSSxLQUFVLEVBQUUsWUFpQmY7QUFDRDtBQUNBLGlFQUFlIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vdmlkZW8vZWRpdC52dWU/ZTlmZiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL2VkaXQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTkxMjcxNWFlJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL2VkaXQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9lZGl0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL1VzZXJzL2FkbWluL1Byb2plY3RzL0lEUEFDL0VzY3VlbGEvZXNjdWVsYV9sYXJhdmVsL2RvY3Jvb3Qvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnOTEyNzE1YWUnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnOTEyNzE1YWUnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnOTEyNzE1YWUnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL2VkaXQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTkxMjcxNWFlJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzkxMjcxNWFlJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJyZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi92aWRlby9lZGl0LnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./resources/js/components/admin/video/edit.vue\n");

/***/ }),

/***/ "./resources/js/components/admin/video/index.vue":
/*!*******************************************************!*\
  !*** ./resources/js/components/admin/video/index.vue ***!
  \*******************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _index_vue_vue_type_template_id_77d9e9c3___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index.vue?vue&type=template&id=77d9e9c3& */ \"./resources/js/components/admin/video/index.vue?vue&type=template&id=77d9e9c3&\");\n/* harmony import */ var _index_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./index.vue?vue&type=script&lang=js& */ \"./resources/js/components/admin/video/index.vue?vue&type=script&lang=js&\");\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n;\nvar component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _index_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _index_vue_vue_type_template_id_77d9e9c3___WEBPACK_IMPORTED_MODULE_0__.render,\n  _index_vue_vue_type_template_id_77d9e9c3___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"resources/js/components/admin/video/index.vue\"\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi92aWRlby9pbmRleC52dWUiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFvRjtBQUMzQjtBQUNMOzs7QUFHcEQ7QUFDQSxDQUFtRztBQUNuRyxnQkFBZ0IsdUdBQVU7QUFDMUIsRUFBRSwyRUFBTTtBQUNSLEVBQUUsNkVBQU07QUFDUixFQUFFLHNGQUFlO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksS0FBVSxFQUFFLFlBaUJmO0FBQ0Q7QUFDQSxpRUFBZSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9jb21wb25lbnRzL2FkbWluL3ZpZGVvL2luZGV4LnZ1ZT8xMjQwIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vaW5kZXgudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTc3ZDllOWMzJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL2luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vaW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvVXNlcnMvYWRtaW4vUHJvamVjdHMvSURQQUMvRXNjdWVsYS9lc2N1ZWxhX2xhcmF2ZWwvZG9jcm9vdC9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCc3N2Q5ZTljMycpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCc3N2Q5ZTljMycsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCc3N2Q5ZTljMycsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vaW5kZXgudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTc3ZDllOWMzJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzc3ZDllOWMzJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJyZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi92aWRlby9pbmRleC52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./resources/js/components/admin/video/index.vue\n");

/***/ }),

/***/ "./resources/js/components/admin/widgets/BoxColorWidget.vue":
/*!******************************************************************!*\
  !*** ./resources/js/components/admin/widgets/BoxColorWidget.vue ***!
  \******************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _BoxColorWidget_vue_vue_type_template_id_34660a72___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./BoxColorWidget.vue?vue&type=template&id=34660a72& */ \"./resources/js/components/admin/widgets/BoxColorWidget.vue?vue&type=template&id=34660a72&\");\n/* harmony import */ var _BoxColorWidget_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./BoxColorWidget.vue?vue&type=script&lang=js& */ \"./resources/js/components/admin/widgets/BoxColorWidget.vue?vue&type=script&lang=js&\");\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n;\nvar component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _BoxColorWidget_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _BoxColorWidget_vue_vue_type_template_id_34660a72___WEBPACK_IMPORTED_MODULE_0__.render,\n  _BoxColorWidget_vue_vue_type_template_id_34660a72___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"resources/js/components/admin/widgets/BoxColorWidget.vue\"\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi93aWRnZXRzL0JveENvbG9yV2lkZ2V0LnZ1ZSIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQTZGO0FBQzNCO0FBQ0w7OztBQUc3RDtBQUNBLENBQW1HO0FBQ25HLGdCQUFnQix1R0FBVTtBQUMxQixFQUFFLG9GQUFNO0FBQ1IsRUFBRSxzRkFBTTtBQUNSLEVBQUUsK0ZBQWU7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSSxLQUFVLEVBQUUsWUFpQmY7QUFDRDtBQUNBLGlFQUFlIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vd2lkZ2V0cy9Cb3hDb2xvcldpZGdldC52dWU/OTRlYiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL0JveENvbG9yV2lkZ2V0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zNDY2MGE3MiZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9Cb3hDb2xvcldpZGdldC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL0JveENvbG9yV2lkZ2V0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL1VzZXJzL2FkbWluL1Byb2plY3RzL0lEUEFDL0VzY3VlbGEvZXNjdWVsYV9sYXJhdmVsL2RvY3Jvb3Qvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnMzQ2NjBhNzInKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnMzQ2NjBhNzInLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnMzQ2NjBhNzInLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL0JveENvbG9yV2lkZ2V0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zNDY2MGE3MiZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCczNDY2MGE3MicsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vd2lkZ2V0cy9Cb3hDb2xvcldpZGdldC52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./resources/js/components/admin/widgets/BoxColorWidget.vue\n");

/***/ }),

/***/ "./resources/js/components/admin/widgets/ChartWidget.vue":
/*!***************************************************************!*\
  !*** ./resources/js/components/admin/widgets/ChartWidget.vue ***!
  \***************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _ChartWidget_vue_vue_type_template_id_3bb034c7___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ChartWidget.vue?vue&type=template&id=3bb034c7& */ \"./resources/js/components/admin/widgets/ChartWidget.vue?vue&type=template&id=3bb034c7&\");\n/* harmony import */ var _ChartWidget_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ChartWidget.vue?vue&type=script&lang=js& */ \"./resources/js/components/admin/widgets/ChartWidget.vue?vue&type=script&lang=js&\");\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n;\nvar component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _ChartWidget_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _ChartWidget_vue_vue_type_template_id_3bb034c7___WEBPACK_IMPORTED_MODULE_0__.render,\n  _ChartWidget_vue_vue_type_template_id_3bb034c7___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"resources/js/components/admin/widgets/ChartWidget.vue\"\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi93aWRnZXRzL0NoYXJ0V2lkZ2V0LnZ1ZSIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQTBGO0FBQzNCO0FBQ0w7OztBQUcxRDtBQUNBLENBQW1HO0FBQ25HLGdCQUFnQix1R0FBVTtBQUMxQixFQUFFLGlGQUFNO0FBQ1IsRUFBRSxtRkFBTTtBQUNSLEVBQUUsNEZBQWU7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSSxLQUFVLEVBQUUsWUFpQmY7QUFDRDtBQUNBLGlFQUFlIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vd2lkZ2V0cy9DaGFydFdpZGdldC52dWU/ZjlkNSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL0NoYXJ0V2lkZ2V0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zYmIwMzRjNyZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9DaGFydFdpZGdldC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL0NoYXJ0V2lkZ2V0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL1VzZXJzL2FkbWluL1Byb2plY3RzL0lEUEFDL0VzY3VlbGEvZXNjdWVsYV9sYXJhdmVsL2RvY3Jvb3Qvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnM2JiMDM0YzcnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnM2JiMDM0YzcnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnM2JiMDM0YzcnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL0NoYXJ0V2lkZ2V0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zYmIwMzRjNyZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCczYmIwMzRjNycsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vd2lkZ2V0cy9DaGFydFdpZGdldC52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./resources/js/components/admin/widgets/ChartWidget.vue\n");

/***/ }),

/***/ "./resources/js/components/admin/widgets/FooterWidget.vue":
/*!****************************************************************!*\
  !*** ./resources/js/components/admin/widgets/FooterWidget.vue ***!
  \****************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _FooterWidget_vue_vue_type_template_id_bf415dec___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./FooterWidget.vue?vue&type=template&id=bf415dec& */ \"./resources/js/components/admin/widgets/FooterWidget.vue?vue&type=template&id=bf415dec&\");\n/* harmony import */ var _FooterWidget_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./FooterWidget.vue?vue&type=script&lang=js& */ \"./resources/js/components/admin/widgets/FooterWidget.vue?vue&type=script&lang=js&\");\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n;\nvar component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _FooterWidget_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _FooterWidget_vue_vue_type_template_id_bf415dec___WEBPACK_IMPORTED_MODULE_0__.render,\n  _FooterWidget_vue_vue_type_template_id_bf415dec___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"resources/js/components/admin/widgets/FooterWidget.vue\"\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi93aWRnZXRzL0Zvb3RlcldpZGdldC52dWUiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUEyRjtBQUMzQjtBQUNMOzs7QUFHM0Q7QUFDQSxDQUFtRztBQUNuRyxnQkFBZ0IsdUdBQVU7QUFDMUIsRUFBRSxrRkFBTTtBQUNSLEVBQUUsb0ZBQU07QUFDUixFQUFFLDZGQUFlO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksS0FBVSxFQUFFLFlBaUJmO0FBQ0Q7QUFDQSxpRUFBZSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9jb21wb25lbnRzL2FkbWluL3dpZGdldHMvRm9vdGVyV2lkZ2V0LnZ1ZT8yMGU0Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vRm9vdGVyV2lkZ2V0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1iZjQxNWRlYyZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9Gb290ZXJXaWRnZXQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9Gb290ZXJXaWRnZXQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvVXNlcnMvYWRtaW4vUHJvamVjdHMvSURQQUMvRXNjdWVsYS9lc2N1ZWxhX2xhcmF2ZWwvZG9jcm9vdC9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCdiZjQxNWRlYycpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCdiZjQxNWRlYycsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCdiZjQxNWRlYycsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vRm9vdGVyV2lkZ2V0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1iZjQxNWRlYyZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCdiZjQxNWRlYycsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vd2lkZ2V0cy9Gb290ZXJXaWRnZXQudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./resources/js/components/admin/widgets/FooterWidget.vue\n");

/***/ }),

/***/ "./resources/js/components/admin/widgets/HeaderWidget.vue":
/*!****************************************************************!*\
  !*** ./resources/js/components/admin/widgets/HeaderWidget.vue ***!
  \****************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _HeaderWidget_vue_vue_type_template_id_c2c11108___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./HeaderWidget.vue?vue&type=template&id=c2c11108& */ \"./resources/js/components/admin/widgets/HeaderWidget.vue?vue&type=template&id=c2c11108&\");\n/* harmony import */ var _HeaderWidget_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./HeaderWidget.vue?vue&type=script&lang=js& */ \"./resources/js/components/admin/widgets/HeaderWidget.vue?vue&type=script&lang=js&\");\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n;\nvar component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _HeaderWidget_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _HeaderWidget_vue_vue_type_template_id_c2c11108___WEBPACK_IMPORTED_MODULE_0__.render,\n  _HeaderWidget_vue_vue_type_template_id_c2c11108___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"resources/js/components/admin/widgets/HeaderWidget.vue\"\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi93aWRnZXRzL0hlYWRlcldpZGdldC52dWUiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUEyRjtBQUMzQjtBQUNMOzs7QUFHM0Q7QUFDQSxDQUFtRztBQUNuRyxnQkFBZ0IsdUdBQVU7QUFDMUIsRUFBRSxrRkFBTTtBQUNSLEVBQUUsb0ZBQU07QUFDUixFQUFFLDZGQUFlO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksS0FBVSxFQUFFLFlBaUJmO0FBQ0Q7QUFDQSxpRUFBZSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9jb21wb25lbnRzL2FkbWluL3dpZGdldHMvSGVhZGVyV2lkZ2V0LnZ1ZT8yZDJkIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vSGVhZGVyV2lkZ2V0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1jMmMxMTEwOCZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9IZWFkZXJXaWRnZXQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9IZWFkZXJXaWRnZXQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvVXNlcnMvYWRtaW4vUHJvamVjdHMvSURQQUMvRXNjdWVsYS9lc2N1ZWxhX2xhcmF2ZWwvZG9jcm9vdC9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCdjMmMxMTEwOCcpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCdjMmMxMTEwOCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCdjMmMxMTEwOCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vSGVhZGVyV2lkZ2V0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1jMmMxMTEwOCZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCdjMmMxMTEwOCcsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vd2lkZ2V0cy9IZWFkZXJXaWRnZXQudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./resources/js/components/admin/widgets/HeaderWidget.vue\n");

/***/ }),

/***/ "./resources/js/components/admin/widgets/IframeGroupWidget.vue":
/*!*********************************************************************!*\
  !*** ./resources/js/components/admin/widgets/IframeGroupWidget.vue ***!
  \*********************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _IframeGroupWidget_vue_vue_type_template_id_aeeb5db8___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./IframeGroupWidget.vue?vue&type=template&id=aeeb5db8& */ \"./resources/js/components/admin/widgets/IframeGroupWidget.vue?vue&type=template&id=aeeb5db8&\");\n/* harmony import */ var _IframeGroupWidget_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./IframeGroupWidget.vue?vue&type=script&lang=js& */ \"./resources/js/components/admin/widgets/IframeGroupWidget.vue?vue&type=script&lang=js&\");\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n;\nvar component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _IframeGroupWidget_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _IframeGroupWidget_vue_vue_type_template_id_aeeb5db8___WEBPACK_IMPORTED_MODULE_0__.render,\n  _IframeGroupWidget_vue_vue_type_template_id_aeeb5db8___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"resources/js/components/admin/widgets/IframeGroupWidget.vue\"\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi93aWRnZXRzL0lmcmFtZUdyb3VwV2lkZ2V0LnZ1ZSIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQWdHO0FBQzNCO0FBQ0w7OztBQUdoRTtBQUNBLENBQW1HO0FBQ25HLGdCQUFnQix1R0FBVTtBQUMxQixFQUFFLHVGQUFNO0FBQ1IsRUFBRSx5RkFBTTtBQUNSLEVBQUUsa0dBQWU7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSSxLQUFVLEVBQUUsWUFpQmY7QUFDRDtBQUNBLGlFQUFlIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vd2lkZ2V0cy9JZnJhbWVHcm91cFdpZGdldC52dWU/NmQxZCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL0lmcmFtZUdyb3VwV2lkZ2V0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1hZWViNWRiOCZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9JZnJhbWVHcm91cFdpZGdldC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL0lmcmFtZUdyb3VwV2lkZ2V0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL1VzZXJzL2FkbWluL1Byb2plY3RzL0lEUEFDL0VzY3VlbGEvZXNjdWVsYV9sYXJhdmVsL2RvY3Jvb3Qvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnYWVlYjVkYjgnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnYWVlYjVkYjgnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnYWVlYjVkYjgnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL0lmcmFtZUdyb3VwV2lkZ2V0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1hZWViNWRiOCZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCdhZWViNWRiOCcsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vd2lkZ2V0cy9JZnJhbWVHcm91cFdpZGdldC52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./resources/js/components/admin/widgets/IframeGroupWidget.vue\n");

/***/ }),

/***/ "./resources/js/components/admin/widgets/NavbarWidget.vue":
/*!****************************************************************!*\
  !*** ./resources/js/components/admin/widgets/NavbarWidget.vue ***!
  \****************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _NavbarWidget_vue_vue_type_template_id_0c01e93f___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./NavbarWidget.vue?vue&type=template&id=0c01e93f& */ \"./resources/js/components/admin/widgets/NavbarWidget.vue?vue&type=template&id=0c01e93f&\");\n/* harmony import */ var _NavbarWidget_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./NavbarWidget.vue?vue&type=script&lang=js& */ \"./resources/js/components/admin/widgets/NavbarWidget.vue?vue&type=script&lang=js&\");\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n;\nvar component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n  _NavbarWidget_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _NavbarWidget_vue_vue_type_template_id_0c01e93f___WEBPACK_IMPORTED_MODULE_0__.render,\n  _NavbarWidget_vue_vue_type_template_id_0c01e93f___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"resources/js/components/admin/widgets/NavbarWidget.vue\"\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi93aWRnZXRzL05hdmJhcldpZGdldC52dWUiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUEyRjtBQUMzQjtBQUNMOzs7QUFHM0Q7QUFDQSxDQUFtRztBQUNuRyxnQkFBZ0IsdUdBQVU7QUFDMUIsRUFBRSxrRkFBTTtBQUNSLEVBQUUsb0ZBQU07QUFDUixFQUFFLDZGQUFlO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksS0FBVSxFQUFFLFlBaUJmO0FBQ0Q7QUFDQSxpRUFBZSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9jb21wb25lbnRzL2FkbWluL3dpZGdldHMvTmF2YmFyV2lkZ2V0LnZ1ZT8xMTE5Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vTmF2YmFyV2lkZ2V0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wYzAxZTkzZiZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9OYXZiYXJXaWRnZXQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9OYXZiYXJXaWRnZXQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvVXNlcnMvYWRtaW4vUHJvamVjdHMvSURQQUMvRXNjdWVsYS9lc2N1ZWxhX2xhcmF2ZWwvZG9jcm9vdC9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCcwYzAxZTkzZicpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCcwYzAxZTkzZicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCcwYzAxZTkzZicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vTmF2YmFyV2lkZ2V0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wYzAxZTkzZiZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCcwYzAxZTkzZicsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vd2lkZ2V0cy9OYXZiYXJXaWRnZXQudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./resources/js/components/admin/widgets/NavbarWidget.vue\n");

/***/ }),

/***/ "./resources/js/components/admin/widgets/SidebarWidget.vue":
/*!*****************************************************************!*\
  !*** ./resources/js/components/admin/widgets/SidebarWidget.vue ***!
  \*****************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _SidebarWidget_vue_vue_type_template_id_5c937b85___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./SidebarWidget.vue?vue&type=template&id=5c937b85& */ \"./resources/js/components/admin/widgets/SidebarWidget.vue?vue&type=template&id=5c937b85&\");\n/* harmony import */ var _SidebarWidget_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./SidebarWidget.vue?vue&type=script&lang=js& */ \"./resources/js/components/admin/widgets/SidebarWidget.vue?vue&type=script&lang=js&\");\n/* harmony import */ var _SidebarWidget_vue_vue_type_style_index_0_id_5c937b85_lang_css___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./SidebarWidget.vue?vue&type=style&index=0&id=5c937b85&lang=css& */ \"./resources/js/components/admin/widgets/SidebarWidget.vue?vue&type=style&index=0&id=5c937b85&lang=css&\");\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n;\n\n\n/* normalize component */\n\nvar component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(\n  _SidebarWidget_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _SidebarWidget_vue_vue_type_template_id_5c937b85___WEBPACK_IMPORTED_MODULE_0__.render,\n  _SidebarWidget_vue_vue_type_template_id_5c937b85___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"resources/js/components/admin/widgets/SidebarWidget.vue\"\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi93aWRnZXRzL1NpZGViYXJXaWRnZXQudnVlIiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQTRGO0FBQzNCO0FBQ0w7QUFDNUQsQ0FBcUY7OztBQUdyRjtBQUNtRztBQUNuRyxnQkFBZ0IsdUdBQVU7QUFDMUIsRUFBRSxtRkFBTTtBQUNSLEVBQUUscUZBQU07QUFDUixFQUFFLDhGQUFlO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksS0FBVSxFQUFFLFlBaUJmO0FBQ0Q7QUFDQSxpRUFBZSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9jb21wb25lbnRzL2FkbWluL3dpZGdldHMvU2lkZWJhcldpZGdldC52dWU/ODZkOCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL1NpZGViYXJXaWRnZXQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTVjOTM3Yjg1JlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL1NpZGViYXJXaWRnZXQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9TaWRlYmFyV2lkZ2V0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuaW1wb3J0IHN0eWxlMCBmcm9tIFwiLi9TaWRlYmFyV2lkZ2V0LnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTVjOTM3Yjg1Jmxhbmc9Y3NzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvVXNlcnMvYWRtaW4vUHJvamVjdHMvSURQQUMvRXNjdWVsYS9lc2N1ZWxhX2xhcmF2ZWwvZG9jcm9vdC9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCc1YzkzN2I4NScpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCc1YzkzN2I4NScsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCc1YzkzN2I4NScsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vU2lkZWJhcldpZGdldC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NWM5MzdiODUmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignNWM5MzdiODUnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInJlc291cmNlcy9qcy9jb21wb25lbnRzL2FkbWluL3dpZGdldHMvU2lkZWJhcldpZGdldC52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./resources/js/components/admin/widgets/SidebarWidget.vue\n");

/***/ }),

/***/ "./resources/js/components/DashboardComponent.vue?vue&type=script&lang=js&":
/*!*********************************************************************************!*\
  !*** ./resources/js/components/DashboardComponent.vue?vue&type=script&lang=js& ***!
  \*********************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_DashboardComponent_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DashboardComponent.vue?vue&type=script&lang=js& */ \"./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/DashboardComponent.vue?vue&type=script&lang=js&\");\n /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_DashboardComponent_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9EYXNoYm9hcmRDb21wb25lbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJiIsIm1hcHBpbmdzIjoiOzs7OztBQUFnTixDQUFDLGlFQUFlLDZNQUFHLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9EYXNoYm9hcmRDb21wb25lbnQudnVlPzI2ODAiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0Rhc2hib2FyZENvbXBvbmVudC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9EYXNoYm9hcmRDb21wb25lbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./resources/js/components/DashboardComponent.vue?vue&type=script&lang=js&\n");

/***/ }),

/***/ "./resources/js/components/admin/alliance/create.vue?vue&type=script&lang=js&":
/*!************************************************************************************!*\
  !*** ./resources/js/components/admin/alliance/create.vue?vue&type=script&lang=js& ***!
  \************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_create_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./create.vue?vue&type=script&lang=js& */ \"./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/alliance/create.vue?vue&type=script&lang=js&\");\n /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_create_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9hbGxpYW5jZS9jcmVhdGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJiIsIm1hcHBpbmdzIjoiOzs7OztBQUFnTixDQUFDLGlFQUFlLGlNQUFHLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9hbGxpYW5jZS9jcmVhdGUudnVlP2Y2ZWUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2NyZWF0ZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9jcmVhdGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./resources/js/components/admin/alliance/create.vue?vue&type=script&lang=js&\n");

/***/ }),

/***/ "./resources/js/components/admin/alliance/edit.vue?vue&type=script&lang=js&":
/*!**********************************************************************************!*\
  !*** ./resources/js/components/admin/alliance/edit.vue?vue&type=script&lang=js& ***!
  \**********************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_edit_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./edit.vue?vue&type=script&lang=js& */ \"./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/alliance/edit.vue?vue&type=script&lang=js&\");\n /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_edit_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9hbGxpYW5jZS9lZGl0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBOE0sQ0FBQyxpRUFBZSwrTEFBRyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vYWxsaWFuY2UvZWRpdC52dWU/ZmJlNSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vZWRpdC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9lZGl0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./resources/js/components/admin/alliance/edit.vue?vue&type=script&lang=js&\n");

/***/ }),

/***/ "./resources/js/components/admin/alliance/index.vue?vue&type=script&lang=js&":
/*!***********************************************************************************!*\
  !*** ./resources/js/components/admin/alliance/index.vue?vue&type=script&lang=js& ***!
  \***********************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./index.vue?vue&type=script&lang=js& */ \"./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/alliance/index.vue?vue&type=script&lang=js&\");\n /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9hbGxpYW5jZS9pbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmIiwibWFwcGluZ3MiOiI7Ozs7O0FBQStNLENBQUMsaUVBQWUsZ01BQUcsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9jb21wb25lbnRzL2FkbWluL2FsbGlhbmNlL2luZGV4LnZ1ZT9mMDljIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9pbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9pbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCIiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./resources/js/components/admin/alliance/index.vue?vue&type=script&lang=js&\n");

/***/ }),

/***/ "./resources/js/components/admin/banner/create.vue?vue&type=script&lang=js&":
/*!**********************************************************************************!*\
  !*** ./resources/js/components/admin/banner/create.vue?vue&type=script&lang=js& ***!
  \**********************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_create_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./create.vue?vue&type=script&lang=js& */ \"./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/banner/create.vue?vue&type=script&lang=js&\");\n /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_create_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9iYW5uZXIvY3JlYXRlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBZ04sQ0FBQyxpRUFBZSxpTUFBRyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vYmFubmVyL2NyZWF0ZS52dWU/MDQ3ZCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vY3JlYXRlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2NyZWF0ZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCIiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./resources/js/components/admin/banner/create.vue?vue&type=script&lang=js&\n");

/***/ }),

/***/ "./resources/js/components/admin/banner/edit.vue?vue&type=script&lang=js&":
/*!********************************************************************************!*\
  !*** ./resources/js/components/admin/banner/edit.vue?vue&type=script&lang=js& ***!
  \********************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_edit_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./edit.vue?vue&type=script&lang=js& */ \"./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/banner/edit.vue?vue&type=script&lang=js&\");\n /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_edit_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9iYW5uZXIvZWRpdC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmIiwibWFwcGluZ3MiOiI7Ozs7O0FBQThNLENBQUMsaUVBQWUsK0xBQUcsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9jb21wb25lbnRzL2FkbWluL2Jhbm5lci9lZGl0LnZ1ZT9jNzY4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9lZGl0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2VkaXQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./resources/js/components/admin/banner/edit.vue?vue&type=script&lang=js&\n");

/***/ }),

/***/ "./resources/js/components/admin/banner/index.vue?vue&type=script&lang=js&":
/*!*********************************************************************************!*\
  !*** ./resources/js/components/admin/banner/index.vue?vue&type=script&lang=js& ***!
  \*********************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./index.vue?vue&type=script&lang=js& */ \"./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/banner/index.vue?vue&type=script&lang=js&\");\n /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9iYW5uZXIvaW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJiIsIm1hcHBpbmdzIjoiOzs7OztBQUErTSxDQUFDLGlFQUFlLGdNQUFHLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9iYW5uZXIvaW5kZXgudnVlPzU5YmIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./resources/js/components/admin/banner/index.vue?vue&type=script&lang=js&\n");

/***/ }),

/***/ "./resources/js/components/admin/conference/create.vue?vue&type=script&lang=js&":
/*!**************************************************************************************!*\
  !*** ./resources/js/components/admin/conference/create.vue?vue&type=script&lang=js& ***!
  \**************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_create_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./create.vue?vue&type=script&lang=js& */ \"./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/conference/create.vue?vue&type=script&lang=js&\");\n /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_create_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9jb25mZXJlbmNlL2NyZWF0ZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmIiwibWFwcGluZ3MiOiI7Ozs7O0FBQWdOLENBQUMsaUVBQWUsaU1BQUcsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9jb21wb25lbnRzL2FkbWluL2NvbmZlcmVuY2UvY3JlYXRlLnZ1ZT80MWE5Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9jcmVhdGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vY3JlYXRlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./resources/js/components/admin/conference/create.vue?vue&type=script&lang=js&\n");

/***/ }),

/***/ "./resources/js/components/admin/conference/edit.vue?vue&type=script&lang=js&":
/*!************************************************************************************!*\
  !*** ./resources/js/components/admin/conference/edit.vue?vue&type=script&lang=js& ***!
  \************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_edit_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./edit.vue?vue&type=script&lang=js& */ \"./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/conference/edit.vue?vue&type=script&lang=js&\");\n /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_edit_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9jb25mZXJlbmNlL2VkaXQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJiIsIm1hcHBpbmdzIjoiOzs7OztBQUE4TSxDQUFDLGlFQUFlLCtMQUFHLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9jb25mZXJlbmNlL2VkaXQudnVlP2QyMWQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2VkaXQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vZWRpdC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCIiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./resources/js/components/admin/conference/edit.vue?vue&type=script&lang=js&\n");

/***/ }),

/***/ "./resources/js/components/admin/conference/gallery.vue?vue&type=script&lang=js&":
/*!***************************************************************************************!*\
  !*** ./resources/js/components/admin/conference/gallery.vue?vue&type=script&lang=js& ***!
  \***************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_gallery_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./gallery.vue?vue&type=script&lang=js& */ \"./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/conference/gallery.vue?vue&type=script&lang=js&\");\n /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_gallery_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9jb25mZXJlbmNlL2dhbGxlcnkudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJiIsIm1hcHBpbmdzIjoiOzs7OztBQUFpTixDQUFDLGlFQUFlLGtNQUFHLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9jb25mZXJlbmNlL2dhbGxlcnkudnVlPzNlZjIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2dhbGxlcnkudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vZ2FsbGVyeS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCIiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./resources/js/components/admin/conference/gallery.vue?vue&type=script&lang=js&\n");

/***/ }),

/***/ "./resources/js/components/admin/conference/index.vue?vue&type=script&lang=js&":
/*!*************************************************************************************!*\
  !*** ./resources/js/components/admin/conference/index.vue?vue&type=script&lang=js& ***!
  \*************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./index.vue?vue&type=script&lang=js& */ \"./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/conference/index.vue?vue&type=script&lang=js&\");\n /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9jb25mZXJlbmNlL2luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBK00sQ0FBQyxpRUFBZSxnTUFBRyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vY29uZmVyZW5jZS9pbmRleC52dWU/OTM4NyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vaW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vaW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./resources/js/components/admin/conference/index.vue?vue&type=script&lang=js&\n");

/***/ }),

/***/ "./resources/js/components/admin/course/create.vue?vue&type=script&lang=js&":
/*!**********************************************************************************!*\
  !*** ./resources/js/components/admin/course/create.vue?vue&type=script&lang=js& ***!
  \**********************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_create_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./create.vue?vue&type=script&lang=js& */ \"./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/course/create.vue?vue&type=script&lang=js&\");\n /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_create_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9jb3Vyc2UvY3JlYXRlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBZ04sQ0FBQyxpRUFBZSxpTUFBRyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vY291cnNlL2NyZWF0ZS52dWU/NTU4NCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vY3JlYXRlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2NyZWF0ZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCIiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./resources/js/components/admin/course/create.vue?vue&type=script&lang=js&\n");

/***/ }),

/***/ "./resources/js/components/admin/course/edit.vue?vue&type=script&lang=js&":
/*!********************************************************************************!*\
  !*** ./resources/js/components/admin/course/edit.vue?vue&type=script&lang=js& ***!
  \********************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_edit_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./edit.vue?vue&type=script&lang=js& */ \"./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/course/edit.vue?vue&type=script&lang=js&\");\n /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_edit_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9jb3Vyc2UvZWRpdC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmIiwibWFwcGluZ3MiOiI7Ozs7O0FBQThNLENBQUMsaUVBQWUsK0xBQUcsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9jb21wb25lbnRzL2FkbWluL2NvdXJzZS9lZGl0LnZ1ZT9mYjA5Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9lZGl0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2VkaXQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./resources/js/components/admin/course/edit.vue?vue&type=script&lang=js&\n");

/***/ }),

/***/ "./resources/js/components/admin/course/index.vue?vue&type=script&lang=js&":
/*!*********************************************************************************!*\
  !*** ./resources/js/components/admin/course/index.vue?vue&type=script&lang=js& ***!
  \*********************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./index.vue?vue&type=script&lang=js& */ \"./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/course/index.vue?vue&type=script&lang=js&\");\n /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9jb3Vyc2UvaW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJiIsIm1hcHBpbmdzIjoiOzs7OztBQUErTSxDQUFDLGlFQUFlLGdNQUFHLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9jb3Vyc2UvaW5kZXgudnVlPzA1ZjEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./resources/js/components/admin/course/index.vue?vue&type=script&lang=js&\n");

/***/ }),

/***/ "./resources/js/components/admin/cycle/create.vue?vue&type=script&lang=js&":
/*!*********************************************************************************!*\
  !*** ./resources/js/components/admin/cycle/create.vue?vue&type=script&lang=js& ***!
  \*********************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_create_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./create.vue?vue&type=script&lang=js& */ \"./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/cycle/create.vue?vue&type=script&lang=js&\");\n /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_create_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9jeWNsZS9jcmVhdGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJiIsIm1hcHBpbmdzIjoiOzs7OztBQUFnTixDQUFDLGlFQUFlLGlNQUFHLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9jeWNsZS9jcmVhdGUudnVlPzM3MGQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2NyZWF0ZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9jcmVhdGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./resources/js/components/admin/cycle/create.vue?vue&type=script&lang=js&\n");

/***/ }),

/***/ "./resources/js/components/admin/cycle/edit.vue?vue&type=script&lang=js&":
/*!*******************************************************************************!*\
  !*** ./resources/js/components/admin/cycle/edit.vue?vue&type=script&lang=js& ***!
  \*******************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_edit_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./edit.vue?vue&type=script&lang=js& */ \"./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/cycle/edit.vue?vue&type=script&lang=js&\");\n /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_edit_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9jeWNsZS9lZGl0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBOE0sQ0FBQyxpRUFBZSwrTEFBRyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vY3ljbGUvZWRpdC52dWU/Nzg0ZSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vZWRpdC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9lZGl0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./resources/js/components/admin/cycle/edit.vue?vue&type=script&lang=js&\n");

/***/ }),

/***/ "./resources/js/components/admin/cycle/index.vue?vue&type=script&lang=js&":
/*!********************************************************************************!*\
  !*** ./resources/js/components/admin/cycle/index.vue?vue&type=script&lang=js& ***!
  \********************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./index.vue?vue&type=script&lang=js& */ \"./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/cycle/index.vue?vue&type=script&lang=js&\");\n /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9jeWNsZS9pbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmIiwibWFwcGluZ3MiOiI7Ozs7O0FBQStNLENBQUMsaUVBQWUsZ01BQUcsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9jb21wb25lbnRzL2FkbWluL2N5Y2xlL2luZGV4LnZ1ZT9mMzcwIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9pbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9pbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCIiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./resources/js/components/admin/cycle/index.vue?vue&type=script&lang=js&\n");

/***/ }),

/***/ "./resources/js/components/admin/library/create.vue?vue&type=script&lang=js&":
/*!***********************************************************************************!*\
  !*** ./resources/js/components/admin/library/create.vue?vue&type=script&lang=js& ***!
  \***********************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_create_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./create.vue?vue&type=script&lang=js& */ \"./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/library/create.vue?vue&type=script&lang=js&\");\n /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_create_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9saWJyYXJ5L2NyZWF0ZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmIiwibWFwcGluZ3MiOiI7Ozs7O0FBQWdOLENBQUMsaUVBQWUsaU1BQUcsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9jb21wb25lbnRzL2FkbWluL2xpYnJhcnkvY3JlYXRlLnZ1ZT9mMTEzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9jcmVhdGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vY3JlYXRlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./resources/js/components/admin/library/create.vue?vue&type=script&lang=js&\n");

/***/ }),

/***/ "./resources/js/components/admin/library/edit.vue?vue&type=script&lang=js&":
/*!*********************************************************************************!*\
  !*** ./resources/js/components/admin/library/edit.vue?vue&type=script&lang=js& ***!
  \*********************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_edit_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./edit.vue?vue&type=script&lang=js& */ \"./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/library/edit.vue?vue&type=script&lang=js&\");\n /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_edit_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9saWJyYXJ5L2VkaXQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJiIsIm1hcHBpbmdzIjoiOzs7OztBQUE4TSxDQUFDLGlFQUFlLCtMQUFHLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9saWJyYXJ5L2VkaXQudnVlPzljNDkiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2VkaXQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vZWRpdC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCIiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./resources/js/components/admin/library/edit.vue?vue&type=script&lang=js&\n");

/***/ }),

/***/ "./resources/js/components/admin/library/index.vue?vue&type=script&lang=js&":
/*!**********************************************************************************!*\
  !*** ./resources/js/components/admin/library/index.vue?vue&type=script&lang=js& ***!
  \**********************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./index.vue?vue&type=script&lang=js& */ \"./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/library/index.vue?vue&type=script&lang=js&\");\n /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9saWJyYXJ5L2luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBK00sQ0FBQyxpRUFBZSxnTUFBRyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vbGlicmFyeS9pbmRleC52dWU/NzkxNyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vaW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vaW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./resources/js/components/admin/library/index.vue?vue&type=script&lang=js&\n");

/***/ }),

/***/ "./resources/js/components/admin/page/edit.vue?vue&type=script&lang=js&":
/*!******************************************************************************!*\
  !*** ./resources/js/components/admin/page/edit.vue?vue&type=script&lang=js& ***!
  \******************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_edit_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./edit.vue?vue&type=script&lang=js& */ \"./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/page/edit.vue?vue&type=script&lang=js&\");\n /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_edit_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9wYWdlL2VkaXQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJiIsIm1hcHBpbmdzIjoiOzs7OztBQUE4TSxDQUFDLGlFQUFlLCtMQUFHLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9wYWdlL2VkaXQudnVlP2RkZDciXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2VkaXQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vZWRpdC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCIiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./resources/js/components/admin/page/edit.vue?vue&type=script&lang=js&\n");

/***/ }),

/***/ "./resources/js/components/admin/page/index.vue?vue&type=script&lang=js&":
/*!*******************************************************************************!*\
  !*** ./resources/js/components/admin/page/index.vue?vue&type=script&lang=js& ***!
  \*******************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./index.vue?vue&type=script&lang=js& */ \"./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/page/index.vue?vue&type=script&lang=js&\");\n /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi9wYWdlL2luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBK00sQ0FBQyxpRUFBZSxnTUFBRyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vcGFnZS9pbmRleC52dWU/NWIzYiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vaW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vaW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./resources/js/components/admin/page/index.vue?vue&type=script&lang=js&\n");

/***/ }),

/***/ "./resources/js/components/admin/video/create.vue?vue&type=script&lang=js&":
/*!*********************************************************************************!*\
  !*** ./resources/js/components/admin/video/create.vue?vue&type=script&lang=js& ***!
  \*********************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_create_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./create.vue?vue&type=script&lang=js& */ \"./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/video/create.vue?vue&type=script&lang=js&\");\n /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_create_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi92aWRlby9jcmVhdGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJiIsIm1hcHBpbmdzIjoiOzs7OztBQUFnTixDQUFDLGlFQUFlLGlNQUFHLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi92aWRlby9jcmVhdGUudnVlPzM5YjUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2NyZWF0ZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9jcmVhdGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./resources/js/components/admin/video/create.vue?vue&type=script&lang=js&\n");

/***/ }),

/***/ "./resources/js/components/admin/video/edit.vue?vue&type=script&lang=js&":
/*!*******************************************************************************!*\
  !*** ./resources/js/components/admin/video/edit.vue?vue&type=script&lang=js& ***!
  \*******************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_edit_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./edit.vue?vue&type=script&lang=js& */ \"./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/video/edit.vue?vue&type=script&lang=js&\");\n /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_edit_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi92aWRlby9lZGl0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBOE0sQ0FBQyxpRUFBZSwrTEFBRyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vdmlkZW8vZWRpdC52dWU/Mjk5MyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vZWRpdC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9lZGl0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./resources/js/components/admin/video/edit.vue?vue&type=script&lang=js&\n");

/***/ }),

/***/ "./resources/js/components/admin/video/index.vue?vue&type=script&lang=js&":
/*!********************************************************************************!*\
  !*** ./resources/js/components/admin/video/index.vue?vue&type=script&lang=js& ***!
  \********************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./index.vue?vue&type=script&lang=js& */ \"./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/video/index.vue?vue&type=script&lang=js&\");\n /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi92aWRlby9pbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmIiwibWFwcGluZ3MiOiI7Ozs7O0FBQStNLENBQUMsaUVBQWUsZ01BQUcsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9jb21wb25lbnRzL2FkbWluL3ZpZGVvL2luZGV4LnZ1ZT8wMzZlIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9pbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9pbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCIiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./resources/js/components/admin/video/index.vue?vue&type=script&lang=js&\n");

/***/ }),

/***/ "./resources/js/components/admin/widgets/BoxColorWidget.vue?vue&type=script&lang=js&":
/*!*******************************************************************************************!*\
  !*** ./resources/js/components/admin/widgets/BoxColorWidget.vue?vue&type=script&lang=js& ***!
  \*******************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_BoxColorWidget_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BoxColorWidget.vue?vue&type=script&lang=js& */ \"./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/widgets/BoxColorWidget.vue?vue&type=script&lang=js&\");\n /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_BoxColorWidget_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi93aWRnZXRzL0JveENvbG9yV2lkZ2V0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBd04sQ0FBQyxpRUFBZSx5TUFBRyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vd2lkZ2V0cy9Cb3hDb2xvcldpZGdldC52dWU/NGQ0ZiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vQm94Q29sb3JXaWRnZXQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vQm94Q29sb3JXaWRnZXQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./resources/js/components/admin/widgets/BoxColorWidget.vue?vue&type=script&lang=js&\n");

/***/ }),

/***/ "./resources/js/components/admin/widgets/ChartWidget.vue?vue&type=script&lang=js&":
/*!****************************************************************************************!*\
  !*** ./resources/js/components/admin/widgets/ChartWidget.vue?vue&type=script&lang=js& ***!
  \****************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_ChartWidget_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ChartWidget.vue?vue&type=script&lang=js& */ \"./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/widgets/ChartWidget.vue?vue&type=script&lang=js&\");\n /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_ChartWidget_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi93aWRnZXRzL0NoYXJ0V2lkZ2V0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBcU4sQ0FBQyxpRUFBZSxzTUFBRyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vd2lkZ2V0cy9DaGFydFdpZGdldC52dWU/MmQxMyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vQ2hhcnRXaWRnZXQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vQ2hhcnRXaWRnZXQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./resources/js/components/admin/widgets/ChartWidget.vue?vue&type=script&lang=js&\n");

/***/ }),

/***/ "./resources/js/components/admin/widgets/FooterWidget.vue?vue&type=script&lang=js&":
/*!*****************************************************************************************!*\
  !*** ./resources/js/components/admin/widgets/FooterWidget.vue?vue&type=script&lang=js& ***!
  \*****************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_FooterWidget_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FooterWidget.vue?vue&type=script&lang=js& */ \"./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/widgets/FooterWidget.vue?vue&type=script&lang=js&\");\n /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_FooterWidget_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi93aWRnZXRzL0Zvb3RlcldpZGdldC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmIiwibWFwcGluZ3MiOiI7Ozs7O0FBQXNOLENBQUMsaUVBQWUsdU1BQUcsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9jb21wb25lbnRzL2FkbWluL3dpZGdldHMvRm9vdGVyV2lkZ2V0LnZ1ZT9kNjRjIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9Gb290ZXJXaWRnZXQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vRm9vdGVyV2lkZ2V0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./resources/js/components/admin/widgets/FooterWidget.vue?vue&type=script&lang=js&\n");

/***/ }),

/***/ "./resources/js/components/admin/widgets/HeaderWidget.vue?vue&type=script&lang=js&":
/*!*****************************************************************************************!*\
  !*** ./resources/js/components/admin/widgets/HeaderWidget.vue?vue&type=script&lang=js& ***!
  \*****************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_HeaderWidget_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./HeaderWidget.vue?vue&type=script&lang=js& */ \"./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/widgets/HeaderWidget.vue?vue&type=script&lang=js&\");\n /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_HeaderWidget_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi93aWRnZXRzL0hlYWRlcldpZGdldC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmIiwibWFwcGluZ3MiOiI7Ozs7O0FBQXNOLENBQUMsaUVBQWUsdU1BQUcsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9jb21wb25lbnRzL2FkbWluL3dpZGdldHMvSGVhZGVyV2lkZ2V0LnZ1ZT9jMjM4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9IZWFkZXJXaWRnZXQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vSGVhZGVyV2lkZ2V0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./resources/js/components/admin/widgets/HeaderWidget.vue?vue&type=script&lang=js&\n");

/***/ }),

/***/ "./resources/js/components/admin/widgets/IframeGroupWidget.vue?vue&type=script&lang=js&":
/*!**********************************************************************************************!*\
  !*** ./resources/js/components/admin/widgets/IframeGroupWidget.vue?vue&type=script&lang=js& ***!
  \**********************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_IframeGroupWidget_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./IframeGroupWidget.vue?vue&type=script&lang=js& */ \"./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/widgets/IframeGroupWidget.vue?vue&type=script&lang=js&\");\n /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_IframeGroupWidget_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi93aWRnZXRzL0lmcmFtZUdyb3VwV2lkZ2V0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBMk4sQ0FBQyxpRUFBZSw0TUFBRyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvYWRtaW4vd2lkZ2V0cy9JZnJhbWVHcm91cFdpZGdldC52dWU/M2FkMSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vSWZyYW1lR3JvdXBXaWRnZXQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vSWZyYW1lR3JvdXBXaWRnZXQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./resources/js/components/admin/widgets/IframeGroupWidget.vue?vue&type=script&lang=js&\n");

/***/ }),

/***/ "./resources/js/components/admin/widgets/NavbarWidget.vue?vue&type=script&lang=js&":
/*!*****************************************************************************************!*\
  !*** ./resources/js/components/admin/widgets/NavbarWidget.vue?vue&type=script&lang=js& ***!
  \*****************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_NavbarWidget_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NavbarWidget.vue?vue&type=script&lang=js& */ \"./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/widgets/NavbarWidget.vue?vue&type=script&lang=js&\");\n /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_NavbarWidget_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi93aWRnZXRzL05hdmJhcldpZGdldC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmIiwibWFwcGluZ3MiOiI7Ozs7O0FBQXNOLENBQUMsaUVBQWUsdU1BQUcsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9jb21wb25lbnRzL2FkbWluL3dpZGdldHMvTmF2YmFyV2lkZ2V0LnZ1ZT9iMTY4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9OYXZiYXJXaWRnZXQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vTmF2YmFyV2lkZ2V0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./resources/js/components/admin/widgets/NavbarWidget.vue?vue&type=script&lang=js&\n");

/***/ }),

/***/ "./resources/js/components/admin/widgets/SidebarWidget.vue?vue&type=script&lang=js&":
/*!******************************************************************************************!*\
  !*** ./resources/js/components/admin/widgets/SidebarWidget.vue?vue&type=script&lang=js& ***!
  \******************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_SidebarWidget_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SidebarWidget.vue?vue&type=script&lang=js& */ \"./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/widgets/SidebarWidget.vue?vue&type=script&lang=js&\");\n /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_SidebarWidget_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi93aWRnZXRzL1NpZGViYXJXaWRnZXQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJiIsIm1hcHBpbmdzIjoiOzs7OztBQUF1TixDQUFDLGlFQUFlLHdNQUFHLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZG1pbi93aWRnZXRzL1NpZGViYXJXaWRnZXQudnVlPzkzYzAiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL1NpZGViYXJXaWRnZXQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vU2lkZWJhcldpZGdldC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCIiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./resources/js/components/admin/widgets/SidebarWidget.vue?vue&type=script&lang=js&\n");

/***/ }),

/***/ "./resources/js/components/DashboardComponent.vue?vue&type=template&id=01ab55f4&":
/*!***************************************************************************************!*\
  !*** ./resources/js/components/DashboardComponent.vue?vue&type=template&id=01ab55f4& ***!
  \***************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   render: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_DashboardComponent_vue_vue_type_template_id_01ab55f4___WEBPACK_IMPORTED_MODULE_0__.render),
/* harmony export */   staticRenderFns: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_DashboardComponent_vue_vue_type_template_id_01ab55f4___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns)
/* harmony export */ });
/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_DashboardComponent_vue_vue_type_template_id_01ab55f4___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DashboardComponent.vue?vue&type=template&id=01ab55f4& */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/DashboardComponent.vue?vue&type=template&id=01ab55f4&");


/***/ }),

/***/ "./resources/js/components/admin/alliance/create.vue?vue&type=template&id=632f584e&":
/*!******************************************************************************************!*\
  !*** ./resources/js/components/admin/alliance/create.vue?vue&type=template&id=632f584e& ***!
  \******************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   render: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_create_vue_vue_type_template_id_632f584e___WEBPACK_IMPORTED_MODULE_0__.render),
/* harmony export */   staticRenderFns: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_create_vue_vue_type_template_id_632f584e___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns)
/* harmony export */ });
/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_create_vue_vue_type_template_id_632f584e___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./create.vue?vue&type=template&id=632f584e& */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/alliance/create.vue?vue&type=template&id=632f584e&");


/***/ }),

/***/ "./resources/js/components/admin/alliance/edit.vue?vue&type=template&id=c7f491b2&":
/*!****************************************************************************************!*\
  !*** ./resources/js/components/admin/alliance/edit.vue?vue&type=template&id=c7f491b2& ***!
  \****************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   render: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_edit_vue_vue_type_template_id_c7f491b2___WEBPACK_IMPORTED_MODULE_0__.render),
/* harmony export */   staticRenderFns: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_edit_vue_vue_type_template_id_c7f491b2___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns)
/* harmony export */ });
/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_edit_vue_vue_type_template_id_c7f491b2___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./edit.vue?vue&type=template&id=c7f491b2& */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/alliance/edit.vue?vue&type=template&id=c7f491b2&");


/***/ }),

/***/ "./resources/js/components/admin/alliance/index.vue?vue&type=template&id=2668e785&":
/*!*****************************************************************************************!*\
  !*** ./resources/js/components/admin/alliance/index.vue?vue&type=template&id=2668e785& ***!
  \*****************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   render: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_template_id_2668e785___WEBPACK_IMPORTED_MODULE_0__.render),
/* harmony export */   staticRenderFns: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_template_id_2668e785___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns)
/* harmony export */ });
/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_template_id_2668e785___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./index.vue?vue&type=template&id=2668e785& */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/alliance/index.vue?vue&type=template&id=2668e785&");


/***/ }),

/***/ "./resources/js/components/admin/banner/create.vue?vue&type=template&id=4b6a9904&":
/*!****************************************************************************************!*\
  !*** ./resources/js/components/admin/banner/create.vue?vue&type=template&id=4b6a9904& ***!
  \****************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   render: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_create_vue_vue_type_template_id_4b6a9904___WEBPACK_IMPORTED_MODULE_0__.render),
/* harmony export */   staticRenderFns: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_create_vue_vue_type_template_id_4b6a9904___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns)
/* harmony export */ });
/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_create_vue_vue_type_template_id_4b6a9904___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./create.vue?vue&type=template&id=4b6a9904& */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/banner/create.vue?vue&type=template&id=4b6a9904&");


/***/ }),

/***/ "./resources/js/components/admin/banner/edit.vue?vue&type=template&id=3ec569dc&":
/*!**************************************************************************************!*\
  !*** ./resources/js/components/admin/banner/edit.vue?vue&type=template&id=3ec569dc& ***!
  \**************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   render: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_edit_vue_vue_type_template_id_3ec569dc___WEBPACK_IMPORTED_MODULE_0__.render),
/* harmony export */   staticRenderFns: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_edit_vue_vue_type_template_id_3ec569dc___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns)
/* harmony export */ });
/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_edit_vue_vue_type_template_id_3ec569dc___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./edit.vue?vue&type=template&id=3ec569dc& */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/banner/edit.vue?vue&type=template&id=3ec569dc&");


/***/ }),

/***/ "./resources/js/components/admin/banner/index.vue?vue&type=template&id=74c3d0fa&":
/*!***************************************************************************************!*\
  !*** ./resources/js/components/admin/banner/index.vue?vue&type=template&id=74c3d0fa& ***!
  \***************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   render: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_template_id_74c3d0fa___WEBPACK_IMPORTED_MODULE_0__.render),
/* harmony export */   staticRenderFns: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_template_id_74c3d0fa___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns)
/* harmony export */ });
/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_template_id_74c3d0fa___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./index.vue?vue&type=template&id=74c3d0fa& */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/banner/index.vue?vue&type=template&id=74c3d0fa&");


/***/ }),

/***/ "./resources/js/components/admin/conference/create.vue?vue&type=template&id=67829e94&":
/*!********************************************************************************************!*\
  !*** ./resources/js/components/admin/conference/create.vue?vue&type=template&id=67829e94& ***!
  \********************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   render: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_create_vue_vue_type_template_id_67829e94___WEBPACK_IMPORTED_MODULE_0__.render),
/* harmony export */   staticRenderFns: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_create_vue_vue_type_template_id_67829e94___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns)
/* harmony export */ });
/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_create_vue_vue_type_template_id_67829e94___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./create.vue?vue&type=template&id=67829e94& */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/conference/create.vue?vue&type=template&id=67829e94&");


/***/ }),

/***/ "./resources/js/components/admin/conference/edit.vue?vue&type=template&id=a9cd16bc&":
/*!******************************************************************************************!*\
  !*** ./resources/js/components/admin/conference/edit.vue?vue&type=template&id=a9cd16bc& ***!
  \******************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   render: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_edit_vue_vue_type_template_id_a9cd16bc___WEBPACK_IMPORTED_MODULE_0__.render),
/* harmony export */   staticRenderFns: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_edit_vue_vue_type_template_id_a9cd16bc___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns)
/* harmony export */ });
/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_edit_vue_vue_type_template_id_a9cd16bc___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./edit.vue?vue&type=template&id=a9cd16bc& */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/conference/edit.vue?vue&type=template&id=a9cd16bc&");


/***/ }),

/***/ "./resources/js/components/admin/conference/gallery.vue?vue&type=template&id=28c127ea&":
/*!*********************************************************************************************!*\
  !*** ./resources/js/components/admin/conference/gallery.vue?vue&type=template&id=28c127ea& ***!
  \*********************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   render: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_gallery_vue_vue_type_template_id_28c127ea___WEBPACK_IMPORTED_MODULE_0__.render),
/* harmony export */   staticRenderFns: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_gallery_vue_vue_type_template_id_28c127ea___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns)
/* harmony export */ });
/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_gallery_vue_vue_type_template_id_28c127ea___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./gallery.vue?vue&type=template&id=28c127ea& */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/conference/gallery.vue?vue&type=template&id=28c127ea&");


/***/ }),

/***/ "./resources/js/components/admin/conference/index.vue?vue&type=template&id=0c664d2c&":
/*!*******************************************************************************************!*\
  !*** ./resources/js/components/admin/conference/index.vue?vue&type=template&id=0c664d2c& ***!
  \*******************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   render: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_template_id_0c664d2c___WEBPACK_IMPORTED_MODULE_0__.render),
/* harmony export */   staticRenderFns: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_template_id_0c664d2c___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns)
/* harmony export */ });
/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_template_id_0c664d2c___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./index.vue?vue&type=template&id=0c664d2c& */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/conference/index.vue?vue&type=template&id=0c664d2c&");


/***/ }),

/***/ "./resources/js/components/admin/course/create.vue?vue&type=template&id=d4aac696&":
/*!****************************************************************************************!*\
  !*** ./resources/js/components/admin/course/create.vue?vue&type=template&id=d4aac696& ***!
  \****************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   render: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_create_vue_vue_type_template_id_d4aac696___WEBPACK_IMPORTED_MODULE_0__.render),
/* harmony export */   staticRenderFns: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_create_vue_vue_type_template_id_d4aac696___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns)
/* harmony export */ });
/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_create_vue_vue_type_template_id_d4aac696___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./create.vue?vue&type=template&id=d4aac696& */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/course/create.vue?vue&type=template&id=d4aac696&");


/***/ }),

/***/ "./resources/js/components/admin/course/edit.vue?vue&type=template&id=1486f1fa&":
/*!**************************************************************************************!*\
  !*** ./resources/js/components/admin/course/edit.vue?vue&type=template&id=1486f1fa& ***!
  \**************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   render: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_edit_vue_vue_type_template_id_1486f1fa___WEBPACK_IMPORTED_MODULE_0__.render),
/* harmony export */   staticRenderFns: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_edit_vue_vue_type_template_id_1486f1fa___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns)
/* harmony export */ });
/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_edit_vue_vue_type_template_id_1486f1fa___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./edit.vue?vue&type=template&id=1486f1fa& */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/course/edit.vue?vue&type=template&id=1486f1fa&");


/***/ }),

/***/ "./resources/js/components/admin/course/index.vue?vue&type=template&id=038c1329&":
/*!***************************************************************************************!*\
  !*** ./resources/js/components/admin/course/index.vue?vue&type=template&id=038c1329& ***!
  \***************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   render: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_template_id_038c1329___WEBPACK_IMPORTED_MODULE_0__.render),
/* harmony export */   staticRenderFns: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_template_id_038c1329___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns)
/* harmony export */ });
/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_template_id_038c1329___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./index.vue?vue&type=template&id=038c1329& */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/course/index.vue?vue&type=template&id=038c1329&");


/***/ }),

/***/ "./resources/js/components/admin/cycle/create.vue?vue&type=template&id=3c7c97e0&":
/*!***************************************************************************************!*\
  !*** ./resources/js/components/admin/cycle/create.vue?vue&type=template&id=3c7c97e0& ***!
  \***************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   render: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_create_vue_vue_type_template_id_3c7c97e0___WEBPACK_IMPORTED_MODULE_0__.render),
/* harmony export */   staticRenderFns: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_create_vue_vue_type_template_id_3c7c97e0___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns)
/* harmony export */ });
/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_create_vue_vue_type_template_id_3c7c97e0___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./create.vue?vue&type=template&id=3c7c97e0& */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/cycle/create.vue?vue&type=template&id=3c7c97e0&");


/***/ }),

/***/ "./resources/js/components/admin/cycle/edit.vue?vue&type=template&id=5bd7b91e&":
/*!*************************************************************************************!*\
  !*** ./resources/js/components/admin/cycle/edit.vue?vue&type=template&id=5bd7b91e& ***!
  \*************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   render: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_edit_vue_vue_type_template_id_5bd7b91e___WEBPACK_IMPORTED_MODULE_0__.render),
/* harmony export */   staticRenderFns: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_edit_vue_vue_type_template_id_5bd7b91e___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns)
/* harmony export */ });
/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_edit_vue_vue_type_template_id_5bd7b91e___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./edit.vue?vue&type=template&id=5bd7b91e& */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/cycle/edit.vue?vue&type=template&id=5bd7b91e&");


/***/ }),

/***/ "./resources/js/components/admin/cycle/index.vue?vue&type=template&id=60d7246e&":
/*!**************************************************************************************!*\
  !*** ./resources/js/components/admin/cycle/index.vue?vue&type=template&id=60d7246e& ***!
  \**************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   render: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_template_id_60d7246e___WEBPACK_IMPORTED_MODULE_0__.render),
/* harmony export */   staticRenderFns: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_template_id_60d7246e___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns)
/* harmony export */ });
/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_template_id_60d7246e___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./index.vue?vue&type=template&id=60d7246e& */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/cycle/index.vue?vue&type=template&id=60d7246e&");


/***/ }),

/***/ "./resources/js/components/admin/library/create.vue?vue&type=template&id=b9ed7f4a&":
/*!*****************************************************************************************!*\
  !*** ./resources/js/components/admin/library/create.vue?vue&type=template&id=b9ed7f4a& ***!
  \*****************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   render: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_create_vue_vue_type_template_id_b9ed7f4a___WEBPACK_IMPORTED_MODULE_0__.render),
/* harmony export */   staticRenderFns: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_create_vue_vue_type_template_id_b9ed7f4a___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns)
/* harmony export */ });
/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_create_vue_vue_type_template_id_b9ed7f4a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./create.vue?vue&type=template&id=b9ed7f4a& */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/library/create.vue?vue&type=template&id=b9ed7f4a&");


/***/ }),

/***/ "./resources/js/components/admin/library/edit.vue?vue&type=template&id=7d9bdc29&":
/*!***************************************************************************************!*\
  !*** ./resources/js/components/admin/library/edit.vue?vue&type=template&id=7d9bdc29& ***!
  \***************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   render: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_edit_vue_vue_type_template_id_7d9bdc29___WEBPACK_IMPORTED_MODULE_0__.render),
/* harmony export */   staticRenderFns: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_edit_vue_vue_type_template_id_7d9bdc29___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns)
/* harmony export */ });
/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_edit_vue_vue_type_template_id_7d9bdc29___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./edit.vue?vue&type=template&id=7d9bdc29& */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/library/edit.vue?vue&type=template&id=7d9bdc29&");


/***/ }),

/***/ "./resources/js/components/admin/library/index.vue?vue&type=template&id=779762c3&":
/*!****************************************************************************************!*\
  !*** ./resources/js/components/admin/library/index.vue?vue&type=template&id=779762c3& ***!
  \****************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   render: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_template_id_779762c3___WEBPACK_IMPORTED_MODULE_0__.render),
/* harmony export */   staticRenderFns: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_template_id_779762c3___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns)
/* harmony export */ });
/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_template_id_779762c3___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./index.vue?vue&type=template&id=779762c3& */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/library/index.vue?vue&type=template&id=779762c3&");


/***/ }),

/***/ "./resources/js/components/admin/page/edit.vue?vue&type=template&id=31209e4f&":
/*!************************************************************************************!*\
  !*** ./resources/js/components/admin/page/edit.vue?vue&type=template&id=31209e4f& ***!
  \************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   render: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_edit_vue_vue_type_template_id_31209e4f___WEBPACK_IMPORTED_MODULE_0__.render),
/* harmony export */   staticRenderFns: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_edit_vue_vue_type_template_id_31209e4f___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns)
/* harmony export */ });
/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_edit_vue_vue_type_template_id_31209e4f___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./edit.vue?vue&type=template&id=31209e4f& */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/page/edit.vue?vue&type=template&id=31209e4f&");


/***/ }),

/***/ "./resources/js/components/admin/page/index.vue?vue&type=template&id=34aae55d&":
/*!*************************************************************************************!*\
  !*** ./resources/js/components/admin/page/index.vue?vue&type=template&id=34aae55d& ***!
  \*************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   render: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_template_id_34aae55d___WEBPACK_IMPORTED_MODULE_0__.render),
/* harmony export */   staticRenderFns: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_template_id_34aae55d___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns)
/* harmony export */ });
/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_template_id_34aae55d___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./index.vue?vue&type=template&id=34aae55d& */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/page/index.vue?vue&type=template&id=34aae55d&");


/***/ }),

/***/ "./resources/js/components/admin/video/create.vue?vue&type=template&id=a9d0cd4a&":
/*!***************************************************************************************!*\
  !*** ./resources/js/components/admin/video/create.vue?vue&type=template&id=a9d0cd4a& ***!
  \***************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   render: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_create_vue_vue_type_template_id_a9d0cd4a___WEBPACK_IMPORTED_MODULE_0__.render),
/* harmony export */   staticRenderFns: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_create_vue_vue_type_template_id_a9d0cd4a___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns)
/* harmony export */ });
/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_create_vue_vue_type_template_id_a9d0cd4a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./create.vue?vue&type=template&id=a9d0cd4a& */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/video/create.vue?vue&type=template&id=a9d0cd4a&");


/***/ }),

/***/ "./resources/js/components/admin/video/edit.vue?vue&type=template&id=912715ae&":
/*!*************************************************************************************!*\
  !*** ./resources/js/components/admin/video/edit.vue?vue&type=template&id=912715ae& ***!
  \*************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   render: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_edit_vue_vue_type_template_id_912715ae___WEBPACK_IMPORTED_MODULE_0__.render),
/* harmony export */   staticRenderFns: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_edit_vue_vue_type_template_id_912715ae___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns)
/* harmony export */ });
/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_edit_vue_vue_type_template_id_912715ae___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./edit.vue?vue&type=template&id=912715ae& */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/video/edit.vue?vue&type=template&id=912715ae&");


/***/ }),

/***/ "./resources/js/components/admin/video/index.vue?vue&type=template&id=77d9e9c3&":
/*!**************************************************************************************!*\
  !*** ./resources/js/components/admin/video/index.vue?vue&type=template&id=77d9e9c3& ***!
  \**************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   render: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_template_id_77d9e9c3___WEBPACK_IMPORTED_MODULE_0__.render),
/* harmony export */   staticRenderFns: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_template_id_77d9e9c3___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns)
/* harmony export */ });
/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_template_id_77d9e9c3___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./index.vue?vue&type=template&id=77d9e9c3& */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/video/index.vue?vue&type=template&id=77d9e9c3&");


/***/ }),

/***/ "./resources/js/components/admin/widgets/BoxColorWidget.vue?vue&type=template&id=34660a72&":
/*!*************************************************************************************************!*\
  !*** ./resources/js/components/admin/widgets/BoxColorWidget.vue?vue&type=template&id=34660a72& ***!
  \*************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   render: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_BoxColorWidget_vue_vue_type_template_id_34660a72___WEBPACK_IMPORTED_MODULE_0__.render),
/* harmony export */   staticRenderFns: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_BoxColorWidget_vue_vue_type_template_id_34660a72___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns)
/* harmony export */ });
/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_BoxColorWidget_vue_vue_type_template_id_34660a72___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BoxColorWidget.vue?vue&type=template&id=34660a72& */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/widgets/BoxColorWidget.vue?vue&type=template&id=34660a72&");


/***/ }),

/***/ "./resources/js/components/admin/widgets/ChartWidget.vue?vue&type=template&id=3bb034c7&":
/*!**********************************************************************************************!*\
  !*** ./resources/js/components/admin/widgets/ChartWidget.vue?vue&type=template&id=3bb034c7& ***!
  \**********************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   render: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_ChartWidget_vue_vue_type_template_id_3bb034c7___WEBPACK_IMPORTED_MODULE_0__.render),
/* harmony export */   staticRenderFns: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_ChartWidget_vue_vue_type_template_id_3bb034c7___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns)
/* harmony export */ });
/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_ChartWidget_vue_vue_type_template_id_3bb034c7___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ChartWidget.vue?vue&type=template&id=3bb034c7& */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/widgets/ChartWidget.vue?vue&type=template&id=3bb034c7&");


/***/ }),

/***/ "./resources/js/components/admin/widgets/FooterWidget.vue?vue&type=template&id=bf415dec&":
/*!***********************************************************************************************!*\
  !*** ./resources/js/components/admin/widgets/FooterWidget.vue?vue&type=template&id=bf415dec& ***!
  \***********************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   render: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_FooterWidget_vue_vue_type_template_id_bf415dec___WEBPACK_IMPORTED_MODULE_0__.render),
/* harmony export */   staticRenderFns: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_FooterWidget_vue_vue_type_template_id_bf415dec___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns)
/* harmony export */ });
/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_FooterWidget_vue_vue_type_template_id_bf415dec___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FooterWidget.vue?vue&type=template&id=bf415dec& */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/widgets/FooterWidget.vue?vue&type=template&id=bf415dec&");


/***/ }),

/***/ "./resources/js/components/admin/widgets/HeaderWidget.vue?vue&type=template&id=c2c11108&":
/*!***********************************************************************************************!*\
  !*** ./resources/js/components/admin/widgets/HeaderWidget.vue?vue&type=template&id=c2c11108& ***!
  \***********************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   render: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_HeaderWidget_vue_vue_type_template_id_c2c11108___WEBPACK_IMPORTED_MODULE_0__.render),
/* harmony export */   staticRenderFns: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_HeaderWidget_vue_vue_type_template_id_c2c11108___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns)
/* harmony export */ });
/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_HeaderWidget_vue_vue_type_template_id_c2c11108___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./HeaderWidget.vue?vue&type=template&id=c2c11108& */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/widgets/HeaderWidget.vue?vue&type=template&id=c2c11108&");


/***/ }),

/***/ "./resources/js/components/admin/widgets/IframeGroupWidget.vue?vue&type=template&id=aeeb5db8&":
/*!****************************************************************************************************!*\
  !*** ./resources/js/components/admin/widgets/IframeGroupWidget.vue?vue&type=template&id=aeeb5db8& ***!
  \****************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   render: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_IframeGroupWidget_vue_vue_type_template_id_aeeb5db8___WEBPACK_IMPORTED_MODULE_0__.render),
/* harmony export */   staticRenderFns: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_IframeGroupWidget_vue_vue_type_template_id_aeeb5db8___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns)
/* harmony export */ });
/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_IframeGroupWidget_vue_vue_type_template_id_aeeb5db8___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./IframeGroupWidget.vue?vue&type=template&id=aeeb5db8& */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/widgets/IframeGroupWidget.vue?vue&type=template&id=aeeb5db8&");


/***/ }),

/***/ "./resources/js/components/admin/widgets/NavbarWidget.vue?vue&type=template&id=0c01e93f&":
/*!***********************************************************************************************!*\
  !*** ./resources/js/components/admin/widgets/NavbarWidget.vue?vue&type=template&id=0c01e93f& ***!
  \***********************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   render: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_NavbarWidget_vue_vue_type_template_id_0c01e93f___WEBPACK_IMPORTED_MODULE_0__.render),
/* harmony export */   staticRenderFns: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_NavbarWidget_vue_vue_type_template_id_0c01e93f___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns)
/* harmony export */ });
/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_NavbarWidget_vue_vue_type_template_id_0c01e93f___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NavbarWidget.vue?vue&type=template&id=0c01e93f& */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/widgets/NavbarWidget.vue?vue&type=template&id=0c01e93f&");


/***/ }),

/***/ "./resources/js/components/admin/widgets/SidebarWidget.vue?vue&type=template&id=5c937b85&":
/*!************************************************************************************************!*\
  !*** ./resources/js/components/admin/widgets/SidebarWidget.vue?vue&type=template&id=5c937b85& ***!
  \************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   render: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_SidebarWidget_vue_vue_type_template_id_5c937b85___WEBPACK_IMPORTED_MODULE_0__.render),
/* harmony export */   staticRenderFns: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_SidebarWidget_vue_vue_type_template_id_5c937b85___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns)
/* harmony export */ });
/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_SidebarWidget_vue_vue_type_template_id_5c937b85___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SidebarWidget.vue?vue&type=template&id=5c937b85& */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/widgets/SidebarWidget.vue?vue&type=template&id=5c937b85&");


/***/ }),

/***/ "./resources/js/components/admin/widgets/SidebarWidget.vue?vue&type=style&index=0&id=5c937b85&lang=css&":
/*!**************************************************************************************************************!*\
  !*** ./resources/js/components/admin/widgets/SidebarWidget.vue?vue&type=style&index=0&id=5c937b85&lang=css& ***!
  \**************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var _node_modules_style_loader_dist_cjs_js_node_modules_css_loader_dist_cjs_js_clonedRuleSet_9_use_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_9_use_2_node_modules_vue_loader_lib_index_js_vue_loader_options_SidebarWidget_vue_vue_type_style_index_0_id_5c937b85_lang_css___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/style-loader/dist/cjs.js!../../../../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-9.use[1]!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-9.use[2]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SidebarWidget.vue?vue&type=style&index=0&id=5c937b85&lang=css& */ "./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-9.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-9.use[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/admin/widgets/SidebarWidget.vue?vue&type=style&index=0&id=5c937b85&lang=css&");


/***/ }),

/***/ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js":
/*!********************************************************************!*\
  !*** ./node_modules/vue-loader/lib/runtime/componentNormalizer.js ***!
  \********************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (/* binding */ normalizeComponent)\n/* harmony export */ });\n/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nfunction normalizeComponent(\n  scriptExports,\n  render,\n  staticRenderFns,\n  functionalTemplate,\n  injectStyles,\n  scopeId,\n  moduleIdentifier /* server only */,\n  shadowMode /* vue-cli only */\n) {\n  // Vue.extend constructor export interop\n  var options =\n    typeof scriptExports === 'function' ? scriptExports.options : scriptExports\n\n  // render functions\n  if (render) {\n    options.render = render\n    options.staticRenderFns = staticRenderFns\n    options._compiled = true\n  }\n\n  // functional template\n  if (functionalTemplate) {\n    options.functional = true\n  }\n\n  // scopedId\n  if (scopeId) {\n    options._scopeId = 'data-v-' + scopeId\n  }\n\n  var hook\n  if (moduleIdentifier) {\n    // server build\n    hook = function (context) {\n      // 2.3 injection\n      context =\n        context || // cached call\n        (this.$vnode && this.$vnode.ssrContext) || // stateful\n        (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n      // 2.2 with runInNewContext: true\n      if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n        context = __VUE_SSR_CONTEXT__\n      }\n      // inject component styles\n      if (injectStyles) {\n        injectStyles.call(this, context)\n      }\n      // register component module identifier for async chunk inferrence\n      if (context && context._registeredComponents) {\n        context._registeredComponents.add(moduleIdentifier)\n      }\n    }\n    // used by ssr in case component is cached and beforeCreate\n    // never gets called\n    options._ssrRegister = hook\n  } else if (injectStyles) {\n    hook = shadowMode\n      ? function () {\n          injectStyles.call(\n            this,\n            (options.functional ? this.parent : this).$root.$options.shadowRoot\n          )\n        }\n      : injectStyles\n  }\n\n  if (hook) {\n    if (options.functional) {\n      // for template-only hot-reload because in that case the render fn doesn't\n      // go through the normalizer\n      options._injectStyles = hook\n      // register for functional component in vue file\n      var originalRender = options.render\n      options.render = function renderWithStyleInjection(h, context) {\n        hook.call(context)\n        return originalRender(h, context)\n      }\n    } else {\n      // inject component registration as beforeCreate hook\n      var existing = options.beforeCreate\n      options.beforeCreate = existing ? [].concat(existing, hook) : [hook]\n    }\n  }\n\n  return {\n    exports: scriptExports,\n    options: options\n  }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanM/YWUwYyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBnbG9iYWxzIF9fVlVFX1NTUl9DT05URVhUX18gKi9cblxuLy8gSU1QT1JUQU5UOiBEbyBOT1QgdXNlIEVTMjAxNSBmZWF0dXJlcyBpbiB0aGlzIGZpbGUgKGV4Y2VwdCBmb3IgbW9kdWxlcykuXG4vLyBUaGlzIG1vZHVsZSBpcyBhIHJ1bnRpbWUgdXRpbGl0eSBmb3IgY2xlYW5lciBjb21wb25lbnQgbW9kdWxlIG91dHB1dCBhbmQgd2lsbFxuLy8gYmUgaW5jbHVkZWQgaW4gdGhlIGZpbmFsIHdlYnBhY2sgdXNlciBidW5kbGUuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgc2NyaXB0RXhwb3J0cyxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZ1bmN0aW9uYWxUZW1wbGF0ZSxcbiAgaW5qZWN0U3R5bGVzLFxuICBzY29wZUlkLFxuICBtb2R1bGVJZGVudGlmaWVyIC8qIHNlcnZlciBvbmx5ICovLFxuICBzaGFkb3dNb2RlIC8qIHZ1ZS1jbGkgb25seSAqL1xuKSB7XG4gIC8vIFZ1ZS5leHRlbmQgY29uc3RydWN0b3IgZXhwb3J0IGludGVyb3BcbiAgdmFyIG9wdGlvbnMgPVxuICAgIHR5cGVvZiBzY3JpcHRFeHBvcnRzID09PSAnZnVuY3Rpb24nID8gc2NyaXB0RXhwb3J0cy5vcHRpb25zIDogc2NyaXB0RXhwb3J0c1xuXG4gIC8vIHJlbmRlciBmdW5jdGlvbnNcbiAgaWYgKHJlbmRlcikge1xuICAgIG9wdGlvbnMucmVuZGVyID0gcmVuZGVyXG4gICAgb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnMgPSBzdGF0aWNSZW5kZXJGbnNcbiAgICBvcHRpb25zLl9jb21waWxlZCA9IHRydWVcbiAgfVxuXG4gIC8vIGZ1bmN0aW9uYWwgdGVtcGxhdGVcbiAgaWYgKGZ1bmN0aW9uYWxUZW1wbGF0ZSkge1xuICAgIG9wdGlvbnMuZnVuY3Rpb25hbCA9IHRydWVcbiAgfVxuXG4gIC8vIHNjb3BlZElkXG4gIGlmIChzY29wZUlkKSB7XG4gICAgb3B0aW9ucy5fc2NvcGVJZCA9ICdkYXRhLXYtJyArIHNjb3BlSWRcbiAgfVxuXG4gIHZhciBob29rXG4gIGlmIChtb2R1bGVJZGVudGlmaWVyKSB7XG4gICAgLy8gc2VydmVyIGJ1aWxkXG4gICAgaG9vayA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgICAvLyAyLjMgaW5qZWN0aW9uXG4gICAgICBjb250ZXh0ID1cbiAgICAgICAgY29udGV4dCB8fCAvLyBjYWNoZWQgY2FsbFxuICAgICAgICAodGhpcy4kdm5vZGUgJiYgdGhpcy4kdm5vZGUuc3NyQ29udGV4dCkgfHwgLy8gc3RhdGVmdWxcbiAgICAgICAgKHRoaXMucGFyZW50ICYmIHRoaXMucGFyZW50LiR2bm9kZSAmJiB0aGlzLnBhcmVudC4kdm5vZGUuc3NyQ29udGV4dCkgLy8gZnVuY3Rpb25hbFxuICAgICAgLy8gMi4yIHdpdGggcnVuSW5OZXdDb250ZXh0OiB0cnVlXG4gICAgICBpZiAoIWNvbnRleHQgJiYgdHlwZW9mIF9fVlVFX1NTUl9DT05URVhUX18gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGNvbnRleHQgPSBfX1ZVRV9TU1JfQ09OVEVYVF9fXG4gICAgICB9XG4gICAgICAvLyBpbmplY3QgY29tcG9uZW50IHN0eWxlc1xuICAgICAgaWYgKGluamVjdFN0eWxlcykge1xuICAgICAgICBpbmplY3RTdHlsZXMuY2FsbCh0aGlzLCBjb250ZXh0KVxuICAgICAgfVxuICAgICAgLy8gcmVnaXN0ZXIgY29tcG9uZW50IG1vZHVsZSBpZGVudGlmaWVyIGZvciBhc3luYyBjaHVuayBpbmZlcnJlbmNlXG4gICAgICBpZiAoY29udGV4dCAmJiBjb250ZXh0Ll9yZWdpc3RlcmVkQ29tcG9uZW50cykge1xuICAgICAgICBjb250ZXh0Ll9yZWdpc3RlcmVkQ29tcG9uZW50cy5hZGQobW9kdWxlSWRlbnRpZmllcilcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gdXNlZCBieSBzc3IgaW4gY2FzZSBjb21wb25lbnQgaXMgY2FjaGVkIGFuZCBiZWZvcmVDcmVhdGVcbiAgICAvLyBuZXZlciBnZXRzIGNhbGxlZFxuICAgIG9wdGlvbnMuX3NzclJlZ2lzdGVyID0gaG9va1xuICB9IGVsc2UgaWYgKGluamVjdFN0eWxlcykge1xuICAgIGhvb2sgPSBzaGFkb3dNb2RlXG4gICAgICA/IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpbmplY3RTdHlsZXMuY2FsbChcbiAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAob3B0aW9ucy5mdW5jdGlvbmFsID8gdGhpcy5wYXJlbnQgOiB0aGlzKS4kcm9vdC4kb3B0aW9ucy5zaGFkb3dSb290XG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICA6IGluamVjdFN0eWxlc1xuICB9XG5cbiAgaWYgKGhvb2spIHtcbiAgICBpZiAob3B0aW9ucy5mdW5jdGlvbmFsKSB7XG4gICAgICAvLyBmb3IgdGVtcGxhdGUtb25seSBob3QtcmVsb2FkIGJlY2F1c2UgaW4gdGhhdCBjYXNlIHRoZSByZW5kZXIgZm4gZG9lc24ndFxuICAgICAgLy8gZ28gdGhyb3VnaCB0aGUgbm9ybWFsaXplclxuICAgICAgb3B0aW9ucy5faW5qZWN0U3R5bGVzID0gaG9va1xuICAgICAgLy8gcmVnaXN0ZXIgZm9yIGZ1bmN0aW9uYWwgY29tcG9uZW50IGluIHZ1ZSBmaWxlXG4gICAgICB2YXIgb3JpZ2luYWxSZW5kZXIgPSBvcHRpb25zLnJlbmRlclxuICAgICAgb3B0aW9ucy5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXJXaXRoU3R5bGVJbmplY3Rpb24oaCwgY29udGV4dCkge1xuICAgICAgICBob29rLmNhbGwoY29udGV4dClcbiAgICAgICAgcmV0dXJuIG9yaWdpbmFsUmVuZGVyKGgsIGNvbnRleHQpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGluamVjdCBjb21wb25lbnQgcmVnaXN0cmF0aW9uIGFzIGJlZm9yZUNyZWF0ZSBob29rXG4gICAgICB2YXIgZXhpc3RpbmcgPSBvcHRpb25zLmJlZm9yZUNyZWF0ZVxuICAgICAgb3B0aW9ucy5iZWZvcmVDcmVhdGUgPSBleGlzdGluZyA/IFtdLmNvbmNhdChleGlzdGluZywgaG9vaykgOiBbaG9va11cbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGV4cG9ydHM6IHNjcmlwdEV4cG9ydHMsXG4gICAgb3B0aW9uczogb3B0aW9uc1xuICB9XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/vue-loader/lib/runtime/componentNormalizer.js\n");

/***/ }),

/***/ "./node_modules/vue-router/dist/vue-router.esm.js":
/*!********************************************************!*\
  !*** ./node_modules/vue-router/dist/vue-router.esm.js ***!
  \********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   NavigationFailureType: () => (/* binding */ NavigationFailureType),\n/* harmony export */   RouterLink: () => (/* binding */ Link),\n/* harmony export */   RouterView: () => (/* binding */ View),\n/* harmony export */   START_LOCATION: () => (/* binding */ START),\n/* harmony export */   \"default\": () => (/* binding */ VueRouter$1),\n/* harmony export */   isNavigationFailure: () => (/* binding */ isNavigationFailure),\n/* harmony export */   version: () => (/* binding */ version)\n/* harmony export */ });\n/*!\n  * vue-router v3.6.5\n  * (c) 2022 Evan You\n  * @license MIT\n  */\n/*  */\n\nfunction assert (condition, message) {\n  if (!condition) {\n    throw new Error((\"[vue-router] \" + message))\n  }\n}\n\nfunction warn (condition, message) {\n  if (!condition) {\n    typeof console !== 'undefined' && console.warn((\"[vue-router] \" + message));\n  }\n}\n\nfunction extend (a, b) {\n  for (var key in b) {\n    a[key] = b[key];\n  }\n  return a\n}\n\n/*  */\n\nvar encodeReserveRE = /[!'()*]/g;\nvar encodeReserveReplacer = function (c) { return '%' + c.charCodeAt(0).toString(16); };\nvar commaRE = /%2C/g;\n\n// fixed encodeURIComponent which is more conformant to RFC3986:\n// - escapes [!'()*]\n// - preserve commas\nvar encode = function (str) { return encodeURIComponent(str)\n    .replace(encodeReserveRE, encodeReserveReplacer)\n    .replace(commaRE, ','); };\n\nfunction decode (str) {\n  try {\n    return decodeURIComponent(str)\n  } catch (err) {\n    if (true) {\n      warn(false, (\"Error decoding \\\"\" + str + \"\\\". Leaving it intact.\"));\n    }\n  }\n  return str\n}\n\nfunction resolveQuery (\n  query,\n  extraQuery,\n  _parseQuery\n) {\n  if ( extraQuery === void 0 ) extraQuery = {};\n\n  var parse = _parseQuery || parseQuery;\n  var parsedQuery;\n  try {\n    parsedQuery = parse(query || '');\n  } catch (e) {\n     true && warn(false, e.message);\n    parsedQuery = {};\n  }\n  for (var key in extraQuery) {\n    var value = extraQuery[key];\n    parsedQuery[key] = Array.isArray(value)\n      ? value.map(castQueryParamValue)\n      : castQueryParamValue(value);\n  }\n  return parsedQuery\n}\n\nvar castQueryParamValue = function (value) { return (value == null || typeof value === 'object' ? value : String(value)); };\n\nfunction parseQuery (query) {\n  var res = {};\n\n  query = query.trim().replace(/^(\\?|#|&)/, '');\n\n  if (!query) {\n    return res\n  }\n\n  query.split('&').forEach(function (param) {\n    var parts = param.replace(/\\+/g, ' ').split('=');\n    var key = decode(parts.shift());\n    var val = parts.length > 0 ? decode(parts.join('=')) : null;\n\n    if (res[key] === undefined) {\n      res[key] = val;\n    } else if (Array.isArray(res[key])) {\n      res[key].push(val);\n    } else {\n      res[key] = [res[key], val];\n    }\n  });\n\n  return res\n}\n\nfunction stringifyQuery (obj) {\n  var res = obj\n    ? Object.keys(obj)\n      .map(function (key) {\n        var val = obj[key];\n\n        if (val === undefined) {\n          return ''\n        }\n\n        if (val === null) {\n          return encode(key)\n        }\n\n        if (Array.isArray(val)) {\n          var result = [];\n          val.forEach(function (val2) {\n            if (val2 === undefined) {\n              return\n            }\n            if (val2 === null) {\n              result.push(encode(key));\n            } else {\n              result.push(encode(key) + '=' + encode(val2));\n            }\n          });\n          return result.join('&')\n        }\n\n        return encode(key) + '=' + encode(val)\n      })\n      .filter(function (x) { return x.length > 0; })\n      .join('&')\n    : null;\n  return res ? (\"?\" + res) : ''\n}\n\n/*  */\n\nvar trailingSlashRE = /\\/?$/;\n\nfunction createRoute (\n  record,\n  location,\n  redirectedFrom,\n  router\n) {\n  var stringifyQuery = router && router.options.stringifyQuery;\n\n  var query = location.query || {};\n  try {\n    query = clone(query);\n  } catch (e) {}\n\n  var route = {\n    name: location.name || (record && record.name),\n    meta: (record && record.meta) || {},\n    path: location.path || '/',\n    hash: location.hash || '',\n    query: query,\n    params: location.params || {},\n    fullPath: getFullPath(location, stringifyQuery),\n    matched: record ? formatMatch(record) : []\n  };\n  if (redirectedFrom) {\n    route.redirectedFrom = getFullPath(redirectedFrom, stringifyQuery);\n  }\n  return Object.freeze(route)\n}\n\nfunction clone (value) {\n  if (Array.isArray(value)) {\n    return value.map(clone)\n  } else if (value && typeof value === 'object') {\n    var res = {};\n    for (var key in value) {\n      res[key] = clone(value[key]);\n    }\n    return res\n  } else {\n    return value\n  }\n}\n\n// the starting route that represents the initial state\nvar START = createRoute(null, {\n  path: '/'\n});\n\nfunction formatMatch (record) {\n  var res = [];\n  while (record) {\n    res.unshift(record);\n    record = record.parent;\n  }\n  return res\n}\n\nfunction getFullPath (\n  ref,\n  _stringifyQuery\n) {\n  var path = ref.path;\n  var query = ref.query; if ( query === void 0 ) query = {};\n  var hash = ref.hash; if ( hash === void 0 ) hash = '';\n\n  var stringify = _stringifyQuery || stringifyQuery;\n  return (path || '/') + stringify(query) + hash\n}\n\nfunction isSameRoute (a, b, onlyPath) {\n  if (b === START) {\n    return a === b\n  } else if (!b) {\n    return false\n  } else if (a.path && b.path) {\n    return a.path.replace(trailingSlashRE, '') === b.path.replace(trailingSlashRE, '') && (onlyPath ||\n      a.hash === b.hash &&\n      isObjectEqual(a.query, b.query))\n  } else if (a.name && b.name) {\n    return (\n      a.name === b.name &&\n      (onlyPath || (\n        a.hash === b.hash &&\n      isObjectEqual(a.query, b.query) &&\n      isObjectEqual(a.params, b.params))\n      )\n    )\n  } else {\n    return false\n  }\n}\n\nfunction isObjectEqual (a, b) {\n  if ( a === void 0 ) a = {};\n  if ( b === void 0 ) b = {};\n\n  // handle null value #1566\n  if (!a || !b) { return a === b }\n  var aKeys = Object.keys(a).sort();\n  var bKeys = Object.keys(b).sort();\n  if (aKeys.length !== bKeys.length) {\n    return false\n  }\n  return aKeys.every(function (key, i) {\n    var aVal = a[key];\n    var bKey = bKeys[i];\n    if (bKey !== key) { return false }\n    var bVal = b[key];\n    // query values can be null and undefined\n    if (aVal == null || bVal == null) { return aVal === bVal }\n    // check nested equality\n    if (typeof aVal === 'object' && typeof bVal === 'object') {\n      return isObjectEqual(aVal, bVal)\n    }\n    return String(aVal) === String(bVal)\n  })\n}\n\nfunction isIncludedRoute (current, target) {\n  return (\n    current.path.replace(trailingSlashRE, '/').indexOf(\n      target.path.replace(trailingSlashRE, '/')\n    ) === 0 &&\n    (!target.hash || current.hash === target.hash) &&\n    queryIncludes(current.query, target.query)\n  )\n}\n\nfunction queryIncludes (current, target) {\n  for (var key in target) {\n    if (!(key in current)) {\n      return false\n    }\n  }\n  return true\n}\n\nfunction handleRouteEntered (route) {\n  for (var i = 0; i < route.matched.length; i++) {\n    var record = route.matched[i];\n    for (var name in record.instances) {\n      var instance = record.instances[name];\n      var cbs = record.enteredCbs[name];\n      if (!instance || !cbs) { continue }\n      delete record.enteredCbs[name];\n      for (var i$1 = 0; i$1 < cbs.length; i$1++) {\n        if (!instance._isBeingDestroyed) { cbs[i$1](instance); }\n      }\n    }\n  }\n}\n\nvar View = {\n  name: 'RouterView',\n  functional: true,\n  props: {\n    name: {\n      type: String,\n      default: 'default'\n    }\n  },\n  render: function render (_, ref) {\n    var props = ref.props;\n    var children = ref.children;\n    var parent = ref.parent;\n    var data = ref.data;\n\n    // used by devtools to display a router-view badge\n    data.routerView = true;\n\n    // directly use parent context's createElement() function\n    // so that components rendered by router-view can resolve named slots\n    var h = parent.$createElement;\n    var name = props.name;\n    var route = parent.$route;\n    var cache = parent._routerViewCache || (parent._routerViewCache = {});\n\n    // determine current view depth, also check to see if the tree\n    // has been toggled inactive but kept-alive.\n    var depth = 0;\n    var inactive = false;\n    while (parent && parent._routerRoot !== parent) {\n      var vnodeData = parent.$vnode ? parent.$vnode.data : {};\n      if (vnodeData.routerView) {\n        depth++;\n      }\n      if (vnodeData.keepAlive && parent._directInactive && parent._inactive) {\n        inactive = true;\n      }\n      parent = parent.$parent;\n    }\n    data.routerViewDepth = depth;\n\n    // render previous view if the tree is inactive and kept-alive\n    if (inactive) {\n      var cachedData = cache[name];\n      var cachedComponent = cachedData && cachedData.component;\n      if (cachedComponent) {\n        // #2301\n        // pass props\n        if (cachedData.configProps) {\n          fillPropsinData(cachedComponent, data, cachedData.route, cachedData.configProps);\n        }\n        return h(cachedComponent, data, children)\n      } else {\n        // render previous empty view\n        return h()\n      }\n    }\n\n    var matched = route.matched[depth];\n    var component = matched && matched.components[name];\n\n    // render empty node if no matched route or no config component\n    if (!matched || !component) {\n      cache[name] = null;\n      return h()\n    }\n\n    // cache component\n    cache[name] = { component: component };\n\n    // attach instance registration hook\n    // this will be called in the instance's injected lifecycle hooks\n    data.registerRouteInstance = function (vm, val) {\n      // val could be undefined for unregistration\n      var current = matched.instances[name];\n      if (\n        (val && current !== vm) ||\n        (!val && current === vm)\n      ) {\n        matched.instances[name] = val;\n      }\n    }\n\n    // also register instance in prepatch hook\n    // in case the same component instance is reused across different routes\n    ;(data.hook || (data.hook = {})).prepatch = function (_, vnode) {\n      matched.instances[name] = vnode.componentInstance;\n    };\n\n    // register instance in init hook\n    // in case kept-alive component be actived when routes changed\n    data.hook.init = function (vnode) {\n      if (vnode.data.keepAlive &&\n        vnode.componentInstance &&\n        vnode.componentInstance !== matched.instances[name]\n      ) {\n        matched.instances[name] = vnode.componentInstance;\n      }\n\n      // if the route transition has already been confirmed then we weren't\n      // able to call the cbs during confirmation as the component was not\n      // registered yet, so we call it here.\n      handleRouteEntered(route);\n    };\n\n    var configProps = matched.props && matched.props[name];\n    // save route and configProps in cache\n    if (configProps) {\n      extend(cache[name], {\n        route: route,\n        configProps: configProps\n      });\n      fillPropsinData(component, data, route, configProps);\n    }\n\n    return h(component, data, children)\n  }\n};\n\nfunction fillPropsinData (component, data, route, configProps) {\n  // resolve props\n  var propsToPass = data.props = resolveProps(route, configProps);\n  if (propsToPass) {\n    // clone to prevent mutation\n    propsToPass = data.props = extend({}, propsToPass);\n    // pass non-declared props as attrs\n    var attrs = data.attrs = data.attrs || {};\n    for (var key in propsToPass) {\n      if (!component.props || !(key in component.props)) {\n        attrs[key] = propsToPass[key];\n        delete propsToPass[key];\n      }\n    }\n  }\n}\n\nfunction resolveProps (route, config) {\n  switch (typeof config) {\n    case 'undefined':\n      return\n    case 'object':\n      return config\n    case 'function':\n      return config(route)\n    case 'boolean':\n      return config ? route.params : undefined\n    default:\n      if (true) {\n        warn(\n          false,\n          \"props in \\\"\" + (route.path) + \"\\\" is a \" + (typeof config) + \", \" +\n          \"expecting an object, function or boolean.\"\n        );\n      }\n  }\n}\n\n/*  */\n\nfunction resolvePath (\n  relative,\n  base,\n  append\n) {\n  var firstChar = relative.charAt(0);\n  if (firstChar === '/') {\n    return relative\n  }\n\n  if (firstChar === '?' || firstChar === '#') {\n    return base + relative\n  }\n\n  var stack = base.split('/');\n\n  // remove trailing segment if:\n  // - not appending\n  // - appending to trailing slash (last segment is empty)\n  if (!append || !stack[stack.length - 1]) {\n    stack.pop();\n  }\n\n  // resolve relative path\n  var segments = relative.replace(/^\\//, '').split('/');\n  for (var i = 0; i < segments.length; i++) {\n    var segment = segments[i];\n    if (segment === '..') {\n      stack.pop();\n    } else if (segment !== '.') {\n      stack.push(segment);\n    }\n  }\n\n  // ensure leading slash\n  if (stack[0] !== '') {\n    stack.unshift('');\n  }\n\n  return stack.join('/')\n}\n\nfunction parsePath (path) {\n  var hash = '';\n  var query = '';\n\n  var hashIndex = path.indexOf('#');\n  if (hashIndex >= 0) {\n    hash = path.slice(hashIndex);\n    path = path.slice(0, hashIndex);\n  }\n\n  var queryIndex = path.indexOf('?');\n  if (queryIndex >= 0) {\n    query = path.slice(queryIndex + 1);\n    path = path.slice(0, queryIndex);\n  }\n\n  return {\n    path: path,\n    query: query,\n    hash: hash\n  }\n}\n\nfunction cleanPath (path) {\n  return path.replace(/\\/(?:\\s*\\/)+/g, '/')\n}\n\nvar isarray = Array.isArray || function (arr) {\n  return Object.prototype.toString.call(arr) == '[object Array]';\n};\n\n/**\n * Expose `pathToRegexp`.\n */\nvar pathToRegexp_1 = pathToRegexp;\nvar parse_1 = parse;\nvar compile_1 = compile;\nvar tokensToFunction_1 = tokensToFunction;\nvar tokensToRegExp_1 = tokensToRegExp;\n\n/**\n * The main path matching regexp utility.\n *\n * @type {RegExp}\n */\nvar PATH_REGEXP = new RegExp([\n  // Match escaped characters that would otherwise appear in future matches.\n  // This allows the user to escape special characters that won't transform.\n  '(\\\\\\\\.)',\n  // Match Express-style parameters and un-named parameters with a prefix\n  // and optional suffixes. Matches appear as:\n  //\n  // \"/:test(\\\\d+)?\" => [\"/\", \"test\", \"\\d+\", undefined, \"?\", undefined]\n  // \"/route(\\\\d+)\"  => [undefined, undefined, undefined, \"\\d+\", undefined, undefined]\n  // \"/*\"            => [\"/\", undefined, undefined, undefined, undefined, \"*\"]\n  '([\\\\/.])?(?:(?:\\\\:(\\\\w+)(?:\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))?|\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))([+*?])?|(\\\\*))'\n].join('|'), 'g');\n\n/**\n * Parse a string for the raw tokens.\n *\n * @param  {string}  str\n * @param  {Object=} options\n * @return {!Array}\n */\nfunction parse (str, options) {\n  var tokens = [];\n  var key = 0;\n  var index = 0;\n  var path = '';\n  var defaultDelimiter = options && options.delimiter || '/';\n  var res;\n\n  while ((res = PATH_REGEXP.exec(str)) != null) {\n    var m = res[0];\n    var escaped = res[1];\n    var offset = res.index;\n    path += str.slice(index, offset);\n    index = offset + m.length;\n\n    // Ignore already escaped sequences.\n    if (escaped) {\n      path += escaped[1];\n      continue\n    }\n\n    var next = str[index];\n    var prefix = res[2];\n    var name = res[3];\n    var capture = res[4];\n    var group = res[5];\n    var modifier = res[6];\n    var asterisk = res[7];\n\n    // Push the current path onto the tokens.\n    if (path) {\n      tokens.push(path);\n      path = '';\n    }\n\n    var partial = prefix != null && next != null && next !== prefix;\n    var repeat = modifier === '+' || modifier === '*';\n    var optional = modifier === '?' || modifier === '*';\n    var delimiter = res[2] || defaultDelimiter;\n    var pattern = capture || group;\n\n    tokens.push({\n      name: name || key++,\n      prefix: prefix || '',\n      delimiter: delimiter,\n      optional: optional,\n      repeat: repeat,\n      partial: partial,\n      asterisk: !!asterisk,\n      pattern: pattern ? escapeGroup(pattern) : (asterisk ? '.*' : '[^' + escapeString(delimiter) + ']+?')\n    });\n  }\n\n  // Match any characters still remaining.\n  if (index < str.length) {\n    path += str.substr(index);\n  }\n\n  // If the path exists, push it onto the end.\n  if (path) {\n    tokens.push(path);\n  }\n\n  return tokens\n}\n\n/**\n * Compile a string to a template function for the path.\n *\n * @param  {string}             str\n * @param  {Object=}            options\n * @return {!function(Object=, Object=)}\n */\nfunction compile (str, options) {\n  return tokensToFunction(parse(str, options), options)\n}\n\n/**\n * Prettier encoding of URI path segments.\n *\n * @param  {string}\n * @return {string}\n */\nfunction encodeURIComponentPretty (str) {\n  return encodeURI(str).replace(/[\\/?#]/g, function (c) {\n    return '%' + c.charCodeAt(0).toString(16).toUpperCase()\n  })\n}\n\n/**\n * Encode the asterisk parameter. Similar to `pretty`, but allows slashes.\n *\n * @param  {string}\n * @return {string}\n */\nfunction encodeAsterisk (str) {\n  return encodeURI(str).replace(/[?#]/g, function (c) {\n    return '%' + c.charCodeAt(0).toString(16).toUpperCase()\n  })\n}\n\n/**\n * Expose a method for transforming tokens into the path function.\n */\nfunction tokensToFunction (tokens, options) {\n  // Compile all the tokens into regexps.\n  var matches = new Array(tokens.length);\n\n  // Compile all the patterns before compilation.\n  for (var i = 0; i < tokens.length; i++) {\n    if (typeof tokens[i] === 'object') {\n      matches[i] = new RegExp('^(?:' + tokens[i].pattern + ')$', flags(options));\n    }\n  }\n\n  return function (obj, opts) {\n    var path = '';\n    var data = obj || {};\n    var options = opts || {};\n    var encode = options.pretty ? encodeURIComponentPretty : encodeURIComponent;\n\n    for (var i = 0; i < tokens.length; i++) {\n      var token = tokens[i];\n\n      if (typeof token === 'string') {\n        path += token;\n\n        continue\n      }\n\n      var value = data[token.name];\n      var segment;\n\n      if (value == null) {\n        if (token.optional) {\n          // Prepend partial segment prefixes.\n          if (token.partial) {\n            path += token.prefix;\n          }\n\n          continue\n        } else {\n          throw new TypeError('Expected \"' + token.name + '\" to be defined')\n        }\n      }\n\n      if (isarray(value)) {\n        if (!token.repeat) {\n          throw new TypeError('Expected \"' + token.name + '\" to not repeat, but received `' + JSON.stringify(value) + '`')\n        }\n\n        if (value.length === 0) {\n          if (token.optional) {\n            continue\n          } else {\n            throw new TypeError('Expected \"' + token.name + '\" to not be empty')\n          }\n        }\n\n        for (var j = 0; j < value.length; j++) {\n          segment = encode(value[j]);\n\n          if (!matches[i].test(segment)) {\n            throw new TypeError('Expected all \"' + token.name + '\" to match \"' + token.pattern + '\", but received `' + JSON.stringify(segment) + '`')\n          }\n\n          path += (j === 0 ? token.prefix : token.delimiter) + segment;\n        }\n\n        continue\n      }\n\n      segment = token.asterisk ? encodeAsterisk(value) : encode(value);\n\n      if (!matches[i].test(segment)) {\n        throw new TypeError('Expected \"' + token.name + '\" to match \"' + token.pattern + '\", but received \"' + segment + '\"')\n      }\n\n      path += token.prefix + segment;\n    }\n\n    return path\n  }\n}\n\n/**\n * Escape a regular expression string.\n *\n * @param  {string} str\n * @return {string}\n */\nfunction escapeString (str) {\n  return str.replace(/([.+*?=^!:${}()[\\]|\\/\\\\])/g, '\\\\$1')\n}\n\n/**\n * Escape the capturing group by escaping special characters and meaning.\n *\n * @param  {string} group\n * @return {string}\n */\nfunction escapeGroup (group) {\n  return group.replace(/([=!:$\\/()])/g, '\\\\$1')\n}\n\n/**\n * Attach the keys as a property of the regexp.\n *\n * @param  {!RegExp} re\n * @param  {Array}   keys\n * @return {!RegExp}\n */\nfunction attachKeys (re, keys) {\n  re.keys = keys;\n  return re\n}\n\n/**\n * Get the flags for a regexp from the options.\n *\n * @param  {Object} options\n * @return {string}\n */\nfunction flags (options) {\n  return options && options.sensitive ? '' : 'i'\n}\n\n/**\n * Pull out keys from a regexp.\n *\n * @param  {!RegExp} path\n * @param  {!Array}  keys\n * @return {!RegExp}\n */\nfunction regexpToRegexp (path, keys) {\n  // Use a negative lookahead to match only capturing groups.\n  var groups = path.source.match(/\\((?!\\?)/g);\n\n  if (groups) {\n    for (var i = 0; i < groups.length; i++) {\n      keys.push({\n        name: i,\n        prefix: null,\n        delimiter: null,\n        optional: false,\n        repeat: false,\n        partial: false,\n        asterisk: false,\n        pattern: null\n      });\n    }\n  }\n\n  return attachKeys(path, keys)\n}\n\n/**\n * Transform an array into a regexp.\n *\n * @param  {!Array}  path\n * @param  {Array}   keys\n * @param  {!Object} options\n * @return {!RegExp}\n */\nfunction arrayToRegexp (path, keys, options) {\n  var parts = [];\n\n  for (var i = 0; i < path.length; i++) {\n    parts.push(pathToRegexp(path[i], keys, options).source);\n  }\n\n  var regexp = new RegExp('(?:' + parts.join('|') + ')', flags(options));\n\n  return attachKeys(regexp, keys)\n}\n\n/**\n * Create a path regexp from string input.\n *\n * @param  {string}  path\n * @param  {!Array}  keys\n * @param  {!Object} options\n * @return {!RegExp}\n */\nfunction stringToRegexp (path, keys, options) {\n  return tokensToRegExp(parse(path, options), keys, options)\n}\n\n/**\n * Expose a function for taking tokens and returning a RegExp.\n *\n * @param  {!Array}          tokens\n * @param  {(Array|Object)=} keys\n * @param  {Object=}         options\n * @return {!RegExp}\n */\nfunction tokensToRegExp (tokens, keys, options) {\n  if (!isarray(keys)) {\n    options = /** @type {!Object} */ (keys || options);\n    keys = [];\n  }\n\n  options = options || {};\n\n  var strict = options.strict;\n  var end = options.end !== false;\n  var route = '';\n\n  // Iterate over the tokens and create our regexp string.\n  for (var i = 0; i < tokens.length; i++) {\n    var token = tokens[i];\n\n    if (typeof token === 'string') {\n      route += escapeString(token);\n    } else {\n      var prefix = escapeString(token.prefix);\n      var capture = '(?:' + token.pattern + ')';\n\n      keys.push(token);\n\n      if (token.repeat) {\n        capture += '(?:' + prefix + capture + ')*';\n      }\n\n      if (token.optional) {\n        if (!token.partial) {\n          capture = '(?:' + prefix + '(' + capture + '))?';\n        } else {\n          capture = prefix + '(' + capture + ')?';\n        }\n      } else {\n        capture = prefix + '(' + capture + ')';\n      }\n\n      route += capture;\n    }\n  }\n\n  var delimiter = escapeString(options.delimiter || '/');\n  var endsWithDelimiter = route.slice(-delimiter.length) === delimiter;\n\n  // In non-strict mode we allow a slash at the end of match. If the path to\n  // match already ends with a slash, we remove it for consistency. The slash\n  // is valid at the end of a path match, not in the middle. This is important\n  // in non-ending mode, where \"/test/\" shouldn't match \"/test//route\".\n  if (!strict) {\n    route = (endsWithDelimiter ? route.slice(0, -delimiter.length) : route) + '(?:' + delimiter + '(?=$))?';\n  }\n\n  if (end) {\n    route += '$';\n  } else {\n    // In non-ending mode, we need the capturing groups to match as much as\n    // possible by using a positive lookahead to the end or next path segment.\n    route += strict && endsWithDelimiter ? '' : '(?=' + delimiter + '|$)';\n  }\n\n  return attachKeys(new RegExp('^' + route, flags(options)), keys)\n}\n\n/**\n * Normalize the given path string, returning a regular expression.\n *\n * An empty array can be passed in for the keys, which will hold the\n * placeholder key descriptions. For example, using `/user/:id`, `keys` will\n * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`.\n *\n * @param  {(string|RegExp|Array)} path\n * @param  {(Array|Object)=}       keys\n * @param  {Object=}               options\n * @return {!RegExp}\n */\nfunction pathToRegexp (path, keys, options) {\n  if (!isarray(keys)) {\n    options = /** @type {!Object} */ (keys || options);\n    keys = [];\n  }\n\n  options = options || {};\n\n  if (path instanceof RegExp) {\n    return regexpToRegexp(path, /** @type {!Array} */ (keys))\n  }\n\n  if (isarray(path)) {\n    return arrayToRegexp(/** @type {!Array} */ (path), /** @type {!Array} */ (keys), options)\n  }\n\n  return stringToRegexp(/** @type {string} */ (path), /** @type {!Array} */ (keys), options)\n}\npathToRegexp_1.parse = parse_1;\npathToRegexp_1.compile = compile_1;\npathToRegexp_1.tokensToFunction = tokensToFunction_1;\npathToRegexp_1.tokensToRegExp = tokensToRegExp_1;\n\n/*  */\n\n// $flow-disable-line\nvar regexpCompileCache = Object.create(null);\n\nfunction fillParams (\n  path,\n  params,\n  routeMsg\n) {\n  params = params || {};\n  try {\n    var filler =\n      regexpCompileCache[path] ||\n      (regexpCompileCache[path] = pathToRegexp_1.compile(path));\n\n    // Fix #2505 resolving asterisk routes { name: 'not-found', params: { pathMatch: '/not-found' }}\n    // and fix #3106 so that you can work with location descriptor object having params.pathMatch equal to empty string\n    if (typeof params.pathMatch === 'string') { params[0] = params.pathMatch; }\n\n    return filler(params, { pretty: true })\n  } catch (e) {\n    if (true) {\n      // Fix #3072 no warn if `pathMatch` is string\n      warn(typeof params.pathMatch === 'string', (\"missing param for \" + routeMsg + \": \" + (e.message)));\n    }\n    return ''\n  } finally {\n    // delete the 0 if it was added\n    delete params[0];\n  }\n}\n\n/*  */\n\nfunction normalizeLocation (\n  raw,\n  current,\n  append,\n  router\n) {\n  var next = typeof raw === 'string' ? { path: raw } : raw;\n  // named target\n  if (next._normalized) {\n    return next\n  } else if (next.name) {\n    next = extend({}, raw);\n    var params = next.params;\n    if (params && typeof params === 'object') {\n      next.params = extend({}, params);\n    }\n    return next\n  }\n\n  // relative params\n  if (!next.path && next.params && current) {\n    next = extend({}, next);\n    next._normalized = true;\n    var params$1 = extend(extend({}, current.params), next.params);\n    if (current.name) {\n      next.name = current.name;\n      next.params = params$1;\n    } else if (current.matched.length) {\n      var rawPath = current.matched[current.matched.length - 1].path;\n      next.path = fillParams(rawPath, params$1, (\"path \" + (current.path)));\n    } else if (true) {\n      warn(false, \"relative params navigation requires a current route.\");\n    }\n    return next\n  }\n\n  var parsedPath = parsePath(next.path || '');\n  var basePath = (current && current.path) || '/';\n  var path = parsedPath.path\n    ? resolvePath(parsedPath.path, basePath, append || next.append)\n    : basePath;\n\n  var query = resolveQuery(\n    parsedPath.query,\n    next.query,\n    router && router.options.parseQuery\n  );\n\n  var hash = next.hash || parsedPath.hash;\n  if (hash && hash.charAt(0) !== '#') {\n    hash = \"#\" + hash;\n  }\n\n  return {\n    _normalized: true,\n    path: path,\n    query: query,\n    hash: hash\n  }\n}\n\n/*  */\n\n// work around weird flow bug\nvar toTypes = [String, Object];\nvar eventTypes = [String, Array];\n\nvar noop = function () {};\n\nvar warnedCustomSlot;\nvar warnedTagProp;\nvar warnedEventProp;\n\nvar Link = {\n  name: 'RouterLink',\n  props: {\n    to: {\n      type: toTypes,\n      required: true\n    },\n    tag: {\n      type: String,\n      default: 'a'\n    },\n    custom: Boolean,\n    exact: Boolean,\n    exactPath: Boolean,\n    append: Boolean,\n    replace: Boolean,\n    activeClass: String,\n    exactActiveClass: String,\n    ariaCurrentValue: {\n      type: String,\n      default: 'page'\n    },\n    event: {\n      type: eventTypes,\n      default: 'click'\n    }\n  },\n  render: function render (h) {\n    var this$1$1 = this;\n\n    var router = this.$router;\n    var current = this.$route;\n    var ref = router.resolve(\n      this.to,\n      current,\n      this.append\n    );\n    var location = ref.location;\n    var route = ref.route;\n    var href = ref.href;\n\n    var classes = {};\n    var globalActiveClass = router.options.linkActiveClass;\n    var globalExactActiveClass = router.options.linkExactActiveClass;\n    // Support global empty active class\n    var activeClassFallback =\n      globalActiveClass == null ? 'router-link-active' : globalActiveClass;\n    var exactActiveClassFallback =\n      globalExactActiveClass == null\n        ? 'router-link-exact-active'\n        : globalExactActiveClass;\n    var activeClass =\n      this.activeClass == null ? activeClassFallback : this.activeClass;\n    var exactActiveClass =\n      this.exactActiveClass == null\n        ? exactActiveClassFallback\n        : this.exactActiveClass;\n\n    var compareTarget = route.redirectedFrom\n      ? createRoute(null, normalizeLocation(route.redirectedFrom), null, router)\n      : route;\n\n    classes[exactActiveClass] = isSameRoute(current, compareTarget, this.exactPath);\n    classes[activeClass] = this.exact || this.exactPath\n      ? classes[exactActiveClass]\n      : isIncludedRoute(current, compareTarget);\n\n    var ariaCurrentValue = classes[exactActiveClass] ? this.ariaCurrentValue : null;\n\n    var handler = function (e) {\n      if (guardEvent(e)) {\n        if (this$1$1.replace) {\n          router.replace(location, noop);\n        } else {\n          router.push(location, noop);\n        }\n      }\n    };\n\n    var on = { click: guardEvent };\n    if (Array.isArray(this.event)) {\n      this.event.forEach(function (e) {\n        on[e] = handler;\n      });\n    } else {\n      on[this.event] = handler;\n    }\n\n    var data = { class: classes };\n\n    var scopedSlot =\n      !this.$scopedSlots.$hasNormal &&\n      this.$scopedSlots.default &&\n      this.$scopedSlots.default({\n        href: href,\n        route: route,\n        navigate: handler,\n        isActive: classes[activeClass],\n        isExactActive: classes[exactActiveClass]\n      });\n\n    if (scopedSlot) {\n      if ( true && !this.custom) {\n        !warnedCustomSlot && warn(false, 'In Vue Router 4, the v-slot API will by default wrap its content with an <a> element. Use the custom prop to remove this warning:\\n<router-link v-slot=\"{ navigate, href }\" custom></router-link>\\n');\n        warnedCustomSlot = true;\n      }\n      if (scopedSlot.length === 1) {\n        return scopedSlot[0]\n      } else if (scopedSlot.length > 1 || !scopedSlot.length) {\n        if (true) {\n          warn(\n            false,\n            (\"<router-link> with to=\\\"\" + (this.to) + \"\\\" is trying to use a scoped slot but it didn't provide exactly one child. Wrapping the content with a span element.\")\n          );\n        }\n        return scopedSlot.length === 0 ? h() : h('span', {}, scopedSlot)\n      }\n    }\n\n    if (true) {\n      if ('tag' in this.$options.propsData && !warnedTagProp) {\n        warn(\n          false,\n          \"<router-link>'s tag prop is deprecated and has been removed in Vue Router 4. Use the v-slot API to remove this warning: https://next.router.vuejs.org/guide/migration/#removal-of-event-and-tag-props-in-router-link.\"\n        );\n        warnedTagProp = true;\n      }\n      if ('event' in this.$options.propsData && !warnedEventProp) {\n        warn(\n          false,\n          \"<router-link>'s event prop is deprecated and has been removed in Vue Router 4. Use the v-slot API to remove this warning: https://next.router.vuejs.org/guide/migration/#removal-of-event-and-tag-props-in-router-link.\"\n        );\n        warnedEventProp = true;\n      }\n    }\n\n    if (this.tag === 'a') {\n      data.on = on;\n      data.attrs = { href: href, 'aria-current': ariaCurrentValue };\n    } else {\n      // find the first <a> child and apply listener and href\n      var a = findAnchor(this.$slots.default);\n      if (a) {\n        // in case the <a> is a static node\n        a.isStatic = false;\n        var aData = (a.data = extend({}, a.data));\n        aData.on = aData.on || {};\n        // transform existing events in both objects into arrays so we can push later\n        for (var event in aData.on) {\n          var handler$1 = aData.on[event];\n          if (event in on) {\n            aData.on[event] = Array.isArray(handler$1) ? handler$1 : [handler$1];\n          }\n        }\n        // append new listeners for router-link\n        for (var event$1 in on) {\n          if (event$1 in aData.on) {\n            // on[event] is always a function\n            aData.on[event$1].push(on[event$1]);\n          } else {\n            aData.on[event$1] = handler;\n          }\n        }\n\n        var aAttrs = (a.data.attrs = extend({}, a.data.attrs));\n        aAttrs.href = href;\n        aAttrs['aria-current'] = ariaCurrentValue;\n      } else {\n        // doesn't have <a> child, apply listener to self\n        data.on = on;\n      }\n    }\n\n    return h(this.tag, data, this.$slots.default)\n  }\n};\n\nfunction guardEvent (e) {\n  // don't redirect with control keys\n  if (e.metaKey || e.altKey || e.ctrlKey || e.shiftKey) { return }\n  // don't redirect when preventDefault called\n  if (e.defaultPrevented) { return }\n  // don't redirect on right click\n  if (e.button !== undefined && e.button !== 0) { return }\n  // don't redirect if `target=\"_blank\"`\n  if (e.currentTarget && e.currentTarget.getAttribute) {\n    var target = e.currentTarget.getAttribute('target');\n    if (/\\b_blank\\b/i.test(target)) { return }\n  }\n  // this may be a Weex event which doesn't have this method\n  if (e.preventDefault) {\n    e.preventDefault();\n  }\n  return true\n}\n\nfunction findAnchor (children) {\n  if (children) {\n    var child;\n    for (var i = 0; i < children.length; i++) {\n      child = children[i];\n      if (child.tag === 'a') {\n        return child\n      }\n      if (child.children && (child = findAnchor(child.children))) {\n        return child\n      }\n    }\n  }\n}\n\nvar _Vue;\n\nfunction install (Vue) {\n  if (install.installed && _Vue === Vue) { return }\n  install.installed = true;\n\n  _Vue = Vue;\n\n  var isDef = function (v) { return v !== undefined; };\n\n  var registerInstance = function (vm, callVal) {\n    var i = vm.$options._parentVnode;\n    if (isDef(i) && isDef(i = i.data) && isDef(i = i.registerRouteInstance)) {\n      i(vm, callVal);\n    }\n  };\n\n  Vue.mixin({\n    beforeCreate: function beforeCreate () {\n      if (isDef(this.$options.router)) {\n        this._routerRoot = this;\n        this._router = this.$options.router;\n        this._router.init(this);\n        Vue.util.defineReactive(this, '_route', this._router.history.current);\n      } else {\n        this._routerRoot = (this.$parent && this.$parent._routerRoot) || this;\n      }\n      registerInstance(this, this);\n    },\n    destroyed: function destroyed () {\n      registerInstance(this);\n    }\n  });\n\n  Object.defineProperty(Vue.prototype, '$router', {\n    get: function get () { return this._routerRoot._router }\n  });\n\n  Object.defineProperty(Vue.prototype, '$route', {\n    get: function get () { return this._routerRoot._route }\n  });\n\n  Vue.component('RouterView', View);\n  Vue.component('RouterLink', Link);\n\n  var strats = Vue.config.optionMergeStrategies;\n  // use the same hook merging strategy for route hooks\n  strats.beforeRouteEnter = strats.beforeRouteLeave = strats.beforeRouteUpdate = strats.created;\n}\n\n/*  */\n\nvar inBrowser = typeof window !== 'undefined';\n\n/*  */\n\nfunction createRouteMap (\n  routes,\n  oldPathList,\n  oldPathMap,\n  oldNameMap,\n  parentRoute\n) {\n  // the path list is used to control path matching priority\n  var pathList = oldPathList || [];\n  // $flow-disable-line\n  var pathMap = oldPathMap || Object.create(null);\n  // $flow-disable-line\n  var nameMap = oldNameMap || Object.create(null);\n\n  routes.forEach(function (route) {\n    addRouteRecord(pathList, pathMap, nameMap, route, parentRoute);\n  });\n\n  // ensure wildcard routes are always at the end\n  for (var i = 0, l = pathList.length; i < l; i++) {\n    if (pathList[i] === '*') {\n      pathList.push(pathList.splice(i, 1)[0]);\n      l--;\n      i--;\n    }\n  }\n\n  if (true) {\n    // warn if routes do not include leading slashes\n    var found = pathList\n    // check for missing leading slash\n      .filter(function (path) { return path && path.charAt(0) !== '*' && path.charAt(0) !== '/'; });\n\n    if (found.length > 0) {\n      var pathNames = found.map(function (path) { return (\"- \" + path); }).join('\\n');\n      warn(false, (\"Non-nested routes must include a leading slash character. Fix the following routes: \\n\" + pathNames));\n    }\n  }\n\n  return {\n    pathList: pathList,\n    pathMap: pathMap,\n    nameMap: nameMap\n  }\n}\n\nfunction addRouteRecord (\n  pathList,\n  pathMap,\n  nameMap,\n  route,\n  parent,\n  matchAs\n) {\n  var path = route.path;\n  var name = route.name;\n  if (true) {\n    assert(path != null, \"\\\"path\\\" is required in a route configuration.\");\n    assert(\n      typeof route.component !== 'string',\n      \"route config \\\"component\\\" for path: \" + (String(\n        path || name\n      )) + \" cannot be a \" + \"string id. Use an actual component instead.\"\n    );\n\n    warn(\n      // eslint-disable-next-line no-control-regex\n      !/[^\\u0000-\\u007F]+/.test(path),\n      \"Route with path \\\"\" + path + \"\\\" contains unencoded characters, make sure \" +\n        \"your path is correctly encoded before passing it to the router. Use \" +\n        \"encodeURI to encode static segments of your path.\"\n    );\n  }\n\n  var pathToRegexpOptions =\n    route.pathToRegexpOptions || {};\n  var normalizedPath = normalizePath(path, parent, pathToRegexpOptions.strict);\n\n  if (typeof route.caseSensitive === 'boolean') {\n    pathToRegexpOptions.sensitive = route.caseSensitive;\n  }\n\n  var record = {\n    path: normalizedPath,\n    regex: compileRouteRegex(normalizedPath, pathToRegexpOptions),\n    components: route.components || { default: route.component },\n    alias: route.alias\n      ? typeof route.alias === 'string'\n        ? [route.alias]\n        : route.alias\n      : [],\n    instances: {},\n    enteredCbs: {},\n    name: name,\n    parent: parent,\n    matchAs: matchAs,\n    redirect: route.redirect,\n    beforeEnter: route.beforeEnter,\n    meta: route.meta || {},\n    props:\n      route.props == null\n        ? {}\n        : route.components\n          ? route.props\n          : { default: route.props }\n  };\n\n  if (route.children) {\n    // Warn if route is named, does not redirect and has a default child route.\n    // If users navigate to this route by name, the default child will\n    // not be rendered (GH Issue #629)\n    if (true) {\n      if (\n        route.name &&\n        !route.redirect &&\n        route.children.some(function (child) { return /^\\/?$/.test(child.path); })\n      ) {\n        warn(\n          false,\n          \"Named Route '\" + (route.name) + \"' has a default child route. \" +\n            \"When navigating to this named route (:to=\\\"{name: '\" + (route.name) + \"'}\\\"), \" +\n            \"the default child route will not be rendered. Remove the name from \" +\n            \"this route and use the name of the default child route for named \" +\n            \"links instead.\"\n        );\n      }\n    }\n    route.children.forEach(function (child) {\n      var childMatchAs = matchAs\n        ? cleanPath((matchAs + \"/\" + (child.path)))\n        : undefined;\n      addRouteRecord(pathList, pathMap, nameMap, child, record, childMatchAs);\n    });\n  }\n\n  if (!pathMap[record.path]) {\n    pathList.push(record.path);\n    pathMap[record.path] = record;\n  }\n\n  if (route.alias !== undefined) {\n    var aliases = Array.isArray(route.alias) ? route.alias : [route.alias];\n    for (var i = 0; i < aliases.length; ++i) {\n      var alias = aliases[i];\n      if ( true && alias === path) {\n        warn(\n          false,\n          (\"Found an alias with the same value as the path: \\\"\" + path + \"\\\". You have to remove that alias. It will be ignored in development.\")\n        );\n        // skip in dev to make it work\n        continue\n      }\n\n      var aliasRoute = {\n        path: alias,\n        children: route.children\n      };\n      addRouteRecord(\n        pathList,\n        pathMap,\n        nameMap,\n        aliasRoute,\n        parent,\n        record.path || '/' // matchAs\n      );\n    }\n  }\n\n  if (name) {\n    if (!nameMap[name]) {\n      nameMap[name] = record;\n    } else if ( true && !matchAs) {\n      warn(\n        false,\n        \"Duplicate named routes definition: \" +\n          \"{ name: \\\"\" + name + \"\\\", path: \\\"\" + (record.path) + \"\\\" }\"\n      );\n    }\n  }\n}\n\nfunction compileRouteRegex (\n  path,\n  pathToRegexpOptions\n) {\n  var regex = pathToRegexp_1(path, [], pathToRegexpOptions);\n  if (true) {\n    var keys = Object.create(null);\n    regex.keys.forEach(function (key) {\n      warn(\n        !keys[key.name],\n        (\"Duplicate param keys in route with path: \\\"\" + path + \"\\\"\")\n      );\n      keys[key.name] = true;\n    });\n  }\n  return regex\n}\n\nfunction normalizePath (\n  path,\n  parent,\n  strict\n) {\n  if (!strict) { path = path.replace(/\\/$/, ''); }\n  if (path[0] === '/') { return path }\n  if (parent == null) { return path }\n  return cleanPath(((parent.path) + \"/\" + path))\n}\n\n/*  */\n\n\n\nfunction createMatcher (\n  routes,\n  router\n) {\n  var ref = createRouteMap(routes);\n  var pathList = ref.pathList;\n  var pathMap = ref.pathMap;\n  var nameMap = ref.nameMap;\n\n  function addRoutes (routes) {\n    createRouteMap(routes, pathList, pathMap, nameMap);\n  }\n\n  function addRoute (parentOrRoute, route) {\n    var parent = (typeof parentOrRoute !== 'object') ? nameMap[parentOrRoute] : undefined;\n    // $flow-disable-line\n    createRouteMap([route || parentOrRoute], pathList, pathMap, nameMap, parent);\n\n    // add aliases of parent\n    if (parent && parent.alias.length) {\n      createRouteMap(\n        // $flow-disable-line route is defined if parent is\n        parent.alias.map(function (alias) { return ({ path: alias, children: [route] }); }),\n        pathList,\n        pathMap,\n        nameMap,\n        parent\n      );\n    }\n  }\n\n  function getRoutes () {\n    return pathList.map(function (path) { return pathMap[path]; })\n  }\n\n  function match (\n    raw,\n    currentRoute,\n    redirectedFrom\n  ) {\n    var location = normalizeLocation(raw, currentRoute, false, router);\n    var name = location.name;\n\n    if (name) {\n      var record = nameMap[name];\n      if (true) {\n        warn(record, (\"Route with name '\" + name + \"' does not exist\"));\n      }\n      if (!record) { return _createRoute(null, location) }\n      var paramNames = record.regex.keys\n        .filter(function (key) { return !key.optional; })\n        .map(function (key) { return key.name; });\n\n      if (typeof location.params !== 'object') {\n        location.params = {};\n      }\n\n      if (currentRoute && typeof currentRoute.params === 'object') {\n        for (var key in currentRoute.params) {\n          if (!(key in location.params) && paramNames.indexOf(key) > -1) {\n            location.params[key] = currentRoute.params[key];\n          }\n        }\n      }\n\n      location.path = fillParams(record.path, location.params, (\"named route \\\"\" + name + \"\\\"\"));\n      return _createRoute(record, location, redirectedFrom)\n    } else if (location.path) {\n      location.params = {};\n      for (var i = 0; i < pathList.length; i++) {\n        var path = pathList[i];\n        var record$1 = pathMap[path];\n        if (matchRoute(record$1.regex, location.path, location.params)) {\n          return _createRoute(record$1, location, redirectedFrom)\n        }\n      }\n    }\n    // no match\n    return _createRoute(null, location)\n  }\n\n  function redirect (\n    record,\n    location\n  ) {\n    var originalRedirect = record.redirect;\n    var redirect = typeof originalRedirect === 'function'\n      ? originalRedirect(createRoute(record, location, null, router))\n      : originalRedirect;\n\n    if (typeof redirect === 'string') {\n      redirect = { path: redirect };\n    }\n\n    if (!redirect || typeof redirect !== 'object') {\n      if (true) {\n        warn(\n          false, (\"invalid redirect option: \" + (JSON.stringify(redirect)))\n        );\n      }\n      return _createRoute(null, location)\n    }\n\n    var re = redirect;\n    var name = re.name;\n    var path = re.path;\n    var query = location.query;\n    var hash = location.hash;\n    var params = location.params;\n    query = re.hasOwnProperty('query') ? re.query : query;\n    hash = re.hasOwnProperty('hash') ? re.hash : hash;\n    params = re.hasOwnProperty('params') ? re.params : params;\n\n    if (name) {\n      // resolved named direct\n      var targetRecord = nameMap[name];\n      if (true) {\n        assert(targetRecord, (\"redirect failed: named route \\\"\" + name + \"\\\" not found.\"));\n      }\n      return match({\n        _normalized: true,\n        name: name,\n        query: query,\n        hash: hash,\n        params: params\n      }, undefined, location)\n    } else if (path) {\n      // 1. resolve relative redirect\n      var rawPath = resolveRecordPath(path, record);\n      // 2. resolve params\n      var resolvedPath = fillParams(rawPath, params, (\"redirect route with path \\\"\" + rawPath + \"\\\"\"));\n      // 3. rematch with existing query and hash\n      return match({\n        _normalized: true,\n        path: resolvedPath,\n        query: query,\n        hash: hash\n      }, undefined, location)\n    } else {\n      if (true) {\n        warn(false, (\"invalid redirect option: \" + (JSON.stringify(redirect))));\n      }\n      return _createRoute(null, location)\n    }\n  }\n\n  function alias (\n    record,\n    location,\n    matchAs\n  ) {\n    var aliasedPath = fillParams(matchAs, location.params, (\"aliased route with path \\\"\" + matchAs + \"\\\"\"));\n    var aliasedMatch = match({\n      _normalized: true,\n      path: aliasedPath\n    });\n    if (aliasedMatch) {\n      var matched = aliasedMatch.matched;\n      var aliasedRecord = matched[matched.length - 1];\n      location.params = aliasedMatch.params;\n      return _createRoute(aliasedRecord, location)\n    }\n    return _createRoute(null, location)\n  }\n\n  function _createRoute (\n    record,\n    location,\n    redirectedFrom\n  ) {\n    if (record && record.redirect) {\n      return redirect(record, redirectedFrom || location)\n    }\n    if (record && record.matchAs) {\n      return alias(record, location, record.matchAs)\n    }\n    return createRoute(record, location, redirectedFrom, router)\n  }\n\n  return {\n    match: match,\n    addRoute: addRoute,\n    getRoutes: getRoutes,\n    addRoutes: addRoutes\n  }\n}\n\nfunction matchRoute (\n  regex,\n  path,\n  params\n) {\n  var m = path.match(regex);\n\n  if (!m) {\n    return false\n  } else if (!params) {\n    return true\n  }\n\n  for (var i = 1, len = m.length; i < len; ++i) {\n    var key = regex.keys[i - 1];\n    if (key) {\n      // Fix #1994: using * with props: true generates a param named 0\n      params[key.name || 'pathMatch'] = typeof m[i] === 'string' ? decode(m[i]) : m[i];\n    }\n  }\n\n  return true\n}\n\nfunction resolveRecordPath (path, record) {\n  return resolvePath(path, record.parent ? record.parent.path : '/', true)\n}\n\n/*  */\n\n// use User Timing api (if present) for more accurate key precision\nvar Time =\n  inBrowser && window.performance && window.performance.now\n    ? window.performance\n    : Date;\n\nfunction genStateKey () {\n  return Time.now().toFixed(3)\n}\n\nvar _key = genStateKey();\n\nfunction getStateKey () {\n  return _key\n}\n\nfunction setStateKey (key) {\n  return (_key = key)\n}\n\n/*  */\n\nvar positionStore = Object.create(null);\n\nfunction setupScroll () {\n  // Prevent browser scroll behavior on History popstate\n  if ('scrollRestoration' in window.history) {\n    window.history.scrollRestoration = 'manual';\n  }\n  // Fix for #1585 for Firefox\n  // Fix for #2195 Add optional third attribute to workaround a bug in safari https://bugs.webkit.org/show_bug.cgi?id=182678\n  // Fix for #2774 Support for apps loaded from Windows file shares not mapped to network drives: replaced location.origin with\n  // window.location.protocol + '//' + window.location.host\n  // location.host contains the port and location.hostname doesn't\n  var protocolAndPath = window.location.protocol + '//' + window.location.host;\n  var absolutePath = window.location.href.replace(protocolAndPath, '');\n  // preserve existing history state as it could be overriden by the user\n  var stateCopy = extend({}, window.history.state);\n  stateCopy.key = getStateKey();\n  window.history.replaceState(stateCopy, '', absolutePath);\n  window.addEventListener('popstate', handlePopState);\n  return function () {\n    window.removeEventListener('popstate', handlePopState);\n  }\n}\n\nfunction handleScroll (\n  router,\n  to,\n  from,\n  isPop\n) {\n  if (!router.app) {\n    return\n  }\n\n  var behavior = router.options.scrollBehavior;\n  if (!behavior) {\n    return\n  }\n\n  if (true) {\n    assert(typeof behavior === 'function', \"scrollBehavior must be a function\");\n  }\n\n  // wait until re-render finishes before scrolling\n  router.app.$nextTick(function () {\n    var position = getScrollPosition();\n    var shouldScroll = behavior.call(\n      router,\n      to,\n      from,\n      isPop ? position : null\n    );\n\n    if (!shouldScroll) {\n      return\n    }\n\n    if (typeof shouldScroll.then === 'function') {\n      shouldScroll\n        .then(function (shouldScroll) {\n          scrollToPosition((shouldScroll), position);\n        })\n        .catch(function (err) {\n          if (true) {\n            assert(false, err.toString());\n          }\n        });\n    } else {\n      scrollToPosition(shouldScroll, position);\n    }\n  });\n}\n\nfunction saveScrollPosition () {\n  var key = getStateKey();\n  if (key) {\n    positionStore[key] = {\n      x: window.pageXOffset,\n      y: window.pageYOffset\n    };\n  }\n}\n\nfunction handlePopState (e) {\n  saveScrollPosition();\n  if (e.state && e.state.key) {\n    setStateKey(e.state.key);\n  }\n}\n\nfunction getScrollPosition () {\n  var key = getStateKey();\n  if (key) {\n    return positionStore[key]\n  }\n}\n\nfunction getElementPosition (el, offset) {\n  var docEl = document.documentElement;\n  var docRect = docEl.getBoundingClientRect();\n  var elRect = el.getBoundingClientRect();\n  return {\n    x: elRect.left - docRect.left - offset.x,\n    y: elRect.top - docRect.top - offset.y\n  }\n}\n\nfunction isValidPosition (obj) {\n  return isNumber(obj.x) || isNumber(obj.y)\n}\n\nfunction normalizePosition (obj) {\n  return {\n    x: isNumber(obj.x) ? obj.x : window.pageXOffset,\n    y: isNumber(obj.y) ? obj.y : window.pageYOffset\n  }\n}\n\nfunction normalizeOffset (obj) {\n  return {\n    x: isNumber(obj.x) ? obj.x : 0,\n    y: isNumber(obj.y) ? obj.y : 0\n  }\n}\n\nfunction isNumber (v) {\n  return typeof v === 'number'\n}\n\nvar hashStartsWithNumberRE = /^#\\d/;\n\nfunction scrollToPosition (shouldScroll, position) {\n  var isObject = typeof shouldScroll === 'object';\n  if (isObject && typeof shouldScroll.selector === 'string') {\n    // getElementById would still fail if the selector contains a more complicated query like #main[data-attr]\n    // but at the same time, it doesn't make much sense to select an element with an id and an extra selector\n    var el = hashStartsWithNumberRE.test(shouldScroll.selector) // $flow-disable-line\n      ? document.getElementById(shouldScroll.selector.slice(1)) // $flow-disable-line\n      : document.querySelector(shouldScroll.selector);\n\n    if (el) {\n      var offset =\n        shouldScroll.offset && typeof shouldScroll.offset === 'object'\n          ? shouldScroll.offset\n          : {};\n      offset = normalizeOffset(offset);\n      position = getElementPosition(el, offset);\n    } else if (isValidPosition(shouldScroll)) {\n      position = normalizePosition(shouldScroll);\n    }\n  } else if (isObject && isValidPosition(shouldScroll)) {\n    position = normalizePosition(shouldScroll);\n  }\n\n  if (position) {\n    // $flow-disable-line\n    if ('scrollBehavior' in document.documentElement.style) {\n      window.scrollTo({\n        left: position.x,\n        top: position.y,\n        // $flow-disable-line\n        behavior: shouldScroll.behavior\n      });\n    } else {\n      window.scrollTo(position.x, position.y);\n    }\n  }\n}\n\n/*  */\n\nvar supportsPushState =\n  inBrowser &&\n  (function () {\n    var ua = window.navigator.userAgent;\n\n    if (\n      (ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) &&\n      ua.indexOf('Mobile Safari') !== -1 &&\n      ua.indexOf('Chrome') === -1 &&\n      ua.indexOf('Windows Phone') === -1\n    ) {\n      return false\n    }\n\n    return window.history && typeof window.history.pushState === 'function'\n  })();\n\nfunction pushState (url, replace) {\n  saveScrollPosition();\n  // try...catch the pushState call to get around Safari\n  // DOM Exception 18 where it limits to 100 pushState calls\n  var history = window.history;\n  try {\n    if (replace) {\n      // preserve existing history state as it could be overriden by the user\n      var stateCopy = extend({}, history.state);\n      stateCopy.key = getStateKey();\n      history.replaceState(stateCopy, '', url);\n    } else {\n      history.pushState({ key: setStateKey(genStateKey()) }, '', url);\n    }\n  } catch (e) {\n    window.location[replace ? 'replace' : 'assign'](url);\n  }\n}\n\nfunction replaceState (url) {\n  pushState(url, true);\n}\n\n// When changing thing, also edit router.d.ts\nvar NavigationFailureType = {\n  redirected: 2,\n  aborted: 4,\n  cancelled: 8,\n  duplicated: 16\n};\n\nfunction createNavigationRedirectedError (from, to) {\n  return createRouterError(\n    from,\n    to,\n    NavigationFailureType.redirected,\n    (\"Redirected when going from \\\"\" + (from.fullPath) + \"\\\" to \\\"\" + (stringifyRoute(\n      to\n    )) + \"\\\" via a navigation guard.\")\n  )\n}\n\nfunction createNavigationDuplicatedError (from, to) {\n  var error = createRouterError(\n    from,\n    to,\n    NavigationFailureType.duplicated,\n    (\"Avoided redundant navigation to current location: \\\"\" + (from.fullPath) + \"\\\".\")\n  );\n  // backwards compatible with the first introduction of Errors\n  error.name = 'NavigationDuplicated';\n  return error\n}\n\nfunction createNavigationCancelledError (from, to) {\n  return createRouterError(\n    from,\n    to,\n    NavigationFailureType.cancelled,\n    (\"Navigation cancelled from \\\"\" + (from.fullPath) + \"\\\" to \\\"\" + (to.fullPath) + \"\\\" with a new navigation.\")\n  )\n}\n\nfunction createNavigationAbortedError (from, to) {\n  return createRouterError(\n    from,\n    to,\n    NavigationFailureType.aborted,\n    (\"Navigation aborted from \\\"\" + (from.fullPath) + \"\\\" to \\\"\" + (to.fullPath) + \"\\\" via a navigation guard.\")\n  )\n}\n\nfunction createRouterError (from, to, type, message) {\n  var error = new Error(message);\n  error._isRouter = true;\n  error.from = from;\n  error.to = to;\n  error.type = type;\n\n  return error\n}\n\nvar propertiesToLog = ['params', 'query', 'hash'];\n\nfunction stringifyRoute (to) {\n  if (typeof to === 'string') { return to }\n  if ('path' in to) { return to.path }\n  var location = {};\n  propertiesToLog.forEach(function (key) {\n    if (key in to) { location[key] = to[key]; }\n  });\n  return JSON.stringify(location, null, 2)\n}\n\nfunction isError (err) {\n  return Object.prototype.toString.call(err).indexOf('Error') > -1\n}\n\nfunction isNavigationFailure (err, errorType) {\n  return (\n    isError(err) &&\n    err._isRouter &&\n    (errorType == null || err.type === errorType)\n  )\n}\n\n/*  */\n\nfunction runQueue (queue, fn, cb) {\n  var step = function (index) {\n    if (index >= queue.length) {\n      cb();\n    } else {\n      if (queue[index]) {\n        fn(queue[index], function () {\n          step(index + 1);\n        });\n      } else {\n        step(index + 1);\n      }\n    }\n  };\n  step(0);\n}\n\n/*  */\n\nfunction resolveAsyncComponents (matched) {\n  return function (to, from, next) {\n    var hasAsync = false;\n    var pending = 0;\n    var error = null;\n\n    flatMapComponents(matched, function (def, _, match, key) {\n      // if it's a function and doesn't have cid attached,\n      // assume it's an async component resolve function.\n      // we are not using Vue's default async resolving mechanism because\n      // we want to halt the navigation until the incoming component has been\n      // resolved.\n      if (typeof def === 'function' && def.cid === undefined) {\n        hasAsync = true;\n        pending++;\n\n        var resolve = once(function (resolvedDef) {\n          if (isESModule(resolvedDef)) {\n            resolvedDef = resolvedDef.default;\n          }\n          // save resolved on async factory in case it's used elsewhere\n          def.resolved = typeof resolvedDef === 'function'\n            ? resolvedDef\n            : _Vue.extend(resolvedDef);\n          match.components[key] = resolvedDef;\n          pending--;\n          if (pending <= 0) {\n            next();\n          }\n        });\n\n        var reject = once(function (reason) {\n          var msg = \"Failed to resolve async component \" + key + \": \" + reason;\n           true && warn(false, msg);\n          if (!error) {\n            error = isError(reason)\n              ? reason\n              : new Error(msg);\n            next(error);\n          }\n        });\n\n        var res;\n        try {\n          res = def(resolve, reject);\n        } catch (e) {\n          reject(e);\n        }\n        if (res) {\n          if (typeof res.then === 'function') {\n            res.then(resolve, reject);\n          } else {\n            // new syntax in Vue 2.3\n            var comp = res.component;\n            if (comp && typeof comp.then === 'function') {\n              comp.then(resolve, reject);\n            }\n          }\n        }\n      }\n    });\n\n    if (!hasAsync) { next(); }\n  }\n}\n\nfunction flatMapComponents (\n  matched,\n  fn\n) {\n  return flatten(matched.map(function (m) {\n    return Object.keys(m.components).map(function (key) { return fn(\n      m.components[key],\n      m.instances[key],\n      m, key\n    ); })\n  }))\n}\n\nfunction flatten (arr) {\n  return Array.prototype.concat.apply([], arr)\n}\n\nvar hasSymbol =\n  typeof Symbol === 'function' &&\n  typeof Symbol.toStringTag === 'symbol';\n\nfunction isESModule (obj) {\n  return obj.__esModule || (hasSymbol && obj[Symbol.toStringTag] === 'Module')\n}\n\n// in Webpack 2, require.ensure now also returns a Promise\n// so the resolve/reject functions may get called an extra time\n// if the user uses an arrow function shorthand that happens to\n// return that Promise.\nfunction once (fn) {\n  var called = false;\n  return function () {\n    var args = [], len = arguments.length;\n    while ( len-- ) args[ len ] = arguments[ len ];\n\n    if (called) { return }\n    called = true;\n    return fn.apply(this, args)\n  }\n}\n\n/*  */\n\nvar History = function History (router, base) {\n  this.router = router;\n  this.base = normalizeBase(base);\n  // start with a route object that stands for \"nowhere\"\n  this.current = START;\n  this.pending = null;\n  this.ready = false;\n  this.readyCbs = [];\n  this.readyErrorCbs = [];\n  this.errorCbs = [];\n  this.listeners = [];\n};\n\nHistory.prototype.listen = function listen (cb) {\n  this.cb = cb;\n};\n\nHistory.prototype.onReady = function onReady (cb, errorCb) {\n  if (this.ready) {\n    cb();\n  } else {\n    this.readyCbs.push(cb);\n    if (errorCb) {\n      this.readyErrorCbs.push(errorCb);\n    }\n  }\n};\n\nHistory.prototype.onError = function onError (errorCb) {\n  this.errorCbs.push(errorCb);\n};\n\nHistory.prototype.transitionTo = function transitionTo (\n  location,\n  onComplete,\n  onAbort\n) {\n    var this$1$1 = this;\n\n  var route;\n  // catch redirect option https://github.com/vuejs/vue-router/issues/3201\n  try {\n    route = this.router.match(location, this.current);\n  } catch (e) {\n    this.errorCbs.forEach(function (cb) {\n      cb(e);\n    });\n    // Exception should still be thrown\n    throw e\n  }\n  var prev = this.current;\n  this.confirmTransition(\n    route,\n    function () {\n      this$1$1.updateRoute(route);\n      onComplete && onComplete(route);\n      this$1$1.ensureURL();\n      this$1$1.router.afterHooks.forEach(function (hook) {\n        hook && hook(route, prev);\n      });\n\n      // fire ready cbs once\n      if (!this$1$1.ready) {\n        this$1$1.ready = true;\n        this$1$1.readyCbs.forEach(function (cb) {\n          cb(route);\n        });\n      }\n    },\n    function (err) {\n      if (onAbort) {\n        onAbort(err);\n      }\n      if (err && !this$1$1.ready) {\n        // Initial redirection should not mark the history as ready yet\n        // because it's triggered by the redirection instead\n        // https://github.com/vuejs/vue-router/issues/3225\n        // https://github.com/vuejs/vue-router/issues/3331\n        if (!isNavigationFailure(err, NavigationFailureType.redirected) || prev !== START) {\n          this$1$1.ready = true;\n          this$1$1.readyErrorCbs.forEach(function (cb) {\n            cb(err);\n          });\n        }\n      }\n    }\n  );\n};\n\nHistory.prototype.confirmTransition = function confirmTransition (route, onComplete, onAbort) {\n    var this$1$1 = this;\n\n  var current = this.current;\n  this.pending = route;\n  var abort = function (err) {\n    // changed after adding errors with\n    // https://github.com/vuejs/vue-router/pull/3047 before that change,\n    // redirect and aborted navigation would produce an err == null\n    if (!isNavigationFailure(err) && isError(err)) {\n      if (this$1$1.errorCbs.length) {\n        this$1$1.errorCbs.forEach(function (cb) {\n          cb(err);\n        });\n      } else {\n        if (true) {\n          warn(false, 'uncaught error during route navigation:');\n        }\n        console.error(err);\n      }\n    }\n    onAbort && onAbort(err);\n  };\n  var lastRouteIndex = route.matched.length - 1;\n  var lastCurrentIndex = current.matched.length - 1;\n  if (\n    isSameRoute(route, current) &&\n    // in the case the route map has been dynamically appended to\n    lastRouteIndex === lastCurrentIndex &&\n    route.matched[lastRouteIndex] === current.matched[lastCurrentIndex]\n  ) {\n    this.ensureURL();\n    if (route.hash) {\n      handleScroll(this.router, current, route, false);\n    }\n    return abort(createNavigationDuplicatedError(current, route))\n  }\n\n  var ref = resolveQueue(\n    this.current.matched,\n    route.matched\n  );\n    var updated = ref.updated;\n    var deactivated = ref.deactivated;\n    var activated = ref.activated;\n\n  var queue = [].concat(\n    // in-component leave guards\n    extractLeaveGuards(deactivated),\n    // global before hooks\n    this.router.beforeHooks,\n    // in-component update hooks\n    extractUpdateHooks(updated),\n    // in-config enter guards\n    activated.map(function (m) { return m.beforeEnter; }),\n    // async components\n    resolveAsyncComponents(activated)\n  );\n\n  var iterator = function (hook, next) {\n    if (this$1$1.pending !== route) {\n      return abort(createNavigationCancelledError(current, route))\n    }\n    try {\n      hook(route, current, function (to) {\n        if (to === false) {\n          // next(false) -> abort navigation, ensure current URL\n          this$1$1.ensureURL(true);\n          abort(createNavigationAbortedError(current, route));\n        } else if (isError(to)) {\n          this$1$1.ensureURL(true);\n          abort(to);\n        } else if (\n          typeof to === 'string' ||\n          (typeof to === 'object' &&\n            (typeof to.path === 'string' || typeof to.name === 'string'))\n        ) {\n          // next('/') or next({ path: '/' }) -> redirect\n          abort(createNavigationRedirectedError(current, route));\n          if (typeof to === 'object' && to.replace) {\n            this$1$1.replace(to);\n          } else {\n            this$1$1.push(to);\n          }\n        } else {\n          // confirm transition and pass on the value\n          next(to);\n        }\n      });\n    } catch (e) {\n      abort(e);\n    }\n  };\n\n  runQueue(queue, iterator, function () {\n    // wait until async components are resolved before\n    // extracting in-component enter guards\n    var enterGuards = extractEnterGuards(activated);\n    var queue = enterGuards.concat(this$1$1.router.resolveHooks);\n    runQueue(queue, iterator, function () {\n      if (this$1$1.pending !== route) {\n        return abort(createNavigationCancelledError(current, route))\n      }\n      this$1$1.pending = null;\n      onComplete(route);\n      if (this$1$1.router.app) {\n        this$1$1.router.app.$nextTick(function () {\n          handleRouteEntered(route);\n        });\n      }\n    });\n  });\n};\n\nHistory.prototype.updateRoute = function updateRoute (route) {\n  this.current = route;\n  this.cb && this.cb(route);\n};\n\nHistory.prototype.setupListeners = function setupListeners () {\n  // Default implementation is empty\n};\n\nHistory.prototype.teardown = function teardown () {\n  // clean up event listeners\n  // https://github.com/vuejs/vue-router/issues/2341\n  this.listeners.forEach(function (cleanupListener) {\n    cleanupListener();\n  });\n  this.listeners = [];\n\n  // reset current history route\n  // https://github.com/vuejs/vue-router/issues/3294\n  this.current = START;\n  this.pending = null;\n};\n\nfunction normalizeBase (base) {\n  if (!base) {\n    if (inBrowser) {\n      // respect <base> tag\n      var baseEl = document.querySelector('base');\n      base = (baseEl && baseEl.getAttribute('href')) || '/';\n      // strip full URL origin\n      base = base.replace(/^https?:\\/\\/[^\\/]+/, '');\n    } else {\n      base = '/';\n    }\n  }\n  // make sure there's the starting slash\n  if (base.charAt(0) !== '/') {\n    base = '/' + base;\n  }\n  // remove trailing slash\n  return base.replace(/\\/$/, '')\n}\n\nfunction resolveQueue (\n  current,\n  next\n) {\n  var i;\n  var max = Math.max(current.length, next.length);\n  for (i = 0; i < max; i++) {\n    if (current[i] !== next[i]) {\n      break\n    }\n  }\n  return {\n    updated: next.slice(0, i),\n    activated: next.slice(i),\n    deactivated: current.slice(i)\n  }\n}\n\nfunction extractGuards (\n  records,\n  name,\n  bind,\n  reverse\n) {\n  var guards = flatMapComponents(records, function (def, instance, match, key) {\n    var guard = extractGuard(def, name);\n    if (guard) {\n      return Array.isArray(guard)\n        ? guard.map(function (guard) { return bind(guard, instance, match, key); })\n        : bind(guard, instance, match, key)\n    }\n  });\n  return flatten(reverse ? guards.reverse() : guards)\n}\n\nfunction extractGuard (\n  def,\n  key\n) {\n  if (typeof def !== 'function') {\n    // extend now so that global mixins are applied.\n    def = _Vue.extend(def);\n  }\n  return def.options[key]\n}\n\nfunction extractLeaveGuards (deactivated) {\n  return extractGuards(deactivated, 'beforeRouteLeave', bindGuard, true)\n}\n\nfunction extractUpdateHooks (updated) {\n  return extractGuards(updated, 'beforeRouteUpdate', bindGuard)\n}\n\nfunction bindGuard (guard, instance) {\n  if (instance) {\n    return function boundRouteGuard () {\n      return guard.apply(instance, arguments)\n    }\n  }\n}\n\nfunction extractEnterGuards (\n  activated\n) {\n  return extractGuards(\n    activated,\n    'beforeRouteEnter',\n    function (guard, _, match, key) {\n      return bindEnterGuard(guard, match, key)\n    }\n  )\n}\n\nfunction bindEnterGuard (\n  guard,\n  match,\n  key\n) {\n  return function routeEnterGuard (to, from, next) {\n    return guard(to, from, function (cb) {\n      if (typeof cb === 'function') {\n        if (!match.enteredCbs[key]) {\n          match.enteredCbs[key] = [];\n        }\n        match.enteredCbs[key].push(cb);\n      }\n      next(cb);\n    })\n  }\n}\n\n/*  */\n\nvar HTML5History = /*@__PURE__*/(function (History) {\n  function HTML5History (router, base) {\n    History.call(this, router, base);\n\n    this._startLocation = getLocation(this.base);\n  }\n\n  if ( History ) HTML5History.__proto__ = History;\n  HTML5History.prototype = Object.create( History && History.prototype );\n  HTML5History.prototype.constructor = HTML5History;\n\n  HTML5History.prototype.setupListeners = function setupListeners () {\n    var this$1$1 = this;\n\n    if (this.listeners.length > 0) {\n      return\n    }\n\n    var router = this.router;\n    var expectScroll = router.options.scrollBehavior;\n    var supportsScroll = supportsPushState && expectScroll;\n\n    if (supportsScroll) {\n      this.listeners.push(setupScroll());\n    }\n\n    var handleRoutingEvent = function () {\n      var current = this$1$1.current;\n\n      // Avoiding first `popstate` event dispatched in some browsers but first\n      // history route not updated since async guard at the same time.\n      var location = getLocation(this$1$1.base);\n      if (this$1$1.current === START && location === this$1$1._startLocation) {\n        return\n      }\n\n      this$1$1.transitionTo(location, function (route) {\n        if (supportsScroll) {\n          handleScroll(router, route, current, true);\n        }\n      });\n    };\n    window.addEventListener('popstate', handleRoutingEvent);\n    this.listeners.push(function () {\n      window.removeEventListener('popstate', handleRoutingEvent);\n    });\n  };\n\n  HTML5History.prototype.go = function go (n) {\n    window.history.go(n);\n  };\n\n  HTML5History.prototype.push = function push (location, onComplete, onAbort) {\n    var this$1$1 = this;\n\n    var ref = this;\n    var fromRoute = ref.current;\n    this.transitionTo(location, function (route) {\n      pushState(cleanPath(this$1$1.base + route.fullPath));\n      handleScroll(this$1$1.router, route, fromRoute, false);\n      onComplete && onComplete(route);\n    }, onAbort);\n  };\n\n  HTML5History.prototype.replace = function replace (location, onComplete, onAbort) {\n    var this$1$1 = this;\n\n    var ref = this;\n    var fromRoute = ref.current;\n    this.transitionTo(location, function (route) {\n      replaceState(cleanPath(this$1$1.base + route.fullPath));\n      handleScroll(this$1$1.router, route, fromRoute, false);\n      onComplete && onComplete(route);\n    }, onAbort);\n  };\n\n  HTML5History.prototype.ensureURL = function ensureURL (push) {\n    if (getLocation(this.base) !== this.current.fullPath) {\n      var current = cleanPath(this.base + this.current.fullPath);\n      push ? pushState(current) : replaceState(current);\n    }\n  };\n\n  HTML5History.prototype.getCurrentLocation = function getCurrentLocation () {\n    return getLocation(this.base)\n  };\n\n  return HTML5History;\n}(History));\n\nfunction getLocation (base) {\n  var path = window.location.pathname;\n  var pathLowerCase = path.toLowerCase();\n  var baseLowerCase = base.toLowerCase();\n  // base=\"/a\" shouldn't turn path=\"/app\" into \"/a/pp\"\n  // https://github.com/vuejs/vue-router/issues/3555\n  // so we ensure the trailing slash in the base\n  if (base && ((pathLowerCase === baseLowerCase) ||\n    (pathLowerCase.indexOf(cleanPath(baseLowerCase + '/')) === 0))) {\n    path = path.slice(base.length);\n  }\n  return (path || '/') + window.location.search + window.location.hash\n}\n\n/*  */\n\nvar HashHistory = /*@__PURE__*/(function (History) {\n  function HashHistory (router, base, fallback) {\n    History.call(this, router, base);\n    // check history fallback deeplinking\n    if (fallback && checkFallback(this.base)) {\n      return\n    }\n    ensureSlash();\n  }\n\n  if ( History ) HashHistory.__proto__ = History;\n  HashHistory.prototype = Object.create( History && History.prototype );\n  HashHistory.prototype.constructor = HashHistory;\n\n  // this is delayed until the app mounts\n  // to avoid the hashchange listener being fired too early\n  HashHistory.prototype.setupListeners = function setupListeners () {\n    var this$1$1 = this;\n\n    if (this.listeners.length > 0) {\n      return\n    }\n\n    var router = this.router;\n    var expectScroll = router.options.scrollBehavior;\n    var supportsScroll = supportsPushState && expectScroll;\n\n    if (supportsScroll) {\n      this.listeners.push(setupScroll());\n    }\n\n    var handleRoutingEvent = function () {\n      var current = this$1$1.current;\n      if (!ensureSlash()) {\n        return\n      }\n      this$1$1.transitionTo(getHash(), function (route) {\n        if (supportsScroll) {\n          handleScroll(this$1$1.router, route, current, true);\n        }\n        if (!supportsPushState) {\n          replaceHash(route.fullPath);\n        }\n      });\n    };\n    var eventType = supportsPushState ? 'popstate' : 'hashchange';\n    window.addEventListener(\n      eventType,\n      handleRoutingEvent\n    );\n    this.listeners.push(function () {\n      window.removeEventListener(eventType, handleRoutingEvent);\n    });\n  };\n\n  HashHistory.prototype.push = function push (location, onComplete, onAbort) {\n    var this$1$1 = this;\n\n    var ref = this;\n    var fromRoute = ref.current;\n    this.transitionTo(\n      location,\n      function (route) {\n        pushHash(route.fullPath);\n        handleScroll(this$1$1.router, route, fromRoute, false);\n        onComplete && onComplete(route);\n      },\n      onAbort\n    );\n  };\n\n  HashHistory.prototype.replace = function replace (location, onComplete, onAbort) {\n    var this$1$1 = this;\n\n    var ref = this;\n    var fromRoute = ref.current;\n    this.transitionTo(\n      location,\n      function (route) {\n        replaceHash(route.fullPath);\n        handleScroll(this$1$1.router, route, fromRoute, false);\n        onComplete && onComplete(route);\n      },\n      onAbort\n    );\n  };\n\n  HashHistory.prototype.go = function go (n) {\n    window.history.go(n);\n  };\n\n  HashHistory.prototype.ensureURL = function ensureURL (push) {\n    var current = this.current.fullPath;\n    if (getHash() !== current) {\n      push ? pushHash(current) : replaceHash(current);\n    }\n  };\n\n  HashHistory.prototype.getCurrentLocation = function getCurrentLocation () {\n    return getHash()\n  };\n\n  return HashHistory;\n}(History));\n\nfunction checkFallback (base) {\n  var location = getLocation(base);\n  if (!/^\\/#/.test(location)) {\n    window.location.replace(cleanPath(base + '/#' + location));\n    return true\n  }\n}\n\nfunction ensureSlash () {\n  var path = getHash();\n  if (path.charAt(0) === '/') {\n    return true\n  }\n  replaceHash('/' + path);\n  return false\n}\n\nfunction getHash () {\n  // We can't use window.location.hash here because it's not\n  // consistent across browsers - Firefox will pre-decode it!\n  var href = window.location.href;\n  var index = href.indexOf('#');\n  // empty path\n  if (index < 0) { return '' }\n\n  href = href.slice(index + 1);\n\n  return href\n}\n\nfunction getUrl (path) {\n  var href = window.location.href;\n  var i = href.indexOf('#');\n  var base = i >= 0 ? href.slice(0, i) : href;\n  return (base + \"#\" + path)\n}\n\nfunction pushHash (path) {\n  if (supportsPushState) {\n    pushState(getUrl(path));\n  } else {\n    window.location.hash = path;\n  }\n}\n\nfunction replaceHash (path) {\n  if (supportsPushState) {\n    replaceState(getUrl(path));\n  } else {\n    window.location.replace(getUrl(path));\n  }\n}\n\n/*  */\n\nvar AbstractHistory = /*@__PURE__*/(function (History) {\n  function AbstractHistory (router, base) {\n    History.call(this, router, base);\n    this.stack = [];\n    this.index = -1;\n  }\n\n  if ( History ) AbstractHistory.__proto__ = History;\n  AbstractHistory.prototype = Object.create( History && History.prototype );\n  AbstractHistory.prototype.constructor = AbstractHistory;\n\n  AbstractHistory.prototype.push = function push (location, onComplete, onAbort) {\n    var this$1$1 = this;\n\n    this.transitionTo(\n      location,\n      function (route) {\n        this$1$1.stack = this$1$1.stack.slice(0, this$1$1.index + 1).concat(route);\n        this$1$1.index++;\n        onComplete && onComplete(route);\n      },\n      onAbort\n    );\n  };\n\n  AbstractHistory.prototype.replace = function replace (location, onComplete, onAbort) {\n    var this$1$1 = this;\n\n    this.transitionTo(\n      location,\n      function (route) {\n        this$1$1.stack = this$1$1.stack.slice(0, this$1$1.index).concat(route);\n        onComplete && onComplete(route);\n      },\n      onAbort\n    );\n  };\n\n  AbstractHistory.prototype.go = function go (n) {\n    var this$1$1 = this;\n\n    var targetIndex = this.index + n;\n    if (targetIndex < 0 || targetIndex >= this.stack.length) {\n      return\n    }\n    var route = this.stack[targetIndex];\n    this.confirmTransition(\n      route,\n      function () {\n        var prev = this$1$1.current;\n        this$1$1.index = targetIndex;\n        this$1$1.updateRoute(route);\n        this$1$1.router.afterHooks.forEach(function (hook) {\n          hook && hook(route, prev);\n        });\n      },\n      function (err) {\n        if (isNavigationFailure(err, NavigationFailureType.duplicated)) {\n          this$1$1.index = targetIndex;\n        }\n      }\n    );\n  };\n\n  AbstractHistory.prototype.getCurrentLocation = function getCurrentLocation () {\n    var current = this.stack[this.stack.length - 1];\n    return current ? current.fullPath : '/'\n  };\n\n  AbstractHistory.prototype.ensureURL = function ensureURL () {\n    // noop\n  };\n\n  return AbstractHistory;\n}(History));\n\n/*  */\n\n\n\nvar VueRouter = function VueRouter (options) {\n  if ( options === void 0 ) options = {};\n\n  if (true) {\n    warn(this instanceof VueRouter, \"Router must be called with the new operator.\");\n  }\n  this.app = null;\n  this.apps = [];\n  this.options = options;\n  this.beforeHooks = [];\n  this.resolveHooks = [];\n  this.afterHooks = [];\n  this.matcher = createMatcher(options.routes || [], this);\n\n  var mode = options.mode || 'hash';\n  this.fallback =\n    mode === 'history' && !supportsPushState && options.fallback !== false;\n  if (this.fallback) {\n    mode = 'hash';\n  }\n  if (!inBrowser) {\n    mode = 'abstract';\n  }\n  this.mode = mode;\n\n  switch (mode) {\n    case 'history':\n      this.history = new HTML5History(this, options.base);\n      break\n    case 'hash':\n      this.history = new HashHistory(this, options.base, this.fallback);\n      break\n    case 'abstract':\n      this.history = new AbstractHistory(this, options.base);\n      break\n    default:\n      if (true) {\n        assert(false, (\"invalid mode: \" + mode));\n      }\n  }\n};\n\nvar prototypeAccessors = { currentRoute: { configurable: true } };\n\nVueRouter.prototype.match = function match (raw, current, redirectedFrom) {\n  return this.matcher.match(raw, current, redirectedFrom)\n};\n\nprototypeAccessors.currentRoute.get = function () {\n  return this.history && this.history.current\n};\n\nVueRouter.prototype.init = function init (app /* Vue component instance */) {\n    var this$1$1 = this;\n\n   true &&\n    assert(\n      install.installed,\n      \"not installed. Make sure to call `Vue.use(VueRouter)` \" +\n        \"before creating root instance.\"\n    );\n\n  this.apps.push(app);\n\n  // set up app destroyed handler\n  // https://github.com/vuejs/vue-router/issues/2639\n  app.$once('hook:destroyed', function () {\n    // clean out app from this.apps array once destroyed\n    var index = this$1$1.apps.indexOf(app);\n    if (index > -1) { this$1$1.apps.splice(index, 1); }\n    // ensure we still have a main app or null if no apps\n    // we do not release the router so it can be reused\n    if (this$1$1.app === app) { this$1$1.app = this$1$1.apps[0] || null; }\n\n    if (!this$1$1.app) { this$1$1.history.teardown(); }\n  });\n\n  // main app previously initialized\n  // return as we don't need to set up new history listener\n  if (this.app) {\n    return\n  }\n\n  this.app = app;\n\n  var history = this.history;\n\n  if (history instanceof HTML5History || history instanceof HashHistory) {\n    var handleInitialScroll = function (routeOrError) {\n      var from = history.current;\n      var expectScroll = this$1$1.options.scrollBehavior;\n      var supportsScroll = supportsPushState && expectScroll;\n\n      if (supportsScroll && 'fullPath' in routeOrError) {\n        handleScroll(this$1$1, routeOrError, from, false);\n      }\n    };\n    var setupListeners = function (routeOrError) {\n      history.setupListeners();\n      handleInitialScroll(routeOrError);\n    };\n    history.transitionTo(\n      history.getCurrentLocation(),\n      setupListeners,\n      setupListeners\n    );\n  }\n\n  history.listen(function (route) {\n    this$1$1.apps.forEach(function (app) {\n      app._route = route;\n    });\n  });\n};\n\nVueRouter.prototype.beforeEach = function beforeEach (fn) {\n  return registerHook(this.beforeHooks, fn)\n};\n\nVueRouter.prototype.beforeResolve = function beforeResolve (fn) {\n  return registerHook(this.resolveHooks, fn)\n};\n\nVueRouter.prototype.afterEach = function afterEach (fn) {\n  return registerHook(this.afterHooks, fn)\n};\n\nVueRouter.prototype.onReady = function onReady (cb, errorCb) {\n  this.history.onReady(cb, errorCb);\n};\n\nVueRouter.prototype.onError = function onError (errorCb) {\n  this.history.onError(errorCb);\n};\n\nVueRouter.prototype.push = function push (location, onComplete, onAbort) {\n    var this$1$1 = this;\n\n  // $flow-disable-line\n  if (!onComplete && !onAbort && typeof Promise !== 'undefined') {\n    return new Promise(function (resolve, reject) {\n      this$1$1.history.push(location, resolve, reject);\n    })\n  } else {\n    this.history.push(location, onComplete, onAbort);\n  }\n};\n\nVueRouter.prototype.replace = function replace (location, onComplete, onAbort) {\n    var this$1$1 = this;\n\n  // $flow-disable-line\n  if (!onComplete && !onAbort && typeof Promise !== 'undefined') {\n    return new Promise(function (resolve, reject) {\n      this$1$1.history.replace(location, resolve, reject);\n    })\n  } else {\n    this.history.replace(location, onComplete, onAbort);\n  }\n};\n\nVueRouter.prototype.go = function go (n) {\n  this.history.go(n);\n};\n\nVueRouter.prototype.back = function back () {\n  this.go(-1);\n};\n\nVueRouter.prototype.forward = function forward () {\n  this.go(1);\n};\n\nVueRouter.prototype.getMatchedComponents = function getMatchedComponents (to) {\n  var route = to\n    ? to.matched\n      ? to\n      : this.resolve(to).route\n    : this.currentRoute;\n  if (!route) {\n    return []\n  }\n  return [].concat.apply(\n    [],\n    route.matched.map(function (m) {\n      return Object.keys(m.components).map(function (key) {\n        return m.components[key]\n      })\n    })\n  )\n};\n\nVueRouter.prototype.resolve = function resolve (\n  to,\n  current,\n  append\n) {\n  current = current || this.history.current;\n  var location = normalizeLocation(to, current, append, this);\n  var route = this.match(location, current);\n  var fullPath = route.redirectedFrom || route.fullPath;\n  var base = this.history.base;\n  var href = createHref(base, fullPath, this.mode);\n  return {\n    location: location,\n    route: route,\n    href: href,\n    // for backwards compat\n    normalizedTo: location,\n    resolved: route\n  }\n};\n\nVueRouter.prototype.getRoutes = function getRoutes () {\n  return this.matcher.getRoutes()\n};\n\nVueRouter.prototype.addRoute = function addRoute (parentOrRoute, route) {\n  this.matcher.addRoute(parentOrRoute, route);\n  if (this.history.current !== START) {\n    this.history.transitionTo(this.history.getCurrentLocation());\n  }\n};\n\nVueRouter.prototype.addRoutes = function addRoutes (routes) {\n  if (true) {\n    warn(false, 'router.addRoutes() is deprecated and has been removed in Vue Router 4. Use router.addRoute() instead.');\n  }\n  this.matcher.addRoutes(routes);\n  if (this.history.current !== START) {\n    this.history.transitionTo(this.history.getCurrentLocation());\n  }\n};\n\nObject.defineProperties( VueRouter.prototype, prototypeAccessors );\n\nvar VueRouter$1 = VueRouter;\n\nfunction registerHook (list, fn) {\n  list.push(fn);\n  return function () {\n    var i = list.indexOf(fn);\n    if (i > -1) { list.splice(i, 1); }\n  }\n}\n\nfunction createHref (base, fullPath, mode) {\n  var path = mode === 'hash' ? '#' + fullPath : fullPath;\n  return base ? cleanPath(base + '/' + path) : path\n}\n\n// We cannot remove this as it would be a breaking change\nVueRouter.install = install;\nVueRouter.version = '3.6.5';\nVueRouter.isNavigationFailure = isNavigationFailure;\nVueRouter.NavigationFailureType = NavigationFailureType;\nVueRouter.START_LOCATION = START;\n\nif (inBrowser && window.Vue) {\n  window.Vue.use(VueRouter);\n}\n\nvar version = '3.6.5';\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvdnVlLXJvdXRlci9kaXN0L3Z1ZS1yb3V0ZXIuZXNtLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLDJDQUEyQztBQUMzQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEI7QUFDOUI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osUUFBUSxJQUFxQztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixJQUFJLEtBQXFDO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDZDQUE2Qzs7QUFFN0M7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTs7QUFFQTtBQUNBLE9BQU87QUFDUCw2QkFBNkIsc0JBQXNCO0FBQ25EO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBLHVDQUF1QztBQUN2QztBQUNBO0FBQ0E7QUFDQSxpQ0FBaUM7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekIsdUJBQXVCOztBQUV2QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QjtBQUN4QjtBQUNBO0FBQ0Esd0NBQXdDO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxrQkFBa0IsMEJBQTBCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCO0FBQy9CO0FBQ0Esd0JBQXdCLGtCQUFrQjtBQUMxQywyQ0FBMkM7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdFQUF3RTs7QUFFeEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0JBQW9COztBQUVwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUssNkJBQTZCO0FBQ2xDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0M7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsSUFBcUM7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esa0JBQWtCLHFCQUFxQjtBQUN2QztBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxNQUFNLElBQXFDO0FBQzNDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLGNBQWMsSUFBcUM7QUFDbkQ7QUFDQTtBQUNBLFNBQVM7QUFDVCxNQUFNO0FBQ047QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0I7QUFDL0I7QUFDQTtBQUNBLE1BQU07QUFDTiwwQkFBMEIsaUNBQWlDO0FBQzNEO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxnQ0FBZ0M7QUFDaEMsc0JBQXNCO0FBQ3RCO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckIsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0EsVUFBVSxLQUFxQztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMLHFCQUFxQjtBQUNyQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwREFBMEQ7QUFDMUQ7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxRQUFRO0FBQ1IsWUFBWSxJQUFxQztBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQyx1QkFBdUI7QUFDeEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsV0FBVztBQUM1QztBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxTQUFTO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLDJDQUEyQztBQUNsRjtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1COztBQUVuQjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEOzs7O0FBSUE7QUFDQTs7QUFFQSxNQUFNLElBQXFDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSxJQUFxQztBQUMvQztBQUNBO0FBQ0E7QUFDQTs7QUFFQSwyQkFBMkIsZ0JBQWdCOztBQUUzQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsRUFBRSxLQUFxQztBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEI7QUFDQTtBQUNBLGdDQUFnQzs7QUFFaEMseUJBQXlCO0FBQ3pCLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxNQUFNLElBQXFDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFd0oiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdnVlLXJvdXRlci9kaXN0L3Z1ZS1yb3V0ZXIuZXNtLmpzPzM0MjMiXSwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gICogdnVlLXJvdXRlciB2My42LjVcbiAgKiAoYykgMjAyMiBFdmFuIFlvdVxuICAqIEBsaWNlbnNlIE1JVFxuICAqL1xuLyogICovXG5cbmZ1bmN0aW9uIGFzc2VydCAoY29uZGl0aW9uLCBtZXNzYWdlKSB7XG4gIGlmICghY29uZGl0aW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKChcIlt2dWUtcm91dGVyXSBcIiArIG1lc3NhZ2UpKVxuICB9XG59XG5cbmZ1bmN0aW9uIHdhcm4gKGNvbmRpdGlvbiwgbWVzc2FnZSkge1xuICBpZiAoIWNvbmRpdGlvbikge1xuICAgIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJiBjb25zb2xlLndhcm4oKFwiW3Z1ZS1yb3V0ZXJdIFwiICsgbWVzc2FnZSkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGV4dGVuZCAoYSwgYikge1xuICBmb3IgKHZhciBrZXkgaW4gYikge1xuICAgIGFba2V5XSA9IGJba2V5XTtcbiAgfVxuICByZXR1cm4gYVxufVxuXG4vKiAgKi9cblxudmFyIGVuY29kZVJlc2VydmVSRSA9IC9bIScoKSpdL2c7XG52YXIgZW5jb2RlUmVzZXJ2ZVJlcGxhY2VyID0gZnVuY3Rpb24gKGMpIHsgcmV0dXJuICclJyArIGMuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNik7IH07XG52YXIgY29tbWFSRSA9IC8lMkMvZztcblxuLy8gZml4ZWQgZW5jb2RlVVJJQ29tcG9uZW50IHdoaWNoIGlzIG1vcmUgY29uZm9ybWFudCB0byBSRkMzOTg2OlxuLy8gLSBlc2NhcGVzIFshJygpKl1cbi8vIC0gcHJlc2VydmUgY29tbWFzXG52YXIgZW5jb2RlID0gZnVuY3Rpb24gKHN0cikgeyByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHN0cilcbiAgICAucmVwbGFjZShlbmNvZGVSZXNlcnZlUkUsIGVuY29kZVJlc2VydmVSZXBsYWNlcilcbiAgICAucmVwbGFjZShjb21tYVJFLCAnLCcpOyB9O1xuXG5mdW5jdGlvbiBkZWNvZGUgKHN0cikge1xuICB0cnkge1xuICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoc3RyKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgd2FybihmYWxzZSwgKFwiRXJyb3IgZGVjb2RpbmcgXFxcIlwiICsgc3RyICsgXCJcXFwiLiBMZWF2aW5nIGl0IGludGFjdC5cIikpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gc3RyXG59XG5cbmZ1bmN0aW9uIHJlc29sdmVRdWVyeSAoXG4gIHF1ZXJ5LFxuICBleHRyYVF1ZXJ5LFxuICBfcGFyc2VRdWVyeVxuKSB7XG4gIGlmICggZXh0cmFRdWVyeSA9PT0gdm9pZCAwICkgZXh0cmFRdWVyeSA9IHt9O1xuXG4gIHZhciBwYXJzZSA9IF9wYXJzZVF1ZXJ5IHx8IHBhcnNlUXVlcnk7XG4gIHZhciBwYXJzZWRRdWVyeTtcbiAgdHJ5IHtcbiAgICBwYXJzZWRRdWVyeSA9IHBhcnNlKHF1ZXJ5IHx8ICcnKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihmYWxzZSwgZS5tZXNzYWdlKTtcbiAgICBwYXJzZWRRdWVyeSA9IHt9O1xuICB9XG4gIGZvciAodmFyIGtleSBpbiBleHRyYVF1ZXJ5KSB7XG4gICAgdmFyIHZhbHVlID0gZXh0cmFRdWVyeVtrZXldO1xuICAgIHBhcnNlZFF1ZXJ5W2tleV0gPSBBcnJheS5pc0FycmF5KHZhbHVlKVxuICAgICAgPyB2YWx1ZS5tYXAoY2FzdFF1ZXJ5UGFyYW1WYWx1ZSlcbiAgICAgIDogY2FzdFF1ZXJ5UGFyYW1WYWx1ZSh2YWx1ZSk7XG4gIH1cbiAgcmV0dXJuIHBhcnNlZFF1ZXJ5XG59XG5cbnZhciBjYXN0UXVlcnlQYXJhbVZhbHVlID0gZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiAodmFsdWUgPT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnID8gdmFsdWUgOiBTdHJpbmcodmFsdWUpKTsgfTtcblxuZnVuY3Rpb24gcGFyc2VRdWVyeSAocXVlcnkpIHtcbiAgdmFyIHJlcyA9IHt9O1xuXG4gIHF1ZXJ5ID0gcXVlcnkudHJpbSgpLnJlcGxhY2UoL14oXFw/fCN8JikvLCAnJyk7XG5cbiAgaWYgKCFxdWVyeSkge1xuICAgIHJldHVybiByZXNcbiAgfVxuXG4gIHF1ZXJ5LnNwbGl0KCcmJykuZm9yRWFjaChmdW5jdGlvbiAocGFyYW0pIHtcbiAgICB2YXIgcGFydHMgPSBwYXJhbS5yZXBsYWNlKC9cXCsvZywgJyAnKS5zcGxpdCgnPScpO1xuICAgIHZhciBrZXkgPSBkZWNvZGUocGFydHMuc2hpZnQoKSk7XG4gICAgdmFyIHZhbCA9IHBhcnRzLmxlbmd0aCA+IDAgPyBkZWNvZGUocGFydHMuam9pbignPScpKSA6IG51bGw7XG5cbiAgICBpZiAocmVzW2tleV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVzW2tleV0gPSB2YWw7XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHJlc1trZXldKSkge1xuICAgICAgcmVzW2tleV0ucHVzaCh2YWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXNba2V5XSA9IFtyZXNba2V5XSwgdmFsXTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiByZXNcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5UXVlcnkgKG9iaikge1xuICB2YXIgcmVzID0gb2JqXG4gICAgPyBPYmplY3Qua2V5cyhvYmopXG4gICAgICAubWFwKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgdmFyIHZhbCA9IG9ialtrZXldO1xuXG4gICAgICAgIGlmICh2YWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiAnJ1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbCA9PT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBlbmNvZGUoa2V5KVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICAgICAgICB2YWwuZm9yRWFjaChmdW5jdGlvbiAodmFsMikge1xuICAgICAgICAgICAgaWYgKHZhbDIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh2YWwyID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGVuY29kZShrZXkpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGVuY29kZShrZXkpICsgJz0nICsgZW5jb2RlKHZhbDIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0LmpvaW4oJyYnKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGVuY29kZShrZXkpICsgJz0nICsgZW5jb2RlKHZhbClcbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4Lmxlbmd0aCA+IDA7IH0pXG4gICAgICAuam9pbignJicpXG4gICAgOiBudWxsO1xuICByZXR1cm4gcmVzID8gKFwiP1wiICsgcmVzKSA6ICcnXG59XG5cbi8qICAqL1xuXG52YXIgdHJhaWxpbmdTbGFzaFJFID0gL1xcLz8kLztcblxuZnVuY3Rpb24gY3JlYXRlUm91dGUgKFxuICByZWNvcmQsXG4gIGxvY2F0aW9uLFxuICByZWRpcmVjdGVkRnJvbSxcbiAgcm91dGVyXG4pIHtcbiAgdmFyIHN0cmluZ2lmeVF1ZXJ5ID0gcm91dGVyICYmIHJvdXRlci5vcHRpb25zLnN0cmluZ2lmeVF1ZXJ5O1xuXG4gIHZhciBxdWVyeSA9IGxvY2F0aW9uLnF1ZXJ5IHx8IHt9O1xuICB0cnkge1xuICAgIHF1ZXJ5ID0gY2xvbmUocXVlcnkpO1xuICB9IGNhdGNoIChlKSB7fVxuXG4gIHZhciByb3V0ZSA9IHtcbiAgICBuYW1lOiBsb2NhdGlvbi5uYW1lIHx8IChyZWNvcmQgJiYgcmVjb3JkLm5hbWUpLFxuICAgIG1ldGE6IChyZWNvcmQgJiYgcmVjb3JkLm1ldGEpIHx8IHt9LFxuICAgIHBhdGg6IGxvY2F0aW9uLnBhdGggfHwgJy8nLFxuICAgIGhhc2g6IGxvY2F0aW9uLmhhc2ggfHwgJycsXG4gICAgcXVlcnk6IHF1ZXJ5LFxuICAgIHBhcmFtczogbG9jYXRpb24ucGFyYW1zIHx8IHt9LFxuICAgIGZ1bGxQYXRoOiBnZXRGdWxsUGF0aChsb2NhdGlvbiwgc3RyaW5naWZ5UXVlcnkpLFxuICAgIG1hdGNoZWQ6IHJlY29yZCA/IGZvcm1hdE1hdGNoKHJlY29yZCkgOiBbXVxuICB9O1xuICBpZiAocmVkaXJlY3RlZEZyb20pIHtcbiAgICByb3V0ZS5yZWRpcmVjdGVkRnJvbSA9IGdldEZ1bGxQYXRoKHJlZGlyZWN0ZWRGcm9tLCBzdHJpbmdpZnlRdWVyeSk7XG4gIH1cbiAgcmV0dXJuIE9iamVjdC5mcmVlemUocm91dGUpXG59XG5cbmZ1bmN0aW9uIGNsb25lICh2YWx1ZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWUubWFwKGNsb25lKVxuICB9IGVsc2UgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICB2YXIgcmVzID0ge307XG4gICAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgICByZXNba2V5XSA9IGNsb25lKHZhbHVlW2tleV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cbn1cblxuLy8gdGhlIHN0YXJ0aW5nIHJvdXRlIHRoYXQgcmVwcmVzZW50cyB0aGUgaW5pdGlhbCBzdGF0ZVxudmFyIFNUQVJUID0gY3JlYXRlUm91dGUobnVsbCwge1xuICBwYXRoOiAnLydcbn0pO1xuXG5mdW5jdGlvbiBmb3JtYXRNYXRjaCAocmVjb3JkKSB7XG4gIHZhciByZXMgPSBbXTtcbiAgd2hpbGUgKHJlY29yZCkge1xuICAgIHJlcy51bnNoaWZ0KHJlY29yZCk7XG4gICAgcmVjb3JkID0gcmVjb3JkLnBhcmVudDtcbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbmZ1bmN0aW9uIGdldEZ1bGxQYXRoIChcbiAgcmVmLFxuICBfc3RyaW5naWZ5UXVlcnlcbikge1xuICB2YXIgcGF0aCA9IHJlZi5wYXRoO1xuICB2YXIgcXVlcnkgPSByZWYucXVlcnk7IGlmICggcXVlcnkgPT09IHZvaWQgMCApIHF1ZXJ5ID0ge307XG4gIHZhciBoYXNoID0gcmVmLmhhc2g7IGlmICggaGFzaCA9PT0gdm9pZCAwICkgaGFzaCA9ICcnO1xuXG4gIHZhciBzdHJpbmdpZnkgPSBfc3RyaW5naWZ5UXVlcnkgfHwgc3RyaW5naWZ5UXVlcnk7XG4gIHJldHVybiAocGF0aCB8fCAnLycpICsgc3RyaW5naWZ5KHF1ZXJ5KSArIGhhc2hcbn1cblxuZnVuY3Rpb24gaXNTYW1lUm91dGUgKGEsIGIsIG9ubHlQYXRoKSB7XG4gIGlmIChiID09PSBTVEFSVCkge1xuICAgIHJldHVybiBhID09PSBiXG4gIH0gZWxzZSBpZiAoIWIpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfSBlbHNlIGlmIChhLnBhdGggJiYgYi5wYXRoKSB7XG4gICAgcmV0dXJuIGEucGF0aC5yZXBsYWNlKHRyYWlsaW5nU2xhc2hSRSwgJycpID09PSBiLnBhdGgucmVwbGFjZSh0cmFpbGluZ1NsYXNoUkUsICcnKSAmJiAob25seVBhdGggfHxcbiAgICAgIGEuaGFzaCA9PT0gYi5oYXNoICYmXG4gICAgICBpc09iamVjdEVxdWFsKGEucXVlcnksIGIucXVlcnkpKVxuICB9IGVsc2UgaWYgKGEubmFtZSAmJiBiLm5hbWUpIHtcbiAgICByZXR1cm4gKFxuICAgICAgYS5uYW1lID09PSBiLm5hbWUgJiZcbiAgICAgIChvbmx5UGF0aCB8fCAoXG4gICAgICAgIGEuaGFzaCA9PT0gYi5oYXNoICYmXG4gICAgICBpc09iamVjdEVxdWFsKGEucXVlcnksIGIucXVlcnkpICYmXG4gICAgICBpc09iamVjdEVxdWFsKGEucGFyYW1zLCBiLnBhcmFtcykpXG4gICAgICApXG4gICAgKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzT2JqZWN0RXF1YWwgKGEsIGIpIHtcbiAgaWYgKCBhID09PSB2b2lkIDAgKSBhID0ge307XG4gIGlmICggYiA9PT0gdm9pZCAwICkgYiA9IHt9O1xuXG4gIC8vIGhhbmRsZSBudWxsIHZhbHVlICMxNTY2XG4gIGlmICghYSB8fCAhYikgeyByZXR1cm4gYSA9PT0gYiB9XG4gIHZhciBhS2V5cyA9IE9iamVjdC5rZXlzKGEpLnNvcnQoKTtcbiAgdmFyIGJLZXlzID0gT2JqZWN0LmtleXMoYikuc29ydCgpO1xuICBpZiAoYUtleXMubGVuZ3RoICE9PSBiS2V5cy5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICByZXR1cm4gYUtleXMuZXZlcnkoZnVuY3Rpb24gKGtleSwgaSkge1xuICAgIHZhciBhVmFsID0gYVtrZXldO1xuICAgIHZhciBiS2V5ID0gYktleXNbaV07XG4gICAgaWYgKGJLZXkgIT09IGtleSkgeyByZXR1cm4gZmFsc2UgfVxuICAgIHZhciBiVmFsID0gYltrZXldO1xuICAgIC8vIHF1ZXJ5IHZhbHVlcyBjYW4gYmUgbnVsbCBhbmQgdW5kZWZpbmVkXG4gICAgaWYgKGFWYWwgPT0gbnVsbCB8fCBiVmFsID09IG51bGwpIHsgcmV0dXJuIGFWYWwgPT09IGJWYWwgfVxuICAgIC8vIGNoZWNrIG5lc3RlZCBlcXVhbGl0eVxuICAgIGlmICh0eXBlb2YgYVZhbCA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIGJWYWwgPT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3RFcXVhbChhVmFsLCBiVmFsKVxuICAgIH1cbiAgICByZXR1cm4gU3RyaW5nKGFWYWwpID09PSBTdHJpbmcoYlZhbClcbiAgfSlcbn1cblxuZnVuY3Rpb24gaXNJbmNsdWRlZFJvdXRlIChjdXJyZW50LCB0YXJnZXQpIHtcbiAgcmV0dXJuIChcbiAgICBjdXJyZW50LnBhdGgucmVwbGFjZSh0cmFpbGluZ1NsYXNoUkUsICcvJykuaW5kZXhPZihcbiAgICAgIHRhcmdldC5wYXRoLnJlcGxhY2UodHJhaWxpbmdTbGFzaFJFLCAnLycpXG4gICAgKSA9PT0gMCAmJlxuICAgICghdGFyZ2V0Lmhhc2ggfHwgY3VycmVudC5oYXNoID09PSB0YXJnZXQuaGFzaCkgJiZcbiAgICBxdWVyeUluY2x1ZGVzKGN1cnJlbnQucXVlcnksIHRhcmdldC5xdWVyeSlcbiAgKVxufVxuXG5mdW5jdGlvbiBxdWVyeUluY2x1ZGVzIChjdXJyZW50LCB0YXJnZXQpIHtcbiAgZm9yICh2YXIga2V5IGluIHRhcmdldCkge1xuICAgIGlmICghKGtleSBpbiBjdXJyZW50KSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlXG59XG5cbmZ1bmN0aW9uIGhhbmRsZVJvdXRlRW50ZXJlZCAocm91dGUpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3V0ZS5tYXRjaGVkLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHJlY29yZCA9IHJvdXRlLm1hdGNoZWRbaV07XG4gICAgZm9yICh2YXIgbmFtZSBpbiByZWNvcmQuaW5zdGFuY2VzKSB7XG4gICAgICB2YXIgaW5zdGFuY2UgPSByZWNvcmQuaW5zdGFuY2VzW25hbWVdO1xuICAgICAgdmFyIGNicyA9IHJlY29yZC5lbnRlcmVkQ2JzW25hbWVdO1xuICAgICAgaWYgKCFpbnN0YW5jZSB8fCAhY2JzKSB7IGNvbnRpbnVlIH1cbiAgICAgIGRlbGV0ZSByZWNvcmQuZW50ZXJlZENic1tuYW1lXTtcbiAgICAgIGZvciAodmFyIGkkMSA9IDA7IGkkMSA8IGNicy5sZW5ndGg7IGkkMSsrKSB7XG4gICAgICAgIGlmICghaW5zdGFuY2UuX2lzQmVpbmdEZXN0cm95ZWQpIHsgY2JzW2kkMV0oaW5zdGFuY2UpOyB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciBWaWV3ID0ge1xuICBuYW1lOiAnUm91dGVyVmlldycsXG4gIGZ1bmN0aW9uYWw6IHRydWUsXG4gIHByb3BzOiB7XG4gICAgbmFtZToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2RlZmF1bHQnXG4gICAgfVxuICB9LFxuICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlciAoXywgcmVmKSB7XG4gICAgdmFyIHByb3BzID0gcmVmLnByb3BzO1xuICAgIHZhciBjaGlsZHJlbiA9IHJlZi5jaGlsZHJlbjtcbiAgICB2YXIgcGFyZW50ID0gcmVmLnBhcmVudDtcbiAgICB2YXIgZGF0YSA9IHJlZi5kYXRhO1xuXG4gICAgLy8gdXNlZCBieSBkZXZ0b29scyB0byBkaXNwbGF5IGEgcm91dGVyLXZpZXcgYmFkZ2VcbiAgICBkYXRhLnJvdXRlclZpZXcgPSB0cnVlO1xuXG4gICAgLy8gZGlyZWN0bHkgdXNlIHBhcmVudCBjb250ZXh0J3MgY3JlYXRlRWxlbWVudCgpIGZ1bmN0aW9uXG4gICAgLy8gc28gdGhhdCBjb21wb25lbnRzIHJlbmRlcmVkIGJ5IHJvdXRlci12aWV3IGNhbiByZXNvbHZlIG5hbWVkIHNsb3RzXG4gICAgdmFyIGggPSBwYXJlbnQuJGNyZWF0ZUVsZW1lbnQ7XG4gICAgdmFyIG5hbWUgPSBwcm9wcy5uYW1lO1xuICAgIHZhciByb3V0ZSA9IHBhcmVudC4kcm91dGU7XG4gICAgdmFyIGNhY2hlID0gcGFyZW50Ll9yb3V0ZXJWaWV3Q2FjaGUgfHwgKHBhcmVudC5fcm91dGVyVmlld0NhY2hlID0ge30pO1xuXG4gICAgLy8gZGV0ZXJtaW5lIGN1cnJlbnQgdmlldyBkZXB0aCwgYWxzbyBjaGVjayB0byBzZWUgaWYgdGhlIHRyZWVcbiAgICAvLyBoYXMgYmVlbiB0b2dnbGVkIGluYWN0aXZlIGJ1dCBrZXB0LWFsaXZlLlxuICAgIHZhciBkZXB0aCA9IDA7XG4gICAgdmFyIGluYWN0aXZlID0gZmFsc2U7XG4gICAgd2hpbGUgKHBhcmVudCAmJiBwYXJlbnQuX3JvdXRlclJvb3QgIT09IHBhcmVudCkge1xuICAgICAgdmFyIHZub2RlRGF0YSA9IHBhcmVudC4kdm5vZGUgPyBwYXJlbnQuJHZub2RlLmRhdGEgOiB7fTtcbiAgICAgIGlmICh2bm9kZURhdGEucm91dGVyVmlldykge1xuICAgICAgICBkZXB0aCsrO1xuICAgICAgfVxuICAgICAgaWYgKHZub2RlRGF0YS5rZWVwQWxpdmUgJiYgcGFyZW50Ll9kaXJlY3RJbmFjdGl2ZSAmJiBwYXJlbnQuX2luYWN0aXZlKSB7XG4gICAgICAgIGluYWN0aXZlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHBhcmVudCA9IHBhcmVudC4kcGFyZW50O1xuICAgIH1cbiAgICBkYXRhLnJvdXRlclZpZXdEZXB0aCA9IGRlcHRoO1xuXG4gICAgLy8gcmVuZGVyIHByZXZpb3VzIHZpZXcgaWYgdGhlIHRyZWUgaXMgaW5hY3RpdmUgYW5kIGtlcHQtYWxpdmVcbiAgICBpZiAoaW5hY3RpdmUpIHtcbiAgICAgIHZhciBjYWNoZWREYXRhID0gY2FjaGVbbmFtZV07XG4gICAgICB2YXIgY2FjaGVkQ29tcG9uZW50ID0gY2FjaGVkRGF0YSAmJiBjYWNoZWREYXRhLmNvbXBvbmVudDtcbiAgICAgIGlmIChjYWNoZWRDb21wb25lbnQpIHtcbiAgICAgICAgLy8gIzIzMDFcbiAgICAgICAgLy8gcGFzcyBwcm9wc1xuICAgICAgICBpZiAoY2FjaGVkRGF0YS5jb25maWdQcm9wcykge1xuICAgICAgICAgIGZpbGxQcm9wc2luRGF0YShjYWNoZWRDb21wb25lbnQsIGRhdGEsIGNhY2hlZERhdGEucm91dGUsIGNhY2hlZERhdGEuY29uZmlnUHJvcHMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBoKGNhY2hlZENvbXBvbmVudCwgZGF0YSwgY2hpbGRyZW4pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyByZW5kZXIgcHJldmlvdXMgZW1wdHkgdmlld1xuICAgICAgICByZXR1cm4gaCgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIG1hdGNoZWQgPSByb3V0ZS5tYXRjaGVkW2RlcHRoXTtcbiAgICB2YXIgY29tcG9uZW50ID0gbWF0Y2hlZCAmJiBtYXRjaGVkLmNvbXBvbmVudHNbbmFtZV07XG5cbiAgICAvLyByZW5kZXIgZW1wdHkgbm9kZSBpZiBubyBtYXRjaGVkIHJvdXRlIG9yIG5vIGNvbmZpZyBjb21wb25lbnRcbiAgICBpZiAoIW1hdGNoZWQgfHwgIWNvbXBvbmVudCkge1xuICAgICAgY2FjaGVbbmFtZV0gPSBudWxsO1xuICAgICAgcmV0dXJuIGgoKVxuICAgIH1cblxuICAgIC8vIGNhY2hlIGNvbXBvbmVudFxuICAgIGNhY2hlW25hbWVdID0geyBjb21wb25lbnQ6IGNvbXBvbmVudCB9O1xuXG4gICAgLy8gYXR0YWNoIGluc3RhbmNlIHJlZ2lzdHJhdGlvbiBob29rXG4gICAgLy8gdGhpcyB3aWxsIGJlIGNhbGxlZCBpbiB0aGUgaW5zdGFuY2UncyBpbmplY3RlZCBsaWZlY3ljbGUgaG9va3NcbiAgICBkYXRhLnJlZ2lzdGVyUm91dGVJbnN0YW5jZSA9IGZ1bmN0aW9uICh2bSwgdmFsKSB7XG4gICAgICAvLyB2YWwgY291bGQgYmUgdW5kZWZpbmVkIGZvciB1bnJlZ2lzdHJhdGlvblxuICAgICAgdmFyIGN1cnJlbnQgPSBtYXRjaGVkLmluc3RhbmNlc1tuYW1lXTtcbiAgICAgIGlmIChcbiAgICAgICAgKHZhbCAmJiBjdXJyZW50ICE9PSB2bSkgfHxcbiAgICAgICAgKCF2YWwgJiYgY3VycmVudCA9PT0gdm0pXG4gICAgICApIHtcbiAgICAgICAgbWF0Y2hlZC5pbnN0YW5jZXNbbmFtZV0gPSB2YWw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gYWxzbyByZWdpc3RlciBpbnN0YW5jZSBpbiBwcmVwYXRjaCBob29rXG4gICAgLy8gaW4gY2FzZSB0aGUgc2FtZSBjb21wb25lbnQgaW5zdGFuY2UgaXMgcmV1c2VkIGFjcm9zcyBkaWZmZXJlbnQgcm91dGVzXG4gICAgOyhkYXRhLmhvb2sgfHwgKGRhdGEuaG9vayA9IHt9KSkucHJlcGF0Y2ggPSBmdW5jdGlvbiAoXywgdm5vZGUpIHtcbiAgICAgIG1hdGNoZWQuaW5zdGFuY2VzW25hbWVdID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2U7XG4gICAgfTtcblxuICAgIC8vIHJlZ2lzdGVyIGluc3RhbmNlIGluIGluaXQgaG9va1xuICAgIC8vIGluIGNhc2Uga2VwdC1hbGl2ZSBjb21wb25lbnQgYmUgYWN0aXZlZCB3aGVuIHJvdXRlcyBjaGFuZ2VkXG4gICAgZGF0YS5ob29rLmluaXQgPSBmdW5jdGlvbiAodm5vZGUpIHtcbiAgICAgIGlmICh2bm9kZS5kYXRhLmtlZXBBbGl2ZSAmJlxuICAgICAgICB2bm9kZS5jb21wb25lbnRJbnN0YW5jZSAmJlxuICAgICAgICB2bm9kZS5jb21wb25lbnRJbnN0YW5jZSAhPT0gbWF0Y2hlZC5pbnN0YW5jZXNbbmFtZV1cbiAgICAgICkge1xuICAgICAgICBtYXRjaGVkLmluc3RhbmNlc1tuYW1lXSA9IHZub2RlLmNvbXBvbmVudEluc3RhbmNlO1xuICAgICAgfVxuXG4gICAgICAvLyBpZiB0aGUgcm91dGUgdHJhbnNpdGlvbiBoYXMgYWxyZWFkeSBiZWVuIGNvbmZpcm1lZCB0aGVuIHdlIHdlcmVuJ3RcbiAgICAgIC8vIGFibGUgdG8gY2FsbCB0aGUgY2JzIGR1cmluZyBjb25maXJtYXRpb24gYXMgdGhlIGNvbXBvbmVudCB3YXMgbm90XG4gICAgICAvLyByZWdpc3RlcmVkIHlldCwgc28gd2UgY2FsbCBpdCBoZXJlLlxuICAgICAgaGFuZGxlUm91dGVFbnRlcmVkKHJvdXRlKTtcbiAgICB9O1xuXG4gICAgdmFyIGNvbmZpZ1Byb3BzID0gbWF0Y2hlZC5wcm9wcyAmJiBtYXRjaGVkLnByb3BzW25hbWVdO1xuICAgIC8vIHNhdmUgcm91dGUgYW5kIGNvbmZpZ1Byb3BzIGluIGNhY2hlXG4gICAgaWYgKGNvbmZpZ1Byb3BzKSB7XG4gICAgICBleHRlbmQoY2FjaGVbbmFtZV0sIHtcbiAgICAgICAgcm91dGU6IHJvdXRlLFxuICAgICAgICBjb25maWdQcm9wczogY29uZmlnUHJvcHNcbiAgICAgIH0pO1xuICAgICAgZmlsbFByb3BzaW5EYXRhKGNvbXBvbmVudCwgZGF0YSwgcm91dGUsIGNvbmZpZ1Byb3BzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaChjb21wb25lbnQsIGRhdGEsIGNoaWxkcmVuKVxuICB9XG59O1xuXG5mdW5jdGlvbiBmaWxsUHJvcHNpbkRhdGEgKGNvbXBvbmVudCwgZGF0YSwgcm91dGUsIGNvbmZpZ1Byb3BzKSB7XG4gIC8vIHJlc29sdmUgcHJvcHNcbiAgdmFyIHByb3BzVG9QYXNzID0gZGF0YS5wcm9wcyA9IHJlc29sdmVQcm9wcyhyb3V0ZSwgY29uZmlnUHJvcHMpO1xuICBpZiAocHJvcHNUb1Bhc3MpIHtcbiAgICAvLyBjbG9uZSB0byBwcmV2ZW50IG11dGF0aW9uXG4gICAgcHJvcHNUb1Bhc3MgPSBkYXRhLnByb3BzID0gZXh0ZW5kKHt9LCBwcm9wc1RvUGFzcyk7XG4gICAgLy8gcGFzcyBub24tZGVjbGFyZWQgcHJvcHMgYXMgYXR0cnNcbiAgICB2YXIgYXR0cnMgPSBkYXRhLmF0dHJzID0gZGF0YS5hdHRycyB8fCB7fTtcbiAgICBmb3IgKHZhciBrZXkgaW4gcHJvcHNUb1Bhc3MpIHtcbiAgICAgIGlmICghY29tcG9uZW50LnByb3BzIHx8ICEoa2V5IGluIGNvbXBvbmVudC5wcm9wcykpIHtcbiAgICAgICAgYXR0cnNba2V5XSA9IHByb3BzVG9QYXNzW2tleV07XG4gICAgICAgIGRlbGV0ZSBwcm9wc1RvUGFzc1trZXldO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiByZXNvbHZlUHJvcHMgKHJvdXRlLCBjb25maWcpIHtcbiAgc3dpdGNoICh0eXBlb2YgY29uZmlnKSB7XG4gICAgY2FzZSAndW5kZWZpbmVkJzpcbiAgICAgIHJldHVyblxuICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICByZXR1cm4gY29uZmlnXG4gICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAgcmV0dXJuIGNvbmZpZyhyb3V0ZSlcbiAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIHJldHVybiBjb25maWcgPyByb3V0ZS5wYXJhbXMgOiB1bmRlZmluZWRcbiAgICBkZWZhdWx0OlxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICBcInByb3BzIGluIFxcXCJcIiArIChyb3V0ZS5wYXRoKSArIFwiXFxcIiBpcyBhIFwiICsgKHR5cGVvZiBjb25maWcpICsgXCIsIFwiICtcbiAgICAgICAgICBcImV4cGVjdGluZyBhbiBvYmplY3QsIGZ1bmN0aW9uIG9yIGJvb2xlYW4uXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgfVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gcmVzb2x2ZVBhdGggKFxuICByZWxhdGl2ZSxcbiAgYmFzZSxcbiAgYXBwZW5kXG4pIHtcbiAgdmFyIGZpcnN0Q2hhciA9IHJlbGF0aXZlLmNoYXJBdCgwKTtcbiAgaWYgKGZpcnN0Q2hhciA9PT0gJy8nKSB7XG4gICAgcmV0dXJuIHJlbGF0aXZlXG4gIH1cblxuICBpZiAoZmlyc3RDaGFyID09PSAnPycgfHwgZmlyc3RDaGFyID09PSAnIycpIHtcbiAgICByZXR1cm4gYmFzZSArIHJlbGF0aXZlXG4gIH1cblxuICB2YXIgc3RhY2sgPSBiYXNlLnNwbGl0KCcvJyk7XG5cbiAgLy8gcmVtb3ZlIHRyYWlsaW5nIHNlZ21lbnQgaWY6XG4gIC8vIC0gbm90IGFwcGVuZGluZ1xuICAvLyAtIGFwcGVuZGluZyB0byB0cmFpbGluZyBzbGFzaCAobGFzdCBzZWdtZW50IGlzIGVtcHR5KVxuICBpZiAoIWFwcGVuZCB8fCAhc3RhY2tbc3RhY2subGVuZ3RoIC0gMV0pIHtcbiAgICBzdGFjay5wb3AoKTtcbiAgfVxuXG4gIC8vIHJlc29sdmUgcmVsYXRpdmUgcGF0aFxuICB2YXIgc2VnbWVudHMgPSByZWxhdGl2ZS5yZXBsYWNlKC9eXFwvLywgJycpLnNwbGl0KCcvJyk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc2VnbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgc2VnbWVudCA9IHNlZ21lbnRzW2ldO1xuICAgIGlmIChzZWdtZW50ID09PSAnLi4nKSB7XG4gICAgICBzdGFjay5wb3AoKTtcbiAgICB9IGVsc2UgaWYgKHNlZ21lbnQgIT09ICcuJykge1xuICAgICAgc3RhY2sucHVzaChzZWdtZW50KTtcbiAgICB9XG4gIH1cblxuICAvLyBlbnN1cmUgbGVhZGluZyBzbGFzaFxuICBpZiAoc3RhY2tbMF0gIT09ICcnKSB7XG4gICAgc3RhY2sudW5zaGlmdCgnJyk7XG4gIH1cblxuICByZXR1cm4gc3RhY2suam9pbignLycpXG59XG5cbmZ1bmN0aW9uIHBhcnNlUGF0aCAocGF0aCkge1xuICB2YXIgaGFzaCA9ICcnO1xuICB2YXIgcXVlcnkgPSAnJztcblxuICB2YXIgaGFzaEluZGV4ID0gcGF0aC5pbmRleE9mKCcjJyk7XG4gIGlmIChoYXNoSW5kZXggPj0gMCkge1xuICAgIGhhc2ggPSBwYXRoLnNsaWNlKGhhc2hJbmRleCk7XG4gICAgcGF0aCA9IHBhdGguc2xpY2UoMCwgaGFzaEluZGV4KTtcbiAgfVxuXG4gIHZhciBxdWVyeUluZGV4ID0gcGF0aC5pbmRleE9mKCc/Jyk7XG4gIGlmIChxdWVyeUluZGV4ID49IDApIHtcbiAgICBxdWVyeSA9IHBhdGguc2xpY2UocXVlcnlJbmRleCArIDEpO1xuICAgIHBhdGggPSBwYXRoLnNsaWNlKDAsIHF1ZXJ5SW5kZXgpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBwYXRoOiBwYXRoLFxuICAgIHF1ZXJ5OiBxdWVyeSxcbiAgICBoYXNoOiBoYXNoXG4gIH1cbn1cblxuZnVuY3Rpb24gY2xlYW5QYXRoIChwYXRoKSB7XG4gIHJldHVybiBwYXRoLnJlcGxhY2UoL1xcLyg/OlxccypcXC8pKy9nLCAnLycpXG59XG5cbnZhciBpc2FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoYXJyKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJyKSA9PSAnW29iamVjdCBBcnJheV0nO1xufTtcblxuLyoqXG4gKiBFeHBvc2UgYHBhdGhUb1JlZ2V4cGAuXG4gKi9cbnZhciBwYXRoVG9SZWdleHBfMSA9IHBhdGhUb1JlZ2V4cDtcbnZhciBwYXJzZV8xID0gcGFyc2U7XG52YXIgY29tcGlsZV8xID0gY29tcGlsZTtcbnZhciB0b2tlbnNUb0Z1bmN0aW9uXzEgPSB0b2tlbnNUb0Z1bmN0aW9uO1xudmFyIHRva2Vuc1RvUmVnRXhwXzEgPSB0b2tlbnNUb1JlZ0V4cDtcblxuLyoqXG4gKiBUaGUgbWFpbiBwYXRoIG1hdGNoaW5nIHJlZ2V4cCB1dGlsaXR5LlxuICpcbiAqIEB0eXBlIHtSZWdFeHB9XG4gKi9cbnZhciBQQVRIX1JFR0VYUCA9IG5ldyBSZWdFeHAoW1xuICAvLyBNYXRjaCBlc2NhcGVkIGNoYXJhY3RlcnMgdGhhdCB3b3VsZCBvdGhlcndpc2UgYXBwZWFyIGluIGZ1dHVyZSBtYXRjaGVzLlxuICAvLyBUaGlzIGFsbG93cyB0aGUgdXNlciB0byBlc2NhcGUgc3BlY2lhbCBjaGFyYWN0ZXJzIHRoYXQgd29uJ3QgdHJhbnNmb3JtLlxuICAnKFxcXFxcXFxcLiknLFxuICAvLyBNYXRjaCBFeHByZXNzLXN0eWxlIHBhcmFtZXRlcnMgYW5kIHVuLW5hbWVkIHBhcmFtZXRlcnMgd2l0aCBhIHByZWZpeFxuICAvLyBhbmQgb3B0aW9uYWwgc3VmZml4ZXMuIE1hdGNoZXMgYXBwZWFyIGFzOlxuICAvL1xuICAvLyBcIi86dGVzdChcXFxcZCspP1wiID0+IFtcIi9cIiwgXCJ0ZXN0XCIsIFwiXFxkK1wiLCB1bmRlZmluZWQsIFwiP1wiLCB1bmRlZmluZWRdXG4gIC8vIFwiL3JvdXRlKFxcXFxkKylcIiAgPT4gW3VuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIFwiXFxkK1wiLCB1bmRlZmluZWQsIHVuZGVmaW5lZF1cbiAgLy8gXCIvKlwiICAgICAgICAgICAgPT4gW1wiL1wiLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIFwiKlwiXVxuICAnKFtcXFxcLy5dKT8oPzooPzpcXFxcOihcXFxcdyspKD86XFxcXCgoKD86XFxcXFxcXFwufFteXFxcXFxcXFwoKV0pKylcXFxcKSk/fFxcXFwoKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcKCldKSspXFxcXCkpKFsrKj9dKT98KFxcXFwqKSknXG5dLmpvaW4oJ3wnKSwgJ2cnKTtcblxuLyoqXG4gKiBQYXJzZSBhIHN0cmluZyBmb3IgdGhlIHJhdyB0b2tlbnMuXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSAgc3RyXG4gKiBAcGFyYW0gIHtPYmplY3Q9fSBvcHRpb25zXG4gKiBAcmV0dXJuIHshQXJyYXl9XG4gKi9cbmZ1bmN0aW9uIHBhcnNlIChzdHIsIG9wdGlvbnMpIHtcbiAgdmFyIHRva2VucyA9IFtdO1xuICB2YXIga2V5ID0gMDtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIHBhdGggPSAnJztcbiAgdmFyIGRlZmF1bHREZWxpbWl0ZXIgPSBvcHRpb25zICYmIG9wdGlvbnMuZGVsaW1pdGVyIHx8ICcvJztcbiAgdmFyIHJlcztcblxuICB3aGlsZSAoKHJlcyA9IFBBVEhfUkVHRVhQLmV4ZWMoc3RyKSkgIT0gbnVsbCkge1xuICAgIHZhciBtID0gcmVzWzBdO1xuICAgIHZhciBlc2NhcGVkID0gcmVzWzFdO1xuICAgIHZhciBvZmZzZXQgPSByZXMuaW5kZXg7XG4gICAgcGF0aCArPSBzdHIuc2xpY2UoaW5kZXgsIG9mZnNldCk7XG4gICAgaW5kZXggPSBvZmZzZXQgKyBtLmxlbmd0aDtcblxuICAgIC8vIElnbm9yZSBhbHJlYWR5IGVzY2FwZWQgc2VxdWVuY2VzLlxuICAgIGlmIChlc2NhcGVkKSB7XG4gICAgICBwYXRoICs9IGVzY2FwZWRbMV07XG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIHZhciBuZXh0ID0gc3RyW2luZGV4XTtcbiAgICB2YXIgcHJlZml4ID0gcmVzWzJdO1xuICAgIHZhciBuYW1lID0gcmVzWzNdO1xuICAgIHZhciBjYXB0dXJlID0gcmVzWzRdO1xuICAgIHZhciBncm91cCA9IHJlc1s1XTtcbiAgICB2YXIgbW9kaWZpZXIgPSByZXNbNl07XG4gICAgdmFyIGFzdGVyaXNrID0gcmVzWzddO1xuXG4gICAgLy8gUHVzaCB0aGUgY3VycmVudCBwYXRoIG9udG8gdGhlIHRva2Vucy5cbiAgICBpZiAocGF0aCkge1xuICAgICAgdG9rZW5zLnB1c2gocGF0aCk7XG4gICAgICBwYXRoID0gJyc7XG4gICAgfVxuXG4gICAgdmFyIHBhcnRpYWwgPSBwcmVmaXggIT0gbnVsbCAmJiBuZXh0ICE9IG51bGwgJiYgbmV4dCAhPT0gcHJlZml4O1xuICAgIHZhciByZXBlYXQgPSBtb2RpZmllciA9PT0gJysnIHx8IG1vZGlmaWVyID09PSAnKic7XG4gICAgdmFyIG9wdGlvbmFsID0gbW9kaWZpZXIgPT09ICc/JyB8fCBtb2RpZmllciA9PT0gJyonO1xuICAgIHZhciBkZWxpbWl0ZXIgPSByZXNbMl0gfHwgZGVmYXVsdERlbGltaXRlcjtcbiAgICB2YXIgcGF0dGVybiA9IGNhcHR1cmUgfHwgZ3JvdXA7XG5cbiAgICB0b2tlbnMucHVzaCh7XG4gICAgICBuYW1lOiBuYW1lIHx8IGtleSsrLFxuICAgICAgcHJlZml4OiBwcmVmaXggfHwgJycsXG4gICAgICBkZWxpbWl0ZXI6IGRlbGltaXRlcixcbiAgICAgIG9wdGlvbmFsOiBvcHRpb25hbCxcbiAgICAgIHJlcGVhdDogcmVwZWF0LFxuICAgICAgcGFydGlhbDogcGFydGlhbCxcbiAgICAgIGFzdGVyaXNrOiAhIWFzdGVyaXNrLFxuICAgICAgcGF0dGVybjogcGF0dGVybiA/IGVzY2FwZUdyb3VwKHBhdHRlcm4pIDogKGFzdGVyaXNrID8gJy4qJyA6ICdbXicgKyBlc2NhcGVTdHJpbmcoZGVsaW1pdGVyKSArICddKz8nKVxuICAgIH0pO1xuICB9XG5cbiAgLy8gTWF0Y2ggYW55IGNoYXJhY3RlcnMgc3RpbGwgcmVtYWluaW5nLlxuICBpZiAoaW5kZXggPCBzdHIubGVuZ3RoKSB7XG4gICAgcGF0aCArPSBzdHIuc3Vic3RyKGluZGV4KTtcbiAgfVxuXG4gIC8vIElmIHRoZSBwYXRoIGV4aXN0cywgcHVzaCBpdCBvbnRvIHRoZSBlbmQuXG4gIGlmIChwYXRoKSB7XG4gICAgdG9rZW5zLnB1c2gocGF0aCk7XG4gIH1cblxuICByZXR1cm4gdG9rZW5zXG59XG5cbi8qKlxuICogQ29tcGlsZSBhIHN0cmluZyB0byBhIHRlbXBsYXRlIGZ1bmN0aW9uIGZvciB0aGUgcGF0aC5cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9ICAgICAgICAgICAgIHN0clxuICogQHBhcmFtICB7T2JqZWN0PX0gICAgICAgICAgICBvcHRpb25zXG4gKiBAcmV0dXJuIHshZnVuY3Rpb24oT2JqZWN0PSwgT2JqZWN0PSl9XG4gKi9cbmZ1bmN0aW9uIGNvbXBpbGUgKHN0ciwgb3B0aW9ucykge1xuICByZXR1cm4gdG9rZW5zVG9GdW5jdGlvbihwYXJzZShzdHIsIG9wdGlvbnMpLCBvcHRpb25zKVxufVxuXG4vKipcbiAqIFByZXR0aWVyIGVuY29kaW5nIG9mIFVSSSBwYXRoIHNlZ21lbnRzLlxuICpcbiAqIEBwYXJhbSAge3N0cmluZ31cbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZW5jb2RlVVJJQ29tcG9uZW50UHJldHR5IChzdHIpIHtcbiAgcmV0dXJuIGVuY29kZVVSSShzdHIpLnJlcGxhY2UoL1tcXC8/I10vZywgZnVuY3Rpb24gKGMpIHtcbiAgICByZXR1cm4gJyUnICsgYy5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpXG4gIH0pXG59XG5cbi8qKlxuICogRW5jb2RlIHRoZSBhc3RlcmlzayBwYXJhbWV0ZXIuIFNpbWlsYXIgdG8gYHByZXR0eWAsIGJ1dCBhbGxvd3Mgc2xhc2hlcy5cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGVuY29kZUFzdGVyaXNrIChzdHIpIHtcbiAgcmV0dXJuIGVuY29kZVVSSShzdHIpLnJlcGxhY2UoL1s/I10vZywgZnVuY3Rpb24gKGMpIHtcbiAgICByZXR1cm4gJyUnICsgYy5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpXG4gIH0pXG59XG5cbi8qKlxuICogRXhwb3NlIGEgbWV0aG9kIGZvciB0cmFuc2Zvcm1pbmcgdG9rZW5zIGludG8gdGhlIHBhdGggZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIHRva2Vuc1RvRnVuY3Rpb24gKHRva2Vucywgb3B0aW9ucykge1xuICAvLyBDb21waWxlIGFsbCB0aGUgdG9rZW5zIGludG8gcmVnZXhwcy5cbiAgdmFyIG1hdGNoZXMgPSBuZXcgQXJyYXkodG9rZW5zLmxlbmd0aCk7XG5cbiAgLy8gQ29tcGlsZSBhbGwgdGhlIHBhdHRlcm5zIGJlZm9yZSBjb21waWxhdGlvbi5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAodHlwZW9mIHRva2Vuc1tpXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIG1hdGNoZXNbaV0gPSBuZXcgUmVnRXhwKCdeKD86JyArIHRva2Vuc1tpXS5wYXR0ZXJuICsgJykkJywgZmxhZ3Mob3B0aW9ucykpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAob2JqLCBvcHRzKSB7XG4gICAgdmFyIHBhdGggPSAnJztcbiAgICB2YXIgZGF0YSA9IG9iaiB8fCB7fTtcbiAgICB2YXIgb3B0aW9ucyA9IG9wdHMgfHwge307XG4gICAgdmFyIGVuY29kZSA9IG9wdGlvbnMucHJldHR5ID8gZW5jb2RlVVJJQ29tcG9uZW50UHJldHR5IDogZW5jb2RlVVJJQ29tcG9uZW50O1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB0b2tlbiA9IHRva2Vuc1tpXTtcblxuICAgICAgaWYgKHR5cGVvZiB0b2tlbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcGF0aCArPSB0b2tlbjtcblxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICB2YXIgdmFsdWUgPSBkYXRhW3Rva2VuLm5hbWVdO1xuICAgICAgdmFyIHNlZ21lbnQ7XG5cbiAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgIGlmICh0b2tlbi5vcHRpb25hbCkge1xuICAgICAgICAgIC8vIFByZXBlbmQgcGFydGlhbCBzZWdtZW50IHByZWZpeGVzLlxuICAgICAgICAgIGlmICh0b2tlbi5wYXJ0aWFsKSB7XG4gICAgICAgICAgICBwYXRoICs9IHRva2VuLnByZWZpeDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIFwiJyArIHRva2VuLm5hbWUgKyAnXCIgdG8gYmUgZGVmaW5lZCcpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGlzYXJyYXkodmFsdWUpKSB7XG4gICAgICAgIGlmICghdG9rZW4ucmVwZWF0KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgXCInICsgdG9rZW4ubmFtZSArICdcIiB0byBub3QgcmVwZWF0LCBidXQgcmVjZWl2ZWQgYCcgKyBKU09OLnN0cmluZ2lmeSh2YWx1ZSkgKyAnYCcpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgaWYgKHRva2VuLm9wdGlvbmFsKSB7XG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBcIicgKyB0b2tlbi5uYW1lICsgJ1wiIHRvIG5vdCBiZSBlbXB0eScpXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB2YWx1ZS5sZW5ndGg7IGorKykge1xuICAgICAgICAgIHNlZ21lbnQgPSBlbmNvZGUodmFsdWVbal0pO1xuXG4gICAgICAgICAgaWYgKCFtYXRjaGVzW2ldLnRlc3Qoc2VnbWVudCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGFsbCBcIicgKyB0b2tlbi5uYW1lICsgJ1wiIHRvIG1hdGNoIFwiJyArIHRva2VuLnBhdHRlcm4gKyAnXCIsIGJ1dCByZWNlaXZlZCBgJyArIEpTT04uc3RyaW5naWZ5KHNlZ21lbnQpICsgJ2AnKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHBhdGggKz0gKGogPT09IDAgPyB0b2tlbi5wcmVmaXggOiB0b2tlbi5kZWxpbWl0ZXIpICsgc2VnbWVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIHNlZ21lbnQgPSB0b2tlbi5hc3RlcmlzayA/IGVuY29kZUFzdGVyaXNrKHZhbHVlKSA6IGVuY29kZSh2YWx1ZSk7XG5cbiAgICAgIGlmICghbWF0Y2hlc1tpXS50ZXN0KHNlZ21lbnQpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIFwiJyArIHRva2VuLm5hbWUgKyAnXCIgdG8gbWF0Y2ggXCInICsgdG9rZW4ucGF0dGVybiArICdcIiwgYnV0IHJlY2VpdmVkIFwiJyArIHNlZ21lbnQgKyAnXCInKVxuICAgICAgfVxuXG4gICAgICBwYXRoICs9IHRva2VuLnByZWZpeCArIHNlZ21lbnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhdGhcbiAgfVxufVxuXG4vKipcbiAqIEVzY2FwZSBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdHJpbmcuXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZXNjYXBlU3RyaW5nIChzdHIpIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC8oWy4rKj89XiE6JHt9KClbXFxdfFxcL1xcXFxdKS9nLCAnXFxcXCQxJylcbn1cblxuLyoqXG4gKiBFc2NhcGUgdGhlIGNhcHR1cmluZyBncm91cCBieSBlc2NhcGluZyBzcGVjaWFsIGNoYXJhY3RlcnMgYW5kIG1lYW5pbmcuXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSBncm91cFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBlc2NhcGVHcm91cCAoZ3JvdXApIHtcbiAgcmV0dXJuIGdyb3VwLnJlcGxhY2UoLyhbPSE6JFxcLygpXSkvZywgJ1xcXFwkMScpXG59XG5cbi8qKlxuICogQXR0YWNoIHRoZSBrZXlzIGFzIGEgcHJvcGVydHkgb2YgdGhlIHJlZ2V4cC5cbiAqXG4gKiBAcGFyYW0gIHshUmVnRXhwfSByZVxuICogQHBhcmFtICB7QXJyYXl9ICAga2V5c1xuICogQHJldHVybiB7IVJlZ0V4cH1cbiAqL1xuZnVuY3Rpb24gYXR0YWNoS2V5cyAocmUsIGtleXMpIHtcbiAgcmUua2V5cyA9IGtleXM7XG4gIHJldHVybiByZVxufVxuXG4vKipcbiAqIEdldCB0aGUgZmxhZ3MgZm9yIGEgcmVnZXhwIGZyb20gdGhlIG9wdGlvbnMuXG4gKlxuICogQHBhcmFtICB7T2JqZWN0fSBvcHRpb25zXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGZsYWdzIChvcHRpb25zKSB7XG4gIHJldHVybiBvcHRpb25zICYmIG9wdGlvbnMuc2Vuc2l0aXZlID8gJycgOiAnaSdcbn1cblxuLyoqXG4gKiBQdWxsIG91dCBrZXlzIGZyb20gYSByZWdleHAuXG4gKlxuICogQHBhcmFtICB7IVJlZ0V4cH0gcGF0aFxuICogQHBhcmFtICB7IUFycmF5fSAga2V5c1xuICogQHJldHVybiB7IVJlZ0V4cH1cbiAqL1xuZnVuY3Rpb24gcmVnZXhwVG9SZWdleHAgKHBhdGgsIGtleXMpIHtcbiAgLy8gVXNlIGEgbmVnYXRpdmUgbG9va2FoZWFkIHRvIG1hdGNoIG9ubHkgY2FwdHVyaW5nIGdyb3Vwcy5cbiAgdmFyIGdyb3VwcyA9IHBhdGguc291cmNlLm1hdGNoKC9cXCgoPyFcXD8pL2cpO1xuXG4gIGlmIChncm91cHMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyb3Vwcy5sZW5ndGg7IGkrKykge1xuICAgICAga2V5cy5wdXNoKHtcbiAgICAgICAgbmFtZTogaSxcbiAgICAgICAgcHJlZml4OiBudWxsLFxuICAgICAgICBkZWxpbWl0ZXI6IG51bGwsXG4gICAgICAgIG9wdGlvbmFsOiBmYWxzZSxcbiAgICAgICAgcmVwZWF0OiBmYWxzZSxcbiAgICAgICAgcGFydGlhbDogZmFsc2UsXG4gICAgICAgIGFzdGVyaXNrOiBmYWxzZSxcbiAgICAgICAgcGF0dGVybjogbnVsbFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGF0dGFjaEtleXMocGF0aCwga2V5cylcbn1cblxuLyoqXG4gKiBUcmFuc2Zvcm0gYW4gYXJyYXkgaW50byBhIHJlZ2V4cC5cbiAqXG4gKiBAcGFyYW0gIHshQXJyYXl9ICBwYXRoXG4gKiBAcGFyYW0gIHtBcnJheX0gICBrZXlzXG4gKiBAcGFyYW0gIHshT2JqZWN0fSBvcHRpb25zXG4gKiBAcmV0dXJuIHshUmVnRXhwfVxuICovXG5mdW5jdGlvbiBhcnJheVRvUmVnZXhwIChwYXRoLCBrZXlzLCBvcHRpb25zKSB7XG4gIHZhciBwYXJ0cyA9IFtdO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykge1xuICAgIHBhcnRzLnB1c2gocGF0aFRvUmVnZXhwKHBhdGhbaV0sIGtleXMsIG9wdGlvbnMpLnNvdXJjZSk7XG4gIH1cblxuICB2YXIgcmVnZXhwID0gbmV3IFJlZ0V4cCgnKD86JyArIHBhcnRzLmpvaW4oJ3wnKSArICcpJywgZmxhZ3Mob3B0aW9ucykpO1xuXG4gIHJldHVybiBhdHRhY2hLZXlzKHJlZ2V4cCwga2V5cylcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBwYXRoIHJlZ2V4cCBmcm9tIHN0cmluZyBpbnB1dC5cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9ICBwYXRoXG4gKiBAcGFyYW0gIHshQXJyYXl9ICBrZXlzXG4gKiBAcGFyYW0gIHshT2JqZWN0fSBvcHRpb25zXG4gKiBAcmV0dXJuIHshUmVnRXhwfVxuICovXG5mdW5jdGlvbiBzdHJpbmdUb1JlZ2V4cCAocGF0aCwga2V5cywgb3B0aW9ucykge1xuICByZXR1cm4gdG9rZW5zVG9SZWdFeHAocGFyc2UocGF0aCwgb3B0aW9ucyksIGtleXMsIG9wdGlvbnMpXG59XG5cbi8qKlxuICogRXhwb3NlIGEgZnVuY3Rpb24gZm9yIHRha2luZyB0b2tlbnMgYW5kIHJldHVybmluZyBhIFJlZ0V4cC5cbiAqXG4gKiBAcGFyYW0gIHshQXJyYXl9ICAgICAgICAgIHRva2Vuc1xuICogQHBhcmFtICB7KEFycmF5fE9iamVjdCk9fSBrZXlzXG4gKiBAcGFyYW0gIHtPYmplY3Q9fSAgICAgICAgIG9wdGlvbnNcbiAqIEByZXR1cm4geyFSZWdFeHB9XG4gKi9cbmZ1bmN0aW9uIHRva2Vuc1RvUmVnRXhwICh0b2tlbnMsIGtleXMsIG9wdGlvbnMpIHtcbiAgaWYgKCFpc2FycmF5KGtleXMpKSB7XG4gICAgb3B0aW9ucyA9IC8qKiBAdHlwZSB7IU9iamVjdH0gKi8gKGtleXMgfHwgb3B0aW9ucyk7XG4gICAga2V5cyA9IFtdO1xuICB9XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgdmFyIHN0cmljdCA9IG9wdGlvbnMuc3RyaWN0O1xuICB2YXIgZW5kID0gb3B0aW9ucy5lbmQgIT09IGZhbHNlO1xuICB2YXIgcm91dGUgPSAnJztcblxuICAvLyBJdGVyYXRlIG92ZXIgdGhlIHRva2VucyBhbmQgY3JlYXRlIG91ciByZWdleHAgc3RyaW5nLlxuICBmb3IgKHZhciBpID0gMDsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykge1xuICAgIHZhciB0b2tlbiA9IHRva2Vuc1tpXTtcblxuICAgIGlmICh0eXBlb2YgdG9rZW4gPT09ICdzdHJpbmcnKSB7XG4gICAgICByb3V0ZSArPSBlc2NhcGVTdHJpbmcodG9rZW4pO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgcHJlZml4ID0gZXNjYXBlU3RyaW5nKHRva2VuLnByZWZpeCk7XG4gICAgICB2YXIgY2FwdHVyZSA9ICcoPzonICsgdG9rZW4ucGF0dGVybiArICcpJztcblxuICAgICAga2V5cy5wdXNoKHRva2VuKTtcblxuICAgICAgaWYgKHRva2VuLnJlcGVhdCkge1xuICAgICAgICBjYXB0dXJlICs9ICcoPzonICsgcHJlZml4ICsgY2FwdHVyZSArICcpKic7XG4gICAgICB9XG5cbiAgICAgIGlmICh0b2tlbi5vcHRpb25hbCkge1xuICAgICAgICBpZiAoIXRva2VuLnBhcnRpYWwpIHtcbiAgICAgICAgICBjYXB0dXJlID0gJyg/OicgKyBwcmVmaXggKyAnKCcgKyBjYXB0dXJlICsgJykpPyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FwdHVyZSA9IHByZWZpeCArICcoJyArIGNhcHR1cmUgKyAnKT8nO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYXB0dXJlID0gcHJlZml4ICsgJygnICsgY2FwdHVyZSArICcpJztcbiAgICAgIH1cblxuICAgICAgcm91dGUgKz0gY2FwdHVyZTtcbiAgICB9XG4gIH1cblxuICB2YXIgZGVsaW1pdGVyID0gZXNjYXBlU3RyaW5nKG9wdGlvbnMuZGVsaW1pdGVyIHx8ICcvJyk7XG4gIHZhciBlbmRzV2l0aERlbGltaXRlciA9IHJvdXRlLnNsaWNlKC1kZWxpbWl0ZXIubGVuZ3RoKSA9PT0gZGVsaW1pdGVyO1xuXG4gIC8vIEluIG5vbi1zdHJpY3QgbW9kZSB3ZSBhbGxvdyBhIHNsYXNoIGF0IHRoZSBlbmQgb2YgbWF0Y2guIElmIHRoZSBwYXRoIHRvXG4gIC8vIG1hdGNoIGFscmVhZHkgZW5kcyB3aXRoIGEgc2xhc2gsIHdlIHJlbW92ZSBpdCBmb3IgY29uc2lzdGVuY3kuIFRoZSBzbGFzaFxuICAvLyBpcyB2YWxpZCBhdCB0aGUgZW5kIG9mIGEgcGF0aCBtYXRjaCwgbm90IGluIHRoZSBtaWRkbGUuIFRoaXMgaXMgaW1wb3J0YW50XG4gIC8vIGluIG5vbi1lbmRpbmcgbW9kZSwgd2hlcmUgXCIvdGVzdC9cIiBzaG91bGRuJ3QgbWF0Y2ggXCIvdGVzdC8vcm91dGVcIi5cbiAgaWYgKCFzdHJpY3QpIHtcbiAgICByb3V0ZSA9IChlbmRzV2l0aERlbGltaXRlciA/IHJvdXRlLnNsaWNlKDAsIC1kZWxpbWl0ZXIubGVuZ3RoKSA6IHJvdXRlKSArICcoPzonICsgZGVsaW1pdGVyICsgJyg/PSQpKT8nO1xuICB9XG5cbiAgaWYgKGVuZCkge1xuICAgIHJvdXRlICs9ICckJztcbiAgfSBlbHNlIHtcbiAgICAvLyBJbiBub24tZW5kaW5nIG1vZGUsIHdlIG5lZWQgdGhlIGNhcHR1cmluZyBncm91cHMgdG8gbWF0Y2ggYXMgbXVjaCBhc1xuICAgIC8vIHBvc3NpYmxlIGJ5IHVzaW5nIGEgcG9zaXRpdmUgbG9va2FoZWFkIHRvIHRoZSBlbmQgb3IgbmV4dCBwYXRoIHNlZ21lbnQuXG4gICAgcm91dGUgKz0gc3RyaWN0ICYmIGVuZHNXaXRoRGVsaW1pdGVyID8gJycgOiAnKD89JyArIGRlbGltaXRlciArICd8JCknO1xuICB9XG5cbiAgcmV0dXJuIGF0dGFjaEtleXMobmV3IFJlZ0V4cCgnXicgKyByb3V0ZSwgZmxhZ3Mob3B0aW9ucykpLCBrZXlzKVxufVxuXG4vKipcbiAqIE5vcm1hbGl6ZSB0aGUgZ2l2ZW4gcGF0aCBzdHJpbmcsIHJldHVybmluZyBhIHJlZ3VsYXIgZXhwcmVzc2lvbi5cbiAqXG4gKiBBbiBlbXB0eSBhcnJheSBjYW4gYmUgcGFzc2VkIGluIGZvciB0aGUga2V5cywgd2hpY2ggd2lsbCBob2xkIHRoZVxuICogcGxhY2Vob2xkZXIga2V5IGRlc2NyaXB0aW9ucy4gRm9yIGV4YW1wbGUsIHVzaW5nIGAvdXNlci86aWRgLCBga2V5c2Agd2lsbFxuICogY29udGFpbiBgW3sgbmFtZTogJ2lkJywgZGVsaW1pdGVyOiAnLycsIG9wdGlvbmFsOiBmYWxzZSwgcmVwZWF0OiBmYWxzZSB9XWAuXG4gKlxuICogQHBhcmFtICB7KHN0cmluZ3xSZWdFeHB8QXJyYXkpfSBwYXRoXG4gKiBAcGFyYW0gIHsoQXJyYXl8T2JqZWN0KT19ICAgICAgIGtleXNcbiAqIEBwYXJhbSAge09iamVjdD19ICAgICAgICAgICAgICAgb3B0aW9uc1xuICogQHJldHVybiB7IVJlZ0V4cH1cbiAqL1xuZnVuY3Rpb24gcGF0aFRvUmVnZXhwIChwYXRoLCBrZXlzLCBvcHRpb25zKSB7XG4gIGlmICghaXNhcnJheShrZXlzKSkge1xuICAgIG9wdGlvbnMgPSAvKiogQHR5cGUgeyFPYmplY3R9ICovIChrZXlzIHx8IG9wdGlvbnMpO1xuICAgIGtleXMgPSBbXTtcbiAgfVxuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gIGlmIChwYXRoIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgcmV0dXJuIHJlZ2V4cFRvUmVnZXhwKHBhdGgsIC8qKiBAdHlwZSB7IUFycmF5fSAqLyAoa2V5cykpXG4gIH1cblxuICBpZiAoaXNhcnJheShwYXRoKSkge1xuICAgIHJldHVybiBhcnJheVRvUmVnZXhwKC8qKiBAdHlwZSB7IUFycmF5fSAqLyAocGF0aCksIC8qKiBAdHlwZSB7IUFycmF5fSAqLyAoa2V5cyksIG9wdGlvbnMpXG4gIH1cblxuICByZXR1cm4gc3RyaW5nVG9SZWdleHAoLyoqIEB0eXBlIHtzdHJpbmd9ICovIChwYXRoKSwgLyoqIEB0eXBlIHshQXJyYXl9ICovIChrZXlzKSwgb3B0aW9ucylcbn1cbnBhdGhUb1JlZ2V4cF8xLnBhcnNlID0gcGFyc2VfMTtcbnBhdGhUb1JlZ2V4cF8xLmNvbXBpbGUgPSBjb21waWxlXzE7XG5wYXRoVG9SZWdleHBfMS50b2tlbnNUb0Z1bmN0aW9uID0gdG9rZW5zVG9GdW5jdGlvbl8xO1xucGF0aFRvUmVnZXhwXzEudG9rZW5zVG9SZWdFeHAgPSB0b2tlbnNUb1JlZ0V4cF8xO1xuXG4vKiAgKi9cblxuLy8gJGZsb3ctZGlzYWJsZS1saW5lXG52YXIgcmVnZXhwQ29tcGlsZUNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuZnVuY3Rpb24gZmlsbFBhcmFtcyAoXG4gIHBhdGgsXG4gIHBhcmFtcyxcbiAgcm91dGVNc2dcbikge1xuICBwYXJhbXMgPSBwYXJhbXMgfHwge307XG4gIHRyeSB7XG4gICAgdmFyIGZpbGxlciA9XG4gICAgICByZWdleHBDb21waWxlQ2FjaGVbcGF0aF0gfHxcbiAgICAgIChyZWdleHBDb21waWxlQ2FjaGVbcGF0aF0gPSBwYXRoVG9SZWdleHBfMS5jb21waWxlKHBhdGgpKTtcblxuICAgIC8vIEZpeCAjMjUwNSByZXNvbHZpbmcgYXN0ZXJpc2sgcm91dGVzIHsgbmFtZTogJ25vdC1mb3VuZCcsIHBhcmFtczogeyBwYXRoTWF0Y2g6ICcvbm90LWZvdW5kJyB9fVxuICAgIC8vIGFuZCBmaXggIzMxMDYgc28gdGhhdCB5b3UgY2FuIHdvcmsgd2l0aCBsb2NhdGlvbiBkZXNjcmlwdG9yIG9iamVjdCBoYXZpbmcgcGFyYW1zLnBhdGhNYXRjaCBlcXVhbCB0byBlbXB0eSBzdHJpbmdcbiAgICBpZiAodHlwZW9mIHBhcmFtcy5wYXRoTWF0Y2ggPT09ICdzdHJpbmcnKSB7IHBhcmFtc1swXSA9IHBhcmFtcy5wYXRoTWF0Y2g7IH1cblxuICAgIHJldHVybiBmaWxsZXIocGFyYW1zLCB7IHByZXR0eTogdHJ1ZSB9KVxuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIC8vIEZpeCAjMzA3MiBubyB3YXJuIGlmIGBwYXRoTWF0Y2hgIGlzIHN0cmluZ1xuICAgICAgd2Fybih0eXBlb2YgcGFyYW1zLnBhdGhNYXRjaCA9PT0gJ3N0cmluZycsIChcIm1pc3NpbmcgcGFyYW0gZm9yIFwiICsgcm91dGVNc2cgKyBcIjogXCIgKyAoZS5tZXNzYWdlKSkpO1xuICAgIH1cbiAgICByZXR1cm4gJydcbiAgfSBmaW5hbGx5IHtcbiAgICAvLyBkZWxldGUgdGhlIDAgaWYgaXQgd2FzIGFkZGVkXG4gICAgZGVsZXRlIHBhcmFtc1swXTtcbiAgfVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gbm9ybWFsaXplTG9jYXRpb24gKFxuICByYXcsXG4gIGN1cnJlbnQsXG4gIGFwcGVuZCxcbiAgcm91dGVyXG4pIHtcbiAgdmFyIG5leHQgPSB0eXBlb2YgcmF3ID09PSAnc3RyaW5nJyA/IHsgcGF0aDogcmF3IH0gOiByYXc7XG4gIC8vIG5hbWVkIHRhcmdldFxuICBpZiAobmV4dC5fbm9ybWFsaXplZCkge1xuICAgIHJldHVybiBuZXh0XG4gIH0gZWxzZSBpZiAobmV4dC5uYW1lKSB7XG4gICAgbmV4dCA9IGV4dGVuZCh7fSwgcmF3KTtcbiAgICB2YXIgcGFyYW1zID0gbmV4dC5wYXJhbXM7XG4gICAgaWYgKHBhcmFtcyAmJiB0eXBlb2YgcGFyYW1zID09PSAnb2JqZWN0Jykge1xuICAgICAgbmV4dC5wYXJhbXMgPSBleHRlbmQoe30sIHBhcmFtcyk7XG4gICAgfVxuICAgIHJldHVybiBuZXh0XG4gIH1cblxuICAvLyByZWxhdGl2ZSBwYXJhbXNcbiAgaWYgKCFuZXh0LnBhdGggJiYgbmV4dC5wYXJhbXMgJiYgY3VycmVudCkge1xuICAgIG5leHQgPSBleHRlbmQoe30sIG5leHQpO1xuICAgIG5leHQuX25vcm1hbGl6ZWQgPSB0cnVlO1xuICAgIHZhciBwYXJhbXMkMSA9IGV4dGVuZChleHRlbmQoe30sIGN1cnJlbnQucGFyYW1zKSwgbmV4dC5wYXJhbXMpO1xuICAgIGlmIChjdXJyZW50Lm5hbWUpIHtcbiAgICAgIG5leHQubmFtZSA9IGN1cnJlbnQubmFtZTtcbiAgICAgIG5leHQucGFyYW1zID0gcGFyYW1zJDE7XG4gICAgfSBlbHNlIGlmIChjdXJyZW50Lm1hdGNoZWQubGVuZ3RoKSB7XG4gICAgICB2YXIgcmF3UGF0aCA9IGN1cnJlbnQubWF0Y2hlZFtjdXJyZW50Lm1hdGNoZWQubGVuZ3RoIC0gMV0ucGF0aDtcbiAgICAgIG5leHQucGF0aCA9IGZpbGxQYXJhbXMocmF3UGF0aCwgcGFyYW1zJDEsIChcInBhdGggXCIgKyAoY3VycmVudC5wYXRoKSkpO1xuICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgd2FybihmYWxzZSwgXCJyZWxhdGl2ZSBwYXJhbXMgbmF2aWdhdGlvbiByZXF1aXJlcyBhIGN1cnJlbnQgcm91dGUuXCIpO1xuICAgIH1cbiAgICByZXR1cm4gbmV4dFxuICB9XG5cbiAgdmFyIHBhcnNlZFBhdGggPSBwYXJzZVBhdGgobmV4dC5wYXRoIHx8ICcnKTtcbiAgdmFyIGJhc2VQYXRoID0gKGN1cnJlbnQgJiYgY3VycmVudC5wYXRoKSB8fCAnLyc7XG4gIHZhciBwYXRoID0gcGFyc2VkUGF0aC5wYXRoXG4gICAgPyByZXNvbHZlUGF0aChwYXJzZWRQYXRoLnBhdGgsIGJhc2VQYXRoLCBhcHBlbmQgfHwgbmV4dC5hcHBlbmQpXG4gICAgOiBiYXNlUGF0aDtcblxuICB2YXIgcXVlcnkgPSByZXNvbHZlUXVlcnkoXG4gICAgcGFyc2VkUGF0aC5xdWVyeSxcbiAgICBuZXh0LnF1ZXJ5LFxuICAgIHJvdXRlciAmJiByb3V0ZXIub3B0aW9ucy5wYXJzZVF1ZXJ5XG4gICk7XG5cbiAgdmFyIGhhc2ggPSBuZXh0Lmhhc2ggfHwgcGFyc2VkUGF0aC5oYXNoO1xuICBpZiAoaGFzaCAmJiBoYXNoLmNoYXJBdCgwKSAhPT0gJyMnKSB7XG4gICAgaGFzaCA9IFwiI1wiICsgaGFzaDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgX25vcm1hbGl6ZWQ6IHRydWUsXG4gICAgcGF0aDogcGF0aCxcbiAgICBxdWVyeTogcXVlcnksXG4gICAgaGFzaDogaGFzaFxuICB9XG59XG5cbi8qICAqL1xuXG4vLyB3b3JrIGFyb3VuZCB3ZWlyZCBmbG93IGJ1Z1xudmFyIHRvVHlwZXMgPSBbU3RyaW5nLCBPYmplY3RdO1xudmFyIGV2ZW50VHlwZXMgPSBbU3RyaW5nLCBBcnJheV07XG5cbnZhciBub29wID0gZnVuY3Rpb24gKCkge307XG5cbnZhciB3YXJuZWRDdXN0b21TbG90O1xudmFyIHdhcm5lZFRhZ1Byb3A7XG52YXIgd2FybmVkRXZlbnRQcm9wO1xuXG52YXIgTGluayA9IHtcbiAgbmFtZTogJ1JvdXRlckxpbmsnLFxuICBwcm9wczoge1xuICAgIHRvOiB7XG4gICAgICB0eXBlOiB0b1R5cGVzLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHRhZzoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2EnXG4gICAgfSxcbiAgICBjdXN0b206IEJvb2xlYW4sXG4gICAgZXhhY3Q6IEJvb2xlYW4sXG4gICAgZXhhY3RQYXRoOiBCb29sZWFuLFxuICAgIGFwcGVuZDogQm9vbGVhbixcbiAgICByZXBsYWNlOiBCb29sZWFuLFxuICAgIGFjdGl2ZUNsYXNzOiBTdHJpbmcsXG4gICAgZXhhY3RBY3RpdmVDbGFzczogU3RyaW5nLFxuICAgIGFyaWFDdXJyZW50VmFsdWU6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdwYWdlJ1xuICAgIH0sXG4gICAgZXZlbnQ6IHtcbiAgICAgIHR5cGU6IGV2ZW50VHlwZXMsXG4gICAgICBkZWZhdWx0OiAnY2xpY2snXG4gICAgfVxuICB9LFxuICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlciAoaCkge1xuICAgIHZhciB0aGlzJDEkMSA9IHRoaXM7XG5cbiAgICB2YXIgcm91dGVyID0gdGhpcy4kcm91dGVyO1xuICAgIHZhciBjdXJyZW50ID0gdGhpcy4kcm91dGU7XG4gICAgdmFyIHJlZiA9IHJvdXRlci5yZXNvbHZlKFxuICAgICAgdGhpcy50byxcbiAgICAgIGN1cnJlbnQsXG4gICAgICB0aGlzLmFwcGVuZFxuICAgICk7XG4gICAgdmFyIGxvY2F0aW9uID0gcmVmLmxvY2F0aW9uO1xuICAgIHZhciByb3V0ZSA9IHJlZi5yb3V0ZTtcbiAgICB2YXIgaHJlZiA9IHJlZi5ocmVmO1xuXG4gICAgdmFyIGNsYXNzZXMgPSB7fTtcbiAgICB2YXIgZ2xvYmFsQWN0aXZlQ2xhc3MgPSByb3V0ZXIub3B0aW9ucy5saW5rQWN0aXZlQ2xhc3M7XG4gICAgdmFyIGdsb2JhbEV4YWN0QWN0aXZlQ2xhc3MgPSByb3V0ZXIub3B0aW9ucy5saW5rRXhhY3RBY3RpdmVDbGFzcztcbiAgICAvLyBTdXBwb3J0IGdsb2JhbCBlbXB0eSBhY3RpdmUgY2xhc3NcbiAgICB2YXIgYWN0aXZlQ2xhc3NGYWxsYmFjayA9XG4gICAgICBnbG9iYWxBY3RpdmVDbGFzcyA9PSBudWxsID8gJ3JvdXRlci1saW5rLWFjdGl2ZScgOiBnbG9iYWxBY3RpdmVDbGFzcztcbiAgICB2YXIgZXhhY3RBY3RpdmVDbGFzc0ZhbGxiYWNrID1cbiAgICAgIGdsb2JhbEV4YWN0QWN0aXZlQ2xhc3MgPT0gbnVsbFxuICAgICAgICA/ICdyb3V0ZXItbGluay1leGFjdC1hY3RpdmUnXG4gICAgICAgIDogZ2xvYmFsRXhhY3RBY3RpdmVDbGFzcztcbiAgICB2YXIgYWN0aXZlQ2xhc3MgPVxuICAgICAgdGhpcy5hY3RpdmVDbGFzcyA9PSBudWxsID8gYWN0aXZlQ2xhc3NGYWxsYmFjayA6IHRoaXMuYWN0aXZlQ2xhc3M7XG4gICAgdmFyIGV4YWN0QWN0aXZlQ2xhc3MgPVxuICAgICAgdGhpcy5leGFjdEFjdGl2ZUNsYXNzID09IG51bGxcbiAgICAgICAgPyBleGFjdEFjdGl2ZUNsYXNzRmFsbGJhY2tcbiAgICAgICAgOiB0aGlzLmV4YWN0QWN0aXZlQ2xhc3M7XG5cbiAgICB2YXIgY29tcGFyZVRhcmdldCA9IHJvdXRlLnJlZGlyZWN0ZWRGcm9tXG4gICAgICA/IGNyZWF0ZVJvdXRlKG51bGwsIG5vcm1hbGl6ZUxvY2F0aW9uKHJvdXRlLnJlZGlyZWN0ZWRGcm9tKSwgbnVsbCwgcm91dGVyKVxuICAgICAgOiByb3V0ZTtcblxuICAgIGNsYXNzZXNbZXhhY3RBY3RpdmVDbGFzc10gPSBpc1NhbWVSb3V0ZShjdXJyZW50LCBjb21wYXJlVGFyZ2V0LCB0aGlzLmV4YWN0UGF0aCk7XG4gICAgY2xhc3Nlc1thY3RpdmVDbGFzc10gPSB0aGlzLmV4YWN0IHx8IHRoaXMuZXhhY3RQYXRoXG4gICAgICA/IGNsYXNzZXNbZXhhY3RBY3RpdmVDbGFzc11cbiAgICAgIDogaXNJbmNsdWRlZFJvdXRlKGN1cnJlbnQsIGNvbXBhcmVUYXJnZXQpO1xuXG4gICAgdmFyIGFyaWFDdXJyZW50VmFsdWUgPSBjbGFzc2VzW2V4YWN0QWN0aXZlQ2xhc3NdID8gdGhpcy5hcmlhQ3VycmVudFZhbHVlIDogbnVsbDtcblxuICAgIHZhciBoYW5kbGVyID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgIGlmIChndWFyZEV2ZW50KGUpKSB7XG4gICAgICAgIGlmICh0aGlzJDEkMS5yZXBsYWNlKSB7XG4gICAgICAgICAgcm91dGVyLnJlcGxhY2UobG9jYXRpb24sIG5vb3ApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJvdXRlci5wdXNoKGxvY2F0aW9uLCBub29wKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgb24gPSB7IGNsaWNrOiBndWFyZEV2ZW50IH07XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5ldmVudCkpIHtcbiAgICAgIHRoaXMuZXZlbnQuZm9yRWFjaChmdW5jdGlvbiAoZSkge1xuICAgICAgICBvbltlXSA9IGhhbmRsZXI7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgb25bdGhpcy5ldmVudF0gPSBoYW5kbGVyO1xuICAgIH1cblxuICAgIHZhciBkYXRhID0geyBjbGFzczogY2xhc3NlcyB9O1xuXG4gICAgdmFyIHNjb3BlZFNsb3QgPVxuICAgICAgIXRoaXMuJHNjb3BlZFNsb3RzLiRoYXNOb3JtYWwgJiZcbiAgICAgIHRoaXMuJHNjb3BlZFNsb3RzLmRlZmF1bHQgJiZcbiAgICAgIHRoaXMuJHNjb3BlZFNsb3RzLmRlZmF1bHQoe1xuICAgICAgICBocmVmOiBocmVmLFxuICAgICAgICByb3V0ZTogcm91dGUsXG4gICAgICAgIG5hdmlnYXRlOiBoYW5kbGVyLFxuICAgICAgICBpc0FjdGl2ZTogY2xhc3Nlc1thY3RpdmVDbGFzc10sXG4gICAgICAgIGlzRXhhY3RBY3RpdmU6IGNsYXNzZXNbZXhhY3RBY3RpdmVDbGFzc11cbiAgICAgIH0pO1xuXG4gICAgaWYgKHNjb3BlZFNsb3QpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICF0aGlzLmN1c3RvbSkge1xuICAgICAgICAhd2FybmVkQ3VzdG9tU2xvdCAmJiB3YXJuKGZhbHNlLCAnSW4gVnVlIFJvdXRlciA0LCB0aGUgdi1zbG90IEFQSSB3aWxsIGJ5IGRlZmF1bHQgd3JhcCBpdHMgY29udGVudCB3aXRoIGFuIDxhPiBlbGVtZW50LiBVc2UgdGhlIGN1c3RvbSBwcm9wIHRvIHJlbW92ZSB0aGlzIHdhcm5pbmc6XFxuPHJvdXRlci1saW5rIHYtc2xvdD1cInsgbmF2aWdhdGUsIGhyZWYgfVwiIGN1c3RvbT48L3JvdXRlci1saW5rPlxcbicpO1xuICAgICAgICB3YXJuZWRDdXN0b21TbG90ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChzY29wZWRTbG90Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gc2NvcGVkU2xvdFswXVxuICAgICAgfSBlbHNlIGlmIChzY29wZWRTbG90Lmxlbmd0aCA+IDEgfHwgIXNjb3BlZFNsb3QubGVuZ3RoKSB7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgd2FybihcbiAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgKFwiPHJvdXRlci1saW5rPiB3aXRoIHRvPVxcXCJcIiArICh0aGlzLnRvKSArIFwiXFxcIiBpcyB0cnlpbmcgdG8gdXNlIGEgc2NvcGVkIHNsb3QgYnV0IGl0IGRpZG4ndCBwcm92aWRlIGV4YWN0bHkgb25lIGNoaWxkLiBXcmFwcGluZyB0aGUgY29udGVudCB3aXRoIGEgc3BhbiBlbGVtZW50LlwiKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNjb3BlZFNsb3QubGVuZ3RoID09PSAwID8gaCgpIDogaCgnc3BhbicsIHt9LCBzY29wZWRTbG90KVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAoJ3RhZycgaW4gdGhpcy4kb3B0aW9ucy5wcm9wc0RhdGEgJiYgIXdhcm5lZFRhZ1Byb3ApIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICBcIjxyb3V0ZXItbGluaz4ncyB0YWcgcHJvcCBpcyBkZXByZWNhdGVkIGFuZCBoYXMgYmVlbiByZW1vdmVkIGluIFZ1ZSBSb3V0ZXIgNC4gVXNlIHRoZSB2LXNsb3QgQVBJIHRvIHJlbW92ZSB0aGlzIHdhcm5pbmc6IGh0dHBzOi8vbmV4dC5yb3V0ZXIudnVlanMub3JnL2d1aWRlL21pZ3JhdGlvbi8jcmVtb3ZhbC1vZi1ldmVudC1hbmQtdGFnLXByb3BzLWluLXJvdXRlci1saW5rLlwiXG4gICAgICAgICk7XG4gICAgICAgIHdhcm5lZFRhZ1Byb3AgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKCdldmVudCcgaW4gdGhpcy4kb3B0aW9ucy5wcm9wc0RhdGEgJiYgIXdhcm5lZEV2ZW50UHJvcCkge1xuICAgICAgICB3YXJuKFxuICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgIFwiPHJvdXRlci1saW5rPidzIGV2ZW50IHByb3AgaXMgZGVwcmVjYXRlZCBhbmQgaGFzIGJlZW4gcmVtb3ZlZCBpbiBWdWUgUm91dGVyIDQuIFVzZSB0aGUgdi1zbG90IEFQSSB0byByZW1vdmUgdGhpcyB3YXJuaW5nOiBodHRwczovL25leHQucm91dGVyLnZ1ZWpzLm9yZy9ndWlkZS9taWdyYXRpb24vI3JlbW92YWwtb2YtZXZlbnQtYW5kLXRhZy1wcm9wcy1pbi1yb3V0ZXItbGluay5cIlxuICAgICAgICApO1xuICAgICAgICB3YXJuZWRFdmVudFByb3AgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLnRhZyA9PT0gJ2EnKSB7XG4gICAgICBkYXRhLm9uID0gb247XG4gICAgICBkYXRhLmF0dHJzID0geyBocmVmOiBocmVmLCAnYXJpYS1jdXJyZW50JzogYXJpYUN1cnJlbnRWYWx1ZSB9O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBmaW5kIHRoZSBmaXJzdCA8YT4gY2hpbGQgYW5kIGFwcGx5IGxpc3RlbmVyIGFuZCBocmVmXG4gICAgICB2YXIgYSA9IGZpbmRBbmNob3IodGhpcy4kc2xvdHMuZGVmYXVsdCk7XG4gICAgICBpZiAoYSkge1xuICAgICAgICAvLyBpbiBjYXNlIHRoZSA8YT4gaXMgYSBzdGF0aWMgbm9kZVxuICAgICAgICBhLmlzU3RhdGljID0gZmFsc2U7XG4gICAgICAgIHZhciBhRGF0YSA9IChhLmRhdGEgPSBleHRlbmQoe30sIGEuZGF0YSkpO1xuICAgICAgICBhRGF0YS5vbiA9IGFEYXRhLm9uIHx8IHt9O1xuICAgICAgICAvLyB0cmFuc2Zvcm0gZXhpc3RpbmcgZXZlbnRzIGluIGJvdGggb2JqZWN0cyBpbnRvIGFycmF5cyBzbyB3ZSBjYW4gcHVzaCBsYXRlclxuICAgICAgICBmb3IgKHZhciBldmVudCBpbiBhRGF0YS5vbikge1xuICAgICAgICAgIHZhciBoYW5kbGVyJDEgPSBhRGF0YS5vbltldmVudF07XG4gICAgICAgICAgaWYgKGV2ZW50IGluIG9uKSB7XG4gICAgICAgICAgICBhRGF0YS5vbltldmVudF0gPSBBcnJheS5pc0FycmF5KGhhbmRsZXIkMSkgPyBoYW5kbGVyJDEgOiBbaGFuZGxlciQxXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gYXBwZW5kIG5ldyBsaXN0ZW5lcnMgZm9yIHJvdXRlci1saW5rXG4gICAgICAgIGZvciAodmFyIGV2ZW50JDEgaW4gb24pIHtcbiAgICAgICAgICBpZiAoZXZlbnQkMSBpbiBhRGF0YS5vbikge1xuICAgICAgICAgICAgLy8gb25bZXZlbnRdIGlzIGFsd2F5cyBhIGZ1bmN0aW9uXG4gICAgICAgICAgICBhRGF0YS5vbltldmVudCQxXS5wdXNoKG9uW2V2ZW50JDFdKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYURhdGEub25bZXZlbnQkMV0gPSBoYW5kbGVyO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBhQXR0cnMgPSAoYS5kYXRhLmF0dHJzID0gZXh0ZW5kKHt9LCBhLmRhdGEuYXR0cnMpKTtcbiAgICAgICAgYUF0dHJzLmhyZWYgPSBocmVmO1xuICAgICAgICBhQXR0cnNbJ2FyaWEtY3VycmVudCddID0gYXJpYUN1cnJlbnRWYWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGRvZXNuJ3QgaGF2ZSA8YT4gY2hpbGQsIGFwcGx5IGxpc3RlbmVyIHRvIHNlbGZcbiAgICAgICAgZGF0YS5vbiA9IG9uO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBoKHRoaXMudGFnLCBkYXRhLCB0aGlzLiRzbG90cy5kZWZhdWx0KVxuICB9XG59O1xuXG5mdW5jdGlvbiBndWFyZEV2ZW50IChlKSB7XG4gIC8vIGRvbid0IHJlZGlyZWN0IHdpdGggY29udHJvbCBrZXlzXG4gIGlmIChlLm1ldGFLZXkgfHwgZS5hbHRLZXkgfHwgZS5jdHJsS2V5IHx8IGUuc2hpZnRLZXkpIHsgcmV0dXJuIH1cbiAgLy8gZG9uJ3QgcmVkaXJlY3Qgd2hlbiBwcmV2ZW50RGVmYXVsdCBjYWxsZWRcbiAgaWYgKGUuZGVmYXVsdFByZXZlbnRlZCkgeyByZXR1cm4gfVxuICAvLyBkb24ndCByZWRpcmVjdCBvbiByaWdodCBjbGlja1xuICBpZiAoZS5idXR0b24gIT09IHVuZGVmaW5lZCAmJiBlLmJ1dHRvbiAhPT0gMCkgeyByZXR1cm4gfVxuICAvLyBkb24ndCByZWRpcmVjdCBpZiBgdGFyZ2V0PVwiX2JsYW5rXCJgXG4gIGlmIChlLmN1cnJlbnRUYXJnZXQgJiYgZS5jdXJyZW50VGFyZ2V0LmdldEF0dHJpYnV0ZSkge1xuICAgIHZhciB0YXJnZXQgPSBlLmN1cnJlbnRUYXJnZXQuZ2V0QXR0cmlidXRlKCd0YXJnZXQnKTtcbiAgICBpZiAoL1xcYl9ibGFua1xcYi9pLnRlc3QodGFyZ2V0KSkgeyByZXR1cm4gfVxuICB9XG4gIC8vIHRoaXMgbWF5IGJlIGEgV2VleCBldmVudCB3aGljaCBkb2Vzbid0IGhhdmUgdGhpcyBtZXRob2RcbiAgaWYgKGUucHJldmVudERlZmF1bHQpIHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuZnVuY3Rpb24gZmluZEFuY2hvciAoY2hpbGRyZW4pIHtcbiAgaWYgKGNoaWxkcmVuKSB7XG4gICAgdmFyIGNoaWxkO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNoaWxkID0gY2hpbGRyZW5baV07XG4gICAgICBpZiAoY2hpbGQudGFnID09PSAnYScpIHtcbiAgICAgICAgcmV0dXJuIGNoaWxkXG4gICAgICB9XG4gICAgICBpZiAoY2hpbGQuY2hpbGRyZW4gJiYgKGNoaWxkID0gZmluZEFuY2hvcihjaGlsZC5jaGlsZHJlbikpKSB7XG4gICAgICAgIHJldHVybiBjaGlsZFxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52YXIgX1Z1ZTtcblxuZnVuY3Rpb24gaW5zdGFsbCAoVnVlKSB7XG4gIGlmIChpbnN0YWxsLmluc3RhbGxlZCAmJiBfVnVlID09PSBWdWUpIHsgcmV0dXJuIH1cbiAgaW5zdGFsbC5pbnN0YWxsZWQgPSB0cnVlO1xuXG4gIF9WdWUgPSBWdWU7XG5cbiAgdmFyIGlzRGVmID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHYgIT09IHVuZGVmaW5lZDsgfTtcblxuICB2YXIgcmVnaXN0ZXJJbnN0YW5jZSA9IGZ1bmN0aW9uICh2bSwgY2FsbFZhbCkge1xuICAgIHZhciBpID0gdm0uJG9wdGlvbnMuX3BhcmVudFZub2RlO1xuICAgIGlmIChpc0RlZihpKSAmJiBpc0RlZihpID0gaS5kYXRhKSAmJiBpc0RlZihpID0gaS5yZWdpc3RlclJvdXRlSW5zdGFuY2UpKSB7XG4gICAgICBpKHZtLCBjYWxsVmFsKTtcbiAgICB9XG4gIH07XG5cbiAgVnVlLm1peGluKHtcbiAgICBiZWZvcmVDcmVhdGU6IGZ1bmN0aW9uIGJlZm9yZUNyZWF0ZSAoKSB7XG4gICAgICBpZiAoaXNEZWYodGhpcy4kb3B0aW9ucy5yb3V0ZXIpKSB7XG4gICAgICAgIHRoaXMuX3JvdXRlclJvb3QgPSB0aGlzO1xuICAgICAgICB0aGlzLl9yb3V0ZXIgPSB0aGlzLiRvcHRpb25zLnJvdXRlcjtcbiAgICAgICAgdGhpcy5fcm91dGVyLmluaXQodGhpcyk7XG4gICAgICAgIFZ1ZS51dGlsLmRlZmluZVJlYWN0aXZlKHRoaXMsICdfcm91dGUnLCB0aGlzLl9yb3V0ZXIuaGlzdG9yeS5jdXJyZW50KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX3JvdXRlclJvb3QgPSAodGhpcy4kcGFyZW50ICYmIHRoaXMuJHBhcmVudC5fcm91dGVyUm9vdCkgfHwgdGhpcztcbiAgICAgIH1cbiAgICAgIHJlZ2lzdGVySW5zdGFuY2UodGhpcywgdGhpcyk7XG4gICAgfSxcbiAgICBkZXN0cm95ZWQ6IGZ1bmN0aW9uIGRlc3Ryb3llZCAoKSB7XG4gICAgICByZWdpc3Rlckluc3RhbmNlKHRoaXMpO1xuICAgIH1cbiAgfSk7XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFZ1ZS5wcm90b3R5cGUsICckcm91dGVyJywge1xuICAgIGdldDogZnVuY3Rpb24gZ2V0ICgpIHsgcmV0dXJuIHRoaXMuX3JvdXRlclJvb3QuX3JvdXRlciB9XG4gIH0pO1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWdWUucHJvdG90eXBlLCAnJHJvdXRlJywge1xuICAgIGdldDogZnVuY3Rpb24gZ2V0ICgpIHsgcmV0dXJuIHRoaXMuX3JvdXRlclJvb3QuX3JvdXRlIH1cbiAgfSk7XG5cbiAgVnVlLmNvbXBvbmVudCgnUm91dGVyVmlldycsIFZpZXcpO1xuICBWdWUuY29tcG9uZW50KCdSb3V0ZXJMaW5rJywgTGluayk7XG5cbiAgdmFyIHN0cmF0cyA9IFZ1ZS5jb25maWcub3B0aW9uTWVyZ2VTdHJhdGVnaWVzO1xuICAvLyB1c2UgdGhlIHNhbWUgaG9vayBtZXJnaW5nIHN0cmF0ZWd5IGZvciByb3V0ZSBob29rc1xuICBzdHJhdHMuYmVmb3JlUm91dGVFbnRlciA9IHN0cmF0cy5iZWZvcmVSb3V0ZUxlYXZlID0gc3RyYXRzLmJlZm9yZVJvdXRlVXBkYXRlID0gc3RyYXRzLmNyZWF0ZWQ7XG59XG5cbi8qICAqL1xuXG52YXIgaW5Ccm93c2VyID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCc7XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBjcmVhdGVSb3V0ZU1hcCAoXG4gIHJvdXRlcyxcbiAgb2xkUGF0aExpc3QsXG4gIG9sZFBhdGhNYXAsXG4gIG9sZE5hbWVNYXAsXG4gIHBhcmVudFJvdXRlXG4pIHtcbiAgLy8gdGhlIHBhdGggbGlzdCBpcyB1c2VkIHRvIGNvbnRyb2wgcGF0aCBtYXRjaGluZyBwcmlvcml0eVxuICB2YXIgcGF0aExpc3QgPSBvbGRQYXRoTGlzdCB8fCBbXTtcbiAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gIHZhciBwYXRoTWFwID0gb2xkUGF0aE1hcCB8fCBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgdmFyIG5hbWVNYXAgPSBvbGROYW1lTWFwIHx8IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgcm91dGVzLmZvckVhY2goZnVuY3Rpb24gKHJvdXRlKSB7XG4gICAgYWRkUm91dGVSZWNvcmQocGF0aExpc3QsIHBhdGhNYXAsIG5hbWVNYXAsIHJvdXRlLCBwYXJlbnRSb3V0ZSk7XG4gIH0pO1xuXG4gIC8vIGVuc3VyZSB3aWxkY2FyZCByb3V0ZXMgYXJlIGFsd2F5cyBhdCB0aGUgZW5kXG4gIGZvciAodmFyIGkgPSAwLCBsID0gcGF0aExpc3QubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgaWYgKHBhdGhMaXN0W2ldID09PSAnKicpIHtcbiAgICAgIHBhdGhMaXN0LnB1c2gocGF0aExpc3Quc3BsaWNlKGksIDEpWzBdKTtcbiAgICAgIGwtLTtcbiAgICAgIGktLTtcbiAgICB9XG4gIH1cblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCcpIHtcbiAgICAvLyB3YXJuIGlmIHJvdXRlcyBkbyBub3QgaW5jbHVkZSBsZWFkaW5nIHNsYXNoZXNcbiAgICB2YXIgZm91bmQgPSBwYXRoTGlzdFxuICAgIC8vIGNoZWNrIGZvciBtaXNzaW5nIGxlYWRpbmcgc2xhc2hcbiAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKHBhdGgpIHsgcmV0dXJuIHBhdGggJiYgcGF0aC5jaGFyQXQoMCkgIT09ICcqJyAmJiBwYXRoLmNoYXJBdCgwKSAhPT0gJy8nOyB9KTtcblxuICAgIGlmIChmb3VuZC5sZW5ndGggPiAwKSB7XG4gICAgICB2YXIgcGF0aE5hbWVzID0gZm91bmQubWFwKGZ1bmN0aW9uIChwYXRoKSB7IHJldHVybiAoXCItIFwiICsgcGF0aCk7IH0pLmpvaW4oJ1xcbicpO1xuICAgICAgd2FybihmYWxzZSwgKFwiTm9uLW5lc3RlZCByb3V0ZXMgbXVzdCBpbmNsdWRlIGEgbGVhZGluZyBzbGFzaCBjaGFyYWN0ZXIuIEZpeCB0aGUgZm9sbG93aW5nIHJvdXRlczogXFxuXCIgKyBwYXRoTmFtZXMpKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHBhdGhMaXN0OiBwYXRoTGlzdCxcbiAgICBwYXRoTWFwOiBwYXRoTWFwLFxuICAgIG5hbWVNYXA6IG5hbWVNYXBcbiAgfVxufVxuXG5mdW5jdGlvbiBhZGRSb3V0ZVJlY29yZCAoXG4gIHBhdGhMaXN0LFxuICBwYXRoTWFwLFxuICBuYW1lTWFwLFxuICByb3V0ZSxcbiAgcGFyZW50LFxuICBtYXRjaEFzXG4pIHtcbiAgdmFyIHBhdGggPSByb3V0ZS5wYXRoO1xuICB2YXIgbmFtZSA9IHJvdXRlLm5hbWU7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgYXNzZXJ0KHBhdGggIT0gbnVsbCwgXCJcXFwicGF0aFxcXCIgaXMgcmVxdWlyZWQgaW4gYSByb3V0ZSBjb25maWd1cmF0aW9uLlwiKTtcbiAgICBhc3NlcnQoXG4gICAgICB0eXBlb2Ygcm91dGUuY29tcG9uZW50ICE9PSAnc3RyaW5nJyxcbiAgICAgIFwicm91dGUgY29uZmlnIFxcXCJjb21wb25lbnRcXFwiIGZvciBwYXRoOiBcIiArIChTdHJpbmcoXG4gICAgICAgIHBhdGggfHwgbmFtZVxuICAgICAgKSkgKyBcIiBjYW5ub3QgYmUgYSBcIiArIFwic3RyaW5nIGlkLiBVc2UgYW4gYWN0dWFsIGNvbXBvbmVudCBpbnN0ZWFkLlwiXG4gICAgKTtcblxuICAgIHdhcm4oXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29udHJvbC1yZWdleFxuICAgICAgIS9bXlxcdTAwMDAtXFx1MDA3Rl0rLy50ZXN0KHBhdGgpLFxuICAgICAgXCJSb3V0ZSB3aXRoIHBhdGggXFxcIlwiICsgcGF0aCArIFwiXFxcIiBjb250YWlucyB1bmVuY29kZWQgY2hhcmFjdGVycywgbWFrZSBzdXJlIFwiICtcbiAgICAgICAgXCJ5b3VyIHBhdGggaXMgY29ycmVjdGx5IGVuY29kZWQgYmVmb3JlIHBhc3NpbmcgaXQgdG8gdGhlIHJvdXRlci4gVXNlIFwiICtcbiAgICAgICAgXCJlbmNvZGVVUkkgdG8gZW5jb2RlIHN0YXRpYyBzZWdtZW50cyBvZiB5b3VyIHBhdGguXCJcbiAgICApO1xuICB9XG5cbiAgdmFyIHBhdGhUb1JlZ2V4cE9wdGlvbnMgPVxuICAgIHJvdXRlLnBhdGhUb1JlZ2V4cE9wdGlvbnMgfHwge307XG4gIHZhciBub3JtYWxpemVkUGF0aCA9IG5vcm1hbGl6ZVBhdGgocGF0aCwgcGFyZW50LCBwYXRoVG9SZWdleHBPcHRpb25zLnN0cmljdCk7XG5cbiAgaWYgKHR5cGVvZiByb3V0ZS5jYXNlU2Vuc2l0aXZlID09PSAnYm9vbGVhbicpIHtcbiAgICBwYXRoVG9SZWdleHBPcHRpb25zLnNlbnNpdGl2ZSA9IHJvdXRlLmNhc2VTZW5zaXRpdmU7XG4gIH1cblxuICB2YXIgcmVjb3JkID0ge1xuICAgIHBhdGg6IG5vcm1hbGl6ZWRQYXRoLFxuICAgIHJlZ2V4OiBjb21waWxlUm91dGVSZWdleChub3JtYWxpemVkUGF0aCwgcGF0aFRvUmVnZXhwT3B0aW9ucyksXG4gICAgY29tcG9uZW50czogcm91dGUuY29tcG9uZW50cyB8fCB7IGRlZmF1bHQ6IHJvdXRlLmNvbXBvbmVudCB9LFxuICAgIGFsaWFzOiByb3V0ZS5hbGlhc1xuICAgICAgPyB0eXBlb2Ygcm91dGUuYWxpYXMgPT09ICdzdHJpbmcnXG4gICAgICAgID8gW3JvdXRlLmFsaWFzXVxuICAgICAgICA6IHJvdXRlLmFsaWFzXG4gICAgICA6IFtdLFxuICAgIGluc3RhbmNlczoge30sXG4gICAgZW50ZXJlZENiczoge30sXG4gICAgbmFtZTogbmFtZSxcbiAgICBwYXJlbnQ6IHBhcmVudCxcbiAgICBtYXRjaEFzOiBtYXRjaEFzLFxuICAgIHJlZGlyZWN0OiByb3V0ZS5yZWRpcmVjdCxcbiAgICBiZWZvcmVFbnRlcjogcm91dGUuYmVmb3JlRW50ZXIsXG4gICAgbWV0YTogcm91dGUubWV0YSB8fCB7fSxcbiAgICBwcm9wczpcbiAgICAgIHJvdXRlLnByb3BzID09IG51bGxcbiAgICAgICAgPyB7fVxuICAgICAgICA6IHJvdXRlLmNvbXBvbmVudHNcbiAgICAgICAgICA/IHJvdXRlLnByb3BzXG4gICAgICAgICAgOiB7IGRlZmF1bHQ6IHJvdXRlLnByb3BzIH1cbiAgfTtcblxuICBpZiAocm91dGUuY2hpbGRyZW4pIHtcbiAgICAvLyBXYXJuIGlmIHJvdXRlIGlzIG5hbWVkLCBkb2VzIG5vdCByZWRpcmVjdCBhbmQgaGFzIGEgZGVmYXVsdCBjaGlsZCByb3V0ZS5cbiAgICAvLyBJZiB1c2VycyBuYXZpZ2F0ZSB0byB0aGlzIHJvdXRlIGJ5IG5hbWUsIHRoZSBkZWZhdWx0IGNoaWxkIHdpbGxcbiAgICAvLyBub3QgYmUgcmVuZGVyZWQgKEdIIElzc3VlICM2MjkpXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmIChcbiAgICAgICAgcm91dGUubmFtZSAmJlxuICAgICAgICAhcm91dGUucmVkaXJlY3QgJiZcbiAgICAgICAgcm91dGUuY2hpbGRyZW4uc29tZShmdW5jdGlvbiAoY2hpbGQpIHsgcmV0dXJuIC9eXFwvPyQvLnRlc3QoY2hpbGQucGF0aCk7IH0pXG4gICAgICApIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICBcIk5hbWVkIFJvdXRlICdcIiArIChyb3V0ZS5uYW1lKSArIFwiJyBoYXMgYSBkZWZhdWx0IGNoaWxkIHJvdXRlLiBcIiArXG4gICAgICAgICAgICBcIldoZW4gbmF2aWdhdGluZyB0byB0aGlzIG5hbWVkIHJvdXRlICg6dG89XFxcIntuYW1lOiAnXCIgKyAocm91dGUubmFtZSkgKyBcIid9XFxcIiksIFwiICtcbiAgICAgICAgICAgIFwidGhlIGRlZmF1bHQgY2hpbGQgcm91dGUgd2lsbCBub3QgYmUgcmVuZGVyZWQuIFJlbW92ZSB0aGUgbmFtZSBmcm9tIFwiICtcbiAgICAgICAgICAgIFwidGhpcyByb3V0ZSBhbmQgdXNlIHRoZSBuYW1lIG9mIHRoZSBkZWZhdWx0IGNoaWxkIHJvdXRlIGZvciBuYW1lZCBcIiArXG4gICAgICAgICAgICBcImxpbmtzIGluc3RlYWQuXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcm91dGUuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgIHZhciBjaGlsZE1hdGNoQXMgPSBtYXRjaEFzXG4gICAgICAgID8gY2xlYW5QYXRoKChtYXRjaEFzICsgXCIvXCIgKyAoY2hpbGQucGF0aCkpKVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgIGFkZFJvdXRlUmVjb3JkKHBhdGhMaXN0LCBwYXRoTWFwLCBuYW1lTWFwLCBjaGlsZCwgcmVjb3JkLCBjaGlsZE1hdGNoQXMpO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKCFwYXRoTWFwW3JlY29yZC5wYXRoXSkge1xuICAgIHBhdGhMaXN0LnB1c2gocmVjb3JkLnBhdGgpO1xuICAgIHBhdGhNYXBbcmVjb3JkLnBhdGhdID0gcmVjb3JkO1xuICB9XG5cbiAgaWYgKHJvdXRlLmFsaWFzICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgYWxpYXNlcyA9IEFycmF5LmlzQXJyYXkocm91dGUuYWxpYXMpID8gcm91dGUuYWxpYXMgOiBbcm91dGUuYWxpYXNdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWxpYXNlcy5sZW5ndGg7ICsraSkge1xuICAgICAgdmFyIGFsaWFzID0gYWxpYXNlc1tpXTtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGFsaWFzID09PSBwYXRoKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgKFwiRm91bmQgYW4gYWxpYXMgd2l0aCB0aGUgc2FtZSB2YWx1ZSBhcyB0aGUgcGF0aDogXFxcIlwiICsgcGF0aCArIFwiXFxcIi4gWW91IGhhdmUgdG8gcmVtb3ZlIHRoYXQgYWxpYXMuIEl0IHdpbGwgYmUgaWdub3JlZCBpbiBkZXZlbG9wbWVudC5cIilcbiAgICAgICAgKTtcbiAgICAgICAgLy8gc2tpcCBpbiBkZXYgdG8gbWFrZSBpdCB3b3JrXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIHZhciBhbGlhc1JvdXRlID0ge1xuICAgICAgICBwYXRoOiBhbGlhcyxcbiAgICAgICAgY2hpbGRyZW46IHJvdXRlLmNoaWxkcmVuXG4gICAgICB9O1xuICAgICAgYWRkUm91dGVSZWNvcmQoXG4gICAgICAgIHBhdGhMaXN0LFxuICAgICAgICBwYXRoTWFwLFxuICAgICAgICBuYW1lTWFwLFxuICAgICAgICBhbGlhc1JvdXRlLFxuICAgICAgICBwYXJlbnQsXG4gICAgICAgIHJlY29yZC5wYXRoIHx8ICcvJyAvLyBtYXRjaEFzXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGlmIChuYW1lKSB7XG4gICAgaWYgKCFuYW1lTWFwW25hbWVdKSB7XG4gICAgICBuYW1lTWFwW25hbWVdID0gcmVjb3JkO1xuICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhbWF0Y2hBcykge1xuICAgICAgd2FybihcbiAgICAgICAgZmFsc2UsXG4gICAgICAgIFwiRHVwbGljYXRlIG5hbWVkIHJvdXRlcyBkZWZpbml0aW9uOiBcIiArXG4gICAgICAgICAgXCJ7IG5hbWU6IFxcXCJcIiArIG5hbWUgKyBcIlxcXCIsIHBhdGg6IFxcXCJcIiArIChyZWNvcmQucGF0aCkgKyBcIlxcXCIgfVwiXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb21waWxlUm91dGVSZWdleCAoXG4gIHBhdGgsXG4gIHBhdGhUb1JlZ2V4cE9wdGlvbnNcbikge1xuICB2YXIgcmVnZXggPSBwYXRoVG9SZWdleHBfMShwYXRoLCBbXSwgcGF0aFRvUmVnZXhwT3B0aW9ucyk7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgdmFyIGtleXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHJlZ2V4LmtleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICB3YXJuKFxuICAgICAgICAha2V5c1trZXkubmFtZV0sXG4gICAgICAgIChcIkR1cGxpY2F0ZSBwYXJhbSBrZXlzIGluIHJvdXRlIHdpdGggcGF0aDogXFxcIlwiICsgcGF0aCArIFwiXFxcIlwiKVxuICAgICAgKTtcbiAgICAgIGtleXNba2V5Lm5hbWVdID0gdHJ1ZTtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gcmVnZXhcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplUGF0aCAoXG4gIHBhdGgsXG4gIHBhcmVudCxcbiAgc3RyaWN0XG4pIHtcbiAgaWYgKCFzdHJpY3QpIHsgcGF0aCA9IHBhdGgucmVwbGFjZSgvXFwvJC8sICcnKTsgfVxuICBpZiAocGF0aFswXSA9PT0gJy8nKSB7IHJldHVybiBwYXRoIH1cbiAgaWYgKHBhcmVudCA9PSBudWxsKSB7IHJldHVybiBwYXRoIH1cbiAgcmV0dXJuIGNsZWFuUGF0aCgoKHBhcmVudC5wYXRoKSArIFwiL1wiICsgcGF0aCkpXG59XG5cbi8qICAqL1xuXG5cblxuZnVuY3Rpb24gY3JlYXRlTWF0Y2hlciAoXG4gIHJvdXRlcyxcbiAgcm91dGVyXG4pIHtcbiAgdmFyIHJlZiA9IGNyZWF0ZVJvdXRlTWFwKHJvdXRlcyk7XG4gIHZhciBwYXRoTGlzdCA9IHJlZi5wYXRoTGlzdDtcbiAgdmFyIHBhdGhNYXAgPSByZWYucGF0aE1hcDtcbiAgdmFyIG5hbWVNYXAgPSByZWYubmFtZU1hcDtcblxuICBmdW5jdGlvbiBhZGRSb3V0ZXMgKHJvdXRlcykge1xuICAgIGNyZWF0ZVJvdXRlTWFwKHJvdXRlcywgcGF0aExpc3QsIHBhdGhNYXAsIG5hbWVNYXApO1xuICB9XG5cbiAgZnVuY3Rpb24gYWRkUm91dGUgKHBhcmVudE9yUm91dGUsIHJvdXRlKSB7XG4gICAgdmFyIHBhcmVudCA9ICh0eXBlb2YgcGFyZW50T3JSb3V0ZSAhPT0gJ29iamVjdCcpID8gbmFtZU1hcFtwYXJlbnRPclJvdXRlXSA6IHVuZGVmaW5lZDtcbiAgICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgICBjcmVhdGVSb3V0ZU1hcChbcm91dGUgfHwgcGFyZW50T3JSb3V0ZV0sIHBhdGhMaXN0LCBwYXRoTWFwLCBuYW1lTWFwLCBwYXJlbnQpO1xuXG4gICAgLy8gYWRkIGFsaWFzZXMgb2YgcGFyZW50XG4gICAgaWYgKHBhcmVudCAmJiBwYXJlbnQuYWxpYXMubGVuZ3RoKSB7XG4gICAgICBjcmVhdGVSb3V0ZU1hcChcbiAgICAgICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lIHJvdXRlIGlzIGRlZmluZWQgaWYgcGFyZW50IGlzXG4gICAgICAgIHBhcmVudC5hbGlhcy5tYXAoZnVuY3Rpb24gKGFsaWFzKSB7IHJldHVybiAoeyBwYXRoOiBhbGlhcywgY2hpbGRyZW46IFtyb3V0ZV0gfSk7IH0pLFxuICAgICAgICBwYXRoTGlzdCxcbiAgICAgICAgcGF0aE1hcCxcbiAgICAgICAgbmFtZU1hcCxcbiAgICAgICAgcGFyZW50XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFJvdXRlcyAoKSB7XG4gICAgcmV0dXJuIHBhdGhMaXN0Lm1hcChmdW5jdGlvbiAocGF0aCkgeyByZXR1cm4gcGF0aE1hcFtwYXRoXTsgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIG1hdGNoIChcbiAgICByYXcsXG4gICAgY3VycmVudFJvdXRlLFxuICAgIHJlZGlyZWN0ZWRGcm9tXG4gICkge1xuICAgIHZhciBsb2NhdGlvbiA9IG5vcm1hbGl6ZUxvY2F0aW9uKHJhdywgY3VycmVudFJvdXRlLCBmYWxzZSwgcm91dGVyKTtcbiAgICB2YXIgbmFtZSA9IGxvY2F0aW9uLm5hbWU7XG5cbiAgICBpZiAobmFtZSkge1xuICAgICAgdmFyIHJlY29yZCA9IG5hbWVNYXBbbmFtZV07XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICB3YXJuKHJlY29yZCwgKFwiUm91dGUgd2l0aCBuYW1lICdcIiArIG5hbWUgKyBcIicgZG9lcyBub3QgZXhpc3RcIikpO1xuICAgICAgfVxuICAgICAgaWYgKCFyZWNvcmQpIHsgcmV0dXJuIF9jcmVhdGVSb3V0ZShudWxsLCBsb2NhdGlvbikgfVxuICAgICAgdmFyIHBhcmFtTmFtZXMgPSByZWNvcmQucmVnZXgua2V5c1xuICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuICFrZXkub3B0aW9uYWw7IH0pXG4gICAgICAgIC5tYXAoZnVuY3Rpb24gKGtleSkgeyByZXR1cm4ga2V5Lm5hbWU7IH0pO1xuXG4gICAgICBpZiAodHlwZW9mIGxvY2F0aW9uLnBhcmFtcyAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgbG9jYXRpb24ucGFyYW1zID0ge307XG4gICAgICB9XG5cbiAgICAgIGlmIChjdXJyZW50Um91dGUgJiYgdHlwZW9mIGN1cnJlbnRSb3V0ZS5wYXJhbXMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGZvciAodmFyIGtleSBpbiBjdXJyZW50Um91dGUucGFyYW1zKSB7XG4gICAgICAgICAgaWYgKCEoa2V5IGluIGxvY2F0aW9uLnBhcmFtcykgJiYgcGFyYW1OYW1lcy5pbmRleE9mKGtleSkgPiAtMSkge1xuICAgICAgICAgICAgbG9jYXRpb24ucGFyYW1zW2tleV0gPSBjdXJyZW50Um91dGUucGFyYW1zW2tleV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxvY2F0aW9uLnBhdGggPSBmaWxsUGFyYW1zKHJlY29yZC5wYXRoLCBsb2NhdGlvbi5wYXJhbXMsIChcIm5hbWVkIHJvdXRlIFxcXCJcIiArIG5hbWUgKyBcIlxcXCJcIikpO1xuICAgICAgcmV0dXJuIF9jcmVhdGVSb3V0ZShyZWNvcmQsIGxvY2F0aW9uLCByZWRpcmVjdGVkRnJvbSlcbiAgICB9IGVsc2UgaWYgKGxvY2F0aW9uLnBhdGgpIHtcbiAgICAgIGxvY2F0aW9uLnBhcmFtcyA9IHt9O1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXRoTGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgcGF0aCA9IHBhdGhMaXN0W2ldO1xuICAgICAgICB2YXIgcmVjb3JkJDEgPSBwYXRoTWFwW3BhdGhdO1xuICAgICAgICBpZiAobWF0Y2hSb3V0ZShyZWNvcmQkMS5yZWdleCwgbG9jYXRpb24ucGF0aCwgbG9jYXRpb24ucGFyYW1zKSkge1xuICAgICAgICAgIHJldHVybiBfY3JlYXRlUm91dGUocmVjb3JkJDEsIGxvY2F0aW9uLCByZWRpcmVjdGVkRnJvbSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAvLyBubyBtYXRjaFxuICAgIHJldHVybiBfY3JlYXRlUm91dGUobnVsbCwgbG9jYXRpb24pXG4gIH1cblxuICBmdW5jdGlvbiByZWRpcmVjdCAoXG4gICAgcmVjb3JkLFxuICAgIGxvY2F0aW9uXG4gICkge1xuICAgIHZhciBvcmlnaW5hbFJlZGlyZWN0ID0gcmVjb3JkLnJlZGlyZWN0O1xuICAgIHZhciByZWRpcmVjdCA9IHR5cGVvZiBvcmlnaW5hbFJlZGlyZWN0ID09PSAnZnVuY3Rpb24nXG4gICAgICA/IG9yaWdpbmFsUmVkaXJlY3QoY3JlYXRlUm91dGUocmVjb3JkLCBsb2NhdGlvbiwgbnVsbCwgcm91dGVyKSlcbiAgICAgIDogb3JpZ2luYWxSZWRpcmVjdDtcblxuICAgIGlmICh0eXBlb2YgcmVkaXJlY3QgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZWRpcmVjdCA9IHsgcGF0aDogcmVkaXJlY3QgfTtcbiAgICB9XG5cbiAgICBpZiAoIXJlZGlyZWN0IHx8IHR5cGVvZiByZWRpcmVjdCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgZmFsc2UsIChcImludmFsaWQgcmVkaXJlY3Qgb3B0aW9uOiBcIiArIChKU09OLnN0cmluZ2lmeShyZWRpcmVjdCkpKVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF9jcmVhdGVSb3V0ZShudWxsLCBsb2NhdGlvbilcbiAgICB9XG5cbiAgICB2YXIgcmUgPSByZWRpcmVjdDtcbiAgICB2YXIgbmFtZSA9IHJlLm5hbWU7XG4gICAgdmFyIHBhdGggPSByZS5wYXRoO1xuICAgIHZhciBxdWVyeSA9IGxvY2F0aW9uLnF1ZXJ5O1xuICAgIHZhciBoYXNoID0gbG9jYXRpb24uaGFzaDtcbiAgICB2YXIgcGFyYW1zID0gbG9jYXRpb24ucGFyYW1zO1xuICAgIHF1ZXJ5ID0gcmUuaGFzT3duUHJvcGVydHkoJ3F1ZXJ5JykgPyByZS5xdWVyeSA6IHF1ZXJ5O1xuICAgIGhhc2ggPSByZS5oYXNPd25Qcm9wZXJ0eSgnaGFzaCcpID8gcmUuaGFzaCA6IGhhc2g7XG4gICAgcGFyYW1zID0gcmUuaGFzT3duUHJvcGVydHkoJ3BhcmFtcycpID8gcmUucGFyYW1zIDogcGFyYW1zO1xuXG4gICAgaWYgKG5hbWUpIHtcbiAgICAgIC8vIHJlc29sdmVkIG5hbWVkIGRpcmVjdFxuICAgICAgdmFyIHRhcmdldFJlY29yZCA9IG5hbWVNYXBbbmFtZV07XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBhc3NlcnQodGFyZ2V0UmVjb3JkLCAoXCJyZWRpcmVjdCBmYWlsZWQ6IG5hbWVkIHJvdXRlIFxcXCJcIiArIG5hbWUgKyBcIlxcXCIgbm90IGZvdW5kLlwiKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbWF0Y2goe1xuICAgICAgICBfbm9ybWFsaXplZDogdHJ1ZSxcbiAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgcXVlcnk6IHF1ZXJ5LFxuICAgICAgICBoYXNoOiBoYXNoLFxuICAgICAgICBwYXJhbXM6IHBhcmFtc1xuICAgICAgfSwgdW5kZWZpbmVkLCBsb2NhdGlvbilcbiAgICB9IGVsc2UgaWYgKHBhdGgpIHtcbiAgICAgIC8vIDEuIHJlc29sdmUgcmVsYXRpdmUgcmVkaXJlY3RcbiAgICAgIHZhciByYXdQYXRoID0gcmVzb2x2ZVJlY29yZFBhdGgocGF0aCwgcmVjb3JkKTtcbiAgICAgIC8vIDIuIHJlc29sdmUgcGFyYW1zXG4gICAgICB2YXIgcmVzb2x2ZWRQYXRoID0gZmlsbFBhcmFtcyhyYXdQYXRoLCBwYXJhbXMsIChcInJlZGlyZWN0IHJvdXRlIHdpdGggcGF0aCBcXFwiXCIgKyByYXdQYXRoICsgXCJcXFwiXCIpKTtcbiAgICAgIC8vIDMuIHJlbWF0Y2ggd2l0aCBleGlzdGluZyBxdWVyeSBhbmQgaGFzaFxuICAgICAgcmV0dXJuIG1hdGNoKHtcbiAgICAgICAgX25vcm1hbGl6ZWQ6IHRydWUsXG4gICAgICAgIHBhdGg6IHJlc29sdmVkUGF0aCxcbiAgICAgICAgcXVlcnk6IHF1ZXJ5LFxuICAgICAgICBoYXNoOiBoYXNoXG4gICAgICB9LCB1bmRlZmluZWQsIGxvY2F0aW9uKVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICB3YXJuKGZhbHNlLCAoXCJpbnZhbGlkIHJlZGlyZWN0IG9wdGlvbjogXCIgKyAoSlNPTi5zdHJpbmdpZnkocmVkaXJlY3QpKSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF9jcmVhdGVSb3V0ZShudWxsLCBsb2NhdGlvbilcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBhbGlhcyAoXG4gICAgcmVjb3JkLFxuICAgIGxvY2F0aW9uLFxuICAgIG1hdGNoQXNcbiAgKSB7XG4gICAgdmFyIGFsaWFzZWRQYXRoID0gZmlsbFBhcmFtcyhtYXRjaEFzLCBsb2NhdGlvbi5wYXJhbXMsIChcImFsaWFzZWQgcm91dGUgd2l0aCBwYXRoIFxcXCJcIiArIG1hdGNoQXMgKyBcIlxcXCJcIikpO1xuICAgIHZhciBhbGlhc2VkTWF0Y2ggPSBtYXRjaCh7XG4gICAgICBfbm9ybWFsaXplZDogdHJ1ZSxcbiAgICAgIHBhdGg6IGFsaWFzZWRQYXRoXG4gICAgfSk7XG4gICAgaWYgKGFsaWFzZWRNYXRjaCkge1xuICAgICAgdmFyIG1hdGNoZWQgPSBhbGlhc2VkTWF0Y2gubWF0Y2hlZDtcbiAgICAgIHZhciBhbGlhc2VkUmVjb3JkID0gbWF0Y2hlZFttYXRjaGVkLmxlbmd0aCAtIDFdO1xuICAgICAgbG9jYXRpb24ucGFyYW1zID0gYWxpYXNlZE1hdGNoLnBhcmFtcztcbiAgICAgIHJldHVybiBfY3JlYXRlUm91dGUoYWxpYXNlZFJlY29yZCwgbG9jYXRpb24pXG4gICAgfVxuICAgIHJldHVybiBfY3JlYXRlUm91dGUobnVsbCwgbG9jYXRpb24pXG4gIH1cblxuICBmdW5jdGlvbiBfY3JlYXRlUm91dGUgKFxuICAgIHJlY29yZCxcbiAgICBsb2NhdGlvbixcbiAgICByZWRpcmVjdGVkRnJvbVxuICApIHtcbiAgICBpZiAocmVjb3JkICYmIHJlY29yZC5yZWRpcmVjdCkge1xuICAgICAgcmV0dXJuIHJlZGlyZWN0KHJlY29yZCwgcmVkaXJlY3RlZEZyb20gfHwgbG9jYXRpb24pXG4gICAgfVxuICAgIGlmIChyZWNvcmQgJiYgcmVjb3JkLm1hdGNoQXMpIHtcbiAgICAgIHJldHVybiBhbGlhcyhyZWNvcmQsIGxvY2F0aW9uLCByZWNvcmQubWF0Y2hBcylcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZVJvdXRlKHJlY29yZCwgbG9jYXRpb24sIHJlZGlyZWN0ZWRGcm9tLCByb3V0ZXIpXG4gIH1cblxuICByZXR1cm4ge1xuICAgIG1hdGNoOiBtYXRjaCxcbiAgICBhZGRSb3V0ZTogYWRkUm91dGUsXG4gICAgZ2V0Um91dGVzOiBnZXRSb3V0ZXMsXG4gICAgYWRkUm91dGVzOiBhZGRSb3V0ZXNcbiAgfVxufVxuXG5mdW5jdGlvbiBtYXRjaFJvdXRlIChcbiAgcmVnZXgsXG4gIHBhdGgsXG4gIHBhcmFtc1xuKSB7XG4gIHZhciBtID0gcGF0aC5tYXRjaChyZWdleCk7XG5cbiAgaWYgKCFtKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH0gZWxzZSBpZiAoIXBhcmFtcykge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBmb3IgKHZhciBpID0gMSwgbGVuID0gbS5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICAgIHZhciBrZXkgPSByZWdleC5rZXlzW2kgLSAxXTtcbiAgICBpZiAoa2V5KSB7XG4gICAgICAvLyBGaXggIzE5OTQ6IHVzaW5nICogd2l0aCBwcm9wczogdHJ1ZSBnZW5lcmF0ZXMgYSBwYXJhbSBuYW1lZCAwXG4gICAgICBwYXJhbXNba2V5Lm5hbWUgfHwgJ3BhdGhNYXRjaCddID0gdHlwZW9mIG1baV0gPT09ICdzdHJpbmcnID8gZGVjb2RlKG1baV0pIDogbVtpXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiByZXNvbHZlUmVjb3JkUGF0aCAocGF0aCwgcmVjb3JkKSB7XG4gIHJldHVybiByZXNvbHZlUGF0aChwYXRoLCByZWNvcmQucGFyZW50ID8gcmVjb3JkLnBhcmVudC5wYXRoIDogJy8nLCB0cnVlKVxufVxuXG4vKiAgKi9cblxuLy8gdXNlIFVzZXIgVGltaW5nIGFwaSAoaWYgcHJlc2VudCkgZm9yIG1vcmUgYWNjdXJhdGUga2V5IHByZWNpc2lvblxudmFyIFRpbWUgPVxuICBpbkJyb3dzZXIgJiYgd2luZG93LnBlcmZvcm1hbmNlICYmIHdpbmRvdy5wZXJmb3JtYW5jZS5ub3dcbiAgICA/IHdpbmRvdy5wZXJmb3JtYW5jZVxuICAgIDogRGF0ZTtcblxuZnVuY3Rpb24gZ2VuU3RhdGVLZXkgKCkge1xuICByZXR1cm4gVGltZS5ub3coKS50b0ZpeGVkKDMpXG59XG5cbnZhciBfa2V5ID0gZ2VuU3RhdGVLZXkoKTtcblxuZnVuY3Rpb24gZ2V0U3RhdGVLZXkgKCkge1xuICByZXR1cm4gX2tleVxufVxuXG5mdW5jdGlvbiBzZXRTdGF0ZUtleSAoa2V5KSB7XG4gIHJldHVybiAoX2tleSA9IGtleSlcbn1cblxuLyogICovXG5cbnZhciBwb3NpdGlvblN0b3JlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuZnVuY3Rpb24gc2V0dXBTY3JvbGwgKCkge1xuICAvLyBQcmV2ZW50IGJyb3dzZXIgc2Nyb2xsIGJlaGF2aW9yIG9uIEhpc3RvcnkgcG9wc3RhdGVcbiAgaWYgKCdzY3JvbGxSZXN0b3JhdGlvbicgaW4gd2luZG93Lmhpc3RvcnkpIHtcbiAgICB3aW5kb3cuaGlzdG9yeS5zY3JvbGxSZXN0b3JhdGlvbiA9ICdtYW51YWwnO1xuICB9XG4gIC8vIEZpeCBmb3IgIzE1ODUgZm9yIEZpcmVmb3hcbiAgLy8gRml4IGZvciAjMjE5NSBBZGQgb3B0aW9uYWwgdGhpcmQgYXR0cmlidXRlIHRvIHdvcmthcm91bmQgYSBidWcgaW4gc2FmYXJpIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODI2NzhcbiAgLy8gRml4IGZvciAjMjc3NCBTdXBwb3J0IGZvciBhcHBzIGxvYWRlZCBmcm9tIFdpbmRvd3MgZmlsZSBzaGFyZXMgbm90IG1hcHBlZCB0byBuZXR3b3JrIGRyaXZlczogcmVwbGFjZWQgbG9jYXRpb24ub3JpZ2luIHdpdGhcbiAgLy8gd2luZG93LmxvY2F0aW9uLnByb3RvY29sICsgJy8vJyArIHdpbmRvdy5sb2NhdGlvbi5ob3N0XG4gIC8vIGxvY2F0aW9uLmhvc3QgY29udGFpbnMgdGhlIHBvcnQgYW5kIGxvY2F0aW9uLmhvc3RuYW1lIGRvZXNuJ3RcbiAgdmFyIHByb3RvY29sQW5kUGF0aCA9IHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCArICcvLycgKyB3aW5kb3cubG9jYXRpb24uaG9zdDtcbiAgdmFyIGFic29sdXRlUGF0aCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmLnJlcGxhY2UocHJvdG9jb2xBbmRQYXRoLCAnJyk7XG4gIC8vIHByZXNlcnZlIGV4aXN0aW5nIGhpc3Rvcnkgc3RhdGUgYXMgaXQgY291bGQgYmUgb3ZlcnJpZGVuIGJ5IHRoZSB1c2VyXG4gIHZhciBzdGF0ZUNvcHkgPSBleHRlbmQoe30sIHdpbmRvdy5oaXN0b3J5LnN0YXRlKTtcbiAgc3RhdGVDb3B5LmtleSA9IGdldFN0YXRlS2V5KCk7XG4gIHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZShzdGF0ZUNvcHksICcnLCBhYnNvbHV0ZVBhdGgpO1xuICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncG9wc3RhdGUnLCBoYW5kbGVQb3BTdGF0ZSk7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvcHN0YXRlJywgaGFuZGxlUG9wU3RhdGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZVNjcm9sbCAoXG4gIHJvdXRlcixcbiAgdG8sXG4gIGZyb20sXG4gIGlzUG9wXG4pIHtcbiAgaWYgKCFyb3V0ZXIuYXBwKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICB2YXIgYmVoYXZpb3IgPSByb3V0ZXIub3B0aW9ucy5zY3JvbGxCZWhhdmlvcjtcbiAgaWYgKCFiZWhhdmlvcikge1xuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBhc3NlcnQodHlwZW9mIGJlaGF2aW9yID09PSAnZnVuY3Rpb24nLCBcInNjcm9sbEJlaGF2aW9yIG11c3QgYmUgYSBmdW5jdGlvblwiKTtcbiAgfVxuXG4gIC8vIHdhaXQgdW50aWwgcmUtcmVuZGVyIGZpbmlzaGVzIGJlZm9yZSBzY3JvbGxpbmdcbiAgcm91dGVyLmFwcC4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgIHZhciBwb3NpdGlvbiA9IGdldFNjcm9sbFBvc2l0aW9uKCk7XG4gICAgdmFyIHNob3VsZFNjcm9sbCA9IGJlaGF2aW9yLmNhbGwoXG4gICAgICByb3V0ZXIsXG4gICAgICB0byxcbiAgICAgIGZyb20sXG4gICAgICBpc1BvcCA/IHBvc2l0aW9uIDogbnVsbFxuICAgICk7XG5cbiAgICBpZiAoIXNob3VsZFNjcm9sbCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBzaG91bGRTY3JvbGwudGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgc2hvdWxkU2Nyb2xsXG4gICAgICAgIC50aGVuKGZ1bmN0aW9uIChzaG91bGRTY3JvbGwpIHtcbiAgICAgICAgICBzY3JvbGxUb1Bvc2l0aW9uKChzaG91bGRTY3JvbGwpLCBwb3NpdGlvbik7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgIGFzc2VydChmYWxzZSwgZXJyLnRvU3RyaW5nKCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNjcm9sbFRvUG9zaXRpb24oc2hvdWxkU2Nyb2xsLCBwb3NpdGlvbik7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gc2F2ZVNjcm9sbFBvc2l0aW9uICgpIHtcbiAgdmFyIGtleSA9IGdldFN0YXRlS2V5KCk7XG4gIGlmIChrZXkpIHtcbiAgICBwb3NpdGlvblN0b3JlW2tleV0gPSB7XG4gICAgICB4OiB3aW5kb3cucGFnZVhPZmZzZXQsXG4gICAgICB5OiB3aW5kb3cucGFnZVlPZmZzZXRcbiAgICB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZVBvcFN0YXRlIChlKSB7XG4gIHNhdmVTY3JvbGxQb3NpdGlvbigpO1xuICBpZiAoZS5zdGF0ZSAmJiBlLnN0YXRlLmtleSkge1xuICAgIHNldFN0YXRlS2V5KGUuc3RhdGUua2V5KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRTY3JvbGxQb3NpdGlvbiAoKSB7XG4gIHZhciBrZXkgPSBnZXRTdGF0ZUtleSgpO1xuICBpZiAoa2V5KSB7XG4gICAgcmV0dXJuIHBvc2l0aW9uU3RvcmVba2V5XVxuICB9XG59XG5cbmZ1bmN0aW9uIGdldEVsZW1lbnRQb3NpdGlvbiAoZWwsIG9mZnNldCkge1xuICB2YXIgZG9jRWwgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gIHZhciBkb2NSZWN0ID0gZG9jRWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIHZhciBlbFJlY3QgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgcmV0dXJuIHtcbiAgICB4OiBlbFJlY3QubGVmdCAtIGRvY1JlY3QubGVmdCAtIG9mZnNldC54LFxuICAgIHk6IGVsUmVjdC50b3AgLSBkb2NSZWN0LnRvcCAtIG9mZnNldC55XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNWYWxpZFBvc2l0aW9uIChvYmopIHtcbiAgcmV0dXJuIGlzTnVtYmVyKG9iai54KSB8fCBpc051bWJlcihvYmoueSlcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplUG9zaXRpb24gKG9iaikge1xuICByZXR1cm4ge1xuICAgIHg6IGlzTnVtYmVyKG9iai54KSA/IG9iai54IDogd2luZG93LnBhZ2VYT2Zmc2V0LFxuICAgIHk6IGlzTnVtYmVyKG9iai55KSA/IG9iai55IDogd2luZG93LnBhZ2VZT2Zmc2V0XG4gIH1cbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplT2Zmc2V0IChvYmopIHtcbiAgcmV0dXJuIHtcbiAgICB4OiBpc051bWJlcihvYmoueCkgPyBvYmoueCA6IDAsXG4gICAgeTogaXNOdW1iZXIob2JqLnkpID8gb2JqLnkgOiAwXG4gIH1cbn1cblxuZnVuY3Rpb24gaXNOdW1iZXIgKHYpIHtcbiAgcmV0dXJuIHR5cGVvZiB2ID09PSAnbnVtYmVyJ1xufVxuXG52YXIgaGFzaFN0YXJ0c1dpdGhOdW1iZXJSRSA9IC9eI1xcZC87XG5cbmZ1bmN0aW9uIHNjcm9sbFRvUG9zaXRpb24gKHNob3VsZFNjcm9sbCwgcG9zaXRpb24pIHtcbiAgdmFyIGlzT2JqZWN0ID0gdHlwZW9mIHNob3VsZFNjcm9sbCA9PT0gJ29iamVjdCc7XG4gIGlmIChpc09iamVjdCAmJiB0eXBlb2Ygc2hvdWxkU2Nyb2xsLnNlbGVjdG9yID09PSAnc3RyaW5nJykge1xuICAgIC8vIGdldEVsZW1lbnRCeUlkIHdvdWxkIHN0aWxsIGZhaWwgaWYgdGhlIHNlbGVjdG9yIGNvbnRhaW5zIGEgbW9yZSBjb21wbGljYXRlZCBxdWVyeSBsaWtlICNtYWluW2RhdGEtYXR0cl1cbiAgICAvLyBidXQgYXQgdGhlIHNhbWUgdGltZSwgaXQgZG9lc24ndCBtYWtlIG11Y2ggc2Vuc2UgdG8gc2VsZWN0IGFuIGVsZW1lbnQgd2l0aCBhbiBpZCBhbmQgYW4gZXh0cmEgc2VsZWN0b3JcbiAgICB2YXIgZWwgPSBoYXNoU3RhcnRzV2l0aE51bWJlclJFLnRlc3Qoc2hvdWxkU2Nyb2xsLnNlbGVjdG9yKSAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgICAgID8gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoc2hvdWxkU2Nyb2xsLnNlbGVjdG9yLnNsaWNlKDEpKSAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgICAgIDogZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzaG91bGRTY3JvbGwuc2VsZWN0b3IpO1xuXG4gICAgaWYgKGVsKSB7XG4gICAgICB2YXIgb2Zmc2V0ID1cbiAgICAgICAgc2hvdWxkU2Nyb2xsLm9mZnNldCAmJiB0eXBlb2Ygc2hvdWxkU2Nyb2xsLm9mZnNldCA9PT0gJ29iamVjdCdcbiAgICAgICAgICA/IHNob3VsZFNjcm9sbC5vZmZzZXRcbiAgICAgICAgICA6IHt9O1xuICAgICAgb2Zmc2V0ID0gbm9ybWFsaXplT2Zmc2V0KG9mZnNldCk7XG4gICAgICBwb3NpdGlvbiA9IGdldEVsZW1lbnRQb3NpdGlvbihlbCwgb2Zmc2V0KTtcbiAgICB9IGVsc2UgaWYgKGlzVmFsaWRQb3NpdGlvbihzaG91bGRTY3JvbGwpKSB7XG4gICAgICBwb3NpdGlvbiA9IG5vcm1hbGl6ZVBvc2l0aW9uKHNob3VsZFNjcm9sbCk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzT2JqZWN0ICYmIGlzVmFsaWRQb3NpdGlvbihzaG91bGRTY3JvbGwpKSB7XG4gICAgcG9zaXRpb24gPSBub3JtYWxpemVQb3NpdGlvbihzaG91bGRTY3JvbGwpO1xuICB9XG5cbiAgaWYgKHBvc2l0aW9uKSB7XG4gICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAgaWYgKCdzY3JvbGxCZWhhdmlvcicgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlKSB7XG4gICAgICB3aW5kb3cuc2Nyb2xsVG8oe1xuICAgICAgICBsZWZ0OiBwb3NpdGlvbi54LFxuICAgICAgICB0b3A6IHBvc2l0aW9uLnksXG4gICAgICAgIC8vICRmbG93LWRpc2FibGUtbGluZVxuICAgICAgICBiZWhhdmlvcjogc2hvdWxkU2Nyb2xsLmJlaGF2aW9yXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgd2luZG93LnNjcm9sbFRvKHBvc2l0aW9uLngsIHBvc2l0aW9uLnkpO1xuICAgIH1cbiAgfVxufVxuXG4vKiAgKi9cblxudmFyIHN1cHBvcnRzUHVzaFN0YXRlID1cbiAgaW5Ccm93c2VyICYmXG4gIChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHVhID0gd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQ7XG5cbiAgICBpZiAoXG4gICAgICAodWEuaW5kZXhPZignQW5kcm9pZCAyLicpICE9PSAtMSB8fCB1YS5pbmRleE9mKCdBbmRyb2lkIDQuMCcpICE9PSAtMSkgJiZcbiAgICAgIHVhLmluZGV4T2YoJ01vYmlsZSBTYWZhcmknKSAhPT0gLTEgJiZcbiAgICAgIHVhLmluZGV4T2YoJ0Nocm9tZScpID09PSAtMSAmJlxuICAgICAgdWEuaW5kZXhPZignV2luZG93cyBQaG9uZScpID09PSAtMVxuICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgcmV0dXJuIHdpbmRvdy5oaXN0b3J5ICYmIHR5cGVvZiB3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUgPT09ICdmdW5jdGlvbidcbiAgfSkoKTtcblxuZnVuY3Rpb24gcHVzaFN0YXRlICh1cmwsIHJlcGxhY2UpIHtcbiAgc2F2ZVNjcm9sbFBvc2l0aW9uKCk7XG4gIC8vIHRyeS4uLmNhdGNoIHRoZSBwdXNoU3RhdGUgY2FsbCB0byBnZXQgYXJvdW5kIFNhZmFyaVxuICAvLyBET00gRXhjZXB0aW9uIDE4IHdoZXJlIGl0IGxpbWl0cyB0byAxMDAgcHVzaFN0YXRlIGNhbGxzXG4gIHZhciBoaXN0b3J5ID0gd2luZG93Lmhpc3Rvcnk7XG4gIHRyeSB7XG4gICAgaWYgKHJlcGxhY2UpIHtcbiAgICAgIC8vIHByZXNlcnZlIGV4aXN0aW5nIGhpc3Rvcnkgc3RhdGUgYXMgaXQgY291bGQgYmUgb3ZlcnJpZGVuIGJ5IHRoZSB1c2VyXG4gICAgICB2YXIgc3RhdGVDb3B5ID0gZXh0ZW5kKHt9LCBoaXN0b3J5LnN0YXRlKTtcbiAgICAgIHN0YXRlQ29weS5rZXkgPSBnZXRTdGF0ZUtleSgpO1xuICAgICAgaGlzdG9yeS5yZXBsYWNlU3RhdGUoc3RhdGVDb3B5LCAnJywgdXJsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGlzdG9yeS5wdXNoU3RhdGUoeyBrZXk6IHNldFN0YXRlS2V5KGdlblN0YXRlS2V5KCkpIH0sICcnLCB1cmwpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIHdpbmRvdy5sb2NhdGlvbltyZXBsYWNlID8gJ3JlcGxhY2UnIDogJ2Fzc2lnbiddKHVybCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVwbGFjZVN0YXRlICh1cmwpIHtcbiAgcHVzaFN0YXRlKHVybCwgdHJ1ZSk7XG59XG5cbi8vIFdoZW4gY2hhbmdpbmcgdGhpbmcsIGFsc28gZWRpdCByb3V0ZXIuZC50c1xudmFyIE5hdmlnYXRpb25GYWlsdXJlVHlwZSA9IHtcbiAgcmVkaXJlY3RlZDogMixcbiAgYWJvcnRlZDogNCxcbiAgY2FuY2VsbGVkOiA4LFxuICBkdXBsaWNhdGVkOiAxNlxufTtcblxuZnVuY3Rpb24gY3JlYXRlTmF2aWdhdGlvblJlZGlyZWN0ZWRFcnJvciAoZnJvbSwgdG8pIHtcbiAgcmV0dXJuIGNyZWF0ZVJvdXRlckVycm9yKFxuICAgIGZyb20sXG4gICAgdG8sXG4gICAgTmF2aWdhdGlvbkZhaWx1cmVUeXBlLnJlZGlyZWN0ZWQsXG4gICAgKFwiUmVkaXJlY3RlZCB3aGVuIGdvaW5nIGZyb20gXFxcIlwiICsgKGZyb20uZnVsbFBhdGgpICsgXCJcXFwiIHRvIFxcXCJcIiArIChzdHJpbmdpZnlSb3V0ZShcbiAgICAgIHRvXG4gICAgKSkgKyBcIlxcXCIgdmlhIGEgbmF2aWdhdGlvbiBndWFyZC5cIilcbiAgKVxufVxuXG5mdW5jdGlvbiBjcmVhdGVOYXZpZ2F0aW9uRHVwbGljYXRlZEVycm9yIChmcm9tLCB0bykge1xuICB2YXIgZXJyb3IgPSBjcmVhdGVSb3V0ZXJFcnJvcihcbiAgICBmcm9tLFxuICAgIHRvLFxuICAgIE5hdmlnYXRpb25GYWlsdXJlVHlwZS5kdXBsaWNhdGVkLFxuICAgIChcIkF2b2lkZWQgcmVkdW5kYW50IG5hdmlnYXRpb24gdG8gY3VycmVudCBsb2NhdGlvbjogXFxcIlwiICsgKGZyb20uZnVsbFBhdGgpICsgXCJcXFwiLlwiKVxuICApO1xuICAvLyBiYWNrd2FyZHMgY29tcGF0aWJsZSB3aXRoIHRoZSBmaXJzdCBpbnRyb2R1Y3Rpb24gb2YgRXJyb3JzXG4gIGVycm9yLm5hbWUgPSAnTmF2aWdhdGlvbkR1cGxpY2F0ZWQnO1xuICByZXR1cm4gZXJyb3Jcbn1cblxuZnVuY3Rpb24gY3JlYXRlTmF2aWdhdGlvbkNhbmNlbGxlZEVycm9yIChmcm9tLCB0bykge1xuICByZXR1cm4gY3JlYXRlUm91dGVyRXJyb3IoXG4gICAgZnJvbSxcbiAgICB0byxcbiAgICBOYXZpZ2F0aW9uRmFpbHVyZVR5cGUuY2FuY2VsbGVkLFxuICAgIChcIk5hdmlnYXRpb24gY2FuY2VsbGVkIGZyb20gXFxcIlwiICsgKGZyb20uZnVsbFBhdGgpICsgXCJcXFwiIHRvIFxcXCJcIiArICh0by5mdWxsUGF0aCkgKyBcIlxcXCIgd2l0aCBhIG5ldyBuYXZpZ2F0aW9uLlwiKVxuICApXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU5hdmlnYXRpb25BYm9ydGVkRXJyb3IgKGZyb20sIHRvKSB7XG4gIHJldHVybiBjcmVhdGVSb3V0ZXJFcnJvcihcbiAgICBmcm9tLFxuICAgIHRvLFxuICAgIE5hdmlnYXRpb25GYWlsdXJlVHlwZS5hYm9ydGVkLFxuICAgIChcIk5hdmlnYXRpb24gYWJvcnRlZCBmcm9tIFxcXCJcIiArIChmcm9tLmZ1bGxQYXRoKSArIFwiXFxcIiB0byBcXFwiXCIgKyAodG8uZnVsbFBhdGgpICsgXCJcXFwiIHZpYSBhIG5hdmlnYXRpb24gZ3VhcmQuXCIpXG4gIClcbn1cblxuZnVuY3Rpb24gY3JlYXRlUm91dGVyRXJyb3IgKGZyb20sIHRvLCB0eXBlLCBtZXNzYWdlKSB7XG4gIHZhciBlcnJvciA9IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgZXJyb3IuX2lzUm91dGVyID0gdHJ1ZTtcbiAgZXJyb3IuZnJvbSA9IGZyb207XG4gIGVycm9yLnRvID0gdG87XG4gIGVycm9yLnR5cGUgPSB0eXBlO1xuXG4gIHJldHVybiBlcnJvclxufVxuXG52YXIgcHJvcGVydGllc1RvTG9nID0gWydwYXJhbXMnLCAncXVlcnknLCAnaGFzaCddO1xuXG5mdW5jdGlvbiBzdHJpbmdpZnlSb3V0ZSAodG8pIHtcbiAgaWYgKHR5cGVvZiB0byA9PT0gJ3N0cmluZycpIHsgcmV0dXJuIHRvIH1cbiAgaWYgKCdwYXRoJyBpbiB0bykgeyByZXR1cm4gdG8ucGF0aCB9XG4gIHZhciBsb2NhdGlvbiA9IHt9O1xuICBwcm9wZXJ0aWVzVG9Mb2cuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKGtleSBpbiB0bykgeyBsb2NhdGlvbltrZXldID0gdG9ba2V5XTsgfVxuICB9KTtcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGxvY2F0aW9uLCBudWxsLCAyKVxufVxuXG5mdW5jdGlvbiBpc0Vycm9yIChlcnIpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlcnIpLmluZGV4T2YoJ0Vycm9yJykgPiAtMVxufVxuXG5mdW5jdGlvbiBpc05hdmlnYXRpb25GYWlsdXJlIChlcnIsIGVycm9yVHlwZSkge1xuICByZXR1cm4gKFxuICAgIGlzRXJyb3IoZXJyKSAmJlxuICAgIGVyci5faXNSb3V0ZXIgJiZcbiAgICAoZXJyb3JUeXBlID09IG51bGwgfHwgZXJyLnR5cGUgPT09IGVycm9yVHlwZSlcbiAgKVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gcnVuUXVldWUgKHF1ZXVlLCBmbiwgY2IpIHtcbiAgdmFyIHN0ZXAgPSBmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICBpZiAoaW5kZXggPj0gcXVldWUubGVuZ3RoKSB7XG4gICAgICBjYigpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocXVldWVbaW5kZXhdKSB7XG4gICAgICAgIGZuKHF1ZXVlW2luZGV4XSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHN0ZXAoaW5kZXggKyAxKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGVwKGluZGV4ICsgMSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICBzdGVwKDApO1xufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gcmVzb2x2ZUFzeW5jQ29tcG9uZW50cyAobWF0Y2hlZCkge1xuICByZXR1cm4gZnVuY3Rpb24gKHRvLCBmcm9tLCBuZXh0KSB7XG4gICAgdmFyIGhhc0FzeW5jID0gZmFsc2U7XG4gICAgdmFyIHBlbmRpbmcgPSAwO1xuICAgIHZhciBlcnJvciA9IG51bGw7XG5cbiAgICBmbGF0TWFwQ29tcG9uZW50cyhtYXRjaGVkLCBmdW5jdGlvbiAoZGVmLCBfLCBtYXRjaCwga2V5KSB7XG4gICAgICAvLyBpZiBpdCdzIGEgZnVuY3Rpb24gYW5kIGRvZXNuJ3QgaGF2ZSBjaWQgYXR0YWNoZWQsXG4gICAgICAvLyBhc3N1bWUgaXQncyBhbiBhc3luYyBjb21wb25lbnQgcmVzb2x2ZSBmdW5jdGlvbi5cbiAgICAgIC8vIHdlIGFyZSBub3QgdXNpbmcgVnVlJ3MgZGVmYXVsdCBhc3luYyByZXNvbHZpbmcgbWVjaGFuaXNtIGJlY2F1c2VcbiAgICAgIC8vIHdlIHdhbnQgdG8gaGFsdCB0aGUgbmF2aWdhdGlvbiB1bnRpbCB0aGUgaW5jb21pbmcgY29tcG9uZW50IGhhcyBiZWVuXG4gICAgICAvLyByZXNvbHZlZC5cbiAgICAgIGlmICh0eXBlb2YgZGVmID09PSAnZnVuY3Rpb24nICYmIGRlZi5jaWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBoYXNBc3luYyA9IHRydWU7XG4gICAgICAgIHBlbmRpbmcrKztcblxuICAgICAgICB2YXIgcmVzb2x2ZSA9IG9uY2UoZnVuY3Rpb24gKHJlc29sdmVkRGVmKSB7XG4gICAgICAgICAgaWYgKGlzRVNNb2R1bGUocmVzb2x2ZWREZWYpKSB7XG4gICAgICAgICAgICByZXNvbHZlZERlZiA9IHJlc29sdmVkRGVmLmRlZmF1bHQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHNhdmUgcmVzb2x2ZWQgb24gYXN5bmMgZmFjdG9yeSBpbiBjYXNlIGl0J3MgdXNlZCBlbHNld2hlcmVcbiAgICAgICAgICBkZWYucmVzb2x2ZWQgPSB0eXBlb2YgcmVzb2x2ZWREZWYgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICAgID8gcmVzb2x2ZWREZWZcbiAgICAgICAgICAgIDogX1Z1ZS5leHRlbmQocmVzb2x2ZWREZWYpO1xuICAgICAgICAgIG1hdGNoLmNvbXBvbmVudHNba2V5XSA9IHJlc29sdmVkRGVmO1xuICAgICAgICAgIHBlbmRpbmctLTtcbiAgICAgICAgICBpZiAocGVuZGluZyA8PSAwKSB7XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB2YXIgcmVqZWN0ID0gb25jZShmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgICAgdmFyIG1zZyA9IFwiRmFpbGVkIHRvIHJlc29sdmUgYXN5bmMgY29tcG9uZW50IFwiICsga2V5ICsgXCI6IFwiICsgcmVhc29uO1xuICAgICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihmYWxzZSwgbXNnKTtcbiAgICAgICAgICBpZiAoIWVycm9yKSB7XG4gICAgICAgICAgICBlcnJvciA9IGlzRXJyb3IocmVhc29uKVxuICAgICAgICAgICAgICA/IHJlYXNvblxuICAgICAgICAgICAgICA6IG5ldyBFcnJvcihtc2cpO1xuICAgICAgICAgICAgbmV4dChlcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB2YXIgcmVzO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJlcyA9IGRlZihyZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIHJlcy50aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXMudGhlbihyZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBuZXcgc3ludGF4IGluIFZ1ZSAyLjNcbiAgICAgICAgICAgIHZhciBjb21wID0gcmVzLmNvbXBvbmVudDtcbiAgICAgICAgICAgIGlmIChjb21wICYmIHR5cGVvZiBjb21wLnRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgY29tcC50aGVuKHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoIWhhc0FzeW5jKSB7IG5leHQoKTsgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGZsYXRNYXBDb21wb25lbnRzIChcbiAgbWF0Y2hlZCxcbiAgZm5cbikge1xuICByZXR1cm4gZmxhdHRlbihtYXRjaGVkLm1hcChmdW5jdGlvbiAobSkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhtLmNvbXBvbmVudHMpLm1hcChmdW5jdGlvbiAoa2V5KSB7IHJldHVybiBmbihcbiAgICAgIG0uY29tcG9uZW50c1trZXldLFxuICAgICAgbS5pbnN0YW5jZXNba2V5XSxcbiAgICAgIG0sIGtleVxuICAgICk7IH0pXG4gIH0pKVxufVxuXG5mdW5jdGlvbiBmbGF0dGVuIChhcnIpIHtcbiAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sIGFycilcbn1cblxudmFyIGhhc1N5bWJvbCA9XG4gIHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiZcbiAgdHlwZW9mIFN5bWJvbC50b1N0cmluZ1RhZyA9PT0gJ3N5bWJvbCc7XG5cbmZ1bmN0aW9uIGlzRVNNb2R1bGUgKG9iaikge1xuICByZXR1cm4gb2JqLl9fZXNNb2R1bGUgfHwgKGhhc1N5bWJvbCAmJiBvYmpbU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gJ01vZHVsZScpXG59XG5cbi8vIGluIFdlYnBhY2sgMiwgcmVxdWlyZS5lbnN1cmUgbm93IGFsc28gcmV0dXJucyBhIFByb21pc2Vcbi8vIHNvIHRoZSByZXNvbHZlL3JlamVjdCBmdW5jdGlvbnMgbWF5IGdldCBjYWxsZWQgYW4gZXh0cmEgdGltZVxuLy8gaWYgdGhlIHVzZXIgdXNlcyBhbiBhcnJvdyBmdW5jdGlvbiBzaG9ydGhhbmQgdGhhdCBoYXBwZW5zIHRvXG4vLyByZXR1cm4gdGhhdCBQcm9taXNlLlxuZnVuY3Rpb24gb25jZSAoZm4pIHtcbiAgdmFyIGNhbGxlZCA9IGZhbHNlO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgIGlmIChjYWxsZWQpIHsgcmV0dXJuIH1cbiAgICBjYWxsZWQgPSB0cnVlO1xuICAgIHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmdzKVxuICB9XG59XG5cbi8qICAqL1xuXG52YXIgSGlzdG9yeSA9IGZ1bmN0aW9uIEhpc3RvcnkgKHJvdXRlciwgYmFzZSkge1xuICB0aGlzLnJvdXRlciA9IHJvdXRlcjtcbiAgdGhpcy5iYXNlID0gbm9ybWFsaXplQmFzZShiYXNlKTtcbiAgLy8gc3RhcnQgd2l0aCBhIHJvdXRlIG9iamVjdCB0aGF0IHN0YW5kcyBmb3IgXCJub3doZXJlXCJcbiAgdGhpcy5jdXJyZW50ID0gU1RBUlQ7XG4gIHRoaXMucGVuZGluZyA9IG51bGw7XG4gIHRoaXMucmVhZHkgPSBmYWxzZTtcbiAgdGhpcy5yZWFkeUNicyA9IFtdO1xuICB0aGlzLnJlYWR5RXJyb3JDYnMgPSBbXTtcbiAgdGhpcy5lcnJvckNicyA9IFtdO1xuICB0aGlzLmxpc3RlbmVycyA9IFtdO1xufTtcblxuSGlzdG9yeS5wcm90b3R5cGUubGlzdGVuID0gZnVuY3Rpb24gbGlzdGVuIChjYikge1xuICB0aGlzLmNiID0gY2I7XG59O1xuXG5IaXN0b3J5LnByb3RvdHlwZS5vblJlYWR5ID0gZnVuY3Rpb24gb25SZWFkeSAoY2IsIGVycm9yQ2IpIHtcbiAgaWYgKHRoaXMucmVhZHkpIHtcbiAgICBjYigpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMucmVhZHlDYnMucHVzaChjYik7XG4gICAgaWYgKGVycm9yQ2IpIHtcbiAgICAgIHRoaXMucmVhZHlFcnJvckNicy5wdXNoKGVycm9yQ2IpO1xuICAgIH1cbiAgfVxufTtcblxuSGlzdG9yeS5wcm90b3R5cGUub25FcnJvciA9IGZ1bmN0aW9uIG9uRXJyb3IgKGVycm9yQ2IpIHtcbiAgdGhpcy5lcnJvckNicy5wdXNoKGVycm9yQ2IpO1xufTtcblxuSGlzdG9yeS5wcm90b3R5cGUudHJhbnNpdGlvblRvID0gZnVuY3Rpb24gdHJhbnNpdGlvblRvIChcbiAgbG9jYXRpb24sXG4gIG9uQ29tcGxldGUsXG4gIG9uQWJvcnRcbikge1xuICAgIHZhciB0aGlzJDEkMSA9IHRoaXM7XG5cbiAgdmFyIHJvdXRlO1xuICAvLyBjYXRjaCByZWRpcmVjdCBvcHRpb24gaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS1yb3V0ZXIvaXNzdWVzLzMyMDFcbiAgdHJ5IHtcbiAgICByb3V0ZSA9IHRoaXMucm91dGVyLm1hdGNoKGxvY2F0aW9uLCB0aGlzLmN1cnJlbnQpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhpcy5lcnJvckNicy5mb3JFYWNoKGZ1bmN0aW9uIChjYikge1xuICAgICAgY2IoZSk7XG4gICAgfSk7XG4gICAgLy8gRXhjZXB0aW9uIHNob3VsZCBzdGlsbCBiZSB0aHJvd25cbiAgICB0aHJvdyBlXG4gIH1cbiAgdmFyIHByZXYgPSB0aGlzLmN1cnJlbnQ7XG4gIHRoaXMuY29uZmlybVRyYW5zaXRpb24oXG4gICAgcm91dGUsXG4gICAgZnVuY3Rpb24gKCkge1xuICAgICAgdGhpcyQxJDEudXBkYXRlUm91dGUocm91dGUpO1xuICAgICAgb25Db21wbGV0ZSAmJiBvbkNvbXBsZXRlKHJvdXRlKTtcbiAgICAgIHRoaXMkMSQxLmVuc3VyZVVSTCgpO1xuICAgICAgdGhpcyQxJDEucm91dGVyLmFmdGVySG9va3MuZm9yRWFjaChmdW5jdGlvbiAoaG9vaykge1xuICAgICAgICBob29rICYmIGhvb2socm91dGUsIHByZXYpO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIGZpcmUgcmVhZHkgY2JzIG9uY2VcbiAgICAgIGlmICghdGhpcyQxJDEucmVhZHkpIHtcbiAgICAgICAgdGhpcyQxJDEucmVhZHkgPSB0cnVlO1xuICAgICAgICB0aGlzJDEkMS5yZWFkeUNicy5mb3JFYWNoKGZ1bmN0aW9uIChjYikge1xuICAgICAgICAgIGNiKHJvdXRlKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICBpZiAob25BYm9ydCkge1xuICAgICAgICBvbkFib3J0KGVycik7XG4gICAgICB9XG4gICAgICBpZiAoZXJyICYmICF0aGlzJDEkMS5yZWFkeSkge1xuICAgICAgICAvLyBJbml0aWFsIHJlZGlyZWN0aW9uIHNob3VsZCBub3QgbWFyayB0aGUgaGlzdG9yeSBhcyByZWFkeSB5ZXRcbiAgICAgICAgLy8gYmVjYXVzZSBpdCdzIHRyaWdnZXJlZCBieSB0aGUgcmVkaXJlY3Rpb24gaW5zdGVhZFxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLXJvdXRlci9pc3N1ZXMvMzIyNVxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLXJvdXRlci9pc3N1ZXMvMzMzMVxuICAgICAgICBpZiAoIWlzTmF2aWdhdGlvbkZhaWx1cmUoZXJyLCBOYXZpZ2F0aW9uRmFpbHVyZVR5cGUucmVkaXJlY3RlZCkgfHwgcHJldiAhPT0gU1RBUlQpIHtcbiAgICAgICAgICB0aGlzJDEkMS5yZWFkeSA9IHRydWU7XG4gICAgICAgICAgdGhpcyQxJDEucmVhZHlFcnJvckNicy5mb3JFYWNoKGZ1bmN0aW9uIChjYikge1xuICAgICAgICAgICAgY2IoZXJyKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgKTtcbn07XG5cbkhpc3RvcnkucHJvdG90eXBlLmNvbmZpcm1UcmFuc2l0aW9uID0gZnVuY3Rpb24gY29uZmlybVRyYW5zaXRpb24gKHJvdXRlLCBvbkNvbXBsZXRlLCBvbkFib3J0KSB7XG4gICAgdmFyIHRoaXMkMSQxID0gdGhpcztcblxuICB2YXIgY3VycmVudCA9IHRoaXMuY3VycmVudDtcbiAgdGhpcy5wZW5kaW5nID0gcm91dGU7XG4gIHZhciBhYm9ydCA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAvLyBjaGFuZ2VkIGFmdGVyIGFkZGluZyBlcnJvcnMgd2l0aFxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUtcm91dGVyL3B1bGwvMzA0NyBiZWZvcmUgdGhhdCBjaGFuZ2UsXG4gICAgLy8gcmVkaXJlY3QgYW5kIGFib3J0ZWQgbmF2aWdhdGlvbiB3b3VsZCBwcm9kdWNlIGFuIGVyciA9PSBudWxsXG4gICAgaWYgKCFpc05hdmlnYXRpb25GYWlsdXJlKGVycikgJiYgaXNFcnJvcihlcnIpKSB7XG4gICAgICBpZiAodGhpcyQxJDEuZXJyb3JDYnMubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMkMSQxLmVycm9yQ2JzLmZvckVhY2goZnVuY3Rpb24gKGNiKSB7XG4gICAgICAgICAgY2IoZXJyKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIHdhcm4oZmFsc2UsICd1bmNhdWdodCBlcnJvciBkdXJpbmcgcm91dGUgbmF2aWdhdGlvbjonKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICB9XG4gICAgfVxuICAgIG9uQWJvcnQgJiYgb25BYm9ydChlcnIpO1xuICB9O1xuICB2YXIgbGFzdFJvdXRlSW5kZXggPSByb3V0ZS5tYXRjaGVkLmxlbmd0aCAtIDE7XG4gIHZhciBsYXN0Q3VycmVudEluZGV4ID0gY3VycmVudC5tYXRjaGVkLmxlbmd0aCAtIDE7XG4gIGlmIChcbiAgICBpc1NhbWVSb3V0ZShyb3V0ZSwgY3VycmVudCkgJiZcbiAgICAvLyBpbiB0aGUgY2FzZSB0aGUgcm91dGUgbWFwIGhhcyBiZWVuIGR5bmFtaWNhbGx5IGFwcGVuZGVkIHRvXG4gICAgbGFzdFJvdXRlSW5kZXggPT09IGxhc3RDdXJyZW50SW5kZXggJiZcbiAgICByb3V0ZS5tYXRjaGVkW2xhc3RSb3V0ZUluZGV4XSA9PT0gY3VycmVudC5tYXRjaGVkW2xhc3RDdXJyZW50SW5kZXhdXG4gICkge1xuICAgIHRoaXMuZW5zdXJlVVJMKCk7XG4gICAgaWYgKHJvdXRlLmhhc2gpIHtcbiAgICAgIGhhbmRsZVNjcm9sbCh0aGlzLnJvdXRlciwgY3VycmVudCwgcm91dGUsIGZhbHNlKTtcbiAgICB9XG4gICAgcmV0dXJuIGFib3J0KGNyZWF0ZU5hdmlnYXRpb25EdXBsaWNhdGVkRXJyb3IoY3VycmVudCwgcm91dGUpKVxuICB9XG5cbiAgdmFyIHJlZiA9IHJlc29sdmVRdWV1ZShcbiAgICB0aGlzLmN1cnJlbnQubWF0Y2hlZCxcbiAgICByb3V0ZS5tYXRjaGVkXG4gICk7XG4gICAgdmFyIHVwZGF0ZWQgPSByZWYudXBkYXRlZDtcbiAgICB2YXIgZGVhY3RpdmF0ZWQgPSByZWYuZGVhY3RpdmF0ZWQ7XG4gICAgdmFyIGFjdGl2YXRlZCA9IHJlZi5hY3RpdmF0ZWQ7XG5cbiAgdmFyIHF1ZXVlID0gW10uY29uY2F0KFxuICAgIC8vIGluLWNvbXBvbmVudCBsZWF2ZSBndWFyZHNcbiAgICBleHRyYWN0TGVhdmVHdWFyZHMoZGVhY3RpdmF0ZWQpLFxuICAgIC8vIGdsb2JhbCBiZWZvcmUgaG9va3NcbiAgICB0aGlzLnJvdXRlci5iZWZvcmVIb29rcyxcbiAgICAvLyBpbi1jb21wb25lbnQgdXBkYXRlIGhvb2tzXG4gICAgZXh0cmFjdFVwZGF0ZUhvb2tzKHVwZGF0ZWQpLFxuICAgIC8vIGluLWNvbmZpZyBlbnRlciBndWFyZHNcbiAgICBhY3RpdmF0ZWQubWFwKGZ1bmN0aW9uIChtKSB7IHJldHVybiBtLmJlZm9yZUVudGVyOyB9KSxcbiAgICAvLyBhc3luYyBjb21wb25lbnRzXG4gICAgcmVzb2x2ZUFzeW5jQ29tcG9uZW50cyhhY3RpdmF0ZWQpXG4gICk7XG5cbiAgdmFyIGl0ZXJhdG9yID0gZnVuY3Rpb24gKGhvb2ssIG5leHQpIHtcbiAgICBpZiAodGhpcyQxJDEucGVuZGluZyAhPT0gcm91dGUpIHtcbiAgICAgIHJldHVybiBhYm9ydChjcmVhdGVOYXZpZ2F0aW9uQ2FuY2VsbGVkRXJyb3IoY3VycmVudCwgcm91dGUpKVxuICAgIH1cbiAgICB0cnkge1xuICAgICAgaG9vayhyb3V0ZSwgY3VycmVudCwgZnVuY3Rpb24gKHRvKSB7XG4gICAgICAgIGlmICh0byA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAvLyBuZXh0KGZhbHNlKSAtPiBhYm9ydCBuYXZpZ2F0aW9uLCBlbnN1cmUgY3VycmVudCBVUkxcbiAgICAgICAgICB0aGlzJDEkMS5lbnN1cmVVUkwodHJ1ZSk7XG4gICAgICAgICAgYWJvcnQoY3JlYXRlTmF2aWdhdGlvbkFib3J0ZWRFcnJvcihjdXJyZW50LCByb3V0ZSkpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzRXJyb3IodG8pKSB7XG4gICAgICAgICAgdGhpcyQxJDEuZW5zdXJlVVJMKHRydWUpO1xuICAgICAgICAgIGFib3J0KHRvKTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICB0eXBlb2YgdG8gPT09ICdzdHJpbmcnIHx8XG4gICAgICAgICAgKHR5cGVvZiB0byA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAgICh0eXBlb2YgdG8ucGF0aCA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHRvLm5hbWUgPT09ICdzdHJpbmcnKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gbmV4dCgnLycpIG9yIG5leHQoeyBwYXRoOiAnLycgfSkgLT4gcmVkaXJlY3RcbiAgICAgICAgICBhYm9ydChjcmVhdGVOYXZpZ2F0aW9uUmVkaXJlY3RlZEVycm9yKGN1cnJlbnQsIHJvdXRlKSk7XG4gICAgICAgICAgaWYgKHR5cGVvZiB0byA9PT0gJ29iamVjdCcgJiYgdG8ucmVwbGFjZSkge1xuICAgICAgICAgICAgdGhpcyQxJDEucmVwbGFjZSh0byk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMkMSQxLnB1c2godG8pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBjb25maXJtIHRyYW5zaXRpb24gYW5kIHBhc3Mgb24gdGhlIHZhbHVlXG4gICAgICAgICAgbmV4dCh0byk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGFib3J0KGUpO1xuICAgIH1cbiAgfTtcblxuICBydW5RdWV1ZShxdWV1ZSwgaXRlcmF0b3IsIGZ1bmN0aW9uICgpIHtcbiAgICAvLyB3YWl0IHVudGlsIGFzeW5jIGNvbXBvbmVudHMgYXJlIHJlc29sdmVkIGJlZm9yZVxuICAgIC8vIGV4dHJhY3RpbmcgaW4tY29tcG9uZW50IGVudGVyIGd1YXJkc1xuICAgIHZhciBlbnRlckd1YXJkcyA9IGV4dHJhY3RFbnRlckd1YXJkcyhhY3RpdmF0ZWQpO1xuICAgIHZhciBxdWV1ZSA9IGVudGVyR3VhcmRzLmNvbmNhdCh0aGlzJDEkMS5yb3V0ZXIucmVzb2x2ZUhvb2tzKTtcbiAgICBydW5RdWV1ZShxdWV1ZSwgaXRlcmF0b3IsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICh0aGlzJDEkMS5wZW5kaW5nICE9PSByb3V0ZSkge1xuICAgICAgICByZXR1cm4gYWJvcnQoY3JlYXRlTmF2aWdhdGlvbkNhbmNlbGxlZEVycm9yKGN1cnJlbnQsIHJvdXRlKSlcbiAgICAgIH1cbiAgICAgIHRoaXMkMSQxLnBlbmRpbmcgPSBudWxsO1xuICAgICAgb25Db21wbGV0ZShyb3V0ZSk7XG4gICAgICBpZiAodGhpcyQxJDEucm91dGVyLmFwcCkge1xuICAgICAgICB0aGlzJDEkMS5yb3V0ZXIuYXBwLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaGFuZGxlUm91dGVFbnRlcmVkKHJvdXRlKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufTtcblxuSGlzdG9yeS5wcm90b3R5cGUudXBkYXRlUm91dGUgPSBmdW5jdGlvbiB1cGRhdGVSb3V0ZSAocm91dGUpIHtcbiAgdGhpcy5jdXJyZW50ID0gcm91dGU7XG4gIHRoaXMuY2IgJiYgdGhpcy5jYihyb3V0ZSk7XG59O1xuXG5IaXN0b3J5LnByb3RvdHlwZS5zZXR1cExpc3RlbmVycyA9IGZ1bmN0aW9uIHNldHVwTGlzdGVuZXJzICgpIHtcbiAgLy8gRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBpcyBlbXB0eVxufTtcblxuSGlzdG9yeS5wcm90b3R5cGUudGVhcmRvd24gPSBmdW5jdGlvbiB0ZWFyZG93biAoKSB7XG4gIC8vIGNsZWFuIHVwIGV2ZW50IGxpc3RlbmVyc1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLXJvdXRlci9pc3N1ZXMvMjM0MVxuICB0aGlzLmxpc3RlbmVycy5mb3JFYWNoKGZ1bmN0aW9uIChjbGVhbnVwTGlzdGVuZXIpIHtcbiAgICBjbGVhbnVwTGlzdGVuZXIoKTtcbiAgfSk7XG4gIHRoaXMubGlzdGVuZXJzID0gW107XG5cbiAgLy8gcmVzZXQgY3VycmVudCBoaXN0b3J5IHJvdXRlXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUtcm91dGVyL2lzc3Vlcy8zMjk0XG4gIHRoaXMuY3VycmVudCA9IFNUQVJUO1xuICB0aGlzLnBlbmRpbmcgPSBudWxsO1xufTtcblxuZnVuY3Rpb24gbm9ybWFsaXplQmFzZSAoYmFzZSkge1xuICBpZiAoIWJhc2UpIHtcbiAgICBpZiAoaW5Ccm93c2VyKSB7XG4gICAgICAvLyByZXNwZWN0IDxiYXNlPiB0YWdcbiAgICAgIHZhciBiYXNlRWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdiYXNlJyk7XG4gICAgICBiYXNlID0gKGJhc2VFbCAmJiBiYXNlRWwuZ2V0QXR0cmlidXRlKCdocmVmJykpIHx8ICcvJztcbiAgICAgIC8vIHN0cmlwIGZ1bGwgVVJMIG9yaWdpblxuICAgICAgYmFzZSA9IGJhc2UucmVwbGFjZSgvXmh0dHBzPzpcXC9cXC9bXlxcL10rLywgJycpO1xuICAgIH0gZWxzZSB7XG4gICAgICBiYXNlID0gJy8nO1xuICAgIH1cbiAgfVxuICAvLyBtYWtlIHN1cmUgdGhlcmUncyB0aGUgc3RhcnRpbmcgc2xhc2hcbiAgaWYgKGJhc2UuY2hhckF0KDApICE9PSAnLycpIHtcbiAgICBiYXNlID0gJy8nICsgYmFzZTtcbiAgfVxuICAvLyByZW1vdmUgdHJhaWxpbmcgc2xhc2hcbiAgcmV0dXJuIGJhc2UucmVwbGFjZSgvXFwvJC8sICcnKVxufVxuXG5mdW5jdGlvbiByZXNvbHZlUXVldWUgKFxuICBjdXJyZW50LFxuICBuZXh0XG4pIHtcbiAgdmFyIGk7XG4gIHZhciBtYXggPSBNYXRoLm1heChjdXJyZW50Lmxlbmd0aCwgbmV4dC5sZW5ndGgpO1xuICBmb3IgKGkgPSAwOyBpIDwgbWF4OyBpKyspIHtcbiAgICBpZiAoY3VycmVudFtpXSAhPT0gbmV4dFtpXSkge1xuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB1cGRhdGVkOiBuZXh0LnNsaWNlKDAsIGkpLFxuICAgIGFjdGl2YXRlZDogbmV4dC5zbGljZShpKSxcbiAgICBkZWFjdGl2YXRlZDogY3VycmVudC5zbGljZShpKVxuICB9XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RHdWFyZHMgKFxuICByZWNvcmRzLFxuICBuYW1lLFxuICBiaW5kLFxuICByZXZlcnNlXG4pIHtcbiAgdmFyIGd1YXJkcyA9IGZsYXRNYXBDb21wb25lbnRzKHJlY29yZHMsIGZ1bmN0aW9uIChkZWYsIGluc3RhbmNlLCBtYXRjaCwga2V5KSB7XG4gICAgdmFyIGd1YXJkID0gZXh0cmFjdEd1YXJkKGRlZiwgbmFtZSk7XG4gICAgaWYgKGd1YXJkKSB7XG4gICAgICByZXR1cm4gQXJyYXkuaXNBcnJheShndWFyZClcbiAgICAgICAgPyBndWFyZC5tYXAoZnVuY3Rpb24gKGd1YXJkKSB7IHJldHVybiBiaW5kKGd1YXJkLCBpbnN0YW5jZSwgbWF0Y2gsIGtleSk7IH0pXG4gICAgICAgIDogYmluZChndWFyZCwgaW5zdGFuY2UsIG1hdGNoLCBrZXkpXG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGZsYXR0ZW4ocmV2ZXJzZSA/IGd1YXJkcy5yZXZlcnNlKCkgOiBndWFyZHMpXG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RHdWFyZCAoXG4gIGRlZixcbiAga2V5XG4pIHtcbiAgaWYgKHR5cGVvZiBkZWYgIT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBleHRlbmQgbm93IHNvIHRoYXQgZ2xvYmFsIG1peGlucyBhcmUgYXBwbGllZC5cbiAgICBkZWYgPSBfVnVlLmV4dGVuZChkZWYpO1xuICB9XG4gIHJldHVybiBkZWYub3B0aW9uc1trZXldXG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RMZWF2ZUd1YXJkcyAoZGVhY3RpdmF0ZWQpIHtcbiAgcmV0dXJuIGV4dHJhY3RHdWFyZHMoZGVhY3RpdmF0ZWQsICdiZWZvcmVSb3V0ZUxlYXZlJywgYmluZEd1YXJkLCB0cnVlKVxufVxuXG5mdW5jdGlvbiBleHRyYWN0VXBkYXRlSG9va3MgKHVwZGF0ZWQpIHtcbiAgcmV0dXJuIGV4dHJhY3RHdWFyZHModXBkYXRlZCwgJ2JlZm9yZVJvdXRlVXBkYXRlJywgYmluZEd1YXJkKVxufVxuXG5mdW5jdGlvbiBiaW5kR3VhcmQgKGd1YXJkLCBpbnN0YW5jZSkge1xuICBpZiAoaW5zdGFuY2UpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gYm91bmRSb3V0ZUd1YXJkICgpIHtcbiAgICAgIHJldHVybiBndWFyZC5hcHBseShpbnN0YW5jZSwgYXJndW1lbnRzKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBleHRyYWN0RW50ZXJHdWFyZHMgKFxuICBhY3RpdmF0ZWRcbikge1xuICByZXR1cm4gZXh0cmFjdEd1YXJkcyhcbiAgICBhY3RpdmF0ZWQsXG4gICAgJ2JlZm9yZVJvdXRlRW50ZXInLFxuICAgIGZ1bmN0aW9uIChndWFyZCwgXywgbWF0Y2gsIGtleSkge1xuICAgICAgcmV0dXJuIGJpbmRFbnRlckd1YXJkKGd1YXJkLCBtYXRjaCwga2V5KVxuICAgIH1cbiAgKVxufVxuXG5mdW5jdGlvbiBiaW5kRW50ZXJHdWFyZCAoXG4gIGd1YXJkLFxuICBtYXRjaCxcbiAga2V5XG4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHJvdXRlRW50ZXJHdWFyZCAodG8sIGZyb20sIG5leHQpIHtcbiAgICByZXR1cm4gZ3VhcmQodG8sIGZyb20sIGZ1bmN0aW9uIChjYikge1xuICAgICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBpZiAoIW1hdGNoLmVudGVyZWRDYnNba2V5XSkge1xuICAgICAgICAgIG1hdGNoLmVudGVyZWRDYnNba2V5XSA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIG1hdGNoLmVudGVyZWRDYnNba2V5XS5wdXNoKGNiKTtcbiAgICAgIH1cbiAgICAgIG5leHQoY2IpO1xuICAgIH0pXG4gIH1cbn1cblxuLyogICovXG5cbnZhciBIVE1MNUhpc3RvcnkgPSAvKkBfX1BVUkVfXyovKGZ1bmN0aW9uIChIaXN0b3J5KSB7XG4gIGZ1bmN0aW9uIEhUTUw1SGlzdG9yeSAocm91dGVyLCBiYXNlKSB7XG4gICAgSGlzdG9yeS5jYWxsKHRoaXMsIHJvdXRlciwgYmFzZSk7XG5cbiAgICB0aGlzLl9zdGFydExvY2F0aW9uID0gZ2V0TG9jYXRpb24odGhpcy5iYXNlKTtcbiAgfVxuXG4gIGlmICggSGlzdG9yeSApIEhUTUw1SGlzdG9yeS5fX3Byb3RvX18gPSBIaXN0b3J5O1xuICBIVE1MNUhpc3RvcnkucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggSGlzdG9yeSAmJiBIaXN0b3J5LnByb3RvdHlwZSApO1xuICBIVE1MNUhpc3RvcnkucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gSFRNTDVIaXN0b3J5O1xuXG4gIEhUTUw1SGlzdG9yeS5wcm90b3R5cGUuc2V0dXBMaXN0ZW5lcnMgPSBmdW5jdGlvbiBzZXR1cExpc3RlbmVycyAoKSB7XG4gICAgdmFyIHRoaXMkMSQxID0gdGhpcztcblxuICAgIGlmICh0aGlzLmxpc3RlbmVycy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB2YXIgcm91dGVyID0gdGhpcy5yb3V0ZXI7XG4gICAgdmFyIGV4cGVjdFNjcm9sbCA9IHJvdXRlci5vcHRpb25zLnNjcm9sbEJlaGF2aW9yO1xuICAgIHZhciBzdXBwb3J0c1Njcm9sbCA9IHN1cHBvcnRzUHVzaFN0YXRlICYmIGV4cGVjdFNjcm9sbDtcblxuICAgIGlmIChzdXBwb3J0c1Njcm9sbCkge1xuICAgICAgdGhpcy5saXN0ZW5lcnMucHVzaChzZXR1cFNjcm9sbCgpKTtcbiAgICB9XG5cbiAgICB2YXIgaGFuZGxlUm91dGluZ0V2ZW50ID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGN1cnJlbnQgPSB0aGlzJDEkMS5jdXJyZW50O1xuXG4gICAgICAvLyBBdm9pZGluZyBmaXJzdCBgcG9wc3RhdGVgIGV2ZW50IGRpc3BhdGNoZWQgaW4gc29tZSBicm93c2VycyBidXQgZmlyc3RcbiAgICAgIC8vIGhpc3Rvcnkgcm91dGUgbm90IHVwZGF0ZWQgc2luY2UgYXN5bmMgZ3VhcmQgYXQgdGhlIHNhbWUgdGltZS5cbiAgICAgIHZhciBsb2NhdGlvbiA9IGdldExvY2F0aW9uKHRoaXMkMSQxLmJhc2UpO1xuICAgICAgaWYgKHRoaXMkMSQxLmN1cnJlbnQgPT09IFNUQVJUICYmIGxvY2F0aW9uID09PSB0aGlzJDEkMS5fc3RhcnRMb2NhdGlvbikge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgdGhpcyQxJDEudHJhbnNpdGlvblRvKGxvY2F0aW9uLCBmdW5jdGlvbiAocm91dGUpIHtcbiAgICAgICAgaWYgKHN1cHBvcnRzU2Nyb2xsKSB7XG4gICAgICAgICAgaGFuZGxlU2Nyb2xsKHJvdXRlciwgcm91dGUsIGN1cnJlbnQsIHRydWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdwb3BzdGF0ZScsIGhhbmRsZVJvdXRpbmdFdmVudCk7XG4gICAgdGhpcy5saXN0ZW5lcnMucHVzaChmdW5jdGlvbiAoKSB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9wc3RhdGUnLCBoYW5kbGVSb3V0aW5nRXZlbnQpO1xuICAgIH0pO1xuICB9O1xuXG4gIEhUTUw1SGlzdG9yeS5wcm90b3R5cGUuZ28gPSBmdW5jdGlvbiBnbyAobikge1xuICAgIHdpbmRvdy5oaXN0b3J5LmdvKG4pO1xuICB9O1xuXG4gIEhUTUw1SGlzdG9yeS5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIHB1c2ggKGxvY2F0aW9uLCBvbkNvbXBsZXRlLCBvbkFib3J0KSB7XG4gICAgdmFyIHRoaXMkMSQxID0gdGhpcztcblxuICAgIHZhciByZWYgPSB0aGlzO1xuICAgIHZhciBmcm9tUm91dGUgPSByZWYuY3VycmVudDtcbiAgICB0aGlzLnRyYW5zaXRpb25Ubyhsb2NhdGlvbiwgZnVuY3Rpb24gKHJvdXRlKSB7XG4gICAgICBwdXNoU3RhdGUoY2xlYW5QYXRoKHRoaXMkMSQxLmJhc2UgKyByb3V0ZS5mdWxsUGF0aCkpO1xuICAgICAgaGFuZGxlU2Nyb2xsKHRoaXMkMSQxLnJvdXRlciwgcm91dGUsIGZyb21Sb3V0ZSwgZmFsc2UpO1xuICAgICAgb25Db21wbGV0ZSAmJiBvbkNvbXBsZXRlKHJvdXRlKTtcbiAgICB9LCBvbkFib3J0KTtcbiAgfTtcblxuICBIVE1MNUhpc3RvcnkucHJvdG90eXBlLnJlcGxhY2UgPSBmdW5jdGlvbiByZXBsYWNlIChsb2NhdGlvbiwgb25Db21wbGV0ZSwgb25BYm9ydCkge1xuICAgIHZhciB0aGlzJDEkMSA9IHRoaXM7XG5cbiAgICB2YXIgcmVmID0gdGhpcztcbiAgICB2YXIgZnJvbVJvdXRlID0gcmVmLmN1cnJlbnQ7XG4gICAgdGhpcy50cmFuc2l0aW9uVG8obG9jYXRpb24sIGZ1bmN0aW9uIChyb3V0ZSkge1xuICAgICAgcmVwbGFjZVN0YXRlKGNsZWFuUGF0aCh0aGlzJDEkMS5iYXNlICsgcm91dGUuZnVsbFBhdGgpKTtcbiAgICAgIGhhbmRsZVNjcm9sbCh0aGlzJDEkMS5yb3V0ZXIsIHJvdXRlLCBmcm9tUm91dGUsIGZhbHNlKTtcbiAgICAgIG9uQ29tcGxldGUgJiYgb25Db21wbGV0ZShyb3V0ZSk7XG4gICAgfSwgb25BYm9ydCk7XG4gIH07XG5cbiAgSFRNTDVIaXN0b3J5LnByb3RvdHlwZS5lbnN1cmVVUkwgPSBmdW5jdGlvbiBlbnN1cmVVUkwgKHB1c2gpIHtcbiAgICBpZiAoZ2V0TG9jYXRpb24odGhpcy5iYXNlKSAhPT0gdGhpcy5jdXJyZW50LmZ1bGxQYXRoKSB7XG4gICAgICB2YXIgY3VycmVudCA9IGNsZWFuUGF0aCh0aGlzLmJhc2UgKyB0aGlzLmN1cnJlbnQuZnVsbFBhdGgpO1xuICAgICAgcHVzaCA/IHB1c2hTdGF0ZShjdXJyZW50KSA6IHJlcGxhY2VTdGF0ZShjdXJyZW50KTtcbiAgICB9XG4gIH07XG5cbiAgSFRNTDVIaXN0b3J5LnByb3RvdHlwZS5nZXRDdXJyZW50TG9jYXRpb24gPSBmdW5jdGlvbiBnZXRDdXJyZW50TG9jYXRpb24gKCkge1xuICAgIHJldHVybiBnZXRMb2NhdGlvbih0aGlzLmJhc2UpXG4gIH07XG5cbiAgcmV0dXJuIEhUTUw1SGlzdG9yeTtcbn0oSGlzdG9yeSkpO1xuXG5mdW5jdGlvbiBnZXRMb2NhdGlvbiAoYmFzZSkge1xuICB2YXIgcGF0aCA9IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZTtcbiAgdmFyIHBhdGhMb3dlckNhc2UgPSBwYXRoLnRvTG93ZXJDYXNlKCk7XG4gIHZhciBiYXNlTG93ZXJDYXNlID0gYmFzZS50b0xvd2VyQ2FzZSgpO1xuICAvLyBiYXNlPVwiL2FcIiBzaG91bGRuJ3QgdHVybiBwYXRoPVwiL2FwcFwiIGludG8gXCIvYS9wcFwiXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUtcm91dGVyL2lzc3Vlcy8zNTU1XG4gIC8vIHNvIHdlIGVuc3VyZSB0aGUgdHJhaWxpbmcgc2xhc2ggaW4gdGhlIGJhc2VcbiAgaWYgKGJhc2UgJiYgKChwYXRoTG93ZXJDYXNlID09PSBiYXNlTG93ZXJDYXNlKSB8fFxuICAgIChwYXRoTG93ZXJDYXNlLmluZGV4T2YoY2xlYW5QYXRoKGJhc2VMb3dlckNhc2UgKyAnLycpKSA9PT0gMCkpKSB7XG4gICAgcGF0aCA9IHBhdGguc2xpY2UoYmFzZS5sZW5ndGgpO1xuICB9XG4gIHJldHVybiAocGF0aCB8fCAnLycpICsgd2luZG93LmxvY2F0aW9uLnNlYXJjaCArIHdpbmRvdy5sb2NhdGlvbi5oYXNoXG59XG5cbi8qICAqL1xuXG52YXIgSGFzaEhpc3RvcnkgPSAvKkBfX1BVUkVfXyovKGZ1bmN0aW9uIChIaXN0b3J5KSB7XG4gIGZ1bmN0aW9uIEhhc2hIaXN0b3J5IChyb3V0ZXIsIGJhc2UsIGZhbGxiYWNrKSB7XG4gICAgSGlzdG9yeS5jYWxsKHRoaXMsIHJvdXRlciwgYmFzZSk7XG4gICAgLy8gY2hlY2sgaGlzdG9yeSBmYWxsYmFjayBkZWVwbGlua2luZ1xuICAgIGlmIChmYWxsYmFjayAmJiBjaGVja0ZhbGxiYWNrKHRoaXMuYmFzZSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBlbnN1cmVTbGFzaCgpO1xuICB9XG5cbiAgaWYgKCBIaXN0b3J5ICkgSGFzaEhpc3RvcnkuX19wcm90b19fID0gSGlzdG9yeTtcbiAgSGFzaEhpc3RvcnkucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggSGlzdG9yeSAmJiBIaXN0b3J5LnByb3RvdHlwZSApO1xuICBIYXNoSGlzdG9yeS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBIYXNoSGlzdG9yeTtcblxuICAvLyB0aGlzIGlzIGRlbGF5ZWQgdW50aWwgdGhlIGFwcCBtb3VudHNcbiAgLy8gdG8gYXZvaWQgdGhlIGhhc2hjaGFuZ2UgbGlzdGVuZXIgYmVpbmcgZmlyZWQgdG9vIGVhcmx5XG4gIEhhc2hIaXN0b3J5LnByb3RvdHlwZS5zZXR1cExpc3RlbmVycyA9IGZ1bmN0aW9uIHNldHVwTGlzdGVuZXJzICgpIHtcbiAgICB2YXIgdGhpcyQxJDEgPSB0aGlzO1xuXG4gICAgaWYgKHRoaXMubGlzdGVuZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHZhciByb3V0ZXIgPSB0aGlzLnJvdXRlcjtcbiAgICB2YXIgZXhwZWN0U2Nyb2xsID0gcm91dGVyLm9wdGlvbnMuc2Nyb2xsQmVoYXZpb3I7XG4gICAgdmFyIHN1cHBvcnRzU2Nyb2xsID0gc3VwcG9ydHNQdXNoU3RhdGUgJiYgZXhwZWN0U2Nyb2xsO1xuXG4gICAgaWYgKHN1cHBvcnRzU2Nyb2xsKSB7XG4gICAgICB0aGlzLmxpc3RlbmVycy5wdXNoKHNldHVwU2Nyb2xsKCkpO1xuICAgIH1cblxuICAgIHZhciBoYW5kbGVSb3V0aW5nRXZlbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgY3VycmVudCA9IHRoaXMkMSQxLmN1cnJlbnQ7XG4gICAgICBpZiAoIWVuc3VyZVNsYXNoKCkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICB0aGlzJDEkMS50cmFuc2l0aW9uVG8oZ2V0SGFzaCgpLCBmdW5jdGlvbiAocm91dGUpIHtcbiAgICAgICAgaWYgKHN1cHBvcnRzU2Nyb2xsKSB7XG4gICAgICAgICAgaGFuZGxlU2Nyb2xsKHRoaXMkMSQxLnJvdXRlciwgcm91dGUsIGN1cnJlbnQsIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghc3VwcG9ydHNQdXNoU3RhdGUpIHtcbiAgICAgICAgICByZXBsYWNlSGFzaChyb3V0ZS5mdWxsUGF0aCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgdmFyIGV2ZW50VHlwZSA9IHN1cHBvcnRzUHVzaFN0YXRlID8gJ3BvcHN0YXRlJyA6ICdoYXNoY2hhbmdlJztcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgIGV2ZW50VHlwZSxcbiAgICAgIGhhbmRsZVJvdXRpbmdFdmVudFxuICAgICk7XG4gICAgdGhpcy5saXN0ZW5lcnMucHVzaChmdW5jdGlvbiAoKSB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZVJvdXRpbmdFdmVudCk7XG4gICAgfSk7XG4gIH07XG5cbiAgSGFzaEhpc3RvcnkucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiBwdXNoIChsb2NhdGlvbiwgb25Db21wbGV0ZSwgb25BYm9ydCkge1xuICAgIHZhciB0aGlzJDEkMSA9IHRoaXM7XG5cbiAgICB2YXIgcmVmID0gdGhpcztcbiAgICB2YXIgZnJvbVJvdXRlID0gcmVmLmN1cnJlbnQ7XG4gICAgdGhpcy50cmFuc2l0aW9uVG8oXG4gICAgICBsb2NhdGlvbixcbiAgICAgIGZ1bmN0aW9uIChyb3V0ZSkge1xuICAgICAgICBwdXNoSGFzaChyb3V0ZS5mdWxsUGF0aCk7XG4gICAgICAgIGhhbmRsZVNjcm9sbCh0aGlzJDEkMS5yb3V0ZXIsIHJvdXRlLCBmcm9tUm91dGUsIGZhbHNlKTtcbiAgICAgICAgb25Db21wbGV0ZSAmJiBvbkNvbXBsZXRlKHJvdXRlKTtcbiAgICAgIH0sXG4gICAgICBvbkFib3J0XG4gICAgKTtcbiAgfTtcblxuICBIYXNoSGlzdG9yeS5wcm90b3R5cGUucmVwbGFjZSA9IGZ1bmN0aW9uIHJlcGxhY2UgKGxvY2F0aW9uLCBvbkNvbXBsZXRlLCBvbkFib3J0KSB7XG4gICAgdmFyIHRoaXMkMSQxID0gdGhpcztcblxuICAgIHZhciByZWYgPSB0aGlzO1xuICAgIHZhciBmcm9tUm91dGUgPSByZWYuY3VycmVudDtcbiAgICB0aGlzLnRyYW5zaXRpb25UbyhcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgZnVuY3Rpb24gKHJvdXRlKSB7XG4gICAgICAgIHJlcGxhY2VIYXNoKHJvdXRlLmZ1bGxQYXRoKTtcbiAgICAgICAgaGFuZGxlU2Nyb2xsKHRoaXMkMSQxLnJvdXRlciwgcm91dGUsIGZyb21Sb3V0ZSwgZmFsc2UpO1xuICAgICAgICBvbkNvbXBsZXRlICYmIG9uQ29tcGxldGUocm91dGUpO1xuICAgICAgfSxcbiAgICAgIG9uQWJvcnRcbiAgICApO1xuICB9O1xuXG4gIEhhc2hIaXN0b3J5LnByb3RvdHlwZS5nbyA9IGZ1bmN0aW9uIGdvIChuKSB7XG4gICAgd2luZG93Lmhpc3RvcnkuZ28obik7XG4gIH07XG5cbiAgSGFzaEhpc3RvcnkucHJvdG90eXBlLmVuc3VyZVVSTCA9IGZ1bmN0aW9uIGVuc3VyZVVSTCAocHVzaCkge1xuICAgIHZhciBjdXJyZW50ID0gdGhpcy5jdXJyZW50LmZ1bGxQYXRoO1xuICAgIGlmIChnZXRIYXNoKCkgIT09IGN1cnJlbnQpIHtcbiAgICAgIHB1c2ggPyBwdXNoSGFzaChjdXJyZW50KSA6IHJlcGxhY2VIYXNoKGN1cnJlbnQpO1xuICAgIH1cbiAgfTtcblxuICBIYXNoSGlzdG9yeS5wcm90b3R5cGUuZ2V0Q3VycmVudExvY2F0aW9uID0gZnVuY3Rpb24gZ2V0Q3VycmVudExvY2F0aW9uICgpIHtcbiAgICByZXR1cm4gZ2V0SGFzaCgpXG4gIH07XG5cbiAgcmV0dXJuIEhhc2hIaXN0b3J5O1xufShIaXN0b3J5KSk7XG5cbmZ1bmN0aW9uIGNoZWNrRmFsbGJhY2sgKGJhc2UpIHtcbiAgdmFyIGxvY2F0aW9uID0gZ2V0TG9jYXRpb24oYmFzZSk7XG4gIGlmICghL15cXC8jLy50ZXN0KGxvY2F0aW9uKSkge1xuICAgIHdpbmRvdy5sb2NhdGlvbi5yZXBsYWNlKGNsZWFuUGF0aChiYXNlICsgJy8jJyArIGxvY2F0aW9uKSk7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxufVxuXG5mdW5jdGlvbiBlbnN1cmVTbGFzaCAoKSB7XG4gIHZhciBwYXRoID0gZ2V0SGFzaCgpO1xuICBpZiAocGF0aC5jaGFyQXQoMCkgPT09ICcvJykge1xuICAgIHJldHVybiB0cnVlXG4gIH1cbiAgcmVwbGFjZUhhc2goJy8nICsgcGF0aCk7XG4gIHJldHVybiBmYWxzZVxufVxuXG5mdW5jdGlvbiBnZXRIYXNoICgpIHtcbiAgLy8gV2UgY2FuJ3QgdXNlIHdpbmRvdy5sb2NhdGlvbi5oYXNoIGhlcmUgYmVjYXVzZSBpdCdzIG5vdFxuICAvLyBjb25zaXN0ZW50IGFjcm9zcyBicm93c2VycyAtIEZpcmVmb3ggd2lsbCBwcmUtZGVjb2RlIGl0IVxuICB2YXIgaHJlZiA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuICB2YXIgaW5kZXggPSBocmVmLmluZGV4T2YoJyMnKTtcbiAgLy8gZW1wdHkgcGF0aFxuICBpZiAoaW5kZXggPCAwKSB7IHJldHVybiAnJyB9XG5cbiAgaHJlZiA9IGhyZWYuc2xpY2UoaW5kZXggKyAxKTtcblxuICByZXR1cm4gaHJlZlxufVxuXG5mdW5jdGlvbiBnZXRVcmwgKHBhdGgpIHtcbiAgdmFyIGhyZWYgPSB3aW5kb3cubG9jYXRpb24uaHJlZjtcbiAgdmFyIGkgPSBocmVmLmluZGV4T2YoJyMnKTtcbiAgdmFyIGJhc2UgPSBpID49IDAgPyBocmVmLnNsaWNlKDAsIGkpIDogaHJlZjtcbiAgcmV0dXJuIChiYXNlICsgXCIjXCIgKyBwYXRoKVxufVxuXG5mdW5jdGlvbiBwdXNoSGFzaCAocGF0aCkge1xuICBpZiAoc3VwcG9ydHNQdXNoU3RhdGUpIHtcbiAgICBwdXNoU3RhdGUoZ2V0VXJsKHBhdGgpKTtcbiAgfSBlbHNlIHtcbiAgICB3aW5kb3cubG9jYXRpb24uaGFzaCA9IHBhdGg7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVwbGFjZUhhc2ggKHBhdGgpIHtcbiAgaWYgKHN1cHBvcnRzUHVzaFN0YXRlKSB7XG4gICAgcmVwbGFjZVN0YXRlKGdldFVybChwYXRoKSk7XG4gIH0gZWxzZSB7XG4gICAgd2luZG93LmxvY2F0aW9uLnJlcGxhY2UoZ2V0VXJsKHBhdGgpKTtcbiAgfVxufVxuXG4vKiAgKi9cblxudmFyIEFic3RyYWN0SGlzdG9yeSA9IC8qQF9fUFVSRV9fKi8oZnVuY3Rpb24gKEhpc3RvcnkpIHtcbiAgZnVuY3Rpb24gQWJzdHJhY3RIaXN0b3J5IChyb3V0ZXIsIGJhc2UpIHtcbiAgICBIaXN0b3J5LmNhbGwodGhpcywgcm91dGVyLCBiYXNlKTtcbiAgICB0aGlzLnN0YWNrID0gW107XG4gICAgdGhpcy5pbmRleCA9IC0xO1xuICB9XG5cbiAgaWYgKCBIaXN0b3J5ICkgQWJzdHJhY3RIaXN0b3J5Ll9fcHJvdG9fXyA9IEhpc3Rvcnk7XG4gIEFic3RyYWN0SGlzdG9yeS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBIaXN0b3J5ICYmIEhpc3RvcnkucHJvdG90eXBlICk7XG4gIEFic3RyYWN0SGlzdG9yeS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBYnN0cmFjdEhpc3Rvcnk7XG5cbiAgQWJzdHJhY3RIaXN0b3J5LnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gcHVzaCAobG9jYXRpb24sIG9uQ29tcGxldGUsIG9uQWJvcnQpIHtcbiAgICB2YXIgdGhpcyQxJDEgPSB0aGlzO1xuXG4gICAgdGhpcy50cmFuc2l0aW9uVG8oXG4gICAgICBsb2NhdGlvbixcbiAgICAgIGZ1bmN0aW9uIChyb3V0ZSkge1xuICAgICAgICB0aGlzJDEkMS5zdGFjayA9IHRoaXMkMSQxLnN0YWNrLnNsaWNlKDAsIHRoaXMkMSQxLmluZGV4ICsgMSkuY29uY2F0KHJvdXRlKTtcbiAgICAgICAgdGhpcyQxJDEuaW5kZXgrKztcbiAgICAgICAgb25Db21wbGV0ZSAmJiBvbkNvbXBsZXRlKHJvdXRlKTtcbiAgICAgIH0sXG4gICAgICBvbkFib3J0XG4gICAgKTtcbiAgfTtcblxuICBBYnN0cmFjdEhpc3RvcnkucHJvdG90eXBlLnJlcGxhY2UgPSBmdW5jdGlvbiByZXBsYWNlIChsb2NhdGlvbiwgb25Db21wbGV0ZSwgb25BYm9ydCkge1xuICAgIHZhciB0aGlzJDEkMSA9IHRoaXM7XG5cbiAgICB0aGlzLnRyYW5zaXRpb25UbyhcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgZnVuY3Rpb24gKHJvdXRlKSB7XG4gICAgICAgIHRoaXMkMSQxLnN0YWNrID0gdGhpcyQxJDEuc3RhY2suc2xpY2UoMCwgdGhpcyQxJDEuaW5kZXgpLmNvbmNhdChyb3V0ZSk7XG4gICAgICAgIG9uQ29tcGxldGUgJiYgb25Db21wbGV0ZShyb3V0ZSk7XG4gICAgICB9LFxuICAgICAgb25BYm9ydFxuICAgICk7XG4gIH07XG5cbiAgQWJzdHJhY3RIaXN0b3J5LnByb3RvdHlwZS5nbyA9IGZ1bmN0aW9uIGdvIChuKSB7XG4gICAgdmFyIHRoaXMkMSQxID0gdGhpcztcblxuICAgIHZhciB0YXJnZXRJbmRleCA9IHRoaXMuaW5kZXggKyBuO1xuICAgIGlmICh0YXJnZXRJbmRleCA8IDAgfHwgdGFyZ2V0SW5kZXggPj0gdGhpcy5zdGFjay5sZW5ndGgpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICB2YXIgcm91dGUgPSB0aGlzLnN0YWNrW3RhcmdldEluZGV4XTtcbiAgICB0aGlzLmNvbmZpcm1UcmFuc2l0aW9uKFxuICAgICAgcm91dGUsXG4gICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBwcmV2ID0gdGhpcyQxJDEuY3VycmVudDtcbiAgICAgICAgdGhpcyQxJDEuaW5kZXggPSB0YXJnZXRJbmRleDtcbiAgICAgICAgdGhpcyQxJDEudXBkYXRlUm91dGUocm91dGUpO1xuICAgICAgICB0aGlzJDEkMS5yb3V0ZXIuYWZ0ZXJIb29rcy5mb3JFYWNoKGZ1bmN0aW9uIChob29rKSB7XG4gICAgICAgICAgaG9vayAmJiBob29rKHJvdXRlLCBwcmV2KTtcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgZnVuY3Rpb24gKGVycikge1xuICAgICAgICBpZiAoaXNOYXZpZ2F0aW9uRmFpbHVyZShlcnIsIE5hdmlnYXRpb25GYWlsdXJlVHlwZS5kdXBsaWNhdGVkKSkge1xuICAgICAgICAgIHRoaXMkMSQxLmluZGV4ID0gdGFyZ2V0SW5kZXg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApO1xuICB9O1xuXG4gIEFic3RyYWN0SGlzdG9yeS5wcm90b3R5cGUuZ2V0Q3VycmVudExvY2F0aW9uID0gZnVuY3Rpb24gZ2V0Q3VycmVudExvY2F0aW9uICgpIHtcbiAgICB2YXIgY3VycmVudCA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTtcbiAgICByZXR1cm4gY3VycmVudCA/IGN1cnJlbnQuZnVsbFBhdGggOiAnLydcbiAgfTtcblxuICBBYnN0cmFjdEhpc3RvcnkucHJvdG90eXBlLmVuc3VyZVVSTCA9IGZ1bmN0aW9uIGVuc3VyZVVSTCAoKSB7XG4gICAgLy8gbm9vcFxuICB9O1xuXG4gIHJldHVybiBBYnN0cmFjdEhpc3Rvcnk7XG59KEhpc3RvcnkpKTtcblxuLyogICovXG5cblxuXG52YXIgVnVlUm91dGVyID0gZnVuY3Rpb24gVnVlUm91dGVyIChvcHRpb25zKSB7XG4gIGlmICggb3B0aW9ucyA9PT0gdm9pZCAwICkgb3B0aW9ucyA9IHt9O1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgd2Fybih0aGlzIGluc3RhbmNlb2YgVnVlUm91dGVyLCBcIlJvdXRlciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3IuXCIpO1xuICB9XG4gIHRoaXMuYXBwID0gbnVsbDtcbiAgdGhpcy5hcHBzID0gW107XG4gIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gIHRoaXMuYmVmb3JlSG9va3MgPSBbXTtcbiAgdGhpcy5yZXNvbHZlSG9va3MgPSBbXTtcbiAgdGhpcy5hZnRlckhvb2tzID0gW107XG4gIHRoaXMubWF0Y2hlciA9IGNyZWF0ZU1hdGNoZXIob3B0aW9ucy5yb3V0ZXMgfHwgW10sIHRoaXMpO1xuXG4gIHZhciBtb2RlID0gb3B0aW9ucy5tb2RlIHx8ICdoYXNoJztcbiAgdGhpcy5mYWxsYmFjayA9XG4gICAgbW9kZSA9PT0gJ2hpc3RvcnknICYmICFzdXBwb3J0c1B1c2hTdGF0ZSAmJiBvcHRpb25zLmZhbGxiYWNrICE9PSBmYWxzZTtcbiAgaWYgKHRoaXMuZmFsbGJhY2spIHtcbiAgICBtb2RlID0gJ2hhc2gnO1xuICB9XG4gIGlmICghaW5Ccm93c2VyKSB7XG4gICAgbW9kZSA9ICdhYnN0cmFjdCc7XG4gIH1cbiAgdGhpcy5tb2RlID0gbW9kZTtcblxuICBzd2l0Y2ggKG1vZGUpIHtcbiAgICBjYXNlICdoaXN0b3J5JzpcbiAgICAgIHRoaXMuaGlzdG9yeSA9IG5ldyBIVE1MNUhpc3RvcnkodGhpcywgb3B0aW9ucy5iYXNlKTtcbiAgICAgIGJyZWFrXG4gICAgY2FzZSAnaGFzaCc6XG4gICAgICB0aGlzLmhpc3RvcnkgPSBuZXcgSGFzaEhpc3RvcnkodGhpcywgb3B0aW9ucy5iYXNlLCB0aGlzLmZhbGxiYWNrKTtcbiAgICAgIGJyZWFrXG4gICAgY2FzZSAnYWJzdHJhY3QnOlxuICAgICAgdGhpcy5oaXN0b3J5ID0gbmV3IEFic3RyYWN0SGlzdG9yeSh0aGlzLCBvcHRpb25zLmJhc2UpO1xuICAgICAgYnJlYWtcbiAgICBkZWZhdWx0OlxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgYXNzZXJ0KGZhbHNlLCAoXCJpbnZhbGlkIG1vZGU6IFwiICsgbW9kZSkpO1xuICAgICAgfVxuICB9XG59O1xuXG52YXIgcHJvdG90eXBlQWNjZXNzb3JzID0geyBjdXJyZW50Um91dGU6IHsgY29uZmlndXJhYmxlOiB0cnVlIH0gfTtcblxuVnVlUm91dGVyLnByb3RvdHlwZS5tYXRjaCA9IGZ1bmN0aW9uIG1hdGNoIChyYXcsIGN1cnJlbnQsIHJlZGlyZWN0ZWRGcm9tKSB7XG4gIHJldHVybiB0aGlzLm1hdGNoZXIubWF0Y2gocmF3LCBjdXJyZW50LCByZWRpcmVjdGVkRnJvbSlcbn07XG5cbnByb3RvdHlwZUFjY2Vzc29ycy5jdXJyZW50Um91dGUuZ2V0ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5oaXN0b3J5ICYmIHRoaXMuaGlzdG9yeS5jdXJyZW50XG59O1xuXG5WdWVSb3V0ZXIucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiBpbml0IChhcHAgLyogVnVlIGNvbXBvbmVudCBpbnN0YW5jZSAqLykge1xuICAgIHZhciB0aGlzJDEkMSA9IHRoaXM7XG5cbiAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgIGFzc2VydChcbiAgICAgIGluc3RhbGwuaW5zdGFsbGVkLFxuICAgICAgXCJub3QgaW5zdGFsbGVkLiBNYWtlIHN1cmUgdG8gY2FsbCBgVnVlLnVzZShWdWVSb3V0ZXIpYCBcIiArXG4gICAgICAgIFwiYmVmb3JlIGNyZWF0aW5nIHJvb3QgaW5zdGFuY2UuXCJcbiAgICApO1xuXG4gIHRoaXMuYXBwcy5wdXNoKGFwcCk7XG5cbiAgLy8gc2V0IHVwIGFwcCBkZXN0cm95ZWQgaGFuZGxlclxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLXJvdXRlci9pc3N1ZXMvMjYzOVxuICBhcHAuJG9uY2UoJ2hvb2s6ZGVzdHJveWVkJywgZnVuY3Rpb24gKCkge1xuICAgIC8vIGNsZWFuIG91dCBhcHAgZnJvbSB0aGlzLmFwcHMgYXJyYXkgb25jZSBkZXN0cm95ZWRcbiAgICB2YXIgaW5kZXggPSB0aGlzJDEkMS5hcHBzLmluZGV4T2YoYXBwKTtcbiAgICBpZiAoaW5kZXggPiAtMSkgeyB0aGlzJDEkMS5hcHBzLnNwbGljZShpbmRleCwgMSk7IH1cbiAgICAvLyBlbnN1cmUgd2Ugc3RpbGwgaGF2ZSBhIG1haW4gYXBwIG9yIG51bGwgaWYgbm8gYXBwc1xuICAgIC8vIHdlIGRvIG5vdCByZWxlYXNlIHRoZSByb3V0ZXIgc28gaXQgY2FuIGJlIHJldXNlZFxuICAgIGlmICh0aGlzJDEkMS5hcHAgPT09IGFwcCkgeyB0aGlzJDEkMS5hcHAgPSB0aGlzJDEkMS5hcHBzWzBdIHx8IG51bGw7IH1cblxuICAgIGlmICghdGhpcyQxJDEuYXBwKSB7IHRoaXMkMSQxLmhpc3RvcnkudGVhcmRvd24oKTsgfVxuICB9KTtcblxuICAvLyBtYWluIGFwcCBwcmV2aW91c2x5IGluaXRpYWxpemVkXG4gIC8vIHJldHVybiBhcyB3ZSBkb24ndCBuZWVkIHRvIHNldCB1cCBuZXcgaGlzdG9yeSBsaXN0ZW5lclxuICBpZiAodGhpcy5hcHApIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIHRoaXMuYXBwID0gYXBwO1xuXG4gIHZhciBoaXN0b3J5ID0gdGhpcy5oaXN0b3J5O1xuXG4gIGlmIChoaXN0b3J5IGluc3RhbmNlb2YgSFRNTDVIaXN0b3J5IHx8IGhpc3RvcnkgaW5zdGFuY2VvZiBIYXNoSGlzdG9yeSkge1xuICAgIHZhciBoYW5kbGVJbml0aWFsU2Nyb2xsID0gZnVuY3Rpb24gKHJvdXRlT3JFcnJvcikge1xuICAgICAgdmFyIGZyb20gPSBoaXN0b3J5LmN1cnJlbnQ7XG4gICAgICB2YXIgZXhwZWN0U2Nyb2xsID0gdGhpcyQxJDEub3B0aW9ucy5zY3JvbGxCZWhhdmlvcjtcbiAgICAgIHZhciBzdXBwb3J0c1Njcm9sbCA9IHN1cHBvcnRzUHVzaFN0YXRlICYmIGV4cGVjdFNjcm9sbDtcblxuICAgICAgaWYgKHN1cHBvcnRzU2Nyb2xsICYmICdmdWxsUGF0aCcgaW4gcm91dGVPckVycm9yKSB7XG4gICAgICAgIGhhbmRsZVNjcm9sbCh0aGlzJDEkMSwgcm91dGVPckVycm9yLCBmcm9tLCBmYWxzZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICB2YXIgc2V0dXBMaXN0ZW5lcnMgPSBmdW5jdGlvbiAocm91dGVPckVycm9yKSB7XG4gICAgICBoaXN0b3J5LnNldHVwTGlzdGVuZXJzKCk7XG4gICAgICBoYW5kbGVJbml0aWFsU2Nyb2xsKHJvdXRlT3JFcnJvcik7XG4gICAgfTtcbiAgICBoaXN0b3J5LnRyYW5zaXRpb25UbyhcbiAgICAgIGhpc3RvcnkuZ2V0Q3VycmVudExvY2F0aW9uKCksXG4gICAgICBzZXR1cExpc3RlbmVycyxcbiAgICAgIHNldHVwTGlzdGVuZXJzXG4gICAgKTtcbiAgfVxuXG4gIGhpc3RvcnkubGlzdGVuKGZ1bmN0aW9uIChyb3V0ZSkge1xuICAgIHRoaXMkMSQxLmFwcHMuZm9yRWFjaChmdW5jdGlvbiAoYXBwKSB7XG4gICAgICBhcHAuX3JvdXRlID0gcm91dGU7XG4gICAgfSk7XG4gIH0pO1xufTtcblxuVnVlUm91dGVyLnByb3RvdHlwZS5iZWZvcmVFYWNoID0gZnVuY3Rpb24gYmVmb3JlRWFjaCAoZm4pIHtcbiAgcmV0dXJuIHJlZ2lzdGVySG9vayh0aGlzLmJlZm9yZUhvb2tzLCBmbilcbn07XG5cblZ1ZVJvdXRlci5wcm90b3R5cGUuYmVmb3JlUmVzb2x2ZSA9IGZ1bmN0aW9uIGJlZm9yZVJlc29sdmUgKGZuKSB7XG4gIHJldHVybiByZWdpc3Rlckhvb2sodGhpcy5yZXNvbHZlSG9va3MsIGZuKVxufTtcblxuVnVlUm91dGVyLnByb3RvdHlwZS5hZnRlckVhY2ggPSBmdW5jdGlvbiBhZnRlckVhY2ggKGZuKSB7XG4gIHJldHVybiByZWdpc3Rlckhvb2sodGhpcy5hZnRlckhvb2tzLCBmbilcbn07XG5cblZ1ZVJvdXRlci5wcm90b3R5cGUub25SZWFkeSA9IGZ1bmN0aW9uIG9uUmVhZHkgKGNiLCBlcnJvckNiKSB7XG4gIHRoaXMuaGlzdG9yeS5vblJlYWR5KGNiLCBlcnJvckNiKTtcbn07XG5cblZ1ZVJvdXRlci5wcm90b3R5cGUub25FcnJvciA9IGZ1bmN0aW9uIG9uRXJyb3IgKGVycm9yQ2IpIHtcbiAgdGhpcy5oaXN0b3J5Lm9uRXJyb3IoZXJyb3JDYik7XG59O1xuXG5WdWVSb3V0ZXIucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiBwdXNoIChsb2NhdGlvbiwgb25Db21wbGV0ZSwgb25BYm9ydCkge1xuICAgIHZhciB0aGlzJDEkMSA9IHRoaXM7XG5cbiAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gIGlmICghb25Db21wbGV0ZSAmJiAhb25BYm9ydCAmJiB0eXBlb2YgUHJvbWlzZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdGhpcyQxJDEuaGlzdG9yeS5wdXNoKGxvY2F0aW9uLCByZXNvbHZlLCByZWplY3QpO1xuICAgIH0pXG4gIH0gZWxzZSB7XG4gICAgdGhpcy5oaXN0b3J5LnB1c2gobG9jYXRpb24sIG9uQ29tcGxldGUsIG9uQWJvcnQpO1xuICB9XG59O1xuXG5WdWVSb3V0ZXIucHJvdG90eXBlLnJlcGxhY2UgPSBmdW5jdGlvbiByZXBsYWNlIChsb2NhdGlvbiwgb25Db21wbGV0ZSwgb25BYm9ydCkge1xuICAgIHZhciB0aGlzJDEkMSA9IHRoaXM7XG5cbiAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gIGlmICghb25Db21wbGV0ZSAmJiAhb25BYm9ydCAmJiB0eXBlb2YgUHJvbWlzZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdGhpcyQxJDEuaGlzdG9yeS5yZXBsYWNlKGxvY2F0aW9uLCByZXNvbHZlLCByZWplY3QpO1xuICAgIH0pXG4gIH0gZWxzZSB7XG4gICAgdGhpcy5oaXN0b3J5LnJlcGxhY2UobG9jYXRpb24sIG9uQ29tcGxldGUsIG9uQWJvcnQpO1xuICB9XG59O1xuXG5WdWVSb3V0ZXIucHJvdG90eXBlLmdvID0gZnVuY3Rpb24gZ28gKG4pIHtcbiAgdGhpcy5oaXN0b3J5LmdvKG4pO1xufTtcblxuVnVlUm91dGVyLnByb3RvdHlwZS5iYWNrID0gZnVuY3Rpb24gYmFjayAoKSB7XG4gIHRoaXMuZ28oLTEpO1xufTtcblxuVnVlUm91dGVyLnByb3RvdHlwZS5mb3J3YXJkID0gZnVuY3Rpb24gZm9yd2FyZCAoKSB7XG4gIHRoaXMuZ28oMSk7XG59O1xuXG5WdWVSb3V0ZXIucHJvdG90eXBlLmdldE1hdGNoZWRDb21wb25lbnRzID0gZnVuY3Rpb24gZ2V0TWF0Y2hlZENvbXBvbmVudHMgKHRvKSB7XG4gIHZhciByb3V0ZSA9IHRvXG4gICAgPyB0by5tYXRjaGVkXG4gICAgICA/IHRvXG4gICAgICA6IHRoaXMucmVzb2x2ZSh0bykucm91dGVcbiAgICA6IHRoaXMuY3VycmVudFJvdXRlO1xuICBpZiAoIXJvdXRlKSB7XG4gICAgcmV0dXJuIFtdXG4gIH1cbiAgcmV0dXJuIFtdLmNvbmNhdC5hcHBseShcbiAgICBbXSxcbiAgICByb3V0ZS5tYXRjaGVkLm1hcChmdW5jdGlvbiAobSkge1xuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKG0uY29tcG9uZW50cykubWFwKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgcmV0dXJuIG0uY29tcG9uZW50c1trZXldXG4gICAgICB9KVxuICAgIH0pXG4gIClcbn07XG5cblZ1ZVJvdXRlci5wcm90b3R5cGUucmVzb2x2ZSA9IGZ1bmN0aW9uIHJlc29sdmUgKFxuICB0byxcbiAgY3VycmVudCxcbiAgYXBwZW5kXG4pIHtcbiAgY3VycmVudCA9IGN1cnJlbnQgfHwgdGhpcy5oaXN0b3J5LmN1cnJlbnQ7XG4gIHZhciBsb2NhdGlvbiA9IG5vcm1hbGl6ZUxvY2F0aW9uKHRvLCBjdXJyZW50LCBhcHBlbmQsIHRoaXMpO1xuICB2YXIgcm91dGUgPSB0aGlzLm1hdGNoKGxvY2F0aW9uLCBjdXJyZW50KTtcbiAgdmFyIGZ1bGxQYXRoID0gcm91dGUucmVkaXJlY3RlZEZyb20gfHwgcm91dGUuZnVsbFBhdGg7XG4gIHZhciBiYXNlID0gdGhpcy5oaXN0b3J5LmJhc2U7XG4gIHZhciBocmVmID0gY3JlYXRlSHJlZihiYXNlLCBmdWxsUGF0aCwgdGhpcy5tb2RlKTtcbiAgcmV0dXJuIHtcbiAgICBsb2NhdGlvbjogbG9jYXRpb24sXG4gICAgcm91dGU6IHJvdXRlLFxuICAgIGhyZWY6IGhyZWYsXG4gICAgLy8gZm9yIGJhY2t3YXJkcyBjb21wYXRcbiAgICBub3JtYWxpemVkVG86IGxvY2F0aW9uLFxuICAgIHJlc29sdmVkOiByb3V0ZVxuICB9XG59O1xuXG5WdWVSb3V0ZXIucHJvdG90eXBlLmdldFJvdXRlcyA9IGZ1bmN0aW9uIGdldFJvdXRlcyAoKSB7XG4gIHJldHVybiB0aGlzLm1hdGNoZXIuZ2V0Um91dGVzKClcbn07XG5cblZ1ZVJvdXRlci5wcm90b3R5cGUuYWRkUm91dGUgPSBmdW5jdGlvbiBhZGRSb3V0ZSAocGFyZW50T3JSb3V0ZSwgcm91dGUpIHtcbiAgdGhpcy5tYXRjaGVyLmFkZFJvdXRlKHBhcmVudE9yUm91dGUsIHJvdXRlKTtcbiAgaWYgKHRoaXMuaGlzdG9yeS5jdXJyZW50ICE9PSBTVEFSVCkge1xuICAgIHRoaXMuaGlzdG9yeS50cmFuc2l0aW9uVG8odGhpcy5oaXN0b3J5LmdldEN1cnJlbnRMb2NhdGlvbigpKTtcbiAgfVxufTtcblxuVnVlUm91dGVyLnByb3RvdHlwZS5hZGRSb3V0ZXMgPSBmdW5jdGlvbiBhZGRSb3V0ZXMgKHJvdXRlcykge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHdhcm4oZmFsc2UsICdyb3V0ZXIuYWRkUm91dGVzKCkgaXMgZGVwcmVjYXRlZCBhbmQgaGFzIGJlZW4gcmVtb3ZlZCBpbiBWdWUgUm91dGVyIDQuIFVzZSByb3V0ZXIuYWRkUm91dGUoKSBpbnN0ZWFkLicpO1xuICB9XG4gIHRoaXMubWF0Y2hlci5hZGRSb3V0ZXMocm91dGVzKTtcbiAgaWYgKHRoaXMuaGlzdG9yeS5jdXJyZW50ICE9PSBTVEFSVCkge1xuICAgIHRoaXMuaGlzdG9yeS50cmFuc2l0aW9uVG8odGhpcy5oaXN0b3J5LmdldEN1cnJlbnRMb2NhdGlvbigpKTtcbiAgfVxufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoIFZ1ZVJvdXRlci5wcm90b3R5cGUsIHByb3RvdHlwZUFjY2Vzc29ycyApO1xuXG52YXIgVnVlUm91dGVyJDEgPSBWdWVSb3V0ZXI7XG5cbmZ1bmN0aW9uIHJlZ2lzdGVySG9vayAobGlzdCwgZm4pIHtcbiAgbGlzdC5wdXNoKGZuKTtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaSA9IGxpc3QuaW5kZXhPZihmbik7XG4gICAgaWYgKGkgPiAtMSkgeyBsaXN0LnNwbGljZShpLCAxKTsgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUhyZWYgKGJhc2UsIGZ1bGxQYXRoLCBtb2RlKSB7XG4gIHZhciBwYXRoID0gbW9kZSA9PT0gJ2hhc2gnID8gJyMnICsgZnVsbFBhdGggOiBmdWxsUGF0aDtcbiAgcmV0dXJuIGJhc2UgPyBjbGVhblBhdGgoYmFzZSArICcvJyArIHBhdGgpIDogcGF0aFxufVxuXG4vLyBXZSBjYW5ub3QgcmVtb3ZlIHRoaXMgYXMgaXQgd291bGQgYmUgYSBicmVha2luZyBjaGFuZ2VcblZ1ZVJvdXRlci5pbnN0YWxsID0gaW5zdGFsbDtcblZ1ZVJvdXRlci52ZXJzaW9uID0gJzMuNi41JztcblZ1ZVJvdXRlci5pc05hdmlnYXRpb25GYWlsdXJlID0gaXNOYXZpZ2F0aW9uRmFpbHVyZTtcblZ1ZVJvdXRlci5OYXZpZ2F0aW9uRmFpbHVyZVR5cGUgPSBOYXZpZ2F0aW9uRmFpbHVyZVR5cGU7XG5WdWVSb3V0ZXIuU1RBUlRfTE9DQVRJT04gPSBTVEFSVDtcblxuaWYgKGluQnJvd3NlciAmJiB3aW5kb3cuVnVlKSB7XG4gIHdpbmRvdy5WdWUudXNlKFZ1ZVJvdXRlcik7XG59XG5cbnZhciB2ZXJzaW9uID0gJzMuNi41JztcblxuZXhwb3J0IHsgTmF2aWdhdGlvbkZhaWx1cmVUeXBlLCBMaW5rIGFzIFJvdXRlckxpbmssIFZpZXcgYXMgUm91dGVyVmlldywgU1RBUlQgYXMgU1RBUlRfTE9DQVRJT04sIFZ1ZVJvdXRlciQxIGFzIGRlZmF1bHQsIGlzTmF2aWdhdGlvbkZhaWx1cmUsIHZlcnNpb24gfTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/vue-router/dist/vue-router.esm.js\n");

/***/ }),

/***/ "./node_modules/vue/dist/vue.esm.js":
/*!******************************************!*\
  !*** ./node_modules/vue/dist/vue.esm.js ***!
  \******************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   EffectScope: () => (/* binding */ EffectScope),\n/* harmony export */   computed: () => (/* binding */ computed),\n/* harmony export */   customRef: () => (/* binding */ customRef),\n/* harmony export */   \"default\": () => (/* binding */ Vue),\n/* harmony export */   defineAsyncComponent: () => (/* binding */ defineAsyncComponent),\n/* harmony export */   defineComponent: () => (/* binding */ defineComponent),\n/* harmony export */   del: () => (/* binding */ del),\n/* harmony export */   effectScope: () => (/* binding */ effectScope),\n/* harmony export */   getCurrentInstance: () => (/* binding */ getCurrentInstance),\n/* harmony export */   getCurrentScope: () => (/* binding */ getCurrentScope),\n/* harmony export */   h: () => (/* binding */ h),\n/* harmony export */   inject: () => (/* binding */ inject),\n/* harmony export */   isProxy: () => (/* binding */ isProxy),\n/* harmony export */   isReactive: () => (/* binding */ isReactive),\n/* harmony export */   isReadonly: () => (/* binding */ isReadonly),\n/* harmony export */   isRef: () => (/* binding */ isRef),\n/* harmony export */   isShallow: () => (/* binding */ isShallow),\n/* harmony export */   markRaw: () => (/* binding */ markRaw),\n/* harmony export */   mergeDefaults: () => (/* binding */ mergeDefaults),\n/* harmony export */   nextTick: () => (/* binding */ nextTick),\n/* harmony export */   onActivated: () => (/* binding */ onActivated),\n/* harmony export */   onBeforeMount: () => (/* binding */ onBeforeMount),\n/* harmony export */   onBeforeUnmount: () => (/* binding */ onBeforeUnmount),\n/* harmony export */   onBeforeUpdate: () => (/* binding */ onBeforeUpdate),\n/* harmony export */   onDeactivated: () => (/* binding */ onDeactivated),\n/* harmony export */   onErrorCaptured: () => (/* binding */ onErrorCaptured),\n/* harmony export */   onMounted: () => (/* binding */ onMounted),\n/* harmony export */   onRenderTracked: () => (/* binding */ onRenderTracked),\n/* harmony export */   onRenderTriggered: () => (/* binding */ onRenderTriggered),\n/* harmony export */   onScopeDispose: () => (/* binding */ onScopeDispose),\n/* harmony export */   onServerPrefetch: () => (/* binding */ onServerPrefetch),\n/* harmony export */   onUnmounted: () => (/* binding */ onUnmounted),\n/* harmony export */   onUpdated: () => (/* binding */ onUpdated),\n/* harmony export */   provide: () => (/* binding */ provide),\n/* harmony export */   proxyRefs: () => (/* binding */ proxyRefs),\n/* harmony export */   reactive: () => (/* binding */ reactive),\n/* harmony export */   readonly: () => (/* binding */ readonly),\n/* harmony export */   ref: () => (/* binding */ ref$1),\n/* harmony export */   set: () => (/* binding */ set),\n/* harmony export */   shallowReactive: () => (/* binding */ shallowReactive),\n/* harmony export */   shallowReadonly: () => (/* binding */ shallowReadonly),\n/* harmony export */   shallowRef: () => (/* binding */ shallowRef),\n/* harmony export */   toRaw: () => (/* binding */ toRaw),\n/* harmony export */   toRef: () => (/* binding */ toRef),\n/* harmony export */   toRefs: () => (/* binding */ toRefs),\n/* harmony export */   triggerRef: () => (/* binding */ triggerRef),\n/* harmony export */   unref: () => (/* binding */ unref),\n/* harmony export */   useAttrs: () => (/* binding */ useAttrs),\n/* harmony export */   useCssModule: () => (/* binding */ useCssModule),\n/* harmony export */   useCssVars: () => (/* binding */ useCssVars),\n/* harmony export */   useListeners: () => (/* binding */ useListeners),\n/* harmony export */   useSlots: () => (/* binding */ useSlots),\n/* harmony export */   version: () => (/* binding */ version),\n/* harmony export */   watch: () => (/* binding */ watch),\n/* harmony export */   watchEffect: () => (/* binding */ watchEffect),\n/* harmony export */   watchPostEffect: () => (/* binding */ watchPostEffect),\n/* harmony export */   watchSyncEffect: () => (/* binding */ watchSyncEffect)\n/* harmony export */ });\n/*!\n * Vue.js v2.7.14\n * (c) 2014-2022 Evan You\n * Released under the MIT License.\n */\nvar emptyObject = Object.freeze({});\nvar isArray = Array.isArray;\n// These helpers produce better VM code in JS engines due to their\n// explicitness and function inlining.\nfunction isUndef(v) {\n    return v === undefined || v === null;\n}\nfunction isDef(v) {\n    return v !== undefined && v !== null;\n}\nfunction isTrue(v) {\n    return v === true;\n}\nfunction isFalse(v) {\n    return v === false;\n}\n/**\n * Check if value is primitive.\n */\nfunction isPrimitive(value) {\n    return (typeof value === 'string' ||\n        typeof value === 'number' ||\n        // $flow-disable-line\n        typeof value === 'symbol' ||\n        typeof value === 'boolean');\n}\nfunction isFunction(value) {\n    return typeof value === 'function';\n}\n/**\n * Quick object check - this is primarily used to tell\n * objects from primitive values when we know the value\n * is a JSON-compliant type.\n */\nfunction isObject(obj) {\n    return obj !== null && typeof obj === 'object';\n}\n/**\n * Get the raw type string of a value, e.g., [object Object].\n */\nvar _toString = Object.prototype.toString;\nfunction toRawType(value) {\n    return _toString.call(value).slice(8, -1);\n}\n/**\n * Strict object type check. Only returns true\n * for plain JavaScript objects.\n */\nfunction isPlainObject(obj) {\n    return _toString.call(obj) === '[object Object]';\n}\nfunction isRegExp(v) {\n    return _toString.call(v) === '[object RegExp]';\n}\n/**\n * Check if val is a valid array index.\n */\nfunction isValidArrayIndex(val) {\n    var n = parseFloat(String(val));\n    return n >= 0 && Math.floor(n) === n && isFinite(val);\n}\nfunction isPromise(val) {\n    return (isDef(val) &&\n        typeof val.then === 'function' &&\n        typeof val.catch === 'function');\n}\n/**\n * Convert a value to a string that is actually rendered.\n */\nfunction toString(val) {\n    return val == null\n        ? ''\n        : Array.isArray(val) || (isPlainObject(val) && val.toString === _toString)\n            ? JSON.stringify(val, null, 2)\n            : String(val);\n}\n/**\n * Convert an input value to a number for persistence.\n * If the conversion fails, return original string.\n */\nfunction toNumber(val) {\n    var n = parseFloat(val);\n    return isNaN(n) ? val : n;\n}\n/**\n * Make a map and return a function for checking if a key\n * is in that map.\n */\nfunction makeMap(str, expectsLowerCase) {\n    var map = Object.create(null);\n    var list = str.split(',');\n    for (var i = 0; i < list.length; i++) {\n        map[list[i]] = true;\n    }\n    return expectsLowerCase ? function (val) { return map[val.toLowerCase()]; } : function (val) { return map[val]; };\n}\n/**\n * Check if a tag is a built-in tag.\n */\nvar isBuiltInTag = makeMap('slot,component', true);\n/**\n * Check if an attribute is a reserved attribute.\n */\nvar isReservedAttribute = makeMap('key,ref,slot,slot-scope,is');\n/**\n * Remove an item from an array.\n */\nfunction remove$2(arr, item) {\n    var len = arr.length;\n    if (len) {\n        // fast path for the only / last item\n        if (item === arr[len - 1]) {\n            arr.length = len - 1;\n            return;\n        }\n        var index = arr.indexOf(item);\n        if (index > -1) {\n            return arr.splice(index, 1);\n        }\n    }\n}\n/**\n * Check whether an object has the property.\n */\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nfunction hasOwn(obj, key) {\n    return hasOwnProperty.call(obj, key);\n}\n/**\n * Create a cached version of a pure function.\n */\nfunction cached(fn) {\n    var cache = Object.create(null);\n    return function cachedFn(str) {\n        var hit = cache[str];\n        return hit || (cache[str] = fn(str));\n    };\n}\n/**\n * Camelize a hyphen-delimited string.\n */\nvar camelizeRE = /-(\\w)/g;\nvar camelize = cached(function (str) {\n    return str.replace(camelizeRE, function (_, c) { return (c ? c.toUpperCase() : ''); });\n});\n/**\n * Capitalize a string.\n */\nvar capitalize = cached(function (str) {\n    return str.charAt(0).toUpperCase() + str.slice(1);\n});\n/**\n * Hyphenate a camelCase string.\n */\nvar hyphenateRE = /\\B([A-Z])/g;\nvar hyphenate = cached(function (str) {\n    return str.replace(hyphenateRE, '-$1').toLowerCase();\n});\n/**\n * Simple bind polyfill for environments that do not support it,\n * e.g., PhantomJS 1.x. Technically, we don't need this anymore\n * since native bind is now performant enough in most browsers.\n * But removing it would mean breaking code that was able to run in\n * PhantomJS 1.x, so this must be kept for backward compatibility.\n */\n/* istanbul ignore next */\nfunction polyfillBind(fn, ctx) {\n    function boundFn(a) {\n        var l = arguments.length;\n        return l\n            ? l > 1\n                ? fn.apply(ctx, arguments)\n                : fn.call(ctx, a)\n            : fn.call(ctx);\n    }\n    boundFn._length = fn.length;\n    return boundFn;\n}\nfunction nativeBind(fn, ctx) {\n    return fn.bind(ctx);\n}\n// @ts-expect-error bind cannot be `undefined`\nvar bind$1 = Function.prototype.bind ? nativeBind : polyfillBind;\n/**\n * Convert an Array-like object to a real Array.\n */\nfunction toArray(list, start) {\n    start = start || 0;\n    var i = list.length - start;\n    var ret = new Array(i);\n    while (i--) {\n        ret[i] = list[i + start];\n    }\n    return ret;\n}\n/**\n * Mix properties into target object.\n */\nfunction extend(to, _from) {\n    for (var key in _from) {\n        to[key] = _from[key];\n    }\n    return to;\n}\n/**\n * Merge an Array of Objects into a single Object.\n */\nfunction toObject(arr) {\n    var res = {};\n    for (var i = 0; i < arr.length; i++) {\n        if (arr[i]) {\n            extend(res, arr[i]);\n        }\n    }\n    return res;\n}\n/* eslint-disable no-unused-vars */\n/**\n * Perform no operation.\n * Stubbing args to make Flow happy without leaving useless transpiled code\n * with ...rest (https://flow.org/blog/2017/05/07/Strict-Function-Call-Arity/).\n */\nfunction noop(a, b, c) { }\n/**\n * Always return false.\n */\nvar no = function (a, b, c) { return false; };\n/* eslint-enable no-unused-vars */\n/**\n * Return the same value.\n */\nvar identity = function (_) { return _; };\n/**\n * Generate a string containing static keys from compiler modules.\n */\nfunction genStaticKeys$1(modules) {\n    return modules\n        .reduce(function (keys, m) {\n        return keys.concat(m.staticKeys || []);\n    }, [])\n        .join(',');\n}\n/**\n * Check if two values are loosely equal - that is,\n * if they are plain objects, do they have the same shape?\n */\nfunction looseEqual(a, b) {\n    if (a === b)\n        return true;\n    var isObjectA = isObject(a);\n    var isObjectB = isObject(b);\n    if (isObjectA && isObjectB) {\n        try {\n            var isArrayA = Array.isArray(a);\n            var isArrayB = Array.isArray(b);\n            if (isArrayA && isArrayB) {\n                return (a.length === b.length &&\n                    a.every(function (e, i) {\n                        return looseEqual(e, b[i]);\n                    }));\n            }\n            else if (a instanceof Date && b instanceof Date) {\n                return a.getTime() === b.getTime();\n            }\n            else if (!isArrayA && !isArrayB) {\n                var keysA = Object.keys(a);\n                var keysB = Object.keys(b);\n                return (keysA.length === keysB.length &&\n                    keysA.every(function (key) {\n                        return looseEqual(a[key], b[key]);\n                    }));\n            }\n            else {\n                /* istanbul ignore next */\n                return false;\n            }\n        }\n        catch (e) {\n            /* istanbul ignore next */\n            return false;\n        }\n    }\n    else if (!isObjectA && !isObjectB) {\n        return String(a) === String(b);\n    }\n    else {\n        return false;\n    }\n}\n/**\n * Return the first index at which a loosely equal value can be\n * found in the array (if value is a plain object, the array must\n * contain an object of the same shape), or -1 if it is not present.\n */\nfunction looseIndexOf(arr, val) {\n    for (var i = 0; i < arr.length; i++) {\n        if (looseEqual(arr[i], val))\n            return i;\n    }\n    return -1;\n}\n/**\n * Ensure a function is called only once.\n */\nfunction once(fn) {\n    var called = false;\n    return function () {\n        if (!called) {\n            called = true;\n            fn.apply(this, arguments);\n        }\n    };\n}\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is#polyfill\nfunction hasChanged(x, y) {\n    if (x === y) {\n        return x === 0 && 1 / x !== 1 / y;\n    }\n    else {\n        return x === x || y === y;\n    }\n}\n\nvar SSR_ATTR = 'data-server-rendered';\nvar ASSET_TYPES = ['component', 'directive', 'filter'];\nvar LIFECYCLE_HOOKS = [\n    'beforeCreate',\n    'created',\n    'beforeMount',\n    'mounted',\n    'beforeUpdate',\n    'updated',\n    'beforeDestroy',\n    'destroyed',\n    'activated',\n    'deactivated',\n    'errorCaptured',\n    'serverPrefetch',\n    'renderTracked',\n    'renderTriggered'\n];\n\nvar config = {\n    /**\n     * Option merge strategies (used in core/util/options)\n     */\n    // $flow-disable-line\n    optionMergeStrategies: Object.create(null),\n    /**\n     * Whether to suppress warnings.\n     */\n    silent: false,\n    /**\n     * Show production mode tip message on boot?\n     */\n    productionTip: \"development\" !== 'production',\n    /**\n     * Whether to enable devtools\n     */\n    devtools: \"development\" !== 'production',\n    /**\n     * Whether to record perf\n     */\n    performance: false,\n    /**\n     * Error handler for watcher errors\n     */\n    errorHandler: null,\n    /**\n     * Warn handler for watcher warns\n     */\n    warnHandler: null,\n    /**\n     * Ignore certain custom elements\n     */\n    ignoredElements: [],\n    /**\n     * Custom user key aliases for v-on\n     */\n    // $flow-disable-line\n    keyCodes: Object.create(null),\n    /**\n     * Check if a tag is reserved so that it cannot be registered as a\n     * component. This is platform-dependent and may be overwritten.\n     */\n    isReservedTag: no,\n    /**\n     * Check if an attribute is reserved so that it cannot be used as a component\n     * prop. This is platform-dependent and may be overwritten.\n     */\n    isReservedAttr: no,\n    /**\n     * Check if a tag is an unknown element.\n     * Platform-dependent.\n     */\n    isUnknownElement: no,\n    /**\n     * Get the namespace of an element\n     */\n    getTagNamespace: noop,\n    /**\n     * Parse the real tag name for the specific platform.\n     */\n    parsePlatformTagName: identity,\n    /**\n     * Check if an attribute must be bound using property, e.g. value\n     * Platform-dependent.\n     */\n    mustUseProp: no,\n    /**\n     * Perform updates asynchronously. Intended to be used by Vue Test Utils\n     * This will significantly reduce performance if set to false.\n     */\n    async: true,\n    /**\n     * Exposed for legacy reasons\n     */\n    _lifecycleHooks: LIFECYCLE_HOOKS\n};\n\n/**\n * unicode letters used for parsing html tags, component names and property paths.\n * using https://www.w3.org/TR/html53/semantics-scripting.html#potentialcustomelementname\n * skipping \\u10000-\\uEFFFF due to it freezing up PhantomJS\n */\nvar unicodeRegExp = /a-zA-Z\\u00B7\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u203F-\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD/;\n/**\n * Check if a string starts with $ or _\n */\nfunction isReserved(str) {\n    var c = (str + '').charCodeAt(0);\n    return c === 0x24 || c === 0x5f;\n}\n/**\n * Define a property.\n */\nfunction def(obj, key, val, enumerable) {\n    Object.defineProperty(obj, key, {\n        value: val,\n        enumerable: !!enumerable,\n        writable: true,\n        configurable: true\n    });\n}\n/**\n * Parse simple path.\n */\nvar bailRE = new RegExp(\"[^\".concat(unicodeRegExp.source, \".$_\\\\d]\"));\nfunction parsePath(path) {\n    if (bailRE.test(path)) {\n        return;\n    }\n    var segments = path.split('.');\n    return function (obj) {\n        for (var i = 0; i < segments.length; i++) {\n            if (!obj)\n                return;\n            obj = obj[segments[i]];\n        }\n        return obj;\n    };\n}\n\n// can we use __proto__?\nvar hasProto = '__proto__' in {};\n// Browser environment sniffing\nvar inBrowser = typeof window !== 'undefined';\nvar UA = inBrowser && window.navigator.userAgent.toLowerCase();\nvar isIE = UA && /msie|trident/.test(UA);\nvar isIE9 = UA && UA.indexOf('msie 9.0') > 0;\nvar isEdge = UA && UA.indexOf('edge/') > 0;\nUA && UA.indexOf('android') > 0;\nvar isIOS = UA && /iphone|ipad|ipod|ios/.test(UA);\nUA && /chrome\\/\\d+/.test(UA) && !isEdge;\nUA && /phantomjs/.test(UA);\nvar isFF = UA && UA.match(/firefox\\/(\\d+)/);\n// Firefox has a \"watch\" function on Object.prototype...\n// @ts-expect-error firebox support\nvar nativeWatch = {}.watch;\nvar supportsPassive = false;\nif (inBrowser) {\n    try {\n        var opts = {};\n        Object.defineProperty(opts, 'passive', {\n            get: function () {\n                /* istanbul ignore next */\n                supportsPassive = true;\n            }\n        }); // https://github.com/facebook/flow/issues/285\n        window.addEventListener('test-passive', null, opts);\n    }\n    catch (e) { }\n}\n// this needs to be lazy-evaled because vue may be required before\n// vue-server-renderer can set VUE_ENV\nvar _isServer;\nvar isServerRendering = function () {\n    if (_isServer === undefined) {\n        /* istanbul ignore if */\n        if (!inBrowser && typeof __webpack_require__.g !== 'undefined') {\n            // detect presence of vue-server-renderer and avoid\n            // Webpack shimming the process\n            _isServer =\n                __webpack_require__.g['process'] && __webpack_require__.g['process'].env.VUE_ENV === 'server';\n        }\n        else {\n            _isServer = false;\n        }\n    }\n    return _isServer;\n};\n// detect devtools\nvar devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__;\n/* istanbul ignore next */\nfunction isNative(Ctor) {\n    return typeof Ctor === 'function' && /native code/.test(Ctor.toString());\n}\nvar hasSymbol = typeof Symbol !== 'undefined' &&\n    isNative(Symbol) &&\n    typeof Reflect !== 'undefined' &&\n    isNative(Reflect.ownKeys);\nvar _Set; // $flow-disable-line\n/* istanbul ignore if */ if (typeof Set !== 'undefined' && isNative(Set)) {\n    // use native Set when available.\n    _Set = Set;\n}\nelse {\n    // a non-standard Set polyfill that only works with primitive keys.\n    _Set = /** @class */ (function () {\n        function Set() {\n            this.set = Object.create(null);\n        }\n        Set.prototype.has = function (key) {\n            return this.set[key] === true;\n        };\n        Set.prototype.add = function (key) {\n            this.set[key] = true;\n        };\n        Set.prototype.clear = function () {\n            this.set = Object.create(null);\n        };\n        return Set;\n    }());\n}\n\nvar currentInstance = null;\n/**\n * This is exposed for compatibility with v3 (e.g. some functions in VueUse\n * relies on it). Do not use this internally, just use `currentInstance`.\n *\n * @internal this function needs manual type declaration because it relies\n * on previously manually authored types from Vue 2\n */\nfunction getCurrentInstance() {\n    return currentInstance && { proxy: currentInstance };\n}\n/**\n * @internal\n */\nfunction setCurrentInstance(vm) {\n    if (vm === void 0) { vm = null; }\n    if (!vm)\n        currentInstance && currentInstance._scope.off();\n    currentInstance = vm;\n    vm && vm._scope.on();\n}\n\n/**\n * @internal\n */\nvar VNode = /** @class */ (function () {\n    function VNode(tag, data, children, text, elm, context, componentOptions, asyncFactory) {\n        this.tag = tag;\n        this.data = data;\n        this.children = children;\n        this.text = text;\n        this.elm = elm;\n        this.ns = undefined;\n        this.context = context;\n        this.fnContext = undefined;\n        this.fnOptions = undefined;\n        this.fnScopeId = undefined;\n        this.key = data && data.key;\n        this.componentOptions = componentOptions;\n        this.componentInstance = undefined;\n        this.parent = undefined;\n        this.raw = false;\n        this.isStatic = false;\n        this.isRootInsert = true;\n        this.isComment = false;\n        this.isCloned = false;\n        this.isOnce = false;\n        this.asyncFactory = asyncFactory;\n        this.asyncMeta = undefined;\n        this.isAsyncPlaceholder = false;\n    }\n    Object.defineProperty(VNode.prototype, \"child\", {\n        // DEPRECATED: alias for componentInstance for backwards compat.\n        /* istanbul ignore next */\n        get: function () {\n            return this.componentInstance;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    return VNode;\n}());\nvar createEmptyVNode = function (text) {\n    if (text === void 0) { text = ''; }\n    var node = new VNode();\n    node.text = text;\n    node.isComment = true;\n    return node;\n};\nfunction createTextVNode(val) {\n    return new VNode(undefined, undefined, undefined, String(val));\n}\n// optimized shallow clone\n// used for static nodes and slot nodes because they may be reused across\n// multiple renders, cloning them avoids errors when DOM manipulations rely\n// on their elm reference.\nfunction cloneVNode(vnode) {\n    var cloned = new VNode(vnode.tag, vnode.data, \n    // #7975\n    // clone children array to avoid mutating original in case of cloning\n    // a child.\n    vnode.children && vnode.children.slice(), vnode.text, vnode.elm, vnode.context, vnode.componentOptions, vnode.asyncFactory);\n    cloned.ns = vnode.ns;\n    cloned.isStatic = vnode.isStatic;\n    cloned.key = vnode.key;\n    cloned.isComment = vnode.isComment;\n    cloned.fnContext = vnode.fnContext;\n    cloned.fnOptions = vnode.fnOptions;\n    cloned.fnScopeId = vnode.fnScopeId;\n    cloned.asyncMeta = vnode.asyncMeta;\n    cloned.isCloned = true;\n    return cloned;\n}\n\n/* not type checking this file because flow doesn't play well with Proxy */\nvar initProxy;\nif (true) {\n    var allowedGlobals_1 = makeMap('Infinity,undefined,NaN,isFinite,isNaN,' +\n        'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' +\n        'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,' +\n        'require' // for Webpack/Browserify\n    );\n    var warnNonPresent_1 = function (target, key) {\n        warn$2(\"Property or method \\\"\".concat(key, \"\\\" is not defined on the instance but \") +\n            'referenced during render. Make sure that this property is reactive, ' +\n            'either in the data option, or for class-based components, by ' +\n            'initializing the property. ' +\n            'See: https://v2.vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.', target);\n    };\n    var warnReservedPrefix_1 = function (target, key) {\n        warn$2(\"Property \\\"\".concat(key, \"\\\" must be accessed with \\\"$data.\").concat(key, \"\\\" because \") +\n            'properties starting with \"$\" or \"_\" are not proxied in the Vue instance to ' +\n            'prevent conflicts with Vue internals. ' +\n            'See: https://v2.vuejs.org/v2/api/#data', target);\n    };\n    var hasProxy_1 = typeof Proxy !== 'undefined' && isNative(Proxy);\n    if (hasProxy_1) {\n        var isBuiltInModifier_1 = makeMap('stop,prevent,self,ctrl,shift,alt,meta,exact');\n        config.keyCodes = new Proxy(config.keyCodes, {\n            set: function (target, key, value) {\n                if (isBuiltInModifier_1(key)) {\n                    warn$2(\"Avoid overwriting built-in modifier in config.keyCodes: .\".concat(key));\n                    return false;\n                }\n                else {\n                    target[key] = value;\n                    return true;\n                }\n            }\n        });\n    }\n    var hasHandler_1 = {\n        has: function (target, key) {\n            var has = key in target;\n            var isAllowed = allowedGlobals_1(key) ||\n                (typeof key === 'string' &&\n                    key.charAt(0) === '_' &&\n                    !(key in target.$data));\n            if (!has && !isAllowed) {\n                if (key in target.$data)\n                    warnReservedPrefix_1(target, key);\n                else\n                    warnNonPresent_1(target, key);\n            }\n            return has || !isAllowed;\n        }\n    };\n    var getHandler_1 = {\n        get: function (target, key) {\n            if (typeof key === 'string' && !(key in target)) {\n                if (key in target.$data)\n                    warnReservedPrefix_1(target, key);\n                else\n                    warnNonPresent_1(target, key);\n            }\n            return target[key];\n        }\n    };\n    initProxy = function initProxy(vm) {\n        if (hasProxy_1) {\n            // determine which proxy handler to use\n            var options = vm.$options;\n            var handlers = options.render && options.render._withStripped ? getHandler_1 : hasHandler_1;\n            vm._renderProxy = new Proxy(vm, handlers);\n        }\n        else {\n            vm._renderProxy = vm;\n        }\n    };\n}\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\nvar __assign = function() {\r\n    __assign = Object.assign || function __assign(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    };\r\n    return __assign.apply(this, arguments);\r\n};\n\nvar uid$2 = 0;\nvar pendingCleanupDeps = [];\nvar cleanupDeps = function () {\n    for (var i = 0; i < pendingCleanupDeps.length; i++) {\n        var dep = pendingCleanupDeps[i];\n        dep.subs = dep.subs.filter(function (s) { return s; });\n        dep._pending = false;\n    }\n    pendingCleanupDeps.length = 0;\n};\n/**\n * A dep is an observable that can have multiple\n * directives subscribing to it.\n * @internal\n */\nvar Dep = /** @class */ (function () {\n    function Dep() {\n        // pending subs cleanup\n        this._pending = false;\n        this.id = uid$2++;\n        this.subs = [];\n    }\n    Dep.prototype.addSub = function (sub) {\n        this.subs.push(sub);\n    };\n    Dep.prototype.removeSub = function (sub) {\n        // #12696 deps with massive amount of subscribers are extremely slow to\n        // clean up in Chromium\n        // to workaround this, we unset the sub for now, and clear them on\n        // next scheduler flush.\n        this.subs[this.subs.indexOf(sub)] = null;\n        if (!this._pending) {\n            this._pending = true;\n            pendingCleanupDeps.push(this);\n        }\n    };\n    Dep.prototype.depend = function (info) {\n        if (Dep.target) {\n            Dep.target.addDep(this);\n            if ( true && info && Dep.target.onTrack) {\n                Dep.target.onTrack(__assign({ effect: Dep.target }, info));\n            }\n        }\n    };\n    Dep.prototype.notify = function (info) {\n        // stabilize the subscriber list first\n        var subs = this.subs.filter(function (s) { return s; });\n        if ( true && !config.async) {\n            // subs aren't sorted in scheduler if not running async\n            // we need to sort them now to make sure they fire in correct\n            // order\n            subs.sort(function (a, b) { return a.id - b.id; });\n        }\n        for (var i = 0, l = subs.length; i < l; i++) {\n            var sub = subs[i];\n            if ( true && info) {\n                sub.onTrigger &&\n                    sub.onTrigger(__assign({ effect: subs[i] }, info));\n            }\n            sub.update();\n        }\n    };\n    return Dep;\n}());\n// The current target watcher being evaluated.\n// This is globally unique because only one watcher\n// can be evaluated at a time.\nDep.target = null;\nvar targetStack = [];\nfunction pushTarget(target) {\n    targetStack.push(target);\n    Dep.target = target;\n}\nfunction popTarget() {\n    targetStack.pop();\n    Dep.target = targetStack[targetStack.length - 1];\n}\n\n/*\n * not type checking this file because flow doesn't play well with\n * dynamically accessing methods on Array prototype\n */\nvar arrayProto = Array.prototype;\nvar arrayMethods = Object.create(arrayProto);\nvar methodsToPatch = [\n    'push',\n    'pop',\n    'shift',\n    'unshift',\n    'splice',\n    'sort',\n    'reverse'\n];\n/**\n * Intercept mutating methods and emit events\n */\nmethodsToPatch.forEach(function (method) {\n    // cache original method\n    var original = arrayProto[method];\n    def(arrayMethods, method, function mutator() {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        var result = original.apply(this, args);\n        var ob = this.__ob__;\n        var inserted;\n        switch (method) {\n            case 'push':\n            case 'unshift':\n                inserted = args;\n                break;\n            case 'splice':\n                inserted = args.slice(2);\n                break;\n        }\n        if (inserted)\n            ob.observeArray(inserted);\n        // notify change\n        if (true) {\n            ob.dep.notify({\n                type: \"array mutation\" /* TriggerOpTypes.ARRAY_MUTATION */,\n                target: this,\n                key: method\n            });\n        }\n        else {}\n        return result;\n    });\n});\n\nvar arrayKeys = Object.getOwnPropertyNames(arrayMethods);\nvar NO_INIITIAL_VALUE = {};\n/**\n * In some cases we may want to disable observation inside a component's\n * update computation.\n */\nvar shouldObserve = true;\nfunction toggleObserving(value) {\n    shouldObserve = value;\n}\n// ssr mock dep\nvar mockDep = {\n    notify: noop,\n    depend: noop,\n    addSub: noop,\n    removeSub: noop\n};\n/**\n * Observer class that is attached to each observed\n * object. Once attached, the observer converts the target\n * object's property keys into getter/setters that\n * collect dependencies and dispatch updates.\n */\nvar Observer = /** @class */ (function () {\n    function Observer(value, shallow, mock) {\n        if (shallow === void 0) { shallow = false; }\n        if (mock === void 0) { mock = false; }\n        this.value = value;\n        this.shallow = shallow;\n        this.mock = mock;\n        // this.value = value\n        this.dep = mock ? mockDep : new Dep();\n        this.vmCount = 0;\n        def(value, '__ob__', this);\n        if (isArray(value)) {\n            if (!mock) {\n                if (hasProto) {\n                    value.__proto__ = arrayMethods;\n                    /* eslint-enable no-proto */\n                }\n                else {\n                    for (var i = 0, l = arrayKeys.length; i < l; i++) {\n                        var key = arrayKeys[i];\n                        def(value, key, arrayMethods[key]);\n                    }\n                }\n            }\n            if (!shallow) {\n                this.observeArray(value);\n            }\n        }\n        else {\n            /**\n             * Walk through all properties and convert them into\n             * getter/setters. This method should only be called when\n             * value type is Object.\n             */\n            var keys = Object.keys(value);\n            for (var i = 0; i < keys.length; i++) {\n                var key = keys[i];\n                defineReactive(value, key, NO_INIITIAL_VALUE, undefined, shallow, mock);\n            }\n        }\n    }\n    /**\n     * Observe a list of Array items.\n     */\n    Observer.prototype.observeArray = function (value) {\n        for (var i = 0, l = value.length; i < l; i++) {\n            observe(value[i], false, this.mock);\n        }\n    };\n    return Observer;\n}());\n// helpers\n/**\n * Attempt to create an observer instance for a value,\n * returns the new observer if successfully observed,\n * or the existing observer if the value already has one.\n */\nfunction observe(value, shallow, ssrMockReactivity) {\n    if (value && hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) {\n        return value.__ob__;\n    }\n    if (shouldObserve &&\n        (ssrMockReactivity || !isServerRendering()) &&\n        (isArray(value) || isPlainObject(value)) &&\n        Object.isExtensible(value) &&\n        !value.__v_skip /* ReactiveFlags.SKIP */ &&\n        !isRef(value) &&\n        !(value instanceof VNode)) {\n        return new Observer(value, shallow, ssrMockReactivity);\n    }\n}\n/**\n * Define a reactive property on an Object.\n */\nfunction defineReactive(obj, key, val, customSetter, shallow, mock) {\n    var dep = new Dep();\n    var property = Object.getOwnPropertyDescriptor(obj, key);\n    if (property && property.configurable === false) {\n        return;\n    }\n    // cater for pre-defined getter/setters\n    var getter = property && property.get;\n    var setter = property && property.set;\n    if ((!getter || setter) &&\n        (val === NO_INIITIAL_VALUE || arguments.length === 2)) {\n        val = obj[key];\n    }\n    var childOb = !shallow && observe(val, false, mock);\n    Object.defineProperty(obj, key, {\n        enumerable: true,\n        configurable: true,\n        get: function reactiveGetter() {\n            var value = getter ? getter.call(obj) : val;\n            if (Dep.target) {\n                if (true) {\n                    dep.depend({\n                        target: obj,\n                        type: \"get\" /* TrackOpTypes.GET */,\n                        key: key\n                    });\n                }\n                else {}\n                if (childOb) {\n                    childOb.dep.depend();\n                    if (isArray(value)) {\n                        dependArray(value);\n                    }\n                }\n            }\n            return isRef(value) && !shallow ? value.value : value;\n        },\n        set: function reactiveSetter(newVal) {\n            var value = getter ? getter.call(obj) : val;\n            if (!hasChanged(value, newVal)) {\n                return;\n            }\n            if ( true && customSetter) {\n                customSetter();\n            }\n            if (setter) {\n                setter.call(obj, newVal);\n            }\n            else if (getter) {\n                // #7981: for accessor properties without setter\n                return;\n            }\n            else if (!shallow && isRef(value) && !isRef(newVal)) {\n                value.value = newVal;\n                return;\n            }\n            else {\n                val = newVal;\n            }\n            childOb = !shallow && observe(newVal, false, mock);\n            if (true) {\n                dep.notify({\n                    type: \"set\" /* TriggerOpTypes.SET */,\n                    target: obj,\n                    key: key,\n                    newValue: newVal,\n                    oldValue: value\n                });\n            }\n            else {}\n        }\n    });\n    return dep;\n}\nfunction set(target, key, val) {\n    if ( true && (isUndef(target) || isPrimitive(target))) {\n        warn$2(\"Cannot set reactive property on undefined, null, or primitive value: \".concat(target));\n    }\n    if (isReadonly(target)) {\n         true && warn$2(\"Set operation on key \\\"\".concat(key, \"\\\" failed: target is readonly.\"));\n        return;\n    }\n    var ob = target.__ob__;\n    if (isArray(target) && isValidArrayIndex(key)) {\n        target.length = Math.max(target.length, key);\n        target.splice(key, 1, val);\n        // when mocking for SSR, array methods are not hijacked\n        if (ob && !ob.shallow && ob.mock) {\n            observe(val, false, true);\n        }\n        return val;\n    }\n    if (key in target && !(key in Object.prototype)) {\n        target[key] = val;\n        return val;\n    }\n    if (target._isVue || (ob && ob.vmCount)) {\n         true &&\n            warn$2('Avoid adding reactive properties to a Vue instance or its root $data ' +\n                'at runtime - declare it upfront in the data option.');\n        return val;\n    }\n    if (!ob) {\n        target[key] = val;\n        return val;\n    }\n    defineReactive(ob.value, key, val, undefined, ob.shallow, ob.mock);\n    if (true) {\n        ob.dep.notify({\n            type: \"add\" /* TriggerOpTypes.ADD */,\n            target: target,\n            key: key,\n            newValue: val,\n            oldValue: undefined\n        });\n    }\n    else {}\n    return val;\n}\nfunction del(target, key) {\n    if ( true && (isUndef(target) || isPrimitive(target))) {\n        warn$2(\"Cannot delete reactive property on undefined, null, or primitive value: \".concat(target));\n    }\n    if (isArray(target) && isValidArrayIndex(key)) {\n        target.splice(key, 1);\n        return;\n    }\n    var ob = target.__ob__;\n    if (target._isVue || (ob && ob.vmCount)) {\n         true &&\n            warn$2('Avoid deleting properties on a Vue instance or its root $data ' +\n                '- just set it to null.');\n        return;\n    }\n    if (isReadonly(target)) {\n         true &&\n            warn$2(\"Delete operation on key \\\"\".concat(key, \"\\\" failed: target is readonly.\"));\n        return;\n    }\n    if (!hasOwn(target, key)) {\n        return;\n    }\n    delete target[key];\n    if (!ob) {\n        return;\n    }\n    if (true) {\n        ob.dep.notify({\n            type: \"delete\" /* TriggerOpTypes.DELETE */,\n            target: target,\n            key: key\n        });\n    }\n    else {}\n}\n/**\n * Collect dependencies on array elements when the array is touched, since\n * we cannot intercept array element access like property getters.\n */\nfunction dependArray(value) {\n    for (var e = void 0, i = 0, l = value.length; i < l; i++) {\n        e = value[i];\n        if (e && e.__ob__) {\n            e.__ob__.dep.depend();\n        }\n        if (isArray(e)) {\n            dependArray(e);\n        }\n    }\n}\n\nfunction reactive(target) {\n    makeReactive(target, false);\n    return target;\n}\n/**\n * Return a shallowly-reactive copy of the original object, where only the root\n * level properties are reactive. It also does not auto-unwrap refs (even at the\n * root level).\n */\nfunction shallowReactive(target) {\n    makeReactive(target, true);\n    def(target, \"__v_isShallow\" /* ReactiveFlags.IS_SHALLOW */, true);\n    return target;\n}\nfunction makeReactive(target, shallow) {\n    // if trying to observe a readonly proxy, return the readonly version.\n    if (!isReadonly(target)) {\n        if (true) {\n            if (isArray(target)) {\n                warn$2(\"Avoid using Array as root value for \".concat(shallow ? \"shallowReactive()\" : \"reactive()\", \" as it cannot be tracked in watch() or watchEffect(). Use \").concat(shallow ? \"shallowRef()\" : \"ref()\", \" instead. This is a Vue-2-only limitation.\"));\n            }\n            var existingOb = target && target.__ob__;\n            if (existingOb && existingOb.shallow !== shallow) {\n                warn$2(\"Target is already a \".concat(existingOb.shallow ? \"\" : \"non-\", \"shallow reactive object, and cannot be converted to \").concat(shallow ? \"\" : \"non-\", \"shallow.\"));\n            }\n        }\n        var ob = observe(target, shallow, isServerRendering() /* ssr mock reactivity */);\n        if ( true && !ob) {\n            if (target == null || isPrimitive(target)) {\n                warn$2(\"value cannot be made reactive: \".concat(String(target)));\n            }\n            if (isCollectionType(target)) {\n                warn$2(\"Vue 2 does not support reactive collection types such as Map or Set.\");\n            }\n        }\n    }\n}\nfunction isReactive(value) {\n    if (isReadonly(value)) {\n        return isReactive(value[\"__v_raw\" /* ReactiveFlags.RAW */]);\n    }\n    return !!(value && value.__ob__);\n}\nfunction isShallow(value) {\n    return !!(value && value.__v_isShallow);\n}\nfunction isReadonly(value) {\n    return !!(value && value.__v_isReadonly);\n}\nfunction isProxy(value) {\n    return isReactive(value) || isReadonly(value);\n}\nfunction toRaw(observed) {\n    var raw = observed && observed[\"__v_raw\" /* ReactiveFlags.RAW */];\n    return raw ? toRaw(raw) : observed;\n}\nfunction markRaw(value) {\n    // non-extensible objects won't be observed anyway\n    if (Object.isExtensible(value)) {\n        def(value, \"__v_skip\" /* ReactiveFlags.SKIP */, true);\n    }\n    return value;\n}\n/**\n * @internal\n */\nfunction isCollectionType(value) {\n    var type = toRawType(value);\n    return (type === 'Map' || type === 'WeakMap' || type === 'Set' || type === 'WeakSet');\n}\n\n/**\n * @internal\n */\nvar RefFlag = \"__v_isRef\";\nfunction isRef(r) {\n    return !!(r && r.__v_isRef === true);\n}\nfunction ref$1(value) {\n    return createRef(value, false);\n}\nfunction shallowRef(value) {\n    return createRef(value, true);\n}\nfunction createRef(rawValue, shallow) {\n    if (isRef(rawValue)) {\n        return rawValue;\n    }\n    var ref = {};\n    def(ref, RefFlag, true);\n    def(ref, \"__v_isShallow\" /* ReactiveFlags.IS_SHALLOW */, shallow);\n    def(ref, 'dep', defineReactive(ref, 'value', rawValue, null, shallow, isServerRendering()));\n    return ref;\n}\nfunction triggerRef(ref) {\n    if ( true && !ref.dep) {\n        warn$2(\"received object is not a triggerable ref.\");\n    }\n    if (true) {\n        ref.dep &&\n            ref.dep.notify({\n                type: \"set\" /* TriggerOpTypes.SET */,\n                target: ref,\n                key: 'value'\n            });\n    }\n    else {}\n}\nfunction unref(ref) {\n    return isRef(ref) ? ref.value : ref;\n}\nfunction proxyRefs(objectWithRefs) {\n    if (isReactive(objectWithRefs)) {\n        return objectWithRefs;\n    }\n    var proxy = {};\n    var keys = Object.keys(objectWithRefs);\n    for (var i = 0; i < keys.length; i++) {\n        proxyWithRefUnwrap(proxy, objectWithRefs, keys[i]);\n    }\n    return proxy;\n}\nfunction proxyWithRefUnwrap(target, source, key) {\n    Object.defineProperty(target, key, {\n        enumerable: true,\n        configurable: true,\n        get: function () {\n            var val = source[key];\n            if (isRef(val)) {\n                return val.value;\n            }\n            else {\n                var ob = val && val.__ob__;\n                if (ob)\n                    ob.dep.depend();\n                return val;\n            }\n        },\n        set: function (value) {\n            var oldValue = source[key];\n            if (isRef(oldValue) && !isRef(value)) {\n                oldValue.value = value;\n            }\n            else {\n                source[key] = value;\n            }\n        }\n    });\n}\nfunction customRef(factory) {\n    var dep = new Dep();\n    var _a = factory(function () {\n        if (true) {\n            dep.depend({\n                target: ref,\n                type: \"get\" /* TrackOpTypes.GET */,\n                key: 'value'\n            });\n        }\n        else {}\n    }, function () {\n        if (true) {\n            dep.notify({\n                target: ref,\n                type: \"set\" /* TriggerOpTypes.SET */,\n                key: 'value'\n            });\n        }\n        else {}\n    }), get = _a.get, set = _a.set;\n    var ref = {\n        get value() {\n            return get();\n        },\n        set value(newVal) {\n            set(newVal);\n        }\n    };\n    def(ref, RefFlag, true);\n    return ref;\n}\nfunction toRefs(object) {\n    if ( true && !isReactive(object)) {\n        warn$2(\"toRefs() expects a reactive object but received a plain one.\");\n    }\n    var ret = isArray(object) ? new Array(object.length) : {};\n    for (var key in object) {\n        ret[key] = toRef(object, key);\n    }\n    return ret;\n}\nfunction toRef(object, key, defaultValue) {\n    var val = object[key];\n    if (isRef(val)) {\n        return val;\n    }\n    var ref = {\n        get value() {\n            var val = object[key];\n            return val === undefined ? defaultValue : val;\n        },\n        set value(newVal) {\n            object[key] = newVal;\n        }\n    };\n    def(ref, RefFlag, true);\n    return ref;\n}\n\nvar rawToReadonlyFlag = \"__v_rawToReadonly\";\nvar rawToShallowReadonlyFlag = \"__v_rawToShallowReadonly\";\nfunction readonly(target) {\n    return createReadonly(target, false);\n}\nfunction createReadonly(target, shallow) {\n    if (!isPlainObject(target)) {\n        if (true) {\n            if (isArray(target)) {\n                warn$2(\"Vue 2 does not support readonly arrays.\");\n            }\n            else if (isCollectionType(target)) {\n                warn$2(\"Vue 2 does not support readonly collection types such as Map or Set.\");\n            }\n            else {\n                warn$2(\"value cannot be made readonly: \".concat(typeof target));\n            }\n        }\n        return target;\n    }\n    if ( true && !Object.isExtensible(target)) {\n        warn$2(\"Vue 2 does not support creating readonly proxy for non-extensible object.\");\n    }\n    // already a readonly object\n    if (isReadonly(target)) {\n        return target;\n    }\n    // already has a readonly proxy\n    var existingFlag = shallow ? rawToShallowReadonlyFlag : rawToReadonlyFlag;\n    var existingProxy = target[existingFlag];\n    if (existingProxy) {\n        return existingProxy;\n    }\n    var proxy = Object.create(Object.getPrototypeOf(target));\n    def(target, existingFlag, proxy);\n    def(proxy, \"__v_isReadonly\" /* ReactiveFlags.IS_READONLY */, true);\n    def(proxy, \"__v_raw\" /* ReactiveFlags.RAW */, target);\n    if (isRef(target)) {\n        def(proxy, RefFlag, true);\n    }\n    if (shallow || isShallow(target)) {\n        def(proxy, \"__v_isShallow\" /* ReactiveFlags.IS_SHALLOW */, true);\n    }\n    var keys = Object.keys(target);\n    for (var i = 0; i < keys.length; i++) {\n        defineReadonlyProperty(proxy, target, keys[i], shallow);\n    }\n    return proxy;\n}\nfunction defineReadonlyProperty(proxy, target, key, shallow) {\n    Object.defineProperty(proxy, key, {\n        enumerable: true,\n        configurable: true,\n        get: function () {\n            var val = target[key];\n            return shallow || !isPlainObject(val) ? val : readonly(val);\n        },\n        set: function () {\n             true &&\n                warn$2(\"Set operation on key \\\"\".concat(key, \"\\\" failed: target is readonly.\"));\n        }\n    });\n}\n/**\n * Returns a reactive-copy of the original object, where only the root level\n * properties are readonly, and does NOT unwrap refs nor recursively convert\n * returned properties.\n * This is used for creating the props proxy object for stateful components.\n */\nfunction shallowReadonly(target) {\n    return createReadonly(target, true);\n}\n\nfunction computed(getterOrOptions, debugOptions) {\n    var getter;\n    var setter;\n    var onlyGetter = isFunction(getterOrOptions);\n    if (onlyGetter) {\n        getter = getterOrOptions;\n        setter =  true\n            ? function () {\n                warn$2('Write operation failed: computed value is readonly');\n            }\n            : 0;\n    }\n    else {\n        getter = getterOrOptions.get;\n        setter = getterOrOptions.set;\n    }\n    var watcher = isServerRendering()\n        ? null\n        : new Watcher(currentInstance, getter, noop, { lazy: true });\n    if ( true && watcher && debugOptions) {\n        watcher.onTrack = debugOptions.onTrack;\n        watcher.onTrigger = debugOptions.onTrigger;\n    }\n    var ref = {\n        // some libs rely on the presence effect for checking computed refs\n        // from normal refs, but the implementation doesn't matter\n        effect: watcher,\n        get value() {\n            if (watcher) {\n                if (watcher.dirty) {\n                    watcher.evaluate();\n                }\n                if (Dep.target) {\n                    if ( true && Dep.target.onTrack) {\n                        Dep.target.onTrack({\n                            effect: Dep.target,\n                            target: ref,\n                            type: \"get\" /* TrackOpTypes.GET */,\n                            key: 'value'\n                        });\n                    }\n                    watcher.depend();\n                }\n                return watcher.value;\n            }\n            else {\n                return getter();\n            }\n        },\n        set value(newVal) {\n            setter(newVal);\n        }\n    };\n    def(ref, RefFlag, true);\n    def(ref, \"__v_isReadonly\" /* ReactiveFlags.IS_READONLY */, onlyGetter);\n    return ref;\n}\n\nvar mark;\nvar measure;\nif (true) {\n    var perf_1 = inBrowser && window.performance;\n    /* istanbul ignore if */\n    if (perf_1 &&\n        // @ts-ignore\n        perf_1.mark &&\n        // @ts-ignore\n        perf_1.measure &&\n        // @ts-ignore\n        perf_1.clearMarks &&\n        // @ts-ignore\n        perf_1.clearMeasures) {\n        mark = function (tag) { return perf_1.mark(tag); };\n        measure = function (name, startTag, endTag) {\n            perf_1.measure(name, startTag, endTag);\n            perf_1.clearMarks(startTag);\n            perf_1.clearMarks(endTag);\n            // perf.clearMeasures(name)\n        };\n    }\n}\n\nvar normalizeEvent = cached(function (name) {\n    var passive = name.charAt(0) === '&';\n    name = passive ? name.slice(1) : name;\n    var once = name.charAt(0) === '~'; // Prefixed last, checked first\n    name = once ? name.slice(1) : name;\n    var capture = name.charAt(0) === '!';\n    name = capture ? name.slice(1) : name;\n    return {\n        name: name,\n        once: once,\n        capture: capture,\n        passive: passive\n    };\n});\nfunction createFnInvoker(fns, vm) {\n    function invoker() {\n        var fns = invoker.fns;\n        if (isArray(fns)) {\n            var cloned = fns.slice();\n            for (var i = 0; i < cloned.length; i++) {\n                invokeWithErrorHandling(cloned[i], null, arguments, vm, \"v-on handler\");\n            }\n        }\n        else {\n            // return handler return value for single handlers\n            return invokeWithErrorHandling(fns, null, arguments, vm, \"v-on handler\");\n        }\n    }\n    invoker.fns = fns;\n    return invoker;\n}\nfunction updateListeners(on, oldOn, add, remove, createOnceHandler, vm) {\n    var name, cur, old, event;\n    for (name in on) {\n        cur = on[name];\n        old = oldOn[name];\n        event = normalizeEvent(name);\n        if (isUndef(cur)) {\n             true &&\n                warn$2(\"Invalid handler for event \\\"\".concat(event.name, \"\\\": got \") + String(cur), vm);\n        }\n        else if (isUndef(old)) {\n            if (isUndef(cur.fns)) {\n                cur = on[name] = createFnInvoker(cur, vm);\n            }\n            if (isTrue(event.once)) {\n                cur = on[name] = createOnceHandler(event.name, cur, event.capture);\n            }\n            add(event.name, cur, event.capture, event.passive, event.params);\n        }\n        else if (cur !== old) {\n            old.fns = cur;\n            on[name] = old;\n        }\n    }\n    for (name in oldOn) {\n        if (isUndef(on[name])) {\n            event = normalizeEvent(name);\n            remove(event.name, oldOn[name], event.capture);\n        }\n    }\n}\n\nfunction mergeVNodeHook(def, hookKey, hook) {\n    if (def instanceof VNode) {\n        def = def.data.hook || (def.data.hook = {});\n    }\n    var invoker;\n    var oldHook = def[hookKey];\n    function wrappedHook() {\n        hook.apply(this, arguments);\n        // important: remove merged hook to ensure it's called only once\n        // and prevent memory leak\n        remove$2(invoker.fns, wrappedHook);\n    }\n    if (isUndef(oldHook)) {\n        // no existing hook\n        invoker = createFnInvoker([wrappedHook]);\n    }\n    else {\n        /* istanbul ignore if */\n        if (isDef(oldHook.fns) && isTrue(oldHook.merged)) {\n            // already a merged invoker\n            invoker = oldHook;\n            invoker.fns.push(wrappedHook);\n        }\n        else {\n            // existing plain hook\n            invoker = createFnInvoker([oldHook, wrappedHook]);\n        }\n    }\n    invoker.merged = true;\n    def[hookKey] = invoker;\n}\n\nfunction extractPropsFromVNodeData(data, Ctor, tag) {\n    // we are only extracting raw values here.\n    // validation and default values are handled in the child\n    // component itself.\n    var propOptions = Ctor.options.props;\n    if (isUndef(propOptions)) {\n        return;\n    }\n    var res = {};\n    var attrs = data.attrs, props = data.props;\n    if (isDef(attrs) || isDef(props)) {\n        for (var key in propOptions) {\n            var altKey = hyphenate(key);\n            if (true) {\n                var keyInLowerCase = key.toLowerCase();\n                if (key !== keyInLowerCase && attrs && hasOwn(attrs, keyInLowerCase)) {\n                    tip(\"Prop \\\"\".concat(keyInLowerCase, \"\\\" is passed to component \") +\n                        \"\".concat(formatComponentName(\n                        // @ts-expect-error tag is string\n                        tag || Ctor), \", but the declared prop name is\") +\n                        \" \\\"\".concat(key, \"\\\". \") +\n                        \"Note that HTML attributes are case-insensitive and camelCased \" +\n                        \"props need to use their kebab-case equivalents when using in-DOM \" +\n                        \"templates. You should probably use \\\"\".concat(altKey, \"\\\" instead of \\\"\").concat(key, \"\\\".\"));\n                }\n            }\n            checkProp(res, props, key, altKey, true) ||\n                checkProp(res, attrs, key, altKey, false);\n        }\n    }\n    return res;\n}\nfunction checkProp(res, hash, key, altKey, preserve) {\n    if (isDef(hash)) {\n        if (hasOwn(hash, key)) {\n            res[key] = hash[key];\n            if (!preserve) {\n                delete hash[key];\n            }\n            return true;\n        }\n        else if (hasOwn(hash, altKey)) {\n            res[key] = hash[altKey];\n            if (!preserve) {\n                delete hash[altKey];\n            }\n            return true;\n        }\n    }\n    return false;\n}\n\n// The template compiler attempts to minimize the need for normalization by\n// statically analyzing the template at compile time.\n//\n// For plain HTML markup, normalization can be completely skipped because the\n// generated render function is guaranteed to return Array<VNode>. There are\n// two cases where extra normalization is needed:\n// 1. When the children contains components - because a functional component\n// may return an Array instead of a single root. In this case, just a simple\n// normalization is needed - if any child is an Array, we flatten the whole\n// thing with Array.prototype.concat. It is guaranteed to be only 1-level deep\n// because functional components already normalize their own children.\nfunction simpleNormalizeChildren(children) {\n    for (var i = 0; i < children.length; i++) {\n        if (isArray(children[i])) {\n            return Array.prototype.concat.apply([], children);\n        }\n    }\n    return children;\n}\n// 2. When the children contains constructs that always generated nested Arrays,\n// e.g. <template>, <slot>, v-for, or when the children is provided by user\n// with hand-written render functions / JSX. In such cases a full normalization\n// is needed to cater to all possible types of children values.\nfunction normalizeChildren(children) {\n    return isPrimitive(children)\n        ? [createTextVNode(children)]\n        : isArray(children)\n            ? normalizeArrayChildren(children)\n            : undefined;\n}\nfunction isTextNode(node) {\n    return isDef(node) && isDef(node.text) && isFalse(node.isComment);\n}\nfunction normalizeArrayChildren(children, nestedIndex) {\n    var res = [];\n    var i, c, lastIndex, last;\n    for (i = 0; i < children.length; i++) {\n        c = children[i];\n        if (isUndef(c) || typeof c === 'boolean')\n            continue;\n        lastIndex = res.length - 1;\n        last = res[lastIndex];\n        //  nested\n        if (isArray(c)) {\n            if (c.length > 0) {\n                c = normalizeArrayChildren(c, \"\".concat(nestedIndex || '', \"_\").concat(i));\n                // merge adjacent text nodes\n                if (isTextNode(c[0]) && isTextNode(last)) {\n                    res[lastIndex] = createTextVNode(last.text + c[0].text);\n                    c.shift();\n                }\n                res.push.apply(res, c);\n            }\n        }\n        else if (isPrimitive(c)) {\n            if (isTextNode(last)) {\n                // merge adjacent text nodes\n                // this is necessary for SSR hydration because text nodes are\n                // essentially merged when rendered to HTML strings\n                res[lastIndex] = createTextVNode(last.text + c);\n            }\n            else if (c !== '') {\n                // convert primitive to vnode\n                res.push(createTextVNode(c));\n            }\n        }\n        else {\n            if (isTextNode(c) && isTextNode(last)) {\n                // merge adjacent text nodes\n                res[lastIndex] = createTextVNode(last.text + c.text);\n            }\n            else {\n                // default key for nested array children (likely generated by v-for)\n                if (isTrue(children._isVList) &&\n                    isDef(c.tag) &&\n                    isUndef(c.key) &&\n                    isDef(nestedIndex)) {\n                    c.key = \"__vlist\".concat(nestedIndex, \"_\").concat(i, \"__\");\n                }\n                res.push(c);\n            }\n        }\n    }\n    return res;\n}\n\nvar SIMPLE_NORMALIZE = 1;\nvar ALWAYS_NORMALIZE = 2;\n// wrapper function for providing a more flexible interface\n// without getting yelled at by flow\nfunction createElement$1(context, tag, data, children, normalizationType, alwaysNormalize) {\n    if (isArray(data) || isPrimitive(data)) {\n        normalizationType = children;\n        children = data;\n        data = undefined;\n    }\n    if (isTrue(alwaysNormalize)) {\n        normalizationType = ALWAYS_NORMALIZE;\n    }\n    return _createElement(context, tag, data, children, normalizationType);\n}\nfunction _createElement(context, tag, data, children, normalizationType) {\n    if (isDef(data) && isDef(data.__ob__)) {\n         true &&\n            warn$2(\"Avoid using observed data object as vnode data: \".concat(JSON.stringify(data), \"\\n\") + 'Always create fresh vnode data objects in each render!', context);\n        return createEmptyVNode();\n    }\n    // object syntax in v-bind\n    if (isDef(data) && isDef(data.is)) {\n        tag = data.is;\n    }\n    if (!tag) {\n        // in case of component :is set to falsy value\n        return createEmptyVNode();\n    }\n    // warn against non-primitive key\n    if ( true && isDef(data) && isDef(data.key) && !isPrimitive(data.key)) {\n        warn$2('Avoid using non-primitive value as key, ' +\n            'use string/number value instead.', context);\n    }\n    // support single function children as default scoped slot\n    if (isArray(children) && isFunction(children[0])) {\n        data = data || {};\n        data.scopedSlots = { default: children[0] };\n        children.length = 0;\n    }\n    if (normalizationType === ALWAYS_NORMALIZE) {\n        children = normalizeChildren(children);\n    }\n    else if (normalizationType === SIMPLE_NORMALIZE) {\n        children = simpleNormalizeChildren(children);\n    }\n    var vnode, ns;\n    if (typeof tag === 'string') {\n        var Ctor = void 0;\n        ns = (context.$vnode && context.$vnode.ns) || config.getTagNamespace(tag);\n        if (config.isReservedTag(tag)) {\n            // platform built-in elements\n            if ( true &&\n                isDef(data) &&\n                isDef(data.nativeOn) &&\n                data.tag !== 'component') {\n                warn$2(\"The .native modifier for v-on is only valid on components but it was used on <\".concat(tag, \">.\"), context);\n            }\n            vnode = new VNode(config.parsePlatformTagName(tag), data, children, undefined, undefined, context);\n        }\n        else if ((!data || !data.pre) &&\n            isDef((Ctor = resolveAsset(context.$options, 'components', tag)))) {\n            // component\n            vnode = createComponent(Ctor, data, context, children, tag);\n        }\n        else {\n            // unknown or unlisted namespaced elements\n            // check at runtime because it may get assigned a namespace when its\n            // parent normalizes children\n            vnode = new VNode(tag, data, children, undefined, undefined, context);\n        }\n    }\n    else {\n        // direct component options / constructor\n        vnode = createComponent(tag, data, context, children);\n    }\n    if (isArray(vnode)) {\n        return vnode;\n    }\n    else if (isDef(vnode)) {\n        if (isDef(ns))\n            applyNS(vnode, ns);\n        if (isDef(data))\n            registerDeepBindings(data);\n        return vnode;\n    }\n    else {\n        return createEmptyVNode();\n    }\n}\nfunction applyNS(vnode, ns, force) {\n    vnode.ns = ns;\n    if (vnode.tag === 'foreignObject') {\n        // use default namespace inside foreignObject\n        ns = undefined;\n        force = true;\n    }\n    if (isDef(vnode.children)) {\n        for (var i = 0, l = vnode.children.length; i < l; i++) {\n            var child = vnode.children[i];\n            if (isDef(child.tag) &&\n                (isUndef(child.ns) || (isTrue(force) && child.tag !== 'svg'))) {\n                applyNS(child, ns, force);\n            }\n        }\n    }\n}\n// ref #5318\n// necessary to ensure parent re-render when deep bindings like :style and\n// :class are used on slot nodes\nfunction registerDeepBindings(data) {\n    if (isObject(data.style)) {\n        traverse(data.style);\n    }\n    if (isObject(data.class)) {\n        traverse(data.class);\n    }\n}\n\n/**\n * Runtime helper for rendering v-for lists.\n */\nfunction renderList(val, render) {\n    var ret = null, i, l, keys, key;\n    if (isArray(val) || typeof val === 'string') {\n        ret = new Array(val.length);\n        for (i = 0, l = val.length; i < l; i++) {\n            ret[i] = render(val[i], i);\n        }\n    }\n    else if (typeof val === 'number') {\n        ret = new Array(val);\n        for (i = 0; i < val; i++) {\n            ret[i] = render(i + 1, i);\n        }\n    }\n    else if (isObject(val)) {\n        if (hasSymbol && val[Symbol.iterator]) {\n            ret = [];\n            var iterator = val[Symbol.iterator]();\n            var result = iterator.next();\n            while (!result.done) {\n                ret.push(render(result.value, ret.length));\n                result = iterator.next();\n            }\n        }\n        else {\n            keys = Object.keys(val);\n            ret = new Array(keys.length);\n            for (i = 0, l = keys.length; i < l; i++) {\n                key = keys[i];\n                ret[i] = render(val[key], key, i);\n            }\n        }\n    }\n    if (!isDef(ret)) {\n        ret = [];\n    }\n    ret._isVList = true;\n    return ret;\n}\n\n/**\n * Runtime helper for rendering <slot>\n */\nfunction renderSlot(name, fallbackRender, props, bindObject) {\n    var scopedSlotFn = this.$scopedSlots[name];\n    var nodes;\n    if (scopedSlotFn) {\n        // scoped slot\n        props = props || {};\n        if (bindObject) {\n            if ( true && !isObject(bindObject)) {\n                warn$2('slot v-bind without argument expects an Object', this);\n            }\n            props = extend(extend({}, bindObject), props);\n        }\n        nodes =\n            scopedSlotFn(props) ||\n                (isFunction(fallbackRender) ? fallbackRender() : fallbackRender);\n    }\n    else {\n        nodes =\n            this.$slots[name] ||\n                (isFunction(fallbackRender) ? fallbackRender() : fallbackRender);\n    }\n    var target = props && props.slot;\n    if (target) {\n        return this.$createElement('template', { slot: target }, nodes);\n    }\n    else {\n        return nodes;\n    }\n}\n\n/**\n * Runtime helper for resolving filters\n */\nfunction resolveFilter(id) {\n    return resolveAsset(this.$options, 'filters', id, true) || identity;\n}\n\nfunction isKeyNotMatch(expect, actual) {\n    if (isArray(expect)) {\n        return expect.indexOf(actual) === -1;\n    }\n    else {\n        return expect !== actual;\n    }\n}\n/**\n * Runtime helper for checking keyCodes from config.\n * exposed as Vue.prototype._k\n * passing in eventKeyName as last argument separately for backwards compat\n */\nfunction checkKeyCodes(eventKeyCode, key, builtInKeyCode, eventKeyName, builtInKeyName) {\n    var mappedKeyCode = config.keyCodes[key] || builtInKeyCode;\n    if (builtInKeyName && eventKeyName && !config.keyCodes[key]) {\n        return isKeyNotMatch(builtInKeyName, eventKeyName);\n    }\n    else if (mappedKeyCode) {\n        return isKeyNotMatch(mappedKeyCode, eventKeyCode);\n    }\n    else if (eventKeyName) {\n        return hyphenate(eventKeyName) !== key;\n    }\n    return eventKeyCode === undefined;\n}\n\n/**\n * Runtime helper for merging v-bind=\"object\" into a VNode's data.\n */\nfunction bindObjectProps(data, tag, value, asProp, isSync) {\n    if (value) {\n        if (!isObject(value)) {\n             true &&\n                warn$2('v-bind without argument expects an Object or Array value', this);\n        }\n        else {\n            if (isArray(value)) {\n                value = toObject(value);\n            }\n            var hash = void 0;\n            var _loop_1 = function (key) {\n                if (key === 'class' || key === 'style' || isReservedAttribute(key)) {\n                    hash = data;\n                }\n                else {\n                    var type = data.attrs && data.attrs.type;\n                    hash =\n                        asProp || config.mustUseProp(tag, type, key)\n                            ? data.domProps || (data.domProps = {})\n                            : data.attrs || (data.attrs = {});\n                }\n                var camelizedKey = camelize(key);\n                var hyphenatedKey = hyphenate(key);\n                if (!(camelizedKey in hash) && !(hyphenatedKey in hash)) {\n                    hash[key] = value[key];\n                    if (isSync) {\n                        var on = data.on || (data.on = {});\n                        on[\"update:\".concat(key)] = function ($event) {\n                            value[key] = $event;\n                        };\n                    }\n                }\n            };\n            for (var key in value) {\n                _loop_1(key);\n            }\n        }\n    }\n    return data;\n}\n\n/**\n * Runtime helper for rendering static trees.\n */\nfunction renderStatic(index, isInFor) {\n    var cached = this._staticTrees || (this._staticTrees = []);\n    var tree = cached[index];\n    // if has already-rendered static tree and not inside v-for,\n    // we can reuse the same tree.\n    if (tree && !isInFor) {\n        return tree;\n    }\n    // otherwise, render a fresh tree.\n    tree = cached[index] = this.$options.staticRenderFns[index].call(this._renderProxy, this._c, this // for render fns generated for functional component templates\n    );\n    markStatic$1(tree, \"__static__\".concat(index), false);\n    return tree;\n}\n/**\n * Runtime helper for v-once.\n * Effectively it means marking the node as static with a unique key.\n */\nfunction markOnce(tree, index, key) {\n    markStatic$1(tree, \"__once__\".concat(index).concat(key ? \"_\".concat(key) : \"\"), true);\n    return tree;\n}\nfunction markStatic$1(tree, key, isOnce) {\n    if (isArray(tree)) {\n        for (var i = 0; i < tree.length; i++) {\n            if (tree[i] && typeof tree[i] !== 'string') {\n                markStaticNode(tree[i], \"\".concat(key, \"_\").concat(i), isOnce);\n            }\n        }\n    }\n    else {\n        markStaticNode(tree, key, isOnce);\n    }\n}\nfunction markStaticNode(node, key, isOnce) {\n    node.isStatic = true;\n    node.key = key;\n    node.isOnce = isOnce;\n}\n\nfunction bindObjectListeners(data, value) {\n    if (value) {\n        if (!isPlainObject(value)) {\n             true && warn$2('v-on without argument expects an Object value', this);\n        }\n        else {\n            var on = (data.on = data.on ? extend({}, data.on) : {});\n            for (var key in value) {\n                var existing = on[key];\n                var ours = value[key];\n                on[key] = existing ? [].concat(existing, ours) : ours;\n            }\n        }\n    }\n    return data;\n}\n\nfunction resolveScopedSlots(fns, res, \n// the following are added in 2.6\nhasDynamicKeys, contentHashKey) {\n    res = res || { $stable: !hasDynamicKeys };\n    for (var i = 0; i < fns.length; i++) {\n        var slot = fns[i];\n        if (isArray(slot)) {\n            resolveScopedSlots(slot, res, hasDynamicKeys);\n        }\n        else if (slot) {\n            // marker for reverse proxying v-slot without scope on this.$slots\n            // @ts-expect-error\n            if (slot.proxy) {\n                // @ts-expect-error\n                slot.fn.proxy = true;\n            }\n            res[slot.key] = slot.fn;\n        }\n    }\n    if (contentHashKey) {\n        res.$key = contentHashKey;\n    }\n    return res;\n}\n\n// helper to process dynamic keys for dynamic arguments in v-bind and v-on.\nfunction bindDynamicKeys(baseObj, values) {\n    for (var i = 0; i < values.length; i += 2) {\n        var key = values[i];\n        if (typeof key === 'string' && key) {\n            baseObj[values[i]] = values[i + 1];\n        }\n        else if ( true && key !== '' && key !== null) {\n            // null is a special value for explicitly removing a binding\n            warn$2(\"Invalid value for dynamic directive argument (expected string or null): \".concat(key), this);\n        }\n    }\n    return baseObj;\n}\n// helper to dynamically append modifier runtime markers to event names.\n// ensure only append when value is already string, otherwise it will be cast\n// to string and cause the type check to miss.\nfunction prependModifier(value, symbol) {\n    return typeof value === 'string' ? symbol + value : value;\n}\n\nfunction installRenderHelpers(target) {\n    target._o = markOnce;\n    target._n = toNumber;\n    target._s = toString;\n    target._l = renderList;\n    target._t = renderSlot;\n    target._q = looseEqual;\n    target._i = looseIndexOf;\n    target._m = renderStatic;\n    target._f = resolveFilter;\n    target._k = checkKeyCodes;\n    target._b = bindObjectProps;\n    target._v = createTextVNode;\n    target._e = createEmptyVNode;\n    target._u = resolveScopedSlots;\n    target._g = bindObjectListeners;\n    target._d = bindDynamicKeys;\n    target._p = prependModifier;\n}\n\n/**\n * Runtime helper for resolving raw children VNodes into a slot object.\n */\nfunction resolveSlots(children, context) {\n    if (!children || !children.length) {\n        return {};\n    }\n    var slots = {};\n    for (var i = 0, l = children.length; i < l; i++) {\n        var child = children[i];\n        var data = child.data;\n        // remove slot attribute if the node is resolved as a Vue slot node\n        if (data && data.attrs && data.attrs.slot) {\n            delete data.attrs.slot;\n        }\n        // named slots should only be respected if the vnode was rendered in the\n        // same context.\n        if ((child.context === context || child.fnContext === context) &&\n            data &&\n            data.slot != null) {\n            var name_1 = data.slot;\n            var slot = slots[name_1] || (slots[name_1] = []);\n            if (child.tag === 'template') {\n                slot.push.apply(slot, child.children || []);\n            }\n            else {\n                slot.push(child);\n            }\n        }\n        else {\n            (slots.default || (slots.default = [])).push(child);\n        }\n    }\n    // ignore slots that contains only whitespace\n    for (var name_2 in slots) {\n        if (slots[name_2].every(isWhitespace)) {\n            delete slots[name_2];\n        }\n    }\n    return slots;\n}\nfunction isWhitespace(node) {\n    return (node.isComment && !node.asyncFactory) || node.text === ' ';\n}\n\nfunction isAsyncPlaceholder(node) {\n    // @ts-expect-error not really boolean type\n    return node.isComment && node.asyncFactory;\n}\n\nfunction normalizeScopedSlots(ownerVm, scopedSlots, normalSlots, prevScopedSlots) {\n    var res;\n    var hasNormalSlots = Object.keys(normalSlots).length > 0;\n    var isStable = scopedSlots ? !!scopedSlots.$stable : !hasNormalSlots;\n    var key = scopedSlots && scopedSlots.$key;\n    if (!scopedSlots) {\n        res = {};\n    }\n    else if (scopedSlots._normalized) {\n        // fast path 1: child component re-render only, parent did not change\n        return scopedSlots._normalized;\n    }\n    else if (isStable &&\n        prevScopedSlots &&\n        prevScopedSlots !== emptyObject &&\n        key === prevScopedSlots.$key &&\n        !hasNormalSlots &&\n        !prevScopedSlots.$hasNormal) {\n        // fast path 2: stable scoped slots w/ no normal slots to proxy,\n        // only need to normalize once\n        return prevScopedSlots;\n    }\n    else {\n        res = {};\n        for (var key_1 in scopedSlots) {\n            if (scopedSlots[key_1] && key_1[0] !== '$') {\n                res[key_1] = normalizeScopedSlot(ownerVm, normalSlots, key_1, scopedSlots[key_1]);\n            }\n        }\n    }\n    // expose normal slots on scopedSlots\n    for (var key_2 in normalSlots) {\n        if (!(key_2 in res)) {\n            res[key_2] = proxyNormalSlot(normalSlots, key_2);\n        }\n    }\n    // avoriaz seems to mock a non-extensible $scopedSlots object\n    // and when that is passed down this would cause an error\n    if (scopedSlots && Object.isExtensible(scopedSlots)) {\n        scopedSlots._normalized = res;\n    }\n    def(res, '$stable', isStable);\n    def(res, '$key', key);\n    def(res, '$hasNormal', hasNormalSlots);\n    return res;\n}\nfunction normalizeScopedSlot(vm, normalSlots, key, fn) {\n    var normalized = function () {\n        var cur = currentInstance;\n        setCurrentInstance(vm);\n        var res = arguments.length ? fn.apply(null, arguments) : fn({});\n        res =\n            res && typeof res === 'object' && !isArray(res)\n                ? [res] // single vnode\n                : normalizeChildren(res);\n        var vnode = res && res[0];\n        setCurrentInstance(cur);\n        return res &&\n            (!vnode ||\n                (res.length === 1 && vnode.isComment && !isAsyncPlaceholder(vnode))) // #9658, #10391\n            ? undefined\n            : res;\n    };\n    // this is a slot using the new v-slot syntax without scope. although it is\n    // compiled as a scoped slot, render fn users would expect it to be present\n    // on this.$slots because the usage is semantically a normal slot.\n    if (fn.proxy) {\n        Object.defineProperty(normalSlots, key, {\n            get: normalized,\n            enumerable: true,\n            configurable: true\n        });\n    }\n    return normalized;\n}\nfunction proxyNormalSlot(slots, key) {\n    return function () { return slots[key]; };\n}\n\nfunction initSetup(vm) {\n    var options = vm.$options;\n    var setup = options.setup;\n    if (setup) {\n        var ctx = (vm._setupContext = createSetupContext(vm));\n        setCurrentInstance(vm);\n        pushTarget();\n        var setupResult = invokeWithErrorHandling(setup, null, [vm._props || shallowReactive({}), ctx], vm, \"setup\");\n        popTarget();\n        setCurrentInstance();\n        if (isFunction(setupResult)) {\n            // render function\n            // @ts-ignore\n            options.render = setupResult;\n        }\n        else if (isObject(setupResult)) {\n            // bindings\n            if ( true && setupResult instanceof VNode) {\n                warn$2(\"setup() should not return VNodes directly - \" +\n                    \"return a render function instead.\");\n            }\n            vm._setupState = setupResult;\n            // __sfc indicates compiled bindings from <script setup>\n            if (!setupResult.__sfc) {\n                for (var key in setupResult) {\n                    if (!isReserved(key)) {\n                        proxyWithRefUnwrap(vm, setupResult, key);\n                    }\n                    else if (true) {\n                        warn$2(\"Avoid using variables that start with _ or $ in setup().\");\n                    }\n                }\n            }\n            else {\n                // exposed for compiled render fn\n                var proxy = (vm._setupProxy = {});\n                for (var key in setupResult) {\n                    if (key !== '__sfc') {\n                        proxyWithRefUnwrap(proxy, setupResult, key);\n                    }\n                }\n            }\n        }\n        else if ( true && setupResult !== undefined) {\n            warn$2(\"setup() should return an object. Received: \".concat(setupResult === null ? 'null' : typeof setupResult));\n        }\n    }\n}\nfunction createSetupContext(vm) {\n    var exposeCalled = false;\n    return {\n        get attrs() {\n            if (!vm._attrsProxy) {\n                var proxy = (vm._attrsProxy = {});\n                def(proxy, '_v_attr_proxy', true);\n                syncSetupProxy(proxy, vm.$attrs, emptyObject, vm, '$attrs');\n            }\n            return vm._attrsProxy;\n        },\n        get listeners() {\n            if (!vm._listenersProxy) {\n                var proxy = (vm._listenersProxy = {});\n                syncSetupProxy(proxy, vm.$listeners, emptyObject, vm, '$listeners');\n            }\n            return vm._listenersProxy;\n        },\n        get slots() {\n            return initSlotsProxy(vm);\n        },\n        emit: bind$1(vm.$emit, vm),\n        expose: function (exposed) {\n            if (true) {\n                if (exposeCalled) {\n                    warn$2(\"expose() should be called only once per setup().\", vm);\n                }\n                exposeCalled = true;\n            }\n            if (exposed) {\n                Object.keys(exposed).forEach(function (key) {\n                    return proxyWithRefUnwrap(vm, exposed, key);\n                });\n            }\n        }\n    };\n}\nfunction syncSetupProxy(to, from, prev, instance, type) {\n    var changed = false;\n    for (var key in from) {\n        if (!(key in to)) {\n            changed = true;\n            defineProxyAttr(to, key, instance, type);\n        }\n        else if (from[key] !== prev[key]) {\n            changed = true;\n        }\n    }\n    for (var key in to) {\n        if (!(key in from)) {\n            changed = true;\n            delete to[key];\n        }\n    }\n    return changed;\n}\nfunction defineProxyAttr(proxy, key, instance, type) {\n    Object.defineProperty(proxy, key, {\n        enumerable: true,\n        configurable: true,\n        get: function () {\n            return instance[type][key];\n        }\n    });\n}\nfunction initSlotsProxy(vm) {\n    if (!vm._slotsProxy) {\n        syncSetupSlots((vm._slotsProxy = {}), vm.$scopedSlots);\n    }\n    return vm._slotsProxy;\n}\nfunction syncSetupSlots(to, from) {\n    for (var key in from) {\n        to[key] = from[key];\n    }\n    for (var key in to) {\n        if (!(key in from)) {\n            delete to[key];\n        }\n    }\n}\n/**\n * @internal use manual type def because public setup context type relies on\n * legacy VNode types\n */\nfunction useSlots() {\n    return getContext().slots;\n}\n/**\n * @internal use manual type def because public setup context type relies on\n * legacy VNode types\n */\nfunction useAttrs() {\n    return getContext().attrs;\n}\n/**\n * Vue 2 only\n * @internal use manual type def because public setup context type relies on\n * legacy VNode types\n */\nfunction useListeners() {\n    return getContext().listeners;\n}\nfunction getContext() {\n    if ( true && !currentInstance) {\n        warn$2(\"useContext() called without active instance.\");\n    }\n    var vm = currentInstance;\n    return vm._setupContext || (vm._setupContext = createSetupContext(vm));\n}\n/**\n * Runtime helper for merging default declarations. Imported by compiled code\n * only.\n * @internal\n */\nfunction mergeDefaults(raw, defaults) {\n    var props = isArray(raw)\n        ? raw.reduce(function (normalized, p) { return ((normalized[p] = {}), normalized); }, {})\n        : raw;\n    for (var key in defaults) {\n        var opt = props[key];\n        if (opt) {\n            if (isArray(opt) || isFunction(opt)) {\n                props[key] = { type: opt, default: defaults[key] };\n            }\n            else {\n                opt.default = defaults[key];\n            }\n        }\n        else if (opt === null) {\n            props[key] = { default: defaults[key] };\n        }\n        else if (true) {\n            warn$2(\"props default key \\\"\".concat(key, \"\\\" has no corresponding declaration.\"));\n        }\n    }\n    return props;\n}\n\nfunction initRender(vm) {\n    vm._vnode = null; // the root of the child tree\n    vm._staticTrees = null; // v-once cached trees\n    var options = vm.$options;\n    var parentVnode = (vm.$vnode = options._parentVnode); // the placeholder node in parent tree\n    var renderContext = parentVnode && parentVnode.context;\n    vm.$slots = resolveSlots(options._renderChildren, renderContext);\n    vm.$scopedSlots = parentVnode\n        ? normalizeScopedSlots(vm.$parent, parentVnode.data.scopedSlots, vm.$slots)\n        : emptyObject;\n    // bind the createElement fn to this instance\n    // so that we get proper render context inside it.\n    // args order: tag, data, children, normalizationType, alwaysNormalize\n    // internal version is used by render functions compiled from templates\n    // @ts-expect-error\n    vm._c = function (a, b, c, d) { return createElement$1(vm, a, b, c, d, false); };\n    // normalization is always applied for the public version, used in\n    // user-written render functions.\n    // @ts-expect-error\n    vm.$createElement = function (a, b, c, d) { return createElement$1(vm, a, b, c, d, true); };\n    // $attrs & $listeners are exposed for easier HOC creation.\n    // they need to be reactive so that HOCs using them are always updated\n    var parentData = parentVnode && parentVnode.data;\n    /* istanbul ignore else */\n    if (true) {\n        defineReactive(vm, '$attrs', (parentData && parentData.attrs) || emptyObject, function () {\n            !isUpdatingChildComponent && warn$2(\"$attrs is readonly.\", vm);\n        }, true);\n        defineReactive(vm, '$listeners', options._parentListeners || emptyObject, function () {\n            !isUpdatingChildComponent && warn$2(\"$listeners is readonly.\", vm);\n        }, true);\n    }\n    else {}\n}\nvar currentRenderingInstance = null;\nfunction renderMixin(Vue) {\n    // install runtime convenience helpers\n    installRenderHelpers(Vue.prototype);\n    Vue.prototype.$nextTick = function (fn) {\n        return nextTick(fn, this);\n    };\n    Vue.prototype._render = function () {\n        var vm = this;\n        var _a = vm.$options, render = _a.render, _parentVnode = _a._parentVnode;\n        if (_parentVnode && vm._isMounted) {\n            vm.$scopedSlots = normalizeScopedSlots(vm.$parent, _parentVnode.data.scopedSlots, vm.$slots, vm.$scopedSlots);\n            if (vm._slotsProxy) {\n                syncSetupSlots(vm._slotsProxy, vm.$scopedSlots);\n            }\n        }\n        // set parent vnode. this allows render functions to have access\n        // to the data on the placeholder node.\n        vm.$vnode = _parentVnode;\n        // render self\n        var vnode;\n        try {\n            // There's no need to maintain a stack because all render fns are called\n            // separately from one another. Nested component's render fns are called\n            // when parent component is patched.\n            setCurrentInstance(vm);\n            currentRenderingInstance = vm;\n            vnode = render.call(vm._renderProxy, vm.$createElement);\n        }\n        catch (e) {\n            handleError(e, vm, \"render\");\n            // return error render result,\n            // or previous vnode to prevent render error causing blank component\n            /* istanbul ignore else */\n            if ( true && vm.$options.renderError) {\n                try {\n                    vnode = vm.$options.renderError.call(vm._renderProxy, vm.$createElement, e);\n                }\n                catch (e) {\n                    handleError(e, vm, \"renderError\");\n                    vnode = vm._vnode;\n                }\n            }\n            else {\n                vnode = vm._vnode;\n            }\n        }\n        finally {\n            currentRenderingInstance = null;\n            setCurrentInstance();\n        }\n        // if the returned array contains only a single node, allow it\n        if (isArray(vnode) && vnode.length === 1) {\n            vnode = vnode[0];\n        }\n        // return empty vnode in case the render function errored out\n        if (!(vnode instanceof VNode)) {\n            if ( true && isArray(vnode)) {\n                warn$2('Multiple root nodes returned from render function. Render function ' +\n                    'should return a single root node.', vm);\n            }\n            vnode = createEmptyVNode();\n        }\n        // set parent\n        vnode.parent = _parentVnode;\n        return vnode;\n    };\n}\n\nfunction ensureCtor(comp, base) {\n    if (comp.__esModule || (hasSymbol && comp[Symbol.toStringTag] === 'Module')) {\n        comp = comp.default;\n    }\n    return isObject(comp) ? base.extend(comp) : comp;\n}\nfunction createAsyncPlaceholder(factory, data, context, children, tag) {\n    var node = createEmptyVNode();\n    node.asyncFactory = factory;\n    node.asyncMeta = { data: data, context: context, children: children, tag: tag };\n    return node;\n}\nfunction resolveAsyncComponent(factory, baseCtor) {\n    if (isTrue(factory.error) && isDef(factory.errorComp)) {\n        return factory.errorComp;\n    }\n    if (isDef(factory.resolved)) {\n        return factory.resolved;\n    }\n    var owner = currentRenderingInstance;\n    if (owner && isDef(factory.owners) && factory.owners.indexOf(owner) === -1) {\n        // already pending\n        factory.owners.push(owner);\n    }\n    if (isTrue(factory.loading) && isDef(factory.loadingComp)) {\n        return factory.loadingComp;\n    }\n    if (owner && !isDef(factory.owners)) {\n        var owners_1 = (factory.owners = [owner]);\n        var sync_1 = true;\n        var timerLoading_1 = null;\n        var timerTimeout_1 = null;\n        owner.$on('hook:destroyed', function () { return remove$2(owners_1, owner); });\n        var forceRender_1 = function (renderCompleted) {\n            for (var i = 0, l = owners_1.length; i < l; i++) {\n                owners_1[i].$forceUpdate();\n            }\n            if (renderCompleted) {\n                owners_1.length = 0;\n                if (timerLoading_1 !== null) {\n                    clearTimeout(timerLoading_1);\n                    timerLoading_1 = null;\n                }\n                if (timerTimeout_1 !== null) {\n                    clearTimeout(timerTimeout_1);\n                    timerTimeout_1 = null;\n                }\n            }\n        };\n        var resolve = once(function (res) {\n            // cache resolved\n            factory.resolved = ensureCtor(res, baseCtor);\n            // invoke callbacks only if this is not a synchronous resolve\n            // (async resolves are shimmed as synchronous during SSR)\n            if (!sync_1) {\n                forceRender_1(true);\n            }\n            else {\n                owners_1.length = 0;\n            }\n        });\n        var reject_1 = once(function (reason) {\n             true &&\n                warn$2(\"Failed to resolve async component: \".concat(String(factory)) +\n                    (reason ? \"\\nReason: \".concat(reason) : ''));\n            if (isDef(factory.errorComp)) {\n                factory.error = true;\n                forceRender_1(true);\n            }\n        });\n        var res_1 = factory(resolve, reject_1);\n        if (isObject(res_1)) {\n            if (isPromise(res_1)) {\n                // () => Promise\n                if (isUndef(factory.resolved)) {\n                    res_1.then(resolve, reject_1);\n                }\n            }\n            else if (isPromise(res_1.component)) {\n                res_1.component.then(resolve, reject_1);\n                if (isDef(res_1.error)) {\n                    factory.errorComp = ensureCtor(res_1.error, baseCtor);\n                }\n                if (isDef(res_1.loading)) {\n                    factory.loadingComp = ensureCtor(res_1.loading, baseCtor);\n                    if (res_1.delay === 0) {\n                        factory.loading = true;\n                    }\n                    else {\n                        // @ts-expect-error NodeJS timeout type\n                        timerLoading_1 = setTimeout(function () {\n                            timerLoading_1 = null;\n                            if (isUndef(factory.resolved) && isUndef(factory.error)) {\n                                factory.loading = true;\n                                forceRender_1(false);\n                            }\n                        }, res_1.delay || 200);\n                    }\n                }\n                if (isDef(res_1.timeout)) {\n                    // @ts-expect-error NodeJS timeout type\n                    timerTimeout_1 = setTimeout(function () {\n                        timerTimeout_1 = null;\n                        if (isUndef(factory.resolved)) {\n                            reject_1( true ? \"timeout (\".concat(res_1.timeout, \"ms)\") : 0);\n                        }\n                    }, res_1.timeout);\n                }\n            }\n        }\n        sync_1 = false;\n        // return in case resolved synchronously\n        return factory.loading ? factory.loadingComp : factory.resolved;\n    }\n}\n\nfunction getFirstComponentChild(children) {\n    if (isArray(children)) {\n        for (var i = 0; i < children.length; i++) {\n            var c = children[i];\n            if (isDef(c) && (isDef(c.componentOptions) || isAsyncPlaceholder(c))) {\n                return c;\n            }\n        }\n    }\n}\n\nfunction initEvents(vm) {\n    vm._events = Object.create(null);\n    vm._hasHookEvent = false;\n    // init parent attached events\n    var listeners = vm.$options._parentListeners;\n    if (listeners) {\n        updateComponentListeners(vm, listeners);\n    }\n}\nvar target$1;\nfunction add$1(event, fn) {\n    target$1.$on(event, fn);\n}\nfunction remove$1(event, fn) {\n    target$1.$off(event, fn);\n}\nfunction createOnceHandler$1(event, fn) {\n    var _target = target$1;\n    return function onceHandler() {\n        var res = fn.apply(null, arguments);\n        if (res !== null) {\n            _target.$off(event, onceHandler);\n        }\n    };\n}\nfunction updateComponentListeners(vm, listeners, oldListeners) {\n    target$1 = vm;\n    updateListeners(listeners, oldListeners || {}, add$1, remove$1, createOnceHandler$1, vm);\n    target$1 = undefined;\n}\nfunction eventsMixin(Vue) {\n    var hookRE = /^hook:/;\n    Vue.prototype.$on = function (event, fn) {\n        var vm = this;\n        if (isArray(event)) {\n            for (var i = 0, l = event.length; i < l; i++) {\n                vm.$on(event[i], fn);\n            }\n        }\n        else {\n            (vm._events[event] || (vm._events[event] = [])).push(fn);\n            // optimize hook:event cost by using a boolean flag marked at registration\n            // instead of a hash lookup\n            if (hookRE.test(event)) {\n                vm._hasHookEvent = true;\n            }\n        }\n        return vm;\n    };\n    Vue.prototype.$once = function (event, fn) {\n        var vm = this;\n        function on() {\n            vm.$off(event, on);\n            fn.apply(vm, arguments);\n        }\n        on.fn = fn;\n        vm.$on(event, on);\n        return vm;\n    };\n    Vue.prototype.$off = function (event, fn) {\n        var vm = this;\n        // all\n        if (!arguments.length) {\n            vm._events = Object.create(null);\n            return vm;\n        }\n        // array of events\n        if (isArray(event)) {\n            for (var i_1 = 0, l = event.length; i_1 < l; i_1++) {\n                vm.$off(event[i_1], fn);\n            }\n            return vm;\n        }\n        // specific event\n        var cbs = vm._events[event];\n        if (!cbs) {\n            return vm;\n        }\n        if (!fn) {\n            vm._events[event] = null;\n            return vm;\n        }\n        // specific handler\n        var cb;\n        var i = cbs.length;\n        while (i--) {\n            cb = cbs[i];\n            if (cb === fn || cb.fn === fn) {\n                cbs.splice(i, 1);\n                break;\n            }\n        }\n        return vm;\n    };\n    Vue.prototype.$emit = function (event) {\n        var vm = this;\n        if (true) {\n            var lowerCaseEvent = event.toLowerCase();\n            if (lowerCaseEvent !== event && vm._events[lowerCaseEvent]) {\n                tip(\"Event \\\"\".concat(lowerCaseEvent, \"\\\" is emitted in component \") +\n                    \"\".concat(formatComponentName(vm), \" but the handler is registered for \\\"\").concat(event, \"\\\". \") +\n                    \"Note that HTML attributes are case-insensitive and you cannot use \" +\n                    \"v-on to listen to camelCase events when using in-DOM templates. \" +\n                    \"You should probably use \\\"\".concat(hyphenate(event), \"\\\" instead of \\\"\").concat(event, \"\\\".\"));\n            }\n        }\n        var cbs = vm._events[event];\n        if (cbs) {\n            cbs = cbs.length > 1 ? toArray(cbs) : cbs;\n            var args = toArray(arguments, 1);\n            var info = \"event handler for \\\"\".concat(event, \"\\\"\");\n            for (var i = 0, l = cbs.length; i < l; i++) {\n                invokeWithErrorHandling(cbs[i], vm, args, vm, info);\n            }\n        }\n        return vm;\n    };\n}\n\nvar activeInstance = null;\nvar isUpdatingChildComponent = false;\nfunction setActiveInstance(vm) {\n    var prevActiveInstance = activeInstance;\n    activeInstance = vm;\n    return function () {\n        activeInstance = prevActiveInstance;\n    };\n}\nfunction initLifecycle(vm) {\n    var options = vm.$options;\n    // locate first non-abstract parent\n    var parent = options.parent;\n    if (parent && !options.abstract) {\n        while (parent.$options.abstract && parent.$parent) {\n            parent = parent.$parent;\n        }\n        parent.$children.push(vm);\n    }\n    vm.$parent = parent;\n    vm.$root = parent ? parent.$root : vm;\n    vm.$children = [];\n    vm.$refs = {};\n    vm._provided = parent ? parent._provided : Object.create(null);\n    vm._watcher = null;\n    vm._inactive = null;\n    vm._directInactive = false;\n    vm._isMounted = false;\n    vm._isDestroyed = false;\n    vm._isBeingDestroyed = false;\n}\nfunction lifecycleMixin(Vue) {\n    Vue.prototype._update = function (vnode, hydrating) {\n        var vm = this;\n        var prevEl = vm.$el;\n        var prevVnode = vm._vnode;\n        var restoreActiveInstance = setActiveInstance(vm);\n        vm._vnode = vnode;\n        // Vue.prototype.__patch__ is injected in entry points\n        // based on the rendering backend used.\n        if (!prevVnode) {\n            // initial render\n            vm.$el = vm.__patch__(vm.$el, vnode, hydrating, false /* removeOnly */);\n        }\n        else {\n            // updates\n            vm.$el = vm.__patch__(prevVnode, vnode);\n        }\n        restoreActiveInstance();\n        // update __vue__ reference\n        if (prevEl) {\n            prevEl.__vue__ = null;\n        }\n        if (vm.$el) {\n            vm.$el.__vue__ = vm;\n        }\n        // if parent is an HOC, update its $el as well\n        var wrapper = vm;\n        while (wrapper &&\n            wrapper.$vnode &&\n            wrapper.$parent &&\n            wrapper.$vnode === wrapper.$parent._vnode) {\n            wrapper.$parent.$el = wrapper.$el;\n            wrapper = wrapper.$parent;\n        }\n        // updated hook is called by the scheduler to ensure that children are\n        // updated in a parent's updated hook.\n    };\n    Vue.prototype.$forceUpdate = function () {\n        var vm = this;\n        if (vm._watcher) {\n            vm._watcher.update();\n        }\n    };\n    Vue.prototype.$destroy = function () {\n        var vm = this;\n        if (vm._isBeingDestroyed) {\n            return;\n        }\n        callHook$1(vm, 'beforeDestroy');\n        vm._isBeingDestroyed = true;\n        // remove self from parent\n        var parent = vm.$parent;\n        if (parent && !parent._isBeingDestroyed && !vm.$options.abstract) {\n            remove$2(parent.$children, vm);\n        }\n        // teardown scope. this includes both the render watcher and other\n        // watchers created\n        vm._scope.stop();\n        // remove reference from data ob\n        // frozen object may not have observer.\n        if (vm._data.__ob__) {\n            vm._data.__ob__.vmCount--;\n        }\n        // call the last hook...\n        vm._isDestroyed = true;\n        // invoke destroy hooks on current rendered tree\n        vm.__patch__(vm._vnode, null);\n        // fire destroyed hook\n        callHook$1(vm, 'destroyed');\n        // turn off all instance listeners.\n        vm.$off();\n        // remove __vue__ reference\n        if (vm.$el) {\n            vm.$el.__vue__ = null;\n        }\n        // release circular reference (#6759)\n        if (vm.$vnode) {\n            vm.$vnode.parent = null;\n        }\n    };\n}\nfunction mountComponent(vm, el, hydrating) {\n    vm.$el = el;\n    if (!vm.$options.render) {\n        // @ts-expect-error invalid type\n        vm.$options.render = createEmptyVNode;\n        if (true) {\n            /* istanbul ignore if */\n            if ((vm.$options.template && vm.$options.template.charAt(0) !== '#') ||\n                vm.$options.el ||\n                el) {\n                warn$2('You are using the runtime-only build of Vue where the template ' +\n                    'compiler is not available. Either pre-compile the templates into ' +\n                    'render functions, or use the compiler-included build.', vm);\n            }\n            else {\n                warn$2('Failed to mount component: template or render function not defined.', vm);\n            }\n        }\n    }\n    callHook$1(vm, 'beforeMount');\n    var updateComponent;\n    /* istanbul ignore if */\n    if ( true && config.performance && mark) {\n        updateComponent = function () {\n            var name = vm._name;\n            var id = vm._uid;\n            var startTag = \"vue-perf-start:\".concat(id);\n            var endTag = \"vue-perf-end:\".concat(id);\n            mark(startTag);\n            var vnode = vm._render();\n            mark(endTag);\n            measure(\"vue \".concat(name, \" render\"), startTag, endTag);\n            mark(startTag);\n            vm._update(vnode, hydrating);\n            mark(endTag);\n            measure(\"vue \".concat(name, \" patch\"), startTag, endTag);\n        };\n    }\n    else {\n        updateComponent = function () {\n            vm._update(vm._render(), hydrating);\n        };\n    }\n    var watcherOptions = {\n        before: function () {\n            if (vm._isMounted && !vm._isDestroyed) {\n                callHook$1(vm, 'beforeUpdate');\n            }\n        }\n    };\n    if (true) {\n        watcherOptions.onTrack = function (e) { return callHook$1(vm, 'renderTracked', [e]); };\n        watcherOptions.onTrigger = function (e) { return callHook$1(vm, 'renderTriggered', [e]); };\n    }\n    // we set this to vm._watcher inside the watcher's constructor\n    // since the watcher's initial patch may call $forceUpdate (e.g. inside child\n    // component's mounted hook), which relies on vm._watcher being already defined\n    new Watcher(vm, updateComponent, noop, watcherOptions, true /* isRenderWatcher */);\n    hydrating = false;\n    // flush buffer for flush: \"pre\" watchers queued in setup()\n    var preWatchers = vm._preWatchers;\n    if (preWatchers) {\n        for (var i = 0; i < preWatchers.length; i++) {\n            preWatchers[i].run();\n        }\n    }\n    // manually mounted instance, call mounted on self\n    // mounted is called for render-created child components in its inserted hook\n    if (vm.$vnode == null) {\n        vm._isMounted = true;\n        callHook$1(vm, 'mounted');\n    }\n    return vm;\n}\nfunction updateChildComponent(vm, propsData, listeners, parentVnode, renderChildren) {\n    if (true) {\n        isUpdatingChildComponent = true;\n    }\n    // determine whether component has slot children\n    // we need to do this before overwriting $options._renderChildren.\n    // check if there are dynamic scopedSlots (hand-written or compiled but with\n    // dynamic slot names). Static scoped slots compiled from template has the\n    // \"$stable\" marker.\n    var newScopedSlots = parentVnode.data.scopedSlots;\n    var oldScopedSlots = vm.$scopedSlots;\n    var hasDynamicScopedSlot = !!((newScopedSlots && !newScopedSlots.$stable) ||\n        (oldScopedSlots !== emptyObject && !oldScopedSlots.$stable) ||\n        (newScopedSlots && vm.$scopedSlots.$key !== newScopedSlots.$key) ||\n        (!newScopedSlots && vm.$scopedSlots.$key));\n    // Any static slot children from the parent may have changed during parent's\n    // update. Dynamic scoped slots may also have changed. In such cases, a forced\n    // update is necessary to ensure correctness.\n    var needsForceUpdate = !!(renderChildren || // has new static slots\n        vm.$options._renderChildren || // has old static slots\n        hasDynamicScopedSlot);\n    var prevVNode = vm.$vnode;\n    vm.$options._parentVnode = parentVnode;\n    vm.$vnode = parentVnode; // update vm's placeholder node without re-render\n    if (vm._vnode) {\n        // update child tree's parent\n        vm._vnode.parent = parentVnode;\n    }\n    vm.$options._renderChildren = renderChildren;\n    // update $attrs and $listeners hash\n    // these are also reactive so they may trigger child update if the child\n    // used them during render\n    var attrs = parentVnode.data.attrs || emptyObject;\n    if (vm._attrsProxy) {\n        // force update if attrs are accessed and has changed since it may be\n        // passed to a child component.\n        if (syncSetupProxy(vm._attrsProxy, attrs, (prevVNode.data && prevVNode.data.attrs) || emptyObject, vm, '$attrs')) {\n            needsForceUpdate = true;\n        }\n    }\n    vm.$attrs = attrs;\n    // update listeners\n    listeners = listeners || emptyObject;\n    var prevListeners = vm.$options._parentListeners;\n    if (vm._listenersProxy) {\n        syncSetupProxy(vm._listenersProxy, listeners, prevListeners || emptyObject, vm, '$listeners');\n    }\n    vm.$listeners = vm.$options._parentListeners = listeners;\n    updateComponentListeners(vm, listeners, prevListeners);\n    // update props\n    if (propsData && vm.$options.props) {\n        toggleObserving(false);\n        var props = vm._props;\n        var propKeys = vm.$options._propKeys || [];\n        for (var i = 0; i < propKeys.length; i++) {\n            var key = propKeys[i];\n            var propOptions = vm.$options.props; // wtf flow?\n            props[key] = validateProp(key, propOptions, propsData, vm);\n        }\n        toggleObserving(true);\n        // keep a copy of raw propsData\n        vm.$options.propsData = propsData;\n    }\n    // resolve slots + force update if has children\n    if (needsForceUpdate) {\n        vm.$slots = resolveSlots(renderChildren, parentVnode.context);\n        vm.$forceUpdate();\n    }\n    if (true) {\n        isUpdatingChildComponent = false;\n    }\n}\nfunction isInInactiveTree(vm) {\n    while (vm && (vm = vm.$parent)) {\n        if (vm._inactive)\n            return true;\n    }\n    return false;\n}\nfunction activateChildComponent(vm, direct) {\n    if (direct) {\n        vm._directInactive = false;\n        if (isInInactiveTree(vm)) {\n            return;\n        }\n    }\n    else if (vm._directInactive) {\n        return;\n    }\n    if (vm._inactive || vm._inactive === null) {\n        vm._inactive = false;\n        for (var i = 0; i < vm.$children.length; i++) {\n            activateChildComponent(vm.$children[i]);\n        }\n        callHook$1(vm, 'activated');\n    }\n}\nfunction deactivateChildComponent(vm, direct) {\n    if (direct) {\n        vm._directInactive = true;\n        if (isInInactiveTree(vm)) {\n            return;\n        }\n    }\n    if (!vm._inactive) {\n        vm._inactive = true;\n        for (var i = 0; i < vm.$children.length; i++) {\n            deactivateChildComponent(vm.$children[i]);\n        }\n        callHook$1(vm, 'deactivated');\n    }\n}\nfunction callHook$1(vm, hook, args, setContext) {\n    if (setContext === void 0) { setContext = true; }\n    // #7573 disable dep collection when invoking lifecycle hooks\n    pushTarget();\n    var prev = currentInstance;\n    setContext && setCurrentInstance(vm);\n    var handlers = vm.$options[hook];\n    var info = \"\".concat(hook, \" hook\");\n    if (handlers) {\n        for (var i = 0, j = handlers.length; i < j; i++) {\n            invokeWithErrorHandling(handlers[i], vm, args || null, vm, info);\n        }\n    }\n    if (vm._hasHookEvent) {\n        vm.$emit('hook:' + hook);\n    }\n    setContext && setCurrentInstance(prev);\n    popTarget();\n}\n\nvar MAX_UPDATE_COUNT = 100;\nvar queue = [];\nvar activatedChildren = [];\nvar has = {};\nvar circular = {};\nvar waiting = false;\nvar flushing = false;\nvar index$1 = 0;\n/**\n * Reset the scheduler's state.\n */\nfunction resetSchedulerState() {\n    index$1 = queue.length = activatedChildren.length = 0;\n    has = {};\n    if (true) {\n        circular = {};\n    }\n    waiting = flushing = false;\n}\n// Async edge case #6566 requires saving the timestamp when event listeners are\n// attached. However, calling performance.now() has a perf overhead especially\n// if the page has thousands of event listeners. Instead, we take a timestamp\n// every time the scheduler flushes and use that for all event listeners\n// attached during that flush.\nvar currentFlushTimestamp = 0;\n// Async edge case fix requires storing an event listener's attach timestamp.\nvar getNow = Date.now;\n// Determine what event timestamp the browser is using. Annoyingly, the\n// timestamp can either be hi-res (relative to page load) or low-res\n// (relative to UNIX epoch), so in order to compare time we have to use the\n// same timestamp type when saving the flush timestamp.\n// All IE versions use low-res event timestamps, and have problematic clock\n// implementations (#9632)\nif (inBrowser && !isIE) {\n    var performance_1 = window.performance;\n    if (performance_1 &&\n        typeof performance_1.now === 'function' &&\n        getNow() > document.createEvent('Event').timeStamp) {\n        // if the event timestamp, although evaluated AFTER the Date.now(), is\n        // smaller than it, it means the event is using a hi-res timestamp,\n        // and we need to use the hi-res version for event listener timestamps as\n        // well.\n        getNow = function () { return performance_1.now(); };\n    }\n}\nvar sortCompareFn = function (a, b) {\n    if (a.post) {\n        if (!b.post)\n            return 1;\n    }\n    else if (b.post) {\n        return -1;\n    }\n    return a.id - b.id;\n};\n/**\n * Flush both queues and run the watchers.\n */\nfunction flushSchedulerQueue() {\n    currentFlushTimestamp = getNow();\n    flushing = true;\n    var watcher, id;\n    // Sort queue before flush.\n    // This ensures that:\n    // 1. Components are updated from parent to child. (because parent is always\n    //    created before the child)\n    // 2. A component's user watchers are run before its render watcher (because\n    //    user watchers are created before the render watcher)\n    // 3. If a component is destroyed during a parent component's watcher run,\n    //    its watchers can be skipped.\n    queue.sort(sortCompareFn);\n    // do not cache length because more watchers might be pushed\n    // as we run existing watchers\n    for (index$1 = 0; index$1 < queue.length; index$1++) {\n        watcher = queue[index$1];\n        if (watcher.before) {\n            watcher.before();\n        }\n        id = watcher.id;\n        has[id] = null;\n        watcher.run();\n        // in dev build, check and stop circular updates.\n        if ( true && has[id] != null) {\n            circular[id] = (circular[id] || 0) + 1;\n            if (circular[id] > MAX_UPDATE_COUNT) {\n                warn$2('You may have an infinite update loop ' +\n                    (watcher.user\n                        ? \"in watcher with expression \\\"\".concat(watcher.expression, \"\\\"\")\n                        : \"in a component render function.\"), watcher.vm);\n                break;\n            }\n        }\n    }\n    // keep copies of post queues before resetting state\n    var activatedQueue = activatedChildren.slice();\n    var updatedQueue = queue.slice();\n    resetSchedulerState();\n    // call component updated and activated hooks\n    callActivatedHooks(activatedQueue);\n    callUpdatedHooks(updatedQueue);\n    cleanupDeps();\n    // devtool hook\n    /* istanbul ignore if */\n    if (devtools && config.devtools) {\n        devtools.emit('flush');\n    }\n}\nfunction callUpdatedHooks(queue) {\n    var i = queue.length;\n    while (i--) {\n        var watcher = queue[i];\n        var vm = watcher.vm;\n        if (vm && vm._watcher === watcher && vm._isMounted && !vm._isDestroyed) {\n            callHook$1(vm, 'updated');\n        }\n    }\n}\n/**\n * Queue a kept-alive component that was activated during patch.\n * The queue will be processed after the entire tree has been patched.\n */\nfunction queueActivatedComponent(vm) {\n    // setting _inactive to false here so that a render function can\n    // rely on checking whether it's in an inactive tree (e.g. router-view)\n    vm._inactive = false;\n    activatedChildren.push(vm);\n}\nfunction callActivatedHooks(queue) {\n    for (var i = 0; i < queue.length; i++) {\n        queue[i]._inactive = true;\n        activateChildComponent(queue[i], true /* true */);\n    }\n}\n/**\n * Push a watcher into the watcher queue.\n * Jobs with duplicate IDs will be skipped unless it's\n * pushed when the queue is being flushed.\n */\nfunction queueWatcher(watcher) {\n    var id = watcher.id;\n    if (has[id] != null) {\n        return;\n    }\n    if (watcher === Dep.target && watcher.noRecurse) {\n        return;\n    }\n    has[id] = true;\n    if (!flushing) {\n        queue.push(watcher);\n    }\n    else {\n        // if already flushing, splice the watcher based on its id\n        // if already past its id, it will be run next immediately.\n        var i = queue.length - 1;\n        while (i > index$1 && queue[i].id > watcher.id) {\n            i--;\n        }\n        queue.splice(i + 1, 0, watcher);\n    }\n    // queue the flush\n    if (!waiting) {\n        waiting = true;\n        if ( true && !config.async) {\n            flushSchedulerQueue();\n            return;\n        }\n        nextTick(flushSchedulerQueue);\n    }\n}\n\nvar WATCHER = \"watcher\";\nvar WATCHER_CB = \"\".concat(WATCHER, \" callback\");\nvar WATCHER_GETTER = \"\".concat(WATCHER, \" getter\");\nvar WATCHER_CLEANUP = \"\".concat(WATCHER, \" cleanup\");\n// Simple effect.\nfunction watchEffect(effect, options) {\n    return doWatch(effect, null, options);\n}\nfunction watchPostEffect(effect, options) {\n    return doWatch(effect, null, ( true\n        ? __assign(__assign({}, options), { flush: 'post' }) : 0));\n}\nfunction watchSyncEffect(effect, options) {\n    return doWatch(effect, null, ( true\n        ? __assign(__assign({}, options), { flush: 'sync' }) : 0));\n}\n// initial value for watchers to trigger on undefined initial values\nvar INITIAL_WATCHER_VALUE = {};\n// implementation\nfunction watch(source, cb, options) {\n    if ( true && typeof cb !== 'function') {\n        warn$2(\"`watch(fn, options?)` signature has been moved to a separate API. \" +\n            \"Use `watchEffect(fn, options?)` instead. `watch` now only \" +\n            \"supports `watch(source, cb, options?) signature.\");\n    }\n    return doWatch(source, cb, options);\n}\nfunction doWatch(source, cb, _a) {\n    var _b = _a === void 0 ? emptyObject : _a, immediate = _b.immediate, deep = _b.deep, _c = _b.flush, flush = _c === void 0 ? 'pre' : _c, onTrack = _b.onTrack, onTrigger = _b.onTrigger;\n    if ( true && !cb) {\n        if (immediate !== undefined) {\n            warn$2(\"watch() \\\"immediate\\\" option is only respected when using the \" +\n                \"watch(source, callback, options?) signature.\");\n        }\n        if (deep !== undefined) {\n            warn$2(\"watch() \\\"deep\\\" option is only respected when using the \" +\n                \"watch(source, callback, options?) signature.\");\n        }\n    }\n    var warnInvalidSource = function (s) {\n        warn$2(\"Invalid watch source: \".concat(s, \". A watch source can only be a getter/effect \") +\n            \"function, a ref, a reactive object, or an array of these types.\");\n    };\n    var instance = currentInstance;\n    var call = function (fn, type, args) {\n        if (args === void 0) { args = null; }\n        return invokeWithErrorHandling(fn, null, args, instance, type);\n    };\n    var getter;\n    var forceTrigger = false;\n    var isMultiSource = false;\n    if (isRef(source)) {\n        getter = function () { return source.value; };\n        forceTrigger = isShallow(source);\n    }\n    else if (isReactive(source)) {\n        getter = function () {\n            source.__ob__.dep.depend();\n            return source;\n        };\n        deep = true;\n    }\n    else if (isArray(source)) {\n        isMultiSource = true;\n        forceTrigger = source.some(function (s) { return isReactive(s) || isShallow(s); });\n        getter = function () {\n            return source.map(function (s) {\n                if (isRef(s)) {\n                    return s.value;\n                }\n                else if (isReactive(s)) {\n                    return traverse(s);\n                }\n                else if (isFunction(s)) {\n                    return call(s, WATCHER_GETTER);\n                }\n                else {\n                     true && warnInvalidSource(s);\n                }\n            });\n        };\n    }\n    else if (isFunction(source)) {\n        if (cb) {\n            // getter with cb\n            getter = function () { return call(source, WATCHER_GETTER); };\n        }\n        else {\n            // no cb -> simple effect\n            getter = function () {\n                if (instance && instance._isDestroyed) {\n                    return;\n                }\n                if (cleanup) {\n                    cleanup();\n                }\n                return call(source, WATCHER, [onCleanup]);\n            };\n        }\n    }\n    else {\n        getter = noop;\n         true && warnInvalidSource(source);\n    }\n    if (cb && deep) {\n        var baseGetter_1 = getter;\n        getter = function () { return traverse(baseGetter_1()); };\n    }\n    var cleanup;\n    var onCleanup = function (fn) {\n        cleanup = watcher.onStop = function () {\n            call(fn, WATCHER_CLEANUP);\n        };\n    };\n    // in SSR there is no need to setup an actual effect, and it should be noop\n    // unless it's eager\n    if (isServerRendering()) {\n        // we will also not call the invalidate callback (+ runner is not set up)\n        onCleanup = noop;\n        if (!cb) {\n            getter();\n        }\n        else if (immediate) {\n            call(cb, WATCHER_CB, [\n                getter(),\n                isMultiSource ? [] : undefined,\n                onCleanup\n            ]);\n        }\n        return noop;\n    }\n    var watcher = new Watcher(currentInstance, getter, noop, {\n        lazy: true\n    });\n    watcher.noRecurse = !cb;\n    var oldValue = isMultiSource ? [] : INITIAL_WATCHER_VALUE;\n    // overwrite default run\n    watcher.run = function () {\n        if (!watcher.active) {\n            return;\n        }\n        if (cb) {\n            // watch(source, cb)\n            var newValue = watcher.get();\n            if (deep ||\n                forceTrigger ||\n                (isMultiSource\n                    ? newValue.some(function (v, i) {\n                        return hasChanged(v, oldValue[i]);\n                    })\n                    : hasChanged(newValue, oldValue))) {\n                // cleanup before running cb again\n                if (cleanup) {\n                    cleanup();\n                }\n                call(cb, WATCHER_CB, [\n                    newValue,\n                    // pass undefined as the old value when it's changed for the first time\n                    oldValue === INITIAL_WATCHER_VALUE ? undefined : oldValue,\n                    onCleanup\n                ]);\n                oldValue = newValue;\n            }\n        }\n        else {\n            // watchEffect\n            watcher.get();\n        }\n    };\n    if (flush === 'sync') {\n        watcher.update = watcher.run;\n    }\n    else if (flush === 'post') {\n        watcher.post = true;\n        watcher.update = function () { return queueWatcher(watcher); };\n    }\n    else {\n        // pre\n        watcher.update = function () {\n            if (instance && instance === currentInstance && !instance._isMounted) {\n                // pre-watcher triggered before\n                var buffer = instance._preWatchers || (instance._preWatchers = []);\n                if (buffer.indexOf(watcher) < 0)\n                    buffer.push(watcher);\n            }\n            else {\n                queueWatcher(watcher);\n            }\n        };\n    }\n    if (true) {\n        watcher.onTrack = onTrack;\n        watcher.onTrigger = onTrigger;\n    }\n    // initial run\n    if (cb) {\n        if (immediate) {\n            watcher.run();\n        }\n        else {\n            oldValue = watcher.get();\n        }\n    }\n    else if (flush === 'post' && instance) {\n        instance.$once('hook:mounted', function () { return watcher.get(); });\n    }\n    else {\n        watcher.get();\n    }\n    return function () {\n        watcher.teardown();\n    };\n}\n\nvar activeEffectScope;\nvar EffectScope = /** @class */ (function () {\n    function EffectScope(detached) {\n        if (detached === void 0) { detached = false; }\n        this.detached = detached;\n        /**\n         * @internal\n         */\n        this.active = true;\n        /**\n         * @internal\n         */\n        this.effects = [];\n        /**\n         * @internal\n         */\n        this.cleanups = [];\n        this.parent = activeEffectScope;\n        if (!detached && activeEffectScope) {\n            this.index =\n                (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push(this) - 1;\n        }\n    }\n    EffectScope.prototype.run = function (fn) {\n        if (this.active) {\n            var currentEffectScope = activeEffectScope;\n            try {\n                activeEffectScope = this;\n                return fn();\n            }\n            finally {\n                activeEffectScope = currentEffectScope;\n            }\n        }\n        else if (true) {\n            warn$2(\"cannot run an inactive effect scope.\");\n        }\n    };\n    /**\n     * This should only be called on non-detached scopes\n     * @internal\n     */\n    EffectScope.prototype.on = function () {\n        activeEffectScope = this;\n    };\n    /**\n     * This should only be called on non-detached scopes\n     * @internal\n     */\n    EffectScope.prototype.off = function () {\n        activeEffectScope = this.parent;\n    };\n    EffectScope.prototype.stop = function (fromParent) {\n        if (this.active) {\n            var i = void 0, l = void 0;\n            for (i = 0, l = this.effects.length; i < l; i++) {\n                this.effects[i].teardown();\n            }\n            for (i = 0, l = this.cleanups.length; i < l; i++) {\n                this.cleanups[i]();\n            }\n            if (this.scopes) {\n                for (i = 0, l = this.scopes.length; i < l; i++) {\n                    this.scopes[i].stop(true);\n                }\n            }\n            // nested scope, dereference from parent to avoid memory leaks\n            if (!this.detached && this.parent && !fromParent) {\n                // optimized O(1) removal\n                var last = this.parent.scopes.pop();\n                if (last && last !== this) {\n                    this.parent.scopes[this.index] = last;\n                    last.index = this.index;\n                }\n            }\n            this.parent = undefined;\n            this.active = false;\n        }\n    };\n    return EffectScope;\n}());\nfunction effectScope(detached) {\n    return new EffectScope(detached);\n}\n/**\n * @internal\n */\nfunction recordEffectScope(effect, scope) {\n    if (scope === void 0) { scope = activeEffectScope; }\n    if (scope && scope.active) {\n        scope.effects.push(effect);\n    }\n}\nfunction getCurrentScope() {\n    return activeEffectScope;\n}\nfunction onScopeDispose(fn) {\n    if (activeEffectScope) {\n        activeEffectScope.cleanups.push(fn);\n    }\n    else if (true) {\n        warn$2(\"onScopeDispose() is called when there is no active effect scope\" +\n            \" to be associated with.\");\n    }\n}\n\nfunction provide(key, value) {\n    if (!currentInstance) {\n        if (true) {\n            warn$2(\"provide() can only be used inside setup().\");\n        }\n    }\n    else {\n        // TS doesn't allow symbol as index type\n        resolveProvided(currentInstance)[key] = value;\n    }\n}\nfunction resolveProvided(vm) {\n    // by default an instance inherits its parent's provides object\n    // but when it needs to provide values of its own, it creates its\n    // own provides object using parent provides object as prototype.\n    // this way in `inject` we can simply look up injections from direct\n    // parent and let the prototype chain do the work.\n    var existing = vm._provided;\n    var parentProvides = vm.$parent && vm.$parent._provided;\n    if (parentProvides === existing) {\n        return (vm._provided = Object.create(parentProvides));\n    }\n    else {\n        return existing;\n    }\n}\nfunction inject(key, defaultValue, treatDefaultAsFactory) {\n    if (treatDefaultAsFactory === void 0) { treatDefaultAsFactory = false; }\n    // fallback to `currentRenderingInstance` so that this can be called in\n    // a functional component\n    var instance = currentInstance;\n    if (instance) {\n        // #2400\n        // to support `app.use` plugins,\n        // fallback to appContext's `provides` if the instance is at root\n        var provides = instance.$parent && instance.$parent._provided;\n        if (provides && key in provides) {\n            // TS doesn't allow symbol as index type\n            return provides[key];\n        }\n        else if (arguments.length > 1) {\n            return treatDefaultAsFactory && isFunction(defaultValue)\n                ? defaultValue.call(instance)\n                : defaultValue;\n        }\n        else if (true) {\n            warn$2(\"injection \\\"\".concat(String(key), \"\\\" not found.\"));\n        }\n    }\n    else if (true) {\n        warn$2(\"inject() can only be used inside setup() or functional components.\");\n    }\n}\n\n/**\n * @internal this function needs manual public type declaration because it relies\n * on previously manually authored types from Vue 2\n */\nfunction h(type, props, children) {\n    if (!currentInstance) {\n         true &&\n            warn$2(\"globally imported h() can only be invoked when there is an active \" +\n                \"component instance, e.g. synchronously in a component's render or setup function.\");\n    }\n    return createElement$1(currentInstance, type, props, children, 2, true);\n}\n\nfunction handleError(err, vm, info) {\n    // Deactivate deps tracking while processing error handler to avoid possible infinite rendering.\n    // See: https://github.com/vuejs/vuex/issues/1505\n    pushTarget();\n    try {\n        if (vm) {\n            var cur = vm;\n            while ((cur = cur.$parent)) {\n                var hooks = cur.$options.errorCaptured;\n                if (hooks) {\n                    for (var i = 0; i < hooks.length; i++) {\n                        try {\n                            var capture = hooks[i].call(cur, err, vm, info) === false;\n                            if (capture)\n                                return;\n                        }\n                        catch (e) {\n                            globalHandleError(e, cur, 'errorCaptured hook');\n                        }\n                    }\n                }\n            }\n        }\n        globalHandleError(err, vm, info);\n    }\n    finally {\n        popTarget();\n    }\n}\nfunction invokeWithErrorHandling(handler, context, args, vm, info) {\n    var res;\n    try {\n        res = args ? handler.apply(context, args) : handler.call(context);\n        if (res && !res._isVue && isPromise(res) && !res._handled) {\n            res.catch(function (e) { return handleError(e, vm, info + \" (Promise/async)\"); });\n            res._handled = true;\n        }\n    }\n    catch (e) {\n        handleError(e, vm, info);\n    }\n    return res;\n}\nfunction globalHandleError(err, vm, info) {\n    if (config.errorHandler) {\n        try {\n            return config.errorHandler.call(null, err, vm, info);\n        }\n        catch (e) {\n            // if the user intentionally throws the original error in the handler,\n            // do not log it twice\n            if (e !== err) {\n                logError(e, null, 'config.errorHandler');\n            }\n        }\n    }\n    logError(err, vm, info);\n}\nfunction logError(err, vm, info) {\n    if (true) {\n        warn$2(\"Error in \".concat(info, \": \\\"\").concat(err.toString(), \"\\\"\"), vm);\n    }\n    /* istanbul ignore else */\n    if (inBrowser && typeof console !== 'undefined') {\n        console.error(err);\n    }\n    else {\n        throw err;\n    }\n}\n\n/* globals MutationObserver */\nvar isUsingMicroTask = false;\nvar callbacks = [];\nvar pending = false;\nfunction flushCallbacks() {\n    pending = false;\n    var copies = callbacks.slice(0);\n    callbacks.length = 0;\n    for (var i = 0; i < copies.length; i++) {\n        copies[i]();\n    }\n}\n// Here we have async deferring wrappers using microtasks.\n// In 2.5 we used (macro) tasks (in combination with microtasks).\n// However, it has subtle problems when state is changed right before repaint\n// (e.g. #6813, out-in transitions).\n// Also, using (macro) tasks in event handler would cause some weird behaviors\n// that cannot be circumvented (e.g. #7109, #7153, #7546, #7834, #8109).\n// So we now use microtasks everywhere, again.\n// A major drawback of this tradeoff is that there are some scenarios\n// where microtasks have too high a priority and fire in between supposedly\n// sequential events (e.g. #4521, #6690, which have workarounds)\n// or even between bubbling of the same event (#6566).\nvar timerFunc;\n// The nextTick behavior leverages the microtask queue, which can be accessed\n// via either native Promise.then or MutationObserver.\n// MutationObserver has wider support, however it is seriously bugged in\n// UIWebView in iOS >= 9.3.3 when triggered in touch event handlers. It\n// completely stops working after triggering a few times... so, if native\n// Promise is available, we will use it:\n/* istanbul ignore next, $flow-disable-line */\nif (typeof Promise !== 'undefined' && isNative(Promise)) {\n    var p_1 = Promise.resolve();\n    timerFunc = function () {\n        p_1.then(flushCallbacks);\n        // In problematic UIWebViews, Promise.then doesn't completely break, but\n        // it can get stuck in a weird state where callbacks are pushed into the\n        // microtask queue but the queue isn't being flushed, until the browser\n        // needs to do some other work, e.g. handle a timer. Therefore we can\n        // \"force\" the microtask queue to be flushed by adding an empty timer.\n        if (isIOS)\n            setTimeout(noop);\n    };\n    isUsingMicroTask = true;\n}\nelse if (!isIE &&\n    typeof MutationObserver !== 'undefined' &&\n    (isNative(MutationObserver) ||\n        // PhantomJS and iOS 7.x\n        MutationObserver.toString() === '[object MutationObserverConstructor]')) {\n    // Use MutationObserver where native Promise is not available,\n    // e.g. PhantomJS, iOS7, Android 4.4\n    // (#6466 MutationObserver is unreliable in IE11)\n    var counter_1 = 1;\n    var observer = new MutationObserver(flushCallbacks);\n    var textNode_1 = document.createTextNode(String(counter_1));\n    observer.observe(textNode_1, {\n        characterData: true\n    });\n    timerFunc = function () {\n        counter_1 = (counter_1 + 1) % 2;\n        textNode_1.data = String(counter_1);\n    };\n    isUsingMicroTask = true;\n}\nelse if (typeof setImmediate !== 'undefined' && isNative(setImmediate)) {\n    // Fallback to setImmediate.\n    // Technically it leverages the (macro) task queue,\n    // but it is still a better choice than setTimeout.\n    timerFunc = function () {\n        setImmediate(flushCallbacks);\n    };\n}\nelse {\n    // Fallback to setTimeout.\n    timerFunc = function () {\n        setTimeout(flushCallbacks, 0);\n    };\n}\n/**\n * @internal\n */\nfunction nextTick(cb, ctx) {\n    var _resolve;\n    callbacks.push(function () {\n        if (cb) {\n            try {\n                cb.call(ctx);\n            }\n            catch (e) {\n                handleError(e, ctx, 'nextTick');\n            }\n        }\n        else if (_resolve) {\n            _resolve(ctx);\n        }\n    });\n    if (!pending) {\n        pending = true;\n        timerFunc();\n    }\n    // $flow-disable-line\n    if (!cb && typeof Promise !== 'undefined') {\n        return new Promise(function (resolve) {\n            _resolve = resolve;\n        });\n    }\n}\n\nfunction useCssModule(name) {\n    if (name === void 0) { name = '$style'; }\n    /* istanbul ignore else */\n    {\n        if (!currentInstance) {\n             true && warn$2(\"useCssModule must be called inside setup()\");\n            return emptyObject;\n        }\n        var mod = currentInstance[name];\n        if (!mod) {\n             true &&\n                warn$2(\"Current instance does not have CSS module named \\\"\".concat(name, \"\\\".\"));\n            return emptyObject;\n        }\n        return mod;\n    }\n}\n\n/**\n * Runtime helper for SFC's CSS variable injection feature.\n * @private\n */\nfunction useCssVars(getter) {\n    if (!inBrowser && !false)\n        return;\n    var instance = currentInstance;\n    if (!instance) {\n         true &&\n            warn$2(\"useCssVars is called without current active component instance.\");\n        return;\n    }\n    watchPostEffect(function () {\n        var el = instance.$el;\n        var vars = getter(instance, instance._setupProxy);\n        if (el && el.nodeType === 1) {\n            var style = el.style;\n            for (var key in vars) {\n                style.setProperty(\"--\".concat(key), vars[key]);\n            }\n        }\n    });\n}\n\n/**\n * v3-compatible async component API.\n * @internal the type is manually declared in <root>/types/v3-define-async-component.d.ts\n * because it relies on existing manual types\n */\nfunction defineAsyncComponent(source) {\n    if (isFunction(source)) {\n        source = { loader: source };\n    }\n    var loader = source.loader, loadingComponent = source.loadingComponent, errorComponent = source.errorComponent, _a = source.delay, delay = _a === void 0 ? 200 : _a, timeout = source.timeout, // undefined = never times out\n    _b = source.suspensible, // undefined = never times out\n    suspensible = _b === void 0 ? false : _b, // in Vue 3 default is true\n    userOnError = source.onError;\n    if ( true && suspensible) {\n        warn$2(\"The suspensiblbe option for async components is not supported in Vue2. It is ignored.\");\n    }\n    var pendingRequest = null;\n    var retries = 0;\n    var retry = function () {\n        retries++;\n        pendingRequest = null;\n        return load();\n    };\n    var load = function () {\n        var thisRequest;\n        return (pendingRequest ||\n            (thisRequest = pendingRequest =\n                loader()\n                    .catch(function (err) {\n                    err = err instanceof Error ? err : new Error(String(err));\n                    if (userOnError) {\n                        return new Promise(function (resolve, reject) {\n                            var userRetry = function () { return resolve(retry()); };\n                            var userFail = function () { return reject(err); };\n                            userOnError(err, userRetry, userFail, retries + 1);\n                        });\n                    }\n                    else {\n                        throw err;\n                    }\n                })\n                    .then(function (comp) {\n                    if (thisRequest !== pendingRequest && pendingRequest) {\n                        return pendingRequest;\n                    }\n                    if ( true && !comp) {\n                        warn$2(\"Async component loader resolved to undefined. \" +\n                            \"If you are using retry(), make sure to return its return value.\");\n                    }\n                    // interop module default\n                    if (comp &&\n                        (comp.__esModule || comp[Symbol.toStringTag] === 'Module')) {\n                        comp = comp.default;\n                    }\n                    if ( true && comp && !isObject(comp) && !isFunction(comp)) {\n                        throw new Error(\"Invalid async component load result: \".concat(comp));\n                    }\n                    return comp;\n                })));\n    };\n    return function () {\n        var component = load();\n        return {\n            component: component,\n            delay: delay,\n            timeout: timeout,\n            error: errorComponent,\n            loading: loadingComponent\n        };\n    };\n}\n\nfunction createLifeCycle(hookName) {\n    return function (fn, target) {\n        if (target === void 0) { target = currentInstance; }\n        if (!target) {\n             true &&\n                warn$2(\"\".concat(formatName(hookName), \" is called when there is no active component instance to be \") +\n                    \"associated with. \" +\n                    \"Lifecycle injection APIs can only be used during execution of setup().\");\n            return;\n        }\n        return injectHook(target, hookName, fn);\n    };\n}\nfunction formatName(name) {\n    if (name === 'beforeDestroy') {\n        name = 'beforeUnmount';\n    }\n    else if (name === 'destroyed') {\n        name = 'unmounted';\n    }\n    return \"on\".concat(name[0].toUpperCase() + name.slice(1));\n}\nfunction injectHook(instance, hookName, fn) {\n    var options = instance.$options;\n    options[hookName] = mergeLifecycleHook(options[hookName], fn);\n}\nvar onBeforeMount = createLifeCycle('beforeMount');\nvar onMounted = createLifeCycle('mounted');\nvar onBeforeUpdate = createLifeCycle('beforeUpdate');\nvar onUpdated = createLifeCycle('updated');\nvar onBeforeUnmount = createLifeCycle('beforeDestroy');\nvar onUnmounted = createLifeCycle('destroyed');\nvar onActivated = createLifeCycle('activated');\nvar onDeactivated = createLifeCycle('deactivated');\nvar onServerPrefetch = createLifeCycle('serverPrefetch');\nvar onRenderTracked = createLifeCycle('renderTracked');\nvar onRenderTriggered = createLifeCycle('renderTriggered');\nvar injectErrorCapturedHook = createLifeCycle('errorCaptured');\nfunction onErrorCaptured(hook, target) {\n    if (target === void 0) { target = currentInstance; }\n    injectErrorCapturedHook(hook, target);\n}\n\n/**\n * Note: also update dist/vue.runtime.mjs when adding new exports to this file.\n */\nvar version = '2.7.14';\n/**\n * @internal type is manually declared in <root>/types/v3-define-component.d.ts\n */\nfunction defineComponent(options) {\n    return options;\n}\n\nvar seenObjects = new _Set();\n/**\n * Recursively traverse an object to evoke all converted\n * getters, so that every nested property inside the object\n * is collected as a \"deep\" dependency.\n */\nfunction traverse(val) {\n    _traverse(val, seenObjects);\n    seenObjects.clear();\n    return val;\n}\nfunction _traverse(val, seen) {\n    var i, keys;\n    var isA = isArray(val);\n    if ((!isA && !isObject(val)) ||\n        val.__v_skip /* ReactiveFlags.SKIP */ ||\n        Object.isFrozen(val) ||\n        val instanceof VNode) {\n        return;\n    }\n    if (val.__ob__) {\n        var depId = val.__ob__.dep.id;\n        if (seen.has(depId)) {\n            return;\n        }\n        seen.add(depId);\n    }\n    if (isA) {\n        i = val.length;\n        while (i--)\n            _traverse(val[i], seen);\n    }\n    else if (isRef(val)) {\n        _traverse(val.value, seen);\n    }\n    else {\n        keys = Object.keys(val);\n        i = keys.length;\n        while (i--)\n            _traverse(val[keys[i]], seen);\n    }\n}\n\nvar uid$1 = 0;\n/**\n * A watcher parses an expression, collects dependencies,\n * and fires callback when the expression value changes.\n * This is used for both the $watch() api and directives.\n * @internal\n */\nvar Watcher = /** @class */ (function () {\n    function Watcher(vm, expOrFn, cb, options, isRenderWatcher) {\n        recordEffectScope(this, \n        // if the active effect scope is manually created (not a component scope),\n        // prioritize it\n        activeEffectScope && !activeEffectScope._vm\n            ? activeEffectScope\n            : vm\n                ? vm._scope\n                : undefined);\n        if ((this.vm = vm) && isRenderWatcher) {\n            vm._watcher = this;\n        }\n        // options\n        if (options) {\n            this.deep = !!options.deep;\n            this.user = !!options.user;\n            this.lazy = !!options.lazy;\n            this.sync = !!options.sync;\n            this.before = options.before;\n            if (true) {\n                this.onTrack = options.onTrack;\n                this.onTrigger = options.onTrigger;\n            }\n        }\n        else {\n            this.deep = this.user = this.lazy = this.sync = false;\n        }\n        this.cb = cb;\n        this.id = ++uid$1; // uid for batching\n        this.active = true;\n        this.post = false;\n        this.dirty = this.lazy; // for lazy watchers\n        this.deps = [];\n        this.newDeps = [];\n        this.depIds = new _Set();\n        this.newDepIds = new _Set();\n        this.expression =  true ? expOrFn.toString() : 0;\n        // parse expression for getter\n        if (isFunction(expOrFn)) {\n            this.getter = expOrFn;\n        }\n        else {\n            this.getter = parsePath(expOrFn);\n            if (!this.getter) {\n                this.getter = noop;\n                 true &&\n                    warn$2(\"Failed watching path: \\\"\".concat(expOrFn, \"\\\" \") +\n                        'Watcher only accepts simple dot-delimited paths. ' +\n                        'For full control, use a function instead.', vm);\n            }\n        }\n        this.value = this.lazy ? undefined : this.get();\n    }\n    /**\n     * Evaluate the getter, and re-collect dependencies.\n     */\n    Watcher.prototype.get = function () {\n        pushTarget(this);\n        var value;\n        var vm = this.vm;\n        try {\n            value = this.getter.call(vm, vm);\n        }\n        catch (e) {\n            if (this.user) {\n                handleError(e, vm, \"getter for watcher \\\"\".concat(this.expression, \"\\\"\"));\n            }\n            else {\n                throw e;\n            }\n        }\n        finally {\n            // \"touch\" every property so they are all tracked as\n            // dependencies for deep watching\n            if (this.deep) {\n                traverse(value);\n            }\n            popTarget();\n            this.cleanupDeps();\n        }\n        return value;\n    };\n    /**\n     * Add a dependency to this directive.\n     */\n    Watcher.prototype.addDep = function (dep) {\n        var id = dep.id;\n        if (!this.newDepIds.has(id)) {\n            this.newDepIds.add(id);\n            this.newDeps.push(dep);\n            if (!this.depIds.has(id)) {\n                dep.addSub(this);\n            }\n        }\n    };\n    /**\n     * Clean up for dependency collection.\n     */\n    Watcher.prototype.cleanupDeps = function () {\n        var i = this.deps.length;\n        while (i--) {\n            var dep = this.deps[i];\n            if (!this.newDepIds.has(dep.id)) {\n                dep.removeSub(this);\n            }\n        }\n        var tmp = this.depIds;\n        this.depIds = this.newDepIds;\n        this.newDepIds = tmp;\n        this.newDepIds.clear();\n        tmp = this.deps;\n        this.deps = this.newDeps;\n        this.newDeps = tmp;\n        this.newDeps.length = 0;\n    };\n    /**\n     * Subscriber interface.\n     * Will be called when a dependency changes.\n     */\n    Watcher.prototype.update = function () {\n        /* istanbul ignore else */\n        if (this.lazy) {\n            this.dirty = true;\n        }\n        else if (this.sync) {\n            this.run();\n        }\n        else {\n            queueWatcher(this);\n        }\n    };\n    /**\n     * Scheduler job interface.\n     * Will be called by the scheduler.\n     */\n    Watcher.prototype.run = function () {\n        if (this.active) {\n            var value = this.get();\n            if (value !== this.value ||\n                // Deep watchers and watchers on Object/Arrays should fire even\n                // when the value is the same, because the value may\n                // have mutated.\n                isObject(value) ||\n                this.deep) {\n                // set new value\n                var oldValue = this.value;\n                this.value = value;\n                if (this.user) {\n                    var info = \"callback for watcher \\\"\".concat(this.expression, \"\\\"\");\n                    invokeWithErrorHandling(this.cb, this.vm, [value, oldValue], this.vm, info);\n                }\n                else {\n                    this.cb.call(this.vm, value, oldValue);\n                }\n            }\n        }\n    };\n    /**\n     * Evaluate the value of the watcher.\n     * This only gets called for lazy watchers.\n     */\n    Watcher.prototype.evaluate = function () {\n        this.value = this.get();\n        this.dirty = false;\n    };\n    /**\n     * Depend on all deps collected by this watcher.\n     */\n    Watcher.prototype.depend = function () {\n        var i = this.deps.length;\n        while (i--) {\n            this.deps[i].depend();\n        }\n    };\n    /**\n     * Remove self from all dependencies' subscriber list.\n     */\n    Watcher.prototype.teardown = function () {\n        if (this.vm && !this.vm._isBeingDestroyed) {\n            remove$2(this.vm._scope.effects, this);\n        }\n        if (this.active) {\n            var i = this.deps.length;\n            while (i--) {\n                this.deps[i].removeSub(this);\n            }\n            this.active = false;\n            if (this.onStop) {\n                this.onStop();\n            }\n        }\n    };\n    return Watcher;\n}());\n\nvar sharedPropertyDefinition = {\n    enumerable: true,\n    configurable: true,\n    get: noop,\n    set: noop\n};\nfunction proxy(target, sourceKey, key) {\n    sharedPropertyDefinition.get = function proxyGetter() {\n        return this[sourceKey][key];\n    };\n    sharedPropertyDefinition.set = function proxySetter(val) {\n        this[sourceKey][key] = val;\n    };\n    Object.defineProperty(target, key, sharedPropertyDefinition);\n}\nfunction initState(vm) {\n    var opts = vm.$options;\n    if (opts.props)\n        initProps$1(vm, opts.props);\n    // Composition API\n    initSetup(vm);\n    if (opts.methods)\n        initMethods(vm, opts.methods);\n    if (opts.data) {\n        initData(vm);\n    }\n    else {\n        var ob = observe((vm._data = {}));\n        ob && ob.vmCount++;\n    }\n    if (opts.computed)\n        initComputed$1(vm, opts.computed);\n    if (opts.watch && opts.watch !== nativeWatch) {\n        initWatch(vm, opts.watch);\n    }\n}\nfunction initProps$1(vm, propsOptions) {\n    var propsData = vm.$options.propsData || {};\n    var props = (vm._props = shallowReactive({}));\n    // cache prop keys so that future props updates can iterate using Array\n    // instead of dynamic object key enumeration.\n    var keys = (vm.$options._propKeys = []);\n    var isRoot = !vm.$parent;\n    // root instance props should be converted\n    if (!isRoot) {\n        toggleObserving(false);\n    }\n    var _loop_1 = function (key) {\n        keys.push(key);\n        var value = validateProp(key, propsOptions, propsData, vm);\n        /* istanbul ignore else */\n        if (true) {\n            var hyphenatedKey = hyphenate(key);\n            if (isReservedAttribute(hyphenatedKey) ||\n                config.isReservedAttr(hyphenatedKey)) {\n                warn$2(\"\\\"\".concat(hyphenatedKey, \"\\\" is a reserved attribute and cannot be used as component prop.\"), vm);\n            }\n            defineReactive(props, key, value, function () {\n                if (!isRoot && !isUpdatingChildComponent) {\n                    warn$2(\"Avoid mutating a prop directly since the value will be \" +\n                        \"overwritten whenever the parent component re-renders. \" +\n                        \"Instead, use a data or computed property based on the prop's \" +\n                        \"value. Prop being mutated: \\\"\".concat(key, \"\\\"\"), vm);\n                }\n            });\n        }\n        else {}\n        // static props are already proxied on the component's prototype\n        // during Vue.extend(). We only need to proxy props defined at\n        // instantiation here.\n        if (!(key in vm)) {\n            proxy(vm, \"_props\", key);\n        }\n    };\n    for (var key in propsOptions) {\n        _loop_1(key);\n    }\n    toggleObserving(true);\n}\nfunction initData(vm) {\n    var data = vm.$options.data;\n    data = vm._data = isFunction(data) ? getData(data, vm) : data || {};\n    if (!isPlainObject(data)) {\n        data = {};\n         true &&\n            warn$2('data functions should return an object:\\n' +\n                'https://v2.vuejs.org/v2/guide/components.html#data-Must-Be-a-Function', vm);\n    }\n    // proxy data on instance\n    var keys = Object.keys(data);\n    var props = vm.$options.props;\n    var methods = vm.$options.methods;\n    var i = keys.length;\n    while (i--) {\n        var key = keys[i];\n        if (true) {\n            if (methods && hasOwn(methods, key)) {\n                warn$2(\"Method \\\"\".concat(key, \"\\\" has already been defined as a data property.\"), vm);\n            }\n        }\n        if (props && hasOwn(props, key)) {\n             true &&\n                warn$2(\"The data property \\\"\".concat(key, \"\\\" is already declared as a prop. \") +\n                    \"Use prop default value instead.\", vm);\n        }\n        else if (!isReserved(key)) {\n            proxy(vm, \"_data\", key);\n        }\n    }\n    // observe data\n    var ob = observe(data);\n    ob && ob.vmCount++;\n}\nfunction getData(data, vm) {\n    // #7573 disable dep collection when invoking data getters\n    pushTarget();\n    try {\n        return data.call(vm, vm);\n    }\n    catch (e) {\n        handleError(e, vm, \"data()\");\n        return {};\n    }\n    finally {\n        popTarget();\n    }\n}\nvar computedWatcherOptions = { lazy: true };\nfunction initComputed$1(vm, computed) {\n    // $flow-disable-line\n    var watchers = (vm._computedWatchers = Object.create(null));\n    // computed properties are just getters during SSR\n    var isSSR = isServerRendering();\n    for (var key in computed) {\n        var userDef = computed[key];\n        var getter = isFunction(userDef) ? userDef : userDef.get;\n        if ( true && getter == null) {\n            warn$2(\"Getter is missing for computed property \\\"\".concat(key, \"\\\".\"), vm);\n        }\n        if (!isSSR) {\n            // create internal watcher for the computed property.\n            watchers[key] = new Watcher(vm, getter || noop, noop, computedWatcherOptions);\n        }\n        // component-defined computed properties are already defined on the\n        // component prototype. We only need to define computed properties defined\n        // at instantiation here.\n        if (!(key in vm)) {\n            defineComputed(vm, key, userDef);\n        }\n        else if (true) {\n            if (key in vm.$data) {\n                warn$2(\"The computed property \\\"\".concat(key, \"\\\" is already defined in data.\"), vm);\n            }\n            else if (vm.$options.props && key in vm.$options.props) {\n                warn$2(\"The computed property \\\"\".concat(key, \"\\\" is already defined as a prop.\"), vm);\n            }\n            else if (vm.$options.methods && key in vm.$options.methods) {\n                warn$2(\"The computed property \\\"\".concat(key, \"\\\" is already defined as a method.\"), vm);\n            }\n        }\n    }\n}\nfunction defineComputed(target, key, userDef) {\n    var shouldCache = !isServerRendering();\n    if (isFunction(userDef)) {\n        sharedPropertyDefinition.get = shouldCache\n            ? createComputedGetter(key)\n            : createGetterInvoker(userDef);\n        sharedPropertyDefinition.set = noop;\n    }\n    else {\n        sharedPropertyDefinition.get = userDef.get\n            ? shouldCache && userDef.cache !== false\n                ? createComputedGetter(key)\n                : createGetterInvoker(userDef.get)\n            : noop;\n        sharedPropertyDefinition.set = userDef.set || noop;\n    }\n    if ( true && sharedPropertyDefinition.set === noop) {\n        sharedPropertyDefinition.set = function () {\n            warn$2(\"Computed property \\\"\".concat(key, \"\\\" was assigned to but it has no setter.\"), this);\n        };\n    }\n    Object.defineProperty(target, key, sharedPropertyDefinition);\n}\nfunction createComputedGetter(key) {\n    return function computedGetter() {\n        var watcher = this._computedWatchers && this._computedWatchers[key];\n        if (watcher) {\n            if (watcher.dirty) {\n                watcher.evaluate();\n            }\n            if (Dep.target) {\n                if ( true && Dep.target.onTrack) {\n                    Dep.target.onTrack({\n                        effect: Dep.target,\n                        target: this,\n                        type: \"get\" /* TrackOpTypes.GET */,\n                        key: key\n                    });\n                }\n                watcher.depend();\n            }\n            return watcher.value;\n        }\n    };\n}\nfunction createGetterInvoker(fn) {\n    return function computedGetter() {\n        return fn.call(this, this);\n    };\n}\nfunction initMethods(vm, methods) {\n    var props = vm.$options.props;\n    for (var key in methods) {\n        if (true) {\n            if (typeof methods[key] !== 'function') {\n                warn$2(\"Method \\\"\".concat(key, \"\\\" has type \\\"\").concat(typeof methods[key], \"\\\" in the component definition. \") +\n                    \"Did you reference the function correctly?\", vm);\n            }\n            if (props && hasOwn(props, key)) {\n                warn$2(\"Method \\\"\".concat(key, \"\\\" has already been defined as a prop.\"), vm);\n            }\n            if (key in vm && isReserved(key)) {\n                warn$2(\"Method \\\"\".concat(key, \"\\\" conflicts with an existing Vue instance method. \") +\n                    \"Avoid defining component methods that start with _ or $.\");\n            }\n        }\n        vm[key] = typeof methods[key] !== 'function' ? noop : bind$1(methods[key], vm);\n    }\n}\nfunction initWatch(vm, watch) {\n    for (var key in watch) {\n        var handler = watch[key];\n        if (isArray(handler)) {\n            for (var i = 0; i < handler.length; i++) {\n                createWatcher(vm, key, handler[i]);\n            }\n        }\n        else {\n            createWatcher(vm, key, handler);\n        }\n    }\n}\nfunction createWatcher(vm, expOrFn, handler, options) {\n    if (isPlainObject(handler)) {\n        options = handler;\n        handler = handler.handler;\n    }\n    if (typeof handler === 'string') {\n        handler = vm[handler];\n    }\n    return vm.$watch(expOrFn, handler, options);\n}\nfunction stateMixin(Vue) {\n    // flow somehow has problems with directly declared definition object\n    // when using Object.defineProperty, so we have to procedurally build up\n    // the object here.\n    var dataDef = {};\n    dataDef.get = function () {\n        return this._data;\n    };\n    var propsDef = {};\n    propsDef.get = function () {\n        return this._props;\n    };\n    if (true) {\n        dataDef.set = function () {\n            warn$2('Avoid replacing instance root $data. ' +\n                'Use nested data properties instead.', this);\n        };\n        propsDef.set = function () {\n            warn$2(\"$props is readonly.\", this);\n        };\n    }\n    Object.defineProperty(Vue.prototype, '$data', dataDef);\n    Object.defineProperty(Vue.prototype, '$props', propsDef);\n    Vue.prototype.$set = set;\n    Vue.prototype.$delete = del;\n    Vue.prototype.$watch = function (expOrFn, cb, options) {\n        var vm = this;\n        if (isPlainObject(cb)) {\n            return createWatcher(vm, expOrFn, cb, options);\n        }\n        options = options || {};\n        options.user = true;\n        var watcher = new Watcher(vm, expOrFn, cb, options);\n        if (options.immediate) {\n            var info = \"callback for immediate watcher \\\"\".concat(watcher.expression, \"\\\"\");\n            pushTarget();\n            invokeWithErrorHandling(cb, vm, [watcher.value], vm, info);\n            popTarget();\n        }\n        return function unwatchFn() {\n            watcher.teardown();\n        };\n    };\n}\n\nfunction initProvide(vm) {\n    var provideOption = vm.$options.provide;\n    if (provideOption) {\n        var provided = isFunction(provideOption)\n            ? provideOption.call(vm)\n            : provideOption;\n        if (!isObject(provided)) {\n            return;\n        }\n        var source = resolveProvided(vm);\n        // IE9 doesn't support Object.getOwnPropertyDescriptors so we have to\n        // iterate the keys ourselves.\n        var keys = hasSymbol ? Reflect.ownKeys(provided) : Object.keys(provided);\n        for (var i = 0; i < keys.length; i++) {\n            var key = keys[i];\n            Object.defineProperty(source, key, Object.getOwnPropertyDescriptor(provided, key));\n        }\n    }\n}\nfunction initInjections(vm) {\n    var result = resolveInject(vm.$options.inject, vm);\n    if (result) {\n        toggleObserving(false);\n        Object.keys(result).forEach(function (key) {\n            /* istanbul ignore else */\n            if (true) {\n                defineReactive(vm, key, result[key], function () {\n                    warn$2(\"Avoid mutating an injected value directly since the changes will be \" +\n                        \"overwritten whenever the provided component re-renders. \" +\n                        \"injection being mutated: \\\"\".concat(key, \"\\\"\"), vm);\n                });\n            }\n            else {}\n        });\n        toggleObserving(true);\n    }\n}\nfunction resolveInject(inject, vm) {\n    if (inject) {\n        // inject is :any because flow is not smart enough to figure out cached\n        var result = Object.create(null);\n        var keys = hasSymbol ? Reflect.ownKeys(inject) : Object.keys(inject);\n        for (var i = 0; i < keys.length; i++) {\n            var key = keys[i];\n            // #6574 in case the inject object is observed...\n            if (key === '__ob__')\n                continue;\n            var provideKey = inject[key].from;\n            if (provideKey in vm._provided) {\n                result[key] = vm._provided[provideKey];\n            }\n            else if ('default' in inject[key]) {\n                var provideDefault = inject[key].default;\n                result[key] = isFunction(provideDefault)\n                    ? provideDefault.call(vm)\n                    : provideDefault;\n            }\n            else if (true) {\n                warn$2(\"Injection \\\"\".concat(key, \"\\\" not found\"), vm);\n            }\n        }\n        return result;\n    }\n}\n\nvar uid = 0;\nfunction initMixin$1(Vue) {\n    Vue.prototype._init = function (options) {\n        var vm = this;\n        // a uid\n        vm._uid = uid++;\n        var startTag, endTag;\n        /* istanbul ignore if */\n        if ( true && config.performance && mark) {\n            startTag = \"vue-perf-start:\".concat(vm._uid);\n            endTag = \"vue-perf-end:\".concat(vm._uid);\n            mark(startTag);\n        }\n        // a flag to mark this as a Vue instance without having to do instanceof\n        // check\n        vm._isVue = true;\n        // avoid instances from being observed\n        vm.__v_skip = true;\n        // effect scope\n        vm._scope = new EffectScope(true /* detached */);\n        vm._scope._vm = true;\n        // merge options\n        if (options && options._isComponent) {\n            // optimize internal component instantiation\n            // since dynamic options merging is pretty slow, and none of the\n            // internal component options needs special treatment.\n            initInternalComponent(vm, options);\n        }\n        else {\n            vm.$options = mergeOptions(resolveConstructorOptions(vm.constructor), options || {}, vm);\n        }\n        /* istanbul ignore else */\n        if (true) {\n            initProxy(vm);\n        }\n        else {}\n        // expose real self\n        vm._self = vm;\n        initLifecycle(vm);\n        initEvents(vm);\n        initRender(vm);\n        callHook$1(vm, 'beforeCreate', undefined, false /* setContext */);\n        initInjections(vm); // resolve injections before data/props\n        initState(vm);\n        initProvide(vm); // resolve provide after data/props\n        callHook$1(vm, 'created');\n        /* istanbul ignore if */\n        if ( true && config.performance && mark) {\n            vm._name = formatComponentName(vm, false);\n            mark(endTag);\n            measure(\"vue \".concat(vm._name, \" init\"), startTag, endTag);\n        }\n        if (vm.$options.el) {\n            vm.$mount(vm.$options.el);\n        }\n    };\n}\nfunction initInternalComponent(vm, options) {\n    var opts = (vm.$options = Object.create(vm.constructor.options));\n    // doing this because it's faster than dynamic enumeration.\n    var parentVnode = options._parentVnode;\n    opts.parent = options.parent;\n    opts._parentVnode = parentVnode;\n    var vnodeComponentOptions = parentVnode.componentOptions;\n    opts.propsData = vnodeComponentOptions.propsData;\n    opts._parentListeners = vnodeComponentOptions.listeners;\n    opts._renderChildren = vnodeComponentOptions.children;\n    opts._componentTag = vnodeComponentOptions.tag;\n    if (options.render) {\n        opts.render = options.render;\n        opts.staticRenderFns = options.staticRenderFns;\n    }\n}\nfunction resolveConstructorOptions(Ctor) {\n    var options = Ctor.options;\n    if (Ctor.super) {\n        var superOptions = resolveConstructorOptions(Ctor.super);\n        var cachedSuperOptions = Ctor.superOptions;\n        if (superOptions !== cachedSuperOptions) {\n            // super option changed,\n            // need to resolve new options.\n            Ctor.superOptions = superOptions;\n            // check if there are any late-modified/attached options (#4976)\n            var modifiedOptions = resolveModifiedOptions(Ctor);\n            // update base extend options\n            if (modifiedOptions) {\n                extend(Ctor.extendOptions, modifiedOptions);\n            }\n            options = Ctor.options = mergeOptions(superOptions, Ctor.extendOptions);\n            if (options.name) {\n                options.components[options.name] = Ctor;\n            }\n        }\n    }\n    return options;\n}\nfunction resolveModifiedOptions(Ctor) {\n    var modified;\n    var latest = Ctor.options;\n    var sealed = Ctor.sealedOptions;\n    for (var key in latest) {\n        if (latest[key] !== sealed[key]) {\n            if (!modified)\n                modified = {};\n            modified[key] = latest[key];\n        }\n    }\n    return modified;\n}\n\nfunction FunctionalRenderContext(data, props, children, parent, Ctor) {\n    var _this = this;\n    var options = Ctor.options;\n    // ensure the createElement function in functional components\n    // gets a unique context - this is necessary for correct named slot check\n    var contextVm;\n    if (hasOwn(parent, '_uid')) {\n        contextVm = Object.create(parent);\n        contextVm._original = parent;\n    }\n    else {\n        // the context vm passed in is a functional context as well.\n        // in this case we want to make sure we are able to get a hold to the\n        // real context instance.\n        contextVm = parent;\n        // @ts-ignore\n        parent = parent._original;\n    }\n    var isCompiled = isTrue(options._compiled);\n    var needNormalization = !isCompiled;\n    this.data = data;\n    this.props = props;\n    this.children = children;\n    this.parent = parent;\n    this.listeners = data.on || emptyObject;\n    this.injections = resolveInject(options.inject, parent);\n    this.slots = function () {\n        if (!_this.$slots) {\n            normalizeScopedSlots(parent, data.scopedSlots, (_this.$slots = resolveSlots(children, parent)));\n        }\n        return _this.$slots;\n    };\n    Object.defineProperty(this, 'scopedSlots', {\n        enumerable: true,\n        get: function () {\n            return normalizeScopedSlots(parent, data.scopedSlots, this.slots());\n        }\n    });\n    // support for compiled functional template\n    if (isCompiled) {\n        // exposing $options for renderStatic()\n        this.$options = options;\n        // pre-resolve slots for renderSlot()\n        this.$slots = this.slots();\n        this.$scopedSlots = normalizeScopedSlots(parent, data.scopedSlots, this.$slots);\n    }\n    if (options._scopeId) {\n        this._c = function (a, b, c, d) {\n            var vnode = createElement$1(contextVm, a, b, c, d, needNormalization);\n            if (vnode && !isArray(vnode)) {\n                vnode.fnScopeId = options._scopeId;\n                vnode.fnContext = parent;\n            }\n            return vnode;\n        };\n    }\n    else {\n        this._c = function (a, b, c, d) {\n            return createElement$1(contextVm, a, b, c, d, needNormalization);\n        };\n    }\n}\ninstallRenderHelpers(FunctionalRenderContext.prototype);\nfunction createFunctionalComponent(Ctor, propsData, data, contextVm, children) {\n    var options = Ctor.options;\n    var props = {};\n    var propOptions = options.props;\n    if (isDef(propOptions)) {\n        for (var key in propOptions) {\n            props[key] = validateProp(key, propOptions, propsData || emptyObject);\n        }\n    }\n    else {\n        if (isDef(data.attrs))\n            mergeProps(props, data.attrs);\n        if (isDef(data.props))\n            mergeProps(props, data.props);\n    }\n    var renderContext = new FunctionalRenderContext(data, props, children, contextVm, Ctor);\n    var vnode = options.render.call(null, renderContext._c, renderContext);\n    if (vnode instanceof VNode) {\n        return cloneAndMarkFunctionalResult(vnode, data, renderContext.parent, options, renderContext);\n    }\n    else if (isArray(vnode)) {\n        var vnodes = normalizeChildren(vnode) || [];\n        var res = new Array(vnodes.length);\n        for (var i = 0; i < vnodes.length; i++) {\n            res[i] = cloneAndMarkFunctionalResult(vnodes[i], data, renderContext.parent, options, renderContext);\n        }\n        return res;\n    }\n}\nfunction cloneAndMarkFunctionalResult(vnode, data, contextVm, options, renderContext) {\n    // #7817 clone node before setting fnContext, otherwise if the node is reused\n    // (e.g. it was from a cached normal slot) the fnContext causes named slots\n    // that should not be matched to match.\n    var clone = cloneVNode(vnode);\n    clone.fnContext = contextVm;\n    clone.fnOptions = options;\n    if (true) {\n        (clone.devtoolsMeta = clone.devtoolsMeta || {}).renderContext =\n            renderContext;\n    }\n    if (data.slot) {\n        (clone.data || (clone.data = {})).slot = data.slot;\n    }\n    return clone;\n}\nfunction mergeProps(to, from) {\n    for (var key in from) {\n        to[camelize(key)] = from[key];\n    }\n}\n\nfunction getComponentName(options) {\n    return options.name || options.__name || options._componentTag;\n}\n// inline hooks to be invoked on component VNodes during patch\nvar componentVNodeHooks = {\n    init: function (vnode, hydrating) {\n        if (vnode.componentInstance &&\n            !vnode.componentInstance._isDestroyed &&\n            vnode.data.keepAlive) {\n            // kept-alive components, treat as a patch\n            var mountedNode = vnode; // work around flow\n            componentVNodeHooks.prepatch(mountedNode, mountedNode);\n        }\n        else {\n            var child = (vnode.componentInstance = createComponentInstanceForVnode(vnode, activeInstance));\n            child.$mount(hydrating ? vnode.elm : undefined, hydrating);\n        }\n    },\n    prepatch: function (oldVnode, vnode) {\n        var options = vnode.componentOptions;\n        var child = (vnode.componentInstance = oldVnode.componentInstance);\n        updateChildComponent(child, options.propsData, // updated props\n        options.listeners, // updated listeners\n        vnode, // new parent vnode\n        options.children // new children\n        );\n    },\n    insert: function (vnode) {\n        var context = vnode.context, componentInstance = vnode.componentInstance;\n        if (!componentInstance._isMounted) {\n            componentInstance._isMounted = true;\n            callHook$1(componentInstance, 'mounted');\n        }\n        if (vnode.data.keepAlive) {\n            if (context._isMounted) {\n                // vue-router#1212\n                // During updates, a kept-alive component's child components may\n                // change, so directly walking the tree here may call activated hooks\n                // on incorrect children. Instead we push them into a queue which will\n                // be processed after the whole patch process ended.\n                queueActivatedComponent(componentInstance);\n            }\n            else {\n                activateChildComponent(componentInstance, true /* direct */);\n            }\n        }\n    },\n    destroy: function (vnode) {\n        var componentInstance = vnode.componentInstance;\n        if (!componentInstance._isDestroyed) {\n            if (!vnode.data.keepAlive) {\n                componentInstance.$destroy();\n            }\n            else {\n                deactivateChildComponent(componentInstance, true /* direct */);\n            }\n        }\n    }\n};\nvar hooksToMerge = Object.keys(componentVNodeHooks);\nfunction createComponent(Ctor, data, context, children, tag) {\n    if (isUndef(Ctor)) {\n        return;\n    }\n    var baseCtor = context.$options._base;\n    // plain options object: turn it into a constructor\n    if (isObject(Ctor)) {\n        Ctor = baseCtor.extend(Ctor);\n    }\n    // if at this stage it's not a constructor or an async component factory,\n    // reject.\n    if (typeof Ctor !== 'function') {\n        if (true) {\n            warn$2(\"Invalid Component definition: \".concat(String(Ctor)), context);\n        }\n        return;\n    }\n    // async component\n    var asyncFactory;\n    // @ts-expect-error\n    if (isUndef(Ctor.cid)) {\n        asyncFactory = Ctor;\n        Ctor = resolveAsyncComponent(asyncFactory, baseCtor);\n        if (Ctor === undefined) {\n            // return a placeholder node for async component, which is rendered\n            // as a comment node but preserves all the raw information for the node.\n            // the information will be used for async server-rendering and hydration.\n            return createAsyncPlaceholder(asyncFactory, data, context, children, tag);\n        }\n    }\n    data = data || {};\n    // resolve constructor options in case global mixins are applied after\n    // component constructor creation\n    resolveConstructorOptions(Ctor);\n    // transform component v-model data into props & events\n    if (isDef(data.model)) {\n        // @ts-expect-error\n        transformModel(Ctor.options, data);\n    }\n    // extract props\n    // @ts-expect-error\n    var propsData = extractPropsFromVNodeData(data, Ctor, tag);\n    // functional component\n    // @ts-expect-error\n    if (isTrue(Ctor.options.functional)) {\n        return createFunctionalComponent(Ctor, propsData, data, context, children);\n    }\n    // extract listeners, since these needs to be treated as\n    // child component listeners instead of DOM listeners\n    var listeners = data.on;\n    // replace with listeners with .native modifier\n    // so it gets processed during parent component patch.\n    data.on = data.nativeOn;\n    // @ts-expect-error\n    if (isTrue(Ctor.options.abstract)) {\n        // abstract components do not keep anything\n        // other than props & listeners & slot\n        // work around flow\n        var slot = data.slot;\n        data = {};\n        if (slot) {\n            data.slot = slot;\n        }\n    }\n    // install component management hooks onto the placeholder node\n    installComponentHooks(data);\n    // return a placeholder vnode\n    // @ts-expect-error\n    var name = getComponentName(Ctor.options) || tag;\n    var vnode = new VNode(\n    // @ts-expect-error\n    \"vue-component-\".concat(Ctor.cid).concat(name ? \"-\".concat(name) : ''), data, undefined, undefined, undefined, context, \n    // @ts-expect-error\n    { Ctor: Ctor, propsData: propsData, listeners: listeners, tag: tag, children: children }, asyncFactory);\n    return vnode;\n}\nfunction createComponentInstanceForVnode(\n// we know it's MountedComponentVNode but flow doesn't\nvnode, \n// activeInstance in lifecycle state\nparent) {\n    var options = {\n        _isComponent: true,\n        _parentVnode: vnode,\n        parent: parent\n    };\n    // check inline-template render functions\n    var inlineTemplate = vnode.data.inlineTemplate;\n    if (isDef(inlineTemplate)) {\n        options.render = inlineTemplate.render;\n        options.staticRenderFns = inlineTemplate.staticRenderFns;\n    }\n    return new vnode.componentOptions.Ctor(options);\n}\nfunction installComponentHooks(data) {\n    var hooks = data.hook || (data.hook = {});\n    for (var i = 0; i < hooksToMerge.length; i++) {\n        var key = hooksToMerge[i];\n        var existing = hooks[key];\n        var toMerge = componentVNodeHooks[key];\n        // @ts-expect-error\n        if (existing !== toMerge && !(existing && existing._merged)) {\n            hooks[key] = existing ? mergeHook(toMerge, existing) : toMerge;\n        }\n    }\n}\nfunction mergeHook(f1, f2) {\n    var merged = function (a, b) {\n        // flow complains about extra args which is why we use any\n        f1(a, b);\n        f2(a, b);\n    };\n    merged._merged = true;\n    return merged;\n}\n// transform component v-model info (value and callback) into\n// prop and event handler respectively.\nfunction transformModel(options, data) {\n    var prop = (options.model && options.model.prop) || 'value';\n    var event = (options.model && options.model.event) || 'input';\n    (data.attrs || (data.attrs = {}))[prop] = data.model.value;\n    var on = data.on || (data.on = {});\n    var existing = on[event];\n    var callback = data.model.callback;\n    if (isDef(existing)) {\n        if (isArray(existing)\n            ? existing.indexOf(callback) === -1\n            : existing !== callback) {\n            on[event] = [callback].concat(existing);\n        }\n    }\n    else {\n        on[event] = callback;\n    }\n}\n\nvar warn$2 = noop;\nvar tip = noop;\nvar generateComponentTrace; // work around flow check\nvar formatComponentName;\nif (true) {\n    var hasConsole_1 = typeof console !== 'undefined';\n    var classifyRE_1 = /(?:^|[-_])(\\w)/g;\n    var classify_1 = function (str) {\n        return str.replace(classifyRE_1, function (c) { return c.toUpperCase(); }).replace(/[-_]/g, '');\n    };\n    warn$2 = function (msg, vm) {\n        if (vm === void 0) { vm = currentInstance; }\n        var trace = vm ? generateComponentTrace(vm) : '';\n        if (config.warnHandler) {\n            config.warnHandler.call(null, msg, vm, trace);\n        }\n        else if (hasConsole_1 && !config.silent) {\n            console.error(\"[Vue warn]: \".concat(msg).concat(trace));\n        }\n    };\n    tip = function (msg, vm) {\n        if (hasConsole_1 && !config.silent) {\n            console.warn(\"[Vue tip]: \".concat(msg) + (vm ? generateComponentTrace(vm) : ''));\n        }\n    };\n    formatComponentName = function (vm, includeFile) {\n        if (vm.$root === vm) {\n            return '<Root>';\n        }\n        var options = isFunction(vm) && vm.cid != null\n            ? vm.options\n            : vm._isVue\n                ? vm.$options || vm.constructor.options\n                : vm;\n        var name = getComponentName(options);\n        var file = options.__file;\n        if (!name && file) {\n            var match = file.match(/([^/\\\\]+)\\.vue$/);\n            name = match && match[1];\n        }\n        return ((name ? \"<\".concat(classify_1(name), \">\") : \"<Anonymous>\") +\n            (file && includeFile !== false ? \" at \".concat(file) : ''));\n    };\n    var repeat_1 = function (str, n) {\n        var res = '';\n        while (n) {\n            if (n % 2 === 1)\n                res += str;\n            if (n > 1)\n                str += str;\n            n >>= 1;\n        }\n        return res;\n    };\n    generateComponentTrace = function (vm) {\n        if (vm._isVue && vm.$parent) {\n            var tree = [];\n            var currentRecursiveSequence = 0;\n            while (vm) {\n                if (tree.length > 0) {\n                    var last = tree[tree.length - 1];\n                    if (last.constructor === vm.constructor) {\n                        currentRecursiveSequence++;\n                        vm = vm.$parent;\n                        continue;\n                    }\n                    else if (currentRecursiveSequence > 0) {\n                        tree[tree.length - 1] = [last, currentRecursiveSequence];\n                        currentRecursiveSequence = 0;\n                    }\n                }\n                tree.push(vm);\n                vm = vm.$parent;\n            }\n            return ('\\n\\nfound in\\n\\n' +\n                tree\n                    .map(function (vm, i) {\n                    return \"\".concat(i === 0 ? '---> ' : repeat_1(' ', 5 + i * 2)).concat(isArray(vm)\n                        ? \"\".concat(formatComponentName(vm[0]), \"... (\").concat(vm[1], \" recursive calls)\")\n                        : formatComponentName(vm));\n                })\n                    .join('\\n'));\n        }\n        else {\n            return \"\\n\\n(found in \".concat(formatComponentName(vm), \")\");\n        }\n    };\n}\n\n/**\n * Option overwriting strategies are functions that handle\n * how to merge a parent option value and a child option\n * value into the final value.\n */\nvar strats = config.optionMergeStrategies;\n/**\n * Options with restrictions\n */\nif (true) {\n    strats.el = strats.propsData = function (parent, child, vm, key) {\n        if (!vm) {\n            warn$2(\"option \\\"\".concat(key, \"\\\" can only be used during instance \") +\n                'creation with the `new` keyword.');\n        }\n        return defaultStrat(parent, child);\n    };\n}\n/**\n * Helper that recursively merges two data objects together.\n */\nfunction mergeData(to, from, recursive) {\n    if (recursive === void 0) { recursive = true; }\n    if (!from)\n        return to;\n    var key, toVal, fromVal;\n    var keys = hasSymbol\n        ? Reflect.ownKeys(from)\n        : Object.keys(from);\n    for (var i = 0; i < keys.length; i++) {\n        key = keys[i];\n        // in case the object is already observed...\n        if (key === '__ob__')\n            continue;\n        toVal = to[key];\n        fromVal = from[key];\n        if (!recursive || !hasOwn(to, key)) {\n            set(to, key, fromVal);\n        }\n        else if (toVal !== fromVal &&\n            isPlainObject(toVal) &&\n            isPlainObject(fromVal)) {\n            mergeData(toVal, fromVal);\n        }\n    }\n    return to;\n}\n/**\n * Data\n */\nfunction mergeDataOrFn(parentVal, childVal, vm) {\n    if (!vm) {\n        // in a Vue.extend merge, both should be functions\n        if (!childVal) {\n            return parentVal;\n        }\n        if (!parentVal) {\n            return childVal;\n        }\n        // when parentVal & childVal are both present,\n        // we need to return a function that returns the\n        // merged result of both functions... no need to\n        // check if parentVal is a function here because\n        // it has to be a function to pass previous merges.\n        return function mergedDataFn() {\n            return mergeData(isFunction(childVal) ? childVal.call(this, this) : childVal, isFunction(parentVal) ? parentVal.call(this, this) : parentVal);\n        };\n    }\n    else {\n        return function mergedInstanceDataFn() {\n            // instance merge\n            var instanceData = isFunction(childVal)\n                ? childVal.call(vm, vm)\n                : childVal;\n            var defaultData = isFunction(parentVal)\n                ? parentVal.call(vm, vm)\n                : parentVal;\n            if (instanceData) {\n                return mergeData(instanceData, defaultData);\n            }\n            else {\n                return defaultData;\n            }\n        };\n    }\n}\nstrats.data = function (parentVal, childVal, vm) {\n    if (!vm) {\n        if (childVal && typeof childVal !== 'function') {\n             true &&\n                warn$2('The \"data\" option should be a function ' +\n                    'that returns a per-instance value in component ' +\n                    'definitions.', vm);\n            return parentVal;\n        }\n        return mergeDataOrFn(parentVal, childVal);\n    }\n    return mergeDataOrFn(parentVal, childVal, vm);\n};\n/**\n * Hooks and props are merged as arrays.\n */\nfunction mergeLifecycleHook(parentVal, childVal) {\n    var res = childVal\n        ? parentVal\n            ? parentVal.concat(childVal)\n            : isArray(childVal)\n                ? childVal\n                : [childVal]\n        : parentVal;\n    return res ? dedupeHooks(res) : res;\n}\nfunction dedupeHooks(hooks) {\n    var res = [];\n    for (var i = 0; i < hooks.length; i++) {\n        if (res.indexOf(hooks[i]) === -1) {\n            res.push(hooks[i]);\n        }\n    }\n    return res;\n}\nLIFECYCLE_HOOKS.forEach(function (hook) {\n    strats[hook] = mergeLifecycleHook;\n});\n/**\n * Assets\n *\n * When a vm is present (instance creation), we need to do\n * a three-way merge between constructor options, instance\n * options and parent options.\n */\nfunction mergeAssets(parentVal, childVal, vm, key) {\n    var res = Object.create(parentVal || null);\n    if (childVal) {\n         true && assertObjectType(key, childVal, vm);\n        return extend(res, childVal);\n    }\n    else {\n        return res;\n    }\n}\nASSET_TYPES.forEach(function (type) {\n    strats[type + 's'] = mergeAssets;\n});\n/**\n * Watchers.\n *\n * Watchers hashes should not overwrite one\n * another, so we merge them as arrays.\n */\nstrats.watch = function (parentVal, childVal, vm, key) {\n    // work around Firefox's Object.prototype.watch...\n    //@ts-expect-error work around\n    if (parentVal === nativeWatch)\n        parentVal = undefined;\n    //@ts-expect-error work around\n    if (childVal === nativeWatch)\n        childVal = undefined;\n    /* istanbul ignore if */\n    if (!childVal)\n        return Object.create(parentVal || null);\n    if (true) {\n        assertObjectType(key, childVal, vm);\n    }\n    if (!parentVal)\n        return childVal;\n    var ret = {};\n    extend(ret, parentVal);\n    for (var key_1 in childVal) {\n        var parent_1 = ret[key_1];\n        var child = childVal[key_1];\n        if (parent_1 && !isArray(parent_1)) {\n            parent_1 = [parent_1];\n        }\n        ret[key_1] = parent_1 ? parent_1.concat(child) : isArray(child) ? child : [child];\n    }\n    return ret;\n};\n/**\n * Other object hashes.\n */\nstrats.props =\n    strats.methods =\n        strats.inject =\n            strats.computed =\n                function (parentVal, childVal, vm, key) {\n                    if (childVal && \"development\" !== 'production') {\n                        assertObjectType(key, childVal, vm);\n                    }\n                    if (!parentVal)\n                        return childVal;\n                    var ret = Object.create(null);\n                    extend(ret, parentVal);\n                    if (childVal)\n                        extend(ret, childVal);\n                    return ret;\n                };\nstrats.provide = function (parentVal, childVal) {\n    if (!parentVal)\n        return childVal;\n    return function () {\n        var ret = Object.create(null);\n        mergeData(ret, isFunction(parentVal) ? parentVal.call(this) : parentVal);\n        if (childVal) {\n            mergeData(ret, isFunction(childVal) ? childVal.call(this) : childVal, false // non-recursive\n            );\n        }\n        return ret;\n    };\n};\n/**\n * Default strategy.\n */\nvar defaultStrat = function (parentVal, childVal) {\n    return childVal === undefined ? parentVal : childVal;\n};\n/**\n * Validate component names\n */\nfunction checkComponents(options) {\n    for (var key in options.components) {\n        validateComponentName(key);\n    }\n}\nfunction validateComponentName(name) {\n    if (!new RegExp(\"^[a-zA-Z][\\\\-\\\\.0-9_\".concat(unicodeRegExp.source, \"]*$\")).test(name)) {\n        warn$2('Invalid component name: \"' +\n            name +\n            '\". Component names ' +\n            'should conform to valid custom element name in html5 specification.');\n    }\n    if (isBuiltInTag(name) || config.isReservedTag(name)) {\n        warn$2('Do not use built-in or reserved HTML elements as component ' +\n            'id: ' +\n            name);\n    }\n}\n/**\n * Ensure all props option syntax are normalized into the\n * Object-based format.\n */\nfunction normalizeProps(options, vm) {\n    var props = options.props;\n    if (!props)\n        return;\n    var res = {};\n    var i, val, name;\n    if (isArray(props)) {\n        i = props.length;\n        while (i--) {\n            val = props[i];\n            if (typeof val === 'string') {\n                name = camelize(val);\n                res[name] = { type: null };\n            }\n            else if (true) {\n                warn$2('props must be strings when using array syntax.');\n            }\n        }\n    }\n    else if (isPlainObject(props)) {\n        for (var key in props) {\n            val = props[key];\n            name = camelize(key);\n            res[name] = isPlainObject(val) ? val : { type: val };\n        }\n    }\n    else if (true) {\n        warn$2(\"Invalid value for option \\\"props\\\": expected an Array or an Object, \" +\n            \"but got \".concat(toRawType(props), \".\"), vm);\n    }\n    options.props = res;\n}\n/**\n * Normalize all injections into Object-based format\n */\nfunction normalizeInject(options, vm) {\n    var inject = options.inject;\n    if (!inject)\n        return;\n    var normalized = (options.inject = {});\n    if (isArray(inject)) {\n        for (var i = 0; i < inject.length; i++) {\n            normalized[inject[i]] = { from: inject[i] };\n        }\n    }\n    else if (isPlainObject(inject)) {\n        for (var key in inject) {\n            var val = inject[key];\n            normalized[key] = isPlainObject(val)\n                ? extend({ from: key }, val)\n                : { from: val };\n        }\n    }\n    else if (true) {\n        warn$2(\"Invalid value for option \\\"inject\\\": expected an Array or an Object, \" +\n            \"but got \".concat(toRawType(inject), \".\"), vm);\n    }\n}\n/**\n * Normalize raw function directives into object format.\n */\nfunction normalizeDirectives$1(options) {\n    var dirs = options.directives;\n    if (dirs) {\n        for (var key in dirs) {\n            var def = dirs[key];\n            if (isFunction(def)) {\n                dirs[key] = { bind: def, update: def };\n            }\n        }\n    }\n}\nfunction assertObjectType(name, value, vm) {\n    if (!isPlainObject(value)) {\n        warn$2(\"Invalid value for option \\\"\".concat(name, \"\\\": expected an Object, \") +\n            \"but got \".concat(toRawType(value), \".\"), vm);\n    }\n}\n/**\n * Merge two option objects into a new one.\n * Core utility used in both instantiation and inheritance.\n */\nfunction mergeOptions(parent, child, vm) {\n    if (true) {\n        checkComponents(child);\n    }\n    if (isFunction(child)) {\n        // @ts-expect-error\n        child = child.options;\n    }\n    normalizeProps(child, vm);\n    normalizeInject(child, vm);\n    normalizeDirectives$1(child);\n    // Apply extends and mixins on the child options,\n    // but only if it is a raw options object that isn't\n    // the result of another mergeOptions call.\n    // Only merged options has the _base property.\n    if (!child._base) {\n        if (child.extends) {\n            parent = mergeOptions(parent, child.extends, vm);\n        }\n        if (child.mixins) {\n            for (var i = 0, l = child.mixins.length; i < l; i++) {\n                parent = mergeOptions(parent, child.mixins[i], vm);\n            }\n        }\n    }\n    var options = {};\n    var key;\n    for (key in parent) {\n        mergeField(key);\n    }\n    for (key in child) {\n        if (!hasOwn(parent, key)) {\n            mergeField(key);\n        }\n    }\n    function mergeField(key) {\n        var strat = strats[key] || defaultStrat;\n        options[key] = strat(parent[key], child[key], vm, key);\n    }\n    return options;\n}\n/**\n * Resolve an asset.\n * This function is used because child instances need access\n * to assets defined in its ancestor chain.\n */\nfunction resolveAsset(options, type, id, warnMissing) {\n    /* istanbul ignore if */\n    if (typeof id !== 'string') {\n        return;\n    }\n    var assets = options[type];\n    // check local registration variations first\n    if (hasOwn(assets, id))\n        return assets[id];\n    var camelizedId = camelize(id);\n    if (hasOwn(assets, camelizedId))\n        return assets[camelizedId];\n    var PascalCaseId = capitalize(camelizedId);\n    if (hasOwn(assets, PascalCaseId))\n        return assets[PascalCaseId];\n    // fallback to prototype chain\n    var res = assets[id] || assets[camelizedId] || assets[PascalCaseId];\n    if ( true && warnMissing && !res) {\n        warn$2('Failed to resolve ' + type.slice(0, -1) + ': ' + id);\n    }\n    return res;\n}\n\nfunction validateProp(key, propOptions, propsData, vm) {\n    var prop = propOptions[key];\n    var absent = !hasOwn(propsData, key);\n    var value = propsData[key];\n    // boolean casting\n    var booleanIndex = getTypeIndex(Boolean, prop.type);\n    if (booleanIndex > -1) {\n        if (absent && !hasOwn(prop, 'default')) {\n            value = false;\n        }\n        else if (value === '' || value === hyphenate(key)) {\n            // only cast empty string / same name to boolean if\n            // boolean has higher priority\n            var stringIndex = getTypeIndex(String, prop.type);\n            if (stringIndex < 0 || booleanIndex < stringIndex) {\n                value = true;\n            }\n        }\n    }\n    // check default value\n    if (value === undefined) {\n        value = getPropDefaultValue(vm, prop, key);\n        // since the default value is a fresh copy,\n        // make sure to observe it.\n        var prevShouldObserve = shouldObserve;\n        toggleObserving(true);\n        observe(value);\n        toggleObserving(prevShouldObserve);\n    }\n    if (true) {\n        assertProp(prop, key, value, vm, absent);\n    }\n    return value;\n}\n/**\n * Get the default value of a prop.\n */\nfunction getPropDefaultValue(vm, prop, key) {\n    // no default, return undefined\n    if (!hasOwn(prop, 'default')) {\n        return undefined;\n    }\n    var def = prop.default;\n    // warn against non-factory defaults for Object & Array\n    if ( true && isObject(def)) {\n        warn$2('Invalid default value for prop \"' +\n            key +\n            '\": ' +\n            'Props with type Object/Array must use a factory function ' +\n            'to return the default value.', vm);\n    }\n    // the raw prop value was also undefined from previous render,\n    // return previous default value to avoid unnecessary watcher trigger\n    if (vm &&\n        vm.$options.propsData &&\n        vm.$options.propsData[key] === undefined &&\n        vm._props[key] !== undefined) {\n        return vm._props[key];\n    }\n    // call factory function for non-Function types\n    // a value is Function if its prototype is function even across different execution context\n    return isFunction(def) && getType(prop.type) !== 'Function'\n        ? def.call(vm)\n        : def;\n}\n/**\n * Assert whether a prop is valid.\n */\nfunction assertProp(prop, name, value, vm, absent) {\n    if (prop.required && absent) {\n        warn$2('Missing required prop: \"' + name + '\"', vm);\n        return;\n    }\n    if (value == null && !prop.required) {\n        return;\n    }\n    var type = prop.type;\n    var valid = !type || type === true;\n    var expectedTypes = [];\n    if (type) {\n        if (!isArray(type)) {\n            type = [type];\n        }\n        for (var i = 0; i < type.length && !valid; i++) {\n            var assertedType = assertType(value, type[i], vm);\n            expectedTypes.push(assertedType.expectedType || '');\n            valid = assertedType.valid;\n        }\n    }\n    var haveExpectedTypes = expectedTypes.some(function (t) { return t; });\n    if (!valid && haveExpectedTypes) {\n        warn$2(getInvalidTypeMessage(name, value, expectedTypes), vm);\n        return;\n    }\n    var validator = prop.validator;\n    if (validator) {\n        if (!validator(value)) {\n            warn$2('Invalid prop: custom validator check failed for prop \"' + name + '\".', vm);\n        }\n    }\n}\nvar simpleCheckRE = /^(String|Number|Boolean|Function|Symbol|BigInt)$/;\nfunction assertType(value, type, vm) {\n    var valid;\n    var expectedType = getType(type);\n    if (simpleCheckRE.test(expectedType)) {\n        var t = typeof value;\n        valid = t === expectedType.toLowerCase();\n        // for primitive wrapper objects\n        if (!valid && t === 'object') {\n            valid = value instanceof type;\n        }\n    }\n    else if (expectedType === 'Object') {\n        valid = isPlainObject(value);\n    }\n    else if (expectedType === 'Array') {\n        valid = isArray(value);\n    }\n    else {\n        try {\n            valid = value instanceof type;\n        }\n        catch (e) {\n            warn$2('Invalid prop type: \"' + String(type) + '\" is not a constructor', vm);\n            valid = false;\n        }\n    }\n    return {\n        valid: valid,\n        expectedType: expectedType\n    };\n}\nvar functionTypeCheckRE = /^\\s*function (\\w+)/;\n/**\n * Use function string name to check built-in types,\n * because a simple equality check will fail when running\n * across different vms / iframes.\n */\nfunction getType(fn) {\n    var match = fn && fn.toString().match(functionTypeCheckRE);\n    return match ? match[1] : '';\n}\nfunction isSameType(a, b) {\n    return getType(a) === getType(b);\n}\nfunction getTypeIndex(type, expectedTypes) {\n    if (!isArray(expectedTypes)) {\n        return isSameType(expectedTypes, type) ? 0 : -1;\n    }\n    for (var i = 0, len = expectedTypes.length; i < len; i++) {\n        if (isSameType(expectedTypes[i], type)) {\n            return i;\n        }\n    }\n    return -1;\n}\nfunction getInvalidTypeMessage(name, value, expectedTypes) {\n    var message = \"Invalid prop: type check failed for prop \\\"\".concat(name, \"\\\".\") +\n        \" Expected \".concat(expectedTypes.map(capitalize).join(', '));\n    var expectedType = expectedTypes[0];\n    var receivedType = toRawType(value);\n    // check if we need to specify expected value\n    if (expectedTypes.length === 1 &&\n        isExplicable(expectedType) &&\n        isExplicable(typeof value) &&\n        !isBoolean(expectedType, receivedType)) {\n        message += \" with value \".concat(styleValue(value, expectedType));\n    }\n    message += \", got \".concat(receivedType, \" \");\n    // check if we need to specify received value\n    if (isExplicable(receivedType)) {\n        message += \"with value \".concat(styleValue(value, receivedType), \".\");\n    }\n    return message;\n}\nfunction styleValue(value, type) {\n    if (type === 'String') {\n        return \"\\\"\".concat(value, \"\\\"\");\n    }\n    else if (type === 'Number') {\n        return \"\".concat(Number(value));\n    }\n    else {\n        return \"\".concat(value);\n    }\n}\nvar EXPLICABLE_TYPES = ['string', 'number', 'boolean'];\nfunction isExplicable(value) {\n    return EXPLICABLE_TYPES.some(function (elem) { return value.toLowerCase() === elem; });\n}\nfunction isBoolean() {\n    var args = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n        args[_i] = arguments[_i];\n    }\n    return args.some(function (elem) { return elem.toLowerCase() === 'boolean'; });\n}\n\nfunction Vue(options) {\n    if ( true && !(this instanceof Vue)) {\n        warn$2('Vue is a constructor and should be called with the `new` keyword');\n    }\n    this._init(options);\n}\n//@ts-expect-error Vue has function type\ninitMixin$1(Vue);\n//@ts-expect-error Vue has function type\nstateMixin(Vue);\n//@ts-expect-error Vue has function type\neventsMixin(Vue);\n//@ts-expect-error Vue has function type\nlifecycleMixin(Vue);\n//@ts-expect-error Vue has function type\nrenderMixin(Vue);\n\nfunction initUse(Vue) {\n    Vue.use = function (plugin) {\n        var installedPlugins = this._installedPlugins || (this._installedPlugins = []);\n        if (installedPlugins.indexOf(plugin) > -1) {\n            return this;\n        }\n        // additional parameters\n        var args = toArray(arguments, 1);\n        args.unshift(this);\n        if (isFunction(plugin.install)) {\n            plugin.install.apply(plugin, args);\n        }\n        else if (isFunction(plugin)) {\n            plugin.apply(null, args);\n        }\n        installedPlugins.push(plugin);\n        return this;\n    };\n}\n\nfunction initMixin(Vue) {\n    Vue.mixin = function (mixin) {\n        this.options = mergeOptions(this.options, mixin);\n        return this;\n    };\n}\n\nfunction initExtend(Vue) {\n    /**\n     * Each instance constructor, including Vue, has a unique\n     * cid. This enables us to create wrapped \"child\n     * constructors\" for prototypal inheritance and cache them.\n     */\n    Vue.cid = 0;\n    var cid = 1;\n    /**\n     * Class inheritance\n     */\n    Vue.extend = function (extendOptions) {\n        extendOptions = extendOptions || {};\n        var Super = this;\n        var SuperId = Super.cid;\n        var cachedCtors = extendOptions._Ctor || (extendOptions._Ctor = {});\n        if (cachedCtors[SuperId]) {\n            return cachedCtors[SuperId];\n        }\n        var name = getComponentName(extendOptions) || getComponentName(Super.options);\n        if ( true && name) {\n            validateComponentName(name);\n        }\n        var Sub = function VueComponent(options) {\n            this._init(options);\n        };\n        Sub.prototype = Object.create(Super.prototype);\n        Sub.prototype.constructor = Sub;\n        Sub.cid = cid++;\n        Sub.options = mergeOptions(Super.options, extendOptions);\n        Sub['super'] = Super;\n        // For props and computed properties, we define the proxy getters on\n        // the Vue instances at extension time, on the extended prototype. This\n        // avoids Object.defineProperty calls for each instance created.\n        if (Sub.options.props) {\n            initProps(Sub);\n        }\n        if (Sub.options.computed) {\n            initComputed(Sub);\n        }\n        // allow further extension/mixin/plugin usage\n        Sub.extend = Super.extend;\n        Sub.mixin = Super.mixin;\n        Sub.use = Super.use;\n        // create asset registers, so extended classes\n        // can have their private assets too.\n        ASSET_TYPES.forEach(function (type) {\n            Sub[type] = Super[type];\n        });\n        // enable recursive self-lookup\n        if (name) {\n            Sub.options.components[name] = Sub;\n        }\n        // keep a reference to the super options at extension time.\n        // later at instantiation we can check if Super's options have\n        // been updated.\n        Sub.superOptions = Super.options;\n        Sub.extendOptions = extendOptions;\n        Sub.sealedOptions = extend({}, Sub.options);\n        // cache constructor\n        cachedCtors[SuperId] = Sub;\n        return Sub;\n    };\n}\nfunction initProps(Comp) {\n    var props = Comp.options.props;\n    for (var key in props) {\n        proxy(Comp.prototype, \"_props\", key);\n    }\n}\nfunction initComputed(Comp) {\n    var computed = Comp.options.computed;\n    for (var key in computed) {\n        defineComputed(Comp.prototype, key, computed[key]);\n    }\n}\n\nfunction initAssetRegisters(Vue) {\n    /**\n     * Create asset registration methods.\n     */\n    ASSET_TYPES.forEach(function (type) {\n        // @ts-expect-error function is not exact same type\n        Vue[type] = function (id, definition) {\n            if (!definition) {\n                return this.options[type + 's'][id];\n            }\n            else {\n                /* istanbul ignore if */\n                if ( true && type === 'component') {\n                    validateComponentName(id);\n                }\n                if (type === 'component' && isPlainObject(definition)) {\n                    // @ts-expect-error\n                    definition.name = definition.name || id;\n                    definition = this.options._base.extend(definition);\n                }\n                if (type === 'directive' && isFunction(definition)) {\n                    definition = { bind: definition, update: definition };\n                }\n                this.options[type + 's'][id] = definition;\n                return definition;\n            }\n        };\n    });\n}\n\nfunction _getComponentName(opts) {\n    return opts && (getComponentName(opts.Ctor.options) || opts.tag);\n}\nfunction matches(pattern, name) {\n    if (isArray(pattern)) {\n        return pattern.indexOf(name) > -1;\n    }\n    else if (typeof pattern === 'string') {\n        return pattern.split(',').indexOf(name) > -1;\n    }\n    else if (isRegExp(pattern)) {\n        return pattern.test(name);\n    }\n    /* istanbul ignore next */\n    return false;\n}\nfunction pruneCache(keepAliveInstance, filter) {\n    var cache = keepAliveInstance.cache, keys = keepAliveInstance.keys, _vnode = keepAliveInstance._vnode;\n    for (var key in cache) {\n        var entry = cache[key];\n        if (entry) {\n            var name_1 = entry.name;\n            if (name_1 && !filter(name_1)) {\n                pruneCacheEntry(cache, key, keys, _vnode);\n            }\n        }\n    }\n}\nfunction pruneCacheEntry(cache, key, keys, current) {\n    var entry = cache[key];\n    if (entry && (!current || entry.tag !== current.tag)) {\n        // @ts-expect-error can be undefined\n        entry.componentInstance.$destroy();\n    }\n    cache[key] = null;\n    remove$2(keys, key);\n}\nvar patternTypes = [String, RegExp, Array];\n// TODO defineComponent\nvar KeepAlive = {\n    name: 'keep-alive',\n    abstract: true,\n    props: {\n        include: patternTypes,\n        exclude: patternTypes,\n        max: [String, Number]\n    },\n    methods: {\n        cacheVNode: function () {\n            var _a = this, cache = _a.cache, keys = _a.keys, vnodeToCache = _a.vnodeToCache, keyToCache = _a.keyToCache;\n            if (vnodeToCache) {\n                var tag = vnodeToCache.tag, componentInstance = vnodeToCache.componentInstance, componentOptions = vnodeToCache.componentOptions;\n                cache[keyToCache] = {\n                    name: _getComponentName(componentOptions),\n                    tag: tag,\n                    componentInstance: componentInstance\n                };\n                keys.push(keyToCache);\n                // prune oldest entry\n                if (this.max && keys.length > parseInt(this.max)) {\n                    pruneCacheEntry(cache, keys[0], keys, this._vnode);\n                }\n                this.vnodeToCache = null;\n            }\n        }\n    },\n    created: function () {\n        this.cache = Object.create(null);\n        this.keys = [];\n    },\n    destroyed: function () {\n        for (var key in this.cache) {\n            pruneCacheEntry(this.cache, key, this.keys);\n        }\n    },\n    mounted: function () {\n        var _this = this;\n        this.cacheVNode();\n        this.$watch('include', function (val) {\n            pruneCache(_this, function (name) { return matches(val, name); });\n        });\n        this.$watch('exclude', function (val) {\n            pruneCache(_this, function (name) { return !matches(val, name); });\n        });\n    },\n    updated: function () {\n        this.cacheVNode();\n    },\n    render: function () {\n        var slot = this.$slots.default;\n        var vnode = getFirstComponentChild(slot);\n        var componentOptions = vnode && vnode.componentOptions;\n        if (componentOptions) {\n            // check pattern\n            var name_2 = _getComponentName(componentOptions);\n            var _a = this, include = _a.include, exclude = _a.exclude;\n            if (\n            // not included\n            (include && (!name_2 || !matches(include, name_2))) ||\n                // excluded\n                (exclude && name_2 && matches(exclude, name_2))) {\n                return vnode;\n            }\n            var _b = this, cache = _b.cache, keys = _b.keys;\n            var key = vnode.key == null\n                ? // same constructor may get registered as different local components\n                    // so cid alone is not enough (#3269)\n                    componentOptions.Ctor.cid +\n                        (componentOptions.tag ? \"::\".concat(componentOptions.tag) : '')\n                : vnode.key;\n            if (cache[key]) {\n                vnode.componentInstance = cache[key].componentInstance;\n                // make current key freshest\n                remove$2(keys, key);\n                keys.push(key);\n            }\n            else {\n                // delay setting the cache until update\n                this.vnodeToCache = vnode;\n                this.keyToCache = key;\n            }\n            // @ts-expect-error can vnode.data can be undefined\n            vnode.data.keepAlive = true;\n        }\n        return vnode || (slot && slot[0]);\n    }\n};\n\nvar builtInComponents = {\n    KeepAlive: KeepAlive\n};\n\nfunction initGlobalAPI(Vue) {\n    // config\n    var configDef = {};\n    configDef.get = function () { return config; };\n    if (true) {\n        configDef.set = function () {\n            warn$2('Do not replace the Vue.config object, set individual fields instead.');\n        };\n    }\n    Object.defineProperty(Vue, 'config', configDef);\n    // exposed util methods.\n    // NOTE: these are not considered part of the public API - avoid relying on\n    // them unless you are aware of the risk.\n    Vue.util = {\n        warn: warn$2,\n        extend: extend,\n        mergeOptions: mergeOptions,\n        defineReactive: defineReactive\n    };\n    Vue.set = set;\n    Vue.delete = del;\n    Vue.nextTick = nextTick;\n    // 2.6 explicit observable API\n    Vue.observable = function (obj) {\n        observe(obj);\n        return obj;\n    };\n    Vue.options = Object.create(null);\n    ASSET_TYPES.forEach(function (type) {\n        Vue.options[type + 's'] = Object.create(null);\n    });\n    // this is used to identify the \"base\" constructor to extend all plain-object\n    // components with in Weex's multi-instance scenarios.\n    Vue.options._base = Vue;\n    extend(Vue.options.components, builtInComponents);\n    initUse(Vue);\n    initMixin(Vue);\n    initExtend(Vue);\n    initAssetRegisters(Vue);\n}\n\ninitGlobalAPI(Vue);\nObject.defineProperty(Vue.prototype, '$isServer', {\n    get: isServerRendering\n});\nObject.defineProperty(Vue.prototype, '$ssrContext', {\n    get: function () {\n        /* istanbul ignore next */\n        return this.$vnode && this.$vnode.ssrContext;\n    }\n});\n// expose FunctionalRenderContext for ssr runtime helper installation\nObject.defineProperty(Vue, 'FunctionalRenderContext', {\n    value: FunctionalRenderContext\n});\nVue.version = version;\n\n// these are reserved for web because they are directly compiled away\n// during template compilation\nvar isReservedAttr = makeMap('style,class');\n// attributes that should be using props for binding\nvar acceptValue = makeMap('input,textarea,option,select,progress');\nvar mustUseProp = function (tag, type, attr) {\n    return ((attr === 'value' && acceptValue(tag) && type !== 'button') ||\n        (attr === 'selected' && tag === 'option') ||\n        (attr === 'checked' && tag === 'input') ||\n        (attr === 'muted' && tag === 'video'));\n};\nvar isEnumeratedAttr = makeMap('contenteditable,draggable,spellcheck');\nvar isValidContentEditableValue = makeMap('events,caret,typing,plaintext-only');\nvar convertEnumeratedValue = function (key, value) {\n    return isFalsyAttrValue(value) || value === 'false'\n        ? 'false'\n        : // allow arbitrary string value for contenteditable\n            key === 'contenteditable' && isValidContentEditableValue(value)\n                ? value\n                : 'true';\n};\nvar isBooleanAttr = makeMap('allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,' +\n    'default,defaultchecked,defaultmuted,defaultselected,defer,disabled,' +\n    'enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,' +\n    'muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,' +\n    'required,reversed,scoped,seamless,selected,sortable,' +\n    'truespeed,typemustmatch,visible');\nvar xlinkNS = 'http://www.w3.org/1999/xlink';\nvar isXlink = function (name) {\n    return name.charAt(5) === ':' && name.slice(0, 5) === 'xlink';\n};\nvar getXlinkProp = function (name) {\n    return isXlink(name) ? name.slice(6, name.length) : '';\n};\nvar isFalsyAttrValue = function (val) {\n    return val == null || val === false;\n};\n\nfunction genClassForVnode(vnode) {\n    var data = vnode.data;\n    var parentNode = vnode;\n    var childNode = vnode;\n    while (isDef(childNode.componentInstance)) {\n        childNode = childNode.componentInstance._vnode;\n        if (childNode && childNode.data) {\n            data = mergeClassData(childNode.data, data);\n        }\n    }\n    // @ts-expect-error parentNode.parent not VNodeWithData\n    while (isDef((parentNode = parentNode.parent))) {\n        if (parentNode && parentNode.data) {\n            data = mergeClassData(data, parentNode.data);\n        }\n    }\n    return renderClass(data.staticClass, data.class);\n}\nfunction mergeClassData(child, parent) {\n    return {\n        staticClass: concat(child.staticClass, parent.staticClass),\n        class: isDef(child.class) ? [child.class, parent.class] : parent.class\n    };\n}\nfunction renderClass(staticClass, dynamicClass) {\n    if (isDef(staticClass) || isDef(dynamicClass)) {\n        return concat(staticClass, stringifyClass(dynamicClass));\n    }\n    /* istanbul ignore next */\n    return '';\n}\nfunction concat(a, b) {\n    return a ? (b ? a + ' ' + b : a) : b || '';\n}\nfunction stringifyClass(value) {\n    if (Array.isArray(value)) {\n        return stringifyArray(value);\n    }\n    if (isObject(value)) {\n        return stringifyObject(value);\n    }\n    if (typeof value === 'string') {\n        return value;\n    }\n    /* istanbul ignore next */\n    return '';\n}\nfunction stringifyArray(value) {\n    var res = '';\n    var stringified;\n    for (var i = 0, l = value.length; i < l; i++) {\n        if (isDef((stringified = stringifyClass(value[i]))) && stringified !== '') {\n            if (res)\n                res += ' ';\n            res += stringified;\n        }\n    }\n    return res;\n}\nfunction stringifyObject(value) {\n    var res = '';\n    for (var key in value) {\n        if (value[key]) {\n            if (res)\n                res += ' ';\n            res += key;\n        }\n    }\n    return res;\n}\n\nvar namespaceMap = {\n    svg: 'http://www.w3.org/2000/svg',\n    math: 'http://www.w3.org/1998/Math/MathML'\n};\nvar isHTMLTag = makeMap('html,body,base,head,link,meta,style,title,' +\n    'address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,' +\n    'div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,' +\n    'a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,' +\n    's,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,' +\n    'embed,object,param,source,canvas,script,noscript,del,ins,' +\n    'caption,col,colgroup,table,thead,tbody,td,th,tr,' +\n    'button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,' +\n    'output,progress,select,textarea,' +\n    'details,dialog,menu,menuitem,summary,' +\n    'content,element,shadow,template,blockquote,iframe,tfoot');\n// this map is intentionally selective, only covering SVG elements that may\n// contain child elements.\nvar isSVG = makeMap('svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,' +\n    'foreignobject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,' +\n    'polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view', true);\nvar isPreTag = function (tag) { return tag === 'pre'; };\nvar isReservedTag = function (tag) {\n    return isHTMLTag(tag) || isSVG(tag);\n};\nfunction getTagNamespace(tag) {\n    if (isSVG(tag)) {\n        return 'svg';\n    }\n    // basic support for MathML\n    // note it doesn't support other MathML elements being component roots\n    if (tag === 'math') {\n        return 'math';\n    }\n}\nvar unknownElementCache = Object.create(null);\nfunction isUnknownElement(tag) {\n    /* istanbul ignore if */\n    if (!inBrowser) {\n        return true;\n    }\n    if (isReservedTag(tag)) {\n        return false;\n    }\n    tag = tag.toLowerCase();\n    /* istanbul ignore if */\n    if (unknownElementCache[tag] != null) {\n        return unknownElementCache[tag];\n    }\n    var el = document.createElement(tag);\n    if (tag.indexOf('-') > -1) {\n        // http://stackoverflow.com/a/28210364/1070244\n        return (unknownElementCache[tag] =\n            el.constructor === window.HTMLUnknownElement ||\n                el.constructor === window.HTMLElement);\n    }\n    else {\n        return (unknownElementCache[tag] = /HTMLUnknownElement/.test(el.toString()));\n    }\n}\nvar isTextInputType = makeMap('text,number,password,search,email,tel,url');\n\n/**\n * Query an element selector if it's not an element already.\n */\nfunction query(el) {\n    if (typeof el === 'string') {\n        var selected = document.querySelector(el);\n        if (!selected) {\n             true && warn$2('Cannot find element: ' + el);\n            return document.createElement('div');\n        }\n        return selected;\n    }\n    else {\n        return el;\n    }\n}\n\nfunction createElement(tagName, vnode) {\n    var elm = document.createElement(tagName);\n    if (tagName !== 'select') {\n        return elm;\n    }\n    // false or null will remove the attribute but undefined will not\n    if (vnode.data &&\n        vnode.data.attrs &&\n        vnode.data.attrs.multiple !== undefined) {\n        elm.setAttribute('multiple', 'multiple');\n    }\n    return elm;\n}\nfunction createElementNS(namespace, tagName) {\n    return document.createElementNS(namespaceMap[namespace], tagName);\n}\nfunction createTextNode(text) {\n    return document.createTextNode(text);\n}\nfunction createComment(text) {\n    return document.createComment(text);\n}\nfunction insertBefore(parentNode, newNode, referenceNode) {\n    parentNode.insertBefore(newNode, referenceNode);\n}\nfunction removeChild(node, child) {\n    node.removeChild(child);\n}\nfunction appendChild(node, child) {\n    node.appendChild(child);\n}\nfunction parentNode(node) {\n    return node.parentNode;\n}\nfunction nextSibling(node) {\n    return node.nextSibling;\n}\nfunction tagName(node) {\n    return node.tagName;\n}\nfunction setTextContent(node, text) {\n    node.textContent = text;\n}\nfunction setStyleScope(node, scopeId) {\n    node.setAttribute(scopeId, '');\n}\n\nvar nodeOps = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  createElement: createElement,\n  createElementNS: createElementNS,\n  createTextNode: createTextNode,\n  createComment: createComment,\n  insertBefore: insertBefore,\n  removeChild: removeChild,\n  appendChild: appendChild,\n  parentNode: parentNode,\n  nextSibling: nextSibling,\n  tagName: tagName,\n  setTextContent: setTextContent,\n  setStyleScope: setStyleScope\n});\n\nvar ref = {\n    create: function (_, vnode) {\n        registerRef(vnode);\n    },\n    update: function (oldVnode, vnode) {\n        if (oldVnode.data.ref !== vnode.data.ref) {\n            registerRef(oldVnode, true);\n            registerRef(vnode);\n        }\n    },\n    destroy: function (vnode) {\n        registerRef(vnode, true);\n    }\n};\nfunction registerRef(vnode, isRemoval) {\n    var ref = vnode.data.ref;\n    if (!isDef(ref))\n        return;\n    var vm = vnode.context;\n    var refValue = vnode.componentInstance || vnode.elm;\n    var value = isRemoval ? null : refValue;\n    var $refsValue = isRemoval ? undefined : refValue;\n    if (isFunction(ref)) {\n        invokeWithErrorHandling(ref, vm, [value], vm, \"template ref function\");\n        return;\n    }\n    var isFor = vnode.data.refInFor;\n    var _isString = typeof ref === 'string' || typeof ref === 'number';\n    var _isRef = isRef(ref);\n    var refs = vm.$refs;\n    if (_isString || _isRef) {\n        if (isFor) {\n            var existing = _isString ? refs[ref] : ref.value;\n            if (isRemoval) {\n                isArray(existing) && remove$2(existing, refValue);\n            }\n            else {\n                if (!isArray(existing)) {\n                    if (_isString) {\n                        refs[ref] = [refValue];\n                        setSetupRef(vm, ref, refs[ref]);\n                    }\n                    else {\n                        ref.value = [refValue];\n                    }\n                }\n                else if (!existing.includes(refValue)) {\n                    existing.push(refValue);\n                }\n            }\n        }\n        else if (_isString) {\n            if (isRemoval && refs[ref] !== refValue) {\n                return;\n            }\n            refs[ref] = $refsValue;\n            setSetupRef(vm, ref, value);\n        }\n        else if (_isRef) {\n            if (isRemoval && ref.value !== refValue) {\n                return;\n            }\n            ref.value = value;\n        }\n        else if (true) {\n            warn$2(\"Invalid template ref type: \".concat(typeof ref));\n        }\n    }\n}\nfunction setSetupRef(_a, key, val) {\n    var _setupState = _a._setupState;\n    if (_setupState && hasOwn(_setupState, key)) {\n        if (isRef(_setupState[key])) {\n            _setupState[key].value = val;\n        }\n        else {\n            _setupState[key] = val;\n        }\n    }\n}\n\n/**\n * Virtual DOM patching algorithm based on Snabbdom by\n * Simon Friis Vindum (@paldepind)\n * Licensed under the MIT License\n * https://github.com/paldepind/snabbdom/blob/master/LICENSE\n *\n * modified by Evan You (@yyx990803)\n *\n * Not type-checking this because this file is perf-critical and the cost\n * of making flow understand it is not worth it.\n */\nvar emptyNode = new VNode('', {}, []);\nvar hooks = ['create', 'activate', 'update', 'remove', 'destroy'];\nfunction sameVnode(a, b) {\n    return (a.key === b.key &&\n        a.asyncFactory === b.asyncFactory &&\n        ((a.tag === b.tag &&\n            a.isComment === b.isComment &&\n            isDef(a.data) === isDef(b.data) &&\n            sameInputType(a, b)) ||\n            (isTrue(a.isAsyncPlaceholder) && isUndef(b.asyncFactory.error))));\n}\nfunction sameInputType(a, b) {\n    if (a.tag !== 'input')\n        return true;\n    var i;\n    var typeA = isDef((i = a.data)) && isDef((i = i.attrs)) && i.type;\n    var typeB = isDef((i = b.data)) && isDef((i = i.attrs)) && i.type;\n    return typeA === typeB || (isTextInputType(typeA) && isTextInputType(typeB));\n}\nfunction createKeyToOldIdx(children, beginIdx, endIdx) {\n    var i, key;\n    var map = {};\n    for (i = beginIdx; i <= endIdx; ++i) {\n        key = children[i].key;\n        if (isDef(key))\n            map[key] = i;\n    }\n    return map;\n}\nfunction createPatchFunction(backend) {\n    var i, j;\n    var cbs = {};\n    var modules = backend.modules, nodeOps = backend.nodeOps;\n    for (i = 0; i < hooks.length; ++i) {\n        cbs[hooks[i]] = [];\n        for (j = 0; j < modules.length; ++j) {\n            if (isDef(modules[j][hooks[i]])) {\n                cbs[hooks[i]].push(modules[j][hooks[i]]);\n            }\n        }\n    }\n    function emptyNodeAt(elm) {\n        return new VNode(nodeOps.tagName(elm).toLowerCase(), {}, [], undefined, elm);\n    }\n    function createRmCb(childElm, listeners) {\n        function remove() {\n            if (--remove.listeners === 0) {\n                removeNode(childElm);\n            }\n        }\n        remove.listeners = listeners;\n        return remove;\n    }\n    function removeNode(el) {\n        var parent = nodeOps.parentNode(el);\n        // element may have already been removed due to v-html / v-text\n        if (isDef(parent)) {\n            nodeOps.removeChild(parent, el);\n        }\n    }\n    function isUnknownElement(vnode, inVPre) {\n        return (!inVPre &&\n            !vnode.ns &&\n            !(config.ignoredElements.length &&\n                config.ignoredElements.some(function (ignore) {\n                    return isRegExp(ignore)\n                        ? ignore.test(vnode.tag)\n                        : ignore === vnode.tag;\n                })) &&\n            config.isUnknownElement(vnode.tag));\n    }\n    var creatingElmInVPre = 0;\n    function createElm(vnode, insertedVnodeQueue, parentElm, refElm, nested, ownerArray, index) {\n        if (isDef(vnode.elm) && isDef(ownerArray)) {\n            // This vnode was used in a previous render!\n            // now it's used as a new node, overwriting its elm would cause\n            // potential patch errors down the road when it's used as an insertion\n            // reference node. Instead, we clone the node on-demand before creating\n            // associated DOM element for it.\n            vnode = ownerArray[index] = cloneVNode(vnode);\n        }\n        vnode.isRootInsert = !nested; // for transition enter check\n        if (createComponent(vnode, insertedVnodeQueue, parentElm, refElm)) {\n            return;\n        }\n        var data = vnode.data;\n        var children = vnode.children;\n        var tag = vnode.tag;\n        if (isDef(tag)) {\n            if (true) {\n                if (data && data.pre) {\n                    creatingElmInVPre++;\n                }\n                if (isUnknownElement(vnode, creatingElmInVPre)) {\n                    warn$2('Unknown custom element: <' +\n                        tag +\n                        '> - did you ' +\n                        'register the component correctly? For recursive components, ' +\n                        'make sure to provide the \"name\" option.', vnode.context);\n                }\n            }\n            vnode.elm = vnode.ns\n                ? nodeOps.createElementNS(vnode.ns, tag)\n                : nodeOps.createElement(tag, vnode);\n            setScope(vnode);\n            createChildren(vnode, children, insertedVnodeQueue);\n            if (isDef(data)) {\n                invokeCreateHooks(vnode, insertedVnodeQueue);\n            }\n            insert(parentElm, vnode.elm, refElm);\n            if ( true && data && data.pre) {\n                creatingElmInVPre--;\n            }\n        }\n        else if (isTrue(vnode.isComment)) {\n            vnode.elm = nodeOps.createComment(vnode.text);\n            insert(parentElm, vnode.elm, refElm);\n        }\n        else {\n            vnode.elm = nodeOps.createTextNode(vnode.text);\n            insert(parentElm, vnode.elm, refElm);\n        }\n    }\n    function createComponent(vnode, insertedVnodeQueue, parentElm, refElm) {\n        var i = vnode.data;\n        if (isDef(i)) {\n            var isReactivated = isDef(vnode.componentInstance) && i.keepAlive;\n            if (isDef((i = i.hook)) && isDef((i = i.init))) {\n                i(vnode, false /* hydrating */);\n            }\n            // after calling the init hook, if the vnode is a child component\n            // it should've created a child instance and mounted it. the child\n            // component also has set the placeholder vnode's elm.\n            // in that case we can just return the element and be done.\n            if (isDef(vnode.componentInstance)) {\n                initComponent(vnode, insertedVnodeQueue);\n                insert(parentElm, vnode.elm, refElm);\n                if (isTrue(isReactivated)) {\n                    reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm);\n                }\n                return true;\n            }\n        }\n    }\n    function initComponent(vnode, insertedVnodeQueue) {\n        if (isDef(vnode.data.pendingInsert)) {\n            insertedVnodeQueue.push.apply(insertedVnodeQueue, vnode.data.pendingInsert);\n            vnode.data.pendingInsert = null;\n        }\n        vnode.elm = vnode.componentInstance.$el;\n        if (isPatchable(vnode)) {\n            invokeCreateHooks(vnode, insertedVnodeQueue);\n            setScope(vnode);\n        }\n        else {\n            // empty component root.\n            // skip all element-related modules except for ref (#3455)\n            registerRef(vnode);\n            // make sure to invoke the insert hook\n            insertedVnodeQueue.push(vnode);\n        }\n    }\n    function reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm) {\n        var i;\n        // hack for #4339: a reactivated component with inner transition\n        // does not trigger because the inner node's created hooks are not called\n        // again. It's not ideal to involve module-specific logic in here but\n        // there doesn't seem to be a better way to do it.\n        var innerNode = vnode;\n        while (innerNode.componentInstance) {\n            innerNode = innerNode.componentInstance._vnode;\n            if (isDef((i = innerNode.data)) && isDef((i = i.transition))) {\n                for (i = 0; i < cbs.activate.length; ++i) {\n                    cbs.activate[i](emptyNode, innerNode);\n                }\n                insertedVnodeQueue.push(innerNode);\n                break;\n            }\n        }\n        // unlike a newly created component,\n        // a reactivated keep-alive component doesn't insert itself\n        insert(parentElm, vnode.elm, refElm);\n    }\n    function insert(parent, elm, ref) {\n        if (isDef(parent)) {\n            if (isDef(ref)) {\n                if (nodeOps.parentNode(ref) === parent) {\n                    nodeOps.insertBefore(parent, elm, ref);\n                }\n            }\n            else {\n                nodeOps.appendChild(parent, elm);\n            }\n        }\n    }\n    function createChildren(vnode, children, insertedVnodeQueue) {\n        if (isArray(children)) {\n            if (true) {\n                checkDuplicateKeys(children);\n            }\n            for (var i_1 = 0; i_1 < children.length; ++i_1) {\n                createElm(children[i_1], insertedVnodeQueue, vnode.elm, null, true, children, i_1);\n            }\n        }\n        else if (isPrimitive(vnode.text)) {\n            nodeOps.appendChild(vnode.elm, nodeOps.createTextNode(String(vnode.text)));\n        }\n    }\n    function isPatchable(vnode) {\n        while (vnode.componentInstance) {\n            vnode = vnode.componentInstance._vnode;\n        }\n        return isDef(vnode.tag);\n    }\n    function invokeCreateHooks(vnode, insertedVnodeQueue) {\n        for (var i_2 = 0; i_2 < cbs.create.length; ++i_2) {\n            cbs.create[i_2](emptyNode, vnode);\n        }\n        i = vnode.data.hook; // Reuse variable\n        if (isDef(i)) {\n            if (isDef(i.create))\n                i.create(emptyNode, vnode);\n            if (isDef(i.insert))\n                insertedVnodeQueue.push(vnode);\n        }\n    }\n    // set scope id attribute for scoped CSS.\n    // this is implemented as a special case to avoid the overhead\n    // of going through the normal attribute patching process.\n    function setScope(vnode) {\n        var i;\n        if (isDef((i = vnode.fnScopeId))) {\n            nodeOps.setStyleScope(vnode.elm, i);\n        }\n        else {\n            var ancestor = vnode;\n            while (ancestor) {\n                if (isDef((i = ancestor.context)) && isDef((i = i.$options._scopeId))) {\n                    nodeOps.setStyleScope(vnode.elm, i);\n                }\n                ancestor = ancestor.parent;\n            }\n        }\n        // for slot content they should also get the scopeId from the host instance.\n        if (isDef((i = activeInstance)) &&\n            i !== vnode.context &&\n            i !== vnode.fnContext &&\n            isDef((i = i.$options._scopeId))) {\n            nodeOps.setStyleScope(vnode.elm, i);\n        }\n    }\n    function addVnodes(parentElm, refElm, vnodes, startIdx, endIdx, insertedVnodeQueue) {\n        for (; startIdx <= endIdx; ++startIdx) {\n            createElm(vnodes[startIdx], insertedVnodeQueue, parentElm, refElm, false, vnodes, startIdx);\n        }\n    }\n    function invokeDestroyHook(vnode) {\n        var i, j;\n        var data = vnode.data;\n        if (isDef(data)) {\n            if (isDef((i = data.hook)) && isDef((i = i.destroy)))\n                i(vnode);\n            for (i = 0; i < cbs.destroy.length; ++i)\n                cbs.destroy[i](vnode);\n        }\n        if (isDef((i = vnode.children))) {\n            for (j = 0; j < vnode.children.length; ++j) {\n                invokeDestroyHook(vnode.children[j]);\n            }\n        }\n    }\n    function removeVnodes(vnodes, startIdx, endIdx) {\n        for (; startIdx <= endIdx; ++startIdx) {\n            var ch = vnodes[startIdx];\n            if (isDef(ch)) {\n                if (isDef(ch.tag)) {\n                    removeAndInvokeRemoveHook(ch);\n                    invokeDestroyHook(ch);\n                }\n                else {\n                    // Text node\n                    removeNode(ch.elm);\n                }\n            }\n        }\n    }\n    function removeAndInvokeRemoveHook(vnode, rm) {\n        if (isDef(rm) || isDef(vnode.data)) {\n            var i_3;\n            var listeners = cbs.remove.length + 1;\n            if (isDef(rm)) {\n                // we have a recursively passed down rm callback\n                // increase the listeners count\n                rm.listeners += listeners;\n            }\n            else {\n                // directly removing\n                rm = createRmCb(vnode.elm, listeners);\n            }\n            // recursively invoke hooks on child component root node\n            if (isDef((i_3 = vnode.componentInstance)) &&\n                isDef((i_3 = i_3._vnode)) &&\n                isDef(i_3.data)) {\n                removeAndInvokeRemoveHook(i_3, rm);\n            }\n            for (i_3 = 0; i_3 < cbs.remove.length; ++i_3) {\n                cbs.remove[i_3](vnode, rm);\n            }\n            if (isDef((i_3 = vnode.data.hook)) && isDef((i_3 = i_3.remove))) {\n                i_3(vnode, rm);\n            }\n            else {\n                rm();\n            }\n        }\n        else {\n            removeNode(vnode.elm);\n        }\n    }\n    function updateChildren(parentElm, oldCh, newCh, insertedVnodeQueue, removeOnly) {\n        var oldStartIdx = 0;\n        var newStartIdx = 0;\n        var oldEndIdx = oldCh.length - 1;\n        var oldStartVnode = oldCh[0];\n        var oldEndVnode = oldCh[oldEndIdx];\n        var newEndIdx = newCh.length - 1;\n        var newStartVnode = newCh[0];\n        var newEndVnode = newCh[newEndIdx];\n        var oldKeyToIdx, idxInOld, vnodeToMove, refElm;\n        // removeOnly is a special flag used only by <transition-group>\n        // to ensure removed elements stay in correct relative positions\n        // during leaving transitions\n        var canMove = !removeOnly;\n        if (true) {\n            checkDuplicateKeys(newCh);\n        }\n        while (oldStartIdx <= oldEndIdx && newStartIdx <= newEndIdx) {\n            if (isUndef(oldStartVnode)) {\n                oldStartVnode = oldCh[++oldStartIdx]; // Vnode has been moved left\n            }\n            else if (isUndef(oldEndVnode)) {\n                oldEndVnode = oldCh[--oldEndIdx];\n            }\n            else if (sameVnode(oldStartVnode, newStartVnode)) {\n                patchVnode(oldStartVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);\n                oldStartVnode = oldCh[++oldStartIdx];\n                newStartVnode = newCh[++newStartIdx];\n            }\n            else if (sameVnode(oldEndVnode, newEndVnode)) {\n                patchVnode(oldEndVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx);\n                oldEndVnode = oldCh[--oldEndIdx];\n                newEndVnode = newCh[--newEndIdx];\n            }\n            else if (sameVnode(oldStartVnode, newEndVnode)) {\n                // Vnode moved right\n                patchVnode(oldStartVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx);\n                canMove &&\n                    nodeOps.insertBefore(parentElm, oldStartVnode.elm, nodeOps.nextSibling(oldEndVnode.elm));\n                oldStartVnode = oldCh[++oldStartIdx];\n                newEndVnode = newCh[--newEndIdx];\n            }\n            else if (sameVnode(oldEndVnode, newStartVnode)) {\n                // Vnode moved left\n                patchVnode(oldEndVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);\n                canMove &&\n                    nodeOps.insertBefore(parentElm, oldEndVnode.elm, oldStartVnode.elm);\n                oldEndVnode = oldCh[--oldEndIdx];\n                newStartVnode = newCh[++newStartIdx];\n            }\n            else {\n                if (isUndef(oldKeyToIdx))\n                    oldKeyToIdx = createKeyToOldIdx(oldCh, oldStartIdx, oldEndIdx);\n                idxInOld = isDef(newStartVnode.key)\n                    ? oldKeyToIdx[newStartVnode.key]\n                    : findIdxInOld(newStartVnode, oldCh, oldStartIdx, oldEndIdx);\n                if (isUndef(idxInOld)) {\n                    // New element\n                    createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);\n                }\n                else {\n                    vnodeToMove = oldCh[idxInOld];\n                    if (sameVnode(vnodeToMove, newStartVnode)) {\n                        patchVnode(vnodeToMove, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);\n                        oldCh[idxInOld] = undefined;\n                        canMove &&\n                            nodeOps.insertBefore(parentElm, vnodeToMove.elm, oldStartVnode.elm);\n                    }\n                    else {\n                        // same key but different element. treat as new element\n                        createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);\n                    }\n                }\n                newStartVnode = newCh[++newStartIdx];\n            }\n        }\n        if (oldStartIdx > oldEndIdx) {\n            refElm = isUndef(newCh[newEndIdx + 1]) ? null : newCh[newEndIdx + 1].elm;\n            addVnodes(parentElm, refElm, newCh, newStartIdx, newEndIdx, insertedVnodeQueue);\n        }\n        else if (newStartIdx > newEndIdx) {\n            removeVnodes(oldCh, oldStartIdx, oldEndIdx);\n        }\n    }\n    function checkDuplicateKeys(children) {\n        var seenKeys = {};\n        for (var i_4 = 0; i_4 < children.length; i_4++) {\n            var vnode = children[i_4];\n            var key = vnode.key;\n            if (isDef(key)) {\n                if (seenKeys[key]) {\n                    warn$2(\"Duplicate keys detected: '\".concat(key, \"'. This may cause an update error.\"), vnode.context);\n                }\n                else {\n                    seenKeys[key] = true;\n                }\n            }\n        }\n    }\n    function findIdxInOld(node, oldCh, start, end) {\n        for (var i_5 = start; i_5 < end; i_5++) {\n            var c = oldCh[i_5];\n            if (isDef(c) && sameVnode(node, c))\n                return i_5;\n        }\n    }\n    function patchVnode(oldVnode, vnode, insertedVnodeQueue, ownerArray, index, removeOnly) {\n        if (oldVnode === vnode) {\n            return;\n        }\n        if (isDef(vnode.elm) && isDef(ownerArray)) {\n            // clone reused vnode\n            vnode = ownerArray[index] = cloneVNode(vnode);\n        }\n        var elm = (vnode.elm = oldVnode.elm);\n        if (isTrue(oldVnode.isAsyncPlaceholder)) {\n            if (isDef(vnode.asyncFactory.resolved)) {\n                hydrate(oldVnode.elm, vnode, insertedVnodeQueue);\n            }\n            else {\n                vnode.isAsyncPlaceholder = true;\n            }\n            return;\n        }\n        // reuse element for static trees.\n        // note we only do this if the vnode is cloned -\n        // if the new node is not cloned it means the render functions have been\n        // reset by the hot-reload-api and we need to do a proper re-render.\n        if (isTrue(vnode.isStatic) &&\n            isTrue(oldVnode.isStatic) &&\n            vnode.key === oldVnode.key &&\n            (isTrue(vnode.isCloned) || isTrue(vnode.isOnce))) {\n            vnode.componentInstance = oldVnode.componentInstance;\n            return;\n        }\n        var i;\n        var data = vnode.data;\n        if (isDef(data) && isDef((i = data.hook)) && isDef((i = i.prepatch))) {\n            i(oldVnode, vnode);\n        }\n        var oldCh = oldVnode.children;\n        var ch = vnode.children;\n        if (isDef(data) && isPatchable(vnode)) {\n            for (i = 0; i < cbs.update.length; ++i)\n                cbs.update[i](oldVnode, vnode);\n            if (isDef((i = data.hook)) && isDef((i = i.update)))\n                i(oldVnode, vnode);\n        }\n        if (isUndef(vnode.text)) {\n            if (isDef(oldCh) && isDef(ch)) {\n                if (oldCh !== ch)\n                    updateChildren(elm, oldCh, ch, insertedVnodeQueue, removeOnly);\n            }\n            else if (isDef(ch)) {\n                if (true) {\n                    checkDuplicateKeys(ch);\n                }\n                if (isDef(oldVnode.text))\n                    nodeOps.setTextContent(elm, '');\n                addVnodes(elm, null, ch, 0, ch.length - 1, insertedVnodeQueue);\n            }\n            else if (isDef(oldCh)) {\n                removeVnodes(oldCh, 0, oldCh.length - 1);\n            }\n            else if (isDef(oldVnode.text)) {\n                nodeOps.setTextContent(elm, '');\n            }\n        }\n        else if (oldVnode.text !== vnode.text) {\n            nodeOps.setTextContent(elm, vnode.text);\n        }\n        if (isDef(data)) {\n            if (isDef((i = data.hook)) && isDef((i = i.postpatch)))\n                i(oldVnode, vnode);\n        }\n    }\n    function invokeInsertHook(vnode, queue, initial) {\n        // delay insert hooks for component root nodes, invoke them after the\n        // element is really inserted\n        if (isTrue(initial) && isDef(vnode.parent)) {\n            vnode.parent.data.pendingInsert = queue;\n        }\n        else {\n            for (var i_6 = 0; i_6 < queue.length; ++i_6) {\n                queue[i_6].data.hook.insert(queue[i_6]);\n            }\n        }\n    }\n    var hydrationBailed = false;\n    // list of modules that can skip create hook during hydration because they\n    // are already rendered on the client or has no need for initialization\n    // Note: style is excluded because it relies on initial clone for future\n    // deep updates (#7063).\n    var isRenderedModule = makeMap('attrs,class,staticClass,staticStyle,key');\n    // Note: this is a browser-only function so we can assume elms are DOM nodes.\n    function hydrate(elm, vnode, insertedVnodeQueue, inVPre) {\n        var i;\n        var tag = vnode.tag, data = vnode.data, children = vnode.children;\n        inVPre = inVPre || (data && data.pre);\n        vnode.elm = elm;\n        if (isTrue(vnode.isComment) && isDef(vnode.asyncFactory)) {\n            vnode.isAsyncPlaceholder = true;\n            return true;\n        }\n        // assert node match\n        if (true) {\n            if (!assertNodeMatch(elm, vnode, inVPre)) {\n                return false;\n            }\n        }\n        if (isDef(data)) {\n            if (isDef((i = data.hook)) && isDef((i = i.init)))\n                i(vnode, true /* hydrating */);\n            if (isDef((i = vnode.componentInstance))) {\n                // child component. it should have hydrated its own tree.\n                initComponent(vnode, insertedVnodeQueue);\n                return true;\n            }\n        }\n        if (isDef(tag)) {\n            if (isDef(children)) {\n                // empty element, allow client to pick up and populate children\n                if (!elm.hasChildNodes()) {\n                    createChildren(vnode, children, insertedVnodeQueue);\n                }\n                else {\n                    // v-html and domProps: innerHTML\n                    if (isDef((i = data)) &&\n                        isDef((i = i.domProps)) &&\n                        isDef((i = i.innerHTML))) {\n                        if (i !== elm.innerHTML) {\n                            /* istanbul ignore if */\n                            if ( true &&\n                                typeof console !== 'undefined' &&\n                                !hydrationBailed) {\n                                hydrationBailed = true;\n                                console.warn('Parent: ', elm);\n                                console.warn('server innerHTML: ', i);\n                                console.warn('client innerHTML: ', elm.innerHTML);\n                            }\n                            return false;\n                        }\n                    }\n                    else {\n                        // iterate and compare children lists\n                        var childrenMatch = true;\n                        var childNode = elm.firstChild;\n                        for (var i_7 = 0; i_7 < children.length; i_7++) {\n                            if (!childNode ||\n                                !hydrate(childNode, children[i_7], insertedVnodeQueue, inVPre)) {\n                                childrenMatch = false;\n                                break;\n                            }\n                            childNode = childNode.nextSibling;\n                        }\n                        // if childNode is not null, it means the actual childNodes list is\n                        // longer than the virtual children list.\n                        if (!childrenMatch || childNode) {\n                            /* istanbul ignore if */\n                            if ( true &&\n                                typeof console !== 'undefined' &&\n                                !hydrationBailed) {\n                                hydrationBailed = true;\n                                console.warn('Parent: ', elm);\n                                console.warn('Mismatching childNodes vs. VNodes: ', elm.childNodes, children);\n                            }\n                            return false;\n                        }\n                    }\n                }\n            }\n            if (isDef(data)) {\n                var fullInvoke = false;\n                for (var key in data) {\n                    if (!isRenderedModule(key)) {\n                        fullInvoke = true;\n                        invokeCreateHooks(vnode, insertedVnodeQueue);\n                        break;\n                    }\n                }\n                if (!fullInvoke && data['class']) {\n                    // ensure collecting deps for deep class bindings for future updates\n                    traverse(data['class']);\n                }\n            }\n        }\n        else if (elm.data !== vnode.text) {\n            elm.data = vnode.text;\n        }\n        return true;\n    }\n    function assertNodeMatch(node, vnode, inVPre) {\n        if (isDef(vnode.tag)) {\n            return (vnode.tag.indexOf('vue-component') === 0 ||\n                (!isUnknownElement(vnode, inVPre) &&\n                    vnode.tag.toLowerCase() ===\n                        (node.tagName && node.tagName.toLowerCase())));\n        }\n        else {\n            return node.nodeType === (vnode.isComment ? 8 : 3);\n        }\n    }\n    return function patch(oldVnode, vnode, hydrating, removeOnly) {\n        if (isUndef(vnode)) {\n            if (isDef(oldVnode))\n                invokeDestroyHook(oldVnode);\n            return;\n        }\n        var isInitialPatch = false;\n        var insertedVnodeQueue = [];\n        if (isUndef(oldVnode)) {\n            // empty mount (likely as component), create new root element\n            isInitialPatch = true;\n            createElm(vnode, insertedVnodeQueue);\n        }\n        else {\n            var isRealElement = isDef(oldVnode.nodeType);\n            if (!isRealElement && sameVnode(oldVnode, vnode)) {\n                // patch existing root node\n                patchVnode(oldVnode, vnode, insertedVnodeQueue, null, null, removeOnly);\n            }\n            else {\n                if (isRealElement) {\n                    // mounting to a real element\n                    // check if this is server-rendered content and if we can perform\n                    // a successful hydration.\n                    if (oldVnode.nodeType === 1 && oldVnode.hasAttribute(SSR_ATTR)) {\n                        oldVnode.removeAttribute(SSR_ATTR);\n                        hydrating = true;\n                    }\n                    if (isTrue(hydrating)) {\n                        if (hydrate(oldVnode, vnode, insertedVnodeQueue)) {\n                            invokeInsertHook(vnode, insertedVnodeQueue, true);\n                            return oldVnode;\n                        }\n                        else if (true) {\n                            warn$2('The client-side rendered virtual DOM tree is not matching ' +\n                                'server-rendered content. This is likely caused by incorrect ' +\n                                'HTML markup, for example nesting block-level elements inside ' +\n                                '<p>, or missing <tbody>. Bailing hydration and performing ' +\n                                'full client-side render.');\n                        }\n                    }\n                    // either not server-rendered, or hydration failed.\n                    // create an empty node and replace it\n                    oldVnode = emptyNodeAt(oldVnode);\n                }\n                // replacing existing element\n                var oldElm = oldVnode.elm;\n                var parentElm = nodeOps.parentNode(oldElm);\n                // create new node\n                createElm(vnode, insertedVnodeQueue, \n                // extremely rare edge case: do not insert if old element is in a\n                // leaving transition. Only happens when combining transition +\n                // keep-alive + HOCs. (#4590)\n                oldElm._leaveCb ? null : parentElm, nodeOps.nextSibling(oldElm));\n                // update parent placeholder node element, recursively\n                if (isDef(vnode.parent)) {\n                    var ancestor = vnode.parent;\n                    var patchable = isPatchable(vnode);\n                    while (ancestor) {\n                        for (var i_8 = 0; i_8 < cbs.destroy.length; ++i_8) {\n                            cbs.destroy[i_8](ancestor);\n                        }\n                        ancestor.elm = vnode.elm;\n                        if (patchable) {\n                            for (var i_9 = 0; i_9 < cbs.create.length; ++i_9) {\n                                cbs.create[i_9](emptyNode, ancestor);\n                            }\n                            // #6513\n                            // invoke insert hooks that may have been merged by create hooks.\n                            // e.g. for directives that uses the \"inserted\" hook.\n                            var insert_1 = ancestor.data.hook.insert;\n                            if (insert_1.merged) {\n                                // start at index 1 to avoid re-invoking component mounted hook\n                                for (var i_10 = 1; i_10 < insert_1.fns.length; i_10++) {\n                                    insert_1.fns[i_10]();\n                                }\n                            }\n                        }\n                        else {\n                            registerRef(ancestor);\n                        }\n                        ancestor = ancestor.parent;\n                    }\n                }\n                // destroy old node\n                if (isDef(parentElm)) {\n                    removeVnodes([oldVnode], 0, 0);\n                }\n                else if (isDef(oldVnode.tag)) {\n                    invokeDestroyHook(oldVnode);\n                }\n            }\n        }\n        invokeInsertHook(vnode, insertedVnodeQueue, isInitialPatch);\n        return vnode.elm;\n    };\n}\n\nvar directives$1 = {\n    create: updateDirectives,\n    update: updateDirectives,\n    destroy: function unbindDirectives(vnode) {\n        // @ts-expect-error emptyNode is not VNodeWithData\n        updateDirectives(vnode, emptyNode);\n    }\n};\nfunction updateDirectives(oldVnode, vnode) {\n    if (oldVnode.data.directives || vnode.data.directives) {\n        _update(oldVnode, vnode);\n    }\n}\nfunction _update(oldVnode, vnode) {\n    var isCreate = oldVnode === emptyNode;\n    var isDestroy = vnode === emptyNode;\n    var oldDirs = normalizeDirectives(oldVnode.data.directives, oldVnode.context);\n    var newDirs = normalizeDirectives(vnode.data.directives, vnode.context);\n    var dirsWithInsert = [];\n    var dirsWithPostpatch = [];\n    var key, oldDir, dir;\n    for (key in newDirs) {\n        oldDir = oldDirs[key];\n        dir = newDirs[key];\n        if (!oldDir) {\n            // new directive, bind\n            callHook(dir, 'bind', vnode, oldVnode);\n            if (dir.def && dir.def.inserted) {\n                dirsWithInsert.push(dir);\n            }\n        }\n        else {\n            // existing directive, update\n            dir.oldValue = oldDir.value;\n            dir.oldArg = oldDir.arg;\n            callHook(dir, 'update', vnode, oldVnode);\n            if (dir.def && dir.def.componentUpdated) {\n                dirsWithPostpatch.push(dir);\n            }\n        }\n    }\n    if (dirsWithInsert.length) {\n        var callInsert = function () {\n            for (var i = 0; i < dirsWithInsert.length; i++) {\n                callHook(dirsWithInsert[i], 'inserted', vnode, oldVnode);\n            }\n        };\n        if (isCreate) {\n            mergeVNodeHook(vnode, 'insert', callInsert);\n        }\n        else {\n            callInsert();\n        }\n    }\n    if (dirsWithPostpatch.length) {\n        mergeVNodeHook(vnode, 'postpatch', function () {\n            for (var i = 0; i < dirsWithPostpatch.length; i++) {\n                callHook(dirsWithPostpatch[i], 'componentUpdated', vnode, oldVnode);\n            }\n        });\n    }\n    if (!isCreate) {\n        for (key in oldDirs) {\n            if (!newDirs[key]) {\n                // no longer present, unbind\n                callHook(oldDirs[key], 'unbind', oldVnode, oldVnode, isDestroy);\n            }\n        }\n    }\n}\nvar emptyModifiers = Object.create(null);\nfunction normalizeDirectives(dirs, vm) {\n    var res = Object.create(null);\n    if (!dirs) {\n        // $flow-disable-line\n        return res;\n    }\n    var i, dir;\n    for (i = 0; i < dirs.length; i++) {\n        dir = dirs[i];\n        if (!dir.modifiers) {\n            // $flow-disable-line\n            dir.modifiers = emptyModifiers;\n        }\n        res[getRawDirName(dir)] = dir;\n        if (vm._setupState && vm._setupState.__sfc) {\n            var setupDef = dir.def || resolveAsset(vm, '_setupState', 'v-' + dir.name);\n            if (typeof setupDef === 'function') {\n                dir.def = {\n                    bind: setupDef,\n                    update: setupDef,\n                };\n            }\n            else {\n                dir.def = setupDef;\n            }\n        }\n        dir.def = dir.def || resolveAsset(vm.$options, 'directives', dir.name, true);\n    }\n    // $flow-disable-line\n    return res;\n}\nfunction getRawDirName(dir) {\n    return (dir.rawName || \"\".concat(dir.name, \".\").concat(Object.keys(dir.modifiers || {}).join('.')));\n}\nfunction callHook(dir, hook, vnode, oldVnode, isDestroy) {\n    var fn = dir.def && dir.def[hook];\n    if (fn) {\n        try {\n            fn(vnode.elm, dir, vnode, oldVnode, isDestroy);\n        }\n        catch (e) {\n            handleError(e, vnode.context, \"directive \".concat(dir.name, \" \").concat(hook, \" hook\"));\n        }\n    }\n}\n\nvar baseModules = [ref, directives$1];\n\nfunction updateAttrs(oldVnode, vnode) {\n    var opts = vnode.componentOptions;\n    if (isDef(opts) && opts.Ctor.options.inheritAttrs === false) {\n        return;\n    }\n    if (isUndef(oldVnode.data.attrs) && isUndef(vnode.data.attrs)) {\n        return;\n    }\n    var key, cur, old;\n    var elm = vnode.elm;\n    var oldAttrs = oldVnode.data.attrs || {};\n    var attrs = vnode.data.attrs || {};\n    // clone observed objects, as the user probably wants to mutate it\n    if (isDef(attrs.__ob__) || isTrue(attrs._v_attr_proxy)) {\n        attrs = vnode.data.attrs = extend({}, attrs);\n    }\n    for (key in attrs) {\n        cur = attrs[key];\n        old = oldAttrs[key];\n        if (old !== cur) {\n            setAttr(elm, key, cur, vnode.data.pre);\n        }\n    }\n    // #4391: in IE9, setting type can reset value for input[type=radio]\n    // #6666: IE/Edge forces progress value down to 1 before setting a max\n    /* istanbul ignore if */\n    if ((isIE || isEdge) && attrs.value !== oldAttrs.value) {\n        setAttr(elm, 'value', attrs.value);\n    }\n    for (key in oldAttrs) {\n        if (isUndef(attrs[key])) {\n            if (isXlink(key)) {\n                elm.removeAttributeNS(xlinkNS, getXlinkProp(key));\n            }\n            else if (!isEnumeratedAttr(key)) {\n                elm.removeAttribute(key);\n            }\n        }\n    }\n}\nfunction setAttr(el, key, value, isInPre) {\n    if (isInPre || el.tagName.indexOf('-') > -1) {\n        baseSetAttr(el, key, value);\n    }\n    else if (isBooleanAttr(key)) {\n        // set attribute for blank value\n        // e.g. <option disabled>Select one</option>\n        if (isFalsyAttrValue(value)) {\n            el.removeAttribute(key);\n        }\n        else {\n            // technically allowfullscreen is a boolean attribute for <iframe>,\n            // but Flash expects a value of \"true\" when used on <embed> tag\n            value = key === 'allowfullscreen' && el.tagName === 'EMBED' ? 'true' : key;\n            el.setAttribute(key, value);\n        }\n    }\n    else if (isEnumeratedAttr(key)) {\n        el.setAttribute(key, convertEnumeratedValue(key, value));\n    }\n    else if (isXlink(key)) {\n        if (isFalsyAttrValue(value)) {\n            el.removeAttributeNS(xlinkNS, getXlinkProp(key));\n        }\n        else {\n            el.setAttributeNS(xlinkNS, key, value);\n        }\n    }\n    else {\n        baseSetAttr(el, key, value);\n    }\n}\nfunction baseSetAttr(el, key, value) {\n    if (isFalsyAttrValue(value)) {\n        el.removeAttribute(key);\n    }\n    else {\n        // #7138: IE10 & 11 fires input event when setting placeholder on\n        // <textarea>... block the first input event and remove the blocker\n        // immediately.\n        /* istanbul ignore if */\n        if (isIE &&\n            !isIE9 &&\n            el.tagName === 'TEXTAREA' &&\n            key === 'placeholder' &&\n            value !== '' &&\n            !el.__ieph) {\n            var blocker_1 = function (e) {\n                e.stopImmediatePropagation();\n                el.removeEventListener('input', blocker_1);\n            };\n            el.addEventListener('input', blocker_1);\n            // $flow-disable-line\n            el.__ieph = true; /* IE placeholder patched */\n        }\n        el.setAttribute(key, value);\n    }\n}\nvar attrs = {\n    create: updateAttrs,\n    update: updateAttrs\n};\n\nfunction updateClass(oldVnode, vnode) {\n    var el = vnode.elm;\n    var data = vnode.data;\n    var oldData = oldVnode.data;\n    if (isUndef(data.staticClass) &&\n        isUndef(data.class) &&\n        (isUndef(oldData) ||\n            (isUndef(oldData.staticClass) && isUndef(oldData.class)))) {\n        return;\n    }\n    var cls = genClassForVnode(vnode);\n    // handle transition classes\n    var transitionClass = el._transitionClasses;\n    if (isDef(transitionClass)) {\n        cls = concat(cls, stringifyClass(transitionClass));\n    }\n    // set the class\n    if (cls !== el._prevClass) {\n        el.setAttribute('class', cls);\n        el._prevClass = cls;\n    }\n}\nvar klass$1 = {\n    create: updateClass,\n    update: updateClass\n};\n\nvar validDivisionCharRE = /[\\w).+\\-_$\\]]/;\nfunction parseFilters(exp) {\n    var inSingle = false;\n    var inDouble = false;\n    var inTemplateString = false;\n    var inRegex = false;\n    var curly = 0;\n    var square = 0;\n    var paren = 0;\n    var lastFilterIndex = 0;\n    var c, prev, i, expression, filters;\n    for (i = 0; i < exp.length; i++) {\n        prev = c;\n        c = exp.charCodeAt(i);\n        if (inSingle) {\n            if (c === 0x27 && prev !== 0x5c)\n                inSingle = false;\n        }\n        else if (inDouble) {\n            if (c === 0x22 && prev !== 0x5c)\n                inDouble = false;\n        }\n        else if (inTemplateString) {\n            if (c === 0x60 && prev !== 0x5c)\n                inTemplateString = false;\n        }\n        else if (inRegex) {\n            if (c === 0x2f && prev !== 0x5c)\n                inRegex = false;\n        }\n        else if (c === 0x7c && // pipe\n            exp.charCodeAt(i + 1) !== 0x7c &&\n            exp.charCodeAt(i - 1) !== 0x7c &&\n            !curly &&\n            !square &&\n            !paren) {\n            if (expression === undefined) {\n                // first filter, end of expression\n                lastFilterIndex = i + 1;\n                expression = exp.slice(0, i).trim();\n            }\n            else {\n                pushFilter();\n            }\n        }\n        else {\n            switch (c) {\n                case 0x22:\n                    inDouble = true;\n                    break; // \"\n                case 0x27:\n                    inSingle = true;\n                    break; // '\n                case 0x60:\n                    inTemplateString = true;\n                    break; // `\n                case 0x28:\n                    paren++;\n                    break; // (\n                case 0x29:\n                    paren--;\n                    break; // )\n                case 0x5b:\n                    square++;\n                    break; // [\n                case 0x5d:\n                    square--;\n                    break; // ]\n                case 0x7b:\n                    curly++;\n                    break; // {\n                case 0x7d:\n                    curly--;\n                    break; // }\n            }\n            if (c === 0x2f) {\n                // /\n                var j = i - 1;\n                var p \n                // find first non-whitespace prev char\n                = void 0;\n                // find first non-whitespace prev char\n                for (; j >= 0; j--) {\n                    p = exp.charAt(j);\n                    if (p !== ' ')\n                        break;\n                }\n                if (!p || !validDivisionCharRE.test(p)) {\n                    inRegex = true;\n                }\n            }\n        }\n    }\n    if (expression === undefined) {\n        expression = exp.slice(0, i).trim();\n    }\n    else if (lastFilterIndex !== 0) {\n        pushFilter();\n    }\n    function pushFilter() {\n        (filters || (filters = [])).push(exp.slice(lastFilterIndex, i).trim());\n        lastFilterIndex = i + 1;\n    }\n    if (filters) {\n        for (i = 0; i < filters.length; i++) {\n            expression = wrapFilter(expression, filters[i]);\n        }\n    }\n    return expression;\n}\nfunction wrapFilter(exp, filter) {\n    var i = filter.indexOf('(');\n    if (i < 0) {\n        // _f: resolveFilter\n        return \"_f(\\\"\".concat(filter, \"\\\")(\").concat(exp, \")\");\n    }\n    else {\n        var name_1 = filter.slice(0, i);\n        var args = filter.slice(i + 1);\n        return \"_f(\\\"\".concat(name_1, \"\\\")(\").concat(exp).concat(args !== ')' ? ',' + args : args);\n    }\n}\n\n/* eslint-disable no-unused-vars */\nfunction baseWarn(msg, range) {\n    console.error(\"[Vue compiler]: \".concat(msg));\n}\n/* eslint-enable no-unused-vars */\nfunction pluckModuleFunction(modules, key) {\n    return modules ? modules.map(function (m) { return m[key]; }).filter(function (_) { return _; }) : [];\n}\nfunction addProp(el, name, value, range, dynamic) {\n    (el.props || (el.props = [])).push(rangeSetItem({ name: name, value: value, dynamic: dynamic }, range));\n    el.plain = false;\n}\nfunction addAttr(el, name, value, range, dynamic) {\n    var attrs = dynamic\n        ? el.dynamicAttrs || (el.dynamicAttrs = [])\n        : el.attrs || (el.attrs = []);\n    attrs.push(rangeSetItem({ name: name, value: value, dynamic: dynamic }, range));\n    el.plain = false;\n}\n// add a raw attr (use this in preTransforms)\nfunction addRawAttr(el, name, value, range) {\n    el.attrsMap[name] = value;\n    el.attrsList.push(rangeSetItem({ name: name, value: value }, range));\n}\nfunction addDirective(el, name, rawName, value, arg, isDynamicArg, modifiers, range) {\n    (el.directives || (el.directives = [])).push(rangeSetItem({\n        name: name,\n        rawName: rawName,\n        value: value,\n        arg: arg,\n        isDynamicArg: isDynamicArg,\n        modifiers: modifiers\n    }, range));\n    el.plain = false;\n}\nfunction prependModifierMarker(symbol, name, dynamic) {\n    return dynamic ? \"_p(\".concat(name, \",\\\"\").concat(symbol, \"\\\")\") : symbol + name; // mark the event as captured\n}\nfunction addHandler(el, name, value, modifiers, important, warn, range, dynamic) {\n    modifiers = modifiers || emptyObject;\n    // warn prevent and passive modifier\n    /* istanbul ignore if */\n    if ( true && warn && modifiers.prevent && modifiers.passive) {\n        warn(\"passive and prevent can't be used together. \" +\n            \"Passive handler can't prevent default event.\", range);\n    }\n    // normalize click.right and click.middle since they don't actually fire\n    // this is technically browser-specific, but at least for now browsers are\n    // the only target envs that have right/middle clicks.\n    if (modifiers.right) {\n        if (dynamic) {\n            name = \"(\".concat(name, \")==='click'?'contextmenu':(\").concat(name, \")\");\n        }\n        else if (name === 'click') {\n            name = 'contextmenu';\n            delete modifiers.right;\n        }\n    }\n    else if (modifiers.middle) {\n        if (dynamic) {\n            name = \"(\".concat(name, \")==='click'?'mouseup':(\").concat(name, \")\");\n        }\n        else if (name === 'click') {\n            name = 'mouseup';\n        }\n    }\n    // check capture modifier\n    if (modifiers.capture) {\n        delete modifiers.capture;\n        name = prependModifierMarker('!', name, dynamic);\n    }\n    if (modifiers.once) {\n        delete modifiers.once;\n        name = prependModifierMarker('~', name, dynamic);\n    }\n    /* istanbul ignore if */\n    if (modifiers.passive) {\n        delete modifiers.passive;\n        name = prependModifierMarker('&', name, dynamic);\n    }\n    var events;\n    if (modifiers.native) {\n        delete modifiers.native;\n        events = el.nativeEvents || (el.nativeEvents = {});\n    }\n    else {\n        events = el.events || (el.events = {});\n    }\n    var newHandler = rangeSetItem({ value: value.trim(), dynamic: dynamic }, range);\n    if (modifiers !== emptyObject) {\n        newHandler.modifiers = modifiers;\n    }\n    var handlers = events[name];\n    /* istanbul ignore if */\n    if (Array.isArray(handlers)) {\n        important ? handlers.unshift(newHandler) : handlers.push(newHandler);\n    }\n    else if (handlers) {\n        events[name] = important ? [newHandler, handlers] : [handlers, newHandler];\n    }\n    else {\n        events[name] = newHandler;\n    }\n    el.plain = false;\n}\nfunction getRawBindingAttr(el, name) {\n    return (el.rawAttrsMap[':' + name] ||\n        el.rawAttrsMap['v-bind:' + name] ||\n        el.rawAttrsMap[name]);\n}\nfunction getBindingAttr(el, name, getStatic) {\n    var dynamicValue = getAndRemoveAttr(el, ':' + name) || getAndRemoveAttr(el, 'v-bind:' + name);\n    if (dynamicValue != null) {\n        return parseFilters(dynamicValue);\n    }\n    else if (getStatic !== false) {\n        var staticValue = getAndRemoveAttr(el, name);\n        if (staticValue != null) {\n            return JSON.stringify(staticValue);\n        }\n    }\n}\n// note: this only removes the attr from the Array (attrsList) so that it\n// doesn't get processed by processAttrs.\n// By default it does NOT remove it from the map (attrsMap) because the map is\n// needed during codegen.\nfunction getAndRemoveAttr(el, name, removeFromMap) {\n    var val;\n    if ((val = el.attrsMap[name]) != null) {\n        var list = el.attrsList;\n        for (var i = 0, l = list.length; i < l; i++) {\n            if (list[i].name === name) {\n                list.splice(i, 1);\n                break;\n            }\n        }\n    }\n    if (removeFromMap) {\n        delete el.attrsMap[name];\n    }\n    return val;\n}\nfunction getAndRemoveAttrByRegex(el, name) {\n    var list = el.attrsList;\n    for (var i = 0, l = list.length; i < l; i++) {\n        var attr = list[i];\n        if (name.test(attr.name)) {\n            list.splice(i, 1);\n            return attr;\n        }\n    }\n}\nfunction rangeSetItem(item, range) {\n    if (range) {\n        if (range.start != null) {\n            item.start = range.start;\n        }\n        if (range.end != null) {\n            item.end = range.end;\n        }\n    }\n    return item;\n}\n\n/**\n * Cross-platform code generation for component v-model\n */\nfunction genComponentModel(el, value, modifiers) {\n    var _a = modifiers || {}, number = _a.number, trim = _a.trim;\n    var baseValueExpression = '$$v';\n    var valueExpression = baseValueExpression;\n    if (trim) {\n        valueExpression =\n            \"(typeof \".concat(baseValueExpression, \" === 'string'\") +\n                \"? \".concat(baseValueExpression, \".trim()\") +\n                \": \".concat(baseValueExpression, \")\");\n    }\n    if (number) {\n        valueExpression = \"_n(\".concat(valueExpression, \")\");\n    }\n    var assignment = genAssignmentCode(value, valueExpression);\n    el.model = {\n        value: \"(\".concat(value, \")\"),\n        expression: JSON.stringify(value),\n        callback: \"function (\".concat(baseValueExpression, \") {\").concat(assignment, \"}\")\n    };\n}\n/**\n * Cross-platform codegen helper for generating v-model value assignment code.\n */\nfunction genAssignmentCode(value, assignment) {\n    var res = parseModel(value);\n    if (res.key === null) {\n        return \"\".concat(value, \"=\").concat(assignment);\n    }\n    else {\n        return \"$set(\".concat(res.exp, \", \").concat(res.key, \", \").concat(assignment, \")\");\n    }\n}\n/**\n * Parse a v-model expression into a base path and a final key segment.\n * Handles both dot-path and possible square brackets.\n *\n * Possible cases:\n *\n * - test\n * - test[key]\n * - test[test1[key]]\n * - test[\"a\"][key]\n * - xxx.test[a[a].test1[key]]\n * - test.xxx.a[\"asa\"][test1[key]]\n *\n */\nvar len, str, chr, index, expressionPos, expressionEndPos;\nfunction parseModel(val) {\n    // Fix https://github.com/vuejs/vue/pull/7730\n    // allow v-model=\"obj.val \" (trailing whitespace)\n    val = val.trim();\n    len = val.length;\n    if (val.indexOf('[') < 0 || val.lastIndexOf(']') < len - 1) {\n        index = val.lastIndexOf('.');\n        if (index > -1) {\n            return {\n                exp: val.slice(0, index),\n                key: '\"' + val.slice(index + 1) + '\"'\n            };\n        }\n        else {\n            return {\n                exp: val,\n                key: null\n            };\n        }\n    }\n    str = val;\n    index = expressionPos = expressionEndPos = 0;\n    while (!eof()) {\n        chr = next();\n        /* istanbul ignore if */\n        if (isStringStart(chr)) {\n            parseString(chr);\n        }\n        else if (chr === 0x5b) {\n            parseBracket(chr);\n        }\n    }\n    return {\n        exp: val.slice(0, expressionPos),\n        key: val.slice(expressionPos + 1, expressionEndPos)\n    };\n}\nfunction next() {\n    return str.charCodeAt(++index);\n}\nfunction eof() {\n    return index >= len;\n}\nfunction isStringStart(chr) {\n    return chr === 0x22 || chr === 0x27;\n}\nfunction parseBracket(chr) {\n    var inBracket = 1;\n    expressionPos = index;\n    while (!eof()) {\n        chr = next();\n        if (isStringStart(chr)) {\n            parseString(chr);\n            continue;\n        }\n        if (chr === 0x5b)\n            inBracket++;\n        if (chr === 0x5d)\n            inBracket--;\n        if (inBracket === 0) {\n            expressionEndPos = index;\n            break;\n        }\n    }\n}\nfunction parseString(chr) {\n    var stringQuote = chr;\n    while (!eof()) {\n        chr = next();\n        if (chr === stringQuote) {\n            break;\n        }\n    }\n}\n\nvar warn$1;\n// in some cases, the event used has to be determined at runtime\n// so we used some reserved tokens during compile.\nvar RANGE_TOKEN = '__r';\nvar CHECKBOX_RADIO_TOKEN = '__c';\nfunction model$1(el, dir, _warn) {\n    warn$1 = _warn;\n    var value = dir.value;\n    var modifiers = dir.modifiers;\n    var tag = el.tag;\n    var type = el.attrsMap.type;\n    if (true) {\n        // inputs with type=\"file\" are read only and setting the input's\n        // value will throw an error.\n        if (tag === 'input' && type === 'file') {\n            warn$1(\"<\".concat(el.tag, \" v-model=\\\"\").concat(value, \"\\\" type=\\\"file\\\">:\\n\") +\n                \"File inputs are read only. Use a v-on:change listener instead.\", el.rawAttrsMap['v-model']);\n        }\n    }\n    if (el.component) {\n        genComponentModel(el, value, modifiers);\n        // component v-model doesn't need extra runtime\n        return false;\n    }\n    else if (tag === 'select') {\n        genSelect(el, value, modifiers);\n    }\n    else if (tag === 'input' && type === 'checkbox') {\n        genCheckboxModel(el, value, modifiers);\n    }\n    else if (tag === 'input' && type === 'radio') {\n        genRadioModel(el, value, modifiers);\n    }\n    else if (tag === 'input' || tag === 'textarea') {\n        genDefaultModel(el, value, modifiers);\n    }\n    else if (!config.isReservedTag(tag)) {\n        genComponentModel(el, value, modifiers);\n        // component v-model doesn't need extra runtime\n        return false;\n    }\n    else if (true) {\n        warn$1(\"<\".concat(el.tag, \" v-model=\\\"\").concat(value, \"\\\">: \") +\n            \"v-model is not supported on this element type. \" +\n            \"If you are working with contenteditable, it's recommended to \" +\n            'wrap a library dedicated for that purpose inside a custom component.', el.rawAttrsMap['v-model']);\n    }\n    // ensure runtime directive metadata\n    return true;\n}\nfunction genCheckboxModel(el, value, modifiers) {\n    var number = modifiers && modifiers.number;\n    var valueBinding = getBindingAttr(el, 'value') || 'null';\n    var trueValueBinding = getBindingAttr(el, 'true-value') || 'true';\n    var falseValueBinding = getBindingAttr(el, 'false-value') || 'false';\n    addProp(el, 'checked', \"Array.isArray(\".concat(value, \")\") +\n        \"?_i(\".concat(value, \",\").concat(valueBinding, \")>-1\") +\n        (trueValueBinding === 'true'\n            ? \":(\".concat(value, \")\")\n            : \":_q(\".concat(value, \",\").concat(trueValueBinding, \")\")));\n    addHandler(el, 'change', \"var $$a=\".concat(value, \",\") +\n        '$$el=$event.target,' +\n        \"$$c=$$el.checked?(\".concat(trueValueBinding, \"):(\").concat(falseValueBinding, \");\") +\n        'if(Array.isArray($$a)){' +\n        \"var $$v=\".concat(number ? '_n(' + valueBinding + ')' : valueBinding, \",\") +\n        '$$i=_i($$a,$$v);' +\n        \"if($$el.checked){$$i<0&&(\".concat(genAssignmentCode(value, '$$a.concat([$$v])'), \")}\") +\n        \"else{$$i>-1&&(\".concat(genAssignmentCode(value, '$$a.slice(0,$$i).concat($$a.slice($$i+1))'), \")}\") +\n        \"}else{\".concat(genAssignmentCode(value, '$$c'), \"}\"), null, true);\n}\nfunction genRadioModel(el, value, modifiers) {\n    var number = modifiers && modifiers.number;\n    var valueBinding = getBindingAttr(el, 'value') || 'null';\n    valueBinding = number ? \"_n(\".concat(valueBinding, \")\") : valueBinding;\n    addProp(el, 'checked', \"_q(\".concat(value, \",\").concat(valueBinding, \")\"));\n    addHandler(el, 'change', genAssignmentCode(value, valueBinding), null, true);\n}\nfunction genSelect(el, value, modifiers) {\n    var number = modifiers && modifiers.number;\n    var selectedVal = \"Array.prototype.filter\" +\n        \".call($event.target.options,function(o){return o.selected})\" +\n        \".map(function(o){var val = \\\"_value\\\" in o ? o._value : o.value;\" +\n        \"return \".concat(number ? '_n(val)' : 'val', \"})\");\n    var assignment = '$event.target.multiple ? $$selectedVal : $$selectedVal[0]';\n    var code = \"var $$selectedVal = \".concat(selectedVal, \";\");\n    code = \"\".concat(code, \" \").concat(genAssignmentCode(value, assignment));\n    addHandler(el, 'change', code, null, true);\n}\nfunction genDefaultModel(el, value, modifiers) {\n    var type = el.attrsMap.type;\n    // warn if v-bind:value conflicts with v-model\n    // except for inputs with v-bind:type\n    if (true) {\n        var value_1 = el.attrsMap['v-bind:value'] || el.attrsMap[':value'];\n        var typeBinding = el.attrsMap['v-bind:type'] || el.attrsMap[':type'];\n        if (value_1 && !typeBinding) {\n            var binding = el.attrsMap['v-bind:value'] ? 'v-bind:value' : ':value';\n            warn$1(\"\".concat(binding, \"=\\\"\").concat(value_1, \"\\\" conflicts with v-model on the same element \") +\n                'because the latter already expands to a value binding internally', el.rawAttrsMap[binding]);\n        }\n    }\n    var _a = modifiers || {}, lazy = _a.lazy, number = _a.number, trim = _a.trim;\n    var needCompositionGuard = !lazy && type !== 'range';\n    var event = lazy ? 'change' : type === 'range' ? RANGE_TOKEN : 'input';\n    var valueExpression = '$event.target.value';\n    if (trim) {\n        valueExpression = \"$event.target.value.trim()\";\n    }\n    if (number) {\n        valueExpression = \"_n(\".concat(valueExpression, \")\");\n    }\n    var code = genAssignmentCode(value, valueExpression);\n    if (needCompositionGuard) {\n        code = \"if($event.target.composing)return;\".concat(code);\n    }\n    addProp(el, 'value', \"(\".concat(value, \")\"));\n    addHandler(el, event, code, null, true);\n    if (trim || number) {\n        addHandler(el, 'blur', '$forceUpdate()');\n    }\n}\n\n// normalize v-model event tokens that can only be determined at runtime.\n// it's important to place the event as the first in the array because\n// the whole point is ensuring the v-model callback gets called before\n// user-attached handlers.\nfunction normalizeEvents(on) {\n    /* istanbul ignore if */\n    if (isDef(on[RANGE_TOKEN])) {\n        // IE input[type=range] only supports `change` event\n        var event_1 = isIE ? 'change' : 'input';\n        on[event_1] = [].concat(on[RANGE_TOKEN], on[event_1] || []);\n        delete on[RANGE_TOKEN];\n    }\n    // This was originally intended to fix #4521 but no longer necessary\n    // after 2.5. Keeping it for backwards compat with generated code from < 2.4\n    /* istanbul ignore if */\n    if (isDef(on[CHECKBOX_RADIO_TOKEN])) {\n        on.change = [].concat(on[CHECKBOX_RADIO_TOKEN], on.change || []);\n        delete on[CHECKBOX_RADIO_TOKEN];\n    }\n}\nvar target;\nfunction createOnceHandler(event, handler, capture) {\n    var _target = target; // save current target element in closure\n    return function onceHandler() {\n        var res = handler.apply(null, arguments);\n        if (res !== null) {\n            remove(event, onceHandler, capture, _target);\n        }\n    };\n}\n// #9446: Firefox <= 53 (in particular, ESR 52) has incorrect Event.timeStamp\n// implementation and does not fire microtasks in between event propagation, so\n// safe to exclude.\nvar useMicrotaskFix = isUsingMicroTask && !(isFF && Number(isFF[1]) <= 53);\nfunction add(name, handler, capture, passive) {\n    // async edge case #6566: inner click event triggers patch, event handler\n    // attached to outer element during patch, and triggered again. This\n    // happens because browsers fire microtask ticks between event propagation.\n    // the solution is simple: we save the timestamp when a handler is attached,\n    // and the handler would only fire if the event passed to it was fired\n    // AFTER it was attached.\n    if (useMicrotaskFix) {\n        var attachedTimestamp_1 = currentFlushTimestamp;\n        var original_1 = handler;\n        //@ts-expect-error\n        handler = original_1._wrapper = function (e) {\n            if (\n            // no bubbling, should always fire.\n            // this is just a safety net in case event.timeStamp is unreliable in\n            // certain weird environments...\n            e.target === e.currentTarget ||\n                // event is fired after handler attachment\n                e.timeStamp >= attachedTimestamp_1 ||\n                // bail for environments that have buggy event.timeStamp implementations\n                // #9462 iOS 9 bug: event.timeStamp is 0 after history.pushState\n                // #9681 QtWebEngine event.timeStamp is negative value\n                e.timeStamp <= 0 ||\n                // #9448 bail if event is fired in another document in a multi-page\n                // electron/nw.js app, since event.timeStamp will be using a different\n                // starting reference\n                e.target.ownerDocument !== document) {\n                return original_1.apply(this, arguments);\n            }\n        };\n    }\n    target.addEventListener(name, handler, supportsPassive ? { capture: capture, passive: passive } : capture);\n}\nfunction remove(name, handler, capture, _target) {\n    (_target || target).removeEventListener(name, \n    //@ts-expect-error\n    handler._wrapper || handler, capture);\n}\nfunction updateDOMListeners(oldVnode, vnode) {\n    if (isUndef(oldVnode.data.on) && isUndef(vnode.data.on)) {\n        return;\n    }\n    var on = vnode.data.on || {};\n    var oldOn = oldVnode.data.on || {};\n    // vnode is empty when removing all listeners,\n    // and use old vnode dom element\n    target = vnode.elm || oldVnode.elm;\n    normalizeEvents(on);\n    updateListeners(on, oldOn, add, remove, createOnceHandler, vnode.context);\n    target = undefined;\n}\nvar events = {\n    create: updateDOMListeners,\n    update: updateDOMListeners,\n    // @ts-expect-error emptyNode has actually data\n    destroy: function (vnode) { return updateDOMListeners(vnode, emptyNode); }\n};\n\nvar svgContainer;\nfunction updateDOMProps(oldVnode, vnode) {\n    if (isUndef(oldVnode.data.domProps) && isUndef(vnode.data.domProps)) {\n        return;\n    }\n    var key, cur;\n    var elm = vnode.elm;\n    var oldProps = oldVnode.data.domProps || {};\n    var props = vnode.data.domProps || {};\n    // clone observed objects, as the user probably wants to mutate it\n    if (isDef(props.__ob__) || isTrue(props._v_attr_proxy)) {\n        props = vnode.data.domProps = extend({}, props);\n    }\n    for (key in oldProps) {\n        if (!(key in props)) {\n            elm[key] = '';\n        }\n    }\n    for (key in props) {\n        cur = props[key];\n        // ignore children if the node has textContent or innerHTML,\n        // as these will throw away existing DOM nodes and cause removal errors\n        // on subsequent patches (#3360)\n        if (key === 'textContent' || key === 'innerHTML') {\n            if (vnode.children)\n                vnode.children.length = 0;\n            if (cur === oldProps[key])\n                continue;\n            // #6601 work around Chrome version <= 55 bug where single textNode\n            // replaced by innerHTML/textContent retains its parentNode property\n            if (elm.childNodes.length === 1) {\n                elm.removeChild(elm.childNodes[0]);\n            }\n        }\n        if (key === 'value' && elm.tagName !== 'PROGRESS') {\n            // store value as _value as well since\n            // non-string values will be stringified\n            elm._value = cur;\n            // avoid resetting cursor position when value is the same\n            var strCur = isUndef(cur) ? '' : String(cur);\n            if (shouldUpdateValue(elm, strCur)) {\n                elm.value = strCur;\n            }\n        }\n        else if (key === 'innerHTML' &&\n            isSVG(elm.tagName) &&\n            isUndef(elm.innerHTML)) {\n            // IE doesn't support innerHTML for SVG elements\n            svgContainer = svgContainer || document.createElement('div');\n            svgContainer.innerHTML = \"<svg>\".concat(cur, \"</svg>\");\n            var svg = svgContainer.firstChild;\n            while (elm.firstChild) {\n                elm.removeChild(elm.firstChild);\n            }\n            while (svg.firstChild) {\n                elm.appendChild(svg.firstChild);\n            }\n        }\n        else if (\n        // skip the update if old and new VDOM state is the same.\n        // `value` is handled separately because the DOM value may be temporarily\n        // out of sync with VDOM state due to focus, composition and modifiers.\n        // This  #4521 by skipping the unnecessary `checked` update.\n        cur !== oldProps[key]) {\n            // some property updates can throw\n            // e.g. `value` on <progress> w/ non-finite value\n            try {\n                elm[key] = cur;\n            }\n            catch (e) { }\n        }\n    }\n}\nfunction shouldUpdateValue(elm, checkVal) {\n    return (\n    //@ts-expect-error\n    !elm.composing &&\n        (elm.tagName === 'OPTION' ||\n            isNotInFocusAndDirty(elm, checkVal) ||\n            isDirtyWithModifiers(elm, checkVal)));\n}\nfunction isNotInFocusAndDirty(elm, checkVal) {\n    // return true when textbox (.number and .trim) loses focus and its value is\n    // not equal to the updated value\n    var notInFocus = true;\n    // #6157\n    // work around IE bug when accessing document.activeElement in an iframe\n    try {\n        notInFocus = document.activeElement !== elm;\n    }\n    catch (e) { }\n    return notInFocus && elm.value !== checkVal;\n}\nfunction isDirtyWithModifiers(elm, newVal) {\n    var value = elm.value;\n    var modifiers = elm._vModifiers; // injected by v-model runtime\n    if (isDef(modifiers)) {\n        if (modifiers.number) {\n            return toNumber(value) !== toNumber(newVal);\n        }\n        if (modifiers.trim) {\n            return value.trim() !== newVal.trim();\n        }\n    }\n    return value !== newVal;\n}\nvar domProps = {\n    create: updateDOMProps,\n    update: updateDOMProps\n};\n\nvar parseStyleText = cached(function (cssText) {\n    var res = {};\n    var listDelimiter = /;(?![^(]*\\))/g;\n    var propertyDelimiter = /:(.+)/;\n    cssText.split(listDelimiter).forEach(function (item) {\n        if (item) {\n            var tmp = item.split(propertyDelimiter);\n            tmp.length > 1 && (res[tmp[0].trim()] = tmp[1].trim());\n        }\n    });\n    return res;\n});\n// merge static and dynamic style data on the same vnode\nfunction normalizeStyleData(data) {\n    var style = normalizeStyleBinding(data.style);\n    // static style is pre-processed into an object during compilation\n    // and is always a fresh object, so it's safe to merge into it\n    return data.staticStyle ? extend(data.staticStyle, style) : style;\n}\n// normalize possible array / string values into Object\nfunction normalizeStyleBinding(bindingStyle) {\n    if (Array.isArray(bindingStyle)) {\n        return toObject(bindingStyle);\n    }\n    if (typeof bindingStyle === 'string') {\n        return parseStyleText(bindingStyle);\n    }\n    return bindingStyle;\n}\n/**\n * parent component style should be after child's\n * so that parent component's style could override it\n */\nfunction getStyle(vnode, checkChild) {\n    var res = {};\n    var styleData;\n    if (checkChild) {\n        var childNode = vnode;\n        while (childNode.componentInstance) {\n            childNode = childNode.componentInstance._vnode;\n            if (childNode &&\n                childNode.data &&\n                (styleData = normalizeStyleData(childNode.data))) {\n                extend(res, styleData);\n            }\n        }\n    }\n    if ((styleData = normalizeStyleData(vnode.data))) {\n        extend(res, styleData);\n    }\n    var parentNode = vnode;\n    // @ts-expect-error parentNode.parent not VNodeWithData\n    while ((parentNode = parentNode.parent)) {\n        if (parentNode.data && (styleData = normalizeStyleData(parentNode.data))) {\n            extend(res, styleData);\n        }\n    }\n    return res;\n}\n\nvar cssVarRE = /^--/;\nvar importantRE = /\\s*!important$/;\nvar setProp = function (el, name, val) {\n    /* istanbul ignore if */\n    if (cssVarRE.test(name)) {\n        el.style.setProperty(name, val);\n    }\n    else if (importantRE.test(val)) {\n        el.style.setProperty(hyphenate(name), val.replace(importantRE, ''), 'important');\n    }\n    else {\n        var normalizedName = normalize(name);\n        if (Array.isArray(val)) {\n            // Support values array created by autoprefixer, e.g.\n            // {display: [\"-webkit-box\", \"-ms-flexbox\", \"flex\"]}\n            // Set them one by one, and the browser will only set those it can recognize\n            for (var i = 0, len = val.length; i < len; i++) {\n                el.style[normalizedName] = val[i];\n            }\n        }\n        else {\n            el.style[normalizedName] = val;\n        }\n    }\n};\nvar vendorNames = ['Webkit', 'Moz', 'ms'];\nvar emptyStyle;\nvar normalize = cached(function (prop) {\n    emptyStyle = emptyStyle || document.createElement('div').style;\n    prop = camelize(prop);\n    if (prop !== 'filter' && prop in emptyStyle) {\n        return prop;\n    }\n    var capName = prop.charAt(0).toUpperCase() + prop.slice(1);\n    for (var i = 0; i < vendorNames.length; i++) {\n        var name_1 = vendorNames[i] + capName;\n        if (name_1 in emptyStyle) {\n            return name_1;\n        }\n    }\n});\nfunction updateStyle(oldVnode, vnode) {\n    var data = vnode.data;\n    var oldData = oldVnode.data;\n    if (isUndef(data.staticStyle) &&\n        isUndef(data.style) &&\n        isUndef(oldData.staticStyle) &&\n        isUndef(oldData.style)) {\n        return;\n    }\n    var cur, name;\n    var el = vnode.elm;\n    var oldStaticStyle = oldData.staticStyle;\n    var oldStyleBinding = oldData.normalizedStyle || oldData.style || {};\n    // if static style exists, stylebinding already merged into it when doing normalizeStyleData\n    var oldStyle = oldStaticStyle || oldStyleBinding;\n    var style = normalizeStyleBinding(vnode.data.style) || {};\n    // store normalized style under a different key for next diff\n    // make sure to clone it if it's reactive, since the user likely wants\n    // to mutate it.\n    vnode.data.normalizedStyle = isDef(style.__ob__) ? extend({}, style) : style;\n    var newStyle = getStyle(vnode, true);\n    for (name in oldStyle) {\n        if (isUndef(newStyle[name])) {\n            setProp(el, name, '');\n        }\n    }\n    for (name in newStyle) {\n        cur = newStyle[name];\n        if (cur !== oldStyle[name]) {\n            // ie9 setting to null has no effect, must use empty string\n            setProp(el, name, cur == null ? '' : cur);\n        }\n    }\n}\nvar style$1 = {\n    create: updateStyle,\n    update: updateStyle\n};\n\nvar whitespaceRE$1 = /\\s+/;\n/**\n * Add class with compatibility for SVG since classList is not supported on\n * SVG elements in IE\n */\nfunction addClass(el, cls) {\n    /* istanbul ignore if */\n    if (!cls || !(cls = cls.trim())) {\n        return;\n    }\n    /* istanbul ignore else */\n    if (el.classList) {\n        if (cls.indexOf(' ') > -1) {\n            cls.split(whitespaceRE$1).forEach(function (c) { return el.classList.add(c); });\n        }\n        else {\n            el.classList.add(cls);\n        }\n    }\n    else {\n        var cur = \" \".concat(el.getAttribute('class') || '', \" \");\n        if (cur.indexOf(' ' + cls + ' ') < 0) {\n            el.setAttribute('class', (cur + cls).trim());\n        }\n    }\n}\n/**\n * Remove class with compatibility for SVG since classList is not supported on\n * SVG elements in IE\n */\nfunction removeClass(el, cls) {\n    /* istanbul ignore if */\n    if (!cls || !(cls = cls.trim())) {\n        return;\n    }\n    /* istanbul ignore else */\n    if (el.classList) {\n        if (cls.indexOf(' ') > -1) {\n            cls.split(whitespaceRE$1).forEach(function (c) { return el.classList.remove(c); });\n        }\n        else {\n            el.classList.remove(cls);\n        }\n        if (!el.classList.length) {\n            el.removeAttribute('class');\n        }\n    }\n    else {\n        var cur = \" \".concat(el.getAttribute('class') || '', \" \");\n        var tar = ' ' + cls + ' ';\n        while (cur.indexOf(tar) >= 0) {\n            cur = cur.replace(tar, ' ');\n        }\n        cur = cur.trim();\n        if (cur) {\n            el.setAttribute('class', cur);\n        }\n        else {\n            el.removeAttribute('class');\n        }\n    }\n}\n\nfunction resolveTransition(def) {\n    if (!def) {\n        return;\n    }\n    /* istanbul ignore else */\n    if (typeof def === 'object') {\n        var res = {};\n        if (def.css !== false) {\n            extend(res, autoCssTransition(def.name || 'v'));\n        }\n        extend(res, def);\n        return res;\n    }\n    else if (typeof def === 'string') {\n        return autoCssTransition(def);\n    }\n}\nvar autoCssTransition = cached(function (name) {\n    return {\n        enterClass: \"\".concat(name, \"-enter\"),\n        enterToClass: \"\".concat(name, \"-enter-to\"),\n        enterActiveClass: \"\".concat(name, \"-enter-active\"),\n        leaveClass: \"\".concat(name, \"-leave\"),\n        leaveToClass: \"\".concat(name, \"-leave-to\"),\n        leaveActiveClass: \"\".concat(name, \"-leave-active\")\n    };\n});\nvar hasTransition = inBrowser && !isIE9;\nvar TRANSITION = 'transition';\nvar ANIMATION = 'animation';\n// Transition property/event sniffing\nvar transitionProp = 'transition';\nvar transitionEndEvent = 'transitionend';\nvar animationProp = 'animation';\nvar animationEndEvent = 'animationend';\nif (hasTransition) {\n    /* istanbul ignore if */\n    if (window.ontransitionend === undefined &&\n        window.onwebkittransitionend !== undefined) {\n        transitionProp = 'WebkitTransition';\n        transitionEndEvent = 'webkitTransitionEnd';\n    }\n    if (window.onanimationend === undefined &&\n        window.onwebkitanimationend !== undefined) {\n        animationProp = 'WebkitAnimation';\n        animationEndEvent = 'webkitAnimationEnd';\n    }\n}\n// binding to window is necessary to make hot reload work in IE in strict mode\nvar raf = inBrowser\n    ? window.requestAnimationFrame\n        ? window.requestAnimationFrame.bind(window)\n        : setTimeout\n    : /* istanbul ignore next */ function (/* istanbul ignore next */ fn) { return fn(); };\nfunction nextFrame(fn) {\n    raf(function () {\n        // @ts-expect-error\n        raf(fn);\n    });\n}\nfunction addTransitionClass(el, cls) {\n    var transitionClasses = el._transitionClasses || (el._transitionClasses = []);\n    if (transitionClasses.indexOf(cls) < 0) {\n        transitionClasses.push(cls);\n        addClass(el, cls);\n    }\n}\nfunction removeTransitionClass(el, cls) {\n    if (el._transitionClasses) {\n        remove$2(el._transitionClasses, cls);\n    }\n    removeClass(el, cls);\n}\nfunction whenTransitionEnds(el, expectedType, cb) {\n    var _a = getTransitionInfo(el, expectedType), type = _a.type, timeout = _a.timeout, propCount = _a.propCount;\n    if (!type)\n        return cb();\n    var event = type === TRANSITION ? transitionEndEvent : animationEndEvent;\n    var ended = 0;\n    var end = function () {\n        el.removeEventListener(event, onEnd);\n        cb();\n    };\n    var onEnd = function (e) {\n        if (e.target === el) {\n            if (++ended >= propCount) {\n                end();\n            }\n        }\n    };\n    setTimeout(function () {\n        if (ended < propCount) {\n            end();\n        }\n    }, timeout + 1);\n    el.addEventListener(event, onEnd);\n}\nvar transformRE = /\\b(transform|all)(,|$)/;\nfunction getTransitionInfo(el, expectedType) {\n    var styles = window.getComputedStyle(el);\n    // JSDOM may return undefined for transition properties\n    var transitionDelays = (styles[transitionProp + 'Delay'] || '').split(', ');\n    var transitionDurations = (styles[transitionProp + 'Duration'] || '').split(', ');\n    var transitionTimeout = getTimeout(transitionDelays, transitionDurations);\n    var animationDelays = (styles[animationProp + 'Delay'] || '').split(', ');\n    var animationDurations = (styles[animationProp + 'Duration'] || '').split(', ');\n    var animationTimeout = getTimeout(animationDelays, animationDurations);\n    var type;\n    var timeout = 0;\n    var propCount = 0;\n    /* istanbul ignore if */\n    if (expectedType === TRANSITION) {\n        if (transitionTimeout > 0) {\n            type = TRANSITION;\n            timeout = transitionTimeout;\n            propCount = transitionDurations.length;\n        }\n    }\n    else if (expectedType === ANIMATION) {\n        if (animationTimeout > 0) {\n            type = ANIMATION;\n            timeout = animationTimeout;\n            propCount = animationDurations.length;\n        }\n    }\n    else {\n        timeout = Math.max(transitionTimeout, animationTimeout);\n        type =\n            timeout > 0\n                ? transitionTimeout > animationTimeout\n                    ? TRANSITION\n                    : ANIMATION\n                : null;\n        propCount = type\n            ? type === TRANSITION\n                ? transitionDurations.length\n                : animationDurations.length\n            : 0;\n    }\n    var hasTransform = type === TRANSITION && transformRE.test(styles[transitionProp + 'Property']);\n    return {\n        type: type,\n        timeout: timeout,\n        propCount: propCount,\n        hasTransform: hasTransform\n    };\n}\nfunction getTimeout(delays, durations) {\n    /* istanbul ignore next */\n    while (delays.length < durations.length) {\n        delays = delays.concat(delays);\n    }\n    return Math.max.apply(null, durations.map(function (d, i) {\n        return toMs(d) + toMs(delays[i]);\n    }));\n}\n// Old versions of Chromium (below 61.0.3163.100) formats floating pointer numbers\n// in a locale-dependent way, using a comma instead of a dot.\n// If comma is not replaced with a dot, the input will be rounded down (i.e. acting\n// as a floor function) causing unexpected behaviors\nfunction toMs(s) {\n    return Number(s.slice(0, -1).replace(',', '.')) * 1000;\n}\n\nfunction enter(vnode, toggleDisplay) {\n    var el = vnode.elm;\n    // call leave callback now\n    if (isDef(el._leaveCb)) {\n        el._leaveCb.cancelled = true;\n        el._leaveCb();\n    }\n    var data = resolveTransition(vnode.data.transition);\n    if (isUndef(data)) {\n        return;\n    }\n    /* istanbul ignore if */\n    if (isDef(el._enterCb) || el.nodeType !== 1) {\n        return;\n    }\n    var css = data.css, type = data.type, enterClass = data.enterClass, enterToClass = data.enterToClass, enterActiveClass = data.enterActiveClass, appearClass = data.appearClass, appearToClass = data.appearToClass, appearActiveClass = data.appearActiveClass, beforeEnter = data.beforeEnter, enter = data.enter, afterEnter = data.afterEnter, enterCancelled = data.enterCancelled, beforeAppear = data.beforeAppear, appear = data.appear, afterAppear = data.afterAppear, appearCancelled = data.appearCancelled, duration = data.duration;\n    // activeInstance will always be the <transition> component managing this\n    // transition. One edge case to check is when the <transition> is placed\n    // as the root node of a child component. In that case we need to check\n    // <transition>'s parent for appear check.\n    var context = activeInstance;\n    var transitionNode = activeInstance.$vnode;\n    while (transitionNode && transitionNode.parent) {\n        context = transitionNode.context;\n        transitionNode = transitionNode.parent;\n    }\n    var isAppear = !context._isMounted || !vnode.isRootInsert;\n    if (isAppear && !appear && appear !== '') {\n        return;\n    }\n    var startClass = isAppear && appearClass ? appearClass : enterClass;\n    var activeClass = isAppear && appearActiveClass ? appearActiveClass : enterActiveClass;\n    var toClass = isAppear && appearToClass ? appearToClass : enterToClass;\n    var beforeEnterHook = isAppear ? beforeAppear || beforeEnter : beforeEnter;\n    var enterHook = isAppear ? (isFunction(appear) ? appear : enter) : enter;\n    var afterEnterHook = isAppear ? afterAppear || afterEnter : afterEnter;\n    var enterCancelledHook = isAppear\n        ? appearCancelled || enterCancelled\n        : enterCancelled;\n    var explicitEnterDuration = toNumber(isObject(duration) ? duration.enter : duration);\n    if ( true && explicitEnterDuration != null) {\n        checkDuration(explicitEnterDuration, 'enter', vnode);\n    }\n    var expectsCSS = css !== false && !isIE9;\n    var userWantsControl = getHookArgumentsLength(enterHook);\n    var cb = (el._enterCb = once(function () {\n        if (expectsCSS) {\n            removeTransitionClass(el, toClass);\n            removeTransitionClass(el, activeClass);\n        }\n        // @ts-expect-error\n        if (cb.cancelled) {\n            if (expectsCSS) {\n                removeTransitionClass(el, startClass);\n            }\n            enterCancelledHook && enterCancelledHook(el);\n        }\n        else {\n            afterEnterHook && afterEnterHook(el);\n        }\n        el._enterCb = null;\n    }));\n    if (!vnode.data.show) {\n        // remove pending leave element on enter by injecting an insert hook\n        mergeVNodeHook(vnode, 'insert', function () {\n            var parent = el.parentNode;\n            var pendingNode = parent && parent._pending && parent._pending[vnode.key];\n            if (pendingNode &&\n                pendingNode.tag === vnode.tag &&\n                pendingNode.elm._leaveCb) {\n                pendingNode.elm._leaveCb();\n            }\n            enterHook && enterHook(el, cb);\n        });\n    }\n    // start enter transition\n    beforeEnterHook && beforeEnterHook(el);\n    if (expectsCSS) {\n        addTransitionClass(el, startClass);\n        addTransitionClass(el, activeClass);\n        nextFrame(function () {\n            removeTransitionClass(el, startClass);\n            // @ts-expect-error\n            if (!cb.cancelled) {\n                addTransitionClass(el, toClass);\n                if (!userWantsControl) {\n                    if (isValidDuration(explicitEnterDuration)) {\n                        setTimeout(cb, explicitEnterDuration);\n                    }\n                    else {\n                        whenTransitionEnds(el, type, cb);\n                    }\n                }\n            }\n        });\n    }\n    if (vnode.data.show) {\n        toggleDisplay && toggleDisplay();\n        enterHook && enterHook(el, cb);\n    }\n    if (!expectsCSS && !userWantsControl) {\n        cb();\n    }\n}\nfunction leave(vnode, rm) {\n    var el = vnode.elm;\n    // call enter callback now\n    if (isDef(el._enterCb)) {\n        el._enterCb.cancelled = true;\n        el._enterCb();\n    }\n    var data = resolveTransition(vnode.data.transition);\n    if (isUndef(data) || el.nodeType !== 1) {\n        return rm();\n    }\n    /* istanbul ignore if */\n    if (isDef(el._leaveCb)) {\n        return;\n    }\n    var css = data.css, type = data.type, leaveClass = data.leaveClass, leaveToClass = data.leaveToClass, leaveActiveClass = data.leaveActiveClass, beforeLeave = data.beforeLeave, leave = data.leave, afterLeave = data.afterLeave, leaveCancelled = data.leaveCancelled, delayLeave = data.delayLeave, duration = data.duration;\n    var expectsCSS = css !== false && !isIE9;\n    var userWantsControl = getHookArgumentsLength(leave);\n    var explicitLeaveDuration = toNumber(isObject(duration) ? duration.leave : duration);\n    if ( true && isDef(explicitLeaveDuration)) {\n        checkDuration(explicitLeaveDuration, 'leave', vnode);\n    }\n    var cb = (el._leaveCb = once(function () {\n        if (el.parentNode && el.parentNode._pending) {\n            el.parentNode._pending[vnode.key] = null;\n        }\n        if (expectsCSS) {\n            removeTransitionClass(el, leaveToClass);\n            removeTransitionClass(el, leaveActiveClass);\n        }\n        // @ts-expect-error\n        if (cb.cancelled) {\n            if (expectsCSS) {\n                removeTransitionClass(el, leaveClass);\n            }\n            leaveCancelled && leaveCancelled(el);\n        }\n        else {\n            rm();\n            afterLeave && afterLeave(el);\n        }\n        el._leaveCb = null;\n    }));\n    if (delayLeave) {\n        delayLeave(performLeave);\n    }\n    else {\n        performLeave();\n    }\n    function performLeave() {\n        // the delayed leave may have already been cancelled\n        // @ts-expect-error\n        if (cb.cancelled) {\n            return;\n        }\n        // record leaving element\n        if (!vnode.data.show && el.parentNode) {\n            (el.parentNode._pending || (el.parentNode._pending = {}))[vnode.key] =\n                vnode;\n        }\n        beforeLeave && beforeLeave(el);\n        if (expectsCSS) {\n            addTransitionClass(el, leaveClass);\n            addTransitionClass(el, leaveActiveClass);\n            nextFrame(function () {\n                removeTransitionClass(el, leaveClass);\n                // @ts-expect-error\n                if (!cb.cancelled) {\n                    addTransitionClass(el, leaveToClass);\n                    if (!userWantsControl) {\n                        if (isValidDuration(explicitLeaveDuration)) {\n                            setTimeout(cb, explicitLeaveDuration);\n                        }\n                        else {\n                            whenTransitionEnds(el, type, cb);\n                        }\n                    }\n                }\n            });\n        }\n        leave && leave(el, cb);\n        if (!expectsCSS && !userWantsControl) {\n            cb();\n        }\n    }\n}\n// only used in dev mode\nfunction checkDuration(val, name, vnode) {\n    if (typeof val !== 'number') {\n        warn$2(\"<transition> explicit \".concat(name, \" duration is not a valid number - \") +\n            \"got \".concat(JSON.stringify(val), \".\"), vnode.context);\n    }\n    else if (isNaN(val)) {\n        warn$2(\"<transition> explicit \".concat(name, \" duration is NaN - \") +\n            'the duration expression might be incorrect.', vnode.context);\n    }\n}\nfunction isValidDuration(val) {\n    return typeof val === 'number' && !isNaN(val);\n}\n/**\n * Normalize a transition hook's argument length. The hook may be:\n * - a merged hook (invoker) with the original in .fns\n * - a wrapped component method (check ._length)\n * - a plain function (.length)\n */\nfunction getHookArgumentsLength(fn) {\n    if (isUndef(fn)) {\n        return false;\n    }\n    // @ts-expect-error\n    var invokerFns = fn.fns;\n    if (isDef(invokerFns)) {\n        // invoker\n        return getHookArgumentsLength(Array.isArray(invokerFns) ? invokerFns[0] : invokerFns);\n    }\n    else {\n        // @ts-expect-error\n        return (fn._length || fn.length) > 1;\n    }\n}\nfunction _enter(_, vnode) {\n    if (vnode.data.show !== true) {\n        enter(vnode);\n    }\n}\nvar transition = inBrowser\n    ? {\n        create: _enter,\n        activate: _enter,\n        remove: function (vnode, rm) {\n            /* istanbul ignore else */\n            if (vnode.data.show !== true) {\n                // @ts-expect-error\n                leave(vnode, rm);\n            }\n            else {\n                rm();\n            }\n        }\n    }\n    : {};\n\nvar platformModules = [attrs, klass$1, events, domProps, style$1, transition];\n\n// the directive module should be applied last, after all\n// built-in modules have been applied.\nvar modules$1 = platformModules.concat(baseModules);\nvar patch = createPatchFunction({ nodeOps: nodeOps, modules: modules$1 });\n\n/**\n * Not type checking this file because flow doesn't like attaching\n * properties to Elements.\n */\n/* istanbul ignore if */\nif (isIE9) {\n    // http://www.matts411.com/post/internet-explorer-9-oninput/\n    document.addEventListener('selectionchange', function () {\n        var el = document.activeElement;\n        // @ts-expect-error\n        if (el && el.vmodel) {\n            trigger(el, 'input');\n        }\n    });\n}\nvar directive = {\n    inserted: function (el, binding, vnode, oldVnode) {\n        if (vnode.tag === 'select') {\n            // #6903\n            if (oldVnode.elm && !oldVnode.elm._vOptions) {\n                mergeVNodeHook(vnode, 'postpatch', function () {\n                    directive.componentUpdated(el, binding, vnode);\n                });\n            }\n            else {\n                setSelected(el, binding, vnode.context);\n            }\n            el._vOptions = [].map.call(el.options, getValue);\n        }\n        else if (vnode.tag === 'textarea' || isTextInputType(el.type)) {\n            el._vModifiers = binding.modifiers;\n            if (!binding.modifiers.lazy) {\n                el.addEventListener('compositionstart', onCompositionStart);\n                el.addEventListener('compositionend', onCompositionEnd);\n                // Safari < 10.2 & UIWebView doesn't fire compositionend when\n                // switching focus before confirming composition choice\n                // this also fixes the issue where some browsers e.g. iOS Chrome\n                // fires \"change\" instead of \"input\" on autocomplete.\n                el.addEventListener('change', onCompositionEnd);\n                /* istanbul ignore if */\n                if (isIE9) {\n                    el.vmodel = true;\n                }\n            }\n        }\n    },\n    componentUpdated: function (el, binding, vnode) {\n        if (vnode.tag === 'select') {\n            setSelected(el, binding, vnode.context);\n            // in case the options rendered by v-for have changed,\n            // it's possible that the value is out-of-sync with the rendered options.\n            // detect such cases and filter out values that no longer has a matching\n            // option in the DOM.\n            var prevOptions_1 = el._vOptions;\n            var curOptions_1 = (el._vOptions = [].map.call(el.options, getValue));\n            if (curOptions_1.some(function (o, i) { return !looseEqual(o, prevOptions_1[i]); })) {\n                // trigger change event if\n                // no matching option found for at least one value\n                var needReset = el.multiple\n                    ? binding.value.some(function (v) { return hasNoMatchingOption(v, curOptions_1); })\n                    : binding.value !== binding.oldValue &&\n                        hasNoMatchingOption(binding.value, curOptions_1);\n                if (needReset) {\n                    trigger(el, 'change');\n                }\n            }\n        }\n    }\n};\nfunction setSelected(el, binding, vm) {\n    actuallySetSelected(el, binding, vm);\n    /* istanbul ignore if */\n    if (isIE || isEdge) {\n        setTimeout(function () {\n            actuallySetSelected(el, binding, vm);\n        }, 0);\n    }\n}\nfunction actuallySetSelected(el, binding, vm) {\n    var value = binding.value;\n    var isMultiple = el.multiple;\n    if (isMultiple && !Array.isArray(value)) {\n         true &&\n            warn$2(\"<select multiple v-model=\\\"\".concat(binding.expression, \"\\\"> \") +\n                \"expects an Array value for its binding, but got \".concat(Object.prototype.toString\n                    .call(value)\n                    .slice(8, -1)), vm);\n        return;\n    }\n    var selected, option;\n    for (var i = 0, l = el.options.length; i < l; i++) {\n        option = el.options[i];\n        if (isMultiple) {\n            selected = looseIndexOf(value, getValue(option)) > -1;\n            if (option.selected !== selected) {\n                option.selected = selected;\n            }\n        }\n        else {\n            if (looseEqual(getValue(option), value)) {\n                if (el.selectedIndex !== i) {\n                    el.selectedIndex = i;\n                }\n                return;\n            }\n        }\n    }\n    if (!isMultiple) {\n        el.selectedIndex = -1;\n    }\n}\nfunction hasNoMatchingOption(value, options) {\n    return options.every(function (o) { return !looseEqual(o, value); });\n}\nfunction getValue(option) {\n    return '_value' in option ? option._value : option.value;\n}\nfunction onCompositionStart(e) {\n    e.target.composing = true;\n}\nfunction onCompositionEnd(e) {\n    // prevent triggering an input event for no reason\n    if (!e.target.composing)\n        return;\n    e.target.composing = false;\n    trigger(e.target, 'input');\n}\nfunction trigger(el, type) {\n    var e = document.createEvent('HTMLEvents');\n    e.initEvent(type, true, true);\n    el.dispatchEvent(e);\n}\n\n// recursively search for possible transition defined inside the component root\nfunction locateNode(vnode) {\n    // @ts-expect-error\n    return vnode.componentInstance && (!vnode.data || !vnode.data.transition)\n        ? locateNode(vnode.componentInstance._vnode)\n        : vnode;\n}\nvar show = {\n    bind: function (el, _a, vnode) {\n        var value = _a.value;\n        vnode = locateNode(vnode);\n        var transition = vnode.data && vnode.data.transition;\n        var originalDisplay = (el.__vOriginalDisplay =\n            el.style.display === 'none' ? '' : el.style.display);\n        if (value && transition) {\n            vnode.data.show = true;\n            enter(vnode, function () {\n                el.style.display = originalDisplay;\n            });\n        }\n        else {\n            el.style.display = value ? originalDisplay : 'none';\n        }\n    },\n    update: function (el, _a, vnode) {\n        var value = _a.value, oldValue = _a.oldValue;\n        /* istanbul ignore if */\n        if (!value === !oldValue)\n            return;\n        vnode = locateNode(vnode);\n        var transition = vnode.data && vnode.data.transition;\n        if (transition) {\n            vnode.data.show = true;\n            if (value) {\n                enter(vnode, function () {\n                    el.style.display = el.__vOriginalDisplay;\n                });\n            }\n            else {\n                leave(vnode, function () {\n                    el.style.display = 'none';\n                });\n            }\n        }\n        else {\n            el.style.display = value ? el.__vOriginalDisplay : 'none';\n        }\n    },\n    unbind: function (el, binding, vnode, oldVnode, isDestroy) {\n        if (!isDestroy) {\n            el.style.display = el.__vOriginalDisplay;\n        }\n    }\n};\n\nvar platformDirectives = {\n    model: directive,\n    show: show\n};\n\n// Provides transition support for a single element/component.\nvar transitionProps = {\n    name: String,\n    appear: Boolean,\n    css: Boolean,\n    mode: String,\n    type: String,\n    enterClass: String,\n    leaveClass: String,\n    enterToClass: String,\n    leaveToClass: String,\n    enterActiveClass: String,\n    leaveActiveClass: String,\n    appearClass: String,\n    appearActiveClass: String,\n    appearToClass: String,\n    duration: [Number, String, Object]\n};\n// in case the child is also an abstract component, e.g. <keep-alive>\n// we want to recursively retrieve the real component to be rendered\nfunction getRealChild(vnode) {\n    var compOptions = vnode && vnode.componentOptions;\n    if (compOptions && compOptions.Ctor.options.abstract) {\n        return getRealChild(getFirstComponentChild(compOptions.children));\n    }\n    else {\n        return vnode;\n    }\n}\nfunction extractTransitionData(comp) {\n    var data = {};\n    var options = comp.$options;\n    // props\n    for (var key in options.propsData) {\n        data[key] = comp[key];\n    }\n    // events.\n    // extract listeners and pass them directly to the transition methods\n    var listeners = options._parentListeners;\n    for (var key in listeners) {\n        data[camelize(key)] = listeners[key];\n    }\n    return data;\n}\nfunction placeholder(h, rawChild) {\n    // @ts-expect-error\n    if (/\\d-keep-alive$/.test(rawChild.tag)) {\n        return h('keep-alive', {\n            props: rawChild.componentOptions.propsData\n        });\n    }\n}\nfunction hasParentTransition(vnode) {\n    while ((vnode = vnode.parent)) {\n        if (vnode.data.transition) {\n            return true;\n        }\n    }\n}\nfunction isSameChild(child, oldChild) {\n    return oldChild.key === child.key && oldChild.tag === child.tag;\n}\nvar isNotTextNode = function (c) { return c.tag || isAsyncPlaceholder(c); };\nvar isVShowDirective = function (d) { return d.name === 'show'; };\nvar Transition = {\n    name: 'transition',\n    props: transitionProps,\n    abstract: true,\n    render: function (h) {\n        var _this = this;\n        var children = this.$slots.default;\n        if (!children) {\n            return;\n        }\n        // filter out text nodes (possible whitespaces)\n        children = children.filter(isNotTextNode);\n        /* istanbul ignore if */\n        if (!children.length) {\n            return;\n        }\n        // warn multiple elements\n        if ( true && children.length > 1) {\n            warn$2('<transition> can only be used on a single element. Use ' +\n                '<transition-group> for lists.', this.$parent);\n        }\n        var mode = this.mode;\n        // warn invalid mode\n        if ( true && mode && mode !== 'in-out' && mode !== 'out-in') {\n            warn$2('invalid <transition> mode: ' + mode, this.$parent);\n        }\n        var rawChild = children[0];\n        // if this is a component root node and the component's\n        // parent container node also has transition, skip.\n        if (hasParentTransition(this.$vnode)) {\n            return rawChild;\n        }\n        // apply transition data to child\n        // use getRealChild() to ignore abstract components e.g. keep-alive\n        var child = getRealChild(rawChild);\n        /* istanbul ignore if */\n        if (!child) {\n            return rawChild;\n        }\n        if (this._leaving) {\n            return placeholder(h, rawChild);\n        }\n        // ensure a key that is unique to the vnode type and to this transition\n        // component instance. This key will be used to remove pending leaving nodes\n        // during entering.\n        var id = \"__transition-\".concat(this._uid, \"-\");\n        child.key =\n            child.key == null\n                ? child.isComment\n                    ? id + 'comment'\n                    : id + child.tag\n                : isPrimitive(child.key)\n                    ? String(child.key).indexOf(id) === 0\n                        ? child.key\n                        : id + child.key\n                    : child.key;\n        var data = ((child.data || (child.data = {})).transition =\n            extractTransitionData(this));\n        var oldRawChild = this._vnode;\n        var oldChild = getRealChild(oldRawChild);\n        // mark v-show\n        // so that the transition module can hand over the control to the directive\n        if (child.data.directives && child.data.directives.some(isVShowDirective)) {\n            child.data.show = true;\n        }\n        if (oldChild &&\n            oldChild.data &&\n            !isSameChild(child, oldChild) &&\n            !isAsyncPlaceholder(oldChild) &&\n            // #6687 component root is a comment node\n            !(oldChild.componentInstance &&\n                oldChild.componentInstance._vnode.isComment)) {\n            // replace old child transition data with fresh one\n            // important for dynamic transitions!\n            var oldData = (oldChild.data.transition = extend({}, data));\n            // handle transition mode\n            if (mode === 'out-in') {\n                // return placeholder node and queue update when leave finishes\n                this._leaving = true;\n                mergeVNodeHook(oldData, 'afterLeave', function () {\n                    _this._leaving = false;\n                    _this.$forceUpdate();\n                });\n                return placeholder(h, rawChild);\n            }\n            else if (mode === 'in-out') {\n                if (isAsyncPlaceholder(child)) {\n                    return oldRawChild;\n                }\n                var delayedLeave_1;\n                var performLeave = function () {\n                    delayedLeave_1();\n                };\n                mergeVNodeHook(data, 'afterEnter', performLeave);\n                mergeVNodeHook(data, 'enterCancelled', performLeave);\n                mergeVNodeHook(oldData, 'delayLeave', function (leave) {\n                    delayedLeave_1 = leave;\n                });\n            }\n        }\n        return rawChild;\n    }\n};\n\n// Provides transition support for list items.\nvar props = extend({\n    tag: String,\n    moveClass: String\n}, transitionProps);\ndelete props.mode;\nvar TransitionGroup = {\n    props: props,\n    beforeMount: function () {\n        var _this = this;\n        var update = this._update;\n        this._update = function (vnode, hydrating) {\n            var restoreActiveInstance = setActiveInstance(_this);\n            // force removing pass\n            _this.__patch__(_this._vnode, _this.kept, false, // hydrating\n            true // removeOnly (!important, avoids unnecessary moves)\n            );\n            _this._vnode = _this.kept;\n            restoreActiveInstance();\n            update.call(_this, vnode, hydrating);\n        };\n    },\n    render: function (h) {\n        var tag = this.tag || this.$vnode.data.tag || 'span';\n        var map = Object.create(null);\n        var prevChildren = (this.prevChildren = this.children);\n        var rawChildren = this.$slots.default || [];\n        var children = (this.children = []);\n        var transitionData = extractTransitionData(this);\n        for (var i = 0; i < rawChildren.length; i++) {\n            var c = rawChildren[i];\n            if (c.tag) {\n                if (c.key != null && String(c.key).indexOf('__vlist') !== 0) {\n                    children.push(c);\n                    map[c.key] = c;\n                    (c.data || (c.data = {})).transition = transitionData;\n                }\n                else if (true) {\n                    var opts = c.componentOptions;\n                    var name_1 = opts\n                        ? getComponentName(opts.Ctor.options) || opts.tag || ''\n                        : c.tag;\n                    warn$2(\"<transition-group> children must be keyed: <\".concat(name_1, \">\"));\n                }\n            }\n        }\n        if (prevChildren) {\n            var kept = [];\n            var removed = [];\n            for (var i = 0; i < prevChildren.length; i++) {\n                var c = prevChildren[i];\n                c.data.transition = transitionData;\n                // @ts-expect-error .getBoundingClientRect is not typed in Node\n                c.data.pos = c.elm.getBoundingClientRect();\n                if (map[c.key]) {\n                    kept.push(c);\n                }\n                else {\n                    removed.push(c);\n                }\n            }\n            this.kept = h(tag, null, kept);\n            this.removed = removed;\n        }\n        return h(tag, null, children);\n    },\n    updated: function () {\n        var children = this.prevChildren;\n        var moveClass = this.moveClass || (this.name || 'v') + '-move';\n        if (!children.length || !this.hasMove(children[0].elm, moveClass)) {\n            return;\n        }\n        // we divide the work into three loops to avoid mixing DOM reads and writes\n        // in each iteration - which helps prevent layout thrashing.\n        children.forEach(callPendingCbs);\n        children.forEach(recordPosition);\n        children.forEach(applyTranslation);\n        // force reflow to put everything in position\n        // assign to this to avoid being removed in tree-shaking\n        // $flow-disable-line\n        this._reflow = document.body.offsetHeight;\n        children.forEach(function (c) {\n            if (c.data.moved) {\n                var el_1 = c.elm;\n                var s = el_1.style;\n                addTransitionClass(el_1, moveClass);\n                s.transform = s.WebkitTransform = s.transitionDuration = '';\n                el_1.addEventListener(transitionEndEvent, (el_1._moveCb = function cb(e) {\n                    if (e && e.target !== el_1) {\n                        return;\n                    }\n                    if (!e || /transform$/.test(e.propertyName)) {\n                        el_1.removeEventListener(transitionEndEvent, cb);\n                        el_1._moveCb = null;\n                        removeTransitionClass(el_1, moveClass);\n                    }\n                }));\n            }\n        });\n    },\n    methods: {\n        hasMove: function (el, moveClass) {\n            /* istanbul ignore if */\n            if (!hasTransition) {\n                return false;\n            }\n            /* istanbul ignore if */\n            if (this._hasMove) {\n                return this._hasMove;\n            }\n            // Detect whether an element with the move class applied has\n            // CSS transitions. Since the element may be inside an entering\n            // transition at this very moment, we make a clone of it and remove\n            // all other transition classes applied to ensure only the move class\n            // is applied.\n            var clone = el.cloneNode();\n            if (el._transitionClasses) {\n                el._transitionClasses.forEach(function (cls) {\n                    removeClass(clone, cls);\n                });\n            }\n            addClass(clone, moveClass);\n            clone.style.display = 'none';\n            this.$el.appendChild(clone);\n            var info = getTransitionInfo(clone);\n            this.$el.removeChild(clone);\n            return (this._hasMove = info.hasTransform);\n        }\n    }\n};\nfunction callPendingCbs(c) {\n    /* istanbul ignore if */\n    if (c.elm._moveCb) {\n        c.elm._moveCb();\n    }\n    /* istanbul ignore if */\n    if (c.elm._enterCb) {\n        c.elm._enterCb();\n    }\n}\nfunction recordPosition(c) {\n    c.data.newPos = c.elm.getBoundingClientRect();\n}\nfunction applyTranslation(c) {\n    var oldPos = c.data.pos;\n    var newPos = c.data.newPos;\n    var dx = oldPos.left - newPos.left;\n    var dy = oldPos.top - newPos.top;\n    if (dx || dy) {\n        c.data.moved = true;\n        var s = c.elm.style;\n        s.transform = s.WebkitTransform = \"translate(\".concat(dx, \"px,\").concat(dy, \"px)\");\n        s.transitionDuration = '0s';\n    }\n}\n\nvar platformComponents = {\n    Transition: Transition,\n    TransitionGroup: TransitionGroup\n};\n\n// install platform specific utils\nVue.config.mustUseProp = mustUseProp;\nVue.config.isReservedTag = isReservedTag;\nVue.config.isReservedAttr = isReservedAttr;\nVue.config.getTagNamespace = getTagNamespace;\nVue.config.isUnknownElement = isUnknownElement;\n// install platform runtime directives & components\nextend(Vue.options.directives, platformDirectives);\nextend(Vue.options.components, platformComponents);\n// install platform patch function\nVue.prototype.__patch__ = inBrowser ? patch : noop;\n// public mount method\nVue.prototype.$mount = function (el, hydrating) {\n    el = el && inBrowser ? query(el) : undefined;\n    return mountComponent(this, el, hydrating);\n};\n// devtools global hook\n/* istanbul ignore next */\nif (inBrowser) {\n    setTimeout(function () {\n        if (config.devtools) {\n            if (devtools) {\n                devtools.emit('init', Vue);\n            }\n            else if (true) {\n                // @ts-expect-error\n                console[console.info ? 'info' : 'log']('Download the Vue Devtools extension for a better development experience:\\n' +\n                    'https://github.com/vuejs/vue-devtools');\n            }\n        }\n        if ( true &&\n            config.productionTip !== false &&\n            typeof console !== 'undefined') {\n            // @ts-expect-error\n            console[console.info ? 'info' : 'log'](\"You are running Vue in development mode.\\n\" +\n                \"Make sure to turn on production mode when deploying for production.\\n\" +\n                \"See more tips at https://vuejs.org/guide/deployment.html\");\n        }\n    }, 0);\n}\n\nvar defaultTagRE = /\\{\\{((?:.|\\r?\\n)+?)\\}\\}/g;\nvar regexEscapeRE = /[-.*+?^${}()|[\\]\\/\\\\]/g;\nvar buildRegex = cached(function (delimiters) {\n    var open = delimiters[0].replace(regexEscapeRE, '\\\\$&');\n    var close = delimiters[1].replace(regexEscapeRE, '\\\\$&');\n    return new RegExp(open + '((?:.|\\\\n)+?)' + close, 'g');\n});\nfunction parseText(text, delimiters) {\n    //@ts-expect-error\n    var tagRE = delimiters ? buildRegex(delimiters) : defaultTagRE;\n    if (!tagRE.test(text)) {\n        return;\n    }\n    var tokens = [];\n    var rawTokens = [];\n    var lastIndex = (tagRE.lastIndex = 0);\n    var match, index, tokenValue;\n    while ((match = tagRE.exec(text))) {\n        index = match.index;\n        // push text token\n        if (index > lastIndex) {\n            rawTokens.push((tokenValue = text.slice(lastIndex, index)));\n            tokens.push(JSON.stringify(tokenValue));\n        }\n        // tag token\n        var exp = parseFilters(match[1].trim());\n        tokens.push(\"_s(\".concat(exp, \")\"));\n        rawTokens.push({ '@binding': exp });\n        lastIndex = index + match[0].length;\n    }\n    if (lastIndex < text.length) {\n        rawTokens.push((tokenValue = text.slice(lastIndex)));\n        tokens.push(JSON.stringify(tokenValue));\n    }\n    return {\n        expression: tokens.join('+'),\n        tokens: rawTokens\n    };\n}\n\nfunction transformNode$1(el, options) {\n    var warn = options.warn || baseWarn;\n    var staticClass = getAndRemoveAttr(el, 'class');\n    if ( true && staticClass) {\n        var res = parseText(staticClass, options.delimiters);\n        if (res) {\n            warn(\"class=\\\"\".concat(staticClass, \"\\\": \") +\n                'Interpolation inside attributes has been removed. ' +\n                'Use v-bind or the colon shorthand instead. For example, ' +\n                'instead of <div class=\"{{ val }}\">, use <div :class=\"val\">.', el.rawAttrsMap['class']);\n        }\n    }\n    if (staticClass) {\n        el.staticClass = JSON.stringify(staticClass.replace(/\\s+/g, ' ').trim());\n    }\n    var classBinding = getBindingAttr(el, 'class', false /* getStatic */);\n    if (classBinding) {\n        el.classBinding = classBinding;\n    }\n}\nfunction genData$2(el) {\n    var data = '';\n    if (el.staticClass) {\n        data += \"staticClass:\".concat(el.staticClass, \",\");\n    }\n    if (el.classBinding) {\n        data += \"class:\".concat(el.classBinding, \",\");\n    }\n    return data;\n}\nvar klass = {\n    staticKeys: ['staticClass'],\n    transformNode: transformNode$1,\n    genData: genData$2\n};\n\nfunction transformNode(el, options) {\n    var warn = options.warn || baseWarn;\n    var staticStyle = getAndRemoveAttr(el, 'style');\n    if (staticStyle) {\n        /* istanbul ignore if */\n        if (true) {\n            var res = parseText(staticStyle, options.delimiters);\n            if (res) {\n                warn(\"style=\\\"\".concat(staticStyle, \"\\\": \") +\n                    'Interpolation inside attributes has been removed. ' +\n                    'Use v-bind or the colon shorthand instead. For example, ' +\n                    'instead of <div style=\"{{ val }}\">, use <div :style=\"val\">.', el.rawAttrsMap['style']);\n            }\n        }\n        el.staticStyle = JSON.stringify(parseStyleText(staticStyle));\n    }\n    var styleBinding = getBindingAttr(el, 'style', false /* getStatic */);\n    if (styleBinding) {\n        el.styleBinding = styleBinding;\n    }\n}\nfunction genData$1(el) {\n    var data = '';\n    if (el.staticStyle) {\n        data += \"staticStyle:\".concat(el.staticStyle, \",\");\n    }\n    if (el.styleBinding) {\n        data += \"style:(\".concat(el.styleBinding, \"),\");\n    }\n    return data;\n}\nvar style = {\n    staticKeys: ['staticStyle'],\n    transformNode: transformNode,\n    genData: genData$1\n};\n\nvar decoder;\nvar he = {\n    decode: function (html) {\n        decoder = decoder || document.createElement('div');\n        decoder.innerHTML = html;\n        return decoder.textContent;\n    }\n};\n\nvar isUnaryTag = makeMap('area,base,br,col,embed,frame,hr,img,input,isindex,keygen,' +\n    'link,meta,param,source,track,wbr');\n// Elements that you can, intentionally, leave open\n// (and which close themselves)\nvar canBeLeftOpenTag = makeMap('colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source');\n// HTML5 tags https://html.spec.whatwg.org/multipage/indices.html#elements-3\n// Phrasing Content https://html.spec.whatwg.org/multipage/dom.html#phrasing-content\nvar isNonPhrasingTag = makeMap('address,article,aside,base,blockquote,body,caption,col,colgroup,dd,' +\n    'details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,' +\n    'h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,' +\n    'optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,' +\n    'title,tr,track');\n\n/**\n * Not type-checking this file because it's mostly vendor code.\n */\n// Regular Expressions for parsing tags and attributes\nvar attribute = /^\\s*([^\\s\"'<>\\/=]+)(?:\\s*(=)\\s*(?:\"([^\"]*)\"+|'([^']*)'+|([^\\s\"'=<>`]+)))?/;\nvar dynamicArgAttribute = /^\\s*((?:v-[\\w-]+:|@|:|#)\\[[^=]+?\\][^\\s\"'<>\\/=]*)(?:\\s*(=)\\s*(?:\"([^\"]*)\"+|'([^']*)'+|([^\\s\"'=<>`]+)))?/;\nvar ncname = \"[a-zA-Z_][\\\\-\\\\.0-9_a-zA-Z\".concat(unicodeRegExp.source, \"]*\");\nvar qnameCapture = \"((?:\".concat(ncname, \"\\\\:)?\").concat(ncname, \")\");\nvar startTagOpen = new RegExp(\"^<\".concat(qnameCapture));\nvar startTagClose = /^\\s*(\\/?)>/;\nvar endTag = new RegExp(\"^<\\\\/\".concat(qnameCapture, \"[^>]*>\"));\nvar doctype = /^<!DOCTYPE [^>]+>/i;\n// #7298: escape - to avoid being passed as HTML comment when inlined in page\nvar comment = /^<!\\--/;\nvar conditionalComment = /^<!\\[/;\n// Special Elements (can contain anything)\nvar isPlainTextElement = makeMap('script,style,textarea', true);\nvar reCache = {};\nvar decodingMap = {\n    '&lt;': '<',\n    '&gt;': '>',\n    '&quot;': '\"',\n    '&amp;': '&',\n    '&#10;': '\\n',\n    '&#9;': '\\t',\n    '&#39;': \"'\"\n};\nvar encodedAttr = /&(?:lt|gt|quot|amp|#39);/g;\nvar encodedAttrWithNewLines = /&(?:lt|gt|quot|amp|#39|#10|#9);/g;\n// #5992\nvar isIgnoreNewlineTag = makeMap('pre,textarea', true);\nvar shouldIgnoreFirstNewline = function (tag, html) {\n    return tag && isIgnoreNewlineTag(tag) && html[0] === '\\n';\n};\nfunction decodeAttr(value, shouldDecodeNewlines) {\n    var re = shouldDecodeNewlines ? encodedAttrWithNewLines : encodedAttr;\n    return value.replace(re, function (match) { return decodingMap[match]; });\n}\nfunction parseHTML(html, options) {\n    var stack = [];\n    var expectHTML = options.expectHTML;\n    var isUnaryTag = options.isUnaryTag || no;\n    var canBeLeftOpenTag = options.canBeLeftOpenTag || no;\n    var index = 0;\n    var last, lastTag;\n    var _loop_1 = function () {\n        last = html;\n        // Make sure we're not in a plaintext content element like script/style\n        if (!lastTag || !isPlainTextElement(lastTag)) {\n            var textEnd = html.indexOf('<');\n            if (textEnd === 0) {\n                // Comment:\n                if (comment.test(html)) {\n                    var commentEnd = html.indexOf('-->');\n                    if (commentEnd >= 0) {\n                        if (options.shouldKeepComment && options.comment) {\n                            options.comment(html.substring(4, commentEnd), index, index + commentEnd + 3);\n                        }\n                        advance(commentEnd + 3);\n                        return \"continue\";\n                    }\n                }\n                // http://en.wikipedia.org/wiki/Conditional_comment#Downlevel-revealed_conditional_comment\n                if (conditionalComment.test(html)) {\n                    var conditionalEnd = html.indexOf(']>');\n                    if (conditionalEnd >= 0) {\n                        advance(conditionalEnd + 2);\n                        return \"continue\";\n                    }\n                }\n                // Doctype:\n                var doctypeMatch = html.match(doctype);\n                if (doctypeMatch) {\n                    advance(doctypeMatch[0].length);\n                    return \"continue\";\n                }\n                // End tag:\n                var endTagMatch = html.match(endTag);\n                if (endTagMatch) {\n                    var curIndex = index;\n                    advance(endTagMatch[0].length);\n                    parseEndTag(endTagMatch[1], curIndex, index);\n                    return \"continue\";\n                }\n                // Start tag:\n                var startTagMatch = parseStartTag();\n                if (startTagMatch) {\n                    handleStartTag(startTagMatch);\n                    if (shouldIgnoreFirstNewline(startTagMatch.tagName, html)) {\n                        advance(1);\n                    }\n                    return \"continue\";\n                }\n            }\n            var text = void 0, rest = void 0, next = void 0;\n            if (textEnd >= 0) {\n                rest = html.slice(textEnd);\n                while (!endTag.test(rest) &&\n                    !startTagOpen.test(rest) &&\n                    !comment.test(rest) &&\n                    !conditionalComment.test(rest)) {\n                    // < in plain text, be forgiving and treat it as text\n                    next = rest.indexOf('<', 1);\n                    if (next < 0)\n                        break;\n                    textEnd += next;\n                    rest = html.slice(textEnd);\n                }\n                text = html.substring(0, textEnd);\n            }\n            if (textEnd < 0) {\n                text = html;\n            }\n            if (text) {\n                advance(text.length);\n            }\n            if (options.chars && text) {\n                options.chars(text, index - text.length, index);\n            }\n        }\n        else {\n            var endTagLength_1 = 0;\n            var stackedTag_1 = lastTag.toLowerCase();\n            var reStackedTag = reCache[stackedTag_1] ||\n                (reCache[stackedTag_1] = new RegExp('([\\\\s\\\\S]*?)(</' + stackedTag_1 + '[^>]*>)', 'i'));\n            var rest = html.replace(reStackedTag, function (all, text, endTag) {\n                endTagLength_1 = endTag.length;\n                if (!isPlainTextElement(stackedTag_1) && stackedTag_1 !== 'noscript') {\n                    text = text\n                        .replace(/<!\\--([\\s\\S]*?)-->/g, '$1') // #7298\n                        .replace(/<!\\[CDATA\\[([\\s\\S]*?)]]>/g, '$1');\n                }\n                if (shouldIgnoreFirstNewline(stackedTag_1, text)) {\n                    text = text.slice(1);\n                }\n                if (options.chars) {\n                    options.chars(text);\n                }\n                return '';\n            });\n            index += html.length - rest.length;\n            html = rest;\n            parseEndTag(stackedTag_1, index - endTagLength_1, index);\n        }\n        if (html === last) {\n            options.chars && options.chars(html);\n            if ( true && !stack.length && options.warn) {\n                options.warn(\"Mal-formatted tag at end of template: \\\"\".concat(html, \"\\\"\"), {\n                    start: index + html.length\n                });\n            }\n            return \"break\";\n        }\n    };\n    while (html) {\n        var state_1 = _loop_1();\n        if (state_1 === \"break\")\n            break;\n    }\n    // Clean up any remaining tags\n    parseEndTag();\n    function advance(n) {\n        index += n;\n        html = html.substring(n);\n    }\n    function parseStartTag() {\n        var start = html.match(startTagOpen);\n        if (start) {\n            var match = {\n                tagName: start[1],\n                attrs: [],\n                start: index\n            };\n            advance(start[0].length);\n            var end = void 0, attr = void 0;\n            while (!(end = html.match(startTagClose)) &&\n                (attr = html.match(dynamicArgAttribute) || html.match(attribute))) {\n                attr.start = index;\n                advance(attr[0].length);\n                attr.end = index;\n                match.attrs.push(attr);\n            }\n            if (end) {\n                match.unarySlash = end[1];\n                advance(end[0].length);\n                match.end = index;\n                return match;\n            }\n        }\n    }\n    function handleStartTag(match) {\n        var tagName = match.tagName;\n        var unarySlash = match.unarySlash;\n        if (expectHTML) {\n            if (lastTag === 'p' && isNonPhrasingTag(tagName)) {\n                parseEndTag(lastTag);\n            }\n            if (canBeLeftOpenTag(tagName) && lastTag === tagName) {\n                parseEndTag(tagName);\n            }\n        }\n        var unary = isUnaryTag(tagName) || !!unarySlash;\n        var l = match.attrs.length;\n        var attrs = new Array(l);\n        for (var i = 0; i < l; i++) {\n            var args = match.attrs[i];\n            var value = args[3] || args[4] || args[5] || '';\n            var shouldDecodeNewlines = tagName === 'a' && args[1] === 'href'\n                ? options.shouldDecodeNewlinesForHref\n                : options.shouldDecodeNewlines;\n            attrs[i] = {\n                name: args[1],\n                value: decodeAttr(value, shouldDecodeNewlines)\n            };\n            if ( true && options.outputSourceRange) {\n                attrs[i].start = args.start + args[0].match(/^\\s*/).length;\n                attrs[i].end = args.end;\n            }\n        }\n        if (!unary) {\n            stack.push({\n                tag: tagName,\n                lowerCasedTag: tagName.toLowerCase(),\n                attrs: attrs,\n                start: match.start,\n                end: match.end\n            });\n            lastTag = tagName;\n        }\n        if (options.start) {\n            options.start(tagName, attrs, unary, match.start, match.end);\n        }\n    }\n    function parseEndTag(tagName, start, end) {\n        var pos, lowerCasedTagName;\n        if (start == null)\n            start = index;\n        if (end == null)\n            end = index;\n        // Find the closest opened tag of the same type\n        if (tagName) {\n            lowerCasedTagName = tagName.toLowerCase();\n            for (pos = stack.length - 1; pos >= 0; pos--) {\n                if (stack[pos].lowerCasedTag === lowerCasedTagName) {\n                    break;\n                }\n            }\n        }\n        else {\n            // If no tag name is provided, clean shop\n            pos = 0;\n        }\n        if (pos >= 0) {\n            // Close all the open elements, up the stack\n            for (var i = stack.length - 1; i >= pos; i--) {\n                if ( true && (i > pos || !tagName) && options.warn) {\n                    options.warn(\"tag <\".concat(stack[i].tag, \"> has no matching end tag.\"), {\n                        start: stack[i].start,\n                        end: stack[i].end\n                    });\n                }\n                if (options.end) {\n                    options.end(stack[i].tag, start, end);\n                }\n            }\n            // Remove the open elements from the stack\n            stack.length = pos;\n            lastTag = pos && stack[pos - 1].tag;\n        }\n        else if (lowerCasedTagName === 'br') {\n            if (options.start) {\n                options.start(tagName, [], true, start, end);\n            }\n        }\n        else if (lowerCasedTagName === 'p') {\n            if (options.start) {\n                options.start(tagName, [], false, start, end);\n            }\n            if (options.end) {\n                options.end(tagName, start, end);\n            }\n        }\n    }\n}\n\nvar onRE = /^@|^v-on:/;\nvar dirRE = /^v-|^@|^:|^#/;\nvar forAliasRE = /([\\s\\S]*?)\\s+(?:in|of)\\s+([\\s\\S]*)/;\nvar forIteratorRE = /,([^,\\}\\]]*)(?:,([^,\\}\\]]*))?$/;\nvar stripParensRE = /^\\(|\\)$/g;\nvar dynamicArgRE = /^\\[.*\\]$/;\nvar argRE = /:(.*)$/;\nvar bindRE = /^:|^\\.|^v-bind:/;\nvar modifierRE = /\\.[^.\\]]+(?=[^\\]]*$)/g;\nvar slotRE = /^v-slot(:|$)|^#/;\nvar lineBreakRE = /[\\r\\n]/;\nvar whitespaceRE = /[ \\f\\t\\r\\n]+/g;\nvar invalidAttributeRE = /[\\s\"'<>\\/=]/;\nvar decodeHTMLCached = cached(he.decode);\nvar emptySlotScopeToken = \"_empty_\";\n// configurable state\nvar warn;\nvar delimiters;\nvar transforms;\nvar preTransforms;\nvar postTransforms;\nvar platformIsPreTag;\nvar platformMustUseProp;\nvar platformGetTagNamespace;\nvar maybeComponent;\nfunction createASTElement(tag, attrs, parent) {\n    return {\n        type: 1,\n        tag: tag,\n        attrsList: attrs,\n        attrsMap: makeAttrsMap(attrs),\n        rawAttrsMap: {},\n        parent: parent,\n        children: []\n    };\n}\n/**\n * Convert HTML string to AST.\n */\nfunction parse(template, options) {\n    warn = options.warn || baseWarn;\n    platformIsPreTag = options.isPreTag || no;\n    platformMustUseProp = options.mustUseProp || no;\n    platformGetTagNamespace = options.getTagNamespace || no;\n    var isReservedTag = options.isReservedTag || no;\n    maybeComponent = function (el) {\n        return !!(el.component ||\n            el.attrsMap[':is'] ||\n            el.attrsMap['v-bind:is'] ||\n            !(el.attrsMap.is ? isReservedTag(el.attrsMap.is) : isReservedTag(el.tag)));\n    };\n    transforms = pluckModuleFunction(options.modules, 'transformNode');\n    preTransforms = pluckModuleFunction(options.modules, 'preTransformNode');\n    postTransforms = pluckModuleFunction(options.modules, 'postTransformNode');\n    delimiters = options.delimiters;\n    var stack = [];\n    var preserveWhitespace = options.preserveWhitespace !== false;\n    var whitespaceOption = options.whitespace;\n    var root;\n    var currentParent;\n    var inVPre = false;\n    var inPre = false;\n    var warned = false;\n    function warnOnce(msg, range) {\n        if (!warned) {\n            warned = true;\n            warn(msg, range);\n        }\n    }\n    function closeElement(element) {\n        trimEndingWhitespace(element);\n        if (!inVPre && !element.processed) {\n            element = processElement(element, options);\n        }\n        // tree management\n        if (!stack.length && element !== root) {\n            // allow root elements with v-if, v-else-if and v-else\n            if (root.if && (element.elseif || element.else)) {\n                if (true) {\n                    checkRootConstraints(element);\n                }\n                addIfCondition(root, {\n                    exp: element.elseif,\n                    block: element\n                });\n            }\n            else if (true) {\n                warnOnce(\"Component template should contain exactly one root element. \" +\n                    \"If you are using v-if on multiple elements, \" +\n                    \"use v-else-if to chain them instead.\", { start: element.start });\n            }\n        }\n        if (currentParent && !element.forbidden) {\n            if (element.elseif || element.else) {\n                processIfConditions(element, currentParent);\n            }\n            else {\n                if (element.slotScope) {\n                    // scoped slot\n                    // keep it in the children list so that v-else(-if) conditions can\n                    // find it as the prev node.\n                    var name_1 = element.slotTarget || '\"default\"';\n                    (currentParent.scopedSlots || (currentParent.scopedSlots = {}))[name_1] = element;\n                }\n                currentParent.children.push(element);\n                element.parent = currentParent;\n            }\n        }\n        // final children cleanup\n        // filter out scoped slots\n        element.children = element.children.filter(function (c) { return !c.slotScope; });\n        // remove trailing whitespace node again\n        trimEndingWhitespace(element);\n        // check pre state\n        if (element.pre) {\n            inVPre = false;\n        }\n        if (platformIsPreTag(element.tag)) {\n            inPre = false;\n        }\n        // apply post-transforms\n        for (var i = 0; i < postTransforms.length; i++) {\n            postTransforms[i](element, options);\n        }\n    }\n    function trimEndingWhitespace(el) {\n        // remove trailing whitespace node\n        if (!inPre) {\n            var lastNode = void 0;\n            while ((lastNode = el.children[el.children.length - 1]) &&\n                lastNode.type === 3 &&\n                lastNode.text === ' ') {\n                el.children.pop();\n            }\n        }\n    }\n    function checkRootConstraints(el) {\n        if (el.tag === 'slot' || el.tag === 'template') {\n            warnOnce(\"Cannot use <\".concat(el.tag, \"> as component root element because it may \") +\n                'contain multiple nodes.', { start: el.start });\n        }\n        if (el.attrsMap.hasOwnProperty('v-for')) {\n            warnOnce('Cannot use v-for on stateful component root element because ' +\n                'it renders multiple elements.', el.rawAttrsMap['v-for']);\n        }\n    }\n    parseHTML(template, {\n        warn: warn,\n        expectHTML: options.expectHTML,\n        isUnaryTag: options.isUnaryTag,\n        canBeLeftOpenTag: options.canBeLeftOpenTag,\n        shouldDecodeNewlines: options.shouldDecodeNewlines,\n        shouldDecodeNewlinesForHref: options.shouldDecodeNewlinesForHref,\n        shouldKeepComment: options.comments,\n        outputSourceRange: options.outputSourceRange,\n        start: function (tag, attrs, unary, start, end) {\n            // check namespace.\n            // inherit parent ns if there is one\n            var ns = (currentParent && currentParent.ns) || platformGetTagNamespace(tag);\n            // handle IE svg bug\n            /* istanbul ignore if */\n            if (isIE && ns === 'svg') {\n                attrs = guardIESVGBug(attrs);\n            }\n            var element = createASTElement(tag, attrs, currentParent);\n            if (ns) {\n                element.ns = ns;\n            }\n            if (true) {\n                if (options.outputSourceRange) {\n                    element.start = start;\n                    element.end = end;\n                    element.rawAttrsMap = element.attrsList.reduce(function (cumulated, attr) {\n                        cumulated[attr.name] = attr;\n                        return cumulated;\n                    }, {});\n                }\n                attrs.forEach(function (attr) {\n                    if (invalidAttributeRE.test(attr.name)) {\n                        warn(\"Invalid dynamic argument expression: attribute names cannot contain \" +\n                            \"spaces, quotes, <, >, / or =.\", options.outputSourceRange\n                            ? {\n                                start: attr.start + attr.name.indexOf(\"[\"),\n                                end: attr.start + attr.name.length\n                            }\n                            : undefined);\n                    }\n                });\n            }\n            if (isForbiddenTag(element) && !isServerRendering()) {\n                element.forbidden = true;\n                 true &&\n                    warn('Templates should only be responsible for mapping the state to the ' +\n                        'UI. Avoid placing tags with side-effects in your templates, such as ' +\n                        \"<\".concat(tag, \">\") +\n                        ', as they will not be parsed.', { start: element.start });\n            }\n            // apply pre-transforms\n            for (var i = 0; i < preTransforms.length; i++) {\n                element = preTransforms[i](element, options) || element;\n            }\n            if (!inVPre) {\n                processPre(element);\n                if (element.pre) {\n                    inVPre = true;\n                }\n            }\n            if (platformIsPreTag(element.tag)) {\n                inPre = true;\n            }\n            if (inVPre) {\n                processRawAttrs(element);\n            }\n            else if (!element.processed) {\n                // structural directives\n                processFor(element);\n                processIf(element);\n                processOnce(element);\n            }\n            if (!root) {\n                root = element;\n                if (true) {\n                    checkRootConstraints(root);\n                }\n            }\n            if (!unary) {\n                currentParent = element;\n                stack.push(element);\n            }\n            else {\n                closeElement(element);\n            }\n        },\n        end: function (tag, start, end) {\n            var element = stack[stack.length - 1];\n            // pop stack\n            stack.length -= 1;\n            currentParent = stack[stack.length - 1];\n            if ( true && options.outputSourceRange) {\n                element.end = end;\n            }\n            closeElement(element);\n        },\n        chars: function (text, start, end) {\n            if (!currentParent) {\n                if (true) {\n                    if (text === template) {\n                        warnOnce('Component template requires a root element, rather than just text.', { start: start });\n                    }\n                    else if ((text = text.trim())) {\n                        warnOnce(\"text \\\"\".concat(text, \"\\\" outside root element will be ignored.\"), {\n                            start: start\n                        });\n                    }\n                }\n                return;\n            }\n            // IE textarea placeholder bug\n            /* istanbul ignore if */\n            if (isIE &&\n                currentParent.tag === 'textarea' &&\n                currentParent.attrsMap.placeholder === text) {\n                return;\n            }\n            var children = currentParent.children;\n            if (inPre || text.trim()) {\n                text = isTextTag(currentParent)\n                    ? text\n                    : decodeHTMLCached(text);\n            }\n            else if (!children.length) {\n                // remove the whitespace-only node right after an opening tag\n                text = '';\n            }\n            else if (whitespaceOption) {\n                if (whitespaceOption === 'condense') {\n                    // in condense mode, remove the whitespace node if it contains\n                    // line break, otherwise condense to a single space\n                    text = lineBreakRE.test(text) ? '' : ' ';\n                }\n                else {\n                    text = ' ';\n                }\n            }\n            else {\n                text = preserveWhitespace ? ' ' : '';\n            }\n            if (text) {\n                if (!inPre && whitespaceOption === 'condense') {\n                    // condense consecutive whitespaces into single space\n                    text = text.replace(whitespaceRE, ' ');\n                }\n                var res = void 0;\n                var child = void 0;\n                if (!inVPre && text !== ' ' && (res = parseText(text, delimiters))) {\n                    child = {\n                        type: 2,\n                        expression: res.expression,\n                        tokens: res.tokens,\n                        text: text\n                    };\n                }\n                else if (text !== ' ' ||\n                    !children.length ||\n                    children[children.length - 1].text !== ' ') {\n                    child = {\n                        type: 3,\n                        text: text\n                    };\n                }\n                if (child) {\n                    if ( true && options.outputSourceRange) {\n                        child.start = start;\n                        child.end = end;\n                    }\n                    children.push(child);\n                }\n            }\n        },\n        comment: function (text, start, end) {\n            // adding anything as a sibling to the root node is forbidden\n            // comments should still be allowed, but ignored\n            if (currentParent) {\n                var child = {\n                    type: 3,\n                    text: text,\n                    isComment: true\n                };\n                if ( true && options.outputSourceRange) {\n                    child.start = start;\n                    child.end = end;\n                }\n                currentParent.children.push(child);\n            }\n        }\n    });\n    return root;\n}\nfunction processPre(el) {\n    if (getAndRemoveAttr(el, 'v-pre') != null) {\n        el.pre = true;\n    }\n}\nfunction processRawAttrs(el) {\n    var list = el.attrsList;\n    var len = list.length;\n    if (len) {\n        var attrs = (el.attrs = new Array(len));\n        for (var i = 0; i < len; i++) {\n            attrs[i] = {\n                name: list[i].name,\n                value: JSON.stringify(list[i].value)\n            };\n            if (list[i].start != null) {\n                attrs[i].start = list[i].start;\n                attrs[i].end = list[i].end;\n            }\n        }\n    }\n    else if (!el.pre) {\n        // non root node in pre blocks with no attributes\n        el.plain = true;\n    }\n}\nfunction processElement(element, options) {\n    processKey(element);\n    // determine whether this is a plain element after\n    // removing structural attributes\n    element.plain =\n        !element.key && !element.scopedSlots && !element.attrsList.length;\n    processRef(element);\n    processSlotContent(element);\n    processSlotOutlet(element);\n    processComponent(element);\n    for (var i = 0; i < transforms.length; i++) {\n        element = transforms[i](element, options) || element;\n    }\n    processAttrs(element);\n    return element;\n}\nfunction processKey(el) {\n    var exp = getBindingAttr(el, 'key');\n    if (exp) {\n        if (true) {\n            if (el.tag === 'template') {\n                warn(\"<template> cannot be keyed. Place the key on real elements instead.\", getRawBindingAttr(el, 'key'));\n            }\n            if (el.for) {\n                var iterator = el.iterator2 || el.iterator1;\n                var parent_1 = el.parent;\n                if (iterator &&\n                    iterator === exp &&\n                    parent_1 &&\n                    parent_1.tag === 'transition-group') {\n                    warn(\"Do not use v-for index as key on <transition-group> children, \" +\n                        \"this is the same as not using keys.\", getRawBindingAttr(el, 'key'), true /* tip */);\n                }\n            }\n        }\n        el.key = exp;\n    }\n}\nfunction processRef(el) {\n    var ref = getBindingAttr(el, 'ref');\n    if (ref) {\n        el.ref = ref;\n        el.refInFor = checkInFor(el);\n    }\n}\nfunction processFor(el) {\n    var exp;\n    if ((exp = getAndRemoveAttr(el, 'v-for'))) {\n        var res = parseFor(exp);\n        if (res) {\n            extend(el, res);\n        }\n        else if (true) {\n            warn(\"Invalid v-for expression: \".concat(exp), el.rawAttrsMap['v-for']);\n        }\n    }\n}\nfunction parseFor(exp) {\n    var inMatch = exp.match(forAliasRE);\n    if (!inMatch)\n        return;\n    var res = {};\n    res.for = inMatch[2].trim();\n    var alias = inMatch[1].trim().replace(stripParensRE, '');\n    var iteratorMatch = alias.match(forIteratorRE);\n    if (iteratorMatch) {\n        res.alias = alias.replace(forIteratorRE, '').trim();\n        res.iterator1 = iteratorMatch[1].trim();\n        if (iteratorMatch[2]) {\n            res.iterator2 = iteratorMatch[2].trim();\n        }\n    }\n    else {\n        res.alias = alias;\n    }\n    return res;\n}\nfunction processIf(el) {\n    var exp = getAndRemoveAttr(el, 'v-if');\n    if (exp) {\n        el.if = exp;\n        addIfCondition(el, {\n            exp: exp,\n            block: el\n        });\n    }\n    else {\n        if (getAndRemoveAttr(el, 'v-else') != null) {\n            el.else = true;\n        }\n        var elseif = getAndRemoveAttr(el, 'v-else-if');\n        if (elseif) {\n            el.elseif = elseif;\n        }\n    }\n}\nfunction processIfConditions(el, parent) {\n    var prev = findPrevElement(parent.children);\n    if (prev && prev.if) {\n        addIfCondition(prev, {\n            exp: el.elseif,\n            block: el\n        });\n    }\n    else if (true) {\n        warn(\"v-\".concat(el.elseif ? 'else-if=\"' + el.elseif + '\"' : 'else', \" \") +\n            \"used on element <\".concat(el.tag, \"> without corresponding v-if.\"), el.rawAttrsMap[el.elseif ? 'v-else-if' : 'v-else']);\n    }\n}\nfunction findPrevElement(children) {\n    var i = children.length;\n    while (i--) {\n        if (children[i].type === 1) {\n            return children[i];\n        }\n        else {\n            if ( true && children[i].text !== ' ') {\n                warn(\"text \\\"\".concat(children[i].text.trim(), \"\\\" between v-if and v-else(-if) \") +\n                    \"will be ignored.\", children[i]);\n            }\n            children.pop();\n        }\n    }\n}\nfunction addIfCondition(el, condition) {\n    if (!el.ifConditions) {\n        el.ifConditions = [];\n    }\n    el.ifConditions.push(condition);\n}\nfunction processOnce(el) {\n    var once = getAndRemoveAttr(el, 'v-once');\n    if (once != null) {\n        el.once = true;\n    }\n}\n// handle content being passed to a component as slot,\n// e.g. <template slot=\"xxx\">, <div slot-scope=\"xxx\">\nfunction processSlotContent(el) {\n    var slotScope;\n    if (el.tag === 'template') {\n        slotScope = getAndRemoveAttr(el, 'scope');\n        /* istanbul ignore if */\n        if ( true && slotScope) {\n            warn(\"the \\\"scope\\\" attribute for scoped slots have been deprecated and \" +\n                \"replaced by \\\"slot-scope\\\" since 2.5. The new \\\"slot-scope\\\" attribute \" +\n                \"can also be used on plain elements in addition to <template> to \" +\n                \"denote scoped slots.\", el.rawAttrsMap['scope'], true);\n        }\n        el.slotScope = slotScope || getAndRemoveAttr(el, 'slot-scope');\n    }\n    else if ((slotScope = getAndRemoveAttr(el, 'slot-scope'))) {\n        /* istanbul ignore if */\n        if ( true && el.attrsMap['v-for']) {\n            warn(\"Ambiguous combined usage of slot-scope and v-for on <\".concat(el.tag, \"> \") +\n                \"(v-for takes higher priority). Use a wrapper <template> for the \" +\n                \"scoped slot to make it clearer.\", el.rawAttrsMap['slot-scope'], true);\n        }\n        el.slotScope = slotScope;\n    }\n    // slot=\"xxx\"\n    var slotTarget = getBindingAttr(el, 'slot');\n    if (slotTarget) {\n        el.slotTarget = slotTarget === '\"\"' ? '\"default\"' : slotTarget;\n        el.slotTargetDynamic = !!(el.attrsMap[':slot'] || el.attrsMap['v-bind:slot']);\n        // preserve slot as an attribute for native shadow DOM compat\n        // only for non-scoped slots.\n        if (el.tag !== 'template' && !el.slotScope) {\n            addAttr(el, 'slot', slotTarget, getRawBindingAttr(el, 'slot'));\n        }\n    }\n    // 2.6 v-slot syntax\n    {\n        if (el.tag === 'template') {\n            // v-slot on <template>\n            var slotBinding = getAndRemoveAttrByRegex(el, slotRE);\n            if (slotBinding) {\n                if (true) {\n                    if (el.slotTarget || el.slotScope) {\n                        warn(\"Unexpected mixed usage of different slot syntaxes.\", el);\n                    }\n                    if (el.parent && !maybeComponent(el.parent)) {\n                        warn(\"<template v-slot> can only appear at the root level inside \" +\n                            \"the receiving component\", el);\n                    }\n                }\n                var _a = getSlotName(slotBinding), name_2 = _a.name, dynamic = _a.dynamic;\n                el.slotTarget = name_2;\n                el.slotTargetDynamic = dynamic;\n                el.slotScope = slotBinding.value || emptySlotScopeToken; // force it into a scoped slot for perf\n            }\n        }\n        else {\n            // v-slot on component, denotes default slot\n            var slotBinding = getAndRemoveAttrByRegex(el, slotRE);\n            if (slotBinding) {\n                if (true) {\n                    if (!maybeComponent(el)) {\n                        warn(\"v-slot can only be used on components or <template>.\", slotBinding);\n                    }\n                    if (el.slotScope || el.slotTarget) {\n                        warn(\"Unexpected mixed usage of different slot syntaxes.\", el);\n                    }\n                    if (el.scopedSlots) {\n                        warn(\"To avoid scope ambiguity, the default slot should also use \" +\n                            \"<template> syntax when there are other named slots.\", slotBinding);\n                    }\n                }\n                // add the component's children to its default slot\n                var slots = el.scopedSlots || (el.scopedSlots = {});\n                var _b = getSlotName(slotBinding), name_3 = _b.name, dynamic = _b.dynamic;\n                var slotContainer_1 = (slots[name_3] = createASTElement('template', [], el));\n                slotContainer_1.slotTarget = name_3;\n                slotContainer_1.slotTargetDynamic = dynamic;\n                slotContainer_1.children = el.children.filter(function (c) {\n                    if (!c.slotScope) {\n                        c.parent = slotContainer_1;\n                        return true;\n                    }\n                });\n                slotContainer_1.slotScope = slotBinding.value || emptySlotScopeToken;\n                // remove children as they are returned from scopedSlots now\n                el.children = [];\n                // mark el non-plain so data gets generated\n                el.plain = false;\n            }\n        }\n    }\n}\nfunction getSlotName(binding) {\n    var name = binding.name.replace(slotRE, '');\n    if (!name) {\n        if (binding.name[0] !== '#') {\n            name = 'default';\n        }\n        else if (true) {\n            warn(\"v-slot shorthand syntax requires a slot name.\", binding);\n        }\n    }\n    return dynamicArgRE.test(name)\n        ? // dynamic [name]\n            { name: name.slice(1, -1), dynamic: true }\n        : // static name\n            { name: \"\\\"\".concat(name, \"\\\"\"), dynamic: false };\n}\n// handle <slot/> outlets\nfunction processSlotOutlet(el) {\n    if (el.tag === 'slot') {\n        el.slotName = getBindingAttr(el, 'name');\n        if ( true && el.key) {\n            warn(\"`key` does not work on <slot> because slots are abstract outlets \" +\n                \"and can possibly expand into multiple elements. \" +\n                \"Use the key on a wrapping element instead.\", getRawBindingAttr(el, 'key'));\n        }\n    }\n}\nfunction processComponent(el) {\n    var binding;\n    if ((binding = getBindingAttr(el, 'is'))) {\n        el.component = binding;\n    }\n    if (getAndRemoveAttr(el, 'inline-template') != null) {\n        el.inlineTemplate = true;\n    }\n}\nfunction processAttrs(el) {\n    var list = el.attrsList;\n    var i, l, name, rawName, value, modifiers, syncGen, isDynamic;\n    for (i = 0, l = list.length; i < l; i++) {\n        name = rawName = list[i].name;\n        value = list[i].value;\n        if (dirRE.test(name)) {\n            // mark element as dynamic\n            el.hasBindings = true;\n            // modifiers\n            modifiers = parseModifiers(name.replace(dirRE, ''));\n            // support .foo shorthand syntax for the .prop modifier\n            if (modifiers) {\n                name = name.replace(modifierRE, '');\n            }\n            if (bindRE.test(name)) {\n                // v-bind\n                name = name.replace(bindRE, '');\n                value = parseFilters(value);\n                isDynamic = dynamicArgRE.test(name);\n                if (isDynamic) {\n                    name = name.slice(1, -1);\n                }\n                if ( true && value.trim().length === 0) {\n                    warn(\"The value for a v-bind expression cannot be empty. Found in \\\"v-bind:\".concat(name, \"\\\"\"));\n                }\n                if (modifiers) {\n                    if (modifiers.prop && !isDynamic) {\n                        name = camelize(name);\n                        if (name === 'innerHtml')\n                            name = 'innerHTML';\n                    }\n                    if (modifiers.camel && !isDynamic) {\n                        name = camelize(name);\n                    }\n                    if (modifiers.sync) {\n                        syncGen = genAssignmentCode(value, \"$event\");\n                        if (!isDynamic) {\n                            addHandler(el, \"update:\".concat(camelize(name)), syncGen, null, false, warn, list[i]);\n                            if (hyphenate(name) !== camelize(name)) {\n                                addHandler(el, \"update:\".concat(hyphenate(name)), syncGen, null, false, warn, list[i]);\n                            }\n                        }\n                        else {\n                            // handler w/ dynamic event name\n                            addHandler(el, \"\\\"update:\\\"+(\".concat(name, \")\"), syncGen, null, false, warn, list[i], true // dynamic\n                            );\n                        }\n                    }\n                }\n                if ((modifiers && modifiers.prop) ||\n                    (!el.component && platformMustUseProp(el.tag, el.attrsMap.type, name))) {\n                    addProp(el, name, value, list[i], isDynamic);\n                }\n                else {\n                    addAttr(el, name, value, list[i], isDynamic);\n                }\n            }\n            else if (onRE.test(name)) {\n                // v-on\n                name = name.replace(onRE, '');\n                isDynamic = dynamicArgRE.test(name);\n                if (isDynamic) {\n                    name = name.slice(1, -1);\n                }\n                addHandler(el, name, value, modifiers, false, warn, list[i], isDynamic);\n            }\n            else {\n                // normal directives\n                name = name.replace(dirRE, '');\n                // parse arg\n                var argMatch = name.match(argRE);\n                var arg = argMatch && argMatch[1];\n                isDynamic = false;\n                if (arg) {\n                    name = name.slice(0, -(arg.length + 1));\n                    if (dynamicArgRE.test(arg)) {\n                        arg = arg.slice(1, -1);\n                        isDynamic = true;\n                    }\n                }\n                addDirective(el, name, rawName, value, arg, isDynamic, modifiers, list[i]);\n                if ( true && name === 'model') {\n                    checkForAliasModel(el, value);\n                }\n            }\n        }\n        else {\n            // literal attribute\n            if (true) {\n                var res = parseText(value, delimiters);\n                if (res) {\n                    warn(\"\".concat(name, \"=\\\"\").concat(value, \"\\\": \") +\n                        'Interpolation inside attributes has been removed. ' +\n                        'Use v-bind or the colon shorthand instead. For example, ' +\n                        'instead of <div id=\"{{ val }}\">, use <div :id=\"val\">.', list[i]);\n                }\n            }\n            addAttr(el, name, JSON.stringify(value), list[i]);\n            // #6887 firefox doesn't update muted state if set via attribute\n            // even immediately after element creation\n            if (!el.component &&\n                name === 'muted' &&\n                platformMustUseProp(el.tag, el.attrsMap.type, name)) {\n                addProp(el, name, 'true', list[i]);\n            }\n        }\n    }\n}\nfunction checkInFor(el) {\n    var parent = el;\n    while (parent) {\n        if (parent.for !== undefined) {\n            return true;\n        }\n        parent = parent.parent;\n    }\n    return false;\n}\nfunction parseModifiers(name) {\n    var match = name.match(modifierRE);\n    if (match) {\n        var ret_1 = {};\n        match.forEach(function (m) {\n            ret_1[m.slice(1)] = true;\n        });\n        return ret_1;\n    }\n}\nfunction makeAttrsMap(attrs) {\n    var map = {};\n    for (var i = 0, l = attrs.length; i < l; i++) {\n        if ( true && map[attrs[i].name] && !isIE && !isEdge) {\n            warn('duplicate attribute: ' + attrs[i].name, attrs[i]);\n        }\n        map[attrs[i].name] = attrs[i].value;\n    }\n    return map;\n}\n// for script (e.g. type=\"x/template\") or style, do not decode content\nfunction isTextTag(el) {\n    return el.tag === 'script' || el.tag === 'style';\n}\nfunction isForbiddenTag(el) {\n    return (el.tag === 'style' ||\n        (el.tag === 'script' &&\n            (!el.attrsMap.type || el.attrsMap.type === 'text/javascript')));\n}\nvar ieNSBug = /^xmlns:NS\\d+/;\nvar ieNSPrefix = /^NS\\d+:/;\n/* istanbul ignore next */\nfunction guardIESVGBug(attrs) {\n    var res = [];\n    for (var i = 0; i < attrs.length; i++) {\n        var attr = attrs[i];\n        if (!ieNSBug.test(attr.name)) {\n            attr.name = attr.name.replace(ieNSPrefix, '');\n            res.push(attr);\n        }\n    }\n    return res;\n}\nfunction checkForAliasModel(el, value) {\n    var _el = el;\n    while (_el) {\n        if (_el.for && _el.alias === value) {\n            warn(\"<\".concat(el.tag, \" v-model=\\\"\").concat(value, \"\\\">: \") +\n                \"You are binding v-model directly to a v-for iteration alias. \" +\n                \"This will not be able to modify the v-for source array because \" +\n                \"writing to the alias is like modifying a function local variable. \" +\n                \"Consider using an array of objects and use v-model on an object property instead.\", el.rawAttrsMap['v-model']);\n        }\n        _el = _el.parent;\n    }\n}\n\n/**\n * Expand input[v-model] with dynamic type bindings into v-if-else chains\n * Turn this:\n *   <input v-model=\"data[type]\" :type=\"type\">\n * into this:\n *   <input v-if=\"type === 'checkbox'\" type=\"checkbox\" v-model=\"data[type]\">\n *   <input v-else-if=\"type === 'radio'\" type=\"radio\" v-model=\"data[type]\">\n *   <input v-else :type=\"type\" v-model=\"data[type]\">\n */\nfunction preTransformNode(el, options) {\n    if (el.tag === 'input') {\n        var map = el.attrsMap;\n        if (!map['v-model']) {\n            return;\n        }\n        var typeBinding = void 0;\n        if (map[':type'] || map['v-bind:type']) {\n            typeBinding = getBindingAttr(el, 'type');\n        }\n        if (!map.type && !typeBinding && map['v-bind']) {\n            typeBinding = \"(\".concat(map['v-bind'], \").type\");\n        }\n        if (typeBinding) {\n            var ifCondition = getAndRemoveAttr(el, 'v-if', true);\n            var ifConditionExtra = ifCondition ? \"&&(\".concat(ifCondition, \")\") : \"\";\n            var hasElse = getAndRemoveAttr(el, 'v-else', true) != null;\n            var elseIfCondition = getAndRemoveAttr(el, 'v-else-if', true);\n            // 1. checkbox\n            var branch0 = cloneASTElement(el);\n            // process for on the main node\n            processFor(branch0);\n            addRawAttr(branch0, 'type', 'checkbox');\n            processElement(branch0, options);\n            branch0.processed = true; // prevent it from double-processed\n            branch0.if = \"(\".concat(typeBinding, \")==='checkbox'\") + ifConditionExtra;\n            addIfCondition(branch0, {\n                exp: branch0.if,\n                block: branch0\n            });\n            // 2. add radio else-if condition\n            var branch1 = cloneASTElement(el);\n            getAndRemoveAttr(branch1, 'v-for', true);\n            addRawAttr(branch1, 'type', 'radio');\n            processElement(branch1, options);\n            addIfCondition(branch0, {\n                exp: \"(\".concat(typeBinding, \")==='radio'\") + ifConditionExtra,\n                block: branch1\n            });\n            // 3. other\n            var branch2 = cloneASTElement(el);\n            getAndRemoveAttr(branch2, 'v-for', true);\n            addRawAttr(branch2, ':type', typeBinding);\n            processElement(branch2, options);\n            addIfCondition(branch0, {\n                exp: ifCondition,\n                block: branch2\n            });\n            if (hasElse) {\n                branch0.else = true;\n            }\n            else if (elseIfCondition) {\n                branch0.elseif = elseIfCondition;\n            }\n            return branch0;\n        }\n    }\n}\nfunction cloneASTElement(el) {\n    return createASTElement(el.tag, el.attrsList.slice(), el.parent);\n}\nvar model = {\n    preTransformNode: preTransformNode\n};\n\nvar modules = [klass, style, model];\n\nfunction text(el, dir) {\n    if (dir.value) {\n        addProp(el, 'textContent', \"_s(\".concat(dir.value, \")\"), dir);\n    }\n}\n\nfunction html(el, dir) {\n    if (dir.value) {\n        addProp(el, 'innerHTML', \"_s(\".concat(dir.value, \")\"), dir);\n    }\n}\n\nvar directives = {\n    model: model$1,\n    text: text,\n    html: html\n};\n\nvar baseOptions = {\n    expectHTML: true,\n    modules: modules,\n    directives: directives,\n    isPreTag: isPreTag,\n    isUnaryTag: isUnaryTag,\n    mustUseProp: mustUseProp,\n    canBeLeftOpenTag: canBeLeftOpenTag,\n    isReservedTag: isReservedTag,\n    getTagNamespace: getTagNamespace,\n    staticKeys: genStaticKeys$1(modules)\n};\n\nvar isStaticKey;\nvar isPlatformReservedTag;\nvar genStaticKeysCached = cached(genStaticKeys);\n/**\n * Goal of the optimizer: walk the generated template AST tree\n * and detect sub-trees that are purely static, i.e. parts of\n * the DOM that never needs to change.\n *\n * Once we detect these sub-trees, we can:\n *\n * 1. Hoist them into constants, so that we no longer need to\n *    create fresh nodes for them on each re-render;\n * 2. Completely skip them in the patching process.\n */\nfunction optimize(root, options) {\n    if (!root)\n        return;\n    isStaticKey = genStaticKeysCached(options.staticKeys || '');\n    isPlatformReservedTag = options.isReservedTag || no;\n    // first pass: mark all non-static nodes.\n    markStatic(root);\n    // second pass: mark static roots.\n    markStaticRoots(root, false);\n}\nfunction genStaticKeys(keys) {\n    return makeMap('type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap' +\n        (keys ? ',' + keys : ''));\n}\nfunction markStatic(node) {\n    node.static = isStatic(node);\n    if (node.type === 1) {\n        // do not make component slot content static. this avoids\n        // 1. components not able to mutate slot nodes\n        // 2. static slot content fails for hot-reloading\n        if (!isPlatformReservedTag(node.tag) &&\n            node.tag !== 'slot' &&\n            node.attrsMap['inline-template'] == null) {\n            return;\n        }\n        for (var i = 0, l = node.children.length; i < l; i++) {\n            var child = node.children[i];\n            markStatic(child);\n            if (!child.static) {\n                node.static = false;\n            }\n        }\n        if (node.ifConditions) {\n            for (var i = 1, l = node.ifConditions.length; i < l; i++) {\n                var block = node.ifConditions[i].block;\n                markStatic(block);\n                if (!block.static) {\n                    node.static = false;\n                }\n            }\n        }\n    }\n}\nfunction markStaticRoots(node, isInFor) {\n    if (node.type === 1) {\n        if (node.static || node.once) {\n            node.staticInFor = isInFor;\n        }\n        // For a node to qualify as a static root, it should have children that\n        // are not just static text. Otherwise the cost of hoisting out will\n        // outweigh the benefits and it's better off to just always render it fresh.\n        if (node.static &&\n            node.children.length &&\n            !(node.children.length === 1 && node.children[0].type === 3)) {\n            node.staticRoot = true;\n            return;\n        }\n        else {\n            node.staticRoot = false;\n        }\n        if (node.children) {\n            for (var i = 0, l = node.children.length; i < l; i++) {\n                markStaticRoots(node.children[i], isInFor || !!node.for);\n            }\n        }\n        if (node.ifConditions) {\n            for (var i = 1, l = node.ifConditions.length; i < l; i++) {\n                markStaticRoots(node.ifConditions[i].block, isInFor);\n            }\n        }\n    }\n}\nfunction isStatic(node) {\n    if (node.type === 2) {\n        // expression\n        return false;\n    }\n    if (node.type === 3) {\n        // text\n        return true;\n    }\n    return !!(node.pre ||\n        (!node.hasBindings && // no dynamic bindings\n            !node.if &&\n            !node.for && // not v-if or v-for or v-else\n            !isBuiltInTag(node.tag) && // not a built-in\n            isPlatformReservedTag(node.tag) && // not a component\n            !isDirectChildOfTemplateFor(node) &&\n            Object.keys(node).every(isStaticKey)));\n}\nfunction isDirectChildOfTemplateFor(node) {\n    while (node.parent) {\n        node = node.parent;\n        if (node.tag !== 'template') {\n            return false;\n        }\n        if (node.for) {\n            return true;\n        }\n    }\n    return false;\n}\n\nvar fnExpRE = /^([\\w$_]+|\\([^)]*?\\))\\s*=>|^function(?:\\s+[\\w$]+)?\\s*\\(/;\nvar fnInvokeRE = /\\([^)]*?\\);*$/;\nvar simplePathRE = /^[A-Za-z_$][\\w$]*(?:\\.[A-Za-z_$][\\w$]*|\\['[^']*?']|\\[\"[^\"]*?\"]|\\[\\d+]|\\[[A-Za-z_$][\\w$]*])*$/;\n// KeyboardEvent.keyCode aliases\nvar keyCodes = {\n    esc: 27,\n    tab: 9,\n    enter: 13,\n    space: 32,\n    up: 38,\n    left: 37,\n    right: 39,\n    down: 40,\n    delete: [8, 46]\n};\n// KeyboardEvent.key aliases\nvar keyNames = {\n    // #7880: IE11 and Edge use `Esc` for Escape key name.\n    esc: ['Esc', 'Escape'],\n    tab: 'Tab',\n    enter: 'Enter',\n    // #9112: IE11 uses `Spacebar` for Space key name.\n    space: [' ', 'Spacebar'],\n    // #7806: IE11 uses key names without `Arrow` prefix for arrow keys.\n    up: ['Up', 'ArrowUp'],\n    left: ['Left', 'ArrowLeft'],\n    right: ['Right', 'ArrowRight'],\n    down: ['Down', 'ArrowDown'],\n    // #9112: IE11 uses `Del` for Delete key name.\n    delete: ['Backspace', 'Delete', 'Del']\n};\n// #4868: modifiers that prevent the execution of the listener\n// need to explicitly return null so that we can determine whether to remove\n// the listener for .once\nvar genGuard = function (condition) { return \"if(\".concat(condition, \")return null;\"); };\nvar modifierCode = {\n    stop: '$event.stopPropagation();',\n    prevent: '$event.preventDefault();',\n    self: genGuard(\"$event.target !== $event.currentTarget\"),\n    ctrl: genGuard(\"!$event.ctrlKey\"),\n    shift: genGuard(\"!$event.shiftKey\"),\n    alt: genGuard(\"!$event.altKey\"),\n    meta: genGuard(\"!$event.metaKey\"),\n    left: genGuard(\"'button' in $event && $event.button !== 0\"),\n    middle: genGuard(\"'button' in $event && $event.button !== 1\"),\n    right: genGuard(\"'button' in $event && $event.button !== 2\")\n};\nfunction genHandlers(events, isNative) {\n    var prefix = isNative ? 'nativeOn:' : 'on:';\n    var staticHandlers = \"\";\n    var dynamicHandlers = \"\";\n    for (var name_1 in events) {\n        var handlerCode = genHandler(events[name_1]);\n        //@ts-expect-error\n        if (events[name_1] && events[name_1].dynamic) {\n            dynamicHandlers += \"\".concat(name_1, \",\").concat(handlerCode, \",\");\n        }\n        else {\n            staticHandlers += \"\\\"\".concat(name_1, \"\\\":\").concat(handlerCode, \",\");\n        }\n    }\n    staticHandlers = \"{\".concat(staticHandlers.slice(0, -1), \"}\");\n    if (dynamicHandlers) {\n        return prefix + \"_d(\".concat(staticHandlers, \",[\").concat(dynamicHandlers.slice(0, -1), \"])\");\n    }\n    else {\n        return prefix + staticHandlers;\n    }\n}\nfunction genHandler(handler) {\n    if (!handler) {\n        return 'function(){}';\n    }\n    if (Array.isArray(handler)) {\n        return \"[\".concat(handler.map(function (handler) { return genHandler(handler); }).join(','), \"]\");\n    }\n    var isMethodPath = simplePathRE.test(handler.value);\n    var isFunctionExpression = fnExpRE.test(handler.value);\n    var isFunctionInvocation = simplePathRE.test(handler.value.replace(fnInvokeRE, ''));\n    if (!handler.modifiers) {\n        if (isMethodPath || isFunctionExpression) {\n            return handler.value;\n        }\n        return \"function($event){\".concat(isFunctionInvocation ? \"return \".concat(handler.value) : handler.value, \"}\"); // inline statement\n    }\n    else {\n        var code = '';\n        var genModifierCode = '';\n        var keys = [];\n        var _loop_1 = function (key) {\n            if (modifierCode[key]) {\n                genModifierCode += modifierCode[key];\n                // left/right\n                if (keyCodes[key]) {\n                    keys.push(key);\n                }\n            }\n            else if (key === 'exact') {\n                var modifiers_1 = handler.modifiers;\n                genModifierCode += genGuard(['ctrl', 'shift', 'alt', 'meta']\n                    .filter(function (keyModifier) { return !modifiers_1[keyModifier]; })\n                    .map(function (keyModifier) { return \"$event.\".concat(keyModifier, \"Key\"); })\n                    .join('||'));\n            }\n            else {\n                keys.push(key);\n            }\n        };\n        for (var key in handler.modifiers) {\n            _loop_1(key);\n        }\n        if (keys.length) {\n            code += genKeyFilter(keys);\n        }\n        // Make sure modifiers like prevent and stop get executed after key filtering\n        if (genModifierCode) {\n            code += genModifierCode;\n        }\n        var handlerCode = isMethodPath\n            ? \"return \".concat(handler.value, \".apply(null, arguments)\")\n            : isFunctionExpression\n                ? \"return (\".concat(handler.value, \").apply(null, arguments)\")\n                : isFunctionInvocation\n                    ? \"return \".concat(handler.value)\n                    : handler.value;\n        return \"function($event){\".concat(code).concat(handlerCode, \"}\");\n    }\n}\nfunction genKeyFilter(keys) {\n    return (\n    // make sure the key filters only apply to KeyboardEvents\n    // #9441: can't use 'keyCode' in $event because Chrome autofill fires fake\n    // key events that do not have keyCode property...\n    \"if(!$event.type.indexOf('key')&&\" +\n        \"\".concat(keys.map(genFilterCode).join('&&'), \")return null;\"));\n}\nfunction genFilterCode(key) {\n    var keyVal = parseInt(key, 10);\n    if (keyVal) {\n        return \"$event.keyCode!==\".concat(keyVal);\n    }\n    var keyCode = keyCodes[key];\n    var keyName = keyNames[key];\n    return (\"_k($event.keyCode,\" +\n        \"\".concat(JSON.stringify(key), \",\") +\n        \"\".concat(JSON.stringify(keyCode), \",\") +\n        \"$event.key,\" +\n        \"\".concat(JSON.stringify(keyName)) +\n        \")\");\n}\n\nfunction on(el, dir) {\n    if ( true && dir.modifiers) {\n        warn$2(\"v-on without argument does not support modifiers.\");\n    }\n    el.wrapListeners = function (code) { return \"_g(\".concat(code, \",\").concat(dir.value, \")\"); };\n}\n\nfunction bind(el, dir) {\n    el.wrapData = function (code) {\n        return \"_b(\".concat(code, \",'\").concat(el.tag, \"',\").concat(dir.value, \",\").concat(dir.modifiers && dir.modifiers.prop ? 'true' : 'false').concat(dir.modifiers && dir.modifiers.sync ? ',true' : '', \")\");\n    };\n}\n\nvar baseDirectives = {\n    on: on,\n    bind: bind,\n    cloak: noop\n};\n\nvar CodegenState = /** @class */ (function () {\n    function CodegenState(options) {\n        this.options = options;\n        this.warn = options.warn || baseWarn;\n        this.transforms = pluckModuleFunction(options.modules, 'transformCode');\n        this.dataGenFns = pluckModuleFunction(options.modules, 'genData');\n        this.directives = extend(extend({}, baseDirectives), options.directives);\n        var isReservedTag = options.isReservedTag || no;\n        this.maybeComponent = function (el) {\n            return !!el.component || !isReservedTag(el.tag);\n        };\n        this.onceId = 0;\n        this.staticRenderFns = [];\n        this.pre = false;\n    }\n    return CodegenState;\n}());\nfunction generate(ast, options) {\n    var state = new CodegenState(options);\n    // fix #11483, Root level <script> tags should not be rendered.\n    var code = ast\n        ? ast.tag === 'script'\n            ? 'null'\n            : genElement(ast, state)\n        : '_c(\"div\")';\n    return {\n        render: \"with(this){return \".concat(code, \"}\"),\n        staticRenderFns: state.staticRenderFns\n    };\n}\nfunction genElement(el, state) {\n    if (el.parent) {\n        el.pre = el.pre || el.parent.pre;\n    }\n    if (el.staticRoot && !el.staticProcessed) {\n        return genStatic(el, state);\n    }\n    else if (el.once && !el.onceProcessed) {\n        return genOnce(el, state);\n    }\n    else if (el.for && !el.forProcessed) {\n        return genFor(el, state);\n    }\n    else if (el.if && !el.ifProcessed) {\n        return genIf(el, state);\n    }\n    else if (el.tag === 'template' && !el.slotTarget && !state.pre) {\n        return genChildren(el, state) || 'void 0';\n    }\n    else if (el.tag === 'slot') {\n        return genSlot(el, state);\n    }\n    else {\n        // component or element\n        var code = void 0;\n        if (el.component) {\n            code = genComponent(el.component, el, state);\n        }\n        else {\n            var data = void 0;\n            var maybeComponent = state.maybeComponent(el);\n            if (!el.plain || (el.pre && maybeComponent)) {\n                data = genData(el, state);\n            }\n            var tag \n            // check if this is a component in <script setup>\n            = void 0;\n            // check if this is a component in <script setup>\n            var bindings = state.options.bindings;\n            if (maybeComponent && bindings && bindings.__isScriptSetup !== false) {\n                tag = checkBindingType(bindings, el.tag);\n            }\n            if (!tag)\n                tag = \"'\".concat(el.tag, \"'\");\n            var children = el.inlineTemplate ? null : genChildren(el, state, true);\n            code = \"_c(\".concat(tag).concat(data ? \",\".concat(data) : '' // data\n            ).concat(children ? \",\".concat(children) : '' // children\n            , \")\");\n        }\n        // module transforms\n        for (var i = 0; i < state.transforms.length; i++) {\n            code = state.transforms[i](el, code);\n        }\n        return code;\n    }\n}\nfunction checkBindingType(bindings, key) {\n    var camelName = camelize(key);\n    var PascalName = capitalize(camelName);\n    var checkType = function (type) {\n        if (bindings[key] === type) {\n            return key;\n        }\n        if (bindings[camelName] === type) {\n            return camelName;\n        }\n        if (bindings[PascalName] === type) {\n            return PascalName;\n        }\n    };\n    var fromConst = checkType(\"setup-const\" /* BindingTypes.SETUP_CONST */) ||\n        checkType(\"setup-reactive-const\" /* BindingTypes.SETUP_REACTIVE_CONST */);\n    if (fromConst) {\n        return fromConst;\n    }\n    var fromMaybeRef = checkType(\"setup-let\" /* BindingTypes.SETUP_LET */) ||\n        checkType(\"setup-ref\" /* BindingTypes.SETUP_REF */) ||\n        checkType(\"setup-maybe-ref\" /* BindingTypes.SETUP_MAYBE_REF */);\n    if (fromMaybeRef) {\n        return fromMaybeRef;\n    }\n}\n// hoist static sub-trees out\nfunction genStatic(el, state) {\n    el.staticProcessed = true;\n    // Some elements (templates) need to behave differently inside of a v-pre\n    // node.  All pre nodes are static roots, so we can use this as a location to\n    // wrap a state change and reset it upon exiting the pre node.\n    var originalPreState = state.pre;\n    if (el.pre) {\n        state.pre = el.pre;\n    }\n    state.staticRenderFns.push(\"with(this){return \".concat(genElement(el, state), \"}\"));\n    state.pre = originalPreState;\n    return \"_m(\".concat(state.staticRenderFns.length - 1).concat(el.staticInFor ? ',true' : '', \")\");\n}\n// v-once\nfunction genOnce(el, state) {\n    el.onceProcessed = true;\n    if (el.if && !el.ifProcessed) {\n        return genIf(el, state);\n    }\n    else if (el.staticInFor) {\n        var key = '';\n        var parent_1 = el.parent;\n        while (parent_1) {\n            if (parent_1.for) {\n                key = parent_1.key;\n                break;\n            }\n            parent_1 = parent_1.parent;\n        }\n        if (!key) {\n             true &&\n                state.warn(\"v-once can only be used inside v-for that is keyed. \", el.rawAttrsMap['v-once']);\n            return genElement(el, state);\n        }\n        return \"_o(\".concat(genElement(el, state), \",\").concat(state.onceId++, \",\").concat(key, \")\");\n    }\n    else {\n        return genStatic(el, state);\n    }\n}\nfunction genIf(el, state, altGen, altEmpty) {\n    el.ifProcessed = true; // avoid recursion\n    return genIfConditions(el.ifConditions.slice(), state, altGen, altEmpty);\n}\nfunction genIfConditions(conditions, state, altGen, altEmpty) {\n    if (!conditions.length) {\n        return altEmpty || '_e()';\n    }\n    var condition = conditions.shift();\n    if (condition.exp) {\n        return \"(\".concat(condition.exp, \")?\").concat(genTernaryExp(condition.block), \":\").concat(genIfConditions(conditions, state, altGen, altEmpty));\n    }\n    else {\n        return \"\".concat(genTernaryExp(condition.block));\n    }\n    // v-if with v-once should generate code like (a)?_m(0):_m(1)\n    function genTernaryExp(el) {\n        return altGen\n            ? altGen(el, state)\n            : el.once\n                ? genOnce(el, state)\n                : genElement(el, state);\n    }\n}\nfunction genFor(el, state, altGen, altHelper) {\n    var exp = el.for;\n    var alias = el.alias;\n    var iterator1 = el.iterator1 ? \",\".concat(el.iterator1) : '';\n    var iterator2 = el.iterator2 ? \",\".concat(el.iterator2) : '';\n    if ( true &&\n        state.maybeComponent(el) &&\n        el.tag !== 'slot' &&\n        el.tag !== 'template' &&\n        !el.key) {\n        state.warn(\"<\".concat(el.tag, \" v-for=\\\"\").concat(alias, \" in \").concat(exp, \"\\\">: component lists rendered with \") +\n            \"v-for should have explicit keys. \" +\n            \"See https://v2.vuejs.org/v2/guide/list.html#key for more info.\", el.rawAttrsMap['v-for'], true /* tip */);\n    }\n    el.forProcessed = true; // avoid recursion\n    return (\"\".concat(altHelper || '_l', \"((\").concat(exp, \"),\") +\n        \"function(\".concat(alias).concat(iterator1).concat(iterator2, \"){\") +\n        \"return \".concat((altGen || genElement)(el, state)) +\n        '})');\n}\nfunction genData(el, state) {\n    var data = '{';\n    // directives first.\n    // directives may mutate the el's other properties before they are generated.\n    var dirs = genDirectives(el, state);\n    if (dirs)\n        data += dirs + ',';\n    // key\n    if (el.key) {\n        data += \"key:\".concat(el.key, \",\");\n    }\n    // ref\n    if (el.ref) {\n        data += \"ref:\".concat(el.ref, \",\");\n    }\n    if (el.refInFor) {\n        data += \"refInFor:true,\";\n    }\n    // pre\n    if (el.pre) {\n        data += \"pre:true,\";\n    }\n    // record original tag name for components using \"is\" attribute\n    if (el.component) {\n        data += \"tag:\\\"\".concat(el.tag, \"\\\",\");\n    }\n    // module data generation functions\n    for (var i = 0; i < state.dataGenFns.length; i++) {\n        data += state.dataGenFns[i](el);\n    }\n    // attributes\n    if (el.attrs) {\n        data += \"attrs:\".concat(genProps(el.attrs), \",\");\n    }\n    // DOM props\n    if (el.props) {\n        data += \"domProps:\".concat(genProps(el.props), \",\");\n    }\n    // event handlers\n    if (el.events) {\n        data += \"\".concat(genHandlers(el.events, false), \",\");\n    }\n    if (el.nativeEvents) {\n        data += \"\".concat(genHandlers(el.nativeEvents, true), \",\");\n    }\n    // slot target\n    // only for non-scoped slots\n    if (el.slotTarget && !el.slotScope) {\n        data += \"slot:\".concat(el.slotTarget, \",\");\n    }\n    // scoped slots\n    if (el.scopedSlots) {\n        data += \"\".concat(genScopedSlots(el, el.scopedSlots, state), \",\");\n    }\n    // component v-model\n    if (el.model) {\n        data += \"model:{value:\".concat(el.model.value, \",callback:\").concat(el.model.callback, \",expression:\").concat(el.model.expression, \"},\");\n    }\n    // inline-template\n    if (el.inlineTemplate) {\n        var inlineTemplate = genInlineTemplate(el, state);\n        if (inlineTemplate) {\n            data += \"\".concat(inlineTemplate, \",\");\n        }\n    }\n    data = data.replace(/,$/, '') + '}';\n    // v-bind dynamic argument wrap\n    // v-bind with dynamic arguments must be applied using the same v-bind object\n    // merge helper so that class/style/mustUseProp attrs are handled correctly.\n    if (el.dynamicAttrs) {\n        data = \"_b(\".concat(data, \",\\\"\").concat(el.tag, \"\\\",\").concat(genProps(el.dynamicAttrs), \")\");\n    }\n    // v-bind data wrap\n    if (el.wrapData) {\n        data = el.wrapData(data);\n    }\n    // v-on data wrap\n    if (el.wrapListeners) {\n        data = el.wrapListeners(data);\n    }\n    return data;\n}\nfunction genDirectives(el, state) {\n    var dirs = el.directives;\n    if (!dirs)\n        return;\n    var res = 'directives:[';\n    var hasRuntime = false;\n    var i, l, dir, needRuntime;\n    for (i = 0, l = dirs.length; i < l; i++) {\n        dir = dirs[i];\n        needRuntime = true;\n        var gen = state.directives[dir.name];\n        if (gen) {\n            // compile-time directive that manipulates AST.\n            // returns true if it also needs a runtime counterpart.\n            needRuntime = !!gen(el, dir, state.warn);\n        }\n        if (needRuntime) {\n            hasRuntime = true;\n            res += \"{name:\\\"\".concat(dir.name, \"\\\",rawName:\\\"\").concat(dir.rawName, \"\\\"\").concat(dir.value\n                ? \",value:(\".concat(dir.value, \"),expression:\").concat(JSON.stringify(dir.value))\n                : '').concat(dir.arg ? \",arg:\".concat(dir.isDynamicArg ? dir.arg : \"\\\"\".concat(dir.arg, \"\\\"\")) : '').concat(dir.modifiers ? \",modifiers:\".concat(JSON.stringify(dir.modifiers)) : '', \"},\");\n        }\n    }\n    if (hasRuntime) {\n        return res.slice(0, -1) + ']';\n    }\n}\nfunction genInlineTemplate(el, state) {\n    var ast = el.children[0];\n    if ( true && (el.children.length !== 1 || ast.type !== 1)) {\n        state.warn('Inline-template components must have exactly one child element.', { start: el.start });\n    }\n    if (ast && ast.type === 1) {\n        var inlineRenderFns = generate(ast, state.options);\n        return \"inlineTemplate:{render:function(){\".concat(inlineRenderFns.render, \"},staticRenderFns:[\").concat(inlineRenderFns.staticRenderFns\n            .map(function (code) { return \"function(){\".concat(code, \"}\"); })\n            .join(','), \"]}\");\n    }\n}\nfunction genScopedSlots(el, slots, state) {\n    // by default scoped slots are considered \"stable\", this allows child\n    // components with only scoped slots to skip forced updates from parent.\n    // but in some cases we have to bail-out of this optimization\n    // for example if the slot contains dynamic names, has v-if or v-for on them...\n    var needsForceUpdate = el.for ||\n        Object.keys(slots).some(function (key) {\n            var slot = slots[key];\n            return (slot.slotTargetDynamic || slot.if || slot.for || containsSlotChild(slot) // is passing down slot from parent which may be dynamic\n            );\n        });\n    // #9534: if a component with scoped slots is inside a conditional branch,\n    // it's possible for the same component to be reused but with different\n    // compiled slot content. To avoid that, we generate a unique key based on\n    // the generated code of all the slot contents.\n    var needsKey = !!el.if;\n    // OR when it is inside another scoped slot or v-for (the reactivity may be\n    // disconnected due to the intermediate scope variable)\n    // #9438, #9506\n    // TODO: this can be further optimized by properly analyzing in-scope bindings\n    // and skip force updating ones that do not actually use scope variables.\n    if (!needsForceUpdate) {\n        var parent_2 = el.parent;\n        while (parent_2) {\n            if ((parent_2.slotScope && parent_2.slotScope !== emptySlotScopeToken) ||\n                parent_2.for) {\n                needsForceUpdate = true;\n                break;\n            }\n            if (parent_2.if) {\n                needsKey = true;\n            }\n            parent_2 = parent_2.parent;\n        }\n    }\n    var generatedSlots = Object.keys(slots)\n        .map(function (key) { return genScopedSlot(slots[key], state); })\n        .join(',');\n    return \"scopedSlots:_u([\".concat(generatedSlots, \"]\").concat(needsForceUpdate ? \",null,true\" : \"\").concat(!needsForceUpdate && needsKey ? \",null,false,\".concat(hash(generatedSlots)) : \"\", \")\");\n}\nfunction hash(str) {\n    var hash = 5381;\n    var i = str.length;\n    while (i) {\n        hash = (hash * 33) ^ str.charCodeAt(--i);\n    }\n    return hash >>> 0;\n}\nfunction containsSlotChild(el) {\n    if (el.type === 1) {\n        if (el.tag === 'slot') {\n            return true;\n        }\n        return el.children.some(containsSlotChild);\n    }\n    return false;\n}\nfunction genScopedSlot(el, state) {\n    var isLegacySyntax = el.attrsMap['slot-scope'];\n    if (el.if && !el.ifProcessed && !isLegacySyntax) {\n        return genIf(el, state, genScopedSlot, \"null\");\n    }\n    if (el.for && !el.forProcessed) {\n        return genFor(el, state, genScopedSlot);\n    }\n    var slotScope = el.slotScope === emptySlotScopeToken ? \"\" : String(el.slotScope);\n    var fn = \"function(\".concat(slotScope, \"){\") +\n        \"return \".concat(el.tag === 'template'\n            ? el.if && isLegacySyntax\n                ? \"(\".concat(el.if, \")?\").concat(genChildren(el, state) || 'undefined', \":undefined\")\n                : genChildren(el, state) || 'undefined'\n            : genElement(el, state), \"}\");\n    // reverse proxy v-slot without scope on this.$slots\n    var reverseProxy = slotScope ? \"\" : \",proxy:true\";\n    return \"{key:\".concat(el.slotTarget || \"\\\"default\\\"\", \",fn:\").concat(fn).concat(reverseProxy, \"}\");\n}\nfunction genChildren(el, state, checkSkip, altGenElement, altGenNode) {\n    var children = el.children;\n    if (children.length) {\n        var el_1 = children[0];\n        // optimize single v-for\n        if (children.length === 1 &&\n            el_1.for &&\n            el_1.tag !== 'template' &&\n            el_1.tag !== 'slot') {\n            var normalizationType_1 = checkSkip\n                ? state.maybeComponent(el_1)\n                    ? \",1\"\n                    : \",0\"\n                : \"\";\n            return \"\".concat((altGenElement || genElement)(el_1, state)).concat(normalizationType_1);\n        }\n        var normalizationType = checkSkip\n            ? getNormalizationType(children, state.maybeComponent)\n            : 0;\n        var gen_1 = altGenNode || genNode;\n        return \"[\".concat(children.map(function (c) { return gen_1(c, state); }).join(','), \"]\").concat(normalizationType ? \",\".concat(normalizationType) : '');\n    }\n}\n// determine the normalization needed for the children array.\n// 0: no normalization needed\n// 1: simple normalization needed (possible 1-level deep nested array)\n// 2: full normalization needed\nfunction getNormalizationType(children, maybeComponent) {\n    var res = 0;\n    for (var i = 0; i < children.length; i++) {\n        var el = children[i];\n        if (el.type !== 1) {\n            continue;\n        }\n        if (needsNormalization(el) ||\n            (el.ifConditions &&\n                el.ifConditions.some(function (c) { return needsNormalization(c.block); }))) {\n            res = 2;\n            break;\n        }\n        if (maybeComponent(el) ||\n            (el.ifConditions && el.ifConditions.some(function (c) { return maybeComponent(c.block); }))) {\n            res = 1;\n        }\n    }\n    return res;\n}\nfunction needsNormalization(el) {\n    return el.for !== undefined || el.tag === 'template' || el.tag === 'slot';\n}\nfunction genNode(node, state) {\n    if (node.type === 1) {\n        return genElement(node, state);\n    }\n    else if (node.type === 3 && node.isComment) {\n        return genComment(node);\n    }\n    else {\n        return genText(node);\n    }\n}\nfunction genText(text) {\n    return \"_v(\".concat(text.type === 2\n        ? text.expression // no need for () because already wrapped in _s()\n        : transformSpecialNewlines(JSON.stringify(text.text)), \")\");\n}\nfunction genComment(comment) {\n    return \"_e(\".concat(JSON.stringify(comment.text), \")\");\n}\nfunction genSlot(el, state) {\n    var slotName = el.slotName || '\"default\"';\n    var children = genChildren(el, state);\n    var res = \"_t(\".concat(slotName).concat(children ? \",function(){return \".concat(children, \"}\") : '');\n    var attrs = el.attrs || el.dynamicAttrs\n        ? genProps((el.attrs || []).concat(el.dynamicAttrs || []).map(function (attr) { return ({\n            // slot props are camelized\n            name: camelize(attr.name),\n            value: attr.value,\n            dynamic: attr.dynamic\n        }); }))\n        : null;\n    var bind = el.attrsMap['v-bind'];\n    if ((attrs || bind) && !children) {\n        res += \",null\";\n    }\n    if (attrs) {\n        res += \",\".concat(attrs);\n    }\n    if (bind) {\n        res += \"\".concat(attrs ? '' : ',null', \",\").concat(bind);\n    }\n    return res + ')';\n}\n// componentName is el.component, take it as argument to shun flow's pessimistic refinement\nfunction genComponent(componentName, el, state) {\n    var children = el.inlineTemplate ? null : genChildren(el, state, true);\n    return \"_c(\".concat(componentName, \",\").concat(genData(el, state)).concat(children ? \",\".concat(children) : '', \")\");\n}\nfunction genProps(props) {\n    var staticProps = \"\";\n    var dynamicProps = \"\";\n    for (var i = 0; i < props.length; i++) {\n        var prop = props[i];\n        var value = transformSpecialNewlines(prop.value);\n        if (prop.dynamic) {\n            dynamicProps += \"\".concat(prop.name, \",\").concat(value, \",\");\n        }\n        else {\n            staticProps += \"\\\"\".concat(prop.name, \"\\\":\").concat(value, \",\");\n        }\n    }\n    staticProps = \"{\".concat(staticProps.slice(0, -1), \"}\");\n    if (dynamicProps) {\n        return \"_d(\".concat(staticProps, \",[\").concat(dynamicProps.slice(0, -1), \"])\");\n    }\n    else {\n        return staticProps;\n    }\n}\n// #3895, #4268\nfunction transformSpecialNewlines(text) {\n    return text.replace(/\\u2028/g, '\\\\u2028').replace(/\\u2029/g, '\\\\u2029');\n}\n\n// these keywords should not appear inside expressions, but operators like\n// typeof, instanceof and in are allowed\nvar prohibitedKeywordRE = new RegExp('\\\\b' +\n    ('do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,' +\n        'super,throw,while,yield,delete,export,import,return,switch,default,' +\n        'extends,finally,continue,debugger,function,arguments')\n        .split(',')\n        .join('\\\\b|\\\\b') +\n    '\\\\b');\n// these unary operators should not be used as property/method names\nvar unaryOperatorsRE = new RegExp('\\\\b' +\n    'delete,typeof,void'.split(',').join('\\\\s*\\\\([^\\\\)]*\\\\)|\\\\b') +\n    '\\\\s*\\\\([^\\\\)]*\\\\)');\n// strip strings in expressions\nvar stripStringRE = /'(?:[^'\\\\]|\\\\.)*'|\"(?:[^\"\\\\]|\\\\.)*\"|`(?:[^`\\\\]|\\\\.)*\\$\\{|\\}(?:[^`\\\\]|\\\\.)*`|`(?:[^`\\\\]|\\\\.)*`/g;\n// detect problematic expressions in a template\nfunction detectErrors(ast, warn) {\n    if (ast) {\n        checkNode(ast, warn);\n    }\n}\nfunction checkNode(node, warn) {\n    if (node.type === 1) {\n        for (var name_1 in node.attrsMap) {\n            if (dirRE.test(name_1)) {\n                var value = node.attrsMap[name_1];\n                if (value) {\n                    var range = node.rawAttrsMap[name_1];\n                    if (name_1 === 'v-for') {\n                        checkFor(node, \"v-for=\\\"\".concat(value, \"\\\"\"), warn, range);\n                    }\n                    else if (name_1 === 'v-slot' || name_1[0] === '#') {\n                        checkFunctionParameterExpression(value, \"\".concat(name_1, \"=\\\"\").concat(value, \"\\\"\"), warn, range);\n                    }\n                    else if (onRE.test(name_1)) {\n                        checkEvent(value, \"\".concat(name_1, \"=\\\"\").concat(value, \"\\\"\"), warn, range);\n                    }\n                    else {\n                        checkExpression(value, \"\".concat(name_1, \"=\\\"\").concat(value, \"\\\"\"), warn, range);\n                    }\n                }\n            }\n        }\n        if (node.children) {\n            for (var i = 0; i < node.children.length; i++) {\n                checkNode(node.children[i], warn);\n            }\n        }\n    }\n    else if (node.type === 2) {\n        checkExpression(node.expression, node.text, warn, node);\n    }\n}\nfunction checkEvent(exp, text, warn, range) {\n    var stripped = exp.replace(stripStringRE, '');\n    var keywordMatch = stripped.match(unaryOperatorsRE);\n    if (keywordMatch && stripped.charAt(keywordMatch.index - 1) !== '$') {\n        warn(\"avoid using JavaScript unary operator as property name: \" +\n            \"\\\"\".concat(keywordMatch[0], \"\\\" in expression \").concat(text.trim()), range);\n    }\n    checkExpression(exp, text, warn, range);\n}\nfunction checkFor(node, text, warn, range) {\n    checkExpression(node.for || '', text, warn, range);\n    checkIdentifier(node.alias, 'v-for alias', text, warn, range);\n    checkIdentifier(node.iterator1, 'v-for iterator', text, warn, range);\n    checkIdentifier(node.iterator2, 'v-for iterator', text, warn, range);\n}\nfunction checkIdentifier(ident, type, text, warn, range) {\n    if (typeof ident === 'string') {\n        try {\n            new Function(\"var \".concat(ident, \"=_\"));\n        }\n        catch (e) {\n            warn(\"invalid \".concat(type, \" \\\"\").concat(ident, \"\\\" in expression: \").concat(text.trim()), range);\n        }\n    }\n}\nfunction checkExpression(exp, text, warn, range) {\n    try {\n        new Function(\"return \".concat(exp));\n    }\n    catch (e) {\n        var keywordMatch = exp\n            .replace(stripStringRE, '')\n            .match(prohibitedKeywordRE);\n        if (keywordMatch) {\n            warn(\"avoid using JavaScript keyword as property name: \" +\n                \"\\\"\".concat(keywordMatch[0], \"\\\"\\n  Raw expression: \").concat(text.trim()), range);\n        }\n        else {\n            warn(\"invalid expression: \".concat(e.message, \" in\\n\\n\") +\n                \"    \".concat(exp, \"\\n\\n\") +\n                \"  Raw expression: \".concat(text.trim(), \"\\n\"), range);\n        }\n    }\n}\nfunction checkFunctionParameterExpression(exp, text, warn, range) {\n    try {\n        new Function(exp, '');\n    }\n    catch (e) {\n        warn(\"invalid function parameter expression: \".concat(e.message, \" in\\n\\n\") +\n            \"    \".concat(exp, \"\\n\\n\") +\n            \"  Raw expression: \".concat(text.trim(), \"\\n\"), range);\n    }\n}\n\nvar range = 2;\nfunction generateCodeFrame(source, start, end) {\n    if (start === void 0) { start = 0; }\n    if (end === void 0) { end = source.length; }\n    var lines = source.split(/\\r?\\n/);\n    var count = 0;\n    var res = [];\n    for (var i = 0; i < lines.length; i++) {\n        count += lines[i].length + 1;\n        if (count >= start) {\n            for (var j = i - range; j <= i + range || end > count; j++) {\n                if (j < 0 || j >= lines.length)\n                    continue;\n                res.push(\"\".concat(j + 1).concat(repeat(\" \", 3 - String(j + 1).length), \"|  \").concat(lines[j]));\n                var lineLength = lines[j].length;\n                if (j === i) {\n                    // push underline\n                    var pad = start - (count - lineLength) + 1;\n                    var length_1 = end > count ? lineLength - pad : end - start;\n                    res.push(\"   |  \" + repeat(\" \", pad) + repeat(\"^\", length_1));\n                }\n                else if (j > i) {\n                    if (end > count) {\n                        var length_2 = Math.min(end - count, lineLength);\n                        res.push(\"   |  \" + repeat(\"^\", length_2));\n                    }\n                    count += lineLength + 1;\n                }\n            }\n            break;\n        }\n    }\n    return res.join('\\n');\n}\nfunction repeat(str, n) {\n    var result = '';\n    if (n > 0) {\n        // eslint-disable-next-line no-constant-condition\n        while (true) {\n            // eslint-disable-line\n            if (n & 1)\n                result += str;\n            n >>>= 1;\n            if (n <= 0)\n                break;\n            str += str;\n        }\n    }\n    return result;\n}\n\nfunction createFunction(code, errors) {\n    try {\n        return new Function(code);\n    }\n    catch (err) {\n        errors.push({ err: err, code: code });\n        return noop;\n    }\n}\nfunction createCompileToFunctionFn(compile) {\n    var cache = Object.create(null);\n    return function compileToFunctions(template, options, vm) {\n        options = extend({}, options);\n        var warn = options.warn || warn$2;\n        delete options.warn;\n        /* istanbul ignore if */\n        if (true) {\n            // detect possible CSP restriction\n            try {\n                new Function('return 1');\n            }\n            catch (e) {\n                if (e.toString().match(/unsafe-eval|CSP/)) {\n                    warn('It seems you are using the standalone build of Vue.js in an ' +\n                        'environment with Content Security Policy that prohibits unsafe-eval. ' +\n                        'The template compiler cannot work in this environment. Consider ' +\n                        'relaxing the policy to allow unsafe-eval or pre-compiling your ' +\n                        'templates into render functions.');\n                }\n            }\n        }\n        // check cache\n        var key = options.delimiters\n            ? String(options.delimiters) + template\n            : template;\n        if (cache[key]) {\n            return cache[key];\n        }\n        // compile\n        var compiled = compile(template, options);\n        // check compilation errors/tips\n        if (true) {\n            if (compiled.errors && compiled.errors.length) {\n                if (options.outputSourceRange) {\n                    compiled.errors.forEach(function (e) {\n                        warn(\"Error compiling template:\\n\\n\".concat(e.msg, \"\\n\\n\") +\n                            generateCodeFrame(template, e.start, e.end), vm);\n                    });\n                }\n                else {\n                    warn(\"Error compiling template:\\n\\n\".concat(template, \"\\n\\n\") +\n                        compiled.errors.map(function (e) { return \"- \".concat(e); }).join('\\n') +\n                        '\\n', vm);\n                }\n            }\n            if (compiled.tips && compiled.tips.length) {\n                if (options.outputSourceRange) {\n                    compiled.tips.forEach(function (e) { return tip(e.msg, vm); });\n                }\n                else {\n                    compiled.tips.forEach(function (msg) { return tip(msg, vm); });\n                }\n            }\n        }\n        // turn code into functions\n        var res = {};\n        var fnGenErrors = [];\n        res.render = createFunction(compiled.render, fnGenErrors);\n        res.staticRenderFns = compiled.staticRenderFns.map(function (code) {\n            return createFunction(code, fnGenErrors);\n        });\n        // check function generation errors.\n        // this should only happen if there is a bug in the compiler itself.\n        // mostly for codegen development use\n        /* istanbul ignore if */\n        if (true) {\n            if ((!compiled.errors || !compiled.errors.length) && fnGenErrors.length) {\n                warn(\"Failed to generate render function:\\n\\n\" +\n                    fnGenErrors\n                        .map(function (_a) {\n                        var err = _a.err, code = _a.code;\n                        return \"\".concat(err.toString(), \" in\\n\\n\").concat(code, \"\\n\");\n                    })\n                        .join('\\n'), vm);\n            }\n        }\n        return (cache[key] = res);\n    };\n}\n\nfunction createCompilerCreator(baseCompile) {\n    return function createCompiler(baseOptions) {\n        function compile(template, options) {\n            var finalOptions = Object.create(baseOptions);\n            var errors = [];\n            var tips = [];\n            var warn = function (msg, range, tip) {\n                (tip ? tips : errors).push(msg);\n            };\n            if (options) {\n                if ( true && options.outputSourceRange) {\n                    // $flow-disable-line\n                    var leadingSpaceLength_1 = template.match(/^\\s*/)[0].length;\n                    warn = function (msg, range, tip) {\n                        var data = typeof msg === 'string' ? { msg: msg } : msg;\n                        if (range) {\n                            if (range.start != null) {\n                                data.start = range.start + leadingSpaceLength_1;\n                            }\n                            if (range.end != null) {\n                                data.end = range.end + leadingSpaceLength_1;\n                            }\n                        }\n                        (tip ? tips : errors).push(data);\n                    };\n                }\n                // merge custom modules\n                if (options.modules) {\n                    finalOptions.modules = (baseOptions.modules || []).concat(options.modules);\n                }\n                // merge custom directives\n                if (options.directives) {\n                    finalOptions.directives = extend(Object.create(baseOptions.directives || null), options.directives);\n                }\n                // copy other options\n                for (var key in options) {\n                    if (key !== 'modules' && key !== 'directives') {\n                        finalOptions[key] = options[key];\n                    }\n                }\n            }\n            finalOptions.warn = warn;\n            var compiled = baseCompile(template.trim(), finalOptions);\n            if (true) {\n                detectErrors(compiled.ast, warn);\n            }\n            compiled.errors = errors;\n            compiled.tips = tips;\n            return compiled;\n        }\n        return {\n            compile: compile,\n            compileToFunctions: createCompileToFunctionFn(compile)\n        };\n    };\n}\n\n// `createCompilerCreator` allows creating compilers that use alternative\n// parser/optimizer/codegen, e.g the SSR optimizing compiler.\n// Here we just export a default compiler using the default parts.\nvar createCompiler = createCompilerCreator(function baseCompile(template, options) {\n    var ast = parse(template.trim(), options);\n    if (options.optimize !== false) {\n        optimize(ast, options);\n    }\n    var code = generate(ast, options);\n    return {\n        ast: ast,\n        render: code.render,\n        staticRenderFns: code.staticRenderFns\n    };\n});\n\nvar _a = createCompiler(baseOptions), compileToFunctions = _a.compileToFunctions;\n\n// check whether current browser encodes a char inside attribute values\nvar div;\nfunction getShouldDecode(href) {\n    div = div || document.createElement('div');\n    div.innerHTML = href ? \"<a href=\\\"\\n\\\"/>\" : \"<div a=\\\"\\n\\\"/>\";\n    return div.innerHTML.indexOf('&#10;') > 0;\n}\n// #3663: IE encodes newlines inside attribute values while other browsers don't\nvar shouldDecodeNewlines = inBrowser ? getShouldDecode(false) : false;\n// #6828: chrome encodes content in a[href]\nvar shouldDecodeNewlinesForHref = inBrowser\n    ? getShouldDecode(true)\n    : false;\n\nvar idToTemplate = cached(function (id) {\n    var el = query(id);\n    return el && el.innerHTML;\n});\nvar mount = Vue.prototype.$mount;\nVue.prototype.$mount = function (el, hydrating) {\n    el = el && query(el);\n    /* istanbul ignore if */\n    if (el === document.body || el === document.documentElement) {\n         true &&\n            warn$2(\"Do not mount Vue to <html> or <body> - mount to normal elements instead.\");\n        return this;\n    }\n    var options = this.$options;\n    // resolve template/el and convert to render function\n    if (!options.render) {\n        var template = options.template;\n        if (template) {\n            if (typeof template === 'string') {\n                if (template.charAt(0) === '#') {\n                    template = idToTemplate(template);\n                    /* istanbul ignore if */\n                    if ( true && !template) {\n                        warn$2(\"Template element not found or is empty: \".concat(options.template), this);\n                    }\n                }\n            }\n            else if (template.nodeType) {\n                template = template.innerHTML;\n            }\n            else {\n                if (true) {\n                    warn$2('invalid template option:' + template, this);\n                }\n                return this;\n            }\n        }\n        else if (el) {\n            // @ts-expect-error\n            template = getOuterHTML(el);\n        }\n        if (template) {\n            /* istanbul ignore if */\n            if ( true && config.performance && mark) {\n                mark('compile');\n            }\n            var _a = compileToFunctions(template, {\n                outputSourceRange: \"development\" !== 'production',\n                shouldDecodeNewlines: shouldDecodeNewlines,\n                shouldDecodeNewlinesForHref: shouldDecodeNewlinesForHref,\n                delimiters: options.delimiters,\n                comments: options.comments\n            }, this), render = _a.render, staticRenderFns = _a.staticRenderFns;\n            options.render = render;\n            options.staticRenderFns = staticRenderFns;\n            /* istanbul ignore if */\n            if ( true && config.performance && mark) {\n                mark('compile end');\n                measure(\"vue \".concat(this._name, \" compile\"), 'compile', 'compile end');\n            }\n        }\n    }\n    return mount.call(this, el, hydrating);\n};\n/**\n * Get outerHTML of elements, taking care\n * of SVG elements in IE as well.\n */\nfunction getOuterHTML(el) {\n    if (el.outerHTML) {\n        return el.outerHTML;\n    }\n    else {\n        var container = document.createElement('div');\n        container.appendChild(el.cloneNode(true));\n        return container.innerHTML;\n    }\n}\nVue.compile = compileToFunctions;\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvdnVlL2Rpc3QvdnVlLmVzbS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixpQkFBaUI7QUFDckM7QUFDQTtBQUNBLCtDQUErQyxpQ0FBaUMsbUJBQW1CO0FBQ25HO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFEQUFxRCxvQ0FBb0M7QUFDekYsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixnQkFBZ0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLGdCQUFnQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixhQUFvQjtBQUN2QztBQUNBO0FBQ0E7QUFDQSxjQUFjLGFBQW9CO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixxQkFBcUI7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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Q0EsUUFBUSxLQUFxQztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxLQUFxQztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxLQUFxQztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBcUM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTLEVBRUo7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrREFBa0QsT0FBTztBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksSUFBcUM7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxLQUFxQztBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxLQUFxQztBQUM3QztBQUNBO0FBQ0EsUUFBUSxJQUFxQztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtB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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esa0RBQWtEO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLElBQXFDO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixxQkFBcUI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixxQkFBcUI7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLEtBQXFDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsS0FBcUM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsS0FBcUM7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbURBQW1ELE9BQU87QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0MsT0FBTztBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLFNBQVM7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxJQUFxQztBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsS0FBcUM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFxQztBQUM3QyxnREFBZ0Q7QUFDaEQsa0RBQWtEO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3Qix3QkFBd0I7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFxQztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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QTtBQUNBLDBCQUEwQixLQUFxQyx3QkFBd0IsQ0FBRTtBQUN6RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLEtBQXFDO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0NBQStDO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksSUFBcUM7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYSxFQUVKO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsS0FBcUM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLElBQXFDO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLEtBQXFDO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLEtBQXFDO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixJQUFxQztBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLG1CQUFtQjtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQXFDO0FBQzdDLHNEQUFzRDtBQUN0RDtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUM7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksSUFBcUM7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxzRkFBc0Y7QUFDNUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNENBQTRDO0FBQzVDLG9CQUFvQix5QkFBeUI7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQztBQUNuQyxxQ0FBcUM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDRCQUE0QjtBQUM1QjtBQUNBLElBQUksSUFBcUM7QUFDekM7QUFDQTtBQUNBO0FBQ0Esd0RBQXdELHlCQUF5QjtBQUNqRjtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxJQUFxQztBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0M7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLGlCQUFpQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxLQUFxQztBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsS0FBcUM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwyQkFBMkI7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhEQUE4RCxXQUFXO0FBQ3pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRCxTQUFTO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtREFBbUQsc0NBQXNDO0FBQ3pGO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQix1QkFBdUI7QUFDNUM7QUFDQTtBQUNBLHVDQUF1QywwQ0FBMEM7QUFDakY7O0FBRUE7QUFDQSxRQUFRLEtBQXFDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBFQUEwRTtBQUMxRTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksS0FBcUM7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixLQUFxQztBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRCw0QkFBNEI7QUFDNUUsU0FBUztBQUNUO0FBQ0EsZ0RBQWdELDZCQUE2QjtBQUM3RSxTQUFTO0FBQ1QsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0M7QUFDbEMsUUFBUSxJQUFxQztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0MsT0FBTztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksS0FBcUM7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsSUFBcUM7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0M7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLGFBQWE7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0Isa0JBQWtCO0FBQ2xDO0FBQ0Esb0JBQW9CLG9CQUFvQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrREFBK0Q7QUFDL0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLElBQXFDO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsS0FBcUM7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIseUJBQXlCO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixJQUFxQztBQUNyRDtBQUNBO0FBQ0EsOEJBQThCLHVCQUF1QjtBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLHlCQUF5QjtBQUNuRDtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsb0JBQW9CO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3Qix3QkFBd0I7QUFDaEQ7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDJCQUEyQjtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQix5QkFBeUI7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxJQUFxQztBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNEQUFzRDtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsdUJBQXVCO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLFdBQVc7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLHVCQUF1QjtBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixJQUFxQztBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixvQkFBb0I7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxJQUFxQztBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLEtBQXFDO0FBQ3JFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEMsdUJBQXVCO0FBQ2pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsS0FBcUM7QUFDckU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDLElBQXFDO0FBQ3RFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMENBQTBDLDBCQUEwQjtBQUNwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4Qyx5QkFBeUI7QUFDdkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1EQUFtRCw0QkFBNEI7QUFDL0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QiwyQkFBMkI7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLDhCQUE4QjtBQUMxRDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixpQkFBaUI7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEZBQTBGO0FBQzFGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNENBQTRDO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixnQkFBZ0I7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0EsMkJBQTJCO0FBQzNCO0FBQ0E7QUFDQSwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0EsMkJBQTJCO0FBQzNCO0FBQ0E7QUFDQSwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0EsMkJBQTJCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsUUFBUTtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0Isb0JBQW9CO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0RBQWdELGdCQUFnQix3QkFBd0IsV0FBVztBQUNuRztBQUNBO0FBQ0Esc0RBQXNELDRDQUE0QztBQUNsRztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsNENBQTRDO0FBQzFFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUMsMEJBQTBCO0FBQy9EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxzRkFBc0Y7QUFDdEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsS0FBcUM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5REFBeUQ7QUFDekQ7QUFDQTtBQUNBLDZDQUE2QztBQUM3QztBQUNBLG9DQUFvQyx1Q0FBdUM7QUFDM0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QyxPQUFPO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLE9BQU87QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtEQUErRCx3QkFBd0I7QUFDdkY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBcUM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsSUFBcUM7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBGQUEwRjtBQUMxRixnQ0FBZ0M7QUFDaEM7QUFDQSx5QkFBeUI7QUFDekIsMEJBQTBCLG1FQUFtRTtBQUM3RixjQUFjLDRGQUE0RjtBQUMxRyxVQUFVLEtBQUssNENBQTRDO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpREFBaUQsa0JBQWtCO0FBQ25FLDBCQUEwQiwrQ0FBK0M7QUFDekUsdURBQXVEO0FBQ3ZEO0FBQ0EsNERBQTREO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFxQztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrREFBa0Q7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEI7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0RBQStELHFDQUFxQztBQUNwRztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDO0FBQ2hDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQ0FBK0M7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwwQkFBMEI7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBLDhDQUE4QyxTQUFTO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0Isd0JBQXdCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnRUFBZ0U7QUFDaEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkRBQTZELDZCQUE2QjtBQUMxRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2REFBNkQsZ0NBQWdDO0FBQzdGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEVBQTRFO0FBQzVFO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxLQUFxQztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsS0FBcUM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1FQUFtRTtBQUNuRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0Msc0NBQXNDOztBQUV4RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9EQUFvRCwwQ0FBMEM7QUFDOUY7QUFDQTtBQUNBO0FBQ0Esd0RBQXdELDhDQUE4QztBQUN0RztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxLQUFxQztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQyxPQUFPO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QywrQkFBK0I7QUFDdkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUM7QUFDbkMsc0NBQXNDO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLEtBQXFDO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLEtBQXFDO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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Q0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDLE1BQU07QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksSUFBcUM7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtDQUErQyxNQUFNO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxTQUFTO0FBQ1QsV0FBVztBQUNYLFVBQVU7QUFDVixVQUFVO0FBQ1YsU0FBUztBQUNULFVBQVU7QUFDVjtBQUNBLDJDQUEyQztBQUMzQyw4REFBOEQ7QUFDOUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnREFBZ0QsNEJBQTRCO0FBQzVFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsS0FBcUM7QUFDckQ7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsT0FBTztBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsS0FBcUM7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsd0JBQXdCO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsNkJBQTZCO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkMseUNBQXlDO0FBQ3BGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLEtBQXFDO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsS0FBcUM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QjtBQUM1QjtBQUNBLHlFQUF5RTtBQUN6RTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLDZCQUE2QjtBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixxSEFBcUg7QUFDN0k7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQztBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDLE9BQU87QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQSx3TUFBd007QUFDeE07QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsS0FBcUM7QUFDN0Msd0ZBQXdGLGlCQUFpQjtBQUN6RztBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0Msa0JBQWtCLG1DQUFtQztBQUNyRixtQ0FBbUMsbUJBQW1CLGlCQUFpQixLQUFLO0FBQzVFLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsMENBQTBDO0FBQ3hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEM7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUM7QUFDdkM7QUFDQTtBQUNBLGFBQWEsdUZBQXVGO0FBQ3BHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNEQUFzRCx5QkFBeUI7QUFDL0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixxQkFBcUI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0RBQW9ELHFDQUFxQztBQUN6RjtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9FQUFvRSxpQ0FBaUM7QUFDckc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0VBQW9FLDRCQUE0QjtBQUNoRztBQUNBLHdGQUF3RjtBQUN4RjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsSUFBSTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixrQkFBa0I7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLHFDQUFxQztBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2RUFBNkUsR0FBRztBQUNoRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLDBCQUEwQjtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw0QkFBNEI7QUFDNUIsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixrQkFBa0I7QUFDdEM7QUFDQTtBQUNBLG9DQUFvQywrQkFBK0I7QUFDbkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0Isc0JBQXNCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxZQUFZLElBQXFDO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksSUFBcUM7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQSwyREFBMkQsd0JBQXdCO0FBQ25GO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5REFBeUQsd0JBQXdCO0FBQ2pGO0FBQ0E7QUFDQSwyREFBMkQsc0JBQXNCO0FBQ2pGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksSUFBcUM7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixLQUFxQztBQUN6RDtBQUNBO0FBQ0E7QUFDQSwrREFBK0QsV0FBVztBQUMxRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixJQUFxQztBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QztBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsS0FBcUM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEtBQXFDO0FBQzdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsSUFBcUM7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixLQUFxQztBQUNyRDtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsYUFBb0I7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLEtBQXFDO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUU2c0IiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdnVlL2Rpc3QvdnVlLmVzbS5qcz80YjI5Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogVnVlLmpzIHYyLjcuMTRcbiAqIChjKSAyMDE0LTIwMjIgRXZhbiBZb3VcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbiAqL1xudmFyIGVtcHR5T2JqZWN0ID0gT2JqZWN0LmZyZWV6ZSh7fSk7XG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG4vLyBUaGVzZSBoZWxwZXJzIHByb2R1Y2UgYmV0dGVyIFZNIGNvZGUgaW4gSlMgZW5naW5lcyBkdWUgdG8gdGhlaXJcbi8vIGV4cGxpY2l0bmVzcyBhbmQgZnVuY3Rpb24gaW5saW5pbmcuXG5mdW5jdGlvbiBpc1VuZGVmKHYpIHtcbiAgICByZXR1cm4gdiA9PT0gdW5kZWZpbmVkIHx8IHYgPT09IG51bGw7XG59XG5mdW5jdGlvbiBpc0RlZih2KSB7XG4gICAgcmV0dXJuIHYgIT09IHVuZGVmaW5lZCAmJiB2ICE9PSBudWxsO1xufVxuZnVuY3Rpb24gaXNUcnVlKHYpIHtcbiAgICByZXR1cm4gdiA9PT0gdHJ1ZTtcbn1cbmZ1bmN0aW9uIGlzRmFsc2Uodikge1xuICAgIHJldHVybiB2ID09PSBmYWxzZTtcbn1cbi8qKlxuICogQ2hlY2sgaWYgdmFsdWUgaXMgcHJpbWl0aXZlLlxuICovXG5mdW5jdGlvbiBpc1ByaW1pdGl2ZSh2YWx1ZSkge1xuICAgIHJldHVybiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyB8fFxuICAgICAgICB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInIHx8XG4gICAgICAgIC8vICRmbG93LWRpc2FibGUtbGluZVxuICAgICAgICB0eXBlb2YgdmFsdWUgPT09ICdzeW1ib2wnIHx8XG4gICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKTtcbn1cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nO1xufVxuLyoqXG4gKiBRdWljayBvYmplY3QgY2hlY2sgLSB0aGlzIGlzIHByaW1hcmlseSB1c2VkIHRvIHRlbGxcbiAqIG9iamVjdHMgZnJvbSBwcmltaXRpdmUgdmFsdWVzIHdoZW4gd2Uga25vdyB0aGUgdmFsdWVcbiAqIGlzIGEgSlNPTi1jb21wbGlhbnQgdHlwZS5cbiAqL1xuZnVuY3Rpb24gaXNPYmplY3Qob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAhPT0gbnVsbCAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jztcbn1cbi8qKlxuICogR2V0IHRoZSByYXcgdHlwZSBzdHJpbmcgb2YgYSB2YWx1ZSwgZS5nLiwgW29iamVjdCBPYmplY3RdLlxuICovXG52YXIgX3RvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbmZ1bmN0aW9uIHRvUmF3VHlwZSh2YWx1ZSkge1xuICAgIHJldHVybiBfdG9TdHJpbmcuY2FsbCh2YWx1ZSkuc2xpY2UoOCwgLTEpO1xufVxuLyoqXG4gKiBTdHJpY3Qgb2JqZWN0IHR5cGUgY2hlY2suIE9ubHkgcmV0dXJucyB0cnVlXG4gKiBmb3IgcGxhaW4gSmF2YVNjcmlwdCBvYmplY3RzLlxuICovXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KG9iaikge1xuICAgIHJldHVybiBfdG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBPYmplY3RdJztcbn1cbmZ1bmN0aW9uIGlzUmVnRXhwKHYpIHtcbiAgICByZXR1cm4gX3RvU3RyaW5nLmNhbGwodikgPT09ICdbb2JqZWN0IFJlZ0V4cF0nO1xufVxuLyoqXG4gKiBDaGVjayBpZiB2YWwgaXMgYSB2YWxpZCBhcnJheSBpbmRleC5cbiAqL1xuZnVuY3Rpb24gaXNWYWxpZEFycmF5SW5kZXgodmFsKSB7XG4gICAgdmFyIG4gPSBwYXJzZUZsb2F0KFN0cmluZyh2YWwpKTtcbiAgICByZXR1cm4gbiA+PSAwICYmIE1hdGguZmxvb3IobikgPT09IG4gJiYgaXNGaW5pdGUodmFsKTtcbn1cbmZ1bmN0aW9uIGlzUHJvbWlzZSh2YWwpIHtcbiAgICByZXR1cm4gKGlzRGVmKHZhbCkgJiZcbiAgICAgICAgdHlwZW9mIHZhbC50aGVuID09PSAnZnVuY3Rpb24nICYmXG4gICAgICAgIHR5cGVvZiB2YWwuY2F0Y2ggPT09ICdmdW5jdGlvbicpO1xufVxuLyoqXG4gKiBDb252ZXJ0IGEgdmFsdWUgdG8gYSBzdHJpbmcgdGhhdCBpcyBhY3R1YWxseSByZW5kZXJlZC5cbiAqL1xuZnVuY3Rpb24gdG9TdHJpbmcodmFsKSB7XG4gICAgcmV0dXJuIHZhbCA9PSBudWxsXG4gICAgICAgID8gJydcbiAgICAgICAgOiBBcnJheS5pc0FycmF5KHZhbCkgfHwgKGlzUGxhaW5PYmplY3QodmFsKSAmJiB2YWwudG9TdHJpbmcgPT09IF90b1N0cmluZylcbiAgICAgICAgICAgID8gSlNPTi5zdHJpbmdpZnkodmFsLCBudWxsLCAyKVxuICAgICAgICAgICAgOiBTdHJpbmcodmFsKTtcbn1cbi8qKlxuICogQ29udmVydCBhbiBpbnB1dCB2YWx1ZSB0byBhIG51bWJlciBmb3IgcGVyc2lzdGVuY2UuXG4gKiBJZiB0aGUgY29udmVyc2lvbiBmYWlscywgcmV0dXJuIG9yaWdpbmFsIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gdG9OdW1iZXIodmFsKSB7XG4gICAgdmFyIG4gPSBwYXJzZUZsb2F0KHZhbCk7XG4gICAgcmV0dXJuIGlzTmFOKG4pID8gdmFsIDogbjtcbn1cbi8qKlxuICogTWFrZSBhIG1hcCBhbmQgcmV0dXJuIGEgZnVuY3Rpb24gZm9yIGNoZWNraW5nIGlmIGEga2V5XG4gKiBpcyBpbiB0aGF0IG1hcC5cbiAqL1xuZnVuY3Rpb24gbWFrZU1hcChzdHIsIGV4cGVjdHNMb3dlckNhc2UpIHtcbiAgICB2YXIgbWFwID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB2YXIgbGlzdCA9IHN0ci5zcGxpdCgnLCcpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICBtYXBbbGlzdFtpXV0gPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZXhwZWN0c0xvd2VyQ2FzZSA/IGZ1bmN0aW9uICh2YWwpIHsgcmV0dXJuIG1hcFt2YWwudG9Mb3dlckNhc2UoKV07IH0gOiBmdW5jdGlvbiAodmFsKSB7IHJldHVybiBtYXBbdmFsXTsgfTtcbn1cbi8qKlxuICogQ2hlY2sgaWYgYSB0YWcgaXMgYSBidWlsdC1pbiB0YWcuXG4gKi9cbnZhciBpc0J1aWx0SW5UYWcgPSBtYWtlTWFwKCdzbG90LGNvbXBvbmVudCcsIHRydWUpO1xuLyoqXG4gKiBDaGVjayBpZiBhbiBhdHRyaWJ1dGUgaXMgYSByZXNlcnZlZCBhdHRyaWJ1dGUuXG4gKi9cbnZhciBpc1Jlc2VydmVkQXR0cmlidXRlID0gbWFrZU1hcCgna2V5LHJlZixzbG90LHNsb3Qtc2NvcGUsaXMnKTtcbi8qKlxuICogUmVtb3ZlIGFuIGl0ZW0gZnJvbSBhbiBhcnJheS5cbiAqL1xuZnVuY3Rpb24gcmVtb3ZlJDIoYXJyLCBpdGVtKSB7XG4gICAgdmFyIGxlbiA9IGFyci5sZW5ndGg7XG4gICAgaWYgKGxlbikge1xuICAgICAgICAvLyBmYXN0IHBhdGggZm9yIHRoZSBvbmx5IC8gbGFzdCBpdGVtXG4gICAgICAgIGlmIChpdGVtID09PSBhcnJbbGVuIC0gMV0pIHtcbiAgICAgICAgICAgIGFyci5sZW5ndGggPSBsZW4gLSAxO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciBpbmRleCA9IGFyci5pbmRleE9mKGl0ZW0pO1xuICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIGFyci5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB9XG4gICAgfVxufVxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIGFuIG9iamVjdCBoYXMgdGhlIHByb3BlcnR5LlxuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuZnVuY3Rpb24gaGFzT3duKG9iaiwga2V5KSB7XG4gICAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpO1xufVxuLyoqXG4gKiBDcmVhdGUgYSBjYWNoZWQgdmVyc2lvbiBvZiBhIHB1cmUgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNhY2hlZChmbikge1xuICAgIHZhciBjYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGNhY2hlZEZuKHN0cikge1xuICAgICAgICB2YXIgaGl0ID0gY2FjaGVbc3RyXTtcbiAgICAgICAgcmV0dXJuIGhpdCB8fCAoY2FjaGVbc3RyXSA9IGZuKHN0cikpO1xuICAgIH07XG59XG4vKipcbiAqIENhbWVsaXplIGEgaHlwaGVuLWRlbGltaXRlZCBzdHJpbmcuXG4gKi9cbnZhciBjYW1lbGl6ZVJFID0gLy0oXFx3KS9nO1xudmFyIGNhbWVsaXplID0gY2FjaGVkKGZ1bmN0aW9uIChzdHIpIHtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoY2FtZWxpemVSRSwgZnVuY3Rpb24gKF8sIGMpIHsgcmV0dXJuIChjID8gYy50b1VwcGVyQ2FzZSgpIDogJycpOyB9KTtcbn0pO1xuLyoqXG4gKiBDYXBpdGFsaXplIGEgc3RyaW5nLlxuICovXG52YXIgY2FwaXRhbGl6ZSA9IGNhY2hlZChmdW5jdGlvbiAoc3RyKSB7XG4gICAgcmV0dXJuIHN0ci5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN0ci5zbGljZSgxKTtcbn0pO1xuLyoqXG4gKiBIeXBoZW5hdGUgYSBjYW1lbENhc2Ugc3RyaW5nLlxuICovXG52YXIgaHlwaGVuYXRlUkUgPSAvXFxCKFtBLVpdKS9nO1xudmFyIGh5cGhlbmF0ZSA9IGNhY2hlZChmdW5jdGlvbiAoc3RyKSB7XG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKGh5cGhlbmF0ZVJFLCAnLSQxJykudG9Mb3dlckNhc2UoKTtcbn0pO1xuLyoqXG4gKiBTaW1wbGUgYmluZCBwb2x5ZmlsbCBmb3IgZW52aXJvbm1lbnRzIHRoYXQgZG8gbm90IHN1cHBvcnQgaXQsXG4gKiBlLmcuLCBQaGFudG9tSlMgMS54LiBUZWNobmljYWxseSwgd2UgZG9uJ3QgbmVlZCB0aGlzIGFueW1vcmVcbiAqIHNpbmNlIG5hdGl2ZSBiaW5kIGlzIG5vdyBwZXJmb3JtYW50IGVub3VnaCBpbiBtb3N0IGJyb3dzZXJzLlxuICogQnV0IHJlbW92aW5nIGl0IHdvdWxkIG1lYW4gYnJlYWtpbmcgY29kZSB0aGF0IHdhcyBhYmxlIHRvIHJ1biBpblxuICogUGhhbnRvbUpTIDEueCwgc28gdGhpcyBtdXN0IGJlIGtlcHQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuXG4gKi9cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5mdW5jdGlvbiBwb2x5ZmlsbEJpbmQoZm4sIGN0eCkge1xuICAgIGZ1bmN0aW9uIGJvdW5kRm4oYSkge1xuICAgICAgICB2YXIgbCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHJldHVybiBsXG4gICAgICAgICAgICA/IGwgPiAxXG4gICAgICAgICAgICAgICAgPyBmbi5hcHBseShjdHgsIGFyZ3VtZW50cylcbiAgICAgICAgICAgICAgICA6IGZuLmNhbGwoY3R4LCBhKVxuICAgICAgICAgICAgOiBmbi5jYWxsKGN0eCk7XG4gICAgfVxuICAgIGJvdW5kRm4uX2xlbmd0aCA9IGZuLmxlbmd0aDtcbiAgICByZXR1cm4gYm91bmRGbjtcbn1cbmZ1bmN0aW9uIG5hdGl2ZUJpbmQoZm4sIGN0eCkge1xuICAgIHJldHVybiBmbi5iaW5kKGN0eCk7XG59XG4vLyBAdHMtZXhwZWN0LWVycm9yIGJpbmQgY2Fubm90IGJlIGB1bmRlZmluZWRgXG52YXIgYmluZCQxID0gRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgPyBuYXRpdmVCaW5kIDogcG9seWZpbGxCaW5kO1xuLyoqXG4gKiBDb252ZXJ0IGFuIEFycmF5LWxpa2Ugb2JqZWN0IHRvIGEgcmVhbCBBcnJheS5cbiAqL1xuZnVuY3Rpb24gdG9BcnJheShsaXN0LCBzdGFydCkge1xuICAgIHN0YXJ0ID0gc3RhcnQgfHwgMDtcbiAgICB2YXIgaSA9IGxpc3QubGVuZ3RoIC0gc3RhcnQ7XG4gICAgdmFyIHJldCA9IG5ldyBBcnJheShpKTtcbiAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgIHJldFtpXSA9IGxpc3RbaSArIHN0YXJ0XTtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbn1cbi8qKlxuICogTWl4IHByb3BlcnRpZXMgaW50byB0YXJnZXQgb2JqZWN0LlxuICovXG5mdW5jdGlvbiBleHRlbmQodG8sIF9mcm9tKSB7XG4gICAgZm9yICh2YXIga2V5IGluIF9mcm9tKSB7XG4gICAgICAgIHRvW2tleV0gPSBfZnJvbVtrZXldO1xuICAgIH1cbiAgICByZXR1cm4gdG87XG59XG4vKipcbiAqIE1lcmdlIGFuIEFycmF5IG9mIE9iamVjdHMgaW50byBhIHNpbmdsZSBPYmplY3QuXG4gKi9cbmZ1bmN0aW9uIHRvT2JqZWN0KGFycikge1xuICAgIHZhciByZXMgPSB7fTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoYXJyW2ldKSB7XG4gICAgICAgICAgICBleHRlbmQocmVzLCBhcnJbaV0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xuLyoqXG4gKiBQZXJmb3JtIG5vIG9wZXJhdGlvbi5cbiAqIFN0dWJiaW5nIGFyZ3MgdG8gbWFrZSBGbG93IGhhcHB5IHdpdGhvdXQgbGVhdmluZyB1c2VsZXNzIHRyYW5zcGlsZWQgY29kZVxuICogd2l0aCAuLi5yZXN0IChodHRwczovL2Zsb3cub3JnL2Jsb2cvMjAxNy8wNS8wNy9TdHJpY3QtRnVuY3Rpb24tQ2FsbC1Bcml0eS8pLlxuICovXG5mdW5jdGlvbiBub29wKGEsIGIsIGMpIHsgfVxuLyoqXG4gKiBBbHdheXMgcmV0dXJuIGZhbHNlLlxuICovXG52YXIgbm8gPSBmdW5jdGlvbiAoYSwgYiwgYykgeyByZXR1cm4gZmFsc2U7IH07XG4vKiBlc2xpbnQtZW5hYmxlIG5vLXVudXNlZC12YXJzICovXG4vKipcbiAqIFJldHVybiB0aGUgc2FtZSB2YWx1ZS5cbiAqL1xudmFyIGlkZW50aXR5ID0gZnVuY3Rpb24gKF8pIHsgcmV0dXJuIF87IH07XG4vKipcbiAqIEdlbmVyYXRlIGEgc3RyaW5nIGNvbnRhaW5pbmcgc3RhdGljIGtleXMgZnJvbSBjb21waWxlciBtb2R1bGVzLlxuICovXG5mdW5jdGlvbiBnZW5TdGF0aWNLZXlzJDEobW9kdWxlcykge1xuICAgIHJldHVybiBtb2R1bGVzXG4gICAgICAgIC5yZWR1Y2UoZnVuY3Rpb24gKGtleXMsIG0pIHtcbiAgICAgICAgcmV0dXJuIGtleXMuY29uY2F0KG0uc3RhdGljS2V5cyB8fCBbXSk7XG4gICAgfSwgW10pXG4gICAgICAgIC5qb2luKCcsJyk7XG59XG4vKipcbiAqIENoZWNrIGlmIHR3byB2YWx1ZXMgYXJlIGxvb3NlbHkgZXF1YWwgLSB0aGF0IGlzLFxuICogaWYgdGhleSBhcmUgcGxhaW4gb2JqZWN0cywgZG8gdGhleSBoYXZlIHRoZSBzYW1lIHNoYXBlP1xuICovXG5mdW5jdGlvbiBsb29zZUVxdWFsKGEsIGIpIHtcbiAgICBpZiAoYSA9PT0gYilcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgdmFyIGlzT2JqZWN0QSA9IGlzT2JqZWN0KGEpO1xuICAgIHZhciBpc09iamVjdEIgPSBpc09iamVjdChiKTtcbiAgICBpZiAoaXNPYmplY3RBICYmIGlzT2JqZWN0Qikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdmFyIGlzQXJyYXlBID0gQXJyYXkuaXNBcnJheShhKTtcbiAgICAgICAgICAgIHZhciBpc0FycmF5QiA9IEFycmF5LmlzQXJyYXkoYik7XG4gICAgICAgICAgICBpZiAoaXNBcnJheUEgJiYgaXNBcnJheUIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKGEubGVuZ3RoID09PSBiLmxlbmd0aCAmJlxuICAgICAgICAgICAgICAgICAgICBhLmV2ZXJ5KGZ1bmN0aW9uIChlLCBpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbG9vc2VFcXVhbChlLCBiW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYSBpbnN0YW5jZW9mIERhdGUgJiYgYiBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYS5nZXRUaW1lKCkgPT09IGIuZ2V0VGltZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoIWlzQXJyYXlBICYmICFpc0FycmF5Qikge1xuICAgICAgICAgICAgICAgIHZhciBrZXlzQSA9IE9iamVjdC5rZXlzKGEpO1xuICAgICAgICAgICAgICAgIHZhciBrZXlzQiA9IE9iamVjdC5rZXlzKGIpO1xuICAgICAgICAgICAgICAgIHJldHVybiAoa2V5c0EubGVuZ3RoID09PSBrZXlzQi5sZW5ndGggJiZcbiAgICAgICAgICAgICAgICAgICAga2V5c0EuZXZlcnkoZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxvb3NlRXF1YWwoYVtrZXldLCBiW2tleV0pO1xuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICghaXNPYmplY3RBICYmICFpc09iamVjdEIpIHtcbiAgICAgICAgcmV0dXJuIFN0cmluZyhhKSA9PT0gU3RyaW5nKGIpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cbi8qKlxuICogUmV0dXJuIHRoZSBmaXJzdCBpbmRleCBhdCB3aGljaCBhIGxvb3NlbHkgZXF1YWwgdmFsdWUgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgYXJyYXkgKGlmIHZhbHVlIGlzIGEgcGxhaW4gb2JqZWN0LCB0aGUgYXJyYXkgbXVzdFxuICogY29udGFpbiBhbiBvYmplY3Qgb2YgdGhlIHNhbWUgc2hhcGUpLCBvciAtMSBpZiBpdCBpcyBub3QgcHJlc2VudC5cbiAqL1xuZnVuY3Rpb24gbG9vc2VJbmRleE9mKGFyciwgdmFsKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGxvb3NlRXF1YWwoYXJyW2ldLCB2YWwpKVxuICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgfVxuICAgIHJldHVybiAtMTtcbn1cbi8qKlxuICogRW5zdXJlIGEgZnVuY3Rpb24gaXMgY2FsbGVkIG9ubHkgb25jZS5cbiAqL1xuZnVuY3Rpb24gb25jZShmbikge1xuICAgIHZhciBjYWxsZWQgPSBmYWxzZTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIWNhbGxlZCkge1xuICAgICAgICAgICAgY2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH1cbiAgICB9O1xufVxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2lzI3BvbHlmaWxsXG5mdW5jdGlvbiBoYXNDaGFuZ2VkKHgsIHkpIHtcbiAgICBpZiAoeCA9PT0geSkge1xuICAgICAgICByZXR1cm4geCA9PT0gMCAmJiAxIC8geCAhPT0gMSAvIHk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4geCA9PT0geCB8fCB5ID09PSB5O1xuICAgIH1cbn1cblxudmFyIFNTUl9BVFRSID0gJ2RhdGEtc2VydmVyLXJlbmRlcmVkJztcbnZhciBBU1NFVF9UWVBFUyA9IFsnY29tcG9uZW50JywgJ2RpcmVjdGl2ZScsICdmaWx0ZXInXTtcbnZhciBMSUZFQ1lDTEVfSE9PS1MgPSBbXG4gICAgJ2JlZm9yZUNyZWF0ZScsXG4gICAgJ2NyZWF0ZWQnLFxuICAgICdiZWZvcmVNb3VudCcsXG4gICAgJ21vdW50ZWQnLFxuICAgICdiZWZvcmVVcGRhdGUnLFxuICAgICd1cGRhdGVkJyxcbiAgICAnYmVmb3JlRGVzdHJveScsXG4gICAgJ2Rlc3Ryb3llZCcsXG4gICAgJ2FjdGl2YXRlZCcsXG4gICAgJ2RlYWN0aXZhdGVkJyxcbiAgICAnZXJyb3JDYXB0dXJlZCcsXG4gICAgJ3NlcnZlclByZWZldGNoJyxcbiAgICAncmVuZGVyVHJhY2tlZCcsXG4gICAgJ3JlbmRlclRyaWdnZXJlZCdcbl07XG5cbnZhciBjb25maWcgPSB7XG4gICAgLyoqXG4gICAgICogT3B0aW9uIG1lcmdlIHN0cmF0ZWdpZXMgKHVzZWQgaW4gY29yZS91dGlsL29wdGlvbnMpXG4gICAgICovXG4gICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAgb3B0aW9uTWVyZ2VTdHJhdGVnaWVzOiBPYmplY3QuY3JlYXRlKG51bGwpLFxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gc3VwcHJlc3Mgd2FybmluZ3MuXG4gICAgICovXG4gICAgc2lsZW50OiBmYWxzZSxcbiAgICAvKipcbiAgICAgKiBTaG93IHByb2R1Y3Rpb24gbW9kZSB0aXAgbWVzc2FnZSBvbiBib290P1xuICAgICAqL1xuICAgIHByb2R1Y3Rpb25UaXA6IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicsXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byBlbmFibGUgZGV2dG9vbHNcbiAgICAgKi9cbiAgICBkZXZ0b29sczogcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyxcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIHJlY29yZCBwZXJmXG4gICAgICovXG4gICAgcGVyZm9ybWFuY2U6IGZhbHNlLFxuICAgIC8qKlxuICAgICAqIEVycm9yIGhhbmRsZXIgZm9yIHdhdGNoZXIgZXJyb3JzXG4gICAgICovXG4gICAgZXJyb3JIYW5kbGVyOiBudWxsLFxuICAgIC8qKlxuICAgICAqIFdhcm4gaGFuZGxlciBmb3Igd2F0Y2hlciB3YXJuc1xuICAgICAqL1xuICAgIHdhcm5IYW5kbGVyOiBudWxsLFxuICAgIC8qKlxuICAgICAqIElnbm9yZSBjZXJ0YWluIGN1c3RvbSBlbGVtZW50c1xuICAgICAqL1xuICAgIGlnbm9yZWRFbGVtZW50czogW10sXG4gICAgLyoqXG4gICAgICogQ3VzdG9tIHVzZXIga2V5IGFsaWFzZXMgZm9yIHYtb25cbiAgICAgKi9cbiAgICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgICBrZXlDb2RlczogT2JqZWN0LmNyZWF0ZShudWxsKSxcbiAgICAvKipcbiAgICAgKiBDaGVjayBpZiBhIHRhZyBpcyByZXNlcnZlZCBzbyB0aGF0IGl0IGNhbm5vdCBiZSByZWdpc3RlcmVkIGFzIGFcbiAgICAgKiBjb21wb25lbnQuIFRoaXMgaXMgcGxhdGZvcm0tZGVwZW5kZW50IGFuZCBtYXkgYmUgb3ZlcndyaXR0ZW4uXG4gICAgICovXG4gICAgaXNSZXNlcnZlZFRhZzogbm8sXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgYW4gYXR0cmlidXRlIGlzIHJlc2VydmVkIHNvIHRoYXQgaXQgY2Fubm90IGJlIHVzZWQgYXMgYSBjb21wb25lbnRcbiAgICAgKiBwcm9wLiBUaGlzIGlzIHBsYXRmb3JtLWRlcGVuZGVudCBhbmQgbWF5IGJlIG92ZXJ3cml0dGVuLlxuICAgICAqL1xuICAgIGlzUmVzZXJ2ZWRBdHRyOiBubyxcbiAgICAvKipcbiAgICAgKiBDaGVjayBpZiBhIHRhZyBpcyBhbiB1bmtub3duIGVsZW1lbnQuXG4gICAgICogUGxhdGZvcm0tZGVwZW5kZW50LlxuICAgICAqL1xuICAgIGlzVW5rbm93bkVsZW1lbnQ6IG5vLFxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgbmFtZXNwYWNlIG9mIGFuIGVsZW1lbnRcbiAgICAgKi9cbiAgICBnZXRUYWdOYW1lc3BhY2U6IG5vb3AsXG4gICAgLyoqXG4gICAgICogUGFyc2UgdGhlIHJlYWwgdGFnIG5hbWUgZm9yIHRoZSBzcGVjaWZpYyBwbGF0Zm9ybS5cbiAgICAgKi9cbiAgICBwYXJzZVBsYXRmb3JtVGFnTmFtZTogaWRlbnRpdHksXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgYW4gYXR0cmlidXRlIG11c3QgYmUgYm91bmQgdXNpbmcgcHJvcGVydHksIGUuZy4gdmFsdWVcbiAgICAgKiBQbGF0Zm9ybS1kZXBlbmRlbnQuXG4gICAgICovXG4gICAgbXVzdFVzZVByb3A6IG5vLFxuICAgIC8qKlxuICAgICAqIFBlcmZvcm0gdXBkYXRlcyBhc3luY2hyb25vdXNseS4gSW50ZW5kZWQgdG8gYmUgdXNlZCBieSBWdWUgVGVzdCBVdGlsc1xuICAgICAqIFRoaXMgd2lsbCBzaWduaWZpY2FudGx5IHJlZHVjZSBwZXJmb3JtYW5jZSBpZiBzZXQgdG8gZmFsc2UuXG4gICAgICovXG4gICAgYXN5bmM6IHRydWUsXG4gICAgLyoqXG4gICAgICogRXhwb3NlZCBmb3IgbGVnYWN5IHJlYXNvbnNcbiAgICAgKi9cbiAgICBfbGlmZWN5Y2xlSG9va3M6IExJRkVDWUNMRV9IT09LU1xufTtcblxuLyoqXG4gKiB1bmljb2RlIGxldHRlcnMgdXNlZCBmb3IgcGFyc2luZyBodG1sIHRhZ3MsIGNvbXBvbmVudCBuYW1lcyBhbmQgcHJvcGVydHkgcGF0aHMuXG4gKiB1c2luZyBodHRwczovL3d3dy53My5vcmcvVFIvaHRtbDUzL3NlbWFudGljcy1zY3JpcHRpbmcuaHRtbCNwb3RlbnRpYWxjdXN0b21lbGVtZW50bmFtZVxuICogc2tpcHBpbmcgXFx1MTAwMDAtXFx1RUZGRkYgZHVlIHRvIGl0IGZyZWV6aW5nIHVwIFBoYW50b21KU1xuICovXG52YXIgdW5pY29kZVJlZ0V4cCA9IC9hLXpBLVpcXHUwMEI3XFx1MDBDMC1cXHUwMEQ2XFx1MDBEOC1cXHUwMEY2XFx1MDBGOC1cXHUwMzdEXFx1MDM3Ri1cXHUxRkZGXFx1MjAwQy1cXHUyMDBEXFx1MjAzRi1cXHUyMDQwXFx1MjA3MC1cXHUyMThGXFx1MkMwMC1cXHUyRkVGXFx1MzAwMS1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkZELztcbi8qKlxuICogQ2hlY2sgaWYgYSBzdHJpbmcgc3RhcnRzIHdpdGggJCBvciBfXG4gKi9cbmZ1bmN0aW9uIGlzUmVzZXJ2ZWQoc3RyKSB7XG4gICAgdmFyIGMgPSAoc3RyICsgJycpLmNoYXJDb2RlQXQoMCk7XG4gICAgcmV0dXJuIGMgPT09IDB4MjQgfHwgYyA9PT0gMHg1Zjtcbn1cbi8qKlxuICogRGVmaW5lIGEgcHJvcGVydHkuXG4gKi9cbmZ1bmN0aW9uIGRlZihvYmosIGtleSwgdmFsLCBlbnVtZXJhYmxlKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICAgIHZhbHVlOiB2YWwsXG4gICAgICAgIGVudW1lcmFibGU6ICEhZW51bWVyYWJsZSxcbiAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xufVxuLyoqXG4gKiBQYXJzZSBzaW1wbGUgcGF0aC5cbiAqL1xudmFyIGJhaWxSRSA9IG5ldyBSZWdFeHAoXCJbXlwiLmNvbmNhdCh1bmljb2RlUmVnRXhwLnNvdXJjZSwgXCIuJF9cXFxcZF1cIikpO1xuZnVuY3Rpb24gcGFyc2VQYXRoKHBhdGgpIHtcbiAgICBpZiAoYmFpbFJFLnRlc3QocGF0aCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgc2VnbWVudHMgPSBwYXRoLnNwbGl0KCcuJyk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWdtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKCFvYmopXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgb2JqID0gb2JqW3NlZ21lbnRzW2ldXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2JqO1xuICAgIH07XG59XG5cbi8vIGNhbiB3ZSB1c2UgX19wcm90b19fP1xudmFyIGhhc1Byb3RvID0gJ19fcHJvdG9fXycgaW4ge307XG4vLyBCcm93c2VyIGVudmlyb25tZW50IHNuaWZmaW5nXG52YXIgaW5Ccm93c2VyID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCc7XG52YXIgVUEgPSBpbkJyb3dzZXIgJiYgd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKTtcbnZhciBpc0lFID0gVUEgJiYgL21zaWV8dHJpZGVudC8udGVzdChVQSk7XG52YXIgaXNJRTkgPSBVQSAmJiBVQS5pbmRleE9mKCdtc2llIDkuMCcpID4gMDtcbnZhciBpc0VkZ2UgPSBVQSAmJiBVQS5pbmRleE9mKCdlZGdlLycpID4gMDtcblVBICYmIFVBLmluZGV4T2YoJ2FuZHJvaWQnKSA+IDA7XG52YXIgaXNJT1MgPSBVQSAmJiAvaXBob25lfGlwYWR8aXBvZHxpb3MvLnRlc3QoVUEpO1xuVUEgJiYgL2Nocm9tZVxcL1xcZCsvLnRlc3QoVUEpICYmICFpc0VkZ2U7XG5VQSAmJiAvcGhhbnRvbWpzLy50ZXN0KFVBKTtcbnZhciBpc0ZGID0gVUEgJiYgVUEubWF0Y2goL2ZpcmVmb3hcXC8oXFxkKykvKTtcbi8vIEZpcmVmb3ggaGFzIGEgXCJ3YXRjaFwiIGZ1bmN0aW9uIG9uIE9iamVjdC5wcm90b3R5cGUuLi5cbi8vIEB0cy1leHBlY3QtZXJyb3IgZmlyZWJveCBzdXBwb3J0XG52YXIgbmF0aXZlV2F0Y2ggPSB7fS53YXRjaDtcbnZhciBzdXBwb3J0c1Bhc3NpdmUgPSBmYWxzZTtcbmlmIChpbkJyb3dzZXIpIHtcbiAgICB0cnkge1xuICAgICAgICB2YXIgb3B0cyA9IHt9O1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob3B0cywgJ3Bhc3NpdmUnLCB7XG4gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICAgICAgICAgIHN1cHBvcnRzUGFzc2l2ZSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pOyAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmxvdy9pc3N1ZXMvMjg1XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd0ZXN0LXBhc3NpdmUnLCBudWxsLCBvcHRzKTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHsgfVxufVxuLy8gdGhpcyBuZWVkcyB0byBiZSBsYXp5LWV2YWxlZCBiZWNhdXNlIHZ1ZSBtYXkgYmUgcmVxdWlyZWQgYmVmb3JlXG4vLyB2dWUtc2VydmVyLXJlbmRlcmVyIGNhbiBzZXQgVlVFX0VOVlxudmFyIF9pc1NlcnZlcjtcbnZhciBpc1NlcnZlclJlbmRlcmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoX2lzU2VydmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmICghaW5Ccm93c2VyICYmIHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAvLyBkZXRlY3QgcHJlc2VuY2Ugb2YgdnVlLXNlcnZlci1yZW5kZXJlciBhbmQgYXZvaWRcbiAgICAgICAgICAgIC8vIFdlYnBhY2sgc2hpbW1pbmcgdGhlIHByb2Nlc3NcbiAgICAgICAgICAgIF9pc1NlcnZlciA9XG4gICAgICAgICAgICAgICAgZ2xvYmFsWydwcm9jZXNzJ10gJiYgZ2xvYmFsWydwcm9jZXNzJ10uZW52LlZVRV9FTlYgPT09ICdzZXJ2ZXInO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgX2lzU2VydmVyID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIF9pc1NlcnZlcjtcbn07XG4vLyBkZXRlY3QgZGV2dG9vbHNcbnZhciBkZXZ0b29scyA9IGluQnJvd3NlciAmJiB3aW5kb3cuX19WVUVfREVWVE9PTFNfR0xPQkFMX0hPT0tfXztcbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5mdW5jdGlvbiBpc05hdGl2ZShDdG9yKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBDdG9yID09PSAnZnVuY3Rpb24nICYmIC9uYXRpdmUgY29kZS8udGVzdChDdG9yLnRvU3RyaW5nKCkpO1xufVxudmFyIGhhc1N5bWJvbCA9IHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmXG4gICAgaXNOYXRpdmUoU3ltYm9sKSAmJlxuICAgIHR5cGVvZiBSZWZsZWN0ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIGlzTmF0aXZlKFJlZmxlY3Qub3duS2V5cyk7XG52YXIgX1NldDsgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4vKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi8gaWYgKHR5cGVvZiBTZXQgIT09ICd1bmRlZmluZWQnICYmIGlzTmF0aXZlKFNldCkpIHtcbiAgICAvLyB1c2UgbmF0aXZlIFNldCB3aGVuIGF2YWlsYWJsZS5cbiAgICBfU2V0ID0gU2V0O1xufVxuZWxzZSB7XG4gICAgLy8gYSBub24tc3RhbmRhcmQgU2V0IHBvbHlmaWxsIHRoYXQgb25seSB3b3JrcyB3aXRoIHByaW1pdGl2ZSBrZXlzLlxuICAgIF9TZXQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZ1bmN0aW9uIFNldCgpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgfVxuICAgICAgICBTZXQucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNldFtrZXldID09PSB0cnVlO1xuICAgICAgICB9O1xuICAgICAgICBTZXQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0W2tleV0gPSB0cnVlO1xuICAgICAgICB9O1xuICAgICAgICBTZXQucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhpcy5zZXQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gU2V0O1xuICAgIH0oKSk7XG59XG5cbnZhciBjdXJyZW50SW5zdGFuY2UgPSBudWxsO1xuLyoqXG4gKiBUaGlzIGlzIGV4cG9zZWQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB2MyAoZS5nLiBzb21lIGZ1bmN0aW9ucyBpbiBWdWVVc2VcbiAqIHJlbGllcyBvbiBpdCkuIERvIG5vdCB1c2UgdGhpcyBpbnRlcm5hbGx5LCBqdXN0IHVzZSBgY3VycmVudEluc3RhbmNlYC5cbiAqXG4gKiBAaW50ZXJuYWwgdGhpcyBmdW5jdGlvbiBuZWVkcyBtYW51YWwgdHlwZSBkZWNsYXJhdGlvbiBiZWNhdXNlIGl0IHJlbGllc1xuICogb24gcHJldmlvdXNseSBtYW51YWxseSBhdXRob3JlZCB0eXBlcyBmcm9tIFZ1ZSAyXG4gKi9cbmZ1bmN0aW9uIGdldEN1cnJlbnRJbnN0YW5jZSgpIHtcbiAgICByZXR1cm4gY3VycmVudEluc3RhbmNlICYmIHsgcHJveHk6IGN1cnJlbnRJbnN0YW5jZSB9O1xufVxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gc2V0Q3VycmVudEluc3RhbmNlKHZtKSB7XG4gICAgaWYgKHZtID09PSB2b2lkIDApIHsgdm0gPSBudWxsOyB9XG4gICAgaWYgKCF2bSlcbiAgICAgICAgY3VycmVudEluc3RhbmNlICYmIGN1cnJlbnRJbnN0YW5jZS5fc2NvcGUub2ZmKCk7XG4gICAgY3VycmVudEluc3RhbmNlID0gdm07XG4gICAgdm0gJiYgdm0uX3Njb3BlLm9uKCk7XG59XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbnZhciBWTm9kZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBWTm9kZSh0YWcsIGRhdGEsIGNoaWxkcmVuLCB0ZXh0LCBlbG0sIGNvbnRleHQsIGNvbXBvbmVudE9wdGlvbnMsIGFzeW5jRmFjdG9yeSkge1xuICAgICAgICB0aGlzLnRhZyA9IHRhZztcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICAgICAgdGhpcy5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICAgICAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICAgICAgICB0aGlzLmVsbSA9IGVsbTtcbiAgICAgICAgdGhpcy5ucyA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgICAgICAgdGhpcy5mbkNvbnRleHQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuZm5PcHRpb25zID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmZuU2NvcGVJZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5rZXkgPSBkYXRhICYmIGRhdGEua2V5O1xuICAgICAgICB0aGlzLmNvbXBvbmVudE9wdGlvbnMgPSBjb21wb25lbnRPcHRpb25zO1xuICAgICAgICB0aGlzLmNvbXBvbmVudEluc3RhbmNlID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnBhcmVudCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5yYXcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc1N0YXRpYyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzUm9vdEluc2VydCA9IHRydWU7XG4gICAgICAgIHRoaXMuaXNDb21tZW50ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNDbG9uZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc09uY2UgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5hc3luY0ZhY3RvcnkgPSBhc3luY0ZhY3Rvcnk7XG4gICAgICAgIHRoaXMuYXN5bmNNZXRhID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmlzQXN5bmNQbGFjZWhvbGRlciA9IGZhbHNlO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVk5vZGUucHJvdG90eXBlLCBcImNoaWxkXCIsIHtcbiAgICAgICAgLy8gREVQUkVDQVRFRDogYWxpYXMgZm9yIGNvbXBvbmVudEluc3RhbmNlIGZvciBiYWNrd2FyZHMgY29tcGF0LlxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbXBvbmVudEluc3RhbmNlO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgcmV0dXJuIFZOb2RlO1xufSgpKTtcbnZhciBjcmVhdGVFbXB0eVZOb2RlID0gZnVuY3Rpb24gKHRleHQpIHtcbiAgICBpZiAodGV4dCA9PT0gdm9pZCAwKSB7IHRleHQgPSAnJzsgfVxuICAgIHZhciBub2RlID0gbmV3IFZOb2RlKCk7XG4gICAgbm9kZS50ZXh0ID0gdGV4dDtcbiAgICBub2RlLmlzQ29tbWVudCA9IHRydWU7XG4gICAgcmV0dXJuIG5vZGU7XG59O1xuZnVuY3Rpb24gY3JlYXRlVGV4dFZOb2RlKHZhbCkge1xuICAgIHJldHVybiBuZXcgVk5vZGUodW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgU3RyaW5nKHZhbCkpO1xufVxuLy8gb3B0aW1pemVkIHNoYWxsb3cgY2xvbmVcbi8vIHVzZWQgZm9yIHN0YXRpYyBub2RlcyBhbmQgc2xvdCBub2RlcyBiZWNhdXNlIHRoZXkgbWF5IGJlIHJldXNlZCBhY3Jvc3Ncbi8vIG11bHRpcGxlIHJlbmRlcnMsIGNsb25pbmcgdGhlbSBhdm9pZHMgZXJyb3JzIHdoZW4gRE9NIG1hbmlwdWxhdGlvbnMgcmVseVxuLy8gb24gdGhlaXIgZWxtIHJlZmVyZW5jZS5cbmZ1bmN0aW9uIGNsb25lVk5vZGUodm5vZGUpIHtcbiAgICB2YXIgY2xvbmVkID0gbmV3IFZOb2RlKHZub2RlLnRhZywgdm5vZGUuZGF0YSwgXG4gICAgLy8gIzc5NzVcbiAgICAvLyBjbG9uZSBjaGlsZHJlbiBhcnJheSB0byBhdm9pZCBtdXRhdGluZyBvcmlnaW5hbCBpbiBjYXNlIG9mIGNsb25pbmdcbiAgICAvLyBhIGNoaWxkLlxuICAgIHZub2RlLmNoaWxkcmVuICYmIHZub2RlLmNoaWxkcmVuLnNsaWNlKCksIHZub2RlLnRleHQsIHZub2RlLmVsbSwgdm5vZGUuY29udGV4dCwgdm5vZGUuY29tcG9uZW50T3B0aW9ucywgdm5vZGUuYXN5bmNGYWN0b3J5KTtcbiAgICBjbG9uZWQubnMgPSB2bm9kZS5ucztcbiAgICBjbG9uZWQuaXNTdGF0aWMgPSB2bm9kZS5pc1N0YXRpYztcbiAgICBjbG9uZWQua2V5ID0gdm5vZGUua2V5O1xuICAgIGNsb25lZC5pc0NvbW1lbnQgPSB2bm9kZS5pc0NvbW1lbnQ7XG4gICAgY2xvbmVkLmZuQ29udGV4dCA9IHZub2RlLmZuQ29udGV4dDtcbiAgICBjbG9uZWQuZm5PcHRpb25zID0gdm5vZGUuZm5PcHRpb25zO1xuICAgIGNsb25lZC5mblNjb3BlSWQgPSB2bm9kZS5mblNjb3BlSWQ7XG4gICAgY2xvbmVkLmFzeW5jTWV0YSA9IHZub2RlLmFzeW5jTWV0YTtcbiAgICBjbG9uZWQuaXNDbG9uZWQgPSB0cnVlO1xuICAgIHJldHVybiBjbG9uZWQ7XG59XG5cbi8qIG5vdCB0eXBlIGNoZWNraW5nIHRoaXMgZmlsZSBiZWNhdXNlIGZsb3cgZG9lc24ndCBwbGF5IHdlbGwgd2l0aCBQcm94eSAqL1xudmFyIGluaXRQcm94eTtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgdmFyIGFsbG93ZWRHbG9iYWxzXzEgPSBtYWtlTWFwKCdJbmZpbml0eSx1bmRlZmluZWQsTmFOLGlzRmluaXRlLGlzTmFOLCcgK1xuICAgICAgICAncGFyc2VGbG9hdCxwYXJzZUludCxkZWNvZGVVUkksZGVjb2RlVVJJQ29tcG9uZW50LGVuY29kZVVSSSxlbmNvZGVVUklDb21wb25lbnQsJyArXG4gICAgICAgICdNYXRoLE51bWJlcixEYXRlLEFycmF5LE9iamVjdCxCb29sZWFuLFN0cmluZyxSZWdFeHAsTWFwLFNldCxKU09OLEludGwsQmlnSW50LCcgK1xuICAgICAgICAncmVxdWlyZScgLy8gZm9yIFdlYnBhY2svQnJvd3NlcmlmeVxuICAgICk7XG4gICAgdmFyIHdhcm5Ob25QcmVzZW50XzEgPSBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHtcbiAgICAgICAgd2FybiQyKFwiUHJvcGVydHkgb3IgbWV0aG9kIFxcXCJcIi5jb25jYXQoa2V5LCBcIlxcXCIgaXMgbm90IGRlZmluZWQgb24gdGhlIGluc3RhbmNlIGJ1dCBcIikgK1xuICAgICAgICAgICAgJ3JlZmVyZW5jZWQgZHVyaW5nIHJlbmRlci4gTWFrZSBzdXJlIHRoYXQgdGhpcyBwcm9wZXJ0eSBpcyByZWFjdGl2ZSwgJyArXG4gICAgICAgICAgICAnZWl0aGVyIGluIHRoZSBkYXRhIG9wdGlvbiwgb3IgZm9yIGNsYXNzLWJhc2VkIGNvbXBvbmVudHMsIGJ5ICcgK1xuICAgICAgICAgICAgJ2luaXRpYWxpemluZyB0aGUgcHJvcGVydHkuICcgK1xuICAgICAgICAgICAgJ1NlZTogaHR0cHM6Ly92Mi52dWVqcy5vcmcvdjIvZ3VpZGUvcmVhY3Rpdml0eS5odG1sI0RlY2xhcmluZy1SZWFjdGl2ZS1Qcm9wZXJ0aWVzLicsIHRhcmdldCk7XG4gICAgfTtcbiAgICB2YXIgd2FyblJlc2VydmVkUHJlZml4XzEgPSBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHtcbiAgICAgICAgd2FybiQyKFwiUHJvcGVydHkgXFxcIlwiLmNvbmNhdChrZXksIFwiXFxcIiBtdXN0IGJlIGFjY2Vzc2VkIHdpdGggXFxcIiRkYXRhLlwiKS5jb25jYXQoa2V5LCBcIlxcXCIgYmVjYXVzZSBcIikgK1xuICAgICAgICAgICAgJ3Byb3BlcnRpZXMgc3RhcnRpbmcgd2l0aCBcIiRcIiBvciBcIl9cIiBhcmUgbm90IHByb3hpZWQgaW4gdGhlIFZ1ZSBpbnN0YW5jZSB0byAnICtcbiAgICAgICAgICAgICdwcmV2ZW50IGNvbmZsaWN0cyB3aXRoIFZ1ZSBpbnRlcm5hbHMuICcgK1xuICAgICAgICAgICAgJ1NlZTogaHR0cHM6Ly92Mi52dWVqcy5vcmcvdjIvYXBpLyNkYXRhJywgdGFyZ2V0KTtcbiAgICB9O1xuICAgIHZhciBoYXNQcm94eV8xID0gdHlwZW9mIFByb3h5ICE9PSAndW5kZWZpbmVkJyAmJiBpc05hdGl2ZShQcm94eSk7XG4gICAgaWYgKGhhc1Byb3h5XzEpIHtcbiAgICAgICAgdmFyIGlzQnVpbHRJbk1vZGlmaWVyXzEgPSBtYWtlTWFwKCdzdG9wLHByZXZlbnQsc2VsZixjdHJsLHNoaWZ0LGFsdCxtZXRhLGV4YWN0Jyk7XG4gICAgICAgIGNvbmZpZy5rZXlDb2RlcyA9IG5ldyBQcm94eShjb25maWcua2V5Q29kZXMsIHtcbiAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKHRhcmdldCwga2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGlmIChpc0J1aWx0SW5Nb2RpZmllcl8xKGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgd2FybiQyKFwiQXZvaWQgb3ZlcndyaXRpbmcgYnVpbHQtaW4gbW9kaWZpZXIgaW4gY29uZmlnLmtleUNvZGVzOiAuXCIuY29uY2F0KGtleSkpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXRba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB2YXIgaGFzSGFuZGxlcl8xID0ge1xuICAgICAgICBoYXM6IGZ1bmN0aW9uICh0YXJnZXQsIGtleSkge1xuICAgICAgICAgICAgdmFyIGhhcyA9IGtleSBpbiB0YXJnZXQ7XG4gICAgICAgICAgICB2YXIgaXNBbGxvd2VkID0gYWxsb3dlZEdsb2JhbHNfMShrZXkpIHx8XG4gICAgICAgICAgICAgICAgKHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICAgICAgICAgIGtleS5jaGFyQXQoMCkgPT09ICdfJyAmJlxuICAgICAgICAgICAgICAgICAgICAhKGtleSBpbiB0YXJnZXQuJGRhdGEpKTtcbiAgICAgICAgICAgIGlmICghaGFzICYmICFpc0FsbG93ZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoa2V5IGluIHRhcmdldC4kZGF0YSlcbiAgICAgICAgICAgICAgICAgICAgd2FyblJlc2VydmVkUHJlZml4XzEodGFyZ2V0LCBrZXkpO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgd2Fybk5vblByZXNlbnRfMSh0YXJnZXQsIGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaGFzIHx8ICFpc0FsbG93ZWQ7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHZhciBnZXRIYW5kbGVyXzEgPSB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGtleSA9PT0gJ3N0cmluZycgJiYgIShrZXkgaW4gdGFyZ2V0KSkge1xuICAgICAgICAgICAgICAgIGlmIChrZXkgaW4gdGFyZ2V0LiRkYXRhKVxuICAgICAgICAgICAgICAgICAgICB3YXJuUmVzZXJ2ZWRQcmVmaXhfMSh0YXJnZXQsIGtleSk7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB3YXJuTm9uUHJlc2VudF8xKHRhcmdldCwga2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0YXJnZXRba2V5XTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgaW5pdFByb3h5ID0gZnVuY3Rpb24gaW5pdFByb3h5KHZtKSB7XG4gICAgICAgIGlmIChoYXNQcm94eV8xKSB7XG4gICAgICAgICAgICAvLyBkZXRlcm1pbmUgd2hpY2ggcHJveHkgaGFuZGxlciB0byB1c2VcbiAgICAgICAgICAgIHZhciBvcHRpb25zID0gdm0uJG9wdGlvbnM7XG4gICAgICAgICAgICB2YXIgaGFuZGxlcnMgPSBvcHRpb25zLnJlbmRlciAmJiBvcHRpb25zLnJlbmRlci5fd2l0aFN0cmlwcGVkID8gZ2V0SGFuZGxlcl8xIDogaGFzSGFuZGxlcl8xO1xuICAgICAgICAgICAgdm0uX3JlbmRlclByb3h5ID0gbmV3IFByb3h5KHZtLCBoYW5kbGVycyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2bS5fcmVuZGVyUHJveHkgPSB2bTtcbiAgICAgICAgfVxuICAgIH07XG59XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXHJcblxyXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcclxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxyXG5cclxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxyXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcclxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxyXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cclxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1JcclxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxyXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xyXG5cclxudmFyIF9fYXNzaWduID0gZnVuY3Rpb24oKSB7XHJcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xyXG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdDtcclxuICAgIH07XHJcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxufTtcblxudmFyIHVpZCQyID0gMDtcbnZhciBwZW5kaW5nQ2xlYW51cERlcHMgPSBbXTtcbnZhciBjbGVhbnVwRGVwcyA9IGZ1bmN0aW9uICgpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBlbmRpbmdDbGVhbnVwRGVwcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZGVwID0gcGVuZGluZ0NsZWFudXBEZXBzW2ldO1xuICAgICAgICBkZXAuc3VicyA9IGRlcC5zdWJzLmZpbHRlcihmdW5jdGlvbiAocykgeyByZXR1cm4gczsgfSk7XG4gICAgICAgIGRlcC5fcGVuZGluZyA9IGZhbHNlO1xuICAgIH1cbiAgICBwZW5kaW5nQ2xlYW51cERlcHMubGVuZ3RoID0gMDtcbn07XG4vKipcbiAqIEEgZGVwIGlzIGFuIG9ic2VydmFibGUgdGhhdCBjYW4gaGF2ZSBtdWx0aXBsZVxuICogZGlyZWN0aXZlcyBzdWJzY3JpYmluZyB0byBpdC5cbiAqIEBpbnRlcm5hbFxuICovXG52YXIgRGVwID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIERlcCgpIHtcbiAgICAgICAgLy8gcGVuZGluZyBzdWJzIGNsZWFudXBcbiAgICAgICAgdGhpcy5fcGVuZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlkID0gdWlkJDIrKztcbiAgICAgICAgdGhpcy5zdWJzID0gW107XG4gICAgfVxuICAgIERlcC5wcm90b3R5cGUuYWRkU3ViID0gZnVuY3Rpb24gKHN1Yikge1xuICAgICAgICB0aGlzLnN1YnMucHVzaChzdWIpO1xuICAgIH07XG4gICAgRGVwLnByb3RvdHlwZS5yZW1vdmVTdWIgPSBmdW5jdGlvbiAoc3ViKSB7XG4gICAgICAgIC8vICMxMjY5NiBkZXBzIHdpdGggbWFzc2l2ZSBhbW91bnQgb2Ygc3Vic2NyaWJlcnMgYXJlIGV4dHJlbWVseSBzbG93IHRvXG4gICAgICAgIC8vIGNsZWFuIHVwIGluIENocm9taXVtXG4gICAgICAgIC8vIHRvIHdvcmthcm91bmQgdGhpcywgd2UgdW5zZXQgdGhlIHN1YiBmb3Igbm93LCBhbmQgY2xlYXIgdGhlbSBvblxuICAgICAgICAvLyBuZXh0IHNjaGVkdWxlciBmbHVzaC5cbiAgICAgICAgdGhpcy5zdWJzW3RoaXMuc3Vicy5pbmRleE9mKHN1YildID0gbnVsbDtcbiAgICAgICAgaWYgKCF0aGlzLl9wZW5kaW5nKSB7XG4gICAgICAgICAgICB0aGlzLl9wZW5kaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIHBlbmRpbmdDbGVhbnVwRGVwcy5wdXNoKHRoaXMpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBEZXAucHJvdG90eXBlLmRlcGVuZCA9IGZ1bmN0aW9uIChpbmZvKSB7XG4gICAgICAgIGlmIChEZXAudGFyZ2V0KSB7XG4gICAgICAgICAgICBEZXAudGFyZ2V0LmFkZERlcCh0aGlzKTtcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGluZm8gJiYgRGVwLnRhcmdldC5vblRyYWNrKSB7XG4gICAgICAgICAgICAgICAgRGVwLnRhcmdldC5vblRyYWNrKF9fYXNzaWduKHsgZWZmZWN0OiBEZXAudGFyZ2V0IH0sIGluZm8pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgRGVwLnByb3RvdHlwZS5ub3RpZnkgPSBmdW5jdGlvbiAoaW5mbykge1xuICAgICAgICAvLyBzdGFiaWxpemUgdGhlIHN1YnNjcmliZXIgbGlzdCBmaXJzdFxuICAgICAgICB2YXIgc3VicyA9IHRoaXMuc3Vicy5maWx0ZXIoZnVuY3Rpb24gKHMpIHsgcmV0dXJuIHM7IH0pO1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhY29uZmlnLmFzeW5jKSB7XG4gICAgICAgICAgICAvLyBzdWJzIGFyZW4ndCBzb3J0ZWQgaW4gc2NoZWR1bGVyIGlmIG5vdCBydW5uaW5nIGFzeW5jXG4gICAgICAgICAgICAvLyB3ZSBuZWVkIHRvIHNvcnQgdGhlbSBub3cgdG8gbWFrZSBzdXJlIHRoZXkgZmlyZSBpbiBjb3JyZWN0XG4gICAgICAgICAgICAvLyBvcmRlclxuICAgICAgICAgICAgc3Vicy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBhLmlkIC0gYi5pZDsgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBzdWJzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgdmFyIHN1YiA9IHN1YnNbaV07XG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBpbmZvKSB7XG4gICAgICAgICAgICAgICAgc3ViLm9uVHJpZ2dlciAmJlxuICAgICAgICAgICAgICAgICAgICBzdWIub25UcmlnZ2VyKF9fYXNzaWduKHsgZWZmZWN0OiBzdWJzW2ldIH0sIGluZm8pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN1Yi51cGRhdGUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIERlcDtcbn0oKSk7XG4vLyBUaGUgY3VycmVudCB0YXJnZXQgd2F0Y2hlciBiZWluZyBldmFsdWF0ZWQuXG4vLyBUaGlzIGlzIGdsb2JhbGx5IHVuaXF1ZSBiZWNhdXNlIG9ubHkgb25lIHdhdGNoZXJcbi8vIGNhbiBiZSBldmFsdWF0ZWQgYXQgYSB0aW1lLlxuRGVwLnRhcmdldCA9IG51bGw7XG52YXIgdGFyZ2V0U3RhY2sgPSBbXTtcbmZ1bmN0aW9uIHB1c2hUYXJnZXQodGFyZ2V0KSB7XG4gICAgdGFyZ2V0U3RhY2sucHVzaCh0YXJnZXQpO1xuICAgIERlcC50YXJnZXQgPSB0YXJnZXQ7XG59XG5mdW5jdGlvbiBwb3BUYXJnZXQoKSB7XG4gICAgdGFyZ2V0U3RhY2sucG9wKCk7XG4gICAgRGVwLnRhcmdldCA9IHRhcmdldFN0YWNrW3RhcmdldFN0YWNrLmxlbmd0aCAtIDFdO1xufVxuXG4vKlxuICogbm90IHR5cGUgY2hlY2tpbmcgdGhpcyBmaWxlIGJlY2F1c2UgZmxvdyBkb2Vzbid0IHBsYXkgd2VsbCB3aXRoXG4gKiBkeW5hbWljYWxseSBhY2Nlc3NpbmcgbWV0aG9kcyBvbiBBcnJheSBwcm90b3R5cGVcbiAqL1xudmFyIGFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG52YXIgYXJyYXlNZXRob2RzID0gT2JqZWN0LmNyZWF0ZShhcnJheVByb3RvKTtcbnZhciBtZXRob2RzVG9QYXRjaCA9IFtcbiAgICAncHVzaCcsXG4gICAgJ3BvcCcsXG4gICAgJ3NoaWZ0JyxcbiAgICAndW5zaGlmdCcsXG4gICAgJ3NwbGljZScsXG4gICAgJ3NvcnQnLFxuICAgICdyZXZlcnNlJ1xuXTtcbi8qKlxuICogSW50ZXJjZXB0IG11dGF0aW5nIG1ldGhvZHMgYW5kIGVtaXQgZXZlbnRzXG4gKi9cbm1ldGhvZHNUb1BhdGNoLmZvckVhY2goZnVuY3Rpb24gKG1ldGhvZCkge1xuICAgIC8vIGNhY2hlIG9yaWdpbmFsIG1ldGhvZFxuICAgIHZhciBvcmlnaW5hbCA9IGFycmF5UHJvdG9bbWV0aG9kXTtcbiAgICBkZWYoYXJyYXlNZXRob2RzLCBtZXRob2QsIGZ1bmN0aW9uIG11dGF0b3IoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHJlc3VsdCA9IG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB2YXIgb2IgPSB0aGlzLl9fb2JfXztcbiAgICAgICAgdmFyIGluc2VydGVkO1xuICAgICAgICBzd2l0Y2ggKG1ldGhvZCkge1xuICAgICAgICAgICAgY2FzZSAncHVzaCc6XG4gICAgICAgICAgICBjYXNlICd1bnNoaWZ0JzpcbiAgICAgICAgICAgICAgICBpbnNlcnRlZCA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzcGxpY2UnOlxuICAgICAgICAgICAgICAgIGluc2VydGVkID0gYXJncy5zbGljZSgyKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5zZXJ0ZWQpXG4gICAgICAgICAgICBvYi5vYnNlcnZlQXJyYXkoaW5zZXJ0ZWQpO1xuICAgICAgICAvLyBub3RpZnkgY2hhbmdlXG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICBvYi5kZXAubm90aWZ5KHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcImFycmF5IG11dGF0aW9uXCIgLyogVHJpZ2dlck9wVHlwZXMuQVJSQVlfTVVUQVRJT04gKi8sXG4gICAgICAgICAgICAgICAgdGFyZ2V0OiB0aGlzLFxuICAgICAgICAgICAgICAgIGtleTogbWV0aG9kXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG9iLmRlcC5ub3RpZnkoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0pO1xufSk7XG5cbnZhciBhcnJheUtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhhcnJheU1ldGhvZHMpO1xudmFyIE5PX0lOSUlUSUFMX1ZBTFVFID0ge307XG4vKipcbiAqIEluIHNvbWUgY2FzZXMgd2UgbWF5IHdhbnQgdG8gZGlzYWJsZSBvYnNlcnZhdGlvbiBpbnNpZGUgYSBjb21wb25lbnQnc1xuICogdXBkYXRlIGNvbXB1dGF0aW9uLlxuICovXG52YXIgc2hvdWxkT2JzZXJ2ZSA9IHRydWU7XG5mdW5jdGlvbiB0b2dnbGVPYnNlcnZpbmcodmFsdWUpIHtcbiAgICBzaG91bGRPYnNlcnZlID0gdmFsdWU7XG59XG4vLyBzc3IgbW9jayBkZXBcbnZhciBtb2NrRGVwID0ge1xuICAgIG5vdGlmeTogbm9vcCxcbiAgICBkZXBlbmQ6IG5vb3AsXG4gICAgYWRkU3ViOiBub29wLFxuICAgIHJlbW92ZVN1Yjogbm9vcFxufTtcbi8qKlxuICogT2JzZXJ2ZXIgY2xhc3MgdGhhdCBpcyBhdHRhY2hlZCB0byBlYWNoIG9ic2VydmVkXG4gKiBvYmplY3QuIE9uY2UgYXR0YWNoZWQsIHRoZSBvYnNlcnZlciBjb252ZXJ0cyB0aGUgdGFyZ2V0XG4gKiBvYmplY3QncyBwcm9wZXJ0eSBrZXlzIGludG8gZ2V0dGVyL3NldHRlcnMgdGhhdFxuICogY29sbGVjdCBkZXBlbmRlbmNpZXMgYW5kIGRpc3BhdGNoIHVwZGF0ZXMuXG4gKi9cbnZhciBPYnNlcnZlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBPYnNlcnZlcih2YWx1ZSwgc2hhbGxvdywgbW9jaykge1xuICAgICAgICBpZiAoc2hhbGxvdyA9PT0gdm9pZCAwKSB7IHNoYWxsb3cgPSBmYWxzZTsgfVxuICAgICAgICBpZiAobW9jayA9PT0gdm9pZCAwKSB7IG1vY2sgPSBmYWxzZTsgfVxuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuc2hhbGxvdyA9IHNoYWxsb3c7XG4gICAgICAgIHRoaXMubW9jayA9IG1vY2s7XG4gICAgICAgIC8vIHRoaXMudmFsdWUgPSB2YWx1ZVxuICAgICAgICB0aGlzLmRlcCA9IG1vY2sgPyBtb2NrRGVwIDogbmV3IERlcCgpO1xuICAgICAgICB0aGlzLnZtQ291bnQgPSAwO1xuICAgICAgICBkZWYodmFsdWUsICdfX29iX18nLCB0aGlzKTtcbiAgICAgICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICBpZiAoIW1vY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoaGFzUHJvdG8pIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUuX19wcm90b19fID0gYXJyYXlNZXRob2RzO1xuICAgICAgICAgICAgICAgICAgICAvKiBlc2xpbnQtZW5hYmxlIG5vLXByb3RvICovXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGFycmF5S2V5cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBrZXkgPSBhcnJheUtleXNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWYodmFsdWUsIGtleSwgYXJyYXlNZXRob2RzW2tleV0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFzaGFsbG93KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vYnNlcnZlQXJyYXkodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBXYWxrIHRocm91Z2ggYWxsIHByb3BlcnRpZXMgYW5kIGNvbnZlcnQgdGhlbSBpbnRvXG4gICAgICAgICAgICAgKiBnZXR0ZXIvc2V0dGVycy4gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoZW5cbiAgICAgICAgICAgICAqIHZhbHVlIHR5cGUgaXMgT2JqZWN0LlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHZhbHVlKTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgICAgICAgICAgIGRlZmluZVJlYWN0aXZlKHZhbHVlLCBrZXksIE5PX0lOSUlUSUFMX1ZBTFVFLCB1bmRlZmluZWQsIHNoYWxsb3csIG1vY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE9ic2VydmUgYSBsaXN0IG9mIEFycmF5IGl0ZW1zLlxuICAgICAqL1xuICAgIE9ic2VydmVyLnByb3RvdHlwZS5vYnNlcnZlQXJyYXkgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgIG9ic2VydmUodmFsdWVbaV0sIGZhbHNlLCB0aGlzLm1vY2spO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gT2JzZXJ2ZXI7XG59KCkpO1xuLy8gaGVscGVyc1xuLyoqXG4gKiBBdHRlbXB0IHRvIGNyZWF0ZSBhbiBvYnNlcnZlciBpbnN0YW5jZSBmb3IgYSB2YWx1ZSxcbiAqIHJldHVybnMgdGhlIG5ldyBvYnNlcnZlciBpZiBzdWNjZXNzZnVsbHkgb2JzZXJ2ZWQsXG4gKiBvciB0aGUgZXhpc3Rpbmcgb2JzZXJ2ZXIgaWYgdGhlIHZhbHVlIGFscmVhZHkgaGFzIG9uZS5cbiAqL1xuZnVuY3Rpb24gb2JzZXJ2ZSh2YWx1ZSwgc2hhbGxvdywgc3NyTW9ja1JlYWN0aXZpdHkpIHtcbiAgICBpZiAodmFsdWUgJiYgaGFzT3duKHZhbHVlLCAnX19vYl9fJykgJiYgdmFsdWUuX19vYl9fIGluc3RhbmNlb2YgT2JzZXJ2ZXIpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlLl9fb2JfXztcbiAgICB9XG4gICAgaWYgKHNob3VsZE9ic2VydmUgJiZcbiAgICAgICAgKHNzck1vY2tSZWFjdGl2aXR5IHx8ICFpc1NlcnZlclJlbmRlcmluZygpKSAmJlxuICAgICAgICAoaXNBcnJheSh2YWx1ZSkgfHwgaXNQbGFpbk9iamVjdCh2YWx1ZSkpICYmXG4gICAgICAgIE9iamVjdC5pc0V4dGVuc2libGUodmFsdWUpICYmXG4gICAgICAgICF2YWx1ZS5fX3Zfc2tpcCAvKiBSZWFjdGl2ZUZsYWdzLlNLSVAgKi8gJiZcbiAgICAgICAgIWlzUmVmKHZhbHVlKSAmJlxuICAgICAgICAhKHZhbHVlIGluc3RhbmNlb2YgVk5vZGUpKSB7XG4gICAgICAgIHJldHVybiBuZXcgT2JzZXJ2ZXIodmFsdWUsIHNoYWxsb3csIHNzck1vY2tSZWFjdGl2aXR5KTtcbiAgICB9XG59XG4vKipcbiAqIERlZmluZSBhIHJlYWN0aXZlIHByb3BlcnR5IG9uIGFuIE9iamVjdC5cbiAqL1xuZnVuY3Rpb24gZGVmaW5lUmVhY3RpdmUob2JqLCBrZXksIHZhbCwgY3VzdG9tU2V0dGVyLCBzaGFsbG93LCBtb2NrKSB7XG4gICAgdmFyIGRlcCA9IG5ldyBEZXAoKTtcbiAgICB2YXIgcHJvcGVydHkgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwga2V5KTtcbiAgICBpZiAocHJvcGVydHkgJiYgcHJvcGVydHkuY29uZmlndXJhYmxlID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIGNhdGVyIGZvciBwcmUtZGVmaW5lZCBnZXR0ZXIvc2V0dGVyc1xuICAgIHZhciBnZXR0ZXIgPSBwcm9wZXJ0eSAmJiBwcm9wZXJ0eS5nZXQ7XG4gICAgdmFyIHNldHRlciA9IHByb3BlcnR5ICYmIHByb3BlcnR5LnNldDtcbiAgICBpZiAoKCFnZXR0ZXIgfHwgc2V0dGVyKSAmJlxuICAgICAgICAodmFsID09PSBOT19JTklJVElBTF9WQUxVRSB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSkge1xuICAgICAgICB2YWwgPSBvYmpba2V5XTtcbiAgICB9XG4gICAgdmFyIGNoaWxkT2IgPSAhc2hhbGxvdyAmJiBvYnNlcnZlKHZhbCwgZmFsc2UsIG1vY2spO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGdldDogZnVuY3Rpb24gcmVhY3RpdmVHZXR0ZXIoKSB7XG4gICAgICAgICAgICB2YXIgdmFsdWUgPSBnZXR0ZXIgPyBnZXR0ZXIuY2FsbChvYmopIDogdmFsO1xuICAgICAgICAgICAgaWYgKERlcC50YXJnZXQpIHtcbiAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBkZXAuZGVwZW5kKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldDogb2JqLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJnZXRcIiAvKiBUcmFja09wVHlwZXMuR0VUICovLFxuICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBrZXlcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBkZXAuZGVwZW5kKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChjaGlsZE9iKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkT2IuZGVwLmRlcGVuZCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZEFycmF5KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBpc1JlZih2YWx1ZSkgJiYgIXNoYWxsb3cgPyB2YWx1ZS52YWx1ZSA6IHZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIHJlYWN0aXZlU2V0dGVyKG5ld1ZhbCkge1xuICAgICAgICAgICAgdmFyIHZhbHVlID0gZ2V0dGVyID8gZ2V0dGVyLmNhbGwob2JqKSA6IHZhbDtcbiAgICAgICAgICAgIGlmICghaGFzQ2hhbmdlZCh2YWx1ZSwgbmV3VmFsKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGN1c3RvbVNldHRlcikge1xuICAgICAgICAgICAgICAgIGN1c3RvbVNldHRlcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNldHRlcikge1xuICAgICAgICAgICAgICAgIHNldHRlci5jYWxsKG9iaiwgbmV3VmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGdldHRlcikge1xuICAgICAgICAgICAgICAgIC8vICM3OTgxOiBmb3IgYWNjZXNzb3IgcHJvcGVydGllcyB3aXRob3V0IHNldHRlclxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKCFzaGFsbG93ICYmIGlzUmVmKHZhbHVlKSAmJiAhaXNSZWYobmV3VmFsKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlLnZhbHVlID0gbmV3VmFsO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhbCA9IG5ld1ZhbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNoaWxkT2IgPSAhc2hhbGxvdyAmJiBvYnNlcnZlKG5ld1ZhbCwgZmFsc2UsIG1vY2spO1xuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgICAgICBkZXAubm90aWZ5KHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJzZXRcIiAvKiBUcmlnZ2VyT3BUeXBlcy5TRVQgKi8sXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldDogb2JqLFxuICAgICAgICAgICAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICAgICAgICAgICAgbmV3VmFsdWU6IG5ld1ZhbCxcbiAgICAgICAgICAgICAgICAgICAgb2xkVmFsdWU6IHZhbHVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBkZXAubm90aWZ5KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gZGVwO1xufVxuZnVuY3Rpb24gc2V0KHRhcmdldCwga2V5LCB2YWwpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAoaXNVbmRlZih0YXJnZXQpIHx8IGlzUHJpbWl0aXZlKHRhcmdldCkpKSB7XG4gICAgICAgIHdhcm4kMihcIkNhbm5vdCBzZXQgcmVhY3RpdmUgcHJvcGVydHkgb24gdW5kZWZpbmVkLCBudWxsLCBvciBwcmltaXRpdmUgdmFsdWU6IFwiLmNvbmNhdCh0YXJnZXQpKTtcbiAgICB9XG4gICAgaWYgKGlzUmVhZG9ubHkodGFyZ2V0KSkge1xuICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHdhcm4kMihcIlNldCBvcGVyYXRpb24gb24ga2V5IFxcXCJcIi5jb25jYXQoa2V5LCBcIlxcXCIgZmFpbGVkOiB0YXJnZXQgaXMgcmVhZG9ubHkuXCIpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgb2IgPSB0YXJnZXQuX19vYl9fO1xuICAgIGlmIChpc0FycmF5KHRhcmdldCkgJiYgaXNWYWxpZEFycmF5SW5kZXgoa2V5KSkge1xuICAgICAgICB0YXJnZXQubGVuZ3RoID0gTWF0aC5tYXgodGFyZ2V0Lmxlbmd0aCwga2V5KTtcbiAgICAgICAgdGFyZ2V0LnNwbGljZShrZXksIDEsIHZhbCk7XG4gICAgICAgIC8vIHdoZW4gbW9ja2luZyBmb3IgU1NSLCBhcnJheSBtZXRob2RzIGFyZSBub3QgaGlqYWNrZWRcbiAgICAgICAgaWYgKG9iICYmICFvYi5zaGFsbG93ICYmIG9iLm1vY2spIHtcbiAgICAgICAgICAgIG9ic2VydmUodmFsLCBmYWxzZSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9XG4gICAgaWYgKGtleSBpbiB0YXJnZXQgJiYgIShrZXkgaW4gT2JqZWN0LnByb3RvdHlwZSkpIHtcbiAgICAgICAgdGFyZ2V0W2tleV0gPSB2YWw7XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuICAgIGlmICh0YXJnZXQuX2lzVnVlIHx8IChvYiAmJiBvYi52bUNvdW50KSkge1xuICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgICAgICAgICB3YXJuJDIoJ0F2b2lkIGFkZGluZyByZWFjdGl2ZSBwcm9wZXJ0aWVzIHRvIGEgVnVlIGluc3RhbmNlIG9yIGl0cyByb290ICRkYXRhICcgK1xuICAgICAgICAgICAgICAgICdhdCBydW50aW1lIC0gZGVjbGFyZSBpdCB1cGZyb250IGluIHRoZSBkYXRhIG9wdGlvbi4nKTtcbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9XG4gICAgaWYgKCFvYikge1xuICAgICAgICB0YXJnZXRba2V5XSA9IHZhbDtcbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9XG4gICAgZGVmaW5lUmVhY3RpdmUob2IudmFsdWUsIGtleSwgdmFsLCB1bmRlZmluZWQsIG9iLnNoYWxsb3csIG9iLm1vY2spO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIG9iLmRlcC5ub3RpZnkoe1xuICAgICAgICAgICAgdHlwZTogXCJhZGRcIiAvKiBUcmlnZ2VyT3BUeXBlcy5BREQgKi8sXG4gICAgICAgICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgICAgbmV3VmFsdWU6IHZhbCxcbiAgICAgICAgICAgIG9sZFZhbHVlOiB1bmRlZmluZWRcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBvYi5kZXAubm90aWZ5KCk7XG4gICAgfVxuICAgIHJldHVybiB2YWw7XG59XG5mdW5jdGlvbiBkZWwodGFyZ2V0LCBrZXkpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAoaXNVbmRlZih0YXJnZXQpIHx8IGlzUHJpbWl0aXZlKHRhcmdldCkpKSB7XG4gICAgICAgIHdhcm4kMihcIkNhbm5vdCBkZWxldGUgcmVhY3RpdmUgcHJvcGVydHkgb24gdW5kZWZpbmVkLCBudWxsLCBvciBwcmltaXRpdmUgdmFsdWU6IFwiLmNvbmNhdCh0YXJnZXQpKTtcbiAgICB9XG4gICAgaWYgKGlzQXJyYXkodGFyZ2V0KSAmJiBpc1ZhbGlkQXJyYXlJbmRleChrZXkpKSB7XG4gICAgICAgIHRhcmdldC5zcGxpY2Uoa2V5LCAxKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgb2IgPSB0YXJnZXQuX19vYl9fO1xuICAgIGlmICh0YXJnZXQuX2lzVnVlIHx8IChvYiAmJiBvYi52bUNvdW50KSkge1xuICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgICAgICAgICB3YXJuJDIoJ0F2b2lkIGRlbGV0aW5nIHByb3BlcnRpZXMgb24gYSBWdWUgaW5zdGFuY2Ugb3IgaXRzIHJvb3QgJGRhdGEgJyArXG4gICAgICAgICAgICAgICAgJy0ganVzdCBzZXQgaXQgdG8gbnVsbC4nKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaXNSZWFkb25seSh0YXJnZXQpKSB7XG4gICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICAgICAgICAgIHdhcm4kMihcIkRlbGV0ZSBvcGVyYXRpb24gb24ga2V5IFxcXCJcIi5jb25jYXQoa2V5LCBcIlxcXCIgZmFpbGVkOiB0YXJnZXQgaXMgcmVhZG9ubHkuXCIpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIWhhc093bih0YXJnZXQsIGtleSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkZWxldGUgdGFyZ2V0W2tleV07XG4gICAgaWYgKCFvYikge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIG9iLmRlcC5ub3RpZnkoe1xuICAgICAgICAgICAgdHlwZTogXCJkZWxldGVcIiAvKiBUcmlnZ2VyT3BUeXBlcy5ERUxFVEUgKi8sXG4gICAgICAgICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgICAgICAgIGtleToga2V5XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgb2IuZGVwLm5vdGlmeSgpO1xuICAgIH1cbn1cbi8qKlxuICogQ29sbGVjdCBkZXBlbmRlbmNpZXMgb24gYXJyYXkgZWxlbWVudHMgd2hlbiB0aGUgYXJyYXkgaXMgdG91Y2hlZCwgc2luY2VcbiAqIHdlIGNhbm5vdCBpbnRlcmNlcHQgYXJyYXkgZWxlbWVudCBhY2Nlc3MgbGlrZSBwcm9wZXJ0eSBnZXR0ZXJzLlxuICovXG5mdW5jdGlvbiBkZXBlbmRBcnJheSh2YWx1ZSkge1xuICAgIGZvciAodmFyIGUgPSB2b2lkIDAsIGkgPSAwLCBsID0gdmFsdWUubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGUgPSB2YWx1ZVtpXTtcbiAgICAgICAgaWYgKGUgJiYgZS5fX29iX18pIHtcbiAgICAgICAgICAgIGUuX19vYl9fLmRlcC5kZXBlbmQoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNBcnJheShlKSkge1xuICAgICAgICAgICAgZGVwZW5kQXJyYXkoZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIHJlYWN0aXZlKHRhcmdldCkge1xuICAgIG1ha2VSZWFjdGl2ZSh0YXJnZXQsIGZhbHNlKTtcbiAgICByZXR1cm4gdGFyZ2V0O1xufVxuLyoqXG4gKiBSZXR1cm4gYSBzaGFsbG93bHktcmVhY3RpdmUgY29weSBvZiB0aGUgb3JpZ2luYWwgb2JqZWN0LCB3aGVyZSBvbmx5IHRoZSByb290XG4gKiBsZXZlbCBwcm9wZXJ0aWVzIGFyZSByZWFjdGl2ZS4gSXQgYWxzbyBkb2VzIG5vdCBhdXRvLXVud3JhcCByZWZzIChldmVuIGF0IHRoZVxuICogcm9vdCBsZXZlbCkuXG4gKi9cbmZ1bmN0aW9uIHNoYWxsb3dSZWFjdGl2ZSh0YXJnZXQpIHtcbiAgICBtYWtlUmVhY3RpdmUodGFyZ2V0LCB0cnVlKTtcbiAgICBkZWYodGFyZ2V0LCBcIl9fdl9pc1NoYWxsb3dcIiAvKiBSZWFjdGl2ZUZsYWdzLklTX1NIQUxMT1cgKi8sIHRydWUpO1xuICAgIHJldHVybiB0YXJnZXQ7XG59XG5mdW5jdGlvbiBtYWtlUmVhY3RpdmUodGFyZ2V0LCBzaGFsbG93KSB7XG4gICAgLy8gaWYgdHJ5aW5nIHRvIG9ic2VydmUgYSByZWFkb25seSBwcm94eSwgcmV0dXJuIHRoZSByZWFkb25seSB2ZXJzaW9uLlxuICAgIGlmICghaXNSZWFkb25seSh0YXJnZXQpKSB7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICBpZiAoaXNBcnJheSh0YXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgd2FybiQyKFwiQXZvaWQgdXNpbmcgQXJyYXkgYXMgcm9vdCB2YWx1ZSBmb3IgXCIuY29uY2F0KHNoYWxsb3cgPyBcInNoYWxsb3dSZWFjdGl2ZSgpXCIgOiBcInJlYWN0aXZlKClcIiwgXCIgYXMgaXQgY2Fubm90IGJlIHRyYWNrZWQgaW4gd2F0Y2goKSBvciB3YXRjaEVmZmVjdCgpLiBVc2UgXCIpLmNvbmNhdChzaGFsbG93ID8gXCJzaGFsbG93UmVmKClcIiA6IFwicmVmKClcIiwgXCIgaW5zdGVhZC4gVGhpcyBpcyBhIFZ1ZS0yLW9ubHkgbGltaXRhdGlvbi5cIikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGV4aXN0aW5nT2IgPSB0YXJnZXQgJiYgdGFyZ2V0Ll9fb2JfXztcbiAgICAgICAgICAgIGlmIChleGlzdGluZ09iICYmIGV4aXN0aW5nT2Iuc2hhbGxvdyAhPT0gc2hhbGxvdykge1xuICAgICAgICAgICAgICAgIHdhcm4kMihcIlRhcmdldCBpcyBhbHJlYWR5IGEgXCIuY29uY2F0KGV4aXN0aW5nT2Iuc2hhbGxvdyA/IFwiXCIgOiBcIm5vbi1cIiwgXCJzaGFsbG93IHJlYWN0aXZlIG9iamVjdCwgYW5kIGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gXCIpLmNvbmNhdChzaGFsbG93ID8gXCJcIiA6IFwibm9uLVwiLCBcInNoYWxsb3cuXCIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgb2IgPSBvYnNlcnZlKHRhcmdldCwgc2hhbGxvdywgaXNTZXJ2ZXJSZW5kZXJpbmcoKSAvKiBzc3IgbW9jayByZWFjdGl2aXR5ICovKTtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIW9iKSB7XG4gICAgICAgICAgICBpZiAodGFyZ2V0ID09IG51bGwgfHwgaXNQcmltaXRpdmUodGFyZ2V0KSkge1xuICAgICAgICAgICAgICAgIHdhcm4kMihcInZhbHVlIGNhbm5vdCBiZSBtYWRlIHJlYWN0aXZlOiBcIi5jb25jYXQoU3RyaW5nKHRhcmdldCkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc0NvbGxlY3Rpb25UeXBlKHRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICB3YXJuJDIoXCJWdWUgMiBkb2VzIG5vdCBzdXBwb3J0IHJlYWN0aXZlIGNvbGxlY3Rpb24gdHlwZXMgc3VjaCBhcyBNYXAgb3IgU2V0LlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIGlzUmVhY3RpdmUodmFsdWUpIHtcbiAgICBpZiAoaXNSZWFkb25seSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIGlzUmVhY3RpdmUodmFsdWVbXCJfX3ZfcmF3XCIgLyogUmVhY3RpdmVGbGFncy5SQVcgKi9dKTtcbiAgICB9XG4gICAgcmV0dXJuICEhKHZhbHVlICYmIHZhbHVlLl9fb2JfXyk7XG59XG5mdW5jdGlvbiBpc1NoYWxsb3codmFsdWUpIHtcbiAgICByZXR1cm4gISEodmFsdWUgJiYgdmFsdWUuX192X2lzU2hhbGxvdyk7XG59XG5mdW5jdGlvbiBpc1JlYWRvbmx5KHZhbHVlKSB7XG4gICAgcmV0dXJuICEhKHZhbHVlICYmIHZhbHVlLl9fdl9pc1JlYWRvbmx5KTtcbn1cbmZ1bmN0aW9uIGlzUHJveHkodmFsdWUpIHtcbiAgICByZXR1cm4gaXNSZWFjdGl2ZSh2YWx1ZSkgfHwgaXNSZWFkb25seSh2YWx1ZSk7XG59XG5mdW5jdGlvbiB0b1JhdyhvYnNlcnZlZCkge1xuICAgIHZhciByYXcgPSBvYnNlcnZlZCAmJiBvYnNlcnZlZFtcIl9fdl9yYXdcIiAvKiBSZWFjdGl2ZUZsYWdzLlJBVyAqL107XG4gICAgcmV0dXJuIHJhdyA/IHRvUmF3KHJhdykgOiBvYnNlcnZlZDtcbn1cbmZ1bmN0aW9uIG1hcmtSYXcodmFsdWUpIHtcbiAgICAvLyBub24tZXh0ZW5zaWJsZSBvYmplY3RzIHdvbid0IGJlIG9ic2VydmVkIGFueXdheVxuICAgIGlmIChPYmplY3QuaXNFeHRlbnNpYmxlKHZhbHVlKSkge1xuICAgICAgICBkZWYodmFsdWUsIFwiX192X3NraXBcIiAvKiBSZWFjdGl2ZUZsYWdzLlNLSVAgKi8sIHRydWUpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG59XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBpc0NvbGxlY3Rpb25UeXBlKHZhbHVlKSB7XG4gICAgdmFyIHR5cGUgPSB0b1Jhd1R5cGUodmFsdWUpO1xuICAgIHJldHVybiAodHlwZSA9PT0gJ01hcCcgfHwgdHlwZSA9PT0gJ1dlYWtNYXAnIHx8IHR5cGUgPT09ICdTZXQnIHx8IHR5cGUgPT09ICdXZWFrU2V0Jyk7XG59XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbnZhciBSZWZGbGFnID0gXCJfX3ZfaXNSZWZcIjtcbmZ1bmN0aW9uIGlzUmVmKHIpIHtcbiAgICByZXR1cm4gISEociAmJiByLl9fdl9pc1JlZiA9PT0gdHJ1ZSk7XG59XG5mdW5jdGlvbiByZWYkMSh2YWx1ZSkge1xuICAgIHJldHVybiBjcmVhdGVSZWYodmFsdWUsIGZhbHNlKTtcbn1cbmZ1bmN0aW9uIHNoYWxsb3dSZWYodmFsdWUpIHtcbiAgICByZXR1cm4gY3JlYXRlUmVmKHZhbHVlLCB0cnVlKTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVJlZihyYXdWYWx1ZSwgc2hhbGxvdykge1xuICAgIGlmIChpc1JlZihyYXdWYWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHJhd1ZhbHVlO1xuICAgIH1cbiAgICB2YXIgcmVmID0ge307XG4gICAgZGVmKHJlZiwgUmVmRmxhZywgdHJ1ZSk7XG4gICAgZGVmKHJlZiwgXCJfX3ZfaXNTaGFsbG93XCIgLyogUmVhY3RpdmVGbGFncy5JU19TSEFMTE9XICovLCBzaGFsbG93KTtcbiAgICBkZWYocmVmLCAnZGVwJywgZGVmaW5lUmVhY3RpdmUocmVmLCAndmFsdWUnLCByYXdWYWx1ZSwgbnVsbCwgc2hhbGxvdywgaXNTZXJ2ZXJSZW5kZXJpbmcoKSkpO1xuICAgIHJldHVybiByZWY7XG59XG5mdW5jdGlvbiB0cmlnZ2VyUmVmKHJlZikge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICFyZWYuZGVwKSB7XG4gICAgICAgIHdhcm4kMihcInJlY2VpdmVkIG9iamVjdCBpcyBub3QgYSB0cmlnZ2VyYWJsZSByZWYuXCIpO1xuICAgIH1cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICByZWYuZGVwICYmXG4gICAgICAgICAgICByZWYuZGVwLm5vdGlmeSh7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJzZXRcIiAvKiBUcmlnZ2VyT3BUeXBlcy5TRVQgKi8sXG4gICAgICAgICAgICAgICAgdGFyZ2V0OiByZWYsXG4gICAgICAgICAgICAgICAga2V5OiAndmFsdWUnXG4gICAgICAgICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJlZi5kZXAgJiYgcmVmLmRlcC5ub3RpZnkoKTtcbiAgICB9XG59XG5mdW5jdGlvbiB1bnJlZihyZWYpIHtcbiAgICByZXR1cm4gaXNSZWYocmVmKSA/IHJlZi52YWx1ZSA6IHJlZjtcbn1cbmZ1bmN0aW9uIHByb3h5UmVmcyhvYmplY3RXaXRoUmVmcykge1xuICAgIGlmIChpc1JlYWN0aXZlKG9iamVjdFdpdGhSZWZzKSkge1xuICAgICAgICByZXR1cm4gb2JqZWN0V2l0aFJlZnM7XG4gICAgfVxuICAgIHZhciBwcm94eSA9IHt9O1xuICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0V2l0aFJlZnMpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBwcm94eVdpdGhSZWZVbndyYXAocHJveHksIG9iamVjdFdpdGhSZWZzLCBrZXlzW2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIHByb3h5O1xufVxuZnVuY3Rpb24gcHJveHlXaXRoUmVmVW53cmFwKHRhcmdldCwgc291cmNlLCBrZXkpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB2YWwgPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgICAgIGlmIChpc1JlZih2YWwpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbC52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBvYiA9IHZhbCAmJiB2YWwuX19vYl9fO1xuICAgICAgICAgICAgICAgIGlmIChvYilcbiAgICAgICAgICAgICAgICAgICAgb2IuZGVwLmRlcGVuZCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB2YXIgb2xkVmFsdWUgPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgICAgIGlmIChpc1JlZihvbGRWYWx1ZSkgJiYgIWlzUmVmKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIG9sZFZhbHVlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzb3VyY2Vba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59XG5mdW5jdGlvbiBjdXN0b21SZWYoZmFjdG9yeSkge1xuICAgIHZhciBkZXAgPSBuZXcgRGVwKCk7XG4gICAgdmFyIF9hID0gZmFjdG9yeShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICBkZXAuZGVwZW5kKHtcbiAgICAgICAgICAgICAgICB0YXJnZXQ6IHJlZixcbiAgICAgICAgICAgICAgICB0eXBlOiBcImdldFwiIC8qIFRyYWNrT3BUeXBlcy5HRVQgKi8sXG4gICAgICAgICAgICAgICAga2V5OiAndmFsdWUnXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGRlcC5kZXBlbmQoKTtcbiAgICAgICAgfVxuICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgIGRlcC5ub3RpZnkoe1xuICAgICAgICAgICAgICAgIHRhcmdldDogcmVmLFxuICAgICAgICAgICAgICAgIHR5cGU6IFwic2V0XCIgLyogVHJpZ2dlck9wVHlwZXMuU0VUICovLFxuICAgICAgICAgICAgICAgIGtleTogJ3ZhbHVlJ1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBkZXAubm90aWZ5KCk7XG4gICAgICAgIH1cbiAgICB9KSwgZ2V0ID0gX2EuZ2V0LCBzZXQgPSBfYS5zZXQ7XG4gICAgdmFyIHJlZiA9IHtcbiAgICAgICAgZ2V0IHZhbHVlKCkge1xuICAgICAgICAgICAgcmV0dXJuIGdldCgpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQgdmFsdWUobmV3VmFsKSB7XG4gICAgICAgICAgICBzZXQobmV3VmFsKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgZGVmKHJlZiwgUmVmRmxhZywgdHJ1ZSk7XG4gICAgcmV0dXJuIHJlZjtcbn1cbmZ1bmN0aW9uIHRvUmVmcyhvYmplY3QpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhaXNSZWFjdGl2ZShvYmplY3QpKSB7XG4gICAgICAgIHdhcm4kMihcInRvUmVmcygpIGV4cGVjdHMgYSByZWFjdGl2ZSBvYmplY3QgYnV0IHJlY2VpdmVkIGEgcGxhaW4gb25lLlwiKTtcbiAgICB9XG4gICAgdmFyIHJldCA9IGlzQXJyYXkob2JqZWN0KSA/IG5ldyBBcnJheShvYmplY3QubGVuZ3RoKSA6IHt9O1xuICAgIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcbiAgICAgICAgcmV0W2tleV0gPSB0b1JlZihvYmplY3QsIGtleSk7XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG59XG5mdW5jdGlvbiB0b1JlZihvYmplY3QsIGtleSwgZGVmYXVsdFZhbHVlKSB7XG4gICAgdmFyIHZhbCA9IG9iamVjdFtrZXldO1xuICAgIGlmIChpc1JlZih2YWwpKSB7XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuICAgIHZhciByZWYgPSB7XG4gICAgICAgIGdldCB2YWx1ZSgpIHtcbiAgICAgICAgICAgIHZhciB2YWwgPSBvYmplY3Rba2V5XTtcbiAgICAgICAgICAgIHJldHVybiB2YWwgPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRWYWx1ZSA6IHZhbDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0IHZhbHVlKG5ld1ZhbCkge1xuICAgICAgICAgICAgb2JqZWN0W2tleV0gPSBuZXdWYWw7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGRlZihyZWYsIFJlZkZsYWcsIHRydWUpO1xuICAgIHJldHVybiByZWY7XG59XG5cbnZhciByYXdUb1JlYWRvbmx5RmxhZyA9IFwiX192X3Jhd1RvUmVhZG9ubHlcIjtcbnZhciByYXdUb1NoYWxsb3dSZWFkb25seUZsYWcgPSBcIl9fdl9yYXdUb1NoYWxsb3dSZWFkb25seVwiO1xuZnVuY3Rpb24gcmVhZG9ubHkodGFyZ2V0KSB7XG4gICAgcmV0dXJuIGNyZWF0ZVJlYWRvbmx5KHRhcmdldCwgZmFsc2UpO1xufVxuZnVuY3Rpb24gY3JlYXRlUmVhZG9ubHkodGFyZ2V0LCBzaGFsbG93KSB7XG4gICAgaWYgKCFpc1BsYWluT2JqZWN0KHRhcmdldCkpIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgIGlmIChpc0FycmF5KHRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICB3YXJuJDIoXCJWdWUgMiBkb2VzIG5vdCBzdXBwb3J0IHJlYWRvbmx5IGFycmF5cy5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChpc0NvbGxlY3Rpb25UeXBlKHRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICB3YXJuJDIoXCJWdWUgMiBkb2VzIG5vdCBzdXBwb3J0IHJlYWRvbmx5IGNvbGxlY3Rpb24gdHlwZXMgc3VjaCBhcyBNYXAgb3IgU2V0LlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHdhcm4kMihcInZhbHVlIGNhbm5vdCBiZSBtYWRlIHJlYWRvbmx5OiBcIi5jb25jYXQodHlwZW9mIHRhcmdldCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfVxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICFPYmplY3QuaXNFeHRlbnNpYmxlKHRhcmdldCkpIHtcbiAgICAgICAgd2FybiQyKFwiVnVlIDIgZG9lcyBub3Qgc3VwcG9ydCBjcmVhdGluZyByZWFkb25seSBwcm94eSBmb3Igbm9uLWV4dGVuc2libGUgb2JqZWN0LlwiKTtcbiAgICB9XG4gICAgLy8gYWxyZWFkeSBhIHJlYWRvbmx5IG9iamVjdFxuICAgIGlmIChpc1JlYWRvbmx5KHRhcmdldCkpIHtcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG4gICAgLy8gYWxyZWFkeSBoYXMgYSByZWFkb25seSBwcm94eVxuICAgIHZhciBleGlzdGluZ0ZsYWcgPSBzaGFsbG93ID8gcmF3VG9TaGFsbG93UmVhZG9ubHlGbGFnIDogcmF3VG9SZWFkb25seUZsYWc7XG4gICAgdmFyIGV4aXN0aW5nUHJveHkgPSB0YXJnZXRbZXhpc3RpbmdGbGFnXTtcbiAgICBpZiAoZXhpc3RpbmdQcm94eSkge1xuICAgICAgICByZXR1cm4gZXhpc3RpbmdQcm94eTtcbiAgICB9XG4gICAgdmFyIHByb3h5ID0gT2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSk7XG4gICAgZGVmKHRhcmdldCwgZXhpc3RpbmdGbGFnLCBwcm94eSk7XG4gICAgZGVmKHByb3h5LCBcIl9fdl9pc1JlYWRvbmx5XCIgLyogUmVhY3RpdmVGbGFncy5JU19SRUFET05MWSAqLywgdHJ1ZSk7XG4gICAgZGVmKHByb3h5LCBcIl9fdl9yYXdcIiAvKiBSZWFjdGl2ZUZsYWdzLlJBVyAqLywgdGFyZ2V0KTtcbiAgICBpZiAoaXNSZWYodGFyZ2V0KSkge1xuICAgICAgICBkZWYocHJveHksIFJlZkZsYWcsIHRydWUpO1xuICAgIH1cbiAgICBpZiAoc2hhbGxvdyB8fCBpc1NoYWxsb3codGFyZ2V0KSkge1xuICAgICAgICBkZWYocHJveHksIFwiX192X2lzU2hhbGxvd1wiIC8qIFJlYWN0aXZlRmxhZ3MuSVNfU0hBTExPVyAqLywgdHJ1ZSk7XG4gICAgfVxuICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXModGFyZ2V0KTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZGVmaW5lUmVhZG9ubHlQcm9wZXJ0eShwcm94eSwgdGFyZ2V0LCBrZXlzW2ldLCBzaGFsbG93KTtcbiAgICB9XG4gICAgcmV0dXJuIHByb3h5O1xufVxuZnVuY3Rpb24gZGVmaW5lUmVhZG9ubHlQcm9wZXJ0eShwcm94eSwgdGFyZ2V0LCBrZXksIHNoYWxsb3cpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJveHksIGtleSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHZhbCA9IHRhcmdldFtrZXldO1xuICAgICAgICAgICAgcmV0dXJuIHNoYWxsb3cgfHwgIWlzUGxhaW5PYmplY3QodmFsKSA/IHZhbCA6IHJlYWRvbmx5KHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgICAgICAgICAgICAgIHdhcm4kMihcIlNldCBvcGVyYXRpb24gb24ga2V5IFxcXCJcIi5jb25jYXQoa2V5LCBcIlxcXCIgZmFpbGVkOiB0YXJnZXQgaXMgcmVhZG9ubHkuXCIpKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuLyoqXG4gKiBSZXR1cm5zIGEgcmVhY3RpdmUtY29weSBvZiB0aGUgb3JpZ2luYWwgb2JqZWN0LCB3aGVyZSBvbmx5IHRoZSByb290IGxldmVsXG4gKiBwcm9wZXJ0aWVzIGFyZSByZWFkb25seSwgYW5kIGRvZXMgTk9UIHVud3JhcCByZWZzIG5vciByZWN1cnNpdmVseSBjb252ZXJ0XG4gKiByZXR1cm5lZCBwcm9wZXJ0aWVzLlxuICogVGhpcyBpcyB1c2VkIGZvciBjcmVhdGluZyB0aGUgcHJvcHMgcHJveHkgb2JqZWN0IGZvciBzdGF0ZWZ1bCBjb21wb25lbnRzLlxuICovXG5mdW5jdGlvbiBzaGFsbG93UmVhZG9ubHkodGFyZ2V0KSB7XG4gICAgcmV0dXJuIGNyZWF0ZVJlYWRvbmx5KHRhcmdldCwgdHJ1ZSk7XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVkKGdldHRlck9yT3B0aW9ucywgZGVidWdPcHRpb25zKSB7XG4gICAgdmFyIGdldHRlcjtcbiAgICB2YXIgc2V0dGVyO1xuICAgIHZhciBvbmx5R2V0dGVyID0gaXNGdW5jdGlvbihnZXR0ZXJPck9wdGlvbnMpO1xuICAgIGlmIChvbmx5R2V0dGVyKSB7XG4gICAgICAgIGdldHRlciA9IGdldHRlck9yT3B0aW9ucztcbiAgICAgICAgc2V0dGVyID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJ1xuICAgICAgICAgICAgPyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgd2FybiQyKCdXcml0ZSBvcGVyYXRpb24gZmFpbGVkOiBjb21wdXRlZCB2YWx1ZSBpcyByZWFkb25seScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiBub29wO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZ2V0dGVyID0gZ2V0dGVyT3JPcHRpb25zLmdldDtcbiAgICAgICAgc2V0dGVyID0gZ2V0dGVyT3JPcHRpb25zLnNldDtcbiAgICB9XG4gICAgdmFyIHdhdGNoZXIgPSBpc1NlcnZlclJlbmRlcmluZygpXG4gICAgICAgID8gbnVsbFxuICAgICAgICA6IG5ldyBXYXRjaGVyKGN1cnJlbnRJbnN0YW5jZSwgZ2V0dGVyLCBub29wLCB7IGxhenk6IHRydWUgfSk7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2F0Y2hlciAmJiBkZWJ1Z09wdGlvbnMpIHtcbiAgICAgICAgd2F0Y2hlci5vblRyYWNrID0gZGVidWdPcHRpb25zLm9uVHJhY2s7XG4gICAgICAgIHdhdGNoZXIub25UcmlnZ2VyID0gZGVidWdPcHRpb25zLm9uVHJpZ2dlcjtcbiAgICB9XG4gICAgdmFyIHJlZiA9IHtcbiAgICAgICAgLy8gc29tZSBsaWJzIHJlbHkgb24gdGhlIHByZXNlbmNlIGVmZmVjdCBmb3IgY2hlY2tpbmcgY29tcHV0ZWQgcmVmc1xuICAgICAgICAvLyBmcm9tIG5vcm1hbCByZWZzLCBidXQgdGhlIGltcGxlbWVudGF0aW9uIGRvZXNuJ3QgbWF0dGVyXG4gICAgICAgIGVmZmVjdDogd2F0Y2hlcixcbiAgICAgICAgZ2V0IHZhbHVlKCkge1xuICAgICAgICAgICAgaWYgKHdhdGNoZXIpIHtcbiAgICAgICAgICAgICAgICBpZiAod2F0Y2hlci5kaXJ0eSkge1xuICAgICAgICAgICAgICAgICAgICB3YXRjaGVyLmV2YWx1YXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChEZXAudGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIERlcC50YXJnZXQub25UcmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgRGVwLnRhcmdldC5vblRyYWNrKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZmZlY3Q6IERlcC50YXJnZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiByZWYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJnZXRcIiAvKiBUcmFja09wVHlwZXMuR0VUICovLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ3ZhbHVlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgd2F0Y2hlci5kZXBlbmQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdhdGNoZXIudmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0dGVyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHNldCB2YWx1ZShuZXdWYWwpIHtcbiAgICAgICAgICAgIHNldHRlcihuZXdWYWwpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBkZWYocmVmLCBSZWZGbGFnLCB0cnVlKTtcbiAgICBkZWYocmVmLCBcIl9fdl9pc1JlYWRvbmx5XCIgLyogUmVhY3RpdmVGbGFncy5JU19SRUFET05MWSAqLywgb25seUdldHRlcik7XG4gICAgcmV0dXJuIHJlZjtcbn1cblxudmFyIG1hcms7XG52YXIgbWVhc3VyZTtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgdmFyIHBlcmZfMSA9IGluQnJvd3NlciAmJiB3aW5kb3cucGVyZm9ybWFuY2U7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKHBlcmZfMSAmJlxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHBlcmZfMS5tYXJrICYmXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgcGVyZl8xLm1lYXN1cmUgJiZcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBwZXJmXzEuY2xlYXJNYXJrcyAmJlxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHBlcmZfMS5jbGVhck1lYXN1cmVzKSB7XG4gICAgICAgIG1hcmsgPSBmdW5jdGlvbiAodGFnKSB7IHJldHVybiBwZXJmXzEubWFyayh0YWcpOyB9O1xuICAgICAgICBtZWFzdXJlID0gZnVuY3Rpb24gKG5hbWUsIHN0YXJ0VGFnLCBlbmRUYWcpIHtcbiAgICAgICAgICAgIHBlcmZfMS5tZWFzdXJlKG5hbWUsIHN0YXJ0VGFnLCBlbmRUYWcpO1xuICAgICAgICAgICAgcGVyZl8xLmNsZWFyTWFya3Moc3RhcnRUYWcpO1xuICAgICAgICAgICAgcGVyZl8xLmNsZWFyTWFya3MoZW5kVGFnKTtcbiAgICAgICAgICAgIC8vIHBlcmYuY2xlYXJNZWFzdXJlcyhuYW1lKVxuICAgICAgICB9O1xuICAgIH1cbn1cblxudmFyIG5vcm1hbGl6ZUV2ZW50ID0gY2FjaGVkKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdmFyIHBhc3NpdmUgPSBuYW1lLmNoYXJBdCgwKSA9PT0gJyYnO1xuICAgIG5hbWUgPSBwYXNzaXZlID8gbmFtZS5zbGljZSgxKSA6IG5hbWU7XG4gICAgdmFyIG9uY2UgPSBuYW1lLmNoYXJBdCgwKSA9PT0gJ34nOyAvLyBQcmVmaXhlZCBsYXN0LCBjaGVja2VkIGZpcnN0XG4gICAgbmFtZSA9IG9uY2UgPyBuYW1lLnNsaWNlKDEpIDogbmFtZTtcbiAgICB2YXIgY2FwdHVyZSA9IG5hbWUuY2hhckF0KDApID09PSAnISc7XG4gICAgbmFtZSA9IGNhcHR1cmUgPyBuYW1lLnNsaWNlKDEpIDogbmFtZTtcbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICBvbmNlOiBvbmNlLFxuICAgICAgICBjYXB0dXJlOiBjYXB0dXJlLFxuICAgICAgICBwYXNzaXZlOiBwYXNzaXZlXG4gICAgfTtcbn0pO1xuZnVuY3Rpb24gY3JlYXRlRm5JbnZva2VyKGZucywgdm0pIHtcbiAgICBmdW5jdGlvbiBpbnZva2VyKCkge1xuICAgICAgICB2YXIgZm5zID0gaW52b2tlci5mbnM7XG4gICAgICAgIGlmIChpc0FycmF5KGZucykpIHtcbiAgICAgICAgICAgIHZhciBjbG9uZWQgPSBmbnMuc2xpY2UoKTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2xvbmVkLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaW52b2tlV2l0aEVycm9ySGFuZGxpbmcoY2xvbmVkW2ldLCBudWxsLCBhcmd1bWVudHMsIHZtLCBcInYtb24gaGFuZGxlclwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIHJldHVybiBoYW5kbGVyIHJldHVybiB2YWx1ZSBmb3Igc2luZ2xlIGhhbmRsZXJzXG4gICAgICAgICAgICByZXR1cm4gaW52b2tlV2l0aEVycm9ySGFuZGxpbmcoZm5zLCBudWxsLCBhcmd1bWVudHMsIHZtLCBcInYtb24gaGFuZGxlclwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpbnZva2VyLmZucyA9IGZucztcbiAgICByZXR1cm4gaW52b2tlcjtcbn1cbmZ1bmN0aW9uIHVwZGF0ZUxpc3RlbmVycyhvbiwgb2xkT24sIGFkZCwgcmVtb3ZlLCBjcmVhdGVPbmNlSGFuZGxlciwgdm0pIHtcbiAgICB2YXIgbmFtZSwgY3VyLCBvbGQsIGV2ZW50O1xuICAgIGZvciAobmFtZSBpbiBvbikge1xuICAgICAgICBjdXIgPSBvbltuYW1lXTtcbiAgICAgICAgb2xkID0gb2xkT25bbmFtZV07XG4gICAgICAgIGV2ZW50ID0gbm9ybWFsaXplRXZlbnQobmFtZSk7XG4gICAgICAgIGlmIChpc1VuZGVmKGN1cikpIHtcbiAgICAgICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICAgICAgICAgICAgICB3YXJuJDIoXCJJbnZhbGlkIGhhbmRsZXIgZm9yIGV2ZW50IFxcXCJcIi5jb25jYXQoZXZlbnQubmFtZSwgXCJcXFwiOiBnb3QgXCIpICsgU3RyaW5nKGN1ciksIHZtKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc1VuZGVmKG9sZCkpIHtcbiAgICAgICAgICAgIGlmIChpc1VuZGVmKGN1ci5mbnMpKSB7XG4gICAgICAgICAgICAgICAgY3VyID0gb25bbmFtZV0gPSBjcmVhdGVGbkludm9rZXIoY3VyLCB2bSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNUcnVlKGV2ZW50Lm9uY2UpKSB7XG4gICAgICAgICAgICAgICAgY3VyID0gb25bbmFtZV0gPSBjcmVhdGVPbmNlSGFuZGxlcihldmVudC5uYW1lLCBjdXIsIGV2ZW50LmNhcHR1cmUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYWRkKGV2ZW50Lm5hbWUsIGN1ciwgZXZlbnQuY2FwdHVyZSwgZXZlbnQucGFzc2l2ZSwgZXZlbnQucGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjdXIgIT09IG9sZCkge1xuICAgICAgICAgICAgb2xkLmZucyA9IGN1cjtcbiAgICAgICAgICAgIG9uW25hbWVdID0gb2xkO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZvciAobmFtZSBpbiBvbGRPbikge1xuICAgICAgICBpZiAoaXNVbmRlZihvbltuYW1lXSkpIHtcbiAgICAgICAgICAgIGV2ZW50ID0gbm9ybWFsaXplRXZlbnQobmFtZSk7XG4gICAgICAgICAgICByZW1vdmUoZXZlbnQubmFtZSwgb2xkT25bbmFtZV0sIGV2ZW50LmNhcHR1cmUpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiBtZXJnZVZOb2RlSG9vayhkZWYsIGhvb2tLZXksIGhvb2spIHtcbiAgICBpZiAoZGVmIGluc3RhbmNlb2YgVk5vZGUpIHtcbiAgICAgICAgZGVmID0gZGVmLmRhdGEuaG9vayB8fCAoZGVmLmRhdGEuaG9vayA9IHt9KTtcbiAgICB9XG4gICAgdmFyIGludm9rZXI7XG4gICAgdmFyIG9sZEhvb2sgPSBkZWZbaG9va0tleV07XG4gICAgZnVuY3Rpb24gd3JhcHBlZEhvb2soKSB7XG4gICAgICAgIGhvb2suYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgLy8gaW1wb3J0YW50OiByZW1vdmUgbWVyZ2VkIGhvb2sgdG8gZW5zdXJlIGl0J3MgY2FsbGVkIG9ubHkgb25jZVxuICAgICAgICAvLyBhbmQgcHJldmVudCBtZW1vcnkgbGVha1xuICAgICAgICByZW1vdmUkMihpbnZva2VyLmZucywgd3JhcHBlZEhvb2spO1xuICAgIH1cbiAgICBpZiAoaXNVbmRlZihvbGRIb29rKSkge1xuICAgICAgICAvLyBubyBleGlzdGluZyBob29rXG4gICAgICAgIGludm9rZXIgPSBjcmVhdGVGbkludm9rZXIoW3dyYXBwZWRIb29rXSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgaWYgKGlzRGVmKG9sZEhvb2suZm5zKSAmJiBpc1RydWUob2xkSG9vay5tZXJnZWQpKSB7XG4gICAgICAgICAgICAvLyBhbHJlYWR5IGEgbWVyZ2VkIGludm9rZXJcbiAgICAgICAgICAgIGludm9rZXIgPSBvbGRIb29rO1xuICAgICAgICAgICAgaW52b2tlci5mbnMucHVzaCh3cmFwcGVkSG9vayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBleGlzdGluZyBwbGFpbiBob29rXG4gICAgICAgICAgICBpbnZva2VyID0gY3JlYXRlRm5JbnZva2VyKFtvbGRIb29rLCB3cmFwcGVkSG9va10pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGludm9rZXIubWVyZ2VkID0gdHJ1ZTtcbiAgICBkZWZbaG9va0tleV0gPSBpbnZva2VyO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0UHJvcHNGcm9tVk5vZGVEYXRhKGRhdGEsIEN0b3IsIHRhZykge1xuICAgIC8vIHdlIGFyZSBvbmx5IGV4dHJhY3RpbmcgcmF3IHZhbHVlcyBoZXJlLlxuICAgIC8vIHZhbGlkYXRpb24gYW5kIGRlZmF1bHQgdmFsdWVzIGFyZSBoYW5kbGVkIGluIHRoZSBjaGlsZFxuICAgIC8vIGNvbXBvbmVudCBpdHNlbGYuXG4gICAgdmFyIHByb3BPcHRpb25zID0gQ3Rvci5vcHRpb25zLnByb3BzO1xuICAgIGlmIChpc1VuZGVmKHByb3BPcHRpb25zKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciByZXMgPSB7fTtcbiAgICB2YXIgYXR0cnMgPSBkYXRhLmF0dHJzLCBwcm9wcyA9IGRhdGEucHJvcHM7XG4gICAgaWYgKGlzRGVmKGF0dHJzKSB8fCBpc0RlZihwcm9wcykpIHtcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHByb3BPcHRpb25zKSB7XG4gICAgICAgICAgICB2YXIgYWx0S2V5ID0gaHlwaGVuYXRlKGtleSk7XG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgICAgIHZhciBrZXlJbkxvd2VyQ2FzZSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIGlmIChrZXkgIT09IGtleUluTG93ZXJDYXNlICYmIGF0dHJzICYmIGhhc093bihhdHRycywga2V5SW5Mb3dlckNhc2UpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRpcChcIlByb3AgXFxcIlwiLmNvbmNhdChrZXlJbkxvd2VyQ2FzZSwgXCJcXFwiIGlzIHBhc3NlZCB0byBjb21wb25lbnQgXCIpICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXCIuY29uY2F0KGZvcm1hdENvbXBvbmVudE5hbWUoXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIHRhZyBpcyBzdHJpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhZyB8fCBDdG9yKSwgXCIsIGJ1dCB0aGUgZGVjbGFyZWQgcHJvcCBuYW1lIGlzXCIpICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiIFxcXCJcIi5jb25jYXQoa2V5LCBcIlxcXCIuIFwiKSArXG4gICAgICAgICAgICAgICAgICAgICAgICBcIk5vdGUgdGhhdCBIVE1MIGF0dHJpYnV0ZXMgYXJlIGNhc2UtaW5zZW5zaXRpdmUgYW5kIGNhbWVsQ2FzZWQgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJwcm9wcyBuZWVkIHRvIHVzZSB0aGVpciBrZWJhYi1jYXNlIGVxdWl2YWxlbnRzIHdoZW4gdXNpbmcgaW4tRE9NIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwidGVtcGxhdGVzLiBZb3Ugc2hvdWxkIHByb2JhYmx5IHVzZSBcXFwiXCIuY29uY2F0KGFsdEtleSwgXCJcXFwiIGluc3RlYWQgb2YgXFxcIlwiKS5jb25jYXQoa2V5LCBcIlxcXCIuXCIpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjaGVja1Byb3AocmVzLCBwcm9wcywga2V5LCBhbHRLZXksIHRydWUpIHx8XG4gICAgICAgICAgICAgICAgY2hlY2tQcm9wKHJlcywgYXR0cnMsIGtleSwgYWx0S2V5LCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbn1cbmZ1bmN0aW9uIGNoZWNrUHJvcChyZXMsIGhhc2gsIGtleSwgYWx0S2V5LCBwcmVzZXJ2ZSkge1xuICAgIGlmIChpc0RlZihoYXNoKSkge1xuICAgICAgICBpZiAoaGFzT3duKGhhc2gsIGtleSkpIHtcbiAgICAgICAgICAgIHJlc1trZXldID0gaGFzaFtrZXldO1xuICAgICAgICAgICAgaWYgKCFwcmVzZXJ2ZSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBoYXNoW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChoYXNPd24oaGFzaCwgYWx0S2V5KSkge1xuICAgICAgICAgICAgcmVzW2tleV0gPSBoYXNoW2FsdEtleV07XG4gICAgICAgICAgICBpZiAoIXByZXNlcnZlKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIGhhc2hbYWx0S2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuLy8gVGhlIHRlbXBsYXRlIGNvbXBpbGVyIGF0dGVtcHRzIHRvIG1pbmltaXplIHRoZSBuZWVkIGZvciBub3JtYWxpemF0aW9uIGJ5XG4vLyBzdGF0aWNhbGx5IGFuYWx5emluZyB0aGUgdGVtcGxhdGUgYXQgY29tcGlsZSB0aW1lLlxuLy9cbi8vIEZvciBwbGFpbiBIVE1MIG1hcmt1cCwgbm9ybWFsaXphdGlvbiBjYW4gYmUgY29tcGxldGVseSBza2lwcGVkIGJlY2F1c2UgdGhlXG4vLyBnZW5lcmF0ZWQgcmVuZGVyIGZ1bmN0aW9uIGlzIGd1YXJhbnRlZWQgdG8gcmV0dXJuIEFycmF5PFZOb2RlPi4gVGhlcmUgYXJlXG4vLyB0d28gY2FzZXMgd2hlcmUgZXh0cmEgbm9ybWFsaXphdGlvbiBpcyBuZWVkZWQ6XG4vLyAxLiBXaGVuIHRoZSBjaGlsZHJlbiBjb250YWlucyBjb21wb25lbnRzIC0gYmVjYXVzZSBhIGZ1bmN0aW9uYWwgY29tcG9uZW50XG4vLyBtYXkgcmV0dXJuIGFuIEFycmF5IGluc3RlYWQgb2YgYSBzaW5nbGUgcm9vdC4gSW4gdGhpcyBjYXNlLCBqdXN0IGEgc2ltcGxlXG4vLyBub3JtYWxpemF0aW9uIGlzIG5lZWRlZCAtIGlmIGFueSBjaGlsZCBpcyBhbiBBcnJheSwgd2UgZmxhdHRlbiB0aGUgd2hvbGVcbi8vIHRoaW5nIHdpdGggQXJyYXkucHJvdG90eXBlLmNvbmNhdC4gSXQgaXMgZ3VhcmFudGVlZCB0byBiZSBvbmx5IDEtbGV2ZWwgZGVlcFxuLy8gYmVjYXVzZSBmdW5jdGlvbmFsIGNvbXBvbmVudHMgYWxyZWFkeSBub3JtYWxpemUgdGhlaXIgb3duIGNoaWxkcmVuLlxuZnVuY3Rpb24gc2ltcGxlTm9ybWFsaXplQ2hpbGRyZW4oY2hpbGRyZW4pIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChpc0FycmF5KGNoaWxkcmVuW2ldKSkge1xuICAgICAgICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sIGNoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY2hpbGRyZW47XG59XG4vLyAyLiBXaGVuIHRoZSBjaGlsZHJlbiBjb250YWlucyBjb25zdHJ1Y3RzIHRoYXQgYWx3YXlzIGdlbmVyYXRlZCBuZXN0ZWQgQXJyYXlzLFxuLy8gZS5nLiA8dGVtcGxhdGU+LCA8c2xvdD4sIHYtZm9yLCBvciB3aGVuIHRoZSBjaGlsZHJlbiBpcyBwcm92aWRlZCBieSB1c2VyXG4vLyB3aXRoIGhhbmQtd3JpdHRlbiByZW5kZXIgZnVuY3Rpb25zIC8gSlNYLiBJbiBzdWNoIGNhc2VzIGEgZnVsbCBub3JtYWxpemF0aW9uXG4vLyBpcyBuZWVkZWQgdG8gY2F0ZXIgdG8gYWxsIHBvc3NpYmxlIHR5cGVzIG9mIGNoaWxkcmVuIHZhbHVlcy5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUNoaWxkcmVuKGNoaWxkcmVuKSB7XG4gICAgcmV0dXJuIGlzUHJpbWl0aXZlKGNoaWxkcmVuKVxuICAgICAgICA/IFtjcmVhdGVUZXh0Vk5vZGUoY2hpbGRyZW4pXVxuICAgICAgICA6IGlzQXJyYXkoY2hpbGRyZW4pXG4gICAgICAgICAgICA/IG5vcm1hbGl6ZUFycmF5Q2hpbGRyZW4oY2hpbGRyZW4pXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIGlzVGV4dE5vZGUobm9kZSkge1xuICAgIHJldHVybiBpc0RlZihub2RlKSAmJiBpc0RlZihub2RlLnRleHQpICYmIGlzRmFsc2Uobm9kZS5pc0NvbW1lbnQpO1xufVxuZnVuY3Rpb24gbm9ybWFsaXplQXJyYXlDaGlsZHJlbihjaGlsZHJlbiwgbmVzdGVkSW5kZXgpIHtcbiAgICB2YXIgcmVzID0gW107XG4gICAgdmFyIGksIGMsIGxhc3RJbmRleCwgbGFzdDtcbiAgICBmb3IgKGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYyA9IGNoaWxkcmVuW2ldO1xuICAgICAgICBpZiAoaXNVbmRlZihjKSB8fCB0eXBlb2YgYyA9PT0gJ2Jvb2xlYW4nKVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIGxhc3RJbmRleCA9IHJlcy5sZW5ndGggLSAxO1xuICAgICAgICBsYXN0ID0gcmVzW2xhc3RJbmRleF07XG4gICAgICAgIC8vICBuZXN0ZWRcbiAgICAgICAgaWYgKGlzQXJyYXkoYykpIHtcbiAgICAgICAgICAgIGlmIChjLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBjID0gbm9ybWFsaXplQXJyYXlDaGlsZHJlbihjLCBcIlwiLmNvbmNhdChuZXN0ZWRJbmRleCB8fCAnJywgXCJfXCIpLmNvbmNhdChpKSk7XG4gICAgICAgICAgICAgICAgLy8gbWVyZ2UgYWRqYWNlbnQgdGV4dCBub2Rlc1xuICAgICAgICAgICAgICAgIGlmIChpc1RleHROb2RlKGNbMF0pICYmIGlzVGV4dE5vZGUobGFzdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzW2xhc3RJbmRleF0gPSBjcmVhdGVUZXh0Vk5vZGUobGFzdC50ZXh0ICsgY1swXS50ZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgYy5zaGlmdCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXMucHVzaC5hcHBseShyZXMsIGMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzUHJpbWl0aXZlKGMpKSB7XG4gICAgICAgICAgICBpZiAoaXNUZXh0Tm9kZShsYXN0KSkge1xuICAgICAgICAgICAgICAgIC8vIG1lcmdlIGFkamFjZW50IHRleHQgbm9kZXNcbiAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIG5lY2Vzc2FyeSBmb3IgU1NSIGh5ZHJhdGlvbiBiZWNhdXNlIHRleHQgbm9kZXMgYXJlXG4gICAgICAgICAgICAgICAgLy8gZXNzZW50aWFsbHkgbWVyZ2VkIHdoZW4gcmVuZGVyZWQgdG8gSFRNTCBzdHJpbmdzXG4gICAgICAgICAgICAgICAgcmVzW2xhc3RJbmRleF0gPSBjcmVhdGVUZXh0Vk5vZGUobGFzdC50ZXh0ICsgYyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjICE9PSAnJykge1xuICAgICAgICAgICAgICAgIC8vIGNvbnZlcnQgcHJpbWl0aXZlIHRvIHZub2RlXG4gICAgICAgICAgICAgICAgcmVzLnB1c2goY3JlYXRlVGV4dFZOb2RlKGMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChpc1RleHROb2RlKGMpICYmIGlzVGV4dE5vZGUobGFzdCkpIHtcbiAgICAgICAgICAgICAgICAvLyBtZXJnZSBhZGphY2VudCB0ZXh0IG5vZGVzXG4gICAgICAgICAgICAgICAgcmVzW2xhc3RJbmRleF0gPSBjcmVhdGVUZXh0Vk5vZGUobGFzdC50ZXh0ICsgYy50ZXh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGRlZmF1bHQga2V5IGZvciBuZXN0ZWQgYXJyYXkgY2hpbGRyZW4gKGxpa2VseSBnZW5lcmF0ZWQgYnkgdi1mb3IpXG4gICAgICAgICAgICAgICAgaWYgKGlzVHJ1ZShjaGlsZHJlbi5faXNWTGlzdCkgJiZcbiAgICAgICAgICAgICAgICAgICAgaXNEZWYoYy50YWcpICYmXG4gICAgICAgICAgICAgICAgICAgIGlzVW5kZWYoYy5rZXkpICYmXG4gICAgICAgICAgICAgICAgICAgIGlzRGVmKG5lc3RlZEluZGV4KSkge1xuICAgICAgICAgICAgICAgICAgICBjLmtleSA9IFwiX192bGlzdFwiLmNvbmNhdChuZXN0ZWRJbmRleCwgXCJfXCIpLmNvbmNhdChpLCBcIl9fXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXMucHVzaChjKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuXG52YXIgU0lNUExFX05PUk1BTElaRSA9IDE7XG52YXIgQUxXQVlTX05PUk1BTElaRSA9IDI7XG4vLyB3cmFwcGVyIGZ1bmN0aW9uIGZvciBwcm92aWRpbmcgYSBtb3JlIGZsZXhpYmxlIGludGVyZmFjZVxuLy8gd2l0aG91dCBnZXR0aW5nIHllbGxlZCBhdCBieSBmbG93XG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50JDEoY29udGV4dCwgdGFnLCBkYXRhLCBjaGlsZHJlbiwgbm9ybWFsaXphdGlvblR5cGUsIGFsd2F5c05vcm1hbGl6ZSkge1xuICAgIGlmIChpc0FycmF5KGRhdGEpIHx8IGlzUHJpbWl0aXZlKGRhdGEpKSB7XG4gICAgICAgIG5vcm1hbGl6YXRpb25UeXBlID0gY2hpbGRyZW47XG4gICAgICAgIGNoaWxkcmVuID0gZGF0YTtcbiAgICAgICAgZGF0YSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKGlzVHJ1ZShhbHdheXNOb3JtYWxpemUpKSB7XG4gICAgICAgIG5vcm1hbGl6YXRpb25UeXBlID0gQUxXQVlTX05PUk1BTElaRTtcbiAgICB9XG4gICAgcmV0dXJuIF9jcmVhdGVFbGVtZW50KGNvbnRleHQsIHRhZywgZGF0YSwgY2hpbGRyZW4sIG5vcm1hbGl6YXRpb25UeXBlKTtcbn1cbmZ1bmN0aW9uIF9jcmVhdGVFbGVtZW50KGNvbnRleHQsIHRhZywgZGF0YSwgY2hpbGRyZW4sIG5vcm1hbGl6YXRpb25UeXBlKSB7XG4gICAgaWYgKGlzRGVmKGRhdGEpICYmIGlzRGVmKGRhdGEuX19vYl9fKSkge1xuICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgICAgICAgICB3YXJuJDIoXCJBdm9pZCB1c2luZyBvYnNlcnZlZCBkYXRhIG9iamVjdCBhcyB2bm9kZSBkYXRhOiBcIi5jb25jYXQoSlNPTi5zdHJpbmdpZnkoZGF0YSksIFwiXFxuXCIpICsgJ0Fsd2F5cyBjcmVhdGUgZnJlc2ggdm5vZGUgZGF0YSBvYmplY3RzIGluIGVhY2ggcmVuZGVyIScsIGNvbnRleHQpO1xuICAgICAgICByZXR1cm4gY3JlYXRlRW1wdHlWTm9kZSgpO1xuICAgIH1cbiAgICAvLyBvYmplY3Qgc3ludGF4IGluIHYtYmluZFxuICAgIGlmIChpc0RlZihkYXRhKSAmJiBpc0RlZihkYXRhLmlzKSkge1xuICAgICAgICB0YWcgPSBkYXRhLmlzO1xuICAgIH1cbiAgICBpZiAoIXRhZykge1xuICAgICAgICAvLyBpbiBjYXNlIG9mIGNvbXBvbmVudCA6aXMgc2V0IHRvIGZhbHN5IHZhbHVlXG4gICAgICAgIHJldHVybiBjcmVhdGVFbXB0eVZOb2RlKCk7XG4gICAgfVxuICAgIC8vIHdhcm4gYWdhaW5zdCBub24tcHJpbWl0aXZlIGtleVxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGlzRGVmKGRhdGEpICYmIGlzRGVmKGRhdGEua2V5KSAmJiAhaXNQcmltaXRpdmUoZGF0YS5rZXkpKSB7XG4gICAgICAgIHdhcm4kMignQXZvaWQgdXNpbmcgbm9uLXByaW1pdGl2ZSB2YWx1ZSBhcyBrZXksICcgK1xuICAgICAgICAgICAgJ3VzZSBzdHJpbmcvbnVtYmVyIHZhbHVlIGluc3RlYWQuJywgY29udGV4dCk7XG4gICAgfVxuICAgIC8vIHN1cHBvcnQgc2luZ2xlIGZ1bmN0aW9uIGNoaWxkcmVuIGFzIGRlZmF1bHQgc2NvcGVkIHNsb3RcbiAgICBpZiAoaXNBcnJheShjaGlsZHJlbikgJiYgaXNGdW5jdGlvbihjaGlsZHJlblswXSkpIHtcbiAgICAgICAgZGF0YSA9IGRhdGEgfHwge307XG4gICAgICAgIGRhdGEuc2NvcGVkU2xvdHMgPSB7IGRlZmF1bHQ6IGNoaWxkcmVuWzBdIH07XG4gICAgICAgIGNoaWxkcmVuLmxlbmd0aCA9IDA7XG4gICAgfVxuICAgIGlmIChub3JtYWxpemF0aW9uVHlwZSA9PT0gQUxXQVlTX05PUk1BTElaRSkge1xuICAgICAgICBjaGlsZHJlbiA9IG5vcm1hbGl6ZUNoaWxkcmVuKGNoaWxkcmVuKTtcbiAgICB9XG4gICAgZWxzZSBpZiAobm9ybWFsaXphdGlvblR5cGUgPT09IFNJTVBMRV9OT1JNQUxJWkUpIHtcbiAgICAgICAgY2hpbGRyZW4gPSBzaW1wbGVOb3JtYWxpemVDaGlsZHJlbihjaGlsZHJlbik7XG4gICAgfVxuICAgIHZhciB2bm9kZSwgbnM7XG4gICAgaWYgKHR5cGVvZiB0YWcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHZhciBDdG9yID0gdm9pZCAwO1xuICAgICAgICBucyA9IChjb250ZXh0LiR2bm9kZSAmJiBjb250ZXh0LiR2bm9kZS5ucykgfHwgY29uZmlnLmdldFRhZ05hbWVzcGFjZSh0YWcpO1xuICAgICAgICBpZiAoY29uZmlnLmlzUmVzZXJ2ZWRUYWcodGFnKSkge1xuICAgICAgICAgICAgLy8gcGxhdGZvcm0gYnVpbHQtaW4gZWxlbWVudHNcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgICAgICAgICAgICAgaXNEZWYoZGF0YSkgJiZcbiAgICAgICAgICAgICAgICBpc0RlZihkYXRhLm5hdGl2ZU9uKSAmJlxuICAgICAgICAgICAgICAgIGRhdGEudGFnICE9PSAnY29tcG9uZW50Jykge1xuICAgICAgICAgICAgICAgIHdhcm4kMihcIlRoZSAubmF0aXZlIG1vZGlmaWVyIGZvciB2LW9uIGlzIG9ubHkgdmFsaWQgb24gY29tcG9uZW50cyBidXQgaXQgd2FzIHVzZWQgb24gPFwiLmNvbmNhdCh0YWcsIFwiPi5cIiksIGNvbnRleHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdm5vZGUgPSBuZXcgVk5vZGUoY29uZmlnLnBhcnNlUGxhdGZvcm1UYWdOYW1lKHRhZyksIGRhdGEsIGNoaWxkcmVuLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgY29udGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoKCFkYXRhIHx8ICFkYXRhLnByZSkgJiZcbiAgICAgICAgICAgIGlzRGVmKChDdG9yID0gcmVzb2x2ZUFzc2V0KGNvbnRleHQuJG9wdGlvbnMsICdjb21wb25lbnRzJywgdGFnKSkpKSB7XG4gICAgICAgICAgICAvLyBjb21wb25lbnRcbiAgICAgICAgICAgIHZub2RlID0gY3JlYXRlQ29tcG9uZW50KEN0b3IsIGRhdGEsIGNvbnRleHQsIGNoaWxkcmVuLCB0YWcpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gdW5rbm93biBvciB1bmxpc3RlZCBuYW1lc3BhY2VkIGVsZW1lbnRzXG4gICAgICAgICAgICAvLyBjaGVjayBhdCBydW50aW1lIGJlY2F1c2UgaXQgbWF5IGdldCBhc3NpZ25lZCBhIG5hbWVzcGFjZSB3aGVuIGl0c1xuICAgICAgICAgICAgLy8gcGFyZW50IG5vcm1hbGl6ZXMgY2hpbGRyZW5cbiAgICAgICAgICAgIHZub2RlID0gbmV3IFZOb2RlKHRhZywgZGF0YSwgY2hpbGRyZW4sIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBjb250ZXh0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgLy8gZGlyZWN0IGNvbXBvbmVudCBvcHRpb25zIC8gY29uc3RydWN0b3JcbiAgICAgICAgdm5vZGUgPSBjcmVhdGVDb21wb25lbnQodGFnLCBkYXRhLCBjb250ZXh0LCBjaGlsZHJlbik7XG4gICAgfVxuICAgIGlmIChpc0FycmF5KHZub2RlKSkge1xuICAgICAgICByZXR1cm4gdm5vZGU7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzRGVmKHZub2RlKSkge1xuICAgICAgICBpZiAoaXNEZWYobnMpKVxuICAgICAgICAgICAgYXBwbHlOUyh2bm9kZSwgbnMpO1xuICAgICAgICBpZiAoaXNEZWYoZGF0YSkpXG4gICAgICAgICAgICByZWdpc3RlckRlZXBCaW5kaW5ncyhkYXRhKTtcbiAgICAgICAgcmV0dXJuIHZub2RlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUVtcHR5Vk5vZGUoKTtcbiAgICB9XG59XG5mdW5jdGlvbiBhcHBseU5TKHZub2RlLCBucywgZm9yY2UpIHtcbiAgICB2bm9kZS5ucyA9IG5zO1xuICAgIGlmICh2bm9kZS50YWcgPT09ICdmb3JlaWduT2JqZWN0Jykge1xuICAgICAgICAvLyB1c2UgZGVmYXVsdCBuYW1lc3BhY2UgaW5zaWRlIGZvcmVpZ25PYmplY3RcbiAgICAgICAgbnMgPSB1bmRlZmluZWQ7XG4gICAgICAgIGZvcmNlID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKGlzRGVmKHZub2RlLmNoaWxkcmVuKSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHZub2RlLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgdmFyIGNoaWxkID0gdm5vZGUuY2hpbGRyZW5baV07XG4gICAgICAgICAgICBpZiAoaXNEZWYoY2hpbGQudGFnKSAmJlxuICAgICAgICAgICAgICAgIChpc1VuZGVmKGNoaWxkLm5zKSB8fCAoaXNUcnVlKGZvcmNlKSAmJiBjaGlsZC50YWcgIT09ICdzdmcnKSkpIHtcbiAgICAgICAgICAgICAgICBhcHBseU5TKGNoaWxkLCBucywgZm9yY2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuLy8gcmVmICM1MzE4XG4vLyBuZWNlc3NhcnkgdG8gZW5zdXJlIHBhcmVudCByZS1yZW5kZXIgd2hlbiBkZWVwIGJpbmRpbmdzIGxpa2UgOnN0eWxlIGFuZFxuLy8gOmNsYXNzIGFyZSB1c2VkIG9uIHNsb3Qgbm9kZXNcbmZ1bmN0aW9uIHJlZ2lzdGVyRGVlcEJpbmRpbmdzKGRhdGEpIHtcbiAgICBpZiAoaXNPYmplY3QoZGF0YS5zdHlsZSkpIHtcbiAgICAgICAgdHJhdmVyc2UoZGF0YS5zdHlsZSk7XG4gICAgfVxuICAgIGlmIChpc09iamVjdChkYXRhLmNsYXNzKSkge1xuICAgICAgICB0cmF2ZXJzZShkYXRhLmNsYXNzKTtcbiAgICB9XG59XG5cbi8qKlxuICogUnVudGltZSBoZWxwZXIgZm9yIHJlbmRlcmluZyB2LWZvciBsaXN0cy5cbiAqL1xuZnVuY3Rpb24gcmVuZGVyTGlzdCh2YWwsIHJlbmRlcikge1xuICAgIHZhciByZXQgPSBudWxsLCBpLCBsLCBrZXlzLCBrZXk7XG4gICAgaWYgKGlzQXJyYXkodmFsKSB8fCB0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXQgPSBuZXcgQXJyYXkodmFsLmxlbmd0aCk7XG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSB2YWwubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICByZXRbaV0gPSByZW5kZXIodmFsW2ldLCBpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgICAgICByZXQgPSBuZXcgQXJyYXkodmFsKTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHZhbDsgaSsrKSB7XG4gICAgICAgICAgICByZXRbaV0gPSByZW5kZXIoaSArIDEsIGkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzT2JqZWN0KHZhbCkpIHtcbiAgICAgICAgaWYgKGhhc1N5bWJvbCAmJiB2YWxbU3ltYm9sLml0ZXJhdG9yXSkge1xuICAgICAgICAgICAgcmV0ID0gW107XG4gICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSB2YWxbU3ltYm9sLml0ZXJhdG9yXSgpO1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgICAgIHdoaWxlICghcmVzdWx0LmRvbmUpIHtcbiAgICAgICAgICAgICAgICByZXQucHVzaChyZW5kZXIocmVzdWx0LnZhbHVlLCByZXQubGVuZ3RoKSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAga2V5cyA9IE9iamVjdC5rZXlzKHZhbCk7XG4gICAgICAgICAgICByZXQgPSBuZXcgQXJyYXkoa2V5cy5sZW5ndGgpO1xuICAgICAgICAgICAgZm9yIChpID0gMCwgbCA9IGtleXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICAgICAga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgICAgICAgICByZXRbaV0gPSByZW5kZXIodmFsW2tleV0sIGtleSwgaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFpc0RlZihyZXQpKSB7XG4gICAgICAgIHJldCA9IFtdO1xuICAgIH1cbiAgICByZXQuX2lzVkxpc3QgPSB0cnVlO1xuICAgIHJldHVybiByZXQ7XG59XG5cbi8qKlxuICogUnVudGltZSBoZWxwZXIgZm9yIHJlbmRlcmluZyA8c2xvdD5cbiAqL1xuZnVuY3Rpb24gcmVuZGVyU2xvdChuYW1lLCBmYWxsYmFja1JlbmRlciwgcHJvcHMsIGJpbmRPYmplY3QpIHtcbiAgICB2YXIgc2NvcGVkU2xvdEZuID0gdGhpcy4kc2NvcGVkU2xvdHNbbmFtZV07XG4gICAgdmFyIG5vZGVzO1xuICAgIGlmIChzY29wZWRTbG90Rm4pIHtcbiAgICAgICAgLy8gc2NvcGVkIHNsb3RcbiAgICAgICAgcHJvcHMgPSBwcm9wcyB8fCB7fTtcbiAgICAgICAgaWYgKGJpbmRPYmplY3QpIHtcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICFpc09iamVjdChiaW5kT2JqZWN0KSkge1xuICAgICAgICAgICAgICAgIHdhcm4kMignc2xvdCB2LWJpbmQgd2l0aG91dCBhcmd1bWVudCBleHBlY3RzIGFuIE9iamVjdCcsIHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcHJvcHMgPSBleHRlbmQoZXh0ZW5kKHt9LCBiaW5kT2JqZWN0KSwgcHJvcHMpO1xuICAgICAgICB9XG4gICAgICAgIG5vZGVzID1cbiAgICAgICAgICAgIHNjb3BlZFNsb3RGbihwcm9wcykgfHxcbiAgICAgICAgICAgICAgICAoaXNGdW5jdGlvbihmYWxsYmFja1JlbmRlcikgPyBmYWxsYmFja1JlbmRlcigpIDogZmFsbGJhY2tSZW5kZXIpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgbm9kZXMgPVxuICAgICAgICAgICAgdGhpcy4kc2xvdHNbbmFtZV0gfHxcbiAgICAgICAgICAgICAgICAoaXNGdW5jdGlvbihmYWxsYmFja1JlbmRlcikgPyBmYWxsYmFja1JlbmRlcigpIDogZmFsbGJhY2tSZW5kZXIpO1xuICAgIH1cbiAgICB2YXIgdGFyZ2V0ID0gcHJvcHMgJiYgcHJvcHMuc2xvdDtcbiAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRjcmVhdGVFbGVtZW50KCd0ZW1wbGF0ZScsIHsgc2xvdDogdGFyZ2V0IH0sIG5vZGVzKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBub2RlcztcbiAgICB9XG59XG5cbi8qKlxuICogUnVudGltZSBoZWxwZXIgZm9yIHJlc29sdmluZyBmaWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVGaWx0ZXIoaWQpIHtcbiAgICByZXR1cm4gcmVzb2x2ZUFzc2V0KHRoaXMuJG9wdGlvbnMsICdmaWx0ZXJzJywgaWQsIHRydWUpIHx8IGlkZW50aXR5O1xufVxuXG5mdW5jdGlvbiBpc0tleU5vdE1hdGNoKGV4cGVjdCwgYWN0dWFsKSB7XG4gICAgaWYgKGlzQXJyYXkoZXhwZWN0KSkge1xuICAgICAgICByZXR1cm4gZXhwZWN0LmluZGV4T2YoYWN0dWFsKSA9PT0gLTE7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gZXhwZWN0ICE9PSBhY3R1YWw7XG4gICAgfVxufVxuLyoqXG4gKiBSdW50aW1lIGhlbHBlciBmb3IgY2hlY2tpbmcga2V5Q29kZXMgZnJvbSBjb25maWcuXG4gKiBleHBvc2VkIGFzIFZ1ZS5wcm90b3R5cGUuX2tcbiAqIHBhc3NpbmcgaW4gZXZlbnRLZXlOYW1lIGFzIGxhc3QgYXJndW1lbnQgc2VwYXJhdGVseSBmb3IgYmFja3dhcmRzIGNvbXBhdFxuICovXG5mdW5jdGlvbiBjaGVja0tleUNvZGVzKGV2ZW50S2V5Q29kZSwga2V5LCBidWlsdEluS2V5Q29kZSwgZXZlbnRLZXlOYW1lLCBidWlsdEluS2V5TmFtZSkge1xuICAgIHZhciBtYXBwZWRLZXlDb2RlID0gY29uZmlnLmtleUNvZGVzW2tleV0gfHwgYnVpbHRJbktleUNvZGU7XG4gICAgaWYgKGJ1aWx0SW5LZXlOYW1lICYmIGV2ZW50S2V5TmFtZSAmJiAhY29uZmlnLmtleUNvZGVzW2tleV0pIHtcbiAgICAgICAgcmV0dXJuIGlzS2V5Tm90TWF0Y2goYnVpbHRJbktleU5hbWUsIGV2ZW50S2V5TmFtZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKG1hcHBlZEtleUNvZGUpIHtcbiAgICAgICAgcmV0dXJuIGlzS2V5Tm90TWF0Y2gobWFwcGVkS2V5Q29kZSwgZXZlbnRLZXlDb2RlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoZXZlbnRLZXlOYW1lKSB7XG4gICAgICAgIHJldHVybiBoeXBoZW5hdGUoZXZlbnRLZXlOYW1lKSAhPT0ga2V5O1xuICAgIH1cbiAgICByZXR1cm4gZXZlbnRLZXlDb2RlID09PSB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUnVudGltZSBoZWxwZXIgZm9yIG1lcmdpbmcgdi1iaW5kPVwib2JqZWN0XCIgaW50byBhIFZOb2RlJ3MgZGF0YS5cbiAqL1xuZnVuY3Rpb24gYmluZE9iamVjdFByb3BzKGRhdGEsIHRhZywgdmFsdWUsIGFzUHJvcCwgaXNTeW5jKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIGlmICghaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgICAgICAgICAgICAgd2FybiQyKCd2LWJpbmQgd2l0aG91dCBhcmd1bWVudCBleHBlY3RzIGFuIE9iamVjdCBvciBBcnJheSB2YWx1ZScsIHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB0b09iamVjdCh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgaGFzaCA9IHZvaWQgMDtcbiAgICAgICAgICAgIHZhciBfbG9vcF8xID0gZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgIGlmIChrZXkgPT09ICdjbGFzcycgfHwga2V5ID09PSAnc3R5bGUnIHx8IGlzUmVzZXJ2ZWRBdHRyaWJ1dGUoa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICBoYXNoID0gZGF0YTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0eXBlID0gZGF0YS5hdHRycyAmJiBkYXRhLmF0dHJzLnR5cGU7XG4gICAgICAgICAgICAgICAgICAgIGhhc2ggPVxuICAgICAgICAgICAgICAgICAgICAgICAgYXNQcm9wIHx8IGNvbmZpZy5tdXN0VXNlUHJvcCh0YWcsIHR5cGUsIGtleSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGRhdGEuZG9tUHJvcHMgfHwgKGRhdGEuZG9tUHJvcHMgPSB7fSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGRhdGEuYXR0cnMgfHwgKGRhdGEuYXR0cnMgPSB7fSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBjYW1lbGl6ZWRLZXkgPSBjYW1lbGl6ZShrZXkpO1xuICAgICAgICAgICAgICAgIHZhciBoeXBoZW5hdGVkS2V5ID0gaHlwaGVuYXRlKGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKCEoY2FtZWxpemVkS2V5IGluIGhhc2gpICYmICEoaHlwaGVuYXRlZEtleSBpbiBoYXNoKSkge1xuICAgICAgICAgICAgICAgICAgICBoYXNoW2tleV0gPSB2YWx1ZVtrZXldO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNTeW5jKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgb24gPSBkYXRhLm9uIHx8IChkYXRhLm9uID0ge30pO1xuICAgICAgICAgICAgICAgICAgICAgICAgb25bXCJ1cGRhdGU6XCIuY29uY2F0KGtleSldID0gZnVuY3Rpb24gKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlW2tleV0gPSAkZXZlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIF9sb29wXzEoa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGF0YTtcbn1cblxuLyoqXG4gKiBSdW50aW1lIGhlbHBlciBmb3IgcmVuZGVyaW5nIHN0YXRpYyB0cmVlcy5cbiAqL1xuZnVuY3Rpb24gcmVuZGVyU3RhdGljKGluZGV4LCBpc0luRm9yKSB7XG4gICAgdmFyIGNhY2hlZCA9IHRoaXMuX3N0YXRpY1RyZWVzIHx8ICh0aGlzLl9zdGF0aWNUcmVlcyA9IFtdKTtcbiAgICB2YXIgdHJlZSA9IGNhY2hlZFtpbmRleF07XG4gICAgLy8gaWYgaGFzIGFscmVhZHktcmVuZGVyZWQgc3RhdGljIHRyZWUgYW5kIG5vdCBpbnNpZGUgdi1mb3IsXG4gICAgLy8gd2UgY2FuIHJldXNlIHRoZSBzYW1lIHRyZWUuXG4gICAgaWYgKHRyZWUgJiYgIWlzSW5Gb3IpIHtcbiAgICAgICAgcmV0dXJuIHRyZWU7XG4gICAgfVxuICAgIC8vIG90aGVyd2lzZSwgcmVuZGVyIGEgZnJlc2ggdHJlZS5cbiAgICB0cmVlID0gY2FjaGVkW2luZGV4XSA9IHRoaXMuJG9wdGlvbnMuc3RhdGljUmVuZGVyRm5zW2luZGV4XS5jYWxsKHRoaXMuX3JlbmRlclByb3h5LCB0aGlzLl9jLCB0aGlzIC8vIGZvciByZW5kZXIgZm5zIGdlbmVyYXRlZCBmb3IgZnVuY3Rpb25hbCBjb21wb25lbnQgdGVtcGxhdGVzXG4gICAgKTtcbiAgICBtYXJrU3RhdGljJDEodHJlZSwgXCJfX3N0YXRpY19fXCIuY29uY2F0KGluZGV4KSwgZmFsc2UpO1xuICAgIHJldHVybiB0cmVlO1xufVxuLyoqXG4gKiBSdW50aW1lIGhlbHBlciBmb3Igdi1vbmNlLlxuICogRWZmZWN0aXZlbHkgaXQgbWVhbnMgbWFya2luZyB0aGUgbm9kZSBhcyBzdGF0aWMgd2l0aCBhIHVuaXF1ZSBrZXkuXG4gKi9cbmZ1bmN0aW9uIG1hcmtPbmNlKHRyZWUsIGluZGV4LCBrZXkpIHtcbiAgICBtYXJrU3RhdGljJDEodHJlZSwgXCJfX29uY2VfX1wiLmNvbmNhdChpbmRleCkuY29uY2F0KGtleSA/IFwiX1wiLmNvbmNhdChrZXkpIDogXCJcIiksIHRydWUpO1xuICAgIHJldHVybiB0cmVlO1xufVxuZnVuY3Rpb24gbWFya1N0YXRpYyQxKHRyZWUsIGtleSwgaXNPbmNlKSB7XG4gICAgaWYgKGlzQXJyYXkodHJlZSkpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0cmVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAodHJlZVtpXSAmJiB0eXBlb2YgdHJlZVtpXSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBtYXJrU3RhdGljTm9kZSh0cmVlW2ldLCBcIlwiLmNvbmNhdChrZXksIFwiX1wiKS5jb25jYXQoaSksIGlzT25jZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIG1hcmtTdGF0aWNOb2RlKHRyZWUsIGtleSwgaXNPbmNlKTtcbiAgICB9XG59XG5mdW5jdGlvbiBtYXJrU3RhdGljTm9kZShub2RlLCBrZXksIGlzT25jZSkge1xuICAgIG5vZGUuaXNTdGF0aWMgPSB0cnVlO1xuICAgIG5vZGUua2V5ID0ga2V5O1xuICAgIG5vZGUuaXNPbmNlID0gaXNPbmNlO1xufVxuXG5mdW5jdGlvbiBiaW5kT2JqZWN0TGlzdGVuZXJzKGRhdGEsIHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIGlmICghaXNQbGFpbk9iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybiQyKCd2LW9uIHdpdGhvdXQgYXJndW1lbnQgZXhwZWN0cyBhbiBPYmplY3QgdmFsdWUnLCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciBvbiA9IChkYXRhLm9uID0gZGF0YS5vbiA/IGV4dGVuZCh7fSwgZGF0YS5vbikgOiB7fSk7XG4gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICAgICAgICAgICAgICB2YXIgZXhpc3RpbmcgPSBvbltrZXldO1xuICAgICAgICAgICAgICAgIHZhciBvdXJzID0gdmFsdWVba2V5XTtcbiAgICAgICAgICAgICAgICBvbltrZXldID0gZXhpc3RpbmcgPyBbXS5jb25jYXQoZXhpc3RpbmcsIG91cnMpIDogb3VycztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGF0YTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZVNjb3BlZFNsb3RzKGZucywgcmVzLCBcbi8vIHRoZSBmb2xsb3dpbmcgYXJlIGFkZGVkIGluIDIuNlxuaGFzRHluYW1pY0tleXMsIGNvbnRlbnRIYXNoS2V5KSB7XG4gICAgcmVzID0gcmVzIHx8IHsgJHN0YWJsZTogIWhhc0R5bmFtaWNLZXlzIH07XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHNsb3QgPSBmbnNbaV07XG4gICAgICAgIGlmIChpc0FycmF5KHNsb3QpKSB7XG4gICAgICAgICAgICByZXNvbHZlU2NvcGVkU2xvdHMoc2xvdCwgcmVzLCBoYXNEeW5hbWljS2V5cyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc2xvdCkge1xuICAgICAgICAgICAgLy8gbWFya2VyIGZvciByZXZlcnNlIHByb3h5aW5nIHYtc2xvdCB3aXRob3V0IHNjb3BlIG9uIHRoaXMuJHNsb3RzXG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgICAgICBpZiAoc2xvdC5wcm94eSkge1xuICAgICAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgICAgICAgICBzbG90LmZuLnByb3h5ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc1tzbG90LmtleV0gPSBzbG90LmZuO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChjb250ZW50SGFzaEtleSkge1xuICAgICAgICByZXMuJGtleSA9IGNvbnRlbnRIYXNoS2V5O1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuXG4vLyBoZWxwZXIgdG8gcHJvY2VzcyBkeW5hbWljIGtleXMgZm9yIGR5bmFtaWMgYXJndW1lbnRzIGluIHYtYmluZCBhbmQgdi1vbi5cbmZ1bmN0aW9uIGJpbmREeW5hbWljS2V5cyhiYXNlT2JqLCB2YWx1ZXMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgICB2YXIga2V5ID0gdmFsdWVzW2ldO1xuICAgICAgICBpZiAodHlwZW9mIGtleSA9PT0gJ3N0cmluZycgJiYga2V5KSB7XG4gICAgICAgICAgICBiYXNlT2JqW3ZhbHVlc1tpXV0gPSB2YWx1ZXNbaSArIDFdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYga2V5ICE9PSAnJyAmJiBrZXkgIT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIG51bGwgaXMgYSBzcGVjaWFsIHZhbHVlIGZvciBleHBsaWNpdGx5IHJlbW92aW5nIGEgYmluZGluZ1xuICAgICAgICAgICAgd2FybiQyKFwiSW52YWxpZCB2YWx1ZSBmb3IgZHluYW1pYyBkaXJlY3RpdmUgYXJndW1lbnQgKGV4cGVjdGVkIHN0cmluZyBvciBudWxsKTogXCIuY29uY2F0KGtleSksIHRoaXMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBiYXNlT2JqO1xufVxuLy8gaGVscGVyIHRvIGR5bmFtaWNhbGx5IGFwcGVuZCBtb2RpZmllciBydW50aW1lIG1hcmtlcnMgdG8gZXZlbnQgbmFtZXMuXG4vLyBlbnN1cmUgb25seSBhcHBlbmQgd2hlbiB2YWx1ZSBpcyBhbHJlYWR5IHN0cmluZywgb3RoZXJ3aXNlIGl0IHdpbGwgYmUgY2FzdFxuLy8gdG8gc3RyaW5nIGFuZCBjYXVzZSB0aGUgdHlwZSBjaGVjayB0byBtaXNzLlxuZnVuY3Rpb24gcHJlcGVuZE1vZGlmaWVyKHZhbHVlLCBzeW1ib2wpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHN5bWJvbCArIHZhbHVlIDogdmFsdWU7XG59XG5cbmZ1bmN0aW9uIGluc3RhbGxSZW5kZXJIZWxwZXJzKHRhcmdldCkge1xuICAgIHRhcmdldC5fbyA9IG1hcmtPbmNlO1xuICAgIHRhcmdldC5fbiA9IHRvTnVtYmVyO1xuICAgIHRhcmdldC5fcyA9IHRvU3RyaW5nO1xuICAgIHRhcmdldC5fbCA9IHJlbmRlckxpc3Q7XG4gICAgdGFyZ2V0Ll90ID0gcmVuZGVyU2xvdDtcbiAgICB0YXJnZXQuX3EgPSBsb29zZUVxdWFsO1xuICAgIHRhcmdldC5faSA9IGxvb3NlSW5kZXhPZjtcbiAgICB0YXJnZXQuX20gPSByZW5kZXJTdGF0aWM7XG4gICAgdGFyZ2V0Ll9mID0gcmVzb2x2ZUZpbHRlcjtcbiAgICB0YXJnZXQuX2sgPSBjaGVja0tleUNvZGVzO1xuICAgIHRhcmdldC5fYiA9IGJpbmRPYmplY3RQcm9wcztcbiAgICB0YXJnZXQuX3YgPSBjcmVhdGVUZXh0Vk5vZGU7XG4gICAgdGFyZ2V0Ll9lID0gY3JlYXRlRW1wdHlWTm9kZTtcbiAgICB0YXJnZXQuX3UgPSByZXNvbHZlU2NvcGVkU2xvdHM7XG4gICAgdGFyZ2V0Ll9nID0gYmluZE9iamVjdExpc3RlbmVycztcbiAgICB0YXJnZXQuX2QgPSBiaW5kRHluYW1pY0tleXM7XG4gICAgdGFyZ2V0Ll9wID0gcHJlcGVuZE1vZGlmaWVyO1xufVxuXG4vKipcbiAqIFJ1bnRpbWUgaGVscGVyIGZvciByZXNvbHZpbmcgcmF3IGNoaWxkcmVuIFZOb2RlcyBpbnRvIGEgc2xvdCBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVTbG90cyhjaGlsZHJlbiwgY29udGV4dCkge1xuICAgIGlmICghY2hpbGRyZW4gfHwgIWNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIHZhciBzbG90cyA9IHt9O1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIHZhciBjaGlsZCA9IGNoaWxkcmVuW2ldO1xuICAgICAgICB2YXIgZGF0YSA9IGNoaWxkLmRhdGE7XG4gICAgICAgIC8vIHJlbW92ZSBzbG90IGF0dHJpYnV0ZSBpZiB0aGUgbm9kZSBpcyByZXNvbHZlZCBhcyBhIFZ1ZSBzbG90IG5vZGVcbiAgICAgICAgaWYgKGRhdGEgJiYgZGF0YS5hdHRycyAmJiBkYXRhLmF0dHJzLnNsb3QpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBkYXRhLmF0dHJzLnNsb3Q7XG4gICAgICAgIH1cbiAgICAgICAgLy8gbmFtZWQgc2xvdHMgc2hvdWxkIG9ubHkgYmUgcmVzcGVjdGVkIGlmIHRoZSB2bm9kZSB3YXMgcmVuZGVyZWQgaW4gdGhlXG4gICAgICAgIC8vIHNhbWUgY29udGV4dC5cbiAgICAgICAgaWYgKChjaGlsZC5jb250ZXh0ID09PSBjb250ZXh0IHx8IGNoaWxkLmZuQ29udGV4dCA9PT0gY29udGV4dCkgJiZcbiAgICAgICAgICAgIGRhdGEgJiZcbiAgICAgICAgICAgIGRhdGEuc2xvdCAhPSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgbmFtZV8xID0gZGF0YS5zbG90O1xuICAgICAgICAgICAgdmFyIHNsb3QgPSBzbG90c1tuYW1lXzFdIHx8IChzbG90c1tuYW1lXzFdID0gW10pO1xuICAgICAgICAgICAgaWYgKGNoaWxkLnRhZyA9PT0gJ3RlbXBsYXRlJykge1xuICAgICAgICAgICAgICAgIHNsb3QucHVzaC5hcHBseShzbG90LCBjaGlsZC5jaGlsZHJlbiB8fCBbXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzbG90LnB1c2goY2hpbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgKHNsb3RzLmRlZmF1bHQgfHwgKHNsb3RzLmRlZmF1bHQgPSBbXSkpLnB1c2goY2hpbGQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIGlnbm9yZSBzbG90cyB0aGF0IGNvbnRhaW5zIG9ubHkgd2hpdGVzcGFjZVxuICAgIGZvciAodmFyIG5hbWVfMiBpbiBzbG90cykge1xuICAgICAgICBpZiAoc2xvdHNbbmFtZV8yXS5ldmVyeShpc1doaXRlc3BhY2UpKSB7XG4gICAgICAgICAgICBkZWxldGUgc2xvdHNbbmFtZV8yXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc2xvdHM7XG59XG5mdW5jdGlvbiBpc1doaXRlc3BhY2Uobm9kZSkge1xuICAgIHJldHVybiAobm9kZS5pc0NvbW1lbnQgJiYgIW5vZGUuYXN5bmNGYWN0b3J5KSB8fCBub2RlLnRleHQgPT09ICcgJztcbn1cblxuZnVuY3Rpb24gaXNBc3luY1BsYWNlaG9sZGVyKG5vZGUpIHtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIG5vdCByZWFsbHkgYm9vbGVhbiB0eXBlXG4gICAgcmV0dXJuIG5vZGUuaXNDb21tZW50ICYmIG5vZGUuYXN5bmNGYWN0b3J5O1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVTY29wZWRTbG90cyhvd25lclZtLCBzY29wZWRTbG90cywgbm9ybWFsU2xvdHMsIHByZXZTY29wZWRTbG90cykge1xuICAgIHZhciByZXM7XG4gICAgdmFyIGhhc05vcm1hbFNsb3RzID0gT2JqZWN0LmtleXMobm9ybWFsU2xvdHMpLmxlbmd0aCA+IDA7XG4gICAgdmFyIGlzU3RhYmxlID0gc2NvcGVkU2xvdHMgPyAhIXNjb3BlZFNsb3RzLiRzdGFibGUgOiAhaGFzTm9ybWFsU2xvdHM7XG4gICAgdmFyIGtleSA9IHNjb3BlZFNsb3RzICYmIHNjb3BlZFNsb3RzLiRrZXk7XG4gICAgaWYgKCFzY29wZWRTbG90cykge1xuICAgICAgICByZXMgPSB7fTtcbiAgICB9XG4gICAgZWxzZSBpZiAoc2NvcGVkU2xvdHMuX25vcm1hbGl6ZWQpIHtcbiAgICAgICAgLy8gZmFzdCBwYXRoIDE6IGNoaWxkIGNvbXBvbmVudCByZS1yZW5kZXIgb25seSwgcGFyZW50IGRpZCBub3QgY2hhbmdlXG4gICAgICAgIHJldHVybiBzY29wZWRTbG90cy5fbm9ybWFsaXplZDtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNTdGFibGUgJiZcbiAgICAgICAgcHJldlNjb3BlZFNsb3RzICYmXG4gICAgICAgIHByZXZTY29wZWRTbG90cyAhPT0gZW1wdHlPYmplY3QgJiZcbiAgICAgICAga2V5ID09PSBwcmV2U2NvcGVkU2xvdHMuJGtleSAmJlxuICAgICAgICAhaGFzTm9ybWFsU2xvdHMgJiZcbiAgICAgICAgIXByZXZTY29wZWRTbG90cy4kaGFzTm9ybWFsKSB7XG4gICAgICAgIC8vIGZhc3QgcGF0aCAyOiBzdGFibGUgc2NvcGVkIHNsb3RzIHcvIG5vIG5vcm1hbCBzbG90cyB0byBwcm94eSxcbiAgICAgICAgLy8gb25seSBuZWVkIHRvIG5vcm1hbGl6ZSBvbmNlXG4gICAgICAgIHJldHVybiBwcmV2U2NvcGVkU2xvdHM7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXMgPSB7fTtcbiAgICAgICAgZm9yICh2YXIga2V5XzEgaW4gc2NvcGVkU2xvdHMpIHtcbiAgICAgICAgICAgIGlmIChzY29wZWRTbG90c1trZXlfMV0gJiYga2V5XzFbMF0gIT09ICckJykge1xuICAgICAgICAgICAgICAgIHJlc1trZXlfMV0gPSBub3JtYWxpemVTY29wZWRTbG90KG93bmVyVm0sIG5vcm1hbFNsb3RzLCBrZXlfMSwgc2NvcGVkU2xvdHNba2V5XzFdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBleHBvc2Ugbm9ybWFsIHNsb3RzIG9uIHNjb3BlZFNsb3RzXG4gICAgZm9yICh2YXIga2V5XzIgaW4gbm9ybWFsU2xvdHMpIHtcbiAgICAgICAgaWYgKCEoa2V5XzIgaW4gcmVzKSkge1xuICAgICAgICAgICAgcmVzW2tleV8yXSA9IHByb3h5Tm9ybWFsU2xvdChub3JtYWxTbG90cywga2V5XzIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIGF2b3JpYXogc2VlbXMgdG8gbW9jayBhIG5vbi1leHRlbnNpYmxlICRzY29wZWRTbG90cyBvYmplY3RcbiAgICAvLyBhbmQgd2hlbiB0aGF0IGlzIHBhc3NlZCBkb3duIHRoaXMgd291bGQgY2F1c2UgYW4gZXJyb3JcbiAgICBpZiAoc2NvcGVkU2xvdHMgJiYgT2JqZWN0LmlzRXh0ZW5zaWJsZShzY29wZWRTbG90cykpIHtcbiAgICAgICAgc2NvcGVkU2xvdHMuX25vcm1hbGl6ZWQgPSByZXM7XG4gICAgfVxuICAgIGRlZihyZXMsICckc3RhYmxlJywgaXNTdGFibGUpO1xuICAgIGRlZihyZXMsICcka2V5Jywga2V5KTtcbiAgICBkZWYocmVzLCAnJGhhc05vcm1hbCcsIGhhc05vcm1hbFNsb3RzKTtcbiAgICByZXR1cm4gcmVzO1xufVxuZnVuY3Rpb24gbm9ybWFsaXplU2NvcGVkU2xvdCh2bSwgbm9ybWFsU2xvdHMsIGtleSwgZm4pIHtcbiAgICB2YXIgbm9ybWFsaXplZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGN1ciA9IGN1cnJlbnRJbnN0YW5jZTtcbiAgICAgICAgc2V0Q3VycmVudEluc3RhbmNlKHZtKTtcbiAgICAgICAgdmFyIHJlcyA9IGFyZ3VtZW50cy5sZW5ndGggPyBmbi5hcHBseShudWxsLCBhcmd1bWVudHMpIDogZm4oe30pO1xuICAgICAgICByZXMgPVxuICAgICAgICAgICAgcmVzICYmIHR5cGVvZiByZXMgPT09ICdvYmplY3QnICYmICFpc0FycmF5KHJlcylcbiAgICAgICAgICAgICAgICA/IFtyZXNdIC8vIHNpbmdsZSB2bm9kZVxuICAgICAgICAgICAgICAgIDogbm9ybWFsaXplQ2hpbGRyZW4ocmVzKTtcbiAgICAgICAgdmFyIHZub2RlID0gcmVzICYmIHJlc1swXTtcbiAgICAgICAgc2V0Q3VycmVudEluc3RhbmNlKGN1cik7XG4gICAgICAgIHJldHVybiByZXMgJiZcbiAgICAgICAgICAgICghdm5vZGUgfHxcbiAgICAgICAgICAgICAgICAocmVzLmxlbmd0aCA9PT0gMSAmJiB2bm9kZS5pc0NvbW1lbnQgJiYgIWlzQXN5bmNQbGFjZWhvbGRlcih2bm9kZSkpKSAvLyAjOTY1OCwgIzEwMzkxXG4gICAgICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICAgICAgOiByZXM7XG4gICAgfTtcbiAgICAvLyB0aGlzIGlzIGEgc2xvdCB1c2luZyB0aGUgbmV3IHYtc2xvdCBzeW50YXggd2l0aG91dCBzY29wZS4gYWx0aG91Z2ggaXQgaXNcbiAgICAvLyBjb21waWxlZCBhcyBhIHNjb3BlZCBzbG90LCByZW5kZXIgZm4gdXNlcnMgd291bGQgZXhwZWN0IGl0IHRvIGJlIHByZXNlbnRcbiAgICAvLyBvbiB0aGlzLiRzbG90cyBiZWNhdXNlIHRoZSB1c2FnZSBpcyBzZW1hbnRpY2FsbHkgYSBub3JtYWwgc2xvdC5cbiAgICBpZiAoZm4ucHJveHkpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG5vcm1hbFNsb3RzLCBrZXksIHtcbiAgICAgICAgICAgIGdldDogbm9ybWFsaXplZCxcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBub3JtYWxpemVkO1xufVxuZnVuY3Rpb24gcHJveHlOb3JtYWxTbG90KHNsb3RzLCBrZXkpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gc2xvdHNba2V5XTsgfTtcbn1cblxuZnVuY3Rpb24gaW5pdFNldHVwKHZtKSB7XG4gICAgdmFyIG9wdGlvbnMgPSB2bS4kb3B0aW9ucztcbiAgICB2YXIgc2V0dXAgPSBvcHRpb25zLnNldHVwO1xuICAgIGlmIChzZXR1cCkge1xuICAgICAgICB2YXIgY3R4ID0gKHZtLl9zZXR1cENvbnRleHQgPSBjcmVhdGVTZXR1cENvbnRleHQodm0pKTtcbiAgICAgICAgc2V0Q3VycmVudEluc3RhbmNlKHZtKTtcbiAgICAgICAgcHVzaFRhcmdldCgpO1xuICAgICAgICB2YXIgc2V0dXBSZXN1bHQgPSBpbnZva2VXaXRoRXJyb3JIYW5kbGluZyhzZXR1cCwgbnVsbCwgW3ZtLl9wcm9wcyB8fCBzaGFsbG93UmVhY3RpdmUoe30pLCBjdHhdLCB2bSwgXCJzZXR1cFwiKTtcbiAgICAgICAgcG9wVGFyZ2V0KCk7XG4gICAgICAgIHNldEN1cnJlbnRJbnN0YW5jZSgpO1xuICAgICAgICBpZiAoaXNGdW5jdGlvbihzZXR1cFJlc3VsdCkpIHtcbiAgICAgICAgICAgIC8vIHJlbmRlciBmdW5jdGlvblxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgb3B0aW9ucy5yZW5kZXIgPSBzZXR1cFJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc09iamVjdChzZXR1cFJlc3VsdCkpIHtcbiAgICAgICAgICAgIC8vIGJpbmRpbmdzXG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBzZXR1cFJlc3VsdCBpbnN0YW5jZW9mIFZOb2RlKSB7XG4gICAgICAgICAgICAgICAgd2FybiQyKFwic2V0dXAoKSBzaG91bGQgbm90IHJldHVybiBWTm9kZXMgZGlyZWN0bHkgLSBcIiArXG4gICAgICAgICAgICAgICAgICAgIFwicmV0dXJuIGEgcmVuZGVyIGZ1bmN0aW9uIGluc3RlYWQuXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdm0uX3NldHVwU3RhdGUgPSBzZXR1cFJlc3VsdDtcbiAgICAgICAgICAgIC8vIF9fc2ZjIGluZGljYXRlcyBjb21waWxlZCBiaW5kaW5ncyBmcm9tIDxzY3JpcHQgc2V0dXA+XG4gICAgICAgICAgICBpZiAoIXNldHVwUmVzdWx0Ll9fc2ZjKSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHNldHVwUmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNSZXNlcnZlZChrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm94eVdpdGhSZWZVbndyYXAodm0sIHNldHVwUmVzdWx0LCBrZXkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdhcm4kMihcIkF2b2lkIHVzaW5nIHZhcmlhYmxlcyB0aGF0IHN0YXJ0IHdpdGggXyBvciAkIGluIHNldHVwKCkuXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gZXhwb3NlZCBmb3IgY29tcGlsZWQgcmVuZGVyIGZuXG4gICAgICAgICAgICAgICAgdmFyIHByb3h5ID0gKHZtLl9zZXR1cFByb3h5ID0ge30pO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBzZXR1cFJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ICE9PSAnX19zZmMnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm94eVdpdGhSZWZVbndyYXAocHJveHksIHNldHVwUmVzdWx0LCBrZXkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgc2V0dXBSZXN1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgd2FybiQyKFwic2V0dXAoKSBzaG91bGQgcmV0dXJuIGFuIG9iamVjdC4gUmVjZWl2ZWQ6IFwiLmNvbmNhdChzZXR1cFJlc3VsdCA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiBzZXR1cFJlc3VsdCkpO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gY3JlYXRlU2V0dXBDb250ZXh0KHZtKSB7XG4gICAgdmFyIGV4cG9zZUNhbGxlZCA9IGZhbHNlO1xuICAgIHJldHVybiB7XG4gICAgICAgIGdldCBhdHRycygpIHtcbiAgICAgICAgICAgIGlmICghdm0uX2F0dHJzUHJveHkpIHtcbiAgICAgICAgICAgICAgICB2YXIgcHJveHkgPSAodm0uX2F0dHJzUHJveHkgPSB7fSk7XG4gICAgICAgICAgICAgICAgZGVmKHByb3h5LCAnX3ZfYXR0cl9wcm94eScsIHRydWUpO1xuICAgICAgICAgICAgICAgIHN5bmNTZXR1cFByb3h5KHByb3h5LCB2bS4kYXR0cnMsIGVtcHR5T2JqZWN0LCB2bSwgJyRhdHRycycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHZtLl9hdHRyc1Byb3h5O1xuICAgICAgICB9LFxuICAgICAgICBnZXQgbGlzdGVuZXJzKCkge1xuICAgICAgICAgICAgaWYgKCF2bS5fbGlzdGVuZXJzUHJveHkpIHtcbiAgICAgICAgICAgICAgICB2YXIgcHJveHkgPSAodm0uX2xpc3RlbmVyc1Byb3h5ID0ge30pO1xuICAgICAgICAgICAgICAgIHN5bmNTZXR1cFByb3h5KHByb3h5LCB2bS4kbGlzdGVuZXJzLCBlbXB0eU9iamVjdCwgdm0sICckbGlzdGVuZXJzJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdm0uX2xpc3RlbmVyc1Byb3h5O1xuICAgICAgICB9LFxuICAgICAgICBnZXQgc2xvdHMoKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5pdFNsb3RzUHJveHkodm0pO1xuICAgICAgICB9LFxuICAgICAgICBlbWl0OiBiaW5kJDEodm0uJGVtaXQsIHZtKSxcbiAgICAgICAgZXhwb3NlOiBmdW5jdGlvbiAoZXhwb3NlZCkge1xuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXhwb3NlQ2FsbGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHdhcm4kMihcImV4cG9zZSgpIHNob3VsZCBiZSBjYWxsZWQgb25seSBvbmNlIHBlciBzZXR1cCgpLlwiLCB2bSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGV4cG9zZUNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXhwb3NlZCkge1xuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKGV4cG9zZWQpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJveHlXaXRoUmVmVW53cmFwKHZtLCBleHBvc2VkLCBrZXkpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbn1cbmZ1bmN0aW9uIHN5bmNTZXR1cFByb3h5KHRvLCBmcm9tLCBwcmV2LCBpbnN0YW5jZSwgdHlwZSkge1xuICAgIHZhciBjaGFuZ2VkID0gZmFsc2U7XG4gICAgZm9yICh2YXIga2V5IGluIGZyb20pIHtcbiAgICAgICAgaWYgKCEoa2V5IGluIHRvKSkge1xuICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgICAgICAgICBkZWZpbmVQcm94eUF0dHIodG8sIGtleSwgaW5zdGFuY2UsIHR5cGUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGZyb21ba2V5XSAhPT0gcHJldltrZXldKSB7XG4gICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmb3IgKHZhciBrZXkgaW4gdG8pIHtcbiAgICAgICAgaWYgKCEoa2V5IGluIGZyb20pKSB7XG4gICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIGRlbGV0ZSB0b1trZXldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjaGFuZ2VkO1xufVxuZnVuY3Rpb24gZGVmaW5lUHJveHlBdHRyKHByb3h5LCBrZXksIGluc3RhbmNlLCB0eXBlKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3h5LCBrZXksIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZVt0eXBlXVtrZXldO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5mdW5jdGlvbiBpbml0U2xvdHNQcm94eSh2bSkge1xuICAgIGlmICghdm0uX3Nsb3RzUHJveHkpIHtcbiAgICAgICAgc3luY1NldHVwU2xvdHMoKHZtLl9zbG90c1Byb3h5ID0ge30pLCB2bS4kc2NvcGVkU2xvdHMpO1xuICAgIH1cbiAgICByZXR1cm4gdm0uX3Nsb3RzUHJveHk7XG59XG5mdW5jdGlvbiBzeW5jU2V0dXBTbG90cyh0bywgZnJvbSkge1xuICAgIGZvciAodmFyIGtleSBpbiBmcm9tKSB7XG4gICAgICAgIHRvW2tleV0gPSBmcm9tW2tleV07XG4gICAgfVxuICAgIGZvciAodmFyIGtleSBpbiB0bykge1xuICAgICAgICBpZiAoIShrZXkgaW4gZnJvbSkpIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0b1trZXldO1xuICAgICAgICB9XG4gICAgfVxufVxuLyoqXG4gKiBAaW50ZXJuYWwgdXNlIG1hbnVhbCB0eXBlIGRlZiBiZWNhdXNlIHB1YmxpYyBzZXR1cCBjb250ZXh0IHR5cGUgcmVsaWVzIG9uXG4gKiBsZWdhY3kgVk5vZGUgdHlwZXNcbiAqL1xuZnVuY3Rpb24gdXNlU2xvdHMoKSB7XG4gICAgcmV0dXJuIGdldENvbnRleHQoKS5zbG90cztcbn1cbi8qKlxuICogQGludGVybmFsIHVzZSBtYW51YWwgdHlwZSBkZWYgYmVjYXVzZSBwdWJsaWMgc2V0dXAgY29udGV4dCB0eXBlIHJlbGllcyBvblxuICogbGVnYWN5IFZOb2RlIHR5cGVzXG4gKi9cbmZ1bmN0aW9uIHVzZUF0dHJzKCkge1xuICAgIHJldHVybiBnZXRDb250ZXh0KCkuYXR0cnM7XG59XG4vKipcbiAqIFZ1ZSAyIG9ubHlcbiAqIEBpbnRlcm5hbCB1c2UgbWFudWFsIHR5cGUgZGVmIGJlY2F1c2UgcHVibGljIHNldHVwIGNvbnRleHQgdHlwZSByZWxpZXMgb25cbiAqIGxlZ2FjeSBWTm9kZSB0eXBlc1xuICovXG5mdW5jdGlvbiB1c2VMaXN0ZW5lcnMoKSB7XG4gICAgcmV0dXJuIGdldENvbnRleHQoKS5saXN0ZW5lcnM7XG59XG5mdW5jdGlvbiBnZXRDb250ZXh0KCkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICFjdXJyZW50SW5zdGFuY2UpIHtcbiAgICAgICAgd2FybiQyKFwidXNlQ29udGV4dCgpIGNhbGxlZCB3aXRob3V0IGFjdGl2ZSBpbnN0YW5jZS5cIik7XG4gICAgfVxuICAgIHZhciB2bSA9IGN1cnJlbnRJbnN0YW5jZTtcbiAgICByZXR1cm4gdm0uX3NldHVwQ29udGV4dCB8fCAodm0uX3NldHVwQ29udGV4dCA9IGNyZWF0ZVNldHVwQ29udGV4dCh2bSkpO1xufVxuLyoqXG4gKiBSdW50aW1lIGhlbHBlciBmb3IgbWVyZ2luZyBkZWZhdWx0IGRlY2xhcmF0aW9ucy4gSW1wb3J0ZWQgYnkgY29tcGlsZWQgY29kZVxuICogb25seS5cbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBtZXJnZURlZmF1bHRzKHJhdywgZGVmYXVsdHMpIHtcbiAgICB2YXIgcHJvcHMgPSBpc0FycmF5KHJhdylcbiAgICAgICAgPyByYXcucmVkdWNlKGZ1bmN0aW9uIChub3JtYWxpemVkLCBwKSB7IHJldHVybiAoKG5vcm1hbGl6ZWRbcF0gPSB7fSksIG5vcm1hbGl6ZWQpOyB9LCB7fSlcbiAgICAgICAgOiByYXc7XG4gICAgZm9yICh2YXIga2V5IGluIGRlZmF1bHRzKSB7XG4gICAgICAgIHZhciBvcHQgPSBwcm9wc1trZXldO1xuICAgICAgICBpZiAob3B0KSB7XG4gICAgICAgICAgICBpZiAoaXNBcnJheShvcHQpIHx8IGlzRnVuY3Rpb24ob3B0KSkge1xuICAgICAgICAgICAgICAgIHByb3BzW2tleV0gPSB7IHR5cGU6IG9wdCwgZGVmYXVsdDogZGVmYXVsdHNba2V5XSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgb3B0LmRlZmF1bHQgPSBkZWZhdWx0c1trZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG9wdCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcHJvcHNba2V5XSA9IHsgZGVmYXVsdDogZGVmYXVsdHNba2V5XSB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgIHdhcm4kMihcInByb3BzIGRlZmF1bHQga2V5IFxcXCJcIi5jb25jYXQoa2V5LCBcIlxcXCIgaGFzIG5vIGNvcnJlc3BvbmRpbmcgZGVjbGFyYXRpb24uXCIpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcHJvcHM7XG59XG5cbmZ1bmN0aW9uIGluaXRSZW5kZXIodm0pIHtcbiAgICB2bS5fdm5vZGUgPSBudWxsOyAvLyB0aGUgcm9vdCBvZiB0aGUgY2hpbGQgdHJlZVxuICAgIHZtLl9zdGF0aWNUcmVlcyA9IG51bGw7IC8vIHYtb25jZSBjYWNoZWQgdHJlZXNcbiAgICB2YXIgb3B0aW9ucyA9IHZtLiRvcHRpb25zO1xuICAgIHZhciBwYXJlbnRWbm9kZSA9ICh2bS4kdm5vZGUgPSBvcHRpb25zLl9wYXJlbnRWbm9kZSk7IC8vIHRoZSBwbGFjZWhvbGRlciBub2RlIGluIHBhcmVudCB0cmVlXG4gICAgdmFyIHJlbmRlckNvbnRleHQgPSBwYXJlbnRWbm9kZSAmJiBwYXJlbnRWbm9kZS5jb250ZXh0O1xuICAgIHZtLiRzbG90cyA9IHJlc29sdmVTbG90cyhvcHRpb25zLl9yZW5kZXJDaGlsZHJlbiwgcmVuZGVyQ29udGV4dCk7XG4gICAgdm0uJHNjb3BlZFNsb3RzID0gcGFyZW50Vm5vZGVcbiAgICAgICAgPyBub3JtYWxpemVTY29wZWRTbG90cyh2bS4kcGFyZW50LCBwYXJlbnRWbm9kZS5kYXRhLnNjb3BlZFNsb3RzLCB2bS4kc2xvdHMpXG4gICAgICAgIDogZW1wdHlPYmplY3Q7XG4gICAgLy8gYmluZCB0aGUgY3JlYXRlRWxlbWVudCBmbiB0byB0aGlzIGluc3RhbmNlXG4gICAgLy8gc28gdGhhdCB3ZSBnZXQgcHJvcGVyIHJlbmRlciBjb250ZXh0IGluc2lkZSBpdC5cbiAgICAvLyBhcmdzIG9yZGVyOiB0YWcsIGRhdGEsIGNoaWxkcmVuLCBub3JtYWxpemF0aW9uVHlwZSwgYWx3YXlzTm9ybWFsaXplXG4gICAgLy8gaW50ZXJuYWwgdmVyc2lvbiBpcyB1c2VkIGJ5IHJlbmRlciBmdW5jdGlvbnMgY29tcGlsZWQgZnJvbSB0ZW1wbGF0ZXNcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgdm0uX2MgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCkgeyByZXR1cm4gY3JlYXRlRWxlbWVudCQxKHZtLCBhLCBiLCBjLCBkLCBmYWxzZSk7IH07XG4gICAgLy8gbm9ybWFsaXphdGlvbiBpcyBhbHdheXMgYXBwbGllZCBmb3IgdGhlIHB1YmxpYyB2ZXJzaW9uLCB1c2VkIGluXG4gICAgLy8gdXNlci13cml0dGVuIHJlbmRlciBmdW5jdGlvbnMuXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgIHZtLiRjcmVhdGVFbGVtZW50ID0gZnVuY3Rpb24gKGEsIGIsIGMsIGQpIHsgcmV0dXJuIGNyZWF0ZUVsZW1lbnQkMSh2bSwgYSwgYiwgYywgZCwgdHJ1ZSk7IH07XG4gICAgLy8gJGF0dHJzICYgJGxpc3RlbmVycyBhcmUgZXhwb3NlZCBmb3IgZWFzaWVyIEhPQyBjcmVhdGlvbi5cbiAgICAvLyB0aGV5IG5lZWQgdG8gYmUgcmVhY3RpdmUgc28gdGhhdCBIT0NzIHVzaW5nIHRoZW0gYXJlIGFsd2F5cyB1cGRhdGVkXG4gICAgdmFyIHBhcmVudERhdGEgPSBwYXJlbnRWbm9kZSAmJiBwYXJlbnRWbm9kZS5kYXRhO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgZGVmaW5lUmVhY3RpdmUodm0sICckYXR0cnMnLCAocGFyZW50RGF0YSAmJiBwYXJlbnREYXRhLmF0dHJzKSB8fCBlbXB0eU9iamVjdCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgIWlzVXBkYXRpbmdDaGlsZENvbXBvbmVudCAmJiB3YXJuJDIoXCIkYXR0cnMgaXMgcmVhZG9ubHkuXCIsIHZtKTtcbiAgICAgICAgfSwgdHJ1ZSk7XG4gICAgICAgIGRlZmluZVJlYWN0aXZlKHZtLCAnJGxpc3RlbmVycycsIG9wdGlvbnMuX3BhcmVudExpc3RlbmVycyB8fCBlbXB0eU9iamVjdCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgIWlzVXBkYXRpbmdDaGlsZENvbXBvbmVudCAmJiB3YXJuJDIoXCIkbGlzdGVuZXJzIGlzIHJlYWRvbmx5LlwiLCB2bSk7XG4gICAgICAgIH0sIHRydWUpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZGVmaW5lUmVhY3RpdmUodm0sICckYXR0cnMnLCAocGFyZW50RGF0YSAmJiBwYXJlbnREYXRhLmF0dHJzKSB8fCBlbXB0eU9iamVjdCwgbnVsbCwgdHJ1ZSk7XG4gICAgICAgIGRlZmluZVJlYWN0aXZlKHZtLCAnJGxpc3RlbmVycycsIG9wdGlvbnMuX3BhcmVudExpc3RlbmVycyB8fCBlbXB0eU9iamVjdCwgbnVsbCwgdHJ1ZSk7XG4gICAgfVxufVxudmFyIGN1cnJlbnRSZW5kZXJpbmdJbnN0YW5jZSA9IG51bGw7XG5mdW5jdGlvbiByZW5kZXJNaXhpbihWdWUpIHtcbiAgICAvLyBpbnN0YWxsIHJ1bnRpbWUgY29udmVuaWVuY2UgaGVscGVyc1xuICAgIGluc3RhbGxSZW5kZXJIZWxwZXJzKFZ1ZS5wcm90b3R5cGUpO1xuICAgIFZ1ZS5wcm90b3R5cGUuJG5leHRUaWNrID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBuZXh0VGljayhmbiwgdGhpcyk7XG4gICAgfTtcbiAgICBWdWUucHJvdG90eXBlLl9yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB2bSA9IHRoaXM7XG4gICAgICAgIHZhciBfYSA9IHZtLiRvcHRpb25zLCByZW5kZXIgPSBfYS5yZW5kZXIsIF9wYXJlbnRWbm9kZSA9IF9hLl9wYXJlbnRWbm9kZTtcbiAgICAgICAgaWYgKF9wYXJlbnRWbm9kZSAmJiB2bS5faXNNb3VudGVkKSB7XG4gICAgICAgICAgICB2bS4kc2NvcGVkU2xvdHMgPSBub3JtYWxpemVTY29wZWRTbG90cyh2bS4kcGFyZW50LCBfcGFyZW50Vm5vZGUuZGF0YS5zY29wZWRTbG90cywgdm0uJHNsb3RzLCB2bS4kc2NvcGVkU2xvdHMpO1xuICAgICAgICAgICAgaWYgKHZtLl9zbG90c1Byb3h5KSB7XG4gICAgICAgICAgICAgICAgc3luY1NldHVwU2xvdHModm0uX3Nsb3RzUHJveHksIHZtLiRzY29wZWRTbG90cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gc2V0IHBhcmVudCB2bm9kZS4gdGhpcyBhbGxvd3MgcmVuZGVyIGZ1bmN0aW9ucyB0byBoYXZlIGFjY2Vzc1xuICAgICAgICAvLyB0byB0aGUgZGF0YSBvbiB0aGUgcGxhY2Vob2xkZXIgbm9kZS5cbiAgICAgICAgdm0uJHZub2RlID0gX3BhcmVudFZub2RlO1xuICAgICAgICAvLyByZW5kZXIgc2VsZlxuICAgICAgICB2YXIgdm5vZGU7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBUaGVyZSdzIG5vIG5lZWQgdG8gbWFpbnRhaW4gYSBzdGFjayBiZWNhdXNlIGFsbCByZW5kZXIgZm5zIGFyZSBjYWxsZWRcbiAgICAgICAgICAgIC8vIHNlcGFyYXRlbHkgZnJvbSBvbmUgYW5vdGhlci4gTmVzdGVkIGNvbXBvbmVudCdzIHJlbmRlciBmbnMgYXJlIGNhbGxlZFxuICAgICAgICAgICAgLy8gd2hlbiBwYXJlbnQgY29tcG9uZW50IGlzIHBhdGNoZWQuXG4gICAgICAgICAgICBzZXRDdXJyZW50SW5zdGFuY2Uodm0pO1xuICAgICAgICAgICAgY3VycmVudFJlbmRlcmluZ0luc3RhbmNlID0gdm07XG4gICAgICAgICAgICB2bm9kZSA9IHJlbmRlci5jYWxsKHZtLl9yZW5kZXJQcm94eSwgdm0uJGNyZWF0ZUVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBoYW5kbGVFcnJvcihlLCB2bSwgXCJyZW5kZXJcIik7XG4gICAgICAgICAgICAvLyByZXR1cm4gZXJyb3IgcmVuZGVyIHJlc3VsdCxcbiAgICAgICAgICAgIC8vIG9yIHByZXZpb3VzIHZub2RlIHRvIHByZXZlbnQgcmVuZGVyIGVycm9yIGNhdXNpbmcgYmxhbmsgY29tcG9uZW50XG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgdm0uJG9wdGlvbnMucmVuZGVyRXJyb3IpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB2bm9kZSA9IHZtLiRvcHRpb25zLnJlbmRlckVycm9yLmNhbGwodm0uX3JlbmRlclByb3h5LCB2bS4kY3JlYXRlRWxlbWVudCwgZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZUVycm9yKGUsIHZtLCBcInJlbmRlckVycm9yXCIpO1xuICAgICAgICAgICAgICAgICAgICB2bm9kZSA9IHZtLl92bm9kZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB2bm9kZSA9IHZtLl92bm9kZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIGN1cnJlbnRSZW5kZXJpbmdJbnN0YW5jZSA9IG51bGw7XG4gICAgICAgICAgICBzZXRDdXJyZW50SW5zdGFuY2UoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiB0aGUgcmV0dXJuZWQgYXJyYXkgY29udGFpbnMgb25seSBhIHNpbmdsZSBub2RlLCBhbGxvdyBpdFxuICAgICAgICBpZiAoaXNBcnJheSh2bm9kZSkgJiYgdm5vZGUubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICB2bm9kZSA9IHZub2RlWzBdO1xuICAgICAgICB9XG4gICAgICAgIC8vIHJldHVybiBlbXB0eSB2bm9kZSBpbiBjYXNlIHRoZSByZW5kZXIgZnVuY3Rpb24gZXJyb3JlZCBvdXRcbiAgICAgICAgaWYgKCEodm5vZGUgaW5zdGFuY2VvZiBWTm9kZSkpIHtcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGlzQXJyYXkodm5vZGUpKSB7XG4gICAgICAgICAgICAgICAgd2FybiQyKCdNdWx0aXBsZSByb290IG5vZGVzIHJldHVybmVkIGZyb20gcmVuZGVyIGZ1bmN0aW9uLiBSZW5kZXIgZnVuY3Rpb24gJyArXG4gICAgICAgICAgICAgICAgICAgICdzaG91bGQgcmV0dXJuIGEgc2luZ2xlIHJvb3Qgbm9kZS4nLCB2bSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2bm9kZSA9IGNyZWF0ZUVtcHR5Vk5vZGUoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBzZXQgcGFyZW50XG4gICAgICAgIHZub2RlLnBhcmVudCA9IF9wYXJlbnRWbm9kZTtcbiAgICAgICAgcmV0dXJuIHZub2RlO1xuICAgIH07XG59XG5cbmZ1bmN0aW9uIGVuc3VyZUN0b3IoY29tcCwgYmFzZSkge1xuICAgIGlmIChjb21wLl9fZXNNb2R1bGUgfHwgKGhhc1N5bWJvbCAmJiBjb21wW1N5bWJvbC50b1N0cmluZ1RhZ10gPT09ICdNb2R1bGUnKSkge1xuICAgICAgICBjb21wID0gY29tcC5kZWZhdWx0O1xuICAgIH1cbiAgICByZXR1cm4gaXNPYmplY3QoY29tcCkgPyBiYXNlLmV4dGVuZChjb21wKSA6IGNvbXA7XG59XG5mdW5jdGlvbiBjcmVhdGVBc3luY1BsYWNlaG9sZGVyKGZhY3RvcnksIGRhdGEsIGNvbnRleHQsIGNoaWxkcmVuLCB0YWcpIHtcbiAgICB2YXIgbm9kZSA9IGNyZWF0ZUVtcHR5Vk5vZGUoKTtcbiAgICBub2RlLmFzeW5jRmFjdG9yeSA9IGZhY3Rvcnk7XG4gICAgbm9kZS5hc3luY01ldGEgPSB7IGRhdGE6IGRhdGEsIGNvbnRleHQ6IGNvbnRleHQsIGNoaWxkcmVuOiBjaGlsZHJlbiwgdGFnOiB0YWcgfTtcbiAgICByZXR1cm4gbm9kZTtcbn1cbmZ1bmN0aW9uIHJlc29sdmVBc3luY0NvbXBvbmVudChmYWN0b3J5LCBiYXNlQ3Rvcikge1xuICAgIGlmIChpc1RydWUoZmFjdG9yeS5lcnJvcikgJiYgaXNEZWYoZmFjdG9yeS5lcnJvckNvbXApKSB7XG4gICAgICAgIHJldHVybiBmYWN0b3J5LmVycm9yQ29tcDtcbiAgICB9XG4gICAgaWYgKGlzRGVmKGZhY3RvcnkucmVzb2x2ZWQpKSB7XG4gICAgICAgIHJldHVybiBmYWN0b3J5LnJlc29sdmVkO1xuICAgIH1cbiAgICB2YXIgb3duZXIgPSBjdXJyZW50UmVuZGVyaW5nSW5zdGFuY2U7XG4gICAgaWYgKG93bmVyICYmIGlzRGVmKGZhY3Rvcnkub3duZXJzKSAmJiBmYWN0b3J5Lm93bmVycy5pbmRleE9mKG93bmVyKSA9PT0gLTEpIHtcbiAgICAgICAgLy8gYWxyZWFkeSBwZW5kaW5nXG4gICAgICAgIGZhY3Rvcnkub3duZXJzLnB1c2gob3duZXIpO1xuICAgIH1cbiAgICBpZiAoaXNUcnVlKGZhY3RvcnkubG9hZGluZykgJiYgaXNEZWYoZmFjdG9yeS5sb2FkaW5nQ29tcCkpIHtcbiAgICAgICAgcmV0dXJuIGZhY3RvcnkubG9hZGluZ0NvbXA7XG4gICAgfVxuICAgIGlmIChvd25lciAmJiAhaXNEZWYoZmFjdG9yeS5vd25lcnMpKSB7XG4gICAgICAgIHZhciBvd25lcnNfMSA9IChmYWN0b3J5Lm93bmVycyA9IFtvd25lcl0pO1xuICAgICAgICB2YXIgc3luY18xID0gdHJ1ZTtcbiAgICAgICAgdmFyIHRpbWVyTG9hZGluZ18xID0gbnVsbDtcbiAgICAgICAgdmFyIHRpbWVyVGltZW91dF8xID0gbnVsbDtcbiAgICAgICAgb3duZXIuJG9uKCdob29rOmRlc3Ryb3llZCcsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlbW92ZSQyKG93bmVyc18xLCBvd25lcik7IH0pO1xuICAgICAgICB2YXIgZm9yY2VSZW5kZXJfMSA9IGZ1bmN0aW9uIChyZW5kZXJDb21wbGV0ZWQpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gb3duZXJzXzEubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgb3duZXJzXzFbaV0uJGZvcmNlVXBkYXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVuZGVyQ29tcGxldGVkKSB7XG4gICAgICAgICAgICAgICAgb3duZXJzXzEubGVuZ3RoID0gMDtcbiAgICAgICAgICAgICAgICBpZiAodGltZXJMb2FkaW5nXzEgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyTG9hZGluZ18xKTtcbiAgICAgICAgICAgICAgICAgICAgdGltZXJMb2FkaW5nXzEgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGltZXJUaW1lb3V0XzEgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyVGltZW91dF8xKTtcbiAgICAgICAgICAgICAgICAgICAgdGltZXJUaW1lb3V0XzEgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdmFyIHJlc29sdmUgPSBvbmNlKGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgIC8vIGNhY2hlIHJlc29sdmVkXG4gICAgICAgICAgICBmYWN0b3J5LnJlc29sdmVkID0gZW5zdXJlQ3RvcihyZXMsIGJhc2VDdG9yKTtcbiAgICAgICAgICAgIC8vIGludm9rZSBjYWxsYmFja3Mgb25seSBpZiB0aGlzIGlzIG5vdCBhIHN5bmNocm9ub3VzIHJlc29sdmVcbiAgICAgICAgICAgIC8vIChhc3luYyByZXNvbHZlcyBhcmUgc2hpbW1lZCBhcyBzeW5jaHJvbm91cyBkdXJpbmcgU1NSKVxuICAgICAgICAgICAgaWYgKCFzeW5jXzEpIHtcbiAgICAgICAgICAgICAgICBmb3JjZVJlbmRlcl8xKHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgb3duZXJzXzEubGVuZ3RoID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHZhciByZWplY3RfMSA9IG9uY2UoZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgICAgICAgICAgICAgIHdhcm4kMihcIkZhaWxlZCB0byByZXNvbHZlIGFzeW5jIGNvbXBvbmVudDogXCIuY29uY2F0KFN0cmluZyhmYWN0b3J5KSkgK1xuICAgICAgICAgICAgICAgICAgICAocmVhc29uID8gXCJcXG5SZWFzb246IFwiLmNvbmNhdChyZWFzb24pIDogJycpKTtcbiAgICAgICAgICAgIGlmIChpc0RlZihmYWN0b3J5LmVycm9yQ29tcCkpIHtcbiAgICAgICAgICAgICAgICBmYWN0b3J5LmVycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBmb3JjZVJlbmRlcl8xKHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdmFyIHJlc18xID0gZmFjdG9yeShyZXNvbHZlLCByZWplY3RfMSk7XG4gICAgICAgIGlmIChpc09iamVjdChyZXNfMSkpIHtcbiAgICAgICAgICAgIGlmIChpc1Byb21pc2UocmVzXzEpKSB7XG4gICAgICAgICAgICAgICAgLy8gKCkgPT4gUHJvbWlzZVxuICAgICAgICAgICAgICAgIGlmIChpc1VuZGVmKGZhY3RvcnkucmVzb2x2ZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc18xLnRoZW4ocmVzb2x2ZSwgcmVqZWN0XzEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGlzUHJvbWlzZShyZXNfMS5jb21wb25lbnQpKSB7XG4gICAgICAgICAgICAgICAgcmVzXzEuY29tcG9uZW50LnRoZW4ocmVzb2x2ZSwgcmVqZWN0XzEpO1xuICAgICAgICAgICAgICAgIGlmIChpc0RlZihyZXNfMS5lcnJvcikpIHtcbiAgICAgICAgICAgICAgICAgICAgZmFjdG9yeS5lcnJvckNvbXAgPSBlbnN1cmVDdG9yKHJlc18xLmVycm9yLCBiYXNlQ3Rvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpc0RlZihyZXNfMS5sb2FkaW5nKSkge1xuICAgICAgICAgICAgICAgICAgICBmYWN0b3J5LmxvYWRpbmdDb21wID0gZW5zdXJlQ3RvcihyZXNfMS5sb2FkaW5nLCBiYXNlQ3Rvcik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNfMS5kZWxheSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmFjdG9yeS5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgTm9kZUpTIHRpbWVvdXQgdHlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgdGltZXJMb2FkaW5nXzEgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lckxvYWRpbmdfMSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzVW5kZWYoZmFjdG9yeS5yZXNvbHZlZCkgJiYgaXNVbmRlZihmYWN0b3J5LmVycm9yKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3J5LmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JjZVJlbmRlcl8xKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCByZXNfMS5kZWxheSB8fCAyMDApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpc0RlZihyZXNfMS50aW1lb3V0KSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIE5vZGVKUyB0aW1lb3V0IHR5cGVcbiAgICAgICAgICAgICAgICAgICAgdGltZXJUaW1lb3V0XzEgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVyVGltZW91dF8xID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1VuZGVmKGZhY3RvcnkucmVzb2x2ZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0XzEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IFwidGltZW91dCAoXCIuY29uY2F0KHJlc18xLnRpbWVvdXQsIFwibXMpXCIpIDogbnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sIHJlc18xLnRpbWVvdXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzeW5jXzEgPSBmYWxzZTtcbiAgICAgICAgLy8gcmV0dXJuIGluIGNhc2UgcmVzb2x2ZWQgc3luY2hyb25vdXNseVxuICAgICAgICByZXR1cm4gZmFjdG9yeS5sb2FkaW5nID8gZmFjdG9yeS5sb2FkaW5nQ29tcCA6IGZhY3RvcnkucmVzb2x2ZWQ7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBnZXRGaXJzdENvbXBvbmVudENoaWxkKGNoaWxkcmVuKSB7XG4gICAgaWYgKGlzQXJyYXkoY2hpbGRyZW4pKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBjID0gY2hpbGRyZW5baV07XG4gICAgICAgICAgICBpZiAoaXNEZWYoYykgJiYgKGlzRGVmKGMuY29tcG9uZW50T3B0aW9ucykgfHwgaXNBc3luY1BsYWNlaG9sZGVyKGMpKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiBpbml0RXZlbnRzKHZtKSB7XG4gICAgdm0uX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdm0uX2hhc0hvb2tFdmVudCA9IGZhbHNlO1xuICAgIC8vIGluaXQgcGFyZW50IGF0dGFjaGVkIGV2ZW50c1xuICAgIHZhciBsaXN0ZW5lcnMgPSB2bS4kb3B0aW9ucy5fcGFyZW50TGlzdGVuZXJzO1xuICAgIGlmIChsaXN0ZW5lcnMpIHtcbiAgICAgICAgdXBkYXRlQ29tcG9uZW50TGlzdGVuZXJzKHZtLCBsaXN0ZW5lcnMpO1xuICAgIH1cbn1cbnZhciB0YXJnZXQkMTtcbmZ1bmN0aW9uIGFkZCQxKGV2ZW50LCBmbikge1xuICAgIHRhcmdldCQxLiRvbihldmVudCwgZm4pO1xufVxuZnVuY3Rpb24gcmVtb3ZlJDEoZXZlbnQsIGZuKSB7XG4gICAgdGFyZ2V0JDEuJG9mZihldmVudCwgZm4pO1xufVxuZnVuY3Rpb24gY3JlYXRlT25jZUhhbmRsZXIkMShldmVudCwgZm4pIHtcbiAgICB2YXIgX3RhcmdldCA9IHRhcmdldCQxO1xuICAgIHJldHVybiBmdW5jdGlvbiBvbmNlSGFuZGxlcigpIHtcbiAgICAgICAgdmFyIHJlcyA9IGZuLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgIGlmIChyZXMgIT09IG51bGwpIHtcbiAgICAgICAgICAgIF90YXJnZXQuJG9mZihldmVudCwgb25jZUhhbmRsZXIpO1xuICAgICAgICB9XG4gICAgfTtcbn1cbmZ1bmN0aW9uIHVwZGF0ZUNvbXBvbmVudExpc3RlbmVycyh2bSwgbGlzdGVuZXJzLCBvbGRMaXN0ZW5lcnMpIHtcbiAgICB0YXJnZXQkMSA9IHZtO1xuICAgIHVwZGF0ZUxpc3RlbmVycyhsaXN0ZW5lcnMsIG9sZExpc3RlbmVycyB8fCB7fSwgYWRkJDEsIHJlbW92ZSQxLCBjcmVhdGVPbmNlSGFuZGxlciQxLCB2bSk7XG4gICAgdGFyZ2V0JDEgPSB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiBldmVudHNNaXhpbihWdWUpIHtcbiAgICB2YXIgaG9va1JFID0gL15ob29rOi87XG4gICAgVnVlLnByb3RvdHlwZS4kb24gPSBmdW5jdGlvbiAoZXZlbnQsIGZuKSB7XG4gICAgICAgIHZhciB2bSA9IHRoaXM7XG4gICAgICAgIGlmIChpc0FycmF5KGV2ZW50KSkge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBldmVudC5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2bS4kb24oZXZlbnRbaV0sIGZuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICh2bS5fZXZlbnRzW2V2ZW50XSB8fCAodm0uX2V2ZW50c1tldmVudF0gPSBbXSkpLnB1c2goZm4pO1xuICAgICAgICAgICAgLy8gb3B0aW1pemUgaG9vazpldmVudCBjb3N0IGJ5IHVzaW5nIGEgYm9vbGVhbiBmbGFnIG1hcmtlZCBhdCByZWdpc3RyYXRpb25cbiAgICAgICAgICAgIC8vIGluc3RlYWQgb2YgYSBoYXNoIGxvb2t1cFxuICAgICAgICAgICAgaWYgKGhvb2tSRS50ZXN0KGV2ZW50KSkge1xuICAgICAgICAgICAgICAgIHZtLl9oYXNIb29rRXZlbnQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2bTtcbiAgICB9O1xuICAgIFZ1ZS5wcm90b3R5cGUuJG9uY2UgPSBmdW5jdGlvbiAoZXZlbnQsIGZuKSB7XG4gICAgICAgIHZhciB2bSA9IHRoaXM7XG4gICAgICAgIGZ1bmN0aW9uIG9uKCkge1xuICAgICAgICAgICAgdm0uJG9mZihldmVudCwgb24pO1xuICAgICAgICAgICAgZm4uYXBwbHkodm0sIGFyZ3VtZW50cyk7XG4gICAgICAgIH1cbiAgICAgICAgb24uZm4gPSBmbjtcbiAgICAgICAgdm0uJG9uKGV2ZW50LCBvbik7XG4gICAgICAgIHJldHVybiB2bTtcbiAgICB9O1xuICAgIFZ1ZS5wcm90b3R5cGUuJG9mZiA9IGZ1bmN0aW9uIChldmVudCwgZm4pIHtcbiAgICAgICAgdmFyIHZtID0gdGhpcztcbiAgICAgICAgLy8gYWxsXG4gICAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgdm0uX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgICByZXR1cm4gdm07XG4gICAgICAgIH1cbiAgICAgICAgLy8gYXJyYXkgb2YgZXZlbnRzXG4gICAgICAgIGlmIChpc0FycmF5KGV2ZW50KSkge1xuICAgICAgICAgICAgZm9yICh2YXIgaV8xID0gMCwgbCA9IGV2ZW50Lmxlbmd0aDsgaV8xIDwgbDsgaV8xKyspIHtcbiAgICAgICAgICAgICAgICB2bS4kb2ZmKGV2ZW50W2lfMV0sIGZuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2bTtcbiAgICAgICAgfVxuICAgICAgICAvLyBzcGVjaWZpYyBldmVudFxuICAgICAgICB2YXIgY2JzID0gdm0uX2V2ZW50c1tldmVudF07XG4gICAgICAgIGlmICghY2JzKSB7XG4gICAgICAgICAgICByZXR1cm4gdm07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFmbikge1xuICAgICAgICAgICAgdm0uX2V2ZW50c1tldmVudF0gPSBudWxsO1xuICAgICAgICAgICAgcmV0dXJuIHZtO1xuICAgICAgICB9XG4gICAgICAgIC8vIHNwZWNpZmljIGhhbmRsZXJcbiAgICAgICAgdmFyIGNiO1xuICAgICAgICB2YXIgaSA9IGNicy5sZW5ndGg7XG4gICAgICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgICAgIGNiID0gY2JzW2ldO1xuICAgICAgICAgICAgaWYgKGNiID09PSBmbiB8fCBjYi5mbiA9PT0gZm4pIHtcbiAgICAgICAgICAgICAgICBjYnMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2bTtcbiAgICB9O1xuICAgIFZ1ZS5wcm90b3R5cGUuJGVtaXQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgdmFyIHZtID0gdGhpcztcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgIHZhciBsb3dlckNhc2VFdmVudCA9IGV2ZW50LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICBpZiAobG93ZXJDYXNlRXZlbnQgIT09IGV2ZW50ICYmIHZtLl9ldmVudHNbbG93ZXJDYXNlRXZlbnRdKSB7XG4gICAgICAgICAgICAgICAgdGlwKFwiRXZlbnQgXFxcIlwiLmNvbmNhdChsb3dlckNhc2VFdmVudCwgXCJcXFwiIGlzIGVtaXR0ZWQgaW4gY29tcG9uZW50IFwiKSArXG4gICAgICAgICAgICAgICAgICAgIFwiXCIuY29uY2F0KGZvcm1hdENvbXBvbmVudE5hbWUodm0pLCBcIiBidXQgdGhlIGhhbmRsZXIgaXMgcmVnaXN0ZXJlZCBmb3IgXFxcIlwiKS5jb25jYXQoZXZlbnQsIFwiXFxcIi4gXCIpICtcbiAgICAgICAgICAgICAgICAgICAgXCJOb3RlIHRoYXQgSFRNTCBhdHRyaWJ1dGVzIGFyZSBjYXNlLWluc2Vuc2l0aXZlIGFuZCB5b3UgY2Fubm90IHVzZSBcIiArXG4gICAgICAgICAgICAgICAgICAgIFwidi1vbiB0byBsaXN0ZW4gdG8gY2FtZWxDYXNlIGV2ZW50cyB3aGVuIHVzaW5nIGluLURPTSB0ZW1wbGF0ZXMuIFwiICtcbiAgICAgICAgICAgICAgICAgICAgXCJZb3Ugc2hvdWxkIHByb2JhYmx5IHVzZSBcXFwiXCIuY29uY2F0KGh5cGhlbmF0ZShldmVudCksIFwiXFxcIiBpbnN0ZWFkIG9mIFxcXCJcIikuY29uY2F0KGV2ZW50LCBcIlxcXCIuXCIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgY2JzID0gdm0uX2V2ZW50c1tldmVudF07XG4gICAgICAgIGlmIChjYnMpIHtcbiAgICAgICAgICAgIGNicyA9IGNicy5sZW5ndGggPiAxID8gdG9BcnJheShjYnMpIDogY2JzO1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSB0b0FycmF5KGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICB2YXIgaW5mbyA9IFwiZXZlbnQgaGFuZGxlciBmb3IgXFxcIlwiLmNvbmNhdChldmVudCwgXCJcXFwiXCIpO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBjYnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaW52b2tlV2l0aEVycm9ySGFuZGxpbmcoY2JzW2ldLCB2bSwgYXJncywgdm0sIGluZm8pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2bTtcbiAgICB9O1xufVxuXG52YXIgYWN0aXZlSW5zdGFuY2UgPSBudWxsO1xudmFyIGlzVXBkYXRpbmdDaGlsZENvbXBvbmVudCA9IGZhbHNlO1xuZnVuY3Rpb24gc2V0QWN0aXZlSW5zdGFuY2Uodm0pIHtcbiAgICB2YXIgcHJldkFjdGl2ZUluc3RhbmNlID0gYWN0aXZlSW5zdGFuY2U7XG4gICAgYWN0aXZlSW5zdGFuY2UgPSB2bTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICBhY3RpdmVJbnN0YW5jZSA9IHByZXZBY3RpdmVJbnN0YW5jZTtcbiAgICB9O1xufVxuZnVuY3Rpb24gaW5pdExpZmVjeWNsZSh2bSkge1xuICAgIHZhciBvcHRpb25zID0gdm0uJG9wdGlvbnM7XG4gICAgLy8gbG9jYXRlIGZpcnN0IG5vbi1hYnN0cmFjdCBwYXJlbnRcbiAgICB2YXIgcGFyZW50ID0gb3B0aW9ucy5wYXJlbnQ7XG4gICAgaWYgKHBhcmVudCAmJiAhb3B0aW9ucy5hYnN0cmFjdCkge1xuICAgICAgICB3aGlsZSAocGFyZW50LiRvcHRpb25zLmFic3RyYWN0ICYmIHBhcmVudC4kcGFyZW50KSB7XG4gICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnQuJHBhcmVudDtcbiAgICAgICAgfVxuICAgICAgICBwYXJlbnQuJGNoaWxkcmVuLnB1c2godm0pO1xuICAgIH1cbiAgICB2bS4kcGFyZW50ID0gcGFyZW50O1xuICAgIHZtLiRyb290ID0gcGFyZW50ID8gcGFyZW50LiRyb290IDogdm07XG4gICAgdm0uJGNoaWxkcmVuID0gW107XG4gICAgdm0uJHJlZnMgPSB7fTtcbiAgICB2bS5fcHJvdmlkZWQgPSBwYXJlbnQgPyBwYXJlbnQuX3Byb3ZpZGVkIDogT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB2bS5fd2F0Y2hlciA9IG51bGw7XG4gICAgdm0uX2luYWN0aXZlID0gbnVsbDtcbiAgICB2bS5fZGlyZWN0SW5hY3RpdmUgPSBmYWxzZTtcbiAgICB2bS5faXNNb3VudGVkID0gZmFsc2U7XG4gICAgdm0uX2lzRGVzdHJveWVkID0gZmFsc2U7XG4gICAgdm0uX2lzQmVpbmdEZXN0cm95ZWQgPSBmYWxzZTtcbn1cbmZ1bmN0aW9uIGxpZmVjeWNsZU1peGluKFZ1ZSkge1xuICAgIFZ1ZS5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uICh2bm9kZSwgaHlkcmF0aW5nKSB7XG4gICAgICAgIHZhciB2bSA9IHRoaXM7XG4gICAgICAgIHZhciBwcmV2RWwgPSB2bS4kZWw7XG4gICAgICAgIHZhciBwcmV2Vm5vZGUgPSB2bS5fdm5vZGU7XG4gICAgICAgIHZhciByZXN0b3JlQWN0aXZlSW5zdGFuY2UgPSBzZXRBY3RpdmVJbnN0YW5jZSh2bSk7XG4gICAgICAgIHZtLl92bm9kZSA9IHZub2RlO1xuICAgICAgICAvLyBWdWUucHJvdG90eXBlLl9fcGF0Y2hfXyBpcyBpbmplY3RlZCBpbiBlbnRyeSBwb2ludHNcbiAgICAgICAgLy8gYmFzZWQgb24gdGhlIHJlbmRlcmluZyBiYWNrZW5kIHVzZWQuXG4gICAgICAgIGlmICghcHJldlZub2RlKSB7XG4gICAgICAgICAgICAvLyBpbml0aWFsIHJlbmRlclxuICAgICAgICAgICAgdm0uJGVsID0gdm0uX19wYXRjaF9fKHZtLiRlbCwgdm5vZGUsIGh5ZHJhdGluZywgZmFsc2UgLyogcmVtb3ZlT25seSAqLyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyB1cGRhdGVzXG4gICAgICAgICAgICB2bS4kZWwgPSB2bS5fX3BhdGNoX18ocHJldlZub2RlLCB2bm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdG9yZUFjdGl2ZUluc3RhbmNlKCk7XG4gICAgICAgIC8vIHVwZGF0ZSBfX3Z1ZV9fIHJlZmVyZW5jZVxuICAgICAgICBpZiAocHJldkVsKSB7XG4gICAgICAgICAgICBwcmV2RWwuX192dWVfXyA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZtLiRlbCkge1xuICAgICAgICAgICAgdm0uJGVsLl9fdnVlX18gPSB2bTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiBwYXJlbnQgaXMgYW4gSE9DLCB1cGRhdGUgaXRzICRlbCBhcyB3ZWxsXG4gICAgICAgIHZhciB3cmFwcGVyID0gdm07XG4gICAgICAgIHdoaWxlICh3cmFwcGVyICYmXG4gICAgICAgICAgICB3cmFwcGVyLiR2bm9kZSAmJlxuICAgICAgICAgICAgd3JhcHBlci4kcGFyZW50ICYmXG4gICAgICAgICAgICB3cmFwcGVyLiR2bm9kZSA9PT0gd3JhcHBlci4kcGFyZW50Ll92bm9kZSkge1xuICAgICAgICAgICAgd3JhcHBlci4kcGFyZW50LiRlbCA9IHdyYXBwZXIuJGVsO1xuICAgICAgICAgICAgd3JhcHBlciA9IHdyYXBwZXIuJHBhcmVudDtcbiAgICAgICAgfVxuICAgICAgICAvLyB1cGRhdGVkIGhvb2sgaXMgY2FsbGVkIGJ5IHRoZSBzY2hlZHVsZXIgdG8gZW5zdXJlIHRoYXQgY2hpbGRyZW4gYXJlXG4gICAgICAgIC8vIHVwZGF0ZWQgaW4gYSBwYXJlbnQncyB1cGRhdGVkIGhvb2suXG4gICAgfTtcbiAgICBWdWUucHJvdG90eXBlLiRmb3JjZVVwZGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHZtID0gdGhpcztcbiAgICAgICAgaWYgKHZtLl93YXRjaGVyKSB7XG4gICAgICAgICAgICB2bS5fd2F0Y2hlci51cGRhdGUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgVnVlLnByb3RvdHlwZS4kZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHZtID0gdGhpcztcbiAgICAgICAgaWYgKHZtLl9pc0JlaW5nRGVzdHJveWVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY2FsbEhvb2skMSh2bSwgJ2JlZm9yZURlc3Ryb3knKTtcbiAgICAgICAgdm0uX2lzQmVpbmdEZXN0cm95ZWQgPSB0cnVlO1xuICAgICAgICAvLyByZW1vdmUgc2VsZiBmcm9tIHBhcmVudFxuICAgICAgICB2YXIgcGFyZW50ID0gdm0uJHBhcmVudDtcbiAgICAgICAgaWYgKHBhcmVudCAmJiAhcGFyZW50Ll9pc0JlaW5nRGVzdHJveWVkICYmICF2bS4kb3B0aW9ucy5hYnN0cmFjdCkge1xuICAgICAgICAgICAgcmVtb3ZlJDIocGFyZW50LiRjaGlsZHJlbiwgdm0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIHRlYXJkb3duIHNjb3BlLiB0aGlzIGluY2x1ZGVzIGJvdGggdGhlIHJlbmRlciB3YXRjaGVyIGFuZCBvdGhlclxuICAgICAgICAvLyB3YXRjaGVycyBjcmVhdGVkXG4gICAgICAgIHZtLl9zY29wZS5zdG9wKCk7XG4gICAgICAgIC8vIHJlbW92ZSByZWZlcmVuY2UgZnJvbSBkYXRhIG9iXG4gICAgICAgIC8vIGZyb3plbiBvYmplY3QgbWF5IG5vdCBoYXZlIG9ic2VydmVyLlxuICAgICAgICBpZiAodm0uX2RhdGEuX19vYl9fKSB7XG4gICAgICAgICAgICB2bS5fZGF0YS5fX29iX18udm1Db3VudC0tO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNhbGwgdGhlIGxhc3QgaG9vay4uLlxuICAgICAgICB2bS5faXNEZXN0cm95ZWQgPSB0cnVlO1xuICAgICAgICAvLyBpbnZva2UgZGVzdHJveSBob29rcyBvbiBjdXJyZW50IHJlbmRlcmVkIHRyZWVcbiAgICAgICAgdm0uX19wYXRjaF9fKHZtLl92bm9kZSwgbnVsbCk7XG4gICAgICAgIC8vIGZpcmUgZGVzdHJveWVkIGhvb2tcbiAgICAgICAgY2FsbEhvb2skMSh2bSwgJ2Rlc3Ryb3llZCcpO1xuICAgICAgICAvLyB0dXJuIG9mZiBhbGwgaW5zdGFuY2UgbGlzdGVuZXJzLlxuICAgICAgICB2bS4kb2ZmKCk7XG4gICAgICAgIC8vIHJlbW92ZSBfX3Z1ZV9fIHJlZmVyZW5jZVxuICAgICAgICBpZiAodm0uJGVsKSB7XG4gICAgICAgICAgICB2bS4kZWwuX192dWVfXyA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmVsZWFzZSBjaXJjdWxhciByZWZlcmVuY2UgKCM2NzU5KVxuICAgICAgICBpZiAodm0uJHZub2RlKSB7XG4gICAgICAgICAgICB2bS4kdm5vZGUucGFyZW50ID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH07XG59XG5mdW5jdGlvbiBtb3VudENvbXBvbmVudCh2bSwgZWwsIGh5ZHJhdGluZykge1xuICAgIHZtLiRlbCA9IGVsO1xuICAgIGlmICghdm0uJG9wdGlvbnMucmVuZGVyKSB7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgaW52YWxpZCB0eXBlXG4gICAgICAgIHZtLiRvcHRpb25zLnJlbmRlciA9IGNyZWF0ZUVtcHR5Vk5vZGU7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICAgIGlmICgodm0uJG9wdGlvbnMudGVtcGxhdGUgJiYgdm0uJG9wdGlvbnMudGVtcGxhdGUuY2hhckF0KDApICE9PSAnIycpIHx8XG4gICAgICAgICAgICAgICAgdm0uJG9wdGlvbnMuZWwgfHxcbiAgICAgICAgICAgICAgICBlbCkge1xuICAgICAgICAgICAgICAgIHdhcm4kMignWW91IGFyZSB1c2luZyB0aGUgcnVudGltZS1vbmx5IGJ1aWxkIG9mIFZ1ZSB3aGVyZSB0aGUgdGVtcGxhdGUgJyArXG4gICAgICAgICAgICAgICAgICAgICdjb21waWxlciBpcyBub3QgYXZhaWxhYmxlLiBFaXRoZXIgcHJlLWNvbXBpbGUgdGhlIHRlbXBsYXRlcyBpbnRvICcgK1xuICAgICAgICAgICAgICAgICAgICAncmVuZGVyIGZ1bmN0aW9ucywgb3IgdXNlIHRoZSBjb21waWxlci1pbmNsdWRlZCBidWlsZC4nLCB2bSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB3YXJuJDIoJ0ZhaWxlZCB0byBtb3VudCBjb21wb25lbnQ6IHRlbXBsYXRlIG9yIHJlbmRlciBmdW5jdGlvbiBub3QgZGVmaW5lZC4nLCB2bSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2FsbEhvb2skMSh2bSwgJ2JlZm9yZU1vdW50Jyk7XG4gICAgdmFyIHVwZGF0ZUNvbXBvbmVudDtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBjb25maWcucGVyZm9ybWFuY2UgJiYgbWFyaykge1xuICAgICAgICB1cGRhdGVDb21wb25lbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgbmFtZSA9IHZtLl9uYW1lO1xuICAgICAgICAgICAgdmFyIGlkID0gdm0uX3VpZDtcbiAgICAgICAgICAgIHZhciBzdGFydFRhZyA9IFwidnVlLXBlcmYtc3RhcnQ6XCIuY29uY2F0KGlkKTtcbiAgICAgICAgICAgIHZhciBlbmRUYWcgPSBcInZ1ZS1wZXJmLWVuZDpcIi5jb25jYXQoaWQpO1xuICAgICAgICAgICAgbWFyayhzdGFydFRhZyk7XG4gICAgICAgICAgICB2YXIgdm5vZGUgPSB2bS5fcmVuZGVyKCk7XG4gICAgICAgICAgICBtYXJrKGVuZFRhZyk7XG4gICAgICAgICAgICBtZWFzdXJlKFwidnVlIFwiLmNvbmNhdChuYW1lLCBcIiByZW5kZXJcIiksIHN0YXJ0VGFnLCBlbmRUYWcpO1xuICAgICAgICAgICAgbWFyayhzdGFydFRhZyk7XG4gICAgICAgICAgICB2bS5fdXBkYXRlKHZub2RlLCBoeWRyYXRpbmcpO1xuICAgICAgICAgICAgbWFyayhlbmRUYWcpO1xuICAgICAgICAgICAgbWVhc3VyZShcInZ1ZSBcIi5jb25jYXQobmFtZSwgXCIgcGF0Y2hcIiksIHN0YXJ0VGFnLCBlbmRUYWcpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdXBkYXRlQ29tcG9uZW50ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdm0uX3VwZGF0ZSh2bS5fcmVuZGVyKCksIGh5ZHJhdGluZyk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIHZhciB3YXRjaGVyT3B0aW9ucyA9IHtcbiAgICAgICAgYmVmb3JlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAodm0uX2lzTW91bnRlZCAmJiAhdm0uX2lzRGVzdHJveWVkKSB7XG4gICAgICAgICAgICAgICAgY2FsbEhvb2skMSh2bSwgJ2JlZm9yZVVwZGF0ZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICB3YXRjaGVyT3B0aW9ucy5vblRyYWNrID0gZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGNhbGxIb29rJDEodm0sICdyZW5kZXJUcmFja2VkJywgW2VdKTsgfTtcbiAgICAgICAgd2F0Y2hlck9wdGlvbnMub25UcmlnZ2VyID0gZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGNhbGxIb29rJDEodm0sICdyZW5kZXJUcmlnZ2VyZWQnLCBbZV0pOyB9O1xuICAgIH1cbiAgICAvLyB3ZSBzZXQgdGhpcyB0byB2bS5fd2F0Y2hlciBpbnNpZGUgdGhlIHdhdGNoZXIncyBjb25zdHJ1Y3RvclxuICAgIC8vIHNpbmNlIHRoZSB3YXRjaGVyJ3MgaW5pdGlhbCBwYXRjaCBtYXkgY2FsbCAkZm9yY2VVcGRhdGUgKGUuZy4gaW5zaWRlIGNoaWxkXG4gICAgLy8gY29tcG9uZW50J3MgbW91bnRlZCBob29rKSwgd2hpY2ggcmVsaWVzIG9uIHZtLl93YXRjaGVyIGJlaW5nIGFscmVhZHkgZGVmaW5lZFxuICAgIG5ldyBXYXRjaGVyKHZtLCB1cGRhdGVDb21wb25lbnQsIG5vb3AsIHdhdGNoZXJPcHRpb25zLCB0cnVlIC8qIGlzUmVuZGVyV2F0Y2hlciAqLyk7XG4gICAgaHlkcmF0aW5nID0gZmFsc2U7XG4gICAgLy8gZmx1c2ggYnVmZmVyIGZvciBmbHVzaDogXCJwcmVcIiB3YXRjaGVycyBxdWV1ZWQgaW4gc2V0dXAoKVxuICAgIHZhciBwcmVXYXRjaGVycyA9IHZtLl9wcmVXYXRjaGVycztcbiAgICBpZiAocHJlV2F0Y2hlcnMpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcmVXYXRjaGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgcHJlV2F0Y2hlcnNbaV0ucnVuKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gbWFudWFsbHkgbW91bnRlZCBpbnN0YW5jZSwgY2FsbCBtb3VudGVkIG9uIHNlbGZcbiAgICAvLyBtb3VudGVkIGlzIGNhbGxlZCBmb3IgcmVuZGVyLWNyZWF0ZWQgY2hpbGQgY29tcG9uZW50cyBpbiBpdHMgaW5zZXJ0ZWQgaG9va1xuICAgIGlmICh2bS4kdm5vZGUgPT0gbnVsbCkge1xuICAgICAgICB2bS5faXNNb3VudGVkID0gdHJ1ZTtcbiAgICAgICAgY2FsbEhvb2skMSh2bSwgJ21vdW50ZWQnKTtcbiAgICB9XG4gICAgcmV0dXJuIHZtO1xufVxuZnVuY3Rpb24gdXBkYXRlQ2hpbGRDb21wb25lbnQodm0sIHByb3BzRGF0YSwgbGlzdGVuZXJzLCBwYXJlbnRWbm9kZSwgcmVuZGVyQ2hpbGRyZW4pIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBpc1VwZGF0aW5nQ2hpbGRDb21wb25lbnQgPSB0cnVlO1xuICAgIH1cbiAgICAvLyBkZXRlcm1pbmUgd2hldGhlciBjb21wb25lbnQgaGFzIHNsb3QgY2hpbGRyZW5cbiAgICAvLyB3ZSBuZWVkIHRvIGRvIHRoaXMgYmVmb3JlIG92ZXJ3cml0aW5nICRvcHRpb25zLl9yZW5kZXJDaGlsZHJlbi5cbiAgICAvLyBjaGVjayBpZiB0aGVyZSBhcmUgZHluYW1pYyBzY29wZWRTbG90cyAoaGFuZC13cml0dGVuIG9yIGNvbXBpbGVkIGJ1dCB3aXRoXG4gICAgLy8gZHluYW1pYyBzbG90IG5hbWVzKS4gU3RhdGljIHNjb3BlZCBzbG90cyBjb21waWxlZCBmcm9tIHRlbXBsYXRlIGhhcyB0aGVcbiAgICAvLyBcIiRzdGFibGVcIiBtYXJrZXIuXG4gICAgdmFyIG5ld1Njb3BlZFNsb3RzID0gcGFyZW50Vm5vZGUuZGF0YS5zY29wZWRTbG90cztcbiAgICB2YXIgb2xkU2NvcGVkU2xvdHMgPSB2bS4kc2NvcGVkU2xvdHM7XG4gICAgdmFyIGhhc0R5bmFtaWNTY29wZWRTbG90ID0gISEoKG5ld1Njb3BlZFNsb3RzICYmICFuZXdTY29wZWRTbG90cy4kc3RhYmxlKSB8fFxuICAgICAgICAob2xkU2NvcGVkU2xvdHMgIT09IGVtcHR5T2JqZWN0ICYmICFvbGRTY29wZWRTbG90cy4kc3RhYmxlKSB8fFxuICAgICAgICAobmV3U2NvcGVkU2xvdHMgJiYgdm0uJHNjb3BlZFNsb3RzLiRrZXkgIT09IG5ld1Njb3BlZFNsb3RzLiRrZXkpIHx8XG4gICAgICAgICghbmV3U2NvcGVkU2xvdHMgJiYgdm0uJHNjb3BlZFNsb3RzLiRrZXkpKTtcbiAgICAvLyBBbnkgc3RhdGljIHNsb3QgY2hpbGRyZW4gZnJvbSB0aGUgcGFyZW50IG1heSBoYXZlIGNoYW5nZWQgZHVyaW5nIHBhcmVudCdzXG4gICAgLy8gdXBkYXRlLiBEeW5hbWljIHNjb3BlZCBzbG90cyBtYXkgYWxzbyBoYXZlIGNoYW5nZWQuIEluIHN1Y2ggY2FzZXMsIGEgZm9yY2VkXG4gICAgLy8gdXBkYXRlIGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgY29ycmVjdG5lc3MuXG4gICAgdmFyIG5lZWRzRm9yY2VVcGRhdGUgPSAhIShyZW5kZXJDaGlsZHJlbiB8fCAvLyBoYXMgbmV3IHN0YXRpYyBzbG90c1xuICAgICAgICB2bS4kb3B0aW9ucy5fcmVuZGVyQ2hpbGRyZW4gfHwgLy8gaGFzIG9sZCBzdGF0aWMgc2xvdHNcbiAgICAgICAgaGFzRHluYW1pY1Njb3BlZFNsb3QpO1xuICAgIHZhciBwcmV2Vk5vZGUgPSB2bS4kdm5vZGU7XG4gICAgdm0uJG9wdGlvbnMuX3BhcmVudFZub2RlID0gcGFyZW50Vm5vZGU7XG4gICAgdm0uJHZub2RlID0gcGFyZW50Vm5vZGU7IC8vIHVwZGF0ZSB2bSdzIHBsYWNlaG9sZGVyIG5vZGUgd2l0aG91dCByZS1yZW5kZXJcbiAgICBpZiAodm0uX3Zub2RlKSB7XG4gICAgICAgIC8vIHVwZGF0ZSBjaGlsZCB0cmVlJ3MgcGFyZW50XG4gICAgICAgIHZtLl92bm9kZS5wYXJlbnQgPSBwYXJlbnRWbm9kZTtcbiAgICB9XG4gICAgdm0uJG9wdGlvbnMuX3JlbmRlckNoaWxkcmVuID0gcmVuZGVyQ2hpbGRyZW47XG4gICAgLy8gdXBkYXRlICRhdHRycyBhbmQgJGxpc3RlbmVycyBoYXNoXG4gICAgLy8gdGhlc2UgYXJlIGFsc28gcmVhY3RpdmUgc28gdGhleSBtYXkgdHJpZ2dlciBjaGlsZCB1cGRhdGUgaWYgdGhlIGNoaWxkXG4gICAgLy8gdXNlZCB0aGVtIGR1cmluZyByZW5kZXJcbiAgICB2YXIgYXR0cnMgPSBwYXJlbnRWbm9kZS5kYXRhLmF0dHJzIHx8IGVtcHR5T2JqZWN0O1xuICAgIGlmICh2bS5fYXR0cnNQcm94eSkge1xuICAgICAgICAvLyBmb3JjZSB1cGRhdGUgaWYgYXR0cnMgYXJlIGFjY2Vzc2VkIGFuZCBoYXMgY2hhbmdlZCBzaW5jZSBpdCBtYXkgYmVcbiAgICAgICAgLy8gcGFzc2VkIHRvIGEgY2hpbGQgY29tcG9uZW50LlxuICAgICAgICBpZiAoc3luY1NldHVwUHJveHkodm0uX2F0dHJzUHJveHksIGF0dHJzLCAocHJldlZOb2RlLmRhdGEgJiYgcHJldlZOb2RlLmRhdGEuYXR0cnMpIHx8IGVtcHR5T2JqZWN0LCB2bSwgJyRhdHRycycpKSB7XG4gICAgICAgICAgICBuZWVkc0ZvcmNlVXBkYXRlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2bS4kYXR0cnMgPSBhdHRycztcbiAgICAvLyB1cGRhdGUgbGlzdGVuZXJzXG4gICAgbGlzdGVuZXJzID0gbGlzdGVuZXJzIHx8IGVtcHR5T2JqZWN0O1xuICAgIHZhciBwcmV2TGlzdGVuZXJzID0gdm0uJG9wdGlvbnMuX3BhcmVudExpc3RlbmVycztcbiAgICBpZiAodm0uX2xpc3RlbmVyc1Byb3h5KSB7XG4gICAgICAgIHN5bmNTZXR1cFByb3h5KHZtLl9saXN0ZW5lcnNQcm94eSwgbGlzdGVuZXJzLCBwcmV2TGlzdGVuZXJzIHx8IGVtcHR5T2JqZWN0LCB2bSwgJyRsaXN0ZW5lcnMnKTtcbiAgICB9XG4gICAgdm0uJGxpc3RlbmVycyA9IHZtLiRvcHRpb25zLl9wYXJlbnRMaXN0ZW5lcnMgPSBsaXN0ZW5lcnM7XG4gICAgdXBkYXRlQ29tcG9uZW50TGlzdGVuZXJzKHZtLCBsaXN0ZW5lcnMsIHByZXZMaXN0ZW5lcnMpO1xuICAgIC8vIHVwZGF0ZSBwcm9wc1xuICAgIGlmIChwcm9wc0RhdGEgJiYgdm0uJG9wdGlvbnMucHJvcHMpIHtcbiAgICAgICAgdG9nZ2xlT2JzZXJ2aW5nKGZhbHNlKTtcbiAgICAgICAgdmFyIHByb3BzID0gdm0uX3Byb3BzO1xuICAgICAgICB2YXIgcHJvcEtleXMgPSB2bS4kb3B0aW9ucy5fcHJvcEtleXMgfHwgW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcEtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBrZXkgPSBwcm9wS2V5c1tpXTtcbiAgICAgICAgICAgIHZhciBwcm9wT3B0aW9ucyA9IHZtLiRvcHRpb25zLnByb3BzOyAvLyB3dGYgZmxvdz9cbiAgICAgICAgICAgIHByb3BzW2tleV0gPSB2YWxpZGF0ZVByb3Aoa2V5LCBwcm9wT3B0aW9ucywgcHJvcHNEYXRhLCB2bSk7XG4gICAgICAgIH1cbiAgICAgICAgdG9nZ2xlT2JzZXJ2aW5nKHRydWUpO1xuICAgICAgICAvLyBrZWVwIGEgY29weSBvZiByYXcgcHJvcHNEYXRhXG4gICAgICAgIHZtLiRvcHRpb25zLnByb3BzRGF0YSA9IHByb3BzRGF0YTtcbiAgICB9XG4gICAgLy8gcmVzb2x2ZSBzbG90cyArIGZvcmNlIHVwZGF0ZSBpZiBoYXMgY2hpbGRyZW5cbiAgICBpZiAobmVlZHNGb3JjZVVwZGF0ZSkge1xuICAgICAgICB2bS4kc2xvdHMgPSByZXNvbHZlU2xvdHMocmVuZGVyQ2hpbGRyZW4sIHBhcmVudFZub2RlLmNvbnRleHQpO1xuICAgICAgICB2bS4kZm9yY2VVcGRhdGUoKTtcbiAgICB9XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgaXNVcGRhdGluZ0NoaWxkQ29tcG9uZW50ID0gZmFsc2U7XG4gICAgfVxufVxuZnVuY3Rpb24gaXNJbkluYWN0aXZlVHJlZSh2bSkge1xuICAgIHdoaWxlICh2bSAmJiAodm0gPSB2bS4kcGFyZW50KSkge1xuICAgICAgICBpZiAodm0uX2luYWN0aXZlKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGFjdGl2YXRlQ2hpbGRDb21wb25lbnQodm0sIGRpcmVjdCkge1xuICAgIGlmIChkaXJlY3QpIHtcbiAgICAgICAgdm0uX2RpcmVjdEluYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIGlmIChpc0luSW5hY3RpdmVUcmVlKHZtKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHZtLl9kaXJlY3RJbmFjdGl2ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh2bS5faW5hY3RpdmUgfHwgdm0uX2luYWN0aXZlID09PSBudWxsKSB7XG4gICAgICAgIHZtLl9pbmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZtLiRjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYWN0aXZhdGVDaGlsZENvbXBvbmVudCh2bS4kY2hpbGRyZW5baV0pO1xuICAgICAgICB9XG4gICAgICAgIGNhbGxIb29rJDEodm0sICdhY3RpdmF0ZWQnKTtcbiAgICB9XG59XG5mdW5jdGlvbiBkZWFjdGl2YXRlQ2hpbGRDb21wb25lbnQodm0sIGRpcmVjdCkge1xuICAgIGlmIChkaXJlY3QpIHtcbiAgICAgICAgdm0uX2RpcmVjdEluYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgaWYgKGlzSW5JbmFjdGl2ZVRyZWUodm0pKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKCF2bS5faW5hY3RpdmUpIHtcbiAgICAgICAgdm0uX2luYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2bS4kY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGRlYWN0aXZhdGVDaGlsZENvbXBvbmVudCh2bS4kY2hpbGRyZW5baV0pO1xuICAgICAgICB9XG4gICAgICAgIGNhbGxIb29rJDEodm0sICdkZWFjdGl2YXRlZCcpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGNhbGxIb29rJDEodm0sIGhvb2ssIGFyZ3MsIHNldENvbnRleHQpIHtcbiAgICBpZiAoc2V0Q29udGV4dCA9PT0gdm9pZCAwKSB7IHNldENvbnRleHQgPSB0cnVlOyB9XG4gICAgLy8gIzc1NzMgZGlzYWJsZSBkZXAgY29sbGVjdGlvbiB3aGVuIGludm9raW5nIGxpZmVjeWNsZSBob29rc1xuICAgIHB1c2hUYXJnZXQoKTtcbiAgICB2YXIgcHJldiA9IGN1cnJlbnRJbnN0YW5jZTtcbiAgICBzZXRDb250ZXh0ICYmIHNldEN1cnJlbnRJbnN0YW5jZSh2bSk7XG4gICAgdmFyIGhhbmRsZXJzID0gdm0uJG9wdGlvbnNbaG9va107XG4gICAgdmFyIGluZm8gPSBcIlwiLmNvbmNhdChob29rLCBcIiBob29rXCIpO1xuICAgIGlmIChoYW5kbGVycykge1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgaiA9IGhhbmRsZXJzLmxlbmd0aDsgaSA8IGo7IGkrKykge1xuICAgICAgICAgICAgaW52b2tlV2l0aEVycm9ySGFuZGxpbmcoaGFuZGxlcnNbaV0sIHZtLCBhcmdzIHx8IG51bGwsIHZtLCBpbmZvKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAodm0uX2hhc0hvb2tFdmVudCkge1xuICAgICAgICB2bS4kZW1pdCgnaG9vazonICsgaG9vayk7XG4gICAgfVxuICAgIHNldENvbnRleHQgJiYgc2V0Q3VycmVudEluc3RhbmNlKHByZXYpO1xuICAgIHBvcFRhcmdldCgpO1xufVxuXG52YXIgTUFYX1VQREFURV9DT1VOVCA9IDEwMDtcbnZhciBxdWV1ZSA9IFtdO1xudmFyIGFjdGl2YXRlZENoaWxkcmVuID0gW107XG52YXIgaGFzID0ge307XG52YXIgY2lyY3VsYXIgPSB7fTtcbnZhciB3YWl0aW5nID0gZmFsc2U7XG52YXIgZmx1c2hpbmcgPSBmYWxzZTtcbnZhciBpbmRleCQxID0gMDtcbi8qKlxuICogUmVzZXQgdGhlIHNjaGVkdWxlcidzIHN0YXRlLlxuICovXG5mdW5jdGlvbiByZXNldFNjaGVkdWxlclN0YXRlKCkge1xuICAgIGluZGV4JDEgPSBxdWV1ZS5sZW5ndGggPSBhY3RpdmF0ZWRDaGlsZHJlbi5sZW5ndGggPSAwO1xuICAgIGhhcyA9IHt9O1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGNpcmN1bGFyID0ge307XG4gICAgfVxuICAgIHdhaXRpbmcgPSBmbHVzaGluZyA9IGZhbHNlO1xufVxuLy8gQXN5bmMgZWRnZSBjYXNlICM2NTY2IHJlcXVpcmVzIHNhdmluZyB0aGUgdGltZXN0YW1wIHdoZW4gZXZlbnQgbGlzdGVuZXJzIGFyZVxuLy8gYXR0YWNoZWQuIEhvd2V2ZXIsIGNhbGxpbmcgcGVyZm9ybWFuY2Uubm93KCkgaGFzIGEgcGVyZiBvdmVyaGVhZCBlc3BlY2lhbGx5XG4vLyBpZiB0aGUgcGFnZSBoYXMgdGhvdXNhbmRzIG9mIGV2ZW50IGxpc3RlbmVycy4gSW5zdGVhZCwgd2UgdGFrZSBhIHRpbWVzdGFtcFxuLy8gZXZlcnkgdGltZSB0aGUgc2NoZWR1bGVyIGZsdXNoZXMgYW5kIHVzZSB0aGF0IGZvciBhbGwgZXZlbnQgbGlzdGVuZXJzXG4vLyBhdHRhY2hlZCBkdXJpbmcgdGhhdCBmbHVzaC5cbnZhciBjdXJyZW50Rmx1c2hUaW1lc3RhbXAgPSAwO1xuLy8gQXN5bmMgZWRnZSBjYXNlIGZpeCByZXF1aXJlcyBzdG9yaW5nIGFuIGV2ZW50IGxpc3RlbmVyJ3MgYXR0YWNoIHRpbWVzdGFtcC5cbnZhciBnZXROb3cgPSBEYXRlLm5vdztcbi8vIERldGVybWluZSB3aGF0IGV2ZW50IHRpbWVzdGFtcCB0aGUgYnJvd3NlciBpcyB1c2luZy4gQW5ub3lpbmdseSwgdGhlXG4vLyB0aW1lc3RhbXAgY2FuIGVpdGhlciBiZSBoaS1yZXMgKHJlbGF0aXZlIHRvIHBhZ2UgbG9hZCkgb3IgbG93LXJlc1xuLy8gKHJlbGF0aXZlIHRvIFVOSVggZXBvY2gpLCBzbyBpbiBvcmRlciB0byBjb21wYXJlIHRpbWUgd2UgaGF2ZSB0byB1c2UgdGhlXG4vLyBzYW1lIHRpbWVzdGFtcCB0eXBlIHdoZW4gc2F2aW5nIHRoZSBmbHVzaCB0aW1lc3RhbXAuXG4vLyBBbGwgSUUgdmVyc2lvbnMgdXNlIGxvdy1yZXMgZXZlbnQgdGltZXN0YW1wcywgYW5kIGhhdmUgcHJvYmxlbWF0aWMgY2xvY2tcbi8vIGltcGxlbWVudGF0aW9ucyAoIzk2MzIpXG5pZiAoaW5Ccm93c2VyICYmICFpc0lFKSB7XG4gICAgdmFyIHBlcmZvcm1hbmNlXzEgPSB3aW5kb3cucGVyZm9ybWFuY2U7XG4gICAgaWYgKHBlcmZvcm1hbmNlXzEgJiZcbiAgICAgICAgdHlwZW9mIHBlcmZvcm1hbmNlXzEubm93ID09PSAnZnVuY3Rpb24nICYmXG4gICAgICAgIGdldE5vdygpID4gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0V2ZW50JykudGltZVN0YW1wKSB7XG4gICAgICAgIC8vIGlmIHRoZSBldmVudCB0aW1lc3RhbXAsIGFsdGhvdWdoIGV2YWx1YXRlZCBBRlRFUiB0aGUgRGF0ZS5ub3coKSwgaXNcbiAgICAgICAgLy8gc21hbGxlciB0aGFuIGl0LCBpdCBtZWFucyB0aGUgZXZlbnQgaXMgdXNpbmcgYSBoaS1yZXMgdGltZXN0YW1wLFxuICAgICAgICAvLyBhbmQgd2UgbmVlZCB0byB1c2UgdGhlIGhpLXJlcyB2ZXJzaW9uIGZvciBldmVudCBsaXN0ZW5lciB0aW1lc3RhbXBzIGFzXG4gICAgICAgIC8vIHdlbGwuXG4gICAgICAgIGdldE5vdyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHBlcmZvcm1hbmNlXzEubm93KCk7IH07XG4gICAgfVxufVxudmFyIHNvcnRDb21wYXJlRm4gPSBmdW5jdGlvbiAoYSwgYikge1xuICAgIGlmIChhLnBvc3QpIHtcbiAgICAgICAgaWYgKCFiLnBvc3QpXG4gICAgICAgICAgICByZXR1cm4gMTtcbiAgICB9XG4gICAgZWxzZSBpZiAoYi5wb3N0KSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9XG4gICAgcmV0dXJuIGEuaWQgLSBiLmlkO1xufTtcbi8qKlxuICogRmx1c2ggYm90aCBxdWV1ZXMgYW5kIHJ1biB0aGUgd2F0Y2hlcnMuXG4gKi9cbmZ1bmN0aW9uIGZsdXNoU2NoZWR1bGVyUXVldWUoKSB7XG4gICAgY3VycmVudEZsdXNoVGltZXN0YW1wID0gZ2V0Tm93KCk7XG4gICAgZmx1c2hpbmcgPSB0cnVlO1xuICAgIHZhciB3YXRjaGVyLCBpZDtcbiAgICAvLyBTb3J0IHF1ZXVlIGJlZm9yZSBmbHVzaC5cbiAgICAvLyBUaGlzIGVuc3VyZXMgdGhhdDpcbiAgICAvLyAxLiBDb21wb25lbnRzIGFyZSB1cGRhdGVkIGZyb20gcGFyZW50IHRvIGNoaWxkLiAoYmVjYXVzZSBwYXJlbnQgaXMgYWx3YXlzXG4gICAgLy8gICAgY3JlYXRlZCBiZWZvcmUgdGhlIGNoaWxkKVxuICAgIC8vIDIuIEEgY29tcG9uZW50J3MgdXNlciB3YXRjaGVycyBhcmUgcnVuIGJlZm9yZSBpdHMgcmVuZGVyIHdhdGNoZXIgKGJlY2F1c2VcbiAgICAvLyAgICB1c2VyIHdhdGNoZXJzIGFyZSBjcmVhdGVkIGJlZm9yZSB0aGUgcmVuZGVyIHdhdGNoZXIpXG4gICAgLy8gMy4gSWYgYSBjb21wb25lbnQgaXMgZGVzdHJveWVkIGR1cmluZyBhIHBhcmVudCBjb21wb25lbnQncyB3YXRjaGVyIHJ1bixcbiAgICAvLyAgICBpdHMgd2F0Y2hlcnMgY2FuIGJlIHNraXBwZWQuXG4gICAgcXVldWUuc29ydChzb3J0Q29tcGFyZUZuKTtcbiAgICAvLyBkbyBub3QgY2FjaGUgbGVuZ3RoIGJlY2F1c2UgbW9yZSB3YXRjaGVycyBtaWdodCBiZSBwdXNoZWRcbiAgICAvLyBhcyB3ZSBydW4gZXhpc3Rpbmcgd2F0Y2hlcnNcbiAgICBmb3IgKGluZGV4JDEgPSAwOyBpbmRleCQxIDwgcXVldWUubGVuZ3RoOyBpbmRleCQxKyspIHtcbiAgICAgICAgd2F0Y2hlciA9IHF1ZXVlW2luZGV4JDFdO1xuICAgICAgICBpZiAod2F0Y2hlci5iZWZvcmUpIHtcbiAgICAgICAgICAgIHdhdGNoZXIuYmVmb3JlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWQgPSB3YXRjaGVyLmlkO1xuICAgICAgICBoYXNbaWRdID0gbnVsbDtcbiAgICAgICAgd2F0Y2hlci5ydW4oKTtcbiAgICAgICAgLy8gaW4gZGV2IGJ1aWxkLCBjaGVjayBhbmQgc3RvcCBjaXJjdWxhciB1cGRhdGVzLlxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBoYXNbaWRdICE9IG51bGwpIHtcbiAgICAgICAgICAgIGNpcmN1bGFyW2lkXSA9IChjaXJjdWxhcltpZF0gfHwgMCkgKyAxO1xuICAgICAgICAgICAgaWYgKGNpcmN1bGFyW2lkXSA+IE1BWF9VUERBVEVfQ09VTlQpIHtcbiAgICAgICAgICAgICAgICB3YXJuJDIoJ1lvdSBtYXkgaGF2ZSBhbiBpbmZpbml0ZSB1cGRhdGUgbG9vcCAnICtcbiAgICAgICAgICAgICAgICAgICAgKHdhdGNoZXIudXNlclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBcImluIHdhdGNoZXIgd2l0aCBleHByZXNzaW9uIFxcXCJcIi5jb25jYXQod2F0Y2hlci5leHByZXNzaW9uLCBcIlxcXCJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIDogXCJpbiBhIGNvbXBvbmVudCByZW5kZXIgZnVuY3Rpb24uXCIpLCB3YXRjaGVyLnZtKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBrZWVwIGNvcGllcyBvZiBwb3N0IHF1ZXVlcyBiZWZvcmUgcmVzZXR0aW5nIHN0YXRlXG4gICAgdmFyIGFjdGl2YXRlZFF1ZXVlID0gYWN0aXZhdGVkQ2hpbGRyZW4uc2xpY2UoKTtcbiAgICB2YXIgdXBkYXRlZFF1ZXVlID0gcXVldWUuc2xpY2UoKTtcbiAgICByZXNldFNjaGVkdWxlclN0YXRlKCk7XG4gICAgLy8gY2FsbCBjb21wb25lbnQgdXBkYXRlZCBhbmQgYWN0aXZhdGVkIGhvb2tzXG4gICAgY2FsbEFjdGl2YXRlZEhvb2tzKGFjdGl2YXRlZFF1ZXVlKTtcbiAgICBjYWxsVXBkYXRlZEhvb2tzKHVwZGF0ZWRRdWV1ZSk7XG4gICAgY2xlYW51cERlcHMoKTtcbiAgICAvLyBkZXZ0b29sIGhvb2tcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoZGV2dG9vbHMgJiYgY29uZmlnLmRldnRvb2xzKSB7XG4gICAgICAgIGRldnRvb2xzLmVtaXQoJ2ZsdXNoJyk7XG4gICAgfVxufVxuZnVuY3Rpb24gY2FsbFVwZGF0ZWRIb29rcyhxdWV1ZSkge1xuICAgIHZhciBpID0gcXVldWUubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgdmFyIHdhdGNoZXIgPSBxdWV1ZVtpXTtcbiAgICAgICAgdmFyIHZtID0gd2F0Y2hlci52bTtcbiAgICAgICAgaWYgKHZtICYmIHZtLl93YXRjaGVyID09PSB3YXRjaGVyICYmIHZtLl9pc01vdW50ZWQgJiYgIXZtLl9pc0Rlc3Ryb3llZCkge1xuICAgICAgICAgICAgY2FsbEhvb2skMSh2bSwgJ3VwZGF0ZWQnKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbi8qKlxuICogUXVldWUgYSBrZXB0LWFsaXZlIGNvbXBvbmVudCB0aGF0IHdhcyBhY3RpdmF0ZWQgZHVyaW5nIHBhdGNoLlxuICogVGhlIHF1ZXVlIHdpbGwgYmUgcHJvY2Vzc2VkIGFmdGVyIHRoZSBlbnRpcmUgdHJlZSBoYXMgYmVlbiBwYXRjaGVkLlxuICovXG5mdW5jdGlvbiBxdWV1ZUFjdGl2YXRlZENvbXBvbmVudCh2bSkge1xuICAgIC8vIHNldHRpbmcgX2luYWN0aXZlIHRvIGZhbHNlIGhlcmUgc28gdGhhdCBhIHJlbmRlciBmdW5jdGlvbiBjYW5cbiAgICAvLyByZWx5IG9uIGNoZWNraW5nIHdoZXRoZXIgaXQncyBpbiBhbiBpbmFjdGl2ZSB0cmVlIChlLmcuIHJvdXRlci12aWV3KVxuICAgIHZtLl9pbmFjdGl2ZSA9IGZhbHNlO1xuICAgIGFjdGl2YXRlZENoaWxkcmVuLnB1c2godm0pO1xufVxuZnVuY3Rpb24gY2FsbEFjdGl2YXRlZEhvb2tzKHF1ZXVlKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWV1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICBxdWV1ZVtpXS5faW5hY3RpdmUgPSB0cnVlO1xuICAgICAgICBhY3RpdmF0ZUNoaWxkQ29tcG9uZW50KHF1ZXVlW2ldLCB0cnVlIC8qIHRydWUgKi8pO1xuICAgIH1cbn1cbi8qKlxuICogUHVzaCBhIHdhdGNoZXIgaW50byB0aGUgd2F0Y2hlciBxdWV1ZS5cbiAqIEpvYnMgd2l0aCBkdXBsaWNhdGUgSURzIHdpbGwgYmUgc2tpcHBlZCB1bmxlc3MgaXQnc1xuICogcHVzaGVkIHdoZW4gdGhlIHF1ZXVlIGlzIGJlaW5nIGZsdXNoZWQuXG4gKi9cbmZ1bmN0aW9uIHF1ZXVlV2F0Y2hlcih3YXRjaGVyKSB7XG4gICAgdmFyIGlkID0gd2F0Y2hlci5pZDtcbiAgICBpZiAoaGFzW2lkXSAhPSBudWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHdhdGNoZXIgPT09IERlcC50YXJnZXQgJiYgd2F0Y2hlci5ub1JlY3Vyc2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBoYXNbaWRdID0gdHJ1ZTtcbiAgICBpZiAoIWZsdXNoaW5nKSB7XG4gICAgICAgIHF1ZXVlLnB1c2god2F0Y2hlcik7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICAvLyBpZiBhbHJlYWR5IGZsdXNoaW5nLCBzcGxpY2UgdGhlIHdhdGNoZXIgYmFzZWQgb24gaXRzIGlkXG4gICAgICAgIC8vIGlmIGFscmVhZHkgcGFzdCBpdHMgaWQsIGl0IHdpbGwgYmUgcnVuIG5leHQgaW1tZWRpYXRlbHkuXG4gICAgICAgIHZhciBpID0gcXVldWUubGVuZ3RoIC0gMTtcbiAgICAgICAgd2hpbGUgKGkgPiBpbmRleCQxICYmIHF1ZXVlW2ldLmlkID4gd2F0Y2hlci5pZCkge1xuICAgICAgICAgICAgaS0tO1xuICAgICAgICB9XG4gICAgICAgIHF1ZXVlLnNwbGljZShpICsgMSwgMCwgd2F0Y2hlcik7XG4gICAgfVxuICAgIC8vIHF1ZXVlIHRoZSBmbHVzaFxuICAgIGlmICghd2FpdGluZykge1xuICAgICAgICB3YWl0aW5nID0gdHJ1ZTtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIWNvbmZpZy5hc3luYykge1xuICAgICAgICAgICAgZmx1c2hTY2hlZHVsZXJRdWV1ZSgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIG5leHRUaWNrKGZsdXNoU2NoZWR1bGVyUXVldWUpO1xuICAgIH1cbn1cblxudmFyIFdBVENIRVIgPSBcIndhdGNoZXJcIjtcbnZhciBXQVRDSEVSX0NCID0gXCJcIi5jb25jYXQoV0FUQ0hFUiwgXCIgY2FsbGJhY2tcIik7XG52YXIgV0FUQ0hFUl9HRVRURVIgPSBcIlwiLmNvbmNhdChXQVRDSEVSLCBcIiBnZXR0ZXJcIik7XG52YXIgV0FUQ0hFUl9DTEVBTlVQID0gXCJcIi5jb25jYXQoV0FUQ0hFUiwgXCIgY2xlYW51cFwiKTtcbi8vIFNpbXBsZSBlZmZlY3QuXG5mdW5jdGlvbiB3YXRjaEVmZmVjdChlZmZlY3QsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gZG9XYXRjaChlZmZlY3QsIG51bGwsIG9wdGlvbnMpO1xufVxuZnVuY3Rpb24gd2F0Y2hQb3N0RWZmZWN0KGVmZmVjdCwgb3B0aW9ucykge1xuICAgIHJldHVybiBkb1dhdGNoKGVmZmVjdCwgbnVsbCwgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbidcbiAgICAgICAgPyBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgb3B0aW9ucyksIHsgZmx1c2g6ICdwb3N0JyB9KSA6IHsgZmx1c2g6ICdwb3N0JyB9KSk7XG59XG5mdW5jdGlvbiB3YXRjaFN5bmNFZmZlY3QoZWZmZWN0LCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIGRvV2F0Y2goZWZmZWN0LCBudWxsLCAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJ1xuICAgICAgICA/IF9fYXNzaWduKF9fYXNzaWduKHt9LCBvcHRpb25zKSwgeyBmbHVzaDogJ3N5bmMnIH0pIDogeyBmbHVzaDogJ3N5bmMnIH0pKTtcbn1cbi8vIGluaXRpYWwgdmFsdWUgZm9yIHdhdGNoZXJzIHRvIHRyaWdnZXIgb24gdW5kZWZpbmVkIGluaXRpYWwgdmFsdWVzXG52YXIgSU5JVElBTF9XQVRDSEVSX1ZBTFVFID0ge307XG4vLyBpbXBsZW1lbnRhdGlvblxuZnVuY3Rpb24gd2F0Y2goc291cmNlLCBjYiwgb3B0aW9ucykge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHR5cGVvZiBjYiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB3YXJuJDIoXCJgd2F0Y2goZm4sIG9wdGlvbnM/KWAgc2lnbmF0dXJlIGhhcyBiZWVuIG1vdmVkIHRvIGEgc2VwYXJhdGUgQVBJLiBcIiArXG4gICAgICAgICAgICBcIlVzZSBgd2F0Y2hFZmZlY3QoZm4sIG9wdGlvbnM/KWAgaW5zdGVhZC4gYHdhdGNoYCBub3cgb25seSBcIiArXG4gICAgICAgICAgICBcInN1cHBvcnRzIGB3YXRjaChzb3VyY2UsIGNiLCBvcHRpb25zPykgc2lnbmF0dXJlLlwiKTtcbiAgICB9XG4gICAgcmV0dXJuIGRvV2F0Y2goc291cmNlLCBjYiwgb3B0aW9ucyk7XG59XG5mdW5jdGlvbiBkb1dhdGNoKHNvdXJjZSwgY2IsIF9hKSB7XG4gICAgdmFyIF9iID0gX2EgPT09IHZvaWQgMCA/IGVtcHR5T2JqZWN0IDogX2EsIGltbWVkaWF0ZSA9IF9iLmltbWVkaWF0ZSwgZGVlcCA9IF9iLmRlZXAsIF9jID0gX2IuZmx1c2gsIGZsdXNoID0gX2MgPT09IHZvaWQgMCA/ICdwcmUnIDogX2MsIG9uVHJhY2sgPSBfYi5vblRyYWNrLCBvblRyaWdnZXIgPSBfYi5vblRyaWdnZXI7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIWNiKSB7XG4gICAgICAgIGlmIChpbW1lZGlhdGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgd2FybiQyKFwid2F0Y2goKSBcXFwiaW1tZWRpYXRlXFxcIiBvcHRpb24gaXMgb25seSByZXNwZWN0ZWQgd2hlbiB1c2luZyB0aGUgXCIgK1xuICAgICAgICAgICAgICAgIFwid2F0Y2goc291cmNlLCBjYWxsYmFjaywgb3B0aW9ucz8pIHNpZ25hdHVyZS5cIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRlZXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgd2FybiQyKFwid2F0Y2goKSBcXFwiZGVlcFxcXCIgb3B0aW9uIGlzIG9ubHkgcmVzcGVjdGVkIHdoZW4gdXNpbmcgdGhlIFwiICtcbiAgICAgICAgICAgICAgICBcIndhdGNoKHNvdXJjZSwgY2FsbGJhY2ssIG9wdGlvbnM/KSBzaWduYXR1cmUuXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZhciB3YXJuSW52YWxpZFNvdXJjZSA9IGZ1bmN0aW9uIChzKSB7XG4gICAgICAgIHdhcm4kMihcIkludmFsaWQgd2F0Y2ggc291cmNlOiBcIi5jb25jYXQocywgXCIuIEEgd2F0Y2ggc291cmNlIGNhbiBvbmx5IGJlIGEgZ2V0dGVyL2VmZmVjdCBcIikgK1xuICAgICAgICAgICAgXCJmdW5jdGlvbiwgYSByZWYsIGEgcmVhY3RpdmUgb2JqZWN0LCBvciBhbiBhcnJheSBvZiB0aGVzZSB0eXBlcy5cIik7XG4gICAgfTtcbiAgICB2YXIgaW5zdGFuY2UgPSBjdXJyZW50SW5zdGFuY2U7XG4gICAgdmFyIGNhbGwgPSBmdW5jdGlvbiAoZm4sIHR5cGUsIGFyZ3MpIHtcbiAgICAgICAgaWYgKGFyZ3MgPT09IHZvaWQgMCkgeyBhcmdzID0gbnVsbDsgfVxuICAgICAgICByZXR1cm4gaW52b2tlV2l0aEVycm9ySGFuZGxpbmcoZm4sIG51bGwsIGFyZ3MsIGluc3RhbmNlLCB0eXBlKTtcbiAgICB9O1xuICAgIHZhciBnZXR0ZXI7XG4gICAgdmFyIGZvcmNlVHJpZ2dlciA9IGZhbHNlO1xuICAgIHZhciBpc011bHRpU291cmNlID0gZmFsc2U7XG4gICAgaWYgKGlzUmVmKHNvdXJjZSkpIHtcbiAgICAgICAgZ2V0dGVyID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gc291cmNlLnZhbHVlOyB9O1xuICAgICAgICBmb3JjZVRyaWdnZXIgPSBpc1NoYWxsb3coc291cmNlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNSZWFjdGl2ZShzb3VyY2UpKSB7XG4gICAgICAgIGdldHRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHNvdXJjZS5fX29iX18uZGVwLmRlcGVuZCgpO1xuICAgICAgICAgICAgcmV0dXJuIHNvdXJjZTtcbiAgICAgICAgfTtcbiAgICAgICAgZGVlcCA9IHRydWU7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzQXJyYXkoc291cmNlKSkge1xuICAgICAgICBpc011bHRpU291cmNlID0gdHJ1ZTtcbiAgICAgICAgZm9yY2VUcmlnZ2VyID0gc291cmNlLnNvbWUoZnVuY3Rpb24gKHMpIHsgcmV0dXJuIGlzUmVhY3RpdmUocykgfHwgaXNTaGFsbG93KHMpOyB9KTtcbiAgICAgICAgZ2V0dGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHNvdXJjZS5tYXAoZnVuY3Rpb24gKHMpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNSZWYocykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHMudmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzUmVhY3RpdmUocykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRyYXZlcnNlKHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChpc0Z1bmN0aW9uKHMpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsKHMsIFdBVENIRVJfR0VUVEVSKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybkludmFsaWRTb3VyY2Uocyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzRnVuY3Rpb24oc291cmNlKSkge1xuICAgICAgICBpZiAoY2IpIHtcbiAgICAgICAgICAgIC8vIGdldHRlciB3aXRoIGNiXG4gICAgICAgICAgICBnZXR0ZXIgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBjYWxsKHNvdXJjZSwgV0FUQ0hFUl9HRVRURVIpOyB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gbm8gY2IgLT4gc2ltcGxlIGVmZmVjdFxuICAgICAgICAgICAgZ2V0dGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmIChpbnN0YW5jZSAmJiBpbnN0YW5jZS5faXNEZXN0cm95ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoY2xlYW51cCkge1xuICAgICAgICAgICAgICAgICAgICBjbGVhbnVwKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsKHNvdXJjZSwgV0FUQ0hFUiwgW29uQ2xlYW51cF0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZ2V0dGVyID0gbm9vcDtcbiAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuSW52YWxpZFNvdXJjZShzb3VyY2UpO1xuICAgIH1cbiAgICBpZiAoY2IgJiYgZGVlcCkge1xuICAgICAgICB2YXIgYmFzZUdldHRlcl8xID0gZ2V0dGVyO1xuICAgICAgICBnZXR0ZXIgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0cmF2ZXJzZShiYXNlR2V0dGVyXzEoKSk7IH07XG4gICAgfVxuICAgIHZhciBjbGVhbnVwO1xuICAgIHZhciBvbkNsZWFudXAgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgY2xlYW51cCA9IHdhdGNoZXIub25TdG9wID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY2FsbChmbiwgV0FUQ0hFUl9DTEVBTlVQKTtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIC8vIGluIFNTUiB0aGVyZSBpcyBubyBuZWVkIHRvIHNldHVwIGFuIGFjdHVhbCBlZmZlY3QsIGFuZCBpdCBzaG91bGQgYmUgbm9vcFxuICAgIC8vIHVubGVzcyBpdCdzIGVhZ2VyXG4gICAgaWYgKGlzU2VydmVyUmVuZGVyaW5nKCkpIHtcbiAgICAgICAgLy8gd2Ugd2lsbCBhbHNvIG5vdCBjYWxsIHRoZSBpbnZhbGlkYXRlIGNhbGxiYWNrICgrIHJ1bm5lciBpcyBub3Qgc2V0IHVwKVxuICAgICAgICBvbkNsZWFudXAgPSBub29wO1xuICAgICAgICBpZiAoIWNiKSB7XG4gICAgICAgICAgICBnZXR0ZXIoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpbW1lZGlhdGUpIHtcbiAgICAgICAgICAgIGNhbGwoY2IsIFdBVENIRVJfQ0IsIFtcbiAgICAgICAgICAgICAgICBnZXR0ZXIoKSxcbiAgICAgICAgICAgICAgICBpc011bHRpU291cmNlID8gW10gOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgb25DbGVhbnVwXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbm9vcDtcbiAgICB9XG4gICAgdmFyIHdhdGNoZXIgPSBuZXcgV2F0Y2hlcihjdXJyZW50SW5zdGFuY2UsIGdldHRlciwgbm9vcCwge1xuICAgICAgICBsYXp5OiB0cnVlXG4gICAgfSk7XG4gICAgd2F0Y2hlci5ub1JlY3Vyc2UgPSAhY2I7XG4gICAgdmFyIG9sZFZhbHVlID0gaXNNdWx0aVNvdXJjZSA/IFtdIDogSU5JVElBTF9XQVRDSEVSX1ZBTFVFO1xuICAgIC8vIG92ZXJ3cml0ZSBkZWZhdWx0IHJ1blxuICAgIHdhdGNoZXIucnVuID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXdhdGNoZXIuYWN0aXZlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNiKSB7XG4gICAgICAgICAgICAvLyB3YXRjaChzb3VyY2UsIGNiKVxuICAgICAgICAgICAgdmFyIG5ld1ZhbHVlID0gd2F0Y2hlci5nZXQoKTtcbiAgICAgICAgICAgIGlmIChkZWVwIHx8XG4gICAgICAgICAgICAgICAgZm9yY2VUcmlnZ2VyIHx8XG4gICAgICAgICAgICAgICAgKGlzTXVsdGlTb3VyY2VcbiAgICAgICAgICAgICAgICAgICAgPyBuZXdWYWx1ZS5zb21lKGZ1bmN0aW9uICh2LCBpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGFzQ2hhbmdlZCh2LCBvbGRWYWx1ZVtpXSk7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIDogaGFzQ2hhbmdlZChuZXdWYWx1ZSwgb2xkVmFsdWUpKSkge1xuICAgICAgICAgICAgICAgIC8vIGNsZWFudXAgYmVmb3JlIHJ1bm5pbmcgY2IgYWdhaW5cbiAgICAgICAgICAgICAgICBpZiAoY2xlYW51cCkge1xuICAgICAgICAgICAgICAgICAgICBjbGVhbnVwKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhbGwoY2IsIFdBVENIRVJfQ0IsIFtcbiAgICAgICAgICAgICAgICAgICAgbmV3VmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIC8vIHBhc3MgdW5kZWZpbmVkIGFzIHRoZSBvbGQgdmFsdWUgd2hlbiBpdCdzIGNoYW5nZWQgZm9yIHRoZSBmaXJzdCB0aW1lXG4gICAgICAgICAgICAgICAgICAgIG9sZFZhbHVlID09PSBJTklUSUFMX1dBVENIRVJfVkFMVUUgPyB1bmRlZmluZWQgOiBvbGRWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgb25DbGVhbnVwXG4gICAgICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICAgICAgb2xkVmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIHdhdGNoRWZmZWN0XG4gICAgICAgICAgICB3YXRjaGVyLmdldCgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBpZiAoZmx1c2ggPT09ICdzeW5jJykge1xuICAgICAgICB3YXRjaGVyLnVwZGF0ZSA9IHdhdGNoZXIucnVuO1xuICAgIH1cbiAgICBlbHNlIGlmIChmbHVzaCA9PT0gJ3Bvc3QnKSB7XG4gICAgICAgIHdhdGNoZXIucG9zdCA9IHRydWU7XG4gICAgICAgIHdhdGNoZXIudXBkYXRlID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gcXVldWVXYXRjaGVyKHdhdGNoZXIpOyB9O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgLy8gcHJlXG4gICAgICAgIHdhdGNoZXIudXBkYXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKGluc3RhbmNlICYmIGluc3RhbmNlID09PSBjdXJyZW50SW5zdGFuY2UgJiYgIWluc3RhbmNlLl9pc01vdW50ZWQpIHtcbiAgICAgICAgICAgICAgICAvLyBwcmUtd2F0Y2hlciB0cmlnZ2VyZWQgYmVmb3JlXG4gICAgICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IGluc3RhbmNlLl9wcmVXYXRjaGVycyB8fCAoaW5zdGFuY2UuX3ByZVdhdGNoZXJzID0gW10pO1xuICAgICAgICAgICAgICAgIGlmIChidWZmZXIuaW5kZXhPZih3YXRjaGVyKSA8IDApXG4gICAgICAgICAgICAgICAgICAgIGJ1ZmZlci5wdXNoKHdhdGNoZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcXVldWVXYXRjaGVyKHdhdGNoZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICB3YXRjaGVyLm9uVHJhY2sgPSBvblRyYWNrO1xuICAgICAgICB3YXRjaGVyLm9uVHJpZ2dlciA9IG9uVHJpZ2dlcjtcbiAgICB9XG4gICAgLy8gaW5pdGlhbCBydW5cbiAgICBpZiAoY2IpIHtcbiAgICAgICAgaWYgKGltbWVkaWF0ZSkge1xuICAgICAgICAgICAgd2F0Y2hlci5ydW4oKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG9sZFZhbHVlID0gd2F0Y2hlci5nZXQoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChmbHVzaCA9PT0gJ3Bvc3QnICYmIGluc3RhbmNlKSB7XG4gICAgICAgIGluc3RhbmNlLiRvbmNlKCdob29rOm1vdW50ZWQnLCBmdW5jdGlvbiAoKSB7IHJldHVybiB3YXRjaGVyLmdldCgpOyB9KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHdhdGNoZXIuZ2V0KCk7XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHdhdGNoZXIudGVhcmRvd24oKTtcbiAgICB9O1xufVxuXG52YXIgYWN0aXZlRWZmZWN0U2NvcGU7XG52YXIgRWZmZWN0U2NvcGUgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gRWZmZWN0U2NvcGUoZGV0YWNoZWQpIHtcbiAgICAgICAgaWYgKGRldGFjaGVkID09PSB2b2lkIDApIHsgZGV0YWNoZWQgPSBmYWxzZTsgfVxuICAgICAgICB0aGlzLmRldGFjaGVkID0gZGV0YWNoZWQ7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaW50ZXJuYWxcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBpbnRlcm5hbFxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5lZmZlY3RzID0gW107XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaW50ZXJuYWxcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuY2xlYW51cHMgPSBbXTtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBhY3RpdmVFZmZlY3RTY29wZTtcbiAgICAgICAgaWYgKCFkZXRhY2hlZCAmJiBhY3RpdmVFZmZlY3RTY29wZSkge1xuICAgICAgICAgICAgdGhpcy5pbmRleCA9XG4gICAgICAgICAgICAgICAgKGFjdGl2ZUVmZmVjdFNjb3BlLnNjb3BlcyB8fCAoYWN0aXZlRWZmZWN0U2NvcGUuc2NvcGVzID0gW10pKS5wdXNoKHRoaXMpIC0gMTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBFZmZlY3RTY29wZS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZSkge1xuICAgICAgICAgICAgdmFyIGN1cnJlbnRFZmZlY3RTY29wZSA9IGFjdGl2ZUVmZmVjdFNjb3BlO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBhY3RpdmVFZmZlY3RTY29wZSA9IHRoaXM7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICBhY3RpdmVFZmZlY3RTY29wZSA9IGN1cnJlbnRFZmZlY3RTY29wZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICB3YXJuJDIoXCJjYW5ub3QgcnVuIGFuIGluYWN0aXZlIGVmZmVjdCBzY29wZS5cIik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uIG5vbi1kZXRhY2hlZCBzY29wZXNcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBFZmZlY3RTY29wZS5wcm90b3R5cGUub24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGFjdGl2ZUVmZmVjdFNjb3BlID0gdGhpcztcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uIG5vbi1kZXRhY2hlZCBzY29wZXNcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBFZmZlY3RTY29wZS5wcm90b3R5cGUub2ZmID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBhY3RpdmVFZmZlY3RTY29wZSA9IHRoaXMucGFyZW50O1xuICAgIH07XG4gICAgRWZmZWN0U2NvcGUucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAoZnJvbVBhcmVudCkge1xuICAgICAgICBpZiAodGhpcy5hY3RpdmUpIHtcbiAgICAgICAgICAgIHZhciBpID0gdm9pZCAwLCBsID0gdm9pZCAwO1xuICAgICAgICAgICAgZm9yIChpID0gMCwgbCA9IHRoaXMuZWZmZWN0cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVmZmVjdHNbaV0udGVhcmRvd24oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoaSA9IDAsIGwgPSB0aGlzLmNsZWFudXBzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xlYW51cHNbaV0oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnNjb3Blcykge1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGwgPSB0aGlzLnNjb3Blcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zY29wZXNbaV0uc3RvcCh0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBuZXN0ZWQgc2NvcGUsIGRlcmVmZXJlbmNlIGZyb20gcGFyZW50IHRvIGF2b2lkIG1lbW9yeSBsZWFrc1xuICAgICAgICAgICAgaWYgKCF0aGlzLmRldGFjaGVkICYmIHRoaXMucGFyZW50ICYmICFmcm9tUGFyZW50KSB7XG4gICAgICAgICAgICAgICAgLy8gb3B0aW1pemVkIE8oMSkgcmVtb3ZhbFxuICAgICAgICAgICAgICAgIHZhciBsYXN0ID0gdGhpcy5wYXJlbnQuc2NvcGVzLnBvcCgpO1xuICAgICAgICAgICAgICAgIGlmIChsYXN0ICYmIGxhc3QgIT09IHRoaXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJlbnQuc2NvcGVzW3RoaXMuaW5kZXhdID0gbGFzdDtcbiAgICAgICAgICAgICAgICAgICAgbGFzdC5pbmRleCA9IHRoaXMuaW5kZXg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wYXJlbnQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gRWZmZWN0U2NvcGU7XG59KCkpO1xuZnVuY3Rpb24gZWZmZWN0U2NvcGUoZGV0YWNoZWQpIHtcbiAgICByZXR1cm4gbmV3IEVmZmVjdFNjb3BlKGRldGFjaGVkKTtcbn1cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIHJlY29yZEVmZmVjdFNjb3BlKGVmZmVjdCwgc2NvcGUpIHtcbiAgICBpZiAoc2NvcGUgPT09IHZvaWQgMCkgeyBzY29wZSA9IGFjdGl2ZUVmZmVjdFNjb3BlOyB9XG4gICAgaWYgKHNjb3BlICYmIHNjb3BlLmFjdGl2ZSkge1xuICAgICAgICBzY29wZS5lZmZlY3RzLnB1c2goZWZmZWN0KTtcbiAgICB9XG59XG5mdW5jdGlvbiBnZXRDdXJyZW50U2NvcGUoKSB7XG4gICAgcmV0dXJuIGFjdGl2ZUVmZmVjdFNjb3BlO1xufVxuZnVuY3Rpb24gb25TY29wZURpc3Bvc2UoZm4pIHtcbiAgICBpZiAoYWN0aXZlRWZmZWN0U2NvcGUpIHtcbiAgICAgICAgYWN0aXZlRWZmZWN0U2NvcGUuY2xlYW51cHMucHVzaChmbik7XG4gICAgfVxuICAgIGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgd2FybiQyKFwib25TY29wZURpc3Bvc2UoKSBpcyBjYWxsZWQgd2hlbiB0aGVyZSBpcyBubyBhY3RpdmUgZWZmZWN0IHNjb3BlXCIgK1xuICAgICAgICAgICAgXCIgdG8gYmUgYXNzb2NpYXRlZCB3aXRoLlwiKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHByb3ZpZGUoa2V5LCB2YWx1ZSkge1xuICAgIGlmICghY3VycmVudEluc3RhbmNlKSB7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICB3YXJuJDIoXCJwcm92aWRlKCkgY2FuIG9ubHkgYmUgdXNlZCBpbnNpZGUgc2V0dXAoKS5cIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIC8vIFRTIGRvZXNuJ3QgYWxsb3cgc3ltYm9sIGFzIGluZGV4IHR5cGVcbiAgICAgICAgcmVzb2x2ZVByb3ZpZGVkKGN1cnJlbnRJbnN0YW5jZSlba2V5XSA9IHZhbHVlO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHJlc29sdmVQcm92aWRlZCh2bSkge1xuICAgIC8vIGJ5IGRlZmF1bHQgYW4gaW5zdGFuY2UgaW5oZXJpdHMgaXRzIHBhcmVudCdzIHByb3ZpZGVzIG9iamVjdFxuICAgIC8vIGJ1dCB3aGVuIGl0IG5lZWRzIHRvIHByb3ZpZGUgdmFsdWVzIG9mIGl0cyBvd24sIGl0IGNyZWF0ZXMgaXRzXG4gICAgLy8gb3duIHByb3ZpZGVzIG9iamVjdCB1c2luZyBwYXJlbnQgcHJvdmlkZXMgb2JqZWN0IGFzIHByb3RvdHlwZS5cbiAgICAvLyB0aGlzIHdheSBpbiBgaW5qZWN0YCB3ZSBjYW4gc2ltcGx5IGxvb2sgdXAgaW5qZWN0aW9ucyBmcm9tIGRpcmVjdFxuICAgIC8vIHBhcmVudCBhbmQgbGV0IHRoZSBwcm90b3R5cGUgY2hhaW4gZG8gdGhlIHdvcmsuXG4gICAgdmFyIGV4aXN0aW5nID0gdm0uX3Byb3ZpZGVkO1xuICAgIHZhciBwYXJlbnRQcm92aWRlcyA9IHZtLiRwYXJlbnQgJiYgdm0uJHBhcmVudC5fcHJvdmlkZWQ7XG4gICAgaWYgKHBhcmVudFByb3ZpZGVzID09PSBleGlzdGluZykge1xuICAgICAgICByZXR1cm4gKHZtLl9wcm92aWRlZCA9IE9iamVjdC5jcmVhdGUocGFyZW50UHJvdmlkZXMpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBleGlzdGluZztcbiAgICB9XG59XG5mdW5jdGlvbiBpbmplY3Qoa2V5LCBkZWZhdWx0VmFsdWUsIHRyZWF0RGVmYXVsdEFzRmFjdG9yeSkge1xuICAgIGlmICh0cmVhdERlZmF1bHRBc0ZhY3RvcnkgPT09IHZvaWQgMCkgeyB0cmVhdERlZmF1bHRBc0ZhY3RvcnkgPSBmYWxzZTsgfVxuICAgIC8vIGZhbGxiYWNrIHRvIGBjdXJyZW50UmVuZGVyaW5nSW5zdGFuY2VgIHNvIHRoYXQgdGhpcyBjYW4gYmUgY2FsbGVkIGluXG4gICAgLy8gYSBmdW5jdGlvbmFsIGNvbXBvbmVudFxuICAgIHZhciBpbnN0YW5jZSA9IGN1cnJlbnRJbnN0YW5jZTtcbiAgICBpZiAoaW5zdGFuY2UpIHtcbiAgICAgICAgLy8gIzI0MDBcbiAgICAgICAgLy8gdG8gc3VwcG9ydCBgYXBwLnVzZWAgcGx1Z2lucyxcbiAgICAgICAgLy8gZmFsbGJhY2sgdG8gYXBwQ29udGV4dCdzIGBwcm92aWRlc2AgaWYgdGhlIGluc3RhbmNlIGlzIGF0IHJvb3RcbiAgICAgICAgdmFyIHByb3ZpZGVzID0gaW5zdGFuY2UuJHBhcmVudCAmJiBpbnN0YW5jZS4kcGFyZW50Ll9wcm92aWRlZDtcbiAgICAgICAgaWYgKHByb3ZpZGVzICYmIGtleSBpbiBwcm92aWRlcykge1xuICAgICAgICAgICAgLy8gVFMgZG9lc24ndCBhbGxvdyBzeW1ib2wgYXMgaW5kZXggdHlwZVxuICAgICAgICAgICAgcmV0dXJuIHByb3ZpZGVzW2tleV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHJldHVybiB0cmVhdERlZmF1bHRBc0ZhY3RvcnkgJiYgaXNGdW5jdGlvbihkZWZhdWx0VmFsdWUpXG4gICAgICAgICAgICAgICAgPyBkZWZhdWx0VmFsdWUuY2FsbChpbnN0YW5jZSlcbiAgICAgICAgICAgICAgICA6IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICB3YXJuJDIoXCJpbmplY3Rpb24gXFxcIlwiLmNvbmNhdChTdHJpbmcoa2V5KSwgXCJcXFwiIG5vdCBmb3VuZC5cIikpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgd2FybiQyKFwiaW5qZWN0KCkgY2FuIG9ubHkgYmUgdXNlZCBpbnNpZGUgc2V0dXAoKSBvciBmdW5jdGlvbmFsIGNvbXBvbmVudHMuXCIpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAaW50ZXJuYWwgdGhpcyBmdW5jdGlvbiBuZWVkcyBtYW51YWwgcHVibGljIHR5cGUgZGVjbGFyYXRpb24gYmVjYXVzZSBpdCByZWxpZXNcbiAqIG9uIHByZXZpb3VzbHkgbWFudWFsbHkgYXV0aG9yZWQgdHlwZXMgZnJvbSBWdWUgMlxuICovXG5mdW5jdGlvbiBoKHR5cGUsIHByb3BzLCBjaGlsZHJlbikge1xuICAgIGlmICghY3VycmVudEluc3RhbmNlKSB7XG4gICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICAgICAgICAgIHdhcm4kMihcImdsb2JhbGx5IGltcG9ydGVkIGgoKSBjYW4gb25seSBiZSBpbnZva2VkIHdoZW4gdGhlcmUgaXMgYW4gYWN0aXZlIFwiICtcbiAgICAgICAgICAgICAgICBcImNvbXBvbmVudCBpbnN0YW5jZSwgZS5nLiBzeW5jaHJvbm91c2x5IGluIGEgY29tcG9uZW50J3MgcmVuZGVyIG9yIHNldHVwIGZ1bmN0aW9uLlwiKTtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQkMShjdXJyZW50SW5zdGFuY2UsIHR5cGUsIHByb3BzLCBjaGlsZHJlbiwgMiwgdHJ1ZSk7XG59XG5cbmZ1bmN0aW9uIGhhbmRsZUVycm9yKGVyciwgdm0sIGluZm8pIHtcbiAgICAvLyBEZWFjdGl2YXRlIGRlcHMgdHJhY2tpbmcgd2hpbGUgcHJvY2Vzc2luZyBlcnJvciBoYW5kbGVyIHRvIGF2b2lkIHBvc3NpYmxlIGluZmluaXRlIHJlbmRlcmluZy5cbiAgICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWV4L2lzc3Vlcy8xNTA1XG4gICAgcHVzaFRhcmdldCgpO1xuICAgIHRyeSB7XG4gICAgICAgIGlmICh2bSkge1xuICAgICAgICAgICAgdmFyIGN1ciA9IHZtO1xuICAgICAgICAgICAgd2hpbGUgKChjdXIgPSBjdXIuJHBhcmVudCkpIHtcbiAgICAgICAgICAgICAgICB2YXIgaG9va3MgPSBjdXIuJG9wdGlvbnMuZXJyb3JDYXB0dXJlZDtcbiAgICAgICAgICAgICAgICBpZiAoaG9va3MpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBob29rcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FwdHVyZSA9IGhvb2tzW2ldLmNhbGwoY3VyLCBlcnIsIHZtLCBpbmZvKSA9PT0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhcHR1cmUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsSGFuZGxlRXJyb3IoZSwgY3VyLCAnZXJyb3JDYXB0dXJlZCBob29rJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZ2xvYmFsSGFuZGxlRXJyb3IoZXJyLCB2bSwgaW5mbyk7XG4gICAgfVxuICAgIGZpbmFsbHkge1xuICAgICAgICBwb3BUYXJnZXQoKTtcbiAgICB9XG59XG5mdW5jdGlvbiBpbnZva2VXaXRoRXJyb3JIYW5kbGluZyhoYW5kbGVyLCBjb250ZXh0LCBhcmdzLCB2bSwgaW5mbykge1xuICAgIHZhciByZXM7XG4gICAgdHJ5IHtcbiAgICAgICAgcmVzID0gYXJncyA/IGhhbmRsZXIuYXBwbHkoY29udGV4dCwgYXJncykgOiBoYW5kbGVyLmNhbGwoY29udGV4dCk7XG4gICAgICAgIGlmIChyZXMgJiYgIXJlcy5faXNWdWUgJiYgaXNQcm9taXNlKHJlcykgJiYgIXJlcy5faGFuZGxlZCkge1xuICAgICAgICAgICAgcmVzLmNhdGNoKGZ1bmN0aW9uIChlKSB7IHJldHVybiBoYW5kbGVFcnJvcihlLCB2bSwgaW5mbyArIFwiIChQcm9taXNlL2FzeW5jKVwiKTsgfSk7XG4gICAgICAgICAgICByZXMuX2hhbmRsZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIGhhbmRsZUVycm9yKGUsIHZtLCBpbmZvKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbn1cbmZ1bmN0aW9uIGdsb2JhbEhhbmRsZUVycm9yKGVyciwgdm0sIGluZm8pIHtcbiAgICBpZiAoY29uZmlnLmVycm9ySGFuZGxlcikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZy5lcnJvckhhbmRsZXIuY2FsbChudWxsLCBlcnIsIHZtLCBpbmZvKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgLy8gaWYgdGhlIHVzZXIgaW50ZW50aW9uYWxseSB0aHJvd3MgdGhlIG9yaWdpbmFsIGVycm9yIGluIHRoZSBoYW5kbGVyLFxuICAgICAgICAgICAgLy8gZG8gbm90IGxvZyBpdCB0d2ljZVxuICAgICAgICAgICAgaWYgKGUgIT09IGVycikge1xuICAgICAgICAgICAgICAgIGxvZ0Vycm9yKGUsIG51bGwsICdjb25maWcuZXJyb3JIYW5kbGVyJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgbG9nRXJyb3IoZXJyLCB2bSwgaW5mbyk7XG59XG5mdW5jdGlvbiBsb2dFcnJvcihlcnIsIHZtLCBpbmZvKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgd2FybiQyKFwiRXJyb3IgaW4gXCIuY29uY2F0KGluZm8sIFwiOiBcXFwiXCIpLmNvbmNhdChlcnIudG9TdHJpbmcoKSwgXCJcXFwiXCIpLCB2bSk7XG4gICAgfVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKGluQnJvd3NlciAmJiB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbn1cblxuLyogZ2xvYmFscyBNdXRhdGlvbk9ic2VydmVyICovXG52YXIgaXNVc2luZ01pY3JvVGFzayA9IGZhbHNlO1xudmFyIGNhbGxiYWNrcyA9IFtdO1xudmFyIHBlbmRpbmcgPSBmYWxzZTtcbmZ1bmN0aW9uIGZsdXNoQ2FsbGJhY2tzKCkge1xuICAgIHBlbmRpbmcgPSBmYWxzZTtcbiAgICB2YXIgY29waWVzID0gY2FsbGJhY2tzLnNsaWNlKDApO1xuICAgIGNhbGxiYWNrcy5sZW5ndGggPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29waWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvcGllc1tpXSgpO1xuICAgIH1cbn1cbi8vIEhlcmUgd2UgaGF2ZSBhc3luYyBkZWZlcnJpbmcgd3JhcHBlcnMgdXNpbmcgbWljcm90YXNrcy5cbi8vIEluIDIuNSB3ZSB1c2VkIChtYWNybykgdGFza3MgKGluIGNvbWJpbmF0aW9uIHdpdGggbWljcm90YXNrcykuXG4vLyBIb3dldmVyLCBpdCBoYXMgc3VidGxlIHByb2JsZW1zIHdoZW4gc3RhdGUgaXMgY2hhbmdlZCByaWdodCBiZWZvcmUgcmVwYWludFxuLy8gKGUuZy4gIzY4MTMsIG91dC1pbiB0cmFuc2l0aW9ucykuXG4vLyBBbHNvLCB1c2luZyAobWFjcm8pIHRhc2tzIGluIGV2ZW50IGhhbmRsZXIgd291bGQgY2F1c2Ugc29tZSB3ZWlyZCBiZWhhdmlvcnNcbi8vIHRoYXQgY2Fubm90IGJlIGNpcmN1bXZlbnRlZCAoZS5nLiAjNzEwOSwgIzcxNTMsICM3NTQ2LCAjNzgzNCwgIzgxMDkpLlxuLy8gU28gd2Ugbm93IHVzZSBtaWNyb3Rhc2tzIGV2ZXJ5d2hlcmUsIGFnYWluLlxuLy8gQSBtYWpvciBkcmF3YmFjayBvZiB0aGlzIHRyYWRlb2ZmIGlzIHRoYXQgdGhlcmUgYXJlIHNvbWUgc2NlbmFyaW9zXG4vLyB3aGVyZSBtaWNyb3Rhc2tzIGhhdmUgdG9vIGhpZ2ggYSBwcmlvcml0eSBhbmQgZmlyZSBpbiBiZXR3ZWVuIHN1cHBvc2VkbHlcbi8vIHNlcXVlbnRpYWwgZXZlbnRzIChlLmcuICM0NTIxLCAjNjY5MCwgd2hpY2ggaGF2ZSB3b3JrYXJvdW5kcylcbi8vIG9yIGV2ZW4gYmV0d2VlbiBidWJibGluZyBvZiB0aGUgc2FtZSBldmVudCAoIzY1NjYpLlxudmFyIHRpbWVyRnVuYztcbi8vIFRoZSBuZXh0VGljayBiZWhhdmlvciBsZXZlcmFnZXMgdGhlIG1pY3JvdGFzayBxdWV1ZSwgd2hpY2ggY2FuIGJlIGFjY2Vzc2VkXG4vLyB2aWEgZWl0aGVyIG5hdGl2ZSBQcm9taXNlLnRoZW4gb3IgTXV0YXRpb25PYnNlcnZlci5cbi8vIE11dGF0aW9uT2JzZXJ2ZXIgaGFzIHdpZGVyIHN1cHBvcnQsIGhvd2V2ZXIgaXQgaXMgc2VyaW91c2x5IGJ1Z2dlZCBpblxuLy8gVUlXZWJWaWV3IGluIGlPUyA+PSA5LjMuMyB3aGVuIHRyaWdnZXJlZCBpbiB0b3VjaCBldmVudCBoYW5kbGVycy4gSXRcbi8vIGNvbXBsZXRlbHkgc3RvcHMgd29ya2luZyBhZnRlciB0cmlnZ2VyaW5nIGEgZmV3IHRpbWVzLi4uIHNvLCBpZiBuYXRpdmVcbi8vIFByb21pc2UgaXMgYXZhaWxhYmxlLCB3ZSB3aWxsIHVzZSBpdDpcbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0LCAkZmxvdy1kaXNhYmxlLWxpbmUgKi9cbmlmICh0eXBlb2YgUHJvbWlzZSAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNOYXRpdmUoUHJvbWlzZSkpIHtcbiAgICB2YXIgcF8xID0gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgdGltZXJGdW5jID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBwXzEudGhlbihmbHVzaENhbGxiYWNrcyk7XG4gICAgICAgIC8vIEluIHByb2JsZW1hdGljIFVJV2ViVmlld3MsIFByb21pc2UudGhlbiBkb2Vzbid0IGNvbXBsZXRlbHkgYnJlYWssIGJ1dFxuICAgICAgICAvLyBpdCBjYW4gZ2V0IHN0dWNrIGluIGEgd2VpcmQgc3RhdGUgd2hlcmUgY2FsbGJhY2tzIGFyZSBwdXNoZWQgaW50byB0aGVcbiAgICAgICAgLy8gbWljcm90YXNrIHF1ZXVlIGJ1dCB0aGUgcXVldWUgaXNuJ3QgYmVpbmcgZmx1c2hlZCwgdW50aWwgdGhlIGJyb3dzZXJcbiAgICAgICAgLy8gbmVlZHMgdG8gZG8gc29tZSBvdGhlciB3b3JrLCBlLmcuIGhhbmRsZSBhIHRpbWVyLiBUaGVyZWZvcmUgd2UgY2FuXG4gICAgICAgIC8vIFwiZm9yY2VcIiB0aGUgbWljcm90YXNrIHF1ZXVlIHRvIGJlIGZsdXNoZWQgYnkgYWRkaW5nIGFuIGVtcHR5IHRpbWVyLlxuICAgICAgICBpZiAoaXNJT1MpXG4gICAgICAgICAgICBzZXRUaW1lb3V0KG5vb3ApO1xuICAgIH07XG4gICAgaXNVc2luZ01pY3JvVGFzayA9IHRydWU7XG59XG5lbHNlIGlmICghaXNJRSAmJlxuICAgIHR5cGVvZiBNdXRhdGlvbk9ic2VydmVyICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIChpc05hdGl2ZShNdXRhdGlvbk9ic2VydmVyKSB8fFxuICAgICAgICAvLyBQaGFudG9tSlMgYW5kIGlPUyA3LnhcbiAgICAgICAgTXV0YXRpb25PYnNlcnZlci50b1N0cmluZygpID09PSAnW29iamVjdCBNdXRhdGlvbk9ic2VydmVyQ29uc3RydWN0b3JdJykpIHtcbiAgICAvLyBVc2UgTXV0YXRpb25PYnNlcnZlciB3aGVyZSBuYXRpdmUgUHJvbWlzZSBpcyBub3QgYXZhaWxhYmxlLFxuICAgIC8vIGUuZy4gUGhhbnRvbUpTLCBpT1M3LCBBbmRyb2lkIDQuNFxuICAgIC8vICgjNjQ2NiBNdXRhdGlvbk9ic2VydmVyIGlzIHVucmVsaWFibGUgaW4gSUUxMSlcbiAgICB2YXIgY291bnRlcl8xID0gMTtcbiAgICB2YXIgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihmbHVzaENhbGxiYWNrcyk7XG4gICAgdmFyIHRleHROb2RlXzEgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShTdHJpbmcoY291bnRlcl8xKSk7XG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZSh0ZXh0Tm9kZV8xLCB7XG4gICAgICAgIGNoYXJhY3RlckRhdGE6IHRydWVcbiAgICB9KTtcbiAgICB0aW1lckZ1bmMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvdW50ZXJfMSA9IChjb3VudGVyXzEgKyAxKSAlIDI7XG4gICAgICAgIHRleHROb2RlXzEuZGF0YSA9IFN0cmluZyhjb3VudGVyXzEpO1xuICAgIH07XG4gICAgaXNVc2luZ01pY3JvVGFzayA9IHRydWU7XG59XG5lbHNlIGlmICh0eXBlb2Ygc2V0SW1tZWRpYXRlICE9PSAndW5kZWZpbmVkJyAmJiBpc05hdGl2ZShzZXRJbW1lZGlhdGUpKSB7XG4gICAgLy8gRmFsbGJhY2sgdG8gc2V0SW1tZWRpYXRlLlxuICAgIC8vIFRlY2huaWNhbGx5IGl0IGxldmVyYWdlcyB0aGUgKG1hY3JvKSB0YXNrIHF1ZXVlLFxuICAgIC8vIGJ1dCBpdCBpcyBzdGlsbCBhIGJldHRlciBjaG9pY2UgdGhhbiBzZXRUaW1lb3V0LlxuICAgIHRpbWVyRnVuYyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2V0SW1tZWRpYXRlKGZsdXNoQ2FsbGJhY2tzKTtcbiAgICB9O1xufVxuZWxzZSB7XG4gICAgLy8gRmFsbGJhY2sgdG8gc2V0VGltZW91dC5cbiAgICB0aW1lckZ1bmMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZmx1c2hDYWxsYmFja3MsIDApO1xuICAgIH07XG59XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBuZXh0VGljayhjYiwgY3R4KSB7XG4gICAgdmFyIF9yZXNvbHZlO1xuICAgIGNhbGxiYWNrcy5wdXNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKGNiKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNiLmNhbGwoY3R4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlRXJyb3IoZSwgY3R4LCAnbmV4dFRpY2snKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChfcmVzb2x2ZSkge1xuICAgICAgICAgICAgX3Jlc29sdmUoY3R4KTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGlmICghcGVuZGluZykge1xuICAgICAgICBwZW5kaW5nID0gdHJ1ZTtcbiAgICAgICAgdGltZXJGdW5jKCk7XG4gICAgfVxuICAgIC8vICRmbG93LWRpc2FibGUtbGluZVxuICAgIGlmICghY2IgJiYgdHlwZW9mIFByb21pc2UgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICAgICAgX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHVzZUNzc01vZHVsZShuYW1lKSB7XG4gICAgaWYgKG5hbWUgPT09IHZvaWQgMCkgeyBuYW1lID0gJyRzdHlsZSc7IH1cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIHtcbiAgICAgICAgaWYgKCFjdXJyZW50SW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybiQyKFwidXNlQ3NzTW9kdWxlIG11c3QgYmUgY2FsbGVkIGluc2lkZSBzZXR1cCgpXCIpO1xuICAgICAgICAgICAgcmV0dXJuIGVtcHR5T2JqZWN0O1xuICAgICAgICB9XG4gICAgICAgIHZhciBtb2QgPSBjdXJyZW50SW5zdGFuY2VbbmFtZV07XG4gICAgICAgIGlmICghbW9kKSB7XG4gICAgICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgICAgICAgICAgICAgd2FybiQyKFwiQ3VycmVudCBpbnN0YW5jZSBkb2VzIG5vdCBoYXZlIENTUyBtb2R1bGUgbmFtZWQgXFxcIlwiLmNvbmNhdChuYW1lLCBcIlxcXCIuXCIpKTtcbiAgICAgICAgICAgIHJldHVybiBlbXB0eU9iamVjdDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbW9kO1xuICAgIH1cbn1cblxuLyoqXG4gKiBSdW50aW1lIGhlbHBlciBmb3IgU0ZDJ3MgQ1NTIHZhcmlhYmxlIGluamVjdGlvbiBmZWF0dXJlLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gdXNlQ3NzVmFycyhnZXR0ZXIpIHtcbiAgICBpZiAoIWluQnJvd3NlciAmJiAhZmFsc2UpXG4gICAgICAgIHJldHVybjtcbiAgICB2YXIgaW5zdGFuY2UgPSBjdXJyZW50SW5zdGFuY2U7XG4gICAgaWYgKCFpbnN0YW5jZSkge1xuICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgICAgICAgICB3YXJuJDIoXCJ1c2VDc3NWYXJzIGlzIGNhbGxlZCB3aXRob3V0IGN1cnJlbnQgYWN0aXZlIGNvbXBvbmVudCBpbnN0YW5jZS5cIik7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgd2F0Y2hQb3N0RWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGVsID0gaW5zdGFuY2UuJGVsO1xuICAgICAgICB2YXIgdmFycyA9IGdldHRlcihpbnN0YW5jZSwgaW5zdGFuY2UuX3NldHVwUHJveHkpO1xuICAgICAgICBpZiAoZWwgJiYgZWwubm9kZVR5cGUgPT09IDEpIHtcbiAgICAgICAgICAgIHZhciBzdHlsZSA9IGVsLnN0eWxlO1xuICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHZhcnMpIHtcbiAgICAgICAgICAgICAgICBzdHlsZS5zZXRQcm9wZXJ0eShcIi0tXCIuY29uY2F0KGtleSksIHZhcnNba2V5XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbn1cblxuLyoqXG4gKiB2My1jb21wYXRpYmxlIGFzeW5jIGNvbXBvbmVudCBBUEkuXG4gKiBAaW50ZXJuYWwgdGhlIHR5cGUgaXMgbWFudWFsbHkgZGVjbGFyZWQgaW4gPHJvb3Q+L3R5cGVzL3YzLWRlZmluZS1hc3luYy1jb21wb25lbnQuZC50c1xuICogYmVjYXVzZSBpdCByZWxpZXMgb24gZXhpc3RpbmcgbWFudWFsIHR5cGVzXG4gKi9cbmZ1bmN0aW9uIGRlZmluZUFzeW5jQ29tcG9uZW50KHNvdXJjZSkge1xuICAgIGlmIChpc0Z1bmN0aW9uKHNvdXJjZSkpIHtcbiAgICAgICAgc291cmNlID0geyBsb2FkZXI6IHNvdXJjZSB9O1xuICAgIH1cbiAgICB2YXIgbG9hZGVyID0gc291cmNlLmxvYWRlciwgbG9hZGluZ0NvbXBvbmVudCA9IHNvdXJjZS5sb2FkaW5nQ29tcG9uZW50LCBlcnJvckNvbXBvbmVudCA9IHNvdXJjZS5lcnJvckNvbXBvbmVudCwgX2EgPSBzb3VyY2UuZGVsYXksIGRlbGF5ID0gX2EgPT09IHZvaWQgMCA/IDIwMCA6IF9hLCB0aW1lb3V0ID0gc291cmNlLnRpbWVvdXQsIC8vIHVuZGVmaW5lZCA9IG5ldmVyIHRpbWVzIG91dFxuICAgIF9iID0gc291cmNlLnN1c3BlbnNpYmxlLCAvLyB1bmRlZmluZWQgPSBuZXZlciB0aW1lcyBvdXRcbiAgICBzdXNwZW5zaWJsZSA9IF9iID09PSB2b2lkIDAgPyBmYWxzZSA6IF9iLCAvLyBpbiBWdWUgMyBkZWZhdWx0IGlzIHRydWVcbiAgICB1c2VyT25FcnJvciA9IHNvdXJjZS5vbkVycm9yO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHN1c3BlbnNpYmxlKSB7XG4gICAgICAgIHdhcm4kMihcIlRoZSBzdXNwZW5zaWJsYmUgb3B0aW9uIGZvciBhc3luYyBjb21wb25lbnRzIGlzIG5vdCBzdXBwb3J0ZWQgaW4gVnVlMi4gSXQgaXMgaWdub3JlZC5cIik7XG4gICAgfVxuICAgIHZhciBwZW5kaW5nUmVxdWVzdCA9IG51bGw7XG4gICAgdmFyIHJldHJpZXMgPSAwO1xuICAgIHZhciByZXRyeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0cmllcysrO1xuICAgICAgICBwZW5kaW5nUmVxdWVzdCA9IG51bGw7XG4gICAgICAgIHJldHVybiBsb2FkKCk7XG4gICAgfTtcbiAgICB2YXIgbG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHRoaXNSZXF1ZXN0O1xuICAgICAgICByZXR1cm4gKHBlbmRpbmdSZXF1ZXN0IHx8XG4gICAgICAgICAgICAodGhpc1JlcXVlc3QgPSBwZW5kaW5nUmVxdWVzdCA9XG4gICAgICAgICAgICAgICAgbG9hZGVyKClcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIgOiBuZXcgRXJyb3IoU3RyaW5nKGVycikpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodXNlck9uRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVzZXJSZXRyeSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlc29sdmUocmV0cnkoKSk7IH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVzZXJGYWlsID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVqZWN0KGVycik7IH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlck9uRXJyb3IoZXJyLCB1c2VyUmV0cnksIHVzZXJGYWlsLCByZXRyaWVzICsgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChjb21wKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzUmVxdWVzdCAhPT0gcGVuZGluZ1JlcXVlc3QgJiYgcGVuZGluZ1JlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwZW5kaW5nUmVxdWVzdDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhY29tcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2FybiQyKFwiQXN5bmMgY29tcG9uZW50IGxvYWRlciByZXNvbHZlZCB0byB1bmRlZmluZWQuIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIklmIHlvdSBhcmUgdXNpbmcgcmV0cnkoKSwgbWFrZSBzdXJlIHRvIHJldHVybiBpdHMgcmV0dXJuIHZhbHVlLlwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBpbnRlcm9wIG1vZHVsZSBkZWZhdWx0XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21wICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAoY29tcC5fX2VzTW9kdWxlIHx8IGNvbXBbU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gJ01vZHVsZScpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wID0gY29tcC5kZWZhdWx0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGNvbXAgJiYgIWlzT2JqZWN0KGNvbXApICYmICFpc0Z1bmN0aW9uKGNvbXApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGFzeW5jIGNvbXBvbmVudCBsb2FkIHJlc3VsdDogXCIuY29uY2F0KGNvbXApKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29tcDtcbiAgICAgICAgICAgICAgICB9KSkpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGNvbXBvbmVudCA9IGxvYWQoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbXBvbmVudDogY29tcG9uZW50LFxuICAgICAgICAgICAgZGVsYXk6IGRlbGF5LFxuICAgICAgICAgICAgdGltZW91dDogdGltZW91dCxcbiAgICAgICAgICAgIGVycm9yOiBlcnJvckNvbXBvbmVudCxcbiAgICAgICAgICAgIGxvYWRpbmc6IGxvYWRpbmdDb21wb25lbnRcbiAgICAgICAgfTtcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVMaWZlQ3ljbGUoaG9va05hbWUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGZuLCB0YXJnZXQpIHtcbiAgICAgICAgaWYgKHRhcmdldCA9PT0gdm9pZCAwKSB7IHRhcmdldCA9IGN1cnJlbnRJbnN0YW5jZTsgfVxuICAgICAgICBpZiAoIXRhcmdldCkge1xuICAgICAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgICAgICAgICAgICAgIHdhcm4kMihcIlwiLmNvbmNhdChmb3JtYXROYW1lKGhvb2tOYW1lKSwgXCIgaXMgY2FsbGVkIHdoZW4gdGhlcmUgaXMgbm8gYWN0aXZlIGNvbXBvbmVudCBpbnN0YW5jZSB0byBiZSBcIikgK1xuICAgICAgICAgICAgICAgICAgICBcImFzc29jaWF0ZWQgd2l0aC4gXCIgK1xuICAgICAgICAgICAgICAgICAgICBcIkxpZmVjeWNsZSBpbmplY3Rpb24gQVBJcyBjYW4gb25seSBiZSB1c2VkIGR1cmluZyBleGVjdXRpb24gb2Ygc2V0dXAoKS5cIik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGluamVjdEhvb2sodGFyZ2V0LCBob29rTmFtZSwgZm4pO1xuICAgIH07XG59XG5mdW5jdGlvbiBmb3JtYXROYW1lKG5hbWUpIHtcbiAgICBpZiAobmFtZSA9PT0gJ2JlZm9yZURlc3Ryb3knKSB7XG4gICAgICAgIG5hbWUgPSAnYmVmb3JlVW5tb3VudCc7XG4gICAgfVxuICAgIGVsc2UgaWYgKG5hbWUgPT09ICdkZXN0cm95ZWQnKSB7XG4gICAgICAgIG5hbWUgPSAndW5tb3VudGVkJztcbiAgICB9XG4gICAgcmV0dXJuIFwib25cIi5jb25jYXQobmFtZVswXS50b1VwcGVyQ2FzZSgpICsgbmFtZS5zbGljZSgxKSk7XG59XG5mdW5jdGlvbiBpbmplY3RIb29rKGluc3RhbmNlLCBob29rTmFtZSwgZm4pIHtcbiAgICB2YXIgb3B0aW9ucyA9IGluc3RhbmNlLiRvcHRpb25zO1xuICAgIG9wdGlvbnNbaG9va05hbWVdID0gbWVyZ2VMaWZlY3ljbGVIb29rKG9wdGlvbnNbaG9va05hbWVdLCBmbik7XG59XG52YXIgb25CZWZvcmVNb3VudCA9IGNyZWF0ZUxpZmVDeWNsZSgnYmVmb3JlTW91bnQnKTtcbnZhciBvbk1vdW50ZWQgPSBjcmVhdGVMaWZlQ3ljbGUoJ21vdW50ZWQnKTtcbnZhciBvbkJlZm9yZVVwZGF0ZSA9IGNyZWF0ZUxpZmVDeWNsZSgnYmVmb3JlVXBkYXRlJyk7XG52YXIgb25VcGRhdGVkID0gY3JlYXRlTGlmZUN5Y2xlKCd1cGRhdGVkJyk7XG52YXIgb25CZWZvcmVVbm1vdW50ID0gY3JlYXRlTGlmZUN5Y2xlKCdiZWZvcmVEZXN0cm95Jyk7XG52YXIgb25Vbm1vdW50ZWQgPSBjcmVhdGVMaWZlQ3ljbGUoJ2Rlc3Ryb3llZCcpO1xudmFyIG9uQWN0aXZhdGVkID0gY3JlYXRlTGlmZUN5Y2xlKCdhY3RpdmF0ZWQnKTtcbnZhciBvbkRlYWN0aXZhdGVkID0gY3JlYXRlTGlmZUN5Y2xlKCdkZWFjdGl2YXRlZCcpO1xudmFyIG9uU2VydmVyUHJlZmV0Y2ggPSBjcmVhdGVMaWZlQ3ljbGUoJ3NlcnZlclByZWZldGNoJyk7XG52YXIgb25SZW5kZXJUcmFja2VkID0gY3JlYXRlTGlmZUN5Y2xlKCdyZW5kZXJUcmFja2VkJyk7XG52YXIgb25SZW5kZXJUcmlnZ2VyZWQgPSBjcmVhdGVMaWZlQ3ljbGUoJ3JlbmRlclRyaWdnZXJlZCcpO1xudmFyIGluamVjdEVycm9yQ2FwdHVyZWRIb29rID0gY3JlYXRlTGlmZUN5Y2xlKCdlcnJvckNhcHR1cmVkJyk7XG5mdW5jdGlvbiBvbkVycm9yQ2FwdHVyZWQoaG9vaywgdGFyZ2V0KSB7XG4gICAgaWYgKHRhcmdldCA9PT0gdm9pZCAwKSB7IHRhcmdldCA9IGN1cnJlbnRJbnN0YW5jZTsgfVxuICAgIGluamVjdEVycm9yQ2FwdHVyZWRIb29rKGhvb2ssIHRhcmdldCk7XG59XG5cbi8qKlxuICogTm90ZTogYWxzbyB1cGRhdGUgZGlzdC92dWUucnVudGltZS5tanMgd2hlbiBhZGRpbmcgbmV3IGV4cG9ydHMgdG8gdGhpcyBmaWxlLlxuICovXG52YXIgdmVyc2lvbiA9ICcyLjcuMTQnO1xuLyoqXG4gKiBAaW50ZXJuYWwgdHlwZSBpcyBtYW51YWxseSBkZWNsYXJlZCBpbiA8cm9vdD4vdHlwZXMvdjMtZGVmaW5lLWNvbXBvbmVudC5kLnRzXG4gKi9cbmZ1bmN0aW9uIGRlZmluZUNvbXBvbmVudChvcHRpb25zKSB7XG4gICAgcmV0dXJuIG9wdGlvbnM7XG59XG5cbnZhciBzZWVuT2JqZWN0cyA9IG5ldyBfU2V0KCk7XG4vKipcbiAqIFJlY3Vyc2l2ZWx5IHRyYXZlcnNlIGFuIG9iamVjdCB0byBldm9rZSBhbGwgY29udmVydGVkXG4gKiBnZXR0ZXJzLCBzbyB0aGF0IGV2ZXJ5IG5lc3RlZCBwcm9wZXJ0eSBpbnNpZGUgdGhlIG9iamVjdFxuICogaXMgY29sbGVjdGVkIGFzIGEgXCJkZWVwXCIgZGVwZW5kZW5jeS5cbiAqL1xuZnVuY3Rpb24gdHJhdmVyc2UodmFsKSB7XG4gICAgX3RyYXZlcnNlKHZhbCwgc2Vlbk9iamVjdHMpO1xuICAgIHNlZW5PYmplY3RzLmNsZWFyKCk7XG4gICAgcmV0dXJuIHZhbDtcbn1cbmZ1bmN0aW9uIF90cmF2ZXJzZSh2YWwsIHNlZW4pIHtcbiAgICB2YXIgaSwga2V5cztcbiAgICB2YXIgaXNBID0gaXNBcnJheSh2YWwpO1xuICAgIGlmICgoIWlzQSAmJiAhaXNPYmplY3QodmFsKSkgfHxcbiAgICAgICAgdmFsLl9fdl9za2lwIC8qIFJlYWN0aXZlRmxhZ3MuU0tJUCAqLyB8fFxuICAgICAgICBPYmplY3QuaXNGcm96ZW4odmFsKSB8fFxuICAgICAgICB2YWwgaW5zdGFuY2VvZiBWTm9kZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh2YWwuX19vYl9fKSB7XG4gICAgICAgIHZhciBkZXBJZCA9IHZhbC5fX29iX18uZGVwLmlkO1xuICAgICAgICBpZiAoc2Vlbi5oYXMoZGVwSWQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc2Vlbi5hZGQoZGVwSWQpO1xuICAgIH1cbiAgICBpZiAoaXNBKSB7XG4gICAgICAgIGkgPSB2YWwubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoaS0tKVxuICAgICAgICAgICAgX3RyYXZlcnNlKHZhbFtpXSwgc2Vlbik7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzUmVmKHZhbCkpIHtcbiAgICAgICAgX3RyYXZlcnNlKHZhbC52YWx1ZSwgc2Vlbik7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBrZXlzID0gT2JqZWN0LmtleXModmFsKTtcbiAgICAgICAgaSA9IGtleXMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoaS0tKVxuICAgICAgICAgICAgX3RyYXZlcnNlKHZhbFtrZXlzW2ldXSwgc2Vlbik7XG4gICAgfVxufVxuXG52YXIgdWlkJDEgPSAwO1xuLyoqXG4gKiBBIHdhdGNoZXIgcGFyc2VzIGFuIGV4cHJlc3Npb24sIGNvbGxlY3RzIGRlcGVuZGVuY2llcyxcbiAqIGFuZCBmaXJlcyBjYWxsYmFjayB3aGVuIHRoZSBleHByZXNzaW9uIHZhbHVlIGNoYW5nZXMuXG4gKiBUaGlzIGlzIHVzZWQgZm9yIGJvdGggdGhlICR3YXRjaCgpIGFwaSBhbmQgZGlyZWN0aXZlcy5cbiAqIEBpbnRlcm5hbFxuICovXG52YXIgV2F0Y2hlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBXYXRjaGVyKHZtLCBleHBPckZuLCBjYiwgb3B0aW9ucywgaXNSZW5kZXJXYXRjaGVyKSB7XG4gICAgICAgIHJlY29yZEVmZmVjdFNjb3BlKHRoaXMsIFxuICAgICAgICAvLyBpZiB0aGUgYWN0aXZlIGVmZmVjdCBzY29wZSBpcyBtYW51YWxseSBjcmVhdGVkIChub3QgYSBjb21wb25lbnQgc2NvcGUpLFxuICAgICAgICAvLyBwcmlvcml0aXplIGl0XG4gICAgICAgIGFjdGl2ZUVmZmVjdFNjb3BlICYmICFhY3RpdmVFZmZlY3RTY29wZS5fdm1cbiAgICAgICAgICAgID8gYWN0aXZlRWZmZWN0U2NvcGVcbiAgICAgICAgICAgIDogdm1cbiAgICAgICAgICAgICAgICA/IHZtLl9zY29wZVxuICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkKTtcbiAgICAgICAgaWYgKCh0aGlzLnZtID0gdm0pICYmIGlzUmVuZGVyV2F0Y2hlcikge1xuICAgICAgICAgICAgdm0uX3dhdGNoZXIgPSB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIC8vIG9wdGlvbnNcbiAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMuZGVlcCA9ICEhb3B0aW9ucy5kZWVwO1xuICAgICAgICAgICAgdGhpcy51c2VyID0gISFvcHRpb25zLnVzZXI7XG4gICAgICAgICAgICB0aGlzLmxhenkgPSAhIW9wdGlvbnMubGF6eTtcbiAgICAgICAgICAgIHRoaXMuc3luYyA9ICEhb3B0aW9ucy5zeW5jO1xuICAgICAgICAgICAgdGhpcy5iZWZvcmUgPSBvcHRpb25zLmJlZm9yZTtcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vblRyYWNrID0gb3B0aW9ucy5vblRyYWNrO1xuICAgICAgICAgICAgICAgIHRoaXMub25UcmlnZ2VyID0gb3B0aW9ucy5vblRyaWdnZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRlZXAgPSB0aGlzLnVzZXIgPSB0aGlzLmxhenkgPSB0aGlzLnN5bmMgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNiID0gY2I7XG4gICAgICAgIHRoaXMuaWQgPSArK3VpZCQxOyAvLyB1aWQgZm9yIGJhdGNoaW5nXG4gICAgICAgIHRoaXMuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5wb3N0ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZGlydHkgPSB0aGlzLmxhenk7IC8vIGZvciBsYXp5IHdhdGNoZXJzXG4gICAgICAgIHRoaXMuZGVwcyA9IFtdO1xuICAgICAgICB0aGlzLm5ld0RlcHMgPSBbXTtcbiAgICAgICAgdGhpcy5kZXBJZHMgPSBuZXcgX1NldCgpO1xuICAgICAgICB0aGlzLm5ld0RlcElkcyA9IG5ldyBfU2V0KCk7XG4gICAgICAgIHRoaXMuZXhwcmVzc2lvbiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBleHBPckZuLnRvU3RyaW5nKCkgOiAnJztcbiAgICAgICAgLy8gcGFyc2UgZXhwcmVzc2lvbiBmb3IgZ2V0dGVyXG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKGV4cE9yRm4pKSB7XG4gICAgICAgICAgICB0aGlzLmdldHRlciA9IGV4cE9yRm47XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmdldHRlciA9IHBhcnNlUGF0aChleHBPckZuKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5nZXR0ZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdldHRlciA9IG5vb3A7XG4gICAgICAgICAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgICAgICAgICAgICAgICAgICB3YXJuJDIoXCJGYWlsZWQgd2F0Y2hpbmcgcGF0aDogXFxcIlwiLmNvbmNhdChleHBPckZuLCBcIlxcXCIgXCIpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdXYXRjaGVyIG9ubHkgYWNjZXB0cyBzaW1wbGUgZG90LWRlbGltaXRlZCBwYXRocy4gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnRm9yIGZ1bGwgY29udHJvbCwgdXNlIGEgZnVuY3Rpb24gaW5zdGVhZC4nLCB2bSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubGF6eSA/IHVuZGVmaW5lZCA6IHRoaXMuZ2V0KCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEV2YWx1YXRlIHRoZSBnZXR0ZXIsIGFuZCByZS1jb2xsZWN0IGRlcGVuZGVuY2llcy5cbiAgICAgKi9cbiAgICBXYXRjaGVyLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHB1c2hUYXJnZXQodGhpcyk7XG4gICAgICAgIHZhciB2YWx1ZTtcbiAgICAgICAgdmFyIHZtID0gdGhpcy52bTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHZhbHVlID0gdGhpcy5nZXR0ZXIuY2FsbCh2bSwgdm0pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy51c2VyKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlRXJyb3IoZSwgdm0sIFwiZ2V0dGVyIGZvciB3YXRjaGVyIFxcXCJcIi5jb25jYXQodGhpcy5leHByZXNzaW9uLCBcIlxcXCJcIikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIC8vIFwidG91Y2hcIiBldmVyeSBwcm9wZXJ0eSBzbyB0aGV5IGFyZSBhbGwgdHJhY2tlZCBhc1xuICAgICAgICAgICAgLy8gZGVwZW5kZW5jaWVzIGZvciBkZWVwIHdhdGNoaW5nXG4gICAgICAgICAgICBpZiAodGhpcy5kZWVwKSB7XG4gICAgICAgICAgICAgICAgdHJhdmVyc2UodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcG9wVGFyZ2V0KCk7XG4gICAgICAgICAgICB0aGlzLmNsZWFudXBEZXBzKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogQWRkIGEgZGVwZW5kZW5jeSB0byB0aGlzIGRpcmVjdGl2ZS5cbiAgICAgKi9cbiAgICBXYXRjaGVyLnByb3RvdHlwZS5hZGREZXAgPSBmdW5jdGlvbiAoZGVwKSB7XG4gICAgICAgIHZhciBpZCA9IGRlcC5pZDtcbiAgICAgICAgaWYgKCF0aGlzLm5ld0RlcElkcy5oYXMoaWQpKSB7XG4gICAgICAgICAgICB0aGlzLm5ld0RlcElkcy5hZGQoaWQpO1xuICAgICAgICAgICAgdGhpcy5uZXdEZXBzLnB1c2goZGVwKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5kZXBJZHMuaGFzKGlkKSkge1xuICAgICAgICAgICAgICAgIGRlcC5hZGRTdWIodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIC8qKlxuICAgICAqIENsZWFuIHVwIGZvciBkZXBlbmRlbmN5IGNvbGxlY3Rpb24uXG4gICAgICovXG4gICAgV2F0Y2hlci5wcm90b3R5cGUuY2xlYW51cERlcHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBpID0gdGhpcy5kZXBzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgICAgdmFyIGRlcCA9IHRoaXMuZGVwc1tpXTtcbiAgICAgICAgICAgIGlmICghdGhpcy5uZXdEZXBJZHMuaGFzKGRlcC5pZCkpIHtcbiAgICAgICAgICAgICAgICBkZXAucmVtb3ZlU3ViKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHZhciB0bXAgPSB0aGlzLmRlcElkcztcbiAgICAgICAgdGhpcy5kZXBJZHMgPSB0aGlzLm5ld0RlcElkcztcbiAgICAgICAgdGhpcy5uZXdEZXBJZHMgPSB0bXA7XG4gICAgICAgIHRoaXMubmV3RGVwSWRzLmNsZWFyKCk7XG4gICAgICAgIHRtcCA9IHRoaXMuZGVwcztcbiAgICAgICAgdGhpcy5kZXBzID0gdGhpcy5uZXdEZXBzO1xuICAgICAgICB0aGlzLm5ld0RlcHMgPSB0bXA7XG4gICAgICAgIHRoaXMubmV3RGVwcy5sZW5ndGggPSAwO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogU3Vic2NyaWJlciBpbnRlcmZhY2UuXG4gICAgICogV2lsbCBiZSBjYWxsZWQgd2hlbiBhIGRlcGVuZGVuY3kgY2hhbmdlcy5cbiAgICAgKi9cbiAgICBXYXRjaGVyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgIGlmICh0aGlzLmxhenkpIHtcbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuc3luYykge1xuICAgICAgICAgICAgdGhpcy5ydW4oKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHF1ZXVlV2F0Y2hlcih0aGlzKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgLyoqXG4gICAgICogU2NoZWR1bGVyIGpvYiBpbnRlcmZhY2UuXG4gICAgICogV2lsbCBiZSBjYWxsZWQgYnkgdGhlIHNjaGVkdWxlci5cbiAgICAgKi9cbiAgICBXYXRjaGVyLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZSkge1xuICAgICAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5nZXQoKTtcbiAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdGhpcy52YWx1ZSB8fFxuICAgICAgICAgICAgICAgIC8vIERlZXAgd2F0Y2hlcnMgYW5kIHdhdGNoZXJzIG9uIE9iamVjdC9BcnJheXMgc2hvdWxkIGZpcmUgZXZlblxuICAgICAgICAgICAgICAgIC8vIHdoZW4gdGhlIHZhbHVlIGlzIHRoZSBzYW1lLCBiZWNhdXNlIHRoZSB2YWx1ZSBtYXlcbiAgICAgICAgICAgICAgICAvLyBoYXZlIG11dGF0ZWQuXG4gICAgICAgICAgICAgICAgaXNPYmplY3QodmFsdWUpIHx8XG4gICAgICAgICAgICAgICAgdGhpcy5kZWVwKSB7XG4gICAgICAgICAgICAgICAgLy8gc2V0IG5ldyB2YWx1ZVxuICAgICAgICAgICAgICAgIHZhciBvbGRWYWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnVzZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGluZm8gPSBcImNhbGxiYWNrIGZvciB3YXRjaGVyIFxcXCJcIi5jb25jYXQodGhpcy5leHByZXNzaW9uLCBcIlxcXCJcIik7XG4gICAgICAgICAgICAgICAgICAgIGludm9rZVdpdGhFcnJvckhhbmRsaW5nKHRoaXMuY2IsIHRoaXMudm0sIFt2YWx1ZSwgb2xkVmFsdWVdLCB0aGlzLnZtLCBpbmZvKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2IuY2FsbCh0aGlzLnZtLCB2YWx1ZSwgb2xkVmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgLyoqXG4gICAgICogRXZhbHVhdGUgdGhlIHZhbHVlIG9mIHRoZSB3YXRjaGVyLlxuICAgICAqIFRoaXMgb25seSBnZXRzIGNhbGxlZCBmb3IgbGF6eSB3YXRjaGVycy5cbiAgICAgKi9cbiAgICBXYXRjaGVyLnByb3RvdHlwZS5ldmFsdWF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuZ2V0KCk7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIERlcGVuZCBvbiBhbGwgZGVwcyBjb2xsZWN0ZWQgYnkgdGhpcyB3YXRjaGVyLlxuICAgICAqL1xuICAgIFdhdGNoZXIucHJvdG90eXBlLmRlcGVuZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGkgPSB0aGlzLmRlcHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgICAgICB0aGlzLmRlcHNbaV0uZGVwZW5kKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFJlbW92ZSBzZWxmIGZyb20gYWxsIGRlcGVuZGVuY2llcycgc3Vic2NyaWJlciBsaXN0LlxuICAgICAqL1xuICAgIFdhdGNoZXIucHJvdG90eXBlLnRlYXJkb3duID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy52bSAmJiAhdGhpcy52bS5faXNCZWluZ0Rlc3Ryb3llZCkge1xuICAgICAgICAgICAgcmVtb3ZlJDIodGhpcy52bS5fc2NvcGUuZWZmZWN0cywgdGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlKSB7XG4gICAgICAgICAgICB2YXIgaSA9IHRoaXMuZGVwcy5sZW5ndGg7XG4gICAgICAgICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXBzW2ldLnJlbW92ZVN1Yih0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAodGhpcy5vblN0b3ApIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uU3RvcCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gV2F0Y2hlcjtcbn0oKSk7XG5cbnZhciBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24gPSB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0OiBub29wLFxuICAgIHNldDogbm9vcFxufTtcbmZ1bmN0aW9uIHByb3h5KHRhcmdldCwgc291cmNlS2V5LCBrZXkpIHtcbiAgICBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24uZ2V0ID0gZnVuY3Rpb24gcHJveHlHZXR0ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzW3NvdXJjZUtleV1ba2V5XTtcbiAgICB9O1xuICAgIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbi5zZXQgPSBmdW5jdGlvbiBwcm94eVNldHRlcih2YWwpIHtcbiAgICAgICAgdGhpc1tzb3VyY2VLZXldW2tleV0gPSB2YWw7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbik7XG59XG5mdW5jdGlvbiBpbml0U3RhdGUodm0pIHtcbiAgICB2YXIgb3B0cyA9IHZtLiRvcHRpb25zO1xuICAgIGlmIChvcHRzLnByb3BzKVxuICAgICAgICBpbml0UHJvcHMkMSh2bSwgb3B0cy5wcm9wcyk7XG4gICAgLy8gQ29tcG9zaXRpb24gQVBJXG4gICAgaW5pdFNldHVwKHZtKTtcbiAgICBpZiAob3B0cy5tZXRob2RzKVxuICAgICAgICBpbml0TWV0aG9kcyh2bSwgb3B0cy5tZXRob2RzKTtcbiAgICBpZiAob3B0cy5kYXRhKSB7XG4gICAgICAgIGluaXREYXRhKHZtKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHZhciBvYiA9IG9ic2VydmUoKHZtLl9kYXRhID0ge30pKTtcbiAgICAgICAgb2IgJiYgb2Iudm1Db3VudCsrO1xuICAgIH1cbiAgICBpZiAob3B0cy5jb21wdXRlZClcbiAgICAgICAgaW5pdENvbXB1dGVkJDEodm0sIG9wdHMuY29tcHV0ZWQpO1xuICAgIGlmIChvcHRzLndhdGNoICYmIG9wdHMud2F0Y2ggIT09IG5hdGl2ZVdhdGNoKSB7XG4gICAgICAgIGluaXRXYXRjaCh2bSwgb3B0cy53YXRjaCk7XG4gICAgfVxufVxuZnVuY3Rpb24gaW5pdFByb3BzJDEodm0sIHByb3BzT3B0aW9ucykge1xuICAgIHZhciBwcm9wc0RhdGEgPSB2bS4kb3B0aW9ucy5wcm9wc0RhdGEgfHwge307XG4gICAgdmFyIHByb3BzID0gKHZtLl9wcm9wcyA9IHNoYWxsb3dSZWFjdGl2ZSh7fSkpO1xuICAgIC8vIGNhY2hlIHByb3Aga2V5cyBzbyB0aGF0IGZ1dHVyZSBwcm9wcyB1cGRhdGVzIGNhbiBpdGVyYXRlIHVzaW5nIEFycmF5XG4gICAgLy8gaW5zdGVhZCBvZiBkeW5hbWljIG9iamVjdCBrZXkgZW51bWVyYXRpb24uXG4gICAgdmFyIGtleXMgPSAodm0uJG9wdGlvbnMuX3Byb3BLZXlzID0gW10pO1xuICAgIHZhciBpc1Jvb3QgPSAhdm0uJHBhcmVudDtcbiAgICAvLyByb290IGluc3RhbmNlIHByb3BzIHNob3VsZCBiZSBjb252ZXJ0ZWRcbiAgICBpZiAoIWlzUm9vdCkge1xuICAgICAgICB0b2dnbGVPYnNlcnZpbmcoZmFsc2UpO1xuICAgIH1cbiAgICB2YXIgX2xvb3BfMSA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgICAgIHZhciB2YWx1ZSA9IHZhbGlkYXRlUHJvcChrZXksIHByb3BzT3B0aW9ucywgcHJvcHNEYXRhLCB2bSk7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICB2YXIgaHlwaGVuYXRlZEtleSA9IGh5cGhlbmF0ZShrZXkpO1xuICAgICAgICAgICAgaWYgKGlzUmVzZXJ2ZWRBdHRyaWJ1dGUoaHlwaGVuYXRlZEtleSkgfHxcbiAgICAgICAgICAgICAgICBjb25maWcuaXNSZXNlcnZlZEF0dHIoaHlwaGVuYXRlZEtleSkpIHtcbiAgICAgICAgICAgICAgICB3YXJuJDIoXCJcXFwiXCIuY29uY2F0KGh5cGhlbmF0ZWRLZXksIFwiXFxcIiBpcyBhIHJlc2VydmVkIGF0dHJpYnV0ZSBhbmQgY2Fubm90IGJlIHVzZWQgYXMgY29tcG9uZW50IHByb3AuXCIpLCB2bSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZpbmVSZWFjdGl2ZShwcm9wcywga2V5LCB2YWx1ZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmICghaXNSb290ICYmICFpc1VwZGF0aW5nQ2hpbGRDb21wb25lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgd2FybiQyKFwiQXZvaWQgbXV0YXRpbmcgYSBwcm9wIGRpcmVjdGx5IHNpbmNlIHRoZSB2YWx1ZSB3aWxsIGJlIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwib3ZlcndyaXR0ZW4gd2hlbmV2ZXIgdGhlIHBhcmVudCBjb21wb25lbnQgcmUtcmVuZGVycy4gXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJJbnN0ZWFkLCB1c2UgYSBkYXRhIG9yIGNvbXB1dGVkIHByb3BlcnR5IGJhc2VkIG9uIHRoZSBwcm9wJ3MgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJ2YWx1ZS4gUHJvcCBiZWluZyBtdXRhdGVkOiBcXFwiXCIuY29uY2F0KGtleSwgXCJcXFwiXCIpLCB2bSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBkZWZpbmVSZWFjdGl2ZShwcm9wcywga2V5LCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gc3RhdGljIHByb3BzIGFyZSBhbHJlYWR5IHByb3hpZWQgb24gdGhlIGNvbXBvbmVudCdzIHByb3RvdHlwZVxuICAgICAgICAvLyBkdXJpbmcgVnVlLmV4dGVuZCgpLiBXZSBvbmx5IG5lZWQgdG8gcHJveHkgcHJvcHMgZGVmaW5lZCBhdFxuICAgICAgICAvLyBpbnN0YW50aWF0aW9uIGhlcmUuXG4gICAgICAgIGlmICghKGtleSBpbiB2bSkpIHtcbiAgICAgICAgICAgIHByb3h5KHZtLCBcIl9wcm9wc1wiLCBrZXkpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBmb3IgKHZhciBrZXkgaW4gcHJvcHNPcHRpb25zKSB7XG4gICAgICAgIF9sb29wXzEoa2V5KTtcbiAgICB9XG4gICAgdG9nZ2xlT2JzZXJ2aW5nKHRydWUpO1xufVxuZnVuY3Rpb24gaW5pdERhdGEodm0pIHtcbiAgICB2YXIgZGF0YSA9IHZtLiRvcHRpb25zLmRhdGE7XG4gICAgZGF0YSA9IHZtLl9kYXRhID0gaXNGdW5jdGlvbihkYXRhKSA/IGdldERhdGEoZGF0YSwgdm0pIDogZGF0YSB8fCB7fTtcbiAgICBpZiAoIWlzUGxhaW5PYmplY3QoZGF0YSkpIHtcbiAgICAgICAgZGF0YSA9IHt9O1xuICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgICAgICAgICB3YXJuJDIoJ2RhdGEgZnVuY3Rpb25zIHNob3VsZCByZXR1cm4gYW4gb2JqZWN0OlxcbicgK1xuICAgICAgICAgICAgICAgICdodHRwczovL3YyLnZ1ZWpzLm9yZy92Mi9ndWlkZS9jb21wb25lbnRzLmh0bWwjZGF0YS1NdXN0LUJlLWEtRnVuY3Rpb24nLCB2bSk7XG4gICAgfVxuICAgIC8vIHByb3h5IGRhdGEgb24gaW5zdGFuY2VcbiAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGRhdGEpO1xuICAgIHZhciBwcm9wcyA9IHZtLiRvcHRpb25zLnByb3BzO1xuICAgIHZhciBtZXRob2RzID0gdm0uJG9wdGlvbnMubWV0aG9kcztcbiAgICB2YXIgaSA9IGtleXMubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICBpZiAobWV0aG9kcyAmJiBoYXNPd24obWV0aG9kcywga2V5KSkge1xuICAgICAgICAgICAgICAgIHdhcm4kMihcIk1ldGhvZCBcXFwiXCIuY29uY2F0KGtleSwgXCJcXFwiIGhhcyBhbHJlYWR5IGJlZW4gZGVmaW5lZCBhcyBhIGRhdGEgcHJvcGVydHkuXCIpLCB2bSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb3BzICYmIGhhc093bihwcm9wcywga2V5KSkge1xuICAgICAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgICAgICAgICAgICAgIHdhcm4kMihcIlRoZSBkYXRhIHByb3BlcnR5IFxcXCJcIi5jb25jYXQoa2V5LCBcIlxcXCIgaXMgYWxyZWFkeSBkZWNsYXJlZCBhcyBhIHByb3AuIFwiKSArXG4gICAgICAgICAgICAgICAgICAgIFwiVXNlIHByb3AgZGVmYXVsdCB2YWx1ZSBpbnN0ZWFkLlwiLCB2bSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIWlzUmVzZXJ2ZWQoa2V5KSkge1xuICAgICAgICAgICAgcHJveHkodm0sIFwiX2RhdGFcIiwga2V5KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBvYnNlcnZlIGRhdGFcbiAgICB2YXIgb2IgPSBvYnNlcnZlKGRhdGEpO1xuICAgIG9iICYmIG9iLnZtQ291bnQrKztcbn1cbmZ1bmN0aW9uIGdldERhdGEoZGF0YSwgdm0pIHtcbiAgICAvLyAjNzU3MyBkaXNhYmxlIGRlcCBjb2xsZWN0aW9uIHdoZW4gaW52b2tpbmcgZGF0YSBnZXR0ZXJzXG4gICAgcHVzaFRhcmdldCgpO1xuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBkYXRhLmNhbGwodm0sIHZtKTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgaGFuZGxlRXJyb3IoZSwgdm0sIFwiZGF0YSgpXCIpO1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGZpbmFsbHkge1xuICAgICAgICBwb3BUYXJnZXQoKTtcbiAgICB9XG59XG52YXIgY29tcHV0ZWRXYXRjaGVyT3B0aW9ucyA9IHsgbGF6eTogdHJ1ZSB9O1xuZnVuY3Rpb24gaW5pdENvbXB1dGVkJDEodm0sIGNvbXB1dGVkKSB7XG4gICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAgdmFyIHdhdGNoZXJzID0gKHZtLl9jb21wdXRlZFdhdGNoZXJzID0gT2JqZWN0LmNyZWF0ZShudWxsKSk7XG4gICAgLy8gY29tcHV0ZWQgcHJvcGVydGllcyBhcmUganVzdCBnZXR0ZXJzIGR1cmluZyBTU1JcbiAgICB2YXIgaXNTU1IgPSBpc1NlcnZlclJlbmRlcmluZygpO1xuICAgIGZvciAodmFyIGtleSBpbiBjb21wdXRlZCkge1xuICAgICAgICB2YXIgdXNlckRlZiA9IGNvbXB1dGVkW2tleV07XG4gICAgICAgIHZhciBnZXR0ZXIgPSBpc0Z1bmN0aW9uKHVzZXJEZWYpID8gdXNlckRlZiA6IHVzZXJEZWYuZ2V0O1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBnZXR0ZXIgPT0gbnVsbCkge1xuICAgICAgICAgICAgd2FybiQyKFwiR2V0dGVyIGlzIG1pc3NpbmcgZm9yIGNvbXB1dGVkIHByb3BlcnR5IFxcXCJcIi5jb25jYXQoa2V5LCBcIlxcXCIuXCIpLCB2bSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1NTUikge1xuICAgICAgICAgICAgLy8gY3JlYXRlIGludGVybmFsIHdhdGNoZXIgZm9yIHRoZSBjb21wdXRlZCBwcm9wZXJ0eS5cbiAgICAgICAgICAgIHdhdGNoZXJzW2tleV0gPSBuZXcgV2F0Y2hlcih2bSwgZ2V0dGVyIHx8IG5vb3AsIG5vb3AsIGNvbXB1dGVkV2F0Y2hlck9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNvbXBvbmVudC1kZWZpbmVkIGNvbXB1dGVkIHByb3BlcnRpZXMgYXJlIGFscmVhZHkgZGVmaW5lZCBvbiB0aGVcbiAgICAgICAgLy8gY29tcG9uZW50IHByb3RvdHlwZS4gV2Ugb25seSBuZWVkIHRvIGRlZmluZSBjb21wdXRlZCBwcm9wZXJ0aWVzIGRlZmluZWRcbiAgICAgICAgLy8gYXQgaW5zdGFudGlhdGlvbiBoZXJlLlxuICAgICAgICBpZiAoIShrZXkgaW4gdm0pKSB7XG4gICAgICAgICAgICBkZWZpbmVDb21wdXRlZCh2bSwga2V5LCB1c2VyRGVmKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICBpZiAoa2V5IGluIHZtLiRkYXRhKSB7XG4gICAgICAgICAgICAgICAgd2FybiQyKFwiVGhlIGNvbXB1dGVkIHByb3BlcnR5IFxcXCJcIi5jb25jYXQoa2V5LCBcIlxcXCIgaXMgYWxyZWFkeSBkZWZpbmVkIGluIGRhdGEuXCIpLCB2bSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh2bS4kb3B0aW9ucy5wcm9wcyAmJiBrZXkgaW4gdm0uJG9wdGlvbnMucHJvcHMpIHtcbiAgICAgICAgICAgICAgICB3YXJuJDIoXCJUaGUgY29tcHV0ZWQgcHJvcGVydHkgXFxcIlwiLmNvbmNhdChrZXksIFwiXFxcIiBpcyBhbHJlYWR5IGRlZmluZWQgYXMgYSBwcm9wLlwiKSwgdm0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodm0uJG9wdGlvbnMubWV0aG9kcyAmJiBrZXkgaW4gdm0uJG9wdGlvbnMubWV0aG9kcykge1xuICAgICAgICAgICAgICAgIHdhcm4kMihcIlRoZSBjb21wdXRlZCBwcm9wZXJ0eSBcXFwiXCIuY29uY2F0KGtleSwgXCJcXFwiIGlzIGFscmVhZHkgZGVmaW5lZCBhcyBhIG1ldGhvZC5cIiksIHZtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIGRlZmluZUNvbXB1dGVkKHRhcmdldCwga2V5LCB1c2VyRGVmKSB7XG4gICAgdmFyIHNob3VsZENhY2hlID0gIWlzU2VydmVyUmVuZGVyaW5nKCk7XG4gICAgaWYgKGlzRnVuY3Rpb24odXNlckRlZikpIHtcbiAgICAgICAgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uLmdldCA9IHNob3VsZENhY2hlXG4gICAgICAgICAgICA/IGNyZWF0ZUNvbXB1dGVkR2V0dGVyKGtleSlcbiAgICAgICAgICAgIDogY3JlYXRlR2V0dGVySW52b2tlcih1c2VyRGVmKTtcbiAgICAgICAgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uLnNldCA9IG5vb3A7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24uZ2V0ID0gdXNlckRlZi5nZXRcbiAgICAgICAgICAgID8gc2hvdWxkQ2FjaGUgJiYgdXNlckRlZi5jYWNoZSAhPT0gZmFsc2VcbiAgICAgICAgICAgICAgICA/IGNyZWF0ZUNvbXB1dGVkR2V0dGVyKGtleSlcbiAgICAgICAgICAgICAgICA6IGNyZWF0ZUdldHRlckludm9rZXIodXNlckRlZi5nZXQpXG4gICAgICAgICAgICA6IG5vb3A7XG4gICAgICAgIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbi5zZXQgPSB1c2VyRGVmLnNldCB8fCBub29wO1xuICAgIH1cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24uc2V0ID09PSBub29wKSB7XG4gICAgICAgIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbi5zZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB3YXJuJDIoXCJDb21wdXRlZCBwcm9wZXJ0eSBcXFwiXCIuY29uY2F0KGtleSwgXCJcXFwiIHdhcyBhc3NpZ25lZCB0byBidXQgaXQgaGFzIG5vIHNldHRlci5cIiksIHRoaXMpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbik7XG59XG5mdW5jdGlvbiBjcmVhdGVDb21wdXRlZEdldHRlcihrZXkpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gY29tcHV0ZWRHZXR0ZXIoKSB7XG4gICAgICAgIHZhciB3YXRjaGVyID0gdGhpcy5fY29tcHV0ZWRXYXRjaGVycyAmJiB0aGlzLl9jb21wdXRlZFdhdGNoZXJzW2tleV07XG4gICAgICAgIGlmICh3YXRjaGVyKSB7XG4gICAgICAgICAgICBpZiAod2F0Y2hlci5kaXJ0eSkge1xuICAgICAgICAgICAgICAgIHdhdGNoZXIuZXZhbHVhdGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChEZXAudGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgRGVwLnRhcmdldC5vblRyYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIERlcC50YXJnZXQub25UcmFjayh7XG4gICAgICAgICAgICAgICAgICAgICAgICBlZmZlY3Q6IERlcC50YXJnZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IHRoaXMsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImdldFwiIC8qIFRyYWNrT3BUeXBlcy5HRVQgKi8sXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGtleVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgd2F0Y2hlci5kZXBlbmQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB3YXRjaGVyLnZhbHVlO1xuICAgICAgICB9XG4gICAgfTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUdldHRlckludm9rZXIoZm4pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gY29tcHV0ZWRHZXR0ZXIoKSB7XG4gICAgICAgIHJldHVybiBmbi5jYWxsKHRoaXMsIHRoaXMpO1xuICAgIH07XG59XG5mdW5jdGlvbiBpbml0TWV0aG9kcyh2bSwgbWV0aG9kcykge1xuICAgIHZhciBwcm9wcyA9IHZtLiRvcHRpb25zLnByb3BzO1xuICAgIGZvciAodmFyIGtleSBpbiBtZXRob2RzKSB7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG1ldGhvZHNba2V5XSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHdhcm4kMihcIk1ldGhvZCBcXFwiXCIuY29uY2F0KGtleSwgXCJcXFwiIGhhcyB0eXBlIFxcXCJcIikuY29uY2F0KHR5cGVvZiBtZXRob2RzW2tleV0sIFwiXFxcIiBpbiB0aGUgY29tcG9uZW50IGRlZmluaXRpb24uIFwiKSArXG4gICAgICAgICAgICAgICAgICAgIFwiRGlkIHlvdSByZWZlcmVuY2UgdGhlIGZ1bmN0aW9uIGNvcnJlY3RseT9cIiwgdm0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByb3BzICYmIGhhc093bihwcm9wcywga2V5KSkge1xuICAgICAgICAgICAgICAgIHdhcm4kMihcIk1ldGhvZCBcXFwiXCIuY29uY2F0KGtleSwgXCJcXFwiIGhhcyBhbHJlYWR5IGJlZW4gZGVmaW5lZCBhcyBhIHByb3AuXCIpLCB2bSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoa2V5IGluIHZtICYmIGlzUmVzZXJ2ZWQoa2V5KSkge1xuICAgICAgICAgICAgICAgIHdhcm4kMihcIk1ldGhvZCBcXFwiXCIuY29uY2F0KGtleSwgXCJcXFwiIGNvbmZsaWN0cyB3aXRoIGFuIGV4aXN0aW5nIFZ1ZSBpbnN0YW5jZSBtZXRob2QuIFwiKSArXG4gICAgICAgICAgICAgICAgICAgIFwiQXZvaWQgZGVmaW5pbmcgY29tcG9uZW50IG1ldGhvZHMgdGhhdCBzdGFydCB3aXRoIF8gb3IgJC5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdm1ba2V5XSA9IHR5cGVvZiBtZXRob2RzW2tleV0gIT09ICdmdW5jdGlvbicgPyBub29wIDogYmluZCQxKG1ldGhvZHNba2V5XSwgdm0pO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGluaXRXYXRjaCh2bSwgd2F0Y2gpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gd2F0Y2gpIHtcbiAgICAgICAgdmFyIGhhbmRsZXIgPSB3YXRjaFtrZXldO1xuICAgICAgICBpZiAoaXNBcnJheShoYW5kbGVyKSkge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBoYW5kbGVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY3JlYXRlV2F0Y2hlcih2bSwga2V5LCBoYW5kbGVyW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNyZWF0ZVdhdGNoZXIodm0sIGtleSwgaGFuZGxlcik7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBjcmVhdGVXYXRjaGVyKHZtLCBleHBPckZuLCBoYW5kbGVyLCBvcHRpb25zKSB7XG4gICAgaWYgKGlzUGxhaW5PYmplY3QoaGFuZGxlcikpIHtcbiAgICAgICAgb3B0aW9ucyA9IGhhbmRsZXI7XG4gICAgICAgIGhhbmRsZXIgPSBoYW5kbGVyLmhhbmRsZXI7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgaGFuZGxlciA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaGFuZGxlciA9IHZtW2hhbmRsZXJdO1xuICAgIH1cbiAgICByZXR1cm4gdm0uJHdhdGNoKGV4cE9yRm4sIGhhbmRsZXIsIG9wdGlvbnMpO1xufVxuZnVuY3Rpb24gc3RhdGVNaXhpbihWdWUpIHtcbiAgICAvLyBmbG93IHNvbWVob3cgaGFzIHByb2JsZW1zIHdpdGggZGlyZWN0bHkgZGVjbGFyZWQgZGVmaW5pdGlvbiBvYmplY3RcbiAgICAvLyB3aGVuIHVzaW5nIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSwgc28gd2UgaGF2ZSB0byBwcm9jZWR1cmFsbHkgYnVpbGQgdXBcbiAgICAvLyB0aGUgb2JqZWN0IGhlcmUuXG4gICAgdmFyIGRhdGFEZWYgPSB7fTtcbiAgICBkYXRhRGVmLmdldCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGE7XG4gICAgfTtcbiAgICB2YXIgcHJvcHNEZWYgPSB7fTtcbiAgICBwcm9wc0RlZi5nZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9wcztcbiAgICB9O1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGRhdGFEZWYuc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgd2FybiQyKCdBdm9pZCByZXBsYWNpbmcgaW5zdGFuY2Ugcm9vdCAkZGF0YS4gJyArXG4gICAgICAgICAgICAgICAgJ1VzZSBuZXN0ZWQgZGF0YSBwcm9wZXJ0aWVzIGluc3RlYWQuJywgdGhpcyk7XG4gICAgICAgIH07XG4gICAgICAgIHByb3BzRGVmLnNldCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHdhcm4kMihcIiRwcm9wcyBpcyByZWFkb25seS5cIiwgdGhpcyk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWdWUucHJvdG90eXBlLCAnJGRhdGEnLCBkYXRhRGVmKTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVnVlLnByb3RvdHlwZSwgJyRwcm9wcycsIHByb3BzRGVmKTtcbiAgICBWdWUucHJvdG90eXBlLiRzZXQgPSBzZXQ7XG4gICAgVnVlLnByb3RvdHlwZS4kZGVsZXRlID0gZGVsO1xuICAgIFZ1ZS5wcm90b3R5cGUuJHdhdGNoID0gZnVuY3Rpb24gKGV4cE9yRm4sIGNiLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciB2bSA9IHRoaXM7XG4gICAgICAgIGlmIChpc1BsYWluT2JqZWN0KGNiKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVdhdGNoZXIodm0sIGV4cE9yRm4sIGNiLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICAgICAgb3B0aW9ucy51c2VyID0gdHJ1ZTtcbiAgICAgICAgdmFyIHdhdGNoZXIgPSBuZXcgV2F0Y2hlcih2bSwgZXhwT3JGbiwgY2IsIG9wdGlvbnMpO1xuICAgICAgICBpZiAob3B0aW9ucy5pbW1lZGlhdGUpIHtcbiAgICAgICAgICAgIHZhciBpbmZvID0gXCJjYWxsYmFjayBmb3IgaW1tZWRpYXRlIHdhdGNoZXIgXFxcIlwiLmNvbmNhdCh3YXRjaGVyLmV4cHJlc3Npb24sIFwiXFxcIlwiKTtcbiAgICAgICAgICAgIHB1c2hUYXJnZXQoKTtcbiAgICAgICAgICAgIGludm9rZVdpdGhFcnJvckhhbmRsaW5nKGNiLCB2bSwgW3dhdGNoZXIudmFsdWVdLCB2bSwgaW5mbyk7XG4gICAgICAgICAgICBwb3BUYXJnZXQoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gdW53YXRjaEZuKCkge1xuICAgICAgICAgICAgd2F0Y2hlci50ZWFyZG93bigpO1xuICAgICAgICB9O1xuICAgIH07XG59XG5cbmZ1bmN0aW9uIGluaXRQcm92aWRlKHZtKSB7XG4gICAgdmFyIHByb3ZpZGVPcHRpb24gPSB2bS4kb3B0aW9ucy5wcm92aWRlO1xuICAgIGlmIChwcm92aWRlT3B0aW9uKSB7XG4gICAgICAgIHZhciBwcm92aWRlZCA9IGlzRnVuY3Rpb24ocHJvdmlkZU9wdGlvbilcbiAgICAgICAgICAgID8gcHJvdmlkZU9wdGlvbi5jYWxsKHZtKVxuICAgICAgICAgICAgOiBwcm92aWRlT3B0aW9uO1xuICAgICAgICBpZiAoIWlzT2JqZWN0KHByb3ZpZGVkKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciBzb3VyY2UgPSByZXNvbHZlUHJvdmlkZWQodm0pO1xuICAgICAgICAvLyBJRTkgZG9lc24ndCBzdXBwb3J0IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIHNvIHdlIGhhdmUgdG9cbiAgICAgICAgLy8gaXRlcmF0ZSB0aGUga2V5cyBvdXJzZWx2ZXMuXG4gICAgICAgIHZhciBrZXlzID0gaGFzU3ltYm9sID8gUmVmbGVjdC5vd25LZXlzKHByb3ZpZGVkKSA6IE9iamVjdC5rZXlzKHByb3ZpZGVkKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzb3VyY2UsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwcm92aWRlZCwga2V5KSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBpbml0SW5qZWN0aW9ucyh2bSkge1xuICAgIHZhciByZXN1bHQgPSByZXNvbHZlSW5qZWN0KHZtLiRvcHRpb25zLmluamVjdCwgdm0pO1xuICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgdG9nZ2xlT2JzZXJ2aW5nKGZhbHNlKTtcbiAgICAgICAgT2JqZWN0LmtleXMocmVzdWx0KS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgICAgIGRlZmluZVJlYWN0aXZlKHZtLCBrZXksIHJlc3VsdFtrZXldLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHdhcm4kMihcIkF2b2lkIG11dGF0aW5nIGFuIGluamVjdGVkIHZhbHVlIGRpcmVjdGx5IHNpbmNlIHRoZSBjaGFuZ2VzIHdpbGwgYmUgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJvdmVyd3JpdHRlbiB3aGVuZXZlciB0aGUgcHJvdmlkZWQgY29tcG9uZW50IHJlLXJlbmRlcnMuIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiaW5qZWN0aW9uIGJlaW5nIG11dGF0ZWQ6IFxcXCJcIi5jb25jYXQoa2V5LCBcIlxcXCJcIiksIHZtKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGRlZmluZVJlYWN0aXZlKHZtLCBrZXksIHJlc3VsdFtrZXldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRvZ2dsZU9ic2VydmluZyh0cnVlKTtcbiAgICB9XG59XG5mdW5jdGlvbiByZXNvbHZlSW5qZWN0KGluamVjdCwgdm0pIHtcbiAgICBpZiAoaW5qZWN0KSB7XG4gICAgICAgIC8vIGluamVjdCBpcyA6YW55IGJlY2F1c2UgZmxvdyBpcyBub3Qgc21hcnQgZW5vdWdoIHRvIGZpZ3VyZSBvdXQgY2FjaGVkXG4gICAgICAgIHZhciByZXN1bHQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICB2YXIga2V5cyA9IGhhc1N5bWJvbCA/IFJlZmxlY3Qub3duS2V5cyhpbmplY3QpIDogT2JqZWN0LmtleXMoaW5qZWN0KTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgICAgIC8vICM2NTc0IGluIGNhc2UgdGhlIGluamVjdCBvYmplY3QgaXMgb2JzZXJ2ZWQuLi5cbiAgICAgICAgICAgIGlmIChrZXkgPT09ICdfX29iX18nKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgdmFyIHByb3ZpZGVLZXkgPSBpbmplY3Rba2V5XS5mcm9tO1xuICAgICAgICAgICAgaWYgKHByb3ZpZGVLZXkgaW4gdm0uX3Byb3ZpZGVkKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0W2tleV0gPSB2bS5fcHJvdmlkZWRbcHJvdmlkZUtleV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICgnZGVmYXVsdCcgaW4gaW5qZWN0W2tleV0pIHtcbiAgICAgICAgICAgICAgICB2YXIgcHJvdmlkZURlZmF1bHQgPSBpbmplY3Rba2V5XS5kZWZhdWx0O1xuICAgICAgICAgICAgICAgIHJlc3VsdFtrZXldID0gaXNGdW5jdGlvbihwcm92aWRlRGVmYXVsdClcbiAgICAgICAgICAgICAgICAgICAgPyBwcm92aWRlRGVmYXVsdC5jYWxsKHZtKVxuICAgICAgICAgICAgICAgICAgICA6IHByb3ZpZGVEZWZhdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgICAgIHdhcm4kMihcIkluamVjdGlvbiBcXFwiXCIuY29uY2F0KGtleSwgXCJcXFwiIG5vdCBmb3VuZFwiKSwgdm0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG52YXIgdWlkID0gMDtcbmZ1bmN0aW9uIGluaXRNaXhpbiQxKFZ1ZSkge1xuICAgIFZ1ZS5wcm90b3R5cGUuX2luaXQgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICB2YXIgdm0gPSB0aGlzO1xuICAgICAgICAvLyBhIHVpZFxuICAgICAgICB2bS5fdWlkID0gdWlkKys7XG4gICAgICAgIHZhciBzdGFydFRhZywgZW5kVGFnO1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgY29uZmlnLnBlcmZvcm1hbmNlICYmIG1hcmspIHtcbiAgICAgICAgICAgIHN0YXJ0VGFnID0gXCJ2dWUtcGVyZi1zdGFydDpcIi5jb25jYXQodm0uX3VpZCk7XG4gICAgICAgICAgICBlbmRUYWcgPSBcInZ1ZS1wZXJmLWVuZDpcIi5jb25jYXQodm0uX3VpZCk7XG4gICAgICAgICAgICBtYXJrKHN0YXJ0VGFnKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBhIGZsYWcgdG8gbWFyayB0aGlzIGFzIGEgVnVlIGluc3RhbmNlIHdpdGhvdXQgaGF2aW5nIHRvIGRvIGluc3RhbmNlb2ZcbiAgICAgICAgLy8gY2hlY2tcbiAgICAgICAgdm0uX2lzVnVlID0gdHJ1ZTtcbiAgICAgICAgLy8gYXZvaWQgaW5zdGFuY2VzIGZyb20gYmVpbmcgb2JzZXJ2ZWRcbiAgICAgICAgdm0uX192X3NraXAgPSB0cnVlO1xuICAgICAgICAvLyBlZmZlY3Qgc2NvcGVcbiAgICAgICAgdm0uX3Njb3BlID0gbmV3IEVmZmVjdFNjb3BlKHRydWUgLyogZGV0YWNoZWQgKi8pO1xuICAgICAgICB2bS5fc2NvcGUuX3ZtID0gdHJ1ZTtcbiAgICAgICAgLy8gbWVyZ2Ugb3B0aW9uc1xuICAgICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLl9pc0NvbXBvbmVudCkge1xuICAgICAgICAgICAgLy8gb3B0aW1pemUgaW50ZXJuYWwgY29tcG9uZW50IGluc3RhbnRpYXRpb25cbiAgICAgICAgICAgIC8vIHNpbmNlIGR5bmFtaWMgb3B0aW9ucyBtZXJnaW5nIGlzIHByZXR0eSBzbG93LCBhbmQgbm9uZSBvZiB0aGVcbiAgICAgICAgICAgIC8vIGludGVybmFsIGNvbXBvbmVudCBvcHRpb25zIG5lZWRzIHNwZWNpYWwgdHJlYXRtZW50LlxuICAgICAgICAgICAgaW5pdEludGVybmFsQ29tcG9uZW50KHZtLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZtLiRvcHRpb25zID0gbWVyZ2VPcHRpb25zKHJlc29sdmVDb25zdHJ1Y3Rvck9wdGlvbnModm0uY29uc3RydWN0b3IpLCBvcHRpb25zIHx8IHt9LCB2bSk7XG4gICAgICAgIH1cbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgIGluaXRQcm94eSh2bSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2bS5fcmVuZGVyUHJveHkgPSB2bTtcbiAgICAgICAgfVxuICAgICAgICAvLyBleHBvc2UgcmVhbCBzZWxmXG4gICAgICAgIHZtLl9zZWxmID0gdm07XG4gICAgICAgIGluaXRMaWZlY3ljbGUodm0pO1xuICAgICAgICBpbml0RXZlbnRzKHZtKTtcbiAgICAgICAgaW5pdFJlbmRlcih2bSk7XG4gICAgICAgIGNhbGxIb29rJDEodm0sICdiZWZvcmVDcmVhdGUnLCB1bmRlZmluZWQsIGZhbHNlIC8qIHNldENvbnRleHQgKi8pO1xuICAgICAgICBpbml0SW5qZWN0aW9ucyh2bSk7IC8vIHJlc29sdmUgaW5qZWN0aW9ucyBiZWZvcmUgZGF0YS9wcm9wc1xuICAgICAgICBpbml0U3RhdGUodm0pO1xuICAgICAgICBpbml0UHJvdmlkZSh2bSk7IC8vIHJlc29sdmUgcHJvdmlkZSBhZnRlciBkYXRhL3Byb3BzXG4gICAgICAgIGNhbGxIb29rJDEodm0sICdjcmVhdGVkJyk7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBjb25maWcucGVyZm9ybWFuY2UgJiYgbWFyaykge1xuICAgICAgICAgICAgdm0uX25hbWUgPSBmb3JtYXRDb21wb25lbnROYW1lKHZtLCBmYWxzZSk7XG4gICAgICAgICAgICBtYXJrKGVuZFRhZyk7XG4gICAgICAgICAgICBtZWFzdXJlKFwidnVlIFwiLmNvbmNhdCh2bS5fbmFtZSwgXCIgaW5pdFwiKSwgc3RhcnRUYWcsIGVuZFRhZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZtLiRvcHRpb25zLmVsKSB7XG4gICAgICAgICAgICB2bS4kbW91bnQodm0uJG9wdGlvbnMuZWwpO1xuICAgICAgICB9XG4gICAgfTtcbn1cbmZ1bmN0aW9uIGluaXRJbnRlcm5hbENvbXBvbmVudCh2bSwgb3B0aW9ucykge1xuICAgIHZhciBvcHRzID0gKHZtLiRvcHRpb25zID0gT2JqZWN0LmNyZWF0ZSh2bS5jb25zdHJ1Y3Rvci5vcHRpb25zKSk7XG4gICAgLy8gZG9pbmcgdGhpcyBiZWNhdXNlIGl0J3MgZmFzdGVyIHRoYW4gZHluYW1pYyBlbnVtZXJhdGlvbi5cbiAgICB2YXIgcGFyZW50Vm5vZGUgPSBvcHRpb25zLl9wYXJlbnRWbm9kZTtcbiAgICBvcHRzLnBhcmVudCA9IG9wdGlvbnMucGFyZW50O1xuICAgIG9wdHMuX3BhcmVudFZub2RlID0gcGFyZW50Vm5vZGU7XG4gICAgdmFyIHZub2RlQ29tcG9uZW50T3B0aW9ucyA9IHBhcmVudFZub2RlLmNvbXBvbmVudE9wdGlvbnM7XG4gICAgb3B0cy5wcm9wc0RhdGEgPSB2bm9kZUNvbXBvbmVudE9wdGlvbnMucHJvcHNEYXRhO1xuICAgIG9wdHMuX3BhcmVudExpc3RlbmVycyA9IHZub2RlQ29tcG9uZW50T3B0aW9ucy5saXN0ZW5lcnM7XG4gICAgb3B0cy5fcmVuZGVyQ2hpbGRyZW4gPSB2bm9kZUNvbXBvbmVudE9wdGlvbnMuY2hpbGRyZW47XG4gICAgb3B0cy5fY29tcG9uZW50VGFnID0gdm5vZGVDb21wb25lbnRPcHRpb25zLnRhZztcbiAgICBpZiAob3B0aW9ucy5yZW5kZXIpIHtcbiAgICAgICAgb3B0cy5yZW5kZXIgPSBvcHRpb25zLnJlbmRlcjtcbiAgICAgICAgb3B0cy5zdGF0aWNSZW5kZXJGbnMgPSBvcHRpb25zLnN0YXRpY1JlbmRlckZucztcbiAgICB9XG59XG5mdW5jdGlvbiByZXNvbHZlQ29uc3RydWN0b3JPcHRpb25zKEN0b3IpIHtcbiAgICB2YXIgb3B0aW9ucyA9IEN0b3Iub3B0aW9ucztcbiAgICBpZiAoQ3Rvci5zdXBlcikge1xuICAgICAgICB2YXIgc3VwZXJPcHRpb25zID0gcmVzb2x2ZUNvbnN0cnVjdG9yT3B0aW9ucyhDdG9yLnN1cGVyKTtcbiAgICAgICAgdmFyIGNhY2hlZFN1cGVyT3B0aW9ucyA9IEN0b3Iuc3VwZXJPcHRpb25zO1xuICAgICAgICBpZiAoc3VwZXJPcHRpb25zICE9PSBjYWNoZWRTdXBlck9wdGlvbnMpIHtcbiAgICAgICAgICAgIC8vIHN1cGVyIG9wdGlvbiBjaGFuZ2VkLFxuICAgICAgICAgICAgLy8gbmVlZCB0byByZXNvbHZlIG5ldyBvcHRpb25zLlxuICAgICAgICAgICAgQ3Rvci5zdXBlck9wdGlvbnMgPSBzdXBlck9wdGlvbnM7XG4gICAgICAgICAgICAvLyBjaGVjayBpZiB0aGVyZSBhcmUgYW55IGxhdGUtbW9kaWZpZWQvYXR0YWNoZWQgb3B0aW9ucyAoIzQ5NzYpXG4gICAgICAgICAgICB2YXIgbW9kaWZpZWRPcHRpb25zID0gcmVzb2x2ZU1vZGlmaWVkT3B0aW9ucyhDdG9yKTtcbiAgICAgICAgICAgIC8vIHVwZGF0ZSBiYXNlIGV4dGVuZCBvcHRpb25zXG4gICAgICAgICAgICBpZiAobW9kaWZpZWRPcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgZXh0ZW5kKEN0b3IuZXh0ZW5kT3B0aW9ucywgbW9kaWZpZWRPcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9wdGlvbnMgPSBDdG9yLm9wdGlvbnMgPSBtZXJnZU9wdGlvbnMoc3VwZXJPcHRpb25zLCBDdG9yLmV4dGVuZE9wdGlvbnMpO1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMubmFtZSkge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMuY29tcG9uZW50c1tvcHRpb25zLm5hbWVdID0gQ3RvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb3B0aW9ucztcbn1cbmZ1bmN0aW9uIHJlc29sdmVNb2RpZmllZE9wdGlvbnMoQ3Rvcikge1xuICAgIHZhciBtb2RpZmllZDtcbiAgICB2YXIgbGF0ZXN0ID0gQ3Rvci5vcHRpb25zO1xuICAgIHZhciBzZWFsZWQgPSBDdG9yLnNlYWxlZE9wdGlvbnM7XG4gICAgZm9yICh2YXIga2V5IGluIGxhdGVzdCkge1xuICAgICAgICBpZiAobGF0ZXN0W2tleV0gIT09IHNlYWxlZFtrZXldKSB7XG4gICAgICAgICAgICBpZiAoIW1vZGlmaWVkKVxuICAgICAgICAgICAgICAgIG1vZGlmaWVkID0ge307XG4gICAgICAgICAgICBtb2RpZmllZFtrZXldID0gbGF0ZXN0W2tleV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1vZGlmaWVkO1xufVxuXG5mdW5jdGlvbiBGdW5jdGlvbmFsUmVuZGVyQ29udGV4dChkYXRhLCBwcm9wcywgY2hpbGRyZW4sIHBhcmVudCwgQ3Rvcikge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgdmFyIG9wdGlvbnMgPSBDdG9yLm9wdGlvbnM7XG4gICAgLy8gZW5zdXJlIHRoZSBjcmVhdGVFbGVtZW50IGZ1bmN0aW9uIGluIGZ1bmN0aW9uYWwgY29tcG9uZW50c1xuICAgIC8vIGdldHMgYSB1bmlxdWUgY29udGV4dCAtIHRoaXMgaXMgbmVjZXNzYXJ5IGZvciBjb3JyZWN0IG5hbWVkIHNsb3QgY2hlY2tcbiAgICB2YXIgY29udGV4dFZtO1xuICAgIGlmIChoYXNPd24ocGFyZW50LCAnX3VpZCcpKSB7XG4gICAgICAgIGNvbnRleHRWbSA9IE9iamVjdC5jcmVhdGUocGFyZW50KTtcbiAgICAgICAgY29udGV4dFZtLl9vcmlnaW5hbCA9IHBhcmVudDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIC8vIHRoZSBjb250ZXh0IHZtIHBhc3NlZCBpbiBpcyBhIGZ1bmN0aW9uYWwgY29udGV4dCBhcyB3ZWxsLlxuICAgICAgICAvLyBpbiB0aGlzIGNhc2Ugd2Ugd2FudCB0byBtYWtlIHN1cmUgd2UgYXJlIGFibGUgdG8gZ2V0IGEgaG9sZCB0byB0aGVcbiAgICAgICAgLy8gcmVhbCBjb250ZXh0IGluc3RhbmNlLlxuICAgICAgICBjb250ZXh0Vm0gPSBwYXJlbnQ7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgcGFyZW50ID0gcGFyZW50Ll9vcmlnaW5hbDtcbiAgICB9XG4gICAgdmFyIGlzQ29tcGlsZWQgPSBpc1RydWUob3B0aW9ucy5fY29tcGlsZWQpO1xuICAgIHZhciBuZWVkTm9ybWFsaXphdGlvbiA9ICFpc0NvbXBpbGVkO1xuICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgdGhpcy5wcm9wcyA9IHByb3BzO1xuICAgIHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgICB0aGlzLmxpc3RlbmVycyA9IGRhdGEub24gfHwgZW1wdHlPYmplY3Q7XG4gICAgdGhpcy5pbmplY3Rpb25zID0gcmVzb2x2ZUluamVjdChvcHRpb25zLmluamVjdCwgcGFyZW50KTtcbiAgICB0aGlzLnNsb3RzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIV90aGlzLiRzbG90cykge1xuICAgICAgICAgICAgbm9ybWFsaXplU2NvcGVkU2xvdHMocGFyZW50LCBkYXRhLnNjb3BlZFNsb3RzLCAoX3RoaXMuJHNsb3RzID0gcmVzb2x2ZVNsb3RzKGNoaWxkcmVuLCBwYXJlbnQpKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF90aGlzLiRzbG90cztcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnc2NvcGVkU2xvdHMnLCB7XG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZVNjb3BlZFNsb3RzKHBhcmVudCwgZGF0YS5zY29wZWRTbG90cywgdGhpcy5zbG90cygpKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIC8vIHN1cHBvcnQgZm9yIGNvbXBpbGVkIGZ1bmN0aW9uYWwgdGVtcGxhdGVcbiAgICBpZiAoaXNDb21waWxlZCkge1xuICAgICAgICAvLyBleHBvc2luZyAkb3B0aW9ucyBmb3IgcmVuZGVyU3RhdGljKClcbiAgICAgICAgdGhpcy4kb3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICAgIC8vIHByZS1yZXNvbHZlIHNsb3RzIGZvciByZW5kZXJTbG90KClcbiAgICAgICAgdGhpcy4kc2xvdHMgPSB0aGlzLnNsb3RzKCk7XG4gICAgICAgIHRoaXMuJHNjb3BlZFNsb3RzID0gbm9ybWFsaXplU2NvcGVkU2xvdHMocGFyZW50LCBkYXRhLnNjb3BlZFNsb3RzLCB0aGlzLiRzbG90cyk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLl9zY29wZUlkKSB7XG4gICAgICAgIHRoaXMuX2MgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCkge1xuICAgICAgICAgICAgdmFyIHZub2RlID0gY3JlYXRlRWxlbWVudCQxKGNvbnRleHRWbSwgYSwgYiwgYywgZCwgbmVlZE5vcm1hbGl6YXRpb24pO1xuICAgICAgICAgICAgaWYgKHZub2RlICYmICFpc0FycmF5KHZub2RlKSkge1xuICAgICAgICAgICAgICAgIHZub2RlLmZuU2NvcGVJZCA9IG9wdGlvbnMuX3Njb3BlSWQ7XG4gICAgICAgICAgICAgICAgdm5vZGUuZm5Db250ZXh0ID0gcGFyZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHZub2RlO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5fYyA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkKSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlRWxlbWVudCQxKGNvbnRleHRWbSwgYSwgYiwgYywgZCwgbmVlZE5vcm1hbGl6YXRpb24pO1xuICAgICAgICB9O1xuICAgIH1cbn1cbmluc3RhbGxSZW5kZXJIZWxwZXJzKEZ1bmN0aW9uYWxSZW5kZXJDb250ZXh0LnByb3RvdHlwZSk7XG5mdW5jdGlvbiBjcmVhdGVGdW5jdGlvbmFsQ29tcG9uZW50KEN0b3IsIHByb3BzRGF0YSwgZGF0YSwgY29udGV4dFZtLCBjaGlsZHJlbikge1xuICAgIHZhciBvcHRpb25zID0gQ3Rvci5vcHRpb25zO1xuICAgIHZhciBwcm9wcyA9IHt9O1xuICAgIHZhciBwcm9wT3B0aW9ucyA9IG9wdGlvbnMucHJvcHM7XG4gICAgaWYgKGlzRGVmKHByb3BPcHRpb25zKSkge1xuICAgICAgICBmb3IgKHZhciBrZXkgaW4gcHJvcE9wdGlvbnMpIHtcbiAgICAgICAgICAgIHByb3BzW2tleV0gPSB2YWxpZGF0ZVByb3Aoa2V5LCBwcm9wT3B0aW9ucywgcHJvcHNEYXRhIHx8IGVtcHR5T2JqZWN0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKGlzRGVmKGRhdGEuYXR0cnMpKVxuICAgICAgICAgICAgbWVyZ2VQcm9wcyhwcm9wcywgZGF0YS5hdHRycyk7XG4gICAgICAgIGlmIChpc0RlZihkYXRhLnByb3BzKSlcbiAgICAgICAgICAgIG1lcmdlUHJvcHMocHJvcHMsIGRhdGEucHJvcHMpO1xuICAgIH1cbiAgICB2YXIgcmVuZGVyQ29udGV4dCA9IG5ldyBGdW5jdGlvbmFsUmVuZGVyQ29udGV4dChkYXRhLCBwcm9wcywgY2hpbGRyZW4sIGNvbnRleHRWbSwgQ3Rvcik7XG4gICAgdmFyIHZub2RlID0gb3B0aW9ucy5yZW5kZXIuY2FsbChudWxsLCByZW5kZXJDb250ZXh0Ll9jLCByZW5kZXJDb250ZXh0KTtcbiAgICBpZiAodm5vZGUgaW5zdGFuY2VvZiBWTm9kZSkge1xuICAgICAgICByZXR1cm4gY2xvbmVBbmRNYXJrRnVuY3Rpb25hbFJlc3VsdCh2bm9kZSwgZGF0YSwgcmVuZGVyQ29udGV4dC5wYXJlbnQsIG9wdGlvbnMsIHJlbmRlckNvbnRleHQpO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc0FycmF5KHZub2RlKSkge1xuICAgICAgICB2YXIgdm5vZGVzID0gbm9ybWFsaXplQ2hpbGRyZW4odm5vZGUpIHx8IFtdO1xuICAgICAgICB2YXIgcmVzID0gbmV3IEFycmF5KHZub2Rlcy5sZW5ndGgpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgcmVzW2ldID0gY2xvbmVBbmRNYXJrRnVuY3Rpb25hbFJlc3VsdCh2bm9kZXNbaV0sIGRhdGEsIHJlbmRlckNvbnRleHQucGFyZW50LCBvcHRpb25zLCByZW5kZXJDb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGNsb25lQW5kTWFya0Z1bmN0aW9uYWxSZXN1bHQodm5vZGUsIGRhdGEsIGNvbnRleHRWbSwgb3B0aW9ucywgcmVuZGVyQ29udGV4dCkge1xuICAgIC8vICM3ODE3IGNsb25lIG5vZGUgYmVmb3JlIHNldHRpbmcgZm5Db250ZXh0LCBvdGhlcndpc2UgaWYgdGhlIG5vZGUgaXMgcmV1c2VkXG4gICAgLy8gKGUuZy4gaXQgd2FzIGZyb20gYSBjYWNoZWQgbm9ybWFsIHNsb3QpIHRoZSBmbkNvbnRleHQgY2F1c2VzIG5hbWVkIHNsb3RzXG4gICAgLy8gdGhhdCBzaG91bGQgbm90IGJlIG1hdGNoZWQgdG8gbWF0Y2guXG4gICAgdmFyIGNsb25lID0gY2xvbmVWTm9kZSh2bm9kZSk7XG4gICAgY2xvbmUuZm5Db250ZXh0ID0gY29udGV4dFZtO1xuICAgIGNsb25lLmZuT3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgKGNsb25lLmRldnRvb2xzTWV0YSA9IGNsb25lLmRldnRvb2xzTWV0YSB8fCB7fSkucmVuZGVyQ29udGV4dCA9XG4gICAgICAgICAgICByZW5kZXJDb250ZXh0O1xuICAgIH1cbiAgICBpZiAoZGF0YS5zbG90KSB7XG4gICAgICAgIChjbG9uZS5kYXRhIHx8IChjbG9uZS5kYXRhID0ge30pKS5zbG90ID0gZGF0YS5zbG90O1xuICAgIH1cbiAgICByZXR1cm4gY2xvbmU7XG59XG5mdW5jdGlvbiBtZXJnZVByb3BzKHRvLCBmcm9tKSB7XG4gICAgZm9yICh2YXIga2V5IGluIGZyb20pIHtcbiAgICAgICAgdG9bY2FtZWxpemUoa2V5KV0gPSBmcm9tW2tleV07XG4gICAgfVxufVxuXG5mdW5jdGlvbiBnZXRDb21wb25lbnROYW1lKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gb3B0aW9ucy5uYW1lIHx8IG9wdGlvbnMuX19uYW1lIHx8IG9wdGlvbnMuX2NvbXBvbmVudFRhZztcbn1cbi8vIGlubGluZSBob29rcyB0byBiZSBpbnZva2VkIG9uIGNvbXBvbmVudCBWTm9kZXMgZHVyaW5nIHBhdGNoXG52YXIgY29tcG9uZW50Vk5vZGVIb29rcyA9IHtcbiAgICBpbml0OiBmdW5jdGlvbiAodm5vZGUsIGh5ZHJhdGluZykge1xuICAgICAgICBpZiAodm5vZGUuY29tcG9uZW50SW5zdGFuY2UgJiZcbiAgICAgICAgICAgICF2bm9kZS5jb21wb25lbnRJbnN0YW5jZS5faXNEZXN0cm95ZWQgJiZcbiAgICAgICAgICAgIHZub2RlLmRhdGEua2VlcEFsaXZlKSB7XG4gICAgICAgICAgICAvLyBrZXB0LWFsaXZlIGNvbXBvbmVudHMsIHRyZWF0IGFzIGEgcGF0Y2hcbiAgICAgICAgICAgIHZhciBtb3VudGVkTm9kZSA9IHZub2RlOyAvLyB3b3JrIGFyb3VuZCBmbG93XG4gICAgICAgICAgICBjb21wb25lbnRWTm9kZUhvb2tzLnByZXBhdGNoKG1vdW50ZWROb2RlLCBtb3VudGVkTm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgY2hpbGQgPSAodm5vZGUuY29tcG9uZW50SW5zdGFuY2UgPSBjcmVhdGVDb21wb25lbnRJbnN0YW5jZUZvclZub2RlKHZub2RlLCBhY3RpdmVJbnN0YW5jZSkpO1xuICAgICAgICAgICAgY2hpbGQuJG1vdW50KGh5ZHJhdGluZyA/IHZub2RlLmVsbSA6IHVuZGVmaW5lZCwgaHlkcmF0aW5nKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgcHJlcGF0Y2g6IGZ1bmN0aW9uIChvbGRWbm9kZSwgdm5vZGUpIHtcbiAgICAgICAgdmFyIG9wdGlvbnMgPSB2bm9kZS5jb21wb25lbnRPcHRpb25zO1xuICAgICAgICB2YXIgY2hpbGQgPSAodm5vZGUuY29tcG9uZW50SW5zdGFuY2UgPSBvbGRWbm9kZS5jb21wb25lbnRJbnN0YW5jZSk7XG4gICAgICAgIHVwZGF0ZUNoaWxkQ29tcG9uZW50KGNoaWxkLCBvcHRpb25zLnByb3BzRGF0YSwgLy8gdXBkYXRlZCBwcm9wc1xuICAgICAgICBvcHRpb25zLmxpc3RlbmVycywgLy8gdXBkYXRlZCBsaXN0ZW5lcnNcbiAgICAgICAgdm5vZGUsIC8vIG5ldyBwYXJlbnQgdm5vZGVcbiAgICAgICAgb3B0aW9ucy5jaGlsZHJlbiAvLyBuZXcgY2hpbGRyZW5cbiAgICAgICAgKTtcbiAgICB9LFxuICAgIGluc2VydDogZnVuY3Rpb24gKHZub2RlKSB7XG4gICAgICAgIHZhciBjb250ZXh0ID0gdm5vZGUuY29udGV4dCwgY29tcG9uZW50SW5zdGFuY2UgPSB2bm9kZS5jb21wb25lbnRJbnN0YW5jZTtcbiAgICAgICAgaWYgKCFjb21wb25lbnRJbnN0YW5jZS5faXNNb3VudGVkKSB7XG4gICAgICAgICAgICBjb21wb25lbnRJbnN0YW5jZS5faXNNb3VudGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGNhbGxIb29rJDEoY29tcG9uZW50SW5zdGFuY2UsICdtb3VudGVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZub2RlLmRhdGEua2VlcEFsaXZlKSB7XG4gICAgICAgICAgICBpZiAoY29udGV4dC5faXNNb3VudGVkKSB7XG4gICAgICAgICAgICAgICAgLy8gdnVlLXJvdXRlciMxMjEyXG4gICAgICAgICAgICAgICAgLy8gRHVyaW5nIHVwZGF0ZXMsIGEga2VwdC1hbGl2ZSBjb21wb25lbnQncyBjaGlsZCBjb21wb25lbnRzIG1heVxuICAgICAgICAgICAgICAgIC8vIGNoYW5nZSwgc28gZGlyZWN0bHkgd2Fsa2luZyB0aGUgdHJlZSBoZXJlIG1heSBjYWxsIGFjdGl2YXRlZCBob29rc1xuICAgICAgICAgICAgICAgIC8vIG9uIGluY29ycmVjdCBjaGlsZHJlbi4gSW5zdGVhZCB3ZSBwdXNoIHRoZW0gaW50byBhIHF1ZXVlIHdoaWNoIHdpbGxcbiAgICAgICAgICAgICAgICAvLyBiZSBwcm9jZXNzZWQgYWZ0ZXIgdGhlIHdob2xlIHBhdGNoIHByb2Nlc3MgZW5kZWQuXG4gICAgICAgICAgICAgICAgcXVldWVBY3RpdmF0ZWRDb21wb25lbnQoY29tcG9uZW50SW5zdGFuY2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYWN0aXZhdGVDaGlsZENvbXBvbmVudChjb21wb25lbnRJbnN0YW5jZSwgdHJ1ZSAvKiBkaXJlY3QgKi8pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICBkZXN0cm95OiBmdW5jdGlvbiAodm5vZGUpIHtcbiAgICAgICAgdmFyIGNvbXBvbmVudEluc3RhbmNlID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2U7XG4gICAgICAgIGlmICghY29tcG9uZW50SW5zdGFuY2UuX2lzRGVzdHJveWVkKSB7XG4gICAgICAgICAgICBpZiAoIXZub2RlLmRhdGEua2VlcEFsaXZlKSB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50SW5zdGFuY2UuJGRlc3Ryb3koKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGRlYWN0aXZhdGVDaGlsZENvbXBvbmVudChjb21wb25lbnRJbnN0YW5jZSwgdHJ1ZSAvKiBkaXJlY3QgKi8pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcbnZhciBob29rc1RvTWVyZ2UgPSBPYmplY3Qua2V5cyhjb21wb25lbnRWTm9kZUhvb2tzKTtcbmZ1bmN0aW9uIGNyZWF0ZUNvbXBvbmVudChDdG9yLCBkYXRhLCBjb250ZXh0LCBjaGlsZHJlbiwgdGFnKSB7XG4gICAgaWYgKGlzVW5kZWYoQ3RvcikpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgYmFzZUN0b3IgPSBjb250ZXh0LiRvcHRpb25zLl9iYXNlO1xuICAgIC8vIHBsYWluIG9wdGlvbnMgb2JqZWN0OiB0dXJuIGl0IGludG8gYSBjb25zdHJ1Y3RvclxuICAgIGlmIChpc09iamVjdChDdG9yKSkge1xuICAgICAgICBDdG9yID0gYmFzZUN0b3IuZXh0ZW5kKEN0b3IpO1xuICAgIH1cbiAgICAvLyBpZiBhdCB0aGlzIHN0YWdlIGl0J3Mgbm90IGEgY29uc3RydWN0b3Igb3IgYW4gYXN5bmMgY29tcG9uZW50IGZhY3RvcnksXG4gICAgLy8gcmVqZWN0LlxuICAgIGlmICh0eXBlb2YgQ3RvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgd2FybiQyKFwiSW52YWxpZCBDb21wb25lbnQgZGVmaW5pdGlvbjogXCIuY29uY2F0KFN0cmluZyhDdG9yKSksIGNvbnRleHQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gYXN5bmMgY29tcG9uZW50XG4gICAgdmFyIGFzeW5jRmFjdG9yeTtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgaWYgKGlzVW5kZWYoQ3Rvci5jaWQpKSB7XG4gICAgICAgIGFzeW5jRmFjdG9yeSA9IEN0b3I7XG4gICAgICAgIEN0b3IgPSByZXNvbHZlQXN5bmNDb21wb25lbnQoYXN5bmNGYWN0b3J5LCBiYXNlQ3Rvcik7XG4gICAgICAgIGlmIChDdG9yID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIHJldHVybiBhIHBsYWNlaG9sZGVyIG5vZGUgZm9yIGFzeW5jIGNvbXBvbmVudCwgd2hpY2ggaXMgcmVuZGVyZWRcbiAgICAgICAgICAgIC8vIGFzIGEgY29tbWVudCBub2RlIGJ1dCBwcmVzZXJ2ZXMgYWxsIHRoZSByYXcgaW5mb3JtYXRpb24gZm9yIHRoZSBub2RlLlxuICAgICAgICAgICAgLy8gdGhlIGluZm9ybWF0aW9uIHdpbGwgYmUgdXNlZCBmb3IgYXN5bmMgc2VydmVyLXJlbmRlcmluZyBhbmQgaHlkcmF0aW9uLlxuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUFzeW5jUGxhY2Vob2xkZXIoYXN5bmNGYWN0b3J5LCBkYXRhLCBjb250ZXh0LCBjaGlsZHJlbiwgdGFnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBkYXRhID0gZGF0YSB8fCB7fTtcbiAgICAvLyByZXNvbHZlIGNvbnN0cnVjdG9yIG9wdGlvbnMgaW4gY2FzZSBnbG9iYWwgbWl4aW5zIGFyZSBhcHBsaWVkIGFmdGVyXG4gICAgLy8gY29tcG9uZW50IGNvbnN0cnVjdG9yIGNyZWF0aW9uXG4gICAgcmVzb2x2ZUNvbnN0cnVjdG9yT3B0aW9ucyhDdG9yKTtcbiAgICAvLyB0cmFuc2Zvcm0gY29tcG9uZW50IHYtbW9kZWwgZGF0YSBpbnRvIHByb3BzICYgZXZlbnRzXG4gICAgaWYgKGlzRGVmKGRhdGEubW9kZWwpKSB7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgdHJhbnNmb3JtTW9kZWwoQ3Rvci5vcHRpb25zLCBkYXRhKTtcbiAgICB9XG4gICAgLy8gZXh0cmFjdCBwcm9wc1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICB2YXIgcHJvcHNEYXRhID0gZXh0cmFjdFByb3BzRnJvbVZOb2RlRGF0YShkYXRhLCBDdG9yLCB0YWcpO1xuICAgIC8vIGZ1bmN0aW9uYWwgY29tcG9uZW50XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgIGlmIChpc1RydWUoQ3Rvci5vcHRpb25zLmZ1bmN0aW9uYWwpKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVGdW5jdGlvbmFsQ29tcG9uZW50KEN0b3IsIHByb3BzRGF0YSwgZGF0YSwgY29udGV4dCwgY2hpbGRyZW4pO1xuICAgIH1cbiAgICAvLyBleHRyYWN0IGxpc3RlbmVycywgc2luY2UgdGhlc2UgbmVlZHMgdG8gYmUgdHJlYXRlZCBhc1xuICAgIC8vIGNoaWxkIGNvbXBvbmVudCBsaXN0ZW5lcnMgaW5zdGVhZCBvZiBET00gbGlzdGVuZXJzXG4gICAgdmFyIGxpc3RlbmVycyA9IGRhdGEub247XG4gICAgLy8gcmVwbGFjZSB3aXRoIGxpc3RlbmVycyB3aXRoIC5uYXRpdmUgbW9kaWZpZXJcbiAgICAvLyBzbyBpdCBnZXRzIHByb2Nlc3NlZCBkdXJpbmcgcGFyZW50IGNvbXBvbmVudCBwYXRjaC5cbiAgICBkYXRhLm9uID0gZGF0YS5uYXRpdmVPbjtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgaWYgKGlzVHJ1ZShDdG9yLm9wdGlvbnMuYWJzdHJhY3QpKSB7XG4gICAgICAgIC8vIGFic3RyYWN0IGNvbXBvbmVudHMgZG8gbm90IGtlZXAgYW55dGhpbmdcbiAgICAgICAgLy8gb3RoZXIgdGhhbiBwcm9wcyAmIGxpc3RlbmVycyAmIHNsb3RcbiAgICAgICAgLy8gd29yayBhcm91bmQgZmxvd1xuICAgICAgICB2YXIgc2xvdCA9IGRhdGEuc2xvdDtcbiAgICAgICAgZGF0YSA9IHt9O1xuICAgICAgICBpZiAoc2xvdCkge1xuICAgICAgICAgICAgZGF0YS5zbG90ID0gc2xvdDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBpbnN0YWxsIGNvbXBvbmVudCBtYW5hZ2VtZW50IGhvb2tzIG9udG8gdGhlIHBsYWNlaG9sZGVyIG5vZGVcbiAgICBpbnN0YWxsQ29tcG9uZW50SG9va3MoZGF0YSk7XG4gICAgLy8gcmV0dXJuIGEgcGxhY2Vob2xkZXIgdm5vZGVcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lKEN0b3Iub3B0aW9ucykgfHwgdGFnO1xuICAgIHZhciB2bm9kZSA9IG5ldyBWTm9kZShcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgXCJ2dWUtY29tcG9uZW50LVwiLmNvbmNhdChDdG9yLmNpZCkuY29uY2F0KG5hbWUgPyBcIi1cIi5jb25jYXQobmFtZSkgOiAnJyksIGRhdGEsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGNvbnRleHQsIFxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICB7IEN0b3I6IEN0b3IsIHByb3BzRGF0YTogcHJvcHNEYXRhLCBsaXN0ZW5lcnM6IGxpc3RlbmVycywgdGFnOiB0YWcsIGNoaWxkcmVuOiBjaGlsZHJlbiB9LCBhc3luY0ZhY3RvcnkpO1xuICAgIHJldHVybiB2bm9kZTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUNvbXBvbmVudEluc3RhbmNlRm9yVm5vZGUoXG4vLyB3ZSBrbm93IGl0J3MgTW91bnRlZENvbXBvbmVudFZOb2RlIGJ1dCBmbG93IGRvZXNuJ3RcbnZub2RlLCBcbi8vIGFjdGl2ZUluc3RhbmNlIGluIGxpZmVjeWNsZSBzdGF0ZVxucGFyZW50KSB7XG4gICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICAgIF9pc0NvbXBvbmVudDogdHJ1ZSxcbiAgICAgICAgX3BhcmVudFZub2RlOiB2bm9kZSxcbiAgICAgICAgcGFyZW50OiBwYXJlbnRcbiAgICB9O1xuICAgIC8vIGNoZWNrIGlubGluZS10ZW1wbGF0ZSByZW5kZXIgZnVuY3Rpb25zXG4gICAgdmFyIGlubGluZVRlbXBsYXRlID0gdm5vZGUuZGF0YS5pbmxpbmVUZW1wbGF0ZTtcbiAgICBpZiAoaXNEZWYoaW5saW5lVGVtcGxhdGUpKSB7XG4gICAgICAgIG9wdGlvbnMucmVuZGVyID0gaW5saW5lVGVtcGxhdGUucmVuZGVyO1xuICAgICAgICBvcHRpb25zLnN0YXRpY1JlbmRlckZucyA9IGlubGluZVRlbXBsYXRlLnN0YXRpY1JlbmRlckZucztcbiAgICB9XG4gICAgcmV0dXJuIG5ldyB2bm9kZS5jb21wb25lbnRPcHRpb25zLkN0b3Iob3B0aW9ucyk7XG59XG5mdW5jdGlvbiBpbnN0YWxsQ29tcG9uZW50SG9va3MoZGF0YSkge1xuICAgIHZhciBob29rcyA9IGRhdGEuaG9vayB8fCAoZGF0YS5ob29rID0ge30pO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaG9va3NUb01lcmdlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBrZXkgPSBob29rc1RvTWVyZ2VbaV07XG4gICAgICAgIHZhciBleGlzdGluZyA9IGhvb2tzW2tleV07XG4gICAgICAgIHZhciB0b01lcmdlID0gY29tcG9uZW50Vk5vZGVIb29rc1trZXldO1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgIGlmIChleGlzdGluZyAhPT0gdG9NZXJnZSAmJiAhKGV4aXN0aW5nICYmIGV4aXN0aW5nLl9tZXJnZWQpKSB7XG4gICAgICAgICAgICBob29rc1trZXldID0gZXhpc3RpbmcgPyBtZXJnZUhvb2sodG9NZXJnZSwgZXhpc3RpbmcpIDogdG9NZXJnZTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIG1lcmdlSG9vayhmMSwgZjIpIHtcbiAgICB2YXIgbWVyZ2VkID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgLy8gZmxvdyBjb21wbGFpbnMgYWJvdXQgZXh0cmEgYXJncyB3aGljaCBpcyB3aHkgd2UgdXNlIGFueVxuICAgICAgICBmMShhLCBiKTtcbiAgICAgICAgZjIoYSwgYik7XG4gICAgfTtcbiAgICBtZXJnZWQuX21lcmdlZCA9IHRydWU7XG4gICAgcmV0dXJuIG1lcmdlZDtcbn1cbi8vIHRyYW5zZm9ybSBjb21wb25lbnQgdi1tb2RlbCBpbmZvICh2YWx1ZSBhbmQgY2FsbGJhY2spIGludG9cbi8vIHByb3AgYW5kIGV2ZW50IGhhbmRsZXIgcmVzcGVjdGl2ZWx5LlxuZnVuY3Rpb24gdHJhbnNmb3JtTW9kZWwob3B0aW9ucywgZGF0YSkge1xuICAgIHZhciBwcm9wID0gKG9wdGlvbnMubW9kZWwgJiYgb3B0aW9ucy5tb2RlbC5wcm9wKSB8fCAndmFsdWUnO1xuICAgIHZhciBldmVudCA9IChvcHRpb25zLm1vZGVsICYmIG9wdGlvbnMubW9kZWwuZXZlbnQpIHx8ICdpbnB1dCc7XG4gICAgKGRhdGEuYXR0cnMgfHwgKGRhdGEuYXR0cnMgPSB7fSkpW3Byb3BdID0gZGF0YS5tb2RlbC52YWx1ZTtcbiAgICB2YXIgb24gPSBkYXRhLm9uIHx8IChkYXRhLm9uID0ge30pO1xuICAgIHZhciBleGlzdGluZyA9IG9uW2V2ZW50XTtcbiAgICB2YXIgY2FsbGJhY2sgPSBkYXRhLm1vZGVsLmNhbGxiYWNrO1xuICAgIGlmIChpc0RlZihleGlzdGluZykpIHtcbiAgICAgICAgaWYgKGlzQXJyYXkoZXhpc3RpbmcpXG4gICAgICAgICAgICA/IGV4aXN0aW5nLmluZGV4T2YoY2FsbGJhY2spID09PSAtMVxuICAgICAgICAgICAgOiBleGlzdGluZyAhPT0gY2FsbGJhY2spIHtcbiAgICAgICAgICAgIG9uW2V2ZW50XSA9IFtjYWxsYmFja10uY29uY2F0KGV4aXN0aW5nKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgb25bZXZlbnRdID0gY2FsbGJhY2s7XG4gICAgfVxufVxuXG52YXIgd2FybiQyID0gbm9vcDtcbnZhciB0aXAgPSBub29wO1xudmFyIGdlbmVyYXRlQ29tcG9uZW50VHJhY2U7IC8vIHdvcmsgYXJvdW5kIGZsb3cgY2hlY2tcbnZhciBmb3JtYXRDb21wb25lbnROYW1lO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICB2YXIgaGFzQ29uc29sZV8xID0gdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnO1xuICAgIHZhciBjbGFzc2lmeVJFXzEgPSAvKD86XnxbLV9dKShcXHcpL2c7XG4gICAgdmFyIGNsYXNzaWZ5XzEgPSBmdW5jdGlvbiAoc3RyKSB7XG4gICAgICAgIHJldHVybiBzdHIucmVwbGFjZShjbGFzc2lmeVJFXzEsIGZ1bmN0aW9uIChjKSB7IHJldHVybiBjLnRvVXBwZXJDYXNlKCk7IH0pLnJlcGxhY2UoL1stX10vZywgJycpO1xuICAgIH07XG4gICAgd2FybiQyID0gZnVuY3Rpb24gKG1zZywgdm0pIHtcbiAgICAgICAgaWYgKHZtID09PSB2b2lkIDApIHsgdm0gPSBjdXJyZW50SW5zdGFuY2U7IH1cbiAgICAgICAgdmFyIHRyYWNlID0gdm0gPyBnZW5lcmF0ZUNvbXBvbmVudFRyYWNlKHZtKSA6ICcnO1xuICAgICAgICBpZiAoY29uZmlnLndhcm5IYW5kbGVyKSB7XG4gICAgICAgICAgICBjb25maWcud2FybkhhbmRsZXIuY2FsbChudWxsLCBtc2csIHZtLCB0cmFjZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaGFzQ29uc29sZV8xICYmICFjb25maWcuc2lsZW50KSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiW1Z1ZSB3YXJuXTogXCIuY29uY2F0KG1zZykuY29uY2F0KHRyYWNlKSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHRpcCA9IGZ1bmN0aW9uIChtc2csIHZtKSB7XG4gICAgICAgIGlmIChoYXNDb25zb2xlXzEgJiYgIWNvbmZpZy5zaWxlbnQpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcIltWdWUgdGlwXTogXCIuY29uY2F0KG1zZykgKyAodm0gPyBnZW5lcmF0ZUNvbXBvbmVudFRyYWNlKHZtKSA6ICcnKSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGZvcm1hdENvbXBvbmVudE5hbWUgPSBmdW5jdGlvbiAodm0sIGluY2x1ZGVGaWxlKSB7XG4gICAgICAgIGlmICh2bS4kcm9vdCA9PT0gdm0pIHtcbiAgICAgICAgICAgIHJldHVybiAnPFJvb3Q+JztcbiAgICAgICAgfVxuICAgICAgICB2YXIgb3B0aW9ucyA9IGlzRnVuY3Rpb24odm0pICYmIHZtLmNpZCAhPSBudWxsXG4gICAgICAgICAgICA/IHZtLm9wdGlvbnNcbiAgICAgICAgICAgIDogdm0uX2lzVnVlXG4gICAgICAgICAgICAgICAgPyB2bS4kb3B0aW9ucyB8fCB2bS5jb25zdHJ1Y3Rvci5vcHRpb25zXG4gICAgICAgICAgICAgICAgOiB2bTtcbiAgICAgICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lKG9wdGlvbnMpO1xuICAgICAgICB2YXIgZmlsZSA9IG9wdGlvbnMuX19maWxlO1xuICAgICAgICBpZiAoIW5hbWUgJiYgZmlsZSkge1xuICAgICAgICAgICAgdmFyIG1hdGNoID0gZmlsZS5tYXRjaCgvKFteL1xcXFxdKylcXC52dWUkLyk7XG4gICAgICAgICAgICBuYW1lID0gbWF0Y2ggJiYgbWF0Y2hbMV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICgobmFtZSA/IFwiPFwiLmNvbmNhdChjbGFzc2lmeV8xKG5hbWUpLCBcIj5cIikgOiBcIjxBbm9ueW1vdXM+XCIpICtcbiAgICAgICAgICAgIChmaWxlICYmIGluY2x1ZGVGaWxlICE9PSBmYWxzZSA/IFwiIGF0IFwiLmNvbmNhdChmaWxlKSA6ICcnKSk7XG4gICAgfTtcbiAgICB2YXIgcmVwZWF0XzEgPSBmdW5jdGlvbiAoc3RyLCBuKSB7XG4gICAgICAgIHZhciByZXMgPSAnJztcbiAgICAgICAgd2hpbGUgKG4pIHtcbiAgICAgICAgICAgIGlmIChuICUgMiA9PT0gMSlcbiAgICAgICAgICAgICAgICByZXMgKz0gc3RyO1xuICAgICAgICAgICAgaWYgKG4gPiAxKVxuICAgICAgICAgICAgICAgIHN0ciArPSBzdHI7XG4gICAgICAgICAgICBuID4+PSAxO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfTtcbiAgICBnZW5lcmF0ZUNvbXBvbmVudFRyYWNlID0gZnVuY3Rpb24gKHZtKSB7XG4gICAgICAgIGlmICh2bS5faXNWdWUgJiYgdm0uJHBhcmVudCkge1xuICAgICAgICAgICAgdmFyIHRyZWUgPSBbXTtcbiAgICAgICAgICAgIHZhciBjdXJyZW50UmVjdXJzaXZlU2VxdWVuY2UgPSAwO1xuICAgICAgICAgICAgd2hpbGUgKHZtKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRyZWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbGFzdCA9IHRyZWVbdHJlZS5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxhc3QuY29uc3RydWN0b3IgPT09IHZtLmNvbnN0cnVjdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50UmVjdXJzaXZlU2VxdWVuY2UrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZtID0gdm0uJHBhcmVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGN1cnJlbnRSZWN1cnNpdmVTZXF1ZW5jZSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyZWVbdHJlZS5sZW5ndGggLSAxXSA9IFtsYXN0LCBjdXJyZW50UmVjdXJzaXZlU2VxdWVuY2VdO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFJlY3Vyc2l2ZVNlcXVlbmNlID0gMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0cmVlLnB1c2godm0pO1xuICAgICAgICAgICAgICAgIHZtID0gdm0uJHBhcmVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAoJ1xcblxcbmZvdW5kIGluXFxuXFxuJyArXG4gICAgICAgICAgICAgICAgdHJlZVxuICAgICAgICAgICAgICAgICAgICAubWFwKGZ1bmN0aW9uICh2bSwgaSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJcIi5jb25jYXQoaSA9PT0gMCA/ICctLS0+ICcgOiByZXBlYXRfMSgnICcsIDUgKyBpICogMikpLmNvbmNhdChpc0FycmF5KHZtKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBcIlwiLmNvbmNhdChmb3JtYXRDb21wb25lbnROYW1lKHZtWzBdKSwgXCIuLi4gKFwiKS5jb25jYXQodm1bMV0sIFwiIHJlY3Vyc2l2ZSBjYWxscylcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIDogZm9ybWF0Q29tcG9uZW50TmFtZSh2bSkpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC5qb2luKCdcXG4nKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gXCJcXG5cXG4oZm91bmQgaW4gXCIuY29uY2F0KGZvcm1hdENvbXBvbmVudE5hbWUodm0pLCBcIilcIik7XG4gICAgICAgIH1cbiAgICB9O1xufVxuXG4vKipcbiAqIE9wdGlvbiBvdmVyd3JpdGluZyBzdHJhdGVnaWVzIGFyZSBmdW5jdGlvbnMgdGhhdCBoYW5kbGVcbiAqIGhvdyB0byBtZXJnZSBhIHBhcmVudCBvcHRpb24gdmFsdWUgYW5kIGEgY2hpbGQgb3B0aW9uXG4gKiB2YWx1ZSBpbnRvIHRoZSBmaW5hbCB2YWx1ZS5cbiAqL1xudmFyIHN0cmF0cyA9IGNvbmZpZy5vcHRpb25NZXJnZVN0cmF0ZWdpZXM7XG4vKipcbiAqIE9wdGlvbnMgd2l0aCByZXN0cmljdGlvbnNcbiAqL1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBzdHJhdHMuZWwgPSBzdHJhdHMucHJvcHNEYXRhID0gZnVuY3Rpb24gKHBhcmVudCwgY2hpbGQsIHZtLCBrZXkpIHtcbiAgICAgICAgaWYgKCF2bSkge1xuICAgICAgICAgICAgd2FybiQyKFwib3B0aW9uIFxcXCJcIi5jb25jYXQoa2V5LCBcIlxcXCIgY2FuIG9ubHkgYmUgdXNlZCBkdXJpbmcgaW5zdGFuY2UgXCIpICtcbiAgICAgICAgICAgICAgICAnY3JlYXRpb24gd2l0aCB0aGUgYG5ld2Aga2V5d29yZC4nKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVmYXVsdFN0cmF0KHBhcmVudCwgY2hpbGQpO1xuICAgIH07XG59XG4vKipcbiAqIEhlbHBlciB0aGF0IHJlY3Vyc2l2ZWx5IG1lcmdlcyB0d28gZGF0YSBvYmplY3RzIHRvZ2V0aGVyLlxuICovXG5mdW5jdGlvbiBtZXJnZURhdGEodG8sIGZyb20sIHJlY3Vyc2l2ZSkge1xuICAgIGlmIChyZWN1cnNpdmUgPT09IHZvaWQgMCkgeyByZWN1cnNpdmUgPSB0cnVlOyB9XG4gICAgaWYgKCFmcm9tKVxuICAgICAgICByZXR1cm4gdG87XG4gICAgdmFyIGtleSwgdG9WYWwsIGZyb21WYWw7XG4gICAgdmFyIGtleXMgPSBoYXNTeW1ib2xcbiAgICAgICAgPyBSZWZsZWN0Lm93bktleXMoZnJvbSlcbiAgICAgICAgOiBPYmplY3Qua2V5cyhmcm9tKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgLy8gaW4gY2FzZSB0aGUgb2JqZWN0IGlzIGFscmVhZHkgb2JzZXJ2ZWQuLi5cbiAgICAgICAgaWYgKGtleSA9PT0gJ19fb2JfXycpXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgdG9WYWwgPSB0b1trZXldO1xuICAgICAgICBmcm9tVmFsID0gZnJvbVtrZXldO1xuICAgICAgICBpZiAoIXJlY3Vyc2l2ZSB8fCAhaGFzT3duKHRvLCBrZXkpKSB7XG4gICAgICAgICAgICBzZXQodG8sIGtleSwgZnJvbVZhbCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodG9WYWwgIT09IGZyb21WYWwgJiZcbiAgICAgICAgICAgIGlzUGxhaW5PYmplY3QodG9WYWwpICYmXG4gICAgICAgICAgICBpc1BsYWluT2JqZWN0KGZyb21WYWwpKSB7XG4gICAgICAgICAgICBtZXJnZURhdGEodG9WYWwsIGZyb21WYWwpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0bztcbn1cbi8qKlxuICogRGF0YVxuICovXG5mdW5jdGlvbiBtZXJnZURhdGFPckZuKHBhcmVudFZhbCwgY2hpbGRWYWwsIHZtKSB7XG4gICAgaWYgKCF2bSkge1xuICAgICAgICAvLyBpbiBhIFZ1ZS5leHRlbmQgbWVyZ2UsIGJvdGggc2hvdWxkIGJlIGZ1bmN0aW9uc1xuICAgICAgICBpZiAoIWNoaWxkVmFsKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyZW50VmFsO1xuICAgICAgICB9XG4gICAgICAgIGlmICghcGFyZW50VmFsKSB7XG4gICAgICAgICAgICByZXR1cm4gY2hpbGRWYWw7XG4gICAgICAgIH1cbiAgICAgICAgLy8gd2hlbiBwYXJlbnRWYWwgJiBjaGlsZFZhbCBhcmUgYm90aCBwcmVzZW50LFxuICAgICAgICAvLyB3ZSBuZWVkIHRvIHJldHVybiBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGVcbiAgICAgICAgLy8gbWVyZ2VkIHJlc3VsdCBvZiBib3RoIGZ1bmN0aW9ucy4uLiBubyBuZWVkIHRvXG4gICAgICAgIC8vIGNoZWNrIGlmIHBhcmVudFZhbCBpcyBhIGZ1bmN0aW9uIGhlcmUgYmVjYXVzZVxuICAgICAgICAvLyBpdCBoYXMgdG8gYmUgYSBmdW5jdGlvbiB0byBwYXNzIHByZXZpb3VzIG1lcmdlcy5cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIG1lcmdlZERhdGFGbigpIHtcbiAgICAgICAgICAgIHJldHVybiBtZXJnZURhdGEoaXNGdW5jdGlvbihjaGlsZFZhbCkgPyBjaGlsZFZhbC5jYWxsKHRoaXMsIHRoaXMpIDogY2hpbGRWYWwsIGlzRnVuY3Rpb24ocGFyZW50VmFsKSA/IHBhcmVudFZhbC5jYWxsKHRoaXMsIHRoaXMpIDogcGFyZW50VmFsKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBtZXJnZWRJbnN0YW5jZURhdGFGbigpIHtcbiAgICAgICAgICAgIC8vIGluc3RhbmNlIG1lcmdlXG4gICAgICAgICAgICB2YXIgaW5zdGFuY2VEYXRhID0gaXNGdW5jdGlvbihjaGlsZFZhbClcbiAgICAgICAgICAgICAgICA/IGNoaWxkVmFsLmNhbGwodm0sIHZtKVxuICAgICAgICAgICAgICAgIDogY2hpbGRWYWw7XG4gICAgICAgICAgICB2YXIgZGVmYXVsdERhdGEgPSBpc0Z1bmN0aW9uKHBhcmVudFZhbClcbiAgICAgICAgICAgICAgICA/IHBhcmVudFZhbC5jYWxsKHZtLCB2bSlcbiAgICAgICAgICAgICAgICA6IHBhcmVudFZhbDtcbiAgICAgICAgICAgIGlmIChpbnN0YW5jZURhdGEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbWVyZ2VEYXRhKGluc3RhbmNlRGF0YSwgZGVmYXVsdERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHREYXRhO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cbn1cbnN0cmF0cy5kYXRhID0gZnVuY3Rpb24gKHBhcmVudFZhbCwgY2hpbGRWYWwsIHZtKSB7XG4gICAgaWYgKCF2bSkge1xuICAgICAgICBpZiAoY2hpbGRWYWwgJiYgdHlwZW9mIGNoaWxkVmFsICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgICAgICAgICAgICAgd2FybiQyKCdUaGUgXCJkYXRhXCIgb3B0aW9uIHNob3VsZCBiZSBhIGZ1bmN0aW9uICcgK1xuICAgICAgICAgICAgICAgICAgICAndGhhdCByZXR1cm5zIGEgcGVyLWluc3RhbmNlIHZhbHVlIGluIGNvbXBvbmVudCAnICtcbiAgICAgICAgICAgICAgICAgICAgJ2RlZmluaXRpb25zLicsIHZtKTtcbiAgICAgICAgICAgIHJldHVybiBwYXJlbnRWYWw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lcmdlRGF0YU9yRm4ocGFyZW50VmFsLCBjaGlsZFZhbCk7XG4gICAgfVxuICAgIHJldHVybiBtZXJnZURhdGFPckZuKHBhcmVudFZhbCwgY2hpbGRWYWwsIHZtKTtcbn07XG4vKipcbiAqIEhvb2tzIGFuZCBwcm9wcyBhcmUgbWVyZ2VkIGFzIGFycmF5cy5cbiAqL1xuZnVuY3Rpb24gbWVyZ2VMaWZlY3ljbGVIb29rKHBhcmVudFZhbCwgY2hpbGRWYWwpIHtcbiAgICB2YXIgcmVzID0gY2hpbGRWYWxcbiAgICAgICAgPyBwYXJlbnRWYWxcbiAgICAgICAgICAgID8gcGFyZW50VmFsLmNvbmNhdChjaGlsZFZhbClcbiAgICAgICAgICAgIDogaXNBcnJheShjaGlsZFZhbClcbiAgICAgICAgICAgICAgICA/IGNoaWxkVmFsXG4gICAgICAgICAgICAgICAgOiBbY2hpbGRWYWxdXG4gICAgICAgIDogcGFyZW50VmFsO1xuICAgIHJldHVybiByZXMgPyBkZWR1cGVIb29rcyhyZXMpIDogcmVzO1xufVxuZnVuY3Rpb24gZGVkdXBlSG9va3MoaG9va3MpIHtcbiAgICB2YXIgcmVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBob29rcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAocmVzLmluZGV4T2YoaG9va3NbaV0pID09PSAtMSkge1xuICAgICAgICAgICAgcmVzLnB1c2goaG9va3NbaV0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG5MSUZFQ1lDTEVfSE9PS1MuZm9yRWFjaChmdW5jdGlvbiAoaG9vaykge1xuICAgIHN0cmF0c1tob29rXSA9IG1lcmdlTGlmZWN5Y2xlSG9vaztcbn0pO1xuLyoqXG4gKiBBc3NldHNcbiAqXG4gKiBXaGVuIGEgdm0gaXMgcHJlc2VudCAoaW5zdGFuY2UgY3JlYXRpb24pLCB3ZSBuZWVkIHRvIGRvXG4gKiBhIHRocmVlLXdheSBtZXJnZSBiZXR3ZWVuIGNvbnN0cnVjdG9yIG9wdGlvbnMsIGluc3RhbmNlXG4gKiBvcHRpb25zIGFuZCBwYXJlbnQgb3B0aW9ucy5cbiAqL1xuZnVuY3Rpb24gbWVyZ2VBc3NldHMocGFyZW50VmFsLCBjaGlsZFZhbCwgdm0sIGtleSkge1xuICAgIHZhciByZXMgPSBPYmplY3QuY3JlYXRlKHBhcmVudFZhbCB8fCBudWxsKTtcbiAgICBpZiAoY2hpbGRWYWwpIHtcbiAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBhc3NlcnRPYmplY3RUeXBlKGtleSwgY2hpbGRWYWwsIHZtKTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZChyZXMsIGNoaWxkVmFsKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxufVxuQVNTRVRfVFlQRVMuZm9yRWFjaChmdW5jdGlvbiAodHlwZSkge1xuICAgIHN0cmF0c1t0eXBlICsgJ3MnXSA9IG1lcmdlQXNzZXRzO1xufSk7XG4vKipcbiAqIFdhdGNoZXJzLlxuICpcbiAqIFdhdGNoZXJzIGhhc2hlcyBzaG91bGQgbm90IG92ZXJ3cml0ZSBvbmVcbiAqIGFub3RoZXIsIHNvIHdlIG1lcmdlIHRoZW0gYXMgYXJyYXlzLlxuICovXG5zdHJhdHMud2F0Y2ggPSBmdW5jdGlvbiAocGFyZW50VmFsLCBjaGlsZFZhbCwgdm0sIGtleSkge1xuICAgIC8vIHdvcmsgYXJvdW5kIEZpcmVmb3gncyBPYmplY3QucHJvdG90eXBlLndhdGNoLi4uXG4gICAgLy9AdHMtZXhwZWN0LWVycm9yIHdvcmsgYXJvdW5kXG4gICAgaWYgKHBhcmVudFZhbCA9PT0gbmF0aXZlV2F0Y2gpXG4gICAgICAgIHBhcmVudFZhbCA9IHVuZGVmaW5lZDtcbiAgICAvL0B0cy1leHBlY3QtZXJyb3Igd29yayBhcm91bmRcbiAgICBpZiAoY2hpbGRWYWwgPT09IG5hdGl2ZVdhdGNoKVxuICAgICAgICBjaGlsZFZhbCA9IHVuZGVmaW5lZDtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoIWNoaWxkVmFsKVxuICAgICAgICByZXR1cm4gT2JqZWN0LmNyZWF0ZShwYXJlbnRWYWwgfHwgbnVsbCk7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgYXNzZXJ0T2JqZWN0VHlwZShrZXksIGNoaWxkVmFsLCB2bSk7XG4gICAgfVxuICAgIGlmICghcGFyZW50VmFsKVxuICAgICAgICByZXR1cm4gY2hpbGRWYWw7XG4gICAgdmFyIHJldCA9IHt9O1xuICAgIGV4dGVuZChyZXQsIHBhcmVudFZhbCk7XG4gICAgZm9yICh2YXIga2V5XzEgaW4gY2hpbGRWYWwpIHtcbiAgICAgICAgdmFyIHBhcmVudF8xID0gcmV0W2tleV8xXTtcbiAgICAgICAgdmFyIGNoaWxkID0gY2hpbGRWYWxba2V5XzFdO1xuICAgICAgICBpZiAocGFyZW50XzEgJiYgIWlzQXJyYXkocGFyZW50XzEpKSB7XG4gICAgICAgICAgICBwYXJlbnRfMSA9IFtwYXJlbnRfMV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0W2tleV8xXSA9IHBhcmVudF8xID8gcGFyZW50XzEuY29uY2F0KGNoaWxkKSA6IGlzQXJyYXkoY2hpbGQpID8gY2hpbGQgOiBbY2hpbGRdO1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xufTtcbi8qKlxuICogT3RoZXIgb2JqZWN0IGhhc2hlcy5cbiAqL1xuc3RyYXRzLnByb3BzID1cbiAgICBzdHJhdHMubWV0aG9kcyA9XG4gICAgICAgIHN0cmF0cy5pbmplY3QgPVxuICAgICAgICAgICAgc3RyYXRzLmNvbXB1dGVkID1cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiAocGFyZW50VmFsLCBjaGlsZFZhbCwgdm0sIGtleSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGRWYWwgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0T2JqZWN0VHlwZShrZXksIGNoaWxkVmFsLCB2bSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFwYXJlbnRWYWwpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGRWYWw7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZXQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICBleHRlbmQocmV0LCBwYXJlbnRWYWwpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGRWYWwpXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRlbmQocmV0LCBjaGlsZFZhbCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgICAgICAgICAgfTtcbnN0cmF0cy5wcm92aWRlID0gZnVuY3Rpb24gKHBhcmVudFZhbCwgY2hpbGRWYWwpIHtcbiAgICBpZiAoIXBhcmVudFZhbClcbiAgICAgICAgcmV0dXJuIGNoaWxkVmFsO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciByZXQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICBtZXJnZURhdGEocmV0LCBpc0Z1bmN0aW9uKHBhcmVudFZhbCkgPyBwYXJlbnRWYWwuY2FsbCh0aGlzKSA6IHBhcmVudFZhbCk7XG4gICAgICAgIGlmIChjaGlsZFZhbCkge1xuICAgICAgICAgICAgbWVyZ2VEYXRhKHJldCwgaXNGdW5jdGlvbihjaGlsZFZhbCkgPyBjaGlsZFZhbC5jYWxsKHRoaXMpIDogY2hpbGRWYWwsIGZhbHNlIC8vIG5vbi1yZWN1cnNpdmVcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9O1xufTtcbi8qKlxuICogRGVmYXVsdCBzdHJhdGVneS5cbiAqL1xudmFyIGRlZmF1bHRTdHJhdCA9IGZ1bmN0aW9uIChwYXJlbnRWYWwsIGNoaWxkVmFsKSB7XG4gICAgcmV0dXJuIGNoaWxkVmFsID09PSB1bmRlZmluZWQgPyBwYXJlbnRWYWwgOiBjaGlsZFZhbDtcbn07XG4vKipcbiAqIFZhbGlkYXRlIGNvbXBvbmVudCBuYW1lc1xuICovXG5mdW5jdGlvbiBjaGVja0NvbXBvbmVudHMob3B0aW9ucykge1xuICAgIGZvciAodmFyIGtleSBpbiBvcHRpb25zLmNvbXBvbmVudHMpIHtcbiAgICAgICAgdmFsaWRhdGVDb21wb25lbnROYW1lKGtleSk7XG4gICAgfVxufVxuZnVuY3Rpb24gdmFsaWRhdGVDb21wb25lbnROYW1lKG5hbWUpIHtcbiAgICBpZiAoIW5ldyBSZWdFeHAoXCJeW2EtekEtWl1bXFxcXC1cXFxcLjAtOV9cIi5jb25jYXQodW5pY29kZVJlZ0V4cC5zb3VyY2UsIFwiXSokXCIpKS50ZXN0KG5hbWUpKSB7XG4gICAgICAgIHdhcm4kMignSW52YWxpZCBjb21wb25lbnQgbmFtZTogXCInICtcbiAgICAgICAgICAgIG5hbWUgK1xuICAgICAgICAgICAgJ1wiLiBDb21wb25lbnQgbmFtZXMgJyArXG4gICAgICAgICAgICAnc2hvdWxkIGNvbmZvcm0gdG8gdmFsaWQgY3VzdG9tIGVsZW1lbnQgbmFtZSBpbiBodG1sNSBzcGVjaWZpY2F0aW9uLicpO1xuICAgIH1cbiAgICBpZiAoaXNCdWlsdEluVGFnKG5hbWUpIHx8IGNvbmZpZy5pc1Jlc2VydmVkVGFnKG5hbWUpKSB7XG4gICAgICAgIHdhcm4kMignRG8gbm90IHVzZSBidWlsdC1pbiBvciByZXNlcnZlZCBIVE1MIGVsZW1lbnRzIGFzIGNvbXBvbmVudCAnICtcbiAgICAgICAgICAgICdpZDogJyArXG4gICAgICAgICAgICBuYW1lKTtcbiAgICB9XG59XG4vKipcbiAqIEVuc3VyZSBhbGwgcHJvcHMgb3B0aW9uIHN5bnRheCBhcmUgbm9ybWFsaXplZCBpbnRvIHRoZVxuICogT2JqZWN0LWJhc2VkIGZvcm1hdC5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplUHJvcHMob3B0aW9ucywgdm0pIHtcbiAgICB2YXIgcHJvcHMgPSBvcHRpb25zLnByb3BzO1xuICAgIGlmICghcHJvcHMpXG4gICAgICAgIHJldHVybjtcbiAgICB2YXIgcmVzID0ge307XG4gICAgdmFyIGksIHZhbCwgbmFtZTtcbiAgICBpZiAoaXNBcnJheShwcm9wcykpIHtcbiAgICAgICAgaSA9IHByb3BzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgICAgdmFsID0gcHJvcHNbaV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBuYW1lID0gY2FtZWxpemUodmFsKTtcbiAgICAgICAgICAgICAgICByZXNbbmFtZV0gPSB7IHR5cGU6IG51bGwgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgICAgICB3YXJuJDIoJ3Byb3BzIG11c3QgYmUgc3RyaW5ncyB3aGVuIHVzaW5nIGFycmF5IHN5bnRheC4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHByb3BzKSkge1xuICAgICAgICBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHtcbiAgICAgICAgICAgIHZhbCA9IHByb3BzW2tleV07XG4gICAgICAgICAgICBuYW1lID0gY2FtZWxpemUoa2V5KTtcbiAgICAgICAgICAgIHJlc1tuYW1lXSA9IGlzUGxhaW5PYmplY3QodmFsKSA/IHZhbCA6IHsgdHlwZTogdmFsIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICB3YXJuJDIoXCJJbnZhbGlkIHZhbHVlIGZvciBvcHRpb24gXFxcInByb3BzXFxcIjogZXhwZWN0ZWQgYW4gQXJyYXkgb3IgYW4gT2JqZWN0LCBcIiArXG4gICAgICAgICAgICBcImJ1dCBnb3QgXCIuY29uY2F0KHRvUmF3VHlwZShwcm9wcyksIFwiLlwiKSwgdm0pO1xuICAgIH1cbiAgICBvcHRpb25zLnByb3BzID0gcmVzO1xufVxuLyoqXG4gKiBOb3JtYWxpemUgYWxsIGluamVjdGlvbnMgaW50byBPYmplY3QtYmFzZWQgZm9ybWF0XG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZUluamVjdChvcHRpb25zLCB2bSkge1xuICAgIHZhciBpbmplY3QgPSBvcHRpb25zLmluamVjdDtcbiAgICBpZiAoIWluamVjdClcbiAgICAgICAgcmV0dXJuO1xuICAgIHZhciBub3JtYWxpemVkID0gKG9wdGlvbnMuaW5qZWN0ID0ge30pO1xuICAgIGlmIChpc0FycmF5KGluamVjdCkpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbmplY3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIG5vcm1hbGl6ZWRbaW5qZWN0W2ldXSA9IHsgZnJvbTogaW5qZWN0W2ldIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAoaXNQbGFpbk9iamVjdChpbmplY3QpKSB7XG4gICAgICAgIGZvciAodmFyIGtleSBpbiBpbmplY3QpIHtcbiAgICAgICAgICAgIHZhciB2YWwgPSBpbmplY3Rba2V5XTtcbiAgICAgICAgICAgIG5vcm1hbGl6ZWRba2V5XSA9IGlzUGxhaW5PYmplY3QodmFsKVxuICAgICAgICAgICAgICAgID8gZXh0ZW5kKHsgZnJvbToga2V5IH0sIHZhbClcbiAgICAgICAgICAgICAgICA6IHsgZnJvbTogdmFsIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICB3YXJuJDIoXCJJbnZhbGlkIHZhbHVlIGZvciBvcHRpb24gXFxcImluamVjdFxcXCI6IGV4cGVjdGVkIGFuIEFycmF5IG9yIGFuIE9iamVjdCwgXCIgK1xuICAgICAgICAgICAgXCJidXQgZ290IFwiLmNvbmNhdCh0b1Jhd1R5cGUoaW5qZWN0KSwgXCIuXCIpLCB2bSk7XG4gICAgfVxufVxuLyoqXG4gKiBOb3JtYWxpemUgcmF3IGZ1bmN0aW9uIGRpcmVjdGl2ZXMgaW50byBvYmplY3QgZm9ybWF0LlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVEaXJlY3RpdmVzJDEob3B0aW9ucykge1xuICAgIHZhciBkaXJzID0gb3B0aW9ucy5kaXJlY3RpdmVzO1xuICAgIGlmIChkaXJzKSB7XG4gICAgICAgIGZvciAodmFyIGtleSBpbiBkaXJzKSB7XG4gICAgICAgICAgICB2YXIgZGVmID0gZGlyc1trZXldO1xuICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24oZGVmKSkge1xuICAgICAgICAgICAgICAgIGRpcnNba2V5XSA9IHsgYmluZDogZGVmLCB1cGRhdGU6IGRlZiB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gYXNzZXJ0T2JqZWN0VHlwZShuYW1lLCB2YWx1ZSwgdm0pIHtcbiAgICBpZiAoIWlzUGxhaW5PYmplY3QodmFsdWUpKSB7XG4gICAgICAgIHdhcm4kMihcIkludmFsaWQgdmFsdWUgZm9yIG9wdGlvbiBcXFwiXCIuY29uY2F0KG5hbWUsIFwiXFxcIjogZXhwZWN0ZWQgYW4gT2JqZWN0LCBcIikgK1xuICAgICAgICAgICAgXCJidXQgZ290IFwiLmNvbmNhdCh0b1Jhd1R5cGUodmFsdWUpLCBcIi5cIiksIHZtKTtcbiAgICB9XG59XG4vKipcbiAqIE1lcmdlIHR3byBvcHRpb24gb2JqZWN0cyBpbnRvIGEgbmV3IG9uZS5cbiAqIENvcmUgdXRpbGl0eSB1c2VkIGluIGJvdGggaW5zdGFudGlhdGlvbiBhbmQgaW5oZXJpdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIG1lcmdlT3B0aW9ucyhwYXJlbnQsIGNoaWxkLCB2bSkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGNoZWNrQ29tcG9uZW50cyhjaGlsZCk7XG4gICAgfVxuICAgIGlmIChpc0Z1bmN0aW9uKGNoaWxkKSkge1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgIGNoaWxkID0gY2hpbGQub3B0aW9ucztcbiAgICB9XG4gICAgbm9ybWFsaXplUHJvcHMoY2hpbGQsIHZtKTtcbiAgICBub3JtYWxpemVJbmplY3QoY2hpbGQsIHZtKTtcbiAgICBub3JtYWxpemVEaXJlY3RpdmVzJDEoY2hpbGQpO1xuICAgIC8vIEFwcGx5IGV4dGVuZHMgYW5kIG1peGlucyBvbiB0aGUgY2hpbGQgb3B0aW9ucyxcbiAgICAvLyBidXQgb25seSBpZiBpdCBpcyBhIHJhdyBvcHRpb25zIG9iamVjdCB0aGF0IGlzbid0XG4gICAgLy8gdGhlIHJlc3VsdCBvZiBhbm90aGVyIG1lcmdlT3B0aW9ucyBjYWxsLlxuICAgIC8vIE9ubHkgbWVyZ2VkIG9wdGlvbnMgaGFzIHRoZSBfYmFzZSBwcm9wZXJ0eS5cbiAgICBpZiAoIWNoaWxkLl9iYXNlKSB7XG4gICAgICAgIGlmIChjaGlsZC5leHRlbmRzKSB7XG4gICAgICAgICAgICBwYXJlbnQgPSBtZXJnZU9wdGlvbnMocGFyZW50LCBjaGlsZC5leHRlbmRzLCB2bSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoaWxkLm1peGlucykge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBjaGlsZC5taXhpbnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgcGFyZW50ID0gbWVyZ2VPcHRpb25zKHBhcmVudCwgY2hpbGQubWl4aW5zW2ldLCB2bSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmFyIG9wdGlvbnMgPSB7fTtcbiAgICB2YXIga2V5O1xuICAgIGZvciAoa2V5IGluIHBhcmVudCkge1xuICAgICAgICBtZXJnZUZpZWxkKGtleSk7XG4gICAgfVxuICAgIGZvciAoa2V5IGluIGNoaWxkKSB7XG4gICAgICAgIGlmICghaGFzT3duKHBhcmVudCwga2V5KSkge1xuICAgICAgICAgICAgbWVyZ2VGaWVsZChrZXkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1lcmdlRmllbGQoa2V5KSB7XG4gICAgICAgIHZhciBzdHJhdCA9IHN0cmF0c1trZXldIHx8IGRlZmF1bHRTdHJhdDtcbiAgICAgICAgb3B0aW9uc1trZXldID0gc3RyYXQocGFyZW50W2tleV0sIGNoaWxkW2tleV0sIHZtLCBrZXkpO1xuICAgIH1cbiAgICByZXR1cm4gb3B0aW9ucztcbn1cbi8qKlxuICogUmVzb2x2ZSBhbiBhc3NldC5cbiAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBiZWNhdXNlIGNoaWxkIGluc3RhbmNlcyBuZWVkIGFjY2Vzc1xuICogdG8gYXNzZXRzIGRlZmluZWQgaW4gaXRzIGFuY2VzdG9yIGNoYWluLlxuICovXG5mdW5jdGlvbiByZXNvbHZlQXNzZXQob3B0aW9ucywgdHlwZSwgaWQsIHdhcm5NaXNzaW5nKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKHR5cGVvZiBpZCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgYXNzZXRzID0gb3B0aW9uc1t0eXBlXTtcbiAgICAvLyBjaGVjayBsb2NhbCByZWdpc3RyYXRpb24gdmFyaWF0aW9ucyBmaXJzdFxuICAgIGlmIChoYXNPd24oYXNzZXRzLCBpZCkpXG4gICAgICAgIHJldHVybiBhc3NldHNbaWRdO1xuICAgIHZhciBjYW1lbGl6ZWRJZCA9IGNhbWVsaXplKGlkKTtcbiAgICBpZiAoaGFzT3duKGFzc2V0cywgY2FtZWxpemVkSWQpKVxuICAgICAgICByZXR1cm4gYXNzZXRzW2NhbWVsaXplZElkXTtcbiAgICB2YXIgUGFzY2FsQ2FzZUlkID0gY2FwaXRhbGl6ZShjYW1lbGl6ZWRJZCk7XG4gICAgaWYgKGhhc093bihhc3NldHMsIFBhc2NhbENhc2VJZCkpXG4gICAgICAgIHJldHVybiBhc3NldHNbUGFzY2FsQ2FzZUlkXTtcbiAgICAvLyBmYWxsYmFjayB0byBwcm90b3R5cGUgY2hhaW5cbiAgICB2YXIgcmVzID0gYXNzZXRzW2lkXSB8fCBhc3NldHNbY2FtZWxpemVkSWRdIHx8IGFzc2V0c1tQYXNjYWxDYXNlSWRdO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHdhcm5NaXNzaW5nICYmICFyZXMpIHtcbiAgICAgICAgd2FybiQyKCdGYWlsZWQgdG8gcmVzb2x2ZSAnICsgdHlwZS5zbGljZSgwLCAtMSkgKyAnOiAnICsgaWQpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVByb3Aoa2V5LCBwcm9wT3B0aW9ucywgcHJvcHNEYXRhLCB2bSkge1xuICAgIHZhciBwcm9wID0gcHJvcE9wdGlvbnNba2V5XTtcbiAgICB2YXIgYWJzZW50ID0gIWhhc093bihwcm9wc0RhdGEsIGtleSk7XG4gICAgdmFyIHZhbHVlID0gcHJvcHNEYXRhW2tleV07XG4gICAgLy8gYm9vbGVhbiBjYXN0aW5nXG4gICAgdmFyIGJvb2xlYW5JbmRleCA9IGdldFR5cGVJbmRleChCb29sZWFuLCBwcm9wLnR5cGUpO1xuICAgIGlmIChib29sZWFuSW5kZXggPiAtMSkge1xuICAgICAgICBpZiAoYWJzZW50ICYmICFoYXNPd24ocHJvcCwgJ2RlZmF1bHQnKSkge1xuICAgICAgICAgICAgdmFsdWUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PT0gJycgfHwgdmFsdWUgPT09IGh5cGhlbmF0ZShrZXkpKSB7XG4gICAgICAgICAgICAvLyBvbmx5IGNhc3QgZW1wdHkgc3RyaW5nIC8gc2FtZSBuYW1lIHRvIGJvb2xlYW4gaWZcbiAgICAgICAgICAgIC8vIGJvb2xlYW4gaGFzIGhpZ2hlciBwcmlvcml0eVxuICAgICAgICAgICAgdmFyIHN0cmluZ0luZGV4ID0gZ2V0VHlwZUluZGV4KFN0cmluZywgcHJvcC50eXBlKTtcbiAgICAgICAgICAgIGlmIChzdHJpbmdJbmRleCA8IDAgfHwgYm9vbGVhbkluZGV4IDwgc3RyaW5nSW5kZXgpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gY2hlY2sgZGVmYXVsdCB2YWx1ZVxuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHZhbHVlID0gZ2V0UHJvcERlZmF1bHRWYWx1ZSh2bSwgcHJvcCwga2V5KTtcbiAgICAgICAgLy8gc2luY2UgdGhlIGRlZmF1bHQgdmFsdWUgaXMgYSBmcmVzaCBjb3B5LFxuICAgICAgICAvLyBtYWtlIHN1cmUgdG8gb2JzZXJ2ZSBpdC5cbiAgICAgICAgdmFyIHByZXZTaG91bGRPYnNlcnZlID0gc2hvdWxkT2JzZXJ2ZTtcbiAgICAgICAgdG9nZ2xlT2JzZXJ2aW5nKHRydWUpO1xuICAgICAgICBvYnNlcnZlKHZhbHVlKTtcbiAgICAgICAgdG9nZ2xlT2JzZXJ2aW5nKHByZXZTaG91bGRPYnNlcnZlKTtcbiAgICB9XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgYXNzZXJ0UHJvcChwcm9wLCBrZXksIHZhbHVlLCB2bSwgYWJzZW50KTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xufVxuLyoqXG4gKiBHZXQgdGhlIGRlZmF1bHQgdmFsdWUgb2YgYSBwcm9wLlxuICovXG5mdW5jdGlvbiBnZXRQcm9wRGVmYXVsdFZhbHVlKHZtLCBwcm9wLCBrZXkpIHtcbiAgICAvLyBubyBkZWZhdWx0LCByZXR1cm4gdW5kZWZpbmVkXG4gICAgaWYgKCFoYXNPd24ocHJvcCwgJ2RlZmF1bHQnKSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB2YXIgZGVmID0gcHJvcC5kZWZhdWx0O1xuICAgIC8vIHdhcm4gYWdhaW5zdCBub24tZmFjdG9yeSBkZWZhdWx0cyBmb3IgT2JqZWN0ICYgQXJyYXlcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBpc09iamVjdChkZWYpKSB7XG4gICAgICAgIHdhcm4kMignSW52YWxpZCBkZWZhdWx0IHZhbHVlIGZvciBwcm9wIFwiJyArXG4gICAgICAgICAgICBrZXkgK1xuICAgICAgICAgICAgJ1wiOiAnICtcbiAgICAgICAgICAgICdQcm9wcyB3aXRoIHR5cGUgT2JqZWN0L0FycmF5IG11c3QgdXNlIGEgZmFjdG9yeSBmdW5jdGlvbiAnICtcbiAgICAgICAgICAgICd0byByZXR1cm4gdGhlIGRlZmF1bHQgdmFsdWUuJywgdm0pO1xuICAgIH1cbiAgICAvLyB0aGUgcmF3IHByb3AgdmFsdWUgd2FzIGFsc28gdW5kZWZpbmVkIGZyb20gcHJldmlvdXMgcmVuZGVyLFxuICAgIC8vIHJldHVybiBwcmV2aW91cyBkZWZhdWx0IHZhbHVlIHRvIGF2b2lkIHVubmVjZXNzYXJ5IHdhdGNoZXIgdHJpZ2dlclxuICAgIGlmICh2bSAmJlxuICAgICAgICB2bS4kb3B0aW9ucy5wcm9wc0RhdGEgJiZcbiAgICAgICAgdm0uJG9wdGlvbnMucHJvcHNEYXRhW2tleV0gPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICB2bS5fcHJvcHNba2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB2bS5fcHJvcHNba2V5XTtcbiAgICB9XG4gICAgLy8gY2FsbCBmYWN0b3J5IGZ1bmN0aW9uIGZvciBub24tRnVuY3Rpb24gdHlwZXNcbiAgICAvLyBhIHZhbHVlIGlzIEZ1bmN0aW9uIGlmIGl0cyBwcm90b3R5cGUgaXMgZnVuY3Rpb24gZXZlbiBhY3Jvc3MgZGlmZmVyZW50IGV4ZWN1dGlvbiBjb250ZXh0XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24oZGVmKSAmJiBnZXRUeXBlKHByb3AudHlwZSkgIT09ICdGdW5jdGlvbidcbiAgICAgICAgPyBkZWYuY2FsbCh2bSlcbiAgICAgICAgOiBkZWY7XG59XG4vKipcbiAqIEFzc2VydCB3aGV0aGVyIGEgcHJvcCBpcyB2YWxpZC5cbiAqL1xuZnVuY3Rpb24gYXNzZXJ0UHJvcChwcm9wLCBuYW1lLCB2YWx1ZSwgdm0sIGFic2VudCkge1xuICAgIGlmIChwcm9wLnJlcXVpcmVkICYmIGFic2VudCkge1xuICAgICAgICB3YXJuJDIoJ01pc3NpbmcgcmVxdWlyZWQgcHJvcDogXCInICsgbmFtZSArICdcIicsIHZtKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodmFsdWUgPT0gbnVsbCAmJiAhcHJvcC5yZXF1aXJlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0eXBlID0gcHJvcC50eXBlO1xuICAgIHZhciB2YWxpZCA9ICF0eXBlIHx8IHR5cGUgPT09IHRydWU7XG4gICAgdmFyIGV4cGVjdGVkVHlwZXMgPSBbXTtcbiAgICBpZiAodHlwZSkge1xuICAgICAgICBpZiAoIWlzQXJyYXkodHlwZSkpIHtcbiAgICAgICAgICAgIHR5cGUgPSBbdHlwZV07XG4gICAgICAgIH1cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0eXBlLmxlbmd0aCAmJiAhdmFsaWQ7IGkrKykge1xuICAgICAgICAgICAgdmFyIGFzc2VydGVkVHlwZSA9IGFzc2VydFR5cGUodmFsdWUsIHR5cGVbaV0sIHZtKTtcbiAgICAgICAgICAgIGV4cGVjdGVkVHlwZXMucHVzaChhc3NlcnRlZFR5cGUuZXhwZWN0ZWRUeXBlIHx8ICcnKTtcbiAgICAgICAgICAgIHZhbGlkID0gYXNzZXJ0ZWRUeXBlLnZhbGlkO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZhciBoYXZlRXhwZWN0ZWRUeXBlcyA9IGV4cGVjdGVkVHlwZXMuc29tZShmdW5jdGlvbiAodCkgeyByZXR1cm4gdDsgfSk7XG4gICAgaWYgKCF2YWxpZCAmJiBoYXZlRXhwZWN0ZWRUeXBlcykge1xuICAgICAgICB3YXJuJDIoZ2V0SW52YWxpZFR5cGVNZXNzYWdlKG5hbWUsIHZhbHVlLCBleHBlY3RlZFR5cGVzKSwgdm0pO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB2YWxpZGF0b3IgPSBwcm9wLnZhbGlkYXRvcjtcbiAgICBpZiAodmFsaWRhdG9yKSB7XG4gICAgICAgIGlmICghdmFsaWRhdG9yKHZhbHVlKSkge1xuICAgICAgICAgICAgd2FybiQyKCdJbnZhbGlkIHByb3A6IGN1c3RvbSB2YWxpZGF0b3IgY2hlY2sgZmFpbGVkIGZvciBwcm9wIFwiJyArIG5hbWUgKyAnXCIuJywgdm0pO1xuICAgICAgICB9XG4gICAgfVxufVxudmFyIHNpbXBsZUNoZWNrUkUgPSAvXihTdHJpbmd8TnVtYmVyfEJvb2xlYW58RnVuY3Rpb258U3ltYm9sfEJpZ0ludCkkLztcbmZ1bmN0aW9uIGFzc2VydFR5cGUodmFsdWUsIHR5cGUsIHZtKSB7XG4gICAgdmFyIHZhbGlkO1xuICAgIHZhciBleHBlY3RlZFR5cGUgPSBnZXRUeXBlKHR5cGUpO1xuICAgIGlmIChzaW1wbGVDaGVja1JFLnRlc3QoZXhwZWN0ZWRUeXBlKSkge1xuICAgICAgICB2YXIgdCA9IHR5cGVvZiB2YWx1ZTtcbiAgICAgICAgdmFsaWQgPSB0ID09PSBleHBlY3RlZFR5cGUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgLy8gZm9yIHByaW1pdGl2ZSB3cmFwcGVyIG9iamVjdHNcbiAgICAgICAgaWYgKCF2YWxpZCAmJiB0ID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgdmFsaWQgPSB2YWx1ZSBpbnN0YW5jZW9mIHR5cGU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAoZXhwZWN0ZWRUeXBlID09PSAnT2JqZWN0Jykge1xuICAgICAgICB2YWxpZCA9IGlzUGxhaW5PYmplY3QodmFsdWUpO1xuICAgIH1cbiAgICBlbHNlIGlmIChleHBlY3RlZFR5cGUgPT09ICdBcnJheScpIHtcbiAgICAgICAgdmFsaWQgPSBpc0FycmF5KHZhbHVlKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB2YWxpZCA9IHZhbHVlIGluc3RhbmNlb2YgdHlwZTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgd2FybiQyKCdJbnZhbGlkIHByb3AgdHlwZTogXCInICsgU3RyaW5nKHR5cGUpICsgJ1wiIGlzIG5vdCBhIGNvbnN0cnVjdG9yJywgdm0pO1xuICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICB2YWxpZDogdmFsaWQsXG4gICAgICAgIGV4cGVjdGVkVHlwZTogZXhwZWN0ZWRUeXBlXG4gICAgfTtcbn1cbnZhciBmdW5jdGlvblR5cGVDaGVja1JFID0gL15cXHMqZnVuY3Rpb24gKFxcdyspLztcbi8qKlxuICogVXNlIGZ1bmN0aW9uIHN0cmluZyBuYW1lIHRvIGNoZWNrIGJ1aWx0LWluIHR5cGVzLFxuICogYmVjYXVzZSBhIHNpbXBsZSBlcXVhbGl0eSBjaGVjayB3aWxsIGZhaWwgd2hlbiBydW5uaW5nXG4gKiBhY3Jvc3MgZGlmZmVyZW50IHZtcyAvIGlmcmFtZXMuXG4gKi9cbmZ1bmN0aW9uIGdldFR5cGUoZm4pIHtcbiAgICB2YXIgbWF0Y2ggPSBmbiAmJiBmbi50b1N0cmluZygpLm1hdGNoKGZ1bmN0aW9uVHlwZUNoZWNrUkUpO1xuICAgIHJldHVybiBtYXRjaCA/IG1hdGNoWzFdIDogJyc7XG59XG5mdW5jdGlvbiBpc1NhbWVUeXBlKGEsIGIpIHtcbiAgICByZXR1cm4gZ2V0VHlwZShhKSA9PT0gZ2V0VHlwZShiKTtcbn1cbmZ1bmN0aW9uIGdldFR5cGVJbmRleCh0eXBlLCBleHBlY3RlZFR5cGVzKSB7XG4gICAgaWYgKCFpc0FycmF5KGV4cGVjdGVkVHlwZXMpKSB7XG4gICAgICAgIHJldHVybiBpc1NhbWVUeXBlKGV4cGVjdGVkVHlwZXMsIHR5cGUpID8gMCA6IC0xO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gZXhwZWN0ZWRUeXBlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBpZiAoaXNTYW1lVHlwZShleHBlY3RlZFR5cGVzW2ldLCB0eXBlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIC0xO1xufVxuZnVuY3Rpb24gZ2V0SW52YWxpZFR5cGVNZXNzYWdlKG5hbWUsIHZhbHVlLCBleHBlY3RlZFR5cGVzKSB7XG4gICAgdmFyIG1lc3NhZ2UgPSBcIkludmFsaWQgcHJvcDogdHlwZSBjaGVjayBmYWlsZWQgZm9yIHByb3AgXFxcIlwiLmNvbmNhdChuYW1lLCBcIlxcXCIuXCIpICtcbiAgICAgICAgXCIgRXhwZWN0ZWQgXCIuY29uY2F0KGV4cGVjdGVkVHlwZXMubWFwKGNhcGl0YWxpemUpLmpvaW4oJywgJykpO1xuICAgIHZhciBleHBlY3RlZFR5cGUgPSBleHBlY3RlZFR5cGVzWzBdO1xuICAgIHZhciByZWNlaXZlZFR5cGUgPSB0b1Jhd1R5cGUodmFsdWUpO1xuICAgIC8vIGNoZWNrIGlmIHdlIG5lZWQgdG8gc3BlY2lmeSBleHBlY3RlZCB2YWx1ZVxuICAgIGlmIChleHBlY3RlZFR5cGVzLmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICBpc0V4cGxpY2FibGUoZXhwZWN0ZWRUeXBlKSAmJlxuICAgICAgICBpc0V4cGxpY2FibGUodHlwZW9mIHZhbHVlKSAmJlxuICAgICAgICAhaXNCb29sZWFuKGV4cGVjdGVkVHlwZSwgcmVjZWl2ZWRUeXBlKSkge1xuICAgICAgICBtZXNzYWdlICs9IFwiIHdpdGggdmFsdWUgXCIuY29uY2F0KHN0eWxlVmFsdWUodmFsdWUsIGV4cGVjdGVkVHlwZSkpO1xuICAgIH1cbiAgICBtZXNzYWdlICs9IFwiLCBnb3QgXCIuY29uY2F0KHJlY2VpdmVkVHlwZSwgXCIgXCIpO1xuICAgIC8vIGNoZWNrIGlmIHdlIG5lZWQgdG8gc3BlY2lmeSByZWNlaXZlZCB2YWx1ZVxuICAgIGlmIChpc0V4cGxpY2FibGUocmVjZWl2ZWRUeXBlKSkge1xuICAgICAgICBtZXNzYWdlICs9IFwid2l0aCB2YWx1ZSBcIi5jb25jYXQoc3R5bGVWYWx1ZSh2YWx1ZSwgcmVjZWl2ZWRUeXBlKSwgXCIuXCIpO1xuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZTtcbn1cbmZ1bmN0aW9uIHN0eWxlVmFsdWUodmFsdWUsIHR5cGUpIHtcbiAgICBpZiAodHlwZSA9PT0gJ1N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIFwiXFxcIlwiLmNvbmNhdCh2YWx1ZSwgXCJcXFwiXCIpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlID09PSAnTnVtYmVyJykge1xuICAgICAgICByZXR1cm4gXCJcIi5jb25jYXQoTnVtYmVyKHZhbHVlKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gXCJcIi5jb25jYXQodmFsdWUpO1xuICAgIH1cbn1cbnZhciBFWFBMSUNBQkxFX1RZUEVTID0gWydzdHJpbmcnLCAnbnVtYmVyJywgJ2Jvb2xlYW4nXTtcbmZ1bmN0aW9uIGlzRXhwbGljYWJsZSh2YWx1ZSkge1xuICAgIHJldHVybiBFWFBMSUNBQkxFX1RZUEVTLnNvbWUoZnVuY3Rpb24gKGVsZW0pIHsgcmV0dXJuIHZhbHVlLnRvTG93ZXJDYXNlKCkgPT09IGVsZW07IH0pO1xufVxuZnVuY3Rpb24gaXNCb29sZWFuKCkge1xuICAgIHZhciBhcmdzID0gW107XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgIH1cbiAgICByZXR1cm4gYXJncy5zb21lKGZ1bmN0aW9uIChlbGVtKSB7IHJldHVybiBlbGVtLnRvTG93ZXJDYXNlKCkgPT09ICdib29sZWFuJzsgfSk7XG59XG5cbmZ1bmN0aW9uIFZ1ZShvcHRpb25zKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgISh0aGlzIGluc3RhbmNlb2YgVnVlKSkge1xuICAgICAgICB3YXJuJDIoJ1Z1ZSBpcyBhIGNvbnN0cnVjdG9yIGFuZCBzaG91bGQgYmUgY2FsbGVkIHdpdGggdGhlIGBuZXdgIGtleXdvcmQnKTtcbiAgICB9XG4gICAgdGhpcy5faW5pdChvcHRpb25zKTtcbn1cbi8vQHRzLWV4cGVjdC1lcnJvciBWdWUgaGFzIGZ1bmN0aW9uIHR5cGVcbmluaXRNaXhpbiQxKFZ1ZSk7XG4vL0B0cy1leHBlY3QtZXJyb3IgVnVlIGhhcyBmdW5jdGlvbiB0eXBlXG5zdGF0ZU1peGluKFZ1ZSk7XG4vL0B0cy1leHBlY3QtZXJyb3IgVnVlIGhhcyBmdW5jdGlvbiB0eXBlXG5ldmVudHNNaXhpbihWdWUpO1xuLy9AdHMtZXhwZWN0LWVycm9yIFZ1ZSBoYXMgZnVuY3Rpb24gdHlwZVxubGlmZWN5Y2xlTWl4aW4oVnVlKTtcbi8vQHRzLWV4cGVjdC1lcnJvciBWdWUgaGFzIGZ1bmN0aW9uIHR5cGVcbnJlbmRlck1peGluKFZ1ZSk7XG5cbmZ1bmN0aW9uIGluaXRVc2UoVnVlKSB7XG4gICAgVnVlLnVzZSA9IGZ1bmN0aW9uIChwbHVnaW4pIHtcbiAgICAgICAgdmFyIGluc3RhbGxlZFBsdWdpbnMgPSB0aGlzLl9pbnN0YWxsZWRQbHVnaW5zIHx8ICh0aGlzLl9pbnN0YWxsZWRQbHVnaW5zID0gW10pO1xuICAgICAgICBpZiAoaW5zdGFsbGVkUGx1Z2lucy5pbmRleE9mKHBsdWdpbikgPiAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgLy8gYWRkaXRpb25hbCBwYXJhbWV0ZXJzXG4gICAgICAgIHZhciBhcmdzID0gdG9BcnJheShhcmd1bWVudHMsIDEpO1xuICAgICAgICBhcmdzLnVuc2hpZnQodGhpcyk7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKHBsdWdpbi5pbnN0YWxsKSkge1xuICAgICAgICAgICAgcGx1Z2luLmluc3RhbGwuYXBwbHkocGx1Z2luLCBhcmdzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc0Z1bmN0aW9uKHBsdWdpbikpIHtcbiAgICAgICAgICAgIHBsdWdpbi5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgfVxuICAgICAgICBpbnN0YWxsZWRQbHVnaW5zLnB1c2gocGx1Z2luKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbn1cblxuZnVuY3Rpb24gaW5pdE1peGluKFZ1ZSkge1xuICAgIFZ1ZS5taXhpbiA9IGZ1bmN0aW9uIChtaXhpbikge1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBtZXJnZU9wdGlvbnModGhpcy5vcHRpb25zLCBtaXhpbik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG59XG5cbmZ1bmN0aW9uIGluaXRFeHRlbmQoVnVlKSB7XG4gICAgLyoqXG4gICAgICogRWFjaCBpbnN0YW5jZSBjb25zdHJ1Y3RvciwgaW5jbHVkaW5nIFZ1ZSwgaGFzIGEgdW5pcXVlXG4gICAgICogY2lkLiBUaGlzIGVuYWJsZXMgdXMgdG8gY3JlYXRlIHdyYXBwZWQgXCJjaGlsZFxuICAgICAqIGNvbnN0cnVjdG9yc1wiIGZvciBwcm90b3R5cGFsIGluaGVyaXRhbmNlIGFuZCBjYWNoZSB0aGVtLlxuICAgICAqL1xuICAgIFZ1ZS5jaWQgPSAwO1xuICAgIHZhciBjaWQgPSAxO1xuICAgIC8qKlxuICAgICAqIENsYXNzIGluaGVyaXRhbmNlXG4gICAgICovXG4gICAgVnVlLmV4dGVuZCA9IGZ1bmN0aW9uIChleHRlbmRPcHRpb25zKSB7XG4gICAgICAgIGV4dGVuZE9wdGlvbnMgPSBleHRlbmRPcHRpb25zIHx8IHt9O1xuICAgICAgICB2YXIgU3VwZXIgPSB0aGlzO1xuICAgICAgICB2YXIgU3VwZXJJZCA9IFN1cGVyLmNpZDtcbiAgICAgICAgdmFyIGNhY2hlZEN0b3JzID0gZXh0ZW5kT3B0aW9ucy5fQ3RvciB8fCAoZXh0ZW5kT3B0aW9ucy5fQ3RvciA9IHt9KTtcbiAgICAgICAgaWYgKGNhY2hlZEN0b3JzW1N1cGVySWRdKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ3RvcnNbU3VwZXJJZF07XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lKGV4dGVuZE9wdGlvbnMpIHx8IGdldENvbXBvbmVudE5hbWUoU3VwZXIub3B0aW9ucyk7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIG5hbWUpIHtcbiAgICAgICAgICAgIHZhbGlkYXRlQ29tcG9uZW50TmFtZShuYW1lKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgU3ViID0gZnVuY3Rpb24gVnVlQ29tcG9uZW50KG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMuX2luaXQob3B0aW9ucyk7XG4gICAgICAgIH07XG4gICAgICAgIFN1Yi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFN1cGVyLnByb3RvdHlwZSk7XG4gICAgICAgIFN1Yi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTdWI7XG4gICAgICAgIFN1Yi5jaWQgPSBjaWQrKztcbiAgICAgICAgU3ViLm9wdGlvbnMgPSBtZXJnZU9wdGlvbnMoU3VwZXIub3B0aW9ucywgZXh0ZW5kT3B0aW9ucyk7XG4gICAgICAgIFN1Ylsnc3VwZXInXSA9IFN1cGVyO1xuICAgICAgICAvLyBGb3IgcHJvcHMgYW5kIGNvbXB1dGVkIHByb3BlcnRpZXMsIHdlIGRlZmluZSB0aGUgcHJveHkgZ2V0dGVycyBvblxuICAgICAgICAvLyB0aGUgVnVlIGluc3RhbmNlcyBhdCBleHRlbnNpb24gdGltZSwgb24gdGhlIGV4dGVuZGVkIHByb3RvdHlwZS4gVGhpc1xuICAgICAgICAvLyBhdm9pZHMgT2JqZWN0LmRlZmluZVByb3BlcnR5IGNhbGxzIGZvciBlYWNoIGluc3RhbmNlIGNyZWF0ZWQuXG4gICAgICAgIGlmIChTdWIub3B0aW9ucy5wcm9wcykge1xuICAgICAgICAgICAgaW5pdFByb3BzKFN1Yik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFN1Yi5vcHRpb25zLmNvbXB1dGVkKSB7XG4gICAgICAgICAgICBpbml0Q29tcHV0ZWQoU3ViKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBhbGxvdyBmdXJ0aGVyIGV4dGVuc2lvbi9taXhpbi9wbHVnaW4gdXNhZ2VcbiAgICAgICAgU3ViLmV4dGVuZCA9IFN1cGVyLmV4dGVuZDtcbiAgICAgICAgU3ViLm1peGluID0gU3VwZXIubWl4aW47XG4gICAgICAgIFN1Yi51c2UgPSBTdXBlci51c2U7XG4gICAgICAgIC8vIGNyZWF0ZSBhc3NldCByZWdpc3RlcnMsIHNvIGV4dGVuZGVkIGNsYXNzZXNcbiAgICAgICAgLy8gY2FuIGhhdmUgdGhlaXIgcHJpdmF0ZSBhc3NldHMgdG9vLlxuICAgICAgICBBU1NFVF9UWVBFUy5mb3JFYWNoKGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgICAgICAgICBTdWJbdHlwZV0gPSBTdXBlclt0eXBlXTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIGVuYWJsZSByZWN1cnNpdmUgc2VsZi1sb29rdXBcbiAgICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgICAgIFN1Yi5vcHRpb25zLmNvbXBvbmVudHNbbmFtZV0gPSBTdWI7XG4gICAgICAgIH1cbiAgICAgICAgLy8ga2VlcCBhIHJlZmVyZW5jZSB0byB0aGUgc3VwZXIgb3B0aW9ucyBhdCBleHRlbnNpb24gdGltZS5cbiAgICAgICAgLy8gbGF0ZXIgYXQgaW5zdGFudGlhdGlvbiB3ZSBjYW4gY2hlY2sgaWYgU3VwZXIncyBvcHRpb25zIGhhdmVcbiAgICAgICAgLy8gYmVlbiB1cGRhdGVkLlxuICAgICAgICBTdWIuc3VwZXJPcHRpb25zID0gU3VwZXIub3B0aW9ucztcbiAgICAgICAgU3ViLmV4dGVuZE9wdGlvbnMgPSBleHRlbmRPcHRpb25zO1xuICAgICAgICBTdWIuc2VhbGVkT3B0aW9ucyA9IGV4dGVuZCh7fSwgU3ViLm9wdGlvbnMpO1xuICAgICAgICAvLyBjYWNoZSBjb25zdHJ1Y3RvclxuICAgICAgICBjYWNoZWRDdG9yc1tTdXBlcklkXSA9IFN1YjtcbiAgICAgICAgcmV0dXJuIFN1YjtcbiAgICB9O1xufVxuZnVuY3Rpb24gaW5pdFByb3BzKENvbXApIHtcbiAgICB2YXIgcHJvcHMgPSBDb21wLm9wdGlvbnMucHJvcHM7XG4gICAgZm9yICh2YXIga2V5IGluIHByb3BzKSB7XG4gICAgICAgIHByb3h5KENvbXAucHJvdG90eXBlLCBcIl9wcm9wc1wiLCBrZXkpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGluaXRDb21wdXRlZChDb21wKSB7XG4gICAgdmFyIGNvbXB1dGVkID0gQ29tcC5vcHRpb25zLmNvbXB1dGVkO1xuICAgIGZvciAodmFyIGtleSBpbiBjb21wdXRlZCkge1xuICAgICAgICBkZWZpbmVDb21wdXRlZChDb21wLnByb3RvdHlwZSwga2V5LCBjb21wdXRlZFtrZXldKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGluaXRBc3NldFJlZ2lzdGVycyhWdWUpIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYXNzZXQgcmVnaXN0cmF0aW9uIG1ldGhvZHMuXG4gICAgICovXG4gICAgQVNTRVRfVFlQRVMuZm9yRWFjaChmdW5jdGlvbiAodHlwZSkge1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGZ1bmN0aW9uIGlzIG5vdCBleGFjdCBzYW1lIHR5cGVcbiAgICAgICAgVnVlW3R5cGVdID0gZnVuY3Rpb24gKGlkLCBkZWZpbml0aW9uKSB7XG4gICAgICAgICAgICBpZiAoIWRlZmluaXRpb24pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zW3R5cGUgKyAncyddW2lkXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHR5cGUgPT09ICdjb21wb25lbnQnKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlQ29tcG9uZW50TmFtZShpZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSAnY29tcG9uZW50JyAmJiBpc1BsYWluT2JqZWN0KGRlZmluaXRpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgZGVmaW5pdGlvbi5uYW1lID0gZGVmaW5pdGlvbi5uYW1lIHx8IGlkO1xuICAgICAgICAgICAgICAgICAgICBkZWZpbml0aW9uID0gdGhpcy5vcHRpb25zLl9iYXNlLmV4dGVuZChkZWZpbml0aW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdkaXJlY3RpdmUnICYmIGlzRnVuY3Rpb24oZGVmaW5pdGlvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVmaW5pdGlvbiA9IHsgYmluZDogZGVmaW5pdGlvbiwgdXBkYXRlOiBkZWZpbml0aW9uIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMub3B0aW9uc1t0eXBlICsgJ3MnXVtpZF0gPSBkZWZpbml0aW9uO1xuICAgICAgICAgICAgICAgIHJldHVybiBkZWZpbml0aW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBfZ2V0Q29tcG9uZW50TmFtZShvcHRzKSB7XG4gICAgcmV0dXJuIG9wdHMgJiYgKGdldENvbXBvbmVudE5hbWUob3B0cy5DdG9yLm9wdGlvbnMpIHx8IG9wdHMudGFnKTtcbn1cbmZ1bmN0aW9uIG1hdGNoZXMocGF0dGVybiwgbmFtZSkge1xuICAgIGlmIChpc0FycmF5KHBhdHRlcm4pKSB7XG4gICAgICAgIHJldHVybiBwYXR0ZXJuLmluZGV4T2YobmFtZSkgPiAtMTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIHBhdHRlcm4gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBwYXR0ZXJuLnNwbGl0KCcsJykuaW5kZXhPZihuYW1lKSA+IC0xO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc1JlZ0V4cChwYXR0ZXJuKSkge1xuICAgICAgICByZXR1cm4gcGF0dGVybi50ZXN0KG5hbWUpO1xuICAgIH1cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIHBydW5lQ2FjaGUoa2VlcEFsaXZlSW5zdGFuY2UsIGZpbHRlcikge1xuICAgIHZhciBjYWNoZSA9IGtlZXBBbGl2ZUluc3RhbmNlLmNhY2hlLCBrZXlzID0ga2VlcEFsaXZlSW5zdGFuY2Uua2V5cywgX3Zub2RlID0ga2VlcEFsaXZlSW5zdGFuY2UuX3Zub2RlO1xuICAgIGZvciAodmFyIGtleSBpbiBjYWNoZSkge1xuICAgICAgICB2YXIgZW50cnkgPSBjYWNoZVtrZXldO1xuICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICAgIHZhciBuYW1lXzEgPSBlbnRyeS5uYW1lO1xuICAgICAgICAgICAgaWYgKG5hbWVfMSAmJiAhZmlsdGVyKG5hbWVfMSkpIHtcbiAgICAgICAgICAgICAgICBwcnVuZUNhY2hlRW50cnkoY2FjaGUsIGtleSwga2V5cywgX3Zub2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIHBydW5lQ2FjaGVFbnRyeShjYWNoZSwga2V5LCBrZXlzLCBjdXJyZW50KSB7XG4gICAgdmFyIGVudHJ5ID0gY2FjaGVba2V5XTtcbiAgICBpZiAoZW50cnkgJiYgKCFjdXJyZW50IHx8IGVudHJ5LnRhZyAhPT0gY3VycmVudC50YWcpKSB7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgY2FuIGJlIHVuZGVmaW5lZFxuICAgICAgICBlbnRyeS5jb21wb25lbnRJbnN0YW5jZS4kZGVzdHJveSgpO1xuICAgIH1cbiAgICBjYWNoZVtrZXldID0gbnVsbDtcbiAgICByZW1vdmUkMihrZXlzLCBrZXkpO1xufVxudmFyIHBhdHRlcm5UeXBlcyA9IFtTdHJpbmcsIFJlZ0V4cCwgQXJyYXldO1xuLy8gVE9ETyBkZWZpbmVDb21wb25lbnRcbnZhciBLZWVwQWxpdmUgPSB7XG4gICAgbmFtZTogJ2tlZXAtYWxpdmUnLFxuICAgIGFic3RyYWN0OiB0cnVlLFxuICAgIHByb3BzOiB7XG4gICAgICAgIGluY2x1ZGU6IHBhdHRlcm5UeXBlcyxcbiAgICAgICAgZXhjbHVkZTogcGF0dGVyblR5cGVzLFxuICAgICAgICBtYXg6IFtTdHJpbmcsIE51bWJlcl1cbiAgICB9LFxuICAgIG1ldGhvZHM6IHtcbiAgICAgICAgY2FjaGVWTm9kZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9hID0gdGhpcywgY2FjaGUgPSBfYS5jYWNoZSwga2V5cyA9IF9hLmtleXMsIHZub2RlVG9DYWNoZSA9IF9hLnZub2RlVG9DYWNoZSwga2V5VG9DYWNoZSA9IF9hLmtleVRvQ2FjaGU7XG4gICAgICAgICAgICBpZiAodm5vZGVUb0NhY2hlKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRhZyA9IHZub2RlVG9DYWNoZS50YWcsIGNvbXBvbmVudEluc3RhbmNlID0gdm5vZGVUb0NhY2hlLmNvbXBvbmVudEluc3RhbmNlLCBjb21wb25lbnRPcHRpb25zID0gdm5vZGVUb0NhY2hlLmNvbXBvbmVudE9wdGlvbnM7XG4gICAgICAgICAgICAgICAgY2FjaGVba2V5VG9DYWNoZV0gPSB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IF9nZXRDb21wb25lbnROYW1lKGNvbXBvbmVudE9wdGlvbnMpLFxuICAgICAgICAgICAgICAgICAgICB0YWc6IHRhZyxcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50SW5zdGFuY2U6IGNvbXBvbmVudEluc3RhbmNlXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goa2V5VG9DYWNoZSk7XG4gICAgICAgICAgICAgICAgLy8gcHJ1bmUgb2xkZXN0IGVudHJ5XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubWF4ICYmIGtleXMubGVuZ3RoID4gcGFyc2VJbnQodGhpcy5tYXgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHBydW5lQ2FjaGVFbnRyeShjYWNoZSwga2V5c1swXSwga2V5cywgdGhpcy5fdm5vZGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnZub2RlVG9DYWNoZSA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5jYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIHRoaXMua2V5cyA9IFtdO1xuICAgIH0sXG4gICAgZGVzdHJveWVkOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLmNhY2hlKSB7XG4gICAgICAgICAgICBwcnVuZUNhY2hlRW50cnkodGhpcy5jYWNoZSwga2V5LCB0aGlzLmtleXMpO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBtb3VudGVkOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHRoaXMuY2FjaGVWTm9kZSgpO1xuICAgICAgICB0aGlzLiR3YXRjaCgnaW5jbHVkZScsIGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHBydW5lQ2FjaGUoX3RoaXMsIGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiBtYXRjaGVzKHZhbCwgbmFtZSk7IH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy4kd2F0Y2goJ2V4Y2x1ZGUnLCBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICBwcnVuZUNhY2hlKF90aGlzLCBmdW5jdGlvbiAobmFtZSkgeyByZXR1cm4gIW1hdGNoZXModmFsLCBuYW1lKTsgfSk7XG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgdXBkYXRlZDogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmNhY2hlVk5vZGUoKTtcbiAgICB9LFxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgc2xvdCA9IHRoaXMuJHNsb3RzLmRlZmF1bHQ7XG4gICAgICAgIHZhciB2bm9kZSA9IGdldEZpcnN0Q29tcG9uZW50Q2hpbGQoc2xvdCk7XG4gICAgICAgIHZhciBjb21wb25lbnRPcHRpb25zID0gdm5vZGUgJiYgdm5vZGUuY29tcG9uZW50T3B0aW9ucztcbiAgICAgICAgaWYgKGNvbXBvbmVudE9wdGlvbnMpIHtcbiAgICAgICAgICAgIC8vIGNoZWNrIHBhdHRlcm5cbiAgICAgICAgICAgIHZhciBuYW1lXzIgPSBfZ2V0Q29tcG9uZW50TmFtZShjb21wb25lbnRPcHRpb25zKTtcbiAgICAgICAgICAgIHZhciBfYSA9IHRoaXMsIGluY2x1ZGUgPSBfYS5pbmNsdWRlLCBleGNsdWRlID0gX2EuZXhjbHVkZTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIC8vIG5vdCBpbmNsdWRlZFxuICAgICAgICAgICAgKGluY2x1ZGUgJiYgKCFuYW1lXzIgfHwgIW1hdGNoZXMoaW5jbHVkZSwgbmFtZV8yKSkpIHx8XG4gICAgICAgICAgICAgICAgLy8gZXhjbHVkZWRcbiAgICAgICAgICAgICAgICAoZXhjbHVkZSAmJiBuYW1lXzIgJiYgbWF0Y2hlcyhleGNsdWRlLCBuYW1lXzIpKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB2bm9kZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBfYiA9IHRoaXMsIGNhY2hlID0gX2IuY2FjaGUsIGtleXMgPSBfYi5rZXlzO1xuICAgICAgICAgICAgdmFyIGtleSA9IHZub2RlLmtleSA9PSBudWxsXG4gICAgICAgICAgICAgICAgPyAvLyBzYW1lIGNvbnN0cnVjdG9yIG1heSBnZXQgcmVnaXN0ZXJlZCBhcyBkaWZmZXJlbnQgbG9jYWwgY29tcG9uZW50c1xuICAgICAgICAgICAgICAgICAgICAvLyBzbyBjaWQgYWxvbmUgaXMgbm90IGVub3VnaCAoIzMyNjkpXG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudE9wdGlvbnMuQ3Rvci5jaWQgK1xuICAgICAgICAgICAgICAgICAgICAgICAgKGNvbXBvbmVudE9wdGlvbnMudGFnID8gXCI6OlwiLmNvbmNhdChjb21wb25lbnRPcHRpb25zLnRhZykgOiAnJylcbiAgICAgICAgICAgICAgICA6IHZub2RlLmtleTtcbiAgICAgICAgICAgIGlmIChjYWNoZVtrZXldKSB7XG4gICAgICAgICAgICAgICAgdm5vZGUuY29tcG9uZW50SW5zdGFuY2UgPSBjYWNoZVtrZXldLmNvbXBvbmVudEluc3RhbmNlO1xuICAgICAgICAgICAgICAgIC8vIG1ha2UgY3VycmVudCBrZXkgZnJlc2hlc3RcbiAgICAgICAgICAgICAgICByZW1vdmUkMihrZXlzLCBrZXkpO1xuICAgICAgICAgICAgICAgIGtleXMucHVzaChrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gZGVsYXkgc2V0dGluZyB0aGUgY2FjaGUgdW50aWwgdXBkYXRlXG4gICAgICAgICAgICAgICAgdGhpcy52bm9kZVRvQ2FjaGUgPSB2bm9kZTtcbiAgICAgICAgICAgICAgICB0aGlzLmtleVRvQ2FjaGUgPSBrZXk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGNhbiB2bm9kZS5kYXRhIGNhbiBiZSB1bmRlZmluZWRcbiAgICAgICAgICAgIHZub2RlLmRhdGEua2VlcEFsaXZlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdm5vZGUgfHwgKHNsb3QgJiYgc2xvdFswXSk7XG4gICAgfVxufTtcblxudmFyIGJ1aWx0SW5Db21wb25lbnRzID0ge1xuICAgIEtlZXBBbGl2ZTogS2VlcEFsaXZlXG59O1xuXG5mdW5jdGlvbiBpbml0R2xvYmFsQVBJKFZ1ZSkge1xuICAgIC8vIGNvbmZpZ1xuICAgIHZhciBjb25maWdEZWYgPSB7fTtcbiAgICBjb25maWdEZWYuZ2V0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gY29uZmlnOyB9O1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGNvbmZpZ0RlZi5zZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB3YXJuJDIoJ0RvIG5vdCByZXBsYWNlIHRoZSBWdWUuY29uZmlnIG9iamVjdCwgc2V0IGluZGl2aWR1YWwgZmllbGRzIGluc3RlYWQuJyk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWdWUsICdjb25maWcnLCBjb25maWdEZWYpO1xuICAgIC8vIGV4cG9zZWQgdXRpbCBtZXRob2RzLlxuICAgIC8vIE5PVEU6IHRoZXNlIGFyZSBub3QgY29uc2lkZXJlZCBwYXJ0IG9mIHRoZSBwdWJsaWMgQVBJIC0gYXZvaWQgcmVseWluZyBvblxuICAgIC8vIHRoZW0gdW5sZXNzIHlvdSBhcmUgYXdhcmUgb2YgdGhlIHJpc2suXG4gICAgVnVlLnV0aWwgPSB7XG4gICAgICAgIHdhcm46IHdhcm4kMixcbiAgICAgICAgZXh0ZW5kOiBleHRlbmQsXG4gICAgICAgIG1lcmdlT3B0aW9uczogbWVyZ2VPcHRpb25zLFxuICAgICAgICBkZWZpbmVSZWFjdGl2ZTogZGVmaW5lUmVhY3RpdmVcbiAgICB9O1xuICAgIFZ1ZS5zZXQgPSBzZXQ7XG4gICAgVnVlLmRlbGV0ZSA9IGRlbDtcbiAgICBWdWUubmV4dFRpY2sgPSBuZXh0VGljaztcbiAgICAvLyAyLjYgZXhwbGljaXQgb2JzZXJ2YWJsZSBBUElcbiAgICBWdWUub2JzZXJ2YWJsZSA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgb2JzZXJ2ZShvYmopO1xuICAgICAgICByZXR1cm4gb2JqO1xuICAgIH07XG4gICAgVnVlLm9wdGlvbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIEFTU0VUX1RZUEVTLmZvckVhY2goZnVuY3Rpb24gKHR5cGUpIHtcbiAgICAgICAgVnVlLm9wdGlvbnNbdHlwZSArICdzJ10gPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIH0pO1xuICAgIC8vIHRoaXMgaXMgdXNlZCB0byBpZGVudGlmeSB0aGUgXCJiYXNlXCIgY29uc3RydWN0b3IgdG8gZXh0ZW5kIGFsbCBwbGFpbi1vYmplY3RcbiAgICAvLyBjb21wb25lbnRzIHdpdGggaW4gV2VleCdzIG11bHRpLWluc3RhbmNlIHNjZW5hcmlvcy5cbiAgICBWdWUub3B0aW9ucy5fYmFzZSA9IFZ1ZTtcbiAgICBleHRlbmQoVnVlLm9wdGlvbnMuY29tcG9uZW50cywgYnVpbHRJbkNvbXBvbmVudHMpO1xuICAgIGluaXRVc2UoVnVlKTtcbiAgICBpbml0TWl4aW4oVnVlKTtcbiAgICBpbml0RXh0ZW5kKFZ1ZSk7XG4gICAgaW5pdEFzc2V0UmVnaXN0ZXJzKFZ1ZSk7XG59XG5cbmluaXRHbG9iYWxBUEkoVnVlKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShWdWUucHJvdG90eXBlLCAnJGlzU2VydmVyJywge1xuICAgIGdldDogaXNTZXJ2ZXJSZW5kZXJpbmdcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFZ1ZS5wcm90b3R5cGUsICckc3NyQ29udGV4dCcsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgcmV0dXJuIHRoaXMuJHZub2RlICYmIHRoaXMuJHZub2RlLnNzckNvbnRleHQ7XG4gICAgfVxufSk7XG4vLyBleHBvc2UgRnVuY3Rpb25hbFJlbmRlckNvbnRleHQgZm9yIHNzciBydW50aW1lIGhlbHBlciBpbnN0YWxsYXRpb25cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShWdWUsICdGdW5jdGlvbmFsUmVuZGVyQ29udGV4dCcsIHtcbiAgICB2YWx1ZTogRnVuY3Rpb25hbFJlbmRlckNvbnRleHRcbn0pO1xuVnVlLnZlcnNpb24gPSB2ZXJzaW9uO1xuXG4vLyB0aGVzZSBhcmUgcmVzZXJ2ZWQgZm9yIHdlYiBiZWNhdXNlIHRoZXkgYXJlIGRpcmVjdGx5IGNvbXBpbGVkIGF3YXlcbi8vIGR1cmluZyB0ZW1wbGF0ZSBjb21waWxhdGlvblxudmFyIGlzUmVzZXJ2ZWRBdHRyID0gbWFrZU1hcCgnc3R5bGUsY2xhc3MnKTtcbi8vIGF0dHJpYnV0ZXMgdGhhdCBzaG91bGQgYmUgdXNpbmcgcHJvcHMgZm9yIGJpbmRpbmdcbnZhciBhY2NlcHRWYWx1ZSA9IG1ha2VNYXAoJ2lucHV0LHRleHRhcmVhLG9wdGlvbixzZWxlY3QscHJvZ3Jlc3MnKTtcbnZhciBtdXN0VXNlUHJvcCA9IGZ1bmN0aW9uICh0YWcsIHR5cGUsIGF0dHIpIHtcbiAgICByZXR1cm4gKChhdHRyID09PSAndmFsdWUnICYmIGFjY2VwdFZhbHVlKHRhZykgJiYgdHlwZSAhPT0gJ2J1dHRvbicpIHx8XG4gICAgICAgIChhdHRyID09PSAnc2VsZWN0ZWQnICYmIHRhZyA9PT0gJ29wdGlvbicpIHx8XG4gICAgICAgIChhdHRyID09PSAnY2hlY2tlZCcgJiYgdGFnID09PSAnaW5wdXQnKSB8fFxuICAgICAgICAoYXR0ciA9PT0gJ211dGVkJyAmJiB0YWcgPT09ICd2aWRlbycpKTtcbn07XG52YXIgaXNFbnVtZXJhdGVkQXR0ciA9IG1ha2VNYXAoJ2NvbnRlbnRlZGl0YWJsZSxkcmFnZ2FibGUsc3BlbGxjaGVjaycpO1xudmFyIGlzVmFsaWRDb250ZW50RWRpdGFibGVWYWx1ZSA9IG1ha2VNYXAoJ2V2ZW50cyxjYXJldCx0eXBpbmcscGxhaW50ZXh0LW9ubHknKTtcbnZhciBjb252ZXJ0RW51bWVyYXRlZFZhbHVlID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICByZXR1cm4gaXNGYWxzeUF0dHJWYWx1ZSh2YWx1ZSkgfHwgdmFsdWUgPT09ICdmYWxzZSdcbiAgICAgICAgPyAnZmFsc2UnXG4gICAgICAgIDogLy8gYWxsb3cgYXJiaXRyYXJ5IHN0cmluZyB2YWx1ZSBmb3IgY29udGVudGVkaXRhYmxlXG4gICAgICAgICAgICBrZXkgPT09ICdjb250ZW50ZWRpdGFibGUnICYmIGlzVmFsaWRDb250ZW50RWRpdGFibGVWYWx1ZSh2YWx1ZSlcbiAgICAgICAgICAgICAgICA/IHZhbHVlXG4gICAgICAgICAgICAgICAgOiAndHJ1ZSc7XG59O1xudmFyIGlzQm9vbGVhbkF0dHIgPSBtYWtlTWFwKCdhbGxvd2Z1bGxzY3JlZW4sYXN5bmMsYXV0b2ZvY3VzLGF1dG9wbGF5LGNoZWNrZWQsY29tcGFjdCxjb250cm9scyxkZWNsYXJlLCcgK1xuICAgICdkZWZhdWx0LGRlZmF1bHRjaGVja2VkLGRlZmF1bHRtdXRlZCxkZWZhdWx0c2VsZWN0ZWQsZGVmZXIsZGlzYWJsZWQsJyArXG4gICAgJ2VuYWJsZWQsZm9ybW5vdmFsaWRhdGUsaGlkZGVuLGluZGV0ZXJtaW5hdGUsaW5lcnQsaXNtYXAsaXRlbXNjb3BlLGxvb3AsbXVsdGlwbGUsJyArXG4gICAgJ211dGVkLG5vaHJlZixub3Jlc2l6ZSxub3NoYWRlLG5vdmFsaWRhdGUsbm93cmFwLG9wZW4scGF1c2VvbmV4aXQscmVhZG9ubHksJyArXG4gICAgJ3JlcXVpcmVkLHJldmVyc2VkLHNjb3BlZCxzZWFtbGVzcyxzZWxlY3RlZCxzb3J0YWJsZSwnICtcbiAgICAndHJ1ZXNwZWVkLHR5cGVtdXN0bWF0Y2gsdmlzaWJsZScpO1xudmFyIHhsaW5rTlMgPSAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayc7XG52YXIgaXNYbGluayA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgcmV0dXJuIG5hbWUuY2hhckF0KDUpID09PSAnOicgJiYgbmFtZS5zbGljZSgwLCA1KSA9PT0gJ3hsaW5rJztcbn07XG52YXIgZ2V0WGxpbmtQcm9wID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICByZXR1cm4gaXNYbGluayhuYW1lKSA/IG5hbWUuc2xpY2UoNiwgbmFtZS5sZW5ndGgpIDogJyc7XG59O1xudmFyIGlzRmFsc3lBdHRyVmFsdWUgPSBmdW5jdGlvbiAodmFsKSB7XG4gICAgcmV0dXJuIHZhbCA9PSBudWxsIHx8IHZhbCA9PT0gZmFsc2U7XG59O1xuXG5mdW5jdGlvbiBnZW5DbGFzc0ZvclZub2RlKHZub2RlKSB7XG4gICAgdmFyIGRhdGEgPSB2bm9kZS5kYXRhO1xuICAgIHZhciBwYXJlbnROb2RlID0gdm5vZGU7XG4gICAgdmFyIGNoaWxkTm9kZSA9IHZub2RlO1xuICAgIHdoaWxlIChpc0RlZihjaGlsZE5vZGUuY29tcG9uZW50SW5zdGFuY2UpKSB7XG4gICAgICAgIGNoaWxkTm9kZSA9IGNoaWxkTm9kZS5jb21wb25lbnRJbnN0YW5jZS5fdm5vZGU7XG4gICAgICAgIGlmIChjaGlsZE5vZGUgJiYgY2hpbGROb2RlLmRhdGEpIHtcbiAgICAgICAgICAgIGRhdGEgPSBtZXJnZUNsYXNzRGF0YShjaGlsZE5vZGUuZGF0YSwgZGF0YSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciBwYXJlbnROb2RlLnBhcmVudCBub3QgVk5vZGVXaXRoRGF0YVxuICAgIHdoaWxlIChpc0RlZigocGFyZW50Tm9kZSA9IHBhcmVudE5vZGUucGFyZW50KSkpIHtcbiAgICAgICAgaWYgKHBhcmVudE5vZGUgJiYgcGFyZW50Tm9kZS5kYXRhKSB7XG4gICAgICAgICAgICBkYXRhID0gbWVyZ2VDbGFzc0RhdGEoZGF0YSwgcGFyZW50Tm9kZS5kYXRhKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVuZGVyQ2xhc3MoZGF0YS5zdGF0aWNDbGFzcywgZGF0YS5jbGFzcyk7XG59XG5mdW5jdGlvbiBtZXJnZUNsYXNzRGF0YShjaGlsZCwgcGFyZW50KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdGljQ2xhc3M6IGNvbmNhdChjaGlsZC5zdGF0aWNDbGFzcywgcGFyZW50LnN0YXRpY0NsYXNzKSxcbiAgICAgICAgY2xhc3M6IGlzRGVmKGNoaWxkLmNsYXNzKSA/IFtjaGlsZC5jbGFzcywgcGFyZW50LmNsYXNzXSA6IHBhcmVudC5jbGFzc1xuICAgIH07XG59XG5mdW5jdGlvbiByZW5kZXJDbGFzcyhzdGF0aWNDbGFzcywgZHluYW1pY0NsYXNzKSB7XG4gICAgaWYgKGlzRGVmKHN0YXRpY0NsYXNzKSB8fCBpc0RlZihkeW5hbWljQ2xhc3MpKSB7XG4gICAgICAgIHJldHVybiBjb25jYXQoc3RhdGljQ2xhc3MsIHN0cmluZ2lmeUNsYXNzKGR5bmFtaWNDbGFzcykpO1xuICAgIH1cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHJldHVybiAnJztcbn1cbmZ1bmN0aW9uIGNvbmNhdChhLCBiKSB7XG4gICAgcmV0dXJuIGEgPyAoYiA/IGEgKyAnICcgKyBiIDogYSkgOiBiIHx8ICcnO1xufVxuZnVuY3Rpb24gc3RyaW5naWZ5Q2xhc3ModmFsdWUpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZ2lmeUFycmF5KHZhbHVlKTtcbiAgICB9XG4gICAgaWYgKGlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gc3RyaW5naWZ5T2JqZWN0KHZhbHVlKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHJldHVybiAnJztcbn1cbmZ1bmN0aW9uIHN0cmluZ2lmeUFycmF5KHZhbHVlKSB7XG4gICAgdmFyIHJlcyA9ICcnO1xuICAgIHZhciBzdHJpbmdpZmllZDtcbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICBpZiAoaXNEZWYoKHN0cmluZ2lmaWVkID0gc3RyaW5naWZ5Q2xhc3ModmFsdWVbaV0pKSkgJiYgc3RyaW5naWZpZWQgIT09ICcnKSB7XG4gICAgICAgICAgICBpZiAocmVzKVxuICAgICAgICAgICAgICAgIHJlcyArPSAnICc7XG4gICAgICAgICAgICByZXMgKz0gc3RyaW5naWZpZWQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbn1cbmZ1bmN0aW9uIHN0cmluZ2lmeU9iamVjdCh2YWx1ZSkge1xuICAgIHZhciByZXMgPSAnJztcbiAgICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICAgICAgaWYgKHZhbHVlW2tleV0pIHtcbiAgICAgICAgICAgIGlmIChyZXMpXG4gICAgICAgICAgICAgICAgcmVzICs9ICcgJztcbiAgICAgICAgICAgIHJlcyArPSBrZXk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbn1cblxudmFyIG5hbWVzcGFjZU1hcCA9IHtcbiAgICBzdmc6ICdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsXG4gICAgbWF0aDogJ2h0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwnXG59O1xudmFyIGlzSFRNTFRhZyA9IG1ha2VNYXAoJ2h0bWwsYm9keSxiYXNlLGhlYWQsbGluayxtZXRhLHN0eWxlLHRpdGxlLCcgK1xuICAgICdhZGRyZXNzLGFydGljbGUsYXNpZGUsZm9vdGVyLGhlYWRlcixoMSxoMixoMyxoNCxoNSxoNixoZ3JvdXAsbmF2LHNlY3Rpb24sJyArXG4gICAgJ2RpdixkZCxkbCxkdCxmaWdjYXB0aW9uLGZpZ3VyZSxwaWN0dXJlLGhyLGltZyxsaSxtYWluLG9sLHAscHJlLHVsLCcgK1xuICAgICdhLGIsYWJicixiZGksYmRvLGJyLGNpdGUsY29kZSxkYXRhLGRmbixlbSxpLGtiZCxtYXJrLHEscnAscnQscnRjLHJ1YnksJyArXG4gICAgJ3Msc2FtcCxzbWFsbCxzcGFuLHN0cm9uZyxzdWIsc3VwLHRpbWUsdSx2YXIsd2JyLGFyZWEsYXVkaW8sbWFwLHRyYWNrLHZpZGVvLCcgK1xuICAgICdlbWJlZCxvYmplY3QscGFyYW0sc291cmNlLGNhbnZhcyxzY3JpcHQsbm9zY3JpcHQsZGVsLGlucywnICtcbiAgICAnY2FwdGlvbixjb2wsY29sZ3JvdXAsdGFibGUsdGhlYWQsdGJvZHksdGQsdGgsdHIsJyArXG4gICAgJ2J1dHRvbixkYXRhbGlzdCxmaWVsZHNldCxmb3JtLGlucHV0LGxhYmVsLGxlZ2VuZCxtZXRlcixvcHRncm91cCxvcHRpb24sJyArXG4gICAgJ291dHB1dCxwcm9ncmVzcyxzZWxlY3QsdGV4dGFyZWEsJyArXG4gICAgJ2RldGFpbHMsZGlhbG9nLG1lbnUsbWVudWl0ZW0sc3VtbWFyeSwnICtcbiAgICAnY29udGVudCxlbGVtZW50LHNoYWRvdyx0ZW1wbGF0ZSxibG9ja3F1b3RlLGlmcmFtZSx0Zm9vdCcpO1xuLy8gdGhpcyBtYXAgaXMgaW50ZW50aW9uYWxseSBzZWxlY3RpdmUsIG9ubHkgY292ZXJpbmcgU1ZHIGVsZW1lbnRzIHRoYXQgbWF5XG4vLyBjb250YWluIGNoaWxkIGVsZW1lbnRzLlxudmFyIGlzU1ZHID0gbWFrZU1hcCgnc3ZnLGFuaW1hdGUsY2lyY2xlLGNsaXBwYXRoLGN1cnNvcixkZWZzLGRlc2MsZWxsaXBzZSxmaWx0ZXIsZm9udC1mYWNlLCcgK1xuICAgICdmb3JlaWdub2JqZWN0LGcsZ2x5cGgsaW1hZ2UsbGluZSxtYXJrZXIsbWFzayxtaXNzaW5nLWdseXBoLHBhdGgscGF0dGVybiwnICtcbiAgICAncG9seWdvbixwb2x5bGluZSxyZWN0LHN3aXRjaCxzeW1ib2wsdGV4dCx0ZXh0cGF0aCx0c3Bhbix1c2UsdmlldycsIHRydWUpO1xudmFyIGlzUHJlVGFnID0gZnVuY3Rpb24gKHRhZykgeyByZXR1cm4gdGFnID09PSAncHJlJzsgfTtcbnZhciBpc1Jlc2VydmVkVGFnID0gZnVuY3Rpb24gKHRhZykge1xuICAgIHJldHVybiBpc0hUTUxUYWcodGFnKSB8fCBpc1NWRyh0YWcpO1xufTtcbmZ1bmN0aW9uIGdldFRhZ05hbWVzcGFjZSh0YWcpIHtcbiAgICBpZiAoaXNTVkcodGFnKSkge1xuICAgICAgICByZXR1cm4gJ3N2Zyc7XG4gICAgfVxuICAgIC8vIGJhc2ljIHN1cHBvcnQgZm9yIE1hdGhNTFxuICAgIC8vIG5vdGUgaXQgZG9lc24ndCBzdXBwb3J0IG90aGVyIE1hdGhNTCBlbGVtZW50cyBiZWluZyBjb21wb25lbnQgcm9vdHNcbiAgICBpZiAodGFnID09PSAnbWF0aCcpIHtcbiAgICAgICAgcmV0dXJuICdtYXRoJztcbiAgICB9XG59XG52YXIgdW5rbm93bkVsZW1lbnRDYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5mdW5jdGlvbiBpc1Vua25vd25FbGVtZW50KHRhZykge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICghaW5Ccm93c2VyKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoaXNSZXNlcnZlZFRhZyh0YWcpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGFnID0gdGFnLnRvTG93ZXJDYXNlKCk7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKHVua25vd25FbGVtZW50Q2FjaGVbdGFnXSAhPSBudWxsKSB7XG4gICAgICAgIHJldHVybiB1bmtub3duRWxlbWVudENhY2hlW3RhZ107XG4gICAgfVxuICAgIHZhciBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnKTtcbiAgICBpZiAodGFnLmluZGV4T2YoJy0nKSA+IC0xKSB7XG4gICAgICAgIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzI4MjEwMzY0LzEwNzAyNDRcbiAgICAgICAgcmV0dXJuICh1bmtub3duRWxlbWVudENhY2hlW3RhZ10gPVxuICAgICAgICAgICAgZWwuY29uc3RydWN0b3IgPT09IHdpbmRvdy5IVE1MVW5rbm93bkVsZW1lbnQgfHxcbiAgICAgICAgICAgICAgICBlbC5jb25zdHJ1Y3RvciA9PT0gd2luZG93LkhUTUxFbGVtZW50KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiAodW5rbm93bkVsZW1lbnRDYWNoZVt0YWddID0gL0hUTUxVbmtub3duRWxlbWVudC8udGVzdChlbC50b1N0cmluZygpKSk7XG4gICAgfVxufVxudmFyIGlzVGV4dElucHV0VHlwZSA9IG1ha2VNYXAoJ3RleHQsbnVtYmVyLHBhc3N3b3JkLHNlYXJjaCxlbWFpbCx0ZWwsdXJsJyk7XG5cbi8qKlxuICogUXVlcnkgYW4gZWxlbWVudCBzZWxlY3RvciBpZiBpdCdzIG5vdCBhbiBlbGVtZW50IGFscmVhZHkuXG4gKi9cbmZ1bmN0aW9uIHF1ZXJ5KGVsKSB7XG4gICAgaWYgKHR5cGVvZiBlbCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdmFyIHNlbGVjdGVkID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlbCk7XG4gICAgICAgIGlmICghc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybiQyKCdDYW5ub3QgZmluZCBlbGVtZW50OiAnICsgZWwpO1xuICAgICAgICAgICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZWxlY3RlZDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBlbDtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQodGFnTmFtZSwgdm5vZGUpIHtcbiAgICB2YXIgZWxtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtcbiAgICBpZiAodGFnTmFtZSAhPT0gJ3NlbGVjdCcpIHtcbiAgICAgICAgcmV0dXJuIGVsbTtcbiAgICB9XG4gICAgLy8gZmFsc2Ugb3IgbnVsbCB3aWxsIHJlbW92ZSB0aGUgYXR0cmlidXRlIGJ1dCB1bmRlZmluZWQgd2lsbCBub3RcbiAgICBpZiAodm5vZGUuZGF0YSAmJlxuICAgICAgICB2bm9kZS5kYXRhLmF0dHJzICYmXG4gICAgICAgIHZub2RlLmRhdGEuYXR0cnMubXVsdGlwbGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBlbG0uc2V0QXR0cmlidXRlKCdtdWx0aXBsZScsICdtdWx0aXBsZScpO1xuICAgIH1cbiAgICByZXR1cm4gZWxtO1xufVxuZnVuY3Rpb24gY3JlYXRlRWxlbWVudE5TKG5hbWVzcGFjZSwgdGFnTmFtZSkge1xuICAgIHJldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobmFtZXNwYWNlTWFwW25hbWVzcGFjZV0sIHRhZ05hbWUpO1xufVxuZnVuY3Rpb24gY3JlYXRlVGV4dE5vZGUodGV4dCkge1xuICAgIHJldHVybiBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0ZXh0KTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUNvbW1lbnQodGV4dCkge1xuICAgIHJldHVybiBkb2N1bWVudC5jcmVhdGVDb21tZW50KHRleHQpO1xufVxuZnVuY3Rpb24gaW5zZXJ0QmVmb3JlKHBhcmVudE5vZGUsIG5ld05vZGUsIHJlZmVyZW5jZU5vZGUpIHtcbiAgICBwYXJlbnROb2RlLmluc2VydEJlZm9yZShuZXdOb2RlLCByZWZlcmVuY2VOb2RlKTtcbn1cbmZ1bmN0aW9uIHJlbW92ZUNoaWxkKG5vZGUsIGNoaWxkKSB7XG4gICAgbm9kZS5yZW1vdmVDaGlsZChjaGlsZCk7XG59XG5mdW5jdGlvbiBhcHBlbmRDaGlsZChub2RlLCBjaGlsZCkge1xuICAgIG5vZGUuYXBwZW5kQ2hpbGQoY2hpbGQpO1xufVxuZnVuY3Rpb24gcGFyZW50Tm9kZShub2RlKSB7XG4gICAgcmV0dXJuIG5vZGUucGFyZW50Tm9kZTtcbn1cbmZ1bmN0aW9uIG5leHRTaWJsaW5nKG5vZGUpIHtcbiAgICByZXR1cm4gbm9kZS5uZXh0U2libGluZztcbn1cbmZ1bmN0aW9uIHRhZ05hbWUobm9kZSkge1xuICAgIHJldHVybiBub2RlLnRhZ05hbWU7XG59XG5mdW5jdGlvbiBzZXRUZXh0Q29udGVudChub2RlLCB0ZXh0KSB7XG4gICAgbm9kZS50ZXh0Q29udGVudCA9IHRleHQ7XG59XG5mdW5jdGlvbiBzZXRTdHlsZVNjb3BlKG5vZGUsIHNjb3BlSWQpIHtcbiAgICBub2RlLnNldEF0dHJpYnV0ZShzY29wZUlkLCAnJyk7XG59XG5cbnZhciBub2RlT3BzID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICBfX3Byb3RvX186IG51bGwsXG4gIGNyZWF0ZUVsZW1lbnQ6IGNyZWF0ZUVsZW1lbnQsXG4gIGNyZWF0ZUVsZW1lbnROUzogY3JlYXRlRWxlbWVudE5TLFxuICBjcmVhdGVUZXh0Tm9kZTogY3JlYXRlVGV4dE5vZGUsXG4gIGNyZWF0ZUNvbW1lbnQ6IGNyZWF0ZUNvbW1lbnQsXG4gIGluc2VydEJlZm9yZTogaW5zZXJ0QmVmb3JlLFxuICByZW1vdmVDaGlsZDogcmVtb3ZlQ2hpbGQsXG4gIGFwcGVuZENoaWxkOiBhcHBlbmRDaGlsZCxcbiAgcGFyZW50Tm9kZTogcGFyZW50Tm9kZSxcbiAgbmV4dFNpYmxpbmc6IG5leHRTaWJsaW5nLFxuICB0YWdOYW1lOiB0YWdOYW1lLFxuICBzZXRUZXh0Q29udGVudDogc2V0VGV4dENvbnRlbnQsXG4gIHNldFN0eWxlU2NvcGU6IHNldFN0eWxlU2NvcGVcbn0pO1xuXG52YXIgcmVmID0ge1xuICAgIGNyZWF0ZTogZnVuY3Rpb24gKF8sIHZub2RlKSB7XG4gICAgICAgIHJlZ2lzdGVyUmVmKHZub2RlKTtcbiAgICB9LFxuICAgIHVwZGF0ZTogZnVuY3Rpb24gKG9sZFZub2RlLCB2bm9kZSkge1xuICAgICAgICBpZiAob2xkVm5vZGUuZGF0YS5yZWYgIT09IHZub2RlLmRhdGEucmVmKSB7XG4gICAgICAgICAgICByZWdpc3RlclJlZihvbGRWbm9kZSwgdHJ1ZSk7XG4gICAgICAgICAgICByZWdpc3RlclJlZih2bm9kZSk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICh2bm9kZSkge1xuICAgICAgICByZWdpc3RlclJlZih2bm9kZSwgdHJ1ZSk7XG4gICAgfVxufTtcbmZ1bmN0aW9uIHJlZ2lzdGVyUmVmKHZub2RlLCBpc1JlbW92YWwpIHtcbiAgICB2YXIgcmVmID0gdm5vZGUuZGF0YS5yZWY7XG4gICAgaWYgKCFpc0RlZihyZWYpKVxuICAgICAgICByZXR1cm47XG4gICAgdmFyIHZtID0gdm5vZGUuY29udGV4dDtcbiAgICB2YXIgcmVmVmFsdWUgPSB2bm9kZS5jb21wb25lbnRJbnN0YW5jZSB8fCB2bm9kZS5lbG07XG4gICAgdmFyIHZhbHVlID0gaXNSZW1vdmFsID8gbnVsbCA6IHJlZlZhbHVlO1xuICAgIHZhciAkcmVmc1ZhbHVlID0gaXNSZW1vdmFsID8gdW5kZWZpbmVkIDogcmVmVmFsdWU7XG4gICAgaWYgKGlzRnVuY3Rpb24ocmVmKSkge1xuICAgICAgICBpbnZva2VXaXRoRXJyb3JIYW5kbGluZyhyZWYsIHZtLCBbdmFsdWVdLCB2bSwgXCJ0ZW1wbGF0ZSByZWYgZnVuY3Rpb25cIik7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIGlzRm9yID0gdm5vZGUuZGF0YS5yZWZJbkZvcjtcbiAgICB2YXIgX2lzU3RyaW5nID0gdHlwZW9mIHJlZiA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHJlZiA9PT0gJ251bWJlcic7XG4gICAgdmFyIF9pc1JlZiA9IGlzUmVmKHJlZik7XG4gICAgdmFyIHJlZnMgPSB2bS4kcmVmcztcbiAgICBpZiAoX2lzU3RyaW5nIHx8IF9pc1JlZikge1xuICAgICAgICBpZiAoaXNGb3IpIHtcbiAgICAgICAgICAgIHZhciBleGlzdGluZyA9IF9pc1N0cmluZyA/IHJlZnNbcmVmXSA6IHJlZi52YWx1ZTtcbiAgICAgICAgICAgIGlmIChpc1JlbW92YWwpIHtcbiAgICAgICAgICAgICAgICBpc0FycmF5KGV4aXN0aW5nKSAmJiByZW1vdmUkMihleGlzdGluZywgcmVmVmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpc0FycmF5KGV4aXN0aW5nKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoX2lzU3RyaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWZzW3JlZl0gPSBbcmVmVmFsdWVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0U2V0dXBSZWYodm0sIHJlZiwgcmVmc1tyZWZdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZi52YWx1ZSA9IFtyZWZWYWx1ZV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoIWV4aXN0aW5nLmluY2x1ZGVzKHJlZlZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICBleGlzdGluZy5wdXNoKHJlZlZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoX2lzU3RyaW5nKSB7XG4gICAgICAgICAgICBpZiAoaXNSZW1vdmFsICYmIHJlZnNbcmVmXSAhPT0gcmVmVmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZWZzW3JlZl0gPSAkcmVmc1ZhbHVlO1xuICAgICAgICAgICAgc2V0U2V0dXBSZWYodm0sIHJlZiwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKF9pc1JlZikge1xuICAgICAgICAgICAgaWYgKGlzUmVtb3ZhbCAmJiByZWYudmFsdWUgIT09IHJlZlZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVmLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgd2FybiQyKFwiSW52YWxpZCB0ZW1wbGF0ZSByZWYgdHlwZTogXCIuY29uY2F0KHR5cGVvZiByZWYpKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIHNldFNldHVwUmVmKF9hLCBrZXksIHZhbCkge1xuICAgIHZhciBfc2V0dXBTdGF0ZSA9IF9hLl9zZXR1cFN0YXRlO1xuICAgIGlmIChfc2V0dXBTdGF0ZSAmJiBoYXNPd24oX3NldHVwU3RhdGUsIGtleSkpIHtcbiAgICAgICAgaWYgKGlzUmVmKF9zZXR1cFN0YXRlW2tleV0pKSB7XG4gICAgICAgICAgICBfc2V0dXBTdGF0ZVtrZXldLnZhbHVlID0gdmFsO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgX3NldHVwU3RhdGVba2V5XSA9IHZhbDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLyoqXG4gKiBWaXJ0dWFsIERPTSBwYXRjaGluZyBhbGdvcml0aG0gYmFzZWQgb24gU25hYmJkb20gYnlcbiAqIFNpbW9uIEZyaWlzIFZpbmR1bSAoQHBhbGRlcGluZClcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZVxuICogaHR0cHM6Ly9naXRodWIuY29tL3BhbGRlcGluZC9zbmFiYmRvbS9ibG9iL21hc3Rlci9MSUNFTlNFXG4gKlxuICogbW9kaWZpZWQgYnkgRXZhbiBZb3UgKEB5eXg5OTA4MDMpXG4gKlxuICogTm90IHR5cGUtY2hlY2tpbmcgdGhpcyBiZWNhdXNlIHRoaXMgZmlsZSBpcyBwZXJmLWNyaXRpY2FsIGFuZCB0aGUgY29zdFxuICogb2YgbWFraW5nIGZsb3cgdW5kZXJzdGFuZCBpdCBpcyBub3Qgd29ydGggaXQuXG4gKi9cbnZhciBlbXB0eU5vZGUgPSBuZXcgVk5vZGUoJycsIHt9LCBbXSk7XG52YXIgaG9va3MgPSBbJ2NyZWF0ZScsICdhY3RpdmF0ZScsICd1cGRhdGUnLCAncmVtb3ZlJywgJ2Rlc3Ryb3knXTtcbmZ1bmN0aW9uIHNhbWVWbm9kZShhLCBiKSB7XG4gICAgcmV0dXJuIChhLmtleSA9PT0gYi5rZXkgJiZcbiAgICAgICAgYS5hc3luY0ZhY3RvcnkgPT09IGIuYXN5bmNGYWN0b3J5ICYmXG4gICAgICAgICgoYS50YWcgPT09IGIudGFnICYmXG4gICAgICAgICAgICBhLmlzQ29tbWVudCA9PT0gYi5pc0NvbW1lbnQgJiZcbiAgICAgICAgICAgIGlzRGVmKGEuZGF0YSkgPT09IGlzRGVmKGIuZGF0YSkgJiZcbiAgICAgICAgICAgIHNhbWVJbnB1dFR5cGUoYSwgYikpIHx8XG4gICAgICAgICAgICAoaXNUcnVlKGEuaXNBc3luY1BsYWNlaG9sZGVyKSAmJiBpc1VuZGVmKGIuYXN5bmNGYWN0b3J5LmVycm9yKSkpKTtcbn1cbmZ1bmN0aW9uIHNhbWVJbnB1dFR5cGUoYSwgYikge1xuICAgIGlmIChhLnRhZyAhPT0gJ2lucHV0JylcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgdmFyIGk7XG4gICAgdmFyIHR5cGVBID0gaXNEZWYoKGkgPSBhLmRhdGEpKSAmJiBpc0RlZigoaSA9IGkuYXR0cnMpKSAmJiBpLnR5cGU7XG4gICAgdmFyIHR5cGVCID0gaXNEZWYoKGkgPSBiLmRhdGEpKSAmJiBpc0RlZigoaSA9IGkuYXR0cnMpKSAmJiBpLnR5cGU7XG4gICAgcmV0dXJuIHR5cGVBID09PSB0eXBlQiB8fCAoaXNUZXh0SW5wdXRUeXBlKHR5cGVBKSAmJiBpc1RleHRJbnB1dFR5cGUodHlwZUIpKTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUtleVRvT2xkSWR4KGNoaWxkcmVuLCBiZWdpbklkeCwgZW5kSWR4KSB7XG4gICAgdmFyIGksIGtleTtcbiAgICB2YXIgbWFwID0ge307XG4gICAgZm9yIChpID0gYmVnaW5JZHg7IGkgPD0gZW5kSWR4OyArK2kpIHtcbiAgICAgICAga2V5ID0gY2hpbGRyZW5baV0ua2V5O1xuICAgICAgICBpZiAoaXNEZWYoa2V5KSlcbiAgICAgICAgICAgIG1hcFtrZXldID0gaTtcbiAgICB9XG4gICAgcmV0dXJuIG1hcDtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVBhdGNoRnVuY3Rpb24oYmFja2VuZCkge1xuICAgIHZhciBpLCBqO1xuICAgIHZhciBjYnMgPSB7fTtcbiAgICB2YXIgbW9kdWxlcyA9IGJhY2tlbmQubW9kdWxlcywgbm9kZU9wcyA9IGJhY2tlbmQubm9kZU9wcztcbiAgICBmb3IgKGkgPSAwOyBpIDwgaG9va3MubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgY2JzW2hvb2tzW2ldXSA9IFtdO1xuICAgICAgICBmb3IgKGogPSAwOyBqIDwgbW9kdWxlcy5sZW5ndGg7ICsraikge1xuICAgICAgICAgICAgaWYgKGlzRGVmKG1vZHVsZXNbal1baG9va3NbaV1dKSkge1xuICAgICAgICAgICAgICAgIGNic1tob29rc1tpXV0ucHVzaChtb2R1bGVzW2pdW2hvb2tzW2ldXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZW1wdHlOb2RlQXQoZWxtKSB7XG4gICAgICAgIHJldHVybiBuZXcgVk5vZGUobm9kZU9wcy50YWdOYW1lKGVsbSkudG9Mb3dlckNhc2UoKSwge30sIFtdLCB1bmRlZmluZWQsIGVsbSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZVJtQ2IoY2hpbGRFbG0sIGxpc3RlbmVycykge1xuICAgICAgICBmdW5jdGlvbiByZW1vdmUoKSB7XG4gICAgICAgICAgICBpZiAoLS1yZW1vdmUubGlzdGVuZXJzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlTm9kZShjaGlsZEVsbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmVtb3ZlLmxpc3RlbmVycyA9IGxpc3RlbmVycztcbiAgICAgICAgcmV0dXJuIHJlbW92ZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVtb3ZlTm9kZShlbCkge1xuICAgICAgICB2YXIgcGFyZW50ID0gbm9kZU9wcy5wYXJlbnROb2RlKGVsKTtcbiAgICAgICAgLy8gZWxlbWVudCBtYXkgaGF2ZSBhbHJlYWR5IGJlZW4gcmVtb3ZlZCBkdWUgdG8gdi1odG1sIC8gdi10ZXh0XG4gICAgICAgIGlmIChpc0RlZihwYXJlbnQpKSB7XG4gICAgICAgICAgICBub2RlT3BzLnJlbW92ZUNoaWxkKHBhcmVudCwgZWwpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGlzVW5rbm93bkVsZW1lbnQodm5vZGUsIGluVlByZSkge1xuICAgICAgICByZXR1cm4gKCFpblZQcmUgJiZcbiAgICAgICAgICAgICF2bm9kZS5ucyAmJlxuICAgICAgICAgICAgIShjb25maWcuaWdub3JlZEVsZW1lbnRzLmxlbmd0aCAmJlxuICAgICAgICAgICAgICAgIGNvbmZpZy5pZ25vcmVkRWxlbWVudHMuc29tZShmdW5jdGlvbiAoaWdub3JlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpc1JlZ0V4cChpZ25vcmUpXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGlnbm9yZS50ZXN0KHZub2RlLnRhZylcbiAgICAgICAgICAgICAgICAgICAgICAgIDogaWdub3JlID09PSB2bm9kZS50YWc7XG4gICAgICAgICAgICAgICAgfSkpICYmXG4gICAgICAgICAgICBjb25maWcuaXNVbmtub3duRWxlbWVudCh2bm9kZS50YWcpKTtcbiAgICB9XG4gICAgdmFyIGNyZWF0aW5nRWxtSW5WUHJlID0gMDtcbiAgICBmdW5jdGlvbiBjcmVhdGVFbG0odm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgcGFyZW50RWxtLCByZWZFbG0sIG5lc3RlZCwgb3duZXJBcnJheSwgaW5kZXgpIHtcbiAgICAgICAgaWYgKGlzRGVmKHZub2RlLmVsbSkgJiYgaXNEZWYob3duZXJBcnJheSkpIHtcbiAgICAgICAgICAgIC8vIFRoaXMgdm5vZGUgd2FzIHVzZWQgaW4gYSBwcmV2aW91cyByZW5kZXIhXG4gICAgICAgICAgICAvLyBub3cgaXQncyB1c2VkIGFzIGEgbmV3IG5vZGUsIG92ZXJ3cml0aW5nIGl0cyBlbG0gd291bGQgY2F1c2VcbiAgICAgICAgICAgIC8vIHBvdGVudGlhbCBwYXRjaCBlcnJvcnMgZG93biB0aGUgcm9hZCB3aGVuIGl0J3MgdXNlZCBhcyBhbiBpbnNlcnRpb25cbiAgICAgICAgICAgIC8vIHJlZmVyZW5jZSBub2RlLiBJbnN0ZWFkLCB3ZSBjbG9uZSB0aGUgbm9kZSBvbi1kZW1hbmQgYmVmb3JlIGNyZWF0aW5nXG4gICAgICAgICAgICAvLyBhc3NvY2lhdGVkIERPTSBlbGVtZW50IGZvciBpdC5cbiAgICAgICAgICAgIHZub2RlID0gb3duZXJBcnJheVtpbmRleF0gPSBjbG9uZVZOb2RlKHZub2RlKTtcbiAgICAgICAgfVxuICAgICAgICB2bm9kZS5pc1Jvb3RJbnNlcnQgPSAhbmVzdGVkOyAvLyBmb3IgdHJhbnNpdGlvbiBlbnRlciBjaGVja1xuICAgICAgICBpZiAoY3JlYXRlQ29tcG9uZW50KHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIHBhcmVudEVsbSwgcmVmRWxtKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciBkYXRhID0gdm5vZGUuZGF0YTtcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gdm5vZGUuY2hpbGRyZW47XG4gICAgICAgIHZhciB0YWcgPSB2bm9kZS50YWc7XG4gICAgICAgIGlmIChpc0RlZih0YWcpKSB7XG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhICYmIGRhdGEucHJlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNyZWF0aW5nRWxtSW5WUHJlKys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpc1Vua25vd25FbGVtZW50KHZub2RlLCBjcmVhdGluZ0VsbUluVlByZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgd2FybiQyKCdVbmtub3duIGN1c3RvbSBlbGVtZW50OiA8JyArXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJz4gLSBkaWQgeW91ICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ3JlZ2lzdGVyIHRoZSBjb21wb25lbnQgY29ycmVjdGx5PyBGb3IgcmVjdXJzaXZlIGNvbXBvbmVudHMsICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ21ha2Ugc3VyZSB0byBwcm92aWRlIHRoZSBcIm5hbWVcIiBvcHRpb24uJywgdm5vZGUuY29udGV4dCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdm5vZGUuZWxtID0gdm5vZGUubnNcbiAgICAgICAgICAgICAgICA/IG5vZGVPcHMuY3JlYXRlRWxlbWVudE5TKHZub2RlLm5zLCB0YWcpXG4gICAgICAgICAgICAgICAgOiBub2RlT3BzLmNyZWF0ZUVsZW1lbnQodGFnLCB2bm9kZSk7XG4gICAgICAgICAgICBzZXRTY29wZSh2bm9kZSk7XG4gICAgICAgICAgICBjcmVhdGVDaGlsZHJlbih2bm9kZSwgY2hpbGRyZW4sIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICAgICAgICBpZiAoaXNEZWYoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBpbnZva2VDcmVhdGVIb29rcyh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGluc2VydChwYXJlbnRFbG0sIHZub2RlLmVsbSwgcmVmRWxtKTtcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGRhdGEgJiYgZGF0YS5wcmUpIHtcbiAgICAgICAgICAgICAgICBjcmVhdGluZ0VsbUluVlByZS0tO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzVHJ1ZSh2bm9kZS5pc0NvbW1lbnQpKSB7XG4gICAgICAgICAgICB2bm9kZS5lbG0gPSBub2RlT3BzLmNyZWF0ZUNvbW1lbnQodm5vZGUudGV4dCk7XG4gICAgICAgICAgICBpbnNlcnQocGFyZW50RWxtLCB2bm9kZS5lbG0sIHJlZkVsbSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2bm9kZS5lbG0gPSBub2RlT3BzLmNyZWF0ZVRleHROb2RlKHZub2RlLnRleHQpO1xuICAgICAgICAgICAgaW5zZXJ0KHBhcmVudEVsbSwgdm5vZGUuZWxtLCByZWZFbG0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUNvbXBvbmVudCh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBwYXJlbnRFbG0sIHJlZkVsbSkge1xuICAgICAgICB2YXIgaSA9IHZub2RlLmRhdGE7XG4gICAgICAgIGlmIChpc0RlZihpKSkge1xuICAgICAgICAgICAgdmFyIGlzUmVhY3RpdmF0ZWQgPSBpc0RlZih2bm9kZS5jb21wb25lbnRJbnN0YW5jZSkgJiYgaS5rZWVwQWxpdmU7XG4gICAgICAgICAgICBpZiAoaXNEZWYoKGkgPSBpLmhvb2spKSAmJiBpc0RlZigoaSA9IGkuaW5pdCkpKSB7XG4gICAgICAgICAgICAgICAgaSh2bm9kZSwgZmFsc2UgLyogaHlkcmF0aW5nICovKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGFmdGVyIGNhbGxpbmcgdGhlIGluaXQgaG9vaywgaWYgdGhlIHZub2RlIGlzIGEgY2hpbGQgY29tcG9uZW50XG4gICAgICAgICAgICAvLyBpdCBzaG91bGQndmUgY3JlYXRlZCBhIGNoaWxkIGluc3RhbmNlIGFuZCBtb3VudGVkIGl0LiB0aGUgY2hpbGRcbiAgICAgICAgICAgIC8vIGNvbXBvbmVudCBhbHNvIGhhcyBzZXQgdGhlIHBsYWNlaG9sZGVyIHZub2RlJ3MgZWxtLlxuICAgICAgICAgICAgLy8gaW4gdGhhdCBjYXNlIHdlIGNhbiBqdXN0IHJldHVybiB0aGUgZWxlbWVudCBhbmQgYmUgZG9uZS5cbiAgICAgICAgICAgIGlmIChpc0RlZih2bm9kZS5jb21wb25lbnRJbnN0YW5jZSkpIHtcbiAgICAgICAgICAgICAgICBpbml0Q29tcG9uZW50KHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgICAgICAgICAgIGluc2VydChwYXJlbnRFbG0sIHZub2RlLmVsbSwgcmVmRWxtKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNUcnVlKGlzUmVhY3RpdmF0ZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlYWN0aXZhdGVDb21wb25lbnQodm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgcGFyZW50RWxtLCByZWZFbG0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBpbml0Q29tcG9uZW50KHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpIHtcbiAgICAgICAgaWYgKGlzRGVmKHZub2RlLmRhdGEucGVuZGluZ0luc2VydCkpIHtcbiAgICAgICAgICAgIGluc2VydGVkVm5vZGVRdWV1ZS5wdXNoLmFwcGx5KGluc2VydGVkVm5vZGVRdWV1ZSwgdm5vZGUuZGF0YS5wZW5kaW5nSW5zZXJ0KTtcbiAgICAgICAgICAgIHZub2RlLmRhdGEucGVuZGluZ0luc2VydCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdm5vZGUuZWxtID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2UuJGVsO1xuICAgICAgICBpZiAoaXNQYXRjaGFibGUodm5vZGUpKSB7XG4gICAgICAgICAgICBpbnZva2VDcmVhdGVIb29rcyh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICAgICAgICAgIHNldFNjb3BlKHZub2RlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIGVtcHR5IGNvbXBvbmVudCByb290LlxuICAgICAgICAgICAgLy8gc2tpcCBhbGwgZWxlbWVudC1yZWxhdGVkIG1vZHVsZXMgZXhjZXB0IGZvciByZWYgKCMzNDU1KVxuICAgICAgICAgICAgcmVnaXN0ZXJSZWYodm5vZGUpO1xuICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHRvIGludm9rZSB0aGUgaW5zZXJ0IGhvb2tcbiAgICAgICAgICAgIGluc2VydGVkVm5vZGVRdWV1ZS5wdXNoKHZub2RlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiByZWFjdGl2YXRlQ29tcG9uZW50KHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIHBhcmVudEVsbSwgcmVmRWxtKSB7XG4gICAgICAgIHZhciBpO1xuICAgICAgICAvLyBoYWNrIGZvciAjNDMzOTogYSByZWFjdGl2YXRlZCBjb21wb25lbnQgd2l0aCBpbm5lciB0cmFuc2l0aW9uXG4gICAgICAgIC8vIGRvZXMgbm90IHRyaWdnZXIgYmVjYXVzZSB0aGUgaW5uZXIgbm9kZSdzIGNyZWF0ZWQgaG9va3MgYXJlIG5vdCBjYWxsZWRcbiAgICAgICAgLy8gYWdhaW4uIEl0J3Mgbm90IGlkZWFsIHRvIGludm9sdmUgbW9kdWxlLXNwZWNpZmljIGxvZ2ljIGluIGhlcmUgYnV0XG4gICAgICAgIC8vIHRoZXJlIGRvZXNuJ3Qgc2VlbSB0byBiZSBhIGJldHRlciB3YXkgdG8gZG8gaXQuXG4gICAgICAgIHZhciBpbm5lck5vZGUgPSB2bm9kZTtcbiAgICAgICAgd2hpbGUgKGlubmVyTm9kZS5jb21wb25lbnRJbnN0YW5jZSkge1xuICAgICAgICAgICAgaW5uZXJOb2RlID0gaW5uZXJOb2RlLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZTtcbiAgICAgICAgICAgIGlmIChpc0RlZigoaSA9IGlubmVyTm9kZS5kYXRhKSkgJiYgaXNEZWYoKGkgPSBpLnRyYW5zaXRpb24pKSkge1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjYnMuYWN0aXZhdGUubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgY2JzLmFjdGl2YXRlW2ldKGVtcHR5Tm9kZSwgaW5uZXJOb2RlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaW5zZXJ0ZWRWbm9kZVF1ZXVlLnB1c2goaW5uZXJOb2RlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyB1bmxpa2UgYSBuZXdseSBjcmVhdGVkIGNvbXBvbmVudCxcbiAgICAgICAgLy8gYSByZWFjdGl2YXRlZCBrZWVwLWFsaXZlIGNvbXBvbmVudCBkb2Vzbid0IGluc2VydCBpdHNlbGZcbiAgICAgICAgaW5zZXJ0KHBhcmVudEVsbSwgdm5vZGUuZWxtLCByZWZFbG0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpbnNlcnQocGFyZW50LCBlbG0sIHJlZikge1xuICAgICAgICBpZiAoaXNEZWYocGFyZW50KSkge1xuICAgICAgICAgICAgaWYgKGlzRGVmKHJlZikpIHtcbiAgICAgICAgICAgICAgICBpZiAobm9kZU9wcy5wYXJlbnROb2RlKHJlZikgPT09IHBhcmVudCkge1xuICAgICAgICAgICAgICAgICAgICBub2RlT3BzLmluc2VydEJlZm9yZShwYXJlbnQsIGVsbSwgcmVmKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBub2RlT3BzLmFwcGVuZENoaWxkKHBhcmVudCwgZWxtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVDaGlsZHJlbih2bm9kZSwgY2hpbGRyZW4sIGluc2VydGVkVm5vZGVRdWV1ZSkge1xuICAgICAgICBpZiAoaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgY2hlY2tEdXBsaWNhdGVLZXlzKGNoaWxkcmVuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAodmFyIGlfMSA9IDA7IGlfMSA8IGNoaWxkcmVuLmxlbmd0aDsgKytpXzEpIHtcbiAgICAgICAgICAgICAgICBjcmVhdGVFbG0oY2hpbGRyZW5baV8xXSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCB2bm9kZS5lbG0sIG51bGwsIHRydWUsIGNoaWxkcmVuLCBpXzEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzUHJpbWl0aXZlKHZub2RlLnRleHQpKSB7XG4gICAgICAgICAgICBub2RlT3BzLmFwcGVuZENoaWxkKHZub2RlLmVsbSwgbm9kZU9wcy5jcmVhdGVUZXh0Tm9kZShTdHJpbmcodm5vZGUudGV4dCkpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBpc1BhdGNoYWJsZSh2bm9kZSkge1xuICAgICAgICB3aGlsZSAodm5vZGUuY29tcG9uZW50SW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHZub2RlID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2UuX3Zub2RlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc0RlZih2bm9kZS50YWcpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpbnZva2VDcmVhdGVIb29rcyh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKSB7XG4gICAgICAgIGZvciAodmFyIGlfMiA9IDA7IGlfMiA8IGNicy5jcmVhdGUubGVuZ3RoOyArK2lfMikge1xuICAgICAgICAgICAgY2JzLmNyZWF0ZVtpXzJdKGVtcHR5Tm9kZSwgdm5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGkgPSB2bm9kZS5kYXRhLmhvb2s7IC8vIFJldXNlIHZhcmlhYmxlXG4gICAgICAgIGlmIChpc0RlZihpKSkge1xuICAgICAgICAgICAgaWYgKGlzRGVmKGkuY3JlYXRlKSlcbiAgICAgICAgICAgICAgICBpLmNyZWF0ZShlbXB0eU5vZGUsIHZub2RlKTtcbiAgICAgICAgICAgIGlmIChpc0RlZihpLmluc2VydCkpXG4gICAgICAgICAgICAgICAgaW5zZXJ0ZWRWbm9kZVF1ZXVlLnB1c2godm5vZGUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIHNldCBzY29wZSBpZCBhdHRyaWJ1dGUgZm9yIHNjb3BlZCBDU1MuXG4gICAgLy8gdGhpcyBpcyBpbXBsZW1lbnRlZCBhcyBhIHNwZWNpYWwgY2FzZSB0byBhdm9pZCB0aGUgb3ZlcmhlYWRcbiAgICAvLyBvZiBnb2luZyB0aHJvdWdoIHRoZSBub3JtYWwgYXR0cmlidXRlIHBhdGNoaW5nIHByb2Nlc3MuXG4gICAgZnVuY3Rpb24gc2V0U2NvcGUodm5vZGUpIHtcbiAgICAgICAgdmFyIGk7XG4gICAgICAgIGlmIChpc0RlZigoaSA9IHZub2RlLmZuU2NvcGVJZCkpKSB7XG4gICAgICAgICAgICBub2RlT3BzLnNldFN0eWxlU2NvcGUodm5vZGUuZWxtLCBpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciBhbmNlc3RvciA9IHZub2RlO1xuICAgICAgICAgICAgd2hpbGUgKGFuY2VzdG9yKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzRGVmKChpID0gYW5jZXN0b3IuY29udGV4dCkpICYmIGlzRGVmKChpID0gaS4kb3B0aW9ucy5fc2NvcGVJZCkpKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGVPcHMuc2V0U3R5bGVTY29wZSh2bm9kZS5lbG0sIGkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhbmNlc3RvciA9IGFuY2VzdG9yLnBhcmVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBmb3Igc2xvdCBjb250ZW50IHRoZXkgc2hvdWxkIGFsc28gZ2V0IHRoZSBzY29wZUlkIGZyb20gdGhlIGhvc3QgaW5zdGFuY2UuXG4gICAgICAgIGlmIChpc0RlZigoaSA9IGFjdGl2ZUluc3RhbmNlKSkgJiZcbiAgICAgICAgICAgIGkgIT09IHZub2RlLmNvbnRleHQgJiZcbiAgICAgICAgICAgIGkgIT09IHZub2RlLmZuQ29udGV4dCAmJlxuICAgICAgICAgICAgaXNEZWYoKGkgPSBpLiRvcHRpb25zLl9zY29wZUlkKSkpIHtcbiAgICAgICAgICAgIG5vZGVPcHMuc2V0U3R5bGVTY29wZSh2bm9kZS5lbG0sIGkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFkZFZub2RlcyhwYXJlbnRFbG0sIHJlZkVsbSwgdm5vZGVzLCBzdGFydElkeCwgZW5kSWR4LCBpbnNlcnRlZFZub2RlUXVldWUpIHtcbiAgICAgICAgZm9yICg7IHN0YXJ0SWR4IDw9IGVuZElkeDsgKytzdGFydElkeCkge1xuICAgICAgICAgICAgY3JlYXRlRWxtKHZub2Rlc1tzdGFydElkeF0sIGluc2VydGVkVm5vZGVRdWV1ZSwgcGFyZW50RWxtLCByZWZFbG0sIGZhbHNlLCB2bm9kZXMsIHN0YXJ0SWR4KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBpbnZva2VEZXN0cm95SG9vayh2bm9kZSkge1xuICAgICAgICB2YXIgaSwgajtcbiAgICAgICAgdmFyIGRhdGEgPSB2bm9kZS5kYXRhO1xuICAgICAgICBpZiAoaXNEZWYoZGF0YSkpIHtcbiAgICAgICAgICAgIGlmIChpc0RlZigoaSA9IGRhdGEuaG9vaykpICYmIGlzRGVmKChpID0gaS5kZXN0cm95KSkpXG4gICAgICAgICAgICAgICAgaSh2bm9kZSk7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY2JzLmRlc3Ryb3kubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgY2JzLmRlc3Ryb3lbaV0odm5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0RlZigoaSA9IHZub2RlLmNoaWxkcmVuKSkpIHtcbiAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCB2bm9kZS5jaGlsZHJlbi5sZW5ndGg7ICsraikge1xuICAgICAgICAgICAgICAgIGludm9rZURlc3Ryb3lIb29rKHZub2RlLmNoaWxkcmVuW2pdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiByZW1vdmVWbm9kZXModm5vZGVzLCBzdGFydElkeCwgZW5kSWR4KSB7XG4gICAgICAgIGZvciAoOyBzdGFydElkeCA8PSBlbmRJZHg7ICsrc3RhcnRJZHgpIHtcbiAgICAgICAgICAgIHZhciBjaCA9IHZub2Rlc1tzdGFydElkeF07XG4gICAgICAgICAgICBpZiAoaXNEZWYoY2gpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzRGVmKGNoLnRhZykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQW5kSW52b2tlUmVtb3ZlSG9vayhjaCk7XG4gICAgICAgICAgICAgICAgICAgIGludm9rZURlc3Ryb3lIb29rKGNoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRleHQgbm9kZVxuICAgICAgICAgICAgICAgICAgICByZW1vdmVOb2RlKGNoLmVsbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlbW92ZUFuZEludm9rZVJlbW92ZUhvb2sodm5vZGUsIHJtKSB7XG4gICAgICAgIGlmIChpc0RlZihybSkgfHwgaXNEZWYodm5vZGUuZGF0YSkpIHtcbiAgICAgICAgICAgIHZhciBpXzM7XG4gICAgICAgICAgICB2YXIgbGlzdGVuZXJzID0gY2JzLnJlbW92ZS5sZW5ndGggKyAxO1xuICAgICAgICAgICAgaWYgKGlzRGVmKHJtKSkge1xuICAgICAgICAgICAgICAgIC8vIHdlIGhhdmUgYSByZWN1cnNpdmVseSBwYXNzZWQgZG93biBybSBjYWxsYmFja1xuICAgICAgICAgICAgICAgIC8vIGluY3JlYXNlIHRoZSBsaXN0ZW5lcnMgY291bnRcbiAgICAgICAgICAgICAgICBybS5saXN0ZW5lcnMgKz0gbGlzdGVuZXJzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gZGlyZWN0bHkgcmVtb3ZpbmdcbiAgICAgICAgICAgICAgICBybSA9IGNyZWF0ZVJtQ2Iodm5vZGUuZWxtLCBsaXN0ZW5lcnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gcmVjdXJzaXZlbHkgaW52b2tlIGhvb2tzIG9uIGNoaWxkIGNvbXBvbmVudCByb290IG5vZGVcbiAgICAgICAgICAgIGlmIChpc0RlZigoaV8zID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2UpKSAmJlxuICAgICAgICAgICAgICAgIGlzRGVmKChpXzMgPSBpXzMuX3Zub2RlKSkgJiZcbiAgICAgICAgICAgICAgICBpc0RlZihpXzMuZGF0YSkpIHtcbiAgICAgICAgICAgICAgICByZW1vdmVBbmRJbnZva2VSZW1vdmVIb29rKGlfMywgcm0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChpXzMgPSAwOyBpXzMgPCBjYnMucmVtb3ZlLmxlbmd0aDsgKytpXzMpIHtcbiAgICAgICAgICAgICAgICBjYnMucmVtb3ZlW2lfM10odm5vZGUsIHJtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc0RlZigoaV8zID0gdm5vZGUuZGF0YS5ob29rKSkgJiYgaXNEZWYoKGlfMyA9IGlfMy5yZW1vdmUpKSkge1xuICAgICAgICAgICAgICAgIGlfMyh2bm9kZSwgcm0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcm0oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlbW92ZU5vZGUodm5vZGUuZWxtKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiB1cGRhdGVDaGlsZHJlbihwYXJlbnRFbG0sIG9sZENoLCBuZXdDaCwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCByZW1vdmVPbmx5KSB7XG4gICAgICAgIHZhciBvbGRTdGFydElkeCA9IDA7XG4gICAgICAgIHZhciBuZXdTdGFydElkeCA9IDA7XG4gICAgICAgIHZhciBvbGRFbmRJZHggPSBvbGRDaC5sZW5ndGggLSAxO1xuICAgICAgICB2YXIgb2xkU3RhcnRWbm9kZSA9IG9sZENoWzBdO1xuICAgICAgICB2YXIgb2xkRW5kVm5vZGUgPSBvbGRDaFtvbGRFbmRJZHhdO1xuICAgICAgICB2YXIgbmV3RW5kSWR4ID0gbmV3Q2gubGVuZ3RoIC0gMTtcbiAgICAgICAgdmFyIG5ld1N0YXJ0Vm5vZGUgPSBuZXdDaFswXTtcbiAgICAgICAgdmFyIG5ld0VuZFZub2RlID0gbmV3Q2hbbmV3RW5kSWR4XTtcbiAgICAgICAgdmFyIG9sZEtleVRvSWR4LCBpZHhJbk9sZCwgdm5vZGVUb01vdmUsIHJlZkVsbTtcbiAgICAgICAgLy8gcmVtb3ZlT25seSBpcyBhIHNwZWNpYWwgZmxhZyB1c2VkIG9ubHkgYnkgPHRyYW5zaXRpb24tZ3JvdXA+XG4gICAgICAgIC8vIHRvIGVuc3VyZSByZW1vdmVkIGVsZW1lbnRzIHN0YXkgaW4gY29ycmVjdCByZWxhdGl2ZSBwb3NpdGlvbnNcbiAgICAgICAgLy8gZHVyaW5nIGxlYXZpbmcgdHJhbnNpdGlvbnNcbiAgICAgICAgdmFyIGNhbk1vdmUgPSAhcmVtb3ZlT25seTtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgIGNoZWNrRHVwbGljYXRlS2V5cyhuZXdDaCk7XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKG9sZFN0YXJ0SWR4IDw9IG9sZEVuZElkeCAmJiBuZXdTdGFydElkeCA8PSBuZXdFbmRJZHgpIHtcbiAgICAgICAgICAgIGlmIChpc1VuZGVmKG9sZFN0YXJ0Vm5vZGUpKSB7XG4gICAgICAgICAgICAgICAgb2xkU3RhcnRWbm9kZSA9IG9sZENoWysrb2xkU3RhcnRJZHhdOyAvLyBWbm9kZSBoYXMgYmVlbiBtb3ZlZCBsZWZ0XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChpc1VuZGVmKG9sZEVuZFZub2RlKSkge1xuICAgICAgICAgICAgICAgIG9sZEVuZFZub2RlID0gb2xkQ2hbLS1vbGRFbmRJZHhdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoc2FtZVZub2RlKG9sZFN0YXJ0Vm5vZGUsIG5ld1N0YXJ0Vm5vZGUpKSB7XG4gICAgICAgICAgICAgICAgcGF0Y2hWbm9kZShvbGRTdGFydFZub2RlLCBuZXdTdGFydFZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIG5ld0NoLCBuZXdTdGFydElkeCk7XG4gICAgICAgICAgICAgICAgb2xkU3RhcnRWbm9kZSA9IG9sZENoWysrb2xkU3RhcnRJZHhdO1xuICAgICAgICAgICAgICAgIG5ld1N0YXJ0Vm5vZGUgPSBuZXdDaFsrK25ld1N0YXJ0SWR4XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHNhbWVWbm9kZShvbGRFbmRWbm9kZSwgbmV3RW5kVm5vZGUpKSB7XG4gICAgICAgICAgICAgICAgcGF0Y2hWbm9kZShvbGRFbmRWbm9kZSwgbmV3RW5kVm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgbmV3Q2gsIG5ld0VuZElkeCk7XG4gICAgICAgICAgICAgICAgb2xkRW5kVm5vZGUgPSBvbGRDaFstLW9sZEVuZElkeF07XG4gICAgICAgICAgICAgICAgbmV3RW5kVm5vZGUgPSBuZXdDaFstLW5ld0VuZElkeF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChzYW1lVm5vZGUob2xkU3RhcnRWbm9kZSwgbmV3RW5kVm5vZGUpKSB7XG4gICAgICAgICAgICAgICAgLy8gVm5vZGUgbW92ZWQgcmlnaHRcbiAgICAgICAgICAgICAgICBwYXRjaFZub2RlKG9sZFN0YXJ0Vm5vZGUsIG5ld0VuZFZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIG5ld0NoLCBuZXdFbmRJZHgpO1xuICAgICAgICAgICAgICAgIGNhbk1vdmUgJiZcbiAgICAgICAgICAgICAgICAgICAgbm9kZU9wcy5pbnNlcnRCZWZvcmUocGFyZW50RWxtLCBvbGRTdGFydFZub2RlLmVsbSwgbm9kZU9wcy5uZXh0U2libGluZyhvbGRFbmRWbm9kZS5lbG0pKTtcbiAgICAgICAgICAgICAgICBvbGRTdGFydFZub2RlID0gb2xkQ2hbKytvbGRTdGFydElkeF07XG4gICAgICAgICAgICAgICAgbmV3RW5kVm5vZGUgPSBuZXdDaFstLW5ld0VuZElkeF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChzYW1lVm5vZGUob2xkRW5kVm5vZGUsIG5ld1N0YXJ0Vm5vZGUpKSB7XG4gICAgICAgICAgICAgICAgLy8gVm5vZGUgbW92ZWQgbGVmdFxuICAgICAgICAgICAgICAgIHBhdGNoVm5vZGUob2xkRW5kVm5vZGUsIG5ld1N0YXJ0Vm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgbmV3Q2gsIG5ld1N0YXJ0SWR4KTtcbiAgICAgICAgICAgICAgICBjYW5Nb3ZlICYmXG4gICAgICAgICAgICAgICAgICAgIG5vZGVPcHMuaW5zZXJ0QmVmb3JlKHBhcmVudEVsbSwgb2xkRW5kVm5vZGUuZWxtLCBvbGRTdGFydFZub2RlLmVsbSk7XG4gICAgICAgICAgICAgICAgb2xkRW5kVm5vZGUgPSBvbGRDaFstLW9sZEVuZElkeF07XG4gICAgICAgICAgICAgICAgbmV3U3RhcnRWbm9kZSA9IG5ld0NoWysrbmV3U3RhcnRJZHhdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzVW5kZWYob2xkS2V5VG9JZHgpKVxuICAgICAgICAgICAgICAgICAgICBvbGRLZXlUb0lkeCA9IGNyZWF0ZUtleVRvT2xkSWR4KG9sZENoLCBvbGRTdGFydElkeCwgb2xkRW5kSWR4KTtcbiAgICAgICAgICAgICAgICBpZHhJbk9sZCA9IGlzRGVmKG5ld1N0YXJ0Vm5vZGUua2V5KVxuICAgICAgICAgICAgICAgICAgICA/IG9sZEtleVRvSWR4W25ld1N0YXJ0Vm5vZGUua2V5XVxuICAgICAgICAgICAgICAgICAgICA6IGZpbmRJZHhJbk9sZChuZXdTdGFydFZub2RlLCBvbGRDaCwgb2xkU3RhcnRJZHgsIG9sZEVuZElkeCk7XG4gICAgICAgICAgICAgICAgaWYgKGlzVW5kZWYoaWR4SW5PbGQpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIE5ldyBlbGVtZW50XG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZUVsbShuZXdTdGFydFZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIHBhcmVudEVsbSwgb2xkU3RhcnRWbm9kZS5lbG0sIGZhbHNlLCBuZXdDaCwgbmV3U3RhcnRJZHgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdm5vZGVUb01vdmUgPSBvbGRDaFtpZHhJbk9sZF07XG4gICAgICAgICAgICAgICAgICAgIGlmIChzYW1lVm5vZGUodm5vZGVUb01vdmUsIG5ld1N0YXJ0Vm5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRjaFZub2RlKHZub2RlVG9Nb3ZlLCBuZXdTdGFydFZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIG5ld0NoLCBuZXdTdGFydElkeCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBvbGRDaFtpZHhJbk9sZF0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYW5Nb3ZlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZU9wcy5pbnNlcnRCZWZvcmUocGFyZW50RWxtLCB2bm9kZVRvTW92ZS5lbG0sIG9sZFN0YXJ0Vm5vZGUuZWxtKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNhbWUga2V5IGJ1dCBkaWZmZXJlbnQgZWxlbWVudC4gdHJlYXQgYXMgbmV3IGVsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZUVsbShuZXdTdGFydFZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIHBhcmVudEVsbSwgb2xkU3RhcnRWbm9kZS5lbG0sIGZhbHNlLCBuZXdDaCwgbmV3U3RhcnRJZHgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG5ld1N0YXJ0Vm5vZGUgPSBuZXdDaFsrK25ld1N0YXJ0SWR4XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAob2xkU3RhcnRJZHggPiBvbGRFbmRJZHgpIHtcbiAgICAgICAgICAgIHJlZkVsbSA9IGlzVW5kZWYobmV3Q2hbbmV3RW5kSWR4ICsgMV0pID8gbnVsbCA6IG5ld0NoW25ld0VuZElkeCArIDFdLmVsbTtcbiAgICAgICAgICAgIGFkZFZub2RlcyhwYXJlbnRFbG0sIHJlZkVsbSwgbmV3Q2gsIG5ld1N0YXJ0SWR4LCBuZXdFbmRJZHgsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobmV3U3RhcnRJZHggPiBuZXdFbmRJZHgpIHtcbiAgICAgICAgICAgIHJlbW92ZVZub2RlcyhvbGRDaCwgb2xkU3RhcnRJZHgsIG9sZEVuZElkeCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gY2hlY2tEdXBsaWNhdGVLZXlzKGNoaWxkcmVuKSB7XG4gICAgICAgIHZhciBzZWVuS2V5cyA9IHt9O1xuICAgICAgICBmb3IgKHZhciBpXzQgPSAwOyBpXzQgPCBjaGlsZHJlbi5sZW5ndGg7IGlfNCsrKSB7XG4gICAgICAgICAgICB2YXIgdm5vZGUgPSBjaGlsZHJlbltpXzRdO1xuICAgICAgICAgICAgdmFyIGtleSA9IHZub2RlLmtleTtcbiAgICAgICAgICAgIGlmIChpc0RlZihrZXkpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNlZW5LZXlzW2tleV0pIHtcbiAgICAgICAgICAgICAgICAgICAgd2FybiQyKFwiRHVwbGljYXRlIGtleXMgZGV0ZWN0ZWQ6ICdcIi5jb25jYXQoa2V5LCBcIicuIFRoaXMgbWF5IGNhdXNlIGFuIHVwZGF0ZSBlcnJvci5cIiksIHZub2RlLmNvbnRleHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc2VlbktleXNba2V5XSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZpbmRJZHhJbk9sZChub2RlLCBvbGRDaCwgc3RhcnQsIGVuZCkge1xuICAgICAgICBmb3IgKHZhciBpXzUgPSBzdGFydDsgaV81IDwgZW5kOyBpXzUrKykge1xuICAgICAgICAgICAgdmFyIGMgPSBvbGRDaFtpXzVdO1xuICAgICAgICAgICAgaWYgKGlzRGVmKGMpICYmIHNhbWVWbm9kZShub2RlLCBjKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gaV81O1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBhdGNoVm5vZGUob2xkVm5vZGUsIHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIG93bmVyQXJyYXksIGluZGV4LCByZW1vdmVPbmx5KSB7XG4gICAgICAgIGlmIChvbGRWbm9kZSA9PT0gdm5vZGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNEZWYodm5vZGUuZWxtKSAmJiBpc0RlZihvd25lckFycmF5KSkge1xuICAgICAgICAgICAgLy8gY2xvbmUgcmV1c2VkIHZub2RlXG4gICAgICAgICAgICB2bm9kZSA9IG93bmVyQXJyYXlbaW5kZXhdID0gY2xvbmVWTm9kZSh2bm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGVsbSA9ICh2bm9kZS5lbG0gPSBvbGRWbm9kZS5lbG0pO1xuICAgICAgICBpZiAoaXNUcnVlKG9sZFZub2RlLmlzQXN5bmNQbGFjZWhvbGRlcikpIHtcbiAgICAgICAgICAgIGlmIChpc0RlZih2bm9kZS5hc3luY0ZhY3RvcnkucmVzb2x2ZWQpKSB7XG4gICAgICAgICAgICAgICAgaHlkcmF0ZShvbGRWbm9kZS5lbG0sIHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdm5vZGUuaXNBc3luY1BsYWNlaG9sZGVyID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyByZXVzZSBlbGVtZW50IGZvciBzdGF0aWMgdHJlZXMuXG4gICAgICAgIC8vIG5vdGUgd2Ugb25seSBkbyB0aGlzIGlmIHRoZSB2bm9kZSBpcyBjbG9uZWQgLVxuICAgICAgICAvLyBpZiB0aGUgbmV3IG5vZGUgaXMgbm90IGNsb25lZCBpdCBtZWFucyB0aGUgcmVuZGVyIGZ1bmN0aW9ucyBoYXZlIGJlZW5cbiAgICAgICAgLy8gcmVzZXQgYnkgdGhlIGhvdC1yZWxvYWQtYXBpIGFuZCB3ZSBuZWVkIHRvIGRvIGEgcHJvcGVyIHJlLXJlbmRlci5cbiAgICAgICAgaWYgKGlzVHJ1ZSh2bm9kZS5pc1N0YXRpYykgJiZcbiAgICAgICAgICAgIGlzVHJ1ZShvbGRWbm9kZS5pc1N0YXRpYykgJiZcbiAgICAgICAgICAgIHZub2RlLmtleSA9PT0gb2xkVm5vZGUua2V5ICYmXG4gICAgICAgICAgICAoaXNUcnVlKHZub2RlLmlzQ2xvbmVkKSB8fCBpc1RydWUodm5vZGUuaXNPbmNlKSkpIHtcbiAgICAgICAgICAgIHZub2RlLmNvbXBvbmVudEluc3RhbmNlID0gb2xkVm5vZGUuY29tcG9uZW50SW5zdGFuY2U7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGk7XG4gICAgICAgIHZhciBkYXRhID0gdm5vZGUuZGF0YTtcbiAgICAgICAgaWYgKGlzRGVmKGRhdGEpICYmIGlzRGVmKChpID0gZGF0YS5ob29rKSkgJiYgaXNEZWYoKGkgPSBpLnByZXBhdGNoKSkpIHtcbiAgICAgICAgICAgIGkob2xkVm5vZGUsIHZub2RlKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgb2xkQ2ggPSBvbGRWbm9kZS5jaGlsZHJlbjtcbiAgICAgICAgdmFyIGNoID0gdm5vZGUuY2hpbGRyZW47XG4gICAgICAgIGlmIChpc0RlZihkYXRhKSAmJiBpc1BhdGNoYWJsZSh2bm9kZSkpIHtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjYnMudXBkYXRlLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgIGNicy51cGRhdGVbaV0ob2xkVm5vZGUsIHZub2RlKTtcbiAgICAgICAgICAgIGlmIChpc0RlZigoaSA9IGRhdGEuaG9vaykpICYmIGlzRGVmKChpID0gaS51cGRhdGUpKSlcbiAgICAgICAgICAgICAgICBpKG9sZFZub2RlLCB2bm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzVW5kZWYodm5vZGUudGV4dCkpIHtcbiAgICAgICAgICAgIGlmIChpc0RlZihvbGRDaCkgJiYgaXNEZWYoY2gpKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9sZENoICE9PSBjaClcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlQ2hpbGRyZW4oZWxtLCBvbGRDaCwgY2gsIGluc2VydGVkVm5vZGVRdWV1ZSwgcmVtb3ZlT25seSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChpc0RlZihjaCkpIHtcbiAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBjaGVja0R1cGxpY2F0ZUtleXMoY2gpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaXNEZWYob2xkVm5vZGUudGV4dCkpXG4gICAgICAgICAgICAgICAgICAgIG5vZGVPcHMuc2V0VGV4dENvbnRlbnQoZWxtLCAnJyk7XG4gICAgICAgICAgICAgICAgYWRkVm5vZGVzKGVsbSwgbnVsbCwgY2gsIDAsIGNoLmxlbmd0aCAtIDEsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChpc0RlZihvbGRDaCkpIHtcbiAgICAgICAgICAgICAgICByZW1vdmVWbm9kZXMob2xkQ2gsIDAsIG9sZENoLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaXNEZWYob2xkVm5vZGUudGV4dCkpIHtcbiAgICAgICAgICAgICAgICBub2RlT3BzLnNldFRleHRDb250ZW50KGVsbSwgJycpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG9sZFZub2RlLnRleHQgIT09IHZub2RlLnRleHQpIHtcbiAgICAgICAgICAgIG5vZGVPcHMuc2V0VGV4dENvbnRlbnQoZWxtLCB2bm9kZS50ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNEZWYoZGF0YSkpIHtcbiAgICAgICAgICAgIGlmIChpc0RlZigoaSA9IGRhdGEuaG9vaykpICYmIGlzRGVmKChpID0gaS5wb3N0cGF0Y2gpKSlcbiAgICAgICAgICAgICAgICBpKG9sZFZub2RlLCB2bm9kZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gaW52b2tlSW5zZXJ0SG9vayh2bm9kZSwgcXVldWUsIGluaXRpYWwpIHtcbiAgICAgICAgLy8gZGVsYXkgaW5zZXJ0IGhvb2tzIGZvciBjb21wb25lbnQgcm9vdCBub2RlcywgaW52b2tlIHRoZW0gYWZ0ZXIgdGhlXG4gICAgICAgIC8vIGVsZW1lbnQgaXMgcmVhbGx5IGluc2VydGVkXG4gICAgICAgIGlmIChpc1RydWUoaW5pdGlhbCkgJiYgaXNEZWYodm5vZGUucGFyZW50KSkge1xuICAgICAgICAgICAgdm5vZGUucGFyZW50LmRhdGEucGVuZGluZ0luc2VydCA9IHF1ZXVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZm9yICh2YXIgaV82ID0gMDsgaV82IDwgcXVldWUubGVuZ3RoOyArK2lfNikge1xuICAgICAgICAgICAgICAgIHF1ZXVlW2lfNl0uZGF0YS5ob29rLmluc2VydChxdWV1ZVtpXzZdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICB2YXIgaHlkcmF0aW9uQmFpbGVkID0gZmFsc2U7XG4gICAgLy8gbGlzdCBvZiBtb2R1bGVzIHRoYXQgY2FuIHNraXAgY3JlYXRlIGhvb2sgZHVyaW5nIGh5ZHJhdGlvbiBiZWNhdXNlIHRoZXlcbiAgICAvLyBhcmUgYWxyZWFkeSByZW5kZXJlZCBvbiB0aGUgY2xpZW50IG9yIGhhcyBubyBuZWVkIGZvciBpbml0aWFsaXphdGlvblxuICAgIC8vIE5vdGU6IHN0eWxlIGlzIGV4Y2x1ZGVkIGJlY2F1c2UgaXQgcmVsaWVzIG9uIGluaXRpYWwgY2xvbmUgZm9yIGZ1dHVyZVxuICAgIC8vIGRlZXAgdXBkYXRlcyAoIzcwNjMpLlxuICAgIHZhciBpc1JlbmRlcmVkTW9kdWxlID0gbWFrZU1hcCgnYXR0cnMsY2xhc3Msc3RhdGljQ2xhc3Msc3RhdGljU3R5bGUsa2V5Jyk7XG4gICAgLy8gTm90ZTogdGhpcyBpcyBhIGJyb3dzZXItb25seSBmdW5jdGlvbiBzbyB3ZSBjYW4gYXNzdW1lIGVsbXMgYXJlIERPTSBub2Rlcy5cbiAgICBmdW5jdGlvbiBoeWRyYXRlKGVsbSwgdm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgaW5WUHJlKSB7XG4gICAgICAgIHZhciBpO1xuICAgICAgICB2YXIgdGFnID0gdm5vZGUudGFnLCBkYXRhID0gdm5vZGUuZGF0YSwgY2hpbGRyZW4gPSB2bm9kZS5jaGlsZHJlbjtcbiAgICAgICAgaW5WUHJlID0gaW5WUHJlIHx8IChkYXRhICYmIGRhdGEucHJlKTtcbiAgICAgICAgdm5vZGUuZWxtID0gZWxtO1xuICAgICAgICBpZiAoaXNUcnVlKHZub2RlLmlzQ29tbWVudCkgJiYgaXNEZWYodm5vZGUuYXN5bmNGYWN0b3J5KSkge1xuICAgICAgICAgICAgdm5vZGUuaXNBc3luY1BsYWNlaG9sZGVyID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIGFzc2VydCBub2RlIG1hdGNoXG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICBpZiAoIWFzc2VydE5vZGVNYXRjaChlbG0sIHZub2RlLCBpblZQcmUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpc0RlZihkYXRhKSkge1xuICAgICAgICAgICAgaWYgKGlzRGVmKChpID0gZGF0YS5ob29rKSkgJiYgaXNEZWYoKGkgPSBpLmluaXQpKSlcbiAgICAgICAgICAgICAgICBpKHZub2RlLCB0cnVlIC8qIGh5ZHJhdGluZyAqLyk7XG4gICAgICAgICAgICBpZiAoaXNEZWYoKGkgPSB2bm9kZS5jb21wb25lbnRJbnN0YW5jZSkpKSB7XG4gICAgICAgICAgICAgICAgLy8gY2hpbGQgY29tcG9uZW50LiBpdCBzaG91bGQgaGF2ZSBoeWRyYXRlZCBpdHMgb3duIHRyZWUuXG4gICAgICAgICAgICAgICAgaW5pdENvbXBvbmVudCh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNEZWYodGFnKSkge1xuICAgICAgICAgICAgaWYgKGlzRGVmKGNoaWxkcmVuKSkge1xuICAgICAgICAgICAgICAgIC8vIGVtcHR5IGVsZW1lbnQsIGFsbG93IGNsaWVudCB0byBwaWNrIHVwIGFuZCBwb3B1bGF0ZSBjaGlsZHJlblxuICAgICAgICAgICAgICAgIGlmICghZWxtLmhhc0NoaWxkTm9kZXMoKSkge1xuICAgICAgICAgICAgICAgICAgICBjcmVhdGVDaGlsZHJlbih2bm9kZSwgY2hpbGRyZW4sIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyB2LWh0bWwgYW5kIGRvbVByb3BzOiBpbm5lckhUTUxcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzRGVmKChpID0gZGF0YSkpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0RlZigoaSA9IGkuZG9tUHJvcHMpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgaXNEZWYoKGkgPSBpLmlubmVySFRNTCkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSAhPT0gZWxtLmlubmVySFRNTCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhaHlkcmF0aW9uQmFpbGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh5ZHJhdGlvbkJhaWxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignUGFyZW50OiAnLCBlbG0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ3NlcnZlciBpbm5lckhUTUw6ICcsIGkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ2NsaWVudCBpbm5lckhUTUw6ICcsIGVsbS5pbm5lckhUTUwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpdGVyYXRlIGFuZCBjb21wYXJlIGNoaWxkcmVuIGxpc3RzXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2hpbGRyZW5NYXRjaCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2hpbGROb2RlID0gZWxtLmZpcnN0Q2hpbGQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpXzcgPSAwOyBpXzcgPCBjaGlsZHJlbi5sZW5ndGg7IGlfNysrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjaGlsZE5vZGUgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWh5ZHJhdGUoY2hpbGROb2RlLCBjaGlsZHJlbltpXzddLCBpbnNlcnRlZFZub2RlUXVldWUsIGluVlByZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW5NYXRjaCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGROb2RlID0gY2hpbGROb2RlLm5leHRTaWJsaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgY2hpbGROb2RlIGlzIG5vdCBudWxsLCBpdCBtZWFucyB0aGUgYWN0dWFsIGNoaWxkTm9kZXMgbGlzdCBpc1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9uZ2VyIHRoYW4gdGhlIHZpcnR1YWwgY2hpbGRyZW4gbGlzdC5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2hpbGRyZW5NYXRjaCB8fCBjaGlsZE5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWh5ZHJhdGlvbkJhaWxlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoeWRyYXRpb25CYWlsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BhcmVudDogJywgZWxtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdNaXNtYXRjaGluZyBjaGlsZE5vZGVzIHZzLiBWTm9kZXM6ICcsIGVsbS5jaGlsZE5vZGVzLCBjaGlsZHJlbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc0RlZihkYXRhKSkge1xuICAgICAgICAgICAgICAgIHZhciBmdWxsSW52b2tlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1JlbmRlcmVkTW9kdWxlKGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxJbnZva2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaW52b2tlQ3JlYXRlSG9va3Modm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIWZ1bGxJbnZva2UgJiYgZGF0YVsnY2xhc3MnXSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBlbnN1cmUgY29sbGVjdGluZyBkZXBzIGZvciBkZWVwIGNsYXNzIGJpbmRpbmdzIGZvciBmdXR1cmUgdXBkYXRlc1xuICAgICAgICAgICAgICAgICAgICB0cmF2ZXJzZShkYXRhWydjbGFzcyddKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZWxtLmRhdGEgIT09IHZub2RlLnRleHQpIHtcbiAgICAgICAgICAgIGVsbS5kYXRhID0gdm5vZGUudGV4dDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYXNzZXJ0Tm9kZU1hdGNoKG5vZGUsIHZub2RlLCBpblZQcmUpIHtcbiAgICAgICAgaWYgKGlzRGVmKHZub2RlLnRhZykpIHtcbiAgICAgICAgICAgIHJldHVybiAodm5vZGUudGFnLmluZGV4T2YoJ3Z1ZS1jb21wb25lbnQnKSA9PT0gMCB8fFxuICAgICAgICAgICAgICAgICghaXNVbmtub3duRWxlbWVudCh2bm9kZSwgaW5WUHJlKSAmJlxuICAgICAgICAgICAgICAgICAgICB2bm9kZS50YWcudG9Mb3dlckNhc2UoKSA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAgIChub2RlLnRhZ05hbWUgJiYgbm9kZS50YWdOYW1lLnRvTG93ZXJDYXNlKCkpKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbm9kZS5ub2RlVHlwZSA9PT0gKHZub2RlLmlzQ29tbWVudCA/IDggOiAzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gcGF0Y2gob2xkVm5vZGUsIHZub2RlLCBoeWRyYXRpbmcsIHJlbW92ZU9ubHkpIHtcbiAgICAgICAgaWYgKGlzVW5kZWYodm5vZGUpKSB7XG4gICAgICAgICAgICBpZiAoaXNEZWYob2xkVm5vZGUpKVxuICAgICAgICAgICAgICAgIGludm9rZURlc3Ryb3lIb29rKG9sZFZub2RlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgaXNJbml0aWFsUGF0Y2ggPSBmYWxzZTtcbiAgICAgICAgdmFyIGluc2VydGVkVm5vZGVRdWV1ZSA9IFtdO1xuICAgICAgICBpZiAoaXNVbmRlZihvbGRWbm9kZSkpIHtcbiAgICAgICAgICAgIC8vIGVtcHR5IG1vdW50IChsaWtlbHkgYXMgY29tcG9uZW50KSwgY3JlYXRlIG5ldyByb290IGVsZW1lbnRcbiAgICAgICAgICAgIGlzSW5pdGlhbFBhdGNoID0gdHJ1ZTtcbiAgICAgICAgICAgIGNyZWF0ZUVsbSh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciBpc1JlYWxFbGVtZW50ID0gaXNEZWYob2xkVm5vZGUubm9kZVR5cGUpO1xuICAgICAgICAgICAgaWYgKCFpc1JlYWxFbGVtZW50ICYmIHNhbWVWbm9kZShvbGRWbm9kZSwgdm5vZGUpKSB7XG4gICAgICAgICAgICAgICAgLy8gcGF0Y2ggZXhpc3Rpbmcgcm9vdCBub2RlXG4gICAgICAgICAgICAgICAgcGF0Y2hWbm9kZShvbGRWbm9kZSwgdm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgbnVsbCwgbnVsbCwgcmVtb3ZlT25seSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNSZWFsRWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBtb3VudGluZyB0byBhIHJlYWwgZWxlbWVudFxuICAgICAgICAgICAgICAgICAgICAvLyBjaGVjayBpZiB0aGlzIGlzIHNlcnZlci1yZW5kZXJlZCBjb250ZW50IGFuZCBpZiB3ZSBjYW4gcGVyZm9ybVxuICAgICAgICAgICAgICAgICAgICAvLyBhIHN1Y2Nlc3NmdWwgaHlkcmF0aW9uLlxuICAgICAgICAgICAgICAgICAgICBpZiAob2xkVm5vZGUubm9kZVR5cGUgPT09IDEgJiYgb2xkVm5vZGUuaGFzQXR0cmlidXRlKFNTUl9BVFRSKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgb2xkVm5vZGUucmVtb3ZlQXR0cmlidXRlKFNTUl9BVFRSKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGh5ZHJhdGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzVHJ1ZShoeWRyYXRpbmcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaHlkcmF0ZShvbGRWbm9kZSwgdm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnZva2VJbnNlcnRIb29rKHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvbGRWbm9kZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuJDIoJ1RoZSBjbGllbnQtc2lkZSByZW5kZXJlZCB2aXJ0dWFsIERPTSB0cmVlIGlzIG5vdCBtYXRjaGluZyAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NlcnZlci1yZW5kZXJlZCBjb250ZW50LiBUaGlzIGlzIGxpa2VseSBjYXVzZWQgYnkgaW5jb3JyZWN0ICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnSFRNTCBtYXJrdXAsIGZvciBleGFtcGxlIG5lc3RpbmcgYmxvY2stbGV2ZWwgZWxlbWVudHMgaW5zaWRlICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPHA+LCBvciBtaXNzaW5nIDx0Ym9keT4uIEJhaWxpbmcgaHlkcmF0aW9uIGFuZCBwZXJmb3JtaW5nICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZnVsbCBjbGllbnQtc2lkZSByZW5kZXIuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gZWl0aGVyIG5vdCBzZXJ2ZXItcmVuZGVyZWQsIG9yIGh5ZHJhdGlvbiBmYWlsZWQuXG4gICAgICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBhbiBlbXB0eSBub2RlIGFuZCByZXBsYWNlIGl0XG4gICAgICAgICAgICAgICAgICAgIG9sZFZub2RlID0gZW1wdHlOb2RlQXQob2xkVm5vZGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyByZXBsYWNpbmcgZXhpc3RpbmcgZWxlbWVudFxuICAgICAgICAgICAgICAgIHZhciBvbGRFbG0gPSBvbGRWbm9kZS5lbG07XG4gICAgICAgICAgICAgICAgdmFyIHBhcmVudEVsbSA9IG5vZGVPcHMucGFyZW50Tm9kZShvbGRFbG0pO1xuICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBuZXcgbm9kZVxuICAgICAgICAgICAgICAgIGNyZWF0ZUVsbSh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBcbiAgICAgICAgICAgICAgICAvLyBleHRyZW1lbHkgcmFyZSBlZGdlIGNhc2U6IGRvIG5vdCBpbnNlcnQgaWYgb2xkIGVsZW1lbnQgaXMgaW4gYVxuICAgICAgICAgICAgICAgIC8vIGxlYXZpbmcgdHJhbnNpdGlvbi4gT25seSBoYXBwZW5zIHdoZW4gY29tYmluaW5nIHRyYW5zaXRpb24gK1xuICAgICAgICAgICAgICAgIC8vIGtlZXAtYWxpdmUgKyBIT0NzLiAoIzQ1OTApXG4gICAgICAgICAgICAgICAgb2xkRWxtLl9sZWF2ZUNiID8gbnVsbCA6IHBhcmVudEVsbSwgbm9kZU9wcy5uZXh0U2libGluZyhvbGRFbG0pKTtcbiAgICAgICAgICAgICAgICAvLyB1cGRhdGUgcGFyZW50IHBsYWNlaG9sZGVyIG5vZGUgZWxlbWVudCwgcmVjdXJzaXZlbHlcbiAgICAgICAgICAgICAgICBpZiAoaXNEZWYodm5vZGUucGFyZW50KSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYW5jZXN0b3IgPSB2bm9kZS5wYXJlbnQ7XG4gICAgICAgICAgICAgICAgICAgIHZhciBwYXRjaGFibGUgPSBpc1BhdGNoYWJsZSh2bm9kZSk7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChhbmNlc3Rvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaV84ID0gMDsgaV84IDwgY2JzLmRlc3Ryb3kubGVuZ3RoOyArK2lfOCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNicy5kZXN0cm95W2lfOF0oYW5jZXN0b3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYW5jZXN0b3IuZWxtID0gdm5vZGUuZWxtO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhdGNoYWJsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGlfOSA9IDA7IGlfOSA8IGNicy5jcmVhdGUubGVuZ3RoOyArK2lfOSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYnMuY3JlYXRlW2lfOV0oZW1wdHlOb2RlLCBhbmNlc3Rvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICM2NTEzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW52b2tlIGluc2VydCBob29rcyB0aGF0IG1heSBoYXZlIGJlZW4gbWVyZ2VkIGJ5IGNyZWF0ZSBob29rcy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlLmcuIGZvciBkaXJlY3RpdmVzIHRoYXQgdXNlcyB0aGUgXCJpbnNlcnRlZFwiIGhvb2suXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGluc2VydF8xID0gYW5jZXN0b3IuZGF0YS5ob29rLmluc2VydDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5zZXJ0XzEubWVyZ2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN0YXJ0IGF0IGluZGV4IDEgdG8gYXZvaWQgcmUtaW52b2tpbmcgY29tcG9uZW50IG1vdW50ZWQgaG9va1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpXzEwID0gMTsgaV8xMCA8IGluc2VydF8xLmZucy5sZW5ndGg7IGlfMTArKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0XzEuZm5zW2lfMTBdKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RlclJlZihhbmNlc3Rvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBhbmNlc3RvciA9IGFuY2VzdG9yLnBhcmVudDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBkZXN0cm95IG9sZCBub2RlXG4gICAgICAgICAgICAgICAgaWYgKGlzRGVmKHBhcmVudEVsbSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlVm5vZGVzKFtvbGRWbm9kZV0sIDAsIDApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChpc0RlZihvbGRWbm9kZS50YWcpKSB7XG4gICAgICAgICAgICAgICAgICAgIGludm9rZURlc3Ryb3lIb29rKG9sZFZub2RlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaW52b2tlSW5zZXJ0SG9vayh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBpc0luaXRpYWxQYXRjaCk7XG4gICAgICAgIHJldHVybiB2bm9kZS5lbG07XG4gICAgfTtcbn1cblxudmFyIGRpcmVjdGl2ZXMkMSA9IHtcbiAgICBjcmVhdGU6IHVwZGF0ZURpcmVjdGl2ZXMsXG4gICAgdXBkYXRlOiB1cGRhdGVEaXJlY3RpdmVzLFxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIHVuYmluZERpcmVjdGl2ZXModm5vZGUpIHtcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBlbXB0eU5vZGUgaXMgbm90IFZOb2RlV2l0aERhdGFcbiAgICAgICAgdXBkYXRlRGlyZWN0aXZlcyh2bm9kZSwgZW1wdHlOb2RlKTtcbiAgICB9XG59O1xuZnVuY3Rpb24gdXBkYXRlRGlyZWN0aXZlcyhvbGRWbm9kZSwgdm5vZGUpIHtcbiAgICBpZiAob2xkVm5vZGUuZGF0YS5kaXJlY3RpdmVzIHx8IHZub2RlLmRhdGEuZGlyZWN0aXZlcykge1xuICAgICAgICBfdXBkYXRlKG9sZFZub2RlLCB2bm9kZSk7XG4gICAgfVxufVxuZnVuY3Rpb24gX3VwZGF0ZShvbGRWbm9kZSwgdm5vZGUpIHtcbiAgICB2YXIgaXNDcmVhdGUgPSBvbGRWbm9kZSA9PT0gZW1wdHlOb2RlO1xuICAgIHZhciBpc0Rlc3Ryb3kgPSB2bm9kZSA9PT0gZW1wdHlOb2RlO1xuICAgIHZhciBvbGREaXJzID0gbm9ybWFsaXplRGlyZWN0aXZlcyhvbGRWbm9kZS5kYXRhLmRpcmVjdGl2ZXMsIG9sZFZub2RlLmNvbnRleHQpO1xuICAgIHZhciBuZXdEaXJzID0gbm9ybWFsaXplRGlyZWN0aXZlcyh2bm9kZS5kYXRhLmRpcmVjdGl2ZXMsIHZub2RlLmNvbnRleHQpO1xuICAgIHZhciBkaXJzV2l0aEluc2VydCA9IFtdO1xuICAgIHZhciBkaXJzV2l0aFBvc3RwYXRjaCA9IFtdO1xuICAgIHZhciBrZXksIG9sZERpciwgZGlyO1xuICAgIGZvciAoa2V5IGluIG5ld0RpcnMpIHtcbiAgICAgICAgb2xkRGlyID0gb2xkRGlyc1trZXldO1xuICAgICAgICBkaXIgPSBuZXdEaXJzW2tleV07XG4gICAgICAgIGlmICghb2xkRGlyKSB7XG4gICAgICAgICAgICAvLyBuZXcgZGlyZWN0aXZlLCBiaW5kXG4gICAgICAgICAgICBjYWxsSG9vayhkaXIsICdiaW5kJywgdm5vZGUsIG9sZFZub2RlKTtcbiAgICAgICAgICAgIGlmIChkaXIuZGVmICYmIGRpci5kZWYuaW5zZXJ0ZWQpIHtcbiAgICAgICAgICAgICAgICBkaXJzV2l0aEluc2VydC5wdXNoKGRpcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBleGlzdGluZyBkaXJlY3RpdmUsIHVwZGF0ZVxuICAgICAgICAgICAgZGlyLm9sZFZhbHVlID0gb2xkRGlyLnZhbHVlO1xuICAgICAgICAgICAgZGlyLm9sZEFyZyA9IG9sZERpci5hcmc7XG4gICAgICAgICAgICBjYWxsSG9vayhkaXIsICd1cGRhdGUnLCB2bm9kZSwgb2xkVm5vZGUpO1xuICAgICAgICAgICAgaWYgKGRpci5kZWYgJiYgZGlyLmRlZi5jb21wb25lbnRVcGRhdGVkKSB7XG4gICAgICAgICAgICAgICAgZGlyc1dpdGhQb3N0cGF0Y2gucHVzaChkaXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChkaXJzV2l0aEluc2VydC5sZW5ndGgpIHtcbiAgICAgICAgdmFyIGNhbGxJbnNlcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRpcnNXaXRoSW5zZXJ0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY2FsbEhvb2soZGlyc1dpdGhJbnNlcnRbaV0sICdpbnNlcnRlZCcsIHZub2RlLCBvbGRWbm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGlmIChpc0NyZWF0ZSkge1xuICAgICAgICAgICAgbWVyZ2VWTm9kZUhvb2sodm5vZGUsICdpbnNlcnQnLCBjYWxsSW5zZXJ0KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNhbGxJbnNlcnQoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoZGlyc1dpdGhQb3N0cGF0Y2gubGVuZ3RoKSB7XG4gICAgICAgIG1lcmdlVk5vZGVIb29rKHZub2RlLCAncG9zdHBhdGNoJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkaXJzV2l0aFBvc3RwYXRjaC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNhbGxIb29rKGRpcnNXaXRoUG9zdHBhdGNoW2ldLCAnY29tcG9uZW50VXBkYXRlZCcsIHZub2RlLCBvbGRWbm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoIWlzQ3JlYXRlKSB7XG4gICAgICAgIGZvciAoa2V5IGluIG9sZERpcnMpIHtcbiAgICAgICAgICAgIGlmICghbmV3RGlyc1trZXldKSB7XG4gICAgICAgICAgICAgICAgLy8gbm8gbG9uZ2VyIHByZXNlbnQsIHVuYmluZFxuICAgICAgICAgICAgICAgIGNhbGxIb29rKG9sZERpcnNba2V5XSwgJ3VuYmluZCcsIG9sZFZub2RlLCBvbGRWbm9kZSwgaXNEZXN0cm95KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbnZhciBlbXB0eU1vZGlmaWVycyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5mdW5jdGlvbiBub3JtYWxpemVEaXJlY3RpdmVzKGRpcnMsIHZtKSB7XG4gICAgdmFyIHJlcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgaWYgKCFkaXJzKSB7XG4gICAgICAgIC8vICRmbG93LWRpc2FibGUtbGluZVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgICB2YXIgaSwgZGlyO1xuICAgIGZvciAoaSA9IDA7IGkgPCBkaXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGRpciA9IGRpcnNbaV07XG4gICAgICAgIGlmICghZGlyLm1vZGlmaWVycykge1xuICAgICAgICAgICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAgICAgICAgICBkaXIubW9kaWZpZXJzID0gZW1wdHlNb2RpZmllcnM7XG4gICAgICAgIH1cbiAgICAgICAgcmVzW2dldFJhd0Rpck5hbWUoZGlyKV0gPSBkaXI7XG4gICAgICAgIGlmICh2bS5fc2V0dXBTdGF0ZSAmJiB2bS5fc2V0dXBTdGF0ZS5fX3NmYykge1xuICAgICAgICAgICAgdmFyIHNldHVwRGVmID0gZGlyLmRlZiB8fCByZXNvbHZlQXNzZXQodm0sICdfc2V0dXBTdGF0ZScsICd2LScgKyBkaXIubmFtZSk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHNldHVwRGVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgZGlyLmRlZiA9IHtcbiAgICAgICAgICAgICAgICAgICAgYmluZDogc2V0dXBEZWYsXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZTogc2V0dXBEZWYsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGRpci5kZWYgPSBzZXR1cERlZjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBkaXIuZGVmID0gZGlyLmRlZiB8fCByZXNvbHZlQXNzZXQodm0uJG9wdGlvbnMsICdkaXJlY3RpdmVzJywgZGlyLm5hbWUsIHRydWUpO1xuICAgIH1cbiAgICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgICByZXR1cm4gcmVzO1xufVxuZnVuY3Rpb24gZ2V0UmF3RGlyTmFtZShkaXIpIHtcbiAgICByZXR1cm4gKGRpci5yYXdOYW1lIHx8IFwiXCIuY29uY2F0KGRpci5uYW1lLCBcIi5cIikuY29uY2F0KE9iamVjdC5rZXlzKGRpci5tb2RpZmllcnMgfHwge30pLmpvaW4oJy4nKSkpO1xufVxuZnVuY3Rpb24gY2FsbEhvb2soZGlyLCBob29rLCB2bm9kZSwgb2xkVm5vZGUsIGlzRGVzdHJveSkge1xuICAgIHZhciBmbiA9IGRpci5kZWYgJiYgZGlyLmRlZltob29rXTtcbiAgICBpZiAoZm4pIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZuKHZub2RlLmVsbSwgZGlyLCB2bm9kZSwgb2xkVm5vZGUsIGlzRGVzdHJveSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGhhbmRsZUVycm9yKGUsIHZub2RlLmNvbnRleHQsIFwiZGlyZWN0aXZlIFwiLmNvbmNhdChkaXIubmFtZSwgXCIgXCIpLmNvbmNhdChob29rLCBcIiBob29rXCIpKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxudmFyIGJhc2VNb2R1bGVzID0gW3JlZiwgZGlyZWN0aXZlcyQxXTtcblxuZnVuY3Rpb24gdXBkYXRlQXR0cnMob2xkVm5vZGUsIHZub2RlKSB7XG4gICAgdmFyIG9wdHMgPSB2bm9kZS5jb21wb25lbnRPcHRpb25zO1xuICAgIGlmIChpc0RlZihvcHRzKSAmJiBvcHRzLkN0b3Iub3B0aW9ucy5pbmhlcml0QXR0cnMgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGlzVW5kZWYob2xkVm5vZGUuZGF0YS5hdHRycykgJiYgaXNVbmRlZih2bm9kZS5kYXRhLmF0dHJzKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBrZXksIGN1ciwgb2xkO1xuICAgIHZhciBlbG0gPSB2bm9kZS5lbG07XG4gICAgdmFyIG9sZEF0dHJzID0gb2xkVm5vZGUuZGF0YS5hdHRycyB8fCB7fTtcbiAgICB2YXIgYXR0cnMgPSB2bm9kZS5kYXRhLmF0dHJzIHx8IHt9O1xuICAgIC8vIGNsb25lIG9ic2VydmVkIG9iamVjdHMsIGFzIHRoZSB1c2VyIHByb2JhYmx5IHdhbnRzIHRvIG11dGF0ZSBpdFxuICAgIGlmIChpc0RlZihhdHRycy5fX29iX18pIHx8IGlzVHJ1ZShhdHRycy5fdl9hdHRyX3Byb3h5KSkge1xuICAgICAgICBhdHRycyA9IHZub2RlLmRhdGEuYXR0cnMgPSBleHRlbmQoe30sIGF0dHJzKTtcbiAgICB9XG4gICAgZm9yIChrZXkgaW4gYXR0cnMpIHtcbiAgICAgICAgY3VyID0gYXR0cnNba2V5XTtcbiAgICAgICAgb2xkID0gb2xkQXR0cnNba2V5XTtcbiAgICAgICAgaWYgKG9sZCAhPT0gY3VyKSB7XG4gICAgICAgICAgICBzZXRBdHRyKGVsbSwga2V5LCBjdXIsIHZub2RlLmRhdGEucHJlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyAjNDM5MTogaW4gSUU5LCBzZXR0aW5nIHR5cGUgY2FuIHJlc2V0IHZhbHVlIGZvciBpbnB1dFt0eXBlPXJhZGlvXVxuICAgIC8vICM2NjY2OiBJRS9FZGdlIGZvcmNlcyBwcm9ncmVzcyB2YWx1ZSBkb3duIHRvIDEgYmVmb3JlIHNldHRpbmcgYSBtYXhcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoKGlzSUUgfHwgaXNFZGdlKSAmJiBhdHRycy52YWx1ZSAhPT0gb2xkQXR0cnMudmFsdWUpIHtcbiAgICAgICAgc2V0QXR0cihlbG0sICd2YWx1ZScsIGF0dHJzLnZhbHVlKTtcbiAgICB9XG4gICAgZm9yIChrZXkgaW4gb2xkQXR0cnMpIHtcbiAgICAgICAgaWYgKGlzVW5kZWYoYXR0cnNba2V5XSkpIHtcbiAgICAgICAgICAgIGlmIChpc1hsaW5rKGtleSkpIHtcbiAgICAgICAgICAgICAgICBlbG0ucmVtb3ZlQXR0cmlidXRlTlMoeGxpbmtOUywgZ2V0WGxpbmtQcm9wKGtleSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoIWlzRW51bWVyYXRlZEF0dHIoa2V5KSkge1xuICAgICAgICAgICAgICAgIGVsbS5yZW1vdmVBdHRyaWJ1dGUoa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIHNldEF0dHIoZWwsIGtleSwgdmFsdWUsIGlzSW5QcmUpIHtcbiAgICBpZiAoaXNJblByZSB8fCBlbC50YWdOYW1lLmluZGV4T2YoJy0nKSA+IC0xKSB7XG4gICAgICAgIGJhc2VTZXRBdHRyKGVsLCBrZXksIHZhbHVlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNCb29sZWFuQXR0cihrZXkpKSB7XG4gICAgICAgIC8vIHNldCBhdHRyaWJ1dGUgZm9yIGJsYW5rIHZhbHVlXG4gICAgICAgIC8vIGUuZy4gPG9wdGlvbiBkaXNhYmxlZD5TZWxlY3Qgb25lPC9vcHRpb24+XG4gICAgICAgIGlmIChpc0ZhbHN5QXR0clZhbHVlKHZhbHVlKSkge1xuICAgICAgICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyB0ZWNobmljYWxseSBhbGxvd2Z1bGxzY3JlZW4gaXMgYSBib29sZWFuIGF0dHJpYnV0ZSBmb3IgPGlmcmFtZT4sXG4gICAgICAgICAgICAvLyBidXQgRmxhc2ggZXhwZWN0cyBhIHZhbHVlIG9mIFwidHJ1ZVwiIHdoZW4gdXNlZCBvbiA8ZW1iZWQ+IHRhZ1xuICAgICAgICAgICAgdmFsdWUgPSBrZXkgPT09ICdhbGxvd2Z1bGxzY3JlZW4nICYmIGVsLnRhZ05hbWUgPT09ICdFTUJFRCcgPyAndHJ1ZScgOiBrZXk7XG4gICAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoa2V5LCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAoaXNFbnVtZXJhdGVkQXR0cihrZXkpKSB7XG4gICAgICAgIGVsLnNldEF0dHJpYnV0ZShrZXksIGNvbnZlcnRFbnVtZXJhdGVkVmFsdWUoa2V5LCB2YWx1ZSkpO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc1hsaW5rKGtleSkpIHtcbiAgICAgICAgaWYgKGlzRmFsc3lBdHRyVmFsdWUodmFsdWUpKSB7XG4gICAgICAgICAgICBlbC5yZW1vdmVBdHRyaWJ1dGVOUyh4bGlua05TLCBnZXRYbGlua1Byb3Aoa2V5KSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGVOUyh4bGlua05TLCBrZXksIHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgYmFzZVNldEF0dHIoZWwsIGtleSwgdmFsdWUpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGJhc2VTZXRBdHRyKGVsLCBrZXksIHZhbHVlKSB7XG4gICAgaWYgKGlzRmFsc3lBdHRyVmFsdWUodmFsdWUpKSB7XG4gICAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZShrZXkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgLy8gIzcxMzg6IElFMTAgJiAxMSBmaXJlcyBpbnB1dCBldmVudCB3aGVuIHNldHRpbmcgcGxhY2Vob2xkZXIgb25cbiAgICAgICAgLy8gPHRleHRhcmVhPi4uLiBibG9jayB0aGUgZmlyc3QgaW5wdXQgZXZlbnQgYW5kIHJlbW92ZSB0aGUgYmxvY2tlclxuICAgICAgICAvLyBpbW1lZGlhdGVseS5cbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmIChpc0lFICYmXG4gICAgICAgICAgICAhaXNJRTkgJiZcbiAgICAgICAgICAgIGVsLnRhZ05hbWUgPT09ICdURVhUQVJFQScgJiZcbiAgICAgICAgICAgIGtleSA9PT0gJ3BsYWNlaG9sZGVyJyAmJlxuICAgICAgICAgICAgdmFsdWUgIT09ICcnICYmXG4gICAgICAgICAgICAhZWwuX19pZXBoKSB7XG4gICAgICAgICAgICB2YXIgYmxvY2tlcl8xID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2lucHV0JywgYmxvY2tlcl8xKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIGJsb2NrZXJfMSk7XG4gICAgICAgICAgICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgICAgICAgICAgIGVsLl9faWVwaCA9IHRydWU7IC8qIElFIHBsYWNlaG9sZGVyIHBhdGNoZWQgKi9cbiAgICAgICAgfVxuICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoa2V5LCB2YWx1ZSk7XG4gICAgfVxufVxudmFyIGF0dHJzID0ge1xuICAgIGNyZWF0ZTogdXBkYXRlQXR0cnMsXG4gICAgdXBkYXRlOiB1cGRhdGVBdHRyc1xufTtcblxuZnVuY3Rpb24gdXBkYXRlQ2xhc3Mob2xkVm5vZGUsIHZub2RlKSB7XG4gICAgdmFyIGVsID0gdm5vZGUuZWxtO1xuICAgIHZhciBkYXRhID0gdm5vZGUuZGF0YTtcbiAgICB2YXIgb2xkRGF0YSA9IG9sZFZub2RlLmRhdGE7XG4gICAgaWYgKGlzVW5kZWYoZGF0YS5zdGF0aWNDbGFzcykgJiZcbiAgICAgICAgaXNVbmRlZihkYXRhLmNsYXNzKSAmJlxuICAgICAgICAoaXNVbmRlZihvbGREYXRhKSB8fFxuICAgICAgICAgICAgKGlzVW5kZWYob2xkRGF0YS5zdGF0aWNDbGFzcykgJiYgaXNVbmRlZihvbGREYXRhLmNsYXNzKSkpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIGNscyA9IGdlbkNsYXNzRm9yVm5vZGUodm5vZGUpO1xuICAgIC8vIGhhbmRsZSB0cmFuc2l0aW9uIGNsYXNzZXNcbiAgICB2YXIgdHJhbnNpdGlvbkNsYXNzID0gZWwuX3RyYW5zaXRpb25DbGFzc2VzO1xuICAgIGlmIChpc0RlZih0cmFuc2l0aW9uQ2xhc3MpKSB7XG4gICAgICAgIGNscyA9IGNvbmNhdChjbHMsIHN0cmluZ2lmeUNsYXNzKHRyYW5zaXRpb25DbGFzcykpO1xuICAgIH1cbiAgICAvLyBzZXQgdGhlIGNsYXNzXG4gICAgaWYgKGNscyAhPT0gZWwuX3ByZXZDbGFzcykge1xuICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgY2xzKTtcbiAgICAgICAgZWwuX3ByZXZDbGFzcyA9IGNscztcbiAgICB9XG59XG52YXIga2xhc3MkMSA9IHtcbiAgICBjcmVhdGU6IHVwZGF0ZUNsYXNzLFxuICAgIHVwZGF0ZTogdXBkYXRlQ2xhc3Ncbn07XG5cbnZhciB2YWxpZERpdmlzaW9uQ2hhclJFID0gL1tcXHcpLitcXC1fJFxcXV0vO1xuZnVuY3Rpb24gcGFyc2VGaWx0ZXJzKGV4cCkge1xuICAgIHZhciBpblNpbmdsZSA9IGZhbHNlO1xuICAgIHZhciBpbkRvdWJsZSA9IGZhbHNlO1xuICAgIHZhciBpblRlbXBsYXRlU3RyaW5nID0gZmFsc2U7XG4gICAgdmFyIGluUmVnZXggPSBmYWxzZTtcbiAgICB2YXIgY3VybHkgPSAwO1xuICAgIHZhciBzcXVhcmUgPSAwO1xuICAgIHZhciBwYXJlbiA9IDA7XG4gICAgdmFyIGxhc3RGaWx0ZXJJbmRleCA9IDA7XG4gICAgdmFyIGMsIHByZXYsIGksIGV4cHJlc3Npb24sIGZpbHRlcnM7XG4gICAgZm9yIChpID0gMDsgaSA8IGV4cC5sZW5ndGg7IGkrKykge1xuICAgICAgICBwcmV2ID0gYztcbiAgICAgICAgYyA9IGV4cC5jaGFyQ29kZUF0KGkpO1xuICAgICAgICBpZiAoaW5TaW5nbGUpIHtcbiAgICAgICAgICAgIGlmIChjID09PSAweDI3ICYmIHByZXYgIT09IDB4NWMpXG4gICAgICAgICAgICAgICAgaW5TaW5nbGUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpbkRvdWJsZSkge1xuICAgICAgICAgICAgaWYgKGMgPT09IDB4MjIgJiYgcHJldiAhPT0gMHg1YylcbiAgICAgICAgICAgICAgICBpbkRvdWJsZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGluVGVtcGxhdGVTdHJpbmcpIHtcbiAgICAgICAgICAgIGlmIChjID09PSAweDYwICYmIHByZXYgIT09IDB4NWMpXG4gICAgICAgICAgICAgICAgaW5UZW1wbGF0ZVN0cmluZyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGluUmVnZXgpIHtcbiAgICAgICAgICAgIGlmIChjID09PSAweDJmICYmIHByZXYgIT09IDB4NWMpXG4gICAgICAgICAgICAgICAgaW5SZWdleCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGMgPT09IDB4N2MgJiYgLy8gcGlwZVxuICAgICAgICAgICAgZXhwLmNoYXJDb2RlQXQoaSArIDEpICE9PSAweDdjICYmXG4gICAgICAgICAgICBleHAuY2hhckNvZGVBdChpIC0gMSkgIT09IDB4N2MgJiZcbiAgICAgICAgICAgICFjdXJseSAmJlxuICAgICAgICAgICAgIXNxdWFyZSAmJlxuICAgICAgICAgICAgIXBhcmVuKSB7XG4gICAgICAgICAgICBpZiAoZXhwcmVzc2lvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgLy8gZmlyc3QgZmlsdGVyLCBlbmQgb2YgZXhwcmVzc2lvblxuICAgICAgICAgICAgICAgIGxhc3RGaWx0ZXJJbmRleCA9IGkgKyAxO1xuICAgICAgICAgICAgICAgIGV4cHJlc3Npb24gPSBleHAuc2xpY2UoMCwgaSkudHJpbSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcHVzaEZpbHRlcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc3dpdGNoIChjKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAweDIyOlxuICAgICAgICAgICAgICAgICAgICBpbkRvdWJsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBcIlxuICAgICAgICAgICAgICAgIGNhc2UgMHgyNzpcbiAgICAgICAgICAgICAgICAgICAgaW5TaW5nbGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhazsgLy8gJ1xuICAgICAgICAgICAgICAgIGNhc2UgMHg2MDpcbiAgICAgICAgICAgICAgICAgICAgaW5UZW1wbGF0ZVN0cmluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBgXG4gICAgICAgICAgICAgICAgY2FzZSAweDI4OlxuICAgICAgICAgICAgICAgICAgICBwYXJlbisrO1xuICAgICAgICAgICAgICAgICAgICBicmVhazsgLy8gKFxuICAgICAgICAgICAgICAgIGNhc2UgMHgyOTpcbiAgICAgICAgICAgICAgICAgICAgcGFyZW4tLTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8vIClcbiAgICAgICAgICAgICAgICBjYXNlIDB4NWI6XG4gICAgICAgICAgICAgICAgICAgIHNxdWFyZSsrO1xuICAgICAgICAgICAgICAgICAgICBicmVhazsgLy8gW1xuICAgICAgICAgICAgICAgIGNhc2UgMHg1ZDpcbiAgICAgICAgICAgICAgICAgICAgc3F1YXJlLS07XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBdXG4gICAgICAgICAgICAgICAgY2FzZSAweDdiOlxuICAgICAgICAgICAgICAgICAgICBjdXJseSsrO1xuICAgICAgICAgICAgICAgICAgICBicmVhazsgLy8ge1xuICAgICAgICAgICAgICAgIGNhc2UgMHg3ZDpcbiAgICAgICAgICAgICAgICAgICAgY3VybHktLTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8vIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjID09PSAweDJmKSB7XG4gICAgICAgICAgICAgICAgLy8gL1xuICAgICAgICAgICAgICAgIHZhciBqID0gaSAtIDE7XG4gICAgICAgICAgICAgICAgdmFyIHAgXG4gICAgICAgICAgICAgICAgLy8gZmluZCBmaXJzdCBub24td2hpdGVzcGFjZSBwcmV2IGNoYXJcbiAgICAgICAgICAgICAgICA9IHZvaWQgMDtcbiAgICAgICAgICAgICAgICAvLyBmaW5kIGZpcnN0IG5vbi13aGl0ZXNwYWNlIHByZXYgY2hhclxuICAgICAgICAgICAgICAgIGZvciAoOyBqID49IDA7IGotLSkge1xuICAgICAgICAgICAgICAgICAgICBwID0gZXhwLmNoYXJBdChqKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHAgIT09ICcgJylcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIXAgfHwgIXZhbGlkRGl2aXNpb25DaGFyUkUudGVzdChwKSkge1xuICAgICAgICAgICAgICAgICAgICBpblJlZ2V4ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGV4cHJlc3Npb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBleHByZXNzaW9uID0gZXhwLnNsaWNlKDAsIGkpLnRyaW0oKTtcbiAgICB9XG4gICAgZWxzZSBpZiAobGFzdEZpbHRlckluZGV4ICE9PSAwKSB7XG4gICAgICAgIHB1c2hGaWx0ZXIoKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcHVzaEZpbHRlcigpIHtcbiAgICAgICAgKGZpbHRlcnMgfHwgKGZpbHRlcnMgPSBbXSkpLnB1c2goZXhwLnNsaWNlKGxhc3RGaWx0ZXJJbmRleCwgaSkudHJpbSgpKTtcbiAgICAgICAgbGFzdEZpbHRlckluZGV4ID0gaSArIDE7XG4gICAgfVxuICAgIGlmIChmaWx0ZXJzKSB7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBmaWx0ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBleHByZXNzaW9uID0gd3JhcEZpbHRlcihleHByZXNzaW9uLCBmaWx0ZXJzW2ldKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZXhwcmVzc2lvbjtcbn1cbmZ1bmN0aW9uIHdyYXBGaWx0ZXIoZXhwLCBmaWx0ZXIpIHtcbiAgICB2YXIgaSA9IGZpbHRlci5pbmRleE9mKCcoJyk7XG4gICAgaWYgKGkgPCAwKSB7XG4gICAgICAgIC8vIF9mOiByZXNvbHZlRmlsdGVyXG4gICAgICAgIHJldHVybiBcIl9mKFxcXCJcIi5jb25jYXQoZmlsdGVyLCBcIlxcXCIpKFwiKS5jb25jYXQoZXhwLCBcIilcIik7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB2YXIgbmFtZV8xID0gZmlsdGVyLnNsaWNlKDAsIGkpO1xuICAgICAgICB2YXIgYXJncyA9IGZpbHRlci5zbGljZShpICsgMSk7XG4gICAgICAgIHJldHVybiBcIl9mKFxcXCJcIi5jb25jYXQobmFtZV8xLCBcIlxcXCIpKFwiKS5jb25jYXQoZXhwKS5jb25jYXQoYXJncyAhPT0gJyknID8gJywnICsgYXJncyA6IGFyZ3MpO1xuICAgIH1cbn1cblxuLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbmZ1bmN0aW9uIGJhc2VXYXJuKG1zZywgcmFuZ2UpIHtcbiAgICBjb25zb2xlLmVycm9yKFwiW1Z1ZSBjb21waWxlcl06IFwiLmNvbmNhdChtc2cpKTtcbn1cbi8qIGVzbGludC1lbmFibGUgbm8tdW51c2VkLXZhcnMgKi9cbmZ1bmN0aW9uIHBsdWNrTW9kdWxlRnVuY3Rpb24obW9kdWxlcywga2V5KSB7XG4gICAgcmV0dXJuIG1vZHVsZXMgPyBtb2R1bGVzLm1hcChmdW5jdGlvbiAobSkgeyByZXR1cm4gbVtrZXldOyB9KS5maWx0ZXIoZnVuY3Rpb24gKF8pIHsgcmV0dXJuIF87IH0pIDogW107XG59XG5mdW5jdGlvbiBhZGRQcm9wKGVsLCBuYW1lLCB2YWx1ZSwgcmFuZ2UsIGR5bmFtaWMpIHtcbiAgICAoZWwucHJvcHMgfHwgKGVsLnByb3BzID0gW10pKS5wdXNoKHJhbmdlU2V0SXRlbSh7IG5hbWU6IG5hbWUsIHZhbHVlOiB2YWx1ZSwgZHluYW1pYzogZHluYW1pYyB9LCByYW5nZSkpO1xuICAgIGVsLnBsYWluID0gZmFsc2U7XG59XG5mdW5jdGlvbiBhZGRBdHRyKGVsLCBuYW1lLCB2YWx1ZSwgcmFuZ2UsIGR5bmFtaWMpIHtcbiAgICB2YXIgYXR0cnMgPSBkeW5hbWljXG4gICAgICAgID8gZWwuZHluYW1pY0F0dHJzIHx8IChlbC5keW5hbWljQXR0cnMgPSBbXSlcbiAgICAgICAgOiBlbC5hdHRycyB8fCAoZWwuYXR0cnMgPSBbXSk7XG4gICAgYXR0cnMucHVzaChyYW5nZVNldEl0ZW0oeyBuYW1lOiBuYW1lLCB2YWx1ZTogdmFsdWUsIGR5bmFtaWM6IGR5bmFtaWMgfSwgcmFuZ2UpKTtcbiAgICBlbC5wbGFpbiA9IGZhbHNlO1xufVxuLy8gYWRkIGEgcmF3IGF0dHIgKHVzZSB0aGlzIGluIHByZVRyYW5zZm9ybXMpXG5mdW5jdGlvbiBhZGRSYXdBdHRyKGVsLCBuYW1lLCB2YWx1ZSwgcmFuZ2UpIHtcbiAgICBlbC5hdHRyc01hcFtuYW1lXSA9IHZhbHVlO1xuICAgIGVsLmF0dHJzTGlzdC5wdXNoKHJhbmdlU2V0SXRlbSh7IG5hbWU6IG5hbWUsIHZhbHVlOiB2YWx1ZSB9LCByYW5nZSkpO1xufVxuZnVuY3Rpb24gYWRkRGlyZWN0aXZlKGVsLCBuYW1lLCByYXdOYW1lLCB2YWx1ZSwgYXJnLCBpc0R5bmFtaWNBcmcsIG1vZGlmaWVycywgcmFuZ2UpIHtcbiAgICAoZWwuZGlyZWN0aXZlcyB8fCAoZWwuZGlyZWN0aXZlcyA9IFtdKSkucHVzaChyYW5nZVNldEl0ZW0oe1xuICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICByYXdOYW1lOiByYXdOYW1lLFxuICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgIGFyZzogYXJnLFxuICAgICAgICBpc0R5bmFtaWNBcmc6IGlzRHluYW1pY0FyZyxcbiAgICAgICAgbW9kaWZpZXJzOiBtb2RpZmllcnNcbiAgICB9LCByYW5nZSkpO1xuICAgIGVsLnBsYWluID0gZmFsc2U7XG59XG5mdW5jdGlvbiBwcmVwZW5kTW9kaWZpZXJNYXJrZXIoc3ltYm9sLCBuYW1lLCBkeW5hbWljKSB7XG4gICAgcmV0dXJuIGR5bmFtaWMgPyBcIl9wKFwiLmNvbmNhdChuYW1lLCBcIixcXFwiXCIpLmNvbmNhdChzeW1ib2wsIFwiXFxcIilcIikgOiBzeW1ib2wgKyBuYW1lOyAvLyBtYXJrIHRoZSBldmVudCBhcyBjYXB0dXJlZFxufVxuZnVuY3Rpb24gYWRkSGFuZGxlcihlbCwgbmFtZSwgdmFsdWUsIG1vZGlmaWVycywgaW1wb3J0YW50LCB3YXJuLCByYW5nZSwgZHluYW1pYykge1xuICAgIG1vZGlmaWVycyA9IG1vZGlmaWVycyB8fCBlbXB0eU9iamVjdDtcbiAgICAvLyB3YXJuIHByZXZlbnQgYW5kIHBhc3NpdmUgbW9kaWZpZXJcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuICYmIG1vZGlmaWVycy5wcmV2ZW50ICYmIG1vZGlmaWVycy5wYXNzaXZlKSB7XG4gICAgICAgIHdhcm4oXCJwYXNzaXZlIGFuZCBwcmV2ZW50IGNhbid0IGJlIHVzZWQgdG9nZXRoZXIuIFwiICtcbiAgICAgICAgICAgIFwiUGFzc2l2ZSBoYW5kbGVyIGNhbid0IHByZXZlbnQgZGVmYXVsdCBldmVudC5cIiwgcmFuZ2UpO1xuICAgIH1cbiAgICAvLyBub3JtYWxpemUgY2xpY2sucmlnaHQgYW5kIGNsaWNrLm1pZGRsZSBzaW5jZSB0aGV5IGRvbid0IGFjdHVhbGx5IGZpcmVcbiAgICAvLyB0aGlzIGlzIHRlY2huaWNhbGx5IGJyb3dzZXItc3BlY2lmaWMsIGJ1dCBhdCBsZWFzdCBmb3Igbm93IGJyb3dzZXJzIGFyZVxuICAgIC8vIHRoZSBvbmx5IHRhcmdldCBlbnZzIHRoYXQgaGF2ZSByaWdodC9taWRkbGUgY2xpY2tzLlxuICAgIGlmIChtb2RpZmllcnMucmlnaHQpIHtcbiAgICAgICAgaWYgKGR5bmFtaWMpIHtcbiAgICAgICAgICAgIG5hbWUgPSBcIihcIi5jb25jYXQobmFtZSwgXCIpPT09J2NsaWNrJz8nY29udGV4dG1lbnUnOihcIikuY29uY2F0KG5hbWUsIFwiKVwiKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChuYW1lID09PSAnY2xpY2snKSB7XG4gICAgICAgICAgICBuYW1lID0gJ2NvbnRleHRtZW51JztcbiAgICAgICAgICAgIGRlbGV0ZSBtb2RpZmllcnMucmlnaHQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAobW9kaWZpZXJzLm1pZGRsZSkge1xuICAgICAgICBpZiAoZHluYW1pYykge1xuICAgICAgICAgICAgbmFtZSA9IFwiKFwiLmNvbmNhdChuYW1lLCBcIik9PT0nY2xpY2snPydtb3VzZXVwJzooXCIpLmNvbmNhdChuYW1lLCBcIilcIik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobmFtZSA9PT0gJ2NsaWNrJykge1xuICAgICAgICAgICAgbmFtZSA9ICdtb3VzZXVwJztcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBjaGVjayBjYXB0dXJlIG1vZGlmaWVyXG4gICAgaWYgKG1vZGlmaWVycy5jYXB0dXJlKSB7XG4gICAgICAgIGRlbGV0ZSBtb2RpZmllcnMuY2FwdHVyZTtcbiAgICAgICAgbmFtZSA9IHByZXBlbmRNb2RpZmllck1hcmtlcignIScsIG5hbWUsIGR5bmFtaWMpO1xuICAgIH1cbiAgICBpZiAobW9kaWZpZXJzLm9uY2UpIHtcbiAgICAgICAgZGVsZXRlIG1vZGlmaWVycy5vbmNlO1xuICAgICAgICBuYW1lID0gcHJlcGVuZE1vZGlmaWVyTWFya2VyKCd+JywgbmFtZSwgZHluYW1pYyk7XG4gICAgfVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChtb2RpZmllcnMucGFzc2l2ZSkge1xuICAgICAgICBkZWxldGUgbW9kaWZpZXJzLnBhc3NpdmU7XG4gICAgICAgIG5hbWUgPSBwcmVwZW5kTW9kaWZpZXJNYXJrZXIoJyYnLCBuYW1lLCBkeW5hbWljKTtcbiAgICB9XG4gICAgdmFyIGV2ZW50cztcbiAgICBpZiAobW9kaWZpZXJzLm5hdGl2ZSkge1xuICAgICAgICBkZWxldGUgbW9kaWZpZXJzLm5hdGl2ZTtcbiAgICAgICAgZXZlbnRzID0gZWwubmF0aXZlRXZlbnRzIHx8IChlbC5uYXRpdmVFdmVudHMgPSB7fSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBldmVudHMgPSBlbC5ldmVudHMgfHwgKGVsLmV2ZW50cyA9IHt9KTtcbiAgICB9XG4gICAgdmFyIG5ld0hhbmRsZXIgPSByYW5nZVNldEl0ZW0oeyB2YWx1ZTogdmFsdWUudHJpbSgpLCBkeW5hbWljOiBkeW5hbWljIH0sIHJhbmdlKTtcbiAgICBpZiAobW9kaWZpZXJzICE9PSBlbXB0eU9iamVjdCkge1xuICAgICAgICBuZXdIYW5kbGVyLm1vZGlmaWVycyA9IG1vZGlmaWVycztcbiAgICB9XG4gICAgdmFyIGhhbmRsZXJzID0gZXZlbnRzW25hbWVdO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChBcnJheS5pc0FycmF5KGhhbmRsZXJzKSkge1xuICAgICAgICBpbXBvcnRhbnQgPyBoYW5kbGVycy51bnNoaWZ0KG5ld0hhbmRsZXIpIDogaGFuZGxlcnMucHVzaChuZXdIYW5kbGVyKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaGFuZGxlcnMpIHtcbiAgICAgICAgZXZlbnRzW25hbWVdID0gaW1wb3J0YW50ID8gW25ld0hhbmRsZXIsIGhhbmRsZXJzXSA6IFtoYW5kbGVycywgbmV3SGFuZGxlcl07XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBldmVudHNbbmFtZV0gPSBuZXdIYW5kbGVyO1xuICAgIH1cbiAgICBlbC5wbGFpbiA9IGZhbHNlO1xufVxuZnVuY3Rpb24gZ2V0UmF3QmluZGluZ0F0dHIoZWwsIG5hbWUpIHtcbiAgICByZXR1cm4gKGVsLnJhd0F0dHJzTWFwWyc6JyArIG5hbWVdIHx8XG4gICAgICAgIGVsLnJhd0F0dHJzTWFwWyd2LWJpbmQ6JyArIG5hbWVdIHx8XG4gICAgICAgIGVsLnJhd0F0dHJzTWFwW25hbWVdKTtcbn1cbmZ1bmN0aW9uIGdldEJpbmRpbmdBdHRyKGVsLCBuYW1lLCBnZXRTdGF0aWMpIHtcbiAgICB2YXIgZHluYW1pY1ZhbHVlID0gZ2V0QW5kUmVtb3ZlQXR0cihlbCwgJzonICsgbmFtZSkgfHwgZ2V0QW5kUmVtb3ZlQXR0cihlbCwgJ3YtYmluZDonICsgbmFtZSk7XG4gICAgaWYgKGR5bmFtaWNWYWx1ZSAhPSBudWxsKSB7XG4gICAgICAgIHJldHVybiBwYXJzZUZpbHRlcnMoZHluYW1pY1ZhbHVlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoZ2V0U3RhdGljICE9PSBmYWxzZSkge1xuICAgICAgICB2YXIgc3RhdGljVmFsdWUgPSBnZXRBbmRSZW1vdmVBdHRyKGVsLCBuYW1lKTtcbiAgICAgICAgaWYgKHN0YXRpY1ZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShzdGF0aWNWYWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4vLyBub3RlOiB0aGlzIG9ubHkgcmVtb3ZlcyB0aGUgYXR0ciBmcm9tIHRoZSBBcnJheSAoYXR0cnNMaXN0KSBzbyB0aGF0IGl0XG4vLyBkb2Vzbid0IGdldCBwcm9jZXNzZWQgYnkgcHJvY2Vzc0F0dHJzLlxuLy8gQnkgZGVmYXVsdCBpdCBkb2VzIE5PVCByZW1vdmUgaXQgZnJvbSB0aGUgbWFwIChhdHRyc01hcCkgYmVjYXVzZSB0aGUgbWFwIGlzXG4vLyBuZWVkZWQgZHVyaW5nIGNvZGVnZW4uXG5mdW5jdGlvbiBnZXRBbmRSZW1vdmVBdHRyKGVsLCBuYW1lLCByZW1vdmVGcm9tTWFwKSB7XG4gICAgdmFyIHZhbDtcbiAgICBpZiAoKHZhbCA9IGVsLmF0dHJzTWFwW25hbWVdKSAhPSBudWxsKSB7XG4gICAgICAgIHZhciBsaXN0ID0gZWwuYXR0cnNMaXN0O1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGxpc3QubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAobGlzdFtpXS5uYW1lID09PSBuYW1lKSB7XG4gICAgICAgICAgICAgICAgbGlzdC5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHJlbW92ZUZyb21NYXApIHtcbiAgICAgICAgZGVsZXRlIGVsLmF0dHJzTWFwW25hbWVdO1xuICAgIH1cbiAgICByZXR1cm4gdmFsO1xufVxuZnVuY3Rpb24gZ2V0QW5kUmVtb3ZlQXR0ckJ5UmVnZXgoZWwsIG5hbWUpIHtcbiAgICB2YXIgbGlzdCA9IGVsLmF0dHJzTGlzdDtcbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IGxpc3QubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIHZhciBhdHRyID0gbGlzdFtpXTtcbiAgICAgICAgaWYgKG5hbWUudGVzdChhdHRyLm5hbWUpKSB7XG4gICAgICAgICAgICBsaXN0LnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgIHJldHVybiBhdHRyO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gcmFuZ2VTZXRJdGVtKGl0ZW0sIHJhbmdlKSB7XG4gICAgaWYgKHJhbmdlKSB7XG4gICAgICAgIGlmIChyYW5nZS5zdGFydCAhPSBudWxsKSB7XG4gICAgICAgICAgICBpdGVtLnN0YXJ0ID0gcmFuZ2Uuc3RhcnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJhbmdlLmVuZCAhPSBudWxsKSB7XG4gICAgICAgICAgICBpdGVtLmVuZCA9IHJhbmdlLmVuZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaXRlbTtcbn1cblxuLyoqXG4gKiBDcm9zcy1wbGF0Zm9ybSBjb2RlIGdlbmVyYXRpb24gZm9yIGNvbXBvbmVudCB2LW1vZGVsXG4gKi9cbmZ1bmN0aW9uIGdlbkNvbXBvbmVudE1vZGVsKGVsLCB2YWx1ZSwgbW9kaWZpZXJzKSB7XG4gICAgdmFyIF9hID0gbW9kaWZpZXJzIHx8IHt9LCBudW1iZXIgPSBfYS5udW1iZXIsIHRyaW0gPSBfYS50cmltO1xuICAgIHZhciBiYXNlVmFsdWVFeHByZXNzaW9uID0gJyQkdic7XG4gICAgdmFyIHZhbHVlRXhwcmVzc2lvbiA9IGJhc2VWYWx1ZUV4cHJlc3Npb247XG4gICAgaWYgKHRyaW0pIHtcbiAgICAgICAgdmFsdWVFeHByZXNzaW9uID1cbiAgICAgICAgICAgIFwiKHR5cGVvZiBcIi5jb25jYXQoYmFzZVZhbHVlRXhwcmVzc2lvbiwgXCIgPT09ICdzdHJpbmcnXCIpICtcbiAgICAgICAgICAgICAgICBcIj8gXCIuY29uY2F0KGJhc2VWYWx1ZUV4cHJlc3Npb24sIFwiLnRyaW0oKVwiKSArXG4gICAgICAgICAgICAgICAgXCI6IFwiLmNvbmNhdChiYXNlVmFsdWVFeHByZXNzaW9uLCBcIilcIik7XG4gICAgfVxuICAgIGlmIChudW1iZXIpIHtcbiAgICAgICAgdmFsdWVFeHByZXNzaW9uID0gXCJfbihcIi5jb25jYXQodmFsdWVFeHByZXNzaW9uLCBcIilcIik7XG4gICAgfVxuICAgIHZhciBhc3NpZ25tZW50ID0gZ2VuQXNzaWdubWVudENvZGUodmFsdWUsIHZhbHVlRXhwcmVzc2lvbik7XG4gICAgZWwubW9kZWwgPSB7XG4gICAgICAgIHZhbHVlOiBcIihcIi5jb25jYXQodmFsdWUsIFwiKVwiKSxcbiAgICAgICAgZXhwcmVzc2lvbjogSlNPTi5zdHJpbmdpZnkodmFsdWUpLFxuICAgICAgICBjYWxsYmFjazogXCJmdW5jdGlvbiAoXCIuY29uY2F0KGJhc2VWYWx1ZUV4cHJlc3Npb24sIFwiKSB7XCIpLmNvbmNhdChhc3NpZ25tZW50LCBcIn1cIilcbiAgICB9O1xufVxuLyoqXG4gKiBDcm9zcy1wbGF0Zm9ybSBjb2RlZ2VuIGhlbHBlciBmb3IgZ2VuZXJhdGluZyB2LW1vZGVsIHZhbHVlIGFzc2lnbm1lbnQgY29kZS5cbiAqL1xuZnVuY3Rpb24gZ2VuQXNzaWdubWVudENvZGUodmFsdWUsIGFzc2lnbm1lbnQpIHtcbiAgICB2YXIgcmVzID0gcGFyc2VNb2RlbCh2YWx1ZSk7XG4gICAgaWYgKHJlcy5rZXkgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIFwiXCIuY29uY2F0KHZhbHVlLCBcIj1cIikuY29uY2F0KGFzc2lnbm1lbnQpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFwiJHNldChcIi5jb25jYXQocmVzLmV4cCwgXCIsIFwiKS5jb25jYXQocmVzLmtleSwgXCIsIFwiKS5jb25jYXQoYXNzaWdubWVudCwgXCIpXCIpO1xuICAgIH1cbn1cbi8qKlxuICogUGFyc2UgYSB2LW1vZGVsIGV4cHJlc3Npb24gaW50byBhIGJhc2UgcGF0aCBhbmQgYSBmaW5hbCBrZXkgc2VnbWVudC5cbiAqIEhhbmRsZXMgYm90aCBkb3QtcGF0aCBhbmQgcG9zc2libGUgc3F1YXJlIGJyYWNrZXRzLlxuICpcbiAqIFBvc3NpYmxlIGNhc2VzOlxuICpcbiAqIC0gdGVzdFxuICogLSB0ZXN0W2tleV1cbiAqIC0gdGVzdFt0ZXN0MVtrZXldXVxuICogLSB0ZXN0W1wiYVwiXVtrZXldXG4gKiAtIHh4eC50ZXN0W2FbYV0udGVzdDFba2V5XV1cbiAqIC0gdGVzdC54eHguYVtcImFzYVwiXVt0ZXN0MVtrZXldXVxuICpcbiAqL1xudmFyIGxlbiwgc3RyLCBjaHIsIGluZGV4LCBleHByZXNzaW9uUG9zLCBleHByZXNzaW9uRW5kUG9zO1xuZnVuY3Rpb24gcGFyc2VNb2RlbCh2YWwpIHtcbiAgICAvLyBGaXggaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS9wdWxsLzc3MzBcbiAgICAvLyBhbGxvdyB2LW1vZGVsPVwib2JqLnZhbCBcIiAodHJhaWxpbmcgd2hpdGVzcGFjZSlcbiAgICB2YWwgPSB2YWwudHJpbSgpO1xuICAgIGxlbiA9IHZhbC5sZW5ndGg7XG4gICAgaWYgKHZhbC5pbmRleE9mKCdbJykgPCAwIHx8IHZhbC5sYXN0SW5kZXhPZignXScpIDwgbGVuIC0gMSkge1xuICAgICAgICBpbmRleCA9IHZhbC5sYXN0SW5kZXhPZignLicpO1xuICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBleHA6IHZhbC5zbGljZSgwLCBpbmRleCksXG4gICAgICAgICAgICAgICAga2V5OiAnXCInICsgdmFsLnNsaWNlKGluZGV4ICsgMSkgKyAnXCInXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBleHA6IHZhbCxcbiAgICAgICAgICAgICAgICBrZXk6IG51bGxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RyID0gdmFsO1xuICAgIGluZGV4ID0gZXhwcmVzc2lvblBvcyA9IGV4cHJlc3Npb25FbmRQb3MgPSAwO1xuICAgIHdoaWxlICghZW9mKCkpIHtcbiAgICAgICAgY2hyID0gbmV4dCgpO1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgaWYgKGlzU3RyaW5nU3RhcnQoY2hyKSkge1xuICAgICAgICAgICAgcGFyc2VTdHJpbmcoY2hyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjaHIgPT09IDB4NWIpIHtcbiAgICAgICAgICAgIHBhcnNlQnJhY2tldChjaHIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIGV4cDogdmFsLnNsaWNlKDAsIGV4cHJlc3Npb25Qb3MpLFxuICAgICAgICBrZXk6IHZhbC5zbGljZShleHByZXNzaW9uUG9zICsgMSwgZXhwcmVzc2lvbkVuZFBvcylcbiAgICB9O1xufVxuZnVuY3Rpb24gbmV4dCgpIHtcbiAgICByZXR1cm4gc3RyLmNoYXJDb2RlQXQoKytpbmRleCk7XG59XG5mdW5jdGlvbiBlb2YoKSB7XG4gICAgcmV0dXJuIGluZGV4ID49IGxlbjtcbn1cbmZ1bmN0aW9uIGlzU3RyaW5nU3RhcnQoY2hyKSB7XG4gICAgcmV0dXJuIGNociA9PT0gMHgyMiB8fCBjaHIgPT09IDB4Mjc7XG59XG5mdW5jdGlvbiBwYXJzZUJyYWNrZXQoY2hyKSB7XG4gICAgdmFyIGluQnJhY2tldCA9IDE7XG4gICAgZXhwcmVzc2lvblBvcyA9IGluZGV4O1xuICAgIHdoaWxlICghZW9mKCkpIHtcbiAgICAgICAgY2hyID0gbmV4dCgpO1xuICAgICAgICBpZiAoaXNTdHJpbmdTdGFydChjaHIpKSB7XG4gICAgICAgICAgICBwYXJzZVN0cmluZyhjaHIpO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNociA9PT0gMHg1YilcbiAgICAgICAgICAgIGluQnJhY2tldCsrO1xuICAgICAgICBpZiAoY2hyID09PSAweDVkKVxuICAgICAgICAgICAgaW5CcmFja2V0LS07XG4gICAgICAgIGlmIChpbkJyYWNrZXQgPT09IDApIHtcbiAgICAgICAgICAgIGV4cHJlc3Npb25FbmRQb3MgPSBpbmRleDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gcGFyc2VTdHJpbmcoY2hyKSB7XG4gICAgdmFyIHN0cmluZ1F1b3RlID0gY2hyO1xuICAgIHdoaWxlICghZW9mKCkpIHtcbiAgICAgICAgY2hyID0gbmV4dCgpO1xuICAgICAgICBpZiAoY2hyID09PSBzdHJpbmdRdW90ZSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbnZhciB3YXJuJDE7XG4vLyBpbiBzb21lIGNhc2VzLCB0aGUgZXZlbnQgdXNlZCBoYXMgdG8gYmUgZGV0ZXJtaW5lZCBhdCBydW50aW1lXG4vLyBzbyB3ZSB1c2VkIHNvbWUgcmVzZXJ2ZWQgdG9rZW5zIGR1cmluZyBjb21waWxlLlxudmFyIFJBTkdFX1RPS0VOID0gJ19fcic7XG52YXIgQ0hFQ0tCT1hfUkFESU9fVE9LRU4gPSAnX19jJztcbmZ1bmN0aW9uIG1vZGVsJDEoZWwsIGRpciwgX3dhcm4pIHtcbiAgICB3YXJuJDEgPSBfd2FybjtcbiAgICB2YXIgdmFsdWUgPSBkaXIudmFsdWU7XG4gICAgdmFyIG1vZGlmaWVycyA9IGRpci5tb2RpZmllcnM7XG4gICAgdmFyIHRhZyA9IGVsLnRhZztcbiAgICB2YXIgdHlwZSA9IGVsLmF0dHJzTWFwLnR5cGU7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgLy8gaW5wdXRzIHdpdGggdHlwZT1cImZpbGVcIiBhcmUgcmVhZCBvbmx5IGFuZCBzZXR0aW5nIHRoZSBpbnB1dCdzXG4gICAgICAgIC8vIHZhbHVlIHdpbGwgdGhyb3cgYW4gZXJyb3IuXG4gICAgICAgIGlmICh0YWcgPT09ICdpbnB1dCcgJiYgdHlwZSA9PT0gJ2ZpbGUnKSB7XG4gICAgICAgICAgICB3YXJuJDEoXCI8XCIuY29uY2F0KGVsLnRhZywgXCIgdi1tb2RlbD1cXFwiXCIpLmNvbmNhdCh2YWx1ZSwgXCJcXFwiIHR5cGU9XFxcImZpbGVcXFwiPjpcXG5cIikgK1xuICAgICAgICAgICAgICAgIFwiRmlsZSBpbnB1dHMgYXJlIHJlYWQgb25seS4gVXNlIGEgdi1vbjpjaGFuZ2UgbGlzdGVuZXIgaW5zdGVhZC5cIiwgZWwucmF3QXR0cnNNYXBbJ3YtbW9kZWwnXSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGVsLmNvbXBvbmVudCkge1xuICAgICAgICBnZW5Db21wb25lbnRNb2RlbChlbCwgdmFsdWUsIG1vZGlmaWVycyk7XG4gICAgICAgIC8vIGNvbXBvbmVudCB2LW1vZGVsIGRvZXNuJ3QgbmVlZCBleHRyYSBydW50aW1lXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZWxzZSBpZiAodGFnID09PSAnc2VsZWN0Jykge1xuICAgICAgICBnZW5TZWxlY3QoZWwsIHZhbHVlLCBtb2RpZmllcnMpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0YWcgPT09ICdpbnB1dCcgJiYgdHlwZSA9PT0gJ2NoZWNrYm94Jykge1xuICAgICAgICBnZW5DaGVja2JveE1vZGVsKGVsLCB2YWx1ZSwgbW9kaWZpZXJzKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodGFnID09PSAnaW5wdXQnICYmIHR5cGUgPT09ICdyYWRpbycpIHtcbiAgICAgICAgZ2VuUmFkaW9Nb2RlbChlbCwgdmFsdWUsIG1vZGlmaWVycyk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHRhZyA9PT0gJ2lucHV0JyB8fCB0YWcgPT09ICd0ZXh0YXJlYScpIHtcbiAgICAgICAgZ2VuRGVmYXVsdE1vZGVsKGVsLCB2YWx1ZSwgbW9kaWZpZXJzKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoIWNvbmZpZy5pc1Jlc2VydmVkVGFnKHRhZykpIHtcbiAgICAgICAgZ2VuQ29tcG9uZW50TW9kZWwoZWwsIHZhbHVlLCBtb2RpZmllcnMpO1xuICAgICAgICAvLyBjb21wb25lbnQgdi1tb2RlbCBkb2Vzbid0IG5lZWQgZXh0cmEgcnVudGltZVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgd2FybiQxKFwiPFwiLmNvbmNhdChlbC50YWcsIFwiIHYtbW9kZWw9XFxcIlwiKS5jb25jYXQodmFsdWUsIFwiXFxcIj46IFwiKSArXG4gICAgICAgICAgICBcInYtbW9kZWwgaXMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIGVsZW1lbnQgdHlwZS4gXCIgK1xuICAgICAgICAgICAgXCJJZiB5b3UgYXJlIHdvcmtpbmcgd2l0aCBjb250ZW50ZWRpdGFibGUsIGl0J3MgcmVjb21tZW5kZWQgdG8gXCIgK1xuICAgICAgICAgICAgJ3dyYXAgYSBsaWJyYXJ5IGRlZGljYXRlZCBmb3IgdGhhdCBwdXJwb3NlIGluc2lkZSBhIGN1c3RvbSBjb21wb25lbnQuJywgZWwucmF3QXR0cnNNYXBbJ3YtbW9kZWwnXSk7XG4gICAgfVxuICAgIC8vIGVuc3VyZSBydW50aW1lIGRpcmVjdGl2ZSBtZXRhZGF0YVxuICAgIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gZ2VuQ2hlY2tib3hNb2RlbChlbCwgdmFsdWUsIG1vZGlmaWVycykge1xuICAgIHZhciBudW1iZXIgPSBtb2RpZmllcnMgJiYgbW9kaWZpZXJzLm51bWJlcjtcbiAgICB2YXIgdmFsdWVCaW5kaW5nID0gZ2V0QmluZGluZ0F0dHIoZWwsICd2YWx1ZScpIHx8ICdudWxsJztcbiAgICB2YXIgdHJ1ZVZhbHVlQmluZGluZyA9IGdldEJpbmRpbmdBdHRyKGVsLCAndHJ1ZS12YWx1ZScpIHx8ICd0cnVlJztcbiAgICB2YXIgZmFsc2VWYWx1ZUJpbmRpbmcgPSBnZXRCaW5kaW5nQXR0cihlbCwgJ2ZhbHNlLXZhbHVlJykgfHwgJ2ZhbHNlJztcbiAgICBhZGRQcm9wKGVsLCAnY2hlY2tlZCcsIFwiQXJyYXkuaXNBcnJheShcIi5jb25jYXQodmFsdWUsIFwiKVwiKSArXG4gICAgICAgIFwiP19pKFwiLmNvbmNhdCh2YWx1ZSwgXCIsXCIpLmNvbmNhdCh2YWx1ZUJpbmRpbmcsIFwiKT4tMVwiKSArXG4gICAgICAgICh0cnVlVmFsdWVCaW5kaW5nID09PSAndHJ1ZSdcbiAgICAgICAgICAgID8gXCI6KFwiLmNvbmNhdCh2YWx1ZSwgXCIpXCIpXG4gICAgICAgICAgICA6IFwiOl9xKFwiLmNvbmNhdCh2YWx1ZSwgXCIsXCIpLmNvbmNhdCh0cnVlVmFsdWVCaW5kaW5nLCBcIilcIikpKTtcbiAgICBhZGRIYW5kbGVyKGVsLCAnY2hhbmdlJywgXCJ2YXIgJCRhPVwiLmNvbmNhdCh2YWx1ZSwgXCIsXCIpICtcbiAgICAgICAgJyQkZWw9JGV2ZW50LnRhcmdldCwnICtcbiAgICAgICAgXCIkJGM9JCRlbC5jaGVja2VkPyhcIi5jb25jYXQodHJ1ZVZhbHVlQmluZGluZywgXCIpOihcIikuY29uY2F0KGZhbHNlVmFsdWVCaW5kaW5nLCBcIik7XCIpICtcbiAgICAgICAgJ2lmKEFycmF5LmlzQXJyYXkoJCRhKSl7JyArXG4gICAgICAgIFwidmFyICQkdj1cIi5jb25jYXQobnVtYmVyID8gJ19uKCcgKyB2YWx1ZUJpbmRpbmcgKyAnKScgOiB2YWx1ZUJpbmRpbmcsIFwiLFwiKSArXG4gICAgICAgICckJGk9X2koJCRhLCQkdik7JyArXG4gICAgICAgIFwiaWYoJCRlbC5jaGVja2VkKXskJGk8MCYmKFwiLmNvbmNhdChnZW5Bc3NpZ25tZW50Q29kZSh2YWx1ZSwgJyQkYS5jb25jYXQoWyQkdl0pJyksIFwiKX1cIikgK1xuICAgICAgICBcImVsc2V7JCRpPi0xJiYoXCIuY29uY2F0KGdlbkFzc2lnbm1lbnRDb2RlKHZhbHVlLCAnJCRhLnNsaWNlKDAsJCRpKS5jb25jYXQoJCRhLnNsaWNlKCQkaSsxKSknKSwgXCIpfVwiKSArXG4gICAgICAgIFwifWVsc2V7XCIuY29uY2F0KGdlbkFzc2lnbm1lbnRDb2RlKHZhbHVlLCAnJCRjJyksIFwifVwiKSwgbnVsbCwgdHJ1ZSk7XG59XG5mdW5jdGlvbiBnZW5SYWRpb01vZGVsKGVsLCB2YWx1ZSwgbW9kaWZpZXJzKSB7XG4gICAgdmFyIG51bWJlciA9IG1vZGlmaWVycyAmJiBtb2RpZmllcnMubnVtYmVyO1xuICAgIHZhciB2YWx1ZUJpbmRpbmcgPSBnZXRCaW5kaW5nQXR0cihlbCwgJ3ZhbHVlJykgfHwgJ251bGwnO1xuICAgIHZhbHVlQmluZGluZyA9IG51bWJlciA/IFwiX24oXCIuY29uY2F0KHZhbHVlQmluZGluZywgXCIpXCIpIDogdmFsdWVCaW5kaW5nO1xuICAgIGFkZFByb3AoZWwsICdjaGVja2VkJywgXCJfcShcIi5jb25jYXQodmFsdWUsIFwiLFwiKS5jb25jYXQodmFsdWVCaW5kaW5nLCBcIilcIikpO1xuICAgIGFkZEhhbmRsZXIoZWwsICdjaGFuZ2UnLCBnZW5Bc3NpZ25tZW50Q29kZSh2YWx1ZSwgdmFsdWVCaW5kaW5nKSwgbnVsbCwgdHJ1ZSk7XG59XG5mdW5jdGlvbiBnZW5TZWxlY3QoZWwsIHZhbHVlLCBtb2RpZmllcnMpIHtcbiAgICB2YXIgbnVtYmVyID0gbW9kaWZpZXJzICYmIG1vZGlmaWVycy5udW1iZXI7XG4gICAgdmFyIHNlbGVjdGVkVmFsID0gXCJBcnJheS5wcm90b3R5cGUuZmlsdGVyXCIgK1xuICAgICAgICBcIi5jYWxsKCRldmVudC50YXJnZXQub3B0aW9ucyxmdW5jdGlvbihvKXtyZXR1cm4gby5zZWxlY3RlZH0pXCIgK1xuICAgICAgICBcIi5tYXAoZnVuY3Rpb24obyl7dmFyIHZhbCA9IFxcXCJfdmFsdWVcXFwiIGluIG8gPyBvLl92YWx1ZSA6IG8udmFsdWU7XCIgK1xuICAgICAgICBcInJldHVybiBcIi5jb25jYXQobnVtYmVyID8gJ19uKHZhbCknIDogJ3ZhbCcsIFwifSlcIik7XG4gICAgdmFyIGFzc2lnbm1lbnQgPSAnJGV2ZW50LnRhcmdldC5tdWx0aXBsZSA/ICQkc2VsZWN0ZWRWYWwgOiAkJHNlbGVjdGVkVmFsWzBdJztcbiAgICB2YXIgY29kZSA9IFwidmFyICQkc2VsZWN0ZWRWYWwgPSBcIi5jb25jYXQoc2VsZWN0ZWRWYWwsIFwiO1wiKTtcbiAgICBjb2RlID0gXCJcIi5jb25jYXQoY29kZSwgXCIgXCIpLmNvbmNhdChnZW5Bc3NpZ25tZW50Q29kZSh2YWx1ZSwgYXNzaWdubWVudCkpO1xuICAgIGFkZEhhbmRsZXIoZWwsICdjaGFuZ2UnLCBjb2RlLCBudWxsLCB0cnVlKTtcbn1cbmZ1bmN0aW9uIGdlbkRlZmF1bHRNb2RlbChlbCwgdmFsdWUsIG1vZGlmaWVycykge1xuICAgIHZhciB0eXBlID0gZWwuYXR0cnNNYXAudHlwZTtcbiAgICAvLyB3YXJuIGlmIHYtYmluZDp2YWx1ZSBjb25mbGljdHMgd2l0aCB2LW1vZGVsXG4gICAgLy8gZXhjZXB0IGZvciBpbnB1dHMgd2l0aCB2LWJpbmQ6dHlwZVxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIHZhciB2YWx1ZV8xID0gZWwuYXR0cnNNYXBbJ3YtYmluZDp2YWx1ZSddIHx8IGVsLmF0dHJzTWFwWyc6dmFsdWUnXTtcbiAgICAgICAgdmFyIHR5cGVCaW5kaW5nID0gZWwuYXR0cnNNYXBbJ3YtYmluZDp0eXBlJ10gfHwgZWwuYXR0cnNNYXBbJzp0eXBlJ107XG4gICAgICAgIGlmICh2YWx1ZV8xICYmICF0eXBlQmluZGluZykge1xuICAgICAgICAgICAgdmFyIGJpbmRpbmcgPSBlbC5hdHRyc01hcFsndi1iaW5kOnZhbHVlJ10gPyAndi1iaW5kOnZhbHVlJyA6ICc6dmFsdWUnO1xuICAgICAgICAgICAgd2FybiQxKFwiXCIuY29uY2F0KGJpbmRpbmcsIFwiPVxcXCJcIikuY29uY2F0KHZhbHVlXzEsIFwiXFxcIiBjb25mbGljdHMgd2l0aCB2LW1vZGVsIG9uIHRoZSBzYW1lIGVsZW1lbnQgXCIpICtcbiAgICAgICAgICAgICAgICAnYmVjYXVzZSB0aGUgbGF0dGVyIGFscmVhZHkgZXhwYW5kcyB0byBhIHZhbHVlIGJpbmRpbmcgaW50ZXJuYWxseScsIGVsLnJhd0F0dHJzTWFwW2JpbmRpbmddKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2YXIgX2EgPSBtb2RpZmllcnMgfHwge30sIGxhenkgPSBfYS5sYXp5LCBudW1iZXIgPSBfYS5udW1iZXIsIHRyaW0gPSBfYS50cmltO1xuICAgIHZhciBuZWVkQ29tcG9zaXRpb25HdWFyZCA9ICFsYXp5ICYmIHR5cGUgIT09ICdyYW5nZSc7XG4gICAgdmFyIGV2ZW50ID0gbGF6eSA/ICdjaGFuZ2UnIDogdHlwZSA9PT0gJ3JhbmdlJyA/IFJBTkdFX1RPS0VOIDogJ2lucHV0JztcbiAgICB2YXIgdmFsdWVFeHByZXNzaW9uID0gJyRldmVudC50YXJnZXQudmFsdWUnO1xuICAgIGlmICh0cmltKSB7XG4gICAgICAgIHZhbHVlRXhwcmVzc2lvbiA9IFwiJGV2ZW50LnRhcmdldC52YWx1ZS50cmltKClcIjtcbiAgICB9XG4gICAgaWYgKG51bWJlcikge1xuICAgICAgICB2YWx1ZUV4cHJlc3Npb24gPSBcIl9uKFwiLmNvbmNhdCh2YWx1ZUV4cHJlc3Npb24sIFwiKVwiKTtcbiAgICB9XG4gICAgdmFyIGNvZGUgPSBnZW5Bc3NpZ25tZW50Q29kZSh2YWx1ZSwgdmFsdWVFeHByZXNzaW9uKTtcbiAgICBpZiAobmVlZENvbXBvc2l0aW9uR3VhcmQpIHtcbiAgICAgICAgY29kZSA9IFwiaWYoJGV2ZW50LnRhcmdldC5jb21wb3NpbmcpcmV0dXJuO1wiLmNvbmNhdChjb2RlKTtcbiAgICB9XG4gICAgYWRkUHJvcChlbCwgJ3ZhbHVlJywgXCIoXCIuY29uY2F0KHZhbHVlLCBcIilcIikpO1xuICAgIGFkZEhhbmRsZXIoZWwsIGV2ZW50LCBjb2RlLCBudWxsLCB0cnVlKTtcbiAgICBpZiAodHJpbSB8fCBudW1iZXIpIHtcbiAgICAgICAgYWRkSGFuZGxlcihlbCwgJ2JsdXInLCAnJGZvcmNlVXBkYXRlKCknKTtcbiAgICB9XG59XG5cbi8vIG5vcm1hbGl6ZSB2LW1vZGVsIGV2ZW50IHRva2VucyB0aGF0IGNhbiBvbmx5IGJlIGRldGVybWluZWQgYXQgcnVudGltZS5cbi8vIGl0J3MgaW1wb3J0YW50IHRvIHBsYWNlIHRoZSBldmVudCBhcyB0aGUgZmlyc3QgaW4gdGhlIGFycmF5IGJlY2F1c2Vcbi8vIHRoZSB3aG9sZSBwb2ludCBpcyBlbnN1cmluZyB0aGUgdi1tb2RlbCBjYWxsYmFjayBnZXRzIGNhbGxlZCBiZWZvcmVcbi8vIHVzZXItYXR0YWNoZWQgaGFuZGxlcnMuXG5mdW5jdGlvbiBub3JtYWxpemVFdmVudHMob24pIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoaXNEZWYob25bUkFOR0VfVE9LRU5dKSkge1xuICAgICAgICAvLyBJRSBpbnB1dFt0eXBlPXJhbmdlXSBvbmx5IHN1cHBvcnRzIGBjaGFuZ2VgIGV2ZW50XG4gICAgICAgIHZhciBldmVudF8xID0gaXNJRSA/ICdjaGFuZ2UnIDogJ2lucHV0JztcbiAgICAgICAgb25bZXZlbnRfMV0gPSBbXS5jb25jYXQob25bUkFOR0VfVE9LRU5dLCBvbltldmVudF8xXSB8fCBbXSk7XG4gICAgICAgIGRlbGV0ZSBvbltSQU5HRV9UT0tFTl07XG4gICAgfVxuICAgIC8vIFRoaXMgd2FzIG9yaWdpbmFsbHkgaW50ZW5kZWQgdG8gZml4ICM0NTIxIGJ1dCBubyBsb25nZXIgbmVjZXNzYXJ5XG4gICAgLy8gYWZ0ZXIgMi41LiBLZWVwaW5nIGl0IGZvciBiYWNrd2FyZHMgY29tcGF0IHdpdGggZ2VuZXJhdGVkIGNvZGUgZnJvbSA8IDIuNFxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChpc0RlZihvbltDSEVDS0JPWF9SQURJT19UT0tFTl0pKSB7XG4gICAgICAgIG9uLmNoYW5nZSA9IFtdLmNvbmNhdChvbltDSEVDS0JPWF9SQURJT19UT0tFTl0sIG9uLmNoYW5nZSB8fCBbXSk7XG4gICAgICAgIGRlbGV0ZSBvbltDSEVDS0JPWF9SQURJT19UT0tFTl07XG4gICAgfVxufVxudmFyIHRhcmdldDtcbmZ1bmN0aW9uIGNyZWF0ZU9uY2VIYW5kbGVyKGV2ZW50LCBoYW5kbGVyLCBjYXB0dXJlKSB7XG4gICAgdmFyIF90YXJnZXQgPSB0YXJnZXQ7IC8vIHNhdmUgY3VycmVudCB0YXJnZXQgZWxlbWVudCBpbiBjbG9zdXJlXG4gICAgcmV0dXJuIGZ1bmN0aW9uIG9uY2VIYW5kbGVyKCkge1xuICAgICAgICB2YXIgcmVzID0gaGFuZGxlci5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICBpZiAocmVzICE9PSBudWxsKSB7XG4gICAgICAgICAgICByZW1vdmUoZXZlbnQsIG9uY2VIYW5kbGVyLCBjYXB0dXJlLCBfdGFyZ2V0KTtcbiAgICAgICAgfVxuICAgIH07XG59XG4vLyAjOTQ0NjogRmlyZWZveCA8PSA1MyAoaW4gcGFydGljdWxhciwgRVNSIDUyKSBoYXMgaW5jb3JyZWN0IEV2ZW50LnRpbWVTdGFtcFxuLy8gaW1wbGVtZW50YXRpb24gYW5kIGRvZXMgbm90IGZpcmUgbWljcm90YXNrcyBpbiBiZXR3ZWVuIGV2ZW50IHByb3BhZ2F0aW9uLCBzb1xuLy8gc2FmZSB0byBleGNsdWRlLlxudmFyIHVzZU1pY3JvdGFza0ZpeCA9IGlzVXNpbmdNaWNyb1Rhc2sgJiYgIShpc0ZGICYmIE51bWJlcihpc0ZGWzFdKSA8PSA1Myk7XG5mdW5jdGlvbiBhZGQobmFtZSwgaGFuZGxlciwgY2FwdHVyZSwgcGFzc2l2ZSkge1xuICAgIC8vIGFzeW5jIGVkZ2UgY2FzZSAjNjU2NjogaW5uZXIgY2xpY2sgZXZlbnQgdHJpZ2dlcnMgcGF0Y2gsIGV2ZW50IGhhbmRsZXJcbiAgICAvLyBhdHRhY2hlZCB0byBvdXRlciBlbGVtZW50IGR1cmluZyBwYXRjaCwgYW5kIHRyaWdnZXJlZCBhZ2Fpbi4gVGhpc1xuICAgIC8vIGhhcHBlbnMgYmVjYXVzZSBicm93c2VycyBmaXJlIG1pY3JvdGFzayB0aWNrcyBiZXR3ZWVuIGV2ZW50IHByb3BhZ2F0aW9uLlxuICAgIC8vIHRoZSBzb2x1dGlvbiBpcyBzaW1wbGU6IHdlIHNhdmUgdGhlIHRpbWVzdGFtcCB3aGVuIGEgaGFuZGxlciBpcyBhdHRhY2hlZCxcbiAgICAvLyBhbmQgdGhlIGhhbmRsZXIgd291bGQgb25seSBmaXJlIGlmIHRoZSBldmVudCBwYXNzZWQgdG8gaXQgd2FzIGZpcmVkXG4gICAgLy8gQUZURVIgaXQgd2FzIGF0dGFjaGVkLlxuICAgIGlmICh1c2VNaWNyb3Rhc2tGaXgpIHtcbiAgICAgICAgdmFyIGF0dGFjaGVkVGltZXN0YW1wXzEgPSBjdXJyZW50Rmx1c2hUaW1lc3RhbXA7XG4gICAgICAgIHZhciBvcmlnaW5hbF8xID0gaGFuZGxlcjtcbiAgICAgICAgLy9AdHMtZXhwZWN0LWVycm9yXG4gICAgICAgIGhhbmRsZXIgPSBvcmlnaW5hbF8xLl93cmFwcGVyID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIC8vIG5vIGJ1YmJsaW5nLCBzaG91bGQgYWx3YXlzIGZpcmUuXG4gICAgICAgICAgICAvLyB0aGlzIGlzIGp1c3QgYSBzYWZldHkgbmV0IGluIGNhc2UgZXZlbnQudGltZVN0YW1wIGlzIHVucmVsaWFibGUgaW5cbiAgICAgICAgICAgIC8vIGNlcnRhaW4gd2VpcmQgZW52aXJvbm1lbnRzLi4uXG4gICAgICAgICAgICBlLnRhcmdldCA9PT0gZS5jdXJyZW50VGFyZ2V0IHx8XG4gICAgICAgICAgICAgICAgLy8gZXZlbnQgaXMgZmlyZWQgYWZ0ZXIgaGFuZGxlciBhdHRhY2htZW50XG4gICAgICAgICAgICAgICAgZS50aW1lU3RhbXAgPj0gYXR0YWNoZWRUaW1lc3RhbXBfMSB8fFxuICAgICAgICAgICAgICAgIC8vIGJhaWwgZm9yIGVudmlyb25tZW50cyB0aGF0IGhhdmUgYnVnZ3kgZXZlbnQudGltZVN0YW1wIGltcGxlbWVudGF0aW9uc1xuICAgICAgICAgICAgICAgIC8vICM5NDYyIGlPUyA5IGJ1ZzogZXZlbnQudGltZVN0YW1wIGlzIDAgYWZ0ZXIgaGlzdG9yeS5wdXNoU3RhdGVcbiAgICAgICAgICAgICAgICAvLyAjOTY4MSBRdFdlYkVuZ2luZSBldmVudC50aW1lU3RhbXAgaXMgbmVnYXRpdmUgdmFsdWVcbiAgICAgICAgICAgICAgICBlLnRpbWVTdGFtcCA8PSAwIHx8XG4gICAgICAgICAgICAgICAgLy8gIzk0NDggYmFpbCBpZiBldmVudCBpcyBmaXJlZCBpbiBhbm90aGVyIGRvY3VtZW50IGluIGEgbXVsdGktcGFnZVxuICAgICAgICAgICAgICAgIC8vIGVsZWN0cm9uL253LmpzIGFwcCwgc2luY2UgZXZlbnQudGltZVN0YW1wIHdpbGwgYmUgdXNpbmcgYSBkaWZmZXJlbnRcbiAgICAgICAgICAgICAgICAvLyBzdGFydGluZyByZWZlcmVuY2VcbiAgICAgICAgICAgICAgICBlLnRhcmdldC5vd25lckRvY3VtZW50ICE9PSBkb2N1bWVudCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbF8xLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKG5hbWUsIGhhbmRsZXIsIHN1cHBvcnRzUGFzc2l2ZSA/IHsgY2FwdHVyZTogY2FwdHVyZSwgcGFzc2l2ZTogcGFzc2l2ZSB9IDogY2FwdHVyZSk7XG59XG5mdW5jdGlvbiByZW1vdmUobmFtZSwgaGFuZGxlciwgY2FwdHVyZSwgX3RhcmdldCkge1xuICAgIChfdGFyZ2V0IHx8IHRhcmdldCkucmVtb3ZlRXZlbnRMaXN0ZW5lcihuYW1lLCBcbiAgICAvL0B0cy1leHBlY3QtZXJyb3JcbiAgICBoYW5kbGVyLl93cmFwcGVyIHx8IGhhbmRsZXIsIGNhcHR1cmUpO1xufVxuZnVuY3Rpb24gdXBkYXRlRE9NTGlzdGVuZXJzKG9sZFZub2RlLCB2bm9kZSkge1xuICAgIGlmIChpc1VuZGVmKG9sZFZub2RlLmRhdGEub24pICYmIGlzVW5kZWYodm5vZGUuZGF0YS5vbikpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgb24gPSB2bm9kZS5kYXRhLm9uIHx8IHt9O1xuICAgIHZhciBvbGRPbiA9IG9sZFZub2RlLmRhdGEub24gfHwge307XG4gICAgLy8gdm5vZGUgaXMgZW1wdHkgd2hlbiByZW1vdmluZyBhbGwgbGlzdGVuZXJzLFxuICAgIC8vIGFuZCB1c2Ugb2xkIHZub2RlIGRvbSBlbGVtZW50XG4gICAgdGFyZ2V0ID0gdm5vZGUuZWxtIHx8IG9sZFZub2RlLmVsbTtcbiAgICBub3JtYWxpemVFdmVudHMob24pO1xuICAgIHVwZGF0ZUxpc3RlbmVycyhvbiwgb2xkT24sIGFkZCwgcmVtb3ZlLCBjcmVhdGVPbmNlSGFuZGxlciwgdm5vZGUuY29udGV4dCk7XG4gICAgdGFyZ2V0ID0gdW5kZWZpbmVkO1xufVxudmFyIGV2ZW50cyA9IHtcbiAgICBjcmVhdGU6IHVwZGF0ZURPTUxpc3RlbmVycyxcbiAgICB1cGRhdGU6IHVwZGF0ZURPTUxpc3RlbmVycyxcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGVtcHR5Tm9kZSBoYXMgYWN0dWFsbHkgZGF0YVxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICh2bm9kZSkgeyByZXR1cm4gdXBkYXRlRE9NTGlzdGVuZXJzKHZub2RlLCBlbXB0eU5vZGUpOyB9XG59O1xuXG52YXIgc3ZnQ29udGFpbmVyO1xuZnVuY3Rpb24gdXBkYXRlRE9NUHJvcHMob2xkVm5vZGUsIHZub2RlKSB7XG4gICAgaWYgKGlzVW5kZWYob2xkVm5vZGUuZGF0YS5kb21Qcm9wcykgJiYgaXNVbmRlZih2bm9kZS5kYXRhLmRvbVByb3BzKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBrZXksIGN1cjtcbiAgICB2YXIgZWxtID0gdm5vZGUuZWxtO1xuICAgIHZhciBvbGRQcm9wcyA9IG9sZFZub2RlLmRhdGEuZG9tUHJvcHMgfHwge307XG4gICAgdmFyIHByb3BzID0gdm5vZGUuZGF0YS5kb21Qcm9wcyB8fCB7fTtcbiAgICAvLyBjbG9uZSBvYnNlcnZlZCBvYmplY3RzLCBhcyB0aGUgdXNlciBwcm9iYWJseSB3YW50cyB0byBtdXRhdGUgaXRcbiAgICBpZiAoaXNEZWYocHJvcHMuX19vYl9fKSB8fCBpc1RydWUocHJvcHMuX3ZfYXR0cl9wcm94eSkpIHtcbiAgICAgICAgcHJvcHMgPSB2bm9kZS5kYXRhLmRvbVByb3BzID0gZXh0ZW5kKHt9LCBwcm9wcyk7XG4gICAgfVxuICAgIGZvciAoa2V5IGluIG9sZFByb3BzKSB7XG4gICAgICAgIGlmICghKGtleSBpbiBwcm9wcykpIHtcbiAgICAgICAgICAgIGVsbVtrZXldID0gJyc7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZm9yIChrZXkgaW4gcHJvcHMpIHtcbiAgICAgICAgY3VyID0gcHJvcHNba2V5XTtcbiAgICAgICAgLy8gaWdub3JlIGNoaWxkcmVuIGlmIHRoZSBub2RlIGhhcyB0ZXh0Q29udGVudCBvciBpbm5lckhUTUwsXG4gICAgICAgIC8vIGFzIHRoZXNlIHdpbGwgdGhyb3cgYXdheSBleGlzdGluZyBET00gbm9kZXMgYW5kIGNhdXNlIHJlbW92YWwgZXJyb3JzXG4gICAgICAgIC8vIG9uIHN1YnNlcXVlbnQgcGF0Y2hlcyAoIzMzNjApXG4gICAgICAgIGlmIChrZXkgPT09ICd0ZXh0Q29udGVudCcgfHwga2V5ID09PSAnaW5uZXJIVE1MJykge1xuICAgICAgICAgICAgaWYgKHZub2RlLmNoaWxkcmVuKVxuICAgICAgICAgICAgICAgIHZub2RlLmNoaWxkcmVuLmxlbmd0aCA9IDA7XG4gICAgICAgICAgICBpZiAoY3VyID09PSBvbGRQcm9wc1trZXldKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgLy8gIzY2MDEgd29yayBhcm91bmQgQ2hyb21lIHZlcnNpb24gPD0gNTUgYnVnIHdoZXJlIHNpbmdsZSB0ZXh0Tm9kZVxuICAgICAgICAgICAgLy8gcmVwbGFjZWQgYnkgaW5uZXJIVE1ML3RleHRDb250ZW50IHJldGFpbnMgaXRzIHBhcmVudE5vZGUgcHJvcGVydHlcbiAgICAgICAgICAgIGlmIChlbG0uY2hpbGROb2Rlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICBlbG0ucmVtb3ZlQ2hpbGQoZWxtLmNoaWxkTm9kZXNbMF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChrZXkgPT09ICd2YWx1ZScgJiYgZWxtLnRhZ05hbWUgIT09ICdQUk9HUkVTUycpIHtcbiAgICAgICAgICAgIC8vIHN0b3JlIHZhbHVlIGFzIF92YWx1ZSBhcyB3ZWxsIHNpbmNlXG4gICAgICAgICAgICAvLyBub24tc3RyaW5nIHZhbHVlcyB3aWxsIGJlIHN0cmluZ2lmaWVkXG4gICAgICAgICAgICBlbG0uX3ZhbHVlID0gY3VyO1xuICAgICAgICAgICAgLy8gYXZvaWQgcmVzZXR0aW5nIGN1cnNvciBwb3NpdGlvbiB3aGVuIHZhbHVlIGlzIHRoZSBzYW1lXG4gICAgICAgICAgICB2YXIgc3RyQ3VyID0gaXNVbmRlZihjdXIpID8gJycgOiBTdHJpbmcoY3VyKTtcbiAgICAgICAgICAgIGlmIChzaG91bGRVcGRhdGVWYWx1ZShlbG0sIHN0ckN1cikpIHtcbiAgICAgICAgICAgICAgICBlbG0udmFsdWUgPSBzdHJDdXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoa2V5ID09PSAnaW5uZXJIVE1MJyAmJlxuICAgICAgICAgICAgaXNTVkcoZWxtLnRhZ05hbWUpICYmXG4gICAgICAgICAgICBpc1VuZGVmKGVsbS5pbm5lckhUTUwpKSB7XG4gICAgICAgICAgICAvLyBJRSBkb2Vzbid0IHN1cHBvcnQgaW5uZXJIVE1MIGZvciBTVkcgZWxlbWVudHNcbiAgICAgICAgICAgIHN2Z0NvbnRhaW5lciA9IHN2Z0NvbnRhaW5lciB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHN2Z0NvbnRhaW5lci5pbm5lckhUTUwgPSBcIjxzdmc+XCIuY29uY2F0KGN1ciwgXCI8L3N2Zz5cIik7XG4gICAgICAgICAgICB2YXIgc3ZnID0gc3ZnQ29udGFpbmVyLmZpcnN0Q2hpbGQ7XG4gICAgICAgICAgICB3aGlsZSAoZWxtLmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgICAgICAgICBlbG0ucmVtb3ZlQ2hpbGQoZWxtLmZpcnN0Q2hpbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2hpbGUgKHN2Zy5maXJzdENoaWxkKSB7XG4gICAgICAgICAgICAgICAgZWxtLmFwcGVuZENoaWxkKHN2Zy5maXJzdENoaWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChcbiAgICAgICAgLy8gc2tpcCB0aGUgdXBkYXRlIGlmIG9sZCBhbmQgbmV3IFZET00gc3RhdGUgaXMgdGhlIHNhbWUuXG4gICAgICAgIC8vIGB2YWx1ZWAgaXMgaGFuZGxlZCBzZXBhcmF0ZWx5IGJlY2F1c2UgdGhlIERPTSB2YWx1ZSBtYXkgYmUgdGVtcG9yYXJpbHlcbiAgICAgICAgLy8gb3V0IG9mIHN5bmMgd2l0aCBWRE9NIHN0YXRlIGR1ZSB0byBmb2N1cywgY29tcG9zaXRpb24gYW5kIG1vZGlmaWVycy5cbiAgICAgICAgLy8gVGhpcyAgIzQ1MjEgYnkgc2tpcHBpbmcgdGhlIHVubmVjZXNzYXJ5IGBjaGVja2VkYCB1cGRhdGUuXG4gICAgICAgIGN1ciAhPT0gb2xkUHJvcHNba2V5XSkge1xuICAgICAgICAgICAgLy8gc29tZSBwcm9wZXJ0eSB1cGRhdGVzIGNhbiB0aHJvd1xuICAgICAgICAgICAgLy8gZS5nLiBgdmFsdWVgIG9uIDxwcm9ncmVzcz4gdy8gbm9uLWZpbml0ZSB2YWx1ZVxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBlbG1ba2V5XSA9IGN1cjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7IH1cbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIHNob3VsZFVwZGF0ZVZhbHVlKGVsbSwgY2hlY2tWYWwpIHtcbiAgICByZXR1cm4gKFxuICAgIC8vQHRzLWV4cGVjdC1lcnJvclxuICAgICFlbG0uY29tcG9zaW5nICYmXG4gICAgICAgIChlbG0udGFnTmFtZSA9PT0gJ09QVElPTicgfHxcbiAgICAgICAgICAgIGlzTm90SW5Gb2N1c0FuZERpcnR5KGVsbSwgY2hlY2tWYWwpIHx8XG4gICAgICAgICAgICBpc0RpcnR5V2l0aE1vZGlmaWVycyhlbG0sIGNoZWNrVmFsKSkpO1xufVxuZnVuY3Rpb24gaXNOb3RJbkZvY3VzQW5kRGlydHkoZWxtLCBjaGVja1ZhbCkge1xuICAgIC8vIHJldHVybiB0cnVlIHdoZW4gdGV4dGJveCAoLm51bWJlciBhbmQgLnRyaW0pIGxvc2VzIGZvY3VzIGFuZCBpdHMgdmFsdWUgaXNcbiAgICAvLyBub3QgZXF1YWwgdG8gdGhlIHVwZGF0ZWQgdmFsdWVcbiAgICB2YXIgbm90SW5Gb2N1cyA9IHRydWU7XG4gICAgLy8gIzYxNTdcbiAgICAvLyB3b3JrIGFyb3VuZCBJRSBidWcgd2hlbiBhY2Nlc3NpbmcgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBpbiBhbiBpZnJhbWVcbiAgICB0cnkge1xuICAgICAgICBub3RJbkZvY3VzID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAhPT0gZWxtO1xuICAgIH1cbiAgICBjYXRjaCAoZSkgeyB9XG4gICAgcmV0dXJuIG5vdEluRm9jdXMgJiYgZWxtLnZhbHVlICE9PSBjaGVja1ZhbDtcbn1cbmZ1bmN0aW9uIGlzRGlydHlXaXRoTW9kaWZpZXJzKGVsbSwgbmV3VmFsKSB7XG4gICAgdmFyIHZhbHVlID0gZWxtLnZhbHVlO1xuICAgIHZhciBtb2RpZmllcnMgPSBlbG0uX3ZNb2RpZmllcnM7IC8vIGluamVjdGVkIGJ5IHYtbW9kZWwgcnVudGltZVxuICAgIGlmIChpc0RlZihtb2RpZmllcnMpKSB7XG4gICAgICAgIGlmIChtb2RpZmllcnMubnVtYmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gdG9OdW1iZXIodmFsdWUpICE9PSB0b051bWJlcihuZXdWYWwpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtb2RpZmllcnMudHJpbSkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnRyaW0oKSAhPT0gbmV3VmFsLnRyaW0oKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdmFsdWUgIT09IG5ld1ZhbDtcbn1cbnZhciBkb21Qcm9wcyA9IHtcbiAgICBjcmVhdGU6IHVwZGF0ZURPTVByb3BzLFxuICAgIHVwZGF0ZTogdXBkYXRlRE9NUHJvcHNcbn07XG5cbnZhciBwYXJzZVN0eWxlVGV4dCA9IGNhY2hlZChmdW5jdGlvbiAoY3NzVGV4dCkge1xuICAgIHZhciByZXMgPSB7fTtcbiAgICB2YXIgbGlzdERlbGltaXRlciA9IC87KD8hW14oXSpcXCkpL2c7XG4gICAgdmFyIHByb3BlcnR5RGVsaW1pdGVyID0gLzooLispLztcbiAgICBjc3NUZXh0LnNwbGl0KGxpc3REZWxpbWl0ZXIpLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgICAgIHZhciB0bXAgPSBpdGVtLnNwbGl0KHByb3BlcnR5RGVsaW1pdGVyKTtcbiAgICAgICAgICAgIHRtcC5sZW5ndGggPiAxICYmIChyZXNbdG1wWzBdLnRyaW0oKV0gPSB0bXBbMV0udHJpbSgpKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXM7XG59KTtcbi8vIG1lcmdlIHN0YXRpYyBhbmQgZHluYW1pYyBzdHlsZSBkYXRhIG9uIHRoZSBzYW1lIHZub2RlXG5mdW5jdGlvbiBub3JtYWxpemVTdHlsZURhdGEoZGF0YSkge1xuICAgIHZhciBzdHlsZSA9IG5vcm1hbGl6ZVN0eWxlQmluZGluZyhkYXRhLnN0eWxlKTtcbiAgICAvLyBzdGF0aWMgc3R5bGUgaXMgcHJlLXByb2Nlc3NlZCBpbnRvIGFuIG9iamVjdCBkdXJpbmcgY29tcGlsYXRpb25cbiAgICAvLyBhbmQgaXMgYWx3YXlzIGEgZnJlc2ggb2JqZWN0LCBzbyBpdCdzIHNhZmUgdG8gbWVyZ2UgaW50byBpdFxuICAgIHJldHVybiBkYXRhLnN0YXRpY1N0eWxlID8gZXh0ZW5kKGRhdGEuc3RhdGljU3R5bGUsIHN0eWxlKSA6IHN0eWxlO1xufVxuLy8gbm9ybWFsaXplIHBvc3NpYmxlIGFycmF5IC8gc3RyaW5nIHZhbHVlcyBpbnRvIE9iamVjdFxuZnVuY3Rpb24gbm9ybWFsaXplU3R5bGVCaW5kaW5nKGJpbmRpbmdTdHlsZSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGJpbmRpbmdTdHlsZSkpIHtcbiAgICAgICAgcmV0dXJuIHRvT2JqZWN0KGJpbmRpbmdTdHlsZSk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgYmluZGluZ1N0eWxlID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gcGFyc2VTdHlsZVRleHQoYmluZGluZ1N0eWxlKTtcbiAgICB9XG4gICAgcmV0dXJuIGJpbmRpbmdTdHlsZTtcbn1cbi8qKlxuICogcGFyZW50IGNvbXBvbmVudCBzdHlsZSBzaG91bGQgYmUgYWZ0ZXIgY2hpbGQnc1xuICogc28gdGhhdCBwYXJlbnQgY29tcG9uZW50J3Mgc3R5bGUgY291bGQgb3ZlcnJpZGUgaXRcbiAqL1xuZnVuY3Rpb24gZ2V0U3R5bGUodm5vZGUsIGNoZWNrQ2hpbGQpIHtcbiAgICB2YXIgcmVzID0ge307XG4gICAgdmFyIHN0eWxlRGF0YTtcbiAgICBpZiAoY2hlY2tDaGlsZCkge1xuICAgICAgICB2YXIgY2hpbGROb2RlID0gdm5vZGU7XG4gICAgICAgIHdoaWxlIChjaGlsZE5vZGUuY29tcG9uZW50SW5zdGFuY2UpIHtcbiAgICAgICAgICAgIGNoaWxkTm9kZSA9IGNoaWxkTm9kZS5jb21wb25lbnRJbnN0YW5jZS5fdm5vZGU7XG4gICAgICAgICAgICBpZiAoY2hpbGROb2RlICYmXG4gICAgICAgICAgICAgICAgY2hpbGROb2RlLmRhdGEgJiZcbiAgICAgICAgICAgICAgICAoc3R5bGVEYXRhID0gbm9ybWFsaXplU3R5bGVEYXRhKGNoaWxkTm9kZS5kYXRhKSkpIHtcbiAgICAgICAgICAgICAgICBleHRlbmQocmVzLCBzdHlsZURhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGlmICgoc3R5bGVEYXRhID0gbm9ybWFsaXplU3R5bGVEYXRhKHZub2RlLmRhdGEpKSkge1xuICAgICAgICBleHRlbmQocmVzLCBzdHlsZURhdGEpO1xuICAgIH1cbiAgICB2YXIgcGFyZW50Tm9kZSA9IHZub2RlO1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgcGFyZW50Tm9kZS5wYXJlbnQgbm90IFZOb2RlV2l0aERhdGFcbiAgICB3aGlsZSAoKHBhcmVudE5vZGUgPSBwYXJlbnROb2RlLnBhcmVudCkpIHtcbiAgICAgICAgaWYgKHBhcmVudE5vZGUuZGF0YSAmJiAoc3R5bGVEYXRhID0gbm9ybWFsaXplU3R5bGVEYXRhKHBhcmVudE5vZGUuZGF0YSkpKSB7XG4gICAgICAgICAgICBleHRlbmQocmVzLCBzdHlsZURhdGEpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG5cbnZhciBjc3NWYXJSRSA9IC9eLS0vO1xudmFyIGltcG9ydGFudFJFID0gL1xccyohaW1wb3J0YW50JC87XG52YXIgc2V0UHJvcCA9IGZ1bmN0aW9uIChlbCwgbmFtZSwgdmFsKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGNzc1ZhclJFLnRlc3QobmFtZSkpIHtcbiAgICAgICAgZWwuc3R5bGUuc2V0UHJvcGVydHkobmFtZSwgdmFsKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaW1wb3J0YW50UkUudGVzdCh2YWwpKSB7XG4gICAgICAgIGVsLnN0eWxlLnNldFByb3BlcnR5KGh5cGhlbmF0ZShuYW1lKSwgdmFsLnJlcGxhY2UoaW1wb3J0YW50UkUsICcnKSwgJ2ltcG9ydGFudCcpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIG5vcm1hbGl6ZWROYW1lID0gbm9ybWFsaXplKG5hbWUpO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICAgICAgICAvLyBTdXBwb3J0IHZhbHVlcyBhcnJheSBjcmVhdGVkIGJ5IGF1dG9wcmVmaXhlciwgZS5nLlxuICAgICAgICAgICAgLy8ge2Rpc3BsYXk6IFtcIi13ZWJraXQtYm94XCIsIFwiLW1zLWZsZXhib3hcIiwgXCJmbGV4XCJdfVxuICAgICAgICAgICAgLy8gU2V0IHRoZW0gb25lIGJ5IG9uZSwgYW5kIHRoZSBicm93c2VyIHdpbGwgb25seSBzZXQgdGhvc2UgaXQgY2FuIHJlY29nbml6ZVxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHZhbC5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgICAgIGVsLnN0eWxlW25vcm1hbGl6ZWROYW1lXSA9IHZhbFtpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGVsLnN0eWxlW25vcm1hbGl6ZWROYW1lXSA9IHZhbDtcbiAgICAgICAgfVxuICAgIH1cbn07XG52YXIgdmVuZG9yTmFtZXMgPSBbJ1dlYmtpdCcsICdNb3onLCAnbXMnXTtcbnZhciBlbXB0eVN0eWxlO1xudmFyIG5vcm1hbGl6ZSA9IGNhY2hlZChmdW5jdGlvbiAocHJvcCkge1xuICAgIGVtcHR5U3R5bGUgPSBlbXB0eVN0eWxlIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLnN0eWxlO1xuICAgIHByb3AgPSBjYW1lbGl6ZShwcm9wKTtcbiAgICBpZiAocHJvcCAhPT0gJ2ZpbHRlcicgJiYgcHJvcCBpbiBlbXB0eVN0eWxlKSB7XG4gICAgICAgIHJldHVybiBwcm9wO1xuICAgIH1cbiAgICB2YXIgY2FwTmFtZSA9IHByb3AuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBwcm9wLnNsaWNlKDEpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmVuZG9yTmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIG5hbWVfMSA9IHZlbmRvck5hbWVzW2ldICsgY2FwTmFtZTtcbiAgICAgICAgaWYgKG5hbWVfMSBpbiBlbXB0eVN0eWxlKSB7XG4gICAgICAgICAgICByZXR1cm4gbmFtZV8xO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5mdW5jdGlvbiB1cGRhdGVTdHlsZShvbGRWbm9kZSwgdm5vZGUpIHtcbiAgICB2YXIgZGF0YSA9IHZub2RlLmRhdGE7XG4gICAgdmFyIG9sZERhdGEgPSBvbGRWbm9kZS5kYXRhO1xuICAgIGlmIChpc1VuZGVmKGRhdGEuc3RhdGljU3R5bGUpICYmXG4gICAgICAgIGlzVW5kZWYoZGF0YS5zdHlsZSkgJiZcbiAgICAgICAgaXNVbmRlZihvbGREYXRhLnN0YXRpY1N0eWxlKSAmJlxuICAgICAgICBpc1VuZGVmKG9sZERhdGEuc3R5bGUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIGN1ciwgbmFtZTtcbiAgICB2YXIgZWwgPSB2bm9kZS5lbG07XG4gICAgdmFyIG9sZFN0YXRpY1N0eWxlID0gb2xkRGF0YS5zdGF0aWNTdHlsZTtcbiAgICB2YXIgb2xkU3R5bGVCaW5kaW5nID0gb2xkRGF0YS5ub3JtYWxpemVkU3R5bGUgfHwgb2xkRGF0YS5zdHlsZSB8fCB7fTtcbiAgICAvLyBpZiBzdGF0aWMgc3R5bGUgZXhpc3RzLCBzdHlsZWJpbmRpbmcgYWxyZWFkeSBtZXJnZWQgaW50byBpdCB3aGVuIGRvaW5nIG5vcm1hbGl6ZVN0eWxlRGF0YVxuICAgIHZhciBvbGRTdHlsZSA9IG9sZFN0YXRpY1N0eWxlIHx8IG9sZFN0eWxlQmluZGluZztcbiAgICB2YXIgc3R5bGUgPSBub3JtYWxpemVTdHlsZUJpbmRpbmcodm5vZGUuZGF0YS5zdHlsZSkgfHwge307XG4gICAgLy8gc3RvcmUgbm9ybWFsaXplZCBzdHlsZSB1bmRlciBhIGRpZmZlcmVudCBrZXkgZm9yIG5leHQgZGlmZlxuICAgIC8vIG1ha2Ugc3VyZSB0byBjbG9uZSBpdCBpZiBpdCdzIHJlYWN0aXZlLCBzaW5jZSB0aGUgdXNlciBsaWtlbHkgd2FudHNcbiAgICAvLyB0byBtdXRhdGUgaXQuXG4gICAgdm5vZGUuZGF0YS5ub3JtYWxpemVkU3R5bGUgPSBpc0RlZihzdHlsZS5fX29iX18pID8gZXh0ZW5kKHt9LCBzdHlsZSkgOiBzdHlsZTtcbiAgICB2YXIgbmV3U3R5bGUgPSBnZXRTdHlsZSh2bm9kZSwgdHJ1ZSk7XG4gICAgZm9yIChuYW1lIGluIG9sZFN0eWxlKSB7XG4gICAgICAgIGlmIChpc1VuZGVmKG5ld1N0eWxlW25hbWVdKSkge1xuICAgICAgICAgICAgc2V0UHJvcChlbCwgbmFtZSwgJycpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZvciAobmFtZSBpbiBuZXdTdHlsZSkge1xuICAgICAgICBjdXIgPSBuZXdTdHlsZVtuYW1lXTtcbiAgICAgICAgaWYgKGN1ciAhPT0gb2xkU3R5bGVbbmFtZV0pIHtcbiAgICAgICAgICAgIC8vIGllOSBzZXR0aW5nIHRvIG51bGwgaGFzIG5vIGVmZmVjdCwgbXVzdCB1c2UgZW1wdHkgc3RyaW5nXG4gICAgICAgICAgICBzZXRQcm9wKGVsLCBuYW1lLCBjdXIgPT0gbnVsbCA/ICcnIDogY3VyKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbnZhciBzdHlsZSQxID0ge1xuICAgIGNyZWF0ZTogdXBkYXRlU3R5bGUsXG4gICAgdXBkYXRlOiB1cGRhdGVTdHlsZVxufTtcblxudmFyIHdoaXRlc3BhY2VSRSQxID0gL1xccysvO1xuLyoqXG4gKiBBZGQgY2xhc3Mgd2l0aCBjb21wYXRpYmlsaXR5IGZvciBTVkcgc2luY2UgY2xhc3NMaXN0IGlzIG5vdCBzdXBwb3J0ZWQgb25cbiAqIFNWRyBlbGVtZW50cyBpbiBJRVxuICovXG5mdW5jdGlvbiBhZGRDbGFzcyhlbCwgY2xzKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKCFjbHMgfHwgIShjbHMgPSBjbHMudHJpbSgpKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKGVsLmNsYXNzTGlzdCkge1xuICAgICAgICBpZiAoY2xzLmluZGV4T2YoJyAnKSA+IC0xKSB7XG4gICAgICAgICAgICBjbHMuc3BsaXQod2hpdGVzcGFjZVJFJDEpLmZvckVhY2goZnVuY3Rpb24gKGMpIHsgcmV0dXJuIGVsLmNsYXNzTGlzdC5hZGQoYyk7IH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZWwuY2xhc3NMaXN0LmFkZChjbHMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB2YXIgY3VyID0gXCIgXCIuY29uY2F0KGVsLmdldEF0dHJpYnV0ZSgnY2xhc3MnKSB8fCAnJywgXCIgXCIpO1xuICAgICAgICBpZiAoY3VyLmluZGV4T2YoJyAnICsgY2xzICsgJyAnKSA8IDApIHtcbiAgICAgICAgICAgIGVsLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAoY3VyICsgY2xzKS50cmltKCkpO1xuICAgICAgICB9XG4gICAgfVxufVxuLyoqXG4gKiBSZW1vdmUgY2xhc3Mgd2l0aCBjb21wYXRpYmlsaXR5IGZvciBTVkcgc2luY2UgY2xhc3NMaXN0IGlzIG5vdCBzdXBwb3J0ZWQgb25cbiAqIFNWRyBlbGVtZW50cyBpbiBJRVxuICovXG5mdW5jdGlvbiByZW1vdmVDbGFzcyhlbCwgY2xzKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKCFjbHMgfHwgIShjbHMgPSBjbHMudHJpbSgpKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKGVsLmNsYXNzTGlzdCkge1xuICAgICAgICBpZiAoY2xzLmluZGV4T2YoJyAnKSA+IC0xKSB7XG4gICAgICAgICAgICBjbHMuc3BsaXQod2hpdGVzcGFjZVJFJDEpLmZvckVhY2goZnVuY3Rpb24gKGMpIHsgcmV0dXJuIGVsLmNsYXNzTGlzdC5yZW1vdmUoYyk7IH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZWwuY2xhc3NMaXN0LnJlbW92ZShjbHMpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZWwuY2xhc3NMaXN0Lmxlbmd0aCkge1xuICAgICAgICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKCdjbGFzcycpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB2YXIgY3VyID0gXCIgXCIuY29uY2F0KGVsLmdldEF0dHJpYnV0ZSgnY2xhc3MnKSB8fCAnJywgXCIgXCIpO1xuICAgICAgICB2YXIgdGFyID0gJyAnICsgY2xzICsgJyAnO1xuICAgICAgICB3aGlsZSAoY3VyLmluZGV4T2YodGFyKSA+PSAwKSB7XG4gICAgICAgICAgICBjdXIgPSBjdXIucmVwbGFjZSh0YXIsICcgJyk7XG4gICAgICAgIH1cbiAgICAgICAgY3VyID0gY3VyLnRyaW0oKTtcbiAgICAgICAgaWYgKGN1cikge1xuICAgICAgICAgICAgZWwuc2V0QXR0cmlidXRlKCdjbGFzcycsIGN1cik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoJ2NsYXNzJyk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVUcmFuc2l0aW9uKGRlZikge1xuICAgIGlmICghZGVmKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAodHlwZW9mIGRlZiA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgdmFyIHJlcyA9IHt9O1xuICAgICAgICBpZiAoZGVmLmNzcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGV4dGVuZChyZXMsIGF1dG9Dc3NUcmFuc2l0aW9uKGRlZi5uYW1lIHx8ICd2JykpO1xuICAgICAgICB9XG4gICAgICAgIGV4dGVuZChyZXMsIGRlZik7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBkZWYgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBhdXRvQ3NzVHJhbnNpdGlvbihkZWYpO1xuICAgIH1cbn1cbnZhciBhdXRvQ3NzVHJhbnNpdGlvbiA9IGNhY2hlZChmdW5jdGlvbiAobmFtZSkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGVudGVyQ2xhc3M6IFwiXCIuY29uY2F0KG5hbWUsIFwiLWVudGVyXCIpLFxuICAgICAgICBlbnRlclRvQ2xhc3M6IFwiXCIuY29uY2F0KG5hbWUsIFwiLWVudGVyLXRvXCIpLFxuICAgICAgICBlbnRlckFjdGl2ZUNsYXNzOiBcIlwiLmNvbmNhdChuYW1lLCBcIi1lbnRlci1hY3RpdmVcIiksXG4gICAgICAgIGxlYXZlQ2xhc3M6IFwiXCIuY29uY2F0KG5hbWUsIFwiLWxlYXZlXCIpLFxuICAgICAgICBsZWF2ZVRvQ2xhc3M6IFwiXCIuY29uY2F0KG5hbWUsIFwiLWxlYXZlLXRvXCIpLFxuICAgICAgICBsZWF2ZUFjdGl2ZUNsYXNzOiBcIlwiLmNvbmNhdChuYW1lLCBcIi1sZWF2ZS1hY3RpdmVcIilcbiAgICB9O1xufSk7XG52YXIgaGFzVHJhbnNpdGlvbiA9IGluQnJvd3NlciAmJiAhaXNJRTk7XG52YXIgVFJBTlNJVElPTiA9ICd0cmFuc2l0aW9uJztcbnZhciBBTklNQVRJT04gPSAnYW5pbWF0aW9uJztcbi8vIFRyYW5zaXRpb24gcHJvcGVydHkvZXZlbnQgc25pZmZpbmdcbnZhciB0cmFuc2l0aW9uUHJvcCA9ICd0cmFuc2l0aW9uJztcbnZhciB0cmFuc2l0aW9uRW5kRXZlbnQgPSAndHJhbnNpdGlvbmVuZCc7XG52YXIgYW5pbWF0aW9uUHJvcCA9ICdhbmltYXRpb24nO1xudmFyIGFuaW1hdGlvbkVuZEV2ZW50ID0gJ2FuaW1hdGlvbmVuZCc7XG5pZiAoaGFzVHJhbnNpdGlvbikge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICh3aW5kb3cub250cmFuc2l0aW9uZW5kID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgd2luZG93Lm9ud2Via2l0dHJhbnNpdGlvbmVuZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRyYW5zaXRpb25Qcm9wID0gJ1dlYmtpdFRyYW5zaXRpb24nO1xuICAgICAgICB0cmFuc2l0aW9uRW5kRXZlbnQgPSAnd2Via2l0VHJhbnNpdGlvbkVuZCc7XG4gICAgfVxuICAgIGlmICh3aW5kb3cub25hbmltYXRpb25lbmQgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICB3aW5kb3cub253ZWJraXRhbmltYXRpb25lbmQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhbmltYXRpb25Qcm9wID0gJ1dlYmtpdEFuaW1hdGlvbic7XG4gICAgICAgIGFuaW1hdGlvbkVuZEV2ZW50ID0gJ3dlYmtpdEFuaW1hdGlvbkVuZCc7XG4gICAgfVxufVxuLy8gYmluZGluZyB0byB3aW5kb3cgaXMgbmVjZXNzYXJ5IHRvIG1ha2UgaG90IHJlbG9hZCB3b3JrIGluIElFIGluIHN0cmljdCBtb2RlXG52YXIgcmFmID0gaW5Ccm93c2VyXG4gICAgPyB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lXG4gICAgICAgID8gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdylcbiAgICAgICAgOiBzZXRUaW1lb3V0XG4gICAgOiAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLyBmdW5jdGlvbiAoLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8gZm4pIHsgcmV0dXJuIGZuKCk7IH07XG5mdW5jdGlvbiBuZXh0RnJhbWUoZm4pIHtcbiAgICByYWYoZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgIHJhZihmbik7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBhZGRUcmFuc2l0aW9uQ2xhc3MoZWwsIGNscykge1xuICAgIHZhciB0cmFuc2l0aW9uQ2xhc3NlcyA9IGVsLl90cmFuc2l0aW9uQ2xhc3NlcyB8fCAoZWwuX3RyYW5zaXRpb25DbGFzc2VzID0gW10pO1xuICAgIGlmICh0cmFuc2l0aW9uQ2xhc3Nlcy5pbmRleE9mKGNscykgPCAwKSB7XG4gICAgICAgIHRyYW5zaXRpb25DbGFzc2VzLnB1c2goY2xzKTtcbiAgICAgICAgYWRkQ2xhc3MoZWwsIGNscyk7XG4gICAgfVxufVxuZnVuY3Rpb24gcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCBjbHMpIHtcbiAgICBpZiAoZWwuX3RyYW5zaXRpb25DbGFzc2VzKSB7XG4gICAgICAgIHJlbW92ZSQyKGVsLl90cmFuc2l0aW9uQ2xhc3NlcywgY2xzKTtcbiAgICB9XG4gICAgcmVtb3ZlQ2xhc3MoZWwsIGNscyk7XG59XG5mdW5jdGlvbiB3aGVuVHJhbnNpdGlvbkVuZHMoZWwsIGV4cGVjdGVkVHlwZSwgY2IpIHtcbiAgICB2YXIgX2EgPSBnZXRUcmFuc2l0aW9uSW5mbyhlbCwgZXhwZWN0ZWRUeXBlKSwgdHlwZSA9IF9hLnR5cGUsIHRpbWVvdXQgPSBfYS50aW1lb3V0LCBwcm9wQ291bnQgPSBfYS5wcm9wQ291bnQ7XG4gICAgaWYgKCF0eXBlKVxuICAgICAgICByZXR1cm4gY2IoKTtcbiAgICB2YXIgZXZlbnQgPSB0eXBlID09PSBUUkFOU0lUSU9OID8gdHJhbnNpdGlvbkVuZEV2ZW50IDogYW5pbWF0aW9uRW5kRXZlbnQ7XG4gICAgdmFyIGVuZGVkID0gMDtcbiAgICB2YXIgZW5kID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50LCBvbkVuZCk7XG4gICAgICAgIGNiKCk7XG4gICAgfTtcbiAgICB2YXIgb25FbmQgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICBpZiAoZS50YXJnZXQgPT09IGVsKSB7XG4gICAgICAgICAgICBpZiAoKytlbmRlZCA+PSBwcm9wQ291bnQpIHtcbiAgICAgICAgICAgICAgICBlbmQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChlbmRlZCA8IHByb3BDb3VudCkge1xuICAgICAgICAgICAgZW5kKCk7XG4gICAgICAgIH1cbiAgICB9LCB0aW1lb3V0ICsgMSk7XG4gICAgZWwuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgb25FbmQpO1xufVxudmFyIHRyYW5zZm9ybVJFID0gL1xcYih0cmFuc2Zvcm18YWxsKSgsfCQpLztcbmZ1bmN0aW9uIGdldFRyYW5zaXRpb25JbmZvKGVsLCBleHBlY3RlZFR5cGUpIHtcbiAgICB2YXIgc3R5bGVzID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWwpO1xuICAgIC8vIEpTRE9NIG1heSByZXR1cm4gdW5kZWZpbmVkIGZvciB0cmFuc2l0aW9uIHByb3BlcnRpZXNcbiAgICB2YXIgdHJhbnNpdGlvbkRlbGF5cyA9IChzdHlsZXNbdHJhbnNpdGlvblByb3AgKyAnRGVsYXknXSB8fCAnJykuc3BsaXQoJywgJyk7XG4gICAgdmFyIHRyYW5zaXRpb25EdXJhdGlvbnMgPSAoc3R5bGVzW3RyYW5zaXRpb25Qcm9wICsgJ0R1cmF0aW9uJ10gfHwgJycpLnNwbGl0KCcsICcpO1xuICAgIHZhciB0cmFuc2l0aW9uVGltZW91dCA9IGdldFRpbWVvdXQodHJhbnNpdGlvbkRlbGF5cywgdHJhbnNpdGlvbkR1cmF0aW9ucyk7XG4gICAgdmFyIGFuaW1hdGlvbkRlbGF5cyA9IChzdHlsZXNbYW5pbWF0aW9uUHJvcCArICdEZWxheSddIHx8ICcnKS5zcGxpdCgnLCAnKTtcbiAgICB2YXIgYW5pbWF0aW9uRHVyYXRpb25zID0gKHN0eWxlc1thbmltYXRpb25Qcm9wICsgJ0R1cmF0aW9uJ10gfHwgJycpLnNwbGl0KCcsICcpO1xuICAgIHZhciBhbmltYXRpb25UaW1lb3V0ID0gZ2V0VGltZW91dChhbmltYXRpb25EZWxheXMsIGFuaW1hdGlvbkR1cmF0aW9ucyk7XG4gICAgdmFyIHR5cGU7XG4gICAgdmFyIHRpbWVvdXQgPSAwO1xuICAgIHZhciBwcm9wQ291bnQgPSAwO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChleHBlY3RlZFR5cGUgPT09IFRSQU5TSVRJT04pIHtcbiAgICAgICAgaWYgKHRyYW5zaXRpb25UaW1lb3V0ID4gMCkge1xuICAgICAgICAgICAgdHlwZSA9IFRSQU5TSVRJT047XG4gICAgICAgICAgICB0aW1lb3V0ID0gdHJhbnNpdGlvblRpbWVvdXQ7XG4gICAgICAgICAgICBwcm9wQ291bnQgPSB0cmFuc2l0aW9uRHVyYXRpb25zLmxlbmd0aDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChleHBlY3RlZFR5cGUgPT09IEFOSU1BVElPTikge1xuICAgICAgICBpZiAoYW5pbWF0aW9uVGltZW91dCA+IDApIHtcbiAgICAgICAgICAgIHR5cGUgPSBBTklNQVRJT047XG4gICAgICAgICAgICB0aW1lb3V0ID0gYW5pbWF0aW9uVGltZW91dDtcbiAgICAgICAgICAgIHByb3BDb3VudCA9IGFuaW1hdGlvbkR1cmF0aW9ucy5sZW5ndGg7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRpbWVvdXQgPSBNYXRoLm1heCh0cmFuc2l0aW9uVGltZW91dCwgYW5pbWF0aW9uVGltZW91dCk7XG4gICAgICAgIHR5cGUgPVxuICAgICAgICAgICAgdGltZW91dCA+IDBcbiAgICAgICAgICAgICAgICA/IHRyYW5zaXRpb25UaW1lb3V0ID4gYW5pbWF0aW9uVGltZW91dFxuICAgICAgICAgICAgICAgICAgICA/IFRSQU5TSVRJT05cbiAgICAgICAgICAgICAgICAgICAgOiBBTklNQVRJT05cbiAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIHByb3BDb3VudCA9IHR5cGVcbiAgICAgICAgICAgID8gdHlwZSA9PT0gVFJBTlNJVElPTlxuICAgICAgICAgICAgICAgID8gdHJhbnNpdGlvbkR1cmF0aW9ucy5sZW5ndGhcbiAgICAgICAgICAgICAgICA6IGFuaW1hdGlvbkR1cmF0aW9ucy5sZW5ndGhcbiAgICAgICAgICAgIDogMDtcbiAgICB9XG4gICAgdmFyIGhhc1RyYW5zZm9ybSA9IHR5cGUgPT09IFRSQU5TSVRJT04gJiYgdHJhbnNmb3JtUkUudGVzdChzdHlsZXNbdHJhbnNpdGlvblByb3AgKyAnUHJvcGVydHknXSk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgdGltZW91dDogdGltZW91dCxcbiAgICAgICAgcHJvcENvdW50OiBwcm9wQ291bnQsXG4gICAgICAgIGhhc1RyYW5zZm9ybTogaGFzVHJhbnNmb3JtXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGdldFRpbWVvdXQoZGVsYXlzLCBkdXJhdGlvbnMpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHdoaWxlIChkZWxheXMubGVuZ3RoIDwgZHVyYXRpb25zLmxlbmd0aCkge1xuICAgICAgICBkZWxheXMgPSBkZWxheXMuY29uY2F0KGRlbGF5cyk7XG4gICAgfVxuICAgIHJldHVybiBNYXRoLm1heC5hcHBseShudWxsLCBkdXJhdGlvbnMubWFwKGZ1bmN0aW9uIChkLCBpKSB7XG4gICAgICAgIHJldHVybiB0b01zKGQpICsgdG9NcyhkZWxheXNbaV0pO1xuICAgIH0pKTtcbn1cbi8vIE9sZCB2ZXJzaW9ucyBvZiBDaHJvbWl1bSAoYmVsb3cgNjEuMC4zMTYzLjEwMCkgZm9ybWF0cyBmbG9hdGluZyBwb2ludGVyIG51bWJlcnNcbi8vIGluIGEgbG9jYWxlLWRlcGVuZGVudCB3YXksIHVzaW5nIGEgY29tbWEgaW5zdGVhZCBvZiBhIGRvdC5cbi8vIElmIGNvbW1hIGlzIG5vdCByZXBsYWNlZCB3aXRoIGEgZG90LCB0aGUgaW5wdXQgd2lsbCBiZSByb3VuZGVkIGRvd24gKGkuZS4gYWN0aW5nXG4vLyBhcyBhIGZsb29yIGZ1bmN0aW9uKSBjYXVzaW5nIHVuZXhwZWN0ZWQgYmVoYXZpb3JzXG5mdW5jdGlvbiB0b01zKHMpIHtcbiAgICByZXR1cm4gTnVtYmVyKHMuc2xpY2UoMCwgLTEpLnJlcGxhY2UoJywnLCAnLicpKSAqIDEwMDA7XG59XG5cbmZ1bmN0aW9uIGVudGVyKHZub2RlLCB0b2dnbGVEaXNwbGF5KSB7XG4gICAgdmFyIGVsID0gdm5vZGUuZWxtO1xuICAgIC8vIGNhbGwgbGVhdmUgY2FsbGJhY2sgbm93XG4gICAgaWYgKGlzRGVmKGVsLl9sZWF2ZUNiKSkge1xuICAgICAgICBlbC5fbGVhdmVDYi5jYW5jZWxsZWQgPSB0cnVlO1xuICAgICAgICBlbC5fbGVhdmVDYigpO1xuICAgIH1cbiAgICB2YXIgZGF0YSA9IHJlc29sdmVUcmFuc2l0aW9uKHZub2RlLmRhdGEudHJhbnNpdGlvbik7XG4gICAgaWYgKGlzVW5kZWYoZGF0YSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoaXNEZWYoZWwuX2VudGVyQ2IpIHx8IGVsLm5vZGVUeXBlICE9PSAxKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIGNzcyA9IGRhdGEuY3NzLCB0eXBlID0gZGF0YS50eXBlLCBlbnRlckNsYXNzID0gZGF0YS5lbnRlckNsYXNzLCBlbnRlclRvQ2xhc3MgPSBkYXRhLmVudGVyVG9DbGFzcywgZW50ZXJBY3RpdmVDbGFzcyA9IGRhdGEuZW50ZXJBY3RpdmVDbGFzcywgYXBwZWFyQ2xhc3MgPSBkYXRhLmFwcGVhckNsYXNzLCBhcHBlYXJUb0NsYXNzID0gZGF0YS5hcHBlYXJUb0NsYXNzLCBhcHBlYXJBY3RpdmVDbGFzcyA9IGRhdGEuYXBwZWFyQWN0aXZlQ2xhc3MsIGJlZm9yZUVudGVyID0gZGF0YS5iZWZvcmVFbnRlciwgZW50ZXIgPSBkYXRhLmVudGVyLCBhZnRlckVudGVyID0gZGF0YS5hZnRlckVudGVyLCBlbnRlckNhbmNlbGxlZCA9IGRhdGEuZW50ZXJDYW5jZWxsZWQsIGJlZm9yZUFwcGVhciA9IGRhdGEuYmVmb3JlQXBwZWFyLCBhcHBlYXIgPSBkYXRhLmFwcGVhciwgYWZ0ZXJBcHBlYXIgPSBkYXRhLmFmdGVyQXBwZWFyLCBhcHBlYXJDYW5jZWxsZWQgPSBkYXRhLmFwcGVhckNhbmNlbGxlZCwgZHVyYXRpb24gPSBkYXRhLmR1cmF0aW9uO1xuICAgIC8vIGFjdGl2ZUluc3RhbmNlIHdpbGwgYWx3YXlzIGJlIHRoZSA8dHJhbnNpdGlvbj4gY29tcG9uZW50IG1hbmFnaW5nIHRoaXNcbiAgICAvLyB0cmFuc2l0aW9uLiBPbmUgZWRnZSBjYXNlIHRvIGNoZWNrIGlzIHdoZW4gdGhlIDx0cmFuc2l0aW9uPiBpcyBwbGFjZWRcbiAgICAvLyBhcyB0aGUgcm9vdCBub2RlIG9mIGEgY2hpbGQgY29tcG9uZW50LiBJbiB0aGF0IGNhc2Ugd2UgbmVlZCB0byBjaGVja1xuICAgIC8vIDx0cmFuc2l0aW9uPidzIHBhcmVudCBmb3IgYXBwZWFyIGNoZWNrLlxuICAgIHZhciBjb250ZXh0ID0gYWN0aXZlSW5zdGFuY2U7XG4gICAgdmFyIHRyYW5zaXRpb25Ob2RlID0gYWN0aXZlSW5zdGFuY2UuJHZub2RlO1xuICAgIHdoaWxlICh0cmFuc2l0aW9uTm9kZSAmJiB0cmFuc2l0aW9uTm9kZS5wYXJlbnQpIHtcbiAgICAgICAgY29udGV4dCA9IHRyYW5zaXRpb25Ob2RlLmNvbnRleHQ7XG4gICAgICAgIHRyYW5zaXRpb25Ob2RlID0gdHJhbnNpdGlvbk5vZGUucGFyZW50O1xuICAgIH1cbiAgICB2YXIgaXNBcHBlYXIgPSAhY29udGV4dC5faXNNb3VudGVkIHx8ICF2bm9kZS5pc1Jvb3RJbnNlcnQ7XG4gICAgaWYgKGlzQXBwZWFyICYmICFhcHBlYXIgJiYgYXBwZWFyICE9PSAnJykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBzdGFydENsYXNzID0gaXNBcHBlYXIgJiYgYXBwZWFyQ2xhc3MgPyBhcHBlYXJDbGFzcyA6IGVudGVyQ2xhc3M7XG4gICAgdmFyIGFjdGl2ZUNsYXNzID0gaXNBcHBlYXIgJiYgYXBwZWFyQWN0aXZlQ2xhc3MgPyBhcHBlYXJBY3RpdmVDbGFzcyA6IGVudGVyQWN0aXZlQ2xhc3M7XG4gICAgdmFyIHRvQ2xhc3MgPSBpc0FwcGVhciAmJiBhcHBlYXJUb0NsYXNzID8gYXBwZWFyVG9DbGFzcyA6IGVudGVyVG9DbGFzcztcbiAgICB2YXIgYmVmb3JlRW50ZXJIb29rID0gaXNBcHBlYXIgPyBiZWZvcmVBcHBlYXIgfHwgYmVmb3JlRW50ZXIgOiBiZWZvcmVFbnRlcjtcbiAgICB2YXIgZW50ZXJIb29rID0gaXNBcHBlYXIgPyAoaXNGdW5jdGlvbihhcHBlYXIpID8gYXBwZWFyIDogZW50ZXIpIDogZW50ZXI7XG4gICAgdmFyIGFmdGVyRW50ZXJIb29rID0gaXNBcHBlYXIgPyBhZnRlckFwcGVhciB8fCBhZnRlckVudGVyIDogYWZ0ZXJFbnRlcjtcbiAgICB2YXIgZW50ZXJDYW5jZWxsZWRIb29rID0gaXNBcHBlYXJcbiAgICAgICAgPyBhcHBlYXJDYW5jZWxsZWQgfHwgZW50ZXJDYW5jZWxsZWRcbiAgICAgICAgOiBlbnRlckNhbmNlbGxlZDtcbiAgICB2YXIgZXhwbGljaXRFbnRlckR1cmF0aW9uID0gdG9OdW1iZXIoaXNPYmplY3QoZHVyYXRpb24pID8gZHVyYXRpb24uZW50ZXIgOiBkdXJhdGlvbik7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgZXhwbGljaXRFbnRlckR1cmF0aW9uICE9IG51bGwpIHtcbiAgICAgICAgY2hlY2tEdXJhdGlvbihleHBsaWNpdEVudGVyRHVyYXRpb24sICdlbnRlcicsIHZub2RlKTtcbiAgICB9XG4gICAgdmFyIGV4cGVjdHNDU1MgPSBjc3MgIT09IGZhbHNlICYmICFpc0lFOTtcbiAgICB2YXIgdXNlcldhbnRzQ29udHJvbCA9IGdldEhvb2tBcmd1bWVudHNMZW5ndGgoZW50ZXJIb29rKTtcbiAgICB2YXIgY2IgPSAoZWwuX2VudGVyQ2IgPSBvbmNlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKGV4cGVjdHNDU1MpIHtcbiAgICAgICAgICAgIHJlbW92ZVRyYW5zaXRpb25DbGFzcyhlbCwgdG9DbGFzcyk7XG4gICAgICAgICAgICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIGFjdGl2ZUNsYXNzKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgIGlmIChjYi5jYW5jZWxsZWQpIHtcbiAgICAgICAgICAgIGlmIChleHBlY3RzQ1NTKSB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCBzdGFydENsYXNzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVudGVyQ2FuY2VsbGVkSG9vayAmJiBlbnRlckNhbmNlbGxlZEhvb2soZWwpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYWZ0ZXJFbnRlckhvb2sgJiYgYWZ0ZXJFbnRlckhvb2soZWwpO1xuICAgICAgICB9XG4gICAgICAgIGVsLl9lbnRlckNiID0gbnVsbDtcbiAgICB9KSk7XG4gICAgaWYgKCF2bm9kZS5kYXRhLnNob3cpIHtcbiAgICAgICAgLy8gcmVtb3ZlIHBlbmRpbmcgbGVhdmUgZWxlbWVudCBvbiBlbnRlciBieSBpbmplY3RpbmcgYW4gaW5zZXJ0IGhvb2tcbiAgICAgICAgbWVyZ2VWTm9kZUhvb2sodm5vZGUsICdpbnNlcnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgcGFyZW50ID0gZWwucGFyZW50Tm9kZTtcbiAgICAgICAgICAgIHZhciBwZW5kaW5nTm9kZSA9IHBhcmVudCAmJiBwYXJlbnQuX3BlbmRpbmcgJiYgcGFyZW50Ll9wZW5kaW5nW3Zub2RlLmtleV07XG4gICAgICAgICAgICBpZiAocGVuZGluZ05vZGUgJiZcbiAgICAgICAgICAgICAgICBwZW5kaW5nTm9kZS50YWcgPT09IHZub2RlLnRhZyAmJlxuICAgICAgICAgICAgICAgIHBlbmRpbmdOb2RlLmVsbS5fbGVhdmVDYikge1xuICAgICAgICAgICAgICAgIHBlbmRpbmdOb2RlLmVsbS5fbGVhdmVDYigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZW50ZXJIb29rICYmIGVudGVySG9vayhlbCwgY2IpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gc3RhcnQgZW50ZXIgdHJhbnNpdGlvblxuICAgIGJlZm9yZUVudGVySG9vayAmJiBiZWZvcmVFbnRlckhvb2soZWwpO1xuICAgIGlmIChleHBlY3RzQ1NTKSB7XG4gICAgICAgIGFkZFRyYW5zaXRpb25DbGFzcyhlbCwgc3RhcnRDbGFzcyk7XG4gICAgICAgIGFkZFRyYW5zaXRpb25DbGFzcyhlbCwgYWN0aXZlQ2xhc3MpO1xuICAgICAgICBuZXh0RnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCBzdGFydENsYXNzKTtcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgICAgIGlmICghY2IuY2FuY2VsbGVkKSB7XG4gICAgICAgICAgICAgICAgYWRkVHJhbnNpdGlvbkNsYXNzKGVsLCB0b0NsYXNzKTtcbiAgICAgICAgICAgICAgICBpZiAoIXVzZXJXYW50c0NvbnRyb2wpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzVmFsaWREdXJhdGlvbihleHBsaWNpdEVudGVyRHVyYXRpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGNiLCBleHBsaWNpdEVudGVyRHVyYXRpb24pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2hlblRyYW5zaXRpb25FbmRzKGVsLCB0eXBlLCBjYik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAodm5vZGUuZGF0YS5zaG93KSB7XG4gICAgICAgIHRvZ2dsZURpc3BsYXkgJiYgdG9nZ2xlRGlzcGxheSgpO1xuICAgICAgICBlbnRlckhvb2sgJiYgZW50ZXJIb29rKGVsLCBjYik7XG4gICAgfVxuICAgIGlmICghZXhwZWN0c0NTUyAmJiAhdXNlcldhbnRzQ29udHJvbCkge1xuICAgICAgICBjYigpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGxlYXZlKHZub2RlLCBybSkge1xuICAgIHZhciBlbCA9IHZub2RlLmVsbTtcbiAgICAvLyBjYWxsIGVudGVyIGNhbGxiYWNrIG5vd1xuICAgIGlmIChpc0RlZihlbC5fZW50ZXJDYikpIHtcbiAgICAgICAgZWwuX2VudGVyQ2IuY2FuY2VsbGVkID0gdHJ1ZTtcbiAgICAgICAgZWwuX2VudGVyQ2IoKTtcbiAgICB9XG4gICAgdmFyIGRhdGEgPSByZXNvbHZlVHJhbnNpdGlvbih2bm9kZS5kYXRhLnRyYW5zaXRpb24pO1xuICAgIGlmIChpc1VuZGVmKGRhdGEpIHx8IGVsLm5vZGVUeXBlICE9PSAxKSB7XG4gICAgICAgIHJldHVybiBybSgpO1xuICAgIH1cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoaXNEZWYoZWwuX2xlYXZlQ2IpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIGNzcyA9IGRhdGEuY3NzLCB0eXBlID0gZGF0YS50eXBlLCBsZWF2ZUNsYXNzID0gZGF0YS5sZWF2ZUNsYXNzLCBsZWF2ZVRvQ2xhc3MgPSBkYXRhLmxlYXZlVG9DbGFzcywgbGVhdmVBY3RpdmVDbGFzcyA9IGRhdGEubGVhdmVBY3RpdmVDbGFzcywgYmVmb3JlTGVhdmUgPSBkYXRhLmJlZm9yZUxlYXZlLCBsZWF2ZSA9IGRhdGEubGVhdmUsIGFmdGVyTGVhdmUgPSBkYXRhLmFmdGVyTGVhdmUsIGxlYXZlQ2FuY2VsbGVkID0gZGF0YS5sZWF2ZUNhbmNlbGxlZCwgZGVsYXlMZWF2ZSA9IGRhdGEuZGVsYXlMZWF2ZSwgZHVyYXRpb24gPSBkYXRhLmR1cmF0aW9uO1xuICAgIHZhciBleHBlY3RzQ1NTID0gY3NzICE9PSBmYWxzZSAmJiAhaXNJRTk7XG4gICAgdmFyIHVzZXJXYW50c0NvbnRyb2wgPSBnZXRIb29rQXJndW1lbnRzTGVuZ3RoKGxlYXZlKTtcbiAgICB2YXIgZXhwbGljaXRMZWF2ZUR1cmF0aW9uID0gdG9OdW1iZXIoaXNPYmplY3QoZHVyYXRpb24pID8gZHVyYXRpb24ubGVhdmUgOiBkdXJhdGlvbik7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgaXNEZWYoZXhwbGljaXRMZWF2ZUR1cmF0aW9uKSkge1xuICAgICAgICBjaGVja0R1cmF0aW9uKGV4cGxpY2l0TGVhdmVEdXJhdGlvbiwgJ2xlYXZlJywgdm5vZGUpO1xuICAgIH1cbiAgICB2YXIgY2IgPSAoZWwuX2xlYXZlQ2IgPSBvbmNlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKGVsLnBhcmVudE5vZGUgJiYgZWwucGFyZW50Tm9kZS5fcGVuZGluZykge1xuICAgICAgICAgICAgZWwucGFyZW50Tm9kZS5fcGVuZGluZ1t2bm9kZS5rZXldID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXhwZWN0c0NTUykge1xuICAgICAgICAgICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCBsZWF2ZVRvQ2xhc3MpO1xuICAgICAgICAgICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCBsZWF2ZUFjdGl2ZUNsYXNzKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgIGlmIChjYi5jYW5jZWxsZWQpIHtcbiAgICAgICAgICAgIGlmIChleHBlY3RzQ1NTKSB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCBsZWF2ZUNsYXNzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxlYXZlQ2FuY2VsbGVkICYmIGxlYXZlQ2FuY2VsbGVkKGVsKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJtKCk7XG4gICAgICAgICAgICBhZnRlckxlYXZlICYmIGFmdGVyTGVhdmUoZWwpO1xuICAgICAgICB9XG4gICAgICAgIGVsLl9sZWF2ZUNiID0gbnVsbDtcbiAgICB9KSk7XG4gICAgaWYgKGRlbGF5TGVhdmUpIHtcbiAgICAgICAgZGVsYXlMZWF2ZShwZXJmb3JtTGVhdmUpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcGVyZm9ybUxlYXZlKCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBlcmZvcm1MZWF2ZSgpIHtcbiAgICAgICAgLy8gdGhlIGRlbGF5ZWQgbGVhdmUgbWF5IGhhdmUgYWxyZWFkeSBiZWVuIGNhbmNlbGxlZFxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgIGlmIChjYi5jYW5jZWxsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyByZWNvcmQgbGVhdmluZyBlbGVtZW50XG4gICAgICAgIGlmICghdm5vZGUuZGF0YS5zaG93ICYmIGVsLnBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgIChlbC5wYXJlbnROb2RlLl9wZW5kaW5nIHx8IChlbC5wYXJlbnROb2RlLl9wZW5kaW5nID0ge30pKVt2bm9kZS5rZXldID1cbiAgICAgICAgICAgICAgICB2bm9kZTtcbiAgICAgICAgfVxuICAgICAgICBiZWZvcmVMZWF2ZSAmJiBiZWZvcmVMZWF2ZShlbCk7XG4gICAgICAgIGlmIChleHBlY3RzQ1NTKSB7XG4gICAgICAgICAgICBhZGRUcmFuc2l0aW9uQ2xhc3MoZWwsIGxlYXZlQ2xhc3MpO1xuICAgICAgICAgICAgYWRkVHJhbnNpdGlvbkNsYXNzKGVsLCBsZWF2ZUFjdGl2ZUNsYXNzKTtcbiAgICAgICAgICAgIG5leHRGcmFtZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCBsZWF2ZUNsYXNzKTtcbiAgICAgICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgICAgICAgICAgaWYgKCFjYi5jYW5jZWxsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkVHJhbnNpdGlvbkNsYXNzKGVsLCBsZWF2ZVRvQ2xhc3MpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXVzZXJXYW50c0NvbnRyb2wpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkRHVyYXRpb24oZXhwbGljaXRMZWF2ZUR1cmF0aW9uKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoY2IsIGV4cGxpY2l0TGVhdmVEdXJhdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuVHJhbnNpdGlvbkVuZHMoZWwsIHR5cGUsIGNiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGxlYXZlICYmIGxlYXZlKGVsLCBjYik7XG4gICAgICAgIGlmICghZXhwZWN0c0NTUyAmJiAhdXNlcldhbnRzQ29udHJvbCkge1xuICAgICAgICAgICAgY2IoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbi8vIG9ubHkgdXNlZCBpbiBkZXYgbW9kZVxuZnVuY3Rpb24gY2hlY2tEdXJhdGlvbih2YWwsIG5hbWUsIHZub2RlKSB7XG4gICAgaWYgKHR5cGVvZiB2YWwgIT09ICdudW1iZXInKSB7XG4gICAgICAgIHdhcm4kMihcIjx0cmFuc2l0aW9uPiBleHBsaWNpdCBcIi5jb25jYXQobmFtZSwgXCIgZHVyYXRpb24gaXMgbm90IGEgdmFsaWQgbnVtYmVyIC0gXCIpICtcbiAgICAgICAgICAgIFwiZ290IFwiLmNvbmNhdChKU09OLnN0cmluZ2lmeSh2YWwpLCBcIi5cIiksIHZub2RlLmNvbnRleHQpO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc05hTih2YWwpKSB7XG4gICAgICAgIHdhcm4kMihcIjx0cmFuc2l0aW9uPiBleHBsaWNpdCBcIi5jb25jYXQobmFtZSwgXCIgZHVyYXRpb24gaXMgTmFOIC0gXCIpICtcbiAgICAgICAgICAgICd0aGUgZHVyYXRpb24gZXhwcmVzc2lvbiBtaWdodCBiZSBpbmNvcnJlY3QuJywgdm5vZGUuY29udGV4dCk7XG4gICAgfVxufVxuZnVuY3Rpb24gaXNWYWxpZER1cmF0aW9uKHZhbCkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsID09PSAnbnVtYmVyJyAmJiAhaXNOYU4odmFsKTtcbn1cbi8qKlxuICogTm9ybWFsaXplIGEgdHJhbnNpdGlvbiBob29rJ3MgYXJndW1lbnQgbGVuZ3RoLiBUaGUgaG9vayBtYXkgYmU6XG4gKiAtIGEgbWVyZ2VkIGhvb2sgKGludm9rZXIpIHdpdGggdGhlIG9yaWdpbmFsIGluIC5mbnNcbiAqIC0gYSB3cmFwcGVkIGNvbXBvbmVudCBtZXRob2QgKGNoZWNrIC5fbGVuZ3RoKVxuICogLSBhIHBsYWluIGZ1bmN0aW9uICgubGVuZ3RoKVxuICovXG5mdW5jdGlvbiBnZXRIb29rQXJndW1lbnRzTGVuZ3RoKGZuKSB7XG4gICAgaWYgKGlzVW5kZWYoZm4pKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgIHZhciBpbnZva2VyRm5zID0gZm4uZm5zO1xuICAgIGlmIChpc0RlZihpbnZva2VyRm5zKSkge1xuICAgICAgICAvLyBpbnZva2VyXG4gICAgICAgIHJldHVybiBnZXRIb29rQXJndW1lbnRzTGVuZ3RoKEFycmF5LmlzQXJyYXkoaW52b2tlckZucykgPyBpbnZva2VyRm5zWzBdIDogaW52b2tlckZucyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgIHJldHVybiAoZm4uX2xlbmd0aCB8fCBmbi5sZW5ndGgpID4gMTtcbiAgICB9XG59XG5mdW5jdGlvbiBfZW50ZXIoXywgdm5vZGUpIHtcbiAgICBpZiAodm5vZGUuZGF0YS5zaG93ICE9PSB0cnVlKSB7XG4gICAgICAgIGVudGVyKHZub2RlKTtcbiAgICB9XG59XG52YXIgdHJhbnNpdGlvbiA9IGluQnJvd3NlclxuICAgID8ge1xuICAgICAgICBjcmVhdGU6IF9lbnRlcixcbiAgICAgICAgYWN0aXZhdGU6IF9lbnRlcixcbiAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbiAodm5vZGUsIHJtKSB7XG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgICAgaWYgKHZub2RlLmRhdGEuc2hvdyAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgICAgICAgICBsZWF2ZSh2bm9kZSwgcm0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcm0oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICA6IHt9O1xuXG52YXIgcGxhdGZvcm1Nb2R1bGVzID0gW2F0dHJzLCBrbGFzcyQxLCBldmVudHMsIGRvbVByb3BzLCBzdHlsZSQxLCB0cmFuc2l0aW9uXTtcblxuLy8gdGhlIGRpcmVjdGl2ZSBtb2R1bGUgc2hvdWxkIGJlIGFwcGxpZWQgbGFzdCwgYWZ0ZXIgYWxsXG4vLyBidWlsdC1pbiBtb2R1bGVzIGhhdmUgYmVlbiBhcHBsaWVkLlxudmFyIG1vZHVsZXMkMSA9IHBsYXRmb3JtTW9kdWxlcy5jb25jYXQoYmFzZU1vZHVsZXMpO1xudmFyIHBhdGNoID0gY3JlYXRlUGF0Y2hGdW5jdGlvbih7IG5vZGVPcHM6IG5vZGVPcHMsIG1vZHVsZXM6IG1vZHVsZXMkMSB9KTtcblxuLyoqXG4gKiBOb3QgdHlwZSBjaGVja2luZyB0aGlzIGZpbGUgYmVjYXVzZSBmbG93IGRvZXNuJ3QgbGlrZSBhdHRhY2hpbmdcbiAqIHByb3BlcnRpZXMgdG8gRWxlbWVudHMuXG4gKi9cbi8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuaWYgKGlzSUU5KSB7XG4gICAgLy8gaHR0cDovL3d3dy5tYXR0czQxMS5jb20vcG9zdC9pbnRlcm5ldC1leHBsb3Jlci05LW9uaW5wdXQvXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignc2VsZWN0aW9uY2hhbmdlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZWwgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgIGlmIChlbCAmJiBlbC52bW9kZWwpIHtcbiAgICAgICAgICAgIHRyaWdnZXIoZWwsICdpbnB1dCcpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG52YXIgZGlyZWN0aXZlID0ge1xuICAgIGluc2VydGVkOiBmdW5jdGlvbiAoZWwsIGJpbmRpbmcsIHZub2RlLCBvbGRWbm9kZSkge1xuICAgICAgICBpZiAodm5vZGUudGFnID09PSAnc2VsZWN0Jykge1xuICAgICAgICAgICAgLy8gIzY5MDNcbiAgICAgICAgICAgIGlmIChvbGRWbm9kZS5lbG0gJiYgIW9sZFZub2RlLmVsbS5fdk9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBtZXJnZVZOb2RlSG9vayh2bm9kZSwgJ3Bvc3RwYXRjaCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlLmNvbXBvbmVudFVwZGF0ZWQoZWwsIGJpbmRpbmcsIHZub2RlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHNldFNlbGVjdGVkKGVsLCBiaW5kaW5nLCB2bm9kZS5jb250ZXh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsLl92T3B0aW9ucyA9IFtdLm1hcC5jYWxsKGVsLm9wdGlvbnMsIGdldFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh2bm9kZS50YWcgPT09ICd0ZXh0YXJlYScgfHwgaXNUZXh0SW5wdXRUeXBlKGVsLnR5cGUpKSB7XG4gICAgICAgICAgICBlbC5fdk1vZGlmaWVycyA9IGJpbmRpbmcubW9kaWZpZXJzO1xuICAgICAgICAgICAgaWYgKCFiaW5kaW5nLm1vZGlmaWVycy5sYXp5KSB7XG4gICAgICAgICAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcignY29tcG9zaXRpb25zdGFydCcsIG9uQ29tcG9zaXRpb25TdGFydCk7XG4gICAgICAgICAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcignY29tcG9zaXRpb25lbmQnLCBvbkNvbXBvc2l0aW9uRW5kKTtcbiAgICAgICAgICAgICAgICAvLyBTYWZhcmkgPCAxMC4yICYgVUlXZWJWaWV3IGRvZXNuJ3QgZmlyZSBjb21wb3NpdGlvbmVuZCB3aGVuXG4gICAgICAgICAgICAgICAgLy8gc3dpdGNoaW5nIGZvY3VzIGJlZm9yZSBjb25maXJtaW5nIGNvbXBvc2l0aW9uIGNob2ljZVxuICAgICAgICAgICAgICAgIC8vIHRoaXMgYWxzbyBmaXhlcyB0aGUgaXNzdWUgd2hlcmUgc29tZSBicm93c2VycyBlLmcuIGlPUyBDaHJvbWVcbiAgICAgICAgICAgICAgICAvLyBmaXJlcyBcImNoYW5nZVwiIGluc3RlYWQgb2YgXCJpbnB1dFwiIG9uIGF1dG9jb21wbGV0ZS5cbiAgICAgICAgICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBvbkNvbXBvc2l0aW9uRW5kKTtcbiAgICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICAgICAgICBpZiAoaXNJRTkpIHtcbiAgICAgICAgICAgICAgICAgICAgZWwudm1vZGVsID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGNvbXBvbmVudFVwZGF0ZWQ6IGZ1bmN0aW9uIChlbCwgYmluZGluZywgdm5vZGUpIHtcbiAgICAgICAgaWYgKHZub2RlLnRhZyA9PT0gJ3NlbGVjdCcpIHtcbiAgICAgICAgICAgIHNldFNlbGVjdGVkKGVsLCBiaW5kaW5nLCB2bm9kZS5jb250ZXh0KTtcbiAgICAgICAgICAgIC8vIGluIGNhc2UgdGhlIG9wdGlvbnMgcmVuZGVyZWQgYnkgdi1mb3IgaGF2ZSBjaGFuZ2VkLFxuICAgICAgICAgICAgLy8gaXQncyBwb3NzaWJsZSB0aGF0IHRoZSB2YWx1ZSBpcyBvdXQtb2Ytc3luYyB3aXRoIHRoZSByZW5kZXJlZCBvcHRpb25zLlxuICAgICAgICAgICAgLy8gZGV0ZWN0IHN1Y2ggY2FzZXMgYW5kIGZpbHRlciBvdXQgdmFsdWVzIHRoYXQgbm8gbG9uZ2VyIGhhcyBhIG1hdGNoaW5nXG4gICAgICAgICAgICAvLyBvcHRpb24gaW4gdGhlIERPTS5cbiAgICAgICAgICAgIHZhciBwcmV2T3B0aW9uc18xID0gZWwuX3ZPcHRpb25zO1xuICAgICAgICAgICAgdmFyIGN1ck9wdGlvbnNfMSA9IChlbC5fdk9wdGlvbnMgPSBbXS5tYXAuY2FsbChlbC5vcHRpb25zLCBnZXRWYWx1ZSkpO1xuICAgICAgICAgICAgaWYgKGN1ck9wdGlvbnNfMS5zb21lKGZ1bmN0aW9uIChvLCBpKSB7IHJldHVybiAhbG9vc2VFcXVhbChvLCBwcmV2T3B0aW9uc18xW2ldKTsgfSkpIHtcbiAgICAgICAgICAgICAgICAvLyB0cmlnZ2VyIGNoYW5nZSBldmVudCBpZlxuICAgICAgICAgICAgICAgIC8vIG5vIG1hdGNoaW5nIG9wdGlvbiBmb3VuZCBmb3IgYXQgbGVhc3Qgb25lIHZhbHVlXG4gICAgICAgICAgICAgICAgdmFyIG5lZWRSZXNldCA9IGVsLm11bHRpcGxlXG4gICAgICAgICAgICAgICAgICAgID8gYmluZGluZy52YWx1ZS5zb21lKGZ1bmN0aW9uICh2KSB7IHJldHVybiBoYXNOb01hdGNoaW5nT3B0aW9uKHYsIGN1ck9wdGlvbnNfMSk7IH0pXG4gICAgICAgICAgICAgICAgICAgIDogYmluZGluZy52YWx1ZSAhPT0gYmluZGluZy5vbGRWYWx1ZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzTm9NYXRjaGluZ09wdGlvbihiaW5kaW5nLnZhbHVlLCBjdXJPcHRpb25zXzEpO1xuICAgICAgICAgICAgICAgIGlmIChuZWVkUmVzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcihlbCwgJ2NoYW5nZScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5mdW5jdGlvbiBzZXRTZWxlY3RlZChlbCwgYmluZGluZywgdm0pIHtcbiAgICBhY3R1YWxseVNldFNlbGVjdGVkKGVsLCBiaW5kaW5nLCB2bSk7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGlzSUUgfHwgaXNFZGdlKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgYWN0dWFsbHlTZXRTZWxlY3RlZChlbCwgYmluZGluZywgdm0pO1xuICAgICAgICB9LCAwKTtcbiAgICB9XG59XG5mdW5jdGlvbiBhY3R1YWxseVNldFNlbGVjdGVkKGVsLCBiaW5kaW5nLCB2bSkge1xuICAgIHZhciB2YWx1ZSA9IGJpbmRpbmcudmFsdWU7XG4gICAgdmFyIGlzTXVsdGlwbGUgPSBlbC5tdWx0aXBsZTtcbiAgICBpZiAoaXNNdWx0aXBsZSAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgICAgICAgICAgd2FybiQyKFwiPHNlbGVjdCBtdWx0aXBsZSB2LW1vZGVsPVxcXCJcIi5jb25jYXQoYmluZGluZy5leHByZXNzaW9uLCBcIlxcXCI+IFwiKSArXG4gICAgICAgICAgICAgICAgXCJleHBlY3RzIGFuIEFycmF5IHZhbHVlIGZvciBpdHMgYmluZGluZywgYnV0IGdvdCBcIi5jb25jYXQoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ1xuICAgICAgICAgICAgICAgICAgICAuY2FsbCh2YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgLnNsaWNlKDgsIC0xKSksIHZtKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgc2VsZWN0ZWQsIG9wdGlvbjtcbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IGVsLm9wdGlvbnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIG9wdGlvbiA9IGVsLm9wdGlvbnNbaV07XG4gICAgICAgIGlmIChpc011bHRpcGxlKSB7XG4gICAgICAgICAgICBzZWxlY3RlZCA9IGxvb3NlSW5kZXhPZih2YWx1ZSwgZ2V0VmFsdWUob3B0aW9uKSkgPiAtMTtcbiAgICAgICAgICAgIGlmIChvcHRpb24uc2VsZWN0ZWQgIT09IHNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9uLnNlbGVjdGVkID0gc2VsZWN0ZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAobG9vc2VFcXVhbChnZXRWYWx1ZShvcHRpb24pLCB2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBpZiAoZWwuc2VsZWN0ZWRJbmRleCAhPT0gaSkge1xuICAgICAgICAgICAgICAgICAgICBlbC5zZWxlY3RlZEluZGV4ID0gaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGlmICghaXNNdWx0aXBsZSkge1xuICAgICAgICBlbC5zZWxlY3RlZEluZGV4ID0gLTE7XG4gICAgfVxufVxuZnVuY3Rpb24gaGFzTm9NYXRjaGluZ09wdGlvbih2YWx1ZSwgb3B0aW9ucykge1xuICAgIHJldHVybiBvcHRpb25zLmV2ZXJ5KGZ1bmN0aW9uIChvKSB7IHJldHVybiAhbG9vc2VFcXVhbChvLCB2YWx1ZSk7IH0pO1xufVxuZnVuY3Rpb24gZ2V0VmFsdWUob3B0aW9uKSB7XG4gICAgcmV0dXJuICdfdmFsdWUnIGluIG9wdGlvbiA/IG9wdGlvbi5fdmFsdWUgOiBvcHRpb24udmFsdWU7XG59XG5mdW5jdGlvbiBvbkNvbXBvc2l0aW9uU3RhcnQoZSkge1xuICAgIGUudGFyZ2V0LmNvbXBvc2luZyA9IHRydWU7XG59XG5mdW5jdGlvbiBvbkNvbXBvc2l0aW9uRW5kKGUpIHtcbiAgICAvLyBwcmV2ZW50IHRyaWdnZXJpbmcgYW4gaW5wdXQgZXZlbnQgZm9yIG5vIHJlYXNvblxuICAgIGlmICghZS50YXJnZXQuY29tcG9zaW5nKVxuICAgICAgICByZXR1cm47XG4gICAgZS50YXJnZXQuY29tcG9zaW5nID0gZmFsc2U7XG4gICAgdHJpZ2dlcihlLnRhcmdldCwgJ2lucHV0Jyk7XG59XG5mdW5jdGlvbiB0cmlnZ2VyKGVsLCB0eXBlKSB7XG4gICAgdmFyIGUgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnSFRNTEV2ZW50cycpO1xuICAgIGUuaW5pdEV2ZW50KHR5cGUsIHRydWUsIHRydWUpO1xuICAgIGVsLmRpc3BhdGNoRXZlbnQoZSk7XG59XG5cbi8vIHJlY3Vyc2l2ZWx5IHNlYXJjaCBmb3IgcG9zc2libGUgdHJhbnNpdGlvbiBkZWZpbmVkIGluc2lkZSB0aGUgY29tcG9uZW50IHJvb3RcbmZ1bmN0aW9uIGxvY2F0ZU5vZGUodm5vZGUpIHtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgcmV0dXJuIHZub2RlLmNvbXBvbmVudEluc3RhbmNlICYmICghdm5vZGUuZGF0YSB8fCAhdm5vZGUuZGF0YS50cmFuc2l0aW9uKVxuICAgICAgICA/IGxvY2F0ZU5vZGUodm5vZGUuY29tcG9uZW50SW5zdGFuY2UuX3Zub2RlKVxuICAgICAgICA6IHZub2RlO1xufVxudmFyIHNob3cgPSB7XG4gICAgYmluZDogZnVuY3Rpb24gKGVsLCBfYSwgdm5vZGUpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gX2EudmFsdWU7XG4gICAgICAgIHZub2RlID0gbG9jYXRlTm9kZSh2bm9kZSk7XG4gICAgICAgIHZhciB0cmFuc2l0aW9uID0gdm5vZGUuZGF0YSAmJiB2bm9kZS5kYXRhLnRyYW5zaXRpb247XG4gICAgICAgIHZhciBvcmlnaW5hbERpc3BsYXkgPSAoZWwuX192T3JpZ2luYWxEaXNwbGF5ID1cbiAgICAgICAgICAgIGVsLnN0eWxlLmRpc3BsYXkgPT09ICdub25lJyA/ICcnIDogZWwuc3R5bGUuZGlzcGxheSk7XG4gICAgICAgIGlmICh2YWx1ZSAmJiB0cmFuc2l0aW9uKSB7XG4gICAgICAgICAgICB2bm9kZS5kYXRhLnNob3cgPSB0cnVlO1xuICAgICAgICAgICAgZW50ZXIodm5vZGUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBlbC5zdHlsZS5kaXNwbGF5ID0gb3JpZ2luYWxEaXNwbGF5O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBlbC5zdHlsZS5kaXNwbGF5ID0gdmFsdWUgPyBvcmlnaW5hbERpc3BsYXkgOiAnbm9uZSc7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIHVwZGF0ZTogZnVuY3Rpb24gKGVsLCBfYSwgdm5vZGUpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gX2EudmFsdWUsIG9sZFZhbHVlID0gX2Eub2xkVmFsdWU7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAoIXZhbHVlID09PSAhb2xkVmFsdWUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZub2RlID0gbG9jYXRlTm9kZSh2bm9kZSk7XG4gICAgICAgIHZhciB0cmFuc2l0aW9uID0gdm5vZGUuZGF0YSAmJiB2bm9kZS5kYXRhLnRyYW5zaXRpb247XG4gICAgICAgIGlmICh0cmFuc2l0aW9uKSB7XG4gICAgICAgICAgICB2bm9kZS5kYXRhLnNob3cgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgZW50ZXIodm5vZGUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZWwuc3R5bGUuZGlzcGxheSA9IGVsLl9fdk9yaWdpbmFsRGlzcGxheTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGxlYXZlKHZub2RlLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBlbC5zdHlsZS5kaXNwbGF5ID0gdmFsdWUgPyBlbC5fX3ZPcmlnaW5hbERpc3BsYXkgOiAnbm9uZSc7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIHVuYmluZDogZnVuY3Rpb24gKGVsLCBiaW5kaW5nLCB2bm9kZSwgb2xkVm5vZGUsIGlzRGVzdHJveSkge1xuICAgICAgICBpZiAoIWlzRGVzdHJveSkge1xuICAgICAgICAgICAgZWwuc3R5bGUuZGlzcGxheSA9IGVsLl9fdk9yaWdpbmFsRGlzcGxheTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbnZhciBwbGF0Zm9ybURpcmVjdGl2ZXMgPSB7XG4gICAgbW9kZWw6IGRpcmVjdGl2ZSxcbiAgICBzaG93OiBzaG93XG59O1xuXG4vLyBQcm92aWRlcyB0cmFuc2l0aW9uIHN1cHBvcnQgZm9yIGEgc2luZ2xlIGVsZW1lbnQvY29tcG9uZW50LlxudmFyIHRyYW5zaXRpb25Qcm9wcyA9IHtcbiAgICBuYW1lOiBTdHJpbmcsXG4gICAgYXBwZWFyOiBCb29sZWFuLFxuICAgIGNzczogQm9vbGVhbixcbiAgICBtb2RlOiBTdHJpbmcsXG4gICAgdHlwZTogU3RyaW5nLFxuICAgIGVudGVyQ2xhc3M6IFN0cmluZyxcbiAgICBsZWF2ZUNsYXNzOiBTdHJpbmcsXG4gICAgZW50ZXJUb0NsYXNzOiBTdHJpbmcsXG4gICAgbGVhdmVUb0NsYXNzOiBTdHJpbmcsXG4gICAgZW50ZXJBY3RpdmVDbGFzczogU3RyaW5nLFxuICAgIGxlYXZlQWN0aXZlQ2xhc3M6IFN0cmluZyxcbiAgICBhcHBlYXJDbGFzczogU3RyaW5nLFxuICAgIGFwcGVhckFjdGl2ZUNsYXNzOiBTdHJpbmcsXG4gICAgYXBwZWFyVG9DbGFzczogU3RyaW5nLFxuICAgIGR1cmF0aW9uOiBbTnVtYmVyLCBTdHJpbmcsIE9iamVjdF1cbn07XG4vLyBpbiBjYXNlIHRoZSBjaGlsZCBpcyBhbHNvIGFuIGFic3RyYWN0IGNvbXBvbmVudCwgZS5nLiA8a2VlcC1hbGl2ZT5cbi8vIHdlIHdhbnQgdG8gcmVjdXJzaXZlbHkgcmV0cmlldmUgdGhlIHJlYWwgY29tcG9uZW50IHRvIGJlIHJlbmRlcmVkXG5mdW5jdGlvbiBnZXRSZWFsQ2hpbGQodm5vZGUpIHtcbiAgICB2YXIgY29tcE9wdGlvbnMgPSB2bm9kZSAmJiB2bm9kZS5jb21wb25lbnRPcHRpb25zO1xuICAgIGlmIChjb21wT3B0aW9ucyAmJiBjb21wT3B0aW9ucy5DdG9yLm9wdGlvbnMuYWJzdHJhY3QpIHtcbiAgICAgICAgcmV0dXJuIGdldFJlYWxDaGlsZChnZXRGaXJzdENvbXBvbmVudENoaWxkKGNvbXBPcHRpb25zLmNoaWxkcmVuKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gdm5vZGU7XG4gICAgfVxufVxuZnVuY3Rpb24gZXh0cmFjdFRyYW5zaXRpb25EYXRhKGNvbXApIHtcbiAgICB2YXIgZGF0YSA9IHt9O1xuICAgIHZhciBvcHRpb25zID0gY29tcC4kb3B0aW9ucztcbiAgICAvLyBwcm9wc1xuICAgIGZvciAodmFyIGtleSBpbiBvcHRpb25zLnByb3BzRGF0YSkge1xuICAgICAgICBkYXRhW2tleV0gPSBjb21wW2tleV07XG4gICAgfVxuICAgIC8vIGV2ZW50cy5cbiAgICAvLyBleHRyYWN0IGxpc3RlbmVycyBhbmQgcGFzcyB0aGVtIGRpcmVjdGx5IHRvIHRoZSB0cmFuc2l0aW9uIG1ldGhvZHNcbiAgICB2YXIgbGlzdGVuZXJzID0gb3B0aW9ucy5fcGFyZW50TGlzdGVuZXJzO1xuICAgIGZvciAodmFyIGtleSBpbiBsaXN0ZW5lcnMpIHtcbiAgICAgICAgZGF0YVtjYW1lbGl6ZShrZXkpXSA9IGxpc3RlbmVyc1trZXldO1xuICAgIH1cbiAgICByZXR1cm4gZGF0YTtcbn1cbmZ1bmN0aW9uIHBsYWNlaG9sZGVyKGgsIHJhd0NoaWxkKSB7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgIGlmICgvXFxkLWtlZXAtYWxpdmUkLy50ZXN0KHJhd0NoaWxkLnRhZykpIHtcbiAgICAgICAgcmV0dXJuIGgoJ2tlZXAtYWxpdmUnLCB7XG4gICAgICAgICAgICBwcm9wczogcmF3Q2hpbGQuY29tcG9uZW50T3B0aW9ucy5wcm9wc0RhdGFcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZnVuY3Rpb24gaGFzUGFyZW50VHJhbnNpdGlvbih2bm9kZSkge1xuICAgIHdoaWxlICgodm5vZGUgPSB2bm9kZS5wYXJlbnQpKSB7XG4gICAgICAgIGlmICh2bm9kZS5kYXRhLnRyYW5zaXRpb24pIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gaXNTYW1lQ2hpbGQoY2hpbGQsIG9sZENoaWxkKSB7XG4gICAgcmV0dXJuIG9sZENoaWxkLmtleSA9PT0gY2hpbGQua2V5ICYmIG9sZENoaWxkLnRhZyA9PT0gY2hpbGQudGFnO1xufVxudmFyIGlzTm90VGV4dE5vZGUgPSBmdW5jdGlvbiAoYykgeyByZXR1cm4gYy50YWcgfHwgaXNBc3luY1BsYWNlaG9sZGVyKGMpOyB9O1xudmFyIGlzVlNob3dEaXJlY3RpdmUgPSBmdW5jdGlvbiAoZCkgeyByZXR1cm4gZC5uYW1lID09PSAnc2hvdyc7IH07XG52YXIgVHJhbnNpdGlvbiA9IHtcbiAgICBuYW1lOiAndHJhbnNpdGlvbicsXG4gICAgcHJvcHM6IHRyYW5zaXRpb25Qcm9wcyxcbiAgICBhYnN0cmFjdDogdHJ1ZSxcbiAgICByZW5kZXI6IGZ1bmN0aW9uIChoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuJHNsb3RzLmRlZmF1bHQ7XG4gICAgICAgIGlmICghY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBmaWx0ZXIgb3V0IHRleHQgbm9kZXMgKHBvc3NpYmxlIHdoaXRlc3BhY2VzKVxuICAgICAgICBjaGlsZHJlbiA9IGNoaWxkcmVuLmZpbHRlcihpc05vdFRleHROb2RlKTtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmICghY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gd2FybiBtdWx0aXBsZSBlbGVtZW50c1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBjaGlsZHJlbi5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICB3YXJuJDIoJzx0cmFuc2l0aW9uPiBjYW4gb25seSBiZSB1c2VkIG9uIGEgc2luZ2xlIGVsZW1lbnQuIFVzZSAnICtcbiAgICAgICAgICAgICAgICAnPHRyYW5zaXRpb24tZ3JvdXA+IGZvciBsaXN0cy4nLCB0aGlzLiRwYXJlbnQpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBtb2RlID0gdGhpcy5tb2RlO1xuICAgICAgICAvLyB3YXJuIGludmFsaWQgbW9kZVxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBtb2RlICYmIG1vZGUgIT09ICdpbi1vdXQnICYmIG1vZGUgIT09ICdvdXQtaW4nKSB7XG4gICAgICAgICAgICB3YXJuJDIoJ2ludmFsaWQgPHRyYW5zaXRpb24+IG1vZGU6ICcgKyBtb2RlLCB0aGlzLiRwYXJlbnQpO1xuICAgICAgICB9XG4gICAgICAgIHZhciByYXdDaGlsZCA9IGNoaWxkcmVuWzBdO1xuICAgICAgICAvLyBpZiB0aGlzIGlzIGEgY29tcG9uZW50IHJvb3Qgbm9kZSBhbmQgdGhlIGNvbXBvbmVudCdzXG4gICAgICAgIC8vIHBhcmVudCBjb250YWluZXIgbm9kZSBhbHNvIGhhcyB0cmFuc2l0aW9uLCBza2lwLlxuICAgICAgICBpZiAoaGFzUGFyZW50VHJhbnNpdGlvbih0aGlzLiR2bm9kZSkpIHtcbiAgICAgICAgICAgIHJldHVybiByYXdDaGlsZDtcbiAgICAgICAgfVxuICAgICAgICAvLyBhcHBseSB0cmFuc2l0aW9uIGRhdGEgdG8gY2hpbGRcbiAgICAgICAgLy8gdXNlIGdldFJlYWxDaGlsZCgpIHRvIGlnbm9yZSBhYnN0cmFjdCBjb21wb25lbnRzIGUuZy4ga2VlcC1hbGl2ZVxuICAgICAgICB2YXIgY2hpbGQgPSBnZXRSZWFsQ2hpbGQocmF3Q2hpbGQpO1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgaWYgKCFjaGlsZCkge1xuICAgICAgICAgICAgcmV0dXJuIHJhd0NoaWxkO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9sZWF2aW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gcGxhY2Vob2xkZXIoaCwgcmF3Q2hpbGQpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGVuc3VyZSBhIGtleSB0aGF0IGlzIHVuaXF1ZSB0byB0aGUgdm5vZGUgdHlwZSBhbmQgdG8gdGhpcyB0cmFuc2l0aW9uXG4gICAgICAgIC8vIGNvbXBvbmVudCBpbnN0YW5jZS4gVGhpcyBrZXkgd2lsbCBiZSB1c2VkIHRvIHJlbW92ZSBwZW5kaW5nIGxlYXZpbmcgbm9kZXNcbiAgICAgICAgLy8gZHVyaW5nIGVudGVyaW5nLlxuICAgICAgICB2YXIgaWQgPSBcIl9fdHJhbnNpdGlvbi1cIi5jb25jYXQodGhpcy5fdWlkLCBcIi1cIik7XG4gICAgICAgIGNoaWxkLmtleSA9XG4gICAgICAgICAgICBjaGlsZC5rZXkgPT0gbnVsbFxuICAgICAgICAgICAgICAgID8gY2hpbGQuaXNDb21tZW50XG4gICAgICAgICAgICAgICAgICAgID8gaWQgKyAnY29tbWVudCdcbiAgICAgICAgICAgICAgICAgICAgOiBpZCArIGNoaWxkLnRhZ1xuICAgICAgICAgICAgICAgIDogaXNQcmltaXRpdmUoY2hpbGQua2V5KVxuICAgICAgICAgICAgICAgICAgICA/IFN0cmluZyhjaGlsZC5rZXkpLmluZGV4T2YoaWQpID09PSAwXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGNoaWxkLmtleVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBpZCArIGNoaWxkLmtleVxuICAgICAgICAgICAgICAgICAgICA6IGNoaWxkLmtleTtcbiAgICAgICAgdmFyIGRhdGEgPSAoKGNoaWxkLmRhdGEgfHwgKGNoaWxkLmRhdGEgPSB7fSkpLnRyYW5zaXRpb24gPVxuICAgICAgICAgICAgZXh0cmFjdFRyYW5zaXRpb25EYXRhKHRoaXMpKTtcbiAgICAgICAgdmFyIG9sZFJhd0NoaWxkID0gdGhpcy5fdm5vZGU7XG4gICAgICAgIHZhciBvbGRDaGlsZCA9IGdldFJlYWxDaGlsZChvbGRSYXdDaGlsZCk7XG4gICAgICAgIC8vIG1hcmsgdi1zaG93XG4gICAgICAgIC8vIHNvIHRoYXQgdGhlIHRyYW5zaXRpb24gbW9kdWxlIGNhbiBoYW5kIG92ZXIgdGhlIGNvbnRyb2wgdG8gdGhlIGRpcmVjdGl2ZVxuICAgICAgICBpZiAoY2hpbGQuZGF0YS5kaXJlY3RpdmVzICYmIGNoaWxkLmRhdGEuZGlyZWN0aXZlcy5zb21lKGlzVlNob3dEaXJlY3RpdmUpKSB7XG4gICAgICAgICAgICBjaGlsZC5kYXRhLnNob3cgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvbGRDaGlsZCAmJlxuICAgICAgICAgICAgb2xkQ2hpbGQuZGF0YSAmJlxuICAgICAgICAgICAgIWlzU2FtZUNoaWxkKGNoaWxkLCBvbGRDaGlsZCkgJiZcbiAgICAgICAgICAgICFpc0FzeW5jUGxhY2Vob2xkZXIob2xkQ2hpbGQpICYmXG4gICAgICAgICAgICAvLyAjNjY4NyBjb21wb25lbnQgcm9vdCBpcyBhIGNvbW1lbnQgbm9kZVxuICAgICAgICAgICAgIShvbGRDaGlsZC5jb21wb25lbnRJbnN0YW5jZSAmJlxuICAgICAgICAgICAgICAgIG9sZENoaWxkLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZS5pc0NvbW1lbnQpKSB7XG4gICAgICAgICAgICAvLyByZXBsYWNlIG9sZCBjaGlsZCB0cmFuc2l0aW9uIGRhdGEgd2l0aCBmcmVzaCBvbmVcbiAgICAgICAgICAgIC8vIGltcG9ydGFudCBmb3IgZHluYW1pYyB0cmFuc2l0aW9ucyFcbiAgICAgICAgICAgIHZhciBvbGREYXRhID0gKG9sZENoaWxkLmRhdGEudHJhbnNpdGlvbiA9IGV4dGVuZCh7fSwgZGF0YSkpO1xuICAgICAgICAgICAgLy8gaGFuZGxlIHRyYW5zaXRpb24gbW9kZVxuICAgICAgICAgICAgaWYgKG1vZGUgPT09ICdvdXQtaW4nKSB7XG4gICAgICAgICAgICAgICAgLy8gcmV0dXJuIHBsYWNlaG9sZGVyIG5vZGUgYW5kIHF1ZXVlIHVwZGF0ZSB3aGVuIGxlYXZlIGZpbmlzaGVzXG4gICAgICAgICAgICAgICAgdGhpcy5fbGVhdmluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgbWVyZ2VWTm9kZUhvb2sob2xkRGF0YSwgJ2FmdGVyTGVhdmUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIF90aGlzLl9sZWF2aW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIF90aGlzLiRmb3JjZVVwZGF0ZSgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBwbGFjZWhvbGRlcihoLCByYXdDaGlsZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChtb2RlID09PSAnaW4tb3V0Jykge1xuICAgICAgICAgICAgICAgIGlmIChpc0FzeW5jUGxhY2Vob2xkZXIoY2hpbGQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvbGRSYXdDaGlsZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIGRlbGF5ZWRMZWF2ZV8xO1xuICAgICAgICAgICAgICAgIHZhciBwZXJmb3JtTGVhdmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGF5ZWRMZWF2ZV8xKCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBtZXJnZVZOb2RlSG9vayhkYXRhLCAnYWZ0ZXJFbnRlcicsIHBlcmZvcm1MZWF2ZSk7XG4gICAgICAgICAgICAgICAgbWVyZ2VWTm9kZUhvb2soZGF0YSwgJ2VudGVyQ2FuY2VsbGVkJywgcGVyZm9ybUxlYXZlKTtcbiAgICAgICAgICAgICAgICBtZXJnZVZOb2RlSG9vayhvbGREYXRhLCAnZGVsYXlMZWF2ZScsIGZ1bmN0aW9uIChsZWF2ZSkge1xuICAgICAgICAgICAgICAgICAgICBkZWxheWVkTGVhdmVfMSA9IGxlYXZlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByYXdDaGlsZDtcbiAgICB9XG59O1xuXG4vLyBQcm92aWRlcyB0cmFuc2l0aW9uIHN1cHBvcnQgZm9yIGxpc3QgaXRlbXMuXG52YXIgcHJvcHMgPSBleHRlbmQoe1xuICAgIHRhZzogU3RyaW5nLFxuICAgIG1vdmVDbGFzczogU3RyaW5nXG59LCB0cmFuc2l0aW9uUHJvcHMpO1xuZGVsZXRlIHByb3BzLm1vZGU7XG52YXIgVHJhbnNpdGlvbkdyb3VwID0ge1xuICAgIHByb3BzOiBwcm9wcyxcbiAgICBiZWZvcmVNb3VudDogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgdXBkYXRlID0gdGhpcy5fdXBkYXRlO1xuICAgICAgICB0aGlzLl91cGRhdGUgPSBmdW5jdGlvbiAodm5vZGUsIGh5ZHJhdGluZykge1xuICAgICAgICAgICAgdmFyIHJlc3RvcmVBY3RpdmVJbnN0YW5jZSA9IHNldEFjdGl2ZUluc3RhbmNlKF90aGlzKTtcbiAgICAgICAgICAgIC8vIGZvcmNlIHJlbW92aW5nIHBhc3NcbiAgICAgICAgICAgIF90aGlzLl9fcGF0Y2hfXyhfdGhpcy5fdm5vZGUsIF90aGlzLmtlcHQsIGZhbHNlLCAvLyBoeWRyYXRpbmdcbiAgICAgICAgICAgIHRydWUgLy8gcmVtb3ZlT25seSAoIWltcG9ydGFudCwgYXZvaWRzIHVubmVjZXNzYXJ5IG1vdmVzKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIF90aGlzLl92bm9kZSA9IF90aGlzLmtlcHQ7XG4gICAgICAgICAgICByZXN0b3JlQWN0aXZlSW5zdGFuY2UoKTtcbiAgICAgICAgICAgIHVwZGF0ZS5jYWxsKF90aGlzLCB2bm9kZSwgaHlkcmF0aW5nKTtcbiAgICAgICAgfTtcbiAgICB9LFxuICAgIHJlbmRlcjogZnVuY3Rpb24gKGgpIHtcbiAgICAgICAgdmFyIHRhZyA9IHRoaXMudGFnIHx8IHRoaXMuJHZub2RlLmRhdGEudGFnIHx8ICdzcGFuJztcbiAgICAgICAgdmFyIG1hcCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIHZhciBwcmV2Q2hpbGRyZW4gPSAodGhpcy5wcmV2Q2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuKTtcbiAgICAgICAgdmFyIHJhd0NoaWxkcmVuID0gdGhpcy4kc2xvdHMuZGVmYXVsdCB8fCBbXTtcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gKHRoaXMuY2hpbGRyZW4gPSBbXSk7XG4gICAgICAgIHZhciB0cmFuc2l0aW9uRGF0YSA9IGV4dHJhY3RUcmFuc2l0aW9uRGF0YSh0aGlzKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByYXdDaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGMgPSByYXdDaGlsZHJlbltpXTtcbiAgICAgICAgICAgIGlmIChjLnRhZykge1xuICAgICAgICAgICAgICAgIGlmIChjLmtleSAhPSBudWxsICYmIFN0cmluZyhjLmtleSkuaW5kZXhPZignX192bGlzdCcpICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goYyk7XG4gICAgICAgICAgICAgICAgICAgIG1hcFtjLmtleV0gPSBjO1xuICAgICAgICAgICAgICAgICAgICAoYy5kYXRhIHx8IChjLmRhdGEgPSB7fSkpLnRyYW5zaXRpb24gPSB0cmFuc2l0aW9uRGF0YTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgb3B0cyA9IGMuY29tcG9uZW50T3B0aW9ucztcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWVfMSA9IG9wdHNcbiAgICAgICAgICAgICAgICAgICAgICAgID8gZ2V0Q29tcG9uZW50TmFtZShvcHRzLkN0b3Iub3B0aW9ucykgfHwgb3B0cy50YWcgfHwgJydcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYy50YWc7XG4gICAgICAgICAgICAgICAgICAgIHdhcm4kMihcIjx0cmFuc2l0aW9uLWdyb3VwPiBjaGlsZHJlbiBtdXN0IGJlIGtleWVkOiA8XCIuY29uY2F0KG5hbWVfMSwgXCI+XCIpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByZXZDaGlsZHJlbikge1xuICAgICAgICAgICAgdmFyIGtlcHQgPSBbXTtcbiAgICAgICAgICAgIHZhciByZW1vdmVkID0gW107XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByZXZDaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciBjID0gcHJldkNoaWxkcmVuW2ldO1xuICAgICAgICAgICAgICAgIGMuZGF0YS50cmFuc2l0aW9uID0gdHJhbnNpdGlvbkRhdGE7XG4gICAgICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAuZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGlzIG5vdCB0eXBlZCBpbiBOb2RlXG4gICAgICAgICAgICAgICAgYy5kYXRhLnBvcyA9IGMuZWxtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgICAgIGlmIChtYXBbYy5rZXldKSB7XG4gICAgICAgICAgICAgICAgICAgIGtlcHQucHVzaChjKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZWQucHVzaChjKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmtlcHQgPSBoKHRhZywgbnVsbCwga2VwdCk7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZWQgPSByZW1vdmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBoKHRhZywgbnVsbCwgY2hpbGRyZW4pO1xuICAgIH0sXG4gICAgdXBkYXRlZDogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLnByZXZDaGlsZHJlbjtcbiAgICAgICAgdmFyIG1vdmVDbGFzcyA9IHRoaXMubW92ZUNsYXNzIHx8ICh0aGlzLm5hbWUgfHwgJ3YnKSArICctbW92ZSc7XG4gICAgICAgIGlmICghY2hpbGRyZW4ubGVuZ3RoIHx8ICF0aGlzLmhhc01vdmUoY2hpbGRyZW5bMF0uZWxtLCBtb3ZlQ2xhc3MpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gd2UgZGl2aWRlIHRoZSB3b3JrIGludG8gdGhyZWUgbG9vcHMgdG8gYXZvaWQgbWl4aW5nIERPTSByZWFkcyBhbmQgd3JpdGVzXG4gICAgICAgIC8vIGluIGVhY2ggaXRlcmF0aW9uIC0gd2hpY2ggaGVscHMgcHJldmVudCBsYXlvdXQgdGhyYXNoaW5nLlxuICAgICAgICBjaGlsZHJlbi5mb3JFYWNoKGNhbGxQZW5kaW5nQ2JzKTtcbiAgICAgICAgY2hpbGRyZW4uZm9yRWFjaChyZWNvcmRQb3NpdGlvbik7XG4gICAgICAgIGNoaWxkcmVuLmZvckVhY2goYXBwbHlUcmFuc2xhdGlvbik7XG4gICAgICAgIC8vIGZvcmNlIHJlZmxvdyB0byBwdXQgZXZlcnl0aGluZyBpbiBwb3NpdGlvblxuICAgICAgICAvLyBhc3NpZ24gdG8gdGhpcyB0byBhdm9pZCBiZWluZyByZW1vdmVkIGluIHRyZWUtc2hha2luZ1xuICAgICAgICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgICAgICAgdGhpcy5fcmVmbG93ID0gZG9jdW1lbnQuYm9keS5vZmZzZXRIZWlnaHQ7XG4gICAgICAgIGNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24gKGMpIHtcbiAgICAgICAgICAgIGlmIChjLmRhdGEubW92ZWQpIHtcbiAgICAgICAgICAgICAgICB2YXIgZWxfMSA9IGMuZWxtO1xuICAgICAgICAgICAgICAgIHZhciBzID0gZWxfMS5zdHlsZTtcbiAgICAgICAgICAgICAgICBhZGRUcmFuc2l0aW9uQ2xhc3MoZWxfMSwgbW92ZUNsYXNzKTtcbiAgICAgICAgICAgICAgICBzLnRyYW5zZm9ybSA9IHMuV2Via2l0VHJhbnNmb3JtID0gcy50cmFuc2l0aW9uRHVyYXRpb24gPSAnJztcbiAgICAgICAgICAgICAgICBlbF8xLmFkZEV2ZW50TGlzdGVuZXIodHJhbnNpdGlvbkVuZEV2ZW50LCAoZWxfMS5fbW92ZUNiID0gZnVuY3Rpb24gY2IoZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZSAmJiBlLnRhcmdldCAhPT0gZWxfMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICghZSB8fCAvdHJhbnNmb3JtJC8udGVzdChlLnByb3BlcnR5TmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsXzEucmVtb3ZlRXZlbnRMaXN0ZW5lcih0cmFuc2l0aW9uRW5kRXZlbnQsIGNiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsXzEuX21vdmVDYiA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWxfMSwgbW92ZUNsYXNzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBtZXRob2RzOiB7XG4gICAgICAgIGhhc01vdmU6IGZ1bmN0aW9uIChlbCwgbW92ZUNsYXNzKSB7XG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICAgIGlmICghaGFzVHJhbnNpdGlvbikge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgaWYgKHRoaXMuX2hhc01vdmUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5faGFzTW92ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIERldGVjdCB3aGV0aGVyIGFuIGVsZW1lbnQgd2l0aCB0aGUgbW92ZSBjbGFzcyBhcHBsaWVkIGhhc1xuICAgICAgICAgICAgLy8gQ1NTIHRyYW5zaXRpb25zLiBTaW5jZSB0aGUgZWxlbWVudCBtYXkgYmUgaW5zaWRlIGFuIGVudGVyaW5nXG4gICAgICAgICAgICAvLyB0cmFuc2l0aW9uIGF0IHRoaXMgdmVyeSBtb21lbnQsIHdlIG1ha2UgYSBjbG9uZSBvZiBpdCBhbmQgcmVtb3ZlXG4gICAgICAgICAgICAvLyBhbGwgb3RoZXIgdHJhbnNpdGlvbiBjbGFzc2VzIGFwcGxpZWQgdG8gZW5zdXJlIG9ubHkgdGhlIG1vdmUgY2xhc3NcbiAgICAgICAgICAgIC8vIGlzIGFwcGxpZWQuXG4gICAgICAgICAgICB2YXIgY2xvbmUgPSBlbC5jbG9uZU5vZGUoKTtcbiAgICAgICAgICAgIGlmIChlbC5fdHJhbnNpdGlvbkNsYXNzZXMpIHtcbiAgICAgICAgICAgICAgICBlbC5fdHJhbnNpdGlvbkNsYXNzZXMuZm9yRWFjaChmdW5jdGlvbiAoY2xzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUNsYXNzKGNsb25lLCBjbHMpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYWRkQ2xhc3MoY2xvbmUsIG1vdmVDbGFzcyk7XG4gICAgICAgICAgICBjbG9uZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICAgICAgdGhpcy4kZWwuYXBwZW5kQ2hpbGQoY2xvbmUpO1xuICAgICAgICAgICAgdmFyIGluZm8gPSBnZXRUcmFuc2l0aW9uSW5mbyhjbG9uZSk7XG4gICAgICAgICAgICB0aGlzLiRlbC5yZW1vdmVDaGlsZChjbG9uZSk7XG4gICAgICAgICAgICByZXR1cm4gKHRoaXMuX2hhc01vdmUgPSBpbmZvLmhhc1RyYW5zZm9ybSk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuZnVuY3Rpb24gY2FsbFBlbmRpbmdDYnMoYykge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChjLmVsbS5fbW92ZUNiKSB7XG4gICAgICAgIGMuZWxtLl9tb3ZlQ2IoKTtcbiAgICB9XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGMuZWxtLl9lbnRlckNiKSB7XG4gICAgICAgIGMuZWxtLl9lbnRlckNiKCk7XG4gICAgfVxufVxuZnVuY3Rpb24gcmVjb3JkUG9zaXRpb24oYykge1xuICAgIGMuZGF0YS5uZXdQb3MgPSBjLmVsbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbn1cbmZ1bmN0aW9uIGFwcGx5VHJhbnNsYXRpb24oYykge1xuICAgIHZhciBvbGRQb3MgPSBjLmRhdGEucG9zO1xuICAgIHZhciBuZXdQb3MgPSBjLmRhdGEubmV3UG9zO1xuICAgIHZhciBkeCA9IG9sZFBvcy5sZWZ0IC0gbmV3UG9zLmxlZnQ7XG4gICAgdmFyIGR5ID0gb2xkUG9zLnRvcCAtIG5ld1Bvcy50b3A7XG4gICAgaWYgKGR4IHx8IGR5KSB7XG4gICAgICAgIGMuZGF0YS5tb3ZlZCA9IHRydWU7XG4gICAgICAgIHZhciBzID0gYy5lbG0uc3R5bGU7XG4gICAgICAgIHMudHJhbnNmb3JtID0gcy5XZWJraXRUcmFuc2Zvcm0gPSBcInRyYW5zbGF0ZShcIi5jb25jYXQoZHgsIFwicHgsXCIpLmNvbmNhdChkeSwgXCJweClcIik7XG4gICAgICAgIHMudHJhbnNpdGlvbkR1cmF0aW9uID0gJzBzJztcbiAgICB9XG59XG5cbnZhciBwbGF0Zm9ybUNvbXBvbmVudHMgPSB7XG4gICAgVHJhbnNpdGlvbjogVHJhbnNpdGlvbixcbiAgICBUcmFuc2l0aW9uR3JvdXA6IFRyYW5zaXRpb25Hcm91cFxufTtcblxuLy8gaW5zdGFsbCBwbGF0Zm9ybSBzcGVjaWZpYyB1dGlsc1xuVnVlLmNvbmZpZy5tdXN0VXNlUHJvcCA9IG11c3RVc2VQcm9wO1xuVnVlLmNvbmZpZy5pc1Jlc2VydmVkVGFnID0gaXNSZXNlcnZlZFRhZztcblZ1ZS5jb25maWcuaXNSZXNlcnZlZEF0dHIgPSBpc1Jlc2VydmVkQXR0cjtcblZ1ZS5jb25maWcuZ2V0VGFnTmFtZXNwYWNlID0gZ2V0VGFnTmFtZXNwYWNlO1xuVnVlLmNvbmZpZy5pc1Vua25vd25FbGVtZW50ID0gaXNVbmtub3duRWxlbWVudDtcbi8vIGluc3RhbGwgcGxhdGZvcm0gcnVudGltZSBkaXJlY3RpdmVzICYgY29tcG9uZW50c1xuZXh0ZW5kKFZ1ZS5vcHRpb25zLmRpcmVjdGl2ZXMsIHBsYXRmb3JtRGlyZWN0aXZlcyk7XG5leHRlbmQoVnVlLm9wdGlvbnMuY29tcG9uZW50cywgcGxhdGZvcm1Db21wb25lbnRzKTtcbi8vIGluc3RhbGwgcGxhdGZvcm0gcGF0Y2ggZnVuY3Rpb25cblZ1ZS5wcm90b3R5cGUuX19wYXRjaF9fID0gaW5Ccm93c2VyID8gcGF0Y2ggOiBub29wO1xuLy8gcHVibGljIG1vdW50IG1ldGhvZFxuVnVlLnByb3RvdHlwZS4kbW91bnQgPSBmdW5jdGlvbiAoZWwsIGh5ZHJhdGluZykge1xuICAgIGVsID0gZWwgJiYgaW5Ccm93c2VyID8gcXVlcnkoZWwpIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiBtb3VudENvbXBvbmVudCh0aGlzLCBlbCwgaHlkcmF0aW5nKTtcbn07XG4vLyBkZXZ0b29scyBnbG9iYWwgaG9va1xuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmlmIChpbkJyb3dzZXIpIHtcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKGNvbmZpZy5kZXZ0b29scykge1xuICAgICAgICAgICAgaWYgKGRldnRvb2xzKSB7XG4gICAgICAgICAgICAgICAgZGV2dG9vbHMuZW1pdCgnaW5pdCcsIFZ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAndGVzdCcpIHtcbiAgICAgICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgICAgICAgICAgY29uc29sZVtjb25zb2xlLmluZm8gPyAnaW5mbycgOiAnbG9nJ10oJ0Rvd25sb2FkIHRoZSBWdWUgRGV2dG9vbHMgZXh0ZW5zaW9uIGZvciBhIGJldHRlciBkZXZlbG9wbWVudCBleHBlcmllbmNlOlxcbicgK1xuICAgICAgICAgICAgICAgICAgICAnaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS1kZXZ0b29scycpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Rlc3QnICYmXG4gICAgICAgICAgICBjb25maWcucHJvZHVjdGlvblRpcCAhPT0gZmFsc2UgJiZcbiAgICAgICAgICAgIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICAgICAgY29uc29sZVtjb25zb2xlLmluZm8gPyAnaW5mbycgOiAnbG9nJ10oXCJZb3UgYXJlIHJ1bm5pbmcgVnVlIGluIGRldmVsb3BtZW50IG1vZGUuXFxuXCIgK1xuICAgICAgICAgICAgICAgIFwiTWFrZSBzdXJlIHRvIHR1cm4gb24gcHJvZHVjdGlvbiBtb2RlIHdoZW4gZGVwbG95aW5nIGZvciBwcm9kdWN0aW9uLlxcblwiICtcbiAgICAgICAgICAgICAgICBcIlNlZSBtb3JlIHRpcHMgYXQgaHR0cHM6Ly92dWVqcy5vcmcvZ3VpZGUvZGVwbG95bWVudC5odG1sXCIpO1xuICAgICAgICB9XG4gICAgfSwgMCk7XG59XG5cbnZhciBkZWZhdWx0VGFnUkUgPSAvXFx7XFx7KCg/Oi58XFxyP1xcbikrPylcXH1cXH0vZztcbnZhciByZWdleEVzY2FwZVJFID0gL1stLiorP14ke30oKXxbXFxdXFwvXFxcXF0vZztcbnZhciBidWlsZFJlZ2V4ID0gY2FjaGVkKGZ1bmN0aW9uIChkZWxpbWl0ZXJzKSB7XG4gICAgdmFyIG9wZW4gPSBkZWxpbWl0ZXJzWzBdLnJlcGxhY2UocmVnZXhFc2NhcGVSRSwgJ1xcXFwkJicpO1xuICAgIHZhciBjbG9zZSA9IGRlbGltaXRlcnNbMV0ucmVwbGFjZShyZWdleEVzY2FwZVJFLCAnXFxcXCQmJyk7XG4gICAgcmV0dXJuIG5ldyBSZWdFeHAob3BlbiArICcoKD86LnxcXFxcbikrPyknICsgY2xvc2UsICdnJyk7XG59KTtcbmZ1bmN0aW9uIHBhcnNlVGV4dCh0ZXh0LCBkZWxpbWl0ZXJzKSB7XG4gICAgLy9AdHMtZXhwZWN0LWVycm9yXG4gICAgdmFyIHRhZ1JFID0gZGVsaW1pdGVycyA/IGJ1aWxkUmVnZXgoZGVsaW1pdGVycykgOiBkZWZhdWx0VGFnUkU7XG4gICAgaWYgKCF0YWdSRS50ZXN0KHRleHQpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHRva2VucyA9IFtdO1xuICAgIHZhciByYXdUb2tlbnMgPSBbXTtcbiAgICB2YXIgbGFzdEluZGV4ID0gKHRhZ1JFLmxhc3RJbmRleCA9IDApO1xuICAgIHZhciBtYXRjaCwgaW5kZXgsIHRva2VuVmFsdWU7XG4gICAgd2hpbGUgKChtYXRjaCA9IHRhZ1JFLmV4ZWModGV4dCkpKSB7XG4gICAgICAgIGluZGV4ID0gbWF0Y2guaW5kZXg7XG4gICAgICAgIC8vIHB1c2ggdGV4dCB0b2tlblxuICAgICAgICBpZiAoaW5kZXggPiBsYXN0SW5kZXgpIHtcbiAgICAgICAgICAgIHJhd1Rva2Vucy5wdXNoKCh0b2tlblZhbHVlID0gdGV4dC5zbGljZShsYXN0SW5kZXgsIGluZGV4KSkpO1xuICAgICAgICAgICAgdG9rZW5zLnB1c2goSlNPTi5zdHJpbmdpZnkodG9rZW5WYWx1ZSkpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHRhZyB0b2tlblxuICAgICAgICB2YXIgZXhwID0gcGFyc2VGaWx0ZXJzKG1hdGNoWzFdLnRyaW0oKSk7XG4gICAgICAgIHRva2Vucy5wdXNoKFwiX3MoXCIuY29uY2F0KGV4cCwgXCIpXCIpKTtcbiAgICAgICAgcmF3VG9rZW5zLnB1c2goeyAnQGJpbmRpbmcnOiBleHAgfSk7XG4gICAgICAgIGxhc3RJbmRleCA9IGluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoO1xuICAgIH1cbiAgICBpZiAobGFzdEluZGV4IDwgdGV4dC5sZW5ndGgpIHtcbiAgICAgICAgcmF3VG9rZW5zLnB1c2goKHRva2VuVmFsdWUgPSB0ZXh0LnNsaWNlKGxhc3RJbmRleCkpKTtcbiAgICAgICAgdG9rZW5zLnB1c2goSlNPTi5zdHJpbmdpZnkodG9rZW5WYWx1ZSkpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBleHByZXNzaW9uOiB0b2tlbnMuam9pbignKycpLFxuICAgICAgICB0b2tlbnM6IHJhd1Rva2Vuc1xuICAgIH07XG59XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybU5vZGUkMShlbCwgb3B0aW9ucykge1xuICAgIHZhciB3YXJuID0gb3B0aW9ucy53YXJuIHx8IGJhc2VXYXJuO1xuICAgIHZhciBzdGF0aWNDbGFzcyA9IGdldEFuZFJlbW92ZUF0dHIoZWwsICdjbGFzcycpO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHN0YXRpY0NsYXNzKSB7XG4gICAgICAgIHZhciByZXMgPSBwYXJzZVRleHQoc3RhdGljQ2xhc3MsIG9wdGlvbnMuZGVsaW1pdGVycyk7XG4gICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAgIHdhcm4oXCJjbGFzcz1cXFwiXCIuY29uY2F0KHN0YXRpY0NsYXNzLCBcIlxcXCI6IFwiKSArXG4gICAgICAgICAgICAgICAgJ0ludGVycG9sYXRpb24gaW5zaWRlIGF0dHJpYnV0ZXMgaGFzIGJlZW4gcmVtb3ZlZC4gJyArXG4gICAgICAgICAgICAgICAgJ1VzZSB2LWJpbmQgb3IgdGhlIGNvbG9uIHNob3J0aGFuZCBpbnN0ZWFkLiBGb3IgZXhhbXBsZSwgJyArXG4gICAgICAgICAgICAgICAgJ2luc3RlYWQgb2YgPGRpdiBjbGFzcz1cInt7IHZhbCB9fVwiPiwgdXNlIDxkaXYgOmNsYXNzPVwidmFsXCI+LicsIGVsLnJhd0F0dHJzTWFwWydjbGFzcyddKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoc3RhdGljQ2xhc3MpIHtcbiAgICAgICAgZWwuc3RhdGljQ2xhc3MgPSBKU09OLnN0cmluZ2lmeShzdGF0aWNDbGFzcy5yZXBsYWNlKC9cXHMrL2csICcgJykudHJpbSgpKTtcbiAgICB9XG4gICAgdmFyIGNsYXNzQmluZGluZyA9IGdldEJpbmRpbmdBdHRyKGVsLCAnY2xhc3MnLCBmYWxzZSAvKiBnZXRTdGF0aWMgKi8pO1xuICAgIGlmIChjbGFzc0JpbmRpbmcpIHtcbiAgICAgICAgZWwuY2xhc3NCaW5kaW5nID0gY2xhc3NCaW5kaW5nO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGdlbkRhdGEkMihlbCkge1xuICAgIHZhciBkYXRhID0gJyc7XG4gICAgaWYgKGVsLnN0YXRpY0NsYXNzKSB7XG4gICAgICAgIGRhdGEgKz0gXCJzdGF0aWNDbGFzczpcIi5jb25jYXQoZWwuc3RhdGljQ2xhc3MsIFwiLFwiKTtcbiAgICB9XG4gICAgaWYgKGVsLmNsYXNzQmluZGluZykge1xuICAgICAgICBkYXRhICs9IFwiY2xhc3M6XCIuY29uY2F0KGVsLmNsYXNzQmluZGluZywgXCIsXCIpO1xuICAgIH1cbiAgICByZXR1cm4gZGF0YTtcbn1cbnZhciBrbGFzcyA9IHtcbiAgICBzdGF0aWNLZXlzOiBbJ3N0YXRpY0NsYXNzJ10sXG4gICAgdHJhbnNmb3JtTm9kZTogdHJhbnNmb3JtTm9kZSQxLFxuICAgIGdlbkRhdGE6IGdlbkRhdGEkMlxufTtcblxuZnVuY3Rpb24gdHJhbnNmb3JtTm9kZShlbCwgb3B0aW9ucykge1xuICAgIHZhciB3YXJuID0gb3B0aW9ucy53YXJuIHx8IGJhc2VXYXJuO1xuICAgIHZhciBzdGF0aWNTdHlsZSA9IGdldEFuZFJlbW92ZUF0dHIoZWwsICdzdHlsZScpO1xuICAgIGlmIChzdGF0aWNTdHlsZSkge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgIHZhciByZXMgPSBwYXJzZVRleHQoc3RhdGljU3R5bGUsIG9wdGlvbnMuZGVsaW1pdGVycyk7XG4gICAgICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgICAgICAgd2FybihcInN0eWxlPVxcXCJcIi5jb25jYXQoc3RhdGljU3R5bGUsIFwiXFxcIjogXCIpICtcbiAgICAgICAgICAgICAgICAgICAgJ0ludGVycG9sYXRpb24gaW5zaWRlIGF0dHJpYnV0ZXMgaGFzIGJlZW4gcmVtb3ZlZC4gJyArXG4gICAgICAgICAgICAgICAgICAgICdVc2Ugdi1iaW5kIG9yIHRoZSBjb2xvbiBzaG9ydGhhbmQgaW5zdGVhZC4gRm9yIGV4YW1wbGUsICcgK1xuICAgICAgICAgICAgICAgICAgICAnaW5zdGVhZCBvZiA8ZGl2IHN0eWxlPVwie3sgdmFsIH19XCI+LCB1c2UgPGRpdiA6c3R5bGU9XCJ2YWxcIj4uJywgZWwucmF3QXR0cnNNYXBbJ3N0eWxlJ10pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsLnN0YXRpY1N0eWxlID0gSlNPTi5zdHJpbmdpZnkocGFyc2VTdHlsZVRleHQoc3RhdGljU3R5bGUpKTtcbiAgICB9XG4gICAgdmFyIHN0eWxlQmluZGluZyA9IGdldEJpbmRpbmdBdHRyKGVsLCAnc3R5bGUnLCBmYWxzZSAvKiBnZXRTdGF0aWMgKi8pO1xuICAgIGlmIChzdHlsZUJpbmRpbmcpIHtcbiAgICAgICAgZWwuc3R5bGVCaW5kaW5nID0gc3R5bGVCaW5kaW5nO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGdlbkRhdGEkMShlbCkge1xuICAgIHZhciBkYXRhID0gJyc7XG4gICAgaWYgKGVsLnN0YXRpY1N0eWxlKSB7XG4gICAgICAgIGRhdGEgKz0gXCJzdGF0aWNTdHlsZTpcIi5jb25jYXQoZWwuc3RhdGljU3R5bGUsIFwiLFwiKTtcbiAgICB9XG4gICAgaWYgKGVsLnN0eWxlQmluZGluZykge1xuICAgICAgICBkYXRhICs9IFwic3R5bGU6KFwiLmNvbmNhdChlbC5zdHlsZUJpbmRpbmcsIFwiKSxcIik7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xufVxudmFyIHN0eWxlID0ge1xuICAgIHN0YXRpY0tleXM6IFsnc3RhdGljU3R5bGUnXSxcbiAgICB0cmFuc2Zvcm1Ob2RlOiB0cmFuc2Zvcm1Ob2RlLFxuICAgIGdlbkRhdGE6IGdlbkRhdGEkMVxufTtcblxudmFyIGRlY29kZXI7XG52YXIgaGUgPSB7XG4gICAgZGVjb2RlOiBmdW5jdGlvbiAoaHRtbCkge1xuICAgICAgICBkZWNvZGVyID0gZGVjb2RlciB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgZGVjb2Rlci5pbm5lckhUTUwgPSBodG1sO1xuICAgICAgICByZXR1cm4gZGVjb2Rlci50ZXh0Q29udGVudDtcbiAgICB9XG59O1xuXG52YXIgaXNVbmFyeVRhZyA9IG1ha2VNYXAoJ2FyZWEsYmFzZSxicixjb2wsZW1iZWQsZnJhbWUsaHIsaW1nLGlucHV0LGlzaW5kZXgsa2V5Z2VuLCcgK1xuICAgICdsaW5rLG1ldGEscGFyYW0sc291cmNlLHRyYWNrLHdicicpO1xuLy8gRWxlbWVudHMgdGhhdCB5b3UgY2FuLCBpbnRlbnRpb25hbGx5LCBsZWF2ZSBvcGVuXG4vLyAoYW5kIHdoaWNoIGNsb3NlIHRoZW1zZWx2ZXMpXG52YXIgY2FuQmVMZWZ0T3BlblRhZyA9IG1ha2VNYXAoJ2NvbGdyb3VwLGRkLGR0LGxpLG9wdGlvbnMscCx0ZCx0Zm9vdCx0aCx0aGVhZCx0cixzb3VyY2UnKTtcbi8vIEhUTUw1IHRhZ3MgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvaW5kaWNlcy5odG1sI2VsZW1lbnRzLTNcbi8vIFBocmFzaW5nIENvbnRlbnQgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZG9tLmh0bWwjcGhyYXNpbmctY29udGVudFxudmFyIGlzTm9uUGhyYXNpbmdUYWcgPSBtYWtlTWFwKCdhZGRyZXNzLGFydGljbGUsYXNpZGUsYmFzZSxibG9ja3F1b3RlLGJvZHksY2FwdGlvbixjb2wsY29sZ3JvdXAsZGQsJyArXG4gICAgJ2RldGFpbHMsZGlhbG9nLGRpdixkbCxkdCxmaWVsZHNldCxmaWdjYXB0aW9uLGZpZ3VyZSxmb290ZXIsZm9ybSwnICtcbiAgICAnaDEsaDIsaDMsaDQsaDUsaDYsaGVhZCxoZWFkZXIsaGdyb3VwLGhyLGh0bWwsbGVnZW5kLGxpLG1lbnVpdGVtLG1ldGEsJyArXG4gICAgJ29wdGdyb3VwLG9wdGlvbixwYXJhbSxycCxydCxzb3VyY2Usc3R5bGUsc3VtbWFyeSx0Ym9keSx0ZCx0Zm9vdCx0aCx0aGVhZCwnICtcbiAgICAndGl0bGUsdHIsdHJhY2snKTtcblxuLyoqXG4gKiBOb3QgdHlwZS1jaGVja2luZyB0aGlzIGZpbGUgYmVjYXVzZSBpdCdzIG1vc3RseSB2ZW5kb3IgY29kZS5cbiAqL1xuLy8gUmVndWxhciBFeHByZXNzaW9ucyBmb3IgcGFyc2luZyB0YWdzIGFuZCBhdHRyaWJ1dGVzXG52YXIgYXR0cmlidXRlID0gL15cXHMqKFteXFxzXCInPD5cXC89XSspKD86XFxzKig9KVxccyooPzpcIihbXlwiXSopXCIrfCcoW14nXSopJyt8KFteXFxzXCInPTw+YF0rKSkpPy87XG52YXIgZHluYW1pY0FyZ0F0dHJpYnV0ZSA9IC9eXFxzKigoPzp2LVtcXHctXSs6fEB8OnwjKVxcW1tePV0rP1xcXVteXFxzXCInPD5cXC89XSopKD86XFxzKig9KVxccyooPzpcIihbXlwiXSopXCIrfCcoW14nXSopJyt8KFteXFxzXCInPTw+YF0rKSkpPy87XG52YXIgbmNuYW1lID0gXCJbYS16QS1aX11bXFxcXC1cXFxcLjAtOV9hLXpBLVpcIi5jb25jYXQodW5pY29kZVJlZ0V4cC5zb3VyY2UsIFwiXSpcIik7XG52YXIgcW5hbWVDYXB0dXJlID0gXCIoKD86XCIuY29uY2F0KG5jbmFtZSwgXCJcXFxcOik/XCIpLmNvbmNhdChuY25hbWUsIFwiKVwiKTtcbnZhciBzdGFydFRhZ09wZW4gPSBuZXcgUmVnRXhwKFwiXjxcIi5jb25jYXQocW5hbWVDYXB0dXJlKSk7XG52YXIgc3RhcnRUYWdDbG9zZSA9IC9eXFxzKihcXC8/KT4vO1xudmFyIGVuZFRhZyA9IG5ldyBSZWdFeHAoXCJePFxcXFwvXCIuY29uY2F0KHFuYW1lQ2FwdHVyZSwgXCJbXj5dKj5cIikpO1xudmFyIGRvY3R5cGUgPSAvXjwhRE9DVFlQRSBbXj5dKz4vaTtcbi8vICM3Mjk4OiBlc2NhcGUgLSB0byBhdm9pZCBiZWluZyBwYXNzZWQgYXMgSFRNTCBjb21tZW50IHdoZW4gaW5saW5lZCBpbiBwYWdlXG52YXIgY29tbWVudCA9IC9ePCFcXC0tLztcbnZhciBjb25kaXRpb25hbENvbW1lbnQgPSAvXjwhXFxbLztcbi8vIFNwZWNpYWwgRWxlbWVudHMgKGNhbiBjb250YWluIGFueXRoaW5nKVxudmFyIGlzUGxhaW5UZXh0RWxlbWVudCA9IG1ha2VNYXAoJ3NjcmlwdCxzdHlsZSx0ZXh0YXJlYScsIHRydWUpO1xudmFyIHJlQ2FjaGUgPSB7fTtcbnZhciBkZWNvZGluZ01hcCA9IHtcbiAgICAnJmx0Oyc6ICc8JyxcbiAgICAnJmd0Oyc6ICc+JyxcbiAgICAnJnF1b3Q7JzogJ1wiJyxcbiAgICAnJmFtcDsnOiAnJicsXG4gICAgJyYjMTA7JzogJ1xcbicsXG4gICAgJyYjOTsnOiAnXFx0JyxcbiAgICAnJiMzOTsnOiBcIidcIlxufTtcbnZhciBlbmNvZGVkQXR0ciA9IC8mKD86bHR8Z3R8cXVvdHxhbXB8IzM5KTsvZztcbnZhciBlbmNvZGVkQXR0cldpdGhOZXdMaW5lcyA9IC8mKD86bHR8Z3R8cXVvdHxhbXB8IzM5fCMxMHwjOSk7L2c7XG4vLyAjNTk5MlxudmFyIGlzSWdub3JlTmV3bGluZVRhZyA9IG1ha2VNYXAoJ3ByZSx0ZXh0YXJlYScsIHRydWUpO1xudmFyIHNob3VsZElnbm9yZUZpcnN0TmV3bGluZSA9IGZ1bmN0aW9uICh0YWcsIGh0bWwpIHtcbiAgICByZXR1cm4gdGFnICYmIGlzSWdub3JlTmV3bGluZVRhZyh0YWcpICYmIGh0bWxbMF0gPT09ICdcXG4nO1xufTtcbmZ1bmN0aW9uIGRlY29kZUF0dHIodmFsdWUsIHNob3VsZERlY29kZU5ld2xpbmVzKSB7XG4gICAgdmFyIHJlID0gc2hvdWxkRGVjb2RlTmV3bGluZXMgPyBlbmNvZGVkQXR0cldpdGhOZXdMaW5lcyA6IGVuY29kZWRBdHRyO1xuICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKHJlLCBmdW5jdGlvbiAobWF0Y2gpIHsgcmV0dXJuIGRlY29kaW5nTWFwW21hdGNoXTsgfSk7XG59XG5mdW5jdGlvbiBwYXJzZUhUTUwoaHRtbCwgb3B0aW9ucykge1xuICAgIHZhciBzdGFjayA9IFtdO1xuICAgIHZhciBleHBlY3RIVE1MID0gb3B0aW9ucy5leHBlY3RIVE1MO1xuICAgIHZhciBpc1VuYXJ5VGFnID0gb3B0aW9ucy5pc1VuYXJ5VGFnIHx8IG5vO1xuICAgIHZhciBjYW5CZUxlZnRPcGVuVGFnID0gb3B0aW9ucy5jYW5CZUxlZnRPcGVuVGFnIHx8IG5vO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGxhc3QsIGxhc3RUYWc7XG4gICAgdmFyIF9sb29wXzEgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxhc3QgPSBodG1sO1xuICAgICAgICAvLyBNYWtlIHN1cmUgd2UncmUgbm90IGluIGEgcGxhaW50ZXh0IGNvbnRlbnQgZWxlbWVudCBsaWtlIHNjcmlwdC9zdHlsZVxuICAgICAgICBpZiAoIWxhc3RUYWcgfHwgIWlzUGxhaW5UZXh0RWxlbWVudChsYXN0VGFnKSkge1xuICAgICAgICAgICAgdmFyIHRleHRFbmQgPSBodG1sLmluZGV4T2YoJzwnKTtcbiAgICAgICAgICAgIGlmICh0ZXh0RW5kID09PSAwKSB7XG4gICAgICAgICAgICAgICAgLy8gQ29tbWVudDpcbiAgICAgICAgICAgICAgICBpZiAoY29tbWVudC50ZXN0KGh0bWwpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjb21tZW50RW5kID0gaHRtbC5pbmRleE9mKCctLT4nKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbW1lbnRFbmQgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuc2hvdWxkS2VlcENvbW1lbnQgJiYgb3B0aW9ucy5jb21tZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5jb21tZW50KGh0bWwuc3Vic3RyaW5nKDQsIGNvbW1lbnRFbmQpLCBpbmRleCwgaW5kZXggKyBjb21tZW50RW5kICsgMyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBhZHZhbmNlKGNvbW1lbnRFbmQgKyAzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImNvbnRpbnVlXCI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Db25kaXRpb25hbF9jb21tZW50I0Rvd25sZXZlbC1yZXZlYWxlZF9jb25kaXRpb25hbF9jb21tZW50XG4gICAgICAgICAgICAgICAgaWYgKGNvbmRpdGlvbmFsQ29tbWVudC50ZXN0KGh0bWwpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjb25kaXRpb25hbEVuZCA9IGh0bWwuaW5kZXhPZignXT4nKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmRpdGlvbmFsRW5kID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkdmFuY2UoY29uZGl0aW9uYWxFbmQgKyAyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImNvbnRpbnVlXCI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gRG9jdHlwZTpcbiAgICAgICAgICAgICAgICB2YXIgZG9jdHlwZU1hdGNoID0gaHRtbC5tYXRjaChkb2N0eXBlKTtcbiAgICAgICAgICAgICAgICBpZiAoZG9jdHlwZU1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIGFkdmFuY2UoZG9jdHlwZU1hdGNoWzBdLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcImNvbnRpbnVlXCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIEVuZCB0YWc6XG4gICAgICAgICAgICAgICAgdmFyIGVuZFRhZ01hdGNoID0gaHRtbC5tYXRjaChlbmRUYWcpO1xuICAgICAgICAgICAgICAgIGlmIChlbmRUYWdNYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgY3VySW5kZXggPSBpbmRleDtcbiAgICAgICAgICAgICAgICAgICAgYWR2YW5jZShlbmRUYWdNYXRjaFswXS5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICBwYXJzZUVuZFRhZyhlbmRUYWdNYXRjaFsxXSwgY3VySW5kZXgsIGluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiY29udGludWVcIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gU3RhcnQgdGFnOlxuICAgICAgICAgICAgICAgIHZhciBzdGFydFRhZ01hdGNoID0gcGFyc2VTdGFydFRhZygpO1xuICAgICAgICAgICAgICAgIGlmIChzdGFydFRhZ01hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZVN0YXJ0VGFnKHN0YXJ0VGFnTWF0Y2gpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkSWdub3JlRmlyc3ROZXdsaW5lKHN0YXJ0VGFnTWF0Y2gudGFnTmFtZSwgaHRtbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkdmFuY2UoMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiY29udGludWVcIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgdGV4dCA9IHZvaWQgMCwgcmVzdCA9IHZvaWQgMCwgbmV4dCA9IHZvaWQgMDtcbiAgICAgICAgICAgIGlmICh0ZXh0RW5kID49IDApIHtcbiAgICAgICAgICAgICAgICByZXN0ID0gaHRtbC5zbGljZSh0ZXh0RW5kKTtcbiAgICAgICAgICAgICAgICB3aGlsZSAoIWVuZFRhZy50ZXN0KHJlc3QpICYmXG4gICAgICAgICAgICAgICAgICAgICFzdGFydFRhZ09wZW4udGVzdChyZXN0KSAmJlxuICAgICAgICAgICAgICAgICAgICAhY29tbWVudC50ZXN0KHJlc3QpICYmXG4gICAgICAgICAgICAgICAgICAgICFjb25kaXRpb25hbENvbW1lbnQudGVzdChyZXN0KSkge1xuICAgICAgICAgICAgICAgICAgICAvLyA8IGluIHBsYWluIHRleHQsIGJlIGZvcmdpdmluZyBhbmQgdHJlYXQgaXQgYXMgdGV4dFxuICAgICAgICAgICAgICAgICAgICBuZXh0ID0gcmVzdC5pbmRleE9mKCc8JywgMSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0IDwgMClcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB0ZXh0RW5kICs9IG5leHQ7XG4gICAgICAgICAgICAgICAgICAgIHJlc3QgPSBodG1sLnNsaWNlKHRleHRFbmQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0ZXh0ID0gaHRtbC5zdWJzdHJpbmcoMCwgdGV4dEVuZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGV4dEVuZCA8IDApIHtcbiAgICAgICAgICAgICAgICB0ZXh0ID0gaHRtbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0ZXh0KSB7XG4gICAgICAgICAgICAgICAgYWR2YW5jZSh0ZXh0Lmxlbmd0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5jaGFycyAmJiB0ZXh0KSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5jaGFycyh0ZXh0LCBpbmRleCAtIHRleHQubGVuZ3RoLCBpbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgZW5kVGFnTGVuZ3RoXzEgPSAwO1xuICAgICAgICAgICAgdmFyIHN0YWNrZWRUYWdfMSA9IGxhc3RUYWcudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIHZhciByZVN0YWNrZWRUYWcgPSByZUNhY2hlW3N0YWNrZWRUYWdfMV0gfHxcbiAgICAgICAgICAgICAgICAocmVDYWNoZVtzdGFja2VkVGFnXzFdID0gbmV3IFJlZ0V4cCgnKFtcXFxcc1xcXFxTXSo/KSg8LycgKyBzdGFja2VkVGFnXzEgKyAnW14+XSo+KScsICdpJykpO1xuICAgICAgICAgICAgdmFyIHJlc3QgPSBodG1sLnJlcGxhY2UocmVTdGFja2VkVGFnLCBmdW5jdGlvbiAoYWxsLCB0ZXh0LCBlbmRUYWcpIHtcbiAgICAgICAgICAgICAgICBlbmRUYWdMZW5ndGhfMSA9IGVuZFRhZy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgaWYgKCFpc1BsYWluVGV4dEVsZW1lbnQoc3RhY2tlZFRhZ18xKSAmJiBzdGFja2VkVGFnXzEgIT09ICdub3NjcmlwdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dCA9IHRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC88IVxcLS0oW1xcc1xcU10qPyktLT4vZywgJyQxJykgLy8gIzcyOThcbiAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC88IVxcW0NEQVRBXFxbKFtcXHNcXFNdKj8pXV0+L2csICckMScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoc2hvdWxkSWdub3JlRmlyc3ROZXdsaW5lKHN0YWNrZWRUYWdfMSwgdGV4dCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dCA9IHRleHQuc2xpY2UoMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmNoYXJzKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuY2hhcnModGV4dCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaW5kZXggKz0gaHRtbC5sZW5ndGggLSByZXN0Lmxlbmd0aDtcbiAgICAgICAgICAgIGh0bWwgPSByZXN0O1xuICAgICAgICAgICAgcGFyc2VFbmRUYWcoc3RhY2tlZFRhZ18xLCBpbmRleCAtIGVuZFRhZ0xlbmd0aF8xLCBpbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGh0bWwgPT09IGxhc3QpIHtcbiAgICAgICAgICAgIG9wdGlvbnMuY2hhcnMgJiYgb3B0aW9ucy5jaGFycyhodG1sKTtcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICFzdGFjay5sZW5ndGggJiYgb3B0aW9ucy53YXJuKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy53YXJuKFwiTWFsLWZvcm1hdHRlZCB0YWcgYXQgZW5kIG9mIHRlbXBsYXRlOiBcXFwiXCIuY29uY2F0KGh0bWwsIFwiXFxcIlwiKSwge1xuICAgICAgICAgICAgICAgICAgICBzdGFydDogaW5kZXggKyBodG1sLmxlbmd0aFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFwiYnJlYWtcIjtcbiAgICAgICAgfVxuICAgIH07XG4gICAgd2hpbGUgKGh0bWwpIHtcbiAgICAgICAgdmFyIHN0YXRlXzEgPSBfbG9vcF8xKCk7XG4gICAgICAgIGlmIChzdGF0ZV8xID09PSBcImJyZWFrXCIpXG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG4gICAgLy8gQ2xlYW4gdXAgYW55IHJlbWFpbmluZyB0YWdzXG4gICAgcGFyc2VFbmRUYWcoKTtcbiAgICBmdW5jdGlvbiBhZHZhbmNlKG4pIHtcbiAgICAgICAgaW5kZXggKz0gbjtcbiAgICAgICAgaHRtbCA9IGh0bWwuc3Vic3RyaW5nKG4pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwYXJzZVN0YXJ0VGFnKCkge1xuICAgICAgICB2YXIgc3RhcnQgPSBodG1sLm1hdGNoKHN0YXJ0VGFnT3Blbik7XG4gICAgICAgIGlmIChzdGFydCkge1xuICAgICAgICAgICAgdmFyIG1hdGNoID0ge1xuICAgICAgICAgICAgICAgIHRhZ05hbWU6IHN0YXJ0WzFdLFxuICAgICAgICAgICAgICAgIGF0dHJzOiBbXSxcbiAgICAgICAgICAgICAgICBzdGFydDogaW5kZXhcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhZHZhbmNlKHN0YXJ0WzBdLmxlbmd0aCk7XG4gICAgICAgICAgICB2YXIgZW5kID0gdm9pZCAwLCBhdHRyID0gdm9pZCAwO1xuICAgICAgICAgICAgd2hpbGUgKCEoZW5kID0gaHRtbC5tYXRjaChzdGFydFRhZ0Nsb3NlKSkgJiZcbiAgICAgICAgICAgICAgICAoYXR0ciA9IGh0bWwubWF0Y2goZHluYW1pY0FyZ0F0dHJpYnV0ZSkgfHwgaHRtbC5tYXRjaChhdHRyaWJ1dGUpKSkge1xuICAgICAgICAgICAgICAgIGF0dHIuc3RhcnQgPSBpbmRleDtcbiAgICAgICAgICAgICAgICBhZHZhbmNlKGF0dHJbMF0ubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICBhdHRyLmVuZCA9IGluZGV4O1xuICAgICAgICAgICAgICAgIG1hdGNoLmF0dHJzLnB1c2goYXR0cik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZW5kKSB7XG4gICAgICAgICAgICAgICAgbWF0Y2gudW5hcnlTbGFzaCA9IGVuZFsxXTtcbiAgICAgICAgICAgICAgICBhZHZhbmNlKGVuZFswXS5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIG1hdGNoLmVuZCA9IGluZGV4O1xuICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBoYW5kbGVTdGFydFRhZyhtYXRjaCkge1xuICAgICAgICB2YXIgdGFnTmFtZSA9IG1hdGNoLnRhZ05hbWU7XG4gICAgICAgIHZhciB1bmFyeVNsYXNoID0gbWF0Y2gudW5hcnlTbGFzaDtcbiAgICAgICAgaWYgKGV4cGVjdEhUTUwpIHtcbiAgICAgICAgICAgIGlmIChsYXN0VGFnID09PSAncCcgJiYgaXNOb25QaHJhc2luZ1RhZyh0YWdOYW1lKSkge1xuICAgICAgICAgICAgICAgIHBhcnNlRW5kVGFnKGxhc3RUYWcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNhbkJlTGVmdE9wZW5UYWcodGFnTmFtZSkgJiYgbGFzdFRhZyA9PT0gdGFnTmFtZSkge1xuICAgICAgICAgICAgICAgIHBhcnNlRW5kVGFnKHRhZ05hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHZhciB1bmFyeSA9IGlzVW5hcnlUYWcodGFnTmFtZSkgfHwgISF1bmFyeVNsYXNoO1xuICAgICAgICB2YXIgbCA9IG1hdGNoLmF0dHJzLmxlbmd0aDtcbiAgICAgICAgdmFyIGF0dHJzID0gbmV3IEFycmF5KGwpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBtYXRjaC5hdHRyc1tpXTtcbiAgICAgICAgICAgIHZhciB2YWx1ZSA9IGFyZ3NbM10gfHwgYXJnc1s0XSB8fCBhcmdzWzVdIHx8ICcnO1xuICAgICAgICAgICAgdmFyIHNob3VsZERlY29kZU5ld2xpbmVzID0gdGFnTmFtZSA9PT0gJ2EnICYmIGFyZ3NbMV0gPT09ICdocmVmJ1xuICAgICAgICAgICAgICAgID8gb3B0aW9ucy5zaG91bGREZWNvZGVOZXdsaW5lc0ZvckhyZWZcbiAgICAgICAgICAgICAgICA6IG9wdGlvbnMuc2hvdWxkRGVjb2RlTmV3bGluZXM7XG4gICAgICAgICAgICBhdHRyc1tpXSA9IHtcbiAgICAgICAgICAgICAgICBuYW1lOiBhcmdzWzFdLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBkZWNvZGVBdHRyKHZhbHVlLCBzaG91bGREZWNvZGVOZXdsaW5lcylcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBvcHRpb25zLm91dHB1dFNvdXJjZVJhbmdlKSB7XG4gICAgICAgICAgICAgICAgYXR0cnNbaV0uc3RhcnQgPSBhcmdzLnN0YXJ0ICsgYXJnc1swXS5tYXRjaCgvXlxccyovKS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgYXR0cnNbaV0uZW5kID0gYXJncy5lbmQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF1bmFyeSkge1xuICAgICAgICAgICAgc3RhY2sucHVzaCh7XG4gICAgICAgICAgICAgICAgdGFnOiB0YWdOYW1lLFxuICAgICAgICAgICAgICAgIGxvd2VyQ2FzZWRUYWc6IHRhZ05hbWUudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICAgICAgICBhdHRyczogYXR0cnMsXG4gICAgICAgICAgICAgICAgc3RhcnQ6IG1hdGNoLnN0YXJ0LFxuICAgICAgICAgICAgICAgIGVuZDogbWF0Y2guZW5kXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGxhc3RUYWcgPSB0YWdOYW1lO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLnN0YXJ0KSB7XG4gICAgICAgICAgICBvcHRpb25zLnN0YXJ0KHRhZ05hbWUsIGF0dHJzLCB1bmFyeSwgbWF0Y2guc3RhcnQsIG1hdGNoLmVuZCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcGFyc2VFbmRUYWcodGFnTmFtZSwgc3RhcnQsIGVuZCkge1xuICAgICAgICB2YXIgcG9zLCBsb3dlckNhc2VkVGFnTmFtZTtcbiAgICAgICAgaWYgKHN0YXJ0ID09IG51bGwpXG4gICAgICAgICAgICBzdGFydCA9IGluZGV4O1xuICAgICAgICBpZiAoZW5kID09IG51bGwpXG4gICAgICAgICAgICBlbmQgPSBpbmRleDtcbiAgICAgICAgLy8gRmluZCB0aGUgY2xvc2VzdCBvcGVuZWQgdGFnIG9mIHRoZSBzYW1lIHR5cGVcbiAgICAgICAgaWYgKHRhZ05hbWUpIHtcbiAgICAgICAgICAgIGxvd2VyQ2FzZWRUYWdOYW1lID0gdGFnTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgZm9yIChwb3MgPSBzdGFjay5sZW5ndGggLSAxOyBwb3MgPj0gMDsgcG9zLS0pIHtcbiAgICAgICAgICAgICAgICBpZiAoc3RhY2tbcG9zXS5sb3dlckNhc2VkVGFnID09PSBsb3dlckNhc2VkVGFnTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBJZiBubyB0YWcgbmFtZSBpcyBwcm92aWRlZCwgY2xlYW4gc2hvcFxuICAgICAgICAgICAgcG9zID0gMDtcbiAgICAgICAgfVxuICAgICAgICBpZiAocG9zID49IDApIHtcbiAgICAgICAgICAgIC8vIENsb3NlIGFsbCB0aGUgb3BlbiBlbGVtZW50cywgdXAgdGhlIHN0YWNrXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gc3RhY2subGVuZ3RoIC0gMTsgaSA+PSBwb3M7IGktLSkge1xuICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIChpID4gcG9zIHx8ICF0YWdOYW1lKSAmJiBvcHRpb25zLndhcm4pIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy53YXJuKFwidGFnIDxcIi5jb25jYXQoc3RhY2tbaV0udGFnLCBcIj4gaGFzIG5vIG1hdGNoaW5nIGVuZCB0YWcuXCIpLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFydDogc3RhY2tbaV0uc3RhcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmQ6IHN0YWNrW2ldLmVuZFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuZW5kKHN0YWNrW2ldLnRhZywgc3RhcnQsIGVuZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBvcGVuIGVsZW1lbnRzIGZyb20gdGhlIHN0YWNrXG4gICAgICAgICAgICBzdGFjay5sZW5ndGggPSBwb3M7XG4gICAgICAgICAgICBsYXN0VGFnID0gcG9zICYmIHN0YWNrW3BvcyAtIDFdLnRhZztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChsb3dlckNhc2VkVGFnTmFtZSA9PT0gJ2JyJykge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuc3RhcnQpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLnN0YXJ0KHRhZ05hbWUsIFtdLCB0cnVlLCBzdGFydCwgZW5kKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChsb3dlckNhc2VkVGFnTmFtZSA9PT0gJ3AnKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5zdGFydCkge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMuc3RhcnQodGFnTmFtZSwgW10sIGZhbHNlLCBzdGFydCwgZW5kKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHRpb25zLmVuZCkge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMuZW5kKHRhZ05hbWUsIHN0YXJ0LCBlbmQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG52YXIgb25SRSA9IC9eQHxedi1vbjovO1xudmFyIGRpclJFID0gL152LXxeQHxeOnxeIy87XG52YXIgZm9yQWxpYXNSRSA9IC8oW1xcc1xcU10qPylcXHMrKD86aW58b2YpXFxzKyhbXFxzXFxTXSopLztcbnZhciBmb3JJdGVyYXRvclJFID0gLywoW14sXFx9XFxdXSopKD86LChbXixcXH1cXF1dKikpPyQvO1xudmFyIHN0cmlwUGFyZW5zUkUgPSAvXlxcKHxcXCkkL2c7XG52YXIgZHluYW1pY0FyZ1JFID0gL15cXFsuKlxcXSQvO1xudmFyIGFyZ1JFID0gLzooLiopJC87XG52YXIgYmluZFJFID0gL146fF5cXC58XnYtYmluZDovO1xudmFyIG1vZGlmaWVyUkUgPSAvXFwuW14uXFxdXSsoPz1bXlxcXV0qJCkvZztcbnZhciBzbG90UkUgPSAvXnYtc2xvdCg6fCQpfF4jLztcbnZhciBsaW5lQnJlYWtSRSA9IC9bXFxyXFxuXS87XG52YXIgd2hpdGVzcGFjZVJFID0gL1sgXFxmXFx0XFxyXFxuXSsvZztcbnZhciBpbnZhbGlkQXR0cmlidXRlUkUgPSAvW1xcc1wiJzw+XFwvPV0vO1xudmFyIGRlY29kZUhUTUxDYWNoZWQgPSBjYWNoZWQoaGUuZGVjb2RlKTtcbnZhciBlbXB0eVNsb3RTY29wZVRva2VuID0gXCJfZW1wdHlfXCI7XG4vLyBjb25maWd1cmFibGUgc3RhdGVcbnZhciB3YXJuO1xudmFyIGRlbGltaXRlcnM7XG52YXIgdHJhbnNmb3JtcztcbnZhciBwcmVUcmFuc2Zvcm1zO1xudmFyIHBvc3RUcmFuc2Zvcm1zO1xudmFyIHBsYXRmb3JtSXNQcmVUYWc7XG52YXIgcGxhdGZvcm1NdXN0VXNlUHJvcDtcbnZhciBwbGF0Zm9ybUdldFRhZ05hbWVzcGFjZTtcbnZhciBtYXliZUNvbXBvbmVudDtcbmZ1bmN0aW9uIGNyZWF0ZUFTVEVsZW1lbnQodGFnLCBhdHRycywgcGFyZW50KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogMSxcbiAgICAgICAgdGFnOiB0YWcsXG4gICAgICAgIGF0dHJzTGlzdDogYXR0cnMsXG4gICAgICAgIGF0dHJzTWFwOiBtYWtlQXR0cnNNYXAoYXR0cnMpLFxuICAgICAgICByYXdBdHRyc01hcDoge30sXG4gICAgICAgIHBhcmVudDogcGFyZW50LFxuICAgICAgICBjaGlsZHJlbjogW11cbiAgICB9O1xufVxuLyoqXG4gKiBDb252ZXJ0IEhUTUwgc3RyaW5nIHRvIEFTVC5cbiAqL1xuZnVuY3Rpb24gcGFyc2UodGVtcGxhdGUsIG9wdGlvbnMpIHtcbiAgICB3YXJuID0gb3B0aW9ucy53YXJuIHx8IGJhc2VXYXJuO1xuICAgIHBsYXRmb3JtSXNQcmVUYWcgPSBvcHRpb25zLmlzUHJlVGFnIHx8IG5vO1xuICAgIHBsYXRmb3JtTXVzdFVzZVByb3AgPSBvcHRpb25zLm11c3RVc2VQcm9wIHx8IG5vO1xuICAgIHBsYXRmb3JtR2V0VGFnTmFtZXNwYWNlID0gb3B0aW9ucy5nZXRUYWdOYW1lc3BhY2UgfHwgbm87XG4gICAgdmFyIGlzUmVzZXJ2ZWRUYWcgPSBvcHRpb25zLmlzUmVzZXJ2ZWRUYWcgfHwgbm87XG4gICAgbWF5YmVDb21wb25lbnQgPSBmdW5jdGlvbiAoZWwpIHtcbiAgICAgICAgcmV0dXJuICEhKGVsLmNvbXBvbmVudCB8fFxuICAgICAgICAgICAgZWwuYXR0cnNNYXBbJzppcyddIHx8XG4gICAgICAgICAgICBlbC5hdHRyc01hcFsndi1iaW5kOmlzJ10gfHxcbiAgICAgICAgICAgICEoZWwuYXR0cnNNYXAuaXMgPyBpc1Jlc2VydmVkVGFnKGVsLmF0dHJzTWFwLmlzKSA6IGlzUmVzZXJ2ZWRUYWcoZWwudGFnKSkpO1xuICAgIH07XG4gICAgdHJhbnNmb3JtcyA9IHBsdWNrTW9kdWxlRnVuY3Rpb24ob3B0aW9ucy5tb2R1bGVzLCAndHJhbnNmb3JtTm9kZScpO1xuICAgIHByZVRyYW5zZm9ybXMgPSBwbHVja01vZHVsZUZ1bmN0aW9uKG9wdGlvbnMubW9kdWxlcywgJ3ByZVRyYW5zZm9ybU5vZGUnKTtcbiAgICBwb3N0VHJhbnNmb3JtcyA9IHBsdWNrTW9kdWxlRnVuY3Rpb24ob3B0aW9ucy5tb2R1bGVzLCAncG9zdFRyYW5zZm9ybU5vZGUnKTtcbiAgICBkZWxpbWl0ZXJzID0gb3B0aW9ucy5kZWxpbWl0ZXJzO1xuICAgIHZhciBzdGFjayA9IFtdO1xuICAgIHZhciBwcmVzZXJ2ZVdoaXRlc3BhY2UgPSBvcHRpb25zLnByZXNlcnZlV2hpdGVzcGFjZSAhPT0gZmFsc2U7XG4gICAgdmFyIHdoaXRlc3BhY2VPcHRpb24gPSBvcHRpb25zLndoaXRlc3BhY2U7XG4gICAgdmFyIHJvb3Q7XG4gICAgdmFyIGN1cnJlbnRQYXJlbnQ7XG4gICAgdmFyIGluVlByZSA9IGZhbHNlO1xuICAgIHZhciBpblByZSA9IGZhbHNlO1xuICAgIHZhciB3YXJuZWQgPSBmYWxzZTtcbiAgICBmdW5jdGlvbiB3YXJuT25jZShtc2csIHJhbmdlKSB7XG4gICAgICAgIGlmICghd2FybmVkKSB7XG4gICAgICAgICAgICB3YXJuZWQgPSB0cnVlO1xuICAgICAgICAgICAgd2Fybihtc2csIHJhbmdlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBjbG9zZUVsZW1lbnQoZWxlbWVudCkge1xuICAgICAgICB0cmltRW5kaW5nV2hpdGVzcGFjZShlbGVtZW50KTtcbiAgICAgICAgaWYgKCFpblZQcmUgJiYgIWVsZW1lbnQucHJvY2Vzc2VkKSB7XG4gICAgICAgICAgICBlbGVtZW50ID0gcHJvY2Vzc0VsZW1lbnQoZWxlbWVudCwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gdHJlZSBtYW5hZ2VtZW50XG4gICAgICAgIGlmICghc3RhY2subGVuZ3RoICYmIGVsZW1lbnQgIT09IHJvb3QpIHtcbiAgICAgICAgICAgIC8vIGFsbG93IHJvb3QgZWxlbWVudHMgd2l0aCB2LWlmLCB2LWVsc2UtaWYgYW5kIHYtZWxzZVxuICAgICAgICAgICAgaWYgKHJvb3QuaWYgJiYgKGVsZW1lbnQuZWxzZWlmIHx8IGVsZW1lbnQuZWxzZSkpIHtcbiAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBjaGVja1Jvb3RDb25zdHJhaW50cyhlbGVtZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYWRkSWZDb25kaXRpb24ocm9vdCwge1xuICAgICAgICAgICAgICAgICAgICBleHA6IGVsZW1lbnQuZWxzZWlmLFxuICAgICAgICAgICAgICAgICAgICBibG9jazogZWxlbWVudFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgICAgIHdhcm5PbmNlKFwiQ29tcG9uZW50IHRlbXBsYXRlIHNob3VsZCBjb250YWluIGV4YWN0bHkgb25lIHJvb3QgZWxlbWVudC4gXCIgK1xuICAgICAgICAgICAgICAgICAgICBcIklmIHlvdSBhcmUgdXNpbmcgdi1pZiBvbiBtdWx0aXBsZSBlbGVtZW50cywgXCIgK1xuICAgICAgICAgICAgICAgICAgICBcInVzZSB2LWVsc2UtaWYgdG8gY2hhaW4gdGhlbSBpbnN0ZWFkLlwiLCB7IHN0YXJ0OiBlbGVtZW50LnN0YXJ0IH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChjdXJyZW50UGFyZW50ICYmICFlbGVtZW50LmZvcmJpZGRlbikge1xuICAgICAgICAgICAgaWYgKGVsZW1lbnQuZWxzZWlmIHx8IGVsZW1lbnQuZWxzZSkge1xuICAgICAgICAgICAgICAgIHByb2Nlc3NJZkNvbmRpdGlvbnMoZWxlbWVudCwgY3VycmVudFBhcmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5zbG90U2NvcGUpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gc2NvcGVkIHNsb3RcbiAgICAgICAgICAgICAgICAgICAgLy8ga2VlcCBpdCBpbiB0aGUgY2hpbGRyZW4gbGlzdCBzbyB0aGF0IHYtZWxzZSgtaWYpIGNvbmRpdGlvbnMgY2FuXG4gICAgICAgICAgICAgICAgICAgIC8vIGZpbmQgaXQgYXMgdGhlIHByZXYgbm9kZS5cbiAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWVfMSA9IGVsZW1lbnQuc2xvdFRhcmdldCB8fCAnXCJkZWZhdWx0XCInO1xuICAgICAgICAgICAgICAgICAgICAoY3VycmVudFBhcmVudC5zY29wZWRTbG90cyB8fCAoY3VycmVudFBhcmVudC5zY29wZWRTbG90cyA9IHt9KSlbbmFtZV8xXSA9IGVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGN1cnJlbnRQYXJlbnQuY2hpbGRyZW4ucHVzaChlbGVtZW50KTtcbiAgICAgICAgICAgICAgICBlbGVtZW50LnBhcmVudCA9IGN1cnJlbnRQYXJlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gZmluYWwgY2hpbGRyZW4gY2xlYW51cFxuICAgICAgICAvLyBmaWx0ZXIgb3V0IHNjb3BlZCBzbG90c1xuICAgICAgICBlbGVtZW50LmNoaWxkcmVuID0gZWxlbWVudC5jaGlsZHJlbi5maWx0ZXIoZnVuY3Rpb24gKGMpIHsgcmV0dXJuICFjLnNsb3RTY29wZTsgfSk7XG4gICAgICAgIC8vIHJlbW92ZSB0cmFpbGluZyB3aGl0ZXNwYWNlIG5vZGUgYWdhaW5cbiAgICAgICAgdHJpbUVuZGluZ1doaXRlc3BhY2UoZWxlbWVudCk7XG4gICAgICAgIC8vIGNoZWNrIHByZSBzdGF0ZVxuICAgICAgICBpZiAoZWxlbWVudC5wcmUpIHtcbiAgICAgICAgICAgIGluVlByZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwbGF0Zm9ybUlzUHJlVGFnKGVsZW1lbnQudGFnKSkge1xuICAgICAgICAgICAgaW5QcmUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBhcHBseSBwb3N0LXRyYW5zZm9ybXNcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb3N0VHJhbnNmb3Jtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgcG9zdFRyYW5zZm9ybXNbaV0oZWxlbWVudCwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gdHJpbUVuZGluZ1doaXRlc3BhY2UoZWwpIHtcbiAgICAgICAgLy8gcmVtb3ZlIHRyYWlsaW5nIHdoaXRlc3BhY2Ugbm9kZVxuICAgICAgICBpZiAoIWluUHJlKSB7XG4gICAgICAgICAgICB2YXIgbGFzdE5vZGUgPSB2b2lkIDA7XG4gICAgICAgICAgICB3aGlsZSAoKGxhc3ROb2RlID0gZWwuY2hpbGRyZW5bZWwuY2hpbGRyZW4ubGVuZ3RoIC0gMV0pICYmXG4gICAgICAgICAgICAgICAgbGFzdE5vZGUudHlwZSA9PT0gMyAmJlxuICAgICAgICAgICAgICAgIGxhc3ROb2RlLnRleHQgPT09ICcgJykge1xuICAgICAgICAgICAgICAgIGVsLmNoaWxkcmVuLnBvcCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNoZWNrUm9vdENvbnN0cmFpbnRzKGVsKSB7XG4gICAgICAgIGlmIChlbC50YWcgPT09ICdzbG90JyB8fCBlbC50YWcgPT09ICd0ZW1wbGF0ZScpIHtcbiAgICAgICAgICAgIHdhcm5PbmNlKFwiQ2Fubm90IHVzZSA8XCIuY29uY2F0KGVsLnRhZywgXCI+IGFzIGNvbXBvbmVudCByb290IGVsZW1lbnQgYmVjYXVzZSBpdCBtYXkgXCIpICtcbiAgICAgICAgICAgICAgICAnY29udGFpbiBtdWx0aXBsZSBub2Rlcy4nLCB7IHN0YXJ0OiBlbC5zdGFydCB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZWwuYXR0cnNNYXAuaGFzT3duUHJvcGVydHkoJ3YtZm9yJykpIHtcbiAgICAgICAgICAgIHdhcm5PbmNlKCdDYW5ub3QgdXNlIHYtZm9yIG9uIHN0YXRlZnVsIGNvbXBvbmVudCByb290IGVsZW1lbnQgYmVjYXVzZSAnICtcbiAgICAgICAgICAgICAgICAnaXQgcmVuZGVycyBtdWx0aXBsZSBlbGVtZW50cy4nLCBlbC5yYXdBdHRyc01hcFsndi1mb3InXSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VIVE1MKHRlbXBsYXRlLCB7XG4gICAgICAgIHdhcm46IHdhcm4sXG4gICAgICAgIGV4cGVjdEhUTUw6IG9wdGlvbnMuZXhwZWN0SFRNTCxcbiAgICAgICAgaXNVbmFyeVRhZzogb3B0aW9ucy5pc1VuYXJ5VGFnLFxuICAgICAgICBjYW5CZUxlZnRPcGVuVGFnOiBvcHRpb25zLmNhbkJlTGVmdE9wZW5UYWcsXG4gICAgICAgIHNob3VsZERlY29kZU5ld2xpbmVzOiBvcHRpb25zLnNob3VsZERlY29kZU5ld2xpbmVzLFxuICAgICAgICBzaG91bGREZWNvZGVOZXdsaW5lc0ZvckhyZWY6IG9wdGlvbnMuc2hvdWxkRGVjb2RlTmV3bGluZXNGb3JIcmVmLFxuICAgICAgICBzaG91bGRLZWVwQ29tbWVudDogb3B0aW9ucy5jb21tZW50cyxcbiAgICAgICAgb3V0cHV0U291cmNlUmFuZ2U6IG9wdGlvbnMub3V0cHV0U291cmNlUmFuZ2UsXG4gICAgICAgIHN0YXJ0OiBmdW5jdGlvbiAodGFnLCBhdHRycywgdW5hcnksIHN0YXJ0LCBlbmQpIHtcbiAgICAgICAgICAgIC8vIGNoZWNrIG5hbWVzcGFjZS5cbiAgICAgICAgICAgIC8vIGluaGVyaXQgcGFyZW50IG5zIGlmIHRoZXJlIGlzIG9uZVxuICAgICAgICAgICAgdmFyIG5zID0gKGN1cnJlbnRQYXJlbnQgJiYgY3VycmVudFBhcmVudC5ucykgfHwgcGxhdGZvcm1HZXRUYWdOYW1lc3BhY2UodGFnKTtcbiAgICAgICAgICAgIC8vIGhhbmRsZSBJRSBzdmcgYnVnXG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICAgIGlmIChpc0lFICYmIG5zID09PSAnc3ZnJykge1xuICAgICAgICAgICAgICAgIGF0dHJzID0gZ3VhcmRJRVNWR0J1ZyhhdHRycyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgZWxlbWVudCA9IGNyZWF0ZUFTVEVsZW1lbnQodGFnLCBhdHRycywgY3VycmVudFBhcmVudCk7XG4gICAgICAgICAgICBpZiAobnMpIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50Lm5zID0gbnM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLm91dHB1dFNvdXJjZVJhbmdlKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc3RhcnQgPSBzdGFydDtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5lbmQgPSBlbmQ7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQucmF3QXR0cnNNYXAgPSBlbGVtZW50LmF0dHJzTGlzdC5yZWR1Y2UoZnVuY3Rpb24gKGN1bXVsYXRlZCwgYXR0cikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VtdWxhdGVkW2F0dHIubmFtZV0gPSBhdHRyO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1bXVsYXRlZDtcbiAgICAgICAgICAgICAgICAgICAgfSwge30pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhdHRycy5mb3JFYWNoKGZ1bmN0aW9uIChhdHRyKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbnZhbGlkQXR0cmlidXRlUkUudGVzdChhdHRyLm5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3YXJuKFwiSW52YWxpZCBkeW5hbWljIGFyZ3VtZW50IGV4cHJlc3Npb246IGF0dHJpYnV0ZSBuYW1lcyBjYW5ub3QgY29udGFpbiBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzcGFjZXMsIHF1b3RlcywgPCwgPiwgLyBvciA9LlwiLCBvcHRpb25zLm91dHB1dFNvdXJjZVJhbmdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0OiBhdHRyLnN0YXJ0ICsgYXR0ci5uYW1lLmluZGV4T2YoXCJbXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQ6IGF0dHIuc3RhcnQgKyBhdHRyLm5hbWUubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzRm9yYmlkZGVuVGFnKGVsZW1lbnQpICYmICFpc1NlcnZlclJlbmRlcmluZygpKSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5mb3JiaWRkZW4gPSB0cnVlO1xuICAgICAgICAgICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICAgICAgICAgICAgICAgICAgd2FybignVGVtcGxhdGVzIHNob3VsZCBvbmx5IGJlIHJlc3BvbnNpYmxlIGZvciBtYXBwaW5nIHRoZSBzdGF0ZSB0byB0aGUgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnVUkuIEF2b2lkIHBsYWNpbmcgdGFncyB3aXRoIHNpZGUtZWZmZWN0cyBpbiB5b3VyIHRlbXBsYXRlcywgc3VjaCBhcyAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiPFwiLmNvbmNhdCh0YWcsIFwiPlwiKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAnLCBhcyB0aGV5IHdpbGwgbm90IGJlIHBhcnNlZC4nLCB7IHN0YXJ0OiBlbGVtZW50LnN0YXJ0IH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gYXBwbHkgcHJlLXRyYW5zZm9ybXNcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJlVHJhbnNmb3Jtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBwcmVUcmFuc2Zvcm1zW2ldKGVsZW1lbnQsIG9wdGlvbnMpIHx8IGVsZW1lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWluVlByZSkge1xuICAgICAgICAgICAgICAgIHByb2Nlc3NQcmUoZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQucHJlKSB7XG4gICAgICAgICAgICAgICAgICAgIGluVlByZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHBsYXRmb3JtSXNQcmVUYWcoZWxlbWVudC50YWcpKSB7XG4gICAgICAgICAgICAgICAgaW5QcmUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGluVlByZSkge1xuICAgICAgICAgICAgICAgIHByb2Nlc3NSYXdBdHRycyhlbGVtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKCFlbGVtZW50LnByb2Nlc3NlZCkge1xuICAgICAgICAgICAgICAgIC8vIHN0cnVjdHVyYWwgZGlyZWN0aXZlc1xuICAgICAgICAgICAgICAgIHByb2Nlc3NGb3IoZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgcHJvY2Vzc0lmKGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIHByb2Nlc3NPbmNlKGVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFyb290KSB7XG4gICAgICAgICAgICAgICAgcm9vdCA9IGVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tSb290Q29uc3RyYWludHMocm9vdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF1bmFyeSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRQYXJlbnQgPSBlbGVtZW50O1xuICAgICAgICAgICAgICAgIHN0YWNrLnB1c2goZWxlbWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjbG9zZUVsZW1lbnQoZWxlbWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVuZDogZnVuY3Rpb24gKHRhZywgc3RhcnQsIGVuZCkge1xuICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSBzdGFja1tzdGFjay5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIC8vIHBvcCBzdGFja1xuICAgICAgICAgICAgc3RhY2subGVuZ3RoIC09IDE7XG4gICAgICAgICAgICBjdXJyZW50UGFyZW50ID0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMV07XG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBvcHRpb25zLm91dHB1dFNvdXJjZVJhbmdlKSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5lbmQgPSBlbmQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjbG9zZUVsZW1lbnQoZWxlbWVudCk7XG4gICAgICAgIH0sXG4gICAgICAgIGNoYXJzOiBmdW5jdGlvbiAodGV4dCwgc3RhcnQsIGVuZCkge1xuICAgICAgICAgICAgaWYgKCFjdXJyZW50UGFyZW50KSB7XG4gICAgICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRleHQgPT09IHRlbXBsYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3YXJuT25jZSgnQ29tcG9uZW50IHRlbXBsYXRlIHJlcXVpcmVzIGEgcm9vdCBlbGVtZW50LCByYXRoZXIgdGhhbiBqdXN0IHRleHQuJywgeyBzdGFydDogc3RhcnQgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKHRleHQgPSB0ZXh0LnRyaW0oKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5PbmNlKFwidGV4dCBcXFwiXCIuY29uY2F0KHRleHQsIFwiXFxcIiBvdXRzaWRlIHJvb3QgZWxlbWVudCB3aWxsIGJlIGlnbm9yZWQuXCIpLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBJRSB0ZXh0YXJlYSBwbGFjZWhvbGRlciBidWdcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgaWYgKGlzSUUgJiZcbiAgICAgICAgICAgICAgICBjdXJyZW50UGFyZW50LnRhZyA9PT0gJ3RleHRhcmVhJyAmJlxuICAgICAgICAgICAgICAgIGN1cnJlbnRQYXJlbnQuYXR0cnNNYXAucGxhY2Vob2xkZXIgPT09IHRleHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgY2hpbGRyZW4gPSBjdXJyZW50UGFyZW50LmNoaWxkcmVuO1xuICAgICAgICAgICAgaWYgKGluUHJlIHx8IHRleHQudHJpbSgpKSB7XG4gICAgICAgICAgICAgICAgdGV4dCA9IGlzVGV4dFRhZyhjdXJyZW50UGFyZW50KVxuICAgICAgICAgICAgICAgICAgICA/IHRleHRcbiAgICAgICAgICAgICAgICAgICAgOiBkZWNvZGVIVE1MQ2FjaGVkKHRleHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoIWNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIC8vIHJlbW92ZSB0aGUgd2hpdGVzcGFjZS1vbmx5IG5vZGUgcmlnaHQgYWZ0ZXIgYW4gb3BlbmluZyB0YWdcbiAgICAgICAgICAgICAgICB0ZXh0ID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh3aGl0ZXNwYWNlT3B0aW9uKSB7XG4gICAgICAgICAgICAgICAgaWYgKHdoaXRlc3BhY2VPcHRpb24gPT09ICdjb25kZW5zZScpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaW4gY29uZGVuc2UgbW9kZSwgcmVtb3ZlIHRoZSB3aGl0ZXNwYWNlIG5vZGUgaWYgaXQgY29udGFpbnNcbiAgICAgICAgICAgICAgICAgICAgLy8gbGluZSBicmVhaywgb3RoZXJ3aXNlIGNvbmRlbnNlIHRvIGEgc2luZ2xlIHNwYWNlXG4gICAgICAgICAgICAgICAgICAgIHRleHQgPSBsaW5lQnJlYWtSRS50ZXN0KHRleHQpID8gJycgOiAnICc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gJyAnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRleHQgPSBwcmVzZXJ2ZVdoaXRlc3BhY2UgPyAnICcgOiAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0ZXh0KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpblByZSAmJiB3aGl0ZXNwYWNlT3B0aW9uID09PSAnY29uZGVuc2UnKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbmRlbnNlIGNvbnNlY3V0aXZlIHdoaXRlc3BhY2VzIGludG8gc2luZ2xlIHNwYWNlXG4gICAgICAgICAgICAgICAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2Uod2hpdGVzcGFjZVJFLCAnICcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgcmVzID0gdm9pZCAwO1xuICAgICAgICAgICAgICAgIHZhciBjaGlsZCA9IHZvaWQgMDtcbiAgICAgICAgICAgICAgICBpZiAoIWluVlByZSAmJiB0ZXh0ICE9PSAnICcgJiYgKHJlcyA9IHBhcnNlVGV4dCh0ZXh0LCBkZWxpbWl0ZXJzKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGQgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogcmVzLmV4cHJlc3Npb24sXG4gICAgICAgICAgICAgICAgICAgICAgICB0b2tlbnM6IHJlcy50b2tlbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiB0ZXh0XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRleHQgIT09ICcgJyB8fFxuICAgICAgICAgICAgICAgICAgICAhY2hpbGRyZW4ubGVuZ3RoIHx8XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuW2NoaWxkcmVuLmxlbmd0aCAtIDFdLnRleHQgIT09ICcgJykge1xuICAgICAgICAgICAgICAgICAgICBjaGlsZCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IDMsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiB0ZXh0XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChjaGlsZCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBvcHRpb25zLm91dHB1dFNvdXJjZVJhbmdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZC5zdGFydCA9IHN0YXJ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQuZW5kID0gZW5kO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goY2hpbGQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY29tbWVudDogZnVuY3Rpb24gKHRleHQsIHN0YXJ0LCBlbmQpIHtcbiAgICAgICAgICAgIC8vIGFkZGluZyBhbnl0aGluZyBhcyBhIHNpYmxpbmcgdG8gdGhlIHJvb3Qgbm9kZSBpcyBmb3JiaWRkZW5cbiAgICAgICAgICAgIC8vIGNvbW1lbnRzIHNob3VsZCBzdGlsbCBiZSBhbGxvd2VkLCBidXQgaWdub3JlZFxuICAgICAgICAgICAgaWYgKGN1cnJlbnRQYXJlbnQpIHtcbiAgICAgICAgICAgICAgICB2YXIgY2hpbGQgPSB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IDMsXG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IHRleHQsXG4gICAgICAgICAgICAgICAgICAgIGlzQ29tbWVudDogdHJ1ZVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgb3B0aW9ucy5vdXRwdXRTb3VyY2VSYW5nZSkge1xuICAgICAgICAgICAgICAgICAgICBjaGlsZC5zdGFydCA9IHN0YXJ0O1xuICAgICAgICAgICAgICAgICAgICBjaGlsZC5lbmQgPSBlbmQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGN1cnJlbnRQYXJlbnQuY2hpbGRyZW4ucHVzaChjaGlsZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcm9vdDtcbn1cbmZ1bmN0aW9uIHByb2Nlc3NQcmUoZWwpIHtcbiAgICBpZiAoZ2V0QW5kUmVtb3ZlQXR0cihlbCwgJ3YtcHJlJykgIT0gbnVsbCkge1xuICAgICAgICBlbC5wcmUgPSB0cnVlO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHByb2Nlc3NSYXdBdHRycyhlbCkge1xuICAgIHZhciBsaXN0ID0gZWwuYXR0cnNMaXN0O1xuICAgIHZhciBsZW4gPSBsaXN0Lmxlbmd0aDtcbiAgICBpZiAobGVuKSB7XG4gICAgICAgIHZhciBhdHRycyA9IChlbC5hdHRycyA9IG5ldyBBcnJheShsZW4pKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgYXR0cnNbaV0gPSB7XG4gICAgICAgICAgICAgICAgbmFtZTogbGlzdFtpXS5uYW1lLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBKU09OLnN0cmluZ2lmeShsaXN0W2ldLnZhbHVlKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChsaXN0W2ldLnN0YXJ0ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBhdHRyc1tpXS5zdGFydCA9IGxpc3RbaV0uc3RhcnQ7XG4gICAgICAgICAgICAgICAgYXR0cnNbaV0uZW5kID0gbGlzdFtpXS5lbmQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAoIWVsLnByZSkge1xuICAgICAgICAvLyBub24gcm9vdCBub2RlIGluIHByZSBibG9ja3Mgd2l0aCBubyBhdHRyaWJ1dGVzXG4gICAgICAgIGVsLnBsYWluID0gdHJ1ZTtcbiAgICB9XG59XG5mdW5jdGlvbiBwcm9jZXNzRWxlbWVudChlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgcHJvY2Vzc0tleShlbGVtZW50KTtcbiAgICAvLyBkZXRlcm1pbmUgd2hldGhlciB0aGlzIGlzIGEgcGxhaW4gZWxlbWVudCBhZnRlclxuICAgIC8vIHJlbW92aW5nIHN0cnVjdHVyYWwgYXR0cmlidXRlc1xuICAgIGVsZW1lbnQucGxhaW4gPVxuICAgICAgICAhZWxlbWVudC5rZXkgJiYgIWVsZW1lbnQuc2NvcGVkU2xvdHMgJiYgIWVsZW1lbnQuYXR0cnNMaXN0Lmxlbmd0aDtcbiAgICBwcm9jZXNzUmVmKGVsZW1lbnQpO1xuICAgIHByb2Nlc3NTbG90Q29udGVudChlbGVtZW50KTtcbiAgICBwcm9jZXNzU2xvdE91dGxldChlbGVtZW50KTtcbiAgICBwcm9jZXNzQ29tcG9uZW50KGVsZW1lbnQpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHJhbnNmb3Jtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBlbGVtZW50ID0gdHJhbnNmb3Jtc1tpXShlbGVtZW50LCBvcHRpb25zKSB8fCBlbGVtZW50O1xuICAgIH1cbiAgICBwcm9jZXNzQXR0cnMoZWxlbWVudCk7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG59XG5mdW5jdGlvbiBwcm9jZXNzS2V5KGVsKSB7XG4gICAgdmFyIGV4cCA9IGdldEJpbmRpbmdBdHRyKGVsLCAna2V5Jyk7XG4gICAgaWYgKGV4cCkge1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgaWYgKGVsLnRhZyA9PT0gJ3RlbXBsYXRlJykge1xuICAgICAgICAgICAgICAgIHdhcm4oXCI8dGVtcGxhdGU+IGNhbm5vdCBiZSBrZXllZC4gUGxhY2UgdGhlIGtleSBvbiByZWFsIGVsZW1lbnRzIGluc3RlYWQuXCIsIGdldFJhd0JpbmRpbmdBdHRyKGVsLCAna2V5JykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVsLmZvcikge1xuICAgICAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IGVsLml0ZXJhdG9yMiB8fCBlbC5pdGVyYXRvcjE7XG4gICAgICAgICAgICAgICAgdmFyIHBhcmVudF8xID0gZWwucGFyZW50O1xuICAgICAgICAgICAgICAgIGlmIChpdGVyYXRvciAmJlxuICAgICAgICAgICAgICAgICAgICBpdGVyYXRvciA9PT0gZXhwICYmXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudF8xICYmXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudF8xLnRhZyA9PT0gJ3RyYW5zaXRpb24tZ3JvdXAnKSB7XG4gICAgICAgICAgICAgICAgICAgIHdhcm4oXCJEbyBub3QgdXNlIHYtZm9yIGluZGV4IGFzIGtleSBvbiA8dHJhbnNpdGlvbi1ncm91cD4gY2hpbGRyZW4sIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwidGhpcyBpcyB0aGUgc2FtZSBhcyBub3QgdXNpbmcga2V5cy5cIiwgZ2V0UmF3QmluZGluZ0F0dHIoZWwsICdrZXknKSwgdHJ1ZSAvKiB0aXAgKi8pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbC5rZXkgPSBleHA7XG4gICAgfVxufVxuZnVuY3Rpb24gcHJvY2Vzc1JlZihlbCkge1xuICAgIHZhciByZWYgPSBnZXRCaW5kaW5nQXR0cihlbCwgJ3JlZicpO1xuICAgIGlmIChyZWYpIHtcbiAgICAgICAgZWwucmVmID0gcmVmO1xuICAgICAgICBlbC5yZWZJbkZvciA9IGNoZWNrSW5Gb3IoZWwpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHByb2Nlc3NGb3IoZWwpIHtcbiAgICB2YXIgZXhwO1xuICAgIGlmICgoZXhwID0gZ2V0QW5kUmVtb3ZlQXR0cihlbCwgJ3YtZm9yJykpKSB7XG4gICAgICAgIHZhciByZXMgPSBwYXJzZUZvcihleHApO1xuICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgICBleHRlbmQoZWwsIHJlcyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgd2FybihcIkludmFsaWQgdi1mb3IgZXhwcmVzc2lvbjogXCIuY29uY2F0KGV4cCksIGVsLnJhd0F0dHJzTWFwWyd2LWZvciddKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIHBhcnNlRm9yKGV4cCkge1xuICAgIHZhciBpbk1hdGNoID0gZXhwLm1hdGNoKGZvckFsaWFzUkUpO1xuICAgIGlmICghaW5NYXRjaClcbiAgICAgICAgcmV0dXJuO1xuICAgIHZhciByZXMgPSB7fTtcbiAgICByZXMuZm9yID0gaW5NYXRjaFsyXS50cmltKCk7XG4gICAgdmFyIGFsaWFzID0gaW5NYXRjaFsxXS50cmltKCkucmVwbGFjZShzdHJpcFBhcmVuc1JFLCAnJyk7XG4gICAgdmFyIGl0ZXJhdG9yTWF0Y2ggPSBhbGlhcy5tYXRjaChmb3JJdGVyYXRvclJFKTtcbiAgICBpZiAoaXRlcmF0b3JNYXRjaCkge1xuICAgICAgICByZXMuYWxpYXMgPSBhbGlhcy5yZXBsYWNlKGZvckl0ZXJhdG9yUkUsICcnKS50cmltKCk7XG4gICAgICAgIHJlcy5pdGVyYXRvcjEgPSBpdGVyYXRvck1hdGNoWzFdLnRyaW0oKTtcbiAgICAgICAgaWYgKGl0ZXJhdG9yTWF0Y2hbMl0pIHtcbiAgICAgICAgICAgIHJlcy5pdGVyYXRvcjIgPSBpdGVyYXRvck1hdGNoWzJdLnRyaW0oKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmVzLmFsaWFzID0gYWxpYXM7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG5mdW5jdGlvbiBwcm9jZXNzSWYoZWwpIHtcbiAgICB2YXIgZXhwID0gZ2V0QW5kUmVtb3ZlQXR0cihlbCwgJ3YtaWYnKTtcbiAgICBpZiAoZXhwKSB7XG4gICAgICAgIGVsLmlmID0gZXhwO1xuICAgICAgICBhZGRJZkNvbmRpdGlvbihlbCwge1xuICAgICAgICAgICAgZXhwOiBleHAsXG4gICAgICAgICAgICBibG9jazogZWxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpZiAoZ2V0QW5kUmVtb3ZlQXR0cihlbCwgJ3YtZWxzZScpICE9IG51bGwpIHtcbiAgICAgICAgICAgIGVsLmVsc2UgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBlbHNlaWYgPSBnZXRBbmRSZW1vdmVBdHRyKGVsLCAndi1lbHNlLWlmJyk7XG4gICAgICAgIGlmIChlbHNlaWYpIHtcbiAgICAgICAgICAgIGVsLmVsc2VpZiA9IGVsc2VpZjtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIHByb2Nlc3NJZkNvbmRpdGlvbnMoZWwsIHBhcmVudCkge1xuICAgIHZhciBwcmV2ID0gZmluZFByZXZFbGVtZW50KHBhcmVudC5jaGlsZHJlbik7XG4gICAgaWYgKHByZXYgJiYgcHJldi5pZikge1xuICAgICAgICBhZGRJZkNvbmRpdGlvbihwcmV2LCB7XG4gICAgICAgICAgICBleHA6IGVsLmVsc2VpZixcbiAgICAgICAgICAgIGJsb2NrOiBlbFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICB3YXJuKFwidi1cIi5jb25jYXQoZWwuZWxzZWlmID8gJ2Vsc2UtaWY9XCInICsgZWwuZWxzZWlmICsgJ1wiJyA6ICdlbHNlJywgXCIgXCIpICtcbiAgICAgICAgICAgIFwidXNlZCBvbiBlbGVtZW50IDxcIi5jb25jYXQoZWwudGFnLCBcIj4gd2l0aG91dCBjb3JyZXNwb25kaW5nIHYtaWYuXCIpLCBlbC5yYXdBdHRyc01hcFtlbC5lbHNlaWYgPyAndi1lbHNlLWlmJyA6ICd2LWVsc2UnXSk7XG4gICAgfVxufVxuZnVuY3Rpb24gZmluZFByZXZFbGVtZW50KGNoaWxkcmVuKSB7XG4gICAgdmFyIGkgPSBjaGlsZHJlbi5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgICBpZiAoY2hpbGRyZW5baV0udHlwZSA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIGNoaWxkcmVuW2ldO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgY2hpbGRyZW5baV0udGV4dCAhPT0gJyAnKSB7XG4gICAgICAgICAgICAgICAgd2FybihcInRleHQgXFxcIlwiLmNvbmNhdChjaGlsZHJlbltpXS50ZXh0LnRyaW0oKSwgXCJcXFwiIGJldHdlZW4gdi1pZiBhbmQgdi1lbHNlKC1pZikgXCIpICtcbiAgICAgICAgICAgICAgICAgICAgXCJ3aWxsIGJlIGlnbm9yZWQuXCIsIGNoaWxkcmVuW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNoaWxkcmVuLnBvcCgpO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gYWRkSWZDb25kaXRpb24oZWwsIGNvbmRpdGlvbikge1xuICAgIGlmICghZWwuaWZDb25kaXRpb25zKSB7XG4gICAgICAgIGVsLmlmQ29uZGl0aW9ucyA9IFtdO1xuICAgIH1cbiAgICBlbC5pZkNvbmRpdGlvbnMucHVzaChjb25kaXRpb24pO1xufVxuZnVuY3Rpb24gcHJvY2Vzc09uY2UoZWwpIHtcbiAgICB2YXIgb25jZSA9IGdldEFuZFJlbW92ZUF0dHIoZWwsICd2LW9uY2UnKTtcbiAgICBpZiAob25jZSAhPSBudWxsKSB7XG4gICAgICAgIGVsLm9uY2UgPSB0cnVlO1xuICAgIH1cbn1cbi8vIGhhbmRsZSBjb250ZW50IGJlaW5nIHBhc3NlZCB0byBhIGNvbXBvbmVudCBhcyBzbG90LFxuLy8gZS5nLiA8dGVtcGxhdGUgc2xvdD1cInh4eFwiPiwgPGRpdiBzbG90LXNjb3BlPVwieHh4XCI+XG5mdW5jdGlvbiBwcm9jZXNzU2xvdENvbnRlbnQoZWwpIHtcbiAgICB2YXIgc2xvdFNjb3BlO1xuICAgIGlmIChlbC50YWcgPT09ICd0ZW1wbGF0ZScpIHtcbiAgICAgICAgc2xvdFNjb3BlID0gZ2V0QW5kUmVtb3ZlQXR0cihlbCwgJ3Njb3BlJyk7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBzbG90U2NvcGUpIHtcbiAgICAgICAgICAgIHdhcm4oXCJ0aGUgXFxcInNjb3BlXFxcIiBhdHRyaWJ1dGUgZm9yIHNjb3BlZCBzbG90cyBoYXZlIGJlZW4gZGVwcmVjYXRlZCBhbmQgXCIgK1xuICAgICAgICAgICAgICAgIFwicmVwbGFjZWQgYnkgXFxcInNsb3Qtc2NvcGVcXFwiIHNpbmNlIDIuNS4gVGhlIG5ldyBcXFwic2xvdC1zY29wZVxcXCIgYXR0cmlidXRlIFwiICtcbiAgICAgICAgICAgICAgICBcImNhbiBhbHNvIGJlIHVzZWQgb24gcGxhaW4gZWxlbWVudHMgaW4gYWRkaXRpb24gdG8gPHRlbXBsYXRlPiB0byBcIiArXG4gICAgICAgICAgICAgICAgXCJkZW5vdGUgc2NvcGVkIHNsb3RzLlwiLCBlbC5yYXdBdHRyc01hcFsnc2NvcGUnXSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWwuc2xvdFNjb3BlID0gc2xvdFNjb3BlIHx8IGdldEFuZFJlbW92ZUF0dHIoZWwsICdzbG90LXNjb3BlJyk7XG4gICAgfVxuICAgIGVsc2UgaWYgKChzbG90U2NvcGUgPSBnZXRBbmRSZW1vdmVBdHRyKGVsLCAnc2xvdC1zY29wZScpKSkge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgZWwuYXR0cnNNYXBbJ3YtZm9yJ10pIHtcbiAgICAgICAgICAgIHdhcm4oXCJBbWJpZ3VvdXMgY29tYmluZWQgdXNhZ2Ugb2Ygc2xvdC1zY29wZSBhbmQgdi1mb3Igb24gPFwiLmNvbmNhdChlbC50YWcsIFwiPiBcIikgK1xuICAgICAgICAgICAgICAgIFwiKHYtZm9yIHRha2VzIGhpZ2hlciBwcmlvcml0eSkuIFVzZSBhIHdyYXBwZXIgPHRlbXBsYXRlPiBmb3IgdGhlIFwiICtcbiAgICAgICAgICAgICAgICBcInNjb3BlZCBzbG90IHRvIG1ha2UgaXQgY2xlYXJlci5cIiwgZWwucmF3QXR0cnNNYXBbJ3Nsb3Qtc2NvcGUnXSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWwuc2xvdFNjb3BlID0gc2xvdFNjb3BlO1xuICAgIH1cbiAgICAvLyBzbG90PVwieHh4XCJcbiAgICB2YXIgc2xvdFRhcmdldCA9IGdldEJpbmRpbmdBdHRyKGVsLCAnc2xvdCcpO1xuICAgIGlmIChzbG90VGFyZ2V0KSB7XG4gICAgICAgIGVsLnNsb3RUYXJnZXQgPSBzbG90VGFyZ2V0ID09PSAnXCJcIicgPyAnXCJkZWZhdWx0XCInIDogc2xvdFRhcmdldDtcbiAgICAgICAgZWwuc2xvdFRhcmdldER5bmFtaWMgPSAhIShlbC5hdHRyc01hcFsnOnNsb3QnXSB8fCBlbC5hdHRyc01hcFsndi1iaW5kOnNsb3QnXSk7XG4gICAgICAgIC8vIHByZXNlcnZlIHNsb3QgYXMgYW4gYXR0cmlidXRlIGZvciBuYXRpdmUgc2hhZG93IERPTSBjb21wYXRcbiAgICAgICAgLy8gb25seSBmb3Igbm9uLXNjb3BlZCBzbG90cy5cbiAgICAgICAgaWYgKGVsLnRhZyAhPT0gJ3RlbXBsYXRlJyAmJiAhZWwuc2xvdFNjb3BlKSB7XG4gICAgICAgICAgICBhZGRBdHRyKGVsLCAnc2xvdCcsIHNsb3RUYXJnZXQsIGdldFJhd0JpbmRpbmdBdHRyKGVsLCAnc2xvdCcpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyAyLjYgdi1zbG90IHN5bnRheFxuICAgIHtcbiAgICAgICAgaWYgKGVsLnRhZyA9PT0gJ3RlbXBsYXRlJykge1xuICAgICAgICAgICAgLy8gdi1zbG90IG9uIDx0ZW1wbGF0ZT5cbiAgICAgICAgICAgIHZhciBzbG90QmluZGluZyA9IGdldEFuZFJlbW92ZUF0dHJCeVJlZ2V4KGVsLCBzbG90UkUpO1xuICAgICAgICAgICAgaWYgKHNsb3RCaW5kaW5nKSB7XG4gICAgICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVsLnNsb3RUYXJnZXQgfHwgZWwuc2xvdFNjb3BlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3YXJuKFwiVW5leHBlY3RlZCBtaXhlZCB1c2FnZSBvZiBkaWZmZXJlbnQgc2xvdCBzeW50YXhlcy5cIiwgZWwpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChlbC5wYXJlbnQgJiYgIW1heWJlQ29tcG9uZW50KGVsLnBhcmVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdhcm4oXCI8dGVtcGxhdGUgdi1zbG90PiBjYW4gb25seSBhcHBlYXIgYXQgdGhlIHJvb3QgbGV2ZWwgaW5zaWRlIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInRoZSByZWNlaXZpbmcgY29tcG9uZW50XCIsIGVsKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgX2EgPSBnZXRTbG90TmFtZShzbG90QmluZGluZyksIG5hbWVfMiA9IF9hLm5hbWUsIGR5bmFtaWMgPSBfYS5keW5hbWljO1xuICAgICAgICAgICAgICAgIGVsLnNsb3RUYXJnZXQgPSBuYW1lXzI7XG4gICAgICAgICAgICAgICAgZWwuc2xvdFRhcmdldER5bmFtaWMgPSBkeW5hbWljO1xuICAgICAgICAgICAgICAgIGVsLnNsb3RTY29wZSA9IHNsb3RCaW5kaW5nLnZhbHVlIHx8IGVtcHR5U2xvdFNjb3BlVG9rZW47IC8vIGZvcmNlIGl0IGludG8gYSBzY29wZWQgc2xvdCBmb3IgcGVyZlxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gdi1zbG90IG9uIGNvbXBvbmVudCwgZGVub3RlcyBkZWZhdWx0IHNsb3RcbiAgICAgICAgICAgIHZhciBzbG90QmluZGluZyA9IGdldEFuZFJlbW92ZUF0dHJCeVJlZ2V4KGVsLCBzbG90UkUpO1xuICAgICAgICAgICAgaWYgKHNsb3RCaW5kaW5nKSB7XG4gICAgICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFtYXliZUNvbXBvbmVudChlbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdhcm4oXCJ2LXNsb3QgY2FuIG9ubHkgYmUgdXNlZCBvbiBjb21wb25lbnRzIG9yIDx0ZW1wbGF0ZT4uXCIsIHNsb3RCaW5kaW5nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoZWwuc2xvdFNjb3BlIHx8IGVsLnNsb3RUYXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdhcm4oXCJVbmV4cGVjdGVkIG1peGVkIHVzYWdlIG9mIGRpZmZlcmVudCBzbG90IHN5bnRheGVzLlwiLCBlbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGVsLnNjb3BlZFNsb3RzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3YXJuKFwiVG8gYXZvaWQgc2NvcGUgYW1iaWd1aXR5LCB0aGUgZGVmYXVsdCBzbG90IHNob3VsZCBhbHNvIHVzZSBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCI8dGVtcGxhdGU+IHN5bnRheCB3aGVuIHRoZXJlIGFyZSBvdGhlciBuYW1lZCBzbG90cy5cIiwgc2xvdEJpbmRpbmcpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGFkZCB0aGUgY29tcG9uZW50J3MgY2hpbGRyZW4gdG8gaXRzIGRlZmF1bHQgc2xvdFxuICAgICAgICAgICAgICAgIHZhciBzbG90cyA9IGVsLnNjb3BlZFNsb3RzIHx8IChlbC5zY29wZWRTbG90cyA9IHt9KTtcbiAgICAgICAgICAgICAgICB2YXIgX2IgPSBnZXRTbG90TmFtZShzbG90QmluZGluZyksIG5hbWVfMyA9IF9iLm5hbWUsIGR5bmFtaWMgPSBfYi5keW5hbWljO1xuICAgICAgICAgICAgICAgIHZhciBzbG90Q29udGFpbmVyXzEgPSAoc2xvdHNbbmFtZV8zXSA9IGNyZWF0ZUFTVEVsZW1lbnQoJ3RlbXBsYXRlJywgW10sIGVsKSk7XG4gICAgICAgICAgICAgICAgc2xvdENvbnRhaW5lcl8xLnNsb3RUYXJnZXQgPSBuYW1lXzM7XG4gICAgICAgICAgICAgICAgc2xvdENvbnRhaW5lcl8xLnNsb3RUYXJnZXREeW5hbWljID0gZHluYW1pYztcbiAgICAgICAgICAgICAgICBzbG90Q29udGFpbmVyXzEuY2hpbGRyZW4gPSBlbC5jaGlsZHJlbi5maWx0ZXIoZnVuY3Rpb24gKGMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjLnNsb3RTY29wZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYy5wYXJlbnQgPSBzbG90Q29udGFpbmVyXzE7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHNsb3RDb250YWluZXJfMS5zbG90U2NvcGUgPSBzbG90QmluZGluZy52YWx1ZSB8fCBlbXB0eVNsb3RTY29wZVRva2VuO1xuICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBjaGlsZHJlbiBhcyB0aGV5IGFyZSByZXR1cm5lZCBmcm9tIHNjb3BlZFNsb3RzIG5vd1xuICAgICAgICAgICAgICAgIGVsLmNoaWxkcmVuID0gW107XG4gICAgICAgICAgICAgICAgLy8gbWFyayBlbCBub24tcGxhaW4gc28gZGF0YSBnZXRzIGdlbmVyYXRlZFxuICAgICAgICAgICAgICAgIGVsLnBsYWluID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBnZXRTbG90TmFtZShiaW5kaW5nKSB7XG4gICAgdmFyIG5hbWUgPSBiaW5kaW5nLm5hbWUucmVwbGFjZShzbG90UkUsICcnKTtcbiAgICBpZiAoIW5hbWUpIHtcbiAgICAgICAgaWYgKGJpbmRpbmcubmFtZVswXSAhPT0gJyMnKSB7XG4gICAgICAgICAgICBuYW1lID0gJ2RlZmF1bHQnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgIHdhcm4oXCJ2LXNsb3Qgc2hvcnRoYW5kIHN5bnRheCByZXF1aXJlcyBhIHNsb3QgbmFtZS5cIiwgYmluZGluZyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGR5bmFtaWNBcmdSRS50ZXN0KG5hbWUpXG4gICAgICAgID8gLy8gZHluYW1pYyBbbmFtZV1cbiAgICAgICAgICAgIHsgbmFtZTogbmFtZS5zbGljZSgxLCAtMSksIGR5bmFtaWM6IHRydWUgfVxuICAgICAgICA6IC8vIHN0YXRpYyBuYW1lXG4gICAgICAgICAgICB7IG5hbWU6IFwiXFxcIlwiLmNvbmNhdChuYW1lLCBcIlxcXCJcIiksIGR5bmFtaWM6IGZhbHNlIH07XG59XG4vLyBoYW5kbGUgPHNsb3QvPiBvdXRsZXRzXG5mdW5jdGlvbiBwcm9jZXNzU2xvdE91dGxldChlbCkge1xuICAgIGlmIChlbC50YWcgPT09ICdzbG90Jykge1xuICAgICAgICBlbC5zbG90TmFtZSA9IGdldEJpbmRpbmdBdHRyKGVsLCAnbmFtZScpO1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBlbC5rZXkpIHtcbiAgICAgICAgICAgIHdhcm4oXCJga2V5YCBkb2VzIG5vdCB3b3JrIG9uIDxzbG90PiBiZWNhdXNlIHNsb3RzIGFyZSBhYnN0cmFjdCBvdXRsZXRzIFwiICtcbiAgICAgICAgICAgICAgICBcImFuZCBjYW4gcG9zc2libHkgZXhwYW5kIGludG8gbXVsdGlwbGUgZWxlbWVudHMuIFwiICtcbiAgICAgICAgICAgICAgICBcIlVzZSB0aGUga2V5IG9uIGEgd3JhcHBpbmcgZWxlbWVudCBpbnN0ZWFkLlwiLCBnZXRSYXdCaW5kaW5nQXR0cihlbCwgJ2tleScpKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIHByb2Nlc3NDb21wb25lbnQoZWwpIHtcbiAgICB2YXIgYmluZGluZztcbiAgICBpZiAoKGJpbmRpbmcgPSBnZXRCaW5kaW5nQXR0cihlbCwgJ2lzJykpKSB7XG4gICAgICAgIGVsLmNvbXBvbmVudCA9IGJpbmRpbmc7XG4gICAgfVxuICAgIGlmIChnZXRBbmRSZW1vdmVBdHRyKGVsLCAnaW5saW5lLXRlbXBsYXRlJykgIT0gbnVsbCkge1xuICAgICAgICBlbC5pbmxpbmVUZW1wbGF0ZSA9IHRydWU7XG4gICAgfVxufVxuZnVuY3Rpb24gcHJvY2Vzc0F0dHJzKGVsKSB7XG4gICAgdmFyIGxpc3QgPSBlbC5hdHRyc0xpc3Q7XG4gICAgdmFyIGksIGwsIG5hbWUsIHJhd05hbWUsIHZhbHVlLCBtb2RpZmllcnMsIHN5bmNHZW4sIGlzRHluYW1pYztcbiAgICBmb3IgKGkgPSAwLCBsID0gbGlzdC5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgbmFtZSA9IHJhd05hbWUgPSBsaXN0W2ldLm5hbWU7XG4gICAgICAgIHZhbHVlID0gbGlzdFtpXS52YWx1ZTtcbiAgICAgICAgaWYgKGRpclJFLnRlc3QobmFtZSkpIHtcbiAgICAgICAgICAgIC8vIG1hcmsgZWxlbWVudCBhcyBkeW5hbWljXG4gICAgICAgICAgICBlbC5oYXNCaW5kaW5ncyA9IHRydWU7XG4gICAgICAgICAgICAvLyBtb2RpZmllcnNcbiAgICAgICAgICAgIG1vZGlmaWVycyA9IHBhcnNlTW9kaWZpZXJzKG5hbWUucmVwbGFjZShkaXJSRSwgJycpKTtcbiAgICAgICAgICAgIC8vIHN1cHBvcnQgLmZvbyBzaG9ydGhhbmQgc3ludGF4IGZvciB0aGUgLnByb3AgbW9kaWZpZXJcbiAgICAgICAgICAgIGlmIChtb2RpZmllcnMpIHtcbiAgICAgICAgICAgICAgICBuYW1lID0gbmFtZS5yZXBsYWNlKG1vZGlmaWVyUkUsICcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChiaW5kUkUudGVzdChuYW1lKSkge1xuICAgICAgICAgICAgICAgIC8vIHYtYmluZFxuICAgICAgICAgICAgICAgIG5hbWUgPSBuYW1lLnJlcGxhY2UoYmluZFJFLCAnJyk7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBwYXJzZUZpbHRlcnModmFsdWUpO1xuICAgICAgICAgICAgICAgIGlzRHluYW1pYyA9IGR5bmFtaWNBcmdSRS50ZXN0KG5hbWUpO1xuICAgICAgICAgICAgICAgIGlmIChpc0R5bmFtaWMpIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZSA9IG5hbWUuc2xpY2UoMSwgLTEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB2YWx1ZS50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHdhcm4oXCJUaGUgdmFsdWUgZm9yIGEgdi1iaW5kIGV4cHJlc3Npb24gY2Fubm90IGJlIGVtcHR5LiBGb3VuZCBpbiBcXFwidi1iaW5kOlwiLmNvbmNhdChuYW1lLCBcIlxcXCJcIikpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAobW9kaWZpZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtb2RpZmllcnMucHJvcCAmJiAhaXNEeW5hbWljKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gY2FtZWxpemUobmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSA9PT0gJ2lubmVySHRtbCcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9ICdpbm5lckhUTUwnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChtb2RpZmllcnMuY2FtZWwgJiYgIWlzRHluYW1pYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IGNhbWVsaXplKG5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChtb2RpZmllcnMuc3luYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3luY0dlbiA9IGdlbkFzc2lnbm1lbnRDb2RlKHZhbHVlLCBcIiRldmVudFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNEeW5hbWljKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkSGFuZGxlcihlbCwgXCJ1cGRhdGU6XCIuY29uY2F0KGNhbWVsaXplKG5hbWUpKSwgc3luY0dlbiwgbnVsbCwgZmFsc2UsIHdhcm4sIGxpc3RbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoeXBoZW5hdGUobmFtZSkgIT09IGNhbWVsaXplKG5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEhhbmRsZXIoZWwsIFwidXBkYXRlOlwiLmNvbmNhdChoeXBoZW5hdGUobmFtZSkpLCBzeW5jR2VuLCBudWxsLCBmYWxzZSwgd2FybiwgbGlzdFtpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGFuZGxlciB3LyBkeW5hbWljIGV2ZW50IG5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRIYW5kbGVyKGVsLCBcIlxcXCJ1cGRhdGU6XFxcIisoXCIuY29uY2F0KG5hbWUsIFwiKVwiKSwgc3luY0dlbiwgbnVsbCwgZmFsc2UsIHdhcm4sIGxpc3RbaV0sIHRydWUgLy8gZHluYW1pY1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKChtb2RpZmllcnMgJiYgbW9kaWZpZXJzLnByb3ApIHx8XG4gICAgICAgICAgICAgICAgICAgICghZWwuY29tcG9uZW50ICYmIHBsYXRmb3JtTXVzdFVzZVByb3AoZWwudGFnLCBlbC5hdHRyc01hcC50eXBlLCBuYW1lKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkUHJvcChlbCwgbmFtZSwgdmFsdWUsIGxpc3RbaV0sIGlzRHluYW1pYyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBhZGRBdHRyKGVsLCBuYW1lLCB2YWx1ZSwgbGlzdFtpXSwgaXNEeW5hbWljKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChvblJFLnRlc3QobmFtZSkpIHtcbiAgICAgICAgICAgICAgICAvLyB2LW9uXG4gICAgICAgICAgICAgICAgbmFtZSA9IG5hbWUucmVwbGFjZShvblJFLCAnJyk7XG4gICAgICAgICAgICAgICAgaXNEeW5hbWljID0gZHluYW1pY0FyZ1JFLnRlc3QobmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKGlzRHluYW1pYykge1xuICAgICAgICAgICAgICAgICAgICBuYW1lID0gbmFtZS5zbGljZSgxLCAtMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFkZEhhbmRsZXIoZWwsIG5hbWUsIHZhbHVlLCBtb2RpZmllcnMsIGZhbHNlLCB3YXJuLCBsaXN0W2ldLCBpc0R5bmFtaWMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gbm9ybWFsIGRpcmVjdGl2ZXNcbiAgICAgICAgICAgICAgICBuYW1lID0gbmFtZS5yZXBsYWNlKGRpclJFLCAnJyk7XG4gICAgICAgICAgICAgICAgLy8gcGFyc2UgYXJnXG4gICAgICAgICAgICAgICAgdmFyIGFyZ01hdGNoID0gbmFtZS5tYXRjaChhcmdSRSk7XG4gICAgICAgICAgICAgICAgdmFyIGFyZyA9IGFyZ01hdGNoICYmIGFyZ01hdGNoWzFdO1xuICAgICAgICAgICAgICAgIGlzRHluYW1pYyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGlmIChhcmcpIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZSA9IG5hbWUuc2xpY2UoMCwgLShhcmcubGVuZ3RoICsgMSkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZHluYW1pY0FyZ1JFLnRlc3QoYXJnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gYXJnLnNsaWNlKDEsIC0xKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzRHluYW1pYyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYWRkRGlyZWN0aXZlKGVsLCBuYW1lLCByYXdOYW1lLCB2YWx1ZSwgYXJnLCBpc0R5bmFtaWMsIG1vZGlmaWVycywgbGlzdFtpXSk7XG4gICAgICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgbmFtZSA9PT0gJ21vZGVsJykge1xuICAgICAgICAgICAgICAgICAgICBjaGVja0ZvckFsaWFzTW9kZWwoZWwsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBsaXRlcmFsIGF0dHJpYnV0ZVxuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVzID0gcGFyc2VUZXh0KHZhbHVlLCBkZWxpbWl0ZXJzKTtcbiAgICAgICAgICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHdhcm4oXCJcIi5jb25jYXQobmFtZSwgXCI9XFxcIlwiKS5jb25jYXQodmFsdWUsIFwiXFxcIjogXCIpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdJbnRlcnBvbGF0aW9uIGluc2lkZSBhdHRyaWJ1dGVzIGhhcyBiZWVuIHJlbW92ZWQuICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ1VzZSB2LWJpbmQgb3IgdGhlIGNvbG9uIHNob3J0aGFuZCBpbnN0ZWFkLiBGb3IgZXhhbXBsZSwgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnaW5zdGVhZCBvZiA8ZGl2IGlkPVwie3sgdmFsIH19XCI+LCB1c2UgPGRpdiA6aWQ9XCJ2YWxcIj4uJywgbGlzdFtpXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYWRkQXR0cihlbCwgbmFtZSwgSlNPTi5zdHJpbmdpZnkodmFsdWUpLCBsaXN0W2ldKTtcbiAgICAgICAgICAgIC8vICM2ODg3IGZpcmVmb3ggZG9lc24ndCB1cGRhdGUgbXV0ZWQgc3RhdGUgaWYgc2V0IHZpYSBhdHRyaWJ1dGVcbiAgICAgICAgICAgIC8vIGV2ZW4gaW1tZWRpYXRlbHkgYWZ0ZXIgZWxlbWVudCBjcmVhdGlvblxuICAgICAgICAgICAgaWYgKCFlbC5jb21wb25lbnQgJiZcbiAgICAgICAgICAgICAgICBuYW1lID09PSAnbXV0ZWQnICYmXG4gICAgICAgICAgICAgICAgcGxhdGZvcm1NdXN0VXNlUHJvcChlbC50YWcsIGVsLmF0dHJzTWFwLnR5cGUsIG5hbWUpKSB7XG4gICAgICAgICAgICAgICAgYWRkUHJvcChlbCwgbmFtZSwgJ3RydWUnLCBsaXN0W2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIGNoZWNrSW5Gb3IoZWwpIHtcbiAgICB2YXIgcGFyZW50ID0gZWw7XG4gICAgd2hpbGUgKHBhcmVudCkge1xuICAgICAgICBpZiAocGFyZW50LmZvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50O1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBwYXJzZU1vZGlmaWVycyhuYW1lKSB7XG4gICAgdmFyIG1hdGNoID0gbmFtZS5tYXRjaChtb2RpZmllclJFKTtcbiAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgdmFyIHJldF8xID0ge307XG4gICAgICAgIG1hdGNoLmZvckVhY2goZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgICAgIHJldF8xW20uc2xpY2UoMSldID0gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXRfMTtcbiAgICB9XG59XG5mdW5jdGlvbiBtYWtlQXR0cnNNYXAoYXR0cnMpIHtcbiAgICB2YXIgbWFwID0ge307XG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSBhdHRycy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgbWFwW2F0dHJzW2ldLm5hbWVdICYmICFpc0lFICYmICFpc0VkZ2UpIHtcbiAgICAgICAgICAgIHdhcm4oJ2R1cGxpY2F0ZSBhdHRyaWJ1dGU6ICcgKyBhdHRyc1tpXS5uYW1lLCBhdHRyc1tpXSk7XG4gICAgICAgIH1cbiAgICAgICAgbWFwW2F0dHJzW2ldLm5hbWVdID0gYXR0cnNbaV0udmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBtYXA7XG59XG4vLyBmb3Igc2NyaXB0IChlLmcuIHR5cGU9XCJ4L3RlbXBsYXRlXCIpIG9yIHN0eWxlLCBkbyBub3QgZGVjb2RlIGNvbnRlbnRcbmZ1bmN0aW9uIGlzVGV4dFRhZyhlbCkge1xuICAgIHJldHVybiBlbC50YWcgPT09ICdzY3JpcHQnIHx8IGVsLnRhZyA9PT0gJ3N0eWxlJztcbn1cbmZ1bmN0aW9uIGlzRm9yYmlkZGVuVGFnKGVsKSB7XG4gICAgcmV0dXJuIChlbC50YWcgPT09ICdzdHlsZScgfHxcbiAgICAgICAgKGVsLnRhZyA9PT0gJ3NjcmlwdCcgJiZcbiAgICAgICAgICAgICghZWwuYXR0cnNNYXAudHlwZSB8fCBlbC5hdHRyc01hcC50eXBlID09PSAndGV4dC9qYXZhc2NyaXB0JykpKTtcbn1cbnZhciBpZU5TQnVnID0gL154bWxuczpOU1xcZCsvO1xudmFyIGllTlNQcmVmaXggPSAvXk5TXFxkKzovO1xuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmZ1bmN0aW9uIGd1YXJkSUVTVkdCdWcoYXR0cnMpIHtcbiAgICB2YXIgcmVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRycy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgYXR0ciA9IGF0dHJzW2ldO1xuICAgICAgICBpZiAoIWllTlNCdWcudGVzdChhdHRyLm5hbWUpKSB7XG4gICAgICAgICAgICBhdHRyLm5hbWUgPSBhdHRyLm5hbWUucmVwbGFjZShpZU5TUHJlZml4LCAnJyk7XG4gICAgICAgICAgICByZXMucHVzaChhdHRyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuZnVuY3Rpb24gY2hlY2tGb3JBbGlhc01vZGVsKGVsLCB2YWx1ZSkge1xuICAgIHZhciBfZWwgPSBlbDtcbiAgICB3aGlsZSAoX2VsKSB7XG4gICAgICAgIGlmIChfZWwuZm9yICYmIF9lbC5hbGlhcyA9PT0gdmFsdWUpIHtcbiAgICAgICAgICAgIHdhcm4oXCI8XCIuY29uY2F0KGVsLnRhZywgXCIgdi1tb2RlbD1cXFwiXCIpLmNvbmNhdCh2YWx1ZSwgXCJcXFwiPjogXCIpICtcbiAgICAgICAgICAgICAgICBcIllvdSBhcmUgYmluZGluZyB2LW1vZGVsIGRpcmVjdGx5IHRvIGEgdi1mb3IgaXRlcmF0aW9uIGFsaWFzLiBcIiArXG4gICAgICAgICAgICAgICAgXCJUaGlzIHdpbGwgbm90IGJlIGFibGUgdG8gbW9kaWZ5IHRoZSB2LWZvciBzb3VyY2UgYXJyYXkgYmVjYXVzZSBcIiArXG4gICAgICAgICAgICAgICAgXCJ3cml0aW5nIHRvIHRoZSBhbGlhcyBpcyBsaWtlIG1vZGlmeWluZyBhIGZ1bmN0aW9uIGxvY2FsIHZhcmlhYmxlLiBcIiArXG4gICAgICAgICAgICAgICAgXCJDb25zaWRlciB1c2luZyBhbiBhcnJheSBvZiBvYmplY3RzIGFuZCB1c2Ugdi1tb2RlbCBvbiBhbiBvYmplY3QgcHJvcGVydHkgaW5zdGVhZC5cIiwgZWwucmF3QXR0cnNNYXBbJ3YtbW9kZWwnXSk7XG4gICAgICAgIH1cbiAgICAgICAgX2VsID0gX2VsLnBhcmVudDtcbiAgICB9XG59XG5cbi8qKlxuICogRXhwYW5kIGlucHV0W3YtbW9kZWxdIHdpdGggZHluYW1pYyB0eXBlIGJpbmRpbmdzIGludG8gdi1pZi1lbHNlIGNoYWluc1xuICogVHVybiB0aGlzOlxuICogICA8aW5wdXQgdi1tb2RlbD1cImRhdGFbdHlwZV1cIiA6dHlwZT1cInR5cGVcIj5cbiAqIGludG8gdGhpczpcbiAqICAgPGlucHV0IHYtaWY9XCJ0eXBlID09PSAnY2hlY2tib3gnXCIgdHlwZT1cImNoZWNrYm94XCIgdi1tb2RlbD1cImRhdGFbdHlwZV1cIj5cbiAqICAgPGlucHV0IHYtZWxzZS1pZj1cInR5cGUgPT09ICdyYWRpbydcIiB0eXBlPVwicmFkaW9cIiB2LW1vZGVsPVwiZGF0YVt0eXBlXVwiPlxuICogICA8aW5wdXQgdi1lbHNlIDp0eXBlPVwidHlwZVwiIHYtbW9kZWw9XCJkYXRhW3R5cGVdXCI+XG4gKi9cbmZ1bmN0aW9uIHByZVRyYW5zZm9ybU5vZGUoZWwsIG9wdGlvbnMpIHtcbiAgICBpZiAoZWwudGFnID09PSAnaW5wdXQnKSB7XG4gICAgICAgIHZhciBtYXAgPSBlbC5hdHRyc01hcDtcbiAgICAgICAgaWYgKCFtYXBbJ3YtbW9kZWwnXSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciB0eXBlQmluZGluZyA9IHZvaWQgMDtcbiAgICAgICAgaWYgKG1hcFsnOnR5cGUnXSB8fCBtYXBbJ3YtYmluZDp0eXBlJ10pIHtcbiAgICAgICAgICAgIHR5cGVCaW5kaW5nID0gZ2V0QmluZGluZ0F0dHIoZWwsICd0eXBlJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFtYXAudHlwZSAmJiAhdHlwZUJpbmRpbmcgJiYgbWFwWyd2LWJpbmQnXSkge1xuICAgICAgICAgICAgdHlwZUJpbmRpbmcgPSBcIihcIi5jb25jYXQobWFwWyd2LWJpbmQnXSwgXCIpLnR5cGVcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVCaW5kaW5nKSB7XG4gICAgICAgICAgICB2YXIgaWZDb25kaXRpb24gPSBnZXRBbmRSZW1vdmVBdHRyKGVsLCAndi1pZicsIHRydWUpO1xuICAgICAgICAgICAgdmFyIGlmQ29uZGl0aW9uRXh0cmEgPSBpZkNvbmRpdGlvbiA/IFwiJiYoXCIuY29uY2F0KGlmQ29uZGl0aW9uLCBcIilcIikgOiBcIlwiO1xuICAgICAgICAgICAgdmFyIGhhc0Vsc2UgPSBnZXRBbmRSZW1vdmVBdHRyKGVsLCAndi1lbHNlJywgdHJ1ZSkgIT0gbnVsbDtcbiAgICAgICAgICAgIHZhciBlbHNlSWZDb25kaXRpb24gPSBnZXRBbmRSZW1vdmVBdHRyKGVsLCAndi1lbHNlLWlmJywgdHJ1ZSk7XG4gICAgICAgICAgICAvLyAxLiBjaGVja2JveFxuICAgICAgICAgICAgdmFyIGJyYW5jaDAgPSBjbG9uZUFTVEVsZW1lbnQoZWwpO1xuICAgICAgICAgICAgLy8gcHJvY2VzcyBmb3Igb24gdGhlIG1haW4gbm9kZVxuICAgICAgICAgICAgcHJvY2Vzc0ZvcihicmFuY2gwKTtcbiAgICAgICAgICAgIGFkZFJhd0F0dHIoYnJhbmNoMCwgJ3R5cGUnLCAnY2hlY2tib3gnKTtcbiAgICAgICAgICAgIHByb2Nlc3NFbGVtZW50KGJyYW5jaDAsIG9wdGlvbnMpO1xuICAgICAgICAgICAgYnJhbmNoMC5wcm9jZXNzZWQgPSB0cnVlOyAvLyBwcmV2ZW50IGl0IGZyb20gZG91YmxlLXByb2Nlc3NlZFxuICAgICAgICAgICAgYnJhbmNoMC5pZiA9IFwiKFwiLmNvbmNhdCh0eXBlQmluZGluZywgXCIpPT09J2NoZWNrYm94J1wiKSArIGlmQ29uZGl0aW9uRXh0cmE7XG4gICAgICAgICAgICBhZGRJZkNvbmRpdGlvbihicmFuY2gwLCB7XG4gICAgICAgICAgICAgICAgZXhwOiBicmFuY2gwLmlmLFxuICAgICAgICAgICAgICAgIGJsb2NrOiBicmFuY2gwXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIDIuIGFkZCByYWRpbyBlbHNlLWlmIGNvbmRpdGlvblxuICAgICAgICAgICAgdmFyIGJyYW5jaDEgPSBjbG9uZUFTVEVsZW1lbnQoZWwpO1xuICAgICAgICAgICAgZ2V0QW5kUmVtb3ZlQXR0cihicmFuY2gxLCAndi1mb3InLCB0cnVlKTtcbiAgICAgICAgICAgIGFkZFJhd0F0dHIoYnJhbmNoMSwgJ3R5cGUnLCAncmFkaW8nKTtcbiAgICAgICAgICAgIHByb2Nlc3NFbGVtZW50KGJyYW5jaDEsIG9wdGlvbnMpO1xuICAgICAgICAgICAgYWRkSWZDb25kaXRpb24oYnJhbmNoMCwge1xuICAgICAgICAgICAgICAgIGV4cDogXCIoXCIuY29uY2F0KHR5cGVCaW5kaW5nLCBcIik9PT0ncmFkaW8nXCIpICsgaWZDb25kaXRpb25FeHRyYSxcbiAgICAgICAgICAgICAgICBibG9jazogYnJhbmNoMVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyAzLiBvdGhlclxuICAgICAgICAgICAgdmFyIGJyYW5jaDIgPSBjbG9uZUFTVEVsZW1lbnQoZWwpO1xuICAgICAgICAgICAgZ2V0QW5kUmVtb3ZlQXR0cihicmFuY2gyLCAndi1mb3InLCB0cnVlKTtcbiAgICAgICAgICAgIGFkZFJhd0F0dHIoYnJhbmNoMiwgJzp0eXBlJywgdHlwZUJpbmRpbmcpO1xuICAgICAgICAgICAgcHJvY2Vzc0VsZW1lbnQoYnJhbmNoMiwgb3B0aW9ucyk7XG4gICAgICAgICAgICBhZGRJZkNvbmRpdGlvbihicmFuY2gwLCB7XG4gICAgICAgICAgICAgICAgZXhwOiBpZkNvbmRpdGlvbixcbiAgICAgICAgICAgICAgICBibG9jazogYnJhbmNoMlxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoaGFzRWxzZSkge1xuICAgICAgICAgICAgICAgIGJyYW5jaDAuZWxzZSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChlbHNlSWZDb25kaXRpb24pIHtcbiAgICAgICAgICAgICAgICBicmFuY2gwLmVsc2VpZiA9IGVsc2VJZkNvbmRpdGlvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBicmFuY2gwO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gY2xvbmVBU1RFbGVtZW50KGVsKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUFTVEVsZW1lbnQoZWwudGFnLCBlbC5hdHRyc0xpc3Quc2xpY2UoKSwgZWwucGFyZW50KTtcbn1cbnZhciBtb2RlbCA9IHtcbiAgICBwcmVUcmFuc2Zvcm1Ob2RlOiBwcmVUcmFuc2Zvcm1Ob2RlXG59O1xuXG52YXIgbW9kdWxlcyA9IFtrbGFzcywgc3R5bGUsIG1vZGVsXTtcblxuZnVuY3Rpb24gdGV4dChlbCwgZGlyKSB7XG4gICAgaWYgKGRpci52YWx1ZSkge1xuICAgICAgICBhZGRQcm9wKGVsLCAndGV4dENvbnRlbnQnLCBcIl9zKFwiLmNvbmNhdChkaXIudmFsdWUsIFwiKVwiKSwgZGlyKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGh0bWwoZWwsIGRpcikge1xuICAgIGlmIChkaXIudmFsdWUpIHtcbiAgICAgICAgYWRkUHJvcChlbCwgJ2lubmVySFRNTCcsIFwiX3MoXCIuY29uY2F0KGRpci52YWx1ZSwgXCIpXCIpLCBkaXIpO1xuICAgIH1cbn1cblxudmFyIGRpcmVjdGl2ZXMgPSB7XG4gICAgbW9kZWw6IG1vZGVsJDEsXG4gICAgdGV4dDogdGV4dCxcbiAgICBodG1sOiBodG1sXG59O1xuXG52YXIgYmFzZU9wdGlvbnMgPSB7XG4gICAgZXhwZWN0SFRNTDogdHJ1ZSxcbiAgICBtb2R1bGVzOiBtb2R1bGVzLFxuICAgIGRpcmVjdGl2ZXM6IGRpcmVjdGl2ZXMsXG4gICAgaXNQcmVUYWc6IGlzUHJlVGFnLFxuICAgIGlzVW5hcnlUYWc6IGlzVW5hcnlUYWcsXG4gICAgbXVzdFVzZVByb3A6IG11c3RVc2VQcm9wLFxuICAgIGNhbkJlTGVmdE9wZW5UYWc6IGNhbkJlTGVmdE9wZW5UYWcsXG4gICAgaXNSZXNlcnZlZFRhZzogaXNSZXNlcnZlZFRhZyxcbiAgICBnZXRUYWdOYW1lc3BhY2U6IGdldFRhZ05hbWVzcGFjZSxcbiAgICBzdGF0aWNLZXlzOiBnZW5TdGF0aWNLZXlzJDEobW9kdWxlcylcbn07XG5cbnZhciBpc1N0YXRpY0tleTtcbnZhciBpc1BsYXRmb3JtUmVzZXJ2ZWRUYWc7XG52YXIgZ2VuU3RhdGljS2V5c0NhY2hlZCA9IGNhY2hlZChnZW5TdGF0aWNLZXlzKTtcbi8qKlxuICogR29hbCBvZiB0aGUgb3B0aW1pemVyOiB3YWxrIHRoZSBnZW5lcmF0ZWQgdGVtcGxhdGUgQVNUIHRyZWVcbiAqIGFuZCBkZXRlY3Qgc3ViLXRyZWVzIHRoYXQgYXJlIHB1cmVseSBzdGF0aWMsIGkuZS4gcGFydHMgb2ZcbiAqIHRoZSBET00gdGhhdCBuZXZlciBuZWVkcyB0byBjaGFuZ2UuXG4gKlxuICogT25jZSB3ZSBkZXRlY3QgdGhlc2Ugc3ViLXRyZWVzLCB3ZSBjYW46XG4gKlxuICogMS4gSG9pc3QgdGhlbSBpbnRvIGNvbnN0YW50cywgc28gdGhhdCB3ZSBubyBsb25nZXIgbmVlZCB0b1xuICogICAgY3JlYXRlIGZyZXNoIG5vZGVzIGZvciB0aGVtIG9uIGVhY2ggcmUtcmVuZGVyO1xuICogMi4gQ29tcGxldGVseSBza2lwIHRoZW0gaW4gdGhlIHBhdGNoaW5nIHByb2Nlc3MuXG4gKi9cbmZ1bmN0aW9uIG9wdGltaXplKHJvb3QsIG9wdGlvbnMpIHtcbiAgICBpZiAoIXJvb3QpXG4gICAgICAgIHJldHVybjtcbiAgICBpc1N0YXRpY0tleSA9IGdlblN0YXRpY0tleXNDYWNoZWQob3B0aW9ucy5zdGF0aWNLZXlzIHx8ICcnKTtcbiAgICBpc1BsYXRmb3JtUmVzZXJ2ZWRUYWcgPSBvcHRpb25zLmlzUmVzZXJ2ZWRUYWcgfHwgbm87XG4gICAgLy8gZmlyc3QgcGFzczogbWFyayBhbGwgbm9uLXN0YXRpYyBub2Rlcy5cbiAgICBtYXJrU3RhdGljKHJvb3QpO1xuICAgIC8vIHNlY29uZCBwYXNzOiBtYXJrIHN0YXRpYyByb290cy5cbiAgICBtYXJrU3RhdGljUm9vdHMocm9vdCwgZmFsc2UpO1xufVxuZnVuY3Rpb24gZ2VuU3RhdGljS2V5cyhrZXlzKSB7XG4gICAgcmV0dXJuIG1ha2VNYXAoJ3R5cGUsdGFnLGF0dHJzTGlzdCxhdHRyc01hcCxwbGFpbixwYXJlbnQsY2hpbGRyZW4sYXR0cnMsc3RhcnQsZW5kLHJhd0F0dHJzTWFwJyArXG4gICAgICAgIChrZXlzID8gJywnICsga2V5cyA6ICcnKSk7XG59XG5mdW5jdGlvbiBtYXJrU3RhdGljKG5vZGUpIHtcbiAgICBub2RlLnN0YXRpYyA9IGlzU3RhdGljKG5vZGUpO1xuICAgIGlmIChub2RlLnR5cGUgPT09IDEpIHtcbiAgICAgICAgLy8gZG8gbm90IG1ha2UgY29tcG9uZW50IHNsb3QgY29udGVudCBzdGF0aWMuIHRoaXMgYXZvaWRzXG4gICAgICAgIC8vIDEuIGNvbXBvbmVudHMgbm90IGFibGUgdG8gbXV0YXRlIHNsb3Qgbm9kZXNcbiAgICAgICAgLy8gMi4gc3RhdGljIHNsb3QgY29udGVudCBmYWlscyBmb3IgaG90LXJlbG9hZGluZ1xuICAgICAgICBpZiAoIWlzUGxhdGZvcm1SZXNlcnZlZFRhZyhub2RlLnRhZykgJiZcbiAgICAgICAgICAgIG5vZGUudGFnICE9PSAnc2xvdCcgJiZcbiAgICAgICAgICAgIG5vZGUuYXR0cnNNYXBbJ2lubGluZS10ZW1wbGF0ZSddID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IG5vZGUuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgY2hpbGQgPSBub2RlLmNoaWxkcmVuW2ldO1xuICAgICAgICAgICAgbWFya1N0YXRpYyhjaGlsZCk7XG4gICAgICAgICAgICBpZiAoIWNoaWxkLnN0YXRpYykge1xuICAgICAgICAgICAgICAgIG5vZGUuc3RhdGljID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuaWZDb25kaXRpb25zKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMSwgbCA9IG5vZGUuaWZDb25kaXRpb25zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciBibG9jayA9IG5vZGUuaWZDb25kaXRpb25zW2ldLmJsb2NrO1xuICAgICAgICAgICAgICAgIG1hcmtTdGF0aWMoYmxvY2spO1xuICAgICAgICAgICAgICAgIGlmICghYmxvY2suc3RhdGljKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUuc3RhdGljID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gbWFya1N0YXRpY1Jvb3RzKG5vZGUsIGlzSW5Gb3IpIHtcbiAgICBpZiAobm9kZS50eXBlID09PSAxKSB7XG4gICAgICAgIGlmIChub2RlLnN0YXRpYyB8fCBub2RlLm9uY2UpIHtcbiAgICAgICAgICAgIG5vZGUuc3RhdGljSW5Gb3IgPSBpc0luRm9yO1xuICAgICAgICB9XG4gICAgICAgIC8vIEZvciBhIG5vZGUgdG8gcXVhbGlmeSBhcyBhIHN0YXRpYyByb290LCBpdCBzaG91bGQgaGF2ZSBjaGlsZHJlbiB0aGF0XG4gICAgICAgIC8vIGFyZSBub3QganVzdCBzdGF0aWMgdGV4dC4gT3RoZXJ3aXNlIHRoZSBjb3N0IG9mIGhvaXN0aW5nIG91dCB3aWxsXG4gICAgICAgIC8vIG91dHdlaWdoIHRoZSBiZW5lZml0cyBhbmQgaXQncyBiZXR0ZXIgb2ZmIHRvIGp1c3QgYWx3YXlzIHJlbmRlciBpdCBmcmVzaC5cbiAgICAgICAgaWYgKG5vZGUuc3RhdGljICYmXG4gICAgICAgICAgICBub2RlLmNoaWxkcmVuLmxlbmd0aCAmJlxuICAgICAgICAgICAgIShub2RlLmNoaWxkcmVuLmxlbmd0aCA9PT0gMSAmJiBub2RlLmNoaWxkcmVuWzBdLnR5cGUgPT09IDMpKSB7XG4gICAgICAgICAgICBub2RlLnN0YXRpY1Jvb3QgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbm9kZS5zdGF0aWNSb290ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gbm9kZS5jaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICBtYXJrU3RhdGljUm9vdHMobm9kZS5jaGlsZHJlbltpXSwgaXNJbkZvciB8fCAhIW5vZGUuZm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5pZkNvbmRpdGlvbnMpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAxLCBsID0gbm9kZS5pZkNvbmRpdGlvbnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbWFya1N0YXRpY1Jvb3RzKG5vZGUuaWZDb25kaXRpb25zW2ldLmJsb2NrLCBpc0luRm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIGlzU3RhdGljKG5vZGUpIHtcbiAgICBpZiAobm9kZS50eXBlID09PSAyKSB7XG4gICAgICAgIC8vIGV4cHJlc3Npb25cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAobm9kZS50eXBlID09PSAzKSB7XG4gICAgICAgIC8vIHRleHRcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiAhIShub2RlLnByZSB8fFxuICAgICAgICAoIW5vZGUuaGFzQmluZGluZ3MgJiYgLy8gbm8gZHluYW1pYyBiaW5kaW5nc1xuICAgICAgICAgICAgIW5vZGUuaWYgJiZcbiAgICAgICAgICAgICFub2RlLmZvciAmJiAvLyBub3Qgdi1pZiBvciB2LWZvciBvciB2LWVsc2VcbiAgICAgICAgICAgICFpc0J1aWx0SW5UYWcobm9kZS50YWcpICYmIC8vIG5vdCBhIGJ1aWx0LWluXG4gICAgICAgICAgICBpc1BsYXRmb3JtUmVzZXJ2ZWRUYWcobm9kZS50YWcpICYmIC8vIG5vdCBhIGNvbXBvbmVudFxuICAgICAgICAgICAgIWlzRGlyZWN0Q2hpbGRPZlRlbXBsYXRlRm9yKG5vZGUpICYmXG4gICAgICAgICAgICBPYmplY3Qua2V5cyhub2RlKS5ldmVyeShpc1N0YXRpY0tleSkpKTtcbn1cbmZ1bmN0aW9uIGlzRGlyZWN0Q2hpbGRPZlRlbXBsYXRlRm9yKG5vZGUpIHtcbiAgICB3aGlsZSAobm9kZS5wYXJlbnQpIHtcbiAgICAgICAgbm9kZSA9IG5vZGUucGFyZW50O1xuICAgICAgICBpZiAobm9kZS50YWcgIT09ICd0ZW1wbGF0ZScpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5mb3IpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxudmFyIGZuRXhwUkUgPSAvXihbXFx3JF9dK3xcXChbXildKj9cXCkpXFxzKj0+fF5mdW5jdGlvbig/OlxccytbXFx3JF0rKT9cXHMqXFwoLztcbnZhciBmbkludm9rZVJFID0gL1xcKFteKV0qP1xcKTsqJC87XG52YXIgc2ltcGxlUGF0aFJFID0gL15bQS1aYS16XyRdW1xcdyRdKig/OlxcLltBLVphLXpfJF1bXFx3JF0qfFxcWydbXiddKj8nXXxcXFtcIlteXCJdKj9cIl18XFxbXFxkK118XFxbW0EtWmEtel8kXVtcXHckXSpdKSokLztcbi8vIEtleWJvYXJkRXZlbnQua2V5Q29kZSBhbGlhc2VzXG52YXIga2V5Q29kZXMgPSB7XG4gICAgZXNjOiAyNyxcbiAgICB0YWI6IDksXG4gICAgZW50ZXI6IDEzLFxuICAgIHNwYWNlOiAzMixcbiAgICB1cDogMzgsXG4gICAgbGVmdDogMzcsXG4gICAgcmlnaHQ6IDM5LFxuICAgIGRvd246IDQwLFxuICAgIGRlbGV0ZTogWzgsIDQ2XVxufTtcbi8vIEtleWJvYXJkRXZlbnQua2V5IGFsaWFzZXNcbnZhciBrZXlOYW1lcyA9IHtcbiAgICAvLyAjNzg4MDogSUUxMSBhbmQgRWRnZSB1c2UgYEVzY2AgZm9yIEVzY2FwZSBrZXkgbmFtZS5cbiAgICBlc2M6IFsnRXNjJywgJ0VzY2FwZSddLFxuICAgIHRhYjogJ1RhYicsXG4gICAgZW50ZXI6ICdFbnRlcicsXG4gICAgLy8gIzkxMTI6IElFMTEgdXNlcyBgU3BhY2ViYXJgIGZvciBTcGFjZSBrZXkgbmFtZS5cbiAgICBzcGFjZTogWycgJywgJ1NwYWNlYmFyJ10sXG4gICAgLy8gIzc4MDY6IElFMTEgdXNlcyBrZXkgbmFtZXMgd2l0aG91dCBgQXJyb3dgIHByZWZpeCBmb3IgYXJyb3cga2V5cy5cbiAgICB1cDogWydVcCcsICdBcnJvd1VwJ10sXG4gICAgbGVmdDogWydMZWZ0JywgJ0Fycm93TGVmdCddLFxuICAgIHJpZ2h0OiBbJ1JpZ2h0JywgJ0Fycm93UmlnaHQnXSxcbiAgICBkb3duOiBbJ0Rvd24nLCAnQXJyb3dEb3duJ10sXG4gICAgLy8gIzkxMTI6IElFMTEgdXNlcyBgRGVsYCBmb3IgRGVsZXRlIGtleSBuYW1lLlxuICAgIGRlbGV0ZTogWydCYWNrc3BhY2UnLCAnRGVsZXRlJywgJ0RlbCddXG59O1xuLy8gIzQ4Njg6IG1vZGlmaWVycyB0aGF0IHByZXZlbnQgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgbGlzdGVuZXJcbi8vIG5lZWQgdG8gZXhwbGljaXRseSByZXR1cm4gbnVsbCBzbyB0aGF0IHdlIGNhbiBkZXRlcm1pbmUgd2hldGhlciB0byByZW1vdmVcbi8vIHRoZSBsaXN0ZW5lciBmb3IgLm9uY2VcbnZhciBnZW5HdWFyZCA9IGZ1bmN0aW9uIChjb25kaXRpb24pIHsgcmV0dXJuIFwiaWYoXCIuY29uY2F0KGNvbmRpdGlvbiwgXCIpcmV0dXJuIG51bGw7XCIpOyB9O1xudmFyIG1vZGlmaWVyQ29kZSA9IHtcbiAgICBzdG9wOiAnJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOycsXG4gICAgcHJldmVudDogJyRldmVudC5wcmV2ZW50RGVmYXVsdCgpOycsXG4gICAgc2VsZjogZ2VuR3VhcmQoXCIkZXZlbnQudGFyZ2V0ICE9PSAkZXZlbnQuY3VycmVudFRhcmdldFwiKSxcbiAgICBjdHJsOiBnZW5HdWFyZChcIiEkZXZlbnQuY3RybEtleVwiKSxcbiAgICBzaGlmdDogZ2VuR3VhcmQoXCIhJGV2ZW50LnNoaWZ0S2V5XCIpLFxuICAgIGFsdDogZ2VuR3VhcmQoXCIhJGV2ZW50LmFsdEtleVwiKSxcbiAgICBtZXRhOiBnZW5HdWFyZChcIiEkZXZlbnQubWV0YUtleVwiKSxcbiAgICBsZWZ0OiBnZW5HdWFyZChcIididXR0b24nIGluICRldmVudCAmJiAkZXZlbnQuYnV0dG9uICE9PSAwXCIpLFxuICAgIG1pZGRsZTogZ2VuR3VhcmQoXCInYnV0dG9uJyBpbiAkZXZlbnQgJiYgJGV2ZW50LmJ1dHRvbiAhPT0gMVwiKSxcbiAgICByaWdodDogZ2VuR3VhcmQoXCInYnV0dG9uJyBpbiAkZXZlbnQgJiYgJGV2ZW50LmJ1dHRvbiAhPT0gMlwiKVxufTtcbmZ1bmN0aW9uIGdlbkhhbmRsZXJzKGV2ZW50cywgaXNOYXRpdmUpIHtcbiAgICB2YXIgcHJlZml4ID0gaXNOYXRpdmUgPyAnbmF0aXZlT246JyA6ICdvbjonO1xuICAgIHZhciBzdGF0aWNIYW5kbGVycyA9IFwiXCI7XG4gICAgdmFyIGR5bmFtaWNIYW5kbGVycyA9IFwiXCI7XG4gICAgZm9yICh2YXIgbmFtZV8xIGluIGV2ZW50cykge1xuICAgICAgICB2YXIgaGFuZGxlckNvZGUgPSBnZW5IYW5kbGVyKGV2ZW50c1tuYW1lXzFdKTtcbiAgICAgICAgLy9AdHMtZXhwZWN0LWVycm9yXG4gICAgICAgIGlmIChldmVudHNbbmFtZV8xXSAmJiBldmVudHNbbmFtZV8xXS5keW5hbWljKSB7XG4gICAgICAgICAgICBkeW5hbWljSGFuZGxlcnMgKz0gXCJcIi5jb25jYXQobmFtZV8xLCBcIixcIikuY29uY2F0KGhhbmRsZXJDb2RlLCBcIixcIik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzdGF0aWNIYW5kbGVycyArPSBcIlxcXCJcIi5jb25jYXQobmFtZV8xLCBcIlxcXCI6XCIpLmNvbmNhdChoYW5kbGVyQ29kZSwgXCIsXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpY0hhbmRsZXJzID0gXCJ7XCIuY29uY2F0KHN0YXRpY0hhbmRsZXJzLnNsaWNlKDAsIC0xKSwgXCJ9XCIpO1xuICAgIGlmIChkeW5hbWljSGFuZGxlcnMpIHtcbiAgICAgICAgcmV0dXJuIHByZWZpeCArIFwiX2QoXCIuY29uY2F0KHN0YXRpY0hhbmRsZXJzLCBcIixbXCIpLmNvbmNhdChkeW5hbWljSGFuZGxlcnMuc2xpY2UoMCwgLTEpLCBcIl0pXCIpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHByZWZpeCArIHN0YXRpY0hhbmRsZXJzO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGdlbkhhbmRsZXIoaGFuZGxlcikge1xuICAgIGlmICghaGFuZGxlcikge1xuICAgICAgICByZXR1cm4gJ2Z1bmN0aW9uKCl7fSc7XG4gICAgfVxuICAgIGlmIChBcnJheS5pc0FycmF5KGhhbmRsZXIpKSB7XG4gICAgICAgIHJldHVybiBcIltcIi5jb25jYXQoaGFuZGxlci5tYXAoZnVuY3Rpb24gKGhhbmRsZXIpIHsgcmV0dXJuIGdlbkhhbmRsZXIoaGFuZGxlcik7IH0pLmpvaW4oJywnKSwgXCJdXCIpO1xuICAgIH1cbiAgICB2YXIgaXNNZXRob2RQYXRoID0gc2ltcGxlUGF0aFJFLnRlc3QoaGFuZGxlci52YWx1ZSk7XG4gICAgdmFyIGlzRnVuY3Rpb25FeHByZXNzaW9uID0gZm5FeHBSRS50ZXN0KGhhbmRsZXIudmFsdWUpO1xuICAgIHZhciBpc0Z1bmN0aW9uSW52b2NhdGlvbiA9IHNpbXBsZVBhdGhSRS50ZXN0KGhhbmRsZXIudmFsdWUucmVwbGFjZShmbkludm9rZVJFLCAnJykpO1xuICAgIGlmICghaGFuZGxlci5tb2RpZmllcnMpIHtcbiAgICAgICAgaWYgKGlzTWV0aG9kUGF0aCB8fCBpc0Z1bmN0aW9uRXhwcmVzc2lvbikge1xuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZXIudmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFwiZnVuY3Rpb24oJGV2ZW50KXtcIi5jb25jYXQoaXNGdW5jdGlvbkludm9jYXRpb24gPyBcInJldHVybiBcIi5jb25jYXQoaGFuZGxlci52YWx1ZSkgOiBoYW5kbGVyLnZhbHVlLCBcIn1cIik7IC8vIGlubGluZSBzdGF0ZW1lbnRcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHZhciBjb2RlID0gJyc7XG4gICAgICAgIHZhciBnZW5Nb2RpZmllckNvZGUgPSAnJztcbiAgICAgICAgdmFyIGtleXMgPSBbXTtcbiAgICAgICAgdmFyIF9sb29wXzEgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICBpZiAobW9kaWZpZXJDb2RlW2tleV0pIHtcbiAgICAgICAgICAgICAgICBnZW5Nb2RpZmllckNvZGUgKz0gbW9kaWZpZXJDb2RlW2tleV07XG4gICAgICAgICAgICAgICAgLy8gbGVmdC9yaWdodFxuICAgICAgICAgICAgICAgIGlmIChrZXlDb2Rlc1trZXldKSB7XG4gICAgICAgICAgICAgICAgICAgIGtleXMucHVzaChrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSA9PT0gJ2V4YWN0Jykge1xuICAgICAgICAgICAgICAgIHZhciBtb2RpZmllcnNfMSA9IGhhbmRsZXIubW9kaWZpZXJzO1xuICAgICAgICAgICAgICAgIGdlbk1vZGlmaWVyQ29kZSArPSBnZW5HdWFyZChbJ2N0cmwnLCAnc2hpZnQnLCAnYWx0JywgJ21ldGEnXVxuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChrZXlNb2RpZmllcikgeyByZXR1cm4gIW1vZGlmaWVyc18xW2tleU1vZGlmaWVyXTsgfSlcbiAgICAgICAgICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAoa2V5TW9kaWZpZXIpIHsgcmV0dXJuIFwiJGV2ZW50LlwiLmNvbmNhdChrZXlNb2RpZmllciwgXCJLZXlcIik7IH0pXG4gICAgICAgICAgICAgICAgICAgIC5qb2luKCd8fCcpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGtleXMucHVzaChrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBmb3IgKHZhciBrZXkgaW4gaGFuZGxlci5tb2RpZmllcnMpIHtcbiAgICAgICAgICAgIF9sb29wXzEoa2V5KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoa2V5cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvZGUgKz0gZ2VuS2V5RmlsdGVyKGtleXMpO1xuICAgICAgICB9XG4gICAgICAgIC8vIE1ha2Ugc3VyZSBtb2RpZmllcnMgbGlrZSBwcmV2ZW50IGFuZCBzdG9wIGdldCBleGVjdXRlZCBhZnRlciBrZXkgZmlsdGVyaW5nXG4gICAgICAgIGlmIChnZW5Nb2RpZmllckNvZGUpIHtcbiAgICAgICAgICAgIGNvZGUgKz0gZ2VuTW9kaWZpZXJDb2RlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBoYW5kbGVyQ29kZSA9IGlzTWV0aG9kUGF0aFxuICAgICAgICAgICAgPyBcInJldHVybiBcIi5jb25jYXQoaGFuZGxlci52YWx1ZSwgXCIuYXBwbHkobnVsbCwgYXJndW1lbnRzKVwiKVxuICAgICAgICAgICAgOiBpc0Z1bmN0aW9uRXhwcmVzc2lvblxuICAgICAgICAgICAgICAgID8gXCJyZXR1cm4gKFwiLmNvbmNhdChoYW5kbGVyLnZhbHVlLCBcIikuYXBwbHkobnVsbCwgYXJndW1lbnRzKVwiKVxuICAgICAgICAgICAgICAgIDogaXNGdW5jdGlvbkludm9jYXRpb25cbiAgICAgICAgICAgICAgICAgICAgPyBcInJldHVybiBcIi5jb25jYXQoaGFuZGxlci52YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgOiBoYW5kbGVyLnZhbHVlO1xuICAgICAgICByZXR1cm4gXCJmdW5jdGlvbigkZXZlbnQpe1wiLmNvbmNhdChjb2RlKS5jb25jYXQoaGFuZGxlckNvZGUsIFwifVwiKTtcbiAgICB9XG59XG5mdW5jdGlvbiBnZW5LZXlGaWx0ZXIoa2V5cykge1xuICAgIHJldHVybiAoXG4gICAgLy8gbWFrZSBzdXJlIHRoZSBrZXkgZmlsdGVycyBvbmx5IGFwcGx5IHRvIEtleWJvYXJkRXZlbnRzXG4gICAgLy8gIzk0NDE6IGNhbid0IHVzZSAna2V5Q29kZScgaW4gJGV2ZW50IGJlY2F1c2UgQ2hyb21lIGF1dG9maWxsIGZpcmVzIGZha2VcbiAgICAvLyBrZXkgZXZlbnRzIHRoYXQgZG8gbm90IGhhdmUga2V5Q29kZSBwcm9wZXJ0eS4uLlxuICAgIFwiaWYoISRldmVudC50eXBlLmluZGV4T2YoJ2tleScpJiZcIiArXG4gICAgICAgIFwiXCIuY29uY2F0KGtleXMubWFwKGdlbkZpbHRlckNvZGUpLmpvaW4oJyYmJyksIFwiKXJldHVybiBudWxsO1wiKSk7XG59XG5mdW5jdGlvbiBnZW5GaWx0ZXJDb2RlKGtleSkge1xuICAgIHZhciBrZXlWYWwgPSBwYXJzZUludChrZXksIDEwKTtcbiAgICBpZiAoa2V5VmFsKSB7XG4gICAgICAgIHJldHVybiBcIiRldmVudC5rZXlDb2RlIT09XCIuY29uY2F0KGtleVZhbCk7XG4gICAgfVxuICAgIHZhciBrZXlDb2RlID0ga2V5Q29kZXNba2V5XTtcbiAgICB2YXIga2V5TmFtZSA9IGtleU5hbWVzW2tleV07XG4gICAgcmV0dXJuIChcIl9rKCRldmVudC5rZXlDb2RlLFwiICtcbiAgICAgICAgXCJcIi5jb25jYXQoSlNPTi5zdHJpbmdpZnkoa2V5KSwgXCIsXCIpICtcbiAgICAgICAgXCJcIi5jb25jYXQoSlNPTi5zdHJpbmdpZnkoa2V5Q29kZSksIFwiLFwiKSArXG4gICAgICAgIFwiJGV2ZW50LmtleSxcIiArXG4gICAgICAgIFwiXCIuY29uY2F0KEpTT04uc3RyaW5naWZ5KGtleU5hbWUpKSArXG4gICAgICAgIFwiKVwiKTtcbn1cblxuZnVuY3Rpb24gb24oZWwsIGRpcikge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGRpci5tb2RpZmllcnMpIHtcbiAgICAgICAgd2FybiQyKFwidi1vbiB3aXRob3V0IGFyZ3VtZW50IGRvZXMgbm90IHN1cHBvcnQgbW9kaWZpZXJzLlwiKTtcbiAgICB9XG4gICAgZWwud3JhcExpc3RlbmVycyA9IGZ1bmN0aW9uIChjb2RlKSB7IHJldHVybiBcIl9nKFwiLmNvbmNhdChjb2RlLCBcIixcIikuY29uY2F0KGRpci52YWx1ZSwgXCIpXCIpOyB9O1xufVxuXG5mdW5jdGlvbiBiaW5kKGVsLCBkaXIpIHtcbiAgICBlbC53cmFwRGF0YSA9IGZ1bmN0aW9uIChjb2RlKSB7XG4gICAgICAgIHJldHVybiBcIl9iKFwiLmNvbmNhdChjb2RlLCBcIiwnXCIpLmNvbmNhdChlbC50YWcsIFwiJyxcIikuY29uY2F0KGRpci52YWx1ZSwgXCIsXCIpLmNvbmNhdChkaXIubW9kaWZpZXJzICYmIGRpci5tb2RpZmllcnMucHJvcCA/ICd0cnVlJyA6ICdmYWxzZScpLmNvbmNhdChkaXIubW9kaWZpZXJzICYmIGRpci5tb2RpZmllcnMuc3luYyA/ICcsdHJ1ZScgOiAnJywgXCIpXCIpO1xuICAgIH07XG59XG5cbnZhciBiYXNlRGlyZWN0aXZlcyA9IHtcbiAgICBvbjogb24sXG4gICAgYmluZDogYmluZCxcbiAgICBjbG9hazogbm9vcFxufTtcblxudmFyIENvZGVnZW5TdGF0ZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBDb2RlZ2VuU3RhdGUob3B0aW9ucykge1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgICB0aGlzLndhcm4gPSBvcHRpb25zLndhcm4gfHwgYmFzZVdhcm47XG4gICAgICAgIHRoaXMudHJhbnNmb3JtcyA9IHBsdWNrTW9kdWxlRnVuY3Rpb24ob3B0aW9ucy5tb2R1bGVzLCAndHJhbnNmb3JtQ29kZScpO1xuICAgICAgICB0aGlzLmRhdGFHZW5GbnMgPSBwbHVja01vZHVsZUZ1bmN0aW9uKG9wdGlvbnMubW9kdWxlcywgJ2dlbkRhdGEnKTtcbiAgICAgICAgdGhpcy5kaXJlY3RpdmVzID0gZXh0ZW5kKGV4dGVuZCh7fSwgYmFzZURpcmVjdGl2ZXMpLCBvcHRpb25zLmRpcmVjdGl2ZXMpO1xuICAgICAgICB2YXIgaXNSZXNlcnZlZFRhZyA9IG9wdGlvbnMuaXNSZXNlcnZlZFRhZyB8fCBubztcbiAgICAgICAgdGhpcy5tYXliZUNvbXBvbmVudCA9IGZ1bmN0aW9uIChlbCkge1xuICAgICAgICAgICAgcmV0dXJuICEhZWwuY29tcG9uZW50IHx8ICFpc1Jlc2VydmVkVGFnKGVsLnRhZyk7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMub25jZUlkID0gMDtcbiAgICAgICAgdGhpcy5zdGF0aWNSZW5kZXJGbnMgPSBbXTtcbiAgICAgICAgdGhpcy5wcmUgPSBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIENvZGVnZW5TdGF0ZTtcbn0oKSk7XG5mdW5jdGlvbiBnZW5lcmF0ZShhc3QsIG9wdGlvbnMpIHtcbiAgICB2YXIgc3RhdGUgPSBuZXcgQ29kZWdlblN0YXRlKG9wdGlvbnMpO1xuICAgIC8vIGZpeCAjMTE0ODMsIFJvb3QgbGV2ZWwgPHNjcmlwdD4gdGFncyBzaG91bGQgbm90IGJlIHJlbmRlcmVkLlxuICAgIHZhciBjb2RlID0gYXN0XG4gICAgICAgID8gYXN0LnRhZyA9PT0gJ3NjcmlwdCdcbiAgICAgICAgICAgID8gJ251bGwnXG4gICAgICAgICAgICA6IGdlbkVsZW1lbnQoYXN0LCBzdGF0ZSlcbiAgICAgICAgOiAnX2MoXCJkaXZcIiknO1xuICAgIHJldHVybiB7XG4gICAgICAgIHJlbmRlcjogXCJ3aXRoKHRoaXMpe3JldHVybiBcIi5jb25jYXQoY29kZSwgXCJ9XCIpLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRlLnN0YXRpY1JlbmRlckZuc1xuICAgIH07XG59XG5mdW5jdGlvbiBnZW5FbGVtZW50KGVsLCBzdGF0ZSkge1xuICAgIGlmIChlbC5wYXJlbnQpIHtcbiAgICAgICAgZWwucHJlID0gZWwucHJlIHx8IGVsLnBhcmVudC5wcmU7XG4gICAgfVxuICAgIGlmIChlbC5zdGF0aWNSb290ICYmICFlbC5zdGF0aWNQcm9jZXNzZWQpIHtcbiAgICAgICAgcmV0dXJuIGdlblN0YXRpYyhlbCwgc3RhdGUpO1xuICAgIH1cbiAgICBlbHNlIGlmIChlbC5vbmNlICYmICFlbC5vbmNlUHJvY2Vzc2VkKSB7XG4gICAgICAgIHJldHVybiBnZW5PbmNlKGVsLCBzdGF0ZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGVsLmZvciAmJiAhZWwuZm9yUHJvY2Vzc2VkKSB7XG4gICAgICAgIHJldHVybiBnZW5Gb3IoZWwsIHN0YXRlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoZWwuaWYgJiYgIWVsLmlmUHJvY2Vzc2VkKSB7XG4gICAgICAgIHJldHVybiBnZW5JZihlbCwgc3RhdGUpO1xuICAgIH1cbiAgICBlbHNlIGlmIChlbC50YWcgPT09ICd0ZW1wbGF0ZScgJiYgIWVsLnNsb3RUYXJnZXQgJiYgIXN0YXRlLnByZSkge1xuICAgICAgICByZXR1cm4gZ2VuQ2hpbGRyZW4oZWwsIHN0YXRlKSB8fCAndm9pZCAwJztcbiAgICB9XG4gICAgZWxzZSBpZiAoZWwudGFnID09PSAnc2xvdCcpIHtcbiAgICAgICAgcmV0dXJuIGdlblNsb3QoZWwsIHN0YXRlKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIC8vIGNvbXBvbmVudCBvciBlbGVtZW50XG4gICAgICAgIHZhciBjb2RlID0gdm9pZCAwO1xuICAgICAgICBpZiAoZWwuY29tcG9uZW50KSB7XG4gICAgICAgICAgICBjb2RlID0gZ2VuQ29tcG9uZW50KGVsLmNvbXBvbmVudCwgZWwsIHN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciBkYXRhID0gdm9pZCAwO1xuICAgICAgICAgICAgdmFyIG1heWJlQ29tcG9uZW50ID0gc3RhdGUubWF5YmVDb21wb25lbnQoZWwpO1xuICAgICAgICAgICAgaWYgKCFlbC5wbGFpbiB8fCAoZWwucHJlICYmIG1heWJlQ29tcG9uZW50KSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBnZW5EYXRhKGVsLCBzdGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgdGFnIFxuICAgICAgICAgICAgLy8gY2hlY2sgaWYgdGhpcyBpcyBhIGNvbXBvbmVudCBpbiA8c2NyaXB0IHNldHVwPlxuICAgICAgICAgICAgPSB2b2lkIDA7XG4gICAgICAgICAgICAvLyBjaGVjayBpZiB0aGlzIGlzIGEgY29tcG9uZW50IGluIDxzY3JpcHQgc2V0dXA+XG4gICAgICAgICAgICB2YXIgYmluZGluZ3MgPSBzdGF0ZS5vcHRpb25zLmJpbmRpbmdzO1xuICAgICAgICAgICAgaWYgKG1heWJlQ29tcG9uZW50ICYmIGJpbmRpbmdzICYmIGJpbmRpbmdzLl9faXNTY3JpcHRTZXR1cCAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICB0YWcgPSBjaGVja0JpbmRpbmdUeXBlKGJpbmRpbmdzLCBlbC50YWcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0YWcpXG4gICAgICAgICAgICAgICAgdGFnID0gXCInXCIuY29uY2F0KGVsLnRhZywgXCInXCIpO1xuICAgICAgICAgICAgdmFyIGNoaWxkcmVuID0gZWwuaW5saW5lVGVtcGxhdGUgPyBudWxsIDogZ2VuQ2hpbGRyZW4oZWwsIHN0YXRlLCB0cnVlKTtcbiAgICAgICAgICAgIGNvZGUgPSBcIl9jKFwiLmNvbmNhdCh0YWcpLmNvbmNhdChkYXRhID8gXCIsXCIuY29uY2F0KGRhdGEpIDogJycgLy8gZGF0YVxuICAgICAgICAgICAgKS5jb25jYXQoY2hpbGRyZW4gPyBcIixcIi5jb25jYXQoY2hpbGRyZW4pIDogJycgLy8gY2hpbGRyZW5cbiAgICAgICAgICAgICwgXCIpXCIpO1xuICAgICAgICB9XG4gICAgICAgIC8vIG1vZHVsZSB0cmFuc2Zvcm1zXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RhdGUudHJhbnNmb3Jtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29kZSA9IHN0YXRlLnRyYW5zZm9ybXNbaV0oZWwsIGNvZGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb2RlO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGNoZWNrQmluZGluZ1R5cGUoYmluZGluZ3MsIGtleSkge1xuICAgIHZhciBjYW1lbE5hbWUgPSBjYW1lbGl6ZShrZXkpO1xuICAgIHZhciBQYXNjYWxOYW1lID0gY2FwaXRhbGl6ZShjYW1lbE5hbWUpO1xuICAgIHZhciBjaGVja1R5cGUgPSBmdW5jdGlvbiAodHlwZSkge1xuICAgICAgICBpZiAoYmluZGluZ3Nba2V5XSA9PT0gdHlwZSkge1xuICAgICAgICAgICAgcmV0dXJuIGtleTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYmluZGluZ3NbY2FtZWxOYW1lXSA9PT0gdHlwZSkge1xuICAgICAgICAgICAgcmV0dXJuIGNhbWVsTmFtZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYmluZGluZ3NbUGFzY2FsTmFtZV0gPT09IHR5cGUpIHtcbiAgICAgICAgICAgIHJldHVybiBQYXNjYWxOYW1lO1xuICAgICAgICB9XG4gICAgfTtcbiAgICB2YXIgZnJvbUNvbnN0ID0gY2hlY2tUeXBlKFwic2V0dXAtY29uc3RcIiAvKiBCaW5kaW5nVHlwZXMuU0VUVVBfQ09OU1QgKi8pIHx8XG4gICAgICAgIGNoZWNrVHlwZShcInNldHVwLXJlYWN0aXZlLWNvbnN0XCIgLyogQmluZGluZ1R5cGVzLlNFVFVQX1JFQUNUSVZFX0NPTlNUICovKTtcbiAgICBpZiAoZnJvbUNvbnN0KSB7XG4gICAgICAgIHJldHVybiBmcm9tQ29uc3Q7XG4gICAgfVxuICAgIHZhciBmcm9tTWF5YmVSZWYgPSBjaGVja1R5cGUoXCJzZXR1cC1sZXRcIiAvKiBCaW5kaW5nVHlwZXMuU0VUVVBfTEVUICovKSB8fFxuICAgICAgICBjaGVja1R5cGUoXCJzZXR1cC1yZWZcIiAvKiBCaW5kaW5nVHlwZXMuU0VUVVBfUkVGICovKSB8fFxuICAgICAgICBjaGVja1R5cGUoXCJzZXR1cC1tYXliZS1yZWZcIiAvKiBCaW5kaW5nVHlwZXMuU0VUVVBfTUFZQkVfUkVGICovKTtcbiAgICBpZiAoZnJvbU1heWJlUmVmKSB7XG4gICAgICAgIHJldHVybiBmcm9tTWF5YmVSZWY7XG4gICAgfVxufVxuLy8gaG9pc3Qgc3RhdGljIHN1Yi10cmVlcyBvdXRcbmZ1bmN0aW9uIGdlblN0YXRpYyhlbCwgc3RhdGUpIHtcbiAgICBlbC5zdGF0aWNQcm9jZXNzZWQgPSB0cnVlO1xuICAgIC8vIFNvbWUgZWxlbWVudHMgKHRlbXBsYXRlcykgbmVlZCB0byBiZWhhdmUgZGlmZmVyZW50bHkgaW5zaWRlIG9mIGEgdi1wcmVcbiAgICAvLyBub2RlLiAgQWxsIHByZSBub2RlcyBhcmUgc3RhdGljIHJvb3RzLCBzbyB3ZSBjYW4gdXNlIHRoaXMgYXMgYSBsb2NhdGlvbiB0b1xuICAgIC8vIHdyYXAgYSBzdGF0ZSBjaGFuZ2UgYW5kIHJlc2V0IGl0IHVwb24gZXhpdGluZyB0aGUgcHJlIG5vZGUuXG4gICAgdmFyIG9yaWdpbmFsUHJlU3RhdGUgPSBzdGF0ZS5wcmU7XG4gICAgaWYgKGVsLnByZSkge1xuICAgICAgICBzdGF0ZS5wcmUgPSBlbC5wcmU7XG4gICAgfVxuICAgIHN0YXRlLnN0YXRpY1JlbmRlckZucy5wdXNoKFwid2l0aCh0aGlzKXtyZXR1cm4gXCIuY29uY2F0KGdlbkVsZW1lbnQoZWwsIHN0YXRlKSwgXCJ9XCIpKTtcbiAgICBzdGF0ZS5wcmUgPSBvcmlnaW5hbFByZVN0YXRlO1xuICAgIHJldHVybiBcIl9tKFwiLmNvbmNhdChzdGF0ZS5zdGF0aWNSZW5kZXJGbnMubGVuZ3RoIC0gMSkuY29uY2F0KGVsLnN0YXRpY0luRm9yID8gJyx0cnVlJyA6ICcnLCBcIilcIik7XG59XG4vLyB2LW9uY2VcbmZ1bmN0aW9uIGdlbk9uY2UoZWwsIHN0YXRlKSB7XG4gICAgZWwub25jZVByb2Nlc3NlZCA9IHRydWU7XG4gICAgaWYgKGVsLmlmICYmICFlbC5pZlByb2Nlc3NlZCkge1xuICAgICAgICByZXR1cm4gZ2VuSWYoZWwsIHN0YXRlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoZWwuc3RhdGljSW5Gb3IpIHtcbiAgICAgICAgdmFyIGtleSA9ICcnO1xuICAgICAgICB2YXIgcGFyZW50XzEgPSBlbC5wYXJlbnQ7XG4gICAgICAgIHdoaWxlIChwYXJlbnRfMSkge1xuICAgICAgICAgICAgaWYgKHBhcmVudF8xLmZvcikge1xuICAgICAgICAgICAgICAgIGtleSA9IHBhcmVudF8xLmtleTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhcmVudF8xID0gcGFyZW50XzEucGFyZW50O1xuICAgICAgICB9XG4gICAgICAgIGlmICgha2V5KSB7XG4gICAgICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgICAgICAgICAgICAgc3RhdGUud2FybihcInYtb25jZSBjYW4gb25seSBiZSB1c2VkIGluc2lkZSB2LWZvciB0aGF0IGlzIGtleWVkLiBcIiwgZWwucmF3QXR0cnNNYXBbJ3Ytb25jZSddKTtcbiAgICAgICAgICAgIHJldHVybiBnZW5FbGVtZW50KGVsLCBzdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFwiX28oXCIuY29uY2F0KGdlbkVsZW1lbnQoZWwsIHN0YXRlKSwgXCIsXCIpLmNvbmNhdChzdGF0ZS5vbmNlSWQrKywgXCIsXCIpLmNvbmNhdChrZXksIFwiKVwiKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBnZW5TdGF0aWMoZWwsIHN0YXRlKTtcbiAgICB9XG59XG5mdW5jdGlvbiBnZW5JZihlbCwgc3RhdGUsIGFsdEdlbiwgYWx0RW1wdHkpIHtcbiAgICBlbC5pZlByb2Nlc3NlZCA9IHRydWU7IC8vIGF2b2lkIHJlY3Vyc2lvblxuICAgIHJldHVybiBnZW5JZkNvbmRpdGlvbnMoZWwuaWZDb25kaXRpb25zLnNsaWNlKCksIHN0YXRlLCBhbHRHZW4sIGFsdEVtcHR5KTtcbn1cbmZ1bmN0aW9uIGdlbklmQ29uZGl0aW9ucyhjb25kaXRpb25zLCBzdGF0ZSwgYWx0R2VuLCBhbHRFbXB0eSkge1xuICAgIGlmICghY29uZGl0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGFsdEVtcHR5IHx8ICdfZSgpJztcbiAgICB9XG4gICAgdmFyIGNvbmRpdGlvbiA9IGNvbmRpdGlvbnMuc2hpZnQoKTtcbiAgICBpZiAoY29uZGl0aW9uLmV4cCkge1xuICAgICAgICByZXR1cm4gXCIoXCIuY29uY2F0KGNvbmRpdGlvbi5leHAsIFwiKT9cIikuY29uY2F0KGdlblRlcm5hcnlFeHAoY29uZGl0aW9uLmJsb2NrKSwgXCI6XCIpLmNvbmNhdChnZW5JZkNvbmRpdGlvbnMoY29uZGl0aW9ucywgc3RhdGUsIGFsdEdlbiwgYWx0RW1wdHkpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBcIlwiLmNvbmNhdChnZW5UZXJuYXJ5RXhwKGNvbmRpdGlvbi5ibG9jaykpO1xuICAgIH1cbiAgICAvLyB2LWlmIHdpdGggdi1vbmNlIHNob3VsZCBnZW5lcmF0ZSBjb2RlIGxpa2UgKGEpP19tKDApOl9tKDEpXG4gICAgZnVuY3Rpb24gZ2VuVGVybmFyeUV4cChlbCkge1xuICAgICAgICByZXR1cm4gYWx0R2VuXG4gICAgICAgICAgICA/IGFsdEdlbihlbCwgc3RhdGUpXG4gICAgICAgICAgICA6IGVsLm9uY2VcbiAgICAgICAgICAgICAgICA/IGdlbk9uY2UoZWwsIHN0YXRlKVxuICAgICAgICAgICAgICAgIDogZ2VuRWxlbWVudChlbCwgc3RhdGUpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGdlbkZvcihlbCwgc3RhdGUsIGFsdEdlbiwgYWx0SGVscGVyKSB7XG4gICAgdmFyIGV4cCA9IGVsLmZvcjtcbiAgICB2YXIgYWxpYXMgPSBlbC5hbGlhcztcbiAgICB2YXIgaXRlcmF0b3IxID0gZWwuaXRlcmF0b3IxID8gXCIsXCIuY29uY2F0KGVsLml0ZXJhdG9yMSkgOiAnJztcbiAgICB2YXIgaXRlcmF0b3IyID0gZWwuaXRlcmF0b3IyID8gXCIsXCIuY29uY2F0KGVsLml0ZXJhdG9yMikgOiAnJztcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgICAgICBzdGF0ZS5tYXliZUNvbXBvbmVudChlbCkgJiZcbiAgICAgICAgZWwudGFnICE9PSAnc2xvdCcgJiZcbiAgICAgICAgZWwudGFnICE9PSAndGVtcGxhdGUnICYmXG4gICAgICAgICFlbC5rZXkpIHtcbiAgICAgICAgc3RhdGUud2FybihcIjxcIi5jb25jYXQoZWwudGFnLCBcIiB2LWZvcj1cXFwiXCIpLmNvbmNhdChhbGlhcywgXCIgaW4gXCIpLmNvbmNhdChleHAsIFwiXFxcIj46IGNvbXBvbmVudCBsaXN0cyByZW5kZXJlZCB3aXRoIFwiKSArXG4gICAgICAgICAgICBcInYtZm9yIHNob3VsZCBoYXZlIGV4cGxpY2l0IGtleXMuIFwiICtcbiAgICAgICAgICAgIFwiU2VlIGh0dHBzOi8vdjIudnVlanMub3JnL3YyL2d1aWRlL2xpc3QuaHRtbCNrZXkgZm9yIG1vcmUgaW5mby5cIiwgZWwucmF3QXR0cnNNYXBbJ3YtZm9yJ10sIHRydWUgLyogdGlwICovKTtcbiAgICB9XG4gICAgZWwuZm9yUHJvY2Vzc2VkID0gdHJ1ZTsgLy8gYXZvaWQgcmVjdXJzaW9uXG4gICAgcmV0dXJuIChcIlwiLmNvbmNhdChhbHRIZWxwZXIgfHwgJ19sJywgXCIoKFwiKS5jb25jYXQoZXhwLCBcIiksXCIpICtcbiAgICAgICAgXCJmdW5jdGlvbihcIi5jb25jYXQoYWxpYXMpLmNvbmNhdChpdGVyYXRvcjEpLmNvbmNhdChpdGVyYXRvcjIsIFwiKXtcIikgK1xuICAgICAgICBcInJldHVybiBcIi5jb25jYXQoKGFsdEdlbiB8fCBnZW5FbGVtZW50KShlbCwgc3RhdGUpKSArXG4gICAgICAgICd9KScpO1xufVxuZnVuY3Rpb24gZ2VuRGF0YShlbCwgc3RhdGUpIHtcbiAgICB2YXIgZGF0YSA9ICd7JztcbiAgICAvLyBkaXJlY3RpdmVzIGZpcnN0LlxuICAgIC8vIGRpcmVjdGl2ZXMgbWF5IG11dGF0ZSB0aGUgZWwncyBvdGhlciBwcm9wZXJ0aWVzIGJlZm9yZSB0aGV5IGFyZSBnZW5lcmF0ZWQuXG4gICAgdmFyIGRpcnMgPSBnZW5EaXJlY3RpdmVzKGVsLCBzdGF0ZSk7XG4gICAgaWYgKGRpcnMpXG4gICAgICAgIGRhdGEgKz0gZGlycyArICcsJztcbiAgICAvLyBrZXlcbiAgICBpZiAoZWwua2V5KSB7XG4gICAgICAgIGRhdGEgKz0gXCJrZXk6XCIuY29uY2F0KGVsLmtleSwgXCIsXCIpO1xuICAgIH1cbiAgICAvLyByZWZcbiAgICBpZiAoZWwucmVmKSB7XG4gICAgICAgIGRhdGEgKz0gXCJyZWY6XCIuY29uY2F0KGVsLnJlZiwgXCIsXCIpO1xuICAgIH1cbiAgICBpZiAoZWwucmVmSW5Gb3IpIHtcbiAgICAgICAgZGF0YSArPSBcInJlZkluRm9yOnRydWUsXCI7XG4gICAgfVxuICAgIC8vIHByZVxuICAgIGlmIChlbC5wcmUpIHtcbiAgICAgICAgZGF0YSArPSBcInByZTp0cnVlLFwiO1xuICAgIH1cbiAgICAvLyByZWNvcmQgb3JpZ2luYWwgdGFnIG5hbWUgZm9yIGNvbXBvbmVudHMgdXNpbmcgXCJpc1wiIGF0dHJpYnV0ZVxuICAgIGlmIChlbC5jb21wb25lbnQpIHtcbiAgICAgICAgZGF0YSArPSBcInRhZzpcXFwiXCIuY29uY2F0KGVsLnRhZywgXCJcXFwiLFwiKTtcbiAgICB9XG4gICAgLy8gbW9kdWxlIGRhdGEgZ2VuZXJhdGlvbiBmdW5jdGlvbnNcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0YXRlLmRhdGFHZW5GbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZGF0YSArPSBzdGF0ZS5kYXRhR2VuRm5zW2ldKGVsKTtcbiAgICB9XG4gICAgLy8gYXR0cmlidXRlc1xuICAgIGlmIChlbC5hdHRycykge1xuICAgICAgICBkYXRhICs9IFwiYXR0cnM6XCIuY29uY2F0KGdlblByb3BzKGVsLmF0dHJzKSwgXCIsXCIpO1xuICAgIH1cbiAgICAvLyBET00gcHJvcHNcbiAgICBpZiAoZWwucHJvcHMpIHtcbiAgICAgICAgZGF0YSArPSBcImRvbVByb3BzOlwiLmNvbmNhdChnZW5Qcm9wcyhlbC5wcm9wcyksIFwiLFwiKTtcbiAgICB9XG4gICAgLy8gZXZlbnQgaGFuZGxlcnNcbiAgICBpZiAoZWwuZXZlbnRzKSB7XG4gICAgICAgIGRhdGEgKz0gXCJcIi5jb25jYXQoZ2VuSGFuZGxlcnMoZWwuZXZlbnRzLCBmYWxzZSksIFwiLFwiKTtcbiAgICB9XG4gICAgaWYgKGVsLm5hdGl2ZUV2ZW50cykge1xuICAgICAgICBkYXRhICs9IFwiXCIuY29uY2F0KGdlbkhhbmRsZXJzKGVsLm5hdGl2ZUV2ZW50cywgdHJ1ZSksIFwiLFwiKTtcbiAgICB9XG4gICAgLy8gc2xvdCB0YXJnZXRcbiAgICAvLyBvbmx5IGZvciBub24tc2NvcGVkIHNsb3RzXG4gICAgaWYgKGVsLnNsb3RUYXJnZXQgJiYgIWVsLnNsb3RTY29wZSkge1xuICAgICAgICBkYXRhICs9IFwic2xvdDpcIi5jb25jYXQoZWwuc2xvdFRhcmdldCwgXCIsXCIpO1xuICAgIH1cbiAgICAvLyBzY29wZWQgc2xvdHNcbiAgICBpZiAoZWwuc2NvcGVkU2xvdHMpIHtcbiAgICAgICAgZGF0YSArPSBcIlwiLmNvbmNhdChnZW5TY29wZWRTbG90cyhlbCwgZWwuc2NvcGVkU2xvdHMsIHN0YXRlKSwgXCIsXCIpO1xuICAgIH1cbiAgICAvLyBjb21wb25lbnQgdi1tb2RlbFxuICAgIGlmIChlbC5tb2RlbCkge1xuICAgICAgICBkYXRhICs9IFwibW9kZWw6e3ZhbHVlOlwiLmNvbmNhdChlbC5tb2RlbC52YWx1ZSwgXCIsY2FsbGJhY2s6XCIpLmNvbmNhdChlbC5tb2RlbC5jYWxsYmFjaywgXCIsZXhwcmVzc2lvbjpcIikuY29uY2F0KGVsLm1vZGVsLmV4cHJlc3Npb24sIFwifSxcIik7XG4gICAgfVxuICAgIC8vIGlubGluZS10ZW1wbGF0ZVxuICAgIGlmIChlbC5pbmxpbmVUZW1wbGF0ZSkge1xuICAgICAgICB2YXIgaW5saW5lVGVtcGxhdGUgPSBnZW5JbmxpbmVUZW1wbGF0ZShlbCwgc3RhdGUpO1xuICAgICAgICBpZiAoaW5saW5lVGVtcGxhdGUpIHtcbiAgICAgICAgICAgIGRhdGEgKz0gXCJcIi5jb25jYXQoaW5saW5lVGVtcGxhdGUsIFwiLFwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBkYXRhID0gZGF0YS5yZXBsYWNlKC8sJC8sICcnKSArICd9JztcbiAgICAvLyB2LWJpbmQgZHluYW1pYyBhcmd1bWVudCB3cmFwXG4gICAgLy8gdi1iaW5kIHdpdGggZHluYW1pYyBhcmd1bWVudHMgbXVzdCBiZSBhcHBsaWVkIHVzaW5nIHRoZSBzYW1lIHYtYmluZCBvYmplY3RcbiAgICAvLyBtZXJnZSBoZWxwZXIgc28gdGhhdCBjbGFzcy9zdHlsZS9tdXN0VXNlUHJvcCBhdHRycyBhcmUgaGFuZGxlZCBjb3JyZWN0bHkuXG4gICAgaWYgKGVsLmR5bmFtaWNBdHRycykge1xuICAgICAgICBkYXRhID0gXCJfYihcIi5jb25jYXQoZGF0YSwgXCIsXFxcIlwiKS5jb25jYXQoZWwudGFnLCBcIlxcXCIsXCIpLmNvbmNhdChnZW5Qcm9wcyhlbC5keW5hbWljQXR0cnMpLCBcIilcIik7XG4gICAgfVxuICAgIC8vIHYtYmluZCBkYXRhIHdyYXBcbiAgICBpZiAoZWwud3JhcERhdGEpIHtcbiAgICAgICAgZGF0YSA9IGVsLndyYXBEYXRhKGRhdGEpO1xuICAgIH1cbiAgICAvLyB2LW9uIGRhdGEgd3JhcFxuICAgIGlmIChlbC53cmFwTGlzdGVuZXJzKSB7XG4gICAgICAgIGRhdGEgPSBlbC53cmFwTGlzdGVuZXJzKGRhdGEpO1xuICAgIH1cbiAgICByZXR1cm4gZGF0YTtcbn1cbmZ1bmN0aW9uIGdlbkRpcmVjdGl2ZXMoZWwsIHN0YXRlKSB7XG4gICAgdmFyIGRpcnMgPSBlbC5kaXJlY3RpdmVzO1xuICAgIGlmICghZGlycylcbiAgICAgICAgcmV0dXJuO1xuICAgIHZhciByZXMgPSAnZGlyZWN0aXZlczpbJztcbiAgICB2YXIgaGFzUnVudGltZSA9IGZhbHNlO1xuICAgIHZhciBpLCBsLCBkaXIsIG5lZWRSdW50aW1lO1xuICAgIGZvciAoaSA9IDAsIGwgPSBkaXJzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICBkaXIgPSBkaXJzW2ldO1xuICAgICAgICBuZWVkUnVudGltZSA9IHRydWU7XG4gICAgICAgIHZhciBnZW4gPSBzdGF0ZS5kaXJlY3RpdmVzW2Rpci5uYW1lXTtcbiAgICAgICAgaWYgKGdlbikge1xuICAgICAgICAgICAgLy8gY29tcGlsZS10aW1lIGRpcmVjdGl2ZSB0aGF0IG1hbmlwdWxhdGVzIEFTVC5cbiAgICAgICAgICAgIC8vIHJldHVybnMgdHJ1ZSBpZiBpdCBhbHNvIG5lZWRzIGEgcnVudGltZSBjb3VudGVycGFydC5cbiAgICAgICAgICAgIG5lZWRSdW50aW1lID0gISFnZW4oZWwsIGRpciwgc3RhdGUud2Fybik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5lZWRSdW50aW1lKSB7XG4gICAgICAgICAgICBoYXNSdW50aW1lID0gdHJ1ZTtcbiAgICAgICAgICAgIHJlcyArPSBcIntuYW1lOlxcXCJcIi5jb25jYXQoZGlyLm5hbWUsIFwiXFxcIixyYXdOYW1lOlxcXCJcIikuY29uY2F0KGRpci5yYXdOYW1lLCBcIlxcXCJcIikuY29uY2F0KGRpci52YWx1ZVxuICAgICAgICAgICAgICAgID8gXCIsdmFsdWU6KFwiLmNvbmNhdChkaXIudmFsdWUsIFwiKSxleHByZXNzaW9uOlwiKS5jb25jYXQoSlNPTi5zdHJpbmdpZnkoZGlyLnZhbHVlKSlcbiAgICAgICAgICAgICAgICA6ICcnKS5jb25jYXQoZGlyLmFyZyA/IFwiLGFyZzpcIi5jb25jYXQoZGlyLmlzRHluYW1pY0FyZyA/IGRpci5hcmcgOiBcIlxcXCJcIi5jb25jYXQoZGlyLmFyZywgXCJcXFwiXCIpKSA6ICcnKS5jb25jYXQoZGlyLm1vZGlmaWVycyA/IFwiLG1vZGlmaWVyczpcIi5jb25jYXQoSlNPTi5zdHJpbmdpZnkoZGlyLm1vZGlmaWVycykpIDogJycsIFwifSxcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGhhc1J1bnRpbWUpIHtcbiAgICAgICAgcmV0dXJuIHJlcy5zbGljZSgwLCAtMSkgKyAnXSc7XG4gICAgfVxufVxuZnVuY3Rpb24gZ2VuSW5saW5lVGVtcGxhdGUoZWwsIHN0YXRlKSB7XG4gICAgdmFyIGFzdCA9IGVsLmNoaWxkcmVuWzBdO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIChlbC5jaGlsZHJlbi5sZW5ndGggIT09IDEgfHwgYXN0LnR5cGUgIT09IDEpKSB7XG4gICAgICAgIHN0YXRlLndhcm4oJ0lubGluZS10ZW1wbGF0ZSBjb21wb25lbnRzIG11c3QgaGF2ZSBleGFjdGx5IG9uZSBjaGlsZCBlbGVtZW50LicsIHsgc3RhcnQ6IGVsLnN0YXJ0IH0pO1xuICAgIH1cbiAgICBpZiAoYXN0ICYmIGFzdC50eXBlID09PSAxKSB7XG4gICAgICAgIHZhciBpbmxpbmVSZW5kZXJGbnMgPSBnZW5lcmF0ZShhc3QsIHN0YXRlLm9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gXCJpbmxpbmVUZW1wbGF0ZTp7cmVuZGVyOmZ1bmN0aW9uKCl7XCIuY29uY2F0KGlubGluZVJlbmRlckZucy5yZW5kZXIsIFwifSxzdGF0aWNSZW5kZXJGbnM6W1wiKS5jb25jYXQoaW5saW5lUmVuZGVyRm5zLnN0YXRpY1JlbmRlckZuc1xuICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAoY29kZSkgeyByZXR1cm4gXCJmdW5jdGlvbigpe1wiLmNvbmNhdChjb2RlLCBcIn1cIik7IH0pXG4gICAgICAgICAgICAuam9pbignLCcpLCBcIl19XCIpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGdlblNjb3BlZFNsb3RzKGVsLCBzbG90cywgc3RhdGUpIHtcbiAgICAvLyBieSBkZWZhdWx0IHNjb3BlZCBzbG90cyBhcmUgY29uc2lkZXJlZCBcInN0YWJsZVwiLCB0aGlzIGFsbG93cyBjaGlsZFxuICAgIC8vIGNvbXBvbmVudHMgd2l0aCBvbmx5IHNjb3BlZCBzbG90cyB0byBza2lwIGZvcmNlZCB1cGRhdGVzIGZyb20gcGFyZW50LlxuICAgIC8vIGJ1dCBpbiBzb21lIGNhc2VzIHdlIGhhdmUgdG8gYmFpbC1vdXQgb2YgdGhpcyBvcHRpbWl6YXRpb25cbiAgICAvLyBmb3IgZXhhbXBsZSBpZiB0aGUgc2xvdCBjb250YWlucyBkeW5hbWljIG5hbWVzLCBoYXMgdi1pZiBvciB2LWZvciBvbiB0aGVtLi4uXG4gICAgdmFyIG5lZWRzRm9yY2VVcGRhdGUgPSBlbC5mb3IgfHxcbiAgICAgICAgT2JqZWN0LmtleXMoc2xvdHMpLnNvbWUoZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgdmFyIHNsb3QgPSBzbG90c1trZXldO1xuICAgICAgICAgICAgcmV0dXJuIChzbG90LnNsb3RUYXJnZXREeW5hbWljIHx8IHNsb3QuaWYgfHwgc2xvdC5mb3IgfHwgY29udGFpbnNTbG90Q2hpbGQoc2xvdCkgLy8gaXMgcGFzc2luZyBkb3duIHNsb3QgZnJvbSBwYXJlbnQgd2hpY2ggbWF5IGJlIGR5bmFtaWNcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgIC8vICM5NTM0OiBpZiBhIGNvbXBvbmVudCB3aXRoIHNjb3BlZCBzbG90cyBpcyBpbnNpZGUgYSBjb25kaXRpb25hbCBicmFuY2gsXG4gICAgLy8gaXQncyBwb3NzaWJsZSBmb3IgdGhlIHNhbWUgY29tcG9uZW50IHRvIGJlIHJldXNlZCBidXQgd2l0aCBkaWZmZXJlbnRcbiAgICAvLyBjb21waWxlZCBzbG90IGNvbnRlbnQuIFRvIGF2b2lkIHRoYXQsIHdlIGdlbmVyYXRlIGEgdW5pcXVlIGtleSBiYXNlZCBvblxuICAgIC8vIHRoZSBnZW5lcmF0ZWQgY29kZSBvZiBhbGwgdGhlIHNsb3QgY29udGVudHMuXG4gICAgdmFyIG5lZWRzS2V5ID0gISFlbC5pZjtcbiAgICAvLyBPUiB3aGVuIGl0IGlzIGluc2lkZSBhbm90aGVyIHNjb3BlZCBzbG90IG9yIHYtZm9yICh0aGUgcmVhY3Rpdml0eSBtYXkgYmVcbiAgICAvLyBkaXNjb25uZWN0ZWQgZHVlIHRvIHRoZSBpbnRlcm1lZGlhdGUgc2NvcGUgdmFyaWFibGUpXG4gICAgLy8gIzk0MzgsICM5NTA2XG4gICAgLy8gVE9ETzogdGhpcyBjYW4gYmUgZnVydGhlciBvcHRpbWl6ZWQgYnkgcHJvcGVybHkgYW5hbHl6aW5nIGluLXNjb3BlIGJpbmRpbmdzXG4gICAgLy8gYW5kIHNraXAgZm9yY2UgdXBkYXRpbmcgb25lcyB0aGF0IGRvIG5vdCBhY3R1YWxseSB1c2Ugc2NvcGUgdmFyaWFibGVzLlxuICAgIGlmICghbmVlZHNGb3JjZVVwZGF0ZSkge1xuICAgICAgICB2YXIgcGFyZW50XzIgPSBlbC5wYXJlbnQ7XG4gICAgICAgIHdoaWxlIChwYXJlbnRfMikge1xuICAgICAgICAgICAgaWYgKChwYXJlbnRfMi5zbG90U2NvcGUgJiYgcGFyZW50XzIuc2xvdFNjb3BlICE9PSBlbXB0eVNsb3RTY29wZVRva2VuKSB8fFxuICAgICAgICAgICAgICAgIHBhcmVudF8yLmZvcikge1xuICAgICAgICAgICAgICAgIG5lZWRzRm9yY2VVcGRhdGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHBhcmVudF8yLmlmKSB7XG4gICAgICAgICAgICAgICAgbmVlZHNLZXkgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGFyZW50XzIgPSBwYXJlbnRfMi5wYXJlbnQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmFyIGdlbmVyYXRlZFNsb3RzID0gT2JqZWN0LmtleXMoc2xvdHMpXG4gICAgICAgIC5tYXAoZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gZ2VuU2NvcGVkU2xvdChzbG90c1trZXldLCBzdGF0ZSk7IH0pXG4gICAgICAgIC5qb2luKCcsJyk7XG4gICAgcmV0dXJuIFwic2NvcGVkU2xvdHM6X3UoW1wiLmNvbmNhdChnZW5lcmF0ZWRTbG90cywgXCJdXCIpLmNvbmNhdChuZWVkc0ZvcmNlVXBkYXRlID8gXCIsbnVsbCx0cnVlXCIgOiBcIlwiKS5jb25jYXQoIW5lZWRzRm9yY2VVcGRhdGUgJiYgbmVlZHNLZXkgPyBcIixudWxsLGZhbHNlLFwiLmNvbmNhdChoYXNoKGdlbmVyYXRlZFNsb3RzKSkgOiBcIlwiLCBcIilcIik7XG59XG5mdW5jdGlvbiBoYXNoKHN0cikge1xuICAgIHZhciBoYXNoID0gNTM4MTtcbiAgICB2YXIgaSA9IHN0ci5sZW5ndGg7XG4gICAgd2hpbGUgKGkpIHtcbiAgICAgICAgaGFzaCA9IChoYXNoICogMzMpIF4gc3RyLmNoYXJDb2RlQXQoLS1pKTtcbiAgICB9XG4gICAgcmV0dXJuIGhhc2ggPj4+IDA7XG59XG5mdW5jdGlvbiBjb250YWluc1Nsb3RDaGlsZChlbCkge1xuICAgIGlmIChlbC50eXBlID09PSAxKSB7XG4gICAgICAgIGlmIChlbC50YWcgPT09ICdzbG90Jykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVsLmNoaWxkcmVuLnNvbWUoY29udGFpbnNTbG90Q2hpbGQpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBnZW5TY29wZWRTbG90KGVsLCBzdGF0ZSkge1xuICAgIHZhciBpc0xlZ2FjeVN5bnRheCA9IGVsLmF0dHJzTWFwWydzbG90LXNjb3BlJ107XG4gICAgaWYgKGVsLmlmICYmICFlbC5pZlByb2Nlc3NlZCAmJiAhaXNMZWdhY3lTeW50YXgpIHtcbiAgICAgICAgcmV0dXJuIGdlbklmKGVsLCBzdGF0ZSwgZ2VuU2NvcGVkU2xvdCwgXCJudWxsXCIpO1xuICAgIH1cbiAgICBpZiAoZWwuZm9yICYmICFlbC5mb3JQcm9jZXNzZWQpIHtcbiAgICAgICAgcmV0dXJuIGdlbkZvcihlbCwgc3RhdGUsIGdlblNjb3BlZFNsb3QpO1xuICAgIH1cbiAgICB2YXIgc2xvdFNjb3BlID0gZWwuc2xvdFNjb3BlID09PSBlbXB0eVNsb3RTY29wZVRva2VuID8gXCJcIiA6IFN0cmluZyhlbC5zbG90U2NvcGUpO1xuICAgIHZhciBmbiA9IFwiZnVuY3Rpb24oXCIuY29uY2F0KHNsb3RTY29wZSwgXCIpe1wiKSArXG4gICAgICAgIFwicmV0dXJuIFwiLmNvbmNhdChlbC50YWcgPT09ICd0ZW1wbGF0ZSdcbiAgICAgICAgICAgID8gZWwuaWYgJiYgaXNMZWdhY3lTeW50YXhcbiAgICAgICAgICAgICAgICA/IFwiKFwiLmNvbmNhdChlbC5pZiwgXCIpP1wiKS5jb25jYXQoZ2VuQ2hpbGRyZW4oZWwsIHN0YXRlKSB8fCAndW5kZWZpbmVkJywgXCI6dW5kZWZpbmVkXCIpXG4gICAgICAgICAgICAgICAgOiBnZW5DaGlsZHJlbihlbCwgc3RhdGUpIHx8ICd1bmRlZmluZWQnXG4gICAgICAgICAgICA6IGdlbkVsZW1lbnQoZWwsIHN0YXRlKSwgXCJ9XCIpO1xuICAgIC8vIHJldmVyc2UgcHJveHkgdi1zbG90IHdpdGhvdXQgc2NvcGUgb24gdGhpcy4kc2xvdHNcbiAgICB2YXIgcmV2ZXJzZVByb3h5ID0gc2xvdFNjb3BlID8gXCJcIiA6IFwiLHByb3h5OnRydWVcIjtcbiAgICByZXR1cm4gXCJ7a2V5OlwiLmNvbmNhdChlbC5zbG90VGFyZ2V0IHx8IFwiXFxcImRlZmF1bHRcXFwiXCIsIFwiLGZuOlwiKS5jb25jYXQoZm4pLmNvbmNhdChyZXZlcnNlUHJveHksIFwifVwiKTtcbn1cbmZ1bmN0aW9uIGdlbkNoaWxkcmVuKGVsLCBzdGF0ZSwgY2hlY2tTa2lwLCBhbHRHZW5FbGVtZW50LCBhbHRHZW5Ob2RlKSB7XG4gICAgdmFyIGNoaWxkcmVuID0gZWwuY2hpbGRyZW47XG4gICAgaWYgKGNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICB2YXIgZWxfMSA9IGNoaWxkcmVuWzBdO1xuICAgICAgICAvLyBvcHRpbWl6ZSBzaW5nbGUgdi1mb3JcbiAgICAgICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICAgICAgZWxfMS5mb3IgJiZcbiAgICAgICAgICAgIGVsXzEudGFnICE9PSAndGVtcGxhdGUnICYmXG4gICAgICAgICAgICBlbF8xLnRhZyAhPT0gJ3Nsb3QnKSB7XG4gICAgICAgICAgICB2YXIgbm9ybWFsaXphdGlvblR5cGVfMSA9IGNoZWNrU2tpcFxuICAgICAgICAgICAgICAgID8gc3RhdGUubWF5YmVDb21wb25lbnQoZWxfMSlcbiAgICAgICAgICAgICAgICAgICAgPyBcIiwxXCJcbiAgICAgICAgICAgICAgICAgICAgOiBcIiwwXCJcbiAgICAgICAgICAgICAgICA6IFwiXCI7XG4gICAgICAgICAgICByZXR1cm4gXCJcIi5jb25jYXQoKGFsdEdlbkVsZW1lbnQgfHwgZ2VuRWxlbWVudCkoZWxfMSwgc3RhdGUpKS5jb25jYXQobm9ybWFsaXphdGlvblR5cGVfMSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG5vcm1hbGl6YXRpb25UeXBlID0gY2hlY2tTa2lwXG4gICAgICAgICAgICA/IGdldE5vcm1hbGl6YXRpb25UeXBlKGNoaWxkcmVuLCBzdGF0ZS5tYXliZUNvbXBvbmVudClcbiAgICAgICAgICAgIDogMDtcbiAgICAgICAgdmFyIGdlbl8xID0gYWx0R2VuTm9kZSB8fCBnZW5Ob2RlO1xuICAgICAgICByZXR1cm4gXCJbXCIuY29uY2F0KGNoaWxkcmVuLm1hcChmdW5jdGlvbiAoYykgeyByZXR1cm4gZ2VuXzEoYywgc3RhdGUpOyB9KS5qb2luKCcsJyksIFwiXVwiKS5jb25jYXQobm9ybWFsaXphdGlvblR5cGUgPyBcIixcIi5jb25jYXQobm9ybWFsaXphdGlvblR5cGUpIDogJycpO1xuICAgIH1cbn1cbi8vIGRldGVybWluZSB0aGUgbm9ybWFsaXphdGlvbiBuZWVkZWQgZm9yIHRoZSBjaGlsZHJlbiBhcnJheS5cbi8vIDA6IG5vIG5vcm1hbGl6YXRpb24gbmVlZGVkXG4vLyAxOiBzaW1wbGUgbm9ybWFsaXphdGlvbiBuZWVkZWQgKHBvc3NpYmxlIDEtbGV2ZWwgZGVlcCBuZXN0ZWQgYXJyYXkpXG4vLyAyOiBmdWxsIG5vcm1hbGl6YXRpb24gbmVlZGVkXG5mdW5jdGlvbiBnZXROb3JtYWxpemF0aW9uVHlwZShjaGlsZHJlbiwgbWF5YmVDb21wb25lbnQpIHtcbiAgICB2YXIgcmVzID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBlbCA9IGNoaWxkcmVuW2ldO1xuICAgICAgICBpZiAoZWwudHlwZSAhPT0gMSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5lZWRzTm9ybWFsaXphdGlvbihlbCkgfHxcbiAgICAgICAgICAgIChlbC5pZkNvbmRpdGlvbnMgJiZcbiAgICAgICAgICAgICAgICBlbC5pZkNvbmRpdGlvbnMuc29tZShmdW5jdGlvbiAoYykgeyByZXR1cm4gbmVlZHNOb3JtYWxpemF0aW9uKGMuYmxvY2spOyB9KSkpIHtcbiAgICAgICAgICAgIHJlcyA9IDI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF5YmVDb21wb25lbnQoZWwpIHx8XG4gICAgICAgICAgICAoZWwuaWZDb25kaXRpb25zICYmIGVsLmlmQ29uZGl0aW9ucy5zb21lKGZ1bmN0aW9uIChjKSB7IHJldHVybiBtYXliZUNvbXBvbmVudChjLmJsb2NrKTsgfSkpKSB7XG4gICAgICAgICAgICByZXMgPSAxO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG5mdW5jdGlvbiBuZWVkc05vcm1hbGl6YXRpb24oZWwpIHtcbiAgICByZXR1cm4gZWwuZm9yICE9PSB1bmRlZmluZWQgfHwgZWwudGFnID09PSAndGVtcGxhdGUnIHx8IGVsLnRhZyA9PT0gJ3Nsb3QnO1xufVxuZnVuY3Rpb24gZ2VuTm9kZShub2RlLCBzdGF0ZSkge1xuICAgIGlmIChub2RlLnR5cGUgPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIGdlbkVsZW1lbnQobm9kZSwgc3RhdGUpO1xuICAgIH1cbiAgICBlbHNlIGlmIChub2RlLnR5cGUgPT09IDMgJiYgbm9kZS5pc0NvbW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIGdlbkNvbW1lbnQobm9kZSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gZ2VuVGV4dChub2RlKTtcbiAgICB9XG59XG5mdW5jdGlvbiBnZW5UZXh0KHRleHQpIHtcbiAgICByZXR1cm4gXCJfdihcIi5jb25jYXQodGV4dC50eXBlID09PSAyXG4gICAgICAgID8gdGV4dC5leHByZXNzaW9uIC8vIG5vIG5lZWQgZm9yICgpIGJlY2F1c2UgYWxyZWFkeSB3cmFwcGVkIGluIF9zKClcbiAgICAgICAgOiB0cmFuc2Zvcm1TcGVjaWFsTmV3bGluZXMoSlNPTi5zdHJpbmdpZnkodGV4dC50ZXh0KSksIFwiKVwiKTtcbn1cbmZ1bmN0aW9uIGdlbkNvbW1lbnQoY29tbWVudCkge1xuICAgIHJldHVybiBcIl9lKFwiLmNvbmNhdChKU09OLnN0cmluZ2lmeShjb21tZW50LnRleHQpLCBcIilcIik7XG59XG5mdW5jdGlvbiBnZW5TbG90KGVsLCBzdGF0ZSkge1xuICAgIHZhciBzbG90TmFtZSA9IGVsLnNsb3ROYW1lIHx8ICdcImRlZmF1bHRcIic7XG4gICAgdmFyIGNoaWxkcmVuID0gZ2VuQ2hpbGRyZW4oZWwsIHN0YXRlKTtcbiAgICB2YXIgcmVzID0gXCJfdChcIi5jb25jYXQoc2xvdE5hbWUpLmNvbmNhdChjaGlsZHJlbiA/IFwiLGZ1bmN0aW9uKCl7cmV0dXJuIFwiLmNvbmNhdChjaGlsZHJlbiwgXCJ9XCIpIDogJycpO1xuICAgIHZhciBhdHRycyA9IGVsLmF0dHJzIHx8IGVsLmR5bmFtaWNBdHRyc1xuICAgICAgICA/IGdlblByb3BzKChlbC5hdHRycyB8fCBbXSkuY29uY2F0KGVsLmR5bmFtaWNBdHRycyB8fCBbXSkubWFwKGZ1bmN0aW9uIChhdHRyKSB7IHJldHVybiAoe1xuICAgICAgICAgICAgLy8gc2xvdCBwcm9wcyBhcmUgY2FtZWxpemVkXG4gICAgICAgICAgICBuYW1lOiBjYW1lbGl6ZShhdHRyLm5hbWUpLFxuICAgICAgICAgICAgdmFsdWU6IGF0dHIudmFsdWUsXG4gICAgICAgICAgICBkeW5hbWljOiBhdHRyLmR5bmFtaWNcbiAgICAgICAgfSk7IH0pKVxuICAgICAgICA6IG51bGw7XG4gICAgdmFyIGJpbmQgPSBlbC5hdHRyc01hcFsndi1iaW5kJ107XG4gICAgaWYgKChhdHRycyB8fCBiaW5kKSAmJiAhY2hpbGRyZW4pIHtcbiAgICAgICAgcmVzICs9IFwiLG51bGxcIjtcbiAgICB9XG4gICAgaWYgKGF0dHJzKSB7XG4gICAgICAgIHJlcyArPSBcIixcIi5jb25jYXQoYXR0cnMpO1xuICAgIH1cbiAgICBpZiAoYmluZCkge1xuICAgICAgICByZXMgKz0gXCJcIi5jb25jYXQoYXR0cnMgPyAnJyA6ICcsbnVsbCcsIFwiLFwiKS5jb25jYXQoYmluZCk7XG4gICAgfVxuICAgIHJldHVybiByZXMgKyAnKSc7XG59XG4vLyBjb21wb25lbnROYW1lIGlzIGVsLmNvbXBvbmVudCwgdGFrZSBpdCBhcyBhcmd1bWVudCB0byBzaHVuIGZsb3cncyBwZXNzaW1pc3RpYyByZWZpbmVtZW50XG5mdW5jdGlvbiBnZW5Db21wb25lbnQoY29tcG9uZW50TmFtZSwgZWwsIHN0YXRlKSB7XG4gICAgdmFyIGNoaWxkcmVuID0gZWwuaW5saW5lVGVtcGxhdGUgPyBudWxsIDogZ2VuQ2hpbGRyZW4oZWwsIHN0YXRlLCB0cnVlKTtcbiAgICByZXR1cm4gXCJfYyhcIi5jb25jYXQoY29tcG9uZW50TmFtZSwgXCIsXCIpLmNvbmNhdChnZW5EYXRhKGVsLCBzdGF0ZSkpLmNvbmNhdChjaGlsZHJlbiA/IFwiLFwiLmNvbmNhdChjaGlsZHJlbikgOiAnJywgXCIpXCIpO1xufVxuZnVuY3Rpb24gZ2VuUHJvcHMocHJvcHMpIHtcbiAgICB2YXIgc3RhdGljUHJvcHMgPSBcIlwiO1xuICAgIHZhciBkeW5hbWljUHJvcHMgPSBcIlwiO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHByb3AgPSBwcm9wc1tpXTtcbiAgICAgICAgdmFyIHZhbHVlID0gdHJhbnNmb3JtU3BlY2lhbE5ld2xpbmVzKHByb3AudmFsdWUpO1xuICAgICAgICBpZiAocHJvcC5keW5hbWljKSB7XG4gICAgICAgICAgICBkeW5hbWljUHJvcHMgKz0gXCJcIi5jb25jYXQocHJvcC5uYW1lLCBcIixcIikuY29uY2F0KHZhbHVlLCBcIixcIik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzdGF0aWNQcm9wcyArPSBcIlxcXCJcIi5jb25jYXQocHJvcC5uYW1lLCBcIlxcXCI6XCIpLmNvbmNhdCh2YWx1ZSwgXCIsXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpY1Byb3BzID0gXCJ7XCIuY29uY2F0KHN0YXRpY1Byb3BzLnNsaWNlKDAsIC0xKSwgXCJ9XCIpO1xuICAgIGlmIChkeW5hbWljUHJvcHMpIHtcbiAgICAgICAgcmV0dXJuIFwiX2QoXCIuY29uY2F0KHN0YXRpY1Byb3BzLCBcIixbXCIpLmNvbmNhdChkeW5hbWljUHJvcHMuc2xpY2UoMCwgLTEpLCBcIl0pXCIpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHN0YXRpY1Byb3BzO1xuICAgIH1cbn1cbi8vICMzODk1LCAjNDI2OFxuZnVuY3Rpb24gdHJhbnNmb3JtU3BlY2lhbE5ld2xpbmVzKHRleHQpIHtcbiAgICByZXR1cm4gdGV4dC5yZXBsYWNlKC9cXHUyMDI4L2csICdcXFxcdTIwMjgnKS5yZXBsYWNlKC9cXHUyMDI5L2csICdcXFxcdTIwMjknKTtcbn1cblxuLy8gdGhlc2Uga2V5d29yZHMgc2hvdWxkIG5vdCBhcHBlYXIgaW5zaWRlIGV4cHJlc3Npb25zLCBidXQgb3BlcmF0b3JzIGxpa2Vcbi8vIHR5cGVvZiwgaW5zdGFuY2VvZiBhbmQgaW4gYXJlIGFsbG93ZWRcbnZhciBwcm9oaWJpdGVkS2V5d29yZFJFID0gbmV3IFJlZ0V4cCgnXFxcXGInICtcbiAgICAoJ2RvLGlmLGZvcixsZXQsbmV3LHRyeSx2YXIsY2FzZSxlbHNlLHdpdGgsYXdhaXQsYnJlYWssY2F0Y2gsY2xhc3MsY29uc3QsJyArXG4gICAgICAgICdzdXBlcix0aHJvdyx3aGlsZSx5aWVsZCxkZWxldGUsZXhwb3J0LGltcG9ydCxyZXR1cm4sc3dpdGNoLGRlZmF1bHQsJyArXG4gICAgICAgICdleHRlbmRzLGZpbmFsbHksY29udGludWUsZGVidWdnZXIsZnVuY3Rpb24sYXJndW1lbnRzJylcbiAgICAgICAgLnNwbGl0KCcsJylcbiAgICAgICAgLmpvaW4oJ1xcXFxifFxcXFxiJykgK1xuICAgICdcXFxcYicpO1xuLy8gdGhlc2UgdW5hcnkgb3BlcmF0b3JzIHNob3VsZCBub3QgYmUgdXNlZCBhcyBwcm9wZXJ0eS9tZXRob2QgbmFtZXNcbnZhciB1bmFyeU9wZXJhdG9yc1JFID0gbmV3IFJlZ0V4cCgnXFxcXGInICtcbiAgICAnZGVsZXRlLHR5cGVvZix2b2lkJy5zcGxpdCgnLCcpLmpvaW4oJ1xcXFxzKlxcXFwoW15cXFxcKV0qXFxcXCl8XFxcXGInKSArXG4gICAgJ1xcXFxzKlxcXFwoW15cXFxcKV0qXFxcXCknKTtcbi8vIHN0cmlwIHN0cmluZ3MgaW4gZXhwcmVzc2lvbnNcbnZhciBzdHJpcFN0cmluZ1JFID0gLycoPzpbXidcXFxcXXxcXFxcLikqJ3xcIig/OlteXCJcXFxcXXxcXFxcLikqXCJ8YCg/OlteYFxcXFxdfFxcXFwuKSpcXCRcXHt8XFx9KD86W15gXFxcXF18XFxcXC4pKmB8YCg/OlteYFxcXFxdfFxcXFwuKSpgL2c7XG4vLyBkZXRlY3QgcHJvYmxlbWF0aWMgZXhwcmVzc2lvbnMgaW4gYSB0ZW1wbGF0ZVxuZnVuY3Rpb24gZGV0ZWN0RXJyb3JzKGFzdCwgd2Fybikge1xuICAgIGlmIChhc3QpIHtcbiAgICAgICAgY2hlY2tOb2RlKGFzdCwgd2Fybik7XG4gICAgfVxufVxuZnVuY3Rpb24gY2hlY2tOb2RlKG5vZGUsIHdhcm4pIHtcbiAgICBpZiAobm9kZS50eXBlID09PSAxKSB7XG4gICAgICAgIGZvciAodmFyIG5hbWVfMSBpbiBub2RlLmF0dHJzTWFwKSB7XG4gICAgICAgICAgICBpZiAoZGlyUkUudGVzdChuYW1lXzEpKSB7XG4gICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gbm9kZS5hdHRyc01hcFtuYW1lXzFdO1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmFuZ2UgPSBub2RlLnJhd0F0dHJzTWFwW25hbWVfMV07XG4gICAgICAgICAgICAgICAgICAgIGlmIChuYW1lXzEgPT09ICd2LWZvcicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrRm9yKG5vZGUsIFwidi1mb3I9XFxcIlwiLmNvbmNhdCh2YWx1ZSwgXCJcXFwiXCIpLCB3YXJuLCByYW5nZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZV8xID09PSAndi1zbG90JyB8fCBuYW1lXzFbMF0gPT09ICcjJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tGdW5jdGlvblBhcmFtZXRlckV4cHJlc3Npb24odmFsdWUsIFwiXCIuY29uY2F0KG5hbWVfMSwgXCI9XFxcIlwiKS5jb25jYXQodmFsdWUsIFwiXFxcIlwiKSwgd2FybiwgcmFuZ2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG9uUkUudGVzdChuYW1lXzEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGVja0V2ZW50KHZhbHVlLCBcIlwiLmNvbmNhdChuYW1lXzEsIFwiPVxcXCJcIikuY29uY2F0KHZhbHVlLCBcIlxcXCJcIiksIHdhcm4sIHJhbmdlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrRXhwcmVzc2lvbih2YWx1ZSwgXCJcIi5jb25jYXQobmFtZV8xLCBcIj1cXFwiXCIpLmNvbmNhdCh2YWx1ZSwgXCJcXFwiXCIpLCB3YXJuLCByYW5nZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNoZWNrTm9kZShub2RlLmNoaWxkcmVuW2ldLCB3YXJuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChub2RlLnR5cGUgPT09IDIpIHtcbiAgICAgICAgY2hlY2tFeHByZXNzaW9uKG5vZGUuZXhwcmVzc2lvbiwgbm9kZS50ZXh0LCB3YXJuLCBub2RlKTtcbiAgICB9XG59XG5mdW5jdGlvbiBjaGVja0V2ZW50KGV4cCwgdGV4dCwgd2FybiwgcmFuZ2UpIHtcbiAgICB2YXIgc3RyaXBwZWQgPSBleHAucmVwbGFjZShzdHJpcFN0cmluZ1JFLCAnJyk7XG4gICAgdmFyIGtleXdvcmRNYXRjaCA9IHN0cmlwcGVkLm1hdGNoKHVuYXJ5T3BlcmF0b3JzUkUpO1xuICAgIGlmIChrZXl3b3JkTWF0Y2ggJiYgc3RyaXBwZWQuY2hhckF0KGtleXdvcmRNYXRjaC5pbmRleCAtIDEpICE9PSAnJCcpIHtcbiAgICAgICAgd2FybihcImF2b2lkIHVzaW5nIEphdmFTY3JpcHQgdW5hcnkgb3BlcmF0b3IgYXMgcHJvcGVydHkgbmFtZTogXCIgK1xuICAgICAgICAgICAgXCJcXFwiXCIuY29uY2F0KGtleXdvcmRNYXRjaFswXSwgXCJcXFwiIGluIGV4cHJlc3Npb24gXCIpLmNvbmNhdCh0ZXh0LnRyaW0oKSksIHJhbmdlKTtcbiAgICB9XG4gICAgY2hlY2tFeHByZXNzaW9uKGV4cCwgdGV4dCwgd2FybiwgcmFuZ2UpO1xufVxuZnVuY3Rpb24gY2hlY2tGb3Iobm9kZSwgdGV4dCwgd2FybiwgcmFuZ2UpIHtcbiAgICBjaGVja0V4cHJlc3Npb24obm9kZS5mb3IgfHwgJycsIHRleHQsIHdhcm4sIHJhbmdlKTtcbiAgICBjaGVja0lkZW50aWZpZXIobm9kZS5hbGlhcywgJ3YtZm9yIGFsaWFzJywgdGV4dCwgd2FybiwgcmFuZ2UpO1xuICAgIGNoZWNrSWRlbnRpZmllcihub2RlLml0ZXJhdG9yMSwgJ3YtZm9yIGl0ZXJhdG9yJywgdGV4dCwgd2FybiwgcmFuZ2UpO1xuICAgIGNoZWNrSWRlbnRpZmllcihub2RlLml0ZXJhdG9yMiwgJ3YtZm9yIGl0ZXJhdG9yJywgdGV4dCwgd2FybiwgcmFuZ2UpO1xufVxuZnVuY3Rpb24gY2hlY2tJZGVudGlmaWVyKGlkZW50LCB0eXBlLCB0ZXh0LCB3YXJuLCByYW5nZSkge1xuICAgIGlmICh0eXBlb2YgaWRlbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBuZXcgRnVuY3Rpb24oXCJ2YXIgXCIuY29uY2F0KGlkZW50LCBcIj1fXCIpKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgd2FybihcImludmFsaWQgXCIuY29uY2F0KHR5cGUsIFwiIFxcXCJcIikuY29uY2F0KGlkZW50LCBcIlxcXCIgaW4gZXhwcmVzc2lvbjogXCIpLmNvbmNhdCh0ZXh0LnRyaW0oKSksIHJhbmdlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIGNoZWNrRXhwcmVzc2lvbihleHAsIHRleHQsIHdhcm4sIHJhbmdlKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgbmV3IEZ1bmN0aW9uKFwicmV0dXJuIFwiLmNvbmNhdChleHApKTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgdmFyIGtleXdvcmRNYXRjaCA9IGV4cFxuICAgICAgICAgICAgLnJlcGxhY2Uoc3RyaXBTdHJpbmdSRSwgJycpXG4gICAgICAgICAgICAubWF0Y2gocHJvaGliaXRlZEtleXdvcmRSRSk7XG4gICAgICAgIGlmIChrZXl3b3JkTWF0Y2gpIHtcbiAgICAgICAgICAgIHdhcm4oXCJhdm9pZCB1c2luZyBKYXZhU2NyaXB0IGtleXdvcmQgYXMgcHJvcGVydHkgbmFtZTogXCIgK1xuICAgICAgICAgICAgICAgIFwiXFxcIlwiLmNvbmNhdChrZXl3b3JkTWF0Y2hbMF0sIFwiXFxcIlxcbiAgUmF3IGV4cHJlc3Npb246IFwiKS5jb25jYXQodGV4dC50cmltKCkpLCByYW5nZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB3YXJuKFwiaW52YWxpZCBleHByZXNzaW9uOiBcIi5jb25jYXQoZS5tZXNzYWdlLCBcIiBpblxcblxcblwiKSArXG4gICAgICAgICAgICAgICAgXCIgICAgXCIuY29uY2F0KGV4cCwgXCJcXG5cXG5cIikgK1xuICAgICAgICAgICAgICAgIFwiICBSYXcgZXhwcmVzc2lvbjogXCIuY29uY2F0KHRleHQudHJpbSgpLCBcIlxcblwiKSwgcmFuZ2UpO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gY2hlY2tGdW5jdGlvblBhcmFtZXRlckV4cHJlc3Npb24oZXhwLCB0ZXh0LCB3YXJuLCByYW5nZSkge1xuICAgIHRyeSB7XG4gICAgICAgIG5ldyBGdW5jdGlvbihleHAsICcnKTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgd2FybihcImludmFsaWQgZnVuY3Rpb24gcGFyYW1ldGVyIGV4cHJlc3Npb246IFwiLmNvbmNhdChlLm1lc3NhZ2UsIFwiIGluXFxuXFxuXCIpICtcbiAgICAgICAgICAgIFwiICAgIFwiLmNvbmNhdChleHAsIFwiXFxuXFxuXCIpICtcbiAgICAgICAgICAgIFwiICBSYXcgZXhwcmVzc2lvbjogXCIuY29uY2F0KHRleHQudHJpbSgpLCBcIlxcblwiKSwgcmFuZ2UpO1xuICAgIH1cbn1cblxudmFyIHJhbmdlID0gMjtcbmZ1bmN0aW9uIGdlbmVyYXRlQ29kZUZyYW1lKHNvdXJjZSwgc3RhcnQsIGVuZCkge1xuICAgIGlmIChzdGFydCA9PT0gdm9pZCAwKSB7IHN0YXJ0ID0gMDsgfVxuICAgIGlmIChlbmQgPT09IHZvaWQgMCkgeyBlbmQgPSBzb3VyY2UubGVuZ3RoOyB9XG4gICAgdmFyIGxpbmVzID0gc291cmNlLnNwbGl0KC9cXHI/XFxuLyk7XG4gICAgdmFyIGNvdW50ID0gMDtcbiAgICB2YXIgcmVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb3VudCArPSBsaW5lc1tpXS5sZW5ndGggKyAxO1xuICAgICAgICBpZiAoY291bnQgPj0gc3RhcnQpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGogPSBpIC0gcmFuZ2U7IGogPD0gaSArIHJhbmdlIHx8IGVuZCA+IGNvdW50OyBqKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaiA8IDAgfHwgaiA+PSBsaW5lcy5sZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIHJlcy5wdXNoKFwiXCIuY29uY2F0KGogKyAxKS5jb25jYXQocmVwZWF0KFwiIFwiLCAzIC0gU3RyaW5nKGogKyAxKS5sZW5ndGgpLCBcInwgIFwiKS5jb25jYXQobGluZXNbal0pKTtcbiAgICAgICAgICAgICAgICB2YXIgbGluZUxlbmd0aCA9IGxpbmVzW2pdLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBpZiAoaiA9PT0gaSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBwdXNoIHVuZGVybGluZVxuICAgICAgICAgICAgICAgICAgICB2YXIgcGFkID0gc3RhcnQgLSAoY291bnQgLSBsaW5lTGVuZ3RoKSArIDE7XG4gICAgICAgICAgICAgICAgICAgIHZhciBsZW5ndGhfMSA9IGVuZCA+IGNvdW50ID8gbGluZUxlbmd0aCAtIHBhZCA6IGVuZCAtIHN0YXJ0O1xuICAgICAgICAgICAgICAgICAgICByZXMucHVzaChcIiAgIHwgIFwiICsgcmVwZWF0KFwiIFwiLCBwYWQpICsgcmVwZWF0KFwiXlwiLCBsZW5ndGhfMSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChqID4gaSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZW5kID4gY291bnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZW5ndGhfMiA9IE1hdGgubWluKGVuZCAtIGNvdW50LCBsaW5lTGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcy5wdXNoKFwiICAgfCAgXCIgKyByZXBlYXQoXCJeXCIsIGxlbmd0aF8yKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY291bnQgKz0gbGluZUxlbmd0aCArIDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcy5qb2luKCdcXG4nKTtcbn1cbmZ1bmN0aW9uIHJlcGVhdChzdHIsIG4pIHtcbiAgICB2YXIgcmVzdWx0ID0gJyc7XG4gICAgaWYgKG4gPiAwKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zdGFudC1jb25kaXRpb25cbiAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICAgICAgICAgIGlmIChuICYgMSlcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gc3RyO1xuICAgICAgICAgICAgbiA+Pj49IDE7XG4gICAgICAgICAgICBpZiAobiA8PSAwKVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgc3RyICs9IHN0cjtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVGdW5jdGlvbihjb2RlLCBlcnJvcnMpIHtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gbmV3IEZ1bmN0aW9uKGNvZGUpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKHsgZXJyOiBlcnIsIGNvZGU6IGNvZGUgfSk7XG4gICAgICAgIHJldHVybiBub29wO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGNyZWF0ZUNvbXBpbGVUb0Z1bmN0aW9uRm4oY29tcGlsZSkge1xuICAgIHZhciBjYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGNvbXBpbGVUb0Z1bmN0aW9ucyh0ZW1wbGF0ZSwgb3B0aW9ucywgdm0pIHtcbiAgICAgICAgb3B0aW9ucyA9IGV4dGVuZCh7fSwgb3B0aW9ucyk7XG4gICAgICAgIHZhciB3YXJuID0gb3B0aW9ucy53YXJuIHx8IHdhcm4kMjtcbiAgICAgICAgZGVsZXRlIG9wdGlvbnMud2FybjtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICAvLyBkZXRlY3QgcG9zc2libGUgQ1NQIHJlc3RyaWN0aW9uXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIG5ldyBGdW5jdGlvbigncmV0dXJuIDEnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGUudG9TdHJpbmcoKS5tYXRjaCgvdW5zYWZlLWV2YWx8Q1NQLykpIHtcbiAgICAgICAgICAgICAgICAgICAgd2FybignSXQgc2VlbXMgeW91IGFyZSB1c2luZyB0aGUgc3RhbmRhbG9uZSBidWlsZCBvZiBWdWUuanMgaW4gYW4gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW52aXJvbm1lbnQgd2l0aCBDb250ZW50IFNlY3VyaXR5IFBvbGljeSB0aGF0IHByb2hpYml0cyB1bnNhZmUtZXZhbC4gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnVGhlIHRlbXBsYXRlIGNvbXBpbGVyIGNhbm5vdCB3b3JrIGluIHRoaXMgZW52aXJvbm1lbnQuIENvbnNpZGVyICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ3JlbGF4aW5nIHRoZSBwb2xpY3kgdG8gYWxsb3cgdW5zYWZlLWV2YWwgb3IgcHJlLWNvbXBpbGluZyB5b3VyICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ3RlbXBsYXRlcyBpbnRvIHJlbmRlciBmdW5jdGlvbnMuJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGNoZWNrIGNhY2hlXG4gICAgICAgIHZhciBrZXkgPSBvcHRpb25zLmRlbGltaXRlcnNcbiAgICAgICAgICAgID8gU3RyaW5nKG9wdGlvbnMuZGVsaW1pdGVycykgKyB0ZW1wbGF0ZVxuICAgICAgICAgICAgOiB0ZW1wbGF0ZTtcbiAgICAgICAgaWYgKGNhY2hlW2tleV0pIHtcbiAgICAgICAgICAgIHJldHVybiBjYWNoZVtrZXldO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNvbXBpbGVcbiAgICAgICAgdmFyIGNvbXBpbGVkID0gY29tcGlsZSh0ZW1wbGF0ZSwgb3B0aW9ucyk7XG4gICAgICAgIC8vIGNoZWNrIGNvbXBpbGF0aW9uIGVycm9ycy90aXBzXG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICBpZiAoY29tcGlsZWQuZXJyb3JzICYmIGNvbXBpbGVkLmVycm9ycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5vdXRwdXRTb3VyY2VSYW5nZSkge1xuICAgICAgICAgICAgICAgICAgICBjb21waWxlZC5lcnJvcnMuZm9yRWFjaChmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2FybihcIkVycm9yIGNvbXBpbGluZyB0ZW1wbGF0ZTpcXG5cXG5cIi5jb25jYXQoZS5tc2csIFwiXFxuXFxuXCIpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZUNvZGVGcmFtZSh0ZW1wbGF0ZSwgZS5zdGFydCwgZS5lbmQpLCB2bSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgd2FybihcIkVycm9yIGNvbXBpbGluZyB0ZW1wbGF0ZTpcXG5cXG5cIi5jb25jYXQodGVtcGxhdGUsIFwiXFxuXFxuXCIpICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVkLmVycm9ycy5tYXAoZnVuY3Rpb24gKGUpIHsgcmV0dXJuIFwiLSBcIi5jb25jYXQoZSk7IH0pLmpvaW4oJ1xcbicpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdcXG4nLCB2bSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNvbXBpbGVkLnRpcHMgJiYgY29tcGlsZWQudGlwcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5vdXRwdXRTb3VyY2VSYW5nZSkge1xuICAgICAgICAgICAgICAgICAgICBjb21waWxlZC50aXBzLmZvckVhY2goZnVuY3Rpb24gKGUpIHsgcmV0dXJuIHRpcChlLm1zZywgdm0pOyB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBpbGVkLnRpcHMuZm9yRWFjaChmdW5jdGlvbiAobXNnKSB7IHJldHVybiB0aXAobXNnLCB2bSk7IH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyB0dXJuIGNvZGUgaW50byBmdW5jdGlvbnNcbiAgICAgICAgdmFyIHJlcyA9IHt9O1xuICAgICAgICB2YXIgZm5HZW5FcnJvcnMgPSBbXTtcbiAgICAgICAgcmVzLnJlbmRlciA9IGNyZWF0ZUZ1bmN0aW9uKGNvbXBpbGVkLnJlbmRlciwgZm5HZW5FcnJvcnMpO1xuICAgICAgICByZXMuc3RhdGljUmVuZGVyRm5zID0gY29tcGlsZWQuc3RhdGljUmVuZGVyRm5zLm1hcChmdW5jdGlvbiAoY29kZSkge1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUZ1bmN0aW9uKGNvZGUsIGZuR2VuRXJyb3JzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIGNoZWNrIGZ1bmN0aW9uIGdlbmVyYXRpb24gZXJyb3JzLlxuICAgICAgICAvLyB0aGlzIHNob3VsZCBvbmx5IGhhcHBlbiBpZiB0aGVyZSBpcyBhIGJ1ZyBpbiB0aGUgY29tcGlsZXIgaXRzZWxmLlxuICAgICAgICAvLyBtb3N0bHkgZm9yIGNvZGVnZW4gZGV2ZWxvcG1lbnQgdXNlXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgaWYgKCghY29tcGlsZWQuZXJyb3JzIHx8ICFjb21waWxlZC5lcnJvcnMubGVuZ3RoKSAmJiBmbkdlbkVycm9ycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB3YXJuKFwiRmFpbGVkIHRvIGdlbmVyYXRlIHJlbmRlciBmdW5jdGlvbjpcXG5cXG5cIiArXG4gICAgICAgICAgICAgICAgICAgIGZuR2VuRXJyb3JzXG4gICAgICAgICAgICAgICAgICAgICAgICAubWFwKGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVyciA9IF9hLmVyciwgY29kZSA9IF9hLmNvZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJcIi5jb25jYXQoZXJyLnRvU3RyaW5nKCksIFwiIGluXFxuXFxuXCIpLmNvbmNhdChjb2RlLCBcIlxcblwiKTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5qb2luKCdcXG4nKSwgdm0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoY2FjaGVba2V5XSA9IHJlcyk7XG4gICAgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQ29tcGlsZXJDcmVhdG9yKGJhc2VDb21waWxlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGNyZWF0ZUNvbXBpbGVyKGJhc2VPcHRpb25zKSB7XG4gICAgICAgIGZ1bmN0aW9uIGNvbXBpbGUodGVtcGxhdGUsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHZhciBmaW5hbE9wdGlvbnMgPSBPYmplY3QuY3JlYXRlKGJhc2VPcHRpb25zKTtcbiAgICAgICAgICAgIHZhciBlcnJvcnMgPSBbXTtcbiAgICAgICAgICAgIHZhciB0aXBzID0gW107XG4gICAgICAgICAgICB2YXIgd2FybiA9IGZ1bmN0aW9uIChtc2csIHJhbmdlLCB0aXApIHtcbiAgICAgICAgICAgICAgICAodGlwID8gdGlwcyA6IGVycm9ycykucHVzaChtc2cpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgb3B0aW9ucy5vdXRwdXRTb3VyY2VSYW5nZSkge1xuICAgICAgICAgICAgICAgICAgICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxlYWRpbmdTcGFjZUxlbmd0aF8xID0gdGVtcGxhdGUubWF0Y2goL15cXHMqLylbMF0ubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICB3YXJuID0gZnVuY3Rpb24gKG1zZywgcmFuZ2UsIHRpcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSB0eXBlb2YgbXNnID09PSAnc3RyaW5nJyA/IHsgbXNnOiBtc2cgfSA6IG1zZztcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyYW5nZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyYW5nZS5zdGFydCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuc3RhcnQgPSByYW5nZS5zdGFydCArIGxlYWRpbmdTcGFjZUxlbmd0aF8xO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmFuZ2UuZW5kICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5lbmQgPSByYW5nZS5lbmQgKyBsZWFkaW5nU3BhY2VMZW5ndGhfMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAodGlwID8gdGlwcyA6IGVycm9ycykucHVzaChkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gbWVyZ2UgY3VzdG9tIG1vZHVsZXNcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5tb2R1bGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsT3B0aW9ucy5tb2R1bGVzID0gKGJhc2VPcHRpb25zLm1vZHVsZXMgfHwgW10pLmNvbmNhdChvcHRpb25zLm1vZHVsZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBtZXJnZSBjdXN0b20gZGlyZWN0aXZlc1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmRpcmVjdGl2ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgZmluYWxPcHRpb25zLmRpcmVjdGl2ZXMgPSBleHRlbmQoT2JqZWN0LmNyZWF0ZShiYXNlT3B0aW9ucy5kaXJlY3RpdmVzIHx8IG51bGwpLCBvcHRpb25zLmRpcmVjdGl2ZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBjb3B5IG90aGVyIG9wdGlvbnNcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gb3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ICE9PSAnbW9kdWxlcycgJiYga2V5ICE9PSAnZGlyZWN0aXZlcycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsT3B0aW9uc1trZXldID0gb3B0aW9uc1trZXldO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmluYWxPcHRpb25zLndhcm4gPSB3YXJuO1xuICAgICAgICAgICAgdmFyIGNvbXBpbGVkID0gYmFzZUNvbXBpbGUodGVtcGxhdGUudHJpbSgpLCBmaW5hbE9wdGlvbnMpO1xuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgICAgICBkZXRlY3RFcnJvcnMoY29tcGlsZWQuYXN0LCB3YXJuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbXBpbGVkLmVycm9ycyA9IGVycm9ycztcbiAgICAgICAgICAgIGNvbXBpbGVkLnRpcHMgPSB0aXBzO1xuICAgICAgICAgICAgcmV0dXJuIGNvbXBpbGVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb21waWxlOiBjb21waWxlLFxuICAgICAgICAgICAgY29tcGlsZVRvRnVuY3Rpb25zOiBjcmVhdGVDb21waWxlVG9GdW5jdGlvbkZuKGNvbXBpbGUpXG4gICAgICAgIH07XG4gICAgfTtcbn1cblxuLy8gYGNyZWF0ZUNvbXBpbGVyQ3JlYXRvcmAgYWxsb3dzIGNyZWF0aW5nIGNvbXBpbGVycyB0aGF0IHVzZSBhbHRlcm5hdGl2ZVxuLy8gcGFyc2VyL29wdGltaXplci9jb2RlZ2VuLCBlLmcgdGhlIFNTUiBvcHRpbWl6aW5nIGNvbXBpbGVyLlxuLy8gSGVyZSB3ZSBqdXN0IGV4cG9ydCBhIGRlZmF1bHQgY29tcGlsZXIgdXNpbmcgdGhlIGRlZmF1bHQgcGFydHMuXG52YXIgY3JlYXRlQ29tcGlsZXIgPSBjcmVhdGVDb21waWxlckNyZWF0b3IoZnVuY3Rpb24gYmFzZUNvbXBpbGUodGVtcGxhdGUsIG9wdGlvbnMpIHtcbiAgICB2YXIgYXN0ID0gcGFyc2UodGVtcGxhdGUudHJpbSgpLCBvcHRpb25zKTtcbiAgICBpZiAob3B0aW9ucy5vcHRpbWl6ZSAhPT0gZmFsc2UpIHtcbiAgICAgICAgb3B0aW1pemUoYXN0LCBvcHRpb25zKTtcbiAgICB9XG4gICAgdmFyIGNvZGUgPSBnZW5lcmF0ZShhc3QsIG9wdGlvbnMpO1xuICAgIHJldHVybiB7XG4gICAgICAgIGFzdDogYXN0LFxuICAgICAgICByZW5kZXI6IGNvZGUucmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IGNvZGUuc3RhdGljUmVuZGVyRm5zXG4gICAgfTtcbn0pO1xuXG52YXIgX2EgPSBjcmVhdGVDb21waWxlcihiYXNlT3B0aW9ucyksIGNvbXBpbGVUb0Z1bmN0aW9ucyA9IF9hLmNvbXBpbGVUb0Z1bmN0aW9ucztcblxuLy8gY2hlY2sgd2hldGhlciBjdXJyZW50IGJyb3dzZXIgZW5jb2RlcyBhIGNoYXIgaW5zaWRlIGF0dHJpYnV0ZSB2YWx1ZXNcbnZhciBkaXY7XG5mdW5jdGlvbiBnZXRTaG91bGREZWNvZGUoaHJlZikge1xuICAgIGRpdiA9IGRpdiB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBkaXYuaW5uZXJIVE1MID0gaHJlZiA/IFwiPGEgaHJlZj1cXFwiXFxuXFxcIi8+XCIgOiBcIjxkaXYgYT1cXFwiXFxuXFxcIi8+XCI7XG4gICAgcmV0dXJuIGRpdi5pbm5lckhUTUwuaW5kZXhPZignJiMxMDsnKSA+IDA7XG59XG4vLyAjMzY2MzogSUUgZW5jb2RlcyBuZXdsaW5lcyBpbnNpZGUgYXR0cmlidXRlIHZhbHVlcyB3aGlsZSBvdGhlciBicm93c2VycyBkb24ndFxudmFyIHNob3VsZERlY29kZU5ld2xpbmVzID0gaW5Ccm93c2VyID8gZ2V0U2hvdWxkRGVjb2RlKGZhbHNlKSA6IGZhbHNlO1xuLy8gIzY4Mjg6IGNocm9tZSBlbmNvZGVzIGNvbnRlbnQgaW4gYVtocmVmXVxudmFyIHNob3VsZERlY29kZU5ld2xpbmVzRm9ySHJlZiA9IGluQnJvd3NlclxuICAgID8gZ2V0U2hvdWxkRGVjb2RlKHRydWUpXG4gICAgOiBmYWxzZTtcblxudmFyIGlkVG9UZW1wbGF0ZSA9IGNhY2hlZChmdW5jdGlvbiAoaWQpIHtcbiAgICB2YXIgZWwgPSBxdWVyeShpZCk7XG4gICAgcmV0dXJuIGVsICYmIGVsLmlubmVySFRNTDtcbn0pO1xudmFyIG1vdW50ID0gVnVlLnByb3RvdHlwZS4kbW91bnQ7XG5WdWUucHJvdG90eXBlLiRtb3VudCA9IGZ1bmN0aW9uIChlbCwgaHlkcmF0aW5nKSB7XG4gICAgZWwgPSBlbCAmJiBxdWVyeShlbCk7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGVsID09PSBkb2N1bWVudC5ib2R5IHx8IGVsID09PSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcbiAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgICAgICAgICAgd2FybiQyKFwiRG8gbm90IG1vdW50IFZ1ZSB0byA8aHRtbD4gb3IgPGJvZHk+IC0gbW91bnQgdG8gbm9ybWFsIGVsZW1lbnRzIGluc3RlYWQuXCIpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgdmFyIG9wdGlvbnMgPSB0aGlzLiRvcHRpb25zO1xuICAgIC8vIHJlc29sdmUgdGVtcGxhdGUvZWwgYW5kIGNvbnZlcnQgdG8gcmVuZGVyIGZ1bmN0aW9uXG4gICAgaWYgKCFvcHRpb25zLnJlbmRlcikge1xuICAgICAgICB2YXIgdGVtcGxhdGUgPSBvcHRpb25zLnRlbXBsYXRlO1xuICAgICAgICBpZiAodGVtcGxhdGUpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGVtcGxhdGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRlbXBsYXRlLmNoYXJBdCgwKSA9PT0gJyMnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlID0gaWRUb1RlbXBsYXRlKHRlbXBsYXRlKTtcbiAgICAgICAgICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICF0ZW1wbGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2FybiQyKFwiVGVtcGxhdGUgZWxlbWVudCBub3QgZm91bmQgb3IgaXMgZW1wdHk6IFwiLmNvbmNhdChvcHRpb25zLnRlbXBsYXRlKSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0ZW1wbGF0ZS5ub2RlVHlwZSkge1xuICAgICAgICAgICAgICAgIHRlbXBsYXRlID0gdGVtcGxhdGUuaW5uZXJIVE1MO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgd2FybiQyKCdpbnZhbGlkIHRlbXBsYXRlIG9wdGlvbjonICsgdGVtcGxhdGUsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChlbCkge1xuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICAgICAgdGVtcGxhdGUgPSBnZXRPdXRlckhUTUwoZWwpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0ZW1wbGF0ZSkge1xuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBjb25maWcucGVyZm9ybWFuY2UgJiYgbWFyaykge1xuICAgICAgICAgICAgICAgIG1hcmsoJ2NvbXBpbGUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBfYSA9IGNvbXBpbGVUb0Z1bmN0aW9ucyh0ZW1wbGF0ZSwge1xuICAgICAgICAgICAgICAgIG91dHB1dFNvdXJjZVJhbmdlOiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nLFxuICAgICAgICAgICAgICAgIHNob3VsZERlY29kZU5ld2xpbmVzOiBzaG91bGREZWNvZGVOZXdsaW5lcyxcbiAgICAgICAgICAgICAgICBzaG91bGREZWNvZGVOZXdsaW5lc0ZvckhyZWY6IHNob3VsZERlY29kZU5ld2xpbmVzRm9ySHJlZixcbiAgICAgICAgICAgICAgICBkZWxpbWl0ZXJzOiBvcHRpb25zLmRlbGltaXRlcnMsXG4gICAgICAgICAgICAgICAgY29tbWVudHM6IG9wdGlvbnMuY29tbWVudHNcbiAgICAgICAgICAgIH0sIHRoaXMpLCByZW5kZXIgPSBfYS5yZW5kZXIsIHN0YXRpY1JlbmRlckZucyA9IF9hLnN0YXRpY1JlbmRlckZucztcbiAgICAgICAgICAgIG9wdGlvbnMucmVuZGVyID0gcmVuZGVyO1xuICAgICAgICAgICAgb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnMgPSBzdGF0aWNSZW5kZXJGbnM7XG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGNvbmZpZy5wZXJmb3JtYW5jZSAmJiBtYXJrKSB7XG4gICAgICAgICAgICAgICAgbWFyaygnY29tcGlsZSBlbmQnKTtcbiAgICAgICAgICAgICAgICBtZWFzdXJlKFwidnVlIFwiLmNvbmNhdCh0aGlzLl9uYW1lLCBcIiBjb21waWxlXCIpLCAnY29tcGlsZScsICdjb21waWxlIGVuZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtb3VudC5jYWxsKHRoaXMsIGVsLCBoeWRyYXRpbmcpO1xufTtcbi8qKlxuICogR2V0IG91dGVySFRNTCBvZiBlbGVtZW50cywgdGFraW5nIGNhcmVcbiAqIG9mIFNWRyBlbGVtZW50cyBpbiBJRSBhcyB3ZWxsLlxuICovXG5mdW5jdGlvbiBnZXRPdXRlckhUTUwoZWwpIHtcbiAgICBpZiAoZWwub3V0ZXJIVE1MKSB7XG4gICAgICAgIHJldHVybiBlbC5vdXRlckhUTUw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB2YXIgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChlbC5jbG9uZU5vZGUodHJ1ZSkpO1xuICAgICAgICByZXR1cm4gY29udGFpbmVyLmlubmVySFRNTDtcbiAgICB9XG59XG5WdWUuY29tcGlsZSA9IGNvbXBpbGVUb0Z1bmN0aW9ucztcblxuZXhwb3J0IHsgRWZmZWN0U2NvcGUsIGNvbXB1dGVkLCBjdXN0b21SZWYsIFZ1ZSBhcyBkZWZhdWx0LCBkZWZpbmVBc3luY0NvbXBvbmVudCwgZGVmaW5lQ29tcG9uZW50LCBkZWwsIGVmZmVjdFNjb3BlLCBnZXRDdXJyZW50SW5zdGFuY2UsIGdldEN1cnJlbnRTY29wZSwgaCwgaW5qZWN0LCBpc1Byb3h5LCBpc1JlYWN0aXZlLCBpc1JlYWRvbmx5LCBpc1JlZiwgaXNTaGFsbG93LCBtYXJrUmF3LCBtZXJnZURlZmF1bHRzLCBuZXh0VGljaywgb25BY3RpdmF0ZWQsIG9uQmVmb3JlTW91bnQsIG9uQmVmb3JlVW5tb3VudCwgb25CZWZvcmVVcGRhdGUsIG9uRGVhY3RpdmF0ZWQsIG9uRXJyb3JDYXB0dXJlZCwgb25Nb3VudGVkLCBvblJlbmRlclRyYWNrZWQsIG9uUmVuZGVyVHJpZ2dlcmVkLCBvblNjb3BlRGlzcG9zZSwgb25TZXJ2ZXJQcmVmZXRjaCwgb25Vbm1vdW50ZWQsIG9uVXBkYXRlZCwgcHJvdmlkZSwgcHJveHlSZWZzLCByZWFjdGl2ZSwgcmVhZG9ubHksIHJlZiQxIGFzIHJlZiwgc2V0LCBzaGFsbG93UmVhY3RpdmUsIHNoYWxsb3dSZWFkb25seSwgc2hhbGxvd1JlZiwgdG9SYXcsIHRvUmVmLCB0b1JlZnMsIHRyaWdnZXJSZWYsIHVucmVmLCB1c2VBdHRycywgdXNlQ3NzTW9kdWxlLCB1c2VDc3NWYXJzLCB1c2VMaXN0ZW5lcnMsIHVzZVNsb3RzLCB2ZXJzaW9uLCB3YXRjaCwgd2F0Y2hFZmZlY3QsIHdhdGNoUG9zdEVmZmVjdCwgd2F0Y2hTeW5jRWZmZWN0IH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/vue/dist/vue.esm.js\n");

/***/ }),

/***/ "./node_modules/axios/package.json":
/*!*****************************************!*\
  !*** ./node_modules/axios/package.json ***!
  \*****************************************/
/***/ ((module) => {

"use strict";
module.exports = JSON.parse('{"_args":[["axios@0.21.4","/Users/admin/Projects/IDPAC/Escuela/escuela_laravel/docroot"]],"_development":true,"_from":"axios@0.21.4","_id":"axios@0.21.4","_inBundle":false,"_integrity":"sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==","_location":"/axios","_phantomChildren":{},"_requested":{"type":"version","registry":true,"raw":"axios@0.21.4","name":"axios","escapedName":"axios","rawSpec":"0.21.4","saveSpec":null,"fetchSpec":"0.21.4"},"_requiredBy":["#DEV:/"],"_resolved":"https://registry.npmjs.org/axios/-/axios-0.21.4.tgz","_spec":"0.21.4","_where":"/Users/admin/Projects/IDPAC/Escuela/escuela_laravel/docroot","author":{"name":"Matt Zabriskie"},"browser":{"./lib/adapters/http.js":"./lib/adapters/xhr.js"},"bugs":{"url":"https://github.com/axios/axios/issues"},"bundlesize":[{"path":"./dist/axios.min.js","threshold":"5kB"}],"dependencies":{"follow-redirects":"^1.14.0"},"description":"Promise based HTTP client for the browser and node.js","devDependencies":{"coveralls":"^3.0.0","es6-promise":"^4.2.4","grunt":"^1.3.0","grunt-banner":"^0.6.0","grunt-cli":"^1.2.0","grunt-contrib-clean":"^1.1.0","grunt-contrib-watch":"^1.0.0","grunt-eslint":"^23.0.0","grunt-karma":"^4.0.0","grunt-mocha-test":"^0.13.3","grunt-ts":"^6.0.0-beta.19","grunt-webpack":"^4.0.2","istanbul-instrumenter-loader":"^1.0.0","jasmine-core":"^2.4.1","karma":"^6.3.2","karma-chrome-launcher":"^3.1.0","karma-firefox-launcher":"^2.1.0","karma-jasmine":"^1.1.1","karma-jasmine-ajax":"^0.1.13","karma-safari-launcher":"^1.0.0","karma-sauce-launcher":"^4.3.6","karma-sinon":"^1.0.5","karma-sourcemap-loader":"^0.3.8","karma-webpack":"^4.0.2","load-grunt-tasks":"^3.5.2","minimist":"^1.2.0","mocha":"^8.2.1","sinon":"^4.5.0","terser-webpack-plugin":"^4.2.3","typescript":"^4.0.5","url-search-params":"^0.10.0","webpack":"^4.44.2","webpack-dev-server":"^3.11.0"},"homepage":"https://axios-http.com","jsdelivr":"dist/axios.min.js","keywords":["xhr","http","ajax","promise","node"],"license":"MIT","main":"index.js","name":"axios","repository":{"type":"git","url":"git+https://github.com/axios/axios.git"},"scripts":{"build":"NODE_ENV=production grunt build","coveralls":"cat coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js","examples":"node ./examples/server.js","fix":"eslint --fix lib/**/*.js","postversion":"git push && git push --tags","preversion":"npm test","start":"node ./sandbox/server.js","test":"grunt test","version":"npm run build && grunt version && git add -A dist && git add CHANGELOG.md bower.json package.json"},"typings":"./index.d.ts","unpkg":"dist/axios.min.js","version":"0.21.4"}');

/***/ })

/******/ 	});
/************************************************************************/
/******/ 	// The module cache
/******/ 	var __webpack_module_cache__ = {};
/******/ 	
/******/ 	// The require function
/******/ 	function __webpack_require__(moduleId) {
/******/ 		// Check if module is in cache
/******/ 		var cachedModule = __webpack_module_cache__[moduleId];
/******/ 		if (cachedModule !== undefined) {
/******/ 			return cachedModule.exports;
/******/ 		}
/******/ 		// Create a new module (and put it into the cache)
/******/ 		var module = __webpack_module_cache__[moduleId] = {
/******/ 			id: moduleId,
/******/ 			loaded: false,
/******/ 			exports: {}
/******/ 		};
/******/ 	
/******/ 		// Execute the module function
/******/ 		__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/ 	
/******/ 		// Flag the module as loaded
/******/ 		module.loaded = true;
/******/ 	
/******/ 		// Return the exports of the module
/******/ 		return module.exports;
/******/ 	}
/******/ 	
/************************************************************************/
/******/ 	/* webpack/runtime/amd options */
/******/ 	(() => {
/******/ 		__webpack_require__.amdO = {};
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/compat get default export */
/******/ 	(() => {
/******/ 		// getDefaultExport function for compatibility with non-harmony modules
/******/ 		__webpack_require__.n = (module) => {
/******/ 			var getter = module && module.__esModule ?
/******/ 				() => (module['default']) :
/******/ 				() => (module);
/******/ 			__webpack_require__.d(getter, { a: getter });
/******/ 			return getter;
/******/ 		};
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/define property getters */
/******/ 	(() => {
/******/ 		// define getter functions for harmony exports
/******/ 		__webpack_require__.d = (exports, definition) => {
/******/ 			for(var key in definition) {
/******/ 				if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
/******/ 					Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
/******/ 				}
/******/ 			}
/******/ 		};
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/global */
/******/ 	(() => {
/******/ 		__webpack_require__.g = (function() {
/******/ 			if (typeof globalThis === 'object') return globalThis;
/******/ 			try {
/******/ 				return this || new Function('return this')();
/******/ 			} catch (e) {
/******/ 				if (typeof window === 'object') return window;
/******/ 			}
/******/ 		})();
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/hasOwnProperty shorthand */
/******/ 	(() => {
/******/ 		__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/make namespace object */
/******/ 	(() => {
/******/ 		// define __esModule on exports
/******/ 		__webpack_require__.r = (exports) => {
/******/ 			if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ 				Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ 			}
/******/ 			Object.defineProperty(exports, '__esModule', { value: true });
/******/ 		};
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/node module decorator */
/******/ 	(() => {
/******/ 		__webpack_require__.nmd = (module) => {
/******/ 			module.paths = [];
/******/ 			if (!module.children) module.children = [];
/******/ 			return module;
/******/ 		};
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/nonce */
/******/ 	(() => {
/******/ 		__webpack_require__.nc = undefined;
/******/ 	})();
/******/ 	
/************************************************************************/
/******/ 	
/******/ 	// startup
/******/ 	// Load entry module and return exports
/******/ 	// This entry module can't be inlined because the eval-source-map devtool is used.
/******/ 	var __webpack_exports__ = __webpack_require__("./resources/js/directory.js");
/******/ 	
/******/ })()
;

Anon7 - 2022
AnonSec Team